leptonica-1.70/Makefile.am0000444000175000017500000000040112267653654013552 0ustar dandanACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = foreign EXTRA_DIST = config README.html leptonica-license.txt moller52.jpg version-notes.html make-for-auto make-for-local autobuild pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = lept.pc SUBDIRS = src prog leptonica-1.70/Makefile.in0000644000175000017500000006331212274452340013562 0ustar dandan# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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@ 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 = . DIST_COMMON = $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/lept.pc.in \ $(top_srcdir)/config/config.h.in $(top_srcdir)/configure \ config/config.guess config/config.sub config/depcomp \ config/install-sh config/ltmain.sh config/missing 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) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config_auto.h CONFIG_CLEAN_FILES = lept.pc CONFIG_CLEAN_VPATH_FILES = 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-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 uninstall-recursive 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=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) 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__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 GZIP_ENV = --best 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@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ 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@ ENDIANNESS = @ENDIANNESS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDI_LIBS = @GDI_LIBS@ GIFLIB_LIBS = @GIFLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEG_LIBS = @JPEG_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBTIFF_LIBS = @LIBTIFF_LIBS@ LIBTOOL = @LIBTOOL@ LIBWEBP_LIBS = @LIBWEBP_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ 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@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ ZLIB_LIBS = @ZLIB_LIBS@ 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_DUMPBIN = @ac_ct_DUMPBIN@ 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@ 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@ 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@ ACLOCAL_AMFLAGS = -I m4 AUTOMAKE_OPTIONS = foreign EXTRA_DIST = config README.html leptonica-license.txt moller52.jpg version-notes.html make-for-auto make-for-local autobuild pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = lept.pc SUBDIRS = src prog all: config_auto.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(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 .PRECIOUS: 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__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config_auto.h: stamp-h1 @if test ! -f $@; then rm -f stamp-h1; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) stamp-h1; else :; fi stamp-h1: $(top_srcdir)/config/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config_auto.h $(top_srcdir)/config/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config_auto.h stamp-h1 lept.pc: $(top_builddir)/config.status $(srcdir)/lept.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) test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ 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. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; 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" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; \ 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(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 \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ 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) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__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*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(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*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(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 \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(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__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) config_auto.h 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 mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr \ 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: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-lzma dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ 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-recursive \ uninstall uninstall-am uninstall-pkgconfigDATA # 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: leptonica-1.70/README.html0000644000175000017500000013337412273207155013347 0ustar dandan Creative Commons License This work is licensed under a Creative Commons Attribution 2.5 License.
/*====================================================================*
 -  Copyright (C) 2001 Leptonica.  All rights reserved.
 -
 -  Redistribution and use in source and binary forms, with or without
 -  modification, are permitted provided that the following conditions
 -  are met:
 -  1. Redistributions of source code must retain the above copyright
 -     notice, this list of conditions and the following disclaimer.
 -  2. Redistributions in binary form must reproduce the above
 -     copyright notice, this list of conditions and the following
 -     disclaimer in the documentation and/or other materials
 -     provided with the distribution.
 -
 -  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 -  ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 -  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 -  A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL ANY
 -  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 -  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 -  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 -  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
 -  OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 -  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 -  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *====================================================================*/

README  (24 Jan 2014; 1.70)
---------------------------

gunzip leptonica-1.70.tar.gz
tar -xvf leptonica-1.70.tar


Building leptonica
I/O libraries leptonica is dependent on
Developing with leptonica
What's in leptonica?


Building leptonica

1. Top view

  This tar includes:
    (1) src: library source and function prototypes for building liblept
    (2) prog: source for regression test, usage example programs, and
        sample images
  for building on these platforms:
     -  Linux on x86 (i386) and AMD 64 (x64)
     -  OSX (both powerPC and x86).
     -  Cygwin, msys and mingw on x86
  It should compile properly with any version of gcc from 2.95.3 onward.
  There is an additional zip file for building with MS Visual Studio.

  Libraries, executables and prototypes are easily made, as described below.

  When you extract from the archive, all files are put in a
  subdirectory 'leptonica-1.70'.  In that directory you will
  find a src directory containing the source files for the library,
  and a prog directory containing source files for various
  testing and example programs.

2. Building on Linux/Unix/MacOS

  There are two ways to build the library:

    (1) By customization:  Use the existing static makefile,
        src/makefile.static and customize the build by setting flags
        in src/environ.h.  See src/environ.h and src/makefile for details.
        Note: if you are going to develop with leptonica, I encourage
        you to use the static makefiles.

    (2) Using autoconf.  Run ./configure in this directory to
        build Makefiles here and in src.  Autoconf handles the
        following automatically:
            * architecture endianness
            * enabling Leptonica I/O image read/write functions that
              depend on external libraries (if the libraries exist)
            * enabling functions for redirecting formatted image stream
              I/O to memory (on linux only)
        After running ./configure: make; make install.  There's also
        a 'make check' for testing.

  In more detail:

    (1) Customization using the static makefiles:

       * FIRST THING: Run make-for-local.  This simply renames
               src/makefile.static  -->  src/makefile
               prog/makefile.static -->  prog/makefile
         [Note: the autoconf build will not work if you have any files
          named "makefile" in src or prog.  If you've already run
          make-for-local and renamed the static makefiles, and you then
          want to build with autoconf, run make-for-auto to rename them
          back to makefile.static.]

       * You can customize for:
         (a) Including Leptonica I/O functions that depend on external
             libraries [use flags in src/environ.h]
         (b) Adding functions for redirecting formatted image stream
             I/O to memory [use flag in src/environ.h]
         (c) Specifying the location of the object code.  By default it
             goes into a tree whose root is also the parent of the src
             and prog directories.  This can be changed using the
             ROOT_DIR variable in makefile.

       * Build the library:
         - To make an optimized version of the library (in src):
               make
         - To make a debug version of the library (in src):
               make DEBUG=yes debug
         - To make a shared library version (in src):
               make SHARED=yes shared
         - To make the prototype extraction program (in src):
               make   (to make the library first)
               make xtractprotos

       * To use shared libraries, you need to include the location of
         the shared libraries in your LD_LIBRARY_PATH.

       * To make the programs in the prog directory, first make liblept
         in src, and then do 'make' in the prog directory.

       VERY IMPORTANT: the 240+ programs in the prog directory are
       an integral part of this package.  These can be divided into
       three types:
         (1) Programs that are used as regression tests.  The most
             important of these are named *_reg, and about 60 of them
             are invoked together (alltests_reg).  These have been
             standardized and are relatively easy to write.  See
             regutils.h for details.
         (2) Programs that were used to test library functions or
             auto-generate library code.  These are useful for testing
             the behavior of small sets of functions, and for
             providing example code.
         (3) Programs that are useful applications for running on the
             command line.  They can be installed from autoconf builds
             using 'make install'.  Examples of these are the PostScript
             and pdf conversion programs: converttopdf, converttops,
             convertfilestopdf, convertfilestops, convertsegfilestopdf,
             convertsegfilestops, printimage and printsplitimage.

    (2) Building using autoconf  (Thanks to James Le Cuirot)

       Use the standard incantation, in the root directory (the
       directory with configure):
          ./configure    [build the Makefile]
          make   [builds the library and shared library versions of
                  all the progs]
          make install  [as root; this puts liblept.a into /usr/local/lib/
                         and 13 of the the progs into /usr/local/bin/ ]
          make [-j4] check  [runs the alltests_reg set of regression tests.
                             This works even if you build in a different
                             place from the distribution.]

       Configure also supports building in a separate directory from the
       source.  Run "/(path-to)/leptonica-1.70/configure" and then "make"
       from the desired build directory.

       Configure has a number of useful options; run "configure --help" for
       details.  If you're not planning to modify the library, adding the
       "--disable-dependency-tracking" option will speed up the build.  By
       default, both static and shared versions of the library are built.  Add
       the "--disable-shared" or "--disable-static" option if one or the other
       isn't needed.  To skip building the programs, use "--disable-programs".

       By default, the library is built with debugging symbols.  If you do not
       want these, use "CFLAGS=-O2 ./configure" to eliminate symbols for
       subsequent compilations, or "make CFLAGS=-O2" to override for this
       compilation only.  Another option is to use the 'install-strip' target
       (i.e., "make install-strip") to remove the debugging symbols when
       the library is installed.

       Finally, if you find that the installed programs are unable to link
       at runtime to the installed library, which is in /usr/local/lib,
       try to run configure in this way:
           LDFLAGS="-Wl,-rpath -Wl,/usr/local/lib" ./configure
       which causes the compiler to pass those options through to the linker.

       For the debian distribution, out of all the programs in the prog
       directory, we only build a small subset of general purpose
       utility programs.  This subset is the same set of programs that
       'make install' puts into /usr/local/bin.  It has no dependency on
       the image files that are bundled in the prog directory for testing.

    (3) Cross-compiling for windows

       You can use src/makefile.mingw for cross-compiling in linux.


3. Building on Windows

   (a) Building with Visual Studio

       Tom Powers has provided a set of developer notes and project files
       for building the library and applications under windows with VC++ 2008:
     

http:///www.leptonica.org/vs2008doc/index.html
http:///www.leptonica.org/download.html#VS2008


       He has also supplied a zip file that contains the entire 'lib'
       and 'include' directories needed to build Windows-based programs
       using static or dynamic versions of the leptonica library
       (including static library versions of zlib, libpng, libjpeg,
       libtiff, and giflib).
       

leptonica-1.68-win32-lib-include-dirs.zip


       You can download Tom's vs2008 package either from the download
       page or from code.google.com/p/leptonica.

   (b) Building for mingw with MSYS
       (Thanks to David Bryan)

       MSYS is a Unix-compatible build environment for the mingw compiler.
       Installing the "MinGW Compiler Suite C Compiler" and the "MSYS Basic
       System" will allow building the library with autoconf as in (2) above.
       It will also allow building with the static makefile as in (1) above if
       this option is added to the make command:

         CC="gcc -D_BSD_SOURCE -DANSI"

       Only the static library may be built this way; the autoconf method must
       be used if a shared (DLL) library is desired.

       External image libraries (see below) must be downloaded separately,
       built, and installed before building the library.  Pre-built libraries
       are available from the GnuWin project.

   (c) Building for Cygwin
       (Thanks to David Bryan)

       Cygwin is a Unix-compatible build and runtime environment.  Installing
       the "Base", "Devel", and "Graphics" packages will allow building the
       library with autoconf as in (2) above.  If the graphics libraries are
       not present in the /lib, /usr/lib, or /usr/local/lib directories, you
       must run make with the "LDFLAGS=-L/(path-to-image)/lib" option.  It
       will also allow building with the static makefile as in (1) above if
       this option is added to the make command:

         CC="gcc -ansi -D_BSD_SOURCE -DANSI"

       Only the static library may be built this way; the autoconf method must
       be used if a shared (DLL) library is desired.

I/O libraries leptonica is dependent on

   Leptonica is configured to handle image I/O using these external
   libraries: libjpeg, libtiff, libpng, libz, libgif, libwebp

   These libraries are easy to obtain.  For example, using the
   debian package manager:
       sudo apt-get install 
   where  = {libpng12-dev, libjpeg62-dev, libtiff4-dev}.

   Leptonica also allows image I/O with bmp and pnm formats, for which
   we provide the serializers (encoders and decoders).  It also
   gives output drivers for wrapping images in PostScript and PDF, which
   in turn use tiffg4, jpeg and png encoding.  Wrapping of jpeg2000
   images in PDF is also implemented.

   There is a programmatic interface to gnuplot.  To use it, you
   need only the gnuplot executable (suggest version 3.7.2 or later);
   the gnuplot library is not required.

   If you build with automake, libraries on your system will be
   automatically found and used.

   The rest of this section is for building with the static makefiles.
   The entries in environ.h specify which of these libraries to use.
   The default is to link to these four libraries:
      libjpeg.a  (standard jfif jpeg library, version 6b or 7, 8 or 9))
      libtiff.a  (standard Leffler tiff library, version 3.7.4 or later;
      libpng.a   (standard png library, suggest version 1.4.0 or later)
      libz.a     (standard gzip library, suggest version 1.2.3)
                  current non-beta version is 3.8.2)

   These libraries (and their shared versions) should be in /usr/lib.
   (If they're not, you can change the LDFLAGS variable in the makefile.)
   Additionally, for compilation, the following header files are
   assumed to be in /usr/include:
      jpeg:  jconfig.h
      png:   png.h, pngconf.h
      tiff:  tiff.h, tiffio.h

   If for some reason you do not want to link to specific libraries,
   even if you have them, stub files are included for the nine
   different output formats:
        bmp, jpeg, png, pnm, ps, pdf, tiff, gif and webp.
   For example, if you don't want to include the tiff library,
   in environ.h set:
       #define  HAVE_LIBTIFF   0
   and the stubs will be linked in.

   To read and write webp files:
      (1) Download libwebp from sourceforge
      (2) #define HAVE_LIBWEBP   1  (in environ.h)
      (3) In prog/makefile, edit ALL_LIBS to include -lwebp

   To read and write gif files:
      (1) Download version giflib-5.0.X from souceforge
      (2) #define  HAVE_LIBGIF   1  (in environ.h)
      (3) In prog/makefile, edit ALL_LIBS to include -lgif
      (4) If the library is installed into /usr/local/lib, you may need
          to add that directory to LDFLAGS; or, equivalently, add
          that path to the LD_LIBRARY_PATH environment variable.
      (5) Note: do not use giflib-4.1.4: binary comp and decomp
          don't pack the pixel data and are ridiculously slow.

Developing with leptonica

You are encouraged to use the static makefiles if you are developing
applications using leptonica.  The following instructions assume
that you are using the static makefiles and customizing environ.h.

1. Automatic generation of prototypes

   The prototypes are automatically generated by the program xtractprotos.
   They can either be put in-line into allheaders.h, or they can be
   written to a file leptprotos.h, which is #included in allheaders.h.
   Note: (1) We supply the former version of allheaders.h.
         (2) all .c files simply include allheaders.h.

   First, make xtractprotos:
       make xtractprotos

   Then to generate the prototypes and make allheaders.h, do one of
   these two things:
       make allheaders  [puts everything into allheaders.h]
       make allprotos   [generates a file leptprotos.h containing the
                         function prototypes, and includes it in allheaders.h]

   Things to note about xtractprotos, assuming that you are developing
   in Leptonica and need to regenerate the prototypes in allheaders.h:

     (1) xtractprotos is part of Leptonica.  You can 'make' it in either
         src or prog (see the makefile).
     (2) You can output the prototypes for any C file to stdout by running:
             xtractprotos      or
             xtractprotos -prestring=[string] 
     (3) The source for xtractprotos has been packaged up into a tar
         containing just the Leptonica files necessary for building it
         in linux.  The tar file is available at:
             www.leptonica.com/source/xtractlib-1.5.tar.gz

2. GNU runtime functions for stream redirection to memory

   There are two non-standard gnu functions, fmemopen() and open_memstream(),
   that only work on linux and conveniently allow memory I/O with a file
   stream interface.  This is convenient for compressing and decompressing
   image data to memory rather than to file.  Stubs are provided
   for all these I/O functions.  Default is not to enable them, in
   deference to the OSX developers, who don't have these functions
   available.  To enable, #define HAVE_FMEMOPEN  1  (in environ.h).
   If it is not enabled, raster to compressed data in memory is
   accomplished through a temporary file.
   See 9 for more details on image I/O formats.

   If you're building with the autoconf programs, these two functions are
   automatically enabled if available.

3. Typedefs

   A deficiency of C is that no standard has been universally
   adopted for typedefs of the built-in types.  As a result,
   typedef conflicts are common, and cause no end of havoc when
   you try to link different libraries.  If you're lucky, you
   can find an order in which the libraries can be linked
   to avoid these conflicts, but the state of affairs is aggravating.

   The most common typedefs use lower case variables: uint8, int8, ...
   The png library avoids typedef conflicts by altruistically
   appending "png_" to the type names.  Following that approach,
   Leptonica appends "l_" to the type name.  This should avoid
   just about all conflicts.  In the highly unlikely event that it doesn't,
   here's a simple way to change the type declarations throughout
   the Leptonica code:
    (1) customize a file "converttypes.sed" with the following lines:
        /l_uint8/s//YOUR_UINT8_NAME/g
        /l_int8/s//YOUR_INT8_NAME/g
        /l_uint16/s//YOUR_UINT16_NAME/g
        /l_int16/s//YOUR_INT16_NAME/g
        /l_uint32/s//YOUR_UINT32_NAME/g
        /l_int32/s//YOUR_INT32_NAME/g
        /l_float32/s//YOUR_FLOAT32_NAME/g
        /l_float64/s//YOUR_FLOAT64_NAME/g
    (2) in the src and prog directories:
       - if you have a version of sed that does in-place conversion:
            sed -i -f converttypes.sed *
       - else, do something like (in csh)
           foreach file (*)
           sed -f converttypes.sed $file > tempdir/$file
           end

   If you are using Leptonica with a large code base that typedefs the
   built-in types differently from Leptonica, just edit the typedefs
   in environ.h.  This should have no side-effects with other libraries,
   and no issues should arise with the location in which liblept is
   included.

   For compatibility with 64 bit hardware and compilers, where
   necessary we use the typedefs in stdint.h to specify the pointer
   size (either 4 or 8 byte).

4. Compile-time control over stderr output (see environ.h)

   Leptonica provides both compile-time and run-time control over
   messages and debug output (thanks to Dave Bryan).  Both compile-time
   and run-time severity thresholds can be set.  The run-time threshold
   can also be set by an environmental variable.  Messages are
   vararg-formatted and of 3 types: error, warning, informational.
   These are all macros, and can be further suppressed when
   NO_CONSOLE_IO is defined on the compile line.  For production code
   where no output is to go to stderr, compile with -DNO_CONSOLE_IO.

5. In-memory raster format (Pix)

   Unlike many other open source packages, Leptonica uses packed
   data for images with all bit/pixel (bpp) depths, allowing us
   to process pixels in parallel.  For example, rasterops works
   on all depths with 32-bit parallel operations throughout.
   Leptonica is also explicitly configured to work on both little-endian
   and big-endian hardware.  RGB image pixels are always stored
   in 32-bit words, and a few special functions are provided for
   scaling and rotation of RGB images that have been optimized by
   making explicit assumptions about the location of the R, G and B
   components in the 32-bit pixel.  In such cases, the restriction
   is documented in the function header.  The in-memory data structure
   used throughout Leptonica to hold the packed data is a Pix,
   which is defined and documented in pix.h.  The alpha component
   in RGB images is significantly better supported, starting in 1.70.

   Additionally, a FPix is provided for handling 2D arrays of floats,
   and a DPix is provided for 2D arrays of doubles.  Converters
   between these and the Pix are given.

6. Conversion between Pix and other in-memory raster formats

 . If you use Leptonica with other imaging libraries, you will need
   functions to convert between the Pix and other image data
   structures.  To make a Pix from other image data structures, you
   will need to understand pixel packing, pixel padding, component
   ordering and byte ordering on raster lines.  See the file pix.h
   for the specification of image data in the pix.

7. Custom memory management

   Leptonica allows you to use custom memory management (allocator,
   deallocator).  For Pix, which tend to be large, the alloc/dealloc
   functions can be set programmatically.  For all other structs and arrays,
   the allocators are specified in environ.h.  Default functions
   are malloc and free.  We have also provided a sample custom
   allocator/deallocator for Pix, in pixalloc.c.

What's in leptonica?

1. Rasterops

   This is a source for a clean, fast implementation of rasterops.
   You can find details starting at the Leptonica home page,
   and also by looking directly at the source code.
   The low-level code is in roplow.c and ropiplow.c, and an
   interface is given in rop.c to the simple Pix image data structure.

2. Binary morphology

   This is a source for efficient implementations of binary morphology
   Details are found starting at the Leptonica home page, and by reading
   the source code.

   Binary morphology is implemented two ways:

     (a) Successive full image rasterops for arbitrary
         structuring elements (Sels)

     (b) Destination word accumulation (dwa) for specific Sels.
         This code is automatically generated.  See, for example,
         the code in fmorphgen.1.c and fmorphgenlow.1.c.
         These files were generated by running the program
         prog/fmorphautogen.c. Results can be checked by comparing dwa
         and full image rasterops; e.g., prog/fmorphauto_reg.c.

   Method (b) is considerably faster than (a), which is the
   reason we've gone to the effort of supporting the use
   of this method for all Sels.  We also support two different
   boundary conditions for erosion.

   Similarly, dwa code for the general hit-miss transform can
   be auto-generated from an array of hit-miss Sels.
   When prog/fhmtautogen.c is compiled and run, it generates
   the dwa C code in fhmtgen.1.c and fhmtgenlow.1.c.  These
   files can then be compiled into the libraries or into other programs.
   Results can be checked by comparing dwa and rasterop results;
   e.g., prog/fhmtauto_reg.c

   Several functions with simple parsers are provided to execute a
   sequence of morphological operations (plus binary rank reduction
   and replicative expansion).  See morphseq.c.

   The structuring element is represented by a simple Sel data structure
   defined in morph.h.  We provide (at least) seven ways to generate
   Sels in sel1.c, and several simple methods to generate hit-miss
   Sels for pattern finding in selgen.c.

   In use, the most common morphological Sels are separable bricks,
   of dimension n x m (where either n or m, but not both, is commonly 1).
   Accordingly, we provide separable morphological operations on brick
   Sels, using for binary both rasterops and dwa.  Parsers are provided
   for a sequence of separable binary (rasterop and dwa) and grayscale
   brick morphological operations, in morphseq.c.  The main
   advantage in using the parsers is that you don't have to create
   and destroy Sels, or do any of the intermediate image bookkeeping.

   We also give composable separable brick functions for binary images,
   for both rasterop and dwa.  These decompose each of the linear
   operations into a sequence of two operations at different scales,
   reducing the operation count to a sum of decomposition factors,
   rather than the (un-decomposed) product of factors.
   As always, parsers are provided for a sequence of such operations.

3. Grayscale morphology and rank order filters

   We give an efficient implementation of grayscale morphology for brick
   Sels.  See the Leptonica home page and the source code.

   Brick Sels are separable into linear horizontal and vertical elements.
   We use the van Herk/Gil-Werman algorithm, that performs the calculations
   in a time that is independent of the size of the Sels.  Implementations
   of tophat and hdome are also given.  The low-level code is in graymorphlow.c.

   We also provide grayscale rank order filters for brick filters.
   The rank order filter is a generalization of grayscale morphology,
   that selects the rank-valued pixel (rather than the min or max).
   A color rank order filter applies the grayscale rank operation
   independently to each of the (r,g,b) components.

4. Image scaling

   Leptonica provides many simple and relatively efficient
   implementations of image scaling.  Some of them are listed here;
   for the full set see the web page and the source code.

   Grayscale and color images are scaled using:
      - sampling
      - lowpass filtering followed by sampling,
      - area mapping
      -  linear interpolation

   Scaling operations with antialiased sampling, area mapping,
   and linear interpolation are limited to 2, 4 and 8 bpp gray,
   24 bpp full RGB color, and 2, 4 and 8 bpp colormapped
   (bpp == bits/pixel).  Scaling operations with simple sampling
   can be done at 1, 2, 4, 8, 16 and 32 bpp.  Linear interpolation
   is slower but gives better results, especially for upsampling.
   For moderate downsampling, best results are obtained with area
   mapping scaling.  With very high downsampling, either area mapping
   or antialias sampling (lowpass filter followed by sampling) give
   good results.  Fast area map with power-of-2 reduction are also
   provided.  Optional sharpening after resampling is provided to
   improve appearance by reducing the visual effect of averaging
   across sharp boundaries.

   For fast analysis of grayscale and color images, it is useful to
   have integer subsampling combined with pixel depth reduction.
   RGB color images can thus be converted to low-resolution
   grayscale and binary images.

   For binary scaling, the dest pixel can be selected from the
   closest corresponding source pixel.  For the special case of
   power-of-2 binary reduction, low-pass rank-order filtering can be
   done in advance.  Isotropic integer expansion is done by pixel replication.

   We also provide 2x, 3x, 4x, 6x, 8x, and 16x scale-to-gray reduction
   on binary images, to produce high quality reduced grayscale images.
   These are integrated into a scale-to-gray function with arbitrary
   reduction.

   Conversely, we have special 2x and 4x scale-to-binary expansion
   on grayscale images, using linear interpolation on grayscale
   raster line buffers followed by either thresholding or dithering.

   There are also image depth converters that don't have scaling,
   such as unpacking operations from 1 bpp to grayscale, and
   thresholding and dithering operations from grayscale to 1, 2 and 4 bpp.

5. Image shear and rotation (and affine, projective, ...)

   Image shear is implemented with both rasterops and linear interpolation.
   The rasterop implementation is faster and has no constraints on image
   depth.  We provide horizontal and vertical shearing about an
   arbitrary point (really, a line), both in-place and from source to dest.
   The interpolated shear is used on 8 bpp and 32 bpp images, and
   gives a smoother result.  Shear is used for the fastest implementations
   of rotation.

   There are three different types of general image rotators:

     a.  Grayscale rotation using area mapping
         - pixRotateAM() for 8 bit gray and 24 bit color, about center
         - pixRotateAMCorner() for 8 bit gray, about image UL corner
         - pixRotateAMColorFast() for faster 24 bit color, about center

     b.  Rotation of an image of arbitrary bit depth, using
         either 2 or 3 shears.  These rotations can be done
         about an arbitrary point, and they can be either
         from source to dest or in-place; e.g.
         - pixRotateShear()
         - pixRotateShearIP()

     c.  Rotation by sampling.  This can be used on images of arbitrary
         depth, and done about an arbitrary point.  Colormaps are retained.

   The area mapping rotations are slower and more accurate,
   because each new pixel is composed using an average of four
   neighboring pixels in the original image; this is sometimes
   also called "antialiasing".  Very fast color area mapping
   rotation is provided.  The low-level code is in rotateamlow.c.

   The shear rotations are much faster, and work on images
   of arbitrary pixel depth, but they just move pixels
   around without doing any averaging.  The pixRotateShearIP()
   operates on the image in-place.

   We also provide orthogonal rotators (90, 180, 270 degree; left-right
   flip and top-bottom flip) for arbitrary image depth.
   And we provide implementations of affine, projective and bilinear
   transforms, with both sampling (for speed) and interpolation
   (for antialiasing).

6. Sequential algorithms

   We provide a number of fast sequential algorithms, including
   binary and grayscale seedfill, and the distance function for
   a binary image.  The most efficient binary seedfill is
   pixSeedfill(), which uses Luc Vincent's algorithm to iterate
   raster- and antiraster-ordered propagation, and can be used
   for either 4- or 8-connected fills.  Similar raster/antiraster
   sequential algorithms are used to generate a distance map from
   a binary image, and for grayscale seedfill.  We also use Heckbert's
   stack-based filling algorithm for identifying 4- and 8-connected
   components in a binary image.  A fast implementation of the
   watershed transform, using a priority queue, is included.

7. Image enhancement

   A few simple image enhancement routines for grayscale and
   color images have been provided.  These include intensity mapping
   with gamma correction and contrast enhancement, as well as edge
   sharpening, smoothing, and hue and saturation modification.

8. Convolution and cousins

   A number of standard image processing operations are also
   included, such as block convolution, binary block rank filtering,
   grayscale and rgb rank order filtering, and edge and local
   minimum/maximum extraction.   Generic convolution is included,
   for both separable and non-separable kernels, using float arrays
   in the Pix.  Two implementations are included for grayscale and
   color bilateral filtering: a straightforward (slow) one, and a
   fast, approximate, separable one.

9. Image I/O

   Some facilities have been provided for image input and output.
   This is of course required to build executables that handle images,
   and many examples of such programs, most of which are for
   testing, can be built in the prog directory.  Functions have been
   provided to allow reading and writing of files in JPEG, PNG,
   TIFF, BMP, PNM ,GIF and WEBPformats.  These formats were chosen
   for the following reasons:

    - JFIF JPEG is the standard method for lossy compression
      of grayscale and color images.  It is supported natively
      in all browsers, and uses a good open source compression
      library.  Decompression is supported by the rasterizers
      in PS and PDF, for level 2 and above.  It has a progressive
      mode that compresses about 10% better than standard, but
      is considerably slower to decompress.  See jpegio.c.

    - PNG is the standard method for lossless compression
      of binary, grayscale and color images.  It is supported
      natively in all browsers, and uses a good open source
      compression library (zlib).  It is superior in almost every
      respect to GIF (which, until recently, contained proprietary
      LZW compression).  See pngio.c.

    - TIFF is a common interchange format, which supports different
      depths, colormaps, etc., and also has a relatively good and
      widely used binary compression format (CCITT Group 4).
      Decompression of G4 is supported by rasterizers in PS and PDF,
      level 2 and above.  G4 compresses better than PNG for most
      text and line art images, but it does quite poorly for halftones.
      It has good and stable support by Leffler's open source library,
      which is clean and small.  Tiff also supports multipage
      images through a directory structure.  See tiffio.c

    - BMP has (until recently) had no compression.  It is a simple
      format with colormaps that requires no external libraries.
      It is commonly used because it is a Microsoft standard,
      but has little besides simplicity to recommend it.  See bmpio.c.

    - PNM is a very simple, old format that still has surprisingly
      wide use in the image processing community.  It does not
      support compression or colormaps, but it does support binary,
      grayscale and rgb images.  Like BMP, the implementation
      is simple and requires no external libraries.  See pnmio.c.

    - WEBP is a new wavelet encoding method derived from libvpx,
      a video compression library.  It is rapidly growing in acceptance,
      and is supported natively in several browsers (as of Dec 2013).
      Leptonica provides an interface through webp into the underlying
      codec.  You need to download libwebp.

    - GIF is still widely used in the world.  With the expiration
      of the LZW patent, it is practical to add support for GIF files.
      The open source gif library is relatively incomplete and
      unsupported (because of the Sperry-Rand-Burroughs-Univac
      patent history).   See gifio.c.

   Here's a summary of compression support and limitations:
      - All formats except JPEG support 1 bpp binary.
      - All formats support 8 bpp grayscale (GIF must have a colormap).
      - All formats except GIF support 24 bpp rgb color.
      - All formats except PNM support 8 bpp colormap.
      - PNG and PNM support 2 and 4 bpp images.
      - PNG supports 2 and 4 bpp colormap, and 16 bpp without colormap.
      - PNG, JPEG, TIFF and GIF support image compression; PNM and BMP do not.
      - WEBP supports 24 bpp rgb color.
   Use prog/ioformats_reg for a regression test on all but GIF and WEBP.
   Use prog/gifio_reg for testing GIF.

   We provide generators for PS output, from all types of input images.
   The output can be either uncompressed or compressed with level 2
   (ccittg4 or dct) or level 3 (flate) encoding.  You have flexibility
   for scaling and placing of images, and for printing at different
   resolutions.  You can also compose mixed raster (text, image) PS.
   See psio1.c for examples of how to output PS for different applications.
   As examples of usage, see:
     * prog/converttops.c for a general image --> PS conversion
           for printing.  You can specify compression level (1, 2, or 3).
     * prog/convertfilestops.c to generate a multipage level 3 compressed
           PS file that can then be converted to pdf with ps2pdf.
     * prog/convertsegfilestops.c to generate a multipage, mixed raster,
           level 2 compressed PS file.

   We provide generators for PDF output, again from all types of input
   images, and with ccittg4, dct, flate and jpx (jpeg2000) compression.
   You can do the following for PDF:
     * Put any number of images onto a page, with specified input
       resolution, location and compression.
     * Write a mixed raster PDF, given an input image and a segmentation
       mask.  Non-image regions are written in G4 (fax) encoding.
     * Concatenate single-page PDF wrapped images into a single PDF file.
     * Build a PDF file of all images in a directory or array of file names.

   Note: any or all of these I/O library calls can be stubbed out at
         compile time, using the environment variables in environ.h.

   For all formatted reads and writes, we support read from memory
   and write to memory.  (We cheat with gif, using a file intermediary.)
   For all formats except for TIFF, these memory I/O functions
   are supported through open_memstream() and fmemopen(),
   which only is available with the gnu C runtime library (glibc).
   Therefore, except for TIFF, you will not be able to do memory
   supported read/writes on these platforms:
       OSX, Windows, Solaris
   By default, these non-POSIX functions are disabled.  To enable memory
   I/O for image formatted read/writes, see environ.h.


10. Colormap removal and color quantization

   Leptonica provides functions that remove colormaps, for conversion
   to either 8 bpp gray or 24 bpp RGB.  It also provides the inverse
   function to colormap removal; namely, color quantization
   from 24 bpp full color to 8 bpp colormap with some number
   of colormap colors.  Several versions are provided, some that
   use a fast octree vector quantizer and others that use
   a variation of the median cut quantizer.  For high-level interfaces,
   see for example: pixConvertRGBToColormap(), pixOctreeColorQuant(),
   pixOctreeQuantByPopulation(), pixFixedOctcubeQuant256(),
   and pixMedianCutQuant().

11. Programmatic image display

   For debugging, several pixDisplay* functions in writefile.c are given.
   Two (pixDisplay and pixDisplayWithTitle) can be called to display
   an image using one of several display programs (xv, xli, xzgv, l_view).
   If necessary to fit on the screen, the image is reduced in size,
   with 1 bpp images being converted to grayscale for readability.
   (This is much better than letting xv do the reduction).
   Another function, pixDisplayWrite(), writes images to disk under
   control of a reduction/disable flag, which then allows
   either viewing with pixDisplayMultiple(), or the generation
   of a composite image using, for example, pixaDisplayTiledAndScaled().
   These files can also be gathered up into a compressed PostScript file,
   using prog/convertfilestops, and viewed with evince, or converted
   to pdf.  Common image display programs are: xv, xli, xzgv, display,
   gthumb, gqview, evince, gv and acroread.  Finally, a set of
   images can be saved into a pixa (array of pix), specifying the
   eventual layout into a single pix, using pixaSaveTiled*().

12. Document image analysis

   Many functions have been included specifically to help with
   document image analysis.  These include skew and text orientation
   detection; page segmentation; baseline finding for text;
   unsupervised classification of connected components, characters
   and words; dewarping camera images; adaptive binarization; and
   a simple book-adaptive classifier for various character sets,
   segmentation for newspaper articles, etc.

13. Data structures

   Simple data structures are provided for safe and efficient handling
   of arrays of numbers, strings, pointers, and bytes.  The generic
   pointer array is implemented in four ways: as a stack, a queue,
   a heap (used to implement a priority queue), and an array with
   insertion and deletion, from which the stack operations form a subset.
   Byte arrays are implemented both as a wrapper around the actual
   array and as a queue.  The string arrays are particularly useful
   for both parsing and composing text.  Generic lists with
   doubly-linked cons cells are also provided.

14. Examples of programs that are easily built using the library:

    - for plotting x-y data, we give a programmatic interface
      to the gnuplot program, with output to X11, png, ps or eps.
      We also allow serialization of the plot data, in a form
      such that the data can be read, the commands generated,
      and (finally) the plot constructed by running gnuplot.

    - a simple jbig2-type classifier, using various distance
      metrics between image components (correlation, rank
      hausdorff); see prog/jbcorrelation.c, prog/jbrankhaus.c.

    - a simple color segmenter, giving a smoothed image
      with a small number of the most significant colors.

    - a program for converting all images in a directory
      to a PostScript file, and a program for printing an image
      in any (supported) format to a PostScript printer.

    - various programs for generating pdf files from compressed
      images, including very fast ones that don't scale and
      avoid transcoding if possible.

    - converters between binary images and SVG format.

    - an adaptive recognition utility for training and identifying
      text characters in a multipage document such as a book.

    - a bitmap font facility that allows painting text onto
      images.  We currently support one font in several sizes.
      The font images and postscript programs for generating
      them are stored in prog/fonts/.

    - a binary maze game lets you generate mazes and find shortest
      paths between two arbitrary points, if such a path exists.
      You can also compute the "shortest" (i.e., least cost) path
      between points on a grayscale image.

    - a 1D barcode reader.  This is still in an early stage of development,
      with little testing, and it only decodes 6 formats.

    - a utility that will dewarp images of text that were captured
      with a camera at close range.

    - a sudoku solver, including a pretty good test for uniqueness

    - see (13, above) for other document image applications.

15. JBig2 encoder

   Leptonica supports an open source jbig2 encoder (yes, there is one!),
   which can be downloaded from:
       http://www.imperialviolet.org/jbig2.html.
   To build the encoder, use the most recent version.  This bundles
   Leptonica 1.63.  Once you've built the encoder, use it to compress
   a set of input image files:  (e.g.)
       ./jbig2 -v -s   >   
   You can also generate a pdf wrapping for the output jbig2.  To do that,
   call jbig2 with the -p arg, which generates a symbol file (output.sym)
   plus a set of location files for each input image (output.0000, ...):
        ./jbig2 -v -s -p 
   and then generate the pdf:
       python pdf.py output  >  
   See the usage documentation for the jbig2 compressor at:
       http://www.imperialviolet.org/binary/jbig2enc.html
   You can uncompress the jbig2 files using jbig2dec, which can be
   downloaded and built from:
       http://jbig2dec.sourceforge.net/

16. Versions

   New versions of the Leptonica library are released approximately
   6 times a year, and version numbers are provided for each release in
   the makefile and in allheaders.h.  All even versions from 1.42 to 1.60
   have been archived at http://code.google.com/p/leptonica, as well as all
   versions after 1.60.  However, code.google.com is going away in the
   near future, and these will be put somewhere else.  Consult the
   leptonica site for the links.

   Downloads of leptonica increased by nearly an order of magnitude with
   1.69, due to bundling with tesseract and incorporation in ubuntu 12-04.
   Leptonica has about 2400 functions, and the binary API has changed
   with the new 1.70 release.  Having a proper binary release version
   is required for all debian packages.  The binary release version
   for 1.69 is 3.0.0, and for 1.70 it is 4.0.0.

   A brief version chronology is maintained in version-notes.html.
   Starting with gcc 4.3.3, error warnings (-Werror) are given for
   minor infractions like not checking return values of built-in C
   functions.  I have attempted to eliminate these warnings.
   In any event, you will see warnings with the -Wall flag.

leptonica-1.70/aclocal.m40000644000175000017500000124454112273603072013362 0ustar dandan# generated automatically by aclocal 1.11.3 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009, 2010, 2011 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_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.68],, [m4_warning([this file was generated for autoconf 2.68. 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'.])]) # 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 # 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], [[!?.]$], [], [.]) )]) # _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 permision 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' ;; netbsdelf*-gnu) version_type=linux 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='NetBSD ld.elf_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* | netbsdelf*-gnu) 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* | netbsdelf*-gnu) ;; *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 ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _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 ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=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* | netbsdelf*-gnu) 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 _LT_TAGVAR(link_all_deplibs, $1)=no 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* | netbsdelf*-gnu) 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 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 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 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 # 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 # _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], []) 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])]) # 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 ]) # 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) ]) # 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])]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008, 2011 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. # serial 1 # 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.11' 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.11.3], [], [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.11.3])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, 2003, 2005, 2011 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. # serial 1 # 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], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # 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. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$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, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009, # 2010, 2011 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. # serial 12 # 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", "GCJ", or "OBJC". # 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 ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" 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 8's {/usr,}/bin/sh. touch 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, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) 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, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # 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. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 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. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _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. FIXME. This creates each `.P' file that we will # 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" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # 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. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 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. # serial 16 # 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. # 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.62])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], [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], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [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([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. 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)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl 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 ]) 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, 2003, 2005, 2008, 2011 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. # serial 1 # 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}" != 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, 2005 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. # serial 2 # 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])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 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. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # 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. # serial 6 # 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 supports --run. # If it does, 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 --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006, 2011 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. # serial 1 # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008, 2010 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. # serial 5 # _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])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # 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. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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 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)]) # Copyright (C) 2009, 2011 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. # serial 2 # 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], [ --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0')]) 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, 2003, 2005, 2011 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. # serial 1 # 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, 2008, 2010 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. # serial 3 # _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, 2005, 2012 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. # serial 2 # _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}']) m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. 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 leptonica-1.70/autobuild0000755000175000017500000000012712271306324013423 0ustar dandan#!/bin/sh # # autobuild libtoolize -c -f aclocal autoheader autoconf automake -a -c leptonica-1.70/config/0000755000175000017500000000000012274453055012761 5ustar dandanleptonica-1.70/config/config.h.in0000644000175000017500000000475312273602600015004 0ustar dandan/* config/config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `fmemopen' function. */ #undef HAVE_FMEMOPEN /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have giflib. */ #undef HAVE_LIBGIF /* Define to 1 if you have jpeg. */ #undef HAVE_LIBJPEG /* Define to 1 if you have libpng. */ #undef HAVE_LIBPNG /* Define to 1 if you have libtiff. */ #undef HAVE_LIBTIFF /* Define to 1 if you have libwebp. */ #undef HAVE_LIBWEBP /* Define to 1 if you have zlib. */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Define to `unsigned int' if does not define. */ #undef size_t leptonica-1.70/config/config.guess0000755000175000017500000012743212273602600015301 0ustar dandan#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # 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 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, 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 Per Bothner. Please send patches (context # diff format) to and include a ChangeLog # entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # 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 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 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 # 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 ;; *: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/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` 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 ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*: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-gnu`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/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-gnu 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="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${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-gnu else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-gnueabi else echo ${UNAME_MACHINE}-unknown-linux-gnueabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-gnu exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) LIBC=gnu eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu 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-gnu"; exit; } ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu 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-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu 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 configury 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 ;; 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 case $UNAME_PROCESSOR in i386) eval $set_cc_for_build 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 UNAME_PROCESSOR="x86_64" fi fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac 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 #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi 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: leptonica-1.70/config/install-sh0000755000175000017500000003325612273602600014765 0ustar dandan#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-01-19.21; # 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. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # 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_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' 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 no_target_directory= 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 *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for `test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done 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 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 -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` 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-writeable 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 eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob 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` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob 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: leptonica-1.70/config/ltmain.sh0000644000175000017500000105204012274452335014603 0ustar dandan # 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 Debian-2.4.2-1ubuntu1 # 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 Debian-2.4.2-1ubuntu1" 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 retuned 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) 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%" test "X$link_all_deplibs" != Xno && libs="$libs $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" 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 elif test "$linkmode" != prog && test "$linkmode" != lib; then func_fatal_error "\`$lib' is not a convenience library" fi 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 ;; *) func_fatal_configuration "$modename: unknown library version type \`$version_type'" ;; 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 leptonica-1.70/config/missing0000755000175000017500000002415212273602600014353 0ustar dandan#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2012-01-06.13; # UTC # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006, # 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. # Originally 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 run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file yacc create \`y.tab.[ch]', if possible, from existing .[ch] 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 # normalize program name to check for. program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). This is about non-GNU programs, so use $1 not # $program. case $1 in lex*|yacc*) # Not GNU programs, they don't have --version. ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $program in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te*) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison*|yacc*) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex*|flex*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG=\${$#} case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit $? fi ;; makeinfo*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # 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: leptonica-1.70/config/config.sub0000755000175000017500000010517612273602600014745 0ustar dandan#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, # 2011, 2012 Free Software Foundation, Inc. timestamp='2012-02-10' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # 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 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, 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. # Please send patches to . Submit a context # diff and a properly formatted GNU ChangeLog entry. # # 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 (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 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-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*) 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 | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | 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 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | 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 \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 \ | ns16k | ns32k \ | open8 \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | 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 \ | 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 ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | 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-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | 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-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | 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-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | 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-* \ | 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 ;; 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 ;; mingw32) basic_machine=i386-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 ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i386-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) 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* \ | -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* \ | -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* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -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*) # 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 ;; -kaos*) os=-kaos ;; -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 ;; 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: leptonica-1.70/config/depcomp0000755000175000017500000004755612273602601014347 0ustar dandan#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2011-12-04.11; # UTC # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009, 2010, # 2011 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 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" # 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 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## 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). ## - 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 -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## 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. tr ' ' ' ' < "$tmpdepfile" | ## 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. 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 -eq 0; then : else 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 ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else 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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` 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 -eq 0; then : else 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,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else echo "#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. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # 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.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; 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" = 0; then : else 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/\(.*\)/ \1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/ / G p }' >> "$depfile" 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:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. 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:: \1 \\:p' >> "$depfile" echo " " >> "$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: leptonica-1.70/configure0000755000175000017500000155175112273603074013437 0ustar dandan#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68 for leptonica 1.70. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 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 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" 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 : # 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 export CONFIG_SHELL 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+"$@"} 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_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; } # 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 -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' 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 if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # 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='leptonica' PACKAGE_TARNAME='leptonica' PACKAGE_VERSION='1.70' PACKAGE_STRING='leptonica 1.70' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="src/adaptmap.c" # 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 ENDIANNESS APPLE_UNIVERSAL_BUILD AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V GDI_LIBS LIBWEBP_LIBS LIBTIFF_LIBS GIFLIB_LIBS JPEG_LIBS LIBPNG_LIBS ZLIB_LIBS LIBM ENABLE_PROGRAMS_FALSE ENABLE_PROGRAMS_TRUE am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR am__untar am__tar AMTAR am__leading_dot SET_MAKE mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM CPP OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL AWK RANLIB STRIP ac_ct_AR AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP EGREP GREP SED OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build LIBTOOL 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 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' ac_subst_files='' ac_user_opts=' enable_option_checking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_dependency_tracking with_zlib with_libpng with_jpeg with_giflib with_libtiff with_libwebp enable_programs enable_silent_rules ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # 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' 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 ;; -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 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 $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 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 leptonica 1.70 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] --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/leptonica] --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 leptonica 1.70:";; 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-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) --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-programs do not build additional programs --enable-silent-rules less verbose build output (undo: `make V=1') --disable-silent-rules verbose build output (undo: `make V=0') 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). --without-zlib do not include zlib support --without-libpng do not include libpng support --without-jpeg do not include jpeg support --without-giflib do not include giflib support --without-libtiff do not include libtiff support --without-libwebp do not include libwebp 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 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 leptonica configure 1.70 generated by GNU Autoconf 2.68 Copyright (C) 2010 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_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 || $as_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_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_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_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { 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 eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=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 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_type 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 leptonica $as_me 1.70, which was generated by GNU Autoconf 2.68. 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 ac_aux_dir= for ac_dir in config "$srcdir"/config; 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 config \"$srcdir\"/config" "$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. ac_config_headers="$ac_config_headers config_auto.h:config/config.h.in" 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" # 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 # 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 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 #include #include /* 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 { $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" { test -f "$ac_path_SED" && $as_test_x "$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" { test -f "$ac_path_GREP" && $as_test_x "$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" { test -f "$ac_path_EGREP" && $as_test_x "$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" { test -f "$ac_path_FGREP" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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* | netbsdelf*-gnu) 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 # 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 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 { $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 # Set options enable_dlopen=no enable_win32_dll=no # 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 # 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* 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 ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=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* | netbsdelf*-gnu) 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 link_all_deplibs=no 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* | netbsdelf*-gnu) 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' ;; netbsdelf*-gnu) version_type=linux 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='NetBSD ld.elf_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" ac_config_commands="$ac_config_commands libtool" # Only expand once: am__api_version='1.11' # 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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; } # Just in case sleep 1 echo timestamp > conftest.file # 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 ( 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 rm -f conftest.file 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 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; } 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 --run true"; then am_missing_run="$MISSING --run " 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}" != 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$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; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac { $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 DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # 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 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='leptonica' VERSION='1.70' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # 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"} # We need awk for the "check" target. 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}' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' 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 8's {/usr,}/bin/sh. touch 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 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 # Checks for programs. 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$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 { $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 #include #include /* 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 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 { $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 { $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 # Checks for arguments. # Check whether --with-zlib was given. if test "${with_zlib+set}" = set; then : withval=$with_zlib; fi # Check whether --with-libpng was given. if test "${with_libpng+set}" = set; then : withval=$with_libpng; fi # Check whether --with-jpeg was given. if test "${with_jpeg+set}" = set; then : withval=$with_jpeg; fi # Check whether --with-giflib was given. if test "${with_giflib+set}" = set; then : withval=$with_giflib; fi # Check whether --with-libtiff was given. if test "${with_libtiff+set}" = set; then : withval=$with_libtiff; fi # Check whether --with-libwebp was given. if test "${with_libwebp+set}" = set; then : withval=$with_libwebp; fi # Check whether --enable-programs was given. if test "${enable_programs+set}" = set; then : enableval=$enable_programs; fi if test "x$enable_programs" != xno; then ENABLE_PROGRAMS_TRUE= ENABLE_PROGRAMS_FALSE='#' else ENABLE_PROGRAMS_TRUE='#' ENABLE_PROGRAMS_FALSE= fi # Checks for libraries. LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _mwvalidcheckl in -lmw" >&5 $as_echo_n "checking for _mwvalidcheckl in -lmw... " >&6; } if ${ac_cv_lib_mw__mwvalidcheckl+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmw $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 _mwvalidcheckl (); int main () { return _mwvalidcheckl (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mw__mwvalidcheckl=yes else ac_cv_lib_mw__mwvalidcheckl=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_mw__mwvalidcheckl" >&5 $as_echo "$ac_cv_lib_mw__mwvalidcheckl" >&6; } if test "x$ac_cv_lib_mw__mwvalidcheckl" = xyes; then : LIBM="-lmw" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 $as_echo_n "checking for cos in -lm... " >&6; } if ${ac_cv_lib_m_cos+:} 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 cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes else ac_cv_lib_m_cos=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_cos" >&5 $as_echo "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes; then : LIBM="$LIBM -lm" fi ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cos in -lm" >&5 $as_echo_n "checking for cos in -lm... " >&6; } if ${ac_cv_lib_m_cos+:} 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 cos (); int main () { return cos (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_cos=yes else ac_cv_lib_m_cos=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_cos" >&5 $as_echo "$ac_cv_lib_m_cos" >&6; } if test "x$ac_cv_lib_m_cos" = xyes; then : LIBM="-lm" fi ;; esac if test "x$with_zlib" != xno; then : { $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 : $as_echo "#define HAVE_LIBZ 1" >>confdefs.h ZLIB_LIBS=-lz else if test "x$with_zlib" = xyes; then : as_fn_error $? "zlib support requested but library not found" "$LINENO" 5 fi fi fi if test "x$with_libpng" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for png_read_png in -lpng" >&5 $as_echo_n "checking for png_read_png in -lpng... " >&6; } if ${ac_cv_lib_png_png_read_png+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpng $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 png_read_png (); int main () { return png_read_png (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_png_png_read_png=yes else ac_cv_lib_png_png_read_png=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_png_png_read_png" >&5 $as_echo "$ac_cv_lib_png_png_read_png" >&6; } if test "x$ac_cv_lib_png_png_read_png" = xyes; then : $as_echo "#define HAVE_LIBPNG 1" >>confdefs.h LIBPNG_LIBS=-lpng else if test "x$with_libpng" = xyes; then : as_fn_error $? "libpng support requested but library not found" "$LINENO" 5 fi fi fi if test "x$with_jpeg" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for jpeg_read_scanlines in -ljpeg" >&5 $as_echo_n "checking for jpeg_read_scanlines in -ljpeg... " >&6; } if ${ac_cv_lib_jpeg_jpeg_read_scanlines+:} 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_scanlines (); int main () { return jpeg_read_scanlines (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_jpeg_jpeg_read_scanlines=yes else ac_cv_lib_jpeg_jpeg_read_scanlines=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_scanlines" >&5 $as_echo "$ac_cv_lib_jpeg_jpeg_read_scanlines" >&6; } if test "x$ac_cv_lib_jpeg_jpeg_read_scanlines" = xyes; then : $as_echo "#define HAVE_LIBJPEG 1" >>confdefs.h JPEG_LIBS=-ljpeg else if test "x$with_jpeg" = xyes; then : as_fn_error $? "jpeg support requested but library not found" "$LINENO" 5 fi fi fi if test "x$with_giflib" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DGifOpenFileHandle in -lgif" >&5 $as_echo_n "checking for DGifOpenFileHandle in -lgif... " >&6; } if ${ac_cv_lib_gif_DGifOpenFileHandle+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgif $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 DGifOpenFileHandle (); int main () { return DGifOpenFileHandle (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gif_DGifOpenFileHandle=yes else ac_cv_lib_gif_DGifOpenFileHandle=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_gif_DGifOpenFileHandle" >&5 $as_echo "$ac_cv_lib_gif_DGifOpenFileHandle" >&6; } if test "x$ac_cv_lib_gif_DGifOpenFileHandle" = xyes; then : $as_echo "#define HAVE_LIBGIF 1" >>confdefs.h GIFLIB_LIBS=-lgif else if test "x$with_giflib" = xyes; then : as_fn_error $? "giflib support requested but library not found" "$LINENO" 5 fi fi fi if test "x$with_libtiff" != xno; then : { $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 ${ZLIB_LIBS} ${JPEG_LIBS} $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 : $as_echo "#define HAVE_LIBTIFF 1" >>confdefs.h LIBTIFF_LIBS=-ltiff else if test "x$with_libtiff" = xyes; then : as_fn_error $? "libtiff support requested but library not found" "$LINENO" 5 fi fi fi if test "x$with_libwebp" != xno; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for WebPGetInfo in -lwebp" >&5 $as_echo_n "checking for WebPGetInfo in -lwebp... " >&6; } if ${ac_cv_lib_webp_WebPGetInfo+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lwebp $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 WebPGetInfo (); int main () { return WebPGetInfo (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_webp_WebPGetInfo=yes else ac_cv_lib_webp_WebPGetInfo=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_webp_WebPGetInfo" >&5 $as_echo "$ac_cv_lib_webp_WebPGetInfo" >&6; } if test "x$ac_cv_lib_webp_WebPGetInfo" = xyes; then : $as_echo "#define HAVE_LIBWEBP 1" >>confdefs.h LIBWEBP_LIBS=-lwebp else if test "x$with_libwebp" = xyes; then : as_fn_error $? "libwebp support requested but library not found" "$LINENO" 5 fi fi fi case "$host_os" in mingw32*) GDI_LIBS=-lgdi32 ;; esac # Enable less verbose output when building. # 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=0;; 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='\' # Checks for typedefs, structures, and compiler characteristics. ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $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 APPLE_UNIVERSAL_BUILD=0 ENDIANNESS=L_LITTLE_ENDIAN case "$ac_cv_c_bigendian" in yes) ENDIANNESS=L_BIG_ENDIAN ;; universal) APPLE_UNIVERSAL_BUILD=1 ;; esac # Add the -Wl and --as-needed flags to gcc compiler { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Wl,--as-needed" >&5 $as_echo_n "checking whether compiler supports -Wl,--as-needed... " >&6; } OLD_LDFLAGS="${LDFLAGS}" LDFLAGS="-Wl,--as-needed ${LDFLAGS}" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else LDFLAGS="${OLD_LDFLAGS}"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # Checks for library functions. for ac_func in fmemopen do : ac_fn_c_check_func "$LINENO" "fmemopen" "ac_cv_func_fmemopen" if test "x$ac_cv_func_fmemopen" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_FMEMOPEN 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile src/endianness.h src/Makefile prog/Makefile lept.pc" 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}' DEFS=-DHAVE_CONFIG_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 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 -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${ENABLE_PROGRAMS_TRUE}" && test -z "${ENABLE_PROGRAMS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_PROGRAMS\" 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 -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' 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 if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # 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 leptonica $as_me 1.70, which was generated by GNU Autoconf 2.68. 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 case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" 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 --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers 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="\\ leptonica config.status 1.70 configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 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;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --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 # # 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' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $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"`' OBJDUMP='`$ECHO "$OBJDUMP" | $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"`' DLLTOOL='`$ECHO "$DLLTOOL" | $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"`' 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 SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ 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; 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; 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' AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _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 "config_auto.h") CONFIG_HEADERS="$CONFIG_HEADERS config_auto.h:config/config.h.in" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/endianness.h") CONFIG_FILES="$CONFIG_FILES src/endianness.h" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "prog/Makefile") CONFIG_FILES="$CONFIG_FILES prog/Makefile" ;; "lept.pc") CONFIG_FILES="$CONFIG_FILES lept.pc" ;; *) 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_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers 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" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :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 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _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" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :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 "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="" # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # 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 # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # 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 # DLL creation program. DLLTOOL=$lt_DLLTOOL # 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 # ### 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" ;; "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 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. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; 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 leptonica-1.70/configure.ac0000664000175000017500000000735112270201060013771 0ustar dandanAC_PREREQ([2.50]) AC_INIT([leptonica], [1.70]) AC_CONFIG_AUX_DIR([config]) AM_CONFIG_HEADER([config_auto.h:config/config.h.in]) AC_CONFIG_SRCDIR([src/adaptmap.c]) AC_CONFIG_MACRO_DIR([m4]) LT_INIT AM_INIT_AUTOMAKE AC_LANG(C) AC_CANONICAL_HOST # Checks for programs. AC_PROG_AWK AC_PROG_CC AC_PROG_CPP AC_PROG_INSTALL AC_PROG_LIBTOOL AC_PROG_LN_S AC_PROG_MAKE_SET # Checks for arguments. AC_ARG_WITH([zlib], AS_HELP_STRING([--without-zlib], [do not include zlib support])) AC_ARG_WITH([libpng], AS_HELP_STRING([--without-libpng], [do not include libpng support])) AC_ARG_WITH([jpeg], AS_HELP_STRING([--without-jpeg], [do not include jpeg support])) AC_ARG_WITH([giflib], AS_HELP_STRING([--without-giflib], [do not include giflib support])) AC_ARG_WITH([libtiff], AS_HELP_STRING([--without-libtiff], [do not include libtiff support])) AC_ARG_WITH([libwebp], AS_HELP_STRING([--without-libwebp], [do not include libwebp support])) AC_ARG_ENABLE([programs], AS_HELP_STRING([--disable-programs], [do not build additional programs])) AM_CONDITIONAL([ENABLE_PROGRAMS], [test "x$enable_programs" != xno]) # Checks for libraries. LT_LIB_M AS_IF([test "x$with_zlib" != xno], AC_CHECK_LIB([z], [deflate], AC_DEFINE([HAVE_LIBZ], 1, [Define to 1 if you have zlib.]) AC_SUBST([ZLIB_LIBS], [-lz]), AS_IF([test "x$with_zlib" = xyes], AC_MSG_ERROR([zlib support requested but library not found])) ) ) AS_IF([test "x$with_libpng" != xno], AC_CHECK_LIB([png], [png_read_png], AC_DEFINE([HAVE_LIBPNG], 1, [Define to 1 if you have libpng.]) AC_SUBST([LIBPNG_LIBS], [-lpng]), AS_IF([test "x$with_libpng" = xyes], AC_MSG_ERROR([libpng support requested but library not found])) ) ) AS_IF([test "x$with_jpeg" != xno], AC_CHECK_LIB([jpeg], [jpeg_read_scanlines], AC_DEFINE([HAVE_LIBJPEG], 1, [Define to 1 if you have jpeg.]) AC_SUBST([JPEG_LIBS], [-ljpeg]), AS_IF([test "x$with_jpeg" = xyes], AC_MSG_ERROR([jpeg support requested but library not found])) ) ) AS_IF([test "x$with_giflib" != xno], AC_CHECK_LIB([gif], [DGifOpenFileHandle], AC_DEFINE([HAVE_LIBGIF], 1, [Define to 1 if you have giflib.]) AC_SUBST([GIFLIB_LIBS], [-lgif]), AS_IF([test "x$with_giflib" = xyes], AC_MSG_ERROR([giflib support requested but library not found])) ) ) AS_IF([test "x$with_libtiff" != xno], AC_CHECK_LIB([tiff], [TIFFOpen], AC_DEFINE([HAVE_LIBTIFF], 1, [Define to 1 if you have libtiff.]) AC_SUBST([LIBTIFF_LIBS], [-ltiff]), AS_IF([test "x$with_libtiff" = xyes], AC_MSG_ERROR([libtiff support requested but library not found])), ${ZLIB_LIBS} ${JPEG_LIBS} ) ) AS_IF([test "x$with_libwebp" != xno], AC_CHECK_LIB([webp], [WebPGetInfo], AC_DEFINE([HAVE_LIBWEBP], 1, [Define to 1 if you have libwebp.]) AC_SUBST([LIBWEBP_LIBS], [-lwebp]), AS_IF([test "x$with_libwebp" = xyes], AC_MSG_ERROR([libwebp support requested but library not found])) ) ) case "$host_os" in mingw32*) AC_SUBST([GDI_LIBS], [-lgdi32]) ;; esac # Enable less verbose output when building. m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) # Checks for typedefs, structures, and compiler characteristics. AC_TYPE_SIZE_T AC_C_BIGENDIAN AC_SUBST([APPLE_UNIVERSAL_BUILD], [0]) AC_SUBST([ENDIANNESS], [L_LITTLE_ENDIAN]) case "$ac_cv_c_bigendian" in yes) AC_SUBST([ENDIANNESS], [L_BIG_ENDIAN]) ;; universal) AC_SUBST([APPLE_UNIVERSAL_BUILD], [1]) ;; esac # Add the -Wl and --as-needed flags to gcc compiler AC_MSG_CHECKING([whether compiler supports -Wl,--as-needed]) OLD_LDFLAGS="${LDFLAGS}" LDFLAGS="-Wl,--as-needed ${LDFLAGS}" AC_LINK_IFELSE([AC_LANG_PROGRAM()], AC_MSG_RESULT([yes]), LDFLAGS="${OLD_LDFLAGS}"; AC_MSG_RESULT([no]) ) # Checks for library functions. AC_CHECK_FUNCS([fmemopen]) AC_CONFIG_FILES([Makefile src/endianness.h src/Makefile prog/Makefile lept.pc]) AC_OUTPUT leptonica-1.70/endiantest.c0000644000175000017500000000406412041070110013775 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * endiantest.c * * This test was contributed by Bill Janssen. When used with the * gnu compiler, it allows efficient computation of the endian * flag as part of the normal compilation process. As a result, * it is not necessary to set this flag either manually or * through the configure Makefile generator. */ #include int main() { /* fprintf(stderr, "doing the test\n"); */ long v = 0x04030201; if (*((unsigned char *)(&v)) == 0x04) printf("L_BIG_ENDIAN\n"); else printf("L_LITTLE_ENDIAN\n"); return 0; } leptonica-1.70/lept.pc.in0000644000175000017500000000051312074011155013375 0ustar dandanlibdir=@libdir@ includedir=@includedir@/leptonica Name: leptonica Description: An open source C library for efficient image processing and image analysis operations Version: @VERSION@ Libs: -L${libdir} -llept Libs.private: @ZLIB_LIBS@ @LIBPNG_LIBS@ @JPEG_LIBS@ @GIFLIB_LIBS@ @LIBTIFF_LIBS@ @LIBWEBP_LIBS@ Cflags: -I${includedir} leptonica-1.70/leptonica-license.txt0000644000175000017500000000275411707077535015670 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ leptonica-1.70/m4/0000755000175000017500000000000012274453055012034 5ustar dandanleptonica-1.70/make-for-auto0000755000175000017500000000026211535013346014103 0ustar dandan#!/bin/sh # # make-for-auto # # Run this to make with autoconf if you've previously run make-for-local mv src/makefile src/makefile.static mv prog/makefile prog/makefile.static leptonica-1.70/make-for-local0000755000175000017500000000024511465561612014234 0ustar dandan#!/bin/sh # # make-for-local # # Run this first if you want to use these static makefiles cp src/makefile.static src/makefile cp prog/makefile.static prog/makefile leptonica-1.70/moller52.jpg0000444000175000017500000002261210472131452013650 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ “UÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷™%rp3RcžÔ.}x¤Í4¶0y¤,9éAcŒàb˜ `e²OAJ¹VÅ©î3Núœ ‰ÙÙˆ_ËId·¥M¨u#°¥LƒíA8`yǵ&ÝÃ$ò;Ôl6A8§‡Û‚{ñÅ8ý*6äã=ûÔ„ÏéM, o r}Å&ýŸ62{ÒoÊä:õ¦³µ!\ô<ŽÔÒq’x ¶ÓÎê@ù]£€;âŸÛ¯Z‡æß€p½9X©È=é_ Ê@ëÅ8U“ša&<òN{šÏÕ5Ø4h­Dèò=ÍÜV‘$c%™Ï_¢¨f>O¥jnÊü§õ•¨k6:t%Ýý¼3ˆâYd dcÑFz“è*õ´©5ºM‰,n7+£z‚:ÔìAS‚)¹Þ äzR,[W'–§2í\õ ãÿÕU¯/­tëf¹º¸ŠÞB™%pª 8'Ô¹ªöú匷¦É.à{ žieRá¼W®*ü÷0ÚÚKuq2EJd‘ÜáU@É$ô â4_‰všÞ¯µ¦~-%»’É/%TAç" ùe·´HôÍtvžò½¡›v³žÏLÓ^HamFá|Çó$rDè"³’ÙÎ@‚F׃-ïu=KÔ¼B†MFÝ¥kyd‹Éb¤•Y p®ÉÛ¨ G5ÒßÚC¨Ù½¬æo*A†ò'xŸðd!‡àkÅ~%iqé·v^Э#º³’¼Ôc@%Y$‘8RO¼Ò1pÄç…<°¯cÓì¡Ñô›=2ÑvÁkÃç8U÷éW£Ã.6óïK³å£[,Ý;S˜nQÍBÉ»8àúâ²õïYxI“KÔàó­&e2(r¤àä`ƒr|ûwðªïÃ^;[hno¥·™^]6K)Ö‰Ö"“ǘªs·å 2AÚ}»ÀÃK·ÐæŽË^Ô5UY›Î“R¸/4O€ l¤„cî1“ë\Ï‚´ýFµ³ñ.¡çÉ©x†úY-d—,Ï-"…Q±õàœ W§‡‘Éää)ÐAÁ9¦¹%: Sñ¹HCÒ…;Æ{PŒc=éòsòŒþÎj>-´×nm­îmôë)D1 'žÎ¹wp¤ðG-ÚŸáØx»CMRÃpÕ¢vRñ•b;I²9ä{Õ=OÇ:v‹¨ÞA©ÚêpÃlŠæñlf’ÝáÕHÈïÛÜ@ÜÑõ?^Óã¿Ó.â¹·”q$m‘ô>„zUÔË» éLRÈ[(y9æ¬ã8ÍFÑ–Ç#¿¥xÎ§à›³g­jO¦É‘j·LÍ+@ÌfŠê,rd‰Üã•óœ^žl,õÍ#L’k¶¼‚6‚í'ö¬ì˜ds·‚3†ÇNK£XK§\ê­5ãÜ%Ýë\ĬÄù*QA“Àܬp?½Z®/#"£-°`qN`&V œSAqŒ”8›«"˜ÒþÓ åN>W\m‘xèÀã¶5‰w}u¥Ol|ceæGg/Ÿo¬Y+y ûY‘2Z#µÈ%²ƒ9Ü8¬³»‚òÚ+‹yâš:KWœ‚8?Ö­oüŽi+7O©&Ÿ‚£¯#µ&@ñŠ^ÁÇ"”Œr1Ïzn󜓒:â¹ëÍCÂþ ´rN¥C#4Œ‘¢Äe~øUvàtÉý+Xñ'ˆfÑou+[9´}Ú&{»ˆ·]̪ >T'„È /NéQ|$ÑäÑü mwu#Í{ª“¨ÜÈò-æ`©ÉJ…'¯$×{•äõ©ï"Ÿ».FâçùÓ…ÆA®-¶xQXŠ•ðî£ppÊI[ ‡l}"‘Ñ\㣽’®TqŽ3R…!@üê2᳓Œt¥8+“ŒõŒ¡ðÄvçÒ£V8ÀÁô§©;Ûð§§RHÒ0â‘O?1¤!™—Ž)^1HbËô4ŽÞ}8ïÒ°|O®ÿbi»£¶k»É˜AijŒ®%nŠ éêO` íG†<=ý‡m-ÍëÇ>±~Â[û•}ÇÝUÏ;p£ñ<’kqÎÇ~”ŒÙ9ëL#Žžý©Ñ«rr3ý)á=‰úÔl:Ÿz@Ë¿Ž cŠgÏó b•A.IzsNçŽ:T˜PO>¢¹KŸ¥­ä—¾ºþÆ»‘‹ÉǾÖá¸É’,›¼…[Ôœb¢O¾˜ëŠldÒ\¶Õ»æÙ9ÉÆ&ÇÉô'\ ×Që2+#«£C/BCK¸ã©Ï|SÌØ9½8ɳ>¦¹íSÆ:}ói¶És©j€€Ö6$‘3Ž\ä,c9v^* ¶ñ†¶ss5§‡lØc…ÍÙç¡f\|c “¿=ëCKðž ?Úm,üËö–þ錷2ðÝ#dœàp8ã¥k´ÜÆñ\"KŠQÑÀ!ê=iÉCµFT`Øb‚C±Æ0)Ê*UìXá¾´¤ç5 ÏâjµåœÖ²ZÜÄ“A*2”¼Ãµax«G—V²I¬(µ‹3ØO ;VLU±ü ¤©ö9Røk^‹]ÒVéTÅ2³E<0ðÊ­µÑ½ÁÈ÷ê85° 1ÏnàÒOB)¿:ŒœRœ62OJU;WžÔÀw·#ÒþÁ÷4ˆltíÖ•Ÿ“Qç$r?:ãdQãµ´›@Ñæ\?Ëyx¤„©ƒÁr;H®èëÓÖ£f;ðÏ×¥4ä1ù³ô¤PLŠOJtƒ¨êâ«mo4ÓÒ­eÒ«l“OusÍDü p)¡þ\/>ÔÐàÆ21Í=GQI½cžœç“éÒ°õh:LËgu|­zäl´ZiÛ>‘ -ÛÓÿ‹µ†&ÃK·ÑíŽ16¨æI±Ž¾Dg޼npGp)ëà«9Ý_Ä—·:ìã-á n¤«~¬ûÒËà{wy¼7s&ƒpÙb,Ôw$cç¾CÐr6·ûU ºæ½ (oi‰qb3»QÒ÷HòBAuî¥Àï]›©Yê–±ÜÙÝCs r’Äá”úò8«èFíÀgñéO$gëëDhAÎ)Œ£pÎ:QÓ'ð788Å=°¹ëÍ*Œ¯¥)P$Óp·ÔÔjÛXã'=ë‘×¼-âh¼A2麃Ço©ÆX‰ÏËÆ>¥Q½ASü'=z± |¤ u=êUé’J¨¤°Î=³PCuÛŒnŽ;NpGQR´‡i#Œ{T&]ÙîAçž”ŒrÁÀùZÊÕ(][T*6†ÑŽd†G¾¿ÄTw­ÝH³Ð4{]6ÁvAn»8ÜÇ$–b:±$’{’M]gdl ZŽIFã©íDrN#ŒTëƒÇCM|€=ÏjŒñ!ãúÓˆÞ¼ qN…[hßÁ§³ÀHÊ<ІD+È$ÔÎò¾ƒ5Í\øÊ)oŸOÐmWÔc}’, 0ã÷³`ªã*2Ý0¦£¹Ðu­F¹ñˆÖÎÉFù-ta  îÃÜ1ÞW®Î>µ…5¯ Ù­­Ž‰a>Ÿoy³K-„±%ÙÚH"WQæ6ÑÔœŸp+ªÕu[mOšöòo.Þ 7SÏ9$“€9É µˆu($µm{Bm:ÆòA¼âàHcc«:€<²Ø`°Éqžª6  uç€+Zñ#Y_C¦i¶2jš¤Èe‘J¨ qæHÌp‹žy'€8ç¬ô› ròê÷L7~ñD<^ÂX1;Š™cÎÉTåˆqÉçæ-hÞ5¾‹ÄÐøKÄzp‹Y’?9f±o2ÚHö±2dánR»HêG89®á[ óg§Z˜àdžõ9“©1„È?Zilö56Òzô¥h¦;ZfæJkg ŽòÊ-GO¹³»E’Úâ&ŠD?Ĭ9®ÇÅéá»+^‘åÔ´æHmŒɨ#°2g¤lmnx`Ä+JßÅ÷–wÖÖž%Ò±þÚBÙÍö4R??ºv“Ðd†þqLñLòꚆ›á»Gu’þO6éãb;Xðd9*[+ ¾H<­«øU<1:x‹Âšp·’Ý6Þé¶q…KØz 2®r¤rySœÔ÷ž4´Ô4‹%ðÝŽÝþ©…² ÙØ8ß#®r “œrõ5Z_ Ká[h¯ü2gžæ õ´²î:’ÿ±=&ç!Æ7Æ6É/Ä="çOH´yÖ÷Y¼ˆ4à¥gò‘Ìj¤Ì@)ëÆwt/ ZévS}¨GwzL—×RFÏo÷8UÉ€9®]¯âøy~tÍ@Ît ¹ô¹£…¤òòÖØE>¤ Ç þjøJ[åøww¯À±Ï«ØïÒC¦Ç··ŽFÌMžC°hä#Ô6qŒKØœryæ‘°Nç¦iVT;×>”áõÚ5ú“Ÿ¦( »ä·¹¨ß;¾QNPKg=*MÝ Œ·œñJø`?Z‰¹®öÂ_ëVcPº¶ðõ“ýžàZ†ún7Ç¿£å8êKá¨gð‘ð%äz·„læ“MQÒ"-!‘GIbÜI2ÔgæŒ639’çÇZ„6ÉðønÝ·Þ5Õ«Ä×ÌË«àì—$|Ø È-]~¥¤Úkzd–Œ[á|t8(ÃÊGÝ`pAƒÒ°,¼pºµÖ¿®I­%‹ù–0Ën‘¬n2GÇúÉà»ws]§§Zë:mÆ} Íir†)#n7=zçÜt<×%iŒ|?ntµ²ÄFÛm/¤¼X¥òû Ã/%s‚Ã$€3[^ÐæÑí§»Ô¥Žã[¿"KÛˆ×åÎ83Ï–ƒ…Ϲ<“PëÞ±×®"¿Yî´íZÙýœ›$Û»vÆuÓ ¬ëŒf¹_Á—z>/ˆ£½}WÄÖ‹ñrÑ,m2"íktU U=à(ÏÌÙϧe}©am}k {{ˆ–h›ûÊà þF­¹*7Ú¡Ï'nsúTÛƒ çžôØùIÅL¡Ž>”FÜTAIëÓÐÓˆÁ ÀÔWWPZ[Kqq*C H]ävÚ¨ d’{ ât|Mâ(ü_©Ã‹hã)¤[I#n³>yÜÜ`º¸ÈÉ uú–“a¬ésiš¬wS®É!pGopGPF F*–áÍ3ÃóO-”w <ÁVIînyW;Ws’@8ŠÖ20YXdzõm•‰ÆAý)C6@&œÎAÆiÁqÎs@aÎ ÒšS'4Ü ÙÚ§?0Æ~”Â~pIÀïRnùMs~0Ö&ÒôWû&ÇÔ®]ml¢cÃLç O²òÇý•jÒÐt¨t=ÏL·bÉn›L÷¤sË9õfbXžåªñf2mê1×ҔɒHŽ:Ò+ñϯ#’WŒgéP•lŽùàóAbž½iKdcŒÒªñÈ4Ò&Ò ÇÿZ¹1Òd¿ð¬…‰Ò¤ÝjY‹o³“Éë·æŒõÇ—Û"ºÆmß/õ¡dÚNV¤ŒdgiäãŒÔ¦Œçµ1ÎÁÀâš²1 >µ#6ò®+QÇ|E&ˆ„LemHíÀ¸›’ ô*Üýzª÷a]sDxÀ{cµ(-»æÈ§ƒ¸gúSA'ևʩ  ˆHÛÇý($î'^”ð¤äàz ”9'šk¾Ñœt®/I–/x®ãÃÏ"¥ûI}¥’Tų4 u8c¼{Iމ]’° ¤`søR°Üÿ.ƒpäŸzBxÃ/QšG䎙§!ÆsÅ2…Ô*XÈTôÇjÀ,7a@Íqº>Í¥)œÉ3’W<³¹îìI$÷$Ö€î3ȤÜ aʹôâ–>G<ýiWšŒäÏN”±19ÝÁî)û8Á§·¯47`öã¾3ðí߈~,KŸ;Áiáása(bs‹†=ˆa¹NAnœWWð÷Äš¶¹¦Éý­dc¹ˆ!ûB#˜6áŒVDddt=ààŠí @ÇSOÃH<Ðü‚ P£àíÉÏ\Ô»H$î{Ò’#53qÎsŽ´×sg=1’}yþ'Ä!‚ÃHsöKù ¬šªÉµPd0Ÿâ* Ë‚$ryÇ®ØXÚiÚuµœ>M½¼b8£ÉùUx);TuçÒ”nQÈÆE?–ÁôëJp1“Å Tü§8í@p1“Lʹ;t¡¢,IÏÚ˜X©ð3Œö§6ìdíU/ìáÔôÛ­:ñCAu Ã2îÁ(À†öàõ®;Á~=³“PokÉ¿¦“lÒ\.Ñ{°•™ä–P­‚2wq ¯@/ƒÛŸzj¹Á@ç½I·$ã¥&Â9#ó(Ïp¨¥$dçŽzà¼iV诨ͨjwWn Ótk[ƒn’?¡ØFà1–g;T™ëÌü+Òu=â/Š4Û‘i(1BÓÉnXä¬#@y+‰Hœü™ f½îŽ9=Í87Véj‡qv É=óR³ ˜þ•üs\u§óœ€yéž”Åó2CÏ¥ _JT$±ÏNØ) zœ`p(ÚIÉšƒìÖÑ]ÁKtÈ"2ìÙ$)=p $s\´ñ/„|`'ޝK‰Š©o}ŽóÒPœ¾«Ô½uªêNÜr1œ”ýËƒŽ´ÙCÜ:Œ€Á>µ&êNôm~Ùæ›åà'¢½³·¼´’Úê4– ¬ˆã*ÊF"¼Ê_ Ÿøo\¾²[[x®¡~ˆŒ żOÀò‡uÈÀûª•ê P*98^CG8*ÝOJzü£sÞ‚Êp ÄTl71펔ƒæ†F:æ—iܤ"ãøªGaÀöô¨G$sŸÌTÊ´ð*9Uy8#èpúÕâÚ߇ZøƒYñ„2ø^îîÞÖäM¹vf r¬HÚ¨ìrç‰$ô¯Mð¾…{ é-cs¬\ꑉY –éz‘žB3dï çž:ãºÅEüiŠÎÙ$‘튼x¦“øÖˆüGoáë$Å%ÕÝÌžE¬zyH$/°ã–<U¼7á™,n§×5™–ë_»\K"åÛ§†~êŒ ž O`4ltm7OÕµVÖÔ%ö PÝM½‰“`Ú¼@zc=ëUH#"ŒŸ~¢¨Ýœ}I¦ŸN:S°¹ô§1ÎH>´ ƒ_Z?›9Å!O—h4¹+×ÇZ]À€qC0oáÎ*Ž«¥ÙkúEΗ©@³Z\!I#nr;èAäÄÚ¹ï ê÷qÍsáíZ3WÓ€ß/–WíPˆæ\õÈlXzg¦Šã·µJ¬Dx8>ÔÙR `uÍ1^™?JHÜ8Á>ôòÁ@å<{4{ ')¨j²®ŸjA`Qåà¿ËÈØ»Ÿ?ì×G¦ÙÛéºmµ¢”·µ‰a‰I?*¨yèO‘Ñ>µbÏ´*‘°è3I»i'µ)Àx§2^=j2ÿ66ñOÝ…ã­ %FñŸJæ^žµ åÚ˜~eû܇¥Cweo¨ØOeu™mÒ%Õ/D탄†2îÄØtà“€;‘Iá¯ůM¨[;»+« ;ˆ.BåK(u £2œƒØçÔ o‹4[«Ûx5-$°Ö4Òe¶PÁDëüP1'¼ð–‹%¬Ûý¼]ùÞgžY¶³HI,‘ÁbI Ý6×^›™²0ÏZeµµ‘­m£‰®$3LQù’cޤ€9ö©QX˜ƒNaÐ/åB®& ¸lÓç¹® â“j|1¤é¶ ŒÿÚvpéÏ‹wóGÌ©Ðí@ç€ôÒè ®gqwSÞ\ÝJn.n®\3Êäž0B…P `½h–eP~0zŠ”±G@( µ²^iÌÙŒSC㸨ùë’A§†%FqùÒ–ÂûÓUö«£¿iжG€}{R¸Î9$g§ZòÛ=_þßÛSÃ’‹ ­BæîãÊxáFóØHÉ)åáTt±^‘mwÔK-¼‰,g£#ñÝKOµÕô«­>ñ7[ÝDÐÊ£º° óÛ¯^Õ‰gyc¢ÚZß] «¨bX可 „ nÇ©ÆÑàÏçSï ÷›4܇b==Íp~Ð´ß éšÇ‰u)cž+«ûœ¹,`·ó¤8‰3„'n3޻Š¢°Q.X¨Zvìpizž1Ò‘Ô6Jcg±È¨YKdÇ­ 8ã~”Ž_*U¾´øÔã ÜŽÕ3œ1ïM,8£u\‚rGlT‰Ð0f±¿á ÐO‰›Äcqª±›íc…Ú>MÛzdtî}kYÆ0 8ÏðÔ‘t “Ç­HÀ9T>` 0 ôõ`˸÷íJ sMíž=¸ª·v–·RZÍ<{å´ËÉÂ9VLã¡ù]‡9ëY°h1Ïâ#.d}>;$ŒgåGv'Øî_ûäúÖ¶XsÇÃJÓô»³é¶ÖPçqŠÞ%së…gùTÍò7ËÏãM!¶ ·Öšž Áj˯e'“Kz’Þæ«ê}¶¥a5àó-æ]’¦O̽ÔûÁõg*sÇj8\ ö¦³…ëÍ+6ÁëIË{cž)»ryïL6ò¸Æ}©ÃñÞ¤ÆÅ$I½XîÀÍ.ÐFrE Œ1ß® 7böëëHk¦¸Œò) ܤ¦( Ò¦ÉnšñœWPzpsI€ÃñHßSÇJ‰†ÒTw瑳)bAçò¡A~HúŠx”i Ù;Nzt¥Cßö©T’>aßÖ“å' zÓ‡?ZFß½z¤Âýêr‘´Ÿ¥ IäþT›@lq9 )¿.òIúP«‚[#Zs!'Œb§þ ÷ÅB§ãÖŸšïÚšÿxzVžE<ž©€þî»õ¡¿­C)"U¸§©Üyâ±@ kuÅ5øQŠEbAïEý^i á› ûÀ÷¤rKirv‘H„ñÍH¿pÕ98‘SDNÞ´×9ÅE?ú±õ¨ˆÉÏ|UØòG©Ï÷ j’ØÍ&OŒñR?*¹Å7'­J„„ϵ‘‰Œ 1FgÒ¯‘—J¶â(UǹÜÌø_"·õTY(‚ ƒÈ6u"›¨!·í¸–e)ÃïL•áhÆNL–Ò:#Q efx'®"³‹¯®&o¬«AüšžgÆ%4÷7i&DØ*¾ 6»È–c²Ü‰™¸–ú[e½î×ÚwýC@(”Ä“5CÎÇ8¢XëKQŠHÓXÍ–F ÆØ_–Lè*_Žo pi¤e<Á¡Io`Gj*_"÷êrƒuf¶fR(æMVc¹>[¹|îÑ,¢FLF®¨|ø} â‰ÌDŠÓ­ÎSY•7ä~ŽÔ,ወÓÈE«Ë탸ôxæwS<ÃÀ&©¬Øí©pˆôRôÞ‰¡ÚÉœ²£¤\W¹mñ´h1àXçäè Ü¯@XÒ2.´}ß^N—;ÒŽª´æV©*ÑÂÄÑ3Ïå"&glƒ”|~ñG,÷uɹVö&©ñ†„ò™òìÌò‘q ò8„7 Ñ$ëeQëêëHv?€(Þ†MÖð·¼S&y¹@¶Ž[%²±ê1|Y0N?ã×ÁLhçZï“á ÏÈúgä˜×“(ÿìs÷ÜLéä¾#oÎYË>ë™~äó9·à:ê„]¢#ÓvLýôC³ãeDÖ¹2©ÿ´?AZmPÈø’®PϲX”v㊷“A Èœq™=ØØû„~Ã$‰•tǺX½ß¥!'•§ãeA°S N( Ò†œ˜Îë²!qj¸wˆ*é e°†"¹#} _ޝuþ†Š¼6‰œ¸#Sõ8hH|Ÿn~V¹ö”×½â†ì<ñ¸æ?µ'S0ç3^FaÖƒèhæÙÔ«µWßcYêt´å'ž*RðVr±¸ðEœKU)¢®rm'*œp6ñ‹eÊ$ì—Ìiñd¾Ö¬mŒ°ì-x–CÂsX”yè[8ÝËëˆ2vZ,Û¨xÌÅÜ$.~LÆÆCeùåHÈí1»oâ:>[«Û(( ¹_‹Æ Z/žz1nKH¢Úó¬-ÖûØ f•â7Îahu°|]®‰Si×ï¨]¥²°õ9Žeº—zÿe]Xa/™‰XOÏ}yy ÞìÜq ý‘C~dÖ¯ƒ‡‚³¶é±¼¯lÏe#S:b4;Ü’^WmRŽ66zÒbùØ|Ž ’];ÖÚ‚ynÏŠÊõZ±–×Ö†-ÝØ%-‚È“l»|—¥©|®•wÏ39²60¨dPŒ.„'@¯Ke©¼ÒC¸Ã ˜ÈèIdÃó^á*—ÇR9DâZ椿Q9oƒÉ=ŸjMø¥ò‹ˆzd˜JÈ}5•ß±–eìž„fŒÌ×J ×Z†%¼½·2.´Ä8VUúçq¹2#-G´íØ\QŒóíðqب«¼%:‡pë½r§$ÅX¬Uˆ»Í*Ò_“ìÌœbkfA’sàÔ`­ñ r3‹ê8_Îb«B ZÛ×6ü’K,I(³‚ôôÑ6N¿#Ft”©€{ÉÎÂâm¿Y©JôÊö¢ËIÜ’xÁÊõòþÎW)èél^'gÅ’äûk k՗㸵‹–’GR¢——ZDÏðìí¿eSn£‡üù&J*Æ+¶iiäNJ\B¹Àod‡ ´º±¹xÃäøÇ·þކׇ·\þ©•õ<~øÉíߨþF5ÁíS,åq|¼~ÿ»ýóRÅ IEND®B`‚leptonica-1.70/prog/dreyfus2.png0000444000175000017500000004264310256452147014742 0ustar dandan‰PNG  IHDRI^ÕzÜ PLTEUUUªªªÿÿÿÁbÑ IDATxœí½}tåèïP’œm¶º Y¢û»-ÝBKÔÝn–D Ù6·˜@d7v±h! –±‡Ûmv°È–œ’]œ@l7Vcñf;aMi±É‘ §x/¾m^L¬ÆºDNIH³ñĶ$kf4Ï÷÷}Fò[Øœß÷TçD‘¥™ž—ïëó¦"¸è·ŠþÂüÿ—™#Ÿ™å/:³…=Êž ÈùwÉçe¾uvëÑÜ×rå¾}Ï/óó>þÂüôí¨ÈÅeÒ Ásq™Æâ p òy'Шx‘˜”¤– yˈÀ]4æÓøÌJèüdcü˜¹à"|–ðŸÂI‹™5ca·à+Ýæ¼HLu˜ s{é¼X}¤mcÏ«ÙSúƒ‹ÄTÎndO¹º‹ÄÔ {v±'ºü"1ÓÆsÈxþ¹8̸ñÜ™'ó‡É*ãõø§_~ALNu—6­­\l-% ÈŸpaò™É*;°À‰¶[ÅO2"t=áLž™Q+õ|üuR^6.„) „z„ €ÿƒjOü…½@&i³P.nëür’{?öB &û˜++a 6ÙZ±Obî»P¦Ÿàsæ€(¡í­êÇ_™öÕZ.)•au>YLI’#{¥†Öû˜(Ggf¤·{=É<“’ e‚ÛÓ©óÐÑAéLœ·œÑª¼#/” rGŽ rîUjÎ+Ÿ´ü¸¦ÝÊ…Å gr<ÊQv$`ù¨jÆ•&1f·µÏ”j,ÒáIA©fzQ³ƒÒ¾ÕÏÀT[R­rƒno]…uÎ|4ì^iF¯Oa1½Ÿ¥œPÛI½5„1NÔ±š(Ó¤Šn,ZHyX­`ùå2Û™»¥íá£Ìd7Ÿ(M æ;ñõM /œúàøüž§W`—Iµ`§{Îe»ËðYtÉëO*®]¼òêD=±Ì›úÐúò£öÓËõu„ZPxCç0•^xa£X›ñ5,¥»P95…ZKƒ®,û¶Søo%{=B¯]랸Q•1¡…dÎaD‘Át€a/ð3œpÇô2H?zʚ݆LÅŠqÞØó¾w*¤Q1Ù-Ï‘y³ Y¬&štO‡ñá~PZbd{ä+7 ¯@êrûyo߉F屺·ã«‡¯éA#$†¤M3Qû ËþdHvbFo¨ò¿RÅ›¤½jÕcå‚ bWã5æ68 FQk’Ýäìï_¹©r+:ËTA·( RI£¬†óÚw¼¹ÚGÀƒ&,bX>¹ÍuÙRÁÿSüÎeè¥i™¿™z¹ùQ»‰Ì©;1K(‰‹ e & œv\çuq}´Ô$º°¥x¨â³K¼ Mþ úõÛA pªä¯™ôL310P5àã„'÷³7Ò¨½Ç3@½/¸*‡–5ŠØ–Fåj(¶©žÆ$è[Ž™ ÿÛ+£6‡2¸á¸,&ÁJò_bÄØÛ}mëp-|™>Ÿ'ŠZ!e5±qˆR™€]‡3›ÉägÆxP¥»s$]ŒE°¼=ÐS2D{‹^'ä®4“Õ ØØ½´ÚÌ0 ƒÛQ/Ö<‘9Ì»^äAL?l<¬‡ôhñôéÛLý\'xE—tsc‘f‘Us5| gZ`Èš˜¦Ì•Oöаd(b$j4°JIúv-ņ°Ã"a>ב5Õy/H22÷ˆÉ6OÔ r†1Yås˜á®ãCT!fÃß2¥ím„&¥¡Æ„ÊÀ½kh¾Ë™ªzy‘;Q‡]œ£XÙŠF!¹©šÅç–3‚i•GÏÂWû˜ÕbLêFeÒ!WŒ4²Ý°eañ%My‰Dâp ˜d,]ß0VšCï"‚:‡Y’7U €-6l¢õñ˜§Š™ñàŒpˆÚ·ž´þ¯‰®mp;ð¬loñ´¡úD"isËIíø!ö¦‰1±då‰1P]tçª,/¢áe_Jç¯Ò·DA‹¸dôË$¬‰tÙ"^I;ÃB0)xýsåól˜@[{mP/¶7Øl)Eå_8k{n!ð±šTñ®æY¾œam€U1`ÅF\ƒ|&©82t3ã…¸&æd3‹¬ÁLú ³ØÐtÓ"…S0 Û…Fû™“7šäwPˆyì’Kªz4È,‚ã¶u Kíö¼êL3S2È(ºa‰6!™íAû¨Û P¢¹Öíšcš‘Ú†/‡‚ȤEë¯ó“d»;Ýv#¯óD’©y6S'a•xH2fðÀ¼-’îh>ª|X¬zÞŤCNJ*¯‘˜TŸ ôÖ¶¯ÊY¹®‡¢nÊ­âl&uˆ9 Ò7´‚GºYºû%!î¤þ¤·y¥IíœìÖ[i¦~>\×îü’(eÉw’í1q÷*½¥ûU€Ê^Z.ÎaÂ?½Lx&K^@u©+Ǧñ’?¸@ОQ6ÁÀjÕ´"7ÏsŸJG“µè‹ô†ôdúŠÙqUaŽÁÛN°©‘xÎ,¡">™æa¥Õj¦ôʨi †pè–c)d´=bªbkéãšLd|I—Ñ=Éà\æ¡/—Ö‹YGl Û`Œè¨1ïƒW¢=Ì‚Ë>”°býñÝÝê2è‚ç e2òh]`#g0%#…˜az=N'X»Õ~&þ‘bx·9-ËÐBÝ;× ¹vøy4"ñ”¥éŸÞòMÏD-ðÜ Ÿ‘jj,z¥%ŸîÍõGp­{]JïWO?Â]ìŽCåh«=Ió`ÑBHú›K=’¬‚iÛ{Éð&ÚA{ð›a›=±¹­äÔ:4##™ÃÌYàYƒ¾Lâ>£-NW„r[" ×'.]&З,óÿzÅYŸ ÔÞWò9ò^-¿Ú¥|©U® Ôm¥O6Özƒ–+X?S¾ïF÷àP³½sˉö3Û¦Ot /½Ž^¬‰“%fp@¥(Zl²ç0F¡äG=o9ÑA‹¯ ömèÔ‰VÒ€U£ÉÆìøùS¹ÿf‚e¬dåïß~µÔ-9‰ì*ºZ·Õ=‰QɈ÷|åd)K&³ENªÙôHP»X×tÉÊ7ÌpPEhjV:à›he ˆÓT‘ßÏ:Ù– 甓L13­,ãʵI|¯/ógdöì!pJOÔ½R!Zà»IA-ðK\¶×Mðü­¨I‘£jBH Ï®{âû†| Ÿd3šúMh ;"Ðî=˜·êÁå=‘f |O€&&¢ÒIo >¸…bb%òae•JÎb6 UUåRÎ`Fw²rn>)( ¢íîÂ/‚†G¯žâáZRbH½´*(­uIÅrrYZ‰Þ9K–(h’gð§5FŸFwàSj"&PŒfÄÆ|9O¢òÖnêê…Ë^a·[-55 ²/É'ZE{|<ٳƗ c[%fCìÛñé4êvå1â îq¾(”•à2 ÖÅ}ögà„/éÏ&śֲܿÂûfYßtï£TøÙP Š2ITµoÐWûËÃ=Azï|Q쓈tjNÔ1¦ëþ‚Ü´ 3LfN0¢*;9Õû)‡¨º° ž$„öÝíhÚÉ[˜7=ïHÍ©’\Ýÿ’ãOì·Ûë]ÅÆ8À¯Ëç2ÙL¾˜Ï3ŸÁ¬Ã¥öclïÚ„V'QÔxHmÇ€ðO¾ŒW¤Þm±a2K"û=ž½~Ñ ï·EjÏaÊtõçé&43‘Sýlü¢C(Å&TÔ} Ξ똤ž °-''ň/1/Ú€ë ØlùT³V«]ݧN3ÞT(J±k‹•‘»ñNFÃl)‚^CȨjo‘ ?ËØ¿4ÕÅë•FCª¡HyY:Û\.´W> ç*Øgïˆ|\™—ñÛ CÒê;^°‘…eÁŒßãw¿(^2‚O å?cæß »òL2ÃÃ'môEÙ–9ŒoÒË8¢bGù©Ñq ·b¢£¬ÕÇÆL—S˜ÂÖñp#Œɰ£³ln0Û^¤–É!lÑÃDUèºp ä§‹ÚoWkUW ÜÍÁ£º_ŒS±»ù! sx£1¨xT…é<޲q¡ÑÊße!:\¾k „ˆ]›éƒoŠLÄ‹.W•cì*‡€L*l{ºzÌpÿþ°Èµ/^(ç4SgWË•=(Ž¡ñëË© x“2ÊlÙ¢b-! ø[Vw8‚F9·ÆáuB—Ö¡LHò-×å™}³˜ «;­dF®Ü‚/õaüTQÊ–ŠóÐÑ.Eï‰Ö·GzŠù èmØúÑvSq4c „<7»=Y9©í(>—Œ/Ãç±ØWx¨²—x(˜PѿƺoEG&)Ю­1áôý0Œ½^xÀ\ʰ¶Yþ]Ÿ4ÊÙƒfÅ6ÁÄ~•Ðl;!Uð®Çte÷ã‹ÜŠ—3B/íz1žz°Ž‹€RÚ˜ŽlâtbÃO—êç´'ÜÓC5à'Ÿu͵N?ÙP'WåÝ­´7y˜¦—ù3(É­ñø=¤bÛP°ÅNÊ<èd?Ý0›i´Æ=&éá!«õšÄkDÒ…ípð]–ª‚°[•ˆVl 2¦4oá´ SÆ‹&G‘Im˜cèŽàŒéFÛ>ðŠDr$2Ž=ÙÜ’šéƒmïz L18Ì®ùâ‰`FFv0þ»*ÙÊ«>º±'ˆL˜¿  `5è8—I n¨ƒÇ~ÈÃhçä¬~g”D »•Qq7kÎåa?»¶¹%ýf§û)¢úÎ<® ?•‹–eÀ›®ž[÷=›¨8"ý'ÌQD¸ðßL™ SÀK»µÌšÝw“Ìká}:QýÿÙ£;“×h´Œt¥µs™ †ÀCoò†ƒî䦫FÑùÓVù¯:HPM¶£9O¾^N€êϦ¡–Õ½WÓÀ« ÞŠ¹ÌºÑkS’ã;3™@½EíÆT‘)%kœ ltU…a“¿þ¦-Ìq…¼g”SmoZco6Ã|TŽŒì)Zö&«µÔÙC¦Ü‹LÙ[ÉËÏè›iPïeн¶ný}.Õ?¢óF{ZÀW=1:+Ñ!&å¤~ ©Ûy6YÀ¨uçØ(&à½~”ydYàoôÍàcw¹¯ŽU?Xq‡?u¥^w£F Ú\f´µTücB?±Q«u?#´wÐ…Ì$hÂîýjÏÀêá…´Ž2£Ðñ³˜{{rW\õG”K¹JÇS¥.ìÜ}£þÙLüÏ™M)³êæü †òN›Aù$Zr÷Šû®Z ¥žÌ@´MðønUý»ïAX¿y2¬iȬŸ¥ïF{ê?3ñRÛZTƒŠßjÆUu(P÷>|=š¾•Z;!Їœ®Qó8©WpôŒÿN¥Á¡~V9{ æïðÉ“ÎbÊ—¶«Ô£v¹˜ÁÔŽûW Ñ_.FÁò‘÷Aï“:m:´©̨p­Žž±:ÏÌbÒýíhVôYì§aivú1½FOŽò £Íð ÌkàØ˜$F÷D/‹wòº<ä÷ˆµ>3æ^ÁËžd½gÓ¿ÃZ­{4l›|)KXj.±(G°Xè“ôŸò*è7É>°Àªø%Ã韦(ú²úž³ñð´ùgƨé~Œ gzÕ¦zÍ Ëêú3ä}rŠÓÙI·?U KcÌF^æg±Ú@|42:à'e¯mEÏøWlÝwÆ?ÓGÔÏ€îíÕ»QÉu6Ó—&õöóIf“UAP³m½µÇ9ªév?^c3$Þ zýA¹¬gâí&Ì‘%ê'} öÒ”õX€`ò‚÷ôV’4J*";Ô¬½§õ4Ze=é§–~y$ú8±·Ž Š@]‹z&û4AÌÌ–yd3&nOú<#1ýVi) “Ú…¢æ¾8t$‚‘ôç°R#RËr;ÝÇ¡&ªkaf¢TS!ãS÷ önp ›ræ! ã1eŸ×ŒJìð¶bYó½.Û–s$áÏb5FâïÜ‚Áå­Ô&%.iûï™±Äe’sê~€è!3" Iè^@ñ|8°@tÔnääêî¥ï‘~´(Ÿ§ «ŽHã(™%j›o­½í™ ùÖtŽÎ)ç=ŒLŠ©µjãÙ@DuìD€‡DÄc|µš¸þ9„LÓ¿>¼éU)‹V#ýb‹UÇÚÙ<™¸¤týƹÌ!óG/›â;LTŒ °úßÔ¼Yd±•Ú¢¦¾}\2PK²®Î^ò¸„> ²¿÷í®ªÚþÂäø»ívm4 Îb®†¾J‡±JçZ?KSQ#5‡"B”1ÕunõÃåf–ºëzÒÇѧW^g“izµ¯¹I\— L†× ɉ€mv¿ÃM–¥[fIÁÏ3E Çüc"Œ!³}A&ú:Ö홡·ZEÚ!ZtºÑ·Ûœ´·­hÿÊ–diÐ0’„)fîMó󽯒šÂ‚Pbr\„” ÑUÏk‚ÊFW90yâÀ<®~%ëoê}Í~Ams,9»3ØÄ©+©0]N4ÅÃ+ŽööçÓæO!æœ@D+"ê¾¤š°€‚%ë‹?ïS£ùƒêoú[c^¡íòú³­î&aí峘(ŸEO×öNƒ¢´šÍ“F+¤Ô‘ÊzÝh0ßâeèï¿ìÀS6°µLB8SÚi÷µµFÛÚjÕ1÷þu»æ¯¥³ìRýkÐ{:¦%ʱ¸i—´Í Á¶ýãžÑ‡b~Åa½¯Ü~â‹û«ŠŒ†î-þc>ìw>>¾ûÚd©s·^:S÷zÖ_´Ûo%J=_g“¼)¶€fçO[bþì|7zh|þ246'îL£Ñà{ORkm+wÞÔZ=SÎ:&¬ò›ÅJÅâoÃìeZn´$|&¸5dÌ­sÊhC³çèÚ[Ó˯ ¬œ7ùœjÛvñ#Ìþ'«©C{ƒoÀˆñé1 ¯€n?k¦boZÕùžÀ¢c(Á†pÓ•‹oÍÜ{%2û|±AP]—[ÉG˜ ‹9ðºümOÀ¸ÁÔ7‚ä.-aš”RJÇe#®eE銭-•»ššJm;Ô¯Y55ð”Ó>º¼G~¤Ãt•ìëì¥æ&ž1{Eõ‚˜ÞÛo·V¼^e]iQ²híú;ž¶¡ëlÔ—ÿNîlÖˆö@UÓºõF儲ODNõ{û½×X+ºšš›2 íöK‹®-²à»fè‘èmzxÙ kÛókF‘ý”ÍyfÛN;mö¼n/µÛí¥‚¾ìv¶Qݲ^'Vœ¹z¥Ùèi-ø)¨¬úddE >SÑ-m·²OslæNÝ!º^ºÿ-Ë ËÒóÁókù¹LcA]Ø;dµ–çß6á?4UI‡ØõTÙáo®j˜B"óŠOAÎfb¿[Kóï²Ä½“®•w_Qt©ù``†I]3ÿ8ã®*ÜzÖø"JÆFÅ_[‹´n˜aª>Ëga榣”~ö4©…Ò£r»u^uXm˜fÒŸ†œÍÌD§o4±'µ¥yw«À©rîÆœJHðÁz–:v‘”Wn/oï€YåülÌY6ž®(¤¨Ü.”» s˜l&.†B~R‘Ÿe3¤™Ï[÷Yuâä IDAT³$¿?æ¹yÒî¢&jù–‰ê˜,Ñ¢yÒ]ƘÑE`¢÷^p»ixù¤íŸIÛç/uå]Ÿ¥tŸÆÌ÷йKÐÿ«ÌÿÊã/Ì¿0/è!ƒ:³?ðüNùc˜…Œ»°a#;õ6¾¸ŽíGJ|â΋ýÝ|(ÿa¿óô¶zàQ>bøb‹)?OR|¡L–q£GŒ°ºr¦–DîVàÆ‰¾Ë–GÿÇ~þo²Ø.” ¦¿û¯~øí­VÝ™-ùÒ—’ÿ¥ÈÛÿþ7§yÛÿî¿îßÞù5ðþù×ÿ}âkòyöŒ‡©ª"¬;ôèDÃ!)—ù^näÐm‘¿ûß|Øü°¼lÙˆíß%3ð?šP‚?±œ§@çaF­åtâù[·šÌ©–Ü`Émáï2…~~åÇGeÓ¿:ÿöŸ~I¯¹ù·>ùÆµæ ®»^¶²ÿW¯<8’›¸3·ôË7ÿvüWüpºŽuƒm¨õã#z³z HóÝý1íÉZi´À/¼úÈE·­íÓe~J8~䓉ÏÍœ ´?aÃÙgf~öÇ_˜ÿ0…BðLc‚àõ€n­8çòÙ™Rcé j²†ºsÎfKµüs0Eb¨«\@”âo=GÅôôÓ™ÌÖ³UFös¼NÓ#¤ù‡ù£‹ŸÊÔX^ƒv„V]U:Ñ^×Üá4/l¬ýLL˜ ë;ç03ù-ÍŸ©2Ϙf{Z¾[6ÎC"ø}Ëì' |$ý<‡™üȾ@ùŒa’¼Í9L@Üq9™Ãä ÌgvvÎeêVû®s˜”WŒmö —„´ l[s~c|ªCœç2cSèaÆ^Ú([€«—±‰µ’,|®ÿÓŠH¯Å¸Ú3>Ìe²]lSÃ[ JÒƒlõ4}ßWk}áãp3“¡ŒøNoÀ L À\fî,ìvÇ+ŽPš*à ¯¦¿¨¢?U[†}ù¶@g¼“‘§ÖwŸË´a¶Uð?šmÔ ± ´²ÛâØ§_J 7f=lÌæûu—<ÃDÎñ=IøiÚàC~ü(dY^/)\Hj*:‹VC3ÞpõÄvýjƒ ­ú çe2/Y˜I°Azª]Æ–öñÊMV»»ªnPwMu]k~àÀ çŒ9¼$$Îeæ£jè…½TMwS¾ÏÖ˜s,RxÕj@éV˹‚»ÿ!Ÿ?àÝê\ h›g’~u“î¾±ÀÔ Ý·sØDN ÛõeÖÂfÖƒI´êÆkýU4B†0¯Ã{X3ÞÉÿÌa*׿gÒŠÂÀCâ`:i“ÂðÃö|Þó&ji¾¹Ö,·¡ÚíF½w¢(‚,Íaž.]ÅöѪzÐ_P Ecs`‚m²cGÇò˜¦MíÍÓ¡S~nWÁ6Œ¯j“R¼^5ilНOS_­=šO.Ø\¸^?o¸›¢#S –ðŽM øE&ŽÇìƒlGÍq)Lå̈šlq*4©IèŠNŽœ¨ù=Ï0ÃȄͺ?5’‘ /†a@Ž:cÞ$[:ß×2ú ¼Â†„~T ´âmeéÞ(¡ÔñäŠê°ÕõÏ0ûAÕù:ZŸVT›ÁL›`R …G ™ãìõîfŒ±}é6(ãdÀ½É…U®[ÜàÔŒè3>›™!ü“¤fÜsJ´‚€ ØÇa8„W3ƒFˆìK–êäZ$~2F×o#,2ˆ×tjl ÆÑñf™®¾Æ';%Wž©ÒþD-°“&¢Ø‹åEMfcƒ*¹3.†?„p‘Épk-µ‡{¹ŸN²@¿(=ÃAfØË;ª'ÔöN# QF¡Î8ÿ3WvH—®µ ÃK3æw&‰8ýégØÙt]ÝVI¬ñEÐlìxDÝɘƒá —¨³Î$)a'`=èÏK÷tUÄ &%‡¡Xí„QQrâmŠ”(Qó^ñGT~C‹‡¿®Ã6Õ69¢MèNgbbRÏÚ¦.©Ó¢U nHœÒª‚,²¤tÝ&vYVžUnݳ1¬òIhÜ‹sË-¯£%fLÈHâöO3u :ÒI¶•VïæòM¼ëgÊœÕë¥èYFÙJbÌ‘.{I”Ódc²:Šßg¡´¶p…+ ™¾if–ÀWAëæ¹=/O+BÛҨݵDm*·Ë@Ø6¹Vp”îáå{PfÇ#‡\0–†­RY¬ŽI(E Ó™Iç43 ôfÃÃÒÅ+‹âãTKe o YÁ;×ÅR ‘xîšÔDètÉ]Wò%¹eUMz3™SÈ~¶”`Ë,f.À⣔*+ÿ!KÃOÖµ.}³72ñeQ¤£­;“Àä`ƒˆò2ËYe·Ûal8&¨í~1}<2ÅÌ`ìdz ú[ßÐWüïX¬:iÞca˜¶ M6Ò¥ðõb¼lWÖ‚vóäæË/Y¦Mö…À‚¡·žqM11 dZ­®ý±åža°…Ï™=p²ÖâµÊ¦ ´*ídtC—“°¦žP¼…gÚݶÓìŠàÏ;¨E?‡©À€ÞÉ‚¾Ã¥ M§b>Ùn,œb#QulÜgTÜÝ!ª>èô`gBÙR¼à.w/íéαE™Éi¦†:6©{(Úß]W}a0ÈÚ6?$”U=órM,öCÒïÒ>8"Èå_á –ìt»®g/k?˜Ôf—“ è.¶FõW‹/QîÆo)l²Ä¾ ú«„`¨9f|ƒ@ÄÒ§[g_ØÅIAhMrÖIZ׫eX³M1ãø¡]}Èyj]Ñ]k—Àô±øVÐGylÿÕ, h²®¿¬Üýh÷JsÖ‚Ìi)aAîO\ŒaÛVòL^Ý]áÂdžj»®³©ƒ¦yFI±Q冮  Šæ ÓBAHZíå4|mËY™ „ȱƒ˜5ó{Ì“¨Ûò2‹I÷ƒ—ã·ÖZªAµªO­g- O»:`tËb-5\*k-© »ÒY…Ð}m–c›Ð‹1›‘Ïz];ˆl*/vǼQ©,*š¿¶¨èZÑØ’¤þ,HÑÃU ‚W¨ÚÏ›T)‰M"fyS<>Q¿ÎŠÁĦi&Jæ\ÃLõ‹ÌNM¶.Ô¦yƺ\çvuœ·Â¨šQ,ý4ÔD¬[D²ø=\ã¾ LÏTÝÓèb—¤Áö}Ƽ÷ïœXšÂ ?Ú´v±HÃý,fÇ®H1“PH‹G¨?ÈÖŒA\çÛÚ᪽=hòýSv^Õ–ø€ÿ%»vøñÖjÓk”ÖUSs_¬µ7΃¦¯ð&š¾­g Ù`¥Çfër\…¡¨~¦wÚw ó»Jއ<Ç™<¤ØSsWÕúcÓ6HŠ1öÆ’|¶¢b:øg#†Ó9Ý£Hàÿdéê2Pº¤)¦Þð¨¢Ãsì6?4j]ÌT[¾¶õLããh°N±Cž¶Kª}”s¢m`1\ÎîÓQz…?o)Þ†®><]N/ïÕeá¨ÁŒÇŒYâƒ,P‡”ÕªvÕ¡K¦[Ùña@GQÃ&Qúˆ™ÅpÛ`ðÇÔFµš7’•qß N1%^¯¸®NLå~#‚N™ÑíFKIv‘»9£u¼C¢ÑsaÐŽt)f1G«žã7Ò¤­Êý|FŽÔN˼äJN<Û ŽMëKŒž¥—–ç ÁNJÒA¢ö Xð#Y¥™ØfûRLYUß Í­é{ªª[ ÃFs LåȽ™…,GÑŠÑXHµA.?´uÅ©Ò`œIH/êûˆ¿©k©ÕãÞoÊlƒ,ÌÄ ´ÜW™;@tÓ™*´ÿëØ± $ž¡ùÅaº…×3ù±”œhªŠFÎŒ®¥ƒ¦‡FGÆ1)ÿÓwCíqHÁ¡)=ØmvXà²fæ®f9¦,,d3Ÿû]„Ù– Þøøþ.¼bÂÖGy¥[nÔ©¸/|]O;?写s·Žó“.†ƒ÷ƒ›Ä·¡&yÛô¨¿‰ÓrÙìØ’Y¢cÞ 1¬}#2®@TÇ\™w„&KÚ÷c¿¥mš©ê>i;†>Éú ˜éÇ6=ÝÀ‹4i1˜¶F}És2Ç帊°\P…½¯êÕPëèÁ ¼.u i¯!`?³dó¦lSj_xãÿŽu>Ý=Z¡ÆaéÜ^‚žAŽ£^½„Ÿ°Æù?ßT"*hXõ„ÖÚ†FJ©˜aúÿÔÁ3íî£[ý ß8âÞ˜Ic¿^½QNA,½Š­©|ÿ¹¤/a,®± +ŽTìE4Q|fš™é û½& ¯»ï¸‰%®Ÿ >§å™®þPµë4(¶D™m‰.à „2-&3¤6Ý©„ŸïÞæ‚“Dš)'½ÚQQ‚ŠGÚ[¶áW¿gá_8Q(çî×þ8 QåÝllKYÈ%ØÆ@ÃÁƒò&tŽGBÞª~cºb:‡å£«[C ÅƒRRe‡d4aÌúÉ3·§a}͆¥–!ÇWn `Sc'±a°Ê÷7èlwV$FF_M^qª0ÿ_ȵ­¯ õ€–å¼®ìuø÷B]¤' ãE®Ÿh¯\ÿ2oò>áb‡ÅñùÅ&§Ö™É[mЕäF‡3¦v2‡©föf V‰¥¦uÿÄæÏ”aКg>u©%sO•Ö¿7݉ÊhìJf¦85nç1ÕQƒ¾MLÖ<é¯åæ0!7¬å¡]®u«f:þD(bžy×56åÐ Õñð`uF>–_‰.C¿­U@#…:Ÿ¦‘Ī!0­ÎÍaR¦µžMv‹ì<Γ‰7ªÈ¸+ϼáÕSºT~­ŠábçiãxbT~]'…1…K\ ;“÷©nÞ“wVÓs=É 6ü²ÌNMzÎÜÂÙFŒ±bÈA$Ax×vêàéºQ4ìœÖùj…쿸lÞÑÀ/öÏf²>N›&Ñ<³Ôö‹t³Øÿo|k:jÃX8Ò§5ɹ„]ʦçÐi)Ç÷›:âòàUŒiNã'ues˜ÆÉÈ\Æ0²çpúöäuóèË2„JgÄ”I4œ1Š!šº½Óü£r—hú¥md²‰)e½'<›YÉ&CBq4¥å˜°y™¢ÈsÁ®Àòqú4ÆÙ̺`¶"x€]-y·ŠOc«Žéa6И,0±±`•''¯×W€¼5dó*ã¥Ü·^Îî÷ñ4¢it’ÿ@'ÆäÙñÑ­g£j¢÷·ñƒ.ŠÍsÎÀT%›ns÷Ä 0C×õxÏI3u³ö8LžJi«i va~në8ËEX"¯zÔmh’kwsgªs¼181«î¯q:å~÷~B÷ߟŸ:õ°¯½LÛǤÓ~ÖJæ¡0Èc&ÉÎB¡Þ &8rì><êØÃÑcž–™ô 9ž–ݯ’½ãnÉk{dW|J†v¬k˜!ˆÝÊst‡Û’|C“bÏ,ëT]#ÇöQ÷7fì'‹ïCã´çUòJ?•Ø-©‚Øó`äÐó,× Å)Ú:Œe˜ Á4Ûf7…Cj,v¤]§ž ¥ŒO÷´N3%TÔ?)§ÕS$j†ÅlB#dg…Å~WÅÛ•ä§GQ‡¶ÈÆb ĆZ¨YïéxÂÁ‹žÉ¦×ìübõ SaçêzGúJÿf8[˜¨Æÿ㤑«8ɘôøŸ6Ð*; ÉUø\{ŒšÙe&òñÉwuÓÌy, NB¦Sþ”EWóc?wogB”­Ï@¥#̦9d}9y}ZEC¶+àšýd»îYf¥R³öž‚B{Æ!q9¡Õ†Êõ4&ŽÖ•‹Ð0[]P)¨ ô3Ótßµ/Τd|Ù`ƒe€Ö£€IJ§—˜a>AÓ0Ħ·&áô#W¬,*Zy¹±òuJ˜Åú™˜™‹ÌçÙ8eq³¶³PŸ@»­{0%™5‡bÀØá—á$küFJ//ºrϽ‹¿1f" ±w¢Ÿbø•ž_‘Ñm±õàÏ0MÒPîŸö轊Edcàg1‹p¿¬>‰Åy›Fùæ. ×´Wågª#0Ö~­Åu(4©°õ ,â7±ŽýŽšŽ·ÄØF<&03ú.ß3:ë´½X£¯˜ÃÆâùÒ ¾faׄ V÷xšƒrh$C_‚ü:FVPHÈöÏOµ¤6£ï8ÎVÕä|™É/²¼Ût÷õÆiÂaõ®%/´ß‘Qm(g66Å J9~ÅkR’9z—4sžª@†ú1U¡ë3èOÁÛy‘8ÙôÏ?0 £ó'ÂêR–Hs à7"}×íà AœÅ#jIð’¤Ðdë)§WÓÙæÆm;ÀÕ ¿6Õ~ßü{Yå©åyI¿ÿ-XÇëŒÛÞN²|eø¾ÓÔØ»c^9>ë\⤦„oP±Ww±ó$ðÓÜúgÖ”•ç+·è?¿$]K(Ã~q‹ùµ+ÙZz3ºL=æs“¦ÅYJo†¿¢@‡—õ°ÖB£r憦w«ÿ\K¿I×–9Ñ•(Ìw„Q¢h†—À³m–@™C:½Ì‘ùlXH±Ñ%zàH’-²~Ízë¶’b\1½k)‹Ù¢ØnàѤ.°QàïsÙÇ]T!˜Å(ߊmšIyï“L1T¢~7Iƒ^*¬å`£{Í]µ¬w²šì,î¦/€˜Þ« é˜1½©Y¹  ÛmühoàC±Ý ’åÆq¼Ø“AÙ9Ɔ¯¬k¾–Ûr$dX(V‰BH÷˺¤”¢Íô¸Å<U;ÉÓhœN_°ut9›¯ #³œY\A(Ò; â­[&á}Èo¡¼¾ß ¶Xšãà[@UÏž`ìÄçèŠÓL–1ïU‹ˆz[kœ‰À?yÅ<˜ÒÐD[ OËabž½ ÿd8 lKÿ¡J‚R¡3OUhO€;&°ëü6H1Ä .04¼†/Cí Âý÷óYLe'·Ë.Ò’a¿¼Á"²]ö `Å®žbjMwŠ$‰}ĆóÔ,ëd1{ç¬;xŸò¸áÚ0Ô‚-ZI"z2iÄñÒSåЉfWeŠ;e?›é&ÚnSBÀÎCƒÌ”¤±ù@fásPùP졼Jj6è×èRâoA¦¦¢ö|-ea7==ÓïzÔR¡7ŒÐC O3•jcí+µÅ6076KUxÞ·L® .IB¹šÖå÷½½`†™æ©³'¬ê·=Áœ”ÆÁ¬å„î¾Âd¸Ry«ú4ˆ{@!r’ ÅEøã&’Of˜MZ2¶v]/Øv²¦Ô§µÌHY0©—¾žúŽPŒ­4I:ÛêjØpB›-i‹ü¿B_»3c~<ÄÕb©üyÛ¦¢•é™)$kVù4˜™5d‡fïE³©“ÍbpcÅ’~Wà`]\uïÔ.ø|þÎÓàþx´èFæBfÖÇKF²á13‹¬KÙXÍ;úõ𨚫jvõ@ÛÕkXÛ,\³xªz3†êãµðUÌó÷Åe6]!ä'’=*1$I)Œ¼ó=ë™q¨ üNŒæ›RaúSµ©°~öïÎäõȈv` BòÔ‡9WÜXÔª¬ó”¶Þ»q u¿éò"³n0Ó}ôǨ#ê,Ú,&›""Ladö{*ìqÊâ4cû[®Ûe½:šE÷ÿNѼ Ô`nCÍÝjåÎËtÖ õÉS§þ1h¬©)l)Åçbw­^?‰iшó¥¢K˜Z¸ïcvëÀöËa† Ðà½ãµ«LÔ‚|b¶_­íaC‰Šµ¶i=釃Oj3V÷Œ–žÛžl¸”9á.£taº/û³s˜aàDÁ†LÏ6½ÐGB»Û-´3=žë·Êð¬E¿ó&—n>{çÆÔM$ŠfÀ– 6°E7s˜“¨} ;8U`PÝÆžèc²x±«…­@/3cNÈ£ÕãÏîK-?öú½l`DfQö[Îa2g1h1<Œ*ÄþŠ®´³±)ýv+ëd¿e‚Õd’ÍT–ê9«“Vl öãTŽÀ†—à&ÓZ›]ížä8Z ëÊ¢¥ÄøCvÿƒ u>Ãⷧ。n`“`NY¢ .mØqn9Ù´,×·'_`Æ.aeaŠaÕê|-¶Â‚kÍh·T'[õV¿Ž+ƒ´Gds :6ËDW㔬zY†Bn¯Øñ–ù彪ñ³=Gîµ^I0fÖ„}…;#ù` bhR¢ ÐsÎY«É’MË`¤Þán¾³pvÑ®•FÍ£øòðÂ§ÊØ<‚*^ÊŽœ€’×Å«ãY2õ##ÓL‰¥*Ц]82fü®³ðM¥=MTÀvýR4O~HzòãÐcÙž›—Áâ7WM²?æÆ ØÁñ$ NdŹ=0¢RÑub¾©U’°q©Ÿ‚p‡±)&V!ÀIô›0¶jà#¿{EE!ðFí8H¶ÊÜ`µ n«µº‰m!,’!fïd¦˜èìÀ±–Ȭ†Û2ži»83¨ˆÆp š¡–kʉʜȎR!d7][kÏ™ÉÔò[ä×CÚĆQO‹S“8³˜IcÇ„¬Ñ€\ílQ³në<+{°¥ît(ÄCðöd~¿×«+fqÉ Á²0“½Ø–€úU;ë"µ<_‡BCV†-|æʻ­ð¶ÁÅšr3¿B5Õž¬uÐ&Ð!,üh·Mí1eb†&4qÅ!6ƒgLµà|Ò¼;IF±Ô©ãßh?‡©‡)HJ/º@ï/¬Ö5³¼u»]š·Ðe µM½çižz¥oÙn¨ ™Ù$;3–n<ºµ ;€¨hžuj ,±¦pd¤•âÊ©ëÈ´ïk1œû˜Ë¤‚‡UŸµóXÿxÚWMû¤mÖuüÔë™ß;ß6ĹÌYÑd»µ—-f«‚™÷˜V8ï1AŸÀœõPìMvÊd+g`þ¸;>9ëA/ì²ÏÄü,¿0ÿ¼¹8Ì¿¶Ì¼Î-·|ÜeŸ‰Y<³âÓ‘¼ìpð«ð…oÑ…_8Ìß“/\N¿ýo/æ¾óâ¿·\æc`¹9—û£F›à¾óéÈOeþ¿t¿ðÛôþí1ú/\öí¿?ô©MúiÌÛ —ýôú~òGÚžœ;3÷Éæýs1/ôñÖÿÁ}ó»EÁbIEND®B`‚leptonica-1.70/prog/paint_reg.c0000640000175000017500000003236212262340165014573 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * paint_reg.c * * Regression test for: * (1) painting on images of various types and depths. * (2) painting through masks (test by reconstructing cmapped image) */ #include "allheaders.h" static PIX * ReconstructByValue(L_REGPARAMS *rp, const char *fname); static PIX * FakeReconstructByBand(L_REGPARAMS *rp, const char *fname); int main(int argc, char **argv) { l_int32 index; l_uint32 val32; BOX *box, *box1, *box2, *box3, *box4, *box5; BOXA *boxa; L_KERNEL *kel; PIX *pixs, *pixg, *pixb, *pixd, *pixt, *pix1, *pix2, *pix3, *pix4; PIXA *pixa; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Color non-white pixels on RGB */ pixs = pixRead("lucasta-frag.jpg"); pixt = pixConvert8To32(pixs); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_DARK, 220, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 0 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_DARK, 220, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Color non-white pixels on colormap */ pixt = pixThresholdTo4bpp(pixs, 6, 1); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_DARK, 220, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 2 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_DARK, 220, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 3 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Color non-black pixels on RGB */ pixt = pixConvert8To32(pixs); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_LIGHT, 20, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 4 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_LIGHT, 80, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 5 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Color non-black pixels on colormap */ pixt = pixThresholdTo4bpp(pixs, 6, 1); box = boxCreate(120, 30, 200, 200); pixColorGray(pixt, box, L_PAINT_LIGHT, 20, 0, 0, 255); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 6 */ pixaAddPix(pixa, pixt, L_COPY); pixColorGray(pixt, NULL, L_PAINT_LIGHT, 20, 255, 100, 100); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 7 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Add highlight color to RGB */ pixt = pixConvert8To32(pixs); box = boxCreate(507, 5, 385, 45); pixg = pixClipRectangle(pixs, box, NULL); pixb = pixThresholdToBinary(pixg, 180); pixInvert(pixb, pixb); pixDisplayWrite(pixb, 1); composeRGBPixel(50, 0, 250, &val32); pixPaintThroughMask(pixt, pixb, box->x, box->y, val32); boxDestroy(&box); pixDestroy(&pixg); pixDestroy(&pixb); box = boxCreate(236, 107, 262, 40); pixg = pixClipRectangle(pixs, box, NULL); pixb = pixThresholdToBinary(pixg, 180); pixInvert(pixb, pixb); composeRGBPixel(250, 0, 50, &val32); pixPaintThroughMask(pixt, pixb, box->x, box->y, val32); boxDestroy(&box); pixDestroy(&pixg); pixDestroy(&pixb); box = boxCreate(222, 208, 247, 43); pixg = pixClipRectangle(pixs, box, NULL); pixb = pixThresholdToBinary(pixg, 180); pixInvert(pixb, pixb); composeRGBPixel(60, 250, 60, &val32); pixPaintThroughMask(pixt, pixb, box->x, box->y, val32); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 8 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); pixDestroy(&pixg); pixDestroy(&pixb); /* Add highlight color to colormap */ pixt = pixThresholdTo4bpp(pixs, 5, 1); cmap = pixGetColormap(pixt); pixcmapGetIndex(cmap, 255, 255, 255, &index); box = boxCreate(507, 5, 385, 45); pixSetSelectCmap(pixt, box, index, 50, 0, 250); boxDestroy(&box); box = boxCreate(236, 107, 262, 40); pixSetSelectCmap(pixt, box, index, 250, 0, 50); boxDestroy(&box); box = boxCreate(222, 208, 247, 43); pixSetSelectCmap(pixt, box, index, 60, 250, 60); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 9 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Paint lines on RGB */ pixt = pixConvert8To32(pixs); pixRenderLineArb(pixt, 450, 20, 850, 320, 5, 200, 50, 125); pixRenderLineArb(pixt, 30, 40, 440, 40, 5, 100, 200, 25); box = boxCreate(70, 80, 300, 245); pixRenderBoxArb(pixt, box, 3, 200, 200, 25); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 10 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Paint lines on colormap */ pixt = pixThresholdTo4bpp(pixs, 5, 1); pixRenderLineArb(pixt, 450, 20, 850, 320, 5, 200, 50, 125); pixRenderLineArb(pixt, 30, 40, 440, 40, 5, 100, 200, 25); box = boxCreate(70, 80, 300, 245); pixRenderBoxArb(pixt, box, 3, 200, 200, 25); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 11 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Blend lines on RGB */ pixt = pixConvert8To32(pixs); pixRenderLineBlend(pixt, 450, 20, 850, 320, 5, 200, 50, 125, 0.35); pixRenderLineBlend(pixt, 30, 40, 440, 40, 5, 100, 200, 25, 0.35); box = boxCreate(70, 80, 300, 245); pixRenderBoxBlend(pixt, box, 3, 200, 200, 25, 0.6); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 12 */ pixaAddPix(pixa, pixt, L_INSERT); boxDestroy(&box); /* Colorize gray on cmapped image. */ pix1 = pixRead("lucasta.150.jpg"); pix2 = pixThresholdTo4bpp(pix1, 7, 1); box1 = boxCreate(73, 206, 140, 27); pixColorGrayCmap(pix2, box1, L_PAINT_LIGHT, 130, 207, 43); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 13 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "One box added"); box2 = boxCreate(255, 404, 197, 25); pixColorGrayCmap(pix2, box2, L_PAINT_LIGHT, 230, 67, 119); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 14 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Two boxes added"); box3 = boxCreate(122, 756, 224, 22); pixColorGrayCmap(pix2, box3, L_PAINT_DARK, 230, 67, 119); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 15 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Three boxes added"); box4 = boxCreate(11, 780, 147, 22); pixColorGrayCmap(pix2, box4, L_PAINT_LIGHT, 70, 137, 229); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 16 */ pixaAddPix(pixa, pix2, L_COPY); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Four boxes added"); box5 = boxCreate(163, 605, 78, 22); pixColorGrayCmap(pix2, box5, L_PAINT_LIGHT, 70, 137, 229); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 17 */ pixaAddPix(pixa, pix2, L_INSERT); if (rp->display) pixPrintStreamInfo(stderr, pix2, "Five boxes added"); pixDestroy(&pix1); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); boxDestroy(&box4); boxDestroy(&box5); pixDestroy(&pixs); /* Make a gray image and identify the fg pixels (val > 230) */ pixs = pixRead("feyn-fract.tif"); pix1 = pixConvertTo8(pixs, 0); kel = makeGaussianKernel(2, 2, 1.5, 1.0); pix2 = pixConvolve(pix1, kel, 8, 1); pix3 = pixThresholdToBinary(pix2, 230); boxa = pixConnComp(pix3, NULL, 8); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); kernelDestroy(&kel); /* Color the individual components in the gray image */ pix4 = pixColorGrayRegions(pix2, boxa, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 18 */ pixaAddPix(pixa, pix4, L_INSERT); pixDisplayWithTitle(pix4, 0, 0, NULL, rp->display); /* Threshold to 10 levels of gray */ pix3 = pixThresholdOn8bpp(pix2, 10, 1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 19 */ pixaAddPix(pixa, pix3, L_COPY); /* Color the individual components in the cmapped image */ pix4 = pixColorGrayRegions(pix3, boxa, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 20 */ pixaAddPix(pixa, pix4, L_INSERT); pixDisplayWithTitle(pix4, 0, 100, NULL, rp->display); boxaDestroy(&boxa); /* Color the entire gray image (not component-wise) */ pixColorGray(pix2, NULL, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 21 */ pixaAddPix(pixa, pix2, L_INSERT); /* Color the entire cmapped image (not component-wise) */ pixColorGray(pix3, NULL, L_PAINT_DARK, 230, 255, 0, 0); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 22 */ pixaAddPix(pixa, pix3, L_INSERT); /* Reconstruct cmapped images */ pixd = ReconstructByValue(rp, "weasel2.4c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 23 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = ReconstructByValue(rp, "weasel4.11c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 24 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = ReconstructByValue(rp, "weasel8.240c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 25 */ pixaAddPix(pixa, pixd, L_INSERT); /* Fake reconstruct cmapped images, with one color into a band */ pixd = FakeReconstructByBand(rp, "weasel2.4c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 26 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = FakeReconstructByBand(rp, "weasel4.11c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 27 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = FakeReconstructByBand(rp, "weasel8.240c.png"); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 28 */ pixaAddPix(pixa, pixd, L_INSERT); /* If in testing mode, make a pdf */ if (rp->display) { pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "Colorize and paint", "/tmp/paint.pdf"); } pixaDestroy(&pixa); return regTestCleanup(rp); } static PIX * ReconstructByValue(L_REGPARAMS *rp, const char *fname) { l_int32 i, n, rval, gval, bval; PIX *pixs, *pixm, *pixd; PIXCMAP *cmap; pixs = pixRead(fname); cmap = pixGetColormap(pixs); n = pixcmapGetCount(cmap); pixd = pixCreateTemplate(pixs); for (i = 0; i < n; i++) { pixm = pixGenerateMaskByValue(pixs, i, 1); pixcmapGetColor(cmap, i, &rval, &gval, &bval); pixSetMaskedCmap(pixd, pixm, 0, 0, rval, gval, bval); pixDestroy(&pixm); } regTestComparePix(rp, pixs, pixd); pixDestroy(&pixs); return pixd; } static PIX * FakeReconstructByBand(L_REGPARAMS *rp, const char *fname) { l_int32 i, jlow, jup, n, nbands; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; PIX *pixs, *pixm, *pixd; PIXCMAP *cmaps, *cmapd; pixs = pixRead(fname); cmaps = pixGetColormap(pixs); n = pixcmapGetCount(cmaps); nbands = (n + 1) / 2; pixd = pixCreateTemplate(pixs); cmapd = pixcmapCreate(pixGetDepth(pixs)); pixSetColormap(pixd, cmapd); for (i = 0; i < nbands; i++) { jlow = 2 * i; jup = L_MIN(jlow + 1, n - 1); pixm = pixGenerateMaskByBand(pixs, jlow, jup, 1, 1); /* Get average color in the band */ pixcmapGetColor(cmaps, jlow, &rval1, &gval1, &bval1); pixcmapGetColor(cmaps, jup, &rval2, &gval2, &bval2); rval = (rval1 + rval2) / 2; gval = (gval1 + gval2) / 2; bval = (bval1 + bval2) / 2; pixcmapAddColor(cmapd, rval, gval, bval); pixSetMaskedCmap(pixd, pixm, 0, 0, rval, gval, bval); pixDestroy(&pixm); } pixDestroy(&pixs); return pixd; } leptonica-1.70/prog/gplotdata.example0000640000175000017500000000317007556063060016014 0ustar dandan% % gplotdata.example % % This is an example data file to be used as input for gplot % from file. % % All lines starting with '%' are comments and are ignored % All blank lines are ignored % Use '&' at beginning of a line as a control character: % The first '&' signals that the data is to start % Subsequent '&' are separators between data for different plots; % this way, we can have multiple plots on the same output graph % % All plot info lines before the "&" that signals start of % data are optional % % If they exist, the first three must be: % title % xaxis label % yaxis label % These default to null strings. % % Optionally after that, the individual plots can % be labeled and the drawing method specified. % This is done by specifying: % number of plots % title for plot 1 % drawing style for plot 1 % title for plot 2 % drawing style for plot 2 % ... % % The defaults are to have the plots untitled and to % use LINES for the plot. The drawing styles allowed % are in the set {LINES, POINTS, IMPULSES, LINESPOINTS, DOTS}. % this is the title this is the xaxis label this is the yaxis label 4 % (this is a comment line) plotto uno LINES % (this is a comment line) plotto due POINTS % (this is a comment line) plotto tre LINESPOINTS % (this is a comment line) plotto quattro DOTS &&&&&&&& 1. 4 2,7 3 11 b(4) = 19 (5., 31) 6.2 40 7.3 , 70 &&&&&&&& &&&&&&&& oops, I put in an extra one 1 7 2.1 15 3.3 22 4.5, 36 5.9 62 &&&&&&&& 0.5 4 1.5 10 2.5 25 3.5 35 4.5 47.2 5.5, 68 &&&&&&&& 0.2 5 1.2 12.3 2.3 27.9 3.6 42.8 4.8 61.9 5.1 68.3 leptonica-1.70/prog/dwalinear.3.c0000644000175000017500000003107111707074305014735 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * * PIX *pixMorphDwa_3() * PIX *pixFMorphopGen_3() */ #include #include "allheaders.h" PIX *pixMorphDwa_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); PIX *pixFMorphopGen_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); l_int32 fmorphopgen_low_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 124; static char SEL_NAMES[][80] = { "sel_2h", "sel_3h", "sel_4h", "sel_5h", "sel_6h", "sel_7h", "sel_8h", "sel_9h", "sel_10h", "sel_11h", "sel_12h", "sel_13h", "sel_14h", "sel_15h", "sel_16h", "sel_17h", "sel_18h", "sel_19h", "sel_20h", "sel_21h", "sel_22h", "sel_23h", "sel_24h", "sel_25h", "sel_26h", "sel_27h", "sel_28h", "sel_29h", "sel_30h", "sel_31h", "sel_32h", "sel_33h", "sel_34h", "sel_35h", "sel_36h", "sel_37h", "sel_38h", "sel_39h", "sel_40h", "sel_41h", "sel_42h", "sel_43h", "sel_44h", "sel_45h", "sel_46h", "sel_47h", "sel_48h", "sel_49h", "sel_50h", "sel_51h", "sel_52h", "sel_53h", "sel_54h", "sel_55h", "sel_56h", "sel_57h", "sel_58h", "sel_59h", "sel_60h", "sel_61h", "sel_62h", "sel_63h", "sel_2v", "sel_3v", "sel_4v", "sel_5v", "sel_6v", "sel_7v", "sel_8v", "sel_9v", "sel_10v", "sel_11v", "sel_12v", "sel_13v", "sel_14v", "sel_15v", "sel_16v", "sel_17v", "sel_18v", "sel_19v", "sel_20v", "sel_21v", "sel_22v", "sel_23v", "sel_24v", "sel_25v", "sel_26v", "sel_27v", "sel_28v", "sel_29v", "sel_30v", "sel_31v", "sel_32v", "sel_33v", "sel_34v", "sel_35v", "sel_36v", "sel_37v", "sel_38v", "sel_39v", "sel_40v", "sel_41v", "sel_42v", "sel_43v", "sel_44v", "sel_45v", "sel_46v", "sel_47v", "sel_48v", "sel_49v", "sel_50v", "sel_51v", "sel_52v", "sel_53v", "sel_54v", "sel_55v", "sel_56v", "sel_57v", "sel_58v", "sel_59v", "sel_60v", "sel_61v", "sel_62v", "sel_63v"}; /*! * pixMorphDwa_3() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This simply adds a border, calls the appropriate * pixFMorphopGen_*(), and removes the border. * See the notes for that function. * (2) The size of the border depends on the operation * and the boundary conditions. */ PIX * pixMorphDwa_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixMorphDwa_3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); pixt2 = pixFMorphopGen_3(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * pixFMorphopGen_3() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This is a dwa operation, and the Sels must be limited in * size to not more than 31 pixels about the origin. * (2) A border of appropriate size (32 pixels, or 64 pixels * for safe closing with asymmetric b.c.) must be added before * this function is called. * (3) This handles all required setting of the border pixels * before erosion and dilation. * (4) The closing operation is safe; no pixels can be removed * near the boundary. */ PIX * pixFMorphopGen_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; PROCNAME("pixFMorphopGen_3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); fmorphopgen_low_3(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); fmorphopgen_low_3(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); fmorphopgen_low_3(datat, w, h, wpls, datas, wpls, index+1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_3(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_3(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); fmorphopgen_low_3(datad, w, h, wpld, datat, wpls, index+1); } pixDestroy(&pixt); } return pixd; } leptonica-1.70/prog/shear1_reg.c0000644000175000017500000002210712244775260014653 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * shear1_reg.c * * Regression test for shear, both IP and to new pix. */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define TWO_BPP_IMAGE "weasel2.4c.png" #define FOUR_BPP_IMAGE1 "weasel4.11c.png" #define FOUR_BPP_IMAGE2 "weasel4.16g.png" #define EIGHT_BPP_IMAGE "test8.jpg" #define EIGHT_BPP_CMAP_IMAGE1 "dreyfus8.png" #define EIGHT_BPP_CMAP_IMAGE2 "test24.jpg" #define RGB_IMAGE "marge.jpg" static PIX *shearTest(PIX *pixs, l_float32 scale); static const l_float32 ANGLE1 = 3.14159265 / 12.; l_int32 main(int argc, char **argv) { l_int32 index; PIX *pixs, *pixc, *pixd; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; fprintf(stderr, "Test binary image:\n"); pixs = pixRead(BINARY_IMAGE); pixd = shearTest(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); /* We change the black to dark red so that we can see * that the IP shear does brings in that color. It * can't bring in black because the cmap is filled. */ fprintf(stderr, "Test 2 bpp cmapped image with filled cmap:\n"); pixs = pixRead(TWO_BPP_IMAGE); cmap = pixGetColormap(pixs); pixcmapGetIndex(cmap, 40, 44, 40, &index); pixcmapResetColor(cmap, index, 100, 0, 0); pixd = shearTest(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); fprintf(stderr, "Test 4 bpp cmapped image with unfilled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE1); pixd = shearTest(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); fprintf(stderr, "Test 4 bpp cmapped image with filled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE2); pixd = shearTest(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); fprintf(stderr, "Test 8 bpp grayscale image:\n"); pixs = pixRead(EIGHT_BPP_IMAGE); pixd = shearTest(pixs, 0.5); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 4 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); fprintf(stderr, "Test 8 bpp grayscale cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE1); pixd = shearTest(pixs, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); fprintf(stderr, "Test 8 bpp color cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE2); pixd = pixOctreeColorQuant(pixs, 200, 0); pixc = shearTest(pixd, 1.0 / 3.0); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pixc, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); pixDestroy(&pixc); fprintf(stderr, "Test rgb image:\n"); pixs = pixRead(RGB_IMAGE); pixd = shearTest(pixs, 0.5); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 7 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixd); return regTestCleanup(rp); } static PIX * shearTest(PIX *pixs, l_float32 scale) { l_int32 w, h, d; PIX *pixt1, *pixt2, *pixd; PIXA *pixa; pixa = pixaCreate(0); pixGetDimensions(pixs, &w, &h, &d); pixt1 = pixHShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, scale, 1, 20, 32); pixt2 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixHShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt1, pixa, scale, 0, 20, 0); pixt2 = pixHShear(NULL, pixs, h / 2, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixGetColormap(pixs)) { pixt1 = pixCopy(NULL, pixs); pixHShearIP(pixt1, 0, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixCopy(NULL, pixs); pixHShearIP(pixt2, h / 2, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixCopy(NULL, pixs); pixHShearIP(pixt1, 0, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt1, pixa, scale, 0, 20, 0); pixt2 = pixCopy(NULL, pixs); pixHShearIP(pixt2, h / 2, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt2, pixa, scale, 0, 20, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); } if (d == 8 || d == 32 || pixGetColormap(pixs)) { pixt1 = pixHShearLI(pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixHShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixHShearLI(pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt1, pixa, scale, 0, 20, 0); pixt2 = pixHShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); } pixt1 = pixVShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixVShear(NULL, pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt1, pixa, scale, 0, 20, 0); pixt2 = pixVShear(NULL, pixs, w / 2, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixGetColormap(pixs)) { pixt1 = pixCopy(NULL, pixs); pixVShearIP(pixt1, 0, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixCopy(NULL, pixs); pixVShearIP(pixt2, w / 2, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixCopy(NULL, pixs); pixVShearIP(pixt1, 0, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt1, pixa, scale, 0, 20, 0); pixt2 = pixCopy(NULL, pixs); pixVShearIP(pixt2, w / 2, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt2, pixa, scale, 0, 20, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); } if (d == 8 || d == 32 || pixGetColormap(pixs)) { pixt1 = pixVShearLI(pixs, 0, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixVShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixVShearLI(pixs, 0, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt1, pixa, scale, 0, 20, 0); pixt2 = pixVShearLI(pixs, w / 2, ANGLE1, L_BRING_IN_BLACK); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); } pixd = pixaDisplay(pixa, 0, 0); pixaDestroy(&pixa); return pixd; } leptonica-1.70/prog/fcombautogen.c0000644000175000017500000000534012242266473015303 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fcombautogen.c * * This program is used to generate the two files of dwa code for combs, * that are used in linear composite dwa operations for brick Sels. * If filename is not given, the files are: * dwacomb..c * dwacomblow..c * Otherwise they are: * ..c * low..c * where is the input index. * These two files, when compiled, are used to implement all * the composite dwa operations for brick Sels, that are * generated by selaAddDwaCombs(). * * The library files dwacomp.2.c and dwacomblow.2.c were made * using = 2. */ #include "allheaders.h" int main(int argc, char **argv) { char *filename; l_int32 index, ret; SELA *sela; static char mainName[] = "fcombautogen"; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: fcombautogen index ", mainName, 1); index = atoi(argv[1]); sela = selaAddDwaCombs(NULL); if (argc == 2) filename = stringNew("dwacomb"); else filename = argv[2]; ret = fmorphautogen(sela, index, filename); if (argc == 2) lept_free(filename); selaDestroy(&sela); return ret; } leptonica-1.70/prog/german.png0000444000175000017500000013234211353700537014442 0ustar dandan‰PNG  IHDRãg«§ˆsRGB®Îé pHYsM&ÀÜÚetIMEÚ’e¥tEXtCommentCreated with GIMPW IDATxÚì}mÒã6®µÆ7ûH×]ˆãÒF&5 q\ÚHænįG™d#OޘƠ@ˆ¢$[²ÏùÑÕ-SüAÿöõõÕA;Ɖ]@A¦&‚ ÈÔq4<ÇãÁ~ ÈÔ±SÜn7Ò41 ã‰"Aä'ÒWúsûŒtŽô‰>o¿¢Ô-×D2¡oKép‡¥%¸O©?Nî…_ÎòI(Ê*ÍJ‘V¾å‡öOàJ%/-J_ä牭§ŸHÐ )°4Ÿa2ëcP¦m5¼Úþ©L¾Ú噂X—¬mÇÂÚê á3¥LM¼ ¡îéyÍëΡ¶¨"œkßâåŸñZ§Ÿ™ZN‰kæ3Ðñd·ÈÒå’¼(äªÕËÉÆÈ¯ß¥A™èÙús™ÚZ?„n€¦ukótpoE‘•?£¦•[½Þj¸ 4éá% IINà}Lø/§µí_tý6%\e- ¿‡éãëë‹'ŠäðdÑÔ½AOZô gn=ñG‘—ËEý.ü·z¾g?Iü(ôœGÞ«ËìáÒívÓ3=9YÒJQöÄO½Vô= ÕÊ[7y‘³S}Fʹ\.×ëÕ¾Î÷8™ÔœÜ5°£¶ºwo—áQ¶þ$‡óý`Þ÷§iëÒàõ ‘àa,¿¨žê2V)Û·W^`2xEÛÓ´D¦è3¡·\>Çn·›Ò½wø|Gò‰®Úð+ñ°6½€· îÐ¥Gä' @UED‡Up¸¶“©?E¸•aA‚ï=¯—(¸Ä€ÀËþËt~þø‰§êpèeÕ˜ôÏ]_´üpÓ–owdêgb«5ÃHãØ÷}›k6™šx%DvA•öváÙ¸{îöœXzƾ¸[-`€¾ßïêEëÉÔï+õqßF¨ääϵnIì ѬD{}Y¼˜¬HÃ3VWš]’Lýþ°4—ˆ¾Ú^Åb&ã¹³¨íaŸ Í¥<®°Èü,í…½¥¢Þ”4©òkÚ_ñ«U¤7Ü÷<û ô³µbUî´ÈÔïŒýg‚VSF(úÞ˜0™ü3!_ýªÞ1‹åý'ÖPãß^Òë'ÍDðŸÉõ¦!9 £Û¦UåcÉ.О|dê5¥jŸª“Ò‡¼@Œ¢r“%¦$™ÑZJ4˜4Øÿ6™‡áÂc§nXÿ«æóF’îÇ y5•R³žÛ±pˆ’¬v^wN¤ñˆ£@/½5ÙP¬`¥$È/¬›º:)Yç"kû&%;42Ô§@ÓêA%;ã§|'Y¤»‚?–š¹Õ1+´uÀɪXìù¡¸è>IW2ËaJõl,Ñh¢TΗú ýs†ÒæUh½4õ|®ÄãÞõ«‡Àî0üɇ®äžÿêN§á‹ðs9ñq ðLçUºŠð?} ô~v—P ° ? Ã#µ|ýU¸‰Nªö<§IýlÒÒ ¬DnóÙgÅõˆþdêMB`÷& žJò:yÞ¦¼ð4”ó²ô€g®Rl·2šÌI¿¨K†K¼+\¨ô+ÏòP1-Ü.lþ1gGßÒ 3´‰î¬ÐóÒóI™C€vêõM ÞÕlµ¦“ì¦v›¯¸Ýnâíd­ÆÀDÝ”÷›ôÊÛŸ„¥Õ5ÛZ~½ñZÏ?/—‹DOŽ|±¶@Õ 5Ü1´‡êO¬1ÚHÚ=¸ô¼”O»Ç’S–Iä×;€!‹Öâ? ¸Í‡¹ó j°é5J”¼"™|òõ=­¨WK!9ƒ¦k ZË7+òjÈÿç·aF)H{bjÍ‚b×ë}{ñÏ™n¥t‰ï¡PÓúñ 3HMZç'[Ò“•Ûr´Ï ûz & »Ò62PK•JùHÃ„× {dHÜSª-,' õSÂwhÎ.Ùôj,~;ï&ß¡«ÀN ¶½ÛÅG„—¼è¼»ÅÂ^†nè8N¥Z-i²o]e“ÐnInS$v%̹µ$1gdêÍÙÐRÞee×ʉ7›¦ËÐÛ˜„4ŸœùLý,yï8A¦þ8²Þ­r½“^²1pa#o§&2õ“”Ö$c‘›#‚ S?›ŒHCA© ‚ Þ Œ|!‚ SAdj‚ ˆz1ë)™š ˆ °þÃ.òj-}2‹mmúÜÓétÄ;º˜Ÿš £èÙ0¥R`ž~»:ù˜ÕÎ¥_x{¡Z zý›þJƒûá4s–^–è/qÖø)¼•¯Ž™ºë:ú~Dg)¹tÑ•"¥kÉÂ?߀G–£&Ó¿ÞÒ°üuáÝöÔ©?W?ÚÔ{zàk5!Ô¡Ç!^_Ÿ×Ï“kÆ|9^cµ:]IAƒ¤WªÐ‘‚ëQÙWpΦ;êÔÏ£Hû§ß9Úí x–)ìÝwá´×N§þÀ˜…‡~s:·¨ÐSÅ{†(Á…G=%%®‹&>‚©eøa ï ù7|Þ‰fÞ,ïjØÓ|…h=5î~̼‘ìL—ûK4°Œ~žÔ!§ïÐÊ_2ý×,a %õ-Ô°r‘ =çr·_x¦Û™¯AlËÔGô§Þ:—Exˆ‘øu„›Ð] اdqª4žTþ°¾$A‚8*S·±$lEk4¬d°Ph'âxÖ0í©­Àzqx7 ¹ö ŽÙŠÓ›#^+GdêvpŸK±w¦&‚ VÓ*A© ‚ 25A™š ‚ S*ßÁ®x{Ün·Óét:ÖnŠ™šxèÔø ÐÔtËYU©Yòõ}o³o‰ŸØÏ×£Èóƒ.ÿtÍê¹æØÓp3ÊujbMަú³ÛÑÑ$檱ú\wÍô «Ü‡-% àz:iš:õÛNKŸ[9IÖ¼ÊL°×g{“›qÿv»é‚¦¢màÖ—çç¤ù‡ÜÓ™úª“gÌa®×«Ï,¾pŠÚròô¡Ýοp&ëå«,¢òÉQSIÂêËy½†îÓì¬KÓã82­/3>ô}_Rl‡aðÓ>¿0ûUûß—c]%q¡`u!Ñq‡›[+S¥?AŒk²ã.×*HÓÔ©ŸÛí¦ÆÒuGBÖj¯«ÅB²ž¼èˆdý~ÇQwý³kòIQîìõó[¿eùFA«q K°ö‹¯w‡½„÷z½Þï÷ä«ÿÊ“rWoÞW¾Ì¶gvˆûý~К7 ‰ Àù|^«Õäµ°3CәȪ6áz½.¬­-\¦L8qê«ú "´5Þ™©í I$DÄTK(ÍÛëõZ37îß±J»ìV)6,dušö®UþÂr@T, >GkÊ U %]‘¼¢¾æ¾ª âÍ™º´ª‹$‰Ò$ÊBBÖ“ ’Τ2 g¾NËÑËç§° L'é¢ç˜VÞÛ ¬%¼°¼Ö%ëP®ºTÛXs­ÛÁUj;«ÚÚ‡2¹ÖZ?ˆ·eêD‘ñR$;Ÿ Ë’T³ÈÚ‰$õ±*ÿ’úUd­­tIYÓerá+|±ËIßKŠÜ×V” ]V­E¸¹|ÛeËXißKªDµšL=1­ÔZé±ËþÕàl ®¨U©"¿Üzè'ÕÜb˜äçÐ{˵¡|ÛÞL‚Ù+Jµ]eo·D„@’ýk93z1kû­?ãYËèO¦~[»‡•6¯*z²͵«Ôd ýÕØgfW¨@­¸¡ž¬ùríÏSör[0(­+*ª Ý2u(Ì«0csm­äè©S“©k©ÁJ[h,![¬KD6$Ðp«>«ò‰ß÷Zöà¾UÌ—:Ä~Å]BR¾±‰,=M§¶³-TË=.VaêÒ0dê"9z9öî@y¤-ÜD—¶·K&gi!YËîöùræòÖyoÄ_…©“ýÙ󙺤S‡ô½Jm—èÔ2"4z¬…w‹QôÁ,51 à™?Žã0 §Ói};°$”܇ÌÁ¢ŠÇמRš}×õzmùÑÀ}[±#V|Åî÷{ó¨…£³b’¦-ƒnÛÞ–d•Ñéû¾ïû%’C>+—žHa˜Ü#ä÷0¾ücâ–”¿bRæRH¡e¨ûý¾¤¶¥ßêJöª°LÙäˆJeÆq}Ub;ÄbBdh"™z†’ ·Þ”!7qØ™1^%±|e ½;t]±Vl8Ö[Øp9Q—¬î“5‡þ) ·æ~µ5dêƒ@ÂÕûv»i:Ç’¡³2{Ùk·ÕRíU4¾§¬bª^Q‡²õÜèÈW}7¥ðð> ¶i¸§Ú+j„-¤ï{áÓ…·tú$ìÃ0Ô ­]ìꞦ¡“‰i¼g³Ï-ÙÆSaŠ~©¡*Ÿ¦®¹äUW¹þfÝÑ/m†æ2u¸³‘ýP®Ò mýi·#afJè[2õ§3u²K4à‘ª±<Ï™u(\RlR·|Ê5Pj[~ÎäÕ–RváOd“¾ é{ö¯¤~y¾r ›ÌùdhöÄ|Š‘|ÉÔó†çEz‡@ƒ¤a;¹p—,˜ËSH=Ù„¥ “tC«+™ZI³pkhºôÛuiº¡žÍ6…’ð4ý‰zô\üí«lï{'€{P޵\²Ð#òtêg }{:ü&%ˆÕrÿ¿ÇãNÁ:çó9q,[Þ´ç;P¿Ð?uǤ—x->…©­ƒ§§l«M¯BL¥ÕâX™kÖãñÔW~qNÙt]ü(¨{õvÒK©_C@V×£poº.Z¦Îj‚ ?}`›7ÊjOÔt¸RcÿZéi¸¼‚CO¦&öEÐBÊvK¦§ýO×2zïͨM‡ÛÖ9$k25õš}1µ\ü1Ž£Ï!‰JÁÔŸf"+Ox†m>Ù–Ô% )PÈÔÄçF%n·Û$>œÉ6Ï‘?WäÐïY »ÔTØæ)$kw*sñ‰'Šï¤ÃŒz¡{™Möâ²ñr‡¹ƒzì±ádjbG𞯚`]GBå‹ ÈÔAÀ‰]ði[Zú/™š SA¦&€™o°Ö.ù!èê½t¼(kç —ÞÇ15;¡’Ûn=ö?ñ#¥ßnqÍæÜÊSBÈÔQKsÍ÷yÃó~k‰R’v­H/gá«Ü˜L©ŸGû”×ÐoÚkÊ¢…ß6«‡¥I œÔÃÏwÅe+VF35jRªð]•wÚ†]ÝlÑfŽãH¦Þ3è¥÷â°ÙÝ’iœòã¤Ä7Ì+Q¡®\2ÅÎuºÕ5ÄI•9wBã¤Kƒ›/i E¥(íÆ+i¸<ÉšL} š>ÁÒ2Žc‰²-sù=~â–[WkÊIX ¡*ûjX2-³0 Ž S¿-4%E˜?h wOZým½«H6ÆŽÃqÐdákQ¡‚L½¡*-7’x‚ž];Ïf¹’¹ ‚ S¯LÓ°­Ö­4÷ÑA© ‚ ˆy`Œ"A™š ‚ SA© ‚ 25AA¦&‚ SAdj‚ 25AA¦&‚ ÈÔAdj"‡¤ßãÍ¡5°y ßµ§Ó‰7Á«€·s­‰·ÌÀ·QrÁ-úJ×ȶÅr­DÛvêûžIЈå`.½ÃSÞÖŠá0 òIÞ}¿ß÷ÖaFùV=_ë½?×ëuù–èr¹Œãøõõ%ÿÙadjb‚ ”GÚ®­›u_ÁµAˆÆ~r>Ÿwµ¯ƒ°¸^¯I?ß¾CV£óù|»Ý–³ªôï´ˆ'ƒvê IIJjß÷öèaú¾oޤϭ@ÛÅärý`‰Ua;UZiú|>_¯WÿÌ0 Éɘ;„¦ï÷ûº×Œ½½!ž NýPí,¿N×öÿº›e»N4(×B4Àõ»RO§“Wó“û‹Õ²!Z¶ îrÖeU[ò,; A„à‰âVл¾dÆÊ6\>Q˯nÀ·«Àr¢ß³yÝ3¬,KÛÏ¢_ëpè"šOî¨VQÒ}ÿkÉ¥+= 251ÖªTbµ9y@'Øä¥æÏam5}4Њ}—´4'”6ŠQí8aÉÎÝ1¯z.¬Žö~÷°Ç€åÏĨ¢šû$íNr´lìNK7 ¶ÚR™UììÄñElµœ^¯×ÒW°=¿ßïö±ûýŸ”^t>Ÿçþö~¿û_ ”£¥d_1ý¹mš4JŸ”?áóùì )U#Ô°T+©¼|k?±ŸËWv€î÷»Ôê£É‡:vaõápD|µ¥O‡­h¿y¡² GŠx©7„NÚ„kt^¿ÃÎ4 ÂÿŒ™£~)Ê~(¯Z,-ðR­6 ôŒ"°<à NH ˜hÖ*èÙÍ6ʇ'2í: tûs&Ïž¥†Ïòiø|> ò+è±p°HÖdjbfÿ¦3G¨Yæ³¥ à>Q¸€ï”tôÕË€½r]Òè“om+À!D^a«®ð"ÿÏ­“« üÄ–YÃV¥5Év&Çãþ#ÀÁkGfRò®+Fë‡Þû <ÛÀ»+÷êSÿ6ë¨ÑÖ-ìr¹ÀšNÞÛàXòÞ³d-Ûàÿg›ö°mÚ\GCðÅ,ý\*Î$±TŸùÆŠdêçÉ…—-Ï)ÊÝá´¬JK ùžÁØEÉç* ÙtFY'­¿²ëw¯–ÿÀ BˆÍ$™Î›ð«RùîO­¹djb+- T«ÎÃúçkä»RA®|—m¯ðNM¬Ò{I? ù:Q–óõunÅVYÞF%"SëC@˜À¡ÀÍ =·ô*׳âå¬Žé£ø&YÒG~çô]Ïž4hsãu&×ÇBN÷†¼@ýÄ»7‹ÎZ-ˆw£Égëk[äÔWf©O‘›¤ý4†ç×mEBÓsß5W½õù=:“W6,³-äÚ[íÕ¢1ëÚØÒˆ”>×´0º BõÒh?”4[Í)v êÔG¥éU¶çž›¬Z½úß[%hR ŸÕÊJ¾„0WF¨ {C|^ÏÉvõ}Ú4¹J¨ûKåCŽØ4x°•±ú{¨ÛÊ¥\Z«qí»ïûÞ÷€l³d£ w}Á ¾Ç4›®´TRì2™™ú³ðÅÄOf»ï¶ûk勼VJ—vIðtcm/°Ù½;dþ—r ¹ä™ê Ú’³»r‚Ëh¼Í'?Y’o•ò„L¥'sƒƒäÕ²î"Ã0@XOåGY>×á€ãJÏÞe»ÝM"o:;ïÄÔn„ÁKWãYüðùHô0`¯ä/ O†Äõ‘è¥TÿõÞ7Õ.E`Ï PÌ#¹}ð‹<æ¢Eé'¡ÓwØ.P~åøpÛÿ>RԿ˧Çê*¢xF¾k2µçD›mÃò²ç& ¡$3\)P0‰¤ð¹¥B÷Ñá!%ÍMÖa‹ #ý’õÌÿ âÂ}Ô¢¯dÈzaŠ»d™ ;­´(úõ¦+燂±fv=251/v.Oï&ZóJ_Îé–7!íÌóPÓì¢üy(`’Ð5\|p]H»•ýYÊ;šøiÀ[äáq‡•O^ês†¯ ;­´„Ÿ‡—•9r 25ñUCálÏ+ûŸ÷ù«¯Ù«Tš¯c’y!Ä9”Ç“î°ísÓ3ÕPù¤%¤r*©,I©ßÁ¬(%J®!¾Òc5ä•oÞa=HØí\ýöß…b?à·Ûzqhª !bð¯R·_yLnÚν$¹QWxUÄoLkøöÞ¸Òy¤ AÐKï=™Zèï~¿‹7lÉÅ©«ï{áˆ-Âj¼W\è¬×òÂßÀÑÒí¤i‚LýÑ€ Hº¯Öá'p„T|Õë¹T‡·'k»¡¡¸dêC)Céår±Ž> êvõ‘÷ŽãØ÷ýét’h:ñF€:´]~Ða’ %–Ø-h§ÞœÂü¯¥B*ÌmÐ[[c‚ SA¼ hý ‚ SAdj‚ 25AA¦&‚ ÈÔAdj‚ ‚LMA¦&‚ ÈÔ±[Ü Odj‚ S™ú€\³Jæ¼w%¬œ‹ßAA"ÈÔ›L?öµíŠ…òÆl•ô,r6¹6A|þç·ß~{Âk¾}ûƾ†ÞXÒ'òÛ?þøã;Ö7íÛ·oÒä?þøƒéX‰ÂOì‚'c-ŠyWªšlj‚LMŸ²ÔÄÀEâ`4Mš SĶXγŸp]úÎŽ‹%™šxÛy~¹\N§Ó*L}¸†úÖsu4ºÝnrKòívÛŽ¬×òk’ž›MØOÏ”×甯£ƒ´äÕP‚N¹7˜ ¤]kù} Æq\‹gŸs¯¤%åŒã8Ž£º&ïRBÜÕ(ë<²”·Qÿßn·aº®»ßï _¡"÷&øÚ×ëõz½žÏçóù|ýùê~¿¯õ–ûýnÛ"oÑ?Ïç3ü‹çîÑ IDATGþ?ë¶pè:mѺ¸GÒXíØ*°–lÀ­Òi2š+JQ"à “RR”vÔFcZzéõz­ïÉ'Û$M†ï9¢òtÛ‰¸Çù;tÊ-Ï•¨¹RCVœÀ•D6v»:¬µ „Õ^¥À­M_´dž‹²"ë®,0“’öL¦ž«9U.ºV-Y’WhoÔHËd?ÔTûi‹ú!™Z»[f{‰_–Ï«)Cù27@×¶Ï×7ôtÑA@Ÿ@”öÕÚµDpV9sš…ýcñ¦ž|QIá🬬 Ì¥'ýfËþnÅ6ÕÀ€yuARá”?¥‹&U¥|¦ó±DÁ25 2ð <¼ÝÆôL­cä½/ýÞ¬ªL(xåËÊA"îá ´R²ýÕ°Æuæ04ÍË+ˆ¸Î54ìKfý &•þ d1«Ì%ª@éE —„œU³ò$åßhetFûºMû$_~l“¥’s7µž1´±V<ƒ­C;D«'X¢oØd¿SëL¶«(¬¨k¬a]jm¡éª´ñ´Ãœ¬+°Ñ“?ÍkÐPð¥5vFË&VLývf ôd›áøH Z¦ùYlª%Z¼×ElZ9¯ì.ÏS%ŠürçÏé¥?;jVæU¨ì‡ò'Pg}'Xõ<B8‚O`‡”óAL­ƒrî%eD5†½IÍò«åXQ°“ž‡bÃ1¢/NXÇâ’9ûG¿9˜ËS µP=Û-áÒJy½p‡³˜ÌbáZâ7¶OP‹ÔÒå-NR`;dМë?».‰–}oÈM›25ÔʪÏ:d ½jªÎëfŸ/É¡®ÐÛvúCçÀ´zÚ¶S¦©ªdý()nõýºÐ+0u‰juI(±•J˜ßXC<,ûám!SCgYÙ´žð ?ýüá ¼Ðú¯;_ÿ wÙ!Yldª-$ÔšK=V¿l'D£¥AÏ”…MOPüöË:J;Ýziyg%ÁOád…©†îÝÔÿm]¬ù¢î–âÆXâëÐSÛ÷=ü¶äVy¹\,­ƒ­u|žtõõU‚—Þn7y‘­ç8Ž·ÛÍê2Ö§[”‚ŸPý‰üçr¹@oÈŸâåZé{ Îæòg¾ æÞµ íJ¼‰µEs}uµ7žÝ`»ºÞWW$aR­óµ´ËyÆq_ã—{ñkClM¬†Ñ0”õ\V¦Ù »m<›0µ¬o–ÅDŸ d0´Ïç³ R:ŸÏI× kX².Ía¥Ú¾ïuøû¾ÙÐS[ØR-?dd‰‹Ù.@cknò¼0Ž ‰›’ë[$$õ“y•!±¯ž¬°Ê¶L„šÔn·]d§Ã××W(TÏ Ý„†ØW—&leõòÇrV Ó Àš±bøÕ™Ú ¨°­íˆèƒÎò\Yÿ.í}K ú ?¥‡að«¥!ôÓÕþD„CK^¢«6Ï“6½x•rÖbêå=V3÷æ†)‡Q¯!k‡a×oUÚHЇÈ._¹[—.|f©Võï²OªÂ—Kl.¥WÛ¥÷ã˜Zzm1e,™r53PvÝ•¤Ùî(ELE/‘EIˆáOär-ey¹ %Ôo÷³$=¼Äd”ôjß÷}ßבgj» K‰¯ïûad×" ¤òe‚–3kà*æÞ0š}ߟN§atAÒJJýär¹Lö¿íj\ÞiÝp›Õc‡È qÚb*Þn·æÆÏ•6Ul½¡ Œ×Ö$z¹\@RC ˜;ÆkqÜZy'*{uhŽÿUC¶“}Ð[?B ÔÒ¢ðQ½¥¾ô'v5¥ã°!bY–¢¾ßdúˆ&C? ÃétÒíëì®t;%Ño†Âõ6Ý÷ä'¹1ºNV;ý |Y`;@ò!جŽbžþ/Vv%1Ö4 }sƒ¯9JîwÖ¯j^ÒÞYÕ×Jó>‚à"F”Ìòý(¹À®°æ¡ëk„þ^pV>Ë ,ô‰—pxb¯}‡€ ×÷À¤8Ù¡ÄqÛûyç"{H3kŒÂ~ݺáÉY!éÞu–çbØ™a€˜ò@¥Øxy¨w´ ÃpBg³§»îÔŸ,IxK"ÙIï×ȷ愲Ú`Ï€¡[1ˆ])ü¤+e´E¾$î´õ±s•L ®¸°%r߯Ô%äÉ:l¯.¨ž¹ê{¸r`Î$öVâÐyqnx·' ½­KÊM}$írïÆ$"|-ÿHߟ%ÕDæoØcªHyÏîz]ðm#_<[)4.˜®”1 _ö+=¸¡>^ ´òþ[ fÏ5¥eÉ(©´ÍÓ ZêÕŸÉēΒ…!õ9+J‘Ü•¼°0uÁÖi^üëšÛ[Ù!•;ŒbÉJà—á%oêVïÇÒ.ƒ+·rÚÝý#¤o?’ѦþŠ‚¼Ã à¬L’‰Zí÷w¯âŽ£c‹œj‡ÎÐv ]?± S—4ëÐØ{¯ø´ñäw^²rzsØ«„{‹C…ÁB…z®æ{”!M û*ä»Zîi`oúPU:÷dxÎ]3yüjÚCN°ýàÐ:5A¦&ˆOY;IÓÄÓpb¯bºw½Ù ÈÔÄ;àv»ÍÊ S™½an¤ûP¡&ž‰ŸØÄ3!¹Vº®;ŸÏ¥Lå¨A8±”BVDZ-!8AP§&ˆX-å&”+|ëÒó]× Ã ì/éÂÔkìyâ=™šÂM<Ÿ©CÛÂív oÝÕo56Z¿•\¸ñžLÍ]ä'#_§AKÕ?Å@Q¹ÆkxÔ¤q9¹À^Ù£i‹mêK¡i 3qx0L“°yé|Ž1H牴ìóðÃ<2Þ&›µ‘Ͷð$•½VS$BÒ•…—ÄÄ~ÀEâ?wåH‚vkV—aÍX—ûÁ]eúŸü* ¹×*Tá½îÞ\¬Ê²-g5tˆj/ß §S­&ÞÓúA|@†‹(áŠK `Ë€ª}׸ʉÑCTæüBBÏæòC½_Mj¸ÒI¯Pá@djâÀ€‹ŽJ¤^{¦<.r ·ÊŠÎ›[¢½~ùÛŠ‘y6N©‰÷W´Kܽä‚Úp¨D‰yÉÈ™šøTjÓ«e¿CÝ… ¹djâ0 k’“cÀކŸW·[*ÉZ¶‰]¥ï{’5A¦&Ž ð»°ÿvÎj¡ì9É}â¡a˱Qà9½v&¸¼~ò¥­«›h@¹2tT$À‡Ú_¹ë¦í·ðaîO ·}ÕÒþ:M{©±>©Ÿˆûˆt?µ~õi}ÜKÅ>Ô©‰NÝEÍ´ê-xƒ„z¨Æs KæZ›8ç õKi¹vœ¼Z·Õ{DÙu–.ë©¿Òþ=àfˆ£à~ûí7ö‡ã—_~ù÷¿ÿýóÏ?ÿþûïß¾}ëºî¯¿þúå—_þùÏÊß¾}û믿þú믿ÿýï¿ýöÛÏ?ÿü×_ýþûï2ç¿}ûö믿þòË/úóß¾}»\.¿üòËÏ?ÿ¬¯€ýþûï¿þú«­žÿäïÿ»üür¹ø_éçÒ[1 œ¿ïš ¿ ¾}ûöQí}'ðÎâã i›ì]ÆA¦&ˆ}á…wÌD˜÷ƒø,<^8@©‰÷a4ýÿ,^Ûÿ5ê4zdjâ Éú4PjÓ™šx43© VO÷µ+§»+ñ®û3 ö0ò…s‚Ø\‘›ˆôº!Sž©ŸFÖõ³¥91¹²}«Dö~žÒÌñ;¨‘©‰ÿNŒ± Gô}_Ã6Òs2ÏÁ+–¿q•:Ͻ!a’¦‡ahøÇw(‘ ÃpDÅSâ?·™lè?Qã(Š4÷®û1Ož\>+‘ÞdAQRC_úwÙr–ßݾÝ\°Ÿ×Ëö’vUθðE:gëe–ϺôcvQ†¥ƒAìô«3›°mkÊóIJᬙٜp²òWzŸ¡ö8í…a+gš¥)Óbÿ¿„mjÓp$¥Z«šÅf-‘XQºì §%7h!6¬(=¡$C^Y?^ö·vò†¬ ëHB)-L¥’pNJ£­F(o%Á.=ÿ¹L]²C)ƒ€Žæ•‹\É­dê%C’k7¶5¢m,I|®êd=¿Ãâ!­k8Y¦§˜iÀ É»j–ùy¨A—(,YJ›5ǵ4ÐY2–3µ%ÓP—ÐoK‚*õ÷‘ý?,Ìá2þ)õ„ÍFÛÕ˜»œëJãETx]uì7ÖÃ0ur\ *6h– ò^+MN¿¶‡úER¬§¡Püf.S—~j‹üi»«Fy´‚èSò‡j‚Z¥üL“ÑÑç¡Óì…õ¦¦þJ:þö€Ò:\,ã‡?!ñWäÕÓrTÀ,Ìšóá¶>±\l¥ø®¤îX†²Œ\bj 뜩ý·Ò“@ˆ“WOÔ@JÜ’¨PáaLiÊ|SÛÐi2äç?¯¼ˆXBÑW[Q«¡QHBŸh7¡ 7 N(a2ù+f>¼Ñ¾.œ<ÞþŸÛç¡@ó|ÚU\S×6'T”’uÔ“XQD8KzÖäfÎ6¿M=¬dê’2ë™Ú+³º@Ú% zÕ®»öE¥éP²~øZyã»_×ç©ßÃAÑ…–7í"[íY;ã·bêd§Š g᜾m9žƒB-¾™@Aô„5W‡ ƒF•¸O¹ &¯A{Qkì—íÁa—^ÿarj¤'Æ56+¨°-3ä EÕñíÀyŠ«=w„Ö3~¥õ£´—¯¡H`[`d¿„[:Ï_ÍLvrSýx+(dvAꢫÝlWÀt>„dÚ«Æá* Ž¡ .dØÖSW²›ò‘]]A˜`°²8KÎlù0Eå+èO1õ¯Hl»^ˆKóÍëàቨ{`÷°mœì.˜{¶z%J*чKòço÷ºö!¬[E¾Øh«Ëå›DùD=+Å­ò~¿Ëózy’¤¶¿’Î_pÖá?M-­ä½+¯}rÁW_Ë‘’嫆P+©°½u“Ku®yQ©±ö·>©6^áßXSë+ÿ¿Ýnà Lé+;ÖÇCþ†Á+$]Žæs›æ aƒ¶]v†ŠT†2©D…³¬~àVò?YÅC\ ) ­N;lyH¨Ñ!Ü©WfjÑhl´Õd¶b‰—óU£B±.ã8Ât­É ’¤k@‰å«qû¾÷Ô0KÎJSÑFU7Í‚Søæ„~IèA>£Ä]]>èÇã!}+k-ô˜üGFtD äÉX˜6¾P‚ÈëÛîÏõeBŒ õ#’W&¬¿r–׫–ti©&Í©ÚnÑ)Ö'œïÇÂÊL-j7w–7CŽ€û°-¡ä!‚ ñµÁ®Õ ^ÊàTùj߯nAªþ¼7”âå¥^ÏÛ]5zhiÖYÚ|‹µ­âì)[ÿ´Â3· k­UmýY*Êa†5´[m¾†wÂÚ&Ÿhá67ÀäÎÃÚ-‹®[%Ò/]÷cÞóY½'Kµ¾Z7¶½ o^Bd? Û£Ïbj‘0I(¡Zåh?½óq '¹ý•}E5Ã+ w¾¯žîåg)P úÞ€üºƒ’è†õ[ÝÊŸèô®yW¸oÕtk¥Í~øg¾ÉëPc™YWO·d1 Ãétêû^9ÅnÉýrk÷úLß÷}߇k›| %À‡á•Þš$UÕºÉȲ¿-A+™ôÏÜ]©Ž¸Œä P¦V›Øét‚båC;©õŒñ0úõFÎÔàaê½_»½ÐüaTWð–í DsOáÀb£ÕÏšJG ³bRºýÌÂNóþd>î«æ8×û½AÇz7vý¢¹¬7qèê Ž7áñz͹M8á¦÷éC6|¡ÚÍN„vt×õšãÓP¹ ýÊ¿¢XÍ’“Oéè5猱ÂÓVâ@ÑÌ Ã,ŽN”oËÔáæw’”‹M˜‹«‚‘O?ëónè¾\V6Ì\Ç)%iö6 foë†ü]ËE(Tý*CÀó6¶Õz2}lš·ú5˜ØS‡›wÌn®½¦é¥_#È!ÃC3_”žO>ß­Ì­›œs.S>A&öƒMnƒWñm´YÿõXßž·Š{–÷Æ …mhL× QóüÜÏ?Þ5žû± 6djõ‰¿}/ÙsïãRJœO<Íkˆ@ÏÁß:ßx)=µ<Ê!A¦&HAì¼›œ˜·äÈAP§&^ÌÑI,é Ù'A𨔦»ê,¬“™í‚ NM¬º¤ŸNÝ÷Üx9ÿŠ'¦ÿîæûöA¦&Zp¹\ÆqÔlm Y §[@Æ2xo€'ûYÑúATAÒØ†)4põ‘M!ðxbÏ“å™jujâ¿Â'’g5YàJ½WÔ’r®¡—~8©àÓBM쟬ÉÔÄ w®çš,Íñ|©‰ÿRð0 ã8ªÃF¨#‡ª®ÿp!¡‹' … ÈÔDLµã8êŸêÔ¡÷B€¹Clõ–Šš'å]òRÚ@‚LMü—ÅôQɰꥧçò‰zõ ÚäóqO§Sb`>25A©‰ÈwGq³SŠTªW´õm2ž'‘?.H•4m‡¬²á5bà OØ´Óì"tÿh“LýÌÕ×¾ÔîBrÑÒMᬷ躕¦-ÙVI{ò™:Ü’XÈÈÚË„}WÍðØKW“tÂh«óbÛë7Ê_°¢X¥x•E®aô— ¨N?-Jûy–Í$a.µ{È»æ2u©ðS·18t#¬ *À5ƒ3.!ÊÒÛgYŸ@‘·¿òÄ ív!·;©`è>ÚPüæ^>TBµæ™{޽0uhvÀ>³úRïIÖO%›xí~¢––Yoû:ÍJ^Ó¯'n-PËñÖÀpÊK;Êp1IÇ2Ð¥ÖÕ´Ô¯I–»óšÔPR³¢àm2!“†l2˦€-Îî'â·_^J¡Û­:Ü0Oý–Z~õôv—­¿Âö?:¡ÖøåŽ@dà^™©= [ T¢w‡¦+¿ö*!&Boô¢_ÚPZQ(™ouiÛ=ZIõÈ­“Ê;¼Âêt¶÷ÂãR•lóK» øÜ®Žv"%óÁUý'¶&ÚçZfé, Ä MEð”º-´.ÜñÌÚŒ–!)­þ€QÛ×SÏŸ½€Éc «š'ÁЂ7©QYÕÚV¾Ò©ìãý“dê`¹ƒa¹‡ìõ|ÏæÝêÕyO4À¼%3Ìíp1(é,ž¡JR29“õL<\ùJŒ kRhXO˜ÂÏ ˜6^¦öMøÑgj-0{2…¶Û•uîNN—½ÒÚÜ ã5i³¦ ¿bY’õKf^¸í"¨ªv‹§T îzû@éLÛëdÐ~cªz†ßエ”6"vgPÒÀžà·G¦µ7W+ü"Ëxbøžµÿòå{ùЯ¼ÁÄ"ajлᬖ±P«×¼BºñLí‰ÏÅÀ¬keËñS¦ð;Ì´„SÂãPØÍ„sê }kë ³zY‡= òç¢Þ"T¹Ÿ©ß‹}å‹Yèa=ùì»™Cr‡j„‡ºÀÔ`ø*©9Sëé4 Øvöï4²òí\)ôõõåCEà¦T°ä£•,÷Ùr”}r'vÿ­\ôg¿ÒWëçöö)OôID†u½^¡|ðÇ|ü >ùöòªðšA)JâbôjD{?‹ÖS/aé¾_Í%¡4ú¡¯U uÐä|v¤jØð Œ©½3Ì^ ©Ö÷½æw•ö6‡ä”D´s÷¸Ï PÒܳáUÂá$š[sf ìZ=†{n¤I(*¥?UÎKo‘æhúÂK³xŸØêE¸ÜºÀ/èíy`þ—Qy<÷û=ïV¸‹OCÓ[çvXòív³3gRõÚV‰¡²wYåòW)°Ô¥Pð9á¯"Ä|´˜¶h¥’&ë0‹Í!dYWÕ­ÚȺ²&ÒüJš†‰Ð™fõOs[&û¡Çß”t ý Ö¹ü½“} 3ú9ýy¦–›÷*Ù'aFÿUƒ‚&l¯P ÇL4P?¯JÜZ ¹¢;Ÿ® âbçåÔf¯ÏçRBIã8„_2 Úz{òvÉL¢±ín ¯QA”v—k©5â×ð½sRoðKÈFcZp©u¥,K¥—¾Íõöë3µN{?u“!”¯ì­ý¤-OÐÜ߆| åÌ­‰µ‡äLW9N§“,<×ë5ÉFRÚ5'•Id:—ukd˜ümÛ4ί”.MfÿF/¡…GîY/•£ºžß¨ùuznîÈ$—X¢l{k^!Ê“a*u`Þ±“ƒ%[ÿ.¯5ƒú¬YœÎç3Ô6¯ªÝ$éú¾¯Ù9í=+ÈFAJõ‘Ï£6f…“%'0áÑVé| *!öÛð%¬3=Í «óg­“^zþÌ=Œ¤‡úûCWp±(y>@±¡o_ÞRïËò‡NIME+¥¥“Cÿ•%S9/»²³s}(¼>ï“uteW×Ê€[ÿpxàÖÕOÀ°íam¡É%¿=©I(‰CgXsð/*9×~Dä 8AÛ~™Œé(I6œãçr2áCW¬ýˆIž|Dl(¡›ñ’ç]Ù*OðKMÓšoqÛü!%ÏHï –ÙòJ3§¦¥Þ‰¸Ø3~È)þ]‰;PñTúyù××,`•ãë;*aêš• ä£Ð£®ä2Tï:ÝûBüc¾~J–bÍ’ò½$3÷³˜:T« |?Âç'yÍlßkÓë€f “Ä«áKC E'T¢CþÉ]‚ÇÇ~Pý|ÌNÉ'ÝÎd"Qª6ÐeW´2—©a+Îí®‚ä]ø½çbåîMUPBohë_ïÜ6™i¨+D*U¾¢”ëÑ¿Î{pÎ%²ð]>´Õ úx·’¦ï™:l)DáÎÝ1¼Sϵä–gB'ëIéW))\$þÂIeÂ@á<듹ʉ¦y,…ú™xø§û„m0m|ȯ7ª„¦“ºhUù„È]˜'—ù‡©×¿KËÿ/—‹¸BÃY"©|.ü«&où‰èãò8êi âmY€„;¹çîáC¬Œ|!~ k=-“´v±AŒò˜r·>Ð÷½ØOÀÉZ^ÔÌ-OÂÏ…¾…ÇÇqY†mÊY/Ø‚æA‘ܳšx6ŸJ¾&Íó±æ¥Ïœq×ëõ‚ýÓsÖ+äºÝºúx<àv’Ý¢¡žo›³‡éyZrÖêP†ý‡I¬JAJT4w qZ¢¼—Ú2·æ³R€ùib¥Wßþrø×ëÔ÷ûòËÚ¥«ëBUWÊ—;G xïÛh‚¶K¥á 5†A,©KGQLž³%º^¯Ë;D†>‘2u\–(§RHRI˜¹¥ò:hUå]"´“=ãPÕ¾f*/‚Šé ¤&«ŒÔsÐ=g†‡ªmè&»™ò‚²g¦n¦W½':ð ÁØå¾µ7¹š[›GÓ‹Ÿeu­FV˜Eòé3ùÞœd'™Z RnõɶÞÐ)Ÿ«~7ÙBH)û(|Ým7Ân0Zi/O²0<óB£XØ-K$uÅMIåÚL°Éµ°óçK låR–Ù¤zþsûÉÝ ×"ížÃŽã¤†«[F¿w ÿ̇Ï/žË`¥±“HUTûp%u––ùRlØ’Aù Þg§Œ½XNZôL½gwLj°ƒ¶t3‹§`ìK""r™?Ó¬^-T @Ü@X--ZÒTE`Sõ?_Wr…ZÄÀj1ž ’.PXrVoij- wîªduå+"'Êj‘Àw_îzIø ±~bËÓòŠôÊMiÚÊ[;<\BVUD×Ëån­€]YK/·Œ¬;?`ž{V«7gjµ¨Z¦ÎÏC»³å©úý”§B}øŠ ù¥™ßAÎ<ÕzK4üÖ›)kv¸–ûô'¹™2œHР„: §!ýa‰­ ¥žnìë¯Çµ}hû94©p†Ì[³¥³Õʃ}:4þ¦öÉ5yW©@¯e³‡?·…çê‚שíèC,;‡Ó˜×þP+®/XGaÐ?—©­mÈ2urs¾4`°»ôÓÞsM¸Ì†+¶-°Â/Ù%y£gêp;fŽÄY“Ö=«›û^Mªê5ÜÄœ—‘û™à{>ì˜Wö-áÕLà [æòì F¾™°Ç_áîÛîYFýSZ¼“j(U…†o}ôh/0s%0djp„VC“ýÆÚVÆÖ<7•Œ:õ91^{µ”O‘á”Ë@>=W†+8ù\ÅžÛ ˜*ð"¯aAerÁòÊZØ“Š¡e_C0ùÁXŽ“Ø*ýsÉM¬âÈiùÚ&eî~¼ \½e!óãñ˜ìáÛí6 Ãõz-=œìü j˜Ùãñ°ª¢Ü ý£ž³R‚tŒ…þ_íü%^6“µŽEtz½^']bá6™ÉêNkÛëeoaT›-Ü'xÓ«pê½z—Ç(¶¹3û‰¶„ d.@—ÖL4[¬öaب|°ìóõ¬õlMnyÍ+l¢åN&±ª‚ɇv×r Ê‚—Z­†¾Ú^D"7 õèÖ Þ>¼Šc¼¼h‰)°u“¯ì²ÎöæjÈoõçB¯2õg»Ñ÷‰ E×®ü§†òòêÉK+o‡±wé–þ¸ÛHHÍ ¡ÖDoAKøE¾†ár¹œN'™) ƒk 6ͯÍõ¡msÇQ¨ZTi€‘Mr‚‡½1«‹öÿrÚ‚¦û¾¹ÔîVMÖ*áüñCv+L¿p&—D?äšòZ«£’ª.½|r¢J²*Ø Âa6NvoýÌôq>ŸmTX2ý’’=ëÁÊ·„V íZ8·gòüÊd¥×·.‘jÛäí¾^Ç-U•ðÛ%ÐnŸ;ˆ ̳vÉ:ý)L ])4K(è¼ò€Œ}ß÷²¿®‚Òõ©ðm}jÍ\](—^ͬd+ѧ†a€C³Ò Ád?äµM–¥ðI8†%6ÔpíU¹"6 ²št¼Tg²®‚“S@ŸW‹œ‘t…з÷}oT°˜é“Ö릒Y¼d%k¹6ÐÞke©óƒÛqI{Ou¸’ÉBÅÞVX,E¡ÊÜ0 §Ó $Gw!%Ý|¡]ëØL­.hbdPÛ«¡ö^Ò­57gبԎ¥¥5‡êa¨S$úÔä,]nt«ì18WH@;Íìõ`’²ÒO×p¥¯/«.h´çÅ@¡Te)¬fWT#9ã8ö}¯$#®7P ¡ÅIÓr<Ó%µ•Ú=1¬I ¨Òisëc‡Ø6§r&5KD½Ú¾s :À¾>þ§+ÍÛã]Üüì¸t𠇹àzzP•9}ŒC芞&×øXp>±^·Ý~Hà™ž¿Üiá݆®M:øn÷ލ¾Âà®ËC膘¸åÀá~eP{’ÆÄ{Åø†èO&ã¶¼ ]â£RúÊ¿¢sŽƒùðyo°JÞá\è&£TjÄÞ;nû +J¸x×£’»½w7\Ë­ëx^z%m.ôé±îY¡ó™÷±Ɇl5öy_`)~4t€·ŸйLm«ç£¹Â¥4äôY‘¢aèZR8B}¹\²¡ŸŒŸ~9,­Ç>8\á ?C´\(1&„ó”ˆ`Ò—ù+ŠqÓ…ZŠäô’9+³ÇdÂO ¥Š‹¯áä2Ÿ0uxåc)l7úO î1\›ÃŽ…8¬š•ï ý©Ã9l5²p&]–¦wi%ðôêIÁG–^ Î„"ë#ã½NW · ã#€òf- ¡r7™ßÇÓĤÁòYÓ%¶ЇQ ¥ÕG*jµ“€‘°Ù==JB{8ߤnzõ9‘ÃzuÕçWxBß. ?>*Sû½|ÕæÇÔÀÒÞB®½à½®Ÿ>”têR\VM$³ë4ƒB79sJª_eÂÌ©óF­%è•úš¾tî´Uéù 2õò|§ms¹¹É‡K¸øALí¤“6MTo)m«Kb”pG˜¬ Ü(ù¤IF›YýSФOLÆÖžSŸ=®™¿ª“­r-H³˜Íí“ÏÕW„;×$¡ÞT%'¶ejŸbÑg«)ý0̲æmd%«â¦ŠO¨?á0»AyÚ}cõ ˆ_2óÃÆcÝ|Ö¼î¥æ¼Úm!¶º›Ü{ª>¾ïÅQ/Ù¨t¾‘€égƪ”êð„ œN'HB¨´HF®[¿®½]®JÍØŠ©²p¥Ã¯„ê½ðòYw»-ìºî·½½h½„ÿ°»2õ¾T*ÎFbV A© ‚ ˆõqbï­nWf2Òør‚ S‡f£~²®|rÓò ¢?± ˆP»‡Š÷hQ½7QGÓ>Nl Ú©‰7Y'ÜfÕx×ìöhw»ŠYš&S›OLvÑ™LÊ zt½-x·Útsá¤iâ9 õƒø/£ ïha¦¤Œìó²WÖÛ˜ HÐ™šØ‹¢-lCKôâGÕ(åC}òÁÛ0NY ž 251›õÿpWžÒt÷ý²{_°Þ\lïyQï{­¸þ–j)AT‚vj¢É % +VÙ¼òjÐ?íëp›P³½ø˜4Mdj¢pcºþi³ké]½pñüä]·Jë¤i‚ SíHضt!)AdjâÙðŽz¹ ¬ß& ®e†W³A¦&ÖQ´ÇqåZþYå„Ï¿MØ:A©‰À²§(Åâ࡟‡žvš³[£i:çFb )Ã0È@²&25QËÎj èû^µ]ë«§ƒê[mùp uý¡üÙ÷½|«ŸA¦&¦vj _T· uÿ°×·[¦NBÒ•ñå?öÊ`25A”À MGÒvŸæÜ&yšàæF¯\õXöO0’Ø8l &‚L}`Xf|»¶‹!äjA¦&‚x7ÐNMA¦&‚ ÈÔAdj‚ ‚LMA© ‚ ÈÔA™š âSñæ÷(jŒ2ƒâ‚ N½kš&ˆ]©Nˆ¹`49A¼@ä'ÜêÔ© bï»=ªÕD%~bÊTñžv2A¦&–*zä’5±CÐú±/®Ôƒ¦çß+Hú ˆÝ‚'Š;‚\Àƒ&‚ ¨SïW¡&MAš Þd9gWP§&â¿Ì¸ÑiAsÉÇ#<àÃß{ƒ¾Ä›P꺚¦žëÚ+Õ×bg-¼¡9Ã0È¿çóYleT´?´~{#l§èf,(n¢ßÍ*AôAË€ké§+šøo·›¢âz½.¹Þx>ŸÇq”ÿhí Ê‹¼Žìkeq¿ßIÖÔ©‰ÝÑ´:ŠÈ¿Ç£ïûóù\"A%šÆ”W”ŠÍIê~¿Ëÿ…¤VÇ µ%S] –Ð´ŽŽ ß8ŽÒ¶Xí"xÝãñ=ºë:߇×ë•“âÍñE ÷û]¦«|r½^ï÷ûý~—ÿȯ¬òÕö^/<ç󹿷P=_©êõzÝI/ì+@©¯”^µávpáÕçóù|>ë°Ú.•Ï95Þdê#ÁªNçóYØ-_‰…–³Pƒ¼´Ä&•ծ粗HPW»…C®OÀÔú<¯<©‹®þ+UÝÉ Gl Z?Ždñ°¶NШj5ì‹eón-ž^¯Ä8ŽÖV;Ë&n ¬þ'{Î!. 1;4ØÖíMý­5 lîöI°kKÅ8;hý ö%YÕ=½nkµWPµ–˜¬N7ùdbÀ'+†b@˜kç)U¾Þ’|åG*ì=¨¶”` \´ÐúAìÅxªûbû ÌsÙ³×ÐhÉdná'y*Y VZhVÓmM{¥s,©Ý¿ÃwB¸ÿ˜EÖ%:†ÅÀÚ:Äm+I¬EÛ/ᙚx±…Z§«UŸ=ÑøO<}‡ü+ÓŒ¤j¤ž¦2熦mOX çcZ½ÈlQ–yÁ|®mRˆçëYd¥BMt¼tL­}\öæìÐW“…LM¼ÞôÎvåÐ’ó€?§²¤àçø¤|²6x¤”L u6S¡-Ä;º”>,9¥ØÅ)äë†%Ö¶«¤M{Et眦ÉÔdjâÕãä¦"LW™Õ%ÊótŸ„ÆYy2d`êPñ I¹Tÿ¦.Q­÷Y õwÏ¿ž4KL:‹K `å€IÆNŒ3öImg ™šx¼‘úë»ÉuÒ©C͸ s©õÀ³ÈÂ` ŽŸ‡š~¸ÒQj ³NÆJ.‰¡i6`p(1uh«™Å‰þR”2µ7I—6¥'yœH¦&vÄÔàT²OhÖ O¥B{…·Š$^ úü$•ìÔamgõLÉàã-!&NÍÉùç,¦ž´ÆØÈ—|Ë25'È'€¹ôއÛí¦.´àá+ÞÓ¢TÖÄy'>¹¡ï°wÖg¯wçÙÝäÛ…Áå—ï˜q.næm=ßVI» ª+º‘Nvþívkv„'Þdêãár¹Œã¨ÞÏáËåRÃ)õYâJ4!o±ïªÏ½yˆtBk¥ ‡C†©á’wW8x15ûÉ”âCŸn ·›Õ3Ö);L®ä«:&‡µ²˜åôm»×—c#’Âaê\$N蟞 kC F¾+`2\h"Œ^é¢àÃÒ<ŸdjùH˜©&ÂÛ3ÔÜ@[B)2R"G(¡ò, ׇÎ'ù˜ `2L âc,»H¦&^ V—Ô½³AHy9)ûäD@%¦ö1~¥Ü{“aŠ 4­ Iò4yU4¼Q¥ÔºÊ<‚a­J!Ž ûke’u.ŽR¡&S¯Då‰V˜x¾‹rìÁ|¶Y)€©Ã™ïS†úŒ£ ­|EYAš7ž—ýÂàßVØ.ki¦yh¾Õ—ó¦Ùæ”J`2wÂß¾ ÉÒ8kÚULœq%ž ¡Ó^ØÐgYN¨ì“§Ó))ÖGj؃²äI{’ÖpýUÞºR5'Qr29 O¼1ÈÔÓ“Jdo^(€²¯×k}*ŒNB§“lÉ7jË!‚Ë_8Ö}ßÏr;!Þ ¼ñvÚßkŸŠ Ü|º5ß]¯×äòÖUÚBDQUb¼Ó¢ÂNxoÍš@¦&b¿kpsÂâ=@ëA… 5±wðD‘ bï õƒ ‚LMA,íÔA|fÝjDš â©mÛ¾6‘:™š ¢V›îŽãÔDëAŸ…äâÍÝ‚^zA{­Adj‚ ‚L `Ü-Ah¶rÂ~Sï3m<çAPµ"Sÿ0ä[$Ñß?ä ˜çO*Y9Óˆ%xá„>„z÷V^z«P?g} ÂÏ\‰]Ñô'Üô ¦Þá=„÷UÞÂ1%ö@¬Í s fä Al«£pIÛ³êÆEj^)‰»ÉâêÅNžÆ(3¦½kêwîk)Ô–ÚHúËÔŒ|y%뱞³´¬²ºGÏ* hýv»N'9ƒ­ýÇwèÏ)9°eÿ„ì§w¢{<™xO«¡:ÒÝn7™çúêYúšü~®ÍÞ:\¨mÇ®ëÎçóò>†aVQÐ'Z‚Ti–Èåíã8~‚«qH¦®ÜàÈcû—c©Þsüê”­º®ëû^'¼RÆý~o[…¦…DvÕá—ËeG!5iìB%TIv-#Ƭ³‹„ìHÓˆçÙ©u§Äq>Ÿk¶“ªÇå*óSÿ¼ßïï'Е]Qêëõ*ý?×üj‡2éêÇã!˃¾è9{K¬ %\šp½^ÕìЖ3ót:ɢ؟u:ý`¥lmªá‡Çׯ¸ßï×ë5Ù3žÏçëõz¿ß“’oaù“¿:”^k¾^¯¶‡Wì"«†OVF«ñÌáÐÆžÏç…ï•¢¤Û‡³J–[8îÒÛ -ºßïöWòg¥{™ûO›39–È%Y–—¹CÌ¥<éy™¢¶[äÏóùÜÌbõLm_=w8ºIÍK¥É»¬ÔÉŸòyCcµ¥Ò]^Éðe†•KÏŸÏ皡ԦA!v í‡R¬m‚•¢U–1âM˜ÚÛ@ân 0}©ŸÌ:“+µI曪2WG–¦Uî3ô±„àÂ^ Õ·ûwÀžÌ×G)µ~1¶äRª-hµ%VµÏk/`i¦ýÐÖH0™V½­©´ DÎwrØáv– H¦þAveæ«”—öãž}j´?UXB¤Aûð»]à»ðÛJ]^[VÞ®%ºK…¨’û¤d­9ÌäówháZ, ¡9Å/½öÉp…®äDŒ¹”·.1•vv*uŽG°õÙMÃäV)iµŒ /Ôp­z×M'™z©éÃ*JÀ¡ y%:TBÖ ë%Ñ·> :QÈÚ¢’â69ì /­ ò:ÛöÒ¤Í'›åbÛ~ÿkŸ g~ÉÒ]ª¤Ýk×P¤UKüxýÊ¢õ‡z‚ ܰoFööFßêP&¡ó+­@Óae >ð­˜ SÿWÊ­Ò‘ìë“]i¦%.T¨¦C³]I[ôLï²õ,“üé{LIš\cíõ-õúrb>­?Ük[¢õm’"ÃBüRÖ¿1ò*ÂB-²ÄÔúUhžÓ“V Ä¤5{S¿k±Ÿ@ùð@Ø·¤¿aÛEq Â×}p«Réѯİt¼:«7’õÿ·_1#hiò˜uO2}àñx(}xǬûýþx<ìö¨’Gš-?´$*ÅØ‡!PE|¼¤Ç|gz¯>© ´´&.\°OJÇÚŠie¬›”¯Þr“ïòÉTáëxç—ðÐQ? #}fÉðÜßB{/Æ®.æ* ¾’ u[ÒÄ«°-Sßn7a4G?ouò«à 1 @¹ðéÃ}ßà±y5`é[¢ÓÞÆä ?g…À…sÖ:ƒ+9Ã0 ƒüPžä'¥o-Z§øRµe Ñvã87]F^¿CòåÛut¡¶±V!•ŸW¨ë´ü›ûÂ68’Ïž'ŽÊÔ Úy[zÒªËÎF -=¬Ñ À2«ï^‹¼EÂκ۰›YÄ‘7Ù—&«¬ìKìÐTöpX Æd·Ý0肟ŒŒãè­jIú>l–F¿Í‚ÃEwòuöÙÔRïþ¦3K„Ó^ƒåÚä’Q|}}ùKKHI«-©Ò9GÌâñ† cHÒ–èkþ24hÔÀOZY½iBŒ!vïRó®É¼Z«,óÚA´™Œ¬Ý£ï{ý³²ÕRNß÷}ß«xøßÚfÚÐMA ‰ËV£ò†3)MAU"VUVàÛ¾ï“ÝUåÊJ¼S‹¸K0+Ž•F%o÷•L–ðÒÜPzæ%*FN^ ¹{kO¥;$Y¯¯Ö ‹%ðiÎ\•Æ"GËÈã8 ·Úeà C²' ®[1ëwßOäÛ0ÿ†ÖÁx{š„šé&Ñ÷½_kå]á‘æë““ƒî­ˆÄ^°uä‹ Òù»=­÷•õIŸÓ0ÚÅ6Ö;T€ŸœõëáÜÜí´¬‰Óñdàà.Û¶™Ö®2&ÈGRxïPÃá½Ò¥…³ä>\“ÀÇõØ:h\egBõ Búú#ªËzâËÀ×>™¶ŒŽù/½pìKòú‡ze$w¥ …¾¤ÍYGãuÂÜW"—D¾sGÀ5Ô«œE%â€Å ¸8ôi+­g!sy§æz ±^ÆsM³Ôr¥u7¶Þ>•ŒSŠ;‡¨?3j-…¯CÍ6÷ÉIͼž fŒŽù¦34AV¦Põƒ‡s¦öÙ JÂ~êZrô1À‰Ö£*9¹`”ªšèÔ¡â\O=¥„%ZPQ“©®±æÞ±w’õêÙdMhŽ‘»AãxN´Ê²²¯læd&ƒ]aR¯"Þ3ò¥Kâ@=y(Aâ :cIƒ /L”™Ø‹A¦&®F±NìâÍÈš@© b×M¦&ÈÔñ2žLŽqP»¤x$ˆ´S–MàXt¦IkÕMèÍz@q+@ì‘4]F IDAT©Ã{{`Í+ôNŒ`3úw+¹è=GHÔËsE.vÍ?þ³£½ßï<}o¬ uÏtÞÖÈ{“‹&ý©v«É £Ñƒ³‚²´[ÖŠe°wË6Çãhú¡æÈ—¹×„ï-¦y­ Koì$PeVBâÐhž¿OŠ&Of])kRÍÅ€y–"Ÿë§²+·X½ì=¿m±0ÖÎÞ¼>‘¿Ï˹uö¹ævfsØažöÈÖj.S‡ Éhò•çдò—j|É}¸¡b®‰Ÿ|NŒ6ZÜ"øøëÇ›¤Û ‡Œ£yÏøÞè\vÓ¹Ó;L“RªÀF’£iU¼Q °t.­¿FYEÈ·¥þ>õ¯@ê™”7•ž®ÄþÊæ“‘iÒ§ SÏ š.J_g§JÆ—dn[®4ù¾õÓ LädÞ¼ T.’.-eâ®éHs˜4ÌYvY…fõªJEH»>÷¡ž»øœ…~¹òyKì¯êïS…Îñ#;-k  àz25™zMÂÔ` 5¦P!ªÜ/—´0­O)ó,ØgjŸu…BýRWR®}RYËYþ` fm#•&ü úðk»ê»Â35 ™½7êo3RÙ¡é~Ì1 ÷Ô§´¶‚TÒüá*è×!Ø…WL0×™z¦¶»<`–pþ{Ú-©þŽ’Žã9«ÂùÛ,ÛŽugòµ¤cbiBÛíf7ÂzÛž~poiiæX*Égˆ½OVkk©A¹F.Ï^î9®w›B‹JŽ4¾œÉ‹_kî_·ý“Ñ0@áàmí «M©Ÿ'6c²Õ=%FÃRª(§ž&¤Là_{s7uïx8“ói&oÇQ¯¬¶/•kªõÉ…Ñ4Ú'á}ᓼ&ÿ±YI¯Ð¾Ì—Èì&˜¬O°ž­ô–ʯY>+×<É)x:¨‰OŠúQºèôä~Q}M£æ` Ùi#ýX¯áæS:úÒýaúL¸kŸ·3к‚Y“ÅFœ•ÌX]HN§“¬ÍÚYòÃU´ÈYË•m{øö|-ñQ² c5M(í'¬OéUÖ6x]iù׊1™º@…b#¶. &ÃÿYäÿ5Fäð+¿9MØsòHËÈá”ÐÒ|ÂLæšäMOU`±Û—U¸0 ƒ5õLúW¶×o‰Ä(Vè@©ƒªÐògß÷ú+5¦Ëhö}:ä¹ ftûRk!Ñ3]GE#ñ² †»¹‹"m&“v˜Åì%þÔá%¡ö(¿}».…'ìöOëÛäƒq ’5®Zá­ê¥€‹°¨°„ÜWÚe«]ò}sÿ¤Ã¸XÀuìÞïÍŽ/8MÃoë=Cç?_yûUâýf½M’T¡¬Öû5…™H5x C+ÂKëKæÓ„ —Þl3{èSȺOY:ð$èyʆ>ÚéŸÞ™Ï»† õdo x+gåSï¢×EAw]tÑ»õ6«÷,E»Ø2»:¿àð€·›¯‘ÔJB%ÞS°Ÿ¢¥ÇcD=t?†·„:N †šQ¨ –ä >¢2QŠíÖ)ê#;f…Ë[°¡ÿÍr (°¶>“!¦ÉâÑ6—žê¤¹n–#°ä½‡KðòZ,Á·bjOÍ^RC½˜úËB€¯ßùÝ´æö«”õð-ö q2ö½>GOMF. šïä~?3°›hÓ&᫨2së™<\¿$S›>J®«î™âY»DÇjËöÒÖEyì'ú«†¬’úÒYZÚ‡†±ì^÷ÙnF©N=×@üŠÒQ+<¶y{%‘¦YøéUž°ðŸf;KÏ?ð±þÚ³Ž¿Å[cÖÕµÃ_ŒçÏcFVô½ÑYâ¢w¸3}ñý°ÎE{®íÎ $^ŽŸ^õâµB'ÂØ?qçjsTÒ™†`â¹/½o»yCŸ‘xÓÄ$ì3nçò:ãK\kî¹½X¬Àœ®AµL]s9ô~°Ñ¢Bñ̈Q<÷‘¦‰7Cet;(UÌûñq:5A,'š­WPȵúfk²ü-úMÃô'/h޶¡íb¤âòøéù36Lü4ˆº!Ò¬Ž\ªƒP¦7tÍâ½]—’UÉÛŦd-–njÞš‹±R¶­7‘;EúMðœàŸÜ“:‰‹Ý4ZÒ_ò²Ä³ÒÇò•Üì?Í_UúvÓ!Î=ÓUöšëÐà›¿¢;ü¤cþ—¹uL#¤èRýNè¶ž¥ ݹ\BŠ­eKãY öÚV`yknã]²$$6Ÿ~RÓ«K¨ö%÷Îh©a}ÔA¦Žç*ÌXomI|SÍ·¡ÏJñ1ÙÀÊPïR^½ÝRÆBU·«¾ŽÒ& )…Ÿ—˜Z´é¹q§_.·‰ÏKS_·µ$6ًٜݿR­&S·™Í¬¯\ã5îíÔ.ùrQöéRs]X×§…Ü—§‰(mPj¨$IšzüJ%væk sÌÚúôrá,dj/Zõ‰\:wQrÝnÚ ‹`͘;ÐI£üeÍݩʘø”L=›©ÃË¡­L/´BÌÚKBº"EV§³?Læ˜gjO^á1Ôº{”d’Kë*­šö²…„\Hací)…OˆZ:?€ŽJÞ íòëb gé«“”a¶[¼ÒmÅ&€MÖžI¦õÂf£„Díº€­bg#>‹©ó„è5Ê)d¶³“Ð.“ Ž•ìD’d¡ÀbúŸðäJ'U¥:\ߥ%­&yx‚šìÉŒöE϶º1²‹1<Žu³ë·vs&Rj­1¹ÜÚR³>žc›€ÄPkMÂóëzg’ºð¸©æhËÏ—Žé¿\8Y~ŽTãõXzu鬬Æ9 ÄÞ©ÀÛá’rp¥÷n$¡Mß$À„=·#²¯I÷ã}»³ˆèªaßzèC@S>‘8N$T Kfø!Ô¹’©++o='§Cƒ‚O¼9S× ‡á ^§óBV©7%nR%jS¶‚ùVÒþJÈ¡sqÒWõ `©ÇàóÉ<P[°ÕÌò÷>µjïÜö*±þ ?IÚ›Óߺsg.Sw?ÆaÍÚ\dêki;Yi¹önª_.7Ŭ]¯øÌÝ‚S¹)÷\žTîB’ݔȞè±=c?ÉiÁ¾Q£S'™­j–y⣭ªT†ûÓÓÕÔ¤+ä©XEjgM­dûfXØ-o¶hµíNÖ}ø(«&¡ø¸Û¹$øE-•÷Uú“õ}¯~ßm?Ë»”Ä?o»K­x_ñöøÄ{Õ±Wgø*$r:Va|‚ 2õ†Úú3ïB%‚LMŸ¸Ö†QøñrœØ! Mdj‚8S¯[ -ˆµð»€ Vg|ÍŽ´Ð™GO¿çf$ÈÔ±2©­â›¸_½Ûí67ùbÒ"-M\Ké\D¦~¬oœäPî^d´8i|!V$µ¾ï'‰lë3C{CÅrÑW¢óù¬½DAý\<3˜¸T‡Rj½í»Ó1^k?AÏËc­¢’Þ€T|›Fc®(¨pË3Cõ>ÿóÛo¿=AýÇ?þñ矖øóÏ?ÿïÿþïßÿþ÷·oß¾}ûÖöŠÿýßÿýÿïÿ}ûöí?þH ùõ×_ÿüóOQ¾.—Ë_ýõ¯ýëçŸ>–¶"*ä¿þõ¯ßÿý=l «’Œûü!„MÇúv»ýù矿üòKX“Çã §èÎð¹ªÔöÛ·o¿þú«lÚ&Aº6/’@sœB*zû@³:S“–ÞfiH¤ðdT&.i¬“¼Q>È¥åSÙ|V¿\_. " }WÈÚh‹²IŸm>ÅÉÊØ=¢m£½z’¶‡;?GªÕÌÐô kC÷ý® HÙIõö§–Sò®§Ÿžôó*L;ÎäRNg{»ùòů”‚¹”2ÍfI©¼&—´¿÷¤’OmÃ!¥-\ò]¹x‡)¹ÃÁ…¼a:i[Ž•š¥Än¢€Ï}åmù¥\Á¼Ÿ…L½­åΪº!9æ33ÏÆgå8ש!·u‰Ž¡L¸ÉêGžVà‚xØß<ÐFÖá ¶´þù”óö‡¥_Yú®LW[_ÏGÀÔÝ8䯀{`]ñm/Ÿê­a}jÆË/Ÿ_îÎ ÐTe†òáW5—dêÕtê¯4Y~éN˜0 ÙÍšK`7­%É­P KÖöÏä AÿgóÜó\^0æsÆ'_Ù[á~“Ò%d•Ö è¨Ò˜á::¹”ùëÇ”¶ö1õ—þߊ,$ycËâ€dÁ¾ú¾Wÿa¥$S,6Q¼\.*…öó¾ïKOv?wAÚ#¹Jùv»N§aÀÞ=陫¥‰Ã–üÿt:é¥×R±Çã¡L¡Yz²ÎXrWwxcºüß.6·ÛÍþÙ|º¥ùZµÓô’iq½ßï¶ëüEìzQú0 àܦîeÞ‹®ÁÑÍ:Dvîîy¿ŒÉ¿ =£÷ˆKµå½p%¹¼n7³œk Ï3p…†õOðþ†+áK/¢—Þ»b2-ð3¢Éo·Û××—Lð®¯^%2B¯vÕÊë“Ø].)GxÍ– óGŸôÕKÆ„쪳ÑÓ¸Ýn°Âé´·äëTR¿…4°–ÇõÛ@¾õ’Öº¥«o(o~C&ÞÐv…›UŸœ©á[Ûá5 †áz½’©ß•¦5¾ä•L­Z'ПŸ±@pªYý×îívS ½ïûIÖEF¶óò¡|RÒƒJ 誓“|•ùf_§¬ªZä¤b ÝXZº©8æ¹m±úxÝ—Ù7$Ô‚“(’åQŽIЀߵØmPÒ´Ë劥Þ"ÞU•~*S?a¼¹cræïè“õÇ®µºÂF2”~«Jûe@õ»‰^bÿ±­ØH-²ÆŠšj‡ %JËaÂ8[læv‘üÊRpȘ5Å–éÆ ºÔ·*"ÖZeÒ÷}ß÷$룫ÒvI~½Nm7¿¡äÕ(%[Äý~—¥)Ñh R¦Z*@'†A:®T 5•ø%œ<0 jMtU0òät)iÄúìXû(ÇÿiWGÿºJâ¶&òPÌ ‘mSƒ¼yû»·<Ø}CéEZíÉÆúz[ÇTŸ] þ_z^ƒ,ëiŠüœ&‘C[ÆÁ»gÁŸðp©’I(¯gÈ;àþ6‰ÝðQsÝÞl•L]ŠO±±0Þy"e&Ç4”p¾•“>vIXM%Sç!H°Ø–Ú¥<&“2‰£`n Åó24%‡0Bµ¡{¿„°ðŒS“‚' gè¢àáŽm=5ûú}€n›Ç24GÄÁ·V»|ÃàÌðížæ2E»ˤ欉ä ¶Re)*µä1] ¹J¤+ Ý KÈÇׇnúŠ‘©ù’IØ»GŽDñ†miCBÒ íy½^Þe_TSNeÅžûýž ¿´kn{×Ö_ yZ+ˆ'€L½kÜïwàèd*ÊÖ4æª-A‘¯²á®8Ú2—ôÃý~·k˜í"ù|õ4šÎ»·aY² á "SOÕ Ï?ÂrW©ì‡ ì&œ++Ä$Ý[fBÜU×ùõÃóµ6жå Y]óÕþ×îmí$ÈÔokô°Ì+6õúíòm¯°ØB|'ʵôRØPg[ÛUV»z}ÖHÕ÷ªJ ozéíúüpï–p¹\¬b8ŽãZþÚ åø“«qû¾?NsKS-¼>àü34òÈWÚ =V-•wï˜ìUÈ ? )uŽ!Ö¼šà‰"±¡éìf-ªÓÜ»LØ¿f=iÚÎu:Yi@o•·ÛòÃÇæšJ•)}nm#ö+Øßh«õµ·Lªöa_AÉa?øÎcǨSÓúA<©Kt>%¦‹3|Ò¢–V²8×-N’µ%-ЯKƒEÅ/!¶°†úRx£mNzk~h›àßRê(ej= m2P«úg‚LMlk§.Ñ UKÔã¨ÅÚ™¾«r¶ëñ£”.(9¡Ã!˜<²OYƒÊi›5ʃ†C‹@u…&èo¡¥c»0x_¿T‡|½CW‚LýÖ#)_!»…Œæ™ÚOie4?ák˜:<…óDj;ðP¡|¾œ©½¦2588ÖXE,¥†[X'lçØA)­ÍVURü¾D$OÓ¦¥n\žž(î²×†ÉYæÏ”.—‹%=¥´GR:áõ„mîé¢ý¡+J#” ~}}Ýn7°4ÇÝÉå½¾[¤íò:Û3Ã0ØZÝn7è7ù3,Ó9VVFG>±¯.ÁÛ€Ò§(ê»fÉ ÁÅw³SkÈFx¨fÜÄNìýC£ê,-©iÕCûRÕâAÓ «´Ð5X•w°øº• aK­¶ë°¿*…·$í âKö=¾íœAÔ©‰'),V_S§=¯1ÙTçóH´0ûíê]¹ž%®rö¥Þ6½\7”òï÷»M¯aÝ}%­x@‚‚lhÉ(O~"9UÂSùOß÷àS8 ]ôÞ Ì¥·k<¾ï-—é~Sg¯Ü §åår‘š”ê,3Žãét²¶ˆÓMkC•ôºž…Åj©îÇ J—ËE)~ÓA¯ïy[©¶]„HÖdjâI$øõõå¤Iú7°½6Ìü’ƒ×ºÌbM Bs-àËkÙò&ß~»ÝdœEv^ó$wŸK¯a=Ðþ”¢äç¾2ëæí#ž Z?c±4Ý÷ýê)F·›ÃPriuÙ¢ÂMÒ]–…kÖ YÆB³Ãv“¯…áðð” ÔÕ S›ë†Â;r>óI.ÈIÁ{,äáo7_1ü½¦ÇÔFdãï‡aïómGC¸¶>ON´¾×Æ‘{cNr,~‡²\ÑB¦&VÆíGGwî|Ln MµZ…Ê’ÓË6Š‘_ÉÑåãñ°ä%™=jF¡T¬ZHê—.hÅù|ÖËh,«™¨3ÇZg5tŒã8Ž#,9à FIãõÙWˆ@÷—żèn7q•ëL‚|* ÃmäBƒKœ¸³/õ´á½6{_èí†ùÍ­[蟗— ‘aeºÈ÷Nü5h3¼fACTôs®bÍúá.'¼Asø_Èd¿qö1F‘˜í§\š«:±K9’ÀÍV94 SlcêðÕIJÏD]ðŸø\Òm«]²`ä$aŠ5Åú !¥'Ká¹îÀJˆ#÷c´‡X®dêy³[¡¼‡p±ŸÀ¥ÈàL)•„8·ž^û+%ÀK‚¶C*Y˜.ÌNÒœ¹"võ\EaL¹„<Üï÷R¹O¢N#âØ|úïß’ûTTzøn²‘{+?Çó’âMä SÉio2MZ=Q–~¾© ‚ØŒ&?S×èÝ«(ïìm‚ØùB£ ‚LMA©‰ñä,wÄ›'djâ MKhšL½x¢HÄ:à9uj‚j‚dý¹ ?5Auj‚ ‚LMoÇdj‚8S³25Aì“I]ˆOO ‚ ¨SAdê'€6D‚ ÈÔì ‚ S@­þÍúñxpe"ˆýà~ûí7öÂ$¾}ûöíÛ·Ï9šÿç?ÿ© çèuêÃà£<¨¨P™š8ÆÊÄsT‚Ø ˜õ”à‚ öF¾„…w·‡ë·Q;¨Sï‰Ûí6 ƒüÿz½Ê\½Ýnã8ê'OžÀ—ËeGÞfÇHþ½ÝnvÕqÑíH‰–>âËåbG¿{;ç¾b{Üï÷ûýþ´×Ïçá?ŸÏOk»Véz½¾j®×ëù;äÿ/©Œ¼ÚŽÂäHÙzÊóPóûýžøÂ>_ ÝKÆ zPäXäæ™óù½™ñ…Ò©jGü9´h_Œ ò±V{+—…ƒ"|ÔVˆw/ÔÕJÕñJÈZ;Ù3µ¥éœåÉÔíÊ|"3ü…|m—ëÂ]É)«, Ýèô{Ú˜ ‡"'uOÖ3x]ÎMËiº¹'U›éïÉ àyÀ2¬í:­ª|îË´ÏËà>y'÷>L¯™[lKTK¨ä;1µ4­¾CæJ9ì–Âi¶…ÒR’ï ­†Tl•9,왋«]ºVÑrÚf‡ú¹’ˆ(7òÉäŒÓõ[ž ‡xZíÎoàÂ:ÀõOÕ0ÈÔ8aŠ¥é§Í¢I;ÚA5k¯MÌÕȼæ2‹M@Eš5m`C#…Ô‹„W™Aº’~ð“ÖÖDªJ¬åíù…ú‡ß}–šàw„`6YhÒŸ‹˜iÖÈT^‡Fêv”•"oÿ©lšep8X-|§½vÿ¦¶k£—¹J*™Õk¾÷'®Ç,:–•l•¬Éɬ~wf$ä2¨g²C¬y£Õ:ÁèìÍDá(û9Nu?‹ìiâêÇÂê°\-.1 IDATÚ„šuO©JÄ¡£dòöËü*L¶¢´•ÛÅk©Í;'`º»ŠÝX[™ÔÍWÌ® ^y<œøvì’3L¿ SƒøÚIh™:d[BhÙ𫟟-víÍYfîq„Ï%Ý|‰Ù¤šæ[ zŠç”üP1ß:˜í z NúÙ*bv®†‹z=³À|N˜ÚÎLÏà¡&<^Ú­—]²†q ¥7iþÜmXÃÔ0Ë`_òò“0µ•%˜V`uñS#4Ë|"S—È:ìª=…ÛØÙâM~sUƒp¯~h2®œ0‰ `Ï @1•L]ò Ö³ |ç× ¿ µ5´Í±RQšœ•;*?¸~éòZ‚Õ¤€)`›•4?\í–[Ò,©ùÕHOã½V”ÛæÒ´ÎGØm¨?bR,H£ej„pèKååSJPy ­4 o×ï°Â¿{æóò~XÏsqJ·Žë èû^–'ÇqÔÄþ„À$[Úù|–ò¡ü«¯–ÿ<y‘·{LGhÆq”ÿki–élóÅ-ß’à0 ‰g¾­8ŸIӀʡu—ËÅJ¼D ä¡stµÄÀWyªé Cù ï²Í±ÅB5êU ûIÞÛ¥w…Ú‡¡ù÷û}£àš°óÇqÔ¸’<„Ñ"s§°þÇ—&9Ù½V$`¶æ¯öΛ SRþ“K‘ȧN^[±—ãyLmG(tMæ ÷&¥¡²SÝþêz½j˜“uIò3¹«¾çåv»•ÄKÞ.ßËW¹hø èªS ìÊ™©åŸÏg;ëÂ‘Š Ã`¿äkÁù|–¡VÀû¥U9o‚†¥A\¢öƒí|}‘ü$”;íí‡:²À ÛÑ´j²ÚÉKó<Qù‰íYèû^Ö¡Ò<ʇFTÌJ¬yZ¾M>g““t°t‰TÔ»¨½'SÛòZ›„“úÉ£OŠXèôÓÞô]_Z“µªVß÷ª}×¶Ê=ü $,ä&å¬J=·a™œõ¼VeØŽ„­ {hBg¦ëóÑÃ%zš¥rÊ2#KB=+Õ‡'Šn[Ú~­¨ýT¾Bž”Ufâ¤ÈUŠýá”ðúDr¬.““M¶S»TO©ƒ¨Û»Íò<¦öªÜm‰UÉÚOZ»­óæ‹Uô} «.å;&{ËM°ÝkcÒÝ9ßÖ-¡iZØŠ¼u‰B(£ÆÈPï{1+M¾«Ôua¿Ùí‘ë¹³@ŒQ§Ó©Y†­àiNŒDV‹â’YÓ,l¢o‰¥[U{ÝûúòuWZ©¿‡ëG¸¥€o•‹lÂÕ©ÕÆ*3G{¤RóÝBÙ„=¸1ÕXÁD€üî¬M÷ikuIÝXkYLA§æ?¨IÍ:Wÿ­æñ©©哾'ú­'5ßLx>)ÇÕ`ÕBÀŠ5ï|_…c!Óar˜DEÓÃ'ÑÀæNä=ëG©Â]zz±#KÈ«Âç´#JÜÞÓ`Ò“¬+œÿ&~—à .}Ý”¿Aè´ä]¹å1ïxÖ3÷0³û0Ö#qu¨ô§†Aˆ?Ƙ”BÎàœ]C~ÃG®ÚýCÕõ-¡˜AT‹]xB×lð }¹ÂÚÚú™ú¦åÁ/¡ i%ͺCÌêÏR`”Kmô‘~¥—‘J²Mx‡KHø3¬³¯°~QißUÔâ‹ó³x†Ò‘€?K©³À›§äú ìæý–¼UŠrâ?k%]½7z(yÞÖ¶®~~ú½äw\â;p+ÍêijÞb›?²õS7,Ÿ,tÅg¸Ð¬$f¾[Âù?«iÀeapˆ–%8 »†þÌ#kººcíY'ID„¨S‡òÿÛû¶lÅ‘$H Sûè^ Ía%½šÃÂ8·ØIm„šŸôò4È%aö‘'/ˆx)ÂÂÃÃvö†ì¿6¼”©Ãwî¹0¦~ûõŸ{[úš=ÁŸÂº±Â“Ü^ &\v1®1…ÕvFm^îðœÒôQ,Öžu%ÈvÐÌL\3vÓ*²Bæ‘u=Y<ÛT Ú0ÌE?ˆ„ÚqO"ˆÌfÙÓ1¬¬©RHͳ~Ÿë¼ 1*Õ­Ôh-Jð>qÞÚ¿}êê2/|Â1µ2c(`úƒUí¨28_ýIÈÅCîÆÖœvÃïvõ™té‡"ÓÔ² HÍV]à]¹@ê™ÊõO²X<@ ¡þ! ò—­¥‚›¦òu}¤qà}P[Ü_9‹X¢Õ‹ÛÖòøP(QÎý8ÊÔNŒ¯cj ^þp”ÎTÒ£ =ÇGÃ~÷,èËvoð²gu,ósk # tØp‘ù.¼ 1o úš@SýT? aœÛû¶0¼wíudØBž±«3ù€7\®:'B¦.ºìÏ7uÞ›¬`3óÆ´2õö’utTRŸŽ7g¼ëœÏÍGùóós<ÕÓú\ÕÖþ`¾ý<6¾>Ân¯¿‘aŽDâ·/õ ¢n§;Ö rxSêUâ Á9öÑx³L½¨Eýâ¾Â_8’£Î–Ķ¥~¾}25±êC´ú¬v4HKæ¶q¤ÛÒÔªãð}3v¢OлÝîx<îv»l9õ¾=MÏ‹ï1C °Ûí.— e7‚LMl©ëðBåóÄ៟ kKxžx5)Ú5ñd¡É‰áí7ŠÄ§@3- Q@zÕ]Ì0b‘=Àƒ'žwè`jD¤Ù Ÿâ‡ÔÉ”©‰åÙMhZ"¥u"}gô”Å3ó1--ƒ…@ÌÏÙB™Æƒ¢Ä3ÜB4þuÆÑÇã1ûöxý*ÚbjWb(SÄÀšz„¦%‡/·FûKŽ&(SËË€M'A©‰µS6A‹ƒ>ŠAÿ"ët¥LMŸ ýÊSÎR4-7çb™£l×0¼dj‚ø`NQ¼=¶mRòð5͘]o˜ ù!vg€Ú‚ø<Gñ´Tf6yýþ|>‹ƒ¨XÇgÙ~ŸÝ†Ùd…â!9ÜŸß"š¾\9&OØ{a ’YÆWôøK‡»5ýxç&íyoWŠ.c2?}ôí¬+zø[$‚¢=Ÿ ¡™!{Áa¬£­çäôŒ¾X$×èN"¾Mz¿vbƒHî…bégÉ¢VAÂøÇßVj£qùµÙÖm¸ÁwKÈ$v|Â@µV§4¬)~Öðúå7šCï£Oôv¢Ìæ‚¥´F+‰€ Z æì· χЛq¤…B²fdÑøüÔí7É2—%5Ÿ…IJ¼ÖîÓÀC Q#Ø’ýšõ}‡ø´o™u^ „‰7üîj;*;®G2¼‹Èj,²•]aYyø€®í»0ü;d«¦žÚÇt®cÚ^Û­b6?f»…Ê,ÕiZ‘Ë´Rˆñ?uÙXšRËØ’øpÕ3™”aáJÖÄò™Z^œý¹­hÞ ”!Ñ f[Ÿ'|ƒ_ÏÔ2‹üJÔ-0UŸûb=bõðúqœÁÔ™Œ“qÖþ¦ÒtxhòÜ«T)šÈtï7ÃFýMàØ>éσ~AÉ6ÐþãG8Hú`©*\]u&%…YåкÝòõ]ÏßkŸý ÀÃèeðG$A•ñí%!42Û™3ëa%Jku µ‚S¯äˆÿ~¦¶ ï?â~6C2¤yšâ0ob¸Ó.¥ÏÉ ±¤YÏ$ÝBRã9+lÆl±Â«ü²ƒ'ìáI¿_;ÐM6¤^Û ä¨C4ã´RCÈþ–y›L]K3”“ªŽ_SgÀ;Cójô\?Pïy e‚× Fß+S‡D²I&RéPZ"«ï'gkÏYä}{¢ÑÝøÁ›[(!+Ðçô÷T^( Ú*eØIlÛ"¶J¡ZÖ3u˜¸ òÀoûüëZ¢fL ×tóÖpxܶ óï%”RAùPß7>rä5¼£]†«…úa]8 8÷„'€êÐà&Ó à+(Dz¼mØznãßp£XÈÔ ²ÐÁõ—0!2Ѭ)øhE^jQæ (a!ǤKd/&i‚ZÎk 9 4»Þ,ÙÜT‹[’.ÅÔ÷(õLÿ,J²°%‡ƒÙ¹Ç›ÇÔP>¼²0¥o¸m<ƒ©³ì‘Í©¹ 73©!SÛ‰63Ù%ă÷ØÏÀ«í©Å È~r¹\ăSÞ´ÂîXs‹OãTtf‚í¸zoê‘ íÔåŒ>ðJ¼ÁóÅ“u8.}¦žR0¡gÌÎzV…ÌÕç2hç¤uU×í´åO ¹ ÛÂeMŽ:Ô4‡ºÓ?žP8¬½· ]É–|Ã6[íÇýJn·›Lø,ù Œ0ì"ûý^ö×°=âÌ A&ÍXõñ³Eˆ8{ûçó¹éó¥}Ÿ0³I%SW<ý+³#3ê¾´Ï—÷ø(f‚LÍ%¸ÎÊé“é+“þY‚°b´Ö àŰøÇ€ÖÕÑ«d™îÌã¬ýÅ«)h´Y—ôKˆFäD]¨êe7üîí¦"˜þ°¹w†2©– ïQ(Õ–£OJÛBo@"–T3Þ‹6æv»Yµ Öš/B·.i<´3ÔLZ‰{Õx±’ÚÏú‹x« õÅ¡¶®0!è¨Ì¬–üžû€ý€Õ«ZݺýÄ›ñ6Uº¾SªYÎ,@ïIRðPixþ¸1–}t/auvÀºyªÖþÜëFáÊ ZÞ ÌÖ`úË.U•úa„ih†“Óª¼tì, :G/Ÿî¦oíêmKôCßÇÙV[¼QsºðÿáŽÿ³ÉÔ²,h$,•ŒLÁ’ÌÒ§Þ±À…d1>Þ Ð_OÙz¿»¶áú>dÆÌ”{txí°ŒŽ'lu3.ʼٖÕÐ.3½ë`Ó°!³0kÞ¿y‡rh‰ŸW`ø”H3ÞNajõ]L…eêŒmõÀ´¹fêÑå]¡¢ð-vÔ¦* «ÎˆÃ“læ^ £á?÷ÍÈÌ&Ùª[B(ƒàšˆ-{ _¸ì Œk°°7lo`·+"|;SßsŸ1øÊû×›ƒ¼éikª‹Q¨ÉN¾@m`KgO^“dÏÚ$Ë:#„çS°,¬šÀ6.÷†gÆC õt†hóÑnßÂÔºäU߸ž¾Ÿ©}r·?÷Lˆ¾OŒæÚgà»Py ßúÐh õOR….ÎáÃ^Å™EÉ<òëÈ!™6ƒdJpÿÛ,S‡Âi¡YöѼ´®ðÛ¾0 ú>þMilæÃw<õ.ñƒTèâõxiÅ0ù›Z’Š%&¤ƒÛívE‚8È™öH µ¿Õ„lb÷:A<€Wg¼:VIyÔ×(t X?v»]³A£øãÅõ í6]¬×g «¨>V’ž ÊÔÏÅl·4‚ 2õÂtL.&ˆ-A]áÕ]›k|Ë25Aè‚·+‡­ Ÿíu”…áýÍTì8Äš¹L"¢ÇÝngÃBÉç£1’4çƒÁ¤D$̪;ŸÏúU§:iU§ý¾š5C’.BÓ>E€DäÄž*“Œ©}¼‘'ÙƒC€*Ÿtuè… ¨3´6Û0$9d}è¥Nuólím“ÙC:É#ì7ï8fG’KiÕž/ÄG#K5¹,›dœ2˜(>]dX ‡þ¬ËEgCbjf±šš‘ùÁ…ÈÏcê0ÂÁëãIm Ô~NµöH¢môäëÒD<ƒÉ¿£åkc²l$qq°R%F_PgÀñ‚†_‰2üÔ¹šM* ™”äår¹ˆÆ&ü |¥%7õHþBÞ£ªüøC. ­î|>ïv»gëj¨ý 6(P¿æÜš­¶Â  R› Ô¢ë¨*£ÐT„)ÌïQÞÂ0ŒÄE€XMýŒ³¥žýE®ð¤bY5kª86˜ ý£B± ŽhÏ4aˆ#a_=œW 6o(žKƒ7)¶“©‰{Ÿ°<›@È1Oèöf˜yBbˆëBÍhH¿‚rfÄ´´\ãƒúɆÚƒ7L£QëÜ}6zË¡¶_5ã‡dí;;˜xz+ØT¯Û 9Ù‰Äò8ì áðˆ—%á S_„0~–Ê/!úœ8}6±1•Ù!O‚/'dá06aVBݘP9† ³§ømÈMõÎu5{ò»=»h„aÍb%O†$ ²öç_}MöíËW¶û^ô¶;™g25ñ]zO²º†‡‡ÃÁç S›Ùð~Éß³I@D_Î(üÕ¥„'¬“ÖCEörìr¹È5£ÍùÛϳ.]·[¾m†ÍLÿóó#ä%WjÖ¬XGx’­´6Fì²m†õΨf™^%¿°´sÞ§ä&ׄ¹Ï7¬ôGÛ0­î‘ö뙚h‘B¸<”€ å¹%AY3ýu¨¤ö·ÛMÜ^,ÃZS¥N¡†ûýžUgó‚kE“|1`Û€þZjVâÓ½×Ƀn,6²®æSI{`¬#XÑ4·=ÜÈžª¼i“ƒíGصL°ãlw>±i¹^¯°=l ò0™š˜ÃÔvÁƒ‡^±äš| ‘¾áFN¿õrXõM¥ÝNßÁnú뻯*…çY›AHš•2aÆ|övšâ…ÍÓyЃԟCÛ—•LMlÅB²4‡úâ‡5“ÚȲØô’jR0/ßžP^« ÀGýÂ;Ÿg¢®W›Ì{V, nd…„º‚ÌäüçFÉZG^7NUƒ‚HÇ’©}ï3Ü’²êèn·ÛãŽøoöI—ŠM­N¡›Y4Þötn±lQ–v½á·Í°4 QÂ+D°böFÇá=*|V£—Z¸þy/“#‡…€šøž§¥÷bx¶Ø–d–3Ћ̒~WÊ>«7øûh;k25Ñ›(ÉÊÑ+~oÓv/}OšþÖ™a,X„6ÂÅ3ü²u)¨­0”ÎøÂÛ±ôIŒ( ¥òèˆyrÔ‘ I9„Žr¶ñøÏ½‘xsoó¥A¿ü êì…djbƒLí½Q¼YÐGŸ©CùÔsG(“g ‘­Im6|HažBKgpÿ›t²º¼¥Úh9ÖB\“¬É3 B³Ùy+ôñ 7KïaäC¸XSýp'ó~´; ™š¸Ï[~áÂ6gšr_Í’™|ªVÂêš–Ôa3 ÒPKÔSÄlštI6?( œ¤ÔzÒlɆ¥¹3…âï×zöûÁž”ŠLý6µ,Ã}eëÄJ”>ÆDÞðBSæ×ÐGuþÅidŒò&QdXTsª|ÛtòZ¯~ØÙ 3ŒU ¾‹Ÿ>¤+Íùò–|]p5Ìœ`²z<‡%²­ÏÎu¤šŸ5mÄÞkŠ_l3·ióÇ:ßñë+•ÙË/Àì5CŽþ¬·¬QRÕC'trYí|#S¯tb‘ÈÄ3 b›LMjXçKU#ßA¼ÌMN±vЛœ ‚LMA©Áâ"±UPOMA™š2,Aej‚ ÊÔA™š ‚ SA© ‚ 2õ3AC‚ ÈÔÀÔ$k‚ ÈÔ«Cž±fОš ‚25Aĺ±~å's¾ñÕÐÄ4kVR¦&ˆ¸ˆÍ¿\25±üÔÿ”Ù/i׋\’¡õx<’¬·ŠƒÁšÛIíÇëáIœ($ò–¬Ïa“ÎçóívÛï÷5 ¾½ÇãQþ/™³a­jG†a¾po˜¬×ßHÚ~¬W,½\.Bvç÷<¢x;9žÏgmóJvŽQš¶µ`_ö£ejØ>i“ú‘¸+ƒ¤÷Øï÷×ëõ~¿_¯×â…žN§wµ\Û í\'tôN§Œ¤ l§ÓIþ³þ5gÔ~¿×½q’ó@=õêbVš³¸Ýn"/‹|·ßïO¿`9å]jbå×)„Št){žHý–¬Uöô´¬$ÇžRa{*%ÊÑ -Å.8¿ L]‹´>yÆÂÓÖLm¿µ›¥ßÿìÊΚí‘ÅhKíö‡q‡#S¼G-\õfÚÙÍS™ú‰<õå³äe»,3¡Ï®áZ¯ªXr‘ÿ 5ËȇS©0S²gG“¼¦Š¢SÃÓÜÿd0åC[‚ï©ý6«Ú~ž½A?VúN³)a_ï:™zÂ"§êC—bÍ&…t.E`O‹ÀD¨/üýUØ$ØZü}©=[øÚ›-„»Äß–AÂÔÐHí‚Oß‘ú¨ak×r|ÉÙk²Udû·ŠðÚ0h!×™šxTû.隈ëS¼—sCR–á~r’æE¼QÅ‚çA8@c´‘óZ8:þæ&¤H¯ ¹ÞH¨q[àÏFžîý‡¾;Vã[UÚ~¬—ËÅš6°ÞÞCÖªxÜX»ìÐŒD?Ì,Ošæ·ÞÄ[ -ÂåIµF(.ô}ËýEóêßÖu»ÝôWEÏç³þJr8l«ì3ðùív» è¦/GÞˆXÄë‡ÚB¿ƒ»gØ.èØjÚ6­…ë‹¶Ä PÍŽØ–&àš«Eõ±ð€²ö¤ÆÃIÜ7”¼ @÷f¿pžÈdÏ©—PFUøfb¸(|jm»?X¹Û×j¥u™0€aµÄCúz ëS,K4ä©”­Ò|Æ6ZPx¦–³9èd}Õ!sÙ¾LÕ2A5S‡] µçþ=úÛ¿Âø¤ÿ6³Ç`dšvAµÄÏ—óùœÉס:Âü3WrUJdgùIZŽ*t âoòÊó¸TZ o§ µ×þÏÏ(‚²Wf¿ _¥~¨e†ce?ý‰Æ!°-Ñqq¡}ÈÔk$ëI>W kÎ$ÔɾƳK›¤ä%ÿÖ˜¾ê‘Æ ëõC/Í´¬|ø°nCÈãÍK@Ydô™š˜É Â\Çã„2]]°þáÖNDÔz û»)¨Å®äþª¶åû„&zÁõˆT>D–ÅðJ|"‰ÐÔ¡Q'ÙßWšœøoÂ$2Å'^ºœÝîdjbS+GÛB–=»ÙEx»Ý.—K½øUàò JC, ¿ž¥z¤ƒy½^ik¼Î·O{jb]ð>„¹X¥ðét]ÞûÙyv/îñÆ·ÿåøƒC°B¨3Â(óªó÷—,Œe}4(÷Ÿj?ˆïÝ/—‹¸k«‰Ú‚25A¬·ÛM¯û¡õâÅ žšøRØûQ÷“¦‰Õ‚Úb¼Ø°dÙf¿ K¸™ LMlœ©?‘æ¬õCÊ”©‰…iqmÒë‡ÊÔ<𛕩yB$jᔇƒÇÉš ,hûAÜðˆ-ÊÔœIkXÏ„¯’j)h9¨§&ˆÏØ9¸=S¦&‚§(‚25A¹ ÊÔĘz=¡b—ØhûAlðxNўبý ‚X;¨ý ‚ SAdj‚ 25AA¦&‚ ÈÔAdj"Ƨd¡«È(Îçón·Ûívšþ5ïe÷ ÏKt á·Ãù|æ4X'hOýOõN6=§%ûµütœ§¶aÁ¾ Ün·ý~>Ÿ¥ÊÝÌ„¯rHR˜ÿüüÇe³›ïvÿÈRÏ[ªÒòTDÌÆû}­Ôiyj©é~8$ùô~¿¿Ýn~ê"lÊ•2­-©…• ÷I½£ÅêRÞT®žìn'ÕirîÛí&»…]º+‰˜,Æ[#CRâ/eqiô|>Ë4{ö^~8®×«”¯s€ä¸.Üß Í Øï÷§ÓÉ?:N§Óõzí~: LûíõzµÙ©§–6Šùk´Ìëõ -ÔZ$mvV׃€ñÑg#ö.Ø!}ÒPŒŽR§‘Í)Ô¯T —ŸÛ ªÞ¬Ü@²þ:¦V:°ÔÄ ÓB³?¥ÔÓ/Lò‘%M¨ÈÏx¿a匒‚•¡`­N¥¤¾pgÇŽº‰6Ǥ™š¿F‰^[¢|1ûè#ïÈË’MYÙŽOx*Ò lÇvS[¾¶’5”·Jâvüª±ü[¬¿6IÖ_ÄÔ0³í,¦µ²aÈ# Y¾2ÕÉ ì£âÔ¥²Iø¼Ntû+Ý' Âòt`WŽtÙ®"(_— È!?Ú6ÛJa݆ [ž·R¬êP•¤Ñ^»A/<±Öâdç8¥?ÉÕl«Î^¶a0zº‘ØÁ´åL•c¼˜®gÛú…ÂY¡‡¯€ØSÛU rt6'üOŠ“=£dç} S»‘Ø5æ%qHuêûÖfLéµ½„kåA}ØvÄë1ü>jŸ¼æéX†1)®`¸²!²Z—º¤Ù“ôõZTV#uö^ÂíG…eûRŠáòÄ=I”ñ]¶õêöéÉ7{¿0ÃeGŠÇ‚·`ž2}Ù;†í0u¶€ }œ¬˜1ð°…àœÞ§A úX¦3 Ø=OxPȘºÓ<8¨¯žÂý ¸Æ’Ñœ‡AŽ •Z»•ÓÙý(Ӹׂd}2ó{6”/o6,ÉæZ Kÿ·ï«y;õéöSÜ·ê¨õ~¦Î–·7ò·óU˜±9 u?°åû6Ø…‘5µ˜¬Êzö­´éÑ#œROÁÑv¤ð|ÉE¿…ràOuq ÇM€šŽ<:ú¤ðˆ=õýžu·ÛêRsØöEþo_ß¼ºdf†³N T7•'t÷ªwppÄ3ËŠA¡ûåår‘—Hwó/bj%5™ ”€‰²•>Ü'ëbé†dZ°RA4"˜ŸN'K4ÐÍBÏӗ¼HÛßNñR¬ÄW²Ÿüx ͆¼®Ku¿Ìl Wëè ]]ÅhÈ$¦®éÝ h·H<¦Å=¹!¬Õ¤fø‘>àAŒÌ†µê„ÿ%÷cɈ zt~¯!ƒ,Î[2¥htoE«f]ÕÍ~iÔC¿tXC£cÛÈÔÄy|ëµy~m|QÓÙÿôi”›[NR°û2}ºwÆi!S¿TDõ)±§ )/™4i‘¯ù@ÆYpT ç‹Fbä‡tЗ©}Fög}2!ÂRûÀÓ}™ª©ÓgpK¥C ˜%I°¡Ò!ˆngŸ\ê™pšY1œá´ÈÔï‘OeÚÕJÁh– íbžt4ΤN_o‡Ñ|ïQúŒ"¡†]É–/ ÀȖŦF‹µ´åyHÖÇËYÌ>l·œ~*‰Ld‡†Bv¸{] ¶bµß*úãlŸñpÆÔa†„5K3Ħ˜Ú'7\MáI3£ÈxÒÔ}׿1™T…m¶ÝŠQ¡à™ÕYµî¿ë¬'éj¬êiTI ò<…L­ hÈàEÈIÑÆA¯íeêp¨;û(èjD–B¬¹1è¨ÖLfŒó2 Ézóx¿í‡µ1„öjˆ&+D"ì“6˪&NöWðjù ¹SÃK|K‚š#U²wیԅÉTaƒ¬%[þ:Ó¹DøS}®.Q;2àø còsé”͵:j$`JXC£ë‰•Åð+U9ØÿY«©±Èe)Y;Vn6·,d:¼À:BÌ–äEû»ÖReÈã#Öý²ÙÇí Ñÿˆ¶/«½®>÷™FU(³‚= …‰­%”ѼÖdjHÉXÔžÙCIn±Â;ÌìÏìù¾:8“Öá@Ú¢ÀoAØ„Ç@*l6lpùv3}ˆæxëe2u8%™àÛStÄ>ï3½ezö°³kN‚AlD¦.ÄÒÃá¥ï’ÇTBQaÄKs"BGøˆ6"«fI T’ª7]ÃËw~dd7²Òºm’.é©¶·Ù¸†Ì†÷h­àUê´½˜Ô0Û*™^S$5vŽ/ËŠÛRQ‘GX»l{q¹\¡ögAû¢õ-ƒ|Ýtt">«`ê‚F›~%25ï÷ûŒc`­Ñ…Ôq„«éÆ ûtv†ËYÈ›vë*ö¼ÙÃ^†’ˆdÉFÕî"óÚ&µèXUO“…­îÈ7fˆö+düŸŸŸËåR'ÍÑÏ¥:«VÒoU(J-‘‘(˜ k2õ?ð /‚ø¶%°†ùïõª­ö"õ?¢6q{ØÊµÿ޳vo‚øfIåSVhMr‰ldêßÞ1Éš Ö¹6%*÷h‚ˆ~ 25A”Tž°•ö$üŸÛ¿ÈÔA|À."ÿ±7‡–—­VÚ&?j¦±_?x£HÄ0õ~¿CiɈ~1òáöF€25AkM曉ՀÛíV¤!ÞÌÍ™š ˆµÐôñx”d¾»Ý®¶ß€lÔò°M•·1¦¦öƒ ˆµÐ´ýD죭+¹ð²R°è õŽQ¢W[õétÚ S¯.–Aß ë®¢°õF£]ZºŸsÍ öƒ ˆµ0õ0 Ų;4=ã<}ºP¦&b-Ïo!\‘ŽE¦nÚzkh½óù¼1/625ñ«WL8ßöÞ‡‰W‚ÝC¦&¶¹h bK žšø£ 25A±jPûAA™š ÂöBYej‚ ÊÔA™š ‚ SA© ‚ 25ñm A¦&’5A¬´Ò#ˆÿÂã@P¦&ˆõÒ4…t‚25AA™š ‚LM|-¨ ˆ5€Ú‚ ÊÔA™š ‚LMA© ‚ 25AÄçâÿUöZƒáIh-IEND®B`‚leptonica-1.70/prog/newspaper_reg.c0000664000175000017500000001477112265251073015500 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * newspaper_reg.c * * Segmenting newspaper articles using morphology. * * Most of the work is done at 4x reduction (approx. 75 ppi), * which makes it very fast. */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 w, h; BOXA *boxa; PIX *pixs, *pixt, *pix1, *pix2, *pix3, *pix4, *pix5; PIX *pix6, *pix7, *pix8, *pix9, *pix10, *pix11; PIXA *pixa1, *pixa2; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("scots-frag.tif"); pixa1 = pixaCreate(12); pixt = pixScaleToGray4(pixs); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 0 */ /* Rank reduce 2x */ pix1 = pixReduceRankBinary2(pixs, 2, NULL); pixt = pixScale(pix1, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); /* Open out the vertical lines */ pix2 = pixMorphSequence(pix1, "o1.50", 0); pixt = pixScale(pix2, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 1 */ pixDisplayWithTitle(pixt, 0, 0, "open vertical lines", rp->display); /* Seedfill back to get those lines in their entirety */ pix3 = pixSeedfillBinary(NULL, pix2, pix1, 8); pixt = pixScale(pix3, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 2 */ pixDisplayWithTitle(pixt, 300, 0, "seedfill vertical", rp->display); /* Remove the vertical lines (and some of the images) */ pixXor(pix2, pix1, pix3); pixt = pixScale(pix2, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 3 */ pixDisplayWithTitle(pixt, 600, 0, "remove vertical lines", rp->display); /* Open out the horizontal lines */ pix4 = pixMorphSequence(pix2, "o50.1", 0); pixt = pixScale(pix4, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); /* Seedfill back to get those lines in their entirety */ pix5 = pixSeedfillBinary(NULL, pix4, pix2, 8); pixt = pixScale(pix5, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 4 */ pixDisplayWithTitle(pixt, 900, 0, "seedfill horizontal", rp->display); /* Remove the horizontal lines */ pixXor(pix4, pix2, pix5); pixt = pixScale(pix4, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 5 */ pixDisplayWithTitle(pixt, 1200, 0, "remove horiz lines", rp->display); /* Invert and identify vertical gutters between text columns */ pix6 = pixReduceRankBinaryCascade(pix4, 1, 1, 0, 0); pixInvert(pix6, pix6); pixt = pixScale(pix6, 2.0, 2.0); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 6 */ pixDisplayWithTitle(pixt, 1500, 0, NULL, rp->display); pix7 = pixMorphSequence(pix6, "o1.50", 0); pixt = pixScale(pix7, 2.0, 2.0); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 7 */ pixDisplayWithTitle(pixt, 0, 300, "vertical gutters", rp->display); pix8 = pixExpandBinaryPower2(pix7, 4); /* gutter mask */ regTestWritePixAndCheck(rp, pix8, IFF_TIFF_G4); /* 8 */ /* Solidify text blocks */ pix9 = pixMorphSequence(pix4, "c50.1 + c1.10", 0); pixSubtract(pix9, pix9, pix8); /* preserve gutter */ pix10 = pixMorphSequence(pix9, "d3.3", 0); pixt = pixScale(pix10, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_TIFF_G4); /* 9 */ pixDisplayWithTitle(pixt, 300, 300, "solidify text", rp->display); /* Show stuff under this mask */ pixGetDimensions(pix10, &w, &h, NULL); boxa = pixConnComp(pix10, &pixa2, 8); pix11 = pixaDisplayRandomCmap(pixa2, w, h); pixPaintThroughMask(pix11, pix4, 0, 0, 0); pixt = pixScale(pix11, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 10 */ pixDisplayWithTitle(pixt, 600, 300, "stuff under mask1", rp->display); boxaDestroy(&boxa); pixaDestroy(&pixa2); /* Paint the background white */ cmap = pixGetColormap(pix11); pixcmapResetColor(cmap, 0, 255, 255, 255); regTestWritePixAndCheck(rp, pix11, IFF_PNG); /* 11 */ pixt = pixScale(pix11, 0.5, 0.5); pixaAddPix(pixa1, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 12 */ pixDisplayWithTitle(pixt, 900, 300, "stuff under mask2", rp->display); pixaConvertToPdf(pixa1, 75, 1.0, 0, 0, "Segmentation: newspaper_reg", "/tmp/newspaper.pdf"); L_INFO("Output pdf: /tmp/newspaper.pdf\n", rp->testname); pixaDestroy(&pixa1); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); return regTestCleanup(rp); } leptonica-1.70/prog/otsutest2.c0000644000175000017500000001142112242266064014577 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * otsutest2.c * * This demonstrates the usefulness of the modified version of Otsu * for thresholding an image that doesn't have a well-defined * background color. * * Standard Otsu binarization is done with scorefract = 0.0, which * returns the threshold at the maximum value of the score. However. * this value is up on the shoulder of the background, and its * use causes some of the dark background to be binarized as foreground. * * Using the modified Otsu with scorefract = 0.1 returns a threshold * at the lowest value of this histogram such that the score * is at least 0.9 times the maximum value of the score. This allows * the threshold to be taken in the histogram minimum between * the fg and bg peaks, producing a much cleaner binarization. */ #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" int main(int argc, char **argv) { char textstr[256]; l_int32 i, thresh, fgval, bgval; l_float32 scorefract; L_BMF *bmf; PIX *pixs, *pixb, *pixb2, *pixb3, *pixg, *pixp, *pixt1, *pixt2; PIXA *pixa; pixs = pixRead("1555-7.jpg"); pixg = pixConvertTo8(pixs, 0); bmf = bmfCreate("fonts", 8); for (i = 0; i < 3; i++) { pixa = pixaCreate(3); scorefract = 0.1 * i; pixOtsuAdaptiveThreshold(pixg, 2000, 2000, 0, 0, scorefract, NULL, &pixb); pixSaveTiledOutline(pixb, pixa, 0.5, 1, 20, 2, 32); pixSplitDistributionFgBg(pixg, scorefract, 1, &thresh, &fgval, &bgval, 1); fprintf(stderr, "thresh = %d, fgval = %d, bgval = %d\n", thresh, fgval, bgval); /* Give gnuplot time to write out the plot */ #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pixp = pixRead("/tmp/histplot.png"); pixSaveTiled(pixp, pixa, 1.0, 0, 20, 1); pixt1 = pixaDisplay(pixa, 0, 0); snprintf(textstr, sizeof(textstr), "Scorefract = %3.1f ........... Thresh = %d", scorefract, thresh); pixt2 = pixAddSingleTextblock(pixt1, bmf, textstr, 0x00ff0000, L_ADD_BELOW, NULL); pixDisplay(pixt2, 100, 100); snprintf(textstr, sizeof(textstr), "/tmp/otsu.%d.png", i); pixWrite(textstr, pixt2, IFF_PNG); pixDestroy(&pixb); pixDestroy(&pixp); pixDestroy(&pixt1); pixDestroy(&pixt2); pixaDestroy(&pixa); } pixa = pixaCreate(2); for (i = 0; i < 2; i++) { scorefract = 0.1 * i; pixOtsuAdaptiveThreshold(pixg, 300, 300, 0, 0, scorefract, NULL, &pixb); pixb2 = pixAddBlackOrWhiteBorder(pixb, 2, 2, 2, 2, L_GET_BLACK_VAL); snprintf(textstr, sizeof(textstr), "Scorefract = %3.1f", scorefract); pixb3 = pixAddSingleTextblock(pixb2, bmf, textstr, 1, L_ADD_BELOW, NULL); pixSaveTiled(pixb3, pixa, 2, (i + 1) % 1, 20, 32); pixDestroy(&pixb); pixDestroy(&pixb2); } pixb = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/otsu-tiled.jpg", pixb, IFF_PNG); pixDestroy(&pixb); pixaDestroy(&pixa); bmfDestroy(&bmf); pixDestroy(&pixs); pixDestroy(&pixg); return 0; } leptonica-1.70/prog/cmapquant_reg.c0000644000175000017500000001022112270122643015441 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * cmapquant_reg.c * * Tests quantization of rgb image to a specific colormap. * Does this by starting with a grayscale image, doing a grayscale * quantization with a colormap in the dest, then adding new * colors, scaling (which removes the colormap), and finally * re-quantizing back to the original colormap. */ #include "allheaders.h" #define LEVEL 3 #define MIN_DEPTH 4 int main(int argc, char **argv) { l_int32 same; l_uint32 *rtab, *gtab, *btab; l_int32 *cmaptab; BOX *box; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; PIXCMAP *cmap; static char mainName[] = "cmapquant_reg"; pixs = pixRead("lucasta-frag.jpg"); if (argc != 1) return ERROR_INT("syntax: cmapquant_req", mainName, 1); /* Convert to 4 bpp with 6 levels and a colormap */ pixt1 = pixThresholdTo4bpp(pixs, 6, 1); /* Color some non-white pixels, preserving antialiasing, and * adding these colors to the colormap */ box = boxCreate(120, 30, 200, 200); pixColorGray(pixt1, box, L_PAINT_DARK, 220, 0, 0, 255); pixDisplayWrite(pixt1, 1); boxDestroy(&box); /* Scale up by 1.5; losing the colormap */ startTimer(); pixt2 = pixScale(pixt1, 1.5, 1.5); fprintf(stderr, "Time to scale by 1.5x = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixt2, 1); /* Re-quantize using the same colormap */ startTimer(); cmap = pixGetColormap(pixt1); pixt3 = pixOctcubeQuantFromCmap(pixt2, cmap, MIN_DEPTH, LEVEL, L_EUCLIDEAN_DISTANCE); fprintf(stderr, "Time to requantize to cmap = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixt3, 1); /* Re-quantize first making the tables and then * using the lower-level function */ startTimer(); makeRGBToIndexTables(&rtab, >ab, &btab, LEVEL); cmaptab = pixcmapToOctcubeLUT(cmap, LEVEL, L_EUCLIDEAN_DISTANCE); fprintf(stderr, "Time to make tables = %7.3f sec\n", stopTimer()); startTimer(); pixt4 = pixOctcubeQuantFromCmapLUT(pixt2, cmap, MIN_DEPTH, cmaptab, rtab, gtab, btab); fprintf(stderr, "Time for lowlevel re-quant = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixt4, 1); pixEqual(pixt3, pixt4, &same); if (same) fprintf(stderr, "Correct: images are the same\n"); else fprintf(stderr, "Error: images differ\n"); lept_free(cmaptab); lept_free(rtab); lept_free(gtab); lept_free(btab); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); return 0; } leptonica-1.70/prog/sudoku1.dat0000444000175000017500000000034311465606421014544 0ustar dandan# sudoku1.dat # 5 star puzzle # Requires: 1.0M guesses, 0.1 sec 3 8 0 2 0 0 0 9 0 2 0 0 0 9 1 0 0 7 0 4 0 0 3 0 0 0 0 0 2 0 0 0 0 0 0 0 0 1 6 0 0 0 2 5 0 0 0 0 0 0 0 0 1 0 0 0 0 0 8 0 0 6 0 4 0 0 6 7 0 0 0 8 0 5 0 0 0 3 0 7 1 leptonica-1.70/prog/blackwhite_reg.c0000644000175000017500000001063712240303436015576 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * blackwhite_reg.c * * Tests functions that handle black and white pixels in an image. */ #include "allheaders.h" const char *fnames[11] = {"test1.png", "speckle2.png", "weasel2.4g.png", "speckle4.png", "weasel4.11c.png", "dreyfus8.png", "weasel8.240c.png", "test16.tif", "marge.jpg", "test-cmap-alpha.png", "test-gray-alpha.png"}; const l_int32 setsize = 11; int main(int argc, char **argv) { l_int32 i, spp; l_uint32 bval, wval; PIX *pixs, *pix1, *pix2, *pix3, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Scale each image and add a white boundary */ pixa = pixaCreate(setsize); for (i = 0; i < setsize; i++) { pixs = pixRead(fnames[i]); spp = pixGetSpp(pixs); pixGetBlackOrWhiteVal(pixs, L_GET_WHITE_VAL, &wval); pixGetBlackOrWhiteVal(pixs, L_GET_BLACK_VAL, &bval); fprintf(stderr, "d = %d, spp = %d, bval = %x, wval = %x\n", pixGetDepth(pixs), spp, bval, wval); if (spp == 4) /* remove alpha, using white background */ pix1 = pixAlphaBlendUniform(pixs, wval); else pix1 = pixClone(pixs); pix2 = pixScaleToSize(pix1, 150, 150); pixGetBlackOrWhiteVal(pix2, L_GET_WHITE_VAL, &wval); pix3 = pixAddBorderGeneral(pix2, 30, 30, 20, 20, wval); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); } pixd = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 1, 30, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 0, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Scale each image and add a black boundary */ pixa = pixaCreate(setsize); for (i = 0; i < setsize; i++) { pixs = pixRead(fnames[i]); spp = pixGetSpp(pixs); pixGetBlackOrWhiteVal(pixs, L_GET_WHITE_VAL, &wval); pixGetBlackOrWhiteVal(pixs, L_GET_BLACK_VAL, &bval); fprintf(stderr, "d = %d, spp = %d, bval = %x, wval = %x\n", pixGetDepth(pixs), spp, bval, wval); if (spp == 4) /* remove alpha, using white background */ pix1 = pixAlphaBlendUniform(pixs, wval); else pix1 = pixClone(pixs); pix2 = pixScaleToSize(pix1, 150, 150); pixGetBlackOrWhiteVal(pixs, L_GET_BLACK_VAL, &bval); pix3 = pixAddBorderGeneral(pix2, 30, 30, 20, 20, bval); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); } pixd = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 30, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 1000, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.70/prog/lion-page.00017.png0000444000175000017500000004660511330622167015515 0ustar dandan‰PNG  IHDRÌp3å¡'PLTE***UUUªªªÔÔÔÿÿÿa¼ pHYsb&2 IDATxœí]‹–«* HüÿO>æ±c«=í0dÝ;§µŠÊæÍÎβNÆ–O?À´ûl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ûR0ñÓð íKÁŒ!}ú~¡}'˜¸9«æÓö`Îfö%ûR0§½bÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`~Ön݃Ÿ`~ÂÀ>ÜK¨˜`~Àp‚9޽‹ß4ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6Álí{,M0[›`dÌl‚9íl‚9M0¿Ç.7ðÌï± æ´bÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚ùi»Q¦}‚ùi›`NëÙs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9½Ì_à·Ùs ›Íì@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`d_ æw8}ÇSœ±ï>?yé —ß`Øüûû(˜ˆ€fÀù›Éolôi;iÍçdÿTýÒ+œæv‡Nj µç=x¹Ø'Áİl‚þ¿at$,„Ëv,ð1Œt(Ð÷íO즔"ýCâd7øé{ÊYìúˆt‹-H¿%:q—TÜ®Nù!Óö}3; RŒ ø6Û}H!\O‚sçû$˜°,q«Šô¶ü&œ¹ä~¥HKÝ~íäpt-Ÿ1l•yKQSÂ-¥´ÕÁ­P $¢ÐÈ©s+Ûy–D%-&©…6$S4¬¹,ò£%.†iý¨}LL”۔ǔs°*íÀ¸qÆeX)?íSl3Ÿ±ûDM-jõÝÀ•—“í) (å†Ïìä>•®ªÄP!A»ÁÂy¤_a{J-ËþÑþ³}´fJžYKg¶nkÉÓ¸”ÖuŸaq)m"ýÌÍ4“[EÂRÏK„^»Ø‚Iͱý¢Uí‰Pû:+|Ë/Í¢É߸ìWÇ×\µd`ÒfÙ–÷Õ±r²¡€Šq°ãÚw+æLI†ïr«‹B·PSrßóïü&ûü`•w¸ä'Ê[®Ø«I±ÔeÍñ|–$\[ÉM:}†v𳻪¾=¸;åòi±áÔ¬™-˜!”š™ÁÔ^zß;T½¬4wÖ;®\ã]5”>ï`ðyfIRÖc°ê˜m6³üMÍ”9H¾f.Û„ŽtÁ¬¦+© &äA|¥´¡?Í93·ÎlÛ˜WÎî7a‚ÉÖ6³A–°ôžÔ ò²AZ:œ«/rîâÁ” ¶F6”µ‚•MGóQÍLIÉnl¯³™¥G5˜ù“Sõò?Ö`‚ƒ"`S[§·³ÒAÅ<ÕÌV`Rj[¬ZûØ7€Ù4³˜·`®Ø™™¤2JÕ ü$Ÿ¥Ã¬. KwZÒ•ZWšyļK;mºJ/Í"oû™Ok³I“•¤˜qža™†`^¨L3¥í?ý–øƒ¹ý+Ÿ ±ñ‰q¿h#k9´å¥PñÎHܾÊÚÛvJ‰þæ•pú:i­!í¦NråÑSÙzÛ ?¡~£•Y-^½6ãÛ§ÁTÃæßþ×çÓ;üåá u­¿ ”QÔZvÕÛ‹>b_æöùÌü´ æ'í; Òs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs »æ‘^ý÷ÙoyÎkv ÌHB_ ™òƒa ·<$‹ \×aÇ‹JF:T}{Á®ÕL`…ž»žå]Æò¦·”8ì+þï% ïÆ’ÔN諟ދv±ÏŒ­hàÿ°'–ÓYƒ^›ôÚåÌgÕ¬õE`ö$ ¿­ÕO—·nP…å.0×ÒLàî¬ os-‘|HxeÍ,8 ¤¢‡ÄA…~ʤÞÓÉ\Àú4Öüqèiº¥—ÀìÞÍø|I{`ï“ÅÍX3P†G3ì‹GKP•ÌëÝ€F nÔA¢kt€Á·2¢h­…»‰$…§%+%)=ÛÕxCƒN%ùÂqªX?z7ú5FÓáåS{2ºÂáRÒØN†þûÁ”ÁDzVUÓA+aQ ¬ß)-ýH¤/HãÖõÞ®N„,–RÂÊu°©å‰´$ýâàpQ"¡— òsœ"¦º‘TÅQ‘2äˆANŠž2¨Â:×ÈÀÉ)p»!‰IÓA*u¨¢‡¬OÚ ŽÂ‡Y5œ&"M›ä\¾NþRséÖäe0÷ D×­˜V Ñ|_Á¤¬0Sœ¨­]B¾€uÑ·gØP® ]EþEN‚r-[YC¾m'lm7?{·ÏŒÖÌ&{E‚;*ĸ@UDK£IáZR`±Ï¾Lµ§1»"ep,/.ËÑÅñM.é`h"oË)ä©JjËM5‘Дy©±€²º3ßTïÌ]1êzÒÄ*¦À¤€:ÛYH®4¥¶ƒNÅžõjÓ¾]µdFNH›\ÀÃèÏØ;@èN:ARj) ëR!Í7œ¬™L,ƒ ª"(MgYèÕL3‹©cn¬fR·@U¤bµ™@r¥œÖA€ehê5(Wƒ¦‚ùOy=‰=ùHˆþœ½gž ¨~4”‹á&í¡âÖÖ̾U`æy`$q,Cy‡ãf¶ÔÌ’‘š“ýͽÈãf–Îæ:[ ëèç ùöòåˆ$›x,tTžOÛšY1D¢òô¤¯UØ Ln5Ï€YWß­Ñ®ÓÇé†$ÊÉh±"0µ­ÞšIksA9“âä˜@sž¹Ï½¯ÜTZ¨R3¥Ÿ”ûá­Ä®×ÌÝèxvþL>‹r½Œ3£±º€,¨®³ é„aB²E²,0˜…’&à°™Å\Z¤ÏÑ LõRN‰ª\ûZÚÇ)˜üEºÄƒÕ,%Òÿ˜×çQÇ_˜ï÷= jMö í2™£xV µÍÍÏ/cw jÀkༀÍÁhw`2dŠ•õsü\—¶ñ-SpâÝt•†›¹ežó¡„S 5à°”°‹S7B“ÐöÔ4ÛˆŒÌ"ß`7ÑyiíF€cÌKxŽ¥ ÊrÍ.îš$VG#Käs_ šùÛ '®˜üE~äxÍ<Ô¥7£Ï‰F“í-€›A°ˆ¶ygµzÎwL’ù”æL]4" m—cÔÔÒ"±Le\T&V=¾kA—€×èLé®;q޹ñÞ ©Ìƒƒ…6¢G‰-²\9¦åhµäûÛL^ý¹CÖ º×²þœ—§ýÜ•¾ ö—Á”E‹;>€ò/Xž{ÂQ¼šßf̼”ñõÄ—“ö‡Á¤I2ȾÙ×m¨¿fLL5dÌÕh±¿ æ`6ÁÈ®yº‰ºÖ–áîó@mãvÑÞ'aU†²Pwá.Ìé²/ºLö˜ð3QûôJLµ‡ŒÏ/༳^³g¶1"]ïà%CO´VBØS»ò´·úÓV!vwB{æ7ýðA°ãÎ=x™økÁ„SWIKžTô¸fTÀã]×rÊY’*­ôÄJ ͘Pø>wŽÿ0zxýœíöüö÷eÛ©û?oâ?ÛýK|ë'˜’¶sƒëÑ‘ý0/;´œ3sw†'À|Ò´Üœß[.ä–÷¹Í]Ég,ÍÚ#’w[3õ„‡Ý^õ£26ì¦öww½»Q5ún0‘h²£}ò0öžiô_´+`‚m™§Lòæà„Üx¢3Q¤u!|a Qúb4%ù4•²iÚvÞ±1V‰¾5\[ ¹ÕiijÑ;)ÐùvÙÅA>ߎº1”¾˜HJÉ÷j´k޶é-lÎ(Œ!+lå b<1 T×=a¥0eKŒwæuçf¿/ÿ¼]“øÿÌÆc–ŽðN#¸!{&†ˆÂÁdNRt”LÄ” '‚Œ&-ˆ Ù˜nCSânò_ÚÒ·rC~¼ÒÊW¢# 0¿c»–Яü£Ð‹âVž"ñ[˜ KÌÐèÚA`Ž‹<x…#Þ ÀTR*h?á , 5˜0p!ºÜú^›g O ]\2Ýi­Û‘ Ì”‰¨®sJaS6°p…ÑüúÊŸRÿ¢Å…ŽXn­d$ÆÒ È|èÚÄ,,ú+ç%¾H§&È)VÓ¥ƒ>)ÿÁúLXWüy„çó@š-)½v[&¿}–7+Ù )æ| Uª˜Ñ»h" = #‹Âá"æt^‘plKÚèË‹’ óËI[Z®²1œéwªÔÒƒöwZƒ%E+$L%¯óÛaùQ—÷øyL ~Ô#T.)`̽ ÌûËÕ=ò[Àö!7´L+†õÌÌçÅÊô&Í{jF™ÇѲ©b)-9Ó™¿%©ä»i 1’nDcÉz¹ädW¡2[ñHí3G3qt`Ú3Z9û)§Ðϵ…‘§`ÆUØ‚ìOxÑnhf!ç2rC‡PÔ:oÔóJ†4x(ôrP?ɶÕò`&sí€É0j“Xƒ)UÁÌ.©ü{0É=‰Kiû 6ÜÕQgrÃ×*oI¥ #M¿„'œµð”sÄáJ‹ËBÐAjj.]óxEËœ•#òêµo¯Ç3E•3…0?âÂËí0·&Ц•Û_v&^Ì=½Þ i}™Ø‹÷ZLê­IÌð¼ÀP|ÉOÁØåü%"³Ì·J(/ˆ¹ÌS>Z6¨ä#-øPä5ƒhî,ú@HO¢ž”\~Êßj1\J•VE+š¢È@³N~œTõÑ]S?¤'ñø}ËBðË$/ÚÅeÓÒ«k)ßkéû‘ÿÒ]уÏú­ü±Õ:^óͺ“2ñÉÐÙ®ª‡ì]°dò,wü ²PGNZûVÐqPÒ¥*vžø±f®êaOê£angö†²×Áì#$|¸ˆ,ÒÐ=ãŽ^ãð¶Uòú1±ÜÅ­®;Ïî>\±kŽC퇎0šß›¶kððËÎò|ô]ëÞÿÝnÍÓ0S€–á~žôÏO€yO¹'ÁY›H¥t­žAbY$m¡&áˬð#» ÌFwU&’]á²i<æ-NÉo$B¿f«sâ,ˆŒÍ\ßpâ0mŸ¯Ú”ŽcqxÍîèC5ºê[ wôu>,Ĥó)?üÝm‹vÏ»¿S½£fÊÞWÕ=‚髦ý™؇÷±3gÔ¹÷š:Ö¥ƒ¹Ó¼¹~dmiÓWQÁ‹è%Á&^O^0c9ˆªá˜“JJZ‰òOŠ„QÀõ|á"hš–€|Tj:dqýÔ’ÅÝo•Ûñ³K›Š¶õ¨››¼šV{õŽù‘ÚšžÏ¨=8°>ë‚]Û#¦*#ù ¶S¸S@Ä’uE›òBÉrN]îÞ>*5<Š˜> ’P zÁ±KN3/º³rb0kiûv«Ý¬Áú<É}k´h,Å3Á2r•¨í ¡Ëð‹âÏÔ­™ÉþvæÜíôj&Š iÚ y޽f–xºòò¾µÎ·ñý ;ÏTÚ…ª  Œ§íÇÈ.÷ÍB Æ0›Çˆ:Â3òvñ·Ù§‡³²svi¤³Ä]Ÿ™c©˜;á»J"¡Iœjz~ýdbúÒ¸ÑN¦äžV˜'>YýÝîäÙc9?“ï§rÇŠ>ÿÊ`æ² 2®¦9L½%ìïÖû̓ɥÒû6T^jáÍÅÈ¶ìž N5qx, XyDS4õi¢ëž¬éÂ%÷_î‰óÓóç©[^$þ·‹5fÙ=ò[:ÞÔ8ˆb wj¦6¢ÀV3‹Ð>všri­Cµ V-L EZFµ»Š\~‹jŵEƒ´.’êÙWaö2Û<O\'ŠÞÅœRYmZeȹâñ)4”Ï>ËâëAäuN‘Ãý!z&=;dzw:M_±^‡J´ü¢Í7ʤ¿O”^™ms`ˆ&š_ÐâêÖX’cÏ1<Ó¯J]bM±¯÷¾™½®®#v•Ñnë#­!/&K¬'·âUù“¶JR@^ÜIV l(+×J2¼úck@&ÄŸ,Z¢˜·Q“& Ј²!èàÉ!·Fƒ²û.ˆ÷í‰'ÆÊK"K=FfŸ‡Dßrz´˜áV¨|qt^Îàx Îic}èpÚ>Ë4ÈÓÅ$V.=¶êŽ~p Y†£¦&ÖcdìœÛ´ÃO]×{èž·íšüüÃKÙ|ò" "ýðU8=FØ£Ï5ÞÄ"'ßsPréï»UlöSÞ’›xØ¿ Ì£üÉû'4y®>‚Í&ÄÝžNP§Ç×í—yhÀa~þ ?#H¡I2^6á¶Ÿ·QÀ¤pÚÇý¾ßPV{û`Þc•·›ËíôÀL\´…÷(Ù§Ìðd‡kilgÙ)ÎÑe…ÅN@½…ÙË*F3(u:ZpS–¶Ò“•¥Q¶ž…ʧi&ÇÛmLVW‹"..|´åÁô# òßœfg96û7Ñ–"VÍgÌaœXwG ÝÎV‡Çß70éˆ÷2:zª]t&mx­´d¼æ{¥)Ôà ºzw–˜Z¥Q‚Ic=¾>PU}8ÜáM}ÑNªÀ‘•xùÚU^SNBë›qX3{,šê¡ÔF,¢û­[KõH1uZß|óícö¤\}ÍäÛ¢—ê–wõ®Q½ž-Ö Ÿç^N[*‘;‹<úÒ”ÂÒª{¼`÷6³(›oÿ¶ü0Ö¡!rsÔé3ÍMAkæRØØR‘w·^UÏ»•ë7=,°Fñ”‡0wšïR5ƒÌõ $™»"˜,ÌcßÔ7¸çAðuÙŠw €b´þœ30˜7W7çÓ¶¯™X €bQVÏ`r JE§…4¸ó«çQ…Ü:p{¦z³ô:ˆfdâõq3kS X"•òç ~½Ç){Ç<BvN¦~Äž‘¦qê̘ô¼KÅÝ9™£©Ñ,<ˆ´zÄÄbŽí­N,¹e"»_7é27Y$¨•‚VÚwÞAã•1Xõ·—åì½>FÑÓÇâÐÖ1éD ¼doZ4¡ÊyÎõd-á)^{é6 ئé6P¡óÙ%±¶?«ëƒ¦vÓé Dß=Œ°ÝÅ¡YŠ_ÆU  žgFs¦à ©– õ£NZj€Žó»‡f-¥å pêµôÑrŠcÛqá¾!NßûÕµŸ.nXàýª }éNʪõ¿úE^;(ù;<úk©X•À£˜áâž<ȧ¿*Ì¿BêŸoWñ¯^‰ÿ‚}ç®É8²éÿÕ¾Ì4ðÿ«}%˜ÂgÓ~°¯3Ýã{úçìÁÄt&Œó´}#˜Ó^´ æ@6ÁÈ®ƒy}®û¿ì÷<é‹v‹Þì Yýv)ç^lg#ûŸ?aå¿÷Ø `ÂÏ*æ¼ùédcnU’€v¹ýzè~å ¶[Yå { •Vîä67Ý]æ?ñL—£Õæë½¼Óõ¯Öþ˜±%80Œ£‰ÆÖµ"-w9ê6vQÔI7ØûWQnhm¹é»ãµT=Ö1/ÊÆ7–Õ7BJ"SmuÓ2ÎR3Õm‰Ûìª4ýs#¡Ò]8£Xþò;¦Vg²·ñýÎú™¥7µÿÛÐë’b:Ž‘€m…ý9*FûÆøðWo²äUÕ:«»Ïîý>uvĽbšõ>ÑÙSrÞ®)A/ÉÄ´³rdQü ú…ùäJt4 ¼é¢É‘¬KÉÇêt“uË’ø¬½–ÅðWUÞÎwKt~‘zk¢Ðy«Q¬·K-yù€'iæDsÚ9î¨_M×r?¤ÀäÝx!c%Ö¸t…öФHæ5,=8Q5Iy›Ÿ1"xPÒt%“O\`2IÏh‰ÛeØPB» óˆD½P(¬tu`̹µ”^Ó7¹-ò1V$ =Æ“ƒî~ÄÀUé×`«rQID’*/D¥_\—½¹ÔÌFåòºà˜é5U3[ÕLa K•¸WiÐÕä’2aKÉ– ôœ`t Oþ¥ì;J˜ö„!$,–â1`ž 2¹a·ᣠáÂ)0Y-m7Ûâªà¾T\WËè_ÜH†<-ʾ<.º4Òʃ*,®9«Òô›®´ñqq½²ð¨†wæ¨+cÃäƒËMõçýg¡°;þ-1û¨™Í´Fqh‘xÅãP—?Kð½I IDATf¸¼EŠÓA„v~õ…*÷ÉD{‘¢]oˆöv˜./}v›íÀD $—k… ù¸è²ºþ¯º«hÖ™–¿¯™{`¹lx\H«|¯)­cq2Y•8ëu§²ÈÎ5íxÖšY‡’EüpôÎÕ²ñ†Áöí`"‹ýj3ëÎm"c9üT&u0¢)LçúÎ( ìgÅp¯À»“{>æ® Ò­•ÙùY©8µlžšä¾_[m†À-ÆÂ%»ÌRIx>’8ÕC0É\ïgìoéE³“On Ó’=¹_‰.õÃfV(¬âÔÓþ¥fP<+møô˜˜«^³¬™G³’Q1}3»ú– n¶¼ fî9_uó°fb®™ÆÍ®Ïta 4#q)cÔdÇÑ·UšnõÙQã LõEk^bë²À¼Pï·Z|€eHù:+jµƒA55‘ñÓ €z×7úÉ.‚™0kŽƒ0ˆÕݰ]º7•…š2š5ª¸S=• C²n9 Lè×̰ZžhÑ‘¹IP«©_Q‹¶jLo€ÖÞÄòaýaÛ%7Íx¶i šàÁÌŽ»˜À¯Ù%0ij-7â"4õTDŸÖ+-y"³²'-;#¯7ð ‘°¹ùÑJ@'‰½(‡"{En«èg>‡r. û é“±(¾æ]Ð, 4é`-Óäc;–¡­NÐ5Ê$ÚÕ.ÆWmˆ%”gðlw upœ…c‰1—_ËdrMý-$k‰€¬“ð2Šp²‘ùß*¢_F¤nX–{3°¤ŸØ Wd÷ÅÅßû*‚òn‡u"àÑ–[]Ñ—#^dR{V¯töW×Þi¨=cÒ“r¼’‡Ìϲ·ÇÛ|bce‘ƒàôü©Ø‘½„à²êjcgôEûmë‡-Ù»2³AoRЄü~œ‚«ŽÅâø¤uçGqÓ&Àç9@O¼F{ê=8ß%ª½³ƒÇë¾c^²~˜ÏÙêé½[c¯$†7Ñ.~˜ïho)¼å‡ùÖÄE¸é~˜ï0cÔR_Ýêûã`Â"ᾈÌõ?Œ–ÿŸM0²±À¨–½bcùÇímd'S÷ÔÕì~Ïf•€›¯¤× ðOVS‹ß¹{ާ72°Z ÚÓtñVuýŽ]‹9}a²K+”ëjRwU:iÙíSJï¥wÑ Þ;:-Š?•K¦-ªÉE»ë{ÑÍë\íڮɖgJ lVÛ[SÒœxÌvo㬷Þl¿vPÇv?GÊkç)ÔÎ'²ïðnÝ·ô™ç‚úFÚVš¥\ïwŸMo=¿Jwx³ ÌS Æš& ”‘ñÍ5óÈ⩇öål“_…ÇÜ–³»â1<^6“RÜ_†½TZ0óÏÞßèÜU³Í€húŽïn_ó5‘G;™~ç§4'¼Ç©YÈ»žþeô͹ ‹Ò¼”ìù—æŽ}½.þT7‹Êàö6·á=‘G¶®ïç GWHsg ¦¼ÖÇÌå‘\ûúSaýÙ®0Ú•ŽÆAÎÝÓ1Ë…HÌjõr0Æ6R)¿yRf+XP?¦òò1Õ±%I†$ÞI"°Ûñêf›èô*åEÔŽ;è´[Ôæš‰)èž9‡ƒgŠÂVT§_1~†ÓdŠ¡ÁÑȇK5»q”€÷¼wºÃ¿Â‰ü`}MVí Ñ·‹B6ß2”Eä”ð"UÖ?oÈ`rf%ÖPî‘\wÙ²xVøIó$%léT4Hemþ̳WRQjL!¢IJ¬¹I*vï„jD¥ìÇŠc`6‘!À<#¶¶â¡BÃLa[+Ã}¹êâ}©™e¢)gQÝø‰²Öy ix«áœj™;YP#ä)+8P³è§?\«¢ãƒKMg¬7‚R¥“t )7Þm‹éguH«,ÑjÁÑ|ÑÃì6"6ªüÆÝª¤øAóƤZwîßÏÛ50%C[' S\UQbÅe=mï ÏʹJiLÎAYV?y–4¼ª«–„–èˆ>ÁP¢·7cJãlB¦Žj݉ŽûyN?ÓIC{ Gü”¿Û„ˆj©RØë+ —À\T©åÑÌ‘ÈÀL«zÕµÂiìÁ´Ž³º#¡p­2&»"¶s]AYÞ¨øóÅÌ«,åÛû€ú÷ìèÌà&¥åT"œ^†Ÿf´[k©"s;­-b§fZ¬%¸ò¡ìIýÊÀÃ(9§@`mxƒR½2g~A›åáÌÜÌ*>”Âq˜e4k0xßUzÊü†îsm–i]s"Y4ï!§—(˜RƒrŸé0Zýèú8Ì`rçÛ‚É)Æ f¾y;u÷ÔxöB´ñîRy¦C+`¶å¥mf뇠1óL¤kÍ,gÏãü49€˜B˱—$K°" úfV›Hî_-E%½b3V¸zjdY{å­7 A£S‹Òˆ¶~^rŸB´dIæºf>µhÐë3±zãªt OÌ®ÛÅ]4üX5³Ô»çZÜYŠ~¨ß€þ1WÔH#Ò&e¶º,—rİ‚?y¥¢ÄSV)òVc«w¡Ó"JäTw^™üÖ­3LïV-G9\¶‰"ÿxz­%o ˜(Šm0pºhÞ±6tÉ ž§Ô²P,R¥§JEs|}\Œå³ Qm5pÅPo žs±?Ÿª‘22»_ἦmW}I¡Ê¾­Äk¶•)`³lÊ—‰<Š0¿œ {7ûiË{š)=Ü&"ŸziüSã†â ˜¥øQîóœwî5ûŸ›ÓmFTË®>LfþÉ Úµ=ÑâÏW•±á>E—È~•EôUf?ð6”0{Oп?‰ç«/@sžDVÞ§Õ(iEtƒì¿¡ÿæ[˜ﯧ<žõÇÅxÇVÕãEÙ{¶Sþ ˜o…òÁ:÷}ø(Ú§cã•ùþÇ¿‰ð99@Åðh;òÝvnÿ÷g›`:³ið»T'»¶tÝ&˜Îh|ÿ+Ë_b<õm‚Y±ÿoÛÝ0Ñ&˜Ù³µÿ\1ï´ æ@öûÀìt1ÿ¡2}bÕãiûu`¶ÑÞQ™;ï5ÒÅýá.éÕ Æ}úû¿ÌöÐ^QûuëW$­Øf|ѧ‚ †˜š¼&±a#ùj7å0 Ű]¤½Ñã ^¨HF8E»no³÷v욙ϺkíT~ÆÃU5v<ŒÐ*D»“Ì’Ž}˜¯öÞG üçÒKK!ªŸó½û1]<ôª¨h0;a«½ ¦%|}tÍ ŒvŸ…WYžL6$.:Ê6T!ßi ¡•"ö½IWõ‹s"¯%ÕJy”êËÖ/xÆÒ%F˜ssðÓ#%ÏãJ—Ÿ­S=C|ˆFöÍXåªéžsËâ&,_,Åæ~¯ÚE½YêgÔÉgE«@@NR3%yG‚¤ÒÓj¡³ÂêVNóêšd]‰XÒ´³4¯/Õ©´rWu$âX5Z“b ®bB–Ê•ÙìjQQ˜µfj'͹ù”‚¶ÅìÕTX£×ìu05Ÿ¸k@ç t׺ffákŽkiÒÏU»BéH./­Tz!¦óϾ1¬Íû‰ºK€âj˜' Zab=‘×@Üi.l”ë®  o—±‘Žgÿ4›¶¸ª+L|ºÍ‘ z¹ü”]jfå%Ïé£Ä*àì·>“Ií¶¤ñ_ ̪j†h9PºP¸fö Ï\][''X†' "•ÏŒ–‰±‘Xbî\«>³®™T*îm4o'_3%áʗϷÉ4Ã5•}PWíÒHFq2N¡ÜË™C4€¹µÞ±N ;Îo'úÌÌó  …\ñíWN‰æ?þaP•ÕËGŠ êX’8Ìæ·¯7jÄfäÉmÁÜ;Á×`Bíóf.n©¦Ž æõ…"Í7m^ö`R˜5õOfµ|žeQŒ+ŠØB/@¬mpÕ 8œˆrb¦ۣĒ.Øœ&v4 ³þ•á:­}D Ý93°²>UcjV¹§’«hK.` 'dîÉÞÁ~'绺Ðú¸4Ïjó¹Ib¶‰À| ÈUAZ\‹M¸ŒwèÊ\jf©‚™?>®9L!ûï'xÖÂY‚BøSÍœâ€vš9 Ðj ëg0UF¿UH pu‚t*'“Ä»G¡$j`´xÑHÕ¤Ðï–œD±ŸÿÊ&P­”/àèÈjr|m’ð·õ$à±4yú³ˆCd U^/¹ºlpÏB{ï)Ì'®zÆwnzæf¥ØÕÜ}èY;½ÇÃoÇéÖóŠå7|ö…:öÞ]“g6FîÒ¶~⎯¬¹à>쀄ð’Ù{˜TÒN*%Jk®—ÌgìõPj9xÊë÷¶iÏ9õ«ÓöÖšyZörëHîbuŸ4QÚ¦\¿¹ÕÈÒòöN0‘‡­g2,-ÿ9†/…¿pYZîp‹E‰ÌŒ7…3ÉöÞšyš­ý¿iä:¬~¾fþà;}6yûÐÛóûu„®í ·Û_ócp¾ë¶ÌÁì0_{õûžøŒÝ&¦n¦c²Û+÷ ?pBXòdr×å@w–·Á;Rûv×7—¡Ë`¢®²ï¬C=¿v£û‚f¥7HßÛj†yšwÚ5%h])îOÙnŒ˜f7ÍËà Ò÷ºsÆ‚ÉýjwºQtí˜Ò÷œ~狺ÙÊ•¾jï¾w[õ;ÇÜz£]Úëèã¯ÏìhœÄöz›Ìxi£A))ïÊÖ¥·F¨›f_=Ef{U~¾‹^qÅY;«Ws•à]#‚ŽznçPûTjfÅcµz¾æwÄn£²jï+BjW´ód‡•ˆI‘Uîø(sµ…¡¤3’¼Ú£Éî 1Ðöu !oÌ«“z*{bÎ83ŒI⼈ñ?Zǧ@ñ:úÝ:±íÖ“%æ:t³5;OèR›9M˜çÅÖ­ yNìÞ‡»œ´t:L’dâ5 îÛ:êã¡à„*.òfy'd]¨ÍÂCuã!hÚ“\×U¤ y‰-ÄȽGŸT.8íû1ûdqHvíÐý«bHÌÌ“ÍlýÔ&Ü1k¹4šU.·£j¯A ë‰>³¸ Y¸›Tò>©‡\®&5˜2ª úqoòh±37åÝÖЂèéRÎÍ“ëTÏaÍì 0S›üÜcœ²knð2ÿó`¢‚“/Æý ¸q¬zùq£ªÔ5öpïДÔZ9YÀ—9ZHM…ʸ1æ<'Ñò¼3YB ñ¦®•¹ ÛþÂã>3RM‰IŠˆVþõ¦…ÿ‹k³Tù/ua‘"it6fuÓ·þ‚»x¾o“J•Ïç×J¶â°òÖVc~?MßT¢_¨XäyLÈ ÝüCž›²W³ìV€îYqžèm`ð£ÛúEñoáE öýdê:¿Òþu8 €‹mÛ< ¡U îS*å]ïYݾ¶ægýú‡?¬¹áñ‡µ¬òæ5>I}Â.Ƕ˜È>/ý©¢«OÄ7ô{‘å D“ϰu¡ýÅÈq'µ¯iq±C9E9a>L:Þ@ù[owO¨ŸéǪ;^ï)Õ–Úg¿ïÙ.¼ æqËS>²»É§Ÿ°›6­?¡ëÆ=ð˜´ü7•Çßæ¯Ærå]œ»Ø$¿Ì_n/:Jtm‚ùi“±ö-IM0²_ æoï(ßcÿÌ?Ÿóÿ+ÞæI9ØsiéúO«ÎõZB_fןè]`–5¡ð0‚èsMì%-—–¦½LæMÆë}}þs%ôwÄI7h:¼Ìæa!Üw¤Û_!À¥w¢öe‹¡7Ë ÉG¹[—&¤µË÷¿ÌÿáF0µ•…ì9» LËÚ²‡nGŠ íã+Ï[?ôE5÷Ææß'ìtd=ãÀ¼nš»îU÷Ïõiñà•÷SþÀ{Ó¬áËûvQe*·z”b»EMêh¼5o[…Qå÷Mb¿ë&(ú°°#r© ¾íqæØÜº¸W•`®–„õF°ýEÙ§Ä<Êr§›ªœ|‘»¤.˜^”ÃÜ@Iƒ<ëîËûbIGü7>-„Hƒ7T)òˆ©y¹‰Ž>©£Q}´--IŠ®!yÖ Ð4Å#z㢆'Ý·Ç61ñg¶;R¹0 ¹oÇ%tþªâ÷4ôàS‰¹À†¥ÕXdŸVtäGK’8ðyõSsç£FRQeößèÓ,Xd_*‘<-> &Šö1¨d-‚¬âªÊñ"‡±æYUaEßQ"+{cÉÓ3«ÄäÞ¡Ö-ú¬Á…r‹’£ÉÓ¨¿H= MJ]áêNÅΘˆ;éBå5 =O„~ϼ9jjÈÁ<:”pÿÙšY¦O(´+^2^TÏ2ŸfêèÍ‹«cäb¹ÞÇ`?¯3òàÄ aJo›5Åš¹„B Ëán*"ÒVVy<;º$˜î1ð¨‰Ã„JTË/&=¡Q®ùlÍlnµvk2ÿ¦ZÀ» ŠÈ¶ÆòšzæÏ`®aÏø3:æ¡c(ºè{0ƒËX­YÓ¶=;ëâ'N}kÃE õL.Б´‘I]•»k&¸Äwó‹üèÈ‹èÒSk.š¯F>/T1Š1µ5úßøßô˜È®qûÄRNL®L…Á~T3]–r*Ôº˜A5©¥Åqk[;0í©I§Ø¥•Ðíkf¾“õ_&¹ñX -ëÛÀÜ(·Œ‘å¯ì1TèÝÒ§Û‡Q‘ð(¾dÕÌ=˜ÔWD•|n¿R™döYfˆû2elgb ºâ\ÃXº$p}CÍ,nAX¨•³Vµú—ƒšIŒ×Š4Ž:€@ÏIUÓ#ÀÜg–aP}6º_M‚½s‘P§ò¨:ÉØ?Fn2ãzfÕ̆ôØ—éI»45‘x1a5¿Z&?o¥{{qÈ~ªZ3;«¡y¾(’A9üWqLM¶Vn€»Ät _9˜ðüv/Òk5Sž››ÙÕ.âÏ?lŠÎù^ª£ õBë௱­ÒbÅqk¯¸£Åµt¹B¦£‰OƒÉ4nö’ É¥˜õê¥ë1wab«'d_ä};»ä„(”›jн=Õä¯ç“B)‡nܬܪ#·6x쬼sN× ä_#±Þe2X^¢_Æw.ô«L3¤Ø!¿}!ê-…œü¼EÞ͹´”k0;ÒÙVVA’Dañ^ùPÛz”Oè,_Ç\%J}Z’µl–$Il•úÅRt§%ùÈ[K¼ŒÐÜYÇÏ1ÿš"ל¼üÉ@¡ŒLmŸý0äþ)´ Ç÷ãSQ¼x0+*ü±üEVç-%È¢üá@ ê û$m÷-ocm|ƒGVáõÓeÝ€E}ãõ(òíz‘ì¿WçxxæÏi=oWF³Wïý3÷·í3/%æí©ÉÜTb á2ÁáÍö©ši££Çv |6øÂ3*âºôsÚ©ås€ ÌÐtLÝ<8™/˜Ú‘Èóá¯+YᎠð¼}L„[âòªÁ3Œ gÕ1‘£&¯·ÓÞdÝI{N>û>”.x‡:þì—’ ÿ³}?ŽlÌ“öðœ`dTpL»Cpÿ€|õr +xb­à­†ge³¾ÄÛá:˜¸'ËÉñåÅ´ïë¼ÇÎî1¾_}ýœ]Ó²=ýî„ÿ X?*ĺjÿ-`žo C€) )iyföHWUÛ×ë`ÞÓêp€G;ËxÛ“œ³K íZ%ŸÒ—ª˜3ÍÛê&ä~x¦ƒãÆ€xp®Øwµøny†gìÓ`1Ž¥ )i¼s¬Dº°(Q:~ãˆ/Ì3CŠ£Sîª Žƒp`*)ý˜&ðß*ç%Á}â³1%‰ÙºµÏ‚û1oÓÞ»Üã‹CÊÒq)“à³°>]ã7~y÷–w­¥f]~N-(©¡j1oÓM@?`ÏÀâã´…Œy YOÁ+§=q¥€1˜ÉE¬×Ð$Úö«¼Çö·¬^©™ ‚û ÌXéBçJ*þH®19š3…@»[>e7Þd™FDüa?úGªÌÑá«x“Ѥ*SõX ôq¦œË¼‰ƒ´¹[4#Kè³…é#+û$Pnr’‹˜H˜šÝ–´P .~[ò‹‰o/¡RúÌJÙŠfìÜšÞQŠƺA ž´ûă³B>Ò–{ÄÒü×÷‹š5ì³BEîÎÁhB;¦Íø+s9qÍT¾Óµâ£'P]Өܩ&Ç”˜"” Õa¹cW‰Zé<[^/Î .êPÕöQK•òUÂc´“qÙ…“"šòc_³;ÀtT3 ²¨¼DeÒ5wÈ2´¤=&¢ 1g<˜;ž «ø 7_»¼X7cîQñ}Áuï['Â3/ù ã=ƒ1ˆŠ»bhdo}bm&Œ.äS —Ðr¿r£l#ËK%÷€™³Â î{gg^ixmN8så–Z4iƒ ]0À@EàhÞ<[½$“Iì`lž~íchgÒ«T.:™F…ª‡š“ÅΉ 1XÔÅåÃqMäjçLå²5G9¨¯ÁÅU/n5Ë;€Í6`r{–ìn˜.˜ç<\E„‰®Nú53i y(`¥~i Œ{0ýªÌü7O½Ì×¼wœËˆ­¿^"¾øõ…‡;£'¸ò§ýȺwKâ1f‡VtµÅ@‘~¶.©ä²+ÇÜÌb×—D…ãWaãÚywê˜À.zܹE­™2pÁÜi·†5˜i­ §/j=¬DZßó†x£—ÁÌ9u(!s‚•Ë)*¤í­8–Ê,q¨˜ÍÒA2_‹ä¢ÿT£YXL7ŸCÀhM9³òíKÖŠ‹•Òh^zÝ }3»š{EyæÇ`Êíst˜ÏÖÌ$óÂèÀDb®sω6&­óo;@Ôu‰ëÅ!3©ã.Èo½fÖ àk­q OiühV[}\â8Bn¬]¿_3Õ­R†½VJu«.0;‰À%×Ié[4¨¦ÝØy} ‚!w97ÌM® î¯À‚©ñP•Ó¬ƒ@ŸÈ]íwá~óË’s@Ö< /ˆ”*•Oà2–è µç0 Q£)4#˜þ4°ƒÇÕÑ¥f6T¢›¢ÍÈÝ?·žCAÚ;¦­™°xT¹íB.lƒMj¦eX°¡˜k€3æêÙ³^Í$ÆÜ©f–oq­¹øô&}‘rj˜]#t ¦½>¬N›À„öß/‚)ìgúì¢i}]ˬyÉä6S(à±iúÌ`¡ˆrXïpÅiÁÒÍ]ïbý6æžj]ûK¹™Å¶/·çþ yq“Ŭ:nI &¹2¢(¤:Ò35è/ íøw¸r1Ï+ÕÅÑÇ)PØüÄÂÆò~sàšY]u+~몾 ´buZ\Œ)î8Qæ†{µIö2²Eþ+Ùª#3fnï2B  4Ýh'¹¹_<¢!yÛ,Öc0µ] ö yàNS3¼<˼¬6B“Kñ­‰â>­Gf˸†ë”‡ gÈ_q¦ CŒnÐÐ`AWk#%MÎ@œô  êi¢ˆòvsFþ929]k&Êt„¦‹`ï§°ð%U¬+"´ç0ÇÁp%¢—u¾P€)ž‘˜ðâã{×&ÊUF;¿…2.s¬Ãb°„?TÚ7¹/Ѝ~ÌðÈõ«© OÄÙõPâ1cB‹ëÈð(Ù“¡ÓÖªƒ;)$Žü¤}/!ÙKaw‘¨âËÉI„ò©DKþpÕ%_ಮ"È*­Dµ‹´¡ ¢ÒÔ tåß_°O3 p÷¡ómìçU¶öŒê꟒ï=×q†c•¦—Vyxû@Èßç§Áôv¦±ùŸçÔ¼I›ƒø‹ÝæÿóQÞÔk¼ÏnpÒêš9ªl×=eßT3¿ÖP#½Ã˜—m‚yÂRùFãqìbr¿dÌ;'Û;Æû÷¨ùO0?kØùô²M0²¿æÏ³Ì_jÌâ•ô'Álý¯Ž?‰hÏÛUšHkLh&ÎðãL×Y_™»´±^/ÛÿóÉ5^·~æä³Òæ Bgé50ož½þG0Ÿ Sk—œ}[|jý¤ï©Ð¨ç=iwwÕÿÌXù§/§ÞãN0•ÿÑ;. î¯EO‹¿31We‘7à “ç_×n€Ôä«þÃÇFƲõ„œ·Ðý/ÖæüC$v÷oÞJ  ý$þï0ùŠ{B<õ\#u‘ÏEõFŸ‰äô3fn¹3¢Qøs° ZÒD‚¯Î$~²ˆF‹=^Ä"ŸGÊ|Á6²9€»@O›ÇéLzÙÙ6GÛdW¥5ÙD¯ž;ˆ¬<»¼è‡¢°¶2§@Ü3R³"ˆÙè½oY0¼T3M"0fŠ!yPIyMˆ—_[4kŒ‚²Î‰ÏÃTcr]!DbE$@fÈ¡'ä¿Ät«NdÑYfƒq!R™mñ–À§ê>3ÇXMöLJ½DŒìzéïäi ýí&::eF>´Xæ?Ò‹‹c“}âešÈ3"¾4níe0¹áTpWÁ$}qG–¦P3o4öÿª´!eÖµÒJíŠN§8t%Š£Áì tjâ;'LÑÄUÚŽ”E´hª=,Ìe>¹.†š–°úÔ…FüRÀ4“ÒÒöT=ÕMMW}Å® €4PÁZöã¤ìò¹+IàêÕ´ËËl:ö§nT•Ëy¨7«Á¬L÷s‰Ë„˵ðüš'£¦˜:sÿU⮤,Ið Õƒ; º(ˆãHžÄÓg;~¼ž¯øTئ»¦8Á(“$ç Ó«™öòõÜN:¸Å]»¤î¡,r_üÌUzU¡h&N;ä\Ýq³݆hyHÙ“H»Î¸ÍÀ”(Áš-eÆeÊíûõ ̳AäÙEg[òRç,ᮋçPpÜØl ˜>CAºÚPÞM/ -˜î_mcNÛ? fBåÖËMÛ¡'-"øñ(_­þH|MòÖÍyšû†âÈ”|÷Ñá]j¡ÇõPÑÿ)»8ÏÜ0”a˜)§«Í˜Øof™D ÉBpçKB“sò¸Pª™¦Wkb§*&¼ÈÚ—®~ ©P9 ö±DóêÞÞr؆½UIjwÙãŠÓžåS7³Ÿ®™”­ J°HH«1ÇS£>–Ò´4+Y0{8kŽ«·dÅ=71u“>Xk&®nZk(£’%·€»>uD¬lgsë ÙÅBË«x}"î®Eó~ò å­|1*«›Ù×Ìò ÜÄè,ŸåDD¯çN4- 6hª'šÑwGn Å÷‚¦&uЋ£]º(J£ÿà“Øj:ðt|X2¤ÌhÄÚ­7£Vyë4@Ö¿f;’EV^Yf­•‚ï„Ù­í!™­Þ(î7céWðÀ,«§¬´¯!«ï7K¶;AË^9üËóqš‰‹,‡†µA¢ô"ˆÏ:ø+yE?…DÌu9Kþ"óÖÉÛ¼šóɲ‘õ{(¶ ¦˜‡&41ÜÑ•91ÉuìBz|qŠ` VËå…ºR'>’‚žzÝ ì2˜=¯ýƒsm‘®Ý –ʶJºPc?µû„"‚oéé°‘×¥‹ƒò‰OË äôP­±¿.J".1[Žõi“êÖn}Ѝ‚híƒ9W€x[HÄGòO/›K“Æz”àó :éƒ3%ªI«\u}ýÇìêhö¹Òt-/-W¡}eA»fJmpЭzÊ~|¹¢WƒŒ’¼ÉðKaëÛ¥0Åw¬'’±÷$ÏoIîÏÚ%Q§ÛøH²cu Eÿ/Û5Ï點b]ÏH›MûÁ¾7½`ßæ´ 6ÁÈ&˜Ùs ›`dw‚9G¢¶;Àœ ~‰Ý)¸ög¢û»²6‹)`&§#…På@âg«†`ÑCb N”ßj×܈œ‡…¾ŠÌ=Ñ9„jA‡â Àü»n Ši·ÙE÷Q¢¤­x4åt9†7³õ™Âzƒrõ´vƒ4—H.=²•µZ؃̗!µV‹€1í]vƒF;g\sù…J u/ÀŽ¥8ín»£fRH‡ŠnNMê²vݦÝnW@ê%`ÒAQ×/zËo 5ÍÙ5vóCc×g%²”cœÊÏÒwÚÅfVB¬zä-EÑÝXížbj‰³×‘©Ùõw§i]»&¹ȪÍ:™NžÀÛÀ–Åv˜›Î. Dòaça"©Ï%¢÷ØÕ£œkøCQØ×ãYS}‡œY3ßdwŒfw†»fUüvCÄ¡ißbÌìbdÛI[þ&»&Åþ=ž>Á.íš@?á´Ù\3È&˜Ùs ›`dÌl‚9ý 0wb5ƒÚ_“~ÿšL"—í•{G´ñÁdðÛCˆ|¥&Kÿ"¹¨ öÀ$ÍøqGÞmÌU43?ýÿÁþ˜´ñú'Ðþ˜øWvêÆó/TIµñÁüCpŽæŸò/€ù‡l‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@6ÁÈ&˜Ùs ›`dÌl‚9M0² æ@öëÀüCzOÛ¯sÚ±M0² æ@6ÁÈ&˜Ù?‘( ¶»ŸÚOIEND®B`‚leptonica-1.70/prog/flipdetect_reg.c0000644000175000017500000001151412240303132015570 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * flipdetect_reg.c * * Tests 90 degree orientation of text and whether the text is * mirror reversed. Compares the rasterop with dwa implementations * for speed. Shows the typical 'confidence' outputs from the * functions in flipdetect.c. */ #include "allheaders.h" static void printStarredMessage(const char *msg); int main(int argc, char **argv) { char *filein; l_int32 i, orient; l_float32 upconf1, upconf2, leftconf1, leftconf2, conf1, conf2; PIX *pixs, *pixt1, *pixt2; static char mainName[] = "flipdetect_reg"; if (argc != 2) return ERROR_INT(" Syntax: flipdetect_reg filein", mainName, 1); filein = argv[1]; if ((pixt1 = pixRead(filein)) == NULL) return ERROR_INT("pixt1 not made", mainName, 1); pixs = pixConvertTo1(pixt1, 130); pixDestroy(&pixt1); fprintf(stderr, "\nTest orientation detection\n"); startTimer(); pixOrientDetect(pixs, &upconf1, &leftconf1, 0, 0); fprintf(stderr, "Time for rop orient test: %7.3f sec\n", stopTimer()); makeOrientDecision(upconf1, leftconf1, 0, 0, &orient, 1); startTimer(); pixOrientDetectDwa(pixs, &upconf2, &leftconf2, 0, 0); fprintf(stderr, "Time for dwa orient test: %7.3f sec\n", stopTimer()); if (upconf1 == upconf2 && leftconf1 == leftconf2) { printStarredMessage("Orient results identical"); fprintf(stderr, "upconf = %7.3f, leftconf = %7.3f\n", upconf1, leftconf1); } else { printStarredMessage("Orient results differ"); fprintf(stderr, "upconf1 = %7.3f, upconf2 = %7.3f\n", upconf1, upconf2); fprintf(stderr, "leftconf1 = %7.3f, leftconf2 = %7.3f\n", leftconf1, leftconf2); } pixt1 = pixCopy(NULL, pixs); fprintf(stderr, "\nTest orient detection for 4 orientations\n"); for (i = 0; i < 4; i++) { pixOrientDetectDwa(pixt1, &upconf2, &leftconf2, 0, 0); makeOrientDecision(upconf2, leftconf2, 0, 0, &orient, 1); if (i == 3) break; pixt2 = pixRotate90(pixt1, 1); pixDestroy(&pixt1); pixt1 = pixt2; } pixDestroy(&pixt1); fprintf(stderr, "\nTest mirror reverse detection\n"); startTimer(); pixMirrorDetect(pixs, &conf1, 0, 1); fprintf(stderr, "Time for rop mirror flip test: %7.3f sec\n", stopTimer()); startTimer(); pixMirrorDetectDwa(pixs, &conf2, 0, 0); fprintf(stderr, "Time for dwa mirror flip test: %7.3f sec\n", stopTimer()); if (conf1 == conf2) { printStarredMessage("Mirror results identical"); fprintf(stderr, "conf = %7.3f\n", conf1); } else { printStarredMessage("Mirror results differ"); fprintf(stderr, "conf1 = %7.3f, conf2 = %7.3f\n", conf1, conf2); } fprintf(stderr, "\nSafer version of up-down tests\n"); pixUpDownDetectGeneral(pixs, &conf1, 0, 10, 1); pixUpDownDetectGeneralDwa(pixs, &conf2, 0, 10, 1); if (conf1 == conf2) fprintf(stderr, "Confidence results are identical\n"); else fprintf(stderr, "Confidence results differ\n"); pixDestroy(&pixs); return 0; } void printStarredMessage(const char *msg) { fprintf(stderr, "****************************************************\n"); fprintf(stderr, "*********** %s ***********\n", msg); fprintf(stderr, "****************************************************\n"); return; } leptonica-1.70/prog/fpix1_reg.c0000644000175000017500000003442612274450345014523 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fpix1_reg.c * * Regression test for a number of functions in the FPix utility. * FPix allows you to do floating point operations such as * convolution, with conversions to and from Pix. */ #include #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" static void MakePtasAffine(l_int32 i, PTA **pptas, PTA **pptad); static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); static const l_int32 xs1[] = { 300, 300, 1100, 300, 32}; static const l_int32 ys1[] = {1200, 1200, 1200, 1250, 934}; static const l_int32 xs2[] = {1200, 1200, 325, 1300, 487}; static const l_int32 ys2[] = {1100, 1100, 1200, 1250, 934}; static const l_int32 xs3[] = { 200, 200, 1200, 250, 32}; static const l_int32 ys3[] = { 200, 200, 200, 300, 67}; static const l_int32 xs4[] = {1200, 1200, 1100, 1250, 332}; static const l_int32 ys4[] = { 400, 200, 200, 300, 57}; static const l_int32 xd1[] = { 300, 300, 1150, 300, 32}; static const l_int32 yd1[] = {1200, 1400, 1150, 1350, 934}; static const l_int32 xd2[] = {1100, 1400, 320, 1300, 487}; static const l_int32 yd2[] = {1000, 1500, 1300, 1200, 904}; static const l_int32 xd3[] = { 250, 200, 1310, 300, 61}; static const l_int32 yd3[] = { 200, 300, 250, 325, 83}; static const l_int32 xd4[] = {1250, 1200, 1140, 1250, 412}; static const l_int32 yd4[] = { 300, 300, 250, 350, 83}; int main(int argc, char **argv) { l_float32 sum, sumx, sumy, diff; L_DEWARP *dew; L_DEWARPA *dewa; FPIX *fpixs, *fpixs2, *fpixs3, *fpixs4, *fpixg, *fpixd; FPIX *fpix1, *fpix2, *fpixt1, *fpixt2; DPIX *dpix, *dpix2; L_KERNEL *kel, *kelx, *kely; PIX *pixs, *pixs2, *pixs3, *pixt, *pixd, *pixg, *pixb, *pixn; PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; PIXA *pixa; PTA *ptas, *ptad; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Gaussian kernel */ kel = makeGaussianKernel(5, 5, 3.0, 4.0); kernelGetSum(kel, &sum); if (rp->display) fprintf(stderr, "Sum for 2d gaussian kernel = %f\n", sum); pixt = kernelDisplayInPix(kel, 41, 2); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 0 */ pixSaveTiled(pixt, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt); /* Separable gaussian kernel */ makeGaussianKernelSep(5, 5, 3.0, 4.0, &kelx, &kely); kernelGetSum(kelx, &sumx); if (rp->display) fprintf(stderr, "Sum for x gaussian kernel = %f\n", sumx); kernelGetSum(kely, &sumy); if (rp->display) fprintf(stderr, "Sum for y gaussian kernel = %f\n", sumy); if (rp->display) fprintf(stderr, "Sum for x * y gaussian kernel = %f\n", sumx * sumy); pixt = kernelDisplayInPix(kelx, 41, 2); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 1 */ pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = kernelDisplayInPix(kely, 41, 2); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 2 */ pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); /* Use pixRasterop() to generate source image */ pixs = pixRead("test8.jpg"); pixs2 = pixRead("karen8.jpg"); pixRasterop(pixs, 150, 125, 150, 100, PIX_SRC, pixs2, 75, 100); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 3 */ /* Convolution directly with pix */ pixt1 = pixConvolve(pixs, kel, 8, 1); regTestWritePixAndCheck(rp, pixt1, IFF_JFIF_JPEG); /* 4 */ pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixConvolveSep(pixs, kelx, kely, 8, 1); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* 5 */ pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); /* Convolution indirectly with fpix, using fpixRasterop() * to generate the source image. */ fpixs = pixConvertToFPix(pixs, 3); fpixs2 = pixConvertToFPix(pixs2, 3); fpixRasterop(fpixs, 150, 125, 150, 100, fpixs2, 75, 100); fpixt1 = fpixConvolve(fpixs, kel, 1); pixt3 = fpixConvertToPix(fpixt1, 8, L_CLIP_TO_ZERO, 1); regTestWritePixAndCheck(rp, pixt3, IFF_JFIF_JPEG); /* 6 */ pixSaveTiled(pixt3, pixa, 1.0, 1, 20, 8); fpixt2 = fpixConvolveSep(fpixs, kelx, kely, 1); pixt4 = fpixConvertToPix(fpixt2, 8, L_CLIP_TO_ZERO, 1); regTestWritePixAndCheck(rp, pixt4, IFF_JFIF_JPEG); /* 7 */ pixSaveTiled(pixt4, pixa, 1.0, 0, 20, 8); pixDestroy(&pixs2); fpixDestroy(&fpixs2); fpixDestroy(&fpixt1); fpixDestroy(&fpixt2); /* Comparison of results */ pixCompareGray(pixt1, pixt2, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); if (rp->display) fprintf(stderr, "Ave diff of pixConvolve and pixConvolveSep: %f\n", diff); pixCompareGray(pixt3, pixt4, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); if (rp->display) fprintf(stderr, "Ave diff of fpixConvolve and fpixConvolveSep: %f\n", diff); pixCompareGray(pixt1, pixt3, L_COMPARE_ABS_DIFF, 0, NULL, &diff, NULL, NULL); if (rp->display) fprintf(stderr, "Ave diff of pixConvolve and fpixConvolve: %f\n", diff); pixCompareGray(pixt2, pixt4, L_COMPARE_ABS_DIFF, GPLOT_PNG, NULL, &diff, NULL, NULL); if (rp->display) fprintf(stderr, "Ave diff of pixConvolveSep and fpixConvolveSep: %f\n", diff); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* Test arithmetic operations; add in a fraction rotated by 180 */ pixs3 = pixRotate180(NULL, pixs); regTestWritePixAndCheck(rp, pixs3, IFF_JFIF_JPEG); /* 8 */ pixSaveTiled(pixs3, pixa, 1.0, 1, 20, 8); fpixs3 = pixConvertToFPix(pixs3, 3); fpixd = fpixLinearCombination(NULL, fpixs, fpixs3, 20.0, 5.0); fpixAddMultConstant(fpixd, 0.0, 23.174); /* multiply up in magnitude */ pixd = fpixDisplayMaxDynamicRange(fpixd); /* bring back to 8 bpp */ regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 9 */ pixSaveTiled(pixd, pixa, 1.0, 0, 20, 8); pixDestroy(&pixs3); fpixDestroy(&fpixs3); fpixDestroy(&fpixd); pixDestroy(&pixd); pixDestroy(&pixs); fpixDestroy(&fpixs); /* Save the comparison graph; gnuplot should have made it by now! */ #ifndef _WIN32 sleep(2); #else Sleep(2000); #endif /* _WIN32 */ pixt5 = pixRead("/tmp/grayroot0.png"); regTestWritePixAndCheck(rp, pixt5, IFF_PNG); /* 10 */ pixSaveTiled(pixt5, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt5); /* Display results */ pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 11 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Test some more convolutions, with sampled output. First on pix */ pixa = pixaCreate(0); pixs = pixRead("1555-7.jpg"); pixg = pixConvertTo8(pixs, 0); l_setConvolveSampling(5, 5); pixt1 = pixConvolve(pixg, kel, 8, 1); regTestWritePixAndCheck(rp, pixt1, IFF_JFIF_JPEG); /* 12 */ pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 32); pixt2 = pixConvolveSep(pixg, kelx, kely, 8, 1); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* 13 */ pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 32); pixt3 = pixConvolveRGB(pixs, kel); regTestWritePixAndCheck(rp, pixt3, IFF_JFIF_JPEG); /* 14 */ pixSaveTiled(pixt3, pixa, 1.0, 0, 20, 32); pixt4 = pixConvolveRGBSep(pixs, kelx, kely); regTestWritePixAndCheck(rp, pixt4, IFF_JFIF_JPEG); /* 15 */ pixSaveTiled(pixt4, pixa, 1.0, 0, 20, 32); /* Then on fpix */ fpixg = pixConvertToFPix(pixg, 1); fpixt1 = fpixConvolve(fpixg, kel, 1); pixt5 = fpixConvertToPix(fpixt1, 8, L_CLIP_TO_ZERO, 0); regTestWritePixAndCheck(rp, pixt5, IFF_JFIF_JPEG); /* 16 */ pixSaveTiled(pixt5, pixa, 1.0, 1, 20, 32); fpixt2 = fpixConvolveSep(fpixg, kelx, kely, 1); pixt6 = fpixConvertToPix(fpixt2, 8, L_CLIP_TO_ZERO, 0); regTestWritePixAndCheck(rp, pixt6, IFF_JFIF_JPEG); /* 17 */ pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 32); regTestCompareSimilarPix(rp, pixt1, pixt5, 2, 0.00, 0); /* 18 */ regTestCompareSimilarPix(rp, pixt2, pixt6, 2, 0.00, 0); /* 19 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); fpixDestroy(&fpixg); fpixDestroy(&fpixt1); fpixDestroy(&fpixt2); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 20 */ pixDisplayWithTitle(pixd, 600, 100, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); pixaDestroy(&pixa); /* Test extension (continued and slope). * First, build a smooth vertical disparity array; * then extend and show the contours. */ pixs = pixRead("cat-35.jpg"); pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); dewa = dewarpaCreate(1, 30, 1, 15, 0); if ((dew = dewarpCreate(pixb, 35)) == NULL) { rp->success = FALSE; L_ERROR("dew not made; tests 21-28 skipped (failed)\n", "fpix1_reg"); return regTestCleanup(rp); } dewarpaInsertDewarp(dewa, dew); dewarpBuildPageModel(dew, NULL); dewarpPopulateFullRes(dew, NULL, 0, 0); fpixs = dew->fullvdispar; fpixs2 = fpixAddContinuedBorder(fpixs, 200, 200, 100, 300); fpixs3 = fpixAddSlopeBorder(fpixs, 200, 200, 100, 300); dpix = fpixConvertToDPix(fpixs3); fpixs4 = dpixConvertToFPix(dpix); pixt1 = fpixRenderContours(fpixs, 2.0, 0.2); pixt2 = fpixRenderContours(fpixs2, 2.0, 0.2); pixt3 = fpixRenderContours(fpixs3, 2.0, 0.2); pixt4 = fpixRenderContours(fpixs4, 2.0, 0.2); pixt5 = pixRead("karen8.jpg"); dpix2 = pixConvertToDPix(pixt5, 1); pixt6 = dpixConvertToPix(dpix2, 8, L_CLIP_TO_ZERO, 0); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 21 */ pixDisplayWithTitle(pixt1, 0, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 22 */ pixDisplayWithTitle(pixt2, 470, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pixt3, IFF_PNG); /* 23 */ pixDisplayWithTitle(pixt3, 1035, 100, NULL, rp->display); regTestComparePix(rp, pixt3, pixt4); /* 24 */ regTestComparePix(rp, pixt5, pixt6); /* 25 */ pixDestroy(&pixs); pixDestroy(&pixn); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); fpixDestroy(&fpixs2); fpixDestroy(&fpixs3); fpixDestroy(&fpixs4); dpixDestroy(&dpix); dpixDestroy(&dpix2); /* Test affine and projective transforms on fpix */ fpixWrite("/tmp/fpix1.fp", dew->fullvdispar); fpix1 = fpixRead("/tmp/fpix1.fp"); pixt1 = fpixAutoRenderContours(fpix1, 40); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 26 */ pixDisplayWithTitle(pixt1, 0, 500, NULL, rp->display); pixDestroy(&pixt1); MakePtasAffine(1, &ptas, &ptad); fpix2 = fpixAffinePta(fpix1, ptad, ptas, 200, 0.0); pixt2 = fpixAutoRenderContours(fpix2, 40); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 27 */ pixDisplayWithTitle(pixt2, 400, 500, NULL, rp->display); fpixDestroy(&fpix2); pixDestroy(&pixt2); ptaDestroy(&ptas); ptaDestroy(&ptad); MakePtas(1, &ptas, &ptad); fpix2 = fpixProjectivePta(fpix1, ptad, ptas, 200, 0.0); pixt3 = fpixAutoRenderContours(fpix2, 40); regTestWritePixAndCheck(rp, pixt3, IFF_PNG); /* 28 */ pixDisplayWithTitle(pixt3, 400, 500, NULL, rp->display); fpixDestroy(&fpix2); pixDestroy(&pixt3); ptaDestroy(&ptas); ptaDestroy(&ptad); fpixDestroy(&fpix1); dewarpaDestroy(&dewa); kernelDestroy(&kel); kernelDestroy(&kelx); kernelDestroy(&kely); return regTestCleanup(rp); } static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad) { PTA *ptas, *ptad; ptas = ptaCreate(4); ptaAddPt(ptas, xs1[i], ys1[i]); ptaAddPt(ptas, xs2[i], ys2[i]); ptaAddPt(ptas, xs3[i], ys3[i]); ptaAddPt(ptas, xs4[i], ys4[i]); ptad = ptaCreate(4); ptaAddPt(ptad, xd1[i], yd1[i]); ptaAddPt(ptad, xd2[i], yd2[i]); ptaAddPt(ptad, xd3[i], yd3[i]); ptaAddPt(ptad, xd4[i], yd4[i]); *pptas = ptas; *pptad = ptad; return; } static void MakePtasAffine(l_int32 i, PTA **pptas, PTA **pptad) { PTA *ptas, *ptad; ptas = ptaCreate(3); ptaAddPt(ptas, xs1[i], ys1[i]); ptaAddPt(ptas, xs2[i], ys2[i]); ptaAddPt(ptas, xs3[i], ys3[i]); ptad = ptaCreate(3); ptaAddPt(ptad, xd1[i], yd1[i]); ptaAddPt(ptad, xd2[i], yd2[i]); ptaAddPt(ptad, xd3[i], yd3[i]); *pptas = ptas; *pptad = ptad; return; } leptonica-1.70/prog/printimage.c0000644000175000017500000001036712265771320014773 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * printimage.c * * Syntax: printimage filein [-P [-#] * * If you want the image printed, use the standard lpr flags * for either (or both) the printer and the number of copies. * * If neither a printer nor a number of copies is specified, the * only action is that a new PostScript file, * /tmp/print_image.ps * is generated for the image. * * To get color output, you may need a special lpr flag. In that case, * first generate the PostScript file and then use a printer-dependent * output flag, such as "-o ColorModel=Color" or "-o ColorModel=CMYK": * lpr -P /tmp/print_image.ps * A simple way to get the flag in linux is to bring up the print-driver * interface in acroread, select the color printer, select properties, * select color, and look at the print command line that would be used. * * The PS file generated is level 1. This is large, but will work * on all PS printers. */ #include "allheaders.h" static const l_float32 FILL_FACTOR = 0.95; /* fill factor on 8.5 x 11 page */ int main(int argc, char **argv) { char *filein, *fname, *argp, *argn; char buffer[512]; l_int32 i, w, h, ignore; l_float32 scale; FILE *fp; PIX *pixs, *pixt; static char mainName[] = "printimage"; if (argc < 2 || argc > 4) return ERROR_INT( " Syntax: printimage filein [-P] [-#]", mainName, 1); /* parse args */ filein = argv[1]; argp = argn = NULL; if (argc > 2) { for (i = 2; i < argc; i++) { if (argv[i][1] == 'P') argp = argv[i]; else if (argv[i][1] == '#') argn = argv[i]; } } lept_rm(NULL, "print_image.ps"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w > h) { pixt = pixRotate90(pixs, 1); pixGetDimensions(pixt, &w, &h, NULL); } else { pixt = pixClone(pixs); } scale = L_MIN(FILL_FACTOR * 2550 / w, FILL_FACTOR * 3300 / h); fname = genPathname("/tmp", "print_image.ps"); fp = lept_fopen(fname, "wb+"); pixWriteStreamPS(fp, pixt, NULL, 300, scale); lept_fclose(fp); /* print it out */ if (argp && !argn) { sprintf(buffer, "lpr %s %s &", argp, fname); ignore = system(buffer); } else if (!argp && argn) { sprintf(buffer, "lpr %s %s &", argn, fname); ignore = system(buffer); } else if (argp && argn) { sprintf(buffer, "lpr %s %s %s &", argp, argn, fname); ignore = system(buffer); } lept_free(fname); pixDestroy(&pixs); pixDestroy(&pixt); return 0; } leptonica-1.70/prog/pdf2png-binary0000750000175000017500000000132310244261033015211 0ustar dandan#!/bin/bash # pdf2png-binary # # Rasterizes a PDF file, saving as a set of binary png images # # input: PDF # root name of output files # output: png binary files for each page scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpdffile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpdffile} leptonica-1.70/prog/lyra-5.numa0000644000175000017500000003365311410041151014445 0ustar dandan Numa Version 1 Number of numbers = 721 [0] = 3.000000 [1] = 0.000000 [2] = 0.000000 [3] = 0.000000 [4] = 0.000000 [5] = 0.000000 [6] = 0.000000 [7] = 0.000000 [8] = 0.000000 [9] = 0.000000 [10] = 0.000000 [11] = 0.000000 [12] = 0.000000 [13] = 0.000000 [14] = 0.000000 [15] = 0.000000 [16] = 0.000000 [17] = 0.000000 [18] = 0.000000 [19] = 0.000000 [20] = 0.000000 [21] = 0.000000 [22] = 0.000000 [23] = 0.000000 [24] = 0.000000 [25] = 0.000000 [26] = 0.000000 [27] = 0.000000 [28] = 1.000000 [29] = 0.000000 [30] = 6.000000 [31] = 5.000000 [32] = 0.000000 [33] = 0.000000 [34] = 0.000000 [35] = 0.000000 [36] = 0.000000 [37] = 0.000000 [38] = 0.000000 [39] = 0.000000 [40] = 0.000000 [41] = 0.000000 [42] = 0.000000 [43] = 0.000000 [44] = 0.000000 [45] = 0.000000 [46] = 0.000000 [47] = 0.000000 [48] = 0.000000 [49] = 0.000000 [50] = 0.000000 [51] = 0.000000 [52] = 0.000000 [53] = 0.000000 [54] = 0.000000 [55] = 0.000000 [56] = 0.000000 [57] = 0.000000 [58] = 0.000000 [59] = 0.000000 [60] = 0.000000 [61] = 0.000000 [62] = 0.000000 [63] = 0.000000 [64] = 0.000000 [65] = 0.000000 [66] = 0.000000 [67] = 0.000000 [68] = 0.000000 [69] = 0.000000 [70] = 0.000000 [71] = 0.000000 [72] = 0.000000 [73] = 0.000000 [74] = 0.000000 [75] = 0.000000 [76] = 0.000000 [77] = 0.000000 [78] = 0.000000 [79] = 0.000000 [80] = 0.000000 [81] = 0.000000 [82] = 0.000000 [83] = 0.000000 [84] = 0.000000 [85] = 0.000000 [86] = 0.000000 [87] = 0.000000 [88] = 0.000000 [89] = 0.000000 [90] = 0.000000 [91] = 0.000000 [92] = 0.000000 [93] = 0.000000 [94] = 0.000000 [95] = 0.000000 [96] = 0.000000 [97] = 0.000000 [98] = 0.000000 [99] = 0.000000 [100] = 0.000000 [101] = 0.000000 [102] = 1.000000 [103] = 0.000000 [104] = 0.000000 [105] = 0.000000 [106] = 0.000000 [107] = 0.000000 [108] = 0.000000 [109] = 0.000000 [110] = 0.000000 [111] = 0.000000 [112] = 1.000000 [113] = 0.000000 [114] = 0.000000 [115] = 0.000000 [116] = 0.000000 [117] = 0.000000 [118] = 0.000000 [119] = 0.000000 [120] = 0.000000 [121] = 0.000000 [122] = 0.000000 [123] = 0.000000 [124] = 0.000000 [125] = 0.000000 [126] = 0.000000 [127] = 0.000000 [128] = 0.000000 [129] = 0.000000 [130] = 0.000000 [131] = 0.000000 [132] = 0.000000 [133] = 0.000000 [134] = 0.000000 [135] = 0.000000 [136] = 0.000000 [137] = 0.000000 [138] = 0.000000 [139] = 0.000000 [140] = 0.000000 [141] = 0.000000 [142] = 0.000000 [143] = 0.000000 [144] = 0.000000 [145] = 0.000000 [146] = 0.000000 [147] = 0.000000 [148] = 0.000000 [149] = 0.000000 [150] = 0.000000 [151] = 0.000000 [152] = 0.000000 [153] = 0.000000 [154] = 0.000000 [155] = 0.000000 [156] = 0.000000 [157] = 0.000000 [158] = 0.000000 [159] = 0.000000 [160] = 0.000000 [161] = 0.000000 [162] = 0.000000 [163] = 0.000000 [164] = 0.000000 [165] = 0.000000 [166] = 0.000000 [167] = 7.000000 [168] = 27.000000 [169] = 39.000000 [170] = 75.000000 [171] = 95.000000 [172] = 113.000000 [173] = 109.000000 [174] = 111.000000 [175] = 103.000000 [176] = 103.000000 [177] = 111.000000 [178] = 107.000000 [179] = 83.000000 [180] = 79.000000 [181] = 85.000000 [182] = 93.000000 [183] = 77.000000 [184] = 68.000000 [185] = 76.000000 [186] = 80.000000 [187] = 80.000000 [188] = 89.000000 [189] = 101.000000 [190] = 127.000000 [191] = 135.000000 [192] = 107.000000 [193] = 120.000000 [194] = 112.000000 [195] = 124.000000 [196] = 113.000000 [197] = 107.000000 [198] = 91.000000 [199] = 78.000000 [200] = 74.000000 [201] = 77.000000 [202] = 87.000000 [203] = 85.000000 [204] = 93.000000 [205] = 92.000000 [206] = 98.000000 [207] = 102.000000 [208] = 82.000000 [209] = 103.000000 [210] = 91.000000 [211] = 99.000000 [212] = 103.000000 [213] = 101.000000 [214] = 109.000000 [215] = 89.000000 [216] = 79.000000 [217] = 97.000000 [218] = 99.000000 [219] = 95.000000 [220] = 91.000000 [221] = 97.000000 [222] = 87.000000 [223] = 97.000000 [224] = 85.000000 [225] = 109.000000 [226] = 103.000000 [227] = 107.000000 [228] = 97.000000 [229] = 89.000000 [230] = 87.000000 [231] = 95.000000 [232] = 101.000000 [233] = 97.000000 [234] = 79.000000 [235] = 85.000000 [236] = 109.000000 [237] = 93.000000 [238] = 97.000000 [239] = 87.000000 [240] = 87.000000 [241] = 103.000000 [242] = 97.000000 [243] = 93.000000 [244] = 107.000000 [245] = 111.000000 [246] = 107.000000 [247] = 131.000000 [248] = 115.000000 [249] = 117.000000 [250] = 105.000000 [251] = 81.000000 [252] = 93.000000 [253] = 103.000000 [254] = 89.000000 [255] = 75.000000 [256] = 91.000000 [257] = 99.000000 [258] = 99.000000 [259] = 133.000000 [260] = 127.000000 [261] = 107.000000 [262] = 119.000000 [263] = 101.000000 [264] = 107.000000 [265] = 101.000000 [266] = 89.000000 [267] = 97.000000 [268] = 91.000000 [269] = 97.000000 [270] = 101.000000 [271] = 107.000000 [272] = 101.000000 [273] = 97.000000 [274] = 99.000000 [275] = 97.000000 [276] = 99.000000 [277] = 105.000000 [278] = 103.000000 [279] = 103.000000 [280] = 87.000000 [281] = 89.000000 [282] = 103.000000 [283] = 87.000000 [284] = 97.000000 [285] = 103.000000 [286] = 105.000000 [287] = 107.000000 [288] = 117.000000 [289] = 121.000000 [290] = 91.000000 [291] = 111.000000 [292] = 100.000000 [293] = 102.000000 [294] = 83.000000 [295] = 95.000000 [296] = 85.000000 [297] = 95.000000 [298] = 109.000000 [299] = 115.000000 [300] = 113.000000 [301] = 103.000000 [302] = 119.000000 [303] = 111.000000 [304] = 103.000000 [305] = 107.000000 [306] = 93.000000 [307] = 102.000000 [308] = 104.000000 [309] = 100.000000 [310] = 82.000000 [311] = 85.000000 [312] = 108.000000 [313] = 120.000000 [314] = 99.000000 [315] = 111.000000 [316] = 99.000000 [317] = 103.000000 [318] = 111.000000 [319] = 101.000000 [320] = 113.000000 [321] = 107.000000 [322] = 99.000000 [323] = 105.000000 [324] = 85.000000 [325] = 89.000000 [326] = 95.000000 [327] = 81.000000 [328] = 101.000000 [329] = 105.000000 [330] = 113.000000 [331] = 95.000000 [332] = 93.000000 [333] = 109.000000 [334] = 121.000000 [335] = 109.000000 [336] = 115.000000 [337] = 113.000000 [338] = 114.000000 [339] = 118.000000 [340] = 103.000000 [341] = 114.000000 [342] = 105.000000 [343] = 107.000000 [344] = 103.000000 [345] = 101.000000 [346] = 97.000000 [347] = 91.000000 [348] = 93.000000 [349] = 95.000000 [350] = 105.000000 [351] = 107.000000 [352] = 101.000000 [353] = 119.000000 [354] = 111.000000 [355] = 95.000000 [356] = 113.000000 [357] = 97.000000 [358] = 119.000000 [359] = 99.000000 [360] = 111.000000 [361] = 97.000000 [362] = 77.000000 [363] = 93.000000 [364] = 97.000000 [365] = 91.000000 [366] = 95.000000 [367] = 95.000000 [368] = 103.000000 [369] = 99.000000 [370] = 93.000000 [371] = 99.000000 [372] = 99.000000 [373] = 97.000000 [374] = 95.000000 [375] = 85.000000 [376] = 95.000000 [377] = 105.000000 [378] = 99.000000 [379] = 105.000000 [380] = 93.000000 [381] = 107.000000 [382] = 103.000000 [383] = 95.000000 [384] = 91.000000 [385] = 95.000000 [386] = 109.000000 [387] = 105.000000 [388] = 91.000000 [389] = 103.000000 [390] = 93.000000 [391] = 95.000000 [392] = 95.000000 [393] = 99.000000 [394] = 105.000000 [395] = 107.000000 [396] = 111.000000 [397] = 101.000000 [398] = 101.000000 [399] = 93.000000 [400] = 99.000000 [401] = 103.000000 [402] = 111.000000 [403] = 101.000000 [404] = 97.000000 [405] = 95.000000 [406] = 95.000000 [407] = 113.000000 [408] = 101.000000 [409] = 115.000000 [410] = 103.000000 [411] = 85.000000 [412] = 93.000000 [413] = 85.000000 [414] = 93.000000 [415] = 95.000000 [416] = 97.000000 [417] = 91.000000 [418] = 87.000000 [419] = 75.000000 [420] = 93.000000 [421] = 83.000000 [422] = 83.000000 [423] = 85.000000 [424] = 97.000000 [425] = 101.000000 [426] = 107.000000 [427] = 113.000000 [428] = 109.000000 [429] = 99.000000 [430] = 103.000000 [431] = 99.000000 [432] = 107.000000 [433] = 91.000000 [434] = 101.000000 [435] = 91.000000 [436] = 111.000000 [437] = 113.000000 [438] = 81.000000 [439] = 87.000000 [440] = 91.000000 [441] = 93.000000 [442] = 97.000000 [443] = 105.000000 [444] = 105.000000 [445] = 89.000000 [446] = 87.000000 [447] = 93.000000 [448] = 97.000000 [449] = 83.000000 [450] = 85.000000 [451] = 67.000000 [452] = 81.000000 [453] = 103.000000 [454] = 99.000000 [455] = 71.000000 [456] = 77.000000 [457] = 83.000000 [458] = 85.000000 [459] = 79.000000 [460] = 89.000000 [461] = 101.000000 [462] = 83.000000 [463] = 87.000000 [464] = 81.000000 [465] = 81.000000 [466] = 73.000000 [467] = 73.000000 [468] = 79.000000 [469] = 77.000000 [470] = 75.000000 [471] = 95.000000 [472] = 101.000000 [473] = 103.000000 [474] = 97.000000 [475] = 95.000000 [476] = 99.000000 [477] = 93.000000 [478] = 95.000000 [479] = 103.000000 [480] = 101.000000 [481] = 101.000000 [482] = 107.000000 [483] = 81.000000 [484] = 91.000000 [485] = 103.000000 [486] = 91.000000 [487] = 79.000000 [488] = 77.000000 [489] = 97.000000 [490] = 91.000000 [491] = 85.000000 [492] = 91.000000 [493] = 71.000000 [494] = 85.000000 [495] = 71.000000 [496] = 83.000000 [497] = 93.000000 [498] = 85.000000 [499] = 89.000000 [500] = 87.000000 [501] = 109.000000 [502] = 89.000000 [503] = 75.000000 [504] = 89.000000 [505] = 75.000000 [506] = 87.000000 [507] = 93.000000 [508] = 87.000000 [509] = 81.000000 [510] = 91.000000 [511] = 91.000000 [512] = 91.000000 [513] = 89.000000 [514] = 101.000000 [515] = 105.000000 [516] = 111.000000 [517] = 99.000000 [518] = 93.000000 [519] = 105.000000 [520] = 103.000000 [521] = 101.000000 [522] = 87.000000 [523] = 93.000000 [524] = 89.000000 [525] = 91.000000 [526] = 79.000000 [527] = 59.000000 [528] = 13.000000 [529] = 9.000000 [530] = 7.000000 [531] = 5.000000 [532] = 5.000000 [533] = 1.000000 [534] = 0.000000 [535] = 0.000000 [536] = 0.000000 [537] = 0.000000 [538] = 0.000000 [539] = 0.000000 [540] = 0.000000 [541] = 0.000000 [542] = 0.000000 [543] = 0.000000 [544] = 0.000000 [545] = 0.000000 [546] = 0.000000 [547] = 0.000000 [548] = 0.000000 [549] = 0.000000 [550] = 0.000000 [551] = 1.000000 [552] = 0.000000 [553] = 0.000000 [554] = 0.000000 [555] = 0.000000 [556] = 0.000000 [557] = 0.000000 [558] = 0.000000 [559] = 0.000000 [560] = 0.000000 [561] = 0.000000 [562] = 0.000000 [563] = 0.000000 [564] = 0.000000 [565] = 0.000000 [566] = 0.000000 [567] = 0.000000 [568] = 0.000000 [569] = 0.000000 [570] = 0.000000 [571] = 0.000000 [572] = 0.000000 [573] = 0.000000 [574] = 0.000000 [575] = 0.000000 [576] = 0.000000 [577] = 0.000000 [578] = 0.000000 [579] = 0.000000 [580] = 0.000000 [581] = 0.000000 [582] = 0.000000 [583] = 0.000000 [584] = 0.000000 [585] = 0.000000 [586] = 0.000000 [587] = 0.000000 [588] = 0.000000 [589] = 0.000000 [590] = 0.000000 [591] = 0.000000 [592] = 0.000000 [593] = 0.000000 [594] = 0.000000 [595] = 5.000000 [596] = 17.000000 [597] = 7.000000 [598] = 7.000000 [599] = 0.000000 [600] = 0.000000 [601] = 0.000000 [602] = 0.000000 [603] = 0.000000 [604] = 0.000000 [605] = 0.000000 [606] = 0.000000 [607] = 0.000000 [608] = 0.000000 [609] = 0.000000 [610] = 0.000000 [611] = 0.000000 [612] = 0.000000 [613] = 0.000000 [614] = 1.000000 [615] = 5.000000 [616] = 43.000000 [617] = 87.000000 [618] = 87.000000 [619] = 83.000000 [620] = 95.000000 [621] = 93.000000 [622] = 91.000000 [623] = 101.000000 [624] = 87.000000 [625] = 89.000000 [626] = 87.000000 [627] = 91.000000 [628] = 86.000000 [629] = 81.000000 [630] = 71.000000 [631] = 87.000000 [632] = 77.000000 [633] = 91.000000 [634] = 87.000000 [635] = 79.000000 [636] = 79.000000 [637] = 89.000000 [638] = 93.000000 [639] = 87.000000 [640] = 89.000000 [641] = 101.000000 [642] = 95.000000 [643] = 99.000000 [644] = 83.000000 [645] = 83.000000 [646] = 71.000000 [647] = 71.000000 [648] = 81.000000 [649] = 84.000000 [650] = 98.000000 [651] = 101.000000 [652] = 81.000000 [653] = 83.000000 [654] = 90.000000 [655] = 91.000000 [656] = 80.000000 [657] = 85.000000 [658] = 91.000000 [659] = 79.000000 [660] = 99.000000 [661] = 83.000000 [662] = 81.000000 [663] = 102.000000 [664] = 105.000000 [665] = 89.000000 [666] = 86.000000 [667] = 84.000000 [668] = 78.000000 [669] = 86.000000 [670] = 101.000000 [671] = 90.000000 [672] = 82.000000 [673] = 91.000000 [674] = 93.000000 [675] = 93.000000 [676] = 95.000000 [677] = 95.000000 [678] = 97.000000 [679] = 89.000000 [680] = 90.000000 [681] = 90.000000 [682] = 104.000000 [683] = 90.000000 [684] = 83.000000 [685] = 84.000000 [686] = 96.000000 [687] = 86.000000 [688] = 86.000000 [689] = 74.000000 [690] = 76.000000 [691] = 86.000000 [692] = 86.000000 [693] = 87.000000 [694] = 100.000000 [695] = 90.000000 [696] = 84.000000 [697] = 92.000000 [698] = 90.000000 [699] = 83.000000 [700] = 79.000000 [701] = 79.000000 [702] = 71.000000 [703] = 81.000000 [704] = 79.000000 [705] = 89.000000 [706] = 85.000000 [707] = 83.000000 [708] = 95.000000 [709] = 87.000000 [710] = 73.000000 [711] = 74.000000 [712] = 72.000000 [713] = 67.000000 [714] = 74.000000 [715] = 80.000000 [716] = 78.000000 [717] = 80.000000 [718] = 82.000000 [719] = 0.000000 [720] = 0.000000 leptonica-1.70/prog/alphaops_reg.c0000640000175000017500000003452312265645247015304 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * alphaops_reg.c * * Tests various functions that use the alpha layer: * * (1) Remove and add alpha layers. * Removing is done by blending with a uniform image. * Adding is done by setting all white pixels to transparent, * and grading the alpha layer to opaque depending on * the distance from the nearest transparent pixel. * * (2) Tests transparency and cleaning under alpha. * * (3) Blending with a uniform color. Also tests an alternative * way to "blend" to a color: component-wise multiplication by * the color. * * (4) Testing RGB and colormapped images with alpha, including * binary and ascii colormap serialization. */ #include "allheaders.h" static PIX *DoBlendTest(PIX *pix, BOX *box, l_uint32 val, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 which); void CmapEqual(PIXCMAP *cmap1, PIXCMAP *cmap2, l_int32 *pequal); int main(int argc, char **argv) { l_uint8 *data; l_int32 w, h, n1, n2, n, i, minval, maxval; l_int32 ncolors, rval, gval, bval, equal; l_int32 *rmap, *gmap, *bmap; l_uint32 color; l_float32 gamma; BOX *box; FILE *fp; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIX *pixs, *pixb, *pixg, *pixc, *pixd; PIX *pixg2, *pixcs1, *pixcs2, *pixd1, *pixd2; PIXA *pixa, *pixa2, *pixa3; PIXCMAP *cmap, *cmap2; RGBA_QUAD *cta; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ------------------------ (1) ----------------------------*/ /* Blend with a white background */ pix1 = pixRead("books_logo.png"); pixDisplayWithTitle(pix1, 100, 0, NULL, rp->display); pix2 = pixAlphaBlendUniform(pix1, 0xffffff00); pixDisplayWithTitle(pix2, 100, 150, NULL, rp->display); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ /* Generate an alpha layer based on the white background */ pix3 = pixSetAlphaOverWhite(pix2); pixSetSpp(pix3, 3); pixWrite("/tmp/alphaops.2.png", pix3, IFF_PNG); /* without alpha */ regTestCheckFile(rp, "/tmp/alphaops.2.png"); /* 2 */ pixSetSpp(pix3, 4); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3, with alpha */ pixDisplayWithTitle(pix3, 100, 300, NULL, rp->display); /* Render on a light yellow background */ pix4 = pixAlphaBlendUniform(pix3, 0xffffe000); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix4, 100, 450, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* ------------------------ (2) ----------------------------*/ lept_rmdir("alpha"); lept_mkdir("alpha"); /* Make the transparency (alpha) layer. * pixs is the mask. We turn it into a transparency (alpha) * layer by converting to 8 bpp. A small convolution fuzzes * the mask edges so that you don't see the pixels. */ pixs = pixRead("feyn-fract.tif"); pixGetDimensions(pixs, &w, &h, NULL); pixg = pixConvert1To8(NULL, pixs, 0, 255); pixg2 = pixBlockconvGray(pixg, NULL, 1, 1); regTestWritePixAndCheck(rp, pixg2, IFF_JFIF_JPEG); /* 5 */ pixDisplayWithTitle(pixg2, 0, 0, "alpha", rp->display); /* Make the viewable image. * pixc is the image that we see where the alpha layer is * opaque -- i.e., greater than 0. Scale it to the same * size as the mask. To visualize what this will look like * when displayed over a black background, create the black * background image, pixb, and do the blending with pixcs1 * explicitly using the alpha layer pixg2. */ pixc = pixRead("tetons.jpg"); pixcs1 = pixScaleToSize(pixc, w, h); regTestWritePixAndCheck(rp, pixcs1, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pixcs1, 300, 0, "viewable", rp->display); pixb = pixCreateTemplate(pixcs1); /* black */ pixd1 = pixBlendWithGrayMask(pixb, pixcs1, pixg2, 0, 0); regTestWritePixAndCheck(rp, pixd1, IFF_JFIF_JPEG); /* 7 */ pixDisplayWithTitle(pixd1, 600, 0, "alpha-blended 1", rp->display); /* Embed the alpha layer pixg2 into the color image pixc. * Write it out as is. Then clean pixcs1 (to 0) under the fully * transparent part of the alpha layer, and write that result * out as well. */ pixSetRGBComponent(pixcs1, pixg2, L_ALPHA_CHANNEL); pixWrite("/tmp/alpha/pixcs1.png", pixcs1, IFF_PNG); pixcs2 = pixSetUnderTransparency(pixcs1, 0, 0); pixWrite("/tmp/alpha/pixcs2.png", pixcs2, IFF_PNG); /* What will this look like over a black background? * Do the blending explicitly and display. It should * look identical to the blended result pixd1 before cleaning. */ pixd2 = pixBlendWithGrayMask(pixb, pixcs2, pixg2, 0, 0); regTestWritePixAndCheck(rp, pixd2, IFF_JFIF_JPEG); /* 8 */ pixDisplayWithTitle(pixd2, 0, 400, "alpha blended 2", rp->display); /* Read the two images back, ignoring the transparency layer. * The uncleaned image will come back identical to pixcs1. * However, the cleaned image will be black wherever * the alpha layer was fully transparent. It will * look the same when viewed through the alpha layer, * but have much better compression. */ pix1 = pixRead("/tmp/alpha/pixcs1.png"); /* just pixcs1 */ pix2 = pixRead("/tmp/alpha/pixcs2.png"); /* cleaned under transparent */ n1 = nbytesInFile("/tmp/alpha/pixcs1.png"); n2 = nbytesInFile("/tmp/alpha/pixcs2.png"); fprintf(stderr, " Original: %d bytes\n Cleaned: %d bytes\n", n1, n2); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 9 */ regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 10 */ pixDisplayWithTitle(pix1, 300, 400, "without alpha", rp->display); pixDisplayWithTitle(pix2, 600, 400, "cleaned under transparent", rp->display); pixa = pixaCreate(0); pixSaveTiled(pixg2, pixa, 1.0, 1, 20, 32); pixSaveTiled(pixcs1, pixa, 1.0, 1, 20, 0); pixSaveTiled(pix1, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixd1, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixd2, pixa, 1.0, 0, 20, 0); pixSaveTiled(pix2, pixa, 1.0, 1, 20, 0); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 11 */ pixDisplayWithTitle(pixd, 200, 200, "composite", rp->display); pixWrite("/tmp/alpha/alpha.png", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixb); pixDestroy(&pixg); pixDestroy(&pixg2); pixDestroy(&pixc); pixDestroy(&pixcs1); pixDestroy(&pixcs2); pixDestroy(&pixd); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pix1); pixDestroy(&pix2); /* ------------------------ (3) ----------------------------*/ color = 0xffffa000; gamma = 1.0; minval = 0; maxval = 200; box = boxCreate(0, 85, 600, 100); pixa = pixaCreate(6); pix1 = pixRead("blend-green1.jpg"); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixRead("blend-green2.png"); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixRead("blend-green3.png"); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixRead("blend-orange.jpg"); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixRead("blend-yellow.jpg"); pixaAddPix(pixa, pix1, L_INSERT); pix1 = pixRead("blend-red.png"); pixaAddPix(pixa, pix1, L_INSERT); n = pixaGetCount(pixa); pixa2 = pixaCreate(n); pixa3 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = DoBlendTest(pix1, box, color, gamma, minval, maxval, 1); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 12, 14, ... 22 */ pixDisplayWithTitle(pix2, 150 * i, 0, NULL, rp->display); pixaAddPix(pixa2, pix2, L_INSERT); pix2 = DoBlendTest(pix1, box, color, gamma, minval, maxval, 2); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 13, 15, ... 23 */ pixDisplayWithTitle(pix2, 150 * i, 200, NULL, rp->display); pixaAddPix(pixa3, pix2, L_INSERT); pixDestroy(&pix1); } if (rp->display) { pixaConvertToPdf(pixa2, 0, 0.75, L_FLATE_ENCODE, 0, "blend 1 test", "/tmp/alpha/blending1.pdf"); pixaConvertToPdf(pixa3, 0, 0.75, L_FLATE_ENCODE, 0, "blend 2 test", "/tmp/alpha/blending2.pdf"); } pixaDestroy(&pixa); pixaDestroy(&pixa2); pixaDestroy(&pixa3); boxDestroy(&box); /* ------------------------ (4) ----------------------------*/ /* Use one image as the alpha component for a second image */ pix1 = pixRead("test24.jpg"); pix2 = pixRead("marge.jpg"); pix3 = pixScale(pix2, 1.9, 2.2); pix4 = pixConvertTo8(pix3, 0); pixSetRGBComponent(pix1, pix4, L_ALPHA_CHANNEL); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 24 */ pixDisplayWithTitle(pix1, 600, 0, NULL, rp->display); /* Set the alpha value in a colormap to bval */ pix5 = pixOctreeColorQuant(pix1, 128, 0); cmap = pixGetColormap(pix5); pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); cta = (RGBA_QUAD *)cmap->array; cta[i].alpha = bval; } /* Test binary serialization/deserialization of colormap with alpha */ pixcmapSerializeToMemory(cmap, 4, &ncolors, &data); cmap2 = pixcmapDeserializeFromMemory(data, 4, ncolors); CmapEqual(cmap, cmap2, &equal); regTestCompareValues(rp, TRUE, equal, 0.0); /* 25 */ pixcmapDestroy(&cmap2); lept_free(data); /* Test ascii serialization/deserialization of colormap with alpha */ fp = fopenWriteStream("/tmp/alpha/cmap.4", "w"); pixcmapWriteStream(fp, cmap); fclose(fp); fp = fopenReadStream("/tmp/alpha/cmap.4"); cmap2 = pixcmapReadStream(fp); fclose(fp); CmapEqual(cmap, cmap2, &equal); regTestCompareValues(rp, TRUE, equal, 0.0); /* 26 */ pixcmapDestroy(&cmap2); /* Test r/w for cmapped pix with non-opaque alpha */ pixDisplayWithTitle(pix5, 900, 0, NULL, rp->display); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 27 */ pixWrite("/tmp/alpha/fourcomp.png", pix5, IFF_PNG); pix6 = pixRead("/tmp/alpha/fourcomp.png"); regTestComparePix(rp, pix5, pix6); /* 28 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); lept_free(rmap); lept_free(gmap); lept_free(bmap); return regTestCleanup(rp); } /* Use which == 1 to test alpha blending; which == 2 to test "blending" * by pixel multiplication. This generates a composite of 5 images: * the original, blending over a box at the bottom (2 ways), and * multiplying over a box at the bottom (2 ways). */ static PIX * DoBlendTest(PIX *pix, BOX *box, l_uint32 color, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 which) { PIX *pix1, *pix2, *pix3, *pixd; PIXA *pixa; pixa = pixaCreate(5); pix1 = pixRemoveColormap(pix, REMOVE_CMAP_TO_FULL_COLOR); pix2 = pixCopy(NULL, pix1); pixaAddPix(pixa, pix2, L_COPY); if (which == 1) pix3 = pixBlendBackgroundToColor(NULL, pix2, box, color, gamma, minval, maxval); else pix3 = pixMultiplyByColor(NULL, pix2, box, color); pixaAddPix(pixa, pix3, L_INSERT); if (which == 1) pixBlendBackgroundToColor(pix2, pix2, box, color, gamma, minval, maxval); else pixMultiplyByColor(pix2, pix2, box, color); pixaAddPix(pixa, pix2, L_INSERT); pix2 = pixCopy(NULL, pix1); if (which == 1) pix3 = pixBlendBackgroundToColor(NULL, pix2, NULL, color, gamma, minval, maxval); else pix3 = pixMultiplyByColor(NULL, pix2, NULL, color); pixaAddPix(pixa, pix3, L_INSERT); if (which == 1) pixBlendBackgroundToColor(pix2, pix2, NULL, color, gamma, minval, maxval); else pixMultiplyByColor(pix2, pix2, NULL, color); pixaAddPix(pixa, pix2, L_INSERT); pixd = pixaDisplayTiledInRows(pixa, 32, 800, 1.0, 0, 30, 2); pixDestroy(&pix1); pixaDestroy(&pixa); return pixd; } void CmapEqual(PIXCMAP *cmap1, PIXCMAP *cmap2, l_int32 *pequal) { l_int32 n1, n2, i, rval1, gval1, bval1, aval1, rval2, gval2, bval2, aval2; *pequal = FALSE; n1 = pixcmapGetCount(cmap1); n2 = pixcmapGetCount(cmap1); if (n1 != n2) return; for (i = 0; i < n1; i++) { pixcmapGetRGBA(cmap1, i, &rval1, &gval1, &bval1, &aval1); pixcmapGetRGBA(cmap2, i, &rval2, &gval2, &bval2, &aval2); if ((rval1 != rval2) || (gval1 != gval2) || (bval1 != bval2) || (aval1 != aval2)) return; } *pequal = TRUE; return; } leptonica-1.70/prog/binmorph5_reg.c0000644000175000017500000002760112240303443015361 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binmorph5_reg.c * * Regression test for expanded dwa morph operations. * We compare: * (1) dwa composite vs. morph composite * (2) dwa composite vs. morph non-composite */ #include "allheaders.h" l_int32 DoComparisonDwa1(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize); l_int32 DoComparisonDwa2(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 size); l_int32 PixCompareDwa(l_int32 size, const char *type, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6); #define TIMING 0 #define FASTER_TEST 1 #define SLOWER_TEST 1 /* This fails on the symmetric case, but the differences are * relatively small. Most of the problems seems to be in the * non-dwa code, because we are doing sequential erosions * without an extra border, and things aren't being properly * initialized. To avoid these errors, add a border in advance * for symmetric b.c. Note that asymmetric b.c. are recommended * for document image operations, and this test passes for * asymmetric b.c. */ #define TEST_SYMMETRIC 0 /* set to 1 for symmetric b.c.; otherwise, it tests asymmetric b.c. */ int main(int argc, char **argv) { l_int32 i, n, rsize, fact1, fact2, extra; l_int32 size, lastsize; l_int32 dwasize[256]; l_int32 ropsize[256]; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; pixs = pixRead("feyn.tif"); #if TEST_SYMMETRIC /* This works properly if there's an added border */ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); #if 1 pixt1 = pixAddBorder(pixs, 64, 0); pixTransferAllData(pixs, &pixt1, 0, 0); #endif #endif /* TEST_SYMMETRIC */ pixt1 = pixCreateTemplateNoInit(pixs); pixt2 = pixCreateTemplateNoInit(pixs); pixt3 = pixCreateTemplateNoInit(pixs); pixt4 = pixCreateTemplateNoInit(pixs); pixt5 = pixCreateTemplateNoInit(pixs); pixt6 = pixCreateTemplateNoInit(pixs); /* ---------------------------------------------------------------- * * Faster test; testing fewer sizes * * ---------------------------------------------------------------- */ #if FASTER_TEST /* Compute the actual sizes used for each input size 'i' */ for (i = 0; i < 256; i++) { dwasize[i] = 0; ropsize[i] = 0; } for (i = 65; i < 256; i++) { selectComposableSizes(i, &fact1, &fact2); rsize = fact1 * fact2; ropsize[i] = rsize; getExtendedCompositeParameters(i, &n, &extra, &dwasize[i]); } /* Use only values where the resulting sizes are equal */ for (i = 65; i < 240; i++) { n = 1 + (l_int32)((i - 63) / 62); extra = i - 63 - (n - 1) * 62 + 1; if (extra == 2) continue; /* don't use this one (e.g., i == 126) */ if (ropsize[i] == dwasize[i]) DoComparisonDwa1(pixs, pixt1, pixt2, pixt3, pixt4, pixt5, pixt6, i); } #endif /* FASTER_TEST */ /* ---------------------------------------------------------------- * * Slower test; testing maximum number of sizes * * ---------------------------------------------------------------- */ #if SLOWER_TEST lastsize = 0; for (i = 65; i < 199; i++) { getExtendedCompositeParameters(i, &n, &extra, &size); if (size == lastsize) continue; if (size == 126 || size == 188) continue; /* deliberately off by one */ lastsize = size; DoComparisonDwa2(pixs, pixt1, pixt2, pixt3, pixt4, pixt5, pixt6, size); } #endif /* SLOWER_TEST */ pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); return 0; } l_int32 DoComparisonDwa1(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; fprintf(stderr, "..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickExtendDwa(pixt1, pixs, size, 1); pixDilateCompBrickExtendDwa(pixt3, pixs, 1, size); pixDilateCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateCompBrick(pixt2, pixs, size, 1); pixDilateCompBrick(pixt4, pixs, 1, size); pixDilateCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "dilate", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixErodeCompBrickExtendDwa(pixt1, pixs, size, 1); pixErodeCompBrickExtendDwa(pixt3, pixs, 1, size); pixErodeCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeCompBrick(pixt2, pixs, size, 1); pixErodeCompBrick(pixt4, pixs, 1, size); pixErodeCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "erode", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixOpenCompBrickExtendDwa(pixt1, pixs, size, 1); pixOpenCompBrickExtendDwa(pixt3, pixs, 1, size); pixOpenCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenCompBrick(pixt2, pixs, size, 1); pixOpenCompBrick(pixt4, pixs, 1, size); pixOpenCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "open", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixCloseCompBrickExtendDwa(pixt1, pixs, size, 1); pixCloseCompBrickExtendDwa(pixt3, pixs, 1, size); pixCloseCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeCompBrick(pixt2, pixs, size, 1); pixCloseSafeCompBrick(pixt4, pixs, 1, size); pixCloseSafeCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "close", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); #if 0 pixWrite("/tmp/junkpixt3.png", pixt3, IFF_PNG); pixWrite("/tmp/junkpixt4.png", pixt4, IFF_PNG); pixXor(pixt3, pixt3, pixt4); pixWrite("/tmp/junkxor.png", pixt3, IFF_PNG); #endif return 0; } l_int32 DoComparisonDwa2(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 size) /* exactly decomposable */ { fprintf(stderr, "..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickExtendDwa(pixt1, pixs, size, 1); pixDilateCompBrickExtendDwa(pixt3, pixs, 1, size); pixDilateCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrick(pixt2, pixs, size, 1); pixDilateBrick(pixt4, pixs, 1, size); pixDilateBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "dilate", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixErodeCompBrickExtendDwa(pixt1, pixs, size, 1); pixErodeCompBrickExtendDwa(pixt3, pixs, 1, size); pixErodeCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrick(pixt2, pixs, size, 1); pixErodeBrick(pixt4, pixs, 1, size); pixErodeBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "erode", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixOpenCompBrickExtendDwa(pixt1, pixs, size, 1); pixOpenCompBrickExtendDwa(pixt3, pixs, 1, size); pixOpenCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrick(pixt2, pixs, size, 1); pixOpenBrick(pixt4, pixs, 1, size); pixOpenBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "open", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixCloseCompBrickExtendDwa(pixt1, pixs, size, 1); pixCloseCompBrickExtendDwa(pixt3, pixs, 1, size); pixCloseCompBrickExtendDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeBrick(pixt2, pixs, size, 1); pixCloseSafeBrick(pixt4, pixs, 1, size); pixCloseSafeBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "close", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); #if 0 pixWrite("/tmp/junkpixt3.png", pixt3, IFF_PNG); pixWrite("/tmp/junkpixt4.png", pixt4, IFF_PNG); pixXor(pixt3, pixt3, pixt4); pixWrite("/tmp/junkxor.png", pixt3, IFF_PNG); #endif return 0; } l_int32 PixCompareDwa(l_int32 size, const char *type, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6) { l_int32 same, fail; fail = FALSE; pixEqual(pixt1, pixt2, &same); if (!same) { fail = TRUE; fprintf(stderr, "%s (%d, 1) not same\n", type, size); } pixEqual(pixt3, pixt4, &same); if (!same) { fail = TRUE; fprintf(stderr, "%s (1, %d) not same\n", type, size); } pixEqual(pixt5, pixt6, &same); if (!same) { fail = TRUE; fprintf(stderr, "%s (%d, %d) not same\n", type, size, size); } return fail; } leptonica-1.70/prog/byteatest.c0000644000175000017500000001113212242267033014623 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * byteatest.c * */ #include #include "allheaders.h" int main(int argc, char **argv) { char *str; l_uint8 *data1, *data2; l_int32 i, n, start, end, same1, same2; size_t size1, size2; FILE *fp; L_DNA *da; SARRAY *sa; L_BYTEA *lba1, *lba2, *lba3, *lba4, *lba5; static char mainName[] = "byteatest"; if (argc != 1) return ERROR_INT("syntax: byteatest", mainName, 1); /* Test basic init, join and split */ lba1 = l_byteaInitFromFile("feyn.tif"); lba2 = l_byteaInitFromFile("test24.jpg"); size1 = l_byteaGetSize(lba1); size2 = l_byteaGetSize(lba2); l_byteaJoin(lba1, &lba2); lba3 = l_byteaInitFromMem(lba1->data, size1); lba4 = l_byteaInitFromMem(lba1->data + size1, size2); /* Split by hand */ l_binaryWrite("junk1", "w", lba3->data, lba3->size); l_binaryWrite("junk2", "w", lba4->data, lba4->size); filesAreIdentical("feyn.tif", "junk1", &same1); filesAreIdentical("test24.jpg", "junk2", &same2); if (same1 && same2) fprintf(stderr, "OK for join file\n"); else fprintf(stderr, "Error: files are different!\n"); /* Split by function */ l_byteaSplit(lba1, size1, &lba5); l_binaryWrite("junk3", "w", lba1->data, lba1->size); l_binaryWrite("junk4", "w", lba5->data, lba5->size); filesAreIdentical("feyn.tif", "junk3", &same1); filesAreIdentical("test24.jpg", "junk4", &same2); if (same1 && same2) fprintf(stderr, "OK for split file\n"); else fprintf(stderr, "Error: files are different!\n"); l_byteaDestroy(&lba1); l_byteaDestroy(&lba2); l_byteaDestroy(&lba3); l_byteaDestroy(&lba4); l_byteaDestroy(&lba5); /* Test appending */ data1 = l_binaryRead("whatever10.c", &size1); sa = sarrayCreateLinesFromString((char *)data1, 1); lba1 = l_byteaCreate(0); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); l_byteaAppendString(lba1, str); l_byteaAppendString(lba1, (char *)"\n"); } data2 = l_byteaGetData(lba1, &size2); l_binaryWrite("junk1.txt", "w", data2, size2); filesAreIdentical("whatever10.c", "junk1.txt", &same1); if (same1) fprintf(stderr, "OK for appended file\n"); else fprintf(stderr, "Error: appended file is different!\n"); lept_free(data1); sarrayDestroy(&sa); l_byteaDestroy(&lba1); /* Test search */ convertToPdf("test24.jpg", L_JPEG_ENCODE, 0, "junk3.pdf", 0, 0, 100, NULL, NULL, 0); lba1 = l_byteaInitFromFile("junk3.pdf"); l_byteaFindEachSequence(lba1, (l_uint8 *)" 0 obj\n", 7, &da); l_dnaWriteStream(stderr, da); l_byteaDestroy(&lba1); l_dnaDestroy(&da); /* Test write to file */ lba1 = l_byteaInitFromFile("feyn.tif"); fp = lept_fopen("junk5", "wb"); size1 = l_byteaGetSize(lba1); for (start = 0; start < size1; start += 1000) { end = L_MIN(start + 1000 - 1, size1 - 1); l_byteaWriteStream(fp, lba1, start, end); } lept_fclose(fp); l_byteaDestroy(&lba1); return 0; } leptonica-1.70/prog/conncomp_reg.c0000644000175000017500000001137712240303243015273 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * conncomp_reg.c * * Regression test for connected components (both 4 and 8 * connected), including regeneration of the original * image from the components. This is also an implicit * test of rasterop. */ #include #include "allheaders.h" #define NTIMES 10 int main(int argc, char **argv) { l_uint8 *array1, *array2; l_int32 n, np, same, diff; size_t nbytes1, nbytes2; FILE *fp; BOXA *boxa, *boxa2; PIX *pixs, *pixd; PIXA *pixa; PIXCMAP *cmap; static char mainName[] = "conncomp_reg"; if (argc != 1) return ERROR_INT(" Syntax: conncomp_reg", mainName, 1); pixs = pixRead("feyn.tif"); /* Test pixConnComp() with output to both boxa and pixa */ /* First, test with 4-cc */ boxa = pixConnComp(pixs, &pixa, 4); n = boxaGetCount(boxa); fprintf(stderr, "Number of 4 c.c. b.b: %d\n", n); np = pixaGetCount(pixa); fprintf(stderr, "Number of 4 c.c. pix: %d\n", np); pixd = pixaDisplay(pixa, pixGetWidth(pixs), pixGetHeight(pixs)); pixWrite("/tmp/junkout1.png", pixd, IFF_PNG); pixEqual(pixs, pixd, &same); if (same == 1) fprintf(stderr, "Source and reconstructed pix are the same.\n"); else fprintf(stderr, "Error: source and reconstructed pix differ!\n"); pixaDestroy(&pixa); boxaDestroy(&boxa); pixDestroy(&pixd); /* Test with 8-cc */ boxa = pixConnComp(pixs, &pixa, 8); n = boxaGetCount(boxa); fprintf(stderr, "Number of 8 c.c. b.b: %d\n", n); np = pixaGetCount(pixa); fprintf(stderr, "Number of 8 c.c. pix: %d\n", np); pixd = pixaDisplay(pixa, pixGetWidth(pixs), pixGetHeight(pixs)); pixWrite("/tmp/junkout2.png", pixd, IFF_PNG); pixEqual(pixs, pixd, &same); if (same == 1) fprintf(stderr, "Source and reconstructed pix are the same.\n"); else fprintf(stderr, "Error: source and reconstructed pix differ!\n"); pixaDestroy(&pixa); boxaDestroy(&boxa); pixDestroy(&pixd); /* Test i/o */ boxa = pixConnComp(pixs, NULL, 4); fp = lept_fopen("/tmp/junk1.ba", "wb+"); boxaWriteStream(fp, boxa); lept_fclose(fp); fp = lept_fopen("/tmp/junk1.ba", "rb"); boxa2 = boxaReadStream(fp); lept_fclose(fp); fp = lept_fopen("/tmp/junk2.ba", "wb+"); boxaWriteStream(fp, boxa2); lept_fclose(fp); array1 = l_binaryRead("/tmp/junk1.ba", &nbytes1); array2 = l_binaryRead("/tmp/junk2.ba", &nbytes2); diff = strcmp((char *)array1, (char *)array2); if (nbytes1 != nbytes2 || diff) fprintf(stderr, "I/O error for boxes.\n"); else fprintf(stderr, "I/O valid for boxes.\n"); lept_free(array1); lept_free(array2); boxaDestroy(&boxa); boxaDestroy(&boxa2); /* Just for fun, display each component as a random color * in cmapped 8 bpp. Background is color 0; it is set to white. */ boxa = pixConnComp(pixs, &pixa, 4); pixd = pixaDisplayRandomCmap(pixa, pixGetWidth(pixs), pixGetHeight(pixs)); cmap = pixGetColormap(pixd); pixcmapResetColor(cmap, 0, 255, 255, 255); /* reset background to white */ pixDisplay(pixd, 100, 100); boxaDestroy(&boxa); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/lucasta-frag.jpg0000444000175000017500000015307110360146125015532 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ _ÌÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷ª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®'âo'ðW‡c½µXÚâYDhgëÅox[Yþßð垣Æé£±ëŠØ¢Š(¢Š+ƒø“ãû[Ùµ¾ž.Þä°Ébãÿ×üëªÐ57Ö4+=BH -&xƒÂdÜxv/±4¦8fi¹“ß½'K¼mCJµ¼tØÓD®WÓ"­ÑHHPI8’j¢j]ÙK>œñÜ”ÈP­ÁaÛ5ç:ÄÝ^ÿÇÑøfÿHKY2wá³Ú½JŠ(¢Šæ|E?‹ò4Э¬ÞÜ®^I›}1\ ?|Uuâãá˜4[C¨!!·È@ã¿Ò½7Ã﮽¬¯Gkå¾E¶bWoã޵袊(¢ŠÊ¹mV-^Yl¤!]p2ž§Öµk̾ x÷Ä~ ˜ÎºTiÍ Ž9‹òIö¯AÒnÞÿH´»‘B¼Ñ+: йEQHHPI8’kÌ5ïŠVÐꆕio6•a'•%ÄŽA‘³Œ(®ÏÁþ$Å~·ÕcŒÇæd2ÄVírºý÷‹àÔ¼½LµžÓhýä²í9ïÅpZwÄÿj^+Å£Z-ìD‰7¹ÀǸ®Ÿ[ñWŠ|-cý£ªiV³Ú'úÃm!%}ù®£Ã^#±ñN¥`û£~wSÜVÅW+ã}cÄšoôk.¢…çWl0Ò«ü<ñ}ß‹ü.ú¥ÕºE"»(XóƒŠÈðoÄ{ÿxÖûD¸Ó|˜`VPcߊôš(¢Š(¢Š*¶¡¨ZévR^^̰ÛÇÎÇRÛÏÔ <.)åaЊ’Š(¢Š(¢Š(¢Š(¢Š(¢¼Wâþ™7‹ulíd|iV¦fUîç·åV>kq¡\i6Ù¾EÏA^¿,©/,ŒK1=€®%¾(ih’Ü5ð²N—~Q1·¾}+£ðçˆ-Úý Ïda·?Lõ®kâß4ýÃzkÌßÚqì‰rþ#íGÃè³èzf‡øŸRòw:'9>ßÒ½Šóà†÷Dã‰c#?ï ¯àÿèºG…4›+‰$b–ëæID¤| 3^k}m{eä«@ë¹_´¸š!4³y ¶Y"Œ²!÷`1]&›©ÚjÖQÝÙL²Ã ʰ«tV6½â+Ñ+j!]øH”eÜûTô/iíÑ´‰¤‚è ù¡GÇÐÔ!ø‡¢xbôÚêo,MŒ†òÎÓô8¨'ø£á‹kx'žâá#¸Mñ1·|8Î8ãš›Wø‹¢hC=âÝ$(eÀv€zdÔMñ3Aþ˶ÔcS[ÎH %¶ã©8è>µÑèú͆»§¥öŸ:ÍðzÖ6¡ñÃÚv ÖRÝI$ÉÄžDM"Çþñ?ÞÓõ+MRÍ.¬çI¡nŒ§"±5hÚ>¥ý#Í=Ðx­¢i }£Š¹mâ&ïH›SŠèxFdÈå}ˆõ¯/ðtkø’þêå¡{ùãŽÚ#“¸މâ½_Y×´íÝfÔ. äˆÔýç>€w¬ÍÆúNµvmÉouŒˆgBŒÃÔZ:׈4ýÝf¾›is¶8Ônw>€MyÆm^ ÃVFæáº’T*Ã#¸¯cÑWn‰d ŒTqô«ôWã¯éžÓî"›Ì–øÄLpªŽ¥±€+˜øAâ½5ôKMMìÌîÃaÀ9'¯J͹–?Úk©™c†+]ò;pkÒtÿè–¢¶^pÙÚ²)]ßLõ­}KS´Ò,%½¾™a·‰w35sV¿t;‰!}¦Ú9Ž"’xYUþ„Žk¯VWPÊÁ”ô"–Š+ô{e“öƒ½¸FÈ]Û‡\ öù$H£i$`¨£$žÕÉËñDG-ÝMn§ s$Æ~kvç\Ó­tfÕ¤¹Sb9•~aƒßŠÍƒÇ~ºÒ®5;{ï6ÖÝ‚Èꇂ{bÇ:ˆ^é4Û³3Z®ùFÒ0?Ȭ»/Šž½ÕßNóe†DVfiP¨}jíŸÄ-÷í¾\Òƒf7L­ ®:ÒY|GðÅý¤÷0_å 8(Aôõ­]ÄÚOˆcfÓnÖR‡ ~¢™®xŸMðÿ–·’;M'ú¸bBî߀ªzŽtmzùìmä’+µäÁ2í|zâ¹' ¶Áûbqõ®ÞËTµÒü#e{y жLŸ^;U~!è2Áæ<“BwªˆåŒ£6ã€z×T¬„dRÔ—–Ö¯sw2C ³¹ÀÎ[üBÐne@’Ì!‘¶¤ïTcìM'¼U¥èZ,ÑÝ^§¸…„äÿNk̾ßøbç­áínE’êöèþà©ËÓšöÝ3L³Ò,c²±a·î¢Š·Ex?„@‹ãÞ²f8r’xƒŠô?‰^"ÓôÏj1És žhY#‹!‹íX´ë­ À÷:™ò#šS2‰8 ¸ë“[÷´+r$hîͦv›¯%¼¯Îº+zÊßC:º—š×nðb]Ä¥rúoÅj&éUæ‰íñ¹$L3q€:šµuâ}/Äþ ÖgÓgÞ±ÛÈ®`©ÁàŠçþ ÜEÃÉ'rÞ\r9`pz é¼9âï kZ½Å–‘Åâ©iA‡aüjæ³âí7E¸û4¾l÷[wy0!f›áÏé>&yb²‘„ñ<.0Ëõ™«|Qðæ‹©¾Ÿ}4Ñΰ)ˆÏ×óñ7ÃBõ-ÍÓ…sµf(|²Þºάk?4-èAu4À,ÑÆYTR:VþŸ¨Úê–QÞYʲÁ ʰ5Íê¿,l59tû[+½Fæõ«j›‚}M^Ó|a§jºÆ©j%u·È–¿¼B:‚=k#Mø­áRiâ‚y•ár¼D1>€zÖ¾‡ãMÄRÚYÎâæ/¿ ¨Q‡àkÍ>3øæÒ.<=kþkJ«,…ÐÎõàWYðóÆ–Z¼ú­¥Ò½²î–Eœ ï袊(¢Š(¢Š(¢Š(¢Š¯}wŒ×Rœ$HXþ¼»Â¶¾*ÔíµJ(4óo©»033oÛÐLb¸Ÿ´žø´ú=àÚn_a*p¼ò1_AkEs£^Á<ž\O +¾q޵óúkÞ'ðn†úUöý¡£:£’"Ncç#=zÂ]OL½ð\0é¬áaf Ž0ÈIÎ w•Ê$–Ò,Ь¥NCt¯ø=£ÚOã?]É äF1Àç°üi,t»Yh ëp¿¹E2›°?ƬüI…,¾+xbêØˆ¥fUmœdŠÙøñ«í]ÿjO˜ŽƒœÕï ¨¾ ȶ ‹f»Bð@þ,~¬}<[Åð ¥Ø ý™ŠõÉ}zæªü0ð=®±áÝ'[ÔÖU¼¶vhpg‚}zUmVÓíß!„º2Ü õš?ýUŸ éVüŠ"ˆË%†÷8É'nkËôO_Y|ÕÒ)Ye†"=AôÉ®ÇÀ—QÁðÖÞÑtK«‰."mòˆƒ+“ß'¯Z> ØëúMæ£e©ÙÏok¸¼"Osõ¯`¢¾x¶×.5?Ž×r^ÙOx,Ùã‚ÀŽ•±ã(µÝOÆz·¦x~îØÛ>ÉËm—#àò:ý3^ã_ Yø³Â——{Ì{ÖRÊÀuÍyשíüGåXkFóè‡Ë·‚AËŽ}¸ü+¼ø£oü4Ö¸ ²ßràÄÆøG¦@Ÿ `gPâtvmËœu®á牯tŸxÂÖ.>ÈâÞxBIÒü1Ôã²ðJ™t;Û™®ä–háÞ=ýý*/ÞxƒÂš/Š®.¬'¶³ŒIqf’¯Brp+Gàõ«ê Ôu# –þúW&wù¾o­MðçÁÚÖ¿.¿*K%ÑfîÝœQø;6›¯^^A •ÔX†}ÁýSÕõ“©üq‚ÞâÑïm´øKC @œ}ï~¿ç"´ þ±þÔV[µ]®äŒWIQ\ÜGik-ÌÇÄ…ØúÍr~ø“¡ø»TŸOÓŒžt@±Ü8 wÁxnêOø_zµ²²´D8õÂþuÔühÖî´ȶŽÉ%Ü¢òžOè1øÖ§…l-Ã;Ke $MfKdu;y®'áü—¾×ôû—ojîw;F:Uï¶ÐËàëá$JCÝ89Ȭÿ…1À¿¼X°ªˆÄ›BÁ5[YÒmo~?Ù[• ¥|Ö ÐáOô¯FÓ¼ §i^"Õ5Ðí$רU£eT}? óÏ„:]µÇ|IxÑ)ó‘‘Â’O U½ůí©Á )¶Çz/œiÞ6†+ŠÚV¦5†… öмŒ3ÐCý+;TÛ㮋pm^ÍžLnÃ-Á98ö·ñÊxn|c,$C|]9 _ñŵäÿ4³§²µÜ-‘ÄÜy¥FqúW©xý5´µ¶ñ.‹.qopꘃ^ù§ÝE{§ÛÜÀûâ‘+zг^7ñÏR¹£i»¥½Ì Ê¹ ×Uã»-þÞÇ$~M (@ŠÄð]à×þÉu¨Ä’Ïk ‘,Ž2FÑÔgÁm¯ü15åŬMuÓbFPHúõŠ(¯›ôkXuoWö· í *œ9ÿÖ¯i¶ø{á‹iÄÿÙ‘Ë 9rdÁõ©Óîî/Qbº¾˜Ìð â<ô•vÕKVšæ *æK;sqp숯 øw¤øÃº–§=χ¤e¾¾7—¾4izOŒâø›/‰fðó‹yÆÖÎ\ëœÒøÃEñn¿ã+Y·ÐEbápdŒòy5·ñ^Ç\ñ…“e¥I)ÊLóîU‡QMñf¯ªh¿´Ùf²–8ÖEŽñüÂ?þ¹®ˆ>´µ6K§êbĵfÌmïƒÎ3Û8⽇À¾0ÑZ¿‡õ]&þæ(˜ýškh÷‡\÷>µÕi:Ÿˆ ÕnµˆžÞÚþ#6’™Ôûšä|7&³ð¶ÖïFŸE½Ô-šRö³[&àÙõô®³Âún¹{w©ëÚÒ›iobòíì÷dB˜ã>æ¸ Úkú¿†“vÓ^Ý1[¿/÷a[;»V÷‰¼'©h&Óü[¢À×rAÃsn£çuÆ2+vÛÄz÷ˆ® µ´Ñîtø·qsp6á{…ÎOùÍdxÇÂú…Žl|c¥[Iuå—0Gå}G­`üFÓ¼Qãk;Ë]*hmí¥mÛ‰ã’Gaí]ý•ƽ©øâ4²“OÕVK)'kŒø77ˆ¡Öõ7\žI¼€§æ}ÛX“ßðýkØ«–ø‡¡]ø“ÁWúeŽß´H@ÇàçÄø:Ïį§iÚdöVúcy³Ìï;qÔ¬Ö>&ƒâœž,\ýD©¹KcHϾ?‡Ä>#ñsk \‹k ‹1b¹~{ úVÿ<-uâí/LÖ-- Vŷǜʛÿ ¯ˆï­×K´ðÅì:ƒ(¥˜b48Á9ÚøoJ“EЭ즘Í2‚Ò9îÇ“ZµWS²MKKº±“ÄÑ’:àŒW‘xGÃ2ü>¾¹hP>þ¼WSão EâÏ Üé¯Ä„n…³®:â´Í_Ä:O†—ÃG÷²]¬Ms ýÙ=Ïa]€| <1áY¬®úeØ&áÏ$tÈø2/ø(jzè—7+5Ãi³ˆÀ=Ífü:´×ü=ñT{í&æU¼©œ&rOÕvïOñR|U‹Å+áÛ‡¶D1„W]Äcëï^µ¨^\ÛhÏu”“O°³¡²{~æŸ4Í@Ôõ«»Ý xÅüÆdsŸÊ™¢h~#oŒ2ø†ïGš )ã1îfS³ŒäóíÊ Öü;¯i??á(‡K}J͆FFcÈÇóÖ²üS£xµ|wi⑦Kq¾2‹|ù@‚?žj׉ü7âÍKÁZV‡m¤<²Ã"ÜK6ðyùFO½t!±ñ6­á¯ÛÚiòZ_Cv÷B¨^I#·j±â…¹×­%ðúè5ÑP¿m1-O÷‡zíô-=´­ ÊÁÛs[Ä·©¡\ÅÍâ]" ‹8÷ÞØÉæÆ£ø±Î+Ä:ö©âß Yh·±Þ\ŠâIc*‘tÉÏzÙŸF“ÁÿBÓté¯e’‰ü¬gq±úšçþE®øf¡êZÜiL†vÆÕâ½~Šå|GâKFÔÖÏÃ×z‚²î2Å÷Gµy—¡x¾ÃâCø­¼=*Å$ŒÆ%e$+Û*Ñ> jzÅÎ…3A¨;†¦Oé^:mZãÃwNš÷S]Äѱ  #湯†–ÿ„<3.™¨h²™" *´lòz(ç­dxcHñ>‘ñû[¸Ð¤j-³`>X'©çµ>xƒÃ5]n--µ(oî\6 “õ=P¸ðÏŠ¬¼]6¥”gmBÝ£y†"f==p\ø‹ x‹PmËNÒ%¹ŽÃl"°äŽ£“V|x¾(ñ?ƒ£Ó#ðÕÌs>7–‘~\} 늞ÖçÄV_ ÓE_ Ü5È·û1Ëîãw^•½'TÓt[ŸkL°$Á¥aòœŽ”íJñËۻ[ &]WL™Ì‘ÜLö9®JoÜ\Ükš–žcxã1ÚØ¬ƒqÏR{W+àýÄÚµmVãÃò­¶ û‚¤¨Û:õæ¨Þi¾$ÅáË“kØ# zdÏó­ÿŠžÕ¼Q¤iwºm¹ûE«‰L$å¾”xcOñ»âûM{Y±6öVæ¡-’ÍÀÍzuQEQEQEQEQEQEQEQ^]ñ=5C­èîÖòÏ #î¼H×vqÓ8íœVŠø³áøˆ@ÆÌ¿êšNN•—ðïLYüi«kÚe¤–Z,шáFB¢Sýà; õJ(¢Š(ïE˜Î9õ¥¢Š(¢ŠóŒZömàOJ’éöh”¬Yç‡4|ÖôÙü§éiw¾‰øsóý+Ñé ƒÔKEQEV~·£q¥Ë—4PÝ>É(ÈQÜûÕO xrßö-9–âVß<ï÷¤cÔšÛ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(£QEQEQEQEQEQEQEQEQHÈ®0ÊÄf¨ÿbéži“ìþaêÞXÍ]HÒ5 ˆª£ QN¢Š(¢Š(¢Š(¢Š(ª—VŸw7seo4˜Æù# qõ5¦…¥Xݵե„NÃã@¤þU¡EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÁxÃâRxFñáŸG¼–5ó‘>Oϵtñ4,ÐaÕ-âhÖNªÝ?ÄÞ$·ð¾™öë›{‰ãÝ·l ¸ŠÄðwĽ+Æš„öv0\E$#sy£U›ßˆz%Šãðì’1¼sŽúWYYúÖ³i i3êW¬Ëo îr£'JÊð‡ô¯ÚKq¦6ÄÛXH0Et´QEW3âÏé¾H_RŠäÇ/ñÅe_©«^ñ^âý,êaÀaóiÏ_ëZw÷‰§ØOw"»¤(Xª ±ö¸½/âÎ…«øŠßE¶‚ì\ÌHýä{v3ƒ[~-ñ¦“àË(®uG|JÛQc\“ïZÚ^¥o¬i–ú…£‚t„ŽÕršìÎp “ŠóëoŒZÆ¿Œm¯¢º’_-D‘`gó¯C¢Š(¢Š(¢Š†îê;+9®¥ÝåÂ…ÛhÉÀàW |RÐ|G­®“f·+tÙùdŒ®;×oEQEQEQEQEgëZ¬z.™%ô°Ë2&>H—s ®kÃôÏë³i6¶·0ÜD¥›Î\cÕÚÑEQEQEQTu^ÏBÒæÔoåòíâfª^ñV›âÍ9¯´ÉâVÚÛ†5·EQEVf»®ØøwL’ÿP—dKÀ«A\î™ñ'M¾ñ:5Å­ÅÔÊ%›0<ƒÇJí À'Ò¸{¿ˆ­§µÃ]xQX!b<М;ÖUŸÆK]WxÒ´NíἸò×+Ð4{ù5M* Ém¤¶y&)~¢¯QEQEQEQEQEQECR×4½=úý½²ÿÓW§êÚ~­›aw Âw1¶qTõèz‚=KQ‚ ?¸ÍÏåWtíVÃW·é÷q\EýèÛ8¨5oiZ•ý¥} ·špžcc4û]sK¾`¶·öò’»€W=k̾"xâÙ¼G¢húv¦©þ”¯rÑÉò…¡#üñ^¡¦êv:¤ìná¹T;Y¢mÀJ»Uoõ+-.ÜÜ_\Çoêò ©aâmS“˱Ôí®Ò7É­î!µ…¦žEŽ5ä³^sñÄ>±ðÿV]>öÞâUàw«ŸFß†Ö À –ü³]=η£K$–/jÓ‘)˜žÜW“ü …cøâuER©#ÞÛè2økÂ3ø¬k2_UÝŒù™ä{zÖoÄÿÁ¤é¶–1^ˆo.nP ­† 'é]ÅÖ‰©èŸe½¼·’ÝÐ$™N=jh>Ðm'‡@ùnû¤(Û¹­mCXÓ´¤{ ²“€dlf¤³Ôlõ QsgsÐãFÈ¢=NÆS„¼Žq æ¤K«y[lsÄíœa\Nšh­âif‘cFK1ÀJ×_Ò/gòmui¤þêH ¬ßÃþÖ‘‡Ûjädt8ê+‘ø ~†É%îœþ_Ò½@€FzðÝB?im?bª€›°£¯ÈG5é~2ðLJ¼Oo ¾¸á|¦Ü„I´ŠÛÒl­4í*ÚÎÇeŠ0±àç­+êÚ|wbÕï!YÉÇ–\gò© õªÎ kˆÄ¤gi` x¯í"|4aEG«;×½žNÆyÌ1]Âò¯T3ùUë–zwywp°…Œ…ÏRqÀ°~ê¦÷Á–/w¨,÷s–|3屚î)®évUQÉ,pEo{kvX[ÜE.Þ»S.5;IDWpÅ!ÚîÅ,š…”ED—P¡»¹ÀÍX C)„R×'ñÄöžðµó½âÃvð•…C|ÛˆãŠgÃ@]x7LK«ÕžöHD®òÇ<ÿõ¿ áíí-­h‰La#Qm»¦qÍ{W–ÓÈÑÃq޽B°$TÌêŠY˜*ޤœTmµ­2òs µôÊ6£‚jýQ¹ÖtÛ9Œ77ÖðÊJ¼€=i’kúDEš•ª>èiÍh++¨e ƒÐŠÈÔ¼S¢i3ou"”ÿqŸÊ¯iYý…oMÄbÙ€"BÜsÒ«Aâ-æf‡R¶xáæF0¿Zž-VÂk{ä-j:ÊmG¹¥Ü xoíäB@ Ž$ôfîöÚžêt†%–vÀªo‰ô]^O*ÇQ‚i?¸­ÍX»Ö´Ë¼›«è!—ƒ±ÜÏN)§\ÒÃ*›ûpÍÐoÕðCA„VTþ'Ðíg0MªZ¤ í*\g>•¦’G<{‘•Ð÷ ׇø% üy×r V<+Üé“M¼M,®¨Š2Y²,¼[¡j7­ii©ÛË:õUpkZ{ˆm¡i§‘cFK1ÀBËÄ:>£)ŠÏQ·ÇPœT·zΛa:Ãw{ 2·EvÁ4>³¦Ä‘»ß@« ÊànúU—¹‚;spò¢ÂâäàcëUàÕôë æ Ø$2Å\zšÞöÚì1·ž9BðJ6jI¦ŠÞ–i8Ôe™Žª>!Ò5)Ì6Z¼òŽª“VfÔ,íçÍur‘ŒàS[S°X÷µä=LƒOZ´Ò6]þ Ö¡6Ïϧæÿ³ÔE|?©;MÇë^ÍHΨ…Ý‚¨ä’pbCã }HØG©BÓƒŒã?ZѼÕ,4äW¼»†ºdp3PèæœjV¾RüÁ€OASY궆ÿ±ÞC>Î[ËpqY÷ž1ðý…ص¸ÔàIIÚWvvŸJ×·¹†îžÞU–'WSjZ(¢Š(¢Š(¢Š(¢±üQ¬`xn÷RÛ¹¡Œ•_S^/ðºÌ|A×õ]k_ÛzñGƒ(3Û´|5câ+OŠs$iÓ´´B¸ÀéU“FÔàñ®©>¼-ü‰ÉòZLHàv ¿§JÂ÷wÅ=_M¶2ÇdÑXÜç§'õ«¿µ8|9ñ -SWÒžûM’ÜF¤ Á=Ö£ðe×…µIy¤Ý,0ÍÖ´“ ŒÖOŠ|-¡ŒV™¤IjëºD°sŸÊ½·CÐtŸ[Éi¥@Fͽ‘Ny­Zò_‹ú~«=þ“un`k_3$îžG\ñ\ŸŒgÓ,üWá»Ý¤É"Ç#B¸FéŸc]'Æ/\Ç¢@ÿ-ë§î8ÿ³ñ3öv? ¥’Î4ŠHã]ΣÇi4=eü?ð+øq戊¦ñS|2ðæŸ¨øj7–é5ÕÞ÷yXÛ³×8úVWÁ˜RÛÅ>$ŠE&u˜®ãè Çõªž Ò­ô¯Ž:Hµ%œðOÓ¥'Æ]N‹ÄZ5Áƒ2ÞÜ3ääŒô¯@ÿ„3Ö>º¶ŠÒ0²Ãæ4R9?62®Gjå~–‡Ãš¤±Nã'Øðª†/ˆþ-ÖõMnqmnþU´Oʢ緹㟭-µÐð‡Å÷ðå¸)¤_D6À½°ÁÀü+›ñ†Mø½a¦isÏ W$Ù!ÈÉÁÇ¥k|AÑ¡ð» Þè42O0I°ìCò:ó]OÅÈ5«ÿ é§M_2#"=ÌG£ŒgÛ=~¢¸¯#MÓtMKBÛêÑKœÚ‘´gïŽ#ô¯\ñ]Û?Ã{ûŒn/dsŸ÷kŸø |:·aŸšG?øñ¯K¯¾@¿´•“p3~¿)«ÿ´»qáa« e¼IR?1[.zWC6¯sáïƒë©@¦Kˆ,AL òGðÎ ä<#áÛ][áŒúþ¢Æ]Jd’ctÌK¹Æ=:V/ƒ4-kÇkeâ¨2]ÙÝ„–V<˜×ëÉ?…Xø© ó|Vðõ½¼„NñÃÈÏSWþ'ø~ÏÂ.‘«i‹kØîK*pÏ‘Îãߥk|OÒìõ†rkWq´—il…77ʤûtÍ[ø_àý ÏÃúFº‘$ïiN2G8+ÒëÇ5íwþï‹–~v+¦ZÓ¢œyÌp}ºqOñé¶øs«hÚ¶Ž‹m Óyw0§G_\zŽj߯M6ÇQð)ÖUn“cG/BAíŸÆ¡—ÁÖ“ü(þкRú˜±‰º23þy­ßƒú¥Ö©àKwº˜ÌѱŒ;u ï«Ê¾7hZt¾ŸU{m÷Û’4”±ùF{~UÐü?𮑤èf¡kj‰y-ªy“rÄšãõ[+=Sã™¶W>c[*NªHùqœäw¨üeeƒþ"øb]›d¾Çq±Ã€@äwëWþ*xŠoøH´o ¤Í½äŠ×.§¦yü ü+;â4zV›¡ZßxZ𕔍ÅíÔ‚WßkÔ¼-ª¶µá« ÷R¯,JX\s\7Æ Æ_ \ê‹ ­ò•Q(à‘œb«xÁzuÏÃX¯u8…Å䶬VVÆbPпÝíœwªžñ¼öÿu‰nå“N.ˆÍéŽ*¯ÃÛ­ãÂ×wšáûN¡~ìò4‘—#=qÒ®ü3¸7òëÞ¼µšm1$2@Ò©ÆÜ“€HÁ¬O‡~Kïø’É£Ûg3, >RÙ!IÀÇJ¹«xORðGƒ1qBÑoÅÅÌQç?Cì C¯á?kZ3hî4Û˜nÒI`pP8¦1‚•køóP“^ø•¢x]ܭЏštÇc$ê8ýjÏÅhm|%¡éºÆ• V·6·K†EÆõÇ ã­c|\ŽÏUð—â![›ƒ«^"ð®cðzMKËi/Ö”\8ºßêzßÂXfYs~öínçø€À&¸­LŽê–> ŽÖkôWd1aØ3–#§ç]—Á«Û›ÏÃö—whäe]Þ«“[Ü|o×ÞUd‹k(­zåx×ÅÍzêëÄú?„m¤–(®¤CpÈØÜ¤ôªßü3¨içFµð¾Œ©µÔ¼ð&põaÛëVüuy}«ø“þšB°L©-Þ8,Î?jÇÅ*ÏÂ~±Õ´ˆc´¸µ¹L´këÜgÄxôÿ|-Oy¹FVNÿ1ñëLÑ|)e/ÂC¨êoE‘‘$cÌ|dcù֯™›Äß ž­™Ð1‰·“’+’ð?…-§ø…â 0Ë7ö\N3s‡Ç!IôöïZ6° |oµÒô¦ò¬¯c̰çåèO׊_‰~%kÏé^–f‡M%e»Úy“žÓЇâþ‘¦ZéW¾ˆ Û[…èñ`•îšìüKá+/xX^¼5mÃG)È(q^_à*ßÅ6«á[äÝX\—¸`Øg\ð§½zω|+¥Çà;>(6Ck +èظµŠé‘ez0,¯w¦Èþ\NÿÝ׉x.TñçÄýbóVAq’ì·…ùEäó^*Æ­z¾ ø½eglžVŸ¨Å‡‰xBIÇOʳþ'xWFÓ¼SáÈ­lÕöäùÇ<œ‘Çó¯cÐü?¦øvÑ­ôËu†7;˜æµ+›ññaà]`«ÿF|ûñ\/ìú§þ;çn¿iÇé^µq2[[É<‡ –cì+Ç>$øòMGÁzöbÉn59Œ`“É@qŸÆ·õÿ éºÃ9ÞÚ8îm­DË2¨ ¸sž¹ªò>$|.dÔ!]Ä•¾ò·¨5Í|=ûø/\Ñ/¬ã76ÎÈ/Ì[¿ÎºVÎÛáŸÂû‹‹¶ßK«HO%Ûü3úVg‚fðúxh[´÷×(Í#<%رÿkgá&±§hšÔ:´3ÇibæH™Ðçg Í^—ã·…£b.Ÿp•«àïˆÚoõ©bÓÅÄBÞ"Y$èÙï]ÝQEQEQE“âm k¾¼Ó¸ÌÈBç¦{WŠü,¿‡áé~%-c#>ßî6PkÑ£ñ]ωuä‹ÃŽÒið!3Ü…ùÿt×ð¯<ðŽ´toëW^(µ¸kã)XwFÌ:àmª–3Ïgñ7T¹Ôíîíÿ´bÍ¿–ŒXä®:tàWa¨jsé~3–=CO’óHû4bRc,¨Øêj‚iÕ¼u¥]øZܤˆûîåJ _CØš­ñ°þ.izÝÀ”Y,GtI pÄWcà+ë­w\Öu·YVÎb±ÛÈN=뿯ø¼·ñøãK¸¾†yt4e.¨¤¯œâ±~!kûSÑ5[+ G³q¶Q]Ýú¥iøŸH¿ñ…´ÿAk9–ÞråXÞV}? Óøã1â/ϧèö— ™Ü!Ä`vúöÀ¤ðx‹Æî<6‹$wEÔ©wlzŽ•káÿ‹¡Ñ<$Þº†oí{bÑGl±’ÎI8Ç·øVÂ]FM'Çž®²Å=Ô‡['ŒúUëvÒ|`Ó5–Wµ´'FÄéZ§Üø_VD‘ì#œHä/Až¦µÅ6W×ÚÂy‡O[AnŒüíŽÞ½k3à•ìqÙê:4É,rÏ3Èã# ޼ûRx=àøuãMrÃTc•Ûy¶ò¸Âã>µ-Žž1ø“LÕ/4(ì§YZÃÈÊ Ø¼œTŸ¯¯.ôïÜÛý¦M)ö# c¯~™¬‰Z–Ÿªø{IµØYH¯s4P‘ñÂççŠê¤ñ^ü:Ö¯'•ÚÆHÌ6ŠÝð8Z»ðCUµ>ƒK2âñ 1Œƒ3ÿׯO¸¸ŽÖÚK‰›lq©f8è+çùüM§ÉñÆ/n—û5ËóÚ2qŠê>7ëw>‚ÒÝÌ×K‰rvç9"´æñ>ŸiðžÞLÄñ4Ik ”‹žïa\öwi¤øU´¼Y¤ >Ea¸rà1ÉŸzô?Ùhzo‡"´Ð®#ž$´ŠÀ–nä×–xëQ´¸øÃ£Þ'šðY³H¨HŒôê*ïÆ¿Øk>±´Óåy¥+#F¨s·Þñl¿Ûÿf:P3²Â™`åpXb²<7­[kZ…49îbt{€QÈoƽž¼OPÒ×Â_`Öî¿w¦ß†ýûŸ•Ž„öçùÔŸÊxçXÑŤÆ½áÁ ˜\m>§5Íiúͤ¿¯uÝö/'Él8-ùô¦üZ×aÿ„ëÃB7&9w܇äƒ×ç«ñÐKDñ¥ŒslžxU$ˆó×Ð^ü@Ð%ÓJi/¯æb¶Š<–o@=k­Ñ#»‹Fµ[ï/í[F»@cÔb¹ŒÌWáÅî ½'ØÖ…Åô'Ù.-\¬r<|:çŒry®»Lñ;]hk’Föº4q퀼Gt‡ûøÆq\'Âq#ñ޽%ÜsB/æÌD#pÏØ|FÖu .ûDK($¹I%o:\†@9${ âüO„µ»ÛC°xõÖ‘LQC ¯‘×1õ­Oh7ZWŠt/my#…DwEvŒc'z­ñU·ø‰o¦è>v»•çLcB½ cÛ½7âÔÚøGJðÝœKhÑä$d€€c®1WügâK;¯†i°Gr÷3A±BÙàý+;ÃW·7?®´½5nS¶…· ¤2’O•gøGQó>]h–v“¶»:8•¤CÔõb~˜­o„¾%:f‰ý•ug*}ï<Œ¤*xþ¥dx3]·µøµ«êw),v—§d.Ñ‘»œνö¼wâ΃w‰ôÛ@òÇfëçlÀ9ÇÓ5»}ñ*ÏU²†Çò½Î«t¨EÿV{³À­døãB¼Ó|Q x¤™'Ž× xê9xÕO‰í·Žì,<= º¸šuyù5¡ñÆ=á Z1¼ŽDq" ,IR ©-¼O§„ÿb 0¸[3måùMûztªÿ®›Lð=ÚßC4_g»—B8¬¿ø’ÚˆZýÅÀx­¯¥C´do<ÿõ¿Éªzž½k/ÇXoûºmiJƒž~¤VÏÄ= [OhÞ4µ·k‹T+ö€$.:ãñ®’çÇz-ͬpèÖËw¨Î6ÅÃ÷Iîr8ÇZ¯â߈1xgN‹LËK«º…uHÈ Ÿâàc½y¾½äx_ÄÚ/ˆt)¥¹yT¥ I|œ–<{׬ê~,Óõ_j7¶îì 6CxÅrŸ£Søs¡8hî HH 185Ã;Ø| um \˜[4SŸ…‘¼þ½?Áš;ku¯JŒ–(Ì $rø~œVn•¯@>4ß긙l%h“aÁéüêÄ-jÛQø¢^B${;GC,žYÂ᳚÷m3S¶Õì#½³bÐI÷I«R ’6CѼKÃÖMðãâ> ú’´zmê“çÿ™§\YˆŸ­5KͤéÑ®g#äf =ÿúÕWâ®»ÿ‹ôSg Ä«¦Î|ò±Ì:z÷¯bðö·m¯iQÞZ‡òþïÎ¥NG±­9$X¢yáP'ØW—xÇǺ^¹áMWNÓ£º–åâ(˜„ýî•Ì|!ñ<Òn¬5ˆ.à-)p|†cú Ôø•ñ¯ôÒü=iy+ܲL`e ½Ç#­VÔ¼!{¬|%Ю …¾Ù`«(‹‘éZÚÿŒí5O¾•kæÉªÍ„Û…%ƒcº†ž øB9¿ãâSæÌ=öü:W|*ãã«Çqa./%P>RËÈöëü«ÓŒ:Wà¿Ááû_³š»2P$ãÛšê|&ºŽ¹s¨êº„Ov[ÚH¸%=HíŸJØøiÆD²ÿ¿B¢øGBðôòÏ¥éñ[K/È:ÖÝQEQEQEUýLÕû}…µÎG›lTö¶vÖ0¬6°G kÑQp)'°µ¹!¦·Ø‚G4ö·…äYÙףƜñ$€‡E`z‚3L†ÖÞÜ Çž»T Ó¥·†q‰¡Ž@?¾ ÿ:tqÇlÑF:™$QÌ»e}A ú}Ê*Mm¢œ…d…L"ŒGå„P˜ÆÜq¥1m-Õ -¼AOU0h‚ÒÞØ"ãÏ]Š'Øí¼ÿ?ÈÍþþÑšCmÂ4 ×;Fi†ÒØ’M¼G=r‚’âÎÚî&âäûŒ¹°ÙÛ[Ä"†ãŒtUP§-¼(ûÖ(Õÿ¼P_iv:œa/m!¸Pr‹œ–ÖÒÞʆڊ%è¨0BúNŸ,†G²œœ–(2M:M6ÆVÝ%¤ qŒ”*SmAäPÅŒl*1ùT#L±Ín- ò壨6ŸÂƒ¦X›d¶6ù ÷cØ0¿AKo¦ÙZIæ[ÚÃã‘8«,ªêU€ õTÆÐ XôòÅ+YÚ·Þ¶…¾¨+Ï~'ܤ6Úo‡â¶‚+mNo.Yš1²1ëõª6¿¼ö`d–iÔŒ—à}r*§t+ üL¼Òô;É.t³m¾Pϸ#ç€O®3^ºm bI†2ORPPÖÐ6wCÏ\ æˆí`† q"Æs• Á¨­´Û+9KkH!wûÍ'늵U¯tûMJÝ­ïm¢¸…º¤ŠƒNд­ ìû-óÔÆ˜'ñ«¯rcz+c¦FiŸc¶Àf‡ŽŸ ¢;Khe2Eo9,¨ÅMHÊJ° ÔqÛAï.Ów]ªiÎÙ~í¼Cœðƒ­$–V²ç̶…³×rš“ÊÊò¶/—ŒmÇúUKmM²œÏkao §?:Fç­^¯?øÌc?/‘Ø%J‚ØÎ ^øy ¥ç49dŠ)]-P)eŽ;Wb(ÀAPKci<«,¶Ñ;¯FdŠ—É‹Ëòü´ÙýÝ£•0ZÛ‡ ‹pèv Ô9ÑXŽ™ÅB–‘ÊÒ¥´K#u`£&¦tY£¨e=A µ…¥™&ÚÖ‰9%jSlrȤú‘IöxyýÔ|ÿ²([xS;bs× i©koŽ‘R¨(·sˆcë…ÐmmÎ3\tùKM’4š6ŽE Œ0A«i¤éö,Íke,ÝLq€MZxÒD*êOj­¦•abÌÖ–pBÍÔ¢š´È®u õ¦ýžcÉ›E/“žZm=WjÛ@˜Ûkƒ‘„Ö³µq†¶…‡ºR´h鱑Y1¤qPÁailåെ6n¥iÍinìY­â,z’ƒ&†´¶½oã ˆ)ÎÙÁ o®PsOŠàŒG* èª0>«ÝØÚßÂb»·ŽhÏðȹû{X-#òíáH“û¨¸hs g=r¢Q»bQsœ(À§‘ƒÒ˜°B‡+j}” <ˆ¿ç’ß"ƒo uŠ3ß•ð¡Fz ­›eÏ4V°¤¯÷œ ÉüjÕ0E”Ë寘F ãœzfŸQ=´8w†6`r (&¥¥QEQEQEQEQEQEQEQEQEQEQEQERÕ4‹jÍ­5 džü.3ùW:ß ´"ÿ)¼HvàÄ·.ùÖÖ‹áÍ'ÃÖæ.Í RrÄrÍõ'“øÖ­QEQEQEQEÎø‹ÀúŠgIux%˜¢íU2®>€Ó´é>žI4Õš0ë·cJÌ {]QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVf½®ZxwH›R½ßäÅŒ„'5Ìøw⿇ ¼I©ßEnòœ"¹Á5«‰,k"0daAàŠI¦H!yd8D˜ûW/§|FðÆ«¬Ç¥Yê"K¹ ›Hɳ]]QTµ=_OÑíÅÆ£w´Dà4€O¥A£ø‹J×ÖFÓ/#¸œ1CœV¥QEsw>=ðÕÌ–óê°¤‘¶×ã›Ä \ΰÛëÒÈÌ,n’{qNºñ÷†,¥’;Zš3†qÍO£øÇB×ïÓL¾K‰Q7°AÀZÝ¢Š(¤$“Ò²,¼U¢j:”ºu¦£·Q4øg§ø×U²¿ººš'¶J§F^¸öç½uSÍo¢hÌîáb¶„òÇÐV/5ûøh_^,{žG\(À*溆—oeûD驲Á±ù˜AŒ§‘úW¸,Ñ3lY· niôWñÅoá dµž4¼–Tëɾ•­}¦ZkþEÕ`Žã0o;º·­y§À[1jÞ! ÷Vç`ÇN+Ú) 2HÔÒ,ˆÿqÕ¾‡4ê+Šø‡¡iòø#W•,`ó„,áü±œú×!ð+MÓ‡‚¥Ô'·„ȳ¶fuçé[—Ó¼y­¬ÒØD4kF%.>Ðÿ‡a]Ο¢éºPÿ@±··8ÚLh"¯3*ýæêh‘Ò–ŠÆñV²š†oõ&‘chafBÝ7cÖá˹µ/ X\ÜÈiíÕ¤eõ"¹O ü*²ðï‹î5øï$•¤,R6þ žyï^‚Ϋ÷˜©¦OW0´3Æ’FÃ]rá^#à2 Žúä6È#‚$l"Ž@8ýkܳE5ãIP¤ˆ®§ª°È5ãÿt›oøE쥂Ò5“í~DÆxéÅz„­-‡„4µ[hÕM²|»G¥xýÍäþøùö=%ŠÚÝËšû¿0ÏJ÷âÊ£,@æ‘]\eX0õ5Êø·ÄÒèú®…§ZIÚ/îÂ8nvÝÅiø£Ã¶¾*Ð'Ò¯$t†QÈzÒ ð…ì|! ®›c#Irí#c,OÓè*ž‹âYuOëšbËÙØ¤A Žw¶Iªþ9ø{aãY¬¥»»–¶?.ÃÁÏoÒºÛ+Xìl µ‹;!@‹Ÿ@*RèieКR@'¥èAúRÑEàdÔi<21T•Ž¡XÌñF¥ý‘áBø403)ô8¯"ðׄÅÿ "Š+¥Šîò妒W?1;‰¯[ð®ˆÞðÝ––ә𴇹­šÆÖ|-¤kóÅ6£j&x wÅxΟ£Ûèß´Hµ³„Gn0™Qš÷úòíFöO|Mo™öVœžeÂþ±½µdüHÓµ»Oè¶þÒÂG)I < lW°Ú‰VÒ;fPƒyõ8æ¼£âÖ¶÷þ¼†ÜIödHèqæ¿uÐc“]×Gà- ôD8ü+‰ðŸ´K¯ßZjr™5‹‹—<ÄùQª=8ï°éúM¦·fÉm¨[Ì H¼n:ç¥w¾ÔßY𦛨H<ð+ÝOkjŠk:©Ã0ÜѽI0$ôæ^añÎÎ <%ËDžlr¦0çÖºŸ…ƒÀz*;*Ÿ²!Á=±] Ì)si,Ä$ˆQˆ=ˆÅr^ ð“àÙï$Ó®$˜Üw¶vJìDŒeÝTz±Å0<Q¯¨Ã^+¥ÙÃgûEN*ÇŽÕà”^سDìUdFaÔŠ}Úm÷móâÝÓÆiDðž’¡ÿ Uš'm«"èIn!ƒýtÑÇþûüéc–9Fc‘\z©Í$“Ã<ÙQ3ÓsJ²ÆíµdVlgäâŸY~"Ô?³.Ñn4-Báá¹”G=¼’—ºf»ÿˆÞ5“Â^[È# ypÄE$u®WÒ%Òþ/‰n%½¼Õ¥A7˜“°Ûœv§5rOˆ:µ— ]B\&¥uû˜‹pØç-ùsO_é«à)5KIÛZ™üñ>[w\zWCð—Æx§Ã…o$ó.í°®ÙÉ#±5èUáÿ|=6œ!ñ.ŸqpŽeÄáe qéÒ¹¯N-ôýSÒïï˜I ½Ú¬ìp¼c=ó]u΀¾"ÖôH4ÍZöžÛÎRc´/žüÑñJÖëÃk¤K§êwêf• e¤:{ÖïÅ- _ü>{Éoîà[¡1DØW>¬1ÍPøAá%ƒAÓµ‘©Ý°*OÙ·þï'Ú¹ßÝÜ·Ç{8í_d¾@‰dÀ9?Z±ãu»ð/Œ¼;qay9.`ò –8?_Ò½Â/nNK(9§×Ï|.¶:Žtú•ÜÏutVn#û£µzî…áåм=8·7M,‹\I»/jò¯…¶WšÛk0ÝÍkh.YžXNÖcèjè>êú§Ä}cÂ÷w³]Û[©xžS“¯~µ‰•ë¿•µ­ßjÞøƒ¡Úë\ÝÚê#d©rÛ°rZgÇ],¯‡Æ¡>¡tÑ™URÔ ?Nõ×x3ÂBÃA…›V¿.-”i0#9¸ÏÞê–ßõ mNîêÎÖ2QerpxëëÔÕ½[]Ò.¼s©iþ"Ô'²hv‹P³×äýsë]7€[Q7z‘¸ÕN¡bJý’C&âuÏ¡¯<ÑÒ{ÏŽ>"²ž13my•°È£ Ö½ÍÝ÷¾*iZ=¶¡ws§j+¹£¹”¹$pM{%㟴í‡tÔV*Zã çÐWI Â[sá 3ìa mj›@ŇÅ?áÒ5™üA¬]GW”“æ²ácä\í·ˆ#ñÏÄ-CL½º1hÚrí¬…D¯žsŒzKM~ üPƒC³œÉ¤ßÆ6!°‰ÉãôÍaøÛÂâ_‹Z-£jW¹ºVo;Ìù“Ù}+ÐEs®ü/Þ^Ü¥’@Ó ÿ½Ó=k’øká8uwÄ>eýô gy°ySc~ ûÿÞükoã5­Ö‘§Yjv…äRIpº HR¿O^?tž1ñ|žøw¡ÍÜѤq<î#¯áÖ²-| n|ý¹q}xÚä–þÚÌ>ld g«~ ×âÃ须ị÷r<$«9~•Èü/²Õ¼Lº­þ¯~--§`<¹ˆf=ÍÔt­O‡šö§eñVðµÍÜ×–°³Þf,à{“õ¯b¢¼»â¿‹®tû;ÚtÆ­F@²H:ª‹<5ƒ<%ý¹¤Ïp/mJ;³JÇÍäiÕßx]Ó%ðÎ`—Ð5ÚÛ"•²Ù ÏJûÀ¾ѵé<[t¦co4’ß(P=}½k“ÔôSâ¶±os:=—†­Ü˜ÚN Ã=@íÓ­zöŸµ®Ÿ{>ÏM‡#гExÿÆQ‚Ìx‹M¿¼£!fŠ9zd æ¼_w4~ѵ+R½Þ‹)#hêOjé?².¼G¥øvãJÖoâ;Và¥Á`çÜž+Cã ‘´øXÖË,’ù,ƒsœ³sÞ©i¾ž÷á‚j“^Ý-ÒY¶DªÆð1ß=k[áµôÞ2øwäêsÊÒ#´FUb­ÇNk#àÿÚ`ñ‰í¦º–xíæ1£J刟ZKMZOˆŸo4÷y¦†%r¢GÎ 8üj¿…o5K/Š÷:=”ði)AÉ\âÏj­{§ÏuñâêÚZ3s÷‰éùÑ7—¤üZ‚Ø]ÞI£Êû#f™¶ï#žüâ»OxmŸÆzž££w%¬Þ\Q¼…—wSY7–·ZÇÄýBÛȺJ/î%g(ˆóÍ õµø•­hV÷/6š‘ùî}Øät«#Ôô„ñýí·Šd™-¶/ØØzäýsüªçÃèÿâµÕd¶Ôí,dÜTx¯R®âW†aÕ´+½F[˘¥³°Š'¹Çzäþè‘øj }ï.€™üŸ0ùyçµ]ð•ÓüEñ6±y¨3É¥Ú¿“m$)Áäûž”šf²Þø¥qá]ò6Ÿyòw6|¶ÁÎ?\Ÿ‰4 âΛ¦é7wÇxÜÒ–#q õ®«Að^¹¢|Skˆ_ìp¹fi78sß9?zåQEQEQEORÕ,ô‹Cu}:Ãà³WÏZ?ˆ¬aøÓs©Ç*Éhüy¸ãµox«ÄÓjŸ-4‹ÉÚ×J Ø)ÉëéYß%Ò“^ÐF‘?c‚L¼èr»‰“ëëW~!‹ßø/âS¸]GáÙ°eœO–wcž•‘á dEàOXi· \É*¤‰ù¶÷&¹ßÞX§ÇØ.á8ãÙ¶ãkãN«¦Ýj~xn#w†}ÌAè¹ò¯dÑîà¾Ò-§¶•dŒÆe9½^1ñØâëÃ¥ò–ã.ØéÍuM¯ÇqªO7 Ø[iØ™Cü»ÈÀïŠä~Þ[@šà’hã-rÅAn£Ú¡ð­ý¬?µ‰å¹ax¶#áŽCÞ©\èÖú'ÆÙfÖÀm;QVxäbv“ÀëþzŠê¼RžÓá…-´ûKíFW oĶzàW¥iÈÑé¶êш˜FAü>Õhœ šá~"ø‡Jÿ„W·MBÙ¦hY~`É>˜®_à=å‹x&[)f‹Íi›1¹+‡Ôæo…Må“$šuÓ`§!TžGàkßmµ½/ÄZW•ì%îá+±_$nþµã¿ ´ #K×µ­ÄpÆ·qM˜Œ­ëÓ ÿžµèpxj߯¶Ðèšm«ÜE{›¤ù¼¡ŽçÔ×+ý¬Ÿ´%Äßh¢ÁC†ÈÈ÷¨þ*j’üFð’Ç29ŽmÒÃnZÖøñ›ŸÛËóc[¥bÊ}¸®³Añ5”ÇLÒ-Ú%6¡ä‘mŒßßÚ¼ûÃzµŠü}×̉VHˆ‘ÉFÜ÷«·ŸðŠxËÅZ¦™âDŠâ 6ÁqÊgïg¨ô¨¼¢Ãáˆ76^©ö,ÛyÓeÁXÎ{žžµSÁÖãW‰®Äb&QÉàôÍVñþ¡m/ÆÿIö˜Ì1*e÷|«óõîÑȒƯF AË‹ˆm-ÞââTŠÆçw8 =I¯øí®éšŸ‡´ä°¾¶º?hÜDNŒ{W ø#ÄšTžÑÒKût™ TØ\Xuú×bFTZðÿ é–>ø¡­Zø‚ŵá2ZÉ:ü¤“šì¦_ ÇâM>L³¹¿-Ë€ˆSæ$tôë™ñËù¼;,Î"·2]¾ïç]½â(§ð>ÜŸd1´6¥œÌæ ëÉÅQø%wkÿ2ÛG:}¤;³EžAÉç‰ðïYƒK¿ñ£\ÌÜ5Ë2#¬Çœcô£â梯à=ÚæàIz×É"–Ë`‚r{ևĭ!¼KðÆÆ}0ùíhÉ è0GáŸÒºK}zÂ…iy-Ìj«c´Œó¿n6ÜçŒV¼;à{Ûûáöav ªŒ.8æ³þêVp麿ŸsJ÷-!ÞØ;}~••àýWNãf½s5ÜK¹q†<½ëÞAÈÈèikÆ>1h—x—Dñ*míR9ÚšÞø›«Ùꥵ²¸Žk›½‰ hÀ³è* m¬¼#ðoûúê8®ÍŠ¡l1fäãñ4ï‚zµ‹øÓN1ý­^Fò‰ù±¸óŠôê*Ž£¬iÚHO·ÞEo¿;<ÆÆìzW….½§ÿÂþ—SYTYžGÊ~QžkÝ´ý[OÕ’F°»ŠåPísgÒ¼ÏAÓSÁ?uF»uŠÏTXdn…‰Éú“Pü^ â©´錳\Í8w(s±:d×ÿއ-²juµË[±‰%@HP=út¯)ø©ÿu¦†±h«b·k! –Ë–<Ž+²ð*xRÏöZ”)j—±Z•€Æž+˜Ô¾,é7RK=ý„—z˜RÚÜÇéüf«ë?­µ=9´}Lš)î€YÆÐ›¸¯@ñ·ÿ ÿÀ\ÅžÖñ¤h½³Çÿ^‡~8_irÐùSÆØtvu•â]5u ê ¡ŒÐ2Œö8à×|0ð亯…5Ë=G{ˆwÛÀ¬8LuÇãü«càž™y½ôפ²ÙÊÖ¶Ù=rØý*ÿÆÍNÖ½ŸÚc[†‘•Ÿ›sйiâ.…qªßBψB¥ íàÀø;¯é–»K«ÔŽE•å}ß)ž¿Êª| Õìdñ‰‘® íÓw9<Šg‚vx#âNµg«‘o Ó‚w’O_Æ»øIΩã{K #žÙ2×·(¹v¾µÇZëvqüy½¸–TX&!+tÝÇKâÞ»asã/,s¤‰m0iYOÜšö­+PµÔôè®læY¡#Ôç‘W+Ë>7iFZê°ö›9ÁR­bøÿD’Û᎕z­'Ûâ*ì䜆nO?S^—àí/ûÂV‘lÄí™!îÎy$×’x{Yµ½øƒ­ÍãHò…´£' õÅdYx¡ôë·°Äm%¸e˜h°ÎIxôÀ®Ñu]+Yׯì Ëcà&Ò^åZá‹DÌsšoÃH× ×4]NU„´»àg8 ¼ôü©¶ö‡Ä›S¶Ek §ì_öçò¬Oø†Áþ8iWKt¿fµŒG$›¾U99æ½ÆÆþ×R¶6s¤Ðž¡ÈÍY¢Š(¢Š(¢Š(¢¢¸¶‚ê?.â$•3®2*šxGŽO14ËUï†j®§á Xž)¯ôÈ&x†rô©¤ðÖ‹5‚X˦Û=²¬EÐ~•f=*Æe¬IlF<µ\ çSៅ#¿û`ÒÓÍÝ»‰Lúíé]R[ÃD@`&8Ås÷ðÅÍÃO&‘n]Žã…À'éÒº {xm`H #‰`RSG(e ­Žš†ÚÂÖÎÝ­íàHâlåG|õ¥²±µÓ­Å½œ) @’zdÖF¡à¯ês4×zU¼’±Ë; $þu~×DÓl´ÖÓ­­#ŽÑ õª:Gƒ™éVgðÖ‰u#É>•i#¹Ë9ˆdŸ­DÞðû°i4›g#½wcó­+;+m>Õm­ H O» (úÕb¨jº6Ÿ­Úý›QµŽâçk®j¿ƒô]1ôètèVÕÎæ@:ŸZŠxbÜ'FµWDÃ~bš|áŸs¹S?Z­?Ãÿ \Êe›F¶iñãæüë~ÖÖ+Xí ]‘F6ªç8ÛÛ+}FÊ[K¸„°J»]B+xVÜ0MÓ ×)šzøÃ)q ñèö±Ë ÜŒ‰‚ t5›«hV¹&§c Ê¡Êù‹œRiÒt$eÓ,!¶ ÔÆ¸&ªhZfµ¦£e À^›×‘Q hßb‚Í´Ûg‚Û4`…Â¥³Ðô½>àÜYØA¤m/`⪷„´ÕN¦Ú]¹»'q§9õ«^Ñï¦3]i–³JÝYâš³m§ÚYZ›kkxâ€ÿË5_—ò¬Cà/ 6¤/ÛLˆÌ칟]½+z{X.m¼ð¤°ÁF\ƒøVZxKÃñ34z=š$FEW“Àž’T“ûÑ]ATÇ?…t -Cskä ÄI,l*ã ŠÅÓüáí.ôÝÚi±$݉ÉÛôÏJÑÔ4]3VÙý¡aouåýÏ5múf¡±ðΉ¦Ý}ªËL·‚|c|iƒZ´U[½6ÊýÝÚÅ1O»æ.qU¿áÑÿèkÓêÅY³Ól´ýÿcµŠ ü·–¸ÍGªhöÍ¿‘l“'mÑô=ª¶“á#Ds%…”qHF õl}kY”:•aF¬äðöM.Ð19'É\ŸÒœš•¦DÓí•Ø`•Œ J_ì]3û 1÷¢_ è©*ȺU uåO”8¬_kÚn޶¦Fâèì‚ÛfU›ÔžÀS~xYü7¢»\¢-åÓ™eT Oaí]…^ÚÆÖÊ7ŽÚ‰‹0QŒ“ÔÓltë]6&ŠÒ‰˰^äõ5Z÷ú>£wö«Ý6Úâp6‡•?ˆxSA´cI´ØÇ%|±‚hO è1ïÙ¤Ú.ñµ±ù‡¡© ðþm,ræZG$|£,@øÒjþÒµèÑ5+8ç ÊKÑ´ýßÈÓí"·CɸÏÖ‘´-)´ûbÌIbcšdþÑî_|Úe«·«D*í­½Œ XRÈD¦ª÷–VÚ…³[ݳBÜ”n†’çO´¼µ×ñËÆ†G*ÀPª 0PŸBÒ®nÅÜÚu´—äHñ‚i³øH¹½KÉ´ëw¹îÈS‘S¶—`ÞnëHOšrùAózfŸ£iÚHq§ÙÃnåüµÆãW«?Pд­YÕõ {–Q…2 lS4ÿiTí5†Ÿom# 1‘QjþÑõÉKû4–EèýçW4í*ÇI´¶6ÑÃþ~¾µŸqàïÝhö¸ä“Î}kGMÓ,ô‹$³±aI!qÍ[¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*•†—k¦´Ín¬ ÄÜÙÉþº»EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÖ‚ȬGLŒâEQEQEQEQEQEQEQEQEQEQEQPÍwoo>xãÏ{š‘$]ÈÊÃÕNiÔQEQEQEQEÖ‘ï:¯Ôâ‘fتHŒGP}QEŒÊŠY˜(I8¨þÑî sJyjÅQEQEQHÌK1I57–×,V ˆ¥#¨G•MEQE1¥QU› '“O¢Šl’$HÎìd“Ð lÜÇæA*J‡ø‘%QEQE×u »U$ô ´Ô,ïÕšÒæ)Õz˜ØUš(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*œº¶Ÿ†9o!F.:ÕÀA ÑEQEQEQEQEeÇâ 6]zM'Íôi½£Ço­y—ÆÏ @t9üCÌñ]ÆTYR:t®«á+;|;ÓZF,H$s‘ÅvôQEQEQEQEÂøßÃ62Áy®ÞꚌ+ $ì‚bª0;b¹€ÖW·0êÕÝÄÒG+ìˆ;Ó¯Zöš(¢Š*ޝ¥[ëZdÖ[ü™Fc`þuá>цñù4Èf­âW(%·s_BQEQEQEåßµ‹Ã©è~´šHSQœ †°LyädUKOkú_Å8/ôÔH4HÔ±ö†P0AÉ÷¯\¢Š(¢¼ëÆõOxÃNÕ­µCokl4Aˆ9’1ëý+ÐÔmU\ç§Vˆ¼Cý‰q¤À±,’_Þ-¸Üp­øb›ãMëÄ~¾Òlî>Ï5ÂY2G|ö¬ß‡»ðw‡žÂòïí¼¥øè£ÐWcEQEQEeø‹L“YðýîŸ ¦'ž"Çl×)ðËÀ7~ ‚÷í·¢y.¡ùTë]ýQEQEQEQEQEÇÜø¢ð|I¶ðô/²ýŸÎ”‘–ôNk°¢Š(¢Š(¢¹ø©õßkZ’«ƒª#ƒËzדü`𥞪iwºy’).î?xÅÉËÖ½êÍJÙ@­ÔF þU5QEQEQEQEaø¯Ä á½šòLíH¢çÞ¼;ÁÞ7Ôæø‡¨j²è÷ww!S+–Aïô¯Aø±tnþOu<ϰùLyS»¡ý++Á/âMCáü ¢ÜGb–ñ oq•€íè+¢øaã[¿iWk© K»9 r0è@ïYð”k>6ñmæ¡^:ÊËå–p3Ÿ`j-Åú‡üx|)¬Ýý­% ÃpØûzW¬U{ëë}:Ê[»©8bRÌÌxæoˆ!Oá­[R]G|pe\ygÒº/ø¯þí>k_Þjw¯å[F:ä÷>¸ß_Þi>"‘nu¹õ ˆà2]B(­Ø.:hñÞ¿a­ÛϨJ‚Þõ\ÁbW˜û¹õÍñ÷ˆäø‹ý‰©¢˜Jî*"z÷Ç­k?‹uoøžmÃ’ý–ÎÔÿ¤^íÏ>Š+מ%¿ø“oá»kçhmI°|Ø>¿•küqÕ¤³ðWö|3ßÈ#zu?áø×QðûCð^ŸbWkˆ÷8=‰ä×OQβ4,,B¤+€ö¯ Öüeã_øö×I¿Ô#¿†|2*G·9áGç[ZGŒ/ñµ£êv)Ó5âDUù` Ç'׊‰5ßéeðäšÛ^,«ˆÁŒ¥†C`zsùVƇ}âùµísFº¹¹[{t/ ô± ävôÅOð—ÄÚ¾¿²u{¿´}–-_`ÍUMSñÿŒ¯ô}/S}?LÓÆ$šÜò7¦{t4ý/ÄZŽ“ã™üª=ÇëK§p$t=¸¬‰µh¿í|=â)Îtó#˜ Ï÷J×1ø¾ûâΗgâ9ÂÝVIÉ„eIè ý9ühñ/ŠõKˆVþ´½’Á| Íq21 ¨ôkz'ÄÏøDu[ã¨C,{â™— */о ñ?…/­/,5D[©U>X%O~}*ÏŠµŸè: ø‰/!{d*ZÙSø=I=ë«ÿ„ÊÖ//Š.¬&ÜM´w$pp¶®©âÞøÇSÕ®l­@g·†Ô}ÅÌÕß üS¾ÜëÚ’»KlÆ01Ìü#ùSâÅWžI­´4&ámBúûfžÿ$»øZúý¡D¼°¶ìa¶3Xºå׈´¯ ¶¥¥xˆê}žvýÞHû¸íþ~ž½¦´¥Ú´­ºC–>¼Uª+Êþ.]ø‹Ã¶g_Òµ§†V?²„ýìš­ý£ã;Ÿ‡ñø¡usGn$þX>`ÄÇÞº¿øÌkþMz÷c%#€võ"¹¯ ÝëÿVmJk æ1ÚÇ`;š½á?jZµÞ­á‰®Âêv,È.YyaëZóÍAñÿÅ^Ù5æKèЗºÚ #Ž1Ð^û£YÝXi6ö×—Fêâ5ÃÌF7Z¿EyçÅÞx^ ,•ƒ]I‰eQ“{{×-¬êZ×ï´R^êòËQ•Vh®NJçùu®×Çþ$¸Òt[³Î- ô«\7H•‡'šæ5‹H‹M:~¹öû9îcY&ãz‚qÛ¨ÅzâcRz3N¬Zê÷z ±è×¢ÒnKÉ·'n9Ç¡¯#øIiâõ½šËQH"[Ãö–dÜÓ3“ZŸ$òx~à©"+ÄàšÐñ.¯â½ÁëâU½ª”?c ÑOë]}¯‹àÿ„/Ý !¶óX/÷±Óóâ¹oÅÚ4¾'›UšÈ¾æ¶¶‹G¯“ýjïÃOˆ/â¡u§ß…]BÑÊäË@;×¢QEQEQEQQÎ@· N xwÂUþ kòŸö‰?t¿õ{}Sᆥ4 ¨I–<žÿ0­¿‡¥§Ã[%V,¾I?§Jäþ 0øŒÇ!g’wÎ{7jÄøs¥E/ŠuÍ6êêêÆíg, o´·æ+¨Ö|!áÛOiWw7×·:«LcÌÉúŸA^©^ñŽ+Ù¼p¶™Á`%ûµ7„£´ð‡Ãy]ãP–æV ã'®Càý”·×Z÷ФÆû–qAÈzþU[À:ñ.«¯ëZ•ì‘D×/ Š @=3Øb»‹I4K}&öòÖÎ8tí07‘2œ+œr}ë‰øE—Òkþ-¸]Þc0‰½=‡éϵdøUòµMcÅ÷Ÿ¼½»¸6ÖqYŽsÀôÆ+V]6óÅ_ePwµ–Á×ýÒLôäŸÊºŸC¥iÞ(›OÑ K¨ÑïnŸæ9ôÏs\¢§¾5´éûË /…àoóÚ½OÄööú‡µ]BÞÖ1t-›ù¿:á¾Êš'ÃÛVè ’fiÏ,NxÍQøiö[MGYñ%ùÄ·7>R(PXœôûþ”Ï™|MñIÓJYØÇçÈõïþèÞ×.u»íBHÕ• ­œ\¼sÜ…t´W†xÎeºøù G·+… ÷<ÿ…z¿Š´ÿµøkS[xÐ]Inʯ·æéÓ=kÊ> h3^xnáWVº³’9Ùd‰1ÁÍo·„´}/ÄšªØ^^Ï­ßYJerAQžçƒT¾JÑhÚ¥­ÈÏû\ƒøþµ•áÝP_þÑóFa‰£wŸÒµ>2ùrxŸÂ11É79+í‘^¡¨Cæhsyh ¢Ù„dAÛÛô¯ø/¦ B ^Þ}JîÖén>hãp¤úñøWpžдoE¨=ýåæ³,.v»T`–Æ0=ÿúÕÆCðþ=λáÍj]>í¦a%²¹Ú{Ó4Yë:ŽŸáhþ&T»S¤3H7îîHïŽjŒÿ 5K}ê¾ñI§ó~Ï+ãŒgpõï‡Z´Úׂ4û»€¢]»hÀãŠêj+¤2ZL‹Õ£`1ô¯øØõŸZÎH¸¨ }j]·ºÔÿh]?ì#þ=QLÌÝ\çëŸÖ´~':¯Ä¯äãàõæ½|FAzŠZ£­@÷:ônó$ÕvžrT×ü ÒàÔ-5[©¦µšpÐÅ&ÃÇÐ×kcáŸhž8¶’ÜÜKªËï1|(õý)ßÓ_‰|+Ä×w+æžcQÜÖ/¿,RÞxNö4‚ãO‘–>Û—?­Eñr_/Å`qþ–NáתՈ±i!ñ—¡jLТi-îQ°Uøã?Ò¹¶ðv½ðû[ÒוּŸ·ÙKt°ù2@c€GçÔWKã @AñgÂq´h1¹‹ž#Ï¥túþ¦nt/B|¿"ÞÕ”6z’‡ ó\ßÀ§áò(À"g;sÍVð*¬|^’Ë´Š««IþÑ:i¸[A»ž3ÍjüQ±ƒV»Òâ¶ŽiõK'ûJEdÈÎíAã MCâ¦éösÚ[‰VK™'@ ÛÏøwÍzeªYYAkÂCEúŠž¸_жö‡…™t[í72j¨2ÅÇô¬RšõïÔðÄzd±Þ´+nevãœæ»øy|-á‹=$JehWçsüLy&¼ÍdŽ_ÚIŽðDvøÎzµìWERÒw }ß~+Ǿ 2Ímâhƒ€Ïtáyë‘X¿ txümâ 7U{ˆ.7åLÑ9žÕ×j~ðÞã]áK‹ÝZâN \hÐufÎx¨~7ér¦™§øŽ×"}:`IÝ5Ôü8Škm^./5&óŸœáq…Ó€+‰»ñÏŠ~,Ë¢ÀÑØAf¥ZáT \ dnì3Yˆl­¾?ZGÓI¼Ad–I Ëääþ·ñÉV{ Ñ”£]¯Ìr3[ßÃ/«¤‰ö‘`{Ž+žÔ4éuoÙîÕ!È–¨áWø‚ãü+áŠi× l,®9#ò™gþ¼Šã|kok«|6Ԣдámc¦Þdé&Þ¬µ×xSÚ~·à½>VÕ/Lon¾b þQÇ#•ªZxwÃ^Ô­tèM9®Ö “#ç9 lf¹ÍcákXi¬ø{Ä$Z*yÆŒc<ôË®“ðÆÓÄ:º0+ ‡UxôvÍ^ð?­ñ=ýÎöi¡¼$öù`žÞõÝÍà-OÂé¤j2KÉÝ!¹$ã¿~Ÿ©©m<ee£.CP0|îTÃÚ«ø{ᮕá@]é·—©ónxŒ¹G>¤TÚçÃí7W¾…¼ÓØ_ùonØ'ëRh>´ÑõÔn.§¿¾#kƒ’¿JꫜñGˆ¼=§ Òõ«ÄˆÝ®Ð‡’Gô®Çú]Žá%Š»»·»;bÿ(-ÐßÖ»_ø{þ¿Ùéî“né>§“Tî~iÓjW1^][ÃrÁ涉°Ž{çë[WþÓ¯¼<ú!ŒÅdãiHÎ8£BðÆ™áÝû"¶¿6Tœç5‘£ü5ðþ‰­NÖóHݲ¨Op*߈<c¯_%ùžâÎõSÊ3Û6Ödô>¿Ò®è~°Ðtæ³´C‡Ìýç'¹5_ÃÞ Ò|3swq§ÄË%Ó±Ï|ÖäðGsÁ2†ÆÖ¸®ONøu¥i×ép—rC—ŽÕäÌHÞ¡jÎàM+MÖfÔãižI$2,nÙDcÔïUuæ¹ý­ö«‹k†O.C czúéôý>ÛK²ŽÒÒ11€j£ž#4D£.¤n^£ÜW›ÏðfÂãT”ºö¨÷Šr²³ ¯ÓÚ½N°6:lVr\KtQv™få›ë\MïÂô½Æ¡¢k:[\6éR,cëƒ]‡<+káõ–A,—W“­¸˜å›ÛØ{U ¯‡šTúœ÷Öó\ÙµÁýüvïµdõȬ넚šòjö÷v— Ä´qRkŸ 4¿ê {}¨jd9l¸œçJêt-#ûIŽÃí“Ýì$ù³œ¹Ï©®gWøgay¨É©iw·:Uì¿ëÜü¯ë‘Z‚­tXî^[©ïo®SË’îs—#°ƒÚ²ãøaicjIÕ/,gÉ2K¼ÉÉÜ*Ê|6ÒŽƒ>—q4ó}¦a5ÄÎÙyX3ùUKß…¶“©·µÕõ +ÿYk€øcŽÕØé:Mž‰¦A§ØÄ"·…pª?]¢¸Ícáí­æ®Ú¶—}>•~㼓ê _ð׃l¼9,÷^t×z…ÁÌ·Sœ»{}*–¯ðÛD×5?íé/$º^cq;û¸é]¥G¢é©eóΈI;în}M_¢¹cáÞ‘ªjGPŠK‹ ¦ûòZ>ÂÿZÐÓ<%§i6ÓÇnf3Î¥^æGÝ)ÏûU‹gð»E³Ô´Åô—óÖI‰5 øGáÖÔüÉ~.·V啳õUøo ëW0Üß‹™fDÆcòc¸÷÷©o>h:ƒZIwÓKh›`wåyÎ~´Ë‡Úež±¥-ÕõãÂÅàŽæbézëÚ¯ø‡ÂO‰L/ùÐÅ,mµ—ñ¦ÍàÍãA4ÑJ֙ܨ•ƒ9õbMGáÏèþ’FÒ–x„ƒZRÃ늫mðã@³ÕŸS¶K˜®]‹3¬Çæ>þ´ÏøV>´z K±z‡"o´±oÌšäü]¥øåì4 Nk=WO€,ó©!vSêyíéY— ükâ/<—+–ǘáZ»_…Zøvâ-Tï»±¸kv“ûخâ´Úíæ•áûi^=jF2ÛÈ·Ë^äŸ|}xö¬$øMã?-U¼cqòŽ˜øÏç]ÃKýj×WÕ¼/­Üý®[WYÎCg‚ Ù—áw†e¿’ÿɹ[¹L«pÀþ•ÐO¡Ú\è£I•¦6ÁBäHC=Mch¿|?áýE/tئ†Eçi!©éþ!ð‘℺6Òí:\[6ÇüéÞð&‘á»·¼·óî/$k‹™7¹™ì+[[Ñ­µí&}:ï>LÃ ŽµnÒÖ;+H­¡Ž%£ØW'¬ü4е`ê­ö‹k¶ûÏo&ÍÕ«ð«Ãº£Û9ImÚØ -‚ÃÜÖ¶±à\±³´½ŠFŠÌ·MP¿øs¥jVQÙÝÞjÛ Ç–×Ó8ëŠÞÑô+-D‹I¶VkX”¨Yîjæ.þhÓÞ4¶÷7–pHs%´Fõãµu6zŸc£®• ºýŒ.ß-†sž¹®N…¶—öMSQ¶´v,m¢˜ªý=@ö­ëßè×Ú:<–ÀYE F G<úÖ|ß ô9¤Qºí-”ƒödœˆÏáRøÊ} Lð«Øê0$–Ò(Ž+EÈ{CᇆúÒMmöio%2ùÿV¿Â>¸®æ¹xCñ=ÑŸUK‰sNÊ£¡“ῇåÓNe»6«ÿ,þÒØ>ÇžGµ^ð߃´¯ ¬‘é‚d‰Æ<·²¯Ð³ï¾X\ê3^Zß^ØÎfKgÚ$>¦·t?éÞ²û&‰ ÜÄœ³RM`ë tkW}Nqfa÷@éTþxm´I$–Íl÷’™D-Õ°®ò°üEáÅ0¤z­¯šSî88eú͛᷆§ÑÛL6l!,¶ò_#¾O5,¼?Ÿeb-I·´rèŒs–=Iõ=é’ü>Òg–!4—2ZÄw-«I˜ó×§zê‘hF N¦ÉËFê ÷¸K„Ú¶®÷ÑKt±¼žiµb=ßJÓñ'€tŸÜ[˨<øvƈä(÷úÔ¿4­FÁ,®î¯¦F ¼Äîç<úÖ‡¼§xn mìÚf†E c–BÀééX× ´©î¤–ÖöúÆ)^i6©'­tÚ§øvÀZiðÓ9f<³ŸR{ÖQEQEQEQEQEç¾?‹u[]RÚd<¹~éÁ­-Á—Ú‘jšýÌW3À› ‚5ýÜcÔg©®ÖŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¸½SÀóÂC6¿¡j&ÆúeTdÜ’c¹ h¾=½„ÛÝkÖE!ÄoÞØžÿʺ/ xnËÂÚ:iö[™A/$ŽrÒ9êÆ¶+“ñG­üA¨ÛjÐ]KeªÚ°Ü'!²Ù­*ÛüãõÆ ×ðÇ…`ðê\JÓ½ÝõËnžêAó? öÕÐQEQEQEQEU[6Êòx'¹¶ŠY`9‰rPûUª(¢Š(¢ª]i–W·Ïsm²Âs:çoÒ­EQEQEQEQEQEQEQEQHIÀ ŸLÒÑEQEQE4º` àiÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQHIÀ`O¦ih¢Š(¢Š(¢Š(¢Š(¢Šhu'?ZuQER€HÉ¥¢Š(¢Š(¢Š(¢Š(¢ŠÇñ&“u¬éMkg¨Ía!9óbê}«Ç~>³ÄÛí2ÿQ¹º[`y”ðqÞºé>;Ÿâ µÎ›;®ŽKa†Ý½ò+Ñ5+ôÒ4yï§„ï`;♡j£ZÒ ¿Ä£!O¥hÑE6@Æ'@rÒ{ŠÉ."³‰.¤Y'Q‡uèjz*†µ©&‘£]ßÉ÷`Œ¾=p+çýVóÄZDŽNjí®/Íä÷{aŠ;"ŒÎ^ƒÿ¯^ëáo¦ð–™&¤¥o2‚1Î+GP¼]?OžñԲ…Ȩ™¥j°ø»ÃöÉæµK•!øÓÞ¼›BŸ\²øÔ4[½fæêÞ¶Ù¨#½{­QEQÕíïn´¹áÓ®…­Û/îæ+§é^5ãoxëÀ‡O‚Mn Ùnت–ƒü«¸Ò4M§ ‹ßÃçMR5·b'¡ÏVý+‚›Yø•'Ž.<9¦j°]48NcÄi‘ßÐפx?Gñm…ÝÄÞ$Öb½VP#H×WaEQEQEW'âÍ+Ä·r­Ö‹â§ÃdÉ Bqç?Jóx›Ç>6Õo­N±Öca;ŽHþ•¥âx¯áÖ¥bڥ徧§ÝɆ>^ÆAßû׬Ø]Çaow|¹£.F8#5bŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¬-ÄÐ뚦©e ,¿`”FÎO kvŠ*»qwg5¹‘ã¡MèpF{Šð¿ Ã}£|smµK«›X”²ÈNr óù×½QEQEQEQEVv½ôú ôZkì½hXBÙèÝ«’øa¦ø«NÓïG‰å‘ÝåÌ"GÜ@ï]ž§du2âÌO$ró"l2ûƒÚ¼;G·Õ4/Ž6Ú$º­åÕªÊ%˜‘‚¹éÒ½òŠ(¢Š†îsi4 #FdB¡×ªç½xŠmuo üHÑ4èõ«ë›yäˆy?7Ýô¯¡G QEQEQEQEƒâÏØxKIkÛÒYĽ]» ä¦ñgcÒ¼úE’Øy~g®L…zç'Œâº}+Æzn©áS®,ª‘,eœ1û¤v?`ø{ÄÞ'ñM´Úµ¤v–Úr“åDë— òOl⹆wm¨|Y×n¤Ü² ¡çmt:ÏüA¡øÞÇDº°·0^¸È8ÎôªŸµOÙi%Ž=:Rä'æ9ê>•»àE¥Û^ÎÒßMŽÜhß,xâ«Úø¿[ñv©{o៳Ekhv4ó©;ÛÚ®xWÆw÷×ÞÔ„qëv™oܓч Î8®Vïâ?‰´ŸßÛÛÊYq’¿xž™ýkoÁÞ:ÕµOêÕ¢‡Ì·MááRõ½&¹OøÞÓÁÖ1³Æg»œí†q¸Ö5ïˆü]¡éqëšœO§Œ4ÐDøÔ÷ϵAãÍjë\ð×Z*C5ŒÖå¥wlã·áŸÊ°~ßø hZ]’h°¾ŽIo´— sôíÍ{MyŸÆw[Ñü= °¶Cg*íšvnW<` ‹á çˆ[B±¶¼Óc‹K–Šu|³“Ï#µr×w§Nøùr©çMåm†1üLGºø>%jŠ­´_i‰mö³ˆ$‰‹}Ïjê<_âÛo i‹1_:êvÛB.Ç¥r:‡Œ ê¶ÚΞu 2;}+R“e©,|Üvf«½Ô5 ].Æ[ËÉ–("RÌÌz ó¦ñÞ¿ý§§Ý{h´«û•†X9”Ÿ¿WüAñ }='»°³Žm:Òa Äò>ܱ8!|w­Ÿø¹<5àéuÄŒHÛ‰ðIÇøÒx^Ô¼IáxuMN¡–rJ,]6öë]EÅ|UÖΉà+ù¶Í8òc#Õ«ˆøC­h^ð{>£uä]]ÊdpÊyã…RñˆÔ>+ø‚ÒÓJ²‘4›3–º•Jƒ’2Wð­wvÞ'º–fÑÕ>‘ñ6Kø’[&Ž_!c'j»ž>œŠÍÖ¼uâ Þé¨Mmx·§L0‘°qß<žkÕ “ηŽ\cz†Ç¦EUÖu8´mïQ˜¼eÈñ\Cx§Å–ú)×ä²²¸ÓÞ/5 €è1Üž¦·n|_™àh|EâVòÓ©f袰¦×¼[eáóâkƱûÑ+YFŒYPÿµžN=«¡—ƺ\^ >&2²y^`äŸOÏŠç£×|Ywáçñ4f†ÔFf[6BYzœð µ'Œõ-WÀÉâ[ÛÊꥥŽbxÇP1ß9¬ |CñO‹ôÖþÌÒ­Öæ"i$b@è©«z/ĽG\‚M6ÏNG×â‘£’2ØqÕ|Uÿ øòòãÅsx__´ŽßSUßDIWZ½«øX—Ä’hš Ï5¼K,ípÄd€Tñn³¨øÎãBÔtå¶û=¿™#È$ž0k¸®{Å÷zåž’ÒhpÂòíbï+c`Çzוü#¹ñl°^]ZÅk<7W¥®¦•ÎàxÎ+Ð|]ã94ÍRÏÃúBÇ6³zp¢Lí‰q÷Ž+*÷Åš÷ƒ5>ßÄ’[ÝÚÞ¾Á<)°¡ô5èñºËºU†Aêð+ëÉ4ïÚö[x–[–ŒМd•ŸÂ»[ŸëžñV¥kööÍ ñÂKcé[>8ñ¢øU,íãDkË×Ùšp€ú“\ýÏŽ|EásM¶ñ$VRÙß°Hçµm'§Zê€WxÚ{›Œ^¶½QæÃ2ntà?ÍÅ{íQEQEQEQ^ ñô]SJ|Ÿ³TvÜ+½¶Ñ¼Mªx]-_W²Š  ) $=ÍyÖ£áÑáχºÞ›g©›ùb|ÈcR6w=ëÑ~É|4±l©UV$gŠâ¾]EuñgÄ n¸ˆî#=¹íZ›â§…Ðc ÐAúÕÆ<+g“†¹\׫©jrÁáM?I·@Ï{f@“ûŸ)9ý+œø»4]J&âXç"@zç𬈣¹ŸöŠžKPÉ´&{eGéÈ­èÚßÍàCÀôã½zô:m”Ou ¬Iq'ß‘To©ïV«Áþ5$ÉãO"Ÿ²‡@ ÎÝÛ…zWYÃmMÛ~Êò¯:ðt/Á InŒ]\ƒí†ÿëWoðåøua¹KpNk¼¯<ø×2GðÒýXàÈÈ£þúþ¿Â§ð¶°šGƒ<-lˆ$’ò41òõý+Ž´‚9ÿhë¶À"(÷À°?ÆñUsñ+ÂûG%À?LŽi>-ÙN<]á‰|à‘,Š€°ùTç¨íÚºø;Vñ†æ³¼Öà[BAûŒ• ƒ×5£ð¶­ük ½÷ÛmãfXæÛŒ€k³¢¾qø§«}›ãEŒ¾_žmcl`rO$å^­à¯ \C,ž ÖŽýVóæÛž!^Ê>•ÜW„ß^k2ø¹5­–ÖÌÎÔcÆâ=«±Ò4 7M×.tÛ™¦½ÕõK\]p|´þî;oþµr:„'Å?í4¨û•ÝéÇcÛÒ½&ûáöƒ{©O©}—³àI6sÇc§a^o<)âß©e o±i„“a v?E®\MâoÚ+Ó40MÃp?Ì µñ _»ñe߇´22-ï¦g ì@“aî{/S] ðåž«X_ks½î¡+ˆm Œáaª¾ÝÏ?…sŸ,dºñàm<7Ù¤>vÇ,3ÉÏçGÆ+Öº¸Ð|hÛšFC(S’×°hºtZVicmXcUÇáWè¯øé&£ªhž¶q¾y<ÇQדýkÖô&ÖËGµ´DËj9@{V7Ä+ét?ê×–©2ÂBíÆxÏZÂð%ºøOáJ_L O[F×äûðm`"SÁŽ+Îüo£C ü%†ÓH»{ÛhovÍ#Ž ŸÀ+ÐtóVð]”gZu¶šØ+¢F¤ p3Ò¢xNÏ Õ,,ïÚæW}ìGËÇN+àhAà›‰2×.Iö¬_„‘©ø‹âÉsÈ—^Z’éÁý¤ìÀ'""§Ý5¡â¿Éâ^6ƒ«K§kˆŠã:Û/žmÙÐy2mȺø1õ=>+­{Ä-ìŸÌ ‘…=}k〇ûÃÑœ²´È#¸ôükÔŽi&“‚Ö'–|ÂÅyS··¥xÇ«]Zç_ñ A~–w^~eg‹{7'ŽOºÙ<ÚwlµíC_3j3þê8R»À8?­b|!Ybøâµ¹È¸2!º‘¸ÿõªMÿ|7rñ4e¿ï£þëúæ»§xwL“QÕ.Ñõb ÉìMEáÿi~'²7Z]À™á±Ô×¢Š(¢Š(¢Š(¢¹x2ׯš?Øç*T;¢”ºkš±ð÷Ä[;UÒ¿µ´ÿ±/Ê.&ßÄõ®¯Gð}†—£Ëc&nšã&yeÈÇ©ö®vÇáµæ•#ÚØëÓG¤9$ÚŒž½*†›ðŽ}Ä«išä–èî C³;—¸'ÿ­Vµß…×:ö¿±.¿ÃÒ°¦øKu7ˆ¤×?á%º[÷ãÍ8˜¯EÓ-¦³Ómí®. ÄÑ V”Œ>µn°<[áK?éÎç)"ðʽcaÐ×&Þñ>£a“¬x’9´µÀdŽ<Š:kg_ð;j^M N¾û MŒs¸UøQðt‹öÛ]éê…D ˜ ×u\ï|-‹ü;6—,žYo™û¬:å¼)ð÷\Ò%õ-e'1¬cTùcÈÀfõ 3Uí>kVž-—Äiâ–òNù]¼ {p:óÒ“Äß õÿë–z£ëÑ ­b>OÝþY®—\ð[ø“°隥ҽìDºpA¬<ãkû!¦^ø’°ÆÆ1FDŒž™íÅwšiáýßM²M°B¸þõ£Ey®™ðî{‰:‡‰õ½’¨|Z'^1Á5é@0ç:Ÿ5[/Ükž¹·‚KÄÙp³ Œúzé<9á“¢A<“Ý5Ö¡qÌ·,9Ï ôÒ²|àðÖ½«ê÷bæâþBÀãW9Åv²¡’Em¥”€}+ðWÃØ|#¨ê:½{»«ÖÜò8ÁçSTøb—þ#¼Ô¡Õ$¶·½ . 9ÛºŽ•wÄŠý´Ë½.e³¿Ó0-œ®T/Lô«Ú7†§·¾mKX¼ûu÷ð6Ý«ôQUu¯ WÄ–úæ—7Öñ˜K0ß´}þµpºNuÏŒ2H’=Í®’¿¾¹8ùç=Gáý+Úh¬Úø†êÞðýí½¬ó#J»²=«ÍæøKâkCâüAm5üdï c¦kÔìñ!]ätÜ}=«¥—F²“D}#ÉQfѼ¼p®/Oøuª[[Á¦Oâ}#ÿѦÆeþé>•·âÏÙx¯CƒH’âKKX\6ØT|ÀtÖö™§Ã¥i–Öª‚1çÐ ç|Sàˆ¼A©Zê–÷ k¨Û $Æ0ã˜?ΗJðdkK¬êú“j7ѮȉŒ"F;=O­u•â øÃ×ZZÏäÀf3Ž}+”‡ÀZæ•l¶7ˆÚ-=—kÇ4aÙG}§óý+z×ÁZd>>•LöÌ rýKÿsÖÞñ%´gN‡ÅRE¥ŽD@¾ßî†í]d^Ó#ðñÑ6Ñ”«ä¶z“ï\¤5» fÓôÿËšIÛ̲@{VÕ߃¥ÿ„Ut=3U–ÑK~öbš@zþ&²|5ðêÿºuÅ–Ÿ¯Èb•NÄ0¬‹ÿ­Us’z~5ZO„ú«x±Æsmo{O÷©â½ ¨®¢’kY#Šc Œ¤,€d©õ¯7‡á,ÖÞ!—\‹Ä·Ÿo”üò×$z{TºßÂɵÝR×P»×§3Ú¶b! ôüªç‹¾ÿÂJÚuÔZ‹[ê6*\ÎqÏ Vn¿ð¦ã[²‚Yµ§“V…ÕÖáÓåìÓñ®³Áþ“ÃzSÃqrnnçËq1.Þµ^ÛÁ±AãËŸ–Œ´°ˆÂä_å]åœö’ZÜÆ²C*•t=ÅpP|<Õ4ieƒÃÚóYé³>ãnñï)þ鮛õðÕ¬¡$yîçm÷2}éü=«z°üUá{/hï§Þ © êë\nŸðãÄTzv©âg›HŒÜF˜gQÑKWUâ?Økúe½° m0m¥QÌdt¬Gð£¬^YÉâ=\^[Y¾èíãj± zÖ׋|(þ&Ñ×L‹P{+|muD ¹}+Iøuu£xyô[OÝ¥©áqåTõó¦øWá§ü"‰{ ¶¯4–×jCÆÊŽ´ºÃË­ÝaÑ5©mÕ‡ïw¨`ǹµléþM3B»±¶»‘n®Ø´×De™^+7ŸÓÂwï-¦«<–Ò’òÁ"ƒ½|Ñðî7Ö¤ÔtJ}0ÜÇÊD}3ÐûÖU× fñk¥Åœ¨~bqÔœõÏzßñGáñ’-ÛÛj€î”|Ý*®ŸàM®¢“]×¤Ô ˆ†XmRGBÞ¸¨,ðÆ§©êWþk«›ùwîŽuùR:×®ÚÉ$¶±É4F)AhÉÎÓéRÑEQEQEQEQEQEQEQEQEQEQEQEQEQE¬øjÏ]½²žõ¤d´mël+7©õ­…UE  )h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯?ø“uâ½O›WÐÚ÷I¦IúUŸ…¾!Ôë óÿ†ž7ñ6¿âÝGH×+ö0C„^Cé^¹EQEÙ7ùm³ðvç¦kǼCãoxkÄzv›|š{Å{0TxPä Íw^:ñ5ç…ü#6«eh.gPSÐÜÒ|=ñ÷Š|+¥¨[y³WiÜWUEUC©ÙMtã:ý¬§˜"Ï;}jÝQEQA ž‚¨izÅ–³ ³XÍæ¤r4LqŒ0àŠ¿EWâj7~0O èR¤7 žæå—pG`=yŸðÓÆz¾½­êºeøiá´'˺)·v0kÓ¨¢Š(¢Š¥e«Yj3ÜCk:Èöï²P?„úUÚ+Ëþ'ø—Åú&­¦ÃáëV’ 9r±nÜsÐúW¤XI4Ú}¼— ²wZEôlsV(¢Š(¢ŠJóx›ÆÄ›ë+Í=áÑ£,²0{æ½:Š+?NÖ¬uY®â³›ÌkY<©xèÞ•¡EQEã|Cã ø†ÈÁª£Ù_\mŠ1ùG÷¯aˆ–‰ ’ š}!!T’pÉ5GKÖlu˜¦’Æo5!”Äçõçž6Ö¼meãý6×G‚C¥>ÍÅ!Ž~mǵz‚n(»¾ö9úÓ¨¢Š+/W×ôý íöFVº”E9cZ”QEQEQEQEâ¿/…¬íì.nՉȀgn=k’о4iô’Áo§Þ •á" ¸±ü*ýÅM*[››Kø'²¼ƒŸ"D ¸öõªò|V†ÇS† WG»°³¸8‚êqµOÖ»›ÍVÎÃMmBætŽÙSyv.uðÄZÞbÚŠH7Ðà¨ÅrÚ/Æ8µ½2yàÒ¤11Ì;³…%‰í[Ú7Ä}+Rð¼ÚÜÇÉŠµÁî}ªøy²jwZ Ðé ØûIqBW°­O_[^ü:Ô/"}ð=±e+Îr+ á+ÿgü-Žê8Ì¥w¶ÁÃ1‘ñ|jÚÄšTZмŒá£ÈÈýjÍ×ÅCi«)¼9©=ñÁ¢ƒÇ­z.d…£2‚TõÕ…â¯>ƒdŽš}Íá”•Ä ’¾õãŸÕ܃ÐÒ× wñT¹²Ñ´›Sì¶âHH[Ó“Öµ|%ãM7ÅöÓ=t–Û,O÷ûÔš·‹¬´ÍZ&8¦»Ôe]Â@ʯ©=«Ë~&êÂûÆ>‹ìÒ[Ü%ÇÍõ#"½7Äþ+Ó<9hŸÚ–óÉ‘îb±nP?Ú§i>*Óu ¶·§Á#YF¬V4L1ÐU âF—â :úöÊÚ쥟!æÏ xcâF•ânm&ÖÞê+˜T³ S­j^6·±Ô'³ƒO¼½{|yÍn ªÎ¾;Ré9Òõ¸u mv[Ý(ØrN:Ü×›i¡¹ø›¨j7]è@ Š! .9ê}:×oâ?‰úg†$‰oì/”JŠÊþ_Ëótõ¦\|VÒ-áŠäÙÞµ›åcÌh}3ßñW5/ˆšu¥¿eiw©" ‘ÚÕ7*)É=+[Ã^(Ó|U¦‹Ý:BÊOT>†«k~-·Òõ(´»hûQ‘K x˜eG©ô¥Ñ<[mªß˦Ï–ZŒJ­åÆJž„Ö°ï>+é:ˆ†wgw Åö‡u‘ê=ªðø‰¦G«[ØÞZÝÚ-ÉÛo<É„”ûTž<ñL¾ÐfžÚÂ{§xX«Æ>Xøêǰ®#á/ŠîF“m§.òf¹žK½Ÿ»É<œ×±Ô7WPYZÉss*Å jYÝŽZâáøƒu{o.¡cáë¹ô˜ÉÿJÜeJ¯SÓ5ÐÛÜøwûcLï£+¹RX׉è¾,žÛâÞ·ªöy¦oÙc\º ¢½ßHHÆ;˜¬–ÑçPïͬ¿½_¢¸SDz}ôOéãT¼…wN|Í‘Åì[Ö®x_Æqë·×šmÔ+k¨ÙŒÍ¸eCÞ¨Éã˽KW»°ðÖ–º³;g•¥Ø úÜô«ú7aÖloü»9SR²È–Èýýð¬ ;âí¥íýå‹éWPÝ[ŒX|î碀;ÒŠñ\iÓZè÷r^Z1ŽHPnÚ@êHè+–øUã ƒ%ËK¤ÞM.£zYå>Hò{Ÿjô½oÅñiº¬zM•±½Ô]w˜UÂí§5SÃþ>·ÕµÙt+Û9,58×w“#{õŒ¾"Zø;P··½Ó.eŠbN€mϧ&´üEâø|9¥C©Mcs=« wx†|°q×󬋊7ÚQÔ,4»û¸ÕwH"LùkêIüð+£ð߉tÿik§HY3†SÃ!ô5±Ey§‹þ+IárkK æK8±þ’2'Ó™=­ÌJKù„qŠ¥iR_5®>Òû‚…Ï8§'†Ó HfÞ0ù#ŸÖ¯x߯óx6Ú;·ÒÞæÑ€ÌŠØÚÞ•KTø¨éþµ×SC2G62¾o@qŒzõ­´ñX´ð“kºÝ©ÓÀRÞK·NÔ×='µÛ]-uÛ½&ŒpÅ„Ÿ¼T=¯ë޵Ýiz•¶¯¦Áháà™C)­3mFlg8ëçÿx·[Õ<{£ÙI£O VÓy±[Ÿ¿.;ײišôÒx~][X²m1cÜY$9!G~+™·ñ§ˆ5»;[DÒ¢m.-ÞY™°óc¸…ox3Æ6ž/ÒÚâåÜDvÍ ê‡üŠéh¢Š(¢Š(¢Š(ªZ¸C¤]ïû¾S*ñ_6òëZÍðU,‡}‰¨¼NV¶åA]«¼Sø×Iñá!OY±ç*‡ðý+â½ÅÒ|6ÐÒ7cDƒÔWOaiâKÀñi¶öV)o-·–¬dìG^jßÃÏj^ð­þª\[Ïåïeòd ´c¡ôï\—Á=.ÃP¶ñ ’-ë<Ígºÿ’j—Æ-"ßÃN¥éy6RÎYÓwÞl÷®ªÿMñn»àõÑb°±[i ²4Ç¥A}¢Þøà…æ™sÒÁ ѾGÓ5µðn ¿lŽíÁ‹{÷¯=ñÄrx#âÕˆrÚÝ0‘Ï×ô¯JðQ]kUÔ¼DÀ2ÊÂ(î¯Ï5ÛÔW_ñé7ýsoå^5ðjíF±â…Ùó †eã¾MGðîâãQø½¯Ë| MUwpUAãω—RØü\ðì¶¡„„Û{‚zS>$"Íñ_Ã%˜¦ð¤íãñ^˜þÒ$ñL~!dczˆý“Ž:WQEx×ÇÔ §håck±’8ϵzN—¨ÛZÛi–36Û©à¸ë^]ð÷M‰þ1x’v>a…˜¨aÓ-×ô«+h£øñ¢¸o#’=NzÖGï.ï>7i6‘IJ‹` P³`3`Ÿ¥müKÒüUâ2bÑ£¶KiO3í–:צxkÎÓ…Ã+L PåNA#޵¥.ß)ë´äú ñ/Gecã½mü.'Õ7îd1±ìO$óíG‹ÑiãOÉvÉoÜ~óåS¹±øTž¸“PøÝ®ÍtæI#‘2:(=¿*‹âÔ ~'xZE ;8ðaÖ½ â*!øi«‡Á?d8'žqY_¯ÂË]Ê2VOƹï,$o°ìçß“Š< !üQ·;öž1ÐñŸ×5¶|[ x³YÖ<0±_iÏ&g‰Žâ®ÇZÓø[â85ojðϧ5…üà<…88x–Š>-ßûÏ-”r3éŠoÇ&·Ô<msnèÊ.—kcr§¯XCmð>x„JéààŒóŠgÁ«4_†±;¦Lá·3|Ù‰ðD˜î¼P‘‚±GrB/¦ ÿëVoÃÛýJÿ⇉õf&¹.Wl·`ÉÆ?]>¡áŸê4¯Çk ´1 ŽáVläsþ5‹ñ&Þ¯‹þ†X¦ì÷ùªÏÇ’"Ót2ª¥à!±ÓŽ•ØøÞV? µ91–6û|£5‹ðçTµÐ~é—“£ïåáG%‹`W¥)Ü úŒ×—üv¹º‡Àé¹`’ÎRjé|!IðËMΞ8ê>ïZáþÝNðë–…Ý­â¸Ü¹Á=j? 0´ˆT†Œäؽ¢Š£¬Ë$-ì°²¤,TúWüCwˆngÜgž`Q×üMmAàx<qâ-^ËPk‹û›g1BÕ“XW\o \K§}Œ¹c/žÄ¶ï|WAáêº'Ä‹Í^öú×Ë¿Fco9$tü+žðÆŸ ×ǽj@„¬1r:5èW>Ó<; ë·|^\·Q¼²³6yÅrŸï-t¿‡ß\eQ'rì={UMz=.ãâíÖ˜·7ZÀŒj(‚çñéUsrß´»‰D‘û§®~µ¥ñá´=ççûrŒ{`×U㯗á~ 9ûîÖ_Âë·øU彊Fo~µ‡ð!™mõ؈ÀDŽ8ü+Øh¯9øÛï‡o„’=ÇÐns–vñ|%†(ø‰¬Ë1Ç<®OÖ¼Ïáî£xŸ [ZÁðþÙm¥óUÝ˶1–'Ÿðü+“øk4Ð|Yñ5šÖÎîç¯ô«:6ÁûBë swà-?ãU¤WÞIŒaZè) ü@‘šÔøÁg|:XWljŽ9ÛžÕµn@øM‘ò–2ÌØêkšøEsðɯfV(%b@êyíT5Ë?Eâ½CZðuÌsyŒ>×nO!€éî*o†šýÔþ2¿¶ÖtÓc«]E½¾]¡Âú õêà¾2cþž§“¹ÿ¡ ­à/ iz¿Â­&ÎþÙdŠE06sšã.>Ýÿ óì–ë‹hBZ,ßsnÞߎk©ñ§„|IâI,.n.ôûQe(q*–Î3ôªÿa·—Pð²Ï(óueç† Š»ñmt9´}:×T3›‡”}–8~ó7W5ñ<ÞÃáoGy @‰qÔ \€sßë^“â+»y¼ ª,3b³Ãc¨ùx®ká}ý¾ð®Öúem)ÎK`:Ëø±ÿ#׃A$Ì}±È®ÿÆÚ*ëþ¿±.ÑÇB:W–ü9¾¸ñ›¦xjíœ:åžAŸáCòƒøÿ*½ñúk…Òt¸Q±lfÝ"ö$tÍt—šGˆõÿf+X-½Í°]ù<:Õï†z%LJ¼0tˋȮZXˆä(ô®Î¼kƽÏÇ}€ò¡WþuÐ|]¾2øS·³”´‘mªç…=_ødзÂý/gÜçv=yÍy—Á¶¸uu€“hË!qØ|ÿ.}EQEQEQEsž0¸×bÓ Z&›ëÌ¥;íÛžõç?ü#ãßÜÊöVM Óf@Ó`¯ÒKÀþ3¿ñÄ~(6Ö ð/4üÃ×¥^ñß…Á<¸—w¹Ç&¶ëÄrkQéÿñ$‚§' %l+Ï~ø;ÅþÖong&Þöc$ÃyÜ 9ãŠÔÖ¼'ªhþ+oxr¸šUÙ=±m»Ç¨>µ“àíK\ñjx£Ä¶ñA,K¶ÞÙw—êO­s¾0ð‡Ž5¿[ëYÚ¬ˆ¯›’àzתxnãW¹Ò•õ›U¶ºÎ +gŠØ¢¼óâß„u?h–ƒIU{›Y¼Ð„»óªþÓ|S=ÙÕµm:+yí-¼›[bùÜÜrOjÏð—…|c¡øÓPÖï-ìÙ5|ÅI ÙÎxâ«ëžñ¦©ãËO.Ÿd>ÊV> =ñïZÞ9ðF«®>—â-9"‹\²ÁhAáýƒž´Ë©üuâ»c¢Üh‰¥Û¸âíæ @î^kÑtË´½2ÚÂLvñˆÔž¤ –î´ÚKJùˆW דøOÀž+ðn§¨ÛØ5”¶W­Ÿ=؆O|µ_Mømâ-+Ä·ñE,i—ò¤’܇àäŒ}}ëwQð†©¡xÌø—Ãð%Éž?.âܰBO¨í\÷‹¼âïx‡N×[‰àmÞSIÂrO\×oã³tŸ uCz#ûH´o3aùsŽÕ[áyŸ tä'†WükCð¿Šü¯jðé6Vóé·ò™#•¤ bϨÅTð§ƒðмk”>^ŸÛ8“sHNãŽG¥u'DÔ5¯\躯—oq<-bmÁGc\w‡ü╵Ót=Q-“KÓç ²Òí9_å^´JÉñ'‡íÍ;ØÇÒºhšÌwsêúíÄSj/H£‹îB=k‹Ñ¼%ãmÆ:޹V½éÃ.üêWÖm©hÓÙÍ„yá(øäGø×–øgÀž*Ó,¿á¸{TÑþÑçIp§.êvÐgÖ¬_xÄ:?§ñ€`nP«¤ÌAÇøUSÀ.‡Å¶Þ$°šÚæíã):»í ¸c`+OÆžñ‰4Í*ÎÞêÙE–×g•‰.à{™&·uĺ·‚G“ìbîá)]XíEƦªø{BñVƒàñ¢*XÊè¥RäpG9¬ï‡¾ñGƒg{{ˆì綺˜¼Ò$¿2~ÿ8¯P¢¼ûãL©ÃKàç–’0ƒ=Nê«à+MjëáÙ³ÌF9í@¶•Ý$c};Öÿ„ü aᯠ>@™®72ãcÖ°4½ ÅžŠçNÑíí¯4÷‘š2M­=kø;ÁrøbÆúéåŽ}jùŒ’Êßtsì 5Íé¾ñu—Žæñ<—š{MpØ‘vð8ü­ˆ> ×1 ÞÍl48î"ŸžE!G¥tZw†uÝ#W×5‹g†[‹ÉÉ·wÂ>ÿáVtjÒxüE¯4 r!0C !œ’Os]yçÄŸø«Å0>•¦=¢i² .d'vàj×ÃÍ'ÄÚ ŒzN°–¿b·‹l/Ëžôßx"ëUÕm5ýXàÕíxS'Ýqèi–ºOŒµÉ`‡Äocoa’;bY¦Ç@}cøÏÀ~+ñN¥kp·–Çc.ëeRÙ 3ïÅ_ñw‚µ¿izEÏ™m±§Èü‡#ŸÂ©x«À¾'ñG‡ã·vÇP‚Exc„P:ò{×E øRþ? ê6ZÕÄr^jù¦/ºœ`\߇¼â{(mt[ûÛA¡ÛOç~ï&I0rµMãøŸÄÞ#´Ô­/¬!ŠÁ·[Fû³Û¯í]î…§ ZËÃ%àHb.=«œðo‚?áñ·¨¶?Ó&-¢žk_Åþ´ñn‡&Ÿsò±æ9åMqúf•ñMÓ“C‰¬þ΃Ë[ÆbX/®+¸ðÞ…‡´„²G2>KÉ!êÎy&µëÍ|wà½jÿÅ$м¶Lsƶ´? \ajPëòGqw©¹{¹Ú¼ú` åì|/ãYMáí[94Ç-å\ÈÄ4A»ø×YàOÚø3L’%“ϼ·Ï9,}µu”QEQEQEQEQEQEÁü[þÜ_ÈúΓ¬€¹ƒ;¶ûb¹ ÂCãTÑlµ{¨m4Ö\Ër¥LîÓõ¯iÀ´QEQEQEQEQEdøš[ø<;}.˜…ï&1×8¯Óuík_ø{¨èW®÷zÍäÞZC°æ5'±üëØ¼%¢x[OÓ?Š€l{½mÑEQEQEQEQEQEQQÜKä[Ë.ÒÛ¶ÑÔàt®OEMgWÕF£xïok~î>ð®ÂŠ(¢Š(¢ŠòÚÌoáÖðý½¬÷Ó²8 !W>µµð¿]‚ïÃöšGÙ®¢¹´·_4Ë P{u5ßQEQEQEQEQEQEQEQEQEQEQEQEQEQE„ ï@t´QEQEQEQEQET1Ú[Ã#I#·Þe@ üjj(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦”RrTêE(E_º }-QEQEQEQEQEQEQEQEQEQEQEWžøËâ­¯ƒ¯žÞãI¼™TãÍUÂõ5Öxk]Äš ¶«MN»‚±É­EQX^$½×¬¢ôM>+Â[÷«$›p=«Î­~7̾&‡DÔ´#k3L!vó3µ‰Å{`T0<œ×–Ý|dDñ\š –‰=ÜÂSlo#¯á]þ™=Œ—–ž,™FD~`sŒdô®CÁÿ×ÅÚö£¦A§4bØ1ŽBOÎqŸJ¯Å;¥ñ¿‡/t-¦™ð²4™yäUÿ|N±ð~½e¥OlóKq´³)áœf»¤pñ«ô 3Í( Œƒ‘\•ñKMÕ¼m7†¢¶˜LŒÈ$= k½¢Š(¢Š+ÄZƧ¤‹s§h’ê~a!ü¹By\õÿëWsñžê×[]ü38ÔY‚,F@2O½t×~0×t˽¿ð´é ÏåÌ®TwàV׆|U¥ø³MºdÛ×øÔðTú[tQX¾&פðö˜oSN¸½UÎå‡Qêsþx¬ÿxÞÛÆÚmÅíµ´°¤2yd?sŠÉÐþ*Xkž7ŸÃYÌ lʳ„¯^+Ð(¢Š(¢Š(¤,HrIíB²º†V §AÈ4´QEQYÚæ£>“¤O{mc-ô±Œˆ"ûÍ\¿‚~"/Œ5kë¦Ke%¢‚ÂFÉÎqŒTz¯Äû-+Ç1xjK9]˜ª´ªz3t®ñ˜*–b’{P¬®¡”‚§¡­-QEÐê\ a¸rFyê(¢Š(¢±Õ£ñÆ®~…Á "0qèHæ­øÄZNà=&-Nö+WhU‘ù#šï,u MJÙn,çI¢nŒ‡"²õŸi:$‹ Äå®ãÉK?׬èÞ"ÒõèLš}ÊÉ´áðÊ}=+RŠ+扚IKë[ ]ü‘É'÷N쩯j´ñ$Rü=TŠPî-ÂõçÆ1ù×[ضñ¯FWeG+0_t9<û×з·0YÙMqrq)/ÆxúW5áMGÂW·)áãmö“óMå®ñ®/ÅZüyЉv!çò5Öø†÷Á\€ë2ÚF r7«v㯥^ñŠ4ï øZkË›+Ì„¬™˜¯¬¯†ºíœþ °Š}M'¾1¥RÙuN~•gHŸÄò_éSXË«M÷ŒO–>ø®ƒW×ôÍ õ¸àó>àcË}A£ø«E×£ÓEê™Ã~U³EQEó÷ŒÆßÚLàu„Ž>µîš´ÖÐi7Ov舘±~˜ÅxwÀ [ßí­bñVA§°Ú­‘ŽxÇá^½ãoé—_g»Õ!ŽL…9<zdÖ·öŸöy¿µ¨]þjœŒzÖu‹ô E¥[MRÞS“ ÷WÔûSäÔì5"øi×p]b&Ëp@8ï^{ð ‹jo+(/-Ø`søW]¢'‚äñ×Z;Ø>¦à™ D9ëZú¿ˆô Tê7±BXáTœ±ü)ti:ê¹Óob¸ØpÁO#ð¨5è]÷دuKxnrÛg¥K'‰´H®’ÕõKUŽfA»ò§j>$Ñ´™#ŽûR¶åûŠî2kF)£ž%–W†U”äY:ÇŠôMT‹R¿Žd!äãè*ÝŽ±§êvFòÎî) PK:·sU-|[ ^ÜýšÛVµ–l±_ž:ÿ*±g¯i:…Ã[Ùê6Ó̧4…sÿ(Ѽ<ñ&««J O0ã8÷¨ÆžK8îÛVµÉ÷[xæ¶-níïm’âÖdšWCEeêþ*Ò4IVËŸß·H£]ïõÀ©ô¿iºÍ›]YÜ3¼7 ¸ë‘^aªxÿC½ø­¦ãPXì´ø_Ì›v˜ö¯XÓµ+MZÆ;Û)„¶ò £Ž†­Q\þ¯ã]D¸k{ËÐ%PK")b¿\UÍÄzWˆ`3i—i:¯]§‘Z”VNµâM'Ãâ#©Þ%¿›÷7wªPøóÃwM!x^öÎâîV# ¹FÓÃZeÜPCq%ª•n;šâ|0æÃÆ:üZ•ô:¹faknža^‹—µXø=¬=ÍÆ¿¤, ¥Û˜FÜ<ÃùV/‹´[i¾5èÖ–±‹a,A¤ò€PÃ’GµÝißãÓü{sâ4ºD°ùKj©€¼ý+Î|Q§ÅௌÚn¦ °ÔHHCtÿ]§†ôo|B¾ÔÚÊ7µ²#Q°myNXŸr?­zJ€ªàK^9ð®DoˆÞ0ÜÙs(Ç>æ«xâÖ o^0@‘–ù˜ œžkSã½µ²xRÚóìÑ›Ÿµ óvØçŒþUÔÃöOxMjÚʹŠÃÍbªb8?pŸ uÄ}7PÔï­.¯oo.ä‘"/øp:t«ŸQÆúíœÚmÌ5Ó4Фð”^¾„~•£hö×u;E‰E¬`9  óÒ»| 6¤øª[MH$ú¦÷GbTGÔâ¸8nmSáEö“r‘j°FäOl›’•Ï|°°¿¹×îîmá›É¾o)ÝAØ==*·Çk;04K›hbûL×9ip1Ž{Öׯ ?øUÏvðÇö¥Xv¾<5ÑxfÎ Gáe„ÖÉ,FÄ|޹Û^eðŸÃø‹@×­§qå K Á þ!úT^2Š_Øh> KÙ e\Ê27©aǯá]'Ä)tÛ¯Gk¡XN5 rn#·e+‚;ý+¿ð-ýÞ¥àû ‹èÝ.vm8 äwæº*§«È"ó##É~þƼsàf• ýž§sw r$7,ˆŒ àœ,~UoÀ›¬~4x—N·ùlÂïޏíøÕZÖ}?ãö…Ýì2Y\DZç|„tÚ¯QŸÎ²´[_wZFÖ¶ó¡#Êç¥l|F¿Õ¼9ã+Mr 1µ #mä•vÜ“ŠÇð‡‰´kâ=µý¼M§\¼F9-ÝHÞÞ ý{ÂüYÓí.|©\Ím“Ãcr>eç±í\¿Âß X\|2’îîÜM$Ñɵ¤¶œùUÏ‚—²¯ƒuA#–ŽÖåÄy9ÂšÏøCp|EâŸëw§Í˜Èwº¹<Óò¥ÔneÑ~8ÇmoÅž¥¤ñºÜ£ðªZNƒ¥·ÇVÅ´ø šÀ1@T œ}kÙ´ß°Gj-´ï$Aòü¸±„#¶;UÊJñ/ZÉá߈º Ô.cÔ#¹ L11ÉÏNÃÿÕOølÐÚüRñ*B>Ïhw–ç9¯i2†R# Žôµ‘â=Ï_Òn-n`ŽGhÙQ™rW#µx—ë»mOñ6ƒ¨[#ÜZ»lFsž€s×µvÚ´ü:øQ<¶1,w¯F ïÔçñý*‡Ãë½>ßÀëÆŸs=Å»M!„¾â}ûÕŸ…–º›iZ¾—¬ØJ¶)!0 „ᔓÇ>•Ìü7𽮡â1D¤eU‰<ãڽí4/ ]ér%踑Ÿ{'ÝϦkÎ~ê6žñ'‰t-SËX£,È%0ãŸlWoðÖi+â ¬Óí×îÓ£ÌhIÚ§èÔQEQEQEU]N#>—u‚Y¢`1×8¯ø®ŸjÊúÎðj7nV“¸óÿÖ­¯ˆQêpü8±Ò#²»šîá¼×¡p£9ç¿ ø’m3áì0Ë¥_½ÊÅåyi'$zV'ÁÈo­ ÔôOK»ïä2I ªGLÿž”¾‚÷áoˆµ+­>êçJ»2 àMøö WQ º¯ŒêÞ[ÉæÆT; õ®^ü|h>#]Qk D¡ ƒ€?¡©µ[-SHø¿.½s£Ýߨ:)áC #Ç®bøõ¸¾"[ëóiBÞh8"DÜËœàtë]‹ïüSá‡ÚdzX™n™˜Ì™çßxïU¿ðmε¿íΧ~õÁÇj騢ŠÀñ7Š­ü0–íqgysç’[E¿zׂxÆãUÖ¾"YøŽêIg 9€’@>Õ¬õËÕ±†ÎöD[ÉšEÙ5gÆVº…ï„u+})ŠÞ¼$Eƒ‚OµyG®'²ð=燣Ñ8‘Fˆ“ܱÿÜ ök)gáÙ,înšê#ŽËu^3éÖ¼ÿàõÕׇ´K­;SÒï •æi×0’6㱬½PžßãEþ»6‘¨%•âùQ³[°Áàdú*H£Ô|=ñ‡PÔµm:ëPŠT?fxb2m'Ž+/S“Y°ø.¹s£]ªÞZ˜íãUåIÇC[tíPxgÂöÉisw5¹G¢Fbç­^øƒ¯l|<þ̵ҵ¸*›v+Ç9ÆŸáÏG¥ü5KŸN¿ûTVÆ«±Úªü 4-OE¿³¹‰å‘œ‰beÇSMð»¿Â­gTÓ5K‰4Û‰|Ë{¨£,6öõÙèþ Ô%ðïŠõ=4ÙËæÝ]«Ét÷e$àš—^ºÕgøËi­Ã¢êOah,ë`òyW¸Dþl)&Ò»Ô6Qšó¿ŒÞ:σ^î ›æ©>ësáΙ.›à«pí%ÌëçJîyb~¾Ø®®©jڈҴɯZ§ ùp®çnÜ ñŸ†FþÏÇÚíî‰z¤¤Ã#ÂT ÉûÙö©—i3H³¤æ¸}£9«þÕdñv66“skeöO)åv–lcW1àíB†¢ïCÕì.¤·Y™àž‹†ût®ÃKÕõ=Núç^{Kˆt¨!+¹_ÞL{¶ÞÞÕÀè—öÿoüI>‡¨Åav¾\DÄr:Gá]×Å7QÖ| q–¥;\¢õeêEyþ•s{wð Øh7°_Αá* î=Iþ´ÿ…k©^\XXýŠêÞßO‚d™äUÙ—ãRøTjžþý•v×—·-äT%0xÜOLµ«ñcš…׆4itûf¸m1”¼QŒ’8è? Ãñο{ãý–×E¿Š(–g‹œ`LóøWUáý—áÒ[Ýiš€žÚoåù –;qÇ:ÖGÁ{é´Ûk&÷L»·žâá¥VhX.:òH­/‹^¾Ô¥Ó5ý2>ãMpïêÊxúZ¾>#é·ZZÃaeu>¦ê[ˆH!ñÜãךë|7kyg¡[E¨LeºÆéúžÕ«\ÿŒ5tÒô9×Èžig’5†2Ü‘ŽÕæßîo¼7§j6Z–•{Ë;\)òŽ6ã×ð£ÂRê0ü[Õ5[ú+ÅÙ­ ëÇ_Oþµ&—e¨è_uMCSÓn®¡¹ZʨYGB=±YZ¯ˆl¾$Ýë7:UÖýFؤ Ýå’0 ‘ÆxÏã]„·Þ*°ñ%¼&Ê{½*ÖÅ>Ò»s¹ÏR=O+"X­<[ã"MD¸³’ù×7/ Œc=ëÙ¨®âΡ*xFëJ¶±¸º¸½Œ¢c-·ÜÖõÉ´o‡#MŸJÔÔ(Ñ„ìNON;zà¼wVVZ®“¨Ø][¼ò´£Ì‰•pF1’)4Ky>x«YkËi_I¾"He‰K`çîœtëV%×!¹Òî%¹Ö¢m§[@ÙÝJ§> Uš+ÆuŸ ‡øåe,*DÆ.'q{ÿ:ô¯hø—ú\œc;ÃEy÷üW/„´DÐ5Í>ñnmÇŽÞ`íÈ®¾ÏWÕK½×5 Kƒ   {\¸_\zšà>ÜêzOˆõQ¢ê&§8h `«Éëž•íµá_¼×>4Ñïm>C~â 6ps‘“ùf½¾ÒÞ;K8má@‘Ä@Æ5QEQEQETf‰$Ä™=NÑRQE#*°Ã(?Q@Fz Z(¢Š(¢Š(¦ª*çjž¸iÔRRA* ñHè’ :«B3N€0(¢Š) «crƒQAŒ1é@U!@>¸¥¦„U$…Qôyi¸¶ÅÉêqIåF*}…AÆ@$zŠZiE$ ‘ߥAÆ@8 ¨=@?Z@Š:(AJAÈ¥ ŠßyAúŠp) hz¢þTSÕAúŠ] .Ü zR**çj…Ï §R`g8õ¥®[â‰.¼)á;NÊ–á*+ ¯'½pÃÆóxãÚFŽ#_íJU7I"(ä‘Û"½zVÞáA…E °©(£QE"ª¨Â€°¤dVûÊÔR€` ¥¢“¦)BaŠ]£vì úâ–›±q£JP pØRQÐ}qN#=j%¶zC·\…Ô´PFh¢ŒRmÎGzZ@¡z>‚–ŠB 2:RÑMdGuVã4ª¡TÐ † 2:RÑE&sš © •އ´QMòãó<Í‹¿ÝŽqõ§SJ!`J‚Gr)ÔW—üKñö¯áoiv|1ùSᤒAÁÉÆ3ÐQ¥ßË㯈6÷ÑFN“¤Ä@“W˜õǯzõ (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¡»´·¾¶{k¨RhddqEgi>Ðô)Z]3L¶µ‘† Ƙ$}k^Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÏÕ4M7Z…bÔlá¹E9EÎ*{+ M:Ü[Ù[Eo葨QúUš(¢Š(¢Š(¢ŠÿÙleptonica-1.70/prog/livre_hmt.c0000644000175000017500000001262712242266166014630 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * livre_hmt.c * * This demonstrates use of pixGenerateSelBoundary() to * generate a hit-miss Sel. * * (1) The Sel is displayed with the hit and miss elements in color. * * (2) We produce several 4 bpp colormapped renditions, * with the matched pattern either hightlighted or removed. * * (3) For figures in the Document Image Applications chapter: * fig 7: livre_hmt 1 8 * fig 8: livre_hmt 2 4 */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; /* Patterns at full resolution */ static const char *patname[3] = { "", "tribune-word.png", /* patno = 1 */ "tribune-t.png"}; /* patno = 2 */ int main(int argc, char **argv) { l_int32 patno, reduction, width, cols, cx, cy; BOX *box; PIX *pixs, *pixt, *pix, *pixr, *pixp, *pixsel, *pixhmt; PIX *pixd1, *pixd2, *pixd3, *pixd; PIXA *pixa; SEL *selhm; static char mainName[] = "livre_hmt"; if (argc != 3) return ERROR_INT(" Syntax: livre_hmt pattern reduction", mainName, 1); patno = atoi(argv[1]); reduction = atoi(argv[2]); if ((pixs = pixRead(patname[patno])) == NULL) return ERROR_INT("pixs not made", mainName, 1); if (reduction != 4 && reduction != 8 && reduction != 16) return ERROR_INT("reduction not 4, 8 or 16", mainName, 1); if (reduction == 4) pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 0, 0); else if (reduction == 8) pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 0); else if (reduction == 16) pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 2); /* Make a hit-miss sel */ if (reduction == 4) selhm = pixGenerateSelBoundary(pixt, 2, 2, 20, 30, 1, 1, 0, 0, &pixp); else if (reduction == 8) selhm = pixGenerateSelBoundary(pixt, 1, 2, 6, 12, 1, 1, 0, 0, &pixp); else if (reduction == 16) selhm = pixGenerateSelBoundary(pixt, 1, 1, 4, 8, 0, 0, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/pixsel1", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ pix = pixRead("tribune-page-4x.png"); /* 4x reduced */ if (reduction == 4) pixr = pixClone(pix); else if (reduction == 8) pixr = pixReduceRankBinaryCascade(pix, 2, 0, 0, 0); else if (reduction == 16) pixr = pixReduceRankBinaryCascade(pix, 2, 2, 0, 0); startTimer(); pixhmt = pixHMT(NULL, pixr, selhm); fprintf(stderr, "Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ selGetParameters(selhm, NULL, NULL, &cy, &cx); pixd1 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/pixd11", pixd1, IFF_PNG); /* Color each instance at 0.5 scale */ pixd2 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/pixd12", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixr); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, cx, cy, 1); pixWrite("/tmp/pixr1", pixd3, IFF_PNG); pixa = pixaCreate(2); pixaAddPix(pixa, pixs, L_CLONE); pixaAddPix(pixa, pixsel, L_CLONE); cols = (patno == 1) ? 1 : 2; width = (patno == 1) ? 800 : 400; pixd = pixaDisplayTiledAndScaled(pixa, 32, width, cols, 0, 30, 2); pixWrite("/tmp/hmt.png", pixd, IFF_PNG); pixDisplay(pixd, 0, 300); selDestroy(&selhm); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); pixDestroy(&pixs); pixDestroy(&pix); pixDestroy(&pixt); return 0; } leptonica-1.70/prog/hardlight1_2.jpg0000444000175000017500000000330311004507774015430 0ustar dandanÿØÿàJFIFÿþZ CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ uÊÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?åüTâ²×?ì!?þŒjÌCÍXCS!æ¬!©ÐÔÊjU5(4ðiÀÓÁ§ pà)vÒm¦‘IIFhͤͯrÐä]Ó?ëÒ/ýWÍ+?ñYkŸö¸ÿÑYhjt5:5NS¡©ÔÔªÕ(4ðiàÓÅJ‚¥TÍJ#ö§yTÒ•.*#M4™¤Í&hÍ.kÝ4ù4Ïúô‹ÿ@ó'‹üVzïý„.?ôcVZš¦Fæ§F©Ñªuj•Z¥ R©ÔÉ֬ƹ«qDM[Žß4ÿ³qPÉ*¤‘ãµVqŠ€ši4ÜÑšMÔn¯xðÿü‹z_ýzEÿ  ùŧþ+MwþÂ7ú1«)MJ­S#TèÕ:5LÍL­R«T¡ªT5j1š½g«mqZÚûTÆÓŽ•J{lY—`ô¬ÙF ªnqQ¦–¤ÝIºÕïžÿ‘kJÿ¯8ô_0ø¹¿âµ×¿ì#qÿ£²TÔªÕ25LÍLÍLÍL­R«TªÕb6«ö­Ka’+~Ê<[0Ä6Š¢ª71€ a^.3X—T%j®ÍL/M/FúMõô‡yðÆ“ÿ^pÿè¾^ñyÿŠÛ^ÿ°ÇþŒjÉ¥SR«TªÕ2µL­S+Ôªõ*?5b6æ¯@ý+ZÑÆEtv.8­¸\m©™Æ*…Ôƒ¹Ûé95‡s'&³e~jzŒ½4½!zC%}á®|-¤úr‡ÿ@ò÷‹ÏüVúÿý„n?ôcV@4ðjEj•Z¥V©•êUz•^¥Gæ¬FüÕÈdéÍiÛÎÖÝØæ¶ ½ëSµèÇZλ½kîë$ÖDódžj”’qP3Ôeé ÓKÒo÷¯¤|3Ï…4úñƒÿ@òïŒüVúÿý„®?ôcV84ðiàÔŠÕ"µJ¯R«Ôªõ"½N’{Õ˜åÅ\ŠãV„7„Í_‹PÇz{j$޵RkìçšÎ–ë$óT¤›5Yä÷¨LžôÂô…é¥é ×Ó>çÂ:/ýxAÿ¢Ö¾\ñÿŠã_ÿ°•ÇþŒjÇœ <xj5<5H¥Wâ¤R+ÔË.*t›:\c½L·G=iMÙõ¨Þäžõ]çÍBÒÔ&OzazazBôÒô…ëê sàýþ¼ ÿÑk_.xÄÿÅo¯ÿØJãÿF5cNœ 8xj5<5<=Hžœ²{Ô¢ZxšŸç{Ñç{ÓLÞõ–˜d¦=é¥é¥é¥é¥èß_TxOŸèö·ÿÑk_.xÇþGþÂWú1« #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" static PIXA *PixSavePlots1(void); static PIXA *PixSavePlots2(void); int main(int argc, char **argv) { char fname[256]; l_int32 i, w, h, nbins, factor; l_int32 spike; l_uint32 *array, *marray; NUMA *na, *nan, *nai, *narbin; PIX *pixs, *pixt, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Find the rank bin colors */ pixs = pixRead("map1.jpg"); pixGetDimensions(pixs, &w, &h, NULL); factor = L_MAX(1, (l_int32)sqrt((l_float64)(w * h / 20000.0))); nbins = 10; pixGetRankColorArray(pixs, nbins, L_SELECT_MIN, factor, &array, 2); if (!array) return ERROR_INT("\n\n\nFAILURE!\n\n\n", rp->testname, 1); for (i = 0; i < nbins; i++) fprintf(stderr, "%d: %x\n", i, array[i]); pixd = pixDisplayColorArray(array, nbins, 200, 5, 1); pixWrite("/tmp/rankhisto.0.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/rankhisto.0.png"); /* 0 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); /* Modify the rank bin colors by mapping them such * that the lightest color is mapped to white */ marray = (l_uint32 *)lept_calloc(nbins, sizeof(l_uint32)); for (i = 0; i < nbins; i++) pixelLinearMapToTargetColor(array[i], array[nbins - 1], 0xffffff00, &marray[i]); pixd = pixDisplayColorArray(marray, nbins, 200, 5, 1); pixWrite("/tmp/rankhisto.1.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/rankhisto.1.png"); /* 1 */ pixDisplayWithTitle(pixd, 100, 600, NULL, rp->display); pixDestroy(&pixd); lept_free(marray); /* Save the histogram plots */ #ifndef _WIN32 sleep(2); /* give gnuplot time to write out the files */ #else Sleep(2000); #endif /* _WIN32 */ pixa = PixSavePlots1(); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/rankhisto.2.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/rankhisto.2.png"); /* 2 */ pixDisplayWithTitle(pixd, 100, 600, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); /* Map to the lightest bin; then do TRC adjustment */ pixt = pixLinearMapToTargetColor(NULL, pixs, array[nbins - 1], 0xffffff00); pixd = pixGammaTRC(NULL, pixt, 1.0, 0, 240); pixWrite("/tmp/rankhisto.3.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/rankhisto.3.png"); /* 3 */ pixDisplayWithTitle(pixd, 600, 100, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixd); /* Now test the edge cases for the histogram and rank LUT, * where all the histo data is piled up at one place. * We only require that the result be sensible. */ for (i = 0; i < 3; i++) { if (i == 0) spike = 0; else if (i == 1) spike = 50; else spike = 99; na = numaMakeConstant(0, 100); numaReplaceNumber(na, spike, 200.0); nan = numaNormalizeHistogram(na, 1.0); numaDiscretizeRankAndIntensity(nan, 10, &narbin, &nai, NULL, NULL); snprintf(fname, sizeof(fname), "/tmp/rtnan%d", i + 1); gplotSimple1(nan, GPLOT_PNG, fname, "Normalized Histogram"); snprintf(fname, sizeof(fname), "/tmp/rtnai%d", i + 1); gplotSimple1(nai, GPLOT_PNG, fname, "Intensity vs. rank bin"); snprintf(fname, sizeof(fname), "/tmp/rtnarbin%d", i + 1); gplotSimple1(narbin, GPLOT_PNG, fname, "LUT: rank bin vs. Intensity"); numaDestroy(&na); numaDestroy(&nan); numaDestroy(&narbin); numaDestroy(&nai); } #ifndef _WIN32 sleep(2); /* give gnuplot time to write out the files */ #else Sleep(2000); #endif /* _WIN32 */ pixa = PixSavePlots2(); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/rankhisto.4.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/rankhisto.4.png"); /* 4 */ pixDisplayWithTitle(pixd, 500, 600, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); pixDestroy(&pixs); lept_free(array); return regTestCleanup(rp); } static PIXA * PixSavePlots1(void) { PIX *pixt; PIXA *pixa; pixa = pixaCreate(8); pixt = pixRead("/tmp/rtnan.png"); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnar.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnai.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnarbin.png"); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnabb.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnared.png"); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnagreen.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnablue.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); return pixa; } static PIXA * PixSavePlots2(void) { PIX *pixt; PIXA *pixa; pixa = pixaCreate(9); pixt = pixRead("/tmp/rtnan1.png"); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnai1.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnarbin1.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnan2.png"); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnai2.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnarbin2.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnan3.png"); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnai3.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); pixt = pixRead("/tmp/rtnarbin3.png"); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt); return pixa; } leptonica-1.70/prog/Makefile.in0000644000175000017500000050455312274452340014540 0ustar dandan# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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@ 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@ @ENABLE_PROGRAMS_TRUE@bin_PROGRAMS = $(am__EXEEXT_1) @ENABLE_PROGRAMS_TRUE@noinst_PROGRAMS = $(am__EXEEXT_2) \ @ENABLE_PROGRAMS_TRUE@ $(am__EXEEXT_3) $(am__EXEEXT_4) check_PROGRAMS = $(am__EXEEXT_2) TESTS = $(am__EXEEXT_2) subdir = prog 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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config_auto.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = convertfilestopdf$(EXEEXT) convertfilestops$(EXEEXT) \ convertformat$(EXEEXT) convertsegfilestopdf$(EXEEXT) \ convertsegfilestops$(EXEEXT) converttopdf$(EXEEXT) \ converttops$(EXEEXT) fileinfo$(EXEEXT) printimage$(EXEEXT) \ printsplitimage$(EXEEXT) printtiff$(EXEEXT) \ splitimage2pdf$(EXEEXT) xtractprotos$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" am__EXEEXT_2 = alphaops_reg$(EXEEXT) alphaxform_reg$(EXEEXT) \ binarize_reg$(EXEEXT) blackwhite_reg$(EXEEXT) \ blend3_reg$(EXEEXT) blend4_reg$(EXEEXT) \ colorcontent_reg$(EXEEXT) coloring_reg$(EXEEXT) \ colormask_reg$(EXEEXT) colorquant_reg$(EXEEXT) \ colorspace_reg$(EXEEXT) compare_reg$(EXEEXT) \ convolve_reg$(EXEEXT) dewarp_reg$(EXEEXT) dna_reg$(EXEEXT) \ dwamorph1_reg$(EXEEXT) enhance_reg$(EXEEXT) \ findcorners_reg$(EXEEXT) findpattern_reg$(EXEEXT) \ fpix1_reg$(EXEEXT) fpix2_reg$(EXEEXT) graymorph2_reg$(EXEEXT) \ hardlight_reg$(EXEEXT) insert_reg$(EXEEXT) \ ioformats_reg$(EXEEXT) jpegio_reg$(EXEEXT) kernel_reg$(EXEEXT) \ label_reg$(EXEEXT) maze_reg$(EXEEXT) multitype_reg$(EXEEXT) \ nearline_reg$(EXEEXT) newspaper_reg$(EXEEXT) \ overlap_reg$(EXEEXT) paint_reg$(EXEEXT) paintmask_reg$(EXEEXT) \ pdfseg_reg$(EXEEXT) pixa2_reg$(EXEEXT) pixserial_reg$(EXEEXT) \ pngio_reg$(EXEEXT) projection_reg$(EXEEXT) psio_reg$(EXEEXT) \ psioseg_reg$(EXEEXT) rankbin_reg$(EXEEXT) \ rankhisto_reg$(EXEEXT) rasteropip_reg$(EXEEXT) \ rotate1_reg$(EXEEXT) rotate2_reg$(EXEEXT) \ rotateorth_reg$(EXEEXT) scale_reg$(EXEEXT) \ seedspread_reg$(EXEEXT) selio_reg$(EXEEXT) shear1_reg$(EXEEXT) \ shear2_reg$(EXEEXT) skew_reg$(EXEEXT) splitcomp_reg$(EXEEXT) \ subpixel_reg$(EXEEXT) threshnorm_reg$(EXEEXT) \ translate_reg$(EXEEXT) warper_reg$(EXEEXT) \ writetext_reg$(EXEEXT) xformbox_reg$(EXEEXT) am__EXEEXT_3 = alltests_reg$(EXEEXT) adaptnorm_reg$(EXEEXT) \ affine_reg$(EXEEXT) bilateral1_reg$(EXEEXT) \ bilateral2_reg$(EXEEXT) bilinear_reg$(EXEEXT) \ binmorph1_reg$(EXEEXT) binmorph2_reg$(EXEEXT) \ binmorph3_reg$(EXEEXT) binmorph4_reg$(EXEEXT) \ binmorph5_reg$(EXEEXT) blend1_reg$(EXEEXT) blend2_reg$(EXEEXT) \ boxa1_reg$(EXEEXT) ccthin1_reg$(EXEEXT) ccthin2_reg$(EXEEXT) \ cmapquant_reg$(EXEEXT) colorize_reg$(EXEEXT) \ colorseg_reg$(EXEEXT) compfilter_reg$(EXEEXT) \ conncomp_reg$(EXEEXT) conversion_reg$(EXEEXT) \ distance_reg$(EXEEXT) dwamorph2_reg$(EXEEXT) \ equal_reg$(EXEEXT) expand_reg$(EXEEXT) extrema_reg$(EXEEXT) \ fhmtauto_reg$(EXEEXT) flipdetect_reg$(EXEEXT) \ fmorphauto_reg$(EXEEXT) gifio_reg$(EXEEXT) \ grayfill_reg$(EXEEXT) graymorph1_reg$(EXEEXT) \ grayquant_reg$(EXEEXT) heap_reg$(EXEEXT) \ locminmax_reg$(EXEEXT) logicops_reg$(EXEEXT) \ lowaccess_reg$(EXEEXT) morphseq_reg$(EXEEXT) \ numa1_reg$(EXEEXT) numa2_reg$(EXEEXT) pixa1_reg$(EXEEXT) \ pixadisp_reg$(EXEEXT) pixalloc_reg$(EXEEXT) \ pixcomp_reg$(EXEEXT) pixmem_reg$(EXEEXT) pixtile_reg$(EXEEXT) \ projective_reg$(EXEEXT) pta_reg$(EXEEXT) ptra1_reg$(EXEEXT) \ ptra2_reg$(EXEEXT) rank_reg$(EXEEXT) rasterop_reg$(EXEEXT) \ smallpix_reg$(EXEEXT) smoothedge_reg$(EXEEXT) \ string_reg$(EXEEXT) webpio_reg$(EXEEXT) wordboxes_reg$(EXEEXT) am__EXEEXT_4 = adaptmaptest$(EXEEXT) adaptmap_dark$(EXEEXT) \ arabic_lines$(EXEEXT) arithtest$(EXEEXT) barcodetest$(EXEEXT) \ baselinetest$(EXEEXT) binarize_set$(EXEEXT) \ bincompare$(EXEEXT) blendcmaptest$(EXEEXT) buffertest$(EXEEXT) \ byteatest$(EXEEXT) ccbordtest$(EXEEXT) cctest1$(EXEEXT) \ colormorphtest$(EXEEXT) colorsegtest$(EXEEXT) \ colorspacetest$(EXEEXT) comparepages$(EXEEXT) \ comparetest$(EXEEXT) contrasttest$(EXEEXT) \ converttogray$(EXEEXT) convolvetest$(EXEEXT) \ cornertest$(EXEEXT) croptest$(EXEEXT) croptext$(EXEEXT) \ dewarprules$(EXEEXT) dewarptest1$(EXEEXT) dewarptest2$(EXEEXT) \ dewarptest3$(EXEEXT) dewarptest4$(EXEEXT) digitprep1$(EXEEXT) \ displayboxa$(EXEEXT) displaypix$(EXEEXT) displaypixa$(EXEEXT) \ dithertest$(EXEEXT) dwalineargen$(EXEEXT) edgetest$(EXEEXT) \ falsecolortest$(EXEEXT) fcombautogen$(EXEEXT) \ fhmtautogen$(EXEEXT) findpattern1$(EXEEXT) \ findpattern2$(EXEEXT) findpattern3$(EXEEXT) \ flipselgen$(EXEEXT) fmorphautogen$(EXEEXT) \ fpixcontours$(EXEEXT) gammatest$(EXEEXT) genfonts$(EXEEXT) \ graphicstest$(EXEEXT) graymorphtest$(EXEEXT) \ histotest$(EXEEXT) iotest$(EXEEXT) italictest$(EXEEXT) \ jbcorrelation$(EXEEXT) jbrankhaus$(EXEEXT) jbwords$(EXEEXT) \ lineremoval$(EXEEXT) listtest$(EXEEXT) livre_adapt$(EXEEXT) \ livre_hmt$(EXEEXT) livre_makefigs$(EXEEXT) \ livre_orient$(EXEEXT) livre_pageseg$(EXEEXT) \ livre_seedgen$(EXEEXT) livre_tophat$(EXEEXT) maketile$(EXEEXT) \ misctest1$(EXEEXT) modifyhuesat$(EXEEXT) morphtest1$(EXEEXT) \ mtifftest$(EXEEXT) numaranktest$(EXEEXT) otsutest1$(EXEEXT) \ otsutest2$(EXEEXT) pagesegtest1$(EXEEXT) pagesegtest2$(EXEEXT) \ partitiontest$(EXEEXT) pdfiotest$(EXEEXT) pixaatest$(EXEEXT) \ plottest$(EXEEXT) quadtreetest$(EXEEXT) ranktest$(EXEEXT) \ recogsort$(EXEEXT) recogtest1$(EXEEXT) reducetest$(EXEEXT) \ removecmap$(EXEEXT) renderfonts$(EXEEXT) \ rotatefastalt$(EXEEXT) rotateorthtest1$(EXEEXT) \ rotatetest1$(EXEEXT) runlengthtest$(EXEEXT) \ scaleandtile$(EXEEXT) scaletest1$(EXEEXT) scaletest2$(EXEEXT) \ seedfilltest$(EXEEXT) sharptest$(EXEEXT) sheartest$(EXEEXT) \ showedges$(EXEEXT) skewtest$(EXEEXT) snapcolortest$(EXEEXT) \ sorttest$(EXEEXT) sudokutest$(EXEEXT) trctest$(EXEEXT) \ viewertest$(EXEEXT) warpertest$(EXEEXT) watershedtest$(EXEEXT) \ wordsinorder$(EXEEXT) writemtiff$(EXEEXT) yuvtest$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) adaptmap_dark_SOURCES = adaptmap_dark.c adaptmap_dark_OBJECTS = adaptmap_dark.$(OBJEXT) adaptmap_dark_LDADD = $(LDADD) am__DEPENDENCIES_1 = adaptmap_dark_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent adaptmaptest_SOURCES = adaptmaptest.c adaptmaptest_OBJECTS = adaptmaptest.$(OBJEXT) adaptmaptest_LDADD = $(LDADD) adaptmaptest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) adaptnorm_reg_SOURCES = adaptnorm_reg.c adaptnorm_reg_OBJECTS = adaptnorm_reg.$(OBJEXT) adaptnorm_reg_LDADD = $(LDADD) adaptnorm_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) affine_reg_SOURCES = affine_reg.c affine_reg_OBJECTS = affine_reg.$(OBJEXT) affine_reg_LDADD = $(LDADD) affine_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) alltests_reg_SOURCES = alltests_reg.c alltests_reg_OBJECTS = alltests_reg.$(OBJEXT) alltests_reg_LDADD = $(LDADD) alltests_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) alphaops_reg_SOURCES = alphaops_reg.c alphaops_reg_OBJECTS = alphaops_reg.$(OBJEXT) alphaops_reg_LDADD = $(LDADD) alphaops_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) alphaxform_reg_SOURCES = alphaxform_reg.c alphaxform_reg_OBJECTS = alphaxform_reg.$(OBJEXT) alphaxform_reg_LDADD = $(LDADD) alphaxform_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) arabic_lines_SOURCES = arabic_lines.c arabic_lines_OBJECTS = arabic_lines.$(OBJEXT) arabic_lines_LDADD = $(LDADD) arabic_lines_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) arithtest_SOURCES = arithtest.c arithtest_OBJECTS = arithtest.$(OBJEXT) arithtest_LDADD = $(LDADD) arithtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) barcodetest_SOURCES = barcodetest.c barcodetest_OBJECTS = barcodetest.$(OBJEXT) barcodetest_LDADD = $(LDADD) barcodetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) baselinetest_SOURCES = baselinetest.c baselinetest_OBJECTS = baselinetest.$(OBJEXT) baselinetest_LDADD = $(LDADD) baselinetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) bilateral1_reg_SOURCES = bilateral1_reg.c bilateral1_reg_OBJECTS = bilateral1_reg.$(OBJEXT) bilateral1_reg_LDADD = $(LDADD) bilateral1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) bilateral2_reg_SOURCES = bilateral2_reg.c bilateral2_reg_OBJECTS = bilateral2_reg.$(OBJEXT) bilateral2_reg_LDADD = $(LDADD) bilateral2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) bilinear_reg_SOURCES = bilinear_reg.c bilinear_reg_OBJECTS = bilinear_reg.$(OBJEXT) bilinear_reg_LDADD = $(LDADD) bilinear_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) binarize_reg_SOURCES = binarize_reg.c binarize_reg_OBJECTS = binarize_reg.$(OBJEXT) binarize_reg_LDADD = $(LDADD) binarize_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) binarize_set_SOURCES = binarize_set.c binarize_set_OBJECTS = binarize_set.$(OBJEXT) binarize_set_LDADD = $(LDADD) binarize_set_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) bincompare_SOURCES = bincompare.c bincompare_OBJECTS = bincompare.$(OBJEXT) bincompare_LDADD = $(LDADD) bincompare_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) binmorph1_reg_SOURCES = binmorph1_reg.c binmorph1_reg_OBJECTS = binmorph1_reg.$(OBJEXT) binmorph1_reg_LDADD = $(LDADD) binmorph1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) binmorph2_reg_SOURCES = binmorph2_reg.c binmorph2_reg_OBJECTS = binmorph2_reg.$(OBJEXT) binmorph2_reg_LDADD = $(LDADD) binmorph2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) binmorph3_reg_SOURCES = binmorph3_reg.c binmorph3_reg_OBJECTS = binmorph3_reg.$(OBJEXT) binmorph3_reg_LDADD = $(LDADD) binmorph3_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) binmorph4_reg_SOURCES = binmorph4_reg.c binmorph4_reg_OBJECTS = binmorph4_reg.$(OBJEXT) binmorph4_reg_LDADD = $(LDADD) binmorph4_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) binmorph5_reg_SOURCES = binmorph5_reg.c binmorph5_reg_OBJECTS = binmorph5_reg.$(OBJEXT) binmorph5_reg_LDADD = $(LDADD) binmorph5_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) blackwhite_reg_SOURCES = blackwhite_reg.c blackwhite_reg_OBJECTS = blackwhite_reg.$(OBJEXT) blackwhite_reg_LDADD = $(LDADD) blackwhite_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) blend1_reg_SOURCES = blend1_reg.c blend1_reg_OBJECTS = blend1_reg.$(OBJEXT) blend1_reg_LDADD = $(LDADD) blend1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) blend2_reg_SOURCES = blend2_reg.c blend2_reg_OBJECTS = blend2_reg.$(OBJEXT) blend2_reg_LDADD = $(LDADD) blend2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) blend3_reg_SOURCES = blend3_reg.c blend3_reg_OBJECTS = blend3_reg.$(OBJEXT) blend3_reg_LDADD = $(LDADD) blend3_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) blend4_reg_SOURCES = blend4_reg.c blend4_reg_OBJECTS = blend4_reg.$(OBJEXT) blend4_reg_LDADD = $(LDADD) blend4_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) blendcmaptest_SOURCES = blendcmaptest.c blendcmaptest_OBJECTS = blendcmaptest.$(OBJEXT) blendcmaptest_LDADD = $(LDADD) blendcmaptest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) boxa1_reg_SOURCES = boxa1_reg.c boxa1_reg_OBJECTS = boxa1_reg.$(OBJEXT) boxa1_reg_LDADD = $(LDADD) boxa1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) buffertest_SOURCES = buffertest.c buffertest_OBJECTS = buffertest.$(OBJEXT) buffertest_LDADD = $(LDADD) buffertest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) byteatest_SOURCES = byteatest.c byteatest_OBJECTS = byteatest.$(OBJEXT) byteatest_LDADD = $(LDADD) byteatest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) ccbordtest_SOURCES = ccbordtest.c ccbordtest_OBJECTS = ccbordtest.$(OBJEXT) ccbordtest_LDADD = $(LDADD) ccbordtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) cctest1_SOURCES = cctest1.c cctest1_OBJECTS = cctest1.$(OBJEXT) cctest1_LDADD = $(LDADD) cctest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) ccthin1_reg_SOURCES = ccthin1_reg.c ccthin1_reg_OBJECTS = ccthin1_reg.$(OBJEXT) ccthin1_reg_LDADD = $(LDADD) ccthin1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) ccthin2_reg_SOURCES = ccthin2_reg.c ccthin2_reg_OBJECTS = ccthin2_reg.$(OBJEXT) ccthin2_reg_LDADD = $(LDADD) ccthin2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) cmapquant_reg_SOURCES = cmapquant_reg.c cmapquant_reg_OBJECTS = cmapquant_reg.$(OBJEXT) cmapquant_reg_LDADD = $(LDADD) cmapquant_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colorcontent_reg_SOURCES = colorcontent_reg.c colorcontent_reg_OBJECTS = colorcontent_reg.$(OBJEXT) colorcontent_reg_LDADD = $(LDADD) colorcontent_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) coloring_reg_SOURCES = coloring_reg.c coloring_reg_OBJECTS = coloring_reg.$(OBJEXT) coloring_reg_LDADD = $(LDADD) coloring_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colorize_reg_SOURCES = colorize_reg.c colorize_reg_OBJECTS = colorize_reg.$(OBJEXT) colorize_reg_LDADD = $(LDADD) colorize_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colormask_reg_SOURCES = colormask_reg.c colormask_reg_OBJECTS = colormask_reg.$(OBJEXT) colormask_reg_LDADD = $(LDADD) colormask_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colormorphtest_SOURCES = colormorphtest.c colormorphtest_OBJECTS = colormorphtest.$(OBJEXT) colormorphtest_LDADD = $(LDADD) colormorphtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colorquant_reg_SOURCES = colorquant_reg.c colorquant_reg_OBJECTS = colorquant_reg.$(OBJEXT) colorquant_reg_LDADD = $(LDADD) colorquant_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colorseg_reg_SOURCES = colorseg_reg.c colorseg_reg_OBJECTS = colorseg_reg.$(OBJEXT) colorseg_reg_LDADD = $(LDADD) colorseg_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colorsegtest_SOURCES = colorsegtest.c colorsegtest_OBJECTS = colorsegtest.$(OBJEXT) colorsegtest_LDADD = $(LDADD) colorsegtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colorspace_reg_SOURCES = colorspace_reg.c colorspace_reg_OBJECTS = colorspace_reg.$(OBJEXT) colorspace_reg_LDADD = $(LDADD) colorspace_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) colorspacetest_SOURCES = colorspacetest.c colorspacetest_OBJECTS = colorspacetest.$(OBJEXT) colorspacetest_LDADD = $(LDADD) colorspacetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) compare_reg_SOURCES = compare_reg.c compare_reg_OBJECTS = compare_reg.$(OBJEXT) compare_reg_LDADD = $(LDADD) compare_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) comparepages_SOURCES = comparepages.c comparepages_OBJECTS = comparepages.$(OBJEXT) comparepages_LDADD = $(LDADD) comparepages_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) comparetest_SOURCES = comparetest.c comparetest_OBJECTS = comparetest.$(OBJEXT) comparetest_LDADD = $(LDADD) comparetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) compfilter_reg_SOURCES = compfilter_reg.c compfilter_reg_OBJECTS = compfilter_reg.$(OBJEXT) compfilter_reg_LDADD = $(LDADD) compfilter_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) conncomp_reg_SOURCES = conncomp_reg.c conncomp_reg_OBJECTS = conncomp_reg.$(OBJEXT) conncomp_reg_LDADD = $(LDADD) conncomp_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) contrasttest_SOURCES = contrasttest.c contrasttest_OBJECTS = contrasttest.$(OBJEXT) contrasttest_LDADD = $(LDADD) contrasttest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) conversion_reg_SOURCES = conversion_reg.c conversion_reg_OBJECTS = conversion_reg.$(OBJEXT) conversion_reg_LDADD = $(LDADD) conversion_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) convertfilestopdf_SOURCES = convertfilestopdf.c convertfilestopdf_OBJECTS = convertfilestopdf.$(OBJEXT) convertfilestopdf_LDADD = $(LDADD) convertfilestopdf_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) convertfilestops_SOURCES = convertfilestops.c convertfilestops_OBJECTS = convertfilestops.$(OBJEXT) convertfilestops_LDADD = $(LDADD) convertfilestops_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) convertformat_SOURCES = convertformat.c convertformat_OBJECTS = convertformat.$(OBJEXT) convertformat_LDADD = $(LDADD) convertformat_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) convertsegfilestopdf_SOURCES = convertsegfilestopdf.c convertsegfilestopdf_OBJECTS = convertsegfilestopdf.$(OBJEXT) convertsegfilestopdf_LDADD = $(LDADD) convertsegfilestopdf_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) convertsegfilestops_SOURCES = convertsegfilestops.c convertsegfilestops_OBJECTS = convertsegfilestops.$(OBJEXT) convertsegfilestops_LDADD = $(LDADD) convertsegfilestops_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) converttogray_SOURCES = converttogray.c converttogray_OBJECTS = converttogray.$(OBJEXT) converttogray_LDADD = $(LDADD) converttogray_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) converttopdf_SOURCES = converttopdf.c converttopdf_OBJECTS = converttopdf.$(OBJEXT) converttopdf_LDADD = $(LDADD) converttopdf_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) converttops_SOURCES = converttops.c converttops_OBJECTS = converttops.$(OBJEXT) converttops_LDADD = $(LDADD) converttops_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) convolve_reg_SOURCES = convolve_reg.c convolve_reg_OBJECTS = convolve_reg.$(OBJEXT) convolve_reg_LDADD = $(LDADD) convolve_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) convolvetest_SOURCES = convolvetest.c convolvetest_OBJECTS = convolvetest.$(OBJEXT) convolvetest_LDADD = $(LDADD) convolvetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) cornertest_SOURCES = cornertest.c cornertest_OBJECTS = cornertest.$(OBJEXT) cornertest_LDADD = $(LDADD) cornertest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) croptest_SOURCES = croptest.c croptest_OBJECTS = croptest.$(OBJEXT) croptest_LDADD = $(LDADD) croptest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) croptext_SOURCES = croptext.c croptext_OBJECTS = croptext.$(OBJEXT) croptext_LDADD = $(LDADD) croptext_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dewarp_reg_SOURCES = dewarp_reg.c dewarp_reg_OBJECTS = dewarp_reg.$(OBJEXT) dewarp_reg_LDADD = $(LDADD) dewarp_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dewarprules_SOURCES = dewarprules.c dewarprules_OBJECTS = dewarprules.$(OBJEXT) dewarprules_LDADD = $(LDADD) dewarprules_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dewarptest1_SOURCES = dewarptest1.c dewarptest1_OBJECTS = dewarptest1.$(OBJEXT) dewarptest1_LDADD = $(LDADD) dewarptest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dewarptest2_SOURCES = dewarptest2.c dewarptest2_OBJECTS = dewarptest2.$(OBJEXT) dewarptest2_LDADD = $(LDADD) dewarptest2_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dewarptest3_SOURCES = dewarptest3.c dewarptest3_OBJECTS = dewarptest3.$(OBJEXT) dewarptest3_LDADD = $(LDADD) dewarptest3_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dewarptest4_SOURCES = dewarptest4.c dewarptest4_OBJECTS = dewarptest4.$(OBJEXT) dewarptest4_LDADD = $(LDADD) dewarptest4_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) digitprep1_SOURCES = digitprep1.c digitprep1_OBJECTS = digitprep1.$(OBJEXT) digitprep1_LDADD = $(LDADD) digitprep1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) displayboxa_SOURCES = displayboxa.c displayboxa_OBJECTS = displayboxa.$(OBJEXT) displayboxa_LDADD = $(LDADD) displayboxa_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) displaypix_SOURCES = displaypix.c displaypix_OBJECTS = displaypix.$(OBJEXT) displaypix_LDADD = $(LDADD) displaypix_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) displaypixa_SOURCES = displaypixa.c displaypixa_OBJECTS = displaypixa.$(OBJEXT) displaypixa_LDADD = $(LDADD) displaypixa_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) distance_reg_SOURCES = distance_reg.c distance_reg_OBJECTS = distance_reg.$(OBJEXT) distance_reg_LDADD = $(LDADD) distance_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dithertest_SOURCES = dithertest.c dithertest_OBJECTS = dithertest.$(OBJEXT) dithertest_LDADD = $(LDADD) dithertest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dna_reg_SOURCES = dna_reg.c dna_reg_OBJECTS = dna_reg.$(OBJEXT) dna_reg_LDADD = $(LDADD) dna_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) dwalineargen_SOURCES = dwalineargen.c dwalineargen_OBJECTS = dwalineargen.$(OBJEXT) dwalineargen_LDADD = $(LDADD) dwalineargen_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) am_dwamorph1_reg_OBJECTS = dwamorph1_reg.$(OBJEXT) \ dwalinear.3.$(OBJEXT) dwalinearlow.3.$(OBJEXT) dwamorph1_reg_OBJECTS = $(am_dwamorph1_reg_OBJECTS) dwamorph1_reg_LDADD = $(LDADD) dwamorph1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) am_dwamorph2_reg_OBJECTS = dwamorph2_reg.$(OBJEXT) \ dwalinear.3.$(OBJEXT) dwalinearlow.3.$(OBJEXT) dwamorph2_reg_OBJECTS = $(am_dwamorph2_reg_OBJECTS) dwamorph2_reg_LDADD = $(LDADD) dwamorph2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) edgetest_SOURCES = edgetest.c edgetest_OBJECTS = edgetest.$(OBJEXT) edgetest_LDADD = $(LDADD) edgetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) enhance_reg_SOURCES = enhance_reg.c enhance_reg_OBJECTS = enhance_reg.$(OBJEXT) enhance_reg_LDADD = $(LDADD) enhance_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) equal_reg_SOURCES = equal_reg.c equal_reg_OBJECTS = equal_reg.$(OBJEXT) equal_reg_LDADD = $(LDADD) equal_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) expand_reg_SOURCES = expand_reg.c expand_reg_OBJECTS = expand_reg.$(OBJEXT) expand_reg_LDADD = $(LDADD) expand_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) extrema_reg_SOURCES = extrema_reg.c extrema_reg_OBJECTS = extrema_reg.$(OBJEXT) extrema_reg_LDADD = $(LDADD) extrema_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) falsecolortest_SOURCES = falsecolortest.c falsecolortest_OBJECTS = falsecolortest.$(OBJEXT) falsecolortest_LDADD = $(LDADD) falsecolortest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fcombautogen_SOURCES = fcombautogen.c fcombautogen_OBJECTS = fcombautogen.$(OBJEXT) fcombautogen_LDADD = $(LDADD) fcombautogen_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fhmtauto_reg_SOURCES = fhmtauto_reg.c fhmtauto_reg_OBJECTS = fhmtauto_reg.$(OBJEXT) fhmtauto_reg_LDADD = $(LDADD) fhmtauto_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fhmtautogen_SOURCES = fhmtautogen.c fhmtautogen_OBJECTS = fhmtautogen.$(OBJEXT) fhmtautogen_LDADD = $(LDADD) fhmtautogen_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fileinfo_SOURCES = fileinfo.c fileinfo_OBJECTS = fileinfo.$(OBJEXT) fileinfo_LDADD = $(LDADD) fileinfo_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) findcorners_reg_SOURCES = findcorners_reg.c findcorners_reg_OBJECTS = findcorners_reg.$(OBJEXT) findcorners_reg_LDADD = $(LDADD) findcorners_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) findpattern1_SOURCES = findpattern1.c findpattern1_OBJECTS = findpattern1.$(OBJEXT) findpattern1_LDADD = $(LDADD) findpattern1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) findpattern2_SOURCES = findpattern2.c findpattern2_OBJECTS = findpattern2.$(OBJEXT) findpattern2_LDADD = $(LDADD) findpattern2_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) findpattern3_SOURCES = findpattern3.c findpattern3_OBJECTS = findpattern3.$(OBJEXT) findpattern3_LDADD = $(LDADD) findpattern3_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) findpattern_reg_SOURCES = findpattern_reg.c findpattern_reg_OBJECTS = findpattern_reg.$(OBJEXT) findpattern_reg_LDADD = $(LDADD) findpattern_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) flipdetect_reg_SOURCES = flipdetect_reg.c flipdetect_reg_OBJECTS = flipdetect_reg.$(OBJEXT) flipdetect_reg_LDADD = $(LDADD) flipdetect_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) flipselgen_SOURCES = flipselgen.c flipselgen_OBJECTS = flipselgen.$(OBJEXT) flipselgen_LDADD = $(LDADD) flipselgen_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fmorphauto_reg_SOURCES = fmorphauto_reg.c fmorphauto_reg_OBJECTS = fmorphauto_reg.$(OBJEXT) fmorphauto_reg_LDADD = $(LDADD) fmorphauto_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fmorphautogen_SOURCES = fmorphautogen.c fmorphautogen_OBJECTS = fmorphautogen.$(OBJEXT) fmorphautogen_LDADD = $(LDADD) fmorphautogen_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fpix1_reg_SOURCES = fpix1_reg.c fpix1_reg_OBJECTS = fpix1_reg.$(OBJEXT) fpix1_reg_LDADD = $(LDADD) fpix1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fpix2_reg_SOURCES = fpix2_reg.c fpix2_reg_OBJECTS = fpix2_reg.$(OBJEXT) fpix2_reg_LDADD = $(LDADD) fpix2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) fpixcontours_SOURCES = fpixcontours.c fpixcontours_OBJECTS = fpixcontours.$(OBJEXT) fpixcontours_LDADD = $(LDADD) fpixcontours_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) gammatest_SOURCES = gammatest.c gammatest_OBJECTS = gammatest.$(OBJEXT) gammatest_LDADD = $(LDADD) gammatest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) genfonts_SOURCES = genfonts.c genfonts_OBJECTS = genfonts.$(OBJEXT) genfonts_LDADD = $(LDADD) genfonts_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) gifio_reg_SOURCES = gifio_reg.c gifio_reg_OBJECTS = gifio_reg.$(OBJEXT) gifio_reg_LDADD = $(LDADD) gifio_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) graphicstest_SOURCES = graphicstest.c graphicstest_OBJECTS = graphicstest.$(OBJEXT) graphicstest_LDADD = $(LDADD) graphicstest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) grayfill_reg_SOURCES = grayfill_reg.c grayfill_reg_OBJECTS = grayfill_reg.$(OBJEXT) grayfill_reg_LDADD = $(LDADD) grayfill_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) graymorph1_reg_SOURCES = graymorph1_reg.c graymorph1_reg_OBJECTS = graymorph1_reg.$(OBJEXT) graymorph1_reg_LDADD = $(LDADD) graymorph1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) graymorph2_reg_SOURCES = graymorph2_reg.c graymorph2_reg_OBJECTS = graymorph2_reg.$(OBJEXT) graymorph2_reg_LDADD = $(LDADD) graymorph2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) graymorphtest_SOURCES = graymorphtest.c graymorphtest_OBJECTS = graymorphtest.$(OBJEXT) graymorphtest_LDADD = $(LDADD) graymorphtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) grayquant_reg_SOURCES = grayquant_reg.c grayquant_reg_OBJECTS = grayquant_reg.$(OBJEXT) grayquant_reg_LDADD = $(LDADD) grayquant_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) hardlight_reg_SOURCES = hardlight_reg.c hardlight_reg_OBJECTS = hardlight_reg.$(OBJEXT) hardlight_reg_LDADD = $(LDADD) hardlight_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) heap_reg_SOURCES = heap_reg.c heap_reg_OBJECTS = heap_reg.$(OBJEXT) heap_reg_LDADD = $(LDADD) heap_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) histotest_SOURCES = histotest.c histotest_OBJECTS = histotest.$(OBJEXT) histotest_LDADD = $(LDADD) histotest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) insert_reg_SOURCES = insert_reg.c insert_reg_OBJECTS = insert_reg.$(OBJEXT) insert_reg_LDADD = $(LDADD) insert_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) ioformats_reg_SOURCES = ioformats_reg.c ioformats_reg_OBJECTS = ioformats_reg.$(OBJEXT) ioformats_reg_LDADD = $(LDADD) ioformats_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) iotest_SOURCES = iotest.c iotest_OBJECTS = iotest.$(OBJEXT) iotest_LDADD = $(LDADD) iotest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) italictest_SOURCES = italictest.c italictest_OBJECTS = italictest.$(OBJEXT) italictest_LDADD = $(LDADD) italictest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) jbcorrelation_SOURCES = jbcorrelation.c jbcorrelation_OBJECTS = jbcorrelation.$(OBJEXT) jbcorrelation_LDADD = $(LDADD) jbcorrelation_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) jbrankhaus_SOURCES = jbrankhaus.c jbrankhaus_OBJECTS = jbrankhaus.$(OBJEXT) jbrankhaus_LDADD = $(LDADD) jbrankhaus_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) jbwords_SOURCES = jbwords.c jbwords_OBJECTS = jbwords.$(OBJEXT) jbwords_LDADD = $(LDADD) jbwords_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) jpegio_reg_SOURCES = jpegio_reg.c jpegio_reg_OBJECTS = jpegio_reg.$(OBJEXT) jpegio_reg_LDADD = $(LDADD) jpegio_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) kernel_reg_SOURCES = kernel_reg.c kernel_reg_OBJECTS = kernel_reg.$(OBJEXT) kernel_reg_LDADD = $(LDADD) kernel_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) label_reg_SOURCES = label_reg.c label_reg_OBJECTS = label_reg.$(OBJEXT) label_reg_LDADD = $(LDADD) label_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) lineremoval_SOURCES = lineremoval.c lineremoval_OBJECTS = lineremoval.$(OBJEXT) lineremoval_LDADD = $(LDADD) lineremoval_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) listtest_SOURCES = listtest.c listtest_OBJECTS = listtest.$(OBJEXT) listtest_LDADD = $(LDADD) listtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) livre_adapt_SOURCES = livre_adapt.c livre_adapt_OBJECTS = livre_adapt.$(OBJEXT) livre_adapt_LDADD = $(LDADD) livre_adapt_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) livre_hmt_SOURCES = livre_hmt.c livre_hmt_OBJECTS = livre_hmt.$(OBJEXT) livre_hmt_LDADD = $(LDADD) livre_hmt_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) livre_makefigs_SOURCES = livre_makefigs.c livre_makefigs_OBJECTS = livre_makefigs.$(OBJEXT) livre_makefigs_LDADD = $(LDADD) livre_makefigs_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) livre_orient_SOURCES = livre_orient.c livre_orient_OBJECTS = livre_orient.$(OBJEXT) livre_orient_LDADD = $(LDADD) livre_orient_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) livre_pageseg_SOURCES = livre_pageseg.c livre_pageseg_OBJECTS = livre_pageseg.$(OBJEXT) livre_pageseg_LDADD = $(LDADD) livre_pageseg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) livre_seedgen_SOURCES = livre_seedgen.c livre_seedgen_OBJECTS = livre_seedgen.$(OBJEXT) livre_seedgen_LDADD = $(LDADD) livre_seedgen_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) livre_tophat_SOURCES = livre_tophat.c livre_tophat_OBJECTS = livre_tophat.$(OBJEXT) livre_tophat_LDADD = $(LDADD) livre_tophat_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) locminmax_reg_SOURCES = locminmax_reg.c locminmax_reg_OBJECTS = locminmax_reg.$(OBJEXT) locminmax_reg_LDADD = $(LDADD) locminmax_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) logicops_reg_SOURCES = logicops_reg.c logicops_reg_OBJECTS = logicops_reg.$(OBJEXT) logicops_reg_LDADD = $(LDADD) logicops_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) lowaccess_reg_SOURCES = lowaccess_reg.c lowaccess_reg_OBJECTS = lowaccess_reg.$(OBJEXT) lowaccess_reg_LDADD = $(LDADD) lowaccess_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) maketile_SOURCES = maketile.c maketile_OBJECTS = maketile.$(OBJEXT) maketile_LDADD = $(LDADD) maketile_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) maze_reg_SOURCES = maze_reg.c maze_reg_OBJECTS = maze_reg.$(OBJEXT) maze_reg_LDADD = $(LDADD) maze_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) misctest1_SOURCES = misctest1.c misctest1_OBJECTS = misctest1.$(OBJEXT) misctest1_LDADD = $(LDADD) misctest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) modifyhuesat_SOURCES = modifyhuesat.c modifyhuesat_OBJECTS = modifyhuesat.$(OBJEXT) modifyhuesat_LDADD = $(LDADD) modifyhuesat_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) morphseq_reg_SOURCES = morphseq_reg.c morphseq_reg_OBJECTS = morphseq_reg.$(OBJEXT) morphseq_reg_LDADD = $(LDADD) morphseq_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) morphtest1_SOURCES = morphtest1.c morphtest1_OBJECTS = morphtest1.$(OBJEXT) morphtest1_LDADD = $(LDADD) morphtest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) mtifftest_SOURCES = mtifftest.c mtifftest_OBJECTS = mtifftest.$(OBJEXT) mtifftest_LDADD = $(LDADD) mtifftest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) multitype_reg_SOURCES = multitype_reg.c multitype_reg_OBJECTS = multitype_reg.$(OBJEXT) multitype_reg_LDADD = $(LDADD) multitype_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) nearline_reg_SOURCES = nearline_reg.c nearline_reg_OBJECTS = nearline_reg.$(OBJEXT) nearline_reg_LDADD = $(LDADD) nearline_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) newspaper_reg_SOURCES = newspaper_reg.c newspaper_reg_OBJECTS = newspaper_reg.$(OBJEXT) newspaper_reg_LDADD = $(LDADD) newspaper_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) numa1_reg_SOURCES = numa1_reg.c numa1_reg_OBJECTS = numa1_reg.$(OBJEXT) numa1_reg_LDADD = $(LDADD) numa1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) numa2_reg_SOURCES = numa2_reg.c numa2_reg_OBJECTS = numa2_reg.$(OBJEXT) numa2_reg_LDADD = $(LDADD) numa2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) numaranktest_SOURCES = numaranktest.c numaranktest_OBJECTS = numaranktest.$(OBJEXT) numaranktest_LDADD = $(LDADD) numaranktest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) otsutest1_SOURCES = otsutest1.c otsutest1_OBJECTS = otsutest1.$(OBJEXT) otsutest1_LDADD = $(LDADD) otsutest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) otsutest2_SOURCES = otsutest2.c otsutest2_OBJECTS = otsutest2.$(OBJEXT) otsutest2_LDADD = $(LDADD) otsutest2_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) overlap_reg_SOURCES = overlap_reg.c overlap_reg_OBJECTS = overlap_reg.$(OBJEXT) overlap_reg_LDADD = $(LDADD) overlap_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pagesegtest1_SOURCES = pagesegtest1.c pagesegtest1_OBJECTS = pagesegtest1.$(OBJEXT) pagesegtest1_LDADD = $(LDADD) pagesegtest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pagesegtest2_SOURCES = pagesegtest2.c pagesegtest2_OBJECTS = pagesegtest2.$(OBJEXT) pagesegtest2_LDADD = $(LDADD) pagesegtest2_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) paint_reg_SOURCES = paint_reg.c paint_reg_OBJECTS = paint_reg.$(OBJEXT) paint_reg_LDADD = $(LDADD) paint_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) paintmask_reg_SOURCES = paintmask_reg.c paintmask_reg_OBJECTS = paintmask_reg.$(OBJEXT) paintmask_reg_LDADD = $(LDADD) paintmask_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) partitiontest_SOURCES = partitiontest.c partitiontest_OBJECTS = partitiontest.$(OBJEXT) partitiontest_LDADD = $(LDADD) partitiontest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pdfiotest_SOURCES = pdfiotest.c pdfiotest_OBJECTS = pdfiotest.$(OBJEXT) pdfiotest_LDADD = $(LDADD) pdfiotest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pdfseg_reg_SOURCES = pdfseg_reg.c pdfseg_reg_OBJECTS = pdfseg_reg.$(OBJEXT) pdfseg_reg_LDADD = $(LDADD) pdfseg_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixa1_reg_SOURCES = pixa1_reg.c pixa1_reg_OBJECTS = pixa1_reg.$(OBJEXT) pixa1_reg_LDADD = $(LDADD) pixa1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixa2_reg_SOURCES = pixa2_reg.c pixa2_reg_OBJECTS = pixa2_reg.$(OBJEXT) pixa2_reg_LDADD = $(LDADD) pixa2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixaatest_SOURCES = pixaatest.c pixaatest_OBJECTS = pixaatest.$(OBJEXT) pixaatest_LDADD = $(LDADD) pixaatest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixadisp_reg_SOURCES = pixadisp_reg.c pixadisp_reg_OBJECTS = pixadisp_reg.$(OBJEXT) pixadisp_reg_LDADD = $(LDADD) pixadisp_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixalloc_reg_SOURCES = pixalloc_reg.c pixalloc_reg_OBJECTS = pixalloc_reg.$(OBJEXT) pixalloc_reg_LDADD = $(LDADD) pixalloc_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixcomp_reg_SOURCES = pixcomp_reg.c pixcomp_reg_OBJECTS = pixcomp_reg.$(OBJEXT) pixcomp_reg_LDADD = $(LDADD) pixcomp_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixmem_reg_SOURCES = pixmem_reg.c pixmem_reg_OBJECTS = pixmem_reg.$(OBJEXT) pixmem_reg_LDADD = $(LDADD) pixmem_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixserial_reg_SOURCES = pixserial_reg.c pixserial_reg_OBJECTS = pixserial_reg.$(OBJEXT) pixserial_reg_LDADD = $(LDADD) pixserial_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pixtile_reg_SOURCES = pixtile_reg.c pixtile_reg_OBJECTS = pixtile_reg.$(OBJEXT) pixtile_reg_LDADD = $(LDADD) pixtile_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) plottest_SOURCES = plottest.c plottest_OBJECTS = plottest.$(OBJEXT) plottest_LDADD = $(LDADD) plottest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pngio_reg_SOURCES = pngio_reg.c pngio_reg_OBJECTS = pngio_reg.$(OBJEXT) pngio_reg_LDADD = $(LDADD) pngio_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) printimage_SOURCES = printimage.c printimage_OBJECTS = printimage.$(OBJEXT) printimage_LDADD = $(LDADD) printimage_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) printsplitimage_SOURCES = printsplitimage.c printsplitimage_OBJECTS = printsplitimage.$(OBJEXT) printsplitimage_LDADD = $(LDADD) printsplitimage_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) printtiff_SOURCES = printtiff.c printtiff_OBJECTS = printtiff.$(OBJEXT) printtiff_LDADD = $(LDADD) printtiff_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) projection_reg_SOURCES = projection_reg.c projection_reg_OBJECTS = projection_reg.$(OBJEXT) projection_reg_LDADD = $(LDADD) projection_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) projective_reg_SOURCES = projective_reg.c projective_reg_OBJECTS = projective_reg.$(OBJEXT) projective_reg_LDADD = $(LDADD) projective_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) psio_reg_SOURCES = psio_reg.c psio_reg_OBJECTS = psio_reg.$(OBJEXT) psio_reg_LDADD = $(LDADD) psio_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) psioseg_reg_SOURCES = psioseg_reg.c psioseg_reg_OBJECTS = psioseg_reg.$(OBJEXT) psioseg_reg_LDADD = $(LDADD) psioseg_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) pta_reg_SOURCES = pta_reg.c pta_reg_OBJECTS = pta_reg.$(OBJEXT) pta_reg_LDADD = $(LDADD) pta_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) ptra1_reg_SOURCES = ptra1_reg.c ptra1_reg_OBJECTS = ptra1_reg.$(OBJEXT) ptra1_reg_LDADD = $(LDADD) ptra1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) ptra2_reg_SOURCES = ptra2_reg.c ptra2_reg_OBJECTS = ptra2_reg.$(OBJEXT) ptra2_reg_LDADD = $(LDADD) ptra2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) quadtreetest_SOURCES = quadtreetest.c quadtreetest_OBJECTS = quadtreetest.$(OBJEXT) quadtreetest_LDADD = $(LDADD) quadtreetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rank_reg_SOURCES = rank_reg.c rank_reg_OBJECTS = rank_reg.$(OBJEXT) rank_reg_LDADD = $(LDADD) rank_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rankbin_reg_SOURCES = rankbin_reg.c rankbin_reg_OBJECTS = rankbin_reg.$(OBJEXT) rankbin_reg_LDADD = $(LDADD) rankbin_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rankhisto_reg_SOURCES = rankhisto_reg.c rankhisto_reg_OBJECTS = rankhisto_reg.$(OBJEXT) rankhisto_reg_LDADD = $(LDADD) rankhisto_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) ranktest_SOURCES = ranktest.c ranktest_OBJECTS = ranktest.$(OBJEXT) ranktest_LDADD = $(LDADD) ranktest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rasterop_reg_SOURCES = rasterop_reg.c rasterop_reg_OBJECTS = rasterop_reg.$(OBJEXT) rasterop_reg_LDADD = $(LDADD) rasterop_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rasteropip_reg_SOURCES = rasteropip_reg.c rasteropip_reg_OBJECTS = rasteropip_reg.$(OBJEXT) rasteropip_reg_LDADD = $(LDADD) rasteropip_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) recogsort_SOURCES = recogsort.c recogsort_OBJECTS = recogsort.$(OBJEXT) recogsort_LDADD = $(LDADD) recogsort_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) recogtest1_SOURCES = recogtest1.c recogtest1_OBJECTS = recogtest1.$(OBJEXT) recogtest1_LDADD = $(LDADD) recogtest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) reducetest_SOURCES = reducetest.c reducetest_OBJECTS = reducetest.$(OBJEXT) reducetest_LDADD = $(LDADD) reducetest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) removecmap_SOURCES = removecmap.c removecmap_OBJECTS = removecmap.$(OBJEXT) removecmap_LDADD = $(LDADD) removecmap_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) renderfonts_SOURCES = renderfonts.c renderfonts_OBJECTS = renderfonts.$(OBJEXT) renderfonts_LDADD = $(LDADD) renderfonts_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rotate1_reg_SOURCES = rotate1_reg.c rotate1_reg_OBJECTS = rotate1_reg.$(OBJEXT) rotate1_reg_LDADD = $(LDADD) rotate1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rotate2_reg_SOURCES = rotate2_reg.c rotate2_reg_OBJECTS = rotate2_reg.$(OBJEXT) rotate2_reg_LDADD = $(LDADD) rotate2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rotatefastalt_SOURCES = rotatefastalt.c rotatefastalt_OBJECTS = rotatefastalt.$(OBJEXT) rotatefastalt_LDADD = $(LDADD) rotatefastalt_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rotateorth_reg_SOURCES = rotateorth_reg.c rotateorth_reg_OBJECTS = rotateorth_reg.$(OBJEXT) rotateorth_reg_LDADD = $(LDADD) rotateorth_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rotateorthtest1_SOURCES = rotateorthtest1.c rotateorthtest1_OBJECTS = rotateorthtest1.$(OBJEXT) rotateorthtest1_LDADD = $(LDADD) rotateorthtest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) rotatetest1_SOURCES = rotatetest1.c rotatetest1_OBJECTS = rotatetest1.$(OBJEXT) rotatetest1_LDADD = $(LDADD) rotatetest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) runlengthtest_SOURCES = runlengthtest.c runlengthtest_OBJECTS = runlengthtest.$(OBJEXT) runlengthtest_LDADD = $(LDADD) runlengthtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) scale_reg_SOURCES = scale_reg.c scale_reg_OBJECTS = scale_reg.$(OBJEXT) scale_reg_LDADD = $(LDADD) scale_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) scaleandtile_SOURCES = scaleandtile.c scaleandtile_OBJECTS = scaleandtile.$(OBJEXT) scaleandtile_LDADD = $(LDADD) scaleandtile_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) scaletest1_SOURCES = scaletest1.c scaletest1_OBJECTS = scaletest1.$(OBJEXT) scaletest1_LDADD = $(LDADD) scaletest1_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) scaletest2_SOURCES = scaletest2.c scaletest2_OBJECTS = scaletest2.$(OBJEXT) scaletest2_LDADD = $(LDADD) scaletest2_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) seedfilltest_SOURCES = seedfilltest.c seedfilltest_OBJECTS = seedfilltest.$(OBJEXT) seedfilltest_LDADD = $(LDADD) seedfilltest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) seedspread_reg_SOURCES = seedspread_reg.c seedspread_reg_OBJECTS = seedspread_reg.$(OBJEXT) seedspread_reg_LDADD = $(LDADD) seedspread_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) selio_reg_SOURCES = selio_reg.c selio_reg_OBJECTS = selio_reg.$(OBJEXT) selio_reg_LDADD = $(LDADD) selio_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) sharptest_SOURCES = sharptest.c sharptest_OBJECTS = sharptest.$(OBJEXT) sharptest_LDADD = $(LDADD) sharptest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) shear1_reg_SOURCES = shear1_reg.c shear1_reg_OBJECTS = shear1_reg.$(OBJEXT) shear1_reg_LDADD = $(LDADD) shear1_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) shear2_reg_SOURCES = shear2_reg.c shear2_reg_OBJECTS = shear2_reg.$(OBJEXT) shear2_reg_LDADD = $(LDADD) shear2_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) sheartest_SOURCES = sheartest.c sheartest_OBJECTS = sheartest.$(OBJEXT) sheartest_LDADD = $(LDADD) sheartest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) showedges_SOURCES = showedges.c showedges_OBJECTS = showedges.$(OBJEXT) showedges_LDADD = $(LDADD) showedges_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) skew_reg_SOURCES = skew_reg.c skew_reg_OBJECTS = skew_reg.$(OBJEXT) skew_reg_LDADD = $(LDADD) skew_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) skewtest_SOURCES = skewtest.c skewtest_OBJECTS = skewtest.$(OBJEXT) skewtest_LDADD = $(LDADD) skewtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) smallpix_reg_SOURCES = smallpix_reg.c smallpix_reg_OBJECTS = smallpix_reg.$(OBJEXT) smallpix_reg_LDADD = $(LDADD) smallpix_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) smoothedge_reg_SOURCES = smoothedge_reg.c smoothedge_reg_OBJECTS = smoothedge_reg.$(OBJEXT) smoothedge_reg_LDADD = $(LDADD) smoothedge_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) snapcolortest_SOURCES = snapcolortest.c snapcolortest_OBJECTS = snapcolortest.$(OBJEXT) snapcolortest_LDADD = $(LDADD) snapcolortest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) sorttest_SOURCES = sorttest.c sorttest_OBJECTS = sorttest.$(OBJEXT) sorttest_LDADD = $(LDADD) sorttest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) splitcomp_reg_SOURCES = splitcomp_reg.c splitcomp_reg_OBJECTS = splitcomp_reg.$(OBJEXT) splitcomp_reg_LDADD = $(LDADD) splitcomp_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) splitimage2pdf_SOURCES = splitimage2pdf.c splitimage2pdf_OBJECTS = splitimage2pdf.$(OBJEXT) splitimage2pdf_LDADD = $(LDADD) splitimage2pdf_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) string_reg_SOURCES = string_reg.c string_reg_OBJECTS = string_reg.$(OBJEXT) string_reg_LDADD = $(LDADD) string_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) subpixel_reg_SOURCES = subpixel_reg.c subpixel_reg_OBJECTS = subpixel_reg.$(OBJEXT) subpixel_reg_LDADD = $(LDADD) subpixel_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) sudokutest_SOURCES = sudokutest.c sudokutest_OBJECTS = sudokutest.$(OBJEXT) sudokutest_LDADD = $(LDADD) sudokutest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) threshnorm_reg_SOURCES = threshnorm_reg.c threshnorm_reg_OBJECTS = threshnorm_reg.$(OBJEXT) threshnorm_reg_LDADD = $(LDADD) threshnorm_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) translate_reg_SOURCES = translate_reg.c translate_reg_OBJECTS = translate_reg.$(OBJEXT) translate_reg_LDADD = $(LDADD) translate_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) trctest_SOURCES = trctest.c trctest_OBJECTS = trctest.$(OBJEXT) trctest_LDADD = $(LDADD) trctest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) viewertest_SOURCES = viewertest.c viewertest_OBJECTS = viewertest.$(OBJEXT) viewertest_LDADD = $(LDADD) viewertest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) warper_reg_SOURCES = warper_reg.c warper_reg_OBJECTS = warper_reg.$(OBJEXT) warper_reg_LDADD = $(LDADD) warper_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) warpertest_SOURCES = warpertest.c warpertest_OBJECTS = warpertest.$(OBJEXT) warpertest_LDADD = $(LDADD) warpertest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) watershedtest_SOURCES = watershedtest.c watershedtest_OBJECTS = watershedtest.$(OBJEXT) watershedtest_LDADD = $(LDADD) watershedtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) webpio_reg_SOURCES = webpio_reg.c webpio_reg_OBJECTS = webpio_reg.$(OBJEXT) webpio_reg_LDADD = $(LDADD) webpio_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) wordboxes_reg_SOURCES = wordboxes_reg.c wordboxes_reg_OBJECTS = wordboxes_reg.$(OBJEXT) wordboxes_reg_LDADD = $(LDADD) wordboxes_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) wordsinorder_SOURCES = wordsinorder.c wordsinorder_OBJECTS = wordsinorder.$(OBJEXT) wordsinorder_LDADD = $(LDADD) wordsinorder_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) writemtiff_SOURCES = writemtiff.c writemtiff_OBJECTS = writemtiff.$(OBJEXT) writemtiff_LDADD = $(LDADD) writemtiff_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) writetext_reg_SOURCES = writetext_reg.c writetext_reg_OBJECTS = writetext_reg.$(OBJEXT) writetext_reg_LDADD = $(LDADD) writetext_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) xformbox_reg_SOURCES = xformbox_reg.c xformbox_reg_OBJECTS = xformbox_reg.$(OBJEXT) xformbox_reg_LDADD = $(LDADD) xformbox_reg_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) xtractprotos_SOURCES = xtractprotos.c xtractprotos_OBJECTS = xtractprotos.$(OBJEXT) xtractprotos_LDADD = $(LDADD) xtractprotos_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) yuvtest_SOURCES = yuvtest.c yuvtest_OBJECTS = yuvtest.$(OBJEXT) yuvtest_LDADD = $(LDADD) yuvtest_DEPENDENCIES = $(top_builddir)/src/liblept.la \ $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ 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_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = adaptmap_dark.c adaptmaptest.c adaptnorm_reg.c affine_reg.c \ alltests_reg.c alphaops_reg.c alphaxform_reg.c arabic_lines.c \ arithtest.c barcodetest.c baselinetest.c bilateral1_reg.c \ bilateral2_reg.c bilinear_reg.c binarize_reg.c binarize_set.c \ bincompare.c binmorph1_reg.c binmorph2_reg.c binmorph3_reg.c \ binmorph4_reg.c binmorph5_reg.c blackwhite_reg.c blend1_reg.c \ blend2_reg.c blend3_reg.c blend4_reg.c blendcmaptest.c \ boxa1_reg.c buffertest.c byteatest.c ccbordtest.c cctest1.c \ ccthin1_reg.c ccthin2_reg.c cmapquant_reg.c colorcontent_reg.c \ coloring_reg.c colorize_reg.c colormask_reg.c colormorphtest.c \ colorquant_reg.c colorseg_reg.c colorsegtest.c \ colorspace_reg.c colorspacetest.c compare_reg.c comparepages.c \ comparetest.c compfilter_reg.c conncomp_reg.c contrasttest.c \ conversion_reg.c convertfilestopdf.c convertfilestops.c \ convertformat.c convertsegfilestopdf.c convertsegfilestops.c \ converttogray.c converttopdf.c converttops.c convolve_reg.c \ convolvetest.c cornertest.c croptest.c croptext.c dewarp_reg.c \ dewarprules.c dewarptest1.c dewarptest2.c dewarptest3.c \ dewarptest4.c digitprep1.c displayboxa.c displaypix.c \ displaypixa.c distance_reg.c dithertest.c dna_reg.c \ dwalineargen.c $(dwamorph1_reg_SOURCES) \ $(dwamorph2_reg_SOURCES) edgetest.c enhance_reg.c equal_reg.c \ expand_reg.c extrema_reg.c falsecolortest.c fcombautogen.c \ fhmtauto_reg.c fhmtautogen.c fileinfo.c findcorners_reg.c \ findpattern1.c findpattern2.c findpattern3.c findpattern_reg.c \ flipdetect_reg.c flipselgen.c fmorphauto_reg.c fmorphautogen.c \ fpix1_reg.c fpix2_reg.c fpixcontours.c gammatest.c genfonts.c \ gifio_reg.c graphicstest.c grayfill_reg.c graymorph1_reg.c \ graymorph2_reg.c graymorphtest.c grayquant_reg.c \ hardlight_reg.c heap_reg.c histotest.c insert_reg.c \ ioformats_reg.c iotest.c italictest.c jbcorrelation.c \ jbrankhaus.c jbwords.c jpegio_reg.c kernel_reg.c label_reg.c \ lineremoval.c listtest.c livre_adapt.c livre_hmt.c \ livre_makefigs.c livre_orient.c livre_pageseg.c \ livre_seedgen.c livre_tophat.c locminmax_reg.c logicops_reg.c \ lowaccess_reg.c maketile.c maze_reg.c misctest1.c \ modifyhuesat.c morphseq_reg.c morphtest1.c mtifftest.c \ multitype_reg.c nearline_reg.c newspaper_reg.c numa1_reg.c \ numa2_reg.c numaranktest.c otsutest1.c otsutest2.c \ overlap_reg.c pagesegtest1.c pagesegtest2.c paint_reg.c \ paintmask_reg.c partitiontest.c pdfiotest.c pdfseg_reg.c \ pixa1_reg.c pixa2_reg.c pixaatest.c pixadisp_reg.c \ pixalloc_reg.c pixcomp_reg.c pixmem_reg.c pixserial_reg.c \ pixtile_reg.c plottest.c pngio_reg.c printimage.c \ printsplitimage.c printtiff.c projection_reg.c \ projective_reg.c psio_reg.c psioseg_reg.c pta_reg.c \ ptra1_reg.c ptra2_reg.c quadtreetest.c rank_reg.c \ rankbin_reg.c rankhisto_reg.c ranktest.c rasterop_reg.c \ rasteropip_reg.c recogsort.c recogtest1.c reducetest.c \ removecmap.c renderfonts.c rotate1_reg.c rotate2_reg.c \ rotatefastalt.c rotateorth_reg.c rotateorthtest1.c \ rotatetest1.c runlengthtest.c scale_reg.c scaleandtile.c \ scaletest1.c scaletest2.c seedfilltest.c seedspread_reg.c \ selio_reg.c sharptest.c shear1_reg.c shear2_reg.c sheartest.c \ showedges.c skew_reg.c skewtest.c smallpix_reg.c \ smoothedge_reg.c snapcolortest.c sorttest.c splitcomp_reg.c \ splitimage2pdf.c string_reg.c subpixel_reg.c sudokutest.c \ threshnorm_reg.c translate_reg.c trctest.c viewertest.c \ warper_reg.c warpertest.c watershedtest.c webpio_reg.c \ wordboxes_reg.c wordsinorder.c writemtiff.c writetext_reg.c \ xformbox_reg.c xtractprotos.c yuvtest.c DIST_SOURCES = adaptmap_dark.c adaptmaptest.c adaptnorm_reg.c \ affine_reg.c alltests_reg.c alphaops_reg.c alphaxform_reg.c \ arabic_lines.c arithtest.c barcodetest.c baselinetest.c \ bilateral1_reg.c bilateral2_reg.c bilinear_reg.c \ binarize_reg.c binarize_set.c bincompare.c binmorph1_reg.c \ binmorph2_reg.c binmorph3_reg.c binmorph4_reg.c \ binmorph5_reg.c blackwhite_reg.c blend1_reg.c blend2_reg.c \ blend3_reg.c blend4_reg.c blendcmaptest.c boxa1_reg.c \ buffertest.c byteatest.c ccbordtest.c cctest1.c ccthin1_reg.c \ ccthin2_reg.c cmapquant_reg.c colorcontent_reg.c \ coloring_reg.c colorize_reg.c colormask_reg.c colormorphtest.c \ colorquant_reg.c colorseg_reg.c colorsegtest.c \ colorspace_reg.c colorspacetest.c compare_reg.c comparepages.c \ comparetest.c compfilter_reg.c conncomp_reg.c contrasttest.c \ conversion_reg.c convertfilestopdf.c convertfilestops.c \ convertformat.c convertsegfilestopdf.c convertsegfilestops.c \ converttogray.c converttopdf.c converttops.c convolve_reg.c \ convolvetest.c cornertest.c croptest.c croptext.c dewarp_reg.c \ dewarprules.c dewarptest1.c dewarptest2.c dewarptest3.c \ dewarptest4.c digitprep1.c displayboxa.c displaypix.c \ displaypixa.c distance_reg.c dithertest.c dna_reg.c \ dwalineargen.c $(dwamorph1_reg_SOURCES) \ $(dwamorph2_reg_SOURCES) edgetest.c enhance_reg.c equal_reg.c \ expand_reg.c extrema_reg.c falsecolortest.c fcombautogen.c \ fhmtauto_reg.c fhmtautogen.c fileinfo.c findcorners_reg.c \ findpattern1.c findpattern2.c findpattern3.c findpattern_reg.c \ flipdetect_reg.c flipselgen.c fmorphauto_reg.c fmorphautogen.c \ fpix1_reg.c fpix2_reg.c fpixcontours.c gammatest.c genfonts.c \ gifio_reg.c graphicstest.c grayfill_reg.c graymorph1_reg.c \ graymorph2_reg.c graymorphtest.c grayquant_reg.c \ hardlight_reg.c heap_reg.c histotest.c insert_reg.c \ ioformats_reg.c iotest.c italictest.c jbcorrelation.c \ jbrankhaus.c jbwords.c jpegio_reg.c kernel_reg.c label_reg.c \ lineremoval.c listtest.c livre_adapt.c livre_hmt.c \ livre_makefigs.c livre_orient.c livre_pageseg.c \ livre_seedgen.c livre_tophat.c locminmax_reg.c logicops_reg.c \ lowaccess_reg.c maketile.c maze_reg.c misctest1.c \ modifyhuesat.c morphseq_reg.c morphtest1.c mtifftest.c \ multitype_reg.c nearline_reg.c newspaper_reg.c numa1_reg.c \ numa2_reg.c numaranktest.c otsutest1.c otsutest2.c \ overlap_reg.c pagesegtest1.c pagesegtest2.c paint_reg.c \ paintmask_reg.c partitiontest.c pdfiotest.c pdfseg_reg.c \ pixa1_reg.c pixa2_reg.c pixaatest.c pixadisp_reg.c \ pixalloc_reg.c pixcomp_reg.c pixmem_reg.c pixserial_reg.c \ pixtile_reg.c plottest.c pngio_reg.c printimage.c \ printsplitimage.c printtiff.c projection_reg.c \ projective_reg.c psio_reg.c psioseg_reg.c pta_reg.c \ ptra1_reg.c ptra2_reg.c quadtreetest.c rank_reg.c \ rankbin_reg.c rankhisto_reg.c ranktest.c rasterop_reg.c \ rasteropip_reg.c recogsort.c recogtest1.c reducetest.c \ removecmap.c renderfonts.c rotate1_reg.c rotate2_reg.c \ rotatefastalt.c rotateorth_reg.c rotateorthtest1.c \ rotatetest1.c runlengthtest.c scale_reg.c scaleandtile.c \ scaletest1.c scaletest2.c seedfilltest.c seedspread_reg.c \ selio_reg.c sharptest.c shear1_reg.c shear2_reg.c sheartest.c \ showedges.c skew_reg.c skewtest.c smallpix_reg.c \ smoothedge_reg.c snapcolortest.c sorttest.c splitcomp_reg.c \ splitimage2pdf.c string_reg.c subpixel_reg.c sudokutest.c \ threshnorm_reg.c translate_reg.c trctest.c viewertest.c \ warper_reg.c warpertest.c watershedtest.c webpio_reg.c \ wordboxes_reg.c wordsinorder.c writemtiff.c writetext_reg.c \ xformbox_reg.c xtractprotos.c yuvtest.c ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= 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; }; \ } # Restructured Text title and section. am__rst_title = sed 's/.*/ & /;h;s/./=/g;p;x;p;g;p;s/.*//' am__rst_section = sed 'p;s/./=/g;p;g' # Put stdin (possibly several lines separated by ". ") in a box. # Prefix each line by 'col' and terminate each with 'std', for coloring. # Multi line coloring is problematic with "less -R", so we really need # to color each line individually. am__text_box = $(AWK) '{ \ n = split($$0, lines, "\\. "); max = 0; \ for (i = 1; i <= n; ++i) \ if (max < length(lines[i])) \ max = length(lines[i]); \ for (i = 0; i < max; ++i) \ line = line "="; \ print col line std; \ for (i = 1; i <= n; ++i) \ if (lines[i]) \ print col lines[i] std; \ print col line std; \ }' # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log, and passes # TESTS_ENVIRONMENT. Save and restore TERM around use of # TESTS_ENVIRONMENT, in case that unsets it. am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ srcdir=$(srcdir); export srcdir; \ rm -f $@-t; \ am__trap='rm -f '\''$(abs_builddir)/$@-t'\''; (exit $$st); exit $$st'; \ trap "st=129; $$am__trap" 1; trap "st=130; $$am__trap" 2; \ trap "st=141; $$am__trap" 13; trap "st=143; $$am__trap" 15; \ am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`; \ test "x$$am__odir" = x. || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; __SAVED_TERM=$$TERM; \ $(TESTS_ENVIRONMENT) # To be appended to the command running the test. Handle the stdout # and stderr redirection, and catch the exit status. am__check_post = \ >$@-t 2>&1; \ estatus=$$?; \ if test -n '$(DISABLE_HARD_ERRORS)' \ && test $$estatus -eq 99; then \ estatus=1; \ fi; \ TERM=$$__SAVED_TERM; export TERM; \ $(am__tty_colors); \ xfailed=PASS; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ xfailed=XFAIL;; \ esac; \ case $$estatus.$$xfailed in \ 0.XFAIL) col=$$red; res=XPASS;; \ 0.*) col=$$grn; res=PASS ;; \ 77.*) col=$$blu; res=SKIP ;; \ 99.*) col=$$red; res=FAIL ;; \ *.XFAIL) col=$$lgn; res=XFAIL;; \ *.*) col=$$red; res=FAIL ;; \ esac; \ echo "$${col}$$res$${std}: $$f"; \ echo "$$res: $$f (exit: $$estatus)" | \ $(am__rst_section) >$@; \ cat $@-t >>$@; \ rm -f $@-t RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck check-html recheck-html TEST_SUITE_HTML = $(TEST_SUITE_LOG:.log=.html) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) TEST_LOGS_TMP = $(TEST_LOGS:.log=.log-t) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ 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@ ENDIANNESS = @ENDIANNESS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDI_LIBS = @GDI_LIBS@ GIFLIB_LIBS = @GIFLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEG_LIBS = @JPEG_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBTIFF_LIBS = @LIBTIFF_LIBS@ LIBTOOL = @LIBTOOL@ LIBWEBP_LIBS = @LIBWEBP_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ 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@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ ZLIB_LIBS = @ZLIB_LIBS@ 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_DUMPBIN = @ac_ct_DUMPBIN@ 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@ 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@ 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@ AUTOMAKE_OPTIONS = parallel-tests AM_CFLAGS = $(DEBUG_FLAGS) AM_CPPFLAGS = -I$(top_srcdir)/src LDADD = $(top_builddir)/src/liblept.la $(LIBM) INSTALL_PROGS = convertfilestopdf convertfilestops \ convertformat \ convertsegfilestopdf convertsegfilestops \ converttopdf converttops fileinfo \ printimage printsplitimage printtiff \ splitimage2pdf xtractprotos AUTO_REG_PROGS = alphaops_reg alphaxform_reg \ binarize_reg blackwhite_reg \ blend3_reg blend4_reg \ colorcontent_reg coloring_reg \ colormask_reg colorquant_reg \ colorspace_reg compare_reg \ convolve_reg dewarp_reg \ dna_reg dwamorph1_reg enhance_reg \ findcorners_reg findpattern_reg \ fpix1_reg fpix2_reg \ graymorph2_reg hardlight_reg \ insert_reg ioformats_reg \ jpegio_reg kernel_reg label_reg \ maze_reg multitype_reg \ nearline_reg newspaper_reg \ overlap_reg paint_reg paintmask_reg \ pdfseg_reg pixa2_reg \ pixserial_reg pngio_reg \ projection_reg psio_reg psioseg_reg \ rankbin_reg rankhisto_reg \ rasteropip_reg \ rotate1_reg rotate2_reg rotateorth_reg \ scale_reg seedspread_reg \ selio_reg shear1_reg shear2_reg \ skew_reg splitcomp_reg subpixel_reg \ threshnorm_reg translate_reg \ warper_reg writetext_reg xformbox_reg MANUAL_REG_PROGS = alltests_reg adaptnorm_reg affine_reg \ bilateral1_reg bilateral2_reg bilinear_reg \ binmorph1_reg binmorph2_reg binmorph3_reg \ binmorph4_reg binmorph5_reg \ blend1_reg blend2_reg boxa1_reg \ ccthin1_reg ccthin2_reg cmapquant_reg \ colorize_reg colorseg_reg compfilter_reg \ conncomp_reg conversion_reg distance_reg \ dwamorph2_reg equal_reg expand_reg extrema_reg \ fhmtauto_reg flipdetect_reg fmorphauto_reg \ gifio_reg grayfill_reg graymorph1_reg \ grayquant_reg heap_reg locminmax_reg \ logicops_reg lowaccess_reg morphseq_reg \ numa1_reg numa2_reg pixa1_reg \ pixadisp_reg pixalloc_reg pixcomp_reg \ pixmem_reg pixtile_reg projective_reg \ pta_reg ptra1_reg ptra2_reg \ rank_reg rasterop_reg smallpix_reg \ smoothedge_reg string_reg \ webpio_reg wordboxes_reg OTHER_PROGS = adaptmaptest adaptmap_dark \ arabic_lines arithtest \ barcodetest baselinetest \ binarize_set bincompare \ blendcmaptest buffertest \ byteatest ccbordtest cctest1 \ colormorphtest colorsegtest colorspacetest \ comparepages comparetest \ contrasttest converttogray \ convolvetest cornertest \ croptest croptext \ dewarprules dewarptest1 dewarptest2 \ dewarptest3 dewarptest4 \ digitprep1 displayboxa \ displaypix displaypixa \ dithertest dwalineargen \ edgetest falsecolortest \ fcombautogen fhmtautogen \ findpattern1 findpattern2 findpattern3 \ flipselgen fmorphautogen \ fpixcontours gammatest genfonts \ graphicstest graymorphtest \ histotest iotest italictest \ jbcorrelation jbrankhaus jbwords \ lineremoval listtest \ livre_adapt livre_hmt \ livre_makefigs livre_orient \ livre_pageseg livre_seedgen livre_tophat \ maketile misctest1 \ modifyhuesat morphtest1 mtifftest \ numaranktest otsutest1 otsutest2 \ pagesegtest1 pagesegtest2 \ partitiontest pdfiotest \ pixaatest plottest \ quadtreetest ranktest \ recogsort recogtest1 \ reducetest removecmap \ renderfonts rotatefastalt \ rotateorthtest1 rotatetest1 \ runlengthtest scaleandtile \ scaletest1 scaletest2 \ seedfilltest sharptest \ sheartest showedges \ skewtest snapcolortest \ sorttest sudokutest trctest \ viewertest warpertest \ watershedtest wordsinorder \ writemtiff yuvtest TESTS_ENVIRONMENT = $(srcdir)/reg_wrapper.sh EXTRA_DIST = reg_wrapper.sh dwamorph1_reg_SOURCES = dwamorph1_reg.c dwalinear.3.c dwalinearlow.3.c dwamorph2_reg_SOURCES = dwamorph2_reg.c dwalinear.3.c dwalinearlow.3.c all: all-am .SUFFIXES: .SUFFIXES: .c .html .lo .log .o .obj .test .test$(EXEEXT) $(srcdir)/Makefile.in: $(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) --gnu prog/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu prog/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ 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 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 clean-noinstPROGRAMS: @list='$(noinst_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 adaptmap_dark$(EXEEXT): $(adaptmap_dark_OBJECTS) $(adaptmap_dark_DEPENDENCIES) $(EXTRA_adaptmap_dark_DEPENDENCIES) @rm -f adaptmap_dark$(EXEEXT) $(AM_V_CCLD)$(LINK) $(adaptmap_dark_OBJECTS) $(adaptmap_dark_LDADD) $(LIBS) adaptmaptest$(EXEEXT): $(adaptmaptest_OBJECTS) $(adaptmaptest_DEPENDENCIES) $(EXTRA_adaptmaptest_DEPENDENCIES) @rm -f adaptmaptest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(adaptmaptest_OBJECTS) $(adaptmaptest_LDADD) $(LIBS) adaptnorm_reg$(EXEEXT): $(adaptnorm_reg_OBJECTS) $(adaptnorm_reg_DEPENDENCIES) $(EXTRA_adaptnorm_reg_DEPENDENCIES) @rm -f adaptnorm_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(adaptnorm_reg_OBJECTS) $(adaptnorm_reg_LDADD) $(LIBS) affine_reg$(EXEEXT): $(affine_reg_OBJECTS) $(affine_reg_DEPENDENCIES) $(EXTRA_affine_reg_DEPENDENCIES) @rm -f affine_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(affine_reg_OBJECTS) $(affine_reg_LDADD) $(LIBS) alltests_reg$(EXEEXT): $(alltests_reg_OBJECTS) $(alltests_reg_DEPENDENCIES) $(EXTRA_alltests_reg_DEPENDENCIES) @rm -f alltests_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(alltests_reg_OBJECTS) $(alltests_reg_LDADD) $(LIBS) alphaops_reg$(EXEEXT): $(alphaops_reg_OBJECTS) $(alphaops_reg_DEPENDENCIES) $(EXTRA_alphaops_reg_DEPENDENCIES) @rm -f alphaops_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(alphaops_reg_OBJECTS) $(alphaops_reg_LDADD) $(LIBS) alphaxform_reg$(EXEEXT): $(alphaxform_reg_OBJECTS) $(alphaxform_reg_DEPENDENCIES) $(EXTRA_alphaxform_reg_DEPENDENCIES) @rm -f alphaxform_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(alphaxform_reg_OBJECTS) $(alphaxform_reg_LDADD) $(LIBS) arabic_lines$(EXEEXT): $(arabic_lines_OBJECTS) $(arabic_lines_DEPENDENCIES) $(EXTRA_arabic_lines_DEPENDENCIES) @rm -f arabic_lines$(EXEEXT) $(AM_V_CCLD)$(LINK) $(arabic_lines_OBJECTS) $(arabic_lines_LDADD) $(LIBS) arithtest$(EXEEXT): $(arithtest_OBJECTS) $(arithtest_DEPENDENCIES) $(EXTRA_arithtest_DEPENDENCIES) @rm -f arithtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(arithtest_OBJECTS) $(arithtest_LDADD) $(LIBS) barcodetest$(EXEEXT): $(barcodetest_OBJECTS) $(barcodetest_DEPENDENCIES) $(EXTRA_barcodetest_DEPENDENCIES) @rm -f barcodetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(barcodetest_OBJECTS) $(barcodetest_LDADD) $(LIBS) baselinetest$(EXEEXT): $(baselinetest_OBJECTS) $(baselinetest_DEPENDENCIES) $(EXTRA_baselinetest_DEPENDENCIES) @rm -f baselinetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(baselinetest_OBJECTS) $(baselinetest_LDADD) $(LIBS) bilateral1_reg$(EXEEXT): $(bilateral1_reg_OBJECTS) $(bilateral1_reg_DEPENDENCIES) $(EXTRA_bilateral1_reg_DEPENDENCIES) @rm -f bilateral1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bilateral1_reg_OBJECTS) $(bilateral1_reg_LDADD) $(LIBS) bilateral2_reg$(EXEEXT): $(bilateral2_reg_OBJECTS) $(bilateral2_reg_DEPENDENCIES) $(EXTRA_bilateral2_reg_DEPENDENCIES) @rm -f bilateral2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bilateral2_reg_OBJECTS) $(bilateral2_reg_LDADD) $(LIBS) bilinear_reg$(EXEEXT): $(bilinear_reg_OBJECTS) $(bilinear_reg_DEPENDENCIES) $(EXTRA_bilinear_reg_DEPENDENCIES) @rm -f bilinear_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bilinear_reg_OBJECTS) $(bilinear_reg_LDADD) $(LIBS) binarize_reg$(EXEEXT): $(binarize_reg_OBJECTS) $(binarize_reg_DEPENDENCIES) $(EXTRA_binarize_reg_DEPENDENCIES) @rm -f binarize_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(binarize_reg_OBJECTS) $(binarize_reg_LDADD) $(LIBS) binarize_set$(EXEEXT): $(binarize_set_OBJECTS) $(binarize_set_DEPENDENCIES) $(EXTRA_binarize_set_DEPENDENCIES) @rm -f binarize_set$(EXEEXT) $(AM_V_CCLD)$(LINK) $(binarize_set_OBJECTS) $(binarize_set_LDADD) $(LIBS) bincompare$(EXEEXT): $(bincompare_OBJECTS) $(bincompare_DEPENDENCIES) $(EXTRA_bincompare_DEPENDENCIES) @rm -f bincompare$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bincompare_OBJECTS) $(bincompare_LDADD) $(LIBS) binmorph1_reg$(EXEEXT): $(binmorph1_reg_OBJECTS) $(binmorph1_reg_DEPENDENCIES) $(EXTRA_binmorph1_reg_DEPENDENCIES) @rm -f binmorph1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(binmorph1_reg_OBJECTS) $(binmorph1_reg_LDADD) $(LIBS) binmorph2_reg$(EXEEXT): $(binmorph2_reg_OBJECTS) $(binmorph2_reg_DEPENDENCIES) $(EXTRA_binmorph2_reg_DEPENDENCIES) @rm -f binmorph2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(binmorph2_reg_OBJECTS) $(binmorph2_reg_LDADD) $(LIBS) binmorph3_reg$(EXEEXT): $(binmorph3_reg_OBJECTS) $(binmorph3_reg_DEPENDENCIES) $(EXTRA_binmorph3_reg_DEPENDENCIES) @rm -f binmorph3_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(binmorph3_reg_OBJECTS) $(binmorph3_reg_LDADD) $(LIBS) binmorph4_reg$(EXEEXT): $(binmorph4_reg_OBJECTS) $(binmorph4_reg_DEPENDENCIES) $(EXTRA_binmorph4_reg_DEPENDENCIES) @rm -f binmorph4_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(binmorph4_reg_OBJECTS) $(binmorph4_reg_LDADD) $(LIBS) binmorph5_reg$(EXEEXT): $(binmorph5_reg_OBJECTS) $(binmorph5_reg_DEPENDENCIES) $(EXTRA_binmorph5_reg_DEPENDENCIES) @rm -f binmorph5_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(binmorph5_reg_OBJECTS) $(binmorph5_reg_LDADD) $(LIBS) blackwhite_reg$(EXEEXT): $(blackwhite_reg_OBJECTS) $(blackwhite_reg_DEPENDENCIES) $(EXTRA_blackwhite_reg_DEPENDENCIES) @rm -f blackwhite_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blackwhite_reg_OBJECTS) $(blackwhite_reg_LDADD) $(LIBS) blend1_reg$(EXEEXT): $(blend1_reg_OBJECTS) $(blend1_reg_DEPENDENCIES) $(EXTRA_blend1_reg_DEPENDENCIES) @rm -f blend1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blend1_reg_OBJECTS) $(blend1_reg_LDADD) $(LIBS) blend2_reg$(EXEEXT): $(blend2_reg_OBJECTS) $(blend2_reg_DEPENDENCIES) $(EXTRA_blend2_reg_DEPENDENCIES) @rm -f blend2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blend2_reg_OBJECTS) $(blend2_reg_LDADD) $(LIBS) blend3_reg$(EXEEXT): $(blend3_reg_OBJECTS) $(blend3_reg_DEPENDENCIES) $(EXTRA_blend3_reg_DEPENDENCIES) @rm -f blend3_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blend3_reg_OBJECTS) $(blend3_reg_LDADD) $(LIBS) blend4_reg$(EXEEXT): $(blend4_reg_OBJECTS) $(blend4_reg_DEPENDENCIES) $(EXTRA_blend4_reg_DEPENDENCIES) @rm -f blend4_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blend4_reg_OBJECTS) $(blend4_reg_LDADD) $(LIBS) blendcmaptest$(EXEEXT): $(blendcmaptest_OBJECTS) $(blendcmaptest_DEPENDENCIES) $(EXTRA_blendcmaptest_DEPENDENCIES) @rm -f blendcmaptest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(blendcmaptest_OBJECTS) $(blendcmaptest_LDADD) $(LIBS) boxa1_reg$(EXEEXT): $(boxa1_reg_OBJECTS) $(boxa1_reg_DEPENDENCIES) $(EXTRA_boxa1_reg_DEPENDENCIES) @rm -f boxa1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(boxa1_reg_OBJECTS) $(boxa1_reg_LDADD) $(LIBS) buffertest$(EXEEXT): $(buffertest_OBJECTS) $(buffertest_DEPENDENCIES) $(EXTRA_buffertest_DEPENDENCIES) @rm -f buffertest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(buffertest_OBJECTS) $(buffertest_LDADD) $(LIBS) byteatest$(EXEEXT): $(byteatest_OBJECTS) $(byteatest_DEPENDENCIES) $(EXTRA_byteatest_DEPENDENCIES) @rm -f byteatest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(byteatest_OBJECTS) $(byteatest_LDADD) $(LIBS) ccbordtest$(EXEEXT): $(ccbordtest_OBJECTS) $(ccbordtest_DEPENDENCIES) $(EXTRA_ccbordtest_DEPENDENCIES) @rm -f ccbordtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ccbordtest_OBJECTS) $(ccbordtest_LDADD) $(LIBS) cctest1$(EXEEXT): $(cctest1_OBJECTS) $(cctest1_DEPENDENCIES) $(EXTRA_cctest1_DEPENDENCIES) @rm -f cctest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cctest1_OBJECTS) $(cctest1_LDADD) $(LIBS) ccthin1_reg$(EXEEXT): $(ccthin1_reg_OBJECTS) $(ccthin1_reg_DEPENDENCIES) $(EXTRA_ccthin1_reg_DEPENDENCIES) @rm -f ccthin1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ccthin1_reg_OBJECTS) $(ccthin1_reg_LDADD) $(LIBS) ccthin2_reg$(EXEEXT): $(ccthin2_reg_OBJECTS) $(ccthin2_reg_DEPENDENCIES) $(EXTRA_ccthin2_reg_DEPENDENCIES) @rm -f ccthin2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ccthin2_reg_OBJECTS) $(ccthin2_reg_LDADD) $(LIBS) cmapquant_reg$(EXEEXT): $(cmapquant_reg_OBJECTS) $(cmapquant_reg_DEPENDENCIES) $(EXTRA_cmapquant_reg_DEPENDENCIES) @rm -f cmapquant_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cmapquant_reg_OBJECTS) $(cmapquant_reg_LDADD) $(LIBS) colorcontent_reg$(EXEEXT): $(colorcontent_reg_OBJECTS) $(colorcontent_reg_DEPENDENCIES) $(EXTRA_colorcontent_reg_DEPENDENCIES) @rm -f colorcontent_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colorcontent_reg_OBJECTS) $(colorcontent_reg_LDADD) $(LIBS) coloring_reg$(EXEEXT): $(coloring_reg_OBJECTS) $(coloring_reg_DEPENDENCIES) $(EXTRA_coloring_reg_DEPENDENCIES) @rm -f coloring_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(coloring_reg_OBJECTS) $(coloring_reg_LDADD) $(LIBS) colorize_reg$(EXEEXT): $(colorize_reg_OBJECTS) $(colorize_reg_DEPENDENCIES) $(EXTRA_colorize_reg_DEPENDENCIES) @rm -f colorize_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colorize_reg_OBJECTS) $(colorize_reg_LDADD) $(LIBS) colormask_reg$(EXEEXT): $(colormask_reg_OBJECTS) $(colormask_reg_DEPENDENCIES) $(EXTRA_colormask_reg_DEPENDENCIES) @rm -f colormask_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colormask_reg_OBJECTS) $(colormask_reg_LDADD) $(LIBS) colormorphtest$(EXEEXT): $(colormorphtest_OBJECTS) $(colormorphtest_DEPENDENCIES) $(EXTRA_colormorphtest_DEPENDENCIES) @rm -f colormorphtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colormorphtest_OBJECTS) $(colormorphtest_LDADD) $(LIBS) colorquant_reg$(EXEEXT): $(colorquant_reg_OBJECTS) $(colorquant_reg_DEPENDENCIES) $(EXTRA_colorquant_reg_DEPENDENCIES) @rm -f colorquant_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colorquant_reg_OBJECTS) $(colorquant_reg_LDADD) $(LIBS) colorseg_reg$(EXEEXT): $(colorseg_reg_OBJECTS) $(colorseg_reg_DEPENDENCIES) $(EXTRA_colorseg_reg_DEPENDENCIES) @rm -f colorseg_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colorseg_reg_OBJECTS) $(colorseg_reg_LDADD) $(LIBS) colorsegtest$(EXEEXT): $(colorsegtest_OBJECTS) $(colorsegtest_DEPENDENCIES) $(EXTRA_colorsegtest_DEPENDENCIES) @rm -f colorsegtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colorsegtest_OBJECTS) $(colorsegtest_LDADD) $(LIBS) colorspace_reg$(EXEEXT): $(colorspace_reg_OBJECTS) $(colorspace_reg_DEPENDENCIES) $(EXTRA_colorspace_reg_DEPENDENCIES) @rm -f colorspace_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colorspace_reg_OBJECTS) $(colorspace_reg_LDADD) $(LIBS) colorspacetest$(EXEEXT): $(colorspacetest_OBJECTS) $(colorspacetest_DEPENDENCIES) $(EXTRA_colorspacetest_DEPENDENCIES) @rm -f colorspacetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(colorspacetest_OBJECTS) $(colorspacetest_LDADD) $(LIBS) compare_reg$(EXEEXT): $(compare_reg_OBJECTS) $(compare_reg_DEPENDENCIES) $(EXTRA_compare_reg_DEPENDENCIES) @rm -f compare_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(compare_reg_OBJECTS) $(compare_reg_LDADD) $(LIBS) comparepages$(EXEEXT): $(comparepages_OBJECTS) $(comparepages_DEPENDENCIES) $(EXTRA_comparepages_DEPENDENCIES) @rm -f comparepages$(EXEEXT) $(AM_V_CCLD)$(LINK) $(comparepages_OBJECTS) $(comparepages_LDADD) $(LIBS) comparetest$(EXEEXT): $(comparetest_OBJECTS) $(comparetest_DEPENDENCIES) $(EXTRA_comparetest_DEPENDENCIES) @rm -f comparetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(comparetest_OBJECTS) $(comparetest_LDADD) $(LIBS) compfilter_reg$(EXEEXT): $(compfilter_reg_OBJECTS) $(compfilter_reg_DEPENDENCIES) $(EXTRA_compfilter_reg_DEPENDENCIES) @rm -f compfilter_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(compfilter_reg_OBJECTS) $(compfilter_reg_LDADD) $(LIBS) conncomp_reg$(EXEEXT): $(conncomp_reg_OBJECTS) $(conncomp_reg_DEPENDENCIES) $(EXTRA_conncomp_reg_DEPENDENCIES) @rm -f conncomp_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(conncomp_reg_OBJECTS) $(conncomp_reg_LDADD) $(LIBS) contrasttest$(EXEEXT): $(contrasttest_OBJECTS) $(contrasttest_DEPENDENCIES) $(EXTRA_contrasttest_DEPENDENCIES) @rm -f contrasttest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(contrasttest_OBJECTS) $(contrasttest_LDADD) $(LIBS) conversion_reg$(EXEEXT): $(conversion_reg_OBJECTS) $(conversion_reg_DEPENDENCIES) $(EXTRA_conversion_reg_DEPENDENCIES) @rm -f conversion_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(conversion_reg_OBJECTS) $(conversion_reg_LDADD) $(LIBS) convertfilestopdf$(EXEEXT): $(convertfilestopdf_OBJECTS) $(convertfilestopdf_DEPENDENCIES) $(EXTRA_convertfilestopdf_DEPENDENCIES) @rm -f convertfilestopdf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convertfilestopdf_OBJECTS) $(convertfilestopdf_LDADD) $(LIBS) convertfilestops$(EXEEXT): $(convertfilestops_OBJECTS) $(convertfilestops_DEPENDENCIES) $(EXTRA_convertfilestops_DEPENDENCIES) @rm -f convertfilestops$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convertfilestops_OBJECTS) $(convertfilestops_LDADD) $(LIBS) convertformat$(EXEEXT): $(convertformat_OBJECTS) $(convertformat_DEPENDENCIES) $(EXTRA_convertformat_DEPENDENCIES) @rm -f convertformat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convertformat_OBJECTS) $(convertformat_LDADD) $(LIBS) convertsegfilestopdf$(EXEEXT): $(convertsegfilestopdf_OBJECTS) $(convertsegfilestopdf_DEPENDENCIES) $(EXTRA_convertsegfilestopdf_DEPENDENCIES) @rm -f convertsegfilestopdf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convertsegfilestopdf_OBJECTS) $(convertsegfilestopdf_LDADD) $(LIBS) convertsegfilestops$(EXEEXT): $(convertsegfilestops_OBJECTS) $(convertsegfilestops_DEPENDENCIES) $(EXTRA_convertsegfilestops_DEPENDENCIES) @rm -f convertsegfilestops$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convertsegfilestops_OBJECTS) $(convertsegfilestops_LDADD) $(LIBS) converttogray$(EXEEXT): $(converttogray_OBJECTS) $(converttogray_DEPENDENCIES) $(EXTRA_converttogray_DEPENDENCIES) @rm -f converttogray$(EXEEXT) $(AM_V_CCLD)$(LINK) $(converttogray_OBJECTS) $(converttogray_LDADD) $(LIBS) converttopdf$(EXEEXT): $(converttopdf_OBJECTS) $(converttopdf_DEPENDENCIES) $(EXTRA_converttopdf_DEPENDENCIES) @rm -f converttopdf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(converttopdf_OBJECTS) $(converttopdf_LDADD) $(LIBS) converttops$(EXEEXT): $(converttops_OBJECTS) $(converttops_DEPENDENCIES) $(EXTRA_converttops_DEPENDENCIES) @rm -f converttops$(EXEEXT) $(AM_V_CCLD)$(LINK) $(converttops_OBJECTS) $(converttops_LDADD) $(LIBS) convolve_reg$(EXEEXT): $(convolve_reg_OBJECTS) $(convolve_reg_DEPENDENCIES) $(EXTRA_convolve_reg_DEPENDENCIES) @rm -f convolve_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convolve_reg_OBJECTS) $(convolve_reg_LDADD) $(LIBS) convolvetest$(EXEEXT): $(convolvetest_OBJECTS) $(convolvetest_DEPENDENCIES) $(EXTRA_convolvetest_DEPENDENCIES) @rm -f convolvetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(convolvetest_OBJECTS) $(convolvetest_LDADD) $(LIBS) cornertest$(EXEEXT): $(cornertest_OBJECTS) $(cornertest_DEPENDENCIES) $(EXTRA_cornertest_DEPENDENCIES) @rm -f cornertest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(cornertest_OBJECTS) $(cornertest_LDADD) $(LIBS) croptest$(EXEEXT): $(croptest_OBJECTS) $(croptest_DEPENDENCIES) $(EXTRA_croptest_DEPENDENCIES) @rm -f croptest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(croptest_OBJECTS) $(croptest_LDADD) $(LIBS) croptext$(EXEEXT): $(croptext_OBJECTS) $(croptext_DEPENDENCIES) $(EXTRA_croptext_DEPENDENCIES) @rm -f croptext$(EXEEXT) $(AM_V_CCLD)$(LINK) $(croptext_OBJECTS) $(croptext_LDADD) $(LIBS) dewarp_reg$(EXEEXT): $(dewarp_reg_OBJECTS) $(dewarp_reg_DEPENDENCIES) $(EXTRA_dewarp_reg_DEPENDENCIES) @rm -f dewarp_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dewarp_reg_OBJECTS) $(dewarp_reg_LDADD) $(LIBS) dewarprules$(EXEEXT): $(dewarprules_OBJECTS) $(dewarprules_DEPENDENCIES) $(EXTRA_dewarprules_DEPENDENCIES) @rm -f dewarprules$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dewarprules_OBJECTS) $(dewarprules_LDADD) $(LIBS) dewarptest1$(EXEEXT): $(dewarptest1_OBJECTS) $(dewarptest1_DEPENDENCIES) $(EXTRA_dewarptest1_DEPENDENCIES) @rm -f dewarptest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dewarptest1_OBJECTS) $(dewarptest1_LDADD) $(LIBS) dewarptest2$(EXEEXT): $(dewarptest2_OBJECTS) $(dewarptest2_DEPENDENCIES) $(EXTRA_dewarptest2_DEPENDENCIES) @rm -f dewarptest2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dewarptest2_OBJECTS) $(dewarptest2_LDADD) $(LIBS) dewarptest3$(EXEEXT): $(dewarptest3_OBJECTS) $(dewarptest3_DEPENDENCIES) $(EXTRA_dewarptest3_DEPENDENCIES) @rm -f dewarptest3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dewarptest3_OBJECTS) $(dewarptest3_LDADD) $(LIBS) dewarptest4$(EXEEXT): $(dewarptest4_OBJECTS) $(dewarptest4_DEPENDENCIES) $(EXTRA_dewarptest4_DEPENDENCIES) @rm -f dewarptest4$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dewarptest4_OBJECTS) $(dewarptest4_LDADD) $(LIBS) digitprep1$(EXEEXT): $(digitprep1_OBJECTS) $(digitprep1_DEPENDENCIES) $(EXTRA_digitprep1_DEPENDENCIES) @rm -f digitprep1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(digitprep1_OBJECTS) $(digitprep1_LDADD) $(LIBS) displayboxa$(EXEEXT): $(displayboxa_OBJECTS) $(displayboxa_DEPENDENCIES) $(EXTRA_displayboxa_DEPENDENCIES) @rm -f displayboxa$(EXEEXT) $(AM_V_CCLD)$(LINK) $(displayboxa_OBJECTS) $(displayboxa_LDADD) $(LIBS) displaypix$(EXEEXT): $(displaypix_OBJECTS) $(displaypix_DEPENDENCIES) $(EXTRA_displaypix_DEPENDENCIES) @rm -f displaypix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(displaypix_OBJECTS) $(displaypix_LDADD) $(LIBS) displaypixa$(EXEEXT): $(displaypixa_OBJECTS) $(displaypixa_DEPENDENCIES) $(EXTRA_displaypixa_DEPENDENCIES) @rm -f displaypixa$(EXEEXT) $(AM_V_CCLD)$(LINK) $(displaypixa_OBJECTS) $(displaypixa_LDADD) $(LIBS) distance_reg$(EXEEXT): $(distance_reg_OBJECTS) $(distance_reg_DEPENDENCIES) $(EXTRA_distance_reg_DEPENDENCIES) @rm -f distance_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(distance_reg_OBJECTS) $(distance_reg_LDADD) $(LIBS) dithertest$(EXEEXT): $(dithertest_OBJECTS) $(dithertest_DEPENDENCIES) $(EXTRA_dithertest_DEPENDENCIES) @rm -f dithertest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dithertest_OBJECTS) $(dithertest_LDADD) $(LIBS) dna_reg$(EXEEXT): $(dna_reg_OBJECTS) $(dna_reg_DEPENDENCIES) $(EXTRA_dna_reg_DEPENDENCIES) @rm -f dna_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dna_reg_OBJECTS) $(dna_reg_LDADD) $(LIBS) dwalineargen$(EXEEXT): $(dwalineargen_OBJECTS) $(dwalineargen_DEPENDENCIES) $(EXTRA_dwalineargen_DEPENDENCIES) @rm -f dwalineargen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dwalineargen_OBJECTS) $(dwalineargen_LDADD) $(LIBS) dwamorph1_reg$(EXEEXT): $(dwamorph1_reg_OBJECTS) $(dwamorph1_reg_DEPENDENCIES) $(EXTRA_dwamorph1_reg_DEPENDENCIES) @rm -f dwamorph1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dwamorph1_reg_OBJECTS) $(dwamorph1_reg_LDADD) $(LIBS) dwamorph2_reg$(EXEEXT): $(dwamorph2_reg_OBJECTS) $(dwamorph2_reg_DEPENDENCIES) $(EXTRA_dwamorph2_reg_DEPENDENCIES) @rm -f dwamorph2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(dwamorph2_reg_OBJECTS) $(dwamorph2_reg_LDADD) $(LIBS) edgetest$(EXEEXT): $(edgetest_OBJECTS) $(edgetest_DEPENDENCIES) $(EXTRA_edgetest_DEPENDENCIES) @rm -f edgetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(edgetest_OBJECTS) $(edgetest_LDADD) $(LIBS) enhance_reg$(EXEEXT): $(enhance_reg_OBJECTS) $(enhance_reg_DEPENDENCIES) $(EXTRA_enhance_reg_DEPENDENCIES) @rm -f enhance_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(enhance_reg_OBJECTS) $(enhance_reg_LDADD) $(LIBS) equal_reg$(EXEEXT): $(equal_reg_OBJECTS) $(equal_reg_DEPENDENCIES) $(EXTRA_equal_reg_DEPENDENCIES) @rm -f equal_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(equal_reg_OBJECTS) $(equal_reg_LDADD) $(LIBS) expand_reg$(EXEEXT): $(expand_reg_OBJECTS) $(expand_reg_DEPENDENCIES) $(EXTRA_expand_reg_DEPENDENCIES) @rm -f expand_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(expand_reg_OBJECTS) $(expand_reg_LDADD) $(LIBS) extrema_reg$(EXEEXT): $(extrema_reg_OBJECTS) $(extrema_reg_DEPENDENCIES) $(EXTRA_extrema_reg_DEPENDENCIES) @rm -f extrema_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(extrema_reg_OBJECTS) $(extrema_reg_LDADD) $(LIBS) falsecolortest$(EXEEXT): $(falsecolortest_OBJECTS) $(falsecolortest_DEPENDENCIES) $(EXTRA_falsecolortest_DEPENDENCIES) @rm -f falsecolortest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(falsecolortest_OBJECTS) $(falsecolortest_LDADD) $(LIBS) fcombautogen$(EXEEXT): $(fcombautogen_OBJECTS) $(fcombautogen_DEPENDENCIES) $(EXTRA_fcombautogen_DEPENDENCIES) @rm -f fcombautogen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fcombautogen_OBJECTS) $(fcombautogen_LDADD) $(LIBS) fhmtauto_reg$(EXEEXT): $(fhmtauto_reg_OBJECTS) $(fhmtauto_reg_DEPENDENCIES) $(EXTRA_fhmtauto_reg_DEPENDENCIES) @rm -f fhmtauto_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fhmtauto_reg_OBJECTS) $(fhmtauto_reg_LDADD) $(LIBS) fhmtautogen$(EXEEXT): $(fhmtautogen_OBJECTS) $(fhmtautogen_DEPENDENCIES) $(EXTRA_fhmtautogen_DEPENDENCIES) @rm -f fhmtautogen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fhmtautogen_OBJECTS) $(fhmtautogen_LDADD) $(LIBS) fileinfo$(EXEEXT): $(fileinfo_OBJECTS) $(fileinfo_DEPENDENCIES) $(EXTRA_fileinfo_DEPENDENCIES) @rm -f fileinfo$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fileinfo_OBJECTS) $(fileinfo_LDADD) $(LIBS) findcorners_reg$(EXEEXT): $(findcorners_reg_OBJECTS) $(findcorners_reg_DEPENDENCIES) $(EXTRA_findcorners_reg_DEPENDENCIES) @rm -f findcorners_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(findcorners_reg_OBJECTS) $(findcorners_reg_LDADD) $(LIBS) findpattern1$(EXEEXT): $(findpattern1_OBJECTS) $(findpattern1_DEPENDENCIES) $(EXTRA_findpattern1_DEPENDENCIES) @rm -f findpattern1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(findpattern1_OBJECTS) $(findpattern1_LDADD) $(LIBS) findpattern2$(EXEEXT): $(findpattern2_OBJECTS) $(findpattern2_DEPENDENCIES) $(EXTRA_findpattern2_DEPENDENCIES) @rm -f findpattern2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(findpattern2_OBJECTS) $(findpattern2_LDADD) $(LIBS) findpattern3$(EXEEXT): $(findpattern3_OBJECTS) $(findpattern3_DEPENDENCIES) $(EXTRA_findpattern3_DEPENDENCIES) @rm -f findpattern3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(findpattern3_OBJECTS) $(findpattern3_LDADD) $(LIBS) findpattern_reg$(EXEEXT): $(findpattern_reg_OBJECTS) $(findpattern_reg_DEPENDENCIES) $(EXTRA_findpattern_reg_DEPENDENCIES) @rm -f findpattern_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(findpattern_reg_OBJECTS) $(findpattern_reg_LDADD) $(LIBS) flipdetect_reg$(EXEEXT): $(flipdetect_reg_OBJECTS) $(flipdetect_reg_DEPENDENCIES) $(EXTRA_flipdetect_reg_DEPENDENCIES) @rm -f flipdetect_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(flipdetect_reg_OBJECTS) $(flipdetect_reg_LDADD) $(LIBS) flipselgen$(EXEEXT): $(flipselgen_OBJECTS) $(flipselgen_DEPENDENCIES) $(EXTRA_flipselgen_DEPENDENCIES) @rm -f flipselgen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(flipselgen_OBJECTS) $(flipselgen_LDADD) $(LIBS) fmorphauto_reg$(EXEEXT): $(fmorphauto_reg_OBJECTS) $(fmorphauto_reg_DEPENDENCIES) $(EXTRA_fmorphauto_reg_DEPENDENCIES) @rm -f fmorphauto_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fmorphauto_reg_OBJECTS) $(fmorphauto_reg_LDADD) $(LIBS) fmorphautogen$(EXEEXT): $(fmorphautogen_OBJECTS) $(fmorphautogen_DEPENDENCIES) $(EXTRA_fmorphautogen_DEPENDENCIES) @rm -f fmorphautogen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fmorphautogen_OBJECTS) $(fmorphautogen_LDADD) $(LIBS) fpix1_reg$(EXEEXT): $(fpix1_reg_OBJECTS) $(fpix1_reg_DEPENDENCIES) $(EXTRA_fpix1_reg_DEPENDENCIES) @rm -f fpix1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fpix1_reg_OBJECTS) $(fpix1_reg_LDADD) $(LIBS) fpix2_reg$(EXEEXT): $(fpix2_reg_OBJECTS) $(fpix2_reg_DEPENDENCIES) $(EXTRA_fpix2_reg_DEPENDENCIES) @rm -f fpix2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fpix2_reg_OBJECTS) $(fpix2_reg_LDADD) $(LIBS) fpixcontours$(EXEEXT): $(fpixcontours_OBJECTS) $(fpixcontours_DEPENDENCIES) $(EXTRA_fpixcontours_DEPENDENCIES) @rm -f fpixcontours$(EXEEXT) $(AM_V_CCLD)$(LINK) $(fpixcontours_OBJECTS) $(fpixcontours_LDADD) $(LIBS) gammatest$(EXEEXT): $(gammatest_OBJECTS) $(gammatest_DEPENDENCIES) $(EXTRA_gammatest_DEPENDENCIES) @rm -f gammatest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gammatest_OBJECTS) $(gammatest_LDADD) $(LIBS) genfonts$(EXEEXT): $(genfonts_OBJECTS) $(genfonts_DEPENDENCIES) $(EXTRA_genfonts_DEPENDENCIES) @rm -f genfonts$(EXEEXT) $(AM_V_CCLD)$(LINK) $(genfonts_OBJECTS) $(genfonts_LDADD) $(LIBS) gifio_reg$(EXEEXT): $(gifio_reg_OBJECTS) $(gifio_reg_DEPENDENCIES) $(EXTRA_gifio_reg_DEPENDENCIES) @rm -f gifio_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gifio_reg_OBJECTS) $(gifio_reg_LDADD) $(LIBS) graphicstest$(EXEEXT): $(graphicstest_OBJECTS) $(graphicstest_DEPENDENCIES) $(EXTRA_graphicstest_DEPENDENCIES) @rm -f graphicstest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(graphicstest_OBJECTS) $(graphicstest_LDADD) $(LIBS) grayfill_reg$(EXEEXT): $(grayfill_reg_OBJECTS) $(grayfill_reg_DEPENDENCIES) $(EXTRA_grayfill_reg_DEPENDENCIES) @rm -f grayfill_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(grayfill_reg_OBJECTS) $(grayfill_reg_LDADD) $(LIBS) graymorph1_reg$(EXEEXT): $(graymorph1_reg_OBJECTS) $(graymorph1_reg_DEPENDENCIES) $(EXTRA_graymorph1_reg_DEPENDENCIES) @rm -f graymorph1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(graymorph1_reg_OBJECTS) $(graymorph1_reg_LDADD) $(LIBS) graymorph2_reg$(EXEEXT): $(graymorph2_reg_OBJECTS) $(graymorph2_reg_DEPENDENCIES) $(EXTRA_graymorph2_reg_DEPENDENCIES) @rm -f graymorph2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(graymorph2_reg_OBJECTS) $(graymorph2_reg_LDADD) $(LIBS) graymorphtest$(EXEEXT): $(graymorphtest_OBJECTS) $(graymorphtest_DEPENDENCIES) $(EXTRA_graymorphtest_DEPENDENCIES) @rm -f graymorphtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(graymorphtest_OBJECTS) $(graymorphtest_LDADD) $(LIBS) grayquant_reg$(EXEEXT): $(grayquant_reg_OBJECTS) $(grayquant_reg_DEPENDENCIES) $(EXTRA_grayquant_reg_DEPENDENCIES) @rm -f grayquant_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(grayquant_reg_OBJECTS) $(grayquant_reg_LDADD) $(LIBS) hardlight_reg$(EXEEXT): $(hardlight_reg_OBJECTS) $(hardlight_reg_DEPENDENCIES) $(EXTRA_hardlight_reg_DEPENDENCIES) @rm -f hardlight_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(hardlight_reg_OBJECTS) $(hardlight_reg_LDADD) $(LIBS) heap_reg$(EXEEXT): $(heap_reg_OBJECTS) $(heap_reg_DEPENDENCIES) $(EXTRA_heap_reg_DEPENDENCIES) @rm -f heap_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(heap_reg_OBJECTS) $(heap_reg_LDADD) $(LIBS) histotest$(EXEEXT): $(histotest_OBJECTS) $(histotest_DEPENDENCIES) $(EXTRA_histotest_DEPENDENCIES) @rm -f histotest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(histotest_OBJECTS) $(histotest_LDADD) $(LIBS) insert_reg$(EXEEXT): $(insert_reg_OBJECTS) $(insert_reg_DEPENDENCIES) $(EXTRA_insert_reg_DEPENDENCIES) @rm -f insert_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(insert_reg_OBJECTS) $(insert_reg_LDADD) $(LIBS) ioformats_reg$(EXEEXT): $(ioformats_reg_OBJECTS) $(ioformats_reg_DEPENDENCIES) $(EXTRA_ioformats_reg_DEPENDENCIES) @rm -f ioformats_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ioformats_reg_OBJECTS) $(ioformats_reg_LDADD) $(LIBS) iotest$(EXEEXT): $(iotest_OBJECTS) $(iotest_DEPENDENCIES) $(EXTRA_iotest_DEPENDENCIES) @rm -f iotest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(iotest_OBJECTS) $(iotest_LDADD) $(LIBS) italictest$(EXEEXT): $(italictest_OBJECTS) $(italictest_DEPENDENCIES) $(EXTRA_italictest_DEPENDENCIES) @rm -f italictest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(italictest_OBJECTS) $(italictest_LDADD) $(LIBS) jbcorrelation$(EXEEXT): $(jbcorrelation_OBJECTS) $(jbcorrelation_DEPENDENCIES) $(EXTRA_jbcorrelation_DEPENDENCIES) @rm -f jbcorrelation$(EXEEXT) $(AM_V_CCLD)$(LINK) $(jbcorrelation_OBJECTS) $(jbcorrelation_LDADD) $(LIBS) jbrankhaus$(EXEEXT): $(jbrankhaus_OBJECTS) $(jbrankhaus_DEPENDENCIES) $(EXTRA_jbrankhaus_DEPENDENCIES) @rm -f jbrankhaus$(EXEEXT) $(AM_V_CCLD)$(LINK) $(jbrankhaus_OBJECTS) $(jbrankhaus_LDADD) $(LIBS) jbwords$(EXEEXT): $(jbwords_OBJECTS) $(jbwords_DEPENDENCIES) $(EXTRA_jbwords_DEPENDENCIES) @rm -f jbwords$(EXEEXT) $(AM_V_CCLD)$(LINK) $(jbwords_OBJECTS) $(jbwords_LDADD) $(LIBS) jpegio_reg$(EXEEXT): $(jpegio_reg_OBJECTS) $(jpegio_reg_DEPENDENCIES) $(EXTRA_jpegio_reg_DEPENDENCIES) @rm -f jpegio_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(jpegio_reg_OBJECTS) $(jpegio_reg_LDADD) $(LIBS) kernel_reg$(EXEEXT): $(kernel_reg_OBJECTS) $(kernel_reg_DEPENDENCIES) $(EXTRA_kernel_reg_DEPENDENCIES) @rm -f kernel_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(kernel_reg_OBJECTS) $(kernel_reg_LDADD) $(LIBS) label_reg$(EXEEXT): $(label_reg_OBJECTS) $(label_reg_DEPENDENCIES) $(EXTRA_label_reg_DEPENDENCIES) @rm -f label_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(label_reg_OBJECTS) $(label_reg_LDADD) $(LIBS) lineremoval$(EXEEXT): $(lineremoval_OBJECTS) $(lineremoval_DEPENDENCIES) $(EXTRA_lineremoval_DEPENDENCIES) @rm -f lineremoval$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lineremoval_OBJECTS) $(lineremoval_LDADD) $(LIBS) listtest$(EXEEXT): $(listtest_OBJECTS) $(listtest_DEPENDENCIES) $(EXTRA_listtest_DEPENDENCIES) @rm -f listtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(listtest_OBJECTS) $(listtest_LDADD) $(LIBS) livre_adapt$(EXEEXT): $(livre_adapt_OBJECTS) $(livre_adapt_DEPENDENCIES) $(EXTRA_livre_adapt_DEPENDENCIES) @rm -f livre_adapt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(livre_adapt_OBJECTS) $(livre_adapt_LDADD) $(LIBS) livre_hmt$(EXEEXT): $(livre_hmt_OBJECTS) $(livre_hmt_DEPENDENCIES) $(EXTRA_livre_hmt_DEPENDENCIES) @rm -f livre_hmt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(livre_hmt_OBJECTS) $(livre_hmt_LDADD) $(LIBS) livre_makefigs$(EXEEXT): $(livre_makefigs_OBJECTS) $(livre_makefigs_DEPENDENCIES) $(EXTRA_livre_makefigs_DEPENDENCIES) @rm -f livre_makefigs$(EXEEXT) $(AM_V_CCLD)$(LINK) $(livre_makefigs_OBJECTS) $(livre_makefigs_LDADD) $(LIBS) livre_orient$(EXEEXT): $(livre_orient_OBJECTS) $(livre_orient_DEPENDENCIES) $(EXTRA_livre_orient_DEPENDENCIES) @rm -f livre_orient$(EXEEXT) $(AM_V_CCLD)$(LINK) $(livre_orient_OBJECTS) $(livre_orient_LDADD) $(LIBS) livre_pageseg$(EXEEXT): $(livre_pageseg_OBJECTS) $(livre_pageseg_DEPENDENCIES) $(EXTRA_livre_pageseg_DEPENDENCIES) @rm -f livre_pageseg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(livre_pageseg_OBJECTS) $(livre_pageseg_LDADD) $(LIBS) livre_seedgen$(EXEEXT): $(livre_seedgen_OBJECTS) $(livre_seedgen_DEPENDENCIES) $(EXTRA_livre_seedgen_DEPENDENCIES) @rm -f livre_seedgen$(EXEEXT) $(AM_V_CCLD)$(LINK) $(livre_seedgen_OBJECTS) $(livre_seedgen_LDADD) $(LIBS) livre_tophat$(EXEEXT): $(livre_tophat_OBJECTS) $(livre_tophat_DEPENDENCIES) $(EXTRA_livre_tophat_DEPENDENCIES) @rm -f livre_tophat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(livre_tophat_OBJECTS) $(livre_tophat_LDADD) $(LIBS) locminmax_reg$(EXEEXT): $(locminmax_reg_OBJECTS) $(locminmax_reg_DEPENDENCIES) $(EXTRA_locminmax_reg_DEPENDENCIES) @rm -f locminmax_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(locminmax_reg_OBJECTS) $(locminmax_reg_LDADD) $(LIBS) logicops_reg$(EXEEXT): $(logicops_reg_OBJECTS) $(logicops_reg_DEPENDENCIES) $(EXTRA_logicops_reg_DEPENDENCIES) @rm -f logicops_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(logicops_reg_OBJECTS) $(logicops_reg_LDADD) $(LIBS) lowaccess_reg$(EXEEXT): $(lowaccess_reg_OBJECTS) $(lowaccess_reg_DEPENDENCIES) $(EXTRA_lowaccess_reg_DEPENDENCIES) @rm -f lowaccess_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(lowaccess_reg_OBJECTS) $(lowaccess_reg_LDADD) $(LIBS) maketile$(EXEEXT): $(maketile_OBJECTS) $(maketile_DEPENDENCIES) $(EXTRA_maketile_DEPENDENCIES) @rm -f maketile$(EXEEXT) $(AM_V_CCLD)$(LINK) $(maketile_OBJECTS) $(maketile_LDADD) $(LIBS) maze_reg$(EXEEXT): $(maze_reg_OBJECTS) $(maze_reg_DEPENDENCIES) $(EXTRA_maze_reg_DEPENDENCIES) @rm -f maze_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(maze_reg_OBJECTS) $(maze_reg_LDADD) $(LIBS) misctest1$(EXEEXT): $(misctest1_OBJECTS) $(misctest1_DEPENDENCIES) $(EXTRA_misctest1_DEPENDENCIES) @rm -f misctest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(misctest1_OBJECTS) $(misctest1_LDADD) $(LIBS) modifyhuesat$(EXEEXT): $(modifyhuesat_OBJECTS) $(modifyhuesat_DEPENDENCIES) $(EXTRA_modifyhuesat_DEPENDENCIES) @rm -f modifyhuesat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(modifyhuesat_OBJECTS) $(modifyhuesat_LDADD) $(LIBS) morphseq_reg$(EXEEXT): $(morphseq_reg_OBJECTS) $(morphseq_reg_DEPENDENCIES) $(EXTRA_morphseq_reg_DEPENDENCIES) @rm -f morphseq_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(morphseq_reg_OBJECTS) $(morphseq_reg_LDADD) $(LIBS) morphtest1$(EXEEXT): $(morphtest1_OBJECTS) $(morphtest1_DEPENDENCIES) $(EXTRA_morphtest1_DEPENDENCIES) @rm -f morphtest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(morphtest1_OBJECTS) $(morphtest1_LDADD) $(LIBS) mtifftest$(EXEEXT): $(mtifftest_OBJECTS) $(mtifftest_DEPENDENCIES) $(EXTRA_mtifftest_DEPENDENCIES) @rm -f mtifftest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mtifftest_OBJECTS) $(mtifftest_LDADD) $(LIBS) multitype_reg$(EXEEXT): $(multitype_reg_OBJECTS) $(multitype_reg_DEPENDENCIES) $(EXTRA_multitype_reg_DEPENDENCIES) @rm -f multitype_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(multitype_reg_OBJECTS) $(multitype_reg_LDADD) $(LIBS) nearline_reg$(EXEEXT): $(nearline_reg_OBJECTS) $(nearline_reg_DEPENDENCIES) $(EXTRA_nearline_reg_DEPENDENCIES) @rm -f nearline_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(nearline_reg_OBJECTS) $(nearline_reg_LDADD) $(LIBS) newspaper_reg$(EXEEXT): $(newspaper_reg_OBJECTS) $(newspaper_reg_DEPENDENCIES) $(EXTRA_newspaper_reg_DEPENDENCIES) @rm -f newspaper_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(newspaper_reg_OBJECTS) $(newspaper_reg_LDADD) $(LIBS) numa1_reg$(EXEEXT): $(numa1_reg_OBJECTS) $(numa1_reg_DEPENDENCIES) $(EXTRA_numa1_reg_DEPENDENCIES) @rm -f numa1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(numa1_reg_OBJECTS) $(numa1_reg_LDADD) $(LIBS) numa2_reg$(EXEEXT): $(numa2_reg_OBJECTS) $(numa2_reg_DEPENDENCIES) $(EXTRA_numa2_reg_DEPENDENCIES) @rm -f numa2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(numa2_reg_OBJECTS) $(numa2_reg_LDADD) $(LIBS) numaranktest$(EXEEXT): $(numaranktest_OBJECTS) $(numaranktest_DEPENDENCIES) $(EXTRA_numaranktest_DEPENDENCIES) @rm -f numaranktest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(numaranktest_OBJECTS) $(numaranktest_LDADD) $(LIBS) otsutest1$(EXEEXT): $(otsutest1_OBJECTS) $(otsutest1_DEPENDENCIES) $(EXTRA_otsutest1_DEPENDENCIES) @rm -f otsutest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(otsutest1_OBJECTS) $(otsutest1_LDADD) $(LIBS) otsutest2$(EXEEXT): $(otsutest2_OBJECTS) $(otsutest2_DEPENDENCIES) $(EXTRA_otsutest2_DEPENDENCIES) @rm -f otsutest2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(otsutest2_OBJECTS) $(otsutest2_LDADD) $(LIBS) overlap_reg$(EXEEXT): $(overlap_reg_OBJECTS) $(overlap_reg_DEPENDENCIES) $(EXTRA_overlap_reg_DEPENDENCIES) @rm -f overlap_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(overlap_reg_OBJECTS) $(overlap_reg_LDADD) $(LIBS) pagesegtest1$(EXEEXT): $(pagesegtest1_OBJECTS) $(pagesegtest1_DEPENDENCIES) $(EXTRA_pagesegtest1_DEPENDENCIES) @rm -f pagesegtest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pagesegtest1_OBJECTS) $(pagesegtest1_LDADD) $(LIBS) pagesegtest2$(EXEEXT): $(pagesegtest2_OBJECTS) $(pagesegtest2_DEPENDENCIES) $(EXTRA_pagesegtest2_DEPENDENCIES) @rm -f pagesegtest2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pagesegtest2_OBJECTS) $(pagesegtest2_LDADD) $(LIBS) paint_reg$(EXEEXT): $(paint_reg_OBJECTS) $(paint_reg_DEPENDENCIES) $(EXTRA_paint_reg_DEPENDENCIES) @rm -f paint_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(paint_reg_OBJECTS) $(paint_reg_LDADD) $(LIBS) paintmask_reg$(EXEEXT): $(paintmask_reg_OBJECTS) $(paintmask_reg_DEPENDENCIES) $(EXTRA_paintmask_reg_DEPENDENCIES) @rm -f paintmask_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(paintmask_reg_OBJECTS) $(paintmask_reg_LDADD) $(LIBS) partitiontest$(EXEEXT): $(partitiontest_OBJECTS) $(partitiontest_DEPENDENCIES) $(EXTRA_partitiontest_DEPENDENCIES) @rm -f partitiontest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(partitiontest_OBJECTS) $(partitiontest_LDADD) $(LIBS) pdfiotest$(EXEEXT): $(pdfiotest_OBJECTS) $(pdfiotest_DEPENDENCIES) $(EXTRA_pdfiotest_DEPENDENCIES) @rm -f pdfiotest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pdfiotest_OBJECTS) $(pdfiotest_LDADD) $(LIBS) pdfseg_reg$(EXEEXT): $(pdfseg_reg_OBJECTS) $(pdfseg_reg_DEPENDENCIES) $(EXTRA_pdfseg_reg_DEPENDENCIES) @rm -f pdfseg_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pdfseg_reg_OBJECTS) $(pdfseg_reg_LDADD) $(LIBS) pixa1_reg$(EXEEXT): $(pixa1_reg_OBJECTS) $(pixa1_reg_DEPENDENCIES) $(EXTRA_pixa1_reg_DEPENDENCIES) @rm -f pixa1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixa1_reg_OBJECTS) $(pixa1_reg_LDADD) $(LIBS) pixa2_reg$(EXEEXT): $(pixa2_reg_OBJECTS) $(pixa2_reg_DEPENDENCIES) $(EXTRA_pixa2_reg_DEPENDENCIES) @rm -f pixa2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixa2_reg_OBJECTS) $(pixa2_reg_LDADD) $(LIBS) pixaatest$(EXEEXT): $(pixaatest_OBJECTS) $(pixaatest_DEPENDENCIES) $(EXTRA_pixaatest_DEPENDENCIES) @rm -f pixaatest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixaatest_OBJECTS) $(pixaatest_LDADD) $(LIBS) pixadisp_reg$(EXEEXT): $(pixadisp_reg_OBJECTS) $(pixadisp_reg_DEPENDENCIES) $(EXTRA_pixadisp_reg_DEPENDENCIES) @rm -f pixadisp_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixadisp_reg_OBJECTS) $(pixadisp_reg_LDADD) $(LIBS) pixalloc_reg$(EXEEXT): $(pixalloc_reg_OBJECTS) $(pixalloc_reg_DEPENDENCIES) $(EXTRA_pixalloc_reg_DEPENDENCIES) @rm -f pixalloc_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixalloc_reg_OBJECTS) $(pixalloc_reg_LDADD) $(LIBS) pixcomp_reg$(EXEEXT): $(pixcomp_reg_OBJECTS) $(pixcomp_reg_DEPENDENCIES) $(EXTRA_pixcomp_reg_DEPENDENCIES) @rm -f pixcomp_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixcomp_reg_OBJECTS) $(pixcomp_reg_LDADD) $(LIBS) pixmem_reg$(EXEEXT): $(pixmem_reg_OBJECTS) $(pixmem_reg_DEPENDENCIES) $(EXTRA_pixmem_reg_DEPENDENCIES) @rm -f pixmem_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixmem_reg_OBJECTS) $(pixmem_reg_LDADD) $(LIBS) pixserial_reg$(EXEEXT): $(pixserial_reg_OBJECTS) $(pixserial_reg_DEPENDENCIES) $(EXTRA_pixserial_reg_DEPENDENCIES) @rm -f pixserial_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixserial_reg_OBJECTS) $(pixserial_reg_LDADD) $(LIBS) pixtile_reg$(EXEEXT): $(pixtile_reg_OBJECTS) $(pixtile_reg_DEPENDENCIES) $(EXTRA_pixtile_reg_DEPENDENCIES) @rm -f pixtile_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pixtile_reg_OBJECTS) $(pixtile_reg_LDADD) $(LIBS) plottest$(EXEEXT): $(plottest_OBJECTS) $(plottest_DEPENDENCIES) $(EXTRA_plottest_DEPENDENCIES) @rm -f plottest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(plottest_OBJECTS) $(plottest_LDADD) $(LIBS) pngio_reg$(EXEEXT): $(pngio_reg_OBJECTS) $(pngio_reg_DEPENDENCIES) $(EXTRA_pngio_reg_DEPENDENCIES) @rm -f pngio_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pngio_reg_OBJECTS) $(pngio_reg_LDADD) $(LIBS) printimage$(EXEEXT): $(printimage_OBJECTS) $(printimage_DEPENDENCIES) $(EXTRA_printimage_DEPENDENCIES) @rm -f printimage$(EXEEXT) $(AM_V_CCLD)$(LINK) $(printimage_OBJECTS) $(printimage_LDADD) $(LIBS) printsplitimage$(EXEEXT): $(printsplitimage_OBJECTS) $(printsplitimage_DEPENDENCIES) $(EXTRA_printsplitimage_DEPENDENCIES) @rm -f printsplitimage$(EXEEXT) $(AM_V_CCLD)$(LINK) $(printsplitimage_OBJECTS) $(printsplitimage_LDADD) $(LIBS) printtiff$(EXEEXT): $(printtiff_OBJECTS) $(printtiff_DEPENDENCIES) $(EXTRA_printtiff_DEPENDENCIES) @rm -f printtiff$(EXEEXT) $(AM_V_CCLD)$(LINK) $(printtiff_OBJECTS) $(printtiff_LDADD) $(LIBS) projection_reg$(EXEEXT): $(projection_reg_OBJECTS) $(projection_reg_DEPENDENCIES) $(EXTRA_projection_reg_DEPENDENCIES) @rm -f projection_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(projection_reg_OBJECTS) $(projection_reg_LDADD) $(LIBS) projective_reg$(EXEEXT): $(projective_reg_OBJECTS) $(projective_reg_DEPENDENCIES) $(EXTRA_projective_reg_DEPENDENCIES) @rm -f projective_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(projective_reg_OBJECTS) $(projective_reg_LDADD) $(LIBS) psio_reg$(EXEEXT): $(psio_reg_OBJECTS) $(psio_reg_DEPENDENCIES) $(EXTRA_psio_reg_DEPENDENCIES) @rm -f psio_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(psio_reg_OBJECTS) $(psio_reg_LDADD) $(LIBS) psioseg_reg$(EXEEXT): $(psioseg_reg_OBJECTS) $(psioseg_reg_DEPENDENCIES) $(EXTRA_psioseg_reg_DEPENDENCIES) @rm -f psioseg_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(psioseg_reg_OBJECTS) $(psioseg_reg_LDADD) $(LIBS) pta_reg$(EXEEXT): $(pta_reg_OBJECTS) $(pta_reg_DEPENDENCIES) $(EXTRA_pta_reg_DEPENDENCIES) @rm -f pta_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pta_reg_OBJECTS) $(pta_reg_LDADD) $(LIBS) ptra1_reg$(EXEEXT): $(ptra1_reg_OBJECTS) $(ptra1_reg_DEPENDENCIES) $(EXTRA_ptra1_reg_DEPENDENCIES) @rm -f ptra1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ptra1_reg_OBJECTS) $(ptra1_reg_LDADD) $(LIBS) ptra2_reg$(EXEEXT): $(ptra2_reg_OBJECTS) $(ptra2_reg_DEPENDENCIES) $(EXTRA_ptra2_reg_DEPENDENCIES) @rm -f ptra2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ptra2_reg_OBJECTS) $(ptra2_reg_LDADD) $(LIBS) quadtreetest$(EXEEXT): $(quadtreetest_OBJECTS) $(quadtreetest_DEPENDENCIES) $(EXTRA_quadtreetest_DEPENDENCIES) @rm -f quadtreetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(quadtreetest_OBJECTS) $(quadtreetest_LDADD) $(LIBS) rank_reg$(EXEEXT): $(rank_reg_OBJECTS) $(rank_reg_DEPENDENCIES) $(EXTRA_rank_reg_DEPENDENCIES) @rm -f rank_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rank_reg_OBJECTS) $(rank_reg_LDADD) $(LIBS) rankbin_reg$(EXEEXT): $(rankbin_reg_OBJECTS) $(rankbin_reg_DEPENDENCIES) $(EXTRA_rankbin_reg_DEPENDENCIES) @rm -f rankbin_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rankbin_reg_OBJECTS) $(rankbin_reg_LDADD) $(LIBS) rankhisto_reg$(EXEEXT): $(rankhisto_reg_OBJECTS) $(rankhisto_reg_DEPENDENCIES) $(EXTRA_rankhisto_reg_DEPENDENCIES) @rm -f rankhisto_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rankhisto_reg_OBJECTS) $(rankhisto_reg_LDADD) $(LIBS) ranktest$(EXEEXT): $(ranktest_OBJECTS) $(ranktest_DEPENDENCIES) $(EXTRA_ranktest_DEPENDENCIES) @rm -f ranktest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(ranktest_OBJECTS) $(ranktest_LDADD) $(LIBS) rasterop_reg$(EXEEXT): $(rasterop_reg_OBJECTS) $(rasterop_reg_DEPENDENCIES) $(EXTRA_rasterop_reg_DEPENDENCIES) @rm -f rasterop_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rasterop_reg_OBJECTS) $(rasterop_reg_LDADD) $(LIBS) rasteropip_reg$(EXEEXT): $(rasteropip_reg_OBJECTS) $(rasteropip_reg_DEPENDENCIES) $(EXTRA_rasteropip_reg_DEPENDENCIES) @rm -f rasteropip_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rasteropip_reg_OBJECTS) $(rasteropip_reg_LDADD) $(LIBS) recogsort$(EXEEXT): $(recogsort_OBJECTS) $(recogsort_DEPENDENCIES) $(EXTRA_recogsort_DEPENDENCIES) @rm -f recogsort$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recogsort_OBJECTS) $(recogsort_LDADD) $(LIBS) recogtest1$(EXEEXT): $(recogtest1_OBJECTS) $(recogtest1_DEPENDENCIES) $(EXTRA_recogtest1_DEPENDENCIES) @rm -f recogtest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recogtest1_OBJECTS) $(recogtest1_LDADD) $(LIBS) reducetest$(EXEEXT): $(reducetest_OBJECTS) $(reducetest_DEPENDENCIES) $(EXTRA_reducetest_DEPENDENCIES) @rm -f reducetest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(reducetest_OBJECTS) $(reducetest_LDADD) $(LIBS) removecmap$(EXEEXT): $(removecmap_OBJECTS) $(removecmap_DEPENDENCIES) $(EXTRA_removecmap_DEPENDENCIES) @rm -f removecmap$(EXEEXT) $(AM_V_CCLD)$(LINK) $(removecmap_OBJECTS) $(removecmap_LDADD) $(LIBS) renderfonts$(EXEEXT): $(renderfonts_OBJECTS) $(renderfonts_DEPENDENCIES) $(EXTRA_renderfonts_DEPENDENCIES) @rm -f renderfonts$(EXEEXT) $(AM_V_CCLD)$(LINK) $(renderfonts_OBJECTS) $(renderfonts_LDADD) $(LIBS) rotate1_reg$(EXEEXT): $(rotate1_reg_OBJECTS) $(rotate1_reg_DEPENDENCIES) $(EXTRA_rotate1_reg_DEPENDENCIES) @rm -f rotate1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rotate1_reg_OBJECTS) $(rotate1_reg_LDADD) $(LIBS) rotate2_reg$(EXEEXT): $(rotate2_reg_OBJECTS) $(rotate2_reg_DEPENDENCIES) $(EXTRA_rotate2_reg_DEPENDENCIES) @rm -f rotate2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rotate2_reg_OBJECTS) $(rotate2_reg_LDADD) $(LIBS) rotatefastalt$(EXEEXT): $(rotatefastalt_OBJECTS) $(rotatefastalt_DEPENDENCIES) $(EXTRA_rotatefastalt_DEPENDENCIES) @rm -f rotatefastalt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rotatefastalt_OBJECTS) $(rotatefastalt_LDADD) $(LIBS) rotateorth_reg$(EXEEXT): $(rotateorth_reg_OBJECTS) $(rotateorth_reg_DEPENDENCIES) $(EXTRA_rotateorth_reg_DEPENDENCIES) @rm -f rotateorth_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rotateorth_reg_OBJECTS) $(rotateorth_reg_LDADD) $(LIBS) rotateorthtest1$(EXEEXT): $(rotateorthtest1_OBJECTS) $(rotateorthtest1_DEPENDENCIES) $(EXTRA_rotateorthtest1_DEPENDENCIES) @rm -f rotateorthtest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rotateorthtest1_OBJECTS) $(rotateorthtest1_LDADD) $(LIBS) rotatetest1$(EXEEXT): $(rotatetest1_OBJECTS) $(rotatetest1_DEPENDENCIES) $(EXTRA_rotatetest1_DEPENDENCIES) @rm -f rotatetest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rotatetest1_OBJECTS) $(rotatetest1_LDADD) $(LIBS) runlengthtest$(EXEEXT): $(runlengthtest_OBJECTS) $(runlengthtest_DEPENDENCIES) $(EXTRA_runlengthtest_DEPENDENCIES) @rm -f runlengthtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(runlengthtest_OBJECTS) $(runlengthtest_LDADD) $(LIBS) scale_reg$(EXEEXT): $(scale_reg_OBJECTS) $(scale_reg_DEPENDENCIES) $(EXTRA_scale_reg_DEPENDENCIES) @rm -f scale_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(scale_reg_OBJECTS) $(scale_reg_LDADD) $(LIBS) scaleandtile$(EXEEXT): $(scaleandtile_OBJECTS) $(scaleandtile_DEPENDENCIES) $(EXTRA_scaleandtile_DEPENDENCIES) @rm -f scaleandtile$(EXEEXT) $(AM_V_CCLD)$(LINK) $(scaleandtile_OBJECTS) $(scaleandtile_LDADD) $(LIBS) scaletest1$(EXEEXT): $(scaletest1_OBJECTS) $(scaletest1_DEPENDENCIES) $(EXTRA_scaletest1_DEPENDENCIES) @rm -f scaletest1$(EXEEXT) $(AM_V_CCLD)$(LINK) $(scaletest1_OBJECTS) $(scaletest1_LDADD) $(LIBS) scaletest2$(EXEEXT): $(scaletest2_OBJECTS) $(scaletest2_DEPENDENCIES) $(EXTRA_scaletest2_DEPENDENCIES) @rm -f scaletest2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(scaletest2_OBJECTS) $(scaletest2_LDADD) $(LIBS) seedfilltest$(EXEEXT): $(seedfilltest_OBJECTS) $(seedfilltest_DEPENDENCIES) $(EXTRA_seedfilltest_DEPENDENCIES) @rm -f seedfilltest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(seedfilltest_OBJECTS) $(seedfilltest_LDADD) $(LIBS) seedspread_reg$(EXEEXT): $(seedspread_reg_OBJECTS) $(seedspread_reg_DEPENDENCIES) $(EXTRA_seedspread_reg_DEPENDENCIES) @rm -f seedspread_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(seedspread_reg_OBJECTS) $(seedspread_reg_LDADD) $(LIBS) selio_reg$(EXEEXT): $(selio_reg_OBJECTS) $(selio_reg_DEPENDENCIES) $(EXTRA_selio_reg_DEPENDENCIES) @rm -f selio_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(selio_reg_OBJECTS) $(selio_reg_LDADD) $(LIBS) sharptest$(EXEEXT): $(sharptest_OBJECTS) $(sharptest_DEPENDENCIES) $(EXTRA_sharptest_DEPENDENCIES) @rm -f sharptest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sharptest_OBJECTS) $(sharptest_LDADD) $(LIBS) shear1_reg$(EXEEXT): $(shear1_reg_OBJECTS) $(shear1_reg_DEPENDENCIES) $(EXTRA_shear1_reg_DEPENDENCIES) @rm -f shear1_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(shear1_reg_OBJECTS) $(shear1_reg_LDADD) $(LIBS) shear2_reg$(EXEEXT): $(shear2_reg_OBJECTS) $(shear2_reg_DEPENDENCIES) $(EXTRA_shear2_reg_DEPENDENCIES) @rm -f shear2_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(shear2_reg_OBJECTS) $(shear2_reg_LDADD) $(LIBS) sheartest$(EXEEXT): $(sheartest_OBJECTS) $(sheartest_DEPENDENCIES) $(EXTRA_sheartest_DEPENDENCIES) @rm -f sheartest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sheartest_OBJECTS) $(sheartest_LDADD) $(LIBS) showedges$(EXEEXT): $(showedges_OBJECTS) $(showedges_DEPENDENCIES) $(EXTRA_showedges_DEPENDENCIES) @rm -f showedges$(EXEEXT) $(AM_V_CCLD)$(LINK) $(showedges_OBJECTS) $(showedges_LDADD) $(LIBS) skew_reg$(EXEEXT): $(skew_reg_OBJECTS) $(skew_reg_DEPENDENCIES) $(EXTRA_skew_reg_DEPENDENCIES) @rm -f skew_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(skew_reg_OBJECTS) $(skew_reg_LDADD) $(LIBS) skewtest$(EXEEXT): $(skewtest_OBJECTS) $(skewtest_DEPENDENCIES) $(EXTRA_skewtest_DEPENDENCIES) @rm -f skewtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(skewtest_OBJECTS) $(skewtest_LDADD) $(LIBS) smallpix_reg$(EXEEXT): $(smallpix_reg_OBJECTS) $(smallpix_reg_DEPENDENCIES) $(EXTRA_smallpix_reg_DEPENDENCIES) @rm -f smallpix_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(smallpix_reg_OBJECTS) $(smallpix_reg_LDADD) $(LIBS) smoothedge_reg$(EXEEXT): $(smoothedge_reg_OBJECTS) $(smoothedge_reg_DEPENDENCIES) $(EXTRA_smoothedge_reg_DEPENDENCIES) @rm -f smoothedge_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(smoothedge_reg_OBJECTS) $(smoothedge_reg_LDADD) $(LIBS) snapcolortest$(EXEEXT): $(snapcolortest_OBJECTS) $(snapcolortest_DEPENDENCIES) $(EXTRA_snapcolortest_DEPENDENCIES) @rm -f snapcolortest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(snapcolortest_OBJECTS) $(snapcolortest_LDADD) $(LIBS) sorttest$(EXEEXT): $(sorttest_OBJECTS) $(sorttest_DEPENDENCIES) $(EXTRA_sorttest_DEPENDENCIES) @rm -f sorttest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sorttest_OBJECTS) $(sorttest_LDADD) $(LIBS) splitcomp_reg$(EXEEXT): $(splitcomp_reg_OBJECTS) $(splitcomp_reg_DEPENDENCIES) $(EXTRA_splitcomp_reg_DEPENDENCIES) @rm -f splitcomp_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(splitcomp_reg_OBJECTS) $(splitcomp_reg_LDADD) $(LIBS) splitimage2pdf$(EXEEXT): $(splitimage2pdf_OBJECTS) $(splitimage2pdf_DEPENDENCIES) $(EXTRA_splitimage2pdf_DEPENDENCIES) @rm -f splitimage2pdf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(splitimage2pdf_OBJECTS) $(splitimage2pdf_LDADD) $(LIBS) string_reg$(EXEEXT): $(string_reg_OBJECTS) $(string_reg_DEPENDENCIES) $(EXTRA_string_reg_DEPENDENCIES) @rm -f string_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(string_reg_OBJECTS) $(string_reg_LDADD) $(LIBS) subpixel_reg$(EXEEXT): $(subpixel_reg_OBJECTS) $(subpixel_reg_DEPENDENCIES) $(EXTRA_subpixel_reg_DEPENDENCIES) @rm -f subpixel_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(subpixel_reg_OBJECTS) $(subpixel_reg_LDADD) $(LIBS) sudokutest$(EXEEXT): $(sudokutest_OBJECTS) $(sudokutest_DEPENDENCIES) $(EXTRA_sudokutest_DEPENDENCIES) @rm -f sudokutest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(sudokutest_OBJECTS) $(sudokutest_LDADD) $(LIBS) threshnorm_reg$(EXEEXT): $(threshnorm_reg_OBJECTS) $(threshnorm_reg_DEPENDENCIES) $(EXTRA_threshnorm_reg_DEPENDENCIES) @rm -f threshnorm_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(threshnorm_reg_OBJECTS) $(threshnorm_reg_LDADD) $(LIBS) translate_reg$(EXEEXT): $(translate_reg_OBJECTS) $(translate_reg_DEPENDENCIES) $(EXTRA_translate_reg_DEPENDENCIES) @rm -f translate_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(translate_reg_OBJECTS) $(translate_reg_LDADD) $(LIBS) trctest$(EXEEXT): $(trctest_OBJECTS) $(trctest_DEPENDENCIES) $(EXTRA_trctest_DEPENDENCIES) @rm -f trctest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(trctest_OBJECTS) $(trctest_LDADD) $(LIBS) viewertest$(EXEEXT): $(viewertest_OBJECTS) $(viewertest_DEPENDENCIES) $(EXTRA_viewertest_DEPENDENCIES) @rm -f viewertest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(viewertest_OBJECTS) $(viewertest_LDADD) $(LIBS) warper_reg$(EXEEXT): $(warper_reg_OBJECTS) $(warper_reg_DEPENDENCIES) $(EXTRA_warper_reg_DEPENDENCIES) @rm -f warper_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(warper_reg_OBJECTS) $(warper_reg_LDADD) $(LIBS) warpertest$(EXEEXT): $(warpertest_OBJECTS) $(warpertest_DEPENDENCIES) $(EXTRA_warpertest_DEPENDENCIES) @rm -f warpertest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(warpertest_OBJECTS) $(warpertest_LDADD) $(LIBS) watershedtest$(EXEEXT): $(watershedtest_OBJECTS) $(watershedtest_DEPENDENCIES) $(EXTRA_watershedtest_DEPENDENCIES) @rm -f watershedtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(watershedtest_OBJECTS) $(watershedtest_LDADD) $(LIBS) webpio_reg$(EXEEXT): $(webpio_reg_OBJECTS) $(webpio_reg_DEPENDENCIES) $(EXTRA_webpio_reg_DEPENDENCIES) @rm -f webpio_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(webpio_reg_OBJECTS) $(webpio_reg_LDADD) $(LIBS) wordboxes_reg$(EXEEXT): $(wordboxes_reg_OBJECTS) $(wordboxes_reg_DEPENDENCIES) $(EXTRA_wordboxes_reg_DEPENDENCIES) @rm -f wordboxes_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(wordboxes_reg_OBJECTS) $(wordboxes_reg_LDADD) $(LIBS) wordsinorder$(EXEEXT): $(wordsinorder_OBJECTS) $(wordsinorder_DEPENDENCIES) $(EXTRA_wordsinorder_DEPENDENCIES) @rm -f wordsinorder$(EXEEXT) $(AM_V_CCLD)$(LINK) $(wordsinorder_OBJECTS) $(wordsinorder_LDADD) $(LIBS) writemtiff$(EXEEXT): $(writemtiff_OBJECTS) $(writemtiff_DEPENDENCIES) $(EXTRA_writemtiff_DEPENDENCIES) @rm -f writemtiff$(EXEEXT) $(AM_V_CCLD)$(LINK) $(writemtiff_OBJECTS) $(writemtiff_LDADD) $(LIBS) writetext_reg$(EXEEXT): $(writetext_reg_OBJECTS) $(writetext_reg_DEPENDENCIES) $(EXTRA_writetext_reg_DEPENDENCIES) @rm -f writetext_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(writetext_reg_OBJECTS) $(writetext_reg_LDADD) $(LIBS) xformbox_reg$(EXEEXT): $(xformbox_reg_OBJECTS) $(xformbox_reg_DEPENDENCIES) $(EXTRA_xformbox_reg_DEPENDENCIES) @rm -f xformbox_reg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(xformbox_reg_OBJECTS) $(xformbox_reg_LDADD) $(LIBS) xtractprotos$(EXEEXT): $(xtractprotos_OBJECTS) $(xtractprotos_DEPENDENCIES) $(EXTRA_xtractprotos_DEPENDENCIES) @rm -f xtractprotos$(EXEEXT) $(AM_V_CCLD)$(LINK) $(xtractprotos_OBJECTS) $(xtractprotos_LDADD) $(LIBS) yuvtest$(EXEEXT): $(yuvtest_OBJECTS) $(yuvtest_DEPENDENCIES) $(EXTRA_yuvtest_DEPENDENCIES) @rm -f yuvtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(yuvtest_OBJECTS) $(yuvtest_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adaptmap_dark.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adaptmaptest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adaptnorm_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/affine_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alltests_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alphaops_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alphaxform_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arabic_lines.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arithtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/barcodetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/baselinetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bilateral1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bilateral2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bilinear_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binarize_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binarize_set.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bincompare.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binmorph1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binmorph2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binmorph3_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binmorph4_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binmorph5_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blackwhite_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blend1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blend2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blend3_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blend4_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blendcmaptest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxa1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buffertest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/byteatest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccbordtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cctest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccthin1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccthin2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmapquant_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorcontent_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coloring_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorize_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colormask_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colormorphtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorquant_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorseg_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorsegtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorspace_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorspacetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compare_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comparepages.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/comparetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compfilter_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conncomp_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/contrasttest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conversion_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertfilestopdf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertfilestops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertformat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertsegfilestopdf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertsegfilestops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/converttogray.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/converttopdf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/converttops.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolve_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolvetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cornertest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/croptest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/croptext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarp_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarprules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarptest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarptest2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarptest3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarptest4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/digitprep1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/displayboxa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/displaypix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/displaypixa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/distance_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dithertest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dna_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwalinear.3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwalineargen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwalinearlow.3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwamorph1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwamorph2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edgetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enhance_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/equal_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/expand_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/extrema_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/falsecolortest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fcombautogen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fhmtauto_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fhmtautogen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findcorners_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findpattern1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findpattern2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findpattern3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/findpattern_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flipdetect_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flipselgen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmorphauto_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmorphautogen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpix1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpix2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpixcontours.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gammatest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genfonts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gifio_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graphicstest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grayfill_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graymorph1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graymorph2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graymorphtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grayquant_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hardlight_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/heap_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/histotest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/insert_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ioformats_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iotest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/italictest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jbcorrelation.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jbrankhaus.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jbwords.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpegio_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/label_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lineremoval.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livre_adapt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livre_hmt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livre_makefigs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livre_orient.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livre_pageseg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livre_seedgen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/livre_tophat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/locminmax_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logicops_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lowaccess_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maketile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maze_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misctest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modifyhuesat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/morphseq_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/morphtest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mtifftest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/multitype_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nearline_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newspaper_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numa1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numa2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numaranktest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otsutest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/otsutest2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/overlap_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pagesegtest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pagesegtest2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paint_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paintmask_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/partitiontest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdfiotest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdfseg_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixa1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixa2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixaatest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixadisp_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixalloc_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixcomp_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixmem_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixserial_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixtile_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plottest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngio_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printimage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printsplitimage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/printtiff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projection_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projective_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psio_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psioseg_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pta_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptra1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptra2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quadtreetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rank_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rankbin_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rankhisto_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ranktest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rasterop_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rasteropip_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recogsort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recogtest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reducetest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/removecmap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/renderfonts.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotate1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotate2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotatefastalt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotateorth_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotateorthtest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotatetest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runlengthtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scaleandtile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scaletest1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scaletest2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seedfilltest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seedspread_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selio_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sharptest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shear1_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shear2_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sheartest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showedges.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/skew_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/skewtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smallpix_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smoothedge_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snapcolortest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sorttest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splitcomp_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/splitimage2pdf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/string_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/subpixel_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sudokutest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/threshnorm_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/translate_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trctest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewertest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warper_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warpertest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/watershedtest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webpio_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wordboxes_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wordsinorder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writemtiff.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writetext_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xformbox_reg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtractprotos.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/yuvtest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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: $(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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__sh_e_setup); \ list='$(TEST_LOGS)'; \ results=`for f in $$list; do \ test -r $$f && read line < $$f && echo "$$line" \ || echo FAIL; \ done`; \ all=`echo "$$results" | sed '/^$$/d' | wc -l | sed -e 's/^[ ]*//'`; \ fail=`echo "$$results" | grep -c '^FAIL'`; \ pass=`echo "$$results" | grep -c '^PASS'`; \ skip=`echo "$$results" | grep -c '^SKIP'`; \ xfail=`echo "$$results" | grep -c '^XFAIL'`; \ xpass=`echo "$$results" | grep -c '^XPASS'`; \ failures=`expr $$fail + $$xpass`; \ all=`expr $$all - $$skip`; \ if test "$$all" -eq 1; then tests=test; All=; \ else tests=tests; All="All "; fi; \ case fail=$$fail:xpass=$$xpass:xfail=$$xfail in \ fail=0:xpass=0:xfail=0) \ msg="$$All$$all $$tests passed. "; \ exit=true;; \ fail=0:xpass=0:xfail=*) \ msg="$$All$$all $$tests behaved as expected"; \ if test "$$xfail" -eq 1; then xfailures=failure; \ else xfailures=failures; fi; \ msg="$$msg ($$xfail expected $$xfailures). "; \ exit=true;; \ fail=*:xpass=0:xfail=*) \ msg="$$fail of $$all $$tests failed. "; \ exit=false;; \ fail=*:xpass=*:xfail=*) \ msg="$$failures of $$all $$tests did not behave as expected"; \ if test "$$xpass" -eq 1; then xpasses=pass; \ else xpasses=passes; fi; \ msg="$$msg ($$xpass unexpected $$xpasses). "; \ exit=false;; \ *) \ echo >&2 "incorrect case"; exit 4;; \ esac; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ msg="$$msg($$skip test was not run). "; \ else \ msg="$$msg($$skip tests were not run). "; \ fi; \ fi; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ echo "$$msg"; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for f in $$list; do \ test -r $$f && read line < $$f || line=; \ case $$line in \ PASS:*|XFAIL:*);; \ *) echo; cat $$f;; \ esac; \ done; \ } >$(TEST_SUITE_LOG).tmp; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if test "$$failures" -ne 0; then \ msg="$${msg}See $(subdir)/$(TEST_SUITE_LOG). "; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ msg="$${msg}Please report to $(PACKAGE_BUGREPORT). "; \ fi; \ fi; \ test x"$$VERBOSE" = x || $$exit || cat $(TEST_SUITE_LOG); \ $(am__tty_colors); \ if $$exit; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$$msg" | $(am__text_box) "col=$$col" "std=$$std"; \ $$exit || exit 1 check-TESTS recheck: @if test $@ != recheck; then \ list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list; \ fi @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @list='' list2='$(TEST_LOGS)'; for f in $$list2; do \ test .log = $$f && continue; \ if test $@ = recheck; then \ test -f $$f || continue; \ if test -r $$f && read line < $$f; then \ case $$line in FAIL*|XPASS*) : ;; *) continue;; esac; \ fi; \ fi; \ if test -z "$$list"; then list=$$f; else list="$$list $$f"; fi; \ done; \ if test $@ = recheck && test -n "$$list"; then \ echo "am--clean: ; rm -f $$list" \ | $(MAKE) $(AM_MAKEFLAGS) -f - am--clean || exit 1; \ fi; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$list" recheck: $(check_PROGRAMS) am--mostlyclean-test-html: list='$(TEST_LOGS:.log=.html)'; test -z "$$list" || rm -f $$list rm -f $(TEST_SUITE_HTML) .log.html: @list='$(RST2HTML) $$RST2HTML rst2html rst2html.py'; \ for r2h in $$list; do \ if ($$r2h --version) >/dev/null 2>&1; then \ R2H=$$r2h; \ fi; \ done; \ if test -z "$$R2H"; then \ echo >&2 "cannot find rst2html, cannot create $@"; \ exit 2; \ fi; \ $$R2H $< >$@.tmp @mv $@.tmp $@ # Be sure to run check first, and then to convert the result. # Beware of concurrent executions. Run "check" not "check-TESTS", as # check-SCRIPTS and other dependencies are rebuilt by the former only. # And expect check to fail. check-html recheck-html: @target=`echo $@ | sed 's/-html$$//'`; \ rv=0; $(MAKE) $(AM_MAKEFLAGS) $$target || rv=$$?; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_HTML) TEST_LOGS= || exit 4; \ exit $$rv alphaops_reg.log: alphaops_reg$(EXEEXT) @p='alphaops_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) alphaxform_reg.log: alphaxform_reg$(EXEEXT) @p='alphaxform_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) binarize_reg.log: binarize_reg$(EXEEXT) @p='binarize_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) blackwhite_reg.log: blackwhite_reg$(EXEEXT) @p='blackwhite_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) blend3_reg.log: blend3_reg$(EXEEXT) @p='blend3_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) blend4_reg.log: blend4_reg$(EXEEXT) @p='blend4_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) colorcontent_reg.log: colorcontent_reg$(EXEEXT) @p='colorcontent_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) coloring_reg.log: coloring_reg$(EXEEXT) @p='coloring_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) colormask_reg.log: colormask_reg$(EXEEXT) @p='colormask_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) colorquant_reg.log: colorquant_reg$(EXEEXT) @p='colorquant_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) colorspace_reg.log: colorspace_reg$(EXEEXT) @p='colorspace_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) compare_reg.log: compare_reg$(EXEEXT) @p='compare_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) convolve_reg.log: convolve_reg$(EXEEXT) @p='convolve_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) dewarp_reg.log: dewarp_reg$(EXEEXT) @p='dewarp_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) dna_reg.log: dna_reg$(EXEEXT) @p='dna_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) dwamorph1_reg.log: dwamorph1_reg$(EXEEXT) @p='dwamorph1_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) enhance_reg.log: enhance_reg$(EXEEXT) @p='enhance_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) findcorners_reg.log: findcorners_reg$(EXEEXT) @p='findcorners_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) findpattern_reg.log: findpattern_reg$(EXEEXT) @p='findpattern_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) fpix1_reg.log: fpix1_reg$(EXEEXT) @p='fpix1_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) fpix2_reg.log: fpix2_reg$(EXEEXT) @p='fpix2_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) graymorph2_reg.log: graymorph2_reg$(EXEEXT) @p='graymorph2_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) hardlight_reg.log: hardlight_reg$(EXEEXT) @p='hardlight_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) insert_reg.log: insert_reg$(EXEEXT) @p='insert_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) ioformats_reg.log: ioformats_reg$(EXEEXT) @p='ioformats_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) jpegio_reg.log: jpegio_reg$(EXEEXT) @p='jpegio_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) kernel_reg.log: kernel_reg$(EXEEXT) @p='kernel_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) label_reg.log: label_reg$(EXEEXT) @p='label_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) maze_reg.log: maze_reg$(EXEEXT) @p='maze_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) multitype_reg.log: multitype_reg$(EXEEXT) @p='multitype_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) nearline_reg.log: nearline_reg$(EXEEXT) @p='nearline_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) newspaper_reg.log: newspaper_reg$(EXEEXT) @p='newspaper_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) overlap_reg.log: overlap_reg$(EXEEXT) @p='overlap_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) paint_reg.log: paint_reg$(EXEEXT) @p='paint_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) paintmask_reg.log: paintmask_reg$(EXEEXT) @p='paintmask_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pdfseg_reg.log: pdfseg_reg$(EXEEXT) @p='pdfseg_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pixa2_reg.log: pixa2_reg$(EXEEXT) @p='pixa2_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pixserial_reg.log: pixserial_reg$(EXEEXT) @p='pixserial_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) pngio_reg.log: pngio_reg$(EXEEXT) @p='pngio_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) projection_reg.log: projection_reg$(EXEEXT) @p='projection_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) psio_reg.log: psio_reg$(EXEEXT) @p='psio_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) psioseg_reg.log: psioseg_reg$(EXEEXT) @p='psioseg_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) rankbin_reg.log: rankbin_reg$(EXEEXT) @p='rankbin_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) rankhisto_reg.log: rankhisto_reg$(EXEEXT) @p='rankhisto_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) rasteropip_reg.log: rasteropip_reg$(EXEEXT) @p='rasteropip_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) rotate1_reg.log: rotate1_reg$(EXEEXT) @p='rotate1_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) rotate2_reg.log: rotate2_reg$(EXEEXT) @p='rotate2_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) rotateorth_reg.log: rotateorth_reg$(EXEEXT) @p='rotateorth_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) scale_reg.log: scale_reg$(EXEEXT) @p='scale_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) seedspread_reg.log: seedspread_reg$(EXEEXT) @p='seedspread_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) selio_reg.log: selio_reg$(EXEEXT) @p='selio_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) shear1_reg.log: shear1_reg$(EXEEXT) @p='shear1_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) shear2_reg.log: shear2_reg$(EXEEXT) @p='shear2_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) skew_reg.log: skew_reg$(EXEEXT) @p='skew_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) splitcomp_reg.log: splitcomp_reg$(EXEEXT) @p='splitcomp_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) subpixel_reg.log: subpixel_reg$(EXEEXT) @p='subpixel_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) threshnorm_reg.log: threshnorm_reg$(EXEEXT) @p='threshnorm_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) translate_reg.log: translate_reg$(EXEEXT) @p='translate_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) warper_reg.log: warper_reg$(EXEEXT) @p='warper_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) writetext_reg.log: writetext_reg$(EXEEXT) @p='writetext_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) xformbox_reg.log: xformbox_reg$(EXEEXT) @p='xformbox_reg$(EXEEXT)'; $(am__check_pre) $(LOG_COMPILE) "$$tst" $(am__check_post) .test.log: @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; $(am__check_pre) $(TEST_LOG_COMPILE) "$$tst" $(am__check_post) 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 "$(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) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; 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: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS_TMP)" || rm -f $(TEST_LOGS_TMP) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-libtool clean-noinstPROGRAMS 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 html-am: info: info-am info-am: install-data-am: 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-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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: am--mostlyclean-test-html mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: check-am check-html install-am install-strip recheck-html .PHONY: CTAGS GTAGS all all-am am--mostlyclean-test-html check \ check-TESTS check-am check-html clean clean-binPROGRAMS \ clean-checkPROGRAMS clean-generic clean-libtool \ clean-noinstPROGRAMS 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-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 recheck recheck-html tags uninstall \ uninstall-am uninstall-binPROGRAMS # 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: leptonica-1.70/prog/gifio_reg.c0000644000175000017500000001570012270122643014554 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * gifio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for lossless read/write * I/O in gif format. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in gif format for * varioius depths. * * The relative times for writing of gif and png are interesting. * * For 1 bpp: * * png writing is about 2x faster than gif writing, using giflib. * * For 32 bpp, using a 1 Mpix rgb image: * * png: Lossless: 1.16 sec (2.0 MB output file) * Lossy: 0.43 sec, composed of: * 0.22 sec (octree quant with dithering) * 0.21 sec (to compress and write out) * * gif: Lossy: 0.34 sec, composed of: * 0.22 sec (octree quant with dithering) * 0.12 sec (to compress and write out) * (note: no lossless mode; gif can't write out rgb) */ #include #include "allheaders.h" static void test_gif(const char *fname, L_REGPARAMS *rp); static l_int32 test_mem_gif(const char *fname, l_int32 index); /* Needed for HAVE_LIBGIF and or HAVE_LIBUNGIF */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #define FILE_1BPP "feyn.tif" #define FILE_2BPP "weasel2.4g.png" #define FILE_4BPP "weasel4.16c.png" #define FILE_8BPP_1 "dreyfus8.png" #define FILE_8BPP_2 "weasel8.240c.png" #define FILE_8BPP_3 "test8.jpg" #define FILE_16BPP "test16.tif" #define FILE_32BPP "marge.jpg" #define REDUCTION 1 int main(int argc, char **argv) { l_int32 success; L_REGPARAMS *rp; #if !HAVE_LIBGIF && !HAVE_LIBUNGIF fprintf(stderr, "gifio is not enabled\n" "libgif or libungif are required for gifio_reg\n" "See environ.h: #define HAVE_LIBGIF or HAVE_LIBUNGIF 1\n" "See prog/Makefile: link in -lgif or -lungif\n\n"); return 0; #endif /* abort */ if (regTestSetup(argc, argv, &rp)) return 1; pixDisplayWrite(NULL, -1); /* ------------ Part 1: Test lossless r/w to file ------------*/ test_gif(FILE_1BPP, rp); test_gif(FILE_2BPP, rp); test_gif(FILE_4BPP, rp); test_gif(FILE_8BPP_1, rp); test_gif(FILE_8BPP_2, rp); test_gif(FILE_8BPP_3, rp); test_gif(FILE_16BPP, rp); test_gif(FILE_32BPP, rp); if (rp->success) fprintf(stderr, "\n ****** Success on lossless r/w to file *****\n\n"); else fprintf(stderr, "\n ******* Failure on at least one r/w to file ******\n\n"); if (rp->display) pixDisplayMultiple("/tmp/display/file*"); /* ------------ Part 2: Test lossless r/w to memory ------------ */ success = TRUE; #if HAVE_FMEMOPEN pixDisplayWrite(NULL, -1); if (test_mem_gif(FILE_1BPP, 0)) success = FALSE; if (test_mem_gif(FILE_2BPP, 1)) success = FALSE; if (test_mem_gif(FILE_4BPP, 2)) success = FALSE; if (test_mem_gif(FILE_8BPP_1, 3)) success = FALSE; if (test_mem_gif(FILE_8BPP_2, 4)) success = FALSE; if (test_mem_gif(FILE_8BPP_3, 5)) success = FALSE; if (test_mem_gif(FILE_16BPP, 6)) success = FALSE; if (test_mem_gif(FILE_32BPP, 7)) success = FALSE; if (success) fprintf(stderr, "\n ****** Success on lossless r/w to memory *****\n\n"); else fprintf(stderr, "\n ******* Failure on at least one r/w to memory ******\n\n"); #else fprintf(stderr, "\n ***** r/w to memory not enabled *****\n\n"); #endif /* HAVE_FMEMOPEN */ /* Success only if all tests are passed */ if (rp->success == TRUE) rp->success = success; return regTestCleanup(rp); } static void test_gif(const char *fname, L_REGPARAMS *rp) { char buf[256]; l_int32 same; PIX *pixs, *pix1, *pix2; pixs = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/gifio-a.%d.gif", rp->index + 1); pixWrite(buf, pixs, IFF_GIF); pix1 = pixRead(buf); snprintf(buf, sizeof(buf), "/tmp/gifio-b.%d.gif", rp->index + 1); pixWrite(buf, pix1, IFF_GIF); pix2 = pixRead(buf); regTestWritePixAndCheck(rp, pix2, IFF_GIF); pixEqual(pixs, pix2, &same); if (!same && rp->index < 6) { fprintf(stderr, "Error for %s\n", fname); rp->success = FALSE; } if (rp->display) { fprintf(stderr, " depth: pixs = %d, pix1 = %d\n", pixGetDepth(pixs), pixGetDepth(pix1)); pixDisplayWrite(pix2, REDUCTION); } pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); return; } /* Returns 1 on error */ static l_int32 test_mem_gif(const char *fname, l_int32 index) { l_uint8 *data = NULL; l_int32 same; size_t size = 0; PIX *pixs; PIX *pixd = NULL; if ((pixs = pixRead(fname)) == NULL) { fprintf(stderr, "Failure to read %s\n", fname); return 1; } if (pixWriteMem(&data, &size, pixs, IFF_GIF)) { fprintf(stderr, "Mem write fail for gif\n"); return 1; } if ((pixd = pixReadMem(data, size)) == NULL) { fprintf(stderr, "Mem read fail for gif\n"); lept_free(data); return 1; } pixEqual(pixs, pixd, &same); pixDestroy(&pixs); pixDestroy(&pixd); lept_free(data); if (!same && index < 6) { fprintf(stderr, "Mem write/read fail for file %s\n", fname); return 1; } else return 0; } leptonica-1.70/prog/pdf2jpeg0000750000175000017500000000133110251755057014103 0ustar dandan#!/bin/bash # pdf2jpeg # # Rasterizes a PDF file, saving as a set of 3-component jpeg images # # input: PDF file # root name of output files # output: 24 bpp RGB jpeg files for each page scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outjpgroot" exit -1 fi inpdffile=$1 outjpgroot=$2 # (need mysterious "primer") # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -r300x300 -q - ${inpdffile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -g2550x3300 -r300x300 -q - ${inpdffile} leptonica-1.70/prog/witten.tif0000444000175000017500000032344610603537557014517 0ustar dandanII* ¦& ,ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈd'Â*Ãa‰ À¯&€S ÒÁ0s´àJ <0ü†@öjøaû b20Q°öé°ûA¶RM Ö¶ÓïÐ~›ÿéý½ÿÿoÿßò—„ /ýíHD² QÿÚ¦žä wÿ kè2yù— f-hRƒ@d2Xrž×íEh&@„T4Š–xˆe±ˆ ˆ ¨ †Ö+Âà†jrƒJ{· ¥ ¯éÚÄ2 ‚±¡lE k 2t„Xä"ô† ’ˆ(Âß°¿½ø ~á x0'@j‹ ‹ K¢tGDxŽŽ#€yBpÂD20ýðøAÞa¿øˆˆ‰ ë)⮑u* à° ‚§zÒ%!¡(D{„zaëþœG%x.  ÉÁÁÁ€ÉŒtCѨ+!¦¬†ºpާ;jŸÜ/‚Lƒ 6TØL“ tBу# g $H„u 2j6ëÀ À"X_Áú°ˆl;#½¦FÊP š‹H Øm¤ƒ † °°È0Ô Á¿NÂú„íztxNía·H'm¶¤€Á¨1i„É1~¤UF ¡Ô[õÞŸiÂMÖô“vôè Ãm¨Xv‘£Üêdr5²pŽ€@aþ÷­ÐO[è Ût“¤Û|,4ôÂÕµ“ƒ Q‘¢ m`ÇÒªëÝ'ÿI»Òt›úúéôî°íH6 \þ–û¿¤õÖ“wúA»¤¿÷þº§A0è?×÷úO_¤ß«¤Ý¿û_ë[Ó¤iý.ÿÝ'ýÒnú´›o¯ÿû¯}&÷ð—_×N—é7zº]ÿþúÿî“è-éÿ]ý~ÿI¿¯ÿû¯ô›ÿ/ëô›t›¿é»ýÿýRÿK§ðAmm{UúMߺ·xõÿ¥úMÿXãâ¯ÿ?ôé.ü}vºÞ›þBÁkúZé7·â­Ï¦¿õªŽ>­ï×þׯß×Mÿã¬ò~éÃÿHw¦öûVöÿü.þ)7ÿ«{}þßÿWû~½íö“{oÿïëýä6^C2ß Þ×Ûï÷ÿô¿¦þÿý?é½½†­íÿÿ~¿Èzþ—þýþßþCd{þßáúÿýUöøtýÿ÷¥~A»¥þÞ¿ÿý÷Ã[ÛÿÿO|†eû¯¯ÿ·Ãý¿ýd l÷úÞ¿ëÿ¥º¾ÞÃßÿ„A¡ ÿû¥ézþü5öÿÿ¿®ÿí믯ÿ·°ûÛÿ×~ÿÿ÷Ál/…ÿöøßÿî“þ·¯ÜqñÿÞÞÃßoã×ûõ¯ýÿÿß½‡ûà»jþ»é{ÿ¯·°ÿoøþ¿_Âýÿ«ÿ·¶¾ÿÿߨ_ÿÿ}¿Ûþ½_×Û‘5ýÛÃö×ïz¿·þçPc:‚ŠÎ ÇÿÛÛþúš·þÿÿ¾áÿëo þßïúßÿ÷ûþÿýá»öÿæ _ÿ·¿¾ß÷íá÷ß¿Ãûó¨1ù¨ûþÚÿÿ·†úÛÿß[÷ú _þÿÿÿöðÛ®ß_ý~ÿ¾¯¿ûÿûàÿ·ßï¡~÷ï÷ÿýûu·†ïÛÿÿÿûöÿkëÿÛÃõ·ÿýÿÖÿã‹ÿíïýÿﯷÿíÿßõ·‡¿oÿÿ÷ÿÿÿÛûÃoíÿãßÕÿíÿÿ®Þýoÿèøøõ¿·þßõ¾ö»ÿMþ¸ýÿþß·»Ößÿï«»ÿ·ýmïûþ¾ýùGö×c{®:ÿ«ÿõoý¸×î»ÿêþÝÿëí¥½7[ÿýþ¿·ÕöÿýÈ7‡ÒÞÿéýºÿÐ~CN2±¯¶–á=¿ýoõý¾ý=6ëÛ­þÒßÿßÛ¯Û××Û_µÞéëò—×ý}­¯º[ûio_Þ·ä5aµýõôµÛ¯m[_ÿ_Mºþõõ醗¶–ý7Jÿõ¥é}¶¿®­¯¶–÷Ú[ßëïêÚú·iv©«kí¥½¤ØK]ô›Kîõí-&רa-í Ú[ÿúWûuz·aSMmXiZm¤¯jÚ[ÿ¤»ê­¥é¶˜K°©…a…]°‚ÞÒa ­õímoÕ´¼ r`”ÑHA#@à i†I>Òl$ºö¡WûI°‚òµ‘ A„РÓa„o $Ã$Ý4ÖÒMoÕ†—„ìŒÈ‡!´–B†T " d@nà &馚*ˆA§¦˜VÂK¦áP0©(ƒP© ¡PÅÔ&ñ0eˆ74ÓC Ê-¦œ$a}7ô¡…á‚·iˆD5R9ÌP†X¡DÈ‚¨X h0˜Ca„‚~Õ~ †á„V÷h0¶AQ!âD2ƈ5K„ öFAXrˆÑ ÔÔh!)°d"@ÛÈ6Ü0‚ßÿíP0ƒˆj b"""""$ Â<ätG}%Áð/r Á‚¯î½|0¯ Ib.CL‚ƒeBóa”¦a£:RÀð/þƒâЋˆˆˆˆ³aª™°]3@ΤàùÕÈù @^ Јˆˆˆˆˆ2 Há–± KQÉŽ#ˆÿÿÿÿÿÿÿÿÿÿþ@˜&py``xAéá=áz è Ö‚oH>“é>—ï¤ÿêÿõûë3@²ûîýÈdoa Éa;KØ"@J@ðØ2Âö$3EÓ x` ‚ œ)âüè( q ¡Å¢L ADx9 ¡£`ƒP@ÿµˆšÀšú 0AÝv·Ü§„_ÿpDDé¢0;! “ æ.¡ ü6¼"Ó†ðÁr û Î1»Ad@gɃPbN‚e ¾ÝµA ðTvöD ÛÐNÐt·­&ƒðéì$ž·{éözMýûðöÓIö«öÕþúOßÿTû·uýkü?TŸÿÿø¤ûÖÕhÍwØ}ßô8÷_ì=ÑõI¿ý~»ú´¼~ÿ}‡ÿ¿óë^;ÕÒkïmaý^?__·û¥þÚþÃô¯ÿëðßïä¿î¿·ªÚZÝyñ·õÿþ¾žëoÿÛÿÃ~ºZÿ¥þúÿoõÃßÿõþÒ_×ö×ëÕ6º÷õë†õÿ ÖÚúáô•øÿëÂàÞ•]ºñáô¿ÿ¿ðÞVÿý/Ãä ŠÿöÿÃäÔ+wÿ¥ø~óP/ý¿DºíõWáÿÒÙÔáø%Ûß¿:¯ÿõþøgÁH_¿î«¿â¿ÿ{÷ºÿúN—ûöÿýþûºÞþú_ÿ'ˆâ?ý[õ®• ¯ú^;ûwþÇùXFõ¿ý~Õ_ÿÓþÛÿÿë§ÿÚþ÷[l#ÿÿÿúþ¿m%I¶ÿ÷ÿÿ×þ¿º÷n²—ûÿk¥v½ÿù Xî¿o×úôý_mµÿß×´•-ÒÒþ¿î½íuýývÒÖÛ_ïþ» û u׫׆–¶ÚV’~ëkØJ÷muõ¯K†UL0ÕïíyP$Ó¶ * M5tÓ ÅÓL0`’i§IÊ°ÂØD3Èj« \i* 0ƒ=0‡†“ „ÃC„3eŠ ¹Ès<0¯Ã M5Ða,_a‚ÿ¯Á‚šÑ^CXN¾ßòÀŠDH9BlðÊ„Êõ(äB#¥%óˆä]–@˜ H8ˆˆˆ‹ˆˆˆˆŽ"?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÁHr ã”9Cœ| ¸ˆŒ¡Êá©„2,àO ¢&hDZ‚î <NPç¡ÂŠ¡Á¾ÁÃáDtˆ’£ê®äÇ ¶È‚9`öÐÄowõ!° …! à¿Zr¥`‚ˆÈ-—èD aí5øL) T°¡B`«àî@ôø@˜E>#ùÃ*Š0PU @ó¿!\‚°ä4‡žˆèŽbø@ïMUB¦×¿þA¨}¦mPžûèß[ÇUÚôÿTp|>î¡§TÿÆôƒ6‚)ÈmŽ]çÂ2 Æ| I™Âↆ¿eÁíPAÚ÷zÿþ–ˆ†Cù~KÓˆh4c>VA§ÐxLh\< aEâ~Šð{µµëºê¿Ë¢:LŽˆê:.œóhÁ4w&ÄrFÛF  ƒ£âGš0ÃðÍàBÈ#‰ÀÀû[ý< ]WOB1‹wbš¦×Ü=aá=6®}é´œ8?º®$ðÑÃ[‰ð d|"ûëêé_~·N­¾þ«¯®>žÁ>Œц/Ûq„baÃÚd¸&dæ_„\Ëð@Èò|a|2Æ]8‹úÿúÿWûÞ¿ìUuÿ HæÃ†‡I¾œ°‰°f¦Òt6—š0l4FÃA ·á=ƒÂ0‚(ý®ê×OïØ¿V·þ«¯ûÖûÛé=+é6•îÂm[v’oª¦ÁÃíƒ6ù´¡#ÿÄfŽ¿bf ÿÿï]úÿÚÿúÖ÷¯I+Þ’ö›×ãa?Õd!àÿøÈC°dÿýªzÿÿÿ÷ÿ«k¿ZÛû÷­õôÞ“ÿðŽ;ýr¶Ëÿëa‚3 0GÁ‚pÊ §Éù< C’³9rcÊòâJÈW%;ÆbÓÈàƒxÿÿÅxcµÿ×ÿÞ·½úÿÿè,ÿæÀ€Xl _úü; ˜P˜A Ð‡„ Á&‡M ˜TÔ `£QA†Ë¡¡¡ê!fA¢jA«²xCE#i_ÿ‚ìÌ$Búâ+ÿ¥ý¯õ×zË¢:Þ‚ÈÜ?ý,Œré6 a5uI¿ü˜ú^@ÀäKÉ—„Gú_½×ï×õü޳È"‡m5´´ívÒÛNÖ×þéÒµ|0ù£ iÖNºØf•Õ'A†O¦P¡ý]ªû®•¥®“è噕êî“ÿÿ¯oëë}ºÿi?öýGB.$t¨JFv’li°Âl0I´a†¬0Á 6°ÂVö‡ýªü-= û xB©Øõ¯oZëî­ôA´÷t«ÿ^¿õ×ò|ˆ:ÿd ñõ±ßÿ׳ŠÂÓ Å1Oy„AľÃÄ*‚*‘#É&)°“ûbƒõÿþ†·ZJ?T¬&¦ ˜M0­¢àcÈþÅÁýwá´„DDDDDDDDˆ8‰ 8ƒ0Œ#y˜2~S ü†¼%¿êC ¸àÈàÔ{ˆˆˆ`šxBi„Ðh1 ¿K¯ÕqF1µ×õýþ*ÒýSÖ°°ƒú¥ëˆ3 “ÉÌAw#âL†‰hr9kò Yr䬆Pä̆,†{!žiFFêžÚX‚xA„PL a „ ˆr:L&` `‰Ã0j`äÈNG@.hÁžÃÂH9rëîM:èáZ—ƒƒ@áçýñÿ·õ¤ñïuö­ÿc¿¤8[úë§kWûÜ‚»¾¿ ®ëý/ëÕaw^ÿü>ëÐë÷Cÿòœ¸çÄ{ bÿÿÿý ?ÿõ¼!Øbþ—ýï _ÿëô»ÈhŒàÒáÿð×ÿÿÿÿüð4í~ÿÛñùüŽ ýùÐ5?óŒå é£@ðÑúãø[ÛKþÿïõoýýïþßú< ¿úÿ<Kÿûð¿iïþ¾°»÷ûÂë^¿ÿÕ>Ö¿ÿýÿà/±_ÿÿø(lÿÔ?…¿÷ð_úü|Rkkÿ_ð‚ë ÿÿáVÁ¯Ûð_ÿð¿þÿãŽ@ðχr'ù>#ò$dtȲ-‘Ù»?þBÌ‹äø•2&r|C̃D¸–ìØAF{ð‚ý…ÿû}„ Ý}Ü?„z÷ÿà¿ÿÿÆ0᮹‚¦¹áAB„ôÂ7°áª£iá+‚a2^žšhH&Kлô»Ñ€ÐÿÿÿÂXp—×þßAÛÿö_ý¯éH6i&ÃhºÐoļâGtƒia ÒáF £Ý\0ƒAœ -чl„ÿÒoöëÿí,î—íÿ¿¥Ýÿî—ÿïëý:[µVÅjûíéºýÚWÒum\1_ÓÎ{ ëø["Çúë÷¶D}mÿ®¿ bé{»õí/ïÍä|Eó›'ó!Ç4A¶–Að†\]ýé¿Ié¯÷kõoÿzûßn½úØ`¿ ~› %ûuh¶°ÖìzçÖû[ÿöÈâÈûöB:ÿøá5FðƒÞFðÉù$gÌ3ñ?È4pL  ÞO‚ }ë¶—ãÿïO_¶—}ºßÐÿÖöñWvä`AÿÕ…øh‡¤ÚÓ¤Ú’{ôµ8ðÕ†#ûa…ÔãûwÄ»ƒÓÄŽmÚ88fÂC6;ö‹ª0Ú7?FF|1ÿ[¦¿êým¯Ú®ÇßöÒ÷îšUcUƒjÕXi10©«E_a+I´£ŠûJÐØ¨¨aâ­ízoIéµ~ÝÝÜ8|­&ÒÁÃi|ÐtÝ/ÄÿÿÿHAy˜eq ÿ×ÌÀðÂ0ƒ“è Ð;h&ƒA°Á*„š{RiD¿´›Jt^Ò´˜‘Õ¦¢—Ui؇×ÿÕÿÿÿ¥¥í6“{;ãÈ`ÿÿÆ Þ ìõ½°mvÓV¶ÂM4ÃÔ Èziªbš¨¦)¨&˜¨ª­¦i íå šmõöûjÿÿÿMwÿ¯·8eÂêl„lþ¿\à¡mô}¼#—íÛYTM #ˆœ0™³ÎJq Â (^S`0šj©˜Â &*jšh0ši0ƒL&Âi ƒ6H×ü1¯ÚÿüUë÷ïèm}ÿÿBNÞ‚¬›ÿàØˆˆˆ¶""""""CŽ Ëƒ0‚ aB`˜L0ƒ „Ðh0šÿa0šöàdoöh QýëÔz¿È ŽE¿¯KÿÿKéä‡"Þ—í¥“òCƒaÄDDDDDDgÃ$5ƒ?ðþ2*?ÿø¿õ q]_céí/õc_Ý´¿ÿ°èØ^#þôp8ÿÿýÆŸoƒí‘×ÿöÈþ½¾Bþ×ÿ¸Iÿò Þè/ÿÿ›ÿ6ýµkKþÖëôµk¾û]×û¤¿ß$8?é’ÿÿü{VÒÛJí>Ó°¶›k§Ú÷ºV¾Ö¾·­~½¿õë¯ÿÿÓðÒbšb‚ ‰ lHøq@ƒ6)‰t1#àÂv`Á&$|iìR ;µÿÿî²uÿÿÿ!lŠ?kd û#âšÃ[Óµ1…ì&N¤ä|Pbši}Â àŠ£uß÷êÚë¯_kíÿþ¸ˆˆˆˆˆâ""""" ÈàäpSA„"4 ¥…_¾Òm&Õ´íu×õm{I´¼GÂXD1ƒ0ƒ†‚<$ÅDƒ‰4ÓbG@ÓVI† v“ké1Xƒ#‡ ‘õ#ÂLBh0š m Ðm8A„ ˆLP qLWÉ hØIˆˆˆˆˆˆˆˆƒ"  !˜az¤ AˆŽ#§7áÑ`i¿ƒ#é„>"$Á@ä¸ð˜ È,†@¹ f<(v ˜PP@È)ÀAé…PPRƒn5UTÓ @ñ3Ý–º…O ¶èC${uh8uFåøGk½ ¾¡ ÷„‹`íkïBôC!áÁ¤|†@wI²‚µßÒøA< ùß<1ÄÌ §“~$õí{Hņ‹Óÿmu×!òwÝðààú¥úþº¯^A¡ß ªïþ¶º§¯í~×þ»úþºúãÿ<5Ç!¡ÔƒkÕj²'¯ë­þºÿ<3Ì2\0‰ãº×ÿÿ£sÃxM¥ì&W¿Ta½:× ¦¡0˜Fö¹é„T„Á5`K0GC3ÌÁƒ Ådd0ä¦E™æCK”†~Èf9ÙŠC8äÂ"Á ðCR/õ×ýi6—pÍ„ƒƒË¤Õxptƒa‰y†pH8b]‰°Ä¼%êA´›‰y£ KÌ(*a5Âa4Â… š Á0˜L ‚ Â…0D bA ‚œ3‚:s|<œÈ¶W’³¹dÈ?~ˆ1d>Ì…À¤10ê¿ë­´ßñ[»ü í;µ[ ¦ÒºZ}¶‚… £fŽL*Öà¡0P¡SML=… „Ô&aSL Ó xM0ƒ0A¦dý2¼&™/'ø@Ñ a„ GãxD‚›ˆ cˆy"òVPä‡ _2È5Ç]=Ó]ßßôÓõÓ¯NŸº¡¤Øf`”j ÌćZAÂa PA°‡(à©£†£‚„ÑÊŽOO †B¦˜3b›mÑtÊ¡ð#i¿„`˜3 6Ìk„ß £aƒÜ. „02S/Â' €oZýÿÅ¿þºÿû­ÿëk­ÙA5ošIãiöH: ÖC„»i<‡CKĤØ3áiÐÒtl„ô.6˜HáÁQƒháôœ1T B ‡÷¤›A K¸f‰vÒmÚ8t_xa‘¶4`› „‹ŸÅoÿ­/ñßÿý­nƒ]µøpÓ¤ï ü5îÂutl¡„N•†mÂ8ÞÁ¤û¤Û(7º·RCÍ ½Sétý]=Wÿz·ûMôé?öõíÒN»´“ý­ïäc×ô_ú­ÿUçä©×ßëÍ zµÖ®Õ?´ýÚ½½×iÕÒo Ý?IáÕ×Õñªÿ¿­'ëêûI»ã¯ª÷ýþ?ÿ´œ?Â<¿ÿëñýÿú¿ñt?úûï¦ þûºÞÕ6ÓØ¯Ótí®î“Võßïýzÿïú¿ýú¿¶–ÿ6 ÿ´cká?ÿÿó`ÿãÿÿ×¥_ïõÿÿ׿¯÷Þÿýõÿâ¿ÿ_­°¿´½¯áÿý~ßÐn½ÿ¯ÿÿ ¿!Gý{ÿÿý…ÿÿ ý/ûû§÷÷«Öÿÿü‡§õÿ®¢ ïø…oƒÿ$?úN•ú¯ù!ÿÿÿÒüïùàÑÿ×ôfDpÿÿýý†¿ÿkïÿÿÁ¿ïÿÇ/ßä-4™8dŽ÷þ»õþ¿ÿýý}ÿ¿õûÿÿÂÿÿ¿ûÿzoØwÿÿ ¾l1ÿ÷› ³`A·¯KÁ¯·¶Fù?ÚÿDcÿ¯ÿÿÙÜŠ=kõÿÿÿÿ…ÿýßÿÛÿþÖþÿÿü ¿õÿZ ÷ýí ßÕ­~éîƒz×_ë_ÿt­_ÿëïÿüÿð¿ßÒþÞÿÿMêßÿÿþÿü˜ÿz_Ú^‚ü‚ù°Â¶•­¥ 'êÝ6m„íl&ú«i6•Ûkßýþ¿áëÁ~¿¿öïÿÛVý¿¯ýt¿ÿÿÿ¯Øýv2(áö)Š@ئ%ö6°ÅDºq/ÁSè0ƒ  ÂÅ1„Aă0Oÿ¿ÿÿÂ8ÿÿA¿ÿ»ûÿÿá¿ î¿ÿÿ¶Dÿÿòw!ÿýjÛÃ0ƒ#„B;A°ÂÂi§i„Ë’wü4ÂÕ¦–ÿo¯¿ÿð‚ÿ»ð‚þÿïðßÿíÓöûuú¶»k«kkþ¾ÚÚV¾ÓkïÖ"") œ,qþÿÿû×ÿû ÿõáÿÿŒ7¸l&ÚI§wûÂÚM„˜a>Óm%ÛIµÓÿ]:¿§ÿëû!ÿßKý²ÿöëõ÷n¾½§íÈáÅa0ƒf|6!5ĺ `ƒ8 ئ*$|0ƒZbGA°Â0ƒ{\†@BÚþÝ~Ã_µûõþ¯õþßäŸÿ_Èw~È`w ˆˆˆƒD0„0‚ &DXAÃL  &“7kŠz„U=(ÿÖÉ¿Çí zÚÚe?ì0—Ø"?Sý¥_u¥õïý‘^ôÄDDDDDDE!eÁ¼A‚Õ&µÛJ?kN?bCþ?°¶‡Ý½6[í¥þßw_W[ .׊C±Mi°Òi;i;;x—I{iv6;UmcVëïm/_ãµ´½ ÂMaˆT`ƒh  ¨ ƒ6CVA„A:“é4Óa„&ØI4í&ÒNKêëjë kÆ@ýÒÄi¯a{ ¬)á§´Õ…jÂi š Å4ƒb‚ ☄q0ƒx ƒj:ÒOÄD†d0  „C ‚G €¥ÁaHâ‚dq#Á)É4Âj{Õ ¬0¼4ëNšM¦Åa,DDDDDDDDDDDDDDDH;ˆ‘ !‚ \rC —$A„Õ1XˆÏ)@0H8A„ "@.H* 0AäS‚'Dx ^¿¯ám83aK“}3iE†x4taÙñ„`›O„цѹÒ0a£ £zÿø=ZO«aÁ´œgÐ8= )æöÃ6Í…î“h+ÕÒtœ9©x d4¸˜äpE²dÀƒ)ÈjÙ&@½äø§ È_8ä4ü@fÜCù 87üBñÜ"€Ðx8@Yÿ£{F'¦š1èޠшaßxMØ&˜A£fû? EY?Aúú ´ƒx1#›I°fÐM†$w éÁ› #¼ÐM±/4m´8pÎ &Ø‘þ]Îä,Ö²ï&êAXUWëIý'i´ž¯j&à ºowh=6 ØA’àƒðBð@Ñ@fžƒ'Ä=H/ ¡~KòˆqÈlãŽCNÈkY‚ dô¿÷[Ýn¿Wúu÷IÕÿW§‰½Ta‡èÛéñi„n`šÖŒOÚ Ÿôa ¢>g„ 0ƒP3è¸d¿×¿ÿÛÕý}Õ÷ÿÕ×M‡KI°àé3z‰á› CìHíÐl:.™ñ„“z6‚EÊú6Ú0èÃhâì}šÿ¯éþ Wÿÿ^þ¿u±Z»ôãO´Ó«±M;I7«¸u}Ã¥¥i7AÒâ%ÿýê·NÍ«ÿkÿ³A?ÿ·°»ÿ諭ëÕ~›ýÕþ“]+ßýÿ‡ÿñÿÃÿÿñKÿ¯ýü[®õÿÿÖ«W_õÙÿÿÿ ÿüàm ÿÿ]ÿÿú_ßÃþê×¶öþ‚ÿÿÁÿú¯ðÿÿÿµÿò :m+ÿöhFa=:ÌÄ>—t¿úɾõä‡"Gù!ýÿÌàß’þ¿ÿzþ¼‰å_ñÿðàýx¸p}¯ýÿÚý¶ÿ¯ßþ×þÿÿ´¿ý>ÚS€Çü6ÿ¦È£ëþ¿ÿõuÿy?O[ÿ¿ÿÿ±_þ_õÿƒƒÿ͆xom{ýë­ëïëÛ[[[þ»¯¾½pŒ&ÿÕoÿêHr%Í÷ò 8…îÖÂßm¥kÚV¶¶—kö•¤õiv»¥ÿ¾ý_¯Å7õööïÈaÁËb˜—ÃA‚ °”P@Ãa A„M„‚`ƒb¢›J§m¤šõÝj¿ÿéþBºÿï®äAò}Ó|0˜MnÓ¦+äxPbÒíM¤ÅKâ‚  ƒbai[­¬Ìëÿíkß­÷ý‘jýÿˆˆˆˆˆˆˆˆˆˆâ" Ž`„D`Š„•´¡„umSû_a¥½6Õ¤Ún­ö·ßâ4Å ˆLKöÂqAaĆ6˜`’m„¢]kk: ƒ C˜a+JÒñ†a b!„ˤ )ua4øblS ‚?ÁmlPb˜¨¦_`Hˆˆˆˆˆˆˆˆ0B `„0ƒR; Gb¤â"""">¾}{¥‹lÈÃYÈ ã†!aBŽ¡H0¡SÈ‘' r‡)ʲT'Än¹ ƒòÈ+Ž@ðiòIØpñ„ÐhÑðàè4bd2¼d }¨M4û¾B•Ø;<¸h4Âa4@ؼ‚¦÷þ¹ éÿz¡ÂU„Ê‚#öUµïí¿ƒ †¤2¦ÿÇÿºKIkÈ)ÿÿ¶ëû®ÿÿ¯÷_Õ2àxgµúëþú¥¨ãc<6Y A{È,æCá XR î¤ ƒ# rÇ_û!˜äõÁ"ðA„A¦eøAádý#Hø5ƒP dá¤rBœ‹Šà¦bÈYþö•*ô¾ŒфѸl&‘†ônaoi„ÛmlÜXFÛM{Fç£ ÿoª…ýtœ16“»JÞ‚m+ À[IX`©ÙótØfÃÐW¤ÞB¹ ™(roñXU h ”"Y|CöAGg Èlâ ðƒm!ÈW ¼PÿtôïI?¿ûôÛ­µ÷^½¯¨!e«'@ƒ!‡'„&®ôC¥Ž™<ƒ¹.Fa0˜CÚ-W„ÍáK‚ (öÉxA‚¼"qsâÜxŽ1 €,ýj÷÷­Òû¤ºþßµýuMø]P`©…ºP˜BF¡C 4œ1/4qÒ †pSc£mº0oF à4‰tõFFç£#sFðѼ0ša0TÉñ?ÿýÒ¯õkïß~¿Åõ­|*6H0@ ¨Tl¯ázG6UØON“µºV[ Bá„%Õ&ÒÁÐAÒmè&Ã<ѱ#¶ÛãÿÞ¿OõÛãÿüi àÕ\ª©=ºJð§Â„Ã}î—WïJõ´Ý4Ýk×ïM­¤í1 ÃN>@ðo?¯¨õ¿ÛZò ³Ü_ôô½é]‰‰$ïít›„ï׺ÿ¯­ÿôÕ6¿ë¤«tíÕï‚ÿºÿÿëຑ_ñû½é;CO½>él.¾ÿö¿¯ßëíêö·ëßðŸþùÀ#ÿºOá>á}ÿ›@Üà”»zí¥îÕ¿í¬BÿéÿûýÿµÃÿ¿ûý÷î•}}ú_ ¿ÿß~Öº÷ÿÒ÷ f 'ô¸ÿù:ÿ]i¨óAüúÿ_«ï÷_É¥ú^©~HÿK~‡¤»ëøüÇÿ¯ýÿãöuÿÿ’§_üSd ýùzö>ºþ¿_ýþíkÝÓZÿÐ_üØ1ÿœ?üØ?np2¿ÿ×ëþ¯¯ö¾´ë¯zÿí‘GÜ„~½Ö¿ïÿ_Köÿÿ­ÿ!þŸÿÿý}¿m-é´®÷º]t~»^ÒÇï×]Ñ„Òþp6t¿ÿÿoòCßþHp~ÿÿµ°ƒí°›VVÒm{KuÛNÒ´Ö×m-´¿ta5ÿ÷ÿÿÿ\„üˆ?ƒÿõíºaÿ¯ï¯‰~0A±.ƒÃ6)ŠÓ ‚>THøab‚ Š6+û§ G—ûJëÿõ÷Û_Û__µ&úí‘È£þÙò+ëþ•øa4"L¸6 Ð†a#‚,1A— `˜Sz &škk ­¨@¿ßuÿû_µµ¿ÒÛKü'uêÚ÷é6“÷눈ˆˆˆ¤"#ˆˆˆˆŽC8÷½=«~ÒÿÿbGÁ„ ˆlRÚlRl0’}¥Ø]°•¤¶­­«¥þ–Ÿúüq ¾÷â¿õa5…gøa   ƒb‚ lW6)Š0“ÅZAN)‰tAlÝ/[ÚªÿŠ{ûñÇ`„B!„˜‚0ƒM2—­¦õií¦Ó^H|Œ{!_ÿâ´Òm§×´ýmXij—ì ¡±.¿èÒlm:°ÖXa$ïüD…M4ÓAd=tSÅ Ò_¦ ¾a…OµA¤íŸ‰ 8ˆ†hCô,  !A‚ˆˆˆˆˆ‹Xù ˼&@Ì?C ìáà#{ߺȃTÈ3¾–@ê p@ð× ™È,ù ‘÷µµ½´áÈg‚†d/Ž*$€Êäß Á$îÁÿþžˆ(¯õü[õÚkõÕzüGÈr(åYxEâ Yˆfq ö\Ëâ &A7ƒ“ Yƒ×²; þ†UÏdÈ4ßí¤·¾œ4Â6™.  EX&ûA’äÉøL—&hÏ?Ÿ3ØarF|@dü&@ @N­®¿†0A·FH6‚ †%ç†i'<Ø—ž‹ª0m„x—Ú1´`˜gFb]4\¡l3€t‰ ZôuÝô›ZM¥m>ô¸4 &ÁÒÒmº &!:í¤Øa÷¦Ü"@Á„Hˆf3‘ð‡ÑpSjEôE6/††l0†,†UÄi»¥â©uz~ëzöâ¾ÞŸwßÕé×Jö‘†ßF&šhÃÒ1´ô/d3òa —äù0DâH¾S‘;ÿ¼{««ÿöëÅ]´º«ÿ«¯}ðÍ„A°Í…¤Ø1#¶“Ú¤l /—>š0mo‹FàцôbFðöÖ«ªÿöÒkÿ¯´¿ëõû±[ÿôžžºJ÷ž8:N‹õ´¬3ÆÒtƒéAþÕ}u¯_ßö+üWÿØ?ûýnŸãWúx®~&ÿ§[ùuãã×÷H¾ú·ëÈZüœÿ¯÷ûvªÿ¿öÝ~·ý>ÚV—SúïûÁ¿úïþõÿöøÿßÃ_ëá­uÕ¿Û­ÿó`Fzû}ÿûéÿ _ÿ‡ÿ ¼ÿþN ÿø>¼}׆?ºO_¿ý¤‚ÿJ¯Oý/ÿÈ'‚9ý/Ø|û'?î2Säåøã÷ÿ¨×¿þ¥ÿú^Mÿònþ/ßðß8 ëöÿÿ ßʽ‡þíƒöBík¥þ©7ßÿïÿõéþ×þ©°Çù°k6|?íV¾¯_ýÖúMÿëý×Ûºù1Òòc÷ù!È‘ù1òCþAóÿ]àßþÚ[ikûéÚV½ÒßþÖëö·_uÿ×ÛÿÿäÜ>ÿÖ¾HpÚvI6I´­V¡„a0’n’ÚÚÂí×Ý:ý/þ¿ýƒþ¿ïÙ>Dû¯Wÿ¦( lSa{óShP@Ø ƒA„  lHõŠ Š ☄®ºíÿy8Ýu¿ûý[^÷":ý»Ö. wDh0ƒ aa„  ÂaaËÁ…µ´íwK¿½´¿¯ïÛJÿJÒ×¾üDGǨ‘ðØ ƒm ƒ8a,ƒi 0“½¤›jØK†“jÚþéi{0˜MlBù[Ó@ƒ0AÅ ˆLP ☨‘ðÐ8a&×!’¾""""""BŽ Â%ˆaÍè0ƒ ¥dxSµ¯ÄDDDvÒ_â‚~_â#éè< x4AÀ²Èdcà˜R†ç2 BÇ!£Èd ³ä Âá°ï‡Ó¦;Û‚–C ¡H-‹Ä6OÈdEÖŒà@îAdrƒ¸`„I‘wŸ‡ÓrA €Ðàƒ!’ ù €¶AŒï»ßi«}È4;YÈdqöÁÓšhÝ„ÂÈ ßÿ¾×ÿµÿ×D#<5‡Ò² ppàä ï ±¯Þ¯®#¨ûïßT¹ €d xÇkî¾»ßþ¿ãŽ£þºþÿÿÿûëþºÿío®«Úª¯ª§ÿëÿãŽ.È> DË·º “‚VNC<^h„̆›£ä=ª¯ê¿ÿþ‰0ƒDŒþÏÄý “äH8 Á .0A’ðA‚/Á0FbA‘36u2ˆÍžƒè»9 hø‡È B8B;8GdøA8‚q ä²< ˜A¯ˆv\eºH]u×ü3ŒlZ/¿ àQv‹ÿ ð”Ѷo£ Ú0š0Þ¨Á¿L# ª0m­¦yzÂ0Æ…„naš6›‰øL&´ôA„ —„L Á2S7àƒ#ì2\ ƒ)È4yd¸»3@†Æn<G„a<¼ øC^grÈ`r:ëþóÆÒ¼=aÁÞpïÚ@í1#&Å&ÁˆA´›‘ú¾êÞ“a› i„°ˆ5NöÒ ¥h Ø3a!‰y£AâGmm6Œ‰tѴѶѳ„m¶š‹XµÑˆaƒF÷„ð& 0ƒ ¡0ƒ!—ÁK‚ 0Dâ%Çð‰ ÷"PÉðE.ÍŠx93Í™ „=$‚ “rcý:¾Ç_Ó~ÿÓté7Z·ï±UOþí×ô®Ó{¥¤Ý; ˆM«tÝ:ª¸0ƒ›Iºm&Þó`óÆÁÁ›IÐM†%Ô±ñ#¶›l3M… £âGž‹¨FÛEιéÐ@Š˜F ÓæäÂ1O‰üC "€.|ÏaÌàà’™~Íg‚üŽ×믡ÿí/ÿÿ§®‡ý×ïÿö×zþµïþ®›I´¿Út»êÛªw«o§¤Õ¶¿wiº¿‚ ¥a„Ø1ZM¤é6‘̓0 ­‡al%T›y½6‹•Ø—ÜHû‹h4ŒÔ#sFÿÖÿÿKëõýo¡«ëö×ú¿oÖ»ú­_ûªûõÛJ¾Ÿýtº¯öµ­_nº½Òz~Ÿv+IÝé½+Ü8a 窧Jé¿ÿÿëöÿÿïÿ¾¾+ý{|ø®5ÿÿýÓMý{±ïýpßk|ý+ßzºö•íûï_Þº}¿¯WWêéé¶ë}-'ÿŽ«ÿ´¿×µã¢ ÓãÈzþ“'“ÓÿÿýTDÿº×ÿðcµõµÿÿýßõûý¯Šÿ·×þõuúÿíΟÿßÒÿzþ°Ž^¼Ëí¥þß‚ñÿèuÇ!¡Ì<[Uýü 2Ìçâji­kïü¥ÿâ¯õß×­°Çÿöêߪ¿þ¿ÿŽ?öS`Ç›!þl„ ÿöÒ ÖÃó€¿þx4¼ñ‘ÒÂ8ÿá©7ÿû|~ ¿ÿñ÷ŲsäJ%‚Ú_ÿÿÌÁ§^ôú³áj0cÑ!ÿÉþLßÉñ_ú_ú_¶—ø7è/ªÿ¯„# ¿çL.p6ÿ ó`Æ‚8ÿÿþ›ÿü‰Å_ÿÿñÁÿß¿ìÐ2Oÿÿû_þ€_þ—ÿù1ÿònÞA©ÁïKû&?ûßÚ_ú tÿëÁïí*ÿÿæÃ[óa̓ývëÿÿ¦ÿÿ´›~þÙõõ×úÿë!ü„ÿl„KýŠþ+~¿oÿÿÝ*ýÿFÿü˜çr$D‡…ÿÿþ—QŸâÞ^¿ÿüØhÿúøoÃ~¿Õûÿäq¿¯íþßëúÿ­ÿNIï×VÈ£äG×ÿ!ü„|Šýÿƒ×ƒ¤ßÿý»‘GÈAûUÿÿ&ÿýd08oü›ýoä‡ÿÿÈ`r.Öí¨6¸?ý¶Kµ×Õ¯ÿD1Zûkéûiv¿_­'ÕýÚ·_þÚé6•¥¯ö·Ú¤ÿõëý÷þŸíÿûdGÿ!·l„ÿ׊×ÿÿ°ÿëý\È äKؤՃ 1„Ø‘Ð6(&ŸÒqI« °’§a..ªpÂVØ@ÛI6¶=;ᄬ+a+ ¥ÿi]6­­¯î–uJõí½´›Kÿÿ¯¯û­¾ë_ýuÞ¾ël„wûýwíö“0Ä&uTƒAû„H4 °ÅA†( lSAaŠ8‘åx tÓÁ„¢˜‘àØ¦)ŒaaÅAi1LS #4ÓMƒ¡„mÁ„“†§i'jÃVKÒ°¿º[kí¥ká}´¾é¿Nºímuô¯ÿ­jÝ["ø`„DD!ˆi¡ÂŸL0B!‚ÁˆaaƒBІò;¦ð˜M0ƒ …†¨1L&˜ª ¦ƒb˜§b“L  åñAñQLP llKá„ 0ƒa¤ŠL&à XI6V­¯ØVÓµíw­;­µ´—í}ïín‰Þ"""ŒˆˆˆˆŠ‡ÄDDDDDD†2àpaa28+…A„&¼a5´Â×¶)áƒb Š˜@ب¦( `ƒb˜‘Ób_ ¨¤a&$tP•°Á+í5´“ûKm+ý.’¡DXaaHì Â!`M0¶[I±M=( ب#Ì Â pEL ÂP„a/ò aÝ/ÄDDDDDhDDDD! ˆá„AÞ/NÔ þ“Ò½Dq¡í-$«! ¯]lTU'¦¹ X\&„ ý/KœV«Ãi6+A°±ÈVC YÁbÈ)Á±ÁHn!rÀoÄ F˜:aæ@ðð ‰ÀÐÈàJOûº¨p˜d8f„¸d‚¡°3{ÿîä2AµÝ Ú£{°™ AÈùÁŽñØ_Ué7<4Ü@ä2ÇKpX:aÿÇÄ}&Úׯä6Çpýt›Ukò ®C1ÿÿÿükÿÿ×[Uë|Wÿ xgÌAð‚y,âò@ˆ!£òï!pƒ.Ö‚ –Að» ¤ä‡!\ƒÁ AÈlz×_$?ÿús\2\a2^ah™~d¹W„xA„¸Ÿ“äuަ{ !d2¸Ÿ‚ ƒW aG°ÈY‘ð d'”äOEž #‘ã<Ì)ì¸ÏeÃHÌ6s«x ¼W‚,ÎäU~ýu_Fèh4ľтlKíÞº0Oa‘ƒz.º0N$yèÁ´n£è Î,Z6þª0Ú0ñ š¦ŒCÜðáªi„Ð"¹ ÉpA„þÏá2 8Ÿ„A‘ð@Á‘æqN3Ùñ’aˆðC ØÏ„#™ÀCÀÁ½R„Èf^®B?ëú Þƒ:¸a1 ÁÒ½÷¤œ:X>ôÒ´°àáÑ~ðÁžm&l ÄŽlT›IÃ>é6 Hí¤&Ã6Ã<Ñy£Ð èÁÑ‚èÂhÜ?‹Fkžš7k£{ÓÁ4(M0A„L—'$flø70E•Ä2t/Êãq Äø‡¡ á Ï6°Eò^]l°ž\aÔ/«õWôÓþ·½[±^·_º[ìU>ôõ½qZÝ;M«tôôßVÓû{Óí†!H?ƒ¶ÒÝ®»úÒk¡ß¯®šúÿÿ{­¿®Þ¯«ýõ×ÿI×§÷¯ÛÛ§ï¦ýºÖÚm+Š§Ò«÷'Ꞙ§Wi´¬X§W 76N!ž6“a› £aD» ƒzÿâ ÿˆ…ÛÄ/ˆ_×QÿKý~ë¸1þþ W×û­†,1®¿ºµë­/¿ëÇÿñý_ùÅ[zjê¯ë÷®ë§÷éï~›_ݺð^«ÈH‡?§þ?öÿïÿ“‹ÿ¹95þ«Y ¦µÿÿ_ÿÿÚëþ·¦þ¶ÿßÁþÖ¿ÿ}èzïþÿzé¿õ¬ÇÿÁ}¼#—Â6ÿÿú_õõ÷ÿì8ÿüˆˆpÈjÿ¯ÿïëçÿzWëþ—x®õ¿ÿÿµ÷õ zëý×ý¿T ûôô=aÿ6 _§ÿm/ù°!×ýæÃkÿ„qÃa°G¯þ¿ÿÿø/ÿúñû}y Út‡iäë×KÿƒüWëÿ]/Kúô½µKô¿ÿûýX¯üŸÿNÿýþ  _ûÿ6_ÿü#ÿþüöGÿ¥ø#ÖŸÿüˆº¢=}ò€QòŸú{ì~¿þ—ú¯×ÿÿî°ÛÿØ=ÿÙ1Á¿]Òɸ9œ‹i÷_ÿõþ‚ÿÿþ·þw͆†—þŒÝpŸúÛüËÿß_¯ý‘¿ñUú÷[d í‘Gýÿ…ÿƒïý}¿ïÿ^ûÿû¯ÿÿþMÒÿ&ýmÿu’Jý.‡ÿü%û ¿üô¯Í†@5õ÷ÿ÷õÞÿ×_Rq®½u¯ûk~“¯­6D~®¿^ÞÞ¿öëÛ!ÿÿýÿ­+IýXúÒïcÿÒýÒïï!ŒÉè'_ý½õ´ÿí+^´þÖëm$Û[]ÿÃOþ½ZÝu}¥«¯úÿªûk¥úÿÞÝ}Wÿëä ÿÿþÙ=ÿè¸h¯ýdœ?ú®Lw&ÿìAÒ 6$|0ƒ0ƒ ±L0Œ`ÓxaA¦¬0 pEBJà lTHètšiÃMSØiZÃIµÓµm[[«^Óµµm5í[KÛIÒuõµûô·®­~šuõõÿ__^¿ß_­þ¿Ùþá4ØZi¦˜iŠh éˆN0± ¤˜ ±[Mapƒ0ƒl  Áb¢¢˜ A„ $ÅE6lHøpÒ†”K ÓMˆa†’« %ÃJëm[ÚPÖí[WKµî½=´«ÿïÿ»^ûÿÿÿò|F„DDDD!DA‚A„0@¡ÄDC ^ b0ƒ0ŠG„ Âh1Z«MKâ¾)„Ò 6f›‚lPA‚ ÂÅ*%ø@ÁP&Pí¥ÅtÚI°Ða6×_û |è.ÖÒþûKíu×Û]DDEÄE"8ˆˆˆˆˆˆˆˆˆƒ#‚ ! x{Èàá‘G¼ Âa4Mn›ÂŒ1 cA¤N ÄBÄ&‚aaÄ`¶ƒbGÊMS°•¯ØF;JÕ5m-.ŸÄDDDGA‚`”0B ÂÂÄ0@Á —A0šj›M„ói&a`6( ÁÅllPA„ ŠÈQ¤¿øˆ¤""""(À±¡$8a°A„ÂaŽÐkÒK_ô´ƒxˆˆˆˆö’M¥þ@ðÞ2–õ×ÅSŸúIª_††A§­¥¤Úøˆ Â8¨«Jñ­„ÐbAâ"#ãþC$(g!’ AkÈd†®am|†@6ºd §!µä|†H?<¸‚a ‚ ƘtÁß!« !ù¿!’>Òr CùÀ­ò ã¹Ã4}ÃØ:10î¤X xjŽ@÷äŒ G_ºú]ò#ë¸p}0ä hWjCQõ×ñý¯ëzýÕ]PNž“ÿþ?«þïé{þëëÿê¸þ-oÿëÿ®¿ÿøãµã<ŽCCaÈgr ¿!G ÜpŸªëúÿúä&KBÌ‚ š‚ÿpFc9D™Œä}ŸìøSã="qœg›>©ÉL¿%ùȸn#ãù>!ø„ƒpE=‘ÁApÁÀPN9°ƒáâ Yd a و˂n@ðÔ|á ÿôa½4aµÑ¶mÕ 0ÚièÃi¦ž˜FàÕQ†Ó º7†îáèÞ©„Â7†  Ô#x²y>Aà Ÿ&rF|@Â!£‚2T7‚ § xg Lø]‘ЉfìÜC2'äGøHAm²/NA‘ñ ðD¼‚9¼ƒC`ÿI°ÄŽm&ÁÑuIÙzÖ“`ÄŽl°‰°bGbGpÄŽm'‹ªN]CL$`è&ÚiÞ‚l3í†%á/Rl1/Á›wb_aœ4`Ú6ݪ6Û<8FÝ7ĺ,4cFá˜G6'„ÁS\žƒ!›é Â2\<‰0ƒÈe8e†iñ ǃ”†V„² eŽA¼Ñ¼†ÿëÓíÅubô«uÒÝ4Ý=6ÅjÛ¾®®ô¯«´ÛM6“°ƒzN„íO6¶“ƒê“mÕ¤ÞA盦 ÒfòõXA¶%Û‰y†Á›t`ÞÀÒ¨FÛF ÚA?hâ0Ú8†ŒFš10©„o !—äü& ’àƒeð@ÉpAˆÈ(à@Ëò„K7–²2 ˜aúoÒÚkïééúzþÖéþŸ¤º¾ªúºêº¿ÿ§éÒzºëõïÚnýéÅŠÕÃMÓ¾“¥{†%Öv©°è¿AI´t›IÒ“ 1#¶‚m¡ÃûF6Œ6ľåÏ„m¼&ŒÕ4Â6ØT.¼Õ ÿóAþ¿ñ_ûñXb×O_¯þ¿Ûÿïõ_ÿKõöüØ/æÀ‹i_ÿüØ1ÿü#ê–Ž -)Á‚ÿÿ¯Ûÿ¯ýsÿßÃMüÿØqýGÑOãðY85ÖÿLÓß÷ÿŸîœñÿûÕûýÿb'¯ÿÿÿ@½¾ü[èÿæÁƒÿüØcó€¿ÂÿTÚA¾×Ùºþ¶ÿöÔåÿ\†Zd2Ñÿÿëìœ]~CÓü‚÷ÿó0È ¿þµÿÁÿú_¯é5¾—ýÿÿ“Ãÿþÿ ¿ÿÈc…ˆXAUÿàÜØ1ù°a¤=|Ø?áÃa?ýÿ_ø#ßüÿÿØ?ÿEÁ¸§ÿï÷ßKØïØÿ¯ÿþìõ&ÿÿäß×ú팊87 ¯ÿÉŽaÁ÷þ)ÿ¾‚ÁÒÿæÃ ÿæÁ…ƒúÿ„lÿÿþÞÙlˆê®IÛIºý["?÷Ýzõ®Bä þº_ä ÿÿûþÙ?^Bÿ‘þÿ«pŒzÿ÷Úa½FÃÿÒÉD´·ÿýÿ ùßáþáÿÿøo×í.¥¯þ—ö“¯û·¶­6»uí¯é]ÿ«®Úõ¶¿ëï×ë¥ÿ[¶DòÐUÿƒþ¶é}¯ëù7ÿ×ÿ_õÿä‡"Þà -¶çPë ¤Ý}¤ÃKUM+®Âõkim¥ºÚ^¶—ßö•í¤Ýv¶½®½¥uWÿwýkuþDºïÛVýþ×òvÿß!û¯_ýþ·^Ã{0A†( mûØH `ƒcb‚ a‚*lP lKႱ# lUE ( ƒ0ƒ a0ƒb¡„“McM6 ´•°”{a@ÓµïµØ[Kï[ÛKÓíd1ÓÿVýnµzö×ÿÛ_ý×õÿÓþßïÿ !¦„„$‡8á„B$Qöƒa4Ö ÂpÖÄ)wl$Ój]  Â  ˜A±AŠÐ m1Nq@ƒQV6%ðâ‚a0MŠl$ÅZzl0J‚ 6&à 0ÂvÚ¶›j½¤Ú­¥}ý×ÿëÿö¾¤wÝb(ÀœDDDG¡ÄDDDD˜â"!`ƒ Á0„0ƒÂˆ!Ga7°š›JîÚ‚*m@ôb›bc„ ‰„ĺlHö*$|; „b˜†M5l*§i&ÚI¦Ø@ÿì'ë½mÚ­úN—XˆˆˆˆâŒÀ±ÄDDIŽAqÄCˆalaa0ƒ4Ó ©0˜AŠö™þƒM4bA„ælPA„Hò0ƒ0±#Ì`„ &ØH&ÄŽƒÓµÒÍ@ðnëúOˆ¸£bDDDDDDDDDDDD…DA‚`„C0ˆƒˆƒ#ˆ@ 5lB¶¶ÐpEO½Rí/!¬é$þ–""""""""!ÄA…ºZZþŸ­%]Á›¤Ø¥ô®´¿Ã© a8¦ÂI¥i%ˆˆ†GÂA´Å1Ib"" !b#ÿ[n!q €bòƒj‚³È Þ h£éƒƒºyx ¶®@ññÁ!üA— /ä2r Cä\á˜>ƒXø{Or¸U xeù < ?uþýÁÈ1ÃÚÁÇMÈ7‚PA¦ ®@ðÒìuÿö_ëÂNé&à [UU^Ð}¤Ú¯v’ÚS » ui'uü†&ýpƒÿÓÒï'zÿûk¯ßëÿÒÿ¯ÿ׿þ¶ÿ¯ ÃLŠ—Å4Âm¶!KâM&i¦˜…A ±M ˆH@ÃLPA±1Ú6!@  ‰¼¾)ˆA0AÅ ´˜aÅCXkÚ¦Ãa‚ 8hÅ} Û^Õ;]-W´®»_moþfM}¿zïþí+¯ÿÉÇïƒâ"""3ÑXˆˆˆˆ†àÀB$$† Ã!‚ƒDDØL* Â oÍ¥±Za….…K➪A„q1 ‰@Û@ƒ=Š4‰ÆÅA±HP’m‚6ƒMX¥M?C;¶Ÿi/ÿ!ƒwº_Ý^›¯¶º Ò"""""""¢""8ˆÍ“DD8“Dg”B!„Bí`˜MƒËÂÂi¦¼5AŠA± ÂaÐA„A„ {ü aÄŽƒÃa „@Á˜NSi&±Ú\4“VÂZýV‚8 DHЈˆˆˆqÁˆ‹la°˜[šZvÜÞƒ0ƒ¨#Ͷ0ƒ6+õÈ‘ÒÕÕ'èQ€‘DDDfâ"" †i„"^“ªkõU®—¤øŽ#°Ò°–•j•­%ä Ȥ¿Ø„…› I´’K×ý,E„0Ä!b’«K­-,D8àÁ±Na¥Ö" Åâ"Eˆÿ<2üá™ä~CoȃáL!Ü›îÈg·2 ›„¸L&@Ìø†¿È YXLJF%Fí§Þ Ìò 伆Hö@ð ýWI/ì†@kŽáÓu"9 €Úòƒ.Ï„ÎýÚëJ«Ý×rÀøwPàê@ðÔ‡ x5¸M0¿ê>×^Âþßüá°w»š10p}ÔU5¯ÿÝ­z¯Kÿ÷øpÿýÅ­ÿ}}ô’_ýU¯×&ä4B¹ w%y7Ë‚¯“ƒkîúI/¯úýá2>0@Éq?<2³4ÏøA‘ùx d4ŽA£Ä?‘ù¼¾!™å9ˆH#Â;.Èü„â|á.ȃ”9d ©’‚rø‚q Ç‹Ç$ˆka+!Ž ±d3ÂÅÎä#×ÿÿö|Jz.š0ý3k¦Ó5§£sÓF á4b}cà (P˜Fæˆ0áØŠa0Bô0LŸ&a BÄHfxL ÁN…ø@ÉøA„Cd¸&@óÔ®69óùžCñ ††^N ¸Aï|qÂÿøi‰Ø:ZMƒƒ¤ãîÓµ9°t®$si6—m&Úh0’“aÁâý&Ò  ƒ`Í‚©±Ã£g›wb_hÛrçEÏš0l4Ò0Þ›Ažš7 4ozza L ÂW_‚h9 3 ó'Ù¨E™Dˆã9ž°‡ÀÁà†#À‡€ÁÊC.Èì†,Aà±È7‚ @ÿÿOï¿Âm¿§Òë·i´ÿu·Ø®•u¿wªAPv¤êCƒ<Ä»jí4“ƒ9°Í…A°è¿I›EÝè m‰ÜKÍp‚ £mÂb_hÁ°Îz0maᄾFÁºL*‚£aÃÐaÃdø—A‚ Ÿ„C/‚K!O#åù B.ˆ˜œgÂHLÿöß­ÿ¥ßûZߥôûô½7OÿIR]7W_ÓO½ÒÝzÛ¤âÇÞíÂtM¤é8aÒ·Òm&øN„“xpfåÔ'A6‘Ý Ú6áØ‘ê/QƒlHûEÏ£ Å„`ž©¦ƒj £Â¥t5ÿÖÿ_U]ï}ºßÐÖºßþºþ½µ½ºÓÓé{_M{]{­÷õ«ê¶¯ •ôZßí¤Ú»M¥i;m1M¥†ƒi8:Mƒ<}ðbGbG}°Ä»`á›0ômÿõýí4¿QñZþ׆?þ?ÿãC]†=}ô·þô5ã¿{ýi=¾õ{ú^—é+Ó^·M×¾ûTêÝ>úWV·ÓN®Óî“é?ÿþõüºÿþCN{˪SAýu×ÿÒKþ悚¿Ä+kýú}ôÂZI×îúÿOÞ¿¥ïøÿ¯½uûõuï«Ó¿×Vúß¿¿ÿÿ¶•ÿþçøï½‡ÿñþ’ÿÁþB#¨ÿüKŸÿ÷¬Ðõ¿Òÿñÿ¯ïÖÕê«ÿ‡ýÿýoþ»é~¿þà éø@ŸæÀŠOMÿ×6¿ýkô›oðVÿõÝp_ÿøØ?ÿÿ‹ø¹ ¢zÿþ\þÿOø1ÿÅǯzÿÿ¯ø…«ïÿú^û}© _ÿÿÿé/çD?èk6 ~pÚXGÿþ›ÿÿÿô0G¿üñ¯ÿÇìœ_ø/ùÿþÿòcþëèÚ#†ŒÝ~¿Û×ÿ·_·ûßäßúúñÿÿÁÿô¿ð‚ÿÿ×ÿßtçÃëû_µöÖŸímvÕµµ÷ÒÒÿµº¿þÝ¿þþ¿×ÛÛò÷öý}^·ý½/ý[ûýÿ$8?þ¿ýïÿ¶—ÛiC9Ô¾ÿ°Â_i”>­¤õjõiö­¤õöªª¿¶·õþ½¥ö“®ƒõ¾ÿé´¯¿¯þý¿ï!×ÿÈAÞ½ÈGý²·úô¿õÿî¿ã0A‚à 1/Ü aj‚0A±A<0@Â Šøi6“: ئ$à Ó‰Ž4Âi°ÂV°ÕUa„6Õµa„“gA^ž—m¦Ú¶·^ëûi:÷ûm¯ézvºýÕÿúÿïÿÿëÿ®þÂGA28!0†ÄwGÂfÔ0E`ŠØM†MKÂb˜L$à Šbh6«ÂA± ªA@ƒ4 ‰zìP aÅÁ‰tPA„ÛJJÕSm&)7«K½{l$Ø[öÕ´›¯l+iëí¥ÚiW¯þ¾»×jGˆˆŠ6,DDDDDDDDDDDDDDDB""  ÁP0BF8dp5A Á;L*oa4éUŸìB TT0ƒb¨ ئ(h0„ h6*%ðâ‚ĺ Šl$š †a„a¦› %«i&ÚV­ öŸëk¿z ÄDDDDTDDEDp`„A‚p`„!Á„0ƒDHÇ! Ža4ØTb‚a6)ŠÂ  ؠA„PA¶@âGáalKá‚ A¶’Ä?Þ’â"""""""""""B! !„!ˆB!„ÂéöZÃMˆA þÿR°8u¯ !av’uøŽÃ ii. BІñh1 x‹Xÿä /! žAlÈ<<GòÈn@ðAÂa xkq°žC$ÇÁÔ0˜tbyÁ½ä2L@1Ÿä‡òwKƒÙ0Òpƒ*dù ÚﯥüƒS<5ßpJhÜ2ƒdщ$…ññê¶¿pýaÃJìÿ¼qÿzKAkÑ!Èîä6‡ý×üy€<UÕ¯úÿ¯ºŠOˆ¯ÿ¯®¿’ÿÿ x7ÌØG2|OŽäœ‡ò/rs!Ç/'d ᇠ˜A<ƒá 2–Gd1a2ÈbüƒT`†3-È.ä5…r 0¤rŒp¿ü=u× x' ðƒµF1‚ #‰£°™/44,܃0ƒV‰ó=†ƒ2=  PðEÁè0ƒ*Ø `oÁ0A’ò|aÇò\l#š(Ì)î@½^;/2ËÏ @ˆ!›d² Á±È;P9hï×ý‰q0¡„A‚m&ÄÂhÛ¢å‰hÁцÐA°fÅĺi£ ¸g0ta½‚‹M6ÓÄÂhÃj¡Ÿ„ôojžžš7»FÓh0¡„?=HJa2^*†ðƒ%Á2sh3Ð2g!f5›ü‡â×ÊAGiA ªë†ƒÂ »[½jû†tžœum-[Áà ‰é6ªt›Ã@Ï1#º¶aB ¤Ø:/´› K¸3al:ļÃê“aœƒsnŒ:0V/P # é•ιé£sFöÈ;MMÄjÄÂUiò|˜EágÌôÂÁ øÏGA±›g‚Èì S0B;8x)ÀÒåÙ bõuénëÖ½=kÓ~½MZÛþ·ôÓ{ýklU%{Mé[êNÖ“ÒN“í«í†xñô“`òêì$› KºM ž†%æ ƒ6Œta4mè¼Á›&ŒµôÂ6ÛJáž¡S £»æ. „«4H(A‚ sl `Í™2¿zwýk·îµ{}÷­oêºÞŸëý´©º߯ޚۭ+êÒ×õé÷¥¸ª~›i´­m]„ý®!ë«Kv)ðÒNG`áÑ~•lP›‹ì8b]ºÀÃûA:0l°´Ñƒa‚MS ~þêêÔ1kïì{kV¿ý×ûÿ¯ÿס«ÿJèkÇ}_w÷þæïI=5Òõî’÷O}C`àߥþLÿÉBçÿ¥þ¿ÿþ¿× °mþ;u6 [ßÖl!?„lí¥Saƒa·ÿµúÒþ¿‡‚×Çùu{Ð]×±ïö/ï°÷¯·ÿÿçpÿþ–Åÿàˆÿë|~Þ–MÈñ/×ÿ×÷Ýö–Åÿ°Òþl5QÿÿA¼#‡þp6¾ËîK×êßlŠ?ÿëýjÙ|„ÿò]òÿýÿÿÿòý/—î±_×ÿ×ÒZ ÿþ!¥ÿd?h/ú÷@Ÿý/¯õº'z÷V¿®¿þßýí×ÿïÓdAöÈþ­‘¿ÿÈG×ÿÿß!Øô¿Èƒ¯õ£Ÿÿú0}´ÿù1Á¼éù1ý/]$k¯im¥}ÚöÚßii¶­¥®¿kÝ_kÿéÕ®½¥ÿÚ]¥¶ºM¤ß­úþ´ßÓþÙíuõÒÛ">Bÿ¥þB©oÿÛëÿÿë¹7[Òâ‚iÔ5MŠ´¶F0ÓMˆv¶FlS $Å-¦›a$ã´› wý û¦JÚ÷ÚN½®ÚM­­­­Õ¯ª½®÷_i:_ö·é6¤ïÿí}Rû¯ÿýG™?þ½dÇbD üÆh7—Ä ƒj©ìVa6pER„Å;LSA0ƒ0ÅQLP  ÂlHõ©|S6( `ƒ8 AÅFÅ1Ä«i¦©¶÷TÓmXka>Ý9ÐKjÚW¯ò•ÛIuÿºÿö×H”kÿò>òOD8é/†E!&88eÁP‰7 Â ÀhL!Áaö ! &A„L ª¦˜\Þa?Ùœ Š£3A„ãiŠ1  ˆLSø`ƒHøl0ƒ`ÂL0]m5Ni°×î–þûJÓ¾ÒmS]u ¼%¤žƒž5ãŽ"8ˆˆˆˆˆÐˆˆˆˆˆâ"""!npÈ0‡ aai„Â}¦´Ø„Ä,  0„lÿ6!(@Û‚0„0”S: &lS â‚w #T8;¥B½$µÄDF„DDDDDfÆÄDDDg¨a†.2<„1A„\ i„Õ¦ S´˜A±Nô×·#ß!«[gKT} B Á`˜L ôøaz¤–Ÿ3ȯI/§Ö)/ zKIKX@ÚÅ*«¯é)/à Z@بa$›I$•$±a1CIj–"C%`0CQ ,DZÈdä2 ÈžC$¼˜ä. ¶ z 9 ¸4Â!à¤\4B@2†@IÈžò ㇷ!’F4njÛAÓ|†@k9°jâ ÷×ù €\t’X+a‚ N;àá×!¡ÁHk´»Z®ë@­¿ù €dw!ǰö!‘F>>—ì¸ ÷×kÖè†@59ÌwW×ÿ]èH—¾×ïäœá _Zÿoý|¯k_×Õ×_G xgÂàA‹"Y("Á bdÈ+FCÁ CiÈ.ù !È`r P:ðüƒ[öéúúþ¾2>2\dù0A’™¼üO ÁD†x d¸&~'2ü0@ò "Ì!fDò> "€XPÄ‹ä?‚'3á–äH#²ìÿ ¾.l _ 9IJ]Uô`ÜHó‰}躣m´ÂâÓF °‘†Ñ¼hÃzvÓHÃhâFÛFàÓM˜FàôýƒF&½àš7ˆÉøPš6Ÿä¼&‰A’ð† g°d,òøŽ Áó7›Éy˲/"‚›ˆ'hÃA0‚q a aH4A/4ÇTýWVÃMƒ ÁÒÒmèæ$wW ÀTÚAÕ°è¿i¤›A«A81#¶‚´› HæÁ˜¬†6‚ †lZ3zÑ~‚ ï±lø‚ô`èÁµMÿѼ0˜L#xki„m0ÅðL`ƒ$GŒþA‚ †lÉL¿%2<7„H#è¸fŒ  œ2ãfÂ;.È2ZÄÐ9 ä3º~ôÝ7Õ·]4ßéZN“±^Þ•î¾Ý:ôôß°ÒoÝÒ±w zM÷†xØaO\‘Í£gØa0ƒ Øb]PMƒ6Kí Ã@ƒÄ¼Ñ‚hÛ£ †p\ZhÃhÜNŒ6©º0Æ´GAØLó: ’ðžd ù?A„Hd|`ƒ‘|S‘à§²á >þû ]ÒëÿW¯½¯­ÒzÖéë[ÿ ö­ÿïT¿õõûï]=.﫵«ðƒtû†{iZNààÏ1#¶“i;L$› Hî± …Á› À˜A¨˜MѶâÝ‹ $a½B0a£sÕƒPš1~¾è}´¾·ÿ^º×õªý¯Áµëýÿÿ§÷ÿ½×髺«®¯­&÷ßý[úiÖé·×i¾ŸzÃÔl+œ8pÏ`’l:/½ÒpfÂRpļÐOŠ«×÷î+ÿ¯í¥ÿŠÿŠ^þA¿úÿÿ_ÿõ|7ú÷_ý|Wÿþ¯Òÿëé׺¦ëýoþºmëÕ¸ªWÖ´› ûä ïúÚÿ!çà ý”ëÿiÿÿÚ÷àßéþ¿¯ÿÿÃ×Ú_îš_ïÿUÖ½_¯ý»ý§ÓëÿOÖ×é~·W¾òÿþÿà/ñ¶”uÿüä#ºñÿÿò€#µë^úÿþ¿¿õþ?Cã© ·È8ú¯ëþ¿úÿþ@ð\伨"<B~@Ç”åñ>'ÅáS/ÉyËò<§"Ì‹fâ|Cù ¿œ()ü‡òŽäN!—Ù Ä~Oˆû!8ƒCŽl#²„À™}zÿþ¾¾Œ7¯„m½ƒÑv5\+NŒAÓH»10š á£ý0íÆ½¡ EZvz —Ér  Ÿ§("€[ ³áÏ„>FÅ0!s6ৃœ¿ ƒN1„."†w!3!²;õÿý àèºf°t½'Ò‘ûL$› 4tƒa‰ÑwA6a†l %êA´thÝA6L$oF ļâ]Q…F ±aœÁÑ´7†½‚‚eøGN´Âó8Ï>a‚a2\h¢=<¿ Fx!ò6)±a€§‚žË"89° À66͆c®Aw ªÿqM}'¤ß¾ì{ÒO×­´Å6®“»Óu{«iIݤ¯Jà °Â B ¥až6Õ:6‚t›:/›T_h Ú9pÓ4ŒFÛFv› Õ7¡þ¡à …ðL#xhÆ0ÅðA“ð™^O‚ °äüŸÁ ºÁ³qÁŸÜxÏåáCÞÕzÖ·ÿÓW­·ïO_V·ôêêõ{«~¯«îÕjôúºMªinïXIº}Ý¥m+IÁ‰Û HýCèÙÁÁ˜Ø´‡ á› H6‚‰·EÓ+˜˜M3‡èºamŸ´øTш0¡0œ%è Ÿ^?¿ý¿ã×ézßZ¿¯]~®––Ú]¯u{¿uþº]~ÇLU.“þµu«uÿßOûÒnþõ{¤á¦ÃÓ@á‚ ¥b“ƒ‡KI´¬€°ÓA›‹ô› KÂ^a› %Ó‹–ñÿ¡ëàÇéµ§~ ÿ§ÿ[†?ýý}ýØï´¿ÐÐ÷ÿÒºÕtý5úÿë_úº¿××N“ìWZ_ôìzNÓOÂëùÃDëý¼œ_ý­ÔÐý_Õ™‹_öé?_êµÿgÁl7Ö×ÿ¥íßþ·þ/ûÿÿþ—öû´>ÿþÒÝ~Ú]5Ý4ý}=`¿ü{¶’¬?þ5¿øàÐþ=cÿÿø:Ò×ßÕ.ñÿèWÿú ýÃcßÿ¤ýëÿ®*ÿÿÞ8FÏÿ͆œ7ÿÎw·ÿ͆oÿŸˆøA¹æG××ÿ÷÷þÃ_þ¸ÿyuÒøÿÈ1MõÿVfÍuÿÿõÇßzî¿ß†:_ÿàßï^‘ÿÿÿ‚èGæÃ;Jlÿ_̓ÿýÚWúÿà/_ÿÿÇÁ×_Úÿ¦U?´¿úúöKòc÷¾A»ƒ÷Ú»yÿï^MëÈaÁßÿÿÿÿȃ‘óÿ͆?î“üØ1ü#eÿÿÿçv¡Ãmÿû×üÿÿÿò€È -ÿ~ýqñ[ÿý¯ÿáÿدÿÿ Áý¿ÿýûïý/ÿÿÿ¡ÿí¥ÿ8öÒ_ÿÿoÿüŠ?ƒöú{Y;Û½ƒþÿä#þBùûdG[ÿé²×~¿ý½x¨®¿òo×·ÿßù7ò‹„r-ÿüWû_ûÿÿø?ªë¶»i~ëí­}¯í«×Õí¥nÚ¶­¤×ýZ_ëÿy8×"½‘G×òvýß\ÿ¯ëþÿÿØ{Ö€Ëý_“}¿¯ÿ&?ä‡"çií¥l5V§ +OjÂOi=~ÚV½¯¶¶•¤Ú¶»im­ÿ¶—v•ª·M¤êÿÚù:ßµoþ½ÿȯ¯ûdGþô¿ê×òw"üWõûßö‰ q‚ ˆAb†bGîI†0ƒ6)´@â‚ lT5b˜†Ål$›iEi°`’¬v•ëjÃJÂêé6šûWM¤Ú]ºúíÿí¤ëézV÷Wÿ¯þ·þëºÿ×ÿ†Š8ahCYÓ#Œ— è0ª^„þÐb¶–ØRø„g¦ÂiŠA± m˜A„„PEQ ÃIŠb¢]0ƒ`Á&$tA ‡ÛIІÖ+mÛ ééÚÚ{~ÚÚWéÈa§í«k×_uþ¿Û’|DDDDDDG0„DB!„ Á4Ä Âi… ;bšûªbš P  Á‰@ƒb]0‚lBb]qAÄ(iXJ)4ÓM†ÃÂj› (a+ ýºßßý¤ž–"""""""""äpÁE„!„„EpfL* 0 ¶•©|TS˜Ò  튰„ Šb˜ ƒh aÃHaqAiÚù3zÄDDDDDDDDDDDG Ž Ç› ˆƒ0˜A¬x &!UÛI¦pGŸ¦¾2á""#B""""",/KÕÔx®ú x:[A^ŸŽ„´±6*+h&"?ÈÈ <@Ì5ã! È,9 mpLàªäG x*yˈ-îFä5_:i‡L&ì#{!’ ¡ )„Âd YÃn„2–È5Ù#hƒ`ïïè+JôïL#ÈA•¤È6y €8â†ÿ½~½d5Ç C²ô‹hÄ,88r‚”`¤ Ç!£ÿÅ­¦º_ïI²‚–îA¤wPàé¿®85M-%<•zMª×þî¡ÿüq¿i¦•¤¯¦\µîB?éúõíã¿®?[úä_õÔUoÿüÈ7ð‰°Ø¦Å?‘ÁDüCùè2nE¡Ë A@ä1d ñÍÄN!«xaȃ¼AŒÏ„r D ¸@®/ÙqÕ;Öµý_Â7<& ŒCÐhÄÂ7Á 0ŒLŸ“â~˜Aö7òü&Ëðƒ'Á8†N†ò xL É̽B œÍæò¼Ÿ „¨0E ”Íæð‰Èœ9öH#è¸dt7‚:gÆyŸ l‰8Ì9èŽ !¤9ªÿÿúMƒ6Pz9´›A3Š—©68t]fi„¶Ýâé˕ѶؗÜôÃ4öŒ6Ó9ѹ´ÐkÓFÙ¾¶ÝƒjŸFÜôb„ôÂi’¢š0…ö~'äC‘ð a#Ã63qã<¤ä\)à’0ž]Å{!È3m¦ö'§JÖÇa6“nÛ¤ÛÕañT“aÒp Ðo è¿VÚh&ÚjÃî“mPl3b§h4 ب6•ƒ6 Aðŵ†/}a£oþ¶ôõ A Ôü´Ñ á0“ðƒ*eùE™N@Dz„,Ðg‚$žCæA¡È8\»ô¿ÿµzwÝoéÕÛIß®¯ëzb´ºÒvî¶›¬WÒm»Þôºúfœ3ÂÙ§Ï„¤éðàô1/0Í…†Ã;£±Z7£nÀ‚Ѷцõ ´aŽ!áš7°Toa †Wš`ކH(Aÿ}öõÕÿ_õm×ý ¾¯^Ýû ¿ûÿ¯wÿú÷ÿ~ï ·}ow[„ï»LBou~©ã¤ÚN#÷h= ñ½A3hÇ‚mvƒ3À¢ýáŽÚÿý?ëlRM ~÷÷ZôµÝþ­ïþ¾ÿßÿ¿ÿ÷ÿÿ«Õúzµn7Õ×§ïWt›§~çàˆýf€cëÿÿÕ«Xÿ4 ÿþ¿oþí.½EuíiXJ¡® z¿¯õ¹8-~¯ú¯Õÿû^®šëß¿õÕÝ÷ÒoÖ?áüv¿­ÿý0ÿúÛøô¸ÿõò”ãåÕ\Kž<ÿÿëõÿÿÿIú÷_þúÿ¯ûûM/ÿæÁ†þl¥ÿÿ<Ž$ßûÿý/o÷Eú_Ý=ýº½A}ƒÿÿ®8}yOÿÿ×ÿõÿK`Çñ_úÒÿúÿÿýŠýëøB+þÿû}M†͆wßîÚ _6êéaÿÿ¦òÿð_ÿÿ‹ÿøþ›ù8fß “¿Ó÷uýÿ_&?’‰ ¿ÿôÿÈQÈ·ÿþ¾Ú^é>þÄ ‚ýÿÐ__ÿÿþ|º1µôlÿÿÿ2>MGŒùžØ@Á#áÐz$ d|l*…÷~G„vB~n!›à‰Ã9øû½~¿¯®«ÿ­Ëƒ@²òÜ‚ãªúú꾿ÿê¿æ¡x d¦y›ÁÌöH ãO‰"~AOä,È_"á°ó/ˆ7ò'‘,ÜOˆ!8ÂJ ²/c a¬ œA‹Lƒlf á2,˲„Ègrc</__o__ÃI¦Œ6Âa4Œ‰|0Ïý0ÏCôѽ£jŸ„nhÄPšhÆÑˆv ¦´?M2 ù½’äÑ#>gŒôôAÉñ“ô䃄A„.2¦_ È?#ãa*#£<ŒDƒ›ˆ!—Ù „‚"ȸ@‹ÿ.0>¿û‘ͤۻI77M‡l ‚oFÎ ÀQ#º6“aÑ~ $ÚM†%æ‹Ôƒh' t]PA°Ä°ŒM‰i7¢ê Ø—t]bGš0L3ƒ£ ±mFÍaÚ´Ò„nzhÜ+FðïÂi„a4HL ÉpAXA³ £ a¸"|ðÍÇÂ"‚.ðSÙp.p)À ØÍ† ‰!G Ýȃ…¢»ú [wíý'}~¾›[IÞ·ªTž˜¦Òov˜­]„¦Út›—¸l1]] t› ñ°Ì<Ú ÒpÄÚk¦Ã¢ý&o/¦Mƒ6 „ £Ѷôa´m°Ï‹ª6Þž:hܦƒ[ ¦ àƒÞ1Œ  —A‚ Fz ˜Ïa‚Š ŸÈ _ÊrVE‚ð‚xOÒ®¿þ›[ÿêõ~ºÖã®—íªu÷ë«ëiº¶+®©ê÷õzúummö÷I¶+§i[êt®ŸIÒ¶ŠÒ°Ä»ñ#¶“`á‰Á›—˜pÍ„ ›AF £mľѣm† Ta‡¦Ÿ¦¹£‚a¼Ix2[¥ëvš_ÿÿ«õþ¯ô-­jûõkø«Õ>ëãþÖßý]?Oé=5ЯÒÞµý:ºÞ·Ký6Ó}:W´Þí;ªMƒ ˆN“mEö“†$v%æ°¢^ ›A—šA›[õÿúÿõýþŸõkêµØcýÿÞõþ>×ëÿé_x¿Þ>Ý+ý_i?NµÓK×Óï×ôÿÕî—WM=|U+{Nð›ýݧ§#°_ûEÓ¢³õ¿ÿOþ½5½´±«ÿæa•¯ß¯^þ«ÿïïþ­*ëÿ¿ÿýo÷þ¯ßêÿW_ÕþÖöš­ª~&ÿ§_ø¿ÿÔå¯þ¾?ãÿõÿŽÿÿ‹ë¿È”ÿÿãÿÐÓiúú¨ô·ÿ®ÿÿÿ°Å&»ÿüVé¯ÿ·ë«þsïO„l¿ÿüØ1ÿæÁý=üà0ÿõý/ëðG¿ÿÿþÚQïÿÿÇ×ü0¿ÿÿ§3ñÿÿÿõõáß_ÕÿÚÚI~õúÿÿÿÚïÿ@ßÿÿ8 ýÿþl1ÿœ6“iÿ_ÿßüÿÿõZÿýzs@Ÿ¿ýÿß}.ÿüÿúäß_­ºúÿ!‡"ßÿþý“ÿAýþÚÕ1_ÿó`Ðl̓ÿÿ®l¿ÿüà0ÿÿëÿ‡ûþNžß¿¯ÚÿÿÿþÚñ÷ÿïÿÿ]þ¾Mÿü›ÿÿ^ƒüÿÿy1÷ëÿëÿþ¿ÿ›¯ÿÿ6 oûKÿoî·þ¿[_² û[ä ÿí‘G×öÈoýo߃úëÝkûÿÿd ýlmƒèÀ7þ¿þÿýÿïÿþL!‡"ßýÿÿÿàßì0—¿ßº¿­«ÕÿêÚ½mZ½×û¯ú¶¿½úúý×ÿº¶½ï¯ï_ûdGÈGìˆùÿÒÿíÿï÷¾¿oÿü›þC5È‘ú¼}¾í*«@î›JÂv—¶–ÚwûiZK¶“j¾ÚÚ^ÝkÚV•ý¯u¦Ú[¯v¾Ú_ºv—µkßþÚ[¥~»þG¹ûÿþ¼„ÝÈ£ÿù?¿ÿÿ¿èÀðƒ0‚ 0ÒwbG²ø¦I‰t0A±AÄŽƒŠ ئÂAiŠm$ Ø«Pƒ ¶M4â˜a$ب‘ÓX"¡+Â5m$ÖÒU†m.•µYÐ=ëÒöÒµí[KûKÓ_´ºÿýv×õuÿ_ºÿý² ÷ÿZàÁˆbS …A„„BÐd|pÂh4íU4¯iˆJL0 éÃbi„ƃtÕ i1LS´6!A±AlS튻 $lab˜ ›b˜¥m%OM4ÛK´ÿöý´­&·]m¥î«ú_­ÿÛøˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆâ" Áˆ0A‚`ƒCE„" Âdpnœ0©ºbt©´MŠj‚ÅAà„A±AA„  alpÕŠ´“MXa-[­VÚ¶•­ü†#]q8Š6/D Ì`  ! !ˆ*¸²8: µðж•…/ˆM(  Å6! ab0±PÒ4AÉȆ[¥­S¤""""""""""""""" !Â7„ ÂdxB×l5Z~Al¢´³>"""""(Øâ>–©%é¥Aø«Õ+KI/hlRL0”WãL!b«¬DE°–ÅcþC 8†Añ €(‚†ðC 5Çòî ¤ <àã’â~CgÉâ ƒ!ˆddh|:`áÁÂn#x}UrÜ`ƒ È †@iöC Aò ƒä‡Ý÷wKxp馌Mõ"Á €mAl1[ïÿõ´ò#éd08pgƒvä ì†@i¸ ÊŽíE ~¾ÿþ¾ï†pNš7_ÿèwÇkÝúpùQúÿþÿþÿÞ‡Úº_]W¯ÿ#Ö¿ýÇeÃ$6릿ÿêõëäŸû\r† ÜCù$3c83qÇ?´fÂÜx ”ÜCùÄ8åÙüŸ/Ä$È1™vAð†nd.øaÈL ¼f²„ü¸ OdvCCCDx,rp¿D(äG×O_ò1ßðM0ÍSÂaB§Â7<#{ é£{Þ> Þ"¬ Ér &ƒÂU¡„¸&Wáaá'2üa d¸ Â@Â'9’™~W”"YvJ(¸SOeÁ¹áA®l ùîD²ÐCCƒaòﮫ†$vÒl<ºƒ6óÍÐl°”l1#¶ ØA/´h&ÝViÚ0WEç;hÃhÜ4m:0Þ‹«Ä¼Ñƒa‡<ÃA­U6Œ‹EιþÏí;FöL¯³øA¡„ÐhtAê ƒ%2ü® 0F‚œƒÜ‹,Èy„1˲,È1„°‡ÃôD²!®ëí7VÅ~ï]:½}´ÝBt›W[Õ{lSÓi6“¤ÚAÒÁŠÃÂm&ééêƒ9‰ÚÚ¸3ÆÒt› Øe°Ta„A‰ôl:.®Á!6Œa³Á CÆÏTntÖžšaa¦˜CÂ7´o¦%á0˜CÔB — ƒù> å8Dšs>øCÁ¤G»8 Ã!³„4œ„¿tžšþ:¦ÿuzúoêâ©õï§­+Iÿ×­öý'¦Û¦¾Ÿz÷¦øÖúiºWb°ôõté8i‚ãi7M†š K¸b^ó§%æœ:6‚ Ú0š.¨Á0ľѣÕmµôÑv:Fj˜Fæ‰ÌðMgà„ Ï™é„WøÿCÿõÿZÚ¾6•^Þþ·¿ãÖ·û´ëOëý;}Óþ¯½_Ö“ô÷TÝ4êðž›uuÄ1Z»LPzxÒl<ÁÃ9´ƒƒ6 HæÒm&ñ#ÐfÇFÇ}MoõºÿðתÞÿÿ׫U÷ëÓצ¿n´ºÝ/ëÿ·ß›uô·ûÇÿOWúo¹å[~º§ý×û§ßºj÷Õ¸ßi÷¥ë¥I·i¼:Ù–“ëÿø‚ÿÿë÷·Xˆ_¯×ø1Q¯Ó÷ûë×ø1ïß¶ÿ¶¿ô®ß¿ÿ ÿ¤ÿýÕþÿÐýWóo]5÷÷Þë¯Óý>ìV•ÿ_îE?ýÇþ¹ÿÚ'?üÿÕÁ© ?“ƒu¾úÿ“¥-ìÌ6ô½ý¾ºk ~“]µûÃÖñë·ß«¯¾¯ÿö•ÿœÿÕa?ÿÿý?„mÿë­¿ÿÿm/ãöÿ¥÷d"7øàÿþ=Ð0]¼KŸþ ºÐ…þÿ†;_¨k÷ÿþ‡ÿ¯ÿÐ_ÿÿ6ý¥„ÿ6 >l4?þl1ÿþ¦Áƒ‡ð߯Î;þ°Ž?þÚÿÿÅÝX/þ ~AsúÊSý4 süÿÿÿþ²CëÚ¥ä‡ÿ\ÿþþ—ÿþ@¾ÿûuþ‚üÿ/a= ½~l3·ÿæÁ§Îÿ„lÿø#Žõ‚8ÿ·ÿþÃÁCÿõþÂÿÿëëþúûõÅuýûîAqÃõÿëþ—äÜÿÛüGJ¿ðDrÿÿi{ú ÿÐ]„´ø7ÿ·„lÿÎ ¿öëøÿÈGõÿÿ÷¯ÿ²}"ÿý­ƒÛ·þí÷±þßý‡Òþ?Òÿ&þ ÿäßýßÿµÿô¸­/Üÿòô¿è~½´µæÃ 4¶“iwëõ¯ö¿ÿ«û¶«ÿM‘ýzÈ£ý­‘^«üˆúÿÿÙÚÿÿû!·ëÿ·ÈAãÿÒýïKFÁ~¤ÜÿòndÇKýþþ+ÿºmoI´ûKNÒÞµ´½´®ºm&×í-[Mº½µþ›VÖÕþí.þ÷§WKÿOÿu÷^ÿr#þ×ÿÿkü-÷ßÿßëû¿ý=|l0’lq.ƒ ÁÒa„c4ÛI4ãUa„›I7†¶?‚*†m[ jÃK[I´´àŠ„©4öÖÂëkj¶ÚÖ·kí¥¶•÷^¿i+kÿúÿú¯¯÷’¯û}W÷"ƒÿè/þmÄ ƒi… éŠbÐA±Aƒh aÅ( éŠbGh `ƒØ„Å1.ƒb"¬$Å rð¦(1.ƒØ…„A‚ Šb]0ÃH6@Ábœ  [ÂÇv´›Tí/mSl%Ié§ÚûkÚÈbuþôö×ÿÿ_µmIÇþ¶¾Bâ"!ÁŽ#ƒ!¢70B * A0ƒ0 ¨0¨28€˜A„Âiê^Ä/aRØAÅ4`ƒhaŠŠb@Ø A‚ Šá0ƒ0A±#àÐa6$tm„cÃVF5ûIBv—¯ii6¾ÚV’zÿ4ûkâ"ˆˆˆˆˆˆˆˆâ""""""8ˆ†`ÂÂdx „ ÂÚ¯ý„Ò¦ÖbªÂÅ4ƒ0Â*n a „@ÂpÕŽ$|M66%­®›: A¦Ú_¤ˆˆˆˆˆŽ""""""#<؆\abHˆ9<¼!0˜L-0 S„M0ƒ¶$y„ Šò `W 3ÈÈd;é#""""""""!ÄDEœp /´´“H /úýtµT–´Ÿ8…¥ªIW†ME6’M®""Ó•¥‰ €YágÒÄ‚ÇòW €'ò äÃkÈ ASˆd?<8‚®`é¾CD^©È!’È&n¡Ã¨869Ášy €UŒ†“„Îäœw! <@ðTÏ}ý¢ #»h È+`飴ÓÞÔ†@ù ~ö½¯¿T`Ÿ<\Àÿ¥úVÚøøúþ“¯¯ëäGë x4» °ÿßé»×c ­¥üàV:ä3ÿÿÿëõ¡Æšþ½ÿý}Pzúúãþ+äGdˆ„4ï ߈?Èx"ñ ðE‚ dàÃ’õ]×ÿ]}r‡ðƒ0A’ð˜C/ !(˜A‘ðA„E®ˆeƒ/ —³ù å9 ?4ÍÙ¸‹Ä$óùºpØG2¶G„_8äO! SàÖ|!˜I ù áxÂyvCAUÈb‚ãØ8]Wý‹F7.M‰}£ná&Œ¼ºhº£ôa4åÎŒ0õFÙ½¨F Ä=4\ÆÓ ­¡oL#l5M˜P¨Ä-ƒC´mƒ<&o/ðAØAÖ‰ ‚A§Dƒ%À¢F|Bq$ìŽÍÁŒŽŽÎÉ1„=m²g‚#`u §¯ƒ<Ä'W ÚNm[zÒl1 ‰é:M‡‘êNE´]w ñbG6“»µ;ƒ×9ºpĺ¤ ƒ¤&Ñ·l A´mÑ‚èÛÌg‚m֢ѹţ èÜí?F÷‚„ÐyüŸ Éz$GÄa[ — ÈY„OfÆ|S‘ã< e7N!µ„ˆg€¤#Oéß¿Ýï®7·i«ßv>®)×{i÷þ›t®µvµÝéÕÒ}[JÕ¿ÁÁõv’qH°‡¤Ø3ͤØ3al1#¶ ÀJÆ%è`ƒ±#íÁ›¶Ñr„m´a¸´Ñ†õ £jOÓF0È4ðLd¸&‰Ô @e’n!ÿª¿§¯ÿ¦¾«õºkz®éû÷ê½VŸºj¯ý+Þ«IKßþ®ºééÖõ¶ŸÝ„ÛNÐpøzoz´› ñ‰ÚM†lW#ôƒa‰vÑvÃ6KÍ ÛóF ¶‹¨gPÁ¶Ÿ £ÿÿ_¯ñi}íëÇÜ_î»~×kßÅ_íÿõoÿÿ÷×J·^›IýÿÓ÷ÝzÒµuÕêµ½Kj+á6–ÂopÅn•†3D»i7þ!ñ_¡Uùðlÿ¨þ¼1¿¯Çǯøcéí?«ëÒû¯Wß÷¥Óû^µÿ«ý}»½;ÓKtÓzZ·ºÞõ¿Ó¤ßø/þCÓò Óù@j^µ¢OßšÕZþ»!¥?Oäå÷ÿèwÅ}4éÿíï×ÿÛ­WÿøïþýuoÓZßÕ÷þåÿÁ·X#ßÕ¿Û¬ƒñïý‡}¯ÿ‚ñÖÃÿÁòüi ªö¿â\ÿÿÿíŸ («Õkk]ÿÓ­ÿãÓýjÿáÿôØK@üû]ÿÃoOÿøFÏ͆·nx¿ú‚=ð}R¿ÿü_ÿŽïû_¯ÿÿqZ¿ïÿý/ÿAlV–¾ ë± Ð_ùím/ïÐ_êCýÿ _ë _8†tF?óµÿœÿ„zÿÿÿ°ÿþ?úÿXû"SÖúýê¿õÂ6 Rßɸ;ú8¥ÿ“p÷OÿÖ¿ù!Á¿\î—ÿ„ŸŽ©uõÿ×úëÿÿ͆×óaµÿÿzðG/_þ‡þ·ÿÖ‚õÿÿEÃ=ü;Wÿ¥ÿØwýKïú]]¹!ÿÿ Dù!ô¿÷ÿü‚Žÿýÿëþl6´/ÿþp2Kþ¾Úê¿ÿÛ“{­ëïÿò+߯ƒßù;édWýÈ£ÿÿƒ¯¯Ù?þ¿ë׿ÿù7òp_ÿ¿¿&?ú¥ûÿõÿþß3ê¿z þýmÉÝ?í×_¶ºßk­ï߯k¯ÿj’’÷[Iº¾Èÿ¯ÿÿõä ÿ‚#ßÿúÿ¿þ«É×’ßý°é°Âka@çQíþÒÛIgQÛNÒ^ÒW­Uµî×l%iÝ:MÞ•ÓiZîº~›i6¨ißí¯ëî—ÿkÿÿþßnÚßûdGÿëëÜ„õ¿í{þðA„ â_@ƒ6%ÐabØ@Ø‘úaÛ  °Ä‡a } lPMă8¦!à Å16ÂLT0ÛÄ5†Ú6Ò^Â_iZMÕ¤Ú÷inž¿ÿëë÷º_é{¥ÿýýkëþ¿ƒá‘Á¬a†XA„â !ËŒ¼)Ø„ApÁ o5LNÕ~µa5a¦~Ë¡ ¦´Å4ļ‚ ¦g Šv˜¯b6*)°“a8Ó†´v©¦ºí„¶JM„®“[mWmný}µµ½ëÿmqFˆˆˆq`F"8ˆˆ‡ˆG ! `ƒ0L!a0„Œv ¦ò»[†ÚLU0•6‚ ˆM   a0ƒ0A±QLSa˜M´‚j¬Rià ZPÂm&Òô¿KIôŸÄDDDDDDDD8ˆŽ"""!G €Ø†¼axa á± 4  ƒ0ÅA6%ø@â›H li« %¤éuþ"""""""""!`°Â`ƒBÓ©¤ÐaŠõ×ÒKq!GÛI']%Ôv ü”0‚ÒKðă‚ a/ˆˆ„Å®?ä ÃñÃ~!,<ÈöEŒ†K…"Â<@A2Îa;Ëá›Ä Ç!³µ°yì÷4bhÞ,'iä2d äÈ\@ðÒì†AA|ˆ;ÂpäGwÒÒò cƒØuL'y €kß«ëõë×ÈŽù§ xL˜mÿãôÿ†ºY´šê½ÿèà]ò |>¾½[¯">>>ÂkõÈdXïÚÿÿëúþ#þÂW××ÿþ—õ[üP¤ Çþ·Oýuÿ_üà¿r'‘&C(ø¦Ù³63qàæibd$‰aû ÓÌ…Â ?åà\ÖCAï!¢Ë†Œ.ÈkÙi/ A ð™ ¨ÈqÈìˆ9 ƒ®Lu!¶ë^«áƽ„¨Fö& 0ÃÞÁ4Âd¹<Ÿ"F|Ï0dèDƒ ÁyŽÂA™³æ Áü3x ÉxA¢@02s#àƒ?H(GÆ{>Ï„>‹ælS ࡜r'þ!lŽa2ðA®H!‹.Èhr×_áI´`pfƒaåÔ8bG3} HóF6ÄŽÞ±-„m7>‚ †ap ‘àуhà \èÛ7ØM#sFæ×£sѹéÒ7=¨Ü¡z©¦Œc &’6Dˆø¡’ä œ˜ `„ 2> †ÉžfüÞCñ åÙ‚—„ˆÃAìƒñÂÓ ÐäG ï¤õ÷]lVíIÇv˜„4Þû‡ êÚO¤ÛÓÐum&øI:M‘Û´‚t› fÄ¥ƒ ›$sa› ô™¾“`èº9A› z†%á/4Æ%ø3aLFÌÚ0ªŒ à´m‡¦¶³}ƒÓi¦­0Á“äÂ7‡4c ¾0A„A¢F|Ïa„ d y)“â?"Ù¸"žË†ƒ. p„p= Gõïõnšêû[¦®Ÿÿ^¿×m.®­_Kzþ•´Ÿ}/[¯¿¦Å'Šwè6Âié݄մ± Ký·IÁž6éZNE´a‰vÚi¨‘ÝØmTa› %øH6‹“bGm&¶Â6Øg‰t„`Ú0à al&ƒÑˆi„ 2¾aÁ#àƒ!ý{zëúñýwÿïÿõ»»KÝ^¯K÷vÒþÿþŸõûëÒúÿßJ÷j—úºâ©'«uv{Õ6¶Åjü ÚZNm^´›hA‰ÚM¤Û†Mƒ9°Í„:¯¡¢äÝL#˜øb¢?­×_µÿÿ^“cÖÅU]ká(cëé]¥ZÝ__ét?õ]¿_õâÿ«Ó´×÷í§×OMS}tß×ëÕý4ëi~­×ú/ä}"ë¢í+lB  ƒìФ4OíÞ„¹ÿÿÿ4Jïÿ¬Ì4}ëTÿñÿñ_ÿúÿŸÂÿªÿ¿Æ½ô¿ô·_ý×¶¶þµþ­mÒ®Õé´†›ª"=ôõðð_þð_ÿÿô6߯¼[kÚÇÿä þÿÿåy^üAÿ__zßÿºÿûƒkV¿þÿ{ÖÿmÆ4¼R®­_ á?̓ÛH#gÿÿÿœçF¿þq6Ý-ùÄG—¯ÿáûi}{þíÿÇ®AÑÿüwýý¢éÕpʧ3Mëµf‚q/ñÓÿ××Kÿƒ‚Cÿä ¥ÿþÅ ¿ÿÿü«ýÿ¦Á¶]¥B3`Åÿ›>/m/ÿýCó€»KãÿýOWKÿ÷_Šþ8~ ¡ýWmñÿ'öÕ _üàƒƒéy!ðD_„|*ëÿÉþä08?¢ëdÇÿ×r ä[Bÿÿÿ’ñ]~¿¹çþ¢©ÿÿm/ýêÿ›3`Ñù°ju„lüà1ÿœ4½¶ýû~½ÿF/ÿÿþõØot›ÿºýµt`±_ÿÿ¯èðù7ÿɸ?ø"éÂÒòcÿÿé}®—ÿþè/kÿ¡œ õ›>õH#oõþÙÿlˆ?ÿ§_×û­®Býƒ«u«ýÛ×ÙÛ">½‘GòÿëÑ€aÿ×ÿoÿº0õ÷ÿí£`EÿÿýÉ¿ä3GïKïÿÚ¿üƒ½ ‚ ÿûõµ¿]}ÿµï_íµº$þµzêýÖþ»½î»úÿýkÿúÿä õ¯××ù<.ÿj?ÿÿ°þ¿ä‡ÿïKü›Ãö¨*þþöZéZM¥}ó 0Öï´¿í[[KÓÛI_î›§Knù M6­¥ý¯i}¤ÚóìŽ%.ÿÿ¿ïJÕ?]w_õ_¯Úöȃù?ûdGþ½²(ù>¿íä ìþêÅ$ªÿðÂLTHø666( aaq#á„L'š±LHè: °”4°L¡Øa °Ø¨"¡+IµÐv“ÞI†¿b¶ÂZ±Ø@Óˆv–¶¿ëkû{iN‚[_î¿m)˜bÿ¿úí®—é]ZéêÚÿþD¦Èÿo#©1ôˆAëÿåñML&j¿m„ÒÝÍè Âm0˜A¬1PGý Ra6’ Pb‚ 8ENƒŠ`ƒh6(0ƒ¦%øAÃb‚lP@Â@ $0ƒ Å1L0ƒ†´ ŠVÒTÓa¥:ŽÚIõV­¥¶•÷·ßijÚZV—ûi6“é^AÝ&Ò%tB¾»®"""""#0,DDqÁˆˆˆÏQ`„"!„  &a`Xa8i„¦ª¥á TÚ h6!SA ƒ0ƒb›aw@Ø ±QA0A±V”S #ll0±Úi턘ai†—v¶•­­éÁ¥k÷é= 6""""‹›dp<‚Ä0B5B!„€\ Ó» ÿ6“©„„ÐL  ئ!8b‚ lT0”SÖ‹â¡‚6¦¬0ž—i:Nq`#ÄDD!Á…A„"—…0˜OOA¦!4ƒ6%ÐÒÕuïB""""!ðâ"" Ái^¿ÒUt–;im¥ikk­{lS ZN–‘ B¥É ¡ÃPá„Ä&)ŠëI,DDH-†Ž M+I,D8°Çÿ xgƒgÈÂ_=ak xkYö@ð,Œ òîš‘(L†Û‚„ÀãÈƒÈ •È>#‚ üÄæ˜8:`Ú17N… xkù €Qäðú[7 Î?äAßÝpéƒM‡A„o`á“ôA’äOÑ"!(˜ d|`ƒÒ'ĸ"@ÈàÒ|/!§d1dˆh|$W½W×Ãl:.©6A„“áÁÐA°Í…†$vÒfø3a4h l1#ͬHíáÁ›t`Ú7 oE× ÐFÛFᆡíB6ËL#fŒۦŒ7¦ž•®@ÿˆí0ƒò8 Â Èø'—Cx ȳ%äø d<ËâòቈqËÂXA8&Pä2ìŽÈb<:äã_j­ŠÕ¶ýµÿ}§IÆ©öý¦)°ÓïNé:ZAÒl,é&Òv„‘ý8gØ‘ÏM£‡­Ó7‘ÝéÃð—„ÁÁ›ÄöŒö&FF èº{4¶Ñ†ýÏCF'' Ã'á4Âq'Á`„4PPƒ!fC/ðþ¡›Ã8G2€Øx)ÈŽ§‚œ æÁ¢XäÕéêú½ßßêûéÒnݪz¿ßÝ[®®+þ´Ÿô­­þ·õqŠþšx­þµü0A´›I°é{ÕZMƒ†$wAXtlé6Á › Kì#FÛ à¶%ÓFF ¢æØ+Mm5M‚aK¬þ´Â1Œ&.<˜@Vâ»õÿÿûõký?¿þ—Zº¾×Òß}4¯M]ôþþõ{M:=ÿ¾ÿëw±^úë{M®éi6Á«°˜„I¶ƒ†bum ì(‘ÛI°pÄ»a›—¡Á›‚  ƒ£Ñ‚nŒn%öŒ7ëÿi5þÒýj¿û_]_ëúßýß¾þ=ÿZÿ÷C_ÛDLþ•ÿë§ßkêº~ºý× ÕïÕþí×ý:·Â}ØM½:WºêáˆAáÒoþ¿ÄW¿ïÿâÿÿÿÿ_ÒÕ*ZÿÇüWö¿÷ÿ­¯÷^º½imý~º°m^«Wú­nÚéëÞÿÕ÷¤ÿ¿[ÿãm"ä!ÿúþ,†Šÿþñ×·Åÿýyôü‚O¬K¯Bÿ±_ÒÇÿÇ]r¯ïßÿÿ¿õúþ¿z×ZúznŸýQÀ#„qÿÙÿÛ_çƒ,Ùÿÿßú]J¿ÿðG×ðG•×ëÛþ•H4Óþ2%=¿þ¿ÞÔÿõÿÒàÇþÿÿým†;µÿ¯ÿ»Ò ×/ý†—ð‚ ÿÿýfÃ+Î ~lÿþÃþ²ÚT³ÿÿþãýx#ßô¿]ÿã nïÿÇÿÆÉÃ/\5ÿÿÿ™†b ÿßûö©¥äßô ²Cþ—ÿý“ÿ½þë÷ÿôú[¥ÿÿªT‚ÿæÁ€O[ÿÿÿ6«ÿèò#ËÿÛþ?ÿÿƒÈÞgýõâ«ß×ÿEÁ£ÿ¯÷_ÿÿÿ®ëÿ×ÿ¥£€½/ëÿ&=j‚ÿô÷þúÿ÷ÿíý|Øl͆¯ÿÿœ„qþ®?ëÈŽëúÿþºþB_úý.¿®Bìy=ÿ×éêiõ¯ëKÿê¾é~¿úÿÿù!ûü‚ã‘oÿ_ÿÖ·@¿êl2N­®Ú[¯k¯_÷ûkzýÿ¶­Óí¯ÓkþÚ÷êÚþ—ëäW×õ]uÿÈAëøðD_äAÿïëÿ_öì7“÷ÿüþCE»K®×û­µjÓí;N×^t ô½´°ž·¥úV­«amm/{I´×zþ×ý9 .×í5KOô]Rÿöûþ›WÿmvöÈŽH~Ÿÿ!þ¿!þ¿ÿÿ÷}õïÿa ±\Høaĺ ‰( Âm± ÐlSè0ƒL'š±±# lA±LCa‚A4é†bí;I5VÂÃ4á„›a´×L$ØNÒÒÒÓûÛ]}í&Òÿ¯] ®¿¶¿ÿ­×ûdAÿÿõìˆöùÿÿðÄ-„Ða0„ËŠA®»iT4ÂjÐiÌim5Lÿa{†) ¸b™ý„A†(  ؗ“é„öÂ%øA„AáLKí´­&Fkj„¬#kL0¶º{ .Úl5í&ëÖÒ´»öÒ÷_uÿÿ½zöëZúlˆ>"""""""#0,DDDDq`„D„D…F‚ !ˆ°ƒA„Á „؆3Ð aS! \(Pب„áaaŠb„ ÝŠ P@ lP lK Ø®ðl$a4Øa(ÕWa„¡­¥ià k÷þ–ÚÚVºv¶¶IñFˆˆˆˆˆˆ‰ AÄDD  Â#pÂ!G ,0ž˜„Ä.ÐaŠi4A±PEQŒa A„ Â0ƒ lRlT5b˜aA­Á 6–¯¤â"¢"""""""!‘À¬ƒÂ !„DKw·L0¥ñ ¦!8A„Ä&+¯úDhA…Úý4(Q†[],1 lU¥ˆ28ÐQX‹XÿùÂù x‚—+â! žAl6ï†{pþE‚î@ó‚ †@fŽHr³È3y(.d{܆`ï‡r˜EÀ{MSUÈïM0™Ìr |C 1„¸á®ûä·ÿ ´=zÈ5>DI |ÁÂnŒ<á§ÿû þÿßô’÷mÈd |ƒhøtœ9Ã^=|}wÄqǪÚÇ^ò ¯Uïõÿý}W¿Ã_^¿ÿÿ‘Žÿðáÿþ?µû^«úëê¯wé%ëê?¶ ± “‚ /VŒ˜ä2 ƒÿ$WýU}ÿ4HçŒø¤á”H( Éy>c‚' d|O‚$@??%2üøn"aüŸ´"ḆŸäø„¡ 4ÍfÂ9®^ ÎnLƒqÈ7Ç W„ÝÈeŽC`þ‚A.«úþŒ6Ï ¯EÎà”ü'ƒ 7ûÜtŒ0õÜÚuA¡a0¶š B74n¦¸2~aC3Éòh3q?/äŒû4gÌ<ºà„P°˜DøØCùÆâ|CÓ'Äa‘|…üh‰‘|±Ê²vE™㑸\ØAùHk޹!ýI°Ðƒ@é;Q#œ1#—„“p›A6€ÒAì&Úa$w ü%çM†$wF΂  ™´^£ ‚ †%á/C†%ö ØáÃ6$0˜HÁµ ÂF £ÓÛL#pzxMƒz¨Fæ†!Aèi„m2S 9AP`ƒ Ÿ (( d?1äJžqÈžˆq˲ ó!pƒâd‚%{Èj@È(Öý÷齫Ð_MïúÜi6Ý4Û §Wi´·½\X¯Úi·a÷wûI^ô¯NéXbG6“aÑ~ K±#ºMàóf’m:ŽØA¦ °Î0L3€Þ‹•‚‹ÃaƒÁ´a‹F ðŒA“à˜@@аh¢?°ƒ<¹—åp d)Ép Éñ_"ñÇúíÿ}ô¯õ¿þsÿ×´ÿ^ÿÖÕ_Uõï¿ê¯ÿîÅtí=;ÓOoô´ÚO{{«ýTñ½·» y´›IÕºtƒ`Á$.¨&ôm à´]0¶ŽC ¢Â0N,&˜Fæ†/×þþ¿ô«¦ëë~ƒÕþÿ¿º_¿ã[NÿÿûuW¶—kì%¾Ööª¯þ©ÿK¶é§§¿Òú}º]Òt½mŠÒoVÒÚOM ªp»ƒ<Ä»`é]?ÿó0kïר¯ïøû®Ú_UŠÿâ¿M}~ÿûúÿ¾Ã¯zÿôªëÿßñëÿ·é×_íûéé¥úÕv:Jþë¾é§ÒÒÕƒÿý0__¼ƒdþÂÿþ ÿ‚þ ¿ô¿úé~Þ+×õÿŠøªêím§Öé/uý×õ{ÿKëãÞ·ý ºOôÿUÿoÿ»~¿Å‚7¿Á~6Ò¯ð_ßµÁÿÿÛãôˆ6ÒFÖÿÁ~­|A}!½üWØ1ÿèGƒþê¿éÿ¿n¿þúúù°c¨oÿç8Aýa>óaŸÿá?ë‚8íÕmÿÿÿÿÛÈjñ­‡ÇÿþDG¥‚¼ºàº_´ù8lÖž¤6{4ÓÿQÿý|õcÿä‡#Ïé´ýw ¼wKÿ/ÿA;a, Ÿÿÿm)°c¤aêlÿ_„pþ”Øc„mí+ÁvÿÁ¾ßñà°ãÿëýÿ “ÿÙ d_òoø|›ÿîÚþëÖHuþÿþ½KB—ÿù1ÿÿöô² ßÿþ‚ÿü ¿t^«è/pßóa™ÙÃhà4õÿþÒðG–¿áþBÿo×þ·]Õúú_Çÿ¯Oþ¨ÀgëÿÿþMö+ãª$àÿí×^—éô¶êô¶éýùïü ² Õÿ6gÿþÿ„lÿøoÛþ×ÿÿÝëõ×lˆízþº¿×]úÿÿîBÒÞûd ÿ¯þ¾’Þ¿R\jMë_&>IÁòoÿY!Á¶ÿ¯kÿû¯Aø>ºÚ_~¾·í¶ºOºwÿ¥ëþžö½ª}¯þúÚï]ZîIõ¿×ÿÿý-ÈŽÞ–ïí}éÿû¶½¿þý·“ÿZÒÿò9ý†µa‚šM„“]SáÚ.Â)Òm(a;I°ƒM†­_j¶«i­¦Î‚½5[õ×OµÝ´ºO[]´—zïõõ[KVÖ½r:ý}múû">E_ÈA÷®ÈAü„"û×±úÿ÷o„ Šb˜—¬"¦Å@Âa0›é1LSûb¢_‚!†,a0„ ‰`ƒÂ>‚$|0ƒA„Ó4ÄŽƒ Å&ì0JÞØhÂt›kí¤šý «aXiéíZ´›kíúúN¾ÚM¯wM¯kºí­¯^­­_ý{‘GüA‚ ÂhDDDC.A‚ ! 4!…B `‘Ä#„  i„Éa4Û†_ ÓVšiáLPAÖÄ*‚<ÂÄ „0ƒ0ƒbG ƒlSè8—Aµ±#àþ5[ÂÅpÖÕ4í&V½°–õv•ÚM­ª·^þÚÿÚ߈ˆˆˆˆˆˆâ""""""Œ  @ã‡f¹Pˆ âBBŽÈàÜ&‘ðƒäƒ0°Âki¦«aA± ¦‚U ƒ0Å1LHó† 1Al$b‚¶ 1Q[i0•l w~ÚWZI8¤â""""""""""#‡`„0„A‚a†A„ÔA…AˆVH0Å4Ð@ئ%Ó lKèa`ƒb¡„²ÀwÿJœDDDDDDDDDD `†„X Јˆj_¦—D2AšÒ×ÄDGÒ×Tˆ†ˆI*ئKI%Ò j P½1 Ф´±U¥ˆ`†+±ÿ xPd2·Èey0dòÕžŽÃ[ã!¡Â †@mC ¼ µÄO xl¼áo½ƒ¦Œ:z1¿ h ƒí?ä2@Ýÿ!–:ä24{IÁÁÁÈd †C‚‚î@£ˆL±È? IÞû_[­kNªAIÿ Ø:ªaÂ0a«¯¾>8ýmtÿº¹±Èò úA‹ÿÿQÇQÿõß]'"·äcþºëÿ®>#ôÿ^­úÿúÿëû¯ÿDK!«d3Ù|!¢iÞA½äl† »Ï3ŽA!¤9 ƒ©‘Èuõ÷U×_ÿÄ ÉÐÞWÂ`’àƒ<¿<0‰À¹èàÁ’àƒ%ÁG2'”äY‘à h¢È§ãÿã x´ÿëúí}-1ÔAæa5ÿÿÿЍ×OðÅõÈeÓÒÿ¼fÀ¯áÿÿƒÔØ1ù°Ï›?ilÿ†ýÿ„qÃ~ËÿþÏûëÿÆòéñ‘¢0_öÿí~ÿÁ{×öf ?ÿiÌW÷ÒÛKÿK÷÷ÒÈ>ø7ÿû_àÿï_ X7Ð@¾lÿÍà¸/ÿÿù°jijŽÂ6ÿíÿû×úAø«ÿ¿ƒÿ®,‚ã·^äuÿÿÿU÷÷¥“pûÿÃÿ“zô|—îHp|}Zþ–@Ãê—ù1ÿôúïÿï½: ç6_ø7ÿí¥ÿ8 —¯ü7ÿõo‚9Á_ÿ!b¿õ¿õýwïöÈA÷ÿÿFSÿaõëcý|?þßúÿýדâ¯Òé´Ÿü†qÈ·ÿñ_[Z_ýyÏÿ͆eì Wþ³ÿî¿ÿ¯ëº‘¿ßäG´½mÛ"?õýkúÿý=zÛú^D!ÿöÈAëÿÿÿö+×}÷É¿þŒO¼›Þ—ä‡ßòcƒÿßIWú ÿí/ÿÿoïAë~Ú_·ß¥úÿ}ÿN¿kÿÝjÚë×þ¿»¯þÙßÈAÿ¿ÿ·ÿ¯A}Ò·ý¯Û¯äßÿÉ_úÿé¶­'¦šl0öØOl'Úi-­¤¶´˜ijÚß΀a¯«ö­Õ´õéßjßjÚZÿ¶•®ºï^—éVÚþßûkï[õ¯ÿƒÿ‘Gµÿ÷ëÿÈAïõýÖ½ÓÁba0ƒ8‘ä Ø—A„ ‰tÄa„‚¨EL aа¬P Â(avĆ  Ða(¦ÂIí¤œ0Œ ì% %a@ئIŠ[M;JÐ4ö{im­«imZVï ý­úí¥óá›þ›^Ö×÷¯¿¿¯oÒ×_½~üC „DD0ƒE„ÂÂ`„ÂdxPdt0¶˜ —„ ÓAÚm„ÕÚl iˆH7b‚ Šx#Îm bM1Naa¦$zabGA‚Å0±O±Äº ÐpÑ„i°ÓA¥ {[McîÕ´½6ÒÒ[I{K÷_µº¿_uÕ_Ç"""8ˆˆˆˆˆŒ¸‘„Hf"  Á0„ Á0„CLCØá¦ ¦© Âa?± Ða0ľTØ †! ìa6)Š ‰ Šc6ÒM;TÕ8¤Ól%¨VÒ´[M´û]/IñDDDDDDDDDDDDA‘ÁTˆ0A„!‚lDŠ;A„t „Ði…†)œýaáaЦ!E1#ÐA„ ‰$|0›: xÆ–ºXˆˆ£DDDDDDDDDC"!4L" â Âa z¤—Ñ €ÔŠÒqI/U_ö*•†b¾¶ Ã¡ÂXˆ‹ ƒ+± J~Çÿ ¶ÜASˆdÉ ä9ò!• d ¸²n @õä¸á—Ä2ùêÆÓò 8Æ۾è>0Ø8w!¢;DàÓ )°Ëâ•ûùÁ¡íò c<6ÑÝÃØ8<8tn‡ ·Æ AaÈ ˜F …OF÷£!™È< ÉL¿^o0‘]¤K‰ðD€0N3âfÃ4þÈ[#™8O§§¦×_ÿßêŸ^ž­z¯J×zúت½~½*„Ú]\SKu¥Óôõм'ßtµzuo¦Ý+Òl3Æ$s¤ØbG8fÂ\]CL ÄŽm&âü°”zM†$vâG˜aÂ6ÚK¶´b (L#p’6½’™~WÊ#6|2/Þ+×ݽ¿[ëýuûøúþö×O­Ðý~ßþ­ïM}?Óþ·Þé}úV—W¤ú¿[î“»z·þÓw±]i^“m7 úIÃ¥iñ„DDDDDDE"""""" Žƒ`B ! !a4<Ä ¦aÖI†!Liƒ¨"¦aŠ„TðB Œ6Ò8h8‘ðzqN½}8ˆˆˆ¥ˆˆˆˆˆâ#‰1Ä0„MhXA¦!ni¦o·ù1ÂIЈˆˆˆÌ ÄDD0TÿéyP8t½RqÃ]ö¶’Ö„’Ò\ › izþ@ðØõõM1QKétš¥ˆˆ´0±L0–’X‹ ‚b˜ªÄE„8þAl[ `r¬†@[ C”9 ‘<\†TjpA¡×p˜!cȃ<ËÉ Ï!ø‚ØjÞºhÝPÐ8:vANˆø‡ƒR Dƒ8äâƒ&jâ ù¦ž’AôßÔÁ*–aæƒÂUnúÈß!•ä2A#iª¯ÚÝßw ¤:á6î™Aðè'L8pí †Wâ#ºí~Öôµ¤úò§u÷zÄnaõÇÇÆ¿iZúëÒÈ.î@ðk·ÿÿ}U¿hÒR ¿ëÿ’ûÿ]GÔu]ÿ×õï^ÿ_ÿ_Ç|ᢘ@¾Í¸A<ÖAŽM—dfÙL Dd-ù ¸ ¼K÷!!±È!‡  |ƒ\ªÿ×ê¾@ðœ˜A“ðƒ%Äø&GÄü&¡„@Ñ ¡d¸Ÿ&CÌó7„.OA®O‰pA‚@kÔA‘éN%ÇðFh¼H"qž³"x"ŒðC4Ïd¸–ýò yÇÍĈüÞO qÜã»"ñ0‚a,‡²,Çdm2NC`ëÿ®¿ú.š0mуnľí‰} ƒ6³ †p8š0omP Ò6Þ„rúhÜåϨFç§é£ tŒÓFæ¹ê¸Fªš7‡ª1A„Ú„2ü ’à˜A’äÊðƒ0AäøŒ0EHψ SqâÈ–l<ËäòÌùvAì†,‡²Î@íu×ÁÒÒl[ ƒ†ƒi8¤í59Õ°áëúJâÿ„øpÄŽm'IõI°è¿‘ÍÓƒ0ØbGt¤Ø3bè3zT$ñ.¨Ûl  K—ѶâѶ¢ëš0Oô`õ£pzo¦¼4baSì  —áWa`ƒ ‰ø@Êp@Ș a n œA§'„ x!,†eë“~*¿¯¯¯Ò¿§­ãwz§bª—W§¦÷ŽŠÞ'÷iµê÷JÅö+Iµ§„Iߥpè¿JÁž6“ƒƒ<ÄŽÿ‡˜:¶°´†%Û ØQ#ÍÚMº/Ã0›Á7Ð ñ#Ímm7蹌#sFõ „bd4pL#h9#kõ_ƒ¾ÿÿv¿ëu¿­›?ý{iüØí+ÿõ¯ù°ÏõëðÞÃÿ8½×ùÀiMÿÿ°ÿÿüïé<¿ÿüéd=>P >/!¢'&¿ÿ­bÿ_ÿþ½ëÿâù!ÿýzÿñÿÈ(ì_ÿ!ûA×Ä+ê’"Ž ÿºNz›?ÿ„l¾¡/ÿÿ6é¿lþúÁ¾ÃŽ¿ø¿!ÿÿÿýÿþ‹†_õÿØØÞ¿ÿòp¯òcƒy!Òÿþ/¤¤09ÿ*9;ÿÿKúKÿÿÿô´áþl/Ã͆oÿ›ž³ÿÿþ‡íƒúõþ—_ûd ýUZÿÿ¹ >ýÿöúëø"?ô\3ý´µø¦;¿ÿý~‘'KÉ¿ÿ“ývý/ÉEÏôä»ÿëÐ_õ0¿þl2Së½wÿn¿þ½ï×·ÿÚÞH_ÿÿûVÈŽIýoòt»tž¿ÈAïëýK×÷ÿÿŠ×ûý¯äÜÿ&?ߥä‡ÿÿÿÛK¿ÿä0Îë´½´½÷ÿ]}´¯Aï_÷WZ~ý¤Ÿúî¨wýÿkî¿®¿¯ÿuÿù=ûúþ÷Y;‘G×÷úëÿ××^ÿÉíé°Â[¤š¦š§ÒN=Xa$Ö©´“¶ö•¤©¶—~¶¶¬0“j¿: Óá¥þ¯M=Öékuÿ¯¥ëÖëúûjõÿýäãV×ÿ[Û";ý¯ä ÿ¯ÿƒ½þ6+b‚ Â Â Û P@ÚA±A7vH ÁÄŽƒ@Â0ÅC°@Øi0ƒ8a&)‰|0A„ÅX@Á†Ä0ƒl¬Xa ƒ ØK«TØaVÛInö¦¡+L¡í{¯oUm+KkÓûI;¯mtï¿JÒÿÛ_ÿý×ÿü„a`Ë๚††ˆ0„jƒ„…0˜!Ó#ÂDœ13`CÈé0¤xSLOMû³õ®_œ0ÅSÁ@±AlP@Á0ƒKè0ƒ‰m„‚ âaÅ6AêàSµàŠ„˜a&Vƒ°ƒ´˜i:Þ—¶–ºv“§ÚM¥ëí®8£"""""""""""""""!¡±ÄDDA‚ª †D0„DCÐ3»#á4ÓN„ûK´¤éb„AÁM&)Šb˜‘ë>á…b›IÆš°ÂIÛ #8á„a› []´—m/KÐN"""""""""""""8ˆˆ‰7aA„ !dxB Ä*a&ƒb‚ &Ä&šb0Ä&!A„<b¿W¡ÄDDDDDDDD!B  ! !˜Z¯IV´"""#½Z¥j@”%¤¼S’lÒK <5×_×~?Â70ªš7°¨aƒ  Ô&¹„0ŸÂ7‡„c #ÂU„m2\ƒ2^_„FÐÈ7ò|a$aüÀf†KÓ>"Fg™ÇÈø3„qž 7O"AvEòËÀh²„¼†]ÅÆÐêC0rƒlz¯á›ƒ Ø8bGmàèÁÒl1#¸3`Ò%ÛAÃÈü°”éÐAÐM ƒlKí˜pÄÇAo»ûF ³ÀÔoz0M‹Fá¡hÁ¸´qši Á…L' Â8˜&˜FöO‚ @Ž0ƒ%Á“ò|a. Ÿ‚$G‚" K ä2¦'2-›ˆ'‘ ¼#žA¢™¼a¿­í:Vêé;Mì&ïtºt½+Ý-&à Šwa6“ˆp»H&=°ÏH<ó«aŸtpfÄM4“`àÄŽÚ; ƒaÑuH6‘ܰ1EÛF 0ļðîŒl#уèºv Ø´a´\úi„m‰£ …A„a°MB0ÞC?„Â1‡‚8ƒ”GŒÍŸGÌ¢3gÃT<ƒ7›Éy ¯!8‰eá, ™þ•?V«¥÷OÿÇWªêûÖ·M?OßW»¤ÒôõÂoxM¤ôÛuMôôÚVÅi[MìS«°›ÝˆAÕ´›KÁÒo ƒ9ºm¤› Hî“`è¾ÒoEÕ Þa›ÃA§ Ø™@!†M4Œ0цF Âa0˜@þ·þ׺ÿÿÐ׿]ºÿÿZÿþ»õ«¥ûÿþ»î×OOOOÕÕÓûWW|U~•¥ôéb¶ÓkqT¯Å:MýïTz`Ònši&ÒÒ †$vÑvÐMý§_×ÿý6?ô:Ü1Ú§¯ÿúÚúÿÿé}/ÕwZý|WÿÕÿý_|W·ëÞžž¯½­~þ›¯z 4­î’ÒµÚb&ýåÕúëÿüõõš´VúÿñÖ„/X­{íÝvýÓ÷÷ý}ÿ×í-}ýþ¿¯‹ú__ÿÝÕïÖÕiº«ÿûÿÿøÿð_þ6ÿõø/ä4é~A¶Ÿÿÿÿë_ÿÿÿê+ÿðÿÿxþ¾ÿo^êïûí-þ·ö—^ÿþŽð½Îÿ¯íqúÂ=ÿ× ÿè¿UÿøøÿÿÿøÈJØM“‚ë§ÿ‚ïø¯Úýàßvš_µÿÿ¾ëëÿíáÿô ÿÿí¥ú ÕQ‚ÿÕlÿû}ÕüáÄÎOÿÿú„sÿÅ7ýñüt ÔyOú Ú8ÿZÿü˜÷Wûý÷ÿ“Ò$?ùÇúÿø…ú_ÐKëõIÿý/¿ÿ¡èÿÿùÀ`ÿÍöÒ›<à1qÿÁ¿inëo[Èþ£ÿô?ãb¿ÿûÿÒ×ý¿PûÿþŒ¿Òòoõößé®Hwاÿÿÿ&?ÿÿ´—_äõ{ /ëA6 POÿ÷ïö¶¨àfÿÿ÷޿ȯëƒÿß_¯‘_lˆöù{_ÿKýS¿þ–¿úÇõÿÿýÿÿý¥þMü†ÿOÿKÿA~õî•÷½>÷ÿ͆@j]ií}Û­½µýzµïÛ¯KÉÃjõÿßÿÿúõ¯DGÿoú}ü„}²#ÿ_×ÿä úÿUÛþ‹ƒô«ýW&ý¯“{ÿõÒÿýûÞ›¥Õ°ªÚ¶—·Ã]?ImvÖÒM´­WÿÁ£úv“¤•¯¶ºIëúwOM×þÚ^—ëî¿þÚÿþÙ~¯ÕÈAëlˆÿ~Ùúú¦+]Š¿¨Øÿÿ¾*¶ÂA lP@Ø‘ÐlP ÁŠŠbGà Šv)´aM4ᦚpÁAÇaa„mTÛI;{ ; N꾪Ú[i{·_ÿ¥¯ëëðíK×^¿ÿÞ²OtêÕd ùÞ¿ÈAðÂÚ BÁ` D(ì* Á;MLa0ša0”0”0¥á Ú BTÐa4Âm„ 6!;1#ɈMM™«ìKЃ>ا¦! `ƒ@Ø ±A0ƒŠ4a$ÓM4Ó`ÂPÂ0¦¬Rl0•ªé³ ÚW°ÒV×Û^Õ×kÕ¤ín½µn­mqÄDDDDD8ˆˆˆŒÀ±ˆeÁPƒ#Áˆ0 ˜^@Èèdp¡¡Ã5TÓ UˆA0ƒ4 ¦!40ƒh á0ƒ0ƒ¶(`±A‰ lRr|RðE@IÒiÛ 0½¥úN""â""""""""""""""""!„!‚`„E°Â1ÇpÁ4ÖI†šh Ü Ú®ƒ8‚bºb˜¦H  &Á„¿IÒ`Hˆˆˆˆˆˆˆˆaa¡! œ0˜Aˆ_aŠôµÒqÄDDDDD}.’ôµIµIh‚Øá!SªibAlذÂZX±ÅbÂÇü˜b2¶ä2!žA£Èjƒ?ÈŽ IÄ ¿ x1ä2@úa0îl†@4Gù €#ˆd~ X9‡=ÿ< ÇÈ î©èヨpáÁßB'N@ð0ä2GÈ . ©„·úüà …¾C w|âŽr=AÓF&@ðÊH cÑþÒ†¿ZßÚýïÐM?Ë+Ppéƒøã¯[¿ÿõ¾úù>öDôþþ¿Oýߦšþ¯Õ_úÿþ»üE|RÜä:ë×½/ê¿ïÿÿ<1ÁBøL—プ„ †Ì ž@‹ 1™ „/r  @“ˆg²_“‚ Á‚ Ùˆ!Œ!¡ÂyrùpC@ä+P>L}ýU}}*Éñ?ƒÞ0á“òü Â8„ޤ? ÁA’àœ‘ŸW„«F1„Ñ 3Ÿ á‘ðA„2 ùEG0A„P(dàƒÑ"ýb®í7N!¦×[AÒô½÷Ð^Øb¤è&>y´› é6A´›‹ðh'Òm'œ6]iÁ‰vÒx—š6‘ÛFܰ¡ÐAðÁ ƒa ÔHóùË9,#mþ˜Fæ†é£ ]„b *a<oa*ÁU¦d¨_è‘™³àA˜ä%O8ù¼‡âŽä1åñ<# yx@Æm}+~•êú~ëÞ*½}[W[Ò[ÚWZuµë¦ïbºz][Þ›bµnK ï§Iô¯o¤›v ààðš„úMüHí¤Ú¶aÓƒ68bGmh&ÐA°fÃ`A›T]4`Øa4ᜑ†ðŒFí0Á¢ìzj~Aá0ƒ%ÄüŸ ýÿ­_­}ÿþ¿~•´*ë§ÝmÿÚõÿÿ§ý×ßÚ½õÐKéUý%Iu¿OMÕÝi=+m=i6“zNGii6íiªJô›§‰z‚m' h83aD¾Ñƒ…ÖÿþÿþÚëé­m†?Ó×_×î½×ýt?ºÕÛíâý_×þ—Õþ—¿ë¥­NºNé{õuk®¾¶ÅU¿¾Ý/Û¤ð›_§á:M‡/¿þïÿú¬AQþf Ÿ_õßû`Çé±ÿ¡uàÆ½¯Ò vÂëÿßÖ¶þþª¿ÿ«öÒº¿ñ÷Kþ¿÷§¦Õßþ›íøªÿ÷_ýÿ"ŸÿŽ ƒQõ ÓOýz㓘ü„ŸëÃY8hô%ÏññÿÕ± ªúUø¤)úëlW ÝZýÿ¦»ýékûÿþí/õi¯×«ªÿm|#_óš „múrÿ¥_íþòÿñ°ÿÿÈlGÿä48ÛÿÒKA•?»[Wvh'Zñ]ñ^¾×V }vÿõÿãûûa+þá ½ÿúl ¿@¿ÿ_› îp3xFÏ_óaþ³ÿáÿ ¼â~—þ—ñÇðøÿ÷¬‚ôm}ÿf‚/Nh ë_õÿù!âýEz_’ü†KÉ„¿ýÈ(ê]ÿþAG~_õH/ÿð‚êæÃCÿÒù°+üØe› œ7£€Çç+}­9zûKÈL=ÃøØw.šþÿõúþ€_Uè¸4:_×þÃ×ÿÿõþC·¥_$?ù 8?õÿéø"?Tºoëý$¿¯íH'm]m¥ Nëïø@œ7ó`Czõÿ÷§]kï×]Û"¹û¯ýþ[ÿƒïƒÚÿ~ßÛÝkûÿþý{ìwúDc¤Iöÿô]<àÞ¿ÿâ—ÝzYïÈ7ín¿ÿµû÷_¿ÿë×¾òq­®Dý×Z#Ûï×ÿ×È£í‘ÕüŠ?uÿýÿ¶Ù?×ëþBôúM½¾¿îë£EwKɯ¥’òpn÷_&?ÿûÕ¯R@Ž¿ÃCKOµVý´¯O_´­~ýROýzmm-Û_Jÿõû[«_muéW½k]RÒýHÇþÈŽÙÒÿ!öÈ£Ù?è/XýXÿí¿÷b£ÿî¿ÛJ$t ŽÒ[XqV„v¶Á„¶ÂV–Ã@ئÂV4öÓmUSM[ ^ÚV¶Ý¤¶’°ÖÖÒí?m{Óö×Ý[öÛIí+ÒT—o ÷zZJßuí¯ë«ußõý6Fþ½{ƒï×ÿ¯ûéÃamÌiŠpƒb‚ ŠyìHò¦)‰ ؑÐlHø§ ÂÅA‚LR˜‘ø Ø ±Ab¡„ Š´‚Ć`ƒb‚`œK Â 8ƒb›JÂ0§l0•Z°Âªª¶Óö¶«k}¥ijÚM¥¯3êýÓÿ÷ý÷»úûúø`ƒA‚œ6"#6\0— PB ƒ!‚ †`ƒDC — 0šq )ˆA…7&hM4A…/T…L&½„°šM0ÏZbš0›ñ $~‡@جƒXalS¨4í(Øa$í†m.u'hºzëL0•éßí„­*¯õºµñ@ƒ ƒâ""8ˆˆˆˆˆˆŽ""""""""""""" Á28æ@ ¸â&ˆkU†0ƒ ôàì ÅA°˜¦! °ƒb˜m ŠØ ›4ƒ°A„ %izlPOt˜a5ÒÒÿ± ƒhg¨†hC ƒa5#ÂaŠ‚?´áÒ aŠb_ _¤éb(ÀHˆâ""""""""p !úÒÈ<>) „>rb°¤2 †x Ôúy1×þ¿uFp°ÝÑ£Ã6¥Ë<Ñram6ÁlK¦Œ&Œ0Â6Øa‘†ð›>!sxF ľ0ÞŒ6Ìi¦ž†¶Âh45\Âðƒà!„@ŠàfäÏäø Ñ#> 2\0@Áƒ‚Cùl#òÎ8E\ð Èeæl!`aÈ7² >k ¦ä6‡ }aä~“aéÆ!Wt›ƒ«ui6àØa!Òt›i¤›$s†°ú¼ ÚMé6‚uUÒ¦Ã;£gØpb^a› %æ‚mt`Ú8A7¢éñ#Ì3‚уzhà ¨Zaš¦Œ0ц<#xicxA‚ ¾ð¿PØA’™|2Ç/‰ñ B.‘A›±MÇð7F9 Ù ™ >Æé^“}_ÿWzÿõZ·]¤•íé~õ­êÞè¿Eõ.ž‹]¦ÒzWxNð&ÒtºzÁÒÁÃAÜ:M†$s¤á‚`(‘ÛI°è¿I´œ€Ê6 Ø(;q/6jpè&Ð@ñ/6Aa¯a0Õ… …0žF0ôºõÿþß­oëzÖßÞ¾ÚÿnŸ­'¨¡Kª¾¿ÿß§_uouâ«jéûiµoéÒmK§Öö›„ïI;¥i<&ݤ˜Ãƒ«ƒ;†l$1#±#¸0@éð˜ÐAý¾¶¾Ç¶µj¿ÚÖþé}ûÿ_ÿ§Å/Þµªëÿ´ºþ¼}ý«ú¦–÷éú÷úÿoëýé½úiºÒoÝ'þÿüBìÌ"Åq_õÿõúøÃð¿þýwUûx#Ÿÿýè$ýkÿøþ6ÿþÿÿì§ïf‚¯Û©˜^30ÊíÕ~+ÿÿë}pÇæÁþx? ¾lÿ̓Y°ÑY°cá¼ Oó`Æl1ýRÙÿõ¯ÿœÁ<ô›ÿïÿÿø‹‡ÿÿ«ÓúÿóÿßÿõÙ˜d‚Çÿý/!˜9ý/òcÿý×ù3KÿÿºAÿZÿ×_A¾¿ÿÿÿ›¼ØÿÿÛÛöýÿðG-ÿñÿÿÿ_&ö½}þ¿ß_òc™Ãz]ÿúꂯýV¾²CÿùÇÿèÿÿýoßÿúDüûKü _þ¿ó`ÇÃò}ëýô«lŠ=ƒÿþBd ìy?þÿþBÿ±Iƒ¯î¾µÞ¾ÿ¨î¿t¿ü›ÿä08>Mÿÿ|Š8?dr-ûÿéÿÿþ«kÚÿý]~ºë¯®ß­7þ·^½?¶DÕRÜ“ä(é%¯ßK_ÿÙýÈG·²(ÿ®½þÿþßÛý×Åaÿ õ¥þLÿÿÉ ûk½§k}¥{i6—ßí«i>¿ÿéÚV½­ä6E7IÒ ¿®‹ª_õþÚÝ{¯ýÿ_uÿYü„ýë×Þÿ"þÿÿÿÿïØ}8im¤©Û #8«J*F66IŠ[´Øa&Tà &›j àŠ…a„¶Òl't±VVv“­ý­Ûi>ÚÞÚ_i~ëî½ÕÛim­×V½ÿWí­Òjúë¯þ¯þÙû_Ðaˆ[„MˆNÔS˜Óša1ML  Šbœ1 ¡@ƒbG´Ä&(aŠb]:m“<  ‰ta0ƒŠ „Ø0Iˆl0JÒcMb˜¤Û¤öÒì/Úí¥}«×iý¥ýS}¯­ÿÿ[öäã Ž°ÂA„ ˆˆƒ ˆaP`„0ƒ  &L'­ÃM4à „Â[ÚM0Ä&zlB‚<ØA9PA±A6!Å aˆAb¡„˜¦ÂIÅ*o %b­(E:NÚÚ.„«kiª÷¶½§i.4#ˆˆˆˆˆˆˆˆˆˆˆ|4"""""""""""!0ƒA‚ !hE¢nR<) Ä$Æa:‚*a„T銦$ub¡±#ÐA„S: ÐaM† +:×ÿKDDDDDDqÄD!C†BM p &Gö˜b 5Áß x6_¤C@é~ˆÐâ"""""""" ýi&’_®>ºW¥ä5m"‚³×±APi~’ká‚LXBiéixˆØA±LRâ"Á ñüà¿:ƒdÌ9\w Ì9 €Ÿ„o3¨iˆˆd È!H xgV™Ã><0 ÿ×=™öûýÈ·Íâý.‡N3î9¶qãyð/ý˜J·úÝôœ>@Ì2ÇAaÁõ÷¿ßj¿×Òù…F·Ú÷úÿýßÿñ¯×ÿýºëÿ¿ÿÈ(²ì†›—^ºþÿ¿¯àŸÂAž3Ó7ÜÇ ”ÿ!E™¼ŒæŸù¸ƒÌƒù‚vAG|ÿ_ÿÛ7ýL#mŽ!0ƒÛ¬ Õ5Ç2T ža ÚÏä?‘pØGäP„¡Ë²/P9xK'#*ÙË!±Óÿ›#°ptºoG £¾º8l1a ×8Ãô§£“Fß0ÍSF&¹‚L# Ç„ÂaKÓ#™|frøŸGÀƒ‘#Äré7¤þ¿õ¯Úû×÷]kL*ø1þ®‡¿¡î©ß­´©ÿÿú«þýÿ¿ù¢ë×ø…­×ýVñþH_¯Ö+ÿõÿÿ×ÿÿëé~î—èÝþB‘÷^ñÿ¡°ÿµÓÁu÷Ä/ºKô+_ÿÿÿûi6@mÿ[X#5÷þëûïøøÈgGä)þÿò›ÿÿÿÿÅ~ûÿúý¯Ôø?®|}s`B›ƒ©àËø#g÷¯ðG/ÿÿÇïú.z¿ÿô¿b¿úéÃÿøKá~—ö¿èÿÿüØ1ÿTµò§ö¿ÿü„ÿÈaÈüœú^ÿ¥ûÿéÿÿúþ¿êI÷ô¿_Úý×ÿ!çûíÿ¥_þ¿ä‡ÿÿÿù˜bžÚIö“÷ýÿ÷jé{kºÙüˆúù?ýþÚëKÿ¯ÿÿÞ΂†„°×Mºm ›Kh;Ú½[IºÓ´®¾öÒÛ¯Û_õö½ûþ×ÿü„ vÅ`±  1LBAábGá<0A„ÚAA°ÂVºi+al'ÚZí¯{ki믺ûkÚâ-ƒDMPa·Úk¦¿ 1V¡ŠŠhƒHab‚Å1#Á„b“L'aÁ¦®ÚÄŽƒ´]Om(aOþÛ m®Œ DA‚D0DÚÂÂa4Ó 4ÓbI„1#ö¶) qLU‚  `ƒb‚ ˆ=' wX¡,B€Ú0„DC# @ +g¯éªCˆˆˆˆˆÒ×ö–‘PÒ„½ƒ>1Ú^ B…¥âLRx°‚ÿ! .@ðÍ¿ ‘\àÊ †Hù ¿ h—Ø:a™¸w!’ð @ðƒ<_ x5y T½|ìpÂ!-ÃØ:`áȰdÀ¿wë¶C _r C G!ß!’cêïhÃ~¸ûÿý{ïI(ÿÿñ]¯ü†I÷þ¾«øø«Wè¿×#ÿõÿÇþõ×_U×ý}'!Ž!p…ÂA2XA0» {ñ"á [!žÈìƒá ö† ƒLLÈ#äÔƒkB<3]¯û@аƒVK‚a<¿'Á0‡(z„ÉL¿+‚ ‚a.A¢@à yeñ?ȇ(2C+Êr,ȧ‘ |CqÆlSqàæiÙB ÂX˲„6Y†ƒLYä3¹†ÁÈ0>@âõõp‚l#m ƒohÜ0ìKí3|3aLÕm„Zqh£í0Ï0ÃFÛF èÜÿF º14`Ú.ÆŒ6Œ6ú10©„¦¸HêŒA‚arA Âd¼&W„@ð@É`@ÈI‘ð ÁR|Kä-‚þEÃq ^ äÄÈ/K!‹!™d1d6C¹ã¯×]i6è¿H;†tœun4›z$r†xÄ ÞàÄŽm¤-[ÐVI°Í„M«iJÒ°†Â¦Ã¢ü8bGm'tƒƒ;£3£ц¦Wm´\èÜ(#mÚ0š0àǪhÃ:£xjƒÂa0á’à™)“àŸÂa"¬ƒ`‘ðA’9_þ Sâ›fÈö\2§â „ˆO!§†„Âì†x Àÿk®»Uõ}½^•¿VÕk׫t¿®ÿý>þ¿~“lVðžœUéˆMµBëõþÿêWê¿¿ï„ 667I6!ÚwÚ@°`“§i¦›h5O´›¦JÐ=°• ûiZÚv“ -¦Pö­«a+þt ?[KÛI×ÛJûm6Òµ´¾×ø}_ÿ{µíí­Ö¿¯Ùõlˆ?Ù>Eu¿·l„þÿa0ƒ‚ ŸØA„A¶áŠL1 ‚  Â$zaÛÅ1LHôlSé„ ‰b˜‘ààÂLTHøØ¨¦(`ƒ0ƒ¶$|0ƒ0ƒŽÕ†m$Óa«j›jØ[ 6=†Oç@!®¿ÚëûkiZßÚþé~¿“‹­&ë[[õnŸÈˆˆ0B""#8p`‚ÂÄDD0B"á Áa0„0ƒE„ Âa5/ Âi¦ƒ ÝöÂkö‚aÅ1 lT"¨ìHølTS B0±.ƒ0ƒ°Ò@ ƒbGÃm&› ml$ØF5´]2‡×†•¤Ú]¤ž“jÚ¶­§í¥ªí¥ŠDhZb""!aˆ0T' ( ÂÃ4B¸28tÐ4 6…Ö©°šTð Ø Ä("¦Ä*3c0ƒb˜Ø Ã^ð“aÁĺL0“i{kîºN"""DqFňˆˆˆˆâ Á†0„XL!a0ƒ2:PìOLPa˜¦˜\Sb˜ „¥<Ý$’t´!DDDDDD8ˆˆˆ0B$džXâ!…êŸëõ¯ˆˆŽÚZI]%ù €H¯Ø¨¤› %éZZX3Àx,U&à iib"(6!EÒÄC Çÿ! Ž@îòƒG‘ Iä ÃG“â†× gb{„Áß xiøL‚Ø,ú ‚¿<'aòwC‡F&C$cFÓ Þ<†w! y Z‚ƒþ¾þä2A˜t´È5‚u˜rªà¤8á•þ×û^¾ÒºÿäGtÇ|V«ë}ëò¡ßÿúøŽªÐøûKÿ®¾ý~>¸ÿúÿë¯ÿÿä ñ„Èj^Bá | EÅͲ ¶Gd4Á H!¡Èe_jr CäÇÈ+Ž@ð×…Õÿõÿ xœy$gŒøáƒ%ÁaGŒùžØL@N…øA‘ðL? ßBL‰2œš.ÏW© à6Îdtn8Dã=Ÿ h™/"áüŸþD‚ø"žËƒÃ'åãÁL˜fÀðÐp)ð Ø*ÈgrÈ0>CJ2 ¿ÿ<ë àú7 6¶â_hà /é§.ta°Âh#l=0Œø—MmcFÖ&z1¶Âj†š0Þš7 Q‰…L&½‚a;F!„m#‚aÃL  — K‚ 3Ó 5'Äü dOPDãààá‰ÄŽm'I·i,:/ðþ ÚMÐzÒzlPt]RpÄŽÚNé6 HìKÔƒ`Ľ Ø@ ó„ ¢êŒ6Œ‹Õ:UFæ?ÛažíT'ÖìO2~™¹0 ÉreL¿ ü+Ëü Á)ÈhÔ—’™>%äK.˲ø„‚rø‡ð˜O/>f²A „3Áã&>ÓÿêêÚWÚ¶—íWºWÕ6ÅRÿëkÿî“jñ\S«tôâ“tÓi\&ßuvš ®Åk«ƒ¯uõýÿC_ï_ׯüØ6¿æÃMúøz›!ÿý°ßüà5›?„lÿiNÿœþ¯ðGðG½ÿÿÔy ütkþAzo_ù‡NN5îºÿ¯ZÿŠþ=ÿÿÿÿ×Ï ö¾‚ÿü„ðoþ‚ ôì0•_ƒßúì,#eÿÿÿÖl!?ïA}ÿÁ~×þ#oþê?ÿé~=ò Óºòtõ¿&ÿ¯ÿipßþMÁýëÒÿüÎgïúýˆ_ÿä‡8äKÿÒñÒÿÿÿöý¿Ú ¿ÿAÿ͆vÚ_¬Ø1ïöÕþ¾‚9ýÿÿßl„¯÷ÿ÷ê6õßÿßwýµþ¿EÁÿëo×zþ—ÿy7ÿÿõúßKÿôºm/ü‚Žb½¿ÿöÒþl3~/ÿûÿ­oÔ›ºûdG¿_ïÈÿôõ½¿×ƒëëúVBûÿ¿ýdQÿþ½ÿÿôµø¤«ëÉ¥ÿÿãÁk×ÿèBÿýþõŽšUë~­¤ƒºûK«×ïµiºõ^ÖÖë×]×ÿ_½ºÿ½××]ýÿW§õÈ®Ùÿÿÿÿÿb«_ô\ì×èÀ4É¿úëýÿi^Úà °Ó´·[VÒ½°ž©ÚO]…V×í'«[Kº[JÓö×ä1ZZí¯ÚV•×iiöºwÿ¥ÚÚ¾ÝuëûZzkëëÿù=ºßY=é¿ô½Á0A‚Å1#á±#á†+a„ ÂÅB*Á(—Ã0„0“ $Ó8‘ða8¦JJTà$ 1#ᦉšpØ0I4Âl0ISŽÕ´“†”0Œ öJÐz¯wïM§a[ Ø]µÿ×ëÿO{ÓÛ_Þµ¿ÿëìˆýùÿpÂaA¨ „" * B !Ë„#ŠG… °a. ˜A¨)¼ Ä)xT¾!'LBØM Ðl&“M°Ä$ÓA± mAaŠ9ŒSáb˜‘è Â0ƒP@Û 1# Ø—@ئ('> ·a„c a lVÚ.ƒN¶ÓÛJÒÒÛKïù ×ÛJ×µí´¯ñDDDDDDDDDfˆˆˆˆˆˆâ ¸ áB$4 Áˆƒ† ši„Á0ƒ M&ƒ Ó´˜„6‚Å8AábGØA±PÒl6“LRi¦˜M6Ri¶‚*NÓ(a¯ëé>""""""""""8ˆˆˆ`„2ᬄ0„C ‘ã±± )C¦špÓ¶‚ ج1 ؑᄠlB0ƒô´ŸHG˜""""#0,DHAè0„0A„"!?¥ëé%¤â""">—Ö@Ô7„ˆd\i:O§Jà v’¥¯è1A± ô´®­qئ)°“a,E„„Ä,D†@0øÿ<¼_<2¸†@?4 7ÈPþCDdœ†[jrƒIÈ=C$7â áè:i¦‚ÜÈd´ xeBÎä2܃S<4yÁWÈ)Ëìà¿ÿíÕjø:i¦¹<4C¡dÜ‚Ø4q ÿoÕWId2þ¿õ¨pg‡OÈ ƒøý"?ýnõéd'öƒä‡OÿåÓE×lq×í{¿½‘×ÿU¬qÇÜWëÿÿKÿ_ÿÇ×òÃû¯ëÿë„PfÂBy å>~"Y°ŽdK7ÿ›ÈH!/'„ó! ¾!û ×d^ £ˆ(¾!›„ä>"K öCNÈg|‡²܆m×r²HfÈÿòNëÿ…Fðôbh»ƒ ˜Fa4Â7;LŸ“ðƒÜ0á„ÓC £“ÞÉxFðÉù>L—“à˜Fñ}Öd¹0ƒ9—áK‚ AK‚ 2X d|a#ÁÙd99xA<&Ay"È>dpƒEh²²ìÊr A Žý}pÍ„ Ÿ 6x‘͇EúAÁ‰y¥q#¸81#º ›IÄ4mâê‚l: °ìHó—š3Ýt`Û¢é„`Ú0Øa‚0mÑulC ;P›‰}£ô]YñÂ6ÞŒ6@÷Ĺ¼Hê´.0†Cd¼Ÿ/'ÁX@Á=ƒ!GÁ4PÏ>9 ä'üH¼BAvC4rð‡Ã ž@‹!Œ!l†£Ø9†Súû¥}7½lV¼'®›zm\{h:NÅi6Ò»†ƒ» Ò±ÿI°ÅjÚOÒ¶¯IÁ‰Óa„I°t°Ðt®’l8bGšAô8t^hÛ‡F 7tcnľѳ1 °Ã8 ‰hÁ½6xpÏÜÑsê†*d/“ðƒÄ9@Ìa’àƒVE@ d¸2`‘fG„»!; Ĉ~!Ç.ÈÇ/ bªZÿMõÞë×ïÿ]=5÷Mõ}_ö—õU¤ÛuWO¤Þÿöñ^õé[ÂzqÛbƒ¤î®18p ¥cNá¦Òlí¥zM¤øT› ¢ê‘Þƒ†l*Ã< ´a¢æÛFF 0¶Œ6« Šðš #xdù2¼ Ðd¹ ÿ~®ßè_®½úëúµñ[×ÿý÷õooý_é«éÿk×ÕýÖï«ß«êÿ§Júnø­ô¾›øÖØ­Úm'uvƒÖ–­†!ÒÒÒl@ƒ†$wH6EÔ—¨½pÎ@fþ‡^þ?¨ÿþ;ÿ_÷×ïÿÿ^¶Ý­ã_mxÿ_õ_¥êÿ½?ïÿíoúêý=?¿ÿVº¶•Ó«tšW¾½7VÅtÅ6¯þÖN_ÿþïÿÿÿúõí.¯×õÖ¿ÇñZüÿÚëÿ¿ýo§®‡ëêíæÎ·]¿ÿ]jõÖ´¯ý>Ú½;TÿÿÆÝ7t_Ó¨/סÿÿýoëñ~õýÓ§“þ»Oþ„/ÿýÿþ?ê?°Çÿû±ÚéÕ®ÿûßÿ^ºñ§ÿõæÃ;ê‚6ÿû Gÿœ?ÿíýÿõö¿þå¬ÏÿÇûä6ÿõ®×þÈIÿé¬ÐoõüÌ,Bþ+÷ëÐ÷ÿúß×ÿþ ߥÿÿ¶Akÿ_ÿû %ÅoÔØ?~`ÿ »ÂÿüØ þÔ#oûÿÿï_ø#Ÿÿ‡ÿý0y Sø2§ÿkÿÿ¿×ÿäÇÛ\‚ãƒë¥ÿÿ¡ /ï§ÿÿÐ…¿ÿ÷_þ‚ý/ûÿÛA®¿ÿý¥ÿ„ ÿæÃ;ÿÿoqÿþ5ÿ÷øÿÿÿwPÿ×ïÿ£¦·ÿ¿ÿýÿÝëúþ—Y1ÿÿŠKÿÿ÷ö+ÿAuÿƒxÿø7 _óa§þl ÿÿù°cÿÿäWìˆ÷þ¿Ùþ—ÿò}ëßô¶¿òwج„·®¿ÿÿÿEÃ-ÿÿú0?¤¿“òpÿÉE½/ÿÿÿýÿÿ]´½+î½~×þíÕv×uõõÿ!ž/ÝvÖëuÈGÿ_K_]²7Ü„ô¿ÿëÿÐ]_û{ïÿý†òn¿ÿþßëþ¿ÿÿÚ«kk¥¶½¶•ÿÈ`a¯ëÚ[uÿòµ«ºútžêÓÛKmoÓÿÒí½}µÝý_î¿ëÈ£öD{}ëÿ¯×Üõÿ×ÿý䇨 ƒb“b­(#ÀHq#à &ÅÂi¦œ8aÁÚlHè4Ø0•6’¦¦œ< nt“a…mi†¾×´]2‡´­NÛIXkm¥ü† ?ßÛ¯Uù˜(iv¶¾«k½y8íïëþû"J}²#äQßýþ›"?ÿ®Òa¤aKÂ1Ré°šÓi4A¦v) ƒ †´ 1[a˜A„A·®aŠ0Ä&!; ±QÂ*lS`Æ6( ؤí8v„ ;†uiißiΠÅ{KEÓ»öÒì-¤š½kÿk§í«kw_¤ÚÚV½­¯_ÿâ"""""""""#06""" Áb""#6Q˃XA…@Ââ„,al&A—0ƒ  6Ø„ÐA„Ø—O P aaA¶ÃA©±PÁÅlT5Áv’v©ÃJÖÑtk %i+¯l4˜i:¶žÚÝ6¶¿ÝiqqÄDDDDDfÊ ˆƒŽ! B0˜A `š Ó†¼!5± h0ƒ‚*lSá0†(1NÃA ئ6Ò‰ ÄS í4ÓµÒõ~AÄqFcˆˆˆˆˆˆˆˆˆˆ0A‚ Àm„N B 0ƒƒP‚lô¦ôÄ „A„A±_Èiii>“â""â"""#ˆ0B""×Õ¥j—©ÃD}~#ØKÛI/®—ëÃÅRm®®ºù0ÐàÁ<5°B ˆQL ´¼DD  BøˆˆAãÿÈ¿ yqhiæEŒ˜#©°oä8à©ä øá—Ä2oaÓCD?ä48 È ¼C 3 x þä5œàÊ9 €Ö!ÞÝCƒ‡š0ÙÁD x@@в †@9ŽNd {^ª×Éýõ[}Æ@ðÔ²7üÐÿøÿµþõ<#×üP`„X}/ÿüÇkkÒ÷ÚÈGõ]iõqÙЭկÓÕuÿÿ¥ÔQp(ô?© ã°CX|‚»“·&:ª­¯ÿÿ÷¯„HA‚'#6|äø—ÈZ. è¢?dž|)ñ ǃ9Dg™ÇÈø7=‘Æb<Ð9ð‡†P2âàCÀ ø§ৃ‚² 9 ÑÈlòa¼ƒ6"ÈbÈ4YÔ‚Ç\›Írw“õÿÿßTa¶šÜzhÜ$u‰hÄúkF&ŒA…OiÚF Â0Æ š14oaóø*i„bhÞÂv¼2|”#á-´.L è†x"ÀA’àƒ2pL Éq>0‰{‚GÄMp³#ÂðGÆÂ>ÈžD²ï?,»#™ â ÙxC7' ᇠ^Ó!›dhuòCí®¾°”_ii¤Ÿ HæÒÕÒl3a-I´› Híƒ00šIéÃ;iÐM ƒa› HóEæ“h&à ¤l1/0Í„:j‚Ã<ѸièÁ¸—Ú0ÜZ÷.pgñj¨Ã8¸Mm5ܘCF „ô„Â7 ˜Fàð™/'Á0ãÆ0AŒ0@ÉpA„H3„™Êr t!<§!²°^&Pä4pAk‚&~’þÅWoTß»Ö)6“ôÚNÓîô“i;M«¤šï´Å:M¤Û×°›ÒyQuWa6“®•†¤ØgŒHæÃƒ¤õ탤íD»¤Ø:.©6èÙÒ ‡—X‘Ì0è¿ ØbGm.%æ1/4ƒ6©&Á‚‰}£ÛEÔ3ã èÃhÃF ¢æ0PPƒYø#x”ó=0yŸ¼ŸH)»¯^õþ­oÖ÷éuº¿½ozZ¦þšu׺IºÒt‡÷Iä}Ò½:VÕ¿ Ý\iµâžŠé×bºÞµÚm+„Û°›Kunƒ7¸zÚJô›§I´œ8bGpfÅ ƒ1˜PîˆûAâxZ/ý¥ ý úU_ÓÿÚÕïý¯÷÷þ¿ÿßo¯ýºÅ}~¿WÞû¿ÿßõÓuK{JõtÕ7[×]}=>ôßZñ¿¯¥¤ÿ»´ÞéX‡péi70oôƒ†l —o¼vÿÿþÿ¿ÿ¯}*x1ñèëë®ëÿ†"Ó_Ó‹×µ¯Uü1ëûõñ®‡Õñüuýÿí×öþ‡ëö÷·ß§ÿøét›ö÷ØOù'Òûצ»¢ê’k¯÷zÛ4¿éÿZz~ºͼBúú«þŸÿ3 ÿªÕÿúúüiÿûÿkýk^]ÿþûÐÕÓm×úßÑÃ[kÿßñ÷WƇû¢þ½‡X*ÇÿqÆÝGûD3)ÿuÿþÁÿÿÁ§DCÿ]§íà¿ÿ÷ÍgüS¯Çø1ƒÿÿñõÒúúÐ_ÍÛKæÁ‹«ÔØ9Àcÿká¿Ùù°cýM†QÀ"³`ÂðÞÙÿÝ{^q‘ÒÿÛÿuø¯î—üƒ¢¿ÿÕ‡ÿ‘)ÿÃ<Ù8jÙ (ÿëúíûÿáº_ûÿúõý¤ÿ@þ_ÿý?þh/ÿ®¾„ðoý†—̓ÿæÁÐFËÿ¯·MÿXFßÿŠlÏÿëZm/ÿòCõßÿ„l2õäÇŠ¿o|ìzOÀàÝõ¿’ÿí/òc˜r$iúëÿþHpÖ![ÿÖ—ÿþØHƒÿ÷„ÿ͆v'ÿö×ùÀh#„þ—ÿ~»Ù?ú öÈAýاÿZŽÖß׿_öÛcÿ»mW÷îŸÿÿPù1ýÑ€#ûýÿú_þþ„"pý/ÿ¢ñƒÿì0‚þ“ãcÿõÿ×ÿMuÿ²#ä ÿû_ýk‘_!ÿü„!§!þºEÔ˜ÿö±ßù?úÛÿè/û_ú×ÿÿô`¿ÿ_“û!Ãk’ÿBúÿÿë¶—ü>›KZwIµ×§Þ®­{m&ׯöÕµí[È#Õ¥§þÑ {kÿÿÿý‘ÿ×!ÿ×Û"ÿÕ»×Òÿù!·¥·ÿÑpÏ÷ªkòcþÚJØ@Úm}yÐi6­«Ô4›KíiÛJûJÖÕ´­~îÒÒi´¯ÓW]}´ôÝ×Û[õþx«®õ·¶½×ÿ¯þŸëÚëë¶»ýÿý²}vºÿŒ q#ÝŠ a6åáLTUaŠb6)é´¡„¢˜‘ðئ)ŠL ÂaX¦ Ø`’a8¨iEE0Â1†©±¶Ò»a„­4á„ai6—¬è>à m¤­«i]¥á;VÒÕ}Éí×ÖŸý×kzv·ÿý¯­dŸû_Ø@Èဃ  ÂºaNÓ0™¯b¤xB˜‚a4A„Ò¯a„„áŠMÔý¦˜… Â Ÿõ± ÂaˆAaÅpGœPA„@ì ab‚à  ‰b‚_è0˜MŠ ¦š§Òm$á…a¢ø{i&Ø[l%}éßÿÈbWm'JÚÿüDDF`Hˆˆˆˆˆˆˆˆâ""""""""""""#ƒˆˆ0B"!p`ƒD[ !b0L* (TÖÂi;i4Ðh0ƒx#ÍŠ^Åab‚ Ѝ lHðpÂA˜A¦a±# i°Òm$úVÒý/¬DDQ€‘± Á°„! !; …#ÂŽ‚]4´ÐA†)ˆMn8 ƒ='×KH>"""!ÄDDDDfˆˆ284µˆhõÈ(I/KªIÄDDG´½$¿­iöJí$­/Ò_ B8tà XJÒµÄCB„¥¦ÒÄH†Ë1b"?ù0,â߉qÃf<²-< à†x y<÷°ž·iŠv˜§I´º®Óº^êþ“n﫱^Þá¦Òºtœ›Òm/^žœ:Z·¤ÛMSaÑ~i Þ‚l1#¶‹¶‚ †$vÁ›pè¾ØA¨‘ÛyhÙ]Ú6ÜL&ìHûFÙ½D½MmƒFFц4b &hÄFæÌ2\jDóy|W¢‚„ `ƒ#ã`EšlfãÁ Þ¿ÿþšzi×®¯êõ]þµîÒéº×u}÷÷Òµý÷Ýé?×zIد¥õÚŠuÚoíêž©·^­ˆAÒ¸'AÒlCA°t´›IÒnƒÓ¤$wI´›@ƒº/= ÓNÀ”ѶÂ6ÃÑtÜ#„Ð~×ÿ½_ÿÿVµ_ÿÿÿßÿãÿWWûõ~õþ¿ë[ôÝë{Mõ}7M]]}ìÓlU[µuÓtôñZV’®–“¥Ói7KÛkh;Q#›KIÃ¥†`"l81/µÿëë¿Úð×OÐjµßNëZÞþþ¼1‡ÿ®µ½¶öþÿ¯×Ðé+ëþ¯¿] i}úëôÿW´¯ôÞÕ¾Ý:ëÛµ÷Óôé-[]»p›ÿÿÿúÿ_Oõ 6÷^í¡_ßàæa{ýãŠPc>B+ûk^ÿÿÿþ×ÿí/ô×ÿþ?N½ý/õ×ýï¯×ëíïÿþB#ÿÿ®?ÈD°ÈiŸ^ÞGÿùÚû'?¾?!é'=HhŸ§é¯iiúé׈]´¿§Çÿý뵃 {õ¼4Ò×÷ÿt×t=u_ÿøFËÿÿüØc¸FͶ³ÿÚÝ‚6ú÷í·ÿ^æ˜l?yxÝ(÷ããþ?È9ëéò Óÿë×úûMš hŸýDBýZ¥þ£_Šÿª×ú_õÿõú ½|AuõÓ¯øA׆Á¿ª› ~'Â6^l3¾pß6 fÁ̓Ûî—Ð#oô¿í×ÿÆÃaÿÇ ÿo.¿þƒ<ü‚óÿÿ_Küÿÿÿéäȶ—¿ºõþ—¾¾XäxXàÿÿ¥Æ½é~õU¥ÿÿá÷þO÷ÿÚ_ÿ6Øoþl2¡?ö•×ÿ`/ÿÿ­/ý¯ÿoúÿ·º÷¿õÿú‡Ãúÿ¥’pæp}´¿µ}¿ÿÿÉŽ—¿k¥ëÿìWÕþAFùÿáÿî¿üØÂ6_ÿÛÿÿ_ÿû";dQÿÿȯo¯Ú´û×ÿïÛÛÿä öEý÷ÿø«â¿ÿÿ¯Šÿ_ßü#›_ü†6g ÿý½_ÿþ—ÿ÷®¶¿~¿ÿÖ¿§ûiêõ×kÿÝ]÷[jëéß‘G×lˆ;äGß!Ü„ü„ýë¯ò ÿýÓdQý÷ë÷U÷ŠòoîþHt¿ÿÛVÓ´×Òm;»»ØaXi/ký­¥§ö–û×kö®•÷úß¶—­­ûk§ë·ôÚö¿¶¿®»_Úûkÿ­ÖëîBû¿í‘È£×ûÿý‘G²]Â0A±±#á±#Á„ ئ$|0A‚ aaÅ1A0ƒbGÃ0˜&ÅCV #a4ÛI­6ÒX` i§ $ÚV”4“‚;¤¬0”5ÛEÐwV’°Ò´]¶“M„­ÛKm/ÛJ÷ÛM{Kïí%ûä€Ù^éµµº´‰Ý¥ýkõýuúÿÿì eÁ\åa ¡šGÁ2ᨠ—@¨A„Û°šzp—„&!5i†+¤ÃlA4a9´!1PGœS=ˆA„ ƒŠx"©6)ŠpA±[=Š6(  ؠƒ8¨‘ðÓjðN#h4튻Õ6I7I†“ %}öëí« ,'í»]¯m«iwZÿˆŽ"""""""""""""""""""8ˆˆˆˆˆ0A—„A„A,C0A„!„Ða eÄtaaVÐa5}1H6!4a0ÐL ÂapEL lSÅA‚PŠ€–ÃA lœ4 a„c &›Ö¯°a&ÂIØ[@ï¿ÄDDDDG¡g. ƒ0…#± ƒœ1LÀ@A ÓÒiÞÐA±AlSlS=A„é* â"""!ÄDDDEÄD!ÁC0šÂkò€¤ý$þÈàf ŸM"' µ¤Èàftý+I×Hpƒ8­+KKC´Å3é-b"$2ccˆÿä Þ@ðgr†d<  Îä2,ÀÇ<x‚Ølí=4b@ðÕšƒ¸FÓ!܃c?àp9Á‘ɹÁŽÈ>CluÒÂ0Üã8øt¦›#àHÒK"Á ËÃá €'ï«zZIºpùqÈ*¾C$7uÈïÊdp<¤GI {ôc~82àxk¦ëÿú÷Ý—Á–´—È@þ•긧ÖúÿŽ*.Ö¾ÒØw x—ÿ¿ÿúýøû‡ÿUÿýW]{Ðiÿ꣪© !ß÷õ×Õ׿T’ë ˆèŽÍŒÐCa…>ÉŸÃ8Í…<öG³áÏeÃXà( †Î2 vEÁZòì†mÒ̆–È=…ÉÁàƒTÎä#Øä‚ A;"¸Tõmõê¿°CM˜L#{F÷£Ô#{Ä0á£È1äùgðâPgÌôÂx¡Ä aN…ð y>'à¢@Ô`ƒ!£‚ —Fd{œ Éœ"@§Æz8 È Œ3ƒ>ú.ÊÃ6fÂe.ðr;8ö\# Þd>r.rÈ?oÊCC7+!GȪI/ƒ6%TƒaÐA´`Í„A°è¾Íh&Ò‚  ƒ‡‹Ì±h Ìf;¢ê‚m-6¶Ã ¤`ŸèÁ0Î0Û<Z0ÜK§jŒ7ƒhÛ6¨Á·ÜôѹÐ&¡š1 ‚„nvF0Ér Ç„C\0™|4P0Á"G2'‘á.%†ì—Ãq0™ þBq åá† È E…I"\C<itï¦+WI>›z§Iºu}ÝŠ}ÖÄ8pÅjØKJé·k|8:í$ÛSͤØaÁ‰¤Øgî“´“a›aÑ~‚l t]:m3a2ꕃ6% Û<ÐAô`¨ÁáFFÛÑ‚†p!¶ÑrhÃa0×B]ª¦Œ1#ª10Á“ðƒÄ80Œa’àƒD€U ‚ d¨‘gÐ6#¡ÿOúM­klÿêý?ÓýuQ=]+õ½ýô¯§[¦ý+wW«Õ¶+[âšI½ö+ë§I¶ŸvöéÒt+Jé&Õ´­+à Hí¤í$Ú °ÄŽé ØTØ3`Ê\žŒ Â6Ãa4µFxFæ¹þ?ÿõÐëvïÕÿþ+d2ï«WtŸÿõ~º¦•éû^ÿ½ª~µÿ¦µýn›ß¿}Òn—·ëõ÷ß¿iÒ±JÖÚnŸ[b}[ B– Ì¢ý àÌm&ÿ zôÖ¿× k†?ÿýnÿïÿßÿÝzñï·þ¾º¿»¿ú×ÿ{ÖÖ¿Öï­oéþ¯Õ*z÷«ý¦é¶Òâ¿Óé~„ÓQ÷õæ€Ú™˜ÿÿúÞ¯¯B¿Šÿÿ{uþ+ãëÿëõkÒaŽ× mÿ~¿ëZ¯ûÿßuþßÿÿÖúÚk¿uÿ!ƒñÿ× †’ ÿû_ÐÛþ6Ô‚Sòœ_\ÿ”z “÷ÿ­dâÿÿæ€ñ 3Ì_Ž!uÇÇÿ¯è{øcµÓï×[ixÿõþ³ó`ÿþpapßþõüþˆhÿè·ü#—¯ÿÿÁ÷‚<¿ÿ¼l?ÿÿ‡nv ƒúÈSñ/Mÿýù ‘ ø¯ûãâª×è/úÿ mƒÿí¥ü§ÿ6ê‚ÿ̓GæÁ£ÿáÝ Ÿúýg¿ýûir¶ß®ïàŽ_ÿÿî—ý‡sþ@ÞžƒZèÁq!òCéØ"?_È.9ÒÉŽ ëüBÖ´ÿûÂ^º_ÿÿþ‚â’ýúÿÿ¯!g„ Á¿ô ù°j ÿÿý×ÿoÙÿrümø#˂䞺þ߿Xü#GÛý×z¯}/Gù7ÿKÿ­KÁ_ÿÈaÈ·“—ÉëäÜ‹zY!ȶXàþÞ‚ýïÿÿ°Â ÿÈÐ_èóa³á>³ÿþ¾B‘_[þÈAíûÞŸúÿ!¯ü„5ÿýrþÿ¯ZF…ûÿÿ¿ÿêÿïúº‡ÿUÁÚþ´¿þ„ÿ’Ký/ôýáá…ÿûki_¯“½o¿õµõ¤ˆßºmZ××_uëÛ"ûúZzý]o^ÙíÿÛ"¯ÛÕvöïYÿü„¼ˆ?ßÿè¸4ÿðù7_òc¥ûËï$>—×iz{i6ºM¤» +û[K_ä0›ÛIôÕ×]þ×Nêý[K´¯ûmuuí¯×õ¿zÿÕïoýë_m[¯ë÷\Šï_{úÿÿÚ_ÿ¯ìi°Â0ƒØ0“ÆÚH0ƒa‚PÂVØF0v«iÞÉ› $ÃK6Òa¥PÂ0ì0ƒmAØVI4Øa+Ku°“a ¦Pí­Ò½{ -«°ÒÒí/µI´ï½Ò´½;VÒµº÷[_ý´­úÿÔ¸ÿÈŽ“zëô­‘GÚA± ªbšh1I¦…/ Ø„Ôü  0ƒl*bƒ°ƒbbˆTlKø§b˜„ÐA„TÁa„"§<˜lHøâƒa °ÂA6*QA4m¤špÒâGÆ”4›IŠNFv“ +Âà ÚPÂÒ]Vtí^¾ýtõôí}´•»­×¾×ÄDDDD8ˆˆˆˆÌ""""C4qG°B ¸hL!`°Âb0ƒ …°ƒ0˜„ ¸4@Ëâ Â—„&¡«A„ƒ R 9|RM5/Š—Å1MŠb±LSûŠA„A°Ø¦Ò  á„¢˜` Ó¶+°Œ ií¤·j¶Ÿ„ÛKè ƒb"""8Ž"(À‘8†CAÜ0B 0A„3pB"  BÖG„&˜„ÐA„ÚmˆMA±A0ƒb‚İ@Ø‘ðجàPÿÓøt„DDDq""""""! `„DB!„,hXA Öž—úZZOˆˆˆˆúIkúŽ—ÿV’ö•z[„1 Ó`Â[iV"a A' $–"(0bâ?þC$6y/ m ¯'Ä[ Eä2²Ã£ ¶äÇ C A[ˆky¾ x/ÄO!q˜ptpíÑw?pVC 4ÿ! ïþC!>A¬rqÿ|á–>îM›$.E‚aÂÒ­¥þ¿¯ò Ãùqô°fÂA÷ññÇüwÚý¥õ¯ßPÁúªãþ*×»úú¯ûÿÿÐﮫ¯úþ¾¿þ@ðÅl‚„4BÊÌ…¼ƒBA ðDu CjýÿòNëàËàƒÑD|G„"ŒôÁ%Á2 0J$ Ì3L \5ÌÆr<Ì3ÈøÊ>Í3á°•$ |!ô\3O‘™ž#á 3a˜fh¼ ˜Cá‡"á‡Í™ ‰| DÖ²¼†”d-{È68__ÿуq#Ì#ùtÃ8:0ÞŒ6-M7¦ši³á 0Ó´aµA£ …TôbhÃèjŒ0éš.ÆŒM­˜*aŸÊàƒÄF!„b}Ô EZ$ VOÂd1äø Á“â~<  Ǔà¢AÏä?1ä¦_’¦GdvBP"‚0ðRìàeœÈï%×r†`ä È¿¤á¦÷–Ð:W¤Û@éjØbG1#›U $ë¤ØbGt›$s†l*m&™Ñ}¤°©´ƒ¤ÛL$›‹ªA¿bGm&ÒAÃsͺ6À¡Ý_MoônFÛFáöi£aƒiц&¹à˜F Á0ƒà `ƒÔ ÉL¿+‚GÀƒ'Ä)Èøþ@ÇävBP‡ð™p]‘̇¼%™ã*½}+âºÚ­è¼½¹ÒVÓkõzM«bÅRúMúM½$Û¥«ûAÒn'zoI¶’°õƒ†$s¥áÁÒt›IÁÁ‰Ø3DŽØI´¦O‡ ØfÂR ±/4a›æ êŒ6 ,'¦F é¡…Á°Œ1L# 2\aD|>þþšúýý„·»ÕÐékz½tÛÓëuïÞ¾ëw¯×ÿkýzú¼o´ôžý=i?_OOM·«þ¯ºì'I·Þ4›z$r†$s9´œ1#›F2?¶“6‹º/ÒĽF.èÂ}m­kô4õâßÝ?û¯ÿÿBýUÛ××xÿÓý½¿·÷ÕÐý­~®·ý?N¶¿]ÿÿMïÞ·¤ßöÕ}Ó¨»««‹×Û Šo B¸®¾?ÿõúã¥W_ÿ×øÿÃwZé¯þžÆÇ¯¯_ëßÿýÿÿêßÿõêÕ÷æßÛJŸwþéÿ®:¿¯¦ò†(¶D¥ÇëÿÿþŸý¯àº|Ð2ý÷â ý­ÌÄ4 ýëúëô¿ÿõí!ÿûÿëÝúÿk_ÿ¡®šðŽwÁ»ÿÿÿ_·_ñ_èv•Â8Ø~é!à¿þÁ°ÿXÿÿÿ^f½?þ¥ jùŸà¯ÿÕâ~Ûÿ¬üÚÿë®üØjÿþÿ×þl5¾ó`Ã\#gæÃ;ûçˆ#gÿöÛÿœÈìÿëÿ¡ö¿üGÐ/ä!ÿÿòGøô«ü‚Oÿ ÿ~!¿Ð_IÿÓÿÿõÿû ¿ýê´ÿàÙ ÿô#ÿÿÿÎëþ¹ÀË6ê³þ³ÿúøFß÷ÿðG?þ ëÁÿ­õõKòoÿý~¸"?õÿÿPEú<¥àˆü†í^’ÿÞ‹‹eŽÿàˆÿÿÿö¿ÿë}þ‚ÿýü ¼fÃ;Kÿ÷á=Õmÿÿ¯ÿÿ"ä ÿkÿï±]ÿÚ.={îëÕëÿ^¯‡ÿÿÿÛýêßÿ&ÿ}¤¿éjLÿô¿ÿA^[a, ¿ýº_ëmwýÿÑu&?ÝSþä ýoY?­ý‘Þö<„ÿµµ·¿ºÛ!Õÿüˆ?÷y=¯ÿîÛUúïý×_Ýëÿõ¡ KÿþÕµm}{®×úü‚ˆ¦ÒÕü…½/µïöÕ}mz÷­××úzûÿõ¾ëÿ_]¿ÿò|„»õÕkzýuþ?þ¿ýt`3ëÿ´Ò´]Xk°Âì0—m¤ö•¤ÝZU¶¾ÚKö¶“!‰mzl-¥i5iz}ÚÚÞ¿im¥Ó¯ûiw·¶­ÿõwkkë¿ïúû×®ÙwÿÿÛýkÿýö$~6fábÅ Š l0A‚ ;n0ØK¶ÐA6( Ó8 ÅCHø66*º[MƒÆ¬S¥i0ÒX"¡+a„£m/Oa¤›„Û ØI°¾¯¶l$í¯k§®Ý}ýþµÿÚý¯ÿ¯äqzì Âà „Â††ˆbˆ´Ða1 œ1@ÁaB 0Ÿa0˜A…/AŠh1 bƒ9½1 „TàŠ˜A¤ÅÓA„q#á±.ƒb˜—A„ a0A±LUDƒ ±# Ø‘ðâ•´“VÒM°Œ aÃIí4ûÓ]†¾œ†&Õ}?ñDDDDDh4""""(ÀŒDDDDDDDpÈàpDD  #ì! ! (A„¢ „á„NÂjØP˜TÒ ˆI„bA± ‚ 1T0ƒ0@ ‰ aÄŽ„>4á„cšié§úªOˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ†\ ÂÄDHÇaaž­„ӄئ“0ƒh  ý/ñ˜ˆˆˆˆˆù0x¤ºÕÿ¤–¹h.é/§a*†ÓúÐa± B–¸ˆ† )†–!‚b#ÿÈ ø‚§ÉÎ ¶q; x*áÁ²e?½<4à†@b0ƒL†Û8ð@È-‚¯7™c<_ IÄ öC.5‡¨tb`郣!’—„z`䀠¤38᳈ ÙÀáß!¬ÿ¹ Ž–C\t¼!ƒƒƒÂàöC 3¹Ã+¿úß×ÿò!‡ÈÂEwvÒw{ptßÿÄ~š]­ZÚ]_þ¾éÈÇÈdøþÿ‡ÿåÓ_ß_È|†Ðúúúÿÿî¿òëøþ£ëÿÿ¯ëûÿ¿ýÿ…õÈ-‚®¿ëúÿiÿÿ<;›ˆZ"‚›ˆ^8ùü…ðŠ#ñœxgÞÜxŽ ÑÙÀCÚ! r øaÈ ÆÂLƒw"Á ø@¿„^Ó!|ƒâd6^BÙ îCjÈø‡Ã4 §òàÄ"@ÉÄ0Ï=HIbȹÿK ÷÷/A†]WðÄŽm Øf‰véç ¤ ØD0’m ØbGmSI°ÄŽóÓPàô8b^i3} †aA·Amb_`̓sb* °Î0oEÕ†Œ7¢êì&‘ƒhÜ0ÁZ.¨Ãqiáª0mŸ„nhÃôш9@J`˜M Éúaö–Vx ðà‚(Íœg3ÂÏä/žS„PSqä ñÂÜ™C<x\›®ïOOM¯þ“k´Ú/´_Jí6¯»ºNì&éÇ}é&Þœaý[Ki&ÁÒÒ“`Åaݤ­'h´›y‰Ã9âûI´†l-&Ò°f‰y¤ì3a œ1/4mÑ‚‡EÕcßÐA´n0oFá„m´\ám5âGš14\Çá4baƒàî_࢈ø€ÉpA„N ” d!Â( €ÊÕïÕ¦ÿW¿KÕÓ×Côéh¿ÿúu×]Öëûuþ⪴®·é]'ãÒºi·n*½wéR~¤ÛÛiÒ}¶+§ÿVÒt›´ž›WKEÔ=6“i83D¼ÒmÚ Œ8t`˜g£ôa4\¡œ £ÿëýµ~íjÕý(ÿöªÿ·þ¾í:«ÿúõ|U÷Çn¾¾šWªéß¾¿]oÝl7¯Oºôêý¥Õ¤ÿ¤étôœS½6“{ð&ý'Ý]§JÃtíD»«a› €iÕŠþÁÿÿâÐÿXº_cÿµúÿÿí*µýzÿ­Zþ=ÿÝ k__õ~ ïÕ¥¿{ú¿¯úݺÕWëÿNºMïÿêôëôÞïø/ó@Ñô÷ZOÓ®ÿæ?x„Ÿ×ú¯Åqêÿúß_~¿ÿÇÇÔÿ!™=…ÿµêÿþ“ÕÕ?ÝSãÓÕÛÿ_¯ÿõuÛõÿø/ì?î]5ògõúöïP{EÓ¨÷ÿr Oþ¸¿´£ÿÿþˆ?ÿÿÈ.8> ¿¸‚×ö—Wëëüãýü1ÿµÿÚý~ì}ëÿÁ}Ã6 ^Ÿ›8 |#gþí|7ý¤Ù§Ýg¥þÛÿÿ^ÿÿÿׂ9ÿÐÿC·ÁÁßÿãý “žµÐ|œ6}}:üBþÿ3ÅÂ_ä?[[Kkôï½x7ûi »«ëmÐOÿW̓êl1ÿÿü _üàkþp2ï‚8ÿàŽ?ý×ÿÿ·ÿÆßñÆ¿ôÿöòéy1ü›†ÿÉ×÷é¥ÿZêHpâ^®—ÄäÇÒÿÿý×ÿÿïÐ_û_Õú ýP_ûÿ6~l4?þl3¾¹°Ë6ü³ÿû‚9þëÿ÷ëö6+ÿ_ÿKðÿ„`3;¢áŸþ«äÞëÿî¿ÿÿõü›ýä‡öÿ&:_ú_ÿßÿùùÿäwÿþ‚ÿüü OúÒÿï~BþÙòEÔ˜úý§÷ÿ_Ód ú_ým‘Gÿÿ!®6ÈAݯÿ¯"û~¿ßõÿ׺õõÿíÀá»þ²p|ÿïú_ÿƒþ—÷W¿÷é6¿OÓkä0õ¥þû—kÿú»ëßÿúû®êß{ëºÿ¥ûù|„ÿ!ÿ_ý~ýÿul„mr{wý_}ïõòoºù1Ãy7ô¼ý®®¶•í¤Ú½6­¥ê“iiý­[§ò@g§[ir@NëÚ·V•×~¿M¤ë÷_ßÚë×jÚ“¿öÖÒ×_muþýÖý×ò(ÿ}‘ÿöÈŽä ÿ®¿ÿÛÿë¯ć8iALTW°`“A„q°Â1†šlHè?‰Iªpl0Œaí6N 4â“°Œ l0¶®’m„Øa-7m(i§ºÿi.›iZí¥i-¥ö”4½´ý½µÛU¯¦Õ´·Mººm«¯ëú½Õÿþëÿ¯þ¹0©¤ù|RLBi¦š Bb“M„ÂbI„k­ª‘áAƒ7bûm„A´lBiŠbƒ6%ÐlP@˜¦$|0ƒ a8‘ðئ( Ø Å[L&ÅL ÂLTK ÓMˆ;Æ [ „„i6‹¦ÚVÃVÂÞÃK»I°¶•­ÛjÚßiéõºýÖ¿¯øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒÂ#› Àã8qÁ0B Á!‚eÂp „C„Fb ÂaTa; Ó * SL&a6±M lKá§„b˜¨lP Ø‘ðØ… $Å åö“ b“V$ØI†$t„a .Ý}­­­§kë¤!Å""""""8ˆˆˆˆ‡dp\! †¥Ã…#± „$8ô„Rð„Tb˜‘økb±AbA‚Vb6$|8¯¤’ÒúDŠ8†A‚ b ¡h5ä ÃUÒÿÄDDDGíRëKKïA%i6º^pb¦!'^ < àO>""ùÀÄ=áÁ^0U Îà¤9Îd¼áµä ·lâ‰d2w"F ‡LŒL:äH < ü ×äÉœÈ>ÿ®@|àÖ;ƒ‡Pppppê@ðWàßÿë Ìõ_û¿<0?.>áÓF'þ>;_þú¿~ö—¯úŽêþ>¿ý%ÿëKëÿÿíÿö«þ¯¯ãŽ¿®¿ÿÿúá<ØAð†gd/L8äL;Ù„/ä2ø†,) ¨!¢,‡‚.]^5Áà'“××ÿDƒ¦"¬#{ #°Œc7„«<`ƒDˆø€ÉpA‚. ¢A dà@Á‘  ƒ lä äH0åYÅ!<‰ã ߈f~AðŽÈ=K,p™ Îð¹pA‡!¤ÿáœ%ÓAÐMá&‚‚EÇÑ‚hÛ`͉Á¶Ñ}† 7¢é†p%Qsq/°Œ àZd ‹‰ø*Ñ‚a<Ÿ£a“äA‚Ñ 6èp‚Cg7³#Ãyäxn%Ä?‘ ¼ “ _ ‚‡"Á²VC@ð`r cûPƒik~ÞûºJ·î•áöÃa¶’l-âG6­†ov¢G68bGš6éâë‡H6Œâ_hÂhÛhÁÁ› ®À•F‰tðš0Ú¦†ÓA„Â70˜A„a†œC „oyt7A’™æo ߉` d2ޏØJ„L7â¾[¯õu}{}n—Ò½ÿŠ®/×éÝÚ“¥lWºZøa1=7Oïï9´› ÜKºMƒ9Òl‘Ø‘Ý&Ãí¤„Âa$Ã:1´a†A„WhÂhÁ·ÓFj „o]k_ÿõÿê׫׭ãö­Ó}ýý^êûî­ïµZ¾úßôétôÚ]ZÝ4Ý7 íÝêøLB“ï@áˆA´œ0AÑ~pļ%ê ¿þö·Ûi¯ÿÿ§ª¯ýþ¿úë¡Ö¿÷zµÿÿ¾êëõ÷·»I&ôªÒmÿ§ïb¾Úiµoû_V|!ðµ ŠÐý_ëÿÿÿÓ®·úÛ_^»o¿ýjÿêþ·TõÕÿëéÝýõõ]Ôuôƒƒòȩ́ÿÿÿÙÇ ä%?ÿÿÿÄ/×óáb¿þ¿_ÿþ·ì%u¯Ò§[Õ/ÿ¡úiÖÿä€oÁ¡†~åÁÿÿÿˆüËÿëñׯ@½?þP9Šð××ÿÿñ v¿¯ûÿãøÿÿ÷6 ÁÁý| ¿ÿÿ¯æ¯ _ÿ¾óÒÿqÿ¿orÿñ÷ñÿïÇä!ÞGü\ö‹§_ÌŸ‚ÿäQû&?÷¥ƒ`ߥéwÿûÿÿ„¿ÿõ„?̓P_ÿƒx@·ÿG§ú8 þlá=­¥6 Oý÷_ÁýÇÆ\ÿÿÒɸs8}×ëòc÷_ÿ’ïëÉ¿ëÿú ÿó9dÇK_ö´½ÿõÿ/ßæçÿuáü#gþl×Ód ù÷þÈ£ÒëäAÿÿíü„×Õÿÿÿ×ÿü?uþL¿ÿÿÿÒÝ.ºÿõzýú ÿ Ž‚íI´¿¾ßÖÿV×]×÷¯_ûK_ò7ýßlˆþí‘_ÿ·õÿÿ!ÿëÿÿÖ8ý¿ö8ÿKõÿÄ~»m[^ÖÒ´¶ý}m/î¿þëÛKõºôí~×K×KÿÛKôµý[¯ÈAýëöÈõ´ù>ß½U~½uÿìz°ÂLRv„ÖÕX¨a@Óa„cÅ1JÚZi¶•¶Øa(a&j¿§«jÚþÚéÿ½Zý¯ÿ¶•¯¶·Úïé}¯M¯{¹ÿÿä ûAaˆMbPGø#ú „Ä&‚ Цš0Å Âà AÅA±PEM‰LP@ÂbGA‚؃`ÂAšl0”Hè5M0­­¤Å6ßa/a­¤»a-7­Uµý=ÛKt«O÷[õýµÃDDDDDDA‚ ¸l!!ÂLa‹M0¬$Pìÿb¬ ÐlS ÂaƒbS±#È ÁÅA±PEL abm„‚  ŠA„ØaÃj˜a$᦭¥µýÚzÚkö–"""#ˆˆˆˆˆˆˆˆƒ.¡ˆˆaŰA„B!¡Áa„"@ËŠbh;A„¶Ä&½Š „A„ ŠA„3˜L¡ÂĆaa† t""""8ˆˆˆˆˆˆˆˆˆˆ28„8ˆ°ƒ@Âa4ê›ø‹ˆˆˆˆÿzZéh=,BXþC y1Èy°Pä2Ÿˆd„²†Óá0jäÃ8;"¸R†¯é0äÁFp0àä2Kˆ2q jâ\C ãIú û<3Èm¹ÅH®@ð'ò ü†Èeñüà«Ä2²ú}¯Ô8{˜8: 8>Dr Ž᣽ÿÇ_rÏÚwM0áÿ÷ÿÿÚö¿ÿ!”>ä6Ç Ò;ÚMÿÿÿQññý­­W÷üŒ×]{ÿüTþ°ä܃CC(êùH×_ÿÿ¿ýx0ƒ £Í3v0A‘ð ÈfL †TÊr/þByN@¹üHü”Éñ°ÜD³q?!hD³q ÞÈì„™0™ ’¡ åá,!™ÇƒWåá Ù¼aÂyvAü'®¿ÿÿþÁ„`Ãi„Öš.aé£ é£hÃ0ÃÃh¹7ª16µL&šh¹°©„(# 4aˆ°¨ÄÉxA„F³q?âxL#ˆ4cpƒ9@åÃAr®HrÇ_ N?þº¯ìVîÒ9°¸bG6“a‰ØIè:M¤ÚN“ØT›h0ƒ;`ÄŽÚ.êØbGm6t™Œ»¢ûH6 KÔbÓ‡A7û@ÐAÃ8Kí(fÀñŸŒãÄytP@ÈZH ‡>‹†Yñˆnù;dG¿û!ÿÿû]t¾ÿÿ²(ÿ^ÿúüWÿW“×¢Cä‡"ß×ýüR_ÿñ_ºÿ_ÿkB?«¿„ ûWªkÛKíJöׯ×ukÿ×_õý¾Õ×þÿÿ騧ý¿ô»û î¿ûÿá /úþŽÿ¿÷ÿÉ¿ÿëè/á¤ÚO¯j»×¶¶“¤ÚV•­Ú_úéûk¶²NºýjÚ_k}×ëÿ¿ÿëþDÿíl„ÿ­}ÿÑpÑø¯í×õâ¿õ&îMý*ÉËÀÁÚU„A†(  †L بi0`“' ÖF0d!ƒ 4´ÓM†Œ4íˆiÚ/ƒa¦ÃÆí8jÄi§a@í+ ö‹ pÂÓ½{zþ¿Ý6¯_õ¯õ¯ýÿÿ½×ƒß¶EýÈAúþºõÿbb´!—8†!‘ÐA…#±AˆA¦G„ Ä&œ1 L&ši±  ƒ ³ýÁµaÄ&‚a0ƒ‚?³ô0‚ Ø„ÔæÅA±NÅ=ZZÛiZvº]í¥ký«izß!Šû¯óáÖ»jÿ¯[WÚÚÿþž¸ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÍŽ"""""""" `„A— « „‚0ƒŒaăc8a&)´ &Š`Á$ÖÕ6„aM6Aÿ: ª½¥¶´öV¾Ú§Zºëÿ~¨&ÄD] Ä! `¦ „ò<) Å*iÌa! &aÛš0ƒb_aal Â:„TÁb˜‘ÐaÅ1I´Á‚RûI‰І’i¶v––Јˆˆˆˆˆˆˆ¨ˆˆˆÌ ˆˆˆˆŒò#¦">BA…DW 5áˆXbM4ÅN$zÅd €­^AÑ€šÄDDDDDDCB!„A¯JÕý-qí&Òúò¯^Å1 þ“_Ì:ØJ×KÄ&Å0Á(¯@ðj°ÄAˆˆùÃK„2CVÈY †@k„«VT<5‡ ȯ ¶ \OÈjñÃ[ô ˜ÈSáÜ‚Äd@㈷ÿ„a· Ð8l8{[ xQÁH ^D†H*ù nÒÒÐA¿r‚?ÿàáÒ™ Þ; f œAŽúÙ 5ÿý{„ÕAÁÈ-Š=Þ£Žþ¾¿Žÿÿ쎆¬׿×ÿý/i®ˆd‚ ìކ§ýÿÿÿ¥â?wÿkwÿ]ÿß´Ÿòƒâ2(ä'„ɹ «"ö¤3pCA½–>]Åä-ä6ad°¤X!ž2dÈÂNCjŽC*j9 ƒoC,|ä5ýûü#a4Êôb:?/ÓF Þ‚x%ÁŒ00ƒà—ü ðx%Á("¬—A‘ðAà¢@à ;qÙ¡oÄ,Ì÷_ÿÿÿßë®ñØ1ÿýwUÿúkþŸ±ñÿú÷ÿý†ÿHŠ?þA«þÿÿÿæÀþ_6aP7ÿûiMuÿ¶oÂ6|â#‡þBž¾?Cÿþõÿû0á~NM=´¿îÿÿÇ¿þ®ÿÿ´¿ý/ô–ÿÈeÿýÿÿÿÖ—éd2¯ÿ¿ý/úÿ!Žì ¼#gÃápÝüçÿÿ÷K¿þ#]¸ÿ¯ô]ký kÿÙ '¯õïÿÑpÏý/¯Õÿ¯ýÿðE×ÿëÁýd¿ÿÛ¯ªý}Ò"õéx?Õ„ƒÐüØÿöÒÿþl†æÁ‹i¾ÚÿοÿØÿuýû×é~ä õ¿í‘ßß×û"ŽõþÙ?öºúä ëvÿÿQ¶B¯}ÿoäA×ÒòNE·®’ɹÿÿÿþ+¯ÿ|ƒ÷ÿý×ÿÐ÷ÿá×ÿm*­Òí»^ÕTé_úþÚþ¿Ö¿õëíúõ¯î­ké×ÿ_¶ºé~ö¿®þ¯¤ßÿè¸4¿ü“‡÷¯÷WKýÿÿÈŸ±_ß½!‰Um$=¿Û[×n­WVÕº÷VÒ_µþë_¾×û­´—þÒ÷¿ëÿÿþ»wo²{òÿÒµþ«ÈƒûüñÇÿmõúä‡;‡ëýþ–ÚI¦ƒ†ÄŽ¦Ã -¶’i°ÂM„¯m(‘Ð;a„i&œSiZiÃKa„…a„›¾«h4ÓMÒÛK°ƒ¾Ò×µ¶VÂ~½ïWßÿëúûkÿ×ë¶D^ß!ßÞ©§¯ÈAò(ÿÿû××¢áŸì{0ƒ ¶Ó ªØ„aÄ(#Ì&lPj‚ ‰„Ú PA„LPA„AÌb‚ ‰±AŠb¸EXJ$y„A„ $Ó6$z0@àŠ˜ ai† ب—ØAÚ­Õ¯zw¶Ú¶•¤Ú_ÿφ_û«Õºõmzûßµý}×]ío÷]WúÁ‘À¬À±Cˆˆ`„A‚`‘Ã\ `„G ! †0L! b0„DAˆXaa4tpÐ0‚äxB & ªa„cv­¤« #;Kmà CI†©ì4×¹Ð64—µÛI°«tÚ_{¥ïK¶“kuýé]Õýûâ“Јˆˆâ""""""#ˆŠB"""ÅPAÁF(  ˆO©¶Ä¶*cÄ ƒ6$t@ và  â‚Å1A†Š ºi¶“M6•ì4˜0“¤Ã4Õ´­/uÖt¤ëø28)‘ÁLˆ0NB ,0„"A‘Ãi†!ÌAa0ƒ ^ƒ]&aŠö(  1LS݃8¨`•i1# m„Âi×­y gHDFÄq`Hâ"""8ˆˆˆˆƒCB"D=¨† ƒna;A¿Òúá‘Á’“鈊B3ÄDRØa$ö“#‚¿òƒ3¤‚H?±BÅÖž’ZXØA°–Òô‡R±Xˆ„œSu¯DL6 ŠÄDC¡b?äÂùÁG>ò þAü†§<6qÁ¯°áÑaÝÈ  d Y÷wPàáÔ:0(`ƒ ¶œC"Ì‚Þ;mrOÿ¿¤Ù €Îáž‚Øfÿí~Ö“y €TzÃÿÿã¯éd2Að}ÿô›ÿü†HŽÿªÿÿk¨ÿúê¿þ¯®¿ùÀ‘Èä`rrC§0:¯$ú×ÿüâá¼—BÌ `”á)ȳ §Sq tP o!üƒ_d°„¡ 0™ðØGB.‰ñ /"y·jì„òÊr'‘ŽJÉF~!û²>×Â;!§†*ëëöž‹¦ƒ l#m¢æ4\ÆŒ6‹˜Ùðš0n˜FS ƒhÃê©„aµ „Â70Œ6 a š1 #sL¯ÓF ×7 Âx!™È0ƒ'äø Er$är#„8FÀƒa$=Ï„‚ Á aÈ0äŽBÁワ¯†$saÒÒm+IÒt&ÒpÔHæÒl0A…;¤Ü àé6“MEúAÃ;óAZMƒaôlèÙÒm&ÃÈü$vI¿bGš ¶$y¢ô;h àÍâ+‚U“™~2\aA’àƒQž˜@Á@ÇB‚ 8Ï`Á!ü"@§Å6Îô\³Ç7þBñÇ!8†cƒŸÒ² d4¬†Ç!†¸ëõ±_¯W¾é{Õ?ïMí¤ïn­‹öÓ ×ÛßIëI½éXþž¯Út›iŠmÃÓè è Øa‘ƒnŒl°¦ £ 8‘ö ÙQtÂ0moEæŒÑtуzi„a¶‚0ØMQs;á4b # a˜ `ƒoy>'áT\Á c!ýƒdxfãÁÏòˆq˾›ØKu­ÿíï÷oõ¥«ÿ^Õû½iúºþ½4ôÚ¿´ÚíWûôé_JØboKIÁ„Ã¥«i6¦Òl:ZM†$s9´› ØDØ:.š»M0¢]´›§I¶i áÄhpŒÑtцôÂ0a°‚¨PšFàÉòÐÓ­Wcn¼1ë¯÷ÿëúëÖ»þºêíëÅ~¿¯ºwÿ÷WnªëÕµoö*«VÚnö*¯ªöõn)ªvþi:N“o]îôÞû‡Ai6‘Í¥l88bG6Øm_ÿÅyð€ÇàÿúÖÿü~¼Wý]†*4þ·ÿ¿_Ãëõ÷뮟¡[¯÷ÚÝ÷_­ªßÒõ½×~ÿÒo~Øé[i÷÷iÒÖØ¯ßïƒf„6N¿!çÿk^A'ù'ÿõÿº|Ðýõÿæa0Åm´·ÿµ¿ÿ^žº鮯ïÞú÷¾®Ò¯ÿ_èkíoþéééÿ¥ý†ÃÛü»ÿàŽvÒ G?ÿÿÿún7¯CÿØ>f/ý_ÿ×ï± Š¯¯¯Á¯ýÃö¿×aë×Oýkþ?ÿ͆†l3½póa«ð=¥„ ÿûÿù°Îýz›ϯ8ÿöö7¨ëãþ8ü‰L‚ôþ ¡Âö´ÉÃ/.©}lÌom! ÿpb¿ÿÿ­×®õä á™ú_ÿú[ ŸÿÿÿÈ(ï{ûWëÿöç Õ2:_Í{_×^»‚9_â>>Þ¯ÿƒÈsÿ <~·ÿÿä,ÿÿrpæpù $;êù1òoýúZ6 Wÿÿõ× ¸àýzï_ÿäÜ‹y1Áº„#üØ`!ÿ›  NOH/ù°c6A»W¯¼76ÚÛÿ8" ‚6õ_ÿþñëÿk‘²}÷ÈAíÿéÿÿÐ.—ýýwßm_ÿúöÿýüøä[ÛIÿGÿÿú ÐOÿù øþ¿ä'v¡ÿB „͆§ÿ_ÖlýÖôÚë}íÿ¯ÿõí‘××ÿöÈÞëûïÈ{dQÿ¦ÈŽÚ¯ƒÿ­¿«ÿÿþÿJº¯þòpÜUÿæ}/ü†Kÿÿÿ_ÛI´¯¿[ï^×]VÿTû_úu××W«íu¿H”6“í¯ÿúÛ¶Dv+!ÿl„ÈGÿ²|„Ö¾¿ßþßb¿«mâ«ÿ°õÿõ“ÿÿ´“m(jÚV•¤Ã ZM¥ö„ ´­m[I´ÖÓgAôÕvVé´öÓm; ¤ÚWé6’¶’ö’ûkÿ[kúëuÿ«ÿÿÙõlˆÿµû¯Ùÿÿ!Ýû_ÿÿá0ƒbƒ˜¨#Îö B„Tâ‚ Ø„ÔlP ¦$tÂÄabGÃ0ƒ Šl$ĆlHølCb5b‚ à&+ 0’h6)4Â$tIеl+V•þÚM¯ûi6¶•¯j¾Ú_¤·[KÝ]tÖ¾­­úí‘÷ÿýöÈøa 80‚`„0„CCB!„L†0œX  A0„CTÉ™ƒA„T„pÄjI„a… _Ô4˜`–à *lS $à *zl4¬%iZ.§a@í4í&Òa¥Ú¿î·¶µí[JÒoÛ_éÖ×ít¿Fb""""""""""""""#/Šb†( ˜¦!A‚lPb ìÍ ˆNaaŠŠ P@á„«A¶•„˜§†ŒlHèa+[„—m+I´í«i}$â"""ÁÀàÁˆƒ A„"B"!„ !‘Ø…´ ÂbA…AŠi6˜LTæÄ&‚ 1A6I‰a6$t Š ÿB"#ˆˆˆˆˆˆˆˆˆˆˆˆˆ28k A0˜B  4‡ëâ""""=º^¬0K 1 qô?ù0Ñäø ø‚¯d ÜàÏ hrä2@âÈmÛ‡P{š`¤5¸†@â~@ö ýä‡ xìàÊ>C Ah|ƒS<6ƒ‡ xm@pýíkÖÕý~¹ €X|†hî@ðhÝç#Žúޏããë¯è'|†@e¯úÿÿû_[öC$ x-ëÿúÿøÿ·ýëúªþ«ÿõþ¾™Ç Ó²/ª¯ªúëþúë3ÑÀ\Ð/!ŸŽäìÜBЇòÂ(#c73À‡¹á™³ã<Ã82@ÏdpÎf2€sÆpμ!Ü…ì¼!­Á2 „‚/~ 1„ fu¿ÿ×ðša:FFÅL#éa£ ‘‰é£ ?EØÂi£ £ 4bv M0Œ0Â7„ðŒCÄí4Ó°™o _Éòh0EY? „AÉñ%È0…<,±Â{!‹ ÷®\\rA¸ä8áHfCÿú®‘̓66“²;¢ý[`*Òm¦’l:/Òé8bGm&ÒÂMƒ0 Hí¢í¤è&ØL$› Híƒ6 éÁ› á0ƒ %æIâ_aØ‘æ ØPƒn‹¦ŒFÜ3‚уn‹ô\¡  ÂE#0¦dzdsEñ‘OåоÏä?Íòœ‰Äs'Ä|BŽ_È&N ÆÔ²„49 „49È0:kôô¾âõï¤ÚMÞ“lWßÓ´ÚºWMý1N¶¿¤ÛMêêôïP›i+„îÓéXz÷JÚ•±A½Ñƒƒ8Á´a´s<Z0Ú0Þš0ÝhÃhÁ¿a>:hÄшaƒÔ#{%É¢@Ìa„Érd2±/A‚ 2a>3ŒÙEÃ0ðCá’<  ³À†Ù2/ÿM¯_®·¥û_é½?}%ïUutÛt½ÿwÿ]7´Þ®ÆÒßú½:]=%i6‚Ôó¤ÚMƒ¢ý&Á˜ JÒoð¸‘ÛI´t› ÂA6l°¨6ŒbGœvŒp‹¨F èÂi£ ´†Ô&‹˜Â7† ž¼2|˜A„]õzõÐÿÝ;ët?ÿÛëÿþ®¿÷ý¿ÿÓë_ÿWBú_ÕÕÛï««ÓjÚW¥ú÷ÿôé7ºWé6Å>–­†› 7¸z÷ B HæÒl3a`ÜÒtl‘Ûl A°èº„`nÿïÅûªñý†>>+ÿûiW¿b÷T¿Ú¯¯_ý¯_ìWû­'éëßioëßÝ.§n¾¯Vë§Ýn7íªÖéxýצõد´ŸÿÓüƒõ÷[ð_š pZÿÿ]?O¯šW»þñÿÿÄ.?þÏàªôëúëxïëUýÿ÷oþ·ýkuÕ¿Cû½?MÓ_W_MÓVûÿñN¸#—Cîê<|=ûȨãÿâãzö ÞGõ_ÿütAsÿ¿Á–,Áëÿõ÷õÿˆ¯ÿõöÒúõ½ÿÿú­}|mÕ÷ÿ÷ÿæÁ†• ç¿uFÀ„/Ã~³ó`Çþl › íg¶³úÚÿ_ÿ8 B6ÿÿ°îP?ÿÇý…ü†‰ûi}§ÉÊ¿ÿþ¿â®+ÿwõ:þ½4°Çÿâ—×W¾‚ü~Õÿÿ[Õ~C‚û¯ú¿ÿ¬ ¿õðq ÿÿÿü‚9ÿþ£aÆé!ÿùôAŠTûO“_§ˆY˜dOü£E/_û×¥ùÜ?¥Wä‡ëïµÿ&9‡KÉêõÿÿàˆýRüÿù1ȸúÿþl1ù°cám.¹°Ö͆wΛ80_áumÿŽ£ÛøòG`ÿ­tÿv±ßÿ¿¯ÿÿìmÿ¨uþ8ÿÿÿúýû@ðdÏÿÿÿ¯Ð_ÿø7½WýøAxA̓°b›?6 B6íÿûƒþ¿‘ê²#ëý½×yÛ">¿ù;ƒÖBÿ~ºÓýäWÿý²#ëäAÿüá®áðEúÿäßÿ«É¿ªû÷Òr$v¯ø"?ô½/ÿòu_øA87ÿuk §õéº÷n·_ýum-.–ýµµÛKõ¿»Þ¿n¿ýzõmºû÷ê÷¯ÿÈAúòò õÿû{ñßÿõ]ø"?ÈGºðD¤¤‡"ß÷jØJ&ƒv‹ v°­¥¶´Öí+Iµm&Òµÿm&Òiµ×Kít©ÿl*úþÚí­¥in—õõ{¯^Þëºõ¶¿îHò#ÞÙÚÈAÿÜ„|„ý}ÿýÿÿ­Càƒ0A±LB°±NÅ1 Šiˆ@³9„ pÂPŠœHølSÅA„A±LVÅ Øá„˜‘ðØ§ ƒ0œRa4ÓMŠa‚IÃÆ 1Q¦ÚV°ÖÕÕÕÒ½×Ý[®ë^ê×è'ÞÝ_¥¶¿­¤Úý¥§ëûdAõlˆ?~Bú¶Dûñ a6!‚ &aA„, ÐŒŽÄ,0ƒÐh0šdpáA„C¸0L&G„& ¦¾ù„à ;M4Ú BA± ¦˜I±A4þÒŠm&Òa„Rk %i&à v[ŸÚ~Ø[I´šm/Òm+Kî­võ÷[­{Û[ÿ__ÄQ"""""#ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÁm1 Š K¦ÐA„ 11A BbÅ1  mP `ƒ +±@ƒA±±AŠMØF0}„a´Ó†l+ %ÚM„µm&Òí;ôŸÂ28i! `„G ˆa2¹ d †[jpdî þ hüAôÓA:‡C ü†Ÿ[ L x7ÿõ÷ßr•½É § Ahr<¿ÈüC 5\†Óþ×ÕV@ñ_ÿðéZ`郇 xAPwPtÓF&þ£ÿþº×¿ûùô²ÿõÿÇǾºëÿÿÿþµ×WqÚÿÈÆC 5_ÿ×ÿýE6ƒ”9xJ„K7OÍÄ%‘ÙxA=2 Pˆ9C—„²VEârˆ(¼!›„“ G!•„Èg€™ý¸CᇠɄ-ä&yvAø†ž1d1dÈk¹ B¹ßýuõ×ÿA‚¨ÃaPaž˜(L Â7 B70…„ø(F&OÂ1OÉò —“äF!„oh ò #xd¼&‰á ïV*O‰þ‡„A’¡¼ Â0A›‰ù> Ÿ@ÿ_½×âGlÚM†$wA\H탃;h'i K¶¸t_i6l:/0á‰i3}Ãl3‰vÐA°èºƒ6%&íAÐM£ ‹“ Ò0mmmoô]=Q†Â9ŒàÇ”åá¼…òËâ˜"q™‚eÛ6G²àÒhö\g²â|6Š …â0¹v&är†•ëßÓqT®ÓkÓoO¸Û°'b©&Ý}ŠíIÅ_iÕØ¯•Ò·N•¤àáôž$s«tÒZN•¥‡–‹ô›„# v˜Fæ¹á7áa„nxF „ÑxaL#xÑŒaÃLÞh0¦ƒÈfy¦n?"A  d¼§/‰qü…š$\I 2XDá°ðS‘Í……Ë‚ ?Oÿ]uû¯ÿOëôß_WÝ_Wôÿ_ZÕjßêôöíª¶­Ö»ìW–½ HæÒmaöðÍŠƒiXf¦Ã˪Aápƒ ƒ ›ÛnŒl(A°ŽCi„Ö ØJa‚ÓFEÌ~š7 Iþ†. •öoF6‚$ ÁöÐþë_×_Ö½ ^¿ßë«ûþ>µ«vëU{õÕÿUÕ¯ÿµM+i?×M®êûýn“º^êêû«ø}ô›§wh‰ì(—t›IÆ$si;/Cé‹ðá› ÐAу`Áp%0ϯ ?þ?ÿÿ}}Ýv×þÿØúÿÿÖßÚýSý?êûk×ÿÛ®½Åjÿº½Z_~ºOÿTü&Ò÷zéÇ·­÷«§Jö¢G6“Ђ×ÿ÷‚÷ýÿÿûÿÖ!kñõgÁZ?ú¿Šé/ø¨ÿ_ÿ]Zÿýuêøÿÿ«ÿÿ~ú_ßëî·ÿÇ[é6®¯ôôßù ÿýò Ïÿ¡ÿÿ¿_~D§ÿbõÿÿ´oš/ÿü4ýƒ_iU„ýÔ1k†0Ç´šÚÿIîÿ¯¯íú¿ÿzþꮿ_ü#gÿÿ´‚6úœ?ÿí¯þãÿèÕ¸ÿÿðG/Qú_ü4÷ø/ˆ\Ù kÙ˜†büq ¯ú×ÿÿ?ÿí/úö+ý]_ú ÿ_Øa$ÿ×ÿþÚ_úÿìØhdcõÿÐNë6_ÿæÃ‡Ü~BŸÈsÿðÈ5ž !OÇï.«ÿþ²q?×âÿ¶|úÿéÿñ /ÿÿÿø…õéþC‘nÿÿôíÿ_á¿› pŸÂ6ÿøl#gl7_„rÿÝ_ÿú÷ÿ!OëÇ¿ü5ÿ_ýÿÀfýÿÿð‹†gî—òcÿØoÿõõô¿ÿÿÁ¾¿/ ÿðmþ„ æÃWKþ¾p¶—á=84ÿøû¯_r ÿýkïöB½ú½¯þDÈAÿG¿ïý+¿‚#ÌŠ?õùÁÜ_ëô¿&ÿD+‘m,àÙ‡ßô¼û}ÿÿ´A[¿†ü%ÿT!¿ÿ› €Öê¿ö–«÷ÿkºúÿÿ¯¯Ö»kºÝ6·W÷ÿÕ‘ê×õü„ò(ûÿëþ¿õ°ý_þßÅEy!ÿ$?Ù aÁÿˆ/Òï!È·¯ÿÝz~Ú¯÷!ýþÒÛ¯ýd0Ðêí-;þÒ»Kô-w_µvÒut›[ýµµAÛÞÙÛ"ëõ¶Eÿß_ßW"×ù;jïëÿú¿á?KîMþÃoù!ÿàŠ„“bGÃA„ƒM4ÂpØ` Âi³4l0–ÚJªw ´–I°Œ ö)6)XiCV &ö@öhºV´˜k %a;¶ÂM¦¿¥ikÿ߯N—ß{ö¿ë¯×ßúþD{ÿ­þ·!ÿõ龃l&•XJši¦ìBi›Naˆ[aA„M¶( s¦!8@Ú0ÐA†*©±LBbG ƒbGÃ0ƒbæ!)‰ 0@ئ$tiZN¬4®Ó× °ÒµmnÒÓº´®›^ÓöÒm=¯¯¿Û«ÿ·ýûí«®þò#â"""""#0+ÄDDF`XŽ""""" Áa†DC4 `ƒ0ƒDC0˜ ða(EMŠbÍ Ðh #lTSi4˜‘ÐpÖ¶b“†Ú Ša„˜hºo§a~ÒöÂÚKó ¬/iý®ØJÕÒ¾½´´é>""""""//[0ƒ„vL&ƒA„b/Ša5/ˆRø„„ÂA± ¦ƒÅ]4lPA„aÄ(j„ÂØ‘ðÂF0Âk› %i6’±ûik<GéüGD0„A„Èì1Úƒš†›I±PGö( t`ƒb¾“×ÒÄDF\$DDDDDDA‚ /ô›Kô±† iZªZ¾Ä&(1 \DC ºÄ m„± BÇÿ xù°Ùä2A›ˆÄüàÇ~ WÄ2D`ä· xi¹Ã27¿¿ x,8&Al5¯|:v•‡0r†¸@R+È@gòYßjà`r`ùQòoÖþä]È ƒø3å¼>@ÌOö»ý­¥¯ÿZÚÖlÍÃøÿ¨ãCÿøôîémä2L|†@qÈ£¿ªKÿþ¿þ5¿ÿÿ¯ÿëÿþ¸¯ê«ªÿëþýÿ<09ðAwÈjÀL† †,œAÈL C@ÃÕrO&8Uÿ×_#ýõÿ xZðA‚ þO4Ha <@Ñ a‚Jeø Èð Â$2Ñ"8ΠÏ>Í” |g£‘À§ÂEÁ Æ|'!<Íåáˆ~óq)—È æâ Ä6^ó!\» R8SãœBñß_ÿõô\Þš7ÑŒ0Î0ØFÙ½¨F †p)†Ñ†ØMa†˜V|JhÓPŒ°Œ6Œ7£ =4Â74]F'èÄê°Œ0§WL#xd1Á¸2~žoâz1†Þ$^#ò|MËârð–O ƒ—„3qH7ò ÆÂžAŒ#² ?ùpAx!¡ÈW!¨9×_VÁ‰è'!;¤Ý6Gr?ÝÒm&Ý¥py†HæÂX3höÁÒm+ ØUaÑ~“i ؉¿A6Ði¤›FÏ9°Ó@Í…<ÐA¶$vÐAâé†l%Þmែi’ð˜L#h2\døaÄ‘#ä qÂ Èø&2 øa%Äø‰å8E²~!ø†W”äN!Ç/ aâCiäÈ<Ô…‚ÕêÕún•´ž7[¥µoªn?®›ãÕõm}'b¾›÷I¿Vߥ÷¦úè6»OÛ[¥é^ö&ÃA Ä0ļщ °Ä¼Ñ·t`©c1ÑuÁ8‘öŒt\ŸƒL#l<&½¢æ?A„a†ŒCÜ?0š1†¼¾)—èAoÀƒ y>%„'Ÿý?ÿ×ô×ôõ½/Mtëô×õ×­ík«ë~½ßV—íýu{¿þ¯¼i7ÓAØLBm]„ÚNm+é{a Ä&Ò~xÚáÑ~– Hæ$vÃíƒ0BG6“h è&Á‰zŒL$h4Ò0L4 àC¢êŒ6š0ÃÜ÷ý/¯_ñ_»Z¼«ñõ®ž‡«ß§ú¿Õ÷Ûëõzþ‡ëë_]ú¿ÿ}û÷Š«Ú¯úé¶*©½§}'é×߸LSu¾Öí4ÒMƒÖ“h'–“xÿÿýþ?ë¾½}ÿ­ãÿ®Áþ»­}u¶½»ÿ«ZÛ g»Kê¿­/Þ¼wÝí®oiz«ý®®›ôŸ­&þ–í/ãuºwÖé¼á¯~Í?¢ S³Oí+_ô×¢¯­ý¬Ð3×ýî×Mý_O± þ?ÁÓÖý~íûKõKUØÿ]ýÿ¯n·Tþú¿úÝ5N¿Ö¾âÿÿÆÚX#—Šÿþ?qxÿþ6ßûÈÿýÒßȧ¯øåxý÷_ê!ñ_Å™_ÿKýx1öþþúÝß[uÓâ¾þµ^'ÿÿ›è/›ýº›?͆_óaõÍÿû[Jlýÿ͆WÛÿóƃ~‡¯û´ÿÈzZä§ìèÎðÂ×û4úsAÿÿT…uþ»¯ñ[Ð_ëëìB ÿ×ÿýÿÿäÿÿý?ÿ½øAü!÷œ ïÿÁ?þÛ½`Ž_Ûþ:ÿ‡ülÿË®A(þ·Ã ¿ÿ¥ÿûàˆý5àˆÿÞ¿$=W’KÿGµù 8>õúºÅoý®Lô’üÿä0àøÖ—þ—ÿ †• ¿ÃͰkÿ†ÿ›¿ÿ8 m+Á{Kþ?úÿÿÿAk_½Fÿûë¯ÿßþþ¾üýGúÿ_¯þßÿT¿ý.+A?ä?ÿ¯È'Õÿþ½Ò-ÿù°üØdµWÛÿÕ²#¯§«dAýìˆþ½Ù?ú푲(ÿ¯¶D{~ÿºiò{Jö¿ò{ÿþÈ£öB¾ÜVÿ¥ÿê¡*¿’7ÿÿù!ÁòCõiÿÛ«Òí-ëÿïÿõõ¿Jÿ¿VÒ§KêöÒëÿ­uzþ¿z÷úm^õõݵé}ëuÝoòw×ßÿúáuÿoû{¿mëú¿ÿÆÅVþMÿßÿÛNöÓþÒa¥:ŽØOI´Ÿá¥Úý…µí=°­¤ôÚ^ÚÚJÚ_¥»iZÝ5úÚV­¯¯im¥këÿú~ßúÿÿ“ò#ùûõÿÕÈAíÞ¿ÈAß^?µû_þi0@Ø‘ð 0ƒb˜¦Âûb˜¦I ÅaÅ1Ać± Š´‚a6*¦Ú„í´š¦VFhPØ¤íµ†°Œ |jǶº¶Ò¯ÿ_uíY@]¯÷IþÝm¥ý÷]]Zýÿ·×­tþÙ×G™ðÓ@Èà\(B"Ða8† ¦ƒ1 aG ´A„M0˜Ma¦šb» )xBMˆH0˜b½ˆAŠè1 h ÂaˆSx¦!46‚ 0ÅAaa„=umAªp ;„aM4ítûl*Úßá;ít›J÷K]µÚ÷þ½]om.±Fb"""""""4""""""""""4"#‰8ˆ`„!G@„ ˜b¨  aϸA„b_aÄ&¬ lBpƒ0ƒ„U0@ lBb‚  ‰t„¢  à C 6’v›a'Øa@ê¶–ÚL;°›a[]'üDDDGG6!„"#A„Ј†† ±Ä8C#ÂjƒƒÈð¦)0˜A± šbNÅ0ÂAb˜‘ÐlK Ø¦ ú ¶ ßKHP q˃t@ă0¨0™(AˆZéäÁjô±ÄDDDGt´—Èd<%él³K v–‘`+ǃAŠbAéZZXˆƒÅ1V–"C ®+ÂÇüâÙ €Õò`P9(Âäg!Ý2 ¾@ždÃKÉþ4ðtb¾@ðÕòƒ/<#rÃ< ÇòíÒ°àáÈg¶Èâÿýi! áüá˜;áÕ×}Zÿÿò×ôúõÚÚkÿÿÿÿEµÖ]?UÿÿÕuIýW×ÿÍdK ânqȼCñ0"‚›>1X"y,†‹!§†‚®"d ad=ù CÕ…!™m¹0êCAªêCYÿõ¯0ŒA Ó¸°ŒMƒ%È?0ŒA„¼2\™^#Ù>'è¼2æ_„ðOÂrˆø‚U„ü“dN0à„N„ —ò| PÑ@Á‚' GŒø¥ræ_…Ë‚NA®lr ù·%iüHí¤Ø3bL$›I°è»`ÌóI¶ƒ ‹¨tƒaÁÒA„‚l:.˜fÂB6Ú6‚ìKì#lhÁ°Á#m„`ßé¢åÛ 3 a6¶çÇу~ÓHp’ð‰Á@2>@ò¼ AŸ3ÆHÌÙ÷è6“{í+i6Å? Òmé]ŠÝ+wIúI·¦ëI½û ôé6ÒZ¶:/÷IºJ÷« Wöš àJz.t`Þ˜N%ðÕ3k­4Óý¯Ý­Zõû¯ÿO¤ÿï®ÇúÿºOV¯ßKVûIuêêÚÿïíÓQ#œ'I°ÄŽbG76“²;ƒƒƒ6"kë¯W««ë«m'ñûû{ªº­oûÞµõ×úu¿¿Iwûÿéýïj¿uÅ÷¦ë÷ÿÿý®µþÇ__V«†+Ö¯Oï¿ö?Öþ×ïþ—ß¿îôßßÿÿk÷kªÿúïBÿæ”õëñù˜ÿ¾†¯ö }\Wq_oëáõ×ÿÿïÿǼøãÿ¸íHzoþÃÒÿC`ïýÿäæ?ȧùOÿø1¯ÿÿ´¿ç}­¥6lýsa§ FϯûoÎç¡ÛFÿ_úoûr×àŽm/öNŸëúÿþ¿ÿþÕÿù÷UÿB Ý_ÿÿþ ͆×§¾'ÿÿl»ÿ«¯ý¥ýy!Ý+¯üý~—ÿ©!ÁÝuÿ bÕÿßûÿÿ¤·ý/ô¿ÃaÿûuÿõÿñÇÿ¯ìRþÿáî·É¿¹ ;×úõ·×ä+ƒ·‚/Ö¿&þ—íÿä_ÿÅ·«dGöŸ!lˆÿþÙ?ûõ÷ÆÙ?ב²{~ýû_ÿÿ!û×ȃõý|VMÿ$8uÿ½ÑàÇòCéw]ZôÚõý~“Zë}¯¾«ûk¯“…¼Šï^E×^ßRO×ëkúéôÿúo_ÿ£Ÿú±÷¶½nÚMªö·¶¾ŸºOwÓiv»i6•öûjŸí­Õþ“i&êõ«¥­ú÷ÿÿÿõ×ÿZT˜a&6¶I† &œR¦Á‚M0Â1†¶ÚSL8i; %q\l0•¥„A¦›h;m$Øa'J ÖöÕm[JÐ6¶¶´µi}¯ö¼;^÷!o¦!!5Ó„ƒM¤A†!lBt Ã×#⩊6‚ 0˜¨#ΰ„0ƒbGÞÅà 1/0Â*ŒBmŠa„˜‘äÅE1#á±#ЂµþÒ´]Mo¥i®—â"""""""""""""! $‡Cƒ.`ˆ aÐa°ƒA„Ó0ƒBMTÅA‚ $Å8A„ pG @í‰6*¼DD\DDDZ„",ŽÅ0L! Â ƒ¶LŽ!€«­-!b"4?ȇÒI$ÒKKI-|‚œ}TWJ–"Âa„˜¬X…XþC <<4>C _"@òò Ëø:aÂ72¥Á˜r†ñêC(r c½v÷ÈŽ’ÑÃCÉ%ñ×÷kéýQQÿ×Õ/Uú_ýuÕRÈ A ‰„2 ð&ž]|!¥aH>¶C<`†,†œY¬!¢j9ÁÈ/4C*ƒaÈlHd!×È<2\˜A„Ô¿V‰Üp˜A‚ —ôH2>0ƒ0A‚(‘ðA‚ Žgó` `ƒ#àƒ?àƒ 2\( cã=|2Ï`ÉñáŽáD‚P…ã¹G†î$}èºhÁ´mÐA°ÎiÀ‚уhÁ¿ àS £ =4цц`‘ƒvš0Ãa­MƒÓôÓFçiáƒÂhĦM4]ш0Œ1…PžAÃ¥¥Ó‡Ki©ãijØpwJÒpÄŽbG6“i;I6 H!ÐNá°ÄŽÄŽÚMƒ9°ÍƒbpÄ»i81/ Áäà͆e ôáØ—ŸÛ[jî«õíÕ¿®­µZZ·VôÚNÝW¶ÅSÓOM×Óp&á4ÞûþêîÓôÞÒõõý:Z¿õÕûí×ý:ö–ÚûþëÓë}­ÿêþ·¿Oý Zþ×ÿÿ_Mk­õÿn•ut5Mu~õ×õOÿïÿWþ¿ê?ëÕþ¢¿ÿø¯ÖÇëÿëÿÿÿû }®ÿÿÿ×ÿïý§ö é«[v¿ý¯êþ¿ÿ4ˆ+3ÿ^ÿÿÿþ¿Å~A£ñ×ü~½¿þÃðX?ÿæÃÿù°Óÿûÿ6_üØl6æÁŽÿó©ÿoÁ8oÿÿÿÿÿÿÿúAuÿ_ÿúé/_ùþ–ÿÿÿ’&ÿÝ~Ýÿ_ÝÞ¿ÿþMßÿÿ&àù1ô²nE¿ÿÛ!ý²(úÿ¶BÿîDÿßé~ÈAÒoßÿÿÿÛÿ÷÷¯û¯V××úý]uÖû¯Ü„¯ÿT®êÈÿ¶Dè÷þBþ¶ôºÿÿ®ÚOíÕ×ÞÚ]_í¤ÿö­­Úûi+êÚ_þ—º„Þ½µýÿ¾õ¿þÒVÂPÓV[ /m¤ÚM„iXVÒMSm&ë´îÛU¸iZ­ë°Òîûm/´½l-¥¤í­×ü"¦6(1#á„ Šb˜ A‚ Šb¢GœaŠa„‚ aÅ6 ‰ `ƒb‚aTÂ0ƒ0A±A8­´‚ Ø š ĺ Xø‘ðv©¦Ÿ†ƒ0„CA‚0@ bDA‚ BÂa†äQð !!m„Dpaœ0ƒNÅxaZ« ^šm„Ôü Ða2 ¥"""""""""8ˆˆˆˆˆqÄDDD†@ýÓý&G €×(7ÿˆAÿé#…Ãþ‚A?áb“µâ*ãþAàVÿê¾®«øªýªý©Õr+äò‚Ðä2A«‰qÃkˆcÈ6!üC$ù†Ž¢aŽCÀ d¢:”2™ P‚ðNÌ‚Sшø ÅÄ#†H5\á§Ú‘aa¨*`¡B ÖÁ0ƒ0¡;ô½‘Ã$áÔ83‚ÁìÐ-AAUe¾4m´lÃM„ÂÒÕ‘Ã$¿øwÈd¸ù×a‡UЗÚM†|¤é6ªÓ_0’ßµûô¾ÃÆt©æeJÕ¶)ëÄU¿ü »3“´ûÓýaš{]ÿöúµÿUVè^½[ÿÉþ¡¾¿þ¸þ­}þý|7ÿÿê½=yNÈi9 ëÊrPEr cù¡È)¿êùx]CýýÿÏïÁg„ƒÿÿqþñî‡ÿø/þB#¬†ü3 þBûÿNþÝuûjÿ8 fÿýº›!{ÿÁ°ßüØijp3´¿Ô#gÿÂ8í®³þÿåí+3÷èNTYoìS®ÿ± }§R™ÿþ» ºýðpoÿÆ¿ÿKÿÐ[ -þ áöJ5ÓX‰ðP*î˜uuøFÁYÛÈh?ÿíþ—ôXàÙ‡ÿöØÿÝ/ÿKB—ù7ý/Ši4ÐwI«L0’oú¯d ïVýÔSzÿ}ööÿ_õÿ¥û®–‹†zÿáòoÿ“pÂitÓm ˜A†ƒûþ¿úë¾ùý:ôµýû]²#ù;ÿÿ÷ú¯¯öÿé}<$.‚CD0A‚þ»i*WºÚTÚ_ýïWV—×im­úþ¿ÿû×Úê"õ #°ÒO´¡„aéºNÚJØAÚvm+ïÓKmvÂZþ­§ÛwÚs »_ím}Ó}˜X@ÂÛ„ 1APŠ›„ aªb‚=AÁm„¡a(EPrð ƒ BHÅ40„A„$|0˜A±# Â ‰ °±#á„A„4¢a8—AÅqÆÈQÄA‚„ aˆ†ƒ!„B8`ƒT 1ˆaa`±""F8`˜B!…L& ö ¯åáM-°šh$õ @ЊB""#ˆˆˆˆÐˆˆˆˆÌ ÿJÒÕ'é†@3:I>¤2OëOû¥í}+VÒKa„qM„˜3ý`Ä ƒiˆLBk ióXÿÈ q> x6q q Y²!´9Cäþ@ðjŽÂ ‚ãÈ!Â@ðN ©úaÁÔ8:14Ów!¢<G¿úZká°upö÷þïû®ÿOããé4:µ´C!Ç'2~C$üᛄ30á¢×Çüqõ|)‚ ÷È ^ xfqÃ>ÿþ a88>ŒLឺÐÿªú¾×¿h/·pnþºÕßÿ×ú y¾äõÈ<§ Õ?!²ÍÄ/žS‘ùN_gë!88äO!øƒŽE¡È^! ¼ žBq Æ‚Ž±ËÀ™ârvG2Á ߈„>|×—„2¯.Èeù Ë'd5ì†xoKñõ cÿ¾@òô]Œ#… £h».côa„a†ŒCF&½˜rø°Á‚a¹„bhÄ0ŒM2 ñ?9@ÌL—&¸0ŒN ÜŒa’à˜F1áNdø†&y›ð™x ÂC3gÈ2\}ÿþ?þ8:AÒ HæÒm é8x„Òm&ÐAŒ8: °bGt­&ÐAÒa†lÃ;†l*l:#ú „› àJA°Ä4x‘Û 4A„Q/·I½Ú0M3j m¶Ñ}ÿþµÿÿýûM¤ûîôô¾é6»ÿMÖ“{¤îí7«lzô­:VÐ}é·kz„•Ä'Ý'"ßTØbƒv«ÿúúûïoû÷ÿ÷Ó~½>é7NºÿßÓõtÖëú½^ôßOõÝtÚÚûétïtC¾\^Èj¿ëßÿöõÿ«ÛÛíwöõkÿý}î¯ÿ«ãõý_ïî·~ú׿ßÒÝ‚„ d¦_‚C2d¸ÞBÌ~6ù L†_‘(BA¸‚fE‚²a„<AœA‹!•™°ƒñ öAð» ¢bÉØ[×û_î¸c u}xcÿë~£\1¯ÿúkÚõ÷†?~©õÿíûý¢ÿÜôÂ6m¦‚6ØFÛÂhÃza˜FØxFæ¶ÁS`¨anÂ10ƒÞ>L GŒ ÁGÁ0„ a„GE?þ@¿Ä»!<„òœŽ()°‚Œ0ÿ4 ×ÜÐS@žëNh?ÿÿß4 ›ÿõÄG÷®f ;¤ÝõÖ>+×¥¯¿¤“q#·NÓI6“a‰wI°è¿Iº}&é°ÄŽÚ6pèÛ¤Øf¦Á‚AâêWý&è¼Â6fÑ…‰h ͨg Á‡§®Œ0ÑsøA’äýì0Gývþ6tÿèl5ÿøò?ÿì÷ò?ÿ¯ bïÇþßOOÛu][M­±ZM«ôªí6–é:»¤Ý.Åu îÅ7N á ÚN-OK‹ðàúZO†l(—¡ÐAü6ƒÿøl7ÿ6 Nl1õ›?6?ÿæÁˆFÏÿûÓ®—ßàŽ[^ëöëÖéÿÖ×®Ÿ¯ï_ëß§ÿ¾›§_~ÚuúuúöتI½þo¿ƒa'ÿ|„â¿òëÿùþÿÿT‚ÿÿýµº¿ÿ¶–êŽ]/ÿý÷õèjßëýë×Wׯºþ¾úëé×ÚýoǧÕüàõÿÝ89cƒýy ÑÁûÿÿ ¸àÿÿÞ—ä‡ÿÉE½}Õëûô¸…Þÿíõøí¥ýÿë¨ëþ?ÿt­{ëu_ÿõt?ý¿ÿú‡Uû¯WWÿÕÿÿöÕî¿òoê¾»¯«ûÿZ0t¿¿ÐeSÈzz k¯Oµ!gàµÿ྿øø¯ßýÿÿýpÇþÇï¯õÖûý|„öÈAÿÜ„Û"ƒÛëÿÖBÖÙïûéÿȃúély?º_„s¶”kï/ ÿ¿ä!øÿúÈz>ÿÿÖŸÿ|Ð5?³0ÈŸäî×¿ºÛ[Ý&ÖÖ×õu÷¯÷Û^ýëÿ¦ž¾›_ÖºÿŠ› >/ç§üØi©À`Ùü#gÿü#gæÃKÿàºúߺÿú×ÃÖétûµmm-VÒ¶Òû Ú¶›i{iZW¶«þº^›iZ[¥÷Ú_ÿiÌâ8K¶¿ÿ ¶ê›õú/ ÿýõÿøA~ÃKöÒþl4×ó€Gü0ôá…m‰ &Šmk $åöMІ`ÂLq#á±I¦Å0`”0“iZi§à ' #68Óm$Ó´ Žé=4ši°Â^ÃÂ}0Â]µþ¾­ÿÿ_×úþ—‚#ïúý/âñ ÿþˆ(ïðúl[0ƒ ˜‚b™™¼1NLAˆL÷ B j BdxBbL Ó ´¤bL&A†( ÂpGžÅSáaÅ Ø…N7bA‚¦ÈAý-!ë×Ýÿ××ÿþ¿EÃ:ô\5$ßÿ÷ ¸àù1ÿ$91„DqÄDDDDDDDDDDDDDG`„C64 !õÿ­uû"¶DìŠ>¾þþ¿ƒï[dQýKô¿Ûÿ»þÃëé£"-m¥Ý®Ú·^ëÚZö¿ö½¯ôÚúúþ¿wÿ_‘×ÈA×ÿ÷ëé/i´½°Œ&Pí6“­« %ml'¶•§jÚí®«i[um¥{É??Ã2¾Ú]ûi^NÝ¿_ h P¿ìP ÁÅ^Å0Âab‚Å1/†lS4ƒ0ƒbGÁ‚ ‰ćÅÛIXÕ;¾X5Ó‰À.ÖÕ´“l Õ°·Ý÷ö–—Ú]5†ˆ`ƒMbˆa0ƒÂÓ  Áj¦‚h4VÄ$ lSAƒl  ݊@Ø ƒ‰ab¡„¸ ˜A§k¤Ÿ¥j"""""""""""""""""#6Qœl0B Á0„CÈìBpÖ˜AÁñ0ƒŠ BA@ÄDDCˆˆˆâ"C 1-/Çý/®«mmRØ„3âY– A#ÿä @«Ä Ã8ù¨AÁ¦2H x5¹ÃG<¼†@OÕC†aß"¹ÃUÈ? xGp x£ä;‡M0ûJÿïäAÿÃãê+¯»þ¿ÿâ?ÿÿþ«êºÿ©ÂBú®¿ä §dN;ÌóŽA›g±LGƒ™íÜA8‡ò YæGðƒ^tÈ áãbypA{!ˆ!¡×&?à¡cF!xMAA47 tÂ7†ŒL—ðO%É GÄQÙ^O‚a `ƒÏ2ý2È5ù Ä?/ÙŽn%„ˆW6L0ä6a,†/Áéè83(ºƒƒóI›Pf‰h&ÒmÑ… ÂØ‘ö‚±(º»ûFÌÚ†p ´`Ú0ÃÑtØA Ái„a°Œ6¡4bh`™>L&½’äF!›Â —Áý]&¶+xON=ÕÒl1_XaÒwXp Ö-OIÒl:[Ó $sjÚM†$si6Œ1#¶‹¶‚l1#¶‚pèÁ·FF ûï·Óû­õÕ­Õ7ûÿ¿«õö®ÅW]tÚ·N“jîÓêÛO»¥lB ¤ßÿuã×ÿ«þ=uÛô==}:Ý]4ÝtëÖöºOÕ]]^ú½?ÿ0Çþÿ¯éé×û_ÿë_«[¯¿ÿ_ÿ«®ÿÙ 4 ¯úÿMo¿ù˜]?ÿÚÿ·ý¯ÿ_ÿïðÇþëý‡ÿøÿÒýƒÿïþ=ý/í}tòçÿú×3 Wñÿl7ÿÚ^ó`ÿoý¿ýÒúõ§ÿþ5¯ýv ÈZ~A<ÿa„¿þ´¿ÿö]saÝ}M†§ù°Çÿ犷ÿ@Ž_É89‘/$?üAdÇýëoü†Xä[ÿâ¿ÿuëÿñÿúðoþÐ/ýíõÿÀ6ïãÿ äßýÉ7ïþü›ÿþ÷ÿ¿“‰~¾—ÿÿÿ×þB®×÷ÿú_탿±_îÿßÿÞöûþ¿­÷_ÿzûjõäãþºÿþýn¿«ìˆý~Bÿù?ïÿ×ýÕö—ü† =VÒµÚ¿ïµ×äàÖÒöÒuë_t›_m[_ö×ï{¯ÿ8a(a( „Âa8qH4Ø¦Ò ø jœ4­.Õ9Ð3Zûi7J÷÷ .¾ÒmWûK[Õ×í}©|T¾(5ûm¤Ó ! u¦ƒ8#û0ƒ0ƒmŠ0A±LP@éŠ0ƒ Pa„‚ ÃÄŽƒA„i†I;´¶ÒûEÐ4ñb""8ˆˆˆˆˆÎ6!Á‚„"LA pÂiíSMŠ0œü Ø„0A³:zOH8ˆÐˆˆˆˆˆˆˆˆˆˆ`„:Z¥¨ä8KÈ o_Kôšì0–´´¶!1 ƒ+˜¬D†Hl,GÿÈÂ;c‚3 €×>š` ÁE4bÈ @r pC 4àá°pLåä3; uqò ƒ¥jëiƒ‡¥\†BòÝÿwí®«kk¯ß jx@ðÔÂŽC +ÈXQñQÇßÂ0˜L=õòƒTÏ2ÙàðUÎærœàÈ:NŒ\‚ ô¦¿ëþ„O†@Æ…ÇOzwMÈjЃ$ ª•WýpÍ+A„Õi .ÕЄÈ&ʲ°¤Èg‚Õ² ðž¿ì w馿j˜T¨‘˜ dü Á‰K“*…ð#C(€dxÜ °‰l!ñÈO ÓÄvn!§ÇrPn!æA<„à‰Å.ŽÎ Ø9ÀW9ÃXÀ†Ã9€²0äb?wwÔt±ñÃ8-M6Ú0ÃFÛgÂoEÓ>4Œ6Á#â]0ŒPÜðÍB¦‹±„Ðaa„na›Éò Â1C7‚1 †g&2\x `‚ üüG2øƒOëÛuDrãÃ¥ýSƒ¥¤àé:Xi&Ã¥»JØi&Á‚ol‘ø3i7¤Ø8bGm ìHît­&Ã6‘æ‹Í&àÑtуq#ÏF „m´a°Žc‰tN´âFrÏåa܇rÎä£ë‘G*á”9!ÂÁ“p¥Yc®Aqôªµâ»}[¤õv*¾Ÿýµxýézoi¿i¾ÒÒov˜§K}Ã¥¥†›ÕëI¸AáÚa ½Azáªâ‚+¯¤‚Dqð0A<8þAò†ÛÎê¤†Ç Ð?ãýk]^í¤·ßOôׯ¯×¾Úõ­ý4êß¼U+m7úV­¯Oêû†pƒwaBL3Ó ";v=….ÏTaœpÎ6T¸k¯úMzÞúô?¿_oãõõýo¯ÿý~ø×ÿ­WOVé‘A·Úoo¤½¦«}ØuúZéR®¾+úCÿõãøõøëôðcãã_×­ðÆ»§ÚýuþÿõÛú«ý»¯wòA(th3 À§”9Ù,!0‹œ‚üœÐTN˲(ävJÈ[%Ä ½®NxÈàŽ–¤GÈFêPäK¢ÈþAzqÿí¤·Öd/þ½ïóA. §ÿ_ó0Ó¯Þ+Cßí½5ÿ{vªŸnÛt®8ô7… ka* ¦L&Œli¨NÓO<A=0A® „ &¨!a0@Âdv°G/ÿ×þçò><ñþÃð^?þ=ƒãü‡Ÿ3ÿö¢ ¡Ó{×.½Òõ˧ª1ÁAÚ¨A6͌ãÛjA6${z0«„c…âü!Èè6* £”*0­+q×gEëPèÄÓýõ6ÿm/Âú0_þl6¾ðFÏÎÿùÀl·SÉ~Ûñÿù 3ïíÆ–ÿ¶íÿä‡ÛäC„a è¾Ñt©·JèQp«‘úS®ÐA¤¢ûèdºBuEê^"z V…RhU¶…&õéÿÿÿ ¿ þ¾ ú__ý`ß+æÃÛH#gçû_xA}ék¾:„bCõ)zI.•¤ð†ºD{ªQO¨é‡ÒÕÒÖµ×Òð•k¢õ €Ðɯ{x"ëìSÖ½õù!ÿÿ!šàú¥û’ÿÈÇ"ßþ•ÿ ¿~ÛÒKŠ÷¿û]½+A{z_i«Œkj? ûI$ëKŠë¡ˆU¥àëÒé61_ëùúízú^µÛÝÿ¯o_ÿWþ´»ÿ¦é/ßû÷þô¾ãØk×¥é%½iW×÷WúIzZ¥¤°þª©$’ôµÿlˆÿ÷[ÿúëÿ‘GìˆÿÛÞ»dQòÿl„·Ü…×üÿƾ£öëÜÞÿ_êq÷é¸I*I`‚nÕuýRýÒI´¾©p‚_}%U]-%ÿÓí&ÒÕ×§®Öþûû_¯ÿK]]zÿÒÿµÿWVȃ¿«ëý?H{~ñMoO·«ªþ«ÄC¶ßÕtµKíûi%]Rª’ºýt!M„“´]M„˜a&Òn—m.Ó´­oI[Kl*ëi]6­¥iZÿ¶½ûiZ_v–¶·Uûý¡ËÅÓÿ‰u½l{öÒ¤ºú@†ï¯¥ô««ûIUk›ô¶ú¤’Jp4.¸ ±O†)ŠŠM„‚ćÍ Â Š6( Ø„ƒ4á¬T0Œ`ئJ)SM6ÂIÚI¶•¥¶l5m&Ó´½?÷¤‡ÛÒk¯­Žº]*­h8zÒþ’÷VÒßýR¯ÝUuáu¤B ÂÃ0ƒ0‡ BG 0ƒ b0š &ƒA Â ]=ËÂÞ˜„ÓAŠiaƒb‚ ‚<Â Š‚*a=bb˜‘ÐrûI¦Â0ƒò~¢GûíþÒ}û¨mWׯý}uêºkÝRª¯T’é_õÄG¡DDDDDDDq$8ƒ !   &!lB]_ïÖšþ¬ˆ>ùßÔÃÒ]¯»ô—IiiZ¾aÕéL:¯]yÝ¿0ú ¨Ã÷ô–¾#ˆˆˆˆŽ#ªÚUU{n–×Þ¿Õ*I-S¤•’ô½~«ŠÒ ߪå–:K­}$[¤’E¥­úZä2J2‡Kô¸a%'u}µ ×þ¸t3ÂèÆ .–êx£E7ýRª¥—¥fÑVŽ’‚X^¬˜ú¡GuÂZ놩9!û®ÒOü†@lÂUPA¦ `‚ôj¤ÞBˆUuM×>ÏŽ’M„—AQ<©òÇ>*)ŠˆTO&€ï…¢¢¢–T0Kt’ý/Âihê’ïªm¡M*h=7Úª@ö)&M1 Ø®+®¡5UU]4ƒ®¡T(ULVØI⢓×K` Â„¡Å‘ÃÁ„" Ê‘†……@Âh0„L(B, ‘Á@ Ó „Ó „b† ÂجDq¡\F„DDDDDDDDGƒ®—Ò¡jª—õT«¤« ém}r \Al‡Kâˆ|´‡„êu‚Ø$Èd¿Xâ†Ì!’ /²ôC „Ö"ÁÃRü†wV@ðlr‚½ êg†@,L±È*Þ"""C ‡x8tÐOd 1Ñ‚ŒBÈ ¼C8áÃL/ÿ¾BÙ©$éXA²8*‚0ù €í5í*T®©:Ò0m‘ÁQ;áHv@ñ-qkÞ¦4—jÿä4‘Ãÿã­>"–ûùÁI÷f ’ p  À¬ð!à73P$þ«¥÷þ•hÞõžA÷Úÿëï¤ÓïëÐAúhÁÃA„ ¨9òƒƒúê·ê7þºÕPíÕ"FgLjÌÉñ. 2ÈðÞByÜ•œDÃq<†g®Nóa †YáÊò¸aÂd‚ðƒáwV$%]Ô‡%4܇íÿõÖ¿è4Âim+íSL#sM4aŒ# 5 „a‡„b  „'aà „b ‡(ìüO“Æ> ÈI„Ož%xA’ŸpÄŠ9—ziþ•0í$Ú881#±#¶“`ÄŽnœ&Ãí¤Ò ‡E÷9°p͆`A°fÃ( ÚAÃ6‹íÃ<ÂA›Ue†F 0Áa3kª£ Ñ1öh—á„‹¥¥BF>­<ÿ[IúiéºÒ}nÿßUMÿzé6ïXvtã°i6—@Ýdv‹ªM¨GÁFC F Åëý§],ºzþ•?ÿ¯½¿Oݾ“±ÿºOÛõ±×ºûi^ß«üS«è7aî’Ï?Z_­*¥¯½ëuôÓÕ×úÝuýÐÓúÿÛô=ux7ºÿ_ÕUÄŽo úôÞ–C£’ƒ‘ŽEr +£Õ¤BD…“†`ä3ä8ä3!ÇÈ8ä(ûuD(ý¯êÿë÷ ö—_ïûÚìÿÈlšõÿŠôø7ÿ^–Éz SÁ47 5E ÈÜ&JÁ´\&NàG†yƒ#ôÉ÷äN.dà¸ÂN Á<"ñ¬þ]RóSÿõöh'üAÿÿ¬ø_ýÖ úÿÿ÷^AKþšßðŒIr•4b„navÚ]tíT-*jP¡š1¼# ¨ZoÇUôci¦˜F&íÕÿÿü÷Á¯ÿÈ4R¯ßÈG4NÇ^¯ú×oýF½-'D|§ E:.è.´¸lU]ú#®ŒUIUI4c¥„†`^²õ]$›Eò:HOªZ¤‹É(ÿW¯ÿþlá¿ü#gÿýlá‡ÿé{ÅD}º_Çù gÿKKQI ŒT¢µ¾Ÿ­ôÞ-"?AVw "ý‹ô¥Õ6‹ð—Þ”cU¾N‹Ô_I Ss÷õñÿÿÈ~ýp‚ÿÿÿA`ÿû /æÁ͆—m/æÁ¯®ÿþƒ_ýФ’I%·‡IRúQŠZˆBÅu¥®½Eué# kõ­E ¥¿’*ÿ×ÿòn ÿéÿäßô² "FHø„÷ÿQ_ÿßÿèiV–•Bþ’ÛKT±þ¼RÆ’ÒIRÆ’Vé/J¿I!_.µØ®Ÿÿÿþ—ÿ¯ÿ^Û×ýoÿ£ÇÿÿÿÑŒŽé(ê’ô’…J›éu~ºô’ÒÒý/×'ô©tªÒIÿku¿ý²#þû×þõÚý=t¿ÿéwä ïè-ª¿Vÿ¡ªÒIx‚Õõ¤ªéRU¯ø…UÕSz…/ZBCˆV·í]:ÿé}¥Úý¯k­oÚ÷ÝuÿÐíÝ7Ùÿý² î¿þEô—UT®¾`'ê‚þ½V©RZ8º®õ8T¾ppV“î°ÓõVýû×éïKkÚ½zwÚÿÉ>Òt›K´Çtý[¢8JÒuoÿt«¥ u®¾´«ÒZÕi|/ZÖ8Kép’´±U°Òb]0ƒ0± ÂI6ÂA0ƒbGÃA¶’rûI8¦ÒM†|;J4ÓTà÷‚*°­¥ìLÅhº{ &Ò^Ò»×ô—]kI~”†×EÖ½t¿­%ú­*þ*—ßé§h10¨0EMh4òø¬1 é„Ò†!'†!&Óƒbš‚?°‚ ÐaýÐbƒ˜ ‚Ø«Ú]AÒ‰Á„“]/SºÒ¤aüïú_ÒX"ê“ôXýu¥0õ‚#ÿÕsXûßK]?¨ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒÙ1q"¸0@Á¶B!„„êÐb˜[aÒù|%¢ê´’[ò:ÒJ‹u u E9‡ÒT©z]WVô‹ªÒA¯ê—jû©7Adp<L HDD!}-(k¥ÒéC3äßK«TÒŠT­+J<*á%­*B»$>´© wÉ¿„—$?NHx¤ÒÙ ´é¼ü)ŠŠ‡¡LT4§àô¢¡\RER¡KLÌâ½iÕÛJ"¶ÂTD°”4—ññ mT*jšv)éˆPºa4”.@új©Š„Ø ªa;Šg–¢¶)Ž×[#†`PƒL(C0ƒ ‚h0Šá0š„ô0ˆhZNÂh1CX`Š„Mªauk®"""""""""ˆˆˆˆ‹B""8ˆlL0‚ëZ°1 ¤¼GT©- ‘Ã(zKQ†’äÁ›¢ ý¤Am %Ž x1„2E¼D¨*^< Ü)ÁŸÈ ŸáҴÑlàY±º_Úw}}­zëÔ|Gý¦¿¯ñÿ_×ÿõ x‘úþ@ê s)Â$G£‘ã= h™>;Íò%–nÍ„ˆ5ðL¡Èfù0‰„W!™††Xä>f°¤ †#!Ç!±ÈèÃi®F Hê†0Ì# …O0ŒA„b Ä/4 #³y-1‡„.'è ó=x#2=C*d¸ÜO‰q¸‡¡ ¦_Êò8"AvEârVG}83a(¿ Hæ×jƒ¥iÃ;q#›IÒl€ÍA°Ä½h5AÃÍšH79°áÁ›ˆpáš7 6躣 躣pï „`ÃP­‘†& ˜FàÍÄü¾0ƒÒ}Šúzq].öÓi6“êì&Þ’w„©u{îˆN‚t¬1ZMƒ¥ œ1#›Wä~Õ%ƒƒ¢?AaÆ%ö‹Ï·­¯µ½ÿ~ÿµ¿éÞ¶¾’ooÿ«WVéÒn+WÚ}ãÞ’^=ový×C×÷UÒ×M¯¿ÿkI}þõ×ã_ßÓW¯ÓUý;ðcÿü1Qÿÿ ðÇ—ÛÿýÖé_®¼^·ñZþ½ƒÿúf—ÿú¼A}´˜?ïÿú÷[¯ÿñêÖ‡­¯ûØûðò #ýð_ø=(ÿÿÿ†ÿÿ Ÿÿøÿûûiôlÿó¥ðGÞ˜zSé/ýÿñ_ÿø#‹¶—ÿþN™¨w_à ÇaÿÓúý¨?Áÿ_üØ1ÿÿþ¿O_ù¨2Ž ä‡ÿˆ"poKÿÒýòƒ‘oKÿÿÿÿÿ ޿µúþßÿÑpa¿¯õwZýÅXoHŒ}éü˜úþ¿õÿ¥ö­þÿxÿ¯ú[¶E¿¿!×ÿÿIr}ÿßzzÝýë[ÿº¿þíuµý[W¯O¦®¿o% Öºß÷Ùûÿ׬Š?äAÝkûô¿çBtÃKMtÒ´›_^ûô•µO[_Ó÷V×m-×ÿݵöÒÿøa&(0ƒ0ƒ¸i1Q#á ÂpEBL0I´‚l0FðÓMí%Ca‚\"&$ti1# ÓVM°•é]§¯aÓivÚÚßò;šG ÐA Órð Ði¥è11 ˆH6!4˜N áÓž˜„ÖÅ0°ƒølBa„‚‘ðÁ0ƒbG˜@ö0ƒMŠbGA금ˆˆŒÀ±DDCˆˆˆ0„D0B ! B„",&‘Ã:aRm5‚ ƒÒt±ÄDA‚Ò¡õ ¶BI/ÕÒD Áª+a„°´©lS……ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä fd¦žšèÃä @œr ßAÔàÝÈdƒ8sŒúZZ©ÀräÈhp ЧôÐhÚ $ ÜØÍŽ©…F  ƒimÖþ‹ýRt›Kn¿MT›§IÛÿT¹u äH!fi¥úéy¼„òü„r‡"ñ. ó!øq “ „P9,„²°(² a¶ä2Çé/l3l0ÍÁ†h~öÒ÷wŒ"í¸EÆ "íàŒa i…Â#™pÈeÀð0\ N¤4Ÿý.ƒxmÚÕýWi í$íƒi>‚ 0Ðoj’GH¡È.ä["Ù9 e½D…³ÇÚr£Òÿºÿé÷}%| /I·a¦ÝiV¡ƒ@ŒéX´4á¼R øG„xDrÄxG„xAì…‹d2à…‰~’é½ûýÿUún«ÿ}&ðÞé$¢ÈàÒÂ_ÓzZi¢>ÕmM4^ašIŽj˜Aëëÿÿÿ_î¸é>:M÷#«uøt›VÒOûñEÝl]kDwKI°’1µP©§Ò^ýÿö¶¾—¶•é ëî­Úõÿ]Hÿÿé½Ú­¶/·ô‚~\Þ‹›—}$´¯úýµmU×î¿¿oºÝ.ÿý!š9r_ïzÿëmwZÃÖ“z_ýöÂÑ¿KÛJõoKßm´˜'K¾õJÈŽ{5‘çƒD‚PHs^HsY!Êpƒ$:h2 ä3½þh$äÉŽD{_Òþ»_J­UýÿЙá÷øKö$}$‚ ÛVPÿõî±Kumktà 65TÁÛmÐa´ƒ#È-‚â‰Èá‚;.~¡¶¤Ü¨"<Ì9‡Úé÷ûuÿÈëúõé&‡¥¿jpÚ²89¢±Pý‡ïõ±‰C¥±±ÌÁ´Ó¤Ýé Çzúuww¥µn°•;ÒŽ“îßýîµL6ÕwKÿ÷Òçþ•~ªo°š øoÿÛhG!à‰ôÖGwßoÿý&ükoõßøo`õ]Žiuÿïô¦hÌ.à‚˜ŸõÖôØ~ßþ½uTÜŽ_í/ÿþÿþÂÿï¤ÃöoýñªJÈóÿÿÿB %ã·ôµ¿¾Ã¯ÿî·ü!ÿöÿ ‡ÿý¿mÏ“Í*Dy›:oІqÁÿÿé{~ÿt—¯á¾Ã×#ŽºI}?ÿàˆÿÿ ÿÿÿí¤ß·bûþÒI$­é~¼_ïGÏÒÿÛýUÿ÷÷í'ÕßI/ÿÿÂ_þÿÿÿíømõúÇ·/þ6ºT—÷ýWõ÷¿þ•7é$é+Ú÷ÿÿÿîõÿoù ã¥}¯¤F:^“ú½¯kÖ—·ïúI~×o½.¿¤•ÿû~ßkë˜}¿´Û»^ôÜŒ²1óG±LRZJ½%{kÚ^­®–¿·úI?ÿîCý®—zb!„©¦šl;VÛÕ=YPÓ†ÃjÚ ÖþÒ°ÎN»A4åºI ‘>NÚ (­b£ÑN ½¿¿!I+Kü…o0ë¶–´øˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÐˆˆ‹ˆ´ÂlZa&˜1i­¤ÚkZÿô’m-Sô¶Öën­º{ˆˆˆˆˆˆˆ†–Aݶ©¤˜A›I?Vü0ÖÒV K½!Ða0A„0ƒa”&( h4Ðp Øa&@†A ®4ÐyañÄDDDDHqlD†,A†" ŒŽ`]"""!,ÿÿÿòÁ_|ÿÿÿÿÿÿÿÿÿÿÿÿø€õ" ;Ú¦" ¦§§(Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) ÀÀleptonica-1.70/prog/boxa1.ba0000444000175000017500000000405312116453521013772 0ustar dandan Boxa Version 2 Number of boxes = 44 Box[0]: x = 282, y = 0, w = 1832, h = 2697 Box[1]: x = 479, y = 410, w = 1862, h = 2322 Box[2]: x = 216, y = 0, w = 1746, h = 2732 Box[3]: x = 514, y = 409, w = 1711, h = 2248 Box[4]: x = 204, y = 0, w = 1769, h = 2732 Box[5]: x = 508, y = 409, w = 1752, h = 2248 Box[6]: x = 199, y = 0, w = 1769, h = 2721 Box[7]: x = 508, y = 409, w = 1728, h = 2248 Box[8]: x = 210, y = 0, w = 1757, h = 2721 Box[9]: x = 496, y = 409, w = 1734, h = 2248 Box[10]: x = 216, y = 0, w = 1752, h = 2721 Box[11]: x = 502, y = 409, w = 1762, h = 2248 Box[12]: x = 193, y = 0, w = 1781, h = 2727 Box[13]: x = 502, y = 409, w = 1763, h = 2248 Box[14]: x = 204, y = 0, w = 1763, h = 2721 Box[15]: x = 502, y = 409, w = 1766, h = 2236 Box[16]: x = 187, y = 0, w = 1827, h = 2721 Box[17]: x = 508, y = 409, w = 1762, h = 2236 Box[18]: x = 199, y = 0, w = 1775, h = 2715 Box[19]: x = 508, y = 409, w = 1763, h = 2248 Box[20]: x = 187, y = 0, w = 1833, h = 2337 Box[21]: x = 473, y = 18, w = 1792, h = 2341 Box[22]: x = 239, y = 0, w = 1775, h = 2337 Box[23]: x = 473, y = 18, w = 1792, h = 2347 Box[24]: x = 245, y = 0, w = 1775, h = 2343 Box[25]: x = 473, y = 23, w = 1792, h = 2347 Box[26]: x = 234, y = 0, w = 1781, h = 2325 Box[27]: x = 473, y = 18, w = 1792, h = 2353 Box[28]: x = 234, y = 0, w = 1781, h = 2721 Box[29]: x = 496, y = 397, w = 1798, h = 2265 Box[30]: x = 216, y = 0, w = 1746, h = 2721 Box[31]: x = 496, y = 397, w = 1798, h = 2265 Box[32]: x = 216, y = 0, w = 1746, h = 2709 Box[33]: x = 485, y = 397, w = 1810, h = 2265 Box[34]: x = 228, y = 0, w = 1734, h = 2703 Box[35]: x = 490, y = 397, w = 1792, h = 2248 Box[36]: x = 234, y = 0, w = 1746, h = 2639 Box[37]: x = 479, y = 347, w = 1806, h = 2403 Box[38]: x = 234, y = 0, w = 1746, h = 2639 Box[39]: x = 485, y = 340, w = 1801, h = 2404 Box[40]: x = 234, y = 0, w = 1746, h = 2639 Box[41]: x = 479, y = 343, w = 1808, h = 2407 Box[42]: x = 234, y = 0, w = 1746, h = 2651 Box[43]: x = 479, y = 336, w = 1810, h = 2408 leptonica-1.70/prog/compfilter_reg.c0000640000175000017500000003134012270122643015615 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * compfilter_reg.c * * Tests filters that select components based on size, etc. */ #include "allheaders.h" static void count_pieces(PIX *pix, l_int32 nexp); static void count_pieces2(BOXA *boxa, l_int32 nexp); static l_int32 count_ones(NUMA *na, l_int32 nexp, l_int32 index, const char *name); static const l_float32 edges[13] = {0.0, 0.2, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.7, 0.8, 0.9, 1.0}; #if 1 /* for feyn.tif */ static const l_int32 band[12] = {1, 11, 48, 264, 574, 704, 908, 786, 466, 157, 156, 230}; static const l_int32 total[12] = {1, 12, 60, 324, 898, 1602, 2510, 3296, 3762, 3919, 4075, 4305}; #else /* for rabi.png */ static const l_int32 band[12] = {24, 295, 490, 817, 1768, 962, 8171, 63, 81, 51, 137, 8619}; static const l_int32 total[12] = {24, 319, 809, 1626, 3394, 4356, 12527, 12590, 12671, 12722, 12859, 21478}; #endif int main(int argc, char **argv) { l_int32 w, h, n, i, sum, sumi, empty; BOX *box1, *box2, *box3, *box4; BOXA *boxa, *boxat; NUMA *na1, *na2, *na3, *na4, *na5; NUMA *na2i, *na3i, *na4i, *nat, *naw, *nah; PIX *pixs, *pixc, *pixt, *pixt2, *pixd, *pixcount; PIXA *pixas, *pixad, *pixac; pixDisplayWrite(NULL, -1); /* Draw 4 filled boxes of different sizes */ pixs = pixCreate(200, 200, 1); box1 = boxCreate(10, 10, 20, 30); box2 = boxCreate(50, 10, 40, 20); box3 = boxCreate(110, 10, 35, 5); box4 = boxCreate(160, 10, 5, 15); boxa = boxaCreate(4); boxaAddBox(boxa, box1, L_INSERT); boxaAddBox(boxa, box2, L_INSERT); boxaAddBox(boxa, box3, L_INSERT); boxaAddBox(boxa, box4, L_INSERT); pixRenderBox(pixs, box1, 1, L_SET_PIXELS); pixRenderBox(pixs, box2, 1, L_SET_PIXELS); pixRenderBox(pixs, box3, 1, L_SET_PIXELS); pixRenderBox(pixs, box4, 1, L_SET_PIXELS); pixt = pixFillClosedBorders(pixs, 4); pixDisplayWrite(pixt, 1); pixt2 = pixCreateTemplate(pixs); pixRenderHashBox(pixt2, box1, 6, 4, L_POS_SLOPE_LINE, 1, L_SET_PIXELS); pixRenderHashBox(pixt2, box2, 7, 2, L_POS_SLOPE_LINE, 1, L_SET_PIXELS); pixRenderHashBox(pixt2, box3, 4, 2, L_VERTICAL_LINE, 1, L_SET_PIXELS); pixRenderHashBox(pixt2, box4, 3, 1, L_HORIZONTAL_LINE, 1, L_SET_PIXELS); pixDisplayWrite(pixt2, 1); /* Exercise the parameters */ pixd = pixSelectBySize(pixt, 0, 22, 8, L_SELECT_HEIGHT, L_SELECT_IF_GT, NULL); count_pieces(pixd, 1); pixd = pixSelectBySize(pixt, 0, 30, 8, L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL); count_pieces(pixd, 3); pixd = pixSelectBySize(pixt, 0, 5, 8, L_SELECT_HEIGHT, L_SELECT_IF_GT, NULL); count_pieces(pixd, 3); pixd = pixSelectBySize(pixt, 0, 6, 8, L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL); count_pieces(pixd, 1); pixd = pixSelectBySize(pixt, 20, 0, 8, L_SELECT_WIDTH, L_SELECT_IF_GT, NULL); count_pieces(pixd, 2); pixd = pixSelectBySize(pixt, 31, 0, 8, L_SELECT_WIDTH, L_SELECT_IF_LT, NULL); count_pieces(pixd, 2); pixd = pixSelectBySize(pixt, 21, 10, 8, L_SELECT_IF_EITHER, L_SELECT_IF_LT, NULL); count_pieces(pixd, 3); pixd = pixSelectBySize(pixt, 20, 30, 8, L_SELECT_IF_EITHER, L_SELECT_IF_GT, NULL); count_pieces(pixd, 2); pixd = pixSelectBySize(pixt, 22, 32, 8, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); count_pieces(pixd, 2); pixd = pixSelectBySize(pixt, 6, 32, 8, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); count_pieces(pixd, 1); pixd = pixSelectBySize(pixt, 5, 25, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); count_pieces(pixd, 1); pixd = pixSelectBySize(pixt, 25, 5, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); count_pieces(pixd, 1); pixd = pixSelectByPerimToAreaRatio(pixt, 0.3, 8, L_SELECT_IF_GT, NULL); count_pieces(pixd, 2); pixd = pixSelectByPerimToAreaRatio(pixt, 0.15, 8, L_SELECT_IF_GT, NULL); count_pieces(pixd, 3); pixd = pixSelectByPerimToAreaRatio(pixt, 0.4, 8, L_SELECT_IF_LTE, NULL); count_pieces(pixd, 2); pixd = pixSelectByPerimToAreaRatio(pixt, 0.45, 8, L_SELECT_IF_LT, NULL); count_pieces(pixd, 3); pixd = pixSelectByPerimSizeRatio(pixt2, 2.3, 8, L_SELECT_IF_GT, NULL); count_pieces(pixd, 2); pixd = pixSelectByPerimSizeRatio(pixt2, 1.2, 8, L_SELECT_IF_GT, NULL); count_pieces(pixd, 3); pixd = pixSelectByPerimSizeRatio(pixt2, 1.7, 8, L_SELECT_IF_LTE, NULL); count_pieces(pixd, 1); pixd = pixSelectByPerimSizeRatio(pixt2, 2.9, 8, L_SELECT_IF_LT, NULL); count_pieces(pixd, 3); pixd = pixSelectByAreaFraction(pixt2, 0.3, 8, L_SELECT_IF_LT, NULL); count_pieces(pixd, 0); pixd = pixSelectByAreaFraction(pixt2, 0.9, 8, L_SELECT_IF_LT, NULL); count_pieces(pixd, 4); pixd = pixSelectByAreaFraction(pixt2, 0.5, 8, L_SELECT_IF_GTE, NULL); count_pieces(pixd, 3); pixd = pixSelectByAreaFraction(pixt2, 0.7, 8, L_SELECT_IF_GT, NULL); count_pieces(pixd, 2); boxat = boxaSelectBySize(boxa, 21, 10, L_SELECT_IF_EITHER, L_SELECT_IF_LT, NULL); count_pieces2(boxat, 3); boxat = boxaSelectBySize(boxa, 22, 32, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); count_pieces2(boxat, 2); boxaDestroy(&boxa); pixDestroy(&pixt); pixDestroy(&pixt2); pixDestroy(&pixs); /* Here's the most general method for selecting components. * We do it for area fraction, but any combination of * size, area/perimeter ratio and area fraction can be used. */ pixs = pixRead("feyn.tif"); /* pixs = pixRead("rabi.png"); */ pixc = pixCopy(NULL, pixs); /* subtract bands from this */ pixt = pixCreateTemplate(pixs); /* add bands to this */ pixGetDimensions(pixs, &w, &h, NULL); boxa = pixConnComp(pixs, &pixas, 8); n = boxaGetCount(boxa); fprintf(stderr, "total: %d\n", n); na1 = pixaFindAreaFraction(pixas); nat = numaCreate(0); numaSetCount(nat, n); /* initialize to all 0 */ sum = sumi = 0; pixac = pixaCreate(0); for (i = 0; i < 12; i++) { /* Compute within the intervals using an intersection. */ na2 = numaMakeThresholdIndicator(na1, edges[i], L_SELECT_IF_GTE); if (i != 11) na3 = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_LT); else na3 = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_LTE); na4 = numaLogicalOp(NULL, na2, na3, L_INTERSECTION); sum += count_ones(na4, 0, 0, NULL); /* Compute outside the intervals using a union, and invert */ na2i = numaMakeThresholdIndicator(na1, edges[i], L_SELECT_IF_LT); if (i != 11) na3i = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_GTE); else na3i = numaMakeThresholdIndicator(na1, edges[i + 1], L_SELECT_IF_GT); na4i = numaLogicalOp(NULL, na3i, na2i, L_UNION); numaInvert(na4i, na4i); sumi += count_ones(na4i, 0, 0, NULL); /* Compare the two methods */ if (sum == sumi) fprintf(stderr, "\nCorrect: sum = sumi = %d\n", sum); else fprintf(stderr, "\nWRONG: sum = %d, sumi = %d\n", sum, sumi); /* Reconstruct the image, band by band. */ numaLogicalOp(nat, nat, na4, L_UNION); pixad = pixaSelectWithIndicator(pixas, na4, NULL); pixd = pixaDisplay(pixad, w, h); pixOr(pixt, pixt, pixd); /* add them in */ pixcount = pixCopy(NULL, pixt); /* destroyed by count_pieces */ count_ones(na4, band[i], i, "band"); count_pieces(pixd, band[i]); count_ones(nat, total[i], i, "total"); count_pieces(pixcount, total[i]); pixaDestroy(&pixad); /* Remove band successively from full image */ pixRemoveWithIndicator(pixc, pixas, na4); pixSaveTiled(pixc, pixac, 0.25, 1 - i % 2, 25, 8); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na2i); numaDestroy(&na3i); numaDestroy(&na4i); } /* Did we remove all components from pixc? */ pixZero(pixc, &empty); if (!empty) fprintf(stderr, "\nWRONG: not all pixels removed from pixc\n"); pixDestroy(&pixs); pixDestroy(&pixc); pixDestroy(&pixt); boxaDestroy(&boxa); pixaDestroy(&pixas); numaDestroy(&na1); numaDestroy(&nat); /* One last extraction. Get all components that have either * a height of at least 50 or a width of between 30 and 35, * and also have a relatively large perimeter/area ratio. */ pixs = pixRead("feyn.tif"); boxa = pixConnComp(pixs, &pixas, 8); n = boxaGetCount(boxa); pixaFindDimensions(pixas, &naw, &nah); na1 = pixaFindPerimToAreaRatio(pixas); na2 = numaMakeThresholdIndicator(nah, 50, L_SELECT_IF_GTE); na3 = numaMakeThresholdIndicator(naw, 30, L_SELECT_IF_GTE); na4 = numaMakeThresholdIndicator(naw, 35, L_SELECT_IF_LTE); na5 = numaMakeThresholdIndicator(na1, 0.4, L_SELECT_IF_GTE); numaLogicalOp(na3, na3, na4, L_INTERSECTION); numaLogicalOp(na2, na2, na3, L_UNION); numaLogicalOp(na2, na2, na5, L_INTERSECTION); numaInvert(na2, na2); /* get components to be removed */ pixRemoveWithIndicator(pixs, pixas, na2); pixSaveTiled(pixs, pixac, 0.25, 1, 25, 8); pixDestroy(&pixs); boxaDestroy(&boxa); pixaDestroy(&pixas); numaDestroy(&naw); numaDestroy(&nah); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); pixDisplayMultiple("/tmp/display/file*"); pixd = pixaDisplay(pixac, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/comp.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixac); return 0; } void count_pieces(PIX *pix, l_int32 nexp) { l_int32 n; BOXA *boxa; pixDisplayWrite(pix, 1); boxa = pixConnComp(pix, NULL, 8); n = boxaGetCount(boxa); if (n == nexp) fprintf(stderr, "Correct: Num. comps: %d\n", n); else fprintf(stderr, "WRONG!: Num. comps: %d\n", n); boxaDestroy(&boxa); pixDestroy(&pix); } void count_pieces2(BOXA *boxa, l_int32 nexp) { l_int32 n; n = boxaGetCount(boxa); if (n == nexp) fprintf(stderr, "Correct: Num. boxes: %d\n", n); else fprintf(stderr, "WRONG!: Num. boxes: %d\n", n); boxaDestroy(&boxa); } l_int32 count_ones(NUMA *na, l_int32 nexp, l_int32 index, const char *name) { l_int32 i, n, val, sum; n = numaGetCount(na); sum = 0; for (i = 0; i < n; i++) { numaGetIValue(na, i, &val); if (val == 1) sum++; } if (!name) return sum; if (nexp == sum) fprintf(stderr, "Correct: %s[%d]: num. ones: %d\n", name, index, sum); else fprintf(stderr, "WRONG!: %s[%d]: num. ones: %d\n", name, index, sum); return 0; } leptonica-1.70/prog/binmorph4_reg.c0000644000175000017500000005131112240303447015357 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binmorph4_reg.c * * Regression test for dwa brick morph operations * We compare: * (1) morph composite vs. morph non-composite * (2) dwa non-composite vs. morph composite * (3) dwa composite vs. dwa non-composite * (4) dwa composite vs. morph composite * (5) dwa composite vs. morph non-composite * The brick functions all have a pre-allocated pix as the dest. */ #include "allheaders.h" l_int32 DoComparisonDwa1(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize); l_int32 DoComparisonDwa2(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize); l_int32 DoComparisonDwa3(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize); l_int32 DoComparisonDwa4(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize); l_int32 DoComparisonDwa5(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize); l_int32 PixCompareDwa(l_int32 size, const char *type, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6); #define TIMING 0 /* This fails on the symmetric case, but the differences are * relatively small. Most of the problems seems to be in the * non-dwa code, because we are doing sequential erosions * without an extra border, and things aren't being properly * initialized. To avoid these errors, add a border in advance * for symmetric b.c. Note that asymmetric b.c. are recommended * for document image operations, and this test passes for * asymmetric b.c. */ #define TEST_SYMMETRIC 0 /* set to 1 for symmetric b.c.; otherwise, it tests asymmetric b.c. */ int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; pixs = pixRead("feyn.tif"); #if TEST_SYMMETRIC /* This works properly if there is an added border */ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); #if 1 pixt1 = pixAddBorder(pixs, 64, 0); pixTransferAllData(pixs, &pixt1, 0, 0); #endif #endif /* TEST_SYMMETRIC */ pixt1 = pixCreateTemplateNoInit(pixs); pixt2 = pixCreateTemplateNoInit(pixs); pixt3 = pixCreateTemplateNoInit(pixs); pixt4 = pixCreateTemplateNoInit(pixs); pixt5 = pixCreateTemplateNoInit(pixs); pixt6 = pixCreateTemplateNoInit(pixs); for (i = 2; i < 64; i++) { #if 1 /* Compare morph composite with morph non-composite */ DoComparisonDwa1(pixs, pixt1, pixt2, pixt3, pixt4, pixt5, pixt6, i); #endif #if 1 /* Compare DWA non-composite with morph composite */ if (i < 16) DoComparisonDwa2(pixs, pixt1, pixt2, pixt3, pixt4, pixt5, pixt6, i); /* Compare DWA composite with DWA non-composite */ if (i < 16) DoComparisonDwa3(pixs, pixt1, pixt2, pixt3, pixt4, pixt5, pixt6, i); /* Compare DWA composite with morph composite */ DoComparisonDwa4(pixs, pixt1, pixt2, pixt3, pixt4, pixt5, pixt6, i); /* Compare DWA composite with morph non-composite */ DoComparisonDwa5(pixs, pixt1, pixt2, pixt3, pixt4, pixt5, pixt6, i); #endif } pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); return 0; } /* morph composite with morph non-composite */ l_int32 DoComparisonDwa1(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; fprintf(stderr, "..%d..", size); if (TIMING) startTimer(); pixDilateCompBrick(pixt1, pixs, size, 1); pixDilateCompBrick(pixt3, pixs, 1, size); pixDilateCompBrick(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrick(pixt2, pixs, size, 1); pixDilateBrick(pixt4, pixs, 1, size); pixDilateBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "dilate", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixErodeCompBrick(pixt1, pixs, size, 1); pixErodeCompBrick(pixt3, pixs, 1, size); pixErodeCompBrick(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrick(pixt2, pixs, size, 1); pixErodeBrick(pixt4, pixs, 1, size); pixErodeBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "erode", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixOpenCompBrick(pixt1, pixs, size, 1); pixOpenCompBrick(pixt3, pixs, 1, size); pixOpenCompBrick(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrick(pixt2, pixs, size, 1); pixOpenBrick(pixt4, pixs, 1, size); pixOpenBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "open", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); #if 1 pixWrite("/tmp/junko1.png", pixt1, IFF_PNG); pixWrite("/tmp/junko2.png", pixt2, IFF_PNG); pixXor(pixt1, pixt1, pixt2); pixWrite("/tmp/junkoxor.png", pixt1, IFF_PNG); #endif #if 0 pixDisplay(pixt1, 100, 100); pixDisplay(pixt2, 800, 100); pixWrite("/tmp/junkpixt1.png", pixt1, IFF_PNG); pixWrite("/tmp/junkpixt2.png", pixt2, IFF_PNG); #endif if (TIMING) startTimer(); pixCloseSafeCompBrick(pixt1, pixs, size, 1); pixCloseSafeCompBrick(pixt3, pixs, 1, size); pixCloseSafeCompBrick(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeBrick(pixt2, pixs, size, 1); pixCloseSafeBrick(pixt4, pixs, 1, size); pixCloseSafeBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "close", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); #if 1 pixWrite("/tmp/junkc1.png", pixt1, IFF_PNG); pixWrite("/tmp/junkc2.png", pixt2, IFF_PNG); pixXor(pixt1, pixt1, pixt2); pixWrite("/tmp/junkcxor.png", pixt1, IFF_PNG); #endif return 0; } /* dwa non-composite with morph composite */ l_int32 DoComparisonDwa2(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; fprintf(stderr, "..%d..", size); if (TIMING) startTimer(); pixDilateBrickDwa(pixt1, pixs, size, 1); pixDilateBrickDwa(pixt3, pixs, 1, size); pixDilateBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateCompBrick(pixt2, pixs, size, 1); pixDilateCompBrick(pixt4, pixs, 1, size); pixDilateCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "dilate", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); /* pixDisplay(pixt1, 100, 100); */ /* pixDisplay(pixt2, 800, 100); */ if (TIMING) startTimer(); pixErodeBrickDwa(pixt1, pixs, size, 1); pixErodeBrickDwa(pixt3, pixs, 1, size); pixErodeBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeCompBrick(pixt2, pixs, size, 1); pixErodeCompBrick(pixt4, pixs, 1, size); pixErodeCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "erode", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixOpenBrickDwa(pixt1, pixs, size, 1); pixOpenBrickDwa(pixt3, pixs, 1, size); pixOpenBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenCompBrick(pixt2, pixs, size, 1); pixOpenCompBrick(pixt4, pixs, 1, size); pixOpenCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "open", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixCloseBrickDwa(pixt1, pixs, size, 1); pixCloseBrickDwa(pixt3, pixs, 1, size); pixCloseBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeCompBrick(pixt2, pixs, size, 1); pixCloseSafeCompBrick(pixt4, pixs, 1, size); pixCloseSafeCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "close", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); /* pixWrite("/tmp/junkpixt1.png", pixt1, IFF_PNG); */ /* pixWrite("/tmp/junkpixt2.png", pixt2, IFF_PNG); */ /* pixXor(pixt1, pixt1, pixt2); */ /* pixWrite("/tmp/junkxor.png", pixt1, IFF_PNG); */ return 0; } /* dwa composite with dwa non-composite */ l_int32 DoComparisonDwa3(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; fprintf(stderr, "..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickDwa(pixt1, pixs, size, 1); pixDilateCompBrickDwa(pixt3, pixs, 1, size); pixDilateCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrickDwa(pixt2, pixs, size, 1); pixDilateBrickDwa(pixt4, pixs, 1, size); pixDilateBrickDwa(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "dilate", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); /* pixDisplay(pixt1, 100, 100); */ /* pixDisplay(pixt2, 800, 100); */ if (TIMING) startTimer(); pixErodeCompBrickDwa(pixt1, pixs, size, 1); pixErodeCompBrickDwa(pixt3, pixs, 1, size); pixErodeCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrickDwa(pixt2, pixs, size, 1); pixErodeBrickDwa(pixt4, pixs, 1, size); pixErodeBrickDwa(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "erode", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixOpenCompBrickDwa(pixt1, pixs, size, 1); pixOpenCompBrickDwa(pixt3, pixs, 1, size); pixOpenCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrickDwa(pixt2, pixs, size, 1); pixOpenBrickDwa(pixt4, pixs, 1, size); pixOpenBrickDwa(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "open", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixCloseCompBrickDwa(pixt1, pixs, size, 1); pixCloseCompBrickDwa(pixt3, pixs, 1, size); pixCloseCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseBrickDwa(pixt2, pixs, size, 1); pixCloseBrickDwa(pixt4, pixs, 1, size); pixCloseBrickDwa(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "close", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); #if 0 pixWrite("/tmp/junkpixt1.png", pixt1, IFF_PNG); pixWrite("/tmp/junkpixt2.png", pixt2, IFF_PNG); pixXor(pixt1, pixt1, pixt2); pixWrite("/tmp/junkxor.png", pixt1, IFF_PNG); #endif return 0; } /* dwa composite with morph composite */ l_int32 DoComparisonDwa4(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; fprintf(stderr, "..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickDwa(pixt1, pixs, size, 1); pixDilateCompBrickDwa(pixt3, pixs, 1, size); pixDilateCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateCompBrick(pixt2, pixs, size, 1); pixDilateCompBrick(pixt4, pixs, 1, size); pixDilateCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "dilate", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); /* pixDisplay(pixt1, 100, 100); */ /* pixDisplay(pixt2, 800, 100); */ if (TIMING) startTimer(); pixErodeCompBrickDwa(pixt1, pixs, size, 1); pixErodeCompBrickDwa(pixt3, pixs, 1, size); pixErodeCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeCompBrick(pixt2, pixs, size, 1); pixErodeCompBrick(pixt4, pixs, 1, size); pixErodeCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "erode", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixOpenCompBrickDwa(pixt1, pixs, size, 1); pixOpenCompBrickDwa(pixt3, pixs, 1, size); pixOpenCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenCompBrick(pixt2, pixs, size, 1); pixOpenCompBrick(pixt4, pixs, 1, size); pixOpenCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "open", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); /* pixDisplay(pixt1, 100, 100); */ /* pixDisplay(pixt2, 800, 100); */ /* pixWrite("/tmp/junkpixt1.png", pixt1, IFF_PNG); */ /* pixWrite("/tmp/junkpixt2.png", pixt2, IFF_PNG); */ if (TIMING) startTimer(); pixCloseCompBrickDwa(pixt1, pixs, size, 1); pixCloseCompBrickDwa(pixt3, pixs, 1, size); pixCloseCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeCompBrick(pixt2, pixs, size, 1); pixCloseSafeCompBrick(pixt4, pixs, 1, size); pixCloseSafeCompBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "close", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); return 0; } /* dwa composite with morph non-composite */ l_int32 DoComparisonDwa5(PIX *pixs, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6, l_int32 isize) { l_int32 fact1, fact2, size; selectComposableSizes(isize, &fact1, &fact2); size = fact1 * fact2; fprintf(stderr, "..%d..", size); if (TIMING) startTimer(); pixDilateCompBrickDwa(pixt1, pixs, size, 1); pixDilateCompBrickDwa(pixt3, pixs, 1, size); pixDilateCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixDilateBrick(pixt2, pixs, size, 1); pixDilateBrick(pixt4, pixs, 1, size); pixDilateBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "dilate", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); /* pixDisplay(pixt1, 100, 100); */ /* pixDisplay(pixt2, 800, 100); */ if (TIMING) startTimer(); pixErodeCompBrickDwa(pixt1, pixs, size, 1); pixErodeCompBrickDwa(pixt3, pixs, 1, size); pixErodeCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixErodeBrick(pixt2, pixs, size, 1); pixErodeBrick(pixt4, pixs, 1, size); pixErodeBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "erode", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixOpenCompBrickDwa(pixt1, pixs, size, 1); pixOpenCompBrickDwa(pixt3, pixs, 1, size); pixOpenCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixOpenBrick(pixt2, pixs, size, 1); pixOpenBrick(pixt4, pixs, 1, size); pixOpenBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "open", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); if (TIMING) startTimer(); pixCloseCompBrickDwa(pixt1, pixs, size, 1); pixCloseCompBrickDwa(pixt3, pixs, 1, size); pixCloseCompBrickDwa(pixt5, pixs, size, size); if (TIMING) fprintf(stderr, "Time Dwa: %7.3f sec\n", stopTimer()); if (TIMING) startTimer(); pixCloseSafeBrick(pixt2, pixs, size, 1); pixCloseSafeBrick(pixt4, pixs, 1, size); pixCloseSafeBrick(pixt6, pixs, size, size); if (TIMING) fprintf(stderr, "Time Rop: %7.3f sec\n", stopTimer()); PixCompareDwa(size, "close", pixt1, pixt2, pixt3, pixt4, pixt5, pixt6); return 0; } l_int32 PixCompareDwa(l_int32 size, const char *type, PIX *pixt1, PIX *pixt2, PIX *pixt3, PIX *pixt4, PIX *pixt5, PIX *pixt6) { l_int32 same, fail; fail = FALSE; pixEqual(pixt1, pixt2, &same); if (!same) { fail = TRUE; fprintf(stderr, "%s (%d, 1) not same\n", type, size); } pixEqual(pixt3, pixt4, &same); if (!same) { fail = TRUE; fprintf(stderr, "%s (1, %d) not same\n", type, size); } pixEqual(pixt5, pixt6, &same); if (!same) { fail = TRUE; fprintf(stderr, "%s (%d, %d) not same\n", type, size, size); } return fail; } leptonica-1.70/prog/comparetest.c0000644000175000017500000001410312242266756015161 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * comparetest.c * * comparetest filein1 filein2 type fileout * * where * type = {0, 1} for {abs-diff and subtraction} comparisons * * Compares two images, using either the absolute value of the * pixel differences or the difference clipped to 0. For RGB, * the differences are computed separately on each component. * If one has a colormap and the other doesn't, the colormap * is removed before making the comparison. * * Warning: you usually want to use abs-diff to compare * two grayscale or color images. If you use subtraction, * the result you get will depend on the order of the input images. * For example, if pix2 = pixDilateGray(pix1), then every * pixel in pix1 will be equal to or greater than pix2. So if * you subtract pix2 from pix1, you will get 0 for all pixels, * which looks like they're the same! * * Here's an interesting observation. Take an image that has * been jpeg compressed at a quality = 75. If you re-compress * the image, what quality factor should be used to minimize * the change? Answer: 75 (!) */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 type, comptype, d1, d2, same, first, last; l_float32 fract, diff, rmsdiff; char *filein1, *filein2, *fileout; GPLOT *gplot; NUMA *na1, *na2; PIX *pixs1, *pixs2, *pixd; static char mainName[] = "comparetest"; if (argc != 5) return ERROR_INT(" Syntax: comparetest filein1 filein2 type fileout", mainName, 1); filein1 = argv[1]; filein2 = argv[2]; type = atoi(argv[3]); pixd = NULL; fileout = argv[4]; l_pngSetReadStrip16To8(0); if ((pixs1 = pixRead(filein1)) == NULL) return ERROR_INT("pixs1 not made", mainName, 1); if ((pixs2 = pixRead(filein2)) == NULL) return ERROR_INT("pixs2 not made", mainName, 1); d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (d1 == 1 && d2 == 1) { pixEqual(pixs1, pixs2, &same); if (same) { fprintf(stderr, "Images are identical\n"); pixd = pixCreateTemplate(pixs1); /* write empty pix for diff */ } else { if (type == 0) comptype = L_COMPARE_XOR; else comptype = L_COMPARE_SUBTRACT; pixCompareBinary(pixs1, pixs2, comptype, &fract, &pixd); fprintf(stderr, "Fraction of different pixels: %10.6f\n", fract); } pixWrite(fileout, pixd, IFF_PNG); } else { if (type == 0) comptype = L_COMPARE_ABS_DIFF; else comptype = L_COMPARE_SUBTRACT; pixCompareGrayOrRGB(pixs1, pixs2, comptype, GPLOT_X11, &same, &diff, &rmsdiff, &pixd); if (type == 0) { if (same) fprintf(stderr, "Images are identical\n"); else { fprintf(stderr, "Images differ: = %10.6f\n", diff); fprintf(stderr, " = %10.6f\n", rmsdiff); } } else { /* subtraction */ if (same) fprintf(stderr, "pixs2 strictly greater than pixs1\n"); else { fprintf(stderr, "Images differ: = %10.6f\n", diff); fprintf(stderr, " = %10.6f\n", rmsdiff); } } if (d1 != 16) pixWrite(fileout, pixd, IFF_JFIF_JPEG); else pixWrite(fileout, pixd, IFF_PNG); if (d1 != 16) { na1 = pixCompareRankDifference(pixs1, pixs2, 1); if (na1) { fprintf(stderr, "na1[150] = %20.10f\n", na1->array[150]); fprintf(stderr, "na1[200] = %20.10f\n", na1->array[200]); fprintf(stderr, "na1[250] = %20.10f\n", na1->array[250]); numaGetNonzeroRange(na1, 0.00005, &first, &last); fprintf(stderr, "Nonzero diff range: first = %d, last = %d\n", first, last); na2 = numaClipToInterval(na1, first, last); gplot = gplotCreate("/tmp/junkrank", GPLOT_X11, "Pixel Rank Difference", "pixel val", "rank"); gplotAddPlot(gplot, NULL, na2, GPLOT_LINES, "rank"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na1); numaDestroy(&na2); } } } pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/sudoku6.dat0000444000175000017500000000032611465606421014552 0ustar dandan# sudoku6.dat # 6 star sudoku (Jackson Hole daily) 7 8 0 0 0 6 3 0 0 0 0 0 9 8 0 5 0 4 0 0 0 0 3 0 0 8 0 3 0 8 4 0 0 0 0 0 0 0 0 5 7 1 0 0 0 0 0 0 0 0 8 9 0 1 0 6 0 0 2 0 0 0 0 9 0 7 0 1 3 0 0 0 0 0 3 6 0 0 0 2 7 leptonica-1.70/prog/italictest.c0000644000175000017500000000653412244775416015011 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * italictest.c * * Demonstrates binary reconstruction for finding italic text. */ #include "allheaders.h" int main(int argc, char **argv) { char opstring[32]; l_int32 size; BOXA *boxa1, *boxa2, *boxa3, *boxawm; PIX *pixs, *pixm, *pixt; static char mainName[] = "italictest"; if (argc != 1 && argc != 2) return ERROR_INT(" Syntax: italictest [filein]", mainName, 1); if (argc == 1) pixs = pixRead("italic.png"); else pixs = pixRead(argv[1]); if (!pixs) return ERROR_INT("pixs not read", mainName, 1); /* Basic functionality with debug flag */ pixItalicWords(pixs, NULL, NULL, &boxa1, 1); boxaWrite("/tmp/ital1.ba", boxa1); pixt = pixRead("/tmp/ital.png"); pixDisplayWithTitle(pixt, 0, 0, "Intermediate steps", 1); pixDestroy(&pixt); pixt = pixRead("/tmp/runhisto.png"); pixDisplayWithTitle(pixt, 800, 0, "Histogram of white runs", 1); pixDestroy(&pixt); /* Generate word mask */ pixWordMaskByDilation(pixs, 20, NULL, &size); L_INFO("dilation size = %d\n", mainName, size); snprintf(opstring, sizeof(opstring), "d1.5 + c%d.1", size); pixm = pixMorphSequence(pixs, opstring, 0); pixWrite("/tmp/ital-wm.png", pixm, IFF_PNG); pixDisplayWithTitle(pixm, 800, 200, "Word mask", 1); /* Re-run italic finder using the word mask */ pixItalicWords(pixs, NULL, pixm, &boxa2, 1); boxaWrite("/tmp/ital2.ba", boxa2); /* Re-run italic finder using word mask bounding boxes */ boxawm = pixConnComp(pixm, NULL, 8); pixItalicWords(pixs, boxawm, NULL, &boxa3, 1); boxaWrite("/tmp/ital-wm.ba", boxawm); boxaWrite("/tmp/ital3.ba", boxa3); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxawm); pixDestroy(&pixs); pixDestroy(&pixm); return 0; } leptonica-1.70/prog/barcode-128-300.png0000444000175000017500000000515310770123063015372 0ustar dandan‰PNG  IHDR­‹GÛgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I ŸIDATxœíœOn$·‡ÙaBV•$æ5²\Gñb ›Ðp•  ¯ú>JJ-çaC‹,ÃΊ¶)2$ëÿ«›ÙÄÕ#Œ¦ͧ7ßû½GJ3=@ü/ìØ»cwìŽÝ±;öìe|ß7–À‚F¿«ôÏgj ÚDZ ÔúýPbÅAEÆOô–‚8aa,‡Ë*ö[ˆèq,þjÀêšûŠÕÌJ`›nÁvEϘÀöòny)ÔØæùZ Û!!9 Ø×"Øg¹Ê*Äò#¹ª¶ˆÛgA˜ UÕ«)yx&ÇØ] `¯âª±%¦Lae¨ž`G,,2¼KÐsÿ]õ,•òJ¾™2+Ò<÷¼z°¬ÂÂö½€j,©ûc¬”€[‰­€*²õ¬.ˆílßö¼ ŽÕvâµVNÙ„USÆa1,ÑÔ “ت V®•_Ô3¹oE‘–i¬Ü±:· ûSOQl:à|¦*·úã€Áþî€ÿeÑ—9"ånQ‹Ë £±E6˜2Pk\(lÎE(çú!Ov€TÀûËtex ˥ɮQ«k=V°âº¶{×ã׌}-‡åíZw-Ͱû°Ÿû”Çć8µ40"•Â~Uß…ýù¯â{*g®¹@%îÊe›°?rÁ!A´fm€h,´í$ö°Ëÿñ¥oy#èN-‡¸&òR×dyr+h¬p±RBÄí¿ÄMÞŒÞ>Z5Ac-;àšÎXЈýX$ÔºZKЂÉHlÄÊ*g h®vÍ-Fµ í›\¤:kìeÁòÃ$ÁpëaCIPX¦±SµËV6‡É§J%D±žŒÐX­!5òè^ÜZI8Únµ¨Va?´„÷EŸ$ »´ì¨6„]ÜÚ-fD, Q·‹»e`N‚×2›’ ±À’àºIµ¬¶Z†5-s%CS•‡S8·mnn©ž2; õ€%Ö˜2šçöf·ŒX@‚]Ÿ2¼ ï"›Xo1†°Dc—UcaÙ ¡Å+I³ÆÁ“à$¡ ¸ÌiY(`4Rm|1šûölº%V˶ŒSfW &¬ÛÐ8„æíÛEqÜ’`ÀRÌÄ"S€¥© ˜?¼HŒkÜ‘pÛ°`˦³Ì˜²Û°Œ Ƭj/ñ$èÐÊ[X^:"mì0¼÷¸ ,=eN‡¨Õä,ávX5ÿ™²ø8”oƒ‰5l¨eM: 9kÜÙ·ãÉ‹xdx•[÷Úœ>Ëhõæ¯#á–‹$`Û¸;ÁÌ-°I°‡÷2í„ȪÉL‚»Æ#,•Û¸sÕ4Ë­fº±ehƾé$œ] ÌiY~nýá}Э)ám¹1 ëVƒ7çÖ<Þü“×ÁÞȆUcoÀ­—„l·ÉÜ®IØ6Ž5ÝzXš–Àš¼UC7¯qæ´¬q±Ø¼~ nelNBdˆÙ²U¬¹o#XºLÚ¼ÁÀ´k3·¡€µYn‰ã6°.týhØÆ^5MhÕI@÷å6ŽÕ-ëCØtÀ€¹Æ›D u¬Zœ[m;V[G%,·ƒ{š(¶±s»‚ NYDqܦ°¡q¸[4’ ¾?”l™)!×í‚ÝÆvÂ5·eø>·Öð6+I˜%’P»¹=÷A,q°“Û¾ln'·}OB®[âcS&?.$aÁ‚%`§‹nb-CnÔ´áj7aoÜhYÜ­Hˆ$!²jjOB8`)Cêû¥ u®h¬šKÆ€ÝëvJqZVOØ„[—‚ ©ã>RmíCØíѨöf`»\ áj l3aÉ\í–€ùØaÊF XCŸ›„¶â>6ívµe:·<زÄ8äaáõªõ±[B•’à$ÔÑqp±^µpÂI8åå6w¦€™-#Ù-£ öÉÁrkxÇjad²Z6aoÞ”ÁÕjÝ–=™IèL··-VZ¶Ñ­™â¬Jµ ç úÀì¶3±Ä¨6Ö²û‘˜²Žc–„1 ïNµpZãÜkÙ¼ªtˈS-0ÝòơؔÙ¨—[èWëo°tµ! l®„1·bÁNÕvþ™+á#:¼˃¹}Ø-õX-Q[kŽÃJÀ|lpxo#vnY{ñÝjl?TË`1 ²eGB ˜Ü·"-ÁukÌÅ­j3$¼÷m7µ,7·6VŸebl™X‘@& Éqø˜6˜3È:"«e™n O“[ ûÔvª[ÀÚ§Cc­qÞ fËzw'ŒÕ¶y.>vr+BØÛõ$Xœ$Ôþ”eT;ŒÃ€½ŒÃë·ÌY5Ü ³e•ÆÎÕçjÓ-›ªe:·ÖðÊßíKh¬j³Üb?`Ì9tžBؼ܊i1:«¦öÝfŒZûvœ2R Ó¾•X1H@Ü®V{ö«×øâv‘ÐXûvHÂ9Žeðjƒ–@ƒX¯ZùUýZÀfì×K¡ÛÜ–·$¼/nÅØ¬j»L,•Õ.«Ã-°ØOBÒíP훉 HÜžòZFÍ–Iì9êÖkYKGì›v«±bH‚5y¹¥†Û ‹¦áÜúؼ–ÝŒ$ ØÙí„=EÝÆZ¦°tnÙìvÂò•–¥’`cÑ„ ì^,²sË]·už[3·Ç1·–„Ù-[¶R-ÕØÛœ„ã"!0Û'†×™²¯ÕÒqx‡jiÍ*܈¿£ÿ"B¹½9¹M`¿k1úIô\„€]G·h^ÛŸ è“ý1‚‹aÛ;¸Å[óJ´iRKýq¶~_Ä&ZË«_Äç7÷ ‚Ø/’BØÒû«Àþ³VÞ0(’[Oý-jŠx‘WvcyúÊý5– sþ€ëÓAÑ$sÄöe^s*À‹€¸­€ÜgrÓ‰—WB `y}å5im‹óõÆ `YCX#™¬QX .äÊš"ØS#™|ÂÒ"Ø–[Žf,’Øöq¬x²s„Ž tIMEØ 4˜= tEXtSoftwareESP Ghostscript 815.02 Æ”Å_IEND®B`‚leptonica-1.70/prog/ccthin1_reg.c0000644000175000017500000002476512270122643015023 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ccthin1_reg.c * * Tests the "best" cc-preserving thinning functions. * Displays all the strong cc-preserving 3x3 Sels. */ #include "allheaders.h" /* Sels for 4-connected thinning */ static const char *sel_4_1 = " x" "oCx" " x"; static const char *sel_4_2 = " x" "oCx" " o "; static const char *sel_4_3 = " o " "oCx" " x"; static const char *sel_4_4 = " o " "oCx" " o "; static const char *sel_4_5 = " ox" "oCx" " o "; static const char *sel_4_6 = " o " "oCx" " ox"; static const char *sel_4_7 = " xx" "oCx" " o "; static const char *sel_4_8 = " x" "oCx" "o x"; static const char *sel_4_9 = "o x" "oCx" " x"; /* Sels for 8-connected thinning */ static const char *sel_8_1 = " x " "oCx" " x "; static const char *sel_8_2 = " x " "oCx" "o "; static const char *sel_8_3 = "o " "oCx" " x "; static const char *sel_8_4 = "o " "oCx" "o "; static const char *sel_8_5 = "o x" "oCx" "o "; static const char *sel_8_6 = "o " "oCx" "o x"; static const char *sel_8_7 = " x " "oCx" "oo "; static const char *sel_8_8 = " x " "oCx" "ox "; static const char *sel_8_9 = "ox " "oCx" " x "; /* Sels for both 4 and 8-connected thinning */ static const char *sel_48_1 = " xx" "oCx" "oo "; static const char *sel_48_2 = "o x" "oCx" "o x"; int main(int argc, char **argv) { BOX *box; PIX *pix, *pixs, *pixd, *pixt; PIXA *pixa; SEL *sel, *sel1, *sel2, *sel3; SELA *sela4, *sela8, *sela48; static char mainName[] = "ccthin1_reg"; if (argc != 1) return ERROR_INT(" Syntax: ccthin1_reg", mainName, 1); /* Generate and display all of the 4-cc sels */ sela4 = selaCreate(9); sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_2, 3, 3, "sel_4_2"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_3, 3, 3, "sel_4_3"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_4, 3, 3, "sel_4_4"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_5, 3, 3, "sel_4_5"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_6, 3, 3, "sel_4_6"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_7, 3, 3, "sel_4_7"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_8, 3, 3, "sel_4_8"); selaAddSel(sela4, sel, NULL, 0); sel = selCreateFromString(sel_4_9, 3, 3, "sel_4_9"); selaAddSel(sela4, sel, NULL, 0); pixt = selaDisplayInPix(sela4, 35, 3, 15, 3); pixWrite("/tmp/junkallsel4.png", pixt, IFF_PNG); pixDestroy(&pixt); selaDestroy(&sela4); /* Generate and display all of the 8-cc sels */ sela8 = selaCreate(9); sel = selCreateFromString(sel_8_1, 3, 3, "sel_8_1"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_4, 3, 3, "sel_8_4"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_7, 3, 3, "sel_8_7"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_8, 3, 3, "sel_8_8"); selaAddSel(sela8, sel, NULL, 0); sel = selCreateFromString(sel_8_9, 3, 3, "sel_8_9"); selaAddSel(sela8, sel, NULL, 0); pixt = selaDisplayInPix(sela8, 35, 3, 15, 3); pixWrite("/tmp/junkallsel8.png", pixt, IFF_PNG); pixDestroy(&pixt); selaDestroy(&sela8); /* Generate and display all of the 4 and 8-cc preserving sels */ sela48 = selaCreate(3); sel = selCreateFromString(sel_48_1, 3, 3, "sel_48_1"); selaAddSel(sela48, sel, NULL, 0); sel = selCreateFromString(sel_48_2, 3, 3, "sel_48_2"); selaAddSel(sela48, sel, NULL, 0); pixt = selaDisplayInPix(sela48, 35, 3, 15, 4); pixWrite("/tmp/junkallsel48.png", pixt, IFF_PNG); pixDestroy(&pixt); selaDestroy(&sela48); /* Generate and display three of the 4-cc sels and their rotations */ sela4 = selaCreate(3); sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1"); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela4, sel, NULL, 0); selaAddSel(sela4, sel1, "sel_4_1_90", 0); selaAddSel(sela4, sel2, "sel_4_1_180", 0); selaAddSel(sela4, sel3, "sel_4_1_270", 0); sel = selCreateFromString(sel_4_2, 3, 3, "sel_4_2"); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela4, sel, NULL, 0); selaAddSel(sela4, sel1, "sel_4_2_90", 0); selaAddSel(sela4, sel2, "sel_4_2_180", 0); selaAddSel(sela4, sel3, "sel_4_2_270", 0); sel = selCreateFromString(sel_4_3, 3, 3, "sel_4_3"); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela4, sel, NULL, 0); selaAddSel(sela4, sel1, "sel_4_3_90", 0); selaAddSel(sela4, sel2, "sel_4_3_180", 0); selaAddSel(sela4, sel3, "sel_4_3_270", 0); pixt = selaDisplayInPix(sela4, 35, 3, 15, 4); pixWrite("/tmp/junksel4.png", pixt, IFF_PNG); pixDestroy(&pixt); selaDestroy(&sela4); /* Generate and display four of the 8-cc sels and their rotations */ sela8 = selaCreate(4); sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2"); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, 0); selaAddSel(sela8, sel1, "sel_8_2_90", 0); selaAddSel(sela8, sel2, "sel_8_2_180", 0); selaAddSel(sela8, sel3, "sel_8_2_270", 0); sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3"); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, 0); selaAddSel(sela8, sel1, "sel_8_3_90", 0); selaAddSel(sela8, sel2, "sel_8_3_180", 0); selaAddSel(sela8, sel3, "sel_8_3_270", 0); sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5"); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, 0); selaAddSel(sela8, sel1, "sel_8_5_90", 0); selaAddSel(sela8, sel2, "sel_8_5_180", 0); selaAddSel(sela8, sel3, "sel_8_5_270", 0); sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6"); sel1 = selRotateOrth(sel, 1); sel2 = selRotateOrth(sel, 2); sel3 = selRotateOrth(sel, 3); selaAddSel(sela8, sel, NULL, 0); selaAddSel(sela8, sel1, "sel_8_6_90", 0); selaAddSel(sela8, sel2, "sel_8_6_180", 0); selaAddSel(sela8, sel3, "sel_8_6_270", 0); pixt = selaDisplayInPix(sela8, 35, 3, 15, 4); pixWrite("/tmp/junksel8.png", pixt, IFF_PNG); pixDestroy(&pixt); selaDestroy(&sela8); /* Test the best 4 and 8 cc thinning */ pixDisplayWrite(NULL, 0); pix = pixRead("feyn.tif"); box = boxCreate(683, 799, 970, 479); pixs = pixClipRectangle(pix, box, NULL); pixDisplayWrite(pixs, 1); pixt = pixThin(pixs, L_THIN_FG, 4, 0); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThin(pixs, L_THIN_BG, 4, 0); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThin(pixs, L_THIN_FG, 8, 0); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThin(pixs, L_THIN_BG, 8, 0); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); /* Display tiled */ pixa = pixaReadFiles("/tmp/display", "file"); pixd = pixaDisplayTiledAndScaled(pixa, 8, 500, 1, 0, 25, 2); pixWrite("/tmp/junktiles.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pix); pixDestroy(&pixs); boxDestroy(&box); pixDisplayMultiple("/tmp/display/file*"); return 0; } leptonica-1.70/prog/displaypix.c0000644000175000017500000000426712242266542015024 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * displaypix.c * * This calls pixDisplay(), which: * (1) automatically downscales the image if necessary to display * it without scrollbars, and * (2) launches the selected viewer (default is xzgv) * * Downscaling uses area mapping to avoid moire. */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs; char *filein; static char mainName[] = "displaypix"; if (argc != 2) return ERROR_INT(" Syntax: displaypix filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixDisplay(pixs, 20, 20); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/tribune-page-4x.png0000444000175000017500000024465111374065564016122 0ustar dandan‰PNG  IHDRc\*1» pHYsb&2 IDATxœ´½ `Õ¹ðfgÉl0f6`K¨1³êµ— ­Äwˆ­-ØöÞ~¾%ÿ½¶@é­É%d&I¨Ø€´UJëRûyûÞûjk¯Ök/;$x‹,½Þ¾êõc'$­ÈNˆ²³ììœ÷9gfvg¿’lô”ÍÎìÌ9¿yÎó<ç9gΙA"†dâLJ8üKáñ“”»Ù“2ÙÅ` ¦Éá)ö\’’>Çý|ÓèÏI$ÆBÇIá”C$:»ÌËr!b%˜SNÖ lCR¦o˜×mz‰‘}ÃDHR¤°³äÁy öáôÀ ýö6þeô¨$C&¥]9d÷ÎÊ0$'È&KòAJ4Mi/™&ÛuÎ’ÇïbH¸~ŸÉj"•ÉI P'bsÏ3²¹äPÈ06Qžb‰ýFѽ’Í…­ÒÆLáßæ¡që¢ä5N ¾%’äœ<’“"ÆSfðëCž’ —#9_ãT4¥ûè¹füÿlnð”–CºÈ>;Eœ/fécòÒMÙ¯Ô:Þ¶¾šcM*Êc°rÏ©ÍHáeЏÜDÊ%E“+Ëæn¾u)þÃä1„±}à¸IÊ!,‹!“^ƒÿ.±¾ ±¢€‘ty –ÒæïÒ£p‘“m=—úÒÃÛþ„ÿy‘'—þ<B–ÁÖ‡¬›Ë­¸p樈UüyËÎ~;´Ðn¤7øB½:i ãD w%m/L‹I`)æ>6–ùqÛ„*¿=!ÕÎ7¯– í"£r…±óLÐï1<’‘CŒ2ŒäÊÑ\íÞŠY ,%žLá 83•¾L‘Q vÜö¢Hr®‹&i(ãNcaÂÏ…7fì¿T}HJÉèþöƒaøÇm7‰Üˆ¦ŒaÓ:*’Ç3šepÿTÂà D(CÆø©¡Ôÿ|ò÷J)%YeÁá}ÖŽ$Ö…‚£R ãH [‰H^]Ò¬$û¬Ã¢;`2ƳΗvT!âòriÛO‰™3­cFˆLõv££É{M-ÈêCæÀTÞ_š„·ì+p]Ž+E­? 3—@>Þ-8ž¤¤þ{ä÷S)ä2d3É^IáTþcºÀ-Éfq¶²'Àç’ï|¿íw Ó˜ŒlûwR"[ ý-v)‰L–yà\æ1s~LÐ_p2|êµ!$gë"3Ÿ!V4€&ŠÉn jCFJÎ_Áú“Ä7¶ù‘7`18ùä]WaD™WÊPñÝ®ãEøòÏYåõü°þXàV¯â’C*Iç—Áù)#"É=e‰Kù†Ï~¹èÚ¾¹éË3”iÈ—Ã[~1w¹PlŸ–Gëâ·š·´d,ûuÄ\­÷ú»ÐÕn_]Xå…2¦¹†|tg—d$±-´Dö …jï‘Nµî—§õÊ%"YѵÛ*,âlå‡}ñ¤XÈP4I8nJ¿òäÐnoQKRH&_ìêÓ™x€D™¹g tw„-иŽëW-æ‚‘œŒÉ#nF"¿ý(ú³Í $ì~ÕÈeÀ„žšwÅO“’Â9×E4ÄÖI¤Ü­°4N$Fp^¢îXø\ßôfí†ðu ›Q÷‘vÛ`_KÄþ…\fNä¹Íꊀ¿pçb"ö•›=úp 6Χb†𣮙¤µh"ú¿¢‡%ÉhèÕ×⺵qÁÿÇiÓhog/š0$#8›’–¦‚÷gíÀ'Šs’uzüUg;ž>;v[wgûpyD"fÀ¼ÓPù¢dÖ:eA˜ÔÊSùœL’öO=V ŒsUÏ ™pž @ÝV¶NŽÿߺñž?m”›O¨n^2…s |¯dV­Íž'£~™w\+j’j\ ³¤„˜Éä®ÓÞ#ÕK³•³9¹2â–&ÿÊì|7qqð¯x¡.nÞŠ1{à¬`0€dGrm< ô/ÚçÞI$¤Y "Ùf°Ì”è1Á‚’Þ ÷ìÇë…Ð2Ádfƒ7Ë`"«~óS.Á½“`Z½h$Ñs±Ìa1\l# Þ n»ÊÄ‘W;ü÷f`¢ZÄ›Þméÿ°í 2R¦ä,ƒåÈ(—!B°(Ù4¤rùrÊ0D½bì¶;þöçPÛ¼v3þ]”3½ëvûaG®¿Íb[gf=? b”Û)€2Ò ½†lêH´â™kǶ™ <¢zEͽsñѶblÿÀ×|Ì™($ûílAÅ8¸âH&Ê*š¨°crãV8Ç:×–C̪&{lÒæÍadTë „²}¾f—x ¶ƒu!4†Óiíº.ˆ&/©9úK–|ÆÎØYȃ'å[ öŒPë$ ‰46O?†ÜÉa8"`ÔÔKæ: ¼Aj×´böf=‚h½ã.Z¾È( &pœÉØ v?Üvš‰{Þ„~?~Õbð!”#‡3öˆtl¬0P;î?“L ñºÂP:ä2}œNÑLð jŽEM@SyM0¸6­¶|‰†ÃUDƒ7xr(Óx ä  ªÙÆ §BÁ3¦q:;æHÌ‹Ž£&þG’ºÎ¡ÖÑ€çcÉ4ŽÊÊÁa U¡Ê‰˜4ÄU8×Ù!¬[ g)ƒNt^çIDA~ÐxT^éØŒDS$ÑÑz•ÕпJ 2Gð»ã•] 5ùþvä‘k—‡\ y)Mä@äÑ2'³VN*3f1 !D.WãFâ ePAÇ '£V$nædICp2£’ÆÁq*ÝÃøõxªKy‘ï ž¶’º ñƒ¶–ßù>Yg@Î$Bã£XÍ*C|ÆAà @À+¤…4Ù&V"™E`þÒf~Fð£ [œb·q+ëŠÚ5V.hýÌ øETk3T¢™¾?šÃ 0º—.£jÄ‘eÈŽæWÊ’JX²ŸW+€Á€@ h(#ÈU‡ xžlñ2iëMËãê}ñŠÚÓÇT¾ùç·¾íè¤!w̨J^g_p3ÈÌô/4A°•Þìà7ƒÆ Á c(4жi‚í3MÀ@ïÙíAõĈ7h˜ÿ#Øwíæ3 ÎÔÐwþÛaØÛ@m¤Úo'Mž3 ’ÑH­ê ª—¶a2‡P(œÌkÐMjD’Æ‘Þ"–E`06C$ÜhÖ¢×P½Gü#lƒñ§Á¹¤µ+^»Þ³<}à4sb9r·IßÛŒP›C¡‡yF° òˆ{bL £½Å€*ª¢ doa´ˆNÂ~"D~Š#A‡«»Gó  NX —tØóo>r[OoÓ ÿ×÷óFKzw‡ŒÚZбîrÎ0C1Èc pÀ ‚ïÈ0pêDêÔ8SLÛr€i¬ 'AwZ‡37i,ú€NJЫªþÇeŸæ¿˜¸ýÛëÿµ1ã£.þ>uËÆc]Hຳ $2Ëa¨°ºØGþÓXÚÐ ‹UEÊ{8]åô5ÌŽC8U[ÿÊè·³œèßü3 ç2ˆ”a‰Æè6ƒàb8ÄšTP:NŒeb$¦ÇADêäËíB!üéWÿ¢tô¾­hÉ¢_©PM2ÆŽ¿kÛ°é…º9X "€Â.‹â9´ÍbH’NxOÒ^°v\m3ü]¢ üo­6@ 3ä;ï Ö>mMe+‘ƒîÍ‹ÇÁ7F:0³Ž9Ž„D)`8n1hLFcƒNt2—²>K.l¹ð+•ó‡Èçl¹ÒWG´8Ì÷_ ‡íj‹à*`àͶ9P…í{Ø Ùºrä`P†?ºä`ëƒÂ‡±ÍÀ†@>¯’gÆë¸”o´Ò1‹á$3EZ¶é0(¤?:b "Ž0tÅ  ¯•eP›á8e¸üz!oßù!™2€½!¦¸ ôz¢Љ…vŠÌÕ…Èa:I£ÈgH±‰/f’ªmâ6ƒÕsM೬Q‰®j ^tÍàÆoB» :™„ëS-¡¥X!9l1`\ȰMåTbF©5Ÿe›µ¡l]…u¡&ÂqÖ¦5Àû“%ÓíU4 Îÿ›aÒ` 'ïD ;gÌ £’Ç@q¶"‡ŠÍ¬­“%÷›ñG!ˆH®^ÛðúÜË;þÐ;Û_@w&¡%_Ì ¶Œ‰ºPŠêÂdÁ´½Õî¶ëÁuŽ`ùjœÎ2 GHd šñxÚ1Q–¡%Bó^øÖ!ª^¿g•FïEp6ìŠF›á´ÃÐã0Û\ŽMK*˜&ÜPi5ŠÈãíèl-B‚‘Ë DhÞÕ–ŸÔB~Ä ûÐê…·:Ê·Bcòx›A®’^dz°í«‰þQ«.Ò.$ZíE…˜ŽReG¶É+Av(pÕv_ðËrå0x­¾áûþˆÁ8 N]xí^–½Ò h`m»°x꣘x¡ ¦"V®2ÃÄ ÃWe Rä‹!$w£a4‡Û‘ïsêBt&•À¬ˆ{+^i%œj3à>‹Y :iërÆ/†ÑR¬ø½èÓ²¯¢Ñ‹¶>ùÒI½ý_æ*M°J矟ìR%`È•tˆR$ù¦ ß2(\q»0ˆNfÔ êz‡õèQ|ꟾøú9c›©—~ºâ¿ACŒŽ) è(Ï. ûµ„dûƒ9"í]RCg ¶Ó߉ Lh¤ã¼S~á¾pÙÇŸ|ü,e¸`Å»à:Ò‘½|¯#$X ¦Ë?XíŸ@¨Qc‚|cD·ì‰ Ú´z2Rzðé¸í§€ôÓ¨® Õ#žÄ´àŸÁmÑÆ— ‚êH5Q *Èb@m¼1FûÞ(•±‹‡àÌ !$ %"ä ”è¤ÁˆNVô”ÃÀh·Ô‡P³ŒØAÛ.H_¥ªUÁU“Ë o¡Ù`›ôvMÒ@ 9nÈ„î 2Ú ÎÀšb‹-À°|'"!/ß Mp°=¡ý·¤.T:ó@|ÍòÕ_wŽùƒ5#ïz•„J’Åàƒ†^E,G‡Ã=üšÐG´È LÔ„½p†¨‘5E(¹V0zHÿWGà6C3ªhCß!ôLvœÿiŸ’êürÓ ìŸƒŠc›cƒïDÞ!•©¦; \!Ø M.Ýô+DëvI ¡ÃµÁ§Ÿ·JN ÞRè“ùa‡!¢±4‰[jBØJ ù&†ï¨¹qõI4¤ÖÔ§è, èØ@Q,í)ʨ²ãéÓêý’n¬HoÝÁkÄè× ¤sm€rð 7ÚÃ$wU@ôÕ´§*&èt¹K8õc£ÐMÚŽÔyŒƒ8Dýä¢Ì^:’[r  mdl’jª¥ Ùó8[Âfb“–)q²¨P¹ dŸô÷H"¾9#j2›ÇYwyLl ;–sƇ]72É—R8ŒÁ¬‡ÖQ!ê\½úòÅšÌÿ6$[I[$í‚,¡›LºâÐó‡ðBAPɨÒêúP0Û ,ÆZ-»¨q1$2 *WyQ‡n½$cYRšƒd¨~ "4ÔxH#㥊u‘*`£OéZ%ÈK’Å Î^&Ç0ru¼S^KÆ Ì|ò¦˜jÉ!ËIP”&ÿMê±ËXmÃ$´‡‡‚¢Éâ‘7ÄßD+Ä#²g±aÕ”T¨‚Î÷=´°œ=J«¢šêfÄvÉýêôѱR½‘• ˆ­A/K |i<ÄZ’ Q8Q§„9sÀ ¢dßi$ýzÛ1¬dÚPT“ APÈñp˜Íð©§Íàc='É÷'ï;ÛyÓvûvLîí` H0ƒÐ"âT6=cÄzt‘2èÖMžÜ:DÓaÀÔɘҨ‰uøI—LQ¤ î¼í!ðGãZD4‹ÏÙ‹™ÃÛÉP¨ìö9Dþ¥qŠäBàh:ÛéR«ÎøvÊš· …Ká1Zd$›}æžP,n|¾u« SEçXçŒåZ©«ð¨I¥(6¢*=wQ_]d)_ŒæO <šwT¬h†’õ'3#olôÔ=Æbéâ8 %óáøq~¤š+9A;AF$ëžõÐWF^¬‘^ ¡…å̧õ@Ç¿2IÌg˜8 b‹ž‚”(r›r¤æ–+~½°K Ü¿ý}{—Ï®$ÓÚ½Èf„¬[Šdj”?{_ÏI‘ñ Oý=×gÜtþ;÷üéüݾ¨æ ˆ_þUz?¹ø0Æ7»ÎZ‹ãÿÕÑ&Jô¶1¸ â‰R”0Jy;/¬Qw}[ÕpQŠ}aÑ7ï)CÌ’'sYb)©þ4Šb,ÀPš–wNYD2ßL¥ºá´؋кX>WédMÃ$·ub8ëıdÅW—¤21ÌJarOÊ»¥ÆøÕÿø‡¯šóÝq.×NÅO¤2 äîsìI| ’”!b•¹ -žLÏî{£ae_Áoå¦$ñ®q½lÅ}¦hZr¸9> S«uær”LkG ˆ]>4‡ Ÿ£ˆu8Æöµ·g“=ݺSm‘ȾŠ*:X= Š˜Æ0¦`…×gÄ(ç;pŒ“¸²ÏË.ÌÆ+ô0¹±qWïHæ?…¬£*bZ»‚Övš1™½sHFhþ£½D‰F#m²˜w¢TY•ª}¢“g?BÖv¡È “€Í Š6ÃÊrh¤É=lÖóSÌõÝÕˆ•½†&)«Öån ’à[j´õ« Oñ›ìNÊèzÿÐÉV|tguµ·÷÷øÓg¥ãÁ3bÌ©+}²z«Ø,Æõ(mgµ­ëqøDýK"´Í2· ÷›ACü†âºÁgÍÒÕÂ]ž ¯wü ´‘Ž4Ÿ‘úô#¾Ò× xƒMÂ.´3nú ¼yîr,Cµ¦ Æ–@—¡ÎC>¿4<ÛuRº4ñ^yž]wG`x]¬Ï3§I*M*0ìðç3dÝ„z[pQß.ÿÎ8‘ƒºz®Uˆ·õÁXç­ÑU¯â HÝ33Œ¢Kᬠ6i¬ÔÊKM±êd¨¸Ç3§qËm›1¯?ÐXxN†¡ª£¦oO {„ïßÞ©˜íZ ‹˜ö7ÓøáçõÇd<}ñÜIY±RùuÕÊGÍž3¾*ÞUqgã–7o1ùQ•:êÚ˜¾ÞVæsÆËÆç«˜ÏLs2áßÅc[ÂÞ¹®“ÆQý®Zô'3P7ìë•ñ+nmÝŠåÖ-¿O–¥Ò µkž2Gì#dÓI/þAÎm0#»6–.7‡¡&йÞ{ì6Ÿ®Ÿ ­v‡¶˜5£Þqäp¦ ù…ÞÅa˜¯„¸èáWÀƒØua§râùvúºOEÕ­¾‡úê¡=루¥× V-*}ÎÙ6Ö'úøn¾ÇÇ© ××Ü&†ÝvgÚËhé<Üé'é£Âq¾þüìW‡ï9µ1jœ'“;_ÛVúœ‹Æ¬:±~}øT,úã…cç¸Xs‡Ò¼M0¨]Øs´pR‹ñàÌÌÄë¼ }gv¬#ô1Û6IR)EâŒI3L.冑üŸÝ $)¨-Ó*žùØÝ”·ÖJ ò,H¤¿³¾]]º$¡ä’9)˜…ždbówˆyr ‰lÿ!ç0£öϱ¾l†‚$:þ¡ŒvØ #v^{n@¸`€„]Åö†AÌö׋dЭÕÇÊâÍ)5WsÅΚ0‰eí.’Ì›±+¶'i¼£'ZÙ9A*!kSÌg ©¢ø)EâSXåœc^À aÈ$2ù¡ÿ±[•OÓ­Ëeä•ò­1ŸdW·8C4™˜€¡xJåæ·½{.Û¤iÈ(zù í9¹˜“maŠ&‰¨ï{dˆàI·r%¦È ™Ò€Éż²¢wK™ Ð> {±ÍTÔqÀdºLVa}ëC‘þ)&­qá˜Q?g'bý™ƒÒ,ö˜ 2›Á(îßÔ" 8Ô=””°vN¡NØi²¨)Ë)ƒfÉ-O.âòÈX²›!8U†ÍÂN¼«¶Ó´ß·T[¹îŠÜÔóÈ|zÊà^¬™ C‘a¨ D•l]8+¡±•©€sRœlRî°ž$ME[ztʬ] q£|ö:œ?äÉ! $8eÁ^’k9ÿ©é$0°xW0(U ¨œË`?–Ë@GÕU‹|ÍÔÆTx†2„BÕƒ[º¦¢“ò¤" ‚Å`G¬‰÷‰ñnöH%—!³Ï0Ä0Ð(‡Á›eÐ2 „2 5–m*–ø¢ Báø©°6Ãö8~økµl9È”atW#ñQµËP™s/°LK:#ØQ̈µOµbtß_EóóSóÕ=ƒ„ÁßY{Ôf€RUÎd5«Õ,x,ƒÎ΀Œun§3µ–µö©Œ,’9Ðrk0(Ÿ¢m¶z‘å«-2Ž&CŽ*GæmÈtU—Å yX ‘yŒ‚l. È|dÔÄÒ˧¦“»2»îpi ´‹„A¥³–$Ê-¸Å@¹$Ê@&m &FgZy’@9 ŒÍ@Ö±à?,§ *}`0ˆ1-2èi@yŠF&06ƒH÷C‰„ið£*O>‡¡áXî‘!ŽZNëÄ 9`Ãb ˆA&4Ò© 6ƒà0 í$ 4ÕÛ,ƒ'ûµ]]¯´I}ý&§,ï# :bu’'™nAHÇÑa@Þa¨%GàxµBF›Ì©éƒ62¬ãYí?BL,JæÆp*a،ȼ‘¿E:eÐl†Íy ¤Î€¡•#JR¾]xòú„rÔx­‚»Í¬Æè¬É@»e9é8XØ VcëdšQ8¹ó}è_P°ÈV›<ΘŒé00dA+e ³¸lÒj`$† xo ¦Å ¢V„ª ßÍd! ™5ì0Ò‹AgmÿÚb0°Ð/ÓXú1e9H”A'wDC+a`éP£I&qƒ•Ú\™:RðTÄ€Hôš¤BE$‹ÁÈa`R Yª#´½È02Z‹í¹ïUÌ" ]YÀ`·›¶A€!P7½}ˆOÄp™äbPH]øA†Êœ¤  7[cb„™º”¡ÎÍÀ’i$¦­“}dGù†yd^\0Ë0A Ã0 Äe¨¶C‹.S™´”Jk†Z‡AlQšl]ä3DtI·¨¢Š FYÀ  Då ¹È>ÞaPÑwˆ‚L­¯§¬¨b5Qk³zTпç4J6sdu\5C¢l‹ƒ?lb4ÐÕfä:ê=á¬pqž ƒ ÝmFÕ¦u–rV%ºNÚ U 6ÑêÏ2OgrN?«<*"kþ©GåÃX˜*RE¥Öf@´Áì9´Ñ鎩¥Y r†ÁÞ'ÉdòeÀ]*?Õ~ÖN`XØ §èÅC+äbଛ"À X-ºJì~7´ˆ¬QÀ$Ð m·4!C&vðf|ëñÑZk¶áyZ0j†º€8†!ÖG ‹ÁZùbÅ0Ö |KÀ IDAT#zœ²Ã dû8CúES‹¡!5à³¢tZ)ê†NR‰åHÃb A«¬XŽ4L¬›Á¡(«.š³ U ¸Ça Eʈè¤D¯“SiÖPNY‹-‰îƒC0ÂÀÒ;›ÉI3H=Xeû½=>ÆÍ ‘‰£´ d/øfÞzZDÔºÕNÉA+¶§ãrqðNYƨ…%sï&ÉÀ¸Êv™04ƒ5Ò@  ñÐ2ÈX­¢½,ú¡#Ñèªhð#Šõ€&I…âYN¦øM!žd€# RµÛ¬I$Åé“ÚM]Œ.B×9\¨^·Sv’YËXí߀1UMRF“eHeЧÉ~`H¤Pr‰«Ï¦öžžÚ®©0ä%ëù7f¦8ƒ=³ÍaðuÕ5‰ðùž2»² Ö¥zJ1 F;ëšß;ƒPÀP*å7öž]µ;«ÃÎ÷ 0Œsùù‰È¡ß×)ôø–¾'9dÆk¥†]þþÚñHmÿäT!O"3ŸÊa9%¤ ÐlïQüýH¶» †"‰ÎM¹ZK^v–AÎ2 ƒÚ4øž²06Ãæ’ ¾Ì·ËX jc+ ÷ýa03 ¥ëß%‹!ªµqƒXÓÇŠ097oT±x¹R194—,:à®”*ÛçŒÛëtü͉ýåÌRkÉm{Ôì&uê&–ò)Å\9Z+å,*C ((¸ËCX!Ô. ¸.¶D¢­wí¡b ®Áq›Áz‚Oš]bRHà  ¶b N0WÈàÍÙšÑX”!+n›ÁŠ 8ÊÐäºí ‚Jâ®}Ãe˦›Z‹2ˆù ô:5‹¡Åó²·Í†êI2,=U”AÈg@ #¯–¨ 'T—!„Ð_ØI2HÙºh³êbÀfà&b(H¾Ü͇†Š2dµÎÍ`X:Ù‘«èdž]HVýÉ%fä@0û~&OžÁ¤÷ÏPg®]°`›EåP’!·÷ÃÌOž.däì•Z γÐ(ƒ$æ2€×6 R®‚pÕxM{¿)ôà.S¬h ƒ’Ï`Ú–b1¸Ë›¦1¡¶buQ’ÁŸ# ®b{wRîºzzz°l=µaP Ürp—Ç©Y†D.Ci{¸7¼Ú¢@J ˆ2t4{üï…ÁJc2rÄá«Ômr³ÍÐÜ\ám¾Î}«m9 `a‡!n3pf‰º(•¼CîÍÙß®”Û»ëêg÷ììÁÝÍuA?¶ôÁ  &–kmƒ1ñ: ¶©Š tóÑb(ô%B6Ãu²½C!YØÈŸJíª«òèÂQ!:ÉòÓ(ñ“~R©£Ë,)üÇÛ®s’rÈ3ÚM_¸ÿ.`¨zX`hrÀÿ’z#Çn/,™Ü¹†Zt£j1§ñÅÛnW¡¹ Ós¾äºm»êª,†¶úz¿í£ oÓÍÀ: 2eðÓÛhƒ0±rÛêŠÙn¦-7ÚwÕV‰„An«®¯•¬öB¶t‡se@tÙ«Å –[Þ×–§MÞÒÑÞí0è|µÍ ÊÖM5m c2d:ä/›êÖ›·ÉMUâ.6óÕu¢Ã@ÛÖ„´,ƒ£õ+“µÀ%ë"_òÒrw]°©%/|¯]nªzj€¡±oW½`ÅrH«4YÜnåG6³ ™íÚÄ*`‘ä‘%vü0¡Næ&æÇî-ö ÛÕ.·U»€aWcÏ‹ K+µœ‰¬ai’_‡ÅPæ äi_Xíø¡LïÁ9œ9*ý²]Ö »üÀàï9"8 XñÁñÕÍ„ËaP,vbÛÌM܃Ž@è‡áÅ¿o—7»x`ðg›gXË«`,NcÊ•w3 ÿfÍ:`8"ìBnr QÍaër„,ƒ^6·3gs¸ 7¶w7z®²8‹¡–!Ï@-ÂÀR†&‡AÈg&gÛr¶Z·b- µÝHÆr âˆŸ2 ÂºpÉ¡é=Ê,ôÌ&yÏFl&w5²$¹UÐø¡n|«.›¡h,W*MSr¾¿D2Ûw1Crwx„uŠ?Û̹va ÂeÛaÈØ§ºâ““CEÎæ¢ÆÉš¡þc îRùF ÇÁŠô¶•áòÍÀaû[’íCk9 žÜycØü‚õpœQ*‹¡šújëá$N!÷¨>dý$[n]äLŒ¥õüYOqh˜H»™ÓfÑ-Ê€,9Y†²t2o fE|mªƒ\’´›–d‡+WLîRŒ¥¸þp~‡081L&~ [6ƒ%%!2y94å"™KŒ" Ja,G4(\v䠢ɷ›y\÷¦uéX)ÆÀ‘¹Å2½zg ºÑDŠÃ e⇉ë"¡5g÷ÌA\UDT–ÄöŠ'W“ÛV”AuêBw¤²í"àƒÍÜy©A!On"Sá8ðÇuÖ¸l ¤AÀi1ˆø(Rg… Ò¤ï%yÑ•³‡ 2ß +]r6ì;ò&+“ñ‡K< >JCä)×rGYý wò¡êàòóú€'•¹•6ó¤B9 ÌfQ†Ø„ ªQj©p>Ãò|†V×w/jHa#Uà$å –\q”ÏÈC`rvø.ß„õ)30%~™¨.*B9›U#ÆéÒ:i?©TISeÈCÕüE”ÃË—Ã8 ¥V¡MÄÛfêùoíHbSL‘gΤ¢x¬o²uQ‹,K™ ª‹næ“ØàGɳwÆŠ1”º£Ñ‹¯˜™ƒûæ*¤¯øë·a0Ì'å0ÄJ1”^˜X– !‰#¶™X6çU¼\µ^Û#Mñ .¤² Íë1ñ¥¾Î*Ï {Á'NÄ0ñºÌ|_éò™@U¤Z`PBȬ}`ÆÊùcÌ„ cÖÙÐ@¼[dÕ!Q’IË!@ï»uÝóÛÍ„Aö™Mûf¬\?¶{² ¥_ƒŠÈàþO„-@'WÊ Ì¦×ûÆNL¨™ÇV¨™DØJclÊ•CÑaÒ€ó¥ÕCý[Ÿ^Û† _¿Ïl>º¸jnʘyÅO=e`ƒXÂÐEž­\[ÛØzTkÁP¿ƒïzB ü¡KëãWlÚ÷:˜WÿkÀp½ øÌÚyG¯&ú€YÙ:©Ö“–ÕY¼Ÿ 8òñåÏ{Ø•¸q;>z>…SO_¹.ÿ nîÁ¿†yˆ·e›J5aßo†kn½fÅþó±®'!ËÓòzaÛ¸‰mÆÊ@ä “G€’ºxæq—vüGô™¾Ž7ȃïy›A´èKê‘¢èC?ë©&ënÞo}@U£CÆ«ÞÒOHàŸÍ|ï Š¢‰zaàv† /Øaˆ½_ Ó^ºû¦¤¬ŸÏ%-ÉàË0T÷¾Úær½û“z—}4œÀº(¶ÝcŠªæ2€—tüäûðóEù¥§·U>¿“§›æ3Œ` Q$ ;)i-Æo/HòfÄ ݳý™TÕÃ#É(V±Y(¡³®¥vA–:C›ÅË2T•!ôZ÷êÓjxSLÄý‰"ã0*«;>J¦B$æY›¥>=i† ä ¡‡%Gg Ð2Ä‹ŒG‘9Ûvü VWsäAŠèÌÚ,Íp±i² 7Â?ö_ê“:~œŒ²¥ Çi¡l’E‚FÛæ!M૬@,çŒÐ•f0È+î&Å@n#³ZÓ'  ™œta¢q¹¼w?—fxìc“e ‰ÕÐ&#N¢WŸˆ!÷}hã0ôŒ±“×I*ŽwЧĶ«ð)7ÃFâK—ÚqE ’½aeçNCz€Øf(þÆôñ„}%ZYšuZÚ‹¤A½{«>yÃ':ïÓ¤DåGqòF´Ú—H‘t@82†ËO]\Ý'K“óÕvbÍí!qÀHâëPhåÜ™’@êbøˆµtéj?›h-ó€XiïGŸ‹?pì7ÊàA›A”f$šœ©t;CÍØó©Æ)ÈÁ{%èdÃ^ä‘q`…<™¹ „A©®Fš™€!´wË ÍöýÆò¶.ÁÉëÜþ£—ð“Ò_:‰ÐøQÎÒí—+ªPëÄrxèËF‡¿ ÙþÛ)ˆiãdi¨ÅPETQUhžÐ6ë:K³Ë`XfCœYwÒ`ž1Kq`!ãvðÞ:`¨æ¹Uˆ±ì"2ÃÝûÿ³¶üº`Ÿ|“¢ˆbÖHà?¼hvT_þ¥3s~`ZkÈ|5Íä,|÷ÿíûŒðKž ÆË ãjÃ}G·$Cc«WF­“²Mþ‡W×Ú áÚ“s‚žyòHz—ìô" ÂdšP‹Œ¼“b@(b c‡ЯoŸù‰Ÿ?öQÂpמâ âd¬|ar~²ú¦M2¹}À > Lü˜_6ÂòUFåe¹ËñJ3Èð¯0I„=Mæ¬1UD“à~õT„|Ì·Ç•ÃCM“¬ ’tÞÜò‹üÛ1Åûz™Û7”¡J.‘¯^:A>dT>ýÄólÁˆE°‹”2\^$GbjÌšrˆNz>•6’ A<‡Ÿ3âø;âÜ" /¬‹«JÈaQÙñÃ,ë „w,è;ÆŸ0V¨(ÈhãX ßþ®xŽ7•ÅvÁî#yšÀ°ë7ë;bpê4`˜hþœÜ¹$ZìU¤×R¦Åbøpß‘ß,<Ö§ƒwb9g­áÿå«*€(¸\†eHö†ÿKß±èÛæ¦ ß”'ï„úH|ß ñÇÖ/Æ©§#ø‰mˆÿñÝQ’ævD•ȴ̺øØƒ‘ØHª`ŒÒÕ§ž¿þîîÊ™ø¥Ïã{%ú¾0ãÁ§à‡TdŒ6ù)¥XŽhe¹ R8’0·g˦NÜ÷ü³[oøÈ«¯îÇ~ ü/]òR̸÷_ïÁW÷þ 0„á¬WŠ!T”'‡„8$`HX¯;‹Î܃ù#þv'ÅúnÄ#_Àg™Ê>ãû¿˜‹õáÞ1:OÎ|¡Hž\•\®>a4èdê‰ñžÛ/Ìþ¡Í°¿gç5Ï80‡9ð³òƾà­äoÿ”Çûöl¥ ±s y_þ<ñ×¶¦ïš Èr¯À\!Ù G¯yîÀ³×3{VYŠ_ÜP)a¨ìÝJÞagÉ…yú<å1@]X“ËÍtãç>Óé]Ù»C@~›_?óúoÖ‰ø@°¬Âšçë36ßMÚˇǬ›)†¿0O_À_¤1ÅšéÀše„Á# ´ç¶Y12å"ÕWLü$exê kCP™ ÛÌó´.}4dn¸¹/%¾X‹qÉy ± C%y ñ‡‚ü­òR¹L†¦HJ‚©mºÂ”ó¢óÀ[ëOÒ)Ÿ X¦€ƒMÓ,|‰Áí,—aö¿o'*‘?al¾d1HÄ|µ¾èŒ§søMÿµiŒÎY4@HT®>ØÑr>ÛøÊŠ?1׋¿;ÙyÏ•b-òŸËÞ–<œºÔ×£íð.&ŤЕá#KÛËdà¬;›i“ÃWÅñSà®$Cº(½ù.Z6Ûg¬ yäί×,<ªó'–]!zf¾^9öxǬåÅéî‚9`בÇ-”ÉÀD¨ÀÓ{¸2úö¾7ƒîÖo˛þeá[¶rGçÊ}‘£ïÌ?±Ì/zf½^é™™e(ðÕ4Õ–Ë€0i/ .Õo8Ñ5”[.|tQèÜ3¾e»¾å«~Ô¹²+|Tû‘Ãôž×™éÃäÞÞ"9~¡lñÒ¶±‹Öoî9Ñ¥6ÿó§.üÛÇVž_äûÌs½†gæU'¤9þØÑѾ¡ÏÜ&^}÷#+|÷µƒXêÙŽ§Ëf¨–4lvlÇó‚þ™QƒU«´}¿_iû‡S–µŠÖV$£²À@ ùBÑ•²<Ÿ ÿû%`ø˜xÃQPPém¢¥6ƒuû¢ð À``ëE§â•ÏÀ@I— ËGe y;ó”ïž±H¨U´.*ä²yýÅüæmëÍ <&iq(Chà0NÇŒ­.–_™í&Mõ$ÿöùñçI™>‡Oë/myìÃz=6C©ç®–Í€¤M*jÌ?-ú÷·Në†JuîÛUÃâ5„a~Såšïw4Ÿì&rX@ê‚Ü}þu±ì¼å1Xý¤Ú¯#Ôþ§„+Ÿ^÷¹¿¤Ї†sKÎü µž×\u[ê>Ô²·£.zlô§¼ðÒ+)Ä1{Û_üQåË$Ú¿g#ªKt†ä=ØiS“ÑwÄÅ ‹2ˆ8wFóûÂàJѼýä®›+ÄSxcm_ ½Ÿ ÉfÑÎ>†WÇGÒQìrY¦íž22! d °Ô» Ê™gî’C@X’ŒÙW®}@œ³ðHèMœÍÕ¤ü<ÿÀ=Xêtü'Är¦(Å‹„Õ9r˜Ìóгî¾=€æŽ2iT#ÈÒµ O|äYœºÙ\À)£cìÉW:pòQÜxߦ Çž{Èf¨¸$à?{²)9*Óh–(KÓç+×X5ê3«ön­íh¸¢·ãêäžNİ-ÏÜf½öpLA|¬óä eÖ…×Çi•Feø€4}Éñëžý›1Ô¹Ò¿|ÔÓ±÷³žŽ“‡‚Þ†·<÷©€Å C"¾§DnãêC±°Çbˆ|’ΧEÄñ³sÇI¦wÈ[®ïØŸ<Ô kž­ò­¥ µèãÜ=æðTØÅOòåÛæ‰%IѲƒ¾ÎooÇbãçþ†Ê–Û®>`1øÐõ q|Ñ9_.ƒ/Áào·Ì2“NnLn7³G7aëe¯&vw¾ÆüˆyŒÛ/®Cù—¡²¨‡' cxdðÁ‘³¤äaéú»ïæ.‡ÊïúªâKúÉq|e¿ç,êmgϨӮXþ ú ¢šàwch£ùH6žÌ}TÕ¸ Ó³ ¹­MÛ¬!Õ»†{E¦ï:¼¬Ãõ‘Iè\½€­ñɪ™á¬ý—Áà)ñ>;Ô¶bH ~±vGp†WÎc0q,¢‡jú~q_ìÅÂÀ͉åâ¹ËÀ¹ÿç:ŸAí3‡†¦]ÁÅÍÈ¥'KÑÑS¹çUcE¨1Âû Ý#ìí“=[e²Îï“e Œý&ȼgšeU/š»>ä ^a„»õäñ¾½ÓÃI— ¯Þ¬ÚÊ` «å!£º¦!Ó“0r(Cº´¤oá¡—!uQñ¡7›Ù„J0íX;ÂМÝ[¶}Nwð¸t._¤#ÒéØËIŽ_нza`n8úŽ#‡Pî2ÄñPVWd7«Ð¶ŠåzTmœG&‰¨ûó.Jy¶IΪ;ã¯n-gɶÁfÈa܆VèÜð—J²ôâî[ÄäÕÅ%»¢âÖ;’^¦røù¹ê °f* N’)Ú:?üÁOÃK²_x¦@~O*乨‰ÕïÙpä&Âðœ–]}æSC®ì'Å0êbPÈ mh¾Õ*6HH¯ì~L|;ŸaYw/>ZÙgHgÁ¾Dì‚}öc¹&1srn#dô¡ä“þ ©¡,v+•ÃÚ\ ÈgøºWÆý·ûƒç×'¾Dê‚=ñEtƒÍP‰>T6ƒ;Ñ'§æ¯ïÎ0ˆPðo™·ËŸƒˆ^RýÈ· äàð Œlä¿ÂeÙ1m#Q ‡Á‰¥_k²·…¨°ù‰'žÅÇ6|êbðÅ%ÛS[á´i9tÈÊÁ*9­7Íe˜ì Éul[rùòS)ñwŸ²Ê>•aè1DÁ=Í B]45¿P<Ø@N–À ”Åà'Þ6Ï\aFEgýþkMRƒS?1ʼìÒ<»õ¹1×äd™±‹É>2Ùb˜Ã&÷5h¢ýœW]ôѺè„ZŠàgÏ®À«“_±ïB“×a@^Í­~Y}˜4¤mkôý £¢U$S9Ü¡Ñg– ‚¬ÌêZ::s+]÷cV^ä¯jt?{'Ëš\ñôcëú’©ßŽe†Þ\ $ ŸÐ;zsEWhtÆbÒ‡ˆá™ŒxÅýG‡AŸ,C­Lòlóµ¦Aåd•v᎚Su„¡©ƒ# ²ìíZ®1 ÞHÿRÎä”ãÊ’MMrc¡x­I yQkk¨¦»* ËvwòÇ<‚ðìÙÕ]•ÉÅôÞ¢” å˜ZOq}LX<Õë&òàÃDÄt{ Ãê×)Q†¹_ÍÈá²ÆSe uÑÖ{ÊMê0&‹qÒ¯ £% v±rË!ï™ÌÔ6YüݯÊ!'§Ü²² ¥zæyÉX—³U礧ÿ7óÿ“®ÜµÑõÒ€¡±0̵‚iLgH5 ÛHÔ_+g‘û˜êr˜W–Êä¶Ö¢¿¦ODd~ˆ’úÐÒº,Ðpœ•—¾mg2¸{Ÿ÷à…ŸÍ=Ó ¶[Ò^Ý™ahÊѾ¬š\b^#VµÍl™+ãý2øykòs§jCÞ0±îêz§ó^t]Í…nöiÈOÌšîL.Ós""®Ì6‹{§Âað_)ýÈF‹FË©& ¨Aµþ¿®áÎîF랯2ž³áÁl´ý$y•\Ÿò^ ‹A’öEÈF|ù8ÕäOƒÊX ­]£Þó–^`æ+Óþ†%rð®•v›Q$:U9áÿ@B |Ût4›AÂ)b$ö†¾G"EN„À*““øø{aÌ&›Áµˆ?}ªÖf¨é^ÖPh›OËPPRÍæ\$¿†ÙF£ÍnáyÓ”béðŧj-}ýÝÊY&‡~/y˜(— ¡ð¦÷"‘Þ(ÝVqëŠá¾c 鮆C§joÀ†]Õ`j÷\ì\qþ\ì¥drÿüág“7ÉÄIéÙœn¸qŠ "ÁhEô „+TáØG½úóª>`hR[Zï4ì¬í©o}¸£µs£ÒÂïÖ’žùý—i¤DÆ=ô·$çvJ9r <½`†€·õx–Š¢Í@ì[·D¬õówyÍÃ-}„{6Ãõ‚³sŠ+—¡bT& ž;V‡ÿì°qÇñççÛ³‘¾µZrýÊ kâŽUŽRÉ»;JbÎ`A9uAgÓ¾ã6«]$¦AÛÇ,ƒÕ–ÝsÖÜtê™X:….‰“©Ð¹ +Z‹1˜¿íÀCe¹ÑfÈ$3‡A Ÿy¶I$%›“ó~‡ÁJ¿ž‚2Ð@pÛZ«¤gÈmƒXæ}î™$Ѿw Ç^N¼…q3e ‹‹§¿Tb‚ IDAT\†l:_Xºk¶\»u §È9¼«T¯RC¤p—ôòíé*ñ1Nÿª4žd |ÜXлºï¿] œ»Øâ ?).²ïOŒ~›´wþ¥¿ÞUfôlA]ÜØ¡à4¾OY®-@Z¬KŠË¡XI¥R[Îä«tbH>Ãúų†¤„ûŽ}6ù›ÕO$å¼k¿õD1†R©øs]ò÷Fó¾åeH<¡l©á½SÔÉb öÓ¢Ö–h¿=|SƒUV6žïy?ȃ'ðX¢õ•/4GÄùÀ@&–Ã?™æ•7éÚb³ ¹Oz"ƒy¹á¹Z w:êçºDòû†Ý¹ TÔfJ­÷¼ óºqÊ΋ <Ó‘á nˆîtº)CkM9lÎösÅ÷ƒÁÛ%sÊÏ.Þ½W7‰ß€a—PŒÊ¡y›ì”èœÃAŸ`ò®ÉÔÇNv?xfnâN¾¬C<'E­'%hQÍWg*¦ÈpåXÇÆ1|ë8ê²Mê(¢;ã?Ü´%i,‘vÕm^#T?>C¬ÃOt,»÷†•?ÐàÝ—Â’)™&Ä÷ÅÀYD¢äVavùý¨ K£ôîgØ’Rжèò׳ÅΘ’Ì>‘VîEŸèÒö]¾/y寋Ò{÷]{»xPßeº¼äQç¡{‘߇°ôúÒ¿nøÎ²5xx£YuÂ7›ŸëF÷#Ü&Ï0c^ò¿æI»n¾à]º/ÅpgÌk~øk£÷7·‹—éÝÑš£UèVÖhää«ÅÒ`èÚ–º“WAN·¸¶]hD"n†ø¤móm{\öµx*Åð5îÜñkã¾ß|V¬Ô{¢5UÐ\°Ž!rxs͵-^ôE<Ì™ÓäË,¶3` ½Þ)É!'¥jø3fèG ŒÞÿý!ñ~=r*Ë0HQ/š˜)Ï7½ò}–>°8ÃPͺï_8 úÜZ¯±éñ/­âéM˜8NEZ èÕ£)k!w67^’^ ¿\Ä®ÑàS~ÂÐ`ÌuRyYº˜é’ZvÁd:9ú{B†Ý¾Ÿ·qþO¬ÜtænPé²Pý†DÇô»£1~ôÜKPîöÿoyQz°à–ê©Z`X¡™´.j…ⶉ¶rÖ-S”" «|‡tοlÙFµ¥Æä»DßqΜ–¶.­%ÔçëRzû¼m—Nz‚HöÞ³›øÉDÌ€. 0 èÀÐm3 …”éøÄ2â\°ŒSq̛ܹ ‘ƒ©–/ëah<ÞúÐÝPã›ïˆý65ÿõÓ«Ä”¾OôÛ mv¹ÌëÛfÔ02 U…ÚÏŒ•U‹¡Ó óZÚök$,g™÷êøä²:0+`¨ñb~w õímYª±'QOU£Bk|>¼Nþ騷óëç›?¤{+¦uôJîMÄŠÕCš¬.9²?¶VÀwÏÞß)E¥íÿ[ºã;ÃÆÓïÞ)ñýÓñÿ ÍÀ'_ Þç“^NM»óÇ!|ïèç(ÈA Ã.OÆ[Ð?2×Þ^¹|ð’Wt‚öÜ%éë„ÙuYŽÉÚ¦kJi7§µbî§´„A]CÓŠ:Â0WØU»¨¶oéý©ÆtÌñ¯äA~«ÍB¢=ßžå«ó=ÑXÀÆá§Ï“ì#zn᦭~´Ÿ·š)5óÛ$fŽŠ/§Òð멎èÃíÉ~s± ¦~íæ+'Ïu.6ñü1¢–6ÃU¶N2³ž`æ}¥!½Ñ1IÇ͢ƙR¥AÞÍ7†ŸÇ#†$â üWcãOäî2aÈ“\‘þfŽmZ Îj9Žœ\Þ[À srƒêÛ¬5ûƼ_g>Q½RÝ€Ö ë+óšWŸ8±·¾¢£eYçêî;ƒ\éØÞÅñ`1‡ÁVOäæº*«“Ó² ¬*k£ÍhÈÛ|^$Œ‚W÷³*iìš9Ù‡êCÈ„or½×–2Çóÿür>Ã:l\ÀÉÎßß¹[8x£ÅÀüÑf ˜P†.FÙ£ 6{.xuÂÀCpéµÞª ÿÏ[OÀsr-ªgô–Î K#û’3Ì–.??¯cô½I´Ùô ~¯Í0Íf`Ìöœé(™q˜è¿þìüîähseòçúœ¿™×»p´æÝo*À°ÊsMgô„ï‡â;Z—I«ì rÉ–ÎšÏ lÒcîý€°ðôì|† Ó4ÏîdÈïéôÊÏðÝíë öç==PÜ6íE®ÌFpö® ÕÉÏY w˜§§ ¼r Ÿ¡ua˜— tzQ¿×f`ì)èéç4ä g˜8Ù|—Z:[Z„ƒ©óä_Ä8~>Ÿa“¤?p_²sèqó†eϬ}Úapæqϸ'Ødê‚\ïNš«ß%Ïý‰ÄÞÅðÙ6øåÌ‹ka,¥¥}ñÅ 8eäÎÃ*a›d½)‘¢m™9VÎsâ(Ýï80ü꾋³^;¼éþYýÛº ·Ï›½o^Ø×ðRX›yý§Û¯<ÛÿäÙMÃ>[äwÅœä08*°úŒX÷P’Ä!UfÎø½Ì0×Ë*Ã+ºj†Û‘ñò•¨WÐö¢–öša†¼÷¨GIasmÜ3¥b ›H¤L>½Þa¸Ë.´ÿÈ=#†³ïã$gLëAÃÀP³QÙ¬¢q?­¾Ñë›ãçoœ¾;œÜË\ÑÆ zç*}ê~%1×|ò·;çH×l<;wle\Ä#} vçá´ßò¬üâu}šÔ‹zyÝÃØ¶™¹Å…õ9îºpÚ‹¯UäW+ýHcOìT4v÷Ì3mP—?<;°{ÿè^äí`´V½ex¦’¬×üMƒüMÐùoðç<´G:Š<@››ÖßT2s¸w¤®k™>½‚q^FÇk@ì4*ËY‰®oÒDÌ‘$¹OcKœ<Ŭx[ë’3Ä5×~X þ‡€aaè• °Ј~ÞýëJÖfxäàÔ…ÝÏ€hF+ÍP$}ÖpÒ#¡@ƒÖym盎üL»ÍÍ@FÍïX°n7êѤÝhéÁäþ8 >ÇgºG(] 1úLºÑõJá¸%Õ{_â: o7E:lŒ&´íDÿ ]_œe²êbsx Ù—µ ÒÈF\vá0š-³EÌ+—\ž{{ð‘µø¨¯l{ÞÆx‡ä»õÙ¦¼üQœÖÕÑá»çãÂ11ÂЇ訽‹ÁJfÚap&@ªhdZ‹153‡(4ê÷ñrË az×ð^Qæ}¡ê Õûä•íH“µ–9\–!•&ʼn/†ïC>Ÿî-†H '–ÀKK†i²¥!ô½¹JQ†ýÀ ×j~ÄËU«-$Êœ/´Üתöu£6¤"­et<’ ¨¾,þYO~äqéo?{Þ/ÝÓ’zºŽùÈ(È–ë¿9t¢í@ïë{3:ɆÈ'­…PÛ†}~ X:è÷]vÄ»fÉŒŠæû9Ô²}Õ_í;ڌԚ ÇЧÀ«®8s«ß¿TØ©¡3Ä–åçý‚â !±G>†¼À°nFsèfÓ†Pï÷¸ïNslÓã\|K SѲvî;h®G )çýCà}cøëéÏM»ôèßö§©iƒ·…Ö…Í0ÿò¬†ºX€„ÿÿÈÁ·âÌq¥!µðÌoû×ÔlÏyB-"’Á? ˜Ñ3û¥Xbãèe³2}=TbÞO–!RÃ[ÒywGÄa`äc”!ï¢r fî¾Ç{IvŠ/êÚ£Þ*²]ÇÛOŠƒk‰i†vz½O †€Å~Úé˜Ñ¸ÚpOŸõ»ÃîçÃæ2„òµÒ‰«ËeàÍ™}ÉÅý/ ã¿>›2(’À@ÚúÚŠÝ… ² “–Cz¤Ä)ãŽæ?÷uÍUvw|y‹gÖ½²ú¥ææ«¦›¡E%ïOÈy•Ã`~½y´¯÷¾#»ßm¿Ök3 fZ×DØÑW‚!¯&\ â Åy¸“*\šÞä0hÙg­¦Ì»:¦Í—çžaÔ6‹˜ü~ÖÖ¿_ýRï¬ ÞP CP¬YMŠó`:•׈”Z§dµÓÁ†èüȦƒcÐÙ5b…a,i›4U‡ä\†Ì\V^±Î”…U ƒì+ÆWfaÓ½'’ËP²Í" øhCå€&d0qA’Tr=¿ñš1üö#7æ—Z‚S¬Ó] I¥›ÅH‘‘8Å1|I(”Ã>é_úóæoíhy$¯íÎ÷Ø|iò°WlaøB†›8õ\ßp÷~Íéô ½ c•Z(ô ¤õvžnþÔ¯s –'È¡ËÉGQ ƒÎëÅ>À«¨çC¿CÉ'|· .Ƙ ·„~¾ÖÈaS~ÍdäÀ–`Š2Ü¿Áô¼ùÓߊ­%*GÚ{àÒ5AOÇOäÙE¾>LÄ ‰EjÂo´ô½}ÿo¥;I©Èý ¹æšËÐT’) ”b˜(I¹›Oå0ã29HSdH€±HRšZn®>䫤k¾½b }p^+ Ô‹À@üƒ G17ë! :îëÅa𖇡ÅÅI3 -wr›%¯€ï¹(íÇC¿»S<ñì/FGsüCáB§íƒãz8°Múù>üƒj3 ƒU«Y  §winz3}éØNññU‘ýü9¬‰ÉÅ{_zâí΃âi_xпTìÍèåß™Œ¢ !Ýɹ¼)G|u+e¨GmŒRÅaq Ïqr‹Í'úº{}û„šU‚wá_ð…/µHË“M’¼ûŠ–Ž? wµàï ¯Ã>æúC2¸Ö>hÌN–Ê¡ÚaT±^‡š‘⣠2ÇqHc0þü þ ªú~/~à“âGA{ÈÛ髆›®¸ÍØ÷ùõwãnáõ¯xl•ßÇçÖEkiHÍ2t±œÝf9 µ4MôùþI꾯±Êœ)܃ñ ‘ô“ *áH,Ï6•qªîôðÀp¶‚%0 ­”¡¶YT•Í"aàX®‚WUMŠÇc÷?Ïÿcílà›8΄?«–LK²!‘Ÿw-›pé!Cæâjeؤ¤†|\Úë]mÀ…´GŠizÁy+´kì`AœÈ†ä…"BÒKš^_ ä’æÒFòG°Lúq…’DòGlr5xe´B«wfõ-ÂåÞùý,Kû5ÿ}fæ™g¾ž‘ó¥Ë… Ê©Õjæ¸øè¸øÞS(›¦•ÍdrB2C§—C M*)CÓÜL¢ÃÑ<©¯ ¼n!ÂÐŒx>}ŽwzØQ½ÈúÇûž¥ÕÝ7dÐ#!¹ÑÏ&è2xëÌP@Ë ¶ Ä RyOLc˜>–$QpÂÕü& ;½Ï&3ÌÐ̙à ªdtN 0ƒ1nÀ‡jcªHîD Oc(‚•3ÅqŒT9Z’ÌÓn•ÍÞ™ DåÀc3hYÔÈ M¨lºA0”ÁÌYUiauBG; ~>ˆ›i¸kùÓC¡uÌ:fX©¯üÏÒ"Æ@&1hQSÕ-©brp#æ™™£¨Ì[Ï>9Pñs4Qwÿ×>Ó¼E»¶­ÝD÷8wFª~ Ìç @'”¤Œ90‚žñ"›Œ1xͨÞ4³÷˜×èæ"£*Þ8hZãh17Vs&­†«ú~!|¢d«³y– žñ»Žß Œ2xiÌ=#CsŒG—‡l¹özöÅ`Çnh*t¦JªeÅÑŒÕÀDj¸Ü›”Í›1P˜Á˜Ìà­sË6 f脱r!ÐÓíjá¤I'3dp¦\ŠS%1°00~ë Þ°×ÈDÓë(€uµ :¯§h$Ì€ubOc;LË5-?°ßaþÔñ°ƒÍm§ô/.i^hH7C}až)? ÂÛÊ€ÒBú|€¹Þª j«Clw» Âñɸzp&1ÕÝ.ìQvPÌœ}ùëI·öVë,Šã ¾‘I”M/Á×ɶ}*Þ‡7b2ÞÇŸ=ä :<§{û·Zó¦Ùr^´ Ž¢”'M–G/Ϲï+3|·q0C]”AÃ)@#ÒQ:~oÅi=€°XÕÓlûíǵ³A šmæªÑ[•jo QYO¢b Âr€\…b­°~À{³«€HøB•S{ÛkÃó o®U½ á_Ž : •ó‘mÍ£wܢޙ!I% ƒ¬vj¨Þ^*•08‚¬ÈÆ-ý"…ÚÝžò4IäH(wÊ®£€£µÇ]©´0ÁbwÞ¨® _„Ç%ŠaÃÁ¤’ÞÞ¼Ãÿ(ŒÀw¥¶Å1.N"„'g´‹\Õ(G˜Ï¨´Æf^4ü•zÓLÀNKžÐôè¨1üË£èž0^2ˆ¾”&1Ę)îË0˜¦¤‰Ùœ¨Ä ^-¥°m¯õ¿ek·Ú Tñ/¤bÁ<=-îð&3ÜúÜŤr…åY{pþI¼´«%|€šª>S2¿dƒµ^ÚÆY´°‚êiå‚HeøjýrÅ;ó‚Ú&-:uT¦j4a?¸äÏÇ”f(bÀ/ -ª£rhˆkÇÇ(þÍA˜ðý}ÇU…@i JÝéesS½¤´Ò-u,°¿W,®§…;úŸ¤ÚÓدÀ@úÜUшÀ’i ,N¦×"ëö¶…cy’\䥣ÙÁÙð¿g( ®{7X":ç2yÏÒO§=0j?°å‡#ÓÒ"zËzDS‚<7túªŒ=ÒCÐèuþ†C.÷§ã<‰gaø£yò~S4-2u7bhvݰì oCw„£çh lÓª +=b4%‚.*4Çüp ".m…ÍKØgáɼõû©±RÛ*æÜë4ß>Òbùy9S¶« ߈®®&N@ྠ™ÌK]™ÄЯd_WÖµÀ²Ž®B nÄ +PZ * 9?«b¾Ý°ÀÜ ê–TÉ :KE²ëWÃ×WXX3l¦†m¶ß7ÇQfReæ’›£å‘<¨2qÏ(¾™rtŠ`+/3t Rþö!èð5{)DÇ©Är#ãéCq‘ÌwÕ³¨mBû©á-lì„$÷MÉ ³5''žï=:ƒ””W¡QØH”=h°ª["½„o:Äi½ÑDò ÂpͶ5‰½öŠ|faJÀ 4w¾$W¨ñŠ“ˆ0@™ÁMª2Ps¦‚DÉ‚Œz¬„¸³c D”Á•É´y¤.ªÂe1Lb'\òˆ¢¢ŠýL8@É ™¡å ;9óÑWÌP¼@Þ„JfÀ¿dø% ÔG§”ûw«ÈR0Q=qj‘ʯGe¥¤gÐ ]­áôz½5w½|…*Ê`nw„7)ëGž¹Hc¸ò#§ûè,åžÍ*ÔGã Ñì»d‡+_ðŸ´ß¤Ô¨š34¿Ö—kMÙ˜ôåååFcCb ¢ ‘r!™. žo:¨¬ºP4¸'Oõ¡J¤Oœ!1p‡¬ïö˶äcDšHÄ@ƒ8ÃZ÷–=¼ÒM¶…}`N¯@: h|Ô¥2UŸÐx¬\$\FeÜ· åÔ÷§—M1Âôå ÂA¾¶1Ê`ÒĈƒè,~Õ~°cÎÊþ¢ÞƒyË.¹˜C <å5nž¡l&–ϪlÖþÝL ˆ¡h1J dd`†òƒ ×É )…Ã…½2UƒT<ÕYVÂŽH(à ²µyÉţ8hX#ÁòØ<u‚ wEœA>¼Þ†Œ34ÍXozà²+^8DÍúSÿìŒõf‚!ϧ’«]Á¥1ðL3Gz­H?èÉh¹ °P-åmÌ"p;«\®=bõ¦çgÿî”&ƒp‚=dÛÑo0Xí¢]GÝ®3Ñ ÉWO/±¬y"…AÜ ér@yßMò"bÈ'9Ì ŠŒ1àMMQÑÔoPoöÑG……ë5_Ûo3²¯ºB \wÏϨXÂ%´çú¬(]"{§ÉÅ b( ÝT‚Á„Ä,nó"kÌ~H`aàB¡ÁDŸÑjè“&¼Þ欖Êvæ:4+Ÿ/‚Õ© äöà„@Ä}HÅóá{CPYaeTxDT™3Í"+±dJ‘ƆXÑIQN íŒÌE MÊŽÛý!ÿ56 =µ!mä3p]§|æ;ÞœÎpBÃŽ^÷ƒc˜)Lkÿ'2Y}}ÐίåÉ>Þ¬«0¥–6¾Ä™µNâ–#¡Z^ˆ™Ò]üí¦«¾£ÓËæLáÆS BæYü1¾gŠìºzûúŠ¥Ÿß¨|ìsB&x°à£W“ƒØâô#Év&uÄ07gHß„&Îp;Tpó2ƒia:Ã4ÿr‰'¯~* cÜb¾ƒt9Œ}O°_wû}píJvjÜó¢ÇËuˆm)tͼŽ$¢KŸoÈ ™ñ°Ìö{ÐËH;…Ÿ;'Vg—¾Y}¢ÿ7èa 鈱y3ÿ<¡LécŠÏΠ´K?:ÛÏ?ù=Ô°:V‘©0&V¬xÒŸ$~ u3†èE&ªM ¥Oü‚:çûàéÙðïv©yÃ|µ¤ØûžBýÞüy7|P,|…>Ò`){ zÄy X™©+O3¥|'M¹-À.©~¿‹VÜ §vvîfÝί̰‹¹áõ«ª¹9ÔõûÕ“¡_ ‰/¿é=ø>:µð e–ë[ûœßnf–'Üɤ=dzääWe`ÿ1H¹äº+ñý†r(ôªBÔàWdŒ—Erx°Z¹ª–¯–÷›¹«G/ÞˆA¢yškkúŠ ©ZÈ“~ûÐÂ^T‚ùÁÞsC†BÏèL08ž!œE\òiç _ž×2@¸]¿ IDAT~#U™Ò‹}ýØC¬­*w‰o­ð<]A‡npXÄW"Û>Á œn<Ç‹‘O;ÎþȆ—>öFKðKH©ÎÃ^ÂdDy Z«ì [Ÿ{Ø©ÿƒ§ŠýÌæt97ÖÓf“i‹–ônœ*Àʦ B Á 1agOÃéMO2#öFöÜ·ÐÅYÂ¬Ê Ìàë?».²: ³Y²®K§®ÙSo=WLQ» ½õös¦í9*>Âpê ¢jj¤ã±Ž$(3D5“c¬t˜‘(±jzç–ƒ}¶Èl<,)mÅbæžKëk^³Ç"®Ôë¯ÿi#í®0UiU>m#PšJn¦"z<š¦¿vº‡ºs¥‚üüM§ 4ÞÒ:•X0FZ¦­ÞÆ %²gªõ6ÎÆ‰à€aÈB Y»áÑ׺m¦IæZ(,k„ïž·rÙHÞî;¡ÝÊ<©WƒÞ Í(c‹Tk2C›Úév7©Ä¬,5ÈÉÒx3)fUÓ-\Ít†fÏÔ ÝaØ^_[ôš3Ÿ‰Ž~LýrÓ±‘Ëb*)į €ª‹Ø,0Pr*èféîH5Kb‚¡§Ïé¶cKßZÎìà³ EbÛÚuÛYjš±~ì€äØæßÈfÙ2à¥=Iµ3Ž7VrefX­_qçO+9m£vŸ9ó=£b…v7Ý*™A>îFO0Œö9{ÔM*AiékkQ#†’"!kmO–Ì}XœáF©™%Ÿ¸à5i×’–VÛ–„øÍúT{¥"Â`ŠÕ€£{JÏ܈a ¥Ñá{1(׎fžI_ÂPçhAµqZ`2›ˆ%üj…™ÚJ+jA­©P¶oxá jÿnÙU£– ¥§éµôõ ¨5Á#%E¾Ñ¬žêÃÌL !†=‘)«É„á TGuÐ'ÉÏLö‡9Ó:[ÓÂéÛV0ÝúŒŒð¯Qž¬Èx3´ TlIÖQR¶ÞÙéÞ£óy³ôCg³ƒ¡È?œU_y¸w†gÃ}ků`Ýy¦ÿ8*¾Î!Þ”é.‰é…Ë1ÃÓÜÉ•¨Ù–QlÒZ‰›Ørð7ò:æhZP_‡ãC¼šÿu?,@òßÛPn›D·¢?Ø+â­ d†×„½f+¦c/öÙ¨åÚeÎ,ÞâUK†•>]™ð<{îyMÚ»ÃÆÖb °ÔÐCÕ ?Aø0ŠàlN«³Dkzê¢Ójõâ¦åê1¼«Ý €ôú‹] ÐSÿìš­¯ª!µ­ä6ߪ ^ò›<ÁÚÅMŒè„pð¹šA؇´tSä¹aO6“$‡[`;ð»‘,´ 6[Í+l•×îD Nܹ¤Z`m)òU Tê‚~Ÿz» Åæ=Ù+*»ªÛ½zN7 ”€..SÞË2AJÏô¸”7¸0ƒÜìFòt—He&o¡÷‰Ã^OŒjà|«Ô—‡ÅåúXÎ.$ÿË~hP) q7ÛLôÈk( ¹ÕUž]—\gø¡Áà¿Y]3 ÝÛ"ýN 8²^y9ÿ3½l¦ÍNù¬£·Ç¾«Î¶ÂT2»´|‚ud bPƒl°²h‘Ù@ºY›Ñˆã "~QfXÒYeÔ ¹ÒAXÀÊ 0Ê ÍÀàI- Òå‡{{fÚ:û=³º»_ñ–ÃDÑžâê5Ù€ì1_;–ƒZ«lÌ–§W'ä€ÒQ"1C™UÖ2ƒ»j¶Ér`wŽ÷ú$é i¿ùË=Võ{kÖ ‘þ;/"³8‚ª,Ñ3¯îxœ :Qb€˜‘ùÐ xT£X¡oêå…ÆMZéüR†Ïžï=7û¿Jl M› [‚¸6 ‰ðÝ(@_}8õ†Ã`ðgˆA•ßuƧ$füŠï}è{ÿ Ûéï>ÞØ˜¯æZy¾¼H H ÛQ 2ÛÉÜŒ÷÷Àmž´ÅIgBƒúýÌÀêð;¡Ùóú¸ŸtÔ$3 "ÝYÂ:2ÔFÓ êz}Þfd¨IcmTkÝ­¯%µ 3@êZöÝèU™Xxá æbÙb6ç´f„¯tÈÇ‚¢ÞÑÂNPL6ñ¥ã½Ê§xlÍsª:ÃX‡Â<Ær %6¦ ”Xœ>ï8Ò§ÓXvAh¶ë6i»ŒLÁvÍG³2 ¸©Á&NûyrÈE½=¸D"%Pµƒ,ÜòäöÃÙ%Á:èú:¶3T”X(ßh5;âÖQ¶2»àn ‰!ÄÀLËÁfÍÍJôÖK£®w^©>”°½1¸ ·14Nµ1Ð31¡Ã°™†=2ƒ¡ÄÂøF×2#ˆAg¸V‘&†t32ìÑ\Ô'Æ)îL¤ð6öU§›ìR‚•œ1üÌŠ2Ô%–ý˜AUÊ4”°Yˆa5b¨bFÎè(VÇ!‰&Ff”CzerêÔI ò ®xÅ[…f}ßÿöã;€Ù—`lòeÐQ¤¦ÙÞ¹f}1T#94Q,ÁñúV‰‘å¾@Ï“Î@PmŽË%©îN4J–òdœA Ë¡gÇa¤COÁÎÞe®°¡± 60Òíb {œ¡|ºÒ~/ébhÝÿ{8îôáͽ¢\qäópÍÄÓgSŒ'Z•,3°_Îü~ó~”yï(« (2×½•b·ÙžTÃýïŽ}ÞŒ!±›ä½½]Ý*ét/ÏÌÀÇXåÊt ¿n$õ}0ø{T.@.§Eµjse¨|jð4 …šmv뺒lZÌÚ|ŸL, nÐë×ê5jéƒ;òæ±™žáóyÌ%ãæo;|9[OC÷O`·ôäË?Æ?¸ö ^Ë!û¡3è¯R“ Ìæ`~·ÙM¤3Ü04TäkCcyŒ!’£bcÿÞÞ·¾Ö;‡¨T8xƒ¹^ÓÁ#fZ XÞ Ö­ZÂg‘œËÁD€B/ÈF ˜:/’JþåVúl¶åƒ^ÑÚ à ‘ºW¡†«¿6?ŠÌYˆì†c•ð0àúêÞ®\×)5yF&¡Ÿ ¼7×ïû¤Œ«Ý¯kÿ_HwœfGÍ’¯`œ!vØ3ÖöÀ<Ê»®˜xÅé[l9 Ç‚àÌ43¥V‚ÊÉrEþá­¿ål%'øW`väëËDvwÞ|ʓՄ‹ðô?¼5égý—pm²ìYspÈR%[¼‰ÁHÁ¯Èà¶ëµZÚº¡%¯ÓÊfrÖÂíþÏåíVTÙÁÆM}={2ÜP9ì?Ý/m¯ ¶@l,'–nß5Ï…%S«ÇaØ…$3 îp§½C—ëµÖµõwPèÐÅøÉ”GŠRB-bÔ+‘MKbïzfÔmèt™Õ€‚Lê›úÛ'.Ù ú]øÍp¶G‡_ Š.ô…M“T¸1^©á@¿NfpA<ººoò³óì¬W¯ÀOÄI,æg]5ð \½ƒ'µx%WŠ8ÐÖBÄ€ Évkf  ׿»ã`YÍ@ŸëMÔpêõyàÏ^s=ÿj°þo;Ƙt†AÌÐ+5Ž0œ?ÊÒ %¦C«ñÍžè׈y/‹³´•š›y‡·1v”":먫skAã?â%­[’BË÷ÜûÀÀÌ=‹ÿÕ¾—j58ç¥u¯#!8h? ÓÖA¯Öáüðç£6z¯Äœ´lû¸À+Ù«Ä»DðRpV†Ys 1ÀC([Ôz¬›«¾ª_ã*æ}háÓEj®*)-‚ùïY;ð!C»™VÞδÿ3(_.«ñNc8x@Wn„MGôZ™Ø€ÁÆœ[†8Øý·îUâ™A 4^›b¼Iµ]ŒágÿvpéÖ³\4JÊSüaÌÐò[ÁRZ¦ébÒî bý$†PcåšâÏ.¸ì'óŸ÷m™üÔåpÙ*Ã/‰ê&±ÿÔ·5£Åö8^ãÑ+ï3.^Tç°~–ŠÖQ†ð/ö,Ú0¸>‹¦Î°~Z;ø[ñ³·áà_Òód’ý ÷Qz¢?¢—¥«ýÀµµðý¦7:[C[6÷¹l;wCá:ÃÛ4Ý) qóÂ}¢ &3šxS†ˆ 46•ñ¼€ê4bàA±jU@©éãuS6ª (uI 7ëEl@ ì‰AÍâZ"‰A¾ë¢i¼)ë86PM’/ö0©&hcv  •ÁÕê´Æ«F¹¨š¦ÄàNî§M ><¤~;þzù#ÌÀ{‡Ú&Œpw~¹ñ` •ˆ.òª©C[00Œ*Ì*4áYÞn/MÚÍ Ô{d…¾X©ê¼Š1ôÜ¿â-[nŸeËYË÷°›ü‡÷äÝ~só¯œ~Y^'ÊôzÍû^·ÐXwšF Þ:zƒ²ºîÖk‹öDþ„UTHÈ•!ÙKËP§üûú’# ×®¢Í$´çÄT‹{³ðÜÒMdÆ®Ä;çãÆt²ÿkV«q›Í‚Ú¼šFmïFƒÁ ×Ap ·pÏêBøÝ·Ÿ÷\ø›+Á"fKÿ²Í#‹`ưþw…ypWéub t€Ä ÕÈÂG œ€QÌ`&ûuŒáKš)å:Öá¶T Àb6#w‘¡Ä /‡Z®ÈˆÎ :ÅóŽìi&U§¢Ä; Òf©~ñ¬5RWÑõÊÒàwŸU½áÞß2qbÿÀHÑ“åÞØA^Çœ®£<1‘†Ø$óɨÓéî–•‚ÚVË %%Ey"[¶Ç_¾GÏùuày(u#†Òþ%óa¡Öÿhþ÷ R âs¸¦ÆŒýqBnÈ ã(^\¸qvÇÅßÏÄœªãüÀÂÑÚ¶RhTÒˆ!8H—lQ•kÙåv-ÝtÉA«BrÀ d']2TÈ*«aåHñmÌ5U8gÑ`¤*áfæ¤äIëj—zádá}ö·ÖÂþS¿=´ÔãTsó"wN4f …Æ ™ÁC×·V!3P^Öùs>|’…ž?×ô„l¦Òî'~ˆîxîã„tèµ|° VBŠeðØ[*Ö–ö>…íûÛŸÈ/*3´uï-Ìs"ØÓWe'æÈSpºHSª\ uI aèIÎAi™iZÝ=¼Ä0 òkØ“™ÿÍ¢ŠõÊÖÌS[†uä«ãý“ýUVÏÊÔWžî«ýµîž&ÿ‚okè<®,ÊPèKN 8rãELòNêžD±ò£Ä0áU€üVÜ?œ¯¡óͨÎÊ!»T¨ÁÈ8CÍùªóßˤŠÍƒ»û=ö K›ý Ö€¼ÊØHZ”uÄNc ƒ¸$b} uzvKŸÃCˆáEœ±B¡©MÔª$Ü9 B¥bùë€ ©ŠaÄЈC_Uw±Z³_=èÞêé/{ò%_‘Ž:p°#ÂÀ ÛQZ rÑhi8=½îŠ|­¾ùÀé¶+8±Æ}¶ÏÑž¦ %Õ:ßÊ«ŠÀÔï‡uÃKóLƒ$°gUÔ“‘nµÂ]Å!†xÝ= 'iØ_}:”‰±¼A«iu#sƒ{:ÿ _5U¬p¸9ƒ!¬qg÷Q-?˜C-U¯¿ºòjN¢Þ¤âß<ðÐοL^¬8¿"ɶO ©Ý!|~c9bèF Û½Œ\oâÁQ¿IösÍ|îPPîƒBÔte»5))ƒÀz1¶20ÃóSí´7…|k£¦u¨Õ>ÌàeåYdþÃrkž/ò¹45|¡ä¼Të=;9x¨®’Z*n¼¿2t(¿"ƒÀÈGÐé ÿÑ¿£ ÈPô‹0äCµXÐÍH˘ôˆ0xRo–ÿeqÀLÁÃ9‘ðÎ:q†@buÈ8¯ 2—…ON|SxÞ·¥(Éë=6¤ÃJ21>̃‚tc†è׎p`x9Tʺ¬ôùr|êáq±EPA­-°4Î ~ïe˜`’ôlA~ÃH0³×~ Á?F9¹;ò&a9ê˜Y½eÜï„}³vV°‰§fN‹q‘hT+ ~ê‘`åËI%K7ìÔ2ÏéÝÙ¬./ÓÀæ2}†%Ó]yÅï>rù"_ÿ=ëC¦U ôíË¡n6¾ 7`âÍ"r @£’ß”>91èÐ2§ËtE²Cß°„‚+tµ] )Œw:ûýg®¥UËxKûf…ó«åÉIQJ²‚aó]T‹O{f^¢kWêô E™¡»Ú)HjÝü­ZCÆ™g¾ ”bŒº†éÇfX ›ƒ¹˜áEq‹®¼lÕ¹û‰Úþ­‡x‰üvy=àv¿ßÌ+%#3Õ;0;'÷ί(‡›3ÝKL £îiKÇrã’V<žƒŽ†ivϾ"s&.ÿR†ÀL rLîFåîû÷¥ÏÉD6í&Uùòni²{ùŽ/­»¿ŒaF9Lì·Ý±FW|¥Ê½ï.T”~R‘ 3¸ð¹L’’ì¥)8ʉ>mŸHik"8È@É4=¶0ä˜ æBðJm_×åõÒ«3Ý—.„Xϲ@ð=–¯=.3|ð¦õBAíâïPË:/˜,;H±J Ðu½”*¾„ažfä/¢–…¹ÂÑÚþÓ…ë¥R%ƃî3LU‚çtʃùÀoÔS5™:æÀsð®Â^PK¯£ŠÜœéfð”†Ó®Àå1mÌà•Ï4Ť¿büyY®ð–çãw®·m©ˆÌ)•»f`øÝω#v÷Þ÷^šRq9Ìl(påꂚÂuÔJwnØA‰UA¬ã{™‘›¤Ed^7ˆ1DB"/5b£o0În?œ{I™­0ƒÃ{†ªÚÌx”s5t.Eº›ÞSìÈØZ%4t“L¯qÃn㨡w’; Üü†Ó»l>úÏz–Jö÷>ô÷æýt‘ýSù +òô¡°T‰Æ&‚é¥ 3è™ÐÇ0fò Û®mƒÑ q*:3Lsz™8æie3ÃR%é"ÔBL A¦0°1*Î ½ruÛ? ]ÈÎ]osÊ Ù7”CZ˜ÆP`©‚º<½Ì œ™}Œ`?"è)—ßQdï¾ZãU‹¯2—\#|î‰ÒLè ìÀ ®tÿÕAÆ£sXYxnÂÀžž™Ab#i‘_¡Í¶QC=Ɔ|3l}^5Jˆ¬ˆS× Çv¨¤IÐëó’äsùãÙé"/”|¦þgÖðÃþ<ç¡ðÒoNcPVñº&=ë6)fÐFR4-ÊõZ¥r÷ÐF=ƒlÅW«®=&êtÂÓo_oËÝ.)i5þÈ~âh˜!Ê`´Ý6Æn1(´Ôôk¶‹u´1:­Ýb±<%e­Î¹³¾1Œ•z^®ø{šKKÎBdj>¸Êù²Ä€dƒLTÏÓŸ›Ê µowKL›(t7dÐøŽb`¹OÊZ±o_ýóBj¬õÜ*ã×±ò\y¥û®eàˆX!•F%zZE*3ŒhÕ1lçN܉ z·¹¤Ðö¬ÌP–¥ñ ëôv3öë¾h¿µ¹$\ GŸ^·2퉒ôM…Ùîè ¥~Ák+ ð­yÈboК±½¬ša*v„¨}ˆ!ËBãåYðÊl9Ë´ÅRµ¤àœÊ7‚Üj¢¼öçôgAv¨ï’²˜9 gÝHú·¤Jm_é =b ²,E]XWîÙ{´í»ÌœQ"¤…»–ÈieèR³é©…4éuVø§_²ýðÎR<+UÀiìÖº¢a¼Wzí† áBðy%ªÍBãk&2þóµ§?eÞuˆÁ\ b!&‡jVƒ•e’“lø)#˜÷.¬„:QÝ=¾é[Ï:>–øeפMròO¦Dy9燆0C‘3\Yú•äa]û¯HJ? »&¢ Z­}µz‹76…¾ßAy¿èAÚ÷º„óö½k ®ÎÎŽ?›•?oÑ–ÑÚƒ•MZçœnÓ6*•вlÉ1dU9ÀâÅŒßN?8/íqˆUS¬ZÍÏ 3%²ŽUg§Ý}‹¶½W¯‚ë(¬¦1ddÄÀ“:¢-#_©Ñ+2ÿ±¹+ìð¿8Äõh†> 5<É­ÐþÜW``±žÔc†NT_Ä‘Q`¬ÙÙX¼1d(©r…N½>k…zձʓšÒ·hW‡"„ŠÛrÖrßl:Ý(`]}ùŸ¯±§ÙzW^»˜:=éÌ}âÃ/ù;òl•ÅüÝËO°Â§a* Ã}N1}¸”¶ËsŒO¾†qý^þïÍ‚£Õd#²î¸†ÎË[®2f‹m¡‹ ÂfPÊFn“MŒék…<"ijãX' \ÇC€¨Äp‰²È oº7â;³àI.AìA wÈb·+î²eyy ¤Ù À 'Hù yz …Q¦ûúË¥¾çÌ¥À˜°¸æÐ’äÙ°aY^¼SK‚¡ÅÁËŸHÏÀÀã_¥<¶ÆDËðÅÖé ‘öü8|˜®/(^´žÒZžÒÕ9¦4D,*)-" ) 0™A®Ý&'ãML9·aÙD¦}¸d]Ñ&¸ ë-y¹RM8Ox}ýw‹UÖ˜ÍO=TS¦-IcðC/žš`(g Ch@Ÿøa¸ÓéVÚÝLêÏØEJ…ÒüUs)ÝÁgtÀ 4@±“¨ÙÒå€þÓTˆ!òš¦‡/cÈØGJwIsoŸC"1QD\ L›?Í qTôZã—0\†ƒ.£f!õÄŽ4˜³´H*„º­«2çÁé®´³·È`¼9Ä£_[ïa°ª¹j]…ŠL‘É[á謀bÈÐg“ÀHº7ìÎÏ&yP‘AˆZ­Gn´–öŠóÂ{`ë¸ >Š4Á´ü¨AG~ÿôŸÂ„¿ŸÒ]ýÁÓ%O£ÍÄòG¹Æ iVz*šüˆA¡Ï'€–ä wë3C9IH@Ëg Ïˆ3$¦ÊzòKÊTÐ.Ã:‹mÕƒjñ¡§iJç3€â ìø¤âQN(‘Q1ÿz,#3hC%0rÆ ŒD³¯P­b&êÔ—Þ£Ïý—­çw`ç#‚Ûè ùâ“¶”z&ØóÑ:îûtûÔ&'›7â‡|†¶Ñ¨Ôvfi±‹âÍÆ¡V‰Þ®ì m—>Î%"‡AÙÖ$mRšg[{Nm}D4sž4DŸÛ(–¯ØÐVÆwfj»ƒ¤/J­;[ hfðb†!w6:gâ±Èºz¢ö4'ZβºÅŸË9érXVçZú½ÃpÒãÿ8ÃølÐM KެQæòÅÍÆ\Ì¥Oc€љħ1\®ýâå»ÌÃwÜý>Ãø“ð;²% Î0ÓÒ#Ï$ca¸ö*ž ûh!÷Èš¬ý|%ÝLïÇ Ùj æl= Å׽ͷÀðÇiíw™õO®wÉ ÃG›Ö½_tzÅßâþPZí-ä±Åêþ Tñ[‚¹KM¢ð9G*1ƒ²ÙØä‡ç$Ú¶; !-fhêìD Šü8CÅY”BñIaü 'J‹žqà»Ìþ· ï•Óbhôu¢ºÈMºWp>EÓ»xÂÛ7êÄ}Dãž‹:Ö²à6ÀÎZ9Õ|ÐP æý}+6´ì÷f-1vË €Ù *³ôÚÄЀšš¼˜AÊç½RÕšGtw· ]E*¹\D¬H`†¼ ‰ê-ÈáDpãžCs~A-)ÚÖï^ôV}?óÊ…P. ÔóûìJ¾Õ÷÷» „áqÿ ø v /W¨•zÄ Ô®QBƒvCfèF ÿ'+ÆÀë•$©M¤0l §—ÍË„?R}úƒ~Cfè¯h'1«jÀ½è„ÖN¯ bw«/ª™_‘×_õßîH¾b]ˆ PÉU¡QOp°¹‰'³³õЏÿ(^„4ª6n\8¿‡ØØ“bïáµ8 gÕ~€>²S@nw‡¦¹¦.r IDATeÙ`7f(oThøò|Ò ››Ä &ã >½ÙP¦Õ;t”0LÁIQ¯9O•ý9™´'ÿ¦™2æÖœyÅsú{{¨{¾Ÿvvz½‰ä@»õ•n[£ˆä`-Pyaw·¨Òdg‘\ƒP‚—.D -Ðàt›Ù;ÛRÔ,\L.„ÿ—…“ÎÔpß±çËööæàÁ0 –ŽK”“¢H¼o[2‚W‰8¨Æ À >²¬lâ©DWñ±š%wyüWé3H32|™kÀ(ÃÚb0"Â!ð2CTP£€iW³*žš¯zjÁþK¯pš¯6¿ônz :’DÙ^ò»5†¤Œa°G¨ÞC8 —2Rta1æz@î%(õk‡o{éÐÉQ—ßÏl“Ÿ£ˆ/z /˜³˜¶ WаoõW“ÈݲѨC ݆´kÊr¥à)ÕýFÍ’‡«› Ö¬#§¨ºäèùGÝèóY Õ;âís-{¸Œ¯ÆàUGòF¾eƒKîZ $ŽÎ™¹¼ëذ㒦¿º½~æ3c†ªQû\%‡Fp ˆ/Bøºûs¹yÛ;Â,iþ6bxNvÊ2ôÂøkp“vÏ|0à™zðÕ³µ} ï»óÜν{ç(í(-ú)þÂÁ©µÿÚ8pÒ`͉u-{nÎà–M$¡oBzR@ ¢ùYÇ¥×ÄGòæjöãE¡÷b[‚‘õw¤µ5xjIˆÅ+g=“òú¶ä‘?—û×{W^³´7‚×h«¼=£X)3Œ÷\ 8ö¼ÓÛ« ‡=(þÇßQ«™~Óù´//Ø}¯“›OUÎqì}úája:ƒ+&çwe†‘Jï ’w·[ÍMóMFÄ ‰2¨Z±û]ÁÆÈnx'SÒÂÄ?†Ÿùâqsæ[Îßû÷O!%bàæ þôé9vÁUóbr· ¿Ç¬–~xfÙä5Ï)ÿŸcljQ@Ú#6XÕŠwµä­^¬™&‡´PA‘W8÷0›Å;œ´Zì¼SÓAûÖÄ/ j³ÍRm(âí/óGº ê2%f@ÍU«@FV=HÉMŠ[ó¡íŠý‡ƒPó‚ŽÏùvü¤³TyÁ°…ý™«zñž A¹Ïf ÷8o‹3PPÕ$,Ác”,b`¾DLò§ghÍ Køòï$Ì¢%ïèŸýeéUm>ÝÒo[œË¿Q/0EËCt›ûÎÛWa¬tOÊ3‚jþpJØW›z$Ÿ ùþeuëÖÌš2 Ó+»€PK#2ÆÐŒÜ~À6\üÕfdоƀõ[F‚óòÕlj¢â£kt•¯UÞäó;A±i„˜[´*dDb·TÞlÌ Wè7ó—2ĺð þ½¶y~û²•ty"¶Í0¤¤’[½=§¢é1Õ>7eЙ‹Üù…dsvf`¯Wf€) ¨¾4DÈ««!ÐG€UÓ¤$7jJ /€œüE·ÏªÔ:²ö¥’E#‹WÀeËý®gÚ0Ýè¨Sq;¯ÖM™ÃH™GBˆ)J7f ÒpæB “1^ù €Šš&-±@³táKG̈¡¨Ò.RsÎi7 I?ƒ¯â/¸Beý"»|¢z>‘<ïbÉ`C\1 ïå`CƒF®ØåÇ¿-=y4´„Yfó8‚‡Â¿¸ ö)XQãÎô5á¼ÃôÝz)ÆÐ¥k£ÄÅ(-8‹y gú¨ZpWÌE—H—÷ø¨š`´t+¯–,Å_çáÓÝäà„ЄJ[ß÷¡× Æj‚Ïør¾_t8eâÈ¿€¬ËÇ ^èžcDÊ“œŒª«q¶õ•‚¹b.(E £‹>C ¤AÅÉbþúÅ—›ß†ÌŽÐ)MðЋÉÙ¿ØT†ôù±Lg0ÒºlFB jw]Ó¨º¯µÝfQ‹f«Ò\ê%]cŽQ5`P œ ˜¿†2©…ñŽùc”uYQ~nš ’âM.œ Õ™—7”=ÇÀ ¤£¼Û»G? žbá'ØSªD±Ï(é"ª~õöu7ÊÛGîǽ4a3º©ÿüŽê‹­µakÈ™:õ%E)°3IDf„Â!Ü.ö }ì´ L®¤Oï+¶/¼ãêð:sŸ|?øÊ¡Ñ¢>»4½ªæ‹msJÎèuÇWÔY=K°'Ú!x6þÔ„$ãzÑ%nú$*”íT4×Яp‹¨µâ –¶ðJ1ìåÔ:hçi–_ɵ:Sï–`Ÿ(9¢ô ½óŠ¿ýŽ'ÝÀ4Ô4S)Nvì-ó ËÖ<vž€Ÿ†ÕÒöè²+¿ ´(éúÒè cdÔ4¯… ¯Uõ1ÐKÐê´ý¼QüI ‘/¨õ2 ªRžrB;›ð µNpåˆvåí-¢rA^“ÌA­qs•÷[ ìRìemíT•[åL탋0ÖªÜ&rˆ6¨žfw+ŽÎÌcæÔ9.ˆô ³rÊ•¤ç¶k>Ô:Oœ¹%–à‰²ñäŠs2m6ŒÌД» K½&Õ³ó’OÉ‘ÏÄàÅ›¤&…“Z;Áó PÉ3 žsçzy˨ȭXäÑ0!À©U§ŸÀ¾ÙG´@Óà ‚Rù@ÊS.è \»®2èš-ö)eÅ—dó^ÛŠ –'ê¼id·Å~¸`º»«é ‹f*)á7ƒ¨ñË$~_E-MJkÞ’‘¢n”R:¼RõC`¦©Ñù)’C¦38!^×v¡'`¿fb°r†¸oi1dò(OZA‘O ñ཯Ä'ÞG#88Íp¹¹bßÒG )×Ü•_-ÿû¿öL¡ÇsÊF»"áßú*hÌä3# ØârbaHÞ˃o…R'+¯Œu¡ç»„¹ýÆ ±0Þhƒ®`ˆØë2úÝŽq A æ¬l™Êí±>M—WÏN0\+iÔñ™°K¼e.Ä€;þ|#”Ìà€’û¦ó£;/ü0«âÙ`É¡[Ê“p\(þs!xŸPòá_s=ëèXw¬½@7Jpss_˜"ÜYï—YÛÍŠ_Àõp øuñܸ‹Ü‡k™nÜŠ•V`·4î-0+­ö§ Ú¼^œÖÉåyF† ÝÄ<Ô ÊÙŠEŒÝqB»à@¾/$#[x•; ¦dÓ@@HTSžŒ1¼_}LmìGtÖ£Á…ÇòZñ©Þ¤ÁÈ™”ÀU\)TïÝuœáö¸Dè’.wŸ¹ö§ïþž4׌ˆÁ“r1\óÖuÑÀn§E'‰À_¡’D…"¯9‚—˜ð`Èe^’(8Î[Ú©&f+2(®Æ•”nœS8b ^3²ŸT°›ß޲Ž9/ ªX)Ý.Õí›×Œ>5ËÕ’šÑÏÏ 01¶mÔ– J…Ñó.Oø;á+—Aö°Óµ3*êˆ[ Ïü—~‚ÓÃ{ÂÝ®á‘VœM=™£1xËIe3’\ÁæÖŸÌðÚú ñáãn‹Yå¶iAê.m.øÎZÿ÷è»>Ûüø¿ âL'ÂýA›ØÈº¤ sT’¾¶­ RÊÎæÍ˜Ò †¡¶Ân-²~ºuˆAV7ÙWˆÌФ’P~ˆ3ԢϱYAí\ÇÁUJU—TY¿%¦‰Ãô“–©âYEJpJ’å°Ÿ·ˆ}¬]̤FKl–Ávõ±_¬ç5Jó±âµÚåˆa3 DïÅ nô4r<÷Ì{úýïD`tâ^û€áN3æ8Ä`õõÎ)(»¡ˆ•ë~ ¿ökEðR.Œ3ØYÎ jG¶u;޽´þjM±ùõâµ@fÈJbèé(u“£ÏŒŒ:uJÇ]Ë›2²H í+n4ŽôÇ×%ÁÓeAݪŸPhº¬ú­£Ù+ KYŸÂ „‚nnnáI0UœIº-ßât™¡C0[0G­€B `\´¨Ó„Oƒ ¯Òʦ1Ì&‡Hïm#^ ¨5{éw8ì¬û¤A%‡bI*›®XM1 †ÌUz¶òsy8ÓÅBÛ×^íQ>ÐòBD‡$·ø!¥+s½›2RwûBʲ¦Þ{ 3p…Ý8Ova†sê"Äð̈WCÐÔ^C2‡üiú!àA&ó¨ZQ—}1†ï»"ç®Àˆ”(›‘yŸé I r¹èÉ,ò‘£{†Fk2‹)»=1@HtÆ¢~ºcypüg{p4»¨îëÿ‘é{m™®Ð%»…ÅÚUrEŠØd$“Ç\þÏñÙGeq?1ž¯½²~H(ÕOÐ9¥1tg)Z5ˆ3t¸Ùº´æ@ËåÊvµ§Hw:ÆiH2v¢¦ÍŽÙkpPŒ¼ù»°wT;\5gQE}ƒom›ó¬‘´BÓ;" º(£ýÕ‡ïWZ ª½ºGÔwî2CJ¹‚-<0gvtÑö 'ª÷üûžýÃùíŠyâÁš±›IÕ§BD¥.wjó6Ojœ’'šZ!æG 嬤mM“ÃaµÅjhÝ«³!û!®Ë»áµZ¼íóX—I|@ƒí NݶëÎáLaÎ:…=Lš«Ü?ÞCQ]R5iÁë«ÒºÙ7ØÜ,çé¾oQ]K˜—ßiQ–3i è£E¬tPš•+û¹yp¬PÜo›ØÏžlgÑðwN!hÁ½ÐÚ§g"†\_æõ¹ëÕáÊYæ^÷Í•N•Ñ£kÈ1÷?¥3t1Z–P;9µYÓ¨¦¼–– ÄÐ+3¨c ƒgÙÍðZbsŒ¹¹•{»Ätb½ÎúmˆVÎïèà ò¹\!ÔÞÿx_U•{ÇçgPM2Øciyä…æ©ºš`¥ÚÕ‰ÔѼݘ`]‚!õ&Ä+îZŸÇ!ªžõèÜ(Îð~×6ûá«8y¢KpxGÚ,‹t7 ’R˜Ëkm1Ý)‚ÖÖXZ`‡þ¶š¹à˜qÄ`œ³FÍpÕ_Ì„\]&"šH‹å+Ÿ_àLc8Ï‘î »Nß6OSMË[[ŒE"Pe)PÚÙWÆöo­0Õtþ¸¢….Rä¯/•žÀò„Ìäx(¤{Cš¸÷Ðv¼¡á2?R‡[e‡`8|vÁŒ±\¶u;ëÂ~ÿT¥3È!M<ÁV f´ŽKb8 D @£Ö~6§Öݨ­g5kAáCå¾ÕõB~;õVuÐ5O3vfÎÃÓœQ£ ™½öškì2Rsé i}¨ˆÁ¸I,G F]§½*‰á·LÍa®qý¨%_±%ñ¹dŸxªýasæg6p Ì/V´SsªÃ¡êY5ç‘cÌ›õ-Ì TÈA\Û›ÎЫ GÚ((„E<Û0"6öl.×´õÆvýßÖtr  ùU㞟Ÿ‚aéÎq‰¹:ŠÄ ÖÄ`Æ­eu3€0¥ÔœyäÞ¹¯14b@ZwzÙ·Uaõ¬t÷ñѪeðt½M[l9ÔÆÁƒÎ g}…mÛø–ßÊS¢'G×+u§-¬Oi#æT±ZÍ i`ý¾BÞ$o®«ÞÍQZ P„£ç‘{,྿Û|š=VÈØÕUC̳óÃÕªt†®ãŸ‘§q+M«•«@2Y”š6ÆŠ<£ëêWÕ¯‚SJÛª¹UP{›+V7þåšûþ¬ào:]ÿº@dBðÊŸÞÚ¼ë¾.8‰MÉð„æ|l9Ø1TÇ’cRßñQ’A «L«{þ8'™äÔ(ŠF z†àrØã=æŽöÀ)`Ó݃þÆ•:7MŒÞ ¡tŸUðUOðæÍU/¼~£¾Ð †ôrŒžÚë•ÓÊfÚӦϟ‹2DU“p稖Ðp9U“!¬Vœø4®òCoX¹Ç6ÝæSŒ«Oކ9'Pý‘×Õ‚ÊõzA«¬w#†Q5«- –£ƒÓŽ'·pÙ0´Ìúíã5gBÎËïz¡'æ‰oÛ²ÄÊÅßôZH]xã°ÑLê@ݯïÞ®îxú7MÎ’‡þè¿ó»ÿ²~ bÈÚLgíC vV[,[ËÕ8Ófaÿ€¬1¥1¤‘¾^$L묷k-µ ©g\òÑÀÖIñ‡Oý¦c`¢Í©Ëí fÖ•õ<ÈÚaÚÙÚq'Ì;l*æ˜&‡§莩¢¨Ìå Õ7`HJ3Ÿ´ùµ-âFÓ:ñö¿_W{ Ps<õ1þ¢ƒþßß»;©lâç{" |³?ÊІ•TÀ5¼#»ØÅô¡&Y¢\Þ­0xhižsªDÚô°X ,Ô  i>Á†a?yÒ…MãiínIö’ÉÆ~G¼Ê¼—´Køc‚5£hyòf0 Æ÷®—íÉß«¡Nª?hqð ¨K[  ò,+ÂP[­‹¡.¾ñGp}ÚÅIÑóE Ã5ÛO~r”ª<&¶{2âë‹ÄØó)¬Ì!îÝ/¨­%E>º2a@N‰HbøHubq‘²uj>Ì¥ôºûícsÂ>šf½J¶_ßÖvhtÛçñÂÏŒÁðR^3mº¢á;¾cÒ|ø}ÿH0ÊpOÔ½s܇QXVŽ—C ŒOÜ‹0 cK¤‹€†×!†á-rÂ&æœ::ÇÉ··)ÙáYL'X˜Õ1ªê+±>SÝd°î1h0ƒ¹²èÒó•&U×]¤·Ì)ßäWÎIeˆ…ˆºi =jHJà`Æ ïÝÍ\ׯá!ÿ¶“…r#Â_Û•îÎ`í³˜§!ëéQU¿ÒúÌ·Ž.÷ŽÃ«&3üüG¨•ñÏäP´îµÝe`q—uH²FUCDÝè*I›ÄF-í†MŽ.úÿqv.pM\ùâ?“D”’¶âJ™ðP¨mW”®²Wʤ‚®»øêk{wÁGµ÷®-v»ÿoÓÌеÔnµZC­ÛÚÞݵÖmm¯­ B¬ûÚêZ›ð(ØÉ–LÈdÎÿœ™$$mï=Ÿ’d^ßùs~ç÷;ßÉš †ˆ·aÛõòã‡àWoQŒŠÙab•ŒÆ°ça&[!Ë!)7)«S£+PVÝ)wÎÈ» }×Fr»_Ú ŸVÀ]ñzl>³Ç!õ|ˆÁ#Ž8Ža §§Ø´8£®Q²¨‡Ñ}Å~þ²¿×qíü]Ýô{ß ÷yßïóç:£ÆZŠGˆn•Nß°V¯bYÍ4s‡}#Ùl!šM‡)^`ðã‹(Xý÷½Þ£#VÏ«³õ€Vì…´ ¸ó › bX”ðº‰ñÆv-Ãç¼Ðé?@Šç %È»'}B1bHœo¶3Z²€&AcgA†Ï?œ:oŽL[«}R5 ìî¾üÇ,ksNåÀl±ÃáÄ~ögçþž…¤Óc0ѽ×ßQ"œ?Ààoçì÷q–„ºš¶2Ä8yzèëÍoFF)f`„†ÁuTd¸ }0ÿþ³hµrN·±¦=?Š¿oÒw†öe½\w_Ÿ)ÕßÄiâW’ REµ ð˜o{Ÿþ“Cœ‰óí|Æl 2hÑ's°nfŠ ¥°1›Í3¡AÖ;sÂóŠÅZu®Ë¨(½΂pt+3Äð+AoÒ¥€_¶(tú¤iˆÁÂÄ01”G×Máó…Œl&T*ÏtÊ¡%ó‘ü•zbRz\ãÀaÖÍ𖊵(€ÅéeY.cÜâÛáÝGØ!¶ ‘¡LÐÇèò·LHÐk–¡ò°—[ò°ÿ¯Ÿ¨wOõƒÞNùCLb¼<Œ!jg—h›àýêC*§TV9ÁþûRp7TU—œKH7þÚº°˜›!Ü7Iв]žz̓ÖÐ…â'Y^\RÞoÝ;3€fy*Ê0†¨Ôë üæ€~ìÕÙ‚¿ãÿü¨›©X[~vÂê‚ûÊu¥úbQµû¬†Ã-·ÐË’¬‘âÿº¥PûßœEéj¤[ùâĉ'0!Ê3!ûA\m;ƒôÙí5Þát¶ì]VõÔÀôvÿ1›Ó((P?Tµ¬-ïHX-—ëqc\Cë¦'ÂÄù¦"Å\œÃõÝꟜ¾ø„Ù"18/p.2\ª£ÿÉ2ajÃîuŸ³Ü^:ÙZ×¶{™NéÊüµ…Íu/ÞþY¡h‘áqÁxyhßjã}dÑ¿=Úü<®²4D0¬}…S8°‚ Ê‹i"ƒ9ÀpAý³‘“E†ì·&Ëþ™_E{)U]]ûNÙ1ý#ÿƒ6ïaÈh’Ò„âô¹Þ‰^ÓÏ?þý+RÌ;lëÔ¶¤ð¼¨Ì¬æÌÖi3·0½t¾É¢ÐQÕHæÓÂÈ;«FN–"†{ÛHɺ¯ö¾p z`øœwŠÍÛ_)’ÅòËL´LŽÞ’¹Ïy¡Z“¤uÆrøA•ꥰç¥|±JÙ… S££Ì ø4Ôú¨Cr¸ÃÂÙd†ìšwdK æÖ I c†ZXÄ'˜hSÎ/C®Ÿâ‘›$Xí3X’Òtj@^°¬áÃ??ö¯æQ†°¢!&cÇ ŸfRÕ¢Sâ4¦nú>„ûêQ^0´IsÏ˵ÞÄG3 Ö·ö-³Æ¬õW÷å3Ii@ bÖuvAû[ÔåbBµ¸þè3uì¨@rÐ4ó9MªçÉÌ3'¥êtÇð[ u¼òþÜÛYp “¯Ö¨–’: ¥Ÿn· =lÝ™„äÀ?žÅ œ£®T ¿ÎY?9æ5‘¯ì<Õjó÷BoïËN:’Öc†@ IDATa¨Gwðw1—^¶9‡¨ONç¡§? BÒñ#†s"ƒ1 ¼V/Hd‰ZùHù| i©Tü²>‰Ë1&á8;~†¤£¾µ"ýàð\4.:§wAßS=ë¯.Óš«—žƒö»Ôš²-‹Ó¢Ÿâÿ§áXUÎ},,Þ” ¹ü¾}Ÿ4*¯^Ù½\nOpef´hJ5+N÷}cQoß¹ÖÖ¼V Ô ‹Ó¢^Cp8½'—7á ìbˆ©ñ$­æ !{Ÿ…#˜{ åH–Q7õï^žÑI\Ud´Õ[d+Î\À•«îÇ­·[ç¯Îx/Ò½?ßRÚžhH˜ââëÈ’žÂуt8ƒIt{=¯™Þ7Ls÷Ãçd¬…Ãë…×ëvÇÃã8ÐË:QGøMIˆÁ¥È8Ë´%âÍçÂ…áû¯•† ¶õ‚ÊhXö`?«^Ѥ»G¬ÈЖ5`#³¬šwÅNúŽöÞß”­pøUáéL­ühÕgPC‚® G?sŠp"ûë‘GN»1CØÀÿûL©äÔKÅ\³Ç 3,[áâ³CûÒPx:_C6ëzÂïÍõ©EË6“¾ƒÜ}ðpÌš[!['lªËÿqUÓÉ!¨+áVŠè8P}KœÕ«iÕÞ¯ 0Hiëٶ͹†O’ºQ^ÐÊnÝž+‚GãXŠ cèÕ®¿>1X“ˆµ±±´×ƒÇέâP5]; 10F̰jžw¥0ñJÔZÚ>Uý›ÚSBªÂÐ6mè Ç{™ªÜJ(ÅQR;„L§V‘ï±9*‡JYç} A÷%«ÍÌV_}Üÿ²Ícý$”˜= k4CÍ™\ïmðÞïë6DØpd¨†‚¤ &±f*Œ¡Y0F0¼dhŸ¼©}*eÎižïŸ²ÑèÇ—GÛî*-á¿ÿA7EdŒî°„øb•wÏ>$\(•{W“¿5?ÙJ™Šæ"¬‘ÔlÐØZ´·…ßÈ¿Ü@¬,iÊøœ[YžÐ5#ãé}?|üP—‡wâ6|È¿kvš xæ>80gÆjud`Š/xo[tPbxHî]nL\e~ê4uô¾ƒ¹;òôyÝzÄÇ2œ®Zn »IŸîYb¥òâ¬/¸ÏËtÍXðM1Ë,íHÈ7ËŠž-©9tâ8eÍÿ¡¸é |¡â#Od¨I–sÀ˜×aÎí'3†välŒ‘ÇÈ”ì)ÍF:Äp¾ê·á ×vé=yAÛ¼náó²G\é þ‘XÊ2Åš”×ÁŒ{쌜Tˆä>AKµÍ¡ j¾mD’ÃÚOÿë¶$i#H§¨ žrûÔ‰…sŸÚ¡Õ*d2€´£ væð›Š9/9vø¿®£ ;gѸ Jùá‚·KoưÍÖ¦ ´F-EÈs%†KÞ—CEÒbãíHϨ‘É5{J\! u CX:ŽPø‡¯‘Ž"Y¾²ê–]wf WÞ…'¨;¡‡vÂþšƒ£ i6]Ú <êjü6éãÌ4Äe0EÚ4Ĉü7þZZkóJÄÛ8¾ö×9o9ëU©ÎôÒ÷é׎œI¤’´FÒ•Q÷â?ëûÆ:D惽,ÍÓV°ŒüCzª÷’ÃñÃãð[$t*R‹ù«*JøWªŠ?Pg3K-Ÿ=}ˆöÄì‘y<|?ÜÛ_¥(®¤ì»„²Á,^—¸‰ŸÁ|'Þ¤gC1U•ÅY,u?ÜM¹Ú…y¿xGÙ㽩?”p–*¸K»ˆê\[ý œ}ef˜½¿cç}÷am会•ó æ)ždЄ1àþ6ÏqØO¨ó½~ÌPHÊÙv‡úúݤ+VÈøE( TìÇÛ_ÁÞ­@{„¯ž“©Ž^彇³Ã&&ïçj–²Çb¯¢jhæ"dOÉÙ0†¯~·â@ï;û‹óR[6O¸Ï¨ÓrÎbR_ŸN¹¡îž]‘#œ!"9ûvü­~½ ŽËÄYÿ“ÔøX°P <ÜñÒ7 Õ>Úµ](ÉâŠw"=Ðå#ôz”ábñ…Ô×ÿ‘²ôßRëõÞ÷„‘†JA¸fýáCÛÐ9áøìŸMŠ`ø¡ÏèÕûªöÔ§S©mÆb•07‰z[Ť)%hS?Þw´¢¡_=ª¢< Ó¦Mc·ÊóÂì[/¤fíÎ×å¥j6*4Ñó>£Ã-tÿÞwµ!{Ó_‡ÞÓ6¾¯JUŸnk¤·u!I²E^Íï‹ü>¤ªÐYzZ¯ g8ítZç}qàüú™wÆúÝ‘_ýµ·Þ§ñ&’ ä.*œÁ©j52Š¡e4°ï[ñaäéB{äý<;*Ò“HñZÆ™ooˆP[Cò:ÎËãsIΘW#8šõB#‰òýôuÇ)ÂÌR›×ÂjK:ø/‡Wöxô¨9ýKê *¡jŽìÙЉR9üðêòð諎3Q c>Kþf×îS²ÆHžW²Å÷€8ƒ.ì:›¯‘eTËØCù5úªÉÅØç ÷bü¶W!%8CÐÞ«ËUárè[nÄGì¸zŸš=˜n¤Î*¹O T÷¯žÎÆ*]€êõËtÑm·ŸL+HLOŠ Nœ~ïÛÄPpˆM4<¥PnÀб…ÛåS_×VöîBôŽ6߇»lMBßxë¢çp¥Foå/ÓȲtDètç˜Çü8Cßþ‡w\6’§‡_GOh°…®åýoÞsöåÚ×Ûÿ6sMèpŸºÑ(Kÿ$°Hù&ñOnÊÅí;FŒœƒáô7*¿Û¦ 7lÔàœÂl‚–¾Eù¼‘7w߈!*­÷öÑFÁ*ÕN~„¶mA†£WpC·ãKùÝÎÌæÈkèÑï´‡?÷yHHZÖ«MïÍä€|kâ__rÅ2Å~qFtÈè0†šÒp¥t&üiáªcpCÝÈÝpo}#†^ëO;/±k_ØÙÆ×lò>W°#Õ-¥~õňü­Xò—¬‘›™¹ÖP·ãö¨[D«ö÷k‡û¼f˜¬iI‚B= Ð)žŸÁ^²[¥/zñö/ÿxà þ…y\lAºÁ:ëôY?P~1¢ÌÙÂR±®øFþ±»œÚ4†ÁGG4èïúÝ›°m mžÄ£‹»ÃeÃ}ò‹ lã?þxP¿{ô‹®üÏÀk#Ç©/¼¶W´€/MSp¤)Z?¸Ghäºç¿vLìÛ™àÎ)PÈ€øÉAùQ›á¡)çF¶¾ÿÒîó1úAºÝd7¬å­5W¢¸bÕœÌEéΞ…—8½–VLè•Ö[}^ØnÚ1Z‚:@l/¢üîñõC(ùÅy ¡k|ˆabõÚÕr« "»5w<†°«ZÝäñ]z{ñ˜ˆ˜±ïâ'ṤfÂ/µÇŸ-yOÍØG=Mº ¹µ»ðaÁ<"Ú.‘Ÿ’­ÑwƇnÄ ­Á–Þß©æÓãø]ŠÖ^ÇGp,ñ¼þöœü„„½Ã»©KÜ#æ p+ Û F&Ë€#Ê‘cűêžâ‡åˆRdø®<˜‚ZûË>ñæ´?eLo‡Ä€§’Ÿ„»Þâ3:·nŸÞÈ39¯ÛÕ§èŸ%òw« äÝyJKºüÔ쌳"`n­ -˜a’T7Ð Ï_e#ÇE†þX²'Oœe[j¹íƒòncÜ^rËÚãƒO ë¡—rѽ^TJº(j7o[9Rp¸ž‰ùgÁ­e«ø¿äÁts'bÈ‹#Vg½m6&¿T7fÊÏ0Jûï É¡æV‚b`BÒmÑ[I©¿­¬gé‹âG&–ËYó‘I(ß^esQ-E °h2©.ª+P&í[æ,<ùf}Žì4f€ïå¯OqôTö@U_ÌÖÿÏÛ4ëÒ+-²§˜õ§FõCÜEÙVó4Ä›Ï|Q´{TdOŒ” àbGÖ#†¤ò̇N•.ÓQTGP[&Oæòþ¹^¶”š/™ñTXIÂ7æVϚΆ,{tß ·ä°Š›uþÅÞ¬¢n¹$\ñõ^72…äd` u^ª3›+ÄpþŠmüË ‘{ˆ‡ª0^ù«÷…â)ö=Öví¯¢‡\¥$›ÿÕëO Šjn–‹dJ  îRwŒ_7%S­?¤£ý[ÝWà0í“‚ç“Ð;õ•Lï Ë^´µ‚?Ëàተ³ÏZ£î-ÕMÜ66yŽˆ{úŠ žQV1<¼è|ãØêJÌÐ O:¢þQlñÞCÏžœ4˜í+¸œË/1½ÁãåD@M°qªÿæÏMu“NÕ/%¶Ûvš†Íý°C¸Œ»˜^Ö[>½¤•l)¦3:cN‰b€9·ZèÉÅIWì¿°\úQhýÜbe3ËßÛ—­õyÏ;,/$ók§QþyÂŽc•­Ü Ú‹ž„ ë¿>H1™rJ¶ZÈ:X´9ç[n5nï\8†Á_s_-{+0yöw9ðéQw¬ä¦…ûÝ-ŽZ…‚¯J ø ÁÂdš1-U!q‘F0/†ï[¶þÀ›¶Ã¿¾Pð ý°Ì¨´|–4ego1Þy&æd]4ÃùkÏ L.Oúűá¿y©iYRßöhZôJZÐ3Ø-uµ1$Ñ~¹PµU›Åm«xÅ*4ÝHoPË––üë Õ¸ÖNM9%ZŠ62xyô‘mu¾Ñ-ÊiPaGy!-m@‘5°sUÃÐÇ °þùŽY?d®5®ñN̆ü%åÀÛ±z1X÷¨x8Ǻn+Єo:$@Í7ð Ž)Ú.1LücX •¶ÊKÖ\8o}˱ò èZ PíÃï*æÅÇiùçó=k®æöÌ^^!(§ãìÌÃwðûäì\V¯é&÷ÄñÖ=GÎÁm”&}­È)õ`Þüæép†2 È}jmiÃRÈP=áúA*Z"CÛ„üÅ4Nº0(ï©^žzШZ•lÌ`'6ÞÅoÇ ÁKBÛ¨‡Ó2#—ã‡'o¼"4fÝVÇàÍi»b‘|>lag\snaÃVê›y¸äâ[:=‚R”¤ÈÐ>=qþ»nŸ§³k¹sL ¿h†ÿmº¸ÑëL²$¸•våÆz ÕOÁæ.^ý´ºù^ªS´gLªðoQ;#9G?zPùþch€éäP&÷§p#ýà§°Øð¸râðy#à´üô”Wæû °î‹Äæ jB›ªk¼7U±ï׋Ký9‰¿‚ÄP:ójܘIeþìà‹¹É|5§ü_2p}W­a ÎÏ\((ÔÐ1÷þþÂMž7æil1næè¨xq^yêDšøÇ•ü_üìŸHZkÕ€üx͈f<züÃÒÿ’ŽbÝæ¸ÿ÷ÅC‰›<_‹ñðRÙMÍØˆ½ñ>ÅM¡Oÿ[§ú_’Ïmnxæ.|öIùs7Uv>eò–Ý@?\£­>¥òxÎ×Ð{xœïµ20ι7Ø:õÀcGNI>¯_„p†OÖq)*™LÙ¹¦‰]dˆœ'#Òµµ°{†ƒ][ú‰ðpÆ{b@òÃý÷bœæH¹ÊP‘aÿ*[Ož¸ Þßîû§ApÀÞëØà§àðJÄ ËgT@>¸ ÕUdØî£áqQæÃ.§0>üìiTsqàV¡©šÃÐíÈh†~¬¥Za¨ÃRbø[OŽèwûM?¬µ:’µÝOîm¨MÖZ] âÆnDØŸ0DS­xœÈ>`V78 × œèß‘†æÊDÅä½™~­rï ìÝcš-¬%]%É cWNªr•#%1øí~X7Œ±x ao0‰·PbÙ\XŸ¯Ö*bÇgÖîõ­˜‹ßFYÝspbدž-¬£:W¯²Œ#®MA vW^JÊE ¿úÙR­¹[g=]8›‚þkû*Ïá#94­Ò²YòHbÃt”•{«gŽI¸ÿ>w’”¥§[ÔÄ{¦úÂ̾Ù>N½Ð<Ÿ–Ü:&9N#2œ[ ƒÚ^º1ØkcЧqõë àF¡U2"CLam@}kî˜z´s‰{Wþsƒ½=ˆa6b¨àl¤,û ÉjúÐ×TßDñT—¶Œ#‡d‰aGQ×’,ŠõœŠ1»€Õ^J †—2Àý“FÀá€K2ø³Ú~]¡dôµa2X7xK6XJ¸T%‡~Ù8¨PЃ™{+¸¤ ÙB¸Çøz1ESO(Rµù:³©c~p,I“¿çަ’݇v‚ʳò°Þ»ËB¿å…ø½ìŽ?M%·nÎçä“«çüîð«#UŸ(üê33íÖ6¹6 J OQÊíRPº¸ýY]ˆAìÆ2°mŸåà©Ä!1÷O ìkÞ5ÀÈýÖ)ö«’fóÆê—S?V¦] Èš¼¼ @“˜»èpõHU1Àr°“v¼u/yq1„Ý@ rûÆd¹1˜\du§¾ˆ 1ˆÁ¥$á8I8]´´¶ÎbÐe¸8`Dy±öó ÔlV)#²•`2AÒç=©]*›wíêÐÈñÏÏ åg挨ÏÖá½…×ÄåÅÄ»!/_Îähä ”À¥F^^ bpͶèCW׸ RâŒY×ù>z–XÔ¯]>â{æÄ,s÷ë®îµÄfmÕçm<ªŠ¥F¯¤ñ"ZtBÞª8jkJNŸ—¼J¡Ñ4Ä€ŠàÒ&G+;ÛRšoÆC!u=aÍ»8(]7‹”óÁ'?ÿõtZºHWùI¤ /¨è¸´˜ä0Zb ‚ cV£Œ›pèêµG\Õ#ZZÍí¦4j×Ê >g™ò/hÁ_7•_ΈdH¦ã2pyR5FÌ@BÄ@„1Œßu9^êQ²rVKËê1CqVa<ÿyfé_¥³|sÖïz{RøuD†”¼f!>™FeRdÈCåaA3[ñ#=ÍÑ «6n.œäý'ò(Cy‘cÌÉ,ÍtJ§ÑÑ×1ùò¸´­ Ð Aòü8Ä †j\/$Ï8ƒ7gKîÑz!ÀM'ÝÔ‡@ Ú˜ÄÀ¤ ‡•£ò CÓÅ ªi§¨õ3‚©MŠÎË IDATåò)ˆ»ä‚ŒW7}¼F_"5—£Œ!š‘ÙG0 [Á— 8º$†1³ÂÆO= Ëêìûà÷äË­ð3ª€2T‹BH'ðJc™Ïæ£Ñ NçL¬ôufs/t¥Êí,‡tµZšÙ834{²zïÑ©[i1Ûe™Áò÷PËžwœ8 ë~ ±ñ%¬.ˆ%HÓŒ‚’½óÃïÀÑuC>~ ’uÍ]fS3‡Ú‹&ÄV/èe O›øl²Ñl  ¨àEú«Ýe 2ÔÊçÇîJ£„ÿ4êU?¡`Ê©¥À»lì}šCãlGÓSþäOgHê³rC6©U¶3D$Cyãj“:;ÿðÎY"A7Ü]0åüà]1æ6|Ääu7Óñ¼L»qpÝSǬø»ÞHµ²rŽ„Á8ÌQ >¨>ÿ©AN6¶¶TeŽ2TÑ;v;ߎ¿¤Ö殪œ‚ÞeÑ>èë§Ë¿yæ}~,¹öÈÒ'ÓVTgHÊUŸO6»V Í]AÝ…í¯ Ãï?X/¼<1×o}ÓxxÚ¬±#óÑ ‘}1ªÕ©Ù§µa Õ.Â¥„ÊŽŽ`Xdñ —è(v“ØpÅ=Á:0^Ý;‹**†¿ÆÉV!†ó-ÉbõÔ§`d~)›ºa伬ÈÀŠ Scè,c†×yuC šlpÔÉmÎpuå¼9‘ 2<Î`Èê&(ÇCb¢7ùDq‰`(,!çbŒD]k€¡«[täÊ`»˜U'fØN·Ð{}ó(?üŽ‹•΃´H†8Ì ì0ˆû®rŽ2Ôè( çˆ Pªƒ½ØA¡PDµ%,©?â?ÑöùJ˜9°úU/ù]úÃÈ3î*‘äÙ­êôìÓá „@ª]a ÒCF@x‰ /bÀ[sJó«ÍÀ;Š…ÅTÛRE}[0Óva%œ~lu–·üûuKŸr"o¿LÈBc¡ûbgט3ÛžÑ"0(‚ LCŽ(‡Gn£×žÌ0iù"ÄP”CÞà©å¿fÊ®SOÛZ–Ò{‡VgùÉ×&¸ÑY¢ßèèø æ¥Æä¹ÖœgHU³˜á8 >¾c”Á-møTÁ¼è¹ï |Â'R=Ë?ªR{©Àa­z|Ç l¨ ±R˜:RbÚ‰cÞûîÀ Átv†3|Mº¯ ]Ì0 ÷9¡|ÊxuÓýº@ŒáBöšZ,¬;ŒÁÝVéAªÈ`$˜cg*òâH–nâ(—FŸòTkÏ-[7=[W†´§vïý†ÕͰ$Š)̰vJíCbÆáelã3h$P4&»=YErÃ’.°1.ÍÜ­’¼ù±1zÕI×ãøŒ°[ ¢ãöͽò%ÜñÌšë€ÈÐÌQ æ›0 ¹éT2 8T¨ƒ"ÍܧÈèÉì”É ¨M hÓž#ÒÕ=‹œÙ;ïý£›m¯úV«ä^ž6UO¯˜S鼃òy¡• (ŒC ÕªO^ î ­ºGªRj@Þ)%‚mV›bµº³4Ÿ©šR¯ùeÂ*ßj"ƒ¼ºeåmô 6½ 3PˆŸÕŽ1 cRš›•žbT˜aU Pwß]¥å­ =f˜œ£•°ZyjA¾jΔ†Ä<íªù±¸´ßCOé^çDe2U] «ù´yŒ²ÚNÖ?fÀaZÆa@~0bpI M˜‚[Níbt  –lZ7 ¿öU¾q,ûV;þõù·TMiåi¸Lâ¡ãóí'h÷Ð7bHQ"ƒL!'ì©`+`•¨Ú)îè04³j‘!žR³Íª[“˜!SÌT©’W99á·E0l( ¹ÄÀ蚃;È "û4Êóª©2±»8Ø^Ô6<1°œ¾ªÖA5ðÍ(¤÷üùþŸÓß ÓÐÎ@b9 yJ³*g•›ŸÖï±+_54ÒPoÐ H»’ÏË+Œ ’•^íŠMÖתó*,‡¶¥3HUlª 3ëæ©:û½Å$âïÖéêä ¾Õ­ßÐÉïÜÿŸ­·¦¿/´š¹4³¹!ôf°±ÃÍç( ZeþÜ»êî>»9‹–\jÄ@ÄàªHÞˆˆŽêpUÄÄQýI G­"Æ0|¨øãìßÜXT7©sÅ|Yoýð;_Ìtvß:ñC~Y8ƒ9~†C+õÚ]ùé¤Ê´ÙžEãÖŽâH!?AÜlËæm¤ìj†Uw°ãS(±(÷ùl ž•å¯ Æ4;3ñÔf°±!>SV¤žä"|C´îÝû¿HŸ/ 04q«Ìêæ¸œ CM>a–˜•›µ»Rv$µ CxòrŽvQ82Ë© çHõâ€XÜBÅwuÛíR4_°ŽðåNXÍv©Q›ÅBI Âg<ûÞƒé‡lªÝ†µTÄý#6†Ý¨. `¿[{Ô%†Ñ½jœãÖÍjN®†.ÐaŽiV„¶Æ!ÕF©îm`áGý¬>@ðÂznÓ´ÌÇxTóð^$¯j4Š>¯×9@S¢o$ l´I¯æ”jȬR&ˆlM.D:*ToUéÅy¬nÛèC~Œ¡pÆåР2¨]%ÁöBEo€¾^^™MEúÜ—ô‡J(¶k°âW¬æ'g•@Yš‘žLF:ʃu”ž v¿ ;ýþÃ"gÔP: &²\ÁzÑ4“Vq @¥/dãgu[æ?ppŽô^_RæÊÞamwÂV´"/“SnUWƒæøRÛö¼|‚×Ù*²MÜ)þÄt¼âø1†_!9àNeÈê2ØgÒÙޘ̪ͅ?¯ìž¹ï×f±Âë½×Kë¾› l&gàjR”z-„SùÈål5›X—Á@økm:ÄPäM˜¹¾­ìƒ7G€}´ÍOÇÐ1M{+T¼ÒÒ“Ù© ¯&sÏæÂ¡Ÿ—}spßms³  n¾^jíœIØLãÞJ4ðœ@Šo·‚lFd(iS^|Ð0ff@Dr}Ä9g ·iOP_ùWxOû楴øC/Ô;»î¬§8ئJO”(‡˜”<ƒ¸È/¢ð[dz«Ç«›cù²ÒÊ#„}Ø+~6îÂ5ãQ(A\…~vkŠÆA ú§¯ 8\zu€ÁÅ•u>÷ø ã%–¼á!}Øk‰ ¤¸„EˆO|>>–5hód9éDZ› Ï‘ìI÷®^ø êE¹C÷/ñ‰vSd߆§ý]‚e¯¯ C¿ãïvµÈ0ƒ 1,Yô29ÓçÈJcÏTàΉ¡¤¾±tzÝ®þŒ$RÙ½Ä#£kŸìxd>íóí¸a¯e ñ‹Z Ð9BQN3ªÔëéˆãveAÌ ÇC“µÉ E;”¦ZËO 2(ëÕN·.è·—OêVøþd¡Ÿ+¿ ¿¾|bÉ÷º[ŒQ°“g»,ƒeEQ¥Öë#eÔl–hiPÐ?0ðwhõ`IšÝ•ÔW•-‡jÖ.‹¢lR÷Âgfúåò “®/U~?Pz£!/•àÔÕ-.¿Î•C€á¼6¡:Y¯ÿô»x^tk¥¾ ÈvflÝÊÇ6À7§­‡Sp}+Áå1gbˆCþa×AäÚ`†&äðÉùÆ©uGpœR€z~­!X7›`¹ß&6x¨åvCß<œeÏÒA§3ô mxÆw‚‚IÁàŒÂ¥~q&„€ “àìØƒù1HWÕ`%ã úT 5¿g3k4„ S¶¡V‹Æ -wV7áÞû ·ìëö­qýåq1XYš—2¶²Nå|ß ÒS[ÿ ¾; ùKî¿c‰ñn~_¶»Gp8†iÖ@Õ$/Pä0[0ôöFø¼ñ;fP0Ê”väûò !Èp®h鳃 ]y6[ÛNT_ݲòÙûކ??ºütF–ygå¾'ÓMÓaAöªrÿ%Çß!·Šdð Zõ)á´qFiYû®g‹ËXý"ÞîFƒHPˆëf…BÃÄ †TûD-¨¶[4œ‚¶›M2á•ÁØ‚‹åw°µ®‰¶êï¶Üÿì­ÅÓ@½]¶z3føfgååùûÜÃû®æ´­!ý—îzrO’×kùÌpÁXH”·'f¦•°(/À{ùÕä †‚”˜¡©FcÚJâl dÿ5áx°L¾¸òÙ¿ ˜òÏ"Â¥µf}GL0LP1±í1s1Ü4\ Oœ¦‡öï¥ßþÏ54ßÜ·òiål_ŒáÑEeM‰=è}ŽÄÐdrÄ@4×hÌUˆú,jähÝu‡=m e[==CáG¥9Üž›àø«Ãÿ -8Ño¨pM÷<^ynšñP%«×*’å˜]†T‘AÞÌh̨ý:{Ã[…õÅôX†Ñ)i?¡Ýì ð’3ü»¶)(3+1œ’”ˆA‰Úñ6 1¡„ÍŒ’g‰+¢Ò±4úÿXÐQ£A Õ,-1Ä“¨xòÊ ÌÐÿ$3":x#ÚÕ¥ÛfPŒ÷ÏîvAý™gšà 9’LBûÑDd •ÐçˆèéÇ 9 SÍõCs<Ù`0#†³ h#fP”GÈ¡ l#FH¨/kÒ4EÔ Ëú›3çÂúî_N?—ѣ9ÏÆ?0óÉéç‹—ìŠ` \Š] 03*CuL|ˆÁEÃót^Zè*VG1üKŽ4õ%ß Ó5¥'ZdôÕÆXêú;KŸ0²í/+ùMßÃÚÃåÞ-/ýÛt¾™Ä=‡î£ïËã%¿ä_PE2ÈYEÒ“f`0ÒQ”K¡1¹‚¹¾õކk–dGÖhê•v£B##Z}­13d×ñ+¼oü¥˜/ùÆ2å[&ÍTð‹­õ­ËÝßþ¼MQSDð÷Õá ÉÆçmTfS€¡š©â4öCx Ô ÛÖüüN˜ ùurû „§/Ù®#9Xù_ÍÿËŸ°¦î)ïÛ2ÿç5|©u§¹cyå·3Îo-Jß°oÌ}½êÖÖVŸ×£ö¢ÙŽÛ,ŠMA ã-Ä»&È¥ºjÿ}ÿÚn»×ÿà÷ðö+egßÙ•®àЬUÖŽÂYß&.þÍ–¢´qÇV}ávw‡»Õ\Álfà©Ðr‘p†ˆùçÑãYÎÀ_é¶äP§pÝzÿºß*ç>2{\v|G9éobÂÓ4œ<²Š;…Kãþi݆Þ£‡6G¹…PŸ¹Þt< "ŒÏ@Þ“MÐdXRb6jvæãe–C¬=÷“šéÁ bÌ9r©@p{¸žgm >Û˜ûŽÏ@ÝÁ+û1Ü25&_E× †ú!Ýô †œÛê.¦ó%‡èõüÒÆõÎàsÅP’8šòµ^)ˆ\÷a1ÇEÀïN”jäµ) hAŽæÅÉš'5&E`üöÝÛÒù=ÅÔŸx`Q^Py>G ›ÈÚxuA y …ù§r3–œœSr©û¦ÃÿâÖÚ×Þ’›RÀF˜%„2¢Í:îù&p}îmÎ&ÌPAx]ã”ËC?ì|ç‡Á¹åΓ«“&qu¶ÚdèŸD‹Aa¾ÇPóÛbîâ–²©@9©»dü§‡¦–6á³¥Ž|õÇÇØÕR• ¤=h„Æwë.5®øí ìwåeÍø}iîìÈ+Ù+Ÿ½[Wðâ©’?¿²B­)^˱©L©í¾¹ç„˜;¤=`‚Ibh’F¸Øñ®ðÒÁÿínqùú-s¥ V®Ìœ–]Ìo(>‰.0 ÜÂì‚9K.ØRu%µì¬e».9à["ÎQ†³Ô3'¯Á>q<†ÏÓ•×Wü›Â÷qùƒÍ£ÒbPš²ÿßЂ>}eÁh°ýÈã%2×ÅÄzS¿' þÜn 1ÐO¦O½º±”8óú•½4_ÂwbY…÷ë!¡<ô”H¥ù¹;×ò³º vR~–¶ol!äïm¯ÇÅoˆnznŒvÁ @Çæ+tF] Àƒƒƒ®Hùˆ¸úÇØÜ¶I–Z®ÎŸè=¤ý*ütÝ ƒ)ò.Yùéàý$ôxi\MD¤ùø½íö£kè—[¦K"Â'œ}‘q© Ùüš¥˜Áb¨z‚H!ׯØÜ–ImÛIX‘?“û‹A§õU}Z¢ß$ú­?ŸÕ™°d×+¼™ç¬Ð‰T'ÿASƒßBÃÍÝÚ¬þQtÒôg_<ݱǾ9€ßkS@DÝ<Ù²¨›mÏè^ÓfšÒYÂP¡U}Jlµâ ‚/yñû¼Œª×+èÛ»AAôý`íœ0QÓ(Ȳ'Äòå˜ýxWF#˲g=ùN¶V]czû¹C‹÷Ö=ýR»IÛ|ÿt>“/[¤S7=x>´Òy·Âu*VöÚâKH/â½î¯*rñ0ôÎòBWŽnFåÄÿq>Gå=jXÅÁþ‡îC¿Â&¥rB*-³‹dˆ† 2HÔ}¶;"Žöóæ··Õ]-~Èomû¸\úÑ*Ò fÛ•Y‘± .ûÄŒ´A*¶––àÀü·áô Ý#عÙú¨Èüì9ÊåÝrØìÚ=™'/šTF*î n!i9}왇ïö~³ë¢ZHê¡áÞ¼ub`T ÖE&3~¾$xO¼Þý\ÝEî畎¡Ï Ü>†ÁŠ—/¤e'°n8Úmâ÷<kvÕïö[/î(P‡—qK­ëµDag7]Q ‰sអՕ¦ã¢Í å…ï/Jæ1¯S¯íu j†+.éb´uíN<µÇEÜ%-\¼N#9Údð7—qà”òèr×ÝÀï9Tk¾^³Û_öéT•@¥rKmª é«eq5¦¯#‡&ô$"‰5 O‡Ö Ry±\žn;ŠCKIëH7·;±`k{&œ®ôÈà’OlöÇ„…Ñ äãjÍžsý¤¥½T µ¿â4V Y·J—ËÆ™¾š&‰ “ )$D·V”?-Cšæ’å\ÝEwÉG;1Cä3ü°°\dÐ5Yí«]å K N¬ŸóTÂ<®æØ×>!àh˜:3EШo®xZüòÖeJÄÎI6;tnŽ„?Á†ÂÙÍb-óÞ-@·„QòÅ?ÂLc.;½Tu¨©°å1S9RׯYÑ‘k¡•Àø›Ô“KG^ì½^©+` "Õ \Ô¨¨wabw_pYp è&M‡ë¸´ì}0}iv€lÒuCaæsðæ—àëXÙFã„äÀSLfd 9ÝßZo*‡VÄpjü¤Ñ:îœ$d‚×»FlÔ¼i«Èºfjèë~*è_ÛQ6/šÒrhâ(eš‡ìÜ$x£¼à^Ò=;dC~+¾(jk"èÿóI›ùH›âa0ÁÍÛÛ`‹19bPÌ|šžÊ·,Ÿ>¸£¸àî°¹¢Lh¥ÞyíØ¼®\xL4ШM-k\İ€[zrmækÊ«ˆ‹Sk$bØ;É.ï0,þér ¨Gò}ü[3bhbÌí+[VrL¥o 5ÚÎù¬>[îl¢|Çg›8¦¥ Í»g·Èð§3”WÅ[„¾ëœ”/gÙÓ\ú¶¬ŸÆ°?°H¼™c„û‡w|Ö=RÝW›ÕX\ÌJ1؆h( ôؤ‹šQý ì¡qe˜ÞÌ-·å¤Ï˜Ò5Ý*Çy;6»"ÃWANEÃÈÅgÈ÷åPZ«%QK^œ7¼pƒU:2þŠ ¤ .–ûð¦ŠÞz[âùi ‚¸v¾•3À(œús €ºñ­çÔµƒ¯v«Šm?bÝ]*ófÿ- ëp;tˆ!Íh‰á©€—’ A µoßÌ}*äjÝ<],ÈnÔ–\oƒÌŒ_ÇOcà£vex‡ûQ1Å›fqà·¾×úò±ÇÕ¦sOé}_öO8or·ÏÊXmãt%_÷7ê €ù§3"ƒá,fhHòiK×!éj£¹­DÉÛFOï©ZüâMîvq 0ԼŽ¿Ê^  1Ü Ä-ýùʘ¢Õë©.3¯+†)É›\‡¾SѼD·Ý=§O¹ Ã×°ÏÞTCpmJÔ|§æ„ìqî²ùFW}eˆÓæäPMf>O‡¿7dð9YH^˜¡ß‰%µ@»å2øÝNß3^¯Õ/øV3 Y“àÇ/ ƒ/.ª¦Pðj*Ä Ph5š1 "ƒX/p0=R8KûW÷m\YjÍÜAgÍÇf(ÿ¸ n7>k-áÞó¸Ò(¿ŒâJ<›û’P0!ÉZ‰§’ åïÓ·ýò8@C ‡ƒMH+ö+[Òåhi’ axÝ”²°ÿµ4R1›´ÿ–CéJ£ûÚÓþ¿ßÿÌ@ØÔ¯°t©&… † Ã|~mggŠö¤¸xCbðqAô›ôb|qº<ªÌ0OÈòKjÙdX»4O'£´àÿ=V°´fBzoðÁ+l¡ŽÕ6æß‹À@¤¶<¦“@kÂjq+>Œ!8¥Äb¿A± %T‰ Ÿì9ñ8ä.̲ xžÝ¿ÔPœ} [”ÐYùàxA/àEÆp}ºÊ@v¯]¡Á{ª‹ña8¥u”ÁΠ 0¤ f°ˆ Ðw¬Ìf¦Q—˜b·(º˵ùjÓ½½‘ãcsã¢Â2U† ²Þk/Þ‚µ¿¸¾+~/TŠ Ý(å î1 0èéDf`D†=“bŠáGˆAH†kW³#RÏ:š-êudäDýê¤1gÆÃZe §Ì(%—Mñy¬‡ùÊ@ Á“ÓÇð뱎ìÉkI' ª2¨L 0PXkVN&Ú”ûP†B;E×Þ݋ޜý×Å]þ’²ØÌ„t*ƒ~u¸Ì¬7YB  §ïMyeA†ü “5ˆ´ ÌÔЕF¥²C”C‹Œ¨§±ĺyéÄ´Ç­-_¾&¤§Qµó‹ûw% §%HC UÚ+!»ÍBp`FÖõ´-ÕH ¥ŠÆ¬Îtcñ2VÕ0§Ì9&{ÄzÁæË#JÄæ›Ü.‚IFŽO/ôد/^M$ ºÉ©Bú¿s jö',åï7ÑZ¼8vY d_RÉ9¾æú&ŽbhA¥9XÒ™Y°òAÜ“þÑ¥©´zÝKp¬÷ 2Œ@ 1˜¬†v‚ÉA @uYTVkfC1¨à8mw“Ž_fÔQ«fZt¬(ƒƒ/1»¸äÜ,ïkfPH©@UIç\ãÊ/Y"'}Â% w)fg”î¢ÚöqSA†™ZY­Œ‰‹K¶VB‹âET7“gæV.%J{6…oÌÁ:~2’Cì6«ÌŒƤO ì¢è¾¾ûhºò²LÞ©CEïÊË4ÊP™ŒÁ ŠÔ¸”dÒ«›L®İÑbð~„û ñëóŸ„]žÆÊ߽ƻw.Õ¯—Áã8@—u†&Ûl#Ž.b|÷ÓüãÜ#Ë@ «té¤=ƒO%ŽŒb`\b`iE Ö”"k¹¿%ɇÌs_;U`Ôœÿ!±KׇZâ:ê IDAT¬œ^\Y²¤B¦4®ü!Ë¥#]ú»Ö( ÊŠH{fàh¥ 3X#_ 1xçb†%DÐA¶ºGLÝÂ3¼«-€\£À vPÝäÒŠr0*E74š¡;Ë÷þ ª×NjA¢/•Žd¨ú•vߘ;:z¢æä¢κóµ$ªzÞ¼¡d¾õR8²ZS,€5ƒfp;±G qy  ‰a¬¿¼zßüOøJ_‹,ÂÅ,ŽÙî«'^¼JëèÒdÛêØÛé×–•ô€|ð%çâReKµ›$1ØåJ¥ÈÀâ}ßPqEõ1ÄÓ7õ»qêû汈ÜèdbgÄr  ¤}×RFp¶&İb bP\¬PMU{)âOë®AAMÔ€¯v!3pÀE€ëÔ^༈fðÛ"¾÷k*"ú·ŸÜÎ÷K1XPòvñ¶Ë1Ÿ_LË`¯¼¸úš¥dZma=ÌbéQ›–æZëÌöø”’,ÁèE=‰Úî¨ Œ8ùëm itÏ_O9éÉÇ+/¥7u7U¥ebÌÂÎÓ8vµ’[cç•°ùHŒ½½÷«:¿ÕáZØ>>=×íǧ‘,(ÇŠÒŹÚöI,µ4ªÃûæ¶=®ÔãÌâwWÿ ó«ëÚ'3©•ÅÑJÉç†4Oâ"»Åqnî#”бpD:ìÄÁ>Ú£mTÔIJ?Ñ¿ˆf¨—_×ñêºsËA…ŠZùP´¼‡j×üÞ0‡Ù’¾¬üÊ>~-#ñ úmHGÙ½¡w´z[#è=Ôx¶øè÷[ûihmí^ú\Ž–R»‘’ò†8Ðh*÷6#†_X&¤ß_®)ùÜ0™ÖU/º)[t‰BÓ–M£qr¢Õ]ƒCœk)zz,ôÖM'rÁæ>áæåð: zûx½‘P#†øg`E–•¿åüÂp¥3&¿xUaÓ^¤Ö»ê§ A¯Þ ʼn9ƒ8À{c9Ôq¸¯RœÒÀÕn¸ÊÊÖ„M¯ìxÛƒ×ÿZ³ÞÛeõÀs5-ó|ðÝ2;½ÂÃI.`—.¬w–’w AŒ.å£&ÅÛqã—̰^ ·ÁâýÓ ä3à}»á£$§y6e–l+ׇӇßÅo…M¶Û~}‰ÊêÖ™X(ïœL¾"$Ø*—ÅM”4ê-úRhr§1”Hý ˜¡zø%Û½s¿zã*…µ”ë­7¡}ÉE1Œ—.ÍÚÒ‘ljqÊÏL€×p{Æ€eÅu Ç©äðÌ— obcù SIÓP…NîM ÜðÿÙà0lžn…ïùJìÐù%QI½CHpÁhó>I6¶]=­»ðdÖ<l»yOþC3ìò䀶Lµš|ÄCÕÞû©ÈºIÃá9Çõ_ ý´¾Õ ùy½5Vl@XÂPžÑüñüÖÞ¾‰*]ü?“¤$…J’¶.° “¾H+º—Bë;)T[غß÷ºû+" ºº‚zïZ®13¡Õ¦XiKq·2]pqwQYÅ]‘I¡Ú¢``ÕµÈKÒ[\N 2™ó?g&ïM {?ÿóÑ’Læå;Ï9ç9Ïs^ž|ÿ¦.l?èIjl†ã[²=²œ‚,¡F,I¡ê…›²ñrÄøE…®ñ!Þÿ=€N¯—¨RË2sÛ£½wöwI:†ÍsIwHESÈŽ }óã&* ƒƒISë=|¶Ê`•+ÊŠHÝ„çYCÁ©Ê/r)xѳ1¼úKÌð²D-¶äÎo{Ôý¨HºþõÚã ––‰°Æw]ä©ùagò‰¼ÜEšVäp†X5ÃhæëywAödCœ]-WÓóåj1¶P_-+;»Ê½ëï`yBºóWå´ê§eg:úâå[S¿ 4Ú:)Õ5Tψ0ߤ+š§­ÕCµ¤=XV­|<­fì¥ó)¡·`‰m0¦÷çl‰ú2aN§¾•çÊ΄§ñmå7œùî.÷þ ^è’ªï*ÎC ŒA_'4-.ר?Ë¢I›\„œ¨F:_Í÷4 Ðk  )ž°®“–æc9ˆpÑæàNÐ¥<ÛžŠæP_#†Ê3#c;FDj« ²†oYzÀµvxr/ÝÕ@˰´Gx 3€¥Ð!!‚Õà`b˜l/]€Œ›"y7Û \Äd vîeÿA÷¶=”0¸0ˆª›ôœý…€~]€Ø%ö qÖtE Ó o ÈkVBåA3,%0ƒ[a˜l‚€¥ ] OgM¶›ËHIÍ÷ªe†|"KÐQõþ…ƒ7"†+㳺áÙ’IƒdšÓBÙ›àÂ\¶½éî–Â@Õí0€cVI ªT©›bp+ <ÌbŠ –>âF 'e†F)‡Ÿ¯׋à:êåà½ÁîTAõª•QÃñþkÇð-RþM´ÚŸÕB½¸ãØO :&dzØH1â³Tz/¾€áL é(ä_¸ m”Ù’aàKÜn=<ùHˆ¡`™:¾n¢Ïm! ¿ŸÝ8»°‚ýígþ ô­÷ZÉ”o¥Su° óSϽ¨õ‰Ë÷I ¶v¶“¶¹¸ŸŽèjžpCmMr†-*“euR6fŒ°ÏÖ’ö¤TÎ6'—?$˜è³\ ͽ nÁ¿¯ ¿6˜l9ž{#õ·¥p¼¶ªjB·*ÒfiÈ÷`ˆ`u˜'°›ïÒ»MÙ&¹Lnž!q\´GUÒüìÁ3)•·Ì8À-ÿÅeÓhC®^Ti—øs¿Æ @fP©ÌL¤nÊ ¼3`‡ß½Ô,É ¦0c7—ê«—™äº¹.Ûò ;Øt!+Y •“×6jæ˜XÍ/…tz9±¸^XûK*­C¯ùM¦°ß ™4ò  ÖªC À,iÃõ‚×ÃîÕ{G)ég݆v™Ä\.aƒ”qö’¼PÑâð¿É¦ê‡§ÃJÐé²Äßᄜjçt[ÉAQ‹å ¼=…a5b(xÒä2\{Â÷\g²´±¹¶‰Ê –,øWâ3/ý2¶U„)é§>pž_”è<[]EQMª˜…1v5‰,Ò:ëJÐŽÜ…@ðyÏSÒ×K‡&Hd:aÔ–ÈÐ»í¡Ø=÷¤LðPfU¸3ÛšÇÿéw ®ôxü#ü R™U¬‡HH¨* ôß?ô/:¯>NÁOþqu TøSÏH†µ¹°¶²¿Ëþæ£ýÒ n(!/®\#ŽŒ¾ßÁèiÛòS°¡òû¿öƽ¼õXÆ•N¿\EAÉ:)`“0\ù™\ü×àÛOÝÍýI{ö³×ھ䭎èÄómá '¬Dÿ,ÉèÌ/—Ó-sNPIf[]¸$Ç‚z)¸nÛA·uêÈñ³ÃC~u÷ KÃ+×–5ÖÃ÷ß+¬¥Áø\ ˜Ž’Í.žNP§W#vÌ_}²ÇO„GÊÖÝYŽ\¨úëÔí,N_b:uÝMTöŒòEÈçã5#ƒÈ“ é`ð*Çyå¡z¹ß¢&ù Yp¸Òu ©`ö8wq¢wÉô´TÚ÷=tî–ê&A“Èà®(Ò^8ÍIÝ6¸ŠÈ!¡‘óõrUÇö’Æ§Ê c%é«ûã¾wãT¥+Q“u †/¬· ¾D†³!† l¨öQÑl Bñð+Ÿ`²NR±©¤û¿Ž;üíÂÇ7À?zB|™ìwLN½Í Ó¾X1eð¥H\MN«+>¥úhç¥âíjüJCrMÁ•—҆|Né‹Ïƒì!6x<ÃóúG_Ó±Wt:B_/KéÍ—ižu%0¸Ù&5Í;=íHî¦7_‹,já´À´º”nghƆ|q†£¸³ñ(Áïœm­{”ÎllìjAÿmc÷»ê@JJÿã—°õ¢)1œÁƒÄº É#'Zá)­ÖnZ1Ò%-³ÚTJ3ˆ¡3¸7n†_*K±H¥Î£ø]š\K‰lðŸ9ºû\Sưþ[òĵÿÚD†£šÀÚÿ#´z˜HÂÀE?Æd±¤n°fw@»fÌ™…4æ8º5ìßLIù®ãjÞr-µ2ƒ;¥î,3ůÿŒ=µiL ±O)”€$xÂSeðûNn¶ÒØ?N¼3ä4¬Îq@n˜Î|•ÕÐý/“Âøæ¬çq¦~æ-–>¼›ä6¡„ÎÅݱþ ]/^Me”aoÅæ›Yl̂𓑠KCZ½^m@ ]l†-@w=-îÚ{=úó䤨d‘—;Áº¢ÃHK®HÝô·tœ˜‡æd!×`#>£kOgÅ1DúŠ¥W(ÁÞb¾”22ætIÎ/7ÒìÜñ×Ê–yRðùÐÊa‡²7‰¿ÉÑ™†ž¹éYôøªC@”õÉéÙ ós´Â@Ç×ÍÀhsŠb —ÜĪf²¥vÃÊK“Ã|•¿¦¢ñ“…ÁMr¸Šp^´tuÎã陉…èñibí„~kÎÏ_nõ³ßô.89»á.ÄÐF7ä`†Á£P¢F|‡’°ÜŠò¢3X³Ú”Ü}àà‚“ a©IE1ˆa5b7Ýɽ?GÐóYe¼NB™w3¹qÁ…ìë3 óþÊY_Ú¦=#þ¨„¾ýæê„Ò¡ôW?¸nÇe³XÖ®LbÓâ: ó¤ïp}ÄVÓÉꆥwQí ´MÀ{uÜɶ½RÐ †ñxöa׬ödf3°45¯t‹ã$‡»>§n7¤R!<)»Çcö0í7¬ݖôaºîêõ«‹©¾Ó°S°ßý 8þ\°r˜¨äU˜a/’w ïŽRTOø/&œß³·ÿFúï·Ã]ÇçJ~(À@”D‰Õ3(—lV²B &t県ù·ákpÕåsRVò—ˆ$É”ÃëDSêúQêø»ï¹º³Áš®áµ‹ƒMÞïñBš0Ãww ‹Kd% 9DV¸†—é¨ÖvÅ3\)nŒ(8y°I2­äU&™ÕÄÙ `Iwv…ŸáƒÖšBd-mïõùÌBå¥y_ ¶>õ~à{Õ4…ÁŸÀàOÆ@ûCë*ñ ŽöxQ¹ :…yþÿ]eÍÊã‘íj ªûî,9®ªð.˜îy&·@g= ÈóĤ˜¦-/n,î8ø•4¿Àûý¢zŸãQõÏ_Qk.®úÈÿÄ ôòC~j\©øJ#_æx‹ê}œë¹'·¶6@2õÁsâò·³­€lDÉñìrAǰ:×JĬïnh]¨7JG뚤ùMÞÌ›}7ÞÃ~•9ó­‹ÙºŸ$Ê\2ë,öº ÚoåõïäzÌ¥ãá:}À¶Xõ­œÀr ¼ÿþ—øÃˆ^‹.GÓ‰ŒM'5{èèÇ%¥"ë쯧ò.Ð8?ºÓÍsr„w8?tBúÛ÷Í]k/ßøÀ`™&}âdO_a½ž´d±•¬;(õ…¼KËߣ»3u ñÆ`("sŠï>º;jÃÈý•®­ƒÉ"x¹˜LsY‡%§°Ïhñ*G$ã~tóèõ!³UhõµìÊë6”«2Ü·™ÁšJÓtY4pÚÃ) GÞpD:Ĥ˜ë:,Ër¼~Æ ÖÄï©=Ðý›éá]-0m~»­–Jd§ÛN©y­Û±kÇ·÷”§g¸×ÝšÊüéh ÉÁ1?Õ¸X|CèÖT$cH”ƒØe6—9Cf8p¶=?îgG )ŠÓ_yCGY0¼2÷Pïýü& 6û}ᨾÀQß¹{F}Ô¥OáèDì¿Éøã]Ü5úBµCœÂµH«ºëln³aiMnÆobä48bT8õœÚSHuÁñyxRþt·¬1ýÓ®¸’Waø ÷Šþ1^L-1JeÝ5p—6™Ö0³VâU­ ºpxO µå Ú“'¹•¥Á8‰ŒšKõ°-²N5œB  ÿò;Tƒ¾¨ÔÁñ%)’±;¯Þ}7s›iÃ\Ú˜(‡Ñ“ç•Ùÿ NAûr0ÀˆÉª E²Î0 xtû/Áv jô|Gd¥ïùSãóÄ· „„ëæù´¯ž6™UàPˆ†¸c܇ª K"j*8rPÊ÷Ç·îa#¹“’¾ êQw-\…äÚ.ž›úȦþÛa|`ÑþâCÆ­+…ëGDÞñýù*ì·«M®X¦†/î7üW=?ïÁPl^6;ä5³?¢ÿÿyhÚç¡nÕ‘ 0†áðýMŸÕ_(Æ ‹ýºÍP*—)š˜·†uSÖÑ“”™š IO 9%Ú]¼@âãU…¡ï–÷ʳ<ÅÈ7+.õë&$Ü[6†|¦Žn?Éþ› ÆÿZ ?—hÊÝôæ®a]Z7K •.¯ÝÚ[/†”ìùUp_b™,Á‡¿£(ëݙɡÕc§ 1 ™S'ÃC⒴ųÎ.¡—h]¼Ý ¨ln^F7ùØäusÃÝw. ü“¾¯Ì½+óÔÃeôð7x¯.ùg†3ÙâuA©‰ÝõÕw‚sKÍ?ן!è{~åòÚ õé”®ò(òˆ'›âúÄ‚8v`R†ãŸ †/éûôμ§Õ~½à ¸ ©ÅþÁÑ&]ñWˆÊ"šØtêì/Ï-¡ ­ËÃhl˜á«› ”.Ò/ç~ oâyIfp^~>‘Ávçñ4°ÂWm˜!!¹ÇØÍ ážeUO"Ûž*·‡ç‘z²K« ²´m…dý†© Wp¼7N¸u¤FþæˆÝJ8¡U‰ÞLZa5›C g²kçjϨf1ÙU ýá‘ä#“$3¨Gcˆ3iáTÑéÃ65žãKÓ­/@ø2'Ç—¡cbœYV±f±)ï,˜Å,­R©Yùjïiù6ü:¹  +_űS(Í„ u›("gîOÅÿ¡©Ö´2H|¦ÏXa$/`ðáwoXVg˪²Oxئ´gÞ-²Áâ…UCƒðó€ßåßøšò#/3L¦’2 _4aéI UÐö¦Q*RÅÚØ¢…:rX£ë: Å<6Ìe»üÖÓ*û*lpÆ™ÿÌ;›íúöe<ÖôcW ƒaT†H©”/ëzM Ã-t‰ðb¤p³JHÑ„·¨Oªìëe½Âà϶ӞÉv"êí¦ñ ƒ[ Ä \Vâù`F6(‘²h£ßv bðß<^—R…"úAÂ"q!=‰ú¸Ì–¢§ûêôþÔÎ/V]WL Ù­?štÁáú/U¼Æ]‘AHú®CºÅÀ—É  ™“D¦6Ü_=$–ž‚w-m`ëáX°µdµ«µQóÒÏÒ¦‘í®¨ŒÂ…NÆàŽl²ÄÚcÃD/§LADG¹­_YJ­ãMö(ù.iû¨®I•³ÉH êMs¦UÔ³±wˆ0€1ä ü¤‹¨X/<%âÅcxÖ#:}K¬6ˆ2Å»,ŸÍ4pMÔ_IÇÔÆ¦ìÙSŒ¤¸€PMÓ…,ÎK;Q 1IB¿)…Ò%©ÊíMÒÊþë8± wá·NÐ#Ûï@L¸–Ãý¢ÙZ4l3µ‘´›{‹0ãÓçN«®Çu“–g¤ô[çr_ÝíÂ׉£íjý «Jh0uÑLƒ4‹×QŒAlŸ£oqht:Ѽ‰L¿ÑùŠ0C€†¢ZÀ»Ñø¸×­&bXY3·ÉA¸äzަNÿ¶X×Ák rÅÆ`ýFˆÍo"SDÊ.·¤<ÌàP¥´8ƒ|ÑlЀ͈·ŸI^7][ ²lFVZY3nEZùíÌ—ïD ¥À²Ž~%“Ãçð œé£2„î,ÑþÏ[¥¼~†e€8nÑjF? æÚÊôE©¥‚™ï¡Cý¹8ð³. :!'Q—w½{7Mž~²2×’MÿG)ŒTͤíc˜Ž;êçwK…éÚ-'§LT-Ò!†ûa“ß©!‰„Ôûá[Õ±ó4%ó…;‡ šé‰ ói" ‰c,ò+<ÿÀÔÿ÷e(P|täüŒyÍž¥¹yc°áðÕÄ–3$s‘¿Q C¼8à‰H,'èüø¶|T?d†KÙ])ýšÅšî»PmjNô/â”÷b@R'c˜ʱz ,„× ÁýTLïágRú—/5î¿ðü Þ èâ*T!Ý{ñf…ÏùÎ0%›NÍÙ‹×#ö‡|ËÄcž÷¨ö,¹PÝfðã¡ãûÌ%îPÐåi&½J£FH¦¤˜(ÊVi\ü¯Ý9=  u˜Ò©:IÝ BOï²0­3²Ú°{½EÒü×çðý¬ç¡u2R„!‰‚›"xsVºÓKÃÒÌ­ÀDö’IõC À¢¿[á¥X+PÜõV¡¤ùq¡“¿Ÿóü\f# #+§Âg5'Õã¨Lj;Ò @9}‰<©›TÀx›Æ‹ ]0ÀÉ v'ô‡NîÚ¹þǯ?bý~ÊóÂy.Žadå<-ŸWQbO«kúžï­Êú“jzºi’#ÂP¬+ó¶Ýeý‰0§l¥Gõ|ÝÚßÒö‰ÅÕ/Â=ˆ+øÙÛ±¯Iè*LV99Lyè}ÉNE?î_ÝÙDã±ô¹—ÓýÔÓ¬mX”çk‚\ªkÚ4q¨Û“z ürPdÔ(mR†nXŒ— í¥ÃG»Zf0XÛ.kÍ4Ï{ LÐ1¹ÕÀlÒ¶ˆ]ˆtùî=¢$/Y‰2Œ@ä燣äÅ&Õ¼tóÝÁ:—²®‰éIr“šg V t)‚fªgvu`²Ñh·Mn6Qó¡¤Ý¿Ò·ˆÒ!Ìà]!†SbH‰›Lû@k¨«--ÖÜ}""ÔFü ì8i=wùÄó¿á?¼3{"Õ[d42j™AxÝ3\¼Î.ÍüIe(}2 ]`º"ÃÐ^bQ0¸ùÏq<ž;Ïñ˜ÞWk.Ö˜mQ†ø ˆkÈÞ¢cFûf™¡;•WMß6Sšy®òeA:6 Æ4I”òZ VjÔϼJÞÿ#IrEzb÷g–ËÍ_îµ…—éktá14eåP·'øN®‘7‹A‘Cfà’0°<)áÙ.:2-”1”u%¼HßT65õ¬ŒÖR IDATÊ Q„‘ §Â:šØ /‰›þX%TÑæBk@0Ãx BH=M*FW<5¡ôÔˆ¡<)Ž!BfP•IKGak-:ÍDP•1li”ûùÛÞ^“—ÃÏQýQ–C\:NÇ*Ø tRšÃ[!%‘!+6Yt)$¨*q[jW`l½òsƒòŒ jDTYü´»8*) )wHñ?³B“¤:ÌÀT«Ø¤úÁð`üôØf.i^ 3Ô  'ÆîpId4”$Üó@5÷¡‚AïåÊK0qæ1f¸°otº(°†쥔Áâ&ømÄ0 m%ÜÔ•ø¦qr ©„•ò°ž 14"·åCdö±r•?Y~(á¥n¶-,6ˆn0œM TêÔp°.–!¤Pä™câXrP®gÃeR;îg“¯«£¼¬<Ô ˜d Û4Å@¯2òìøˆ»5³¸ö)—›‚~)З3ôõ†åO&0Pa¶pRò‚ ïòíëS©Òtºµ¤ç¶©ki¸AeJÆx{¿ô…H}ÃS®ËÇàëˆÁaTiùr»nJ§¸¼…½ÙÕŸ¶åt:TάJ`HÌ …Aaðd/›¦³×ê=·Õ¤"âÖ'qu3T bZž±ØÜ.ï’3oTd?ÑéWd C6bÈù‡Òt] zá6ò6·|–°$HJÐÎ퀤w€ZhÕÈ4‹*—÷A÷Õºjõ£ÿxíÉŠ2ôè9:\/ÄPmG kÈÛŒähë/$«•^‰Õ½pü}@zº>y'çAxخ㚚ÅT—÷aßPœÿ,ŒdHÌ @ùëä2âSeƒR®Ê Ôh —KË­+ù£o©=i5~0U© ¬,*YÝŒeÐ'êÉP–ôùêž·B7å°^ô׌` # nƒÊºÒmÞ©öèØß æÛ•ß¹ð‰yó©šD*9ì€ÒPÈöì>ê<‰¦Œ.·áÇÖ•=æDàZsb»é K¤¯F0$œî•I©3q,tûˆC î„üS|œŠr,[ŸË¶øçL…Á¸ûºö'¹ß?Nf͘AuW^!/΄ʤTæKS‚8iT à Ò0+£ëš#$ÞH8œº³_X®'oø¯fÊdʦ»õWÇ@a†éã°øÀFÑ"pÛ¾–ÐÒè+Źˆar5Û¤¢»®Ä®Êàô%¬¿àb>_ŽaXåR"m„Ü¢‰aPY¿ÓO¿qêøô¥'å%0WÀòBaˆ[ÄãJbçÊs›¥Ê­+ýsW…}j5Ä-1 Õõ¦ò6|@,ŠÓaYÍJ¡ìVIËCr°…/V"‰EîÀþü«²ñ3ùa4oýµÄ5âÜÄ7cp«¥'”_uÿ€buøêà ë©$ RØïvþuÝšÚ7ÂêÉÄÊ+>衲±•ŒD\ðP›uÉë 1„KeR†¨Þ_­ùàîQPÓôÓ`àäînFšÓmˆ->GnAèƒL€aÛÁšëNÒ1 ‰½¦JÿdÕÞǪWrUQ.ö¡{÷)ÿŽÜÍÞu»{Þ"0CQ¾¿\J£rЂYA¯K6*|56•¦µ ©ˆZ[Ô—tJO²ºé•â”° !†™ì×~ ™âݼ»çO ‘A+3È…@¹3L9£Cq¯CqiFA“b JP‘Ûš æ`CØòJ¢™,îù€û‘ŽbùUšÿ©ÝçÞz•›ÝÓbËƒÌ k*"‡ å•ávÆ×b›·¼ °9ƒb²ççA¸åi¨¸€ÐJU…¡]Â!˜ÏÊG¤ªi—*Z5-þô ±ë½¼n;{úÊ"A© ;mƒ"El8ƒ¢QŒ}õì¼…}F5µÞt:cbàäx7žÐ¦® C©®9£87×:GW+fd “`ÕlçK¸m­v„^qkb(ü£bÔBYU'3´ÚÆÝµ:§1<òiˆìÉЫ9ÜÔV¬ÒÚ@S¥  †·½¥SÄìµ!µAE ŽŽêÆ0p¬ŠÌÚrpíÄêÂf–Ê‹}%iÉ^ãÃ#„o‡¯WÑ4êI“^Z „ô©’•Û$Z?ØãO_(éÖâ}HiI^TAWÁYþ!T î°®ËÁA†§Îø ¯“ŸÛ\D­/(Cï³…0ªôîG&ôµ §±»’CçŒÆ£{ŠoÉ•²»1#Þ~Àáq¤Ÿ~!¾¹¨/.µêt‰ QÉè#r@e#aúŽD¹ª‡eµÞ]¢1”Ø„É -5—rž,ÌÄ…›ÖmãÅ™©Êle~ŽÌ ˆ19Cx7«}OsH÷ðˆÝ(L6Dó">%2ˆó­ÛÖŠ»ò°j&»bz'qÀ á/^•ÈzÐ>Q=µïÓq6£àÉPä†B³¨dA†ˆÅ¥ÖR ½yCŸÜu÷- W'2Dú#ðåÊ"˜0 1¬}öyÔjƒúSjò£øtK C½î©ÍTÃ&éÙ)“V<_›÷Ååª/!åå$½ÙP¯ò ‘%ü¨ T„B ‰vÔ–§m‰ä`(1Šk¢ élj|i¥³IK *Õóµ9µæ²µóÕŽÖ´á;ÛG œÇ1`åñyÈ(N6ÁrkßÁ=l_§\&« zÇ‹T>bt›ZZ^Ö=\{cSyYȳ1Væiµ#r¹/Ô˜½cŽe€± ¸MŒO–XùNC/õ´‹ba,­CR5©%PÀÔZ‚Ñ•İÓJ<£0 Ó^h:«½CPÈc £¶\9¯ÄÀ%Qòé™u÷ ÿø²”aT=ñÓàö~Ã2=Óö3 ÿ„#øÁ“¬‡vújÊá_æõÔÁÕ1í&5hwz,9Äu6Žh»ýò~ .¬0†BMŸ¸¬½Hw§ižPCýù(CÀq弈‹úZ¯çSžH«³§ˆAüyÓãpýÞN(b"ÌÀQÑBªWî™Àc³‡Bl$0à¿^èôŠ(•Ï5'˜b¼_°=tàQd Ð1n‚09*õh Ñç²þ¹wà•#r׈ϫì,ì‹0ðèvõ'׆NâG Þ)÷*ñÈ&Ê LˆVQ†ÁpÀÒèÌ×fÁJ¡¥ø‘)ûdN@F^JñõÕ>É]"3 ²Ïu)ÓUvñ`WrIбaÔ¸¾Æ0øÂ aqû ^(ß w]+ýã^º¦d­04Fn«0˜©£Æ3÷Šœr,`B ;=š{Ckí~¨bã;òe†Py­‹Vaa9 ¿Éw¥À2ÿŒô»Köý¢Ú×7ä#·“¾KîhÆ¡Œê0C.3ÝxcF(虇3öÎåb!°E¸£ Ž$ á>EŽoß‚äÐ2÷Ib‹®`)s°F°W¬9Ñeðî•%N‡®Â¶ý¥0à õÖ‹B3.ü£|[ù!W`ˆœ ã’gKªÛÁØÔÂär“£]aHH‰>ލKcCÐJйÀwà‘uù©L¨žÆ1£-çÙR]f·Ûr„¢r·¹>†ÁPºäž…·÷À@âü‡³ï+²ãŽÈÏ4OŒ¼9'Ì K6IEa°hív#]w•ãÝõ" { œûd§”¦Mǧ&xóN˜0«Å'?3ÝÂ$2äobvï䂱ebž™ž#ø+¯‰an+„ÛÌ `Ü ö©)ÏÍÁꌃq[xÅÊ¡a¿c¤p>âÆ[ƒn¹aÒŠî!ç€Îa: nљ̌<_Œ+%–aWÜIÜ 'ÁñËUö Iu_éïóŒSgtÞº>ÀUŽd‹ãSÔ€ã:sQSNÙLUfˆ fùŒùÙ?y¨ÌO°7WØ—ïO[í°a†.S¹mz”áSSŽdÒÝ+©  Ýv*b`:µS̹ZuíÓs‹õÊGäg?òP¥‡ú´mŸÉ”²(Oj­ ú¯>|0FCs áÿ<î‚Àš¬×&L•@&S©5Î_Z—ʬN_è”§ÐbßsÈ k" ƒ‰ e9ઋoÎÊ» øšM¦ÜòJùŇ Œ1ÀƳ4ƒ‚ŽiÒH˜Œ^k4š´jÄêt£Y%8|ë¦b}+z& `9бå!­2œúCPÑ„¨Šî¡!+p_´;‡Këñ¤¬øž__¼~͙ωN-¼4¸÷¬×÷¬ÓÿV ã×Åo_Þqf­uww^Èt£<Ç ãð>!þyÂGC¡)=Q5ïËÑÿ@ûÑRŽ °%QG9ýð?ýTñöË»Ýk­³P!%„ü "AY¢\]\!Y'î?aàâNH+…tóBé.z#!–Nõ¡¬‰6–>§ÿÏÓËŠ?ìõ‡«:ƒ\/8™%ŽA-3àÃÚHŸO¢ºTý*„¡cz iÿžò)’™új¶ttêïþ9éTç7‡©õ;0û 3Q0}n¥Aà“3à_µ)(ɆYQ~:z1 “2÷ 1,.Ÿ,êèliñÔÌkµö:PN29ÍÓs;G臃2ƒb>ÁX¬±$¹Ö…ã9b†¦§„§)üä€áïb `Ž_]±P2ÐM…ȘmÔÚóìåäK8øâÏJïwArUò«øegÐ寓KôOa’0›å4å>_ziõüR‚åš[™4a«sµ'ð¾;^Pªe´öòIÄÁ'V\ëÜ$Ð\)²0Ÿ»ð˜Åº ëÆâÔЭmâˆ2 ‰Ó P6!|éwúçßù*I2õ@g9z7çñ%Ì#HÚ/wi ²«L|ø›Ó¶ƒÇ¦/_Ðes¥¹ÚO ûgš_Ð7J´¨Qv<å‘Þ!b4Xâ8å :ü±Ì NáU嵤ž©oâÑCÏÃÁ°kï‹g˜áeö‹*”Ÿq¾?zÃ6ÿ‹\®IÛ›ÃÏ|È‚PAÐ"†›¼’[Ùi FPÔDºåòÏù7?r‘Ô7Ù7½!:ê8ÞÐ<°ô›Ã.ÊzDiño·I KÊf[Nºôs/«CT\‡m| ÷'ö_jþÆ'­l#®Ú£H+Z?v+Í£;†!<Ž ŒÔM¥H>糿3”Õ6Ó†þõdض/µ/‘ZuVÛlÖöÖOýºqPŠNéqŽpòV á„pðŽD:ìvãLrC˜D?x±Ç°òE½êú¯—¸'†z®m[_ÓYÓÙÚÒº¦©š¢­93«£ #J bÀŠhj/ÐÊÃN±rˆa÷@ÉÐÔìÚÚÆq7Ý¿Ä==Àî²(ƒP ìù«³çÜ5Vÿg{xNŽÏwáPÓò ¡lÀ ¤=qZfwš5­îÐŪÃ,üO:ÌAíÀ C[ˆ}œ„L£¦½ík¥fŸÓ·™Ã¢ÿ°Ô>y×êìi¬¾ôPfè/s¿•©ÑùËzæ¤#ÊÀã'XÇ%Ä0 ) 8×pE‡GoôP\Šä@Àpnp«ï*ŸöMsL«UÓ€†¿¨)2paŸ·ÌÍÜœ„ÊæÜ)¤£P"‘Uó¼—‡ýG ÈÏÔ¬Æ JÞ º0Ñ‚vCa)ëCÿûx` @çý€Þ/ÿ¿Û¦«ry÷Ò"† 뇲ÞZk½çn í…ÒLãìJ&×î/ØZáÙlvy.C¨, SfvÈ V³Ö™S€j5b ¡w)Þ¹ö, z„‘ QÉú¼OŸËábYT樈y¥™c§ÉtƒÇ0]Ãÿ¸Äåª`év¼D*xùñF™!Ub0fàf0K¿¶»1˜€á$uÐ+®JdØûE¶ÐBþEÜY^äh;é¯aúµüÔ…p`¼jÚraµnæk;w‡90YaÀq*«êpx_0 €§ª…½|•‡‘б_ñÞ´JYQ龌0(m${‘VóJ&ƒº³µ–Y¦—xÔˆA§µm¹´ƒj}êµ3 Ãx ˜H/b0ªs2]¸^Š€áIÆïÍ%}0¿ñìgÇñH÷*<Ói“±´”ÎáÜ»:½C\;i»é¤ ÿIúÒlXŸ·âYmígå…n;€²-§{á‰9¯é”¼¸FÄÍE˜}z†þë탻! ÛõÃ%E(ñð› *ºg쌾¶Ò^±Ûî×][:™Ö!ûÃ\Æ22×½/¹¯å7ÜIõèrŸMÈAèitÅ@òN€–¹ÃeÈ ßýhÕ /¸qYHKïãáT½MÖŽ“™Yµ•Lùî¶5¦“FƒzÓÌ¿çÄ0š‹RK1«o4b¼ñ,žG9Ξd 1h%³–É«3n¬]SO=*2·õc¦éâ&ñg•Ék´v³MßPƤ™ù·÷¿{Úõ½ÏÀŠÊ1ôšuõÊmÄ9{oæWe]ë–Nú¥ŸÂHÂÌ@žG E!_b°á$©×ç¦Îbn1ùw¦ïò)׉•Îßìþü…Ÿpò.ïÞ/:/ªr‡Ëƒ;‹8udöÃúÜ7ÿa ÊìÚÚ;õ ÞH) ÜåÃKÕ¢ðà­gP½bôk…p¯26()Aͨy“% ¯wj‡¯C¯P@ÿyh„~P^Éúמ/_;‡Ÿ–î®ÔÕcOžþ冉Î{Êþ²½6ÖdåI2ä‹;à ØóÔŸ!€šóÒfà¤o.PâˆNÞI? }GäȈ¶{7¶˜µ}#3ˆå…†oyò>Ýþ)]WkÖÊr¸ÁÇèëÚÈÐUØ'Î Ë…×MS ¨|„ÝOvR#;’ZS צs7ÍsÑ[Ÿ‹c‡¸ï‘YÏîËa`ÿ€þ“NxnHº[v…isŒ;^áoýt»ƒ®c@ž\4C Ë€J„Â0]E¯&!¿¯z;Cñ>xZ)îUk-ÍÔ¨(ͼÖjC^ Ã5œý&®kU`™¼ŽúÄ9Z‚¹ånç¦àÜ+ÁÎ໳dÝLBÄàŽ0`eýÀ®ÉÀõг…†+yêBoc©¸ü]¼ %~ŸAצŽÚ;Uw€}ºj uEålí¶Ý‡ÊºSØÚŽšÄ¸#mZ Û‹ˆÁA…1‘õ ˜A£gÈ}Z(ˆÏÁËy$xóâ æüîµs¬ó³—vnÚt¬ÀcóSSM5Èr«Ýªq•!†aTÊ—×ß™F÷X ™©¯³AL“/Ò¤ðú_pP ÌàÆÃ;j÷ô#ÛÍi“²† IT3¨þÜ<јÊÊò З©ž÷æ:à ¦Gá+/—LÃ{è^„¯~4­QóÙûž’ÿ/ ¿ ¡Ob±“Œìoës0ªè0”›¡¶à¸‚"† îyh\c¢Ö÷=&/iÌ‹LT?X fÊýÕñEDñõ¨¾ØÖ;°Å©)¹nšÆ<í.KÃ3Ù++Êasú«ðæf8ŸîÙØ•?:,T-,øž@v3€G 40šqýÐgDr0¨™)7X iÔ,äüƒx[˜^*ŠZ¡äúa‹óEâ—Ó4 ‘JgžD7>Ð3[ å–Ü'’ƒbìqø»F.“Øçå–£@£«sh¨OqP/2ðÞíO¨ò¤›S[›‰Ù}¤éÐmÃgƒíCïB±‘N0o愉_( àMG÷øê-bñ Ñ1+ôEfÀ³_nÅ'kphv8”EœÑÖ¦¢‡4¾Ô0¬ÃQw”qÞë÷’¸† 3´œ[xݼ'Í›_¤©7#m!|u¯ÎÅ5ôüÊU²ìqñ E6Pì‰È\¥oP—¢Fn˜Ö=+QG5!öÊd,á+ˆaPaÈÊp[6Z&„§‡ê6w¹1E ©Mq êØu:ô§äÒ>Ô'2´‰,ÄJx€"vuîÃßYš,B[àž•±S1B4àö‹eÀR;Lø¼‘}b¾=—éÇ^)¹” †ÍúÃõFÞšiQßb ‚Ô ?”‡Äíõ _–@DS uW”›Q–†åÜÀƶCï…—,¼Ó°W>V¾"èòâ.±¡H™t_~ü\HèÞ\êî:4œžñiE!b\>/OÕuíŒô­;ðôÄèÚn7V Lƒ¼Ò6âwGÄCZ¾{òdwIN»NfÈõbígQ†ðºŸPŠ:J(0νWÕº˜Œ20­@3Ngk7,¨_ŸóhÌ#•_'PÙ7/¦» sÓ·ÙìVg9ʲ¢…kú<³é³úCë"y!Ä0¸â–ï%&ÄPHw†Pv@ßeÀr(1dd=àKûD•ÚÖ.“ðÀؼ„˜©·Aãb³]Yýë‡>¯tê åq©¸(…Æ7ý>4ràŸå#‡&é}…âª^òäþjk5ƒ Ôœ€{ó'‚X/€×—¦äSÈx˜_YÁ’¥ Sˆ!64bˆß郋ÎÑŠM^ìÒŸ‹àáðB›Ì´ÀÙ¥¹e#¢/OÄ0¨Byш¬Ð‰§ÐÍ^¿€î||»ìûˆ‚£èqÝ÷xN¥ðf× ¸½¸§þ1H?¶½ ‰Å¹ZlkÄ1$P‡òbÜØKŠ®ï‡ ÔlmÚ”ËkœŽ±aÍTr鼌0Ê {éAÊÅ#ÿâ×To>Ñ(€r;º?ã&æÃf­”®i–€¹­.üX¹é¦ãWÖš£™hŸÕ”ü¡´ÄT×oöc«†ZÇYc$i»‘X\T}ý,‡Qhhì·y¥Ç¨aó¢ 0ÓÀ¸øOž€çsöÿû .,þ°ù[5cÊ$aVä’‰ü™æ¥¿ï/õƒ)[4¼±Nf ªL)‘qœá9:;ÕFÛÈÃÍ’™r˜ˆ:Ñ &@€Ff—¢CŸcª¦9†A-Öûr “†K„t³)ÃaAj+2´´¶tT•&M„Á *^&3ÛCˆmúÃÍ-Òô¿²>j ®È?$ÝrGw2wr#±Tè½Üÿûe „£‡òìHlmÙ„ìb牄?½ð0™ "y^#Ûë!DPénJCqº ŸÆMÉOÈìöG䦛­j†Ê†^¹›?l)ÊÁF¢ !„|œìª8(ÄÕÕ‹Ê$ 9EЇqäw®CO¯®üסüu7ºKEgøÝåŒÄ0DS˜!:†«ôÃp0t;9yçÞüé IDAT<8ˆgPPô \»7VÖß_ªoK¹k»»4X†Ž|:ÊãMI>즾Ý|ë÷Pä|è¿”ç*ÀÄôÝ0ª;¶œÞl×Ñ+P[e[‚&çïÚÞ£ ’Ø¢Âu”_Çy%9¸|áþ0œ!ÁV;e7ªRÉþWÓË<.—3A ‘J(ù<æJ Âèg½c¥•-‡\¹ì† k 7ŽÁWAyIFÀ E„w…e»ŒDª¨3Œ£zC®D(™ÁD#%g˜øPr† Èì­º·«QÅ•fu$þÎúÃÞ÷tÍì8ê·0!¦@׫¯>/ÑÒ^üp†B”9®ÄÊ™¤ M E3nÁgz«ª}2†aÎÜ<ÛE¢\ߤW‘öaÙ¦u"0é #„I’#êmŽÂ YbØZ…ÏâžÄí]4zµCô€©X­ÄuG‡{׎˳] éßÑ/#×®N´«]“KˆuG½ÍQl“ÌÀÝP™‘û†vÇÙÒ…Y2Ë×wöºÙ;¶nxÒ{s˜áüÚq lB§e¦’rXIÞ‡Àw2ÔðñWdØeVä@fUšÖ™·w,–'sIDŠþ 0÷®<xÿ‡ºoàS·ž„…‰ /‰ ¹ìºc䮜‹…æ, Qos>TÈ?TÎøW…3Èràéï)%ð‰/†áÒ7qÏ”zÅ|?Ûa±7qÙyGÉ]YÀåòJ!Ú99 ž•íI}³~NÎrgM‡æn#ì÷í:j–´æYx"ÙÑ\‚~” ú‰úáì×"ñ§Ò:o¸¬ST°c0„Ú,ÅQf}C¡¼!ŸÖXM¦2›º«^OFä¢élƵô#IÖÊÝ)þùC.»sÛ•5¼XP¤(ü¨ r^xC¯'Ël7–ƒù±À¼|SY³ÚAü>b?Hâqm¯ÉLdZMÚ†@X>ß'˜h_ƒvÄÖƒît³ÅŒgê  µ•‰Ì‚Þ ÿ‹†båN@Ž“{pGŒ”â.àG1ÉkxԲܘ´ŒÚ"¶ýS&.Ð.ËÁ&o‰ ¡‡uR¤ ”gQcYl‘OWb¸5”¸<à¾áˆ5û=¢`XG5¨ÄMj÷Œ `òS .ErG“§Ñ‰íÿ³«\Á!ÿç`¿³ï‰à¿Ï0•·ó¿§aËsÃüÏbˆDê 3 ϰ*³B <í­!áðsWÀóZ'f8§IË΃ö»2÷váo”rõÁ«fÐXu½¿S ´n&…øØ{Ä+úC…Î?èŠi³b3ŒIÍâçÓfó“+(Ô‚žÓ½$ÿ×}§w·ðÍÊqÌàç•­külãO…¦J7sMÉßÒËŸÉWÁoš>ã…³»ôÃVZŽïæ]»0‡w¨ÁÊ) ¿×l V¹¦îbeï­|3õï2äÒ:ýÕOyÄ`Ò•¼kHã™JWãoñ™“ó<ܘç;¿Áºâ®ÊÃï{×/Ìó0sLFOÓÂ[Óixî)ùQrçÀ*¿Ÿƒ éJ oÂVWï‰'„¿¯>˜õô» ßðBé3Ɖ%¤ˆ0ô¨h&¯?Åh*§Ã¸g}yžwm‘iЧy!•N'«˜ÿC|z7ÝÄ›ŠÀjÛD3YŽI†ùU yýD³è<:%c½.¯É„§©œ”B[‡ŽÀÿ……Á-.÷ŸØúÛGrÎqa~QÕ–:·XTóµ©^×´<ïÁ§_y7ÐTA½‡{*^å-ÌQyñw¼z6Ì>@ÕÊ;à¿ÃŸUmÉéZºœ/¶D¯Rb¸Ÿé|U<ö‰HÛîÑIô”8†«ó»‡âý)Ü¿½ˆrJâã" ø€ïÏ;ˆ§VG”O]¦÷Å%)"­Úá" vÿ›y±ƒ h¸æK¸î±clï½Âþ÷ç<ÇnYa9qÉï#aBݼL+Ov…¾Ÿ 3¼+–”¢§cjw†,’7¡Î@3f£þ;ã{D‡1S»vkvQj/HO`‘ÝSƒs­‘¥ýJÔ¡®®¿‰OáMâöú‰bfÁ°èÂr(“!EaXL3ÝGöOÙ€ôÛöm+"zšØX.«ÎàU¦Ìµ-6 !»•Æf0Ò[Iìj?ŒñÁÏ&ï¯3hHÞ€r· ¤;õCµ#Ý g¶€"½pƤ0ÃÅgû„?P‹ôÃoJÉd2ìÐCBr= Egr†˜V+÷X ÷¾Ï SàGÀúß<§÷©ÿιýÇ«ì볫ºÎÑFD ôc$4¥LFÃKFd6<²»µ“kx¤Q™ã ÝJü¨x%†8ýÀÊ{ªÐ0Ö"R´=CggÏzæ¬0oÈh¨5h{ô æT])ÙP¢=òÃeHõ?×ûwëƒU#³eh´±ƒd r¦'¼A0Ä€£BcÛɇä½v 2õH ›³ \Ýõöåýª›ô}éV#™(y‚aõÿ™AŠ2”ÅÜ·Ý YÝ…&뺃¶ëÆËû'Þ”7h°.aGæE_|˜µÑ"²gc$Ùo/AnÐkÓÕíd:˜’˜S‚,ðËûßûUnÂ*O#LH^8´L†à^ 8Ãm=‹žI¬òY‰'`H ÆôÛspOÞÀŠ-lVáÁÚ)ê¶Ð4%­ƒœ“•çÂÝêCa1AÅÞwÈàCc2\—#J™g6…m`.¶GcÃBßh1¤!§WŰYxøÕ‹Çœ_?OyIR7ã ņiɠɬæu†œCLê‹0ôNr[,Rȧսـͽex4F:/*J1˜tÛ¿+Ê¡6KxÎüfÆ3„U­Ò'†^P¥ Ç¡z"Ñçuö?ƒ=±½A>û½\¦bå€cqŒÍ@*[&:Qñ HU·{ö̸àz}8‘áÂü6ç«ö¶ëÉæg-„{]±R¸ƒôç •Š\ä`bRúH•*$Ùcüü7†^Ýd¿žm¾×¡mªŒÙçkè*âo6CÄD¦p~K‰ ®áEoÔÙ6e_ÏÈ t‚¦ûwâÊäP”!œ¦Ïê•høÏ —,^w]ºžj^é¨ìHÒŒþ_¼1 §½^K9”ÒÍæù4O²þ¨˜Äþ» ¤×»;zz€â”l¤ñŸ‹Q†Á]s†™E’ª,B -ðvaéÒqÊÊ¥`Ò˜Éqo5DͰ°éØ›BkJnéF¿1u^Í(Â_¢b¸WŠR/Tª&Ì0n!˜O ˆ¡¹u)ÐÐnôðËÇà WKù`8`ÌØ  žy£Zß®7fzÇ”r ¶k•° Czö°f‘¦?ž½ˆ޶À–ɹ÷l¤1Ï€åùqXß)ƒbcëIh®mÕ•zeÔ¬†å+ðâ§öѱ ?†ôåÈ /¬Ñ-v ݯ/k¨‘ã›±Ø+2àÕâ šÕë0 õÃi~ç ëßý˜mÿQ¡>Âà]wç=˜s [)ÄP&zw"íŠi¼‘4~6v^¤ëŒû‚lãuëå}8y¡ÖTKÚv•ƒg¬¤Æ;¨¶Àí L…›ôü‹èHY&£»å¹0¤G%0¤Eû«C·ù°@gJvc–¶]µ ‘…oI5®ÞeŸ´$ô?¹‚ô÷Ø’®C–`;Ÿr^Œ2t™R3LZ‡ªL‹%*Çɹá-U ÍÂ[pCãPÞBÅ^#Aסyå×6ûYf@¤ï`?»#ŽzÓ7F½ˆgÀŸ?4“£M—‘JB èp(f’ÿÌ`(o¹þ{¨¬òCß åסݵ¯¯-µÀ"ö½gÐ…†Æœ„ž[ì­ÝFº£*¨ºŒB”Dó¢¿f 1 Û:]ï6—g€|OSi“-ºãâF ƒ ˆ¡ù{E¤Ì ¼ås‰˜aL{Ò·êÈܯwX±Zwé‚þkɻ늾˜{ØXØØ3÷‘¸(Ã¥Ü΃çàß]—~áM¿O7hÜT –\¼Ö’ãê*ýõ’wýú“¥Ò^÷)Œ0Ðx%5*;˜ Z&{ °ØIµ{±ºS“JEV“ã—QÐ_>Þ÷¤"õÜ5º%—X¶»‚¡B8 Γƒs,ÿ‚$½Ú£ÙG5–zRÝÔ¥¹E¸Ø´«CQ½Ç°Ê—\Ô̳Å<–† IÒŽÉ #IŸºUEhD©Þô&p¡+£UÏÃ@ÿŽd‡§ÓÞgCêy 7[IôCXC½ Á}Úï\cúY¤wÇñí> 6rêAË ÷ãUê%J¢ë`§ÏjÇCr¸L÷ÁåMÈátÚÛîX‹1–a)ý<$b†ñ®!÷X ¾(µü·H+’"];á¦Ð!…áäpi“š›Ö’Ã1\·µÒ }^œcƒfcâ3cnãÇôyÉDµŸi™!@†2DYCjžZ~ÏvXax ¹Þ”;#sÃÂñYÃËžNs½§\;"/"‰‡'¶1x5 áüãöϳTZUÓP:;5Š2\¼¾¾ÜœsA)`ÔÀå¼=§¯\ÿWRSrX¾Y𝄨åšeØ Ôc3(¶Ž4Ù‡dÈWú·¨È¤††Ä†ÜTÍã{#ï&™!£§œD »âï:1š<*Ôº±'‚Lðr¨¡èaÚý“M”:ykeäZ´õ&Ì †þ#®Üyíx4oR»—²µ¤‘8×qÑÝ&(™Sœ‘ ½’æ…7 n .5¤`6 FE®Õm+fà’Ì—C²ó:¡g;RIž\ÈFi‰3¤Ha„!1c× ÄÐD ´û€Šš­Eó *=Þ*f˜,߯Ëp/Ì‘tMݸbÆTÎc^BXP)d(/ª±ôÞ Øä(=J¥¶È2y¾¾^—k¨×èHy@ÚÑ áô¨¥?HfÔ¤…\‚ ”¤¤ x}´²m`4cêj$‡µ4ãªüœ´äyÌE¬$Í:Þ@¯qŽYŸå3” îÿ«í|€Û¨ÎþV«DR ^ɢł%Ù>œô`âÄwIhU­‹Ziá ezC¯t—L“ö NJ§q¡]ÿËGùíÙ„¢Ð2…¶sG!׿¸¤$&VÚ€{ÃÍà4…•maõ†$Ziƒµ­öÝ{»úgI ôz÷ÍÄR¤Õîoß{ß{ß÷Þ·ß ^&å¥Sg´Z³r#|ã¸ôËgüI˜›«bÃcÏœgÁì5Ç,›P WRH J¸´wö‡ÀkÁ „“X­)™ æ-’ÙèÄ‘*YÄ2ø™1Èš{’×fXùëj)«¶‡í¨u¨Ôð!hÐ½Ý•Ê ó„èiV†ç¯\WÉàWט%u%”Ý8ûç1HÚÞU¼ýN¾VÜ‚ým’1ƒ€ß0/šªÛƒ*<‰.{ûlâ t)ºþ8¢æ ÿ/îy¢ùþû¡fMdpª½wOãåíHJ“/úÛs•¶½¢å}9ˆÎ#†Æ™Ä«¯m'çó‡ [¤Y¤?x£ó‹cKÿÛÊr`´9RüœbH@AFGLª8ªTa•Ay«ËÁ'/¢û‹ó“÷£_ggJƒTJÂê»Z–ÌöñN“-Ð]¡ü7%Ñt3ŒL÷×Ͼ9Þ%Ái‹–/›ÿ£TÚ Óxs=uî"~žïâk¥Ó×ÊA‡#^üª—ÀH´„*Ž<Ã3A±G^`•Ù'V‘è~]¸4’iÔ<Ì‚!È3¨EXq©âZBåX-´>¶>Öá¶Áöó -ÄodC0†\^‘¯3… Ö $¶2{plÕ ‹ì·o3ðvC: ·sâ p•aå.Š•{*ªrÉ¿Œw&ìn"Ų ÓÔÆ:Ò; !¾ñ Gl«xËã…çÔxvX4àrèRX&b^V‘iu.½iV^0CÙU´·½ùÿ%¯:?_«‡Â¹p>¡" ³ê”S2Ä;ÆNºƒÓ¶™Fv¸Œ¡G9ƒóº/ÃKœÊ =KÄî´.ÏPLïRQËÔå2ݤ·˜M–ªþA|p*â6D¨ß¡ÁÙØ? ÃP¸p~³8EŠ´þ=©öÝéûdã]µ ób¯_aȵÆ>}O5Cg™1œÉ`†dqìÆ÷‡x1_Æs¤¹G¡¦".kÌ@×dàj^]Û3bHYã¸A×YÝOþ÷3_œ¼.uøwD7 ÊÖÜq…mˆ÷žØ™ö2T8>§– —JCåáŒ1ÀÏCˆØÁ¤q É Ü1£¹ €ÉbÜ༠r ˆËݧéï<ˆDÐî.+‡àÖ¾r†Wuòïê)@RýNûi0îušE÷jŠ÷Ñ¢.ôœ™€ÊçZ.l¿1‘¾Id ëõ,©Ô‡ØÉ=?krßcA¶BÉçWBgy†‚çß }Pˆ#½1ؽEgœ[ :·–3ìœtPãŸ±ÚØm;®¯'œc)̰Fßg^ÍÊAïèØB_Ë´l‹YN ‹Æ.›Z“`] q4]ÇÈ„|`XeÀS‡¹ó¿*]”[|’n,gxpª…-g*0ër0:JFúZOÐ#Š9iÂÚË$4™;õ¢Ê€Å“…qSUuœ¼Úzðß>oƒxbÊaÿª Ð6àãúqÖiåÝz7²×}È5é»1ÄúP'¤ü MGZZYbN߇Ç ö²>ª(ùgHoœÍ·-0Íú©]\! r'(“Ä’þR;=ÄúÈyË‚—í:‰Œè‹f•ÁˆÊaØC?L,Ÿ‡˜—è+m¯@‰óà Lš^¾Àu°vœé¥lμ.ùÞ¥a1¦7‘Mf˜%P`p›i‰”þÉv’E 1"æA7ÖÔŒ&ÔźÈHÏÐ!jDZòËÕºY”|cž!ÇI.#÷ò Jéð\Q£‹uz³v²d23‚ÿ6²;—5¾l}×oq í§X©ºqÌ|23á;PË{€þ^0~™wé‚qÀ…þ5‰ý-†r¸ÝÉ•/W²pê hì*e‰æÍ[Büfì­ÿ±ôš„Ýá¼Mëé¿ã²k[(îÃÁã9áP·¸p—w6¶+£ì¨™[yREv)Œô=58ˆžÅ/²‹ >ðÎ\’ìèr8nZ8¥–HvªÕÓ°žR´˜@s dž펙I»- y†yKgÊå}û´Ÿãr8dàÜ@å=|šxª3ÌÂL¶È0ž~H¬?l»ïwó?¦ÎJ¯ÝŸ¦™Ï¶÷¾¥@qKü@ûaÛÌ釅ZNl¬ïMeopÜ­C «zàÆ=`1¬a»cë 1Úä¼§ÿn©8Ë…!ÿÜSýíʽz8NSžA­æ f`§¯~Œî ÉÈ»¥U Ýä2ƒ–iO—¨³÷™ÍTò¤ž­#£s÷¼%ûWŽ»Á¥è)è°VÇñFfÐÃÏ껨ˆ¦›èÎS‡ËÆEøƒAž3“˜a}çØ ‡ ¿ëaæ¼i.jfˆAçñÕ÷S„›&ÞÓ· ðH#ô-‘]¤Øl÷™AÏìI7Û„ óD–hE&üE„o³ÿh*‡Ð Ò$f` 9"‹² Q[dœÓLÁA“ðœæG-®ñ¿²¼‰Þ(>¾ù–EÞ¤Cc´™ Ä ²{ÍC[Dïxô&Ï U ‘§Ìf1T´Qµu%³èü/3¶È§ÈC"„zˆô–ø¡`c 2¯Ýã<ùÅËVúVé±§âV¤-÷#½ åâ¦&”éìÆû®@îüæîøß@yç~/“]N†á±$ž‘®ˆ[ ‡‘YU¶â]œ‚lò§ëéO.ÿ8ÂRàgU< ±³ÈÍíðÜy¹ƒn•ˆñÖ¶¢nVÞamÉÎ\dòëâè´a8×– ÓÊ9Ï’ôÖta¿äò,FØøÑ#–à—™Ïüä4<_žTvs‘~°1Ø¥Ç&Z ÌfµE˜ ž>DÊœ~õ9x 2a4j'UÇŒ.<Ý4xÑ&vÔ'¤Í»­Ì¡É9ý80 ͈¬…¨ë±ö*:kxîq/¼ŒèCÀn5Sq³ß¬w3ÆnÞ¬ÜÁ-^ð7ì^ÞBoÌ2ßÒ¦(og¡¢KàÛ+LBÎ(Î —]bDø–Ÿ ýF<˜€Èâ·r·N,m̶¯³¥‘e)5ßJl£ÙÀÜÝ6ã()ö‚Š”lZx–bG·õâ±%È­ O˜©÷ÍŠûÀ˜¬—b(Tºeƒl9ð‹¢ÛftE:-®æVhu˜›=·[NÖÕ[¢{- Í)³ýýÄ‘mo±]]’ý¶N7Ízçì›¶5ŒYÑÀç@ÝÞŽMcx£7{¼Ô €ŠEçŒ3äíU.Ó¸ÐyIç^##Ûë›bÎa¶Þî>@ž¬ˆˆÙ Ô‰u\Çët]¢Ýާb¼s€uãägÈßÁ †Â3¤É¢ —]PÍ.ïz¯ãënF4\(IÌ÷ýq[Up;èÆ ÈY²c«³ƒd¤X#}Dl“¯yƒ"{rý`VØôAî»í_=Èüš™»í÷ßôF:wã.«Ú,(µñgå1éѼ(¬T5¥¨lS?ÌÌ`ïæýíßìÚ9mºÉµ©]½Å?á`-"è9ën^I>,‹ê‰ä.‘Hä.,?òÞ´?3…ç'qîAEÝs¹ ³ðWù“sùÀyÓ0›ËâÃ=ª2sG/\ì=ç$þéðÑï÷è<;’w)0¤îýð3*ƒUôvGônjz° c°·xjF޹FÖ»j1¤È¶Œ– *GC'zf™~xdŸm†—‡¡$Öãá”Ñ4{â\öð''šš]ÞVû® 5âéžkB^f »€ Fuóý{?t55{XÐ%ßÙ_3ZÍÁÈriã+ôÐ_p‰©Y9¶}ÍMÛáà b €s$Þ â}kR­¦ÝÛÖ­ßk›IõþíhòÚZõ33ñàîaG²ì'mÏZ™Òu]'ôž¯ÔY}‘5À+êžMïßó¾ËÕ|V3ju ÀB˜ezÝ/è!Be8q1œ¡Ù1Ä`Þ bÀßjäõlSëfX çƒ©Õ ¨~#°¡ö> 혲£_Þñì:'΂@‘'€'Z‡LzRcØ¡c c÷üʨ,¡q“Ûvr»q•C=ó‡_r‰S³rÃvÇú/ûY§ãIDATb8Œus«9¦C €×÷7µºÈ3*êk8AÞƒ!²¨@mÀÙ©Ã È^ˆR÷5˜I 2¸IœÙ±<^NÁO a¦0;›°ïˆ#õe'wô‰Ó2Ã%9Å¿ñß¶Zb-æ˜ìSƇxC?ÏÄpÊnÂåpj Ýy[dMöÕ©ã6¨<œùœ¢¶Ô7¹l({ôȾ•÷ÑéW1ÝT¯:Þ&®oÜÔ#X©¢‡Ë5:/e.íÅEœðG>È©j † á # ó½n²btÅ ùÛÍÍ"«ôŸÿ–)>ò]f´_dÛ  )+²Þ_Ð~XÍp•mg*$©Æ1ãˆi¨à­o‘CIœ`gÅ´Ì-÷†´ØƒìƒF7(¢ƒÀ $í÷øLÏß|‘6jñ%Åg[vîEç¾õ[q(Ñ ‡ÓؾÎ@)”žÉÍãJžuÚà”^eáæ™åW?€Ö]ÝCÓgÏP–ñM[G ¸k ùøÞáftˆAˆ!f%¹àw;Y– ¬/0¼Çä‹1XW;'½œîÛ¾ôÝé©é[ÁÞþ©¦ŽKgê[Ä»Æ7F£±§ÙÝ»o];X ìN55,óhxëfÝ^d&é@ ÝûÐpQGæ–*p,÷ðÁÖžT¬1—ÛifCãëiÓs*ÓˆÎ3 þ剅¾N¼÷‚ô)…Ú<ÑDL£±LdÔG6üjú $KJl_‡ˆX°Ö\°•$#û€Ê Í- A•{APkLÁ˜ øúm1n~ëoÇÙ©ŒÁ̱b ¤zdÚ"i²NãM¿Ùq2Š:r0ƒNb |X¥2ä {øp #}CÞ÷§ü Ì;q#”wÆç ¿ûD}3›èÇl[²åÚ8G÷Ž, 1x€´ÖÓZxÖŠì³Èâã± ‡vÀZ’R?ê:šOÄFc¶z³aô¡³& Õ„ "hÌg×’å~·—±'5Îàm\V¼‘é7m¸0[Ð ˆs­fr߸üuÈK¯_âžP΃-ÓÉŽ÷¤è™|33glƒûgõú œ“f (aõµ´Bç—Yû§JóŒ$)É´U4ðºÖíõ #ËÉEfFyôÙpî˜øãk™×ãe î2õ/|\®¸xî«B‘gÃx‹·e8Œº“ùKŒV’JëB6¤ e˜7Poþ¼sóL‚ˆúž¦â,\|tm²ƒ½u]¾.nxÏ„ ó%mÿã œä, )Ä„ìn˜IpÜÝ{ŽÖž­c‰}ßÃì›7‹›o>w„cÁ.à O”V^Sך»ÛHø†Ó„¬1·³y8A·ŸÙ‘,\RDÆÆs¡¤–Rñë[2Š|:)¤+Ë b¸YÊÞ´…¾´/†¼ðå$¡%1{˜ÿ,?wT¾^:tNž 4»LÃñíi{K$ $<…†WœªùݯQçÄX#@åÀcVch‹Ó[|z[DÄóQx‘=T(_¿ytjÈתóô“1í°ÇR‚œvÄŒ eHÐK[x#!%–•ÑE,GúBF¼ˆ¨A^Nºñ5V{–1(=We6ëz¾áÛf4ôà©;àc»4,áƒ]ïÓS¬g_1Ät6¤ñD õn¤(FrOy¡[ä žEÎõVçӵ׸ÆpÒ Dœ×É0„AQ¿’Ñx‡¶Ñ¯©ýÎÙÞÛ0úÌ÷FÄ›¸•JaÖ«Î@}ýòf¼™Ž`èâ$æÇa-†ª&ªi?>.Äæõbá¦íq²’+å‘-Ü«oœ>¦0ù±;uúׇR¨É Ó„E¼írxðTCÚ®ÎP“U¼N^vøŠõ?T¬Q¸'Ìår¦Ã·òc·ã¤“Ý ˆ!VeØMëaÖÝíÿH†ü-žƒ­h\µÁj‘Ê{-4¤GÝiZ«gµ„²JÏ-ÄE v4 TÝ#£`˜E–gÿŠÓå®^(H5FÆÛ~㡊@è@ZõrPÝEIyX»@î6·zT†Eö‚»{aõ2+—k2°8+[“ù÷}°Ä@ †LþžÐ™÷çT†bð?Ÿ:^(°IVtêòjÕÄ1jøN’°¯Æ% X0²†ßH£vÔ3<óWEå£Ê¾f ëþDx‰)&'_¦CïùwG_.2”¤Ö… rGQ“aÒL.R¥žíäK ¸v%-–•©ü¡\þiEØÏjXã'—„‹™=5|–Þ=~tfwA;C•Qg)æ÷,¨ú¥ê2Q`'ލÉ_ëÊ>-µ”ª åRº.GW0ûP›!ÿƒÊ÷×°é¯É IßSöÌä žq¹à É~¼ ]›a¥ˆ4|rá•›b5jFØ”'Sù?&ÏŽUÇpþ? ]ùˆ?y~üºøsE¨Z{QðÖæ™¯e®Ù&aÉpÉäþ„zàj}˜‘«>âm0™ù\—C¸úE±ßíÖ^>*C…”Ý|ñ¼â݈6x†—jµÉraŠïò3`59}¬T¯ƒíµåðY³M–M”N¡Í}$Ce•1pþ‚Y)ê6"Ë®ÒOÖ$ÌÔ0ì>¾üº&&ûøº™Ô®®ýÍ1W;ìª+¥&Y˜SM¢6©ä2oý ÅZÀÍòª W•êàÆ„x#ÌÍî»Ïþñû‡dÕ›ÿC)oºxãg/À×~¨ö;ÿ´³¸Z_âI½ aT­º’Ñ–Mþœ_£¶É }«-¡ZfªШª²² ¾–žsÿ;.’ªØÑ¨IEND®B`‚leptonica-1.70/prog/blend1_reg.c0000644000175000017500000002271512270122643014630 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * blend1_reg.c * * Regression test for these functions: * pixBlendGray() * pixBlendGrayAdapt() * pixBlendColor() */ #include "allheaders.h" #define DISPLAY 0 void GrayBlend(PIX *pixs, PIX *pixb, l_int32 op, l_float32 fract); void AdaptiveGrayBlend(PIX *pixs, PIX *pixb, l_float32 fract); void ColorBlend(PIX *pixs, PIX *pixb, l_float32 fract); PIX *MakeGrayWash(l_int32 w, l_int32 h); PIX *MakeColorWash(l_int32 w, l_int32 h, l_int32 color); int main(int argc, char **argv) { PIX *pixs, *pixg, *pixc, *pixt, *pixd; PIXA *pixa; pixg = pixRead("blender8.png"); pixt = pixRead("weasel4.11c.png"); pixc = pixRemoveColormap(pixt, REMOVE_CMAP_TO_FULL_COLOR); pixDisplayWrite(NULL, -1); pixa = pixaCreate(0); #if 1 /* Gray blend (straight) */ pixs = pixRead("test24.jpg"); GrayBlend(pixs, pixg, L_BLEND_GRAY, 0.3); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 100, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); GrayBlend(pixs, pixg, L_BLEND_GRAY, 0.2); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 100, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); pixt = pixConvertRGBToLuminance(pixs); GrayBlend(pixt, pixg, L_BLEND_GRAY, 0.2); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 32); pixDisplayWithTitle(pixt, 100, 100, NULL, DISPLAY); pixDestroy(&pixs); pixDestroy(&pixt); #endif #if 1 /* Gray blend (inverse) */ pixs = pixRead("test24.jpg"); GrayBlend(pixs, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.6); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 100, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); GrayBlend(pixs, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.6); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 100, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); pixt = pixConvertRGBToLuminance(pixs); GrayBlend(pixt, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.6); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 32); pixDisplayWithTitle(pixt, 100, 100, NULL, DISPLAY); pixDestroy(&pixs); pixDestroy(&pixt); pixs = MakeGrayWash(1000, 120); GrayBlend(pixs, pixg, L_BLEND_GRAY_WITH_INVERSE, 0.3); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 200, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = MakeColorWash(1000, 120, COLOR_RED); GrayBlend(pixs, pixg, L_BLEND_GRAY_WITH_INVERSE, 1.0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 200, 100, NULL, DISPLAY); pixDestroy(&pixs); #endif #if 1 /* Adaptive gray blend */ pixs = pixRead("test24.jpg"); AdaptiveGrayBlend(pixs, pixg, 0.8); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 200, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); AdaptiveGrayBlend(pixs, pixg, 0.8); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 200, 100, NULL, DISPLAY); pixt = pixConvertRGBToLuminance(pixs); AdaptiveGrayBlend(pixt, pixg, 0.1); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 32); pixDisplayWithTitle(pixt, 200, 100, NULL, DISPLAY); pixDestroy(&pixs); pixDestroy(&pixt); pixs = MakeGrayWash(1000, 120); AdaptiveGrayBlend(pixs, pixg, 0.3); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 200, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = MakeColorWash(1000, 120, COLOR_RED); AdaptiveGrayBlend(pixs, pixg, 0.5); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 200, 100, NULL, DISPLAY); pixDestroy(&pixs); #endif #if 1 /* Color blend */ pixs = pixRead("test24.jpg"); ColorBlend(pixs, pixc, 0.3); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 300, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); ColorBlend(pixs, pixc, 0.30); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWithTitle(pixs, 300, 100, NULL, DISPLAY); pixDestroy(&pixs); pixs = pixRead("marge.jpg"); ColorBlend(pixs, pixc, 0.15); pixSaveTiled(pixs, pixa, 1.0, 0, 20, 32); pixDisplayWithTitle(pixs, 300, 100, NULL, DISPLAY); pixDestroy(&pixs); #endif /* Display results */ pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/junkblend.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pixg); pixDestroy(&pixt); pixDestroy(&pixc); return 0; } void GrayBlend(PIX *pixs, PIX *pixb, l_int32 op, l_float32 fract) { l_int32 i, j, wb, hb, ws, hs, delx, dely, x, y; pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixb, &wb, &hb, NULL); delx = wb + 30; dely = hb + 25; x = 200; y = 300; for (i = 0; i < 20; i++) { y = 20 + i * dely; if (y >= hs - hb) continue; for (j = 0; j < 20; j++) { x = 30 + j * delx; if (x >= ws - wb) continue; pixBlendGray(pixs, pixs, pixb, x, y, fract, op, 1, 255); } } pixDisplayWriteFormat(pixs, 1, IFF_PNG); } void AdaptiveGrayBlend(PIX *pixs, PIX *pixb, l_float32 fract) { l_int32 i, j, wb, hb, ws, hs, delx, dely, x, y; pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixb, &wb, &hb, NULL); delx = wb + 30; dely = hb + 25; x = 200; y = 300; for (i = 0; i < 20; i++) { y = 20 + i * dely; if (y >= hs - hb) continue; for (j = 0; j < 20; j++) { x = 30 + j * delx; if (x >= ws - wb) continue; pixBlendGrayAdapt(pixs, pixs, pixb, x, y, fract, 80); } } pixDisplayWriteFormat(pixs, 1, IFF_PNG); } void ColorBlend(PIX *pixs, PIX *pixb, l_float32 fract) { l_int32 i, j, wb, hb, ws, hs, delx, dely, x, y; pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixb, &wb, &hb, NULL); delx = wb + 30; dely = hb + 25; x = 200; y = 300; for (i = 0; i < 20; i++) { y = 20 + i * dely; if (y >= hs - hb) continue; for (j = 0; j < 20; j++) { x = 30 + j * delx; if (x >= ws - wb) continue; pixBlendColor(pixs, pixs, pixb, x, y, fract, 1, 255); } } pixDisplayWriteFormat(pixs, 1, IFF_PNG); } PIX * MakeGrayWash(l_int32 w, l_int32 h) { l_int32 i, j, wpl, val; l_uint32 *data, *line; PIX *pixd; pixd = pixCreate(w, h, 8); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = (j * 255) / w; SET_DATA_BYTE(line, j, val); } } return pixd; } PIX * MakeColorWash(l_int32 w, l_int32 h, l_int32 color) { l_int32 i, j, wpl; l_uint32 val; l_uint32 *data, *line; PIX *pixd; pixd = pixCreate(w, h, 32); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (color == COLOR_RED) val = ((j * 255) / w) << L_GREEN_SHIFT | ((j * 255) / w) << L_BLUE_SHIFT | 255 << L_RED_SHIFT; else if (color == COLOR_GREEN) val = ((j * 255) / w) << L_RED_SHIFT | ((j * 255) / w) << L_BLUE_SHIFT | 255 << L_GREEN_SHIFT; else val = ((j * 255) / w) << L_RED_SHIFT | ((j * 255) / w) << L_GREEN_SHIFT | 255 << L_BLUE_SHIFT; line[j] = val; } } return pixd; } leptonica-1.70/prog/weasel8.16g.nocmap.png0000444000175000017500000000310110400443670016371 0ustar dandan‰PNG  IHDRRI‹V. pHYsb&2óIDATxœ­˜k™#9EO÷Wb!-QH 9leZZFÂ\µ?¤´óå™ÙÝQÙ®²Jººñå·/þéñýGäc)ÿ×~“išwSßòOd ìø2™öû_ÇXâמ%¨/Õñ¥=ÄXdë7{ý?@ÚÕÑ2džLMPòl€L“€v˜—²€­`+¢€GÉ”øì_E¸v¬ÞAØ-(¥Ì‰ôh @¥À4ƒv ¹ÄcJÏéöPš jIÇ iÔÄâXRJñî9óoíh‹¿€”žÒ«ÍωGÜÆ|Á®õÁÆ3Ž#$Ì;"–𬴍EŸy9A†ºÙò …N"ƒÚ±½Ý­M+Gýè~±Ýÿ`ìÜIŒÃIBf"ZH r^ÅHÖÑŽ7ïsýÝcQR÷w¢ŸÍ<ùöxõP¾Ð¥[gÞßâhüa˂瓿0v?+2¯Äq¯izcC]~XªX‘5éó™!4ÒEŠø8˜FЧ@=7@[¸ùq# bWºü¾?%"Î;ß bYqá,»B¡Û3‡"·7jœ¨èä—[Hí5‚QËÁ0zI’kŒ`Øü¿Çx8°—Y6Tsš+zz´²•vª­«äàDó€ø<Øõ Üh˜¹ûSîeºŒÂÎý´½R‡W¾2Щô„|Öelô£]ʼnÇÃ?3CóÑß³Õk]ºB’aZqÍ嵨”IŸÉ2‡áuõã=dÇê7«V¦|Üq ÙJ¯˜[HfêAm«©c‰œßƒ –©™–ë‡ãtD•ê×A³©ÅáØ™žEfÔç¶è2Sœi‡u]öhÉ“­ˆ*ÕßEáaXj\™G$µŠpKQ“šý™û˜ÚabÔå j­¶™ÀþÄÐ[šg‹w–€pÏq`U€a·¿ƒÉIp™LºÄê–³K‡íG‡rÉÒ„ä$j2´$O7G´€4s1.2þ!)jÎDkÕ,ù´µ†ÍEíäÚ×=шB‰J6R"¢ü©ÊVÃn‹ÿðûÇ“àÏîP‚!èžUGvRkÓ§–G…vb©³à¯îl¿tP´îxÅ÷ 9¯YŽª-ÀÚ´]­Ï†Ì§ü&.£Ç°^Ëòc™W85Ér*ÙR}nð“­íÔÒ@Ý'Ó\î˜\ód†dä¶*%MÀZuà½:‘ÅHå9Õ†…¹»#zCk¹˜ç=ÇhM騝æ‘ֶܦiäu=ËÞ´©Œ/Âò4=êÖ´k«Õm|š0dgF´ÀoWðƒU“ôÎjçJ‚µÅÜÎF4‘>§~Lp]âá"j" këH!a)§n•Ró•ŵÞÓn/¸‹{Y<€™§QåÔ¢4Òtižm¥-¦Šÿο̥PrwÃÌ^)rÿÌ~eÛjKû‹xÜ(xKIÅ~>E­U>OÏžü¤Ë ¤Ný‹;®Hu¤5Õ¥Zºí.Ç^ý…({^š×ã"Ì£d¢¶hJ?.*k ë½ÑH æåßaòÀa±h–|NçbñöòÜãoÓf™dÞ,ƒh²’¾i® Ÿ–ÏŽöy{Ü‹›~“Ð{–2™ÉNabjdæ‡Bðë”(ß°üÞ·§'8€h)išH†¸s‘ï£ö¼AÔ ¤Æ1OÜ»bù±ÞÏmPm‚ň8× >‘¶ºü~¾¢¿$QÜ µˆ”/º ÐÓþ;–z^A´Þ9Tfˆp#Î÷:Щ!éö2tsuccess = FALSE; regTestCleanup(rp); return 1; } sela = selaAddDwaLinear(NULL); nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); /* --------- dilation ----------*/ pixt1 = pixDilate(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_DILATE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { fprintf(stderr, "dilations are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "dilations differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- erosion with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_ERODE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { fprintf(stderr, "erosions are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "erosions differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- erosion with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_ERODE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { fprintf(stderr, "erosions are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "erosions differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- opening with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixOpen(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_OPEN, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { fprintf(stderr, "openings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "openings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- opening with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixOpen(NULL, pixs, sel); pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_OPEN, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { fprintf(stderr, "openings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "openings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- safe closing with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixCloseSafe(NULL, pixs, sel); /* must use safe version */ pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_CLOSE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { fprintf(stderr, "closings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "closings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); /* --------- safe closing with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixClose(NULL, pixs, sel); /* safe version not required */ pixt2 = pixMorphDwa_3(NULL, pixs, L_MORPH_CLOSE, selname); pixEqual(pixt1, pixt2, &same); if (same == 1) { fprintf(stderr, "closings are identical for sel %d (%s)\n", i, selname); } else { rp->success = FALSE; fprintf(rp->fp, "closings differ for sel %d (%s)\n", i, selname); pixt3 = pixXor(NULL, pixt1, pixt2); pixCountPixels(pixt3, &xorcount, NULL); fprintf(rp->fp, "Number of pixels in XOR: %d\n", xorcount); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); } selaDestroy(&sela); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.70/prog/chars-10.tif0000444000175000017500000000534412226572724014513 0ustar dandanII*& & T?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈr`ÐþA]ÈrC`{È,¹w$ù ÎH†•‚j™‘Ò ´ä2¼†TÈ5Á šhrüŽÈöT#0PbN’  ò & ÓUâÈg˜FzøA¤ÚAž•P=$ŒL4ÒÂAšMÿ£yþ½+iú6mmt‚ ¤ßô–é6’N©6$•„sÐtmfL)pD•­ïJ»ÿõíú¶ÁtÝr:ÒZ«ÿ¯_éu¤Ø1Ee.?î¾—^“ÿ¯ÿª^ÆC)×¾žºôµþÿü}.©l#‹Õz㯭Uÿä~½¤•8Aõ_«Ò´¿¢#öé-*[Kýý%óv·_êA»’{úØ¡öéT—„TÃKþÕom$¨†/ÇÿÕ*âóz±V¿^Ä6+RA¥w¥ý.8UæÛÓ§ÿ`Å$ýØ_ú¡¸Aеa¶¾>ÃÑ„Á›—_Ô» zn|ÚH;E×üH’w×ô„:Xð›Ñ†Ø¯ ¾ðŒM[ü‚©rÄ¥î’AÚKÈ6ä“i_þ—é:[×I6ÿßÛÛü;×ýq4 Îë¸ýU‚qé%í¥ø¥úZþ’OXÿÿ·ÿÚZ]ú_Ï—ìU¯OéÊ!•uëëÿÿÛ]kú]du½/¬DØÿé%û¿Í‚ ¯]iZíÓ¥ÚIvWÖÚMÃü*jþ‘Èë뤞’ÖÕ}$¾Ðe×WÚZÚ[i?ôÿáém¤ØFñ¶¿¤ôk8a&ÒI´‚ i¯b) Ä&!0ºé­† b qL0‚VHXˆˆ0X†4ø¨¤„"BAŠÄ(,†@#ˆ‹iV""#þ•{¥¯Ý%X¶´;Ðí¥¶–#ÿÿÿÿÿÿÿÿÿÿÿÿù°Ur†C  ‚Øââù €" â#°UÓ²Ç Dd2@¿i¥ÌN<³P ‚åÁ APÈ92AÈ`‚(Ce$È.pAn0dŒ@ȇ „N‡hd1ÖAù2Q ÁÃG8†îá†Ði ÓTÓÓxGˆ99°rs #áªi§Ý4“ªÓGŒ4È4Ù/²ì‰0fÂA›ƒ `‚ G» C @Ù@² ,6‚.3‚ÃA‡ 0ƒ Á Ò›òæÂ6ø6“YÌ>Ð[íé7¶“{¤}÷ý[¦êiÐA¿Ð^ßúOÿ¥ÚÞo´ƒ}ÿÿi=í¤ÚZ_¤Ú{¯·þ—ÿ¥üºé^é^éÿëN“Ö—OM˯¥íõÒÿú\ºkßMþßÿþõß}¯äÈ:N·ûïŽ5_ú_ˮ޿¥þ#ÚÞ®“Ð¥…‡©î¾’õý/µöýÿÿzta{«I,,4¨ @Ÿ«é}ÿÿ¥ï^ßß÷¥ÚõtÚN©dà$íÅ=_Kùò#¯þ—ÚûézIÿþû«t–˜A %_ßJ·ÿ¯ý/zû÷ë}(½Zë¥øAT—¥pÁÿÿÿ ¾ÿoý/ÒeÕû^®šmRðA.\i}{ÄñÇÇúû¥íÿ„¿<ÙÐ3>ôêÿt–ÐAa†–—­Íÿü_ßíÿŸÿ@˜ß×¶Å%ˆ@„0ÒýkÁ¿çœ›?~ëÿüŽ †ÿuû_¬ ƒ .ºWßúzþo×·þ7îCRŸõjô›K ƒuéu}Þ¿öAÜŒý¿µöûÿìûW¯FK§ïÒCßëÿ‹ÿÛ÷¯oëëmÿzÕµJô¶_Õ+ÿñÇ Fì?µöý}vßÿëªoK A6í­K‡ûîÿû~õþþß·þÚWÞ¯Öd2Ë‚ ­´_„•ÿÒûÿöþ×ÛÿØßJõûh«öúÈ#íÿûy}ëÛÝvÒÛ!¡ÿXê4›Ò!‡Ã B ±•ô½ÿý½.?oºÿo®é®¿KÈ9aA®-*¿oKöÿý¿Úö6ÒÛKo_^&ô½0¡ƒ$Øi+é0È.>ý‡ÿíÿþÚ[i}ÖÚ_¤ß¯t-°—x$Ø\ÒÛÿöÿ¯v[ -»Kƒš}}%üãA4Є™ „ †a™”  ðƒa¡„Ýv$l0A$lWM$ÃA¡íPxM1 ÁLB@‚„‚ a„aA†!b‚ ¸„6¿ X kŠˆˆ0„DB"   Hˆ‹B.!DB &¼DG¡¡"":ZôƒÒ lqÒEÌ耵¨ÄÆ®ãÿÿÿÿÿÿÿÿÿÿÿÿùz^„†ÿ<G §d²v@’ Y« lã!—Ë„È+LH2y (!²ARÛç½4ŸWM?Ko¯ pt]Ãø8?ÿ¦¾ÿäÃ`ÿÿ0«ë´×‚ÿô“uþ#ÿÿúúÿÿúMÿÿÿÿkÿÿÿ¤õ—„³òø†Xää^á ¡Ëâ N_hÂÇ  rã `rr#‹äÿÛ‚!—< ÈeP!/<†U4) ù‘{M ƒ!•à©„,2S!³H0r試 ‘,ƒœº^¯ÿKž˜PŒ8Fæ‰Ã9¸ 1LA`©¦ ˜F`©¢çTa´N  0A‚Á…h ¸ŸÿÛÛ|»hÁÐAÐA°¨&´bï ½š1]¡ۢ턚Õ+ï¿@ôÕ$—ÿ¥ÐnÝ é:V Ø7³a B ƒƒè, Bl16“`ØmàÄWlÁúÓí+®¿ý[Þ›KW_Jëý/úÕºmzkÿoo¦ÒKÿë×^›÷§ý.šz~ý|qÿKOuÒK² ,…ÒoÞ†µÿÿÐ_þ—õÕÿ.©7MéVèþ" ê¿ÿÿ¯ÿïºüÌ ýÒoø­h%†1ƒKòÂ?øû¯øÿÿÿöÿÒm&®’oI Å~ÇÿæÁ§¥ÿ6ŸÿÿþÃýºÿmô›ÒH5úÿþõÿ·ÿÿÿ†ÿ×I½=%oJ‡õÿÿa„¿öÿÿúüþöý-½/Çô½+¾ðÄ/ý¿ÿ¿[ðÝ-}Þ•ÿÿÿ. öÿÿ®¿  wþþ›¤›}"#ÿþ½;«éíÿû¯¿ÿ«Ói]ë_ÿúWkzÿì?ÿºÒµúõ޵x¤—ÿì"ëtÙvÑulŠúûþý ›_[;ÃEÕ­¤›t¿ÿm-L0¬4­†Nk§¦ÃM0§m¥ &Â0¨4ê)нô®’ ÿìTºÅ*6 xA¸@Ápa†ÃAE1 8aÓPúua¼þ ˜BB؈ã#†A ›A0± Bi¡¡ÇüDDEˆâ8ˆˆÿa'þ¿òåÒ×ûÿÿÿÇëÒm.h ô—÷Kzº¯HJÄ]/È-㨎ÚIz¶  u†! “ µˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ@…]] Ô Ü (ÀÀleptonica-1.70/prog/wordboxes_reg.c0000644000175000017500000001315112240302331015460 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * wordboxes_reg.c */ #include "allheaders.h" void MakeWordBoxes1(PIX *pixs, l_int32 maxdil, L_REGPARAMS *rp); void MakeWordBoxes2(PIX *pixs, l_int32 reduction, L_REGPARAMS *rp); int main(int argc, char **argv) { BOX *box; PIX *pixt1, *pixt2, *pix1, *pix2, *pix3; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixt1 = pixRead("feyn.tif"); /* 300 ppi */ box = boxCreate(19, 774, 2247, 2025); pix1 = pixClipRectangle(pixt1, box, NULL); pixDestroy(&pixt1); pixt1 = pixRead("lucasta.150.jpg"); pixt2 = pixConvertTo1(pixt1, 128); /* 150 ppi */ pix2 = pixScale(pixt2, 2.2, 2.2); /* 300 ppi */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRead("zanotti-78.jpg"); pixt2 = pixConvertTo1(pixt1, 128); /* 150 ppi */ pix3 = pixScale(pixt2, 2.0, 2.0); /* 300 ppi */ pixDestroy(&pixt1); pixDestroy(&pixt2); boxDestroy(&box); /* Make word boxes using pixWordMaskByDilation() */ MakeWordBoxes1(pix1, 20, rp); /* 0 */ MakeWordBoxes1(pix2, 20, rp); /* 1 */ MakeWordBoxes1(pix3, 20, rp); /* 2 */ /* Make word boxes using the higher-level functions * pixGetWordsInTextlines() and pixGetWordBoxesInTextlines() */ MakeWordBoxes2(pix1, 1, rp); /* 3, 4 */ MakeWordBoxes2(pix2, 1, rp); /* 5, 6 */ MakeWordBoxes2(pix3, 1, rp); /* 7, 8 */ /* Make word boxes using the higher-level functions * pixGetWordsInTextlines() and pixGetWordBoxesInTextlines() */ MakeWordBoxes2(pix1, 2, rp); /* 9, 10 */ MakeWordBoxes2(pix2, 2, rp); /* 11, 12 */ MakeWordBoxes2(pix3, 2, rp); /* 13, 14 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return regTestCleanup(rp); } void MakeWordBoxes1(PIX *pixs, l_int32 maxdil, L_REGPARAMS *rp) { BOXA *boxa; PIX *pix1, *pixd; pixWordMaskByDilation(pixs, maxdil, &pix1, NULL); pixd = NULL; if (pix1) { boxa = pixConnComp(pix1, NULL, 8); pixd = pixConvertTo8(pixs, 1); pixRenderBoxaArb(pixd, boxa, 2, 255, 0, 0); boxaDestroy(&boxa); } regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 0, 100, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pixd); return; } void MakeWordBoxes2(PIX *pixs, l_int32 reduction, L_REGPARAMS *rp) { l_int32 default_minwidth = 10; l_int32 default_minheight = 10; l_int32 default_maxwidth = 400; l_int32 default_maxheight = 70; l_int32 minwidth, minheight, maxwidth, maxheight; BOXA *boxa1, *boxa2; NUMA *na; PIX *pixd1, *pixd2; PIXA *pixa; minwidth = default_minwidth / reduction; minheight = default_minheight / reduction; maxwidth = default_maxwidth / reduction; maxheight = default_maxheight / reduction; /* Get the word boxes */ pixGetWordsInTextlines(pixs, reduction, minwidth, minheight, maxwidth, maxheight, &boxa1, &pixa, &na); pixaDestroy(&pixa); numaDestroy(&na); if (reduction == 1) boxa2 = boxaCopy(boxa1, L_CLONE); else boxa2 = boxaTransform(boxa1, 0, 0, 2.0, 2.0); pixd1 = pixConvertTo8(pixs, 1); pixRenderBoxaArb(pixd1, boxa2, 2, 255, 0, 0); regTestWritePixAndCheck(rp, pixd1, IFF_PNG); pixDisplayWithTitle(pixd1, 800, 100, NULL, rp->display); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* Do it again with this interface. The result should be the same. */ pixGetWordBoxesInTextlines(pixs, reduction, minwidth, minheight, maxwidth, maxheight, &boxa1, NULL); if (reduction == 1) boxa2 = boxaCopy(boxa1, L_CLONE); else boxa2 = boxaTransform(boxa1, 0, 0, 2.0, 2.0); pixd2 = pixConvertTo8(pixs, 1); pixRenderBoxaArb(pixd2, boxa2, 2, 255, 0, 0); if (regTestComparePix(rp, pixd1, pixd2)) { L_ERROR("pix not the same", "MakeWordBoxes2"); pixDisplayWithTitle(pixd2, 800, 100, NULL, rp->display); } pixDestroy(&pixd1); pixDestroy(&pixd2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); return; } leptonica-1.70/prog/writetext_reg.c0000644000175000017500000001514312240302325015511 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * writetext_reg.c * * Regression test for writing a block of text in one of 4 locations * relative to a pix. This tests writing on 8 different types of images. * Output is written to /tmp/pixd[1,2,3,4].png */ #include "allheaders.h" void AddTextAndSave(PIXA *pixa, PIX *pixs, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val); const char *textstr[] = {"This is a simple test of text writing: 8 bpp", "This is a simple test of text writing: 32 bpp", "This is a simple test of text writing: 8 bpp cmapped", "This is a simple test of text writing: 4 bpp cmapped", "This is a simple test of text writing: 4 bpp", "This is a simple test of text writing: 2 bpp cmapped", "This is a simple test of text writing: 2 bpp", "This is a simple test of text writing: 1 bpp"}; const char *topstr[] = {"Text is added above each image", "Text is added over the top of each image", "Text is added over the bottom of each image", "Text is added below each image"}; const l_int32 loc[] = {1, 5, 6, 2}; const l_uint32 colors[6] = {0x4090e000, 0x40e09000, 0x9040e000, 0x90e04000, 0xe0409000, 0xe0904000}; int main(int argc, char **argv) { char buf[512]; l_int32 i; L_BMF *bmf, *bmftop; PIX *pixs, *pixt, *pixd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa; L_REGPARAMS *rp; SARRAY *sa; if (regTestSetup(argc, argv, &rp)) return 1; bmf = bmfCreate("./fonts", 6); bmftop = bmfCreate("./fonts", 10); pixs = pixRead("lucasta-47.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); /* 8 bpp grayscale */ pix2 = pixConvertTo32(pix1); /* 32 bpp rgb */ pix3 = pixThresholdOn8bpp(pix1, 12, 1); /* 8 bpp cmapped */ pix4 = pixThresholdTo4bpp(pix1, 10, 1); /* 4 bpp cmapped */ pix5 = pixThresholdTo4bpp(pix1, 10, 0); /* 4 bpp not cmapped */ pix6 = pixThresholdTo2bpp(pix1, 3, 1); /* 2 bpp cmapped */ pix7 = pixThresholdTo2bpp(pix1, 3, 0); /* 2 bpp not cmapped */ pix8 = pixThresholdToBinary(pix1, 160); /* 1 bpp */ for (i = 0; i < 4; i++) { pixa = pixaCreate(0); AddTextAndSave(pixa, pix1, bmf, textstr[0], loc[i], 800); AddTextAndSave(pixa, pix2, bmf, textstr[1], loc[i], 0xff000000); AddTextAndSave(pixa, pix3, bmf, textstr[2], loc[i], 0x00ff0000); AddTextAndSave(pixa, pix4, bmf, textstr[3], loc[i], 0x0000ff00); AddTextAndSave(pixa, pix5, bmf, textstr[4], loc[i], 800); AddTextAndSave(pixa, pix6, bmf, textstr[5], loc[i], 0xff000000); AddTextAndSave(pixa, pix7, bmf, textstr[6], loc[i], 800); AddTextAndSave(pixa, pix8, bmf, textstr[7], loc[i], 800); pixt = pixaDisplay(pixa, 0, 0); pixd = pixAddSingleTextblock(pixt, bmftop, topstr[i], 0xff00ff00, L_ADD_ABOVE, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 - 4 */ pixDisplayWithTitle(pixd, 50 * i, 50, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixd); pixaDestroy(&pixa); } pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); bmfDestroy(&bmf); bmfDestroy(&bmftop); /* Write multiple lines in different colors, filling up * the colormap and requesting even more colors. */ pixs = pixRead("weasel4.11c.png"); pix1 = pixConvertTo8(pixs, 0); pix2 = pixScale(pixs, 8.0, 8.0); pix3 = pixQuantFromCmap(pix2, pixGetColormap(pixs), 4, 5, L_EUCLIDEAN_DISTANCE); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix3, 0, 500, NULL, rp->display); bmf = bmfCreate("fonts", 10); sa = sarrayCreate(6); for (i = 0; i < 6; i++) { snprintf(buf, sizeof(buf), "This is textline %d\n", i); sarrayAddString(sa, buf, L_COPY); } for (i = 0; i < 6; i++) { pixSetTextline(pix3, bmf, sarrayGetString(sa, i, L_NOCOPY), colors[i], 50, 120 + 60 * i, NULL, NULL); } regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix3, 600, 500, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); bmfDestroy(&bmf); sarrayDestroy(&sa); return regTestCleanup(rp); } void AddTextAndSave(PIXA *pixa, PIX *pixs, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val) { l_int32 n, newrow, ovf; PIX *pixt; pixt = pixAddSingleTextblock(pixs, bmf, textstr, val, location, &ovf); n = pixaGetCount(pixa); newrow = (n % 4) ? 0 : 1; pixSaveTiledOutline(pixt, pixa, 1, newrow, 30, 2, 32); if (ovf) fprintf(stderr, "Overflow writing text in image %d\n", n + 1); pixDestroy(&pixt); return; } leptonica-1.70/prog/graymorph1_reg.c0000644000175000017500000002752012270122643015553 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * graymorph1_reg.c * * (1) Tests the interpreter for grayscale morphology, as * given in morphseq.c * * (2) Tests composite operations: tophat and hdome * * (3) Tests duality for grayscale erode/dilate, open/close, * and black/white tophat * * (4) Demonstrates closing plus white tophat. Note that this * combination of operations can be quite useful. * * (5) Demonstrates a method of doing contrast enhancement * by taking 3 * pixs and subtracting from this the * closing and opening of pixs. Do this both with the * basic pix accumulation functions and with the cleaner * Pixacc wrapper. Verify the results are equivalent. * * (6) Playing around: extract the feynman diagrams from * the stamp, using the tophat. * * For input, use e.g., aneurisms8.jpg */ #include "allheaders.h" #define WSIZE 7 #define HSIZE 7 #define BUF_SIZE 512 #define HORIZ_SEP 0 /* set to 50 to display each image */ static void pixCompare(PIX *pix, PIX *pix2, const char *msg1, const char *msg2); int main(int argc, char **argv) { char dilateseq[BUF_SIZE], erodeseq[BUF_SIZE]; char openseq[BUF_SIZE], closeseq[BUF_SIZE]; char wtophatseq[BUF_SIZE], btophatseq[BUF_SIZE]; char *filein; l_int32 w, h, d; PIX *pixs, *pixt, *pixt2, *pixt3, *pixt3a, *pixt4; PIX *pixg, *pixd, *pixd1, *pixd2, *pixd3; PIXACC *pacc; PIXCMAP *cmap; static char mainName[] = "graymorph1_reg"; if (argc != 2) return ERROR_INT(" Syntax: graymorph1_reg filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return ERROR_INT("pixs not 8 bpp", mainName, 1); /* -------- Test gray morph, including interpreter ------------ */ pixd = pixDilateGray(pixs, WSIZE, HSIZE); sprintf(dilateseq, "D%d.%d", WSIZE, HSIZE); pixg = pixGrayMorphSequence(pixs, dilateseq, HORIZ_SEP, 0); pixCompare(pixd, pixg, "results are the same", "results are different" ); pixDestroy(&pixg); pixDestroy(&pixd); pixd = pixErodeGray(pixs, WSIZE, HSIZE); sprintf(erodeseq, "E%d.%d", WSIZE, HSIZE); pixg = pixGrayMorphSequence(pixs, erodeseq, HORIZ_SEP, 100); pixCompare(pixd, pixg, "results are the same", "results are different" ); pixDestroy(&pixg); pixDestroy(&pixd); pixd = pixOpenGray(pixs, WSIZE, HSIZE); sprintf(openseq, "O%d.%d", WSIZE, HSIZE); pixg = pixGrayMorphSequence(pixs, openseq, HORIZ_SEP, 200); pixCompare(pixd, pixg, "results are the same", "results are different" ); pixDestroy(&pixg); pixDestroy(&pixd); pixd = pixCloseGray(pixs, WSIZE, HSIZE); sprintf(closeseq, "C%d.%d", WSIZE, HSIZE); pixg = pixGrayMorphSequence(pixs, closeseq, HORIZ_SEP, 300); pixCompare(pixd, pixg, "results are the same", "results are different" ); pixDestroy(&pixg); pixDestroy(&pixd); pixd = pixTophat(pixs, WSIZE, HSIZE, L_TOPHAT_WHITE); sprintf(wtophatseq, "Tw%d.%d", WSIZE, HSIZE); pixg = pixGrayMorphSequence(pixs, wtophatseq, HORIZ_SEP, 400); pixCompare(pixd, pixg, "results are the same", "results are different" ); pixDestroy(&pixg); pixDestroy(&pixd); pixd = pixTophat(pixs, WSIZE, HSIZE, L_TOPHAT_BLACK); sprintf(btophatseq, "Tb%d.%d", WSIZE, HSIZE); pixg = pixGrayMorphSequence(pixs, btophatseq, HORIZ_SEP, 500); pixCompare(pixd, pixg, "results are the same", "results are different" ); pixDestroy(&pixg); /* ------------- Test erode/dilate duality -------------- */ pixd = pixDilateGray(pixs, WSIZE, HSIZE); pixInvert(pixs, pixs); pixd2 = pixErodeGray(pixs, WSIZE, HSIZE); pixInvert(pixd2, pixd2); pixCompare(pixd, pixd2, "results are the same", "results are different" ); pixDestroy(&pixd); pixDestroy(&pixd2); /* ------------- Test open/close duality -------------- */ pixd = pixOpenGray(pixs, WSIZE, HSIZE); pixInvert(pixs, pixs); pixd2 = pixCloseGray(pixs, WSIZE, HSIZE); pixInvert(pixd2, pixd2); pixCompare(pixd, pixd2, "results are the same", "results are different" ); pixDestroy(&pixd); pixDestroy(&pixd2); /* ------------- Test tophat duality -------------- */ pixd = pixTophat(pixs, WSIZE, HSIZE, L_TOPHAT_WHITE); pixInvert(pixs, pixs); pixd2 = pixTophat(pixs, WSIZE, HSIZE, L_TOPHAT_BLACK); pixCompare(pixd, pixd2, "Correct: images are duals", "Error: images are not duals" ); pixDestroy(&pixd); pixDestroy(&pixd2); pixInvert(pixs, pixs); pixd = pixGrayMorphSequence(pixs, "Tw9.5", HORIZ_SEP, 100); pixInvert(pixs, pixs); pixd2 = pixGrayMorphSequence(pixs, "Tb9.5", HORIZ_SEP, 300); pixCompare(pixd, pixd2, "Correct: images are duals", "Error: images are not duals" ); pixDestroy(&pixd); pixDestroy(&pixd2); /* ------------- Test opening/closing for large sels -------------- */ pixd = pixGrayMorphSequence(pixs, "C9.9 + C19.19 + C29.29 + C39.39 + C49.49", HORIZ_SEP, 100); pixDestroy(&pixd); pixd = pixGrayMorphSequence(pixs, "O9.9 + O19.19 + O29.29 + O39.39 + O49.49", HORIZ_SEP, 400); pixDestroy(&pixd); /* ---------- Closing plus white tophat result ------------ * * Parameters: wsize, hsize = 9, 29 * * ---------------------------------------------------------*/ pixd = pixCloseGray(pixs, 9, 9); pixd1 = pixTophat(pixd, 9, 9, L_TOPHAT_WHITE); pixd2 = pixGrayMorphSequence(pixs, "C9.9 + TW9.9", HORIZ_SEP, 0); pixCompare(pixd1, pixd2, "correct: same", "wrong: different"); pixd3 = pixMaxDynamicRange(pixd1, L_LINEAR_SCALE); pixDisplayWrite(pixd3, 1); pixDestroy(&pixd); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); pixd = pixCloseGray(pixs, 29, 29); pixd1 = pixTophat(pixd, 29, 29, L_TOPHAT_WHITE); pixd2 = pixGrayMorphSequence(pixs, "C29.29 + Tw29.29", HORIZ_SEP, 0); pixCompare(pixd1, pixd2, "correct: same", "wrong: different"); pixd3 = pixMaxDynamicRange(pixd1, L_LINEAR_SCALE); pixDisplayWrite(pixd3, 1); pixDestroy(&pixd); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); /* --------- hdome with parameter height = 100 ------------*/ pixd = pixHDome(pixs, 100, 4); pixd2 = pixMaxDynamicRange(pixd, L_LINEAR_SCALE); pixDisplayWrite(pixd2, 1); pixDestroy(&pixd2); /* ----- Contrast enhancement with morph parameters 9, 9 -------*/ pixd1 = pixInitAccumulate(w, h, 0x8000); pixAccumulate(pixd1, pixs, L_ARITH_ADD); pixMultConstAccumulate(pixd1, 3., 0x8000); pixd2 = pixOpenGray(pixs, 9, 9); pixAccumulate(pixd1, pixd2, L_ARITH_SUBTRACT); pixDestroy(&pixd2); pixd2 = pixCloseGray(pixs, 9, 9); pixAccumulate(pixd1, pixd2, L_ARITH_SUBTRACT); pixDestroy(&pixd2); pixd = pixFinalAccumulate(pixd1, 0x8000, 8); pixDisplayWrite(pixd, 1); pixDestroy(&pixd1); /* Do the same thing with the Pixacc */ pacc = pixaccCreate(w, h, 1); pixaccAdd(pacc, pixs); pixaccMultConst(pacc, 3.); pixd1 = pixOpenGray(pixs, 9, 9); pixaccSubtract(pacc, pixd1); pixDestroy(&pixd1); pixd1 = pixCloseGray(pixs, 9, 9); pixaccSubtract(pacc, pixd1); pixDestroy(&pixd1); pixd2 = pixaccFinal(pacc, 8); pixaccDestroy(&pacc); pixDisplayWrite(pixd2, 1); pixCompare(pixd, pixd2, "Correct: same", "Wrong: different"); pixDestroy(&pixd); pixDestroy(&pixd2); /* ---- Tophat result on feynman stamp, to extract diagrams ----- */ pixDestroy(&pixs); pixs = pixRead("feynman-stamp.jpg"); /* Make output image to hold five intermediate images */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); pixd = pixCreate(5 * w + 18, h + 6, 32); /* composite output image */ pixSetAllArbitrary(pixd, 0x0000ff00); /* set to blue */ /* Paste in the input image */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixRasterop(pixd, 3, 3, w, h, PIX_SRC, pixt, 0, 0); /* 1st one */ /* pixWrite("/tmp/junkgray.jpg", pixt, IFF_JFIF_JPEG); */ pixDestroy(&pixt); /* Paste in the grayscale version */ cmap = pixGetColormap(pixs); if (cmap) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixt = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); pixt2 = pixConvertTo32(pixt); /* 8 --> 32 bpp */ pixRasterop(pixd, w + 6, 3, w, h, PIX_SRC, pixt2, 0, 0); /* 2nd one */ pixDestroy(&pixt2); /* Paste in a log dynamic range scaled version of the white tophat */ pixt2 = pixTophat(pixt, 3, 3, L_TOPHAT_WHITE); pixt3a = pixMaxDynamicRange(pixt2, L_LOG_SCALE); pixt3 = pixConvertTo32(pixt3a); pixRasterop(pixd, 2 * w + 9, 3, w, h, PIX_SRC, pixt3, 0, 0); /* 3rd */ /* pixWrite("/tmp/junktophat.jpg", pixt2, IFF_JFIF_JPEG); */ pixDestroy(&pixt3); pixDestroy(&pixt3a); pixDestroy(&pixt); /* Stretch the range and threshold to binary; paste it in */ pixt3a = pixGammaTRC(NULL, pixt2, 1.0, 0, 80); pixt3 = pixThresholdToBinary(pixt3a, 70); pixt4 = pixConvertTo32(pixt3); pixRasterop(pixd, 3 * w + 12, 3, w, h, PIX_SRC, pixt4, 0, 0); /* 4th */ /* pixWrite("/tmp/junkbin.png", pixt3, IFF_PNG); */ pixDestroy(&pixt2); pixDestroy(&pixt3a); pixDestroy(&pixt4); /* Invert; this is the final result */ pixInvert(pixt3, pixt3); pixt4 = pixConvertTo32(pixt3); pixRasterop(pixd, 4 * w + 15, 3, w, h, PIX_SRC, pixt4, 0, 0); /* 5th */ pixWrite("/tmp/junkbininvert.png", pixt3, IFF_PNG); pixDisplayWrite(pixd, 1); /* pixWrite("/tmp/junkall.jpg", pixd, IFF_JFIF_JPEG); */ pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixd); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pixs); return 0; } /* simple comparison function */ static void pixCompare(PIX *pix1, PIX *pix2, const char *msg1, const char *msg2) { l_int32 same; pixEqual(pix1, pix2, &same); if (same) { fprintf(stderr, "%s\n", msg1); pixDisplayWrite(pix1, 1); } else { fprintf(stderr, "%s\n", msg2); pixDisplayWrite(pix1, 1); pixDisplayWrite(pix2, 1); } return; } leptonica-1.70/prog/pixaatest.c0000644000175000017500000001016112242265777014637 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixaatest.c * * Syntax: pixaatest */ #include "allheaders.h" static const l_int32 nx = 10; static const l_int32 ny = 12; static const l_int32 ncols = 3; int main(int argc, char **argv) { l_int32 w, d, tilewidth; PIX *pixs; PIXA *pixa, *pixad1, *pixad2; PIXAA *pixaa1, *pixaa2; static char mainName[] = "pixaatest"; if (argc != 1) return ERROR_INT(" Syntax: pixaatest", mainName, 1); /* Read in file, split it into a set of tiles, and generate a pdf. * Two things to note for these tiny images: * (1) If you use dct format (jpeg) for each image instead of * flate (lossless), the quantization will be apparent. * (2) If the resolution in pixaConvertToPdf() is above 50, and * you add a red boundary, you will see errors in the boundary * width. */ pixs = pixRead("test24.jpg"); pixGetDimensions(pixs, &w, NULL, &d); pixa = pixaSplitPix(pixs, nx, ny, 0, 0); /* pixa = pixaSplitPix(pixs, nx, ny, 2, 0xff000000); */ /* red border */ pixWrite("/tmp/junk0", pixa->pix[0], IFF_PNG); pixWrite("/tmp/junk9", pixa->pix[9], IFF_PNG); pixaConvertToPdf(pixa, 50, 1.0, 0, 95, "individual", "/tmp/junkout0.pdf"); /* Generate two pixaa by sampling the pixa, and write them to file */ pixaa1 = pixaaCreateFromPixa(pixa, nx, L_CHOOSE_CONSECUTIVE, L_CLONE); pixaa2 = pixaaCreateFromPixa(pixa, nx, L_CHOOSE_SKIP_BY, L_CLONE); pixaaWrite("/tmp/pixaa1.paa", pixaa1); pixaaWrite("/tmp/pixaa2.paa", pixaa2); pixaDestroy(&pixa); pixaaDestroy(&pixaa1); pixaaDestroy(&pixaa2); /* Read each pixaa from file; tile/scale into a pixa */ pixaa1 = pixaaRead("/tmp/pixaa1.paa"); pixaa2 = pixaaRead("/tmp/pixaa2.paa"); tilewidth = w / nx; pixad1 = pixaaDisplayTiledAndScaled(pixaa1, d, tilewidth, ncols, 0, 10, 0); pixad2 = pixaaDisplayTiledAndScaled(pixaa2, d, tilewidth, ncols, 0, 10, 0); /* Generate a pdf from each pixa */ pixaConvertToPdf(pixad1, 50, 1.0, 0, 75, "consecutive", "/tmp/junkout1.pdf"); pixaConvertToPdf(pixad2, 50, 1.0, 0, 75, "skip_by", "/tmp/junkout2.pdf"); /* Write each pixa to a set of files, and generate a PS */ pixaWriteFiles("/tmp/junksplit1.", pixad1, IFF_JFIF_JPEG); pixaWriteFiles("/tmp/junksplit2.", pixad2, IFF_JFIF_JPEG); convertFilesToPS("/tmp", "junksplit1", 40, "/tmp/junkout1.ps"); convertFilesToPS("/tmp", "junksplit2", 40, "/tmp/junkout2.ps"); pixDestroy(&pixs); pixaaDestroy(&pixaa1); pixaaDestroy(&pixaa2); pixaDestroy(&pixad1); pixaDestroy(&pixad2); return 0; } leptonica-1.70/prog/equal_reg.c0000644000175000017500000002175512244775437014615 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * equal_reg.c * * Tests the pixEqual() function in many situations. * * This also tests the quantization of grayscale and color * images (to generate a colormapped image), and removal of * the colormap to either RGB or grayscale. */ #include "allheaders.h" /* use this set */ #define FEYN1 "feyn.tif" /* 1 bpp */ #define DREYFUS2 "dreyfus2.png" /* 2 bpp cmapped */ #define DREYFUS4 "dreyfus4.png" /* 4 bpp cmapped */ #define DREYFUS8 "dreyfus8.png" /* 8 bpp cmapped */ #define KAREN8 "karen8.jpg" /* 8 bpp, not cmapped */ #define MARGE32 "marge.jpg" /* rgb */ int main(int argc, char **argv) { l_int32 errorfound, same; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; static char mainName[] = "equal_reg"; if (argc != 1) return ERROR_INT(" Syntax: equal_reg", mainName, 1); errorfound = FALSE; pixs = pixRead(FEYN1); pixWrite("/tmp/junkfeyn.png", pixs, IFF_PNG); pixt1 = pixRead("/tmp/junkfeyn.png"); pixEqual(pixs, pixt1, &same); if (same) L_INFO("equal for feyn1\n", mainName); else { L_INFO("FAILURE for equal for feyn1\n", mainName); errorfound = TRUE; } pixDestroy(&pixs); pixDestroy(&pixt1); pixs = pixRead(DREYFUS2); pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixWrite("/tmp/junkdrey2-1.png", pixt1, IFF_PNG); pixt2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixWrite("/tmp/junkdrey2-2.png", pixt2, IFF_PNG); pixt3 = pixOctreeQuantNumColors(pixt2, 64, 1); pixWrite("/tmp/junkdrey2-3.png", pixt3, IFF_PNG); pixt4 = pixConvertRGBToColormap(pixt2, 1); pixWrite("/tmp/junkdrey2-4.png", pixt4, IFF_PNG); pixEqual(pixs, pixt1, &same); if (same) { L_INFO("equal for pixt1 of dreyfus2\n", mainName); } else { L_INFO("FAILURE for pixt1 of dreyfus2\n", mainName); errorfound = TRUE; } pixEqual(pixs, pixt2, &same); if (same) { L_INFO("equal for pixt2 of dreyfus2\n", mainName); } else { L_INFO("FAILURE for pixt2 of dreyfus2\n", mainName); errorfound = TRUE; } pixEqual(pixs, pixt3, &same); if (same) { L_INFO("equal for pixt3 of dreyfus2\n", mainName); } else { L_INFO("FAILURE for pixt3 of dreyfus2\n", mainName); errorfound = TRUE; } pixEqual(pixs, pixt4, &same); if (same) { L_INFO("equal for pixt4 of dreyfus2\n", mainName); } else { L_INFO("FAILURE for pixt4 of dreyfus2\n", mainName); errorfound = TRUE; } pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixs = pixRead(DREYFUS4); pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixWrite("/tmp/junkdrey4-1.png", pixt1, IFF_PNG); pixt2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixWrite("/tmp/junkdrey4-2.png", pixt2, IFF_PNG); pixt3 = pixOctreeQuantNumColors(pixt2, 256, 1); pixWrite("/tmp/junkdrey4-3.png", pixt3, IFF_PNG); pixt4 = pixConvertRGBToColormap(pixt2, 1); pixWrite("/tmp/junkdrey4-4.png", pixt4, IFF_PNG); pixEqual(pixs, pixt1, &same); if (same) { L_INFO("equal for pixt1 of dreyfus4\n", mainName); } else { L_INFO("FAILURE for pixt1 of dreyfus4\n", mainName); errorfound = TRUE; } pixEqual(pixs, pixt2, &same); if (same) { L_INFO("equal for pixt2 of dreyfus4\n", mainName); } else { L_INFO("FAILURE for pixt2 of dreyfus4\n", mainName); errorfound = TRUE; } pixEqual(pixs, pixt3, &same); if (same) { L_INFO("equal for pixt3 of dreyfus4\n", mainName); } else { L_INFO("FAILURE for pixt3 of dreyfus4\n", mainName); errorfound = TRUE; } pixEqual(pixs, pixt4, &same); if (same) { L_INFO("equal for pixt4 of dreyfus4\n", mainName); } else { L_INFO("FAILURE for pixt4 of dreyfus4\n", mainName); errorfound = TRUE; } pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixs = pixRead(DREYFUS8); pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixWrite("/tmp/junkdrey8-1.png", pixt1, IFF_PNG); pixt2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixWrite("/tmp/junkdrey8-2.png", pixt2, IFF_PNG); pixt3 = pixConvertRGBToColormap(pixt2, 1); pixWrite("/tmp/junkdrey8-3.png", pixt3, IFF_PNG); pixEqual(pixs, pixt1, &same); if (same) { L_INFO("equal for pixt1 of dreyfus8\n", mainName); } else { L_INFO("FAILURE for pixt1 of dreyfus8\n", mainName); errorfound = TRUE; } pixEqual(pixs, pixt2, &same); if (same) { L_INFO("equal for pixt2 of dreyfus8\n", mainName); } else { L_INFO("FAILURE for pixt2 of dreyfus8\n", mainName); errorfound = TRUE; } pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixs = pixRead(KAREN8); pixt1 = pixThresholdTo4bpp(pixs, 16, 1); pixWrite("/tmp/junkkar8-1.png", pixt1, IFF_PNG); pixt2 = pixRemoveColormap(pixt1, REMOVE_CMAP_BASED_ON_SRC); pixWrite("/tmp/junkkar8-2.png", pixt2, IFF_PNG); pixt3 = pixRemoveColormap(pixt1, REMOVE_CMAP_TO_FULL_COLOR); pixWrite("/tmp/junkkar8-3.png", pixt3, IFF_PNG); pixt4 = pixConvertRGBToColormap(pixt3, 1); pixEqual(pixt1, pixt2, &same); if (same) { L_INFO("equal for pixt2 of karen8\n", mainName); } else { L_INFO("FAILURE for pixt2 of karen8\n", mainName); errorfound = TRUE; } pixEqual(pixt1, pixt3, &same); if (same) { L_INFO("equal for pixt3 of karen8\n", mainName); } else { L_INFO("FAILURE for pixt3 of karen8\n", mainName); errorfound = TRUE; } pixEqual(pixt1, pixt4, &same); if (same) { L_INFO("equal for pixt4 of karen8\n", mainName); } else { L_INFO("FAILURE for pixt4 of karen8\n", mainName); errorfound = TRUE; } pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixs = pixRead(MARGE32); pixt1 = pixOctreeQuantNumColors(pixs, 32, 0); pixWrite("/tmp/junkmarge8-1.png", pixt1, IFF_PNG); pixt2 = pixRemoveColormap(pixt1, REMOVE_CMAP_TO_FULL_COLOR); pixWrite("/tmp/junkmarge8-2.png", pixt2, IFF_PNG); pixt3 = pixConvertRGBToColormap(pixt2, 1); pixWrite("/tmp/junkmarge8-3.png", pixt3, IFF_PNG); pixt4 = pixOctreeQuantNumColors(pixt2, 64, 0); pixWrite("/tmp/junkmarge8-4.png", pixt4, IFF_PNG); pixEqual(pixt1, pixt2, &same); if (same) { L_INFO("equal for pixt2 of marge32\n", mainName); } else { L_INFO("FAILURE for pixt2 of marge32\n", mainName); errorfound = TRUE; } pixEqual(pixt1, pixt3, &same); if (same) { L_INFO("equal for pixt3 of marge32\n", mainName); } else { L_INFO("FAILURE for pixt3 of marge32\n", mainName); errorfound = TRUE; } pixEqual(pixt1, pixt4, &same); if (same) { L_INFO("equal for pixt4 of marge32\n", mainName); } else { L_INFO("FAILURE for pixt4 of marge32\n", mainName); errorfound = TRUE; } pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); if (errorfound) L_INFO("FAILURE in processing this test\n", mainName); else L_INFO("SUCCESS in processing this test\n", mainName); return 0; } leptonica-1.70/prog/lineremoval.c0000640000175000017500000001002212270122643015123 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * lineremoval.c * * Use with dave-orig.png */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_float32 angle, conf, deg2rad; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; PIX *pix6, *pix7, *pix8, *pix9; static char mainName[] = "lineremoval"; if (argc != 2) return ERROR_INT(" Syntax: lineremoval filein", mainName, 1); filein = argv[1]; deg2rad = 3.14159 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); /* threshold to binary, extracting much of the lines */ pix1 = pixThresholdToBinary(pixs, 170); pixWrite("/tmp/dave-proc1.png", pix1, IFF_PNG); pixDisplayWrite(pix1, 1); /* find the skew angle and deskew using an interpolated * rotator for anti-aliasing (to avoid jaggies) */ pixFindSkew(pix1, &angle, &conf); pix2 = pixRotateAMGray(pixs, deg2rad * angle, 255); pixWrite("/tmp/dave-proc2.png", pix2, IFF_PNG); pixDisplayWrite(pix2, 1); /* extract the lines to be removed */ pix3 = pixCloseGray(pix2, 51, 1); pixWrite("/tmp/dave-proc3.png", pix3, IFF_PNG); pixDisplayWrite(pix3, 1); /* solidify the lines to be removed */ pix4 = pixErodeGray(pix3, 1, 5); pixWrite("/tmp/dave-proc4.png", pix4, IFF_PNG); pixDisplayWrite(pix4, 1); /* clean the background of those lines */ pix5 = pixThresholdToValue(NULL, pix4, 210, 255); pixWrite("/tmp/dave-proc5.png", pix5, IFF_PNG); pixDisplayWrite(pix5, 1); pix6 = pixThresholdToValue(NULL, pix5, 200, 0); pixWrite("/tmp/dave-proc6.png", pix6, IFF_PNG); pixDisplayWrite(pix6, 1); /* get paint-through mask for changed pixels */ pix7 = pixThresholdToBinary(pix6, 210); pixWrite("/tmp/dave-proc7.png", pix7, IFF_PNG); pixDisplayWrite(pix7, 1); /* add the inverted, cleaned lines to orig. Because * the background was cleaned, the inversion is 0, * so when you add, it doesn't lighten those pixels. * It only lightens (to white) the pixels in the lines! */ pixInvert(pix6, pix6); pix8 = pixAddGray(NULL, pix2, pix6); pixWrite("/tmp/dave-proc8.png", pix8, IFF_PNG); pixDisplayWrite(pix8, 1); pix9 = pixOpenGray(pix8, 1, 9); pixWrite("/tmp/dave-proc9.png", pix9, IFF_PNG); pixDisplayWrite(pix9, 1); pixCombineMasked(pix8, pix9, pix7); pixWrite("/tmp/dave-result.png", pix8, IFF_PNG); pixDisplayWrite(pix8, 1); pixDisplayMultiple("/tmp/display/file*"); return 0; } leptonica-1.70/prog/psio_reg.c0000644000175000017500000002262312240302616014430 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * psio_reg.c * * Tests writing of images in PS, with arbitrary scaling and * translation, in the following formats: * * - uncompressed * - DCT compressed (jpeg for 8 bpp grayscale and RGB) * - CCITT-G4 compressed (g4 fax compression for 1 bpp) * - Flate compressed (gzip compression) */ #include "allheaders.h" char *WeaselNames[] = {(char *)"weasel2.4c.png", (char *)"weasel2.4g.png", (char *)"weasel2.png", (char *)"weasel4.11c.png", (char *)"weasel4.8g.png", (char *)"weasel4.16g.png", (char *)"weasel8.16g.png", (char *)"weasel8.149g.png", (char *)"weasel8.240c.png", (char *)"weasel8.png", (char *)"weasel32.png"}; int main(int argc, char **argv) { l_int32 i, w, h; l_float32 factor, scale; BOX *box; FILE *fp1; PIX *pixs, *pixt; PIXA *pixa; SARRAY *sa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; factor = 0.95; /* Uncompressed PS with scaling but centered on the page */ pixs = pixRead("feyn-fract.tif"); pixGetDimensions(pixs, &w, &h, NULL); scale = L_MIN(factor * 2550 / w, factor * 3300 / h); fp1 = lept_fopen("/tmp/psio0.ps", "wb+"); pixWriteStreamPS(fp1, pixs, NULL, 300, scale); lept_fclose(fp1); regTestCheckFile(rp, "/tmp/psio0.ps"); /* 0 */ pixDestroy(&pixs); /* Uncompressed PS with scaling, with LL corner at (1500, 1500) mils */ pixs = pixRead("weasel4.11c.png"); pixGetDimensions(pixs, &w, &h, NULL); scale = L_MIN(factor * 2550 / w, factor * 3300 / h); box = boxCreate(1500, 1500, (l_int32)(1000 * scale * w / 300), (l_int32)(1000 * scale * h / 300)); fp1 = lept_fopen("/tmp/psio1.ps", "wb+"); pixWriteStreamPS(fp1, pixs, box, 300, 1.0); lept_fclose(fp1); regTestCheckFile(rp, "/tmp/psio1.ps"); /* 1 */ boxDestroy(&box); pixDestroy(&pixs); /* DCT compressed PS with LL corner at (300, 1000) pixels */ pixs = pixRead("marge.jpg"); pixt = pixConvertTo32(pixs); pixWrite("/tmp/psio2.jpg", pixt, IFF_JFIF_JPEG); convertJpegToPS("/tmp/psio2.jpg", "/tmp/psio3.ps", "w", 300, 1000, 0, 4.0, 1, 1); regTestCheckFile(rp, "/tmp/psio2.jpg"); /* 2 */ regTestCheckFile(rp, "/tmp/psio3.ps"); /* 3 */ pixDestroy(&pixt); pixDestroy(&pixs); /* For each page, apply tiff g4 image first; then jpeg or png over it */ convertG4ToPS("feyn.tif", "/tmp/psio4.ps", "w", 0, 0, 0, 1.0, 1, 1, 0); convertJpegToPS("marge.jpg", "/tmp/psio4.ps", "a", 500, 100, 300, 2.0, 1, 0); convertFlateToPS("weasel4.11c.png", "/tmp/psio4.ps", "a", 300, 400, 300, 6.0, 1, 0); convertJpegToPS("marge.jpg", "/tmp/psio4.ps", "a", 100, 800, 300, 1.5, 1, 1); convertG4ToPS("feyn.tif", "/tmp/psio4.ps", "a", 0, 0, 0, 1.0, 2, 1, 0); convertJpegToPS("marge.jpg", "/tmp/psio4.ps", "a", 1000, 700, 300, 2.0, 2, 0); convertJpegToPS("marge.jpg", "/tmp/psio4.ps", "a", 100, 200, 300, 2.0, 2, 1); convertG4ToPS("feyn.tif", "/tmp/psio4.ps", "a", 0, 0, 0, 1.0, 3, 1, 0); convertJpegToPS("marge.jpg", "/tmp/psio4.ps", "a", 200, 200, 300, 2.0, 3, 0); convertJpegToPS("marge.jpg", "/tmp/psio4.ps", "a", 200, 900, 300, 2.0, 3, 1); regTestCheckFile(rp, "/tmp/psio4.ps"); /* 4 */ /* Now apply jpeg first; then paint through a g4 mask. * For gv, the first image with a b.b. determines the * window size for the canvas, so we put down the largest * image first. If we had rendered a small image first, * gv and evince will not show the entire page. However, after * conversion to pdf, everything works fine, regardless of the * order in which images are placed into the PS. That is * because the pdf interpreter is robust to bad hints, ignoring * the page hints and computing the bounding box from the * set of images rendered on the page. * * Concatenate several pages, with colormapped png, color * jpeg and tiffg4 images (with the g4 image acting as a mask * that we're painting black through. If the text layer * is painted first, the following images occlude it; otherwise, * the images remain in the background of the text. */ pixs = pixRead("wyom.jpg"); pixt = pixScaleToSize(pixs, 2528, 3300); pixWrite("/tmp/psio5.jpg", pixt, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixt); convertJpegToPS("/tmp/psio5.jpg", "/tmp/psio5.ps", "w", 0, 0, 300, 1.0, 1, 0); convertFlateToPS("weasel8.240c.png", "/tmp/psio5.ps", "a", 100, 100, 300, 5.0, 1, 0); convertFlateToPS("weasel8.149g.png", "/tmp/psio5.ps", "a", 200, 300, 300, 5.0, 1, 0); convertFlateToPS("weasel4.11c.png", "/tmp/psio5.ps", "a", 300, 500, 300, 5.0, 1, 0); convertG4ToPS("feyn.tif", "/tmp/psio5.ps", "a", 0, 0, 0, 1.0, 1, 1, 1); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 500, 100, 300, 2.0, 2, 0); convertFlateToPS("weasel4.11c.png", "/tmp/psio5.ps", "a", 300, 400, 300, 6.0, 2, 0); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 100, 800, 300, 1.5, 2, 0); convertG4ToPS("feyn.tif", "/tmp/psio5.ps", "a", 0, 0, 0, 1.0, 2, 1, 1); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 500, 100, 300, 2.0, 3, 0); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 100, 800, 300, 2.0, 3, 0); convertG4ToPS("feyn.tif", "/tmp/psio5.ps", "a", 0, 0, 0, 1.0, 3, 1, 1); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 700, 700, 300, 2.0, 4, 0); convertFlateToPS("weasel8.149g.png", "/tmp/psio5.ps", "a", 400, 400, 300, 5.0, 4, 0); convertG4ToPS("feyn.tif", "/tmp/psio5.ps", "a", 0, 0, 0, 1.0, 4, 1, 0); convertFlateToPS("weasel8.240c.png", "/tmp/psio5.ps", "a", 100, 220, 300, 5.0, 4, 0); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 100, 200, 300, 2.0, 4, 1); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 200, 200, 300, 1.5, 5, 0); convertFlateToPS("weasel8.240c.png", "/tmp/psio5.ps", "a", 140, 80, 300, 7.0, 5, 0); convertG4ToPS("feyn.tif", "/tmp/psio5.ps", "a", 0, 0, 0, 1.0, 5, 1, 0); convertFlateToPS("weasel8.149g.png", "/tmp/psio5.ps", "a", 280, 310, 300, 5.0, 4, 0); convertJpegToPS("marge.jpg", "/tmp/psio5.ps", "a", 200, 900, 300, 2.0, 5, 1); regTestCheckFile(rp, "/tmp/psio5.ps"); /* 5 */ /* Generation using segmentation masks */ convertSegmentedPagesToPS(".", "lion-page", ".", "lion-mask", 10, 0, 100, 2.0, 0.8, 190, "/tmp/psio6.ps"); regTestCheckFile(rp, "/tmp/psio6.ps"); /* 6 */ /* PS generation for embeddding */ convertJpegToPSEmbed("tetons.jpg", "/tmp/psio7.ps"); regTestCheckFile(rp, "/tmp/psio7.ps"); /* 7 */ convertG4ToPSEmbed("feyn-fract.tif", "/tmp/psio8.ps"); regTestCheckFile(rp, "/tmp/psio8.ps"); /* 8 */ convertFlateToPSEmbed("weasel8.240c.png", "/tmp/psio9.ps"); regTestCheckFile(rp, "/tmp/psio9.ps"); /* 9 */ /* Writing compressed from a pixa */ sa = sarrayCreate(0); for (i = 0; i < 11; i++) sarrayAddString(sa, WeaselNames[i], L_COPY); pixa = pixaReadFilesSA(sa); pixaWriteCompressedToPS(pixa, "/tmp/psio10.ps", 0, 3); regTestCheckFile(rp, "/tmp/psio10.ps"); /* 10 */ pixaDestroy(&pixa); sarrayDestroy(&sa); return regTestCleanup(rp); } leptonica-1.70/prog/endiantest.c0000644000175000017500000000406411707066337014774 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * endiantest.c * * This test was contributed by Bill Janssen. When used with the * gnu compiler, it allows efficient computation of the endian * flag as part of the normal compilation process. As a result, * it is not necessary to set this flag either manually or * through the configure Makefile generator. */ #include int main() { /* fprintf(stderr, "doing the test\n"); */ long v = 0x04030201; if (*((unsigned char *)(&v)) == 0x04) printf("L_BIG_ENDIAN\n"); else printf("L_LITTLE_ENDIAN\n"); return 0; } leptonica-1.70/prog/rotate2_reg.c0000644000175000017500000001556612240302507015045 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotate2_reg.c * * Regression test for rotation by shear, sampling and area mapping. * Displays results from all the various types of rotations. */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define TWO_BPP_IMAGE "weasel2.4c.png" #define FOUR_BPP_IMAGE1 "weasel4.11c.png" #define FOUR_BPP_IMAGE2 "weasel4.16g.png" #define EIGHT_BPP_IMAGE "test8.jpg" #define EIGHT_BPP_CMAP_IMAGE1 "dreyfus8.png" #define EIGHT_BPP_CMAP_IMAGE2 "test24.jpg" #define RGB_IMAGE "marge.jpg" static const l_float32 ANGLE1 = 3.14159265 / 30.; static const l_float32 ANGLE2 = 3.14159265 / 7.; void RotateTest(PIX *pixs, l_float32 scale, L_REGPARAMS *rp); int main(int argc, char **argv) { PIX *pixs, *pixd; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; fprintf(stderr, "Test binary image:\n"); pixs = pixRead(BINARY_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); fprintf(stderr, "Test 2 bpp cmapped image with filled cmap:\n"); pixs = pixRead(TWO_BPP_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); fprintf(stderr, "Test 4 bpp cmapped image with unfilled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE1); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); fprintf(stderr, "Test 4 bpp cmapped image with filled cmap:\n"); pixs = pixRead(FOUR_BPP_IMAGE2); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); fprintf(stderr, "Test 8 bpp grayscale image:\n"); pixs = pixRead(EIGHT_BPP_IMAGE); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); fprintf(stderr, "Test 8 bpp grayscale cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE1); RotateTest(pixs, 1.0, rp); pixDestroy(&pixs); fprintf(stderr, "Test 8 bpp color cmap image:\n"); pixs = pixRead(EIGHT_BPP_CMAP_IMAGE2); pixd = pixOctreeColorQuant(pixs, 200, 0); RotateTest(pixd, 0.5, rp); pixDestroy(&pixs); pixDestroy(&pixd); fprintf(stderr, "Test rgb image:\n"); pixs = pixRead(RGB_IMAGE); RotateTest(pixs, 0.25, rp); pixDestroy(&pixs); return regTestCleanup(rp); } void RotateTest(PIX *pixs, l_float32 scale, L_REGPARAMS *rp) { l_int32 w, h, d, outformat; PIX *pixt1, *pixt2, *pixt3, *pixd; PIXA *pixa; pixGetDimensions(pixs, &w, &h, &d); outformat = (d == 8 || d == 32) ? IFF_JFIF_JPEG : IFF_PNG; pixa = pixaCreate(0); pixt1 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h); pixSaveTiled(pixt1, pixa, scale, 1, 20, 32); pixt2 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_BLACK, w, h); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixRotate(pixs, ANGLE1, L_ROTATE_SHEAR, L_BRING_IN_BLACK, 0, 0); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_WHITE, w, h); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_BLACK, w, h); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SHEAR, L_BRING_IN_BLACK, 0, 0); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, outformat); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixa = pixaCreate(0); pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); pixSaveTiled(pixt1, pixa, scale, 1, 20, 32); pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_BLACK, w, h); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pixSaveTiled(pixt1, pixa, scale, 1, 20, 0); pixt2 = pixRotate(pixs, ANGLE2, L_ROTATE_SAMPLING, L_BRING_IN_BLACK, 0, 0); pixSaveTiled(pixt2, pixa, scale, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); if (pixGetDepth(pixs) == 1) pixt1 = pixScaleToGray2(pixs); else pixt1 = pixClone(pixs); pixt2 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, w, h); pixSaveTiled(pixt2, pixa, scale, 1, 20, 0); pixt3 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, w, h); pixSaveTiled(pixt3, pixa, scale, 0, 20, 0); pixDestroy(&pixt2); pixDestroy(&pixt3); pixt2 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); pixSaveTiled(pixt2, pixa, scale, 1, 20, 0); pixt3 = pixRotate(pixt1, ANGLE2, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, 0, 0); pixSaveTiled(pixt3, pixa, scale, 0, 20, 0); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt1); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, outformat); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.70/prog/barcode-2of5-300.png0000444000175000017500000000461610770123063015636 0ustar dandan‰PNG  IHDR• kò“gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IÂIDATxœí›?Žä6ÆY± lX l²Á`èÀ˜ †›íœ-°X›80†*Ë@…}OècX Î ¼jtСÙp°XCš¤T%Rzü£’"[…éé¦úWï{ß÷ÙÓÝHnþàhgî̹3wæÎ´6bþ¨ÿêróqKeyXÃ,±yW™§ö¤šJ´†)P_[f DÔ¼ÌJf‡²±Î‘-˜lølì{¦úx%³ÿgSmÍðÀ,‚ȳ%åXç=Çš~\ɬiMŸ¥W2i=0Õ.Ò ’kf±&ój's|doÌ•jæëWø¨WÀæ'ˆÿåÀþšµ¯&Âkwˆ:ã:³ëê™jç)Ý«v¢©¢†¬™ê½bÖx³C¹@…@æìÐÌ®¿=ÐL©Ö{IôQV»ˆÙ¦Üã2ozìÌ•÷,s.Ël5ó£|÷A¢‚#zâåêí&æ/RVVÁÔ|2Y0u%a·1ÿ+ñ¯‚¨ÝyÐLá0Yóã—ô=§ªMˆÔHà›9³5Ld~üAÞqy§^úN?U?#|aò‘ÙÚLŸvõ4¤´hÕï./ev@¹ÕÏlÆÔ/ÕN™÷n“~‚uΘ'€é÷(Â<9Lí‘—IÖ9ë'¨=èQófí6“oÄ<ù=šiÏÛUYŠÖ™ÊŒh_êû©g–­ò(¢ýZg`æ¬:Mæñºy¿Ì‘Uç½]§´˜Cãib²…ù¬"uÂù,Ff;ö3¿‰Y:Ìk?s·Ÿ!.ÌQ»›¥ˆG±~N|/ŒG& iϽ™¿j3R'ñäÓÒŽVy©“¦h·<|7™·˜ü2›$2Gð½õeÞÔÉ{féçPg5e‚¾ó¨v› õ³÷¨‡Mû Ö™_}'|¢é¡>fn1'µf°Î©ï`>[3ïÈ’O»‡iÕÙ^ú90¹Ÿ™û™ƒöÛ#yõˆûó™{|ïÜ~ÎçˆûçÝÔÙÿ{že~æÑ¢,…wòyï:jw3ß.csâ‘wöH¦äÊ<¤]ؾGö| ÎÁ÷öàzÄý;˜Í `.òÝe&í•LlæàQL{ï{>2‘5Gp<ºëhÏôöS2¿dŽ<Ì´=o¾¾gúëWïlÎëTŸÓDî!v–¼{ÞÕ~aF´“ëÍwÝ|.9€]'f{>žÏÔ³CZ_#ï!ó|†™ ²tJó=ÞOÈww6/w04=¼sd¾Ï£¥{>>GÖaœ£H>¾;_w,ígÞ÷üMÚó ïíl×-ÛÉÄsnæÖNÔ™;ç;ñŸG­÷Üœ÷“Ùsò}¶ëRæ(4›!üw0ÖÿŸ¢÷ìp<’QîÜ:«pN?ËÈ!±Ÿ <â–ïP–¦Ì´û|žÆ}ozí¡ÌŸ¢y´æÉÚóÜwŸoÁ9R/Næu²Ù=¹qµ{êdíãÃãÝ&…ÉÇý9Õ^\´s×£.è»´ó9ï§þt·Ÿaß³‘ô;¾7®GÓêg3O|2›—:ß2è§1è§G;…ú ù>Ég“êQ3äÓ[ç°ëøß{í&·f“ÄæÈwïlLGûÜ#šÄµ;Lï€GAíìѽ¹wÃý$1fxÔöu"Ï‘°G è§aÞ{µ'Ô9Î&¥b‰ïó:«¹ïhdf“:»x ³E«´Ï|/&YʦÚAæp‘ v—™8ï¾9*zíÈ$Þ3n’Ï9óö:ç™·˜}8;nð½˜diê{0KdÒÏÂÊü¼ŸÙ¥ÎS˜¦Îé¼ßè»þæcyp˜ßoÊüŒIí^æ4óc?ßs”æ´Ï2¯Þdÿ (Û£¥¾»Mµûûò½¸‘™ÚO—yŠk†ðª:A&Mê'È|;eò„,I_>×~w]lŽˆ) í)ù¬ ssvÆñEýôfÉÑžœùI–ðÈT¾ËÑ# z”ž¥Ã…éó=e/U¾ÌcH{¨NÖîöSŽ¥ÎÑpGž0%0Géu™‡˜×,uÞ9"n?q`Ž–j§p?ûcþÆ|zæ}ø!Š^{ ŸÌ|€´;ýLÒîf^Býä©s4õhÜŸÅtŽ™'×#‡¹L»wŽ.Ú™Ôãéó(’y7Kõ•) ½ôÝ›OÏÝäûL»µKhÏâý<‡™Ë2?÷ò¨¯³²˜ó:#ýì™Àþ4ß\ȬÃýtµ×‘,5S¦¥BÌG6³ƒ™`!fci_Èôjoâ¾Ëþ‡k¦òè±£u&èý§afã2s€Ùѳþùiù7*ÝÇ‚~>›»|Áuòç÷Ò÷™Üe2ÃÄä»_yA!fsešœÎ$Ââ?)$óÜé7Õ&DŸ]‚˜úûÏO7c@æ–¹3ÿ™¿ÅDÿ¢Ø&Ìwé_6Ô;`ø%æ ˜jX陑߅MfbŽÞ BVüŸ´8mØû†R]µ>oÃd˜‰—äNdŠI6b¶øY¾ çžù˦ÌîßÏ2i«¦0ÕLyÇÙS·SbýG19êþE6c "Šç†¡×ÿÀ›1;ÂðcÃ^½F›e^rj˜Ý‹­2¯˜­äÅùé7ùb«|*æQÊÓ:V?ÛŽ)r)Ïß§˜ôq+¦þmí3BtK&'l4ósÚlƤmJô ?ß®ŸÏRÝ¢äùA­§M™'ùÄÁ›å“¡—¸êê·Ý)¦‚5êXÚìŒSwn¬Î¸'q›ÅªÎŸÔY,åÿåo OÿƒÝmvæÎÜ™;sgî̹3wæÎüs1É„ÂĶ£ÉtIMEØ1*”$Ý© tEXtSoftwareESP Ghostscript 815.02 Æ”Å_IEND®B`‚leptonica-1.70/prog/pageseg3.tif0000444000175000017500000035650010603537106014666 0ustar dandanMM*ÜDþlÀ(#„6 Ê²¼ô( $¢;6£qüÚ#¢>}EÑ„aÏFˆ‘ÑQ—dxº#ä{`¢Ùi ÐŒKãxO/ˆ‘&wÙÙ4F":9‘ÖŸ÷.GN‹£ù#‘#†Â?¼!‘â>GDt]—Ab)‘\ RÌ8ˆˆa:!çã„\q]Dâ/‘Ã`BÁTîPäcˆË¸‰üŽ‹pp‚çtŠs8²>Gâ'™Ã0 ‚ Žæ㈃.¢!™ÄPH P ¬IŽqÄŒˆf§8â"Мp‚Ër (@ˆÊ‚‡8â,"œ BPæãÌNSË‘ôB¤Ç,r PÔJ¤#Ž ‚²r P ¬“wDpØA "‡,q$8“ SˆŽ`†Ò8æp@„I€˜(™p‚T ”ä2ÀLX›“ °TqÙpÌ#Òn$ QÜÈ2:“r°Êiäq"€šrn‹†a#†œO"8Grc–9”p'¢8gB8åŽPâ ºŒãŠÁg±ÄŒ–â#†À@’‚H£ØAdÝIe–Ìi"¬¡ÂJ‚€-8ÐAˆ ˜C)ÈAÈ.BÅ‘Y‘Ñt8i]ƒ8à‚œ†p-ÂÓ"'B"HŽˆè „Ç!–@ÄDò.‚C#²è ‘à§(r(ƒl¹lPAXÌ9NHq$S-ÄÑ‘*i‡v‚ Ê—dpÏéDAˆ„ˆ4qÔBT82?QYÑÇ0á84Ž‚(p‚ ±Äç ¥ˆˆÓeÐ'ÛE8A‰1Î9@4¤›Qƒö‚¡ØVLq ’ˆüPGIŽF9à4B&fÊ „H4ŽP DhN9‡( ä„ð¤|ŽeÔ·´ˆbFåÅQAñ2­DpR#òɪ3DxŽÈà©-Ô,DôG ¢:ŠB Î8“À0á!8ˆùpV¤" § Ê9ÀB©6.¨Lò8)ÔNȱ'dpÚ#œ®fšHN28+DïPæŸÁæGr:‹‚hD a)‰ÄlÈþÖ×4]Á\ÿu8‹¾ÿq4Dp8ÿx™‚Ç_Êë,ŽÿÒ;õ‰8ïÜ‹b È3&ÍuÎήÜ0dsþ*× °[ûC²†ïþ@ðÒa^½Ôà¬Àò à°ÃßdºªdqÎ9ÓDŸˆEø‰rÓED|raq ºh[¡ä2LsŽRi=údÍqcœr“TÖˆë"Èã#þCñ~"B¦UdþwEÈd„éNÿ#¬xƒ#¾ëâR$¸¶Re_×—BÚÈdÉ1Ër“!÷øîÂ$¿ÿ;¢ú%ÃTÿñÊÚ!®ˆÓ#ƒQtGû¥ækèC(sŽ" Ždt]{ü~„Nf°‘×ÿ#ÿ‰9Á¨Ž29—]Ò÷S³UКd|Ž D|ÿñq3]™¢:6 ¤p…׿ñèD‡—‚è—]ÿHìÕt&£#‚Á|ûKñèC"¹‡8çrœ¦Ð·þq7æUàÐGDt]ñ UWFJÈŽYwü8øƒ0âCIÊl¿iМFÙ2´üÚèDã#²8R8d¡_ÿ„D1°û¥êvjº+@2—DèºÿåM§Pá—Dt9/ûüG+K¡ E‘Óds/ѺùNŠu±&8”8@¨ „Q.‹¯uâ?]-¢œ%-‘ÑtGÿùÜ%+K§ ¯H$'í4'{#ävGEÿþ8õˆˆ»DX¤ÒÃhË¢Ô]ÿ"‰ú³º!‚KÁÐ@„JIŽBqÏŨ)šªPåPæÎT9cœLãG9NWÊÚWixÿ„’/ð‘x 1+T‚!!ÈÇ&å-”r“”Î,~;ˆˆˆˆ‘G<çþhú.‰Ñô‘äPÌi¿þA®¢4"""""""$„‚F828l‘ÑŽò8‹AP¤A3Ý—A"]A#A4]‚B/ÿTK¬Hh—]DŠä ä6S<#BH®"$‡cž ¹G)”¡È£±&é BAK ‚P‚D0„}ÒòT„Í ˆü†@6Ù‡$9â"Rf2:.dvG"<Šr‡(sŽqÒÊÔåPäp‚œ˜â"$/” Œ ›H ‡¤"‚HD~ÿsk© €Ô”9œqÅ JPç8!”9NPå8U#ŽPe$QÎ9ÙJ"0I‰–9pVÍ7ÿ¤¾‰C#†È„ØMÄæDC"4)DH æ­‹“r §(Øh§+Êr‡DŠ9 «0æÏü„JR!ÐT'tG Œ0QtEÑŒAº"B삜îqÉB2>_/Ñ|·©Ôi„²è „bLr ’sH´¼†…±øB!™ÐB T$ B¥ò:.ˆèº.‹ÈãÈîQ)Ç!TA’º#¢è—FÑt}EÑ:;Hˆèé‘ÑÈã#äq‘òäGGË¢ù„]Eò:6‹¢èꋬ ³š TBÑÈr® ËÏÿPˆj‰b.ºhO28B8H¤½é!ЈºDŠ9œ±ÉŽLrq&8”9‡h NA­ <$LÎrøL‘òèÆCEÑ|¾GË‚Ù#„#á–ÈøM‹ Šd|Ž„L&s”r°¡Êr‡vS‚†GÂAÈ—'ÿ’hED~„A ÇG$;Á$,¸R8i‘Å#²8Èùr#ƒ‘Áá°Ž†¡’@w¶vÐWA$Hpˆè ‚"Ž""""""!ÄA<¾GÍ A3ŽtGEÐA .‚AÚL ˜L/h?Â]ÿ"«ª”8¤""qÄž…TŠr‡*Ðe]„ŠPåS‚J‚(r‡8á#ŽPç§(å^î)7 „$"H!G …]‘à á°!‚`‚Š ¿h ‚ðH%ÂC „‚QH¡ñ^Òüd›(Esäp¤p\ŽÂˆˆˆˆ‰t]ˆƒ*#ã „lG3 ¢8„r#²9Ù’ BKè">cAGÂ!Q"Ž""ФÂHDpЊâ%¿ÿô'0¢&hDÖ„\ºA ±Ë¡Ê㩈°Qt@‡h «„Hw0à2Áp7rq^Â_ü‚¢¡d.º¡;tP„â.„D B"$‘„") ç9Ç,rp@±(s]”9c”9W ðg(sˆ÷KÇLDº.¾„DP":ÀÔGÈîU”ªC #šÍ³EïñhŽ„zj3²áœaµßüL×T!ëÿ¨ü&ÚKÚ^B‘:ú¤ª¿ù„âe'ŸDQ}%Iñ8„q3CµA/ïøœI‰©]T":ª÷^&´ÐÐW×ÈDGGD&h}5UßñÈK¡«Dëê—Ú^"f‰Ñ>¦´]È0lB®¿ù„âÏ£hD¨EÕSDÜ­UwüDÑ>'ÐJ’÷ùUB¢=R ¿¯•hN,Ž"a¢ë+–ô××ëĤBCÄI Ä?UCUßò,„%ЗA'Ž=R^ÿ#x™£sÚ!!è ‡j«ýy© ´_†¼ ‡9ˆ¤muDܳëëù©$%Öf‚Nduˆ‰ þ5]ÿ:‚‚s „N"èK¢èºêª½¥â"q, ²èBrè ‡Ï/¯ï¾A¢èþ$t&hºñèº "!Ò]Q7©øˆ@„Í ˆL „hŽ„GèR¯‰ä'ˆE::1†‰Ñ媅õò A$t&hú.ˆ—EЗI_½~¼Dº`’.bÖDto'A"]ãÓDصR÷üƒÄ!UEt¨ ‚Dºi”/z«ßäè2½@‚Æ!…b]2‡)ùº®¿ø‹b*‚.¢èB(tʃ0®–¾é.I¢éË¢èDB ‚q<#Aá׿_üDXB]GÖ>f„ºH$a4=U§ÈhâD,º‡0‚DD „~ºíë‘Ñt!) ä]ë!ˆŸºKêø@„DÂ4BBq‚!Ä …Õqˆº¯ÿ‰ EБð‚‚.Œ!<„—G—T#ÿ×.ƒK¡#­ ‚èK¤A _Õ{«ÈDmHè ‡:I? •áˆõU÷ÚÅ&Ò.„$]‘Ñ´NÂèNduÕuõò ˆ˜AÄlK ‚ïUÿΈº!3B'“:"GL­šé·K´"CEЄM¢ýB(å*úªþù:ADèâ6‚DÂ#¡ b"q ‹„×ýWÄ „ ‡DòÔº8„C­òÜS]ëÙE¥8BNS”;6‚kª/òtB'A!øK_¿Â >]—A"Êt] ¦‰±¢Úúù‹¤™XœB"ƒ6‚ûÕá"¡Êò°«=EP":&W³5šÕuý-•`œDÂ&R NS•ˆ@s´ ÙÕW½û.8˜B]B’ Ž’°@áuøýB)A'As. Šp¬Mã úë´¸‘òèK ‚aB,÷J 1Á]Wü0„ …!!FDK¬ ꪾÞCEЗB$t$tmñ#¡g2:>‡N¿íx‰„#á"ë‰Ä]—EÐ@†C:ÓÚªÿŽ%Òtm­„ ˆèŽ:^¿á”á¹tX„@Š"ÓB …¦ÕU~³VGA"GÂG쎒ˆèHètéÿµáqé!˜a2°!6‚Ùéõ×üD …yA”rŽ-²·tQ6U_ò(—B%Ñt'H …í±ä6ñ¯þ"&tN!¢èº¼ºÐ n¾»^!#¢è&Q„æGP“Ë­õDÜ©mΨ(bš„—EÒXi8 \xA¿®üDDDDFÄD½d âɺ®½]„WtõUÿ´„޽Û]WêSë~¿üb¶•ÖM]®4Pþž¨j¿t]Cÿ}uÿ‚e§®Ÿõ‘Óëù7(U]¯ …¯·M_ò: «)þýr•ýý•qúë!¯×xA2 ¨ÿÓ)rͱ´‚ŸÁ“n±®Óì&ÃH çñë¢nQõª‹™.ˆùpjC•‡§*„LlQáz ªÊµ$Lú @ŸÓ‡ÛUüAA|º`¨º'‚pþ  –ñCbb4+ø´äÜz¨ ™N Rl „ ´ïë&ÉHRùoRA ! X¢ßô+\U4‹¡&¤C¾ý.¡ ¬ FxˆA A»Ëuu]T·#ÂEôJpÅ Ü…ä)'pVñÁRÚÇ#åÒ>ÝS× ˆDtB!íK£•7ƒ}ýu!IÄN!# |7·XKì„’U³è †{÷Ò ª-B-‘Ðêû{±ùoª BGF2:.ˆë¦÷ï騰‚D CìîPò:_öW²¬®) ÆGÌ*oo†ôMÓ¢~D2‡A‚JŸö8¥Ulº&~)ÊàF¾ûQ~[Ô@¢]ˆAbÊx ªûàꉸ5\U”á0„º.„FPìU¿Ø{T‡Â  ‚ÿa×\·!SÂRâ0’¡ôÿ°êºˆéâL!‡ÿ°}oK7„ŽŠ$ßáƒk®â‚.¡'ÿö½A;ñ0¡/ :þ4)˜@Bõ­‡MW¢ù™¦W¡ÿõƄº›(r¦r7®uT²Ü4¢GBf‚;=‚ªÃµ ‡„(ÿ¬0ê¾éBGB)~¸7_Ò!3P¿\7UUÏ!8„K ïü „†…}pnºynBQ.„§ûÂR¦ªøåБ‰/ÂVöªØç5üŒ 6•bù„CEЊ_»õÖ³hÂ'.‹¤ ºÃuÁìD „hDº/ë ÕoÒ0„ºhD~·òn4ª±‹*hº<¾¶é¡ú8óèL ‚Ò[áoÿñ#¡×TõDÝZkŽG@ t}…!vRë Ž?!eS„"ù Cúkâ8_!˜+z¢n¾ú_²“o¥µVÌ"èHøÿýé ‚º"tô»×UeGÈùù#ä|¸.GÈæ_#ä|‘ò80GÈù.‹¢è¾GÈùr.Ìò躪¨B""""""""""""""""""$±Î9Ç8ä58çÜsŽA8çrœãœsŽqÉqÈAÎ9ܧ8çãÊîA8çîS”å9Ç;”9œrœã•9XWå@°sŽqÎåw)Ê✣j½b"""""""""""""""""""""""""""""E6¢&å×_…’ãÊr¦tŠrœ®(s¹NMÏ‚nSœsŽqÎ9Ç8æ„îS”äܧ)Êr‡;’ÃŽw)Êrœ§;”ç‚qÎ9Ç$9Ç8ä58熘æãjUXB""""""""""""""""""""""""""""&IÑÄ_.‹¢èº0ˆè›Ë¢èº9‘òè¸.GËàßÐ\DDDDDDDDDY r½uÿ¨^ºëïº °–ª¿¿ZÞ´ézýu¥ªAmÖª¿ú^ªKÒÖ•ÿÒ­uA-Wõoö‚U®‰¹u¥¦ª†’·ß„«_A/ׄíªA^¾’­Uiw¾‚ ×]~º…Ú¾‡[׺^¿¿­é­Òÿ~½oÖé_õÕkïäÜ"]ÒãZÞšÿ“p‰-´´/ªþõ½h›„_¯[õ·\›„Uþ¿EÀéñúeA‘-=z¶5‡[]Sýß­xEÕ4ý(öІ5Qê¿ï–aJõȃ‚iük|!O¯ýb ,³ U}qhkþŸ}ü²{;Èî—]z½KsXì8숖ÔTØ=ý{ÕÿéS³½#Tr â }ÿél¨½„¾Tþÿå¸4GÕz¬~üjôÿ_‚Èè Fò>Gì–‹tv“ÿ‚ÿëø!e@.‰ ÈluHƒ“eŸ$òM…$Ñ@Zÿÿþ‡øA¦ …0„<0ƒϘ ÓA…&å-HF@ìÃ!³^jeFUs­ÿÿ÷ý4O®ÓN 42oTi ügg"ì „Â~ üƒ3Á'# ƒèü#C4ÍÄfh†gK5™ šÖhòEë_×éSOMïõB×ÓúÕ4âÓ‹‹Xµ‹OTÂi…M4A„0ƒø ð‚!p<ÌR@¹è gÅ3ÍÅ>g™æey¨ˆf33Ëžj,Ã$Ó÷ 5ÓOú{ z$;ñ4í>ý+Oê~šj©Ç§ ôO»NÂÚi„ýi„C³pN!„Âð©ÃÓþõzu„øH¹w’º'™+rWä­Ëµ%Nýè»×¢CÑ!Ú¦µ§®¶©iÇú~šzwðí0‡© îBõŸjCÛkÝtAqÚ ƒ¾’ªz S× ºo­'A7MߨnÂ:%xåã®^Z—†‰ÃÒ¤Nõz¬·nˆÇwZ÷øNè98a(ÿá“!_~ÿUãZMý}?µ¥º­uô)7:O …¤Ø`·á6wH0T ïEãݶpËðO'{åå“Ê'tNûIºn²(˜M°_Ó°›A;NµJÿþûõÓþýõ×ÿý_ô>õë¥Öª¯ôû ¦é½i¤ºnŸ^¯´é5_z š ÷u÷ÿ½êëÿÿ¿¥áú] Ö“}é>úO·O}MãO¾=¥¥ôTÝ0½†þÚõ¿ÿQpWýÿkñÚæõÜ8üÁ©'ÿú¸úÿÿ×ð¿÷Uûí].ÇK^ýÚéýwÿaÿÿÿÿòǪ÷ôÃý…_ößÿöµ˜(Øx.ÿ»#‰ú¨[¯ï×Kë÷ÿôÿÿý´¾ž¯ÿöþµÿõ×úõý>ÿƒøÒþ>ý7÷®¿¿Zÿ&*Þ¾ëÿäWWô×þÿÑÿðÃÿïÿ–;×ý‡¯ûþõ»ÿöýîµÿ u»¯ëúùu1ëðܽ8`´ ßýÿù!ÿï^ÿá½Çü0ÿþµßëÿ×ßõû¯ëú_»ÿØ?ãÖ¿àßÿ_üqRõ¨Ëôþòôú}á뿽iý=uý~·þ‰¸/úöÿt¿ü?Óîßû¿ø~¯†ßïÝ}ûýtÿêúë¶~%ÿÛõÿñ÷3«µô¼Ñ?gïöÒßÖ꯿ÿðÿýn¾ÿ_d0ZþšµßÓk¯jŸÞ•¥i!Ô{ÿÿ9%iß~ÿ?æí¿]ý.«4[¹¢úþÿýuöÃïºÓýÞ)a…°—°ab£ý‡ðÁ]Øa-°©í…°º¶¯Úö·ëíÿÚ 3—ÚÃõ9ÿgëÿ[ÿïþúá¯b˜Þ¢ºý¿bºŠŽ5Ø«A¯ÃI°»}¯í­v©¯…ÂTéþÚºïÚo«^íwí/¦E´ÕmU~ö«kö¯ø6+ئ+ö+wcö66qüSìqë´Ûúë^Õè0ƒE Â )c…,t×R}Új¦™ÃA§i‘^ôÓºï[ÕWµPÞ¿êŸõ°ûþµýµ\DDF‡„`„4!„AšÓ5Ó†Â}„×[ ö´Ù|ï {LŠ?}´ õ¯·ïV^— ¡Â(Xƒ!DA¡h4ÓA‚ `†ƒ š Âj¡¿þúÖØ§ }¤"4""""""""=ÞÁûß§ÿ¬ö?iôý_ª_é/ø?ÿÿÝp¼5éõoÿî¿KÂþþ¿ßô–?#7ÿßÝ@½Z{í¯úýÈ–PŽõÒþ¿Šú¡ûjÞQ/ÿÿßÛ[ ûUíß¹ÓýíÕÖÚ¿Zü†Ê#sµ4ØJÕ5ÛKúú‰/׃#‚H=¨0·—ÛOÝüXØÛ#à°eÓ½Zûݦ˜Šb¿µû}>šétÕý?!°sŽqÎ9 œs¹NS”çrœ§8çŒsŽqÎäÇ8çãÊrœ§.Î9Ç;”å9\S”å9Ç#ãœsŽw)ÊœîS˜r¨Q9\QÊrœã°ºúüv"""""""""""""""""""""""""""""A¤sŽqÈ5ŽqÎ9”çãÊsŽ.‹¤"‡3h¾Ž“# G„Ë¢éI¸Jã°qª2Ê„DDDDDDDDDDDIŽ"$Dzç¿ÄW÷E%äv¢ ½+à´;÷ÿkÓˆ“G‘tHGt]Á‚>]Èù.ˆá”_#ƒ!#äpÊ#ä|¾GÈá’¼Ǿ""""""""""""v«•hº.Èù.‹äp¿úÿ∆¿ÿþ¤Ý[ÍY¡š³3<Áy¡Ze‘ ×ëý¤Ðh< ÏÁ0ƒ!ÇÙèă‹:É„ø ÏÇàˆ\ " 0Ìàƒ 3⚢ã3ŒGÅ™ v *… éÆŸÿz§ÞéÅ­§…M0š =‘ò>Gù7rqÑ!Ý"oµïãNÿZÓáéÜié§Øˆ¤_PO ¾xTõÃ'Ž»ÉçÃ'åã ¿¢v䢉ŤN”tJ&µ§¯Kªúj´MïíWô› Ð`’A¸(N »ËÆ OØþõß_ï½_í?¥uãÓ×TÞ­¥ð×®¿un«õÕø¯ÿõÞô¿OµÃ×.ˆáÿÿWïø+¯ýõ÷ÿéa~ ǰþ¿øûü_`ÿÿ~EËK@ÇëôÁÜÿýWÿ ÿ\?þ¿Cøþ‰Göÿ_ÿÿÑ{ÿíßÖ¿ÿùz„üž°wV?÷“‚ /þ ×ûþ÷ÿÿõõ†ú¯ý¡/Ð_ý`ÿÿüžŸK¾ñÿ¿ÿÿúøoÿ]v¿ïýï¿ÿú[ÿïßÓÿwÛ[?kæ~OíýŸõ¿u÷üâþµ_óDçïkkk¶½¯_®éÝkvá¥éý­«¶½§ùêÆÅGÇÃ_ïÖ8ã¸ï°¿ %m…°’Ú[a[^îï¿ïÁîíSÁ¼Å|r, cƒb¢ ÖÈǰ™öªßöo"ö½§ VÕïo Á††B."!©c„8NNí¶ƒ š–8NÂv ê"""8ˆˆˆˆˆˆ`ˆèB"  0šŽ""?ÿ«\Gÿå²gb]ê†fY"SÐdŸë¦d³de<• Ok¯œˆ;;5ŠßÚa4×/ßÁ}ý¯è?áþ±ÿµõÿÿÿÿ¢Xÿ¿ÿÿü'ÿ§˜Ž­I Õ™™³¹‹ÿÛþ§38 qa˜ù0ƒ##H3ù„è ¡ðƒ'P0›ÌGÆH Ÿ2'f†RÒ5ÇÙ!æ#ª ^—ÿOôôã¿M>/ø°š 5M0ƒL ÂA„ gàA„Â3ALâ8 ƒ'ìÏ3ÏŒÓ1g¯Ë‘9Ë*FD¾¿Úzt·§ßþš|i§¦¡4Óˆ´âÐhZa4Ó°ƒTõV¢Ðh<ó5FAŸÆàžq|0RvÑ;† ^a"ñê‰çä­í<Ž›åŪD‡roÑ!ÚÚ§ië~©Çô6˜]/Mxñ^Õ<&ÚIºJÛ鿯 fà´nƒ† :Mƒ/‚ Kº/²ó/2PGtNÜ”4JޝDݽԜkK‘D‡w­ªÿê×þ·ê¿¯úýFª®ûJýÓ¤Ü&OO ¸L' öª“pµá< èú}ÏÁoý÷éº÷×ë~¿Ûî·Vüiéñ^·Þ½ê´¿éëAtétúWTßÖ_¿ÿ]íwïÿÞ¶úÿí-^ëý+ôŸßoëëúöÒkK_úáõ÷þ>¿ÿÿC‡ñÇÃÿ‡¶¿ÿßë·zMÔWë㯥ÿÿÿ_¯_ÿÿöµöû`ýþ?ÿãÕÿëoë·ÿï¿·ÿÿ~»ëöû¿ÿÿ÷ÿïÿïÿÿÿË«¯,_ÿÿ ûÖý»ÿÿÿùcÿ¯ÿ½ÿïëÿñÿÿ_Ë÷6¥Õÿ oÿ“1ÿøQÝ×·_ÿÿÿß_ÿýÁ¿ü?øþ¿ÿ—Rù7ÙEòze¿_ÿúö¹¢í/4M_ß½ÿ~ÿ«éÿ_îÿÓn¿^Û_ô¿é´ÿÛOotÿÿÏÄbÿ3¬Ï£5··»íû¯íÖÚÿþß]kþÁp· l.Ú]…í+_ÿí4ö­­§›vº”÷ÿÙç½ÿæ]{gkùžÙûoo×Å1ÁÅ1ñìU1Çý‘Õû %ità a{]µ´­m/íuµý´÷mAÝ{ië»é?ɲ€Êké­­§iÿbàþ)ŽE{Ç"¸Ö6*6?دb¿Šê+ÛV?´¡¥Ý6¶©7à/ ‘½æ0°ÖÖÔŠ:¯ÿ 4ûL'iÝÚkö½­÷kúö6=øãöƒahD!A‚ Â ˆ‹AÅ Âan a…†Iì&šëkvŸØ_^Û†¾šïk¯ˆˆŠˆˆˆˆˆˆŽ"P‚DC „!„"!§h0¶š¦¼0ƒ § &FÿëB""""""""""ƒGåœ,_ÒI~²Èj.ºÞ5ö ãÿÿÿÿÿÿü²e{DÒú”¦DFãp&‘1?é„Ñ\!ŠŒ,}‹VWFÁÿÒvvG¦šh4Óÿíp¤íÚq-ÿÿøé$_þ»O¯ÿþ—·C¨ãÿþŸ}¯ïþfGFt˜f¬Ìν“´²|ŒGU_ÿÿÐa?7E™ÁB ô#ÄðA„ ü]ø fp Í=ç"8ÍŒœfy»Ï‘¢6d‚'G0@Ï™Hg™!•¤Js§š_Ì;ÿ„ÓOøz§¥¦©Ð§žœE¦¡W ¡h4Âd` A„ œgÁ G A„ AçÆ3äH «™£uÍù2A3ÿ' v‰ÃÿZéÅ*vŸªqé'a8Ó‹UOа'„Ó0ƒOгðM<ˆ‚ ÏGàƒþ‚tÓÿ'Žná‚Dó Dí¢8¢wêFäXh›ëTHvˆß¢t‰íªiÒzM>»ôÓí?ûtí7ýu]]tÝh'„ô×ÂiÐO¥< Ú/œ`¡¤ð–aåØH¼²‡\Ž2팻òqjMòqi^IÝ&î[¿¿õ«CÿMÐõýt–õЯP´›I 'ú릪ºzv›‡ÂÒz~† „á‚îƒp¿A4Eçú¾!úZ×^ºþõ¯þu«}c¾:¸õÓþ;Oþ=tð¿¡ØKI?ÿÁüz÷õë¿^¾-Ö— ¿Âú¥ú_ŠõúõÿÞ=÷ÿè/ÿ@½ÿ×Þ°ëõ¨­ÿáþ à¿÷ÃÁ}¸~ÿ_ßõÿü/ûëëÿõì?ýyyÕ~¸‚ø*_ÅÃÂèpø`Šÿûãÿú%õÑ(Óýzì?ëþÿ¥é‡úºªÿ°x_añÿðØ~¿ÿ…þ¾‚ý/û$i}Ö¿ª¯þ— þˆãjˆßWôÞˆßì>ÿý†Ãÿ_ö—_ý{ÿúzø®¥ëÝÓ¯á¿Ð\R¥ýz é½~¿ †ÿß¿ýûý|~¿_¨zõõ^¿õ× ªÖ¾XÐ_,õÿ †þ[rOõÌêÿ¿þ·û]*ßÿþßKªßúÒK¯ðý~Ñ9ÿüßý«kkþ—®ýû«›ýWó?ÞÌ׺ÿÿËÓ¯ÿ×»ô߯í¿ÿí+K ký¥ÚZ^šØ_]ÓÒ¿Ï_øX=R¿lÏ$¯fhúÿÿÿûþÅ1±Åqõ±ìT0½XJ×­†¾ÂÚØItÒþÖCýkûTþ×Ó ýpÕÿ7f-ÖÏÆïÓMû{ítÅ{WñKñHSÁ±÷ÆÃKû -¯ / -úö—ý¥ki6©ýÚh2Qkæ-‘º÷iÚixOûôÛÓ]×íßuñ±\pllT‹U¸¯øãŽ+øƒ!ÂÂŦƒ „Õ™'UTÂk¦U4ªÙxMÿÚkm¶·úÿi§â")ˆˆˆˆˆƒ"!…. ¨!v‹L&¤þvšÚà ªdn¶ƒ]sº­¦¤Qì/ô#ˆˆˆŒ'Ñ> ÐŽ ˆˆaa0šøZ¼DGà«k×ëŠ×ð¶¿â!®¾ZßPüGÿÿÿÿÿÿÿRÈK‰ÇbYUŒ†"•s±@ØdŽ¿OA’¬Ú dVÎõÍqˆ¨ùØ4™j ØgÊUä%?9ªªkzfEén4 `ˆkËkìì 5ÿúzzªúy òܘf`ƒv0uÿý. ýyn 5p@ÁÎõOÿÿú»O ìš<?ÿþ×÷ø xAˆ@ð“bÏ42Ô‘e;:3S?,Ò²Bÿ[×þxL'„@ôÈÒ4B`e„AŸ‚ g ƒÂ"/ÌFD'ˆ#Aʳy t ùxA“æŒèÈ“5D8”ý< Â40Ÿ¦©¡¦ƒˆ¸½==uA¦ši ôÐ}&]¦0ˆ{7›Ã?`ƒ=@„ ¢1ž`ŠgœÍÚE=Ÿ$ ùæu2(f¤j24á Â ÕuD‡nšª}ééï馜iêþ5^ÓˆiúðšhZkakh0˜L χ$FAŸ‚f ƒ?á„ á‹Ì¼w A°Ëòí¢wDí¢y’²8ÉÛåÜ4‰ßµiº' ‡H›÷Ä}5ûîõ¨Ó´øê‚§ Ó»ÓUÓÓNžƒO=ëz¦ôžžžž˜M¤úM°UA‚¦éá<Ã/ÍÐ` ‘;hý”Jè»z¢vÚ„‰Ã‘ÃDáÞ#¢NÞLz$;õD‡qèïÖxL ôÒunõý´&’ºú½/§Ûô´§è}ZꞃÿtÚ¿Tì(TðžðHàœ2ü m“Æü ð\ ßËÍ=4ôÿõþ¿Çÿßý_zé¯ý'úwT›é&é¶Ÿª}úéëêž´ŸéªL ðƒ®Dõýõ×õ¿ÿû×W‚Ó~ý+¥¯õãÿøô’N7_Þ>»þ0žéúµèÓÿü|}®º‚ðþ«OßÿK¯ëüü-.ÿ¨Zëû ôÂOû÷ÿÿõÿÿÿ °ãÝxÿmiþ?ºð\"ßø-?tô×Oë¯ÿÿ½ÿÿ¯õ¦†úÿÿ÷ÿ…¯Áp¿ï‚ëþÁ×M=?“«ÿ'§ïëþF:ä+­µÿD¯†ý¿¯õý뮿Oýmî—×öƒÓAðýõ×ký{×à‡—¯ÿÐ^Á¿—§ù=?~¿ú%ôG D£ÿª#ŽÿïOMpŸ÷ß÷ßÿÿü{ï Ã~ÿúÿ_ùztþz ëÛÐ_ÿ†éé§÷ñ_ßæõºÿí}káý¿ÿÛëcÿþ»þ¯KÿÒ…êÿƒt5OA¶¹žú^gë¦ÿ÷]Ÿ¼ÎþÖÏÚÿõ承þÛ3êÿþª¿þ¿ÿ¯ÿÞ¨‚»•¢ Ú=ew«k°ý´ÛVÖÒýWuÛ÷ï½×4³ž»ÛNÿ³÷ëÝ~gékÿKû¯±þö—¿DF4CiCÑ ¤ö8øÛ††*?â¶[† ÖØI°°ÂðÖþëíl+a[_µ§_´íuöÖÿ[þµÿÔßÕòÉ´ÐaA±La¦¿~* ŠöGcb£Ø¯ƒØØãÛ ð¾ÚÇ /ÚØ/am°º¶¶©­Vô A´Ð m‘ u´È£Új¾¶¶¶¶šdAû^ÛûNí>ÅlW±TÅûr+Šþ/⣃JˆmƒÂ  Ÿ„ ! &ƒBA„"38M†{ ¦½Vªi鮚v½ª÷ßv½ßv¶:‚oH6"""8ˆˆŠˆˆˆ†D4!Á[Ã.Ða†¨5[ Xè2N¼21ÐdžìŒ{TôÈß[LŠ:k:M ›ÐA¿QDDDDC@Áa†aˆa†ô„ kˆˆˆˆÐAè6‚oI¼Òðƒ¤ÚMôßà—IéÐO¤¨_éÒm'éÄZ„Õ ôôÞ“B#A:N“û]êÒújt›¦úaR¯WÓ¤ÛMôÂ¥¤í~× ?µ é;ýB¥Õµzµßl4ý0©:N×íwðÿµKIÚý„Mú;ŽÈˆ8·´ý†›ñ_´ØC"q(ŽõZú[_ÿ’Ú¯¦v‘Õ÷kÿ¾ô¿ÊÓÓ‡ÿëø_êÿì}þ¼ìñ¤ëÞÿÿûÿêÿ&âÙ‚8dåŸÍ †eY ‡ä!žd6jY=šDÆu¿ÿ½jÿ¡a4¡ay¦f°á0@ìx Â3ùqcò$ Ï7r„fFˆe™™ ÍH„i•Lzýþ-=SM8µ‹L! ôÂa4-4 4¦˜A¦šxA„æ@Â7™Æàç£1OæãÃs É6¦d3ähŽg‚8gTlÊÿü•‘Ҥ‰½z$îE¬Èƒï^Ó»Aé„ãuOÐziêžz|_i¦5 „4h4Âa 3m =uzÝ0›„úIè<'„òó „¼»z.ò•åÝ©7É»¯Dú$?MÅ'_þ’q ÞÕpœqöuëÝþº§Wª´žšIú $ݧ¦ƒ‚  ƒÂº„áùy„¼†/òWT‘8—}†¨›ºêFäG|ëúÿëÂTÞ6—O×é}øô7Zýפߥé]7I6Öÿ·Jž’}èÐMƒ‹Ç ˜OÂåã×û·øX¯°¿]}7½?iÿ^ôÚþ»^ãÿ¥ÿê©7XôÝ>þõ ¯§Kþÿþ ¢ ø`¾¿ÿ÷÷’âûz·ÿ_éáj›ñÿô¾¿÷Iúëþ½ëÿßán6 /þúéh{…ø|htë^ÿ˜ðZ_ýkŠý½]/½n¿ÿ¿¯ý^¾Ø_ýÿ‡…öþÿÿˆÂÿ¥ÿÜuÿÿô=uýõ¢W’ÐnJ?ÿÿøoDoöÿúÿü/ÿïúìûõÿÿÿ°^ÿ…×,hÿÿ÷'¤7 _·×ëÿú#ÿÿþßÿýÿ_Áwý.¼:_ÿïýa½/Á¾^…ë~ý~^¡ÿ¯²cºÃý]ÿ_\ÉÃ_¿ëÛpÿÿÿ·ø~¿ û÷ÿþ‚ÿÛÿÒåë ÿ¬º²õÿü›pJü/wê½ý~Úÿu¤ûÙš¯ßýŠÿÿÿÿþ›|:ÿõÿÿ_Û;J^ëÛ÷³<çëÿþ½ÙŸœ[§¯ûÙ¢ÿû?}{iyŸÿýíúÿÿÿÿóµ€eØáwm4Ø_µþöÒ´ðŸkkæ»ìý„ÿKWüÎ×ÿ_ÿo3ýß4_ÿûuüaßÇÜU…Øÿl% [ vµ°¿ipÕµÚmm[]†¶´¶ÿ_w»Í,ÅßjÚ{gïÿó?éga`Q·^þÐbž·ßccŠØ¨¦?Ž Ž+⣊ãmxa{_[l/t½¥kkv¿ÿ¶ºü‡í27»µLþÿL'´ÓÖÓm5îï´ûÅlìW¬llpqÿÿüì¨öÄD0B"@ &ˆ3Zi§ Mì&š 2Qö¶UM;[LŠ?¯ÿw­­ÚÚ¶¿ÿø^ˆˆˆˆˆˆˆˆˆˆƒÐapÂe˜ „A„ÓA…A„Ðdmxi¦Ÿh21í8kéÿaÎÅóØb"8ˆˆˆˆˆˆˆˆˆ0B !„0ša‹L!ÕzÁ^ !Þ °×ñ‚ì0K^ °i}A]ƒkø]†?°¼|aÿ †ø^ø]ƒþ ?á<î¬ô vø@½‡õᾃþxaëÐ/aÿ† ›d-’þýÕµ §a#µÝ È×*¹È%ü ^dØûÈšUUT8øØøøký6Ú}ŽÿÛ a‚°ÁX·a„ƒCM4 ƒTÂiÚ Wþð©ð×ð¶E´ÓNÓíjío±MoìuÿìvA¶» 2ƒ[ø0HDDDDDDDFÄDDF˜B-ša4Ða0˜A“xa2Qh2 öF:i‘ºalŒ~Ó]ûOû´ßÖAV–AL„ÕlIñÍX!ÁP0B!„ÓM4Ó ¦©¦JUá…bC\{V¬ƒ"¨ˆâ"""""" Ê6 ki­Ù„'¤†ÖÔ/cÒím5í4õam4ûB5kv½¡µÂkÚ†¶˜^Õ¬4ÕíZÚa{VÓ^µ†a^Ô5†^†Ó ö0°Â xaC a ðÔXa†0š ÂðÔ·Ž #²€m¼0DØn5åK+.ËÇf¨öT(0B d4Š@ÂÓMtÓP¦¨D¦;A™)GsrÜlíT2ÄC ÿûüzáNÀ󑸥gcQˆ0Gia‚¸Ø2ÿÿÝéêdQz~ž²È „/ÿÇà½#²/ÿ–Dœ›—ûµõõc úÚø“xõÿë׎8Ç1e'ê—ÿÿü³ÍQ˜Œð@ä)dÎ~¬Ô3Ñ:>F‹><¹Ùò fƒÌ!‘JÉâ‘5ÿðBB´ ¿M8a4«§¦iéÅè3¬n „¦gXÃ@Âg˜`ƒ3‹Œ2”â”  a1¦\ˆÂ¬Ï!æò½–ê`Åþ¦ž“M õOÓ½>/‹N4Õ4Õ a4Ó h4Ê„ Â!7D38»<)øÃ1™Œ d`ÌòäPy9/ÉçôNòW—!^o—DáÈÇz'F÷Ö•Ó;TÓ´ý== M5øziêš BÂÅû¦ÿ¦ëIµoéú¦þÂúo„Øeñ+h¸H°ÁK· ¼”Q;h涉ņ։ÆG ‡R7"DݦÿÅ'š§k§ëÿ®›úôšõköž½+ëáuu é'…MÂzëPÒ ÒpÁiáiÁ‚„  ƒrî/’†”»ÂÑ8¢ï/2WDã²QýÿÓÓé ½ãÿ¿_ZOJÿÕ~“ÓxïOõ×_Mu¤¯„ð©¸]7Aêá]Ð_½ÿWÛï½B~ÂÓÿÿ¿×é>½^+é= {ýZ·ôÝZOˆþ—×êïø¿_ã¼Á{íþÿþë¿þûþ¯Õÿþÿúÿï¯ý}¯…u à¿Çÿññññô”l8×ÿÿÿÛÿðZþÂýûª¿ëÿ´E^ˆÇúÿÿÿ_ÿ÷¯ýÿÖÃÿzøá‚ÿÿþÿ’À¯ÿ“z'ž/Ñ+ýÿÿ]~­ýÿÿðþ¼0ÂúÿúëøCÿõio ¿ArÂÖXLy' ¯è¯ÿÿÿpßÿ¢7ÿ ÿÿßÿÖû×ׯõ þ¿÷ø\!åëöX—§ÿÿÿÃÿýhÿÿí{ÞÒë麻Òû^ëÿÿÿÿoþÿõÿj ÿú_ËÐ_¿ÿ¯ÿ4_kkÿÿ®½ÿÿÿÿ™­½þÿÿÿ]t¿ÃÓÿÿîÒõ´îµ¿lÛ°¯¯ºßæwÿÙûÌí³?lÍ~žh¶Ìû?^Úÿûûÿÿ¶«÷ÿøkV†°Òl%¿ai°¿kil0¿þÚí¯ká>›VÂe­nïµÿÿèçÿÿš/ÿ_ýElqQQL}ì|}EÇÅ .à Ã^á­­­…l%í¯ÃKýµM´¼/¶™ºµöÿýÌ:ö¨;_¾þõA¯Ø?kb¶+b½Šb˜ØØ¨=Šö?øá…¿°»Ø[VÂý…ÿâBvƒ Âa0škd¡48î'S8[^×ímmmtÓL&7µí~á„Å0¿±QQûþ„DDDDhDDDDDD! ƒ!‚Ó0šp Ðh5[M4ÂÚöƒ]sžEÓM?¾ÿ¼DDDDDDD†„DA‚ Á8ˆ†A„iÃ48´ÐeÂz¯â"""""""""#úÿñõÿ~¿ïþ½ÿ×ýúù64Ê®I Úi ÎÊ ñ—Æã½r;vT"§úðš¯éÚ¦gwÑ•"1D§ÿ§¥ù zïÓM4ÂrÞ C²Ñ;ù|à¡VÿÂÿÉþ[ ‰Pv¬OéÕ!Çô¿};¥N[ø4 arÈ"7© ›&@…¤VÁý_ÿÿLSñø"¤…A‡‚w0Ì;NVU@¿ÿÿÿÿÜ Ð°ƒ;Ð €¹-ðƒ0@ð@ÊåÆP3L¸ÍŒÐys!™¢6yüÐö‰ÌÔϲC*æµd5ÿÌîaýs„~ž`ƒ: ƒB§h^¡ÿå« ÿÐOËQýðÚÿò>¾¿D¯ÿÿÿ×õ†Ã Ü'Óä5êÈeD2ѤC+V÷þß×ôØtÿÿKÿéÿPwÿå«.åëô÷ÿÿÿõa°ß,}„ÿ  @Ú ò Á·ÿþ—ýßõ÷ÿÿKûÿÛÿ÷Ûúo·…üÔÿÿÚÿËV\àØ7ãA7Ýõè&áí Ù‘žº_æ~ºÿgßÿ抿ÿÌýÿî¿ô¿¿í[ýÿÿÒÝü–úzwútƒh ÝBm=¿öÓµuÿA©ŠÒm/ÛN×ÿý³õ§ëiýìÏÿóEÖ~×÷þëÿºÿÛmééÒõZnÓéí(a/¨iCJ.ûwÜ5µþÖÂúûanÕ¿µOO×þÓÿÛ ÷w¯þ¾¿½kí™ûfÖmv£­„Ýß I´žé¶)ŠýŽ*?ö+b˜¯V6?þ>VÂ]…l% &]ûkMýZôÚM¯ÓÚ÷ÿkÚ¥§I¥­&ëþN“zM4ÿµA‘¿öÚݯڿýàÃÇÁû¿ìW±Çëva„¿µ°—°Âú P{ *½TôôÝPhDXLðOTÓAª &šiØLõOìïMoM=_µÿÓð¿øä[ìT¶ÆÅEjáokZM¥ýˆˆˆˆˆˆˆˆ”! !Ã0ƒL©ì Ó ¦© Õ?á¯h27ï[» ö¡{ÞÂpô}j­n›´šD@ÁˆˆeÚi¦ª˜Lðšh0¡ÓM0˜]¸O §Þ°Ðˆˆˆˆˆˆˆƒ""#­«uZÒtŸªõÿ_i~Õ+Kî©éé¿…Ý®þµûéªV»ë]:¿Ú}~Öëþÿõõïô¿»ý]ö¶ÿýÕëÝþëéÿ¯¢ _ôŸé6ûÿÿ÷ÿíÖþ¯ëôëõ­÷Kî¿÷ÿûî¯_}µõÿ¯½ÿý:ÿÿ ·´Dó´#Èò#kïý×úý§i¦šeuØŒîŸ×ÿ÷Øy çe~šfY»ÿ}þ·_oÕ~žwG¹ÚWô·ôº×ÿaˆÿÿWÿ÷Ýwõøÿãÿ×ÿÿý‡ÿßÿïín¾8ø2¹]ÿÿÿë_ýƒøÌ`˜ŒÆi—3Ì󚇟 d`Ëç3DNA>D2C:³ï1YIy´uÿÿ¾ÿþÃO ÞhZi­øNÓ ¡v˜A¦ƒ:‡0ƒ> â Ìâì Â! gX¹ÆŒÐ‰D þOžn‰äPd#Íç\§_ûÿÿ`äÇzë÷Úkéé¡§h40ƒX´â©„A ÓÓMS‹3¬x `™À“ïë®·ì7ÍÌ}EæJî«ú/‹Ì¼rîº'mÑ7ÈàŽ&î@ö¯o§q馛ªqé§BÂþž¾½ƒIÿún÷_Óôéi?Ó†_ Ü&òxÉæ]¸H¼†_¶‰ÞO0\»ËŠ'Dã[#|·rPù1ÜŠ=?ý÷ïÞÁõëÿÿãMïôÞ—UíÔ'¦Òt¶ºé½ºÒm ÚMÝBn2ø&ÒO'”7Ü»÷úÖý‡Cõíýÿÿ®—ëûÿ]îÖ=u×^××ëuIi=7V—é?ÿ[÷Kø-õûëø/{ÿï¥~ëýî•×úÿZB—Në½o÷]{×ÿÿ×úØ~ ë×§þ ÁÿÿñÿwÿÚ¬?ûÛÿ~ïÿ®¿þý'ÿ½?íÞÃð¿¿ÜÃëð»¯ÿÿøþ»Ž˜ÇÿÆ»¥duÿ×ÿÿ×þ« ?D£ÿÿÿ¢7á‡õÿÿÿÿì?ÿúÿÿô#ßÿãÿþ—¯†ýþ¾êÿè†ÿßþŸZÿý‡ý}÷Kÿÿþÿ×¾ÿ»Ãëÿø¨ÿK ÝÕÿü°åëïäôƒÉø_}×ÿÿÿïÿÿ§þ« ¿]oÿ_Õáõÿÿõÿ®œ?ô?ü°Yzÿ–£þ¿&È_ýÿÓÊî[–çŠçã uàÝ™­{ïÿþ»ÿ××ßêëÃÿë_ûïÿëÿ­}û^¶™6†}Ãz×¥îÿéS··ºþßïþ¿ý½_ïëÿÿþ~ü7kØ[Ûÿ¯ís’éZûiyù~ÏßÞÙû'UûfkþÏÖf­b¿ûÿºÿªÿuõàÛk±ý¥õÿa{ÛVÖÂÚí¯ö¿z·zøNÒ÷WN÷ÌïüÏ´Ÿ×Û3ÿíÿÿƒlVò+Øÿؾ**8Ø©ûÔPa.ÿ a…½†­«il0½ûiÚû~ú˜ÿÿükwÚ÷ßÙ~ÓNí;_µüSÅ27ìTUqQLuȯب¯†Õ†õî·ÿX6B´M´ÓBÕ0špÐh2CÙ'´á§­¯ætÖéÚ¯iÚp×ýW±üW»§_üDDDDDDDDqÁˆ†0„4í4RÇ Ú ÂaSM?Aªé…NõÿõýàÞ"""#ˆˆˆˆˆaƒ0º &·Këÿû~#ˆþÿ×ðÿÿÞ­ðoûïÞõ½ûµ__×ÿ}Åÿÿ_ÿ¶#éwÞ½ý÷ýúþÞÝÿûÿ÷ëî¿÷þÿé¿ßû¥ÿ¥ÿ¿þÿû¾÷û¥þïÿÿzÿû¤ýÿ÷vå¹W¿â£ü¬nV*¯Òý{ îü®®«îÿvè;"VÙ“¾¿þƒÓ š§™*E\WÈì [_köÓ´õÑ!ßö™–¹Ù㱯¥ý} Û‡„ô7ù’]ééî¿tí==í_ö×ÿîôðŸ¿ê?WëûM´õJ›¯þ»uï^ÚWá®Qè¿ÿö«ÿÚ¶õ§7 ÐRqN±>xS<ΣyGò„jž`ʶ޻µ†ØkòxÑ;¢wÕÇúRï%w… ]»]Šè“ßäoûøÖý=4í0ši¦žš 0¡ 5M4!¡Øi~ý0ÂM¯¥õÓtÛôßÞ“pºn©'ú„ܼ¢w„»¨NÝ"ùü$O•¶ DñÉ[šÚ.Ü•åÛ“†‰Åv‰=~šqªv’zØaþÂM„­†¿ôÕwUÿ_N=B¦ÝuÒtž½V¯UþªéÚë­C[Õ¤è&éÐOÚ ¾]Ñy„‰Æ]ßEÛ’¶‰¿ö«Øaa„©µúu}w÷Òëß¿ozumÿÛéþ©é¿Ië¡IëÛÞ‡oéô›iº ôÝ­­È4Q?þÁ‚L0–Á„¿ÿz_õÿé{Ö¿ÿþ¾ªþ—ÿïﮟ¬ukK’Ç|z÷±ßþÁ‚Lƒ@{†ÿâïïï‹ðZûúŽºéôÒÿÿ÷ÿ¯î½mx~¸ûõ¿uÓ¥ÚKß☪`Áúuªþ©p¿îš¯ÿßûªÿ_ÿû°×÷îÐ4ÁkÔœ_Á|þÂ~¿i­ŠÿÿÿôFÿë–?×_û¯ºÿÿÿýƒÿýƒŒã I`® ¿þ÷¯i«iëùdÝwö²Õô ÿþ«ÿÞgëÿ÷ÿþßõû_Âý¯Aá…_êÓTÕÿïßÿú_ýÓ6¿õÿÛý¯ÿÔ0úïðÝ"W_Doü"(ûTJ?ö¾šÜ4ÖÖ¿ñõ«×õÿ±ÿ¿|õÿÿÿîßþ ËPü½AHž}ÿÞ÷õi«i´¿3úuøÿÿûïýý¿ýïÕïÿ ýwéÖÅ ¿øaWôí0°×ûvÙŸÚþÙûÿíj¬Ï×ýªÿ§÷ô¿ý·3_i>ý×·××ÿk÷½¦©¦Òû[VºÕ«ÿ Ö¯éÚÚ¶—ÿk}ÿiyÅZ~ý­¾¹Ÿõú~ÿÿ /ÿa­¨0—±M‚ì0“ .à ì~ÃKv¶­®¿ôë…ô­}ÿO6Û_ÒÔÝV~ý=³õ¯×úÿà گ &cö˜§cb¿øªâ˜ØØ¦š÷Šb¢›Øaw†m}µa¥kkaXim­®ÚëV¾ÚØ]†aa¦´ÖÂdo¦½‘G¾è4î×þïõÅ|VÅ{ÅFÇÆÇà Æñûa`Á´Âk aa„ ˆa ƒ0„C"B"Âh4 œY'µÖÕ0™éÃUÓ Ã[TøiݺÚ}Š}¿cƒ"" `œ0„EDDDDDDDDG0„C \hA¡œ0š Âh0ƒ2NƒN‘½Ã#"¾™È£å¸a A„ ÂZDF„DDDD!0B!‚a&´ ÔAÙµŽÒƒ1%ñ¡–hC;(™`g‰¶‚úÄDi-%ÕmàÅ‹F£QÿòÙÒ;ò:EV5’’ÿé¢$D¡˜³½c¤As±ó´}/K*ÿýÙ+2e‘ÚÁ ½ò+)W.©éõëVëÿÿê¿ÿúÿÿüÿûuÿÿøü¶Gy|fqžs7ÈGU˜di«tHÿ%ó§ÿê¿]4ÂUPš‡aªvƒîÕ?âÈû7!T3<ί!Àƒ  dƒä)|B<¹DòIæ†to’?¢pôHv‰»^=; J‡ªiªß¡jÞiÿŦvâÓAá<ó fqvC‹‘üÌyüø¤`§âã'?MðƒÂ/0P¹vä¯'—ŽÒ'oéypâ¤oùï¥øþ­ ÿ é§­ õ‹MªiÅ„:OÓjÕ}i=h'¤›«á?¦Ò ü' ²b‘xÿä­¢wEÛDã%^Z‘ÃjN‰ÃDÝõHô;×[O_ [Å_«ÞŸÿZ«~’Ó ê¿¯÷ÿ®›Iè<'I°ÁBÂ}è úA‚AáIçEãÒEÞ]¹+h“ô>ïßUWßôûÿB?_Õî“ôé{¥í×ÓÖß·Mª]7UûéPjž¸Aë¥ÃÿïúþëKý¥ _ÿ×ÿþõ{×ÿôÿ¯«×U}~¢/]?þ «Cé}z~¿¬ïÿ}ÿëõëõõôŸwKݯÔp“­:ÿÜ0ÿÿÿû­ýpZÿþ¿ÿâã_~ÿûûøÕ}ŽÁÿíÿÿÿÿÿèÿÿýÿÿÿÿÿÿö“úì_ÿê“Wù=?þîºÿ _×ÿÿÿ×ýÿÿÿ÷ÿÿà õÿÁëú÷ÿ^¯ÿ¯ÿÿ¿ÿåè^Ÿúÿÿÿêà "7ÿßom¿ß¿ßãÿô¿ÿÿÿÿÿ¯ÿëÿ“wúÿÉ  ŸÿfÿÿÕ¯¤ïúýÿþ¿ÿ»úÿÿÿéÿ·N ÂþþŸ¤só?û3ÿû×ëݳ÷ýÿÿÿß÷û¯ûûÖ­_ý[×ÿm-´“¦×ûO»^×iµµíl/ö¿ž¶Ò×ëlýf~·ßÿkÚ¿·º¿ùšÛu_üW a…ý†é†a¤ý­…ÛVÂÿ¯éÿ¯ý­¦ÚÚWÿzÿ~ßzþÚÏ/ÿímFÇûì{ìSì~ÁüSû $Úà 6¿Øiv°—ö“ÿÖØM]}°¶°Ðh0©é§ÙöºiöŸëz¿ý¦8ãb þE[ǾÇþà ö±ûkƒ Â`„JˆaL¦ƒ “´×²Qý¬0™ûL'¦ŸÜ5»]íÅnÅ~ÇDDDDDDD0„C0B"" 0ލ˜ƒX‹M4L-ö¾¨5ÛA‘¿Þˆˆˆˆˆˆ0B" Áˆ°„A„Mƒ;rµ%,¤©)\±ñj„3'õ+ öT†åtã+ù|| ÿÿÿÿÿü†>ÿ¯ÿÿÿÿÿ÷÷áó´ñÌïS%‘ÝÅL_õéz®™ÚS$Fâ¢2‰3ÿûI¥è?¼ÕÚÿ_¢wúì‰Gd=×õðƒ~?üŠ/_ýWýöx9’q² òX!ÙQ«ëÿ÷ÿþ¸A’ã"|d˜ÏŒ0@Èr‚v&#aȹä(! ?óSÊ êì‘dDt޳ÿÿÿ5_U ‚ d¨d@ `ˆ~‚2 FKG•äT)JüÛ"<Â`‚ Î.óѸ Áyž1šDq› ÍyˆÌ‰Îf„bÌ0™¡¦Pdä‹1d5Óû_M¨5TÂ`ƒÂaˆç% ø&0‘i_§§ õÖ-4õOA¡i¦©„¡!Á Â!l2~?  á„â/š s4 Eÿ^š}„ <  ô &ƒ<Ð2½v¤Çr(ïDÝÇ¥"ŽÑ8h›¾“a§q§÷ÚiéÝééÅá;[ßÚñ… úi ôÓÔ'„M„é?§ <p`¡‚Ò‚t ŸJ^a¢ùÉY,ráÂDᯢì)ÚDÝÔ»~¨“·D‡r(ýÇä·ïòz}ZhjŸiªh4ôþ:O]+××·º¥M0þ«H7 Ϥðœ2ý ¿NëÂpËðƒp› n‚ÿ䣇õ!fïD/´CÝPiáPÓM8Òÿûþ®°•=i5ª‹“tú^“tëý^êýÓO¥Âé'…XMý× „ „=Z@ƒh‚FBý´ô¨‡ú¢;±þúÿ_ŠõñÒpßÿõéO_½]øþÂÿz7Û¯N“ ›ü=Ð"ptmÑ ,Cõ“r"ƒ¯‡Ã#᧯÷¨áƒÿÕÿûú„úêý?]pº}ïI¤ž'§ˆ(@ðƒiÒn °ÈcuöB?ÿ¿ÿƒ Óÿ¿kü>·\_þ´þÿWWOÕ4“iIÒn’t›A=5NFÅöÿÚÿþaÿþ—ÿÿ`×{¼/ÿþ¯íztœ5µõÓmtzöÒzÿ õÿ÷ÿ¶Ûÿõýÿ°ßù‡ÐKÿúï÷õî×WCN“Ö×U«¥ì(_àü½×&ÿýx7ÿòÂdà±Âÿb¿ þêê‰[ÿÿÿº_®?ZÞêí=oMÓÓUþßÿzÿî¬6Sßÿ]ÿ×àßýz ÿÿ÷ÿÿýÝ==B¤ŸûƯÿÿµöÿ^·¾×ÿ{ý/î±ÅWÿÿßÿú¿¯×Ø_ëi?¿ÿf‹ÿ^ýüÏvÿÿï¿ùn ýïú÷ÿý_Ýÿzߤ=WO÷ÿ›¾Óýº}þöÓóžom&×üÏó=¿Ô÷ë³?û«ÿºÿáv¯ëÖ•ýoÿÓ­°¿¶¾ÿiZ«iéß×í§¶ž¿!ó×¶“Õ§ë_­_ÿÿÁtÛ­u^ºëÿö6 Šþ+ïØØ¯a¥±Ã ~à ڶÙïÃ^Ö¼.ÚþÚ÷·öëÿ* ÇÃßòdúÞíÿí[_¿þÂkn=¦>¸­ŠÛöFâ¤v+xÛŠþ+õÿÿà¿ø-/¿ßûM; ¯am?´Óá­„}ÚØOéþ·÷ƒ{ö¿Úÿx/°qþICgÿðˆˆˆˆˆˆˆ” Á°„0˜! &ƒA“…´‰óÚvša5A’~§ÚëþÿïA}ƒZðZÿqË«*,?ÄDDDDDa (B"! aˆ0„ú_ê¦úÿèDGõÄDDGßßûj ï»`ÿÁýƒýµÿ¿ÿHìôˆÿר?â¿ú_Ú ]a¿ð?[ûòlkþýûi _†ÿÐ.¿ðÃüZÿÝWà ‚ü7!x«#uúÿøaþY ×ÿáŠA~ ÂÐ_ÿA¿Ç_ÚÿH.ðoû…ßüˆ°ÿÿ¿ýWàßú_àßû_Òü%]aÿÐ_ÿƒÿÿ¿ô_¶÷ÿÿá¿ÿïÿ"ûÿ×ÿïÿ¯Òü ŒÏýÿ×ÿW ÿþÛÿ¡K¿¿z÷ÿú]E~¿ï¿uþÝäÛÖÿÿ¯ýïÈ;é¿ïþö¾ÿÞ¾t^Tz¼=o]wþíØ;_ í¦ý§}ZÞåBÿ†G{IֿЧWTÖÐvºzß½Z ëÿÅïÕÿÌ+®'Ú¶­Öuµm4×öÎÔu£Ëa+ þÈ4‹°ºêë­­­_¥¦ÿÕ4Èv"Q4ˆVT³$Xijÿ°Øa;VC[VÒl/a[íSÿ†ä£ì§¼÷Úi„ΑU°`¬0Zý‡ °¶­¤Ú¶•®Ú¶“ki˜4úý?õ×ûlpÁX`“ a‚à Øh¶Âà ÚM¯Ûo÷ãþÔ/È£§¯Ó0>6*)Šcá…a„˜0”4½ÓÿÿÜaÚn÷ý6·v¦@ÀýŠŠ /ÙÞ †8!˜Ï˜ yŸœgŒ— x)ðçÈÍ‚&< gãÌã.GïûÿUûMáÿkP=¦™ãÚaxwx¯#}[4Ó´ý8iÚ«h4Ö4ÿÿÿû …ÿ F°v°¶šam5ò ßL&½¿ÓïAü?õ°žù e„J| yr(2L‚”<Ã!³¥˜ÿ°ƒ4ôí=aCXjƒ4ÖÓWA¬0š úoz§÷§¥ß¢cëL&¡éÅ„g#ñæ^D.„A‚„ ôidqš öQ˜Îf ŒDXˆ–¤ š™ q!á‚DPAÁ‚gp˜NA„Xaì- Ó_ÉS$‚7†ÉCù(ÝzV¯ÅÞºé õý8Ó¸¿‹NÕ4- ëA38ün  f"ìÄgØL>"ªâ"!`ˆ±aD*  *Þ¤Ø0RyÒ{öäï'¦ë’·|˜ïÑ8h»´‰ßÚ’†‰;EߺÝÈÝ¢c´L}þŸúú xÖ=8´=V""væ"!‚ 0„ZþŸïßý^úJJÝ}ýi=;Mø`’xO½þ|n ƒ ƒrVíd­¢íÚò8h» Ö]¿§]w"Ž×ø•ÝX•˜0¿Ø_õ¯Ó­'N¯éwÓj8kþ­&è}~ººn˜Tï×Aÿ…¤ïI? “p½/·ö‡ŠÔdÇñÇ!&LÝz÷þøýUºÓ µñ®ê±Þº}ïßëk§§ õûÿÿ¨ÿÉ®»Âÿÿúýï®÷kýz¥]tõ×+•¿ï륿õˆìއ‚­ßÇZÿþo^ uÿÿý߯ÒÔ­Œ¯Xûú®ÿêûµ÷ïX<+ÿìÿÿïðWÿ÷¯ÿ­¿û[[ê«¿ãîª?’ôþÃÂ"ÿöùc×ÿد„íµ¾Ÿÿãÿá&%Ü™òGòCþù+ܑݭ|ˆ:ë“ð@Þ?ÿ†Õÿþ~õè×ÿ~¿ÿÿÿ;2:^®³ï§Üû_äß^ëÖöÞІø_[òÅqÅòËþÿ@·ÿa„›¯ÿúÿÒQÿݧ÷Úÿ«ü“·ÛMê«Ãé}ëá¿ÿðoõô»¯âµ×ÿåëÿí}û׿¬Š;þžúõº¯^·ýÚÿÿ¦=k×ôž¿ÿÿÿ ¯G ŽAà0µ¾ÃT ä·r9,{qV•÷}™ÿý×ï_¹û[×ÿË€Qßÿÿþé…ýÛßOußO·Lmtý¦a¯¯_¶~)õÿ¿ÜÎ7ö¿êÅúÿ¿ÿ¨Zßµ}ïÿ¼Ó[õ¶•­°Â÷aPûkðÖÒµµÿ‘[Iú#ö~öþÁA}=5[ì-úÿÞšûocb˜8þئ)߸¯cƒXªøa?ù¯°¿ý¯Ø^2$»§,º£<‘ðh0Ní4i ÓNÈ ÷wa5M4û ­ú¿iê¶ ¯iЧö:ý½ŠŽÇö?cøî"""""""""""%:h4Ó†N;¾ÓL-ý­ØMK~È£ßôÝúý¯øˆˆˆˆƒ"%"Ð0„A„ ! B,&ši§Eϰ™ݯaVÈÝÄDDG¦Ò`„DD¡ˆÿ_ñî½/ø%  ÿ¦0—({ô®|9v@| š,xƒ …Âa:Œ“$(ˆ.[CŠE‚dQ°G Âza50ƒ2J("qBEB „Ð}ôa`ƒÓ `…ŧjžžši¦º ÂavôðœZi ýBhy ñDééÚi¡ê˜\x wI¾ù <†qè‚=wkª~i7ô2 Œ7fÑ zú!æÂ ™Âtú ²," ¸A¸M ›D,ú!t< Èv];u·áá:Aé´ƒÄM ƒZûÕ'Òºm+Iè= žŸN_×Ó×»Z\'Ò½o¾­ë{títûMÓ–DñÞ‘ª2vc;…ñ»J¾ž+ 6“ÓZäÜš_ šg}¨ïHéÊ¿ïÿÿî>ô=6žU/"W•"ú©¼t½­êú¿kõ×ÿ š½~ÿ5_ýÿêÿÿÿÿºÆû{×ø]*oýêõz÷ÿÿëÇñù ÿÞ ºëÿÿýõÿÁ[¯ÿ÷§ _&ç4ÊÖÈŽÊ,žÿÿÿà¿®¶þåH×%@Ç„D-†y„ ð@Ìó8 €ÏFe`ƒñdH¦`Âc<Æòäx˜dƒ ‘Kç²xéfl¨»×ø.±ÿé¨.ôïN- Ÿ„ô4Ó0ƒ4-SM4!„Ðq Ñ  g …˜0@ðƒø¸Í Íæƒ#¼¹Bq‚T+2AEƒ“D )óU𯯾ñ…_եÑGj¿ÉŽõOTÖþ8¾ÓÓÖ4ôÓ“qvA Âa3¬~? üa©æn78! Î.Â"ùœ0AŸŒ?…ºÿ_ ø_H4 ÞƒÂywEóðeøAôNòî)xåÞ^9(µ ¤ ‹‘èœ:—DÝHÇhœtMÚ&î×þ­8ÓÓÓK‹X†ªˆiëô@‡ëþþ¼ñÚéÒßÒµÓI6ÒM¤ÚO à …L+`¡pœ$ƒè&'A7ÐznJÚ'Ñx•à t]º—Õ‡_ÚR1ñÜŒzqZÂÿ×øD3úVÒñºë§ÿ&ÿþ»ïê©Ú§¯ÇÛ¦Úôš õÐú¸T§‚Iï¨MÂÒäî‰Ú„„‹Ç7.ð¾mÿëèë„@‹ÿ¯®¿ÿôßN¥×￵ë]cø Iý'¯QiôŸúëK§§®’zt›­è¥ÿø@¿Ð-µaà¿ûþßÿ_íÿ¥ÿëïëûk¿ÿþã×nª­Ö—WOMÖý×_@¿‘6kÿÐ/}í& ÿÿÁëHzßÿÿÿ‚Óÿ4°]ÿûÿºú×ÿú®¿¯¤÷ý¯È†€¿Ð-´ õÿ¯ö_Uÿ×ÿ…á÷ø]† ÿÿû PÁ}ý|Wÿÿúß®½ÿ ýà è”ÿ¼0þÿÿÿÿü.Áýx^ .õû¯ðÂèFþ¯ßÿô·¼yáïK×÷ý/úØ oA÷õ†þ¥ùIÿÿÿÿè”pßkèôDqÿ®ÿØhŒ}|Ã×ÿû_ÿ¾¯õÿ뮂õÐ[Aôÿÿ‡ÿîÿÿÿÐ^ ì~v@¿ûâ¿Ð'ë[ÿÿ´¿ÿÿ_¶¯ÿÿZMÿ_ÿá½½÷þ¿ÿÿ¯×׃uÿý~A|²nº’ë±_ÿÉéa}/®º÷¯õÒú¯ýý¯_þ¿ô½½õï_ß]~»xãÖ©½ÿÿÒ¬ÿÛÿ¥ïÖ‚&úß§{{~¹šÿ³?µlüßÿÿÿÿ6½}ÕuûÑzýÿÚ{úõÐ_½ï®ûÿ¯ÝzÑÁuÚý®“®ƒ­µµõ×Kÿ¿ÿ[5zÃýs¯ë÷þ«ßÿ·¿-]½ÿû¯ßÿß®‚4DuãöVJÂÝ…ì+avM¤Úÿÿß¶º¹ݵÓV×v×ä,þy«­6~Út¿ý;®×«3ÿÿ_¥­×ÿ¤"ÅH¯ö8ã‘`VÇ"À¨â¿ÿ쎾;a…{øøiG¬5ö½¬0½¯ÚûþÈTõïµ××}îB[þú¿þÓ†Iõ¸i‘G»XpÓ†˜O×ÿÅûÁ±\?}ö?‡ò8Å=EoPâ¶ÂQ°Âÿ½Z}­ÖBWÿ® aDAœ˜A„! Ð†mBi„ -Úi¦¶ŸÙÝ­»Ó#}4ýªÓ®ÚdAûUµíýÃö*¢¿ë«iïV­ õµÿèDDDDDCDD4 !£F"!aDA˜ÂEÎí4Ða{Ná¯þ¸NÕ¿ëßjÚVžºî±Ȉˆˆˆƒ"""‹¦gM±Â &·°ÕÜ+Úýö¿µÐÒþ5xˆÐˆþÂÕ¥¶’i6­«kÚ²M! ÂVÿð͆†½¥ -„¬-…ì,ƒKH˜ã´¿ì|JØaa¤ÚL0V×l(a´ÿ» ƒ–LS 0¼l0Âa5úà Þ;QmlS `xcÞÄÈIÐ0©­õÓNÔŠ:i¯ÙáˆˆŽ¶á­¥a4ÖÈ7µ…ôºa;NÓ „ØiúÑî Ð0ƒ  Âp  0¶† E8xˆˆaƒC0@ÂhTá… ¸ƒ$–Ô‚D‹BrÚN¢"#Xöéþ×Ñ7xŠƒžVÂê™Ù¬Jbg¢Ü]a¥ù*•oLìn;ª°g@~B÷ü·1ÿb¹zñý×_ýãÚíÿÿ†¿ÿ¯†c'ë3"„#:™ ²6g\Ìòï43«>É #^EUü0Zwz Ð2ðLÄh= ?Â!á|8L0ƒøgXŽ3c4 gâäF ec(E<|ˆfC" ·ËH1ºøM>5M>ãNôâÓ ¦…¡˜N!„A¦žše¦|8AžÁ2xü~žaçèý|œQ8µ —m‡ÉC„‰Û‘»Ñ7ÉA9qM;ÓO½?} í}nôÓ]}ò”tØfõ¥Â~ƒÂ¦á7ÐnN“ËÆ‹Ì–d¬ŽÜ»Ë·%t]ÑxåÛ ¥Ro’¶‰Ûã}Q'qZ]ÖÿIø];OÕÒ]>—Tô)m7\&“tõi6“i4×|$nº~ ^n´½×íãúˆ§×íÿ¿þÐõþ¸õí~?­}6Õÿôð´»òê×]x_ë÷ûþèWýéÿHiÿz¤¿«º[­~¾‡ÿ‚ûé}è°Ô¿]A^ë¿ßÂõ¯ÿ^ê¿ë ¿×ÿÿ…ÿx°_û`ï׎œÞ×ê?ÿÿÚ#ÿ¿ÿì—þýø{ízÒ…ûõ¯&þÿÿõÿßÖÿ·ÿé½þ+þ¿ŠïêÿögæîgkßékßûŸ¿ý­Í¿¿úÿÿ×Ú?~›kkkÚ[}¯gŸYº¿_ý³÷ý§yÅým™«ÿÝÿÛ•ÊY‘©ýÈc,4¬/ðÒ°½…í+­ÒïM[[_þÕ°¿kj¯ý;K_ý/³ÁIiÿ{ÅH¯Ø¦>+cŠãý†ŠcÿÛ ¶­¤Ã ï¶¶°_ªa¯½õú¯i§ö™]{]lm?û±OìS"¿â¢£ÿb½ú®8†qІ Úh0˜M53¦ƒ Âà öšdŸï[LþÓA§ëéÿÚûþ@ÄDDDDGDA‚ˆˆˆ†a´Â 5U´ )c ÉÂöšj·®‰ zÄDDDDG¡DGþK^ kÿë¿ýuÿÄRÿá„?ñæ&„PIùø„>f†u3Y„@Á‚ Ü3PS£6! ¥ Ø„`„@¥YX¾¢Mo  ív˜A‚ †ÂiüZqa8´ÐvÈQÛkúqvšh^äN!z ŒH) mó–A/!-¢, âÂCL'a=o±ÿÿÿôÿÿOÚOÿõMý*î“ð› ü+„nnýŒž4Nè¼h¼è©(ºË¶¸Ò'FôMÜŒv‰õM;N:kÿÿkþ»¯ÿõ°»ÿíÓÃ_®éÓNý:MÐíÓÓ× ƒ×M´û]<&úIþ ›á7AÐO>‰Å¼Ù“¼¼p½Wç 4?ÿûÌþÿo¶ÿQßɆ1ØZû ¿_õ­+ý6–>=?ß·úMõ´íi7ÐxWMÓium_ÿMý´¿ÒMt¾éù€ûïçWÛÇ÷·þö¾?_ÿÿ^©_Ö==zN­MÓu´¿ÿÿ_íSÛþ½ö&?ÿë¾–äÇ×ßëí*ÿ_ü¿ýýþ¿ÝWßüßÁ‚ÿÿ /á¤Ú¶—ÿÛ~Ç_}¸oý_úøØqëÿûÆ ÿ¿¿ÿðW×þ}zÅ5ÿòøb¿Ž ƒûõ þÿÖªßÿÓÿìïþÿ«Úÿ_ü‚ÿõà»ýkÿöÿþƒò|µyÐoû’¼Œuña¹ä¡¿wþ¯ÿÿÂ#{µ÷_ÿü/ÿê¿ß“p«ÿÿaL&¿ïXBþºÔ¼=÷$ý/å—Ëúÿùs ÃìWß_×Þˆãÿþÿ®!…´Ó^ÓO†ºjMÂi„ÿ½yCwÞª³ÿô½õþý×ñ§ú÷Jÿ¹a5Á÷úÿñQhDB#ƒ0ƒPM~¾Ÿÿþº~ÿ¯¾¿íí·ÿ¾½aô¾?~¿Òÿ¿Þ¿ÿˆâ"#ö­úûÿv“Çjë«|ˆ;«×ýß3_~ÿê¿5^´—ÿÿúþë÷ý~Å"9qû×È<ƯljwãþÏÆþÏÚn—ö·ÙšÿÿoÿþµÝjÿõþ»ív×÷ý{Kïź_¶©¥«k~½­¤éáIÈJw÷[Ìïõûýs={íz_´û_ÿu[_MU6×ñ°jÇ ,0•…Û XaXamx?ÛJÂì5þÕûöÕ°›®–¼·¼%îÖÓ^õ]Ví5°˜_×á¦)¦)ŠcØâ¢£¿¨ã¦+ö5Û v·PÂÃI´º"" Ê Â`ƒDM1Žå#Ô&º ¡Ê„di;L&š 4ÈÇï0è4È£Ã]û´û_þÅllTqÅzÄDDDE!A‚aDÕ‚ ¢禰ÂdŸµû#{ínÓÐkÂÄDDDDDiÄRRÈB"f´Â ¼²¬&XUÞ"""""#´’ÆL j¡…Qÿ–Èœn;3ŠÖA3º/ê©•Êã½TµRÿ;U²%w镸”D[6¤ÎD+"u‡ýgj#²‹;»õ†žŸÿïÿ¿!/ÿÿ×úËç¯ÿ_ÿÿðÿü¶c5}ÿÿߥMïü¶àA‚›ŒÆP2 e3Ì0@òäN@ˆJ¦ œˆnÉs!²Tάû!Æ©2“4EU}×ÿ¯ø´„Âi¦šÜXAÜZ !„A‘ãqœn6üafpA„ ׂ 3AOÆyÈ `ˆ^# ¸di˜0æ  ŠEš2ÍõÿþIÚ$?ÓM4ã«O´ÒM׸Œ нÓÓ‹Âa ІœXL<a‚ |Ügù™Dª\‰Ç™‘ ´„ùy—tNè¼pƒ GNíIE-ܸÿ" v²(ï´þôÕ?´ÐÓA¡éú 8°ža=:NºV“p®¸L([N„'®tƒ¤ÿÁ7'€ž^8N žº/ÉD0Rî‰Å·%m©åÃTIèûô¿Â~žšWVþ׫‹ý67ÖÓ«¤Ú¿ôÝn—]U7OôÛI7Aéë &Òyy„Ü òWíåÜ0RW——wúþ¤øõÿÖ=?ÓúýW½?Ö¯ð¿ÒÒzê´›Iééªê+ý&Ú«IµH7Mþkð¿a~¿÷ß~¯ýþÿôŸ~ÿÿÜoŸ¯ÿªýýGõÿ ûà¿™ˆ¼>¿ë×Oÿúÿþþ½úëõ¿ïþŸúuIþÿýá}p¿­qÿýÿÿÿýG_ÿðÈúÖh%¯ËÇþ·ïïíÿÿ­ºÿŠ?ð¿ÿ¯ïÿÿÿ÷¯¿þ„k…`ÿ oþ?Öøáÿÿ“šÐ/ýÿD¯ÿûÿõÿûÿÿÿÿøVûÿÿÿl[õètûð¿á6¯ÿÿ“Óô¾¿üŽýÿÑ+°ÿßÿõõ¦ÿ¯ýÿý¥ÿÿõýoÿÿ?ÿü³ýßüŒ?ÿA‡ÿß4_Uë¯ÿ·ÿþ¿¿ÿßÿíÿÿ»éa·úÿà½ýå„í&ÿm6ÌüÎ×úÿéu³E÷ÿ×ÿþßßÿÿïÿÿþ½xok¥öº¶¶¿î¿Ú·Ún¿ëþgÿ¥ÿæ~½öh­}¿¾¿ßÝÿñL0¾Ú°Ö҆°¶­­®†—í¯ßí­¯í«i¶¿ý§®¦úów¯ý™ÿÚ홯LW±LlSür.½Šccâ¿ÿá¥`¿vÒm~ýµmp©¯§ë¯éßë雼潄ÓLŠ>Ÿ§ý‘GnÓÿû_^Å1üWÈ¯Ø¨ØØ0’ûÅC ì4¿a¥°ÖRº‘…ˆ0B! Áa½eâ ;A„ÐdÞdc¶Fë…ûU¿´Ó#îÂv½ý§ØßúØ©^ÅqLtÂâ""""""""4"3*" Âa‹†eÚ !§i¦ƒ$ðÉE¯jáF?vŸÚÃMtÿDqa‹ Ŧ°ƒ jqþ-ˆˆˆ‘ºÿz ‡ÿßcýk|›ú÷ßë¯ýš ‘T.E.FL˜eƒ,™ÀI+âA”L ÁC0A‚ 20!)N%'Pž© ðƒÂaH0˜Oúz¦œZh4âÛúHŠ;N-SÖ¹ ‰ÈºD¹Ä$D˜CåãD|ä,4EvWW÷§›‚:¬=7 „Ý:O ÐA³³X’DD-ȵ¯éèi¤›ªÒn›„ô\'a3µ&Q(‡‘L‹B÷êõÓ]=7]_éú~©„etgb쉣±UWúþž©Ö×§K“· Wß§žVši¹2 ÎÁÿýºÖÿ¯ßÐAúö×Dé™-Y%¼çý¦W*ˆœVc¹½_ÿþõö·õ{×ÿ[ï)ìì;]?ú]]?ÿßÿïÿk¥ÿýкÿö‘ïø2>a(~Ãÿ×ÿò¬È#:?9>¾Xïë¦ÿÿîÿþt/¨ˆŽ˜?þ-/ã3qœy—Áeàƒ übÄÌeÈä3y¼ÐΆy'ùBuÕÿþ¿ÿúÿ~ÁÿÿÿvµÅ¦âÓÓ´q 5 ‚ ðpƒ=¼3ÑøÿtN3Dný3²Ýr]_Þè±ÿÿõÿaÿõ¿J‹†ÿÉCDÝ­§i§|Rqiï§öÚ¦šyê„Ü9–¾g/‘ƒ3Ì8Â!"\3‹°ž„ ùfdD¢'3y¡ÞöH‰_˜ˆLÕ|„_¯úðßÿëúA«¿ è'—y+¢w„ÃEåŽNì$NÜ”b8}è˜ïTžqZý¤ša4,'qa=SAúa Ði¡eÚ}X `ŸÆðƒ:@ƒ `ˆDpfÈÐSÙ>H̦aŸ"Afò^Ì̃y¤SÿþIDÿ个-õkW«ÛH<.›¦ §§IÃUOL'„ÿ ƒw}ª/5¤¼„~'é§§Úht¿§„ÓÒ‹þÓì,\C „i¦šÓPƒAö}„0ƒ<38dã#°˜Í0ˆH<χ³yµRz?¬7ÿâ:ï&S~ºÒÿtºaŽ;WÕ=>ï·¤ÿÅ$Ü-/n¬&à‘;ËÇ%tNØ`¤ï.Ü0H¿ )w¹wEãÑv¤põÚDáú$>E#É»^4߸Ô'ú¦žœZÚª§aS«÷àÿÿÿ·ÿ¿¥×¾~­ô·Ö7ßÛêÿZ_Ý4õM× éáV“ÕS~¦é&ö´žûa‚IþaBntËÈ`¤ð–Q;}I[„‰Û—Ö[°‰CåÃ’vµÛú~ÿÛÿûûáé¯ñÿý`˜/ÿ×awëÓêžµýñêœ_龟ë¯ñÿ¡ë§ÿ¦þžNÓÓMUl'µ§…N“þ‰å ð›Ò   pÁ|$]½~ßÚÿ¿Õ°ï¯ÿøéÁAë¿ ¿}ôëñ_úzëêïé?«ÿôÝûÿ]WëÿcãÕXýSÕ_ÿN“a®’ë§þ¾©ÿþÿûõû æÿÿá°¡­ÿïö»ÿí"–%v ÿþø/÷ÿêúºÿõ§êÿëÐþ—ãÝ?ÿÿÒ½'û!ÿ×ýÿ†þÿúÿÛD¢‰GÿÿDcÿWEÿ«ÿÂñ‚ÿëÇñ‚èl?ÿÓÿÿ÷4ø-¯uëÿø_½ûÿú«÷úy+{kýítÜéƒzÇü½òõº _ÿþ<íÿV¿ÿíá|/׿÷_…ø>×ô?ýÿð¬?ð^¿‹ÿøÁÿúÿO¯íÞ«ÿ¶›ûV˜n)ýÿ$î´·ÿ_ëã—Súÿ“vÿª%~‘(×~½ú#†ûKÿÿµþ°ûõoÿÿõ ¯ýÿþÂðé´¿µ´½´÷¯ÿÿõý¾ºKÝØØÿÿ$^õ å„ ïõ~^º—¯Ð/–ö?ÿþ×ý¸aõè”uþ¿ÿDcÿû_ÿ¯¿l0–ØXa/ÛV_i‹þ÷4OÿßÕ}ÿûÿ½t÷üi_û¯ÿýwƒ}/Ýÿ±_¥ ýô¿ü½?üˆ8Aÿûÿÿ­_!øWÇûÇìTÿí+N×Û?v–¶­¯¿÷_ÝW¯Þ¿_õÿÿÿú^ï¥úOûè/úÃÿÂâ¿ý– /د¿ÞLØ&þÖkú¯b¡¤×Ú¶­¯Úí«§…ÒûKû]ìýýþÛ¯½¯ºÿÿõ¿6¿ÛÿÐ_ë¿úÿÿÿº_þ—ÿ­WÝ­¦¿ 5í1[\TT~ÇÅFƃ_µú°_m]ûKøuý®Ùûë¿}ÏÞÙûÿìÏ:/O×÷_—¯¿ÿýZÒ÷4[ÿõð¿ÿâM4Ma~ /a?ôÓû {áŠûcÝŠýµ÷l%ß…íl/é~ßÝÿáoM5Ù >aõ÷ÚȨúZ›¿ý{öÌûOÿÌÿïôZ¿÷íÄDDªÀÁˆ0ƒD0ƒ ¦S: IÓímF=‘¾a×µôÈ£÷j«b¾Øø6˜ö8ýŠ¿ö/ÛÁ„¯àÿ÷ì%«!ûÚ¶5¿í}|.½«jÚzö¿ºÿæyº""""8ˆˆˆˆ0B Áƒ"ÂÂi­§}­Ý¯ý¦ýà×k‘lW°oQQ]ÿKplqßÇûÅpÕ†—amm[ ¶¾Èzº^m4øˆˆˆˆˆˆ0B"M>(´ÐdnÓ¾ÖíuÈ£ðÓ÷ÿöÓÞõµÿ^Å1ñ±±QìWÚŶÆñ_ÄDÒÁ8ˆ0… Á¸0„CM"çi§Zi¦$è"~ë„öŸè27ð°Ó[»Oµöõí}!§D(@Â#,X Ј†yn°˜NÉB œ Ó%i­Dz(÷dcöŸ¥éâ#Xˆˆˆˆˆˆ0B( â!h0„Cx-¯®¸î"# ÁjÖ’ÿLVÅ`½…ˆhZÒØ¨0A„,&šˆˆ†£þM†¨S´ñ";WJëQY®üÈ8‰Ç}˜Í˜È§õÿ*×áSRIÂ2Oÿéÿ×kÙn©Dñ*™4Íÿ¿ÿÚ@ŸàŒˆþímU3³”D¦*y4Êëkóÿüq¾“ëþÿôÓ;¸ï¢% ®XÓ*ÑÖ]ÿÿ¯ü]:ÿõöõ„@ËÆáB 5³ñr?˜"róB"¦jòb:Ç\ª÷_ÿÿý}ýÆš}hZ~fãìó3ðSÂá gâã=˜ @ʉäPdHó2$Ê{ÿ¿ÿõ÷ú&þ“N·½?Ný=44ÓN4-44â ' Â 3Ð f0”R yò ÌÍYHgHÔÌâæó±p¤äxg†\9¡#ÌŽ:…<Ï3äpõÿÿÿÂ|'tNØ0KrW’¶‰ßÑ;½Ò'n)QpäÇiÞ˜^ÓAá4ÓôÓZ !„„ø&`ƒ3 ‚  ì g£qr'všÝÃÓ> ?ó Tÿúûþ=StõôõÓÇMÚõÁKÍAÑy“Ç%n]äâÂ’Š' ~N2áˇ¾‰»IVðž’h8†Ÿ¡hwéiü;Óû¬  òž?Ž çÆ@ãñ’ ?‘žn"3H#<Á“–|”2Í/þô—O×]}ôß«OI:ŠNÓuÖ“h' 7OOÂtƒT ‚yxÑxÑ;¢î)xâ¥ÃEÛ’‚+Ñ7mHßÈ£Ò´û»»ÒÕõâÂa>ïOÂxP˜OP…BM Aè<äga0@ðAŸŒ2³â” Ï7'*Ìèd$ìÌÈdj[ëuõÞ÷KµßÇ­üG®º÷ëIµö¯öÒééÒ 4“p’ $ð˜Aè6(OÂn]©ûäŸòn¯ð½do¹1ß꟧4ô“C´í=:ø´4!„ 0¨< Ïa h3ðOõïÛý~YÿÝýé}÷ëô‡ÿK¦†éñ÷ª¾´¾¾'„ßøo¼$ä¯|°Ás?¦ÑyAÝyvþ^h"yDáú'n•Ñ8rPÑ8Ú'ùUb–Ö0§aU4ÐìÅÇÇÿôöª ×ÿM:ÿÿ]ÿõµ]¾¾Òëº~¯®Ÿï÷_þµiÝ~OO÷¤ÿO › øJº¦è=<&ú~º´Nòñ—t^9xáK¾‰Û‘ÃÖ]Ñ8uoÿ×ÿ×ü-/¡ã_øüÐF?ïð_¿ÿ¥¿ÿÿ]k»ÿöÇû¯[[þ·üj´¾©ê¶Ö¿Cü..’}Òn©ÞÂÑ}—”›A7 U§ÿõü±ôý‡…ýÿ¬,ü~ØzÝ0ûþÿÿø«û ‰þ;àÖë_ÿïZ¿Ò_%ºñ÷Û¯ÿ§Þ·I÷¬qºý'§Þ¡×—¡uù1Êþõz%Ãz%ßÿÿDcÃýa~úƒ¯î?ÿþL}ñ×$;úöûÿÿºëü7Þ£ÿpµÿkû¯WI}×_î“úÝ=A·ÿ—?ý¿p¿Á½ÿËÓÿ$:ô lÿôJ>ÿ ?ÿÿûZ§Ž¿ë¿^¾8û¾?†½¯v ðÈâðÿÿ¿ÿî¯ þ—ÿ_ÿIÿÿµÝ/|? ÿÿø!½ƒa¿æ× ºÃíÿÕûiRk÷ï×¶¿ªÿ_°ëýøöÿô?Òáà¿ÿN·ÿÿ¿ÿýë¯Ûuÿ÷ÿþ°áÿïAwƒ{ø7ûòêÿñ\rcá!Õ὎?ýÑcÿÃþÿÖõØÿõþ¾Áá}/ÿù\£×s9³ögÿûš/Ö¾û^Ì×ÿ¾¿ßû·ýÿûýaîµÿÿäâŸÁ^ü“ëz“ ž‹ÝdÇ0åO·ÿ×è•ë¬7ÿ×õÿì=ÿÿþŸðÖûN¿ûOÛ¯Òü¨^ž¿ögßþh›?ý_ïþúÿÿú ¿‘GÉ#þþÿûOÅGB>ÿ&îOO ¿—«ÿþ^¿ÿÃx@¿ÿÿìI½†† ª¿ü0¿¥]…ÛT6ºÿë¯í§¯©»9ýퟛõ|Úû_÷ÿù¶kÿß«µ#›©ž¾ÿ¯Ão×NýU~øoÿ¿ï×ð~ýÿÿŽ˜¦*ïýŠö7i‹ã°¶¬ì0¬5¿°­ý…µN¿×]mPkþ@®ëû3þ¿¿½ý»~×ÿÿýun¯íkþÿ_ß é×ë× /¦›ýëv«kýئ+ÿŠŽب®8k /[ $à ÆÚÚ[ .Õµþ×ïùµtK¿ÔŸ ýâ£ÿÜÏÌýݳ?ýüýÿÿ÷þ¿ÿ÷õëþß÷ÿ 4  &ša5M5A¯aU27XdžÓLŠÿðÐvý¦·b˜¯ãcØØø®X¯Øaoÿƒî£®ÿëÝëûM´ú«_0ó¾ï{?wëùŸ›þýÝlÏÛô­¯õÝxˆˆâ"""""""" Â…¦šdáVÓL,2Oi¯ ÂdcÙ{µ‡Ø§ýŠ`úý¾:ëW~÷iwø`”0—í…ûþÂM„»m{ C í„î××ím?Výs;í}ûWJÿˆˆˆˆˆˆˆˆˆ0@ÂÁ!‚Ë„TÂÚammúnÕ¿]~ÛM=Ull~ì~Å{¶ÅqÇñ\WÃVÂ[ki7]Õk­«}­¥èDDDDDA‚ˆƒ ¡EΠã¦[¦ÚeiÚvjŸÜ4ßa{[°«ë§ö©ßØâ¸Øâ¶=ãŽ)†ê"#Mˆˆˆˆˆˆˆˆˆˆˆ† ‚šjš tÐkpÓË É?ÚÚ¶Fÿ ŒxkvŸ¥éÝÚcõЈˆˆˆˆ0Cˆˆ‰> ÂØB"BMN0š a’A‘dcÃMTmq¡¡a8þÔFÕ[ðÒÖ”G¦¢#ÿ–å±)úgfqÝQÙTvÿßä@ÀƒØ<î?ùªóËÓS±H–Gtÿÿ¦ÿd&¶¦YÔó¼Í_ýqÈý?ÍUªÙØÈíf*‘Hd˜È<ê¿ÿÿý}WjD½u ¦šg`ã¾9n:ÿÿÿÿÿÓýõ•ÊÅ#³Â’H,«\‰ÈFˆÛ* èd5‘hëÿÿ_ýßÿðP_ä‘І˜A¡§ƒ ¡ Ï:Fp `” ÄQ‡³Ì”Ìäé32Í?0É;¿¿ÿÿºKÄxWJ…O §iÚÚhzj Ä<  Êx"G3‘†2q…Ÿì£Y&ΈöDf¯þôõúÖ7N/êÿï¤ÿÓítôÞ×O[î“×Õë A¸TJÜ»ÉãA?¢ì)+µ.è›Ó–é;N)=Súµôã[ÓTÐÓˆ´„ðƒAëa5 ºyèÜn0@Âà‚ ün.AøAžþ`ˆÁ~º·OþÚúý{Ý{ýÒ[WŽ¢¿õÕ]^âíøí?]PÂÒn´›úz°ÁSh&Ñ;¤—mšEÛ’²VåãDâÂ~Jèœ:Dáß&;tN¢C»ô¯Tô´ãôõãqa>/;M Oÿëþƒ.(.à»ÿÚÝ}þ¿ÿú륯øý={þÞþ¯_]7OºO°šxI=S¤Ü' /׫§…A¹<è á—é¹8 ÉÙáÑ;H»|¼h½i·O¢púäc¹1ò1Ü>ûÓׯõñ‚ø/ÿ°q®ÿQþ ëÿ×ïá]o ­÷ôõ×õþ:é:WøÖô×øö¿Ö“Ó]7íé: ë¦]:O¤ô÷A‚§„-Þ„è  è¼òy /,Ž"w’¶‰Û·_ÿþ¾ÿØûþÞ Qÿüqø-Ô<¾¯ûß¿úõßþŸú¿zëÿî‡ý/ýÅëqz}¿ºoIéºð××OOM´ýt“a„Õ7\'ÇÿÿÒ%Dqÿöÿÿÿ_ÿþü.¬aúßÿþ ¯úvØ-ýÃÝÿ×ú}×õúôµõׯK¯ëûúéÆõÿ÷òõüÿáºÿëý¿ÿÿªÑ÷Øx_Ø?ÿþÿÂÇÿ0]ÿ¾ÿþ {ÿ[¬ðOÿÛÞ+ÿ×_×ßëéý_ýuÿÿú¥ÿê ËÓúòõ¥ ]Ë'ÿäø“‚ô ú è•úÃÿûkø_Û­ƒ _þÁï_ú ü® ø_CÿÿzðXÿÿÿÿïÂÑnQ§ÿt¿ýß¿ÿA¯ý !¾»P~ËÖù7(ÿ°—è”zõÛDoÿý‡ÿÿÒÿÿëøJ×þ»ÿð_÷êÁU¿ÁxÚ¶¶¹ÿýþÛÿÿÿþÿÿéla½/ðßÐÿûú —§b¤àÁ´ ëõÁ¾×ûD£ÿÿ„GÑûKÿÿ×þÖð¿ÿÿ…ÈJÔÜßÝŸµµ×vûÎ.ÌÕªÿš+ÿÌÿÿ÷úëÿðþÿþ—ð¾ú¡Òùjÿá¿õþ^©ÿ-_þþ6Ç"@%ÿÿ¯D¯ÿõ¢QýÿÿŠ?ÃI´›Tì/¶­­¥a~×TëOWm-´ô½[¼Îÿ÷4Y¢oÕ߯ÿJÿE¸Wëþ–õïêø¯ýøOýè/ôRÆ¿|›¿ïÐ\ïö*ôÿÿ#¨ Ð.ÃcŽ=Šê8â£Õ°¶Õ††½¯kkëa[_<ÿí;O[ó÷ÚögäèÖ¿³5ý~?ÿè½m×þ÷O¿ÿú¯÷½?ÿú ÿúÿ…Ó¥éÿðB? ­4û^Óïñ±ÅGŽÅlq[iC ßÿ +jÚØ.šø^Ó 'þ¤ë¬Š…þæ›÷fý™þºüýÿ¥þº×ýhžŸK^ý^¿áu_û×þ—E͆aIí4ÖÓ# ‘¾œ;†ƒ=µµû®EþÅEFÇLVǰÂ_a}†økk!ÿí…µ°²MÝ…í?üÝÿÿgŸ¯ö~ïµÒþÒìÏÛßßývÿE«­ÿÿÿq!ŒFlB" Á †š ¸´ÖÂ…†Föšßþši÷~ÙŠðÅ|TSáÆÃ jÁÚÃJÂí¥îà &»M…ýµÛ -µíoµÿYí2ïÒ´ªûZýûýí}Í?ÿâ8ˆˆˆˆˆŒÀ¡Z„0ƒ2pƒ'zi É:Ú®¼5M:wÃv)ŽØØØö?ئ*ö+Ž=ŽØ¦Xÿ‹a°Â\ƒàkioÚWí®ÿÈzÚÚÿžwý¯ëúñ -Zi•a0™(HŸé§d¢ÐtH{P™~Âi¦þ½­ëiƒi¿Þ Šcïb¿¿ØqQÿ{a/†¾Ø[¿ˆâ"""4؈0„C¬$цa4Ðjš„Ðkh2p¦šÙæp…´ÈÞÈ£úÙz$öô×íW¾ÿÝ?ð{ÈàWǯÒëÜDDDDDDDDDDDDC4 ˆ`„DC0ŒØhC0è0ƒ ÃÓNÓL”ZÿDíÓ"ý½…í{"†‡Êæb¥~¢""“ˆˆˆˆˆˆˆˆˆŠ[„!œ4Ó†M4Ô®‡® ×éèDq4ÆÅ6¶·PÁa3<ÃËäñ|ä\‰ÈÄjÍæÑ¢4$ [Ô'š2­æ#§å %ÿûkI>“ÿŽª×M«uÃ©éº ÛX3' á:'t ü|Oš.Ýz'pÁ .ò8¢nãNLvƒÜ&Á:zöši¡ÆŸk 5Óî- Bi¦ ט‚xA„`ŸÙòÌ@á)ÆP38¹‘@Ìó¼Ášò òí?ý­…¿¿K^ºã®¿úÚn¦ÿ}'…ðž©á:A´ ^4n^u—‘NÜ•´N-Hß.&ïDÇÚzö«ê¶±ú_ü&ƒ‹O¼!ÅÕ Â, ÓTл4‚ ôgD3ñø g\ ¡ ÐiŸÈð„ÒG ÉÇØÓ…Õ|wô¿_×¾ßþã¤ãÿû×ããõÒZOOôðžºpÍá6“Ð} Â’¶‹Æ/’¶‰Å· ºä¢‹À¡|»¾ÿÝ¢ní5õ±Õ;M8ïÓûîÓõÕÅ„Â}Â%Œ%¯ûvšš ÷ü# ¿ÿõ…õÿêÿ·ë§z}¡ÿºÒ{¯n‡¦átí}i=]z𿯧 ²{ðeñ}EæƒÉ] åÞJá“N^9yDq—tN)(v¨œ;ízøûOӾȮ¡6“ûø_äî¯üÁôúû[õ´»¡_×}ÿKúý[þAÒzÿÞž½G¯þ¶é…OMþ¡éßt›ai6“§zH7òxß (_6C Jòñ¢óÁ…¤éûè+¤¿Vþÿð¾ ÿÇ^Á¼?‘´ž ¿ /×_÷ý?ýïÿ[×Zõï¯ßéxÖ—ýuõý:µO×}ºímW«L*ºé®+ºN—òc°ÛÌïDq†¿î‰GÿÿÂÖ¿ÿû X?ö/¯ü,?}~Þ¾¿®ÿþ»¿ÿÿ¿÷ô¿Ôiþ‡ºßZþŸÿ¯Ç¬|éGý87p[/_Ú ÿÿôJþ‰ßÿ¯ÛpÃïü/°aýãaúýt·ÿêþÿðÿÿîáþÿÿúßÿÖþÿßÿ¯ÿ߯ªþ­¿KIÿt¿ÿÿ…Þ‚ÿùi:ƒ{]rQöÑÿÿØ}ÿ¿þ¿íëÿûÅõül?õÿÿÿã¯éoÿÿ§Ø‚ß_K¿÷wø_^¿ÿé~—ÿÿ†ðoå¤ËÒ~@¿ÿè0ûKÿÿþ¿µúo¾ÿØÿÿõÿ¯÷ÿÿÿKÃü‡ÒÕ_¯oªô^¯öÿÿþÿÿÿÿvðÿû¥ø7 ÿ¿—¿ìWëÿü˜}÷ø¯°Ã×ÿ Ãúÿßëÿúýÿÿßaþ°mku÷7¬;?ëk¥ÿÿÿÿ¿ï»þý~ëûÿÐ7×ÿ×ý}ªûׇäwÿ¹bOïÿÿþ¿oÿ÷ÿý‡øDo Ái¡¥ð×î÷ÛY:ÿÿWùëÿW]û3ûS‹õß»3ÿÛÿ¾¾ý/¿ïßþ)ýøo@Ÿþ°ÿÿëýÿòõþ—ÿÿÿƒÂpÝ8Ø©Ä&+ø0•Ó×Íõ¯ëþÞ‹×ýÿßûÿ4ýúûßõÿÿÿ÷ýÿ¯ÿýpÐX7á>í{±]w×qÇÈÇð~ÆÆÇÿ¶ía­÷ôÚjÚoV¾š›µýoÛ?^»ÿ§ÿ\Ñ~¾£ýõõ¿úÿýî—ÿñOWÿÿ¾ßþ÷h0½ªðײ(ôNO»½W¿ìŽÈÞDZÅAñO±O ?oN?mµMvBÿm.Âþ­§õüŠZ˜¼õ_þÙžjÿ}×oýÌûý³õš/û_ëÿÿý-â"" ˆ†ˆ0B‚4a„-UNÎ<Ó$÷ “Ùè21ÿôÂÜ?¿ÖìS¿±ÃÕŠa¯í}}†¶Ýýéú߯ÿø[þÒµõþÕÿÖÓÿýmÿͯýxˆî"""""!‚ !Â`…¡vƒ†Lœ&» ¶¶LŠ?pÖÿ°÷x®ýŠØ¯cb¿_»ŠoWf¶¿ mvÿki{jØ_Þ×S}…ÿÕ?öÔÃúˆˆˆˆˆˆˆÑB ÎRa „"Ó²Qk “ö¶iïÚÿv¿þé®ïäWÅExb£Øþ Šcø¦+úb˜û kØ[JþÂÚïÄDDF„DDCD0ƒQs´!„Ó%©’{M5MxD¹ìŒxa?_Nøië¦E¶Õ{UþׯÇülp~ÆÅX¤±§ÄFq †ˆˆ‹NÓ0šh4Ó´ ¸Mn *Ú ~í27òÇ oöšëÚ¿^—ˆˆˆˆˆˆˆˆˆˆˆˆƒ)ahZ »M0«d¢Ó»A“‹PÂ¥µõGˆÔfBC†.-lR¥ * \X `©¨Œ!ù6YD"–àL¥ÆäÐgeQÜff^% ÿœZk¦Uc°JÒþžtµò'yÙ”TF¸‹F¨F"@9Ú8ã÷íBÿ=öšà™\Ö;O‘%þ¼aŠÿÿþ©Å*&Q2ñÜDo"YÕßÿÿüåî°Œ®*wš’¯ÈE¯Ú¦WR¿Wÿÿûý§§éëä%ëÊåc3ˆäH"ñ¼æ`ʃ”Ôóy‚ÔŒgFDí5ÿ^ú~¿ÿÅZ‚ÿàŒ’¢ ðƒˆa 8†ƒfà‡A¡†38ün3Aá<38Äo1Âb4<¹š$ò[bþ¿õÿÿÊŸþ–ŸÕtÓ]V´ x´=¦©§xAÄ4ÌàˆS™ÈZÍæÀ`ƒ\‰ÆH#<¹äg˜2EšÞHDiæÿJ—_ÿüÿè»rVÑv#Š' u‘Ñ7ËÈ£×X¨ÿNïï»ÓL'˜Ma4,!„3p&b/Aˆ<øëÊqšfã© gÈì$jòBÿÿýÿO^ü'IÑ<òóX`¨:A¿‚m¸`‘8u kDíÉGZÝýšvšvªÇÞ·¦µh4 ÓLã=áD'ùœ‘#Ë‘èÄ|fyžh2ö\‚!—"rŒÜc4G‘·’fjEC²vDÿ'Íÿý^º~®žŸIá7Ó[ýtíBn-‚ë„߃6°ËÒ«77eæO(»h¼rWEã’¶‰XKª&î𘎜iè>Õ0ƒÂq|^˜A§hqkƒM5M4!ç˜ Ï0Lž0Âa3ñs/g˜`ˆG‚üÃÏŒ"åÈœ°˜F¬Á2ƒ$Αª%óZRÿßÕ]~ÿâ•ÿ«êõþ“÷ÿÿZ´•Õ¤ôôÝ=h òó[ô“Ï.Þ‰Û„‹¶Ò&÷ôÑ!úi÷¾·Úñýé'©ë„ké„Ó]>,'¦™œ…„A„A„ ô`Ÿ‚ €ÏÆ ˆG—"r#N3<ÃþÿöºýWÿõÿ×øÓÿö ãµ^ØõON“Âú„ôÞ“È_ ê‚AôÕ¼ Øeùväq ”aKÇè¼ J!©QvÚ¯’޲pémÓŠøý;OMÿi¦‹N.ÓÕb 4­ÿê?ÿøuÿÿõ[éÿúéÿÿÿïj?ûv¯BÿýBºô„õ é'ýá; Òl0Pµ§éð¹+†_—n‹ç-¶‹Ç Dí°™;¢wà äpEw.¸h›´IÜé§IÇÚi¬úÿýØ{ÿ×Ç_þÿ×êh+ÿéÁ}.ž¿ _õÝzO~®?OW÷UWý×Ö©mÓפõ÷Mpƒ«ÂëaW ö„é:MPnÓh¹+†_·@ÁIF]ÑvÑ;p¿Úýÿÿì?ÿÿë_ÿýæáaþ† Ø-~««à»ÿ,5à¯ïÿý¯×ÿý_ÚO×פ—KO¥×OúÝ~“}8ÝÿMi>);MÂéëéáU6“i<'…“Ó±_Uÿþþ¿ÿÿýý ø_ ß¾ÿÐ^øëèbû_×}þ•¿ÿÿ¾¿â¿ÿÝ%^¿éºÿÿÿþüGúzw®¸_î7ZÿîXOÿáõÿ—¯ÿëÿÕÕźý…è×ÿ×x_×ß ö¼`¼~¿ÿÿ_Çÿíï_öŸ{×ÿÿë‚×ÿ×t»­÷«õÐõoÐ_ÿ¿øoÿÿÿÿïø¨,7. ¿@ºÿÿTGÿôFþ¹‡Ö¿ÿÕiwÿûÿW¿ñÓ]ÿë×à¿ÿÆÃR Mÿ¯ÖÔþ‹×ÓÿïýÿÿÞ¿û¥ƒÿ ¾_ÿûzßÉ•õÐ-÷Wðˆßÿÿÿÿÿúýþ¿ïÿôÿþø_ÿÕ‡…øýc¯ãÁ~gÿ÷f{¯ïÿÿÿûÿÿõ·ûÕÿß®¿¥_[_è/—WÖ^€Ÿ—¯ÿ¿Ø®¿“¡þL}ûÿKÿÿÿþˆßÿþÃÂþÿÿøZ¶ŸÈJ~×__³¬­¤ëö¾gùúÿýß]³úÿÚ×[ïÿ¥ÿÝýkÅG×ÿÿú×ÐÿþßÿòõÿýÿòõúÿÿA½¿×ÿýhþKÙÏM…mvþ½öÝv×ÿo6í-zÿ³Ûögéý÷îÇú÷_ÿíuúÿÿº]ÿý}ÿõþ¿õú]ÿü°…ü½;Ë×üÊö?¿ØØøßƒb˜¨ýŽàÂÿöµµþªÂIÓkí§kiX_Ö×Zp·ùŸõêí™§ýw}ÿt½®ÿÿþ›×_õ]÷þÿ¯ÿ÷oKÿÿþ ì'Óý…áúmß÷ƒb¿ö+Šc‘£ñpÁa„¾%qw¶­¯ðÖÒÛLÃÛ__OÜο³?ÿïÖÿöÌÿÿöýÿÍ»ÿý×ÿ×]ÿîÿÿ_ÿºü0„Q9Ú hpœ2áSÓ „ÈßNÈÇ»^þ×]íîìS±·Oìl~ñÇà }…á…Û]¨k…íý´Y úÿ_×öô¿öÓûÿo×4»?¿Úþ¿ÙŸÙûýûßýìÍqˆˆ¸0„DZ - “ßÚ¦Fðì.˜LôÈ£ëwÞ›­Šö+cã­Š¶/ßðÂØX~à öý¿_Û_´¿´›]=Óÿ[õý´Ì]úýŸ¿³?þÌý=ˆˆ‹ˆˆˆ†DD0A„" Âna´p™'O[#u3ªkÚÙöŸiàØ¯ƒýŠŽû`ýŠ‘G±þñ_ìŽìWìq_°Öþ?µþÖM…°¿jõÚø[]s7°©ˆŽ"""""""  ´ôM4Ó#~×_Xi‘G¢núÞšþßÚ÷ý§þ*Þ¶?بئ=Ø×¶Ký†¬0¬cñ`„C@Á´", £qh0 É§vƒ ­­Ø^×í0¿ /Ù¿NÐj¿iø6+do☯íV""#¸ˆˆˆˆˆˆˆˆhŸDC !hC ¡ i“„ÓÐa4 ”Z¦½Úÿ 4È£þÂëÄDG`„ZZaaŒG°©ˆˆ¦>-p¨–Úu•Ê3-zjv 1¥gaÜíc²·ê˜Lì²&™Xúëú˜õ³³8‘«ÿämíU䯦[‹¾V¿}øÁ(í’U¦¦EDdšïÿïú~A,Ê´«¬GkÖ*>bÿÕü®ª§GzD²ó±*Ï/¾f‚™æqÌÄ|d ašÌÈEŸ˜d8­~½þ×úwo´;ËüZôÓ  × „ |X dDG±‚g˜fòä9"‚.È‚L ffjÈ›*ªÿÿÿú~ëÈ£Ñ!ÿ¯¦šýªi¦¨CN,!„Іgà™Ö0  Ä0ˆN"ù Ö|<9š©s(#®A²¯ÊȆq"? F™™ÅO™ÆÄÿÿÿÇÁ6‚ ü/(°Ö‰ÃDá˶üܘïN?µAéÇk§iá4д8†>Âa3ñwçÅ=æyá™æóÈ‚$¦šh0˜L aƒ ¢¯ßÿÿúéþ©á;¤ð' ±­Aäð•´O)+òQ—`¥Þ¥»…H›´MÂÑ7Òq^º4ÓUô¦šiª w÷ ý?òóù˜Â!‘È Š²(#Ds%Í5(d¥©!>ÿÿ¥kÖ#M´øýiuOMÕ_ Òm&Ã/‹ô¡ žkA8eÌ»Â䮉ØL”9q„‹†‰Æ*ôþqªa?úÖôé/AêƒX°ƒ  Ó „øû… @ÏÅØ Â!q‚…Htr.ÌF2xðÈÙŒÈ" FJäókÿÿøÿ×·µ×Uõû[êÜ*Û[èt›®Óp´ƒt“Ân²òö¨¼ÂDÞ‰Þ]êHwý^©ÚÖº¯i¦œiÿ§ªziá^ð˜BÂi gXüp(@Ï ‚z4"ï.Fã8þxg¢¿ýX/ø[ÿ¯õëÿ¬¯¤ž¿Òëúéþ·iê4›×§„ztœ–?Ü‚wù(éI Qxô‘xÃ%yqDí¢íÂDáý:&î5ÓON?TÒOÿ»AÅá.Õ4¿§ý† ñ‚·ÿûÿÿ…ÿªÿíþ¿ÿ®’ë®ú§¡ïÿªÿIµªéô½ª´ƒuÓÕ7á‚ <)xÃ'åۗɈ.ð¯åÆ]¤NoèŒvÒ$>ô“úNþ¿ü0µà¬úÿUÿàªöGôÿ†¿ÿºêõ„ÿî«ëûÿ°Â¾¸«Æô’z¯éÚé'ú÷ASºN“N“¥V’A´š§aËá 7%~]…%w½Ÿÿ†"½Qöÿÿ÷ÿx]Pëö¯Åø%RÏ]ü^üWÝÃßõþúÒÔG­¿}+¡¿ñöšÿêé¿ÿo¦éô›iíU§m×á´O5Òá¿ÿÿÿ_H/ÿß°ÿÿøO¯í5¯m ÿ©¨z¯R$,WÿúÕÿ¯Mú]o¥®¿ÿOU××WøýwÿÃiwËÕa¿ùf?ÿþÇ'þ›K ÿ×i}xK¿ÿ ûõýÃþïÁt?ãÈÁ?ÿúý‡ú÷[ÿÿýûÿþýoõµú]oXoÿÿú÷éüº¼ºÅaùzÿb¿ôJý~ó>‘(õ°ÿû¦ãþð·ßéÿþŸÐáõ׬_Çÿþ¿ÿú¨-¯ÿ[zïºßýÿþÿÒK÷þ°ß_ÿË×Âÿý}þÝwõ†þ®´Fÿ¯õ¯ÿý}‡ÿþßÿÿÿþ½Þ ×Û¯¯KóE«ÿÿë×ü·ÿõ¥·Ú÷ ¿ô¾ßâ£A}åYË«'ùá?þ¨$>Jõ¢Qÿÿðˆãá‡ÿ·×_ÿÿ×ÝÐ]«ù<¦¯ØOSrç¯ìÏýÿÿƽïô]WÿôYý}×þÿÿp„ï’ º¸CüÆ(/_×ï…òË¿ÿ­†ÿÿûû_æ¢7¿ö[ ßvöÖÖ×_í?í/ÿ‘B5ÖÏݹy¿ìþÿþÙšó?_Ýwªýÿþ²&äQºþ›îé÷ÿô´àÿû¬±aRêÿÿÝ{¾Æw_ŠŠØä]lT\Wþà kÿòc î¿k!ç´·OþBú{wù¢ûßïoßÿ];ºïÛÿûÿÒÿþ¯ÿÛïÿÒÿÿú¿¯×­×NÓïȃßwb˜?ö?Ãÿì6=¶+¦V [mW­ƒö×°¶ºõª°µ©®ìýánÖím/¾—oÿ4YŸ¯¿ÿïÿñZ&8/ÿÿÿA|SIqÄC “„Ðaa§za27A¯ßaVõÿé»ÁþÅ_÷ÃøéŠý†–öÛTÕµâ¤qÈ9«ãÛu{_ló¿m6ÓÿK_n½{3ί홪ÿÒÝ—§ÿâ""Јˆˆ†hDD0…ª 4í5èŸY'øa{H¼5´õZû[M÷ìW±|lTT?kßþÂïik¤Ø]µµ»××´Óöÿ}3nE!Ÿ¿×ûÿýýZЈˆˆˆˆŠ6"! Á†XNB.—6ÖNÓ#^ÓìŠ?wx:ÞêÚÚÛö>ØäWìS|0”}0Âñì0•¥¶éµäÚÿkizUò%=zõñÜDDRq`„!qh4ÓL&œ2Nƒ0­…A¦½„ÓûîÓûÓìWqNò-Šcƒþ;a±Pû°±Û LýX_ßþ#ˆˆˆˆˆƒB"!„h&‹L¦§Úa#~ÐdcÛ¦¶Eí4ÛþÕ[Áìuýû»Ö˜0JÕµÄDDDDDDDDDDA„-0„0BÓA…@Íj ÂÑ>°§dQôØkûÿdQüXØãHDDDDDDD]C-2à&˜M5H¹Úi¦ƒ ª°šküDq›àÁT–¿¬DG`Á{Iu±“!bvª@jÁˆj¢#ùm¼›- †3¡Ty Âašd*5Åf'ÉóÝ|·"M4þý4õ2‰vv®?tNòvÑ;÷ýšøP˜Lï¢ ¤YN½ÐMÓ‹®½ú¯°™‘xÇdãµ¶v?z÷¦ÿÒÿ‚‚„Lî¹Ï¼& !#µXìéUzµïÿZ…¬¾ûV¤“'Ñ+ÓSª½0¦@QŒÜ® nëÿßÿë¯A¿¿á]R~Id—´àƒ?‚!ÌÎIA!?Õšˆáæ‡E­ïï·ûÿÖBýaW¥ þB§\ : åaTn.ÌF2x"2Ë‘8ÌóT\ÉIµ$3^DïU×ýWý~¿ÒAuDþ›i¯ü~˜CÖÓP›ëš‹ „D'g Ï.@ƒ(, gÆg›‰s!’a2vt{œ_ÿÿþ¿ÿk„þeËÇ'yw×ù("»õX÷Óï´íi ôд!¦†¡4„A¡  "äq“Ï”„œ¹ ÊS:ÇXëÿ¯ÿÿ¦ÿIºzt¾ž þ^9w…ÝK·Ì?‘Ň%n\dnÑ7h›ôMÜŠ;ÓWN4Ó´Ó¸°Ÿ„8†y Â ü`ƒAá#ŒÐSñr„Â9Ïæc5åñš#D{7 ÌÈèi’濘ˆl«QÒ5¬Óÿú¿ÿXÚÿÕ?¥i=zÓÞõM¤õÐxN‚npfðƒpƒrxå݈aK·HÑ;Ò&î[ºný;~Ðqi¦Ö-8µAé§jM4¦ƒ0„B "áa@ÉÅÑÏñœGCÙˆff¬ŒyC;{ÿ~ôýéÿûï_«ë}tÝ:=>×O]6“t’ ®› ¾“i6$Jè¼z¢w’†ˆáô‰¾F;L.úvéé ïOãÂiéߘM4ÓÓMPi Ó ‚ ü0@ ögB„  e3‹‘9gÇ„_ýø*_ÿÿ¥Öõïë]ú¾:Ý?úOÕÒONý:NÕ=v§„ì&ðËZAáåã“¶‰Ä2ø•´NòW`‘yÒ—Yvþ.Ú'D×"NLvšiá8Õ¤ãî4ôítÔ&qhh={þ¿‚„¿Ì"?ÿät¿÷­Ý{ÿíÿßýý7ÿÖ+{ÓÓíjñCí×½5Z\+H?]7 ißI ý$ÿA‚IÒpËNƒ/_Ú'tyw—ywåÛ„‹ÆHáhœ8Hœ7DÇ¢nÓMmSßÿÿ……÷„!ÿñ׬z¿èí;ëý¿ý_ÿÖûUû«¯oñ¦öÕë민oÒ»öþºnn“~ðºm¦Òt›I»IáS¦è0H ô‚l0H ßôŽ]åã’Š'³°¿ÿú#xIýÿÿþ—ýƒøØ?ô4¿ëÿÂûúôuþÿý'ýü%ú¥ýkÿ·ÿøûÓIuÞ7ÓuÕ }=¦´Öé6“pžƒ«[_ÿýÒÿÿÿþëb£ÿÛúaÿÿÿßTÿüríýïÿ¯¿‚Å{ûû«ÿ¿ôÚ¤*?ï^½jøúÿâ•í¥ãý}ë«üùŒù1^üˆ8^°ÿÿÿëý×éµïýƒøãÿ㯸î¿ëÿÒéMHÁ?ÿ£¨¿×ôÝúºÒº÷ÿ»×¥¥«ÿÿº×_/^òÅ>¿òzÿß­_ü"7ÿûÿÿÿ…ÿ¯ÿÿÿþ0¿¡à¾ÿø/"ôøwû~–ßúõÿ­'úÿïþÿü7ø7ßÿ_ÿÿËбoɘ¶þõÿÖ¿D£{kÿÿÿÿúÕ¯_ýâ½Xqÿÿ÷]{_úºuÿóEQMÿ¿ÿÿþ“ÿýÚÿÿ___àþËн?¼½~‚äÇËI«ÿÿÿÿéýxDqÿÿDŸ÷0úaõÿì?ÚV¯¥öuµÿÝ7_óñº¿³?ÿwÿKû÷_ÿß÷ÛKÿðÞµÿÿõÓÓ¯¯ÿëþ¿,˜/åë“Ó ïÿ ýXÃÿü0þDZôÇ ¿m.¿†µí¦ôßûOÍwö~)ÿt¯Ò³?^ÿ3¿ÜÑßþ¿ÿÿÿþ—WqZOÿëÿÿ¥÷íh/×ÿ…òê‹Õÿøoí<]ûßìT}qý{ %ö•v©¯ mo°›kÚ[jÚ_iÙžmÿ™ÿ÷Ý{ë{ÿ¿ÿ·ÿÿ¯»uïïÿÿÿÿéTÿÁë°™ý®™~Ðk­i§ý¯cö?cb Ø¨¨Øa(av×´­}µm?öÓÛp¶•®¥j[¬ÎÌëÍßÙûý~ÏÛ~¾Þÿ­ë÷]Ÿ¬ý÷×ÿëÿ¿þ—¾Ýñ ƒ@Áƒ"L*wwaHuí5Uô­¯a=µTÅ1ìVÅ1KÆÅ]¯ %ñÚV»§ÚL5a­…Oû_Û]·WÒµý+KúÿÏÖ®®­Ÿ¼Ïív×ÛÿóE»ÝŸïû_â""""""""uÄDD0…¦ÓL'jXáBh2OÚvš}ª¨7Ø®øâ#$S~Å{qû˜al/Ã[]†Ýýµ°­«kk¶ð¾—Ú^»iù®[?:oÿœèÝ\DDDDG`ÁˆaaPaþÝ‘GÓ]½˜O°~ýAûÅlT~Å*G¨þFþ68¨¦>+cn+Û]† ØZ¤÷VöÒöÕ=?øˆˆˆ‹†„A”IÛ*˜SMIþÕ0·Ã#á„í?µ[_ûNÓMm|ûDZ^Å1QQü0°Âÿê„DDDq5!h4""!¡ÂH0ƒ,, Ó°ž¦ƒ ’ˆi¦ÕIî­­‘Gí;½4×±±_ýqÄG#^%ˆ´!†i Âi Â 4׆Iáªßþ’B""""""'Dk@ΪˆÚëÔDF"=\x°£ÿ“eqÔÎÂò¯•Ö½SA’ˆÇe½=.õRe¨ª ™È¥ÿ…¯þš§©*‰TDï×ÿ|-üÿ–áqª;T‰njÇ2ŠÛÿÌ;ÿÐZ«§ùna~¾©…;ë•ßõÿúßôÿ¿¿;?~vQ¸šR¹Y¡cS:=I¿ÿÿÿÿÕÖ‚OÎâ$ïîA„ø gà˜A”0@ÏÆÔdv|RIù¢0d?5¼Ã$2 _úýþ}CX×ýÿTœ\C „;N44Óui Á ðƒ3¤~? œyg³<ä\Š7›‘ æfKšdBÍ'Í/ü¿KûñÇ.í"pä¡ÉE­I»¥M5øµN4õTÂqiÜXCL* !„A„ <5Â7«9˜ ˆG—2‚Ì!æÿïÿÿM Ý=7<¼† „‹À‘õu¤ê0½¿J½… þ ƒÒM“TØa"yH7è¼Â›<•ÃR8ráÈÝ¢íè›»Óû´ûý4âxTáý ÓM5B¦4-±a0™èý ôg  0„yr'D‚3G"¬ó ‰¢vK²sßÿÿOÕ×ÚZõïîž>?ÿ½zOC]Sïí7J×NÁBÒ Ò}î²íú.Ü”4N#òá¢q‘ŽBDáôŸú÷úñ§pÓµÂw§¬Za†éC?fà™ˆ ÎG ƒ^·ÿëÿÿ×ýý;~“KÿÖ—TûÚ·Ö•øõ_ZÝ=7íô“ý5M¤ ¿ÒxO'H>’'nJßè¾oÕÉ]´Â„‹Ì•‘ÃyÑ7¢nÛänäÝú&ïí5MNýV.ã[ÿüÿÕ?ü~¼?²<·à­þ¿ô·]þ¿ú×ÿõÿõß·ê4õÖßôÞ==^•<&×ÿU¨WNÂ…MÔ' ¾ ´m&ô¡pƒAÁ–¬¾%NÚ'm…Ë·%â¤cù(h›… ÿ¿¯ÿÚþÿ¿ì?ˆßÂÁþÿük°ëÿüoÿþµoT¿÷§ëý~¾½iýïIïïÒô—§úþ¾ž¿¦¾pºzzÒjŸáBÂtjûÿÿÿýj¿°ÿÑcÔ+ÿëÿaïý?‚ÔÿÇÿ¦¯ï÷ýûÿ÷ö¯¾ÿ÷ÿÿ¾ßÿ¥Ó±Uê?Z·XéxÓU÷þ¾ËÓÿ±_¯ßøoêûÑ(†ÿÿûÿÿ]‡ÿÿÿ×û}¯ÿñÃúþïúë{¯ÿ¯ÿýÖë×Ûÿõ¾¿¤¾ºá½ë×ÿý/ûåÏþ üµé†ëÿþD€¼7ÿÿ¢QÃÿÿÿ׫_ýÿ°ÿÿ½ÿKÿøãûÿüÿýÿ÷ÿÿïÿP­oúßöÿccK~¿/N ÿö¾‚ðÃÿú¿úuïØ?ÿÿVÿ¿Öÿuÿ¯ëÿÿöþ<¶ÿKÿ¯í~ë׺´^¿ý_§ßÿ¬=ÿï·ký~‚ðÿÿ,"ÿ— 7]nÿÿü7ÿõý{ÿ_i~ÿÿõëðÿú ð}ÿÿß+‹ßö–®gÚö¼>ºuï»W÷¯ïÿÿ{ß÷ïÿpßÿÿþëƒÿ_³ ÿù7rÉ÷ýt[ºýŠýÿ«ôJ> ÿú#†þÿýa¥¶•­¬4íw^BÑ«kyŠ¿òEýŸ¶¼ß_ÿkÙš×ÿÿëÿëÿ×ã×ÛªÿÿÃýÿñÇëÿÿ-YuýøoþZºêÿÿöØØ8¨¨¦)b¶V°ÂÚþØ[_µû ºûþž¦êm.Õ´¾ÕI×ýþh½ýëýí^½ÿúÿ¯þºô·ÿÿûôá¿úºü7ÿÿñV­ê©ú튊Ûö8¯c}Ž_°¾Ø]††¶¶½­ûë ëÿÛOïìÏ7mú¿Ú÷ÿf‰ÿu¦û_ïwýíÿÿ÷ÿïÿé{‡ëÿþ­a…0êXè4ÈßµI´Ðz¯¬5íU;ñü|SlVÆÅjÇØ_ýí~Â]…·Òó¬ºÿ¥ÚÚg]¿¶ÌÿÿK«üKÿíÑoÿ÷ÿ¿ý½_ôD,qˆƒQ9Ã0™vžš§ “ÚkiÝ‘½¯}§i­ßb¿doدcØúm[ k &ÂÜ?ÕÕ?û]ím/ÛÿùÿÜýgåoõÔçÿæ{™úÿïÿ3p±ñqD!Ái¦' ¦ƒ'  Ó'ÓXdžÂ|2Ov¿ëkk⣊Šb®+Ša¯ìVí…µþ×~¶C§ö—ÿÚ·×ö¶©®yÿwkþn«ïÿø?øˆˆˆˆˆˆˆˆˆˆƒ"B!„è0½…µNÖêoÅ~ý±Q_±MU_ãþE~ÇWìm…†·þØ[[ ÷ÚX_ÿíÊ>ˆˆˆˆˆ‰B`‡ 27MB <ζF: ×[ Ú¯¦¿­7Úýý¦¶ýãb ø?b˜Ø½cŽ?ÿ‡ÝŒE!QË0Dt"!„!‚ ! ˆh¨m4á„ÓNï.zà ¶ž„Õ?ȣݧÛöšýªÿ¿°±¡œDÖ„E„"@Áˆƒ*¢ô ݪi„ “¦œ53„ÈǵÕz'˜ˆi/ÄDDDqD0„DDF¸‚ú¤"—Kdcÿ×L0”D5±Ë>ˆµDÌZ²“F¡D•Ì€ƒk¦Ic¿ŠÙ"§ü‚~kIêd ¬ÆÑäyKx.ï ÒçjÖM4ÈœuŽêÍQÎÆÜ5ÿÁÖéÒÒÿ»ÔìÖœD™Ú¼æD2;3_ÿ_áRýg/ÓÕm4È93µH¥ÄÓúÿ‹þ¿ãþƒÿ×ïOý÷ÿÿèŸ}ûþ¿åÈœ‚eÌDb'#a©üÅþ¿ÿÓ{â#þ-q ?&âD-@ÂÌó8¼O˜Æ ‹Ä8Ÿ>@‘†ud9s eeÿõõÿûOïûÕSO´ø°…é á„à@@Â!^a38»)Æ‹ærÃcó2!ŸeÌ Íisw{ÿ¯ù(¢q©+h»~‹°¤otIÛß¿é]ÓÓâÐj¡4ôÖßA„8´ø‡gâðD+‹%Ë7ŒÈD;Ç0ÈnØÿøO °ÁVmzxNi † KõÉ[›ùvÚDáÈÝ¢Cº‘G¬i¦…j¸Ml'¯ÃCÓ0˜!ÜC„ fædgš Ï7ˆÑ"‚1G³PeFfgVC2²ÌG\ë~­_§ÿ^¾Ÿ¯ïëWuK ÉÓÓ ƒ`ÁArñ—Ç0¿—tIòQ—î¿XÓA¯wH4×–?; ڄа†šgX&gÄèä0@ô 0“ÿßõ÷½^·×úôõwíí7 §éÒá%µÓ_¤Ü'¦Òx/Ô2üžQ8—tNòn˜rQEÃN)ÿsOM ;ûN4í;Õœi¦‡ÿúÕÞ¿ÿöýºë_ªñ÷§ëÞ¶‡¯ÿH=tõzï]„“tè Ü:ON‹Çû®‹Ï.Ü)p䢋°¹(¢Né|”4N·hîÔ*ÿ¿ÿÿ¯ÿÿýµ[ÂÿÿßCÖÿOþ·ZÓý¤úã{·W·CAõÿ§ÒÒA¸OOÓpž&ééøIO%m·/%ÿýþ¿ÿúº_ÿQà¿Ýzô ¾¾·ÿûÞ½Uéaƒ­/ךּKí~´›¤®›iúÚa7 …× ÿÿô¶ÿÿÿÿíÓþ×ûÁøë®þÿþºð¾ÿµïí{믯~¿­ë…B=jض“ÿ¯ûêKýÿûÿ×__ÿ¯ÂÖÿ¯ñ׫ÿü`¾ÿ‡ÿþ jëÿÿý¯ßþ¿þdŸëãÿ_ý×ö;ë•ÿÿý½ÿÿÿtXÿÿë Xoãa×®õ…_ãÿþ××Íûÿ ÿ÷ÿîÿÿõýu.­ÿrzt ]~¿ÿ®¿ÿÂ#Aÿaï¿øWúÿ_ããÜ/L/Æ ÿõÿ}×ÿè'ýÿÿ__ýË×ß/]÷ÿÿÁþý®v¿þÿÿø_a…ü/ÿ¾·U©zÿþ¾?Ñ1ÂÿÞ¾¿Kÿ®ÿøãÿï—ªûoæýè÷ÿ %ÿþˆãí¢7þˆÇÿüÎþöÖýv¾ÿÐÓÿÿû{fj¿ýÿþëÒü—«ðÝ­ûÂþ¹ªñ^òÂQ=j~  _Ës¸$ ÿû +ý¥§!ÿí¯~µüˆ¯gï_µ¿ÌÿOß¿ÿzÿ¿þõÿÿÒÿÿ¯_¯Ãtÿˆ ¿ÿ~ÇÃþK°“jÿÈ!ukëúþÚúØU×óï_lýÿþ¿_Mÿoõïõëߥÿÿ_ºKÿÿðÔ´÷ò.£ãŽ¿a»±û /á®ÚÚ¿ý«k^¾ÿí®ÙúÕ´ÌV¿™Ä…ý¯ÿ¿ÿ/_ÿÿ«ÿõÿÚkö™ð‰C÷j«ÿö¤Pÿ"¿cئ?ýŠcö[Ußß¶¶ÖÛ_mSVÒ¬Ãë׿lýðÿÌï3­-w'_þgëñQ4" a1ƒYà ÉÂÿDùí;#†ŸÚÚßiþ?ø?cãcb¸¯a…¾×öÂö—kòû¶´Ã[[ é®Û»VÔŬDDGÐ0M‹A„ÓM0ši’…M?°™'îýï§Úwß⢘¯ÿ‹v=ØÇv8þö_°¶Õ[¨ˆˆˆˆˆˆˆˆˆ0B"!‚ƒM;$ý„ÉD2CðÂöµþ×í;_µLU7ñQûÆÇxjºâ"""" ˆˆ†ˆ4M=4×A‘Ú¦AÇøal*do­ßÚݬQÚÀØj÷DCA…4 œi¦ƒ%2p¸i( IF±DDDDDDa…Aªÿˆ`ƒ „°Â\DUŠôþ`ªM…ˆÆM„×å¹$w ynGÃ+«ŠHíc"~ÖÎô—TÌ•Ëçöw]ä¥YÚxœ9ü?ÿIç"Yðá–âAÈH¥Gc3±tS¢”ªûãëßwÓM3r ïHªdR$¿_ÿ½õåørýÞT¯¿%_§¦vQ¼“2•Ê2äPJThÍLüŸ¿ÿÿ|7/˜ÿßzåE’Û ¾šô,&ˆAá?ÂÁP2™ÅÈ f¼Ü|‰C2•g˜³ÿøo|7ÿÿÿµw©‹Ú é¡h?4-4„ &?4ðƒˆ3Ù0D+ ôaŸžgw—" ˆÄ`ˆš^haË™ αóÒ5}ÿýÿ[Çþ¾â•ëIºî©è~º®¸MÚ×ìOÂÑ<ý è'EóD¯6 $]¹+ú§ÚÜý§m¯h}ª|^¡xC‹A¡gãð@èðƒN,&~Aá0@óÐD#ÈäP@ˆH?fòIÃ(ÌÌèòæ’{˜µ×®¯õ×j?þ·{JÕ?½ ÿMõÓú‹Të¿Ój×»Aë ³õEó¾‘váIÃ’;à ‘ŽîëÿÓî5]+ ß¡k§ØN-8´ÓÕbNÓL* ËÁ0ƒ<ôx@Âq ôOÿÜÿ¾¿ÿªý-|_×ý/ÿ¾š¦ëÇüzwþÁ*ÒxXzð`¤ò‚y;ºWÁn¨Á—Äó ^?—aI^]¹+~«¢oäQ÷¢ní5ÿOãMãM=PzwzÿuÿÐåÝï‡eÒ‚Ò_Ýáÿ÷ë¥wÿÿÿ¸¥·µ¯þÿºonÿ¯ªnªá$þ“×O_ËÌú ƒ7m™<¤òW—tNÞ`¤­Ë†ÂéR'‰?I~‰Žé;ÿø^¿÷ëÿàâ,/ÿº‚ÿ¹rÿþÿ붺ákÿ¯×Þµÿ½t¾»Òÿ®ÿ¶œ^Ÿ÷Iô¾½ººzt›§Òj´ƒ† „“a‚… ¸Më>‚>%ÿþ‰_¿ÿ×ÿØx_ÿº ýEÿÿÓ¯ïÃÁþ ¿¥¾9 â¿v?ÿþ½/ë]jý'§÷ÿþš«ô«K­+ú¯§z~±é¶¶»_ëÂÿùb–äôÉV/ü7H”kÿôF?ÿþ¿aýÿûþ ÿ¥.«ßÇUrcþ»ÿëuÿëoÿÂÿÿýþ•Ö£ôÞ:×ÿÖßC«Z^¿Týô¿ýÿ¸B?òÁ¹z…ßþê?ÿýþ÷KõÃý¿×ÿÝ;ÿö?Úö¿úÿÿûÿÿÕ}ïÿïâ¿ÿëè.:_ÿÛûïÿ×þÿÿÃõÿýÒ ÿ™ÿþÿü7þÿýúÿÿÿ×ýÿýuáwôºøýcÿÐûþ?¨0_¨áÿÿkþºÿÿwÿýô½¿ê?þ××ü?õÿ‡ÿK÷ÿþ¾]ä‡~ýÿ½Wëÿ_úôˆÇÿÿÿÿýuÿþ‡á{añúýkm{]¿ìÏ7íæ{g›š/¯ÛúÌ×û×ÿûÿ·ì¾þ¿þ½Xâ±èHÿ’·¯×û|²ÿØý}×ëÞ¿ïûÿÿ ¿ÿïþÿ Ú^Úwí§Õ„þöÏÆï?kéþµ¯ÿÿÿûºýÿ×ëëß¿÷[õþ¾¿×ÿ× ¿_ßå‰õ—¯ú“Ó$;ý/ëÑ+øoÿí~Å6ǶØ`•ü4­a¯ý­«kk¶¿kÚë¶—í¯œÿìý›_¿ÿ®¿ôõÿÿÿÿëÿõª ºÿßëÿÿúºÿfIöb~É»ùuëíAÞÅ|~ìlSð{l|0¿ .Âë·þÚáS«Ú×K¤ëI|/¹æý-ê¼Óú÷ý´´½/cÿõùzuÿï»Û÷ÿ÷é¿ÿÿKºÃ}±Úi§ “§iöU´Ó^ÞÓM>Å|S±±ÈìW¬lpÂþà 0׸ka?†¿Ú§„>×{^.Aßð¶±úý6~ÿoÿ­n¿_ÿßó?üÍoýÿý~Û÷ÿÄDDD!aˆaa4ôÓM™ý„ýTˆ;íÿ}Š‘_ÅE{Èà_ÜWö}†½{ÔTuØ%þ¿úOȔ޺º·ëçã—ö~öïìÏá÷ך/ïõÌýÿþž""""" "!¡£Ã  É:h0¶œ2C¦F=§è4éªíþºö?cëûØ_û m}†¶A3M…µ°º¶»jŸö¿a{°›kÿ¶ÿ3¿Ý>ΙÞÚÔDGa4Ðì&M%vJî× Ú¦˜]{ôÕuï"¿â£o㊎>>ýÛKØiC oý¯í…û iz~ÚöŸÒÐaˆƒ-4ì‹K»Lj àŸ¦ŸðÓ¦ûÓímp~×±]1LWr+ö*Fþ)ƒâØk½„¸a~Kªˆˆˆˆˆˆˆˆˆˆ0š™8H¹éÃ'‡L“Ã$è2OÃNõµÓO´Öï»Wá«ÝŠíb¸8Ú‚J"")6"#ˆˆˆˆƒM†D0„C0„]ª &šØO†IíSµMm³Hüq ˆ0„!hCV’m/‹ =.-t† ±Âùn^%Ìî¸ìKë¦v7Å/yó°ž%± ŽÍr&¾>žD¤¾Ó; |׎DOÿÿ É-ÙÈ*Óý3³XìÒ*‘ŽêÉ+:ä‘y‡ÿõŽ­ZþV>ïL- ÎÖâLŽÿ"™Ö"y¼ƒŽŒ":ëúþ?í~¹Ù{Ö•s¦wªÕ4õ´"!—ŽÒ©\¬ƒ!Ýd†C2/d?ÿÿüÿþ ­4Ö¿¿øM4!í„ Â ÏÁ„àÊA.Dã>ŠBAæ¿ÿÿÿôºø/ûk;Rº UÓM4ôÔ Â 'šgãò â `ˆR æóqävGB9ž * œ«4ÉpffjY†H·ÿÿÿÿý|iÉ3ñÍ™+ËhœQ8hœ4MÞ‰»¼'v©öŸøA¡aS‹Bj´ø'Âr'ÌFâã'‚!"\‰ÈÓ9›‚dætiæ/û¿ëÿÿ»k]=:A÷„ôÕ:O œ2ü»h¼¢ï%n^7]w‘½i­Å¦·jÖÐvŸCâÐi¦0ƒ2\³qvbóã$ƒË™A£O0Ê èó7’2´¿ÿúxÝi}ãB“tûMôûÐj´¯úpËà›„Øe×ô^9+%m‡%nJ4‰ÃtNr7¢ozîµ ñé§q„=A„0ƒ‹3¤~?ÂOÑh0á ™ÅÙ¨dã³Ñ¬7˜Ž#B4ÌCÐ325"`Ðdç˜jTF¦gfOÿÿý×î¼qõzi÷úQë­Þé^<'®h*pÁSÁBáÿ“Ê/`¤päãÂÑ8¢áÔŒv±þ¿i÷„þÖ ==©„PƒµL&hXAá0ƒAŸÈ@ÂxA f"ì3ðA‚ Á—#Ѹ¹~`Ê «F†t“#QÖ‚ýz½k÷ÓÚ{õ‹þ´ûZ·O¶ÒOÓuO]ýZNÔ'A7Ð3zm' ¿òó ôNÚ'Â’¼¸v«-ßkÈÝɽ~‰»¤N©é'ǧhzz¨O ŬiÄpÂq|XCø°ƒ5A0ƒ ôa„ Än.Á8/ÿÃaö¸/÷ÿÖÿ ÚõÿuÕ^½U¯_í_õ¤ôÛ«¤ð¯Zm ì*´úH83iøN‚z ôIáKÇ/5¢ò(\»ÉExi»ÝIƤÝÈ£ÝQ8rí?µûOTÓŽýSN׃ƒÿÐØ6öÿð_ÿÿúßÿÿVëúÿ¦úû_kú­ë®«IûÕ½ú¯m/Hzn:MZM;P´›¦á`©»ôƒ7„pÁA$Üžy<ËÇ%o’¶‰=ù(¢pãD‡¢qªXÑ!Ú&î‰Gý0à :ý}‡ëóéƒ÷ ½ÒÿÇÿH|@ºûÿ÷ÿ¾ÿ¥÷êéw¿×ëý{׎ßÿ^ýn»WûWµOTôÚ]}pƒü'§‚„„Ü Ëì7Aè/ÿ ·„Jþa¿ýuaþ´Xÿÿÿ×úð¯ÿè}pÖqÿõZ÷ý/Ú¯÷kº·^Þ¯Jú_Z_¥êߨúB—¥½?ûtýi>½ÓÒW];õÐë÷Ñ9°àßý|°pßýïA¿TJÿëÿÿÿÿ…ë÷_ÿãÿÿÿþ×úø0°dqxà°ãëÛ¯ÿï ÿõíÿõ÷½ku¸½}SkKÿ¬6¯A~ÿÞ£ý÷§ÿùzy• ¯´N÷ÿiÿÿÿÿÿ¯0î£ÝWãCØÐ,<øÿúï _þ—ÿÿÿÿÿü-z^ßþýÝõ÷w÷¨ðßÿÇÿõÿÁòõú^¾¬ÉéúÿÿÞ¿þ××åŽÿý‡þ‡azÿÿ}T/þÿÿÇÿÕÇÙP_Ú¾ÿú×÷ÙûþÝÿÿþ¿ÿûýwÿëÝ/ëùµ.¯úúËÓ×Ètú×ïëëê#ˆaè”ý}w–?Š?úÿÿÿÿ¿õ¤# þ†Áð¾Þ¶bÍÛúúùžsÍ_ö¯¿úÿuÿÿÿú__ ¿ÿÿÿf'ßf¯Óÿ/BõƒðX7&íÿ! /ÿúº@¾¿_ÿÿÿÿÿ ^»ÇöÓ[VÒµõÛ[T×õ¦Kþ»U¯ùŸÝªÙŸ¿ÿó~ÿ¿ÿÿÿþ8¯c÷ÛÿK½Ë׿ºß/¿ÿ_ùzÿ­Ñ+þô¿±Ó±QÅ1[ƶ—°Òû¯{[Ý¿öÓþ»O³÷úÿÁÿ™ÿù¢ý¿ÿÿÿ¿ÿðÿõ·W_ÿÿñ½þûÿ×úÿû2¼Ú…ÿËìŒ{ïîÓµìÇìW±Áüwì0—ðÂõÛK°¿¶ýd8Úæs§þ¿íŸ›ïìÑmf‹ëÞþÝ_ÿ_ÿÿ½õÿÿ¯ÿÿï×ÿ¯ÿnB-\-Ã0˜Ma’ŽÂi§Ú­¦ý¸=â¿bŸØö+ê:ý‡~ØKöXk~ßÿ}¯í¦ÖÚ{_Ùû3óßêséßý³?Ý}*¯ìýÿúWÿÿýý«‡ˆˆˆˆ‰ÕˆhA„B,'i¯Ù§jš­ÚúÚÚýßÞàúb¾)в:øÿØ`­…þ×í}þÕ°žšö—aSîõÿ_¿o÷]׿×ûó?ÿÕ_þõýþ"""""""ˆ†Z™Â Âh5û%ýwöº°ÓQ~ÿìS#~ÅnÅCÿb¢¶ %±ìv•7ì0¿kÚNöízö×ý&ÓÿÛK1~ÙûÌïÿ³<çÄDqˆ†]¦š¬2N¿ÚdcýÚú‡U[µ±»^ÇïüW±È¶:ãƒb¿â¿†°Â_ý¯Ø]°¶ýµM}b""""""" a µA„ÕÝöjš¶¶Föò(ÿÃ^ï]=µþ×ñLWû±×ûÅGÃ^8a/xˆˆˆˆˆˆˆƒ ÂÁ‚hDBÓM4íN†4ÈÞí>î×í?þÿûXi¾ ö˜¯j"؈ˆˆˆˆˆˆˆ‰¢DHŒ0BÓµA—u¯i­ É:ÚðÐk±XˆˆˆˆŽ""" ˆ†„C]§¡†±zGþ[õ;ø’®QzýÒøÂ-"Üì]…¯Õ•8Õ&n;5KÆã¼ŽÊs·gz~þÿ+ _ÓR®ÎÄG}š2Mo_¿MkÊU[SW®˜TÎç¦K( g…#—2‚:ÐÉs!³}“™¾±Þ ïøKÑ$ˆËó­êo&?¦ƒˆh3áÏ‚@ üa„)8Ìów߯ÿé|ã _ö¿MpÝþž ÓA¦ýÿÿÿ¯õø0Hž9vä¯.Ú%y+ò8h¸Z#Å*iÇÿÿÿÿÿþýú§Iª´ž›¦øZN~ áKÇ.èáaieÌy¥’öSæftiºe“ÞAë÷ÿ÷õÿ«¡®›§þº}&ê'a< ƒˆa~?a‚¸Ü0ƒD(òñ<`®3Ùž~„vG A„BAà¾#AÏædTA„ÈäPh2ŒÑš®ÿÿþ½ÿ÷OþÿÐþ7§§øC^4ÓûJÓð§¬C éª =Bašqa1ø Â!b7g†P<0åÈœŒÑòvj«¼Á”Þý_ûÿôž•!ê]äí¢ñþ«Ò' ¿¤Nè“¿ßOSÖiÞ©Å­øTO´âÐiš@†3áÔ"`<&ØÿÿÿÞ ‚ôÕtÿÉÚ—ž ' ¾º† ëÂoðËâW—v 'm·¤‹¼»m<òáÔhœ9Þ¸¥OûOÕt¼iÿ`ÿÿÿ×ú ZÆoôm']&éߺöý'´×…i6ÕBzô·IÃ2ø'Ià ¸M†XÀ\$^9yÃ0Du%Nª¢q‘¼]©´MÿØÿÿÚÿ…ÂÿÓÿû½zŽþôÿ¿×éoCi>• OÕZMô¯_õ]>Âha=?ËÍá6dÁBz ÿýÿûÚ_òQÑûõ¿þ¾¿÷]«ëõ¯ÿÿú§¯®•¼~½'n’tºú«Kþ ÿ_ÿ±_èhÃÿÿ×øõ[×ÿôÿÿ ^*êþºßýýkïúÿ÷§ÿ¯oøoÿÿô¿Òôº`ÿÿ¯ÿÿ§ïÿ×øü®ÿÁ‚ÿÿ÷ÿ¥n¿ßÿÿ×÷_ëùc…ÿývZÿú×¾Úÿÿs>¿ß ìÿè}/þül?þ;ªÿÿÿ·×ÿ¥¯éÚ]yŸ^ûßÿÿÿÿýÝ~¿ôFÿaÿÿÿÿÒ°ÿªëÿü{´“þÒ¾ÿäAŸí[¿Áÿÿÿùz}ëÿ×ã¿–c ¾Hv×ÿÿÿý¿ÿzÿþý{k *Û[ XKöCëm/[[ ™¶ÿÿ¿þ¿ÿøëÿÐ_X7ÿòÀ¿ÿü™wÿ×ÿ×ÿàØ¦*ø¨ãþ .ÆÚQÿúKþÿÞ¿õþ×ÿõÝ6ÿßÿÿÜ7ÿË­«ÿÿìÍÂÛiëj¡WÞÅ|oÿ·¿ý«þg;ÖÚýÖõÿÿïýû×úûÿûþýÿý Â 'h5-–:v´_Ý­‘G°™–`Ûÿ­v×ýÌæ×ßÿ×ïÛ?~¹·õÿš/¿ÿ÷ÿÛŠþ¿ÿˆˆˆãˆˆÐq ! ƒA„ÓUi{ka{VÂü0¶¶ºé{k×úþ­¯›jÚ÷öŸëþû™ç?ÿÍkÿßüDDDXýŠb˜×b˜«TiØþUþÃ[ì-¥·}¯ûj»kýý§jaýûa_[_ÏßæwõkÚ}÷Új/}§Ø§vFþ*cb½Šb¸?bŸŠöÿ†”?ÿíi½Ö½?Økø5 *i¦N-2O “ý¦šý¯kýÚöEûnÖßµí|±Åì{í÷ñ_Š`‚hqDB-†´ÓL&ša4×´×µîþköþÚø=ƒö®ÐhDR`ˆD0B-8‹i¦«Ã ™'´ï×´ˆ†"""""""8ˆ2Š 8hD(„”Dq*Ih°’¨×‚ÿ+šD³;×Ꙍrh¹ëÎ}¦d€¤ÿ§ˆ²©äOƒ³#ØŒ­/ÿú÷zj™¦B³º?ÿýë/µúÚ„ej;Ò; !RŠ…þ¿_è6;þ¿ÁÚenëïÿx­ð¿$”<Ýç¾\“ÌÆH"Afa’ 5õÕ÷ô¿Y!ßú­­èa4 «ˆh3ŒÒ0ˆN"„—"A Ì2A¦Tÿÿÿá¿Ç /ªi§uØOH'§iÄ0ƒ@ÍQøþèŸóqžo(ÌG2ã(#D*#¯ÿÿ¶ÿ„=X2w—tN2Q‘½výè;¾ÓõTõ»] a2?L x@Â"ù ÃBDÉNa&@̘¿ÿÛKôzt´›„› '„÷¢ò~O2PÑ8¼”Q8è›»ô¿ýS]šiê˜A„¦}ž‚ ôi@ò9H51”#Qfà›FãähŒÂ',¹” ó èÎÿû_¤ôßã_VÓë·ÓÂta—ápœ2Ä;è6þû^JÜ» Ñ7¢nÕzǦŸ~Ÿ¦ˆh44Ó4ÕS B§ƒ Ä0ƒ3<ÃÈã(ü\‚!+¹¡f ˆ—#Di›E wúôßÿ¾–õtÿÓµþ´úÇýté=?ÐxA´Nè&ÑxáTÙ—m_P‰Ãµ“w&ïM]$õãN-;  ôÓB-8‡öqkqiªjQ_ýþëê—¯÷îŸñ\{ªÕׯqþ…zzv›«V©ß^ƒ} ƒ ƒÉ[Eå¢v⚤NÜ”]¢nänÑ8h›äc†‰»NGOý;kµïú×õ¡°ÿìÿ×þÿ]î•Öþëúý}éÖ‡¯¿é­üZá7MÓßO0¡Bá0Ý==„ËÇ äí˼•¶ Ñ;rQ’wÿ´~¾öÿÖ?ýòqÁn¥ã÷ÿð»ÚZø¯XýÞ>¸ß«¤î´ÝtïUÓÂÚzm[K®&ëkéáa—ªÞ¸`«ÿûÿ ÿÿþµÁ~ÿÿ¼áÚAkl/®·Zï_ô½t?º¾ãõ×¾ôÚõþ“Ó½7ï]úênÿ¤G¥ÿð¿3Ô+ûkר_aÇø-pÁw¼ö/ö“ßÿ…ÿýo×Kÿ¯ÿïúþ×ÿÿ,#ÿáU«,kú×è•÷úDqµÿzýè"(ÿaÒ^Ø0¿0ôma„»ÿzèøau4ÿÿÿÿZÿÿ_ûí\=h/ªÿå/A|qÁ}oÿß *øaÿ¢QíµýõöOÿô«õ ü~‡¼qþñÿÿÿôÿÿÿÿþÿÿú÷Òß_ízâ¡~^¿A~D¢wz 4J?ÿû…ÿÜ+ÿÿ¯ÿÿµÿû}ÿÿ±û¯½ý}5\oï×ô—àß~‚ü6‚}ø¤x6‚ÿýÒÿÑ+ÿê‰\0ÿÿÿÿÿßÿ¶K?¿ÿO³ÿ}Õ™­u_þ—Õ½8_ïýÿ‡þ+¯Pè/ÿï×ø_òÂxX—¡zÿ‘¸_ÿÿýõþí[V¦¿õ…wOÖ×O÷ÿ××ÿñýó5_M¤¿®Å=}±ßú_þéa½õ‚ÿ×ÿêÿðlqQLW¶G]±Ó¶I« °¿á\üë«]r*ºùÏlüÚè=÷wÿÿë_ÿ¯ÿýÿÿúý/×õÿ»AÚø¿øàب¨ïãmÚ«Š†þCƒa7TÖ×VÖ×ÎUªþ´gzëjß_ÿÿë_ÿÿÿ­ÿÿlWÅ f¸a0ƒN×Ó#{†ÓM0~ðu¿Ôì8¨Ø0“ +4£ûV½U«ßkjÞë¶—ööÏÛÚœû¦ÏÍ™ÿ{gïôºþþ¿ˆˆˆˆ†„A„"pž 'kd£û#TïúmìlVÅ?ÇûaX«JÂV¯ký¯ö¿…Oµµm~ÒÿÏ<$Úÿik^yÄDDDX!a†X²&„áSO¢}dí27°š Œ{LŠ?ÃO´îìUÅ1±ìWì±ûŠc†ì+ /üv¿v­…~øˆŠB"¢#6"U¡ #T" Á»2qk¦J4Ó#}0žšý¾¶ÜtÓñQ^ÈßLWÁÅGö§ÿÄDDDDDDT@—ƒ.ÓMS% }ªÃ$ðÂ™Ó ¦¹‡MÂkîø¾JסasV"!‚ &šzd„[Ìá2O¬?Žüpa$”DDDDDDDDGa¦(%¨áPh)¸Òˆƒ-ºZH²Ž,*â5ùnU¢ýI”vDwŸò+ëguGzÿ®å*]l®b"ÿküˆ×S²¨•E¼f¼•/þ+è•»#^šdjLäLâ¿F¼­/ÿ¿_ÿ~rÕWÕ3"ჴ´Sò¹ls4f¼Îÿÿÿýßó¬E¬õvwE¦™Þ´!„ø`ƒ³™.F˜DA’!Ì©-ÿÿñÿ¿­?=gyõN-;Ó‹Sí<ó7AžÇã¸e/B<¹Œy¡"5_ÿÿÿøÿË—~ú' w#q,}éßýE§ª¬CCâÓ! ¦ãö`ƒ a.Dã&Ä|f™r8E@ÙÑš¬Äuÿò¸'õÿ÷øúÔ ð˜O'}ŽNßµ…‘½÷^¾ž¿ªh=bÐhi¡ &`ƒ3ì ðƒ›‹‘H@ˆO$:W0Èl­2s3eÌÁ3âÅ83f\Ê ßÿõþÿººié¿éü3¥ ¸Aïù<¢ð& G\8¥ôMÜ· ïiªqiØN., ø†ƒ°ƒ<óD$azéá>ÿO4"y¡¼Ñé’HÈ„g§ÿ§«¦ú}ÿê´›uú½Ú…¤ð¿ ÚA¨AÁ‚ ¾%”N脉ۓÂWDá¢áˇ#}Ýié§¥Ú{éÚ¯§ÝÓð˜B„Bð`ˆ^gÅø¹i˜dŒüg˜Â—2 Ž–hDèÁ2AÙ!“J-/ëÿëuéúÿWÓ¤ÚOét)=uÓp¸OUÓ¤ƒÂnNè¼òxÑy Ÿ—tNÞ—%MߥޟÿIþ˜Tü'„EÅ„jºÝÅ‚a &…„A‚!p38»u‰ðƒ4Ì2ADæA‘ }AÿÿøëI¿úÿÿ¥ú~¯ëKÜo¦é¿«®ž¾ºv©ºõ ¾N‚·_É_þMŸ´2áþ‰Ã—a"púD½ÝñÚk÷aS==P}ª L ÊŠh0š Åð_÷ãßÿþî»ÿýÿûµïÖÿ×HGúÕï|qéúÚ¾ý{éÿë|0I•útš„ø0Pƒa—åæO ^O.Ü/ö”QväމÒ‚8hœ6¥ÃŽúé§ôš§û¥ÿõïÿÿUë÷î6¿A‘õo¿ÿð´þúÿ÷Õþ£¥Ö—¶¿¥ÿÞ×Xþ“}´ý$ûOPºoz~°Â§H::<&žœ0I<'ýŽJÚ/(¼0B‰Å\:ì0¨ÿÿÿîÿyc¿û¯ÿøŽÿã|øò Mÿÿ‡…ãÿ~+¿_ìuþ±ÿñºÞ´›®þªêþ®©Òn±ók]tðŸaB“iƒâOÿì±ÿ_ÿ_Ú¯ÿû_ÿÐ/ý×ã÷¼/ýwÿ÷ä.öÿýÂÿzýÿÖ«ÿé>ýuz]JÝxïøÓÐþ«ÿúëùqÿºÿدä àˆëþƒÿÚ¢7ëúÿ­{…ÿãÚä‡ëÛáÿ‚ýx/ûý_ÿ«úÿÿýïþúßûßÑn ½{×þÿãcþù`wùaÿòÄ… ]ýhÿÿÃýÿõÔy±}ý¿`ÿ[P^ÿÿÐ÷ëÿÿÿCäGÔ9u×þý¯þ‡_¯ûÿ¦ý÷ÿKÿÿÿõIuòÀÚ ßÙzü7Á|˜÷ÿýõöý¿þ‘úü/×ÿ0ïÿô¿ÿãØ}ñû¿aŰo›yõþÒÜÏêÿþÒªþa¿úû¿_ö•ú_ÿzƒz]Ó¯Ë4µïúðü7ý0 _ÿ%¿û_ÿ÷ÿþ½‡ô¾Áïì pžCû_»ûLÛµ×ÛÿÿÐæ‰õýµÿÑz¯ÿÿýúwïúþýäÇ"ù1Á¿å§—ÿ _ÿ'­ë_ÿÿ_¯ÃöÿØtØqýEpÂ]­…¿öÒwýŠë¶žÿgãŸÿ퟽Ígïÿÿ}W¦ÿ¿þÃïýç÷ýê¿ý/ýÞ¾¿ÿþ]njàý«/^ ÿ†äÜöƒÓýŠc‘SÿŽ¿àߨa{ °Õ­¥ýk!f×öÓ×_÷3êÒ ×þ~÷ÿúwÿûOÂmÿ¢à_׿ÿ¿¿á½ê¼7¯ƒt" øÑd£üÃ…†¸Nû~×_ÜöÅqñ±Ç߰°lØVÒl/ý§Þ^·ïôÙûûïë{ì.çU¯ÙŸCÿ×ÿÿþëî¿õýûßï¿è8ˆˆˆ‹’{'i÷Ú 'ßtIÞôÖûM5°}±WþÅG~ÅqM­¶׿¶ÖA?îÇÿ îA Vé×í§"½}~“IÌÿ¯ÿu¿û3üÑoÇûï·õÆ„DDDDDDP"yЦN0½é„›"úi§ÿkâ ØØ­äqâ¿ÿkû†¿ÚÈ'¾ÚöîÖÓÚ¾ê×ÿ´í´ò7tæU=~抿â""" Á†„C \á„ÐÓA„L”^½®i¶F=¯úkúwÿö¸6)ýŠmƒb®?¨á„¿î¶[VKöÒít×ûOÓíN?:ݦrþÁ—â"“ˆˆˆˆˆˆƒf°˜M0š &éÃO»¸­öÛ[»I²(ïm¦ ÿa1ÿÁûÅ1_±Á±[È/; %ðÖÒþÕ†ÕûVQÄDDDDDDDDDDLÑN¡¦šª $\ì*ö°É?~ƒUMmîÓµûM¾×|W±AähÅHãj˜Û\DDDDRlDC(2•„""3@A‚hE„u!i¦5ô­ªû 5_+‚1aE~"8ˆˆˆˆˆˆˆˆa†0± 4A§¨†Ÿn±hDDF!…Á‚ëbº†¾S)Ñ DGü¶Ë·ÈÕ(íUßð§a”‘Ù`Bì¨Cÿ‡Ä4ÊÄv•üP+ÿ³!8„ LåûÎÔ„È%šËÃL®W’qØÈåú¦ö`.7ðò)ßäÚqÌŠÇ\¬÷ÿ¯—ϳ"vu²)y‘BïML‹bg‘8ÌÈ«•ÊÆt²42'¾íÿÿ úÚþúÿz…„ ðC3\rÖ'3Ì㑈gÆ{(ÌÈÿ'gf«ûýÿÿÿÌ„ëõ^†©ñÚ§~´íB 4üÜgáAŠg D_1yÐyüЂdAžd7’Åýÿ¯þ¿ÿÁAQxÑ8Éšü”7¤MßÅa;Ó]<&‹OÓÓA f# `ˆ^"ƒ"ô¹Šg˜"3q™'ÿûÿïÿýVž¡úAþ0Rñº¢wKÿîÕtô“ø´ôÓ‹N, Ó ?Æà™8_7™ùñB!4Ï2¦Hå%“âÃ,òE®o:5*34GYGëÿÿÖÒ½]ôÿ «ê›…¯è¼h¼ÉÝ·è»z¢îü”&;Ñ7h˜ý;N4þ,/­éÆšh4É A„D'( „D!pÁg¬2È»>2 ‰4F™ô`Ð3C5fŒ¨‰†JW”/ýÓý=õº­ÿ‹Þ—Q_ÓÓtôÛôýSa›ð˜'A_„Ú<•´NÜž9w„‰Ãù(_¬„éñiªh|iñé„ÂaƒNÓA„ ü gâæf¸Ã>.àˆ¤‘ÆP)@óù2t`ˆ3—OÖ?MXý«Ö¯}^“t­oI=%ý7O º÷ê›a=BmMƒÚA¹< ›EãËÈ`¿þýûßôF?ÿ¯õÿð¿ÿ¡|Óî _ÿ]ûõõÒþ¿ëýú¿]Zu×ýb=}oéi>ãuZ«ý5÷TÝS°ž­§§Ý&ßÿá¿õõýw_öÿÿý¾ëÿýØ}ÿ…ÿýy³üÿöh'ÿø/õþ ¿õÿõÓ­$ý_ïÿ¨éV•ÿ]/øþ–?ïÿü?÷^ÿ »­þLŸùe “_ý^¡‡×øDoÿÿöëÿ˜ßáxý|ÿãõÿë‡ðÊA}kÿëì·¯u~µ­õúû¥¿ñëÿú¿íÿ_þ—O,Çû–cáÿõ‚ÿÿÿÿï¿ÿ_¯õïÿ ^¿ßÞ‡°aj/ýcÿKÿÿë_Á}p_ÿ~¶½û¿ÿ[÷ÿûv«ý}ÿûþ ý¯¥ÿÿûßËIÕ×ÿDïÿú%~»ý¥×ÿý0Âÿ¿ß¾ÿý{ãï þûïN­ç.¾¯ÿÖ+_ÿýÿ®›ÿëïoÿëÿï¿ýë¯ýòõÿ ¿ÿ“Ô+c“PÿÿöÑ+}ô¿¢Qïû÷ëúÂÿ…ÿö°ÖÖ×÷´¬/ÚíÖimë¶t¿3½}³5ÿÝÿÒÿÿÿÿñÇÿ¥õ{ü/ÿéÓ_ÿòêƒp¾Z¿ü½:è/“ë^¿ÿ¢QÿD£ÿئ68¯öÂÚü~–¿júwûy»µÛÓÿ»?ßF¯÷íºúívÿýú¿ÿÿÕÿôÿþöKÿ]÷þ¶éýÿÿ–Oèþý§wþ˜¦?mØÿ¸Ö)†—à ½…ößôÚ{an¾Ò¿_[ þsÿÜÓëµþ¾ßÿÿÿ®^¾ÿÿ§ëÿÿý/ïÿÿëô¿ô¿þA—pɼ0ŸöŠ?äAôÓû¾ñøb½ã‡þÅ\4¡…ûXa[ ¶–¾Ú§¶ëÚ»×›«ívÏÖ«úÿ^æž½™îgõ¯÷õÿuýÿ_Mô¿ï÷ý~ÿÿ\DDDDpa‹†[ ŸvF:pÐkª}½¶¯ÿ`ÃÅ{±ÿav[ö_ö½®¯î¿ÿkk!(Ó´ÝuþÏÙGë¶gÿîië¥ùûí_ÿ_ïÿúÿýˆˆˆˆ‹"&ˆ0«dímûXatÓíSá¯ßÞ=Šƒö+ý¶VÞñßÿ -…ƒm+JÚý¶ºukÚí®¶­÷ØVýÿÿ¿s;¯_ý~רˆˆˆˆˆ†„DA‚hA„-±Â œZa27û#û#ínÓ_ïÅ1Áÿ÷áŠc¶66)íŠá…‹Ø`»a-Øa[ $à kÛ /þÒíµÿµöþ¢""#B""""""!„"NÓL-é¦J; ‘ú ÿ×Ó"¶M;Ô±¾ÅqûTlVìîà °ÂWñÿ¶ì%Á,DDDDDD0‚hD0Bâ"í ¤\á Âi’}mÓ#~Õ0½§f2(ö»kÿb¶*÷ÿØ®–""""#Mˆˆˆ‹A‚`„D0„B!„ Ä &ƒ ¦˜TítÖÓÖÈßþÈ£ý®Â×F!„â!„""!‚š 5ÒÇ­JfÔÊâÀÅIx´®™\ &Q™š®W+'+ˆýl&w8¬”®Ö¾—ê¿Ä`¿\› ŽÔã$e:ýþ0Oê™]A¼î#!/ÿô$Úwý¦˜)¿ )̨ˆÓ5ÿ_ÿµé§ÐyéÈŸA™ÁjËŒÙÓ7@ÍfyÚÿÿ•ÓŸÂhìÎ;¸OPšÚ„ââÓ ØTÓ/‚af¨ e¤|fy§G£ò Ë.d‚:Վʵÿ¿Âòï¥&í¾Å ãOâ4ûðƒ»ð¨0œXAŸ~3ñÈ ÉÂb.ÁfaȰGQÜ•f³›OÿíéõA<oYxäï'd®‹Ê †×%Wa×®µiÚÜ_ºªq…ØUO1"¦^KVµÿö¯AS¯Ò]<&›Iº§ L'„Ãk/Œ$N»r8¢vÑd£r7¢n¸Ó¸hv ƒ™Æc ²`™Æ#ã*ȆY<ä!‘¦vDj__ñýo{þ¾žºIºêº÷é&þ¡:MBºn›¦øN‚h0P‘|äìŽòW…ña4ô &Âh4Aá Î3H Ìâì¼Oš£H `ˆ³=˜k—"‚4ÍÆd¦„B#fH2`Èš'jD¿ë¥õoÓÿû×ýn­û¯ïJÝ i=tÝWNÔ/¦MÖÔßè˜õ[N)SOTÝS‹µôÓ°¼XAØPƒ ša0ƒ3ñøä0˜ŽF@É|Î?ŸüŸBL’BT* J`ø,~«ÿÿÿÿÿuOõ÷¿tõõ}úN–õÖ(-ÐA´NÚ']¹váK¶‰Æ]½&îé:ûÖÐûN5tâÓOõO½BiªiªxA„аƒO‚ñÇÔúõ"¿ÿÿý¿þÿé_¯z÷®·ßö« é=¤š é?: ýŽ®¨´^8\•åÞ'lfÇ%^9qøÑ1ßÅ&ýÛ­4í?­ëëýñ×ü~Þ·õ_ï÷¯U×å`}i_ãM¤ûCÖ8ÓzONþ𮟅tðºt›ªmZ§§H?Á$  ]ûåãðÁM™väñ¢vÚèÿÿÿÿÿÿ×ÿØ=ÿ÷ÿÿúÑoÿ×ú}ÖõKþé\­.«Æ­n‡êŸé&õëµi[¦«„á‚è.Mܰ…ÖÖ]_ÿÿÿÕëÿØ¿ÿýÿþG]ÿê Õÿ¥ýÿZëýô¯×¿õNý{z‹õ¤ê;«þºz~¿ë–¯ÿ-EÿÿÃ{ëÿü5ÿÿ¿ÑC‰%Öÿ°ã¯Øl:{úýöÿÿÿÛú»_]z¦þ•ÿú¿ÿ÷{¯ëÿ×ÿ_kÿÌ6ÿÿÿb¿ÿÿxÌ\“ëìþ àÿÖ7ã«®£¯ã¨áúì7ÿÿÿ]z¶þ¯ÿ¿Æþþÿwÿÿ]‡ÿý~«ÿþ¼B8ä4× ÿíÿ¢7á¶û®¿î¸_ÿؼÔ_ñÚjh%×ð÷ÿëÛ™ögÕ™ÿþ¯ÿ÷ìoÿmýÿ÷Ú_ÿÿ„$+ü˜ Éiô Ãa¿õ{¯moÑ(ÿþÃÿ ÿý/Ð_÷aÿþ×í6ÓÛ__½\Îÿó?û_ÿÿKë¤Y?úúûø6×éx6 ÿòꬺ¯]K¨/þº ÿ°ÿ¯÷™ú%ÿØ¿ãÝŠ†{_m.ÿí§íkk¹œC¿Ò¾ÒþÿK¾ÿ(\oÿ¿ü/×ý¿ãu¤ÿ.¬±§úƒË«òƼh/_Ã¯ß½ŠØ¯_cv*ÿá…ý†•¯ -¥ì5µ¿ùŸ·ÿkò K¤ÿïÞÿÛÿÿ_QÝÿ¿¾ýýõÐ[ר7¯öƒ$öœ0š¦½ý­¦ýˆ_Å1ìT4µŠŠŠûaý…þÒùåËýÌýO/4_gíý¿úÿÿöþ÷_ÿãkãü?ÿ ! !j˜T×ím{†½¦=ÃUÿ~ÅuÇèâl­‰?´ÝSÛ ¶Ö×'¨Œ¶Òõlüퟷó;_üÑy¢ÿKÿÚë®ûûøˆˆˆƒ4ÉB¦š­ª¯¤IÞí]2ƒì§ü4¬-­¥jÚØ^Õ5¿oµí}¦ÖÓÍí§¶™"¯|Œ½vÌõîÌÿÕþ»®¸ˆ¨ˆˆƒ" 44#FÕ?,pšyN@ðÆÅr,v8â˜ØØ¦>6)Šãb¶>žX¯ý°½­¯ÚVºöëZí}µ#*Õ×¨ŠŽ*â""4"1 xh]þwiÚoi¦·zk}ŠoÿŠØ¦?c†cý†Ú¶ÖÖÖô¿ùC<3$d„Cvƒ0ƒ, &NÓA„Ðk “¦°¿i‘¿úÚÚkéÚb½¶ â˜â˜¨8$ûkÙ#‚à~"""""""""'\z ahDZ &ƒ0šh0ƒ ‘¿auµìŠ?Ú…M^¾=ˆä("Qˆƒ"!Ü0ƒS8M>½­`˯Db-,ql¢H$¼Db ‚@’^$VTü¢.¡BK²1È ÔÔ^"ÈøqGV"Lr›y&8“mŽÄ§!ÛIHHdkh–Sƒ.±rÔNRCƒ.¥‘LȼHŽÔä ‘¶„‹zWyÚH)ßH‚öF82:ÿë±#m×øY\éÉÊmUÿ¥¦„7Žî;¼Ã¿þÂ!’MÔϲ¾;3<Üfð¥Dì….C0p@„†Hf7ýxþío—‘!Ú$;D‡hkªÚz§Ú~vš„Ô*„øÎ98R^'ÏŠgYq›"qŸÈÙ˜ŒÍ6"qÈdƒ[tŸÿñªAÁšaá‚ ^;º’º'©p×DÝú$?ôã iê……´Â~…„Ðvi4@âÈÿÿÿé¯KKí„“¿ÕÂnA­áÖnþ]¸H“ÚDáüÿV¼Zú§¡$Þ°fdi˜3ÆC2šÑVb_ÿÞ?½4=UëÖ¯T5jÔi7ßOPƒa„“ü&ÑyuEãù+#Š'oTNDÝ´È5C$Û¡„âLô3ì&b80!™ÆpD B0€ÏŒþg™á‘.Fhú0Dƒ7™™<Äu¿¨_µÿ_«ÿÇßUªúoëWº§øP›„ÝÕ: Ã!–8A 7otœ}­þvƒ´ÓX´Ð°†a< Ágù¡dažÏ4"A"#3B!è_I_º¯êÕß­î–•®¿úý[ý¬wZzoE"C$ Ç:æaK¼•‘Ã’†‰둽p¯ÿ_§¾ÖÐqa§¡¦©¨A Ðg¥ Ÿgo Ç@¿w¯ÇL=aËG¿Âÿ«þûºÿÿõÚû!š8ƒ *n¡=„ ´ËÇá– ¼a‚Dí÷†ޤ£ÉE°‘vÑw‘Óáb‘7za4û‡kuŠ?ð½n‹W¯ÿk™„¯ÿý/÷ÿÁo_ø[r[]5ÕÓ×]>ÿÓµMßÐÂ~ÓÓXxZ ¿åæ ù³.è¼ú.òVÿ _Z%ú¿ü0Ô0ÿùcÔ.—ÿë÷UÿயDz C[u8þõ­×ûÕþ>—ë×ÕÖ£C]?é=4Þ­$Ý?ÓPŸÝBùdÚ ï÷þOXo ÿ½]"8ÿÿÿ¿ÿø[«¯C#žýþ¿ýÿ_wN¿ÿ¿ß¿þ…ükÇñïú_ôÿWÇí`Ü¿a¿ÿô ÿÿßíÿD¢þ¾ˆfXâ ºÊñÿÿþ ÿÿÿíß«ÿOKûÿ×Ý}/ö:ÿ“‡ÿc޽ÿ¿ÿëÿôkሉ1Ê\nÿ_ýwüŽ×ÿþ¡°ÿÿümS¿¿ñÿmŸµÝkßÿoúÚ¯¿ëõö;ÿø_¼º¨ƒHâDoÿÿû_ü/òǯÿûõþ¾ ÁÆÁü=òãÖ»Ÿ¿^ëélÏúoûë_ý×ý¾µÿ׊Az8âAl5— @¿þ¿ØièŽ>õ×ÿÚ°Ãÿÿ »‡ìÛîÕµmvÕÞöÓÉìÝæ*ý_^û÷×ÿÿݯbA¡Ã#ýüž¾¸¯þ åÔûÿýŠ ÿÿú%0è0ü0úûQÁ±ÅGÇUOivº½þÚûav׿_u6ÝÒ×ýkÍ"®E/ý_ïK_Òþ8ÿÿ ƒÿþ‚ðܲ‡á¿ë²(ûi§v¿Ø­ŠýâšxêÂî×í~Õµÿ^Bѧ²a r—ïÿÿü±Âÿë÷kÿÐA·û_ßáx>ð}qˆa4a% /ö¶ººöº}b˜õcéŠö7`á…Ñ ÑÎ9ù‰æºÿ¿4_éÿÿ_ÿ¢Ò_ÿÿ×ÛßÛþ"""" ˆˆaj© Õa­ÙðÈÇÓ^þíý±R(g„3 dƒ!vûI°Ÿ×"Yv•¯k¹ÿëÿïÿ¯þïÿñD0B!‚i’„Õ&ÿh2OkpÈÞÒm;8ò02A\º¶?ì-¥÷²Ý®Âð×ÿý”7É{ûK^×ÖÎ}™äùÅÝqz ª'8a:$8³4]rSÿÇÿŠcmcw¿ßƒ†•¯ÚÚí­ºÒuªkjƒí}(ôâ2‡,xAX˜L†HH¶È£ß鯮úàýª¦ÿ¶8¯b£ã¨ûVVÒ°¶”0—T’öXâ ’º #ðd}ÃL&šjg0šÝ¤_êaÓ#~Èßµ¿ÿI´Õm>ûìS|ï •¬!‡ÒØJЃÄDDh;ˆƒC@ ‹ˆˆŒ¹Ã4ôL”,2OÙöšjE5 £I±¡(qÅ+ ‚dpØ`2AWüDDRqa ÂÂ™ÐÆ©¦$3aÐ@ƒA ¨Ð2A´Ž>Õ/l(L)C˜qQa|)Ô2APpÂö¼Dc´qÂX‰CÁ‰|±TÇâA¸ç1i#Ï"è2ëhZèãœp‚hL(iB 2èºb C0»cФ v‚A‘ù +iTaÇ8âPì!ãi8ä2AÊkë!8öËŒ&GàÚ i2êÒ¤c„‰C ¡„9 qÈd¸âF׈_‡th®f” &%ŽaÞC„'pŠ€È ²3cES¤B8»#†i‰ Í`VGY ÁýÅ‘ÙtG è¨dt”:'‹ ‚>qò>‘ZÀ¥»©!ÆÄPK‚h!(t§2è>/„PàÈý3'‰¢`¹Ç&8Õ— ‚hB8èKä|:t‚8ƒäY­3µ6ufc"ý²;œ{ðœ¡ÐA Eð1EÐ ‚aávÂE@ð]¬5¦žUÕ4ÎÒD®$‘Ö%\jP@„PE&!‚Ga„ƒ#¤£/‘Ñtí]Œá±¬Oñ¿×È—þ±°xï0è L4'Ùœ 1àAÀðÍ#ßÿàšÓÿÈ®Š{”:qá„èP.!± †!@Š‹R‡Èù‘Ÿÿþ‡ÿkVA¨xV˺NBqÂ\L÷  Œ:vI Äãˆ3°¨¥°™'‘¢Q÷ÿü{œqÂ㈠†é1(w(x$‚‚„D …P^B¤@ðÛÙW_L&v-ؤáÈ‚: êR¹PìŽgCM2ƒ"Òéÿ|l$aÐ@ˆà¡ Ž8 B&’/‚Hh§ˆú)ìYNËà¯]¯;=êš„ éÄ0ƒH˜Ìâì‡ Ìã Äf2ABD¹ÐÉEÿÿ^Ü$V&ÁÈøAã¡"%:AÖ¬ã‚#è2>: ÿ@ŽÀ¬.šiÓ´ôœ^L î,&|9'gôhX fóÙr(<ÖH¬Ê43£Í0³ˆ¨WÈ5xˆdwl ‡Jè§@‚v‚Ä8rpS°’AЃ.¿ÿ×—ŽZ²vÑ;ËÇEã’†‰ÆB‘!ñRPâ´Ó«NÛÐzz¦„0†ƒ „ xA„fqv‹ðAŸŽ`är4Dè la&!ð‚@„WbAã@ˆú CV¨x°L1&9R¯ÿõé7TôÚO§„ð› ¹šaáSp´^9w )+Ë·#~¨œ?¯P›¦†šMU8‡¡qi¦ŸAz8ëV%8Duˆ"Š‚@Œ8 ö]Èè"‡úÿפÚN—uý.©ëIÒn-'„ßI?¢w .Jòo“"vÖ\4\Uw&ïîÿDG‹H °‚)ÆÎ< ˜ E@”8 JB#WX@ªÅÃ&dK‘Ôþó †Éÿ÷ë««ýíþõW_IcußMý;]Z<&Ã\¼¤ôÒn“Ï%y(zµE Д>Ft&0’-"‚$}Hè:iqú ü3‚…ˆA„! ³AšfØÉÅ„ò9žÍQà¿$ ˉ™ÉÌ”_þêûÁk¯û¯®‡úÿmkôŸëݧØN“«u½<*j¯¦á?† (¤!ÐA4wèÅ ‚ÜHéÃVžƒ¿ãM0†hCM<'jªƒ „4g£ñè fy¸"%È fqrïû‚ïkê¿ÿÿ…¯¥ÿô±\}ë§ñþ½¿Ó`¢Pö)’A[.‚Ap‚D}“Hº  @’)Â#ú.ü»rQý4ÕS{CŒ&š§§®L*Ä0œ_—kö¼/hoÇ[ÿà¾ëÿÿþ¸Zÿ×®¿zÿ”9 Áø#ºELz„ è ^"©‚Ý íGÞ“ÓàÁ7’º/2ñ¢q—™+#¶‰Ã`‘váB—tNÚˇHÿî7ÓÖ ëýèýÿZÿ‚ý×ýþS‰‚ÿ‚÷|?ûßö( š E.±d|O°‚g‹G ›Auh8E:„N8D}&´ž¿Ú}´› é7L.›i'… &á7/)4  Ýú/0A—äó/2vûÞºèßõÿÿèŠ?ÿÿÿë …^3áV:‡ÿßû0Ë‘3„’@‚¶, ˆûA$!!‚   #ûI—ž±û«þºý_zôŸ§ëßW¡Ò½5Ië«…u¥¿Òþ]~]_þM_Ð/ßÿÿ¯× ê¿°ÿ¢‡!”ÇQHã„(¤¢è» „  (qHâ(/´@©lPI ‚(pDpÈDDDDDDD hB!„!z‚h0ši„Óí2Q¯ a¦štŽ8çÃøAý‰OB Ð J.að‚l&Z†SÏ ‚`š@‚ñš ‚³ÄDDDDDDDDDDCá‚ `£B4†‚ Ùc”<%‚! ¨ï¶":Ü …1(xI^ð‚ð±‚I$DyÆ„F!Æ‚MÁ6˜”8¤-:ˆi; ÒG@Ž8±¸AjÐA ˆ„¡*4–ËIA ha8”8 YC„ˆd|§„ »FÑSÅ‹P‡GÑNê„XÅ”9Ç(p‚ ˆ”ãâÁá§ /‚jse†A0±Ü5á| M°á‡A#è š+dp\$ðAa">GC„“@‚a"Ÿ±´‚ µØ„¤!]4ÇÁ»Oˆ@˜ÑO„¤H4„Ä{Ë Š ‚RXì‡H,CQgXA‰ÇAÂ+Bh …!(pˆù„!”â¨â#áÁ)Èa U¢C†Gdx4AÅ"œÃ„@¬uÚN,& Pá;HºÁÏNöÂ@‚è!!½Š¤B‚GÈ躭%ÐA Š !‚8öÒ Ð$… ‚ P@¨ ‚B°‚aÈè—о‚vG„4-ÚH°³»°?  ‚ŽÂ‚B”h$‘džÒ@ˆè!a©!ôC4rœE"œ „ã¤"6Èø^) §¢‡Š´â( Œ ’„¬æ‚q(r{(r‡ù1ÄqÄ ±dr#†Ypk#±„Ò!Ø‘G`’iÃKÂi! ؈”8 Id‡,rC‚#ƒgG »Ñ .!Ú CöŽ: Á,W-ÌFã™­´ˆ ƒ„„G!(r1Î8M §Ámµ dÇ‚‚C„B¢Èÿ„8àˆúÓÕ4ʦv<‰Cˆ‰N!; PXA="œ „DB#î,28Õ±âPïÿÞd0@ˆúœÂ &qÄF+Ht‚P‚ë¿ÓóÑ !£$›Êt‚ V@AC„ÆÝ¦GdpÈÿþ>þd7/‡GA.Ä":ïa.^‚*6Š§Ð Abqç`ã™Þ¿ÿ¿ÇÖ˜‚-ð@‡B ´I#àCÅÑÇzPK¦™•"I¢;+ÎD!®e%ÿÿûhJi¬ BjB.Ø*í, ˜‚#ÛZ8ÿÎâõõÓLìDUĪ•Åb|fyþ\‰—3Lêˆ:G?0ΟþˆfŽqÄN:n:B)«/õáð< ™c„ ‚Ä!ë÷áT÷þÔ&½|Z!Ùù2xÄn0…‚!] Á ÆP38ÄtFˆê‚.e\uÖù1ÄRHD±ÁÑt #Ž, …l Tµˆ L$°’‰QïþKÿÑ8wÚwö’ůšh=4Ó?&ƒÓ5‡4×™Çóy†b„ñšeÈÖNf¬£33«Øˆ®ÙæqÁDDw´Ž>PöAô!§ÿÿô8~ƒòxÑw“ºïòQEÀMHÞškv«ÅÚw¦šñi¡i¦~3ðSpPƒ?D æ9õm ‹â!ʱƂ& !¶ÂÂA^ÙvÿýJŸþ´›¦ß×¦Ò  ¢vÑ;hºuö¤päoDáéñôÝéëªqŬ±ÐXÐEÑH ¶] ¦GAû öqÂà‚‡dÌÏÙ;:þK¯ÿÿzÿû{Õ¯u×WUtðžp¾°ÁBxMÓwÔ†\Á"íÉ]õDáÅE"päc¹?ˆ°±Ã:#¢>BCˆ„º#ÒÝ ?°´¬C2²g¬&0äq‚@ÆP3Dm•Ë™ ²{Ë™!‘·ý÷Z¿úê÷÷úë§Z¿ÿ­'uëé'…zðž(O Ã/½+d|.æ Šq ‚há¦\6!H¡Á¾/ œZ 4ÐjšÐgã;¦3‘¤dÀ¾IŠ„ ÌÈÑšÑÊvH?uÿÿÿúþ½úø¯iÿ_ïëUûÝ Õ5Óö²£Ò ±hCIF)ï»HB6 Д;änDöŸªiÆžý-;Âiúvša3ðLÜfãL ûÿÿºÿuÿ×ýׯýuÿ[õ×kßC×õ#DJ$PBCG;a*!ÐA4Hs,/ ‚è¼ÍÐÉñ+hœ4N'n/Ž»¬Ú'ÕéþšjºèZ_ÿïÿ÷ÿ‹ÂÓõÿý÷_ÿþ µ…ýµˆ„ðŠ%A)'vŽnèã„ô!¬SÕ^/ „Ý„õµ Iÿ—˜ONë/7è¼a‚à t^b•€¹9pý×ÿÿÿö—þæÿÿ÷¯ú¿@µ@¿ôÄ}Å @±‚$GÚAA¸A A"‡´’«­zºXÜ,ié¿ÒzvúWOêíl,>Ü'„ü'H?ÿú“'ý×ö×úÑýuÿÿtXÿ×ÿ˜w…𿿈°KA-ü;8ððŠB$Çþ¿oÿãÿÿûø÷[ý?Õ ]jýl/ëõþ­ÅzÅ,ûÞ¿ÿúºÿþ×TFÿ_õˆî)8"è4M ^(º(u8á?þøýÕú¿ÿáuõú¿ïnºÿÇÿúÿî—ý ½ê?ÿÿÿùuz@¿DóýóŽ).Ùø ^Õ²: ‡ AbPéô6ñ¨.Ãþÿ¯Á^¼ÿþ¿ÿÂöº¿ÿÿ¯Ñ1ÁÿÇÿÿÆÇÿûÔh/Ð_ýR `qt.†!)š(p@… A ,ÿoìþƒÿý¾0_ÿØ5éð_ºë÷VgÚZ¿ô?¾gÿÿ÷ôÿûüÿþÆ2Ç –‘tNÂÄ OÑÇÅÿôßþˆÝa¿ÿÿ×]ÿ‡ÿá}C]~Õ´ýÿù#ÞÏÏzïÿýõ_ÿý~—þâ]Hø!e=ˆdpÙ$?ÿ“ÿ–7@¯ ÿÿþ‰]ý¯øaïí¯áG÷b˜þJJV¿d8ÏÚØK^šÿ¯_ÿ³?Ýô¿_é–8„ ­—@Šrc´‚8ø†G@²3¹C–:ÿ^ƒÿéxoÿ÷ýß,H/ßý½~Â_¢yûOñ±QÆÿ°àýޱÿÿí¤ïïm§õVº¶¿¼Z UˆAœp“j„Gý{mûýxëÿúú¤ÿø7þÅ_Ú‘¿©‡ ©‡LŠ?ýoÚb¿ø?øëûá„¿á…ÞÂÿ¢‡,p‚Ý¥8çXJáÁ C„‰ÿÿÿlÍW¿ëýÿ^·ÿÿ‡Òý/Ð2ª"" a`ƒvºEû~ši‘Gõ[íuðplì_±ûÐÄq!A GvÐ@‚Ä¡è㊠ÿîgžó‹×3ôÿý¿__ö?þÿÞÿDÇý}DDDhDR !`ƒ0A¦šv¶Ú }vì.ši‘Gÿ÷¡(p@´°BPé Ó‡$8œÿi§H;Ý»»°¹I­¯­zù¯éé}ÿÕ|DDDDDDD0B"!§4Âjš œäÃHp@‡$8²>„¡Ña$„ã¥ýøa(kÿ +a+ V¿ik¶¿aiµ×Ûÿ3¶ÿ‘Hþ¼KQkb)Ä „R&A„”8ÿý‘_±LSÅ{DZü|XþÒûµ´¾CÏöé°aE …aÄ¡Ì8A4 ºIœqí{†[ûM2(úwßßÛiŠcù1ûö?IErƒ”8ˆ„±)ÂÄ—A}ã -¦„0ši§ *ØLí2OöFý„È£ý¯w¯Oÿ°¨4 ¡ÄD$S„v‚ ÄDI¡B`˜M4TÓ†a4Ô¿ÓXdqaAa2>‚ GÈì‘à ÄDDDDDDRlDDF<ãˆA VCŠ^» ‰È-‚ÈâPâ‚;ˆ‰Cêø¢ƒˆ‚%;±Èƒ‰!ÝXK(qÃ#¸ BÅŽÈf Iq ¸ö±(qA$AqÆ $;‰9ä -ƒHpËpŒ~#òܼve•jH´å/û_£²ÚqÎ9·7Äx‰ ±Èd†˜Ï䇌òèÂ;†v@n;’\ו_”:@ha2pÉB·÷ªvšd’"q®*ò±ê¥r²4F‘dC:EDu¶!!(v^.‹ Ú½-þs×Èz¦™Ý(M4ÂÒ0A‚ Ìâì¼iÏ=˜"‚1̆gSL‘! \u p@œAµ‰ØÇÿ§þ?mÓ‹ Mž¿„í C4ðἜ]¡@Œá •ˆ†½ÿÿõû¢í¢8òPäÝ¢o Çú~©„ï=Y¡ÂS„qa;_ÚÿëßAá:'˜Z7Aåã@­tN%ma"q“w#~±¢1Å;dw‚#‘2AWÿÿýõýtÒ]=-ëIé´Ó`ËòñŠAAA 9éœ db43£óyÖÿÿëïÖ“Óíã»û¥õïOO ªéÍ@†ÈúsŽ‹d"™vm‚a? ÏDùP<¹ Î3óCS™‚H yr!ž]_çEÓÁ{ÿ_««_QïõzœqI$¡ÁØI @…² uþ4ï‹OPœXOOh^šq óBð@Í3#ŒÓ1‘¦`ŠtF ŒÑ¸/úûý.ºþº_þéëá¡A(‘G8áè#ÑtGÁ;]"oDÝö÷§úív§¡¨A¦±j4,!i¦ƒLüŸ õýlnÿÿëÿÅ\o8â ‚± AeÐ"º.ÐMrWEçT]¹+h¿ÖG Zd¡¢níw…Ö;ŠOJ-u[¢7ÿ¿ì5íuþþ:ô:¤! âaÊ4g 8è"‡(p úKǯmë WOü¼Ö*z'”o“¿/•é¼”VJ(»wuÐ/ýo_ÿÛ_ÿÃÎ8a2> ÄDtLq(paÖßÓ¥ß=?é<'á:]6×h'¤º¦áBzn_:m[ýéÿàÛ/K×®¶Öÿå<$Šp‚‚AÐ=«‘‡Hïÿÿÿ_Öÿßþöü~›ë§ëIátïþ÷ýáºïÝ÷b¹=WÉëRêÙtDãÒbHˆ?­Xöýý¥÷ÿí¯úõ·ÿõö¿úÿÕÿ_ý&Þþ¶A¬|!apv% "C„‰N"ô8Çtïÿÿ@×Áj¿zúÿõ½ïþ÷ÿ¢Üþß8â“ êB$Ü NLsŽ! ?ûÿ¬ÿÿõü~ ÿßø'þ`׎úø_m}Ò:~gìW™ÿÐçïÿGœGªEŽdqÆ÷ÿ ÿMá¿ÿÿýÿ_úÿ ¿Zoï0ÿà ֿzjÚ¶¿È¥ÞÙû÷3ðÈ4H#ŽË‚€BSŒ"Ÿaó<Àd/åƒÉÕ ßÿúÿÿ¢Q×ÿý¿ÿÿ[ûì~Å0Ò†þÂÿ •V×îÓÍ8çTR0á,28hˆ‰Ç8çf,ÌÏÜúuëµÿ~ýdÆú ÿÿô ßÿ«­{o»õÖÅ~ÛÅ}à z¬ „88‹#¢â ñ‘Ñx?ûñ½ÿÿõýz ÿî¿ë×Çå×Þ»'j°É¬4ißk­=¯ƒc÷œpA‚â"b0ІÇÿý=ûkßíþ»¯ú_ßüq¬DDDDA„ ! 4í"ç &©§ /”9±ìD¡Ì8jˆmŽ4äó<嘷Û?dšþêÿÿ¿Òÿ[ÿ¯ÿÿþ"""4؈ˆa‹Iâ$Qò‡ ŽÍ8ÿÛ ÚWþ®ý×]µë´œû¿_öë×Òß_lÍUœ|ãŠF xk6Iôo Cƒø¨ýv -C }…°½¯ö°Ò´­v×µáÿûkú{Ñ·µS!(|IŽâ¡B=¿i¯ø§b½ŠcØþ)Ž6>=†°–Ø.¶—ÃWÿDTàÔ=Ø„„$Pý¦ƒ5Nøkj¶½ýºjŸwb¸®/Ø¿cÿ´ŽîqÄî@ðËjŒ97A8±`„DC@ÂdЃ.ÓMTð˜LÄÉG “í…MlŠ>¯aSKÃHH4bÔ!ÂD¡Ô!!—TEDDDDDDDDDG !"p†OA“4k¦¢ ÁÆ‚Ãì „Ã $LJAtF2g°š{)ÄSìKl$XâPød|Ž- $"aÅâ#œsqÌ8lH(§Hã‘G¡Äã¤Cˆaê$‡GA#B¡—â#ÐA‚ Êt‹ ´…— A‘„F8‰CÎ;²‡ G(r ÜSœsŽXåJ=œ| …Ä¡Î8@„㤪$QÁÊðô6A Çi>$nPâHq ‚™rR@‡¨D á8ˆ¾Ž=ˆ„„]‡$8éb!£Ž9N7¦Xâ"5¬HfØ‘GÂH"Ç!HD¡ÆÚ!ð‚ÙNP㈔ë²;‰ 8˜s“N;i" äã-ð¢4B‚8è ™CˆA˜p‚ÄŠ;aˆœ|Eðƒ)q*Œ‡ä3±(qUäTɸˆ’i!!GÉŽXã§éÒ+9Ù®Ž8“Î8”;¨„ðG#†gãã¢vû;%ý52/¼ë±Ž"‘ÇV…DŠ9Ç=‰qlD¡Ý'ôòfÿÓNqÈ5bAHR(p‚Ž"$‡)ü˜á%cÓúÿèE¢‡,qÂ")â%Â)ÄD¡Ôå,ZOÿþ×Î÷ÿ÷ÿü}'¦ÚýºI­êØ*ºnƒa—ÁEæ JÜ»É[DŸ.ô‰¾)z&ÿ¸ÐkwÈiÈæ #†‹bPåŽ8AˆˆA Ž‚Pçrœ¡Ä“U2:#äp@ëÛÒnªµn½õ¸TÝpƒÂ~t辤H7'`¤­¢íÉC…/’.Ü»}ÿÐ'ë ßþÿýÿ…ÿ üÿÿHEò:î ˆàóŽ)b${H±ÁÁ\!H6ÿ¾¿ë«­/ÛÛWëI´œoÛiÿºº­'„ð«Ò§I®H¡ËÔ/—¬7ÿýÿèÿáGþ¿ÿÿº² `@â-A NÂ!(p‚ñ0âH|¡ÇýjúMÿ«ÿýWý}c¤ß¿ôûtݤ­ÐÛUÿë¯ ÿúËQþ¥ëô ÿ‚úëþþ¿¾S[8 „ „ã“FŠ‚6H|DJÿÿþ¿µkÿ¿ÿû÷ ý]×ÿÿýµÕ}÷ïþ¿ôËW—¯ÿ›WÿÄ¡ÄIŽBBPé|‚ãÑLJ¢‡TÀâE±ÙpÚÿÿþþ?ÿxëxëüÐJ¦ÿZÿ@±ýôµÿ4_¾ïÿÿ__ôÿ}?ïÿ_þõ !’ £„‹TK„S’Jp‚c¥ˆ„ ûÿÿýkúÿ×Âþàÿûã†ø/a®»jÚzÝŸ²7Zïý™ö¿úÿë¿ÿýÿÆŽ8‹#¢8P’²Ç‡,q(t„lã–8‰qÁÌŽÿ×ÿÿ×ÿÿÿ¢7þˆßᇿÿÂõö†cõ°¬0µk¦©õ¯úwþÙûÿý³?·ÿÿëbAl(à‚$8AáÈà€°Rœ‚Xô,ŽEÀðYëÿÿþY?ýòõüž½ÿ@µÛ×úÿÂ#}á‡b½ŠŽØ® %±_û [Kê×û í©·¯§æuö¿gæ×Zb!"MÊDNåŽ"iˆ×ÿÿÿÿÿõKý¾ ÿÿ-'àžL|²ûLŠ?vžŸb¿äWìSŠûb¿í;† °ÒØal.¾êß \!(vÄ „ÜpˤF=zëß®õý}ÿ¥ÿß_­w‡ÿïõÒéº Ã0šh2nš œvA¬5»Ó´Óôÿ¿±\{ãö*;J¤!’îPâ#b‚q(rCØý.¶þ×ýßÿÿÿÿÿßÿÿúZ|7$! &ƒE¦ša0¶¶Mlï¾û oûÅ;cŽAHp Ç‚dp„pB8`"œ¡Ë"˜åÂ]ú_ÿv~þÒºÌî×3õþÒ×[ºþ·ÿû¾#ˆˆˆ‰!ˆ`„D®Ðdí4i„ÈDzN¶ƒ ‘­8ˆ¤Pâ"Lp‚(ýˆ”8”8‰!ȃãþí¥ÿkëk« {I´ÛK þ·œª×ÿ³>ÿÿ3Ï/ˆˆŽ"""8aˆ0@Á c f(àYœã”éŽqÎ8œ|IŽ8\‹[ÇȱØÕŽ*8axá¥k % +kjÚÿ}§ivªí¦R¬DE$"!"Ø‹$K×»[[û_TÅtÆÆüq±ÆÅ}û†îJõùÇ fqÈQÈQè¡Äãdu&¬0š~švF=˜uMU4È£ÙLˆ=Ú¯ƒ­ŠŠßmŠb­zQ `q(rC‰!Ä.2C„™4„DDA‚„A‚ + ¬Ìáa; ¦¦pƒ ›ÃA®ŸÚ˜uLû´Ôk;,Pù!Ò8â%;GC#àV"""#ˆˆˆŽ"" ÁEÄCC!„"!„Qj¢""Ž"CnmñÓ² ™äÝH5?ˆM–?@‚#Ž$QÿЋ”8‘G\†`䇨\{,qA CúBELxq¡è‚ã ,¸7[ Ô=ê-×&8°0´È ûJq¢ˆÇÝbChvÔRåA¬q %ñ€påPþWR‰h9ÊÂ58ã#ä|¿¿T΀A‰@ÑÄXB#år‹ýpƒ;/ˆ¬çÈàA9ìDî?É–v´×U°ƒX”9úò]¬·× ›dfvFȆw‚ÿôbÕKL‚Pôí³²Œ“ÿÿ«´ïôÓ;$©æ#¯ÿÓ¯ûë jC“/+J< ÁÍc!¼Ð3y™yHòy+¯Iÿ‰Cý?žƒa4Âa?'‹°“Fƒ4̲3FጆÈ6kÿîþ?ÿ¦žš§~ªšx„дÓ8Ágàƒ3‚úM8@ÌÈ«; ·ÿÃ/Éݾ‰Ýz''oâ‘!Ú§§ziè8×ñÓ2žAŸÁ$Gãð@ÏÆ/ÿ½<&ä?.zxPŸêtNè¾^9+#Œ”aòá¢pôH}ÿÞšÿjÂå-wÿJ×é´&é¯á4ôôô— p˜_Aéô7'šÿ K·%ítãÁfg$‚o\Š—"Ìèy;5æf™ïý/ÿî==?·ÿO¨ÐûÕò;B“Ók†]^¥æ¦…„4âÂh4 ðƒ3‚h0ˆ^~0ÿü°ÿ×A~‚®¿^×_ÿW_ÿÓÿî½="'­i„Õ4ôõ á=/ññuqä1?þõoÿþõýõºÿ¦Ñ;É[Džò8ráÉņ‰»D‡z&î)òoÿýx^’ ñÿÿûýÿ–#ÿ÷ÿjµ´Ýpƒ† “Âmè'„I¸Pƒƒ/ Âÿõþ½áºÿÿƒ`ÿÿÿßÿ¾wžž©Õºþ'éá4õõþY=zè•ÿD¯õÿÿì6_ÿ_ÿª‚Ññ¯ëÿXôÒµßOi7_ú—¯—Vü/å“ßÿøl7ßÿÿÿûËëܧ‚ÿÿê£zÝ-ÿÿ}/ô¿ò‹ÿÿÃÿÿÿÿþ}ÁÿŒ§ïýA¯ÿßÿý÷×ÿáÃûþHÿ_÷ºz…íaïð½!ñà·¿úÍæ‹ìÏÿßÿo×ÿöÃÿÿéÿÿÿ ÅQÿëõÿÚ ×]m´ûM·~¾º¶­™úMÿÿþëÿ·¯^¬ú ÿÿD£ÿZ#þ߆á…†¶µa°ºÚÚõÿÞqfÿ¿ïô¿­úùÇp¿ÿÑjÂþ]Yu`º¿ÁûLS±ÆÆØVM¯ÿZ“_KÿoöÖýz«^:ÿÿn¾ÿëÿý5´íoûìSÿü0°×a¯ÿ %]­«jïëºÿÿé?¿ëÞ½ÄC ÃL“ÃNÉ?§do Œ{M?ÿìPb¸¯cX6**;§_ÿÿ4Z¶~Ìëÿÿâ""""""B †h0šÚßÚk ì*mëƒ÷ݵö×öÓý[\ÏÛ?zí¯`„0……a¬5ì)c¦EôÈ£þ?°·ö­…µµm>×ÂY¡ÄD\DTIÖ!„!¡ M/ìp~ÅFÅ1Q[Çpa/øâ""6þ÷îí4Ö×Á±þëÃ.ÓMNMl&J-4ÖÖȣݯºøˆˆˆˆˆˆ0‚ƒ"-FíxˆˆŒEøÿûrÔÀ/-A 6òÔ`’Ô,FÀÔâP Q-C@5Ijøƒd·KÊFYÔÀÔ©…;ŽÁc¸É¸¨yn|ìeªdN;2£"™\L C/;¿TÔíP΀Ô.ÇÇÚÔ‡}’"àjµþ<ï‰ä` cÿÿŽ%h ¥¤ WF†u¬©/þ½0p²¸¼ „ÌàƒBŽj3aÜ0@Ï i˜fòã6E3QLƒf¾õþaýWA¡ª¦†…„Âi˜‚ ü380D+Èã'«4Fy¼ö`Éhd\ïÍëóÉf)¾ÿÓâÓôâÐqñiÚvš ô~?ÈAB¼dã4ÎfâœÉNÇË Ü'^~JØ0Hž8RPGt]¿Dï#z&ûí=5íSÕPh?‹MSPA Ó ^T£6j# Õuî—_O ON ߦá6‚ Éä2|Jè»ë‘½Q8w|·¢oûAÜvšOì&`„2ìñžÀÁ g@¤ä|g ùŸæ|ŽŒÁfŒÑŸ#8û0èxÌãl)¢9•EèïéúºªÚ¦ëúÞºßøMËÍþ’l eñ+¢qét]º—ü'­ÿïNõÓ»L Ó¸i§v4!ðƒˆ|9¬…<hÍò3g™­˜³3< }wô¿×ÿ×­&ëéÒ}~´'}q§®žƒu &éØT[8ïq}÷kþ¿ý'­÷ö·„;AÝá·iØA¦È<‹(÷ÿ÷¯Áÿû¯ï×ÿþú«úÒî¶šÒQüêaµ¯KßýÝÝÞÚ§÷úßO[õAÞ¾¯þÿÿÿýþ¾¿û¿ôž¯^×ÿú¤„vºò  Á¯“†C#‡y™rvîõûï´‘ï¶•~úNïÛUÿÓªëû¯ÿÿ…úÿÿô?¯ÿï¦ÿÿ~[Vò` Ã7Ú«í××ûֽꛮNä2½ä¡Ô“‰BPäŸÝ^ˆ£¿ý^y,èÿºÿý¿ÿ÷ÿ÷E_ÿù‡ðëÿ¬¨’€3<~—ÿ½?ïï¯÷ýwðÂIè7É^Le(OÿÉDñýÿÿÿ_ _ÿÿÿý×ÿ?ÿ_Âì8òbp|_¯Ýÿ¯ìj÷ëÿO÷®ÿ[ÿõÿ¯÷UÿÿÐ_ÿëÿÉAÆkÿ×î¼0ÿýÿDcöåh Ã~Éî5_º“ÕõßÇH˜ÿµþºï]´’¿õ±þ¿ÔWþ¿õýÿÐÞÇþÿñ@ßÿËÕzêߎ `Q°ú[äßRC¹!ü˜ø½îö«¯¾þ:ÁoU¸¥ŽBê?ÿx}ÿûÿßÿÿ×ÿÿv?ÿö7}êýàÜ“¼î`¶ [}ïúUOÜ›ÿ’ß^ÿW+ÿ“}]oÿ°|†$Yë®ÿ÷ÿëÿÿ×ÿÿk‡¿þÿü<£ÎÓ‚Ø6oñë·Þõô¿»_õKÿÿ×÷×ÿÃþØ]úÿ´¿í}´½´¾ÿ3ê¿®¿ÿÿI]µ»;V `Õƒ|–/‹’†‡¼{q××Ó¥Åü*¯þêšÿü>×àÿöÂÿØ[í~ÿý´ÝÿÕÖ³þÝæ¶~ÿß;°1ƒý§ðŸôþÓÝïµ»þ®·éýü7ŽŸíÿدö8=Šö+ïá„¿öÖîƒ[_öÓýmTÒÌ?ÎÊl.ï¯ôîÖý«kþ½“}/ÈÏ’ó&£RCù'É\ÿðýÙ(µ¾õÓ_ìŠ;ö½þØëýŠ}†ŠïØa}µl/itùÚ -ú¦ñ»WÚÿëû÷õT>´Ýýwÿá¼íUÙDDD0¨DD0„E¦OMm0½ßk¯öºbŸƒø¯b˜øõ¹­ªÉ i|Iã䯢=uÞJ÷¾ß×ßÿ÷ïíûu¯j\ßDTDDDDH4"Ј`ši¦šMÓM;L-ý…õ»_²–Ôä€/±ÝOx;ÉgzzߊböêO<…§ÝÙ<Úú#þ¾féõK HDDDDDDA‚ !hD4Âh0ƒ' tèàûR’àUÓë~ôüwþõß¿ÕH;¸öá>AôÚ±QqL|ÎhPQÃfÉ$Úþúä{ÇÞûO½¬qÿ°¿Þö+ªúÛ¤È T‹†¶¶½ê¿iÿÚaWTõw«ö»u»Tí{¾‘ÃSk úpƒ4 Ïi¦˜MPa5»òÞÈ#¶«vûß°¦šÿ°¤]’ÄDDDDDDDDDDDG iÃÏiÝ Â Ó0žï‹ xì•â""""""#ºÑÀ³kZxì†CÚϨ†@cd±!6Jò›²]È m…ËLÔ! »)­È}f’Ć@mCª!’{­vC$s^C$3íÈ,ðW+•9 ÌZD€Õ-#@ÏL® ¤2CT.Fbu;Õ&M"UHd‚¡T« ‚L“fD‘¯ÉA) :÷ó¼´Ì”2i2 ²M‘eüó-}Q·\kÿŽŸ‘JAl=74‹! 'ÿü~4ÌŠ£²T°Ÿ#4i‘¢¡åtd±þÚé¢,.ƒMOÈ4A„B`aAæ d‚/ŒóÙìÄfD Í ëd÷þ¾³Å¾»ÓÓTÓMPaµM0˜! Á‚ Î1 äjÎUšdŠ ¹¡’K׿þ)8ºª'DÞònÑ1Üj¿q¦¡0žž;4,& ÎF‘ˆ<&KÇãð Ìã¼Ã<)ž`‚o4"æ%|ì"ýÞè&þ¡83L ØeøO/»ÿ ‡¢C¹7zq§Kq§~†ƒ×Aá4Õ4-4Ðag™ù‚“-ö|…<ã4e8!™‘¨ê‹¢„£ýÿÿÇ¯ÛÆ¤ÿP©´^a„—ŽÝ ¼rVé»ú¢CûUŠ;ôÓûÕ4Õ4ªaÀràä`Î \ØåŽþõôݧøú_¤Þÿôé==^—[M$õp©½tNðƒwòñ„‰ÞJ-h›Ñ8wÖÿwwé„ý?N³<Á‘"3ElÈo5Ç_v?þ·…þëéþá+î¶?õÝ=SÝt/꺦›§ AºjJ߆ýúZkýéî… Ðg™QÁe¡øÄ@†N<̉fŒÂ'#LÁ»^7ê Ùqoÿÿúýtž¾Ÿz[ý.ÕGªŸÒèiý„¾·múßézݧiZ¦˜C §¦šxA„Âh4,C ¯0ï`ð¼lF¿ü Ž(/iðõ¾ÿ×õîëªÿ÷ºo÷þJòVÝ" ¤­ÉÆHäÒyÌúä­¢í¿¼˜í5´â“OUŒ-õÔ0õö¿ÿk¡‚ñÔÿTïÿf‚ô þ•ÿÿ÷õý.“×Ü!ׯvÒôyxååÇ m·¢væÇ'dvæÇ%²ßÉê÷ Þ‰GÛÿþ«õü0ÿÿßÁ|þ8?ÿÿý´º{a}×ïN—æÃF» -'IØ]a¨OÖ­S^ðŸí=F@Ÿ˜#äõÿò$/Ñ(õ·ÿÿ÷þ‹¡k ÿ°ÿ×~øú¶ßö•]{±_ã¿ô/XÓxôØßwøðßþÚÿù`^OP_.¨oÿýÖ¾¯½¿ÑÿðÃÿ“Ç×ðrÈqä<×ÿ{ÿ^ô+÷¯×õßýô—·îÿ¯}ÿðoÿþÿåk¨'ô ÿè7ÿþõ×ðþ+T;ÐÚØi¦—’âÕ‚þÞô¦³=ßÿÍÿÿÿ_ïõ×k¥ÿ_×ÿ,#ÿï[éÿo^êÿƒË‡ L0K‹‡ù˜OD1"Í´ê‰wúí¦s÷3õµ½Í®¾ßí¯þÿûõú_ý‡ÿþ8Tÿ‡þ’ëýXáx0ž¬ëÿ†û[a…íS®ÓmuûNöÏ7_?dÿþ»ñþÝj¿¯þÿëÉg… ¿à˜R×ô»†ëôG6ˆßÓ\"7ö=Šö*EqÁ±L|TvØa[ kav×OÛJ×´«msö×þ¿îgÿÿë$‚uÿ&‚i<˜t]?-;ðn^œ ^@¾E‚‡A¿´ þÓM5»nÖîÇ[ÆÅGǰһ[J­/µm}°¾ÚÿÚœ³nÒÕÿÿí"!¿Éÿ¿×Pÿ½x6—°B ÿUõÂi Ó²QØMPa2(öFÿiÚ}®86*+c}Ž7¨þ?öÖ×µµïïý½ÿý´Lwíö¶—½~î¿;R U`„0…´ÐˆaMí2Q¦Ú­ªÝªßßÙØãâ˜ï¨“ïý¥ `˨duUÃ$Kþg×ûoæ~»×÷ô¿ge7ÄDD„D‘ˆ`ƒ†·C ðÉ: 'vFÿdo¯Úk®¯ëö6* âI;~Aï¿ÚÓz›«?}§®D—®Ùš<¿ÿ¥øˆˆÐˆˆˆˆƒ",!¦alæFÿê/ÿÿï«öÕo[VÕµt›]>Òðšu½ëá=þ"""."B«à ¯¯­cIØãŽ68û  m~˜`¿[þ„a†™n¥¸MU0ƒ ßßëoi§§â›Ø¦?ãúß눈ˆˆ‰B"""Ó½lŒxh0ƒ#Ó#~Ó"Ú¯Ùÿk¬DDDDD0@ÁA‚ ! Ðh0„Õ4A¦šÇ‹øˆˆˆˆˆˆˆˆÄj×v½†—b®Ö‚¦;µþäÚy,ú¦Iƨš|·)¼çªf2§qxìy/ûÏ^—­ªfJ#±ç-2ÀÙÿ_õÿûÿëKëù––² þvB*2ÍÏ_§_ÿÿøÕ5:Ån5ES!" BnW×Ö·Õ^¿ß×ý?2(ŽÁ3™QˆÈNžWÁldã$ "²á™‘ÔôýMæ¥ÿÿò (uÿäªÿM4Ó_¡aTheC:PÈäGHÃÿÿñÇZjÒnƒLºÂ“ÂpËÕ_è¼rxä¯ ”]Ñ8ˆ¢pÑ7z&ñO×»¨Ða8°ƒ¸†°¨53SA‚@ºeâ9¿ÿÿþÇÿu§Û«þž›§…Õ]¦á7>‚è¼ê‰Ûëä ŠídÝòc¿N4ÚAŧ  ‡„‚2²<ŽDã3Ì3Ã$‘ÈþfDhü˜”ˆò’ÿðÂõÖúéuÿZý÷Bø¤Û^= ûü&ýô¡<¼h'’º8eù+Ë· ˆËŒŠ;D‡}$Å‘Ñp[ Àƒˆa4Õ‡š ó1à„BAæ<Á!H#ó9*|ÎHäª< Œ‚S‘3%Ý”_ƒÿ¸ïÿ¿½uÒþ?ÿCãý¬&-§…{OV“¥MÐx'„ƒ×A$!÷§kziá NÓO „âÓ‹A¡ 0žQf‚ 0ž³qfy̸Ê…sA¬ô%óÐÿ]‡ÿßïÞ»þ­÷÷ÿôÿ¸ÿ_´–£ZMØXh £­"ó%n]¸HœQ7ÉGDâ‰ÃôMþží4Ó°¦ŸðÓ°ñv… ü&˜AëÿàúêÿרÿðVㇰþü/¶«ý§ÿûÖÛÿñ!c¨"?íWAáPnƒÓðžƒz/ ¾¢wé™(hžd®‰ÞJ2ï%mv‰ÃþFôIÝ"CþÖ׊×ÎÅóaþÿëýþ‚°x+aûÁ§ô3A+aþ–¿MÄIB!Cñ¬}-'«ñIõzéôšxAØWO ºn›§ ôÿÐnƒ7òvù+h°ÁBÑ;z_ýðßÿïïÿú%ˆÇ°ö¶Âûÿá~øºŽ¯  s9CŽ‘Oïõ¯^¿ï§þŸHz±ë?¥¤ßõ´õOôý=l*éô„3ŽLpZÿÿºÿ×–¯õ °Üå†ÝíøDoû_ð¾î¬øx@ƒA,_~ ýïîýGUÿÿ齿þ›Çúo§¦úÒ­!ßû­×ÿïÖ½è,‚A`ø7àß _ÿô‰_Ûÿ]¿ð¬N8`™#½ƒ¬£ÿïõáÿ/‚ø/‚úÿßë§ÿö¿^:Gaû§û×ÖÝ{ÿëpÞÃOï_˨/Á¿äð¡ÂÚ ?þqÄ¡Ä …øw…ÿýƒþ©‡þpPSÜÁ|¸þ8ó_š„Áÿþ8?úœ÷öûÿëÿ{Köü?×ñþõøèG˜kþÄAHãˆha‡èŠÿÿØûÿ¦¾°¾©þºÿ#ŠŽ. ÿü}u²,”«ÛT×l%¥_þæu¯úþ¯ÿú¯ëö¿·×øoýP8 X¤Xá#Cýù1Îåü7ÿ†ÿ½èý"7øDQïÿõþ×ÿÿþÃþPÖí[_wþßý©É\ÎÔçæïÏ/ÿÚÿÿûþÿëb‚E8ðÿ ¨B?ø?þù1â‚Ã+úúúuõ]è•ü"WÿÿÿÎÉEþÅ1Pl\WÁ÷ìq_Ø-𶩯táB~¸_ßÜÏ×ÍÕûgçÌÿÛW` N‘Ξºÿÿ ÿàÚý: Kø_¡ùzÖ?ã ¿ÿå‰ÿ’}Úi¶šûàý…þÇÅ1±\0¶­…††Ú_°›a~ÿï[L¢ÿõ†Gp‚‡@Švþ¿wÿß·õ­~¿ïÖÿú^‚ÿ_ÿú¾"!„T8†§¿Ú…ÖÈÝ´ÖûÆÅ1ÇÿñQü[öÂí­×¶”RQH!Z•Uþ¾g?ûõé?¹Ÿ·×ÿô¾ßÿ_ÿÿ×ýÓgj‚ÄDDDA„àÂÐP(Ba2QamH£ÚdcÃ#îøkö*EìSÆ'Ž:XnŸí…Û]7.»y ïÚ­ÿÖ¿úæ~h»õ×¥ýÿÌׂ 6#ˆˆˆ”!0„0˜B§ú­„(ížœ5µ^ÖÒŠPŠ ~>°×ôöú¦¿~Þ¶–½~ÖûM´ýoþÿºí\Ïÿ‡¶ñ¡CA… „iØAÂÆÙÊw±^ûìTVÆÁ„¯b½Ž8ýìÁ&Ò°¾¶ºÞõím=v×ྡྷ""""Q„Èì„B†GìŠ?iÿp×Ç"÷º~¿cŽ6+cŠc¸þ+І¶ý„·žK>£ÂE%(p‚Â(0ši„î@Ë…´ÓMa‘ t]²(ù‡LŠ=öEü Ó_\7ÿØ©ûØÇ˜Š„ Å4Š¡Øˆˆˆˆˆ‰FB"A¡a†i Âa5Njš 厘MlŒuA’{lŠ?éá4ý5Nv )H(€Œ _ lxˆˆˆˆˆˆˆˆˆâ ˆ`†\ ´!™Á ·A„ÓBN!tÈ8è$ˆÇhã‰(~#ˆˆãˆˆˆ¬0Ho‚‚Þ9!Å‘ïùœö£p@„Š9Ç¢PâPà‚úVÞ‚É"àe8”8eïÿé‚HJá„'B#ÿû¿‰Cçdt\Ãa„5´÷Ú@ N"‘Ç‚Þ9XˆÝ®aÈAÜ2;#á¤L¸`ŽˆäìUÑÇ‚Gd|°BEB1{äPâ) œq Ž áÁj'sŽxA 1Î8œui¸¾S„ˆH¡Ü³&ªS¤BqÃ@ˆý„qÄá~Z`¢EXAbË „ „E!±‡‚MÊã™É‚#É&GÈø*Ùp[¡Ã#Šœ›j´ô8„âÂ8åB$‡£1æUoö)q¼˜âPáéÿß8ábPä‡ñHJ †—ÿvAqöˆ”8Šå!Èæw¦jÎΈèŽDoÿqÂFã‰Ü* ·Ž‰!Á‹´Ðˆ’rö$i'>ë7e÷] CWgCES—ú`ª;-YÊ—ò¸¬~?Ÿžn7›‘¦`Â"9@dèÈ‹ýœ|¡É“†‘\Fÿù”ï\©­;¿ê¡; ˜PƒBÍ ƒ@þÜ% ¬B¢!(sS¡ó½_úIi¯çqûC>BÓÂ~ì‚ãá ‚¢Ÿ ¶‡ðD{ÿøP¿ÿú/(HäpÚµDá蛿ÂG›­ 2Ç8à0’ÿÿÿÿûµ§¨Tð°ÍÚ„á—Rû @é+.a£Žað@„R!×ÿõ÷ÿÕש…×¾Ó»OütŠq! ‚E‘òI™æyŒò8ÍYžf?.eB3¡Ï##Z5çX¤D}{ÿÿzÖ7¿j>?êÒ,tŽ8‚ÖBqÒ# †šjŧiñh3¨pƒ<gà@ÏÁ3ц†~.0ˆG—‰òD\fÈôg„ ó2$óIÌY?ÿè _Þ‚ëû#‚AŠF ‚Çÿ½Sím4ôââNÕ8¿´âµÂa æx gã9x e¦±žŒü¹‘ži™DFâÖ¸-`¿Ýy./ÜãˆãˆA 2‡ G BFéõØR8ú/#v‰änÑ!ݪwÜiÿÔzú >4õ½40§v¡æz…õÿPK üB@ C¤û D¡Ë BPý? /}® MÂnt^t_9+rxÑy….Ü•¶òPG~\eíw÷¦ÛJÓ^ÿÞˆãá¿÷Ñ~û‚ KâAmqÄqGïþŸ\z÷§IÒo~Ó´Ü$ž°ÂÝa4߆_Òtš &þJÞ‹ÌœQv¼ú.á‚Ç~ú'¿Ô¡Ô5‚ ‘æ“IqÁ‡Kõýÿÿï߸ÿV?õý×_׫xô“ü'öÐN“½SÕý˜Wëúÿµ…ð¿Ø">„B"‚ì±ð@…D%·_úûý&û¯Õwõ¤¿ýÿëúÛý¾½éØëÔ~Õ_ﯥÿ)Âr‡ ¼G$!)8„\Cíý‡ü28Ÿ}ø_ð^ïý¾Ÿÿÿªÿýî¿÷ΣO_úÿÅUÿø¡hãˆHJ–8„Šæ_ÿü~‡j Þàµÿ_ÿñ°ï¯ÿí-v¼ïÓþ¿ÿú]†*‚)Ê¡Ä\ „$S˜pˆýî¿þÿýuÿ_ÿu×ÿø>¿ÿxÿöÿØ_uýí{_Íåž4S‘¢* ÄBÚI-ÿÃ~õÿ¢7þ¨ýßÿÿ°ÿÿÿ÷ð¿hnÔ`¿uiø_Ó~ ‚!Hã‚"‚ÚƒˆAjߊþüþZ/Sk@¿]ù? ÿÿþ¼7_ÿõÿèþxëä^±Èȯ³œt) CôB‘Çq_õïÿÿ×þ‚ú÷¯ÿ¾`ŽÿÿåéäæúöÎÔòèºîÈßïûÿõ°A¶)RA("‡³>){ÿþþ¯Óï^—ÿÿÇ¿÷øzÿÿþ†þ¿ á“‘`ˆai„vš§ ÉEÙö—IAèD ˜!0þЉ‡!¿÷çÿ­Þ¿ýÿÿõöÿÿë§é}Ö""""¢""#C¢‡8å=´qøÄã’GÿÖ©æö~×3¬ý¿­¥k¶gÿµÿÿš+þ¿ý÷–?ÿßEÉcÇdDZ'b#àŽ8 „¡ÄŠ;ªïì-¯ý¬4›W^ÂÚVºö¿ÿö¿Úfêýu´¶Ìû[3Òoÿþ©+)Á0ì,B T‹¡Îÿø?cýŽ8¦5Ž8¨ö_¾¿µýµMommm|/Úi…l)¶¿&Á¢ÎFÙ1ö]Èè#Ž6g  ’8çîÿí~íSÖõO±UÁïü±LvG\Tq[†­„¶ý†[[}b"†Â÷´aÐO‰Cì!5NÓ†IÐaSMST '‘GÖÈßMÿ¿[´Åí=qQ±¥"ì­é¢Ïª. ¤!!ôŽ8ˆA Ljˆˆˆˆˆ‰#—`pa0C-–ášÂ­é¦J´ÂkÚdcÙ‡TÂßÙ~ÓÝ‚‚jPåº FÄJ±"Ž"Pìq\DDDhDDDD„ЃÂ °ƒ.a0š¦ƒ ¦J!§Ä‹DŽ‚ ‚¨¡Êã„‚¹ÇÉ®µ¨A C&8 B,!HèR8ã‚#ÿª.K,U @–A;#²:t‚ ÷‰‹RÖ­*)Ç 1xˆ BCî«®ZÔEÐÊp@„N:A ‹É‘ÂÝâíSØBq< ‡œqJ‚!1(q —qèI¸ ZHÈ<‹E Ç«ˆˆAîZÈL±Â ‘Áw˜rq(uQB)G–B‘‡Hk Od}Þ!µ´B„¡ÂE- Ah±ÁE¦rÖ¢J q(qA8dqB;á#W4e„¸B SºEŽB!!IÓÌ®%QØ) Dp ¼R–8DyïÙÞ±ÙFFòm4]N8 „ã‰C–;âSŠ‹#¤ÿò©ê§fp‹d|!!(t§° à‚ûïþò§ú™‰b¤qÂJÂÒÅ‘ÑtˆkÿÿÓÿI¤(*ÅH-ĈœsŽ!•éþÿ×ññ8‹¦YNB’H"‡ÙrF‚#êd ^ë–?ÿÿÉbá8tŠJ‘ÚÙ]ÚgfqR18ß %ÛÌÅ=™æyÔe3ÍÄ!©™Ï'e#_ÿ!3LR8â#à·‚ÂN?¼Š=¶?馚i§aSÓ< ÏÆ Ȉüg¹r(fyyWÙ¢ñaÚ0âB=")#ëÿþ¬.ÞŸÒi¡¡¦žž·v±a4Â<  røAaÔl3’9#ˆ'©0rìêÈÒ²Z”8@„ „N?‰C–;_ÿ—¢Ú ú//z.Ú.Ü$Hz&퇢câ‘nÿ´ôý=U4)Å„h3áâA‚Lv|d2:X¢œ!ÄáÁ>H|JßÿÐâ=¿}U' ôA7O ƒp¨>«%xôN’$;xÓM>ì&»L  ÂDµ Ò8â"©‚‚+ÿüÈÏ(ÿ¥wÖãÖôì'éºVÝBt°ËôúPƒ†_7Q;Ë¿%^eÛ“w#}§é¦†B‚@‚ÄãƒöL|D¡åhS™•?]Ó¤ß éÒtxMÉ[—t^4]„‰ÞN²¬ª±!  Å#Ž´ïO ¡h4ðƒ<Â ó „ ü~/0ˆN"˜;†lfƒÏæc#dDŒy™Ù0µûþþ ºë…÷ûÿ¯U¾ºM%õãí]p&éÒzm&åäDŽ¡—®—D á"Ë¢òz§§zz§Ÿk¡4-4ôÓA„Aè::Fà@ÉË7‹‘@Èì¤ÙXhíñÚj\x/ðÈé0_ZmÕWWÂůÿýÿºXûÓtôé1!ŠEBþ]ï—v¤áÉY4]½·#v‰ÀHùv‰ýzqh=$ÓM<'ña bÂAÿÿï _…ãàûÿ¼þÿµ_ïú×­\Qc„ŠpÈì2 jqÓ]S°H'¨O†ºxOO7 ÐAþjO0Ró%dwD㤉ÃD≻Dá÷úö’°»~ó>½½ÿ ôù‡Óõáxü®3ü ÿä˜ÿu ªBFsŽ!ÙnBËÊ.¸ýÓøë×N— ¦ý'®’n«„J›„Ý©ô^`ù+ÉǓ̼Rñƒ4–—U}”:Ð-~‘+þn¿ÿ…µõëOö ïÆëí,X”>‚HW„ˆOuûõý7ýíÿÿÿôÖ7ªN׋OíÈ^´õ¥ÖýŽ£ŒGAËÔ/—¬7î¿ú%ðˆßßþzúø[ÿýA%.„›Š#÷÷ÿÿû¯^ôë×þßë×Cõÿï÷í>Qþëëÿ¯¬ÿÿµ;( ÛO«í{[?k¹”-Úö÷úÿ×ÿß^×õÂV¾øœLJ#©p8Š ¶¡¾X7_­¯þû¯ÿú#}êà ëUÿ¯á°Ö°¶mmmxk ê·ú]ws?ýí³5ù幟ôÿü·úÞ(J „E±8â‘c°öm~ÿv*^¿×b¿ÿÐ.H~‰D6ˆãÿÿ¾ÚH“áwŠ}ŠcØØãØû ë¶½…îÓû[ §ú}§­­¤Ùû\_oÔ–$‘ÇnPêÁbPì7ÿé?ÿ¥ÿþ—O,P'  UÉ•ÿÿãA9Ùe§a{LŠ;wiöÅnüS#îÅ7ÆÚL0¿ÚÚM¯ÚÚë!Òÿ: ÊEŽ>aÐA @„o÷û÷ë ÕëÒýÿë﬽ÿÿúAo 4Ó „ÕN ‘¿kiëÚﺃݎ+ø¦8þ)†ŽÖÒmFBPàb–!‚ I*èÍ~gÿýn‹¯Ë×ýU_Jõÿÿ¥XÄDDDD„D0„4/Mœ2OÜ5»#{#ýÚ}ê*Ûb˜ã A&s*qÎ9C‰!ÞƒôÚ}æÚë"Ìï¿XÚÿ§·š/úÿ÷]ybœì(Hˆˆˆˆˆˆ0AÄ0„BM4á„Âd£[0é¦E›M;HãÐA Ž$‡B]„žÖÛ^»Zmwd9†{Iµÿû_í}´õ*ï]³ñ»þýÿPœDDDDHÁa4‹¦ƒ#Q’D‡ÄÃû#¶=Š`â¿cØ­n+ØacaþÚ_à ·amS[ Ú¯þ¿ÈS Q!ÜDDi±E2ñ)r†`íœqhãˆMma¯Ø[_m{§ìŽÅ~ÇìTl0±ìWõ°×øqÁ_!"Pæ¡!SÚ Âv[MmS¢xÚ­¦EI>½¯vE¶Ó±MÿÿÓn—µ;QH „BgR1Æ‚ Ž"""" £ˆa FŒE¦MSM4ÓA’{Lôÿpÿ¦È£éñBq2Ç8á$‡Ä ±ÚŽâ#Xˆˆˆˆˆˆaˆ`„DD2à&ši6O}ÆB"¥qƈÇ!´Ž=-oqa„”9c„DL;”8 BZF C kí¬‡ÁHDù AìqnÓÅCX¨‰Ùjˆ”9Ç(qG馢šŠ8úV‘ÜÃÙ‡,r‡Hî„A„ÐaX„Š±Â „´ ”>!ñÐÛ/E!GÓ‰Cˆ „c„Hã‚%é‰Ç ŽÈù™in‚ì[£ŽÈîB” å­¢A*Â,sŽâPâ)ÂÄ2戭‰q÷/±g A—‘N' x.;D‡’ ƒÒŠ@twH$(1"Ž:îM–(±´‚ìàÀäÑ჉‡HøL™Ç"•ƒ¦Pàˆò!VãˆÙcˆAcþ¿•X’D ;ZB… ‚ ¹ìI8†éa~T¦Tgj  £¹Ç”>Â,q‡@ƒ0— êÿ*-<ÉãT‚AID U²8Èùˆì‹þ*?ÿž]ìPI Øœvˆ">Uzÿÿþƒì#„JbPâqÆ¥yÇb"K‚¡•Ëþ¿øê‚ ‚‡Î>”8’ߦ™ØTDãVVØtäYž‡â¬Ó$A:U/ÿÿø”8HÜq­bPåqÁ¿%·ý„Öšv©¦ƒL i‘‘øü?!åÆlfƒ3Žf fdhŠ g_ÉõÿÛ8¤‚GºBÂ~ÿÿæêiüPM5ÿ Þ„h>.Âi›0CÁ„â-Gr;$‚0ˉ¡dµÏõ„rœ …%±!8ç"?ããÿùwDíýKº'Nߦ²cºí{Tý5ÓÓB Â ä¼~4Ad™ Ó1•æúIa¬ Š‚BRH":õÿþjƒü$žp› úAù<%”^>J-"vùÑ!맬z¦C4¦ ãñøÄ<d-1c§‚Cå°…ÿûß¿¯VÕ÷úªº~† Ÿ„Ü Ü¼òñ† ]¹+%”^5—ôMÞª± îýbÅ „CE>ÚBär(œ\‰ÈÑ"‚#fuy†H2’ Ÿÿý×^¨¿MVÿk¯a}i6“ôí%pªéåå'ýè¼h»¢vÑ;p¥ÝõÞÑÇ!Â@-V[‰C˜sâqa…„ üf"qžg¬ ÐgâìdÄrD#Ë‘8ÈÙeÆNF#yä`ÊŠ2’ÌG[6¾¼=ß×ëï¯ÿÓÿßÿ§ë[IÒoï zAéá7 Ÿ]C/‰d6GdqÃKb!"+NÓ´ÓCµøÂz§¡|XL д5B ¤‚ ü]‚Áˆ5/äÁæc(@ÏÅÉB!6Vi“‘[×øÿÿüü'ÿ¥áu}ú÷ÿñI½ë”~Ÿ®XA Ý ‚QÃ8ô$ÇG¤¡¢vä£.èŽ(œ4NÛÌÿµ>ý4õôâãNÃ{L!„ÐiÅÒððuýÿÇåÅüü 'ñþ ÿêÿÿÿZ÷ÖJÔDBÄL1R‡$9c§„ðºn›„ðžžÿäï/ ]¾Já‚’·.òï%NÑ4\dnôIݧýiªw_ÃÿÿÌ=Wÿ×ü/ÿáx²ãÿºãúaÿà´Þ¿øÉeŽ‚N@ð\vÎ>“ ˆê›kÝ®¶Û„î¶šÓi[I?]V“i7MÂ{…¤„ðP›“Ê/²vÕÕŠ'm†‹¼”D0„`ßÿÂþÖëÿôJ?èÿÿ…õÿÿþ |†ú¯ä±BBDhDB kâµXã÷ÿ×½o×ÓÿÖ­Õ?ÓÒOMµtï}==7‡„ì(nÿù„¾ôû/Wè/ýÿÿDqëÿÿü0ÿ ´ÁóëüRIP“èãœqÝxMp_ ÷NµÿU~ÿ×WÿúOÝmÖ=7ô“Ótô5çjHw×ÿþ8úÿAéͯÐ/—¢ÿþ¿oý¿oÝÒB‚$á Dp[691Ä!{`¯‚ø(/_ßúêGKÿëkÿÿõõúþëZëßá¿ÿ¿_ÿÿýÿ×ãÿüÕ|“Ó膯ÿ¡(q(q G‹&8•°—…ð ¾ëëñÔGûüqÿÿ¿þ ýëï÷úR¸¿¾ÿgë3ú÷ÿÿÿªþÿ¯ÿÿÿ×Ýx;×_ìBSˆ BÈõÒGAÑvº"õ^î®aúÿÿÿÿ_ý×î ÿ_ñ°SkÓí,/¯n¿Ng__¯ÿïÿÿºWßïoéxn8ÿô‚8á%B©ƒˆ „2?è>~‰å¿Zºº^¿ÿÿí¯õÿú«ÿÿ°ÿIß $à k¶“ ,5ßµ®ÿ_û þgZ›~»f}}úæ‹ÿµÌÿÿÿaÓ8@¼˜ârøWð¿KA~ßñû/L±_¯rVQ€«ŠÿõÿD¢éíõ×·ýwb˜¦>6)Šúb¾¾?û û -¯Ø^×ý-[OÔåÙûÛ½}÷ý ”øI;(âP莴’¯Kúëø¨÷éÿþ¡ ½{ÿ,V“ÿ ¾—[ï‘ò ÿwÞ½¦šëÿ÷ý‘ÀÿŠcøí°¿°Õ†¶µ½Ö×]r{¦¿à‚Ý'A1ö ÿï×_õ_ÿÿýè/ÿÿÒýÞ¿à„ÿ~A„É>ƒ „Öî_îÈ£ÿßðÓûÁ±_Å1±\p±Ll0“izþÇd|, „0Š ‚Ž‘OÇô¿×U×ÝßïßÝýÿëú×üûþÝña‹TMUnÉ?ki‘öFþ¿wkv*ž+Øÿ¿BB».}‹E'ikúû­ÿÿæwfëögÙŸòõûw÷_÷õúíÿÅDDDDCDDA„ ¸†¸iÚh0™'´Ó#ÐvFöŸª}ƒùCŠ Î8“ „"?ka}°¿k…úÿm{OÿõÖ¹ Oçí'Öÿé]½÷4Î-|CQÄDDDDD0BL0BA“‹†žŸ}œs8AŠ@‹ ±!IÅ1ü½RðÂ턽_Øk ~öÖ×mm,-¯ëiZ§_†©ˆˆˆˆˆ´.„rn,Ž jaÎ:JïÝ÷ÿÝö+b½äoâ˜ý‡üq]¥jÇkí­­…µ~Lj¡(pì…a¡qÌáIײQ鑽‘½úÚÚÿ÷k×ö½ŠŠâ¶£b˜¨¯‘[ŠÓ,p‘ÜB}0 „Â#â"""""!„"ÖÓ ¦aS[[µ†[ÉÛßj·§§Ý¦ŸÜìµþBPî‚;ˆÖ(#Ž7¡ÂÄP@â"RÇ ¦Î%œ*Ã$馃_…N,D-„g(pJˆAÚ DGÆ„DDDDq ùÇœ A°dp[Ùc„¹Cœv¿¤)7I‚D‘Áoˆ‚" ‹à”5êžÄB"SœqlI@´˜¬ì†Gd| ‚êHrÇ!¥TúV´PâB’Fã„ ¨ãˆ „R؆ë‰Ý @…E[Q8âB1´ág Eë¤Päc¤ B Ó ˆ®é„š´‚B#š0á{dw–™_„‹.PA IgD „ ON8@†Ò‰qk‰N( ‚ë8çN9Ü BiæÁåq|ò- $ÌŽé4%D ˜!G_TÈ”Ac(Ų9 ˂ޘBaâ&húþ{Ôì*:ÄTÎéÂBPíˆ@¸2‡$;#‘#¡÷¬Þª™—$'(tœ!á$ˆ„S‘ˆøÍ3PF¬ÌüìtбÎ8Ža߯?¯ÿ_ÿ ºü*}‚¦åå×AáAB'Ëú'yw—y+k"ŽîBB«ŠTý©ñiꆃBÐgà˜AùxŸ„‰1Ò!!ˈ8‚#ßÿÿÿÄ‹"ßÚ÷§Iþšêšz߄ݩ뗘N‹È0A‚o“ÇZ'mn¥Ý€‘7úwªÚz§Õ¬JDBG’R‚0Ëy™è˜?Êy¸‡Ud[ÿÿý¯½Þ=cÕúê#u¤ôé7µ­pºÒl2ý: è?'¶ú/DáÉCDÝÅ"C¿ö”9 ;¤ÙÇ,v\ˆêÓh4ÏÇàƒð@Â~.Â!^0ƒ)ã™q‚@Èæb1 ‡:r><¹’ ¨d3óFJøÿÿÞ½pµKÿ»ÿõÿ¿·ZO^¿¡ë§Öºn ðPAûo%‹ˆ‚"ˆ”8í5 ª§úq|XAè]¦‡…M4ÐvœC0A„„øÃEóAdË‘8È21œÌó1æàD æ9Û‹ÿï¨/‚õúÃýþ¿º¯ñWqéþº{­éééÒþµ‘c”9Ý#F±Ç% †²nîéwî‰ë×½5è/ÚvŸ§… ÆœZ SAü]ÿÿÿ˜wAzÿ†f}/ïÿÞ¿ð¿®êºÿWýD „DㄉÞÄBaËã‚/‘út›—”ÿA÷ :2|NòíòW ˜á"w—aVÈŽôJ5%Mè›´H§jŸ¯ÈAêvZÿÿú¾µ…ïø4Âÿüuºýu‚ü?ûºÿ­v—ÛÛ#Ÿ Ž! /MÓ¤ûoéÓpžžŸ­Æ›IáP`¾a‚ =ÐAáý˜H¼ÂaICDá¢wô^?w¤ÿ÷ÿߨD¯òQÿÛÑ÷ÿ_ºÿü-«øÿãøÔ½QC„Î9C–8©Ã8îPâCëë^¾Ö›ý/êÕúê¿«Ýw~´¼R¿ÛªnaSÓtÿOᛪ‰;ÿÿ/NüU~ò˶^ºÿúÿþL?}Õ×ý ¿ãd|/‡ÇC”â—§W­o_ÿö«û÷Õ믺§^½ýþº^ºÒt¿kþéÿÿýh/Òúü60¿ßå×Ûÿúà¶Pßõ}ÿø_zA8 MaÄã‚*ÿ¿Žý_÷ÿ_ÿ×ÿûû¿ÿ­¿§ýüßßÿ_¿ÿÿøt¿ÿëþ夠¸ oùuê+úÑzµ‹ˆ‰O`A ±]ÿüÃê=KøÿâßKý~½¿õ¾ºõßüýiÿþ¹¢µßþ¾ÿýøõÿTºoÿÞ^¾]X/¾‘c„HÜàŠ‡Âaþëkïûýýÿ¶¿ÿ¿üuø/÷ÿÿÝ´ý¯_µÿÍ3‹ÿoû÷ÿÿÐOþÆ‚ÿÒý¾H“„BRPдB%ÿõÿÿÿÿé=}°×úß÷×ð¿½Zÿïí[ Ö¿¯^Ú ×_ÿ³ÿö¿™ÎhŸå“úú.ýÖ¿Š„……é„é ÿ,˜®¥ëÿÿ“°¿éýþƒ×ÿÿúÿ}¥ÿø66?cö?¾[I°¾Úû§õ×¶¶Ÿ¬Íÿ¶gµŽh¿}zv!hã„ ˜X¥Õúë÷cÿÿî‡þ]köëúùcm›_/_×õþ‰_ýXeÇÿ®Ø]ÿ"½ŠcޏýŠíᄾҵì,‡ö©ÿkÈC´þÌÿþ‚‚  ‚‡¢qA>ÿÿÿªþÿú]ñúßàÿþ½|µá½1Qi÷Ý É=Ú þÈ£ÿÚiýÿàøýŠc‘ÀØpÂ_»aiƒ°¿iöùLJ‚±"]o~›ÿßêÿôMÁ/»×þßþÿßéÆQ ˆˆˆˆ`„D4Ði¦J;²(ÿamÕnÓ Ý0űOlW±[í—!eÖ·ºÙú¼Ï×oÿÌÿüÓ¡ëízöûÿ¿ÿÿÿèb""""""!¡k™Â馚d¢‰å¯ö´Úö¿ÚNS–ý¤-ÃJÂM­®í§ý¤¿¶ŸöÚÈYï¯ÿÏÇ[ÌÿlÍz_ù¢~ú×Üì)F± !ÃDD0²‰ö×µ²7ÿC#¹C–9¯H|SlSñ_ØW¿´¿á…`ßݰ“ß·Ý6Ÿéíÿí§k­«þ×±jƒ" †ˆì㈠‡eðŽ=J¶ý¯ÃȯØÿ‘`S~ÈûÁüpÂÅ{´¿ì-®¶ ÷ü´—oQñ¡† #Ž) †GpA ß3„Âdc¦4Öû[û_íúéûö˜¦¾+càýŠb˜Øþ ¤ÁbIàÁ$¯PFZ8à QˆAeìDê„A‚ˆ†´Ð†µM¥ÿ -ü4ÓUA­­¿iöÿÎÊÃf¶3°!cJBqÅD"<í"‡ ‚¡ƒb$ëhDDˆaa=tÓ$öIÓ' ßjÓL*a• ™Èáä¨!ÃOñHDDDDDGì*ˆ†¨5EQ"'hX];K´¸ˆ2‡B0æ㑎$Dz(ãcc"CÒˆÄ „J ™‘ùAÜÉ1ÐG&–Nɱ‚‘ÁlT!"!¡i9Cœq‡ âPáòl´ƒÒx B)9ÇJuÄtGDt"#4òÖBgd| ¥I¸¡‡!Œ>qÈQì:ð@„¡Ä¡Ä ™ÍA¢ÿË[EÄ!)Åm‘Ù;âGM @…qðâdwiKX„‘ôÂD¡ñ„ŠáØåqhìm´"! C˜p‚(p‘‡±@mtÓ;2’"|BT!ü‚ãŠÃ —ü’¤û;­ŠE!‚[!!8ñŸÃ£]©´Ì’âWèÏ´IÛ# ‡hDB#¯ÿï®d§úaJJ"qñAeBŽduÿ×ÇÆýs_³Ž,„%eŽqÆ‚ †È<³VÿÿÿA ¯äÜÈê"B(*ge;;¸¥ßÿÿ|R¯‰CˆA p‚è¡Î8”?$]ע䱞fc(Ï.A‘.Eĕd3L«´óŠÿü‡,p‚a<8ä‡HKë•;…ðšhCâÂ, Ða aÁ'žr7 Ÿ33ªÍ øÒ8ø B"xÔJ(qD~¿IzúI­ö¶˜NÓ[‹ §…L¼0C š³Ø@È1Jg˜gÆF†gš"s¨ÍLƒDuþwZaˆA;Œ1‰!Áëõñ¾”»¢vä®òQ—nJ¸rné†þŸjƒM L&š„Âj˜A¦b@ÏÁz9„!“ŠGd@ÂaS †Å$!Áb‚ ŽGïô¿T›¦é¶_„é=:O8aBpÁO‰FN<&©v«é§kéøN= CA¡i¸A„JD29ó`¶âMÿÿàˆb@º]×__tÝ:µ [Ú„è&øA›Â„òï/%yw—n¥Þ]»Ñ8ü›ïÒOãMˆŠ#è6Bã+#0ˆG—"r%ÌG_HèÈfjœÃ#}–T°Ùê_ëõ¼^Ÿûþºi´ƒ¥ð­&á<: ¿¦Ã/è Üù+rì$^YÖˆ£´Ñ‡8äq„!&8EÒ ;‹0ƒAža= ƒAŸa¡3Ñøä0@ÌFâäP2;|wÿþ¯¿ÿýuÿCþÿÓBþ!ÿIþº~´›Û a_„DîAR!cœpA Ç&>AqOý4ãÕ4ââþ.Ö,!C¿âë²è+ïý[ë ©u¨­cþ/í¥}u¥ÿ]6!œs*#ÙâÔŽ‘;mTŽ&ív‰ÆºDÇiÈÇwé×ÿþ»ˆàõÿãÿôÿ‚öºõß÷ý¿zë% ‚Èã#üã‰C˜sŽ6R¢p ¾ A7 á7 4tNÝä¯òW ‰eQ‡¿ÿÿÃÿÿü.ñ—øZƒ½ÿëÿÕʼn‡)ÂN:AØbB!×ôû¤õÕíÓÂzþ¶¶®´ònäô.kÿ¯I¿ÿþº ®¿à» /ëÿ¯úÿþ¤±A0…„#Üq0áï_¤øW]{ÓOõ«§®±ÿå˜|˜7ÿü/ôJÿOÿ$ý†}×ï­ûÿñá18âF>"aù«þûÂÖ¾ßÿëú5ôÛýôáÿÿ—¯îòÂ'ÃhûÿÿÚ_ÿâ,ã”9LJ$=¦"a ýG‚òNì&˜"‡ÿÿÿý7ûõÿý½ëÿÿKÿþƒp¿õ¿ÿcÿÿ‹A‡È â#_ÿ ½☨ÿ¶)Ž+ãø=vý,DDDE„œq&8Dz6"!æÖÓO^îÕ{ýïÞY~õënPá#Y1ÈAÄ": ;´Ði„8õNÂjXéêEûOÒ' «º°ÂQ(p‰Ü-°‚Ž'(ˆˆˆˆˆˆ“£_ˆˆ0B"â"‚4bq¦3$ˆº` N‘ÇÈà¶HDá)!F‡!‰7‚Ô!‚Úƒ !3LD BÓiq#oØjqDã‚'}I‰Ü¸{ÃËqġġÓlA8"; ÃÐI%-PŽ ˆùh0üㄊGrÇHV!‡-mbчadp[(˜sŽ!†B¡N?„‰1Î8MâË„TËÄsA–˜Ó.ˆá(ãœrÇŽqû‰C²ÓQ¡Q–¶©ˆ‰1Ä|DL9C„…¸ÆBÈà¶HãœrÇ ¦GÈèFÎ8‘Gìw!&“c\ígBAÄv¥¦[ÓSTYÍTã”:Gl ‡–˜Ò^E#;ÊëQ؈•ç~…ŽH|N97¡ŠLÿ™kzh2†J¸äS™ˆŠ(”8‚"$2C4w)Ê D|¶_ÿÿ«]tÉbBqÄ¡Å1$8‹#¦!ÿö×ÿÄÑ0‚dp Ž cFH£ÄïFxˆ=…ÿÕ÷ÐUŠ0ç¡õ‡$8õL®7î%{Êâù‚8Èl˜yŒ×­ÿûi?ÂЉ‡[Î8A2;.ú!Ù\'z™Šœô0A„ ü]„A‚ !|f™ˆøÈoË‘#ÌéYIÿý•%$8dp[ B"Èè"‡ð¾ó°Ù,‰Mç³]yÚÈhÅ„õNÂÓTÐa,ü~8g„ž\ äcCБõ»õ¯ÿ¾%г9:ŠB#û– X6ÃÐoö·¢7­áÿ ˆÿb¶*)Žø®¶¶¶øi:é¯iz~gZ·ëÚÙûüÏßµÿÿ¼h ‚(á±"ŽXïþ¾¿¨Xlf þX7-^X:†ô dÇÈ£…ÿ¢WÿïDpÿÎÖ?íoW"ÁûÆ…GülW [ma…†“ -­…mw]mv×4ja÷úÿú ‚&8A BB¿ÿKõKÞÿ ¿†ð~´›–£ÿ þ^Ÿ@«ýÉV«kaLé‘G»°¶§þ½ŠƒŠŽ)Šcb£ØØ0±ö½¯º¶ÿõdc–8rqÿûfÿí½ÿï}»·¥ÿûé~¿õÿ°q$!ˆ`…¦„!„7Ï2Ozé…Mm8v§ø§Øö+بßÿa¬ãˆ LŽG±Cˆ÷þÙû]{üâͯ3Ï/üÑ~ÿÿMÿÿûíýØ2@‚"""""""2ì hC ÃL”&šdoi‘¾ƒ†¤W|-¯¯÷­‰CˆA äÇ!Kÿßk¯iXP'Ý„þ¶Ó7yç㟞³wÿ™ßÚZÿçïÿÜü ñe„!eVa0š Piö™÷ýÞœp ¡Ä¡ÂW÷ì0V±öÂÚÃVÂÝki0ÂíÚzöm‡ýþ¿¶~ÿÂÿïÄDDDDDD׃DD]¦Iè „ ™‘Ál”8Š#¯‘GìS¼STS#~ÇT8¨«ƒ vÆý…ý†•¯ö­¯ÚþÚ…â"",â)9Ç,tŽ8‘G²¶E÷Úi‘GôíƒM~ÓM0Úx6=ƒ}¶+ƒƒö8¯ø D$‚òÐj’qI±$9Cሆ… Âaž¦tÉD0ši§öM;Mm|Šÿkm°ÖþÓûº¡ G¡Ž8":DDA‚4"QƒN@ÂpÂw *ƒ_´(Ó[0©ÙªöÄ"Ç ƒ‚8ˆñÄDDDDDDA‚ ! ÁâLsŽBqòžËãœpD|Ž´„Dì”K…‚è¡ð‚c„ÇÁóŽaÇkĘçmtZÊ(rC¤>) ~(ÒÂGN8‹ ZÕ¢û8âqÄIa‰1Â#蔉BqÄ¡Ò,x"‡$8A I‚ŒA‡²qËZµ&åXö%Pá(Ž‹LhHA "Ž"¶Û —H?0â0ŠD ]ÓŠ(ä0>$‡aL®.¤QÄ …³Ž! ˆùÛ¦v·–ab.ƒDJ‡!H*ú¬FIñŽ9c‚Rá¤Áþv¢#>Îþ;ì¬ñ!¢C„­ƒŽ¿¾¾©ÙÚPb*sÁl–8A AòЫZ\ò®È¤¾š(q(qÄBU´ÈÇÿÿÿ_Ž4Pä âtWövˆÚ+ÿÿæCŸ³Ž-‰‡(p&™(d8ìª+FOL쩆4#4@™ˆ¶j_ÿùÄÿß&9c‚l¬Ä–×ým3²ò ˆe$Dááƒ<ÏAg˜d8 gã Ä"*ÄñA%È ˆftd­Wÿ´wéœrâ¢"‚×@«ó±«¿ÓOú¦šÅëi¦OX´A„®?Á$j"@Ìóvha2sÌIÿˆB9!Ä2÷ðCWú~T;2Ä]¯.ß蛸©ø­S´ÿM4ü  !„M0¸@Ð0ƒˆfqø yd‚?™æyò'Fã3óÒÝp‚+„ ‚ÿñÿšëù᳤p¡áh´NÚ/(¼m<”4]¹pÑ1ßÞ©§½ßwv„aB óðƒèÒHäb3"¤6Ø¢:ÿÿö»ýý7ÝSÕ7\'§Ú§ fôé=Aô^Qväã.òïZ'è›»^­?[?‹OëL Å C–=‘‡çz=uûûaÿ^ý'ªëV©èGøWM¨íþÕ: ÒznAÂy<ø`¤¯.ýÒ.Þ‰Çí?¤ä3Ž#¡Ä¡Ä!’Vi Ï3‚!Ð\fòë _ó0Ÿì=äQÞÿÿÿÛÞ¿]ýá÷»æ‹¿¼Ï߯ý[¿wñëÿÃÿÿ.¬h/˜_Ôºßä± b/Wï¿W°ÿð¿á~ø}Çë÷ï¡Çðw®ßþÃÿ@¾—¶Ÿ¯·m™ç?_÷ÿÞÝsD¿þßÿÿÿýúòö‚ â§&Ië_ÿaþøDoÿKý‡ÿÿ_úû_ëãƒÿƒöµV½¥Õ…µMm?ûÍÛgíN~gÞÚÿú_þÓI/ÿÅz&8¶"*ˆý¯ÿø×…¯è•þ°ßÖ¿þß¿°ùŸ_Þ¬;ëÁƒìW±ñ_Ø,5Žïì%ukk []uuöÒÏÙº÷_I³?ÿ¿÷ðÅIŽ#ÿÿðo¯Ð[þ‚ÿÁ¾¥éßÿŽD:ðÛ¯ÿÕ†þõiݯö˜¦)ààýŽ68á¬l0XiGö·j¶–¼5µö×ÌãüήÌÔã”;BHr‡-ìUúÿ·Ýú_ýá½}ÿýåêmx7É»7&ïöiíª˜MW†ši‘Gþì&šØ§ö*+Ž;´› µ`»a¦û§$9DzÇ2?õÿïÿÿýïÿÿû½øzÿ®\áéÿÁb" Á ÖP°A„ &úi¦"¦pÓîÖ×UÖÇÅØWØj„Š8¸¤+µÿÔßÿÿÿ¯ÿ~Ùûõÿ¿ý­/m' Õÿgk!#ˆˆˆˆˆˆ0@ ƒ0ƒ.2qjšv¹c¦EÞÿí{ìWÅU ¸âIá9q(tÓN½´» ÿkþnô›?·ù‹ó?3ÛÝöÿûÿ¯‹%LDDDDDD Ð0œC!h§a‚i Éƃ]xi­Åˆ¤¡"PáýŽ;á…E8ao†c_ìþÒ†¶¶ûKï{M´õ7/õíœ~b÷ï³ô¹,b#ˆˆˆˆˆˆˆˆamŠHUõ°{ÅH¤&+wþ/þ8¦6*cõöJ°Â§ôÚÿ¥Ýwûj=!Q ±ÊÄ¡Ì=.°Âdo >×þïþÕ4Õí»O¿·nد¤Ç¡Ž A‚ Á´-4ᦃ'¦¨2Pšü5L&šÚêØMiöº¾¶+Û¯;*WhQPˆˆˆˆˆˆˆˆˆˆŒÁЃ""! Â ¸A¦š -ßÝ­ýà b J B˜œv¸ˆˆˆˆˆˆˆˆˆ0„CB Á",u8ù1Ä¡Â#¢H."3=ôv£E$‡l¥UÓ¼NÔ!EAÇ!8ö"‚IqgGrÇ!GGL.ï–°E­"1Äî1´¢ÈAÙÑq¡I´ÜrÖ­è!Ô&8 ­5Å“[‡ÁáHŽ‹£i8‘G!3Èê „BŽ"ȃ‰!Å"NUh˜ær‡9ÏC¹C•BTÈ‹‘Ñiƒ9gBGR‡(vÁˆˆˆˆˆ•„t‹¢>GˆèŽdpÌ#ƹHˆ8IâMÊ „Ž˜º0ЈA§+¬BÚEׯ°æ·Ì®;%0;d –C/ Ž’@‹ª~vYêvWã $} C¸E!#ýÚÞšfIX‘ø„]A¡EÖÿà¿ìíàUd ìb!ÿúÿÉH,ºBHpˆüƒHæúþÇ¿a±&ÄR8á’²¥22èí&viÊåo(ÍK¿ëZ) ƒŠ#Ò #£„¤ÞþÂgzäω"ЃϊQŒÈ@ˆDòæCf¦xÉ ë^¿ˆ‘ÐÇtŽ8¤„GúHìÊʥ涽=z„Añ`ƒ3˜@ÁñLãO™æyñ“£žOä¯5ÿ„Ò.™ÇDã‚8A5[úÖU=áwéÆš}§Úzjš Ó ‚<}žœ\Èñ>FfYìЈf@™Ö&?|K¤$ ˆ„“duÖ?pUxá>‹Ç/5.2ïÈÝ¢päc»ON;õUÖý0žº¡aj0ƒ ü]‚UŒÎ0e¡2:31Q‚ãùÐ@¨ Xÿþ=Úo¦©¸IéÁ˜OA¸&K(»ÍÁ"vák¢pã×ôá¡ý§é¦šj© âÐâ ô~9ÔÄN:ù1ü4ÿÿøýŠõøôétÖuiªxOkMÁrquYvÑy…k%nNrnÑ1èícMmtíqý„PîB*¹ƒ8EH,¹’Õ‘dŒ‹éÿ­Wöô¿ýýûǧ«ôž´ƒ÷¤ôì'ªt~‚tƒpƒÍŽ ]Ñ;rW]wz’Ä‘Ñå(sŽ@Çœ¡ÂZA! 0˜N, ÏÁrAžüb ü\ˆÁIÆ3¸¸ÍŒÐa8Œ2âS™ ‰™Ô‰?‚ð믿êúë}n¾¶þ»ëqÒ¿÷õzt½é Ó º´O!—át¶R.„&&"Câ ÂñiÜ4ãÓ´õN-4ñaBi¦ &ƒA„ ‘a~.E3ÎF#Äv\ÊÓ0e"4"Ávüpÿ÷ÃÿuZë¯UJÓ¯¦éþš_hë§ÚÛð ‰}BAzhvGÁé2?%Xˆ‹·#Š.ÜÝ¢néw$;M4ë‹N“TÐiè?Tâwª|XA¡gY0ƒN»zدއÿÿ­wÿ4uþþ†º¯§üoKÂEùCˆ‚¶à‚»0é¨L'H:ON“Â}àÁPnòW—y².JÈã/-"vÑ7¢pÑ;¢îÒ.œŒz|iö·öœ"WØì?ßëØ>ž®ëÿrãæñ…î½âðZa‚ú^9‘ÖÚ8åŽB´¡„) º´¯ëjêú}'¦›§Iµi®'« ]§¦éÃpÁB›0ƒh¼|)²ÁI^]¹(ú.èœ3µ¥¯¯A¾¿ÿ ÿóÿõ¿ëZ×ÿýBì0_߬ B)DRñ8áÓ.©ÿHZǯV½èzÿ¦±út'¯~•ºëé'j­'„ÿONžƒË ÿÿ– ÿ¿¯ÿÕ«®‰Bßÿõð¼_× ÖJÑt&ˆd6'º8í8@œ?ÿ]¡ë¥ô¿ÿõzñVý+é/l_¬zêÿñIúû¿á¾ÿÿÚú±ÿøürê î¿ÿ­¿ ¢7ÿá~ĺˆAÁ†q ‚‘uüuæ‚ýà¿íÿà¿ïUßÿõ¯Wÿ×ý_ýïÿþ¿pßüUûÕh-õÿ÷–@Ÿ  _þˆãî2câHpEÔIZîá¿ÿ ÿ¯A~8?ü/ëðúÞ¿Áz·õÿïÇ®sô»3_ö¿ßÿ½ÿñýjÇÿÿÒáëÿáiâg±‘GJÅÐA ÿú#ÿþöþ ÿ«°~ÿà¾Ãë‹ÿ‡^ÕµÝ3oþÿó<òÿÿý÷ßÿ§¯¿¯ ¥ÿè.ñA‘Áz­„‚R %#ÿ×áÿÿÑ(þ_ôFÿÿØõê¾Áÿ_ì•f•ƒXim…º¿mWÛM[imz_k½™únÕ­¯æuÙŸÿþÿZä¯.¥ }h! ¥üÚþÿþ‚þYpßþ ù'_ø×÷D¢»kÿøo ß☮)޶+ø« Úý0×íj­l%ÿ¯Ú¹ù×ò}ÿïþ[¼Dâd âPò:Ò,B Uÿ~—ÿ¿¥þÿKáúƒ¿/Z _ƒ×û’aÃ#´ÖÓ_Óû±[¿ì~Ëøa[KÛJÖÖÂé®í{T¼ †$ÇBbÈú!ìêŸÿÿïë¯ðßÿ_û¾õ^½-ðßòõþ/ja†R€ƒMiý¯ØMm{†½ýŠ~¢¢½Š´˜ý×°»y+EР‚|ã‚q 'þÍgÿÿ™ýýÿú¯ºÝÿßÿ»ÿþtž"""" Áˆa……UM4Ó#{NÓ"ÞŸÚi¦ö?ØØq¥x¥#ãŒìp@™t‚ÊSûi¶Ÿëûiú÷ûfyÅÿÿ¹¢¿?i?ÿýk·ÿÿõqD„D4ÂjªXá5ì&²7í2(ÿá½>$u8â'r‡H+I$ ðH ‡ûVÒö×ý-µð¿jí…í=[ÛÍ˶“ퟭ-_'Zûš/÷³?â""+ˆˆƒA‚ ! ?A’~ÈÞ­ºGÓ‡(@›dt°éŠãý†–Çí…†·ÿØVÖ×Jë¿õ¾×Ó£mþÓýNKiÿÄDDDDD4 ˆŽ]Ä‚ˆêÚ[chŽ¿i¯ªØ¯ø¦*ýàØ¦6*6;b½†*?†¿öì*tÚß b- !ü CbAÝ Âkd£µ†¶¶EûM7ÿ»OA¦˜7ø­þ+‘¿b¾68«J ‹ds#¢>G2;P‚D‘Í2èDDDDDD0B ! !i¡š œpÐe 0šØ^„È£ü?î×»M0Âë&Ãj"#aÖÙĨ1aD0¦t!anôÝ’{A¦Eu§&Æ‘Ò)È âÚ‹@ˆè"‡‰t"8ˆˆˆˆˆ±Q .™8 BÃ@¶Â.‚|0¡"1²c–8­qIÐH%ã&Qs8A ÐA2:BXCê"_.”8H]±J‡õ-aˆFBHp‚3¦¢‘1Ê$Èé¡„œLDC#‰¢œ „&‡c‚aÈ á5vA JZÉС›TAbqÎ8Ax²Ç8êPþ"Èæ¢å¬1DB?„‹E-2ù?Iâ%ªPâHp¢:MyÄ(ã‰CöglQùn|™¦Qq(rÇ!Hãî&†G{^Ó5‚‡!a ¤(c„!ˆõ%¨È9HÕ\јÉ4O“`¬ft‡‡EÞBé<´ÕÞ“ÿP¶*e¤uȲ(ÐGÔWH!({µ!H!mÿü–zþšišEâ a!†„E¶Gq*}q뾿{×ÙEħ!(Šã‚#ábT€Ñ'׌ýÿdSĺ: ƒ/ð… êXð’ñ&IbgÏ% @ÿ×_÷Z¤ñ#¡eŽqÁ¡ qlBYx„/ÖÎÆGjÙKªžW*"@òæC,Î’þß÷â]1ÄBU´ÂE ‚ç£UùÙÿäÜÐBŽþiÄ4ÔôaI˜"qÈ2A †f¯ÿþ×öQ ¸`އ/´4SÝ×úý;:‹ ñi„Ó0ƒ3ðSvb4ŠLДÌf™‚„³Ø3Q,‰3¬J=õÿ;.Ž!bLp‚ÈúŒEg Âûkï¢í¢päc¹7ò1èïÓM5M8ÿí …Ꙉ&xA‚ fyžh<¹wÖc5~8Dcœp‚ŽËܱèãá¡Duÿý¶´›„ðƒÂÐxA°Á"VÑ8hœ4MÜ›´N(›ÿ¿UÿÓCNiÚqwþ0@Â!"\ŠÆ"ˆA Šb!!8ìºÿýý ŠziëQXWNÕtôƒ ƒÓ ÂÿÑ7¢väpû®Lv©¦Ÿ§{Ì;X´Ö, Ó A&郲÷ ޽þm×Þ„zoý_§I´´¼h~½ÒZ®‚‰Þ]´^Q8z¢pä£ßúöª¢q 8A ÇHza‰. Bˆµ : ÍBn\Lȃy™s<Ã$.ÎM"£+ Ú¨/·_Wÿã¿c×ÚétÝ?×½=>Õ¾ž›}^¤®‰Ã IEwÄYG!U&9C‚h •tðƒCvƒh3‘øü]¦Ä0˜A‚ ü]á:Á3Ì3˜Áñ࿯ÿúí½kú÷_ÿT­&Åèqôž½ÿ…p¡„ð›„!„ „6LpˆêØ „E¢ý¾‰í5ZMS»âûM4õ¤Ð´× „ÿ…öÿÿ‡ † û_÷ûÿ…¿ñ¯ë_VúºzGRÇÆÎ:BLp‚A †^¥ø Ü”eå"ì+D⨻z¬ß#|›´N$î1NãÓN²l/Dc÷`ÿÿÿ`àÁi׋ÿøú»ÿÿ¿ÿõzbPâPí"=(sŽÂÿü'«ÞŸ„Ú'”ƒ¿Pœ| &á<)»%n/2ïxAô õ ×ÿÿ¶Ã]ý_ëÿúÁX6×÷ÿÿÿ¡(p‚‡r‡Ò”9Ç+:¯éºÇ«WÖéêûéê­&éÚn±§…¥i7Z}/Ãßÿò$.› ¢WýëÿúÿÕ†Áÿÿ½|ÅÑSP’B!C‚#õì …' Cúÿý~û¯ýˆô´õí}è¹ü/ÃÿóU–ƒh/ûÿ“¢?ÿèŽ,6ÿÿ_ÿÿ!o¤HqŠ0åÚX …³*¯ßÁëëßÖ¿ý ´ýý 7]7Íûÿ÷áÃ×þ¿ÐõÞ²õè †ÿýê?ÿ¬B²> (p‚Þ: aÝþ Õükû¯ÿÇ‚Ô?¯ÿ®ÚzÝoýÙžÛo_ì{ÿÿ÷u‡þÿùuÊÚ ‡¹C„GHPÙrA/úü-®¿õóëÿð¼ú¡ßû[TÔåßëþgZyžyz®½ÿïúXvÿßëëùzÈZÛ. áJ¢‡ÿþ‰GÛ_ÿµÿÿÂì?ÿûí„¡…µ†—ì5ýµ}´ÐtrÛ]ÿµs?ÿóEúïÿ­?Þ¿ˆ§8åqËvG2=h§Ä¡Â莿ÿAlS¢s ý÷_ÿÑ+á¿ÿ®Ò±LlSìTÁ…a„¡„­ml/ím­§ïûiØKS–LçÞ¿ÿ¿ñ‘ðŠq²‡ ¤C¿¿ëI.‡ïê?þ`˜^ ÿòÆžÇi‘GÕ?µ~ÅE1±Å1ÿí…`Â_uö½µO´µm0Þ«Ìïó;fBFŒ9ÇG߆\‚ …_¯¥Ò Ö:ÿý/ÿúÚ† 瀃W´Ó¾ÓM4ÿïÇÁú±Lq±Á­…†—×½» oÒB!"ç§C‡`‚ —_ÿú.¢õî¿ÿý¹¢þú÷ (ˆˆŽ" hD Âa0ƒ2qöºdQá§ÿvÚŠcb·ÿø¦þ^Ë‘tGl˜î"Lz8âPâCÛKþû3ïÿ3í?ý~Ìþñ¸ˆˆˆˆˆ !a»ôÂdžÈÞÐiÚÿkðÔ±[‡ EùÜãPâúûaYä,öž¶“Uÿ¶®5]ÿ­™æï&É!mDDDDDD0A„ÉêŠÖÓ[_MeMJJDP@º +A:EŽqÂ#ûl6+ã¶a„˜aa¯ýü5ma…î¬%í«anÕo¤"#B"" &„C ¡` Ç0åXï`‚œ¡ñ aÂðpÚ÷´ö*0Åoò+ö)ŠcØãø¨Òе¹\¤U@A0K„”;ø@ƒI„„°„">G^í{%NÜöƒ#}?ïíSõU´Óx Èá#U‡!Û`”\Rbö‘O„¥`„HB"( t6 † ¦švš  œh5,uᦫV²¹ÑtÄRAa5ˆGz ^‚I B#½b"""""""8ˆƒ!"ˆºð¨ECŠ  0‚¡ö6A{<‹ûñl5DC#á ‰C‚#è O¦ÐA &6ÒêŠsB!…ñmz!] ‹ìS8„‰Ü¡ÂQ ‚‹fr‡Ý]4סÄáÒ†x  ÄB £†ƒ «,p@„C ÒÐ#ŽÐ‰‡¤ÂDt"8¤XçDa÷„G@Î8 †Ò!œ}£qÁáiaˆaX‚#Õ„”8„EAÔ3qÂqâ”8¤gÒP‚…wÔµ“¢}‰C¤qð¢:Pá ˆè$Êp‚a”E$ZA8 QiøØ†Ü ´*"L²è B'‚8àˆøA!‘Ü0ÈãˆAˆ …'âÐ XRÖP¥ŽBqÒ)þ#] ¬B(qdv†(ã„pÐA8EÕ„‚#›]ÐvA†]KXB.¢% ˆâ$! –±[”8A”<Ž“/$H ž!0å8A ÇI:!a ²ª‡ „Èú„‰7ˆôµ“£j*!г·¨(Êp‚3¤!ÊNqÄ¡Å&A A„'paÚA' „¡Ò D®¶‚eâ>¶S"¢+躈°I¶ˆèº ‚h O:nYáDùtGEÑ.D|„’g¡ÁH \D®J¢’@ˆé v‘’ÚyhD|ú/žEòñIŽqëœE‘Ñt‚,h „º–SLŽ‹åȑёðœB"$ÜDRA ÜqD B‘Ða§ D#£%´Ü²ˆDèÛ/2;# A"%""Hp‚eÐBqÄòc¢>GAÊN"‘ÇÂS:ä¥9J!!¦GÁ8A È‘2‡òÈR‹£ùDt]òìŽËÊGˆï§ÈàA#ŒŽŽhE—DqHá°„"²:öFㄤ½ˆªeÐ*!@‚ŠQ Ó–B2>c.dxº$Ç!‚8ç „ã˜rCŠAÈáHè”9 ·,ã’ÜpALsŽÔ BPí•ErTÔ¡ÂVË¢:,…)’G… MÅÄo#ä|ÆGÈâ‘ÐB""$‡8âLr‚‡‡Â¶Ë Šp9n‚<.%!ÅŽ6 éâ’ u’”v‚¡Á–ADL.B3%$] Œ›,£®mÑ|‘Ù é1Ç„DDã‰p‚Èá°Ž`x »qHDDDE‘Ñ‘ÇDua<›˜t‚ XHb ·Ã#ätYA:±™ ‚hÂARlDt]ËæÜ›˜sŽ"B""a”9±È.8‘G ƒ‰ÇHÎPá$t˜ ¢"""î1Hb!ÒBØV"CɲR.˜B’AqB4L//ɲ|"1ÄDDDDH â‘CˆA q ƒ‰7) ;¤S‚¶Èùކ&GÈàBLã–8Š”8ACŠ㈠†—G1A8œpÌŠ‘0…DF±N¹‡!!c„/D|ŽŽ@††."#©q‚(pþ%!eÑ]aDîÐd|DŽœìA"Pá!lü(炸ä!ˆAˆˆ‰‡(sŽ$‡V] ”;#™Ã#¹NSŒ›%"è „ ™ö A9!ÚH#A ¼]AR,rÇ,rC‰1ÓSˆ‘GQ!´9NPä(ሗLäB &ˆé „0‹ ‚aL @’E)"øAFJQ}Fê)Äâ!#Ž$QË „p1&9!É%EqÈ-8ÙcˆDt1(|BÄ … Âdt"BÈþÒ! Ž˜ˆˆˆ¸ADã‚"¡Âˆ‰CˆˆA Ç(s”8‰Cˆ‰‡)è8įD„C#²>EÔ ­¤JM‰Q„!!„4¹Ç‚)û# !(p@„DN=‘ ㈉C‰C„G…–9n"@ž]T]v]a"úHã‹‚R$,N: †ÙtJëº.‚ÐA B(Ž…(ÐI¡dq£&™ŒŽŒâEƒSŽA´rq(q ®B(މº„‚RH Š Cgn –1&¹!@bPô"(‚#j"­ 7Ç Ç!Ç ¦9‘Ä{(» Pâ‚ޏH¡Ááé ‚2$ˆæäš0¢:/ɹVB8 ]<¡Äƒhá.$Ç(qeÀ¡Œa«£Ž)2ºÚ„†‹ EÑ6(AÂIØ<Ž‚&9¡Šg†¸â$Ç!h„Iɹ5hN8A¨Dt%ÑtÄ¡Ä „jM„ÐA0†ÐAˆŒ‘Æ]D|É‹ qDº(”8‘@„‚¸ä â$ ÜlA Çh BÊëHE%ËÔMªEÑt}¤! lGaq†PâBŽ"Lp‚CäÇqdÝBË BPçqŒ, „¨p š ‘ÐQ:TŽ8¶­l„(âaÄDFŠÊaÂ6Â,p¢ÂÄXH$˜@‹£, ZFÈǦn8ˆ‰w(t1ÐG N!es$„§hÜpåÁU$ØQ(rÇlBTò ŽXù!Èr9¡Ècˆ’MÀÓHE„!‘ÙË Ã#´B”Ž ´AA$ ÄB%"D‘Ã$4Å’ ˜! #!¬¢èº9Ì"è¾yG²øA ‚Á,¬Èb Hº(FÑtGÌd|›d|âè½Kà‚açQ‹£|ŽfÑt]7æãˆA ÄH £R¡Èˆ X‰C Q ¨â6Œ#R#¢è˜F2:.ˆâ›‹³|ŽE̼Gpd|‘âè¾^.‚ ÔÅ HºrúAHè †#EF ÈèÈè¸9#äp pqaˆˆ„ 鬧´J,! ¾GÆ8b$Çdp\޲8R8¤pXˆØA*"‰^ˆˆˆˆˆˆ8´!‚ab‚¡ˆ„‚A‡°Ëô&"4lî$Á ì·6ÈàxeÃc(wÈá†\ˆàxx‹ª!""EN8ÓãŠDDÝBG‘ÌȎȰ Â(p‚™}"ô)ˆˆ‹;APₜt*E!(qAo,q‡&9Ç ²;#†r:.ˆùp× ‚Hã‚B#˜DĘâ""""â[‰‡Ž‘ ‘Ž#†™"‡eà í"cƒˆˆA ã–9C–9CœqëmÃ#²>¤,Æ„¡Äã`vy1¶G i$‚k  xÇÁ$°@…«!¦;&àÒB”åxˆœx£ŽaÐA."‡Ç±~$ ドC£Ó†¨âPâ".PîqÙ3Hâ‘ÖˆáR„qÈ.8hÄ …„ $tÚˆqØDcÂÑCœt„˜á$3(q ÕAd2Ç$:b'v(ã™í‘ôqÞ‚E"‡l\ CƒFHw8âC 5G·a$4B"% !dpØGÂhù㋈@…XŠQ×§ƒ!±(zdpÈAÄkˆ‰rrÇHrcˆAA‰1ÈAÈAÄAQ›¨M#½ÑCÈ!ÈAávGApF‚ ôBDÝV‚ ˆ’HeŽ!ÈãHh]ˆB!%!(t%H‚äºA mCP¸‰Á¬v¢Cˆ‘GcÓƒqÄáGA@åC8á$‡+ÙpnGG FLp‚`’ÂG!GÝq8Æ!)B#á">ˆC©ÊR GÃ.>‘œ,DD!(q!°tGLlZu¿ä 0š@‚RÒGHJÕ.>B޹܆Øä4Ç !$‡)ð‚7¡‘È&Mh†ä á#!#Ž,CÓ¡!0à”9c°„Š8’¡ÄD!³Ž! !ÄEÑYâ4 @ðÌ":DAEm'dÇ@„!Ä‚‡áÇ!¡óD˜á'Äæƒ`äAÈ cÆá ˆæGbGâ-ŒFPú,sŽAcâ4qÄ¡Èl¡È* R! Ð8dÜšEXâÈì!ЇdpÈt¢‘NBHŽ‘ €ƒ´ÉB'EІñ0â‘DZ8â"-Ø8AËAÑ7„a%Xà‚D|Ž‘‡®$Ç8är˜ä4dzklŽÂׇH—EМB2œŒr ‘¢‡8âAPq(q yŽBâA p‚cœr‡Š‚Ä2ò!K!È£ˆ‰ ¡Ä‚ÔP„Õ¨”9!Ób"0E¸B>GAYN8åS”åyFÁQ±)Ä¡Ä „DN9 ã‹é28Ð ¼TJÄG²Ç‡IÒ ´8ˆx‰2œ‹F­! ŽÁ¨‘Áày—ÈŽŽƒ[.>¡!5²>GLJ‘Á`Ž8HŽ¢PâC‹‰AÈ6 Ú.HäGÄDºBqXAÄ¡ÂD˜â@Àç¡È5Ž"‘Ç Ür Öí–8‰Çp‚P„SˆÂJYtGQ ™ „D¡Ä:Hú!ÉŽ""""@ÀäܱőÀðš(â JJ&GEÓ,sŽA¨r Ž@œtC‚!"Ç8ᢈ=ÂADt"]0„ÍB8âChr!˜>A w†ÁÂTHh“ré%8„‚ bC„ˆ‰ ÁÄ{8ïnÆ™ä]1ˆˆ’µc\| „¡ì†qÄH£ˆ”9!Ë(y ÇDCˆ“GA ¡ŸdÈ c´A]Ï*;tc#ƒ‘ò:² 9 ƒŽSj㸉CäG(p‚‡Á,|Y.ˆè‘ôU‰‘È5˦8A¨ñ ‘ÐHú#³ˆºRJDpÒ„PâPâA&9C„Ž@àqñ`„D¡ñ‚`±‚GrÇǼQ‡!c„GU‘Ó $ „h"tGË‚‰î$‡!–8ã‰q …0åqõ Žò:H! `r1Äá¨=bPéqÑÃLpЈˆ†M ‰p<òÇÇdpÍ#†±Èá˜\ŽG 2n1aJ„!lDJã”9C…yô]XAÑÇØ8‘G…IPíWJ+B„0„J‹‡(rÇ!˜9ÃXzìP‹°õ&8n8\v\B8 ‘Ãoã¹ ƒ‡&8œpˆì„â#”9Ç#2;¤Â ¶ P¹áá‘ÆG#†™"r‡ #.8¥B@Àâ#bLq‚lDøˆ„„ù°Ú:.ƒ‹;‘p< „㈈”8‰C‰Ç Ç!¬8‰qÄÜr£Ñœ¡ÂH®2>ÇÍ>Å)hCh ʹC± ¨8‰C£ø‰ˆŠ„DL9N!IÓ(ä4Ç Ö9zÔãŒV Ž#ÄtG]„S°Eqâq! q@„†Ä†Ðçâ˃YpvqØL‘ÐZМq¡0èÜDDIÜÆ]A ‹¡"ŽA¬q!–8œq `rCÐ8¤C`ývÁÑ7V’BF¢š$8ÈQåÔ㉠8Õ H)t#ÌK;"ŽB$‡òC‚¨ B"aËIŽ1‰C²äï7A,E\p‚HQi”9 8ˆˆˆ …‘Ãa àÖG 2:–8A@¨ãˆá$QÈiŽ"$9 8"=!ráøÅqDtòÙâC 2Ç~,DE"WBD†@‘ˆ¤¢#†Œ±láç"â@Üp–¤4Xé̲‡!GÃÙâPá$ðôA¤qeÔEÒBPä‡!È‚㈠„ Šq \sIˆDtMÆ „ø LŽ5ˆƒÐ”8Dt±‰N$‡!¦8ˆ‰ÂŽ$‡!°p@‡†˜ãÇ!!8÷DÑÅËcÆGA‘¹Nñ&8A q xfC(qJD˜âEQzÓ&8„¬"‡ H9ã‰tGI¡Ã ˜áÐA‰ ¡Èƒn9> B‘ ƒ‰r£œp‚‡!˜;P帘qì±ÄSŽaýÁ†‡xˆˆ‘GÈh ¡RlH âE„#”8¾!&8 …ÅÈQÄA76"@ðÖA!"Ž$3ŽPâ)ɾ‰ˆA“ …r‡$9= ¡H,#«¢ CØ98ã–8”9!Ò$8P8‰ÇÈi:#¡8§ „R ¢"@ÜrC8ËJÄì‰dx¸»8ç†ÁÄD‚¨â""–,ŽEÃhXä‡@¶ˆg!‹§ ÄB0E[±8ìŽáHàÙ8á¤MôA‰Ç(qº#‘à 6#BHp¦™ JPáäÄo(rC‘Ž""Æ B( †Sˆ„(¶CŽ7@Èàjìá¬9LJ†XäÇl¨â$ ,y7Ñ)ŽÙ ƒˆâ‚Ž¢ØtPäÄ‚ÄDDDŠ8B>*(H£ˆä2Lpw‰qÈ8ˆåŽ‚(rC8qLqJáGãb¤2HrÇ&9Ç! 0ì„I$‡!¬8‰ ¸†G̛蘈 Bµd6D4Â!!’nî„Dƒ@â"$3G¢Ç-ÄJB#¤$3Žä;¤2Ö8¶V<5 …€Èàx7ʃ@ä!¶8“vGÁ°Ž ‘ÔD§8â• a‘È!q x09c˜rC’AŸËá—(}˜ÃE–9Ç Ž"@ð^Y7P˜‰1ú xj¾!‘ä"!80H28áÄC‡ dpØG 2;#†™â8!ÉŽ-ŒÚEAqõŠ9ÇÉaFVæâ‡$çî_âô„㉋@„¡É$‡!8A qM"‡ŽÄ ¢"ˆê!(Ç!SŽcÅ2êx)ÅÞqÒ(rC²8daE—š‚ÃÆ8‘GŽC 0DDDDlƒPáì!Ê x9Á”r CˆdÞµHB Ó(q´…‘ÆG €7œqdpÈ [ ²â"Epб8äÜà‡!°pˆêPâ‘NPâ¡.„à®9c$IÅ ‰C¦@ð×Î8A‡cŽÈà¶á¹ ƒˆ²àxЊ„Gä Ž0Ä-ˆœsŽ!؉‘Á2Ç!GÛC–;C ¡Ê†H3¢ƒ[ ÑÈ+ŽqÄ6,Ž0‚LÂ.£)Ù2c(rq x)ŽAaÈŽ"’ˆ8œvGä2ÃÄQ ƒÂ e8—d#»# „ãR! ›êƒCˆä3Ž@ðÛ%Š#¢i‚lã‚#ì&"%*Èà«!GŠ8âE(âÓq$±CÇGWp„ã‚äAÄD¡Ä&$‡(rÇDtGH§ £Œ¡" ÉJ/‘Ù$4лHDC‰ÒDJ!q(qŒB#¢¡Ìd|!!mã‹Î9åB@ðG!¨9q삨â2o¢ˆ‚!ö%@ðÖƒc†ÈAÄ2/""tˆ7¸†ˆ‰Ó8ðŠ! ƒ†,JR ކ¤Aó04ÜÌ(EFÈ5B- ˆ’Œ98œxEC 3ÀÙãŠ6ƒ`Ž ØAh㇜sŽ$2 q! ŽÄtG Ä$ÇC„±¦„E²‡„66nÄHdåŽ"Z‹bPà‚µW»A² c<‚AqÇ  qÅ“rDQö@ðVÚ£±xfÇ ¢œ¡ÄL8‰ GH†`åS”9Ç"F8<4‡(éF.Â8ïE8‡bLsŽ"$8å¹Cœa‰±Äâ Üpì¡Èì†@)»£"C 5Ç ~9qÌ8¸ˆ‰!Á+#ä2E¶â؇A$!‘!$,qH±Äã‰1Ã&â28)œÆG €R'H[aÁ ¸F@Ð:à’DHi""BAÇ!8òn€= Ú9 8dž–Ó tqÄŠ9ÌrÈiŽ@ðlr$ ç‚XäÊDR(vM|ŽŽC(q¶àÒD~Ó4 ‹‹$„D,ƒ(ä4Ç$9c‰IŽB""&†ÁÄdÙ`H¤Ø0‚ì Jò‡ Ö:ˆ‘G$8âEBDƒ\q(á`¤\ Àº±ÙÀл Q 1Ç(p‚(âLq8ä‡M„Ñ€3 B莋 ƒh#Ž9È딂#„HA(äc‰!È8‰!ÄDIŽC`âE"„ãœr1Ò$8‹dxŽŒq!Ý\ ˆˆ—EÑt$MI°äÎ84 㔹Y!ÂE8Ag C„FtÊq(rÇ H9`380Š„•¡Â1ª‘ÐAA‰„] FqÈ-Œr ­J‚¸­ îPePå9NIÊr1Êrt¥òñÒ$S¨A#Z§"8ˆ BPä‡(pLjº@„†„º!¨ˆ [8í‰ä 7*…Pá„—EÑÔá ¡Ë¢> IÌYtGA~'øi‘ÐA«A PI"<_ í´A š#£h ˜B]ˆè-¡Ò.Ž":.°‚†":ÃN‚\$‚h š »a ‚â­‘ÝDÎHrƒ‚"9CˆmP ˆìN!4$t'Œ·YAÒÂ#„#†@‰(Ë ‚g„‚ºAtAvÂl,Rñ‚«K! ŽÒ-Ð] ‚á)[I°‚& °I# ˆùí $t‚@»èº.‚Iìh ˜C 8A‰û_b’AÙÜ YC„“„Š¢ ã‹"‰ä#-ÂÑ}"ðH*’Ç0å@ðV²Ü§]Ñ/—Dv.C°…'‚‚8J†ô‚YC „ „m¤¤%>B0‚ ¡Þ(0˜ ¿nð‚D$!Ú„!CÚA )ÐAeÐA NC‰}B&„º+DBDT B3Ž…m„Ч&\3Hàl3j$'ˆœDêA*!V'PäÇ8å9Cœr‡HÈ #˜rKM$8‹ã‚N;#¸A4,!Ùp„y0±DN8A ÇAˆ`°DtI5)Â}DtGA oŒK ‚ $!—HtC—L/h$°„HéGDt]@‚!# ‚›6Ž Ž A"&f4 ¾,"‡)ÊIŽ@Ì qä,F[åÑí-”2ïL$ŠW´qÁRc<6Sž¢ ã† & ™"¦GÂÂR”ᤎ;”8 …$‡‡3²8ÂhNåCˆ A0…] ¦‚úLPAÐ";H ™N‚xA ‚ö‚B „;OåôÂDE @… …ì&""!$QÌ9C„)v@¶aÎ8‰ÇÄ éeˆºŠ‘ô'AÂiá&‡°…Ab6qÂH ޹„c J‚JG8ãŽ)v!‘Ú!I£Žâ)qH …„g „Šp@¸$`˜ˆHã A°ˆé  Â!p‚a„ U°„l š0‚FÂoº>]A š.‹¢tv´„DDˆˆŒŽ#&‚i¨ìŽ ÎÀÑ:.„e¹Ñt}Eä+a+„LBdq¤¡ÊtH!È/Ç8åqÎáf@ÒNS„„N9!Å"Ç)Ác¤ 0Ž>Cå8ABaË ˜Ba¡ó!„( ˜Z¶†GÂHà‚n‚Z% ‚abÂaL!HÆL!‹h A­ ‘í‚#¡.A!Ê:èBDtaÈàx5‘ÐH B";Ar1ÈqÄDXˆË|A9 \ ‚â@ž‚ÚHà—;…´NPâ$Ü©•´‚Š.Pá'!FrœD¡ð@˜BaÁéâ,"H¡ð’B,a Ae¸H ¤'ŸXA4A~BA ‚±L„ ìUBÇ„qÝBZ …ˤAeÑtGA#—AÂ>aAfä˜,¸ æžEÐa0‘‡H¡ÉŽAqóE…©nj‚DL P@œEœtZ-¦ !A‚ ¤ ’›¦qÊHfqÍ1ðÑOá¦Ga Ç aŽqÅÂF­‘ð‡eÄLŽÂßI'¡ÅqÁôqÓ».‚ „L T LU¤_jÐ ¢6Aô@­#¤† $‹®Ú&ŽB^Â:!hHúB‚ v¬Ž‚ ¨H^#†Q A\({B•ÒA F4^Å#h ‚ÒAH§{¨’BSЈ1À›.‚äy4  Ð²9ÈøBqÂN8A„l· A LºåaÐEZ Ú!‡ …í# Šp‚‚Ça4^í ‚T˜MÐ ¶$tGH ´˜M(@£lã‚H ‡ÂA‚ ‚±#¡@­$Ô$]3¸XAYAEÒÙt†ØÐH%´‚ 8ä߇(v'®ZˆùT °jA4ÐA0‚è ±³Ž †G „"C1Ïh$‹§Xh!†š8⑇A¶^ŠD‡‚)Ç]T¬D ‡Ü °ÂŽ‚8âqÉŽA ŠA{ÛH¡Î8 …‘ðAXí@žá ì$%±Ž V~]ˆ š‚ˆ¶‘|B‚Á„Yt"Êp°‚Âè …#ÚCB$H+ —@²œDC]".¢’1„‚„ °@„ŽAYN@«¶">L.#á­¥g „ã„‚D†`å D˜é؈A‘G ‚œ$"%% Â0éqÃ#´GB  ! ‚a0…"Ÿ!dtŽu¶ ûi ¨%±ž ‚ ¡@‚ÃÁA4C –MA ¡ÊAe8L¡Ál!0ˆè „B ¡!`’.„ÞGÈè Bƒ„"¨$°™Ç(sŽ@ØPAW’H›D}Ð[I °H$C„L-ZA·v µÒH ’L ¢C0p‚ˆ žè ‚ar‡8ç‘Ñ#„‹  ÆGGHD㈄ #øH§‚„î!)8AXB­ A`‚ÂÎ8A XAA Pè&qÂ!I*.‚ ÜŽ‹ù 8 L h$L$ [ ´‚uh ™C‚ÄHðH BGEÐHŽ…¢èŽCeÐPŽ82>‚.‚cbE¡,yÙ’.¥z’AøA1„ „L!P’­¥h OÃB‚ P†GÁRA ‚R‡K »–9Çd} „'ã‹A8ˆ‚ $8ÕŒ LH£ˆ„#Œ„' ™ò>ˆ„´ ´qØ!)ÂÒ.ØM ‚hC#á … J‚%H ‚ðA4@£ÂþÂa2¬é’ ÂK¤6GAˆ š!ˆ„’ø¤¡ÂS)ÒCeÓ‹+Êp‚HhâA" N&Ò*DYÊ÷—EÖXÛ …ÐA7j‚ôB‚&¬ã„ „ ‘Ç!M î4!8è"‡²>A4aÇŒ9Ç‘Æ ÄÜpA H&cœq!ŽB“#á´(rÜ …„¡‚PJ)4Â8à‚  ’”8JèXí„*@‚{IAXÂ&´ ØA ˆ ‚!áx ˜L„ ÄYN@ªÂ £@˜¡I,L a0…™ÂA2œ!/„rèº&VÇEÒ!Ú‡p‘f8’²¶TT„Œ‰t} ‚  ¦qÂ,B ¸A!A ª( ¢Ž8A0†Al§)üU‘Ð@½ZI a”9C„5Èï ! 8A„ˆH¡ÂE ‚c„äÜ „ ˜BPá! ”8IPA}‘c”â%"ÁQÇ&âôI8AÅ2;/a4L R (¤< š@Q&‹ ‚vAxA FA, ˜@„ ‚h´B!$A tA G ‚ác‰t‚ ÈAʲœ#è0¹CÈ‚˜âHq&9NVÅÊ’C ´B!ÂÄDD Li3Ž‚AÂRÂRI Â&°’A±H$¨X‹H! @†# "‡!!`²‡ ÄJ A¦GÈà„q‘Â!i#Žqô\¡ÒA¤Sˆ†µÌd|!(rCŒ39NôŠ&8 ·ÚÓH$C ˜¤Š- ‚A‚ ‚=„„L!.‡ØB I‚AÎ8Ai”á °A4a ÄB  P@œD¾Aa B"tS¢(‚1b!Êô‚"$cˆÈñC2EЈ‹8å9^¡ª ÐMBAŠA)‚.Ú!Á´C‚ Há5†Šub*  ±Aø“ „E‰P!eÀÐ ÙÌI(ì©B't"] /—GŠC—Ò—D|º6‚ …è$0A6„Ÿ R+Lã XA D‡`£hhãŒU sŽ ˆòAtLŽÐA4A2;„4Pé¤Xá AAk!) ‘Æ A2úHq‚ „,,v†&#a ‚ŽA“ã‹%8‰‡{K8â(!GÂŽ$Ç8âqÄDD „HeŽ"EH7qDâ-“D0Æ_”9PRz · Èè‰ @„DKät]Ф$tm+Â- „ à‚a°™C”é ÂHM \B\ ‚ Ar‡H*GqÃAr ‚ š[Jt‚E ‚!u!PHpà‚Þ‚D †ŠM„&Pá%Pá) C˜q±,ã‚чAq ŽÈ愘â&B±ÄP[H£‰CˆˆˆÐ98ˆ’âE"Ç&8“ ±@A A„µ#ämGÑt]p‚í"è,L¢a7—C°„wËá6ü ( ‚(a ’#úPÔPH BS¤!± &ŠB#G ˜L!&á=ŽðACÐA„ „;A%9Ç B Gà‚J ‚° I[œp‚Aq ‚Ž!!g(t‹ã„‘G@„…DN8”8”99 ã”ä âBA r(q‚‰8ŠÛ(ǃeЈA‰~"fŒ!A °˜A—@‚hBâ%ÐA0…„ʰ˜B_-´9Ç&’H T„C„\$A$ ˆø$E@˜ÐAp‚ÒarÇ&¸KŠ¡Â""’TB,§8âPôB¡ eH!) ˜Ø‹ ‚, ˆè La”9ÇhÜq!nL¸B8D ‚cˆ’H£–;.Hã‰!ÄD „Š98“㈉Ç!‡‡Ž8‡HãØrcšÃ#¢ 䈗EÑ:!Aˆ ‚"&A0„K¢øêî) –)%„O`´Ê ‚ah$A{BH ‚ÂA´‘‡†Ž:M8è ‚ V‚#èãŽLŽÐHh§ᆠ¶!¶(#ŽPå8AÑÝÁa ˆ”=ˆH B"qĘâqÃ#²>GÂ(â"%"$‚!r9†ÁÂDŠ98”8âqìDD$!‹#¢>aADDº.‡.‚BDâ—Áø‰ 0¬¾Êrœ! b!q ‚  8 QbšA~ÐHà• ?X”8@…\œB hGA~Î8„BqÔ ½„g í ˆ÷ !Ab$Ç„!°Âp‘!Ò‚GeÃ0ÀðÁˆà°GÈè‘Á¹6À¸BEDâ"-Ä8‹‚Žv&ˆhD ˜B%ÒG¥T]$] ‹£h0p‚H TL!‚Ê!P‚d|($@†ñECAÂa=’ ”{H-‘Ð&Ú'¤ÇìR!I‚!8ì”á ‚´„DB ±A$BqÚ0ç …¦¨0…!GæG¢9‘Ã(Ž r91ÈAÄ!"Ž!$QÄDŠ9 ƒ’ðÈÃ< Ç!’¹ƒ+dž‡’.‚E$„K¡ÂDt,&@ª,S#áÊ»)é¥H †!, ’øA M¾'$ì!BÈí„ÑC–8@„pA‚ h O"ŽF8i‘ð˜Ciz!‰%aÄRœ˜â"qÎ8„Ø8‘(â'HJ‘ò8 ¤p Ž „$rw Ô9Œ7ÂYcœ|DDއ.‚K ‚a t] tL‰tL/†](pA0˜„‚Ab( ‚Œ}ÖÂH$!´@¸@ƒ ‚»‡H „ㆰ‚— ‡ˆ„‚¡Êî‚ÃŽ& ¶\‚7ˆI—|îœz8ä ä6"LsŽ$QÎ:BC8â$‡(âB$ !˜â$‡(sŽ"B0Šq# @„+dw;EZ%ЄŽMaÂeXMHl%(†¡L§)Ì8A5I°’N ÂA8Apí ‚§H ‡‡pÑN'iPöF: „PAD …qõd|‚£¸AY1Æ™㈠BPâ‚‚‚(âLq$9Cˆ‰‡8â""A q(q!´8AĆqÄDÜq! xÈ,@”ǰЈduH%‰ä] © Ä!ÄDp’úADt‚A-¢¯ H „PI :&  < š„• 8ÙzMHã‚8¤ES„U´CæJqTŽ8Ah#™C„‚ PA Ú Î8”8„ˆœq‡‚! rCØ9 1È£ÓD‚Drq!"Ž$AÄE¢œ†˜â-ˆƒQ”>v¡B't}‰¤–]ü0‚ A…â( ÚIÐKÛœp‚zH!´q„EÊp66A~BÒ „B ¡A(¡ÐA ‚ @… °‚ÆÃ !‡!ŽBC8âHr±Ä¡Ä¡Ä¡Ë¡Ä „DD†Ðâ"C,r&öPå. ‚yØÄ"]B"q ¢>‹ ‚aL!|&!Ð@„,R1‘ÐK&…JH ˆè ’AÒ %Ò QÄJ¡Ává^ÂHBlN8A9Ç ,PV\ …!$ Ž8„”8„ˆˆ‰È5"%BŽ"$‡!C’ƒƒ‰C’±ÈeŽ"."@– ‹wÈDK¢èÂ&‰t] D N(">MaЄA$‚¾ Bнví£ ž!-…M°’h ‡ è"‡&Ú 8@„ „BA´ÊqŽ*Pì‰ãk˜äc‰1È8’§!Cˆ„‘G‚Cˆˆ<ŽPðŠs@ør¡Ž­È§Ab]IGÉÑ.‹£èDº!èº!!TL(¤  Œ B’ * „`‚`šA 8@›A ‚a #Ž‚(rœ ˜B‘ÇI1+eÞ­`1c´Š㈭ˆœsŽBÎ9㉠ˆœq"Ž""!$QÈAÈAÄDDIˆÐ¶qÁ…Ä"s'B"]A&hD „Ô‚DG0†‚&°]‚ ð‚hPLN:N‚ ¥m ö’@ŠB¢C„H Tï¶à‚AtA.a~Eã†A¤IÄDH£ˆ‰!ÄDH[lG":6‹¡.‹¡8‹¦‰t]ˆ—Òè ­º!e Ð ˜A EÐA  #H ‚¶ZØh#ŽXI']„‚)ÂBö´Ç0á"qÎ8ˆ”8œsŽqÈAÈlHc‰r9·! rC–9C‰qȸ쎳¡8˜B]B]Šº>‚B „.&Ä-„!Ðè4Èè%í0‚ M ‹ E8A= <V®+ÐG „E†ÂhÜr1Å#B$W!8â@ðÔI$Ü¡Ç ŽÈàˆDHd˜öPâ"aû.‹£i”œ!H¡‚Ò0‚ „,!>O„‚Ž‚QN ˜¤AqÒ^„´‚>Òh Wa †AÕ”9ÇGÂ&‚E8„ˆAÄH£]8A0˜B] šWA6‚á !!h ˜!)ÒÒA"ŽBEN8’§ Ô9 ƒ‰Á sŽ(Žƒ ÉÇ pí¬"‚÷Hº6Êð‹ @»Aaq‘ ‚DYX—B!$ˆøA ˆêp‚a tM2œ ‚ ØC„*Å„*Am"; „RGp‘Nâ( \!Ž$ÇH „Š8„’$"Lr Ž"@ð£“q¢Ÿ[†+©| ˜BB9tZ´‚, ˜MAh„ŠDm …”áŒ$à‚ ‚qaaa"!t%ØID!A>!"Ž8‰7‚c„‘\¡ÄDD‚@ñ„F Ad09vîÂ)èã•sÛBL!V‚þÐA0Té¤'¢úEБÑB7„°„ „h ˜B « „("øHZEÑð‚J! 6é8ˆ BFsŽ%‘ÇAƒ‰7&8‰‡(r cØ8Y  ôUáÐØì!‚ e„0„K ‚Pá ÅE!í I ŽÒ ÄŽ™EÊp„âè ˜B‘Œ ˆë $¡ÐA%H ‚Æ) Ò(p‚HA!£9Ç8âPâBA0„˜âqÄ BLrœDIF9H.8<7„È5¾A ÃI´Š‚Ø,ŽA@¶BN(}°‚ & „$Z&„ˆA0„â.„º.‚K¡è$M ƒi M B¬§v,¡ÐGPB'ㄜp‘‡hBYpØ%aÈ8䇎!"AhpH"8C]åxA1(wbÈ-ƒhçŒq"Ž"( °‚aÊs¦$t‚ÐI—¶°Rœ LHøA0„ „L&á$t¤‚>‚Aá¤' a"‡ ‡Ú+œq&œvGd|!HY¡(w(q0çJåŽ6‘G‡!0å@þÊ!@…F]ì!h  ðl‚ØeŽF8Aœq"Ž$QÖÐAa Î9Ç!Ô,ú.‚S¡Â„.‚ ÁР¼¾ B)‘МC—A8A0˜LÎŽÐA2‡a ‚}ˆ“„ŠE,§Ž8‚Dâ%‘ÇAœq¹Cœq ã°„D6A t8H ž†Ã bPä â‘C‘Ž‘Ç‚IXA  sŽ'a„ ÁØ»tMðÒB¤"GIFÓ?"tN„ ˜L, ˜B7A%Ó= ­">š(rœ¡ÂDJpHp@¼JĉC ‚R8ä â! wQí‘ñA% AGd2@Þ>$Üt˜t¼ „PH FÒH ‚H$%¦"Ò"‡„ Áá,C/`2Ž‚ •hºˆ ˜X؈@ƒXHºÂH-‚@ácS„¤qÒÙ‘ô!!&8“ „ „HgrCœqŽ@r‡)èoà‚ah¡ã hl"‡DŒrc¤!,H£ŠA(( ˜L!ÂyNqÂIŽqüæ!ØH$‚(pÒi è ™tBÚ,º.¶A„N"èDYÇG±‚H C¼§!¢„áˆA A!Â8ç C„‚DI¹8”:I qÈ£ˆˆ´ì!ãÈàJãbC(qa q ‚‚‚ÂCPI„ÂÇ!HÃéNo@„ „vWB Þ/l ½„)/´ÊÔêˤt}ÒApH NNS ‚‰C„„„ˆ„´Ð‰C¹C˜tˆ8âS„œrcˆ‰Çî D Ç» ¶8‰1ÂNå8A‰1Ä Ad|$$tIBE9‡èYøÎ9C„"BÜ „¨‚ œpvŠB;H @„HèCG/°TMAí‘Æ †Ä¡ö\ˆàät Ž8”â"*Lq(sÁ"ŽÀP\2”1ŒFÜH£‹#¸‰Ü§!AÐDtGÂE× ˜Q åÐAAƒ#¢:1I1°’F* é©FÑÄ&ˆ t"ŽL.‚,ã‚ ¡Aq‡qYtGÈè‘G8ãœqR‡! ®9‡,qMÅè¡ÄÜr‡!IH£‹{  áÂa{qôèºSˆƒg ˜B¹ R L¡Â,PA8A3ñNPØL¯ „A80£± QÝ¡ÄIP鈒„'ãœr‡Gd|ˆW˜â"ê@Ôc‘mÄpA2;œqÌ9ÇŽ! …»GiâPâ§ãéI„ øA¤S„;AaÂÙN +`¨º!4,¡Î:I ‘C„„G4–Â8îSˆA’ „Š9ㄈ²8ÀØlˆ;ìŽ °ØdÁÒAA0… ‚!"ŽA¸á®ÐLŽ‚GGp‚ŽCe«"yq˲ Àî6"""&BPá"Lp‚Ú  a{A A ˜r‡Ürè „â.¢!ˆˆH C&–GDt„¤‚ì&mEB`‚°£h`‚Ãè AeÐ*!HN8„‘GnA ˆ”>$\¡Î8ØŽ;dÁHp‚‡!c„¤L„ÂØB=B( AFSôL,DQcžÂÖ4ˆúA"& ˜Bf„N‚HPA‡@‚‚d|bÂÊD˜á%Xá"B""šm¨œqd|!! Pâ,„ð‚h „yÇ&*)Êp‚†AJÁ8 B&’ñHÆ‚!ÂDâ!8‚ Ü58† Šp‚h$SÖ$W & ‚&8mpî@ÔA‘ÁlHà¹.bw8â“ #á"è0˜ÐHjô‰'HbÎ8A¨@›¨@˜ð‚hŽ‚ˆžI"‡PH§ a!«d}^‚IŽ$ÇA „FÛ!’ã‰Ç8æ4Èø@ž‘Ç ”„°“¤‚Ü2‡)Êp†@Ÿá¤C Õ‘ôÚ[.¨ š¤S„‚h+èMBLqQD C8ø¦AlÇHIŽqÄ …¦GÂa ‡ õA%—A(A2>äÇÄÂ.†ÄK¤5¡TX C‘Ñ´’ ÔL¤áVáqVÂR‡KA#,#†@l#ƒs{±!’ ƒØˆAÙa¥ˆ„AMAÒ„#ƒ,¬¡Ëî]Å ¤ŠpTN ˆ šº#çÐA- ¡Apa!¡I!kqaäÀÜr,î—ˆƒm# 4A F:@œuiP1ÐA!è%ˆ”8Ai0ƒ#²>‡P=ÅáÙNPù1Ëãœq§¤qÉaÐA$L!&D¡Ì>C oˆ‚ ( C„¶‚/.‹£èL$‚$| ÈìºR$Oˆm2áÈèŽ\†Ä²œ¡ÄBDNç‚"' „JBxA²è „QNPâ‘Ç0ø ¢Œ†”i. B¼6—BGB0ÐH¡Á„@`‚Šh* "C\qq":ö%"EIŽqÄR‹A&„º!‡!(sŒ¨  ‚öœH † - ˆó)Ñt%Òa ·†Ž8ABF"3Ž$‡$8œp‚â6qÆÅ ‹á!A) …,BDº&UÝpÇ„‚A¤H*&åÐA ÄO \C ‘ð1d|ŽGÁ”ŽÐ؈²;¤qÁ‡$9c ‚8âÂ&} †Pá"Ë¢8„*ÂaBÒ Aí…A¨A0˜BBÊ$]YÇ!!a‹d a§Ç™Ž)ŠBB"Pá"qÂFGÁ‚v[ŽHŠIØ`‡†Ç[Aø‚°’q ØâqÔ,5ÜDYÇ&8“IŽB! ‚’AytC"œN:G|§ÂRˆþGA8œpÄ ˜AiZ0˜AI$’Ô\H…B x)d C8â6ÈáøBLp‚l±Ð@©0˜TÂA$L!‚h¨8ø„„Dâ¡ÐŒÃ¤ i:YÇ!L§ „D ˆ‚"8†Ù ¡¬A N:BqÁÈ!Q‚aa TŽ8A„ÐH§ÄºHú/Ì$- ØA¦‚HV ¡È£ˆìŽÐ8ŽS„”:GC#•„Ai †qÎ8ƒh ¹Cä“a tC‹¤B„C‰C„p‚k—HDHP@”6ƒ(â!¡)ØBqÎ8H5í„!„’U„–",¡ÂeZm2:@‚ A¤C„B ˆ9c< Ç+2Q¸AdQÎ8AˆA¹Ç)Â! ¾GA,ã‚N: „JuŒV CI ‚Õ„0ˆ`pA<\®¦G ´ˆøB"aÊr‡H¡ÄFÒ”â.Â! ‚a0„îEÔ¬hu„)ʧÂÝ&‚ ‘ÑHH° Ã\r¸¡Ä[ x5b ¡¦GeĘp‚ÅB!qÎ8A1„‚ „"‚ …c躩tAza BH Lv™2†¼ccb($„Y#ŒŽHà‡eÐI„i‘û]^-&G PÄAD| ‹¹PØ9 ‰Ç8âCœvGh$)U ‚å9C¤C•„Ê!ñI‚!Êrœ`!o±8çãía'8çJ$í¤B>‚)a,CÙB#0 Û¸°…—AtBÂ/I§ „˜êÓà‚¡Ç ˆáwb‚q/&á$Ç!!º œp‚‚aYtGI0¢†Cqd|!±á!&8·±a Dua î,ã´-ö@”:B"BPárœN8AX7‚ 2H…„)‡öØå9Cœt8†GDsGÐGH$Gâ*Kr‡¼E…e8ŠGDD ˜B* áè0U(x÷a 1ÂD˜åŽ"'ph)$I.Ò x| 0݉Ç8á"Lqds#²8쎂 ‰š B@ñhXúN)$aÎ8œq H±Ò!<‚¤$|$!b@ö8M[¼†ÁÄZ3„Šp‚„B"qÐAÔ@þ  ä  Üþ$Ý  äÜ;Ý0Ý8UNLV-ISRI-01Converted: Tue Sep 28 16:45:42 1993-ÆÀ'-ÆÀ'leptonica-1.70/prog/adaptmap_dark.c0000644000175000017500000001300512274202153015405 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * adaptmap_dark.c * * Demonstrates the effect of the fg threshold on adaptive mapping * and cleaning for images with dark and variable background. * * The example pages are text and image. For both, because the * background is both dark and variable, using a lower threshold * gives much better results. * * For text, cleaning the background to white after adaptively * remapping to make the background uniform is preferable. * The final cleaning step uses pixGammaTRC() where the white value * (here, 180) is set below the remapped gray value (here, 200). * * For the image, however, it is best to stop after remapping * the background. Going further and moving pixels near the * background color to white removes the details in the lighter * regions of the image. In practice, parts of a scanned page * that are image (as opposed to text) don't necessarily have * background pixels that should be white. These regions can be * protected by masks from operations, such as pixGammaTRC(), * where the white value is less than 255. */ #include "string.h" #include "allheaders.h" void GenCleans(const char *fname, l_int32 *pindex, l_int32 thresh, L_BMF *bmf); l_int32 main(int argc, char **argv) { l_int32 index; BOX *box, *box1, *box2; PIX *pix, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; PIXA *pixa; L_BMF *bmf; PROCNAME("adaptmap_dark"); bmf = bmfCreate("fonts", 10); index = 0; lept_rmdir("adapt"); lept_mkdir("adapt"); /* Using a variety of different thresholds */ GenCleans("cavalerie.29.jpg", &index, 80, bmf); GenCleans("cavalerie.29.jpg", &index, 60, bmf); GenCleans("cavalerie.29.jpg", &index, 40, bmf); GenCleans("cavalerie.11.jpg", &index, 80, bmf); GenCleans("cavalerie.11.jpg", &index, 60, bmf); GenCleans("cavalerie.11.jpg", &index, 40, bmf); lept_rmdir("adapt2"); lept_mkdir("adapt2"); convertToNUpFiles("/tmp/adapt", ".jpg", 2, 1, 500, 6, 2, NULL, "adapt2"); L_INFO("Writing to /tmp/adapt_cleaning.pdf\n", procName); convertFilesToPdf("/tmp/adapt2", ".jpg", 100, 1.0, L_JPEG_ENCODE, 75, "Adaptive cleaning", "/tmp/adapt_cleaning.pdf"); bmfDestroy(&bmf); return 0; } void GenCleans(const char *fname, l_int32 *pindex, l_int32 thresh, L_BMF *bmf) { l_int32 index, blackval, whiteval; char buf[256]; PIX *pix1, *pix2, *pix3, *pix4, *pix5; blackval = 70; whiteval = 180; index = *pindex; pix1 = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/adapt/%03d.jpg", index++); pixWrite(buf, pix1, IFF_JFIF_JPEG); pix2 = pixBackgroundNorm(pix1, NULL, NULL, 10, 15, thresh, 25, 200, 2, 1); snprintf(buf, sizeof(buf), "Norm color: fg thresh = %d", thresh); fprintf(stderr, "%s\n", buf); pix3 = pixAddSingleTextline(pix2, bmf, buf, 0x00ff0000, L_ADD_BELOW); snprintf(buf, sizeof(buf), "/tmp/adapt/%03d.jpg", index++); pixWrite(buf, pix3, IFF_JFIF_JPEG); pixDestroy(&pix3); pix3 = pixGammaTRC(NULL, pix2, 1.0, blackval, whiteval); snprintf(buf, sizeof(buf), "Clean color: fg thresh = %d", thresh); pix4 = pixAddSingleTextblock(pix3, bmf, buf, 0x00ff0000, L_ADD_BELOW, NULL); snprintf(buf, sizeof(buf), "/tmp/adapt/%03d.jpg", index++); pixWrite(buf, pix4, IFF_JFIF_JPEG); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pix2 = pixConvertRGBToGray(pix1, 0.33, 0.34, 0.33); pix3 = pixBackgroundNorm(pix2, NULL, NULL, 10, 15, thresh, 25, 200, 2, 1); pix4 = pixGammaTRC(NULL, pix3, 1.0, blackval, whiteval); snprintf(buf, sizeof(buf), "Clean gray: fg thresh = %d", thresh); pix5 = pixAddSingleTextblock(pix4, bmf, buf, 0x00ff0000, L_ADD_BELOW, NULL); snprintf(buf, sizeof(buf), "/tmp/adapt/%03d.jpg", index++); pixWrite(buf, pix5, IFF_JFIF_JPEG); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix1); *pindex = index; return; } leptonica-1.70/prog/croptest.c0000644000175000017500000002171112242433627014472 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * croptest.c */ #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" static const l_int32 mindif = 60; l_int32 GetLeftCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 h, l_int32 *pleft); l_int32 GetRightCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 h, l_int32 *pright); const char *fnames[] = {"lyra.005.jpg", "lyra.036.jpg"}; int main(int argc, char **argv) { #if 1 l_int32 i, pageno, w, h, left, right; NUMA *nar, *naro, *narl, *nart, *nai, *naio, *nait; PIX *pixs, *pixr, *pixg, *pixgi, *pixd, *pix1, *pix2; PIXA *pixa1, *pixa2; static char mainName[] = "croptest"; if (argc != 1) return ERROR_INT("syntax: croptest", mainName, 1); pixa1 = pixaCreate(2); for (i = 0; i < 2; i++) { pageno = extractNumberFromFilename(fnames[i], 5, 0); fprintf(stderr, "Page %d\n", pageno); pixs = pixRead(fnames[i]); pixr = pixRotate90(pixs, (pageno % 2) ? 1 : -1); pixg = pixConvertTo8(pixr, 0); pixGetDimensions(pixg, &w, &h, NULL); /* Get info on vertical reversal profile */ nar = pixReversalProfile(pixg, 0.8, L_VERTICAL_LINE, 0, h - 1, mindif, 1, 1); naro = numaOpen(nar, 11); gplotSimple1(naro, GPLOT_PNG, "/tmp/root1", "Reversals Opened"); narl = numaLowPassIntervals(naro, 0.1, 0.0); fprintf(stderr, "narl:"); numaWriteStream(stderr, narl); nart = numaThresholdEdges(naro, 0.1, 0.5, 0.0); fprintf(stderr, "nart:"); numaWriteStream(stderr, nart); numaDestroy(&nar); numaDestroy(&naro); /* Get info on vertical intensity profile */ pixgi = pixInvert(NULL, pixg); nai = pixAverageIntensityProfile(pixgi, 0.8, L_VERTICAL_LINE, 0, h - 1, 1, 1); naio = numaOpen(nai, 11); gplotSimple1(naio, GPLOT_PNG, "/tmp/root2", "Intensities Opened"); nait = numaThresholdEdges(naio, 0.4, 0.6, 0.0); fprintf(stderr, "nait:"); numaWriteStream(stderr, nait); numaDestroy(&nai); numaDestroy(&naio); /* Analyze profiles for left/right edges */ GetLeftCut(narl, nart, nait, w, &left); GetRightCut(narl, nart, nait, w, &right); fprintf(stderr, "left = %d, right = %d\n", left, right); /* Output visuals */ #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pixa2 = pixaCreate(3); pixSaveTiled(pixr, pixa2, 1.0, 1, 25, 32); pix1 = pixRead("/tmp/root1.png"); pix2 = pixRead("/tmp/root2.png"); pixSaveTiled(pix1, pixa2, 1.0, 1, 25, 32); pixSaveTiled(pix2, pixa2, 1.0, 0, 25, 32); pixd = pixaDisplay(pixa2, 0, 0); pixaDestroy(&pixa2); pixaAddPix(pixa1, pixd, L_INSERT); pixDisplay(pixd, 100, 100); pixDestroy(&pixs); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixgi); pixDestroy(&pix1); pixDestroy(&pix2); numaDestroy(&narl); numaDestroy(&nart); numaDestroy(&nait); } pixaConvertToPdf(pixa1, 75, 1.0, L_JPEG_ENCODE, 0, "Profiles", "/tmp/croptest.pdf"); pixaDestroy(&pixa1); return 0; } #endif #if 0 /* pixs = pixRead("lucasta-cropped.jpg"); */ Pix *pixs = pixRead("1555-7.jpg"); /* pixs = pixRead("feyn.tif"); */ int w, h, d, minrev; pixGetDimensions(pixs, &w, &h, &d); if (d == 1) minrev = 1; else minrev = 40; Numa *na = pixReversalProfile(pixs, 0.98, L_HORIZONTAL_LINE, 0, h - 1, minrev, 3, 3); gplotSimple1(na, GPLOT_X11, "/tmp/junkroot1", "Reversals"); numaDestroy(&na); na = pixAverageIntensityProfile(pixs, 0.98, L_HORIZONTAL_LINE, 0, h - 1, 1, 1); gplotSimple1(na, GPLOT_X11, "/tmp/junkroot2", "Intensities"); numaDestroy(&na); pixDestroy(&pixs); } #endif /* * Use these variable abbreviations: * * pap1: distance from left edge to the page * txt1: distance from left edge to the text * Identify pap1 by (a) 1st downward transition in intensity (nait). * (b) start of 1st lowpass interval (nail) * Identify txt1 by (a) end of 1st lowpass interval (nail) * (b) first upward transition in reversals (nart) * * pap2: distance from right edge to beginning of last upward transition, * plus some extra for safety. * txt1: distance from right edge to the text * Identify pap2 by 1st downward transition in intensity. * Identify txt2 by (a) beginning of 1st lowpass interval from bottom * (b) last downward transition in reversals from bottom */ l_int32 GetLeftCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 w, l_int32 *pleft) { l_int32 nrl, nrt, nit, start, end, sign, pap1, txt1, del; nrl = numaGetCount(narl); nrt = numaGetCount(nart); nit = numaGetCount(nait); /* Check for small max number of reversals or no edge */ numaGetSpanValues(narl, 0, NULL, &end); if (end < 20 || nrl <= 1) { *pleft = 0; return 0; } /* Where is text and page, scanning from the left? */ pap1 = 0; txt1 = 0; if (nrt >= 4) { /* beginning of first upward transition */ numaGetEdgeValues(nart, 0, &start, NULL, NULL); txt1 = start; } if (nit >= 4) { /* end of first downward trans in (inverse) intensity */ numaGetEdgeValues(nait, 0, NULL, &end, &sign); if (end < txt1 && sign == -1) pap1 = end; else pap1 = 0.5 * txt1; } del = txt1 - pap1; if (del > 20) { txt1 -= L_MIN(20, 0.5 * del); pap1 += L_MIN(20, 0.5 * del); } fprintf(stderr, "txt1 = %d, pap1 = %d\n", txt1, pap1); *pleft = pap1; return 0; } l_int32 GetRightCut(NUMA *narl, NUMA *nart, NUMA *nait, l_int32 w, l_int32 *pright) { l_int32 nrl, nrt, nit, ntrans, start, end, sign, txt2, pap2, found, trans; nrl = numaGetCount(narl); nrt = numaGetCount(nart); nit = numaGetCount(nait); /* Check for small max number of reversals or no edge */ /* Where is text and page, scanning from the right? */ ntrans = nrt / 3; if (ntrans > 1) { found = FALSE; for (trans = ntrans - 1; trans > 0; --trans) { numaGetEdgeValues(nart, trans, &start, &end, &sign); if (sign == -1) { /* end of textblock */ txt2 = end; found = TRUE; } } if (!found) { txt2 = w - 1; /* take the whole thing! */ pap2 = w - 1; } else { /* found textblock; now find right side of page */ found = FALSE; for (trans = ntrans - 1; trans > 0; --trans) { numaGetEdgeValues(nart, trans, &start, &end, &sign); if (sign == 1 && start > txt2) { pap2 = start; /* start of textblock on other page */ found = TRUE; } } if (!found) { /* no text from other page */ pap2 = w - 1; /* refine later */ } } } else { txt2 = w - 1; pap2 = w - 1; } fprintf(stderr, "txt2 = %d, pap2 = %d\n", txt2, pap2); *pright = pap2; return 0; } leptonica-1.70/prog/leptonica-license.txt0000444000175000017500000000275411707062722016625 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ leptonica-1.70/prog/logicops_reg.c0000644000175000017500000002072612240303003015266 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * logicops_reg.c * */ #include "allheaders.h" #define DISPLAY 0 int main(int argc, char **argv) { l_int32 same; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; static char mainName[] = "logicops_reg"; if (argc != 1) return ERROR_INT(" Syntax: logicops_reg", mainName, 1); pixs = pixRead("test1.png"); pixDisplayWrite(pixs, DISPLAY); /* pixInvert */ pixt1 = pixInvert(NULL, pixs); pixt2 = pixCreateTemplate(pixs); /* into pixd of same size */ pixInvert(pixt2, pixs); pixEqual(pixt1, pixt2, &same); if (!same) fprintf(stderr, "Error: pixInvert\n"); else fprintf(stderr, "Correct: pixInvert\n"); pixDisplayWrite(pixt1, DISPLAY); pixt3 = pixRead("marge.jpg"); /* into pixd of different size */ pixInvert(pixt3, pixs); pixEqual(pixt1, pixt3, &same); if (!same) fprintf(stderr, "Error: pixInvert\n"); else fprintf(stderr, "Correct: pixInvert\n"); pixDisplayWrite(pixt3, DISPLAY); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixt1 = pixOpenBrick(NULL, pixs, 1, 9); pixt2 = pixDilateBrick(NULL, pixs, 1, 9); pixDisplayWrite(pixt1, DISPLAY); pixDisplayWrite(pixt2, DISPLAY); /* pixOr */ pixt3 = pixCreateTemplate(pixs); pixOr(pixt3, pixs, pixt1); /* existing */ pixt4 = pixOr(NULL, pixs, pixt1); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixOr\n"); else fprintf(stderr, "Correct: pixOr\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt4, pixt1); pixOr(pixt4, pixt4, pixs); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixOr\n"); else fprintf(stderr, "Correct: pixOr\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixCreateTemplate(pixs); pixOr(pixt3, pixs, pixt2); /* existing */ pixt4 = pixOr(NULL, pixs, pixt2); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixOr\n"); else fprintf(stderr, "Correct: pixOr\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt4, pixt2); pixOr(pixt4, pixt4, pixs); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixOr\n"); else fprintf(stderr, "Correct: pixOr\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); /* pixAnd */ pixt3 = pixCreateTemplate(pixs); pixAnd(pixt3, pixs, pixt1); /* existing */ pixt4 = pixAnd(NULL, pixs, pixt1); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixAnd\n"); else fprintf(stderr, "Correct: pixAnd\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt3, pixt1); pixAnd(pixt3, pixt3, pixs); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixAnd\n"); else fprintf(stderr, "Correct: pixAnd\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixCreateTemplate(pixs); pixAnd(pixt3, pixs, pixt2); /* existing */ pixt4 = pixAnd(NULL, pixs, pixt2); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixAnd\n"); else fprintf(stderr, "Correct: pixAnd\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt3, pixt2); pixAnd(pixt3, pixt3, pixs); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixAnd\n"); else fprintf(stderr, "Correct: pixAnd\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); /* pixXor */ pixt3 = pixCreateTemplate(pixs); pixXor(pixt3, pixs, pixt1); /* existing */ pixt4 = pixXor(NULL, pixs, pixt1); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixXor\n"); else fprintf(stderr, "Correct: pixXor\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt3, pixt1); pixXor(pixt3, pixt3, pixs); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixXor\n"); else fprintf(stderr, "Correct: pixXor\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixCreateTemplate(pixs); pixXor(pixt3, pixs, pixt2); /* existing */ pixt4 = pixXor(NULL, pixs, pixt2); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixXor\n"); else fprintf(stderr, "Correct: pixXor\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt3, pixt2); pixXor(pixt3, pixt3, pixs); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixXor\n"); else fprintf(stderr, "Correct: pixXor\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); /* pixSubtract */ pixt3 = pixCreateTemplate(pixs); pixSubtract(pixt3, pixs, pixt1); /* existing */ pixt4 = pixSubtract(NULL, pixs, pixt1); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixSubtract\n"); else fprintf(stderr, "Correct: pixSubtract\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt4, pixt1); pixSubtract(pixt4, pixs, pixt4); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixSubtract\n"); else fprintf(stderr, "Correct: pixSubtract\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixCreateTemplate(pixs); pixSubtract(pixt3, pixs, pixt2); /* existing */ pixt4 = pixSubtract(NULL, pixs, pixt2); /* new */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixSubtract\n"); else fprintf(stderr, "Correct: pixSubtract\n"); pixDisplayWrite(pixt3, DISPLAY); pixCopy(pixt4, pixt2); pixSubtract(pixt4, pixs, pixt4); /* in-place */ pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixSubtract\n"); else fprintf(stderr, "Correct: pixSubtract\n"); pixCopy(pixt4, pixt2); pixSubtract(pixs, pixs, pixt4); /* in-place */ pixEqual(pixt3, pixs, &same); if (!same) fprintf(stderr, "Error: pixSubtract\n"); else fprintf(stderr, "Correct: pixSubtract\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt4 = pixRead("marge.jpg"); pixSubtract(pixt4, pixs, pixs); /* subtract from itself; should be empty */ pixt3 = pixCreateTemplate(pixs); pixEqual(pixt3, pixt4, &same); if (!same) fprintf(stderr, "Error: pixSubtract\n"); else fprintf(stderr, "Correct: pixSubtract\n"); pixDestroy(&pixt3); pixDestroy(&pixt4); pixSubtract(pixs, pixs, pixs); /* subtract from itself; should be empty */ pixt3 = pixCreateTemplate(pixs); pixEqual(pixt3, pixs, &same); if (!same) fprintf(stderr, "Error: pixSubtract\n"); else fprintf(stderr, "Correct: pixSubtract\n"); pixDestroy(&pixt3); pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } leptonica-1.70/prog/projection_reg.c0000644000175000017500000001633412240302631015631 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * projection_reg.c * * Tests projection stats for rows and columns. * Just for interest, a number of different tests are done. */ #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" void TestProjection(L_REGPARAMS *rp, PIX *pix); int main(int argc, char **argv) { PIX *pixs, *pixg1, *pixg2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Use for input two different images */ pixs = pixRead("projectionstats.jpg"); pixg1 = pixConvertTo8(pixs, 0); pixDestroy(&pixs); pixs = pixRead("feyn.tif"); pixg2 = pixScaleToGray4(pixs); pixDestroy(&pixs); TestProjection(rp, pixg1); TestProjection(rp, pixg2); pixDestroy(&pixg1); pixDestroy(&pixg2); return regTestCleanup(rp); } /* * Test both vertical and horizontal projections on this image. * We rotate the image by 90 degrees for the horizontal projection, * so that the two results should be identical. */ void TestProjection(L_REGPARAMS *rp, PIX *pixs) { l_int32 outline; NUMA *na1, *na2, *na3, *na4, *na5, *na6; NUMA *na7, *na8, *na9, *na10, *na11, *na12; PIX *pixd, *pixt; PIXA *pixa; outline = 2; pixColumnStats(pixs, NULL, &na1, &na3, &na5, &na7, &na9, &na11); pixd = pixRotateOrth(pixs, 1); pixRowStats(pixd, NULL, &na2, &na4, &na6, &na8, &na10, &na12); /* The png plot files are written to "/tmp/proj.0.png", etc. * These temp files are overwritten each time this * function is called. */ gplotSimple1(na1, GPLOT_PNG, "/tmp/proj.0", "Mean value"); gplotSimple1(na2, GPLOT_PNG, "/tmp/proj.1", "Mean value"); gplotSimple1(na3, GPLOT_PNG, "/tmp/proj.2", "Median value"); gplotSimple1(na4, GPLOT_PNG, "/tmp/proj.3", "Median value"); gplotSimple1(na5, GPLOT_PNG, "/tmp/proj.4", "Mode value"); gplotSimple1(na6, GPLOT_PNG, "/tmp/proj.5", "Mode value"); gplotSimple1(na7, GPLOT_PNG, "/tmp/proj.6", "Mode count"); gplotSimple1(na8, GPLOT_PNG, "/tmp/proj.7", "Mode count"); gplotSimple1(na9, GPLOT_PNG, "/tmp/proj.8", "Variance"); gplotSimple1(na10, GPLOT_PNG, "/tmp/proj.9", "Variance"); gplotSimple1(na11, GPLOT_PNG, "/tmp/proj.10", "Square Root Variance"); gplotSimple1(na12, GPLOT_PNG, "/tmp/proj.11", "Square Root Variance"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ /* Each of the 12 plot files is read into a pix and then: * (1) saved into a pixa for display * (2) saved as a golden file (generate stage) or compared * to the existing golden file (testing stage) */ pixa = pixaCreate(13); pixSaveTiledOutline(pixs, pixa, 1.0, 1, 30, outline, 32); pixt = pixRead("/tmp/proj.0.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 0 */ pixSaveTiledOutline(pixt, pixa, 1.0, 1, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.1.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 1 */ pixSaveTiledOutline(pixt, pixa, 1.0, 0, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.2.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 2 */ pixSaveTiledOutline(pixt, pixa, 1.0, 1, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.3.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 3 */ pixSaveTiledOutline(pixt, pixa, 1.0, 0, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.4.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 4 */ pixSaveTiledOutline(pixt, pixa, 1.0, 1, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.5.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 5 */ pixSaveTiledOutline(pixt, pixa, 1.0, 0, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.6.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 6 */ pixSaveTiledOutline(pixt, pixa, 1.0, 1, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.7.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 7 */ pixSaveTiledOutline(pixt, pixa, 1.0, 0, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.8.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 8 */ pixSaveTiledOutline(pixt, pixa, 1.0, 1, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.9.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 9 */ pixSaveTiledOutline(pixt, pixa, 1.0, 0, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.10.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 10 */ pixSaveTiledOutline(pixt, pixa, 1.0, 1, 30, outline, 32); pixDestroy(&pixt); pixt = pixRead("/tmp/proj.11.png"); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 11 */ pixSaveTiledOutline(pixt, pixa, 1.0, 0, 30, outline, 32); pixDestroy(&pixt); /* The pixa is composited into a pix and 'goldened'/tested */ pixt = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 12 */ pixDisplayWithTitle(pixt, 100, 0, NULL, rp->display); pixDestroy(&pixt); pixaDestroy(&pixa); /* The 12 plot files are tested in pairs for identity */ regTestCompareFiles(rp, 0, 1); regTestCompareFiles(rp, 2, 3); regTestCompareFiles(rp, 4, 5); regTestCompareFiles(rp, 6, 7); regTestCompareFiles(rp, 8, 9); regTestCompareFiles(rp, 10, 11); pixDestroy(&pixd); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); numaDestroy(&na7); numaDestroy(&na8); numaDestroy(&na9); numaDestroy(&na10); numaDestroy(&na11); numaDestroy(&na12); return; } leptonica-1.70/prog/binarize_set.c0000644000175000017500000001515012242267055015305 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binarize_set.c * * Does 5 different types of binarization for the contest. * * Method 1. Using local background normalization, followed by * a global threshold. * Method 2. Using local background normalization, followed by * Otsu on the result to get a global threshold that * can be applied to the normalized image. * Method 3. Using local background normalization with two different * thresholds. For the part of the image near the text, * a high threshold can be chosen, to render the text * fully in black. For the rest of the image, * much of which is background, use a threshold based on * the Otsu global value of the original image. * Method 4. Background normalization followed by Sauvola binarization. * Method 5. Contrast normalization followed by background normalization * and thresholding. * * The first 3 were submitted to a binarization contest associated * with ICDAR in 2009. The 4th and 5th work better for difficult * images, such as w91frag.jpg. */ #include "allheaders.h" #define ALL 1 int main(int argc, char **argv) { char *infile; l_int32 w, d, i, threshval, ival, newval; l_uint32 val; PIX *pixs, *pixg, *pixg2; PIX *pix1, *pix2; PIXA *pixa; static char mainName[] = "binarize_set"; if (argc != 2) return ERROR_INT(" Syntax: binarize_set infile", mainName, 1); infile = argv[1]; pixa = pixaCreate(5); pixs = pixRead(infile); pixGetDimensions(pixs, &w, NULL, &d); pixSaveTiled(pixs, pixa, 1.0, 1, 50, 32); pixDisplay(pixs, 100, 0); #if ALL /* 1. Standard background normalization with a global threshold. */ pixg = pixConvertTo8(pixs, 0); pix1 = pixBackgroundNorm(pixg, NULL, NULL, 10, 15, 100, 50, 255, 2, 2); pix2 = pixThresholdToBinary(pix1, 160); pixWrite("/tmp/binar1.png", pix2, IFF_PNG); pixDisplay(pix2, 100, 0); pixSaveTiled(pix2, pixa, 1.0, 1, 50, 32); pixDestroy(&pixg); pixDestroy(&pix1); pixDestroy(&pix2); #endif #if ALL /* 2. Background normalization followed by Otsu thresholding. Otsu * binarization attempts to split the image into two roughly equal * sets of pixels, and it does a very poor job when there are large * amounts of dark background. By doing a background normalization * first (to get the background near 255), we remove this problem. * Then we use a modified Otsu to estimate the best global * threshold on the normalized image. */ pixg = pixConvertTo8(pixs, 0); pix1 = pixOtsuThreshOnBackgroundNorm(pixg, NULL, 10, 15, 100, 50, 255, 2, 2, 0.10, &threshval); fprintf(stderr, "thresh val = %d\n", threshval); pixSaveTiled(pix1, pixa, 1.0, 1, 50, 32); pixWrite("/tmp/binar2.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 200); pixDestroy(&pixg); pixDestroy(&pix1); #endif #if ALL /* 3. Background normalization with Otsu threshold estimation and * masking for threshold selection. */ pixg = pixConvertTo8(pixs, 0); pix1 = pixMaskedThreshOnBackgroundNorm(pixg, NULL, 10, 15, 100, 50, 2, 2, 0.10, &threshval); fprintf(stderr, "thresh val = %d\n", threshval); pixSaveTiled(pix1, pixa, 1.0, 1, 50, 32); pixWrite("/tmp/binar3.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 400); pixDestroy(&pixg); pixDestroy(&pix1); #endif #if ALL /* 4. Background normalization followed by Sauvola binarization */ if (d == 32) pixg = pixConvertRGBToGray(pixs, 0.2, 0.7, 0.1); else pixg = pixConvertTo8(pixs, 0); pixg2 = pixContrastNorm(NULL, pixg, 20, 20, 130, 2, 2); pixSauvolaBinarizeTiled(pixg2, 25, 0.40, 1, 1, NULL, &pix1); pixSaveTiled(pix1, pixa, 1.0, 1, 50, 32); pixWrite("/tmp/binar4.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 600); pixDestroy(&pixg); pixDestroy(&pixg2); pixDestroy(&pix1); #endif #if ALL /* 5. Contrast normalization followed by background normalization, and * thresholding. */ if (d == 32) pixg = pixConvertRGBToGray(pixs, 0.2, 0.7, 0.1); else pixg = pixConvertTo8(pixs, 0); pixOtsuAdaptiveThreshold(pixg, 5000, 5000, 0, 0, 0.1, &pix1, NULL); pixGetPixel(pix1, 0, 0, &val); ival = (l_int32)val; newval = ival + (l_int32)(0.6 * (110 - ival)); fprintf(stderr, "th1 = %d, th2 = %d\n", ival, newval); pixDestroy(&pix1); pixContrastNorm(pixg, pixg, 50, 50, 130, 2, 2); pixg2 = pixBackgroundNorm(pixg, NULL, NULL, 20, 20, 70, 40, 200, 2, 2); ival = L_MIN(ival, 110); pix1 = pixThresholdToBinary(pixg2, ival); pixSaveTiled(pix1, pixa, 1.0, 1, 50, 32); pixWrite("/tmp/binar5.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 800); pixDestroy(&pixg); pixDestroy(&pixg2); pixDestroy(&pix1); #endif pix1 = pixaDisplayTiledInRows(pixa, 32, w + 100, 1.0, 0, 30, 2); pixWrite("/tmp/binar6.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/digitprep1.c0000644000175000017500000000673212242266554014710 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * digitprep1.c * * Extract barcode digits and put in a pixaa (a resource file for * readnum.c). */ #include "allheaders.h" static const l_int32 HEIGHT = 32; /* pixels */ int main(int argc, char **argv) { char buf[8]; l_int32 i, n, h; l_float32 scalefact; BOXA *boxa; PIX *pixs, *pix, *pixt1, *pixt2; PIXA *pixa, *pixas, *pixad; PIXAA *pixaa; static char mainName[] = "digitprep1"; if (argc != 1) { ERROR_INT(" Syntax: digitprep1", mainName, 1); return 1; } if ((pixs = pixRead("barcode-digits.png")) == NULL) return ERROR_INT("pixs not read", mainName, 1); /* Extract the digits and scale to HEIGHT */ boxa = pixConnComp(pixs, &pixa, 8); pixas = pixaSort(pixa, L_SORT_BY_X, L_SORT_INCREASING, NULL, L_CLONE); n = pixaGetCount(pixas); /* Move the last ("0") to the first position */ pixt1 = pixaGetPix(pixas, n - 1, L_CLONE); pixaInsertPix(pixas, 0, pixt1, NULL); pixaRemovePix(pixas, n); /* Make the output scaled pixa */ pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixt1 = pixaGetPix(pixas, i, L_CLONE); pixGetDimensions(pixt1, NULL, &h, NULL); scalefact = HEIGHT / (l_float32)h; pixt2 = pixScale(pixt1, scalefact, scalefact); if (pixGetHeight(pixt2) != 32) return ERROR_INT("height not 32!", mainName, 1); sprintf(buf, "%d", i); pixSetText(pixt2, buf); pixaAddPix(pixad, pixt2, L_INSERT); pixDestroy(&pixt1); } /* Save in a pixaa, with 1 pix in each pixa */ pixaa = pixaaCreateFromPixa(pixad, 1, L_CHOOSE_CONSECUTIVE, L_CLONE); pixaaWrite("junkdigits.pixaa", pixaa); /* Show result */ pixt1 = pixaaDisplayByPixa(pixaa, 20, 20, 1000); pixDisplay(pixt1, 100, 100); pixDestroy(&pixt1); boxaDestroy(&boxa); pixaDestroy(&pixa); pixaDestroy(&pixas); pixaDestroy(&pixad); pixaaDestroy(&pixaa); return 0; } leptonica-1.70/prog/distance_reg.c0000644000175000017500000001411212240303223015235 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * distance_reg.c * * This tests pixDistanceFunction for a variety of usage * with all 8 combinations of these parameters: * * connectivity : 4 or 8 * dest depth : 8 or 16 * boundary cond : L_BOUNDARY_BG or L_BOUNDARY_FG */ #include "allheaders.h" static void TestDistance(PIXA *pixa, PIX *pixs, l_int32 conn, l_int32 depth, l_int32 bc, L_REGPARAMS *rp); #define DEBUG 0 int main(int argc, char **argv) { l_int32 i, j, k, index, conn, depth, bc; BOX *box; PIX *pix, *pixs, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix = pixRead("feyn.tif"); box = boxCreate(383, 338, 1480, 1050); pixs = pixClipRectangle(pix, box, NULL); regTestWritePixAndCheck(rp, pixs, IFF_PNG); /* 0 */ for (i = 0; i < 2; i++) { conn = 4 + 4 * i; for (j = 0; j < 2; j++) { depth = 8 + 8 * j; for (k = 0; k < 2; k++) { bc = k + 1; index = 4 * i + 2 * j + k; fprintf(stderr, "Set %d\n", index); if (DEBUG) { fprintf(stderr, "%d: conn = %d, depth = %d, bc = %d\n", rp->index + 1, conn, depth, bc); } pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); TestDistance(pixa, pixs, conn, depth, bc, rp); pixd = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixd, 0, 0, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); } } } boxDestroy(&box); pixDestroy(&pix); pixDestroy(&pixs); return regTestCleanup(rp); } static void TestDistance(PIXA *pixa, PIX *pixs, l_int32 conn, l_int32 depth, l_int32 bc, L_REGPARAMS *rp) { PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5; /* Test the distance function and display */ pixInvert(pixs, pixs); pixt1 = pixDistanceFunction(pixs, conn, depth, bc); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* a + 1 */ pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 0); pixInvert(pixs, pixs); pixt2 = pixMaxDynamicRange(pixt1, L_LOG_SCALE); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* a + 2 */ pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Test the distance function and display with contour rendering */ pixInvert(pixs, pixs); pixt1 = pixDistanceFunction(pixs, conn, depth, bc); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* a + 3 */ pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 0); pixInvert(pixs, pixs); pixt2 = pixRenderContours(pixt1, 2, 4, 1); /* binary output */ regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* a + 4 */ pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixt3 = pixRenderContours(pixt1, 2, 4, depth); pixt4 = pixMaxDynamicRange(pixt3, L_LINEAR_SCALE); regTestWritePixAndCheck(rp, pixt4, IFF_JFIF_JPEG); /* a + 5 */ pixSaveTiled(pixt4, pixa, 1.0, 0, 20, 0); pixt5 = pixMaxDynamicRange(pixt3, L_LOG_SCALE); regTestWritePixAndCheck(rp, pixt5, IFF_JFIF_JPEG); /* a + 6 */ pixSaveTiled(pixt5, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); /* Label all pixels in each c.c. with a color equal to the * max distance of any pixel within that c.c. from the bg. * Note that we've normalized so the dynamic range extends * to 255. For the image here, each unit of distance is * represented by about 21 grayscale units. The largest * distance is 12. */ if (depth == 8) { pixt1 = pixDistanceFunction(pixs, conn, depth, bc); pixt4 = pixMaxDynamicRange(pixt1, L_LOG_SCALE); regTestWritePixAndCheck(rp, pixt4, IFF_JFIF_JPEG); /* b + 1 */ pixSaveTiled(pixt4, pixa, 1.0, 1, 20, 0); pixt2 = pixCreateTemplate(pixt1); pixSetMasked(pixt2, pixs, 255); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* b + 2 */ pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixSeedfillGray(pixt1, pixt2, 4); pixt3 = pixMaxDynamicRange(pixt1, L_LINEAR_SCALE); regTestWritePixAndCheck(rp, pixt3, IFF_JFIF_JPEG); /* b + 3 */ pixSaveTiled(pixt3, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); } return; } leptonica-1.70/prog/weasel4.11c.png0000444000175000017500000000173110565760306015121 0ustar dandan‰PNG  IHDRRI\lð!PLTEXI4²þóó󬬬ƛl SRN°d“sRS èÜâ pHYsb&2^IDATxœÖ1SÛ0`®PSºya`$ùȯ=¬“WõS æ)ñÄ‘ —Nܵ@²14néT®×Àñ+û$ÇŽlÙ!â|€ýñ¤÷ôä°AÖëË0±Ç¶ùË8—›oźÈå¨þ9Åë ¥®BÖÇô'mµèÁ›1åÐ6~Q$Á*éyzØÞàrµdW<Åxðüø;Z-%ïÆ”Êλb¥ô?îÑpÀ9¿i’U÷=4@å-†##TàñÏùĆ<‰Ú…›’R¥ý¡ƒY@ùy«µ”¥T]ƒxçÎÍùݘÖIDzø0ÔLÉK#¦uur9nÛ²€lX@*0„Y»@©%irÀ˜ßIUP|¹Îwûé-¥XLF‹ŠueÏ”ºé¥vªøS<[ìº'–,N1?þ˜ïÁˆ 4¥yâè²£¦†Ø÷È}“$€36ÆÒyÚý»† #ÂÜùrò¤Q²>‘{° (še@À×Ë­lÖqž‰]#fdÅÄ“ñ%Iè}LüSW¬lp—µZD°•¢úýª”³tv7¢ôSŸ°Ó½Bz2°b g–âΈH×íçadíQéÀÁâu¾aB±–4”ZëìÎæ¸|x±;'ú„,P!Ãÿøf#—•Ó^3H!×ëËÿC½GHDϧÿIEND®B`‚leptonica-1.70/prog/colorseg_reg.c0000644000175000017500000000702512240303321015264 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorseg_reg.c * * This explores the space of the four parameters input for color * segmentation. Of the four, only two strongly determine the * output result: * maxdist (the maximum distance between pixels that get * clustered: 20 is very small, 180 is very large) * selsize (responsible for smoothing the result: 0 is no * smoothing (fine texture), 8 is large smoothing) * * For large selsize (>~ 6), large regions get the same color, * and there are few colors in the final result. * * The other two parameters, maxcolors and finalcolors, can be * set small (~4) or large (~20). When set large, @maxdist will * be most influential in determining the actual number of colors. */ #include "allheaders.h" static const l_int32 MaxColors[] = {4, 8, 16}; static const l_int32 FinalColors[] = {4, 8, 16}; int main(int argc, char **argv) { char namebuf[256]; l_int32 i, j, k, maxdist, maxcolors, selsize, finalcolors; PIX *pixs, *pixt, *pixd; PIXA *pixa; static char mainName[] = "colorseg_reg"; if (argc != 1) return ERROR_INT("Syntax: colorseg_reg", mainName, 1); pixs = pixRead("tetons.jpg"); for (k = 0; k < 3; k++) { maxcolors = MaxColors[k]; finalcolors = FinalColors[k]; pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 15, 32); for (i = 1; i <= 9; i++) { maxdist = 20 * i; for (j = 0; j <= 6; j++) { selsize = j; pixt = pixColorSegment(pixs, maxdist, maxcolors, selsize, finalcolors); pixSaveTiled(pixt, pixa, 1.0, j == 0 ? 1 : 0, 15, 32); pixDestroy(&pixt); } } pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); sprintf(namebuf, "/tmp/junkcolorseg%d.jpg", k); pixWrite(namebuf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); } pixDestroy(&pixs); return 0; } leptonica-1.70/prog/sudoku2.dat0000444000175000017500000000027311465606421014547 0ustar dandan# sudoku2.dat # 3 stars 0 1 0 0 6 0 0 2 4 7 0 0 0 0 3 0 0 0 5 6 0 0 9 0 3 0 0 0 5 4 1 0 0 8 7 0 0 0 0 0 0 0 0 0 0 0 8 7 0 0 9 2 4 0 0 0 5 0 3 0 0 9 8 0 0 0 8 0 0 0 0 3 8 3 0 0 7 0 0 6 0 leptonica-1.70/prog/arithtest.c0000644000175000017500000000535012242267073014637 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * arithtest.c * */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_int32 w, h; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; static char mainName[] = "arithtest"; if (argc != 2) return ERROR_INT(" Syntax: arithtest filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); /* Input a grayscale image and convert it to 16 bpp */ pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixInitAccumulate(w, h, 0); pixAccumulate(pix1, pixs, L_ARITH_ADD); pixMultConstAccumulate(pix1, 255., 0); pix2 = pixFinalAccumulate(pix1, 0, 16); l_pngSetReadStrip16To8(0); pixWrite("/tmp/pix1.png", pix2, IFF_PNG); /* Convert it back to 8 bpp, linear mapped */ pix3 = pixMaxDynamicRange(pix2, L_LINEAR_SCALE); pixWrite("/tmp/pix2.png", pix3, IFF_PNG); /* Convert it back to 8 bpp using the MSB */ pix4 = pixRead("/tmp/pix1.png"); pix5 = pixConvert16To8(pix4, 1); pixWrite("/tmp/pix3.png", pix5, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return 0; } leptonica-1.70/prog/blend3_reg.c0000640000175000017500000001767012240303423014624 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * blend3_reg.c * * 42 results: 6 input image combinations * 7 blendings */ #include "allheaders.h" #define X 140 #define Y 40 #define ALL 1 static PIX *BlendTest(const char *file1, const char *file2, l_float32 fract); int main(int argc, char **argv) { PIX *pixt, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(6); pixt = BlendTest("marge.jpg", "feyn-word.tif", 0.5); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixt, 0, 0, NULL, rp->display); pixt = BlendTest("marge.jpg", "weasel8.png", 0.3); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pixt, 0, 200, NULL, rp->display); pixt = BlendTest("marge.jpg", "weasel8.240c.png", 0.3); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 2 */ pixDisplayWithTitle(pixt, 0, 400, NULL, rp->display); pixt = BlendTest("test8.jpg", "feyn-word.tif", 0.5); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 3 */ pixDisplayWithTitle(pixt, 0, 600, NULL, rp->display); pixt = BlendTest("test8.jpg", "weasel8.png", 0.5); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 4 */ pixDisplayWithTitle(pixt, 0, 800, NULL, rp->display); pixt = BlendTest("test8.jpg", "weasel8.240c.png", 0.6); pixaAddPix(pixa, pixt, L_INSERT); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 5 */ pixDisplayWithTitle(pixt, 0, 1000, NULL, rp->display); pixd = pixaDisplayTiledInRows(pixa, 32, 1800, 1.0, 0, 20, 2); pixWrite("/tmp/blendall.jpg", pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); return regTestCleanup(rp); } static PIX * BlendTest(const char *file1, const char *file2, l_float32 fract) { l_int32 d1, d2; PIX *pixs1, *pixs2, *pix1, *pix2, *pix3, *pix4, *pix5, *pixd; PIXA *pixa; pixs1 = pixRead(file1); pixs2 = pixRead(file2); d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); pixa = pixaCreate(7); #if ALL if (d1 == 1) { pix1 = pixBlend(pixs1, pixs2, X, Y, fract); pix2 = pixBlend(pix1, pixs2, X, Y + 60, fract); pix3 = pixBlend(pix2, pixs2, X, Y + 120, fract); pix4 = pixBlend(pix3, pixs2, X, Y + 180, fract); pix5 = pixBlend(pix4, pixs2, X, Y + 240, fract); pixd = pixBlend(pix5, pixs2, X, Y + 300, fract); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } else { pix1 = pixBlend(pixs1, pixs2, X, Y, fract); pix2 = pixBlend(pix1, pixs2, X + 80, Y + 80, fract); pix3 = pixBlend(pix2, pixs2, X + 160, Y + 160, fract); pix4 = pixBlend(pix3, pixs2, X + 240, Y + 240, fract); pix5 = pixBlend(pix4, pixs2, X + 320, Y + 320, fract); pixd = pixBlend(pix5, pixs2, X + 360, Y + 360, fract); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Gray blend */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGray(NULL, pixs1, pixs2, 200, 100, fract, L_BLEND_GRAY, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 200, fract, L_BLEND_GRAY, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 260, fract, L_BLEND_GRAY, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 340, fract, L_BLEND_GRAY, 1, 0xff); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Gray blend (with inverse) */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGray(NULL, pixs1, pixs2, 200, 100, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 200, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 260, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixBlendGray(pixd, pixd, pixs2, 200, 340, fract, L_BLEND_GRAY_WITH_INVERSE, 1, 0xff); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend Gray for robustness */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGrayInverse(NULL, pixs1, pixs2, 200, 100, fract); pixBlendGrayInverse(pixd, pixd, pixs2, 200, 200, fract); pixBlendGrayInverse(pixd, pixd, pixs2, 200, 260, fract); pixBlendGrayInverse(pixd, pixd, pixs2, 200, 340, fract); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend Gray adapted */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xff, 0xff, 50); pixd = pixBlendGrayAdapt(NULL, pixs1, pixs2, 200, 100, fract, 120); pixBlendGrayAdapt(pixd, pixd, pixs2, 200, 200, fract, 120); pixBlendGrayAdapt(pixd, pixd, pixs2, 200, 260, fract, 120); pixBlendGrayAdapt(pixd, pixd, pixs2, 200, 340, fract, 120); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend color */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xffffff00, 0xffffff00, 50); pixd = pixBlendColor(NULL, pixs1, pixs2, 200, 100, fract, 1, 0xffffff00); pixBlendColor(pixd, pixd, pixs2, 200, 200, fract, 1, 0xffffff00); pixBlendColor(pixd, pixd, pixs2, 200, 260, fract, 1, 0xffffff00); pixBlendColor(pixd, pixd, pixs2, 200, 340, fract, 1, 0xffffff00); pixaAddPix(pixa, pixd, L_INSERT); #endif #if ALL /* Blend color by channel */ if (d2 >= 8) pixSnapColor(pixs2, pixs2, 0xffffff00, 0xffffff00, 50); pixd = pixBlendColorByChannel(NULL, pixs1, pixs2, 200, 100, 1.6 * fract, fract, 0.5 * fract, 1, 0xffffff00); pixBlendColorByChannel(pixd, pixd, pixs2, 200, 200, 1.2 * fract, fract, 0.2 * fract, 1, 0xffffff00); pixBlendColorByChannel(pixd, pixd, pixs2, 200, 260, 1.6 * fract, 1.8 * fract, 0.3 * fract, 1, 0xffffff00); pixBlendColorByChannel(pixd, pixd, pixs2, 200, 340, 0.4 * fract, 1.3 * fract, 1.8 * fract, 1, 0xffffff00); pixaAddPix(pixa, pixd, L_INSERT); #endif pixd = pixaDisplayTiledInRows(pixa, 32, 2500, 0.5, 0, 20, 2); pixaDestroy(&pixa); pixDestroy(&pixs1); pixDestroy(&pixs2); return pixd; } leptonica-1.70/prog/sorttest.c0000640000175000017500000000642612242265601014513 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sorttest.c * * Tests sorting of connected components by various attributes, * in increasing or decreasing order. */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_int32 i, n, ns; BOX *box; BOXA *boxa, *boxas; PIX *pixs, *pixt; PIXA *pixa, *pixas, *pixas2; static char mainName[] = "sorttest"; if (argc != 2) return ERROR_INT(" Syntax: sorttest filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); #if 0 boxa = pixConnComp(pixs, NULL, 8); n = boxaGetCount(boxa); boxas = boxaSort(boxa, L_SORT_BY_PERIMETER, L_SORT_DECREASING, NULL); ns = boxaGetCount(boxas); fprintf(stderr, "Number of cc: n = %d, ns = %d\n", n, ns); boxaWrite("/tmp/junkboxa.ba", boxas); for (i = 0; i < n; i++) { box = boxaGetBox(boxas, i, L_CLONE); pixRenderBox(pixs, box, 2, L_FLIP_PIXELS); boxDestroy(&box); } pixWrite("/tmp/junkout.png", pixs, IFF_PNG); boxaDestroy(&boxa); boxaDestroy(&boxas); #endif #if 1 boxa = pixConnComp(pixs, &pixa, 8); n = pixaGetCount(pixa); pixas = pixaSort(pixa, L_SORT_BY_Y, L_SORT_INCREASING, NULL, L_CLONE); ns = pixaGetCount(pixas); fprintf(stderr, "Number of cc: n = %d, ns = %d\n", n, ns); pixaWrite("/tmp/pixa.pa", pixas); pixas2 = pixaRead("/tmp/pixa.pa"); pixaWrite("/tmp/pixa2.pa", pixas2); pixt = pixaDisplayOnLattice(pixas, 100, 100, NULL, NULL); pixWrite("/tmp/sorted.png", pixt, IFF_PNG); boxaWrite("/tmp/boxa.ba", pixas->boxa); pixDestroy(&pixt); pixaDestroy(&pixa); pixaDestroy(&pixas); pixaDestroy(&pixas2); boxaDestroy(&boxa); #endif pixDestroy(&pixs); return 0; } leptonica-1.70/prog/ptra1_reg.c0000644000175000017500000003150012240302553014477 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ptra1_reg.c * * Testing basic ptra operations */ #include "allheaders.h" static void MakePtrasFromPixa(PIXA *pixa, L_PTRA **ppapix, L_PTRA **ppabox, l_int32 copyflag); static PIXA *ReconstructPixa(L_PTRA *papix, L_PTRA *pabox, l_int32 choose); static PIXA *ReconstructPixa1(L_PTRA *papix, L_PTRA *pabox); static PIXA *ReconstructPixa2(L_PTRA *papix, L_PTRA *pabox); static void CopyPtras(L_PTRA *papixs, L_PTRA *paboxs, L_PTRA **ppapixd, L_PTRA **ppaboxd); static void DisplayResult(PIXA *pixac, PIXA **ppixa, l_int32 w, l_int32 h, l_int32 newline); #define CHOOSE_RECON 2 /* 1 or 2 */ int main(int argc, char **argv) { l_int32 i, n, w, h, nactual, imax; BOX *box; BOXA *boxa; PIX *pixs, *pixd, *pix; PIXA *pixas, *pixat, *pixac; L_PTRA *papix, *pabox, *papix2, *pabox2; static char mainName[] = "ptra1_reg"; if (argc != 1) return ERROR_INT(" Syntax: ptra1_reg", mainName, 1); pixac = pixaCreate(0); if ((pixs = pixRead("lucasta.1.300.tif")) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixGetDimensions(pixs, &w, &h, NULL); boxa = pixConnComp(pixs, &pixas, 8); pixDestroy(&pixs); boxaDestroy(&boxa); n = pixaGetCount(pixas); /* Fill ptras with clones and reconstruct */ fprintf(stderr, "Fill with clones and reconstruct\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 1); /* Remove every other one for the first half; * with compaction at each removal */ fprintf(stderr, "Remove every other in 1st half, with compaction\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_COPY); for (i = 0; i < n / 2; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_COMPACTION); pixDestroy(&pix); boxDestroy(&box); } } pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 0); /* Remove every other one for the entire set, * but without compaction at each removal */ fprintf(stderr, "Remove every other in 1st half, without & then with compaction\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_COPY); for (i = 0; i < n; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); pixDestroy(&pix); boxDestroy(&box); } } ptraCompactArray(papix); /* now do the compaction */ ptraCompactArray(pabox); pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 0); /* Fill ptras using insert at head, and reconstruct */ fprintf(stderr, "Insert at head and reconstruct\n"); papix = ptraCreate(n); pabox = ptraCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); box = pixaGetBox(pixas, i, L_CLONE); ptraInsert(papix, 0, pix, L_MIN_DOWNSHIFT); ptraInsert(pabox, 0, box, L_FULL_DOWNSHIFT); } pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 1); /* Reverse the arrays by swapping */ fprintf(stderr, "Reverse by swapping\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 0; i < n / 2; i++) { ptraSwap(papix, i, n - i - 1); ptraSwap(pabox, i, n - i - 1); } ptraCompactArray(papix); /* already compact; shouldn't do anything */ ptraCompactArray(pabox); pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 0); /* Remove at the top of the array and push the hole to the end * by neighbor swapping (!). This is O(n^2), so it's not a * recommended way to copy a ptra. [joke] */ fprintf(stderr, "Remove at top, pushing hole to end by swapping -- O(n^2)\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); papix2 = ptraCreate(0); pabox2 = ptraCreate(0); while (1) { ptraGetActualCount(papix, &nactual); if (nactual == 0) break; ptraGetMaxIndex(papix, &imax); pix = (PIX *)ptraRemove(papix, 0, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, 0, L_NO_COMPACTION); ptraAdd(papix2, pix); ptraAdd(pabox2, box); for (i = 1; i <= imax; i++) { ptraSwap(papix, i - 1, i); ptraSwap(pabox, i - 1, i); } } ptraCompactArray(papix); /* should be empty */ ptraCompactArray(pabox); /* ditto */ pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 1); /* nothing there */ pixat = ReconstructPixa(papix2, pabox2, CHOOSE_RECON); ptraDestroy(&papix2, 0, 1); ptraDestroy(&pabox2, 0, 1); DisplayResult(pixac, &pixat, w, h, 0); /* Remove and insert one position above, allowing minimum downshift. * If you specify L_AUTO_DOWNSHIFT, because there is only 1 hole, * it will do a full downshift at each insert. This is a * situation where the heuristic (expected number of holes) * fails to do the optimal thing. */ fprintf(stderr, "Remove and insert one position above (min downshift)\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 1; i < n; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); ptraInsert(papix, i - 1, pix, L_MIN_DOWNSHIFT); ptraInsert(pabox, i - 1, box, L_MIN_DOWNSHIFT); } pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 1); /* Remove and insert one position above, but this time * forcing a full downshift at each step. */ fprintf(stderr, "Remove and insert one position above (full downshift)\n"); MakePtrasFromPixa(pixas, &papix, &pabox, L_CLONE); for (i = 1; i < n; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); ptraInsert(papix, i - 1, pix, L_AUTO_DOWNSHIFT); ptraInsert(pabox, i - 1, box, L_AUTO_DOWNSHIFT); } /* ptraCompactArray(papix); ptraCompactArray(pabox); */ pixat = ReconstructPixa(papix, pabox, CHOOSE_RECON); ptraDestroy(&papix, 0, 1); ptraDestroy(&pabox, 0, 1); DisplayResult(pixac, &pixat, w, h, 0); pixd = pixaDisplay(pixac, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/junkptra1.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixac); pixaDestroy(&pixas); return 0; } static void MakePtrasFromPixa(PIXA *pixa, L_PTRA **ppapix, L_PTRA **ppabox, l_int32 copyflag) { l_int32 i, n; BOX *box; PIX *pix; L_PTRA *papix, *pabox; n = pixaGetCount(pixa); papix = ptraCreate(n); pabox = ptraCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, copyflag); box = pixaGetBox(pixa, i, copyflag); ptraAdd(papix, pix); ptraAdd(pabox, box); } *ppapix = papix; *ppabox = pabox; return; } static PIXA * ReconstructPixa(L_PTRA *papix, L_PTRA *pabox, l_int32 choose) { PIXA *pixa; if (choose == 1) pixa = ReconstructPixa1(papix, pabox); else pixa = ReconstructPixa2(papix, pabox); return pixa; } /* Reconstruction without compaction */ static PIXA * ReconstructPixa1(L_PTRA *papix, L_PTRA *pabox) { l_int32 i, imax, nactual; BOX *box; PIX *pix; PIXA *pixat; ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); fprintf(stderr, "Before removal: imax = %4d, actual = %4d\n", imax, nactual); pixat = pixaCreate(imax + 1); for (i = 0; i <= imax; i++) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); if (pix) pixaAddPix(pixat, pix, L_INSERT); if (box) pixaAddBox(pixat, box, L_INSERT); } ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); fprintf(stderr, "After removal: imax = %4d, actual = %4d\n\n", imax, nactual); return pixat; } /* Reconstruction with compaction */ static PIXA * ReconstructPixa2(L_PTRA *papix, L_PTRA *pabox) { l_int32 i, imax, nactual; BOX *box; PIX *pix; PIXA *pixat; ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); fprintf(stderr, "Before removal: imax = %4d, actual = %4d\n", imax, nactual); /* Remove half */ pixat = pixaCreate(imax + 1); for (i = 0; i <= imax; i++) { if (i % 2 == 0) { pix = (PIX *)ptraRemove(papix, i, L_NO_COMPACTION); box = (BOX *)ptraRemove(pabox, i, L_NO_COMPACTION); if (pix) pixaAddPix(pixat, pix, L_INSERT); if (box) pixaAddBox(pixat, box, L_INSERT); } } /* Compact */ ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); fprintf(stderr, "Before compaction: imax = %4d, actual = %4d\n", imax, nactual); ptraCompactArray(papix); ptraCompactArray(pabox); ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); fprintf(stderr, "After compaction: imax = %4d, actual = %4d\n", imax, nactual); /* Remove the rest (and test compaction with removal) */ while (1) { ptraGetActualCount(papix, &nactual); if (nactual == 0) break; pix = (PIX *)ptraRemove(papix, 0, L_COMPACTION); box = (BOX *)ptraRemove(pabox, 0, L_COMPACTION); pixaAddPix(pixat, pix, L_INSERT); pixaAddBox(pixat, box, L_INSERT); } ptraGetMaxIndex(papix, &imax); ptraGetActualCount(papix, &nactual); fprintf(stderr, "After removal: imax = %4d, actual = %4d\n\n", imax, nactual); return pixat; } static void CopyPtras(L_PTRA *papixs, L_PTRA *paboxs, L_PTRA **ppapixd, L_PTRA **ppaboxd) { l_int32 i, imax; BOX *box; PIX *pix; ptraGetMaxIndex(papixs, &imax); *ppapixd = ptraCreate(imax + 1); *ppaboxd = ptraCreate(imax + 1); for (i = 0; i <= imax; i++) { pix = pixCopy(NULL, (PIX *)ptraGetPtrToItem(papixs, i)); box = boxCopy((BOX *)ptraGetPtrToItem(paboxs, i)); ptraAdd(*ppapixd, pix); ptraAdd(*ppaboxd, box); } return; } static void DisplayResult(PIXA *pixac, PIXA **ppixa, l_int32 w, l_int32 h, l_int32 newline) { PIX *pixd; pixd = pixaDisplay(*ppixa, w, h); pixSaveTiled(pixd, pixac, 1, newline, 30, 8); pixDestroy(&pixd); pixaDestroy(ppixa); return; } leptonica-1.70/prog/weasel-113c.png0000444000175000017500000000464610400443670015115 0ustar dandan‰PNG  IHDRRI™ãñSPLTE$!99&!1)%$#))11)!1)151$544BRZ!F6%F91R9)kczB9BIG7RB)VE2RR9cJ5eR7sZ9IIFRJJURGUUUZcciXFcVRsZBccZxcHscR{sZffewwvˆ—„1!ª¼ˆjIŒsJŒsR”sJ™wTˆ{s”{c¥{Z΄„{œ„kœ„s§…Y«ˆc­”sµŒc»”hÆ›kÆœs†††”Œ„””Œš™™œœ¥œ¥¥ªœŒ¥œš¨¥œ½­œªªª­­µ­µ­­µµµ­­µ­µµµ­¶¶¶½½Æ½Æ½Î½¥Æ½»Æ½ÆÆÆ½çÖ½ÉÉÉÎÎÖÖÎÖÖÖÎÙÙÙÞÞççÞÞççÞëëëïï÷ï÷ïï÷÷÷ïï÷÷ïýýýJˆ,œ pHYsb&2ùIDATxœµ˜ý[ÛÖÇO5ßͳ’Š1n\%åe˜Ff3³^2‘ȸ0ÊÔU.ÎÖèÿÿiçÞ+ëõúI×g;2~Ãúø{^î¹Ç‚ônð@†Æ'쩸[—ÿw°†\ŸÍîg³Ùô¾~KØQµøûXbÖz iÌ’)~ú~Z¿%Ó{üÏ´à1£4ãÜ|'ïîâí/§ •2»7¦¶Ä´ 19ô.¾aø;¡òûiMåB›"±"Ò„õ èRzG)½¥4D;¥±eÐäç"3+4ÂÀ÷n¯éÝõÄTÙæeDɇÿ9͉<÷=ïÔH+»ŽóR‡€!úe* ‰îÒ #ZDw=Ï÷|6ò_?™ÄIò£ RòDÁ—H4Ú'>#zîØÛˆüXC&É`L£sÊ5þ3ŽC‚º<¯«D¨qìqwH?C䬂Äb MfŠßD£ ¬&ñš¥[CYî¨ úÌg þ©Ö&òg~öw@k,H¾Æù&#ìN´ VxÅ oý’P¶Ð›Žó—¶a‡qND‰“Š^óUöžô0älY†¦©ªa–j„ù\écERêà£&’÷K±ÃF¶Fø[îc‰(ή|™«H[p6ÄñuÈ™-¶mB:n%’2Ç=¯-Û(ØöejšÆ×23Ç9ÎVO_©=ÚqÜzP}½©2a*cÃ4ƒÀÆ0ÁÛÛºjÁtž/ã·áàR‹›¹t;›;N£6ÆãA©Ëýòîà ° )»èÄV=C=ù)¸j `Åã»NËîüìA–l¢¥N…@áF¯éxÌçÖß°"ÕßægŒ{‘•Ñ“6z¼›ZJ%ác¿©2ÎRÎç µ—^ܺ¨+‚}ŽÙŠW+Ï~£Óyaò…¨·¨“.B:GKP˜SÙÕÐ÷'M•”A©~lL)Ï©;ô;-\À¶ºã÷ b'‹¢¨yŸÑD:±a’3-…ö’Þn·>S ;À8þQkNÔG¹¹ˆÊL°ç^“·r TåeĨ¾¼ùÚÁí&)«XB+‹ˆ²XN0 ˆ„8{*û1M³­E*e8Þ+ÏT‚KÅ|8\%F3¤*7yÉ4 !CLÛÇ6ì ×”æÏá4Um©Êõˆå%ãX뽯±Ù% Lë(ðxø°#!ÎÔPŠÜ,˜Ú¶aǶeÙApl–Kîï)›d‘Ôñ§|càöí¯VGåmŒl³ìõÁ†2” M² mÌ–µã9Šã»-㇋èìÍÛõ6~€ÂÃýáÐ{¥xS‚Ì3B–¶úðw\‰ë¿fÞšKÃ=¨­ëØRÁÌÞ;Ʊꃉ2•Ãvë¤I±M¤’cæ÷£áþƒGD|šMÊaÀš1ó/‘QÑ"Z'þøÈÓ»iÚ=e.OÒ4‚GûûkŠA-뙦eÓ‘f—ãÐpüo‹.Èrûý§.ë2³jÓtÊ~MØÎx)[EQQ ŒÆÓ2-.ÎþB›~¬#Sž`qKr¤ ÞÏ 0MÿühL ^IEND®B`‚leptonica-1.70/prog/weasel4.16c.png0000444000175000017500000000302710400443670015114 0ustar dandan‰PNG  IHDRRI\lðgAMA± üa0PLTE($ P HH@hd`PH0 ˜\@¨Œ`Àœh¨¬¨”ˆÈÐÈðôðØÜظÀ¸ØMËF8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I;IDATxœ–MLGÇg±º &ëâ¨Ð‰Ð©7S»R›ÕÈFMÕšV¤=å°g8DJn–ª §UÕ4joO 8Í€7N»¡¹ä„ü‘HœfQ®Èë’ÓÆaûf¿f°‘È[{±½?þïcÞ¼]DßÖz{2}‚] I³Õ‚—ÕbfºçVÕµv»á´«N.$[G­YoÕ°×ÚŽ¯†“³M“þ’/8¾åêœô<»<üÍF#û¹Ä(bN®#|Ê;5Û¢ê¼î8+2B_çÖÂŒ,f '¬V—¾T³1‘“‹×ûÒ4)Ðìå‚Ìû˜ªF{â U-GÒ!ÉÄboÓ2«uÐt¢j9†_¨ªz7Ê5[ ¡.k™ ¼©¿FÆÙ[ )?Ì­Y>‰+,>×?€Z½é´ ªåB"Æ${…ܵÃpi[Ø>lÙX{ùÁ4B‰«@ÞþÉáÞ×,Ȉ2ç-ÛÆÕ!Ú2ŠÍÜP™¿ÈPrÏ’Ù+”T}+~¹÷¥ˆRÓÃÀR³*'ž‘ߦƒ±ÇnDCP-<¼û`#P\E7C°Œ4kz$€Ž«©/ÅUAó/§ƒlj˜ÌXÁC;R%?HÇIå"û»}¢&äýBÇš›ÐJ|±492ý‰ŒX÷¢¢æ^mO 8 %dtvÖBÖ²ÕÚÁa-É*’þUÿ~×aþwl°lÜõ!ØH ̳š Jÿ‹@š¶CÉTL- ¹«wzÅÜm‚uÌÆÄ±”"bî.¤µ1!÷;AHIôî@˜Õz•àM© T³ýî½YgÒ&«òT¨ûùŽ£»™Õf²9×-©Þ‰pÒ<È%™|*Ùͱm,hšfs5+3{ãM‘d£¦ýZFî2v£<ÎÝëgT¼\ºr6Pº’ñÝaî§/o¥ ÿ&£OƒÏ?õ¾Cb¥$ÍxPźÉoB7–¦Ñ f‡²‘cHIU¼|Õõ:èòÑݾ”WBò 4è Ÿ[dEØ@Çyóh/{;²<¤¢[¯x7y•‡]κ¨œ“Q&y×%»ë ä¾ )%ÎËRÆ0Þ)3°'¨Ø4_£ 5X%¤ŒNˆ1  Úï^AJWÒñö¥Ž ÝØŠ«ÿLkp]Ž®o š{Þþ…ž×11ø°¹7,ú«@îó=LŒÕ`†”&‘ô9Üá[Ò¥¥Òâu˜ß?CÍ•HØ! ³XÓ¼í®RÁ-’>f™¼N ÷£Ã=6»üñ¥o =¹†’à6\|:!]°„Œ`*i>y{iN™wàŠœ¬‰q¾9ðG ³äþögŠ2r®"Á5],@7ÆGE‰ÒƒItÑË„“0lͪ´"õŒ*Êp¾?ïŒN7!²ëQH©Fãq†e×±®ëÙíû=ŠT¡ÜDMn„¤jÏ:C%µÓa‰"ôù¨W$NZš¤N¶úè’2¼by1ÎpÉá06†è â餻â$`º£v›+sÜu’ ]çÝ1.묑Œ”µß£œçä¹MBd)}1Ÿ7¶bt÷” A³·ƒÔ7Ï%wØõÒ'§æúBr÷ôÑŒÜU‹S·¿ÂÆÊ]½Ö€ÏRëG4!—háf~}2NÇå´>’¿ë\#¸.Ä 4GÿIßWFÞƒ›xkLú¶c5¡7ãå[ ú!]ZÚ£ _ÈçXЙõŽÕ<éé7’M|‚…OªÍj—µÄ/õðé—L‹ÂãegøÉÿè}e‡gÿW~~õGÒK+tIMEÒ ¸`ËIEND®B`‚leptonica-1.70/prog/speckle2.png0000444000175000017500000000074211220550653014672 0ustar dandan‰PNG  IHDR̘ÇæAn pHYsb&2”IDATX…Õ—Yƒ0 CuÿK»C‰cIÉ”8~îx% ªPï…ç©#‘õsC8#x…h´‡%ŒgÌóÿ¶Ið+`Ù –ઠ̸ŽT&Õãä2šÑú<[ Ãt D3$µ T™cñŒ‹Þ†³¨¤34æF@ºØ3RUR™^ìôqp`ë/0k*À^Ȧ4á nòjzM“¹`FêñE†±Í&6øg{•ÍœG†íñòÚÑŒ(½¿r(&ü8Êx¹º×b;ž‘¦ó ·¹ú —ñ›‹+tª9š©N'Þ´ÒŘÞINgx¾Ô¤K,‚™ö ì/C·’ÍðGÄüZé‚ÎáL{6¹£Lo9›Ìf@}Ö1³uŠd¤É`²É!ÿÉ7V[è| ï‘i6™‹ÃÍ\!›¹•^I³aÝh¸§3"©z®þLfŠ÷42s¾9Í`æ Ì»+aHfÌB§”ßd®~£xÂãKÌé$LµVŒ²™vsφT»-E3[½¨¢É,Vг™)Ò=î/—”n2ó“5iIsIEND®B`‚leptonica-1.70/prog/1555-3.jpg0000444000175000017500000060373511457505742013743 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀnŸ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?âÙylôÍEåóÅ[* àõ¤1ñÅr\Ý•£‡þú©$ˆ9§¦|ÕÅJÓNâE7@ S•3ÐTŒ™9íNP:P; Ç4¾^y' ·Ö¥ÛŽôиÀ§ãŠP¹f”}ìR‹“–§ìQÛŠwÓ­?oLœPñ¨¹æNÙƒšz¨ÇiÀZ~8¯Ëòõ¦(8æŽåzw¥NMzÒ•ðE)>”Ò:Söô #pÍ8ª“J3N Í v…§†Âô¦€*M¿.â‚ä7éÀg­'E½4€w6 *óœÐ€rh$w4 ñMm äÑÔ{Pàh ´ÁÁëNÛ¿‚h$l­:"éÍ4©U§¡¤Æ=˜Í4àŠŒ£ùÙþ ˜/É@ CƒóT¡ˆSЉFãƒR:P\þnôÕd*@jsGž[¥'’½@¦†BÓsÍ5ªEæ“®ù{nÜ ½©åHëÒ”r´€j®ÑŠrŽhæÚ„SûR(Éäq@ ¸¦l'#`)„’1@¹Ï³æq’ h08!zÖ\èÁÎá@Ñw*娓Uc‰‰©k¤x#æ4†LAÔ×ùˆô©B˜ÇÒ„b™"c8ŠB ¸æ¤À¥ ªØâ€¿ cFj(Qìi6âLJ‡q ½HI#šdãËaþ‚Æö;²Uz©æ€,† šBN~µ#(Í1²N(níI€)ª¤¿5+(³ FÆ)YæŒp(2œŠv㊒@Bô¦( h`RZ¦ ESž)\3@†X“Q³Ø^•$g“šSÏCLR?9ɦ(ýáö§‚IúP¡ç™ §…²j´Ò2N&A  ³‘ÅBÑŒäu©2rN1Q ˜Ì›3“éM(éƒJH4Ó"¢>ô)u5x§ \g4ÖZbù*)æb˜®sŠS!µ?0'Ò¤UܦÝ6õ¤ƒE?( 9£ šj«`œÓdP¤|ÄŸJ‘T®NzÒº|Áúc½A3„Ú3Å?>dc9ª×Í2¯jš(öN”+/ÊžÝ}é…¼Ç8(¹o/zHäV•é@¬TM+¾ÅÚiåÕ_žjd¸u$Ž( €:Ò·'m5#nAóSºg=i€…@€1銌zÒ£:u Zc­8’¹+Ö‘A#-@LË åŽ;ÓExò*i`ŽLoš±y*Ž)ˆolÒ“ÅI³Ö¨ Îp(oj{cР¡9æ¬Oâ1Ò³g†)qóSw*g43ɧÇ' 3 f˜Äc&¦ØDÊ´€‚)wÅ#.1Šf0q@Å?…3ii£ šr   NÕ$w¤R3J«¸Pš9H&ŽÒ(©+ph¼ŽE;½+€ƒÚ•H#=hÖF=¨QŽMJpÊ1AQŠWª2jL Ð@Ú6õ§´dÐH cš@£¯JyÁ ^â”î,3Ò“i4âœûPG4‹Ö”¸´ŸtóH ;}i¤Kœ`Šá€4\*†<ÓÊÀ¥ )XqH B¤R R¢ç­=0#|4ƒâ˜*M«¸qHÃA“QÈÀE1)Å)Û†+0â€@?M¹94Ö-ž:Sö3žÔˆ2‡¡¨­l"´ÉŒrÜÔädóR©ùq@—­5øéG=)¤€£=( œS±‘“M-–ã¥Iž”Ð7qL*ªUàæ˜üô ± 1FÕÇ4и<ÓÊ€3@цíR·Ì1McFኌÆKñC‚G5"±Sšcî<Ð!6( )NvŠnàx¦ú­DW&žÇhÍ4å…E ;¹èj5¶‰%ߎMMÉ84ÉæšÄ:`TR #Š›¯šûTs@ˆ0 {R‡Á¨Û¥0¼S0sR!!NiŠß9 ÉÁÀ¨psVd@£"«¹çŠ €¸4­’(þMô¦€Œ®Öϼµ3N 5T`T&"¡$‘PE8¸Æ1Js¸>^ôzà‘JÃ= @Á~÷çP\̰°oâ=1@1 ÷ŽM=FW‘ÁªbëÌ;X|Ç¥ZCåÇóOJl¶ìáY8aMEel¿Z‘gÞ>QÓ½8~ñ\Hȃ'ø©’ ùHŠ’HÖO˜®i’ ÈñŽ(¯»‚M/b1@ê¹ô¨†vP¿0$ß¼ŒOa–¨‹€ J7¸šFÃ夯O4ñÀ c €sLû¹œA&ž(À‚9íC`ô54ñÖŒc‘@…+Ç4Ò>\ÓefòóUÒvBªÜƒ@ìïM< S'OC@S»4ÀŒd½(>jR¸æ£`x¤2"pÄš>G2qȤ(äPöå)¥0¼Ò+6}©û·p:ÐBŒ g—·'½L\.7 LüÙÑq•˜{SÑxâŸ"“SGÀÇZˆ@_Æœ«ëRˆÀÒ “ƒ@†Ú3R* du¥Pïv§&6¿>Ô ‹i9ÝÒ•#È ~Aâ”ôâÆ`*àšzŽ9§,yäŒRªœóÒ€@M;œRîU¤WRx€WQ·ÕT˃ÔÐÀf€#ÜO… 0æ¤Ûšyu °gµ9Ù8-Ò›ŽçŠF…&2e*Hô¦°LÒª‚šG4xÏjp´œmÅFIÍ%ÈWÅOS‡Òç#yÈäÓU‰4¬Û€” †¦`ôüt§qÖ€\riøÞN*P£ݘæ—¼þŠùb(P|¥QKg“NQòœt¦³¸Z,8`x4½½é‹qKœñIè1W¯J“&™ÑsNÀ4ƒ ÄR“éH¨wM(Sô B(biàÓ—ŽôŒ}(Ý…›šÁÀ§GZc¼‘Hb•]¾õݤQ»æÍÉaǧ9éK" ¿ZP ¦º°ïLLL2ŸlR»§Js´~´«òÇH.A¶A?Þâ®ðFZ®s¸v÷¥vÆ ži€ý»TšA“Ò¢’]«–û¾õ(`È ~”ÀnN:Ô71<ÊqSnÆ}iÁ¾\ÿ !TòÐ!=)C8^´§sDi†$P![•ÀëQ®sƒS0 ûÐT‘Ö‘ “KžÔªiå( 4»)Øœ1@ˆÂçƒH~Z{ž)¯“@’OJo–G=ê\qHÌ8¦m‚0i£#éO M5HÍ8Ž3Q1=*^ÜSx¦"5b 'ßc»¥+JÇâ("Hç¶iÜ¢LHÉL8ÛM Í89¤äЖäž*OÝ«M…$š®ãq9éP"<äS Ôª2ØÆ1ÞÆ}(5ÉÏJ”G·§z‘WåéHÜ`U!1‚Ëœ÷¥d(ÇÌ*îiç·ë\߈u“ý Øãœ¦µÐW±zó]³´o-˜³cœ¥c]x™Ý¾HoOš¢²Ð/î ©õËõfO KÂÅ2ž9`V‰EnKl­¿±òО=+nÛY²½M!W#¡®^çE½¶“kÀž¼Õ Œ‡U³ÐÓ勨Wg£Z,0Ýy«@!$WŸZj—Vޤ;2ájëì5Xo`È 8ûÊj\,5#G%ŽšY8Å;Îô¨óI5»’ÃŒR°ÆHÓ\ŸÂ¤åbGÞ¦!:Œš]™éQ†Ãu©7`q@ ç84bƒÔõ ZfN(áy©ô¨ÏN*Ô£V 9«i‘ ÉçRé¢P:æ˜Ð¶d·ÊçæwëÒ²mmè²@äV¹#Ò‚>ZE÷íGÝäPyÅÞNHªz…ÚYÛ±',z}jø(¹.ØZåî$:–®±†ÌhÝ©¥q3WJ–æâ3,ÉòãåÍ^š@Š7éO‰|´Úâ »‘a†GsÐdR[¡]îâó|’ÇqéVNV0GzÀÑGÚošV$Òº9‚‰+Ô‡íd Ÿš¬DüóÒª“p5]Xö(&’. S0sHŽÄŸJpÉ4ÀVLR}ÐvÒàÐx ßpÅ?€©¦–'Šiݸq@Àpiûºf¢M8Èõ4†+drzT™FVó œǽXèƒÒBIç¥.FiŒc½#s@@É¥@ Í(880â.8=ù£kgq< sýáô¤4Ç'Æ)êqÁ¤aº‹ Aò®M0埊s¨`Ò¨Á òË0lô©<CÒ„<Ñ`$ÀÅ4}îzRã҃ǭHÃ#Šp(Éâ¤忀n•²JaS×€yä}i (n5CUÕ“Mƒe=chÓßj—í;»¤9ȵj.ÄÜë…ã4ŽÁA"“8ÎîH܆LP#9õ¡”õZ>™¨îîRÒÕå‘¶€¼›]•s+RÖ$±½Ž@ÁºçµnÄÁÕ[ÔdŠâôƒý­­Iq0,«ÈÖ»$R£Ž@è*š²&÷døÇ"sNS)ÇTB‡sOQà—4ª4Âã‡CLÛ¸üÆ”¸#ߥ9ÝH.DãœFÕŠtžÔÕpÜÔc7µ ÙBqÍH[åSKíë@ -Ç4X{P1ç¥;8é@yP)vñI!Æ)ùÚ4ŸžÝ¢'hnô[D¶öÂ5'åîidË‘†À•¬ë©¦ÅŒì04º æ…Õ嵪3OÞ¤–X÷)È<Šâ4ËIõËŸ:âRcS?¥wÆ!Œ(8ªjÂNâž™¤SŠvÞ0´{ÔØ¡ Š$Ò¤õ¥éÒ‹ ã€Á£98¤\÷¥#û½i k'4Ф¿OZ9/@ưS*G4„) gjÄ‹Ÿ»Ö˜ÿ(´„öÍ3Í;©\m˜L Æj…Ë{U¶P@Í&Ì„äÓFy«:Ó]0†€ ¸ÓY°¤TʼsQmÉ4ÀƒÌÛœÔBgrBS˜C)ÅC+ü§ë@ÿ+ä…£ œþg€sHÜ®jAåÈëMlæ¥'娷dÐ&7?'Šqs PÀM9ŽÞGéT" Éd¶³šU*¤\ö‹öœÒß\‚Ä©žŸäVÞ¤ ºU×;3Ttù#‡Ã¦HRˆYG¿z¨‰£Mn Cå5Âïžjež&%‡8¹K]*ØÂnoÍv‚ŽÜ [[‰âº0@­O!›±ö¢Ã¹ÑM*`üÜŽk*{{[—vÐ{sH¥ƒ’Ķy¥ ¡–ëÞ…pg=}¦ù3;ÖJ«Ím.õm¤uÕɉ#;@$W/}†áÔkHÊú2êuWRO¸;ƒ`â´€içŠå´9ö2ÆÏÛ¥t«(Ü2ÜTÉYŽ: RDá3À§à»§¥.bž¦˜ÓAk󼊠úÔŒ66r{SÀÉÅ4Jä`ÀúRyˆ… 8Ï4òH♉µ=ˆ`yªìcŽUŒ·ï)¡øž”ŒAB& AšGš+xL’ æ‘23.¥*‚ˆÛiRxîméù[§½G¸©Ú:P+Èh­DQX¨Å+¯É•'­,k†Ò(ÞZ˜3qÁÏ5bÚS$Aº;Ô·„ìà(ëšÁÔµULÄÜŽÔÒ¸Û7™Ã0©q7+;HÃØ«4›Î2IíWФÁNx¡«(ë7¦+BV$ ÉТ?Ú»I©5ðûÑÏÜèC¡¶o_=6Õ¥¡=N·$FHí\¦¹¨4ҘŽµÓžÕÃÝãí2œçæ µ¨Ñ‡CÆ3šË¡c—,H=k‰ñ&¤×mh¤„SƒŠì ûUϵyõî&½¹|ð­ùÕÂ7b“ÐÑðëMm{åš6Íw?î·Jâ¼.ÀÉ&ÿ^+±,¾X¦aÄmµw”¥óÈ5SÍÜ›sÅ/œ¨…ò¸£©E•97…%»×-uâ —âÇË»ž•ÐErƒœ‚6˜\œ0`N( àÓDŠ2ÙÀk|QnÚ€—8„›y÷þjÂBXàSÅÀ“•éŠ{²Îç4¬„íQUå.Î8ã½ajZúèa¶“ œ1­ø¦WPÙÜ1ÚªÖB¹&ÜRŽ1š®$ ãÛ«¡,͵Gz‘’\JªTŒÜož•ÉkºÜÂ[¸Çr*k j6¶ #–—êÕ=.MÍۛ߳ڼ‡¼× {=Σ+Ü,€œ{WM{3ÿd¼‡’Ü\¢°…$ Ø,yAW“&ÎÏÃvå4È™&º%Κ¡£*.— QŽ*ÅíôV0y’°ì*¬µ¢&lŠ1‘ÍU²Ô£Ô-ÃĹ«J>SšO@¹àž•"`ž)B«i#L9ô¤1Ãþ”î;Ór8õ©É“ bhWýåHPœñP2lÐÛš1òÓÕw-&Ü„4×RzÔ®â‘ð€!(¦¾[Ôó’zR€œ÷ àši1“ÏJY:) I(lãš SK8 ÉbxÀ89§±!öÔEXæ˜F@SšŠHÐò:Ó€`y§0RF:оqPo(Ÿ(É nO>ÕÛvg5¸‰»”J¬0£uîGN´!ĬJ“ÎxÅLrF_ozz¬`†=jÞ•'§ó¦Gf|£¶àF:W1ü·zrœNßqé]Dñ©rQ‰oJå58Êõ/Pç-ÎkH ì]±¸ßh-ð¢hð¬­Á•OvÔ-§ÝT_š±n û=ÃÄÀ½(KQô;›{ÕšÔL§å#5Ëk¬—S˜U¾D=O¥Ë$–¦Î6ÉnIôCP±{ ˆe,§•cI/zÁÐÛÒ¯ÅÌ 2« ÅmF“±Ïq\%Œ-=ôql9Á#µwVPF™ÂŒdÑ4–¤Ê»‘F8¡•‚ȶZ!vàô¬mfã춬ãï?¡nY«Ý=åÇÙmO*>c\ü‘¼.c|†ô­Lݲ±Ë0­«Í: 3¯ÌÞjïÊNç/ÌÖà¬o´¢º=¤’Õ÷±,Ms,¸¨çºý:1 œy…9½úìäʱ‚¡Ðÿãé³ýÚnµ¸_6~é£D\^¶?»Oì‹©ÑÍ>Ûsž˜®>R ®Ã»Wj¡ZÝ‘€ÚEqwJâU7TCr¦ô: 1ò¤R8ŠÛL‰Îbxh±ý­Â볓€sD·±ZòôY©i+—Ô/g¹ŽR&èzMJí¯¯°ÍòÀ»ašR¡PA¦´ÜMœ¬˜.•úG5Ô^߬zqž3̃h®vÚÊKÙ|¨×¡ä×Mý›é~CrÀgôäÐ#‘2Kæ©;É®jDhâG|9ÎÉÉŒc±"¯é¶my6ÉrU;U4šÌÏ.ÒHÎN9Ít¾–âD5‰QҳKôE_Ý1®¦ÂÞ8-‚ ÀÇ&¡µa¥¨æËœúÔÜ”ÚÀtâšì1޵$d‘ó¥dÍR9}SC1æ‡Ü‘X­ñžIÎ}+Ð&1ˆ‹ãu5ƒg3j:«m?¹Ž®3v&Q9‡I¸>•¡¤jRZ\*—ùò­=oIMqÃwÍd*ò9Íi¤‘žÌôÈØIpAVÉøƒPesGõ­ ÝìÌnÙd< £âKUG$Ⳋ´¬[wF ­ÃAr’r9®òv·g9çÄ‚ w&½LùtØò†ª¥‰‹Ôå5FæiÌM•Œvõ¬ønd¶”IÃ{VÿŠ"DÀc'­s  Œâ©4Оçq£]Ïyld‘vã­cxŽð‡û:eGS]”¢$QÁÛšÅñ-š´^r®u÷¬Ó÷Šw±apÖ׉ <ÏÒº gRhmü¸Û'jåЛ€Æ nÙi«Z d-æc ŠÒVY‰’G(u?6x÷®úÌKö(ÞOîæ¹[ &C¨ˆ¤RŸÎ»‡+ °QÆÑÒ¢MZÈq½ÎOYמmÖЂBMsdî<¶HëV®ßÌ»•»5sD±Šâwó b­Y"^¬Ì‚6šDsóÕ×k0}“Ãñ®WqÇZ»ý‡io –8ðAª~(`tø¸Î[¨çM–£c\ùç=«¶‹V‚ÎÆïºL` â™[Œpk¤Ã¢âÆ9<Óæ0UÊħ©©jS\^G,Ÿ2©Ê­vzEäw¶Ðá€ÁÂ\¡Žä@ãî3Z¾œÛÞ4~fQùÕ.)­=u:©@ŽÝÙ ¤×Ÿk–a}ü‚k·Ùçà # ŒW›í/ü¤EugëéST C²YA»BF9ÅszT¹¹{ ®‘‰òIïS'¨âUfŠÞݤ•°W7{¨O¨ZIö5"5à‘Þ³5}BY¯^7wXÁè+£ðü &šŠPüÃñ§ËmA»èq3FÑÞÜGZÜÐïßpÈäô¡Ôl&P6ª¥Ã6º +GK4W¸]ÒƒÒ®RM¢î.µ,‚Ù`Ÿ2r~•ÇÝF¶×h±1%zýkµñ2Éý›˜°¤ŽÕ˵¤W™óש=éA„‘×é’yöQK·¨æ³|K5âÛ˜á-éSèŒÉ§¬G¨cUùt‰ÙÇUÅBÒEt±çŠ¬Ç®RMtž¸½º“ÉF&%àÖ[’¼r už-¥ `g­k7¡ÜØÿRŘü¨2kÖµ‰¯%1ÞFqÅv—,‹¹P¦¸œb³‚Öå¶V¶¦Y íê[[9e¿6ãæ­ÿ C Ë4’ $œêVÆÛnåwvâ­Ï¡*'9¯þãNHÉÆHÛ\¦ Ñ©,5×xžcj‡¼€k`@èw'iˆ½XÕ!°Òbl†¨ «\Ž¡wuw)iß yUÍu0øf mË•È$ô®oRӞИ¥Û¼tÏqJ6¸4løwWV…mÛ øÀ®±OÈ3ÎkÉâg¶–7ÎXgé¶ý¢Ú6¨ªD"[ǨNi¤•©Sik#AÄ SCsŸJxù5¼Hhpv'Š]…©P ¼šqqÐu¡%)’ŒÒ¸,i[M7c4æ^qNÚw.)HùýiÂ2jb§4Ši€ÇùTb˜I"¥l÷éL?/"š›IÕ^jS¹¦Œh>iTšs€M#Æ0‚¦¡aŽjÀAêi²lUÉ DŠçàE4síNÙïPc/%XpE=ÈŠV‡^1U @†LñSJ‰¼2¸ãµ+B¡>^´YƒGµfÝØýªŠA’ÜŠÕhpÁˆ'ÚªÜ0]îÙ?ˆöª@pWv³ZÈë"6êzTj|ÍÀZèoµ‹ Æ6A8•JÖ]2yOîLeʬN+k»´ŒÈ­ä”‰’N+^ÛHHQ¥¼?"Œâ¶#‚$Fª£®EA¨G,–‹`™©s)7VçlpxàT‘u8%A‚ýj柦Çk!rÁÍ2÷kêÖˆœã%… 35¨Œs¬¥pzÖ‚bÂ6ÝÍEâÙ­#aÙêõ® ÒÑûÜ)·tÔæU¿ÓÕß2u?ZÚ)ý§*ñþÎ}MsÎ<ëŒw?OÆ»+8„pwµ9l%¹*/–¨ùA\†®ÔåõÍwaSgŒW ­°þ֗ކ”£v5´;A/ñÈk?ĪRùªÖÞ„ iбëšÇñ?:ˆô)§ï ¡/…Ôy³È{Ó½Mâw±Üà¥?‘+C1=Ú¢ñZ,Q[ õ&‹ûÃègø~6}DîŒ×kعîk‘ð¶MüŸîZí‚ך™ŠyL‘Ú¹ÿFMœlzÍt»GAYÚŨºÓ¦^ê¹Z˜½J8‹|‹ØäïœWW©¶.z­r™¯!GVûW[­®Í!—¸V“Ý‘NYs“ýk¸‚/.Ð0êzâ`g‡'ø…wñíh€ÇaEGk+SÖOúJ8¥ÐðoJŽr•kÄËûøˆª Œêì´Ó¼EmNŽ(ÛË*®&ôbú`{5z2'ÊMp7ÇË¿¸Ü3–8©ƒÔ©ìnøiOØ˜Þ§× X1¸¦øY°|öjw‰äÙø=w oqt9]VXÙ‡³šè ³ê’,P‚!^Þ°0žbã¦áë]í¬"8âdDÞ‚KQ¶VÚÆ. š–Xö‚z¶Ì6ZŽá޵•îh‘çúˆêR€?еü8 (=qYÚ²ÄÖ\ôÍiøY€–`}+wð™õ:€lçý»cùzâ¥'ŽOÒGݬ.ka‘ÇòǧJ“’=¡†¥#)ÇZs~ ÕSìðI’~ñ¥ðº’°ç'šÀÔ7Ó{5tÞP,¤ ÿhÕ EîÍY”9xÏB1\ ÔB+‰#èA5èRÿ¬äq\N¼ˆš¼›:´SzŽHÒð™ýäãØUÏÄËsžõCÂ|ÝMîŠÔñ:îÓI=A£i‰lq8$NÕèz|cìƒÝEyørv(ëÑl,á?ìŠu;œßŠ÷©‹Ö !ZXÔu,t^0b õ5ÎÙü××pþtã°¥¹èÐGˆÙERÖa'N‘ÑkN?–5õÀªZÃìÙñ×mbŸ¼hö<ð ®8®óÃYþÊM¢¸'<šï¼3L|ÖÓØˆî^x6\î*OZ‹U>]™`{Ò™AQŽ[­£¦•# V+VS<ýÜ´ŒO©5ÓøVe’NÙ˸óÒ»/ ô9 s—­¥±šÜé³&x®ÅQyvÑpºDfe×9ãGe³‰@ûÍYCsY=>\I*˜ú޵èÚ|'ì±18Šóh¿Öƽ2y5êv gôAWP˜W‰4ò·âUà9<ÖUœoxÊ3]wŠÔ-´.1·w5ÈI(IIN Ó‹º%îzlu¸'ø—?¥pŒ‚ßU˜†!>õÝéîdÓ sÏÈ+ŠÖ#_í9#‹,Á²@õ©ŠÔ§ª5|(8ºõ<“]5ÚyvÒ08À®{Áîå®”‚[°®ƒR]–Sî§ùTËq­4ž´–—y?6?Zê4Ë’aŽÖß—Æ7úW¹Õ˜‡ Íw‰&°.1»<šÒ_ 1ÜØµÓ–2$”™&#ïÕaíÁ Õ•ÀR¹éH œÖ°½ÍlcëʃF—<€Ípðê\^Hˆ1-÷wzô.t[Þ"¸uŒ#7%óZÖ#·Ñ-ØÆHÁ#5'ˆÁ]p£#§h'ÌÓ"b¸È¦øŸrhò‘ÀÇ5Ay)+p1]߆c_ìe`0XòkŠko7O2ÇØWuá‚£D„sµ¤ö&;’êvêleÿw”ÿC/ÍÔ±¯@ÕåDÓgfHâ¼è˳ÍÚÜ68üh¦97†msdÒ§ N?衉Æ+?Ã;Nš\œ|ÖâàED·Øæ|Z XÆÄãšæ-ÒUû1&º/ÈM¬=p¹A/˜P#œ†è*â´%ž¥dÛ­cçøk•ñ‘ó"º*2 tÖ,Í?Ýʳf2sÒ°ç†KYš7Rxú× e3Ï¥dx‡NK¨ÍÔ8¨éê*ã=u%£7JÔÌ-æ9R>V=«~xVâÍ—î†û§Ò¸f1Ü:ŠÙZ¼ž%‚@Tc=sNQê„™cûCP¶“Êh7¸àÁöæ¬ØZHe’îõ­÷V£‚Âþã3MvÈØà ®·Wºlä\’2Ãæ4´ 5âDPÅž]ºVœÑyZ3!¬Xý+ÙŽ¯­[&zéÚ¶u-ϦÌø—“ìVçîæFÏq]Äc÷h@<޵ÁHOØiš¤O§«<€Q¼©- NÌ×j‘Ÿzàõ9Dš”îznÅuöšŠÞZ<Å6Ž@÷µÄK iœã ±?­*hrz®š¾^›lUrª¹5ÍøŠQ&¦Às´ŠémúœWŸ_¶o%Ïv&¦žá-ŽÃ ~ÄqýêµâKt:Ys÷”Õ ¸];!—v5?ô‹Ðóµ{QÔ:)o•í]æ—(“O„ŽH5çì§y•tz³‹Y¾Sž TÕГ±Õ3¨ÕɪmªÛ$ÉýÌý«r¾Õýk+XÑ4pº³©ÌÚ­ sq.ïJÉ¿2þVÞ­_]à ̉'Ë‘€kgð™-μËŠR€ Örêq}­mÕ·1ªé”œzV5¹+r´ÇÎÞ)žQô¦yŠqŽ˜ gŸ_©]BuníšÝð•ÆÃ,LØãŠ¥â+r—æB0Š¡kqö;Äž"vçæ­·F[3ОA½Tó\/ˆ[ÌÕeÚ:ëíç†â5]OËœµÉIjÚ¦¯ •-ɨ†…ÉÝÞˆ,RJxÏz³â†Å†=ÅhZÚ­´QF0ûÖGŠ˜ýš4wR½æ…²98Î]TuÍzUެ!¸ùkÍPl™OpEz¤èÖ+!a…QŸjÒ¡0Üçü_({¸—°SX6‡mÜxë¼UÝjãí—í*/½gÀû'BN6œÓŽÁ-ÏNŠOÜ©=p*ž¤KiÒç¡^}©b¾·ÀÀwQžµCW»?Ù“d0X¨ê[z­ì6ñáa}ü`ŸC]¿†",õ5ç§Ï½v:ôbTóBuÍk%¡Üë2 gëH“8?ÝÍMot³Ñ°#Ö¢Õdó,&©+XÇrÙæ>_ÌOjìü"‹IAÇÞ®9‰PTôÿëÖ¦‹¨)€W¥* %›nZ™-F™‹ãL5¤qóƸ¸ñ‚IÝ‘Åuž-ß%½¹9ÚZ¹)]Ì«Ó Š¸ì)­§2›(÷á¶´yÁé·" Ó®Ñì";—îI®ÊBŸœü½«5¸útŠ$$Hßw+³ð„¨Ö®ˆ¸Áë\U²}¢ñ"Áä×£hÖ±YZ•pØäֳؘ­MO7cajuù—&³â,òe½kI°hÐr(^iå{ÓW,qR˜© àS]sŒu©[ž•fVás@Åd`9·ÀšhrÝx©~^3@¢¤µ.1Ҝǃšhu¦Xö¥Û‘ÅI§¨Á \qQ(1V Ôl¹ ï8¨2Äš˜uÁ¥Ð\çð§£1ŠSÖ&„=)€ÉúÒ·¥àšcàPÙ@Hªî·Z°Í˜À]†*DF©&îÕ€ò€&˜ƒÆjÂqœÐ"&‰÷d¾0*8Ë*๩ä€jÇ?Z`U’Þ͹®s^´– “P·dåë®,»p1š­8M SžÔÓ°ŽZÛ_k‡U•0IÆEZÔnî­vù0ù€½VNoöæu‚<¨x«’Fhî{•m’¼Î2âÎ`Ÿh‘q¼’EU†g‚a,g :b»¶†"ŒrÁ‰qá¡!-k&Ì󇫌»ŠÃ-¼AòsÁ>ê ‹ÙµPmá…vuÈ¥¹ÓmôÛ]óò· ]Ð^9mbP€}èÑ; W*è’}žâ[f_Ÿ®Et)eùOZçôÒ_[ûrs]!ÉQš‰>¥#ŽÕìÎåÜä±Êš‚ÂÕï.–%/ñšëu+e¹±tØ»}i4]8ÙÛr>våW>‚±<öÅ,%†Þ0Ÿ!W4/Œ’.Ò½ žOZÄÔt³{ €(UûÙ¥ ÛqÉÒLïe•päqÉÞVíÌÊUÙ³õ滨€V Ÿux¬¿Ú4ðå"ß1?xvÔµŠ~¼Ÿ&Ð&è‰'5gİùÖ+ V3Æ*Þf,íþîõ«wQ›¨¼³÷i7­Á#ÏTÃfCg­w Ù­s!ýäÃ-T-<<ÖׯYpP[Ñ¿Îp¼cj';è$‰ ˆÁÇzÈÕôA¨/Ú0u\+QÏ™NŽq³h=*Qhó–·•'0|ÌàZê ³û=ˆ· ‚ëÏãOƒO•õÙn&ŒlìkMÔ ã§z·1%©ÀÜÂmî]èk_úyšàÏ ùW¥Iª[íf;uŒã¹Åt¶6‰kGsMÏArêrþ!Yèa1ñšÅŒÈ®­ÞÏë]ô¶Ëpò¹±ìt&›Jè[¸¤§ ¥SM·¸[®tŒ>_n+ŒÔ`šÚéÌË‚XàûW¤,{qÒ°õ븶sŠQ•™VÐå´ÅºšàEm#€ÄnÇa]ìpgå9,ÁpIïY^Óäµ¶2I×cÔúVê ž{UJBHóÍRÅì¯GËœƒTÙŒ®¬²zæŸòŒN#´=.H¤ûDÀ–ÇÖýÂ3BÄpqOE;Šãš’llÁ³nì¤>¿°¹µ“{¡ÚNr*´d´ ô'^‡$)5»+nkœ±ÑKjŽò/È‡Š¸Ï¸œ Ú6œ¶ê%•wJFI5ªÙÞ; ‘ «ŽÜQ"õœÊKAî Ã‘QˆÀ\Ô‡"0¸ÍDI(F1H£?V·[›).éÊšâz>Ö;W£*+Gƒ\Ö¿`Lш ;R+HJÄI6+qq/—`Ãb»+-:+(q3'¹¨t›¶µ@Wç#&µÖ<~U3⺌ˆ’£˜v®[\±Ôn$y™?t½+« ƒ‘Ö’P¤ ‚}j#+0jç˜m9ù»qŠÜÒ"»ºìêO’ycV/´ŸµjÂ(£Ûrƺ{¶bŒ`´šÚSM£©Éëv&ÞÙ qà/Zçö’ØÇ&½7QÓÖæ'‹<‘\å—†$ŠìI/ÜŠ!=5éMÌ’-Äà…O»š½©Ú]ObbKe³ƒ]+@Ú1Š#<“ùTs;•m0ž7‰ÊJ…XÔ¶ÑM4ÂK çµtšý‚ɘN¥ðö—%²}¦TûÝ3Zó«òêni6­gdˆÙÈÔä eÛƒ‚1SÁ. 9µ%ÄmÉ·¥cÔÓ¡ÄëúØÈ×óŸjÀ8["½SPŒËVPÉŽE`/…A¿óÁ]€çm\gÜ—êŠF—,¨³\±)ü*j_FeU `⺨,Ë ] ÇJn¥§Esï“q \Ú•m0…XȤuNwzWe¡]ß^®éØù ¿/½Q¶ðä’jΛJÛ’¥nê—èö(W,Ãj*ÕJW&*ÆGˆ.yb²²Ìß0­}+I‚À) ™O&«hQÜon†ù[‘žÞ•¹övî-ŠÍË¡j:Ü[É6DÓ¸ŒW«Ü]h¦ ª[ƒ^…(b€õ¬íCMKÛ ³2òfœ‚Zœ>—wsox ³|ÎqÍzžóˆÜcyâ°|=áæ†aqp˜eè+§òǘW°¥RIì(£ÄzC_‘uúÄÅqŒ­4gå=Åz¹Q»ž1\î«áϵ]E,hªߢ¶Œr…Ì G}AÖV$D‡æ÷®öÍÙ€€tª–¶âÚ†5 tïWãR¦3Ö”§qE:Õ…ÅøýÓã½k‹š9ã˜[Ü®Ðî5éh¸$°¬h‹¨*4i‰g>´BVG7¦FY<‹Fq÷•ÑϦ+i³DN÷eÉcëŠÐ°ÓÒÆÍB®˜Š³‚J)¹ HòKœ£`A­¡i×Ò¡’!÷Èï[ú·†EÕûKm y®‡NÓ£±±Ž$\çÖ­ÔV±<ºŽ²³ŠÒÔ$\.;÷®WÄ.&{¨—‚>a]|»€#µU’1/ 3Y'mK¶‡ZË,Eˆ'•®—BÑd˰IÎUMZo «ê‹rUíësË$ap«”ô± :œç‹Ë5¬l‹ò)ç宜¹ =MzÄ_iT©•®jã†]MV,ˆO$š!+¡s7ÃöWw· žc­¸<ç¥møŠä, ¦Ûò6Õ«Û›m ×ìðÒ0ÂãÖ«èú<³\.¡vO˜yÓÒ›—Q¥d7CðÙ´a=ÈùÈȺ«u_/F #ÆLy€)öàí ŠŽkî;Xv‰N=jüdyuQ">kqVÀ@©l«ŒŒšŽý)˜„H:Šdd ‰÷À§!)P½5±Š“‚)¥9 Œb”¸A“Þ +ÅWdgëL ЃÍ4·ÌjÄ|¢Ç½8rÆ€ 4Ü‘ÍX.G×ýùކ£ O9©ÆIæ¢À€¦ANËÞ (Yò{U‚Ç86[¥4g¹ã“HS'¨©FKaFhÚ7’y=Å1¤sF퀷éÍLÈsÀ¦ˆÁe*Ù•Çcž»eÖ¡ <¢…W=7w«© ¾›g#»ëSjšl7¨¥ßnϺÙÀk£GuY/ Ñ¡ûªsýjÖ¤±¾ˆK%ÅÑ\+Ÿ’º,ÏJ† t1Ÿ•zÖ¬@­KwcHÉãïS„må€jD`^‘†2E5P`ZO—~=ê@8Áæš 2`íGQhÆíý!‹zuÃgІ)™î¥‘°‹Ôô«mò ùqÞ˜†ˆ†6µŒÆäÏ5™â[kYvF†fJÖlÞ)–UÙ &9LÑÊØ®Žœãw#ØÕ#vjœº˜·Ó„ó(W§©¨´]Tê1H]6² 1²±*óßß½4ìÆH”d:–ôëL9gìEHÄ*¤ñÀ¨$;eÈ«[AäÔRzR¸X€ª“¿hÝëW!æAÎxªî£è)mäXŽ (ç½ ÷)¥bA‰= 1Ž¡©^h_#zcëH‚9å`~•d ùFMÈÍ*ß­*òqJÃTj]ªF)IÀ¦àóF¢±ÂLÊzf¥dpÍ; ÃŽ´˜‡Ëš.;¬8”>qŽ8©AÍ4¿ÏŒqü©I\àu4®2ˆ…✱mhç½2"åÝT{Ô ¨Ú§Ên>xæXhXÛƒžô¬¥¨„‹¼`ƒÜT P{p£4ÇAŒzÔ×#¥5ˆzš€i¬2 "¥n)€ñÍ€€œiCúŠƒÅV3…ŸaÍH˪94”*z Ôi=zTÑ:0ašhB„û¸úRº€3Š" ógÒ¥<}ãÒ“#@WšIË‚)ãç8”ÖpÏ·p¬;‘Ã[¥X#µF¯ƒƒOÎ94¹#=ªFe#æ~Tþ5°b‹¤!L iM¤H¬§¿z·¥0"±äsRt\”ÍÄ¿3žzñ›¥ E f¤*Zk‚ã¦(8Ö6iV2£åäTJŠ}óVƒ6Ì©¦Kó1;zU]RðéºsΩ¸€+@ sMýܱ•‘wzP„qš.•>­}ý¡xX.r¡«³ª©1À¢4HÁEP`)Ã;ˆö¦Ø©@ùMöÆHëP4®zRÊòx§íõªâ\½ÍHõ9íHd„ @¦œƒÖ•Ž êHéK³ Rw yÈÅ®@n €h)HOËÅHè1H€+°;€¥ K´1 SÖ˜`ç×nƬ`rEA 怆S"˜ªI©”¼S€­ "7qÖ†Bx©—éH㸠 b U%ŽjÛð2:â£Tc’ER`G&0;SL[5%¸!j@99©¦Þ”õ ŽhØÛ³Ú…oÞn˜ C¢l‚MLí‚Hªò?Ëõ¦œTNwtù‡qIqp–Ðd8Uë&ÃR[ˆ$œÊ1’ØÿgµRLM–¯®^ÚÎIPe€à/Zu£Hl£2’ea“ê*†›©>£4ÅöãéïZ,vËæÈ@_â'¥0DìNJ÷¥2GLÍü#&±]‚[Y.wgaÀSÔѬ\·ö)tly uíCˆ\ϼ–óZšE·&8ÆñVLowerÖðîI:½ë©Óý†ßË ´™sUç¶ŽO+•7?µZ•´%«šTr­„ff&V›u_Vlnbôªí’˜žû½)Àª›÷Æk=ÙH”²®OãJY ¬UÔd›Zx#+ä¨9úÔ×:’ÙK »žR)Ù…Í\€“QÉy /NÀ<1R> G•Ïê‡vµeÿ? çBdA{ŽµÍøU2J,mݼÎ7_jßqåC#c€ #Ö¸Í0}»ZVn;‹gÒœV¢wGC§éöÖ6BIî,õI~×·E‚´|¨í].§þ˸(>b§¥rz-Ç“|!<¬™R Tv`K®Ë!ŽÑƒåî'ß½iøZà4mµQ”玦Ÿ¯Aš{9|dÃÒáË/³Çæ¿ý~”¯îƒGDHTÀ<Õ{‹³@Ò(Ü­UµÔVêYâŒàsQÛê‚âö[UU*§¿zŽVй¡k8¸¶Yv•Ü;Ó˜íæšŒ-Ç çªœ:Œ7¦Aá ¥k•q÷3ai$û W>–ZÙi„¢8ÁÀ'½ZñÈ Š~ùæ®è3+éQ9QÒ®*ÊäÉô9K» «[¿+s±'óƒ]Vƒc=œr¤ËvúVn¹wö‹Ø­c9`rÏéZóÜ7H9Ìy'½SzmM0Ç5"ºç“ŠÎ°½ó´ôšF<𣲳ê¯n… ×5e]#µB ³qÉô¬­C[ŽÅ’d®@ÀíZ°#'†ô¢Árʰ Š¡üõþ•ÛàžcrÞ”·3r½ë?Q¸H¡7y*ÑŒíêì™Xym¹ïX>$˜Ç§$y ¼à‘éN*ì!°õˆ'[–;CäYš¾’Ö8‘4e±žõ© (Fó»gœÓg?Û,!‰€æ«Ù“Òæ§‡ç’].=ÝŽl¾BƒT,-ÖÖÝ`UÀ_Ö ¸Õ•¯…œ#qÆXúV{½ Z#S#mgêZŠØÀ§«³p)ó\ù0áTTóèD²´[°p¢ÝBåø¥ lÀåÆpiç¡`<Üw¥R}jÚ Å·fË7zI_aìi±F*ä‘Û!™†y5 j‘ɪ­šüÙGj¡â™|«H¢VâN¢ˆ§p¹ ×z¶®Å¬ÉŽÂ{Ö]ìšÅƒq4Àö9âºý6KU0(#ëTõï$X?šªÜásZ'­ˆµÊ¾¸¿»›Í™Én2kª’,¨æ³4ÈØÀc\¹â´Â™"eÏOÒ¥ÚãZ Ôb)û”¶ÔíTmçQ!ŒºŸ§Z‚ÿR[9ÑúÇlb‹k`èl£ ÄwÅ1Ü/ÌßJ€àã¾j•¶§Üò[¦Y£Ò°liFàž 9˜Øß…UU$‚8« é7÷ň€Ät¬Í_]³°^y=Ö«ø‚âhÄvðYemªGj¡'ƒ¿ÑŒ1óˆÉ÷?RK©-šºf½m¨¦×|IýÓRkš¢iÖ êÃÌnµyìðͦÜìpUÐåO­YÔu9/¢‡9fUÃz¾Eº5´ TŸP•ØwbNãÒ¢·ž}>ìIC©æ»? @¤$…Wû¤š·7…ìï&·È;â›’Z-ÕÈtOI¨I±â!Tr}MmÜ…di1ó(¨¡Óá³EHS 8j³*ªÆU¹%Ngur–‡œËçj×’G¸¼…ˆAéŠî4-9ìlDS¶ö=³Ò¹µðæÀÁP±9ôÍuÚu ´o›æ9ûÄžôå%k -Kˆ“Èô¨ƒd §]]AmåÇ!Ã9Ú´›ÑArØ¢¡M¸\wªš–¬tø<Á†”œ*zš[YVR^6 3Œ×=%ÈÔµ ¯§Ü »Tv³*¼ú­½¾ ¶¥·JÇ ¢ÁsL:ò:(šçu-b[›¡c¥œÊÌõ±8[ȈÌ©ò¯3y.ô­@Ȥ¹={ŒÕA\Rg¤iÖ÷Ûââ]ìy&­ªð8®KGñrNËÇË!þ/Zë㔥XŒñJQh¾ÂŽsŠ–6àÓ³‘Å!Nù¤2PFêišŽ,îæ¦éÍ!‘¶F)ç\Ö‘½J S±@†ži¬@À§’¦…#”`SUwjG^x¦ãÀÄdQ°õ§íšQÒ…"—g|Ñ!8â‘_<hSšLáª\QðM `ŒÓÎqÅDÜZ’(¼MÚ§ 5 J@©ÑŽÅ$(Ç­F1¼1íNvÊ⢑¶.Oz2FQ¸ã§"«»¯–¹â¥ê„“Á¨d8~œP#×gšïWû9ØO­KýŒöÖ¤’Çœnj¼ o•,Ì­â-®~]اøˆŒ@àÎî'°¼ž×A2ªy˜$nzÖ:]_½Ä·™7“ó­¦–A–L|Øb)<1÷®W#nÕ<Ò¾ábÓêÛévÊrng_µd[5ÜZ£E#‘+ä1ëÏÓµ]Ôå—ûn%‰wmÚT7NkN ,%Ἰ`ӱȀ¤šJãiÜåa’âÏQ3™KŠv£ä <í–˜Ú­[ÆâB P<Â÷©üLNût\ci9Ê­=D‘ÐirK.•ܳ.k6iüO3·H—ŠÕÓ~]*Ü·/³YºQyõmBb>PBŸÂ¡u´5ç}Ö“ŽûOò®C쩬sÝ[ó®½Ó0Hƒ¸®Ì›Mj3'”ƒsD6c‘ÝO”:Ž—ükÏç‡ìZ¡ˆôúûf½A#¯Î+¹µ:¾»)AˆÁÉ4¡£E«jMuˆãÏ–1ÍZѵhf·vË2îCZ¯§Á·”acÌÚ«Ûꪻq‡ÀúU&ši ¦%¥ìÚ}ìrr6úÔº`ž]YX¤±b=©5 £X`ƒ$0âºI"X`i„`8OéNO@I”u}NNm-U‰þ,V%…ü¶á³·?0"µü2Â{»—îlg&«øšÅ ¸óâá‚£Ö…Ù‰†¿)’ y*À+CÂÎZÊDîŠÌÕ›v“bOB¸­ ĸýâÜÐÕ¢=ÎkQŽk]VRÙS»p­=RiæÐí¤~rpÕZ²Ž£oC.£.G\Tšå°‹C ƒ… ­Zµ0l¤¼¼¶60ž3–5@‰loð§©®—Âpþæg#ŽÜÖMô Þ 1ºdÅ>ml'omo" s0o›ßʵ¼3%Ä÷Ï+2¨àWôxjK‡œ¨—÷h9wÄ„¥û%‡NõWÃQâ)dsBiÄ-gbÞ­âÛ[‚eÎÚçnm®íØÏ*ÄçuZL]x€ ½dé]>¿‡F”€3ïEùFõÐä4íF[kµ˜ÌÇo5¡âiL·‘06)<;¦­Ô†gëû´ßsê@ÀW\è•swEÔ èjåK”Àë\Ö«ªK>0ÀÀNõÒxb/ø”¼ƒ®ã\Ù &»ÈÎeþ´–ìƦ…>¢nÌò@àVµ]~áÙììT‡Qó0®†Eö®êÚ†¸½&yçÔfF®òdsÚ¥;²­d;ÓÊ5YK33í'Ö³õ¹¥ÔZY[,­Àô®ÓJÐFží<˜3¸Éô®G[EmvDAŒ·I¦ÄÖ†•ηysbÚ2©· %di×·6·ªc'{}ë±û:Yh„ãG’=N+’ÑbûV´˜äš"ÓLM3Ð ˜Ê‹¸a°3W@ÂgðªöðÜïV 8SX¶h‘Îë‘\¼°\ÛÇæ¼MœTÚmÆ«}xå(èEj¸Kl´¬ªž¦°5Û¤^M£†ä;UG]ô2¼U$WZš¤|ÉŒ`V^¥§µ‚Â3†t‡½uZŒ„ý¾åƒÈÀ+Æ)ÔÑ~è Ž*âõ±-ir8ì´y¼Æà—>µœž+¿ŠRCxv«~УÔlÚ{Û3€zµ?‚îCDø‹=¥–ú‚½‡iúÕýÔíw*bÙœU=~K{|Ìv1Ú¢»§Åk§ù*«…\~+Ï­"[i@~Ô•¤=‘ÙêÚ”ö[tÞX~UÌè¾!ž ¹ÃÉ,­jì5¾Ï£Lzüþ•ÃøzúÜlÍÖˆÚÌ-ø¦þVÔãÚÅB.G±§Ëâ'}/bóJí  _ñuªµ¬SÁ#­Qð…¢]I?˜›”ŒsM[–à÷Â÷—'|D“ ÄŸZÍ´¼øƒÏfÀó3õæ»Øth,lç`?•yŠý¢ºqúÑ4Äîzmþ±…šÌUŸw@+ˆ¸ñ5ü—La}©žõ®ò{dm3;r<þ•çš: }H]À1àôëJÔrgI ëZ…õÀK”eŒ.wÁªšÏˆ¥[§·³<Ž­].¦ÑØéÓJ€.·®+ˆðøšæöP‘¬ÎùáºJ6½ÆÕhW×I¬E$ŒÇÍ;HõââI§“Sc+ŸWW§øf+WI¦ËL¤œv_jçüdˆš˜9Á(*¢Ó™fËXººÓD‘±'ÎõÎG}w§ß4Ù>vH9®óÃV±[é8L[Þ¹b!6½!È!¥ÔB×hMhvÚdòÜéÐÍ>7²æ­jsÓ%ÇÞÚ•vþM´(:m-Í·œ……#ŸÚ/¡æÚ>°šeëÈËÃõ?okÜÓiÙ±WòÈÃ?¥sZÕ‘Óõ`'‚r+µÐí–¤Nƒ œÖ’îJìr~½h5uBç6=êçŠVá/™™‰ˆà€+>ÒÔÁâHáÆK[þ+µÜ±²6o ÐítÁhGáýZym œCtûx>•‡v·Vú„“\¾ÙQŽ¥vÞÒ ³°YÔ6EÉjå|Q†ÖS…Ç­$Óz §c¨Ð¦¸¹³Ž[ƒ–þu[ÄÐØJª¬€ÎäÇZѳO±hé +V¹mÍÕ¼Feœî ’ ô©K[—ÐÅÔt™´æBwnAô®ƒÂÚĦampä¡.k Ö´ƒy¥Ëp®+Ãð¼Ú¼J>ãþu¥Ô‘±éq¹À9ŠbE­XRƒ4@Sš: s)íH >Ô»r9£øE<áS4Æ\)€3K»4 ²ÐMZQÂÒ²ôÍ@œâ›³p£q£€#A¦6wqS¼iŽ:Ð!%i›v¿Ö¥F9Å;h''µG·5F{U€FiŒqÒ€ Ù­+)QšzíÏÍÖ’B d@0§àKã¦)Œã84E.pN*&s´Sä$÷â¢=½¨Þ Ò˜êÞ\˜á¶œ~U(ϧ˜IÃ`cèÍ#™¬õ1+Ë99õ5·y¨hé ¹UV^µc_ÑT¼sDéi©ÿ²£ƒH’Óhû¿>;šÚé£=S(hw‘­”‘PåÊ{ñPhW Ón!Uþ`O|‚¯é2¢W\HF>oJ¨4’5 ¹‰xG|gŒQup±™#í‘#‚2ù­?( âqGˆ-qÓ§˜aš=µÆIa*je-œqÚ…­ÄÓ±W¸– J®=Zê-®âº‰%’9Åeê+Ýi°¤xó¢g½ciÒµóÄÅU¶ÑdÐõ 2Ä`¾1½¿>Õ'‰úThË·4±i,ºÚÇU;÷NàÖ¦½¦ý¦ÑgLo‰rWÖ‹ê&Ò¯¡’ÆÚ3&%HJ_aíf—þzJI5“£ÙK)µºm!Elh{—Ær3Q/!£LÆœ‘Ú¹=~Ø[_Åv«„'æÇ­uÍÊýãéT/mãºànÝÒ¦,vI%¸Ò÷Úm2²¹ªºFœtèZIÈid彫" JïDcÑ€7ÊOaZqëöW'ÌMêʶŸ@VêhIŒONžÕÉʾ~½û¾T?5¥¨kpĬ¶äË# |´šMˆ,… »sJ+”¹‘{ mh0<WFYn-ä¾òò¬-cL6ú‚ÇXIÓ5Òi:rÙ[~de³Tõ°µLäôÛã§_–q„c†­J·qÚÅÝæ€:Õ_i_c¸ó£?$ÓÞµ4=ÉE¸¸ÜfÛ•SÑEUÖŒ”Ê:õ±·Ò­/Ýù~”¶š“Úèê–ÐÊÒããRx¢v0ÅZÚDA4Èw½)_AÛSƒT¹´ÔMË–.ÇçS[wÚ‰ÔtYœ ‹¸*ŸïUMuÝ˽´$$_}Å&™dךÎ\áÊ V–¸lixMóm4dŒ†éXò”Í•Ç\ÕÛ=6êëC‘,[ >”ì· ß ]Ú9`ažiž!¿’æ¥mÇïUM;I•õŽà2¤_3‘íZ·­®^"DZÅÆ{Q¥î ûÁOü#@8À.0jÖ{ ²MÒùºÖõÆ•šKYÆ£vß—Ü×qe=½Ù¶)ûÂxÅ´“ Xè”mnÊ«äz¹¤è2_iÍ%Û;d|1u!ð|¡o%‰ÊË‘Iâèö^DÀc+Ö¨Z‰4ím#ÕÆ¶5ü=@ŒâRMqˆDZîîÂ_ë]Î’Óá^ƒepºµ´¶·ïA,H4EîcЯÿy¤Ìc9m„Šâ`uÈÆÜ¾âI­½?Y»¸Ytë²|æR«žõÌO樆a²L’î* ¬)jBñ È·Ñe‚˶¹/Æ­¬³9ÏËWä¶ÔîÒõ§Ÿd<åJ*Ì7Gw§À#Ó!_úf¯9¸•WZÈ2õük·ðÌ·é1›Ž‡Â¸­~É­µI˜#_"š²`ö=FÍÒ{H™” |ˆá‡ÍøRÞò+Ó»mnBú ÞpJíÞ³kR–Çã=¿Û î×U¦lIˆ‡vpk’ñF—yÃÜÊs0½*LJ4»ë—V•Ùmȵm^$õ44}<ßk3j‡`?.j§Œ®?â`±nÀ Ú»h¡X#ƒ JàüO§Ü­ó\¹€)Eë©RØê´`²¡9þzâ¼BàëeÞV®£Ã1^GdÂá‡>•‘âlµ&¾ò÷ÆÜsDt‘/TtÒ±}‘Éòz~ÄøzèXêÂYåcŒ~5Ôøq'¸µi.A Ã¥rþ&Ò×M¾ ÇvE8õØïïæÙ§Í&~M„ʸ¿ Ã)Ô|ß(ìÉço½EÆ«ª2ÛJI¶=[Ú»˜mbµŒ"¿N¦‡î‚Ô²¤†ÉàSÁç5A fžÝ+2ö$"œ@/sI­9±Hñœfœ@aŠl„qŽ´ÍÍ¿ž” S…§gŒ¯JŽ_š¹\@dw¦3Ô0<ƒ@ ÆiÉÀ¥ç8£yh¹ñÖ—ŽÝh œšV\ nÒ9¦áóÖ”¸è:Ô˜èhÜm\š‰Ô¿+S˜ûv¤Â¨ùzÐ1ÇÏÍAäàT£ºÐ‘Ö˜±8ªìåÉæ‘Iž´Î”„ ïíQ…Ýš~8>ô£å 5ySžÔÀ¸çw_Ò¤=YºTl>\ƒ@î7HQzb£uÃã9íV%ûêMEåüû”ñÞÄPÔ¯×N¶.IcÀýU‰YçýäAP‘‚:â·ï¬£¹–e„YùO½d]xz ™ @æ6Ï#¨üªãËÔ—~„×óÁqfˆ¬¬îà¦:Ô:ê ˜?ëOƒN´Ñcóî‰è\~“ÜZk 0Èw«ïŠz_@6U›*Ý¢[+xîZäG‰OñzÔ„mdçñ§¸ ƒÇÒ£©V#›Ìh?vpßÞ¦Åo,ØM¬Ç,é51R‘ ˜t¦žaBÞôÀ±Ä¼ªoï-I³z°+œqŠ”ÜÓ‘˜óÞŠz•´’iÓCŽq€*{JZE J³ÈSúÔ[ŠÈ–„Á¡ÎÅÒ8#“R7Lõ ãh@G:Æñ—š5dwt¬ÛÂt‘y{¹ùiÚ¾¬4ð±,FGqߥA§k"úO(ÄÊ@ü*’{ o ø´»;vÊF zµhYãÍm =*)w«Æ#P{šW¸Zæ†9$Wp §Ý©U`–ùzkc~´ô<;þ´ ¹·Šqš»±ÈÖËŒéŒdv©efôúT GQT¶°Ž{ÄèAñò†ÛšÐšõ­t3$|0^¿…Iªéò_ZˆãûÊr´KfdÒþÊä+Œý*¯¥ƒ©ý·öT–ä:Ÿ1ÛŒ“ïW<2€iÅŽv³–õEôÝBx’|µ„ H®†Æ$·cNGôK`ê[FTQª=À—`.£úU+ínÖÉö7Í.:*Õ _A%Ï–èÉ“€zþ•6lz’Æ’FѸùX`Ó# mE üª0*mÛˆ9È#"˜Ù\I0Ƴ¬¡•¾òšzA£@Š8P(' êqK¸“‚rOjLe ÛHo1ãå^~Z³jˆ›#PB£–æ!‰¤A+tÔ±adå†zSÜÉñËg媮Ñ3þñ—®+"êõî¦X´µuX×,Ë×Õ^ÙÁz›'@àNµÓ­çx-ðø†j¢Á¢¶ƒö™4°n y‡#'­_e¸ºûQPÓ(Ç5gh‹¶zÔ¡ƒG¹H9ô¥ÖèjÅi‚ùLŽP(‰#‚Ûdj9ÿ’p6ƒß¥SÔí¦“O)nÛ\õ>Ô Æ~«y¦Ü˜£»ps´V½­Ä ˆ°Ñ›k‹¹ðÕÚFeF7QЧjÚ¤˜‰fVTŽ*¹o°º›ºä1ÿÂClc_›vX~&—γ[Z2wíÅO¥éó–7—Žr8'µMªÛÉv-Di²òE0ó5,YE¼KŽ@ªú†“k¨²4Çk)«å†@ê?J™†Ò¥ºÔ» ämàXׄQQÜÛE}dñH>B:Ô’äÅÅ*äF)Vε·X"\(È&ª6’·:ÇÛ¹µ-Á9ÈâˆIˆ=3EÚ‰Š vÁâ³[G·Kù.¶æµs}ÌUIgŽh#öÜzÒ×  Œà¨ü)â\I´ÔP°‘–@À¯µ:fŠ);ªg¦h –®¥BÎ?…s\h¼Ôõ©Ýa“Ê…×Wp‚æÕ£ 6°À"¹U‹RÐ¥E ÕGÌL'²»ÓÐÜ æfQÑúVLw «k ,å‚OCнr5d: xW¹­K=Âk-ˆÊïŽX7zµ¦â71ňˆÝ•ÆW¥giþµ°¹kû‰å¥eI§ë6Óï éNUñ Ü~[tÝSnÅ=øÇ7Š¢òpJqڵﴵ¿½Šæa‘û´ýCûy¥o2VêÆ´¤Ã1Àâ“zXH[vE‡Ë 1Tí´[kKÉ®ñ–sWÊ/’0qïB §-Ï¡©»ƒ'ŒÍĆ3UtÝ.>=¨ läœUåp7Ý*»jv¦m‰:’#4+ôe²Ãšâ>É»ÅÎ>ö9ÅwKûÈ÷)àŽµÍý†XüC5Ô¥V"0 ¢=›Ñ3Œ*•î“ýÔO&X'8yˆxÃ)=Á©`Æ0 ÜŠ8„j¨°¨u·¸Ao*‚Œš¸reÀéQO€_Þ€°Ë+Hl­¼¨W 9Í6êÆÞýUn!MYXñ 'èÔ,@V8Cà€TrÙÚÞ:˜””éVH9æ$jÏ­HûbŒ*¨ *fÂ…§¡óšdŸ)Pe ôAf€;±IoÁ…E@è*sÌgÆ£ŒÛ‡Z5……–Š¡uh—RuÎE\i#T,Ä`u¬ÅÖmZóÉ[…/ž™¡"KäyQ^ž•¤w‘æ]ýÀ5;•eÎ3‘š-Õwùšb(ÔFª¨0£µSÔ´85I"3gå­"T?üƒÒÄAmm Œ"8Ô(Q­);ÎE:`»sN€.)\v!ÆMYí¨â^*â*3@ ŒsÍ+*L) }é U#>”Öû¹ hÍ7i硤;õëLq’=ªm¸n”2)\Pf”çäsšVŒf€£µIíJzÓ‚œ R:S1] ´¤qÍDüŠ€ÜԄ˜XP¼švîx¤À#­鯞Ô1Ž”åµÖ¦ ¤`iœ©µzäÓd,Gãò°¡¦±ÏSÅ+ƒ< Ò‚)ïÚ#í ET7÷¨IÀÂñNiý£½&ÓÉ  óîÜ­ŒÔJIùqW3ž¨ ~=h)Á1”E¢#9ïR0xíÞ¢žå-ciÜüŠ3T‚Æ'ˆ¤DÓŠ6ÝŸ¢ðÞžcÝu*Œ°Àª“]G­kq+ebsßoÄÂÖ­-Ø£8çoPJÒÚXަ¼Å‡*FìãéOƒs6[î+‹³Õ§¶orè:†æµõ[þ%Ð¥¹ÃJrÇÐTÊ›èR•ÍâøFf*Tw¦™”¦Qƒ{öËi÷Sl¸³v-½8ɪv×wqÚÏ;Žó–#Ó4ý˜¹Ž¾YÒîO&¥[…Êã‘ǽq× qý ÊÇi•ZŸÛo ¤"ŽE`¾§W=ôPÎ iö˜×vâx­ËâGZæ/ŒñjË#òù}ê¼íuý¤ÎÙIùEÍX9Žèe!‰R[¸£ºaœžÕ#JRÕZS÷W/ùW7hŸo½žîOøö@NEDc¸7¥Éj¶ÓÆ…º¯=ëŒÑošÊõ˜ùmÁö¥Ôï%½¸3/ú¤8_sSìõ9ÙÍqF […ëRÆêÒÃwQ\v¥-Ë;‰>é@Bû÷§Ú ëÝP8(\gwLUr æ:ßµ[Ìíº³¯$¢šHY‘ÁÇP{Wo%;¡/– Lr¼Uý-o­ÍÍÓ« )$çµ'ƒ˜éþЮXgP:Õhn’y )Üñ®JÚþtžFRÆGì)Ö7·êJàŰE>@æ;Y[…Ç>´²Ü-µƒÊOŒÔŠÞ|2àMekßjû†Þ/‘—æ5#èPðü±Þ_\Ë.Öò¤úUmBÖKe¾Ï Ïͦ8v-pz{P¢ÇfÑ$‘éž+‘Ÿ]{F8˜´0«àã¾z±á½jYnL7É»%j§ˆì­ó]Ævå•9•8«=Es°³–)@1º¿û´é 2Œðyî—q¥ßYWv šôEšm¼öaåí>”J ˜Ë‰â‰ •À^Õ4K ;¥pö¬÷×›Sˆã8ï[ÞñžD³™@ pi8è;ó"%M5AÜüdâ´0ÀóÉ®SÄWeµ {x-Š…®ƒOCoPk…²‘í†dŠóÍI5FÌ—bL™é^› •EQœ÷?…Eyf—Q4R mÝ3N/•ƒWG¢ø‚[I|¹ÛtxãØÔ¾¡w}9‘Ë,gîš©¨Û­¦©$`ð­Ò´/õ[kËx-Ñ à€ÍŠÙ¥¹¾¾¹¸±1L¤¢p tЫ¹ —5WGŠ´ø’ À$¯zÖb‘&íØg5”™Háü_|Ñ]­»°ãç˜p¾••âbÚö*4!Ã=mxRÇOËqy“ÉcÒ©ü"¾¦ÅÃeÇ5gKpq\ç‰5‘§ÜÑ7z|E z"ÜHB» ÷¨³*æõ¯ÌëÐTn¤9P95ËéÞ0I$hîS`þëO¶ñŠM©dEnÀj|ŒwGDû£ƒ\Ü3j7šÓJ$œcÖ¬xƒÄÆÎeŠÝœàî>•sIÔ—TÒÝÑÊÈ´­ÔWèbê¤Úž¥™o#FÌ*ç†/¡¹CV<µSÓ'tñ2ù„~µéS]ÛÚÚ$pªªzl$®È´èeµÓâŽFÜáy5ÂxžîéuW…¤`™Ü1V/|O¨KxVÔáAÂŒ}êÈ×&ž[¤–àbF•¢1ÖãnÇ£iÒ S’JƒÉ©ÌxÅp/â˳1BB»MT‹S²Yüê0E)G¨“4fLk©ç#ùW1®x§Ëg³±¤ä«;úÕâjgžFe~H=ªTsºWe\çŠHÛqnÕÂ_x¦éu.2%|ëNÔüY;ŽØl=Ï­?fØìä;¦šYŸË gŠÎðö¤u‹%‘—çNÞµ¥DTglÍKV}DO– ƒ“Ô ŠBÌ~u…aª5î¾ðÂÄÀ€ƒéšéž,+2Œ3JøÆCŠŽ"ã½pº·ˆu8µFÖ羑­nm«ÃWbŠŠÕ”•™KR‘V2f¥‘NÑVJ©lH@|sH…‹sLe•9 ¹…)̧oJ@†Š™±íÒ…©¦Ê=¨*â“‘ïIŽ)Jvà1HD2n§FzyRüŠjáO4Àq'µ7“NÈæ£Rwq@}Å@¦Ç5/-Å4©cëZJZ!%gsÄú\pÁÌh«mm¿ÅX¥TèÉ!'w˜QOµlkzí­õŸ• ÜYºSSE–M8Áac ©]-Ië¡6ev_iÜ$vdö¬ÝQ©,g£gµ?J·¿ŠãÊ}É äØÕy4˘µ±<7Ö…¸Í p£X‡Ê° …"®ér[®“¨Áæ¢þÈHh ÜäïSêj¥Ž‡"ì{‡*¥¸úÔÛK¹¯•ÖãLdap>¤Ô:£cWBN6ÏækGWÓn®õ$xB„EyíTï4Û‰µeYíÀûU+eBîIáŽÚ™¦ý+^ÛNŽ-)íâ;&9õ"¢‚Æ8.â‘úµØ*ÿ1NQz75ÀÉ –á]pÈÃÖ»6Ò5¶ódKJ715ZïG7š²]1_+ƒWoïàÓ"Œ>nmÝY¬îrúå´6ÚŠù(TIŽ&• \^¼r¶"S»iîjóˆu}^6&Ôõª—Ú]Ô—îaÏ ;S¾–dõ-x‚HþÓmãgUükz+‹|")]Ì;ué\æ±a/“nø/9X޵kLÓ¥†TšlîaŠ:KLpN—àAbxôªm´+jreKê­ª´„z×k½½®›$píÀŒäŽ¤â°µ½ ÍÁžÕK9*¾µ.Ÿ§_-ŒââM¦DÂŒóOF‡ÑV;Ó\WAª*[ØO²…8Ël®^É/íîØZ†ó­tÚ~›4³}¦RÒJÇ¥ L¥ám  àI»œ÷ªÞ$µŽØL ~N*‡ún‘zŃœ w­xtû­báo.WËEñ£Ì:X¥¯ ³Û3Lcwç[úš*xr_—øsºô%ú‚ .ÚÙºk“á&7+†8úPúõ*xRRæwQ…Ut1¾ &A‘’Ãó«^i"´»˜©1íÎCYšLsÜj™‰Ý2Ķ߭;ê¥ýÇ⥎é³0USÚ«xšKS©¨‰FWñUõ„žM_1sÀõ5&»b¶‘ÚLο>}h55“mqáØ%‡.1íT4›hu<‘«IŒ!4ËËY,´ó™qí8mÐ.Y›P+x\§Ú' p Z¹áÜˬÜI*®â1úÖF…ks=ðh¸ŒðçÔU‹–ºðþªòƤ§sCW/x¾ÒH§EîÁ"¨\]\CáëUY>W'55ÍÕ׉c…‘{±à~}ëZûCWÐÒÞ!™b—ØÏiöš>Ù3·V5†-†›âˆáødãØ¯a©Ýè÷*¶Õ8*zVΓ š¦¬úŒÑá3‘OÌGKªjãN±ßÖV øVV…§I4ÇS¼$;r öªöÖÓjš»Ü])М(= uH## ˜Æ+7ä4Kªx\U[ûè¬mäšFÆ¡¥ž7[y>È6ËŽ y¹{çÊ€7P•ÆÝ‰ôý9õ­NK©F!,I'Ò¢Õ´û`ÎÖO¼!ÃûU+mRò©¸‹Ð×_áí4›)æ?ÞOÃf´z¹•áhÚÉöYÜ„n™­ÿßI’ä ûWªZ¾Ÿ¨È +åkz{ÖÖ¼>P)  5-_P½-#F²¿Ñ2P3¸äŸZÇÒd—I×>Æ›i•_D×›I&)b'œv«ÖÀjºÿÛ!ŒˆÇ¨ïNÃ"ñ—:Œoœ–_ñ©"Ò#o ýªL™”| ôªþ+.š‚+ÿv´¯eÁñm8,il‚æ_‡4ˆµ;‰Då¶'aP=”?ð’­¤A„jûG¿­jx2E2\&~| ͆S‰¼Æ$Ÿ4€UÝÀè<_iV0K·ç(aô©<+5‰aùNrÕ_ÅÚ”mi¦?xHlúTþ ¿j`(@Œuõ©è;êsHÆßÄ«“ó Ï?oøÈ³[Û쵫3$0ïs…$Ó]ÑaàÞ ¸U¸µxßý[ dTnYÅø“XÓ/Bˆç—ô­ÝÖÒ1,* aɬ}GÂVâÍå·ÈeÁïU¼+~ÉrÖ’7`zÕÙÆÈ—£*Oµ¼cº¢\Ö·]ʳÍ`ëKm¯I>ÎUò=éú·Úïìa»¸áIÀSUmP®mø‘Ë1 n îQ?/&¼ë¶W‘Éæ’Vp¾µÞÛ3y`÷¬§¸âY^§5?9‘dË‘I#qRQ"曞i#<’j1 g*9¢ÀNHÇÜÍ4¸^´FC±Á¦É'"§,MWÚNµ2ç,sAÓ³éÖ‡8ÐQ Œ0ÍGô§Hr¼RÙ4Ž”8ã4¬hzÐl(÷QŒÓBŠÁ¡óÅ! PÙj7·ZG\Ž:ÓÔÔÏ›qô ({Ó˜î¦i2JàÐmÓ‰8Å!;[š•  µuØ8¤85jvŽhrœ…Í@_$ŠyÜÑ€i¾XÅZzô & Kµ@æî*Ñy Ö¬\8ªñ€$$uªBb¢Ï8§¯ßëÒ£†OÞ0&ÍžœÒ)‡ ÏJÁñ770F°«4`üê¾µÐM ÈS×R€@ t¦…kœ¶‘á¶ÊÏv¡{ªë]_qÓ6@S¸Š€?ÊxÁ¢M¶4‘¨$äâ£yÃpÏZÃÕu¹­¯(ÕNÓžõ¡o­Cýš÷ Ê cÞ©FM\I—ä;%D@sž>”ãóJ¥FXWºÕê\yþaÉÏ +©Ó/’ò%“€ÝÇ©§Ë¡<ÅÎ@#·SMXüÇò=)ñ‡ÞűŽâž¬9ÀÅHÈ1(RÉž HèÁ¼Î¢¢óM‚ÙÈÏÒ€&Ýò u®wYÒo/ï7+)@1Éé])òò1šlm•÷'`µÊvž–VÅÿõ«Šƒ<ŸJzÞΛ¹Œƒm;ÝÜ-b-Ê.•YONÚ®¼)È¢Gù» A×^ôˆÞ0×!úš”)2›#ŸÂ›Ÿßc¥K$<EÀ‡b‚w`{Ò}‘?v ÔÔ’¢ÉH§3¥½¹i8V€±RêÑ.,ÞßvKŠå>Ís¤_‚ÈÅAà¯zè4ý`Þ]ÉÆ6)àÖ¥Ä"iáH÷«¿)-_c˜¿–]iâD…£Eàî®’ÖŽÑy š€H¢V*¹Ë¯Ì’…·Q9ïF¯aìtÌI˜/¥”2É@æ²âÖ!šÜÝQ“Z̶ñ$†å…ÈÌDü¸ê)r±\êyjX(õ4ôÇ•¾LÏSP­ÔSÛ#©ùH®sÄóÆËnä#$RI±ÞÇPñÃ7ÌUž½jÒíÙµG°¬CVÇTmbyTJ€í9Ò¥–Ù'‹Ë–0Êz­$ÈÒD¤7ó©!c€QS¸\‡ìÛÚ˜¢UUªÖö±Ûa‰Tž¤Uù°ë´Ô0ç,w£P+ýž).÷•‰ÎãLº²·¹¹W2SîÕ¤R÷Y=3ÍI>Ó’G'¥±JöÂÛP‰"—î'@*¬zd Z„ýÙ­AózRÀA•€õ¢â*Û[ÅbD1 Q×ëRÞZGvŠ%\ûÑrÃíc×8«N…cɧ¨Áv°…Ž0 öªí08ÁíK´´{Z›`EÈ;Oó¤ØìcÝh0_Ý,Ò<¨ïZ&‚Ž/–5¦"³]ä1â­\¡qƒNâ±UѼ’«À=è²Ye8ªº®¤ºm¢·ÞfáEcÛx¼Fä|Š[؇U´lYÏ>•£¦Åª[baÈéX–Þ)ûm؉`Ù»½iC­Û=Áµó™š9Z ”´ï Áo9’Äl@Â+€ ãÓÚ¥µåÉ`}Aªz•êYFó¿ðô¥vô ©ø~ÛQ¼Iäà/P;ÕØtë{hY#‰@#õ® ø«Pº»O(€¥±·«¾€ÈöªÎ0H§$Ð&`j~ŽöXÞXð~jÓ‚Ê-:XÀÈ&®¤€)^õÜê¨W#>Ô]©GQÐíµ ÖæBwb ŸDvkl®V%­Ô´V8ɬ–Öímoض]Ž0)nZ~™o¥"‘¸$Ñmáøío^ñ†æcœV£*3‡Æwг)ò£Ë÷¢ìFU扩óÖêöŸe…·— (#‚OzžDÛx÷¦À7—ÏzM½‡c…hVïÅ’mùv¹$ ì~Ê⡘'zÎÓô˜âÖç¹cÝ+}ÙM¸ñNRŠvѧÝUÜO^õj{etyc“¡Å2Á¾öæàÊ™­ZZ/ïdÁÀ¥«C;U³’úù! ý;VŒ*–å1\÷Š/§¾&&p©ÇŠn-v†Û#ž¤U¸²nŽÚêp¸u܃ïM´µ± €ŸÝô¨´»Ï·éÉqŒ2*Õ¾Içïv¬Ýö)Y”Fl—ïr,ç“M¼ÐíîfG2¥kFzI§ÎÊ9£P †;x X–0¨½ªâ2ªŒ/Óª”a‰*àRPC)j¼Àm8¨ŸÌŽÔ®Ü8«Î»žrj9XsœƒBcháá Ô-®&·•7‡ÈP{UýH0‡»˜‘†@>õÑEeo$¾cÂ…úî5bx£€*œ´ÐV2þÁmwóÜC–SÁ§Í§[Þˆcb< ¹ ä⥷]²1íJã² X…ª ©€8«q?•ׂ*l&\ÒÜO˜³°SÞ–líù4r×Çzšu’{ÐtÞ‘ðy¢(%dcÅX!4¦QÈnÔ\ ¬]ܯZšÝ]"¡Ü^\•¥ ü£"€950`W¡s×¥9‘1ÇZ’’#iȦ;±< ˜%6ò(œëQ°Á¡•±‘A<c­7nîM9Tmæ—§€3N –"œÛqÒ ÂšaTf‹…†Ir §Ƕ)wŒS¯z.!dR٨߀iîûOƒMD.Ù#Ö†4ŒW@K¬ÏÛ.:z×?¦[íHíæÎÐØÛî+¾r¸nEqQ|M÷Ì„ŠÚݱ]MýGJ†âÑÊD¸V™ ¶Óî¥l‚„}ë­š]'zå¼ÍòAÕæÈÏJ¸š$ôé§ Ç÷ÌÜ}=kOEÔ>Ó`ÂF&HòXú æÒ;wÑä•·}¥pAí[z2ù³DŸ½ÁϾ*œP•Ê ºYäXÎS8Švƒw,š™wl¡·÷hÒ#Y,®ÚDº©Ç±¨ôå ¡ß•À`zþTt°n¼LæýDû0;[Üf¬^k&ÛP#æ'ÁcéXºvžÚ„¢=¸D9‘êÞµk«[D8ˆSïÖŽU°]—â×MM☒¦j+m}~Í;ÈU\â­¦‹ileu$—Bü+ž³³…ìî¥qþ¬ b’H5:m"ü_BÎÇÌ*¬šÐƒYxœ›±šg…­×ìòÏÎXí…Tñ&žb¸7hÙV8#ßµWô.jºòÚÜ ·Ã÷&‹Ýmá¶Žæ\J0 õªšDWZ;\ä™1OµTšÙ×DŠFbH|O• ìÞþß…4øî&Êë÷z±ÄzÖ˜è¼:z}k™`è‚íܗݵièCìÚ]ÕÂòHàÐâ6eΗ5øÃíÁãÒ·´íau &,“þ†¢Ð솥÷7cÌ p¹ìk"êÖM#Y ¤ü¬Çò£G£Ú£º¸¦ŒdgšÏ¾ÑíäÓ$ÛœÖÌKæ[#`ò£9úRܺÇj]†B)8¨ŽŒ{žy¤FRHI+ô©nÿ³#Õ_‚“O¶šÿU2 …‰$zVÖ¡á›y`2Ú±£$zÕ·bl_°KY-ãû1 ?Ãñ µ’þ$ó¸fì+2ÇPº±I£‹ àŸCÒµ п´4“vd&à‚qëCµ šš.œÐ¨‘®L§x±mBÁâ‡2²¤hÌriÞ»–;Ö±w$º=*%Š=CIJC?Ýg4ÒÔ=N“Oñ%­ÝËBß.ž†¶Ï—.\tÎkÎu!ô»•hÙŒg”oJÑ»Ôço Ÿ•f`™N*\SØf­×‰mŽ¢¶ñÃ8.=jäú…¾Ÿë–ÚOOq\=£^É6á·çæc[+³–ídvmÙùSqK@Z›é©[5¿ÚÄ›bÇãQÁ«[ß–šÂ'PÕÊ}†s  —˜ˆ³ò§jK³¼½†anvÆ>ùèåB»;{NÊð¼0È7÷©ts°Æ­pú2ÿnE¶ ¸Šïu y&°’+~$+òš™+ jc¾£ÔÄ%òá»Vó1ö,zW™Ékqm~±Ë‘(~¿ušÖ°ö‘ZÅþ¹ÔÇéM­U€Õ]JÅÄó€ùäTÌÀàç1ž„W†¯nž9‰Ü®Cšî¡µXáDÇ 0~µ2Hz‘[A³æ<çš’tf­XÀU¨ô§w¥q˜º¦ŽºŒ(ÕFkŸ¾Ð¡Ó´Éf*YÇ⻓ԎÕËøÊêX,ã‰8G<þâÝÄímN: ©¥ao¸¼Ÿjdbh¯0Ÿ4Êݺæ¬XY_Ï“ZîãïíôªÖîmµy8Úß1ïÖ¶!•¤ý©ìÜŒLGOåTµý<ÜØ2´›Xsõ«öS™mÃÅ e#“é\Õü³ë—¯eo <ç=Ícïö1tóscwº8<ÇÎèúc\›ÍîÑ+ ŸjóÛ[ÛÝ ô$Êvç=ë¯Õ5†m\[¡&EÆïJ©j(š’ˆå%¡”8 Tg‰›dŽ2„פkÙÎîYßp?(¦A«] Yn¹“?wùQÈ;£Ñîe·´„,®¨1À5ÏÙh–×Úƒ^,ÆNw½«;Åßhv†á³±Ô*ׂRs®;R¶€Îšp-0Y”g–¦ÝÝB- ¼¨ZâµÝJûTÔšÚ؈ ;šË½†þÕQn™ÆáÀ&… ƒg¤é—ßZ‚}«BÚ#*ÞõËxÊX-šg8G ®ŠûQ‡L啾P*ÖÃL«5嵞¢–äþòNqWeC³1ÿr:\wζu)òT™®¶æÑÀ*• ÊkzúÙƒgµœv«Öz]¬š“9óÚD-–çØv¬ißf»2Æ IšÑ´¹þÏðš¡™fAý*ÒÐnröV1Üޘ呑X?:ћí-ÈŽËs®8vªpͱԪ2œãmi6©­€DxÇ`©úÕ¶ì+†“¦½–—-ÕG5fÖx^v]Y”ò¬¨EòøqÝäc;!<×¥^j÷îÖêdò E®VǨ†‚I˜+†uÉ*:ŠÅ×5›}2DI.~ò ÄÐ,õC«Ku9húä}k Äipº³ý¥²äñô¥+Ø= ×X±6Ë'ÚS$t-Ò­iúµ¶ î>à‡=+ÌaÐ5¡óD, ;йáíJ}.õ‘ayw8§*k )Xõ)d\§ql]6)éMŸP[k´N|¼Œ„5‡£ë·š¦¤ø‹ý f³±W:mö/>•–ù$ óWTeiØRc+Ãn±®M$–ìÇ+S|Ùç¥(ËqÒî“·µ\Ž/Ý€zâ¥ã¡¦ÆÇq¦c ¬ ö¢RìÄ`ñV‹jD¸ Rˆ-¬xnôÙm÷ƒŠ¶@Î) ¨ã½>YXŒUÕ,p´+ÆžÓš9w)áOzb¹ÍJIÅ"ƒ'¥FÌE=Ô.€Ù=éªx© ÓH=¸ D˜ Sy/š³})Ch6s“Jç£;Ÿ# 84à'=*&v'©\°ånüЋ‚9¤ H O¿†ô ™¸Ú)cq°zÐÊ äÔqà–€,!ÓdoJz®Hcïšào%Yv ïS鲃+(9Úfù‡;ÏZ³a ŽéÛéM•m—?.i¼äzRG hÆO§¹”v$ŠFÒI£vä¤psM`ÞSc¯jW}˜Å'˜¬=@w]â¢;†[Sl:ìëQ4™8¨s˜þSÎi›‰ C&ïÖ™#nšl…²F)D94ì+„påAcRº¸QQÆ~lg¥Hwô¦u-B=2Ó,7;p«\…­üqjFêX÷IÀíšíÚ‰ÔÌ‹#(Âç°¬ËíÞíƒF<­£¢Žµ¤d‘-\«w©ý¶odK;‘øôíFÕ-<=å¨A“ëW¬ì ÓÐ18$Ô³¾µ0mt`i§®‚9¦@žWØsæõÿ=ªÿ‡þÐl¦Cþ¤‚«Z7:|Y­»|±)Rݱ²ÑÙ­T)EÈÜÅË©ÌX\]A%Åœi÷÷Ýü4í(4ÐÞZc,ÉœZ4½V;y¤7#Ì2[úUýûl÷H ¡&ESb±“¦ê3i“4j„‚Ø+Sk²ºêI1\a_çŠèÓK´{åºeËw³N¾Ó­ïÊ4¨0¼ŒTóê>] 6ZÕìrÍ$!`Xþ_ʱíÿ²/ˆv×Z`­ZùT.8¬èôxÒÉíÕÈÞyj\Èv(øjvd–ÜnÚFr=iºûˆ£(ʼnbü+gO²ŽÑ|¨ÆêÞµfòÎ+Ø$PIö¡É\9;MIÿ²œ?ëÙ±ø±¬F-t«{|†Íhéš ØJÒ1ÜØù}©ÚÍ‘¾HãVÚÊ~ót¡É_@KC1¶ÿÂ$¼g½&tÒØIe|¥ Ü=kNãKó´Ä³‰€U#$ô>µrÖÒ;aJ7é¹h+^ÕVÆGµ¸;T·SÑh¼S«xˆpȸí[3xvÊös;‚uëB8mlbQh¬=:š[=Ô’Al›N: æu½]î¬ã$YùÜ~¢·¯XÜ[rû3YVº¤qy•Ûûô—˜¶Úí¸Žá"à¸êOzÜT³u “©Sת+¯ X^B|€"~ÄV ðÜð]wÌ?ުыR8l¤¸´¾¸Qò³`c¾*÷‡5¨­bkk¦3œšèímâ¶´òÑ~@¸Ö¹ÝK@û]Äolˆ#ÏÏK˜v#Ò­ÖMjâé9‚2ÄëYV×Ém® ©ˆI®îÂm-ÖEQŒëX—^Yµ“*ª‹lå±B–¢hf¿x—Ú,sª‘óñšÍ¹IWÃ6Å×ç~ñSQÕ¡²ƒ&Ò1ü뢹´Šm5í™]¸_ñ¢ã9¯ êÖÑyL6˺¥ñŒ¨Én€ä€MGeá¡Ø’vm¡²1Zº¿‡_U–9! EÀ†ÕÁú‹ªxRQÁÆEAáé|½2ë*ÓÕô{“¥ÛYÛ¨pœ±=iš~’Ö\Ðã3H§¥;«µ9ýçìú™s÷JìVù­¡i§ÎÌf±4mà»óîG ð+©º±ŠêÍ¡pv°íJM0Hâì®-õ´ó1›+ïIâ§ÿ‰Î;Smô;…Ö‘6X•òÐøƒB[ÛqPŠ@ÛŽ);l$bxJÒ)î® ŽBÕhpø¤.Ü!­_ E$1\K$EcÆwÁ 5Ư+@wã8éNúŒé¼e"ý†™-È«> e`cÌÏÍYúÎ…s=»DÆVEù…\ð¦scæKpÅ/ éSu`1­¤x±ƒð ¤RxÓrßÄ\ñŽišÕœðkf[wFbÙàóQk7rÙ­ÕËn`è*–àΟÃwa,;(Œ ͺ3ø“W1Gÿ‘7$t5GCŠ{Ý6[X³¿?¥všnŸ—l±Dü`ŸçQ E»KHìáHã@0jf;w÷ˆ¨fW;¥,‰§K$2ÅF凈æj1C$ª" éÍiIªèi Ç++ˆ‡ËZŵðíæ§>û–*¬sÍj\ø?)LàwïZh"ž—¨éP\Ë<® –ùr: Þm{OR\FTö®V_^Äa}*µ¿‡µ‰–ˆÆŠyf¦Ò}Evv‰®[_Û]¤ qxÜÝ+›ð‘Û²e€Èã=5¿c G—- ?|rÞ¦¹h4-EoÏ”Å6±Ã{RVØoSÒÃFÌU0[5y§Œ ¾»!V`í]执­¤%‹»Èܳ7­sÿ‡›ûPC0ŸæcýÚQ²zƒW>¾ltX,í™/–ÛÚ°ô-alõ9&ŸøùÒºÝ3H³±ŒFUZV^KW®Co¸ÉjFÀzZ´îšŽÌ[ R_¶ÞÈE¸å÷©t¹^]AÄ0µ^2;ÔºpžÞ çvÚ~ï±­ÛycŽ1€GžÃ,‚zô§# óU¦¸Ùåæ… ;ZÌ»—æTg"«Csò14°Ý«ɧ`'å†iÊõ¨f~qÅ5çð9X 9çŠUqŽ:Õu“sbžÎb‹úpÎ㪭½‰&œ·6M5rÝi’6ß§½[b¹ÀëYèÞSzf­ÆCsš–R&U(Æ9¨;©ï æ€Až•ÜðjDny¦±çŠ@4¸¥*|°iÿ)=h£n)‡x©FÑQ• ÊÐI㨡·NM%¨$uª²¸FÈêjü‹sTfˆ à(ÇSM±Q³­A,dtA»v(ç,WwJrç`Q‚@Í=@Ö˜ ž*DàS $P‡š@y£ÜýÐ*ä ‚ ¿¥UŽ6i²zUè²ÌF3Ȫ)³N7j‘ÁÍcMra·yNí«Æ*͵Ϙ©œò3È©±&¯Îh b£É*1Owš@ArØ^j`# ô©î~*8“rµ4] RFŸ¼½L‘Ö…]’üÔÄ4¨ÝȦÌ2£#å¾”Æ\´î+ ÞÁu ƒŠv0(¸ÆFUXúÓ3ŒŸz¯R ¢Ü‘éS Ü¸Áé@µ[Å´´3ŽqÆ*ž‘©K}æ h€u^¤Òxˆ•²*ËžjŸ‡îã·‚E“åãæ= h–—#©Ò•ßRb‡zŠBÙ\©ÊÕ jÖÚAc¸õ"¤«‰ý‰e$†F‹=\Kd˜W„*õkUGÆz ”]C¡%‘8áOJm²$ #C9ã½= º±îu¥³Ô  2ÇÒ¦:å¨h‘$Üe8ÈíE™WFˆnM1#Ì™=)ÄP»1è3š¯§ß¥ä.Ê>ëc•‚äêž[6OÕ ©µÜ>g–ΪßíSSW¶kkæߥ+0/œŽ{ ãÌÀ†`O¥X'*«Ìä&à¡¡n6=Ð ®}Ç­T¿Õ­¬Š¤¤—=“µh2ªÄà㯥qW.Öz¬ÛÕeYA »¶j”nKg[kyôjð’}Gz±,jÓ 'ŠÄðÕ¹Ž6ˇ$çhí[×2Gjž|‡y&›V2ù£†Ð³v5SMÕ-®í‡ IÏJçµ{Û_|‘ü–ÑÝê®—mqyg=¼'j©Éo_jj=ÄÙÖÙê–——`vAèjåØêG¥y°79 cu?u>³>¡òK÷£ãëC‡T+ë©ÒmFt¨­68p£¥/œ ß…C¢$®v¦3PQ;ÑI‘•@=Zª]J.bh¬äO3¦Ct¬ xÛ_¸¹ó§aŸ•A¬Éíî´@FŒêXá­Z÷g_a§Å§Fƒ!¤cóŸzÒ™öÅÞ³¬!»[$ûTžd‡’OjБ7§Z— Ò CËÔ¶ÓfR¥rJŒMˆðCŠž#Ïj@%Ô¡AÉÉþUN×2»ÉœÚ›v¯s)D8Ï÷jÔPaÚyešDÒ ˜‘ÈkA º‚½ÅgHÈÆ£æ=i–—2— ØP¢¸Ž¦†MêV–3†$úÒHû˜C+I$)9îj;diC+–¥y‹‚ õž¬®äœŽxªBÐýuŸZÜ…<׬j÷ÃT’Ý&d@ø®ÇIV6($bÌGSM­."Äç9ëT™I¹!sW²ÑnÏJ‚,5ÁlšFG%¼Q&Ñ¿éSÛ)q“Ó¥/TŠžÜb1Ï8§¸\ŒÛ/™…À¦=±žEDÍ,7Cpæ¤k™7ã¯4’arX#·È Ô †XÜa†Tö§ $Ý€y¬½o^ŽÆ0‰ÌÙ¦•Ø™ÑÇB-¡'B*¹Óí#BV%Vnâ©h7WRéÆkò~aô®sZñ\âìÁfÀ*œBM»!Ý…©7áS]«½”‰Õà×£x‘î·CtÁOU>´š§‹¥F0Yºàuz|1^æÑßX^;Ȥ±@l¢c­R½„ìjjòÜØ[ˆRIñǰªzg›¥kÚã…qÈÍI«L¢òÊéI0m#·µK¬ºÍwaq9Ç#­™›} Æ£«N±+1Bq@qPØYÏ5ø‡èy5¯¥¿Ùõ»´vÁ`ئh,ˆdRÝsøÓ{çVù|çpú× ©½í¦¨Ï'™ÃeIé^€ñ°ÁþáµmQ®õ6[|”`W­g¥±¡wsᶸ_¡Ä€w—g ÅΕ(DÈOÌÝ@ë]ì–òxeÚÏ6ä~}ꮄˇn@bN?*®„™þšåueDù‘¹jé‘g6¯ qJÛmaão­J³jš¥Á0ÝÛ³ ”dÓ55÷‰¦kX`·,²7Þâá)mo üª2µ­¥è¶wÒK—Æþ:š.¬%ö¹w¼2’ÜÍëVî¼ZâÚ%€ï“}3Æ(±Ml¨M§úVž›¢Ù˧Û;E†À9´]XÝji˜—Ž6Ë û…{Ö›®ÞAª(¹$E!û¸íOñd…5D‰~ìj0*Æ›`ÚÕÌw—)å¤j_\Q¥®&3þ‹ˆ5v æßv>•gYñD°OÚ2ž6•gøŸJŽÎxæ £œ©œéqÈ­ûö“i¡$ÕÆÛ;K-FÝ5n¤pƒ7Ö°îé6³w24ßÅ©ÝyR „ž­oÜÝCcl^WTq\&¦”ׄJw ç5¿¨ÏªXâ5`€f›‡`nÆâøÂ)î–%·%KaZº¸­”€øëÚ¹Í'Ãv{b¸Ë^yéšéäž(2Hª;gŠR²Øì{-äØ§Ì qŠò»©'ûk<ù$7Cõ¯\8•7¡ =Ep^/Ó’=B9cÁizz!¸2Ëêê°Ãc`);ÕnëÃVÖÚ4…“3*ä±õ­O 鉧iª®šÇæ5?ˆIMç´_].ç™iмע$lgƒ»¦+ЛÃzyÓB²U9qëŠà4{y.õ‰['&½:áLzTм‘ ü)ÏF„3‚Í.uEµˆd#'¸ÍzÙ!°´\Ÿ.8ן¥q'_‡?Þ9üë{Æ7³Åp£aXÞôIݤ‘<]iosåªn\ãuhêÞ ´²µFa¸È»”{W¦éÇUÅ•Ú>gÅ^ñM‘´ŠÜ¹•p(q@™Òhbš?´Û(¹oj°ºý“^›ÿ¾ïÍ@ųËõ­­?OºÔ®a½¼Ú¢1ò/sЦô&ÇL$Ýœšç5» +Ëiî!hÄÉó1SÎ+m·<,™ê¸կŤjõàBUáˆî)D¢Îg-÷‡æˆ60Û“ꎕu4s‡ó#…Ýþñ®¾ÂØYÄ#ë°pjã£600 Öb±Èx{F•ïĀƱòª{×SpBº—UÛœ5"Dñ¹¥K:ûõ¤ÝÆ•Ž7ZÒç²»icCä·ÌGJŠ×Ä:ŒIä¬ÁèµwW$³)€ÃƒT"Ó-R/0B™tŽ´ÔôÔ›V:^£«N“_ÈͶJ·?§¥t²iðÅdö° Uu Þ ´Fi·‡ùWŒU™f&Q‘šM#ÎBÜiÚƒ,|J„€+¬ynn¼5;ß ¬€:‘Zm§ÄeóŒIæâ¨5µ ¡ÍžëMÊúŒ? ÂÒErTr@Ž8¬kÉn-õ6gV£që]O„"#O‘úcÍK&‘Ψ._/=iÝ&iVçXÐI™s ;‡Ò¹ý.îûN¸d·Œ³Ÿàjî¤Û ä (ã¥[( ‚åb\u¤¤8ï¦KYæ\¼û]>çV¾Xíàà&>ojÛÖ! ™†äVÎÚ])·]‘yq…ÍÐ]LCp%¤P g=êÞ—uªÝØC ´!Ã;úVÅí„z‰Q?Ý#ÕvÙc‰vAÀ£›AØã|We#˜E£Ê™Ã¾Š‹DÓšÊÁKÆâh½3;Ä:eÌÑ-Ä0‚¥Sеél#Æ'‘yÚ«ë]˜Cöb ŒÞ³ìt»[{™.0±ïIKK0¶§=Û®²nš2~v‘]&¥ªGxŠ05#iiu¨=ìä|¼ ÕZç:¾¡´_ê!å±ÒŸ2 ø.ÆXƒÜ2®Ò~µ¥â-JâÊÔ4ä¾W5§d‹ b4P1Šmí¸º…#sQ{±¥dqþÔ\›ybä$†þñ¬mb¯09ûÛ®§Hðä–7<Ø ¨«ZÞ„š WS±Åhš¸¬3NñMŒvP«’%.Üu¬O^ÝÜ]‘ CüÖŸ§h† Ü:ï*zÖæ±§G¨ù+)ÚÒ•ÕÂÎÄ^Õg“Nd•>H†3\ƯªKw©ï'ˆ›ä_jí–É-mcŽ5Ú˜üëZðëM2Ëhª}ìК½ÂÚÅȺb¬Iþ”Ãn-óÜÿÂ-#Ý9iæ#ÒŸ¥øvGd‡OAWµˆ.&ÒÞ(£ìÇ ¤š¸$qþ>^µˆ¯@Ô$ §M·®Óü«Ñü=sk2ÜÍò²gŠÝ¿ŽîM1Ö/šFíNNà•ŽN½kÿ´Éÿ:ÓÖ&¹Ô,RâX¶ <SéÞ¿Ò.N×VÎÑÞºV°Žâ×ÉeF8¦ä‚Ç;árÚÎ×ìó õõö¦øÆuš[b‡ ‚ÀV•¿…àþÐŽÝ©üA 䉠d^? NJé‚L«á»Ø_N0GÌŠ¼ƒXzd‘ÿÂH¥º—?7§5Ôèú"ØÚ± ™Jàšç ðýóêûÀ7g9íši…‹¾1™¼è£RÕÎ ­äwÞˆÅó”Ûºè×W:´D#È Ì;u­Ý7G‚ÚÑa1åXsšWIŽOúŦ™10îÉáˆé]~¹y ߇f’3”+Ê»ðj¶¤¯r´õ=!ßG6v«„ÀZ“r¾Y乑a,_éU'¹3k­/$™?‹§Zê´] é¬ëÒ8äÕð«}¿Î˜àÜïÍÊáb׋òt+cÂ’ÃU^3ô¤”±ŒžõZÞa5B.ȯ°*¢ÈUʱæ®!Ï\Õ;•Ù(aR2H•¼ÓùԥȧÀAPMG0éZ:0ß)3 `ãšHOœçs@ȤHcV#}È*³7ϵŽjd;O!Lž:ÓñµF:Ьäu§F:Ðp(&†p0;ÓFs)8©jFGZyûµ`6ÒÁ2hîÂÒ¶ÓÀ4‘7ÍŠyùO57öcæRIŒdÐWiu ƒž´ß/¸4ý¤§zp5^~n”é>XóÞ’"_’( ã©T“ÅëB¸'Æ Î*5Cž•`0£$œö ‚ݧpàVÔváWäw¬Ëf3ã$ªÖÌdù„0àV²Ôˆ«cŒª©$UøGËT„eˆ+À­—j u¬Ùb;I5VÒIIAè^úšŠv>¦\Y#Þ‚sÏJ›<†¦²ü¸í@ˆW:z7ÊßJ” TÅ0¨ÏZ  %˜<ÒÈ[zŒcŠ—g?Z a¶“Ú‹ˆƒ-Œ·\ñD§vÜÔò L(¯HcÀ 4FIõ©Djñ…#¥.ÀŠíTI$88¨„{ç'©Êëæ²±Å,M”®áŠhLdŠ6ý)Š¿%]x×cè:T^”Š+B7JAíO`2jXaù˜žô©& ô –=¨­€N;Ò# ëVY7FUº•Wg˜„¢¨LŽ)—{.8^õ ;£8Á ÀÎ3Ö¹‹ïË R<Pá½è{[Ô§±|¿3“LºÖ.mô˜.bØP8鑚£®Ëö­2Þá2Qœ‘Qj†‹h±üªÖÄ,³iÉ,Í¹ßæâ¯Ú¨óŽî½«6Êâ+ål*Æ?*ˆŒš›$À¬MÂR×a££˜*à¯\óNGÎwt¬+m~ÍA­×ý_8'Ú¬[k¶·W†É7dô4¬Çrù‘VNO'¥gjšäVÍöx‡™1ì)u‰šÊÅäO¿ÐÂÑmh弓,àâœWQ2x¼S8GŽâ,¨é·µg¿ˆoÆv8 ž„U[9ã†õÍÀÊ1;…H.íe¼hˆù>Õ¥„uÚÛMj¯ åÇçWJxàæ³íg¶µ¶ó‰Ä “VÅÌ*]Å'îÇSY½Æ¶4e Ï5À—–Ï ¥¶0ÇZ+Ļ̰6äÎ ¢ïP·Ó!ß4ƒæþÖîKo ¶•hc DH>óUK9ÒâF’'ŸÞôªì­©iJöç)œ:â±´}gì_èÒåò2;®VɹØÎ«)^sô©5ø´Ý=g“ŒtËŽhVU`ÀZ§~Ú~©{«ÌwÆ~è©µŠ½Ë–³G©Ù¤ Î ,$WÏÊ?Jt‘%¾ôm‰éT-¯by ’L09ëEï°† n'zʾÕíl2Ó6IàÖ«.¨oI#|¤gšçU?¶õ§Ø€3‚)¨÷Í”ñU¢vÈA>+VbÖñcH§ÝvŽ¢¸[9íæš6u_SÞº i¨Ã>çn™ªiXI³cVÐæÕšYÊ"ÿ ^xÞ( Ϋ’Í´[æ*©Ýªœ“¤ÿ<2†SÀ"£r‰y¼úS-b/Þ‹vGV‡ÍS ì:Š’ #…Ìr:)í“Ö 6‘Ëo$2­U`³†ÍŒP®Ð}kJEÝó#síTdI\g8 e{½bÓLŸ ÛÛ gMÖ¬õ"D,r;ãyŸ<˜8©­­Ì#ž§š’[pÃ#­&4AhÀ+–¨Ä{¯2©bˆ°+’)±Dâ|0ã=hbTDOœš­ àË´r KráIâ–Þí¼Ð’¡”t¡¸J6²ûŠ‚æ&rqűI5¹z÷«2 b;Õh`aq“ššþ9Lkå1 ,Q1î¸Àõ­… ±Ò³l¬å2n“'šÑ‘['¨l]Y¼ñ»¥Kr¨lu¨‘ɸö©g%¡Ãõ(@Scy¨ï#_'޽iÖéòñQÜÅ68äÔ mš†£“`¸¸æ­ÛÂéqÍS–ÚF›w½,ÊvÂGcM@ˆ“Þ¤’&0¯:$ÌXÅ ã˜á±PÝ la²jxІaЉáe}Ç¥d”2*K€)ð2˜ñŒeÑ;E$Ø©A Çš«lß¼9;ûqHÜB =êÒ࢑éY²ÆùPÙ"´-Ñ‚ ô íÚ3R# R3ƒF=)1ˆ’M8ž1F)Ä(+ÐS“krWši”±òMTr:ÓÈ¢|ƒHžMG(Í;;G4ÂKu #¥RHån;ÐN(’Šl`4æmçšçj`u  u¦’zb–3NàšŠ<6@ëK€N 9Si8¦•Éæ€8(¢HTª€I©¡ˆd’8¢8YŸq~8‚®â8§q¤ ã§S…4ý«ŸcI߃9¤ßœŠ3òŸjEÆ2hFÈQéCýÚÉÁéMv"­"°bG¥4 Üî§€³LœS~lÒ†ËT»IéH€v©DdÓуBAqQH æÍŽ´díŒóTIRX?zØjXmTÅpGz±CÇ&¤ Ú˜•çŠlˆH©°dR1qÖ€"E(9¨ÀÌÁ˜ñS`/Z sI!‹Õ8¨<¶‘S– ‘Šb0üG{%¦–ÞXÃ?Ê[Ðçµx-F›e* ÇŽþµ½â®t†ÇEqœW#%¬¿Ø±\¹$y›T³WY·¯OÚ¾æáŒ}*r?ø’X±íåTîÍÁÐ-D€æ};Tš÷Ú4ÛÎvçè*¬$XÖ“f‡c† ãõ©ôÝ4êsEws•¨z«2ͪxv)!ÀpGà*ï‡5¦p¶r!f@B°íI« Ȗň^Ò7ØžfÐksKðÓ[ê­3¶bO»“Ö°RñmµÆº•2bv×U§ø5+óvÄGŒïÿ"‰l1ž+Η¸8¬ÿÍÿ—…ïU«§¼µŠòÖH]sžžÕÀÛ_>“}pž¸ÁéíDv°¤6 _´ë«]À¹Öµõ³¯"Á¡ZÇØ})-åÿŠ5ÉûØ }3BSðÜÓÛY]N9ʾõ˜ÿéñÜÜ]\|ãýZ÷bkGL™F…sg\`Vvˆm†¤xAŒgÖš]Dk[Ï6‘ ´“®^FÂ+vxj[Í;íœÃvÌqZ-d’Â!ýâ+`í­]P·¸Óc—tk‚½ÅMú”s¹–+ײ‘°®÷¡¶µ‘|H!6D‡,{ÔÚ`[<ŠxÜÍNÓî!Èìp¤žM=Ä­sKÅ·²Ái*ß,ƒœ÷®di—«§›³þ¨søèn¡å™ I#ÇêkЭ¬­4ý6CÎPäÿ{аZça©ÜC¬ý îbI,£ø¨Ôµ[©µQ3‡BŒ6ÇSxkâ͵¾öAïMפWñb0ªã­=.„wZMỲI¥B¤ŽG­P×µ¸tëbýs 'µ^·|ÙFÑ`‚;W#â‹k†e¹ÚJ¥B·1} |?£¦©poî¥' žjOëÅYl¬ÉN‡ô¬½YšÄ›t]ÌÿpWO¦ènÆiÂÉ3rCtOGq-NCN×o4ë„c+2gMu÷¾!H´‘tŒŠÄñf•®É ‰QXá‚×4Ò1ƒ ¼ªô¥;)j'tiO5ìѦ¡#Û¾]ƤÔuÛ˨ ˆK´ü=ê߇ôqªÅ¾â\D8 š­â-2-â†2~lå'`Z–¤ñ%ØÑ(™üÁ÷äô«i­Þ/‡äÙËa_jÎiis F“G»q;« ,`ÓÚ6D(½þ•.ÃGáÍjhµ%Ùž)zƒØÔš¿ˆndÕT[?—G==êXÅ5ü—h£ËBBãµgkÑFÙ[¥^¶f8o3r‘šÏÌ«—I¨ª9ªâC¼Í<'‚ãb‘ÞFp=jÂŽ¹¨‘ˆz˜94 l‘IPñÒ¬³ªŒÓÕ„‹Å$ žôù#©¦+lSKõÉ .(É~EM„#êªI–úT›†üÒ ’·ŠFeÇk6k×>X©’‰áÅ;»³Œ¯Z$‡tg=iò2 D³üäg¿4 QHÇz•pO'šÛ©Å;NMZb@àSqŽ{Ò$¹ëÒ•È#"•€s³¡¨F´½G‘3LÛžiÅFÞiŠI—©ìAâ‹ÕÀ¨ÝþeVéRðU‘ÃNè( –’!¼0©°p@³;i]¸â€¹9P̹©í^*è3N.no­H8õªêß7/L{нqN< jŸ˜ VÀS“RP…‰àЄàÒ¨Èɤ^I€I4XÓ¶qAšç­riÄñI¼/SH ZÒ’1’xÅBÏŽ”ç!AÛÖ£_œriâh(Tç4&Ý´˜Á&ŒœSÔÖ€9¤l·1ÀééL4ÈF˜Ôà|˜¤è9 t B¸Á4Ñ’jBÙ¦(˜¤8Ži(äŠcdŠrÒ6Gjj 9ŽE'fœh±¡p©6Ò[­ …QO-Ҫ°ÐX†§n i hB•Tžô™È4Ù N^ƒŒ{ÓUIâ•XG¥7ÚàdÍ?“ô¦¹Ê€Ó×y¦¾Ð´‰ÊÔ½i7zÒh´¯Êi.3Q’äã´ÀlÐ%ÄL’.å'¥C6—oql°% àzÕ±óÙ§:ÍR¼Ó ¸±km¡Pô#±¨%ÐlæÓâ¶#hOºGQZr|¨Ø=iÛs&ÂÅK:ÚÊÏȈe\÷¨ì´‹[™á ü3Ò fš£xÆ(l,`j>ŠóTó̘NëëZö¶PÚF#p:ަ§ò“Û4÷ ¼.(¸X…rI=«+Qðõ¶¢ÆSû¹Há–·@\*(¸f¢ö‘‡Â—Kq勬EþÏzÚÓü7e§·šÉ þ6­} <Ÿ« 7+‚G;âm>êòÎ4·]ØlíªÉ¦ÞCáV¶æ^»k¦9ÁɧäÁúУšÐmBÂè–æ×LŽ'mÄ}ªM^?Iš0™fR³!AÆ K;OCQ}nR8ï è“5÷Ú']ª„§½tòÜÁcr<É7ôô2,nÑ&X ^ªµõåóùѾâØPG[îNÇEâËèfµ†JÈÒðjœ~3èJ#9~÷½ªÆá‰QRêï$ã…ö®„/—(§=;S½¶ ÎKŽý/„6ûÃç è+GŰO椮C&пu²ÁS©Ž%Vo½…§jUµõº¤©øQͨrž}§>¥*‹kbáY¾ðè+§×4ÍNM*$I l\Éõ­Ý:Æhü¨½3W%Û"´'£ \Ú‚Ž‡øfæâßRò£$¡á—Ú¢Ö\¿ˆw¯PÃ>ÕØE¢[is´ðä3uÍM‡e,ÏtÑåÍR’½Åc•ñ“ìvìXÏQW|·Qù›Xã5·w£Û\¼k*ü¨ÙUÉ F±Ä»PqÅ.a¤cj>[ý@ÝyÌ<­tvE" ŶŒdÔ ˆqŽô‘DÍ ›O5#déw•sƒŠ³¹1¸ô¬› viœÈ~lÕ¶$1Cœ @XI7¹öéRLXíÅCn¼ÕžäfÊÏp¾fÆ4Et]¢˜ñ#M¼ñÅCZë`ôY¢eUl“Ö•¦UÆî†£–ÜHšlÑà¨=¸  á‚*µªÍ°sÍ6Hÿv6õªðÂÅÜÐŒ‹4ǃëU..Ðã¨Ï:ÈTˆ˜ä⢹‰xùqŽô%¾æ98¦ªfã½jkl”éÅ#’äu¥Ô} ˆUÉôª2†9õ¢âF (ïQ¥¾ñ’iˆ·¹|¾ 2ªMS‰Îò§ §6דi  qËÁ¤y‘:õ¨q·€j#nd9$Ð2ÀÈ©7*‹ÆPm jÄ(Û9¦&¶·ô¨ÓcNqR»(‰ÉŠÎµw–v Ó½¹yÝ lúÔ°¶æÝØÕIã*CEYBD /S@ײ`š=¬ª}k3ÊÛ.éŠÒˆ €¯Ý¤1û0ÜTÁIŒúÓ¸4˜'¡éI±‚«µ#ŒúSž‹Ön ƒHb;×N‚óIŒði¬08 y§~)r óÞ£EËdö§€ÚxàûTr¦ãÅ<äuéQ8çå<ÒX¸@JAŽ´¬ã`雀!éMü¹^´N1LÝ‚A¦Á¤¤·5n2UPªNjx†:T”9Ü)¦¶XqLuÁϽˆ¦#œ)ÛF3M^•2Œ­qŠUPjB  c4§§„BÑúTdb¬Ô 0M 8 žh4å]ÔÂM‚´†:•Ž¢„&!CžzSö‚´d°œ0*Ä1PPsOȤšMªx4`… ;QÞ— Æ€",¨ê<ô§cç¥. H§ãž”L:Sv‚qO9¦ŽMF9¥QÎ)ÀÇ×t ÝÅ0q¤ ÈéOUi±‚[ž‚žNI¥DŠœóRFTäM*ýþ”fÓŸ›¯jn§œ1ëÒƒÀ ÂàRíÔ€¦@ÛÅ4&iÃu+Œw ”1ª¶×K4Ì]Xý*тݩ8N€ ÷  ×EÉÀ¥„Š YÀrÙõ¦¼\q@¤`gÇjŠà+Ì (ïSª(”ïëK3¢0'žÂ€¸ÙËÙp#ªöö6ÖÊíb<ŽqZªàZW·Ê¥¨­É€ÀëImÄìYrsW!€ªŠb[7žHÀBVIòF1WF*í¶ÊI«žX8P2ŒÄjU;bÉèiÆÜ;Ý*W‰Z€ã”gàsš±"¤†ÕU²y©.WrœtéH Ör1½A"D×A2sýÚ·n6©w¨å .Mh²]xè1T ‡võpÀ rzÑ Œî¦2ù¨EO$€.;ÔÌœ|½jŒ©É¤1–Ç.p1VÄ+÷ÍGmÇZœ¶•Çbì/(MmµmðzгÉ\cЉ¡WB1ŠwŠë²YqéK+9ãŸZ°,@v÷¦Ü[y‹¹¢â0Ö§‘øTVcTô©"öm#4VÌÍQÆîÆ’V( øÕ³ ÈpÕµ û…‡G†ELcÎ(T u©A ¥ ‡«Ç>EhÍÈ2jµd”7j@H_fÒEE3©ªÓ.FªÆßq9é@ìFeù*8r±éVÞØy`ÍE ´ˆì$?)éJâ#Ì»Cž‚¦¼ÊÆ éN‚×Ê—wQKw†‡îí˜A5 ²¼øŸoƒZz[1Qp+Ü)4¯:¤'e£ßzU9-‹6­+ŽÂY!‘Ëõ4–ûxíV!„F£š•“r4î"‰’5cOŠA'N”Ùí7ô©¡€D¼uÅ ‚ëS’<¼¯\TMé ©mÆiÜ,Uq˜ŽMT<§l ZK$“GÙÆòq@¬T™ó´u^õ¸â˜ç`iÉržô»‚›¡¨|ÀȤô5¤ø E€X›§j†F‘d±¹ AM–d„–‘º¶Ð)€É't— 88gjJ¹<öüª»®æ >•*ʹی7µqYŽFG^)]ʃJ dý*7"Nœq#—~V¥L±úUdcŽ¢‰Ø¬£l7zå®3Š9¨afu9l Ó²æPC«ÖÜ–Wع¨¾Ð:Ñ4…ò1òúÓ PI³¿#Ò™ŠÅ†y¨³‡Ø;Ò›$$þ !'Öê’R(V$œô¤àŸ0ŽGJp*ޏ¨Ä¡˜JRG'¶j%@%ã½13Œ`ô¨üÅêc"ªO9íH qɼ`“ŒüÕ@Œ œÕ•bÍóuÅ'= ·^ÔÖ\£¥ mÍŸJU4‡*?=)™qÞ£”¶Ì/Z@6xƒœŽµ …[ºŠ·;>nµ 6i€õùH¥É URç8`€M %À¡OÎÆ˜dO?wå AïRçåÀëP€1ךz1'Ââ pç=*t#84Ì„É5ÎÛÏËÅ!–ØŽÔ×L¦)§”Üx§¬›£Ç¥edVP~´4˜1« §85ò€:ô¦ˆ20iÙÝòŽÕZÚF”FïVÚ8êhÆ~xíAýæ2(“ i ÛáÖ  ƒÞž’¡Éâ¡yq& g/÷OÖ‹ æ€p~”…”U@YSŠ{Ÿ»×4Xw4”æœÃІb µ)c@ “œSÃv¦Äzæ RþkqÅ[À^M1‡z’£éQÄàô¤‹€Ýiç#“Ò«JNÜ©äTÈÌè3Lõ+ŒšÔŽJc©òÎSŒ3\Ña·dqJGZ¯õ85c ž{ÒhwçŠ\éMU ÄÒbØ4$ßÃPÉhøëCÏ#ƒMÅ °E°iûÛ>Ô9l(^G'Ô‡q»ŽhAÉ4Æ iÙr ÅWùˆ¦Ü<¾¿5gª1”ñWöÅ.ìQ»" šPsQØŽNÃð(Fçª ‚Çß2Bß-eÃ×"¤FãD²àõ¥PCU•H\ŠIF>´j&á¶“@îFñ+Töà!Å#˜ä|£šMœ–žƒ¹¨@5:ýÚ–4U¨P©Ë×4ƒ“€)Á !ˆNic1cO(æš&òÚ’H÷®­=JÉ4¸ Ö˜U“S`•w§?ÌFzP2¸À¤@àsIéÍ9ÉÜéCdŽF­±BqÖ£Á=*\¼Óç8éMU\ñÖ¥ôÅ9&€ MòýŠxQɦ¶€9Þ?qŠa 5"’Tf˜„QJi1éFTd–Åùª ö1XNケ±ÏáL éµý9æT[Œ2ç“íJºö˜[hºý¡\Ž• ¾«o,‘Α²°ëW¿á¹vT7)P¦­Å¯C£:®žË”¹ˆžŸ|qS-õ³Æ6L„ûåÁ÷+/BÇÜS_Â7ÂBÆX‚ö"Ÿ,BììŒÑÍQQ›Ûpÿ<ÑOš¸Ùü-¨¢d8mÔÑáMG`}Ñîô-JÑ ³°¸½³XÃ<±x…WŽöŽøñ»î5s—äí?íR7…50p¬¤{5>X÷ NÃûBÎÚ×Q†ÆpXT/¬iïó ¨°:áë“ÂÚ° ìzpõR]P‚Mk&zp3š9P]°Ö´öPò/¡«"òÖH¼Å¸ˆ¨ë†¯=—H½„¨{g ü–˜ú}ô9 o6¢ÿ…>T+³ÑúذÙ:ßTÛ–·™Ôãmß{­yÈ´¹è°L?à&‘¡¸þ(åõf»‡3=)n­ØYÓðjz²ï$2‘èšó²&Æ¥W»F$4ÀŸî·Z9˜ôÿ9Y>R2*(ØÍšóAqv®TK0'Õ©Ñß_BÍ.;üÆŽ@æ=!_æ9'Jd™0Ë·”ó£©Þ@¹“žÌicÕ/"B‰q&^ô{0æ=ÈŸ'Ÿ½Ž€Ôêv(©<לǬê#¹#bj§.ãºÒäaÌw¯€¤dcDYY8\WÞ(ÔKe¤Lzb¦__*áÑö£‘‡1Û¢áNsŠt¬wŒŸ–¸µñeÀ|¤.{Óÿá0¨Ýl„Žû¨äcMbŽôø‹Ct®&ONåBCã¶ê‘´r°º:ç%Û¥*ä˶¹(üb×¶ÏQS/ŒcövÇ­.FÈì \ŠC‘\Çü&°‘ó[ÉI7Œ­Ê»ôr°º7¯&k['usÒ¥´fš äcwé\âx¢ÑÓtÅÕHÆÊЇÄúh·Ï˜séŠVcº7Å(s½¬ŸøHôÕ ír¿CCx“KwÚ4Y…ËæB¬@4É%vÆÞµ–5í:WÊ\/ZÑKÛWŒ2ËÈþõ+0¹:È7u¨§˜‡ ;Õa™©°d¯½Nî1@g5:4gŒsUçb$ ôëX7>&¶†ãdaäÚ~b‹œSDLjdbžÆ¹©ò7PhÒ-’ÒÆ5E°Ëg¾jX¬á‚w–(ÕKŸ˜Žô< yÅ v1@È~}©»¾bM"‰<¼œÒƒškHÃ¥H­…Í €:Œ aˆ÷4æÉ00ÛŒž;ö£Qì5â1÷ëNd=¤‘õ¬OÄ–šyÚM0ì¼ø×=?‰µ[ö"Ò"¹ã¹"©E‰´uòI¦æ‘Ñ:ÖUçˆtèQYfî/ZÇÓü9¨Ÿ2þY#©Éçÿ­[VþÓ­YÕ¥_F4ôB2åñTLÛc²Éô8¨Î¹©KÌZpöÊ“ü«§M6Ò‚0¡Ú*Ò€Ì郊9Yœ\jít%û'°ˆÔ·VšåÞÐm~@ýk¹y"hfÀn& ûT_i11T“¨ÍÁ¡ÃMg©¼l+ÝTùÔkÿg(ÚI'¦àk¯ºÕbòÝÓsˆßl˜àŠY5kx%ƒqL¼¾†«“dp­¦Ý3.Û)¶÷y§Én‘–e2Ù?ýjìf×­á’á%P23ŽàÕ¨µKi.áJ°™w!ÿ^Žv;#e¶0([iÕÁå…M:S¡25Â÷à]â]ÚIÆÕÂHdÛבý‚{D‘!O%ún§çG8YŒ:f…0ûA±þÑ3x{Mqû­Hcê+~ãÃÚkü«ñòÕY|hˈ¥‘úž)sŒñá$PEÛë´)ðcÊÜœöÊÿõé²ø{Y³lZÜ—\ñóbêzö™&'ˆÈ‹ÔíÍ5~ŒäðuЗjÌŒ§©Ù¯Pñ”ËF6ÿ»Oû4!F#U÷ÅÓÈ|§›+k*ŒA˜ƒ×4#k{AO<^š¨ì(*ª Ú=i)ù=Ñõ-B=b8f–O˜ò»VBdÞçÍr-Iã÷0’kµ»aœ²uOò¦õÔÀj—2jÚЀP>Õ˜ï[º£ËrÓH*|±Ÿç\­¤¨ºœï³%ˆÅw~]ºJ¹=IlŸsNZ-·)ê¶·Ú†§ ¿—¶ÙvúÞ²¨E3X%ñé· °V”ÿíX‘x×PHʼhÇÔ-J‹hm›ÇŸ¸^‹5•â{¶“UŽÜÿª5»ákW‘dÔ.Gïf a\Þ«*M®+:fÇ ×š¥¸o HY0¢¥rÌ00:ÔÖêð0¡E:æXm£2ÈÛPw5ŸRˆcG„dœçµDáÉÈ⢇]±»I^)õªzF¿oªÏ4j6ùgóìÅsMUÔäÔ%$ióž*–¡âm5H¬p®\òǵlÇÈÁ'¦) lŒ°Û´’‘±Fy¯=Öuk­Jñ ³WòÃc)]7‹¯Å¶Œb †•¶§zç¼9«ÚXY?îIŸ?/ÝUK ·ð¥äã2€ó“Ö§o]…²¡>õ¹kâx$œ}¢ aÏBG¹±©Ü[‘ô§Í Hà&ð–£oeŒ8ÃVB½Ö›)Ø^=kÙTSžfêz5†£I‘ûÁ¤§®¥rèrzˆ ĉow'Îz1ï]Ë ùHÁî+Îõ ͦþþÑŒ‘©ÎW¨®‡ÂZÙ¿Si0â_Ɖ+ê‰WFý¡g?6qšžhJÈXõ Ýýµ„[å|dñVD¢d¼ƒÈ¨e•ÙšC° µoÅÁ“w®ÚÙßÁl[sÊØÈíõ«×Úœ:u¡¸˜á â€'¹lDLz©[ÂìÛ˜TÐ_Ã{n³!H¨¬õ[k›™`¾xÛ4 ±×EŽ xo*Ù¤nŠ3V¥x‘2å@îk>êò´¹'V]§æn3޶¼“^ñ.×Ï“È^ÕÔßxzÖúØ«¨GÊÀt®GÁª­«NÛ‡Cü뵺×,àýÂ\# a{©&¶%v§=ŸˆDiÌ‘œt"“Æ”ã´VÛÆMvzuŒÆÓ$ƒ,ýkÎ|W “_™{ N.ïQt;/ÄÖÚ:°ÝšÜ³2*FsU4ö5¸“®ÁŠÓ.‘ ±P\Խʉ™£Žõ ÄìÛˆÆj¸ñ-„š‚Ù,À»zU]{Äqi ±&Ö™ˆ<ö¬ÂèÖ›z¡cÞ›j† Kk0¸µI\ A8®wSñ4vÚ¤p:œ¾$"€¹¼K[ÈÌšo?vYFXö©âÛ*ç ©æ°õ}jÏH¹HænXôÖ…®ƒl«â=]í´¼¨Ù$‡jÓ|3cÙ¤“æbkÅ—–ú„6ÆÞPG;‡¥héz½½–ƒ’¸Ü£}jídOQ|Y£Ú½ƒ]*¬r!ãosV< ¦Íi§É4À0åI¬û/[k:šGz…mוSÜ×yE…`åÒ“ºC‹·Š^§Nj75#ÍÓ€G5ÎqSƒÒ€•QN†â(Ûšu©cDŠ@jRù$ãjŽOµ(zC$È'Ò6GZUP õ§ Š`biù409Í4h…ðiJÍ)R÷zÐ0s°ëB“ŒÓG4Ö%K‚ã4œ–œƒ( ƒ>ô F0G—ɦ\9Œô¨¡¹iT7AëR2Öû'¥HŠK¯#Éåeyÿ žÄ×­09|g/UÅ10x§qœV„QÅ4ƒš@ⓊPj½ÙÒ~€ÿ*œöÍV½Ü,gÚ?„ÿ*#¸ÿ„äU±œÿsŸÈT9Y´-NB[iœ¶^´¾MÖ‚âNŸ€§x~t]ió_s1Ü8ÅhÈ: )–[$ï äÔäŽz×9evÚUËé÷ÙXË~é»s[ÇæƒÀÍHÑ?8¦¾À3Þ¢ ݹ¤w±Án”†88•,l@àçÖ±îum)Y§=zÖ3꺦³ ]>3 ]Øu4ÒgCªkVº|l¬ùsÑ÷þ•Ê‹½kXfŽëHP=ÍlØx^8¤ê çKœàž?Þ‰UUUU½)è‰ZœÕ‡„ ƒÞÈÒ“ÔcŒÿZèಷ³P¶ñ¢/¨Ó·¨ŸcÒƒ"ìÉlv©½Ù{“òç$ãš§-Ôo$¡\ï ª·÷Æ[)d´l´'碰乞îS¨X:™€ýì#­U‰lÒŸX&$– 6Ù‡p;U$Õ¾Ç3™d/g'Ý•€Öºž^Ya?gÿ¬Y V‚õ!VŽ8¼ÀÙûý1ì*”Es¢žý¨·¸,ñ¹ýÍÊt™¬›©îæxä¸,}ÙU¹#µTOí ÷ r ä0¢®Úx^îrEÄ‚ 9Ç­Uµ :ª8W“x˜pÅ =ÇõªOsº3»mfÜí] ^U”oœ¼`òÿëÖ’økL*ÙGÉïšWC±Æ¢ÛYòÅxÎJ ÛÅ x˜¹O¥wú6+öTlTŸØúdÀï´ŒÝEÈ9N6 Yã¾ûCÂEÛ =êHõ)d¶k([çzØŽknãÂp;·‘3®zg ¬› _ĬPoÁãhÑŠÌ»o¯\Ç4r81G"ÿZÔ´×^mB[g ¯ÞˆW%µõ¶ô’' z¹ýj¼R´.®¬Dˆr ô£•0»=OÕdšIgk{Vu*¸!ƒ9¯9³ÔäG™á&0÷­Hu¡öK}ϵ¡Þ_Z—©ö…c{“$AI”ë\ýφ/í%f±”í=y«özöɮÿ™k¼êFkbßR·˜FUÆév;ѪÑÊÇ­jÚIÝÂ]jÞÓ¼QizÁ19ÅZSà Ü%%EtôjÀ»ð¤Ä˜ ÏLt£Fêu‘ÕX©äQÍ}s,26Œ­pÒoC^´J{ÕbëSƒZÓ‘ÚAÜYaž3ô¥È: ~öîÆÝ.­€*ÏÅC¥xž @¬L<¹oSXpë·@°Ý(¹ãÎáÔVI0G+˜_s71ºõÏ¥RF=ANzrM#ž1\†®Ímp¶º‰`qÁ=ý+®VY`äÅfÕ†™Ÿó=*ÆáŽ=*©ÚŽõ(p£½!iðØž²nVÏ¥0¢dµBÒ*}Ó@M°øKÏ›ý+¼¾A&Ÿ*c ¡Ïå\,äø¸8l~ðgò®ßÌYa`8Z·Ð•¹æVÒËéX£VbJ€ÕÞè·K‡ƒ¸®IÇc\DJ骯@›­uš+ »³™wm–'§5rØ:i𮳗—eÞIAééV“Á–>p»§8ªæê÷C’o6ʰíZz¥{}½Ä>XÏŠ‡~ƒ¹µ 1ÛÛù`b5^ y„‘øH@VܾvZô×eh\:žµæjˆÔŸßçN=DÏQžíl¬rÀMÕÃo½ñ…åÃÌÛ&5±âéü½ËC÷ØùV'‡læ¼´*.;}ß2/z·ÌÍ*ÎK˜îbŒ¸! U±½›M½&ñƒ†¾ÕêÖ––q*@‹’:÷>µæ·¬N»*ŽžwAõªŒ®&„¾[˽Ie•YvùkÓt’ÖöDîY•GZ†+[i£€¼@º(ÛžÕ`…üœqYÊ]cñÐŽHm@Èmä ÕZE¢±ÈRAååO­oø’Å5 =czr¾õÈh©$oh®â$Ý 5µ£¿»Óíïm"Ì8ö5š4»EŽi ˜Çðõª-©jf"£ìêqùäÖ4º”6)#y¦âéÇ%º¥ tgFÚõÍݱû;¥´#¬²p*å5}FW• zœ“0<Ø•gÅî¤äBŽëœ: ë4o [ª¤—¤»à=ªÚHZ³7HÔ5CžzIéÞ¥·q¦ë¶÷Vì<›ƒ†¶kcRÒ-ìÞYb2‡÷ˆ;ŠÄ¿–+}@&ѱ\cÖ¥;†Û‹âï2MZWs ်?ÝÝ]hÁÙÈ#"<Ö™Y-0q•8­ Æ?°£;²9&‰l s=ÂjÒIæo”Hqžk§ñ·3h¶¦}ÃŒ°ÎÞF?·Ë]¿­wºÌqG¡>åÜËåDºÊhÚ÷ö]¬Ñ1f.1÷¤Ðæç[ó÷²àîp}*‡‡íÒëV‰O!NïþµwOI;˜#Um§'ð§+!%s?[Ö$Õ¤:v—l|å}«+LÒ5Háš9Œ±ÛªœóÖ¡ðÌË¿ oâÈ_~kÑ.X rÒ‡ùT·a¤y߇-RKdžÞ6 î"“_ÐdÓ³qo3Ë3ÍMá˜ÃkHO3 í®¬"º²–.YJÓo¨ׂµy]^ÒF-·•>Õâ˜UuÙ†¤Ðà–ÏTÙ¸’llw[Ä+ërò2qšz^áÒÇ¥iìè豊åï/¥×¼DöqJÂÕ28ýkbݤ‡ÃbNäàŸÃŠâ¼6$ŸXeYv)ݸžõ YÜ/ ZéÒÚø©"U,òHäâ¤ñe´°ës¹ÄŸ2þµßYiÖöãtkûÃÉsÔ×'ã—ŒÜ[Dà9ªR»†ï‡¢cá”V‘›zÔWšÜ#RDG>a“Ÿ­z~„ñ‡#g¸ •QÉ›­ÝŠú‹êxÃñÉ3”€ ŸZÉþÁ—_°„r±¹~¡ºbã³"Åj¡°§9ZØðâ¾…1…ùNhóC¹ÌkÚ:hÚ]¹sºbß9=µmh:ž¡¢£KÉ7¥:Tm>Æá¾¯ø5‡ö:DYNÓœžô¯xƒÜã5½ô[ìÄX©9Jîü1¨µö“»ãålö¬ïÚ+Ø$¾`Y#< ÀÐõ5Ó,ff˜ƒŸ•}M5ï =9¦Ú ’õ5‹ªx‰mËEgŸ1èjà§ñ ö±0¶k‘ np é[–·phÖeý&á±óM.[·J¸ÔÝ[ÈÕ‡:Š×†fv!«HšîêÄIu…sÈñZP 7&¥”].WéV ;—uD:€Ý1SD›ñR4Kå.vçéIâCЃO³FÍ­ÅICL´ü–<Ò ,™ “œ@qȦ“ƒÅ6Fb¸ïÚ¢Umæ€ìźS±‘Í)éŽôÝÅM)]¼¨æ‘FNM?q>ô„ä‣å4Ý¥ÎãÒœA#Å.@\f€+2o2äSb€*í­ ê FàÐ ªF2ªÐ:#º1ÀqTÉëL{e›’1ïHa#ñŠŒGZ“Ò´$\Ð}(QÍ(ÐqŸ½Š¯Å…ÁÎ0ŒsøTøÃsUµ,g\ç¡¿•PŽwˆ”Œ¿x>ÔšÌ`ÞÚËfU.U²GbóíLðxeµ¹ÈÈ.«^ Ñd¿e€~ý*zéNú“b{û5KdIæ ŽÇÚ²"[Ó#ÉD¸ƒ çœU]âò+¥·žäB€±ÈN; ë”Æñ®XÃå>´Þ€ŽhkÚ„qº|ÁÏCØ~•Yfñ¦V%F;ˆÛŠì– W¦„òŸÃK˜¦ŒK? ¢q{#\KÜ1ã5³k F؉B þVUƒ Å&,ó×&¥±XRŠÒôŒ0Ú’C•`ÃÚ‰¥#l¹à{š7¤×EµKª³“wsX²]|ËKÉ<™‘·G'b=)Ú¥ÔRÆö·™·s‡§µsw҈嶻”\0ùG·½8Ä._\í¹’A'“*ýæå”Vt×ÓÝÞ´–ˆbf]¤F>÷½ié~¹¼+5ÖbˆóƒÔκ[m.„pB¡ñu&®é¹ÈXxnúö\É”9fnµÒÚèZvÙ—qÁ-Î ÛŠ2‰ójÃû’ÇsIÍì; ©RU@ã®)¨À+V5ç‰`³F‰ –R8 Ú¡Ó|Kľ\èc'žiYŽæòå°§DÓLÜ«äy¤€‚‡†,@¼íRFƒ'4Û|‰ˆ§©ýë@ „™Q’)ePe\ðzñFÿœM—ri-ÀœÄ¼PAþõR»Ñ,nTïAõªxŠeºû-šy’)Á8Î? e¿Š¦ŠA üwgý*ìɹÏ„™·gÇ<)¬›Pµ ÒDÄ2k½±™'>dl °éV'MÑí8>Æ…&·ç™Ú?“!³G¸xëíWmnü¦¶—~Z2P{¯jì®ô›;Ë|4*XwÏ\øQÁóm_ª¹‘6/éšèh¡…Îé]ˆ8ô«1j‹*»`©V* ÷ÅqïÖŸ7˜ñáÃe\T#PQUÖV$~4rßT±Ú-ý¦±i-±`®xÃuÍsPé$òÄ»â•bï[¾Õ±n€¤^Š+oCÓÄkæ=¥AëÜÑkŒÑDáú®F+GÂï·Ãà±A&¨øŸH½¼´š$J«á{ ™¤e‘ÙmAɳEÓAmLOµ¨»2å|íÃ?Zîu{¿?O”dyf,çð®__Ò5dŠÜd9íÛÞº?ì¦ûÁ)8dç4=Ðç†-ó©3@é]¤0+çæË2+‡‹M¹:¿Ø­IR§ ãÒ»‹XŸåÄìIÍ)‚G ;\ &0’EÒe”üÑ”ùq\ï‰ô8[uÕ¿ÞêõgÂV·W¶ån³öT*š˜º˜ú£•Ø’U8,qíÍu0ê&îG[õÄæ±õß 9 Ñ·Ë#ªñ„cÓ,² .$“ÔÛLf>•bÓë³.ö«¼UmOê2ÚÁ cûçÓ½u–v c·Œî,0ÄÖ.¹¤ /µÛJæVcæn= šÌ­Æ°’›Hôâ¼öÅßL×ÕI*ämük©ð•ê£ÜÏ!òÜd-.µáÏ>á®íŽ$êWÖ•ìÀ¾uÛfØ©/ÎøÀô5ÌxÛ ynŒsÆOáí&h¯žêò<ó…SÓ5sÅ$wnÕÛÌQ÷{b…dÄMáFÐÕ<Åç=kŽ–çËÕÖçw>nOç]?„ô–a{80¿Uñ†›ûUš’rqÑj“IŽÚ~&·MWCŠú#¼Æ3Ås¾×žM´üD篡¯@Ñ4ø-ô¥² ýß›>µÆk~×jm["VÃ{TÅô #GÅC~…Äá”>A¬=_}:/%ÑŸwÜ#Ö»;]ÞóAK)° }ëßC·Òõ n&lÅú­ÝÍ4ÒÐM\ý֧¼Žâ ¤w•˜ö¡má››Ÿg`3½TÖݦ•o$ª_ìRNUOÚº à˜8‰ÕãSŒŽÔ¹­°ìpzgî¥p×lcèµÙA¦ÚÚ†(×8cÖ´ãùå'øGAU¶•»ôÍKÆèâØÀ‘À©ádw ‘RJÈ©ŽõVßh“Jã4¸TèrµJ0^*DÀ4›†¦|ÊvO™¶–3–À¡ š’„qƒÇZ`bÍ´g5/Ü:Ó¾ïÌ( @oš‚§vGSI†-–fœÄ©ç¥#oùzŠ$4Ø¡ØåÎ{TøÁ c\f˜èÛ²*@æ€ps@ C•ÃiÉ·"þÕWyæ€&IÇjk1Í66^¤Ó‚Ni\,9F²¡äÐËÅòy¦%À§`ãÒ‘>UÉ4íÀô«$_áëH¤ÒñŠAÒ€ž Esó[I¹xÚ•KÀu¨nˆ[I‹ˆOéLkÁ¿êî†]QQòúžõÉx4’·L9Ž?ëÞÆœ…#]Ó!»´f"1"clŽ>çøÕ}"ËK¶]ðβÈ:³6@>µïm…ݬ°g×úWw¥êBæ5’2Ævæ3ŒMk¹,ì¥Ô!R2²– ½ªv%”ñ´Ô×§^]éW¯jm÷lªt }Mt‘^Mt>h$Š5êÍŒf“‡sF<*qÿë®3ĺÌÒ\½¤ìDo˜¯Vö­-W]KXŒÎ$¸<.Þƒÿ¯MÒ<9 žùNÇ8íN:jÄÝôEÏ 4‡GMùÊ’9ïRëê²Øãx$¯QZ,|µTc+\~­ylf’WKˆeQû²Çå&…«¸ZÚîäû3FMijÊÃåŽOàÏ­X¶ðÝÍÝ„—r’³}èÐ÷õcBѤšOí ÅÉo™3]z¦# œvªr¶ÁcœÐuõ`¶w,Ãå GWAí­ÔްJ¬PüØ5Ëx¶ÆÝ%†â?ÝK+㎞æ±ôJ-Q‘Ÿ.˜ÚJÑkê-EgÉÏPkÄ÷/ „qCÃÎÁTRÅâM6EB&Û¸d+ ÃÕ5Öõa²V#•cÐf¢)ßR®G¦hö—7>hwHöásÜõ¨/´‘öÑ ‘%ÓÕizXÓmš2û¤c¹ÚªÝßYØ#ȯKœmsU}t_Ãwm5´–óež3ùVå±b V/‡ì%E–êo‘å;¶wÅoGÆL€ãÔš—¸Ë n4¨Hª°j1\FÒDY6ÐG­Y’Q Ä€FsHc¼•fÔì¶örNÌT$e²>”ø®âIGµ¡ ¾Ó¦…[%—…¸^x-µ2á 2žêx®›Ä¶·{Ü:È2Oµdé÷–p4pß[¸º·áW9ÑÆï¨Z8žÜÆŽ@O'ð­‘(âôuì$ò\nŽ =«¸ŠX¯!ßîf¸ ¬>Å{$Wˆé†ò©ô=kû&åÒWw„ôþ”ÚM©ß¤`G·<Õ;››{›— Ú ªIâ{³)–`žëX¾!×í5 U‚Y³ž•*-”Ú6ç¹°–Æi#’9>_¯é\ C1S*ÆvÁíÖšŒOÈ ÇŸ¥wövVöúREòì+Œ¿sUð“¾ç¹hNPá?Œv«úT6áEÅØg*~XÇÍšv©bÚ}Øe99ùj”73AŒÊËîBÕn„´:SQ”Úª€«¯ÉòOáXÇv’¡™ ªüØ>•ÓÙÜè–‚7F–læ—]´S²Û•êSè2fõ- ›…2. 7 ªV>ŠÝ&šõ•öýÒ§Óš_ ^£Y}È™Ï\Ö.f–xôËeÜì;ËÞ¤} GZµ¹‚HZßNÕ5Â&æt’'Så/Ý5_^{GÙa¶ŒÌ£çcëŠÛðÍô7p‰$A†ãšrصb3Œr*èËDÏ&¬梺$Ç´u¬ÑG ©©OB:n(®ÆÚÕŒä;†:W!©2ŸÛ«…*+½Œ `Ê®Z!u*A¥[A<“"a¥ëž•7ÙrHc”=ªÂàwâ”°ÜíÖ¢ã1î<7ayñsœŽ*Õž“ok—owîiÖšµ½ÝóÚ#eÓ¨­ zSÔmá)¸0y ÙF×)#G¹ü¾Õ —ëÁ¦©w8"˜K2œ;Så·Þ¤6µQºÖ¬lžIFGóªVþ/Óg˜!†=ȧ¨Ifþg=sÇÒ-…¼×"GŒy `žˆî^' ¥KŸ=©U"¼§éÐT"Ã˺ Å]p»š{™MP½°3ʤc­s’x^ê-|][ɶ-Ù9®Í‡ðÐGZŠifRÇqÇ4ë¨ F6€{`úU=]°:Ž´²2”óH ‹O»@%¶]ç©”Þ ±I‹ªuÆx®©dIbµ•}âm6ÅŒo0/Ü i¶éúm¼10ªÆióÛ‘B—5Oþ02 ”'<Õ«]wO¸º6©).¿•;1iкaF‹Ë+ò‘Îj»Ø$1ùpª}=jàš'Sµù¤Ddî¤ ép,Þ{…i@Ç5zX†ÇåLU†*OXzÐÐ̱¦‹{†–ǘ{ÓÞ ™¹(õ5¦<ŒPß*䜊w: 65}ÒüÄõ£Q@ÄW¡ÅgÜê0Ã0C*‚Ýjì/½ç Òi…õûkÛÈ»C¤àý+‚³×/"šhM˜9*Œ£šô& ÆsU(RRÈŠt8§`g0ºeÝ®¡m3M#‰?Öè+QÓbÔm¶H3ÓŠšâ9ãe<ƒ“S*íu>”†ÓOXm–$8 1Šž;l©SR©#§Z˜â4%ºšLf|¶_¼EQœÓol Ä{Tà‘ZÀR}j•ö«i§Çæ\H}è¸4:Î.ÝõZ¸cUÊŒÕ 3V¶Ô­üËvܵtΡ²zPH @¹T®4ß1·/8õ«ªë‘ƒÁ© m‰é@Êv¶†6àdŠçßOÕµgŽ;ø|»T­tš.• Ç9È&´ÉLã#Ðô©uäw=6îHÑ•ÉëšeŹÈoNj·9çÞœåBüïëP2‹Gö€0yëkR$mÔ9 ¡àž•s8\½LD‘áW&WiªÄàsRǵ‡'šL«ŽÎ*iËÉæ˜£ƒÒ¦ #\ù˜íOr `RôRøÀö­‡¾K{˜ 9f— ‡½)ê5 —-–Öï½#pAeê­s6sêWû™å6‘¡›ø°koÄwe§¶Ã†”…úŠ] Ý­ôxq’d;Ž{f=Mg åœ( uâ§Œ‘ ç®)’(X€ïNRB T ÏÕ´ÈõãûC0x¹-gKM‘ NL2ž§ªšïž5~¼cšæ$¶†V[‹%…›¼kTôÛƒ¤ÞE11N€îk¡¼Ñm/!Üñ…—¨z©j VÊp†9ã+ÝIÁ©–ÚÊiÃù1Ç\óëšã.ü-w%NÄuA$Ôl%iS*yWA6Ñèò*íXúþ ÐY‹X?×KÀ_jǶñ\È;¨·>ðàÕSª%Æ·çpAòàöÍ¡} Þµ’ÜòQóƒéRø’ý¡µÇ&^WڵΠÙ4½FàBƒ69¦>¢ÒßÃ<È6©ÜV«”.jxzóËšK9ÉÝØzšëV/3æÁ=+ƒº¸K}enâ‘°àâ­;¯ÜKo²ÚÝoÒ”¢ B¤FuŸËŒ0ßÜTïuo¥EÏrÕçoq¬^)îY}‡[èúÛcË ú¹£”w;Û«Ý5£+<±”îŒäõ/ì'B,ÑŒ¹çËSVl¼(¥Á¸”·ª¯J±-®Ž…! ¤áëBÑŠç.4Ù?5ÀŽ,ðKa¿*ŸGÒ_Q¼( ùC’}i‘,úµéî#ø®ÒÛl0$I¦j›Ð,PÂVbBKÈqÚ¯ê–)ycöX²6¨ØOµ[i ¨Çz]¦X$BØb³½Çc€{¸$eš)$)’6óƒUm„Kt>Ñå{ÕëÁ}¦_àÈäò—éW´K–y®îÕl0ÛºV—Ð’eÏkÙáoq¶<rk"ygµWH^HМÏ×G$–t%‰-;§îÉþïµs—H‘©Ãdƒ¹—ùÒEvƒk µžAýë¨i3÷«Yaíp¿9K{W iª]YÈÓÊ÷€Øã«mâbñNXŒA©qÔ.hêÞ‚öu™%òä?|úÖ}ŕׇÕnläi#'÷ªzR6ºà³.ÎÁnx=8íUÄÒùÊ’„#%]@ÏЊ,ÄÍ+Ã) <2@Ç‘Á­x.DÊOnƸø­µ Ruf_ôt|‚F+«„yQ0 ÇJCW9kÈÒ_Fƒ¡pOå]Û3Ë#b3»ð®Bf'Æ1;@aü«cÄ(ÒYãnö=…­Å²×WQ3yŽˆªØP“ï[_mŠ8IdEFzלYéW70‰-Æì1«zìVñ[¤²n½èåÎêÆÆÊÞy/ |¿Ä;ÔãP¶WhÞTVô-\þ“;Úè,ò±%cÊûW-µÖ±tòÄù ä“IGP= }vÎÚî;43ÈpÕj†ËIföÉ#aMpÑÚ]K«ys8?)­?%›q#|ªÛïUÊ®+šOnšŸr‚Es–-Éɬ«/íKxâ”l”ô=…^·V¸ð¨…“Ò¹Ñ5ÛL»¼ØøöªK°\õ 2Ö+Þ6à~µ~IUUØ)=3Þ¸+S¹´Ó庼fb º²oµÝE ñ•öoÀ¢× N's (|’sòƒÍp“k󮊛ZA0\nªö^(š*HÚB÷9àÓåÐ.z1gŽ)³:¢¯©®/ÂÚ–¡u#½É-bÕÐK|Šù»PÐî\I¶ÌF@t5_P¹Kh<é$ù}+žkéu r(­Û÷1œ¹ª^+”™•D² Wµ Ãû^÷U»há‘ãX¯R*¾›oe{«K¡ŸŽ V¯‡tÔ “!&IW“\yl¯‰F!Ęýj­¨6tZχà…<ëFöTÍXðç†åŽt½ºb¬>êšÊ¼MAȹœ•‹ª°õ÷®—BÕ$ŸO–móƹÿ : ¬Kò|™Å2Xʟݕݎ•çvµsm¬³ÜHì¹ ¡éÖµS]Õ.5øÒ%ao»ŽÕ6ê;¥Ëc AíRË{†A¸ö5—¨ê0é–¦i Ãï\Þ¥¨j-ó«­¸ÄP£qÜõ)Áîq\Ž©ªËª&›ÿ ±§ëÃQ°b%Ûƒí\匥µ„óùec´­51\ŸXðÍä2DörI =Y ×]¢Ú\iö)Ä¥äÆk“Õ5mV ]bCÂÿzºNòdðãÝC…}€óÛ4;µa›>fñÏ ª²Æ_-"†'óÿë¿iI$’±Så¡éš¯©Ï¨µûIpìÈPzP +žž÷Â÷ OCJ¬„^sÜW–j—Ú­Ý´SO½bN3ë]‡õóæÉ¡Á4­dH×KfFQõ¨g¹-øß?Jó««ÛÝ}æ>kæÇÒ´ü-y8¶˜Ü»Tãyö¦ãmBçe Ò‹@f (Mrþ5’ô”d*ì`ƒY·÷w:ë¼rl†!ëŒÖsé×ÖúlŸhfÚŒ0Ȧ£­Â÷:o+C9;rç-[/3¶7=«Ï­îõCbðBŒ"=À§èúÍΗx«pÌQ Ò”uÎþòñ4ÛS=Ì€c ¦iÜz©‘Tg ®oÅâk½>9âÿRœÖ6‡§]^ì’9Ua‘øÑ˦¡sÔ$º‚Ö&šiÇêzU-2ÇN–úMJß$‡;ó\ÏŒa¸8ùHB²Šµà¶{]žGÎ[p‚—-ÕÀéu RÛMÛö™ƒÀªw"Ó£ƒÍûBàƒ­pÕÜúψLeŸ`}€Znµ¡6Ñg2³–ãžÔÔUµäz&â;]ZB±Aä{V£ÌÂ_ökƒð=¢À†ð³ñZZ÷ˆ¥É´ÓÃ<ç©^Õ<ºŽúL71Í1‰% êúU†,¶+‘ðÍŒ¶,×7nÍq7;}+¢7Xnœ[¶Ê!,@Ïj]ᣧèqÖ“,dq“O"¡''¥;q<ÕÜ3ÍFÀŸ»H¿íT ßÍ8ü­òô¢Nš`‰ëJ"šäãŠr1 H’s@Î9éHíÀ§ ²Š"ŽiYw` <Áœz Œœõ à+œt¦ÆÀ¹朸ÝÍ;äVÍ–"’Lti s‘Lß“Í 9…Q·®hSƒŠaÈÆ*EÍhH§ P(èi2(Æ¢™ˆF%yÚiàŒœóQÜåm¤`rBáBÜ[ˆ­%ãn+£*åHÇÒ¹¯¹3]ƒÓŠëø<‘ÛŠ©Š`mˆóŒu®BÞ\ê—Œ¬0™òóÜžtºõеÓ%€yÅú÷®FÐâ ĨïÎ\•9ÕDL¹a jW²LK$™Ý¾&#oáŠÒ×¢¸k}‘¬­òB(Á÷5oF³·Š9'…Ë \äV¶Ñ 9çµO6£Hât}fßMµ’)’_3v@Å.™q-÷ˆÖå ¥€œWE­Y£i—'`È\‚È5ÉxjQ«™mØAcéÅZ÷„ô4¼U7˜Ö°Ÿï5Ò[ KXUGE¹Ï†»Oe«ú|Ù‰œ`Èw¥teÉ8ûÔ¤õ `ÜgÒª¼¯ ¿ÝèZHÉÆaæ JHf.§¯i×É{f˜‚Àt®}Ì’ÈËn“ýœôNkbêÂëH¿šXíVHŸ¦j¤>!¹‰ó.Åi}‰l¬¶wÓÄ›a›+Е©cÒ® «%Ì„î1÷½…Mq¬_ùÿñõ|}ÕÎ*œº…Ô²šù¶â=©ÑMw …#a`£>+çJ¼¹vš;QÆpUî¦Iþ[ùv!øÑ ÜY¥½•Xä9$µL½p>B¨5bßGÔ-®Rf·Þ=j‰¸‘F·2ý½ja{p#½—#×·ëMÜGb5Ä´U »OÒ™³0 ×v¯/zÀkÛä·ÿõ`GNôÛWP—6ÑÆ&Ï‘Sk2õÃAqâk˜ŽD§ujø•Ö-!Áþ3·õ®zÖa×­c~Yq;fº_@.4÷VSò‚E 3•‰mk{m©ˆmÕŒŠpMÂÇCâ°©`cAŸV6…núƒýžFýÄGqÐÏ¥KsdmäbÓ8ÝÍrÑÚj:m؉÷J"ú:­N(#Ñ&R /MgxNÒÚâD°+óŽjÅÜ77>™$8Ö&…>¡ œ`³œ–=¨@ÎäÅ ¤(£G;Ebëlf–‹ºy8>­½¦©e¦O=ÌÞdWÛÚ› é²Gloî2÷Ç=…J>›§¥ˆTQ–êçÐ×7âè®´D’gÉaòû×iZlíÅC¬igP·hÛ±Èö¡=Gc7ѾŠðñ™k˜#í>!%@dó9ëQ]C§M$¬uïW´;ë++cç+‡äü¼ÕZú‹Èênä‰mr‚»z¥cøJ&ûMÔÝ#äUk©õ_u½œ åÿxŠéô½*K(@£lå9>õ;!œb,CÅ+·çO0’+´‰BÞ ‘@8ÏÒ¸ Ë;« YÓi7 Û†;ó]f‘§êw—iss!T\|µRwDõ1üY4’j€I‘a]$v¶wšpÁ— Õ/i†æ?´Å÷ÔrµËY꺅›-²‚Ã8òÍ+]п £E­½ºƒ±³ÓôªÖq¼~"Ú[d'õ®ÏG¶Æ×E¶i9"¹ [s{â ;€g$·ãM0:é­†³w‘˜¡9,;ŸJ—Y,t‹‹e`†¶,m’ÒÝ" …QÎ:š¡âH¤“M•­×,8¨OR‘Çø&!&¥.ñ’‹i5xã›Äûq®xBÊòÚy§–2‘•ÛÏsUo­/.uù¼¨ŽÐÀ毛QXÐñ\*šLq§ Æ­.Ÿ‰|"îËÛùT¾,G:E´b<ÈHàTžѤM*U•²&QéSp8½77ijÌV&lßwwÖpXxbhaÂHþµÌ_øRþ+†{Q½K|¥zŠè´½2æÓOxo$g/*ݪ¤$s^¸…5'†c÷†Ñ»§Zé¹¶“í—,a*Ð;ýj;¨¥×5Ï0§ú< îE.·Cè[Ög† Å —‘@ÅEàë«i¡f !<[—:8Ô´bŽŸ2ŒÇ\燼7qo©‰®C!BvZwBhØñ³ ÒU3Œ08õ¦øaíΑ‡ù°r MâãUµF·ÉhÎvõ“áýêÊCstYû´“ÐCQd²ñ8•‡È\7éV|IwÞž¢ÜKôšôvZ…ó,ÞxùyUÛ (49ãv4‰})ô¾Tm&h‘È” ¼v©Œ¶ú)1Z©šúCË£5…¢ÚÞGy"YÌʽ‡Ö»-LX.iy+—"‰ v-hZu؉®/I29È_îûU·…LŸ1ÛÍ\•š5ùzUg•÷YÞåZÆŒqmŒ¢¦ ´`ûT03 Ý*Âc>µ-”á÷y¥o"…ëóSŸŽØÈ¤2'uϽJ¤*//q©>èÆ(N*3–áiìsŠGyZ`©-ƒNuÅF¯œóJIaHÎ8Í9X¨Î 'ð¥MØ Q`ŒM*d¯Z,zSAö‘Ö†å݂ԥn)†1ÉÅ9@^´€VéQ€Aæ¼+|Ôã‚rzP.ØÎ)ëÉÅ3¹§¯&´${ÓTdÓM3 P•zÔsœ[ÍŽ¥[ùT€’yø­+Û»a#-Í‚º ’<ŸLUì•Hb†}Û‡Ëòÿ:¾ –ØN3\ý¾µ`±¡óDAãjVñ·™µb˜ºäÔ5¨îkÞ ’ÊhÀÉd*1ô¯;´Ž4à8Ø¿.Õ9ë],zÖ§sq²ÞȈó÷¤$qUÿ±µI%¹“ÌŠ%˜’TæœtÔ¦¬.ü.ñpZݲ3×Òhr\èð±´W&–÷z4¬ÓG¾ÝþW¦?ƺ YÓ‚¥¸têFþ?ZrZhF‡tDgšVQÆ:Ó•\†æ•Ï+Î3Y”J§i¨ÊîfãÚ’l•5‘ïtÝXñÐÐå^2¬¡‡pk1ü9¥¹$ÀnN3Z×$KÍ!”Üg½=DeEá6"O’:o5ìQƪ±àØS¦‘ÆÅ#r3v©DŠÃc®À_á+ž‚Ž àÓAñÖ€NhaTñHÇ,@¥êqš®…ã»`ÇåÅÛ¸ ûóá©!$À qRå@Ï­4:çè8ç¦zÖ©áE¹¸’x&ØÌrTô5ÑȃÊ"šòsÔQ{j€á†õ;wxâ*U¸áªæ•á[t²^…اp\õ®¸‚ ¸ž´ñôëUÌÂÃyhbœ$VšŒÌ¯!Ry¢% IÅ %;BŸzj¢’™¤,|ÅÛ„sO 1H »-œ%w_’k’¹µò#GHe%º³šî×IÔ#Ãma÷Á"®K¦iv<ím :â¨ÛêÚ:’þgìMbjZÄÚË}ŽÙH]ÿ1賸!±Gu¯\½¼H‘Û+u Ž>µ×iÚU¾Ç‰z4Ë4±±Š%07Ö¬É;‰UÜsÒ“}ìr:™x¼SÆÁlWVÊ]W"µxÇï8È®Åh¾ãœÐöQÐD€c…Hæ<à‘úV Þ£ww+ÚéŒ ùœô¬9õ=cJ“6íÇ<ô¤•ÂçY¨é¿ÚrD’Çr ªh—MµyA$b»M#PûmšÎcÚN^Ú®åˆÇ¹¦‚Æ ¾”úò_^G³jüˆ:VO‹¡Dû$q ‚Ç»S" ÆqŽÕFâÚÎñ—Ή]•¾\ö©¸Ò°û+uM>ÀÆRÅg Êdò€ïT±mÆÕTp1UõmMtÛo0‚XpPõI[³ÎqVM´NSty8êk†Ïöµi Ûz½]vŸ¬Û^Z•|"ýàiÙ¡sE”K U!úZe®“mg)xãžÂ¹‹ï˦|µÙ:šê¬/RòÝfF8ÊÒ³At[p6c¯j¦óÅœ[¦*Ä€ÎHàWœk:ÍÆ£¨2Û³#Fv¢ŽçÖ„‚çtÐMçn¡5Ê?{‘áñvtÈþÚI—œÖÎüŽ:ô¤ôcEY¬¢”a£=ê¼ŠÍæ˜U˜÷­Lžã ¤Rsõ¥v1±[Å Ú*û P¡sŽwuö§³×—pÁ;¶Ð:ÓÕTÙ[OtÓIózV£QWoµ[OÕ,õslÁŠ6+7Yñ2ZKäÚÂg•zàt¢ÌZÓ٬Ğj¢hqÞ‹§\È:{Um X¼ÔC  1ç¡ì+fy;wrs´dÒwA£ÜW·GSƒ’Jã¼;§²ëדLŒœ)ÅkYx²Îîé-b d'iã¥n”‰pÈ»IêjöÜCÆÓyÉâ‘U[ ~î1ŠdÔR éš›\c¼…UùXÙ7š£–ëWCäÍ4¸Íˆ.-R]¨Ã>Õ*[ˆÑ@À ҥȓQÍ![v#ï`â“ ΂3¹Fr)V(ç,1ÇZó½C[Ö—Qxâv 7 x‹VûlvÎÆ'$.Ò*ù[DÞÇ£mvÇzh¶Œ~ñ‡=ë G§YpàÎ0½MhiZ¤Z” Ѻî<‘Þ¡¦ŠM£oqu‚&(Ž~sÝEEk£‹xDî¿zÕpÀ^ýk?Yº’×J¸š¾ƒ\²´QwçµzÇɶgeÎÑšÃÑu‹½BúàO$+÷K _3h]M  "ÿÄ{“ZQƃø@4ƒ÷¬x•3` \S™Ñ[íZ•ì­&âä·&·/mmïàx® )ô®w¼ÜÝ(M¬¸$zãŠéä•Y™€ŸJ¢]ŽN]:ãGu’¬†áC.HϽJtûÉc Ÿ3hgfV.j¬×&ÿWÉ`žž z޵zÛíΛeW‘ÁH(ü1Å4¶zœ¶v¢ ´Ù÷ Ú ®súÕwñi?w§ÊÍÜc¥hÛ§Ù¥+±y’0Èü…h´*“eTg8ïIØ59óâiri÷ž?Ï&·<Ò,X¸œ(í¿ ±ÜAæÆ7.JóÛÖ³®á‡Rµ–(eS"6A^ ö´ìuÆ›©êŽçdPƒœ)Í[‡Ã6Ql6äç9ïV4KÑv¥%ÏŒáÁõõ­I¶ã=ý©·mj#Ý) 0߸¢Ó²Ôã°ï\V©¯ß=ËÅQP•Ø3·wóœzÿJŽ9È“%}+€\Õ#‹‡`8ç‘V¢—_•<ÈÙØ7¦*œ™Ù4‡Ìb2»‡ ̓¹›ŠåÖã^ˆ1ÈN{­(Ÿ\w[’z±+ÿ×¥Ê3°I" 'Ú†}²;×!öï•b%W¨ÛRÙx‚t»dÔO–èF1G(ά¿ÏÔÓámÙçšÈþÞÓv¼à1ÆzžÚì]#Ko"€zS`¹zYBäT%‹Î§8ȤŠ2Ï–cïèi.\BþfÆÚªOè$ò,n¤UEêMÞÚË!ÍÔ¬#ƽ»zKoœ{Ó†"U-m4‘Èœ‚;ÓÐ5:Ap ôèÀ=s\$š†¥i)ŠYÊ€p޵rMfþ e–;«iNq…Îê|¢¹×ÈIÜ zTfäì85…io¬^EçÍ|aVVlãUþÒK!päIʾ1K•ÎÂù޽¾õJO̹?A\Ä y£êp$· gûúˆ#Œÿõé?°!eþÐW ÿ&¤}Pu-²ý0ÜŠ¥.‡ªãËaìÜÒWî2µ¶‹,ñ;,¨»xçÓ­g¼ÒcfÊ·͞I4‘隊E û9!9<Ó40êW†)Å,)ˆîôÛѨiÑܘ|ßZtˆv»ò¦ØYÃcl¶ÐƒåŽ„Ô×È9ÏjË©IœÅê+ø’Ø1ä•?\WA©ß}—N’EŽ6ý+P¶‘üAhÀqV5¨Z-2Ÿ¨ >¸Všå›ny¦ø“V‚Y’Tr¸šÏðݳO<À!LP^Ùò-†â œÕuÜèú¥Ô"8Xf5P;ÔZ¯‰!Óš8„bFn£Ò¨Ç§&•g,d9O™Ò¹˜dK¸îMÏ;Ÿ“=zÿ*”®ÂçpºÅ½Î”n·P¹ú«£k0ÜÛ¼²>y$ŸJÉ]Km̯·Œ‘Yº6›>§æB“2ÇüXn´ùP\î,õ›+×Ûm&võ´Ø$ày€0$k•Ó´¥¿˜Òô5ÒD¬b󊆭°õ1üA Áqg$±D©"xÎx^Sã[;ÔïSë]µíÒ­”ÛÏE#ô®/EÐ&¿K‹¡#Ä ¸ïUÜ–jj:$Z•ì)l'ü´º›k(¬m"…1ò”×-íæ‡¨ü¹ùNIë]´¾¶Kˆ˜|Ümô¢KA­ W`#frÜ×ÝE kò5…Â#’NKqšØñ6®ê‘ØÆHyp‡¥cjžk+8î vr$žÄÑž‰gqm KusçI'A»Š¿qwo ¡`²“Âî®SÃ:ëOfm%ËJƒƒ\î«=Êë2¤,ÁþQý)rÝ…ÏQ{ë{x³4ª ÷f╯`6âT• zƒ^Y¬MvC\«*`qSÚͨͣ=½ºŸ-FKQÈ· ³Óc¾ŽhÄêÀqYºˆŠâÍí¥¸òüÑ´z× á‹Û¸uDˆ91Ÿ¾§¥7^7‰«îyæù£ÁéG&¶αã‡ÃzÆI?Æ{æªø*e¹’å䜾r}*$¾)vK8PÕG“:ÜÌ"*¯J«ôaäħUFI²&×´ßÞÅö„ÞAf¹wW»–ùl„æ%c†)RÚø\™Úà16z“Sm.Â傸‘XH6b1]ÚëVRÜ}™'\ò3^smb÷z´‘DÅ n€W}w#í"2sÜšó=KÍ“T 9ýãöúÕ@™ší¶Ÿ,yn>ÔÀu5¯á}Ø•¸’ãq#…^Õ‘©ønÕ¸rè œþµK@×¥°Ô¼™˜˜œãžÕV¾Â=2eÚ:ðSXæ½me ÀM>Üǧ½Oªê"=?Ï‹m]À¥r>¹K­bg¸ÄŽà[½JCzØÇ¢ÝÜ€7C+ó³µoj7±è¶;ÚÂÞ±%òÂÆÙÇòªié¼Eâ¯ìéV£øËéZZ.­«§,«B>ò\O‹!#ɇÎß)ojë<+Ç F6…b lT´¬ÄÖ|Wui©{ ¿)æ²u/j·ì•ö+áËAŸ¾T6ç=}*猣Tk`±*!\ŒU%`eŸ j:„³ynìÐÔ×h’îèI9®ñ%ΜžGÊ6ŒšÝ…Å£â^žµ2z‚Z+u=êkpi©2È€¯J’$ “ëR;ƒ†ÅAƒ†Í8£5%ŒHÆyéS+qÚ˜({Ròòhà“LL„Ö‰‰§'NE!Í>!ëI·©¥ÁÛ• B«šfO9T„ sÖ£‘ÔŒ)æ Î)äädRF¡†âiËvà£&£.ÄäT€e±éN#' t¤2­z›Ë  S\|¤Cï@ƒsŠL´áŽ´£ƒŠ±Á (Å)'ƒ¥ÏJlŠLm´á°pj@¼ñϨ¦0ʰÄ1BÜ3ÂR0Õn£l–qŸc鬋¹5!…’ÊQóÆZ«ápS\»Œ•s·óÅt:Ýá±ÒžU?uGÖ¬F=³ØZâgïçæÁÄÖ]Ÿ—.²-”É¡ÈÇãQr‹ ŽgV”n"gÿ­ h…³IsH%ul‡=øÍSHBjVñY¶MÛO2°våk¥ûLml·*ÁSnííô®:öÜ ¿)^s,ç21yõ5KÍ<ˆ†]r;ûT¢‚Æýo‹ÈƒåWؾø«²•l|ÕÌøzúÝ<»’ I%³Ó5Ô²’œu¦ôÔ‚ø/Ø%m¹8®J{¹Ú×rÛÚªõÉ9&»à2Ù²g$Ž•Êͧùhbòì–W<ß7ÿZª ̰^ôF6[©”ã*0E^—ͱ¹† P¢4cž ¨´ÈV+«§˜ä.}ϽC \\¸”E¾6~i¶IÙi‹;Ûùó’7µMåQþÙµ·¼NepÜ/ÐÖ¼q’ûCÒ¡•r€ù'8®cT¶m:ú=Fß(ŽØ èc»·¸»h *ÒFpÀÒ_çi-¼nÀÆ= abkIÈ®‡*G=ÁI5ƒá{‡T–Òfùá8Úº —x¥³žºrºµ›—ÆâTÕíyQôÉ?‡­UÔÑþÄ’Ï÷½*MV E”äœ CȪ+ˆC\È£‘úV$÷º¿Ÿ2üÁòk¤ðt%¬¥/»jmGÃFóPŽTS÷ÁïNé0±au=&d‰°J}êä,®ÓN¼Ã€À"½ÛN[kd‰(@¬;ß ¥åñ•?v¹ù€ïI5phv©}džžHòÙ²ü-{km$ÞaTr}+¤m*4°6‘¦}ë'Kðª-ÁyAeÎBš.…cn+¨¯ 2ÂïÐÕ¡r¶VFW Üt§Kn‘Fˆ€)è©"_”#üÇÖ¤g«k²ÝÎaUdŒ6{ŠèX‚ÇI‹ìà;2à"õÍ!ðÃjG5¢¢?F횟IðäZ|kç$ƒ¹íNêÁc/V²•o,¬ç&³ü?xö—FÊSû²~ótº©-nö‘ò±ý+2ëÂ#í~jHv3n"šjÚƒFgŒ!–;è®PP ­_´Õá¾Òü¹$U!6º·zè¥Ñá¸ÒÒÞUÜ `\‰ð”ÇWXcȃ9-M5³&ð¥‹}ªk¶LB ž†³õ&Žo¯§š7W¡Ç`¶¶ c ¸Ó᛫aæl,jÛÁõ¤‡b_GºÒØI\Ò#Šßð‚¤6Z©xŽÆîúæÞÖ,6ãq­´»Í7ÃnŠÊòj/ Xæü.ÑqËŸ”«cÞ }n5Ç:Ðð÷‡.…ã]ΛƒsTõmRkàÁò~R;S¾· Ä"ëNš%åÊV…CD÷IŽWŒÖþ“iqibñÜ1g)€}3Yž£½¿B `ãõ¥p15øÞÛV2‘Øzìô­JÊm<ͽ?ÕüØê8¥Õ4õkL&Ô™~ë{V~ƒáQoxZà³(þÐÒºµ‚Ï¡“¢\[GâžG HR~µ«âV‚[F`WËàäT÷I¯È¡j–¡d.î`Ò­Ô…WÜÿîÓ¸4E»¿‡n0§”>Õ‡¢Meov~×·vï•Ö½éÿb±KuO.®VóÂëu|Lddå¾´F[ƒZZÅÄw3¼'ÌÂàmúW)áKèì¯góˆXÝy'µvZv•…©µR[]Ý+>×Ákow,ó~ò2I ;RR@Ó&Óµ„Õu p9‰Ov®±#UŒ¨ž8¬‹ ;ÈM±§”€ö­¤(^FF7TKR¢Îs]ÕàÓâk`ÀÎüÎ:ú×a%½¦®ÒÝa‘Få ç×\x9.¯¦¹žáË–È“wàæGg†VâéU£ ‹YÓ'€¨¸‹$}Ó\Nµ¦¬Wââ%ý܇ð­½3Á>Jù×,d~¡OJÑ—IkëVµ*cçËéNözc#Jq$RéÎÅÆÝÀõÀ=«òÆó@¿1ï(ÊG½w¶Úzz/—’àm,{ÕËÝ6;Û ¯QÖ—0ís›^:ŪXG3>7JÕñbÏÂâ,Œ¨ Z.o§ÊvÄyîjÆ·£Çn!`Û<¯ÞÇØÝÏü ºMNse$ùŽ6ýkšÓP[x®ésÙ‰­ë…žxäXä äaXӖ䜒 ­´‰tqÆ=»U¶iË%們äWŽ}0:Ò^+[?Ù.¦Ì졼çn=…TùVáT[#Ìffùsëõ«M1 zVmLH—l# /šI?töz¥œSŧÄÞb*ãynõ®orY #’Ö¤9]è¹ÚÄ÷4é<5r–zHaó…_á4ì^ ºŽKÛxäO8Nô_Ä:Ä-nö16RFãé\´Ks&ÅÞ. ZwOödÖÒ_иĥx9úÑÊ’Û}ul–|$ï–#—òúŽ:V¯…³œå£e~FzžsÓÀöð­ôq¬(Ç(„’Xzó[úMÕô‘ªÝDZ\e¢{:x§.›¶‘žõ“®hö“ÙO/’žx«½*è™cž«ëÐÔowùŠGÈS³W*èâ¬uM¶Ícx-³qÏU÷«1j—z$«á-·TÝ×WK²‹P¼š7–Ãw—ïMš†sgt%ÏÊïÛÿ­ZèC;+=NÃX·Æå$ñå½eê>‚ òÃqä/u“b.“4~ó䟻4]ªÎ¤n–ÒÜËp“¤4rwêmg îÌ[‚ÖÏåG(e+qœÖæµöãlíY! çwQíQÙˆ®'šîñ ª‹Á¦ë¶ðÍÖ¤˜¦PÊ éþz Ÿˆ,î£HÖM²` Á>¼Ôz¦›£™#.ä•—ú×3cl·¶ûÐ,Áxx߆ϱ¦Ç¬\iÒ¿ÙËõåæËPÖÞ,jù$’{StB}#R’8`zUò}O]~G hUÈ~¿JæuOÃ’­¤çaG¦j9§Ô,ü&Ò³·Ÿ×>€Ôò²®uÅ‘†3ŒTO¼aI®'ÁÚ…ÍÔ—âV‘@ùIíQOª_Ïâab&dˆH½çoåÀ$°B•é‘ÜTj»#$‘Ôšv×xÏ"€®ÓÇT¡we‡ýj8€P2§=*@äŽOáHcZÚÄ»ƒ¦=“]<ª7K)aøÖº8ÚwõÍ®â{SÖÂ@ p1HÒ]FMEsuª´³8T?Zçn¼Le$é¨$+×AG+a{— «ó¾*•­œw4AK±ùÎk‡„Þë· \lb~eSÀ¦_Xjº ÊóI攊¥nz<Ò+t9#¨ªm8ÀäšÆðΙ©DÏqy+0uáXô®…¡*ÃECE&1F–è hÃ*2ëY’EPGQSD¥$ðilQ¥µ 8ÆYB“ƒÚª$ÇpÉγ©Ki¥Í5ºu d»"ÓËSË‚þ•3ÄŒåë^[¡ëi&²÷:œî á1Ðs^ox—f)C©nËã`oQÒªÍuon¥‚p¹ï@sŒûu¬It‡¾Ö>Ù4áíãlÆ‹ëïR¼ÆÍü«/N1i>UÆ*6‘Q100j˜/ÌHØ;švËYÃdTWw1ÛÄÓÈØ PG{ ñ±‰ÕÔþ•ÄêºÄÚŸˆ¡±Inø¨Q» £bëÆVÄ€²“ž»x©­µ»KÒ%ŠP§Ñ¸©µÎÿN!‘QÕNׯxkHŠ}YÒfæÜçºÕE!HíþYX$HØþñèjýŠÊY¼ÀpG5SNÉ+ŒRóM;‰â¦V#;ºRžxÒGZiÞzv§± bˆ¥S‘žhL|ŒÒìÙÐv§n⎠ë@¹8€I§ ܨ8ë@_”{вg;Æ=ê8˜žMIò’TÐÎJÐAÙïK»`á±Mfù3œÒ“šGëÈâ‚[nhÏÐ" ñÍ0iãµX…Å ÉjvsH½y B75 ãç4ü #/Fô¦MŒ¦í¿q>ëںȀÎIùO\W'upañÂç¡*Ÿ†+­*#ÉìÜÕKbzœïŠËX®cÀ16>ïjÊ–õÞ[q ˜Jqç#ÕÙ\[Á,l“1óéZóû‰#[ÙRœ62:fœuj•¸4¯*®ðÅX®8ük¥†öÒâxæLž °¥pÑHðÀ`+¶pcŽç¥1'?igFewlŒ&8êœIZlú«G¨Ç*©sÇêjγeöë#u8 úb¹§Õ.„O‹Ë€@vÄëM›Sw¢þç•ù‰8©³ –Žï\´µÞ²GP}:s]…ß™€Et݇>ƒW/ Omeªmw†E˜ed#~¢»BùŒÇ#CD†ŠÊ€FwÂç«ÚÆnÃ)@êAÇó©•_Ìù»TÁLYaß­Jc±ÌÂ1äÝ«ÁrÊî9ïÍkÞØÇ=±I0ïêjÙA,œŠ+!Æ{uíM°±ÉÙ_b\Éex¥­\ä{ ‹S±f–9¬7KÞ^ì‘øWO¨XÅr›d‰~n¤žõ§HtÍb[&bQGÊ 4î&†i‰qiq$Wl3¦ôSßÚ°¯®dº˜³. ü€méÍuw±ëdvé²ê[޽{sYsXÛ%”Ëqp¢ô|äg¯Ò­›KIç²35Ìv¶Ààí_˜Õ émåE"$2÷½O¢i·±[wg[UÉÀèk¦¹±·´Ñ¥Ž(È>ï©õ¤Ý˜##CŽÆm8E*£9'r·SVt-µË»PILd!è*Ž‘§[jZc˜g‰±½;U#N¼´×$XîO•Ïz–¯¸ý°í/÷pÃ¥e^h7²$Œ«ç$¯SZ!$ÜBòOz©u~,bV+æ.ð®Ã·Ö¦ÖØ ­á]9—({ƒÎ}k=ü3{lmo^¡I#5©>«$bæàJ :ï/zFÕ™÷´j‰õõª»œ–ÏY@¨ñÊÁ;äP „_2ùü˜IçÎ{v®Ñ/¡{[i`Í€£ß•ªéÒ\”1Îã;¶Ÿ»žÔù€Áò, Ⱥ}§ÕkVÞîÖ<$zàãî* 7×;g»‚9»µ<@)’X¯ms'ÌN;Ðì©u'ÜVA ßLb·aÜ«îÉÉÁ5ÏA ÔŠXKdÃ<åsŸÆ·ˆQ lÑÒ¥ [“;°“¯ËŠÆñÓ&—µ¨wµn•Y"©Ågê©we%»¸ŒƒïBc9K[»QZ}ŒÌ9˹«ðXê0yq[ù.¾sïVŸI6šÌÜ!™x'ŸZÆ‚I4ýB6CÄd—ÝU{¢Kº¶›ö /2'#ŒH1ÖºM"(?²b(iNsÜÕ}U"}*Ws‘³õ5_Ãyö/k Ç—ÏáŠ..­d¿ÛFÊÔ°Fù˜”±xnCs‰Ž õ¤’ùâפ¹Ù•³Òµ5ëé‘k €Óc-EÚA¡–mÎæA¢ªAùW5Ði„Ófù•'Ö¡>´6kòŸ;o'=éšDw_˜§‹ÿ¼)6˜X»¬;XeóA§jWÒÃa'”¤¹â£Ö£ ¦äaÔà}jÀš(mÌÒ•W§á@Ìë7-¨­´ò3+“€{V¾«¬9šFë‚2exvÚ;BkÐz1*==ê5'År Al1ÅSHL»£jú•ÕÑIÔù~¸®¦Þ]»Øò t¨„k eÕ5N-Nï…©l;†£Ð}.÷–$`t©¡p\óP‡˜WŒS¥_+k)¤2î@9¨LÀæš»äo u¥x€îhÐÜ+’¹äÖ~¹¢Áª˜ŒŽSaÏóW¬ ˜‘“F B)n„Ò;+m:ÔEùz‘ë\/Šá¶˜kSó8ù—Þº»ÍF;-<¼ÉÔšçô=<ê7­}r™­#¦¬–`é‘7öͺ0ä¸à×¢ø‚ιÀT® 6x„³>;s]þ¼AðõÆ%;ÐÝÝÆŽoÁ³ù1N­ýà3PÁ"·ŒÙ¥ã•5…‡‚Aý©’£ÂL£îGò£¨ÑÜ_êðY[ù²ÉŒô_Zçmüe?ö¢Ã$*°»pO§­eø†F}J(‹€‘¨eÝSZi¬\¤ÒŒ)“I.àtz‹"°½ŽÚ4ǽ©úŠí¬#N7HÀ«\o‰CªÆÑ¶Ñ’:ûV˜ð÷ö¤0¹“ Ÿj,­pga¦êðê‰r¹Uq+@íe.¹Ö°m´ïìèÙ Ö®¥Ë¤e 8Ç-¡œG‹uIåÔ$µYC¤¿JÛ·ÓâÃGìñ…™âÈÇZã5d1jóKf»Ëi£] 6#çÛŠ§¡/s‰Ñï×MÖi‰àûš³â ù5Eº–å3ЊÊEóõUR2L~µßêš=¹ÐØ2€È›‘ª´ê7ÄÑÝéÏpÈPF9-Þ¹ÛO\6ºL›flj‹ÂÖò^­Ô,ÄÆ«€§¥eYÁë^L‹ò‡?N´¬‚çWâ›y"ŽÕr8,OLVÕ®·jÚ7Úœÿâ+ñdqÆ-T(EÛÆ*MWÊOÛ˜ŽrêM!‹¨ëšõ£]@ÞTÛFÞµ¥¤x‘eÐåm@¤žõÍèË%í³YÛw1õö®‡SÒâ‹Âî±ávqëõ¡«À¸µ¶Ö®âUÀ£,z¯g©jèB̪‡JÜðdÈ$mä2þukÆVq}‹í;|ŽGSNë`±k_Ô®®<;Í£ì½j—ƒ¯î@’)\´wÍ6×ÌO¹ ŒzÓ<$Ÿh‚_á!šÑ\)饀ÂðȾýëÄäÂã=ë\I§æ·.²n$}k³ðRFú\ à6ãÒ¹ ˜„Û',¼çëBzØÚꚥ̚š$2åÃW3¦Ã¨Ý±m5º²bºÛºi\G0Hv€èzôª~š8.gŽGÃàÀÙµq©Ï¡è ¹7]¶pOjãu@n¯9žæNJŠèYˆPúö§O¦OñZé×peÜx/ã@ŽˆëúR(C2ã=”þ])ŸÛú,¬w:ôÇ1ãõ®GPÒ¯´õG¸l£¹È™så¤J°Î.\ž@O»íG-Âìé®m4]ZÕâYr qNð|óJ'‰ägŽ<›×Ú¹e³½òÜÇ +mè8⺯ 5²ÙÈ‘&Î\7­ YgH,ÑҚìñ¦™£;FHô¨ášÛH ãšÌ»–ÕTÊ)J.qUVàår8=êxäÈí@ 䃒zt®+Äèöº¬7(μýGZí‹üÛXã5Ïx¾újÌ:£ñŽù¦˜™_K³¶»€MÉk>~ö3þEX¼ðôrÚ¼·Òî’0Nä=é<4 ¶D̼.G˜¸èjÿˆœÅá鼬 ásõëNú‰¼ 鯑…óSíÅo´I bFr1T44…4«a œ{֦ϔzzRnãE+{-–O& œ·½8Iµ×åäw«\mãŒ~´ÆLŒcšWŠs]ùLyL°8°®nY¤¸ ̲ü³ÅŒœö5kW ³€ðIå'+<}Túj4vIQ¯e J‚7¯ñz¢FA§Ir‘4ħ••ºƒÚ¤‡BÈ„\1P¬‡=ÁéUf×®îå1i–Û¶pd54Z޵MÅ•1ŸÝã4j$Óîì᲋ýjÅ6æ#¨^Ô¶wtóÝH̨óyh‡ÔV¦µ äÂ'‚X%ÇÝuê;ÕMn3o=½Ì 0ßêÁÀÏc@kVj–fæ(b’T%‡jÈ‚+›ˆû5—ÍÛ5¾Zæm2V¸ˆ3â0{b±a‚0pú1Áî“ùfªöÆÒî’o5­ tÇ EkiñÎ,J¼"<ºqøÕt‚Ã!d³º…Û£Gò5§cf-¶Í$€œÄœ~t˜"Äq°ˆcÿÕLŽÝ¼ì±ùZ­d„Í$d‚Œ­a”iî0“ä$WymåÇ’ œ¨Úë3"Û,d1,Ø]§¸»‰£¼¼Ž%I2 —ÎE\™­¤»êMk (¨5kim6óÏIË£TöýiÚ'ïŸ-p0Eî;[Ë‚=…&ÁsxnÖ[ï´ï|ç%;Ïñ¹G¶¹~6äú êJ•nÌ}*­ýˆ½±–ŽF9õ¥q؉H6ˆÙl`ÔŽÀÊÍsº¡$¥ÝrP†ºFfŒí#åÚ°Š:²¨Ñ¦Þ9Qš¦-N§¦y#r—‹*G­^ÔU®,'N̆¦Ñ¾› 8¡ å4‹[Û oìÊÝ¿6:Sëþu…üw!™½}«±ò#W÷ ðC+lx÷/÷[¥âfŸ¬^ê*Û#Ø>ût&¹kÑyý¨Kn¾SÚ½%m"Tتz Ž].ÖIDÆ0d^ôÔƒ”‡Lwûf~e óU‰¤ €>Þ!ŒÔÙ¶n$XsÅ-Á+Úäp8$­µh´*ñg˜Â$ÜZ›Œ©§\;LêG«Å—×ÖÁÝw98®ŠÖØÄù#ÖŸ5¢JûÍíBÜäföSt²\†}¿ÂÝ+¨°ñ·ÙÊŠÌÜQ]£á›Kè ¼J®z:õ¨tß [é²ìFC7QV扱ç‰7•«™dV ²n u5Üj7~šV…“# §®ßZ[/ï仹!ƒ6åQÒºymáhŒŒPä>S˼33GvcTʾ oJ]JôEâV™yU`N>•ÞÚønÖÅXŸ3“PÏá; 'óÌGÍ=…>epHä•kBñ GXÉo¹—åV«³¶ÓV+f…—+Њ†? ZE#ÜEÝý*yÔóï»6¤ .­­3Ä[ÛÄ"äu [š¿…VŽ-²mtà“Ri¾‹IUÏv¦ä¬eðæ[d˜¡Rã<ö©|­ñ‚¸',Ñ£ Ò*ke¦Òrk63Œ×ü:/á’xùè:/z䯣wclö,¬ 8çùWª”’+–$|Tï´KæÞЫƒÔµ.ácŒÑmô»h„óL ÂØô«§ˆ¥Ô û „Nåø8ô­Öð~ž±1Xß,yÉã{FÓ-4Öf†Võ¤ßP±ŸáÍ}+I‘§Î~}ÅpÖŒN¸d#4äþ5쬋 ÁdsX’xbÕgóaŒ'-þ4Ô£‰ñMÂN–­8\¦~*[k[«í1aBäžõ×ÝxbÖîH^Uæ.€SÛIqx6*ˆÀ¡I žh±jVL© «g85Ýév··ú ðß ÜëòþUÒ\iñÏ ©EÜZX 1Çå–ùGéC•÷G‘,—z&¢R=êCc¸­³%ÿ‰|¶ž%ŽÝO*£ï}k°»Ò"yÖR‹õ+WcµCTP01À¡Ï@å9ícM¸ ›{SŒ=+Ã:^¡Ø™r‘w)ï^’¨ƒcŽqŠ‚;%LŽÍO6–;ñu¬t.Õc½K—©êZJ›™”«”Næ“ÅöÖÚƒ]8&ß'µ‰gà™M÷|D9Uõ¯Eᘞ£°©LQÈ»‡·QG3Ü,sZ~‘oÈ0ƇzÑ»!‘Sж“YÛÈ!2Ư5<‘E+œŽÆXŠÅ‚ @¹5¦”hª‘ª««€;Õ˜ÉÅ+•bÈÆ2EDárO­!bxíJÀm¤ÀhYyëC.FéJ3Þ”¥²¿/ZC# ÊÀbœHÝŠWÁP{ÓA¦ܤÝ)T)NiË’9éH ' u¥ ‚E'SÀ ò}éÄíï@ûÁjGaœÐ„òM HäS[>^ED’ûI  ùÆH¤fÏŸ¸mëL'Ž´Àã׸hv2i3±ø©1¼r*„5[wŸÎh#héM$Ð!àâä=8¤Òƒ»$ÓŒñ” ·6· ß1Èü±]$0¶Œ³díʱ¼lƒìv¯·$IÒ´¬_̲·ÈÃÔÊ®[Ô}ô Ú0’# n6Šá¤O²LÝv(mÁ‘ÆvúWwr©-»#¨)׿éšãµKxDr2\À® F…Oÿ^ˆ°hÕ†ù&±y' ·döÞËõ¨|2Iº»uL7g¢óÓò¬DóÐ"2–Ž_™¯Þ=«^ËW‚ÃOdKç†ÈûÏïUnÂgAd5>H ¸|§ÐÓl´»="×{²ÆæwkœÓ|C4)²î $@IÜ>ð©oõ1ª&eŠôÀ‡!x¯µBLw#IW^ל4ŽìýÛ/\ Vµ›BÕ"$i"wäõ¨4ÍNÕ¥¹™|”(Ûë]]¿ÙïT:$mÈ&©¶„·-‰xÅ7äÚê=i¥‘eFTr!7Cp<ò1Óñ¬Ê#¾œCoû¡—à…«:k«Z£m!ˆç>´Ë˜‡€—Óâ‘c·(æ'µ;|Òmœné\§‰u¤e±XØ… 3€Õùõ+yoüµœryÇzÂ×a[}Fq!ûøe÷¦’óÉá°T–FÛqëY¶÷÷¥Õ„‘¾å'?ÂÂ>÷Q°ÓáòíVXJåvžj4ÔškÃö|Lë™U»}D¶/øbé…“ÚÉ•xÌó©dñ>.dÅ»=ª6Ó íëXS È/~Òò"ÉrÛdUíž¿¥J—ÒiÀZËI²úvÍ;\fLj/„l‚ÝE¦à2y'ð®†Îè\ZÇ)Þ2Es7û%:u¬l‘Á*½ ×BˆW ¼*ð)5`¹‘®^{¤Îñ3 mqº3õô¨µ+#C ŒÉ>ú±®Gs"ÇäD’Œáà ƾià‚Ñg…`+ vÆ) gM¤ÙÇad‘.ãç#«º îÀ*~•Âßj†í€d1c·3øSlÖîÆd¸–RІäÆü­>^¢¹«q#I«HFàðɸgº •lܘd°-*4±º†Âõ&³<¸[VŽxÉo= „ÝÉ‚X;),@nãŸåC«eoi$mök‡tcc7Üÿ Ì_³¤ É©‡žH…YÓ¤‘â3KIzUá½éf´¼žä4WM 7`¢€mr‘ÊŒÓ]ÉÛåȸüs[Y‘Æk*ÖÊúÞq$·~rã• ³çüì{ItË‚-9ØñΪrÌÁWm7ílH ) ©®$K¥ÊLfEààv>µÈ[Â’ß™måXUHºšé¼FÀÚÆYXÜ„®2ÝQ¯|ÈŒÝºŠ¸ î˜^ÞÜf!'•ϽkFöñlìe¸#•RDv¨rÀ€´jí.taÕ:Ôu ^›SyRTÚTdb·K|¼¯:ÑfÔYÑÈù·{WY¥ëúÜùØI#åÀ§$ ”iäøqX^ÓÜo¦Lå=ù¡.âgT¤‘À÷ÅIçšÉmvÊ;£Í·œf´â&у©Ȥ;‹yèøm¦±õ)?³l å¾`8µBmi®5”µf);[=ÍhxšÞ)4D,ãäaŒŒñT#+OñMÂÅ#KìUùI®‡ÃZðÕRA*muä…®gíb¶ò_:w8TÇùÅoxGmܳ³í2ôAÚ›H __¶Ò‰ 2 ¦³tïYÝL#”4DôÍkÞèÖZ‹;Ïi`5pš÷‡²Î÷D[cIX5=çQ‚ÖÙ®@#ƒY¶>.°¾$;FùÀÜ85¢*xƒJò¯œ…‹ä\3Yö^{m£ŠL[Bÿ~‹.¢¹éùA\ž§¥fj:Ížœánfô|¢Æ¹UÚ=ëÖ<$šÉœÌêäqŠ”µ(Öµ×,/ò'F'°<ÕË›Û{;VšgÚƒÖ¼‡QÓï4 @q‚Q‡q] /yâ½4ï”D‘q÷I÷ªqìMοN×ôûé ÛÜ~êkS~ÆÈïÚ¼›Cѯ¥ÕöÂJ˜[ ã€yõ¯WNÅË(çÞ“I \‘OìE4pIëK‚Ç/ã<ûT”7Ë=qÖ ¹¼‚ÉUç‘IÆMO¸c®kˆñ•µÃ^Ã*Ã$‘(Ë~QïBZ×´‘ÝC˜Ø7¡RmZÓMÂ]ΪݫMב´5ò#?j9P‡ûÕ®húœ‘BôfˆW.¢=&Þê »s$.®Ž:ŠÊÔu‹= nšAÁû«Ö¸-+[¹Ò"p’åHùTö­¸ü'.¦¿l¹»o2a»~”rÙê S«Ó|E§_¢ùS ÍØõ­WaŒ¯9¯#½Ñï<9wÀbÊ­W¿Ö½ÇY·“DŠöæE‹räî¢QÒèWî-Æ¿ :ÜZ`]Îü;VÊr@­súTZUí亅³f<·øVÝÝì6fIœ1Ö¤}K,~_—­4^õ—¥xŠÃV.¶îw)ä¹.«iæ•“À&‹1¦YhD˜Å";UK]²Ó!Í(ôÅ?NÔíµH°¸`{w m—Y‰¹¯]Œ*òÄ×ëEO ‹îXU=1Š›p#ß6à¿7(NqQa¢n 1 Ö›’“Å=ðqÅIÇZU±æšÀÅ98¤1ÙÂsNH¥ ?7GŒu °$ŒÓÓ;j¢!ÞqÉ«iò¯½0}îiI#îš z.XãµFwƒŒõ¦í=êy1Éj"Ç¥,ªD#š…!bÛÀæ¬g*)êH Œ /¡¤'š %ŽêVØ1·­qø â¤Pqô¦¢á³NÏÌ@«$cæ“9ŠŒö¦.TÐÔz ÇãH¤“Jyü(™ñ”lú\LݔҧÑXˤÛI×åò§ø§AŸ#$ÅCáGWÒ‘÷Y‡ëVþ_ċ׾R¨vñÇÖ¸KËk¸gy.(Ý‚ÎxöïÅz@U9 rz{W%¬C¹‘§{%b1‚ç? ëB2×P’Qí…v¨Ý÷O¨©úuk`¢2#̘ßÃëLÓÓ®KXg¸# ­t6Zv‘¨¨Å¨WŒŒª±ý1VìºT›Z»Š/øôµòð07Š ñ,àm{eÿeò *ä¾°šVe2Eì­þ5J ÛÛÝD&û>Ü<ªGÞ•âÁ¦WÔõ;;Ëv‚;G[—;v”Áù­ÍÌØéñŃŸ¼kÚw™ªÏp˜0ÄJ#7ZëR!; õ¤ì´@ˆ¶”êséM"3> “þÍYòÉ9ïéM0 }øäT”WºGó =éè}k𾽓U¸LµvÛ“æ±®²tݾ+…µ¼ŠÉu ì™òÈý(@\¾Ñc´Š1ki–™Ï©H¯¶Ûj&lb9¡öª@jI£+G‹ˆdžwVl2KâHÛc}âã…÷«°™¹¤]Å\ÛÌp fecÓ—7¶;þÕe&Ë…8l®­bÉ ]\Ms<´#Ìç“][i¶úž‹@FHÐÐÑ&&¢`ºµ‚6eÜ7GïW4m5žÎVºäÜ~‚³­4{‹»››5VH$ÿ+¢ðþö²eä¡+‘Ci 4}2k=IÞU%m>•Ñ“ ¹qšpñÊŸÒœv©8^ù¨½Æ5ÕYƒ0ÊŸÒ±|Nªغ‚áÏ®8­éW+×µeëЙ´ýüy‘áÁúP´ÉÚ}–ÍC܆–)cÆcšèÚÖÒÃI‘¡ˆˆ¶e?Jçä†âC:Em?Ì$+ò‚y­Yî#ÿ„}•îÒW(1Øžj؈¡Yôå Cyl~ƒ­W²&ð}œJVX˜å_î°Ïó«W l./Î #ŒŽúikƒhº…·¹ÄOj6ÐÕAIl‘‚v¨éÚ‚u+Xv:ìŠVÈL,ã‡=ÿ^´Ìé\J‘¡é–ëRî"óp¹$õ^h¶·\)ª·:핬JÊþk7@¼Õ;o »ñ[²äf‹æËá æÆ­o¼}áOnAòãŠh☤V½>œ¤JÀ¯e\–®kO·ÉÚÄGr­”2¢º«zÊÒaÎÙQóazW)5µÅËKo,ÆFÎÀG­ &v<óZ†QJœ‚‡­MxˆÚ|/Ü •qV:ÍĈ€. qº®6­%ô'˜Ay]§‘IÄ.Xð©Róm\ÕgPÖ!Ó­ß™+ÍføK‘níÚ–žC¸Ú§Ì5:­.  Ó![‡-&ЋW6ÞHSŠ‘ÏÒ´£ãµgjKRHÆ’i-Æïc䙥±ÖãQ@~Ez½ÜwñKŠ9q^yc2Üø¯r¿ Æ»‹y ³2¼ÎUG9ëI™çšÍ³C«ËA²6Î=«ÕtÒ›‹d~æ^ Ôa»Ôš[xØgï:û×yáÍF+­:6¡Q Ò’Ðw³)x $š{¤Ä‡Ýîk]²’Û+¹ÛZÑÔî?á"Õ–ÒÜ~ê˰õ©fьӞ¨¯gÄ›2yæ´ŠáG5™§¹šBøÀVª®XVe òÄ„m<Ô¾X ŽôŠ›NE9²‹“Þ¥”C°óNNx=( XS‘=i8 ¹#ƒO˜¸ª¹p§(õ,V¤L“žõ^7s&Ò8«q»š.ÀHx“åžJîç¥7y/Ò€³´íëHGù©™­0 µp ¥Î:k½³Mß»4/^œŽõÀšxb ë@œxÇ&ž-À¦ÆiÀjÉò§Ž”Ϋ¸Ô„Ž”ÜqŠhÇjPG4` hëÅ03µøDÚ5Ðé„&²<'ú©Ÿ»!?˜¿¨"Ëa27Ý1·ò®[ÂRyV÷ :îR?#T¶%s•ÛžÙ®bâ¼÷{«ûD £p®€\…Lž¸ïÒ¹mRõnîe‚+(1¼‘¸Š#¸Ù›f]ÝÅjÍ(1–LŒ ñɯá¨ü‹Ó ‘–|hÙ:ÀsYvM<šœìΑ“Ü# b¶<<n¤•’7 ¹iU·ÇжAÓ“·su5Nñ”Ü*5Ðr01ñóæ­Ç"sÐV^¥Kx%žcPBʬÓô¬‘l«áN—“3úWB3Ås^$XÉ·§šGè+¡b¸8ÅSÜH›£694€Œ—"¸ûßM³ˆÛ­ÈH=OzéMÚlC“µ±ŒRi¡Ü²ëº.¿*æus¦XÎ..¬ÌÒËÀ6?Jé<Ì[§jϺ°´º'š!#(ÀÝ÷h@ÌH<@ÉK-.C ÏôÍ+kï2¸Ò¦~—?ÌWA F¤EªÙjw Á^Ù&ÐŽ"?&h¯ä¶]Šîˆ‹Ÿº3Ï6—©:ëËw ÌÙEþ“Ò«FÁtë‚1óÜž°©,?}yh–¬Ÿ»ˆùŒíÏ5{¡¦‘l¼V®¤”¸A¸‹MMJ[‹¸l&EU“«õ4’C{®Å$yxmP—}¼qW|5aqvà 3’¿J]U}+_‘7ÃßkTWš.«1Ì·oq*°ùük­àð=i$•"\ÈÛAàg½MÆrWw^#HC2² ñަ«É¬jkÙ^B^YÐ{æ»;³’àýk†æßû^æòþEX…õQÔ’iš{?°Ê6ª8ãÐ’ê‚ØBÚkyÉÏš¿tŽ´^5¥» `*ÑËdŽ~lñÅl^ÜèX’eYdˆŽ™Å6Khsg¦Z€!‘ô«[R´·‰âº•bGÜßíÕ‹õ­¶Ÿau¸!R6/^ÆŸÛ|Q)2æ+4êSI«Œ»©Üé·±‹S*H܇°ªU‚^_<Œ…Þù³Æ™­iišR¬3´˜g=~•—m}äySæX߯w_J;K} O¶¹óã sÈüªçØ`iÖb€H½ÚŽ ³4JÄmÜ3ƒÖ®ÆC.OçYê2 ¸ •ãÒšîÜ ²U\‘Ö«¼“éM纥Ä7RÍqm’oj.Ø¢*ÆlØ­ïÞºÿ,‘é.YÁ`µq‘˜V)<Å>h\/ =ëH±0Šâ@H wcoÉ×&µì¥ÓãºGžW“hû›x³¶ ·ó~ÎËòáH=Z®Ú&Ž»|á4ƒo@Z¦#QµÍ2FôF/ûÛtYdÝ-£&{¦4V‹rMqn[¹ÍI†ýÑê?¼ H½jtT‹Ã÷ U%1×WùÕK±ý•qo-•ãIm-šÌ»ºó\ÀÄY›`k¡Ò¼- -Ãî`2úè²7ñº)Êr çü;nQ»e=?ƺ™#E·+ÑBcô®wÂÌ¢k½§'8ýi\»-°”a‘ß4ÙþͧY– $j:L›U´·œC$»dÎ0j{ËX¯í|©bq*ÎJ_K,¦;xX±áH­ý#Mhm„Ó N¸fïK¦è6–E%ÏB{VÒä÷¦ß`±ÍÇá«i§’K†yÝ=*øDmæ¸bŒb€®°'̓$®A¢àp²x.ýgÌŽ;f¬XxRâ+±-Ø\/EÞª =O­Iå«1;EÌ ‰lmMc—=«Ï/4¸µ.Þ'`[Àt¯W’Ë„L¡·—;2*T¬;ö™áYm¤ŽîêBóÌzVÆ­¥­ö“,'–UÈÖµ"ŸÍs¸YU ÛƒEú…+Ñ´]MîþD’ Þ£5×Þøb;ëbÎ Ê«„÷5ÓˆÁÈ õ§”"5öܘXñ„±Ô¬µ.(eƒ€WÓ5ÙèZ-î›+_\Ê^Gs< ê^8,ˆy« …éNRÐ,®q¾"³—U°šV4|ŒW5áè5#}þ¹}ìt¯UëÈÀç±£ì‘!QTúINÚ)ÊíºÒ]ÌÅâ‹¢·­nÛºÉp¯~YXÒ*F­FyÅ€ÃÒ•î±¢¨ëÏJÊÖ¬Þh$‹çSʵ`.T8ëRJžràô¥°Ï žÚãM¿hÔ0‘Xì"ºíI¾ÔdŠ}MŽÏùæ{×jÚMªÈ®ð£z‘ÍZH!0£ô«sº&Ç⟠G:½Åª°”.6­dø[B¿/#²É ÇëÓå°ÍE¼` Ræv°Ú0­t¸lG—n0Ç9#©5GÄZê¶êAÅÄ|zéY¶ð8î=j ‹¥T£¿¥N¥hs>ð¬º\¦êwo!pzU­ñêLΰ9þ:ݱ¸I˜:÷5{ËÄžG¥7&µI£“Ð<&šBý¢G2O·j¿y¦&±na¸_”õÅoaLe{ÕS©Êô¤å}BÇgà™-5Mò0ku?*š¹ªx6Òâ&k1åÍÙGC]C‡bx楴…—,r >fG)¢x=4Ö3HÛç+ß ­øm\8ÀöjÕ1—b;Ð:{Ô¶;Öµ AªÝŽúÖN‰àǰœÏpUØ}À:~5Ý9)¬3‚G$‚*”™)jC(‘í`21Ú°¦ð•Ÿö—ö€R[9Ú¾µÑ>[•õ¡Ù•@¦¥66Sò — « köî­;†ÞiêÃ(VÎ3“éL <%cg;M# t~,ȱ÷Íhç=~†¤ùI¥djDW¸Y¡YúÒØÙV ‰±pC­xšÛG1¬ ³±ÆÅëZÖÓ‹›T™x2ëÍØZWzT7"y" ⯠|Ûˆøè*Ê©ÞÙÀ¥†å`ô^ñZÆŠb§½iƒÆ})ŠÊpF{ÓÜ€†“cb}ªFäsP#ð©›;A©ÜŠ. 4¨Ÿzn94Ìg9éB NûÜRóÐ ã0‘Ö¤Aór(PwqÖœF>´Œ7u=¨Œ|ÙÅI æ†.â€IÝÏJIHUÍ9†TR“@ GÉç¥)>{P1Ö¢geãµN&“Œàu¥Gùà™±Ö€9A…4ÒÇšjMåN1V!»¾jy#Ò óHA CY©ËÖš}è‘Ö˜µºÂl6–•rOßÜÝ®Æèƒi&ﻰ渟 ¶ÛëßaþukbYØ*¤ë\¦ –˼ï±P­÷Jb}ë©ÉÛÀ9ÆkšÔ) °fÚw†,œûóS̽9ÖmS #E(Ãj®Ðx­ÿÜÁƒf¾R6rUG$ýkM€¶²«*¸á¾øÛÛŠ×ðËm¸xË Àrª¸9úÖŒGR‘á±Ú¨êŽ|èáF7lü‡î¸Å\VËãŠÏ×E Ь‹¿<Ÿ›ð¬ÆÊ~;,î:ãÍ9#ð£ZÔZÄ•…ÇÚ$QÛžõWOÔ¢Ó,n÷‘¼JÛÖ°Vy¯u$¸}ÆBwlïÀâ®×ÄBí «ónçZìm "ØðH\ñÖ¹‰Ó6–³o-,Ò}ë®Ó]dÒâ‘T ) D¶RÔnAϽFYÙøû´…Óì¯&&2ÕZ}nÂÆwîÿëPй¡lª•lõ¨µkƒk§K Îv`b°ˆ®¤”‹[BÄð¨5mCU’ÏmݺG°µd–u#•£‹H°S†nþõ< Ó4ëaG2²( ïY°Á&·~n^<ÙÄHɮРOòñÞ§mÆŒ£âÈÙ²–ó`1øV¡©Ï©ÞyŽî±ƒû°;}k©—O¶02Ú‰',;ö®bßíPên²4BEÊ”àcÚš°?1±½Ü'|·2œ`2Ãÿ­PÛIJ£¦ýò7ÞÇ͸öÒº‹=5.ã“|o·Êñ“• ê+/WÓ¿²$¶šÏ;†Fï~Ô\V+\iÍ ‹6™…Ìz{RB°ÙJÐÏmÁQåøTj’îy^hË9ù˜©àTöºœ•’f@r#ðÍ4€m•­­Þ¬‰ä2ÅÉdcžkº‚(­mÂ@‡b¯ÝÏèpm„ÜÈ iNKÔW@£PA'T¶4døWû+ Œ—õÏéÑBšÇ•s$‘´Ÿé[!—ι´¶ë¾L°ª·$^*€?L ~´tu1B„ð1Ž•c…¨£ GS´j‰ƒŒÒnɪ14¬X²ãœ^@Ü(ÓªÈ6·9ìk€×…¹Ô] `¯œñÔûWO¨^ýv2Jû¸Ì}«Žhä¿yæÝ±r¹«‚ê&G*ĉÙ¤‘Ý99覔Is …Ô?Nùü*í’L·Ë-´$«u\†Èþ•Ôµ¬r4nñ.W•ÏcU)XI’êÚ’ ·òÆi¦÷ ºâÖ'Þ9ÀÁÍvY[4ërÐ)•xÍcߨZ[–»hŒ™^@÷ÅO0öEÑ­®ž;Âr‡¢zWO"¬r´z åü1v‰бÚÛ¾P}+¥ùY”ÉÓû¾´¤tòbÊF|šÁð“·.G° lê’,ZdÞP€+Âoþ‡7lœP†È5¸–OÄ¡9Sšê•Ê£$m®CQº‘üK½#ó Cä­6Ã_¸Kò·dùlySÚ›WB¾§s †å¸>´KpQÀþº¦o"Ž#¶#Q“\•ωõuötnƒ½JWÎñf8ƒV •O+>Îí/lÖd`Pʲ/yæ³cgùzšÓŠ cÖ ¡¥ ¨95:·Ê3éR*:RŽ*J!GÃRÆrI¨$qÀ⥎3u  䊹oµ¹©rXóÒ€#Ul–¡Çj@xÅ0ãé@ · A,1éB)lƒÒœH…Fû‰¨Ü53üÊ1òŒÐ|˜…”`7Z˜®:S'ªæ€8L㚌–¡qŽ{v¡[v@ÉÏ™ÆãšSÃSsÞ¬C·x¥É'ÄÉ_—­$aÓ— xÀ D£§4˜t£~isò`QÕ.›rÙàDÄþUÇøE®glÛr:ë5©V-&é›î˜ØÇŠæ|!±MÓ“†/áW…’Ρ†Ø˜w¸õ°ž7•Ì3‰2Ih¥ŠÛ»×´øîZ&›=ˆ÷¬8ìÈó$0ÄË!Ì{çÆçB]A²6rúÆ÷”á2±ÉÆ8«~WmqÙŸ-´¶Aü«:$ŽÚë̉s…ÆT~5µ¡j¯%úBö°F¬:Æ*ØåŒg Ö‹B^âÁ$o2¤ ¬v¨Ý»ô®‹DW]ÙÃ?>+K·¿AiehÉæœÊÌ?]´+kg ?wb€~´¤4ŽvúKýRñ¬íw,v³žVm<=khƒÌS4¹çwLÖâ,{~@“Û½Jq¸p*9‡b8-ãˆ`F c Ìx™·ßÛ[°N=óÅu¹Hq\„Ì/|g_™c#Ü qÔ™âKW‚ùT¾vöÅD³N-K·/p1qØu­-Wʸ¾ÔÙÈf‰F=j½ó5Þ™o4 ƒnƒÌ9Æjµµˆ.K0Hít{s‚Äu®®ÒÝ­íR<ä¯zâ´+;©5;{æMèç–ÏJïI>Wb¦HhÍØÞqè9Îkˆ¹–95ØÝrYŽÌö9àWxø‰$wà-^w 2ÈÓ6T´§÷žœö§ ÂD–úîœßº‘”Ê·"¶5 ÆÔt»BøC,¡p¿^Msó¶a!‰lîÏó©—Sœq„aÜ]¾µM}N“EÓ‘n.æsùïâªzý…¢ÞA ºbâB<À½1ZÚF¯iwÀD2 Ë!jžŠ’jzÜ÷åt„º¦îånnCn–ñC cî1T¼G¨5•”b'Q)=R+]Ð&éGÞ¯>¼¸“QÕ·ÇæÂ^Ô’¸ÍwÏâ+O3æühÖ“wˆm8ÌÕ¸4óq­5Î~XQPmîGÔ:¢íËÉÜ §¥É:h9TÆžä"õ¦Â¸Å¦ñŽ˜¨e!‘‚A$àVF»zl¬$*{|€úVÂ#€Ã<šäµ9P×NùJüƒÞ©j ÃäòäynÙ ÈOÓRÕ•#Ÿ|xc•ߟΟ¨(þЖ(Ôµô«wBXÁ!q±FЫڬ‘+¨][”!Èĉü«µŒ3ÛÂÓ}ìdšç¼6y|¡ûËP !‡C]C©g\®01S.ÃCö=+\K¨öÒ`¯ðzÖûeb8í\¦¾\Ý["«*ƒŸ0ÿ*”6aš+çœ.Çeéšî¬®â¿´ŠTc×ë\$ Ϫ(ï#íl÷­¯ Í*_KfyEbqW$A¹â ÑÉ Ëð¾á§I+wsV¼VHÒðzš¹]`}àMJØ«˜Úc‹Ÿ±!IÜß5?Ä–Ñ@ÐÈ +9ɽgÁotº™Ž$ CZ:²É}w ¢®çUÏ¥Wa ©Þ/Ø­m·³¼ÕýWB·“KêÂ}xª:Ö–E¤RŸ¬K‚=©Ú~¼¯`Öw îT*˜£Ð V‹Ûè÷1+²¸#iÃÚ]¾«g/œFýüžõ^š}6Kä>7möªÞÔF“¨˜çÈFá‡÷ME¯ÚÅguk|Öµo<3ͧÚa: `}x¬OÝyú¨Q˜Qž„u®£E×bºÒ¼¦S½‚=€¥ªB9ß Þ´»[†; qPk­çx–^rÀcß½ sâ6%;Q™³éRx¤}ŸÄK2¦q‚=éõ§­é668š(‘]ð=óW,¶Yx9îmT$¬„“·Þ³5]djÚŽf>VÉà'ãRiWRßx^âÎ!ºXÔŒ~4º…g-³ý¤ÜÒÈ>O­uÓ'±¶yeÈ21í\m”ÂÂùdš"vk¿°ñ å”ΡDÜÃ8¡í /3˜Ñ›Êñ û>ö[“]»ß­$S¶cˆ€ËÚ©iwi½æ6B3“ïRx’']]¤`B> ŸZzÍ;m&[PF´£¶_¼Ç×Ú«øšÉmî#!2HÁcÜÖŸ‡|Komb–sIÊk?Åò»^"”*€ecŸëEýà4-¼"“è‹'?h‘CoÏAZzމ ·…¤DP `;{ŸZɱñ|VúJ@м“¢ìV¦£© ¼%%Ë# ‘q´Ôk}G¥ŽCEÒ?¶oŒ^`B£wÅu¾ÝÂÞÕ¶36©õ®oÂú´V Ò܃µ†Òõu^1¶MGBŠúØ1 ÎR [Ñê$`é¨Ú¦ö(-‘åÝþ·¸õ®³BðèÓ,‚´…¹ é\o‡^é3ŽdßLéânsµeõ®—šæçÍ8ÆôÀ­bàêzÃÏ"•A&I=ÆkU$gcWÇH³m[iäŒ~U«£Ë¾vùkZ«â›+Ëû[xm”1VË{qVôíÁáæ²v`\e€ìi_Aœo…å…Kp³jï“?*×j±¤‰ØTͦV+Û†ûfãÚ¶ÑŽE`†”Î6s[±cûب)‚BšnãCF3A3H¡sŒQ†ÍJ¤-FÎwqH&zÓÈãfSšErïòŠRÌ®*F,ÎvIÎ0>´ÞèíÅp)ƒ-šs´£r@ÂÓ8\‘L•ðp &æò×iΪPýémëJ€úÓ•@íO@â€Ñåww¦e•x©›,HqQ¨ÈÁÐ%Û&¢sŠs3c äzR2÷5d‚t§ðüSUOáNÅGJíR7^:ÐÍÈÍ1^)¸X´9P• &A¬]ÎâOÈm˜¬³> >•?dQ´_Å’jþG¤[(\.Üþ5w´DÎzóKJ‡y»ŠkÀ´oüU]^)#ûB@‘9 ÆåÛëíZúâÍ/œÎ,ÕW×ýaâ³ôp·&Kbü4$cš¯²&U·wD»Txãqè¹üëwÂs»4±;FÁ>éÛƒõÎcÚyQÃäÍ*ƹ ¸¦ìž€WE¡MÀÛV àà²Ç°ãÖ‡°Ù%»6Ü “\ò‹bHþbd8‚XØü‡ÓŽ•¥¬Lïjm¡‘G‡î=ª§ÙSMƒÌ†M’•ß0™¿úÕ PûêêA&D›daÎqØ×h‘¤h*í ç<:±¸qóÌ席éå ¾9†ÞÀIˆÑ°õ¤e®sÒ iÄŠäÐ_(¥˜‚) Ts,l'8ÅL9ïY7:Ê@·,æ„ çø‰éRC«Ççˆå7”$lvÍѤÿ $öãð®GM+ÿ %Üã¢çù×Q4ÊagVÊŽs\¦Šå`Õ.ö¡x>õQ@ö(]Å ‘¯Ù°’Î@ j+˦šù–Ñʤ¤aUö©=9­[‹_>ÛJ´,Êq4Gá™­oÄÅÕ­Õƒîn¸ªº&Ñí®´Ëµ‚â`yHÙû÷>õØOÍŽÙã½b]2O¨ÃH†Dýä²­éú’^´¸a˜Ø«Æ¥ê~!v‹I‘r`ûW¤²Ësm¤órTúb»9] bN3ô®JÂ#ý–ó¦É2àŸqU^ w–C|©nŸZ]2ÛvÉWkLìUúw?…@ûƒ´gï’W\ÖKfžîçlkØ»¿‡éTö$ƒZÒáÓ­¢hå‘flïÇJè¼=…Ò“0c{·½bÇgq®ê¦õÃGh‡=vŠ›WÖ‚Ÿ±[çåržžÕ±×õ³$r[YBŒHãùV~fÚ}ƒêw CÿË%o_Z™u2+*Gm üÀ7V÷5jÆÝRP÷2 òÐÓZmhËž­1ÌÒî=ÍeêìG‰l‹ª œ×KÇN? á5»ï7Ya¸_“/ÐRKQ0øªæ)·L¨ðÀ^¸õ®ªÖê;›už%\d^k$X‰äÌnÇØ?•z‘Ý6á亅Ëä‚Ç>¢¸Ké§³ñÌ«yŸ ®íxsŸ»Šåõx’ß_‚n‰2”z˜î6f]Ãk%Ý„°pÓ6dÕì3ß\yóJ±µ6Z†Ò0ºÓ('dyëیղÈDk–-Ãy­ ;? Á²ÙäŽS, ~CÜWD0OÍÆ:Vn‰fÖtQ°ù-õ=kLœò@'Ò³–ãDSFÎÇ ë\Ʊq,·/´RÄ«’§ª[·ºµÄó"°ä/zå<¹tœ¶îõg[xžkÍM-Úö³mç’9®¾=¯ÐàÒnËPDbÒ<:=Eb¯…íãÔíËü1ã¡®P®IëŠÆÖµÄÒÊıù·µ)Œ×‚ŽßùjÈOXÉ©‹©#ùÃnÇ­G øûZæHZŽ«šèáóëEÚÜ ÝOöڟ—» ±³¸zzVn¸!²·M:Ä<ÿ"àsŠé%½†ÙI–QûÖU•µÎ¯%üW>t¹ù~lãð¡6 è§[(p ‡ïc­r¾"Õ-ïui$Q_iûW£ÆÌìsëXÿ…âÕ$ó£o&A×èNîì,EzRøuáŠHÀdä÷ÍPðN›2Mss·‘Ièy¨í¼9¦éí¾þíŽÓжãÍuú~©¥ýŸlÂ#^8joȃ¬x.;땹…ü¢OÌhi>ƒO„Æ 8¼J×DІR¥Ou5"…EO3Øg7wk~l`­¦wc¾kwSðݶ«d±?£åc]]Ñ€:HͰdœ`Pî5cŒÑ¼ ×râR¿tŸÎ´õÿG«Û¢©²ô­V¹RqšO´+ðN´]ˆÀÒü#idØxƒ°þ#Þ¶otÛk›?±´Cc‚®Fþcpp3Ö¦?wð÷¡êât¿$W†[¦È_jíEœelQÓ%ž8c/+ªëXw~6Òa“`”¾8%W4ÝØhU¸ð ”—¾šË91Œb·mt‹M6ØÃk¯®;Ô_ˆ,5Gòí¤,vçVÇç¯ò©mìG3¯jm¡Y,¦/2Gm¨;\–¥ªËâ˜`·¶¶c(?6: ô}JÊßQÈ7DzZ‚ÏMÓtdgŠ$‡'žõIŸá½ û.Á`”e›—§Gá+ ;Óun‡y9è m5Äj¢@FÓüC¥b^xËL³‘ã3dìž´µo@Йü5jÚƒ_:~ôާ¥_Q½¹ŠD¤a…fXx«LÔ¶Ç»$~º?»ÎGNÝé´úŠèăÃvvjÿfŒ£>rGlÓ4ÛiR<À™›;ÍoGjaûØ^‡©©»)" ¨Ô&T|ïұÓÂÚmÍêÞýàíØšÞŸ%BŽk[××BŽÔØÝ¹ÏJhûÔ«Èé@ÁG9aÅ(wžojLsÅ!ˆÃ¿jE_"†÷4Ü©é÷¨ýM4©ô¤ ûÓ÷ü£¹ô Bíù@4Œƒ8ã! U„ÎÏŒP2x”¯^”æ;yÆiÙÌ^õ'ø 9\ç>Ôäá}éŽ{Ô`ÄŠJ;ZgL¹¥V,qOޔĩ:Òœ‘Ö™Ú£5)ÈǽY „ÆiÍ…¦´¤ãÞ˜ ŒŽ `æLžÔðri½;Ð#…ñDÂç_Š ç.©9®³+žÔ2¦Tz×lŸÚ>-‘Èü«¨¼ó!Œùp¼Íœa*ŸDIÆ_<‹ç4†]òußúÓ´²úY~äLTzÓnØ}šA$×Em»%å°÷£NYEͧ•´ÊŒïšÓ ŠÐN|ì4‡ÀÂq»?þ•ØèÖæ s4‘?˜GÝnÃÒ¹{…ƒûbB\Å0èqþy®îÕ”B¸%±Õ‰Îx©–ˆ}L->)µ-]æº ;~\m=¹ªÚõÕ´ÓÊbsöû¢ t›%X¥h𳑟ïv®Rêy/.mâx'óÆæ^àT¡-¨‚ÚGEQV&…\„bqNŒáAç9§/Ȥõ©„&IÿÈñüö’Á¿ú×?NÕ»½”œŽê U$e“bŒo#‘BÐY4}RýL’ȨX•Ž:t©[ú£"áFÒwƒð®ž7ÁaÖ­[–ÚIàf«˜Grš¦…në,±É¤†9'{ÔºTdxjcûÉBÿ*¿âÇÙ¦€À]zÑ¢[†Ñ-¸Îqù§}.2†©uö-Rͼ¶u…~àö§ßë–תÊÄà¼ÅŠ’YCøº^B¦ÓíWî´6âC+¦õ±ŸÂ—M@çÿ¶¾Ï{pñå¼ð<³éíF‹ª.š—SKÎ@AêsZë iÒ)S89ܽEAwá˜7Ùåpäg Ȫº‰õ[—¸ðôŒàd…,}«Ä‘äf"¸]Aw©.î§¶Ó[O¸‰²HPãî‘U’Ã"º´ùt(|ÅÇà $´o‚®± v`*úÖšÅieæ\ßIçLÌ[ÈS‘ÏJLjÇŸ˜Ôò{-héº5Ü¡¤™¼²Ü—uËcÚ©è- ªo/ÈIYlíé¬EhØéö–ó+[ %Aùó’+–Ô )ûˆä’â@qæ3d®Xè:Œ€J·>_q¤úôìu5‚g)ÜîÄjëÞÛÛÁf¶Œ$&Ó½d^XêEÖÏ2ewo?ZÒô)¢i¸%û¨hÑ ÔÛ¼Ô>˦É+0+•Ó´»‹ç{‚æ5fÈ%zóV5¹ÌÑiðžAù¾µoIÔ|È>Ë"ªËÆ=E.+ëk‹In`Á#l¨¿ÎºÛG$ìÀò¨uÊߥ:X@œ23—íSpe±p<ôé\—Š®›ûF!>zèŠ(kÖt»™]DPáq†nhV¸úl®žêîêà.Âx…]Ñc‘îSÏ3)pUÁSøVnž+[Ì8V ïU½.émK·!Ux -Zwʈ¥‹ ¤ö¬MCÄI†f•¸{V¸¾×'h¢ÌpwÒiºM½Œ * Ä}ãYÚÅ&fZhÝÊnõ -ÑJèVÙ!„E\c Ö {•‰U‘˜»šæo5½Rkƒo @ãe5¨™ˆ¬ìm&QÎ×%²VºM.Wû, &wmÍchº²]‹ì³™ìk¦Ž-³íÀö¡µ°ÑÌx­|íJÝëÇêk¨·‹Ê°Až9ü«’ñ)YsÊ×V8s“úPú ã4Dûy™Žn95ÚX]Gq98b:à× ¦ØI}<1HÈØ9#½$r]蜃ÓÔSi2u==eí'“ë\w‹àê;ˆÜy€`€yÅi]jQ=.Ë`mO½s×ú~£z‹~d-Æå€©Hfï‡gIvÚqŽ?y#Iõ®­›¯Ì¸öê+Ð5÷¹ÞUU™3ޏ©õ]^k£-ˆ&@¹b:¥&®Æ†xÎ}5eRrŒ8úÔ> EKinóÖ¹û…Õ[K˜]3£o˜?Zµ¥Ë}“'Ùbf$·#µ]•„zM­À”’§§\÷ªZþ§ý¦M:}ð6©®WÂÞ!qsö;ן…cÞ¦ñ½Ü›mÕXKghïY¨ê4Éü9am©éÆæí<÷‘ÉmýGÒ±|CáãcxŸe“ls>ÔPzUÿ ê?eÑQK”b@÷À¬ ÝFþ}Y' a±=9«³¾‚G¥è-§iI ÊdcÎ}+cÍýÙ>k‡Ñu=Qä–[ñåÂb ¿×îµyžÏLp¥q=ÍBZŒí¤™Õw©*¸g‘›,[ÃøoÄQݽ…ã´¼¤ö"©ÝøŽúyÝ$eŒI†QéUÊ+÷–0zsP÷W¬ø–þæ%ò£xPœï ËTö¾'º6àK…ÜGAëIèîwQe>áâž/3ºCÒ¸? ë÷²_4S’é&N¹]5ÔO%…ãaŠÂ¥ÆÛ‚2-õt×µÉ,çíW#n{Ô~%ðÝŒcÞZ/”S’¢¸Û}étɰ¸,B•îs[ÆÇXŠÂìÝÊâ  àžµ¥¬#SáÚÆ>Òäe7á]ô—K̪¾¦¼óÁwbÖÂñÛ;cùêÝþ¡â1s$sypÀ3´¾8¤ÕØ\ôàêc.y¬ nÕõ—[X.ílÊví\Î…¨ê ¡^)v`ƒÄÿ/ZÊÐ//·£q#330J9Gs£ñ]Ôš6›mam!Úãkö¦ÿ`éká±#0ë¿ÍoZÄñ{É&®¥œ‘·å ¦Ì—÷^šR°„OëM!\×ð¯‡à7+z×"_,äéí^€…‚È:Wšø'ûT…I[r9ÏBk¹Ô%¸[W°Ž KÜbØ ï±4áeéÍY»×,tÛ}óÈo»ë^7wö†ÔŸyÝ1~¾¼Õýj×RX¡žñÉWà{qÅ>D$ÏYŠö¶¼Š##pojÀ†…¯j Ì’ºOCXV·7ÞxžW ѓ׷ҹí $Ö"3+¡?¥%+³Ø•’4=@ü…s·¾2Óà¼ò –#ËØÖ‹5K¨£Žd(†+Þ¬i¾Óç‚Úb§Ì ¹È<BZ]Žæ íÞ+IcÀC až+°ºñ­…¤ëoŸ3³0è+„ÕÕ_Än¨v0ü«sRðÜfóíAíÜG¨Ç&œ\ë~ÙÄ·0h›ŸJâ|WâÔnVÈû4gæ÷"§ð\òÌóÙJIM¹³|Q§Ãa¬ãU(Ø4(¤ì;›ºOŒ.n/­¬àµO,à1öõ®Öpí†#Ò²´-*Æ kyÖÞ1)NZ¯jm%¶4±¼)éÛÒ¢VzÊæ>½â7Ò`LJ™àuÊè~(žÆõšët‚gù˜ô\Ôz ÿmñšòA’7ôúVλáËw³š{r¢DùŽÚ´’ÜW¹ÑjÚ¢Xé/{ßÓjŽœ×5áßÝË{ ¹lÆÃqÇÒ«ønéî´«Û[‚] ÐÖ?†÷/ˆ#g“‘MDL»âÞ\jƒ–Š8[*£½vú¾Ú•€fŒ¤€œu®ÆQE¶ ¯Þ@HÖørâ « T2€6Ž´ºúšé#=Ú²ýîõ¶ ìÁW=s!²½Ê“Ím$ûâÞ#ò¬ÙE„ N*Dàžxªè2wÈ©•ÏÖ¤¡Å™A Q Ž[æR€XR˜ö‘@îGôCüªÖ0Š{X>'¸èW9=xýh[‡àè|ÛÉîÎFúóZ^'¸‘cŠÙ¹2nÛøS|N’Byw5WZfÕZ7žÜÇp%\Ç‚?JµñŽnîT“0®ôçæ%² ®ŸA³·–ÊI-¡ò§bÊý2z×.$º“)Ç÷c€=¾‚»íÕ¬ô¸¢bYñ¸çµT´B9Í[N‡L°K@æKˇb=ûW_e•c oÔ( Ÿ¥sW6÷ó]ܺ­µ©Ø§»6MniºÅž¦Ì -•þðçëô©whh–õ3lâ)rcåcëÚ¹{´Mâ(’ä h”ý·޺mE-ÚÅüü¬}3Øƹ/ ³ñ&ðq6î'ƒšQ;fL¦1$Úvæ–Úu™sŒqùÔçu 䬑°~õ[€»OÝ«#qFݼ­+4+¶ÑSEƒ !c– @=©`‘Šc›ñ‘Å´ Y ­m>1o¢Ç÷bÜkÅÉæOeǰG­ik›]M§i)´éWÐÎh²½ÇˆÖgä¾â=…v²Ûoá[×#áˆ@Õddû«I=2k¡]nÞmQ¬cbXr¥$$ËPÚyd‘‘ïV‚÷öª“j+fWÎD[Çðç¡?SVKîŒ2ä©äHw9_*l¸ûÎrZƽ¹l—„†|ÑÓéWü[8:”+žwqÖ²§6&uåX]ò1ì+Hì&BÎÀÅ j±1Ãg’Mt:†¥-–™«Kºy?Ü•—¦ÇO=ó€a€dnîØâ T}GRF/½æù˜ŽÜç•6"îi%ΡžY1ƒ÷ˆì+´µGóÛŠKXU!XÑB¯¥ZA±HÏ›c±H¤†cŒâ³õý@ÙZÓ™dÀÛÞ¯ßë–æI~8Uë\½Ì®_ûZó7GßëB]À„ØIkim¨9&f”n éRjJ’B"8ÁpµýäßØè— LòɼÎÑô«ZqÍ òË!uÛŒãj„΂Âånlbœã%rjW”HFÞÕƒá{¥"kBr¾Q]BªÅ€¨–…$@çä ŽüÖF¥;ÎÒ[ÆmäAÁFo›ŠÛ–1†'°Ípú„‹,"Ë *ÄmÆÓÏó§ DÊ«²Lï(P§Aå_²Ò|È~Ó{ HTüªÝÅR³´˜ÿ¤•\mÍÒµ!žïV»û1e1¿ «÷qZ2llé‡3Ovéºà†^7~5ˆZùl£kgpƒï…í[¶Ö‹oj‘.0‚™5±+ÆÞk;ê;{ ½åó)&g–5¡«@¿iFUûó]¤VÂ(ʪ„Ü:Šç¬õi­µ),oÙBd᚟5öŠÚwˆ.,îµúðN{×G ‚K€w|„dçu˜m¯à{‹YÞ’GqëZžss`Œä£ C]DŒ sŸ§•+ÖºæaÎïÑ?¥rúäAûI¿H`wÇåÛI4À½iÊø¦E‰1´’GµK£ÞgÄóïùKñšÜÑôy,-Úævg¸äÖ¹¤]‹³wfŒC™S®hSŧØpI}èðn_MaœÇ¸Œ³YWúf±y¤‹‹€ ^JOñ¨|<š”R1„”‡8`h¶Œë–‰§êâDUŽåœÕÿ/™§Á6rÃ~,zkë~#iï‚/¼OLÔ¾+€¥¦Z‘»Ú„õ)xj$šÆ]ßßÉÅe˘õó Ãb\ ÖÒMI!b„·Zæõ[‹+üÎìÙB;ÑÔûÉk›&'€?¥pzl·ê.¶ïµå$e»d×cᇽkIã¿R .êäµ}6çL¿/}¹,Œ(Z=@ìl´8,aó‰.rõÉMï$`Žfk¡ðûëÖÅæUòBü§o5‰5½×ü%;–ÊH $R[±ã8Zl,Š6—çJO Ú‡Ð%–UR„Øô©}rUÇÉ‚q]Åʤ‘<åNµçÞµ½ºÕöÙEV›ÔW¤ÛÙ³³Hýq×ùÒ›)O§Æ?·¢PÛG›Œ×£øD^œ©ÆWg=ëŽ#Å‹÷n?­wÞ%Ñ&Ö-cŠ)¶í?ÇNMh+F6Û F<¼y¢ðÕ¯Ûu·yš êwï{UéWiâ FX*DZ£Wðþ¡£^™í·ynÙVN£4î€întÈ-4ÿ&1ÅqÃxŠE`1†ÒX®µ/‡ÙnYšR¿#¢¸Ë+HêÅm‘Ödc¸úRбÆjcÕQ±ò”©m&ký*×K³œÞŸAš‹Åë ¹·rÅ0ÇßÔè¶°éz}®íÒ¨éú,vò3$*¤õ4”‡cˆñz´Ú´I3HÈëZžðäö²-ÍÄ¥Ë®ÐØ@Ó Z.œ¨n,œäÄphæÒÁb•ãyš‚ã€8ÍkÛ•òÁ=«i— 2ŒÖä("P£®*XÑa8"¯ÈI¦§Ý§€JqR1±Š<ÂÙ0zÓü¾ãŠ`5 Ÿ’i§*}i¤ƒÎI©îŠA D¯²2hàn8=iäQLG5Øñž”€›®¦ŽTçŒP¿.Q àûÐK¢/5ÈŽz G\·­EʱÅ-#ðiU²Æ¢O˜sONÐ#†·á[$b«Æ:ÓÃØ¬DÙÀ¦œu¨ÈnÆ“'¡¦"]Ç¿Jç¼\êš+ ýç_Úè;F+•ñ¬ûlaŒ™ý)ÅjwoÖ²µÆXoY¢h •~xØrO¨­16iPl;Y¢_Ö¹½fi-ÃÛ½Àsüi†Sìj×ÄIZÉ<»T …Þc¹Ðu*+­½¾kM1« J…@[OJÇ··HM¬-nò¢¨Ä‘uLö<×Cä£Ê  8éì}èŒ+ "ci¯ÌåKô\ÿZ“ÂÝJ¿yœŒú ¹¯\Ei§Ê7„w*úóPøvÙí´ø·)ä“ïJ÷@\Õá¶>L‘«0ÿÄ;Šä/@}Zd@€:íÇQÓƒ­uú…´Wq´R’Ò;W'uf¶%v+°î¢3¤ðÔÆ{%,áŠ|¤VÛ’>•ÉxJ\=Ô*Iä2ƒõ®¢â6òzâ¦[‰GžjBØÇ½SL¨äúš§u­[År`Z\ô^hC/Ü2¢³v'5ÈKâ ù.h†ëXú®*ì¾' #E%›²¯ÊÅzŸÒ³Œ°ÚÌס‘[­¦6}*ãëZ”wSiÓnÌÀu§©êÚ—‡æx_pR8=¹®~[hgSuhÀ2œ¼2vúS^ò)¥dº “«Óx§Ê¶“34öve–YØ Çð¨«ðEe§ë1$k4~ñ”nùR²2XÚJËi!¹<OðVr]M™Çt‡.AÁ§a3wWÖêâÜÇž\lIV.îÔCâ6¶EVpÊ#;ùIlý9¬Øî­vy§Sœü§pÏãI=ÚË&÷™Ê ˆ8úS·A\šâ_íMr’""Ž7rWš»mm£-µÇÚ0 vdîëXö̶W°´‘”‘æÜÙàûTºŠ=ä»X)|0~üÒ°ÆÚBòI%³ÈÉæM½Î9¶t 8á€ÞIütûgŠÏÒ•e[¡!LûS'ÓÞ­k×[d†ÊÙ° íéš%ª°Ñ×[œ$猊©¨jFÒØ¼`4ùÂ)©­Ù¬dýí£?•fj— i`ÒÄ»¤ÎÚ²µ´B=5#‘õm@ÆÇïˆûfŸ§Z¾©0Ô.öù`Ÿ)@zb¼Ô7¾¸Ž(‚q‘ïWu]^Þ-:Hlåv§œUj#ž¿ºHõ[—ÛæŽ‹ïW,Dºv•u+c3#ük: U¸‘Í»ÏÛ§ÿ®­këûk(†!Las×Þ­ì#WGӾǪG +A’G­t¥öŒÔhË`Æ@â£$Œñõ¬Yq"Ô.•-DYá× ,²Ý·Ùö£²œ³¢õ®Zº’¶F`aüJÝk+M¸ŽÊÒk‚¥%oõlƒZEXRý§qoh‘¨‹Ën˜¡­Í"êÖÒ&–xRÜ…ÉvïY^L0©Ý ’Ý#ÓÞ¨‘s¬É$êWjœ‘»ü*­rN¢OX£U‘”^ >ßÅvº§Î þð®*æ31´c#¸¨`+!ÃõéK‘ÏP¼–E´ &ò8ßë\}Äé«jQE4%gGÛ!ª’ë×3CL¿8T籦+ §ò§†ã¨¦ òÓ8e\w¬j …Ž8ôø”’7c€=k\0côâ¤äbŸ t½>; j‰?ˆŽæ¹ïJœÃf2Ñ]Y%Ôc ª×VÝb)âYÞ…¸^ ´2h*£±Çç[§G¶yÞ Jr§=½¬Vˆ"‚0‘ŽŠ*ËI…<Ð÷¬Ök"mU籦ŧŰyȯŽ9íVŠœä±9íSmo,qÅ!ØdV±ÅDPª9â¡k]™¶ ·SVã#ƒM'abÇŠA¡@é¨Ç.±Ñ˜t¥{4ylLcolU¤`Xíè}iûÔ1#­R…[}6ÞÖ\súГclõÂ_˜2•=*”ÆÊqXþÇ 1.YÉúUèd ¡JdóÛ¤‘•9縮tèQé²4°ƒ)‘²KsŠ·¬øŽ-#Þ ;œ«ñÜ4ð£‚ÊÐÑ lv—$† Ë×Ò®ù¸ùxɪŠÎ©B©Îòh[fAv`03ÍSƒU´»¡†eyTd€zV7‹î. Ñ%0.N2=+ˆð¿ˆ"Òn)ãâS7¸¦£plõÛOOZŽê!0]ÜÕ]VÒú Öó+6:ÍN—|HàJÖÑz%UUã€)ÌÊŸ0®b÷Æv—km’ÄœJ›YñM¦—g§2yƒ+Žâ‹1ÜÝݸàq!GÍÍ`ØÅ¦­û²ìa;ý*®âûmbóìЫ© œ°¡E…Π-òô§íÞÀŠÌ‡ÌÞFN*ò3"|Æ“@™:€x«(KðzVs8' óVá—)ÇZC%‘î¼SÆ0*6bzÑdÒcúQ•È­)<ô¦ÈËt Ç¥ ®ÃÔÒî <Ò s@…TÚ„ÕäÕŒ‚•®8 cU²ÝÒ¤$c­Wdî +0\ ëH ”MØ9§Æp¼Òà Ó˜*1Ž @4æoÝäñéM\7N´ÁÄKJsÒ­ zâ«Æ ÆIÑ“T"êã5N)Ž:Ó¼ƒÒ¹OÝ[mÁ9-ŠëGÍÔâ¸ßóm@ûÀ=j£¸=$é•£Ä\63´àW5¨] Ù.ÍÒä0ùÏò®ªá’-)8 ‹Ìc-ÍqÂQ>¥;,£ï¦3T•îOBü³yz¤Ž·-gÆ7 Šê´ùöË0Ès¹†å\¬ÒÃý¨ûæd%Ž$‹>¢º&X%µ)À˜Ž¬úóJ[9¯\o»¶„‚QFâ)Ú&¹ ¼ Á(ª~QÉ­›Ýç3Ì>u\`wô®:"–+±(pÄ|­Tšµ‚G_u­iÿg3FâR‡*¯Ò³l¡)eu¨Ý°I&RJÆkd–Xmâ•[ÌpÛ†¿"º]T]µÙ¬­’uÛ±Øv :N6ع_Á핚2ª6`†ë©‚?r~¹KYZÆxÌsœ×U*y‹žž„TÌkB÷Ï}Ã¥qºÍš¦¨åIMßwoV5ÚC̓šŠâÚ16\OCކ„ óùUaÌO+ƒÑØäÓÈñ¬€“Ü9Á­yôÃ$’GnCÊ÷²>~QYWq$R•[•rðô¢$²É(;@Á}jõ¬Íʯ•rÇkŽj[‹Iíô¤xv¼ ‡óÞ Wtù¯ïmX·cd^i·p°¯ök{V¹´½iï8s÷Ç·½bÈÐyò² }ü ½ZÔ4é`ýä¾K»œ¬iÏJY­ä†ÝGRsI´×w»cŒ¼¶zWl¢Å-éd!öF ð[×ð©á–[[{§0¹¹m‘ ýM>ÓEÔ%Ïä¢ò rW>Ô\,Q”·“2Ì¡dævä±ì­ ¨£Ôt(nb9žù—Ú ¿Ó5;|ÌcšÎ#Þ«Û] bÓ[²¬J¸*íþ°÷À¡Û9%Óî`xB¹|Ù«zµ»E#íbχRª…ã[¶DKÔ¯õ¥c©;[©VX˜¯o­ ¯¤j‹y‹è2A©î¯m­¢ÌòF¤ôVõ®jàÍ£ê†X÷m˜d“éJ4–¿&äݨ‰º1?1©åÖà™™<†áŸs¹fº:íZZv‚ó°šè˜£0õ"µ´ë-2ÌnfI$Q÷Ÿ×Ú¥¾¶[˳ wã°¦ß@0¯®ÒI–ÒÝHµ‹9 3“ëZÓ™œÞÈ êâ§ÑtÔ±˜³Ï³}àMt ¢®#*;c›)J®­´´SWqzf¯JqÛŸÖ `|‡ÚŠ[МVlgª0¸’i¼°ÌëíIÆÒ erÖð€vŒjQ6^¼j —9ÛœŒÓfqpÚÁGEîkx­÷-ã]\É$­óc¨íKf%[µäóó¿¥V·)‘0`3÷×ùVœaî[»˜‰õéCd’ZÛËï·@Øäíæ¢m2Æ99µŒçýšÏ·ñ„Qª4®xÆâ:Ôí®XJcap ZËRƒWÓ"[PЭÕybGA\³iÛõD ¸|0#¡머Ölî-$Ž)ã-·ž‡Ú°§‘<˜/L±,ÑN23W&t¶ÐYÁ(b[$Žõq®‚Ê‚;VDZµ„³Æï2Ã'=A­VL7!R„pEK¸Uú°ñ9 õ”+¹þÐŽ G–s´ É®Q*¾#%9A]ü0ɧ²Hz®qêhz´36ÏÅ‹uw$RXùÚÔ7Š’=B8Ðå Ã9é\Ö—d·š§ÙÙ°¼“åN¿±Ž ]mco“*µ[BÔîõ/A¦Ä’“¿+Ž”è¼Ck&”uS¦Ã×5ÌøšÅ`²¶pÜ( Ik¦ÇyáÕÝ&›qR’ N›Gñ¾¦$ v8ê gêž+6Z„vÑȧ÷Œ;W7á»F›Qr¥¿v§§z««Z mUáËdhåW NÞOiâ•%ñò¦9Í]Ñ5¿í{_1”#¾µÆÜøe’ÏíÌd©ãzÓ<4u5ºe£nÏN´ì„ÏP‰ŽÂ:bŽy-Ò£„¾œÝñQÝLQöŽæ³(/õ[k‡Ú& ¸ñKoou Àô®SĺUHUJĤó\¾“w{o!²·‘—Î;N;zÕ(ÜFÿ„¯MæÞYpý3ü5·-ô1Z‡”©ô¯)Öü?6œÊ»:·,OcZÏ4·ž äc´t¤ãØ;; nÓPY CäûT?Û¶o¨­šË™1ž=}+Îü?mytÒEk 1‰1Ö ŽÎh|E¼S —Ö«— \õ­B :šwÚ”Û]ZÎⵤ Ãןֹ$«±þïSXöVwwzA!ü¸dïG*§£Ùk–:Œ’Gi.÷SóJà¼]§^®¤÷D4“÷‡j¥áT—ûd,RmÚ>|u5¯â½Js}Ÿí\ äuæŽ[1•´ŸÜY¤qܯšŠ1žâ»H5›]RÉZRøÎÞõÇËáhäÒÄAÄÁr}ëB»—NÖã^F[iÚOalzÍšnw½ªÁNíUtö2,x<Ôó1#Ž+;”r~:Ö#‚ÐY'ß“¿û5ᯮ—n`¹¡(Z¹ã¸ÃŸ$f²|5cmtd’q‘6“ïZ/†àušŸ‰ì4åŠX`VšQŸ»Î*{ÚÇ£¥Ö3•?йO[$Mk" ©SAMÑt(õ-9¦šf\-+h&tËâ»!¢½â¨Þœ÷¦hÞ%[øå–tòÖ?½Ž‚£¹Ð,aðä›T–ŒoÏ¿­bxJÍoÂI‚¹•ºsÍ%`5[ÆáõQ6ÛnÆÿZÖ»¾¶´‹í“L DeG©Åpw–¶Ñx UÛnª×‰$a¼jÃaä §d+.¼[©Ë|²Ú#¬'…pk3Q•ÓYŽæã‰YÃ:ÿvºý@líTÏÐ×3â¼T+8¡>ƒEÍ[Å·SH†ŠF¸ê:×SáÝn-KNbÆå[WÑ`ŸK«†Ú æ|+[k† ä2ÞÔhÐÌÏêSÞj’3±[`ü"´4GX“T¶;¥x·m9éŠOAó_•€&ºÿÛâÂÝãÀb”ݹIêo%œ†àö¦ÍqäàÅ@¨Ít ô¦ÞBÞbJ ?„VE ªêö–Úc½ÈVVãiz¼ýt“¯=ÅݼKop€÷jÚñ¨éк¯)&O¶k/Âû2¨˜‰3£Ò´ŠêKf"µÆ‹© ,ÊQ¹Áà×O¯êÒG¤ÂPÿÇÀÈcôªž*·Ž+[y—¹fçw_¥W×í%·Ò, ™^Ö"+Û;Y´ûµ%ï– Þ¬k–sÚh–qÌÙ–"sŽ£4ßê–7[oço¸íÑ}ªï&†X¢h\2IÎE0f~¢M¬iŒÞqÔS]/‡<<štæw¼¸Çµsþ×!Ó¬fI³’Á‚žõÓxs_KùÙ.­Øö¥=‹íK쬨£’qZ4j猊ÉÕm÷Ü))žæµ­ýp01P4Y‰TŒ7J—p…–TdTЇ‚jh•‹`´˜8ÉéBŽ´€—!˜Hìw…êFˆw~G"€€=})¡sÐRÉÛOÜBaE0­DI#ž”ì’9¨¥±ŽÔ€V\½(2I¡úqÖŸÚ2{Ð1¬YŸŽ1StQšfsN lô¥LšqÚ£4ÄU<)çÀ4Å”->òÔ( ’ ÅO­L˜Þ3éOQŒ‘÷J‰'vzT«"—uUäõ®3ÆœÞZ“ÝHýk³“=}+ŠñŸü~Ûö?­Tw±Òd¸ÑÖß³`ÿW÷ºW ©C+(ºnÆfþ•Ý$â=41v@#aü#kÕ#Çš·7RI èvÕGrzCeåLn +ð‘¸~­uºvÁl®«‚G ¨ýq\=¡šOô‡/´ò DšéìukdLÉ},»z—\~¸¢h³(h'¯Lv¬mCÃQ^Ü…—Ê$r6õ­Fq:,‹’­È5)q>n* 0´Ï-…Ù¸–c! Æ*)µ÷³¼ukEû9o¾‹Î}j׈5Aeo±2|¼vÿåï|ù-cº‘¾|ì\¯ßK]ɱoUÖ-n5k«ee•2qÆ+³±º†òÑ%÷!®]S•c>Ter6€+«Ð4é4ë¤y®Û›´åk SW€N)’ q޽è‘“Ãv÷¦«dž1Š„Q³ ‰³i“ïßë\\Í(ŽÞ5‰NF#ë]¦âF;GTuöõª½„pâæ÷N°{›&òϱÈ?ÔVTO:3²‰7ÃF+Ó $¥”¢‘ïHˆ¥¹Q…”Ôõ¸XàtûmFîä5º²’»YßœZ“PµŸD¿‰¾ò+nFõõ®ö B}ݾÕKWÓaÔìü§Â~CýÚ9ÂÇ){­Äó»Â¸Ü¡#néýêé­cŽóOT‚á”:æG÷«Ž¾Ð/,cy‹8ܼþ• õÕ¦M³È$@äcéU$šÐ›µ¹Ú >í~IoŒð² ÍršŒPk2Û,¡c)''µk'ŠV;P¬LÓ÷;zVN –Q-ô’Ã+¾çxö©Šh{®ƒeq`‰"«¼²Ö&»¥Zé­ÂϽÉÉ'¥nXëqGîàt·‰yw8$öÇÖ¹‹›¹5mO{pn£4Õî4lõ[{ˆVÎù¶‘Ú©­²ÝA:[@K‡À"L*»é³Ë>Õò²z(§f½²·Ÿs{€I“úS²´0l±=*¥&åÝhÏUûh¡²ˆØÉŒ•ÝY깘”\’zVÈ—¸ýÅâXqÀÉúÓÒáʱî}¸Z9ð³I˜ÇO­ÖöÍ} áTËTjWB±bÎKXWmÖœî}}kN)ìÌ`Ç¢HËþíJ|1;/™o¨’¤ñÎ?Py§ W Êš#>µ-¢‘\›Gö4нþZd·6ËÎÀž…Æ*øÐµˆÐÄÄg°5þÕ.c 5ðb9ÁäRº WwvWâ;"’ûqŸÆº=ÊâßNÝ+¿•SÚ°-´É­uô¶p®èÃq«ÐŒ[Ç?ÊG›]¯—¯6ã’eWs&%€1*çô®/WS¿&åèàzï­­‘ínC¨ãð¥'Ôhà4’¶8à“ÓëNÖ$1k¾bäle?\Wiiá»[7y ‘óóÕZ †Ö^îå· ?*ÓæAc3_¾ûV…’G±¤o•O·z¥¦ê0G£¼NÙ!Ù]ž±¢Å©Ø¶*ŒGZ°ðߨm¦ªµÃ! )&­aXÆðµüVz‹huÚ¢—Wòî¼P|ÀV=À5t:…£µ"{ÅÝ19Áè=)ú…žóYK€ÁaÞ}ª¹•Ô¥ªÅvÚR­’~ì}ïqYþÖÚÖd³˜|®ÝG\×csqieÙ|ÔWî“Ö¼úÞ#}¯…„aL¹ãøy¥˜4zºBãÓ"¡ŸïôÀ©-Ñ„h3¸€i·‘¹e+ô52º,‘{˜9Íy¼RÅoâa&åX–SÏlW£›îâh§RPõ¹]CÁeØkc¶'<ƒÔUEØEÍcX¶¾€i–En&—åù„w4ÍVÝ,|9$xáPp=kFÇÃpèèeˆ$Æ Ôº†—s¨irÃÁ~qJý‡c˜ð4»u ã)È}*…íÊÛø­î’äŸjët Í¥DÒ;=ÇÌPÁÒÞêÒÏvvÄOÖ«™\V"ñm쎓Ä<’øÆ=©þa/†gˆžHoÊ»¯xtÞÛCme´y|¨«šNƒ. Ëo÷ ã¶E+è;.ƒyެmÛGÍ_ñ86Úôw»KFê…héš’{äù³µÒëšz¾ž‘‡î‘Ú›’º °ë6×6 Ç0̾žÕËipɨx€:.SÌÜÌ>µ£kà»Ö¼ò¤ÂD,½H®æÛD‡N³ o«c’:š9’ØV&µIc\qW$Œíç­V±†B副8­aÝLã=ë2=ñÀf¶R9òß9¬ßÆ$`óœs]ŠôíºDüq÷³Xþ´ycº“n¯ì“mJ>08šÖ3ÉDàzÓ´}ZÞabÂhÉ!?¾k³Õ¼:š¾•äìU•NQȬí/Á«§ó#ƒOAG:°Ün,÷¼'4ò#FÒ&0kðˤÁ™_½VM>9­ÄRÆ®„|¹…ðÍ¥Ž´'Œ|Œß*ž€ÒŒ´Ž#U•ÿ¶¥œ‚€@>•±§CIŠê ‰Õ{×BÞzÛÞÜI˜Kd ­i4o)Ô@gLÔÜйO9Ñ//­îÖa2°?*‹YŽò-TÜ]@ÑÊçrzõ{"ÞÎS(‰wž§·úM¥ù/4i¹z=¦ ¢rv:­ÿöI{ð<J­à­Y¯ßReÄ@žüÓ5rÚ–¢ºUˆ'aùØôÝézé–Û/UdzÔßF;mã[ˆ5Ÿ9þh¤ÆÊ¿á}/T¸–&™ãµŒä(=k¿½Òío—ý" åOÓlíª²¯NÞÔséaµ©J'o·°å€8­ Þ8†[ žÔ״ˉm=ÍHÐ>ñÏj›…ŒmSO‡Q³x±÷ÇÞ¼ÞëLÔt{ÕM®¯ØÇÜW°-˜‰òÃ"¬yq£FnÆœdКGišú„ÐßjÒä.6¡ë]-þŸ©€¨)”úqZ÷6"D>YÚÙíE½¿Ù2Þ¦‡+ŽÇ˜Ëà}MnÙAƒ9Ýí[š¶";(áß$i´µÜ³Æj€LpÃiíG; #ÏtŸ:!¹Ôÿeu$Á;B¨8­±nEXñŽõ›mö+kâ¢é<çùvæ‡&ÂÉ!5Y±0Œg=+CLÏÙ±'’Ú-ÊŸQÞ¦·ìèªNM E¢œðiÀÆi£•Í:6Ô”<Ù§ úÓŸzUaœb€&èqQ0¸¤gùê?3.@  1óµ!'µ03Þ¤\h«’yéNg ŠvM1¢ÈÍ Hj))L ŽÕ,`‴îòË´ƒI3Í1Ô‘(9ÏJrÅ ¼cø©QBG\Б٠$öÇzuºîŒCõ¡$±©Q’ièIÆ=èw t¦ÈÄFqÚ€$`I®'ÆþÛoý݇ù×g.¾õÇxÔ°¸¶9ãþµQÜLØHä:X]ÁL±rÏÓ®l^0µÁ¼¸À%Xy@§ç]U¤bãD„±m¾Xû½zW2Ö!’Se Èaœ»Iù¨½l.†:³|Ò(qÍhÛêsÛËå›'•tÈõŸioÝÃÅ<þ[ãå;»Òù/m'˜ñœƒ»*7+c¦E[Zê­ç•n¦Ô 1ç…Q·­O}¬[Ã42$Œ:95Ê‹ët‘wZC#nÉ(Oâ®¶¿`ù:l(Ãî·¨åarX,ŸQ’kÍ@4Pœ!ãžÆ¡€lë öx[ {Uv:–¯¹™`æ=…K0Y_Ù¥¥Æéðøþí;Yçj](AòÓ.fdŒC¡-ÛŠqeEÆzÕx 5”ãîÒwT‘8e"¡‚ÂÑä†Ã2á½é²ïXˆEëM…ž1ž3Kçç€)]¡£>ÓÃVH²ƒ#H§?z¬7‡´ã+ÈÑ.yÜN*ÒÈy¥:;‚ÊÛ#¥+¶2¢é± E¶Oûæ¤]:É#ȶ‹öE1/ l0ã8<³¡ÝÚž E奼e WÔ1œµ¸eûíUóŒ©x5›áÛ}2T¤ûÅÈïZïò¶î3G™»Ÿ6š |‘‡m£¨Åõ¼ä¤r«•ë´Õ?–]â@ÛX/¸ ÈñßÈÙ' f´¹,ôÈÜ2äw©²0+>)¤9Æ*Ì/˜Æî1Þ¤,4ÉÐì9èzŽ €y®KP´Ô5ÄÈY-¡9Èï]bI#ƒ@ÀJªv®©§• Æ=ê‘Vv8=$ d3€$’Xp3P<Ò$v`þµj7¶Oj$‘I»P?šGCS`Ôe‡iw'ŠqìÑ®0µ>AŒmïÚªÊÀ  ÖŸÇä­ ä¥|°3Þ–C¸¨.ncF@ìqÚ3ÜÓ^\0PzP"Ô솥§Kl ëŽj†´wÑtÿ&@¾fI$V·› Ìʼsº–ᘉÕÀ8%M$ØÉÓ Î2}úQ·j@Î)Ù3Ñj‹êV¿jÍ: ûGžq@^ÅÐ â¨\Z‰nRN›8«jÙBÛ€U/-šàÂ'ŒKýÂh}Àç9©c‘Ç5^k›ktÝ,Š‹êÝ)ñÎŽ¾b0*:ðh·—‹eHÅV1÷óYö °ÔîÞÝ™œ ž8¬ÏZ]ßéDÛ“ò°Ä;×áý~MWY! ù°¼Š¨ÆàÏTŽÖÚ)̉k)êíZ\*e#<×+»m­4&Öp~dn n°haÎüqšN=Ä™t¸ûԀךæƺt7BÚGbÙÛ‘ÈÍ_ÕµÛm*×íà†®:µ£¹°3Èaô ¼VŸâ‹+Í.Kâå<† Õj­¯ˆ-õBZÒRY8+G+Éüa«\é:ZËj;67žÕ…àCSÔu e¸¸2F£vAW|hâo Ç£ V‚om´Ä½¸šeP (½ZZ ³Ó9/švØÂã?1®[Mñ¾›xæ9˜ÆÙÀ'¡®“ÌYl ädßÒ³³[•qÒñ·²úÓ@Ën*µÅø¿ÄæÑ¾Åe(ó³ó0íXú'¯a•!¹"es€{æŸ#µÁÊÇ¥\±6Ñ–*q^u¥è׈š{€È÷ü¬ø¿Ä7–óÅÂÅw6Ú“Âþ,¸º,sÑÔ:vi\W¹è 6ÆüM žhV/!Hã½&ÂøÅNå]Á<x`«Òß°¨Û¥K8u,9ëJ0 qôÇjç9 2†&šb³Rg8Àææ€ÔÔ›p¹¨ò =œíP_:¾Iâ¤ó7 fÇ•É4"ì†;»sšìbÉL6Æ;U=Fù­ZÞ$PÒÍ.ÐaÜÖjLv9á¥j÷ŠVy|˜IJ§öGÒo>Ø­© ‘Éü«¼wÁϰ®nk‹{½oìæÓ|@Ï>ãÒšlj:Åì~e¬ýd8ÍQžû[„¬’"²+rUsŸÆµõáØ#’h˜¶ÜU? ¡›í*ûŠ©ÔsEºˆ–ÃÅ tÞLëå¿AîkV ùÅÈϪZf[8N¿6S½Gi«yz"3ʇc"úÒÑì=‰Úò8'/1 Œ~V55½Í½ìèR@àzå!kú–ÆfH×½ÅX¼Óî4g[›)•~öM"¹Õ_02D¹äÕ*LLDœàqƒU,'¬7#’G"®O—·ž¦¥èR15_û:±ì3·Lö¬¨&×nSí+#”ëŽÇéPjöòM«Ý©^Q2zq]^š›´«fN>_ʯdNâ5ÃÅ|ž[ ëŽ Z¶×m.¥µ»¦kº$Wr]"âT®~ÓMMFÛ̶ùf„d§õ¤¬õ$í„Sï;‡çXz¶¡yu~Öv Ê™ñŒUíáolÔHs<_+¥\h€´|;}â)ì*5 SHÌW ÈI<âº-2é.íc•2s×5ÊjQÞÛÜÌ%‹p{V·„Ùš)GðƒNKK…ØOz UhÛ#†¡c ‘”¯ËëV!R"$ö¬‘D3C¶?Ç"Œ4°ÇƒNiE Žz Y!Ä @¢GEñ)P¶Æ=*)eXâUz¥„~” b¯ï}é>eÁ&œtà´—öX&“8žh[ÓÞBXyapwHßÒ¹9Ñ#*DÊø8;{VÝ¿ˆDŒ#º‡Ìœ3O½Ôt›«wCnÊøù[f*ÕЙ†‚7‘‚´›@Ï÷²i‘£HÍ™œr$â‹xžBÅ%T= fÇ9³}ÀɲQŽ‘¸Í]ɱ&ŠûZÁü+SÅí±ÆGÊ‘ä}MfÚ#Û^Gt9E<€y«w²­æ§Ôñ¼p67nö¨{u©-ÖžHÅsŒÐs»»[Ú™Žê躱û4KÇ£qTôë#}vöˆU²ß55 Xé¼7(TcqÍoBÅ×wCPG%´PGÉcï š »[ýk9j3ñ/¯C¼c8Áük¯ Ȉî\·‹s¥i)ëÇó®º ´L!”qøS}á5=Jö÷S0Û4Šô_Z¥{s©å`ºg}ÐÝë[EØž(‘dSÎì{SüL€ë¶åŽ7cBhMY¥o @²‚HaÏáZ¾»Xtq»nC3}3PkxzEA÷Jàž•‹òCá“·ò`0ô£ ^#׿Ÿ`´ó$<È:1©|?ây¥–+I»ãÇZ±"ØÝøU>e ±çÜšÉðªF%˜ïQ(#n_Ò–€-Æ¿¨¾¸s*$˜òÇqšµ¯x–ìâ·FˆŽ¬xÍWÔ #űí\åÔ’>•sÆp¶‚AÉgþ” -ūɫxVçz蜟Zå4©îâŽxíSsc%jèìF|&Ï•ŠsŠÌð£5׈Qüè[0±.‹â[¸/– ýY±“Ú·¼C¬Í¥Ù+@F\ãžÕÊkð˜õ4’%Ú½®ÞÜÃ?*‘šZ0.xC]›PI!¹¥A’ØãÿxŒØ"ÚZ·ïO$úU_F§O˜Ž»¹ü…aø¡ñ'Lò>†‹{ÃDcź²ÂP°àIcÂúž u" ™"~d-Ú®ëPG‰#"F²½™áah·R(ùùÏä*¬+õ¯]]Lö:`c"ýæ^ÕáßÜÃ|Ð^Hî„ç±®r+‰¡»ó#›c³¸uÆk¶Ð|=‘.dq#¸È$õ£Dµ Sø¾íµÃ4Ro¹íVµ¯Íaäc>•;»™WŠg½Ó pŠx®"=BxµxÿëD™oη´ V´ñ,öÊ~D §Ú°.ƶêXKùÕ$†hëúÖ¡|U&C}Tzû×UámRêmG$x«X¾.·òílä8ÝÊâ·|$Sx|+0ÜŒs­)ZÂêX—]’ÂÒgŸkáÖ¹xtÖñ)k¹ŽFb#D\~µ{Å IbL<²¾î:ÓüwX˜K*Ïewu4–×—ÔtÛ½ ð+¼åu­ýCÄ—í D¤(.ÝÀòM/ŽfY嵈`¸$Öeþƒ%Ÿ‡-ï\¾ö<«‚šÕj• Ö¢ÙËßÌrQ~½ëWÄš=Å·‡­%ž]Æ!†ÍWðMý½ó ‚‘ò¹í[þ9¼GÐQ•–WàŽø¤ÛLÈhV·­¼Ö~sªŸ˜(îk­ðφM&âw,çŸJ漩Úi·r›ÇÚ ñ]ö—¯ÛkBu‚7UŒpOCNnÃE@_ÃÇ`ÈF‘\w…4ûMJy­î£'# ö®×^‘á¹Üü€}ë„ðΧ™ª&Fwc4/…‰‰â-ôY•Õ·Bç õu&½$~–sÌ‘ ™¥ñ…äºuÆÍRðþ›,¾¼VÊù™*°¥}5B-ÎßU´žâð+³ä»w_Jçì½®¼›€x’Ldýiºd—ox¶;*Ìv¶Þ¾”ÍNÁôýFKsÕO§&­ _R9mìî#Q–È$RxܱšEU%{šÎ×ëþý>+…,GÌzzS<)¬ßØÍökH<Ñ# Þ“^í€õ ›Ù5P3Å[µËBžMeM#I:3`3u_C[qý+&¬R%@JóN“åÁ^´åaš‰2žx¨(T$1÷§©Mÿ5F"„`ÌqÖ€%r3òÓpÄsÒœØj0Ã< ålÐK”ß¼ÞÔæéŒÐ€9£­3nÜdÓˆùxï@ ŽiN1ŠjŒu§WµÓ §æªŒÒ;m,h¸Ëß)ဠŽõËßé·Zuûßé 4gïÄ:¯®+¢I¶ÓÉéYñê¨úÄ– 2ª7÷¤„s«|-¯å£.3,.v’E_¶ñm«’.£hÈ?ÂwUíSIµÔ0ì¸î+*/ Z™2ÓËé9ªÓ¨ˆõuuTÖp»n8Ï\þ¹áÝ6M?MÙ2áØäƒRÙè¶:|k$Q‚ÿÞ=jìS‡“hüÍ.–CD¾R¤ £#µ8¸Æ8ü)2 ICV_›?ýj£¨ëVºi #eÏð…æ´z/¨=ëεÙLúÕÃÆÃÍ8«±3N_Å$À5»ˆóŸ½ŸÒº«;ˆ/m•­ÙYqÇ<Šà­7–‹:¤èül VÌñ Y‚H’ÖfÁ^ÀÕ´„Ž˜E¶\ÍVÕJ6çMµ}H¹HÏÖ°¼TÌš3mêXd Ín3˜Ò.­ìÖi¦ Ç(õ®†ú[WÓa»h÷˜mÉ\Eo´^S–v6F1SY\+—W’Ɖʨ«V‰¹Úý‡N†ÏÏžÞ,·F*½®›£jÑ´ÖÖçpxÚ+œ¼Ôf’Ñ‘u•ƒ0qI§_]ØÃ›{¨Tg>Y<Ôò±ÜÖº°Ò »û8•ã|í =]¸ðåœÁ五FHßÇÿ®¹{˜®îåkÇx·3g;€Å^›UÔnl¾Àâ'Ê…,Í;>ásN? ÙÌL_j‘°2Ë»ò¨çðÕºL±Çvñç¶y¬ý6âö Q&’<¨•oÄÒËý½Ò|È£(ŒZ¥£F¤‚Ò7ANúÜBëíwÞ…âåGÞªÖQO>uŒ˜Õƒ&}{×§é°ÙÀ–à)P0AïW’ÊF±ª§pO8rž¡è3^éó4¬Ë}ÁÐf³ôM2âmX€Õ7ÎG׊õd‚8ã…:U{{ {i˜ÇMç/îi©ŽÄrê6Š’ 8\~¨u™ïîtØe½BŠp=ýëÑ®lm®Â¬ð#ˆÎW=ª+íÛP1*«ÐP¤ ~iqáÙá@UYp™®y>ߢ]’P£ϽzÌvëmD(Ò¡¹Ò-¯¼±+Ï4)ê;&Ÿψu8eºR#ˆzu­ßÂÐèì±+€ÒºKK8bR¢0ª:b£ÔclïPš¸XâüuqÛZ›ÉpIb;Ô¾;²dxnQ9Û´°õí]žiªaŒ&G”s49»ˆ%–åA¹­øšüÀsNªáˆTñ„<Ž´nb¨ëÎ*3ÀËgÒ¤9â˜dmbM&†"ŒŽ§"llúÔœ éëN$H–†jIÏËÒž£sb¿6(«Æ3R0àN mÒã#é@ÆH”ä yQŒÓIrG4×Ë´¿ÃNEàiÐ 8Å8äœÔìœei qïLã8¦|§šØ&•PäÐ#Ï”žÝ*F zS’j@Nj€rtµ:Ô)Ö¦Ó¹äý+ñ9â5S  ®ÿ§ç^yâ’ßð1Çeþ•PÜLíB*Æ»O#¨ö¨5YÖ2dg@Ü/æ?ýjhª#õ/ò¬Ï]Ê'Ktye:(Ã{š]A·‘@®gŠùÙ׿"u#v;f¢K ›¸Íì­¼;w1€ V¸»’Kr4å÷$çñÍtº wÑØ,W¯ÙXawâµÙ œÔBk¶XÞáÊó’NFk[K‹Ì¼°³ÆÑž3Ç­^“ÃV—ˆ¼{Ü^«ÚvŸ%Ï›(_•v¦:(ÿžd;ä y Ø~•ËÍ!¹•¥]b1]ºÜWE©Ý,VrHN\æ¹Ë7–}' f˜M0 žÿZK¸Þ‹-NÝÚC²íáOSéøU¿¼³iD™*vŒv®ljF8ŒQ¹ »/ξ٭ Êqsl ä§°D|¶ ~nõu¬YÙn6Xñ…çô¨üCªµ¥¨†L³qÇQ\‰´+r±ÌÅráY»óJ*û’Î…|Rˆ»ÝÝOáŠÆÔ¯£¾¸óÔ2ä|ºûxcÊE‰±©¬É$"¬L¿x }@ßÒ® ›O„Â#È_GSZjá‡ð®ÊÇT‚×íÐ=Eu:¦/á"Cûäá…)!­B¹8õªï&_g§z··#Š®Ñp:•¨ÈÃV胚áΤÑëOv§å-úWO¯Þ K NÆÜV ŽˆnôÉî]Nþ±Z¨ØLëÖdº³Kˆú0ϰ…š0@æ°¼/wþ5“’dNBú è-Ô©ôZRÑ‚ ƒ r=)$ãœR\´¦R¡~Ld–©cÍ "è¸'‘DRÄÔÛ©a‡2I"§¹j«­§‰6 ¨·ö¨°\ÔLg°5çâÖïI ÆÎk§Õ5X-mËùŠN0Íbhv“#É !˜ü úšqÓQ6jiþ¶Ó¥212H~éþèªþ&uv´‡p-¿‘NÕ`Ô.æS ûv«ÚèÒÚܬ÷,f˜·ž‡½c±ÕBvD‹Œ VŠk‚~]µ–Ròì(ê*Ž·n×dÃnxȤ·C‹{E%¶}é÷škY\,r1 Ë•4YB’Íl7Ÿ9¤Ã ôÁ®ƒÄ–þfž%#-/ZѲlsvÖM4Û 1î<3Ž lÇá;´A,Gqà§c~ƒÈ2>ØÛ /OÆ´u¡z÷ÏÄžSŒœ(zе+T*-á”ýGçQO¥^4*‚Á#|ýäa“[vž ì‹LØt;GÍÔþ5‹xºµÎ ‡ÍÜän]„`Ô®;]:î@ús;_ü*µÝµÚÆÒîõÓÚJD*Í*ãqW ­gþr„H+®½×,ô»tI <Œ ½@4ÚÐ:•´ÿI®Tˆ¹äzŠëˆÈ=ûW1£  žÖ0 óžõbÿÄÖW)%%º`T[P¹Ògv5äÛŒñžõÆê^4‚€²a$„òHé[š~¢º…„wNBàgÖ‹45–EaœÒI2»Éâ¹)¼_io{ä gRØ,: ÖÕu;k}'í2¿îÈÈ´r‡1¬“Ç$e·qS«ˆäW5£êV×ÖlÑ’ûÙíVlu‹G™ìâ›çCƒž”rØ.o 8ëíYzÅÔV–­#Èåêév6N2=ëɵMZîçX2ÎÄí“åVéÁ¡F㾇§h:‹j‚FŒ Ü@.>÷Ò²|U{£Â;ÈVy þ¢¡›Ä&=2Ú êp¢ÿ½ áX%°w¼c%äƒs¾z¸¦•˜Šš+øvòXÄ6Áf;[Ú¶uŸÛhÐlåÇÊ…yÖ$Öº˜Ku_89Ažã5ÔZx]oÙÚþFk–çàU8­À¿§|@µucyŒö¥mèþ)´Õ§x!ݹNá\±§XhjÖÉ™îXq»¶k¬ðž’–:r\cló[=hi ³­w x×#ËïÇ£í›`€4*pOsC×aÜÏÖ5ÍYõFÓÑÌ;_f½ÊGŽÊ+}€·¯Jò‹ýF+¯­àZoV;«£Ô|n-®ãKx÷F ncߊrB¾§rnÆ9÷©dqÍsÖz¤:µ ¹€ã²úW5ªøÒêGm¡ÌHq_Z‡¹ÞH‹çn{Ön·isv k[—‹Ël²ƒÔUŸáÕÔc\ÈÃèkÞ+ºº¿x/ä`Jàt§Ê6ÌïË:jª†w+åƒJî¼>R ׌ü€×㢩Ã*¶C&1L½Õu¨,-Y¡†4ŽõVÐ]OSó:îç'JfD\“ëé\g†9©(a"œJäô„žj'et_/*ÝM 'aÎE<ãe0'8ãÞ‡è9é\þ‹æ6¹Ù Øc“].¥áÛ‹‹Ö–‡”î$?\ûU=¢5íÀòÕ™€•ÔZ5 ÈtûVžem àmÍeZÎÓk]+koŒ“Оõ‰wâ[Ù®OÙ@û4D‘òæ§”w45 Z+»66Ëæ~"9ÛWôÛ(mtß>UU2 .[· ˲š+ñm}k‘˶P«ÔÎkGZÖà†?.2®[!:w£[X.aÚZÚͯ›WH`HÇBk­³°†Ö&XbD÷¬ Y5ÅÔº‡Ì±®DJÝþ•ÖµÚÈ>×dc®”fÈ Çnjþ§£]^ÝÇ%ª 8ÚNZ‡PÓ~Õ®ß[£¨‘þ*½á»‹¸/å²3ĺi­„Ë:&5Œ²4²—b1ô«÷0Þ|—+ƒÐšÐá v¦ãåãëQwr’Û@¢U(•É\Å&‹âÚ> ˜ö÷®Ìçh8ù€üë×¥kÍnÚÊ5åT˜XêblÆsJê6Ÿ\dPª¨S÷¸ÏåUõ;±ee,ÄýÁIo #Öd:ް–ˆAU`ŸOZë!‰a¶HbÆF­p––·÷sµÌ Þ`%‹/©«F÷\²?0”cÕzÕ4Mõ-ê ú.®·INXzé´Öº9?9=늼ծµ+q öÀ°9Ræ¶ü)z$ƒì­Ã Üî=h’У£Ÿ;A'¾>•FÿR]2ÄÌ@Ýœ =ëBdg^9®KUµE`Ïû•"¢:J+kÿÝ4ò>ØóÉì*ÍÆ…eåùq]bâ>»˜k¨†Í-`¸ ?:ÇÔü4o™® }’÷jH›ÖŸ`×—R#MHVÎ*寽¨BéEøÛ´ö­M+Â×6—B{‰U6ô y5s\ÓVî"Ì£ÌQßJ|Ábž›¯¹+˜ÂÈßq±ÃVÇš÷6ç¥r6îo-<•ÂÝÛýÃê*½ÝÕôîð² ÀïIÄ.vö’Âó–ŽEmÝ«W eXpxÅy¬îÜùð™T„æ»mùµ+EfåÇT¸[P¹á¸à½{©ˆ99P;U­nÙ_K”tùr+V8üµÉíÆ+RÖlã•í¥~ÜŠw¸Î&Zkså~ðÏÍu:uüo`ïw £K å.äŒÝÈöàìc•÷­xµèƘöí£ö u>õ£ØDv:l:ä‘[Ýl$íÇ5ØZX­ ŽÅНÞ=ë ÃR*»O<ñ(aÊ fµ®µ‹Kv/ç¦lÔ0,ÞH¶qd~g&±´%–êK«óüg î+/TÕ¦Ö'UmñZÆ{ëì ·‚Â8â#fßÌÒµ#—1Eö[ÛkƒÌrf!õ®‡F°K{8ànNߘ{ÔèhÕ#» }YOµj(+>@Ð W(äD\*j¶Ö°˜&PGÏ[ž,š3áÈvœ†| w£¨#œÐ­¯¯£–Ú)<¸q–>¾ÕFÑ&VXãù¢Lg>õÔøƒkrt9Ís–óA´ò9!w¶8ïE·±êpÉ$vˆd;yo¸oi7ÛaÀ^⻨eéhýŠç¸_¤ÒC 3eUÎå^µ1oÁZbAl.eRÒžFïáÔ]ÍJTŽH?•`éš­…–”“G(ªÿ¥ƒQ½¼Ò¢H¨„ãpëEÆ?c³Z&ÿ-²ã^£§E !ß*:×—ÚÆ?µâfoœ3^¯iû¹Nz™§-€óHçÄs–8o3ŠíåÔ®lt>ÎD`«~Åø©~"Ÿo#vs]°¸‡Uð”±Ûû# çÔFÖ<å§ûd³Íu&f#púúUëm'P]2{€ BW$õSL6öú´ r–ó+Òç¹±Ô´›˜í&"2v¯ZmÛ`±çZ¿Ú5xàfaƒ½H«Z†ƒ-®²--ÀoâSè*¾5Ŧ©˜b-3¡k¼Ó´g³&âå·ÜÈrK=¨o[‚6¬bòôøÐœ•Q»ò©b;QªH‡îñš†9>R+.¥\òßM-Lj%ŠYITp SõogØCq’Pà©éOñz$>#fAò’ úÖŽ¹ªÛj^†Vg”X÷k[µk عá¢ÑfÔ•I¸*À ®NÞõšþyf%ÝÁ=ÏAŠê¼v’X\éÍ&“…5ÊÎ’iZÉ&9Õ=ùÎh[ê#wFðíʤ·Ó£a*£­dølñ5²Œæ×m¡ë1k”]ÂP¼Œqô®6^ËÆ œ>? UîQ«ã[ÉEÔv›ˆÅlhš=Í¥´òÁÂvëY^0±–áÅÒ©}ƒk+Cñ$Úxò4ŠzCOìØLƒX‰SÄÒÅÂù€=+£Ôt8ï´½è¡e3õâ¹MVyΨÓÈ»peÝé]¾‘«Í6“4×0ª¤qçyîqÆ)´##ÁRËÅÄgW85£âË ì–x Ï”…UIïU|H×Wn§k|©ùÖ_ŠS‚õfŸˆ•¿tÂ¥|EÒ¾Éà¶I,±ïÇ¥s> Þ̸ÉÛÔö®’ËY¸¾ð…ËÎynج£ŒàTóM¨#ÛX³&7p]³•WnãšuìŠàFݹæ®XÈ`‚¥°[“ò£ôÆ­5~bs@áŽ*.U‰sÖ¹@¤Š$¤0È=5(7ŠšB(IÎô§ c‘K¥íŒíúÐ\ÛšŽÙIN}jeÃÑ×¾ñ»xÇ¥1qIÎ8 ð2 9š@D”äTÀ¦¤#¿åM9n(9 ãšh;›Ô›r0zÓ2±žôÀáà⓯Zh?'Z½X!*e ñP jey BõüpãîñQ8Ïï»âWŸ­yíÎ럔'?¾j¢&mø•ÜéÖÌXíYƒ7¡®nâ;‹"ÀB¯„•f\šî¯,Òê £(GåX ¤êšyqc2Ë÷·Ò©2lAáKgKénå•váIÿëö®Žÿ]³°UódˆÈE¬&²Öµ¶Hb„1è8?¥X²ð¬1HòS3áíIë¸ÌËÝGQÖ0£Ej[tñªË§,·&Ö%qûù„v·oÞÞÊa ;-Š€¬¹ÛÇ­Q¸ÔVdû•Õ¼äqT„Ãô¿ Ço+“íYvq¶«%¥“såçæïŽ+næxt}%,!ÃÜH0võÉ«šN˜°iöòKÙÇ%‡\š:Ü ›+X­m–T_ÌÔݶƒŒThNÒ:{Ò+äVmæ½o-ާ§móûÀv­½:ò¸V⥜dãÖ¥”"¡èÙõ®gSÑîmåk)ÝTòÈ­‚=p*–ªÀΆÿS·Ó­ËÌø>ÛéY¶~&´»¸1(a‘òæ¹T-<öØî%~z–ÿK½ŽtðG(û¨~ïÒŽD~[z®;Öí±)´¸p¡ÏáK¡juf¾bÉ…5oTt6mr‡÷ЂÈhJÌ} vŒîã®Sź†],³™ÈèOaQ܈-ñ!|ôþUoqš¢Ï{“íǸü©Æ=Dvú’Úé‘>w]ÌkP þ!Yú~©ixÈ–ÌǸàUÒÛä+RïpBù+‚ÁF\ÚÉ¢kæHø~~¨k¼,0SuaøžÈ\i­0¼}»Ñõ6’ã̳Y¢R~MÀzœW{yw¶.å„Å"¶HÇQšè|)¨ý¢Í­Ý÷IAí[ÒÃ;HÑóê¹#ñ§ð±[A,§èã«(&­áUp5›q¨Ùé ™¤=uªqø¢ÆK‘Ì¥º3)n ClŸóÅWÔ&†ÚÕ§ü `ÐeÃepÙ<Y~$I%Ñä ŒH °”!œte­fM@ªÒžã5è0ÇosR´JÁ€ •®[¸•ÌŒqFŸ&G_Zêü5æ *7‘Ë—änì+IlIzý¬àµu¸Ø±àð1×µbxD6gp¸„±*kNïH³¹œ™„ŒIɲ?*ѵ·ŠÚŽ%ƒµCzDŒ¥ƒm‘Á¯6Öìæ¶Ô%ó†wÁëÓ CJà¼U~—7 o F$S€ÙZ %dH­H3žFoá•› gݸÝœœw¥†Hù §íl“øThYd.iÝÖ´·RK0ZLw1¶••—‹RCkuµû«Î»ËXìb$c ?…T¶S+Uðž£sÿs渨õ FÒ4ƒjºqÏ¥+xÂÉoþʘÁaë]:ȪË5-´†r–šU¿‡mžY\³ýᄱiZΠÏ8ÚŠ»ëëEʸʰÁùkŠºðV£ÁkgB¹ÈÉÛŠ¤×QX›ÄÚ"[iMÆÁO¾k[EÓU´„·¼ùƒ/*ݪ-7C½\>¡pf ó*•µº8XäH×°n”7qØç—Àñ%Á•¤,åWÒ¯ëZ÷:2[ÂTìl¨®†ˆgŒ4L®2µ?>Yð©rŽcà úe¼Þqcž1XñxNçí²ÝÜF6Êßšô(ÁÇJ~‚j9جf r¶I@uÈë^0¼Öb`pã×Þ»‰¯ím]cžEF~{Ôanr(æ`’<ÿEð{Ë"}µˆQÏ–:­vÀÚÛ…j¶Úla1á~e=I­1`/ʳrÖÊ0,´¨´xÚ+h”9=ë”»³•üilYvùŒ×½¦\ž˜ïYw†Î;¨î®HøF=©©äÓÙ¤ÈUe<UÓÂÖQÏö…„oÎNzس¹†â кºö*zÕ‚ ã8ïI¶φ,¯'Iî3 Àak`êWi¤i¸ ?Ö·a]öN;÷¨RÊÞXáEfûÄM …Œ½G6q[ãåQ©«ž‹kª@°\'ȧ"´‰Æ8þUðòZ›ÝÜv ´Ó­í- ´Qb21ZÌ‹ÃV’½ÂB7±''úVè}¤îàv4¦tèy§¨hT´·ùGËÓµBž³MtªÊеc*G`ÓÐ Jí ©,JxÉéšAf¸ã9«[s×­4@i]”SŽÊãå« o™ž‚k†ñ. ¿66aFÚÌþ´ß x£R¼×•îÒsÇJÑÅÚä\ì.4µ–\´jãÔÕØ¢Fp1€µ2°ÏµB·1Èìˆá˜wÏJ‹±Ø¯s§¬¼½Io§$xÝ“Š¼ïåÅ»jõ4õa)ܧåÅ+ŽÅ+‹‘ÃÕ40Wв ®A¨›pÈì{S¸¬( ~4nPzÓ0Xb…USóô¥¡D ár*'w§)<¥îi¹ JŠ€ :R«œÃŠ\0n¼S™¾\ôÖùºP£iÉ _’ )¡wæ¤#xëŠ@›AÏôT‹‘.AéOFÈúRëÅ0?6)XŽ3Q…bÛ¨ ŒšS’À犂hÙßå&ž“Ö¤RC`.hÏÓÓøëFÀ)¬«2‘Ú¥Ç-Nƒ)žÔÖnHÍpr¦`2SózÑvN¥6ßkäÈü·ÍÅ]h’_1eOQVpwƒÆ:cÖ¡†x^âXÃe”üÞÆ†úŒ®¶Ð*ˆ„HBñ‚¢¤—K´¸‹d/Oá?ʧXÀ·Þ§ …Ï&u¥ŠÛ.Õ~uxSäqL\î9©c9c“Ïj¡wòÄS«\)Y5‘‡Lv­û’C(Uã¹ œíÝÐ Pº¯c'™o‚Gñ)®’Úêê ,Íx6ΪqïZ @_Z†H{W„ÿÓ»b9½/M:ÊÉyxøfÈQýÓP^ii`þLí˜\b9ˆå K§ÞÉ¡Îö—hÞN~V Ú´Åݦ¯›r­2·$c¥6í°™[EÔfóšÊíòÊ>Cê;V†¹©Ë§Z¬‘Åæ³ ȸðÔâäIop»»·µ,ÚV³w[Ï,f5o¼§š†Œ Û›Fäy˜.xE«¶Ñ¢’ÎÊ8$ùŽ8>•Ÿáë{)Ž|É1Î{V†BÊWçŠRw,’*ìU}Kt©"˜J…”’qÒ¹¿» X•Y†ã“ŠæâÖoí•V9Š (Q¾¢lê|A®µ¥¹†6dÇa\`In¤r>wêäÿJI§’êo2VÜZŸþ®0¥qÎxûÕ¤U‰¹~ÆÑg€»öŽV&Ã5^µÒmn®‘<»”ïQüë+çµu11lÊ Öªø×M†–u?1íIÜ/cjãÂVS°Xd’<‹ÿÕD^ ´ƒ<îü䃚ÒѵÔ,VE<¯ }êäò˜"ipÕ'š‹²®R·Ð4Èœ[)9ãwJ¥d“ÂþUªÚÊœÆËÆê«¥xŠ]Bñà›`ç÷…ijÈd³Wh¥”ƒò„íCl.IáíVk€m/[˜ûãÖ·™÷.à8ï\ á¿óbÔ!·x„# ?ˆzë´½Z RÕ^&ùÀÉNù¡®¡sñбנ}åwãì*‡ŸÝò+‡ñAs®ÀÎ0¼Ϧk¯…Î1Ÿ”ƒCè#ÏôØÖ_ªæŸç^ªŽ¨ 'P9ÏJòmÒîµMÒ«“³Ö®ÅâJÆùšrı·aNJã=-œ œƒéÚ’âBx5c¨GweÑï—­s ׿gk[=Ø_½ íQ˨\í •[$ zŠâüvŽ³Û˜Øí`FWÐüWùccÇøMmë^#le#\ÊÀ)¸½…rþ»pãF¸’$Q»up^2jì^uÌ„®I9ëJÚö±<ÄÈ]$7ÉÐU-Q]2ù§hŒ…PáGcT£d ž½„ ’sVN1^]oã[ÕÔ7Î?pN ú ô}7PƒP³[ˆ2‘Éô¨å¶ã¹uwtàë\OŒüMs§Ü-•®SäùØW]ö´Œ®G qšæü_e¥ÜÂ%¹“Ê•W}hŠWAà]MÝãšì4ìßuv¡'?Jð¡öîg·IB)âEk®ÐW{ æ—ŽÝÛL‰“•ßÔU_‡°q=Ás¸¸Í\G«-ÖãŒ?­[Ñïu(4‹ˆ¬ lùzÕòÙ ­ÏUY‘²¶qÖ¨É$Í àžõæZG‰/´›£æ;´l~u~½kÑí/ò$9 ¡ÆÚ•rÔP9$äó^kâÛ‹ßígŠõj~UìkÔ’L®q^ã RÞæàÙEéÃcuÜ$OáoÙ["A3y=±Ø× CQžH¡S°›=ÊþZÁ&¶}È85žXi¯ATô]v=N/ŸlR)Á_ëW5MZ .’b ˜ùSÖ£T+¢ t 6hÊ4 £?ÚÏXM+íy”Æ«šf¿mi$ïû¯+—Éìjåž§kwd×1¶#ÉôÅW¼FðT°.¤#Ш¨'ðYBÆ  sÙ“Öºy/!v¬wnNÃX·¿·YUÕ 6“éG4ƒC™»,WÌ„¯»ð¦\øbö/æ&Á˰sÅu–Wðß4ÞCFp} UÖm®u!Poýç=¨R•Å¡ÌÍáËäE–Y”ýÒ‡šm5”ùV+…Ǧ¥wvÖÂÚÎ8CpŠK#Àù@Æxêi¹…9êŠI&áYϽ4Þj( ™¥pz×£¬€‘Ð ü¼u§˜QÛæU úÒç q¹©[©q&Þù§M¯j¾R wQ]Ûi6 »6‘1=xªSøgLçÈØO÷Z«™)ÌŸßu@P2ô~õ,()Ë[!fûì:“Zòx:É€Ù$Ëøÿõª3àÛr~[™G×]Šéâ¤ß¸ÄTâ¥Á‚« “ëÅ á;{u2É;Ôdä ʹ6 ˆã·(œ Æ8£ÝafÅñ%—Ù÷öþ4ãâ;XØ ±Ï`9¬fð¥Ó¯™‘ȧÿ×Tæðþ£ sot¥ÊƒVvbþÚFJ¢B3µºÕ‰'Œ[´ŽÀ* æ¼ÿû3R¿ìÓ ½ûÓwj1£ÆDÛ‚4r Ôïâ¸óãCÜ#­L2ÏËï^uæ¡n‚4’E±«ë¤JJû ÁÝÒŽPÔîL^+-Ä;ÔtGZuµ´`„QO÷G5ƒk>±€°ÅIÉÏ¥tP¤Ž€LXŽHnô5a¡$9ù@ì;ÔÁHlúÕ5ÌNØ´g‰ ÖM׋|™Â‹Y@S‚Xb¥ :F(œžµS!åȬ3ã(†·qï‘Jž(³RÇ!À§ÊÂæ¾¡a ú¥]Ü}ïJåoü/qnCÛþõIü«px›O.$-&ÃÇÝ‹mþíróÚ>»â¬cbaˆmfq]Í­¼z}œvʤÉïJ[XiâåJŽýëËõg[_´·Dk6â=Ez}º¹Î~ïZæ|_áöÔH¸·L̽T÷vz”ÕѺ.mîôÓ"¸xÙ?Ù¯4ÒìþÝâ}°dF$'#ØóVôK-cíbÕÖhíyÕØh>µÒæy³ÈÝÚ®ödëÔóCdZÔáŽÍ;ˆëŒó^ M£Cb±X4[öáÉûÙ¬øb+¹^æÍq1<¯­'‡ü4-ÝËaÀʨõïM´Ð4cxÄøHÙáUN+§ñ3 ð¢c•d\~U‘®ørÿQ×á@c`cÛ©â :í¼9oi ù’&†öà[øìD‰,„yÒEµé*êS õæ¼óÃÞ6±­ÕÒŸ8ʾ•Õ‹É"‹`ÖrweÅjöÿhÓçI>ë!Éü+Ìü1›«ËÎRe =¹¯C¼¼Hlî$ÂôbÕç¶Ú]Ž­­´6ÓùQŸ™‹w«,—ÄWÐy/m\;. zfºkU‚o•²ÓGŽÆ©x›D·³Ñc{t_Ý’;ƒW|5¥ Ÿ ˆïx“%sÚ“9êÐi÷s$»¿z>UÇSYÚÌÒÍ®¼­YîPJëôß%† n¦bÁIØ1Òµ"ðսƵöùK1ÎB7J9ÒaÊÌ­nîýü I º€àŽÕÈhÚ…ÄI´›z}¿ ׫j âkcÚË´z ¡áï Zéç2¬“p[µ I!8™ºÏÙ^ÊÒâö9Ë÷QzµS·Ñïu{èîµ!åÀyžµÚÞÙ+4nè$Ør‡ûµ ªÒ²º.qúT¦U‹­i6*ˆ¸E ´ gZ’àÌðíõý)m!xÆ\ði0Í:ļúŠÐ\3Ú †ØBÅ•ynsV#ϧz‚®Iµ@ÈëBŒÓÀ¦ŽrŒÒì¥ÇLu¦¾HúPÄñô§8%H¦¨Ú¼÷§m g4 D ƒ“Q¬±ïeçô¦JûOšl*—Û†Õ[ÄåßZÆTí\cZv–æñµÐ Íʨé·4·-¾¾·ZÄÖWÊUÈ¥%ž¼š†¢öñå*’ ëkOHfÖ.W-°†Î>´šE¢KâHÉQ-\qE\ұ’}ª•¦±iwpÐÅ&Yjiãó!hßqv±õÅÿgKm­y6e<‘ÐJHW;;ù-©ŠiL žõÈ‹+¯³Åk8XmÒLùŒz‚{SüL³›V'wïMñF-fiNÆ\c=â€í-ãH¡DSƒëU¯u8¬dŠ';žVÚ1Phó?Ø!óŽXŽ¢¹Mfîê}X‚¤2¦’M°;ðz‘Þ†DàsָœW´Ò'¸–FÈHJl^#š-%#Vf¸-·q£”w;aoÀ ã©¨ZÞ?‚©éš„’é1ÜÝœ“Þ°äñ6u€í¼[(*ïïE˜\ëö(áOL×1qªêw·³Ç¦ªá<ç¿­h^ê{t©®"e'nTûŸëY~Ÿ÷WNdž9ÝïB]Båñ&­k9YHÊñµ…tÚ•¬éë5Õº«äsÍsºµýƽ1!ÚéôýBÒò=¶Ç)ÆT¶Ï…ln°À:sØÔqxV Covìk~i–KÈÀ2j¦•¨ RØÎŠÞW늅p¹Ÿ¨déð¬w ‡ÐmšŠOYj–é=³Cò>\~•âç´×>Ñ*ù‘–Ü™é]‘¯Û^â\DøÁVè*ºÈ ð¤º´æ* m#]Øèv·q,Ñ‘º ßG°ltäö®rïE}GYL¿gjn “ÜhºLp›‰Œ¶3\êÃmªÞKob­å!8©¯%ˆâ±•ˆ`Qß¿ká»KKä¹ÝÏËž RIj,^»h3¿›ž0اËáýpòä*·œk´Q±xüèo§8àÔó âJñ»D&n73ñR%¦¾‘yk+†[Šë<âãj˜œýß›ƒŠ9‚ÈóóoâEl1Áꦦ¸‡Ä¶á3±#¢õÞ¢(Áä{Ô›†óŽyÅâhóåÓuÍRîØÝFä)'ƒŒó^†‘mEù°3M$)-·,$n ç8é9\iÊÅhyšçî©Å`iúþ«ª‹íF0±ƒ÷¥lø›\m&Hk‡çæô­-2áî4èe‘v»¨$Bº@Ë«!UÚ5]4øbvdŽ4Ýè*ÓƒŽÝj6¸QPAïHNÒ+ç¾XÿzÃ’zUà”‚¹7B_”ÁÅ[\s€3éI¡§bºéÖ‘»L–ê$~§Xaå©þuÛEnUwÓŒž˜¨ÕR0ŠŠ€Vg‰ß™{ûsPiW¿fÕæqHò1PlžµÕÁ¥[ÚG'‘ÂÝO­Ac¤Af›£ù¦É%Ï|Ó¸š-ܤµ@Ûd*vç¹®2Îk­Sh\Îð{ç½v77ÊÕ®$û¨:×1«Õ.lÚÜÎà:Úˆ±×îÜYå°ÀäcQøšxžKx•Ã:grz»ªèÒ^$&‰Wÿ¯Tïôi ÖöñBrÏ.*®åªAukŽF .Þøàæ°¥`|Zœü»€ý+¤ÓíÎÝaQ÷Zå®ô»ƒ­âݲÎw†þí$Àé|Dê4YûÆ}óTü9mo6ŽžlHÄ·z—Y³xuƒK¹Ð'éXš7ö•Ű‚Õ‚F§>gó¤)ºx…½š|±7-éô¦ëZdRéI=¸Æ ä}9«zö›%Α(4dsXözÔ‚ÄØ¼&IrƒéB²™eðôñLN#éõ©|3óCp„ü®qøU†¶[] á\äßZ‡Ã‹²Ââp¬ØÏ O Ih—ÁµVÚ…ÈÍuú~œ4¸ K¹˜òZ¸ëIÒ pO.äËa»WY.¹nö2ÜF[äàÔš$´Ð ž$¿’[x¬¡9–Vù€ëZz5¹±°Hz7SYMŒÒÈ×÷C/'*¥t‰ÊóÛµKì4ŽcXÕ$Ôîÿ³!ŒX>•“ªi“i ÈICŒCWmîc¶ñSÉ/ÊÈcé[#h_Ky:‚¸ïMh ¡yªÝËá¨^7l“µÛÚŸá[»‡I¡l´KÎãëPDí„:cw­ix=Ut©®7?_Ê›ØG=o¹•wÁñs3±ä.ô¤Ò N«[ñ:\`4~kžÞ”išýµå‹Îß»>p{Wç¼¼ûq26 ƽóWôÍeÓnrÑ£¯Èè²l›ý^ÔHŽÒÇÂg¡­}KYµÑ ˆÈ§ À ØWáÛ&»Õ«²˜Áj½ã+Y!½ŽVs±“ jVÀv§[µ}4^‰1ÜÜU]/Q‡V‡| ÆNsÜ×ý‘¨6‚·,ÿèè2±“ÛÖ´<íq;n&¿0=3C‚¬¹¸µÓ 3K BF1Þ¢Óµˆ50ïní•8 ñ\o­­Î5 qÙ“À¥ðÔS`y%¾Ï¸‚{Mh3¾¿ÔNŸ¤\\?ÞUÂýkδyüEnÄœ™2kÑõ‹U»Ðî"qŒ¡ }+Ì4k‰-5¸5Ë+…§P™ì)ˆò@lÕ ýBÚÖ×3*{Õ]kT6l×?x«+±Òǥ­´dþð©ÞjãxzòïEŠå'2€8Ð{sU£BÔô›K¨5(ÒkgB¤dñ¨5MfÓIdºráGzó¯ êò隢ÛÈíä±ÚWÐÖ§ŒtÛË©ø}ðÂÿwŠ\‰ÖF »d¼†Qå[=ÅaIw¡ø“PK[‚âHƉá½E`øz)ït‹Ø70Œr½aØ[Í.¦ÆO˜¿ 4ÔUÇsÕu=FÛ@Ñ3 …UùÏéZ¶·d/ucs),@5Šžêʯ }Þ¸¬ ǨOyö¨%`°vÝ‘œp1JÝBâGoi£ø¹aœƒm€[µv«{áë»…­žAÊàzW˜_É,š„Í.|ÍØ9ú×Ciàùæfû@ É‘ýìúU4­qz—1uñ'™²Ê2UŠÿ½tÚOˆ¬uY;Wc"s^Mmd׊Z«Ï&ÒOÖ½Ã~þ̹i Ûä#výiI$€Ò×5˜ôËU¹nÀ Ö—F×­ukF’<ºµSñO‡äÕ­#uM¤¶s^m —V­—w–@ïÚ”Rhg}ã{{-IíÖ&dC‚·áÕ-§ÓEú·îÊîí\=÷…hææ<›„O1÷½ê ü7wo,³ª¨ì@r ¹Óhþ1RÔ$ÑQv±ïEÿŒí­µD¶÷‘çI»^¢Ù¾¡ª%ª»¨o¼S®1Së:TZv®+1‰°rO848«‹SÒ5‹85ý3ËCn¯6¸ŠçC¾)m0Êÿ+¶ÖƒhÞQm9V ¡O±¬¯ é‚çO’YãùÄàµ5 ðçŒdyã¶Ô ð»Ñ x••²5å>%Ò#Òî#’ ¢·8=µv^Ô¦»Ñ!yX| ûTÉit Gaž2¶ŽMçØ|؈!‡§zç¼ ioqu4²æÃ€Ö·‹¯„:t³âIhµà[¤Q™™F)ý‘õ=1pð”u‘È= ywŒ´kªùÐ!uÞ1ë^5ÁÙ´Žp^7b—VЫädŠ˜·q²å¦¹q¦øJ9€Ý#þíIíQé^2x´ÉÍ㇜(õÍ>X¼¿‘<[\ éYž Ó⻼žIãWŽ8ó†÷«Ð—¾+¸ÕnžÞxhSóëYºî¿{ªßϧ鬡"–ÅŽµ°–°ØXN¶1ˆ¸cïÒ¼ÞÉe–ýR)Ìo#}ÿçJ*ì.tÞ×/ ÷ötìÄò©|U§[Kv$ƒþ>¦8½ mh·³Q2°yˆÃ1õ¬:Q/|«¼B{ÐÚOA$s^F£ Ì'+$ >ëv5Üi!¹Ô|78ŽOø˜D§¥lxŽÅo4Ç (püq GÔjÀ¼šwº¦ÆNŸw¨Ë®ÆÑÌípÏПzô{^^Šœ\8À#ûØæ¼ïMg‡Å,Ê evàw®ÄÑ™´?5ò¥X6 )-P½µ†£ª3O-¹¹9¬Ã ‹rb#2nÇã]„β1 èÛ¶úŠæçUþÝmüGæàŸlծ±éÞ³—IÐãŠF ÄnÀíšÙµBÒï#¤ÓíѬ"Àù6ŽjÈÛéX·vR.ªŒq×ä j4ÜW+éO ‚9©lh›~NqnzRcjçrH¤2Ldý)¯&ÓIŸîžj#ó5KæSŠ…]™°F© xéJ0sÍ5ziÞEG>µ;é@¢«fŒ äv¦·;OZj¼îéL„ËzÒ4*XdTƒå»†á“H”ˆÛ`Tá¶ŒŽõcvqH³`ð(Ï’§5(ÎÑLîžôîxÀ«ò1Šza9Æiê1Í9ñ—'Fj½­Ô7JÍÆpqØÔz§™&r±©24d.={סjo¦É4A.T=Ú©Fä³Ð<øÞCtÞ: <ÕY§xdË0 \?›y§ëK5ć{ìsØö­zæK§û5žLŒ¡˜Ãùl+äWÁ¤…òÁ©ÝþQƒšâ¼1©}–á¬&RÏõ©µ]vâ-r8·l†7ÚÃÖŸ(\ëwgŒÓdEuÚÀôÍrx®FÔ'Ëlƒšëã‘eˆJœ‚Á¤ãaÜçå×ÉÔÒÎÍFwív=+¢ÁÚA>™Åp¾"°K+Áqk(œ•Ï#ßéW´?)kuË“µ^›Ž‚:‰`†eÃÆ²/£ 4Øà·µÿS =p1PM{¬^tÒ"/eõ¨tý^M$( ”lmn¿_¥O@e¶¦:ÕãUî ®Z™ZD<ªö©#»·–SL"ðW<Òe‚>^zTlcŠyž6Äþáª÷ÜܹÅ0¹WX¾²µ„EtĤƒk(¤Ò °æÍQŽs¸õÌ=Lj/..UŠªœ qUtˉ´YVO•Kaý*’VЄJ¤¶½*ðrH=«ž‹S’û_Ž;i ‚1óú1®…zƒŸ©©i b sŽ´ÈíѪ}ý*Æ“ÏJc ð)‚µ¼M £ (G*zlÑB›cEHû…©w+MW…?Zh„‘ÉÈ=fÿÂ?n—¯v»ƒ‘Âá­q÷÷ 7qgÉÙ§p9ýr4«† çñ©¼1o³GGèÌK>µ©¨Y-íƒÛ—*¯Ô¯je··¶X!•dØ6¿Öôœ½ðÜ—»I!KI¥>‰naŠ/„:š×•Ë:ä L±ƒ‚zÑÍ Ê €.Åò‰š¸ÊÆzSv/ Š@qÚî…%É76‘–~w"ÿ:OÑïo#Ž;×)oÈSÖ»ao?(öš,Ÿ3`öùºÌø†ÊOì ¶à„¨ÅQð¢_ ]Éj:ç¹®ÔD²>eO¯JS G„EQŽ”´°¬yúFÅL šÜñ—.¥d’@¹h¹ü*-•üe8aŒçð®¾Dq:Õ6<×HÔ5 +³Æ¥€8)Ž•èVÎLA™pÅyö°·YZET·ÞeÔ© ¬f!’sIÊà‘æš”›üLÎÃJ£gÅr=¼GªÇ“ù×WsáëI¯ÅÎÏŸwZSðÌ…ÀžY\*½8£›T À­á;†xÅEá;ĆæHŠ}þwzbºWÑ!¹°û Èè€ðitß E¦‚ûŒŒOß4]YŒä.ç:wˆšy" 7îÁô>•ÖM«ZÞiòÜBÙ™#Ðâ¥Ö|5¢c™[d c#Ò‹ Ck§½²ž$“w$þ] £“ð¥ÜVÚÛ<­´8*1õ­/2¼¶¬¸n¦²ðAŽ÷Íždò•²¡j߈|7=ñ„ÛŒf›k™0HŠ2àÎã;0¥eøJúU¸I /}N8­Ëâ }‘G™1çmEá¿ 5š}ªíJLG‹«0±ÄŸÜjL8Ià{Œ×§]é÷ Z4`íÎÑÖ³|Eá{‹›´ZG½óó ~…á‡Óå[»–ýïM£µ ¦†v’Ú\¥†3Ïå^Q¤3.¿n@ãÍÇ?ZõûØ<ýáŠó+K#űBÇnÙû÷¢13±ñ$FãLä â¹Ï jÖö2M ìPHr¤ú×}=ºH„„ž0zäï¼'ÔÛÈ&9unßJI®£2|cs÷P¬N­µ{WIá­^Áôˆ 2"H£iSÞ¨k2A±ŒTmoz©uá{m#Jk‹‰ÊΣå {úSÑ«—¨¢·Š_ìë¼y …ZèüW«ý–ÀZ*í’eÏn*Oèr"FáK;ýÍÝqZ$Ñ¡jÌ!Ýp£ä+C}c+óXÅ¢¸…ÎpL›«•²Ô–¹ö´\©r1õ5ÔxoÓÛÁ;ß!Q*ìÿZ"ðþÐ33¢«n ïNé ¢o/Ú´ `OãY¾vIî¢+”$ûö®ƒ_„®rŽ¿(N? Áð2»IsÏAÿꤾf'‰Œm¯\çë]í¼É‰Àfù`Ý´}+†ñlF=~`àƒ]¶ƒ§N4´*H£`ÇAD¶<öÊýmuˆï™r›ˆ5é~Ö Ô'•#-œŒ’¼ ÁŸÀSϬ9R±Ú“¸ã®+®°Ð Ó‘¸ÚT`94I« Å«é–(ÚI ½ëÇõ[›wמâ&>_™¹øW®Of.CÃpFÝs\¦±àhç úp°êJ˜» ¢Ý}o¬c²Ó‰ygxê*ìzJéI@ª­°ïÏsŠ¹á¯ &‘‰¥æ–=«nöÍoí¤€×¦Ú¾€‘äZº]r/²ÿ¬Î9éŽõwÆ×ZFq‡®HõÅtúW„×G½y]ÌŒ ØÇ°5%ç„RÕÒòy?u‘òzñMÍ\,W’ŸxKi‹÷‘€S?Äsú¿ý’ir® Ðש¥ªÂ‹*¨W9«øRÇQ˜ÌÈcs×o©SSÕî§ñ>¡ VQ;F¼a]¶‹¥®‘¥$Gs6rǰ4šv™ŸÁ{F~ðêklÆd‹ )9Ç+â[kk½iäçˆe yÕ¤—βZîóÿZõ?Ã"èS’¸üqž 5— 9(N*âì„Ñ-ŸŠu‰ŸËâi#Zú^ƒs¨]SW!?$bº6°ƒÎ ‘(|ƒ•+ZŸ+bzŽnÃjƉL“è³Cnxääq´W¡j7ö,S{IÃ-zå½kvdñ‚=VÒ¼9a¥ÊòD™•É%›øséMJÁk˜z4:œžsjH>TFk‹ÖôK"éÜå³|®½ŽkÕ®-„R @y4É,¢¾ ¡Ôs´ö÷¥[QØã¼s«Ít—k_âi;T~*Ò®-5GÔ¬ùËnþ îí,RÙJ €{/AR%€ræPcÞŽmn+ŸâcW¶:•¼°ÚeÆÞ?­tÖ:4zNŠñŇ¹q†ZèÂÞ!ˆ`DÈä¢Õ9 ‘X*t9§ÌM!K=@j줂à99sŸZïî- þ6÷²"ÈT|ïØ×U›Ñ'”žiïŽk—ñ®wsfjŒåNJŠ9¯ Xät]àêDaS†xÛ‚*?èÃOÔUâÜкä6yÍW´ŸX°}‘ WgT*H­û-SÄ:ºjp2[§Î ]¹«vNå_‚înNˆ÷ ('ÒµZO:q°ð*ÄvѬ ( 8ö¢bøê+¸a%cqNÚsšE`p8·cJÅ<(¤ ž½)¥²;SdÊ‘ïH‰9Í4däÒm§\SÆ1Å'-Úš„î9éÒ¤'Š'púаäMWëI´î&”3;PÔ(?JN  sLÁSœÐ€Í7>qšNwO,a‰Üx=© …ïÍ)'=)®£ƒ@}Mœ.jºœTݪÄ?9¥ SdÓÇËšb¢“þzW «4qx¯p |ÈN>•Ý\Ân-¥‰_a`WxíÍyî§£^Ù]ƒµçÜxuïUfŽ¡j:Ôc.™.=³Qi×?̲¡˜®>•DÓç·˜ÝNIšA“žÃÒ³Ô%¨ÎîÁŒvP‚y*:÷«€ªŒwÇÃÒ@0€zê ºŠâÝeG¡jZê ’,î2„aîEN‡ Xš·ˆ-´Á´~òAÕµ?ûzÜhÆür£ëéF¡sk*ÃéL Ÿ•½kÃÄ6·Ö¯ Êrš}–»e~Ì!“ç^6š,!¿ñE…Œæ?šGS‚t5±ÂâÙ&U!\g ^m¬Cx‰Õ{¸Ïã^ˆŒ±Y -ëŠʉªZ®ªÖ~gïGj×FÝxÅršf,Z„š…Û+6ã°)í]G tGažô0¸üqÅ<6xéÅC%Ô€ÒHOsÒ¤ŠD–/1*ˆô5#¹*¨ÏJÊxjºÎ˜Á"Ÿ¼ „ô¦+e郊rpp~µy{šœ$ã=( lëŽüU ¦]ùê.MAW,Ìèsm°Í ©˜Ü=+†Wºñ‡Ú.^ d$*'ñÁ²²×-µ&µµ’eÃ`¶~_­W.‚¹éz̓]é3Eß#§W?àçO7OwŒ±)ö®’ÅäŽÒ(îÉ2ŒïVŽxÀëÇõ¥°îp^5Ò.nµ8$¶·gV\µÜiѼ0Ç´«$`c¸©TîaÓ9âæ¢ä¶47t¨|žÝM,‘…¨÷)稨ÚUFäãÓ4€{gp¨œÀr*Bê[ÍG$¬€Q@®,· o<’* êMfÂY¤  ÄÎpkŸ:ÈÖµ‡5Æ¡âˆåšgÛ™À¬ßʉ¯@%A"¹Ø Žj”A³|xùú½“\ôØhÚìz¦šnÌfÔàïïXZLJ­®g¼…ˆd°`½¯ÚCká9á‰6ª&h•˜É¿¶ìµ–ºÓ ,ï°»ù×5áMîÛ[‘§‰‘ô<Ô~@d¹“'h¯@ŒAN=}ê^šßRo((V©#ÁR}j)Ý#‡|Žv¨"¼Š{W6ÓFø=›¥JZeî<úUSQ‡J²’yFð½õ4–WÑÎóÈë†éXw“hÚ®¥ýsrò¶íÞ_AŸ­ fÕÿöŽ™ÃDÑ+.âÒ°åñ‚òK}:Ù®¤A–ÛÚ­xžñ4ºC•Êùq…õÅaø †åÁËçƒßU¥ÔOˆ·0ܪIa´¼­Öº}ÅÚØãã“*zWã_°<éåŸô°pÊ®«Ãsé6zm²C,âE°Fæ4ÚÒäõ:µÉÏ`j'ˆ&ÉɬíkÄ6Ú ¹–G &>D^¦³4Á­\5½Âù2uPO_Ò¥+ŽçV$U`3D¬„uÏÒ¹=gÅöº^§·Þ$üä &¯â[k+AwnêìÃåSK—¨Ó:Ÿ"¤•>£¸yTâôúW?áÿ®µbsˆçO¼¾µª—ÑÀ%Īˆ;šM1óq Æ lsHCäÖv•­[j’ΖìJÄp[±­Á›äÑkË1…ŠkXÐX. @Fy4 ãÕHæ™!f©åp)¸>gO–“E …½>3×Þ˜Wš\š@HÁqQ2rµ!'m1™³Åæ?">IÛÒ…M>$TŒc­"¶Y†1Hf¥¾éJHÈÚ¹4°p;€ri®I æ‘·ëE€—Ìb‘FNEFÿ2Z–<€1Ö€<å~õJ*5ÆjR:U’"œ5H $T`sR®OJ`+68<Škr¸Û‚:qUu &ó˜ÛiTfé\׆®®ïµ%žáÊ"cðy§m.&Κud*÷P:ÐmíçB^p݈ëT5›û‹k›x-b$Hß3ãµjF»#œdû].#X#A„zÚ•àVPʃÌ=Íe^x€Xj‹fÐnS·æÏ¯á[A²ùÅP]&Ü]yë%có·­[xH‡r:Ôù+Œ}iNOó§p±…}¡[^¯œÁ·îõ5fÂÆ;xP Py9êkDõà hAœö¡°05Í/Ý3#¦*X´±c¦=´,I”Ÿß´è$=©›r .ô4\,sö:4Ún›tùß4©€SÐtË›I¦¹™vá×]x€áFxÇ”F¹lSæ‡Ó4Yî5=ÌoJå²zžk¥»ß.#‰˜|…TúV¤¨=*(.[Þ“Xóˈ/ô‹Á4›•‰;\óš·q®\ßiæßËàæ7­vÓÛÃsÉ¡WOö»UÒ-DRCäâ&ûÞµ\Âhç|1q…’œ™›ð¤Ñ_~¹s7PÛ¿tqèÖöp´p)Ãsü¨þÌŠß>T{KŒ1¦å¨Î’¢]~aØîþtËYÌ~%f \ù„qÛµtPéPY|ÐÆwäŸz4Í,îå‰g,Jç°¤šþâ8|GHøXÊäwˆfŠõí–ÞäœéQê–kuâ6·S´`dþµ¥x~+„¬K¶8ÝÐSvÐ,`kd$¶Ð;s(#ÒºË;¸$Ú‘8c´+[Ò&¿¼FI!Ï¥hiZX0îsŒšWV ¾)rÍly¾ måœ!—ÇáÍE¨é¢í$„Œ¹åO½sVƒTÞÊ0Á}\qøRCc4yR-VR¹Ã+m¡°·º»žh"ÈGlÉŸL×U¢øz;Kw’\<ÎÍéšæ.c»Ñu3åä–$ŒŒæªèV6õK(ôí’0ÄñœôcUô&ÖóG *±wbÙ§jsÜêI2m‘[s(j†“©_ Sokvö¤£¯Ó¬£´¶1B¡sÐ÷®GĘ:âÆp~è®»F’á­T]íYqób¸ßÈÃ[’R¤÷(†ãf†§áø×Móà]µ‡oeŠÆö0ßêÓrûUË]VKý&äJ…Q!#yèOjÉÑm¤6·Ómo+Ê*lÓî„RY¡º{‰ņ”+з¥hXéw—Z\ÊF!oœf©hóZ[ß#Þ®äÆÿ>õÝCqk=«}Ñ“8¡°<î=&h#r®ß/Öµ4}6áu¤ŽRTÆ71꾯²Õ™`d2×Má‘%Оús–”SoA[S_*¾#VÆ1³"´¼U{r¶ÐF‡l cïŠÆ×Ž¾ÄŸâQ[ž(ËèÐ3uÊš/ 2ï…¯.eÓ3?!8V>•ÊêšÞ§ª7–Òf2Bl®·ÃxþÀqê8ï\ÎŒˆ¾%*çj‡n)-ÇÐκžüÃËœ +fº{]FçFÐÕîçoõJÕŸâÏ*e1#`8«+“ÌÓ¬Hk Ãò§¸jZ‹L·Ï+ž0xúVÕÿŠnK„Ä$¼HàT4=õi¦l[Fy³ŸÂ¶|go¾l!L8\u"‡m…a¶¾-k} 4ÊZlpC ø¥þÚÉxÿ,¯•>•oD´·›ÃM*¢´ÛXr:b¹ß-±Öí@Ï÷5#±èó³][I°ØË´^]i>—~TmÈßzƒlghù1Ðz{Wⵆ[»tF]äàŽâˆ0¤­ßˆnc’ý‹[AÈ_Zè5Ñnt‰•”,{@Z±§ÚÃakhÜEgø—eæ—"[‘#&7mn”¯®ƒG¤ÛGy¨Å ¬Dd“Çzô›;ÌÒÚ×á1“ßç¾V:ä ØšôÝæ´œ¡SŸÊœ·å3Kq|"îÚÛíã­z]½í¶›¢¡a媨È^æ¼Ö| aÙ[ÍþµØø–Ø'‡ã`À*N{Ó—@E-SÄš•ò}¦È¼v±¿/zl¾"žûÃ@C4Ëò»žþõ[Éyo.T…Ž]ÏZÒ×4”Ñô)ç‘€,)lìÔžÆÊæ8íÚY dÛÞ›£xŽùusß2Ìçå?ÃÍ/…¯ [¶€¥G'µiè:BÞ^ɪ‚+¢÷úÓ{Š×:ø¤S4|úЧªjI¥ØËpØÞ:g¹ô«IœLÛ¶ ^I®Bw›ÅZˆŽ2E”GŸr*,AáýRKý?í*ŽIãµÇø£Ä77f+9¤û4dä§s]&»¿IðãˆNÒ]ÞÕ—¢6›y£H]P`fQß4⺎æV‡âûûk„†y<øØá·ö/Šõ›æ¾cvŽ!ó!^Œk/Eâ ´BX…ÍjøÚµÁ\màÚ«KÜ-q׺þ©7‡¡ÚŽr1$ƒš‡Âú½Þé,IgYùðšÝµ!ðªŽZ<ú×=ಿÚr# )’†…f˜štÓÚëË$83ù„ úçš“[:öˆ’é‰üÊAªóJ-µÆ“' 9"ºË 'ñÔwS [x~繦ںb6ü?u;é°=À&M¹9õª>;—GEþûÈVÔŠa@ª dqY¾#²}KB˜"ï–/™EeÔ´s¼ÿ‰%üy ÍšÆÐßËÖ­œÎzQ¦êaÃ"H¤=ZÑ4å–á.ž@ 6Bî÷­I±ë¢xÜgŒjÎÖ¤[à@CÇáR-ÌY©’DU ósX²j¶º…êÛI¹U*ËQœf‰}wn.`³BÎê9^ÕgNñ>©¤\•¸Ý ÏίÛéRø$©Õf¨ýÞ9­Ÿið0]Ƽl3·¾kG$ôbµÙ'ˆ¯ßYðºÞZ–XÕ‰uö®wA¼½[»;,òó»²ûþ56›y'ü#70±ùS8úÔþxVk°å˜Š°1þ°ÔP݉7IJ©Qž Ö×6úôq+*Ê>lòkÓtë‹Ync‘Y—ïÝ+Ïöñs\6K)Á”¢î4οŖhÑ"2˱ÏÉxrkÑ4¶ÖXPý[ûµÑx²F¹ðð‘\f²|Œ×· Ê–ô¥Ñƒ3µû/°_mšC$Ì7=+{BðÊ[Io¨=Ïyqÿ׬OÝCu­³Dá‚€3ô×_¦êú{ÚZ#J ²¬`wü)¶ôS¿›ûSÄr ùHŒ1äÿ¥£hïTût¡±ò7™¾•—®Å%޽?™GÞt"» Å6—ë%|¹±ÂøqCvZ ã|IgöMrhüÖ`HlŸCÍjjzµ†ã¹.ÒHà“Ò¨øº1ºÛ›q*¸âº=Vx®<.6ìñ¡½„QðE¬1¥Ýù‘ƒD0AéR´×~%im­ÎËHÎÍÔÖ}w\Z[D_Ì]¼v÷­ .;™£ŸNÓxw?¾˜ôÑh’Ôhêü=6jdÓì›2/,ßÞ5ÐC$ŠÀÉÇçô="ßL“'÷“tg&ºi^1*9ÅfÆYÎ73óeª;WóPgµZhÕ†æ b¯"•›åÚ:Ò*>¾Ôü¸æÆ'9'Þ‘°Ç4uÎx¤8 òõ¤«÷yÂ'm/$ œÓ»P"s&;ô¥ÚüñÅ7Î>pM„{Ô»‰ cxcƒRŒ a`½:š±4ÓÄíɤ-ŒZ,pFil´\A·æ¤S·œT|(ÇzVrØqHgž'JLQóqOÅX‡ŒÒƒÆ3¥47`SÕ¦“uå’ÌQ›šæ|-s¬W“HØE ƒí].²íý‘tÉÁòrÚ>f™¨¦3ò ~UKb$niêjs´L€2|Ëô¨õ_­ÂÛ¢GÈ-ôÅdøj%Ž;‹²€²®þi6qjKs$ñÞfI¡¤"7‘ßø–˜lŒNî€]M¦±iuxöð¹.ƒ$ö®Yía¸ñˆƒåúaTîb—HÔ–H˜¨d>Þ†®Éˆôi%XÑ™ÙT(É&©Új–×ÒÉXÆy®o]¼–xímÙÊÇ Ȩt{I#ÕœÚ96ø ÉØñüóQÊ;¢ÜÀó4+"Tr¹æãÌ@>•ÀiÒÞYÚ!æN7§Ö§µ¿º[g¹wwA÷Ý£”è¶@úÒ¶>o­qVúýÜšÎçÎÆllô×­Òlgoºy¤Õ‡qé7™)éS)Ç~k…½ñæøI„6õ­GÄS[]Ú±å:†$ÿ­>AAo”sÁïLÞÆx8èkÔ¼L¶²Â°ªº°Üùô=1OÕµ5])/"ៅö£”.;Uñ-½Œ¦8Qe‘O#uU“ű¬JbžC÷‡@?Hltù4S!Ti¼²ìÝóUü>4ѦÌ×>VòHÃuÇŠ|«¨úV¨š¥¹•P© ‚ ­›$™¬˜ †‘l :¢9Ü ïZbâ0ªæE ÇŒž¿JŸ@$àŽGJ<Å ƒ@`GnznÒáô fTZ[ÿoÏxàÙ@² 8éH€sŒR©#“Ó¥ €€}Àu¤©»HéR cÚ”=8>´Š@½0À'PÀ ƒÍ[bc¹¬}cRþǵWgm¸¢×U,{GN[X¤Ÿtˆ¬Ã¡5CCÖ.5dšáU# Ö ²®Açµ@¹ZâÚ6£( È©-¬­¢¶ A1ÉÛÞƒ î!ŽjÒ‘Ú† ›™—’1YΈ·æ',)ù”÷­¥<ñI4bhÙ ¸ ‘Eì%©ˆäx´}=9,7²öÅtiëkd°§ÌЏ¦hú$:l³Hd2Hü—nÞÕzþþ >ØÏpJ©ôõíNâ±ÌÝøIîä@é~ø­-3FþÎ…¢FÜOÞ5cK×ìõ 8‹ cÆEk4Q™vþ>´›a¡ÂxŽÙ.5›[xyvO·&ºxm…ªÃ`(ëXš}¬íâY"?˜+k°ˆÇ"œTtÁ§-€ó¯i3Awö˜ƒºÌ#Voìo_@·Ü²3'ÞCÚ»É!Œ€¥ÑÈ&œ±‚JãŠJC±ÉxbËR‚i—o‘Z¹»ëy¢Ö‰…ƒÈϹ }{×§ÜÂÒÛIðÎ…PŠò×kÍS‘vʆAæª.âdúÕ…ÜkÕÓî’C†ö­{kí¯FˆxΪŒºçˆ#ŽÈ[€ÙÈvÚ6–ºn±PÄŒ·Ö‰h€ó«(µ+[å†Ùdóqž†ºO¼ßØ–«p¸—‚qî+­[XÕÉX“ު^X$øó†õ€isj,¶~™Œd1ÜG½rV6·WJÖÈÎCƒ‘Ú½HÃo=™¶e2›6Ôm¾šûmbÚ É4Ô‚ÄÞl‘ÙÃ.. ïœW›ë¶w6×ï$¡†öʹ¯X0$åY‡ U-OH¶Ô ʹU©R³SÎìnõ}BgnÌT8Åtöúzi:EÒ;“3ǺCœóŽ•­a§E§¸H‘QGqÞ­ß[Cw‘¨a¶ÑÏv<£O™¡Õ`hÎñ^³3D¶¬òñ…$šÊÓ<3¦ÙM»kI&r v­»›Hî,ÚÈB1Çj¸XñùPϪȶã,Îp+­M¾¸Òg†wº…{qýk¤Ó|5§édIaß»·ZÓ–Õ$8üqCÒ<–ÆîûD½+âCÁR3šëoï.®ü+<÷¨ŠÌ8?•tßÙoÞСqÐÖˆíCh—;NÞŸ7+“cð®oÞI[>\G;Gzô;!´>YqÐV'‚m!Ýã(ìýÇjèe³2£`÷¥&4ŽSÄ3Ýêz…¾—l­å¹ÌŽ;WI§i1éöqÁ¨*:ޤ՛[$…ƒìÏSW6m9Å&ôŽcÅ»¥ðüñ²üË‚+ðŒ—7²y€ùJ¿0þõz•ź\‚Žª@㚯™Ÿú˜ÔzàSR²°Xò‹*_øH^Òrªö³âË[‡†ÍãMðĸ'¾k¸m*Ùn^äFY>ózÔ)>^Õ+Žô9‚Zœ&©q¢J¦àGmåUÇ'Ú¨hºtó]ýäqw#«s^…$°m*6¡òШʅ=±B˜Xà’Á.<@Ö¹%<Ò=N3Íz•„iid‘Â6" z×%¥èsÁ­Ou8%¶Ÿ©®²@ Äcµ•Ð’u#L@;Õ‘-þnó©Qœìç§Ösx6cy5¸Ï=×|-ö‰e¹²o™ŽæSÒ¹s§j6òì0Ê¡NkÖb…cÝ»£zÓ˜"°‘yÅZ•´ P¶šœÒlò§bÜ`ƒŠìôéúeÄRJD×)Œÿt×gG, °½iª’FÈÏ­AcÇí,/bÖÖÒÜŸ8> íZëux&]YK'™s#ò[ðô®’ö+m* µ·ó%ë”\³Vn…§O¨_I­_)VÏ6\zÐåqX¥†dµÐL&%½ŽÆ¹Û Þ™$˜‰!‰÷5êìS~SÚ @‘‚¬2Œ8¡M£GÒ!³·)’d\;µÍÜø.GÔØDä[†ÉcÛ=kÓEÌKŠU‰[vWw©ç¶ÂHáüA¥ ? I çlXn{sŠÎð.BÝå~FÀ9èk°ñM¬·š Ä!yN0£ØÖoƒt‰¬´ö7јٛqè*›ºŒxUPG=”EžGùÔuæµ¼9áÈ´ï.[¸ƒ\“è+­t7 ¤v4ž^åF ïQÌía´ŒígI³Õ"Q&œ´Çå$úÒ°ît~PPäšx5’(S&AP3øV¿Œ,î5³û® OCBWØwGHp:žÍ`k~(‡G-•IXÊ=+Fæî+xÌÒ>IéŠÂ·‡Hñ±öøÞhþð=(°®Mªx¶ÒÂ4ýÛ4î›±Š¿¡j«iÞt‘yaº.z×ã˜/-Ù0 ãñ®¯Âª?°íסeëMÚ×z=ª›@”±ó÷bê~ °ÒYRiAv8Âö«–º„7Vâh¤Ü„g>”‚æªgðÉn6ð=kÇÄV7WRÀ“®ô$}iº–»ce*E,À» '4X.l‰H0y§±ØzÖ5¹W”2±Éä}+E‹ù`ñšAq%¹Eêj¼¯L‘ÖžÑ"å‰àuö¬»‹ä»[°aìojv­©G¦Ú%ù‰?(®v¡‘ŒÖÄ'ª°<öâºMGE‡T·ÜpAZæµ/i:e¹’y¤ü*ɧ12Eñ­º§ü{¾Hãæ©¬¼mfOúDr ¬-?C‡T¢™°O¨À­GðF"Ê]’øû¬8ªj"HìôýfÓP‡u¼ê}AàÖ‡™¹ #×Ö¼eïDÔs–VCÈìEzQ×mí4˜®®\+2 Üæ¥À|Ö.Þ– ̹ÇjµöD1/QÜÖ~•«ÇªÚ Óåeê­Ú“R×mtÈ~ÃÌ íAÞ—(9\Û@ª˜HŽ\n…ã$Ô.͵ÊØŸ“ÐÖÚxƒO{ófg_8†˜&jLAˆŒfŸ È=+ŸÖ¼Kg¤Ò]Ï#tDíWì5›[ûE’ÞPAìOO­$´e©ÜÙŒûšrìŠ!çoé\–£ã[{×·™á¤nYê÷Zi¸YTÄzž€S·Q\Ö·%\óíNó¸by¼÷Qñ«YÜ4zz‰#S†fõ­Ø§,³]NÆQÊ©éMBìwÐöëK¸nâÁ u=1K,Û~•å~ —QRU¤û99pzW¥–.ÀwÍKVvܲ’ëS(Ú¹=*8”ªÔ¡‰â)Î)û€éÖ¡äŽ)ñ£Z•Æ+9+H “DœÐäÐ@lîíK ŠÄ’HÅ.ñ´‚x¦(Pq×4˜Ç¹!^jOF=i„8¥Ï#42œäô4®J §‘ÉàRHäñ@†„ÌGM$(P’犗vRÆ1ƒßJ]Ü`Tg#¡¡Cu JpÏ$Ó;R«¤Õ’‘Jy˜ÈæŒÞ€r¥^âám­¤º*îÇ­TÓµˆ/­žu;B}ð{SJài»éL‘w®MU²Ôíõ$f÷ÔRÝßÛÙ¨iäòùS°®2xÒxš”'§jšÞ µÀÅI£¦àASÈ©3Ž:÷¤ãÎW“ÐЬyaÞ”0ÝFîþt€lµª?+ʃÉÕdqŒâ±5Mu¬oâµòK+˜Žüšh.hCrIÀ÷´°ùkpH9`hÃ8ãÀVçÞ) §4\D_Ù°-É™cU~¥gøžGK…Hß&/­n‰œ‚èk+WÒe¿¼·¹Ž@¢ä54ƈm,…Œ(æ`QñJ±[{q®©H!CÜsŠÇ×l&»6‚VMÎ(¾¢(jñlðÔAz„þTh«hL§£9«Úý´¯£yQ)/¸d ·£éëi¦C>|e§}Ç0¾–MD…8ƒ©jv½¦¿ÚíÖÝ\¾Ìî+´ˆzc×ÃÈã#…£›QØçt» mØ]ÝÉ#N…ÏÊ)º¨i´©\)9"º9aWg§CJ¶ÈÖLƒ÷”÷©l,p6šcI¤Oq!+´eéV¼?ÊÛ\ÍÜ aTô5×ÜYE5¿—°# ¥µ±ŽÚ|±Ñj¹´ V‰¨Éeu4>[1Ÿ¨5RÝ™µgb§%¶œvú×k‰o³ÏúÙ:ÐUKoGfD¬L’î,ÄSæŽvy$Òµ6ß”ž}êî·©ÛÝYDb·6ãìk¡ŸK·¾R³Ç’:£>€“[‹uP›O—0X¡áíB/²´ ç'ÕODÌšëȃå?JÓ¹²‡H´ò­Ák©¾QžO=À«úF—ö8Â<Ã÷zmõ Ëæ`[ÓW*"XFÑŽµ—ª=žºó2峕½ °o¨HmAëMµ¸hðËûqI\j>hU ò›zT”ìciúdڌʑûý…ojº$v_˜ù‘¶à{VN‘¬¾˜åv–LüÀu®ÄFëÃ>n҈⩽D¬aèú?ö„ò=ê!ÎÁëUt[U¹Õ’6fyÏò­ß 9]òã;FqXuãiú§Ú6g xüiw Ö©ɧÏ'nÃ×¾+Ï-QåºXã}¼ãs}+ÐoîŒú|².š<í?Jâô;Xîõ ’©ò†Y³ô¥dz“YÞ¬>gœÌnóZZΑwýÅÆåàlô¨uæu˜ãHH¨üë£ñHxv)ð6‘þص’÷M¸¶s˜OÊ3íTt[7\X‰Ç–Kµ|1rØÌû¶ˆòÄ¥fhº”Vºù¸œb7Ü ¦‹,[1ϽL@l@:æ©Ùxi¥Ž+Ÿ9<® V¯‹f‰íaeÉVmËŠv«iãO·Ü¤™ûžŸZWÐ ÚË ±Îï”?*/áNд n¢ŠñŠ*à·ã+Èe’+~DÑv#Œ‘[¿²}. d Tr¾ôt=VîâyJµ“÷Œ¿¼aØW¨i×Z\êeã'*ã½h]ßÝiÞ#žrNìãæEVÖ/&¿Ä¬“ž3Ð"D–77ž/qtÙ æq鎕‰áD•ï%h¥*¡yÏzØÑ5d¸ðÕÊ\&ÑàŸZÅðÝô6𬡸 -!3]©jXå<úÕ›]Qìü%‰¾p6/µWñœèÉj€|ù'ðÅAk,søRkd–0\¯¾hµÐÌ¥1\ÙI$îÍvïÅtZMýž…p¥Š‡RcÍaøvöÖÖø ¸£ ÿv®Õîmní uxŸ»ô¡è§[Í5øŽÝ×Ïl®M&­c6v°Ï!yÌ•6‚Tk‘î–!sÚ¯xÎ2š¤;±Ìc§ÔGQá¨&ƒN‰gvgqœŸJß•$7ƒÂú÷®s@Ö#¼€mFJ…$ô­=oTŠÓKó_p/Âýj)3#Ä~ uD±³açKÁ+Ö­iºQÒ­Fö>l„3Tü1¢–™õ;µ-#ó{f·5WeU‰ëC5Ë:é’¼÷›2•ä÷S^_ß2ÌŦb@Ýê+Öá¬QOoZóïKo¹çÛ¦Yç¹ḙSÃW[êËâä®úBÛŽõç–z´P_Í|ñQkv/E€¯lØpET“{ ;øÒÞ3e ØùÃã&©kÁ|-aq33Jƒj؉¯î|K©D† CšÖñDÑA ¤ °KÆÕ>•>£¹WÁ•ŽiÞ»Hþµ‹¨Þù¾#if‚Hp¾˜­LÍxm„˜R¤à/Z¥â>k jGuÄlÁ”Ž•VÔFž™¢Ksý¢Ñ˜b 1ëYž ´¸Óu–”|¾cez×]¤x‚ÛPAæ*‚IéT¼\°¾š¯!xÝÿZ”ýíG¡F u›$¼{‰w^¿JÎÐã¸þÐkìŠÙ}k{@Õ¬­tèm‹—•v(çšÀƒQ[/M3©—;‡~ië{±®xb(´öºµ%^5Ëäýîj•­ÅÄ>¸Úçim¸ük{RÕãÔ´äÓìNùg኎TTgLfÐæ±·PX.åõ<Ò¾–œ°ŒÜéFÊÚ#%Ã?Îç¢û×]o Ã§xjxÜ,™obkӵ˽*êOݨᔊo|)%ÚÄÀmåO¥9îšr^ ¶êîOÞTÊçµjxâ#¥ºç9rOµsºüÚV°’ĆV<2¯Zèí$««gr¯Jå4X,noB^Êc®ïS]·…ôËÈ´Ù­õL ¸T=«YðuÊÏæØBeŒžTö§f ž‘sfζ°¼dØòknhŠFGÝ®/žŸM»KÉɾ•Ù]Þ,jAêN+7¹KA-æy ô5p`(õªvÑTUŒ3I…‹c)QÏAQFHZ sëR;í“ÇQH^†•¹S·­(ª€i€‚5Ï4ôQžG0u d L¹ˆž0zö¨•v9$òjMß0  [îœS'ŠÆi0TæšÃ4š7Ór6œšLA·ŠxàsQù›c¤G%y g9j”.05FµqÖ­1Ãù«´|½éAÍHHn 3”ûP V gÓ§‚deÂþuÂZ‹´É`¯±e;[è+Ñ&‘bŒ»¨I5ÃÚÜÀþ%7â)$=kH10Ñ$’Ç\X˜ýâTã½3Q”_]ÝÉ$Å]¨­;eŽïÄo,* 0®2;šÈ`›U)tŹàú犢K/}q‰l>dÚÅw/SV¤Ôõ+‹ëD@ÑÄTz‘ëIâ0‹o á—vTƒ[:t+ö;weê£iJ4[ÄZ£Ú[y13 Xøì*¾‡¯™å[K€w»ÜÓm%·¿¾Ô|ž1Ï÷EQÐ~Κ¨>‰ŸLÒIßÔõ´²BŠ7;¥s÷Z‚_ë6s ò‚{u9«¶kÝÖ¡êZL§µeêPˆõx“nåEC:˜µ›'¼6ˆÿ?÷?Z—W¼šl²–ùº.:“\Ž­fö1ÏÄLr½\׳.ŸipY°¬€ÛÒo#–Ú2Ò«NW,£­jAu ìÊ3/Þÿ åô}*KP·®êÇòÖ«h_h—P»x[æÁ${ö¦Ö vbDiJ«?Ê 3Ÿ4ÆzW%¤\^G®¸i bO™ž‚¥ºÔ'Od±òÔð£¸íSa¦vjr£ŽzR;È Ï¥qi¯]b3&ñp#­?êòÚ[F‘üçÐQËp¹Ñ#‘ƒëH>þI® _ß=’Àia÷ÇS]Nƒz×zb»†>ROzh.3X׌«on¢Iß 5­lÏ%º4ÊR2ÀW'âxZ;¨¯b8ÇzŸFñ1•…½ÞD‡€q×қЯ©ÔäŠp<`Ž*<„MÄãÞ¨G­YÍzmROŸ¶z‚®jž+ŒUg¼¶Žé 3 •ùAëO{ˆÄ…7¯˜FqšvÇdníLžXáÃHÛAèZ¢žê;kY.ászå­ï¤×u3æÉˆ“æX½iØ.tka¼7¹/#ž€Småí×x>ƒuR»Ô]“ì6<ÎüDËÊ—ºV ¯;°”ã<¾€ÏCdÙ#SHccŽ3\¾¥¯Íq·±Y ›AvQÒ²-5mN݉W‘ñÔ?jç¢F¸B9¡`Vˆlv®wÃZ¥î¡4Þ~0>R+¥ ÆAÁ©jøԅ‹ŸSEÍ¥µÙU¸Œ:©ÈúÓ¤‘2ì~P2k™Ô•׳£ƒÓŠ|*¡s·ðÔ…cÛÃVÑèià˜rÞõÏéþ¹Žëϸ‘hÙLwÅzœŸ»å£™…ŽC\ðãjÖÊ#_߯>]Ý 3Ã>“NIåCHÜê1]ƒ! sŸZpRG3ŽXð8žèOhB)9qZ>v î`rsŠêW pšÜñG0Xâ4Ímzo/@û¸4ýkAŸXÕ¡€&û×fóm f¡šÌJEÀgiú%½…²Ã £©=ÍO¥Çyk"îØÛ”V‚q©²m€~(¸ ·¶B9Áô üBDU#<Ò‰IaÉÈ©LêrG\ëöp‹ÓÆOàû«ÍVwsåDÍÁMwP±(lÒ¦ua‘Bv`qxÕ÷Žäžâ•þÚ0Ê\H1Ôq]£9Ù€9©Ëó½G3 Þ™ E¥Db‡'=I¥Ö´;}fÌDø)ùZµÞa–Ç'Ò©I#üØÀdæ“lv2ü=áåÑ™ÝÙZSÀoJ»¬é)¨B|È·öj¼>!ÓÄâK–Ú­øßн(æw v5½žž¢Ö91éÍG¨xzNÌG3²²ýÒ+¢)¼ëQ¬DãCadrZ…&Ó/âgYd'¦*m[Á0ÝH%¶+_Ü×gXÆG_zc±”`äô£™…ŽwÃþJ‚Aó°åÇaZ¶¶A'c·ŒwïW×jŒ´#XŽæQ´rMm…Œ-CÂÚ}õ×Ú\u÷­k£¶ò0ÚG›wâ­*Áö<ÙaÔ-héºÍž«›i !zƒÁ¤î- vº…ÛIº)bI5zâÂ;ŽV_J³"+ðÇ4ˆÞ^}=èw‚ÒÙ l`*J.¢cŸšœ$\dñA|°Ü~”P˜Ár3L“OózpsÍLò0§/„÷¤Ønm °lã"™ilÑFQ¶‘éVD£ÛÎ?:h,d÷})ˆ`±U“ròzzTªP Ö‘ª Çÿ×MÜÇ ‘íï@ÅhA$÷íT.,D­—Èæµ2¡A-†µŒ—#½cVH×oAÅZ\íÐmÁàf•ÈÛÇ8¡ˆk¨“6*eàœàS|™ôôô4†8í žôÌnÆ)ÅFNî”ÎÄ-»m8ÝE1XžZy¤”Qó/Z_áéMnZPÇnæ€;¸§8$H[Œãš]ÄÇÒ˜Éð<Ô†¨;œP€u§7$Ò;NqOÛû°Ý(Î[‘Nà®Õ ŒSxU§r{u¦>vàUˆPF3IÞ”) s@†MKÓr7z×%«xfE»S§.cnHÏÝ5Ù}åâ˜~÷¹ªM 0t½?û6 ®0Äå½eks¾ßoïNH&ºæŒ0à ûR4+)R@ÈèM>aXåo´™cÑÑ yf³î3éRé67±ˆ¥¸••îGÜ×Mä©l÷¤xÔØsEÇc–ÂWñ$‰ô‹;‹2½ùªqÛ´ù†6'kvëŽõÜ”Âð‹œÍV‹O‰f’o, X`·µ5!XåšæãLÖžR7«uÏñÕ^úõßUYÞ26pÝq]PÓ¼ÙãgFI9ëQjzu´·Ìø8Àèi©j+ºíÊ]i–®ˆÃ÷œ)ž)º²ìÒl¢aœœvÀþu*#êúª¨D[‹ÈÝVï¬^÷0 ÀnÿëR¸X™.­æ²AS„å{¨¬¯ º$׭О~µ£‘ ¥‰„Ò8ùœujųÑ'ûtÑ;ºÀŸy¿¼=(LctCçërßx1úU¥ÿÂXá†åê£Þ¢Ð´É~ßçä¤q±ÚñTÐG0ñÎc!wmÜzSd‘H¾gŠäp¹ ~—WónuËxŸî¼{Tf+‹­zyb;J¶ •6ºgŠúÚe_º¸ ;·9¦2¾µj‘ÜZƱ€­íמk¨˜¬’8HTÀ'Êk75´Ó&ÁŽ¥u¶ò¬šz¸þ%ÊçéRî9ûƒ-ö°-Û>L#85KYÓ¾ÈËqÝcÎ=j{©ÚÏ]i¦;`q€}ª]vî,!ŠÒ08^µHD—:¤çÃP&$s°·µe4MäY5ÕT¶ßÖ¥¼µ’ÛC´ÞobHô÷­ÍK&±Uˆ |À÷4ÏÞI:kÊÈC˹J©ìqVm¡Õ%ÖüÉ7†Ý–=±éO’H?á' Ãí>ƺw‘DþP`Xó¶“`I*Æöï£1·_¥pɶڣ,i,Bý vs3Ûÿª°¬Mµ×ˆ$$ƒ±p§=èL m#MDË&ZVûí\ÿ‹Ž«µ¹Ú™ºéná¶#Îp¨NÑ\g‰6°À}áÁÝëëS©]—A´ŽßM‚âG\»þÕ…®Ëÿ±DUS#vÏ©®‡LšÆ$<€ ~•Êk2Å@øÈù€¦·ÛXG •ªÄŠ2GzÊ¿ñDv³,§˜¿ÆÙéSj†H4GtêEs†Ùo´ûxmãón2K°íõ¡-uØØñ6ªé§C …˜|ÇÚ–a§Ç Ãç®#)ޤÖ±g-…½¬6æPAð*ÅÝ™};”” ‡ ªV¿áË "ûM»y®Ã†n«WuòdÐî‚}ट¦k#¶ÓA§ÈÅ#©=*æ­º=*åK©ë`FWƒÑ"k›ÙŒnžõ׋ÈnSt.¬ƒ©ç¶}ÍýœÆ9ö¨oõtšUÔö¢[™6®ì8íÿë¦ÐFŠãnì¶T‘^Û\C"8SÈSÓÖ¸ífî_í¬-娲«+My´­pÁó·–øÈ©åÏLûL.ÞY‘w÷é³N‘l”1é“Ö¼ÓP{í?Xk‰‡/¼ÎÜTšµýÞ¨±^"ºÃ_Z9ç¦ Tªò ”Ó!ç?…r^¼½š×|ò\àf®ø‡ZþͳWúÙ~è¥kæòÜ¡Xa¿Ó4ë‹Ø­lžYdUÏ¿ä°j—qê rerùävÇ¥t^'Õ^æÊ xÔ¨cü©òwÙ麤Z¥¸žò“Œµq¾:ó£Ô‰”éÂçŠÈѯõX&Xm<Ç@Ã#nGç[ž8yV* 89ÏcE¬Á3ÃIz±ŒrWqÇ­fê:v£{â@Å™m‘Ü fÇâ+‹/Ä۰0íV¼1¯M>ëk·2`n ý)Ø; >UBűÜÖ_ˆ&’=á¡,’*ç"«kZêZÆ`·`÷,8QÚ¸ñw­OÄ2»ì`Y÷tÅLc¨&hx2ââãV•æ¸yLí&»ç´Gkb¼¿Ãw767SM/É·¥]²ñUõ¶¤ñ^$‡i}Ú¹D.z$Wq'hLŠ£'·C\úêpÛéÒ^1Ê*çë\V¥¨êš¤mŽ–ñ¶a¨JásÕRMà•9Çjz¸UÉÍyí¿‹Þ 6Ök‘òdÕ} ÅSÆ%û\ÛÕFUOV4r…ÏFó3)ç—{yŒƒ òÙüWy.«ÈÊ$gÒ½O¹7vÑJÆÌ¹*{PÕ‚åâ6òÇ”ÐÇ“ÛÖ¢œ·’ì… ¯3ÿ„«R‡P2—>Pb @i%qÜôé¦D…Lwªëq°’N:W­x ÝX,¡Ëʹm«;A×î,æX'Üñ’9=V«”W=qÇ<µë^âM~ánR+we ÎáVo|Oqo¦Å#tÌŸ¼e-.P¹ß‰K§î¶’ Jò'ø¯;ð†»/-¤Žò3e·7ojOøŽg—û>ÕŠcïê}¨åÔ.w8@X¶rM-½ä7Pn†@à =kÈgÔ5x¡òåšu‹§ÍÆßð2ê vdc ³ÚO'ŒÓpÒà™Ýº¬Yõªw1››v8Þâ¹]o[ºÕ¯å²±”Å#æaÞ™á]vè^½¥Æé”çi<íÅO-‡sC…ÄÑC&r®A'Ú½RÔÔ W™Ü³ø§Ï‰IfrÊ¿…>ëXÖ´Ëó3»…~‹Õ@ô«jèM»ž§óÒ¢29ÏëGñ4z­¯Ì1$c *·‰µÖ¶µ[KOžâaü=…B޶Ή/`¹fŠ9Ad<€iž\Ñ9‘[ŠòÛGPЮL»Hi@Ý¿¿=«½²ñ Þi/un»Ü.|¿zn6 š©s#·8çÖ¹¿j[iÉ lèò¿$uÅsúþ¥o«ù²³fÁFúÖ¿ŽÕåŠÚì7ÉÈÞ…ËžÐ4ýWAY$MÒÉïÝ tšfo¡Ø„„§—vïX?‹ "^N‡¯ÐS¼K«K{"èús|òJã²ÐÖ¶jÏÄZuåÁ¶†ày€à•Zº¼[HšæRªˆ»˜Õä7ú}ÖväH9G^?^õ»²Ú‡‡ç°™ÜËåî.Þ€Ópº¸®Î«Nñ†¡yöeʱû¹èERÖ¼iokvm"Fm­‚¼ûL…§Ô¢‰ehØ‘†¬k¶§j6%²2¤÷§È†zÏŠ-í,!ºnfw½\мLšÄG+¼¦¼ò])`ÑÖwBÒ2äg ­/Æ’^\’Ø"<`:\ªÂ¹Ôëž,‹M ¸Ý‘Ð QðÇŒÍÔ­o}…b V•ÈX\ý—Y•š3;–eE<äçŠêô? ›g“Q»@®ù)ì ©-BÅ+ïÝ.¸E«´S·ø½MjøÅ²ØGv¸óY[Ó#µqzÕ¬6Ú÷–¤¬EÁ$z“[~-²Ž &(gk¸÷â«•h#GÂ~+’îäÚ_È^F?#c­w¡Ôœ3ŠñÏ Éj[™á^u!'I2‘® èzT‰‚Ûj¬2ùœzTåH;¨)8§mÀzÒ.BäÒ¶qÇz ÛrQ@N:Ð:Ф×µ gŽ´`9â¡Ô£{°cÒ€7îô4í¤üÀƒJ„• ž(P¡i™! 0ÔD¬ äÓ” f9$ŒL|§Ò± SH‘QF¦&%ÎsÚ€%lÇZL2¶V…V#½ÄÐÒ˜¤’isÇ4ÑÓŠ± Óyõ¥$‘Š8˜†€F@[pÈzÔ:W‡à·s3fWå»V Ô-cº¦QæôÚ:Õ‡‡€ŠAúÑp±SR´KËSQ³ûV-‡†Ä ö‡™²” Çç]PD ·n3×Þ…P|£œQÌ;>¥¢Ìú û"»$£vóÐزÒÒE”Èò\c“À®c N9Ý D³ŒQÌ+®-š[RžØ5Å;‹ H,h\†ÊdW¡œd=ª«Ú+H­€[×Ò…+ÆMŽ“5ÔâãQmÌUùE`x“#[“<Œ{ ô(¢UœVmׇ¬n®~Ñ,E˜ûñMK[°°Ý2h¾Ä§]™W­N’ëRË3…®ú;haO$)ãf;VrxVÑnüänwmÏËšB±Vá§»ðËoFÊŒ õ²ô vÛLQ °Ÿœà¸þµÚ½ eˆ6㕈޴k£6ç9:WCF?Šˆ‘ • í`H&“Fµžé#[‚½Iâ¨R'·0Xpýšè,¬ÌV6Ë·€€bô[u lTl\`Vˆe1éw0+w‘Õã™u§Ç©+Á! “Pž· ß…®mãDìŽÙªZ²Å¿&Ú² ²Ô×Þ¿³¿Ùm²ò8íZ¶~qqö‹ÏÞJ™÷­4Ü,cëDK©ÆL#=ñ]6™aimÊÉÇÌýɪ:Î…=ú›˜‰T|ʾžÕ§_Åt²Ld_½'ª‹Þ1±gÓã¸EɃô¬ å&ÓŸM?4’¸aÞºín/7IP?Jæ|!¥g’õƒ+îzBzj 飳KUŠ5ùGó®CÅìæâãoËŽÕÛÈïæ.ãÐÖ_ˆ¼>u+ušÛ2%æ3#þ‚UKÙeI*vÞ¯øÊÖ¦¤¨0ÁÂŒu®J]j “mh’®ÌùEt1´¹ŸL†V%Œ`ô&žìV,xEcþÇ@˜21;ˆêjÎñò‘öP›Õ_®¤Òí·-ó–&®xçOº&ï¬*1þíh ä;|(Ìëóöüê_ H‚)A^Cš³m庛Eš§ ó.áÁ7† Âêa\Û“†ÏAT&‹7ƒþ*ÑŽüfº­eö\¨T+?7­ax£Iž7…¨'rÛ}ª°Öïô™¡pÞPƒ'Þú ›Äþ”,·àqÎE;Æzu¼;¸Ô öŸCXš5ž¦×DÙGAó7LsZþ(¹2Cm`ïºtå½7º°µ¸óü*Ë–‚Œ*§áí6Kù$‚KÆrÑõ¿c¡;èZ*•wSïØ×#$z–—« £ Ôü¸{]ØkZe­¾‰6Øq´+ÁG=ÝÁtVrÝEijW—Ã2 Ò<×ãåú÷¬ßF¥*mùpOÒ¥-gj>T~'1(Àöï^‘¦1`T‚;×›kµÎ¿b{{UËF ׊­c¶û:FÀ#'Ö´î`Ko ©a&KUJ×3A )f ÷V¬KÊxAÖõ 0&}( |#ÌÓìF_ÓŠ‹^…-|L›”„ù >¢á}:þiCFí¶à\÷5?Œmîžå'ÆaŒm¾hOÞ‹>*Gm*7Aò«ŒûÖŸ…\xhÆܹR=ûW9 ¾³«èáBæÝyàñV¼|ðjRÙKœºôÿhPÖcšI.-¯eŽ9Z9бZô=I¶‚ÃæE2à–sÔóšç|W Íizo핚)ï—¨­o¶©,eî_ýå=i7u ô³‰<]# ³mü{Wk¬éQ_éR‚sµw)_¥pÚî<ÑH”î™óÚêá{½D’ïS¸i'uÛ´öã€(ô–ð´©$x'ä8¯›Ó/ŠwÜàåÊk{Ã:Q„4÷ D²ò ô¦xŸÃrÈ~ÝjŒX¯ï@ö¡5p±«®i×<²Pꛕ‡zÇð l^(Ÿ¯zÏÒ5mfêOìØ™eÜ6ÿÂ:W{eáøì´I-íy—q×4IØv9E-ï¼Mk°¨9;}sZÞ8µ ¡Äè£ Â¸ËÍ2îÏ[6°–ó7áuë]ƽm,~ÛpŤA|Òz4+ü6t¹áé‡Îk{ÆÐüY4Ì2Ž~`zbµþþÞìó’ÁE&ðÅíö´±ôÛW…â½Aoî¢x2mÕ~F#‚{Ôžh%󌠒°•*=+s\ÐÌšTv‘~ö2*ö‰á$³ÒæGÜL›KÞÔs$‚Çáëq7ˆbtfãñ«ž2ºáp¨×A¤xU´‹³s3n“'n=)×þ›VÔ ÃÜ g¡¿:\Êà‘ÛE?¼Ü ùcæ²< )MJH„EÕ×–ôÅv:¦øxiñb5 âÅ'†t˜4«VU{±>¢—2°Ú<ÿZ±—F×]Їޤö®ÃÃÞ(:¬‚¶`û2ïØÖÝõ¦¤|»˜UÆzš³i£ÚØ@RÖ=J÷¡Êè,y_Š!‘uˇäò«gW2Oàëy®kŒî+£»ðÝ•õÿŸp§ ôϧ¾ÒQŽ;gL¸eQíG8¹O3Ñ­î…ô3[ÄìQ‡=«Ölî·ð¯œÔJŠÞÅRÙ2µ 0üË–Å•ÂÁlàÏׂ{V¨#ƒÒ°í ‘nÆSjƒÖ¶Æz–4HzR—ÁÁ4ÑœñÒ— ‘ž¦¤`'&•Tšv'ÚŒdqÒ‘*†aÇz°ÀÅC‚§§Z_Þç¥&†Þ´É% §`ËT"2\°?(ëO $Ž´^+‡ ÈϵYC»ÇéP„F!ñÖž% v¯ã@É– ­<*à皉—žÕ2ÜP"2H-!sÏ(P2½sOU˜.0Ž ;#4DŒ9Å'4â2)»M7 œåü` En„ü¹9®§ÉÇ5Ïø—Ožò8ÞQލî Ì¿*<3iµsÊš[ŒÜxh>ì”P~˜â­êÅáÄ·òÚIA•:Š¥œñhÒªäÈë’­Ð ÕÜ›A†ðÜŠ>S°ÿ:¹¦KúJ/R¹CYzš]Ö²+yNXôÅ‚ÿM¼štoœØÿ@I¤ÙÃwÕ¼˜ÈsóÕ”ËV–ÒFäö¨4£wo©IFÌK~óªêÇ-ψ¤©P„ü©±©d.õYmÕ¶òNk²µTµµK|ä¢dnõÊIp¶Zì’:CŽõ¹Ú]Eæ"ºîBW­ ö©4÷¯t™§å"µíoäÔô¹â›ªð}x¬Û{°¶Vî§ÍL”ëOÑ$Å5¹H¢ÀAoyoh¯ ~â&çoÖ¶îµÿ/KŠh;` }ÜVn”‹5­Í®prMg¨s¦NQÁæ5߉ HdQºi1Z¿&±oigIJcÌw®NêÎ4ÑàŸøÜáµO«[¬m¨F$/Ú•ju6æÊÖÍî*Bß;ÜÑm«[ÞÛ‘ÈTá‰éXþ@ÿ„LÆ[€›¹¬KgžÂp³lŒgrzÒå@vVz”2•ŠMÁzúUÕš9wl‘[Já4hîÌ"ß徕?†îfŽîT*FæÏ­>Q\–À |[!cʳcÞ»@À€WºmbïìáD„7_éV´VîßP6W®[s`–ê•€ëî¯!¶Ì“ÔñJlƒ¡Wâ-Fk‹Ï(¨Xâõ^KƒáIÏ$"öŽà2{{Ry[FXîÍ6 £ [)ìÀ0;†hê1ʃ’@²à·AëUšò(fHd•Üà)ïVÔ‚Ê7g# £aÿ‹¯E¶öâ7&eÛ8æŸáÙ,mô¨!IÐ’2W<æ ñ}ü¶VŸ*©HçµpÚm¥åýÐ[`Á‰ XtQ𴝍™ë¤dÓƒHùAeª=ä—ºdÏ…‘—?†²u¯Ke«CiinT1þ”Y…ÍßìË}«…U@û½ˆ©SK´Ž´†Â4ÉQžz•Èéž/¼Õu8­’ÝDõÝÎ?*í>br ©´ÐÌ­eÛJ°/cdd™ø¿­aøÃÒÏ,×Ú´DH͹Csð®Øò»X縠•ÎÜŒJiØLb""…Q;R=¥´òox‘¥Šwš<ãõªp]¼·¯ ¡]½w,ic(a,Jáù ÔÙ–ö*àU¸ÈYzñR—²ÀM00ÅŽíqºyò|ÌMIÌ.”OéVžÙ^mø jrZÅ«ŽôÛ±%¦ÚŠ9ö¦JÀà mÝA§úúVv¹¨gir]…VÛŽ>´†V‹K±¶›ÌŠW'$ûÖ”j»Oo¥rˆçÕ¯ÞXHÏ ¯@+©·wW'±¡«nI¥C<ÂS/F“RÜØÃsjÐλÁíSÅ/Ê[§§Ö¹[ÿ\Ϩ› *0ód©gè1NÍÐ$QÚ±D6(ì;WŸxšãQ]M¼ÝÆ“?tŠ}þ³¯i÷n¶ ó¼V®•âHõYRÖKc¹¾öM&µ-3Æ0Ä¢¬ä-À_CZº† ¾“T¸R6J'u´-ôˤݬhÀä95¢§hëK˜dëSDѲn_z†ÚÎ( Û€éPê”U„—2ò p=Mq·×>#Ô­>Óoû»sóœ})Y°;¹tûinRw…K§(Bô®jöÚçXÖJOŽÆÜüƒxÔ¾ ÔõKÏ6;är±€Üs]-ØR¼u¤ôéüêÂ̲20)4DVzE¥­Ô³C¬¯Õ«Pò„w58 ÓœTˆø ÷¡°1b·FÖ 4iæ/VÅ]Ö Y4‹”+¸4gZUý·”;˜qòÕÙå(GíØS¿q¯€-^ßN“ÍŒ£¼¹ú`W`ðäò W…Ø»x㎴ù'Áàf“c3u(€•HÈö«–Ó)‰6àp}kYÔÝtéÜ.5àW áK›û¿D ĸsxÇ¥RÀõY¢@HjP‰³ ɨ¥l&Ö<Ô uµñSÐ=Âþà†RÕ£Rɸg® fx·UšÃIó-Õ·±Ù‘Ú¸ŸkÛ]=ÕõÙ°p‘ùvªJèè÷!ŽÓç85u2sÐsX6fù¾Ð’¶+FçQ‚ÒØÉ4¨Š¿x5M¬1u[[jÑYA™‰ÚÞÕÓeUA+ŒøW;£Øh××íªÛ|Ò1'“šÛÔ.­í"ó.d £©jarÂm9¦jeTÚq\Í‹´ÛëÓh’0ž \ø×@äùyéÆi±&XùqÆ­00ÏJ«o6é Š²sŽÂ•†™b6x¥|(ž*5`¼c¥$žc /¤ÇÔH0G;[­ö¨Ð0L5=nËRÒåzô©[îuâ‘ðǧª€¼i0H)÷‡ž”ŠpxíA'è6…ЋÉiB¶ÀZEL›­ŠIÁéJ€Œóì) ¶( å€'ž3Ôˆ°ó#¥B€8 ¹Š»³žÔñÅ ýjɽpzRŸjR ¦sÒ€·9¦mÁܧš•àg8÷ nàò½óUžÍLÀƒÆzzÕ†b£iB §p*‹8ã”ð£û¢†¶Ý!9àzU+NDÕ£³‰7`Ÿ1½iîÀ$ð S¸ŠW+´—Àñ“´rj¶dñØ4²äO1ËëZ¬á—¨Åfê:ÄzzÊ™!W8úš¸™Öo{:Êÿy Mo¡Ú±á¦(Ò5µ( !—¨«Ìé—fU ÆM=PÑ‹–¶úŒ·îó26Õ]/G{[ÖžP91¨nÕÐmŠr%Þ{S.m|指*Pÿ­ŽNþÎâÇP2[†q'#mLt±m¢É<¹2È•=¹®à Àç&sË ŒÙæŽbN>áóá¸=_ƒKp’h–x\`}x­éô¥žÉa)µ³Qßéks§¤J6˜þé§t2³Oðûlâ=¤{Õ]C»p:ü…]‹DÝ¥Él¿+3Xô§¾l´©`‹I'\ô¢ê±ŸáÉX[]Äå.*?m²¡ ;/OÆ­éšuÅ…­Ãde覣Ѵ™–sq8(àùX],ñÈn¼ãóªú¢ªø•6K)8ïPj¶Wuñš6råH«Ö–sß]&¡y±sH Úû$š´hœ‘øšêm­¡Š‘cDgPÑú׬Á-¦¨ÎÙ%Žä#­mCs©Í¥É$‰·å €u4Úº«y%íØ°µäãça[º5ªÛ@"1÷¬ïXù6­<Ë™äù³[–¿{*0j^ƒ9ߨY-cš½5ٳіd„U_çìÖÌËŸŸúU½J´xtª›ËÈúo`úͬ—-)órvîôô¨´{É´í@Û–mŒpE6¥öVx$Ç–ÝÏnÕ3Y›~1Q‡,;MUÃB¡žh5¶q™$Ý•SéRê÷†ö'˜ã \ô¢DÛâRƒ“æsI®ôèñž<öæ²êf )%»Ná‚Þ¹™tû‰#kØ¢Ù9uµ®º6oŒ0ßÉ­Ëo%íb ¡@>oÖ“v+Ã:Ü’Hm§bÌ£‚jæ±®4s}†ËýsŒ=ai¨±x™£åPÄ(ŸxÍ>«0É,_h>ôZì m+Ä×VWOÓyÄü£=AïøQˆ®.µ\L@ˆðÒ´t½,¥W»O2vëõÅsÍ›Ä>B¹”Œ4i|a2ß**nk¤ñ%»Ý9!1»'éT—@²7?iE!ÀÚ­5’Ëm$-Ю*[C±Âßkos¬Gx ‘|€ú í´ uõHó*ÁÀ½pIh‰¬ý•Éæm?L×X¯‘o+F¸Th=ÍSI« bï‰e´["ºŒœ½EbøutØçV†þE”œymÆjƒëÂk‰æË’@ééT`Óže,ÞFVŒJ¶€zd»#…˜°ÇrzW4þ)ÓÒi#!×aÁ+Þ§ñcáÓä±]„)#½sº.…¥bò³¿˜ ’løºÒi– #'‡#½ax £_‡T\H€Õ]'O[LÄIJ¡&´|[o䵤€ŒÀì–Ã:-F;M"•Õc(9úTºiÒuYþß 'Sóg·½s7Vør72d¨ßŠ·à›`fž}Äp(²ÜGey} ŒEæ•Tr sZ‡Š,õ 6êßcm*3ü\öªZ䫨x‰l˜B§W©4·žµ²²–F,ĦT7jI$2¿‚¦‚ßQ–YYUV3É®ÆÛÅzuå×Ùc—8»×œèöI¨\¼/¿nÜ”ÝOLŸI»ØÄÁGî)´›Ù7L‚cêz官Š.d!‹`*õªþÔMÞ‹ÊÙtÊ1ïÇJçü[¦Ípö%-³)'=*-­€èßWlïÌÄd7SŸ¥7Eñ%–¥1‰d£øHë\…m.¦ÍbÓâÆqïLÔ,.täe”†”qÜUr® ®z>«®ÚiQæiüp«Ö©i*¶Õî|3ü;»ÖZ úå‡Û.® ÎÃ(EaXÛ]Úë‹Lub9õ¢1A©èºÎ»i¤Å™t˜ùQ{ÕMÅú̾QS«ü-Þ¸£yƶï¨ñ®WÿÕW4Mñï¾×¼p«pOR(¶šˆô;»ËkLׄNÞõÉê~-Òõ->âЬƒ+ÆG±og¸ÕõÑipÌÑ+ì+èzÛ—Ãúu¥¥Ì±Æ_÷dç¦==(²[ŒËðµÕ•½ÄÌIC³õÓXxŠÊþéã™èÃ\n‡¦C©\J³ (PÊŠÝj-_M›A¼G„º©å?¥6“`z%õ÷Ù´Ùä|¨zôÍqžo7]–WùKsÓšÕK™.|1+Î }{c‡àüXícŸ-¿%Ø ßjBÍà‘CÊß,cÒ³<7¨iúm¢4®|éŽ9ïT¼UlVûÌ'!ÁûßZ± ømo­à½•³€:ãñª¶€wÊÞ` ¼ƒÈÇZt³%¬O,Îj*%"#´€ =‡Zåµ[Ù5íAl,·y1¶$~Þõ’Câ½T\é°$,¼\WE᯵èq#zŒí\ç‹ HôËTD#mÐU¿o[&*r7UtÇUu¨ZéÊf–EEÎO½rqøãÎÖvÊál·`~µ›âmDê°°9HVP¤Š›VðZÃaö«"îQej"’ÜnçbèÃÆÙCÈaÞ¦Š6†sç^máÝNî …¶Ý•?tÒ½"YþÉ¥Ë4­÷S8ü(’°‘O\ñZ:#m2LýZƒHñ…†¢Þ\¬b—û­XvZ/ü$Mwq6ö“"ŸZçô›ÿ ÛÈàäÈÇr 5 ï¼AâÈt…T¶Û%Ç÷I¥ƒÅvçFMFu1†È÷>ÕÍøÂÅ!¶†äF ¬ûC{ ¿áÛï| tŒX¨î*l¬Ú/Žöõ¡»Usb2ëZú¿ˆm¬mKî,ãî èkÌô´Š-]|ã…Ž õŠÖÕš×íÕ¥,2œ)¸ ¹}{sÕmôÍAÞrÂ7]¼VÏŒäŠçN·ž"0N@ÛÍ6/Éms,Â=‡t`ôÅ3ìsø‹UX—Ò3Øã­6Õî"ÿ‚"‘l&,18*k£EöY̬ª¡NsÓãSYÙ-½²Eˆ1ÇzI성ÉnÛ"àŠØe¢_ÛiÚÅÄ’‘ä@aWüUyíµ¤°£’7׊µsàyšûu»¨‡9`ÝkcRðÄ7¶QÅ¿l±.«`Sm]”Äðþ½ ž›²âUÚ£?‹5kDÓ¤¿ÕåÕ'Œ¨Æc¿¥Caàÿ²÷®ùTt®®ÞœQI¾À‘åרmuïr$$ßšíôßÛ_G@˜å .ߥ7^ÐSR“rªÇqÙz]ÂñØšRsÆ{SrV jrW&™â %`À‰ Ϩö­i¼Kö­.áv,¡U· ×K¬è0ê¶j¬BH§‰üßJ«eá›K[V‰£YX¼ËÍ.t>S”ðæ«Ÿ~Ï/*ë·v3´ÖçgŠ}6É£ù·’É‘ŠAá›-4=ÝÌ…ÑyÁà Kh$ñ Ú\H¡làÏ”=i¶›LV¦ÚL¾¸YP±(N?•dø9‚ë,A1‘ô®ÂHÊØM˜DÀú+’ðt ú¼ç9*§'êh‹ÑŠÄ~-¹Y¯D ݟέhåµ¥Œvøc#>6ŠÒñŽní$xãÌ ü›zš­ ød[•¹»È ØPä¬;2ο{sˆl­¾Gœí,:Z6ZriÖH‘¿žäÕô²Rþk*™@“ØÔ†ÙöNæôŸ5ôC±Ìxµ‰Ò"`9ÍOà²b²g%›8­ BÈ\érÄã-´*Ÿ„-¤‹MÌ‹´H?6í £œñ]Œ–zÃ\Å%9Èõ­Ý+ÆVon ¾.ŒÃŽkwPÓa½d˹1\d~¹m\Äé‹lç>Ôã4Õ˜œ{ìt¹gÕŒð‚¶ë!ØþÕÙj²¸ÐæˆüËåò °¶qÃEüª–{qm$,̤qïIÊãQ<ÿ@Õ/-§k;c‘7JÏ•nluW°ž98>ç­wÚ7†cÓ%iOnÔ³ør9uÑ}#ƒg½W´W!—â‰ä—A´#«1 w†µé×L:}µ›I$`ò:`õ&ºË‹[kÛ_³ÎFFô¨4ý&ÛJ·•,ÆÔüÌy5.h9O3…®÷lVÛ¥Ûµjëúêª_F7¦Ñ¼/U#šì4}ÛI]ÛLÄæCîzV¨TÚc”ºƒÒ›¨žÁËcƒÑµ]bîØ[Ç`‰#/éY6°ê¶Z» xÙ.Ka¾^ßá^©ý›*Éû¥‚ñSÉmÄÒy[˜/ ޾”ܬâæE[IÙ^îrjJ·áÝ$ivƒvLòáœÕ&•£Ý_jÏ©j(ʨH…°®–+Uç ”À­ya¡¦5´Ê ȸç±í^_4:‡õŠ-øÝ…%s¸W²ˆ—i\UAg²“$i'<\ãèhŒ¬&Ž+WÄâ{†Õy Œ?OJ·ªhÞÛ¥”I;O¸®Ï¹^1ӎ³æP—À¸áÎ5+±œn‡àû»;¸®îÛËØr÷ôÍi뾇Ymàˆ§èô5ÕÉ&ÑûÌmÆ G rAçµ.gp±ÁÙxhå2ݺ²!à/;¿ ëŽ-¬ÖmµqB€{Ž´ÖµßŒöæŽkî;º|R­ÀàfºuÆÜµRx¡Ëmæ¬F<MÜV$Pã=©¨ÄO9§´×4ˆ­»$qR2AF[¥ ˜8=(Ýè)Œ¶sÅ÷ùSŠUÎÜÓHÊ⥌~ïi¤ 9úÓóÎ*4È“æàRùŸ/J,’ ¦ìç5*§Ë“MØsí@®ÿ~ÔßÿU'Í@vËKò·˜~îâzS“¦i 8U‡=)Ýp1N)ÃÚ¨‘äŒã½´Ð?y¸žÔ’M0Q\/‰#’O§saBCŠî°Jc5 Eÿ3Ë]ãø±Í ÙÜ78MjÒ[Sn²³<Ì€6?Jµ®Îë¤YÀÙÞB“ëÓ¥t—\WQÜÈ (r*-GHSˆ,¹M­¸éWÍ š1¬f‚OÎ#ûñÄr? ¯¢·“¥]JzäŒzðkn=.(­%µEÚ$RÇSQ¦–éÒZ[‚B±KÃedÓ¦‰‡Ï…VðÜD]Ýg¢ŒéÍnØi£MÓŠñ¼‚ÄýkÃ]¹åri§¨XÏ1Äþ!t™ñcϯµkk0¢9NH%}ioô&¿Ìð0IOÿ]-ý„ƒ@h<Ó#© Þô0±CQmÞ´ãxéøÕëk+fÑTˆÂ³Â2߀¬‡Šæo+0;Qóô\UÝ:òíô™üÀ 1¦† ‹@‹ÜH¼7Üè*¥†ž·ævšVM‡ªõ«>¹I`ç óŽ=)4ë¨mnoc‘ð™b¤ÿ)€š+ÏxŠÀwÀ5Ÿ<²Ü7ÛLƒvü'‘ZZ$™²¾„rJdÀŠ«£[A=Ñ“¸r¢„À[ÍJïíòT¢ð?½O›[žMB)ܲF¤¢¬k€ÛLñš‹T"Õm—nTªœ~&…aXëà™fÇ €y®VöYµ]sìÇ>R> û è" ŒUFòâ¹.O+Ä$³Ná“üY¨ŠWB+Cö¦ÓÂÊWéÉ®Î]6Êi£âO1NwõÅ€Ä_ìùäþ¦»gãjòO¥T¯Ð+Ĺ£Ò }NÚ Å·yG˜ÇåOWÔÚÒÙ#ŒfiÔö®FúÎêÒUž~d“æÏ¿j•î ô]Zf9P ¬½?YþÐ3Æ«µíÏ­BZéü4îç÷Å¥s|Wr>ûbG#v)¥Ü ZÀ߯±'ïy®úRŠ1…Ú?•pZ˜hõh7.ù0…¾´éµBÓS2Ê]yËw5t¡!À9\UÝßhÁäÕ[ N+û88Åí\–¿«Ë¨HñÀìÈpXw5)kaßC»·u–5dåzã5Ûûä×~Ëö‘ïô­/ kbæ%¶s‡Œqžõ—¯>)ˆ‘ÇÊj’ÖÀ™Û!Ųd’Tr ËÒ5c{ww„Å´\+:5=vÛITË30ÈUè*µÝühÜX Q'aמ´’Ô ×úíõõÃÛé›JÆysLðTÚ]—u<1nÇÚ²ü-6uCœ:äýkºQ¬Fy|´ûç­Ð ·qØÛ=Ì„”EéXºO‰ÿµ5mL¿?ýj¯¨ëÖö‘,£xc±¬Ï2,÷.îT1è3E´ÔW;á‚ã÷àr*®£ktì¶ó#²0š¸î eÏf¢ÖÇ‚LlY­¯é©x¤ÞN8éZ3Ì‹‘ÝVÐ\ŸÂ‘X9ÉÔÂÑÜZæ9ŠœŠŽÙƒŒ¸f@<Ñb“ ÕtÈõ[F·~£î7¥rÿðƒÎ‡÷w¸Cè¼ÿ:îЙÁ\©tâ°@ä“Ôš°çwCŸzŽ<ç÷ª[‹‰p#ÉrG'>”G{ À˜\à×=âE»›Lh-#ff![o\Qáý.M*Í„Ò1’C¹³ÛÚ„7¥•‚z ˆ2³d1õ¦‡܃Ҁ¨ ûÔîVƒÜ žÕ yˆçŠ”:0àŽ{ÓøÇ#4ÓE9‹lóáW–>Õ=µÔ3ÂLR«Á zUz+™t©Ók;áH>•OÃ:Sé¶ò<„yŒrÜñUk­Iêt9#Ò›´uÅ"0,HÅ+MGHŠOLšQWE=KL‡RDŽråÎ=jެ6ÖëIµW¥MÁAƒQ<ªg žOoZjà4Zî–YNT€µ‡áÝëM¿»–pɧ=«¢$§Ì[ÔÒì1ùÑv-¸•SPO<6Š^Y ç“R°À5ÅxÎGÙäfùrTsDUÝèu–¥ó8·”9Sóf­¥ÜFB äŽ¢¹?ÁºÅˆP›­ubÎ4mço¶iÊ)1&ÂSFfl.3šÃµñE›ê+clC6ÐË[wVÂkIÂòJÒ¼Ûñíñ 9Rx4ãî ž¦Ï9öÍ2EÁXYd]¹u#§Î9ãše'rø©AãžÔ‡h!K&{c­<ŒžE`²ç 1»©sò`})’«ž´l2…F sAx׸ÅRƒX‚}R]=Aó"$T×6i;™œÔ؉^TÙ’F)c‘â²5FÓH‚%˜ÍÆZ4ë›[è¼È& };Š|½Il­­øØØLÖööÙ‘N3'Jêô«¦¼Ó!ÕD® ‘ØW—øÑ jªÛ² Ô× ørçÌÑà8*¡^õ¥½Û“ÔØœöÆ)`’:W5©xÛM±‘ ]Ò²Ÿá«?ЬµŒÆŽRCÿ,ØT¤Çs{svœÓ2¨ <5 òóÜtªÏr¡˜¸Ò¸îKïcŽõ‰&™[9ÇC\oˆuÉ¢¶hl¤-.yòù }k;ÃÞ/};m½Ú–°\žAü©¨è'#ªñ’=ÏŒ»g—àežé滸™äØÛÐÕÏN²øaž6Èv^+”ÑoõKv±µfWneÃV–‚½ÏU óóÒ§@ƒÒ¼ÏAñÅÌ7+o¨³H„ã~9S^‘ ÔWh¯ܧš‡ 1û9a[°£cžzT)GpÒn<ŸÊ­6§½!ŽXþ\“Å8t☸Æ3J€@ò½éÀ¨;Aæ¡u!³Zr±9Ý׆HA*QÛÖ£Œ€Ž´ð¹æš`ñÍ;ŒT~Y ’iÛ±ß4æÝÐô¦ Ùç¥ “'֔ܽI€úÒ–Àû¹¦ªyû´|Û½¨á¾P0*E8\Svíç9 † Ó„CRúb«¯5ar1ÍP…9 t¥#ޛȠBzu¬SZµÓˆGbÒB/\w­bØô¯=×mîmu žEb®ûƒžƒÚª)=ÀîlnEÍ¢J#d 8 V±€ rº'‰V[k€ϯCé]R° ÏP9ÿi“r¼³Aë8? ¾´ý‹ÔÀk14f“Z{ù¥(æ5«OÌŒ €O½&29—rcnN:Vf›b,md«±'Ú¶èEcêÚ˜³xà‰I–N9íšh 6Ó–R:H÷°ÏOCT£TÒ4ùyK ·\õÀ®lëWñß,Ò©œìnâšW®0 ˆÅ°aÈÑmFR4 €pëTµ-f;KXä]­4£(=*®ŸâKybÿJÄN½‡z9X\µ›€‘¡O˜çÏØ›kíTËpŠœŒ!îk°VY¢I#9ÞLW/{ J·[à…'>ãéN.À&Ÿ‘â9bs*ÞƒŠn¡¢ÜŨ“l¸Y[9Á[ºeµµ æ`׌³kT¨!‡NzÑ{ã5„•g³/–p£q÷j=i¤}J"£2l\¯5×Éo²ïvËš€Ø[µÂÝ2þõxSéBXOB Û÷ |ÇÞ¹­j²Ö<õùTüêGs]~À\{޵VïOKÀRUãøM$õ¸Î{H’Ö[·¹¹`³1Ê–é]Y½¶T%¦ˆç9®:ë@¾·—)˜£î°¨­ô‹É®DRÃ"ƒÉb8ªvbÔÕñ èñÚÝ@àáŽÜwªºÕßÚ­mæØJc“ï[zC^i±Cªyg#5¥¥Ht˜-ãºc PšC,Ã{xeÙ˜G°û¡á`ÏÅ]‹C’/ÉmŒÊãqö=«;EÓ/m®Kʦ8ù}i\V+kv¹dàeFêßÖ¬’m-¤TùÑC+{b°uë)ûÏ;ŠÊxÇcVÊÍc£H.® I"ìD' ¦¶WÑ®ž-*ú5(‰ô«Þò.,%ˆ®æÎH=êΦÑdYA p?ýUÍÿ¥è·„¦PŽ9èE> JˆlµôDùG˜®k[—ÄqÅŽ@ÅM¤Ã&«©hÍ xîj޽4øæ*À« gúP·³ ˾*…Y­¦«d֌֑[øq¢^YSqÏJÈñÚϪùyf]Ç5®²ý§Ã.ʸV?J›‡áyJj¬ }å9«šíÜ÷Ú ±Up¥sÁ5[ŠR`ßÜÀ4ý{βÖÖdîw¯z}l—~û5“Üùìv&HôëU4 S{öˆIÊñƒ]ΧÞ,»öïB¤æ±ü-{miw ™¶P§wf(n»Ðµ@rcu=¿ˆ{×Iâ nhôˆV"Ègåp*—‹ÄfKwŒgv@aÜRköÒ¦ƒ§É'T\>}úR½Áœâ|Ë•»Ìœw9®]ÔuÒ-­&R®\úŸJg…×O,LÇùwt­?ª2ÈùdcéNúØ Ý;Uº¶ÐM½ª»HI$ž@ZO ê× ª‘­»HTÞKïéIã_·Â¡pU1‘ÐòjÕÌO„ Ê‚ÇÓÒÁaž×¸·ÜÎpY |ÜÿJ΃\¾}Z9ewm­Ÿ[ðš)7†O ´€7Švò‰Iǵ&µ Þ'Õ.c³H#B#”|Î;W7cw¨ÛÆëfòª¹äGÐýk«ñbÒP.6‡ç>•›àÆ_:`yÀZVޝD–á´¸>ÐI‘—æÏZ–ð½µ´²Æ¾k $%Z‰xú G›SYu/¡çvÞ!¾þÚLÎÁ›i‹×šÕñ~¡uPD¥’)F쎿JȶˆŸcÒrx­ßÇ›8Œá±Z´‘62Ä— ¢­¼yós‚ýöö¥°Õu&Ò.ÛÍwØ>V-÷jÿ…ôøo4k*.Ýn\“J]7D½X÷1*wê>”]^À‘¡ëÓXK(‘¤”È2£¯5¡¢kz•Þ© måNÓÑk3Âh²ë(C§ö5Ý=¼PHL înv÷4JÈçÄZ‹êYwÆÇÚc^ü×iu©‹ ^J¡]”Sýêâ/a2x°ÂF?}jìuøšmp‰¹“æç ¢Ii`8ص-jy¤–ÚI›y9 ÐU;‹Böé"™Ý¦CµGq]Ÿ”f̧‹àþ•‹`ñ°|ó£M„mêäš6›n›OÚ]9öã­sRê67ð^4¥ÞOÞ/qôÅiøá1w ÝÇÛšÐðö‘Õ¼7÷7 s2®T1á¥$’W#ÄÚôbÑ+ o—Ö£»ñ%ýÆ› 1L(Vp:Õ¯§–öéÝ€;WCáÛh…næ8ÎG,ý?ýtî­p°x~âêm6!wþ´zõ"¨xІÓÐ VÐwŒmöé\ç‹\¦“žÌãfµ•Êè?˜´¶ òØÃWR×®µ‰d±Ó|۳ˊ—ÂVâ] åšELž:ŠÃÑí¥ma­àp¬r á«¶¢¾†÷…uK”y¬n÷ †=‡qXörxždW{îÞõßC¦Agâ9–I¯?±»ˆøÅf÷fcÏó¢/pèM{s­hWË4²¬lÔô®ÃJ×$Õ4£r‘†˜)ùr*Ÿˆ ƒSÓ&²ð®õ?Ašæ¼!r-ïeGsóTQøÑÊš}Šº•Ö¯e©›‰ÝâyUKqŠïô}WûGM‚l|Ì£wÖ¹oÏ¡¨ÚÚÃ"nÎË}Úì4û(­4ø’ ª€ ÷¥°ÖåÖ|㨬sYŽÃO‘£9”ü¨=Í^ÔïâÒô÷¹—ƒs\–…ž!Õ¤¿¼Ï“ùøsSõ)Ü·á{uý“q ã>†º;ÝB;;9g‘rp¾õ?Ù€åp0: ç<^ò®ŠïùƒŒý(Z±\çõ .÷[µ:¬’ï’‘J¥á‹y$ÖUSÇóéš³aâ9²ÍŸ”Í>ÒúV^™.Ÿ¬ $PÅ›iÝÖµKF…¹¯ãp ìÝÚNkgRÔ$±ðœ-y®áX~3•%½€)ÁòòGÖµìïìoü&æX÷‹dÚÈzçÖ¥ma™¶±èwúoïG•:›žIõªš Æ™¦ëbG™˜}ØÛ°«: é IƒŸ’N‚¨êúdk«¬6kÃ`ì^qïô§°‘q©~ìØÜëT."¸—O¹—pBc,zqUç mBÌ? ÕEÕ‹Bü\lÖ{Èø+Ék«‘;+M&U»ûÔþ1Ðኽ‚5Bïÿ:çïô»íP2Æbœ£¯Lf´ ÖµzÔéÒF8ß ëŠ¿4K/Ï+MàYw|¸ÉíÍYð>[Lu?2ol M^Îçþõ°ÓÐ4cïƒÜ æ4Ín÷B¸t˜ógô¡j‡°ßZ%¦¹qn‹…/‘í]æ‚.´½ä`ç*sØ×.ú.§â=PÞÍ [Ã!¿ÕÝ_'KŽÛ™PM9=,;u$‰Þ~Œy­TR!'5“`þYPzÖÀbSqéY0CãL “Oœb˜lô©Ž´†0+Ïj]¹ÏðIÏ¥”äP#HÊgÐÔÀ0q☠'©ì€ CÃÒ+v;QžÍO†”ÀBiâjBÀsMcŽiÓSŒõ¦²—éŠqb0M–€ ¤`fšÜu4ìãv*µ…¨ÞßÜÃü²ÌÙ^ kj® ðÏ–>`ÁW T´;»¶ÎûÑ ìøRVêE¥]Ës¥Ã,ùYÁ'½sÞ%‰íõ¸ ϘÈx®—ÉÙXö€AYZŠÙ]][[Í.1u¥=n ‰õŽòtýÒÝÄ‹ÜÕØ¢òAÇ&º7ÛhxEÚ¹OÊÆú(‡;càSM‡BýŽºwúI-#¨*OðJÇ15òXF|Éw2CØzWWd춈§òOÒ¹½ ®2±Ï Šh±vYZª³ª¤`.Mdêú†Ð4 íµúwªÌ­}©ÉmæŠ%Î=Md;¼–qnfÊ;Í QÒå¶– -Œ¯æ ’9;¾•Õië_LÔòŽè~™|º…¿š#)‚@´x¬én-4«eˆã'¢÷÷«?n·ŠÜNd ‡œšArÖÀ7ax¥Ø_z`—|{“y£·¹i7«àp¢yaQGjŽD>`eÆ?•LI" ’àGÐçž”ÆYãÞ›$!—žT÷ª©rd-òl Ü÷úU•ÈŸ'ëRÀoÙ"òðè õ×:l޵¨¼¸Û'hqšêUŽj‚æ{}>•€U½MRlÛÂ>JY×ÚZ‹(‘™B6r½~•&«L;¬.‘©ù èkWq$Æ‹´"•µ‰¶ `QëPßiq^ܤÒFb´²Å¥°ÛÅ+»Ü »ÛSŽ5”ÙÓj{(ãÒÚÞ.FFOÒ®«qÇZ{¯©ùW⋱Øàü)g#ßM(E×Q¨èðê¡$ùd_¸Ôº>’4´‘C—6ìžÜÖ¹PÀœÓoQ¤sÖ>ŠÖÒXüÕ~AnƪZx2;i ÷R+…è¸í×Öº²é QHÁ'”Êþ”)r¶§_Ö°ËgkÂúèî졼¶{ia†ôô©™ÚŠ3ÉÚ)’NÍ:㥠Øv98|qëy„åYO8«ž)ŠY4»h¡C!–ÇZèÙ˜ã$b£a´’zv¤æ>S˜Ñí¦µÐ®Òá oCŒý+3ÃÖ7žjäD‡9õ滦E‘pB°#¢(R4±ª¨ëMÔ!+ÊâÉ€\åHwâ¼þÇI»ºÕÃù%$-“õ¯CUü3ç¹Í% hàüAÍÖ³äG "äqõ­]Meµð´vó+,¼.=Eu8V9Ûó”¯ r("²úÇÊq^°¼IÚlmM¤Þ½«*e¾·ÖŸ ~Ó»…^æ½ §–ÿ»@`)ëkËçÈz¶)óÜ\§1¯ÚÝÞéÈìD‘΃£qÖ¹­Òúîóm›8-Ë2öéír)V]Á†¦YéðX¡X"'ozQ©`q+éñ6Ÿd‘;–e“ëVdfur½qÅY1†H¤‰CS{ŽÇ”Ho-µo3k 0°ã©Ít~ ³º¼Ò㽕Ù6 &?ë]„¶òÜ¬Ï dw"Ÿ5¼R¡YJ¿S纞e¢Úêóæ;‘º±8þºî.´Ùntv¶óËåàœõ"µ…Dqƪ8ZœFmå;‚G“é¶×éªh‡ÎBrOJîôÝêÞV»ºœÉ<¼íµÖÒ4ʈ¨ÝIMZ$7'‘Ž´9)䚬Wpk²³« 7åï]½¼»ðì‰{¶ HRþ˜­Ç°‚âa$±#8û¬y#ñ¬oéó^i[`Μ)íOšúG#áöÔÓQ’ 'ÁΟ“ëPj¶óhºÊÈw-æn=ûœS4½^÷D••c1Ë#µ·Sxºúdµò ˆ|Äç *¶wýý„~ Ñâ»ÁmÊûÖ“§ëQ]´vþlQÆrþ†½(cŠT@žõ2¢F6ô÷©æ \ó¿ÚË:Ç?ÎÅ;u8úS´½+XŸOŽ9ŠÕ¹ã®+½k8‹–ÙÝsR$ £ì(çS'M±HbŽÎV>™îk3ÅÚ]íõ¼?eMʤ³/¥ukS€)ßtàŒ‚1SÌ4=ðm¥×Úåg -ˆ(ëïTµ]PÒ/¥’Õ¡'!רÍz`‚4â(À‚!‚•?zŸ8¹NsA]ZâÅÅüŸ¹‘0~õr7ÚÔ:ßÙ­C1o™zc=ëÔÞ,1Ó¡¨.ÝlíÞéaÞè26/9¡KP±ÊÞ@4­äs5ÝßîÀÏBzÕ½à o¦‡s²æQ’ǵ7E²ŸR¾“SÔc`± 0é]Ê:ŽAD¥Ø<§Ä>›JºP…§gi{5ÜxzÚæ×C&v-·'=½«y¢ÔAÇF#¥.Žr;RçÒÃå1µ})5{â‘Ø"8f¸ÅK§ÛEf©q…P;ZÑ}¨¹Èã¹íPÇ4NøVãû¦„ÄI!eÁ eêÚlº–qlŒ°ãukHÃ$°ïQÉ2BŠìT)îZ§`9MƒMß5ÉIŸøqÚ¢Oùú÷ÚßhµÝ• ÔšëxnAX¤GÇÞÁéOP¨¤~U|ì41uZjªªà#€Ã¨Ÿkg¦=ª(e“‡ÏzÖÚ7oïC䌊žfRHàfð<ÿḣ¯=EtÚF…o¦¡(7ÍÞC[ ¹ÝšEl)ãÚ‡&ÂÈ®aRÇwZEãƒS†ÿ:vÀs­Mì= w1Þ@ðÊr¯ÔU[]ÓN‡e²ÏSW縎ÕKÌÛQG&³lõx59$ŽÝŸåþ Z­£ÛG6†Õv²üÀÕ;l´ÛùùY¶®)´¶?Pñ–û`]ꇖjи×"³²Š`„¼¿t Á²ïìE¬P67æI hkvZè±(˜ÊƦËaÜÔÄ6ÿÙËw"²äà'zXûsGÛ9 |øîÕ‰£i°êV ®d §‚;V…ýËhvB;~¹Ú éõ§d˜Œ› bëIq ©û°yS÷‡Ò»m7Q†ú,r^þ¢¹ˆtg¿Ò£–G&á¾`Ç­féדh×ïþ_Zm&#Ñ^d·S# £“éYÖú½¦¥½!“%x õ¬i/æñµ”'ÊfRÝý«.ìµ…‚"V}øî(Qî ôX¤òã"VÛ·©©ãq"Wã½r^+’d¶·€o¿Ž21Y–Zž¤ºCÁm¥A9—Ð`TòõÏCŽ@Ý;u©–@##®}kÍôfêÎi74“_–3Ï?J}¦¿}¯¾à¶ÖlÛ¶häËž42-äL²±Ôü¹ã9®“D?gÑíC˜Ç‘\猸´™~îÓøsW´…·‡a¸KaG â‰l1Ú´ºÆ±1-”‚vý{ÖÖL`+t®{ÃúÜׯHfåÇ J³¬kðY£Ä¿<Ä|ªµ =ƒMËšÕËÚéËa€5‰á‹Ë»›©|é¤u^=gI¯Ý^XOm<{^£ªóI j‘é±Ý4‡$ãjzšµ Êçr “÷½êÂÕÊi¾%[ÙÌ¢FÌ~\t®†{¸,lüÉ䣑Pâú˜»Žª* ~bNkŽoÎuv¯Ù÷c,>lUíWÄë`@·Uyù½)ò±suÝ©ù€OÎÝx’Ún€%åukWJÔ!Õ-„±g?Ä=)8±óe;1×äpW8ÏjÇ×u¡¥Û)Œ+ÌÇ §Ò²×ÆvÂY1Âö&š‹blì‘l=²$b¹]ÄŸmŠgº!Z<¿…XÓ&†=Bá0Ò•sG(ît’p)]‚Ö±´zSOk¡òl8pÝ…aêþ4ÊOMê§ #ôÏ ¥Ê;—|¥1À ¸qXÚ&¹o«Ú¬™*ã†^Õ®ÛdŠV³ ’–WMÙç4…Œ„qXzö½‘q©SpÄ ½±Wïµ!§iM{*“´dïNÁrþãŽz{S°>ëW¦øêc~ÂünÍÁÀ+¤Õ)í¼PŸa–Ymù˜ŒT–Z´^ 2ÿjÀ’yC|{W ïÍfÝø‚êÞõRÊ#m|½¿xU%m ¾§¦³ƒ#=9®cÆË!ÐÑÔÅkè·ÇQÓRá‘“w$ÔÕ/dxnaÆr¸ÍDwÔ®…‡ùm:v+È~¿•uÒClçÐW™hòêñèÒ?h‰›,‹ð«ÞñMü7éa{&åvÛ–ê T•Þ‚LîÕS“Ó¨§«£+tìkœñŠ?³œZ[|ÒÈ#ªó\wÛu-?VBÒÌ\œíÏQJ0¾áwÐõ¸Ž.ZEPxå©AE@ņÓÜô¯<ñ„—êÖFܱ4aw‰&×56Ýa…„1ðJf— ï©èD#—ó=*¥Î­eg2E<ʬÜJ¸¸Ô<=áu/¾éÎÕÉÜV¹)mÒîÅ.¥•ÞöV8N¿íMS¸\ô=fÃûSO"“ï¨Ç¥yú]êž‘£*Tg?7C].“{{¦hr½Ú“±rŠ}­G Cýµ÷wäLIØôšVåí Ŷ÷Ûa¸ýÔäcØ×G¾7ç<Ôô¯8ñ6†šLÑÏlÌÏì}«R}bY|ç†a! õ=èqOQ§m 5oZÇ|öâÜO9ôúVÞ‹¨Xß[b×jz ^kÏtÛYuh>Å*òïÜeèGã]¿‡t3¤†.á¤qÍVBZ³bv1JïVkFy¨¥‰ZDÈíVLÅdX€r HHÉ —fœ*J(ü©xÁãšv)'¥0!dÈ4è÷ã¥8©Î{T€œcÌ1Î Wö ¾0jëÁ¨\ ô¥p-YÞ¸Ü{š¾¬žµ‰Éâ´,]¶íÏJwEíã8è)€ÎOâ玢ƒŽê‰UÈ 5QAlŽ´„íö¥VÍ <Ö¹·ãªÆb3óqV&YOzk¸ ¹N8★G]¹*qAmê:zÖ~µ4i¼'.ØW7¡ø¡ otY£çiþ%>”ùn#²$sž” z× ý³{µæÈ[€1öÛšÚÖ5Ãe41DˆÎÀ3ý ¬WÔèO¥G,©2I#` ɬkÏÁd‘/%߀ì*íÒKLxÔ®¹ý(K¸î7LÕãÔ¥“ˉÂ!ÀsÐÖˆ `×cq ß´SòÁù“·ÖºÍ7U‡QW16ñ‚=i´-‹¥Wg#µ0g¸§†]¸=ª¼³„]»”zÍ!Ü*ƒž• İE6%‘õj†y%KiX)À÷®EdK„»û[3]Œl ×>‚šÂçrʯó.=óÅdjZt³Íiå`ª¾â>•oI228Á{ök¾3ÏJ[Ö\©Qô¨öœõâ¦\mã¨ýhdžjRi6óÜ}¥ã;ý*¾§£›æ“W‚Ùí[j@ÞÝua§Þ4­yW;}h¸X¡¦X7–n§Ú³üQ’ÆŒ9ŒÅk Tê@ÅÛG ;Ô7Öš¬qšuÅýÍ—Ø!»-’þ‚º l1¥½ªB`{šÑKH­"Ùäâ¤@nGÐQͨÎMÔdÒçx¤MÀ·Ì½ÖµüI3˦[2"c“žÃµkϦÙÉt“˜Çš=;Õ‰ìRöÍ¡ ¬8ö¡ÈV9Y‚ËL4lÒŽzš±âûF˜“*°Áå{ŒÖÍ–‡mc#]ÍŸ¾EHІ&'Fâ•îÁ:&¥–QÇ$ H‹‚ cˆÓUñŒŠZ å±éëV¦ð¼«}û¹@ˆœæº-;L†Â‘¸ýæõªÓp9xõ¥êó&ÌÅ÷H=ê¼úœ­¯%ã¡R¬6ü½«~]íк‘‚ÃØ¨õ=[ËØ^•-t/DÂIÜ€c8Ï ªVίâ²eyœÔž¼ž+³m[£~Iþtž Óf³Ôî=Åç#±§ÔFþ¯a Ò¹”ïŠÄð¤QO$ñË>yV=©ãPÔ/´6ÂøUÚÒ ÎÐo.,®ŠA“ ¹Ç4D6CõÝ5´½DI ÄnwFEYñ$òKmds„dÜG¾*lj¥{¹¬íÈã sƒVuý-äÑà‘Ÿ$ÀS¾š‰™VÖƒ[û-´0ùj‹ûÉ:gñ«'°Kh­p>qò6{â™ xtà¶ïe:ÔÞ/šF– „Æâ{ Ñ­Àu—†VûGŽo9–cÈãÐhÚji¶Í±=Ø×5¥x…ílþÌ–í,È0zWea+\Ú,’!Id¯¥L®áüH¯&·ä³IÇ`jM_ÃÐØéËqŽ\c ã½GâFk}ͰGàjmsV‹RÓ£ò1#ÀíT´@ËÞÒm§Ò&•ðLÁ‘Ï}µ‡¥[ uáh%1¡b„ޤ Þð}Öt˨þó ,÷®nÓm­ §L&H?Z:…ÎÒÇÂðY_5ʳ8ÇʧøMqºåÄ×:´æYIÚØìw6šê_^¬6ñ³ÁŒ¼£±ô® Y¶–×R˜J…IbFxÈúÒ‹ÖÌ.\дyu+Äp DŒ 'øªÇŠ4›‹Kæ¹]Æ6<0íZñ1¬ ÷A ixÊx?²¼¹%ÜCÕ‡­;êÂÓ´k}[H3³1¸<ÍdÚ‰íî^Í%1¼å²Žõ¡ jéi¶här[(½P»ºëípî˼ƒÔUu³yáY"ÒZáG:sÁá…IáíÑxzøƒ¹#€©¯µÓ­[Åa§dË0Ö튻%¤:G…îûË—>äT>Ã1ü®.UùA»‰íÖêÉíØeJ•9íÅyׄî]QØ Æzôø€zŽiLhò]ON—JÔLäŒa½sÒº=KÂÖÃCk»\‰†'?{Ö¨xÒæ õ¢#R$v±=3Ú´añ]èÍkom#2EµØôQŽj®ú cÖ«¨Ý YØù1å;¹â}ßOe¸·VÚͽ«+FÔSKÔ¼÷RËŒ½u]¯Š®ãŠ4eµŒîrGSéJWNâ3‘¨ Âr‡­N ÎóBðûéQæ°•þf^ßJÙ»ºŽÂ¸•°cGH×?´tùo$·h£ˆrOO°̓ø§RßÊXÄܧ÷±Q»ÅÑôÉu­]µ;ܘƒ|Š}ºWe©%Ó¤KíŸg “» ¨í ¶Xâ]ª«ëšqÖ,ÛÍ1?PGjMŒóÛ‹M6ÿ\K}4˜â$†g<~Ú¶“kg¢½¤+¹Ìz“½\F±áËf‘$BØ9 ý+¢Ñ¯no¼3,KóOQjÚ¹(Å𥠟R”ù„Ô;š‡Ål¸ãq%Td ¯¥ÝÞ飄÷‡!–“R‚âMAK÷áÊ‘ÈÉþU]n§èÑ,:Mº©?êÇZÌñ΃0>ÕwE³»´°Qw(y?º1Ò™âM2]WMx`;_9ç½gox} Æ’éÎ’°üA‹Å%w(ß"æ3üêºC«èSã1åï[ú^ƒq©ÞCQù\¶à¸àûÕèÄ‘â³åë¬ÈÙ,ªC~ÔxsM²“eóÉçÜų·è)Þ)ðÁÔ”\Ûñ4jÓÐ\ׇt}Vk­‘Hð$G÷‡±æ“i¡Ùš«Ú7'ñ[^¹h0]V0¿z³¼_¤K5¤W+¾I æ¡Ðü#u<#íó2@yòƒ`Ô¿†Ã¶¦‹&ÐÒU!âk™ðÕöŸo©H×QãwÜfèµßÿeÛµ˜°1–€ »O5Ê^ø Úè}’eX‰ÉßÛéBjÖLÒÕˆ¿Ò.¾Æw–\|¾Æ¹ß ë0i†h.ŸËänõ®³IÒCµØ •XòMek‹U»Y­ÿtäþðàÓMl%_êQkAecûæ'÷ÂuÔë6÷•:­jYXǧF°ÁDSJRLw$œ°”­ÆCF1× Êã#š±[Pµ™BíàQ€riàqƒLÆM"…ïB ,h 2C@Ã#$lO‘Á94«¸œƒŒRûN1P7$ƒR4›WÜúw¨Éù<{Ð[ŸJ»j¤gXÝŽÞµ4@‰9놓ív Á²%CÉóWY­l·š¥²¯Ëp[/ ´‘ͯÇÆì*¾+_D³Û›©2÷™ÏaYWÛÅ!±…  Ÿ|Sê2?ÚÅk<*ŠQ›;±ÔšÖ¹½“NÐí–ÑÊp£=zÎñ#•Ôâ',FGâMIªI%Æ•krÊv«|†"äºDWpó3cpqýãÖ²¼=#Ū4LÇ GÒ¶mõ[Q¦´‰ Ê'Ý>µ‘áàeÕ^B qÚ3«žF:¯ÊÌ8÷®+Ͼ°Ô·ÈX³7 ÿö®—[º’ÚÛt(\žÛë\þ—r“jH×[™ËaIè(Šhx‚êQko±J,ƒq#­T†ðÙé‹(ƒtò ™HéVé¡ Ú߸cÓ­A$‘«nš©Ó N¹;°*X$\IÕ‰rjà %HûµŽ$ÛŒýEjE8d94&Á¡ìƒ~è¨ ÇQS´¡†Ü÷æ p;wæ›`ÇDr)ÊŠÐ8¥O­=X•ýjK#xÎG-=aF$í žôõmÇø4tÏ¥ϳE*4RF 0éëR¥´^A‰Pô¥\g9§.xÅ+°+ZXÁhs aA'¬Omˆ|È÷g·­=FgÒœwjµ²Úƶ¾R Œ¬ùá±Ð­dš8B»¨UÉ'ëéZË0ŽÍR²+&ÖPvôͰ¬r¾Ò]®¤Ô¯'(¥uJ¨TǵJ‘ó E\©üJ#=ÿ ¸¬eÅoþÑä ßÊ—TÓSR³h {½+D±Ý‚0=i ïm§¥c±Ÿ§hvºt`ÆŠd#–"®Ä›Y”ô>•.9À£hÝÀ$úúQv8][T³¹Ô^Úæª‡`”}áZ‹i¥ÛhEÇ—O¼ýO6¯á‹kù ÊþL™ËxÅsÒÙi– ÅÔ—C8؃ }yéZ+2kÁÖ’›ù.A" ç³Õ·7„ìî5Stîâ&9dìM?BÔl.¿Ñí”ÆT}Æ­ÙfŽYä F–52vGe ƒŒ/z§ªh±j±¤Àp>VÆhµÖôû™„0ÝFÒô šÖW]¸3u&•ÚÔg7¥xV-,™÷²vf׊¿ªèvºœ*— 7€ÃµiÈJªã•=E r·qŽ”î#•Ñü 4ÝD\I/˜©÷F:~´ºÇƒà¾”Íœœ¶;×UŒi€;ú 9ÆÌÃÖÚ\,To‘‡.Ýj{/íQy”_†«‰¹º˜TÍ""osŒu57mÌiþ†ÃR7*ùU?"šéÕ2¼ŒwªVzµ®¡,±ÛÈâ85yØÎãÖ‡æ6­áË-\—|Ç9ÿ–‹Ö¥hPi–FÕ@}àïnæ´öé÷¦¼Þ[nf€E;´9«ŸXÉx –DÎYW¡­Ûm6Þ̈íâTAÜw4Ë=NÊêwŽ9ÃȽV´AÀÉÐÛ ¢9cŽdò¤Yªµb·„´Èï–á#aƒ’™â·Jჴ6w÷¤®)]ØýºßÉ’0cÆ1íPiþ±Ó#f‚?†r{VÁûƒÚ€I=hMV(¤zçb³5-ÂKØîå¶F~þ‡ëZ÷wÙ@gö ïYpø‹I¼Ræî?—øO©6&j%¼šqµhÂFé´¢Õk}ÚÂÙc·Qx u4iš­¶ª­Ù¿w‘ƒÒ¯6 OݤØ+ä"ŠÁñ%íÅ”1ÜÚ¦é>ë·÷­üŽÕÒ¸ˆ„ˆ¸”õ©[Œã"½»ñœ¶od-óJGÊ+¢Òt‹m*ÔF¬Ù'sî°WÅH·kmofÁ‹íÚxŸ¥u!X…a›J·pÒàše°¹k¤…|â?ÖJž=6ØÎ·O yʸÞG5* Ž{欙•FT]Žã…@^)J »ÁÎ;SL §éBÿ«#9>” [¤‡s¥LUxæ£F ~nyÅ<°/·×¡¡’…pÂ"ñUm£î6•š¶¤œóÒ¡Ü~cÍ5ØwÌ£=ô§FåœàpÕÇx®úõ.-­,·fþ é,LËg˜þô»=)répLÒáH³žþ• ̈Áw¡osQ’í¥>öÞ yH÷:ñ´{‡JÏCš¤®6Ï\S–õ×¥4‘’@ÕkÍ­´p³î(£sõ?žK#>‚¦ÖÐW·l ÒŽ:×+â/I¦_Gin¿Øö­û[û{˜”Ç›iq y! ã½Yñ¥ä¤À« *Æ0«ØVaðú¾¯ö¶œÄ7jÞ ¨ÆI¢â9»­[½Eî$4e¸_jÑšÂ6ÓÔð§¡ô5¥€I¤a•Å;ˆä-|4ër^b ÓoS]¥¼6è1rGSRÈëmn¹¦E)Èàô¡°HŽêîHY™~~Š{×/©Æ±kÈ ^8*´¼E¦]Ý]$Öè]èAõ¥Òt)e»ºÈ”tVëM4‡c7ÄVòG|³3 žÂ¢Õ>Ðl-æ@[…^˜®²î˜ªÈ€< %Óí®‚ùÑ+ÀúQÌ+úÍž¦p7ÝGÅ „ˆs“¸WJ bX ¬­fÍn-•BüøàО£F8¾Žm";XAóÙŠ~»Ùì-#ÇÝ<Ÿz}†šú{,ÒüÎGÐUýNº¶òØgoÌ 6К ÓÖ%Óä‘–ØwŸÂªøy#]C"î\Ãñ¦èöSy3obªà®Úγ[ÅãµfS÷Y‡Ö’°:å˜6Á‘qåvöªk >ƒæ˜‡˜ ~‡~õšßIq).Jíf&³-oŒšd°¢žO¦i¡ÓmἋ!XªƒÐß­Ga Åuw¹R§i7[,‹+FJšÑ²ˆ"Ku*àÉ“ô7a™š4R›·pß"?½2þ9!×W‹¤Õ¿´¬t„LÒ‘$ÎñXv±,ÚäÑú– zš,˜Ëšˆ‹^ ¶|D‡’;×Oor—0,ˆÙÈ⸽bÕ!¾ˆ2 ª«­Hc·¶…" Q÷}h’VÅÕ5ôûRç™?€V~.” /fïŠoŠc”´2°^;ö¥}&Ôøl\ˆ¿{´ŠVì>®\Þêì$áNÒº Ûø´øLòœã õ5Íx^4&IëÀ&§‘S^ÔåÛÂÇ«zÐÒ¸“%²ñ_Ún 2F©“Ãg ü«vçR‚ÆØO3±RxQÔý+ÏîôóeªýšVÂçïµ±âVþÏ·›yÛ)ïïCŠ{ÙÖ[ßÛÝÙùé'ÉŽOL}i,ukkÙdH$ éÁÅrU¥ÍÖ–àÎØHÍ3¨뫶ÆNïzN(.Γ\ÖbÓ†˜ž•5§ˆ,®v1™‚üÀ×!â[y#Ô˳—2 ⛆¯$g„w{SQAvvzf´š…ÝÂ"ñÆOCZ;Ÿp#¥y¦“yw§ß%]ñê+Ò-¥©Œœö4¤¬¼Ô °UiÜ*·­C>¯g >y™J¨ÉÚy®7Äq¨k¿g€ûVUöŸq`È.1‚ 4ÔSlôÍ;SƒS€Ü[†ÛÓ R\ê–¶L‰<ÊŒýõ®GKi´MïKnó9~µ…:Ë{k%äÓeêÍœþ¹5ÎãÄš‚Ûhï$`fC±?­exkK°Ô4Ò.£C`‘Ö±îMÌÞ„Ì,o…ÏB+GÁ­# „RЦ¬´©Ñ隦•r÷±lôÜ~è¨üC/Û4{„·tb£:Ö>©â[‹‹“af|ì-޵ŽtÝZÊ)¥•e åˆ<Ô¨õc'ðuªÜkŠÒc1.à=ëÓ'˜ÈIÏcȯ%Ð弆êSb»¦(W=Å>ÛUÔ4ýWÍ™äÞ÷ŠÝ)Î7Ø“ÔälKAùÐw “Ž‚¹k ;›fâRc¹‹/jZ=œO#É)òi(\g¦›È™ü±*W<Ô’?ÇA^Q¿PÒ®’æeq)ç÷ t7:½îµf"°FÈ\Èýþ‚ŽA\ëÖåL™W :a[‘LÔD·eÄ0º¬Ž¸EfãŸë^k£j3iú GiíÖ§Öo¯¢Õ<‘;b6?çO’ÃÔì¼1¡)d–RLÒpFxÕ¶&ŽF*ާž@ë\Åίkáĸ0î™— þϽrº¯ug¨4ª^Bù;:äý;Rä¾£¹éòÜys*Ëv®wÅóßC§(µÊ?|ޏ®FMsP²ÜLÎY$Ü#ö®âçX¶IÝ Û*#nôZÄÜã<5ªÛi—ŒÓ)Rÿuý«Ò¬îà¼A$2£9Áæ¼Ò="]^9îí`X”6D}Tµ¹ºÑµÙ#ØÙdíŠn*CÔõæ;yôª£P¶yü¿9 ʃȨ¾ÙçÙ$éϘy®¡ö¨É;‡RìJµDcÐgªÏuQ4’:¬j71¨ ÔmîãÌFÞ„âÖ÷RñšÛÆ|¥N%~Çÿ¯Ph‘ÜhúçÙ.*ȧo¿¸ªP šúÅ„z®¡"6©°!æîþµ“wáxmfþ&q…n«' ¿JÈÕ¡–×Yw¶àÙÜzÔWöµ 3HIãRLW=;FÓíìôôH1µ€Ëâ5yÔ \·ÌøJi"Ó# !pç ÕkÄúÓXÛ¤®n&û˜íSm@»?‰´ëKµ´’L9ãpè+XH%€‘´†ÁÜ;×’êZMõ¦.făs8í[Þ{Ù£–G™Ìc 3Ó"Ÿ(7cÄòFçf.>ñô®Å|O§­ÒÙ£>'N~µÈ_¨ºñL±É“¾m‡QVS+»ÓŠ£á­.ßS»—í˜"çñ©QIŽæµÏŽ#HÖ;XOl´Ã#ð­ûÚÍ£=ô¹†ÈÆOµp:Οoº--Ã$d®OךÓ×,ÏO´±‰÷FY‰#«Ñʂʼn|k9¾%aÔ·Þ`wcÔVæ§âxôÛæEóbVíïXV ªé¶Ð Å2KŒgÚâk·ÓnÖárFMA©¹‹m¿±–ú]¨ý<¾äÔ¶ž$µºÓ%Ô%S—ÁSÚ¹¯èÐ\érÜ\Ĥû£<§øVÕ¶‡Ó$÷<÷Irž™âxõ-cËx• 7ÈÅyÐj:´Tiúž}Mq>†1­ÈdPY2S=Žy©üi3IªÅ]BÜôæ†!‹5fÔT¤A"c…G^Þµ“òÛx›í˜âRÅPgô¯Cµ·Y#F9¨ÃwW(¾1¡LØ9¦»ý[Äš¢ê1Kå=ºÇÊ!G½uúf¤ú¦“ö˜—l̤.zf—_Ò`Ô4éÌ •§5Ëø>âU’X‹’€†Uý*t`sÚŒw«ËÐ-s¿ ­tžÐ5{ÿ´ÏH•õ=óÒ¨jæÝ¼[ænýÞõÜTãšô4ºˆÇFݹyÚrGMè|i=êY¦òÔ7ZàµOÝC©”¶R7Áø«§´Ô$Ôlbàh]Ýn£Þ³°îj¤û†O­JF“÷j$ŒˆcŸz°œÃ€sŠ’¢ÄÜPü´ôrOšb¯Íót©6÷:Ò½ò(\dûP¹ÏjR`qHcÆ1œSoÍ0> Óð?…8 ±§d) «*e²C~ôÚëNv½B&Á¢áb\äôªsþóïv©ÚPW޵ Ç®‹…ˆZ pN´*nsÖ™Žh¸ÈSå8ÆjícŠFòÆ7š¶pPSv|ùÍ –é2”q”ô¨#Òà·Wؼ?߯…ç==é@ãó¢â±…o¡|du_(6U}ëBòÞYmdŠ>n9è^Ú}BÆM–›ö<Ë#˜àöÎë¦ßR,œ?Τv5Ý´a†Z€Ù£HŒ1Í BhÉÑ´Û…òîg™˜ªáR²|Abö·Í2 äEvÈ€cŽ‚™5´WQ¤@W½ VaË¡Îx~þíÔ¬¿4* Õ-2B<@I\åŽ+¥ nĸ\Qg¥ÛZÜ=¦óœÓº¬s~%Ïö¬yËaA*=k Óå¹’ÐIp‚0@Ú;⋽+­F;¢I+“Ö´g¥\ôÇ@(rÒÁcÅ6æM:)FöPrqÚ³ìõIgÒÚÆ(Ü!LŽ€UŸê7F¶iÂ2óïUô­N xЧ•'ñ1èÔÖ¨L<+)ŽòhXa™zQTD×:f¸ì€îó8¹­=“ÄROp{f·“@µMLÞHK99Úz Ô-sŠÔ–ê+Ñ5×úÇùÇ=lj·BãÉ!É5£¯èÒê¼J6¡Ãvâ™}¢Ku¤$˜Û…4s q Ð$TÑ%#¢†ÝõÅeør[x572K´²•üÖý†˜ÖºL¶à‘‘²­TÐt„™ï¢;÷¹íNèFoŠÏüMAVÎq¥M±rtÈíì’F“hV+ü#Ò´üI¡Éuo%¬yg8lzU:ÖÛGUä¾þ[©©6¬;Æ“ª .ëlÐ#8vn¢½U¡I£l†éŽÕçž" >¹ ·îÇN滋¥·ÒàŽ@U•"”•Ð#½›ÊñVùWisïRx²H§’Œ €Ã¯­Câ%µ¼ÔÇ‘(±Øàúбwá“™æ·È«¹³ÐsM-’ÝI¾Û̱í_ƨxvÖÆîr·r©Ê©l?JÒðœböÆæÒoõg<ûô¬Û¯ ß[ê>T(æ2ß+ŽÔ^Â6üDŠº;,X(¤` «àðX\@à ·}§ËoáÙ`vÜê7ïY>‘£‘ÁVÚÿ.E>ƒ3X¬Zþ\• ?-ø×©Éþ¸(ù]‡z×7®xjy3ul ˨ëøSlôNãD—t²ªý凡4´ 2§…eHõ%™ëÖ´¼id`¹Qµ·mozıÑ5.|ÅŽHö6I5±­±º’ÓF…žIüÌÇ¿¯áO­Ð Ö=OÃ) ü‚ ýjæ"²“Oñ6¬Ë¹cé]í‹Øh†| „xýªó½Bõ¿yn£e”¶w㯦*WQ¥¡ÓøÈ¨Óm+¸¶FzÔþ T}6O›Üûp+5ôûÍ näÌ“Ÿ™PõU¬m-µ;y¤ŠÌ8=ÀúÕ%}Æþ¯§‹¿ƶʧ€òè9=k7Ä«³_@Ão 8úšêô{¶…Yˆ7s#÷5ËxŽÊøëyugß„RN̯S`¾›¶bà×3àÄCªI¸bƒn{s[ ¡‡&KåVr˜uàk9–þK³¶í G$ПºÂÆn¾3â9Fݤ¸­“.™ L ÇðñTu»u/Ì– ‘¿»Šèí|<¯§›y¾áó³âõü(ÒÁb¯….a“GH•‚ÈŒr*£C=«¨È!€ëY×z.©£_n%*Ç*ñô®ƒIðÜ·íö½aŒŒ,g¥&ìî&lxx0ðÕ®ð3³ŒýjŠDØ7À¤zèL! X¢P¨œ+ TÐF² ‰RLp»¾SS­ÆôÐÉðtŠÖ®¥¹Ý÷G\WG5Œw×±ÊÑ)hA!­qúw„õHuY …WSÔW~‘4áPÁ=ÍTš¾‚Ižs¬DncïMñ“&¡§ª*ÆdVêޔ館rº†±u¨èÉ…¼ GœqÀ5'„5¬l™HYõ®ŠÇI‚ß@šÉHZ?À¶gøcD{9šiâÛ+ŒöÍ;ÉßÜ(×&¹Á+çãëŸé[šÆ«e}áø’Ý.ñò±Éϵnk¾‚ü›‹vòåØÕOøAm›í7ŒEáAíïEÕ‚Å_é’G¤]›‘±.zžqY^ÔáÒ®çY·ˆÜ€Þ•Ýk1éZs\µ7‹/ Ù~lyÜO¡®Ž}ÚIL±Á›šlBL’%ÐÞŒ:Q̇Êr>×­·Ù·™.ϯµvÜÜÚèRNÑ©”.à«Û5bÛE²´€ÅmByÏÿUO\{RnákeáýF[-\¿’Ò4¬A_Lší5ý}ZšØ´*ž¸5zßB‚ÒèÍAI9&µÐ c§½)JÃHàt®XÎlöÊî‘q°ûÇÔ4½FMTùnÜ:Wª<)/ É÷¬ãfñÝBÿhS ×\i~s6ù$P‹ŽÄŽ•Ÿáý$Ú„;I‘‰${ènôøg½ŠK‰ƒå‹=ýjü6ê­•QŽØô¥{ŽÄ~vÔ"š×åY‡ïrzWI£hðØYîåa‚ÏþzVÄÖÞh_ï/JiÄJP.9÷¢÷Æ4zV6§çÉl¾bœœô&¯](» :`TñÀ¦MǵK4BRqJã±VMâ*H«6$ÉÝRM½@¥Ú"UÚ1žô‰u£pfÊœI´c9æ• ‘“Hw¤€H<ÐŽH!‡4à¡3Î=é¥ÄjNri †`΢¤L¬|šj¸d†8¥M’>Ô˜û¹4ƒ‘üéÀm8Ó•Ž´ Q·Í=HÅ0"õ æ•p;š$銗š“i'ñ¦È22{RÅ]¼iÞnÞ…¿ N6ÓHÇJã¹4ª "h9-ÅhBœjaÇ5]sš°:Š`Ç“ÅE#ü¼Ó•²XzTw Æ<¨¦I!lôëIFÏz-äÜ­‘Ȩà,Ò¸o˜‰Tƒ3I"+ÈíÍ6%"w÷§+¯™ÉéH @åF?€8ëL, k:÷¹¤P÷(äÕF”œí4ŽÅ^)6ðTŠM =M*¯4Æ*B¿-!‘:ár)¾PiÈ â¤–*Y†=)R2¸‰Ö˜†àõ=(5#g4Ï^(2¢€§ÓCqLtȦ·È3éJ23Kœ€(ªÀ¨"žÅ!Å*¨Í!\§-F™Ô©Ö€µAɧ·*1M “O#åzÐS Ô¸{šjŽèiý5Ð&›"®QÍHäàb‘ùÍ' Ö¤*:Ó3‘‚1ÅLÀ")h7PÒmµñ*Ž2;VSx2Ü(o´H§=+¨;p ¤Èõ§ÌÖÀQ°±ƒN„C€:±îjþØjI2)Q€íÍîˆV?7JBª òqíNÀ=©d^Bô¢àR–)#›z«GjˆùŒFàHô5¦3N”ã@§qX¯qo·=AúWžjZF º³Àçbw^õéKŒ2ƒøS‘T>OÞ¢ác•м0m¤[«Ì—Î@ì+¬u޼¥8ñÒ”—ëD¥qXó{F¹°Ô]¬cfÜv¦Z¾³u·ŒÌÊF 7LW§2)ò¨B6°§Ï¥ƒ”¥¢iɧX${~sË“ëZùÞ¡»ô¤ c»z›…ŠzŒ1› ·eH®cÁçtsEå‚‚Lîú×c"]®SÆ 6;X-%¼KêÀ´\%X°=êB›åÅ63 EHØ“ÒÎkÅwóXØfæN7v©x7K- —ós$„ª“]dФ yˆ¸iȉATt©;ƒÈ¨ x=)d´…ñæÆ¬z€y§JÊiAÂdj@R8à „YÀCþéC?ß rjÀLÇÉ÷¡sÈ¡\#·Ž1ƒíR40à~ì69REIMFxNâ%–' ¿)•QÓ÷ÂM¸E6­`¹ÝÇQU ¶X¦m§oé€ï³‚ÅŒh²7Þ)À?SV£Œ*lÛ–Ä€Nõ eÀÁäu¥~€G*$‹ÏRF€ª8Æ*\3Þ„Í7i'gaJ‘*¾@\Ò³`õëA9Nw¥°ÃÈû޹éMi"F ÎO š\Ÿ/ƒ–ì+“³Ñu)µÆ½¾r#F&5Šv¾àu»QFOÊ3Ö“³ƒŸJÁÕa¿½Ô-màGm¾ICí[ ¹TàcëE…q…>`ÄT¥œ ÇâsŸ»R†m¸ b(Y#,Ò+'pEZžÝ” caÔU¤äp})Q‹FAšì;%iÞ«òzûÑf’ðÙ=Mh*€§Ši\öh¸/4Øu+#m7*ãŽÆ¸û‡åî¿qv_ív®èp„ ‰7n¦„`é>´Ó1+~þaÑÛ?ÕÑD€äœ›Æ÷4øÔ•ùzԶƆŒ‚ÀwUõ+8n¾Í$è’ú·*ÉÏ–2äWš^ø{\¾½žé­ŽòIv>˜§†ÏKYP“±”’x Ô70,Î$G ©çå’Á­Ø:FÍ:4™»úÕˆî5ëC½¥»ÆpÀ‚ÄUrvzœ`„9úÓ²ûr;ךÚxËP´›e×ïmaƒ]©×l×F¡9‰‡AëéS(‚‘@ë·‡ÄK§¬•N$nÀzԺξln#´Š/2âB†8Óô]ZÏVŠK˜,ã—õö®Z¾¸"y\¾Ô“å(ëaÜØÖôMvyc¸ úâ7åG§¸®³AŽî×I…/¤˜rKvö«6¯æ[Æä˜sô¬=cÅöHÇL´ÕÉSð¹÷¤l)úÒm;xSºœë– ýés–õþ” :aFïšœß(ô„ᇂ)ê4™ÉÈ ÀýhFRoÚ9¦•}Áâ‘×…½+Æ‘—"áp Ž3×µ´Æÿ)ÏzŽåÜi‰ äÑp¹PWŠ{çzéšqù†*2NqN_¼(•æ˜Ç-C`6híœPsŠR QŠaÝÆiáˆ_¥9ˆ ôSH˽iÏ€zÐÆqÏJ24>FÍJ…q“MdÓF:Sñš`5sÈÎcQž[#œw© ÈÈëYº›]¥Œ¿b@gÆ@ïH ’7zv®~oøHÆ–òñËúç-|W¨[N#¿ÚÑçŽG5uz§ÄMv¬J7ezÕÆ=ÅsÖ¢ãަݑœjâ$ñ¼("†Þ'ìǦ? ëlÛÍ·Š`Œ¥†Nî*Z°"È^¼óÔR37–Aä/$´ìnl/%»Òmà‘Œcæ¤Qç:‡/ÖöU€„‰[hR¼àu­Kß´:tr[[¼’:òì¼\÷ŒU"ñ›SoÊ ã©ï]r¢ðƒÉ°2ù=®*í¡&N…ã»›µµ¹Ìgm¡Ðr¿ýjìÖF•NO¸ë^_áL¯ˆ`+ÇÞçØ×ª¨,[¸¡è$1m"žAE”Ñ”=8©c•ƒ HÒ)òõ¤€1fÍ è*Qò—­ICFpÀô¨›s'ËØÔ¨IÎE1T SÝmÝ©A'µ(ž”§…☄c‘KrsҚŸ†‡¯\£œä×+«xº(/þÃn }Û ·D®¨®r3€zàf¼ÿƵŒKy +#È|À[©íÅTA” Ô¥²ñË!ÆûFqŒâ½2& ᲌÷«Ì'ÒeºÔ­#<ª®ùèžÿ•z5½Õ¬1¤QÜÄÆ5 NúsÛA&cx§@·–ÒK¨ q#½sV×o ^C!̰ɔUê=k¸Ôµ{{ ¤šE )ƒֹ k6µðÕìïó¤ËþÉéNî Óð K9¥Êí| ÉñŒb/©è£ Å?Á²ÛÊÖ. itco|sPøá&þÜóÜhÆÓëD~ ;«™Ì:Ó/U‹wé^u ]Þý®x`MóÝ ¤?ažµßiˆoü=sD°sèTb¼îþÏPÐõ2Å™I 7øÒPkCÐtZép– ºå—ÝO=F;W£¬iâå†O™|ÖQšê¼+«ßêV²5Ø5,мµr¶1Èž+’U·’r“’U#=Í è._ñùâЩùv³ØsZþ ¸¶:’›|üîƱüt…îa±ˆÉ)‚H9éMðNŸq5óÎÁ’R¹Æ7sM¯tg¡È¥cGàÓÃersN”(<ñÏzH‚mâ³)ÝÈïS.@¨Ñvô0”˜ ã€ó¶†I¦1ÇNiû€= d¼€G€2YqÞž: f0 ¯&ž¤¿ 1“IÊ«ÐÔGæÎÚql(‹»w•êi6á3“š@Á{ñFüý(à>^:Òx&“~;摎H¤3ާ LuH+B¢ŒP)ˆrœqßòy§|¸ç4§ R¹}é!sOŒÒ1”Zp$žôìzÒ¯¿Jlxgæœ[9\Ò€ö¦ùþ´)ó±â¢¼¹ŽÚÞK‰~ê©f S)ˆ;ª–¥g£o-¡r±ÉŽGQŠ. «ë¶Ú¿îãÓA•Uoâú×8Öó$» lsŽãÿ­^­aá?NO2‹Êÿ'òí\AA´zq\Šø=aÔ¡»µ˜Âªs·¹®·”*•è’ZCvÍÈTî†EQÖTţ̉ `èWlcѧ‹R–êXž5_•wZïcÂ!ç"‰»‰ àíDg1šŠ%s,…ºgŠ˜|ªp*F98ëHs»4™äsõ£vN ­(É4»³M '~h ¹‹kε٥›ÄºÁ,ÅN#ˆ©Æ}kÐX°sŽ”ÑÎvŒž§Ó°4y©ÒµéÞ{—‰”•ún€V8Óµ ìMµÈõ!Oô¯f §‚>”ÓóI<úSç)çþðä÷¯æêXáNU[#'ñ®å,¡[Sl ì#snAÉXF x늖Ƒ›§hTÍ$1n‘ŽA=kǰFmíܯÍÊn•ÙÂÁ¶ãYºÆ‹¯i;¾ØÎ@õ¡=n)øNã~ž°åP€}þÒ´õ=*ßU³ò.)œƒÜTöÐ$0ˆc]›FáRa“Þ‡¸%Яog­²Ã@0íõ¥ŽÊwfŽ5VfˆêjnCà‚+M%p² º±·½ÿˆR@:@jK{h`„$1¢ û¡F)wò ®æ8£QØ‘°pÍ<"€#éB‘ÓŽôÖV*NqHRÌÄNû¤šgÌFisÈ€HN 4¡GÉn < +ÐFèñÜP:ý㑚M‹’*8$ 4‘“’8©dtsêq@ ÀAÁ£+ÆÐ}èç$ö"£‘ŠDÌŸ3ã@É"’BÅAi#Ê›æÀcØTåW D’1OP@9éNÚ3À¦»b“ªT)ÍÃŒ“À¦¸æ˜«’xâ€9eã“R šˆ––7fàŽ*É$9¥è)Zc6ÑŠ)©~aŒSf›4»ÁÉô¦ƒ"‘ŒóU§”ž åŽ}iTc9¤ØìWº¥‡ÿIiÛpOj!ùSLvô¨üÅ9ÃtëJ¤8*“Rc8À¦(ɧ•9ëEÀnYrÃG\SU„Šggš~Üå}iÚ2{b€È@iGÞœûP:Î?Ú¦ª†n:JHàXœR®sÍ<¼zP!é‚ÇšÇJšGCÀP!d\€H4ˆy¢ŸÉc“Æ(6 ã!9LþuQžêFø(Î1ÚšHgÚ(ÁcÖ˜‹M=£ ý©[qòÕ"e‚l]œúUΫ»¯µ;qKŒŽ´ÇcN(=»ÓÈÊŒuªä±Ô§å…*”îëNã$šj@9=ˆÚi£€>”@ ¹;H§“•ÏOz;Oµ9º8â€&N™'¥5†J“GE9àPÇ"œNS2iÇ€ 0Á4mÜN('åcš@Ô¬ F͵°)ÁɆ¸)ŒÄ ÔŒN)p2{Ó±|‚4‘œ pbM!„|)2sBõ4Š£?HpcÊžEùy¦²N*ñ@ 1Þ¼äR1MÞW@ § ç­)9ïL^ 4 äÐa™Xƒ÷jTSÅ1…GžqH ·qKŸ—ëQôRi:92Å[¥?85]ycRŒº}(!V<Šc½M1¼ÜN'“@ãR+S SÂз`äP[¡4?ÊÀvªWòº@ܳu¦"îG˜E8Ó–ÆzúÓº¯|ÑË>R©ÉÅìcŠBvÓƒëNÊ™j7ùºÓ”`Ð1.NÎJq<ç½;`Ðã€Ä•w¡FGN”Œ ϧäN(c´æ”6èÁi‡““NÆÑÞ€œ·µNÀƒÎi½GÒ€®)® ´ücŸjTPN(‡=¨#"’^ 'm.võ4),ؤÆâ3R)ÛÒ.Å!ÂŽ´’g©4ù¹ôÍ!&ŠŽj=ÄšC?ÿÙleptonica-1.70/prog/jpegio_reg.c0000664000175000017500000001517112267151073014745 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jpegio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is a Leptonica regression test for jpeg I/O * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images and image * metadata, between Pix and compressed data in jpeg format. * * This only tests properly written jpeg files. To test * reading of corrupted jpeg files to insure that the * reader does not crash, use prog/corrupttest.c. */ #include #include "allheaders.h" /* Needed for HAVE_LIBJPEG */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ void DoJpegTest1(L_REGPARAMS *rp, const char *fname); void DoJpegTest2(L_REGPARAMS *rp, const char *fname); void DoJpegTest3(L_REGPARAMS *rp, const char *fname); int main(int argc, char **argv) { L_REGPARAMS *rp; #if !HAVE_LIBJPEG fprintf(stderr, "jpegio is not enabled\n" "See environ.h: #define HAVE_LIBJPEG\n" "See prog/Makefile: link in -ljpeg\n\n"); return 0; #endif /* abort */ if (regTestSetup(argc, argv, &rp)) return 1; DoJpegTest1(rp, "test8.jpg"); DoJpegTest1(rp, "fish24.jpg"); DoJpegTest1(rp, "test24.jpg"); DoJpegTest2(rp, "lucasta.150.jpg"); DoJpegTest2(rp, "tetons.jpg"); DoJpegTest3(rp, "karen8.jpg"); regTestCleanup(rp); return 0; } void DoJpegTest1(L_REGPARAMS *rp, const char *fname) { size_t size; l_uint8 *data; char buf[256]; PIX *pixs, *pix1, *pix2, *pix3, *pix4, *pix5; /* Test file read/write (general functions) */ pixs = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/jpegio.%d.jpg", rp->index + 1); pixWrite(buf, pixs, IFF_JFIF_JPEG); pix1 = pixRead(buf); regTestCompareSimilarPix(rp, pixs, pix1, 6, 0.01, 0); pixDisplayWithTitle(pix1, 500, 100, "pix1", rp->display); /* Test memory read/write (general functions) */ pixWriteMemJpeg(&data, &size, pixs, 75, 0); pix2 = pixReadMem(data, size); regTestComparePix(rp, pix1, pix2); lept_free(data); /* Test file read/write (specialized jpeg functions) */ pix3 = pixReadJpeg(fname, 0, 1, NULL); regTestComparePix(rp, pixs, pix3); snprintf(buf, sizeof(buf), "/tmp/jpegio.%d.jpg", rp->index + 1); pixWriteJpeg(buf, pix3, 75, 0); pix4 = pixReadJpeg(buf, 0, 1, NULL); regTestComparePix(rp, pix2, pix4); /* Test memory read/write (specialized jpeg functions) */ pixWriteMemJpeg(&data, &size, pixs, 75, 0); pix5 = pixReadMemJpeg(data, size, 0, 1, NULL, 0); regTestComparePix(rp, pix4, pix5); lept_free(data); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return; } void DoJpegTest2(L_REGPARAMS *rp, const char *fname) { l_int32 w1, h1, bps1, spp1, w2, h2, bps2, spp2, format1, format2; size_t size; l_uint8 *data; PIX *pixs; /* Test header reading (specialized jpeg functions) */ readHeaderJpeg(fname, &w1, &h1, &spp1, NULL, NULL); pixs = pixRead(fname); pixWriteMemJpeg(&data, &size, pixs, 75, 0); readHeaderMemJpeg(data, size, &w2, &h2, &spp2, NULL, NULL); regTestCompareValues(rp, w1, w2, 0.0); regTestCompareValues(rp, h1, h2, 0.0); regTestCompareValues(rp, spp1, spp2, 0.0); lept_free(data); /* Test header reading (general jpeg functions) */ pixReadHeader(fname, &format1, &w1, &h1, &bps1, &spp1, NULL); pixWriteMem(&data, &size, pixs, IFF_JFIF_JPEG); pixReadHeaderMem(data, size, &format2, &w2, &h2, &bps2, &spp2, NULL); regTestCompareValues(rp, format1, format2, 0.0); regTestCompareValues(rp, w1, w2, 0.0); regTestCompareValues(rp, h1, h2, 0.0); regTestCompareValues(rp, bps1, bps2, 0.0); regTestCompareValues(rp, bps1, 8, 0.0); regTestCompareValues(rp, spp1, spp2, 0.0); fprintf(stderr, "w = %d, h = %d, bps = %d, spp = %d, format = %d\n", w1, h1, bps1, spp1, format1); pixDestroy(&pixs); lept_free(data); return; } void DoJpegTest3(L_REGPARAMS *rp, const char *fname) { char buf[256]; char comment1[256]; l_uint8 *comment2; l_int32 xres, yres; FILE *fp; PIX *pixs; /* Test special comment and resolution readers */ pixs = pixRead(fname); snprintf(comment1, sizeof(comment1), "Test %d", rp->index + 1); pixSetText(pixs, comment1); pixSetResolution(pixs, 137, 137); snprintf(buf, sizeof(buf), "/tmp/jpegio.%d.jpg", rp->index + 1); pixWrite(buf, pixs, IFF_JFIF_JPEG); regTestCheckFile(rp, buf); fp = lept_fopen(buf, "rb"); fgetJpegResolution(fp, &xres, &yres); fgetJpegComment(fp, &comment2); if (!comment2) comment2 = (l_uint8 *)stringNew(""); lept_fclose(fp); regTestCompareValues(rp, xres, 137, 0.0); regTestCompareValues(rp, yres, 137, 0.0); regTestCompareStrings(rp, (l_uint8 *)comment1, strlen(comment1), comment2, strlen((char *)comment2)); fprintf(stderr, "xres = %d, yres = %d, comment = %s\n", xres, yres, comment1); lept_free(comment2); pixDestroy(&pixs); return; } leptonica-1.70/prog/feyn-word.tif0000444000175000017500000000065211112654433015073 0ustar dandanII*ì&¡“ÿÿÿÈ7ì g †@&háÓÒzN¤ÿþ“ÿ¾®BB_‚KÄø‚öCô)¡a2Z‘GÆÂ?!Hôq¶.ÐvškÝ6øÑYœæÞ0ŽMzKi„¦Õ°Ý6Ž?­¥]{Ïé[§ÿw½ý¦«Wÿþ¶‚â«_d×~Ä£Õ•OÝ?õð^?úý_þ×ÿôpüð'ßzÿ¤«¯ÛKþ¯ÿþÖ×ïZ´œ„ü0 ºþÒµ»W^)Š ¦±ØAí…´ðÂjÓAÓqL^ Öü&gv›ÄDFs „ ¾ƒ ŸK¡ý==pøÀ@Ã88䚢(HHleptonica-1.70/prog/paintmask_reg.c0000640000175000017500000002014512265245701015446 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * paintmask_reg.c * * Regression test for painting through a mask onto various * depth images. * * This file shows how one can start with a 32 bpp RGB image and * derive from it the following: * 8 bpp color, cmapped * 4 bpp color, cmapped * 2 bpp color, cmapped * 8 bpp gray * 4 bpp gray * 4 bpp gray, cmapped * 2 bpp gray * 2 bpp gray, cmapped * * For each of these, pixClipMasked() is used to place a 1 bpp * mask over part of the image, clip out the rectangular region * supporting the mask, and paint a given color through the * mask onto the result. * * Finally we do a clip/mask operation on 1 bpp sources. * * If you run 'paintmask_reg display', a pdf of the results is made. */ #include "allheaders.h" int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixs8, *pixm, *pixt1, *pixt2, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Start with a 32 bpp image and a mask. Use the * same mask for all clip/masked operations. */ pixs = pixRead("test24.jpg"); pixt1 = pixRead("rabi.png"); box = boxCreate(303, 1983, 800, 500); pixm = pixClipRectangle(pixt1, box, NULL); pixInvert(pixm, pixm); boxDestroy(&box); box = boxCreate(100, 100, 800, 500); /* clips on pixs and derivatives */ pixt2 = pixClipRectangle(pixs, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* 0 */ pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); /* Clip 32 bpp RGB */ pixd = pixClipMasked(pixs, pixm, 100, 100, 0x03c08000); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pixd, L_INSERT); /* Clip 8 bpp colormapped */ pixt1 = pixMedianCutQuant(pixs, 0); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 2 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x03c08000); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 4 bpp colormapped */ pixt1 = pixOctreeQuantNumColors(pixs, 16, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 4 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x03c08000); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 2 bpp colormapped */ pixt1 = pixMedianCutQuantGeneral(pixs, 0, 2, 4, 5, 1, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 6 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x03608000); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 7 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 8 bpp gray */ pixs8 = pixConvertRGBToLuminance(pixs); pixt2 = pixClipRectangle(pixs8, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_JFIF_JPEG); /* 8 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixs8, pixm, 100, 100, 90); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 9 */ pixaAddPix(pixa, pixd, L_INSERT); /* Clip 4 bpp gray */ pixt1 = pixThresholdTo4bpp(pixs8, 16, 0); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 10 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 11 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 5); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 12 */ pixaAddPix(pixa, pixd, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 15); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 13 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 4 bpp gray, colormapped */ pixt1 = pixThresholdTo4bpp(pixs8, 16, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 14 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x55555500); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 15 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 2 bpp gray */ pixt1 = pixThresholdTo2bpp(pixs8, 4, 0); pixt2 = pixClipRectangle(pixt1, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 16 */ pixaAddPix(pixa, pixt2, L_INSERT); pixd = pixClipMasked(pixt1, pixm, 100, 100, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 17 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); /* Clip 2 bpp gray, colormapped */ pixt1 = pixThresholdTo2bpp(pixs8, 4, 1); pixt2 = pixClipRectangle(pixt1, box, NULL); pixd = pixClipMasked(pixt1, pixm, 100, 100, 0x55555500); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 18 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixm); pixDestroy(&pixs); pixDestroy(&pixs8); boxDestroy(&box); /* Finally, do the 1 bpp painting through clipped region. * We start with two 1 bpp text sources, use the inverse * of the 2nd for the mask (so we take all of the 1st * pixels under this mask), and for the remainder, which * are the fg pixels in the 2nd, we paint them black (1). * So this is a simple and fast blending of two 1 bpp pix. */ pixs = pixRead("feyn.tif"); box = boxCreate(670, 827, 800, 500); pixt2 = pixClipRectangle(pixs, box, NULL); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 19 */ pixaAddPix(pixa, pixt2, L_INSERT); boxDestroy(&box); pixt1 = pixRead("rabi.png"); box = boxCreate(303, 1983, 800, 500); pixm = pixClipRectangle(pixt1, box, NULL); pixInvert(pixm, pixm); regTestWritePixAndCheck(rp, pixm, IFF_PNG); /* 20 */ pixaAddPix(pixa, pixm, L_INSERT); pixd = pixClipMasked(pixs, pixm, 670, 827, 1); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 21 */ pixaAddPix(pixa, pixd, L_INSERT); pixDestroy(&pixs); pixDestroy(&pixt1); boxDestroy(&box); /* If in testing mode, make a pdf */ if (rp->display) { L_INFO("Output written to /tmp/paintmask.pdf\n", rp->testname); pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "Paint through mask", "/tmp/paintmask.pdf"); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.70/prog/findpattern3.c0000644000175000017500000001326512242266442015234 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * findpattern3.c * * findpattern3 * * This is setup with input parameters to work on feyn.tif. * * This uses pixGenerateSelBoundary() to generate the sels. * * (1) We extract a "c" bitmap, generate a hit-miss sel, and * then produce several 4 bpp colormapped renditions, * with the pattern either removed or highlighted. * * (2) We do the same with the word "Caltech". */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixc, *pixp, *pixsel, *pixhmt; PIX *pixd1, *pixd2, *pixd3; SEL *selhm; static char mainName[] = "findpattern3"; if (argc != 1) return ERROR_INT(" Syntax: findpattern3", mainName, 1); /* -------------------------------------------- * * Extract the pattern for a single character * * ---------------------------------------------*/ pixs = pixRead("feyn.tif"); box = boxCreate(599, 1055, 18, 23); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelBoundary(pixc, 1, 2, 2, 2, 1, 1, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/junkpixsel1", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); fprintf(stderr, "Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/junkpixd11", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/junkpixd12", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/junkpixr1", pixd3, IFF_PNG); boxDestroy(&box); selDestroy(&selhm); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); /* -------------------------------------------- * * Extract the pattern for a word * * ---------------------------------------------*/ box = boxCreate(208, 872, 130, 35); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelBoundary(pixc, 2, 2, 1, 4, 1, 1, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/junkpixsel2", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); fprintf(stderr, "Time to find word patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/junkpixd21", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/junkpixd22", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/junkpixr2", pixd3, IFF_PNG); selDestroy(&selhm); boxDestroy(&box); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/hardlight2_2.jpg0000444000175000017500000000662311004510004015415 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ€È"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ëEÞÎ({ŒI!µ±ox“ÆTŽ@æžâØô;[¨¯!ó">ÅOPiYpk‹ÓuÓî—*xÇ÷‡§øWi‰qKnG¡«˜ÚCN¤4†6ÒÒPi)Æ›@‚Š(  9¥ižôìR¢†8¢˜çšb\ž·z.µ$ÛÛ ¸ÄÞŸçÐ×I{p-,¦œÿË4,>µÂ4Þ]¿Îi?{!=}¿Ï½4„ÊúùŽ7Pß¼o¾~½T H²eaÎ{{Uh3st]ùK·»Ÿ§ò«MUÀ‘Iy«a‹§j¬H]½«¤Ò¼9w¨'´Coÿ=e8ûw?…KxHè2)›O¥zx_Jˆbk«‰›¿–ëNo èr wõóþ˜¥qžvA¥é]ç‚de/§]%Ïý2q±ÿÇó®^âÒ[iZ)£hÝN °Áî"¶ ÅR´û€Ëÿîqƒü'ü ^Æ)’ƲÆÑ°ÈaФ"È}Ëת×OámGsG<8,¾Ì:ǯç\U£¿’UÏÚ}ñÞ´lnZÚõdNªD‹õäÆœ#ÑÈÁ¦špu•E?+€Àûi¬‹i¦ži¦€i´§¥'jb (¢(¦æÍ*&?1©DßxÐ#ÄβŒ+ÖWTüÍq·Îæîä¯Ð]o‰÷V£Öu®"âBÇ÷÷ú¸‰‘Ø®ÛMÝäbÇù ´«“PÚ¯úéšé¢ª Ôð¹Š`yî©§O¦^Émr›dC¨õƨ^Ÿâ]1uÜÆ¹¼´RÃ^>ãðëù×™ºàÕ'q2’|ºƒ¯i#ÝøŠl¿£b˜Ë‹ûVÇPãôÍp§Ùê„z>‹!“G·ÉåOÈãùUãY>9ÒÏýtoéZ¦³e¡ 4Ó©¦ jJSI@‚Š(  ·SÓ¥B*D<Ð2QQ8ùª@i² G?âEÿDŽLd$Èp×*̇´…<ŠôMb?Ož02ÍÀ÷å\ânœp&PÀûÿúêâ&>ÊÚE¤Àpáob§?ÈŠô¿ XýƒÃ&á†$¼|÷ùœ×à™ìÎ¥q¥jQy–—x•W;JÈ:àö=kӯ判qÀ¡!B"ŽŠAR÷‘!Îj#Ð •¸&£"€G5aíÕ IŠKçåGÖ«RcŠ@*D¤ž¹§ŒPž™7—:“ÈèAî+μS¤dë·6Ê’[|GýƒÈÿ»ëS†®ë>™­ÚÁ5üÛ¼Yzâ„ìž8𺲠&)&ü Ú?‘ª@ð¿í1­MJú;»ýCPE 0·¶QÐ"ð1TV%ûM¼@ä¨ÜØéëV¶ÝèSIR‰Øþ¿ýjÓ¨,áû=”1cPgëS̤!¦šSHhÃÖŠ QEå©F)ù dÊxÍ‘ŠN ?4—ªLmRÝI@o¡â¹ nÃÉ’TNˆ|تß®ÏWƒíZdñó$}G5Ë[Þ%ý¢[JÁn ÿT[£ŽëT™,ÀËõ¹Û4NŽÇü zV‹¬Å«é©2žz:çîžâ¼òT:}ך‹ºÞNOò©¢–ãD¹]OOÌÖ’cÎŒwÿNK¨'ÐôväÓ{Õ 3XµÕm–ki⪟B;Vˆçš‘€^zU˜-žpÂ4,ÀÀ¨@­Ï.ëòO*ä}i6)ŒŽ¼PnjZ9Gi-Žä본¬VN¡0&ˆãšç¼_¯Iªévm›«¯—à^ìiúÖººt;aC5ˑƽϿµr3‰lD—/çj—=qÎÁè)¥p½Š7(†â$ÿ{UË7¿óïW¼;l.µE–^¹ {qüªƒÂÑjyÎwLÞžß…jèN?¶­‚pƒ*£Û›ÝM=)sMÍI@i†M4J(¢€ (¢€)Aâš ( c…87cL– Ø"¼çU·6zœÑŽl®="½¥r^-¶ÄÐܨûÃaúŽ”Ð™›oqÒ¦-÷‡¯¸¦'Úty‰AçZ¿ÞR8#Þ³FUÚµlµ,~îq¹OSŠ´Åbht¸¯dûfyö[ÁË[±ÆƯÃâKý=„ZÆŸ,dqæÆ2>µQô»{œMi6Æê0z~=«RÎûZ²AÄIyý5]Ü}i4˜ïcRÇ]Óïîžà‚ tÚ.©clîfºŠ0Ø™°+K»Ð¦p×:qIÝ£b1øWY;øz[Ým*Œ„ÛÖ¥¡¦eêÞ7Ñtüì¸72ã"Rsø×s¨ëšÓ³[@,-Øó4¿{õlêZ¥¢Ê™ Çæã)¼Äô¬kµÔ.—ÌÔ.E´_Ý'ŸÀSQ[±]ô+ ¬4˜ü‹æ¢ï™.æcíUd…äš{ŸÞ«’±˜õ^{øm£h¬WbŸ½3ujÎkÙ|¦†7eþøÏÞúЄݜ’~võöúV§†Ó~¯þê–ý+WQáH9žàŽ03C¨Í!¢Š‘‰šJSI@Q@Q@ šPi€Ò怚Pi€ÒæŽÍgëmÓ¥Œ ¸ù“ê*öhë@0u àŽ”ÐÅk ñ–m® Ìkû©8þ®|Ф"Ô7†Ê–SìkbÏÄmnFP·Óå?§¥s˜¥ÓÒtéêê·6ò®O'ËGÐ×QuñÃöÈÈ›å$|»!ürkÄUÈ9¥26:š@´;MWÇr\1ñ¼kØ(TþUË^km¹‚ƒëÔþµE‰<Ó(Å™ÎX’}M’Ö’Æ °U$à ô-2ÐXØEñ–>ç­s¾ÒüÇûlËò'ú°{ŸZë3I‚ž(&›š3š@-€ÒÐEPEPÿÙleptonica-1.70/prog/dewarptest3.c0000644000175000017500000001376112072627463015106 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarptest3.c * * This exercise functions in dewarp.c for dewarping based on lines * of horizontal text, showing results for different interpolations * (quadratic, cubic, quartic). * * Inspeciton of the output pdf shows that using LS fitting beyond * quadratic has a tendency to overfit. So we choose to use * quadratic LSF for the textlines. */ #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 i, n; l_float32 a, b, c, d, e; NUMA *nax, *nafit; PIX *pixs, *pixn, *pixg, *pixb, *pixt1, *pixt2; PIXA *pixa; PTA *pta, *ptad; PTAA *ptaa1, *ptaa2; pixs = pixRead("cat-35.jpg"); /* pixs = pixRead("zanotti-78.jpg"); */ /* Normalize for varying background and binarize */ pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); pixDestroy(&pixn); pixDestroy(&pixg); /* Get the textline centers */ pixa = pixaCreate(6); ptaa1 = dewarpGetTextlineCenters(pixb, 0); pixt1 = pixCreateTemplate(pixs); pixSetAll(pixt1); pixt2 = pixDisplayPtaa(pixt1, ptaa1); pixWrite("/tmp/textline1.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 0, 100, "textline centers 1", 1); pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); /* Remove short lines */ fprintf(stderr, "Num all lines = %d\n", ptaaGetCount(ptaa1)); ptaa2 = dewarpRemoveShortLines(pixb, ptaa1, 0.8, 0); pixt1 = pixCreateTemplate(pixs); pixSetAll(pixt1); pixt2 = pixDisplayPtaa(pixt1, ptaa2); pixWrite("/tmp/textline2.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 300, 100, "textline centers 2", 1); pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); n = ptaaGetCount(ptaa2); fprintf(stderr, "Num long lines = %d\n", n); ptaaDestroy(&ptaa1); pixDestroy(&pixb); /* Long lines over input image */ pixt1 = pixCopy(NULL, pixs); pixt2 = pixDisplayPtaa(pixt1, ptaa2); pixWrite("/tmp/textline3.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 600, 100, "textline centers 3", 1); pixaAddPix(pixa, pixt2, L_INSERT); pixDestroy(&pixt1); /* Quadratic fit to curve */ pixt1 = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuadraticLSF(pta, &a, &b, &c, &nafit); fprintf(stderr, "Quadratic: a = %10.6f, b = %7.3f, c = %7.3f\n", a, b, c); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt1, pixt1, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } pixWrite("/tmp/textline4.png", pixt1, IFF_PNG); pixDisplayWithTitle(pixt1, 900, 100, "textline centers 4", 1); pixaAddPix(pixa, pixt1, L_INSERT); /* Cubic fit to curve */ pixt1 = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetCubicLSF(pta, &a, &b, &c, &d, &nafit); fprintf(stderr, "Cubic: a = %10.6f, b = %10.6f, c = %7.3f, d = %7.3f\n", a, b, c, d); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt1, pixt1, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } pixWrite("/tmp/textline5.png", pixt1, IFF_PNG); pixDisplayWithTitle(pixt1, 1200, 100, "textline centers 5", 1); pixaAddPix(pixa, pixt1, L_INSERT); /* Quartic fit to curve */ pixt1 = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuarticLSF(pta, &a, &b, &c, &d, &e, &nafit); fprintf(stderr, "Quartic: a = %7.3f, b = %7.3f, c = %9.5f, d = %7.3f, e = %7.3f\n", a, b, c, d, e); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt1, pixt1, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } pixWrite("/tmp/textline6.png", pixt1, IFF_PNG); pixDisplayWithTitle(pixt1, 1500, 100, "textline centers 6", 1); pixaAddPix(pixa, pixt1, L_INSERT); pixaConvertToPdf(pixa, 300, 0.5, L_JPEG_ENCODE, 75, "LS fittings to textlines", "/tmp/dewarp_fittings.pdf"); pixaDestroy(&pixa); pixDestroy(&pixs); ptaaDestroy(&ptaa2); return 0; } leptonica-1.70/prog/chars-20.tif0000444000175000017500000001161412226572724014511 0ustar dandanII*Î& .ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈdƒ@Ø ¹ä2AeÈhÜà¼<¡4ÒÈ ÞAZJò†“<4è@­È-†ôÔï\Á†T‚Ç‚«dm"ô Clà‚h ¯„ ‹h8 ð½A„A¤Ü<0¤5ë0¸'‚xZR u#Æ$Ýá Ó\ XA£ä®4m ž“t’<6ƒKñ°‚ ÿ„HÃI½n’²OZ6 šøARA7þ9/[Ië¶š¤“aSF„×Ah&éÿ Mêô“iÖ“`<Ìn7á*VÕ¿úÝt’}+OI, ´ ë6aN…N•ÿI~ÿÒ½×·Óp›FJ•nŸzT¶ªÒ]jÛô¸]=IUS­ô¿ëýR¸m$•¶¾ézZþÿëþ—ÕX1‘ßXôÝuétº_ýúJ­†Žt¿õuôµþÿÿô¾¼1êßþ—¥×ïþ¿þ’Iy lKúzÿ]}ªñô¿Ûúÿë%õUuþ«ýv’K‚‘oIÿ×K^ü‚À¿º¥¤•XFi×¥éuÿýû¥[‚OýúI~•¥ýh¿úKJõz_Õ~’·_è>öÒí!îþÿ¥äYõi~ëûªQUµé/é/‚ªÃJÿ² BÝí¥°•Ú¿ý$«ÂªK_é[Øh$«¶½/ô’ðš‘h¬4¿õàðÅy ÚxßÿH/ˆxA¤Ä&ÿþ0Á$¤Gú_¨$–¸AÓëõì—jk[ÿôCR¥æb´“Pÿßä˜ šïÿ¥\ o Ó µö°ôyC­Ž—ý¥Â}&·¯Pa¤“dâ]ÿúHàÃún ´‚ †´¿PÞCJñý/Ò‚ ¥´é>Ž6à }.CT"A“¿ÿô-®/ ´‚@ÜWþCi>æMÿ¥úO]î©Ø^ÿ0ÚH ÚWùò²?Òm-뤃a¤¼AFI½¿ÿý'ÿm*v¿ðÚKjßý%úV—פàÁïÓ×þ¿]k‘GI&Æ¿ô–öëúKõxÝw_÷ý[üá³oÒ×úWú „.zTÞÚþ)~–¿­uþ¾Ýþ—þ’ºÿéék¥½õÿÿ¶“×õ¥D5ÿ}/Kª!šþ—Ûkkÿ¤A´ÿõÕ~¿Û¯ÒoÒ ]t½Wÿ¥ûÿÖ“®@Ä-éz_ÿýµú_¥uôëúYÁàƒMÿ¤—NýdouÒý¿¤­$°ƒOÿÝm†þ @ðߺ鴽+Õô½:×I+î®?ôºÛIÒ­$´íjÿé¸Òi6–‘jí/¯Vé/õô’t˜h2w­}ýÒí&Ò«P—ÿKml#È×?é{KVÒM°“t­¤‚ÿáé$ÚLêÓkî“i&°ÂW $ØI[H%ÿÃÂ[h&!žºöÒ Ò‘e rrsM¥L0‚-¦½ˆ„“ÐaÒL%¬VÄ& V Ó °a`ÁiÒƒXbÂá1 ƒÄDHjè†0¯Å ÂCBPY "2‚üC.ú¬ÀÈ £€xkƒÀxjœ  ¼D[T±zÒýRýº¤¿I}[é/m$¿ê’Å´”wT¶é…¶í¥¶–õ´Ö#ÿÿÿÿÿÿÿÿÿÿùPi‚œ†H- l V@ð,¬àQ¡°12ä ÁŠ8ETUr€C k’ÐÐKT¤  *Ã@.U‚å@t €×5¡¨0u¢ 4ʰÒ"`ÈU†‘Pd PaA ã`Á{!¢² 0†mh™ )Ø ‚A\bȰ+°Ð%8ièÿÿµ¼ ä\6ƒƒWÿä# ¸uáaáÿÿï8a ÿýpšÚúad(PXCL\†P¨EÂ!˜A ÒfC4‚„#@Í$›D€Ëd4æ88d4´"88d4´"‡äA§ÈA™PŒ‰Ú>V˜D€¨f`Œ D6P30!³@Ïf€Ä#@/i¦šiÓÓm @Û4Ú ³@]„}¦¦¬4@Â(„%>~Ñ ïAÈ( È(· ÞÐAÚi¦šA4ÚNÐA†Â0Ü7AæÃ‹Tû­Òn «œ„a®Ú> ïá ÿú_Þ“{i7ºO[ÿ^­¤ÚT–‚  ƒw¸I¬7þ‚ý.Öôƒ{iöÒ}ÿ½éý.öÐ^ßô—ÿ¥ýé7é7éý¥­6­¥þé6¾—·þ“ÿéwÞ“î“{}ï·úOZZM ž÷_oý/ÿKÖmz¾ëõÿû®Õºm-/Òm_¯oþ¿ý.m9µÛÒot›Þ¿ÿ]i´ž´ºzo¿Kßýý/×ïWõÿýë¿[^±ÕÒ_oRÿô½ºöú¿«õþÕµÛ§K_JûúûÿÿÐ_¯·«ú¿â8ûüÚ®“t)d2Mȧߤ‡Hô½ëßïûÿþ¾é´­RÂÁêC'ö—ÿÿÿ¥ö¾Þ“úOÿöºO·½%…‡TßoUï×ÿKÞ½¿¾»ëýéÿÒ´« RÌߥõ[ýé}¯ßÿúßö·¶“i:® ´k}ô¿ÿþ—½{z¾ªý¿¥ý7IdK Z]:O¥þC—<>†AÛJŸVô¿oÿÛýþ6Òô¶õÛÚ®›ëÓ @­´–ô›Â_·ÿíÿû¶–Ý}¥Ú_KzK§† •°–úL2±¥®ßÿ·®×½¥°ÒÛºÛ [¤úÿ†A[ $•á&K¿aÿûþì4¶Â[ví'kJô—TÐXa„¿ƒ )ÒØkßíªívá°–ÃK»Ka„¿ÛÒ ¾Á„v„&F ˆHi† STôØq§¦»I†A&ÜI6jki&ÓCú ƒ!’ t ‚!¡@f±d6( ²Q.¡†  D@gìÔHƒR†  Ô¡‡:!¨­Šë†A­GÖAˆ@Ø  Â@pÄ5Öà @) pÄ,1 a¡ kð“\4x&ƒòLHÐ*pÈfÿßßÜ0Xan ,0©Þ¿Æ„DB"Ad@ˆX"8ˆ‡H'A‚z¡ ¶ ^C$3Ì‚Ù~$AÈ)q pàÍÄzŽˆâ,Ì `Óè zZª–ƒô‘Ì• ˆ…É?D@n=B=(aDê(°¾ @Âè°3á?ÿÿÿÿÿÿÿÿÿÿ<-d4V@Ô á°mgä2CnÈdÈA €ÞÈÙhkfA·?!N@ð³!‘øRƒùÀ²dæXaþç¡À°5 x¡<4 «¢[|Ð5$yÈ,YŒô¶útÒõÂiú÷ý¤@ðIÈý)ÁþÓ!•2 sÿ­wÒ®ï[ÿizCÿ¯ªúÿÿÿ<Ÿén×5(ÿô´¿ëð¿ÿM¯® /ÿé^¿Äÿúµÿúÿõ×ÿÿê×ÿÿÿWÿÿÿô­/ÿÿÿoÿÿÿÒÿÿÿÿmÿÿô¹ÀÚ' ) 2 ³!µùÉä)‘(Cj5?Òr$È12 ®D¡sÚ‚dNDr PEâˆÈk9@ðRrÿôÜ ð@ÈmjA³\ aAr @ÁB( aP¡0E8fAAHhD¨‚ã,ƒÔA„ÑäD¨†¿ÿWƒÂaÂ=2 T bšà©¦A¢‰„ ÈeQByš"ž«Úÿÿõa=(G†Â"Áâ ÃE@Æ„4i Y„Ó `4GÆÈѤ6h¨ð´F$BÐC?PŒ´p€_ÿ«£b½0 ð°‚ „Aõýé„õAôÂŽ  ƒ„:M…I¬#ÄÿAz’@×èÿÌÁOiíÿÿõøoû¯ÒnÖ¯è5øA}í¥ÿ·ÿÿÿ†ÿ×JôÞ’~”_¥ÿþÚ_ûÿÿø7ûÓ{ÿ¥z´?ÿÝþà íÿÿýù}?µ×I6ÕÒÿÿbþßÿÝi~AM¿Óz7¾’ÿÿÒý¼0¿öÿÿÿðí+]$›µ¯ÿK÷Ã0íÿûý~ÿ¾õz[Ò_ÿý]þÿíÿÿZ·ä£þÒÕõoÒ DÿëëxKÿoÿízÿ_¿J›m%ÿÿ^›½ô¿öÿýýoÿµzz½+ô¿ÿ×JÛ[×ÿoÿúéµúþÖ64žÕ*ÿû_{__ý¿ÿ´­-õzªVت_ÿÖÐVÚ0­Ø>¿ûÿÛí&ö•¶Œ,né^¿ÿ¶¿i7a-°½ÿíÿû¥h+_ò(öÞ´›i/ÿᄸa& ; %Ã^@ƒ7þßÿÚV“ ÏÚV†ë¥}/ÿâƒ&V*Øa%‡vº°kkݶ” ˜­m&)ŠýêÚHÿÚ²¢)ƒj  †8aÂØ@Á pØiE0°Šp.ÂUPnÖaèþÂŽmŧ@0(†ÂöA‚ó `— 9 !‚à΀ä@!Ð ƒ&² ÁÊ &˜Pu´‡¯ÿµÐh4[‡ÿØ/ÿbúA…ñM·®¶ŸÿÃhA‚„BYpÉ  °`…ˆ`ƒA‚ñqÿœ$ 0#ÀœHdƒGb9Ãðˆˆ×þ"‚!œøøÿöOýá'ÿÿÒÒÿÈÿÿÿ¯þõß×^•¯ÿÿÿã×é=v×ûKšÃGJ½ Ú_ÿûi~Ú_¨”à‹¨fD~½!´’ò€ÔëÚ_Ú[a$½ Øa’¯°ÂA$Ðu†!D Ä@üa… ád  XvG0Ç ,DDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà  ÇÇÅ|„(ÀÀleptonica-1.70/prog/selio_reg.c0000644000175000017500000001001312240302440014552 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * selio_reg.c * * Runs a number of tests on reading and writing of Sels * */ #include #include "allheaders.h" static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; int main(int argc, char **argv) { PIX *pix; SEL *sel; SELA *sela1, *sela2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* selaRead() / selaWrite() */ sela1 = selaAddBasic(NULL); selaWrite("/tmp/sel.0.sela", sela1); regTestCheckFile(rp, "/tmp/sel.0.sela"); /* 0 */ sela2 = selaRead("/tmp/sel.0.sela"); selaWrite("/tmp/sel.1.sela", sela2); regTestCheckFile(rp, "/tmp/sel.1.sela"); /* 1 */ regTestCompareFiles(rp, 0, 1); /* 2 */ selaDestroy(&sela1); selaDestroy(&sela2); /* Create from file and display result */ sela1 = selaCreateFromFile("flipsels.txt"); pix = selaDisplayInPix(sela1, 31, 3, 15, 4); regTestWritePixAndCheck(rp, pix, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix, 100, 100, NULL, rp->display); selaWrite("/tmp/sel.3.sela", sela1); regTestCheckFile(rp, "/tmp/sel.3.sela"); /* 4 */ pixDestroy(&pix); selaDestroy(&sela1); /* Create the same set of Sels from compiled strings and compare */ sela2 = selaCreate(4); sel = selCreateFromString(textsel1, 5, 6, "textsel1"); selaAddSel(sela2, sel, NULL, 0); sel = selCreateFromString(textsel2, 5, 6, "textsel2"); selaAddSel(sela2, sel, NULL, 0); sel = selCreateFromString(textsel3, 5, 6, "textsel3"); selaAddSel(sela2, sel, NULL, 0); sel = selCreateFromString(textsel4, 5, 6, "textsel4"); selaAddSel(sela2, sel, NULL, 0); selaWrite("/tmp/sel.4.sela", sela2); regTestCheckFile(rp, "/tmp/sel.4.sela"); /* 5 */ regTestCompareFiles(rp, 4, 5); /* 6 */ selaDestroy(&sela2); return regTestCleanup(rp); } leptonica-1.70/prog/findpattern2.c0000644000175000017500000001326112242266447015234 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * findpattern2.c * * findpattern2 * * This is setup with input parameters to work on feyn.tif. * * It uses pixGenerateSelRandom() to generate the sels. * * (1) We extract a "c" bitmap, generate a hit-miss sel, and * then produce several 4 bpp colormapped renditions, * with the pattern either removed or highlighted. * * (2) We do the same with the word "Caltech". */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixc, *pixp, *pixsel, *pixhmt; PIX *pixd1, *pixd2, *pixd3; SEL *selhm; static char mainName[] = "findpattern2"; if (argc != 1) return ERROR_INT(" Syntax: findpattern2", mainName, 1); /* -------------------------------------------- * * Extract the pattern for a single character * * ---------------------------------------------*/ pixs = pixRead("feyn.tif"); box = boxCreate(599, 1055, 18, 23); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelRandom(pixc, 0.3, 0.2, 1, 6, 6, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/junkpixsel1", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); fprintf(stderr, "Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/junkpixd11", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/junkpixd12", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/junkpixr1", pixd3, IFF_PNG); boxDestroy(&box); selDestroy(&selhm); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); /* -------------------------------------------- * * Extract the pattern for a word * * ---------------------------------------------*/ box = boxCreate(208, 872, 130, 35); pixc = pixClipRectangle(pixs, box, NULL); /* Make a hit-miss sel */ selhm = pixGenerateSelRandom(pixc, 1.0, 0.05, 2, 6, 6, 0, 0, &pixp); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixDisplay(pixsel, 200, 200); pixWrite("/tmp/junkpixsel2", pixsel, IFF_PNG); /* Use the Sel to find all instances in the page */ startTimer(); pixhmt = pixHMT(NULL, pixs, selhm); fprintf(stderr, "Time to find word patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ pixd1 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 1.0, 5); pixWrite("/tmp/junkpixd21", pixd1, IFF_PNG); /* Color each instance at 0.3 scale */ pixd2 = pixDisplayMatchedPattern(pixs, pixp, pixhmt, selhm->cx, selhm->cy, 0x0000ff00, 0.5, 5); pixWrite("/tmp/junkpixd22", pixd2, IFF_PNG); /* Remove each instance from the input image */ pixd3 = pixCopy(NULL, pixs); pixRemoveMatchedPattern(pixd3, pixp, pixhmt, selhm->cx, selhm->cy, 1); pixWrite("/tmp/junkpixr2", pixd3, IFF_PNG); selDestroy(&selhm); boxDestroy(&box); pixDestroy(&pixc); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixd1); pixDestroy(&pixd2); pixDestroy(&pixd3); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/sudoku3.dat0000444000175000017500000000056411465606421014553 0ustar dandan# sudoku3.dat # "Near worst case" sudoku for brute force, # Req: 623M guesses, 70 sec # (Rotating by 180, it only requires: 4.7M guesses, 0.6 sec) # from http://en.wikipedia.org/wiki/Algorithmics_of_sudoku 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 8 5 0 0 1 0 2 0 0 0 0 0 0 0 5 0 7 0 0 0 0 0 4 0 0 0 1 0 0 0 9 0 0 0 0 0 0 0 5 0 0 0 0 0 0 7 3 0 0 2 0 1 0 0 0 0 0 0 0 0 4 0 0 0 9 leptonica-1.70/prog/otsutest1.c0000644000175000017500000001263512242266060014602 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * otsutest1.c */ #include #include "allheaders.h" static const l_int32 NTests = 5; static const l_int32 gaussmean1[5] = {20, 40, 60, 80, 60}; static const l_int32 gaussstdev1[5] = {10, 20, 20, 20, 30}; static const l_int32 gaussmean2[5] = {220, 200, 140, 180, 150}; static const l_int32 gaussstdev2[5] = {15, 20, 40, 20, 30}; static const l_float32 gaussfract1[5] = {0.2, 0.3, 0.1, 0.5, 0.3}; static char buf[256]; static l_int32 GenerateSplitPlot(l_int32 i); static NUMA *MakeGaussian(l_int32 mean, l_int32 stdev, l_float32 fract); int main(int argc, char **argv) { l_int32 i; PIX *pix; PIXA *pixa; for (i = 0; i < NTests; i++) GenerateSplitPlot(i); /* Read the results back in ... */ pixa = pixaCreate(0); for (i = 0; i < NTests; i++) { sprintf(buf, "/tmp/junkplot.%d.png", i); pix = pixRead(buf); pixSaveTiled(pix, pixa, 1.0, 1, 25, 32); pixDestroy(&pix); sprintf(buf, "/tmp/junkplots.%d.png", i); pix = pixRead(buf); pixSaveTiled(pix, pixa, 1.0, 0, 25, 32); pixDestroy(&pix); } /* ... and save into a tiled pix */ pix = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/junkotsuplot.png", pix, IFF_PNG); pixDisplay(pix, 100, 100); pixaDestroy(&pixa); pixDestroy(&pix); return 0; } static l_int32 GenerateSplitPlot(l_int32 i) { char title[256]; l_int32 split; l_float32 ave1, ave2, num1, num2, maxnum, maxscore; GPLOT *gplot; NUMA *na1, *na2, *nascore, *nax, *nay; PIX *pixs, *pixd; /* Generate */ na1 = MakeGaussian(gaussmean1[i], gaussstdev1[i], gaussfract1[i]); na2 = MakeGaussian(gaussmean2[i], gaussstdev1[i], 1.0 - gaussfract1[i]); numaArithOp(na1, na1, na2, L_ARITH_ADD); /* Otsu splitting */ numaSplitDistribution(na1, 0.08, &split, &ave1, &ave2, &num1, &num2, &nascore); fprintf(stderr, "split = %d, ave1 = %6.1f, ave2 = %6.1f\n", split, ave1, ave2); fprintf(stderr, "num1 = %8.0f, num2 = %8.0f\n", num1, num2); /* Prepare for plotting a vertical line at the split point */ nax = numaMakeConstant(split, 2); numaGetMax(na1, &maxnum, NULL); nay = numaMakeConstant(0, 2); numaReplaceNumber(nay, 1, (l_int32)(0.5 * maxnum)); /* Plot the input histogram with the split location */ sprintf(buf, "/tmp/junkplot.%d", i); sprintf(title, "Plot %d", i); gplot = gplotCreate(buf, GPLOT_PNG, "Histogram: mixture of 2 gaussians", "Grayscale value", "Number of pixels"); gplotAddPlot(gplot, NULL, na1, GPLOT_LINES, title); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, NULL); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na1); numaDestroy(&na2); /* Plot the score function */ sprintf(buf, "/tmp/junkplots.%d", i); sprintf(title, "Plot %d", i); gplot = gplotCreate(buf, GPLOT_PNG, "Otsu score function for splitting", "Grayscale value", "Score"); gplotAddPlot(gplot, NULL, nascore, GPLOT_LINES, title); numaGetMax(nascore, &maxscore, NULL); numaReplaceNumber(nay, 1, maxscore); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, NULL); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nay); numaDestroy(&nascore); return 0; } static NUMA * MakeGaussian(l_int32 mean, l_int32 stdev, l_float32 fract) { l_int32 i, total; l_float32 norm, val; NUMA *na; na = numaMakeConstant(0.0, 256); norm = fract / ((l_float32)stdev * sqrt(2 * 3.14159)); total = 0; for (i = 0; i < 256; i++) { val = norm * 1000000. * exp(-(l_float32)((i - mean) * (i - mean)) / (l_float32)(2 * stdev * stdev)); total += (l_int32)val; numaSetValue(na, i, val); } fprintf(stderr, "Total = %d\n", total); return na; } leptonica-1.70/prog/arabic.png0000444000175000017500000037225710735531223014422 0ustar dandan‰PNG  IHDRU ºœ pHYsb&2 IDATxœì½;Œ$Iš ç1Ñ(o‚Åö ê€Ú²,ÕxÕ8¥[,ïÅ K*µëÅ+²#\¶Py9èa0±•æ. @õ4‚™ž ‡É¨ÀÓcØ @lz –%ÊËÿËþˆWfUgvoþèΊðð‡ÙçöøÍìÿ‹Ì½ˆèè¶Spwäž…—{^îYx¹gáåž…—{^îYx¹gáåž…—{^îYx¹gáåž…—{^îYx¹gáåž…—{^îYx¹gáåž…—{^îYx¹gáåVY”é\|ˆT8 X$­ŸÊìƒ>¤H¼`ü!Ráij¨nÅO¨‡‡>A§‡œìXè6‹CSz¸ê°ó«øà'¤œ¼…EžúäC¥h?r‡\ƒEvÀÉ‹vÌÓCŸ|¨ÌbpèÊÃí²8ð ×`¡8ùvYxþ÷Ç¢Ó^¤‡>ùPYxþáíÅuY¤­ŸN}ð—JzÅAí¿g±>ô9߇¼i|«²C¯?è}†:xÕüé²ùurP"V›~8>WíÓöCkÑd ‹U#Ýæ×Yóç‹·Íïuv|››:øFXßÑdzàU·ßsžµ’ÒË¢NûŽ^_´$#d¡3zÈ™¤}ÙTÿ£V æ­tÖ™ …ïþÝOÓÇñþ|Ç¿uYHáË´€=m¾‰œfÞŸ,½BF,¾Íè ú5=X,ø¬‹¿Éš7™!‹@‹®RþÚÈ(a3ø3âS;,”ͬ–›šixÂÁ,´ýp¹é HÚH’A,F)%¤z­ä},¸ˆóO(”© Ïª”û|†™3ºðé:¦ËRJ^‡E"™M,‹E³™º>‹ ÏÒ+V‹d; ‘#û_°OVÀbN,‚¯}ºÆ˜ªïð·µê²Ë¿•cÑÐz>‹Òj-Ä‚ªo_ƒÅEæúâê…KâœêHbf‘Ñe.UE²3Yԟ߀Ţÿ÷ äÊ67Ù¾í¬‡ž¥½ÅBæ”bÛD ãi¹Zî0ßÍbÑaa=ñwõ ÊzXD–…2ûÊ,à¶’Ñ€$@IN ¥¹&CÇåÇ ÅSTy\¸Íg[±-cx±€”BÕ`‘]xí9²x ­ ²˜K3,m¹¨²BXŒ‘EÙZib'%èˆÚ²(˜E ˜vAk¨ÕQ:Ö&O¢ÿ4&éÊo—Åt~UlFŽ‹9³ø™1¯‹$ϸý*cJ²x°–ÚQa‹T?ÏàžØâÆ®\@É1–EáYœb»x ¥pŒqØ´¨°ÆÎÆåëx”¡–6CM+ú4ÃÖ-˜EžÌ¯¨æ€¨XDÌ¢ü‹2‚QÝ?geô©eA?’Ã? ·Ä zXÌŠ?­°óQJ-‹ç$kuäX`ºÎñisf‘a5TcbQ Ãå±XãëL˜ë1¾1Ç[Ðt|¤ð†kR VP¾£´çÐFhf¹À³§³ŽÉÉ£Ç" °€¿Ì®VKø3d‘c‘TžEÍ »,ò|0R%¶`˜n)&GÌ‚ºBEÑO¸”–CfI*_§Äd=“œBɨQ3`AõJôqù0ç3–0 ?Š‚,2NZÆJÒܱÐôoŒ•·¦Øl2 P™E° á”†l«žŽÉXäxÝ%±PP±¢°ÐØËÒp9‰zF•ÓØ‚)bQö-\3°,F‘´äe4r,àÄÛÎuÁ©Ä¶3£Š,,°ŽŒ0¹Kx­Ïñ֣ȕ 8XhèI…)ÀbYp~ ¶ô5à—PL¹>£çêè«(›âýtô:ŲAkE³o±4庤ÒûI”’"”¿”®cr, ƒÀG  ãXüsÔPX}®ëZ%Cq,jÏ‚ÊÍqe¸\`áöb„?-íóÑÇQ2ЬÞ),¾¨$‹Õ¿Šà2‹O¸;¯Y1KrE×Êh¿é¡¨âkì8 ÛÏë˜Î^ÏiôR?ÈD.á9íizœý.™”q›@á=£Db#Qbu–S é‡oˆ,4²à{^¶Ü  ŠíÕ»r,¾‰GIîîV2xu ‹åÐG1¥é+MÁ«fuoéV% МÁê %£=j-àè¿y³EêèYªŸDX9)ub‡—4­hµ=M âϧ” f‘9z C†1­ËBšÕ¥eQâ¥Kì€2"ó"‚˜ J|æR,S8 +œ ŒëL~`ÑÌVsîÝML䨒ßèŽÉ|c¼ Ëv1Àâß??vϪ";"“Q…uıð7«ÛÕ¡WrT+èô$˜p‹?6ìÃß@ƨ´ÖÉ#>µr¾ q ôVò©Qì%³þ5‘Ò~FP7Ò\'šï^­üaPEìû)Õ¯ñûUl$AKXïåªQسEn?ÉH–2áSQÅ£ç û¤tÐ>Ï^Ž™¬þ½–Ý/Ý$­ŒŒö%¯9Í\Û¾ 4Êž§#{K±Ç°5Væ'msá[Âz¯:âÛÚ©Ob$ÉÉèYÄçŒR1´qìñÁåп×ü…›"ÜÊ®Ó ¡8QS¶&)í×ÝX¨ßÕl—Ò&?oX!¸¨_½RU•û¼u-f¨ˆÝ{ æ‹ûX|êïÛU¶I‚ʨ™i·nÛš¡›÷&n‰'P ‚V‹·× ¥ƒ‚ÎOƒS¤ý/û%ÈÞPGíçY™ï>e_)Û.ÊÆ—¶U6­©æofUíº¥vn’Ù!7¿u¹¦ïÝÑîSPv(»U¹&‹æ’M)÷,?wC®Éb¡ö:­Ü³]¹rM¡z±Eª,úZõ®ÔÑFUåÊ5Y,ÓýÎ;Ô‹êVåÞŸÝË= /÷,¼Ü³ð°øa)Ì@wÏó{–ÐOà6Óq$ô¹Ítܹ/^ÿè{”{^îYx Xü†”Dê“q'ä}èàM³«ÐßïDþÝsJpÇ’ó=Ï;ñ·°°±²-wšÒ‰©ýº2Íhö‡ë²$¼ëÜp“8ۇ˂9\Pm³|‚%!a¼”ƚǔNL§ÁolÊâl’&þXK:ÑA<‚žPv¶˜ºUÏËq°¼Ž°8gWØåž´ò$Ég’aqœ]§ô¦Ýë&ê/ù‹ÂÿmxÞ-ƒ¤(aÑ[.:,Öþ1ìI” eçO€©›7 &À\r/¼î¼ –ìäM-íùeJîp½í„O°,œÇ ½ }œ]§x¿.Ì,†üpLJÜÇblSJñ.zãÏô°8³ƒe²mAÃ>º³g¡Ð%3 ®Qt6W•_ ö~Æ—Ö÷KWÊ/œ;ÊVjâZ,èA¼v¹“5ØÐ…ð çÝ„Åܲ  êXXø:7<í²(˜ÅܯµŽÅ²VIø¸’‹lõŠîIsØÉTu §}p¹ø#ü8£ë°;îã&‹€²¿ü´Ñùãç“RÜ·P]äEf›µ ööÔÏ)wd¼Òa¡‚F±§Žx!Ü çÄbTg»X¸æÝçcº‹¿³Ïz—EâX = kO³¡\0 Öµã6‹¤³(¾Kžõ°¸”rJO&rq&'lk/ð‚«ðÎ>ë³6‹:Y 4Qã¶¥Hw°()wÜìI4–þrÁÂ,η±`÷™× œoNJ²`ÿõF{Á''ýýÈŒ/^SªG¯{X,7²˜¡²À,´rvV¶ewýÙ’Ú ®ù-‰éj'Ìâ7[X”ôDJŠO:,&ÅF=墴) ‹|/U,,–¸2ÅKû:ñ6gi‹Y|ýŒNVû²øøõôÄJñ ÕÃ"!?eÞ€ŸÓÓ^tX8ÿ0ë]CËglÅð4>“§lbíÅèi†L7°Ü[Ø‹+'Môµ¦'ÖO„EÒeqÙÃBTË-,æÒ^XÊ^Qîc¡ûXŸ¹|5Y\IyìYLÆt„,JkÏÂü»Šº'¯‰“÷ƒØ¼R'alfaÕ‘v¶·³pÑž¸°p†ár ú³+n$B3î 1_ÍöBK>™…B[¸M,È,Jt2>AX¤ö铀ŌTæ¯)ÅçRì÷fÑQÀt›…y`Z,’>yÅ ^FÊ Ëâ²Ã‚Þõ©¿CË墰,ªT2Ða±ô_O‰Åw”â3ö#sÇbÁ¹dSí0\B‹u‹Å/-q[X@¹IG3ÐÄbÜe±*^dÆšº¶XL s-ʱÀžÀˉ…˜@/ÎРúÔp¹ØÆâRŒç\rÉñ³Í¢Ìš,ò6‹IÀâÝ™‘ æZXpÎåÚl`q–ÓÛäDµYT1'Ÿ‹÷$×H|³ð&þg‹õ«';ŸÃ Sß¶YÌÄì2W²kêXødo™ãæw=n³,šÙˆu‰É—!‹IÄ%»Å‚Æþ“²Ã"ÖÌ­ÉbÁ jxp·õýHÈùï=õsžÅšpªÔþŽk#¼‹¢‡ÅZÔ‹uÜfXlÓËJ›,x”EêÜ$aƒ&‹+Ë‚T>²¶FÓóY  uMåv©øüœY`k+c<})ÂŒó6gÎZ h(°žE‰õtMÖÆ‡gh;]bQ¹6³¨Ó+3ÉSdqŒI^éÉçžE0}oÍ,¦ü^.y1LXH‹G–ã“ñ;aA¯`RX÷(|ìw)zliލàYà¿Q:·_µ61«j²˜ nBUª¬‡%]P=‰Ù)Dþ¶œ†,ˆã„¼ [,þ ´æŒŽ¡èu&Wçô䨳à×ÌãºDX\9šÌ,aA=Ïd^†,Æ aAú× XœB§}ZرٌYÔÀ“û¢z¢cÌ –Ä—Ž,Î,®¤JÕÃ%·u‰.¨»XL %žO,êŒÛÇКCô†ñZhÕ! *r¥cµ[,РŸ«¼eA¾4㋱ǎ Y@Zæ…9cè±ð,FIE¨¢r‘;3óÊAjV'g4 VkÑ/ª?Ãøj½€²qšê. ÌmfyQ‹wè×`Qe9$ÑD©gÁ#¥`>—±ÈƧ‚êH¤ ùXël:.=‹wXøR`±¦¯g¿ª8~‹Žøzx•,¡5]ÔéåR1 ÈëெE}£Ö§•"[rd±n;­YSdQ¿Ôæ¨ÛÔì”ïY$Ž…ÎÐUù„X\Q( óbI«˜ElY௚Y,‹K¬}oÍ|°¨ÓcË¢ð,ªôU˜Ø²@M¨v,â2!‹á)FEžÐ2}®ºHŠ*‰FÈ¢ŠL¥Ì"оˆà-¡#ú#ìÇ „vY¬E©š•Ξ_Z•g‘ód{}µò,ÒúyÀóÀ)ÜÓäßtiYh¨¿KdEwVyU:Ì?Ãsä±Q’#‹ÑèÖ™ }Œ,žDÉ„â'EÑõ¾b§{b^ÑE%ä†=L¨Ej", ²²ã>™ˆ‹“u»ŽÀýÉóê˜~ñüçÀbÄ,Ø}f0AOvUú:ÙWhB˜Ìí/UýŒüùIתL9eP´ž‚ÊüRÓ«š/“´ã£úK(8‹ò1¼6Ã,°a›c[ÄÁ¢çIJõ“e8AK|ñџžÞŠèo¤J } ¡ ¨ãP¼ #,2f‘^н°(ˆ…2gš<ì9òBerê+ÇcŒp0ÈSf‘àrg ì°å8} G磔Û- G3X0‹èË(οâÄý¹E©4ZX‹!g<ÎÂ"ŠIcË)¶@$™Ã\?ŒMùdºŠH›@~Øà*̔淈…A%LsŽLJeîÑ€0A)Di1ˆ[§}¼}œs´ 3ÑÜP•Q¼"$ \ÿ1·niiã_ÔØæ½â+àjbœåÍB ȃ©:Ã{ùl“ $€@GP±õ_Pnü"ÜÞÚBÌa†…ª|ÅMÓ¥Œ÷UmòG)›_æKš²—&ôçð¦â1+âèÍZCË• >õ€Bå0æÜœ ˜t€%chbácY~¡­pÁÍܘ þpNÂ1y5h]Mž³¿Ù”þŠÃ§’ùµ’àR¦hÁ Ç#6‚‡¬"@‹pyܼ[åu¢T–ÊN÷ÛõhûœÐ'³çÁè.Ù²e¯²Ý¬Ã"¼šT‹ÜôŠõü)3Ã… ŽRlÔ ËbÖYÔ¨]Èœ”à7^šÍÒrXO¶;É´*øvï‹°JB4ê¿°ûA;•Ä%3|a2ành@ <Š'~CœpyPø­Ž¢CXl— þ-vš‡ ¥­ªÃc*£ÿk;Þô6¶Ý"=º) çÆƒ©‹Ú;k„29l»°9q¶CÃ[룉S¾tu ¡¯Z.6êMí[¹‘€bs÷ ÆÍÜÌ#‹•?ØòSå Ë™ÿõµéD»$ß™ünW‰íM¯qZ+^Fÿ¦2•3ã#Ò8T?÷—NÝ'‰NRöã皃,fþ`'L‹—¹š,Úãª@ìóÚ;ð¾#—¿ð#mW»v”ëü¯{_}Â%"l•¹žEеfÝBÉÕ$ _s8‹²¿|îÞd ÿo ÓÝh”Ò¡úþ{ )UuØû…pi@A_Ô»¨Ã’«³°„­Ô¶äS¢Zß[÷¯ÃQwÄ6Ût†uÄ w UØŸ¹•@fy µ×™6qÙ!gï’M}§#í‰öAaù€þfï™Å5î”̼›Ïóö‹«Î ×—÷Æâ÷êšê?w‹=«‹FPõJg'·ëJ¾_ßÛ• KéìöØwz‹Å~êÏ^r§Xìuú‡cqÃö¦lî¾wIÐCþ}ºóìÈâ½É"}7ùf÷MþÑø-šÕ&ùGÃâ¾\x¹Hwžr{,Þí>å{–ÛcÑÙèæÖåöX\G©þ°r{,ÚzO¹QôÃÛdñîÙÙKü°«oEúþïÙYp9H~\,nÖýÈXÜèž?®ö¢eÜr Ü‹ãݧ,[¦®÷ÛcqöîùCeñ!ä‡Ð^ôEÌoFx?²mµt·‹ó÷’œÌêNú^5jÿ|i–wlxF,hÂwÓLÚöéìvv*wE8Ýy:öÉšQi–Õg,AÞ çdÓc{›éÆ4nYkž·ƒEngÑY4ÍŒu Ž–},²Earð%}ã¤oÏ ‘Ú˜FIÉIßoï‚ç º3±ð¼å„º»¡|(ÜfN.IYjzY¤Ë ÓÏ¢UÆöYÆå“ß3õ~&)q[ ³¤òoàã° ù$³ŸöbQG[Xðuì}Ð`Á‰*Õ!,|ÿ£û*){„Î6±˜[© §òï~†tIûŠ`Ü…¬û<|-RšEOE^˜ÐŽhê>]y"ƒƒ€¯‘ŽÅV¾sCË¢j²°_Z,|(p°äåÜ,Èž°þi‡EÚb±ä'vYè¤yõÙTͱ˜ÛgÙNjƂþõYüœsu¶õ*²©íYf•”µß±HíS~¯ ½˜4XT6u¼‰E_äÏâ£Ì4Yü‡œR’’òÏZâÑz3 ËXØ@,á©e²‘ÎY¬»Ë¬¿»}tØvR{7XÀ’ŽãeO‘ÞÍÂX—Ù`+W~BXü¬uafúY,ÍI‹…$´‘0ÜUW>! YNû_»il× dÁ˜‹±¹èe1;…v™acÏ¢P~âÍá,”ž‡,Ä>LX9w°^Ãñ’[×»il°ž¶é«ƒÚËDûæ¹r,²ð뛚Y„톟p{Â_6/Ä£ïúX,jÚò9dÁq3šsBo tv¦ö¢4=F~ Õ°ÅBd¬Ê‘$ªècݬgáûÔyhïUõ°H¡‹èu“»òÖjî„ê‰=^šî8î¬ÉbÐeÖ–“^e‡ÅÛi‹…_éž› |QÆc©™EpÄ_ØÇbŠ.Í4GïíDí õcNð$ó·Ý'5ëÈϺ,Pï¼Ð [mI”þy›E7Y–©þúK÷UXðpw|da¸•ì²øÿx•Ï%è!'¸geZ,®ÌeÈ‚ý¢‡EÕQ]Ú,‹PýÒ}m°˜á¡Í,êV{aÛò‹*%C>ªA^Íqú±°hëlôÓ`qiÌ!,:jÜÅ:¡Ç¸G3‹wf ¸ÑéÜ ¶êïGúY¼Ó䄼·î$s´mUŸko¼ôMKÖüæTý8ô‹bsè ,ž=,ôÜle1£î¶ X„“g!æâüLËó,®t†,xÉéÈUÒÒf¿àg´Ò=¥V³ã­¼Ñ{¼Å"@f±Yív›Å¤Ÿ=ɳ˜µY ‹wîHh¦µ’šÃ,*ñ– [mË7ôBxys`h«fÇ•¶Z ‹*ñ,˜hB¾#Ȃ͊ß2‹²É4×5³˜Qùš›w¬Ú‘‹UܪÞjeÛ,Vzl;»q½g‘ð»C×úy™Ê“Ë ‰–2ÁŒT8ÙÞ¼úܰ§³Q޹–ÇžÀó„ÇŸ^½Ÿ6~¬&ŠR”Ñèn] ‹¥À²@‚=,æ]óêBŠ)ùÐâwq IDATàK§¯«:­- hhâܱÀ¾ð(f1¯Ó² b—ŽÅ(ͳ³>¼põW²§] ,ª¯2Ë`ÚΜ«Ð/z3ÚN¶´ÆbÕËâ ·>DÇi 51Ö‚X|‹n`ášizÁÔ?dè5” ‹ú§xk<¸1+0Ì@>YÀ!aq\§ø¢‰Em}¡&¦1ÌâTXÌ„¾^´µ/iÛcµ¦àšëHÀ‚ëðˆËE ÙÉ‹³øm¦.…Å<`YÙäìCeÉPO6 Y\áû™°8f¿,ºU:cè@¨?§ÎXD|Ã¥°`cùKsT¿p,œƒÈwe㋉õ®" òâϸYŽ©óY™wo‹ZX°{N|ÈB™_gpñô_‹‰Ñø©g{ƒƒŠw©{XÀ0¾þ…UÁΈ?!ó¨Sa¡B?ãw549ßðHXpOíUý«½j±Ð¯ÕCËbäY`”Ú–­Ä}ÑóË#±˜>²,.J(—½’Q’ãX®T ü*r@€bYÔêìW¹áÉç´Wýä¼xá¶«ÌâˆXŒKr³×Øb1f?ÇÁâ»9*øÂâ³ãwPˆÎjµ¸ZŸ,€Å€Ò|Þ`Qրŧv¡½BK6‡X¬ÌømY Òì@KG§FC+,,"àm|Œ,ôÇ6xãÙx^¤s—úvƒÇä8YFe‚Ùªh×}ч:Šž<&ó<9Ë¿ŠÇeÀ¢f§t´Pn±€ýXg¯þ°Ê’ •ЉeqÅ,æÂbbÔ¢\$–€ŽXp~_ŸNð­ÁÈC’Dp=²€÷CµpnF—‹ZEm9Î2è”}Mžf1´¢¿ÅîŸ=†|QËhŽ9±¨W,¿ä°ú9fŽ\Þ™…„È“9NVÔvŽà¹•„ € Öb1J‹X?Ž†ÐŽW_ÅäkÌ¥¥¨Rl„EUÀ-……Ž^ÇПÔѧQ†7Ô2nâð­]šò¿Ãô¤ÇTGªìm^Pí}1,EŠYÔŽ…‚¡Å³ã{CÏ1Í•ea…XÌe[è’³¥ÉUPc„„4r,”\¿¡qðw·,Ša+Ü6Fˆ@ïzx_âíÚœø?Ò%¼îû•êqÄ%baaþ›(ú jù§7ðð^8 AÄ,ì»Iiuà*ç! t@êž8}¿^ª#ëê/,R(ÌÏñvš¢ü x@ æ9³+‡Ä†/'oðQ47ù# 7P¤ùC‰¢@ Ê àßšò'²ã’ )A§þ¸’+RûFÔ³A¹xS[Z‘7>½””\=5QÀðÄâ1‘^‹e“ôbôãt Ú¿±çpz¾Ëì­©^DÑXX¤†S€ñ”Ï;“0 â謴z¼„QTýSù|?ç‹'ÑÑWñØŽ‚ÐÙ´VÔÉw Gʈ¢Äx#±,¨de+êè–6‰ZX,ì¨Gk¼åÊîŒJ.²82ù“€¦KYIÅ7‚@¿VÖA/Bœ‚/@:5샡±q}>ôQÊ'Κ-Á –ç×.Î嫸rOYE›=3)eã‹èAŠÝ[Á,c |ù4.‹>ƒ†áñä–E ï(3¹Ý-·HÈEwFnúKÍÙè1½zè(£À‚Ë+åÚz¡ÁkŸ;1ͬlä\ûÖÂd·:Ûú>±úÌÿlÿ¡–ð1ëy²ÅŸ¥Ü!ŽØN‚Yt új Íè&VÉN ‚ ñ‹ì¼})ž›ÊL~ $$Ò…ˉýEÏÌcï1‘úÚ,¼Ÿí6á „˜®±ô¸/48 ü?éœÔ†N~b8¢ÀÂÎÓŒ° ;‹ö6 f+‹-áÚ{•lxÀ"É>Àyùˆ#EÈËÃT»µõ3Þ:Iæ[øû²ižr)M@Ÿï>ϲèIÊ–ðúyÓ!v[$‘í5zeÔh[Ö¦»uŽ/ŸþÅ E—ÍÝü–2'ûu§@„Eøbí Öiçd'ØŽ†Ò>õ_w/ù› ¿K7ß:ù„eaºÎ„Uû€qÖ ŠþÍ¢dY {Ü„Ehl Åè¯ñߣͩ,Ÿ5Xt")<ê^2 ž¾‡¿漬qâù´¯ÞÉâ«‹R*À(ôåv",\¾ëŸ foÝoTý"üÚ)ÿ= d¸ü²‹…Ìåî6X­zý×.±} ±Ì*~j3¶I)u)ïmÁ¥òKRè¨ÃÕ›+x;zèýzzšòý2ÝxkNÔÑ?…{Ì)Õy,½)þÄÏi&§ÁB7 @™rèñè6–…DTh>iKäÝf‘¶Nx¼ñR’ßeÛ—Wã‡nKZ¦–’<]BmcÑx”–Ö8ï-óÌÂç›´7"¿¥ ·Û°}ºÔC¤ÍÅ·7oä 4'²,Z%XKk¬•éfá{¤ÚõÇ[º‘.³î!¿ôÐ ƒQ5‚VÌ9zê»omëÙï² t½ºÎUg\ ûkøÑtË•w™Eµ¥'Û,ó_føÏ5âÜi× 64ÿý3ÞqZÜe}Mèn‘е!¦ÛÖçÝa׫#Â"ßA®Oî4‹¿¼ÎU?N×aQܳpfVÕ^“F ùñ±¸¾Ü³ðrÏÂË= /÷,¼Ü³ðrÏÂË= /÷,¼Ü³ðrÏÂË= /ˆÅù¹ë– ,dQ|Ûäëɶ۾Çð° Ùbñnµ!p=RVešëÚ­Óm·ÝÄâ°X¯ç#ÝÀu—s®5{ŽÒeA&䲤Ò`A˲+·˜âï1Ÿ6n²iæu£•fRY™ÐãMÒ½ìй9LÎíµ0¹¢n9Vs©|.â¼uº&¼½r‹pf*Ťpg Í8–Í·ZãÖ+–™}ç\jP¼ël/ ™D¶SCœbqŠ, ¶ÿ2—ø÷Ã" Á ÉÁ-+d˜ bÁÛQÿCf™½‚¸Oƒ>k<¥—…àwVÕF—‹ÆÃv,A·ƒf,k¼:¥»ý,JbáÏï°`Ëcü–Ø_{Yˆ‰‡k.‚rA±Lv³°¹XÉÍ­uT“Å®)É.‹àÇ,Ø›£ËâÛ̳˜;srÕà;ö±ÐLyjxÍZÚ øêãº(~¶ò‰°Q$—ðÓï%1vÛ±hld·bSbeZ§á‡6‹áÌj3£[¡kú ŸÂ*DÈbbÿJhͼ¹ãŠÆì-·±ð…+"–i„Àau$¨i”IQ)«,ðIv~‘µY¸¾YœtËÅÄ&@4­£f@!8±âw°É¬cÿVªÛ%ÇB’^õ²Ø%! …õ3 -ˆ¶²X7žT ÔwYÈÂÊÊLŠÄÚ@{‰M¥¡Â½”í6ËòðÅvb¸o¸1Z« ½ø¹»ÇÒfQd]ëFo#,ê_\5žT$³ðùUÃ3R|âYX÷ìÄfƒ>èaËnîófÚË¢þ©2YÈ¢OnÈnàÞ¨cjd¢4Y¼,ÃçW}HÆ! ijÇ‚ØëŸtYàN½F• ?[6.W|·b÷G>ú²HÛ,ð´ÎQ¿Å"ã§Ôlƒ”‹Ê±  Us¿Ì}îîC,èS/ ó–Ç0=,`3…»Fá]×/ÛXÔÂÂ$h²ÈÄ5Å?c;€Ú ýßÚˆµ§/Hgî>èm†¶nÊ&q#‹Ô´Yì2î°PÁm,Ì/xknI£Å‚ûLÒÊ—¾€Eé }ª×l8ßx´Å•$‚o¸EeÝÓBi³h˜ùB"ð–ý,ÌNc53÷”€Eáàu-B‡,RÒó)G]çø/:¥NC·ð: ] e¡[]ÆV˜ÆÍ,*Ë⸷\ ]$´´+’ÜÔäÎŒ,Háñ,Ö8òSX“àxIõi…öµ>ŸwI7W¦Þš³ë½Xœ„™\†:—–ÅU‡Å³X[`¥:r¹´,´Â†`lǬž[¹f%e±T0ŽÀçqP¿Jª„X”M ì±ô¡TöU¬ÈkŸŠÇ–4¢QäpîXdz§>÷Š,ޟœpiYX®Êž8ÅM"ñ0]zjÇRÙ‚SÖËÂ:PxÚ±HìTFz sc[Õ/cÍ,Ѐń;1HëY‚õƒYü>â”2‹=Z¢XHO]¦e¶“E¥ ë˜:Xɧ¬‹g¸eqÆåžrN§BMU©".„…eQ;› ='¢l¬»7$¢¢X‘"yVÛ eáŸ*ÅkzAõ—Ca1s,ÈcËE–˜QÀ¢ r#×ÏÉËX =‹B•é¶M9™E’§¢N Lb¥šp]^›ú)’M™ÅXÏ¢ô-ƱÈÜCýÙË!Ï'Ô¨YùÈ–ˆo QƒÝ.…LXÛ8D¬SÁË,þ“àÑßÖôC0ª´NkeOŽ™¿ì]í3sVæ[Ec¹Ïø±g¦dßÉã“)?{§MRÌmä´t°^ׄ@–‚Å_Ù|¤Tåe&ÁÙÌÝÒwдi'éñ‡ëd²- Ó €ªSEÛܶé‘…MŠ2¿Ií?³X7:·§µ–£uðàÌ}hÎ(ù“-‹ÉÎ ~§cKÁ)Äñ -OîÁ¢ð,üÝ,äð&áƒí‡*ÝÅ"áØaäJ—œíR'ŸwŽÍLg{”‚XP É´s~[\R’ ª±î%k=’÷39m _!5ݰJ°°ÒÜOöW)ÿ»ó-V<³Þ˜Åv\~ÉíZgÁŒÑ6q,†Áã‘Å\XØ ‚dØËŵnµÊûϰ,‚›4XˆËøÝyŠ]²wzÒd1¡¶¡í~Ï®ò8ĪvØÃ¤DOÝÉ4V›Kó\5Y zF{6AÎ÷¸Þ¤ãYZù‹“îïŸölômóȈ׋1Õ‡Ž/!¾ÕJÁûÜÇjÎP‚4P S»,ÉžØÓzî¡ÌÛ“ÔAˆ‘¿ó`Sd•ôÛÊâOÔ3®µŒÈÙÌɽ7J…ëöñ¸tqO‚ ¤æ’5›la‘wîù^%-˜+ ¹»í ‹º ´µ õ?éñ›m²èdmº96NMúêr˿>üÁ)®N:§Ù'e¦ÂbäÞȃ°¨v°è†ª:›…ßúµl’zǵ+í`ö•‹Ž[ìÕÙAi=Púêõv9o~-¦}Õ Z,Äö¢ýAlmXnÇúf{{šn²{ÖéZ²G¨§Ûa¡wŸr˜ìf±‡Ü‹wçïù†;KûÈ-Õ‘¾žö&ò^6²þ±°øèZ1šò#a±c¾p?ù‘øÒT‡G5èÊ„Eͺ×ÍäGÂâ½4ž?ïC>,‹ž)Ð;, Ìû‘0 ­ÞïÍ{·wY,n¶¥wW®×ö6¥É"}¿7ÿA³x K(× "wkÒdñžßã= /õ™…z¿7?dôȇm;³÷{¿, }›¸þ#’«ƒO{Žù@þg‚[–¦þ¾ï>¥uÚæv£¶â¼5‹Ã¢|pAnÔ°)m3²LVíªçlñÍâ½O‡ßL…Ûăìλ'ÜÚû‰ù›´½y‡c‘Ýuu:¥r}0 k.•Ð’êì£t‡YØåÂsbÁ:Á5XœÓ©|Wa1!‹õ ,Ô]daåÝÙT/‹¶áòÐZ‡Ö49{ä¦\ã†t±;æo&O¾Ó,h£Ä^¯Ãx$çá/fÉ,2úLÀ‚<(Ú,¸/­âËë³P×¾r‹tYð’µ°àuèê…gqÖXþ¯’_göó¹1‹D¿r§" òmôY&ŸŒüê°hïuˆ8õNÔ¡Åí‹„…$“íêÊ4nlóP% ««"ÑÏ=¶39 îe<‹_azf—׎u“Žht¢©,ê¨JÏì–«¢j°ÝJ8:Ö¡=Žv ER<¶,ÐÓqBE³Ì á´§&Ô²žX\Ÿ…V×¼ÐÖX=ˆtäì‘Å/³& Žk²˜4Tg=ü÷áÝÞNÅègÊmd›Ý9“€(Å XÜ \äö¡ …P¿øi•ŽÒ& –Íóã|pфطXÀñß⇛°¸Áê©3ÑêŒÄ…߸)ÍSÙ~vOUÛD‚‡L¥\Pld9uFú×Ó8î`ÖÙa,6 =ï™…m˜å:q,ª?º…’},ꀅ1=,T›’6¿ÒórèSñxƒE\¥Öw!¾>‹´ŽE_?²“E²‹ðœ„6¡Ìynà#â:µqXÚ{Õï/7QX1xgQXdò…Xp P16BÉß6‰ûN®z«rmYÐ*³FtZáÎñ\Â\ŸEWö§ãZ8Õ¹‡cQg ìxOïuX§\tPýŸ@¿”Ûó1Ô³ñÊטE”Mè‹ÄœÖ©}3“Xì:s# ô¿éø8¼ãNZ÷p,ªì æhêXàã‰Å‘e¡išjK×”á98ª¨~hê˜= T?QEƒ.xQ§V=ïÍbÚfqÒ>c# LŽ-®nud ¸GdMb«l‰,&Ââ5=š&ŸpU%Y+³pŠçkRäÅç¬Wbž Ç H•b¯ÿ—CS ‹7À¢·zÓ=äüöœHæ|ntÖs fǪݬ2Ž\Û!˲¨"aÁ#'Ë"ÁH‘ÂBI,&v hR%‹ê¯ŒYsñ‰²1=γX]«ÇÙè;îeÑcªYwü…Të_`±ÁÔYØJ©íÍ¿tX¼±,ÒE—EÞ`uYdšLÍ¡´W“.„»¬²9GÌ…¦÷ŒÝgÈâc8þêç¦nïU XìÒ,¬2ÙdqÚe±b¥X¬‰…8ì¼¢GœM ÌkÏâ °`ïzÈá\c ‡ 9¨‘Ä"Ñ4Ó›Ç5îI#RbCþ1]´œaŒÉ(;®^ Mõ‡û²àÖ/Ô)õN.©g‘m`!YCjéY(l'Ü_¾æè ª‘gQ¥ór\©Ê²Ð8-Ñ;¢ƒ[™åduP?€.Ññw#Þ9>ŠMõ½,ú󤚛-‡,çp‹Y0Âo²È³‹9÷#õO€Erd¦xÏ+S½H°·ø:÷\Ö ±¨g£œö’gã2Æ@ ¨ÈÕèûŽ>ô¹Â:¢‹2) ïäͤȽý³(ŽE9èí)7°¨¯ÉbÌXìfÁNpõ'j ÉÌ„E!QEabÎ=‡?°,¢¸ Ó{©œ7dæÙù=dAo%†‘15tʶ°øã&‹ïÒ>;—ÑbᇌËÀÞѱ å¿Hûʲ0O"ze ï¹Fç|ÆH™5¼¿e°~.¹ •´”E*éžUÎ’©”lŽëAi‰ñÖ¢á ú.÷±½¬þi“Ũ±ÝuÈ"n±À-âÕÊy RqP‰U—…lc¬"zeÔL\ am†Ÿá}h낽ëE¢£h4`† w‘4S‘mmáøËS¤1´Hñ,zͦ{mT°¦Ú,lÌ ´Å‚£Jzg<àॎÝÇBg—UZ%=,¸>©ÑÐäŸF©° X¼.AAâ>²Î°ÖCºfÿ´Š†ù‡ÑBŽôj¤xX òÊ”òéè/*_„í’baz¥§\Ô Ô‘gh|¥eî,`Q§A¹ÐËŒF ÄY¤¨©ŠíÒD_R6.ñfJÎ….*í[InýTð³&½Ù‘ܶÍÓ_ûCÐWY—¤¶ÿ¯e)˜ò”‹ªá½ ,šk¤ØVT¾ˆãM,ýè/í÷™[YvóST'#¼²Wz÷ß$=ŽaÕ0TB!97‰ÜÕ/‹gÁu¡fí…›· X`áœuXœÊè< Ž®ß]_õtã›ÅÜÚgO´bÑÇbÐdÁé#rJÖsݹ¡~däO2ð'‘Óæé:Ê_Grž—UA?åáXpó˜Éonby³¼Oðôcb÷tí¿é–LM³O¥îóh›§aHÞÊÜ“`‰ª¡2·ˆ8mA,:se]ÙœR„X4òÄ5·Éb ã‹Dòs8‹Ä³Ðªy:² Ü–ÿ2ðÎùbòÿx§2ÉÍ&±øª­ïü.ºÉa٣蠬ùOðZ¸ÃDxWý<‹*³,²Š.ƒêße¡Â tT²KNw,ßç#ÑøÐQ¡¨½.œTýy­F»´¡ûl‹Æ®¡  Ò±(¡³ç±÷'SC­@›EÒÔÔ’Š¶ ²²iEóðœ»J5÷u¤¹= Y,|©öë¥u¼œRŧC Apì=o8ÎÔ_ËlV£ ìY¤4³X9%±0! Ýdq‰Ç…£LøÊ#(Æ–E ,ª `; =Ø‹×nnÜWu_r#H}T‘\&óÄïjrs ¼AF¹£ùAÑÐ ×n31†¦jB-9³˜4Y(ü³ÀßC-Ídcs,,ê>üoÞPˆK.ïÌã)¾Cý²mâ¼¹Žì)À"R¥¬`ŒQK çÀ"ùYdØ{Ä’&_I¿DÝ^¼°`Ý‚Y(™Ž™Ð•ÌbfY(`Ñ\s²,šamЍǧy v°ïÁ'´!•y)Í«|5öo˜|N¾DÆb˜'ÇËF EFXhš--‹³T† ]©,G4yW¥o °TI?‹fK_ö){D ¸™\è Æ!‹%=s íÅäkfQc@Pf‘Æ;‡3ì{"[Gt\+¨2ÄjÀóÎ,ʬJ Ü‚EwY4' HnÇÙa^fQžbbQ`k4Õ3¥ b‘A×RaÔP­@q€I ‹rˆÝ¦¦ß#hØË ãQa)cQ«cTtXtÂÃÜšÌ?ÃùBf±‚™ýì« ZC`q%Ô¹A¹“3ð}‰QJëxèY¼åÉ‚g©°x ÍϸÀmÊAŸV,FÄ¢º³,pú >éÆ+lF9!° À’CÌQ,´°€#s ²(#;‰¦¼(m±È‡2õô ~Nê»Ìbˆó‹ØæÍ+Ž KQ9+a¡C5æYÄÈB+\ {C¯©^ü. ¾@fÁExdÕ€‚é& ª)…lÓ0ß4›ˆÅ¡»»è€6úsZx6€A+ìköÌ´ IDAT,Ͷ–zq\oþøEÿ“šv_w‘Vå9©üœí\À6µrKÖ÷6\θ5mgaœNÕ¼¶5ËwYÐ`fŽæYmY¤ô/­Z,hfBKÉ·6Ö³,ì|S{1;˜¨2w’U‚Ójøm*VÅ…KcñÈ[ æÕM4nmBlYä–…j\ÛR3ï RF‘‚ÑDJ\€küZÆ«ðdÑ5¤£™µf- [Úå¢9ícñnßT¡ÇC½øÕ«V§@˸UÚКšó®ñ?ˉü›67'«{X܉èP~³!4@SWT«žÞ$í=,Ê»ÀbË|iÇ^×Kq£c=,ŠÍɸ çQÍV²¾qMéa±ê9íV¥9û4ÝqVïg{ÛÕ7¸ø{’‹ ,"7 ¸qk,6®7v¥ÉâÃÕà÷Â" >¦ÈÙ¶k¨‰h€å$ßÊâo÷¿kWzY4캲 ËPÒæV蜓 7™ÃÀñ:1jË7›¯ìg!þ¡ðˆ÷_ûª­Ì†_‚Y³ ÿ¤ò¥IYhóžåý³H«¦å#½jž !‹Ç=Y°Âkk³˜™ÿâã›\ÜâNª¦å#9 I/7±ÈÌþ,ÐFäÚ>™FúÊE\§YàØ§‡EÊNŒôã±á¸(|Ž=±‡Eù`1<€5#d”R³çé’üÎ2:ìþ˜,‹Amdÿ`5PòU EvÅ‚6"LÙÍbý`1:€-„ã®Òhñ“áò;KكŎ¾ûû–^¯³MýíÆÛÃ"qó¨!‹Úlc1½ó, Ïå‹ }ê7*é-¸ÍŒe žGR˜W{b{JiiÆW?z‹\MÚ,Èœk° Í²y¥Nᤴ=±=¥ôaQ=ÙPGzXÐ4ÜËAÉó k4Žå5¼F¹è²˜ßa™ýP²Å*àÊ~—E`¾´Æ¶bMs Äþ6,Îñ&w—EP¡4YP¿Ém§c1•ß(tœMJG°jÙbÑ\˜Y¢Ù^vÝdñ,‚ÕëïögÁGƒ;tXXÆ?P¹iÌ£¡ž)ÁÓ‹,ù¢{YØY\d15.Þ±Hoœþ÷)ÀBF‹Á#oîÿƒê²â³&l 07Ó8X¢²,0×m‰e¡'äs¸›êv?{ËâYªÛ´PS0 %‡/Ñæ·Åâ7ÃÀ„} :œØI9îW?çüEÉšœ&U,ð5ά5XŒÍ¯=,p^2DH‡'¶ˆ©ÅN—ü_,î$ ãL2û Èæ‹,0—Ì¢Žq·6‹%-ýSþ/.çw–O4ÿeØ¢²´,بiv²šÜsˆÅXåÈ?œô“ì ©qSøò.õ,žÅ²ˆ×&½“,dá*dQd %°˜é¬È®Ì³ºÃͶ˴"•¹2çÏ*f1ó Ü Á­M|J;)²ÐÌâ­YŒ’ÔÒ;Ëâœwã,#4¢öbHZå;SVU:G%³(«¸NrdQ(š¯ŸWðÓožQñÒu¢ÕzŽ·£Óh|Š—Ô\‘Q¹Pè!%åkuËÅ[ŠÇ€ÛŸ“±eQÉ ½|ú*ÖYžfH,^Æ•à,OJ\ëDPæ“O©ÙÑ/¸‹½‚Gù£H s´•ªÃ(%Ø"‘ÒQr÷X¼3—%Y]rpÂù¨TrG¿$kèSGŸXýOhœŒ,broÃc2ÒüQ# è’*ûp̳xœ¢mòcq%Vp Çßd€]3 Íq–ÄBUœµüù†Ò~Ê{º‚y¹|Peùp M'bö†ówŽÅÚ±6À84Õ_,²wÄâ3zÉœY`±d»…»È Y>Œ>#ZÀâKÇbN Ù ¶çºnYtu`€ê)9nq_Â?êKhþ J=ˆ^RÆ"Š,Š0ÿz8zM¹×‰¾ŠòÇÏñSGO"¾™†Bò@Qç;«÷½«ÅYèõËSJ-„t± 6VZšõ,èÊH xÐ2"#K(áË2ÁU’«a×°»Ž…8|³sN÷¬ÜæêwMˆEŠŸ” ¬!nÛ²¶D…ÉøÃ åŸâ_P´.[Ãv<õuwY¬$&#±Ú,H|KÇ,ôA,pÚOhÎ÷¿®!4¿v‚¯Çr‹AIÀSšGŠò¼´)÷³ lT :ych¿õ14>•eƒÙnÿõäu©¹1;¯ïw%[ì>t´ ¶e§ÁO’Ñ…5"ô³PÜŒØ×Y¼±3[§»[¿M{²3‰°PÛ7\©M,¨¦ïÅ"BãèÐTTX™Œbýгl Cbcªè¬V…oßüåN;£¦_°°øû,Æd-ZÑÒ- L ê-,¶e-Ä 7Šþè¤Ô²° ~‹ž…öæA‚2ÿQ{D6ª¼Î´ÊFöŽ;MÌzY,1£Â¢¿\à}ª»Û< %kÖûßXpí‹¢/T#ĵ°p6“A[B,âÐýâ» ñÁ]lž´ú»4ÿdغãféZ¶] ‹1ffÑš|¶VÛ˜"o°\ÞÍ¢”Â0äIÑÃÂÙLš?iåÃ7½zX€z–º³{=ÄwII,~ŸRÉM›LɃ·±ØÒìb,ñÒæIßBXˆÚ‡:°,ÍýG£ý[ýMfo¬Ï]Ëv°llcaÛ‰míݤYpI×ÙR5BߨVFjÙy@˜§°Žô¥òÆûd¯÷`aËÃ.ÿz‹vÃ;•‡ MT¯ä¹ûœ­²Ì„þÝÅ¢¿m¦ áåÑ&Ý=D¶´2\ÞvŽü>݃Åç†bÇlÿzý¿o©»<ÞŹêÉ…Å™°˜6~MùŒ[·Ù€Ö³èÿ} ‹=ƒí'ÝÛ¥ûâ÷b²ÙhÔ±ø­=²Ó¯ÈÊ{_8Ð"·Ãâä"k²˜hü|Þƒ…“æhm mjI®!‡°¨zêgj(ïA–º6 ßÀwY4Çß óowŸ‚ƒ!Šfƒ«ÛkqNåÂ+L´¢çX½˜Vþs«jNksG\¯\Ü\'8L¨èhEovdâ¦_RŠ‘ÅI‹f€]š& ôÇñ³x0W>ƒÀ£tñÃèægÙçm:àÙ`QfZÑûL®yÔRRÎ0͸Y¶X€ŠƒÕ©TkšRÀyž]@½¨3YúƦ\oV8&`« ó†Ÿá6åæŸ>„‹"Ã{iêGÈ‚ Æml",tÁ,°°hT’¡¢Ð¾ Ä¢$•è×ÙY¤–†ãé¸òZâ p²åͼˆ°{’Ùˆ;äoÆ,f‘ªÏD!Æ,& L­-gk4§ÔPÈÌ™5³è൒nc©8õ'ñj‘¯0`çÂV§;ĉ<-8úM” ÜpÖ±Xã4½e1Yä ƒgÛµŽ€Å ÁB'<%·ÄÀ\Ä‹eCm´Ú¯-§ï-?× Ãge#Ëâõç.D`%,ÏêÈqù0£QC³!Ü„kM ]Ë YvÈi4Åf|kZg1F8¼p,0`ûÈÎ=hÛx¿ip9L¢4"Ëò"«¢?ãi€wæIŠ$õà!³Ð&–¼”C‘«GÄâ[f¡.‘žc‘*M\‹²N–Ð.-‹™É1rY®øÔ»Ä"Š”&¸ù˜jïÅjÇ=ù"Èiý<¢u­«úÕ  ¼\™£aCúbKb!ñƒ ;*‡Ø ‹2ÒÈâõ@X¤ìÇ5Xì»/{¶óŒ›l¶U?Š"jß‹”òHX×o W-/‘EÂ,¢è3„PÉÒ-FÅH󨇌†žÅ L(8½¶¢e_èG¢§‘âÈ£/@…ŠžËœ#³P{¥õÓlç9=“_{Kõ—&©\PÞ ë¥))Ö9†P»Ä(þäµ,ž]F § ‘°ÀÖ–ƒ§-+éÔ9±ý‚WÆQã‡D,öz›ziʱȰKHxñaÄf ´²ÿrœ˜:)añUDæRÒ¸­AΊò(6ÄBáù%íj€ŒˆÅàäRXàà$úï*‡±Ø#Ÿ7cA½)#ž[Ú}$†|ŠñóTÓZ†Yj‰h­xÍ@áù4ƒIŒæf×KÀü4J™ÅKÌ}þqšñMögÑ_éÊMÚ M³YŠ¿T2úwÙwv ÈíØšøí±ýy¥„üÞ µ°,XL鿯ޭ/ô<“˘Eû×­npmxƒº—Egn"Xd†šåŽZö£bê@ƒõ9´žtõžL,6-7.›'Rš’õLiR¾´â/ >Rw°FàeæUF¸ŠÜU³`1nRobq-Q›ÚEä„uŸ–P¾l¼{`Aƒˆ&‹Îh1X) -µŸ * šÃ"PÅ9ódúã+³['XlòæèÎI´Uôï¼o²UîÞ¾Ÿ›]TX—{Y¸/hK>6S§ík²ÈiC“ :'õÔ®Ð}5µÌ‚¾1‹î|:±hï°'Û^ppî@¦tS¾GÚ¸ÂL]Â7³ðó G¼H:o,Mtz){Ëú-m£Å2)Ô<ùA^µEc]8X¼vaÄ‚)HlPÎG0\[Û‡†3b›XÐó˜E{Ä—¸Å'`ñ®ÛH! ¿9ÓP«o…h4žEõ3èU%Se¬=(ÙáH »&FÁ@£w¿µ“ea7ÿ•šÒdQQSŽA-‹Y‹JnÑ Z;Iê´—EuÒ:˜‡½tÞ鱋A©J©î僧 ð Ã[š¿Qìp7@ö¦Á|–ÃÏ,Rãv¹íe¡³m,²à¸¢‹åÍ6t¼‹ŽäáDc×*ÃÕêgïÜ‚ïÕÿNÃ]L‰ÆM˜`üEs¢Öâ!6¼øH^ Î>±ÐMe‹)ý;ïcÁR§M½eìj>²P½SŠ û„î ÀâÅ’è &ü`A'Лˆjj›ÎH1 Ù*`11iwÔØ^;úüÞõo?õ]E]|ÞH¾«Æ³(ã‘g±j³`Ë»ÐRmìÊEJ,è⪅KÙ¤Áb¨Ûx/‹nsÙ~ËG¨ŽQŸ€ÅšYäžÅ\ÿY“Ežnd;)ZUÖd¯àío{YÔƒ ­ÌÁ²cÍ·Ž¶£lŠgQ¾Èèrø<«Â¶Sc9Ba´›Ò®˜Å ;$6SaÕ\<æêú5X(“Wmë}HºEܶL$4Ú)À¢”6²Ð(ÉßD›7¼ÜÔË=ø×&zÛr!sìÄÂ6M¿I'®@#‹²r"Õ5‚é•j»ÅL¯Î¼I€Åg¼z’áé ,–E¶‰µ¥oáí  íhçFéYƒ…~ÕIËA•Û&û„ÉÛéA736ã[X°ôìqʹ4Íô÷RR3Jç ÕóNZ®±–]íh¶G2lIÀâ“ÌÐçʘ‹Ë‹cù7˜l2–§@…úû‹úq'-ùá,v5Ž×eñ 3îs¸ñ5•ÔÜš,8«–~A¥%ïaaLÀµA7 åe—!ì˜l» …yË"f÷±~àÀ?óúp kŸ;Á.ãaf^§ð÷OaQ Û,hMü0g˯¹ØP®†£WÌ¢¯Ž Tׯ0¦ \üñëkO#} A—m§Žê2Ž•qÙ’x&Êq³û$ð-ÜÔÇ|M@Û PÚ!¯o]0KkN5of€FÚ²ÀYz´`H=‹Ú²ÈâÒ¼!øçoÎç´&ÅõÇ6È"e ¸8µÛDþû•‹1å`¤y“ÎYÈ¢“–êŸâßY‰*öµKÇâ Šõ.ÚÕ¬ÖMX,=‹E*~ÿB¾wÂ"£¦>ÿ YÀwÈ“†Í’9)þ]®Q©D f¡h‡{šRË„Åô­ÔòàüY1 è&§@¡xýìN²`m1³,‹¤JÌ€X`9OÊ6 rYâê5U'a‘ j;ÏÌxÎÿÂBgÀù‹yþX¤7‹`½Kï ذM!ÛoaøŽ,pYg’, %,þm°¸„â8U– ‹2¯‰…6“z3\Í•Ÿ9ø2:|ýÍP.’«íå=¬"a1÷,.Ìol¹e­Íÿб¨…¶s”§£¤Ì˜ÅHa{¡hª÷`3ߨî”Ýû“ú 3³ ÖW¹'´›b” ‘…¦é¡ Œk D,Î̯`N‹ˆY ÷j4e£Áu 9À'ùç×f43 @^àtS|¡Øþr(È ¬½G©aˆö“¥°ø„B>0‹‰ìÔ`! 4°˜;Ó0æÃÒ<ˆâµÑ*`1º‰ Ï.i/Hì#ÈâŠæ¨ê&‹©Æ\ÐÆ«˜Ó«€>¦¤q ÝnȢ«¢ø'Ð|̇¥IЊ[X`Q£¬RÛ£žß‚ âšš“ͱe›ieY}Ð[a1Õ»Œ"´æ »Š¿Ã[B[Ë,~Œ¾Œ†TŒ–5ù²áídr÷ ¦rÁ,N‚£=,0XèÆ©‹n‘~›íÁ3¨CòNÉP’žÙUsÂBSÓªsnGN,‚eË2E®q_,¢}X`g¬ÏÛÍöÚùé`q«ÔØ¡,Oÿ®{^¯$õ/˜ÅŠY¸<å‰!k›‡,$3žE¦Ú,pòQÛQ<÷#‡° E/Ÿª7[:Ðúî¤ap_ì;‡U'Õç–ÅÂn£JrÜÂۋ=YH ý}*,8á¿Þ‡E÷ÒÞ¦r[<‰@ʽ×Ä’j°òÔÇåP¹j°8ß§íìO|±Gž®ºSJ»Ö=akË­ÉÅM -,êÅïRWGø’‹½ú‘óþ”¦Ûs‚²wE}Jo¯p{±Æ™ÔÆñasœáíMlЉgñKÇB¤UGöëS¯-}û:®º‡6ʵYœÙ#ʳµY𥫋E‹Å Y&çîÅá¡hÉ _÷³XZ²—ß?‹ß«ý¯g§-kØQ Rúùè²7â‡Ô©¯#ÓȘży©c±ø°,ú$ÐTv ³!‹0˜}ÖeAñ}ø(±`…*d×oeQÜQ¨TÆ–ED“)”;–kaQó9j¨naüT€¥U“…5$ðº•Å(sãÛ»ä·üvÍ# bQGh [ƨÄÒTï“uEÊ|…,TÀb‰.ºäêÄxø:ÑÙÚœÁÈJ‹ÞI,Jb!•ñ.±(ÆÃfñYŒ†˜dRê+U§h@Å~!hL)“cjeYÔ4“bIH´ÑŠY¨ †A8ÃeQšÁÇ>UÇÌ"O‘…XFÞ)ö ‹²~ŠûD{l9­)ÂÚ]&–ÅTÊê+ ƒàXà‚¨°(©I,¾, 5#«žÊ%l…sçXÀÿS̺®žÆëúu2Ã$s;,J`ã$hX–Ä~$ƒê«dÁ†ô5²ÀÉŽ€`Í£,¡µ f1t, <ɘê.±€2qÿOˆÅ«hXÖÏÕŒÝÆP&À"©‹uRñ˜iº@ŸC~©OjRÅ‹1±ø*eߢçsqK,,R~þÝb1ÖZ¯Dã²zœ9Sd±‡,4îÉYD Çy'c=Ô¤æTX”æ´„ÒBk›É]x±(Ò⎲øÊ 1¾úSC‹u±†þ1¶~¨.+*1³€ö³øë ^†,ž!‹×žE),êÄ”j,²8Ï&4, zDaQÞMÕËg¼êh‹(zžÒÛ…Ò‚íÅ@;öL4óÐ/…~îXÌ Ëb}s ¿|‘DÂb”Ÿ%F‚ÖÿÙ-fþ3Ù€XT6}_á*%íˆ ¬áÿÒ± ŒÖ¸ü òl¯Øj Ï‘Xþ_%5³ KÙ]—ï& ÌüËèK¬Õuô¥ª©ÆdFâò§†X˜2Ú.᣹0PüTIŒÐZbAÃ1<§Ø=PÅ)d1üŸ‰Å×pÍÒNÁÝ%ºŽžÌ€‡vÐâoùÕ#‹œ¡ ˜EŠç¯øåC¤˜ñØDYñ d1‚n¶Œó‹Tóp?ó¸fe}wŠEÇÅá,Oe}!Ö ? ú¬¸«„\rÙ†ºpE9§´šƒ/xƒðSy¦ü# ÜÆ­W¨<1oî"‹^·z²”Íçümn½A¾R¦r¢œ®VäCŽû@3¦±uÓ“y »_kŸi䱟e\3‰ Š#™Zí “Ùž|²ä}—XÌvŸ’xÓƒpÆÈ΀M[`z¦fÛ“L²Fo¿ß‹-ŽL'üOkâwÃ<ðñνYÄÆ‰$daí%«©©Dæ0ärdÑžÂoûñS*ì3Ó±\XªðöŸä¬§@ÿägöþœ¢üÒÈâø»ŒSžÜ]ÅêIJ‚Ž,Æ®°œlLªe',hy³1gU5^»ü‚¥?`a瘚ªJ¾I?ïy´{½jgи-Ö±ø†,ªn‰©Öfa—ÿ- ¼WMéØ*4šaJSÛáOÁÜ<¥qÁ¿ñÞ¥,ûžÐ1¹ Y Y–Es]ºT߽ش%™„,»µú*^ÙdVIϾºs¯Ú.¾Ú é€íUÅ̲H9éÀâÜ߀NO6° 4¾á[s™,iÞYb§[¨dÍåeÉ&‹(»Øhŵp™ ª†+e2Ï:—t!ÜÝÝs9'6|BÈ¢RtðrU+¿šÀ§·±py¡t1 VƒÂ¶›œÿÓN–Âçà˜;è‹}mì­ Q‹…5®l” f±XÖÊwÄû³ø÷tx#‹@°W¹²J‚5çO¶g¦ùªoï~¨ƒR‹…•§=,ÖÐÔ±¨)|AW=ÒÌâwü”Ôÿ°vÛ–÷G'¸í>¥_º,ææ\Ú bq ,|7Ëe2·&“Ä?W´µnT‡Ú]«\غþ¾Y\[ÂôY*d1^†¯³Å{n\¨™¦‚ß°øa±hT:d±Â)fƒ…CÊE—E‘ÚCʲø9~ëeá³jY\Щ«wRÜæÜ×O¹-égQAs—R÷1X‡©äìTÊR¶qùøX4BÁ4Y(nséT7Þ˜Óû8p‹"¼¹©³8«S^0‹£µU‘ð+³¨“T.P’O,d„ÀZ¤5îZq/?0Mô€ZÝþþìK̰HÛ,°zKÆ·±ø}FŸYO®Z,d’Š­ŽD欕¦:HÈíH? ì Ú,°”ŒS¹@‰s. ±:!,2ú.Ú³¨[m%ºý2ËPÑu,ð ©›ÙñÚ(Öyƒrñ¯R¹@™å“Ô]N¯_ú Ñ ›,ô68½»¢7³ÀQÚë!° E˜Ú»˜oR¹@™â“Ô]Ž,lÇäX`»`Y”  qW2#sû,óìÛ°¨^ÅÀ‚& H…ÖÞMŒ‹ \èà'qOb2ËÀQºi€ˆÆ1Ÿ»2¬ØÌNÚIKÛ¾Oé°Ðh¬0¡hP-)å'1ËÿN¦Y dsXM$ò.ïCÖC@ÍðƒcÁ±—˸£sÝ ›Ý=A8Ùu‚ŽÞ JZj2zÃ"¼ “WføX8žSéB8 Ú0 ß®sŽ'Y”8åÀ{U‹¸‡…Z_GŽw°a£¯@ЇûÒ¼m³ÀDɸKÑ”Ÿ¦(æKaÁñ¶°ˆZÁx{ÂÕ/ü˜~Í$N¥°Ðž‹·ªÁ º,nбì´+îqîh ²X›Ë‹ÒLð»-‡7ʼnÓ9{•¤®€ël† 9ØÊVÍØ3‹úS´^®² Û•bã€,æÅHXKE'Lë¾ì{¤Ç޲•SµóŒh,Ö²¸âX †aY°‰:±8s,x¥ Xœ‹¡°˜Óš0ÆâÂÉÆ«& mΡSÉÙs75£aåíÔ윻Ovod°»Ì1‹‹þ3e…cQg«:áø¸! %,j`á¾FÈ÷I¡@ÿ)±È¦?›qÎ;eS`As< Ps£aÕÃbgŽ6Êεݜu4go¡%&™eÄb†ä̱ÀtNÈÚY”È¢2Õ‹ò}Áå"ØA‹ôÉ.?Æ*qFî}Ðx”CéZEQôèIgnØ]‹, 4:&)4¶\”iôd2„,1M /þÎDÑO¢bb•(bÒʪ‡PÅʬO" r7alMA/íH>‰\ÿ ½×®#»]÷-:;B7vj;©S¹ @¹s@Ù£Á(³.ûWœÁŒƒ Cã IDAT5TŒWâqlIjò†ÏÈR`°PüP¸¨—Åaùdw¹‹Ù“G¿âÆïaôS CqJþ—x^”â(k„ Öœ ÔÖœAÃ=ZšÒæSÂbèXYm­l˜šÄ¬,‹2ñ,°IF]Kš™;ÅbÁ¯JÜÔqÄ/[¢ãäÖ ±‘M¶‘ÅÂø…KÐHfÒ¯@­ÂN…Lù3Ð…»>K‡£t6"Â󱸴ì™EZ qp@,¾´âTð(yJ˱¤œ¡EîîCΟ›ã‚—jn^1ß5N=‚öŒ÷Ö1ºûVœ{U¦Q†,Ÿ‰;"–Å©öË®8R«ñ5°8ƪ³àé¡IA3Ò——=Fƒ€…€@lšîÅɲ"‹2£nY¼Ž²±‘‰×;ÅâŠÒ{&ö@‹‘Z›ŽÇ<°r,ª -:dáÒTŸ›¡j††kº“™å/,RfQ¼€r,„Á­²p­ ¤&·R¶I!i…cQ 4ª&ÌbÌQ —Â+ ¹eD0`pÑÐÄæ¤Vgãò³¨ˆEÁ›1ªJÅYp:n•Es 9cvß gxÕ..ëO¡…T¼¸ ã1±išG¦ö,ªŸûmG=‹I¢…E=ÔÀâÞŒ1ùXäw–ÅÔ`óNóK©)L¹ärqt¤k(O¢'´XYÇ<›RdÀb§©_®þL\zÒJŒÄjÜ®>ùêõÿÏÞûôH’\ ~ŒV{ íEŒEl¡¬ ~5—jlMZx n#@`{Àç<¨SJ÷š$D0tœ1!Aw¿€ž ¢cÄäè¦ÃbÒcb±©ƒÀò@ÊRåe&{›ùŸÌÈʨ&Ù•þÇìçöç™Ù{Ï0²½a¡jQzÄD~ ,ÂYó•~²XêëÜΙ¦Ÿ«:ðzù¹[£gºä)õ©åcZÛÔÀÃtB%x¥vuXddSk…1XЋ0òÒ°çøÒD˜¾.ìŒj6²,p„^­×ƒ9ÑèÔO¦1î•Й fÛNŸd.ò,RZDŒ˜0rüÚ¸8ö†F5:ôšM‡ÂLÿ÷Ŭ·MNKXæÅE-òdqk÷¥v,JÃâs„83ÇeÊâŠEËè#}~±ƒB³¡"¡2ã“‚ PÖ.`·iD3¦SÚšºÙyG“Sˆ¤ê¨Þv%ܰP,×–Åç_cq95ß×9㦡ҖÃ2zdX‚?{ƒs,P¹å±7îįíÀ!²Ãm“ãqÆý½FR{ÒNI`ñlÍ\XÙ+ë<Ä @IÁZ;|¿,„ÿÍ•1éàPÚý18$¸5o…±È½qXñçîdwаWzbgfW4ÖãôÍ1Ü£?û%Ìš[ax-«˜Úþ$¦Ô]­‚ç†RþÐ\³ð5:ë¶AÒ?·íÄÐéàn¡É–sØ)râýÚ½þ f¢ž—QYÉÕcỀ\·’êŒa…» 9¬'ûKOáúwbÿÂàÝßô`d]àj<÷.#® 9ÖJÀc1ÓÕa¶!©°Ü`ïîE¿Ñø¼Óª½ÕH^5…eì5ÁZLe8ŽQ•¼;¶YD¾ù±pú®àV€ˆÅ…¶DzðrÕÊCYµÿIß®ºê®×,±™“¼š-xÅb¿·ó)¹:RÕ Dã&EB•Ïê7¾o?/`£nŸá-rú3­š1éx‚ïý:ÓõU},x×Á¤óÔªfäÕ žž‡{8øãÊϬ›–Õ‚[`ð@¹ÈlCdû1Ï·ÿoéZøtïr›Ëâûy*u5 Šö@åbÙ`a_ò,*QhZn3Ñ¿+¬[ð ŽÅUͶW±n aà·Y·ò3z£H”XØ…«/àNçY"–ÛWT³°Š ²(Bn= Ã²b+ ‹Ž7ýyÔ>VÖ¦@Á†äÜгîO,¦n¶]bô[:üÖ °°´0â£_-Ø‹ÚFߌEÐô/ãví‡Õ·3±è1±0,a.hQÆg¯e^òØ:òÆdÀ•©±cñÿ&tüã³€P§6q î Bÿ7ÝIÝIz6ê1œ%¡¶sêŒ>¤öÊÅOµvºŽR&®èŽ•eaOYWªÍYùƒú·ïzXôÙEzŠÑF#½ŠM¶û,@Ú,Îeef“nfñÚ¯ï,Ö=,†š4ÝD6…w²¨…)Anꋉ”Ü”µSó1?ÞÈ" Xg¢,»+ÎÐ]n$AH†ÖÄâúüµ=7¬Q†¡¬"¥ ©¾:/ÃÌ4X°ãŸÖ¿u°X÷±ØGéÙN†÷#²˜åµl°Ñ®ÓÝòP5 ù*Ì >g]uÁêz‹.³½»ù …ΰxƒ,ì2d¶.'JPÄËÂŒ $hóh˜%ÿÌfÆ ¯ª~äüß\ßȇg¡7íƒs=,.¼¶sfY$Û :ùÏìÛöY4uð,ºÞ­l2Ƕ,œ½r)B§,^º®[}ÏfÆÖüÒdaë,÷Àb“ÕeÅ‚ôwË‚:,JÅÂ4e=JÙ·mûüÒdaÛÜ€…åóöXôÙH‚H§œ»>µÄ¦Òj,$x UÅ̱8¡WŒý.ö#žâ`Á) >D`œ]óêö,: ÷n*†E„/ €©¤Ä]³Ë^Eâé†GcÒñqãUda'8.4°8…ê9¢éè#—½Õ‹›´.=ô§ßªóbÆ#îMÛz é&ç=sÔ_sqY&Õpx^³(Ìà1†ÅñXLa2‚FBêq¬Ýš–§Ëz°³ƒØ2UÆþ·=‰deT‚ÿ!L08°T}Žs*%òÀy†Ô¢L¬Ê¤Zú[™< Æ`ö€ë4¨_ØÉS%ä_‘Œ‚¼$9oL;§×6V6Bk߈óf"™ü1²€äÉäÿA0âc¥æ4*Ò.Q?XÀŽ‹0ý]tZôYP¡¸­(àfÅÂÔðp˜7°o®¼…Ïw‡HVÌKîXè Y€>>Ó²’pšD™Ò.©a!ȾDèÕu#gÉÔõëE16,NMCôbaôÚÙ´¸9 ‰ÏvNÈ{g1VŽÅÚäXÀ›¤ªeÂiVú|…:u*–¥(À‰óü×°Ü,Lý¿€‚åúÕ%– iÚ ýæÔ±à¥æn‹g†3”Üœ5e¶rÜ"^F×½´d‹2¡]F™Ç"G1‹%DJ!̲(ôùÃD?°ålá2¦âT½$…iƒVßËBqÉiá8ù JÐeª¯nÂÂB°åb?ܽYaZ2Ø CÀàæQ8±Œ,°àÒ@r,âµâË'?7_ë)ÌJvÑ^Ož- ÉÏX<Ñv;ˆð,Î$}‡MnÅ‚ãŸÓT»ß›Ï?3÷öX@hXŒ`[ßiç"Mbb1/U4Î>Ç ¡†ù[²ì`#l/Rg8"¿v0àMžÈúËâfuä. „»7ôœl8L_Q±ˆt9Nlù¶oÒ±érz¹æÚ¦ rÙqã©eVeßå›iɰ/éËÙXØ0Ú7pbÙ.ÈBT, ¸M²õ{(ßIfsò–f­³±NÇ´™ ±@=ì2ǘç‹r$Ù—°‘\CØ€œ¬!²íá~>°H(ê°Ç $o¥%°Ä_)Uø‡ð«c‘E%‹Ó¯ìy8Õþfìä;Ÿ¾Â2<ÉG)û>j&j¬FE¤F0vÇñÇ2¡¡Vþøö,Þoú‘&^.†ß òcÞð8£(¸¼åX”Ìä¼àEœâ„²0=zá´à€„“É7ª>Õ—3*öÓàWÉ¡íŒFÑ3mß–Sª e\Ðè—²ó|+Ä¢Z!;µÏ§U©sëì´%ÜRK®m¯ ¦Å`&TÏ–ºOÕ>&®s–½gÅ=hŠ¡Q½q¶°Æ(öv"±{íÖŠeáš÷´Yã´šM`‘'×½t÷áV¼0Á:ÙpË¸Û XÀ+ˆäL"ì_Þ8­.! ;õ¬³äGOºaѾ__·r#%þ¸Ô ǂۿaÍ\xlš,àO‹ÎˆäÝ£æm,º§`ÔŸv_¶EÒ:Ù)8?o³Ó6÷¾‹ª5.6²èœ5íŽø7k|·þ¥œ¬¢ß‡g}¿ûÁÈb5Ä¢*[%GÉŽ,ªÖ¸duô@ ýù]'‹Ú´Ò—™¾öYþ¸¬s€íKÖyUµDc¶ YäqÀ¢¾¡~wáßÃݹÄós±…E–„,*º%5íÍZ(‘NÖYhA¨¹ì7Õ…÷H9ö’Žå¢›…]`w1 ,èJŸE²íî\Fp~ÁÏ·³KL§_.l“P±°;ÝKì8»ãÚ)ã ß@$`r)ºîe¥ˆƒöx!¨ŽL}~U©'1ü¡šÂxq2ÞÂ"7wwå1h/\Ú«TÙI$,›ú¯Íå¢ü±û 6ÜÕ¼=€ ´¬×³àÐ¥ØÂÂ;ÕgQ¼‚OÚ,3:×VqwâӗzÈ~g+W\9ÝIàŸ ¥ s{º±|ÿž»^±›…>¹kYÏñÑæ°H=ʼnX$ úÓbá©Ø%²XV,¦Õ_ÿ"=¯;ð.[·ŸÛ*}±uÓ‘¶úb !‹RlcAýLU Õtúî`Èr ±!Áƒ¤èYÚO7ŽÓÕ¨û8²Ö'ŸÓ©ô§ÍÂÓƒŸÀb§ä›X¤&©wÍBö°È»ÕT’w•ÞùS‹©9Å]bše´¯Âeqêq2˜cSÄ"édFɰ"f‡ŠwÄ‚–Övbowéüò©‰'Ÿ@ ¸ 9|F©]K*°Î^ `] ,ØMßÑ vJyÇ™:NŠ i»›¶sPàǦ¬lq¸ÚúåÓfžVä“_ÐkµX”À^3Ú= ¢’½J|k78%ÎÍZB¥:¼ø+´ *…k™˜£<.M¢ÅYpËêµÉ¥c¡*—¥¹Á¢ wBoʱPÊ"ƒ ¦ï\;¿ü¢b±–,^J2ñYÐÌ”aP°X`À‡üE},4 ЄàZ† ‡ço¶Ðà•q)<X`&²†u<8µba²âXHaÀ(Ÿ…pÓú?ŒõÂÔ>8s¡*¯ø9z;´}2mç³aÇà»b‘ÆÙ˜X˜µˆržý5d¿Ð%–‘Ï=–aag¦¡ÿXAÄ—9οþ{ˆì!ûwZâ4tHŽÅ\&‹§±QðŠYðçÃË%° 5Yl/€E½ù,V ÌÇz,Ætú‘ùl¾äìˆÅ¤ägÈbk9±ÈÍ×’Xœ‘ú[€¼0·.ǹhב4øóáeA+- XX3ïr•Õ˲†B!‹fø Ôß”]äEÅ&ÃePd‘ èVõ8ù—ÿÕoSÝ\ËÏ™³öXØyî;´Òß,ЧBæÆ}í†Å'˜×Š.í (é öˆtÙy>® Q–˜kU”²SF8d[ •²((ï¦ÔáÂiñŒ9%Ù/ þ¹7}€}É`§Ëb’EiŒ“°è·¦¾Ñ’UðH3{E“´ó"NŸX9¬¨ÂÕZ;ß(`º)@,ðžÛ7ò¸+É¡|È0ÎN­Me¬lÆñ9ý™šy;ħn!E¦‹xZ‘\CŽhv_ŽÚ9ö©r„õ¢‚¸×eäì¢Û,î­½À¸‚†[ÖT¹9Wè¾jíÂý[­@]ƒþNö‡TñQáŒìà‚rnTŽ8C}D8=û€ÚNHŠ Ù¹º& 7 o/â6¦ÌdX¾ÃUj1}·×vÛyo"0ˆu,lfyã ÷½½ˆÛ˜J•áÄ}óAÜ&>ú!{<ö% µŠ ×;_áޜͭ6o¿¯²É"¼0Á?›œô-uðÍ·n©m ÙmjU7 iýÛË6 ç3k¥1ekWölý!YgàÑu°ÿ¬žÓM°xÓyb%N÷µo™‡ëX…  öÀ!Õ0lébñÓj®¨išcE2¸ì¢yX´NìúYØ–»Ç$œÅº†•‚iO2œXzn½•‡+éYbýÂýäaÏÚ £ÛÁB}_ŽüKÚB,fðÑŽÍ0¢ûl÷ úY¹ =,ÂÙpÜoyÚ“ w…­®Ä‡,Ê‘-VAYŸxÿzIl}-GÕÂkç%],V”ˆN!'›ò˜’z´…EX‡ `1ÙÌ¢²`4‚Ý[@t¶B©9 ïúýÊ|z‰.ÂöVÙÈ‚b} |¯BuˆÖ™°– BŽm›ÛOÙèÄBýbûd}jÒþš4Îédñ±R.pñÚ²(E¶¤%Kêæ|+Œ,šÒ³F½]Ó×3¸­fܰ8bƒY(M,ðg)xÿï’^r“Åt7†qC¤ÉBtžÕÓ§Ù ’‹.S2dqŒ?kÙÌ›³kY‘™è-YtL‘›²ßífáw‰U»ì³à†E³9óÚýF¡!=+ð=2t_´–43?¨¥I O% F5Y4“›°(ÄÅNçWÒl Ò8é:-`a›ÔVù^}šß_ FÆ|]Ò’¯QŸ×`Q&7`1x¬¦$á×Í üVÚ,(DrÿŠ[eìÖm»õ‹0j«aq‰nk»H9Ø~~‹dCnDºÖ`3øÍ²Pܱè+é eG›vRÚIò†ŽÞ)ÀâœÚ ›L ÝsúLCìdqýˆ½IƒõÜ0Åæ[óÁ2øbGû9dXLð§×é,•T«¢fÑhAiú…÷ý²$Àb<œE Jƒe‘& ÕøzŠ3ÕFï »å&‹-ã÷.†Åñh+‹ÄþU1ÌŒ‹ùkÝ`QMcÍp²Œ*YXKu×ám´c»K響°,(:Œ"‰×g\R{@ÞWèÝN,LiXÌð&”«Ê pFZÒˆÆreÅ" X ߺgßÒ?qŒ:¸¢UEi·£tT†ÁÊt¬hB1ç°p@ýÈ´ÉBÂä5*|3Zx²,¤ “ºbdµo••’ ö²Ú³ôèŽÅ̲pÛQ@žqìð–߯*AK‡¾žüX8þÉéSƒleÚÈS¾ùÙŒ hù³Ô£”Xl„ñ"r §•´£"ªj…yX´Ô1‹kÙmbt¨$›~„³¸~QÀlWbÁÓ‡4ý±–£ 3AFc#«GÀ™ºàÄ‚æ«%Œeìo—Š™âS|ngÀµÊ»"ÅbslŸE×Pq« \Ç5¦i£LvϘ¦ÜM9Ó-Þ›†ƒz¼µ>_ Ó²€åšf §’W,úTýFLƒ!ˆùxgŸà Œ 놕A÷ŒJð²S%ºV^œÍ›´n½‚¥—T÷nº5+ ±×˜/ ìË›qÃË›7fÙ}X;Ùl”Ú©âCX´ÚX7Y[ö³“Þy߀>Y,ÝV˜ÔnX &›Y¸9–Ö~ènéJrw¤•g»ÖÙVÛ”áR¹ÜwÍ›Cª°(eºŸ¬7fWîÆ¢1a[7u«ßZسãÍ“}MÔêfiÌ… X¬{›#dñb¿áí¿:ŽÓ¼Œþ}¨”ͱTJÖ¨ã ,m.{O¬[&¯Í¢Ð+¿æ^ôÝÛ £Ehj;$Á¯ŽED ^ªi¾%c‚PÛuµGy9£ã¿ÞÁòGÁmÂ+¬! ÑËb±‰ECj:b‘8A€Íc‹¢VÕ©Ó2*þPëðíèÁò¯áßF©@7dÑ_.¦‹1Ç[Yð¾D!‹× Q"‹†9Ø^üS¨‘CÄõDÀ‚öøÈ…c…ù~=,¼Ù´±µ…•æ+ªMðBã€|ui‰àÒ±€Æ/%¦A‚FŽ›Ÿ0î´®XToÁ§"FËÂjŒ .(_ï`º ”¿oº“ p;]a^ h‘YìX¼¦É( Erz0 98σw#Àp#N“ûµa‘A˜ˆ"dqéðAò9D ìgŽ4voz3Jiy¾„MÜ 9HÊ$°Àà¶I$> h<| Çâ+%(#É”‹%¹óy^ªh›¦ ±H2ˆÑ%>‹jK»‡²fQ`ÏÂá/ °P•³,’Côí‡ñnŒÆÓÀb•ßKdër†¼Á2ù (ê>‹Ø±˜YàDW`Ï"ˆÅ`‘ƒ}å5yŠ'•Ú~H,²?7y[ãša‘¯¥¶,bÇB&ŠñÂ|«Y\£òoÄšëS( ´Î§’‘zu)q -2/ޏ¹U,®À`Fä¢K¨#ÐÛ”Éx”sSiv°= IDAT+˜°, ™8È‚C˜lŒÕÎFnõ¹b! 7¡0ëR§,‹9®Ø»í³‚A%Â-Û±±«¸0Ð…µ½21_ž@qŽƒ8C…}ʘÕ?ˆ…‚Fë.¬«£cÓCÌ;†’ ‹¤¯!f±È\ŒdÁ1HoÍB90™1‚;áÙ³õZLiiµc>Ü·˜ðÄz°somgß‹Àý°XÀ¾ B&‡À¢žm¾05ᙸÃ~dpÛyßåbâí²rG2¸í¬§ï‡Å‰^gwÌb°Ôcåûj/æl$ÓÃâF¶ö¢}È5ë ò€rZ}º¯~d¡ÿ}.ú¶n`ÑܹÑ>äT« Ýpû÷þXl& /@jFlU­o#ŒÃ5Y Ó—jlÒ½Åݯ÷ÄbÃæUËqûW¢úèâ´[©gÆ,ÐoÀ±¨Mšššîß³müë oñ½Á"Ä¢’&‹%£¨ØÒdQ fq©ãʤ©Á¢ÄÏ€Eïnœ…X5~û§¤Ú‹(`1÷X4Ö‘‡±XMÅôÞYôvt_µ£>9ßã€ÅÙ&IG`“®¶3KfÖvð¾Xð~ƒ"î`QÅm Yðº?âîÃsøý\½©ŠY×3sqÀ,dÔ¬#º6G X¼Ö³6 õÏ÷YTh»žY2 5î†ÒYGÒ~×P‹ú…ä3û¼ûcÑ/㦮åÅ X°dÚÁâ øw8 ß7‹M£²³& Ï^7dáÇäç.ç§ðôYTóÀMØ~G÷Í¢;&ɲÉ«3‹XÖI;°˜ß7‹V0&OŠËÆ>c êTŽE ,|3š…¹×Ê]ÓÃâž}27í,Rü¤¡{ø,ŸÎ]À ™Þ²È°C­ a'‹³û.yÇ&nD-BP¸ûÁó£¡ê1sfª±ŽƒýÞð<³*©íí›,Èy‘ßs¹èbîÐe”?AkekÒ{…ÓpÎú°É‚úQDæìz±’—–¸Ô–‹–E¥¾  ´¼o];‹ 8¬ÆŽ””²cˆp'cl/0/˜¯ŠÅØ”¢ÚÞ[ÆŽD1‡)q8ïÜ\³†˜…ÈJZ Ñ:9ç9ˬ¹`öýù°£’|nͯÿ+üCm§â9°øœòr ãOl/J`¡8@[ úÝ ¹LsŽkDYb°”ü¾ýS›Áî¬À¨cAïm¡Ë¿49G¹e¿¥\;Gü_G¦íd”ˆ›Ù¶35wKÀ&ÚU`q&ÍŠXO±üXôÈf°;…c-À9X°ŸŽÏ )ÍÇ],ãß0KËÂdrÙ¶ó1l,ÌX„Þg9cg! X `B0 MP[0‰ƒ,D¼4,Þ NuäÂ+ŒgÏtl½DʱJøÄ²x`Y@kZ©ÆàΛq=Åí@„€?D×øÂ¡Ž0 œ¤`15i<~ÀÅ ê·,2~õ¨X<Ö±]5,Gå‹dAý` ôZ­X”chy ‹Ä„P,1Éd±Ö«Â;hõø°8UÇ`üzÁc˜x EΤcÁS¾J©I'D—ºø†È(&3ß|D¦K“úi²4Êë˜üzÎUùsŸÏ‹L1ãP7}hX¤O‡Ü€íz6°@é¡-ÐCcaGùµDÓÔáÀùEµ§Ö¢ßnñÒMòœC\ŽŸu§nÕÚ4 E„¾­Kb‘a!1åbJ>P`* ø XÐÐIF´ï•?H«ðÜúqSB£˜%/yë>Ä"?ûF™%#~üLÔ¡nÃX2ùïKÑzáŒÞìgŒÏ7*™ê˜K:$,`¡X˜´T¤õ¯A›–UÉÚÎŒÒ3h… TÀ°µ#Ìù±€ xýU¹°WV~+¼Wé³#Ôwï&üºu¤#"ú±,¹:õ¾7XòëHèÊ{ gÆbÑÜŽÎ/$›¤}àU]7Ú/‹^ãH·1æÊžYÜÀËëpdÏ,{y¢ì™Å`O…C”?²¨eß,ø^o÷aå,jù#‹ZþØ^Ô²g}³p… g!î0Ãeë¶©·á,xëÈE×iW^PíKo,gÛO¹±4X„ L½x«d̺n¸,ÛÇ`ðôÎ?pó·Û|ïO,ÂŒòxkúqÿœMÄ{½lÙŸ#‹ û7ßvö.÷[k°€ŒÌêo‰÷SÈâŠÛÃd‹9²Xù7¾1‹¾)ϽH‹Å[ÏT{ 0 Ãå© ÑÞø˜ö…]ú6à7gq—Ó-MÉÜKrmc;k²ÈcÜîµL,x›ÅÙY4·[Ú«´Xœy«“È+:o²Xr|Ýr‹,™iÌ>¯}œ,VdùÂNídQFW­¤¹cQËÍYì=4›'5 |íe2Yäd·Y˜:RÄÍ:¢Æ ëç’‹™²?¹E{Á·žrs©Xp\¥‚Z°È8ÖŒ6ßLÇ4 Ñdñ®Å¢Œgz_,ö¸Õw[ Åqª²ÅúNÇÚ,&EœóÆf|ÙUÝàÚequ+½nito1üNœv=ª*Ý,¬L +ákÐ4Xä çÔdq± ‹[i+˜èdã)b† k8m;˜(¨Ä"\â/<NNfúæmgc} ùÖ‹Î0G°q¢SÛî=,t‹ºNà0÷®³,®f> °&ýÓ6‹ùLcöÏ«û gŽSåOªïØÕ,Ðúªõ@Oº&”paÓûXÐÎyÉu‹8d‘¬(] ®Ë?i³Xžj\ù9¯<†³ÀUsÒÒBh¤©ÄoxÇ•$=,lÍ ûÿš½”Iæ³H\º[,@!6_3,T ,q†Åô,ÐWȆº¯XÔ~AfmÃjc'‹j;“&‹`ï %ð½/`Tä?Q&i' =öXØ %´ÿ1” «)Í6w~²ñŠòGø¥bQ šìÌÂèÎcë8ñKvE+—d='5Ø]»`ê(.iç°(€ð»\Ý™ù?Ø@y,J·W–À;ë…+„|3‹_Ö ¤[x{½‡,”s®ûÞTë×Ê•U¾J¼Ã r\ƒ}kÉÜfu”4Ê”c1ÖãõSï’'i²¼†ÚÏh]Í…'*q1l䈦C°zû,âêoðú£µ³xÀ‚6WQâm¢û¤›…[ꔯ„wX²]@ h:¦´kõeT´í˜‚]Ïp=¼Ñ7æ8n|I{€C3‹¶´så¶Ð6÷¦úèX\®Ñ+õw¿ì’òûøÇcÑÚ�k¤×Û¡oÕ=i7 ˆ,ôjD舶=àæG,à& ¬†Å¹^¾ÖΑT‚~nXÌ¡éZ­qQ„X¬¥w¥Ïrª/ŽÅŠXÌôy jO~UhEO XêußÖÍÂÍš†^ÐÈ’†&Ö*Æ Ъhe#œÆJÇn•¥<ö¯D9ÁF5 ·«&.^eBëdžn_QúáDd¡È¥|é®%£[bl¦zÚa¶ˆ®³{, Y[,H¿à=«ûots;HËbê¿Mpl²•Éâ u/Ã"õX@>2øhõ °¾ Xdà¹C|gËâUµa-¸.Ù³êëÓž1×8Dþn‡+Òµ¬Ûba7²#oÝ"u5è|-Ó™žºèÀÂMöµ©=ä³€¼~FùY°(/×Ú|Ü—û„<5:ßCÑÇVƒUGnÃZ»¦¡Fv÷¸­±ä¾ÜÜêà‰þ?(I i‡XÇ#+[¡ÜÀíV H&ôÂY2uc2`aÞTío†Rþî² ¥Ÿ°„J©Ñ8 J‚L¨GƒÛÙ4W£½+L/UoVÁ¾EçýÁ:­”q_ì²ÈÄØëævlF­gš”´}xł̼)àØŠÚ%¨Äxt ,œ&Ã- Àœ'S“P‚D™pÅçeᆩXãøtI·Å â{”Yp—⢽YçÆdí¡»“†Í{%çÈbfvÄÒãO¨›‹_š×€,dd“BeX\ÙÞæ…Èi›Sí4Ec{j‹ Âã‚=°€Lº1¤MØÔß9ÑMÚÖé¬ÃÛäí¬wîfÚÏ"uŸá<…Iì“WŽÅ˜¦øJrI|˜X×s«Iæ4ÅW¢£ ˜6Î297,æ–æVhÜ´ºÐbÁ …JpÈÚ`ëu=oÑöëªÇËvÓÜ9=ÛÑ€»{õÄÖ2,L©ä×À‚&QLž± Ðiâ5f!²Ï…‰†ÿ¤c›^ÿ(`Q8+dqîf ‹‘eÁÐXàRH¸'¹Q7ßͪTµ³-‹)0lqjÁæÛý,ú4#Ëb­Ù1ÃÆeYþZ6õÖ´QÌgQT, ÖßU,\¹ÈEbYœë÷‹J%ÎÍOŒº`¡<ç:ÜE°caß6íP·T³ˆ«º÷'Ás±0·Æ›äD˵y)ÄŠ}jÊÅQ>ÿIÁáF3Î`ES‹RüG½Žôù'zj‡ÓŠ…D¯‘ÅTɊź;˜T˜d`—âÏbÒxWm/%-¹½—Mõ>w-™cƒ÷‚ÂÒ¶Q^›öb-#ÔjpãdÐOžÄòÙ(‹‰Åg X˜Ž˜ó_èõkýsSŸ "­ôâùMk*•С߉äq$óYœ*ó.¿j±àÓ‹À±ËËáÉxkG>[ÿ+]²fÑôÙ΢°º.èkà¤ÿüI ®ì&÷ c°¢YҎàüŒ_ƒ#òßC‚Wú7¤ Åæb`aÚöed4Ég 7(7½i¾¥˜›Îñ0cRgÔaÛ‹ ZÇÞ¶•c&ZšR«h¶~':…Ä ø-Â.P ‰%Uú(ƒ²ƒã‡s“u,±³ue±—t3v‘PćÒT"…X$@N,B˃.[9¾K®´Ö7†0ûÔ¤øËšEJ™ÁâÏž':`;ÜgzæœÜûÔ²0?&x®‹X@ÏšC‘É/¤í,‹½›„Ý`;¿¥)}2Ê?cÇc¼¼€BbÞ!{“hçd±£S “ Hgb·i‚ó²±aaÊ%ûŠ}šhlf”a<ƒ&üó@—ä¹þœÄË‘{7 kMTQ‚ƒ¦¡Ç_ºíh¬žÀ¿ƒ ªn¬óc ,hßrÔ´#M 6æ¿QñPhba>±ƒŽºš8ƒh!ÕìÙùÞ5e]¼üËê‹§þP.Žž<ÞÙÜŽ°€EÛbe™·.ìu·õ x},¤¬ÛÞI}\¢³:zúXxg E["ЃŸ ÿ¦L žhA2‹²î“}õ¯Œs ³$‚6ɱè©6 ˜ø£F7Ç©(…§Ÿø ZÉì¤IÀ‚Ûa¾?r¬ã‚ÇÈÂÿ n˜úPY$XÁ+þxNáˆþúš¢Ã™ÞÛ¯Ê ÕeÀÂÁýÁb9@¿ÚÎAÕÖߊT÷eDg:áÔ²8ó–« oç™Ô²%3µ7?<ø¶¡'ÞJrJF(a¿}"9þ}í±À"¡=…Û²^™vù‡ÎÛÕµCe!ÂiÛ‰E膑~ ×a”ÆêNFqMåKƯ=•ÒÕ/PY‚eíņ%~Íhµ=QÄí_ÉÆê5Ô›·Õƒù¡e ~Í©m³8u·c‘WGºäY$æá×íÈ­C¤‘Åõ þ5ŽŠm÷누ÊÇÈ‚æÝf{àÇÈ‚fÖf{à³èµçÍÿðÊE/‹õ þíý# ’ÙÞøñ²¸Øû˜Å¹Øû?^û—?²¨åV,vvÑ»ý”ÊͽùjÌBýµûTÇVíCMö/qwÑ+ö b0‹Ê’¸ƒE¨!S¬<8¶nlPµ?ÙG,ˆá,hì/|K;ß`µ³IXÜJ“z½eìys™l?e« gþoJ¼ñ^{nçëEì“Iqg,öáÛ=¼í¤¼‰…ÇbiY„ë3–µf ~wåbë€|€t±Ø,R‰¨Åb¶‰…̲Ø2_u3é°“ØYºXô›ZiuÄPMù؆Êw¹{¸Çž1È)üÓÃ"ñÎØ^¶Y¨¤‹Dï_öÙø/ËÖtûpb½–ÕÑØc±F±eaçðu±P`V©îÅéîáXtØîSÊêÕѨƒiTÖ¬”u°¸ÐÀBß!‹ä]ßXåbB½c³\À$»caí¶a r,èPªLÇ›oc!UËgÿÉý¢’M:]P`ßxŸ‹¶ó,øvîü£‹iÈâÏ, lu¬®5q,àâ ,xð«Ô®»®¼aTR?=pB F:`”ÖûŒ°kðýšûY4]$Ç?OE ü­2…æºba5w`!…–³ ¸CƒE‰,è­Kû¾®›y‚­úŸan;sßw²h9ņ,Nuqžê^¿u‡9þ‡Í‡ÇbuªËZt¯ÖPÍí]æÒ¦‹ÊB‰Ä~ç˜×‡Ïm³P[XT–ﲓÅ7­Kfþálšx?‹jŽëŠ…]ÁœkôQ,ÿÔævä®oo³À[W).àé´têXÈà [²¨Æ6o_ ' Š;Y`‚ëÍM¸îbq® –…õ¦iFÞªA-ð.—wÄ¢ÎÈegŸÂYˆÇâ}ÅÛUÉiò²ƒÅJÇX[N,Ü­êÇ´ZN×[)|§:b’S†t›…èWo}I 0Ó™`í¼ôý½¸û0söòÜ 9¡ž‹ Y‹ÃUðyÐ^Pm0,𜊠cÿ¯vduÞÿ›Coýœª¤J< —…I¤Iâ©ýþ/Á×[XÀ:A‹úu%ui™:Åkv…, ÛY[ ®© #°×> åXLÑK+`‘µòÝÉâr‹é&‰3ûýgÉu0É0Ã`2Fç ní8KZó=]b \5‹|l>¦±`IŒþi>‹¹aõbnsû(6mqÖ¶Iíb1Ä"t|ÇrQw…á Ö«#õ§6P1,ÈÜUðößzŠÛý]ÂÎrÖØ}ºÖŽÅÒüXœ1ÃîÀ´W-°H‰Å…ÏbEs«ž±{–t±ðšfÙd¡žïÀâ}*,r ̹h”ØjL:YPešÐd ‹„2@s– eµe1E39Hâ YÌL«1O/ª?°æÔ¼4©Û£NØœøuD=RØv¾ÂB×jÁ¿lb¡ü:2?b!‘E*ÞÒ`\V>õ·™ñDšÿ>Ú¿Yt õ"™\ëœ œ%E%°,DkM4d¾·p¨bÁ”€âI:Zé³UáÝ¥% Þ ìæyIÛð=ùDã&š°ñšeq.uD^¥À"~ó;d1Q̲0mAš”,v, #+š\‚Ïkõ]ÇŠi–x›…×^dŽ…K±ú‚X¬lFzYð²0 ŸÑßYŒ,8ÔbÆá…¯‹Eùêx\2(˜3~¥'—?CSÅ’KM1’â°š=JNrsËbdY¤OÀŲ(- ß‚u ·Á©>½1‹óú£ÏB4XÀNÔ°%ñÕŒL€ K ^9œÖæò•sMç7óÅ-›¡Ø#‹y ,8lm½{êX0ú7A? Iu„CÜ©ó£Yè‹ÉžYd°ñ5ظ±\ØàÈ‚Ü}3V2Š,,F¸)èfàˇ ÀIÀ-Î (˜&dÇ8î1Y{ÂEÑ`qm3^-!‹˜Xœ:Ó‹²Å¢DÇq x(ÙBÛmÕVÈÂthC_“¹‰cñi͆†z°áqrbAñ  6,á^š6F8‡ñ{70, OŸ™•G¡•áÚ²¨¦q}‘ÏbÜ`qnY¸<ÊX¸)Ð’µ€'“~ïX\! ¸páX\hka½ÂEÓa(ö 6ôeöæÙHŽí®a–E‚%yb'=þ•EÿȾ±IJjŽE½øÌ9¾¢ÿÚŒ¿Ã€+b•æáˆÄ×XUþ#’DHÍÈnA,œË˜;©€É7Å(ø™ùhμý¼pËDÚ(:½¯a|X±˜¡þ›Ä–)h×ò—àœ6r,"SÖí[ÔÊ—Ú² q¦ipÞéò1_ˆz…÷¯èOŒ,ðßËõÔM!‚¥Q€O|À ÁÓÊíûT£Ü § Ó fÜÄâ•»€”Ë¢EgŒ…ÁôX—u æ ÇâLšÓLy=¯}iàæŸ'¿M~ùï,‹o¸;dž ì Ë~/q×ó0s8†ÿŽ´?•<¢œËÆÉ bÁ-‹“,tƒEù7x¢Ç‚Q\Œ ;Ú[µ X¬ Sö¡•3ÕÕ²xM,Ä¢öí?Ç·œŠæòìÚäëãªÒaÐs-¡{àܱhÚž°O—! ëãõÏ“ÏiÁkX@Èòq1Š®æWV—¿Ò|‚ãItkæ5 nÛNVÎÙ±ÐK)&Øàˆ`UØÞo©m€Ià+ž%¿òÕ=·èšͮݚq}\U[š‚ëFúh\}†ÄÿSÒŠp–b‹š~…mIÕz#‹v¼“©iÏbåX`{1•ú÷üÊŽý_;Sˆ¿CjoÚ‘c—\‹Ë3)0¬ŠéžþÑc±Ò̲ø.”‹ü˜¯¦Äÿ>in4»ró½¼f¹)â 3JYÇšB¼i¤O-j†ãºzY]Ý£–³»©£“«E·’ Ø7_šD‹d¢× @ˆ,„Ç¢Œ2frxR³à¢é0LßÊjËX”<—|Uû³/ln$o% ½Ü½Á¤ŠlËJ˜ºbűQË?c'Š ·EÜŠ—žp«LGÅ Sœþ‘×YDqs.a<âX Vus¦Ñ#|çúÜ…L xÄ,ʼ̼è§<™&¸ó\QÐ•âØ°žÍÔ_ IDATñY´5>ÈÈ7¡FaÎ哟V,œ§0:çö „ˆ!\ùÛÄeÏ*kZûÍ*TêŽx †|6µ6AýI’#rš™^ž‚nœ—Ï)ûObÃB˜ç_"‹‘¹XLõ?‚öáŸôv?QÔy0.^CE°,Ð3Ú`~¹¤†]y½b)Äa¡9¯â‰ç™d?b>Jw îæþ݉Õ܉ ft¿\@AÊÚË9ÀâSFnéÈŸ’B°1öÖSÃ¥– ·BwC,à Q´ T3Ç‚a&cóšñ ¦Ô²P 6v‹ôÀK«¿³°0EŠjGö¢®Ø™mh^õÒ~áÍ–"p–YzË=T%º%¦ Î:‡¡"€¥ÏôE¦€,‘Å+bn‰8‰ð’‚³ךFK²°áBÐô™QµxS±H‘EQ³h5yŠ}“¤ÜPVu¤g{×Ó&‹ªŽx,Þèmá%Š*R²$=²—‘iÿ—‰ ¼Å@}pM¥‹/a4 ±H¿côàçÈb‰¯*Óì1Ž}…¬X”ã!I—ÕU嫈k>Êf×)ÌW@–›®¤|T÷“4õl:øu„ËØ–.S„¤}/†ÅW”T£û`a?½8Ó9Œ­…e±Ò)õZê*ÆÃQÏ©Ö0ˆšQ•‹`¹×Þj— "q°%êwíß%°ð»9¡J}™”ÿ}2,Ps™zÍ4d.Ñ@Ry™S¯ !#<åÖu,{ór°½¯+„sXvð—’°¶÷°Hè“4f˜z t8®€–mN½¦zñäQâŽW1ît'¹qýï qgbñõz6ì§xé±pÕÆ42p,¼©ŠÆ jGF=¨::ªo_Í‘…"õqŠò૪nH\ÆÏ,ü.*|2´ÜÞŒ=ënYPß» «ádór½€É«×î¸{BÚË¢jôèœúsr…úCÆ|ØÁˆ1"»9èЕŠ ƒ+^UŒŸ‰*—æ×|Rœ†—‹¯¸sÌkÍ¢ž?‹½ßG"êêQYó¨ VÛC˜ßqÒ¤F¦bW{, UÔ)%U ŸE­JÝ.ñ{– u8(lN ©q¥ë¤ÞrB]í)L³ßv†°´CÕ<¢Ü©É‡Æ¢9Ùå‰b¬ÎÕ¹¬»MÛØzåbƒW‰h:0ÔZØ–`n6HêÆ{T"Ú‡ŒE Iã{ÊšGB¡`cßJ­`¶ÅIÄNº bѵà*i¢úv²i%÷æâš÷J:âŠvÉ0Iû˜dúö´ÞÍ.…-í¡oUGš³¾;‹ä·¼A§€yP(ÿvÐu·bqë(=ào)­ÙõÝ®ÓZr»r1|¼Ð-“Aû—!sï™Åm Ö0X.†‰hú˜Xlt;ÙKÛ9°³;tAâ–7éÜPà㓽èû2prK§ûIÅ=‹þþp,ÚÞÐ×nû¾ÅN‘ÑaßIë¾é¹K;KzJÉIøkgßf!…E5÷«7±è›ZYXœìw’ðWX hµ§í[}+X”zN³°œìEø;°hùO5oU&‡ÂÂßg¢ŸEÑÃ"±,f±žv°€:2„Å«æ9÷$Y$]‡ ë•©u“C©#ÃX¬»Y¸§K1•â¦, q(,”¿V´…EGœb!ùTއ°€r›,r~0,8ý¢£pXñ@°ÓbË[„ö+ÈbÚ÷k/‹K\ß2,Ê>AÛù­`¥¸c‡ObQšrÁ›,DKï¼îd¡ßÜ/ ˜BœÕõ0Á”Ob¡ ‹¤Á>7XHïßàøÝ¬% H$¯?ê°€²¯Ú[ϰ¸Ö(,ü‘¤5CóX¬%x04X@¹o° µó„Å$<«žþôk´ÏB‹\ø,ü½Áb¦™²Œ€Ê{g×5²X7X¸¡ÊÛŠÚ7Ú ´ Wз¬³Y¬°ƒ¶Ø`­dQ/¤Á ƒ,*COxäÁ²ÕIÎZnU±Ãꕾu,VX»Öúu›=¤8­L¶È° Mà}0,lÿ/Á-ºÔ‹êŒN&/ÄbnY §%Ür ÆC—%š­›;šµ4G-%¥ë‰w¸;ú‡–Ni2©Ã‘¬êFî¤jÝWà/¸öY0jƒÌ)X ¬ ¸¿Äèê=)1u < –¿«ŒH†í4<ä’BßÏj¯-‹wà¾PÇQ[Í=Ф˜kÁVVÇÌ!¸Y'yc¼3W\û,Ž’Cg‘Õ,F],®!ð‡ÏB4YÄïõJ‚7ÙÛYþRЉ•>úa™¨/ eX<ù›ƒeaIõ¥LNá5ÖY\™sg[¹F1*asØÓ¹Å"’É¥)l½â9²(™8ÓO¾[ЧßEe|í;~bèð•ññXÔkÈ¢¢E«Ü¼¸¹Ä¸MY9V>‹µkðöQñ XäºÉØ´˜§D•Ä¢H%ljÊ¢4¢:™z<*Ÿ>!‹9¹A±ÑÁ²öe ìŸÑv2}5*#c/žDðÆ—–…HG)ûsbÛ“šƒiÊ0–99á²õg˜sÜ2Xœ‘ëlsÉ?löéd‘#‹¬ÆSòÓÎiäX°¿-°Xé"0dÁØ×ÁÌgùŒôRÙÝqÑ`Õ±c³”ii=½îzá|£ «dÖ,Jð92AÆ"ë³–hÜìò™@µ0­)O±çÄB# ΰ?òHCØôûªY¬0ÿ95KäáÇ-ÂOÙ1ß3 HÙ„Öv|Y¤ìÓ'þ¬)<à®xú‚}õŽE½Çk#óѺ®•N§Ê¡8Ì!ÿ`™Ž,²ãÑüR³Ñ.Ã/ëùùïoköq;±, ×û§bwjXLÒOŒêh½ÔäKC‚<êŠäÌ(•¹b?Á;¬u‘–‚h!EL,¤¶þ÷ "èìÁŸÁFÝ>ÒZ½_ÜaN·‹é‘K<n oúÚèòÑ1ÍdíÊ^ PvÒibÑlòðV2°lœ8…¥1Fl7Ø—údn’8!_ך…[ùœždµÎ%åóϵ;%¢(…e‡½9‘þFGöFMÓÑ¡‰@, p‹¯YX/<=]dõ<¯,+ç. •²h×r¬‹Òù|6ƒ'ì#tõžde ;ô%©ÏÂ¥oâF¤®ÝÍð£§JþªÅ‚Lß®iºï¶yýÝŠi/ i4„šErYT®ŽžS÷µ‰k듟 ¢A¹:؈|°ÿ}ào*àÀ‹,„ ’ Eo#Wad°uZ™"‹‚=ü·%{~XÐ÷W®mV pÖ³kvû¼ÜVbÇ:µŠ…ó<3 é‰48þ¿˜¦ïµó:¶¯¾ä¿OšåœVÈ$wmpŽ.õTçB4L½aîÉÇB{,¸ýyª'ò¿‹l•6åbQ›°¢§âLе,‘©(•• ¥añF«ÎÚPº„Ü»‹s“ìq5#íÙ®A¹`±›‘Ó-s^ÅÁó>*¿ßysU±Xq­u+tN˜{—™¾4,ÞPëbî±X@„V^— /ÚJ)¾‡zà+Ǹ·§ºËùãðúÿiɀśÚjµÃ€oˬu$ô =LþºyÀÂ?¯}é–ý Ãâ²ÅMî 8ÜÅ·N ãóƒ˜ô²H>LzîSp9Çûþ‡Ì™÷ý˜(JÁ阨OÁ阌¡ƒào}>ýt§Ÿøû³ ¬ÖÿÀY2”Å¥³-í§Ïå`d(‹M1ÝÌN-[âÔÝ¿ e±³Ëz›EÖqÖAɱhíEôGž|{Xì:6l¡ØÉÎÕÉ¢uäÀä墖Á,øŽ7î`±ã>¸ e±³û~{¹å™xh2”ÅàȬN.[G†Ån¹G¹ýxdðè¾woßCEûMöJâ}Ìâà£dôÍå4Åî#zA_„‡¤ó‚ÖÈÛ‚…ÍZÈJ §C0FµoŸbc,zÊE‹ÅòãfÓ!ÈíÎ,ZÅå#fî-´ø8¨\4Ä,@ˆ<tŽeÁ½‡²XÜ,&-¶ŽpïÄf¦“îÃzÝr‹ßgµ}ÈFÓš{q™þè<Üc¥iÀtïâ±udX6o³°¼¸w.eºéF£‹ÂëæßGÆ‚‡°ìlb!üÃ(?Ã[,ZYÝ·ìÈÂÕ‘~ÿEèê"+)P¶Yš a¿7Ê…w"±h)ðmÅš@' Ü ˆlm6³è1]òCu¤bq¨VEhd°PÉ@õ—¢šÅ¡Nd Lø&¼bq 8üc³¬"}ü,8º´Yœ;eìXPÜSÿØþÁL(!÷©ñ¤š…k[ºÑŽHE[~Ø—t³8§„., ^³ û¸®ÕËÂTÜ /€ÿœvÛÙ=j£˜µ•>ip!mZsG§Ý7¨Ä²“Œz† ˜*j°x[»Éä5 s”§§ §ãE®³ú¹+Øh«ÓHžºÞØ9$Õ“‹"õÃÆÙ6>€?Û•Ÿ•½üîÑñ4_ ®hãÓ^ Ï.Yƒ…>q,È`_é•«9™ú_a"G3})ÇгĿÁí~‰…„‚ù[£ÏËçcË"ççæWs*;¢M/»YL[ýÈY§¿ ™lf!+ʲ(5ú`=Hˆ…ðXœå_Ã3O¤an¦v/vdQ²We”Æ n~ÏDªO 6Z—¸·zʧ“rTO˜è*å\ìÌ"¼ÈzsŸo²h(}–\"_ZÞÊY@OƒžC[“}…Zʼn)C/EFîïSÃbT°W_36ƾXÄ.¢†xÀ {h>™Û°G,îj;%k)§ÙË,ªri^B-ëfq)Z, h;_ãGÈÕ™Ý=Û°SÇ"#3ŒÛiý üÕ9|bŒ¢•]Jö%+É ~3‹£ÒíöÚÇ"Êâ­eá—"W.°§[ÂÛwuD”~{qÖÔç “GÔÈk;ƒ^u-“Ôš**³ò1í&˜‚öYœ—ìË/ñX`À€Šún«'ì1°ø )ñÛ²˜o`±¶,΋§<0 ËÚ,L~O!î‹aÐr‘áûœÒLÕ?µ;Dqù€^¥aGÛë_1ejbMöå»r”[÷•XÍð‰=º°pg6YŒ‹˜7ŒL;Yø7¯|+ Qý&¼ýå z”¡€…뺧“¬ÁâÈßh³Ø©SV&s›-—Ã'–¦åoYÌ g9èVra/ëd©Õ¿qyŽÅ6].–Xà‹ú°ðzd›•)©KkôÖ‹ó& ß©í©`©L¹˜ù,òÊ¿Z=Ž, ¬4U+bct‹jÞþ„,Öð.m¹˜‚÷º—™,à¶¶¬½÷Ö'Ûjc›hðIñµ¸Êmyª[,b:Õ÷ô"¹Öÿ§¹@bö‰EV³xÁ‘Å¿­†”Ûš…¨Vf¬¤eQx,ŠEK¿èš"ÁzÑzq‹ÜÝŸ~âá~¾ÿ·pî±AiC8õaZá·³àþ˜Ã÷²Ç'™ìÙ7R&nÉ #¬0/yÈÂ>ÓgÁqåX¼ñYp•¬Â ”nX.ZÖg&Ãu©²¿ÖZ´Ûõ¨„sXÍ¢¶ÄuØüN…šß°ø¬XˆM,pjÑ´•ìë$`ÁmǯKE`¡…Œ×ðûþ5ιÇBŠU0‰ÝÃ¥åoXLš¿zÐö¾èÂUi‹ê¸-mÜ ‘ Ûo¯.XßÄ h¡‹ Î+d s6ÿÆ&©<¦QÀ<íº¬Yüb”ÇEeˆ4“|†mé`1³9oG*àuøÙbá2†»èUß<)ÇÊ0Tb"“Ÿ‰w–ÅyÍB˜êü×%Çð†æ±ÀÂ`):XpËÂ<«0ç9)Ëc)Ýkš|F è`á¢ë·#°:̉sZ«Y8µDþØ¿$hªá Ç¢ÃØ¾€¢gX¤â³,~±ff˜Aaš‘Å“WtqÅâBÕåÂm)ZÒl²˜ ^±ø*–soѰã´HÖš´,:Ì·=U ªêÇî°@­¡÷Ì\ÒÕuiÄ# >°S':ϳ㧀 „˜<~‹TiÌi6¾¡9;N1…Òå J9Ì)N|¯ó¯ \Ø—6]`1³)k'6m¯ŒwÍÆøÒÊö¬ÿiKÃŒbbÁO{Œ,Æ™á%Áì˜éȱ¸.cÚb¸Ôg^W¬ÒœçÆæãüëX&_;ó6‹Î)’nÉÛÕfÛÚh‹^‘1„§C̱0ŸŸÁScß!Ø^˜–"f†:£Ì²ù˜fÈTî¦íÜ¡ÊÞXö(w,:fr“[ßt»°:ŒaòAuð½ze¦»tƒdGCOœßýY6%;=<”lïÛUìÈÂŽõÖ¡·úUó´óp¡Ò±‡‡n·`~óγG±à• eQxZßu©×Ê}™ÑŸ…ŽƒVDП׷ܰ³ýÖreÀBʤþ:£?s,8‡‡äF[ Í›-¿ï,ƒXT+¼–Eâ³(¤¨¿Úrs¦£`pÉéLÚÌ¢9‡s÷2ˆEÔ`ì¬^ȸÁâʌ٧­rÁCE„oc!ù€”Õ݃܄…ŒePGâkŸÅ©é.²¤ÁâšügüCÛÚ‹áQïöÕ·Þ¨Ž„,Ê(`ÃÞ€b°ˆ%ÒÌ·±èætKsO¤­Ò§æ l;}çuæÁýKªQƒÅZ|X8ÅE¢cµ#‹¡êCsÑ`«ôÍ@î´ìÀbQg^}kz¯Ž7YHóöÂÑßZGîŒE߬ÛMX賊C‹€JÜ`ñ^Ëq8ãÀ÷Çb×qIßùƒXÌ,òŠÅhðð·U6ÝDѤÁ<Ãå0¾•2Yô)iƒXLm{A,.!óI}]|QéEnšv²˜BŠ%÷ñm,o ·3‹¾,ïÄÂÕò‹€…l³XÍ‚ÆÚvÅþ!^ÜuKkÓ'»³Hºïƒ…ú^Èœ¼ì`Æ],Þë.Ùbã±sˆê=• jÔ÷B²È¡²;X¦hò»‹z9n“þ0 Œ÷‡É^Ú‹ªm,ôØgQˆ lɱ(¡Œ,ÈZ`¦)›,ülUq·ÕJÙÎæt@|i>ÕÉP˜0åXŒC'¶‡A9¯YÈ„,¢¦ž_±—®©æm~¦«Gä‹ë ?#Ks*§Í»ÜTvb›l‚œ”¢²Ò4 5Š ò’žq3|³,Š'¨D¢¾ ÏMë5U¼½wg¹HÇb=i²@Ë’úÐÖq¾{8íüqèx$¡äA{p n^õ"§eAù ö9«Y˜Ñ=&˜%HmÆÆ†E¬±0µÌ­œƒ=}}InJVýúÐV¶‹;Í…†°È,‹D!dÞ²˜8ªbñ)°P®í´,Vަ¶`#Ó„DÃXȨ‡EaHci¬y,º»$LÕ¢ÅbFO‚RcZ<´¬6ù=SÖ`ŒémÊ;°¸‚M¹W.œÆ´ ‰KmfXȨlÅ|èbašÇb½ð—E xR‹F{+1Ʊ˜ÓL“‹f®¢; b1"ß b15ÙËÙåÂú~‰Ž¹ŽE)Å$÷XИp‘Å‹L w0@{K,~¼……MjZç뽩ïqUÐ †^%Ž…|ã³H‚;ÓNŸä«hgݪxå;°8Íikzdq}55Å>u,˜)ëè°3±†…|™DÒ¼I8Ëô;×9Îû‹_&Ò²XÀnjkm^‹±ÿŽs`aµóu Ûd×,rÒ*ÕØX|Q d‘‘Çgå1ÔºYY³XæydrùÀÎs›LŸ/±¸ÔËâóXüóÝqµüï«ýë™@àyíT²¼Ý^´Y€†°(ßä‹ÈganÛj/*×i¢¤Þ9K¦a¹àƒX@òc]³È`à xo{8þ=ÞÑfAF×LhùÁyþZ¸#˜›ÂŠ—aÑŽ—ã³À|ê§±ÏbmØÿxM§­Ë燳‹Ècá²éÝœ™×ršu«Û‹á,Ðtز@£j¸(—dK[ÚgaúýzréXä5‹ô1ùô_$-3£V¹ê3ꫦPÑèß°8ýeó»(ß´X\Ff¬ ÷ÈùÌŸ¥ÿÞÀ:B,ÆšX(Q¸Ì§Ð-”ûzJ±Él¦µÇbLOaŸ³*0Â3(fíGw±ðêdXÐÔFÈâÚ°IFQÄþl¬bÇÃX@âRó&®&S_t1"·d_+šœëf¾MúJë¾Àóü'dhªË×ôÌü¤óqUñ£QÈbZþØNy]«çñŽ,î®z( ÔYÚò"Q9¼—ˆ^ÍÔü&"w†ÿ&zO/ m4ý­Õç.u×Vÿ­|ßôY{á«LêyYËB³ ­kÌ” éNØ$ù+Ä,†Ö_:K[*ä0¯e9õZ5¨†E°À¾îHœ3Ôï QXVNé¦=á´v–&•®àXÐ-¤z1¦Xoð­p'89 ‹·¯ðÃYTŽv;°pó¹õîÒõ/5‹ü/´KYwÙÃ)8gÕ1ES&)·qÚ¦¸ «#™ò±˜JZa—JP‚ð`Á=ÕlÉŒ¾ X€-_à—y“é9XT QËÆg¿5Œ;Y€ ¶Ô1ES&î ƒØÁ´ h±Xu„)9Œ”Ñ“Q ¢ ,^kõ¿äÈ¢JûpõýƒN˜¿˜×K¤Øœå S™¢ÏNã¢t±¨fwˆÅ2ÆóLÕI<¨<—P.È„0†*—ê×r\¥UÚ9CdŒ…X˜õÐfä†,:1A 9Sãò§ôËLÚškÉ;–¨Üø+ýo:~³,N VÈW† +ıŸ‹ YÄÚ±ÀÓAßWL‡ ,L™8A¯Ñ„rÁ´ ‡(‘…{K=˜EèåS ¼ÕŒEå_ÒWTŸŠ†Ùlµ¶ºî Û&FJ—G”*¦O À*IéXðo —`²@k® ï«ÇÄ¢¤Y%*jd@æh€jþƒaz<®X@À„wÈ„O²èrÒÐT.rÃÂæ#14£(Ê.³CWm:´NÂìyX2‘0XI#•˜‘Ža!€aÊnX$Îj KMP3ÿ‹ÀrÁôc`!ݬRéAÐO¯, ŒœWV,rS*ÒÁ,úN¸@"´šjd½ì2µëŸÂ¿Öò3¤§XbÆüȵ[m IDAT¢LÊÏ“ŠEÌ„IŠ…fX˜*ðöó%;~d2ÎeÜdAžÊsŽ,²—0@"íBªe±aUÊ\ìÚ‹NQöƒöž~ þ´ÄâÉg0ÞÓù¨Žxþ³ÿz\pô1- q)Æzõ1!q^Ä6Á8AP³€A¡½‚Q4²@/Æ,Iõã„O\v6‹ìxµN¶®Þíf§¾Ö¹u¿þ†9\Ó`ß¼JË ÐîKVÀIÀbœf‰ÉÛ ²xQY ØjÃÆYÄje.À €£èÝšš–èÉ`PÖà~À§_ù,^ÁPXàK±ó Ðn›þú˜AÈ;&²/ME0ï˜\CSbjʼn-?¡ÁBÌ3*ÊðrñåJ³¯(9SÂò ã £”Ä⣈$…é)ب@p ™Åˆi YDMËÅøK)“ @…1‰ ‹`qÄëÝw`,¬ûõÔÆÔr”ŽaÞÈÔ~Ëâ%£ˆ$RäæÉØ#ŠD­°¼X’XŠQÁÐBÎ( äßãÜRJ,>1({Ξ ‹U¥sĹm‰Ô8´:%Çê”rLqq¤˜e‘bM'§_›ì›×>c„,ž±¸`teŠñ1&8ÖN1%ND%é#S²‘…s6çÕ±™õðN£Ž¨d8¿•¾JªæÇûc(Y†ÅÈô“ò9ã¦N ‹ §çbœ›d> ¨e´ zX,ÜÜ7oþÔ6½SµË„©ãÚ56ƒk-á…iL¯Š·+>5%EÆ8–±ÝƒªÈâ¿$ É›?µÇ5º‹®,q€Œ‘‡íˆªˆLÌ9jÑönù«¶)U4¬Ãb‘à‡öp°c\Ó³M¯cì E=Xf ªøÞùžUÏ!±X:-óç¼C©ë˜"Á¶#dQ.»\š”Eî¬çiŠÆ“lƒò«ï ÕÁ¢šdéò]ô†á‡Ä¢°sv­M¶máíÍœJ®ö¢gEq˜l/Émn3é+ŠbÀµ·ö•Å^L“pîeUùõÆpõeK”ŒÏøgg<¡Ë¸whûñl:7E«h³8íã¡Ì܇[°°Òb±a¾Ôîƒgqï8¤â¼yr > ¸kï,+7`a=}Öz.ûO&-iÿ¹èŠ,ðc&¼Â,&_¸gäPÌl`qDòþ³b—¶ù±ó»YxÛôÔæM7˜Òc¡˜ßp |-^ÀŸ©­¨?Âmwe±A‹ä6,fø/²ðrP›7YÈzbaÎòXÀǪ\ë*qÁbùÍX¨ŸˆvêXˆÕ-XpüY,ëÚ^[A5ÃI^— £‡Õ¿t³@ÿI‚—z>q;°(GXØâWð=±Xס1êæ£ÍÝSðhšø,À¬Å‚ÔVš“/š,%{U².0ŽE|Ù¼©z;ä)(~EžuW‹ET±ðög…>Üt‹™QÈâB ÑÇ"¸¶§\4úNË¢Œ.eudÞ©ê=O!ñ]&;Yx> ®A9ƒžÕðñ«o³ [)b±ðYÔ[bX@§gÇ’/³KÌ”hèWÖÈ‚\Å`𹤚SR{À;£ñ‚Û à‚þø÷¬üÍ }E“çÕÌŸ†Vo‹,1Ï€SKb±€ù Ç‚šã¼f1ÜkŠò,fÝ,fú5®s@íœÊx©ž‹‹jdð§ ¦š‚¼Yÿ#Ö,rž ´²Ç.µdIŽ­7ÝìÌm\,óúŒŠÅíf­æ5 aYu±Ò RáX €%ðïXL<ÓæýgŽEç†EÂíqLKù·äëŽ,VŽq;ñXdqv„†ZŽ…²­âkÐ<Èd<=®'+dÍBRŸðâ´ÖOZkÛ@ýœ4Xä! åãªð[¿áPÔk‹X˜ÚQþjDQ:fÎÊÛü®ŽY2Á}õ.I_@QŽç¦v;“(=Âpf z§Î„-‡ ÉÁ*Êô]žO&jX ƒd k. ‹v?¦­Zc‚h XŒjø{ŽAâ3,ææVpª,¸$æµKbAÑ Á…ŸÒjžR±ÀMcKÍ“â %Rp¿p#E^аHtŽ‹ÄbÝf=ß¹¾2ˆÍÉsd! ê%@ÎÚ,l¼6,˜p,æÅ'ð)5­ŸJòW¦J%Ý,­‹²#Æ‹(eì•eŽÉ ²8òXpS@ ‹ò•ÉLéXó“_ ÅL…°,Jñ0Evé±ÀÀö}; ²€ì™÷·X™\a®!<‚Jè®èÊhòñ‚Õ,¦Eùã’1×WÌ): ‹‹Ø¨ëð1‚NeU±€æ¥§\0RpÀe´ È~Ä• bñˆÅl ÏLöß1`!G&IÈB¨çâ¶aç iãpdQ)Xr1—‹ `qí±x¯ßáË0,¨¾®<oMsnÞ*)™Ø‚MŠd­—™e±B/':u,Ä(·,òH‹ h «Ëœâ\Æg½,ÊÚßZì`Á-#`QŽ#t'E–ÀgÓ…3ɾ6,(6µ€@ì¿5µ"O ß{§ß‰Ïà‚q)>I&Ž™°í<—møg¡¯ ¿E°XåñZ»À¥àß¹é²ôë,9C4P¢¦ò‘IÝȲxjãÌS²ÊÍœ±ÚCfº×`çò1ÿlö³‘¹"*v.ü9²Pà–½ÀX‘¦¶`¹P¢¤°lhˆƉ€élå"ŠqÕ#…fëêµSØ ‹kþY°(ý‹EΠ\¸`‹xGÆÄ! ¨{ç#âLjæ]³ÈÀ«Þ° Û˜ãq‹ÜÎ@ËdŠ¿c$9Ž«è9)Ó–ÄXÏMË Î=1³,±ø:`A÷ÏYÂŽ¾CñŒØcsðuA÷­X\YŸ7Ë"à x%ù8…,0*åBÖ@# *ó9•[dQÂC^j‚æBvâ-Wùã\bì“nЋճ&µ]±¨^Ðñn®=Cä~v, ²¸l°x`ßÈŒ¬ÉÚ,FÄ´I¦šá¹KSt€…iÍÇΞX`›C×Ò²˜BYˆiÔhX<·êľÉl+b Z™?és±ƒ¢V»9Ô,blµ‰…ø™¾É²°YŒ‰3Àp,â’Ò,¾ã¢ä +VO!›=Bzí…)1è–s3É'·µ.ê±P“MZ…ºl«ä©Ÿ†÷x2þéòlã]:AyŸ“•»ºÐOÿN6ß„ùÀ,ªniuŸÁ¤¤»'åZr,ºÒÞfrëiÈ¢§)‰,®þ¤›•Û`10Æ ¾ßƒ²½[†/ï}àáv l}P,Äï_n*J¸øXÜ‚Ïhþ޲Žƒ¿«,²@ïù]e‘¿eáD*Éw•EhÍñÁ³Xt»ŠÞ΢< °X /)R%=‹tê–0‚aÏöÎKzª·³P隇ý€Ç"±H»,ô"pçør+ T™é±htêOê´Š7³¸ÄѰ Måîcû,P…XØ^4Šyu×.Y¸ô¨úÛvŽUßé§B[AlSpžË)&gy¹ÁWÔ1ýfášI¬£õx¶:0‰¸ôuÚbÑÓÅë×TÔ Cž"™újl½ª m{9R}äUˆ… żÇ÷2ÈâÂÝEð/6²À|bæÆIAÓaerê³lù¯µ´ƒ|,íœ8ù¢ ±¸è±(™Eù‹m,Îq/é°ðÉÞ\.$êSÎ6·}¨EÃ,„cA.rúªCëFËcQY,;,Ò•Nˆ…ÚÀ‚Õ&ÌÂëS/û$ÛYhEp ÝgÁI×À©) ¸Ñµ,ÎZ¨§] dfa޹æŸj`‹êÇþ;n ëá/”0,E¥ i=~åj[Ÿªã†E°ÝÈÂéå ¬2¯và¬a±‚AÃÓ~¢°Ž3“¸•>bbÁóMfq„ÚÂTG„6,Òö”Ưê‡Äb@ñ˜XLŽ7³Ÿ·L,^5,lÿ…1z‰X›5Á;Žh‚ ,`äÙ{ ¶-•¼Ð+bQ÷X`ŠÙw‰aU¥aã—n9U0–ÿSÓù…Xœ\…³pɨäÚ$Öcq{?í=#4Õ))`±œRd/º,ÈÞšC*gõkbˆÅ±½C k˜Ú[´„X,å&›Y¸Á…UtÚkÀKQ²é³Ñôå…ÇÂk |¤9Z2‹§É žR‹jŒ51>ŲH•p¤OX‰¶³(Û,:G´¬û,b›tÍ,ŽÅY€[ç ‹ç ‹,=u ° MÓB\h5ÕÆN‘Šúñꇨ:”±yv¬Ø1­\rð7fá×Lú4ÌBi³íج õY°²³Àf—=P9âÏìÖe™”lóR5,j‰çFºÃBXù ²H4ê*ŸÚNî=glUõ—Ø’&åØdM(šƒÄ}• !Ô ¯âx ±nÁ‚ÐbA[* k.;,j¶¡„7!1ég†…±:L8Zq‰B›øË¸4>.=­ž£]}Y|åﱒήc1¥-Ä¢{…ðXŒ˜E”rÀ#`cdAЦÈɲ ¢?5,œ1úÀª<©Ñ¦¿ÔÆó¤Ï¢2g|Ó«¢RŽÆ%[âm– :;u,èžõB«g.4WŸ0 £úÃãÆ7եς†o²ˆëñ‹ UÓÜ@P)…$åRÇ¥9«]ã@báX`Zâ†z±,Α…I¬@û–v¹8bÙ"%ÏdŽ…âô³À¤àÔϰä}ò0U Vl˜%tT˜Þâid S¸Æ)õ bãõ³6‹ä¤ß^\è—ªŽ1° n ’í°ˆxYœY¼†ìÅ\à`ÚO,ˆÿ”X¸©M‰Ïââ’OM‹\YÌ îÅd•ë“’ ±zè„J5,RÂ^Äõ¨–ÄB Q·Y|1ªä+MÇŸÏôä¤r,*ñ¢Ïâ¦*Ï©l³g½÷.Úcæ‘_.Ö†…ÄjlX@~i§I¯ÝA“h jÛ‹‹uŸÅ*аsv`‘žëYRRµ—–ºÏUÔvV_B¥UÏág>ýYP}ÉãjT‹ ®ŠˆÕ7úͦSA:Ï-‹¸Àê™ÅÀbT~:ƺ×f± cϳÁ“(Ckaêd:ÍbÇBPaŒaÜÉ,’"¹X‹sr¦CoxªÑd¢;Jòèc¬5ÇT¢, l™kvqÀ ¡f­Ï û)™j§Ìb Yȉťa1ÉÐ$ f6…a‘6,æìvƒJgÌñm”↓À"6]MôÕ{#¶NGóôʶðþ[Pº_¾àÓ‚/ñÝ¡y¹<Å S~Ìn1ÖŘTxô¬Ë"æ®PðÞ8´>Eô…ÕJÍ’‡xèjdâX–-œ@I¾2â$GwØPL‘Åiž 7O=R†¾%z_I)(2EÞÅçÄC4,bÇ"Ó¿Ždç’\<à˜X¡|[5³ˆî¬q„,2z' ƒÀêeÃ"©=™¯— V´¦­uT@’¾°Ã x1æ]©ñ“ø’X¤UÂJ2PÍÆãMgïÑm Û8ïæy h[SÎíD& éLà°õ#œPè…Πg^rF"t ÑZèŒ|l8Ò±€ÑXÅÆêÔéBe5,Ü^Ž‘F¶¦2 “#"Åc¦¦‚clV´aѨwxÙÉá­òr°økz6¾°ü)î¡<¸¾ß'Ë »½‡N•7¢ÌcϨ ð%{ò£B‹ü~YÀâQŠk-†EÊ,è7Ìo,¾×b¡‹°VŒL ‚jL€Tcgá­¬aßÿ2”ÊÌ‹ëßµ¯+S56€ƒ'›4,¢¨[fY;K±i‡…e /×ø.€¬<ÖvB°4‹\‘©)„ŽyR[ ûüqúohc'‘¡dª ØwéX˜Y/Jå•!zyY8ÙfÆBjÚIŠM«pë/·æY–ÅÜ¥‹æ¤HíÆ&Á&PêXø¶^œbÓbX”¾›YµƒzLc{žGEG Å©š´YÔ »þR o1zmX,š[”ô—’,0só£é:Œ0À­^= Ïž§U›e®'ç’>å‹+/ìÚ°hiô:{º¤a‘xÒÒ óÞI™úKÉÀ¢û°¦V³X™ÅV«À%%½5H^zØ,¹ŒÇI+6Xa¢£NÕIÝJŠæCâV êÄ[âYt^:ŠÔ7Hܦ‰÷HˆE½•EÁÅJùvö•Ü~àoc{^?£ŠN§&á½dë7:þa²%+ô¹t,pî/ôX4*€×¯Ë‡›5#ÅsîF};{¨¹bë}‘üÝÖ@YârÓfQÓ ¯d:ùOæb‹§Ç•„öˆ¾Ëpfá;Qð· Cïb¶õý–f Óò33;*÷EÁ„yk /ÿE«SiaO„}˜°®ñ亃9Î-ý(¸íôY˧·¸Íüãý»}<ßÄ÷—ÒÄÓPh…,`0eYä­n¿Ô.UP.’–I4³ð7¶)›‡Y-±ÞZ>Dö:ú¸úË]B©VÊ‹ÕpôWÇ9Y­’ÐnÐ…ì°ðn¿¢„zÝæX¹Ž5ÿ #^ØÐô3‹!y5»NšZ2°—–ë±Élì 1üëjŸ—yƒrMW˜Œ‡…íU°oPª¿¹§Â<5IÞ‹ûd1<)üαÈÛ°ï®à:øöÑÓwCÐoüšݹ¼ÑÈ[¼eÑÈ[¼eÑÈ[¼eÑÈ[¼eÑÈ[¼eÑÈ[Ü‹ Þ‘Jw ¿Á³‡'opEnpQno¹‹³­!Ü^Þí6wr8`Œ²iAÚ …«¼C[ÖÛ÷.º`1ÛõÞSïsø&ÃâR¯™…lÜ`Wº‹öSýÖmýž´X°BŠ; Ýë?Mc7,”Ç•‹M±ûæ'Ù‘žÖö$63_ëy§Øm(…F| Þ2ýP"hÈì±ðT>|±,Ò »—³…­M´x`aoX÷Xl²n6ÉÜEosx; ú"°¡â†ÅÖÃ_!‚?„#f!~9u-T©çÌo /û6VÃ,’ë±(ÅjmCM<ƒ‰k¼qw¾ÇbѰH»fîXìÍ ‹À>À¾,ŽíCL2'Œ (šP;°˜µÚ¹áuża!»,6<­Ç"µ,mC²­½ðÛÎúgÎ+ƒùk}ìÏâì—^ÄêOéàJ_²,ÔFÂKqèƒ,ìó˜ÅoñQñ5X@"¨jš…ìÎâžö7Çö>£tÂö÷ÈB4÷tYxÂG=µ{I¯ŽØHKÊev¼3‹É`Ûù÷!³Y´•„aQ´Y˜ÀÝÑÇbH5Ø“ ã3,fæšjXœœïÐe“ă,~j/vfQ÷XÐI(å¹c1kò¼‰Ú²lH?Eÿ]ضÓè´ÆŽÅ’Y¤.üPKVƒ\h‡XôÜçXTÿÒ»6ueWý•a¡7±ð´bŠÄ´´Ã~‹;,øÞ#7G*‰…7ˆç*,zMÏâØ%°‘‰cQ±[!:ƒ{˜+šò‚,6t «6‹•M–±©ž;ê¯ÈjSºðCzhYó›‚ IDATúÏiűnrf4›:£e »¢`l.ç]vâÕcAö'ÔãXqžBIbèzJ¶ [.L³jXÄ]¢Ÿ/JÔ'û± rÑ*®RwXu`ìmX`õM|V_]uZ·B * ø EB¶}­ÇaR dqN,NÝ xíXT]؈S±íÛ|x,Ø!aé±øoÀS•dœGÎü;18¥ÐL V.eÇœ²)ÆÀsÕñì‘ ´È}‹LÖ1êP©–{Vœ›fú%°Èôм!ü:eH®‚³[ oîO,4Ú±¦XpYÍå9æd,08~QÇ £ºJeͱ°Ñ3k’ï¦zT“o˜ MµÑÇM¨35,øýCì™h%)Kð4bxÃuZ2‹5°¨Æ5»ý‹à~h^…~E&^QºPúQúÇèyä,ÛŸšŠb)±ÚÑ´>·MPÞóêÓØdO&s´âF%]4x@íóØ²ˆxJLºñÈ‚üXíù•`|ás´ë&·‰ŠYàƒá%5,æ‚U“UÇb&KV™ac­Òg±Æò…žk<(<£â¶@“aYD_E= OmXE¹Á—Ŷ M„jú¯¹¿½l³Plæ%Ä"CËZ<µË*šó-‹÷ ‰9Iºr,L~,‹‘~Qž ¦°2,¦ŽÅ/‰Å­Þï²@C^`QQ¹(Ñr>—jŒ »Àâ ° î9G¥s`ñ©(>CS*þx•ÊE†à<$“ l‚2zSÆŽzE„¼ª§ìäϰHÈ«6âlYÔôË;Û$[Ú(­YŒ‹ZN*Ãbì³€º ï‰ò£¶aF‡Ð |‰PÆÊ¸0,V0ä†÷Y&j ³XUiþ¥Èz@µk´âG´êËuä‰/ËgQ&QZÒGjH©švY¨4¡ò×rÎÉb±¨°PŽ¡ª¡õK|lfXÌ)óרúñÙPK¨ÑëJ¼Ôõ+´º¯ÅkÇ"-uÑ1¯É¨ï‹æ¸)UnHƒÏâ)°XNrY¥'JœTÈV4Å_ý©¿4,"ù{`‘¤ æ9¨Ô-x Jz{3Eš§—J3‹s(<ÈB’%)üWû,¹ ‚RV%Ë º0ª#3£xï¹þðËQâL!ÃS­~V“‚„²8O”Ì /ÇäÄ"&k·h\`{aëåB‹"Vx0<¶)‘XVò(“/>…7@, dqþ9©Õ‚¼.QVù犌-ˆEFÖ•Sn*Ø•@bYTï§¹XC¨Ž|$W•¬£W|D§ ©cñ¿Ôì⢆z-JõyÌX䟋RG_DO‰Å›Læ‘ÈŸ¿“hx·TãìsÂÇØ‹¬«XJV´ ÛŽW*…G! ‰9Eôñži‹â“ê ò4b÷ÐÞTãyöx\•?…ÚB,52ÍGx¾}â³8î²xšF¢•Éï~Oå»X]‰…Ä!j%ÐqKõN² ä‘ë+Lei È­<’[S6‘ŸllË1elؘ£ñ®b)  4ègÄ8à8¢,XÐr_RŸ¿ˆÆÖø<úœY@{ñ9~ýˆ—4Ôl¹¨íÅ– Ч2 ì)d$Ófí·þŠ#M¸TlÚn8"‹ˆœØü6Š‰ÅŸiÍg©‹¿¥ Óˆ,–ÄBb+£, I,fÙÏG&mdMgY³oBH¶M+êQÈ ú2@4`…O–EIñBªËϭˆœXŒ"l2‰æ©„±ô©ä} c­Gß‹XDñ¥c!¹·Á¡æºs8§²À,$³T¡Ù:tHˆÅ‰f@s2*¿Ç9†Aif æ¢%ôlE÷<`^“ÁQùKÂó·±|Í1PBcüÒΆéÔƒÙ„«è}IÈ¢p,xØŸ‘šeÁˆÅ ŒC¿=óX<·Qâ`œŠ¾y?4ïYa3EÓ-l‘#c:Šç„CÌO¬áþGçå¼tümÁ%*Év 3\->°EÁÛ2ê`!]«*, Ì=°žž‘óü†Ãã AEiš#¨’É,Þ88j£q'7ATê2}±©ªŽôæyôAdl”3ÈC†©ÄîwaX¤^mþÂÍÔï¼ÏßС}˜ÀSÜ1ð”Ÿb‡ýª¶ÈÂ_ã‹Ý¬¬–4Ö^¶ã´n¿Å¨ú|X$Öß#ÿH,(Ê(z_ô”X †w‰Å̱€ç?}.M„sôZ…T0O§ÌB˜TÊ»~çÄÇhÌbÐ c³¬h V‰¼ÅÂÚ¯AQÅë'|¥=9öL7îÜ15KÄA¯z*좶Íã<-2vV¢µhõ°"‹¹?Ù[uCq$Ö7š_p:ƒk·ÛeNæÚïaêÄ9žPÌb>p¢ˆZ¯!JàÇŒÞ,vìøtªÖœÉÎ,B‚yšij;›' ±0‹Ø)Òìf»‘rXæ´bZûvô…p'ƒ—l²8xcŽoÖ; S÷JënŸŽ>¥ÂÉBZÇôdoÉ¥YOñ *»~ƒ +Ûõ ½Mthì³fÂYJç)Æ[‡¼¦`å#œRS oÀ,¬v­Ñ–&¼_…ì©ô`5k^¦%ŽÍbQ6Q§­Ø/fᦇ-=›y˜w¸×—Q%€Ék¿5ÂØ µßeMƒ¯¨õ¼Ó˜Ë‘ž/Eàš“Á=ï ç>öÂoÚ,¼YõA6ùtOíÔš¥(ŽÔ÷æM`bYç<ùmZ“z,C,è›Kž¸/ÀbÜcq¦Ù3¦–dþmkçz »˜Ùbá¹Ô †µ}p“©‹"Ùt*_ÎÝ'“ý>LsdïŽárqÆÎã¼]í_TTÇä4ÂÂ@Ëp’|5Ùþ†ò"8@ªDÓ€ó*›mc‡Yˆí:C½ÇðbJð4Üþ< \G¡uaoèΰ9o‡S‘W zïÇäéÅÖεˆÒ0 ¯2¶›ò•HßÅlà‡Í‚ |bA µž"‡snÐéUÔ×|Y»êH?¹… ˜ä¨ónhíû ÙE-j™]å¦àF§ïdWD;>&€Eº%IáÓ£Z²ÁíÑ•äj6ÂY„¤W.6le a¾²ýNs¹][ÝGÝ’ÜB¹x%·Þ¿™E¾éÇ[”õì*wmdÑï"z²…E¹å€e3‹íEm3‹ÀÒÓËí– µÁGà“Á‘N#›YÔÝ•êoµl± ¯W|Kå­U#ˆ…¼í<›|_ÝŒ<JÜú oíö–䱸á¹p_‹[ö½eÑÈbñ¶Ž88šñåá°Ø´‡p3òpXܾÜ-‹Áå|'U'ÔŸ„ƒÕ!«¸ëÊݲØ^Îq[Æ_¾çä‰n0ïØtôêɲϾ#¬ß±Þê×Yø ¼ %tÇ4ѱ8{é.¹¨ß\1wÆBbù/÷fñ!ý+t—…õ6pêö®û“›—,”,)ÁÍAÚôèВеe1Á½¯KÜ=lX ×DÃBúÕÐ{ö]²ÌÂmJYôíí„ÞÈ¢d«ûã¶rQ7,ZånY¬IÝiˆ*kÜ2 É7»¢wo,ª˜Y¼:‡ÁÈ. n„îšu£ªýL›Úwö`‘4,üHï„ÅK~h=¾Üèû·0…_ß—}8AY¸Æå*,¦æ» îè×ñe;C9}¬@6|­[-‹Ó›`atŒî‚EiY›YPzt›ïn;»5'\Gêô*åB»öbrç,КqW˜#Ÿ«ÐôY°YTå³ß¤üi+ iY¼àÅõ;dáRQþb ‹z_²aQK»eº‡p,²ûcQ1‹aEŸ*í°0,žY¤Úg1 È¬ÿ½ØÛUe)]0ʼwÄB0„oc!EçHsmXˆV„¼©Î,(ÖZ~#ÍM±Ûó¼á_ƒ»U´î–EÂÉýþF µÓ “JcYhŸ…ýmw•¤Sžî”Eð óÑñi8T)™ESÆ­Îì)Y‰·ºq"²ÀaÁ>,þ^wYÔ‚X˜ÒwG,̹á17¡ôhÔrikdB†Ñ Ѱ°çÓœ¢.­Ðž­>²ÀPbAW}A"éËbÖÔ*þn«þš¾ÜIŸ*ôÄg‘óƒÓæDR–Ã5,Dc†uŠFðݲ˜¶Y®»Ï"d;AEJÐGb1ÃOºp—,=‡”žÛ±M†åAëØê~á ³–š¤Eìsföˆ˜ìš»C`1çPy>"ËôÂgaUh\1J©æÔ†¼JïžEL,æ–Åã”L“.‹Œ»,x]kQDck£€£òY›ÅRäbí ,jgáU’½]jV’ hºlYÌôœ.TÆé¼ëX/™ÅMÑ! x²¬Úud&€Cª'T™+²,6çÏцΰÀ -€ÁÈ›†¹È’3Ç-‘Ͳ6æÏ\–*ŽC0ΠwÈâb¢×\¸ÇÄ""U$;§OCIiX¬©µ'KæsôòÐcQWròF“ÿ’ܲ`s…ú¹41~f,G:±˜^Ppü"î…Åù¢Å ã!1ÅÇi—…8ñÌY*é%3îmŽðt2â¨h5X,+•N*f‘%Y¢ðwfQ=§“§vÿ;CgŒ¾`J„Qd0åóöY¼Ö«Õ‘•®~ÈåB t×c‘QŸÊ,á±ôdõ1ÓÙÇc_ÔZUÌbV~úE ¡ÉÇ9NÐÉ’}3èêåð¸~­J•‘X¤–E– «»e±ÔE\Œj\cT¦Ž$À‚<Š´Yd)°Ð–šwò‰§‚ì^±PWZ=‰ðýÖdi¿0,°\LOØpŽif ÐçxKDýÈ)4Çy³%Ôô^XŒ‰E9æŽ/³qqQ£Í"gãkP-ìA¬È"%ݵKìY[˜²ã4׿ƒÔKA‘‹¯àAx~(±@óUd!KdU p(:žúÓ»c‘@{žB)|˜í¶ÖòŠXP‡"˜ n6RdQ±o Q´ š¡ ¾ñ;p©_'Š:Ec\6º«ÆlË®_`娉Å@ÀÐú¡‹ú®ÊÅ }HÅüÁ”tÚAeWƒ›F¤ÎÐÞzúTðïÀbt®É5ùyÇžÔú®q‘b¯3&&0ÎdÝiŒtþšèFIE€E|¢ëŸ×wU. ™HIwbåL¬Ki¦CÁ bã¤D» «páÖºú þEw)ÿk=Š[‰Î†Êÿ'ú¾ž×crn ØœoLè¦*ÿ­¨,Áy”>½;NZÛaÃ,Œ©+¶‰fŠÕbA÷ѻƩk{ÿ‹ÂŸ×ÑgØä‹G#í@Ç—»ÁªŒo,ò—1ªïn|a¤e¤ÄóöÚ‘ÑiEÆ6.qKŽEØuÉBGÿ–ž´fÖÓÂDß3Æ@¼DH9²0­Ø]²h¯±ÿß £‹Dck¾CwÈ7[›Î_˜Yªâ™)Ýà̪ñ‰ž¡`=.ŸÞ ‹VJváAõUã:ðÅ©»c\tYl’… £h픆óYk}¬Lu6éݱh»3&Aw¦9ÿ>µÃ]p³ÞÁï¾eQ¥Ì›>{Ïö·îpg÷Ƚ£;d!ÜÇõ´f«÷´ÌW1»ÁBÁ Î*'eZôï`qͰc!¨‡¦öÔ/€> jÂÜâÚݱðlXÉ«žî:J6Â`ºå|=8‡8§Aû7×Í_ãÙ€  ³Í®¼ýµžšÆÝ±ðT&l€úr(,¦þ©[öªî@‹ã—¡b[¹Z{çÓwÆÂ=²ðƘ¯;Á¾ ï ¦6w%½øŠyñ «$wŽ úiãºgyÿ°ô;kÏsÔ–U 6KMíP7­g‘¾‚åÃbÑddXÊ¯Ž‰n5.‡‡iŒÅ¢Zv¤Ý½ÕÅwŠÅ K–ð© üÓ·Å•å-‹FÞ²hä-‹FÞ²hä-‹FÞ²hä-‹F“Å€#ÅÛ~êA²¸}û˼eÑÈa²Øº¼q+r ,Ä}<õ0YܾízH”…¼§(‹ô>žz˜,†Oþ»M9<Cwðäƒb!µÝO ÓÞ² Ô`å±>‹–•úe×¶æ&ä XÔÉŠÕá/ÍFÎ_Ÿiºf·Ù*ÚóÂ}Ñ#æ«ËA±ÐÀ‚†*%Öðö•[àf¸´·‡ßrX,âï)éNEa©Íy•¢"&|E¬AÿÔ½Øþ~X,’k%hã×:÷± ³‚†Y•ps⌑žoWAîàmKtp,b:’ŽO°ÎåC,²¿Ðƒ,êG†EÝa!;ÊÔ¾Ãb1[áè{Ž^ܵË‹’U†XD–E"üëç²5«mÌwÀbÎX¤t8͸±·]»¶Óäüq•ž)VáfñŒZ'›'ywÎb»Ù Gß'0ÈhX”]ï}%§J ü8ïFòŸcW.6»[ºs{L:§Ä’”7Ê\Gê;Ñ0‹ß§æƒm;Åf‚­î…û´u`M,Ð(µ$ÖMÔ”Š}SGEŠ»,½¬6 uÊg‘vŸ'0Ç udº*˜…ú;üjnÛ,`Äy¦¸âYµjÐu8€; ¶ýÚ¤­Ë2¥~ä8ÄâÇ6ÅdUhêˆea«áËÔ\è–‹)±è-‹ˆ{cñ¢›”ž A*²Kµê‡SþB)F•xdÑ: ¨·VlMÎÞ˜âÑNÀË{¬#Ûe±2j35±°J¾ܧºc‘d[?rÇ~cëdX˜_;'³/DrOmçVY¬ìAQô‡Y\„X<§–Å´3Ôp,f­ËL[O›ã}SŒ™ÛàCwž{,H;™ßcnYPγHi™ÃcÑš¾/Ð\—Žùj±èt°çŽÇsH,NÑ"Û(9‹<ÅüDÒøÆ¡—†Íg-‹Ùn,zm÷ý²ØäYò-²'•Úo$>.&8yr,^×h¢EF"+2¹Äz¿ò½…YÔû°pc¡ýÉ^ö?fì¿ãŒ9TîB_ˆ…q×@,~ƒö”õ#±ÀbbR\ˆu-¡=€®£ÆÓêuâŒ+3à×YÌ}%Y½¥îYæß êÄ™ÂvmEªÿKà´'Îú)Pz˜ÅT/Ö4\zmXD2º|,Æ.Å¿DsbQá íøh,Ä"U0F+þKÌû,$`æ¢!­*ýé9ÜfÁ™wÛ-œK¶f¡YT‹!GtÀ¢Ô¿úÿúÄÄáAŸkôûFté’Y”µ„òP¢q)9zÐxd $ù?Œ ‹êGÈBÕQjܲa ªpÈ¢v,~?‚\sÌÀB5™wèÃ'-0¬kß.0~oiXêHÃB"Ìb†,¾IôSÈù÷-‹²¨GúÔ¼½L(d†6¥eöÎk&óŠOŒ­þ†XT ‰c´KM‚89²˜ÖéÚ²HÃ,ÜY—>‹öXÁÿ6ÜÄ´X@)œº‹å"ÇhJY3‹"±œÃ”Ò2µ,U‹U-×]°£h*ˆÅ3,héx¤åÔg¡6ÄQ‹¦8ç°ˆ³€¡ŒlåÇYý˜_ôY¬>‡X, ‹TŸ-î ÅG¯èáH}4ŠÅóqŦëY\‹å‘cq€f'õ£¿Àf„ŒF˜ÅsÇ ý†XŒ[,²2E²ÃB¥¹hç‡ëÈq¨U±P½êa¦Vu‡ÅàB×DOª(Éh[ŒVèÀâc(àô6N²Hæu4Îé8zd "SQ ])•‹2/K鱨ÒLV=GÀZ.;÷Y°ˆ ‹•è³è#Pí;7H&ÛY¼¨“*EMðÍ¢ÐYôc˜MàßøÂ\ÓÙX@¸„í#VÐ$¾>—¦Ž¼÷\NÿˆæíÌâ¬H±`'U®s<|úTà çÀBø,ÆÈ¢SG6²(vf±j̵ñõ©,ò'BGi5ZÓ(Ü ÉÞb`‘AÁ¿âP#tKŸ…ˆÞ§"”ÒÜ®þ2’Ó¢q 1+Æå3 <6,”ÒÙ ”Â"¨±£ œö^‹EïΈ‹!{Û¼9ÏØ.HœÉL¨øì kv9Êc‹2z?a£:d‘=åäç€×F¡Dßs,„q‘² °8Õÿ[ôÕõ;¯#»êŽ,Ö:.ÌÝÚÎ|[MdˆÅÅñ oéŠ'çM?âÊÅ‹"t²VëjlÚ#cfÊ”lÏÝF›Ù³19á9Œ, ^Di$hš"Û,ªRÃM±øØ¬º ¬kÚ¯[ÛáAk¢oò?ër ±¨½ŠòÊüí²x9È"d|j·ï`)yàþ’N²ti„c«¹Yÿ¬eqÃó9E©"Af1•Ö íVî^,Ùq}ê6êϳ»™…l&UfìbÞ)—ohŸ²øD+üiÅa¦†¦$²`ªˆZ²5•úµówŠ×:,„÷9Â]Y¤8¡Þ”³ lTZRþyã¢ÿ;äðÄ~6/{¦óÇÑ—lÍ[üåÒÆcX`2]Þˆ…]ù0ùO¼ÏFüÙ‰–Z,*d!÷>|²éGÿ4O%ú¿×Χ­›/ͼíe礋R¶YL\X’½XxÓ¯Ó. wî{XwÇáRG|kæ ÇÂF4óÖ~\ž<…ÇBht0‰7Ö)‡­C,¼•™5.åó$}65‰_tYÀz_ÅAÝW^õúŸ ·JÑl­˜ˆ|.×ÌâŒ]³uXÐ@†lT U‡ö—ž®rI+±(pP(í˜Ê±˜6,öÕ÷ÎÄÀÝV—ébçÔÌBz,\[Ä,f ê Qi£ŽÑÅŒk»9¤¦´aA>D=厒»;1³xiYœ“ÏVdqQË}Ï0w{ƒ]é²è~QFÐIžÑ§È±hfO®åP®òÌ0NÊiÓáûVç%Ž]²±¢2±n±(i­\E…I·µÈ"â‚]‚y,Võ‘«±Xmb²¬LQ$Ö‚?™yîïÜò°€PSÌ#³ ÞWDÔªÄþ7>R俈1³P?id]J,YåöÑJ‹—–” MÝð)4•)e§›¹ÙZïÍâš’Žê—í|s•d)lÚef1aøo†ÝÖçò¨BbnYÀM3`ñïñ¶Y¤¥´,J+ú”êÈE– ‹SÅ+˜XË;g‘ÅN ÎH%Ö?Hã Y¼"·²¯ `q†/ö’Æ0*£ú©\1‹<†ñõLÉÓ÷(h[jÈ?Åóêõ+ÃbJ}jgf“Sfq,Îõ²1 qr÷åBtÕ“ŠèØ–‹¦]Fz®Ò§?WB¥IM,°­Âù`T}š.*.?„ùn¢Äo¨¥Îdq‚u©ÒÅ¿<ÏãR4,’ìqɶ†Å)Ì4‰E~?ÝÝ'EÓ\4ïYœ‹gOP %ãŠY\(«£‘ŠþlÂ,Êâ žìanÓ|¼Ä‰2Nßhë>Ò²¨d#òý^Ñ?Ô)Î6Ér° \2ªÞû’^á >PS¢*£qÆ> iädæ½ä?SÓ”s{É,¾G,ÈM”J¡:füë‚Û d1&8)J‡VsîW ‹š^cÍYe8|¤ UÜÑ‹1Mê*vìÇe䂉1çSò¦Ðe1¯¬À Ü«šB•3cúìy4¸²u¿¢Ðj”éXP7­"hñ*³PðÛgqñ—š3;fçÄâ½'Ž~§´òÊÚâ $µâŽ|ªÿhkhñ<Ö÷^G‚,Š¢? ï¡;ÇÏG˜—ÚŽ!' š: \éÎé;4ŠÌj£ªÕ“ÇÛ„ü|­hôº¦¡JñÕLoÌëœÞœ‹u 7Òúsi&b3mEͱ­*žÐ ú²Â¯f+lBžYýQbAË•­1¯¾/{²mÒ9(=µ"^Ðé´ºÌÂ,›¬¼IÊœÆ>‹’‡4G/'AÒ›¢t‹• Sé}Ô¤¶ÔB̦ÏI[÷!¿ZboYB,ÔGénõ6³x¾ºò–thzJ,ì53Ê?÷YT¡EÞû— ‹¨s±«Å̞ƖÝÊ[ölX´}ø\€æÛµ÷(a÷Ö>(Q|ú[ЗÞÂ,ùÐ%……²õ˜"8³¾w ±¨:ž!Ý‚nýÊ^ˆ¾Û%¤"mBÓê±èœTf­hKPwûA'®z[ßLTÆ6{…· ]µ´.šYtv#Üj‡ƒ˜s;½)£¸üÛÅbHœOPö×oc`ß Nü•÷ªÕE Üeþõåúº®­mCR³ê¨ ? ²èÙëí*Ü·”ò0çäÛ$È"¿jÿoXŒïx=ó†$ÌB\16fQuÇ­Dn–…þ1þSuÇ­DÂíÅ5#í8îOzޝ7È!Ù܆Øy£o:¤ýñmgQ+‰f.­¾Ã,$ý]{WŒ:•ê˜þýÖ³0C‹Ëf&]§æÛÎBõʅⵕ²Ñ¸E#$úe#‹7›~|ÒgqIkn3Ÿ…v#‹‡:³h¤Ï¯½Ö±ú*µß¿;,­â·XÔ?û–‹Ã\»ßGÂ,Fm;µ! Á‡%aQ=nXLíÑÃ[XÈ[HÞ ZIÝm/>©FÊ­+|§X ø}*îÿެ7²S=Eã4úåÛ_Gè¯7Ö’xÚðßX}¶#‹ÛI Kz›‘[Qlëáí]‚ZІ…ÞEÏgÓMŠœ$Ý ({4­»ÒaŠbÃDZÕC?ì.²»ézÒg‘‹×mï…;²ZÖQ\dÒ ‰Ø"õ°¨ ‹¦Ž ‹Uã]eG:MÛz•Ð[ëÝdÑ”ËâŸSþ¿vXÌè/ã õ&·Þ§" ƒ³÷ŸH²ß Ã"¢€©¹†> “?ŸÅQÃ_b£‚c† Âþˆ:,ð_{wÈèNÆ%LÉéuDORfÇ GÑçÌâh ¯Žèù©+ÇmkI„ùJ5üæ ˜}’R#µ !cÛ»`A;þÔd£yÕ=Öù#5¢Í²˜#9ÈÂkée›Åc÷Ãú˜î66ŒŽ9ÜHñºcH¨6G¾)©œÏ óDL7æl•Š,Üié-Üò/lׯ­ôX¤öÓKU³fˆã Z6Äß³°Æ~¦3iNˆ]NÕ¾žÔ¤ýÐfarÉEݹî­ÕvöY¨$Àâi ÔÒüÌ,¦f>‚U‰­~ÕŠY{:*K-Ô­³àÆÞްÜW²eÚ<÷‡Î,Hyæ¸UÒª#$ä<‘ƒop!mÕfAèì(Ôüm,ï_é=úˆ«åpw¡:j´qÎ^%-{#_YX4 ~Ù‹µe!ˆ…Ùœ·,jù{iµÛkI;ko°ôù,²83uhŽÎ©‹Ÿð-ž­!ŠwüdÝž8K7iúVÿ'oŒ,šÂÏ,Î Y%ðþżº²žækùO©a‘Ô2OOÍ Ç¢~"Ìø¢F¯»'ø—\ñŸÃ‹øG|ÜZ‘ß~¹ ,ÚJWùª¹ð“7w4åÂùFƒ÷…,𚬠‹GøÛŠfýÚ™œj~Œ,€ÐkÔw]ÓørY‘˜q'|+R\L‡¾ :—“;4¼®£:ÉïF¯ËjⱉSKdžÞR¿i/¸¤‹Ô²ðYh²`_VÏ™(³ Ž{\˯‘…q iX¨z4µ,`ý)ôm¹ˆ¸kA"»¶çf_--çõðÓIóͲÀ’=@${,þ\W_‹7¦³d£Z¼oXEE,`´QAŒ9'Èu¤§I©?dØ¾Š»*öu£-©¨å<İ€ Ö)‚« É,*Å3`ñc./kÄÀ¬&Bè4]9ð¼$_>•\ïoÃÂð¡NÄºŽž;‰ºwÝǹoäÏ,`¢Ÿâؽł<îtXüÃ÷Ó¢&8‘N‹YnX¼Ì?%“ dñéHgÉÓLªB4®£'ŽEEI/uw-¾¹—Šjý't¸ÊïZ2 ¨è Y”±cQCxhó¤Òõ§X¼G®këG’ù‡XV0°ÌžY»DÁ [¯þ'mœ/ øðDýÌÍjæÐÔ–÷b¥º‘ÅeÃbή—éÈ£eAŽ×Ðd4˲PX{Ã’]ë Ù·±0§6@çEN¤èÙ§ún«›!ïüÞ ±¶±cq5,R¦á-ÐâH„ç#KÈ:ïº6Ï}ÐÈÂÎÍÛ‚CžJ["ÌwrˆFi*ZC'@>€$zª{“•–=a³8^Øi„û½|®ú³Hm‰0,}€fÜÈ‚­++»Hb(`ãÿµ ãX¨(œ3Ì> Sñ L‹C•Ô‡Í"Áq§ 8é_rÛj`ЄÙw,˜/~Ö¡IâF¿GƒU ·n·¤˜|ckÃ3Ô8·3U#“·¾Ôy¡ö"¥È¢qêÓQ‹9¤"ë™ÖþdÏr8ƒ‘# ªdÆŒ]dø–û•Zý[úˆkãõ£ã´¡ã)…„TÏÖÓÁ¸Éä›úZ`afÌM´ÏNw&À"-¾<ÅÊœý NbC&õ ëáù™¹’o`Á6¯W·p¼"/cò@Ÿ{®‹;ú†¡Z@,ìy¯Áa˜Óëâ‚uÐÊö*‚‘Y@'Yî5Eض5Œ8Í2’¸BÒî\`nÅö¸Œ9½·ó½;„1ëbÏdÝ‹Àœº£Å¹§šoÃb9Øh˜08šè‹Š¼:¼§†ÅVg@¨ÛÛ7+CËÍ÷ºO[Y„çn&>‹} rµ=ˆ•b`dzPr{Xl°Ì»U®Ãb)CǬšx,Öë¢ß ù¶Ûpï#oY4òXÈ»zÐá³PâΞô–Eó¤ƒgÑu¤z}™ \,nz”Ö?vÙÈwEh›ä;ÈB‰¡Ÿ…¸á·f‹ô†# Ÿï¤‹ÏŠß]& ³(°O½$|Ö•¾?é†ßêô˜?˜Å¢~ÉðmA÷–ÁC.-76f¦2~Ðì"âÚ'G|®uÞÑàòý>,B»…gk‹Þf‘4NŒVÆ,øgvO©®ÒÒ'G›¿Yzz]¿šÙ•î‡ê™\3,¼¥!LøK›uö?µœŸU}$MâRü&û,Fzº‹}Ïi ²¨e» Ÿ“ÖN°Íkf›Å+ úß²øZ2‹J„îFæ:å[ ÕeïÉ{91ÉV4C,þµÿY*‰Àµ.‹5•‹=iNíÅܽª‡XØë”™*é±€”9á8ÜíÞW ÝñZ÷:¨‹™®EýcÿÊŠ uP5µŸç3Ãi5•´ •;ÇL Ì;ˆõƒfXÄÊ×ÁkYªÜé°ýøAý¯6$ý…Î鸣?`!Â,þßàеŸ›¥eáÞª™§–ÅoRÆ'»±¨Ç—¨×1iXü: ÆÒ¯#Ò| Ø€…Ø……–aÕ‰~ß²´•£a!0á…lŒ€E,ä‹Ô<Š33ê²À†«‰ëØs/Ж ×3Slx†açØ¤YˆðÇ´7r‡¼»ö¢L˜Ec|Œ¦ö/jÖéi— ]\ú5Yˆ–qõïƒ Ó}V'³}›‹DK¶«²‚,>]ÒõYè‹*F¿Rxé¯å¯ÒHïÈâ-òW¨“íÅõMj?ý±]ΆN”£Ø ÝÝ#°ƒ,¤¬ûWˆE<ê7Äbε£a1FuÒbQ§Q:ÈÂä‰Y¨‹ YøÆÕN:[ÜCƒ[Šm­{ƒû !uŸÅÿ¸s¹XÍ)!n4T)PrfÒÁÉÌvdQý¸ÃâIê·,Z_ñ!ÕOúÁ(Ôn,¦P.,Âí\(7]zItXüÖï„ëÊ͵#!µüçOÅ‹ŽÀC„|˜-JÛ®,tŸ…Þ‡'¤a±¦‡žÌLbÖ¶øŠ¶Æ‡´·X$ºþmÔ ±x¥[A[,lÇ&L"vc!,Â+c“À14&Ë ‹’ºlXÄAŽ«Ç­G–;{!…ÙEÉæÕ~¾dáÿvb¦’t±Ô;³ø û^ šèþá†=ÕÏ1ù<ÌYÖÀç]¢=£Új"<1ªˆŠ&HqÌÆÕ\p¦­Þ`‹¥ÁMá®ãŽÞfŒmZeŸX¼ð¯8ÑÝr}nG™š‘À4 “ü ®«á9æôOê1ž[b±À–Ögš^ÈâØ¤c,F‹:n9«n±팭}’Ù., B¶XàsEKMÕ-¦,Ú +§ä«Íh‹ÂÿïQ:ëOÐ~Z ZÈ}Q ¼kb~¸îœUé)™~Cê­!±€4¯˜^Z½Û.,’ÝY,PºÏ‚²l»l§æ¿àM>;Dg¬©†,"¾eDÖrÍ,F0¡ è¦=sJ³¨ã*]`%ï±ÈSŸ™@JÖžêr€Å©ÏbÚYáBÛ~Ù¾4E‹kŠÆV bQ ýÆ…`Â0Ìâ Íÿj™Å&;yjŒ-±'þ>oÙE+⸦J=B·oyÅÊcQÅhû¼&|X–e™d¦Zå8ë¥wI\³ƒn)dÓYà 9U¢Å¢•€‹9D›œR4Ps/ ‹¥F;,¥•àP $x~h-+Áfš3l"ŠH"dñ ›IdŽ\¯>D_÷YL0Òªa‘ ‹’Ú Çâ’Xˆ†…ð4z0î\ã!ŸUê±€‹fõBŸ¢ñãÔ~Qžµ³€Ž‰nå®9‚†9avdî#VúE- Q©ÝИÂ)±Hñ{eœ‹ß ¡<ðô [Jžzÿ5ä³ÃâÿSPÈå‚_c-æ–•ü%¾qëZ ‹yIc“-ȶBgJú,bkÛQ-ðœ_E«Càöâ…¡Ž M§xê#†‡Ì%&§D¿ÖŒDК#|˜‹©Â D,¦dÉXõX§Ú¥ao9Éú,2 eý 5,V˜‘Çb‰,Ö±e‘ê2lS®W ÝH–fjYØS,E|-}df‘9*J'xàø”Ëû‚Z£G…þT ´ãæ8WPæ +5h«žTdšö“™_Jx›¶\ÈúWh÷ÛéGr4òÆ£Ï ‹Q`¹¨‹ò_e#\YÙ¶SBV!çfq>E¥QZ åXÈ"æ›_bÆ¡\ŒØtNa™®[=‡a‘:*è,¢|B"ð‡×º„{úñK-‹ä¼þ«#¢Œ ÉçF!‹£B–±¢aƇšÌ“ÉÀ=µ,2sÞéŒ/ ´ûGÃaöýÅ3Š×#êdÙVÉÞÞçObfCŸ¥rÂ>OæÓÓ"…FyíX¼†Î;æ®eQCŽÐrÜ–‹‹7µçO­6|D?¼FÐ(œ ã3(ؤÓuD‰"É„±•!Ó~x3q)qøã dñÂgÉ%mš×#r E%š†WѧQÊ, T\Œ°ªÎ¸²–Æ;À¸ˆ ŒåSQŽÙR%þnXZ¢ÇSÛé*;Ú[Ï)YBïæÛŸ!=ÍìJ]/iæ3SíÙ®oW²0\ݼeØÝÍþžMõn ¦”GQtP_ZOC\p‰ÔŠÈMiÌ4Î?ŒÇëµ$Òþk›þ²»êÕ|Ÿú±½µŽž„ClqÐeáÞ„·-° á­Ú^× ºá†p#å»h3¹]yvh†ÅH·Yˆîé³ÞqêWŒz“à]áVßlÀHºkæžîÕyèT®Öš\cÛ¿Àο5£°@´†…M,„«Ç¢e•²™ôîüsiþZoiêEÝËîéÞ Ë[CiU½‹ŽÙ”i£V^D´0S|ÑŽwI;=ÞÖ„_~‹vN»‚{b­n;Ø6çáû»š¼Í›ðXÜ´×8;óÔ†Ew«Ã‡ây“ê%•‰IS+YtÊ…§Õb±UoÕ-‘¸LÙî÷,x“íï•°ËáÞ +¸siµíRˆ~8SÃ,»9öTÄWìå”ÝÔü;é>ú 4;°ÁË›ÍE»êóŸJ[«½÷nÆg­¶¹ì²Hùç ,„»Y@¹8ÒtŒ‡½ ímÚºÓ?¿~?Ū“äí7ÉÖW‰ÙòàåÕ¤©¥’µÞ ŒµÌªî ÕdŒjsM«HÞóûH‡æ”Ì:Òm!=æ¡~÷V†¹mˆè瀣ZèÕ«ÖO–EÕyÔŽ¸e‰\÷[4ïÊž†áWžâ¿¤¶[Ÿ¾´=YŸú´ÐG¿kßjǺÝN=ŠÚá»"¹}òŸ'dÁXó*é¨Þ ibg{ÞÞ'‹ýDEÚä º‹¹hý6äÓ&ßËÁâƒba¤ŒÄ«ÎoC÷l1u¤w–Í=Iýƒm!ý´›9úàPX„—K|iT½© 7½¸~в‹þø¶ŠÂ·‡&9‡/ÛS½I7¾`Ñp< ©´-ÄF;(œé‡Éb»ld±}*uGr|'O9h{3+ƒ–Æ7+wÄ¢» id`É®+ƒ–Æ7+wÄ"¼Œ½ëûVâ¦Ò±ù1wÃ"¼Œ½ëû¾ý3gù1wÂbÀàeg{ ú¯,wÄb \ì˜Ço‹Êæ 'wÏâÿNoí)¡õ5}À,ª½V%ö“¡r±k¹Á¤lzL3g¿Å‘õP{±cÛy¹=ÈMˆÇâŸ2`á3èè±·€º‡KÈ«ËaŽÁO»Ü^Ìm® Ý Ùù>0*géÍ+ëâ6WOoÅqß«…÷Eç'b1ˆª³eˆgKIþ賸i)a{ö´sa«×Ò3M¶ß²sÙ¥öT‹ÎþÙ®,êqÞR¥‚¿ú,[êÍImIK~7ØtqcÞ«ÉúÀB-|Çô¯KíB'JA_‡æ©^XšÔq…§f£øÊ#]çMb7ɱ…ô¾ ¾Ðd³õ~ÑI6]üŽû©'mä.‹ Ù¤7¯Ž, „¾õ©}¶\ø,º†nf2ìé%EzŸ[>™‰?'È✌ˆ»,¬Š‹¶»› k ¼ÅÌ}ꬷ:iˆEjœì΢% Ì:£çu‡!ÍC;kÊ–t.¯ ÙaÑRaMfñ’ï! sËÂD O{¹‹÷C,òvV Ù°‹ b!mg)K€…æ L]—Ź pÎ÷PòW–…0s›y;Ym™{T©$æ:À¢«µj§^ëwèß>‹Ô|êx)kóàæeØØÐ>زXù,üufQIÇã©8m ‹ÂªŸ £˜d¡Lç4jã1aAêt‹e;õý¹1ËÔ5ª`#‹•Þ•Å:&˕ũôù,ÐÉ§Ï MEJÇ‹U•@sÏJ»l…Ë,*r÷“šÐ]Åm,Ì[˜*{Ýsx}êÒô2> nuC,|“˜‹œ:ŸµæŠXŒ‘?:Èã-ÐQDgLl«1]£R4Âuæ(Ž…Y7]rÛdY\t—Ì[˜:¬˜Z{c-Ë¢éôjÉ~NÉ‚â·sz\€™.&8”‹l€ë’’Zq•:¤SŽÖ«—=ø ò´@µeñ3ŒÅ” : »´*§‚ÉšÉh¸mXP¼]§=\æ*Å 6:LW®è׿èÆ±˜¶Y`zýÞŒXàÉhSÊ[&ù<öŠoü=–tø@[‚LIÉ’·ÛCk‰ØÅ²\Tc¾[ý aú,¬•aâDå[tP‘Áï»aaþó©e×LÛw²16²0 ¯k‰w½Á"ÁåB2‹:e¿2,.{,ªH0 ¸eÅêbïñqÃkV›ýP„X(`q·‹5°`õŸ’LJ‹Ô+ÌâM³r@Wj,¾ðXœÛ6Òu\ œû·*%M|õSÛ :ÐЛ×}ÁN/±È¯‰ÆÆ¯uÚ¿1,”c±Îаø”X| •€‘ªW×0ÑŽÅtŽ9ɡʫ´]G ‘A!d‘¬Ë‰j±ÈSJîj¡Ò³Š- /½E©i”­îg‹Z‹ ÁD–eJVvZª"˜KYÆÛÊ’k^b+¸&§6Ž…à@ï›TP»oÊE:!ωE$¡r^õ¤X(H©V´iþHcU[kY¥í‘[þ~TEO‘Eùq\š:Â,ÞiXLÍaæ—žë3(•§Ä~ù?kÁ-À)>9u,*±Š†XŒ ‹ ×ë M,ÖhÙfÉ ­læ¯Y,€Åp„‰0Úu'ÀÔ²€xˆ<6&]B’;,Œu,`$ã_Ó^ ñtqÐ夒±IæÚ_x,ÎþDS¸‹GžÔfªÄ²°ÖÀB ³ÅiXÀØY£©Ž‹’YÀ?ï_h`‘‹•þ‡Op©^/Ö•Çb¹ªDAå¢HŽsÒ¯"™bñyU©„GÝ!)ô5dÍýÈp¥2,Џz66WkÓ§Ö))¢Ž‘„ûhäX@*r‰Ne©*–IaXX/Hÿ•]›´X¤J'ã)=,œX$‹E-4— xíKý8"bQQz³Ø|\ÒØ$Y2>È cõ»õ¾¦‡}1¢–/Kè}·Y¼K(>w,Ö&…-Æi€yUš†¸ÌYöXtv>‚Ktº¹€ÇÃ¢Ž¨ì/øÝVÎ\|m,¤.á×QfX|…Fê¢6,*™Cs<®Íš·¹úˆ³©Ä×éòHOÿD‰†Å£w¤ÇâÖêŒY@qŠ> '%Ù#ò¯,¨ŽYËwháÇ8÷(;, †${Ì– è'£b„Y.ë’ÖÞCÆH;‚,±ó0L¨]†ƒÎ9³–ù,~ó¥ÒŽ L7o-ºä_˜açÚ ½×Ø*åÑœp#‹…6Ó hŸSŸEÔf? vQaË…a fsV“×ó°ü£HâËË©,H³ ^, q:•XÎVY¸®Ùên,þ¶sA5Ö’®Ð[fØÄ<Ÿƒ½@¦«»VÊèÝþ 딋µ~Ú‰EOªkI¢ðÆ}KŸÛºþÀ¨§ÇEÁìÍöJßÕdO¶dCãÓßI¿kë„v`‘5=éÅl¿Ä]Wö|œeïlbXdøž»QHæB8úCãÚ4Ä¢Œ‹qŶòÛ!UW² úF, X§€³WO ØL¯ÙÁ±a±Æ&Á° 6#!i»\@ëôhd·ïö`ýÖ‘ÅÊgQÕÉ+úɰ¸Ð³Ä±€ $4¸°,È™]£ôXÎêY¿È˜ÅˆXÀCU+‘“à ²p(F5²˜ÆÔTAõf EA¾¾Ú¾ó7§ØßYuŒ,°¢:0ÃŒrT´wÛÉK=9Ž07,дmª°„!‹%†¨“¥~Wdܧfq9VSÅ,ÎÉ Gœ%[õY̳¨9ó~LK× ­ŸDcøñƒÄ±ˆž…F¦cÊD¨uRÖbMíuŒÕMAï`Yh²™–ú%TÔ3ŸÅ¸Ð£ÜZ®íÌâT£ñüQ^èUÃ"KŠgitøiœ)²¦ö"¢ã’YüY÷a7ö}‹ÜpŸ“G¡#šƒ©=:¥þ[½ûjòáGô[ o‚@EÀ«üòsf!¸4(dq,³ªq©“¼‘³gßM&ðšszoË,&hóK†í ³8Õ²þ<¦œ#kß~/ÒX:’Ý(>&/m½ÂEÙcÀɶXäÌÂÄú6&5ãbóô,2&‡ÈBY{m´ÿ/1]+6ô†ÿ_ª@q«f1†ÆàEUòÂÚìÌ"ÖGdÐ?”‘E_ÈÁu·ÌÂý³'œ¢ÇbE¤Ì(©Òö6úóWB95ó6 6,²”a¡¨:7U›$J3 ¥pã)u^ür¨Í¾Š’òÓ(ú? +É÷¬#6Ÿ1± Ó,²% ‡¤0K(˜r^^`Ëydq )¼´àG~é¾—.b¹gßK<ÀLœ‚è,.âÿŸÝÛqÑ©FؼæÖòð3È9±H5×0…©[):qº¶, ¥¢‘=÷sÏ/á6ÈaL,°h•1¾oò9•â(;TFß³³' 4úZóÈêìß§˜þ®m…ð-Œ•5Ë÷‚ÚaÂG‹ÖDäE)`Ð;*§œ0 ÷¼‹Î⸆ITÕ° Ù–ÊÔ½ýûTßD8­ª’'Ìwü‚c ê´hÆQµ¦¤µ°>­Ì p¦©/Æöe€…´gôy@‰©5 n/õ–†€ÅèˆY#,¨Æí¾$Ë‚³³‹ F gÁ_ÌâŒìÿRÚµÞQšiêKÈ ®g'&º7»7æK‹ÅІ¬‘¹³ šÒ†åSM˜8ñådïD¶^é›Ò¿`›úÐîº[`â¢ÙChù¯§ug+8 Ù¶XlQ; Ò)=vXUüßͰàæ~ËÆt»ë¢–ŠUk;# %Îg±Å³@÷Xl’k±p-·•!f)~b’^¶^‚‘HÝaQlfqÞuÌÚ{xR7,ðlÞའ71äZRu0ê¬/ÌlY *u ÚïŠcqæYa‡ jÊÄiœOiÕgsór-¶´— k'l…:1sA¡õo7²Ø®ÚgYɼ±Ë®þ ÿ}Óyï‘pÚ´=þ‡mç/îÅâeÚþŽå{x³FFùèz­àW‘GŽE6˜ ±S"‹xÑŒE¸¿P?mŽÝAG*þ:Ý¢‹¿‹®…0LdaŠ*-…=x”Ñ_Ó_Ñ÷ÒÛÈnVM¹8oŽ!c]/U£¦qÊ"‘¥ÃæHöaŠ+o®‹na)Íc¦îÃIP™³'–ê¥8z\GºåB»õw(˜Î?Ö \«\tdpŸ¬±ؘÝù¦wyÊ›¾=è’~Sß$‹-²!•V‚¾5¬ä›~Üç)¡ÑæÙ–07Éb{…çÚÐr§Çìª#»¼Qèí&ÅÇv‘g›È]“³¯Ü(‹-í´ÞÂB…ÝtEîšœ}åfYüÛBT_ýðÐùkrö•›eáyä K½1D÷°l{Æ•åFY”Û£ 9¬:¹QG ?¹Y[šá±ÎCô+ºyè,új7W—‡ÎbûÚÏq=póÞýå-‹f)í-‹¦š=xâúQHóá-‹fäÿÐYlYjÛE\5{ð,ÒkGñ­©#[M·Ëa²¨Ó-ûæ·"ÊBngqܽpmw!ÎMùA±¨Äv3ó×¹òÝm'aƒ¸Éõƒc!Ì0Ñ,l_ìÅb³KǃbQïÀ"13SÃb­O.‡{"ðŸõsùÁ±ˆÍÙ°(Ss˜é6¡eå¦3:DÿyS˜‰aa +Kb8ò‚XôôrÔ)V3ãÂâ°X`?òf`{ÚȤ]G|§.P÷äTí³8ó®’…Ž6†¯Æb‚*­Õô¤ã|Úf¡Ä¹cÑŒ»,føåÙßßF]…B/ZçÒ† íÁû©w-©_™“w¸¶wY$A~ žôY¼ÄùÈ!²ÐÀb¬ôoýKIõ3Ë‚zÏ‹jbá‹ïªd VŠEëì¦dѹ4S#Ûi†X裆Exê×0Ó.´Ÿq¨,ª×í5Ž-CuDÏÏ·ô©þI@A*9H"PÌ[Çݼé±X2‹áƒ£¶– ?-i± uùWÊ|sôB{|!üG“…Ò§ jÕ_oaÁR°ÀÛN&‹J/:,ª?w,¼›eïFª+¬JØÄ ?àrÁ­ó!±˜ œ‡zÍ¡u3„rÚf±ÖdÍBqtå)ÆÉnÜ–…ìô©°\ðóEçi§U2±\³BoJ¦Åg:5³@u[OýItãfýªbû,ØOÀÁ²È“’‰Éz„N¶ŠÅÌ‚>Ÿ! 2=kXPV uGpŒÒÅÝbáM\0 )ZÅB:´ëA,0ŠOJ}‰'([1¼Q:Ý:iZ´dM¸ ZBA½‡ïxȰá0¥ÑSâ@YÌuš%&ïÌâçŽÅ©^85³À»˜Å/1°˜qkˆn`؈e!‹1Õ“$ºb±ÕìÐX@ã–'UJJæä>XH`-‡Ï¢Jt›EfYDT.¦Ìb¦K3 c_,K•¡§Ê†ÅR@];PËJæ±eEYU£’kX¬ au‰ªØ²Ð†…(Ñ[„‰³HÍȃY\æ)Ž1ZÈÑvÙJ ÛÊÃc‰d@Z0 ²B¯F•e1Õç¯`EySšXȰ Ž%ŠõÉÑ~Ùc‘I ÆÆK•ðGõ%o‹äè £æ¢uP,„%ÛHRû@þF>}¢­Tñû½8eÑóTÓ´ûŽÑìŒ7òˆ½X¬ÉÑɈê‹$ÿ<ÈBp>Ñà@çz˜£òYdXÈ,ÞxÃi$tÌß'uR&y”¦š×¯óp’'ŽwÀ¢Š>ÇlAoÚaþÆ+…ÑbA£@‹ó°XØO”w)Ó ›ñºvN6øì(B ì.;ÍWÈÅŽžkè”#r)€,¾à2%ª†Å{ìÆƒ¥Å÷b¼£8 ¹[o"{drÝ–ÒwÃBº ÜM„vMi¨…6, ³q™fZ,’‰;¦™YÌn$/וƇ6³xí&ïTroßdxÕÛ…„B…ÅChŒÛÅtÁ…‰²n±‡²¦”Ìb'Û¦;”Søg¶¶xŒX<ûÒf!ÌTtÚ7Öhö“¬Í±8°sÆŒo”YéXV–u͸Yú,¤Æv·gÛÕßO:H䆊Ê›« Fj]™5=/ª^gÙ-U"wêí‰añÚ:PØ©vcû™wܱ ú•E½(úÃÌbì¾õ܋Дö̰إÜþQÒŸï¯ý¦!LýÊû&Ž}Ë`fa z²g¢oS¦»&²˜Þ`J,h-£N°ß¤¶'ïØüUŸè~½k³8(\å±{ð†Å¹e}–Z_Š~½»›¶S^å¦ÝÜ8ù'~÷#ì½ g(Ê9Þð¥ê/®­#©7ÆÒÛÔÞýôd£€Añ5¾pP?Ô+Ñ¿tƒcðžv¡4 »¿“•ØÕLY}ù~å}‹Ý ‹ÙÊî²°Û|†Å7ÒûXãšñ½4•³½negö«ŸÿûwRÐ6£Ã‹µý q‰Éù«Ù‰…q½§äA÷Cõßìp+³ ²‹q¸Ù‘lXøñt޳S'þÓU#KûA i~Ù‘ÅUº·\†Ì®vê)XÔÿ‚>+dá_;CÙ6‹^Úåâ×Ò9Õ߉Eµ› ˆŽ„½JT»1fA0ŽEtuHm$Ò}8oß½ ½ÕkBHÊþh[÷ÒfAmZ‹Å‡ ÿ(±úï‚‘´¾}-m`ûÁxq·)ZoÕ¹†¨ ‡úG;ÝŠÿR ‰9rãÕ°Ø!’Ö7wÖB3À±,ø•Ý* òU~5é°ð³¾¨å•X4*ÌÂ}0,$ý¹]W`QØvúYŸV麯ÔŒ„õÃ<Ís¦ãnl¸az»×‡Ë¢J¾ÎÊTÉ]Yp×é sº,:7\“Åv†WŸEÚaQï\.˜Eæ]¡…]£¥X“×eá–¤¶^½W´‘®C,Ψ¾0‹c/¼ÿÙ¥¥â,SÓã;4Á9ÐmâZ‰vδÕõâéˆ×v¶XL=Ò ß~¸I‹i;i Ëâ…»Ës«vM¥ñõâéÈ.,üúŸ%ï‡Û¹ëÅÔiS›QEˆQ°ÆÜúÕ5Y¸‰WÔn@¶±˜é iB¥/y”쳨¼Qh%†Ft×7©½¾º¦,g¸]^e”>(C,’†…}‰8ÿ¶3M|ÇÐÎ@ZpfÛb‘©ëm‚Ò‰)ø.3×faRt ,ÞôYÔ ÛXã±ež÷ |‘ÐHuMزȟã‡cMýŸ„@c-<.@ ^,¯Éµ<7ÏB5,æÔ žRž'8Öšq…·¸b†ï8æð%ŸF´æ¦À´ÙófG÷²~BÔ¹¸Ð;vÕƒâÚÎ[d‡¯ás¦Zý9Z?ŠYàÿ;{oó#É‘xZtt¸ôjè°% PFA‡9Š »%¨¶Œƒ>ôQ‚(ð0s6tª-÷R}htÌQBÂþ{œÃ*=™ŽË SÂvtz(Ê=©< ÐrËÊmí½gŸþ™•A²^7+#<üÃìçöùì½g• ½.–3ª¹ŽY4ðÓ9­8´Å/"²ýNÅ]¥‹…Þ¼åø"´Å[ݧ#È¢ ýE!‹•eÑœªbQg P‚ü›:Ñ>䦦 Ì‹aawf²,p¬ÕŠGÏ"0,P &—bjºhIOߚřûðú­nÓÉ`Ï5«¿¨Å ÛhÓæ-‹-Úà~Ò5¹Hbs u*…QÑÀOç¶O˜rñ YÃèú²˜Áṯ¸¤\ÌRw9ûöe7îÝX´–…¨M½†VA€ÙŽXTÄ¢Î[Ãbƒ•¼Ê[0—û-ר¦*d!`cY(Á ‹Ì?­ž#‹Â3]¿h”…ÝrÀÐOs¸m®,{GþóU²ŸÞ‹½q,ZQÓVœ˜rŽÄ`”\æ«cda™Çÿ2›"‹X´ü%t5çfyCÛLÅ|Á!‹r;úÀLY ÷#Ô=ðx{V”YÈ1]÷&J?-µD%éazÓ+¬8y­hy ,„c±¬§˜ƒéPÃÙ´œ@†«©äÀw{™üCË6;°²pÛ,!‚yÅ ±X‘½zE>Ì"÷þs¶<ùbcš8:äœ O»q3{â÷¦[…FE›1baÚCùSÓöWÓ23)«?µÙƒ§šìÈeÚI*ny/”w,6=zÚe…Ç)EbštPŸëqá[~{ ùYqn´¼â›„…$ç6|…ö,`‚qØeqà§±EhËètá>µ—±xkyk»ú_ˆ•I`^æŽÅ7¯ §±XŒ°àñ³gH­@â+á[kŒúÿÍ Ó`ón?òöòÖ,²˜•nìóêüzo3´,– ‹3È÷±pÆ8žÅŠ*6U»#€!‹5Ìb ooƒ…xë@D”CÏb±šAcT²Â²XÛ$ý|èY¼ö=Û F9ðåœXЂ/m—Y‰o…œ¸ùÈÑ 5˜·Àâ?½í _›V9ù§&o óÒzB,dÞþ”’žyË¢6| SZÄ,f¸r±0·o~ ódÇ–°ÊLæ7Ïâ­å¿Î qPæ+`±A™*Ë,‹e‹êfbÑN`Â;!TGªXÀâ”XP'wˆ„?æÃqÕ ô•/€E6ÝKºü·†EÅØXœƒsn“5²¨‹:PCDz`æm·?nÄS‰CðÜvÐeŠÎ7¯ bQZ ±PE¾lŸóƒ¦7ßu9² Ó±Úä|Šzdd»r›#?n&8Üh™™/¨áØ Uð¦6ñ ¬ð3y ÏS,TA9Ñó™t,—íq°ÞK°¨'¥eÑІêŒúÔtëB¯+†,Î[`cÞ³@æ%cZ T¶/ah¥ry¬OJN,L›ŒÓò¼jsËb­žÓz/ëÄ_($—tÙ hóZ‹Àøc |NY䎚%Æ:˜ÒšS “iƒuøjéÊ©iŽžHö£ÀIŠ/àöÙ~²0ƒt¬åð±lê<'ìökkð½@µeÓb`ñ @Á¬o26iˆj"LT_âê6@꣌ÂkÜ[aq}c,S¬ƒZ YèÅÜ+K¨¯XË)NˆOÑ›Œ¦OfˆÆaè]±/±²è^D9‘´nõOpš©‚ê9e†éÊ´CÄbzk,ÞÊè2ÌÖ-‹î k«`4SÄs§_á\cmê® BÙZ²MVe-ûäóÊúnÔÈâ3`Æ Œ« FØÞŻKv»Þ.1‹•dAritV8¾^»I#°XãvÓf¨õò ´ÁK›0Ùb BÓW3Í ‹©[»º—hò¶K˜r/ÐüêCÂvˆÅÇž…‹,ÿ'ýÛÊx •Æd/Ïþ_›à[`ñVFTAÝz‚*¸—SÈÌáŸÿÕ~9ŒŠPíkãX 8Y9«¦fÛþ {ÅB-Ú &ª¾Èm;ìXà}×êI¤p¡¥™ÆµÚê3w‹eÿ§ ·QG®ÍBþ$¬ÿ’;~#63ÆîëµvÇQ¢nVT;ÛDí†âõž[7èØ3u¸— ?Ñ‘¹ŽË«§›Bý¤´+<žê>FÀÁ¿[ uD\÷J¹ˆÖ‚!efD]§d½n:^šR¨:QvT6`~b—Ã>o³_oIÜ-°Ø\~ʨDŠN†ÒN¬±ŽÅþÔ~jbÕÑKúŠUP:W™éy¼Ú?‹ô¬»ƒ¿¹ü”ž`Ëpª7GÉQß.„-¹l{w9­y\.ºëY·Â"6IÄ.ìåÀþSo+}×ÿÈiPTG Ù­L7ËÂ.ÓÉÈN—x&º˜ßäs†åòÀ©…HwýûR"²3Þf€‹‚ãú¶/ÂSpE;k¿ìÚ·‘ËJÄnÒe!»'Ä$Ÿ>$ IDAT,p‚¸êž…q·]•Pœ¿E"/•[bQØp÷%˜ZD¶–Èbéq¹ƒûˆEÞeÁ̈0œt r‹,Vb ?p¿p‚cY¬p xË,¶îö´³ ²0 í_F,`ã2I¼”E³Øà‚è-³¸´!ÛIº,°õ3 š!9ׇE¯ŽŒ°h'*RmmpÁæ–ÛΛ‘Á~ä›#â{ns C4 [oaAæÚàº7ê u;±øãä®ÉƒGåYl.eQÆ,Öí`r¸Ãn ÷.‹É\[6ëgÚ*ܶ²ðoóÇ ®iðÏe8†,Ö¾Ûu,B6‰…|úmg¡˜üÀµm/®ÎB=Më„|KX$Ž+^qËíßùÕY´cdò-aã…°ç0×Ô±r{ ÏÂ[² ³˜ƒk]}J'ÁšžÛµ7Æ¿éO#P, ?ÅCã H0·‹ì3 .cîT~=‡ ax`æÉgWÏÃMɈÖÓ¶ž¦²?·‹%ì3 ..gql™ÏR€:^GwŸq¸Gl›»c-T/±(aŸQøp‹)±8¡{@0gÐB{gn]ã_;²@½´s{À³ XM.{,ÈK./‰¬cp»È4°8tK98È?¿vvÞJF^Cœ ·ÝOYÔYŸÅgïÜ´•­XÁβÃbXÌ!²iÄn[FôWÈt’ÇT¨Â¸í]ÍÜ|xmFbRœ€ã2MB­¡=.’-° qØh˰hˆ…^*éÙŽEîbÅÈ™ÞKPTKräÆöâ¡ùÖ¨çðw yߘë•0g<Î× ðJ\@A2G[d!Áøaæv50,ÎÀr"ª#Èâ\Î^3ߺ¤w{2b£,P÷D,°Oó†£Vž¯Éjü0ߤ>Ú`ûw ŒA,*Ë"Ç:2GÖõéå’š¤™¯ÏùZß‹Œ¬ x= j€Bh7¯ ´”3µX¨bF,à'ÈɆMMÆKd!‹–#‹Ò²˜šîüBørQN…bŒýðäº,’›¸úõ|ä¶fˆhÆØ†Œ/+Î…Ê^ý¦à ±P¦L¬d£©\¦SÌI5s!4 j¦–Å–Eù1Ë哉ühRrR=ÇÚV‘mÐ5ã’—ú 1-ÈëÝc@€…€›" i_š©/†…œ.J‘Ç,¦ò±xs±Xku±–ÈŒêÚ|a91µY0öknþ,Îq_?xDcÆ®•æv¢ç8c,`ßö@~À‚_˜|BŒË”‘Ã-»>ʤ@L/ÍlX¬ÛL5 ùüË, ˈÇ%N‡µ—L‹Ø ¡*µ®¨`\‹…ÌtŽ.¶ømh°0æX:0Šð‹|m¦–˜0I«ó`.húI6nŒX(†,ì¡U=ÿ±ü,“_0}ê)¶xž9d-ÎÿŠU¬(Æ,8ma)ú¡•¹ÕÇêë=MGt ±•ÅyÿcÁ0R‡em,˜¶–…"ÂÈŒÁFGáBÚ §Ødð¾Ê¼ÎÈ0X€õu û(Y“ˆ9.[S%$¿ “äÙÂgcè~8Ø›ñEÿ~dè¬Ò²÷`•ZÚPë%Ûr…’h_¼Ô/M+Ò|D,Zd¿[“‰ãÈF˜é¹éˆhÅ=aà8zªÅÈbµŒý‹¯$`Ð|‹‘K‡Xá#°È xV‰,(áõ3ÜjŒ}ü“jI¡_š)ÚT z@x_˜?]4c&¦<4/æ’쪀ÅN{Š g(¿”Åè¥ôg ÊNèM‹ Ú§´kœ4,à „ ‹LeÉ禰¾ÿœr´Žþµ2ÄBHko†ï×fv?»°€•DÞ` SÊGD3o·lFK>‰æP˜.¤ÚRvÂÛ…ÄZ0£§ÇbÒ—Asþ,0Ú,ºîÂæ|IŽ™) ÿÖ Aßx0HLX¨Ä FÊ/? ßZ>`ù@LÓ>Ì<졞œ£Úë³±|l%{¯ÆYôì¶Ç".³È‚VÉq|XäÁnÇôK__ªçQ¹hù@@²"Lûys¢ÉÇ?Rd°”n®¥ŽX,õÁxÛÙcåBrN‘€x¿Üûô*ê‚)Š=clwS;òËXQä./¹ý)Óâ,íL˜~½ñ…¯#à~|èY$öÚ‹µIOÓU›¨¢tê^ˆ-‚ uÔTNa•D‡¡‹’…¥&²èô‹ÊCš†Å}]”šëYcÄÀ™¦Ð Ï".¹ ï^ò5—ÔL%, ª¤gÑ|ùüÑÍþ6äGàÒa‘GÛM¹D ÆÎ™@#¢Ô\¯½ðK IÛ™,û C®€Å¡ÞÆ¢úrê+¼³™e0 ¶,úƒ{•¼…&‹jæÑ¶\”>²ÖÛØ€ÂKçNâYȸ_r,à1¡wûZ(}ó¢´Ž|à·×cšÉ©o}ù€{KzL§’¦xw›ç’Ù„_ŸÅ¹]bè³(¢³bñ£ìI)‹0¢ý bÒÅH‚ÒZ#ù¶ÄÇÒør|m »ÄÆÏÝ;> {Ã×VÛ· ï± [ÙHƒÞŽ:ë§,v'ÊñuCnä±x˜á¨%Q¢»¡L¯¢™,$Ütæ–®Ã!;­…¸k#óýñ½\Ʀ—ÊÜ}¸.‹%´g“„Ń)Ζ6a¨?C¦ïEQè¸Â|E¯©Gƒ¼øèGɳVs½ƒì´UÛü‘ûp]µe1,±¨ è\Ù­°½¨9 ÝD–㨹?·ëÂD XX»~®Ë"ô{oÅ¢,bÓc|¯Íƒ¼Í•ˆX˜F‚‡l¢É\ql‡e¶îÈ0¨¾‹á°¬—K`qÝÎ jÝcmVኋdL­a|¨´ä+ÊÆôkI‘Gõë‹ ´ gkE=„KíàáNYx“°k³ø,1pË¢˜i®Äßa‡gfÒÈbáV6ô̲Ð5±XË„…ŽXØh£É÷­²xKýý<¸ŸeúÃ\sPYÊâ°åòÙY˜–^MMÖ=lgT bÂÚ®|-§ª(`d”°(^°ØQŠ·ÊÓu¥FovZb@'r ~w¸ÓCfp88¾˜åó¥žÍ)¾t zêÙ³Ÿž(Ç"‡!©2…«þV²¸´Ä€,”õF'¹ùNz«Á.yù©aÁ(PˆBìѤª…©¥Ø(,ðþß&PGìr ‡%RAÊ‹@­jX†lp=ÔSšoŸ2\Xé_£O–z<µ †ýŠùp¹˜AÁÌå1g´~ ãµÈB ‹¨—¸€yLK‹uÀâÜîG݆å»+±w¾+Y›®0LH—*Ãy'­ Ò¾,¼»ÖÕß0ÁÑ„ð‰QÇËwWbqO¦#—¦ºJF þI:«‚צ©¨ì„|ÄŽËì(ôVÅAJv­8÷¿]÷°5"p€‘,‚Uyz;Y“îáàl&NÝXê¥b¶À_‰Åõ–‚oRÂ|ݲý“z­uGWybœÝïîrÿ,²¯Š£075Å ±P™í¬`XwtRó¸¾Ñ„ÿJ,î½ÏQùàŽ PìÅ¡¶vE©æ5Mº¬gXD=Á5ÊŰøªè¯©`‡ ”‰ cvVõ.gqöâÞYÀÄ£ÏGt€$½d°÷ù×BÛ:Òt´fýÕŸ;j/^]ûÊD ?ì7‹83,>æ’TaúàÊ/;F@‡oÉâú&Ü7ã=‚úþ­°l`}JÒÀÂ÷‘úº»óAß²ñJ,Ä¥gÇG·¸9Yë¡}.ârÑ *Òß冿#gô§-"¯YjðÀHø1~3>¶(#ZÃÂêhõ«þ*ç ‹ócÛå”L-ÀÖÉœî‚`¨jÂo¦ê  ˜è¥Ò±¨·²˜{¶ ÌÊ›þñŽÒµ-,f‹pƒºÈ‡Xä×¶ÙêK.³ãÀí‹™gÈ0+Ç;b#µy`q±˜êÛgÁÃç]´¶‘ò"a»¨+²8½ŒE;ÆbÌÀãopM»ÑˆE6ÊBöÇrê£ãY¸>yxâo`ÞÁ`{1»Aš…ÆñY –XðA¸^9Àb~“,Ê“ÍüZw¶~§Î °˜ÑÙÐÞ¢%Ã@Ûp[,®)hß)4tÄ3¿nÿ¶,pPvºò7Àqàm³x{_ ªnª4°€ý%®]G´ïSͨ‹Î†š‚ê7Ú^¼½¸ö¢r, ¢\¨?×–…³1HXÓ %"•Ö~±*–ÙÖ°‰w. ÈOÄâÇz‹0íf±XùkR…¿pOYœ »eëo´g#³Qm‡Õ‘ˆE]8—O<Ç_xzÿŠõX’qgÚ.¨ÏµU<±ˆÆ¼‹¨5ŒX4°)Ч:ÿo dálOº6_ø[6Æb㯑Ñö%•–¸¯Õ ¡q»C,õ¤òÁ˜Ë˜Ûª@‡)`1³“ö·,ÜîÂÁ Ÿ°Ö`…øêDí# ¨Ý ¯sk÷Ù¢›¹õŠXø-]¡eõ”TC²'¸qˆLÄB¦Báf—U³–Å¢*î! ØÚF5¯ˆ…™¨åC,`aα( \L,‹O!—LÀ9–ÅE£‹±(-‹ö3º-³=¬#J×¹,–¼Ê‹ú‹×3¬î8o< ó~ÛÀâÐ0Ü—k<¿ù3•+ª# Ç¢µå"Zöö{ßK _ðŠ ±þ9ׇP ‹#½Á¼á;‡€ä1 Ó~ p„—ž^:©¸,EÅQpÐÂÖïÄb=±vVìy¾,š¼6,ôTצÙ[ÀB”a!^/±ˆ6פë™k^ ]jùP[:°@S!Æk‘!‹Œ«©¹þJe†”cÁöŽ…I²¨rÓf‹Ç¦\€N®™Ê¼®rX¾&3C:#ý˜!‹µ–_ õõ†…ü€Ú‹öàsbYଠÂÈ@T8ô ùÂï“‹VTœe ½öÍРÍä{çÖ^Xô" êL5s,ìFHb]²)ŽrY^:Ø9W@Z°‚®&‡òUOÊÉÅÐjÍKâÓ,p¯9ØíIAwñ‚ñðr…"SwŽÅÒn„ÔkgûQ*¼ô#kv©a´×V´, Ån6üò/ªk{ ܬ$8’5¦¬ÈÖϲ!ÜÕ]­l\êcÍëg/ÐCë@«–4N_&ð_a^>á9Ž=iˆo#¹'$: ‹’I36®}ô†Ö´lX²zj—_/´úŒ1»~, PB€ýµÞð?Õn+ ëµþ-üí“Åcï½´Ëðw#‰M†a!XјþÞžÁï¯Ì8TfòEG.bŸ*St~þf2÷êï[z¨Ñyî×{ «5 ]†ìvåÕM]%mÂBZ+ h"þ/wLØ;ÂÄR¹ûÃ"YS1ã (|Ëù2^Ïw,`eÆinÍœŸjPâ/Û¿²½?*ß4|kM£¹uÛ>YàZÝα˜„F -~ôDùRsÿv¢N:,0’Ør¾X¸©å³‘E0|ößèN’ïdåW|ÛíÅç.% eÑž¶nU§¬FAÿz¸tF¸í AAOÐܤâ[κ[IäI÷;› Ų sjÅý®rMîXìöž}À˜xÿ¤}bñ‹-§´±Å› v¤K äŠe¾ºü”{dÑ ß•xÞÐF,üÁ²d½o¡(OÛC’÷ I?HΞHâ0¬8úY¨ßßýAÖ¡ýÑî—Ü¥@•ŸG†Yýze[W«Ûj·¥ë‹óhc'ƒGÝšD…ñ‹ôcÜô~7ÃÂÊ%MÌõűgáØiäDÛžÅð"b¡p\û_àÏ¢3‚ºY|ù9×Ï"ÊmÍhˆÌ»ݘÍÐòjŒÅx{±OB,xÛGg1 l»;V²›”ŠeaŒ¬¿ ,²Q¸ž×æ©çÒ³Ó¾_ú»Ábš°ˆ÷™ÆLµ|+ áøn°)‹Â}¶,Ò Ð‰7 \A[Àý²n/œì7 ò5eZD-¬ˢ»ÍM`±‹<2“—ET.¢qÀ …û^²Xëªð,Vüre`Ñü$LÉT±ñ—Eã€A‹Õ=cqŽ©l€…ëªÜZC ²`‹ŒGˆ¸½Ècö~7Äâ:û_*'Èbmz‹À‚±HûT×½ÆSÐÅ+b‘èî àÞ ¯Ç¸I!1‹oæ,:c­ óßú>á€+."ºÀ°ÀFº³nvÝdß’‚jr›Gžk—³Ð ‹å|ê±HžB1Ùnª\Ü* ý˘Åa¼*ÁñŸ ;ÈZh7Ù !ÚÎXÔͲô²{±,~³XÄVÆÿé.âÌÂÜz’ÐÝÆY€j2YØW•²ˆ²ÂñŸ-,¤cÁ‘E1ºGjX¬ߎrQÑ+ ,ä‹Ó0·úö)†H)V´ùõ"un½ŠxußT{Q\÷Ê1™kØßˆnÛ~©q,(è 오ÑîÛ+¡í+·ó±ržýêG Õ°`TÂ8ücXLíí)Nß ±8¸î…£Âµ&û(E,\ëÜä0.z,R×JÇ,àeÏÿ»6NÂ;²ñèºã?Ùëv9 2|9î² ¤ÉòÞzŒE»‚÷¾ {?ÚtÉÆ1©ÅÀA·»EhYZ*~ƒuäª,H–ß ³ˆ[³R „ÓÐÒD‘#û,Ò=a^â#m –Ä/¯{§ZéèTÚ¿À?”®xØ3l·¾ ‹‹ð Î[wʅ݉‰ÇV½Àbµ;‹$èzBªÂ®¢¶jI—Ci·ÃˆÄ6«»cŠ"c¥<Ü ŸˆHÆX,.g!2hÊã~v¬>NXD[äõY$‚sq3X¦+±ö4t9`¨ìÞIÊ;ÆÕöûœnÀõ%² ~‰ï§²¡É§æv<…Ú¼ÓúØE`¤”URmeVrÊ©iý¯!5 d±ùSzJœ„n,µ6fs¹G× ‹Í‹6aÑ‹³ÎÉ ó qð¶¥eqŠ% YÀo’o›kÛi*¯vB©µ›¬ôÓ6(;*ܽÆX€Æ§ÒÁ}> ŠÉÍmEr,PË8Äâ´}júYÞÜ#‹_CG;,L£V*Ñ<ʋҴ~Ð)ÍÄ™Ã4 X´®OÅvÝ´ð°©ï+ÛþGe¦s3<6½1°X@•Ãö‰8hó*SbØXûöålðhŸS¢~‘/ìÐ X@?ÃQ/°ØèÕ²ªÃb,f¦Js: ]?DÓ…`–E¥ÛG|*ÙÓiÅØDŠ«õy·-)‹y3mY+jåY€¿6'ײøF¯N°\Hdqj*7'¾œ-É L3¡é\WpgS8êâCö´0™ª 타òmY’²°msd‘×YªEfX=ÓÒ¶çº>0=ì¤ ,fšÏ‹uqsÚôÂêNÐ{“=d…ГŠeûÆÂ”÷êw)çÏsf p›™ÜAÄ3/úX¼or™ƒ¦‘Y0<ÇN2Ÿ°°ÊÈ ëØ}H,ž0Ó®®i©$WùzZ³ìþ7ý‰Åd›9†8Bôg µ¯–Íp͵í3Oо@•eQ>šXÄ¢ÀÈT8þ7çWM«UkÁÖϳêwðÑÓ-Ü” ‹zZz&ŸðÚ² ˜§,¾`ПRñ0F?²K:§õC¡Å/h•Žü¶æÑêêšf¼Ë°ø¸g~jXGšŒ ¨ÊõäYð×È‚%²˜Ð8 XŸ%Öva—€mû+¨G=·–B"zT0´¹ÁÐù7)ØvÊ÷9ä¼È?‡×YÛµ'å&½8á½ÏSÒ„8­¦ÛÑ~î¾â²ßMÙoÞx内|2ߨ!êÔ_™¬7¸Ùñ¢Ë‚Þ²=ÓŽ:6¦~ÝîÆWnZÈæüNTwm²#¢3íߪo]DÒ¶Ã"'|,‚Öï™ ˜‰Êžï_ÊÂ-‡àBƒóKp,Ü÷œšÊUŸÅî[—ß—lg¯ð8EeåBµ¢´6Æ´S•)ͱ­Â:fáu¯{Úr:ÐôYÈd5Å©tëGЬøY¯m «ò²ÑÛ—~_l/^¿·í±€&¾ééeá4«ÿI{©uŽ>g™äxÔ± ÓêÿÆå«¤öœ$¯ÑL‹¯,œ¦ó3wLCî°jE±µZf;U»…Tc …ŠGÞ—ÒâR±,À¢RËÃÎo.Çì…(³ä /8änÓNÕE ×ÞÈý^IJ‹J3/ë²°ù‡Rà t2+üÚt‡&vUƒßljßRŽìß‘)!±XHÌy·Žx뮿Œ§ízp‚åÖoÙŽ—+5öC$]ÓºVØÅÃMÿ\bq®`U¦›ðv{è0’‘e~Kèú,pmƤ¾»N?ý%»þ–ïØ\j-ß…Nû9ûÄõã…`€E‘¦†×tkp¸F‹d½ø7ð3M£àLºI›ïÂâÖdXù¾‹àÚŒaÑ1ž!û^I,b›©“„Å/ᇈ6j÷Ì¢ÊçW»ÀÕqA,xÊ¢µë¼¶\(ˆ½m%e¡gű û,ÇbØäà¶YÔ—¯ô§â’É)žA‡…,Nh)Û‹Wêq¸ûr˜ÅŒ¬¯ÿ^ë¨½è°ø»ûí²h®»Õ}3œ uëˆcA㘓¸\¬\±/ü ,jËö/ ßtX¸Š|Û>ÜW½½c1õ,Šä×ÀBè%¸ÿɳpc$`ñ£„…¾gWÒú·Å$aqîçX¼x«Ü–E³vº‹_Ø3öÊ·_%vƒTG^Eû“‡AÄôI°iŠ•›;…ñ¢a¡#í…?ÿNX «,x÷†&)ѱÆBŸ ²ø¹fm\.ú¶¯²øßÔdïX †qìo¶Û„dVÏ íX¸í€aèG,ZÓ§þŸ­gÇV‰Æ¡­cq†G»,ŠôñwÂb8c_é±Ïá_´q2uÎDן=Ñg,Úçâs5ksùü§š‹lÍÐëÃ]¿Ñõ bzÓfÍ´a:» Ý SŽàh¼&¢Ä¼jç$`q ,`K#ZÖo³Jåè7a<ñ,ê¼}öÐd—X-*Ëb©ž‚1±ÉUûM$±¨³¯ EåâMî¿ò34Éú"k®Ã"UFô2ŽÆ?A——wƒL]ïXœ tEPù±a9(°SÈv!k ŸœÚNÂÛr1c_¢ûºd/2S+'kqÕÖÉÿsQ¢SJã­+m±X¬zyë®MtXð!…²Ó__ÌFgFV°‡qòñ¤y>E;1`±iø9²¨€Åì)²¨„þM`¹K“­F–£-Þ$bÁ‘Åiû.6Ì0yY´]±»ÊEgAæU™ X Øs–‹l'¦™Ïeû”áhéç]|À>ûlŠË”&-Ç ÙZJXÁ&“CËÂj›cbÁѬv‚/”Ê$Îüˆo¦zy¶C°c1‹êÌ7Ý»° £ † ~8k'ŸŠiû‡`×fvz) ˜­y‘,†uˆ‰Dæ³~ˆI:ps,£ñfÓ¶¸ùî“t€J(Ê6§AÌù[îu‚2ÛiFô©‰ zà¬"L—8_Pø2tæ“»…_n ‰YÄÙ„s”(ºÉ}3À¢'ö dÁüœäM<ñýû]î,lAœõf…Ö¼X¬s48°–µgÞe±ŠYð. ;¥š%Îió ½KÜÃ`{¹ÀB¥;l¾ÜÅüèyÝýÕlÂ=ɉ…Õ?6#,Ìø·Ã‚÷§ÝNW%ÏÉ jÞâîÎ…ùÚ­i8Ú;»Ï!÷–»³ž]‰íl°\̵þoÚÅYû7Øcg° m‡Îè~ðÏ¡u9LÍûWo¿%°ˆfÆ]}-²n?ýnîãao5«UŠÚÎ^­UÒÚD±‹žÖ8¦ÃBG,8d„Åï ,bç“ÚZE©€È„éggé*Ñ[ùâYDûJì"£úFÇBÐ6etª$M°pö…éÇrP¤Ç,&Ä‚¦ÙF/l••Pzz,ÖæÐ¡(ÜãYøiø|v…ëvÇ¢. äà uUAÓdqXÃåÈBànŠÙ,¨ØAŽ5£‚E¥a¶Ö/•›FV0v¡±É ‚ÀPgmŽÏ®dÁ¤ÂŽj͵[Ý­X€" #¿™Ý †á†_p?𯉇Ï?ãëü•‹Ö”ö‡øã-r¥,D`¡ Âk²…hØîú­E2²‰« 3€Á–¿Af0ÇÕùs½8,Ê|]BF¦–E+žé—íì#í´iÖ˜ò‰o‰EmCä²(T5`qx%Q¹Eà"ö+Ã"s,ZP«Ü°°MôTÏ– ‹ ‹’ÄB=f¦†0숬ŸÉLêbËhX3bþY¨6—‚q覀ÅâjV~…ÿå[œp°e3,°®a'ƒ–å2W…eaJìUC,ª¼oneίtöT‡Eû€"æhõ‘©L YHæÜÃ…Д×Ktß þFXÔüaa²FÁ³…) 9Uâ¸-<‹…e‘Á4ß4°†h£ˆ^qÜ´ì |B?psFÄ‚‘s»4,zJ•{daÞ/3, d±\¬j^ÿH7‡ÅÄô/V’ìlONj“qP§:mU´­ ?öÊÔ™áÚ‹”é©4Œ´–¦g”ɺ'Aìaa²:e¶ÂͤÒeWKŒ©ûø€Â[Á"ŸaÁØg¨þ1ã‘ɹ¶ÊøV^¤:P[€Å“¢e 6Õ´ÉÊWÄ¢€ó†bpÞŸ…U± kÊÕ¨n%ØüË/ñ„©ò,*ýK8Æø»¤˜ÑV›êêóÚ…O §8j3ƒ ®NÚÒ±O"YëXhšË5yg¥©úˆX¨çÔèYG£¬ñ}å&ΆÅgÔPù œ—˜´ùRkê/†Ÿ ¥¦«`º_‘ BH¹ ô÷†®6¨ ¼a:›ñ†ùÝ´Ôî/h(mï@,¬‚м÷û—Ú‚õˆñ±ãÁßîK€…dï³§˜6(í—^‚ZŽXÀ?ßø@¡xÌoK£R>6bcÿiqhq3s³›`¡O^-(ÉÉÚ*PMÙyµÈÂw‡æzj~æ•FÖìÃÇè¶¥û$YxOâD·‚GqÔyµ¨è¨œbÆ ÌDÐù(íöˆ,¶ÔƒúvæXו”Eòž Ëjˆ«]PâV@ý,¸ýD dž*Z6ÜEžÕ0˜»Äß° §ÑJí¶á¨äð)íúZˆ¥‡e‘ƒ¢Ô½ý’Ôõí¿³Šw•v×KîÖœõmlÿôVbX„]S;LøBÑ,|•§èÜÏp˜Äm$Òл%‡ÚNÔ§¶ m;ŠÖŠ_U%wwbXpÉí—D¿ `ì€Â7÷8VhžAlVjè½W„[ãwkÿ]¦\´Wò»ºC1,rð½ã¹ ZDë–î_$°0|`?ò ÝVPM×NÓùÍü­“ü62<ð³bƦŒ-ðK¢N`‚+ Ô‘ÞÊ´€Ý€íí¾µv¢oW؆÷~5ó3âì™j騱?mî{, —¹•ÍTw—Á$…û€vvö ùŽÑ®~Bİ(³$¦º»}ÈrÇ)}{u¿ƒ¸rýGl1+îÚ>P¦.:,¬‚ß°0ïôŸ…Þ"W™A »GܤÌôi¯´>*êá ¨”…íÂénE–žÅÊà–7*3)[¤ÇZ-wÿ„ø2 ™hŽi CK‚²÷,:AZ¼€ùÄ‹Úމ#~»üZýªc‘;4˜¼iêÆÂ“v‚÷xÙ…Å3ánâYÔk;Dà ›*ì­¬bár;¾û•±áékÏ‚»›øEP¨ؘ™3œÿu(m±Ü{#q¸ÇYhšD͆X@¬ŒØc¡ÄfßY ‡@•°­í‡Qüƒ„,Ÿ·Yû‡]{ZG.·Ôì²ØuYdC,JnØÌ#ÿï 3Ûë°ÐC,ªÿ™FàrªXÄ?|gXÔyEðáU) ,Ú9ûÍbdPA‚f€Wcá?Õ’X¨Ïu¡èzÓÅî5‹HŠÞ4FZ¤[×ëÍ,Œ/Ä´JÃwËB1 uÿYˆÞ‘‹3:zæYT¼ÏbNæÇAïîXL÷¸\¤îkbà •G,ÂÀ´ËBpw¾cÁ§AcY@àøÀ÷Ÿ8CAòsË"˜u[-dœ¤,`Šß>A[;Y²,Òs©ýgÿ ÷ÁëÀ"¬ºY9±8HYÀ¡ö)‡üÚ¹™™»A½¶,ò}d±Æe ;»3ƒ°ÇCSiš»!mÀ€d|bY@­(f¨­5¤,༦8Å€ûÊÂT\¼ãZòVXZ`!Y±0UÊŒ™– «ÕdÑŠXXŸe!Fº“³õÆEÙUÖh¸šs®®„]PˆXTÅ¢q,L¸ÛÌ—ö>Yu4ڦɎ[Ë¢4,Z¿jïÌÖ N X;‡/ȶ¢üË¢„^F=ŸØøJ¹iN ô†º2õâÄœðèE¦^äPGZØÑT/«ì~YÐ0iÞY^X·š¯Z»ŸO)þïÀÂ.à7 XL<‹ù2¯‹Å£[€‹‘añ”‘gpËž‰v:EŒ LLËž–ÅÏÀéU>°ê‡à?#“{e‘wTWËö?i­áËUP¼þV¿±®Æ+ÃâX3 î ,fuÆÄûìEFat ÜMÎ0  4·ÄÏÑ «ÉòÌziåÀ¢Xx÷{e‘¥,~ù±z*‘…iË ËÈK]¡ȪfEÕ2 ú >1ܺÿO‰í¬ÇEaO‘ * ‹…5ÓÃ¥@ˆ„,¦Ô3ß ‚p˜²°1 ТAè0“üS8X€aiFü…&Âfn‚4Ü %Ð,„=‡-˜h=Èð›£åñgvÑ”JW܉Èý²HcXÐeÀÒŘóÆ ,êNÙ²x/° ¥Ö¤aÅ|*U`aúêê)[™)ø!bWL+ÁÐfŸX”dq‹‹}YÐ »0Ó2]Kï.c.0ªXf¡YŸ5;kÍt¬ý¤±;¡ $‚X_Ê{e1KYTj›(BÚ%ÇÂËñø…W<àOne®;›¥9Ìþñ:/Š _FÖŸýdq¢§‹9e«ò{¶C {uãmx$x–×÷·±Ys‹ìaå|ŸXh} ÇýÁŸ]ÊBŠXÛgcœD?Ãf2ÃAeé¾ ÁŽó^YœÆUñs¿ÊiÇ o_Ñ=¿)Z<+2:”·nxÿ,¸ Õ%‘½í½±ÀˆFÛYTv¬½ö,ax“) :+2Sùd <ž —!‹&ü|o, ÉdÊtmY4¾=¤ªt{“$ıˆ–¤a¤¥C|ˆ?Š~ƒÈ¢äþàþ±&f†Íáoãrl K< 5I Å(ü]¼<Cøà˜ý :UhbѲ¹?x¯,C,‹’‚Ôþ~?­¨<Ó÷ibzˆ,ª¸y€NÙ„ô6ºG‘íÌþ±eÚÕ ù¾Mp·ê+ži‹øïØò¤ó$¬#gáû½°ØàÞ‘|˜Eÿ˜dΞºèý—b!vN†ì~¿‹³]Þ˜[]˜â=È¢/ξ¾WÈug×Ñû}«øQ™û~åbSëvg¾ÚŒŽ ­ð«%c/Xœ›ÿ)ÅŠÅŽ–£»ºb]Ñ¥k‹zo,ä‹ÝYì*ÝXQ—ˆb%ß¿S,®èÊײ4ó÷Âb¡ÏÏ«7Ï¢üáüjçß;‹%°?ñüpdÓµëÊUw«Óã¾X ž2»aÍYtâDÝ ‹½¨sö1Ëo˜E?Hé•ä^X¬tVçe×íÞåXltÝæMqöGÞŽÜK?R_ugÀ»‘w,‚Ü ‹Ñˆx÷+÷ÂbxŸš{—½²QºgyÇ"È;AÞ±òŽEw,‚¼cäûÎBDùßGC/ײŸºø[ɂ֎=ÒæCÇW#ÛŽ9!Ò÷¾³a ˆþldXðø—ã1>Ï‹½f1ïúØ·Ç9û žyìí6ÒØoaýí®ÚK¯ kiæíîvc‘§,hQuéšc,ª½e&Î,:ö²¦}_¶²˜¥,HcXtâ„þµûPAåÚOY0޼ïÏ€Ú, 8° ‹_㙫KW›+0–ÞO³À"*3Èa`Ñ]`v,ð8`ñU‘|mø|OY@WÐgQ_=‹Xl¸¿jþ•XtÔÍÒ² ²¶W,4íŠkäUÊ¢|j¯ŒF1ÞZÖþ¡c±€Aïu ‹ß˜GäsdAemOYF,ζ±P“ÀbÝiL†Ú‹£pίÌÙY„=½öIR-5¢ü7Ïqo?EuLù†XEïzØ<³fÏPFæûÌb…Ó»qœ|E,t 1?‰EjêÞþ(°xÝcáÊEb™uhãóB¹Xñýgáv4ý}lD9ͳ†Xè?,ð/žÓ-2¾Ê…î‡A;8¬®u³,`ÄÜañcÇÇc]ˆ”y®R7¹öWÊÔL]¹àbamö…3¶Þu+ÃâÕ•X É_ŸE_‚_ðfRèb­­·ã>±€²°ØèW¶láÑ1“g.ùf˜¹- ôßN4Äš¯Ùô>±ßôEÊ|Ï'ÎkÊÿ"DÛYœa±‚“f”¯ KÆKb!¹V± ¼Üð«*_«}eýÝËâÜà@Îk]¦âÀUĦvvßǺMÈ"nã 7(îFí2[»è¬ûÄrŒ,*[ª5¸,T±0yÃŒi¬ùƒÍ†qìPÂ,ÓEf2þs2®ÜXÌ‘…Tlÿú‘…°,ÊâÇb­ž2Í+ŠUÊ›BŠ™S£0ÕÇíC;s!¹µ¹7‡KXͧæ°Uñ׎4+p”XH.§RYÛÆ½cyab•²øZP€ºhÄʱ˜èª}bY‚¶¢‚ )Ðl¶¬x©O6Å\¯NÌ98p#ølZÔ67UÃBÛ=H÷‰Å!7M²à˔ům<Â¯Ö§ÔØMtiX̑Ţ5,`ÝŠañC} ¾Èbe¯ì'øˆŸ ¢T\K®—ÀBTûW. ­OXœ@èƒÇLÏ~æYÔ|¹ž ¦Ù “[l/ª8†á#±PLLL†+ÚZË” )ÐÕà n@¨¾DoŒø\гâó÷‰ì|,ã´“Ú1°à¥ž•›ÄÃ¯ŠŠ/ë=hÓ¼` ÷ÒÒÇÍSöôcnëˆbØgàÀŽ,êlÍ8²€îİx€y·we¸æbÏX4À¢åŽE=Ç-¯ô¡eñ’å%o>Ö–ƒÃ/•ÝkæOíûn&bï‹ ]fSmóŽç3®|}b±˜5…i;[æY@z0œþ>œï¼±»‚IÚHŒ2V[ç´·CKû+‘Ww7Sb±6wÈ‹ó¸>ñv¦ûÄòœ#‹)±h ìCSû{`Žwž…9ø˜ý‰Ö¯ì>P^ ¯s C¸&+?"•9¨Øÿ§ “î%纵‡,4{ŸÑf¬°M°¨‹gÜtSÊ–“/0óæÍ ‚’¹;I—ÅÖРÀZ õ!¶œ;‹÷ŸÙ;(¸&ë‚ÊŒž‹ب)Õos¢üwe›Ñ(ÊíÖ­:nz<˜¢*ýi_Y|ˆY˜Âžë^0>˜úSøH5ÛcÜlÛA£}0ôÓ‹È“q¯XHŽ*®m45”‹è„÷yø¼@íy!¬1hzÕýû³o“-‹]ÅÃçuß‘0`ÑÛ=¾AÈé‚bäÛ»‡,:.±Ä™k±€æ$YhŽ7ö‘E1úS‡Å–­%Á{»ÇB>f¯ÏÒ]ƒbÿß=d±åmÇÚ›tkº£ôÌzȱW²I§^©qX„=dQÿG»X'Ñ_ºnÿ¯Ó}ëHË`:v÷ýbñÛBëm›0Çk>k-·°ÐC,Z&šY"½û^±“€8"Å6Y'ùï³8¸0w·Ü ²_,Àßh×Í×/®ÞÁÊö¥ö‹´þ»nžyÑï'ÞRö‹Å/ ?£¸Tº‘<Þ^ö‹ÅUä‹ ïX¹¸ü”+Ê;A¾½,Æövº¾|{Yܼ¼cä‹ ïXù®³¸Ê8ý»ÎâøòS¼ì‹«FÕÛ.W ¹µ,v›í&W‰.ñ]gq•m~÷ÅÍno~•ìí! ~“wÛ¢<íÉ®,µc[´÷(ó±ÞlQ¶Ý+‹t·è¢s‚Mõ`L×PœÓIãŠ.k» —' ·è4o–Åû‘°ûÛÂ{·:iapƒ‚P¦z,à2× Z_Ó°¡¼³’”q=õu„_á\Ãbåõç_Qï¾¥h*U2­è|Ï‚îDõ©ÿC_R.vOüÍHìÛ¿ò[–"bas0ÄÂF¢þ‘éBrwËÂ-€%,ööâÆbz†"ŽrÎGÎóá¨\ØÓ¾*xÄ‚>YñÒ¥e‘,Ëvï°Åæ0e1º„ç冢7bVBcø5ïA¯ÄÃOXè6ÅóIÇ?–Âs¤ioc†XX»¨6OëÈåQ)bv¿Ãhí}~éõîR¡ã6WÖ~]ÄgH4ŽYÄ…ò"¾Sóo¢»&©HYˆ„ÅQÆ—møl¯ u.ßÚÈźòXGR_]j¶bÉ´v+ Üã×KÔÔ±à—²PŸ£9fŸEtd ßµ# ¡c(§"yþ»ÒÚû tYhÂgYØÆg \Ä×õY¨ÏmçØ xVÄ"½Qt›;Â"’XÀ‡!z@»3ÌöŠÁTްH·»‰À"¬AÛõ´™ÉÜ˲8Ò[XLá!ëk³èV÷˜ÅÅÐ9šNyˆЀc*ÿµð,6þ‚îp1n/ ÉÁ(YØ-ɰí¤:A,à*ɇó‚u$[GÖkoÃâY¡ ÇB¹=Lú,â±ÖÚ÷SžÞJÄgR¹pÙÅóãQú,Ú•jµ:e›ùx~Tv³xñ#ÿù_ðð¶ RO…ò͵£†nqü `AO_ê|+ _ñ¤.‹³øî«hæfnŽ÷BÖ½/í$añ<Œèȯr‹¤;¡\ˆÑ±}Ì›QK°l³­,¼àI±yZ”»,ì‡À"Åv娲 ‡ qNw–ø×Ñç”ų¢Õ¡ŽT6e±ˆä±8µ=-± = Ìr‚Š|lF7Ä·'5¸Y`³¹u^½ÆGÓŒ_xg_Pœ.‹Ø Þ³À;pg~'Xàxúe;…Távà Š?yÜ'röP;¹½ýZ­"õ°€a;²¼Ûu¥ùË„þçk±0µû«$ßt·Ç(wÄbA,& w賂Õ=øFɇòò’4èð»t*saK À6ËæøîS2d­Ì¸ºfI"¤Hp,Â]}{!Âxȼ´h‡X\8í—eAQªY´øw…ûRÚiÙzf Ã)?hMM,fÀ‚Óï %lï·‚;5,Ó¸}€¹v‹©²øãhÞc›Ñ&”$Ïs—NÌ·°˜ï¥Ž;e5Èb têa‘ãë ,.¨Ü-mˆÅ©†mÔ+ت•·ÊæXLéw©9<ô0b!™¹5$l9Ÿ™1U=¤³ý˜å.Ùø<†,fùQÄ‚jÙqÒÌŸ‹¦ðãN`±B¬/FóV_±˜£úay¨'ÀB€[K¡lx3!#6Õk¼SÍh³l0»g¯Ú/QIZ8.Xy=‹†Š§«úpÙã‹ÆdíµyP‘ 3kfñjœECˆS骉cqT­&èï¡ì õ Zá¬åXÈ2aqˆþMrõl³jÍ[„,6º–Åf(7,6 ‹¯9ä^‹•y^à ÇÂ.ËâXlņ®-ô0‹SÛ(Œ°­°)€õ š<¦A‡·²„ÄÃ>î¸a1}@§LˆÐTØÀ a•KDí‹)²0/ùXVÓR°>ú¡ Vò|hþ}^O¥u®291Õé0ƒZJ傃Óxùï¨Úš–´1 ±ÈE]3¦- Y l`2ƒT›Þ ²`ÌÔ»7Š”çÄ‚# 7PÃvMRe¦rI,`à”•žEf†òè¡ ›µ,k,}ÐYTÈ¢yœ•› ‹öìfÎì.ßHï\—_`SŠ›yÊ8꾿1…Ü4›ÙgÈ";Àæ‘ÚNÅòæf-õ³v!z IDAT X0ëL îÖy=<ÖâÐ]Z-²”ÉB'®ñTŸʳ ½éKnŠX¶ , Ë¢8;l ôM±x‘W FQZ“Ú”Åik’t”kë‰,*t”ňæI¸makYHÜ^}M6q·5s{JwEèÕ ½g1w†ÅIÊâW9VÆÀ‚SÏHòcËâ÷ˆE.s¨êÈ¢™~c¦©Ãbž‹5±È$lkþ"o‹‹–}lÝÛMŽêLZ?dÖCô´}ê¶2…¢÷Pš¼3p ÎjÌí}1dG¡¦ñ,Ê©.Ìÿ¦b{b…!°DP= LÓI©XGf¹yŸbåëÈ8væºE“WÐû*ÑN±)ó&Sü%±¨³•äèÎÄû90mpk£ ‚¶™7úQˆÑNm°-]þºy ïUD¦2z›jROö‘í³ ¦Ôì?ÔÖK_„—àu¥ùRÙ·_fô˜zBCï†u¶Xó, ]cýÒ²0“LùrÓØ^Îà}òÕ±íG%<@N«'†EÕŸ¨+™ ¿r9©&k/*ó#'šßbéÎ!r|Á\­ µå³Hÿ(Ÿ?1ÝØééÜ0(èc“«¸›bš1‘<·ÞÁH§âv½Ä•àS7¾Ã¨=¦(›æŸÒf}¿bašÓ(ë–šíÏ€…*"_åº~ÁWU±P˜‘Êúµ·¢¢K<ž‹P[ËBºä> $±§÷öéôƒ? Óbø·§^@$»˜™1µéª&¦"‹úË XÀM CÕ´ñ5庠Ýf¤² sûÄe¬²ínYkîëzqÛêI†Ãn¨¥ q™Í¼ª1~YÁ×ß"ùýê,¦ºþ̤Ù Úâ¶€<*j/Jñ€h ¦ E¯!T6?ÈV[0˜:5]²ÝŽV—5$IH!”¾-¿”E'ÁŽÀÏâ]îeú»ÒíÆ冂 U”ȇ5fèhƒÆ†8iØ'pZ5µ9/àŸ0*´sSZ]|­cS²Ìh"Rú”ìÓÂfàŠ,‚E€¯ŽÖ{n:°U‘åYLa4}¤aâvÐôš‡C¼’K”„ NHÕƒíïC›õä#ææŸ±¶ø|…/&ÊÕ®¾ý¦°v $ý“ŸîyÅ Ö&bͤ‰ÅAwÕ{H Ažž¸9i Y€û™ˆÐLù ?Å *V*É)QL}1xß®„rÚ^ÅûXÐÊÎ=ÜKšëHyK«ÓèÐf>ò´SJ·Õ0sPàH,Í0l ƒð>àÃEâ…é:/3ºø¤ß®öGÇ*˨ _b¯•{Õ$å%¬­KÏ‚þ;ú.ÂÉ(8¼5cëph½ÓŠ(©~¥M¯«ˆ¾l¯‡YdCÛC°uV†Û\¢¬ÿ{ûÉæÅ/ŽùÊB§èKiKKè—©ØÀè£p‡vsº¤¹jcob{½P¶×ɦô>·ÙÀ^Ý=¯‚ò¹ˆ5©—±Ý­/ÝÞdµÌ")R“»\…õè­χ÷¹Žoêüd¿®±3mO´ò~)‹bä—ƒîáµRÚ&'¶‰àh¥õ#$nŸêôXë¸Ñ «!ý.‹Jø >‰ëÔ%,Ff×w †ÅÅ™³Ž+]35uƒ&é ¹ûT dú,\[ÓþžŒ‹¶³Ø¾’q›bXÈ™Sa•öo“{EXዪà`áì²ø—"TðH…¶‡6ÐV ‹&s,Ü‚JÉÝ’®ä¡3ŒH%‹ˆNÎ{G†Clì5‹Y×ï2)AÔ ö4HŸÅ°ì3‹¾7n«%È|Xl“ö{ÅBD_Öý&Ü5§;Èw‹ÅÀð¬þ“oõÍå§ ì-‹D2°½9ºñGî/‹i4Z(+qãÜ_ìA( ¯ç½ßÇm8®-{ËÂL…ø¶Ÿw 1tÙ_Õö íW»iA®"ûË¢"“œÝø÷—Å݉S–}kYl¡v%q“Ûo-‹Vvçúï,ÄØ7¨dr·Úsj´ç¼AnÊ¿ç,$ù¡¿Vy}qöœÅhˆ]£|î"7ÀâèF²]š±×?¤û¿®¼}ÙæKxc2îø~ƒåb¬í`„“³Œ|ásÒݦ£aš,îÿ)¶±ˆWí%¬Vª‚G‡XÔ±ˆŽ 7Ziõ•X¬œ¼Ç·@1‹nwÓ ”¦Y’îþQÛXÌc+F`1MY,К$]Êq,â¡QÌÂÝ+Mð8‹ÚÙ ´|ŒE©y`Ñ5¥Ý™Å+°]g1KêH¡ÛÏÛ ^ç22Ëã›é´Ž¨b;‹§;°È:,üšIUÌ©ÕÄrѽõÀjì ‹ÅvyRGàž-°x.üss-ygèŽÙ¸ŒÅ–¶³.ÆXørQó¨Žt†§ëÎUÿRŒ°8¹¤\têHŸE¾žÉÐ^@:·³xî’ UµÏ‚¢4‚®\µÓ$WëÐ4âhœÅE‡ YœƒåÑ–¶3a÷ìÖg Ì5C,¸gA»4}èWÉöþu•îD—ÉUËÀBñ#ʃs†¢Š 1Èš&nGdM7ÀÂÁñŸ – o)…^Ül˜…õäÈm¹ÐU‡…P³HÛÎ>‹á£,äáÕXžžâô˜¸åÀÄ"f5ªÇ¢-ºí¿«#:£<Ÿëæy|Õ:ê™f‹Tú,`6ÂâÍì*,V–Ź?ÄMSÏàŸúÇÏñ_æÚsWdmN‘³†Y¸{`sQù4ÍU`q¸……LXЀ|„…Þ:îDw5[t#æö§è›Ìáˆ\į=÷s,¤cA~æÚ:•öXø{œ8êr½f`±c,L®RøåZ,౬8×nÔ7ñ,°ÚÛ¹8GØŒ |§‚q¡µg±‰YH{ ±£,êSwÎ#:àF–ÅÉÛ²XÁþÍt:Þeq,6𡝾ÊS*bašnœìq¨6Im= Sñ$]bõýÂ6%踈,\ÐÏÖœéX´¿GA¨V¦®/Ëäz6VGLßcð°8qžïÀbfY4) Œu », ¢糂м(ÏbÚc!ÒY”žE“•b…aÑørÁŠJÌe3 ,$v5?>›&7gx&êå§Óª@GïÏòagÀ‚Cî±-8ÕÞkXTî¢(×™bï¡ò_ÓÁCl3…f8‰¨IUù”Lò ¸Ì‹Í­§¯òOÔ³‡4ÅîºÏ™ÚÞ œtM£—ÏKðØ ,¾yƒÙ©ææœKRT?ȱ›0yxƈŋ/Ùs÷¢ öù¼Ë°–_‰“rA]†ypÓ°š¦as·j8©xÍ!wÿ¿‚B¼RÓ’M–80o «#oÞÇ`+…é<É$~ÍÉtܼjçcî¤)ÚÇŒXHÏâ.å0÷, å¿çË¢,Ê÷¦ëÃ\üÈü=®EÉ>‚'PA&OœcwM,žÁ/¯í¼·Î~ ÉM£ÐuåÜ\Õvô¤ÔY il’«ß…mÖ.‚ ôÿÍ´3|nDû!5¿³<0uä=xèX´OM+F·†WZf^_”®~Îð§Š! Æ>„רLJSíqÚ5M,¦à9oZ1Ê"–‹¡‘? 4rŸùyÊ"þÆ‹.PL{oC›ÕWÌú·.Ød¢ÛgÌÇ1%ŽyM`1×å#¡ë >õCöpŠ©«³'˜ ñS|Ö‡#Ó§ w¤¤le‘h%øøÊ%V¨j„E’c×´²À‚Å,&Ö—lÆ~r®Û>:{jXÀèÃŒ BÅ>#oÞ#æ‘:Þ°{˼ÖÙX|NûÛŠðdê‚o†ܶ Åý–æØM7›Þ/Y”6·t33¾¡ôÍ Ê´+Jü»Ej!„ ÁèŽHýÙŠÇ>&¬]$j§>¿Q r÷Švg‘_²¢]S2»,R«D2zÊÞ†ÉQõ€²HÞĦu!ÿQdeÉêUàQä{Öv2Xc¬×v²&ÿ~7‘Ùï¿í¬ÆYÀ=!ósw`6¼ïF¸ŸMOËÓñ^Â8Â/:w !~ôNvA'ëÑytGa ™¢ðé†/mÅt8Ì=t”<Ëÿ.ÈGNùÆkZž®nòè³óFÍñ?vï1nl1ëüî ÊâªË‚QZGž%aA“áQp?`á)ùÈ© Á£ÍÒÕÍø*W¯ñoÏó|| d©±Ò4fÑ ‹@ôß^9¸™“ݾ~”Å™¶, wÆGN‰\[:Þ’CWaÓxK<ìÜ#çT‘ü: Ôi·ŽÅû,ÌPdàövxkÛ ,þÚ}ÙîÏ­°w‚0ò³¡ ­¯À[ªƒw«´Õ59i^xÕOXtíåêbhS@»ìv) o*ÓìšöŽç(9­êUf”A£4`Å(KÝÑÍe[É Z-XôGƒ²•EÒ‰nÛoi›ð‘ãÕ îš•  ™ûr‘¦Ù ªÝ’& H}ó8׳n܃­ï΢74ÚQæW;}”…féЙ¸r±K¼y´añº{æ6ÙÅue~µÓ‘# ÿC¯„Êiûô)4,®ôè­,vu~Þ*ó¸°^WpkN<5çW|öíûLÌoàÛG¼Q0¸h/Ÿ«?yÏýG¬\ÂbD !¶Ê;AÞ±òŽEo‹ëÉÙÏÿ.³¸ª¼cä‹ ïXyÇ"È;AÞ±òŽEw,‚¼cä‹ ïXyÇ"È;A¾,¼±Åø’­þ¾°ðæáEÑ?ëûÂÂú¯“3î?½t0¾',œgp)àþÓÔ}ùž°°>žË`ÃÁýoß3-'S!°“à6ßÙÂWå¿W,¬MýºÏÍJ¾,6}h~H_¾÷,ª#ýýb¡ÇY ‹é?~ŸXÈ!iŽ¿_,ìFÚ`LÌí/ØÁÌñã÷…T…Ahî3Ç#,ŽFî™;' #{î7W][±>Î6î؇rû‹õVÅÞÅQ|-×}™ë(ûG#'‘ï8OŒì åõŒ®/6Â[ÄbnÁx ]<~q8ø8Míøf±Õ˜Ð,œ­›?mmÏAU˜0_×VôÚÂ{åbf}Ñ[Áµ$QÉ{,fWcÑ+ç²âNKX{™¿¯;/œ"Xÿ™}`(\{{p·GgÅašâ„×=ªpÃýA*Gè"ðæÕõ²tM9Ó|‰.+–†r¸7ÇTBvbÁÝ®û,D‡…JXHXܱÌ4W†Å‘† MnN¨|@ÒûL¼¦F=aÁáŸÃ4$T%¾ŒNàé{åBÐ9`ØlãU¨QoÆÛd¤a úÊ$g¶@'PÞfZM)š[h;ÊEšì!iY_uXˆ˜ÅKëÓy#†ÕW±@·r›½*o§¦¨ÒŒ~[?2`±ñgãiï²HÊÅAäßz];ûk ²EÃj:¸m@»©`³\ɺsö„v-§,ÂÙ,6ܱ€Y¼É1×w)ÄBèÓµ,‹ìecZJ•i&áöîvÌcw]Yü89cciZ똅â÷ÅâX¬ÅŒXh6­>™¾¬tËL3ˆg€'³+±Èã/N:,êõ‹,bq ïTJ¨ ƒSÀUœ‚ë´@gÚÒÅ$¹™ÀO}çN#Fqg2׳ªœÎFn¬…-‹¸p­ï >…É€ËïxšŠ,LÚºÃ<“ª¯³à„ óŸ€µïæížB^-‹…u{ƒ™]ÊâÐoݳõ˜…ÄRàYp(:È.Ý=â–=fMÚº³cA±]WjX·–©Ïªiý+ȤgAõéМ83Xðdqí dêOX@Îm|Þ `±¤Vq {n|^Ý ,£¯†ÅßÕX`"FgY”ôCÓ( Ÿ›ÿýí$e1·áT …óÂÆEkàð²XÎîž–ücÝsoç)d¯°Ê= ,j}n=žmG³X ¼|¦¡¢9Y]ƒc1(…gQ±+ø²ß”Lú¢yŠÇ°À^0‡X¼¬M^X@-¬uЗŸªÏ]ó¹†BãYä=pwø !ê+l}Sñf¸w—ÿWü3O·Æ ¶èT…×CfMQžÇ?È¢Ô/ÔDOš/?×€æ †°,L å¢4ƒ­†ìaE+,‹"^ÝV–G¥ÊPeÔÌÓm ¡XX´Y]”íb°8QzQÛr±Pf€}9U¨º¼@¹eA(¤`íÓÏaË…™™8 žÝµî#@°˜%»¨ ‹©I$oÅ¢Õf8V”âÜ~ûLú²ªõ±´WL¹hóRN%â[ë&S*[" ù?éÙycXcbÁŠùªz‚"‹iUP e“7÷ óÔÛ€ÍÒ々ɣ†_&'ÐÝ^À„ÞLh?$370«ÍAÏâT¹à–ð°0Qð3 žÛÀ–?°, n³,j1ì®å¨{ 3Þ­ƒh‹5°øˆPéYø¡¬š‰b±“Õ™eanùš;Õû\ŸXÛè€{ , f””>bÑ5Mš¹½ rSZáÀ]i_}_ ­¦vh e±Îá·sj£Ì ”ûæ²a÷1º”ÐÉ–n‘„X˜¿òQ‡æ.ŠT®HS·64„ý ,L›J@?%‹&ÚF[š6È…"3O“\ï‡tV¸ŽÏ"â2†EÝé$Çâ3Æ1Y—±Þ˜&x-Æ$ÙaǶ{‘ÿÅü[.pÍn,¢ovo±(b7‚ÏžŠea3Ž“Ç¢ 3Æâ3.“Ï}MUÔ@Þ©ëúâXøàW¤ˆ óïañ#DÑìJÄâ^†W`¡^¹Œc€6Ë"¬³ˆ‡ÑM7t¯ŽYÜä^§·)¶O¥M«V„ÁÅ-âà ;mÊâ½?ïž`£kê³#'–ÍÙÛ$øYL]ÐFkø]Å|xñS¦3¼G½1C`±ã¢æs}Çšœ…Ê…ÝÕšzÇE~ú>ÞÏ5;*ö|Ëø ”ˆQ?s×ÚÎ…Ú‹&-ð¨t)Ö5¤³š–©-,(^³—½.W%qÄèljåp.Ó¯íàIƒ²¾Zd¸»b‘TiA¨¾%½ÀÛË­kšù±Í\¿{ò=±ÞIÞ±òŽEw,‚¼cä‹ ïXyÇ"È;AÞ±rÇ,/?åþäŽYÜýúúvIV+î–Es”{– |ÓïXÑ—;f±/+©N’Ý;¾ç,ì¾g$ïX¹cû¦/Lv/ºcû¦¿Owù°]$ÙWì{>?Š¿Ü>‹ÿáÀ­¯´ÐÉí³˜qN_Àæâ’p‰÷&·Î¢hÁÀé°©MϽJ²#Ó-±AZÚžÓ7X>¼qvÕo[a+è7Ðró«Ûbá') ˜³¿‹#øÇ¿KwpëT¼™³³"Üa+Îám?Xlo2w´YòWÆîpkø¿ð'ÆÎsÁÞ—‹;e1RG‹Õ°Æ)åTß°2JYò–p¨|øE{Ï‚FÕžñr,üMï’E=u s)\ÍYPêz,TÁÉ©gù,h 2±=¸„…“;f!z, [.®Äâwwñ,°ƒ*ÚYK†¬®÷“…&·‘ùy›á× ¦®}Úcñ˜kË"mxósàYtëˆýe‘´"ºcyzg,ÚŒê-‹q£hb¡vg¡É:ªÃbÖi;áÓ/º»pÞ %ÀœÏ²£g ÙcÑ sõ ïGz sdá*‹ëqï„…ðŸ¸cñ5'j ò¡—m±¨³®-,ðQêMÂâ4e¿ 7s¿&÷º34bØ‘EÓŠE4­ã,h›w%—±h#'ngxu',B²¸k;Abà:Ëâ±aa‡ÿ{oó#Ir%øY0L©½‰9l Ð[Ö:n´ELOYú„^ð0ÇíÁTÊ=™ƒ€ÆW1±ú t]Aé¹Atè°˜ÜãJ†0¹aËCy(K••ÛÚ{Ï>ý#"2³23š¬Gv–‡»¹»ÙÏíÛÞ{F^ˆE¦„ ñǃ·¤~ª¾‹7ö=]:Òa7,ÞúGø“wÃ"Ò›b1“¼}—^Ÿ,1v†Eˆ6=PÃB†øcޏ´,^Ø|qißÓËÂ7¡êYx‡8S=ïgÑd¦Òk7«¿ã»Yä>þhíµ‘ø*õâ5±p6ø–…õh£Xºr,0‚W8Ù;ÀBŽ ‹¶aI• ³ÈñbhZ,Ö+*·uçʾ'e1§:,îc ±æoºb1 eYœKðËmÆoeë¶Gß oäó. xV!-´×lgaëžµkSÍ¿Fj÷Á¢4#2UããgEC U~&Ál[·­OÅE-"}dOñ, ®!í¸ÎàYœb±ÄI ƒÑ²€M¸µ·_熻àS½ªòˆE%ˆÅÒDò¸yûÆ5Änöy.âì 2Äâ”æ²H6ü&·SëѵÞ3Òæ_›r9Çà\«†MÒÆýÎòE ~½ îYœL6`¶’·o$#ë ’ÝeQ夻€,Ž(s! øè#h8Áù¢@•ÿÀB±±yú”Š‹BLÜ ‰nF¦ŽÅ´1 + •Ïù6K`qB, ˆ«qÌ¢äTG@§^?±,±h~s•e1qmdÁÄz3…[ß7WõŠ1~÷,ֺ̤Vs–ý½eq¬ ±TOØÓ‘f¡Á)-§zYŒ4, Nk‘`ÖÑ<¡*ÔôÅ…úÔ ÕoÛÄ,d±„íFÞ‘Gu,º+3Ø|ÆÓŒNù$/5C7·Šƒ“6Á­èÔ-¬ º‹˜EC }ۙűÉÉæ¤ÿšÏ/äEÕËÊysФ†å¶ ˜×“,òÔ ¤(8mq)®¦뺄§7Þ‹r°„ 9}èc>Ý;¾‡`­L 9{d¦ˆXpú÷4Rò¾﮾èŽAwɪÇá+úú?mŸ…´¨!—e§ˆÝÚØ­1MNZ_ê¾kï¨^S®ïHj•ºÓDÙ¨Ž m¬šAÇ—i=@,ª¡À‘’®kÕõÈ‹º%]E ŒtwÀï„'?ˆÅÚׇĶFéœ,r^vX¼é޽k“-rX,z»ƒ¼è;»·Ì÷yH,äµY”&{ÿš±÷ÝŽ\_d+É‚_žÜøM‡Ï¢éñÞ¦‡Y¬‡.ì–Ãg¡;³+ÚéåõÉ-¼Ï/zzP,ÚË« w¢_ŠEŸ^ô0‹[”‘~9(}Ÿ¿÷öúƒbÑ—ëÿ.¿·×<‹{”,‚‹6É;(,XùÀ"ÈA>°òE,‚|`ä‹ Xù`‘wΨn ßÃ+&=ªR*?é ùû” bAAO‰¹;t«¬hÞ•CbQ½Úª_Öx¿ð¿ýšŠˆXb#ä«0’Cbé ëBý;À´¥ùQ¸wÝÇ"ë²àß5³Ž~¯8õ<¸w-¥ðF¿¤•Ñd ‹ÀüÐXxObñ3±ãçÕ.e¡‚1Ä$bAšKÍDÅJ}è£gÑ¿ÀÍÅe¤—ŨÉÛ,Æž´1À‚ $ ¡= Ñ­Ó+-™gqÔe1ò,@¡í´Ccià:©/¨ìG-&°h)TPÝéΙOÏ‚ª è°ÐeÂB:‹oó6 §Ë‹¶Sº3gÞ˲ý¼Ã¢zé´˜\ôſʢà Ôü’¶’tú»ëm,4ð #™° Ï/Ûš$ÉâD"bˬq¾@9ïÜ{XT/só¬ŸÀ}Oc„õϾC,´þV õ/Úž·Î½Q¾¨…z á?éä õOûu:”…©;[BF±ˆò…ú2w‡úÓ$,‚òè³Ø=<±žèáƒGŽQš§¹;ü¹NYÔ`ÛìÆJ°ßI±~x? ýIîŽÊ.‹£ï‹Üþ ý*|±‡s«ÖÔfñض1ŧ]Å,Ôç¤1ɲhô ãÝP8wô½Ñ×Î:4Áx‹'B/Í}ϬÑ?úœ”ßûd\Auƒ“[¹›* ·µ<°  ao‡Ä¢ÏØ'ĂΦD|†¾fàÄF+›EhÊFSèbNõ4Óÿ §Ù Þx÷ÿnÀ°†XÌù×­ýx×™y “ð‰©ru§Sà Cƒã´ú7,¾",-³nú¾œF²Ç:ܳ(üɵŸ°ï:(å£ &7Etªþ>š‹ôÆk¤,‚÷‡)]k91ƒÜB,²0]±vc5çlô X씟ÅO½ËAdÇF Ÿ‘Eà ôÚ åÝÔú±¸á[7žAÊ‚üÜjëí¢ë£"•à[§wÀâ$våac(Ú'nÌÂy‚MÍý= 4öíhâá3\ªDÄâ•sê}² ]ªDÛUý‰e±¦éü¹¾9‹Ú3H­7½Qš8wYÀYdÁò0½^ÛÕGf/s¼¥ý”xƒBð6 îXP¹ÄFí¤ÿEJe^êGnÅ(aÜ {‹ÊÆÒúq+rû±àøzѧ*³ 8ðøË‚µc‰ìyÃf]wÝŽÔÜ_ùÀÓŽÌqU1°P6&Ê=+°8[ëDÖašÃâg)k/ôëx¸ë³3ˆì1\Ž‘•ëv´ÌýÏ“_,fè<'ò˜Òö%âX¼s;üØ]¹+ÛÊìY,‹Yø¢=lµª·±Ð[ÕÀ eY„ZmXàS¾“FwX|›óߊÈ!õpŒzËH¼ ÞöÒ+›Që¶Åu†c!s›/‹Ð„‹Ø#—‹M‹ì·‚Ø!f±çbéÍd+‹-âY¸2ò'îÊMYde—Å^ß÷¦r[¾¾ð²Þ‹Eœ©MˆU‹™)#0¡ÿÐ,ÎwÝÚ‘‹Ð•u,Z!@Z,Þâ®+-i݉Òëèâ½I¾3D¯ ³¸¼ ½›V^|³ØÞ­ìf¡®Ë¢ÙÎ]Aÿó[EúŽd7‹G},¼×ޏ‰²,:õEÊ*ÀK`a•‚ܲ¥a‘㿦§ÚÃB؃변jóú>ÙîC€$õcá[žeñÈžKYp{pàÅ,„=õ†N GÙˆEâï`XÐ,Ú±JoXF°ÇŒˆ”…kÞDM ÁNq‡;ßb¬é‰3˜.YÑÌÒ¸g$pâXH«Óf!ý9“’àÏÆwÕ/Ýxxq»l ,ܼ»¹Ûä9˜lÙ ð¿«—$Õ³ðƒaÏ¢1r¬ïhÄÂá¯ó#zé\èÁ|‡ÚŲ ç ólÐÞ¶,þJÓàá Õç&Í4fo< jG® ˜Ì üÿ¿–NúÔ\ºj’ò…bb‰5C4Ù2“ùì[®ìžžòû¸¾“÷GçAb17 &0±3ðUN,`ÿ¥‹;³,pŽ¡r“*±¦×ò…e¡RK{q M³HÍ ?qùXPÿ6Ä…h±h…Ë1 “{¤ê²˜*aòE-jÇâÜ Ìû£ÓçœðÞYœób±q,8õ/jdQ‹,*#¾ò‹FpgJœÓž< •ûª+=mĬä%¯r¡‘Å v¡è—XsóÞY,‘N·“.,=Ç,@®Ùºs¬Ï]£øFŸÖ˜B©â³©„ªrÑä´ùôkP…:nÄqÁ ËB±/ÇÃÓàû¸½31,.hÇš¥ó‹›› lV:&ßçÓR¬t͸c1sâ…añ©€£¹~>.ÙxVëivMÄâLÏ‹oÓèù¾x*èlÈkñ{•ò,Ä–üjlÊz®§†Öé23ùö¸…g»à¸<~¦MR!˜ž[e¦û•e1Ã_Ă٠SZý^y;€· G-¹e1RÜ@(˜cI±ª1ŽEø°çŠYÿ£X …ݪt¾Ñ Å[‘‡©;½ ºaqfFZ—UFJA²ÆÔ™È/…rÉ-jGªÀb®Yÿ£B›€Õçæ‹W¨7ãX˜[ë±y]Q²§DM±rxMfŸAÛ®¥!ÉûÜ@jè*ÏÝ&#— ¹da< Ú‹ u"*›Ã‰… 1¶ƒ«¹üÄv4 ‹/&òhMØË<°x<¦µÓBØQÜ‘ôýüŽôÌt$bñºué]|‚úm¾haYœ¤÷˜ŠœS„ÅÂT®ó$‰Åȱ€ªÁ¤žß·÷nûzlg>…ÛÉ_¡ uâtÄàýSzmé¬znÕZ½n´KB˜y¦¹´0sB,”Û—¤q¢óôÙ¦ys➸•¨fcÐÓ7ÎÑz®û? ‹ü—æÃÚ°†…-,MnÕG½ ‹ÞeÇÌæú.s?ibX\¾³±ÂKq¥LÌ”[âj¸}׉˜fŒ²úÛIùÝ-mþð;ô;ã2‡òŨ•/,‹×q› ɆRX˜NÜEy·£KOö†ï¾ÇF»å"ª;ʆÅ%± 6u#ü?m—²mÖ Z£h±¸–ÄÑí÷©q Ù…ïLÌü8òÞ6ºÅ¢Ö¢Õ׺o sƩ׮¸î×yxÿiËÂÀtÜßÄ,|/ãJ·X¼Ávó¿ÓÁ»¢Öi|üºw\çáþ()©–…5#fºLÖHX\,€B NÑ«/M üvq+Möì/Eªä,ðS6L Ì2Ð=†bò¿ÀÏ+ba*28Šêr|6×kSUlŽ¡e¹9‹áYìÛK? Ôž¾RÈBå2 ÓZ,`EfÜÐáÅFá4R‘»Å~Ãq·fB›¶¦ÁCoÌBß!‹YhŽà%@ÈÖëFëM% 73À¤·ÔÄûpU«Fn¹¯ÃB€íb,ò[°¨îN ϳ(°¿ ¿eÁôUÉ…ÔÁE›EÁh3b2J•OÉÚ×±¨M›aH"‹Yü9‹;“³ˆÅsÇbn†#ëæ¹ù„,ÓSpۜϕ(-É9Kû„YBªI#dÎ!LƒvœÈ‚&‹¥cÁ< nXlÅg¹í(-‹Ùr¾¶,Þ™!JϧU*Xæ~§­Åó̤ްPž´¬RÈoØGÙ½±¸†ÓÚ3}aY¨—°˜r]J˜2%Ï3ÿ¯M)zvÊ×MnóE݈o¹ö,Ày°€-ß‘ÅÔŒ½åçf,©,‹Ì±È{,’²nïR60SÕ'gÖ:v0ñš‹×¦‡hªŠúÎO¯MmH, ÆWR ‹·À¢„D" \Ñ7O`ƒjbqlªhóüM>×ưȕ)y»Y tÛÒžìHY\C}qFZ>JKÙ𕛀řañ1ËË*ƒ5ÃBPjXÔßd§Ìô ˜%‚ôŒaEg›ÍJ·ÜWhF,˜aQb˜¥ùNJ2nXœSz·°è߉·L¤¿‹ä×5Ô-‹wZþP tÑßïªÅ*öGèò¨a8‰{fXðrXàÚ%ä¥110,p÷qÖ¦mÐ'†©)ÌÂôc¥b'õ>¶wåð¥XÚÈnËâJ×ãúÙȲ™8_: ýJÇ¢D¸¼·6Gy…,Í1m@\ð°)s'Lè~¯0Ì©‰›4ÏQ'öýÛXt¶|î—¶þH:ùͼ¬%3ÓÔ8ÝjÝR‹µù_ÁÜêþÂ4‚—øÜ×S¼‹¸«°ì²ø÷ö_Ï#—,9¶ø7½ï¶vbíª n C,„¾6 W¹Û’º¥ÅbÈ\àx ®©œïê:ÒaA­²hFÇ®õ°ø¹ý×§ž'¿´ÝûÌ|SBw%Qù`ß;°˜:n'õÀ‚ë ៟Þ(Êw&7cqy±h»Xð5$²ˆëKRRÆýI‡õ1¾íùÎÐé­²ÀbÖN[/ ìFÙ&®þ`Yt º,~+Xt¾sZ_XØø§ÍýïÆÞ•d2Ÿ(b7JC,ÎáOÊ‚B#Ä !ûßú°‚,Ú3šÒ1Ì"iG‹+[ümÜýºìµ`ïßCâYô¬apÝ­/zXÌu`Qå-3À¯uÊÂæ®-g ‹Ð`ø±×éAH¼1éJXrßÉå÷&;r"²‰ös¥\§ºypèX`ò¨\ÍuÄ­EêLºUÅÙ¬ÃâµÉ ²8¹VZn+;Öð< ² S¹ Ïu2‰Œ}ˆ¥í!ÀˆÇ²0Åàµa=YT†…mÿjVÝ:fA*õ¹ÌUf®m{§;–}YƺrúÛüeaç˜ÌáÉìÐ4 ,¬ƒ‡ZÌ ð (Ý*Á/™¹Xuf“ÅQ æÁOzM*îNv¬á‹\ã&f;-ÀaΜ¶e ùÒÎ&ÁúÌÒê@ƒ`‘—¸Š;9–h£¦aIXäÈ¢¤žLÝ{¯ž( ûýßW^L<‹qÌbŒVþ-B ¾ð,Žê—±¨hnâ°3²¸ÆŠÁ{ë™Òé¿P»Ð¼tž,wŠ–h ¿+FWêy`±$#`Q‹Æ³¸Ô`w.pšé×'–Åïx5¹¯Ø²€JÀ£D,&–~uaµ¦Ë±”¹©­ß‹å•c!¡QY¨ùÔ²X5“ê%Ÿ‹f^–ϸËY5Y–÷ÎÂÛZö Øp7´–¢^bð“´, üê&uÙÒ´&Ÿ®ÁEÔ­û/ê|hËB='_*­ö<¤F-’§ öQfx³¤×§t,VLØg MQ›´©:G$ q®ž9ÐB"‹±Ó Á>}(rfJs 1¶~è S>µBõ1×ò_’C„{”ñ›-»e`AË”Ö_ƒÊÑÓ‘cÍ,cÿ®ŽöYdä]®¤=RVÄ*/¤u‡,àYŸò蕦:†>TŲeãJ~7—ÔïE!ö•>ƒ>3~ý˜Å”È J ¹;ƒ*# \tn@> y˜°|ÙL°9‚Qd‘Lúsûêï±ki"ì”-ÞŒ5ÅÒ ²èd¿º`XL­÷×ÿ¿«añ© 0‹TäÄ$\5_›aFmß2§+KxËq¤ ,®:Z€Üþ Ý5®‡$ž%óцG] - Ž^j¯ì†÷Rõ¸öbñ†bÈ¢vªÎqÒ°øÂ˜msmÄ‹ Ô®xÇ >Ô¼ùª=â÷‰4=Úm,ð¥Ê¯´@JdŸN/u­Xòç66’ÇÍ_Æw °ð̓ùîc`A‹v"fjÈPFP÷#@N¡pç˜5OSŒˆEk­گü{L?Ev› ši})âh;¶p§^#v³hEÝÏ"´ý’¡Î j±ð‘-E”cÚYºœP+s¡»Ò~e¬.$[ω…Vìhˆ<Àb´ ¿”9Ó ¶#õOv³hXӮĂߤòQt¥ÍÂd¯Á…À¶ΖnŠH+¦gõ4² ¦~ßµö—ú›j0¯Â2rÖÏÂGLR?³Uâƒ5n׋\ï-mûè' ²ÈUÄ¢ mÀ; µ“Eå³nþ4¾,C¿ç;Å ·@yÓ¡ä5ì̼xW=,6¾ jWj ÌY—–Eõ[˜ÖñÛ9ƒjA7vå}(B{®9ǾŸgÑüWéKnÉ"xi¶ed8j»FCr+²Ã"w,’þˆYôMà]…)#?J¦ûŽœ9`q'ªBí¡ÙÞ"t ­{Y`+¶ôY¦Áÿ'4,4~™ÑnsË‚> ÈÎ)ä‘÷ªÂîH…ìÆÎ„ŽXü—x k¾ÿÂAÐ’!°p«~ðî‘!0¥ZÃa+ƒ+MÊá#59°˜ÓC W) ‹óÀÂF­Ãâf ÌŽ èG,^aÙw]ÛFÀ0ï }2‹Y“L¡å~pT9ïq‡Åbnþ{>ñ,ÞbÔ5Ç,æ°~eNŒÀ¶ná#)²&iõÈt*&ØͤXX|\<æ,ÂÖU.¢'ã/°½Sүܰ@`¸1j¸ü ØŸ.ü%»ÒóR«ªáp·©2fµX)¨{³Ë5n¬e~¼¾ü6¯¹í’m?úE±›¿ ™%ž°à^­Å IDAT®Aê™Ó}·?DÌbQiÏ¢2, î¤|é®8T,|Ì}+ªÉ²8ÓKSÄq—혅Ä)#éöÇáæ?tP~Aƒ)`ÁmyÅ̤{Ãs~VŠ‚r@,j-DÉk*m™a¹;G<Äb®/š‰WúijFµÄbìÜÝèܳÈÍÿWPPfP¯ÐS0iúufXÀ·©J¦…8mÄIéX4_f%¬K˜Žž?›Ù±Þa±X«I“UàµC ó‚Àâ $x U2ó­˜zØÛÄB«O>Æ †iÆ Ï¢€eñkXÝ„ÁUý峬üˆ¡í­cÎxçÀXü¤ÉJőť®^rn 7°ÀâJeë‚O¡-­´úhÂàß ì¬[" ZÜãgaXó7ÃÁ•d_g8•׌h3sæZ‡Äb¦×r$aò°x£«G`–,&IPÖÏ2H²È›/¡r©a}k]‰Šh›Ö·ûûÚø°,rÈ5_g´2V°Qõ¹.¸3a;,vEús¨/.´3å6,J°/;#WîŒ Ñ«Ü¤kŒ«ØØ^\é#òÙ¼Ä@²¨q·xnN`w…U3ÚŸ·ÀUá029L F¯õGΔÖ8)Á’• i»3h, T­3].FÞïI7 ó.sæ<6Nm7«l©<‹)jm°r,ΚqE›K·)¡‹cÝ7·³ÑÖ)«Ò£Íÿvzòçÿq#=págZ›Åbª3ܹcL:…3Ū¿ÐvU»9¥ŸÈúÿþ5ŒÏ1}V=ïÒm®%]º-‹ÖÔ¤äk˜‡Ä¢ü2ÓôÕ1/Ϭæ ovxNÿ,:w›ôÛ%¿ k¿{ËJUòŽ»#{áX0¯ÆÌšˆE{•Ʊˆ¦3.Ýî%~úܱàÉ­’š_+ºw*K¶îYU•^n’2šÎðn»J«›áSð¨ú/ù€ÚCbQ»šždfçÆpvªU&ü„m”Û=‹c;§æª˜hÖ?׸hhÛÑÖ<ä!±hÒµLÇñ´VÚüD~’/,˜1Ýç×/÷ §Þš=$4Å‚+-a¥"÷çj›õeæXt^€eDù]S™…K³ÀcçX´÷­çÔ9)äUÙöygÃÂ>­µ„v`,°hÛÖj}»Â$uÁÓp}ÿµ°nOÄöùÅF ¨=‹ÿcà<*YÅçT)¬»½"íÐ{‹’Ê ‚Ô±À·ölÎ…õ€¬óöiÛgõNíl›<$‹žV>Nsi+È]ß9ÜÀo¥cKu;üî×ÌÞ,zúå×’‡¬;w°píèÞ,n+ÉbÏMtÿ X죪£ÿPXìgIsS­‡kËw _Ü›<‹>Í¿—bqß. ÷’bQìrÿòEañÎÛ¯äðöAyWnþ¡>ú¡äáXÀDŠäðöAy Í¿Êýz[÷$Âbs6PeÔXàì}!.f»ü®Þ¯<‹&GL,?°PbZÍŸðŸ}|Ï~vȰ†…Ìõìþ}>ìbQ‹Øhéáå!ÊH^ç ¸ZÝŸû‹~ÃÕ¶MªÜYH!'Ak³ó Ù·6ó`s¿{oUÜe¯‹7P*œâ§Ãðñ£À$˜“"ÊYÇ?‹ý]ý ÝZ*uóç'æ?¹„””Ô[X D,¼Eøƒ±¸Æ¾gm¹œÓ¿N!ŰXŸ8±îæ8üyÝ~F´f§šE5 Eð:×ú7ù~ψXTŸ¸tô³èÔ—1‹‡.#›óŠo…Ösûk‹«Göß =+c ø×b¹&®¢ªèØÉƒ±è•5*¯ŒµƒEYõÔ¥cF,Zõ.ÙÇkÙ}kv‡¥¯ÕðoyTFº,xçÌ ü™Ú^ö¯<‹s`®ú‚eA–ÜÝ' /Eô‹4ÜytsS¢Û„á]ÅIöy©ë©¹ù¯Aûg;£XÁŸ7óîËŒE V·ëRs<_Æ3ŽE,ÒŠÝüs8B¹í†tßtø,P3ÑVNÔ79´#Ž•‘.‹úŽ Ž2£÷Ä»+å!oÛà";ª ¬N8°°©Ïõ ZÊ®&˜§’>,\=wª}7X$ÚÊŽ,ʰæT/q²ÿô² Î °-™¶áú;âJÎäô/t]%‡—8ÒS€Yð(ôÌ÷,ë„–‹†Xx_c‡$aF¸dá‡PqÀPÔœ –/%ll,²°ö¦9ü=#ûoÝfØØN­ÝÀ!±P‚æ*@A+ÌZ ¯£T~2§ÅúGu¶Æt"‹ 5!…zwLõ‰u€$‰…ér‚O-œ`D;”å!²˜ÈÌ:Ú'g?äšXü*_RcÇosÈÍËY¬²MÄÂ$jCê[.›L¢mg®ˆØÒäô–µœmÞÌ‘…œ˜ÿijL=XYÿŒ&Í3óñ¨ïhþ{,àãJt+o†ÅzVS™à3…,Ð{1‡;æWi9ô/, q,ŽädõïøâYÔc¹„´Ú®w™ ôn¢˜ž’YT¢L¼5,ȇE™)Xt,1•†ÅX³ÍÅ pzƒ,*dý Êÿ¸°§mß³ãd!Ç›%nyA? ô–††/ŠåSÓómñÇÚ”C,&2/óÚϘtJË¢aæ{8f-ëØÂ›L†mj–ž îàЙª£Cb¡ˆÅ̲`à'§5±XªqÕ8s¼h˜ø¹€R_Lª¼ÎOK`¡Æ¦Á(Ù÷&À‚1b®îO< Üñ~jݶ[_ç–þA±˜Ô°¡à êŒÜ±È‘ÅGb©FŠKù‚³—°9´­§¦*¨Íw† µ•uèž©qc= OoòanXPòÍó–EÌ";D#fr 8~¦‹\ãê< ïZVß@e²©¿¦‘Hð)u(Rã7FõJ{dRãX`oÚüû n‘7MÌ¿59DŠÕ'澩.žÑÇæú—ö&%‚‘ëÒúª®k²¿9<« ¿{‰ÃɆ} õ…ÊÉbÁðANV‹'ÌoË,±9±®_s¬­4¹V§·›8Jw±å'ãàXg•>®sÙIïgyØ’áIä1çBô<ª×Ãû¼}âÐYPaF±ÕÑå Óò¬÷¶éuaÜ]NÞÊ⺋;O¿•P]pš°ÓŤO»£[uleQékIÓS1ÝBâŽå-T˜†änYì­—¸ŸÄ¿3ÐÖ}[®%Ýút+‹kšÊÎÓo%½ª}u_v¿‘8•· -'5·cñÞ¾JŸÕ{d±SZ,òëÝü~YôŽ0öoÕk=‹:a¡?{ ?p‰Y Ÿ²Ø ¸=6 p+’ïÒ¢¾q#¢u»˜›· èé-ô,z%.T§mÐK z °Xâ3¡œ×ñ¥^òÇ<þþm¦å"· ÏÀõ‚w:buð·°q®áð­E”]»¯ÑaÁ}¡§wš°À~É «³„,Þ€‰ÂÔ¦Ã^¢WúÇ •²( ‘¾õAÖìEf6QêÜ0Sܱ[XÛ’'éS¯¢K±•…úR¸”— ´¸ÛÍb¡`±é¨Q{Yä¶ý1½þ‚XT0z›ž…šÔžÅ ¸a) PÛÆ"¿ ßžAˆaW3Hýƒ‰Ž×Øù î.úYLÌ3eø̡Ê#¯‘E¾²K{h{r‰,*d‘A+UCQIX4Èâ¨ô»§X›°0Ÿç¸¼U¾HYPîþyÞÇ¢ÉΩ Òõ;‘°P=,ÔXŽ= iîYc±ÂI%VÖÎY˜g´ñ7o*°ÀË´ ,øôí…8¶,F`’ß"_èq—…[ʘ¥,&çÏYrì*üÄEŒZÐ74,äȲøÂ Ñ€ÅYÀÞÕ&rd‘ óÔ²0[ÃMZ aòÌ ™Ì TB4ƒ°§YmGÓM.Åôr)Ž+,#Š5ÿ¬n†YðÝ,N#‹4_¤,ôÔ²€Ô îw<˜|jßT',ê‘›gJõƒÌ°ÈÜ>qÄ‚o Ɇ 4¯;,J`aÊŒ)#ܱ§ú1?¥]Ã/Míòj²þÙSÆ, %Ê:;`a¢}´øj‡E±8M{’vÇça¬)9h3Å,Î"3Ǣ˲MÚêDư8ÿ3íYÌ7rC”ò9°0IÃ…Ÿ S¿ |8¦2¤ùXÔŸf•Ýú2CSËgŒƒåÃ-XÈ¿ ,ÊxŸp:,h’xÞâö»{‹ÌÕ™6ŸeR °eZ7ü–°@·â±e1B‹ ¼ß@1¿‘ÍË“ ×,ȘXàaÏö<{³øqÄ"w,Î,‹&bQÇ,Æ6 $þÌ>6eÁô¤óâ°€éÄbbþgXB”Ùq è4óA.\Ô_ªd:z—SQ¨‰TÖÏb[펉"X›¬Ž&›_€ðÒ³0ß/ÇFÅ9À'š›ÀøÝ±h',ðëÏ™ $]~cÊûÑ1YŽ2L!!…ÁkzìQ2’¶Û³h¥}¨ý°Á‰ÅĆZB,(}ÜzíX4‚–”×ÊZP™”¯i“͹x©D{NbñÖTkR³,&pþ²`V ?ZO]Y‡ÜþùXFv(X˘®âu–:+Ñ=u@—ÅÖµÓèò7&¡ŽÅ ãfú¼‰X# Ê+i¿€©Ý ‹:¾ ¿†£g!MG 0²0ÍfÂB\¶YXqe±Wócol‡'¦a=Ýq#°èyÖ ˜,Î7æ9SÏ7^ŸÄ,Ö‹cQp½¿ËƱøXØúâÒ°8¢u`!WÍØ ô³XÛ%ù6‹ž`>©ù+kþ4Šæ½7B›Úó¬A11å+“1–Åv8DðvȱgÄ‚SoÁ³øìMlºK°ÿÇ3 \ÈÀ¢€¯¸BWÃâKXdEÞÏ¢gñ>Ró!‹0àÃEk8þhÝ™Áߪ1Ã|±€ôÍSWfìsXäÄâoE°àÕD×3ÏÂôŽMµ,ê?WÌT.âȵ©Î¸ÃÂY.i: ehî3F›ÚˆE¸ñOÜAõjû£í{V,sËbmóØÂ± Év¬H ‹#Ç¢–¶AyÊÅô–ê§ŽEfbWa{a0)Óp®ŽÌI¸f†_ìk½ bñëA]Íßö6®¤‰k^m0‹WµƒÁBõÅ$] Þ¾£™aabïY@úþ\ÏÔ,‹1Ì¡®uó}Ýfñ˜sö »O#•ã™Ñ¸€^yl\[ÿz¬ £d~Ù*Ž9ó¾ ßø»Ü*Û,z$£n„dͲ$ðŽmP,‹±xÊ Fš™¡-¥½3C9EÓ  ´-Ô¯7]å¯(¬Éù™©äÅ ê‹ÀBNжìÀ)Å£~›Lo¹ô«ÀB´¢Ü-F:UÛöeDáØ%’¾­ƒGGfì?¡åݤoNÉcy9ê‚ÊU­R°'N6PX]|d’Ë‘Emj<ÃB²0ͦëʾ2£J_^ËÏ,ƒv¾pQZ¯7W'ÒiŸs§ŒÐÒNxŸBúÎ|ú “³- ëʰ +9ûÒyÖ°¯ì³ £Ñ?|;p„À͇À¤˜$VÐu8‡ôø~›_+ÒÓÝ"Ç ùÛä,£^ {é;‡& ¥29ÛXÌÔ>M¬žFi¾²ÝkÙ-yF}3ÜÒêYü¢Ï;Äb¿ÝÞ¯,ìç¤W7ÌÖA^3úûjØi¢Õ¼.ê¾T‚—ú´ÿ;°V`¶wÐSn7e}žn‡”µû‚IwÚçû°¾˜±è £¯´ï¿è ¥¿,–ÝSƒ†n©l± ù`Ñs;k´WX”´ì´zLåôïw€…¯!C¡4®ê×&{›¤ëõ‹óî)Ÿ>Ï¢ê³IÞ>õÌÞÖÒ>TÝfRuY öᆥÆ!ë©CcÑÍäaºÀëB5í!’;?”˜r¾Ï»ïœÙ>†I¤¹íÞ¡±˜wÎÜ_ÅCÊA>°òE,‚|`ä‹ XùÀ"ÈAc¿¡qÖû2ñß)ù>îŸêì¼! Ókú°º±l3{ro,.*NÏ®‰ÅÞ›¹ÝRösfso,6n&Y¬è×Ú³¸/‘|¯P÷Å¢NÊÈ}³ØË)Ñ=²ÈéYÜÊ(óú¢‹…|P{Ùùß‹«‡d!ù^¡þ Xì'÷À‚:—) Ûªì¿õHK'õXXc@§z,Ά.X³Lbqâ‚Ý êPµXP.I¶ï¼±$‰5—ZÏéE!txç6õ¤ð-î‘ :d «Qµ‡DŽÏæíkyü#¶Û¥jz-÷ç@sgfÕˆEæÖ-ïéýÉ`£}í±•ÅyüƒX ‡y+\Zê;,8qXLŒ…5 ߇EâGäJX\ÛÞ xÉåôévz A’Å(Ö¬£|Q*¾"›N›ºÅot‹ÅƵ…<.\ðàóߨ'¨N ¯Íî“…,x#ÆRxm{’^oàF•C¾G7òáqáŠ5¿±î6ˆu~,Μz0^»/5°àzU°—)Ñ|1f¢,‹V_¡—V°;X¤ù"z”ÒËñüIXàé{fQ1ö©eváA•¶i;-÷³€@*ÿ¥¶,\z•‘0\‰ öfA}¼;g±„ÎeÅJ‘jr`&í F«Þ‡Å ™s8LXxáñ‹å0 ós~¢±ö¸—}u¯Ld̈ £5Dl½Ô÷ÈÖ¶½ž5ë¯/Àø•X`QØÍB„',i¯?¬oñlbašéߌõ%° y”;¯;v§Æµ(:@ ÜÝa‘%.È–¤Òz®± Ÿƒ!"²èØ ðøGóŠKnß…,žƒ!çŒÎ"ÊæeOƺÔ¶ß9‹5X4»5d“-9¬§R³Xk™&£Å‚TMs4÷oFmÖ>˜c¹À?Š7/2rñfîXCà'ð̇ÏÏa ^C†|ñJÜp=ÕÝ‹ÄØÕUÊUW””<íw¢³“bÛ@.¥cq†æþªÃ¢¢–d†ÆÖX7ˬùz"3ë/r­ò%¤· CMpD’×&'x¿Ä£ê^YTy‘Ç,æð/š¥úÍ¿>s,.(—p@‡,¸cáJVE‘XT“†7³!ÿãµI½g1©àÚÚöùîœE þD\?Ϥ£Í5½»e»„37#|A©wóË‚²ƒ¹¢°,à¡†Åøèw»¿²,F§¸S?XÎÉ`,Îî-_€_ ß=R9~=;õÙÞ‡YldnG)mÒv/—ÎÕgð^cé3,²SÏb¥ÄRe†¹7YüŠX4ú­z>ºW`híwÆg8Ú;Sh›tW“„Åš&Ð9°X ls©NUPÑÿ'¿4--¥B0K‡I~©¢I1;S®X”) ›Kj±÷°ƒeÁw±È%wÇàÄácI¬¬­IDATÇX Ì{ƒŠø—K½Ä6:öÿp€,¨ôòî¼fJ$n,†5á|Ç»¦¹ãøìY÷½!gVjžŒríxo¾ûñΉb× Ü!²ðwÒZ;i‹lM~ÿ^Ç¡W'åÈ¥a;ÚâþÍ™5:÷‘Ce¡wîCÍúFþC~”ö’ƒe±sê^ÿA¿Ÿ,:c•¶ôvÅne´u°,n&Õ'{YŠôË·ÙS~ïXìeqØ/¿g,½í#¿g,nÕü¾±¸™ÑÉ ÷´†xBkAÃrO:J!’o¿Þ¿ŸÀï§H¾ý:ÍÕ‹]™ù†RÏ·_?HéŽãïï±ùöëP,vŒRÈ6ôÀXÜÂaÿ6‘;XоSÆbÇÄÞ»ƒM þ°8Ù'Ô‹ýŠÞ¡±÷û¾‹xæüÀXÜQÝ™XŸG§- ÒW?0ov†È÷yŒèœ‰XÄk(kRÃ¥Op`,vH³gÇ4 „+‘MY¦üž°P–Å%ýÐC{ÆðpH,Ddñ]aJo‡/Óþñ1‹¾íözXð[³¸Øríær¾å™'Æ’Ô R‹• » y‘XéÄëŒÖújÇ[®]S¢¼<߬Ë"ù._l\ØýXŒ›Iä:&e¿";Ä×ýÛÕ‹·ò.ýÙôv—á_2ےߺ,’É\W_ýu)‡…²1ûµœíÏ!N∀äÝø·<˜dq¶ö{ly=&.ÃZ&ð™·ä ÝËâCœìwáIä…>VÁùš9³æ6&Š‹U Þ¼–Ì£xæðŸè“9¥Mý”¼ ˆË¨M ,<€ë± ñÝÒƒMY„UææýËÃô®B9}aÙ^,6˜´>®ÛHn Äug‹ÅŸ…‹Ë¨o¨>ŠXÔT·¦ù‚´Á|£Ðd},þ,(~%t`B ÀÂW‚Ã,Vƒ,œLw·#'º§¾Pÿ´}†¤Ë¢êÛŒ¬ý Ü»IYÌ‘…ŽYŒEˆ ½4IX µ©o1i29—ÖÇ»YÌu‡E¦›AΜ[[¬ïK‘Naè, Ë »%¶—¸Œ`ü^MR”lÓÂïÃB;Qw¨µ{_›EwH:W¼ÅR2JÎø°XPñ·,FÃûì…Î{]Ç6 ç‹Wb"ØÃb¹?‹&o)ívYtâ3“Y|rA §¢’',f†Åi›EÏR}›E=È"É"eAŠÌ ‹‹-ÚÍ]©ŠÚºÅbê“탙ö/Šäš{Nd”E–îfdQ1²£×–Åñù>,^åú‚:óž|±¶=ÕF€KøR;Y8¸²­®³€o3rɶMש¹·Ê{Xس‡âœXähG¯-‹‹>T_òy¾‹ Ä4ZÛÚͱXÃ'dqX¼‹YøçÙ&ʱ0I3=—wÄú¦¦£ä™KãBÆ,ÆÄ&V- ‘²°dÎâJ«ÍB=] Y\xÍ íY˜îì ‹u`!áWÄBem1¨Zžc…jNH–së?æ b1wÉ­òµ>r,FdšF,8„ZJ}úoyÂbm ÿgÉž¶ã”…æ-p?3ªÜ¦Ã·‹ùÿa„;¦ïb—bAÎ ˆ¼?s,ê:çÊÖ|XËš›– kH.²€ a \gdqXË$_¬#yˆXÙbñIÊŠë<Ò³€ºI”]8waYl4c9¢÷xy“²À†_·›¾9>eA,¤e±–†E±xfY(S: çY™×5Äâ ¬íLNZª¼Bûš9¸Ø˜ °˜$Ú¶¸à: Ö;¿°,Îé'Ü\E,b‘ês?Qg.‘oÇ¢a+p $zY\ZÀb„ ¸¹2Ͱ˜7TW¢¡“Fœ/ —¢5_ ½G¦¾@ŽPål ÖXH¨É7ýJþ†OǦ(@Ýi(šlU1Ó…3ý`1=~$, 4qç5ƒJ~재< ó1À,\‹T¤ ‹ØSµLlê»3&PãY\èÿhx­¶çQP½Üˆe³˜棦š4¦3wÕzfmÁŽÿ¸øÛWŽøïÜô[Y0öbŒeSMàƒ‚;=i`Ÿ|,rË‚ Œ„& ûÂ$Á³àæË‚;˜—21k B–`ý/NÀ‘FF;…ú¡c±ß`Lú­ÎM°aïX0ËB‹±cQNCC#3`‘ýN,?{•‘ÿ¸*f±6,ôY\J ;0¡L,ÌgDÙ•c‘™*Yäš}aþ1,^˜°õ˜=E¿Rd1ÆŽtó}ƒ@OìØ·t±˜zò‡›KŒ¨ÉD,bQ@–˜º|,Þéˆ7½™©?Wvš©+`ñÀ¢¢·@²›¬Kör‚¯Xÿõ–o:Îm-‹Ëˆ… °0e¨Ífæ3 þgÐØ3 TŒ0Ñ­c3œA笯- ¨­—št„ï|F8Àb\ S]Ã7¶—a¿+}l­SÌm2›=ñ,`*k†\™©ŒXT?¬á÷ÊDxf  õ yê­éõº«þ ÖWXgBê^0ëÏ£[cIAU^þ—XÙ_¼Àª«¤yÖ¾¥d͇ØÖ׊uÏåW1€Å¨úãͨUÃJìAí/?úÄÔa–E6ÕÈtúXM,šÚ”ÒjTÕOÙǼú#ÏÂzmùŠâýrô•ŽfƒÔnðÈ4PÔ|aq¶YZó šIÉjÈM ޱU2Û“…5é·£PbÁؘÊÈç,fÁ¬óømø_¶Ÿ^j[ªMZÇ—Ž3ˆ„³6O°ø O“nù*€·ýÓ”õ3ÿm“y¶M8¦d”pKqKJä¼¼&š êíîúŽŸaQ;p¤Ñ%1±Þ÷ öþVÁós2½/Ñy‹acŠôø­{ˆb3áX˜¶fd}þzJ¥¦äìŸùHvâ„õeWüîxG‘×!çÒÓ³è»_ÍV}÷6'/êG»Š`Y >“LÊ^Ñä³EeÁ‰Ú3Aæ}·@Of å,+\ÌŽ ˜K6ÑíìÙ» šZU‡ýý„BÁbNÕ>=¾×‹Ð‰=^/ å–ˆ°òYf§â& $¾¶ÓFL™¾ ¾Ò\³ y0²1­rÈËáUÍS6®¡Ý[»Ùý¬[­YÏk-IÖ­ÂÀÞ/q—¬&+ÝÆÓûDY õ…ñÓÿÀBòé Ÿ`A©5-lõtbã'up±ÐrÝOT_øÏÏ£³e—E¿ŽZ2£XøÊ£ŠY8dž/ÅSº®¾ä:ÞêÚn˜×³†¸¤ä%“ñæÇ/]¥Ëµ‘ÐkÚƒE¶Âɽ³ð/Î#µÔ~Uãûu·™p; /‡ÁâŽcñbqÇòE,‚ìËâîcòð2Ìâ"+$r,v™Ÿß‘$‹Ú’úÀl¬HÞÏ6Ì×–ƒd±ÕöÝÉA²ØâRü.å Yôjgܽ|`ä0Yä÷ø²ð®ƒdq÷ug˜¼ÖÛ’Åù>›fô—vbÿ$îF$‹kIÞ9sÒ R .õ²˜|¾Ø&-Ëà>ía—èq.æn!¦qk½°Jó塳ØbÝßõìй‡·,dXÞTÖTXåÈ"_ØùäXÈ-×¶-ûÕn¢ßfû(-›)\p»ü-¾)k*ìX¬íëÿöáY\ ¨…Øê}›§3†%­Wðp)£õ}Ïâ'þ’gÁ‘¿°,~-œ…Ø×ëv,ª -N:q}áXЖx™gÁ€EÿÎ á«›²¸<'½ Þ½¿qöÄ 2lˆ¼ ,ÂýÅBõ.Ï“ÉÏVkÝÚ­ìwYh[ ma¡Ç¸êuüÆ.~ýzÝÿP,úÕB–ðÿ­,Ô §æ27/“ þGáèÍýuv,z«Nb!·±ÛYÈANYœ^8âXôjÔ‹w·aådzþ|ãìÀê—ðws8,¾/¶‡¼ ¿$[ú½e$°“\÷³°&^Z~™›¿µc1ÓÌ¢É~§:Nwo 9̢ɩ—æYððJÇ¢Aò/ˆE3âTX¶õIU ÛOÝ‹ÅS°¦ufŽE°±ºw¹’ý® öȽ,ܥܞ±,î—û< ýIŠÙÎŽóì-Þoû§öˆP^Ã+¯©*{B]ƒ…â¾åŽY°˜ZuÙ= µƒ…ôÎóú,n”ïw 2N aœR)wÛr¯YjY˜vê·/áœ+#gŸF/z(ýõÅ%}LÏ¢ÝÚ4ã„>„ûyÈ04~ó²Åb, øÔ²X‹Ü.¡‡P{G‚d9,ðSÕŒ Íp,(¥Ò5 ¨WB÷r^SYñ…«‚,‹Bë’IÌ¢É)‡= ÿïWü½„¼P¥,¨^³ú· ,¼¬½ µ9´@?ž~èŸÁ<2ÔE,|;²ÿéYäæÿvª[¤—À¯Á¸r›^áÒøCŽ`v¼®TÄ‚þÍз< î‘…$ôXAw_9yÂâB¯d>{óíñ¨r“>¬êóv—«Åb ‘£eý°XÕ°ºU£ŒYàêh`.L_<| ‹lY¡ÌÏ>kÐT¬©êÏÄy`QI=]²üÁê‹27£Dì*ŠvµaXL‹ìN©ÿ¹B?ö·CNN7Ï×Àâ XäžÅdveî*ò³'¯"3Sø°Â]‚Y&l/áö‡`ñ ±R9T P ”™HמEù$·,æSiR53©,­cÑðc¼4ýG±&»Š‚ƒ»,%Ž‹ñÑ‘F wFfÓÖ œwXЄÎC±ÀäòÔCè•®›Wb! ëå\Ï2©™—`g,S¾ÈŽøøçàË€k°›(sÓè~4²,VàCƒ}ŠÖ‘h6 º²§`]‹3p,QÕ)Üþ,˜Øô³¸ÔµúR7) SæºÈjýKÁ> RA,+F(+h/ÔSÜϾaLZ“•ŠM´5F«ShmŽË‘v›MŸÍsÍþT? ï úyÛf±¶®)¸cv¦^›£5¦MÃ)*…î På­ß!»O€Åߨ¶lõЊvÂF°fej¬9=z€“ÏôC±8GÜa‘t3 ,.!•Ç sôžS0›jè[šfó+f?¾‘/–`,ß°Ïß9¯R†%ŸêÛpp0vÀâ=‰>P}‘‹ÒÔè†Ho¾ ot1Â]ùé…‹ÏÉŒš¦{ʯɪGùl¡«øu€¢Àñ„’ÊÏ‹¿—@ðóªe~·t>´hxtÿ,p›XÈýõ#Þ´YŒ æ, /ìª X,Á©Åhc:NvýÇ4+Ïl¦2$¬ý€äÇvüfúcvû€ÕÀÂy8À³Á¢d¾ž1‹?²I\6ôµMÚL±8…Îx0ë†|Á9¶ à°Ï±ˆ/éĘ^¸¾ÞíÑ3Ç-s¡ &­-›³`—º û +ðÅZõEl>Ó¶F\·fþd0Œm±À•— 9ï:<ÄÂVá‡Ä¢r :(³PÏe’ë–‡W&´ZÆÃÐzF†iñBL›EËtôYltËß~õ؈«¸ÓÑ[áÉ/ùŸwý)cijý}IEND®B`‚leptonica-1.70/prog/wordsinorder.c0000644000175000017500000001205112244775360015352 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * wordsinorder.c * * wordsinorder dirin rootname [firstpage npages] * * dirin: directory of input pages * rootname: used for naming the two output files (templates * and c.c. data) * firstpage: 0-based; default is 0 * npages: use 0 for all pages; default is 0 * */ #include "allheaders.h" /* Input variables */ static const l_int32 MIN_WORD_WIDTH = 6; static const l_int32 MIN_WORD_HEIGHT = 4; static const l_int32 MAX_WORD_WIDTH = 500; static const l_int32 MAX_WORD_HEIGHT = 100; #define BUF_SIZE 512 #define RENDER_PAGES 1 int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin, *rootname, *fname; l_int32 i, j, w, h, firstpage, npages, nfiles, ncomp; l_int32 index, ival, rval, gval, bval; BOX *box; BOXA *boxa; BOXAA *baa; JBDATA *data; JBCLASSER *classer; NUMA *nai; NUMAA *naa; SARRAY *safiles; PIX *pixs, *pixt1, *pixt2, *pixd; PIXCMAP *cmap; static char mainName[] = "wordsinorder"; if (argc != 3 && argc != 5) return ERROR_INT( " Syntax: wordsinorder dirin rootname [firstpage, npages]", mainName, 1); dirin = argv[1]; rootname = argv[2]; if (argc == 3) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[3]); npages = atoi(argv[4]); } /* Compute the word bounding boxes at 2x reduction, along with * the textlines that they are in. */ safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); baa = boxaaCreate(nfiles); naa = numaaCreate(nfiles); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, 0); if ((pixs = pixRead(fname)) == NULL) { L_WARNING("image file %d not read\n", mainName, i); continue; } pixGetWordBoxesInTextlines(pixs, 2, MIN_WORD_WIDTH, MIN_WORD_HEIGHT, MAX_WORD_WIDTH, MAX_WORD_HEIGHT, &boxa, &nai); boxaaAddBoxa(baa, boxa, L_INSERT); numaaAddNuma(naa, nai, L_INSERT); #if RENDER_PAGES /* Show the results on a 2x reduced image, where each * word is outlined and the color of the box depends on the * computed textline. */ pixt1 = pixReduceRankBinary2(pixs, 2, NULL); pixGetDimensions(pixt1, &w, &h, NULL); pixd = pixCreate(w, h, 8); cmap = pixcmapCreateRandom(8, 1, 1); /* first color is black */ pixSetColormap(pixd, cmap); pixt2 = pixUnpackBinary(pixt1, 8, 1); pixRasterop(pixd, 0, 0, w, h, PIX_SRC | PIX_DST, pixt2, 0, 0); ncomp = boxaGetCount(boxa); for (j = 0; j < ncomp; j++) { box = boxaGetBox(boxa, j, L_CLONE); numaGetIValue(nai, j, &ival); index = 1 + (ival % 254); /* omit black and white */ pixcmapGetColor(cmap, index, &rval, &gval, &bval); pixRenderBoxArb(pixd, box, 2, rval, gval, bval); boxDestroy(&box); } snprintf(filename, BUF_SIZE, "%s.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pixd, IFF_PNG); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixs); pixDestroy(&pixd); #endif /* RENDER_PAGES */ } boxaaDestroy(&baa); numaaDestroy(&naa); sarrayDestroy(&safiles); return 0; } leptonica-1.70/prog/morphseq_reg.c0000644000175000017500000001114012240302766015312 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * morphseq_reg.c * * Simple regression test for binary morph sequence (interpreter), * showing display mode and rejection of invalid sequence components. */ #include "allheaders.h" #define SEQUENCE1 "O1.3 + C3.1 + R22 + D2.2 + X4" #define SEQUENCE2 "O2.13 + C5.23 + R22 + X4" #define SEQUENCE3 "e3.3 + d3.3 + tw5.5" #define SEQUENCE4 "O3.3 + C3.3" #define SEQUENCE5 "O5.5 + C5.5" #define BAD_SEQUENCE "O1.+D8 + E2.4 + e.4 + r25 + R + R.5 + X + x5 + y7.3" #define DISPLAY_SEPARATION 0 /* use 250 to get images displayed */ int main(int argc, char **argv) { PIX *pixs, *pixg, *pixc, *pixd; static char mainName[] = "morphseq_reg"; if (argc != 1) return ERROR_INT(" Syntax: morphseq_reg", mainName, 1); pixs = pixRead("feyn.tif"); /* 1 bpp */ pixd = pixMorphSequence(pixs, SEQUENCE1, -1); pixDestroy(&pixd); pixd = pixMorphSequence(pixs, SEQUENCE1, DISPLAY_SEPARATION); pixWrite("/tmp/morphseq1.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixMorphCompSequence(pixs, SEQUENCE2, -2); pixDestroy(&pixd); pixd = pixMorphCompSequence(pixs, SEQUENCE2, DISPLAY_SEPARATION); pixWrite("/tmp/morphseq2.png", pixd, IFF_PNG); pixDestroy(&pixd); fprintf(stderr, "\n ------------------ Error messages -----------------\n"); fprintf(stderr, " ------------ DWA v23 Sel doesn't exist -----------\n"); fprintf(stderr, " ---------------------------------------------------\n"); pixd = pixMorphSequenceDwa(pixs, SEQUENCE2, -3); pixDestroy(&pixd); pixd = pixMorphSequenceDwa(pixs, SEQUENCE2, DISPLAY_SEPARATION); pixWrite("/tmp/morphseq3.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixMorphCompSequenceDwa(pixs, SEQUENCE2, -4); pixDestroy(&pixd); pixd = pixMorphCompSequenceDwa(pixs, SEQUENCE2, DISPLAY_SEPARATION); pixWrite("/tmp/morphseq4.png", pixd, IFF_PNG); pixDestroy(&pixd); /* 8 bpp */ pixg = pixScaleToGray(pixs, 0.25); pixd = pixGrayMorphSequence(pixg, SEQUENCE3, -5, 150); pixDestroy(&pixd); pixd = pixGrayMorphSequence(pixg, SEQUENCE3, DISPLAY_SEPARATION, 150); pixWrite("/tmp/morphseq5.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixGrayMorphSequence(pixg, SEQUENCE4, -6, 300); pixWrite("/tmp/morphseq6.png", pixd, IFF_PNG); pixDestroy(&pixd); /* 32 bpp */ pixc = pixRead("wyom.jpg"); pixd = pixColorMorphSequence(pixc, SEQUENCE5, -7, 150); pixDestroy(&pixd); pixd = pixColorMorphSequence(pixc, SEQUENCE5, DISPLAY_SEPARATION, 450); pixWrite("/tmp/morphseq7.png", pixd, IFF_PNG); pixDestroy(&pixc); pixDestroy(&pixd); /* Syntax error handling */ fprintf(stderr, "\n ----------------- Error messages ------------------\n"); fprintf(stderr, " ---------------- Invalid sequence -----------------\n"); fprintf(stderr, " ---------------------------------------------------\n"); pixd = pixMorphSequence(pixs, BAD_SEQUENCE, 50); /* fails; returns null */ pixd = pixGrayMorphSequence(pixg, BAD_SEQUENCE, 50, 0); /* this fails */ pixDestroy(&pixg); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/baselinetest.c0000640000175000017500000000522512242267062015305 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * baselinetest.c * * - e.g., use keystone.png as the input image * - to get plots of baseline locations and other derived * parameters, set DEBUG_PLOT to 1 in baseline.c */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; NUMA *na; PIX *pixs, *pixd; PTA *pta; static char mainName[] = "baselinetest"; if (argc != 3) return ERROR_INT(" Syntax: baselinetest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; pixs = pixRead(filein); #if 1 /* Test function for deskewing using projective transform * on linear approximation for local skew angle */ pixd = pixDeskewLocal(pixs, 10, 0, 0, 0.0, 0.0, 0.0); pixWrite(fileout, pixd, IFF_TIFF_G4); /* test baseline finder */ na = pixFindBaselines(pixd, &pta, 1); /* ptaWriteStream(stderr, pta, 1); */ pixDestroy(&pixd); numaDestroy(&na); ptaDestroy(&pta); #endif #if 0 /* Test function for finding local skew angles */ na = pixGetLocalSkewAngles(pixs, 10, 0, 0, 0.0, 0.0, 0.0, NULL, NULL); numaDestroy(&na); #endif pixDestroy(&pixs); return 0; } leptonica-1.70/prog/test-fulltrans-alpha.png0000444000175000017500000000040412047007135017227 0ustar dandan‰PNG  IHDRÁQN1›tRNSv“Í8bKGDÝŠ¤ pHYs.#.#x¥?v8IDATxÚíÁ1 õOm O ø†Z <éF%tEXtdate:create2012-02-16T04:31:19-05:00ú†Ò%tEXtdate:modify2012-02-16T04:31:19-05:00‹Û»nIEND®B`‚leptonica-1.70/prog/pixtile_reg.c0000644000175000017500000000644512240302645015142 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixtile_reg.c */ #include "allheaders.h" static l_int32 TestTiling(PIX *pixd, PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap); int main(int argc, char **argv) { PIX *pixs, *pixd; pixs = pixRead("test24.jpg"); pixd = pixCreateTemplateNoInit(pixs); TestTiling(pixd, pixs, 1, 1, 0, 0, 183, 83); TestTiling(pixd, pixs, 0, 1, 60, 0, 30, 20); TestTiling(pixd, pixs, 1, 0, 0, 60, 40, 40); TestTiling(pixd, pixs, 0, 0, 27, 31, 27, 31); TestTiling(pixd, pixs, 0, 0, 400, 400, 40, 20); TestTiling(pixd, pixs, 7, 9, 0, 0, 35, 35); TestTiling(pixd, pixs, 0, 0, 27, 31, 0, 0); TestTiling(pixd, pixs, 7, 9, 0, 0, 0, 0); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } l_int32 TestTiling(PIX *pixd, PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap) { l_int32 i, j, same; PIX *pixt; PIXTILING *pt; pixClearAll(pixd); pt = pixTilingCreate(pixs, nx, ny, w, h, xoverlap, yoverlap); pixTilingGetCount(pt, &nx, &ny); pixTilingGetSize(pt, &w, &h); if (pt) fprintf(stderr, "nx,ny = %d,%d; w,h = %d,%d; overlap = %d,%d\n", nx, ny, w, h, pt->xoverlap, pt->yoverlap); else return 1; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); pixTilingPaintTile(pixd, i, j, pixt, pt); pixDestroy(&pixt); } } pixEqual(pixs, pixd, &same); if (same) fprintf(stderr, "Tiling OK\n"); else fprintf(stderr, "Tiling ERROR !\n"); pixTilingDestroy(&pt); return 0; } leptonica-1.70/prog/livre_seedgen.c0000644000175000017500000000544312270122643015440 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * livre_seedgen.c */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixd; PIXA *pixa; static char mainName[] = "livre_seedgen"; pixs = pixRead("pageseg2.tif"); startTimer(); for (i = 0; i < 100; i++) { pixt1 = pixReduceRankBinaryCascade(pixs, 1, 4, 4, 3); pixDestroy(&pixt1); } fprintf(stderr, "Time: %8.4f sec\n", stopTimer() / 100.); /* 4 2x rank reductions (levels 1, 4, 4, 3), followed by 5x5 opening */ pixDisplayWrite(NULL, -1); pixDisplayWriteFormat(pixs, 4, IFF_PNG); pixt1 = pixReduceRankBinaryCascade(pixs, 1, 4, 0, 0); pixDisplayWriteFormat(pixt1, 1, IFF_PNG); pixt2 = pixReduceRankBinaryCascade(pixt1, 4, 3, 0, 0); pixDisplayWriteFormat(pixt2, 1, IFF_PNG); pixOpenBrick(pixt2, pixt2, 5, 5); pixt3 = pixExpandBinaryReplicate(pixt2, 2); pixDisplayWriteFormat(pixt3, 1, IFF_PNG); /* Generate the output image */ pixa = pixaReadFiles("/tmp/display", "file"); pixd = pixaDisplayTiledAndScaled(pixa, 8, 250, 4, 0, 25, 2); pixWrite("/tmp/seedgen.png", pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } leptonica-1.70/prog/chars-14.tif0000444000175000017500000000703412226572724014515 0ustar dandanII*^ & doÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþC 3¿ÈqÈ0ä2A¦üd<,-ÖAVÙ2D6øI²ÑiòÐAªd4æCjÈCV7&ADÈi~PŒÁ ¹†¨=[† ƒ  ÂX.`ƒ×Á@ºn–’n©6 š}„lƒáõHÞ^ &ÕŸVC-ÕPM…A„Ö-A7þXuº :I6RM‚=ÑâÏð•$é7þ–u§ÕÓÕ[ApƒpAÖ\‚˜+i7ÿ^•Òô•ÝUpºzm]*JŸU_õõÛ ê­Âé´¿ÒõÖÿëþº¤°Å«ÇýÒô´¾½ë_õÖ» zþþ—¥ÿ¿]õÒ«ä!kÒëÿÒõÿü}tª°Þ¿ñÒô©+®üƒ"Oê­$»§vñëõ×üˆýµ]*WJúÿT¾’ºÿO½ê!îê¿T¾O×m/õ bÈïí%Šö¾¿ê¼=&Wý×xm*ªÚ½T’ôÒ%Ü4µÿ¦ B\‰Zãÿô—Åá“ßõñ iWwëôˆf¸M.pžj×ÚöS†Ü'÷ _øƒ]Ó¦¯B»‘½šxõúW]:JØawðÚœ“³€Oõý)m-§„P͉}~¤t Œ0Ößúþ„7âÜ'¤m¯ëeæ¡Ý7ù€" µ/é:_¶©Úü‚ºL=+jßÿ_¤Úýt®I†Ö®¯ý/õë}Õ&Çÿéuzòѯé:@iý-þˆY7Zooük­-ÒÒÇ_¥öÒýKÿK¯Òý¿úoëzõô¿  ÿ´¿]t¨ƒV___I}±O]u¤A©þž—¤¿ÿýõ×ô´²o¯\‚¤1º¥Óoù k Hôþ“Ö«éi¦¿Öë·~ ƒí---´ž’m$µ]oI+î]&¿¤PË®ÖÿÐ_uÞ–ôØA’wÿ¦ëC´·IÒVÒ ÷¤“i0Â9Š×­]$Õ†NA6’V’_]Aá-°“ëZ¦H†ZuˆD†E0Òà ´×†"Aˆ&i¿¦•ŠúØLBIŠ  ÑLCZCˆ0BÁ† C 3¸ˆ¾’ˆˆˆýÕ~êµ÷T¾é%^ÚÒâÝ(úP¶ÒºÝ,Gÿÿÿÿÿÿÿÿÿ f .@ðÕ †JР: ( xf†@Y9rQÈ7r ÷É9l:ÔPCT h À€d4VCÖCÅd1Y¡ë Ò‚ Â7 †brjÈj'!˜¬2È=d2Q">2 L†Ž ½( à‚l0ƒ †d8 ÃA„ Ò†ƒpƒ´0Á„ †xa4A Òa¤ÖëÓ<í„f<Œ:r 0õ„f/ÀÁÊà`ˆetàežÜ6C*3ƒ<„f#!›„%Àœà.``°aht«°ŒÄ 7!&" cby# ¼ Aéªj’«Jôn  @ÃÁ°‚ L<>ôý=Ö`6.`m߇AÃáÿú ûÐMí ›Þºÿ×Om&ê—H8A{i>þUÿ¥ÚÞ‚ î‚ í¤ÿûuûi:Z]6“û¥íÿ¤ÿú_úOÚOëõÿê“ÕÖ—ôÚ0¾—·þ—ÿ¥Ì&Œ,ÂzÞë{×ÿ¶¯{jéibé7ߥ÷ÿÿøKÿÛÒoÒo×ÿúÿIµë x¤ôÿ^øâ—ÿ¥í¥íûþÿˆãÿhÂíÓЮûôCÛk~£ß¨ÿéûzWé_ÿ¶—ÚV•¤–$ ›:ú­þ¿ô¾Òÿß÷ÿÿz÷WÒÂÃ\#Ìí[Õ×ÿKßöõú_«ý´µon­$²ŽL$‚ÿ¯¼ƒ¾AßÿÒý/o¯êõÿûô´›J´Â0×I­'Ò­ÿëÿA{·÷¯é_ÿ¤ûizé„a¥¯÷„—ÿ×ÿKô½½_¥~˜¶“÷ÆÚIx A†’IzO„ ÿÿÿKÛý¿ô¿ I«ÿëÚt’ð‚ 4º¯¸ÿÿãý/Òÿý/ÂLÖÿtµtš¾¶‚ƒ@a¥¯×%ÃgãÿOÛý¿ð—æC"O÷ß~é.ÐAa‡]z¼àÿÿñ¥íÿ–à˜þ—·zX„ij©wƒÿ8ÿ~ßíÿÂýÁ¿ÛI÷«b’ÂAƒA}i>ßó€ùÀÿ9¿ÒöÿÇöÈkÕÿõjºXAõýíýÿû~ßÿÿîATÿºV¯£ µX@ƒiz¤“ïÿÿÿ·ú^ß`ß÷ÿû¯=}q}Þ¿öCFŸû~ßíý}m¿þéZI7¥ß·é{¿ÿ¿ÿ·ý{{ûûoûi{é7¥Ãýiër]ÿ·í¯·ëÚîÿÿW¯Ö 0‚ouJ`zý¿þßÿý××ïV½SzXa„·r:¤—ï׿ÿ·í¥íïÿ·ÿjûªW®2 `A;a' mýÿßÿ·ÿí÷[u·ý=i^¯¥†+b¢‹´¾ŸK!÷ÿöò´½¿_]² Þ½mÒoH†ÇÃa¦[zÞ—÷ÿíþÿ··[uÿßñ½Uõá†!ØŠKôÞ¿·ÿá¿â½½µívÿÕê£WÒònC2à ˆ6Å­>­é~ßÿ°õßþÒÞ¶ô¶ê7t¯_A‚@Ã$ÛK½&ô¿oÿÛþ½´¶ÒÛµíz¥}/O A&ÚKé0Èl|%®ÃÿöÿvÒØi]„šúoI~ƒ ¶J›Á&Kì?ÿoK¯v[imà l0—é_Køx,0a¡L*¤Ø0©¦ž›hiºi» “a„“nI6*šum4>’ ¦(‚€ÈcTbAh ÅaŠ!ž²²¯!²¶ )ôÈJˆcL1D2« ¡„C*¶!i­§èƒ!•Zíaá4 ¢œD ipÉpQÿkÜ0Xb°°×ôÿˆ0B"AP1 ªˆâ"8ˆp`„!`„.œDGQ¡ xj؈ˆõ„¬ õ¤¥F=*A)ÀØ‘X1Aº¢é\!Çÿÿÿÿÿÿÿÿü†ÑA0T¿²O H <7‚†¤Ú‚ 1dà†”~@ð7‚ 3 x4ÍHÌàÓ2³KaóÁšˆ5âABáH*Að*[}=¤A›ˆ |‹¹®M2 ø†¿Wþªîw[w]¿í/Qÿÿý_Òúòa˜ÿÿ¶¾»Mx_ÿK¯ñ_ÿÛ_ÿÿý/õÿÿýµÿÿÿÒëÿÿÿIµÿÿÿÿÿ%þCSˆ| Ùÿÿ¤Ü¸i\”Èjy‰ä ×=A¢Œ‚vC. Èf ƒ\È5A)Ô¡7 ^ aÈfÁÜA w!­Ä..ÿüB0@ òN=0P]r =4ÁS ÁB‚ cÈ~òÑHD×ÿÿI°ž˜P¡0ÂFÈêS!°àº‚¦™ M ÁB H0uF肃>ðH0A´3àà¦ÿí„loL#…àè ØI&´`ßè/FÝ7£Â7¦±V©‚ûïnªKÿÒè>Œ  ƒ ÒôŸA c7Í,‰†Òrñ&È(Ä`V‚ £'R0‚gN´ÚN–—ÿíï›I¤&ÈlÅgÀ§ý.˜¦âž›ˆAÒâ]¥È(Ͻµ¿ÿý.®ƒ¥¤ëõu„UÕ«ÓitîµK®©/ÿÛw¯þ›ÕéÿK¦žoסÿÝ[öÒuÒü‚ÿ¥¶“®¿ÿú_ÿOM¯V?õ£ Ói] ImÌËþ›ÿÿÿýÿýý}ÿkÖ½:Ò[„  º¯ÿÿéúûÿûÓktÅz¥°Ð4¿!ÿá¯×ü_ÿïë쟿§Ún’¯FÌ0—ä2y›?øû_ûÿÿÿÙÔ ýÒý}Raácü#Ãÿò Þ¿çÿÿÿØÞÚMÓwI7ô_ ¿þp5ö—þßÿÿþýÒým×}$¯ÒúÿØa/ý¿ÿþ¿ÿõºúJý¡ý/ÿö!íÿÿÿä5éýý>‹¦Þ—ãú_Ýþ/ý¿ÿºÖü÷IµÒVõKÿÿKûÙ€Öÿ·ÿÿ×ïýý7¤÷Iÿôî¾—þßÿ¿ïä2Ýÿtµô­ÕHwÿýu»ÛÒÿÛÿûKJÿý}Ž)&ú¯ÿõé¶××ÿoÿßë_¯Xªum½/ÿít½[ ãëÿ·ÿö•¤Ú÷ö‹«ýqIÿ¢þ †BŽÚ[kßþßÿ·PÒ°Œ/¥e¼4¾©&Ý%ÿöÂ\0“ + %°Âò\ ÿØþÚP †—ÚQLU´î­Ò¥ÿìBƒˆLS' ˆ1¬2 k4 A‰5lƒêC›I8!ÔC@ÐJ)ˆY*†v¤á•ðJCÿúÑ;Xamÿì.¿Ø…5ñ ¦·¦©ßÿð„ 0„0BDq`„DDC9X†A„4ø?â""!ñGÿôƒÿ_øIÿÿòà_ú_þ—ÿ×ÿþ­¯xõ_]pÁ?ý[^H:¯Óh/¦ê½Dq/È㥶•}®ÚIz°Á"ƒO ë B„2 µV!ö±ÿÿÿÿÿÿÿÿÿÿÿÿþ ¾ttV  (ÀÀleptonica-1.70/prog/seedspread_reg.c0000644000175000017500000001372612240302445015601 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * seedspread_reg.c * * Tests the seedspreading (voronoi finding & filling) function * for both 4 and 8 connectivity. */ #include "allheaders.h" static const l_int32 scalefact = 1.0; int main(int argc, char **argv) { l_int32 i, j, x, y, val; PIX *pixsq, *pixs, *pixc, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixsq = pixCreate(3, 3, 32); pixSetAllArbitrary(pixsq, 0x00ff0000); pixa = pixaCreate(6); /* Moderately dense */ pixs = pixCreate(300, 300, 8); for (i = 0; i < 100; i++) { x = (153 * i * i * i + 59) % 299; y = (117 * i * i * i + 241) % 299; val = (97 * i + 74) % 256; pixSetPixel(pixs, x, y, val); } pixd = pixSeedspread(pixs, 4); /* 4-cc */ pixc = pixConvertTo32(pixd); for (i = 0; i < 100; i++) { x = (153 * i * i * i + 59) % 299; y = (117 * i * i * i + 241) % 299; pixRasterop(pixc, x - 1, y - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } pixSaveTiled(pixc, pixa, scalefact, 1, 20, 32); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixc, 100, 100, "4-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixc); pixd = pixSeedspread(pixs, 8); /* 8-cc */ pixc = pixConvertTo32(pixd); for (i = 0; i < 100; i++) { x = (153 * i * i * i + 59) % 299; y = (117 * i * i * i + 241) % 299; pixRasterop(pixc, x - 1, y - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } pixSaveTiled(pixc, pixa, scalefact, 0, 20, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixc, 410, 100, "8-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixc); pixDestroy(&pixs); /* Regular lattice */ pixs = pixCreate(200, 200, 8); for (i = 5; i <= 195; i += 10) { for (j = 5; j <= 195; j += 10) { pixSetPixel(pixs, i, j, (7 * i + 17 * j) % 255); } } pixd = pixSeedspread(pixs, 4); /* 4-cc */ pixc = pixConvertTo32(pixd); for (i = 5; i <= 195; i += 10) { for (j = 5; j <= 195; j += 10) { pixRasterop(pixc, j - 1, i - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } } pixSaveTiled(pixc, pixa, scalefact, 1, 20, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixc, 100, 430, "4-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixc); pixd = pixSeedspread(pixs, 8); /* 8-cc */ pixc = pixConvertTo32(pixd); for (i = 5; i <= 195; i += 10) { for (j = 5; j <= 195; j += 10) { pixRasterop(pixc, j - 1, i - 1, 3, 3, PIX_SRC, pixsq, 0, 0); } } pixSaveTiled(pixc, pixa, scalefact, 0, 20, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixc, 310, 430, "8-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixc); pixDestroy(&pixs); /* Very sparse points */ pixs = pixCreate(200, 200, 8); pixSetPixel(pixs, 60, 20, 90); pixSetPixel(pixs, 160, 40, 130); pixSetPixel(pixs, 80, 80, 205); pixSetPixel(pixs, 40, 160, 115); pixd = pixSeedspread(pixs, 4); /* 4-cc */ pixc = pixConvertTo32(pixd); pixRasterop(pixc, 60 - 1, 20 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 160 - 1, 40 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 80 - 1, 80 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 40 - 1, 160 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixSaveTiled(pixc, pixa, scalefact, 1, 20, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixc, 100, 600, "4-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixc); pixd = pixSeedspread(pixs, 8); /* 8-cc */ pixc = pixConvertTo32(pixd); pixRasterop(pixc, 60 - 1, 20 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 160 - 1, 40 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 80 - 1, 80 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixRasterop(pixc, 40 - 1, 160 - 1, 3, 3, PIX_SRC, pixsq, 0, 0); pixSaveTiled(pixc, pixa, scalefact, 0, 20, 0); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixc, 310, 660, "8-cc", rp->display); pixDestroy(&pixd); pixDestroy(&pixc); pixDestroy(&pixs); pixDestroy(&pixsq); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixc, 720, 100, "Final", rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); return regTestCleanup(rp); } leptonica-1.70/prog/dreyfus4.png0000444000175000017500000005377510256452147014754 0ustar dandan‰PNG  IHDRIÑ•|0PLTE???¿¿¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×Çz IDATxœí} –¤:’,, @ŸB Iû_Ó3s ‚ÈOuÕ­ìžygš™®[•†Kr7ÿÈÕäÿ®½ùŸFð;×QþÜõå~Ç¿xÄߣ|Î?€ã××?F™Ê¼;n?õéí³ÿ\æÿ %¾Õ,ýÑåý±„}nòÞ7Kj:ü¦ëö>·9¶CØ]”ß ¿°·Ãeîsoö9ñ/ùÙ§„ý’óÑg@›ù‰¼ôyÈ‹{òïühú@yì=õ¹Ù³]’k†ÜÍÑÌûÞ»œ[`%J ìeÛÿ Œ¹”힇½MÌÀØûyÏPBÄÝ#wfŸO”ý%ú"¢œ%72⃌øvµ»=÷íÞ_#þAþSY6ÀÌÞïóî°4 ˾“,»ãÄ_P6X=©;ÜcøÆe4y P-šÈé“ V÷6ºþáñÙ~a¢üÿåøú/ÊŸ»þO¢Lž«È¸½é£L&lÛ†ÿý4—û)”‚«åÉáuâ_·Ÿât?‰ì ¡.EªüÓþÌÍ e¨¥.å'–ÿ÷¡|¶å¯[ýùñOÍÏB Ûݸò×Tÿ› ÍãÜýÇPæç£ü-9WLùÜý§PšØœ~Ï…2›àäæ?†2,—ÒY^òS1þÈÝ ¥}±²åvóù‡„ùC(EI–k}ý4ÐÿÈõSóòõ×à<Üÿñ×Ï ¼´O~7‹Çü36ògP^s1mÙÝñø‰»ÿJ øf\˘ÚqÄ_d©¯ÿ4R¶û¿~hÄA+m½ïêä!Ài?>ì÷/¸r÷¹ò3(ãQ^ñ-°áþÕ$y¹{œ?ÒêSøo¾‡2Yý£;eºM–@I ¹yÎÊÍp¨M£ÊHÞ>ÿ HùÓ¾Æü'P†øš•…ÙtNÌøOd)÷ /Bð(£{M>ë;þ'éPVÍÿlùglì¯þȈËàrf*?ò,˜ÿhùˆ?òúæO¬è!‹?pëÓƒawø ú iÿJ`|}óg4Æ6À2®¨NbꉻŽýo^I)Y7§_^ÓOù)Û)S€Ó¶aì÷­Ï±ƒŽú¶žÆíÐ]~êF‰{D eÄ,±Gÿ[K'šŠj 9ÚÅÕ‡û„þ9”1(Y•Pë>«#$yàe|¾3è±ÁÅ¿ÈtqG_~¼åû+þ`Æ€ppZòïA'«°äI?¨œa¾^F±±~hH¨Ò\éUØÞÞê÷Pþ³1ÑQä\Œ½.™ÑA¬¨þâ+CÓtÂt…<!æÏOü¥×îœÔÍÎþV£‹ï%3šœÏª(IŸx¿8?åަëgæ[˜õØ`rØKˆ¯EþeWfîRÙÈÌ{³â,HZܬ.M.?Te6h·tºœ‹vq­–…ÍB¸=«P=Ç%Ý8©i}l:¬ˆÐÚ º"”ðâ—(ëtÀç—Û㜈ë5ä±Ó…·JËe Ί¯M1o‘ÌÒh™‹- ¼³G‡õÏù^n°\VV´ynÜãhÚauêÏ5`^þÊCæ ç°)ŸL‡”_±”ÝƒêøÆ0ƒ‹_ÇpÐÑfñ&!è–w‡^ÇÄ{:“›ØBS¸Í”ù™©Š#bniŽËÉ‹oW5íó¥„~Á‰ k}BaÈ££@ñJÓ e‡B¹cöšZ¼’®Ë‚ÒÿjiƒÍÜæ}ˆϯƇ‘X’ûèCjø<§Úu^ó×G”UÜž¢ª¥@×…—g ËKF#ÒŽ6­ðAÇöH$˜A4ôŒŸdÝj“GÜч¥„°9]yÑsņƒg›Gó€5pŸ„ùå©¥Å8'm rÇK¯È'FM!Ó©.ˆÆ3û蘎l¬ÜdÎ&T¯ÃÛ.|o #$²ÌÕ®®uc³ÏTL>Œóf]…w¸sð?¢<5ލ­.ö²„ðøAoe¶ïRTuÈÊ j€,!|¬ÎPüm=ÚÛág²úôËîÉBÒQD |‡¢a¤V9zU\æÍ‘¿EyþðÃr.o4W%Μ°T-z“X¥¥ß[è&™nøåLmy`öÄV¾cö Ž’+¯KÂÜÜh<â°ÌD¡©ÖõIö[”uòj·XÄÑ8AÁ¹/ø3@·Þ>)Í¥Ÿ&v%‡¡ºHˆ¯à-¸t·ÁðÍb^RHåŠyé½I›KJÜ9Ñ)ñ4àë÷( ˜è¦YçÃG†.<4ýËcåM8Á‚}rIªùù°½¢ÞlÞm¾âþ\Wy˜¡G™7·˜¸!Þ`”gÙÌ2X«^÷å¹Ñ»bÊ7žÿ ÊB¤ð–)Œõ£§m‰ç@” %”w½ßQnTôC~*®0ËZMFã¶àê½[ÏT[¬ë„)ŽòN¬ˆ0 [ùç7(—|ÿµÒe¤çÀw÷ó ¥ŒøDKX_˜T¢†Ô)ö+T”_úÔ*Ýfzí¥ã¤8WÆ2ã"wѺˆ—õâ!§s±=/ãd)G•íÊϹå‡b_DV ‘?†ŠÞ 4ç\i"Òòž¢d~s€wòECÄ8ÛXJÁƒ•SϧRÆ ÀôÂ’l± Õ²}R4QeµšTlO.3Wuk(-M±kØô#7:?·fÎ2Z.–·ª£W3€_µ\ÞîÌ®˜6»³.Æü£ 5ïøØ ú4e¡_£At‘–›Þ™øúÜ\qí›<ºçÒs‡W™¸¦²Îô0Ê;=©{ø·ÛÉ“| up¶¦› >KqL¤t‡ƒ DØLcN-÷%ʼ$þÎɰ(féd‰|*䃊IÞ3Î$±± %dçà<P×:&{ö!BËœŒ¾£1ãáÀL°Z”ÅW}ê(K¡™¢¯âÉö?s"q”ŠÔb1˜ày¢O”X°{Ó9 ÍsÌ ‚ÇÖiiH0Ý>Õ÷×xY. ÙÊœ-l?ÿ¶4˜‚†vļÝG{LKN¾Þ&kè”i&%ØåƒZyJ.µ/( åZ=x›MŽÊÏmÉnÐÝ - |×*þ+è ÖHpÚŒÚ1“–LÑ‚Éîà–ÞDµem†™Ë)hqÍ0—aÞ^šâ3W_¨O"fئþµ>Š%qFÛ2[(Æ]¦[€VÑâÿ ×=Óâ˜ÃÍÅ#ZÆÆNTÜlª”ª·a+£1·æ¬¢.–/r­Û„—þÎöà'­,48h 1é“+<Èí¹, yc«e™À«R¦ ñ ùÊCÉ_ Ž1/bôÀ$5äaY\2«KÆ´É*¬q+6¥0ø)}£/9ØôIjü]örâ«@Tù¡s!6ÁQšV¨!Ȳ!£úmøXçYgf5‰Š%–'Œÿ|läJîÈÓî0}­+_a nߢôpáÖ@·Ê¨Èy&ï»pð™°Ó˜Öàm\3ÊšµS¢ßC1O5ÈàDžKŸµîüGßAC¢F¤N»«¡,¼ùahÄ]Õçåü_^äg”-V ”‚Æ6iP‹¬ºÞðÐöP³ärRXm4C¡.ðX&tÇðèöç[c8ÃÐÑRSS`«y´€K§Ùè„Oµ‡‰‚œUA‡+Ú?MÆjêáÆ“Mщ‡ÝlâŽZ1Çѽ‡(¾D nkªõ hGã’EÍQ@+³Þ‹j¶ ³\4Èe7F+~ŒyJf¢‡‡\F‚C©Êá_ëbÄ‚úbÆ0u}|‡3xoXmñÞcþ ”1zt|±è¨á—BhZRê¡æËÀ§Óð¸ÃŸzÜî Ç ²Ò[‡j«âÁˆCc¦'sÖ˜uþÇé²€"GS¸~Q“\œß¸¬Ìع¾!§ˆÙUÈMåY‚‡ùÉá_KHjM,ÉÁñÞ ´{b^1m±¼–®>ç˜òk<ú€×…^¯Ì?£±7¸µè†©S³Ýê>¢¬!ÅSzÉ=·#µmêd,É˦oÓ¶ˆö†v¤ÖÃðrûû©ÛV~ú€ušò+Ȇ·‡Î‰‡¥æª•ú¢Î²y€þŽO’H€ù>×ÎpœÃRYM o+¶%|Œ\^J(h=¶žNöœEæ4c’Á®><›G{uäPB|¯Ødãh³Ä~—ú‰£¸#åÿ¿A¹_÷ÝçÙáÖ¤;ˆ’¯=;ÌT8êeUDÍMzΕÀ^·éa 3lªÚºáñvg* û…·:N†Å0¾³‡~qœMˆù(O ÚE¸éÄâd±@üï¤Ö‘îÊR2ßæ‰Éà´ˆ ‰cŸm‹åçþØÆ{Ü|œvaM|“‘åçñä÷4h'&;ßJ­oç彦<ªì(©5ÌÚ JX‰Íö1XÆÂ-Ê`%.6Ê‚4#kþ[ÒÞßoàóT¼ö–aÜ7ºXO=Ö¡<]§*ËïWÏ[a Ì…JÆ{0]5Éj>°x Îh˜e… ºY#¸´r=&àÒúó=†¿ÃõÕr {>Å"t°TVDD]–QÇp}‹ò=M¼7PÚàÂïKduú Ò'J®FÜ ¾@ ¢æMÇÂ@¡ZVó‡ŒÁ1ï}í~µDÉYô³R´•Å“*ÊÕ~?âóýŽLozƒç•¼àÆþi¦Ë¼–è(þcýöNa^- Øì³‹Ãc©±®ÊÞ,n3\J‚ ,ŽëPp£éð¸,Ä$eþe|Gõ1Q7°¾ÌØ=ÁÉ3˜~ ±%“±yñ‡A=µÊ5aZ´!R]·Ñ9f°% ç­ 4ÁX0S_ÃFÊÍN”ƒÛ¾[ãë½¶•º\%&4>0ÍL–”±•[B-1êF»Â¬½Ò2²ì•hÇ<1¸uâ9âK¤Û}= Ê+å+à¿Eù¹Â¯ã¤‘^ Ì3æçÊxÂʃAiPÕh®ª»þÑs†Ú彿žãv²ñ"X+‰ƒ#žE\Q·EåÏùT? |óoGü£,£tCæbÞÁAÖaÈ žéOßÁƒÛ_¡”i‚ÃøT»“ý[&½æLà Xâ¡% ;Fa@ Ü´…¿l·B!Œ ú‘eÉ ¥-׸}‡Ù>‹áKvgqeLÐ/'J3Í8½ûCeÝù&Élqº£±õxp„ãn˜‡(¾UœÏú?~î6²ï(Cþx‰a;3ˆOãžd°Ù`>j/±v,S¾¨Vš|ip ÉCüøl°”•a B`fX=) m†‘¡C€LÈQåiɾ“åg”°›?ꮽõÙ>ÝŠ…Tìi ezä#éyÝ +òʽ†º&Ó¶îpŒým;弤ދ¸Ñ”ÏEÁÈ\oX ÁûŒ2ù°»Óµ¼eÐc»Nç_‡¬°É5´¹¶s‚22â±c˜Ëg¯å ×?U7>Kè¯ÛÀ‹Dl±×r·HYNEDœYþÀõK”«Œ5jcjæ†R­'Mƒ-´¼ÇÄêùâë‰Ræ'ñÌ¢†èû¤(šÎBóÝ^„•žŠ.1[§á®æ4&qÉ¥ðxèø/5U#¶ ¶µÇkm&¥ÏÏ ¬(c!xVt"žj^()]•œÚNè&™“­g¯‡øÃq‚‚’ѯqp tñ5Ä7ùåK;ê«‹[ÌVç%ÃEìTPLýÕò…Dç à13X"ÅDç Jy(Œ¿n•ðu&[žâ6À%gúÝÈŽO$ž›n`u×X䇫ÉVd®J]_ ºH{}}ôð<­_­Ü`I Ÿ0° øÝ–ö9Iâó—~]Ù܈’#Ïø­ðCöÕ¼,(Ëêbûi½/3c tÒÓ½"è¹”RȪJ:>[3‰õ$—Ũ´Ý ô| „`"ʧÝ\òDl[ºq{¿¨ïQ–‹Q¦£ß©—$ÜÌ<¿×jŸM³ªÀœÄÆÀa‚ÁãT[/wgÌsÚïa¾rNÓ†õ‰Y¹0M”n Û€’7ßo(ªÌ_ L%æqs§X!IâBãT÷(±˜kÔ‰{ ñ\NÖðÜ,]·Ä’õëœU 'âòÌD’2‚õ(;)snoúúøÚBú¼ŒJI¥'ÖçùÍ ¦&a'òpóJ4T²ÆÆ¼ ÓŸN>”Šy·õøU: ø,¿ýÉÍÄÕó”è¶+¶ÞÊÍêCþe}.”1Ã6œ_jÊ8ãÅöW)ÝÞIÇʈO[Ñ ö¦üåÞùšÐ*«ÿÁy©ÂfFÕ苉´´§¢ã¼,aÖåàrbx-Ÿƒ(?Ç6âåâЇ>qe˜ãôØÄ¥pU-ñöel5s鮸ýD”“T²”°ÏœÀ)çÄáVIpuþb,¼ìÆWÌ-^*2x†É[0æM JP!ú¨ûhH€ï'Þ m¦v7šÅ5Â23wÎJ2 ‘%_m…­Ò]É~ÔR? à”{-ø Dù1ÊsµÖ &Ë=hVŽÝÑ( µÏ*Érû$È]¨eA~Áá”stæ¼×Ìy YnABÔ@éƒ÷ÁR þ/EÒ€¾÷Úvqô_¢ô§‹’òX"¡˜øV÷`u/¯ö)ú¢ùÌ̪¦‰1_?*)S–ä3~fœë|Ú,óRPnÆC–3FÞnT© c‹€0 zÓp¾–Ïî¾D¹^ó²¬%Mül÷8e}ÀÃç7éÓbåEeÓž/·1ÅÈôŒÜù°ŠÒnð‡,³¦x #5>9®õU’†õ„VO$u×zn_¢|¹{qß]ªÖ»Åð5ÐsáðbmŸÍc»¼Î˜ÿ(kËŸÛ¥RŸ ÃUÚ6ŽæsÏLËØ3$Qnàîw°Éý|…t _£¬£Äy¦b+¼¿ÑLÆM?ê°âH-CØnûwÙí9wÞ—›]šY&A ‚b1c–õìGº½šüh~Š â—(/iCqMYx4î6/|??Ï[« Ëd釧n±/”)­^Låh^Zo|ÐpC«r™¥mżLó€ëðtx¿™[Vº€ÄÈ}{®(”Ê_¡Œ/§TŠ®dºÇQw&émÃrxËj‚½ßo(7”x³p+ÜÛá2`^R÷Ó¦Ùψî±ÊÈXjsLõá$Á%v@)Åð¹‚,¾d©£Èóv‰#ŠdÑí3æ8éÓ½¡ÜˆrcGƒ‹ý7Û”²”[¥sJéÄZÆ“¥Š)ÔrŸÆ4FÒs,Ò…œ?fñ? ”yù”@‚È&ŽKÉ °LÞQå/a°ì%ÜP&&à¯g¡\®ð†gå© ˆ¯^hÓ˜58ÀV ÊR“:£̽£¼ô>Fœ AŸ¬vèÅÓ+3¦„ܨµš¼T”‰Î*G\B_¦ú汎 ¦ÔR§+"3 |ØRž™ aöº¢tBW£AÊ€R1//”ë!!Q3V*‘ïÄ‡Ï ‹]ºØÚTSéÜÜî!KÖRw…ņõÌkز?E|akwâ(Û KŒ–¦Ÿtޏu¥N}ijÞGõ ”Çá¤|`%ž@ÕN® ÌµõZþ¾æ™šð/(á!¤M•ÕÓ0ûi9/Í+Ÿ§uy°ž† Ds~Ŷ›,ùFzìàÑziÒó-Êxˆ¡e±m ' “­eAŠe)ï`´+JŒx(²LMJÁJÙ’`O%ÏÊQ;¯ÖèÎ ÊÔËØûe_›ÐÌ|Á‚™°EõÇ’`¦2â–Q"€eoÙµ_ëóéˆRÊ´@!½¸ç´ZòhÁª¨tÎò ‰•×*L ¦Í£už§;ïøxÝ—ú:f†¾Fy0>€q…ÞÀ'´Œkâ.&0 uÖŸ‰ q‚à€r.,ÓeX =lì—˜ã…r”r£é ‰”YŸ,\8Áã¡k3ò›´4fÒçýYIö•GQW¦g@º Ì%k0 k…½Ô’G–ã€jXIPó¾to=UÓ6gmÖAÓ…d:U|c¯É0lÏè=Ÿ3d8âÆ ô/ÁT­a¢ë?HÌL”ù+”7×È–i[`.¥ð\³V9nr"¬(,àŠÒ(Xˆ¬uƒÊº™©=¹sŽÓôtã¬%¹‰¹…ƒŒ 4xëXÀÃ1ƒ Îþ¥,K9Öù÷ÂÜ‚T,ºêÿ‚rŸË¶žû.zÖëDMu% Ç\/&ä”û‘}xö_8Ñpö„gAy¸ºü,CZ©ÉX¦¾ñZÈ’[6S]ŽÃ8›cä‹”›ö\ùR‰;—y¹wò+°ßÞŠž€JkXv¬ƒk糈”_8ô—Lš¦ ÄÚÄrã…E1qù¬ø×[)8aÄÍf^ÛÞ¯mÚ9sª VÑOŽY°ÖéuUÉMm`¹]ðã`¨w< Ö,Ûæ¾[=Pá’àðDIáA¿J˜È×<Ç#Ì[‰»'\Üë³k§½y:,zÙ}>j‰òÙ×¹ °œ²+)Ÿ¦§Ã¼„ßûã©Õ¿ÌcµI¼oÚíê’"é(SwÌŠéð€{ºŠòº6Ã\ñÒ7ÜÌå‹xÄRrMópŒ žÏÐÃŽ“·b¾ød—†…4ÝŒ0í,i¹ö‚¼k"ðΊ®×¶Øna35VáddF'œ4^(¹ ú2-½ oÃuîê(ÊvhºRV§À‰VRU¡¦ ÙÆh,ôd©¿A)ÞW‡»´‘ú¢ŠÃzÙ(,P²D¸,PJ4¯zþ8î<¡µˆÏ²w«¢WYA–pxGe%rÌeX=irPŒºcæó³gtîÑ.s` xˆnÊËD~@¹ð´'øã’o×¹EŽÏçî#ÇB«Ì7b†ù™@f)Ë:ž…â…ç#ºÌ‡QÄ…4>Ÿ…fV­ ÁŽŽï¶ÜøK^35/óÖòï•;#ÊØ,à¯Ð/guo¥%ÓËÛ`êK\\™#rc!C%>0¾Õ#(k xO[¨÷l”ZþCåÁÂýq š·E yêšvÜl›ÑÊz=´ œƒË]z“%|.–V1-S¹èÿTPÒú'¥1»Ö‚2²|{fIM´‚2 ʽ bÀVŽngI ÷w€¡Î%î€Ùè&x†TnV«è[ãíSy3€ô áÖ¿£Üq˜®¨ô²+é9rb‘Eôç3Hû;þÄè³EcÏѼB™˜¦N—g8R³¹g#áY±NReÈ"Ÿ0Î@É73p½dŠsgtk¢'Ïû_øõÃäœ Eq¥;uí‰]8G—‘%Ë ¸¶ð"‚b+©Bò1q)k}Ò^›¥'»Šõ×½ h±Î²TÔ›¬/¿0\;^î(ãìkZJ®ðcͪøRA,yÇQüÅ…L”: ûÂBêÄÿf ”ß»XÂ’Õñ€ðô¦@“†žá›XkpÌTê%1^…[Åñf ¤Jþº.”4j›îJdÆ9îúöÃõAÙ 6’q mÚe{±g¥ðá>uÉ–(ŸÍ-›¸°v(•‡ „·Ì8±dëeTV[õ=q1Ào® å"v3 ¹In’ÈÙ«ì-²$,ë.Õ*ï@¶l‡HC$›AGðCÊr‘mP%S3%¸ÍÞAç7÷$ßËnNyqë-õ¿òáJ¯R©Vº£ÅÈÃEêW‰ó¶ÔÈQO™QcŠW¶E>hIclÉÏ{«5M;(£`©íÐ*Pn´zÎÔ*Q’ÝúžÒü%•˜ TCGµÈrTîR8܇}̺Yf6}€MŒ§„áØê|+`äF÷ëö†NëØ-ãÐ9»Á¾zY–»9¹F™êÕê¬ù(¡I@âÉ6Z ÕV³&{š³û…_÷°{½pH} “¶¹4­e°î©©t!E¬K×ú±6Mý°I~—®:æ…š‰2HùÛµýå"²lÓ™G –æ™›í?ê±¥[ŒYd»*׸nƒoZæ¢I¥[E”]sPûˆÕ“܉äí´åÉF¹…Ã(vć‰ñ¦‰œ 4ÃØBJãj=CPöçøFs²¤|¹õjhÚ†Ô Öê€Ó*‘hÛÑŽÐeñƒCÍà‹Î6|b_tè(K÷V¬ö/QFAÙ â·puÀ$Œ¿ßƒQµæ–ºí;Ú5’^tÒCI+s°°ë(ýH>cAí°0Gê@ƒé‡Á_ÒÆàåY"Üõ,¾±¿!Ê—…œe'•¨ÁZ”¶¿"¯âŸƒÆƒ¦6pd‚…†G1TÖã$ım½¤¾£IÌaY²RfHÌK½…8C«;3Ã×h~½¶?¡|ÎX=ì ÀÀx)Þ½¸çð On \Ô&J²\’·‡o µØJ>¯uîj(KÿðV·– IÃŽoÝ>`žxÊÒýÈWï£gŽ’^PZpG ‡hºtlƒ¤-å}pPŽ\Ü™û¡S“Ýt­H^%4Óî‰Òùfm¥Ÿ­Wƒö¦ á_) Ï(©‰îäet>q|G‰ù—5ŠQOnTÆÜÑÆ¬Ä Ùò:1: —·¨®ÁmÅ‹ÜM ëèEÌpô”RJûó³„ÒFïã6A n@ ’f·«¢ cc`°Ÿ0"ãÈŸnaNó¡¤$ëŠzœ~~Rµ€bq%K®5^fUã¶*3B¹-Ò÷ê‡Á´X~O–Ü.%h·½h®MD é6%½šs”X=,Ũ¾Òö@C”mL,bì° ¢4”½5,æS~lðƒi|ž‘þ\–µ ,Æ^¿c3àƼ+ÄëàRż„}\àÇ¥qP@©”+$Þïø°Ó|X—F¶»1\=S*Q¥éOù€RÂ.´=Ðê»<·F‰y4¬Ü–-0ž;x«qìÙ·¶°x“‹XJå÷{ï%å4bè#w3k7nÿ£W¶tù÷¯(sYãàµV…ó`“eè…­í0™UÚÝž¸åŽ›†O8üé^òàË÷)>—–(±bX;j í8d¿©?ã×(IA‚!*åjH'¶¬­á‡Ûv¬"˜ó—¦Ù[ä¬G6·‹£%ÁZìÔ‚1(•ø§iiªBþ}£?¡ÌåêÎ9–—±Sík|³”°jd!ƒÁ¼4k‹QÜà‡,e» ÖÄðìãö4f\BA™¶m”’þãëM_ò?ôê¸zb¯u1uc”¸˜›Â+²Ôr˜<%F܃/¦Gì¨5›m¡Ê”Z&V ÊdìB”¿g¿Gy“%QÂôN¥ìl0Q3DdªM;H‰f®ñÅ›}J(o®ù¡y°éŠy”$5…¿¬,¿ªü®7”%²–’3«¶ 'Sñ.]ë­ºO±íríËo®çˆÃû7Ž¥ÒÈFÅ"èÉî+ë,•}:F4¥|É¥d³aø(…T20‘{5˜Û1Cá¬iæM¿Y>Ÿ[9ºÍp3m²ŠÅH”‡û»sÞP2Á휲­(LJÞºA±/ø;= >šÛ²û#(zgq>%¨D};_Ct, “ýUCø7”qhîyf/(NüT,8mÉ&&¨Ž>†)3›ÍÖZFTH$•¼\Éò ÊRÑý‹À¡Ädž‘åxŒ Ç!‡ûûp´¬cÔ‹RarL_¡dVÿ· ¿A oÿ“Á½f% ‘ÝS‚,G3Â?ÛVV„}…Üô¯A~R%í>ýðÅZÞe=ùò °ù”?r}‰2~_ºPbmºƒ‡,aáEaåÿ<Ê/¯ëƒkiê“øhÁ°…Qmåù¿åyXeœjMFÇ,þS4¿ ûzõüÈõû(O…r¦ªž¶éb€3{nñÛþ7 Üá–G[l2é;P.æµ£éÚ™úã×ï£<Ä«HÐKÛd~³'óß_0âàe–Pž_šÚ®í?týÊœ¥™¯ôWœöϯ?Cù?uýåÏ]ÿEùs×QþÜõïF)ÖÉ|e:ÿÄ÷ý”ÈÄû¿>Ÿ€#?éŽâ<¿TƤöä×¥½ëçÖm‹2•êúóŠoÿúâ¬t)ÉS;û¥¼x~Ö Võ÷ÿ(³¾±Ô.–2ލlÐ8Ø™Ïá‡ÉÃEÚÉKX‰ÕùÜïs“ú5ËŽ]Þ£:æÇþœæ^ô÷œ¢?ñ6÷ÝÞ6f±ýðìsöÁ }~.¹‰ÍMß5 v}Û÷â±A•÷}wÝñÜ÷ǺHàçÜ=ÌóýcI?9â›ì•ƒÇ=™c˜áyïLïÙös–œûýÈ·s|ÝCÎ¥îö¬žlºÑ1Â1ãov6±êÍ›‡ÿ·(“V#“c¹Ÿ¹ ú}—ÁJÜ"NPÆÐ;ÎÀcž;VÄŽO~¶õêÚ}xý "¾†fbÑcÛn]ÿåÓe½ŽqšÝ-¦søo)¼ þìbÛõ‹kr÷\Ùø=+;²°§lƒ;üjÕWÏòqn]ða1oàøŸ; ý=Êk z§èžuÛ`üýõ‡¡ëÐꊿ5Ù~ç3÷{þ=Ê!†ß)ÄøÃë¿vüç®ÿ¢ü¹ë¿(îú[”Ûö¡¸Š“x%ÙÖú"`ûvýQmÖ?¼Rø@“eW;ÖQ—ýV'Ýýîò¿“Býk”îo/S²7/JQsš½ùµµ>ú/{Ýý8Ê«¨½Xi¼5]E÷ëýª¸‰lî_göÿzõ„Ë)(2Kjmž@å‚´sÌ¿¬“‚ì/úY”î±ŠÒøF`ò”,7›šö²,›™þý(í5b¥¸:š­ÍœK&8ù Å\ß\3ßð_g)…Rºõý«+ÖƒÎT‹†ÿ³ËIQYhÚ_%ø¤”ù^ÿ”o>çq~òàþ:=|ûûŠr®ãVJˆÍö°<Tº˜ÍoÛ¯DeÓÿM—-›Ù¾ˆá~2•ôŸÔÝýÆ}„²D ò]êj£ nHÎ:ù¾ì=u(­RÙ¾ýºjÛ¾«þ²œJøäãÁ£éJõÖý¡6ò>Ÿ\ª†WiB·Íæ _”Ïχ ·ÕUÝ‘«þ{”Tð¶_ÍÌëåá¦É½´f_™Ò4oN¯(¹^hù“ƒ£jƒK^ÏÙIþm´Tˆ†à{”2RœùïŠ"ð89>'Z#çÈAbÙÛ«áè,k›Îä>6÷} ÂúÞ.Ý.ûëשnmÿm”ÅbЀwaFÍŽ&ü‘œ¬Ç´_'º—©.ÍĄҶémZù4o«GPVpÎs|Õ¾%)€ÄtùPöø=Jù“r|rA6æÉ¶¶*Ïc *Ò‹(¤žŒÂíÖlWꇷ…P7uÔgjUö |üÊÖ•lk9}@õ†ò®ü Ôû'RVv—÷yäIW»œg&%ø’„æzÁXf¦{?s(G¬^j|7Öq«Ý):Ÿdƒuz|Pô÷º c¯-Då­å¦¯ǺU–;ò¼Ï|&=ûP¨1¼ Ø|L:ÎÛW-Šª×rà䥜¢eîv®3²ÝÚ}rí´yÍJ¤v1z…&yöÇ; lŒÙ± ?¶>½©A=¤Zkîè¥[T´±—=ב§•S´¬rõ[R¦O§ßꉥjuµ4χK¡c×"Çš}²áw}öóÑf/½{öIå´Ž•´'ݬ’L½Nh*pÊ9ïýH±—eD1Æ<‚GEî (Uß¡<¢– ×Ò±lƒˆBHnxQ³$gß±3GâV^ç%"l4{$ÊœôfTns¡ÚÅtÛxeC/CÒó(“(\C^#Îûظ¸þ‰¾ß*È$À+¿çR ;{ì¹Ô]IÏÎD&#-xØ>°<…¹*Í9¼Yº`½gõÝå!ŠƒãkÝÌclK_&ÑcX?VYnZáO¦â×ز™GÎÛ#JÛ‡n óÙ/û÷Ç÷˜cæI›O ,=bÎÙTÌÊ<òÕ÷W½P–ãFÒýÑI_Í(嬧%°C$›K%žCõJyÇÓ¬DS™Ù[ÞF÷rÖÅË¿l^xhkª£§ÊtuóЖeµñÜÉwëV¿ÄX5C€¥²u9R«™ð ž ±I ñwœHf‡Jf >„c`g¹Òmá/îF9—ÉŠU„í«}oÚÓÐÌÀ@SRŽ@Ld¯æ¹Í¹’XDaŠ™‘@"w§ó4NN~7÷÷ï(ijÒ‹.<¼JKö¸õ7v•D&‘‰eTÝտ楓˺›8÷ᕕưw²‘­ÝÒfKì+]„Ê ÿa<ξcnFΙ²Ç'}~K[÷5^sÙœÊ>æÒDKkN&NE-çÄhÎ6ZKzÌ7æ°°ãµÌ[”ºâË éUžgOÙÅ4¯=|bU¤ýŒg¯ÚR‹¬™Üj|¹y¬G—#£²t©'$ýÈ‹²Û*ÿx/K잊†æbâi`O<)õ®4\»ë)Œzç ú¤×ìaž(9ÛOîeíêRík0ÚÙ±t¿îˆ«§Ml¤ ¶ÖiíÚ¬_ –ÙÅ4]´¥™äs~ÛQi޶ªT¯q¥plÖj—v)ôú Öo#^,às†'W{æE-l%1w°¡HlÕÈ]†=Ïc+œ8**}(æ°âÿØ2É·/«ï7ú²ö«ž2oŽY^1e¬)¼îK”èÒnOZfѧ¹<Œ®Sy(Ã<¤ùöüîëôÚ<|QðÌݨÖâp${­)aÕ‰‚ÄX:+]{ÂÔ’TW_‡÷c^(§×/bX¤§}äªûYgAéÅ6¿v›wÜ–>­hf}å 6‹†oƒIÑÇpÚnΧ”01LiGíþÑž/?Û‹bbG’w…ùâD0’ºMp6ìD¨˜—ÍÐ}+>ÉlbLb§;“ÛtÒ_ìà@ËÝÙEê±ôÍ­Ƀ>šöätó9oõ ÈÒ”«‚dg¢7ÏçÅ‚›¾8Kùh7~œ­›Ÿ.é°ÜºqQ‰*–ŽM×P¦P0>Øim‘†¸ª(R9r¦Î0™MS’|°¨“Ž[?óYúÌI•$·÷§ïP&JÒә稤°ã1õÏ̳;_©„¶Ä"ØýÞð¨Læ…A,ÒÄæÁÝ<©{»™²ÈUšÂ/Ó2,r¶,çþvÛìß52…éN÷Ûò¹ûã ‚ƒiX…ùbFÛO<¸"°e·F]œ˜!èõVÜÒXKåÑóÌô­¢ç4YRÛZ+CgÑr/§œÑ@p,Ý·ÎîþgaI%‚óî9ßm9^±²¡XìÂ>ë>=5#Í8\(ÆM'Ï ñYµžoH©&,¦ÊÊ#™¢—vQ ¶ ¤å’îf9*œÙ§•A4ùôÑ÷¶Os¡ÿ÷ˆÊ¥‡aCáÚèù¨ÞCã‘ȱ…ãƒ3$ú8OÜ2ÉÇ7K,iÈ–Mi<“Á“äØâ'µQ/q9—ê9­åŒƒ.Ÿ¡¥óxó'‹}¼¶~|;.íŽÒ²m+O«SÒ)]­=Ïl6ž wçv¶¢™Xo¡©b¬·(Å¡ý amP¾§Œ½o„®ÇQ÷uw"ˆw³±Û‰“ xñbèJü Ȳ$Iv÷’kº ‚)ýœA¼ñXóĪbÓ0ø?+G¶óÉÏ“¡§<Š¡>ÂÈy—]VξÊ2`ŸÔ«Å×çl8zsViy9#OxÄ œCnëç†R¶<¯šÔ5Õã1Ü̳xK‡p9|CÇnǾéüBå3M51ôrBðÞÒBSNÇ8–á³å³•î^XÞŽò-­Púõ,3à_á̽¿ ÝPòvKöI‘ø6-­ç¾ïs;¤¹6ÈͰ1HC¥ªðû® ä˜rO]”Ó«DBð“nˆ ŸN ûpË>IÒêŠ.¦ép¸´[œˆÏ‰<ùpæ!Oì9‹9 v~…ÈÖ^Žìì“4¶/'sT6q50ÛÙ.ÍbÄæT\5^KÙç’fF8œ·†q,Kñ½#ÙÒ¼÷‘b/”¯ ç ¥O¯oæÉ- †ñE_<%3if³{W<3¤6]a‚q2[‰IŽÅ—eŸNi…%°²kùŽ…dÖvd7‰ÊÛé/”|žäjØ+ù)íòöFeÅ%±ÂFk¥Þéq¡L Dâß(ø3.µÃ:Ñ5q Æ36 å¸ë¡üÓ!'-ñdð³sD91é#Jqö&žÅÉœPGž”m…-~EYMù#ñÀÖ²9³rôåªLÓ€„Ëßóë¤n–$-‘#ß7Ô¾åË+OýmÞÂvù2:MóÏ e_d JÍQQ{«¶›±2E–’¹/à+ÁË=lh3&`ʇÏFrªïÐðRµ‰¹5.ݵ! ¶gö«4 žÀ⋞LÚí¯87¶AYŠ  ;;oX' áN½&摱Ó%ñä”8ÎåFG¸$õ£l%väÍå%¢fSR-~d‘‡ôçN!Ûí‘'u­ìp%#ÎWè/*r“%OHãxø$­Û± 6v”\JYøÑséýÀ)¦¤ ’('‡§ $áUÒØ½L²”ô0•ÞÏ|R,öLç:ìÆŒ]ôlùÀåÅéÂ.y¾ŠÑn±`>”Aå=‡ñp=P2ëh£k†&ÄþL³º1v´æì£ÅDàHæhëüÜœ}9lH†¤qF¨lw(‘T:žu¯ÎjžÅA”±tdKÖ|B«g³ÒÄm¯Y$N ‡´”N¦fmͼP;û¬‹Üz9Ú(€¢§•SÜeÒe‚¯o$,Ê/©3rX –Ÿx¯ƒ]˜2´Ñ‰ÉX÷ŸQÒÉäíÃæKJ­Rá—ö›91æÌTí.ý²aAòòxþxãPA5Õ8¸‡*úˆ’>_iVì.5y€ˆ¦GžÍÈæšêŸ›l¸Íœ³w+‘Ç'bËÁœüæÆ£rx‡GÜAŽñ7¥Sâ":CF$Ç#¯7˜TÎè’ ­Hë ”rA'ÓÈUý(aR4Y  o¡å!–Ç›‘. D» bŠ`c÷ÓEM²¤`6¢èâÙ7ºã¢X¤?x‚ü«ææê”{(‡5a(?£,k³n]Ù™¥i<ì!$h jÜk•Ó ß­¬Ÿbt´´F%ÏDü JB‹ì“I-Ór^ãÞñd…‘±¢¾p5躇3ú?ž—JfL±»òµ ÷öp²¹#D›=³%ø÷ìÎ|¸‘¼*Þ¿Èý†mb”ß¼=C¼¸â¾ ¶ìõ‡ÛwÕC8Ò:'…eMÅÙ~BI½}T€âe¶7æQOUÛÞ™d±¢Ó[ 4ʱ˜Ê¹£º”;ó€éÜ©E­Z¸$ì\B™§¬3ç+á‚>?U `V™·ý~9Ât†+ÞPÆbÈ%FëÊ]̳g¢¯á¤8bIçžW5N2ûQ¡8&fÛÜyØ•l™·uàÑqÆëÊÍä\˜Ï¨ÐîA'¹?ÉÁ‘§õ#J"ó¢×’x15J5®å0Y v›~5ŒÛÆ|;÷úܫ½‰ãÌäÖydƒÜPËÎ Ì/_òâzü ¥9…rfhP¤O²”N6ÐÑ.tDjúhkrþÐ(…”âÃ)*®$;s4z5°.Gk<5;æù n[?yµÑP‹ Óö<ÇTžæ>YH¢Â`@m:ŸQê§éFp®u)lˆÞg¤ŸùŠPOKÉgkrŠVBæ–¦Ž[nt÷U™üf̦¥{¾ö—ãàyʵ¸7'e¼bÁmãÓºkŸÙkNƒ{|L‰•|Èi•,$-g\W­–Š0–Ì ·è66Û5»SÂÑ1ÏÜC’–€?{¦‘-ì"Ø3Ðx9>'JYüPWAó²Scá©ãùåº)QŠd ÛKžÕÜàƒlXXpŠ7‰·‰‘œË‘D[’Þˆ×ÝÂö´68éCÀ*NÅñö<¸„ž¹yÌ$? dÜ™ðlOg(voôÒçB~xšô³mšqhÚšýH'\/ô†g/°ØÁŒìôçIéè×l»¨ž>ßТQ…Ogú‰ŽçÔ ŸžÔræÆG=è'Öœ‰Ÿ—jAd +›¡µ»a±}ü´z˜{èf˜[Wʰ87Ób=«}d‚}ξ;Ò»,wåÙ©Þ5Ÿž{£ÙܾR–Õy3ÑUà ØâªŠëƒ›w,B°!áîö„J¼&ë jÑK_àÒ½^ª  ˆ¨ÿžÞ½¡ÄrfÌZMÑXö `¾]z_†3-m)(¯óf9‘3¬žÅE¢`áNÄh±~ÚN8Ëñ%ÊÌ.¢þI=É›À½5äÏóP=,ÙB@ßî¾·e…Bó~<ôÖ²Òªù)¿—`S×OR3œÓ©õ•Ü—Ö&‰Ñ0@ì7ÐeËHÜ7(¡d`ü³•‹·š‹.+Ý—ÇDփȡûü¾zš†TÈ‘ ½=à#×®D"›‹ªžÛF†ÜM`²‡€wãy0¦J zˆ XåÓ÷(Ô§7+&jãùuÌ_ž''Ñ^?…¡íÞe9èNcÈ×=wÚ2–ÁÃpÓQ5÷­Vcæîá<0¬+Ù×Yô”fr yX+çIº{7”(IÍj(ðEÁÿýU‹”˜íê&®ŽÎ¿¡|˜­‡B?’S¾cu˜d,†I¹1ÎeHjõÓ< “èrð¼œ{!€Tê Õ í… šµ¹Ñ¿ª‡Ê CÝM·ž‚ä=–ÖË'žtåÀ³?b¿Ì<ó çÓ™Ã㣸*m,‹ò¥É‹¿íÔb$ØK  ;cP<ˆi÷×C>¬jïÂ7çxÔŒGjŇ¾B„бᶕ!s“MêXä«\±žL|Ö¨í­ƒEåDÅf{µ0\y^¸LG‘É¥Å>Œø Ú¯èw¢ÜÖ°ˆOðÄô–ñ^K&‚Êߘ°ïh#;ÌÇÁ]û ÁqÒ¹á³$VëZH„f“ˆz ó%ijAž`Óì5,iNmù|C)^Ø¡™-„û%/‡ ÛTÏá¯Ý å’“ƒ*®â¦4­"º‰©‹þ*ññ“Y‰2°r&zÜ@X¶6=»N’` â}Tr¤°~,ç½£”»0 RÊ(´ïvÙµ°ŸÎõð%‚‘æ£Y,ÃåCÞ%P¶ºú6øÂkP.¡œc6[+nh:Û‘·^Qy©ÃÐÜpÂzz·ŠWPî4Œ ` /$î3îÂTÓe,D‚ncÜ£ÛË{1øÐ¯Ç£8L,åzíUà¸@é[LQ’ŸÃ©m‚íåêaü`^¶<Âè¶ýÌÕS(ÜÊJ\NŠæL9Am9ãOÍ+€Y@sÿ“ $leÚÒ%fMº+Ùƒ–ãê¯Ù´ÛÒcÙÀASd¥€Pö`Í»Ô$ÒN~ŒmÈ09ôm’ÃáŒJ½Y/åœà] ­{a4í ÚÒœÌép§5Œ BùMϲ¤-Ø|‹SF­¬L¿¶­’C¬À•)ÖÉÚWœ/¿ÏKud/eWë6VZ²teß¹böT¾ÌÍ'Í«õó¯ëoѹžAÆRΕÊo^Û ÷6°†)ý¹îˆEӦχŸÝQn–à`Ms€âKO#—ûl; ©7râÕk†Ò•6Ü&p±-Ëj†‡šâžY!—ÛµÇ|ç)5ö ­a:(TZÞnÛ‡V'Jþ”I³\#W÷ÔWŠëÊåÝ ãØ´*úu—à%Lç¤w¤#8Æ«þ0Å‹:“UWlžÅ²Ð÷ž…N$+ã_¦™KübÚo(u!˜¼ÚÌU• fL#s`’ NÏÛÒ÷}É%Œyçæ6x˜Xñ;->$s¾Í›­ÀøŽZþ [—E¨#“%TùÙŽÓ°ËåÁ3œZ[ìlqç“9PŒ` jꆗ09œʲ …¥RŽ"ØtžtZõLÍ4\OlÖ›.Î7­wÍKÖ^˜ýTi{Êz„%Tssfå{ðlÍ`:}¦$¬ñÈm@§Ý™qyÈ®Ž|’}¢;9Æ0ç2³h©¼TcŠœ’D=®UtåΘ_€\ó Ѫ\26ÜRŒ1w·—„0ú˜åîÅଟö»¡iÙ«Àª©â=…yæÚJkdê ©Ì03?²UƒN6Hdæ<„ϲ4¯SEÁl-!Ÿ_£Uƒmà/c×hÝôçm@a^UÏ;šµº\2µöN’>ñõéA´ÿØ¥ö0ÕýgA¸“Çð~öÎ wÇË·_öê²áqN‘é>©åv[@sIH÷€A2%¹?•-®B¥ù—›åZÄ'ZºØ/¼3ÃcNª~Ü™ôߢ'烴œ¾w×ñ4n)q3®•¤ú¿œÀ6^»¥¥n|P‰†ß z6u›ãRäO,š RÓâ§?ó£˜jŽGYà®Lî(nÏÙÅ´‘Y1Zú¬PÕÞ`bNJ¦yâ&ò7Œ¥f5]Í܌ɖyǶæ0F‘ýÊ¢XXù”+îKd„¨¼Rr%l;ìçWç^›y?³ð ÊzbQ%íÅývZN3»¯¦F®óF`C¤&ZD¯:/ñ æ( Ծ߸[YÄU4‰³ [i–P$±ÉŠûÈ8ç?­q†¯Bî|vdt-ó  †’×uPŽâØÚ¥¶ü|鮲y¯ò$Âaès$²‡‘a±]d6ÍÂÿœJg &½™@Ëeû2¿È+´M:%öÎ/a>Nâ]™ëj+[Vs>·>'J3U •J­\êä[ŒåÓÜ„-¬#“=Îcé©òØùu&¤AÄ)¥ª{Ç2 ŸÎCÂn(yo¸ÕW1%B†¹-km—×&ù˹'ðjfÓ‰ÆR2ÉZU[5ÕÒU¬jɉ9rÍ­J%ÕR¦ˆâ¤Ê±êãò•^(eœ¡§ûjKËŽÚ+PºÞÎÿ-S¢jŒkfF)KiLû|ízÚ²]%»gˆ’ 4,†ïeÜr­O™ë›/,îrXaRœ´¾RÈÊMÌ’¶3qäV;®žã–L¼Vó¶Æ~ÎÏ4ž„j^¾´/{ ‹‡ñÈ.Ž?k°D1…’é*§Ùw0C¬…-¤Èä‹vÝù¥žÀHS=Šõ®3×Þ¥ä?1Ó|rÞa'cW}´âH¾¬ÒìMóy-Ùâ'Q²Âüúá)éÈt¬—b¨uqðHÐb‰[͹4ùúëÀ .¬,ßvwQ-x;sVÉ~F)º– Nt?ŽPâ¾zÅŸEiÏĈ|¹?áÎC6×ðœË&\úgƒÛÆ}¹]é¬rcjv;kèXÐ Àï ƒw”µÂ‡$*abðP0Ê¢,JíýõL¸Wb¾65ÍKº{m27a;7ÏZ«g_ÊÒÖÃþº]öñÆ â‡Y*©¾üÛ~Íw”§ÿë½·†ú‘ј-¿wÄ/åïý"/±Â8¿%ø*BÿáÑÃ*G®’m“móî¸?ÑÂßüPX0ß!~ž^ÊSç€áZ]¶æ°ÔוvJœ¢[ýœ¯ ð~—ã$oSñ÷ü¯‘ŒI”ƒ¡ÃGîblæ=¤¼ >þV“î1~R{—ßSÿöÍöY­2פ»Z*u½W°ÁŠ…]ß_øügT¥†äüq3Ô4yát.¸È³m‰‰ÆÇXè6<³¢!ïŠòÊÓ¶¤‰û|ÌNg:HAj“_‘ø£ v÷á>çºVª´‰*úy/¿ /< Ò>qÕÌbu—W¨öÒ}¶ ouÁ|{鳂Ãõi”Ðk÷•£D=~ê¥z¢ÖKÃh‚T?aÒÄz’²øÛýÉžRâ„[·Ã­I.¼¢²¯å;”æ” ¿[¼E¾ÖÞ¿fœ,×ëj–hm×v»Ýð$ÉR–3iÙÑ-»dÊ÷îÚV­Tq¾“ž¾>’óe{n1YÇ,´&Þ óðq-£v›¼Ž]™°WÀç 6–%«(Yu×ÈyÆ`êÉy´Ý‹ó¿½n~¼K…ÂKu[¼ûÅéÑ‹Õéë¿——%;#ý»”i]K÷¿!ìÓÈöܳqÐ2—½°Y²2Æ|È)ü¥¹£äoJ„}óÞÙz–‰÷»WùîÉ,š òÚBëWçô¤.(ͪ•×^Oç.ß/¦ä”2ä·á­zoºioæç¶ëUÎTÏ;ÕÏ8ajÁ\&s@%]ʲ[Ö‘¸'3š3-i:ËkÄ@³æ¯æ%_‚Ï|„ÖQ-y¯ú#u_íWX×K!³9×MÍ´<ì]ð†D æCtÜ6´´Rv)¸ž{D óž÷ñü€òL:ÛïÏ¢¹ãbG}‹|Q×?ʨ³ðvTæ¬J²h̸Íû]ñk¯t)Æ\V¯Bã×@-Ô,:± ü{;^Þ u埒Q[ §f; J?¶(õv#YWÄI û=½Œhr,7Yt¡_.ø²é°iíâí{WÐw”5kõ‰Ò$ÆÓÃúÊuŸz÷¢©‰ùÕcm]{p·PMÇ‹NP‹¸ð:kË&lÛ/dj †%3²‹ŸÛFÂ0sþÃxÛ‡ŸÄòö±LÓ”J¢4-„ÌD F„Åž‰mtÏ»0&8I`á‘?^'²õÕ”ÍÌ<6û Gï+¿LŸèt>K.%¿áÖìˆe(\ŒìÓ•ÓÕÔÏ~õ/B²ryÄá=j [t¬)¡ŸØcÇŶ7[ _eëïWwý·;5鶘`¬YR˜µà€QúHç¡6M<—!²3í/æå9‘ýV?ûíq…>|e{³™÷k9Kü0G“-ŸŠµg †t5^ûÀ}æèì‹pCÛ!µDÏÏÃôZã¢Ø]*¥žøšSW܃ÜR¥‹úùp•üŸtàlÃõ{‰)ÖY‰»¤úC–y þ&7²&ð¤E}ž–÷Š[00rouEiÃsþè‰o܈%ÝvËŽ½òUæä˜|ö3epã’¸ßX:ÐÁ{\ÄÕK/"†ç^¯Je2µu¢ÏM_ºbå­Hb ¬¡™Œoæä¨N$<ˆ]ˤÀï$ü%D 2Im™J°GEQRýÕ¶+‰tË™r«T¤4wO~…Òœ‚)•,÷f6 î».7ÓCSL­hz¯€ùåZRs&‘°¹Þ—Í਋†³J×2\üÉ/’Ôåvó@¿DY_«R¬ˆ± ¦KÅ•ƒä™Ï턦¦³íåöÏŒM/Mh—óíJP¶ÕM·Òzv¦­–‚‡Ke(ë–5·Ò×(˸RJî(¸èEÁz™`ûT’¯S¥¾øå»1™×˜Öòk©6sn%b +Ï ÏZ÷×—ã9ÔêDi†ÏÚòeù¦„˜8ÇáXiéþ!YíKðȨB* §ÈÓcÇ\º>;ÌfáUFWéºe‰RÓ§Æ”ý‘祢h¦’9Á›ym>NçrP­†æõøT«Uަ-¶"†ÞQÂZž–lEà3¦ÿÀÆo' ù˜ÄÏQœ_²¾“õLè´Iâ¸õS’Îñ kï7JRÝÎ>äM¡Ï„¬ ¯:°ò¹ÓBñ ‡ã·Z–ºôÌ{|ÒÄ7}™%èÆÞ Âðhpuxòœ¿—ø=«3I¼_6£h!|K6ùä•°­1ÚŸPÆp&5¬QâIjr1MάL:¹â(Ë‹nRž,A8/Éé¹½§ÒÉx²ÊҨܔ³éÙšÒéX±d–FʧaÇØì ê¸ÀP͵+×ÉÉÛñÌÅXf‘ë>ÀOfíCõrq“JФXÖÀÄ*¯Û±tÓª ÜcñÀæÜ_;ø ¬Ô’¦»òì,='ÂóÅŒÅÄ™î x'æ%?…ð%7gÍ]™‹AÒ$ºôÙ“¬Ó&RÔ£8;çu¾üF'vg§Â2оÌ÷òìȶ!×[ÖL³©ŽÄúAx÷ø¾”eY<¬ÍÐõ«bLvfKèšóñë|ñKò)ùYùïôÚ8ŸîQÃEcS‰ãz¡&q2ÜåþExã}^^6»8€Ü9Uæfy¥îØîI'x - w / 2, box->y - h / 2, w + 4, h + 4); boxaAddBox(boxa2, boxe, L_INSERT); pixRenderBox(pixs, boxe, 4, L_FLIP_PIXELS); boxDestroy(&box); } pixWrite("/tmp/junkoutline", pixs, IFF_TIFF_G4); boxaWriteStream(stderr, boxa2); pixDestroy(&pixs); pixDestroy(&pixp); pixDestroy(&pixpe); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixhmt); pixDestroy(&pixd); selDestroy(&sel); selDestroy(&sel_2h); boxaDestroy(&boxa1); boxaDestroy(&boxa2); return 0; } leptonica-1.70/prog/19-colors.png0000444000175000017500000000116311713662405014716 0ustar dandan‰PNG  IHDR¶d=†;v pHYsb&2%IDATxœíÖ±BQA E,"Ä"Æ;»¥„÷ƨŠ`Œ]©ï·IÏÓ.m®zpåszÀ¥ÍUïÓ¾Ø<÷ÍUžðg›«&ŸpóÖ7WM~àmõÜ7W->áãôØ"‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2„D€ÈB"@Hd‰ !‘ $2Ä?ú Çg5:ˆIEND®B`‚leptonica-1.70/prog/skewtest.c0000640000175000017500000001251412244775366014510 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * skewtest.c * * Tests various skew finding methods, optionally deskewing * the input (binary) image. The best version does a linear * sweep followed by a binary (angle-splitting) search. * The basic method is to find the vertical shear angle such * that the differential variance of ON pixels between each * line and it's neighbor, when summed over all lines, is * maximized. */ #include "allheaders.h" /* deskew */ #define DESKEW_REDUCTION 2 /* 1, 2 or 4 */ /* sweep only */ #define SWEEP_RANGE 10. /* degrees */ #define SWEEP_DELTA 0.2 /* degrees */ #define SWEEP_REDUCTION 2 /* 1, 2, 4 or 8 */ /* sweep and search */ #define SWEEP_RANGE2 10. /* degrees */ #define SWEEP_DELTA2 1. /* degrees */ #define SWEEP_REDUCTION2 2 /* 1, 2, 4 or 8 */ #define SEARCH_REDUCTION 2 /* 1, 2, 4 or 8 */ #define SEARCH_MIN_DELTA 0.01 /* degrees */ int main(int argc, char **argv) { char *filein, *fileout; l_int32 ret; l_float32 deg2rad; l_float32 angle, conf, score; PIX *pix, *pixs, *pixd; static char mainName[] = "skewtest"; if (argc != 3) return ERROR_INT(" Syntax: skewtest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; pixd = NULL; deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); /* Find the skew angle various ways */ pix = pixConvertTo1(pixs, 130); pixWrite("/tmp/binarized.tif", pix, IFF_TIFF_G4); pixFindSkew(pix, &angle, &conf); fprintf(stderr, "pixFindSkew():\n" " conf = %5.3f, angle = %7.3f degrees\n", conf, angle); pixFindSkewSweepAndSearchScorePivot(pix, &angle, &conf, &score, SWEEP_REDUCTION2, SEARCH_REDUCTION, 0.0, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA, L_SHEAR_ABOUT_CORNER); fprintf(stderr, "pixFind...Pivot(about corner):\n" " conf = %5.3f, angle = %7.3f degrees, score = %f\n", conf, angle, score); pixFindSkewSweepAndSearchScorePivot(pix, &angle, &conf, &score, SWEEP_REDUCTION2, SEARCH_REDUCTION, 0.0, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA, L_SHEAR_ABOUT_CENTER); fprintf(stderr, "pixFind...Pivot(about center):\n" " conf = %5.3f, angle = %7.3f degrees, score = %f\n", conf, angle, score); /* Use top-level */ pixd = pixDeskew(pixs, 0); pixWriteImpliedFormat(fileout, pixd, 0, 0); #if 0 /* Do it piecemeal; fails if outside the range */ if (pixGetDepth(pixs) == 1) { pixd = pixDeskew(pix, DESKEW_REDUCTION); pixWrite(fileout, pixd, IFF_PNG); } else { ret = pixFindSkewSweepAndSearch(pix, &angle, &conf, SWEEP_REDUCTION2, SEARCH_REDUCTION, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA); if (ret) L_WARNING("skew angle not valid\n", mainName); else { fprintf(stderr, "conf = %5.3f, angle = %7.3f degrees\n", conf, angle); if (conf > 2.5) pixd = pixRotate(pixs, angle * deg2rad, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); else pixd = pixClone(pixs); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixd); } } #endif pixDestroy(&pixs); pixDestroy(&pix); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/showedges.c0000644000175000017500000000503512242265621014615 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * showedges.c * * Uses computation of half edge function, along with thresholding. */ #include "allheaders.h" #define SMOOTH_WIDTH_1 2 /* must be smaller */ #define SMOOTH_WIDTH_2 4 /* must be larger */ #define THRESHOLD 5 /* low works best */ int main(int argc, char **argv) { char *infile, *outfile; l_int32 d; PIX *pixs, *pixgr, *pixb; static char mainName[] = "showedges"; if (argc != 3) return ERROR_INT(" Syntax: showedges infile outfile", mainName, 1); infile = argv[1]; outfile = argv[2]; pixs = pixRead(infile); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("d not 8 or 32 bpp", mainName, 1); pixgr = pixHalfEdgeByBandpass(pixs, SMOOTH_WIDTH_1, SMOOTH_WIDTH_1, SMOOTH_WIDTH_2, SMOOTH_WIDTH_2); pixb = pixThresholdToBinary(pixgr, THRESHOLD); pixInvert(pixb, pixb); /* pixWrite("junkpixgr", pixgr, IFF_JFIF_JPEG); */ pixWrite(outfile, pixb, IFF_PNG); return 0; } leptonica-1.70/prog/lighttext.jpg0000444000175000017500000030451011303557425015200 0ustar dandanÿØÿàJFIFÿþ“Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÑÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷3Ï¥WÚ æ§ŒPÀ2àÔq±ýÐ)Â5Ýœ Ó7©SU>ĪH I²GÐRµº»n fŸåtî*P8Ç)j´Ö«! zÓ– !­W[Rx4±XÇ…”u§Mj²°$gKj’EµºSà€D0æNz |p.Ò*¿Ø#o 7Ö›.ŸÒeät«¨»T(ã¤ñÍ ½1Uîm–t*OXiùaJæ­ÃÄ¡GJl–‰##šWb€1K‘íKÔÓøaL{UVìiÞX ŒT1ÛF’niÒ[«¶â2GJ”¢˜¶ã¯z ÒžèpEF¶àt©Ô¥Rô¦²†O"«Çl±6FzÔ¯¸éBÂáR ^èÜ*b!VÈmV1À¥’Ñ%`Ì2E$–©"€Ê¾Bù{qÅ5-Bž8©•qÆMIÇz^iޤÍQz¥Á”OZ² Ï^~´á Åf\i~uÈ“qùO§¢ŠÜÇp\ÍZÍ=©{Šk.GAYñéÈ—†p£qî*{›U¸ˆ£‚)¶vih›P ³"—Œ®:Ô¶¦nsšµŠ;Ó[8éX·¶ROr’á5¥qÏZÊžÂWÔRpÇŽÕ®C˜xëO·  R?Õ{`C1«$db°¯"”߯CzV°cY>•D\ý¡˜+rµ%¤ò(⢹-êm?+u«QÄÑ»1'_íBi7`ƒS[ÊÁöõFöù£¹ØN:Ô¶·2¼¨ ¾µ=Ä.ó«+p*ôjBŽôóš^Ý©¹4KÔSO+Ȭk m/’P>VàÓïm…Ü;‡nEX…± Æ­lqŠ£/‡zMN")¡«–ˆúU-N"òÅZuÌmä ½k)xŸJ›4`šÏÔ~êŒw¤š2¶á‡^µbÝËÛ‚}*¼,ßle#å¨u5p!Ç5Ô5¶òçp´i-,Ð7={Õ«Pëu" iqHj½Òy²ž8ªJ4hêNFj+¸ŸûF"¤àõjK$B7Br¶-Ü´*Ǹõ©ÆqL`wsXú¤d±ƒØæ´¡P‘€:VtІÔÕ½©÷ÑìTeàî«Jc¶ Þš$Ý||ý±Vmܲ€ÃµXéÚšOµfj^cÙÎ;TvÓuÜ œÕ‹Ø–M¬Ã<ÕÈ”ÿ ­.Ýþ¦¨Å+EW.+Bñȶl*¤%ÝÞµqc­TŠWk¦SÚ¥Ù!¸ 8¯Œ÷§¨¦·BUlí$œ{æ‹9YÆç—ªfqÖ­Æ  Æ)ߕϥG(Ü„Ͳ…Ęæ¯Î?tÃÚ¢¶Œ$Þ£µ|Èëèj»I1¼!z ·jìï¿’F* ‘òRÄ0ƒéFA¬¼NF}êÀäði’Jõæ¡iØsŠbßÄÓÃ|Þ•s>ônÒƒŽüQ¸Á½»QžhÍ!lw¥<JOSIæÓŠ: wªW·_eŒ±šK=An2ô­ ezâÄw ñIÐõ¨g‘eyÇ­eŪ¼Ó´ApV­é!?2ñV`™']ÊG½O€:f“UiîB£¯aT_Q’ —N*õй‹}Y¥¥<©¬‹HÛ]¬DpÇšÑGÊëRi :ÑÁ=E)*?Š“#Öà2(Þ½ I$e¿Z¯isçî>‡­Jó…p¥†MJ¤.ê)ÙÈëTî.Œg¦jÔRo@Þ´îýiÀí„àS7¯­&õÏZ ŠA›uª‹i•}ãZ1L² `zÔ€ƒG^ô~4dRqNé@?5)ëHÌõªk›Ë,7Uþ 9ÍGŒw ŽzÒàP>´gž¢ŒûÒqšSÏziU4¤ cŠM£w¸Á¥éÞ‘úu¨`ã5?AYwAÖò7ÇËëVØù±•ÅP²¶ò8næ´5rІP|å8éVÀj‚Z¬S³uÉ«j Y×h’ÌU×>ô[Ûùs)Lâ­ÜnÆÀñÞ®#ü¨GÞNiQ@ëɤïÁ¥`qT¯mEÄx=}iñC²§“Š‚O.è¾jùáxªQ—ûQ$qO½ž!·µ-´ŒSiàŠeÒ3ºÈ’ô3[p;T–Dù*§Ž*×ëJzc=j…ê³@Î ,»ÚÛh⤴!ÔJqtx¦Þ£É°(à|ªZßh$Tv1®9Ïz’$e¹-Ï5z’¢¸ÆBõª¶Q¼@î桺IMÂ2‡š5–HP(9ëW,˜´ `Š´z–ÆzÖ}ô V^ªjX‹ùx#µUh¦ûHeéN¾ŠI#]½ˆ«Q’®:ST\b§„sSŽzÒ8ªÃ/œï³å”ãT—#¸¥‹~ݧ _É‘g-ž 3ìö(<Šf¦Ú j­½¤Ë þðç£dd ¬‡‘S}Ÿ÷¥Ôâ¤PjQÇzR}ê)²c;O5Rc9äûÔvÁ¢vàÕ‰¢2(ö9¥wCSGZ1ïM k5#– ¶e éW™KÆA=¨D(˜5†)™ó÷ªF·ù÷´‘Û•mÌsV—ëPÜœ->.P})LU^M×^Õdü£>ÕŽnLºŸ“œãµi²(Q¸b³üˆ–ìHÈíV¯dtµgLd Ö}•ÕÅäsƒZÌbUF?1â‚]#/Ÿzš „ñ\bªÁu!¹xØ:Tûä󀊊âël‚1€Æ˜.&^sš±wv±A»¡5ºrŠF2júsj:Õ[è–KgR;TLJ`tÒ´‹b€r8¢Ž)’}ÓÒ±,Jn•­$JÈAk N¹–-ZXú¼ñ]&ìŠ;Rœâ±55™$Yb+ÚªO1‘w“x<€iÚ‚†ŒgÍY·‰séRãÒ—µE"åxëëYòLn%IñÒª­äɪ]ˆVéZ¬¯?ßÊúTͰ0˜*0÷QÚ†^€t­k)̶áØ{ÔRÞûPƒŠ–Þídb„ª]_É á’ ¤†úS>Æ^=jw¾Š©°_n›Ë~½_Ò0È"¹mIM®§ Š3“Zæýã ¹~SÞ¯‰G–#ÍR–ÿËät«V×Kp”‚*ÆxàTr6ÕéYãUC1ø‡µ8jqùÂ2ÃqíVÒï ÜÒ\^$ — …5$d`†®‰ÝÙª­¨D²m,*xfYFAÍJ Š.§7>ÕF¯÷€¥ íA‰YºŒÓÔc¥!AŠ1ÇjRÚ€=¨Þcœ %R8§2àŽ)Bíb—z ^Ý©síIžsŠAøRÒcžØ¥¤Æn”½©»sÅ)§j@«Û;šFPÃ*…)ÃÛ§ƒÍ4¨ÇjvܯAI€jiAÈ”…8éJTgQ°”cž‚—¥šNO£?ãHF}3J˻ҕTtR㯭!4¨ö žÔ¥Æ)—€8¥÷¥<ÓzqE;­!c8¤Ç5±,œ 5a Œ*EP§ ©8Í'M/¯#ŠB3šM ŽÔ݃ڟÎ:ñGåK);Òž”í@ùW¥(úQùSI÷Ï5K`š“Þ »8&¥‹˜×éHzÕuÿ“ô« ÏÕ‰öSªfÁ!«U˜2u†Lª¨w½j^–žâ Ñ‚‹n8ç?­Zº€HêÇøNiÒb qŠK8¼¨±UnÑ¡»IPu늿 –Pqɪw6ßéjät©L(H8¨oÐ4A TH^ ¤1a[qÝíOÏ*¥Ü˜…þ•WJ˜yd{Ô÷wAòx©â¤j[¸©Ár £œíŒž+ Î_/R‘€ÇŠÙy—f'Ú©ÛY¹iˆù^ û{ÔݱJz•‘{3%Ê€¤©ëCDZà¥Ka‚7ôÍ]Š]Ù© Í!éÒ±µ&S<@úÕ« ¿e霊–ÉÀ´+ŽÕ»*ãÒ$E®LƒŠ§ušãk¡¢ÞÕ¡¹I+Š“T-Ž Õ¨ßÍ·u#½,qyP¿?…E¦ 4œc-N¸o€«lÇË8ÇJËÌ®H9¤ÒäxÑ—’zÕ»÷ÊïVA°cÐ |3,˹NEM)¦³n e¹Yך‡P²2"Éýàè}*í„l çæÇ5ªá`à÷æ˜eS`Ov›¦I¾Õ”uÍR·í²#x¡ °ŠpÀäž´Ùæ_·FœUã•鼅 qŸíV$dñV%–î7^pku2zâXÚ„h÷îÆ⦾D|Ó&‘Ž˜Z>»{UH"’{S¸Žx«4 t'<ñ[=édW=¨¯Ù/’`8=qXZŸÚ ¾Žñ3åú é´ÖûJ‰ˆíÅ3WhÎÔ#æ5›qvbX÷` àVçÚ¬²µÎ4Ò¬Ž]2¾µµáùüÈ÷Ímc£„®H_ΦéÅC$ÊŒ S·‚™¨!Ÿ|Å}*Á‘W©¾jôÜ)Àô¥7Õ@Ü9©Ç+Ûš\à \äSqÍ1æEl,ªÇïR´ª¼dP’«ôëN,òi»”ñži’Nýâ1Qý®=à 9©Ìª«»Š`¹Fldf¢¾»û4%ÀÍ3O½ûLyÛ€y«O N¤SRáIÁ85!`«“Ò¢q1!XSÖT+¸šA:±À ‘A3·#5"FE=zŒÒ6 âšeŽÔÅ™IëP_MäÛ;ŽÂ¹M&âþ}IÃyYï]ªò¼õ¨®2sRF0 {S}êÿƒÓ¥X#œÔn»sMò‡aM[doÀÍ:hhÊ‘Á¢Þ€¢¥+ž 7ËÆ8(Æ8¤x•Æ1R &1ÐS\9"›³@°¬˜Í7ìÊÏAVvнDñ,™ÝÒš–‰%8¥6¨Í’úÓÌjW•*ŒØ {S]<θÅAöHÁÎÑšxA©6ã£ò@“©r¥c­DЫ@¤Éœâ¤TŠ0¹À¥#Ò”ôÁªïoÈ€qëRà ¤qJ±*©Æ)¾B–Î=TJa… dšQÁªWÖŸh+Ïö«PD#µLWrãŒR$A:Ö•ãVµfÕܹ«``P#¥'löª19’åÁè).IIP¯ò*KÕlAäsEŒ(± œzU΃¥E2’¸§Æ0£éMv ëût«Ú˜[àr3Å#°PIÅ29Dƒ Ó‹ªŒ“NV 3š ®)AÈíFîqÆhÝJS뚎W*¤Õ8oZK,­]n)CgŒŠSôæ©^^ e-Ï”i×âö"ã#ëWj­åÁ·ˆ¸­:Öñn! ;Ôùô4n½QJëAÎk/P¿k5ÜGËM‚úYâ«‘Jš¨ŽQÃnzZ) `AïN2 þ!ŠÃdƒOíÖš­u#Æ»““YºËO;Å™}ªËêC˯Ê:šÑ¶¸[˜ƒ¡°!ëÚ¢˜°LŒqX±ê’›ó\Tó^NŽ\ƒRXÞÉ4ÅdR§Þµ@ÈÎE¦“Žj¯žX¶ÓÒ«ýµÖeB95vYÖ8w· ¥â\UpÁ=(,»° š2*)å1Æ[Å%¤þt{Ž©™Õ=)T‡ïNÆ íJÒ})Gm “Um¯RyYlj Þ— së@ ôÅPº¼6¬w€3*”> ·¹"žEJÚÌB_,µ]¶¸3 ‘V±Hi3Nãqë@Á\É¡@=鬃¶)Tcµ „ÆOj‚ÜÖ¬w5“©£›˜œ €jôR^*´1Ÿ´¼„pjL;lÚ3ƒV[-g·â›f¬–ÛXr)-üÉ7‚j² ¨ ÈíŒU±îE>Yü§QÉÍY€sA¥ªß@%„ñÈéTÍ»OjQÇN”ié*ÑMhL ÂvÖ^ÒÐ8`KÔ:J<Ôär*[ÂæU ›—½Y©1´`¥lF– öþôcŠŽDÈ ÷…kk,Z“O–yÅ\Õ¬üûR|ÀdTº\r-¢yŸ{Þ®ÈL޵»9ÎìÕ¦“¦JÛTóY6ì~Úį¢Ò銅Iy ‚¬E)f#8ã®(<Óà+ž¼ŠGÔ¢&BšÙH–L1бŽ1Ú©sÑ‘z|¨eÂöª×ÐÈU6vªÒYyñ`¦ îhGkåÚÁè(µŽUR­š…ìqp%^½êÒÂÄüç¥UÔa’EUAÐÕËea ØT2´ÂåBýÓWFqKÖ‘‡°ç²¸7Þrž=*ìì$F©Z܉w©Á§ª6y¨&·e˜J½j³6=j½ü 4[þu5¢ºDÇ"‹‹a)>ðéQˆäfÃt«¼E9Æ*¥½‘ˆõÈÍZŸ4H½»S%´yY_8*sV’7ÛɦA ¤ŒÄðjÓ—ª¹‡l›ÔuëM0™%VaÐÔ—Œ¨4Ë(ä€Ç"­“š†äáF)ñ´téLv¡QûóéS6@àÖt“¸˜ƒÐT6—®÷lŠ¿{Ÿ³¶UM.9<³ç&“W’dˆyc<ö«6nâ_* .L’”VéO¶¹u›Ë<çÖ™<‘H›SOži"ˆ?çW"˜¼øäS2fB*²ì[ÄE꣓ëR^]v‚Ø& ûIk%OlÕ¹n@ˆõ¬ë¨¥dfÉ*E.„1®Ò5²j­z¡­œt¬:9DDÀгmw'Ú^ü Eu4ö×*sû³ëVÙžDR­W"R©ÉÉ©°@ɬn=ön;b¤Ò¢Æ01ÒªëvŠm€ù€È4i2É.š7dÇ5—Ÿ,“£1Ûž+RÍd‹!Îjær);TS ¡í\¥’I³+(%Mj^²Ê,¸ßÞ´tëQmŒ*ïãIõ¤<ðkž˜ÖÜsWb%®€aÀ««,»†«=©ïŒ TçiÁ¬šæ bîBjH5šeY#ÚÕ{P‡Í³`QÖ¨èv†‰,NOz½u}‰Öy¨%¸h\6A<Ô÷w«!Üê©%Ùˆ«†É&´]¼Ë\àr9¨-El[< š¤÷¿i µúÔº]ô†í¡|:Þ,[ž(h4ƒž´ób«]ɶâò;u˰Ï·!·óAùimn–à|§Š¶ÍˆˆÏj«l>÷Ö¬Ž3MxÕÇÍÍ ¡Gb‹íAŒ7½8'c@QíJu…A<БL’ Ä6jAòŽ¢”u§…ã4Þ§ž”Ò gŠ€1Jzb£ò”ö”Œf•¢SÖ€Š9â¤iqïúÑŠCÇ4ÝŠiH1Å >QN ãšAÀÅ;4ÒiÝÖš!Q“Æh(¼ä Ó‚8À  ÎùRÓM3ʳš“hŒRPFGjL u˜^Gœ1J:š04ŒóL8$SôÆi6s“K‘Òœ1ŽÔÜÒ`“J  \}(¤À ŽM(§žôÒ¸=h'é#9¥àRJPWrb¡X9TÊ^Ù¤ÎOjv éŠL¹ÍzÒ7Z>”£š‚àñz‘8Qô¦ô¨—i§¾vXà—•÷*­¢ùwìàzÖÄÌZݸíUìn@iàƒRßsAjhX4 r*€€AtÎyÕ ‹¿pWP” #ã½Mzû¬Ár*k?šÐj|@ÀõªÊ¬/÷ö#ÝNÙ¥hÙrqÖ lªQN»„k€H•!pö§qQél6²àƒšÔÏz‚ç˜[š¡bû«®iñ[î¼iOqO¾‰'…—#=½©4¸XFCÓÖ´™@n )l® —«Ö¬£®)t×Ùj ‚0;ÓîWíJStVë¾Õ[OßçH¥03Á­ ÅÎ)c“zç¥IНw0T'…biììŒAÁéÅZÕ¢f¶"å‡"¬é·.ð.õÁœÕ¸æÄdTÝ})ŽqŒVá¿´Ä›N*øwƒ‘íD¼—8ÇÊ*é˜ TÀî¨æi¬ËBâi‹ÁÓ…qZK+Åt‘“ÁëN¾½BycŠˆ»Gô$šÐ·¼AªaéN9ÅS½ËÄP1Åchó<r[ÈÙçŒ×@Ç*qY]J×Í è*[Ë™-åhÈn´û¦‘"©ç$W;í7·ªQÜý ·ÏÈ5nÎWrUãToo¶¨G ÕrÖÞhäÜÏÁ ’/€ÏjYn3p±ƒÏ¥:XÝ]ÓçwÚ¸?Z£q1ƒiSÉ5¨¹’sÉ’‘Ì·ûw‡µK0hnâ!ŽàÖÆÅ!J«{{vƒXñÞ\À Sƒž 5 Ûb ’[jÕ‹o¶Á9¦Œ-ÖÑQê‘y–ǜƛ¨6@ç5†á V9ÁªLç펑ØSãµó.;OQZ©–¿)⤊«{)H†SMnOzº[c­=xyª–e„ò&~\ñI4Y¾Cœ T×)µI"o·äóŽ´YgÉ œÕX” A½i÷ìc W®iÒ:˜×qÁôªÚбµùJ¿bÑS'œsU&Œh¡5Ò¢íb^ÕeT´âê ™È4žr Â"ž†¤)ZF sLóPž£4¦Uõžbç¥iG$R,ÈOÞ©U°sÚ£2Çæ¡SÁ„äóLóWq¥Þ¹íA‘GR.àhÜiA°hfÅTº™ãBÉÍKmqç@¤Ô»ÀêiÀƒÒƒIéA ѸzÐÌg5s,Œ@#ŠŸ·4‚¢še‰ $­2Þáf\ƒYú¶¢ö[[RqWí®RHU‰ê*pÀŽ1K¸Én–Œà•B{ñ£w8«ˆá°r*N¤Üíñ¦–“9£pÇQI‘ëQ\N BÍÀ4–×xÃÁ©|Åß·#4ðÔªn{ÐàªÒK¾Œö©” gŠ ®})’’¡·g½X=3X÷ Vý¯ËëZjÀ¥dY+hLHàô54Ï‹ÔÂäRßZ™öH*r*`¡¢oAV¡P –šÌk5ÜÜ\`61Ú²î­e·Ô#IëÈ®Š)<ÈÁã§5J8À¾/Ž´û¤èqÒ¤¸?踣‚=Ö›=ªŒêsW#q b©Îì/Pã"´“à›ÀBñQÜ[0¹IÔt«k&à9¨¦W2/Z©y˜€ª“ƒZî|ÇATüÇ …8¢ü±xÈkF/Ÿ_ZÕ{½Â+ÔU[vïWæµ""ù  Q{¸FQÊœñUîå™íʪsSY3‹|8 ã½e\ÛN×ÂXð@÷«vw¬·>T‹´š¿rG#Ò©ÝÀóF¥F0jí¹$*ÚAtI_–´N)Ù ž++S *mPNj{R^Ü)À¬°—V×ìÈ Œš¹qÜ¢9Õ˜Ó÷aJÐa*­Œ}ª(dˆ°#©Í;cý°>8§^ÄÒEÐç4¿ì›vœãëxà(WŽOµï í©®ãi£Ú)cGmïŒSmÑ£ š¨°¸vÜA4«æA:òH­e%€Í;TRD²Œh ¿.8¥w)™†P‘C°–Ç&¡–'7ÇJ–tfŒ9§& Û–ñÓmP*ßÚ%Ôšºñy¸ :S.­Œª»N1HmÙã ÞjH"d\QÉ›•v§ÜÂÒ ê^c·¸MȺe±æ¯Æ¡@+7ËŽ*¼àíâ¥îŠouªÑ¶feÍLä*“éXÑß‹‰Œ…5rY[hªÚ‘¸Š–6ÓÈhñµ\ži5¨¶„g9ª‹ ÇØ7+ò£Šµ¥]¼–­æðËÅWmMgºxUÇ-ì¿jò[ŸzÚÎy‡¦+\‹E°á·T­$ð@®yõ­nÛ 8UW¹–BL`)ö·ÁÙ£|³îµvŠí¢zŸO¿’è0cȪíªNš€·)øÕ‰ï§¶ÚÌ2‡ô©/›ÏÓÙÐõý0æÀzÖK^Ýky@d èRFòwg]¯F|*[K‘uêjHXÉàæ´a?»_¥MÛ£sòš†×’qëVÊT-·P3NØ6㘰¨bBŒÑå!}Ø&ÍËÓ¥&ÅŠ1J)C.*%·T|€(’Ý_“ŠzD¨0)v 熌HlƒŒSö(SŒM( Í*¨¦´!Ží¢ž LÚ çŠ^è)6Aõ¥Ú¥5ÇA@@jAç8Ö‰r2õ ¼)Ãð¡Ô2àQù Wµ*Æ¥(†1׃Ø}ê²ÛNÅ4Z/ž$ d*æÐTt4è({PTgµ<` 9íŠ{âšc ž ŒÅ&ÀNH¸P88¤ÊJPAôæ€(Ç4¸@éÞ®ƒÇZ^Õ‘v%È >J¥s[¨]AÀ5´› ÷JÅ– 1ß5¬¬\ÚœO`j®¡kfÛÜUM4²AµnªÌÐáA$Ô–ÿñåÈè*½Š“æ)\zÕ}3ì÷ÒJäÇŠÕ†Àæ´€â‚8¬›üãïƒS^àÚ‘ÇJbeôâª9+I§í~¾j þÐ2)ùqYwöÑÜÝ“¬8È«Ú,-²ܽsR^¢Ô#€ Z½g´!9Í žUŽÖ?ÃÓí6@нSXÉ8ëZr¸H‡aY›ƒÀÎéNÑî•€=ê}IÇÈN5r9BÀ‘ŒTÈáÆG"‡8RsL¶#¯½[$P’(ÈÇi D,HªBø™@ ÷­—ŠAŒRb¡ž%sŽ=jµ®© Ô¬ŠÃ#µZž_-7 ‘Q[݉ÏN*Ø ÷£9ô¤,£‚@¤ÞqN,1Ú“p§ sKŸ—ÑϪÝLС`3Š‚ÒÿíöÇjx»c1Œ ¹Ú2qJe\òÀfÃ’zR PŽS·!*yªv×L×ö«¢TݤÎzS¾P½y¦çéJ>‚“µ¥ÃT/.$„åG%•âÜÅžãŒS/®ZÞ<ŒTÖÒ4‘'­<ΰO4õ‘Kc"ŸžM&hϽ/jd€í!N­c=ÜÉx!ßjg–báCõ¦[\Î/ rtìkT0ÇZUu'¥wUêj14l>ð¦Mp‘I¤ŠPèéD³*i!¹I:Ε§\e€Í!ž=ß{­L9¢È¨g%c$uZÎç|gy®,òA‘åUêE"J¬ØT»€RâPT¨l{Õ{®6}Ø­1E'zŽi„HMEo:ʵ,“ÆN¦›„TÜHÛëNI•×p Šr8cÅ#HqBÊ®x5*⢘nLS£ÈQMÆrjoŸmKô¤dsŒÐÀ¦I Èy†aÈ£ÈP§Ê…AÎ8§„ x§ Ù8 Æ6ãµ.Àµ0F ç4Ó1ɤÚ`ô©<¥T¦ Ò‘£RÙïHc_JpQŒ o–»³€)YŽ(òÀâ æ—Ó“œR]Üãñ§ªÒž{RŒÓ­ŒP)Cb›°Í(éQ´Üàf¥UUPjv?QÒÆ¹Î9¤dÒ„Q±G˜a\ç†Îx© ¸¦ù+þµ*¢¯AAŒ1ÏzP€tìv¤Ü¸ ž”ݪüœSL(ÜÅH¨` „Û¡rÜ dç­èy¦íAÀSZ5~¸¡cqJ±*ò†%n¢•"äb¥ ‘IÍ@aBÙ4­¸ÚzR¬*‰…ÅBÖ«œ‚ié¥BöÈÛŠŠ’t„|£BîÉ®fÉè+BŒpªJ{Ä®»{R[Û¤Ø:ÔRÙ,’y˜ù½EJ SÖüj¯özBŒéE®ž–ò½ÍM5¢LFáÀ¢k|Ã厕-´^TAsõ§É÷£¶ÆßƧfÀÅUIÄ’2Òšò˜ePzmñ"Ùˆ=©¶1fcŒâ´¸úRTSF6½siÒZÎ×P3nîiXjK{I×Wí” 8×d±Da‘L¶»7ÊÀÒß–D¹ã­A<äÚùˆÇp^•5¥ÇŸl>o›¡«¡žjÀ u™¤çšdŠ6ã‚+Ÿ‘ÛNÔQ”zÚ·El9žô]MäÇ‘Q´fXwÏZ¯kpò¤±1ù—€k2Ô]¾ ñ³ Öí´NŠC1¬¹.V E”‘È©¬¶ÜÎÒ+3Ò¶AÚ—­ŒàÒ·µ'j-WÆ fÂÂÎô®~V©u,=©ÁjÏ‹TúU{¤ÄêAêjȈîVÍYôPx£¯zJäµ8çmj?)ˆïÅiB’‹Äß’1Z/ ‡ßÜ ŠÖc4ÏžÕ Ë´(W¡<Ô÷ŽLK×è*…´ÈÓ9=*΢£\úÕè, @íY/s#ê&¦§µO*gàô²öÏáPò—ÈAâ®Ý9H /\f«Z6íÉ5 ŒA/ä æµ¨'Š8¨.”4MèCf«åŽ9©n“Ì€ŠÍVÛ´_Æ8©4×tFŠB2 Ä8¨à&MÛ©%R§µij)˜ªäT‘ 4ƒ•5^4&sÍOŒqM/##4ÆE.ð:‘Mâ”°^ o 0H¥sHÒ(=E(lŽ¢‚àMƒÐÕ+ÉÞR¼®{UŸ3÷ýª;YÚUmÇ¡©ÄêN2)Þj³`K9â™æ¨=Eer9§õçŠZLsQ\J!BÄÆ£†q2ÍgêM ñ¾~LóZ)r»’9:0nr)ÛÕIÉ!ä`ŠR>”ÓÇ¥Vîé`C“ÍP‚âinå­3*¯ŒÒù©ÀÜ9§Ž¢‘eV<jBxëQ4ʼëR]…‡J« ìMrÈ\;U·a×#ÐàŒ‚ •KmÈÍ*¡äH%S¸f¦ …ÝëLVËu¥fÁæ²u ¤‰Yâ9À©´«§ºƒsŠÒÁíKÚ™LóQ[€ö¤óP¾3U/.B°æŸ<’-©eûÕ …÷›ó 9­en„\€0q@#±£ŽôíÄ.2);qMfv¦¬€œ3OÏ©3î>´zóY×׆Þ2@ÎiÚe×Û!Þ*¿NÛA’¬c$õ¥Þ6n檭ìf,Ÿš®Ô¸÷pO­91É5Ÿtâ™ÓÜeMR¶ƒÊ¸rz1§ÍšëíKt¿èåi, =@«¸ïFhšd¬uª°”˜0sYwz[Csö˜[ºúÖ¥žæ·ùº÷ªÉm¶åÙº¶°.ðÃSî¢@WÔVu« ÈÀ‘ïO±³x®]s…ê+XÔL^Ô‡Ö±5!æOÇÝ5­nù@©·pù±`u¦F̱l#šŽO.G~桊6[âÅFzÔÆPã‰-™’ûÌ+‘QÛ[ÍivÛòØô­w’M€V’£<_ʃÒN\s“L5Vw ð*å±¹xÜdcÒŸzö?-W5fÁ›ìê¬0G­-Älf<íëLÜÞwû56(=(Ód$)â±ZQ•àqZ± bb¥eÈçJ;sÌËÐõ§´Fy`8¨nã”ȳÚJ€j[«rð€"¥„ɱPPËi‰¼ÕÔÑ#–¨nãw /­[„€¸§ŠQÁ£õ£rãZÕ)èHÝnãƒLxfÜ9¦´2´¡‡j¶Ñ—Œ¡çŠ‚(Þ%dŠŠÞ#º,z5iŒ ¤yš0g=jåŒï%¹Þ9)¬ÌX–cíOÓæ‘·‡#ƒSݪº”ý¡ ÛíUìWëÇZ¦ÁƤ”Óî™­¥”’ ÅhHäÛäqYÐL¶æù‡J}´2JììÄ ð+YA ÔªBOZ½QÕS}£sPéq·RM;T€MŽÙ¦=®-ÏÝfÍȵÜÇ Uv˜MžNIg9'éZ]E4ÑšÍÕ!Ǔڥ³·XãVP3Чª‡RŒƒœRÅi!ds!4ë†"u¿ ®Ó²j¨<¢µn&òí˵_ÈóáÝžO5-º:@QÛ<õ¬ûK0oäryŠÕ•?tFj­‰Ü²Ý D×QÆr´º¨s•=ûRÛZ¾ä±55Õò£¬,øÏj©ö© ™NíÊ{T×wJ¨<µ,öÁ­˜ç’)t”Ùu­?Æ‚8‡#5­ QãxŸ<ÕŸ²<¢7ÞATwÑ…ØKƒWÛæµü+"ÊÌ»HKc-SÛÏ%½ï’Ç*{Ó¯ïÌ3"“…n¦¤¶ºß2{Vªôæ” ÷ ñT/ÙOÖ³g¸ky†<šÛ·ÂÔVCÜΚ€‰y­J—“Cv©'ÝnõnîçËA‚2k:öÖG´v ó§ø~3¶ dçšÚÆ8È¥šSÎy®{[3†ŒFØËV­˜“ìÊ$Ánõ‘¨«G¨ÄbÕ£w, ú7 Ó |öª_j2FÌÒ­YÜyÑäuïSÌqÇÈršŸî)»yÅ  Hè®9Šހ “Œð=(w¦È¡ø5 @±çh©J4$aWÖ†M(@£JF})Oo€9ir¥ qFE! jˆÀŒrEH±…éKŽ)62i{Ryc9iئ”xÍ&ÅëÅ.ǹÏjfŽƒµ`óI°2Ž”›ZBŠzÒ¢¨=©ø$IŠ6ÒŽ)xõ¤ïA☢·)x €Gjn1A‘FÐ=(íŒÒJ:ñš1Šîhõ¥è:ÑøÑšC½Fi¥ÆZOÊŒ¨êiGáFF}é{ö¥$iëKM8°§c4‡©)u¤,ëN ê(4T#tx÷©cÀ@=©§×Iç¥mé“;© ¸"µ4€ž”`f »Ì…”zUk0Ñ&½é÷hò¶*±¶ÛÞ’Ö6åÅF‘œ‚3žø©c‡÷¡Çj¸ñIëToC´d(æjï媷 ¯~!]£<æ®Û©1ò;V|ðIöÑPËk1¸Iû½i4F[rŽ”ÈXÆ»­JtëTbG†åÎ8&®•,¦©@¯o#SMâôHz’ý]ÑBõjß>PÝÁ¬›Ûcö囨«« 8\sQÝÙ–dtä©©%iÜ€9¤ÒìlpsZ<ÐsŠCÍdj±¼†0ƒ8<Ö…©&!‘Ú©jQ;¨Ø2sV"ÖÀÎ*”ky+ML–âk!5Rì¼Xå]ÊzqK–ËÔxÉÀô­ÕÎ)ÜŠdV]ür´©·;{Õ+øY•6¯zÕµsä ñŽ+9%Ú¥HãÖ¤¿dó£>õ=Ì qx©Ó?ú#/|b ÑÎ浸ÏZ?SÏ¥fji‡® ZŠUòÔ UÊ=òÚ›©ºªÇÏF«n<ËPöªðÀ‚"¼g½Oa•»¿z³p3 jm Äb¬G&šd\õnñA`;ŠPÃiçŒô§3ŒŠLŒõ£#=hÈÎ3F=èú‘JÏ&‚Fî )ç ¦±ÀÏUxdÜäÅO¸„R‚ÆE;¢ÒdŽâ©]Þ}žEÏ95n9 lõ§À&«$Ŧ۸b§.rÜR xSï‘JO|Ó<Åé‘BÈ­§À' ¦‰Tœ)ìGÅ7 ž 6BJñYö·r5ÓÆÿÃWÄË’¹.ð«éšjº“·4ÙœF¤œ e¼Ë*ƒjpsš=éØã4Â@¡\ã4©¤.¹å…(až´…ÀhV ЃN¤=Í!&VJµÍ(éPÜgo"  Î)¤ñŠ‚1ûÒj~˜¦²¯sNÜÅ4¨#=h :€)Ç¡¤ <âœH'æšPH£fAQù*p)DkœâœcSÚ—hâ‘Pp)|µÈ8…õºíªßcÁ854‰#5c½)ã½'n´‡¥4 ¥ ÍF)@æŽqùR‚Å8‘Ž);u¤Í&íI€¼ð)ç§HPg4R:RMØ8îØ¤*3Èç4¼v¦•É ªžxÍ/–æ”p0)¯qÎ(H•{Sö§žô öÀ§lUéKÍÃMÈ 2zÐè¤ç•TÅ!@OlR…Ý€õÐ@ãÓZÝ «•Éÿ-Kî xâŠ3“ÒšJžâ£(„Ž˜¥  ``TFÚ?3xÆêÚ6qœS¨ÀÀÇÖ…OjXáHþèÅ?½§ëQKʸ<ÓRŒqPµ¢4›ÏQDÖ‹6v«F-¸¦ù @ÔŠ›AÅ$£Ÿ¥6Û˜êfûœu¬#-ÈÔ¼¼å«2Jöä9)KIÃ*Ig*p95WY”#ŽOJŽöðÃ"Ž6“Í,S zÑC•¦J2¤Vu–ô¹pNFhÔešSïéOw‘mÄ„œã5jÚo:ÍSŸjÎÕ"Ý'¨õz”HN*”ÉpÉž”ÉKC2`ðM¥ü°U¹&œU…¾Iç-³³B2yªMtZí£9À©"v[€;OZÒ¨æ}‘±¨ac,Dç­5wįúTv¯ö…bø'8æ“Úªò 6ö<ʇ8æŸ<{m÷sÓ­MnwÚŒúU[X”]9ªìùuÅQ¹¸hmòqÞ¬iò¶V'­Gþ”­Þ¤»MöägœT6ðµÁ9¢Ç*]sÞŸ:fd=óM¾RÖÌÁÅ2Â/ôa¸äã­MlØgèj9Ž.î㸧“½Æ:U¥Gðr+7QdŒá€lqUtˉC•yZÓÄ~”Ø c5RÙn¤$õéSD¿éªÖàN)ãš‚»RÇ÷4Üq“Q Ć¥$⣑€Ï"©K3¤èÈ&­ÌÛaÊži–®Ï$÷©Œ¨¯†aC°e Tm¦Þ´m‚JÑ$qš«t"‚zàŽ)›À=E;aQ¬ŠÇ†j;›… 8ª1Ü=ĈÈüw­UÉQšM#|£5Yn”ÎTµ-ÈcúÕ=>ñ™Hy¤²£†Ðòî)©:·Á©‰u£Öµf¤®·û]ŽÚ¼³¦q‘šs·ÈO¥Vµ”»6H ±ö…Ý·pÍUÎ3ÍJÅ­÷ª7·B(ØnŠ–Ò_6Äç4ù'EïNIU—‚j…õÁŽx€8É«†uŽ0]€÷4϶ÄFw zÔ‘N²U³Q\Ý$8ËSC2ÊÔ¸äsNfÍ ¢€*9Ô”;Ma «•Ô<–n=êmNyà·óçÒéww‘éL{»¯¶ùJ¿/­;P–æÕÕ¸î*íµÒ´ ÌyÇ5qX0È"¸“@`z‚âå!Á$OóƒF[ ñT­µ!5ÃE‘•5¢¬¸4¼R3ŒÓûE7wjpäqQË÷Ò™ù*SÒ±nîF1ØŒ³p¢x•AëÞ§xH³òÇ8j$)nPõ_O.³Ë¼“ÅKxAž>23Z³>ÕFNn0ÃŒpqO†"’åO‘‰Îâi~Î<ÐùÎ=)·”er)Ô#©\ƒZK)T-”ý©Ž:š}âneúÓ¦èÄ{RÙ7îvôÅ[ëTµˆÇ~ir §•œÅQ‡|šD›ÂÄ|´ûµfÆW½P–Å]AEÚsÚ¶ B‘*“Ú¥o»X¥Šê™1Vg„]í 8Ób#™%^«íV3FTŠ‚æÏu¯–>´ëbÂ0Ž: Têi5˜–¤ßtÈ5'—,7@Æ0À«Ó©–58äR"³Æ*I"Ý\ÔV¡ã\0èiòÊêë´u« ’4¤zÕŽä¸tˆfuö4ËÝÂ1žjF$Û{â’Ï&-§­A-¹KŸ0ƒÚ¬¢Œð1VGN´É£/ãZÙZW¯56 äÅW<,Jt5:Dwo½UîÒF‘6ô¦™튼E%ª2CµªI"¹fƒSβK†ªío$°”oNµ%¬ ”¤’DZ¤‘š ¤ŒMB0d‰ûƒS^ǾɆ†ªiÖ›­>rO5>œŒ·®îWÖ /å•'¯5£cHWéÞ­äbœ:Rí4„`àö¤ëFÞ}«UÊž9ÔtëRK¶îØÎEeéLÖWRÀÿtœŠÞ·Œ9/š‹U_ôF›-»g C‘Wt™Ù¬³!ä©.¥ç\´JÝ5=¥Ë­ÈBIZ­¬Å$’GµÎ7r+ZÖ-œŽõÏOkq¬Z N+Me¹·–=ç õ­îÒw’ªMxæ1*0Á«)uæÚ—Fâ³­oæ¸2(©­{‘Ó2 –cµËc˜êfû¼ÊžÄËt²žÕ¡T¸ãšo–1ÐSDANqÍ#@ŽÀ‘Ò¤UÚ1HcçŠP~´×Œ74$[FiÞ^Tœs@P)Ô#Šh@§ R´ ®â)0Fâ”Eå¨Ç¥¦Ê‚N£"FÛÅ ^˜»êzÐTJo’£¥<}i[&©<Üy™«j€qKÇN(Ú½©ÉäÒl)Ûxæ“`Ïj ô¥À w·ëM8äqM( ž)O42®ÎÙ¦`Ò‚¹ëK´c©BŽ1A]Þ”»@4¿‘ Ž:ÓvÒ€¥ã¹ ûRGnq@äw£hÎi}éâ‚x¥ÛÇQš˜½(ÀQŠ“½Á³nh(çµ=zRãÞšÀ´"…q4gÒœu£!… 0jAŒUnIcÖ§ŒîŸJŒœ*$áÛš€ÊERгJÄtj&FiQ€éR\™<†d⣱WHˆn´†"Îw("ooå±aÆjÅñlpjiâa2Jp:SÛ3  =i³Ûb,œRCpqå•9©\1ˆUÓx‰—ÔVi2HÊÃ5fx˜Œ9ÅXW$tª§Ì àb‰íËÌ²Ž¢¦pd‹osNH¶Ã´T‘¼R:‘ÆsNÚßjÝŽ*è (<޵œÐyWEïR4~y\ñŠ|ÈÞVÕô§[TªÏåKœŠaVzÆÑ\– \pÌ„Um£xË‚;ÓD..ƒãŠ}Å •ß¼)êŒ@¬¨ÀœI1AªBæàH:RÝ$’¨\Tñ†Xž¸ªöâD™²>STµI;˜Jc9«Ã7…aV¡MˆéRœâšÜ £s8x'Û(ÿѶ‘ŒÒ*V;zJ"içYt¥»ŠI ãµI*HÖ»Aù±Š†Ê)c„«TvÑMë?ðµX¿…¦Œc¨4øM è)KM玛E[ÆiãîŸÒšÄ“ï@Å)'NöÜO!î*¶hÐÆUê+Û6{˜Ý9æ´áM‘Þªê!šdÔ1³Ã/;qН¦‰<§G\dñQÛXù!ŽkJ8ã š««C#*täâ­ÛNLC#DL´³·‚1“OÔeæ=£¡ûûcs`0zŽ•6£ìꇂ5jÞ&Ù”zUM-BÜJÆMm…Ú8éLŸýSö¨í?ÕUœñL?QOÇZL㊠ÏPtª‹pÂãËj±½sÔSƒqÔR†õ§où0i ¶O=);P[dRgÔ+p­&܌ӧf–È'Ü™8ô©Á È"”àw¡†;i/R7Ì_ï xéÔRf”i‚EóÆiKã¸Í px$RHÛPž:S!²dâ–ISȪ pÂì&ì©­AÈ¥œw¨%¹X±–š•7 ‚ áO8+«t"ŸÆ;SzRæ—xÁÎ*?0Ž)Ű3M©8¤yòHÅ7íG 9e¤«}x-Ó$ãµMm8ž ÀÔ†P 匊lÍ„=©"a°ƒKç 8ÈÍ(™IÁ#ŸZ\Ó¿*)Ý©‡#½U¹œ !O8Ȫúv¢òJÑÈ?]BiANæ®ÀÌÑ)ã$T¤ð3Šª÷›Ëâš³—kƒOiL’…š“˜ÆHæždó†zS`˜ù#еž3Kž* ù\ö©c?(¦ãÒ¢B<Æâ¥'ÐSv©ëJÔ`r=iBÓ°j\ „Sv€sÆip§­4"†ã¥.3œÔa8È© ŠM«Jg4âFsC*äÑIKÀÔþÔ=*œ“¥,~´ù#9ÊñQK!,dõ¤º8w/QÏÖ€Æ[2ÍéU4è·ï$çšžÜï3Å7TeŒdÎjå´K ´`b«± 19ϵ6;תƒŽ*ìë˜N}*;S˜±Úª þ3N¹B¯Ö‚r¢KíFhwÆk#VF1—Fù”~u[H%q‡£zŠa籫äyKô©x9¬ÈâoíÇ84]!7Qõø­Ù$õ¥a›ÀEKm•ŽzÓ"B.™±Á«âŸëQM…ˆ“N‹î Oz`Æâx¥$í5F †ûcDOÒ¯™Tdf—ò¦4ŠQOSŸÆÛµ!ô¤'qP›„¨©ƒŒ‚+:õ¥ŽdeéžkEÃt¨Úå=je`WÔcÆ•òE "·CH³)r¹¤{…V HÉ4“Ê"Œ¹¬i.žeg³ƒÚªÉ©;¿” ŠÚÓË‹|¹ÉÅYó‚õ5>õuEWûRW##µ:9ƒŒä`Pnz:°ÈÅVžà'ÏÒ³c¹'PU Áí[kŒS‡¥Ãmˆ±¢)1nب£¾ŽBT‘Öž—ï´})n$ò£-è*++¡2ã©«O&ÑÍ@.P¶ ÇÖ¤y•'¥7í(ìŒS&½Ž%ÜXëJ—q²îVš)A• Óec8Èɨ~Ô›‚œjI´yªiÍ!–Dcœ+S·j0qÚƒœ•šó‘|«œf®K0‰w1â™öÄÙ¸Š–’Q• Õ{é¶ÇŒà԰Ⱥ±#¥=fY²žœSRtf H¦ËuL3ÒµÇÇÌ9ªòݯœªŸJ¼­òЉœqšy#ÛÍËž¢œ0{Š\㊠V»,±^Õ•×™XŒ÷«jáºR± ÷±H¬¬8"—é7{Šx ŠŽ\m?JHËÅ2éÚ8IŸJÌŠO=?)¨´†x®%Võâ´5ßd|X[O£„—‰€?Jm€d.¯½$Ž¿mAÞ´‡@3O^ZCÞ³õ!Pœ³ ™ŒqUÙOÚÃň\.H4Û•i-°*(a 榱·û>á×5|Rž3Tîã߃éN-º¸íQÚ[ùhǹ4ÈwÅrùjÜ»šJ†×pBt¦G‘pÜpj”öeo–]¹SWÒ4,íEè%T“V 9ˆdT¸§cŠcc¦k!”½ÑY#ÊôèíDW¢ó~Øw.V¡¸‰ìr¢ã•ªYŒ#šeª+µ15³IÁ9ªl·¨£„ÊŠÜNƒ8Í?µ©Þ¡*ç4ød2¦ÅWXL7 ã•=ªYÌÀcV‘v€8§æ¥RžeYWï ™Y›4ÉaÜá°2)’©•vãŠY"+nU}*®Ÿ Ðï 8'Š‘#qv]‡fxL±mic/å„aÓÒ«ùJ[ ¶qv$Š»"³E…ô¤·£L€Bâï~F*[ˆšM¤v«‚ŒÔƒJ{c‚1Lü©1œÖ.¢Ò¤¹ Jô¤²¶!ÖP1Z7³ÇN€2&“ŠllæbAR2|Û‡Zi‹|›²GÈ`‘ -¹‡4¬¿>V¥ 1cÃç57åP\ ¨ô©aE!àv¨Ô ÄÓÈàÖZFÇQ-ŽOt Ì…OÖ¦¸›ËƒvjÞlY#Ÿj±lÌÉóõg ¤Ôsÿ«#ŒÕ»a$sOÓäfFç8§^Ÿ»O°µÂ‘œV\÷%+‚cWëm¢¶z÷§ˆÄoÏ8¦i÷LÒu„! ©-l¼¶gîjßJ^´ÇiÅgí‘dlŒ©§Cnþf0if·cp$SÒ‰`i àòjÁcÇzŽÙ?•@J—&AÎjñ]醯hõ™GSKæ\‚¨¡“26ð©Ù€“Mï YIœʳmçÛ<ˆ[$*ôWï·<ÔÙæ–ŽôÓÖ“ñéFõõ¥Èö¤2*“šjÊ¥±‘RÔS&ž¤m¦“ëPÇ̇&¦4yÍAêisŒÒ`w§ãŠLûÐ CȦëÒš¬ ëRÍ&ߥ.&ъ➨ RfŽ”M Š0éL2 =G4ð<_®)0(ã=)Ãð¤"ŠOÊ”bŠ?•ñÎ@¦+‡Î >”sKŠ´Òrhb“Љ.ci6†©{æŸÚ›ÞŒRŠ:òh=(Œ`æ€("‚j^ž”zÑŠB)Ê<šFïja\ŽÕwg¦Ž)v®zqHPfŒ})Àã¥&3J:b‚¹Å!‡ S|µ=GéNTÇzSÉ£ÛŠFØSvŽ€ŠSðF3MdVäMò—Ò†‰JàÓÝaS*míL¸Cô¢ˆÅ2QûÅÏj¥©Y­ÔdÎ*¦’̈öìI+Ó4Ûø7ÉïVÜ+ˆ—•FâY…Ò¢Z³L²|ÌH«¸õ¤¥Í'QXšÞØŒnqÁ«ÜŽ<¸©žÐ;EÌC¬yæ–Rc]à§<ÄÚ—œV]½ñ¸gÃZJÌöäç·Z­§E(ggcÁâ®\܈€òj™”n š•¥cáŒâª}¢y"b Õë6‘âýàÁ«<“IU®ÙÒ2ËÛš«5Ë_0rqKev×åçÒ­&òŸ7SUí²·.3UõPà¦ÖÆOj½l¥bPy¬»ãUM½úÕ™§šÙäMiDÅÔõóõ¤äÕV趨^\ùMRrH­xغ/Òœx4f£‡QggfT9"œ÷³3ŒUÌÂH7ƒ’j[g‘ `ãUf¸+•wëVlˆdb#5FSPb Š}㲔ǽVxÌ’'”Çp9Í_ò—ój¥š‘Ôž†¦RÉvJ’õA‡&ž‹›_lVm…¹ó¦ N ©cŒÁ~ 7ÊjíÔ…c$¥;îˆ?5\³‰‚†n¸ïVùïJ¨¨ßîÇ–å¢b¥IëW,åYc;M:Üm…2þCÒÛU¥Rå g­iF…c늣okÙÓ¤R—±í8µi€)Ù¦ç'­/ ùgúÕ<”‰›<⦱”ÍcŠŽàºI¹yÅEo8’|ÅiŽ• ÀÈ"}ÑA9 9©yç¥F·)¸®y£ÎPØÈ©7 sŠ…§S$ŠêpESûOúPÓš¸9¥ÔS.c#5™gpQäG9 ñZ\,‡haš{H½5n¶ Á÷§¼¡Wš®—jdÚN½>æé MÌp)‘êIå`EK ÊMʰ58äsJq޵³ g­gÝ>]NkEl`œt¨ÍÀÝÇOZ—Í …Î+8j{¯ w…h‰~\ÓçiÉÆ)â`Ñ—\«ö÷e‘ÚÑbr:S–ñX”«rŒq‘šk^ª¸V8§ÜI¶"ݱÔUM6o7yàÕ‰¯£‰ö±ûÒ}¹†NïVŒŠÉ»5^KÁ3ÓÖ¦I–DÜ1Š©=ÆàTsž8¬kVoí»¸ô5ÓŽ‚š)ëŠÐÒQF(£Š /jNôcé@掆—©Í-7½/zNüt¥¢ƒÏZ@(#f—'ƒüâ”Ñš;ô rqÞ†Îi¸ï@¥,3Ò‚éÒ“4´gµGp?v~”@r‚’Aój)$€5œðíd2&3·Ú ½µ2Æ„.9vÛxE ž•c½.Úlœ!ô¬û <ÉsÜÕ«˜°2c¨ªöÐùq„aœzÕ†Oݼª¨Ûpéš–Ö,–Æ3J‘?Ú ž•Ü3M(1×5^?µ[6x<Ö¬R3E¿ÕH|ÁpÇo½5Ò_¶«ãå«7(ïÑÞŸ2ôúU{h^9d'O’E)ºW†öˆÎMeº\ÆÁ¸#Ò¶ôÙšhþq‚[#ž”Éd ¢!ba‘O·¶ò‹Í:(äI™CUuÚvD ¶«4w0ò8­kgimòÝH¦G I‹Ö–X Nž”ùwîM§¿5e׊㥊‚ãyˆíëUü·knœhÓÑãcš|ÑÉæ½)"ˆ—Œb®Œ÷5Ú™9Qô }:T!ƒJÝ*CÒ³Y3¨ƒ§¸åv¥žB°du¢$ ŽÙˆÓµ «öò}_ê:ÓÕ° ŸtÖM¬j÷2sšIqv›8ÏZuÔî.#P:ÓÙñŽ4—ŽêQzæ‰agE+à [øüÍ5Õ;j¾‘h«gÉÉ55‚ùwr/lÖ·~)Iâ²Ëj ¬8§^¢ázi÷%ůËב+´#'’*KddV×½gÛ"ÿiI»~ì²Ä<±Hñ´m8äS­c)Rj½¤éož™«Æ%Q1ŸJ§j€Ë.qÖ™*z€wëF QXzÕ±†¶çûµSKP@¾µWU·2^Cßšµun«jqŽ>IY,»j[q‘œÓí‹ÅlêÇ8íRY$lJ󚤱$zÀaŒ‘[ŠÃš~})éŽô‡¤<ÑHiE8ò8¦ð=(¥È¤=>”£‘@ Žô Ri 'j1Å/nÔ¸÷MRžh<ŠƒëF9§gŠj¶4¤äõ¦Ð(ÈÒ‘èi3Å(ë@<⡺â"xéE¹ýÐ>Õ!šcB dŽ}èψ¤{tq†Á§GÇÒœPáÀÝ£9îiÝéOAŠCÈÇZ[T•†à8©#‹Ëàt©:QŒÒlc¨¦˜WƒJ†5$d •Ð3Šh@ 5×pÁ¤Ž%AÀ楣­„})¡$Ž´lÎiÞÜb›±G8æ‘ã ÁŠA o…Ã`f•âVà€iÊ»Fâ¤àQM*23C&=èÆ)db£ŽÝä —¶3MÚ=©@íÅ5”g4«Ž”îE—È8¦yûƦTÚ¥3‘A©Çq»¨¥oLŠ@1AÅ2HCP=¶ñŒÔñD°Œýê\ñAô©Wr!˜ëÖ£hU˜ŒÓ ¾ãót©‘Œ)@Å.9Ï`Qõ"ïAluÅ42±àƒê) ¸ÈÒœf”úP zT7<¨¥N~”œóš®€cÞ§<Ž+?ìò}¬KéRÝC#Ž)Ëh‚½9§Ë۱Ɖ#“L’%§<`÷©µ5‡Ê}jŒv†9K¯ñSÚØ<¡Øt§Kl¬AÇ"…Œô¥žÜJ£ÔR¤d S.`2ÄP£Ë[sEFMG »ÇpÏžµ¢@õ¥Æ*´–ÊdßÞ£–ÛÍÀ'¥X O4à åéš’4ÆAª²Y~ûÌ^=jЋåÁæ¢hÈà*e@##½WŽ×lÛÁ<ö«,‡iÇZ¯6'=j)-YîÉéIwlf•a">NÜöÀ¨m­LR–ÉäÒÏjd™[= >h<ȶR$¹Øy9¦ wA…éš•-À÷ëMX<²JwëUNžÍr%ÜF*ëDX •:£ìzPF(íFh#4¢Ž”˜Íu öâ” 0iqšAÅ/ZL dÓ˜`sMPGKœÓhŧ c¥'9Í(¤â`š1ÍâŠ1Óš €0iÃÓIÎ d!À@¥KÔõ¦‡Ȥv*¹ɽrjPE Ã¥;hìyÆi¹ ‚qJ\6è);Rd 2=i¬ø\ŒÓ#”J3R‚ )ni( œŒSw®qšRØÅV7Éçù'ïUÐÐr)¬@ÓCÇ4¤Þ”`Š7 õ¨æ•bL·è¤†)ÜQPIr±È=j|†PE7uƒœiÜQ‘Š©q9‰‡Vã—>¢“pÎA§’ Ô&E¨V±OgµÍ—Š2Ǩ.‹,LËÖ¢´”Ëã×5wR}¸ÆÝ+D Š) ŒÐg­2GTBÍÀ”u d¹ Êæµ—%FF ?¥R¾‘£PËÓ½Má£ROQRñŒÔ;É›oj›xi¢dÏQRu¥šX´›€æ€ÀœñJsšFaë@`Ýj7™#8bu Žj+‰ž6FA«*à¦O¥W™Ã¹Áª–EÖéÁ9fæ2Y\1S‡ ¹4«"°È4‹2³íš—u¨¦©îŠCUãϚ¬`ñAÇqHFhRTM:«`°—ÎSÔŠ•[=¥£ñ¤8Îi?:SDŠ[nFiÝéA»yÍqIœwjkQ@Å3ÎPÛr3RizQÆ>´”€Sç€óKzŠYBc&ž§rçÖƒøSÕA«M:ÆFìTÊÊê£ȦîÆE8 \Žô;ñFxÍDׇR+PAëQIuN˜dÔªáùS‘OíÖ’œ¾ô¬0qšCÈ£µBó¬nžMJ9æƒÖ—¥ 4Ï¿!`;Ò‚1õ¤ ÆA§{ÒBq@lôÅ¢€84QJ •&Ns@£½±HN)zÓ›´‡éAçŠ>µ Ïú³KoÌk‘SœŒâ³Ð?Ú5jN#95V Ì„ƒÞ¦Žò§šIf"azÑ=Ä…äc¥6yI·.(µ‘žÛsŸZm­ÃI3+O¸™•Àê¿™*°jØ åœžH¨` ±ëO·˜™Š7j·œÑøTNâ–³¥w— ó Ñ´s%º–5›w ôhúÕ‰.e¶MÎ~Z¡ÛDl¤·¥:UxÔ>ãëR,†X g¥%¬¦MÙèç4üÕ{Œùd©æ«y-NÌ2ÎBÑ2¹;…[ŒŒçšŽ¼ælö¨ÞF†áô4ÍE7"Ÿ~µ:@Qjmßʃ§Zt²í  f™hVh7±ª+p~Úät«Ó‘G½.Ü®=ª”OåHÑž=*{x†K÷«|‘QMÀ©îŠFÅA>i«ÍpFh={Rô¤êqÅcß©[ȹàžÕ|[©Pj£Ý}–áccòµ[7ˆ¸ÜjGQ7vÆib™e‹p9MõY¼¼|Õ4W^sŒTQŸô£‘Š}åÙ·Á#ƒGÚʨ}¼Uµ—|aÕg»U$g‘P¦©b»¾nâ¯ÄáÔ7­8šÍÔnžEZµv’ÙY†3T¯sÊ0ëVÅÃ*‚ÊœÊ6nÈÅVk²§ dU˜fY”æ¥e ä÷¨ä8J+Ï1Ù3óÕ$WE¥1¸Á¨562 «‘>!Ž•[í¤±Ú3ƒÍ550Ͱg4ÝEÁ· {sK ïöpã¦*սǛáYÍu'ö€u­xÉÚ ¥4~¸ëÒ³57 èSt«²ñ²¿ ½SÕ¤º…”áws[°Æß#ƒŠÏM@›¦„ŽE[¶¸29R¸Å[Î@éKÔ”‚šÇ×/¬ÞM ì2¯Ü šè­&Y WR0})·˜qÇSÖžÒ‘|RA8–=ÕZ[ò%ÚœÓíï|É ž¢ª\êf+¥$ÖšÈZÜsT­gÌÒsÀ5#j1«ì8Þ—ûE7€N3V$%ã;M2dC¸Óú$“ia‘SEp’œ«Rõ¤5 —+äÓã:î"†™ÁaKæ+t Óæ4`¥†i>Ô›±¸TùÏ>µ²ÆqU ™ÍÙS‚¸©®®-¸ïV¢bÈ ô§Ž¦’¢¸â2iП݂=)ç€J¥e¹bÕb_š3ÅClŒñÞˆsç1õ¨æˆ‹•“ŠšE¦ÜQ$?¸*=*½±1DÈGJe‘ÌîJà“Ky#nÂŒŸjd•9t­-ÀÇ»ŽEE }jø¼6ö¤µ%P‚;ÔM»í‚ñOœH\(òƒò€jÚ ( gŠc‚ TŠ&YJŸºj#nñÝ‚1ƒÖ¯…Êã֪ŠŠG pM9£2HŽ”Û¨HÀ^Ƨ€0@¬9ª÷ä…È9©£C5¾ÓÜUhá’Ê:f™2ÇrXœƒWdBøÁ# ”\“ڪ͛"ºÕØÓjŠ“ñ^çîƒïR§Ý™ÀɨS*ç=êqÇ9æ}Ät¤ïÚƒÖ“§¥dj7pœŽ jG÷LY—Öþ}Ôg--â€r*ràÙç»LÓˆ0þ5B§P zÖŠD«È[hûb¶iu4WÚ8"’U kŽ1Šu« Y¦à%Û©#¶vˆ×f`A>•º ÀéYú’†ˆnjÝ×ÉUÏAUnÊ›ˆÁÅ>ðn”Çfk”dâ¡‚) X8æ­YÆÐ“ÎjùrØâ£áO²íB‹É{ÓÜx´ëü†}jUe[^£¥r±êoô‘&·ôøâ˜`“Sj( @cŠ•QžŸ–™§# wªÒ¨b1Åi«€¾ÔèÜ8àƒRjCôªsºù»I'™o¨®Ïºþ•jÿb'¨#5«æ:VbF?´ÙŽ:bµBªò¡d p*CíGáUî%p¹ýnÎk‹&Užr*_ Jén`”ÉØÖ½ðÌ==è §QŒS-0blc­eÝà vh[ ž”í6iM’˜ûT³"¶¥TV³Ux•neÇsP\Z+Þ£v§ÞÀ»"´"Á‰F{S¤û†¹«•™n•w)«Ú4Ń‚¸"¶»TW²aŒŠ§bæÙ‹´$minÃ$Ó-”Ü)vµÈÌDS ÈŒt§·Jg– ÎiÇž)BôÅ* Ý)YsÚ(§¨Éç…Kg‘aUl€¨šŸp¥ç‚LÇ$j¹âîÝŸZ“Òu=©Üy¤1‚:qH±€sHbV9 f, vÊP ”ìqÚ˜PuÀ£ËRsNÚ E5P)àT©Éè)üçL#wZP qF £§¥úRŒ‘Mdr P1Å4"îéǽ?ЀvåLr¤(3ž)BŒçƒKŸ¥§b¡®ìãšsD°§íµ&ß@.Þ{SºzRƒ‚1HŽÔ§éHÆ)Çð¢¨cÍJñMÚ@)vNi Œö (íŠwzqéMç=)Áíš0'äᇽ1Ønè)qŸJ6ûRô¦2+õ©ìÈÀ¦žI4`âŽØ¤d ¸Å"ÆT‡8Å'L ¯zq#Ö¦ˆ’ƒ§JCÊš¯ ™aVzwøPzõ`ÐWŠ¥=™–@ÄôéS,lnêEÜã5Ä>lE{UCk!€Ç»Š’ÂÝ B…©ÿg>výÜÕ >P ªßeýÿ™žE:h<Î éCÛî‡ni‘ÅäBTsX±Ù¯]¤$ ö«qÚ½½Ê˜Øzæ¶S§4¤dñQM•pi°ÀciÙd”;çŠto]¤ñDP„M¨òñÀ4øÓƒš”pzŠG\Ž*¤v¡$.:ž´­l î=E:HŠ׈ˆ ­e®›òÅ9õÅOolÑ\^Ò´d€KŒö BvƒÅ,P¬`ã©5¶ÂIw•ã>YQIg”0ǽ[>¹¦Ÿ­RšÏÌ}Ù=iÂÕK)a’(šÉ&ûÝ*d‹ËP☶ãÌ/V6epH¦$a KŸ—µ!Éb©MhdpÙ©šÑí>•R-9bœÊ‡š½"y‘í>•Ù²…sÅ: aZd–‰#½,6«ÏÒMj^@àò*tV ‚y¨a…£•›#škÀí(mÝ).mÞDjÌV0Ztƒ(Eg¥«†<äšÞÑb”µ\ÇÒ›" —ÔUhÑá@â¥d2© C4hfo¾]ì9ݳË*”椺Gkbù©Ö±9µØýqMÊjÖ_¶ïÇËVnÃÈ*ÌKû°Ò“ìéœí¦QQ\ÝŸ­,_pU€ƒ&£8­&~”¿€<š:w¦ùƒ=©Áð3Å=iXƒ‚ 0°S—88¥È=qFàN2) c#”Ü‚pO4 zŽisëŠzLcŠ03PKt±œ ™:‚;Òð;Š^ƒš‰fß&ßJ”°ö ëL’@§œSÕ²¹ãqƒÈ¥ïGJáIž{Rôô¤Èö¥ÆGµ#qHO~1MóT0RFM<Rþ"“ÏÁ*çƒRgéE!Áì)qô¤ `fíF{RàÐbÀâ£Ú‘TÚ—hÏjPG#Š^O¥æ™ OzX×äÏ®çfZ¡’É++c”JÑ\*ž†¦i°áF)gs ?Ód˜‹}ãž+<\ù«÷ðÞ•wÌd¶'©ª]™ }êóL"·,HàU8¦y²ûªÜR±ˆç¨ªët9ÜpjxY™žj¡¼ )W` \¶rñ“i±17TÅÁ“fy¨®¡Pý…2åÙíw¦ÅCle–ßs755œ®ÌÊç85åÉŠU ÐúR[Ì$˜mpkPtÐiyéÚ£™r‡•“a‚æG'85§4¥æ¡ýà]Ùü)þy’ò>ÚŘHv·­[Óçw‰Ë6pzÕ8¯ÃÜ:;mÁ­'ùK j]¬ìÃwJ–ÎöSÚ•$ûCžP–2šŒXÁ¶£NSŒñMoºkÃ#j[ƒ`c¥jršÅ¶V“R—iÀeLê7eH«·&5^ƒ•ŒAS"Ÿz¹ç4< ÛvÎ(ÓÏî°{½Å%U¿MÖÎ3ÉGGµòâÉ<“WîÁòð:š­,L Ý“œU‹Yƒ,yÅS?hgàqÅWÓ¥¸¬¤/ Ío­U½"ýjx¾àúQŽ Tˆ¤7lÐVT·ì/.õ£¼²gÚ©ÛN$—¦*Ô·¨¾ÐPåºS¦ºG¿¨ëL†óÏ‹zô5µÊÍ;UŒ÷¨æÎÏ”sT!½g‘ã ei«|~Õå+@ŒAëQO3FÝ2ȪØËU§`‹ž*œw›œâ­C/›š—¥W»˜Â›‡jŠ;Ó,;ÀëR›€s‚ižs/=ªf—÷%…AÃÈ„O†ä3l=Gj{Oój6¹1€zÓ/®L§Z¯ü’D®©jÍÌì–Û€Å-œŽñ‚iòζીƥ–m£©ª7EÄd²ðjÖžsn;ÕÞݪ¼ò˜SwYî@~0jäRoˆ0ôª/zÞiEÆEKkpÓHTŽ•{¢˜²¦GZɶófžMý­c(Z­5ËÂÀç œb¯ºÝ8ª³3^2Ò›ªÝKj È4°\O"£àÕ›¼ù@ãšV‘’Ê3ÇJ†ÒôÎXÁ½YK‡‘öíàw«Ò1“Žjƒ^‘!¬Ã?˜ T’ê]ìp*ŕ٘•8Ȩµ)Þ†ÕÉ'µKk+¼ °ÁÅD$_µ…n=*Ô³ˆÀ÷¨>ØÂ“‚}h»¸1ÂHî;V}£I4¡Žà+Jkµ„…=M$W©#mÏ5hº¨É5G9âœÒ…©[^y“ºžÆ¯gŠ®$O†N£ëPý²=Än«tŒ RÇvŽÅCE)Cí2œŒÓ‡•ÙØ@8¥ˆƒµ+ýß³­¥å×5;Df™XrGJGŒ¥ÒžØæ¥˜yàT{LpcLÛ#ä…ÚiàÈ–Äc8¦Gj®»ñƒV&’Ø©ô¦Úƨ›Hæ¬ô¶UDI'Þ5b`úâ§¶µh¡yª°[†‘Ĩ2zU¨-Z4uÁéL³¶ÈÛÇSÖ®¬Cs`TVñ´· ¹Yò7UùGµj¡ÊƒNéÞ•±ŒŠÎv+z3Àõ«¬s²íP­ôŒWƒSLŒ×AÔp)÷p™UäŠü mæ­Ä›SšñÐR3: Êv)}‘Ò§™>Ò«Nž ÖÛqÚ˜¡–Û`ãÍ67vñÔæ¤™Ò•±À««‚„ãœV[Äþkn\©4¢Ü—ÊqÅCo Šéƒ“ÏzÐXÔ°"¬óŽÔ½©¸$ÏkfŠëÐõ¢[ö••zޏ«ê¸\U ˜äk„# «n…á*}* U‘VfŸsº€=iûO•jm´m6}jÐ8ÒMEr…â*8ªÖjñ.Ææ§¹V)òŽsM`Æcµ6Ý[É*F*8­Ì.Ø\†95ƒÖª\–ŽhH9ÁæµÃÅ“Œcµc´²‰Î=+CN™ØuäVŽ*­î>ÎÙô¨tôSÍ-ÔGz•è I°4|õ4¬ÀGµCc"•aïQ´no7§Jm°u½mùÁïRj æ(Ôt¤»¬¶·÷qSXÆ‚ÙFJuðg#–Ñ•­Æ1U§€µÀj—É]Àõ"›:5°§Ýç¡â9ÃÀ ]ÍS¾8¦sT猛n5bÚ@°(5Mí„ó™ö°©tñ$W,¯Ï½l ‘L|5ŸfWÎdrj[§ØT•Jö-ê…OB hÂàÄúUXB‹æ"¨¨’0cV­ÑKŒ}i·c1žjHÔ@ëÅf°6÷™QÃVœH5.1Þ™'kkc#“àÕ«2ÈŒ­ŒÔL¡Ùˆl{S4Ӊܹ«—¥vØ÷©âdŽ*œîî3‘Í3S%âP­†íYÃí)"<‹”­lÌ‚[n¼KkX‡N•Rñæ9+Û5š²?öšq…ϳ}8Ž!Î ©"^ŸJ~Ý‘1Yús)¹”p0jÝäÆ(‡~i%’Øç¸ÍVÓ ì‘²â¡[v:‹dñéZqÚF™ÇãšÌqö=H7ð5h¢WÝÚ®‚âŒæ£—îœÓ£û¢†U8mvÈÌq’jà9R²†94›V—j‘Ž)¦ÏAAŒ`Œ R€žŠO-G8 ¨íÒ•¡ ⣾)†5ÎiØb›å.üãŸZyE'éHv ¢°ÃH‘ à`P"PxÅ8F§¨£`)žPó7¸©@âŽÔw¦…'œTcT~XÍ.ÑÓ4‚%ÏLÓŠ¦\ƒO ;Q寠  ”…ôÓ±ïJFi3ëQ´Jç 8 `Ryj@ª S¶Š@ sO'<N´ÆåxªŸgc)bjÒ(¥+(Á (ÇJ€iÎ ¤ Î(ÚÈljXäšU@*NÔt˜¤Àö§!õ¡•x=éíÅ&ç4 gÒ”(¥Ç±AÛ·¤íGZ6޽ûP@õúÒ bŒ€SŠŒb€}é̸UK 6~5,'(>”¤äTÞ7>j¬Ö¢I÷2! A¨–ßnÍJñ=¨XA’D2¦£‚ÜD…GzE¶ )`zÕ¡Ö—©¨Þ%cÏjVŒ2ã‚(T 0:TonŽûˆæšöŠàd ‘aQ\TbÙ@ÿëT‘B±òKß­G”ÉÆRŸù9ˆQÍS’ð+tãÖ§Y•0Æ)‘Ý$’mTìÀµJ€nõ0ŒŠJZN;Q¸t£ ô¥Ý‘ŠÇ¥7¯¥!ažÔ»Æ@¥QÒšÎ ÓÆÒ:ÒnÈ¥S“G~”bšÒSœqH¬r W7ndжޤóŠƒM.ê)À†Áâ”}©³¶SåëU-î 3íVÕ”ã§;ئ+©=iÄ~TžbÃ":žô½EFÎíM·›ÌŒqÅ#O‰‚ŒsO’@‰¹±DR¬‹‘ƒRçÚÍ•! R¦)r:Ò‚=h$Æ)* ¤Ûœ-¤2)$ÕŽÔ)…Õzš« )lzS•ƒd’*ž¸¤ó”u"”È«É#:G4»†2i7 ã4ì÷¤¾¢“ÍPpHÍrƒ·#4ÙæÄÌH¬ß¶Ê]Jr¬kIfPÇ“Oiz­·&EVI˜ÎR‹‹†‰”(àÕ…lÉ8¥«Ž8¦‰Óy©wdU[Óˆê[p j}©ì*¬G÷Íš³øÑ‘Ó4ÅÀëŠ7g½(9S‚8¤ …ÍT’ñ#+qV 2)ý»P:u¢“§"—µ4 uÖšpiÜIz­=ЀÝz]Jnš’oboZ) f£•ÄH[ÒÂH²üÖšÎu§)έ)¤Åð)’>ÅÍ$2ù‚¥~†“pnýi7 PF3Fõõ¥Ü­ÜR‡ÙɤÜ:äsG&áëFE Ç<Ò‚0FáCŒÒSñÀ¤ÈÁ œR’â›ÇsJõ z3ÆiOÔTe€lfž1ëE-^k¤…‚±ÔÊÊ@=©zÒcwëKŒi0;Ðy¥ÇhÀëA æ£#>ÝÃ5&xÇZLP0§©£šR>R*àEbÜf¦è)¦5fɧŽ3QÏÂS¢? ¤Ÿ&<Í`›—~DüÐÖÌh¢Œb©ÁKæ ñSÝ\ùL£Žj+ù1n¸«–’™mÕR*jä°5LÑÆžÌ2ÊÕ³¶HcR®àÙÍ@÷a§ò÷r(YÊÊ‘ƒQj ,aZ3Þ¥E•‘Nîjâ´sN=;U Æ`Ë‚y5j<ˆòOj¬Î[ À¤†vŠãÊc}jøçš\óŠ¡©—X‰CN³ßå Þ•VówÚãÛRJd„ÜjÔ—müÎ:VcJì ¡Èö«ö7 4GwUδ÷HÍP‰I™ùâ›æ4’Aõ©n¸ÁÀ5TÍå:ÜçÖžKÇøVlG¸u-òúSÆèn”gƒWe“bƒœgŠd«û²AíQX«o\óDˆVíH<ME Ú°ƒŠ].HGÌ¿ÆM§ZOÆ ¹,íª+D›·àÖ„y–á³Éªm<«y³¦¤–WŽDô&¦¸›dcžµn‰Ÿ=©4üùd1ïWºÐ~µ‰¨\ù2Ìvšm„ûîdzUá9–ä è).f6À{ÑtÞe®ðHïE¼^d(Ki׈~ÌØÕÁùiñýÑQ]»¤9A“X; ìÿ8Õ·j†8B±Î*8ø¹n)/-üÕVA¥š/:µZ·ŒEQØT‡5IÑþÖµ>ì‚õ¢Ñ ÇšŠThç ½Z¸‹ûºÊ¥/‹ž†¯ùHv`r;ÔWªÅ½ªÌ9(¼t5'Öª]g*qÀ56wÆ@ôªöÑù‡©©<­óÇJ³ÐRªß)hŽÚu¾`z ­2»FÆ@©.þhñŠGÍµÛŽÔØ¢AR½*Ä( ÅY)­÷OJ4t•˜Ž $Ñ¥SéM–7,j†ks•Ú ÁÍhÄO•j¯•Ž:ÔWAþÒ…A –åZHԎƤ,L=;TV0#¾jI‰3©ô©'RðŸ¥%«°n0hi™e ëVâŽÙâª^;èj¥Ä>l8M[²Êª{SN>Õ“ŒÓ/IÌxõ©%„Ëžâ¤bÞIQ×Ë$*¤Ôæ­šCÐÖEÜnòÑîJ¬¶EfV‡^*üq4Soë‘O ûA ’h‰ƒËQÚj¥#U=E>é F@î Ef­!¤¹ƒÍÁÏ æ¤ùŠm#µð”àO5ݹ•”Ž¢£–ÌIj{hÌiƒÉ¤ºÏ–@§YHËÒ1L¼¤Úè5þcÛæÅ&œ$H¶8æ—Éax$íR\©uõ%fªÜ³º•<нl@*J­w•,9ò×éN=*¬@ùìjÉj’¶e9â˜.Á«S`ÂrGJ£`¡ …õ¦ÂWíçß­JÊÂô÷i—ø!FsZßêÀö©±Î);Rtª³ÈZ£î½ªmHyÑkv®|Eq FFz×amþ©~•>x¦ô9 ô=+@§SPõ?Q€´@¦3ž)—rI Бס¦ùlöàã’*rdKžH¨¢Ý-¸%jÍœO¶ã×µ ´ÌÜTw1…¸ŒŒ ÒOº G?+Š‘µ)PÃMlÕgÜZ¸ª j?)Aϧ•ÏŠ˜ô§õô }E5MòóOAÛ®(íMØjP€R9¥ŠwÒ\S]ƒœb…]£Rì®(RŠr1Mí=)03Ú” aÈ¡WŒqŠ<¡œàS°}©ß!£Ý£=¨*3Ú€€õ¥G@(Ø4c®&ÑíI´Ú…P½1K´uÀ§`b.Óœ a@[$ Ô(Æ@ËŽ´‚0AJ¨p ŒÏ¡âVÆ@⌠03J8¢ŒS `ÒÀ4¥}…KŒž´£JVëMéHô¤#éNè´˜éÍ.ÚLR`A¡@ô‡“‚h+ý( `(Ú3š]¿JF\¦Ò4Ô€'J“âŽÕ ã)RD0€PHèj¼c÷­VxïP´+¸O%Iϧ4jɶ™ºG’1Í5mQeÞ:Ô­°÷¨šÕ_«(ŒS‰ËfŒuæ—‚"¡h•Ž{Ón,hŸÇµ üª G9#šE…©ÒD’ ”À]½©‚BH_쿽f sJlÔ‘À«aÍ´@t¦¤ ¯œT¥.ʼnTÔ§dzÓ#AŽiŠŠ½Z; ÒÉÎAH¨Àœ(íUZiwf¬*)Y‡4ä@ƒH@âD£¥<57^E(E ¡ºâ"¯¥G,+'\b•a ›GJC‘ß­4Û«>ìsR˜Ô®¤ò”tâ›$*çœQä »p1DP,G€=é&·Y :(üº”M)Ⓤ¯ql&Ạ<ÝíÍ*@±¦ÑL[eRHïQ‹%ùƒ­Ú XãÓd€üW‘Txügè)§®)xÅS’Ô4âLò)âHÜAÅÛ¬±m5 ÄÊ›zÔþPhʵC¹‰°§Š°í>´Èã*äšeÄIQ³À«k€MG/AR/ݽFíš‚ÞçÌ‘ö«,Àwžb“ÔS·9¤B)K3Å7zžôàAÍ(`‡9›Æ{Q{Ša•°M<FA¦HÀ ç¥PKÇ[€‡¡5¦qN|`SàqTã»?i15[W€A§dI¹sŒÑœQÇ\Ò–àÕ3vÂ>™«YÎiTZpëÖ‚FqPË&ÞêEÁQI½{PÀô¦K"ƹ$ XäY ƒOÜz7Ô¹õéMèi­÷MV‚bòlqVÃ)î*9œ*4DåÐdÒ™˜ÓÕƒ0iÇŠ@?:BØêi¢D'æžqšh‘ ÀaŸJ“A,@¨üÅõàAÍFÓ*°\ŠvsÍ8r:ÒKqHp¼æšOFéJ%\ã#4*–Á#5VîVŒ§ŒóS¤ªQI5.Aª 2…ȦÎìx©’MèiÛ€ã4«ó7QN${RaJœõ¨ä‘Q $)β¯¯}3ÀªËëÍXŠudRHTÃÈ4Ç•Pe$s$Ÿu©r1PÎ~\Sãû£7NÕZ#ûâ*ØÆyÅ#•-Æ)Ù þ™ö G¨ÞuV‘R‚r1HgRþT7¥S{°’„=ÏlŽÔ£šBp;SUf jAÀ£#Ú•pqL…<šª· ö…SÒ®)7.q‘G¤õ£v)Ñ@´„Ð9ô£¿j3Ž0(¸ö˜öæ•”Ž´ƒó¥ãÚŠ1Aã)sÇjJ?*QéŠ6ÐGâŒ}(ÇÒŒqÚŒsJH PzÒ~TcÚÆ)¸î)I'°¤ï@ô£­.) Å'~qNÇ„f¥.9£JQÐÒ~T¸úRÏAJ; BZB¼ÒëF?:1ô  QÞ”úv¨eÆHŸtS'—ËŒ· ¨®ÓF\‡Oɸ·\Óµá¡ÁÎ8§G åNióLCªôé¢LŒSËÛ8¬Û¸”¸vèjÜsºOå¿4—¯"e#­9–O'x=)Rë6¥Û¨âª’Ó.ðØïVm',ïê(ù®`⨤l—ŠšÛ@p9§óíM"²dŒ¶£‘Ž”²™-\6Fyy¥%†0j)¤ ¹Î XGÄ;¥D²™AÁRDò 7OZ­s±.Pž´árÏ8D9õ­ÁÛÍH=)FsÏJ§x§r•õ© >I>ÕŸjdÈ à-e’;£ÕB#%»a±E„f8'?Zq”Ë#*œb˜Y¡e³“WW,)Ä{R0ÊÖrÆ~ÐøïNÚñθnZžáwBÙ=ª;rDïY7­ÅdÈðkCL‘¤ïÜ;Ó š^ùª—ŒÉ Ö=¤ò<¹ð} k;²À9Õi7¬¿xUÃ#<#?U»b óV휼 xäUЛô¸­D\&3KÐcŠ1ŽÔ«×µ$˹k.hî™§j¢÷2Å«såžõ¬±‰X>iš–僓šO(½°9ÁÅKbÌÑÇ$c ·‚¥»â#Ò„}–ùµD®eBOZ–ÎFÚUºÕ¡øQøU;èË@ÿN*6-±g<æ§¼@ÐóëQ3AÆKdìaù¹ ÕS?™3©Ô0´±Ý«…&¶Ôœv梟îô©"(¤<EWŒ~øš±ÎÚ̼º–UTu Í2¦òE\IKA¿ª$c6XJë7–Ýê•êÈn) fµùquè*šÊd,À÷§ÚÝvVþç¾ÔíY× ßkŒ™­hþè§S$Üc#5›`Œ%—ssW¦“ÊOzn£Ýœe½Öw)ê(ÞfbôªÊY.Ô5X»• µ^K–Œ) Þ´/}«8HñÞ€N¬ÈIj¸™ 3OœQœvuæŒã¥#ž)¹#Ò—Õ]a{K¡ bÁºÖìRN§j 5ùc€)Ä~èúÕ;@Ê\2œg5$_·Š·v¦H0:ûRZ¹1#‘LŽ6Žvb:Ô’Çæ²ŸCš²P)Ù4‡¥U]Ë98ëD¬Û× Çz|¤˜pQQ[ïGJ‚Ke›‰TövÂBô«Ç§vª÷ÙÀ³Íª·!pÕi!cÖê)ѯÊZ.Ê€£Vâ,%vâ­Y«,aHéQÎ¥nV@µm_rþ W;å(F1V‡N) ž)Äçñª76ìÌ85 ÅŸ™qózÕ»XÌp…=qL½VhþQœS”³ãâ™e½7 ´ÙQÍʰ¥½b!ÀÒÀ ÚGjtjåÅMð*^ô™çŠŠás éUlK ÚW½Mr“w gÈÁ8¦Zo Á†9â˜-Ìr³¨êjEŒ´€ã¥\ †äá>3ò ‰¨cÿZsÞ¦8#ŸråB{SçQäw¢M¶Üö¤µS*Þµ"¦é·Ónù¨ØéS“º<J«ÉÎ94è`Ë(¤‰|©œž¦£¹oÞ¡½hÇ÷¥¤p@"©@%|÷©æO6:íŒ)*¼PâW^”èÅ#{Õyƒ›´`8©'Ü@Îqì* ÈË"^„VŒ-˜ÀࣷZ÷ø«$ZŒÄ­É¡£Æ(HÂŽ0( “ž)ÀPÊj]  To±æ<Vˆ1É€g$ •F´M0 ')àqíM((ÛƒŸZ<°O4žX Æ»qM1¯¥)@W …a!ºäU„P)0øÍ< pÒ~4~T½ºÒ”¸æ“¿jáJª9¦ãšSÍ!N-•€3H~”QÐÑÞHx£4´ J9õ¥¤ü©i: JZ\QF)áG8íNãƒ#½}(Å%ç4c=hü©E!$zQÚŠ:ÒÑE¹Çz Í'n•ÇŒSÓîŠv~”…‡¨¤{R–úR‚<Ósî(Èõ¥ÏÏ4W#5"ò~´6”`Ô‡i7 u1Ò ŽRÒNšQœâ¥ŒîPÞÕUîvÎ#=êÈ#NíI“E1¥ @$sNÞ çŠ¬·9˜¡<Õ±½Eèâ“éF9ëJG8¦“ŽôSÞ‚}é<Áê)ݳ‘Hg¤Þ½2)w‘JN;вŒà0¥½E+ tâ¡¶™äÎìqVÀæ”âê)»‡zPÀŒñPÏp±Ž¢ª­ïÌCqN[Æ2¯¡«Ã‘šZ2)7QAqLiK¸ÏàF3ÁúR±ÅíOÎSzÒâ ¸a\±Ÿ¬Š 9ˆSÔP®9¥b=i†@)“3‰ZŽÊc"ݸ«U-€EH94˜ qHǤwy }h.ç"H6žE*º±ê)Õ ëòb¤ˆƒ‘IŠ®€} ô«=»fÊŽ4„R‚(ïAëÖ—¯4˜÷§)Å&9<ÒqÒ”RJ:Pq@Á¤"ŒRŠæƒøSJŠP=éqIßµ;¶(4 úÑŽ”J)2z\öâ“ô£ò£ôwëE%/ãŠ(̓ÐÑøÒþ"“½/~´‡­/¥(àçŠN(ü¨Í£ñ úQŠ1Í ôãȤÆ)3šn”P9¥'<iãÒŠ(£Ö”ŒôÅ'|bÂ–ÆÆŒ{ÑøŠ •ÔR ÔŠ0½)®p‡š¤¸ ·4¶Þac¸ð)e¸Ãì$ Tv ¢øºÅ¹4ÔghCŽ*ky ‘‘š§µ÷^iÇÆ3KNíÚª^3¬d­W’W†@Ù>”ëKƒ<9ÈÏJUÊœµW¶f,¤Ôz®ï(ëW­³ä&OðÖuú·Ú£ÛÔÔ®òEµ³Ç½h£n@}E;âÖ]â¿Ú†8ÍhD¤&5˜ÆA¨áGhÊÑÈ ž X–a{‰«ý¥°ŒU¨e.A©?*NIª7ò¼K‘Ò«Átd#VîYü¬«Uidòâw5~ß ·\óTæ‘ã¹QŸ”Õk¹d†â2 ÚO5¤‡Ì*A¤¸  P‘·œóSùÛa±œS ù‘nÝÖ¢°4€‘Ö´4ÿᨤ`ˆIíUac8'w‘ÈR}™Èª—ñHÓ¦…'µI-¶È Ï8©--±±lšÑÜP*)›ld޵F)ZEo›Ÿ™ 9'Š[¥8|¿ñíœô–,Í\óQÍæ-Ò€Ü&/×½_FÝ>¢œ8ô¥=8¬ÍJ=ÛrqW-”$#éP+yÓ2“À¢CäH¸nÕ,ñnÚ›Ã`Í$ðï„€i±dC´ŽECf¬’¾áÔÖ¥}©’®øÈª–àÂJöÍõ¦-XXÒ­¹©§4M³¨¾ÎÃ8=hòdÈ!ºS„OýêO&Lýê–ÝÏ4ß%óœÐо:ÓD÷©Â ?¿G• o½G— èi¥&ÏÞ¡RCŽiY%ÝÁ«0 óSøÏ&“8÷§dbŒúb“b—v¦÷ëEŽ}©{P:v£ð¥ê)u¥íQH@õäRIaQ,{yÇzz®_qÅ=—pè)€((|Ø" €)U猊Ì)áBŒbŽ”£¦x¦·QÒ€‚›³æ'4ò)›9À¥*`ã‹1MhßqŠSnõ@€NÏ¥éMetqŠŒ[©}ÜfžcC×…8¤X‚ý3RÇ¥-ºÓJƒÖF3.Õö¤(9Å(—¯^”cŽÔŠLRlÎ){Å&Ð})B(éKNR)1éM)Îp)qMd : R‹´ íKŒ”ƒŸJl‘ï\f¢òˆZl6«…±ÍY<Òl^zPì#F¤äŽiÁG §`À´‡ëMÀ4›FiÛwRm¥.3H—…zxéIßµúR®)¥(uÌexæ«Ãiå1 þumTKÓÒšà”è9¡FRb¡EbjlQǨ sKŒzPÒ“½©ÀñIÒ“ò¥ü©*JJ3Ïj\ãšwáF)3ŠLg½%´sA£­€2qÅ uç§žÔ”RQjozq¤\ qäÔe9íNǤÇçA@j»ÙÄ͸¨&ž"g¦ \SLj U)Ùã­ £µJ0sK¶Œ})8͵8àÓqÍ.8¤£Çj0 4áÓŠ1@\÷ƒð¥ü¨ÎGj3GåG|ñHzæ”IŠ_ÊŽÔ¼Rté@‚9íF)p}j)Gž¼(â‚p)‹ rFE$­± DûÔ“#ÚŽƒµ #êJ^½)¬p;R$Æ*)¥ØêxÁ©ÁïNÈæ5OP?LQ¸{ p?JBÀw¥Ü§‘Cb¡žqöød px©xµ6€1éJOn)¤Œ{ÐH“Uží#8ÍXG  Žôún=iÜÍ7põ—ƒÞàw€ƒA`:âëëKœóÚH:Fà:ÒƒÇjMëž N)¢dÆr)ÁRyŠH…?pǦï\g4 ‚2 1ä Œ‘NÞr* ÿ½ÅM;ÒnŠ8ѸmÎE un„xü(#&—Œ F#µ3ÍRq¸f"–ÆG4nPzŠŽg!~SR#|™4Ä]ʆSn¦òc.9ų‰áßÜÔå»qFsGNÔ£Öší€MEâG+‘Å2ñÝ",½…6Úä< ±ÕÊÃ9ÏÒ›$ËÜH¢;˜åû„—¾N(‘°¹¦£n£ß"¢_¾zT½) Ž´J~´ƒëKŽiXy¥ #Šo^â—J(íÖ“·QKÔb›š^Ø¥Í;â™×Ò–ŠNôàx ô¦çRõô¥4˜÷ûPIã¥)¤ÅÊŒc¦(ïÚ”þcéIž)hüix¤ãÖŒÑÚŠ?KùRvíE(#Ú“ò£ö¥ühÁ4r"“ëŠ^¾”~T†ŒûÑFGµ(äö¥r1Š<õ§=ir=¨ÏÒ“§¥¹£ñÛ4¤ý):ž´½¹Å!úŠQõ âj8 ÷¥ã¶)){Pj)AÅ9NRJ7)æ©YÇûÉîsV§ÿV~•¸>Vr)ð¹ÞAÅ2k¿.E2;ƒ¸F3W‡+ž(¤?…V¾,¶ŒÈyªÚnò™'9©/˜€ |Ô® Å»<÷©a2“Íf·œnÊ+aqV¡I!™ø÷¤K;;OÒ§ØpNj'ù§'ŠKiópP6@«rÌTZ­>áÉÎEMgäb­àc9¤íÖ“·Z‚IÀ`™¨^WˆäœŠ‘ä-nYqȬ›T’y·cÅnF»T Sè¦M D'Òª#<ªX*H^@áÓ½ s1<ô¨Œí ê„ðišŒ’*Žha)¶ ¿jÞFxâ3U%g†åN~SVH2àƒMºŸìðd‘UVR˼µ™mNx5NÒ)_x,p hòã<çŠÎ¼*ÙSšÐF"/½Ú«—Â1-ÍMc7šœž†¢¿Œ».Óšµm@ íQtºñŠtÒì*=iûBÂÍžj8d2DsùÕh|ÃpèXíô§äÅr£<Ð^izúQùR8ÊšÊÚc¼å† Hß$¡³ÅY ¼ŠŽõ—ÁÁ$ykp;â©Z@VâB[½]¹·qíTl‹ç=*ͤÌóHŒséWqÚ—4¦¢•7!äcŸ§Ûí™ÛqÆjåØÌ ‚:Ve­»=»O&¬iû•]³Ž”Û†2NcÆF(‚ܤŠGµGNÔÉ~å` éš9£V̘©qHή1Q™w SÔR‰W=E/œ¾£ŠCp¥‡Ì?:<Õþð¥óTu"91ÔRyÉŽ¢—ÏAüBMèâp€òÃó¦µÔDýáùÑö„þòþt}ª<ãpüéâê2¤\ýi¿hAüCó¥ó“Ü(óãÇÞˆñ÷… ¹Œq½:V¸@¹Ü*3u~úþtáu~ð§}¡3ÔR5ÌÞ%ÄmчçJn#Ä?:Cr˜û™öȺoZU»‹xRý®?ïΓíQŸâ(¹Lýå ÜÇŸ¼)ßh0£ÏN¥…'Ÿ]´GýåüèQâ_Ηí·FZQ2ôÜ)|Ôõ‚eÏÞyê Ó¡"“íŽ7δFˆ~t„Ä?:p™[¡¥2(8$P%QüBÌ­ÔŠ_1}E'𣝾bžŒ?:C*xR‰ºJΠuÁ"úŠPê{ŠRãÔR\€XSŒŠ )7¯¨£zž2)7®@R‡¢—~;Ð<Òõ¡×ŽEÀ=hÝÇZ‡¨¥Ü=EûŠ2=hÎ;Š\ŒòE&áíFy¥'#Ú¢˜áE=GËŠ¦©Á”‘ƒw5bVÊv¦ÅÄ})±æ7U[ˆ7܃’K¾Ò9Î*úžœÐO4T ù-Ú«Ø0Xñß4]òW'5$»š zŠK`V,UÑí…±Å^tßíTíá–R:Õ°½qéYû§;>”È¢¼fÛÁ«òÿ ¥˜ J-÷`t«E©3Çj?ιF*ùèjÄ„õ9«D¦7n:ÐÐù³+v™|Œv gšŸ¥¾0:RZgiŠ/ óc zv¤³FXÀj/müøJÔp©\ Z²ydùTVÁ•ØÁ5%É>QÛÖ©B7œHƒ>¸«Œ¬"8=ªºFLd´Y!‹pÇ$Ô× •Rz–9_z®Å¾Ô08©¤~qN9)¶‘ËŒàUhw ‚HëQÜ.PÀ­59QN…{Rã Õ+ˆƒ29Iø½êh…¦\¡dÀêibF:Sc$TÔÄx ÍF©ª74ö‡TÙ÷ûÕ[øõRÉå1÷© ´Õ_æyö«ÊüŸ™È¦eß–?½aKý™¨€@”æ™ý¨ç™ ËSCòKRÇg¨<€¼‡ø­(l¦CÈsQIcrÙ#sM]:ëo2ži²æ8̦¦þÏ“ÊÛæ¬úDùÊHA¦eÝÌÍJú}áŒbSštÛÒ9”Ó™|¬H˜âžtûâGï*GÓ.Ù1æ~µYt‹°ÿëZ¤þÈ»Á>sdô¨ŸI¾=&j´ÝMdùf8«CM¾Ú§Íl÷¥:uñÇïZ¤M>ôËSR>ŸvÃýi XÝ”dCš¹¤x’=BàÅí](ä ŽqòŠr–×4Ý€ó@$M¢”.9áFÊxúÒ7Z? ‚1ëQ, ‡ SösJSŽ”›p1@Qè3N<M ž‚”˜cç½Zç¶iJepqHcÈ*qB¦Á€IÏj2{ÑÞ˜ñîëMXöÓ™séQ¬!NEN? ;P8ëJpEFPfœ®) -*¨^”ŽªÝi6Œ` Pނ޴)9â“hž8ì)¸Ï‚4 ÏANÇŽ´Ý£¦hUâ SB…à þùS…ŒXû£JwØâþè¤6qgîÊ—ìÑá• ´Œ¦µŒ%³°R}‚ü#ò¨ßK€Ÿ¸¿•FúE³Œ_Ê¡mÔ©å\Á°oˆ#òŽLW}f5úQ)✤bÐsMÏ=iTƒÐÐxïH`óN'Š21Ö“#Ö¢y•Xdõ©ÈÎEPp)¾`õ»E5œ/Þ ŠÝ ? h#Ö— Ž &G¨Í.áÖ‘Gz2ê( ê)K ã<ÑœRoSÜPõ¤wU&‘[£ qu¨¥Ü29ëN§µv¦õ4à@ã„òx¥«^\P>´–ó´ª85 íÛ[)nÔYܽÀ ÀàÕÍàuŃnéÚžzõª·S˜ã%HȪúmã\îÝÎip;QGãP¼è²MHÍ•$b«ApLŒ¯Ž*Ò²žx¥,<^éOJB@^M!aœf—Ž9 ¸#ŠOsFA§pM+0 EdËu$Wj˜ùXóZjÀ¯¤fÊ‚@ÝãÖš¥T<‘Iç¡î)ÊÁ†A È»±¸S· ¦š&R¸ÍE= Gq0Š2Æ’Úu–<ƒV¸Æj)ËI6Òõ©€a<sšå¼IóÜÂÉÏ¿b?Ñ“álëJG½7(ÅgRÑA&ŽsÅ+1âjYxœ¼ÜÑ'ÜÍgC%Ã3©ìx«ò8“cŠ.n2®zÔO½pU5qrñryÅP34s×¥Z„9É-ÅP¼I~Ô€1Á5« ““RRŠŽa•8ªÆI$ucÀ§‡he NAõ¨/žMêÀ4ß´v Ù5¥¿1îöªMtÈfÁ÷©â‘ŠGZnòÄ7™©–V–8ÅD³ ’j[w.ªÛå›pi$šHn“ž ïWn%) `y¨Ç/›e›Ò–ÐÜ1˱ÇaM¸™äŸË§Z|[ã‘qœw©/K¥[5f4m çš°8â”cÖŒsKÓÒš jž£²98àU*îG‡zqF©pD<¯J½an¤c¥2Gý÷ÌpC ÁûXPÙZ¿<¾\E…T’34$îê* #˜¤÷­œ` \{ÓHàÖ ÜS>¢˜l/ZÚ‰HŒÍR Æé±À©GŽè.r %åÉŒªƒœÓÑ‚Æy5irƒÅ”d’E…yÍ£Q»”¹ ýi21ÖŒŠQøPzÒãŠOÊ“<Òädžô£óAÀ8cŠQÒ“šLwâ—¨¤í\¶¦ÛuhF2I®–û±ô¢C‘O^”ÙÿZ©lxüw©yó²Gsyºâ¦P àŠ—;WY×p™Æî„*Í£¶Í­ÔSnAóÑöñV£lŠ~9 ýi’}ÃŽÕ•ktÔ‘žÆ®²‰8 Ôeœz §u 1B«ÐÕõfò@Ç5]¡+n^}iÖÈñÆÜçÓ4ª‹ !“‘RÃî™XñÚ›^Z•#гaA ULyœS/“|±¶:Ôû¶&Ô€;VU°¹BNÎ lXÌdR1‚(x6ϼ æ¦ œaqPÝ¡ m [‹&1‘Ú˜d"P¸©¸ô§qŠNý¨ÇÒ—Bÿs[²Žâ¡Ócòâ ÃÒê1y±ÅKc•€!À¨dV3Ã#µUX™/U°qZ’GæÄ~•1H ã$TV%öåÆMiçŠPsIT&V[…|qVÕ¾LJ¬¤‰ÉÅF䛥 }M>x²¶ÅJª»~íX^8¥Ï!” ±Ÿ80ù¾uÚÍ0†HÀ Ô>d]955 ÙLRG•38j½ë?š„/óZQS»ÑÍQ½/‘·§z­umæÆ0vÙˆˆAYºŒRÍ(Ø@Ú’ßÏ·`æ´.!Pc©¶Ñ)Õ¬aNREqtÇo¤‘ X•<ˆZ˜£„G^˜¤sµI8®oR×¾Í9EÁ#Ò³‡ˆn°[ËÀÆsUÅ“ÊT.-ŠÚ]Bñ‘[iäSbÕ.VåÁžjη¨Mgj&Œ|¸É¬; ~ãQ¹ #Ö®Íy©C(2•îõ¥>\VŽŸwq$gÌÆqY·$kK–ŽP8­=]‹SÈGVÚóéKÇ5‘¬ê"ÎÙŽ@ u®[G×®µÓ~®¶öIc°,¼°ZäáÖ/¤} œƒŒV‚Þjh7”$U¨5ÉAýúmõÍlYê]®èØjÃ×ïîí$˜íT´NúòäùŒx<Ší;G9§ŠkýÒEqzÞ©ygpUNjK+ÍJæ=ýªÛK¨•TßßÅrU!Ië]|-º5'©(ÖŽ1ŠB>Rx¬=bök%Þ£åïPiž!KœÚq]"È$Œ0#š­y+El̸,+•ƒÄ­>¦¶ª¿6y®¹ù`œ++WÕÖÎWæ>‚¹“®ê\ÃÅUm{S´yªBç©®§Kñ 7[Qw‘Ò·  .ìŒz×+ªx¥mnŒIócÒ²åñ…Ìk¸ÂpzV­¼Q4ê6®XŽ”—^#½€äÊ´´6¢å á…;]ÖfÓ°våOSY6^/’êepq]•¤í4!œjIgÄ€bÝø†(Ü¢~•êóºoòøíP¿‰ ,ƒÖÄWþmŸœ +çÅ‚ÞB¬¸ úÔ–¾'7K•BGҬ˯¼j–*K_ îV"¼šèÃesY÷š¤Vù†jƒkR¹Ǹ¨O‰6Ç\ZÛÓïÜ@zÕÞôãõ¤éÞ’Ž´´Ü+“ÔŸä+ï]L8Ø:t¨ç$1RÆr¢œÊ`ÓV ½§yc psHžÔ0)»Å?.)YA"”.ÑŒ SÚ“<ÓdRTã½QŠÈ$ìþ§5yPHÈ '”=©ÛJCûPJp‰px¥ ¥*3Ò€0)†1» ¤0«8Í2X.Ú âŸ 2OsSí£Ò õÅ;8© ƒÏzxdRwã3Ç&˜Ñ†Îq@Œ0((äâ  ¥d yÅ!‰HéOÚ¤0xª€‚ŸŸaH(¦²éI´Å AœàPc_ANÚ:q@QϽ8£ø»RþÒ3œJ:P@4݃9¥*íHPP¨N)qŸJkF­ØS€Ú§cžÔžô ðhØ9¤Ø1ÐTOî”ÁoÎO5eTFÁéKŠ6äç“`Í.>”⣓¡ãµ:>RšiÞ4ãXzŠÿ¦ÄsÞ¶b`úT„{QŒ`QAéH)²©d"°N„re~rjÕÆÚ2„=+Ì^3¸"çh“ ^©c µ¬d¨Îj9tÄk'L§âDÿ‰Dƒýšä|Þ6æ&½ˉ±?"“ÓŠ"µäŽõÀxÎÜÇw®y88¬ùôÝQ ·îÉäW¬ZÌ'…\wùe£Æ+ͼO©´óI|.:ÕODÆùضyèkÓæ m\7¡®Éã:³) aºWo*ÑœÖ^³bjä uÌxvîK}LA’T×Q­Â&µÎ@=A¬ ƒö©CrsÖ»@1KÞ—h+Ï­q>+ ªÍØÖ‡‡gŠ{P‚km’F»y¥‰=éÚΓnšt˜EÈ^8®CÃñ»jФeA¯D}:)#ù”gFÃDK+Ç• ù¥EâxU´ç%r@®'‘gVÆ;ת XâÏÇxƒX•äò <ô8­ 'FY Y¦\±ÇZÝQ¨ `{V^£ ÅvÁ°A~ÚÓÈ´ö¼ó^¶‹ûL…-¼·á]ž‰¦Ãšœ‘Ö´^Âà¨"ªÿcB.T ÖÃm‰@®Þáõ q¡vùU³ŠíÒÎ-€*•î‡ Àû¸÷«z]§Ù!ÙZ#=iNni;t¤£Òž”Ö8ÉjzZêâûƒéQÏ÷zT¨0ƒŠuzÑÚŒŒö 0ÏZdµr)°Êe銔uíAÀ£­‚0i3ŠF`jQÓ=i @&— úR3' äT,ì5>~Z@sÞ‚piq‘Ji&ÎGZ©ove¹d=ªúõÍâŒÓI÷£pÎ*µÔÍR1ƒVc;j]àw£99Uøy5ƒå4C˜¡~覓óâ¤à+üâê.3ÍkEÊ ‘ˆ“<óGjAFNzÒÓOZŠ^Pç¥y~°¢©Kצi„49çÕ’3Xúÿüƒ&Ï¥y¾”÷ {û•'¨ÖÉ©j(¡v…]Ó®'še2nºNª3\OŒ‘‹FqÆq\åÅ“B‰p#ù@ÉÈë]¿†u?µZÎ7/j·®]ùmƒ‚k…¸ÓZkyg”“žzTÞ *ºƒ¢=±^‡vضsÇJóA#E­‰ Âî¯F²½Š[uepEWÕ¦Ýhè¼’+•Ñ4ùΪ% íÑëìËc…<Õ Æ»g“ÖºÑKÐÑ¸Ž•ÄøÂ32`~¶ “·wC^“……*P("˜ÿtמë‘Gý¦ÎÇn¥¦x‡${IÇÅZ›Ä°¸9­]"ñ®àÜqÍ^¹Œ¼,¾¢¼¾èM¤k-(“Òºí7đΊƒŽk~+È¥*°íÒô£4 dÒ´´”ÇûµÈ^ÿ dúñ]lGäJdÿw­K)Šl¯± ÏJ‰Xº’ ,2–%[¨¨Œ­çö¤bñʧ<´ß4|úTp`+õª³M,S¯÷IÅZgvÆ L¿tsO) g_É4EY~”×iÌ{Á9ÆjÅ´Ìðî`3Qåæ'iÆ=©©$̪ç Óî÷íZ¦€0Œdä⢘0¸B:T²Î#PSQ‡|n=é.. Æ<Ô;Ï—¸‘S%Ë}ÇŠ‰¦BÄš©`®š‹©5º:f£v"¢2 ª†é¥—ÊSȧˆåY•%{ÓïòÔûÔ¾g—n=)"£'<šd3Ÿ9öª÷3—æ'm-´ÁŸå“8íN¡§d'‘S,§ÍµCz>tÁÆMH-‰*ùéW`y§Pk2ê×(sÅ_@BvoïdK°vJB¬aÎyÆh´¤B­Ôu¨“í%TðjH–X·I¨ŽF—,Õ,LùaŽ;U‰%Ë j{IÕØ…n‚ ¹¹dº‚TÕ‹i<ÇÈn)Ò[•çŠ[‰ˆ*™äÓ$…‘ ÉÏZ’ÚS$wjÏ‚)Zê@\íÏJ·¼w*7pkD•Væm’*ç­$ˆV2ÀóO‰ËÛj­²Ã3Iho‚ƒÁõ­N´Ù8SëD_v‘rTh5>±ïPµü\ñšÖ‹îŽiýM {Òw¢–ŒÔS«"¼×WMÚær8~+ÐôàVÒ1þÈ«u—­¨m:P}+—ð½ª-ÃpI®Ï챑÷A¡lcV(Ác·½r( ];z{X-ÞŒ㨬 ÷û.òA#aCw­ÝN=Zâ(¡`뻵_ÖmE¾ŠÛG!k™ðF´ä9ã5è÷„VéÒ¼ÆîÞk«Ò°ƒØâºí3Iº†ÕWÌo^kCìJ@‘ÍhZÙ$ òŒzÖwˆv¥“@¬¯ Íæ;ãÖ» 8ëL‘Äi’EEÂÌ °µØ„­´ š±¢Z"[chÏ­iËc«µ’ÞÕ-†p=*ÇJN´´žµ‹â §ÈqY~RÐ8=3Åhj¶+$e°3íTíd[HŠ LS4ûsö£'©ªÞ(¶2ªû Ðð¸)e±¸ôÍt¤` B=ë…ñ»o´.OJo€mZ;Wr0X×xzÖv²¹°•}«†ðÔ5rÙã'Šô¤à ZÅñ|œö®OÂÄhžü×m©Ç‹‘é\>•:¶ªŠôX¾àúT©i²”לx‡?Ú¸+¦Ò4¸šÑ¨$Œô«wZÇ‚€Z³§X‹8¶­^<ŠÇÔôX¯‰fpW6þžÒRñ’@¦[ÉwÁß¹@ï]>•¨ ˜Äd GzÛïK’)>´w¢šÇƒ\Þ[_ŒâºÈ¿ÕŽ{S$\Š•@Ú*9Ór*8ÅÛÞœ‰†-P…ÅÉb*I¿‡5!?ºãÒ£¶Ýõ¦^&øò1‘O¶Ë‡8«#ÚƒA•aH(3×Ò£¸‡ÌQéDq€ úSž Ñ•ìi©6ÕRa~ÌG®: SJƒM1 Ï[_*èÊ£9­Èâ¡»¦dÒù{à¨(˜ÇJlpþñŸ½A*3HC ŠŽ;=’îLŒÓ–ЭÎò5yTnàtª·‘;²:¹vj@)F3AëÅS‘[®*UrÃ5 d\EEp‡ÏB2i÷vÿh„ [t)B:U¨×Ó5 ô£ª· £+QE¬aHéS¢ùhp*Ôë!‡AFžd€˜ÈùGJ³zØ€‘Ilå¡ÃuÅI!K0†ûFqV]r„UXPÄçŽ*ÀTL»”«("¢†ÓË”ºqê),Óã#µL*H Œ Žà·œ˜Š'ƒÌeqÕzTÄ—\y¢8„qáj„ï‘Á©]Ì *Øåi1F1Un¡ÞÊÝÅ9²ñ➉²,T)YŠc#ý 8*ú”g­$§å4Dr3Hœ ¤þ,w§VeØÿICïZ1´T‡ã€ÑJ©¤ÑœŠ 梘,×—ë,ÃÄ s…/šô<†´ŒƒŸ”UÌŒVv¯ƒc/?Ã\—‡&T¾`Ì>µÜ‰S0¥7 ¨ªÉz?–&°üFSäÝZ:Z+iê8 ŠãüQd-ƒºŒnèEOàËêfuè}+§×bY4Ù#¥r>¶Ž IÈn§¥w·J>Êö+‡³Úš±àn®öÜ/”¸ô©qÍ«ÄiæY2ž••á`‘äu®¼L¸ŠÍÕo"#wQI£‚-÷õ•®\nPçõ­*XÞØ0"´D‹œ’*)ï>w*Xd oÊœ0)M¬?ÈN“¦qT|&Á­Žxçú×Eq’&½yö¢.-/Èv>]oh7)3R*î¹nd¶Þ«œÏÓõ·¸D8 k¨Že‘2E+Ȩ¹$W¯}qå§5½áûifŠAŠÝÇz£ª0Rwâ¸ÍAý¬FZôA±¼@3§KÓî×áL.¦}s^<~m³.zñ^y-³éú“HO³ÍwÚuÒ\Ú£)àgš¿œzSZ@’¦‰L€AÅqúÍœorÒ±Á^•ÑiH3Ž+H¶8¨ÞdŒdœU[«õ²6šž ”ž0UÍ=Ñ_µeêVÑ‹g`8®Äh2‚zòk¹N”£Š3GãJ4”Öé\½äyÖâ`q]2}ÅÇ¥6cŒT‹‚)i»9§¨ŠiE$šP«Œš@1Ú€€WhŸÍ>•:&Õã­;ò¢ŽÝ©¬ ŽÔ›1B SÅ)ǵ Cc4ŠipaJ@`zS|±Nè:QÇ ¥ãÖšTgµZƒœ”à1ÒÅ4àži¤ Pj^1M##” nÐIÈà˜(ÀÇ`J(éKž;QšF\óÅ0(»FsI°vÐ(À&À£½Ž´›Ö‚ ŠM«ØP#^ÀTsC½1ž)aˆ(Ž•)éÒ äãšZM¢—ŠB¢—§jL´màÒ2Ž&Ü)@ö¥ÅGaKíJ>´†ƒØÒsøRaA¸Í&)@Ú”qÒ™/Ü4ð”«÷G=©¿Æ)çXºœ…."ÇsZ°¶cSíR‚1Ú—­úÒwíKIùUKòÿg%"¼ïP²½žóÌ1rÛè&qf«0Áb¶qô¬­f9¤µu©®4mB ¼Ô9­H®5T\6Gµ*˪;Tí>Õ·¥YÊŒd”åcY¾"³¹ÓË€}+_CŠhíBKÆ(Öt•Ô`)€ “FÓ……·–CPëÐM5£,=OµsZ‘{gwæ88'©Ø]‰Ð…?6+k ¯µ°ç×ÚiÁź‡êSW84Ò85«A,у?…sPXßÁ+ãŸJЈj'†&£¹³¼¸•7gÒÚBcµTîs:ÕÕÔØ JûS4Ñj†<UÃsœjX-înIÅtp'—¯ ©: )$ÓOzåÔ¤€2MF.8Ü*_0ÈÅ7Í]Ûr3Iç 8ȧ1ùr G3g?…HdQÁÅ(e<‚3NíÎ)áA¦I&ÅÍD³–|Rù‹ŽÔå`à ŠR@i×=A§ti¢U=êE#¯j\gš)£sP‰O™´ÔÁ†O4n¦ï©§~"Š1E('”+p1H_œR,ŠÃ‚ 4J¥¶‚3P^;${”Ššß')Lª2*1p<홫#µG)šHS4ª2‚“«Šy9®{Xb.¡#±­»~aSŽÕ.=©@£ò£ÂŒø¥ÚŽzS]C PHÉ$¨©cŒ'@IMeÝqQ´ { O³'÷A¥È; ” àt¦U›‘Í8FNÆAR(ÇÒ‘7¦= 1aPxžPL0!9Ú*E\ ”ï~)¸¦í‚3ÈR{RùJ;R˜†sOÇÀÃ<àf[ þAðŠzƪ8ŸŒ JZ\dTÀ’u‘‰ÀTØúRÏ¥5bPx¤ÛŠãÔ ®ö± ¥ŽÎ4袭"íÆ0)q“ÚƒÅ2HÕÀ}j?³F *eRõ=ª´Ö‘Ë÷”4¸³å¯åW#ˆF0)Ì›ºŠ­%ŒNyQP.œ §>îʬG"à(ØÂýQrj#¦AÓ`¥d?Ü_ÄSâÓ¢ˆåQA«)·Vcè–Ï&öAŸ¥=tˆ@ú µ „QŽÏÒ¬qO¥ü¨ü&µ.;Sqô Ž;W72gZSŠè“…Ù{t©WEE0Ê£iùŒÝFjÜêLDwªË '8©íݶNj.KLc õ¢9Y'Uê _"—4ª)SrëX—²[?Ÿ<kBÚqqxÏz´£b*œ³—,óE¬Òn(Ô²K$sŽ M,®¡HÇ5*nqÆ)àÔŠ^ôâ8íIŽ:UKÛa4,03Ž*¦Ÿ/ü±s’+Ib È¢’S¿b A#Éïc‘S«‰­ËŒtÍR€I2¸Ïâ­ÝmØž;Ö|wžJ²·­hÛ(t*èü)[S2Qòž•Z\6jóç`o–&è¥V<ù0py5@¶Èyj±§HÒÀwT7© 9ç4ÑìáªÕ¾Z O¥JFÕ8Æk6iX1ÝÚŸc0‘ÏÍøV—j1ô¤#éToUŽ6œTÐŵA>”Ç@K#Ûœ‡ÍdϬM&QÔÔrDøN :i!ëQ¨Ü¹š³;y*ž´Çj1ߊO^*¬¹ó†)z0 ñSÈøLÕrIã54Y~j›¶iE!èj·˜Z]‚œC©ˉJ²¨ïHû£BêzRÇ!šxɪö@‰O­DÁ—QRÊzÕÛ¡›sŽô±e`J7©'ª°Á¶ô±$æ´ÆqŠIPôéL„|´Gþ¬b™ŸÞR䕃¬¯ïâ#±­‹oõ+ô©ÇÒŽ¢“š3GáJô¥4”ÓÁ S…&iEÁÅ¥žô{Ð3íF)i(&ŠQGáIIÞz:ÒÑG½žh¢“<Òæ—4àxéM4€ÒÑŒšN‡¸$u¤¥Ö“ñJ u ŒQÉ õ QŠ Ï^)iO<Òcš)1J8hšL ^=( óÞŠ?*2-(ëAéH -¦÷¤c…ë\û¿üNUk}: dǑҤN‚’Aò­l63Ö¤¸m©À4FI‹‘Ú’5*O ·ã~:Ôë.`GzSô¨¤p«ÍB¡fCYòÅ%¬¡£)<ÖšðŒõ"«GY#ñ©Ò "™ueÈëJÉÈæŸ n¼gŠžŽ†—#m'ZkôÁô¬x×ËÔ‹Á­…mëT$FK°ÝIr<ØJ¯SD(b³*G8¦Ø+Á†9«7161šÉŽÌÈŽyíSé‰4Gå{V° œŽÔ˜¦K÷N* `˸æ˜c&è1éëE³23Nž6x¡3DT¯n´¶q<#n8Í-Ê;J§*IUž Î*K` QR°àúÕ!`ꥷ¶͸.^–ôª·DñS!Ì~øª§pbTVèëtÍ·ƒVgˆå]~ð§«’áÍ,©æÇŠj¼bžÌU Ç4C&åÉ6~”1ÁªR¾&t¥¸$¨ qR0ßÔP©cF*\ñIGðâª1ϼTûòj £ÜêØéO‹­6¼¸È¨UZ)XÖ«””Þ«‘Å_¸RÐàibSå5 ]«P¬mçoZR1ÆIéH¸gùScÿV7£ÓÏ^dj˜Þ„ކ´íÈ0®=*l⛜ÒÑFx¦–œ½ð£­Žx¥àþRt4£­sEŒQ ”F:qJÈ­(P)6JÁ¥+ž´€``RãéO=)yÒt¨¤a‘Ö£òW9f¤ Md¨‚0À§Æ)ìn\Mª0)@”ìâ€=)^h B ëÚ“h£niHã˜â“ëFÐNM¥Æ>´¸É£nyÅ`ó@J_“½# 'ë@ )¡zžôâ(Ú(Ç4¤sŠF]‘W Kž)sFsLhÁ9ÀÍ:R€1A^zSˆÀQE!Qži6ŒäbŒg­@¥éMÀç¹ ¦x¥À'Ú” Râ”tÎ)>”ÙÈ~”Ø~å ÷GғŸšÃפò£èj½¶½ D¡˜g/ü$P‚i‰ ÁÁ¦ÃÖƒâX@ÉâšÞ&€cšI¼E@ËK‰¢ ƒSÊoü$Q skÉÔ ŠwöØÛ¹§ÿl‚¹ s@ÕØ»M:Ñ9§ÿlgSN:°£“Y 3¶£ms)¦£:ãqòz_íÖ'ÕbU¥SòÅFuicË4ã¬: c4ßíÏöiÉ­aòÔ’jû ÖjÌA;åAÕO]´j1]Á !ÕdQ“Zµ—L,óO:Á 7)ɤÐÉißÛ‰Œâ“ûq0N(]d6HZEÖÉ8Øi_YÆ>ZcëÁN6ŸÊ—ût(–šúú SÓ\VnŠöÜ@sCk‘.=é¶ŒFsSH©û½j)uŸ,”Ô'^ç„5:ëQ•JqÖc4 fzÓŽ±8aBk0ºçp©U‰˜`ŠkêѫҚ5hÈÎiX‹ŒJºÄL:Š_íxÎáGöÌøÅ8j𑚺Äãx§VÄoö¤g€i¬À‡óGöÜß ÕàÆwŠrê°7ü´æÔàï4«©BÇŸÚpn#ÌZzßÄGÞŸÚ0÷ÆiEüG$0§ý¶,dÈ(°çï¯çNk¸•s¸S>Ý>ø¤ûl?ßÙ/á þ°V$CÏÕƒŽ@ô®™xAPÜ.vÔË;v:Òž)Ò–Œ‚isÚ£+1Á§õ Ô3HcÁœ²dg<ԙ͢ŽÝh3Åè"ŒœTRÍå­V‚夼U²àu"€ÙéM•ÊÆH4ªÄǑ֣‚}ÎÊÝEJH4¸§gZâ]¨H84¶r´‘dÕ“Í.ìT^pifžXwÅ qœdRä\àR9Ú2qŠŒN­žGá"·FÒ“L3 ã#4ðÙ\ñQ¤ÊÒTÛˆ¦yË»…•Ðm·pƒò©[D·…•E·Û÷åR®“ ¯Ü•Hº|*>àü©ßa‹(ü©~ÇþùSZÂ"wl•(±Œq´~T}†3ÕE!±‡¡AùRgBÂŽ}© ò~T}‚/î¯åR­¤@ (ü¨û$yÎÑùR=ŒOŒ ãÚ£:t9û ~.Ÿœ€?*ÙÆHÈ{RýŽ1žåGÙ#ÁùGåBÚ¦~èÇÒ”ÚFxÚ1Lk(ˆÁQùPl¢l|£ÚštøOðÊ“û2ÆÁùR6™M£JxÓâQ£J>Á vÊöð¯åM:tf1׸¤m>êƒò¨Î•þŸ¥*i‘+d(ü©²á$åGåHÚT Ã*?*ri°¯ð ˜ZÇœ•¦½”oŒ¨ü©ƒO‡û£ò éÑg;F~”‡M‡å•0i0ïÎÑùPÚT'8_Ò’=&mý*eÓ¢…#é±£].%$í¿Ùp±åi¿Ù0ŽØ¦dBr1HÚ,$cR®‘1ŠOìhCNº\J>èÁ§®œíý*7Ò¢bNÐsíPsŠGˆŒŠbhѦG¯ZyÑânjpÒ}Òj¼š"³pHæ¤IØ>ñ£û9Î}hM$( 3To¤ÑÛ5Ñ¥ëæÓ‘9ÿ–­ô¤:4ûqæ·4õÒ&Ûƒ+RÏY´,tÕ´cÔ“Þ´€ÅC)ä•O™2å:Õ+v’Mêݪx7,…XÔÒÉ´€;Ô&WQœqR³nƒ óTl„¦G$äf´ÇZSÒªÝ}Ê…ÒB›”㊱nìÑdõÉ$l‘Ò£µ¸f™œÕ©óååzÔq9xù<Ó¢ÝÕE$ø}ªEÎD›Xõ«cš¥gÞ‚Ûp{ÔðE±j¬ÅŒÇwJ’>aæ–ø1‹å$b¤·bÐÕ M‹—ôëQ^^”E¸iSÒ 5rIEç¨. / `ÜNÓ³äò}ªî(`Bu¬øccrÄ·ô«7 åÅïLXËG¸žqM´‘™™µ]ÇÓdR dÛÆßkpIÁ53)ŠáHÎ ZšM¨¨žÜÝžzÒZ»<,ò8¨m +tç5zg*ƒœU)”Ü3ŸZ»lXÄ¥ºÕƒÒ«Ü¦èÚ¢³Œ"qëN¼…ª²ÄÞ@9íSÚHÆ,7jl„’sPXNÏ;©è*Åøcp~”–ÂXóWE/ U+…Ì«Mž=¸`Ø"­(-áUí²†jìÒCr¤r½ê{y–IW ŠÓÐk>é7\Gž•q~D¨Œ®AíLvh¦QØÑz¹Œù¢HƒÛóéRÛ©ûVuÄÊ·aY¸¡#g¸RŽvÕæƒ÷G¾i-ANyªöß-ë‘ÐÔ·WÎXÉê(Œ”û¹«èw š$SI Ò£ˆúTræ(b3Ï4â9¤Ç®)0£ñ¥Å!cu¥Ç©(éJ½))q‘F8"“ ¤ÔÓqÍ;§jAH{ÑJ>´‡ëJ=3Aϵ•ÏqE(¥„öâ“·jiëÖœ3Ç"“¿ZwjJ\f“‘ÞŽsÖ–“½±IÈ¥éIÎx§/ÊM&yíJA¤éGz94P(ÇgƒI@§gŠ)#Ò—œÐF;Òt4½{Ð>´QA4uh$ôÍ'ãJ:õ£ÔœŽ˜¥”‡ð u¥¤=iÀãÒ“94c=èü¨ÏÒ—Ñž;QùQš3ô }(fŒPpj?*?*;v¢€pzŠR~”Ÿ•MúP8ô¤ïŒÒþT})ËÁö ¥3špéÚ“ðª×s.XNƒ¥/zMæE.åÀ¥#\zTrß(« x¥4•Í6Œàt¬û«ÆŠQ®sU¦Õ¤IR2jdÔHuF\W$¼TIÆ{š•X0S³KšOÊ–Ž‚©Ëqó•^µ\É‚E[†C$a»T›×¦isÞ³g»’;>V5|H=ƈå ƒRRœVUõÔ¶Ò.Ó÷j¿nÎÈ Õ`}i¥À84 x¨nœ¤E‡jH&-f©–En”âÀH¤W x"Ÿ¥.xéPOp°Œ“ŠtR‡PAëN.ªMÃr bâ¦Eé‘F@ö¥Ýèi¥€=h2(w §÷™;GŽE]Ͻ&ðN3OuëIÆãŠMëƒÎiCÓdv<ÔbbeÛL¹ŸÉBÝ©-îDñoÕtÔ]y$óZ ‚;8¤ÏÒŒûSY‚®M29ÖNKIœô£?J=èêh8ô¥Í*Ó]‚õ8¨ ÜjÛK ÒùêNr)Ë29Âiùâ—>ônûÂÏ4¸Í!NéŠÇ­Zˆ ‘D™`qÖ¨Fî²²“ôØgarQÏÒ´$Uy‰ó'Š…eÙr«žµ~CˆÎ+-n€'qÚsÞ´mܺdœÔÔUk¹8Ë(¤ÑOz†öïìêªzšdlUC'55Ë¿ÙË/\TV,°å5*\.ÆëNùŽT”#DëžA¤º¢f«Ep®FššéI·ÈàÔ®m€'µP·GyÝœÅI††ñ@'¦¿™âƒröªM9hw«üÞ•rÉÙŽk@ÆŒâšÃ*j…©"åű–*AÅ$¶ÿ¹'5r|‘ŸJ£,ÅeÁý*KYƒ¹ Ùö©"ë,ò~õÖ›s ^IǽOƒÈÀUU—Í-׃N¶w2œí­”‡ØSdm±“íU!>j’i‘³%ÎÌäS.áß*’{ÕècÚ*QÀ ÓdLzŠËŽ6>Ò@«P3ÚÇ4·@ÞžÌD'•nÕִì^,ƒ‘êjßzsŽ8¨ä!Ï5^•XÞ«‡iƒ X¤½85ý¿›"Î3ZÄ1€*¢Ûƒy»5¤åúRô¥ª·S”ÖšQ™2:š™,X>•Rƒ3dScO.ïƒÁ¢ì¾õŸå±@E,Ò:EÀæ˜PÉãU‹t+¢Ù°±^I¥·pç`Õàp1Å1³´Ó!iúÒCÌcéQMÄ«VîŠxç­)à t¦u Œf«5ª´žaê+6î$ûtgоmUʶEVÕ‚+Òˆ®äKPØÏzÚ6=Æ£žðDØÈ&–+Õ‘‚ô5lPx¬-Eey˜vªñßN@Yã#Þ¶¢qä|¤Š…ÎÐ[wJµm&øAÏz¥}´GÓ9«ý”óŽ)¶â,îÍ^u¬R=òGZÒ·\D|T…‡zÏ•ØË÷¸¨ìfv¹t' UÛœŽOj¢·QWÖ¯BW ç5Jêí„â1UþÓ,7+·%OZÛFÜ3ŠýÜVN©H Vmcòà\@ïTæ¸f˜®N6Òi>ÐT“¶«jmsñùDàžjæ&áÙ¹ÆjXÚI RÙË!‘ÑJMAåDÌg¥W?i0¬¡¹®ÚOçÖ##­A*_’1Í:ò÷Ê!`š¡%ü¶ò«gržµ¹ ¢X•†9§žEW»ó LP᪕›I,ù‡)¶WÈ]à­X¶3%ºgŠiv€õbåwÀÃ=ª+Ù‚*œ…ÔѺVÒôéÕ’lR[ÆŒƒŽ*À“·v:Š«b¥d­YyÎv¯Zaœ£ÝéÓÜâÜ1Uã»fç#pLnâ¡7ñ«|Ä ²Œ$ƒ‘íRŠce‡&°¯T èËéWc Ñ/ åàк‚ý§ÊÇ5,W^cî*ŸžÿoÙœ ×SòŽiÙ¤ª·C•Ï­XŒ|‚ŸŽj•Ä'ÏVLÐöü†^µe3³žµZPÞoNWš67àt«ìÌÐûÕl³¬^}jå¬f%ÛœV±ŠLTWrh‡„U[Ûa3)ô©0§N1nÀztªörb=¤b• -q¿¶)ÐÄb™›Ö–dóqØÒN‘‘Þ«‹% ¹F Kr\A·4ërÿe9Ô6bA3\sRL¬gSŽ•WSv(±¯Ryª^Tñ íãÒµ´Û“4_2௭¥)ŒpµŸqtÙ}Ú;mÚ*GV0câ›n_ÊÚGAPÆŒ]ƒ¯¨†Ûdå×ÞŸ‡ûH qRÍâ¯ÜT‘K,!TššÞ7X7jlp˜°85:¯Í*u8dæ™ Þ¤{T¡‹Nå÷´“G¼t9©ã'n)Ø¢˜çå>µZw°"ØŸÚp¬ê6ÓŠ±‡æªù”†PsSYÁå)^ÄÕÎÔi­Êš†/âïIåíb@£i?ZmÄe‚íê Mv`õªÅn7Å\SòóÆiÝizUyáÞ:Ò¦BàÓùÙQF…I>´Öˆù»…=ã‚{PªÝ)ÒG¹qQ¢°â¥Æê$ƒ{ÓE»,»ÅYþ4?Ý<Ôpt<ÑÄcéMp ƒ&¥NŽ´™¢€ri®p¦±/ôG¶¡pñŠ«¨m1üÔñm8Æ1N²u0œÖ¨NŒ÷Ü6L"a*¶êÖCòŠs°ô¬WiVè2éîQÁ9úU$#* ˜ˆ I§ÚHÉݧ5RèË%Ú¤€kBà3Úc8¨¬&(¡­ sCqšÍ»WyTÐÕ¥•‚}ÓÒ£žFbx¨ÿ4†ô¦ÃÅr\ X»ÜÐj¨…šÛ Ž•jÌ¿—±óšŠæÜ‹(çÚž"c忝"íLdS5Zò<ÇÅ’уU|“y¦‰T¾vãÊn•HóSÊ3o€9Å$l8ïPÛ†LFyéNÔ˜¤‡jŽÞ:ØqÎ;U›H¼¤9ïÍVW?oÀò¨ï­KÎ’r@§Ém‘ãm_¶Ë‰Tv©Ï&˜êœ±:\}ÓLx].ൢƒjk>gÅòqÅ[¸l@}ÅCbàFESšãþ& Ç­¤ ­8Õ{¢@ž) ¤ˆ3ƒR>*½« ïõ¦/Étww§Ý(‘;TwáXv¬À’GÌnJç¥_¸•Å¢íÔÝæŒkVȈ+‘VXóÅ4’ZƸÛ%ú=*â[bPêjÙ^+/dÚ9Ú´_˜VyQöõéWn¤xTlRj;yåvù—Õú†URFjDàRÑŒö¤àu¥šÀzQ±}8¥ÀÅ&Åî)Áp)ØÈ£¥!PE&è)¤f‰cÝÆj`yÁ«!G)6Œö¤ØA¤Ø¡Ô7Q@@€|Q´š¯5°sÛ¥!¶ÍO·„EžzÕž1Ö×­ ›GJèÀ#¨ (Ûì(Ú=…"…Í;ZAŒÒÒ`bœ¸ŠOZ1š6jÐqKŽ)h4 ýhDÐ#4æ—ôÅ&.Räb’€3I´Å/Fh zRcš\JlÒäÚŒçŠkHÍê)xÇ4€R3Ž)~” HNM5˜/$ŠUà ÀƒNÚHÏj¥ëMºy¦@x<ÒEŸ,dŽ•ŸëÒ­E4}ixõ ž:ÒÍ)9ã –è͸¨Í= ¨ç· c[Ê-í„#½Z|ŒgÖš–û[,I«cJ@+ƒLòÐÀÍ7ɳÆ)ᩦ%çÍ*Ä p)#=8¨ Š`…Täb¥È œÒÔ‘š6}1K°ÔÓ'8»ì(dƒ@ŒŽ(Ø#¥r:Òªr:Óø£0¦ªA@MžÔô…(è)`Uï-ÚdÚ¥µ¶X“iÆjÑè£(|í§”­4F¼ð)ØÀÿ p#=E!4݃=¨(¤äŠP£Ú¡kd2n#š{D ãµ4B©Ð gÙb/»hÏ­YQ´`t¥Å18ÁÁ‚yâ¥ØÛQÇn¨ÄZsÀ¯ÉëH€)de\0¨–ÍàqOx“iÅ€ŒÕˆÔ"âÒ‘†ET6JÒïÇ5h.ÑJFAª_b_X,*"ÝtŒ£5 ¸UÉüª(î„’˜ý*sÒšsUvI ‘P[+5Ù|qZ)1ÜÕ2’,l‚¡°†hƒô'5v`ÇSÌb¸â³Z:à:7óŠÖ úkr¦²¦£6ÕÈ5=ŒF4$ŽO54wgÙÚ­ =k6Hßí9#"‘at˜2Ž*ÛdÇÓ5EZxÙ¶©Óí#LY»Ô·P3²¸ê*)L’ R«–£laXéQJ7©Jðn@¹©`ˆ‰YÏÔómtç51S2zT†!Ú?*¨HÉr*ÌK»n R—wÛ‚Ô·nä.ÕÍ^¶bc\ŒTæ«]Lbš¥+µÄmÃQ˜¡ÃõªösvàŒ ñZ“§› µ²=¤G­%´[K¾:œÕIÅúœ)ÚƒÙµNsÖ­¯ïm6÷Ç¥Axc(AâªÀÒ@³)ÛÚ®]³¸êèÌhƒéZ6r“Ü1Z‚áKN®W£PTms²P‡½X¡ü©øÀ¨&”"ð*šÄ%Ëf©Â ¥îFpƶX†BAÏRṲ́U8å'PÉ^*]QØÛáIôªvÙXGš¤ë[p1µZFÙt ªw·Jnc“š½rêmÆã€EcÜBÀþ\ô­¢K/x¦±xü°{µC3á‡2œŠCŒRmµ*¦;Rô¥ÚÆ(¤Ø2O­ ˆÈÔ´POj¨„K»í<&“†=E.9íH@æ›,BXŠžõ½²ÃÒ­‘Å'"ƒÈ¦•ã­(@4DªÙiÿ/~)¬€œ÷¡W×µÅ7`4¡@éNÀ=é6x§Ž1F>”`pi6Š\ UimYÕ:.ÐÆ)ç‚€!ˆœ c=@ŠSÒšÈ LªóHЫvý)©jŠsŠ˜.)¦1Ï”(†%'8ƒ“’8(QŒSúP°®sNhÁì1L1) Pb0:S"€!çš°ÅB` ûŽ3Sqšq9¨Þ5~´‹AÇz­‘›8©•ŒqH±€ÄñÍ3ìé»vÑš‚æÜ¸ã·¥0@]6°ëÖ­AvÑ$*ç‘PˆÀÈ©²:ìnECöè:TÆålÇÈ-V"HÇÒ¬öÍWœà¯J1N8>”Üàö§gš«ÎéŒ}ÅZÏȦoê)ýºÒn½(9¤ÈÝÖLvÀàŒÔN^Bjµž(8¤Ç½'ëAR ”øæW\ŒC2ŽàC2©°æ¥ ñHÝ3ÅGÈ&™oÄKž8§7.*m£­,˜ÍfÉ,¾xªòòJ†í €àÕX ‘eûäŠÒ PÄ…â«}¥ÕörjÈ Š£<…¤Ø)–®VàÆÇéW.y%’«XHÎ\ÕâF+:öõa`€òjí³o„1î*^£à2);P¼u F(ü¨¢ŒsA÷ sG sIÇJQéJ¤ ÔvíIÛµ)¤šAïJG¥".IÍ9@ÏÒ“4dSŽ7ò¥Ž;(84Þ=é{RãåÏõ¦Òö¢—S{ö¥Ç<J8SÅ'Åã4Š1ŽÂ”c¨âõ¥ÍRõçÒ’”b“Š£=)H SxéKŠJZZ^=©sÇAU¦qÅL¸Å6G¹5s*–…,åqÐÔ*@¼þ•4“7˦N<¸Ë/^´á35¶îøªBï ‚Øl÷«_hòàÜHæ£2–Œ05rE–<☹|“ëPÚäÝH«ã§jCøPOÒŠ ªwQ,€‚ ñUmgX·BO#µdêQ} ¤d–âºD_Ü pqšÃ’òéo *2§½]³{‘.$9ZÕ>” f‘€Éé\Ʊ•Ô (¹ ö«q\»ÜªÀ«·‘°´dT[æ‘ÃôSV&ÌR¦Ò0i·& Ï­UŠí^áU†Ö­ ÅßlyíÁ¤³d÷ª—2;ÜíBÆé*²æ®Ü®aÏzŽ;EuV=ªê(QŠYWr‘ÇJÇŠ ë ß-^˜U›9¬ô”ÊÌXf¬ÙHȨ̂§lÔ7²¿šN2¾ÔºtÁŸ­Y+¶è0©.QX)Î*qÌ_…A\¿4‘)IÈìiÓ ¤Å:Y6ÃÓš`ÉMÝñO.Ri‚?1 ë‘PØ!IZÑãÚšø+Ҳ㈛§Çá½.Tâ­ÜÑ7~(¶8¶æ±îeq#¿)ïV´‰ÈÏNƵÉóL‘w®Jη‹Êº`z´ã2Lž, Ëͦëo|Sàæ cŒS-HóE2å7Ì§š´‘ƒTu(ƒ²×4ù`QoêqO€•¶µ1 RðyÍ(àõªSnPVÇ^:UI—‚*¤Þÿž‚µÜÉíTl‚†~xÍZ•¶¡Åd\¢KËpEjY¸0Œc¥YzŠâŽÔqFh¤Å­.E&yö¥'Šm8zÒ`fŒÑœR“î(íÚ•zóŒR´QÞœ1M$ÅO­8°>”bƒ×ŒP2)9õ”£Òƒé‘KÚŠAšp¤ïJ àÑFp¦uÏj=(íKùPy¤¢–æŠQ@ÀëŠCÖƒÅ(éÍ%ŠJ)IâŒS»UyºƒR§J†íá`:â«Ù[­ZS’p8¨Ê(~3Hðƒ |Ó¤Üë·ÔRòáÂŒñUD É\–[fh1×)ñF6€Üb¦òóëM…öµGÄì@Õ FzŠ^§4wÆ)qMnj£Ë‰6ã­Q’ÝþÚ²ê B=óDBŸ”ÖÌ.ô¬ðíä°­5A€F)L±R*L})ñÏjǺÝ+É«‘ÆŽÁöŒŠ´W+ƒŒUTÈ•qŒÈàã¥6hܸ+ŒTc r 0«Íh ñȨ`FUØ{RIoó‡jR»Š`ëIq1ázÓ­••0qSt¦·CTbFE¹Å\u ˜5Q òÙ°¼™#“·\Bæf8ùM=-@”?O¥K,D°*Nhš6`0jdR#Á¨â ·t£ky»ª;…vÛŠ‘“t@US·¯ôÁô¤E*›G¥A n“1ìjéÅ6Q…ÍTq!8¨fv …«r)hNjd*Ë W11c•T–°¤$ g­hmsš…åTáŽ*´_5Ñ>µe£9 4©sƒÒœñåö¨ã‘•¨­ãhäbz™â%©”a5^â5ÏJ6h¶ÒÃØÊšT‡fqÞžÍApe+ÞŸk޹¦\ÈÊÊ«’@âži¬\â¨Ê$iA Å\@ÛF U¸…ÙŸmlU·¸©®#sÕ;ky"äœUâ¹\*Õ»1EX‚2‘c∕÷œÕ€)iyô„1IŠæ—ö ƒIÞ—RzR€sšLRŒŽÂÅæ—žÔœÑøRM;‘IøRõ¤Åf‚1éJ1A=±IƒŒÐ)i9ö¤çÚœ8^Ô”Å&i@Í"ŒQŠ(ïJ8œžÔ¿…£43Í.)1Gj1šLQA£š(Å}(úPA¥è1H}j)A$TŠ8â3ÅFbSÎ(\ 6y§ü¨ Þ›·=h3ÐS¶RÙ¥Æ8¤1‚{PÆ)Ü IÚKÉô¤aÅFcSÎhØ1Ò˜ÖêÍÈñQ€0À»÷`T p Œž3N#t¤ažÕ É^iéAÀìf¨#šàR…”§4b“”¸ /£¥QA¤ÛÞ.;Qj6Š6õÅiBâ—æŠ1G'Ò´bŒsŠP¢”IŒÓqô§Msž´GAM0©|àSð:Q²›´fœšq9\Uy¡ó:Ž”±Æ<ÔÝ©1ŠZM´mÁ¥Å7vN8¥ÆGj1F0iqÇjLqȨü 5"œ SˆÊäS åŽ(ƒýRœö¡ÿÖ @=éãŒÒ`RôgŠ?Éæž½)h¤ÆsNc‘ÒšTS€ÁÎ s`Šf084gŽ´˜çµ(óJzÒf”ýhÍ!>ôgŠ3J1×4QØRâ“‘@ŠZ?(¤üZxÆ:Óyõ£ñ¢—>ô”fƒH ;­ŠJ=i@χ"’ŒÒÎ)ÙÅ!=…¿Z:ÑžqJi´êAÇz^½èÅúÐ:ži:šu&2sFE%¢ƒõ¤£¿_ÖŒûÐ=Í.}è=éŽÕÇæQS )Ù½3z稧­E<¢4ÎáQÃ31ç¥<\ &á“Sdi¥€=iÛ^´›×Ö¸â€=)­Dó* N)Åð„Š‚ ‘+HìjÈlóJßZLç½¢ŽÙ¦w¡ÕºškL±Ÿ˜ŠU•_sô¦´è§…*ʬpœÌeÏ´&2SÖTqòiÌÀc4Á(Î3O.ç"˜&BØÜ*OÆŠ3ŽôÓ"ç­'š¹ÆiYÆM!p¼“MûBg©duàÔfeRAj|r«gSÇ­„Þš$RØÍ9˜Ö£IUÛÔ×8Í!a×4+«ýhgUêÀ}i<ÑÒœy¥ ÔRŠkô<ÔQA9SüÕ–žrnÆáRç#­784á‚:Õ‹äŽeBy&®#†³Úª£í™52̬ûsÍHHõ¨Ìènì~5"¶îô¤óJyïYÎíØÁâ­ „èN*l€çZ€Ý*¾*`êW ñQùëÏÔP(ϰ¥Ï¨ü¨„óEC& Ô£QÌÄ'³¥‘–=Ùæ®ÚHd„1¨¯"óÉïSEÅëÚ¨4NoÁÎi³l‹5Oyg&¤Ø‚§µC™>ÒT*ÔJêܶEYûR1È5uzŸ6´Ñ@¤ÖqV¬¡©Öi!•Tóš±=ÀŠ0ÇB[×R}ßjЂA2¥ü©®HSŒt¬I¯$a'±§ZÝg{+îUhï~Ù;&x•jËÍŠr2JšeÜ›nAfùOjŠÚ÷:ŠÆ§¶®øiÆEfXÀùpÎ[š–ßtW…sÅZyOžù!ß‚1Uï.L*i¹%(9Å^·bÈ TÇð àŠ¡r¬²#òæ©^¼‘ÌŒ‡Žõ¦¤JŠr—ãõnÆC%º“ŒU+™^;‚BîSRX\ & ‚¡­aÒ”ýÞ•NiH•WÖ‰”ªîið¹–Ÿ¥VSä]=®€5Ziš·µ*ä0À¥¹]êLSÒ<…8«€.xÅ4Ó_j¼€õª—jÆæ<ø§\¦ÅWš¿ -Ÿj~9Æ(` ¨i—ñ!ÔØíÕ¡ôïVmWh zÕŽôÙs°ÖI„ÈH‘r)–ÖTŒW!OZ-¬>ËpÌ y­ ¼ð;Vt¶®n·Júl™nΏ­2ÊlúUk êï¸qšP®owm;jÜ–ÚGSÔ±à⢹·ó@õ¡í еÂãN?…(Æ9ÅW¸Œ¼d~U¶ Ö8©-¢ò—iíEÔlà`þ°³Å´(¶qÉ{[µ#Bþ~îǵL–Ád  *Øã½.j ã݆ÀȤmλqOŠ=‹QM˜Á»Š ÍE,Ymí9F{Ts†*úÔу°TNì%°½:Š äb˜ãåëUáVÄôÍAq¼ªFx4ë¨Ùã ³k»Êª|â“‚Nj¥Ä%Ü2ž•:go=qQlo;=©·³2ãµ>H|ÄóHmÅL9§çŒqAéU%€¼¡³ÒœQœm¥6é·n)&A…éNhÉSޏ¨675š[PÛ¹«vnæ3¼ôâ¦óÑz‘Oó.ìŒT w1†iÿiLã"ƒr€à‘O æ¡kÈã}¬Àp»‰Î tÃ|gœ‚Å܆rEYiBðqBJŽx<Ô¦“?J\ÓX…æ˜&CüB2 Ò‰œdgÒ£™Èáifväc Tw *ÚI®)U{Wä j? À¨Ë…êEÕ‡¥-ãG0LpM_S )aíIœšRÃ¥Òg” äP*p~µ"ò¢”®F1MòÀ9ÀÅ9P˜¦²éJª£ŠR šP¸ëI´gÚœp: `QœâŸÚŽ):R¨˜€)¾X œ `qÒ”¨<†š±€p=P)ô§~ÜdsMò×°¥ØN 9æ  H@ã8 (ÎiHÈÁÅ5cQÚžGZ\QŒv y4Ü ÓϨïÒ—ò¤=i¥ÇÒƒô¤ÀÍAïNÀ>”3íJ@¥'åHyô¡Wž”ìv 84ÓAäRã4Ó׊xÎÓÜTÖ.LžEWšè½Ï–9ÅI2ÍíZa¾Lb“¨£J¯tT®¥S6Ì‘“àÒX´žaY5%ÄJ× š¾€ŒÓ€Ï ÐqJiâ³5}Ñ‘Ðjìg÷@ŒU9îÌr"§27ÙÙˆíXûã{zñZ *)Vè(E2ÎẔ“nŠtÚ8=j[ØÖK|7B?*ŽÎÉ|¡ƒš}ðhíÎ S¾€/qW­âòâÎrqY<’Þ2m;Z°3$Ä6@=+g#´”Jk.áU¯÷§JmŠÿ£Ž)/[È·f¨ÆÏ,çu\´Ð!ª6öçûEóV.a "㊒X’N{S¬¼'=«7QƒuêØ« n"ƒz·8«°HZÓ'®)–G!ÈÆsTæºv¼ò±Lóf†å ƒ´žkv2YA=éHÇ¥(ëL™w©´w,¬Ü•^ÞgQ(çƒëZÑú]ùâ’ìÊÀãš™È0úUk76ëIxœŸZ¾ƒåJáK϶)Žv‚xàVb±¹gô¥¶EpTçi¨µ?hŒû֗˃qôªÅå–2êx©á›pÚÇæ¨Ü^Éæ•¥³¾’Ge“µ$úƒ<…##Š[mI¼ñ žOJÖSÅE7QR¯N‚œ(&‚}ª´ÓˆøÈÍ-¼ÅÉÈâ¬Í#8 QE(š˜þ4ÝÀM.FÜÐ4Í!qÓŠBø©G#ŒP\ ƒŠE;ˆÇ4 mjç$ÐhíF1Í/¿˜¥#Šn(Š1Jzt¤~rh>ô€æAúQH98Å-'ãJE4r=( ç4r}(ü³J ;¨ïȤ Ð3ŠRO¥!=)F ô¢“š9¤æŽhÅ/ùëG&z\RcŽ”t£8¥ê{Pi=©qM¥;QÓÒ–‚3M*iÀv£=i§©¤çÒ†_—5$ÃÐÓãoÝ‚qÒ¢výòóV'š\äPzÑšÖšÙÇZ¦ñ9˜7aVÓ8æ«Ü«66Ó]\Á·½-¤l‘Õ ÀÉqæA«¤¾@ÅY.híUnâiP84‘«¤aIÎ)R/Þ‡=i—3Ê®§©¿yåpy§Ã¸›­K“G?­E4bUÁéP¢:  ð*íLÒ«ú¶cÌeO¥WK-Ž1Šž5" x%Þ½ ;Ë28cÚ‹˜ZHÊ©Æim£Œ+i·«½1ŸÆ¨ý™Ñ2¯ZHíÖ˜aÙ)|u© H§u†RqÆ(žÔõNé]Ш¤³WŽ0­RÜÃçDTžµVt]˜éß`pyª°E ¹g<Ò]¤®ë³µLë#[‘ߟ±+ë/[»1J»O=ªÕ‹Osn7ô­O-’ª{T1Il÷¢Kr³ù fƒHFF1W£T yÏ­ƒÖ³î­‹L޽ª+«"ò«¯V„*U=qP]‡l`Q)²:âªi‚d-æ/z[Ó!1ÐÒ‰ŽÅÏ¥JhÎ)’ ©ª#[ÈÜÕ wr*ö|Ä gaÁ–ÛÔØÈvšl1‘#Hz©$1ÌÌ L²¶d™†N*(ìÌwÎ[¡EG<žR–¨ƒ4‘îšKyÝÙ‘»UIái/æâ´¢Mƒ.3Mo¨Ç!Y™GZ™nO˜#nô_# )ééInÅ \žÔ–òî¤ä 'f¡OZ†rñ.õcš{o’ÙÁÆiÖ²1ˆ–íTg½y&1Âyõ©ÄÖÛŽGz³qpÞG˜MU¢•ãžkBûîµ8éA¤§gÞôÍ'Z7K’zQÍö£8Òþ"–šy4ŠZ\ñMÉõ¥SƒÍ­&NiI÷ 挌Ò“EúÒƒKš2hëNŠFàRhüh¢‚)¦ŒÐ[žÔ£¦hïN¦’IëA4™£­f—fuÅ;8ZÞù¹½]¸UB¨üjG]¶ÛO¥ ºµiØ Í=N@õ2Î7cÖ¥êhÁ rj¥Ýâ¨Y1¶ãÞ¤h<ÐJš7A<☗¡Ô3ŠI.sqSÚɺ0–I‰$Ò¨ Þ¨Î8­&pª2EF'Py"¦Ýòäb¢[¡æìïN3|ø8©U»ŽôìR`šL})n+ïÌKÄœÖBV1Ïjl3ù„¯qHgÛ0CO¸”D¹ô¨órîÅO¢EÈ"‰&ŽH¨¢½ßnáŸJ³×µ)ëÅ‚5^åØTi9WƒÖ¯HÛaϵe´­8oŸÒ¯ÙïaÏ5kšNô£4ŒØ^j›^¨cß<3¬ªJj;›¤·sŠbߣ¦àÀŠž)VUÊi$›gÖ²®ç×’ 5± n~•&sE49&¡7 Z’9VAsM’áclMJÍÖ¦ 6–5º@zÔ«(uÊj&¹E%w`úS–â6 nÔÇ(늽gÞ™·ªÇÞ¨\Éu¦ƒÖ¥Ü•ÕhÛL| _®*0ÎE"H¯Ðæ»”n¡zPF:Ð)Ü`Ó)¯ÃÖ¤'#µJc(#šP£SLa¹#¥8.Þ”ò8¦‘š‹Êäc4y!Ÿ53.¨cÍ*ĨrJqNsÅ.ÑíÍ&ÑŽ”lÒÂò F8•ã ¸Å"" ÂŠqúÒ㥩Te¹ õíIÆy4¤qÅ 4½èüE£ÖƒÅ'Z^Ôh4 (£¡£­“¾8 iübšAÍÉÅZZ9ÏÒ“&Š\(íI×®1KIGâ)JQÒÒƒÅi)zP):ZOâÍšZCJ=)sšn}é(´ÓPÂ;’,ycéL<Ê*o¥Uº“nïJBùyö¨íY°Àôªí‹Ìç“V$²r*âò§h<†àâ5™hžj°-Þ¯ÛFcg4ù†#nùªö1.Æ÷©'‰D'Še±AÇ­,`ƘcOµ+ñÒŸpA\f ¸Ü®"®ÀÛ¡ƒU§_.e‘j Ä5N8ãŠ\ñ@=èüj&”)ÆFk>èƒt+DéU¢ÂÊÔÉ~Ô•fà„ý* t#L´m²È çš§|ò•UÈZh¦Ò@zè-ؼ*Iç-棓h<‘P´k¼7,Ã0‘íYpÛa\ç®Y9*Cv«›ïKŒ ^•Ä$ž+&T,¬È@í*q—RFsRk²Y°&›e-˜¶Óôòœžh–\Ý…n*;è””lŒƒÇ5©oþ¬g*JC×5ZñŠÀÄv A¹ºšlÇvT)oSsÆOsKr‹± öÍÊÍbIì*”Irjõš:d5V’/2û“€*[ˆ|½Œ§5¡%A8äT£Íi…9'ŒÖn¤Û@éVàUx@8éDÑ ô¢Ì5¯Ë3€j;ëÆÕ½5n l¤6sV.¦eˆ2ž*’ݳ½jù¡"›µ\G)°5>*)) ?(¥è:RhqNwéI¦õ¤ïNRA&‡æ™Šp¤Å¨¥&“½sN'›Hq@¥<Ò 3KÏŠLRŽôÚ–ŒsKŠ1Š\qIÁ=hÇ4½zÑš?)G8 š^ôu&“nésGÔg“4¸8Í(ã­& .8¥ŠJ)Íw¤ï@éJ)3EÏz^ÔéÄŒb›Å••(¤Ï=)9Í(éIøÑÞäÒÐh)sMaÅAn¥]ªh±°t¨Ïúáô©GJŽX·ãÚ“iÛ´šTˆ"œUsyûóÈéRI r9éSÆP5"¶;S{ÔsǽÏZ­oi䓎õl;ŠI:šŠÚ(š|è]™Z`R˜pùY³Èq©Ó[3ƒÒ£6ìë‚jHÄ„g"£‘ü÷j%Ø• ²2È *Ìg#œS»P1Þ©ÝÛ³°dlQÇnKîsÈ«Øâ«¼9`i¦Ð4ÏQRÉdÆi‹T#50yr“ž´\Ú‰€?Ä;ÔilÌ~@«Ñ®ÅÇSé@ÍW¸‰Ÿ¡ÅE.jµŒŒu¨ZÃ4$"5 Ux|Ápw}ÚÐíÚ‚sM•CÄP÷ª‚Ôí+ØÕx´ï*ಱ©®mšUÚOä…£‡`=ª"™‰<R\Úù¬NïUg³šm¹~‡Òµ-ЬaO$ ”õ£8¦I‘HíU’Œ‡Š|paËÚ©êm*ZpI'ˆ)éW±l튅-ÌD•èjtŒ€ryªÆûNþÔ먤p1V` ­M·é@¦·BGZȽŠi[åJ»g¼G‡ªy²cµVQ"½ªhåIX·Bi—°1•d8¤D GɃïR\d(\dVt–e]8 ô­•‡Ì„+zRAh±>áVñôªóãp©×îŠwn´¯ZQÍ!À `š;ÓIæŒç4¤ô¤b”63FsM&ÐðEð t Òw¥$g¥é Ç 8ö¥'”™šLŽ™ Œv¥Èõdn<Š õ4,€ñ‘I¸rE*Ý (#8ͼt¤È£<{RãzLP“9¥÷£¥æ“põ¥üéKž)¡²qN¤§”ƒóFGJ^”žÔ=(ü©7 Aõà~”cŒàSr=ir)sÅ4¸õ£p9 äõ„×dJ\Œæ;ÓLŠˆQæQJ®‚á4†UÏQJÖœ4v cg=1HÜŽj~ñ§Æv)„þôt©‡J*9$Ѫý)ôqJ½ëúÐ æÒ“ŠåT¨Åâ/ @úÔѸuȧŽ:ÑNÎGb›œ÷¦9éJ˜a‘M¨làSúý)ŽªÍ“Úœ¸Å8)qÅE,'‘BË‘Žiý/­ ÆisÚR€3ÛHp¢¢7(náš™O´¦“×`‹’@¡(Î0$ÔÇaPÉ$qrH§C:ʹR)Ï*Æ2HØnRbvqRô95Ï$#´ñ"Ê¡—¥ A˜é”õ¤¥Å R1U¥µI[&¥XÂŒ }!QŠ1J{ƒÒ•iÀŽi¼ÑŠB€ÑÀâ–“›·lÆ£µ#D¤r¦¬*; ” \dñF=MW¸Š™>à§QŠQÒÆ©Í;,ª u© 8\â– ÷åOQN”7–Hª÷Hî§øjY^O,í䊒ÎVu;ÇJ&”ÆÃ'ã'ÊEV7-ÂŒeMYy‚àtÏ­4Ìʹ"‹{“1>ÞµgµÑÚ ša ’E: ’ár¤Tw7Kl»˜zu´âtÞ½ 2íÙ",½i–r<±îjtÓí ŠŠW—a*yô©­¤g„³ŒO9_*"«»Ì³®ËW]KÅך£o# —FnLgl1©à ÜEW¾–H”©­Éd O½>IZ¸à­JŒr0iÝ/ãHj«9Y€¥nŽ´È%,H"–ãvÜŽçTûBCjªñ1•¹©Ô|µ¶nH'ŒU’2µ+Ë›¹+š¹ ÂXò´èò3šW“.y4 qÇçQ€â^NEMœÒ÷ Ò7"¨ù….¶Á©% *h´qÈ©¦—bƒB ã&™3˜†îÃÞŸ‰PÍPºóVu8ÍLcl»š[y_y Š[Æe„²õ¤žd`–ç4’ÊÑθlй÷Ó>Õ˜¤‹Ò¾QW+çšt1”òMA¨äBH$Kh¾d*Xö§Ü“eÇj’Öo: ¬{QÏcJ0iùjòdlTˆ0£éLÀ3 °T¨eqÕwvtÜGZA>õ#χ QÅvsëRÜÊÑDX ds—‡wz-ägc»¥[ÅÔÒ88¬Ë»&Aqô¨ehn°jõ»ùP`œàS>Û†ç¥XóU ¿f™“oJ“튳n3L¾™–/“½>ÁÝn©äuVÚ:Ó…[¢½¸h2ŒŠbÜÈbm8©!»3…äS¡¸Ý)CÁµ%ÊnˆÔ–XÏ íSE.ïN*)nÀ}ŠFi!ºÝ&ÆëKqv!`œ—œ pjÊóÍ.)®¡”ƒX÷´w±àœ[H8œNhÆOŠŽXĈA¬¨ ò¯² ­oàü+.RZë ʑޢµ˜G~b^A¡y–.½«?FO.YFO^õ²ÍžÕÉø‹Rhö¤c<óŠßÒ[̲Œ‘ɯíÁ ŠJSÇjP8¤¤§pGz(ÍŒQŠLQŠP(<Ð(Í(ÍšLQEÒŽ¢AôÅ4 ö§b}iGÒrj ½êTè)ÇÒ•piÇ›xÍR¹¾R*f?º9ô¨íã-ÜÕ—B+u¹ƒÁ«–ÛŽwõ«ª ÅPÕI¥sœÒ«K¶<þ5q•ÌEV½Œ¸[t¨âe]2=jÕ«ÄIÛÃUìqšN½©¤óPÝ ‘6úŠÍ²ckpÑ“ÁéNÕ@{gäzÕ,±­Ot”Ù¨¬ÔùT7vÆeã†*º%ÔcæzÚPÉ´€v¨%¶Ý&èÛžø¨‹\@À°Êæµcmñ†ö¬ám›¶mÄf­C‰'5eXÀÅU¿æ.EKl?t¿Jeø&>Ä0„늰x4ìqMôéT§Sç® JÈÛ84°qÁÓ¥8ž€ÒÎ ‘® ªBDzPAZ¨‡ý/«Àä*7dVîk9ƒÙË•ÉCW 0nõ¨¤%nFGe‰ Å@%Ì€u« )ÇÅ&(?ʲn#&õH54ÞbAùGZ±mµ—"›t¥±ìjx¾èÇ¥A}ÌÉ¥²S+ÅGyóH§8æ•£bŸ{š¯ö¡ qƒV¤ýå³uFÒÞ@§ šYC0wåsÖ´ÑÃǑӕ,FKàãÚ®[Äb“®G½L&S&ÑŒÕ}Gþ=Í-‡ú…§ÞàÀÃÖ™§Da·çÖ®qšSÅ(òœÿ:†<lSÐüŸ…G» Ÿ>µVír Šh`!çÓ¥GhÀ†úÒÈ¡œã­U‚ ·¹'­jJ¡ãÇj© eY—µ\DTSÕ¼´‡j”Å@Ž*l¢#pàÒ²²Ú‘“š-|ÅÎú½o—\æªÂÈ/\q“Ks¼ÈAäU‹…@õ©-öˆÀÍWu?k*D\ž´4FFûØZ|Á¶€µ]‘ß5(S´ ¯öfó·V°ÛqíQD²+·Ÿ,AЃÈ4–ñyJGieˆ?=Å!W ŒÔ)îÍ\SëJzÒS€qÖ³Lr› ç¥^uß vª–©$rcøjô‘îQéQG½ ^ÔæBì3RmÚ¸ïU&Ù‡µJ»¶€E@ö‚fûšTa UªÐùÈ6â¤hLØÝÒ¬)RkY ÂEb*}’”Áni¶öÍ¥˜äâ–êÞI—ñM†!P¡ª_(±ùLåÆiÑŒ ¥=iÜ k`ƒQEíOCòô¨úÍøTÀñÒ‘€#¥B`"’8y"”ÖÍ3ì£~îõ$” S£^#šK‚DgoZŠÌI´ï5k¢xØæÅÒ” Æ1Pý˜«px«!BÆxíYB&7E¶ã=êôp€A"¥1†\1MHB Wˆ1Í5aÁ¥xƒn{{REn#$Šk[†”0ê*Á\Žj6€{S¢Œ(Å#Á¹²;RpsÅE=·š@<jš(1SHI<Ò‘Š®ÖÊdÝSÂQÃV,qÍXÍñMeÜ1U^ÑY²jÂ&ÄÅW–Õd|â§Šã­6â/5 š«œ‘¯¯ªpFk6óMK–ùªÍ¥²ÛFF;ìàK¾¬JÑÔö¤ö§uô¥íÚ›Ûµ/JAÖŽ{QëÅéçµäQš1ù wn‚šGÒ¥”¸úRŽjCȤç˜4¼Ð:ÑIžzRÂ’—·j:UyÌ8©—§JQŸj_Ê—øiáLØ:àT€a1L8§b“o°£o.8è)¦0})6jP€‚”¦ñóbš# *€zSÉ ô)£¿J‚[uò)âÛŒTrÛ¤Ÿ)QŽô±[¤c婊ätô ¨4l”»F;PRÏj\RÅ.(±HÀ@JP)Ô”¹âŒŠM´`J_”fƒÍ7híJ3@ûÙâœy˜À¤Ç¥(úsF84§‘MÁÑKÐQŠB3Mǰ  àæœOjh^iO^ÔiqÇj@¼v£`t¤ =¨ Kϵ  VúRƒ…ëQ÷§~TÂŽGj:RÒvÆBŸ|ô§òþ¼žõ5/jLb€)p(¤eÉ  ir *¨ŠZ;Ҍ⛊1HAÍ;­3`Îxü©Áx£âŒ\`Rc­(ÇãŠh£´£­ ÉÀ¤Ç«Å%&3Þ€)h¢‚(Ç­.8À  sIŒõ¥Å!gµ{Òwç•8cÖ¯4bŽ´QF)@æ–õ¤=E.(æZ9ô£ò¢Žô½¨4sŠJ0sJi3@¤4¢H)I  š("€2(ªóEL½:ŒQõ¥"uÅ/zN´`ÑE/Z^ÔÐ9¢— ¦ôТ”ŽÙ ðJµ%%¸¤"Œj(§pÒ 1J\bŽ´éEŠ1KùRœSiqÅ%…¨Å;Òƒ“KŽi§­õ¥¢”ŠJqF(8é -!ëF("ŒSyÍ8ŠZ\Ru¥Çh­'c4 (ä ¤šCÅ(£ø³O<ŠhéG½/¨WïUÎÞ¢£^e<Ô”‘šN=i) ëJ9iIàMžM/ãG~´¹”Rcž´§¯Z@ -qÍ'ãKÛµ%-öÍ'¤ç©¢—§&Œ‚:ÒgQùP(¢—Œõ£<õ£ñ ç4áÒšOJQÖ“'Ôpâ–9„ˆqÚ’&˰¥–o/¨§€Œ0§«†@ÃMŒãSb¹Hî*psÎ)M&qéP½Â‰6ž´€=)|ð¼äb¤o¦0Øã4,Ê[éìØ*r‡€yø§YnFigD ŸÊ£# sSnàc¥D÷ œgšgÚÓv3Ï¥Kæ ¹5¸öâ¤)Lƒšˆ\¦â¹õ˜;c8©†â…÷¦±Ú3šg™ÐŠrÈŽâ¨_4ž` :Ô–pºž¦¯íëU£lȦ^ÔÝÛ¤=*LÐ}¨£4Q“Ú©ßÅçAŽâ³´É †‰ÿ Ñ®;›s°‘ÅM¢ÆEš19jÑ–P‡­1.UŸnFióÈcŒ°íT!ÔŒ¤íRqV ºó]”ŒJËÕoæ‚dUN ­;Gy ¸ªÞ~/všÔSÅ/jÍÕf’t“$¯oºAÉ­ nváW­1nNààÔw·fÝ7ã"¢Šÿ̀⦗+Ï®*H.GÚi×3ˆ¹8¡[åt GµMË Êš¡p^''­iƒ¶<“P´ÔèÛ— ŒT˜ãÀMT[ÍÌTv§ÇpMûS„¬e*GJ¡x\ܧaš¿&|ž=)-‰1àÕVóùN~SZJsŠVµsÅW7aXã4—£Ì·8?J,N-×4é.N⩃ŠH¯™±Æ õ§]]­ºnlb Û0 æ¬}©V=Ì@¨ÅðÜàõq2ät§R0Êâ±µpQˆæ®Ø¡‚NMHnG°ðid¸Xʃޤož#ŽâªZnW|š™®‘kW¹EPI©QÃŒƒOÏËL|•8ëY34ëvƒøIç¬™ÛøU+„•ÜààJ†Åg ½É­íGJ†iÄCš/•¤ÜëV™ð„ñUWPˆ¹MÃ#µL—*Í´MJÄžÕ™©]ù1V‰~÷q±oZبg䊕:S³Š3‘J£<Ó€J}îg{bŸtsïš æßíM·$BsYÆè­Ë(#éW­r[Œš½ŒRÐ@ª ûô4ë…ýÐíO¯”;ñM´à8ÍG›ÇZ®¾Ö£¢NÕ dW=iŠ_cR]ÀyªÓ™ŠÐ‰ÉˆgÒ¨;„¹§ÆæÝ‘žÂ~î|”ØÉ>•<ÉRAªðÅþ”Ùõ«ËVÈ©3J*½ËÀÉ¢˜†j(w‰ÛŠ[‚¡Ôšµ yu¨c94îÔÈÿÖô©¾ñéF1E%õ¨f#¡5—x¦7IPjK½¯jź‘V´œ% ¤¸#p=MgÄì×àãqZòПLsš«i (;@!Uº$c#Š‹P…d‘Žõz¢0gI·ûAsŠ×^ƒ¥8Õ I7@G¨¤± BŽ”Ã³Ž†¤’.¿7J‹U+öp¼u¬)öA…1Iiîp=}jPnsN¼ŒIéÖ¡´‰VÜ)–¡’í¿»S\ÇÊ[Ù-‰¨(‘à'ž†¯éÅü²¬jþ~^”Æ]Àô¬ÉȺž¸·½I¿€Î\µJð¨uÏÔò¶-É튎ŷFqëQ\¶.£Àç5}œzU+¶mêJY Yt8éK9XíŽzޒу[ej L¬îu4]B^t+ØÔz’ï€'CŽ*‚¬Öñ ¶å=Û<–é€G=ªo³³ÄnëVØô15· ª¥ô‚E]¸ÆjåºþäU)׊qO¼ÚUOz´‡÷#éQ¹r*®¡l äSmÝ.”(íZqÆp>’³î\ „àu«ÈAÃ,q–4Ë]®»Æ9ô«&“5Fð‚ØÆMe܉#¹ˆ° f·Tî„t¬¸mß3ãŒÔ³¯“p„õ=ìÌ U Ë/´ÙOj‡Ã‘ù)"zµÑƒšŽQÒž8F {Ô3F[¡¦¤!WÖ {%iDU§f)ñ‚ ©)§­1ÓxÁ¦F¥8)ùby¦H¬É€y©#(Í;< 2)`qYÞSý¬>*ÍÔ&[r¸ê*„RÄ67@x«sÃæŽzŽ”‘ÄÊ ’XCÇ´Š®°:|£¥X(Y Ô+nS )R „¶:Ô¶ÊUŽNjÏ­6¢š!*m<ЉmÆÍ§‘K >J|‘n ÷¦M˜ RCEÆidŒH¸"žŠp;TrFZ[1Îiι^j(`ØN;ÔøãUu€,„އ­HêYH¨üŒ¦ÞÔ‚Ü(â¥H@üi ²dQ4;Ï^)ÁM´ÁUaYïh!fæ¬[ÄQ×oJÑ Š Vš"î=)%‰ž•ŒŽ3NHÂ“Ž¦›$Ï4ôMƒŠ$b¢^Ó‡Ý¨Ðæ^*pHlÐNMi?@£Zx ¶sMû>äÚÜÕ{‹"à šÒÔ¸ÝRËfÜ1P}ï 8=êÁŒ”ÚM$PÁÅ4Z3}>Xª¤Š"ƒ–AæžA«ñ©ƒFµ2HÂzŠ;eCR4@AÁ¦ˆ¹É¨î-–à"–;c{;Q <‘ßÖƒïCQsÄ$f«Ú#Æp*äp„9⣖1ÁÏJ|oÒ XYojžöz±ÔSj9"W ã¥5á"¦UÚ1T®­Œ®§=*G€¼;3Ö’Þܤ ‚{gy•³Ò¯ ;Fzâœ;Ô3Cæ ‰"u Å-Í¿ŸÌàw¢ÖÜÀ›sžiÏn îSÒrj‹A7µF,xÁ93Z¡Œ.)ßÕ¥]«Šw·Jî×ÏÇ8ÅF–wqÎ*ú.^{1ƒ‚*í¤‘GÍS¢8ˆ)<âˆ!1±bI¨¦›sìÇ&–ÊÔE¹‡Zº(¤`HëYóZ<²¸ŒU¸Q•@=©—‘4±f‹8LQ5bŒUY­·¸9éUç±2º’ßv­"2Å·9ªðÁ"ÌXœäÔw–òÉ:x¬M–QUå‹VEŠ«¢Ã4Nþ`ÆNkp~¬F H€ã”}M/>Ô½¨þT 1Ïj1‘Û.J_Æžâ¢I•œ§CS;ÑßµZ1ô¥1F=(Å!æçn)sòŠa}¤E8žôyÉË`zx Ž1õ§uï@bŽi®vŒœT{RAž Hª8À¥'M;·Zoz("€08  6óõ¤#o½„àv¡H<ñM’QËcÌ’ž JØ£1+sÅ 0§Ú”øQMÇ4Ó&ÖŠíHO ‘éIŸ¥.{qM.SNŒÑÚ Œ1³R”ØW.Æ¥8Í%;.i? 3E'åH=©Ä{ÓqŠ_åGÒŒGJLІ–€=iMJB{ñGZZcµ+Ø9¦œRâ‘ÐH9$J½8©< i wéJ­•¦·ÅEÅH¸eÍ%¥¥õ¤ê;P/ziZQÒŒdqF(#š^ÔqIŒ÷îÔc4Å!£-ëG^˜ ƒíAö£4¸î(Å!4t¨ÌJÇ$ ÔŠ1Ò—4½ñAÍ!¤ú1žôF9£’hÆ>´cÒŒ`ÑJhÀ‘PȦ„äSª‡¥MH›*1Ú«Ï[vÇ\TVÑ·Á«FR2*eÙ#(©Rèv>µk#oá¨í°ã֪ܸHN5mÈhNÐ3Š¡hÎÌÊÇ¡«±ÇóîÍO½zn§”j(&©Ü½yïSIÌ_…23žÕ´¡¦sQ°\`6 ,I$sœŠuØ;ѱҮE(u”ž*Î%&¦Á+jŽ1‡5'¾ESºc•©ì€Ä:RÛ’PƒÚ¡ejÒÝ!eùzæ’`ÞPÏãM*Y5F)’€eSîPyYûcû°*aÒŠz(¤£5Jô¿›VÁZ€¡iÁ—€  ÓÚ?6 §=*µ¬^^å"­@€HN1V‰õ¦(Á$iOCÏXÉ57‡´à@ àÐqŠoÇ•°ÍŠjάx9©‡=èõæ€9äÑÅ&E)#Š2)8¥`Îi¤z^)ØQëGZfà3J9§qšCFhÏZRrhïHq@Æ) ëMIRLí=)ý(È4î6Óh½ã½!4ŒÀw¡]OCGœ›¶“ŠFu9¥GWèA§‘ïFi(>´†DÝ·w4î(£#¥Ïz8õ ÒŽ”t9¦³¨êy¦‰S‘ºž6ã4dRf€ÊN3Jqž´ zÑž(àŽ´NiK¨š20i ½”÷¥¢Ð>´§ëÍ/„Š?@G¯çFETI¸ T±Œ(§0 1Q¬§#¤*z„@óÞ¤U 3ޚѧª…\f“bši‰ dõ§•Va‘Š4AòÒI‘pÆ™J€M[uoiï~´Õ…S5)PG>•’£¡¦-º‰7w©Åé{SX*%Cg½JTcš…éNëQ˜ÃàÓ‚ÒÆ §„R=)»E"Æ ô§ð;Ó”qœÒtÍ&ÐÀŽ)†5 ŠlP$lqRäÖ—#™½æ¤ ┢ž´4›“h Š"Û)oZ²Š:ŒŽh85 ¤ô§Ú” ¶(£æ¥Ú E5£VëIåZx÷‰IÍ4¡³I${€ÅEåóSĘ4㓚R¡†;R¬{:SˆçÒ`v4¿. &@éG¤ uÍ(éÖšÁ[­èiB¯ãC c@\qI±y¥”î1ŠbŸ˜ŒÑÛµGSÅNØÀ¦ŸÂ—ƒGCIÉ£Ú¨jLy‘RYÅûµc×sàb¡–Pƒê?´ÜT¯(î*°½ÂLj6ò)Ò\ím£¯¥÷bG(~õKs)Ž<ÕxîL«¹y©`œ»=ªÍâ³®.Š\ªWV_ÝîªozCqÒ¬Ar³.A¨žûd¡ 3ûEUö·Z”Þ«Ò¬G(‘7 §5ëG8Lu© ÑC–jrÂHzŒ©f…%qš}ÕêÂvädÕdÔ Ì«!ûÝ+UHeŠ^¢©Kx"”!Ï5Ú—’ÀÁïV Þ!9Ï¥;yxI"›dÆ@sÔmÊâUl㚀hŽ}*>…]íH[Ž•VK ‡ƒ“Þ ÈœqøŠ¬½jóɱ;Uv¸u9ÛÅXYÖDÜ1PÅ y©a˜L ¥Esx#<Kmr³&EXëGj¯:¤ƒŽ+&Ådk©¹ Öy„+ƒÓ†áD{ûRÃ:Ì™‚BËr p*in“DW)"îSã˜9 b¤úPX"“Y/q,³•è5=ŒîìÊü㡨õ‰cF2MR´½¸AdèåE.xéQM2D¥˜âª&¥8RÃ&®ïP¹Èªâþ&Ðã#µ*ÞFÏ·pÍXíš§srNȪöWþt¥ Î+O9›#Ó—‘Å#’T^m˜#ñŸZšIH]˃K ³rÃ6T÷¤Ï¥2i 4¡óqÚ¡†s$Œj³øRqÖ—ò¤Ý×¥ `M&FzÒ’R)CjcÈgŒR£†Ÿ;Rdu¦³3š €J=0iKI¼Æ)Àf”©îiKÞ•\c­4°ÁäTqI½ÏèÁ>”ãøTF_Ÿh4îM1d!ö‘SäÎ( z;ÑÅ”–¡FýéÔþqØÓ#ç50Þý©sÍs@¥ÇȪW‡÷ddT¶üB9<á.FMV›?iRzT³ÉÆ3ÛÇm>•Œ—9ˆÍkÚÄ‹+ÎO5 Ùy¾SÍAfX^°-Ú´ç ÂséPÙíœøÑµ‘Æ*ý'CÅg\oUŽ*܃0¾•›,àî?…Y³ƒÊfÁëHñ,—*XŠ©¨BÐŽjúÄÛ·Ju‘Ìd{Õ{­¢ê2qÖ§ŸfŸR šŠÕÃH܃TïmË]«vúS’–FÏ#¥kDŒ q¬ýFÑ_¼9¬ÁÞÇ©4ó+¿”ýÖ̘XMV±`Kc¹¥½o`jrß¹'=ª­”ªó0ÈÍiv¨§b±zU ,:±~¹«B±;0=j0GÚóRÜg GAJÄ4}ºUx·$/žf«J¥ˆmËž•¡§ÈÏd`ŠQäw p «6q\ŒÖ‚’84Œàj¹$RéTìÇúD‡ÔÕ«Å&ÜûS#ÃZ ‘Óšfžƒß¥>C›¥T—0 a+ê+2ÒAhóÚµ ˆ/Ì1“ÍMŠCÓ•VÑ‹O'Ö¬É1V &ŸÊòO”ªÞbðy¨·²–VëÚªÅrÿk(ØÇj¹‚XjµÔå01ÁïQ¥Ë»[4ûÂÞX ýjÔˆÁö¦ï/!\óM•ž,x¥ºË[î ¡g‡æ=é–Ó8¹xÉÈ)÷w,Ž£Ö™4²"†AœÖ„.Ì€ž¸©NIZáXƒÍBìÏo‘ÔS,ç2)RpE]ì5NÝYn_œÒÞD“”Œ2µŸºH¤$ ­uw†«–ŒãÒ ´W@á½iÐ3y¬¤ý)&.|ß/¥BÓ•@=}jþIAQ!"B¤Žiˆ&8<œ)ÝšVp½iUƒt"«ß)6ÍÓ¥EdÌ Š%ä•N:T’Ï䨧òbÈ=©–ò™ÔzÕy¤x¦œ)¤{)Ç<Jµ¸ÈTƒ‘N¸—Ë‹5Y%,»³ÍZ†BéóSs¶| eðݵOmþ¥~•#”â¨C»ím»¥^ê8¤)ÐàTFBfi—w-Oo@ÜT™ãµ-' T+þ¸Ÿj{}Þ)‘ƒÉ©À¤4wâŠ:PzUYí¼ÌóBÂUÓVÔ´¡ØäŠ°ÐƒŒÒy8=zt¦ÏèŠúÖX²_vÞjå¤L§…©ÔoÜ 4X¨¾pjcdô¢;u@qÒ”[¨míM¶ŒUYí<Æ Þ¥HÊ®ÒinÈêjEŒŠ€Ú~óx<Óf³óXzTÞAòöæ’LYÁª×p%SƒÅX†€Õ“1•5RÞÔBÄÔÒDsŠ1RŽi®”ÔPÛ"1ô<Ò­ºFå”u§²\b™  w¢HCó VˆÛÚ¡‚Éc°ëWOâšÀ0 Õ3ióå=jU‹’MD-—x5hÆ0j/³àõ⇄ŠŠÏí<»on!_sNk`ÏqR¢mäõ©)®»”ŠÏ6n¬ÅX€j[KcOZ³" #*}*Ÿ‘ Œ¨l ,íÞ À·SH`Ü=*k‰ÌAxÏ­TKežèMƒÅj ÀéNéLq•8¬9m.ÎðÜv­ HäLïëL¾³y˜2œ¨ Óɘ<œ‘[¸ô¢ª]Ûyàdã™w¥5Âì'+V,¬^Þ-¥‰ô¦Gk4wóœÓn­®&‘O@¾Õ bf·ÁíÅSˆÉm¹ª¶ +j ì„fºUî0@ÍLŸtSÏJ­tA‰ôªö¬dŽjó ¡Åe%³GxÒ0È5 ¨¥¦Þs ¡ŽB¶øÇj­¦»}¢PGSVåŒù« íR±Ü¸§À¥Tf ¸Fó•‡JŠ{|::õqùyª’ÒmaÅ@Öá[1œÕ™QšÛ§ TÖíº ZfÏ.]þ´N<í t¢u"0IÅCe¼DU…$1‘tÍŽµ%å¹p¬9"ŸZ>W‘Ò¬Ä01Rf£uÜ WŠ" g¡¦ÅmåÎÌÕÃÂÕdR³–õ§\! c­Ib¿…V˜¹p:S¥Rë¶¥·P œ‘Ó5™€j8 … Š."i1Çz™ˆ‡®*8ƒA¨ä„¬»€ÍH8ãšœ )²d Š­bHqI$*ØÆ3Sœ¤C>AsQG»í9§L­æÔwª×11eu^•¡o–Q¸b‰#;¸ëNe8ã­=sŠkÄ$ê(XÂt¨nÙŒ,¦Y6cŒ´xJöØÉ‚ ©>NÓ×[BP“ÜÔwðbÈû¡Å­¹ëÚ¬Y+Èj–ê/2,w¨¡@±€G5:‚£¥@…É$qN¹FtÀ©-ÃÀ=…MŽ1ïP´ù®É#¼V]ÀñV ”J™¤"—$Šn 2c¶&5JÎä´ÅÕþÕ¹Q Œõ§I0Œx©»¸ªæíwðF*]¤‡å âœ÷*ŒïK,á ô«‹¾ôâ0´¿ÃïLs¶›¸hW Í)ŒÒ† zÒ4i¢t'ÔS܈÷©Ñƒ("šÒ„êE,r«”ƒL’u°H§ AïRäÚ«Î~BAǶ혆M<¸­*H¯ÀëJÍ€iªàŒ‚)wdžÕ! NjBà f”0=éƒGJ§rÌ®¤Të0P ~íü攜i7G5Á*‡°6äæ•ØõLÌVåFx5p¸QšEpÃ9¡dRJç¥+¸AÍ!“ Òž¸dRž´Ž”QMiÕ¸QÔŠwš¥sšPãÍ8*ù›ÔäŽ9ª·rmLƒÒk!–<š²;©[îÓ!ä­HsƒYwMÒnájYUpê*Á]ÑsŽ•ZØ'ΣxR· ŠmÑ;×Ò˜#,AÝÐÔ× ¿g!ª;x‡‘ÆûWPx«ÇƒÁâŒõ¦“ŽõVâB[bœÖDÒµµÒ¾0;Öì/æÄ®U+Œ-ÚtÏ­:ùÔD¤úÔ¡óiŸjȶ¸äBAæ´ìaQÐŒšuô`H‡°¥¹Ûö~ª%¦íTTMË+¦´ìò`Á–ÛRgsZç¥4•„r*ºíó&¦ŸqŒíæ±eÈûëÈ5µlàĵJךZ;QŸQJz”€â”RŽÔK@<ÑœPO­ûRwéKÎhÅ4tvÍÇ4 “E!æŒâ—­'z  š\ÒQ@è Rð)£ð£4RwíŠZ\RRbŒqEE1ÂÔˆ~J‚ë&#Š¢\ÇÝO­^_žÛ¯j‚Ú,ƒ“žiIÙt Tw·MUê $’=®¹Ï¥X7LbéƒïH×bÜzÕ»y<ȃT7lÐæ‘&Y)8«]J Vì÷Ïjuü{ãŽhòÑÇ'8§Z3yx>µZyÝ.BŸºiÌYÝv7~ f¥QÏ^”½é®v©â³áŸÍ¸d=:_Ý:•=jYÇ›úQoH€ezqOcÅ ëü©n \)ÛO µNR9¸#2‡2©ã½2è¸?/>µM–-Òçi5qp± zVtr<— :Šš%ÝÐSî“xZ#zÓfr¤Sgæ}¨µ?¸)ªÙ,1šd°ÍZ˜¯í¡À«axÍ8Tç%dÊóëMŠbÒàŒz½’EQTîÇ õ§2~ã9ÉÅÇrrE9$ß)µ2wòØëRLÄÃ“Ž”ËwÛ#­Eo!™Û#€qL(º^ÕiÇîÒ¢¶|¡ö¦FA»8©îW1r)"ÿQŸjm³7šëÚ­ŽN(§víMª·@°u¬ë‰Ú8ðÈG¸«8hTƒšžW+*e9}ê=¸¹Ïz|ÎC(¦\F¥-’í‡õlô¨×—4â>ZdXÚzSóPM™Œâ‘`éžÝ)g;bíJ‡åÈ`¿/Z¯!óãùÓ‘RÄ6[HȪ֬þc‘È&­ˆ³ sÔT7vÛÙ\H§F»× ¢™qnß)÷Ë„gƒj€)¶¦TŒ'¥>è3…ïL–&¬ƒæ«»y0æ«.ÿ¶nŠšåÔ)ÁXÃŽø¨íÑÓ;ºf«]ÄÒÉ•n†–1$b§nP}iøô£½ 21YÞAŠrëޞљÝÚ¦‘H‹ ×C¸ TÂÛ4ŠdJo Aâ¤üª«ÀÞpu©2õëQI3î+yP1éK<ÐS6ݤSVÓ ]p LÏåL–-ÇŠz.i²Ç¼b¢‘“h¢ÕkP#`äÁ¦GnÂRÙ« ”ïœÔf5g jÀ'h¥=*«ÄþaaÒš!>`oJ¸3´P3šOj¯q>1ŠvÒbÇzl*ÊHâÄQ·-5£2È v©'ºÀ©–èDx"š±4NÅGSUZ ží_?(=+D®PƒPÅw¡¦ÇlË>üÔÓ±ò˜{S B"ëÖ¤Ž=€‘Þš¥üÿj´}­©* £,Aª€È¸` GöVŒ®ÎëSI”ƒŠSøQFyéJFi>‚ƒÏZQ×µ!=¨¢—’);âƒøSy4îô¢Žøô£š#µ”¸úRçéG™Ç¥ÒKÚ“ð¥ÏLcŠ2q@ëÚ”â›øÒŠŠCHsKøPGÒŽqÚ“ò¥¥Å!Rnìqš¯8ÊÔ‘}Ášq\úRm0)¬€ŒtØáTèEOÐv¦ŸÂ(SÅÉíI´ R”úPc)B;SB ÙâœÂ…`F)¥jƒ'#ŠQáɧ@âœx4ŸÅŠ & /ñH0E; QJ~í!éI·pç¥qÀÅ.~”ªFî´Úð)1ߊw  –uíGJ3Å!8ô¦«®ìdSð=¨Ç=E/jc`õíM ¬p1Rbœ=ñM"“Zwj1Ò›ŒFãšT!†E/OJN Å 0i6î¥ÛŽ˜  6Œ}):dQŽ:ÑŒR2ëŽhT ¼bíÅ{ñNíŠBxŠ È㇟JcHªqšpäS»cŠ@>”æœpFi”ûb¢—#ŒÐü©ÈFÐqSAäRt£½~T¼c¥ @=éÒ\,L7R¤é+`›Rf€}ª‡)Å2Õ·GœÒ½Ê¯z|S8©ºŠNÔdöª7·ŸfÁ#­=.‚°˜È“ÅF×ÏJ”Ì<½ÀŒUf»ÏÜéRE;9àqR¼Ø☓äí5#± ‘PÇp_8Z•%ÈÎ)¾fî•][ý õt°UÉÅWûHÝŽÕ>õ# ñLwN*µ»ÿ¤0æ¯r@4¢ƒÍ!éŠ?‡½©3‘Lp œšŠ&ؤ ‘% ‘ÆE1¦Úà|Žp朄²žÔáúÑÏù4„T¤¸ap­îÂæ [€ÄûT‰&áô¦™°z|r‡úÑ,¢1“B˽7B7Ri†à…ëOŽ@þ™¨.FVU±jcLp3W’æ6ä0¨®¯ã…2X ‚×U†áІ«Þzc¨úÒ}¥ñ oÚS?xR›”ÇQH·HˆT†tÛ÷…3í ýêtþð¡®#é¸R}ª1ÜQö”ÏÞ†é=E/Úñ‘Kç®3¸RùªFsGÚ#é¸S äKÁaIär6³VsKž)¤2h¥íIŠ)sÅPhè)q‘šJ(¢Æ™"ïR ê+!4õ¶» àžke3I ȧ…ÉFPý*˜PÍÞ¬ÜcÊo¥V¶Œ<]è¶_.äóÅKtà0 óéT.÷¡5¢Æj­´*³È{æ´@Å.x h|b³]A¼^•|rµ^1™XU{·Ì„jîíÑóéPZŒÀzÕ;à rÊ7 M>pgÚA }kkŒqM4¾¼Ô74MôªÖ‡éU¤W2–C‘éVm—Úô;QÆ(¨êQƒÏ8©mT—ŽÔ—H[¨Ú2>´Ö;fÉè+6ÚãW±5±j§žáY¾•]†%l°e5°]Ïõ©ÜaZ¯j8!½i6)º Æ@§]– ~”Ňåµ"«"ž*HÈ)PDª.:ÕÚZ? By¢ƒÒÀçÇ?)¨£a´ô¨#ÜnÏTó.åÏqNOG­KÛŠQGJCT¤í+V³„9V¦V« ©< ¨§ íäQhÌ$`ÕnUó"9^ÙÈÊ7Z´ãä8ô¬ûU1·µrI¦Ý0ùE>CþòúUx™OáVaA9=j1ý¨¶y«;@ÅRxË9(ß…:ÔºÌU‡ãWø?…D>ù4÷M,w“RJÚCÒ€i“­ïF3J¤ÈéHihh÷¢Š(=*•ͧšÙɦ <¦”Yz“Oc$Ò}‘AêiE #9§}›'©¨ÚÏ“†4‹dÜüÆœ-XucJmMÆš,¹ûÆ—ìC=MH-±Æj6µÉêh¸þ#N00èÆ˜m™‡.j•Õ•Ã’CŠžÒÎD‘É5+ÙnÎÖeî$ñ$aéXW¸`–úÒCᇒ@\[¶ú D'ŠÓŠÈ ÆMVÔt¡qj®™¢µ»ìI­Áí¦ý‘;Ó~ƃžiÿbŒÆsœûSc´AÚœmA9ü*3h ïNª!³^´†É{šrÙ¨†ÍqÍ'Øt¥û"ã½ezšìC9ɨßOVêjK]=`}ýk@S°(ÈÇ"›Ž1@QŠ1’(Æ8¢‚(íFx u Ò‘Å7RöÅ'z…ÈÞjQCcÓ—¥5†AÍSXY$%z|ÈÍÒ[£ÇÓMŽ7–=)n!w`ÊzTR[¼Š3ÔT±Äã­'”É.áß­\ˆ)M( ÕIa&Pâ¦ã½CL$cšŽîÛÎÛÛ2+,X'œTÆáØž”‚ž¾Ôè­þpø«½:P}ésQÌ7&½CZoÙ¶± ÔÐIJqRõ4¸ÎiqšŽHDœrF`SöŒŠˆGמ*9#]m£•çÖ¦‚’dg+D3Áæ“Ê­(Æ’8B1ÅKŒÔ~PRqLò>}Õ# eÇjbÆW© dL‘ÆH¦­¾$ßš°>´´†ŒQŨnj2˜Ï¢mɧ*“Þ˜Y‹cS£P¦¥ u¤ïF* bÜÙSÕNÌš‰-È”°53®å+U’ܦqÞ„¶*û³VÂåy¨¼•¸jcƒQËÔÒªzšl :õ§„Âm¨Ö„jP ñ¦ˆA“5!¡àäw§¬X}Õ&ª1˦„Á'¾iIã­6ƒøRt Rš0iE!ëIE(éIIÍ8`ÑGCÖ”ãh¦ãŽOcÞŒRýhÇÒ—õ£ëGSÚ€O4qëIŒQßµûQùQÛR`zÒÐWÞ“hõ£h^ôb~)<µ#¥ @; pQKKŽ{R0É¥¼P=±KŽ1šãŒQž1š@ ©ÁÅ•)Á4wÅ! QÒŽ ó@u£èà@ô¤Ï™ã£§ZN)qÅ­ÏSAϵëGQÖÆÆŒSÓ­&­%5&\óRŽÃ5¸­H —Zo‘Ø(ä­( Œƒ@^ÔüñÚ‚~”~Td{Ru4¸ÁæJ:ÐzÓ@9ö§óH½/>¢“ò¥\{Q¥•.xíAü)1Çj;f–ƒøQùQŒðiHqMúb”Ÿ¥œûQùQ@çÒʃŸj3ÇjáAçÒÊ“#=©Ã)£íKùPzv¥¼QÖÓµ'^˜¥é×g4¹ãµ'åJ 4þŸ•;=ø¤ÈÎiI¤ÈÇlÑךZáJyÑÇ¥ö§v¦‘ƒÚ—ò ŽÔu£­.hÍ4ã4 RŠ?*3Jh?…™£J;ö¨å늎:S$8RET¶ØZšànˆôS‘©àœHHhž(g"›öŒ€Gz{Js‘L[‘œ•1`W ƒô¨á¸9Áù%@´3í\ÕY.ˆ‡J’)K€qUnÈŽT=óSùåcÝVbq"üóN m¨Ï¨O;¥Ê*þ5qNäç½ehoJ É5an% 'ô«æ@©’GJ®ÓäeHÅKâU#ŒŠ˜qéJ}E7§z¬Óœ'ÔŽæ5Ï©DŸ»ÏI±rØø¤3MšbŒ1Ò”ÊK8¦ÌØÛCI…ièI§çéGz ª†rXZš·|¹¤š`„E3Í$Œ`в¼ŽÔƒÚŽ=ª‚DGqPY<¶:Ò_¨ 1Ç^)#•Ö<‘Ú¬Ã(•7G›< qIù;[ƒSƒÇ8¥ÏÒšOÒ¡º˜ÂªÝ½*#pÛ”pjd˜¼{†)"œ´›Z¦‘ö ñQ#šp“r犈\åJ²n¨C±“¬‚vóŠ_Æ”ôãÙ>éÆ* vÉ`zÔ»¹Ç¤Š°¬d‘Ò¡3nèE>ƒå{ŠF”îÅNÊdf¤ü‡>•¹ÂœTùÈäS»R?Ý&’,ì&3F(÷Å'ÔÍ<œŒSzRƒÈ4Îi¹÷¦Ë.Å&ªG¨Dï°6[Ò¬@ëÅH® isëKßµ!aøÒf–ƒØR‚=ir@¦õ¥'=éÙzÒ:æÙëŠQøQùSiúPzö¨'¹HS$Ñë(ÍOÁ¢Š®÷ $ØÍ.öœqL?#t¦ÚÞ,ì@ÇsƒùP? 8è'ŒñT¤¿D¸¦®«qڌȥ'ŽqMSº Òg‘J Ò“§¥!éÒ¨\ê m÷ø´û=F+Ìì`H©®nV,ø¡µ¿ŽåNÂ{UÐxôühÎ(ϸ œúSK€¹5]/¢yv½*ÖàqCuªh{RÍ(çš4¸õ¤Å!éFi?*QJx PERŠŠaòÓãû£¥ ¡ªVØV|úÔóÄ~”Ûu.j8¶‹“ƒR^ ÅÏ­:Sª·LÉpŠ>íX‘AˆÄùX#œÓ…¹?­>G]ê3ØÑu X =…bÅ}– Ÿ—5¹jÑ´`¡Š«z¥Lö54Ê>Îzt§X¶aúqV»Ó³òšŒÕ‚«r…±õ«A×oª1á¯ŸÂ‹Ì ã5<Ù’ÛåêGQQÛF<¢ 9÷©­â¹Çz¸)zÓX ςܥK9ßz 4pjmËùîã¥-”¹­K. •2Žœ ‚èŒÞªH^$ê*ü2¬ˆ5 Î{RþŒp§Š¡÷œœâ™jÄNÀò)÷%å´¡Ùò=)–Ÿq‡½âæŸtXªâ¥R …15E£;r·éW!,W 9¦!ÛqÏqWÈíNéÈÅ!=i­Ðš­nß½j“;dÉS.` TŸ~¥WŽ0>¹©¢ˆ#ßëM|#<Õ;i1xFkFgù3ÛËR?Z²zb¼æ’BvHNPTƒ94 ÑÒ“¥»Qš1šSŒP>ïJOÊ™*†B¥svêWÀ­Û… =™¦^;Nñ°ã=jô—EeÚzTPj®L}EOwpa‹xééMµ¹i¢ÝŠ}½É’VCÔS§¸òÙT“U¦¾hGuHo@ÎF(†S4[³IòneaÐñUÅôyåö«i3‚Ň¡[íîyÆ*ì2—â¬g8â“Ôr¿—sÀÈÌ»…2 Á$­˜v¬Í]äócîæµì,*O¥Zü¨?JŠy BÄzVŸ!žù‰9Åo`Õib­Ž˜¬Í7"wÖ¯\]´2 'ƒV$»Xã Hæ„‘¤]ÔÔ»!Œ‘‘YŽWS„‚0MjËv°Ä¤ WžöHÐH#Ò§^e¶ñŒâ©ZßË38ô5~§1ã¥Göü‚F0)ÖzŒwD¨#píWûÐH ò8¬ZÐ\@W¾+˜Ð®¤µÔÞ Æq]¸[*pqU|1ÛvÉË[sÜyC5Í"€ý*Þ«ÂXcŠÏMh<ŒŠ¤‘Ö®Û]›„n1XˆÎ5‚[-}äY8©¦½H¢ó ô±^,°yŠF(‚ù&b¡†E$·¨°0ÝM‚øK&Îõ}=©ß4õëA¤ ÑÖ•¨”Ózw¥÷¨¥ZTàv§àÍVh0Iè1Œ­,Q˜Óm5-À“uI,^`Á¥6®)^‚zÒ˜Ìf’8ð¼TonKnÚšmÃOQIŽôIž~´t£­-(ǵ¥fÛíÔÚ¬Š C:oŒ¨î+ÒÙ­oÉÇÊÆ·DƒnEE#e #µQ²&l޵¤CK±§]E#Ä…AÀëWàqö|z £o5ã>* á¿PˆžÕcP·óQíS¬1´*¤”Åb©hÿ4²nÉïZ³œV`…È=Aª+yw² Ýë«^iÝh=*´Œ¤í=ëkŽëÌD“Ö¬_®Ý=äâªèÛ<Õ»èßÏGçnjÔ¤5±Ç\Ve”2*È[84Í.7Rîæ·|ˆâ‹å\V¡U|¥;\ŒÈ±„á³Ú‹˜Ýt’¯–8§éYM4ƒéQéxk™9ïPê–— / J4Y¦{fR8êk¤YÔ6܌ԹÍûQÛ¥%/áGJLäÒŠ^ !ÆzRšŽ^’?º*NÝ©™âî)¹É¥ì /z23N\PìÆE ç¥.p8¦ö¦dƒJQi@¸£–Žü ÒduÍHN{ІgdíÅJ²ȧÔm!Š”6G™ÅÀ¦¤ªÄàô§n¤ žp)xPÓ ƒŠp#­¥âŠ:LàûT !.GZŸ8ô…¥éI檜´ ŒQ .Aô¦—Pq‘@pN)O+)½‚iIÏ'ŠMØ4¹ÔÆ‘Tàâœ0E--'z3Î8¥àšO“ŒÁA4Šá×±£rƒ‚@¥Ü¹ê)㥠4 F™1R1è,:æ‚;)H¢€sIÆsM’P‚£ŠrìF*~¢£_¾zSeÿVßJX?Õ ’“¹¢ŽâŠ;P:RŠJ*¯õuÏÇÿ¦µ›ýX©¡éUýyªÃþ>¿¹sþ ý*+Oõ4°ÿÇÅTÕ»}* _ºµÑAþ¦„ûƤo»TcÿƒW$ÿVj’uj±m÷ªÝ%2O¹U¤‹¥S¿éW´ÿõ?…YR£7úÁOîš‘¿ÕÕ4ÿ[PÜ®_­hËô¨£û•-¿F¬ùÿãé>µyÿÕ zÒÍÿïU4ïõõ~ïýI¬ØÿÔ7ÐÖ^›ÿíõ®º?º)ã­'cTäÿ[GaPjñîÕŸ¤}ö­‹¸*?à¡Ôš£§ÿÇãýkjOº~•ƒü„ÍMsÿÔ×ßñæßJ†Ïþ<Òªi?ñ÷'Öµ[£Uÿ¡W?åõ+LPiëÐÓ(£µ—µ*ô¤ïKPÏ÷ ,pS3øM<}Ê`éJ;S¿ŠƒÖœ:­FßëªE ô4»UÇúÊ•©{QBÒÒ„Ó“ïRGwþ¤Ô1ýÑW“ ¨_þ>jeëA¡ÿÕÕ;o¿'Ö® zô¤=h*¥ÇúÕ«+÷E-¢ƒÖšÿtÕ[õƧ›­0ô7j©7úõ«cîþõ§§J…þýÿ­©Ÿ ¨£ëS·Ý¨ÖœýFÝ=: «y÷×ëVbûƒéR§JJiéH:ÓÇZ=i* Ÿõmô¨¬þá¦\}áõ©Wï ·ü4ÁÐSÍ@¿ëiÒõ¦ÿ J”êu7½6Úª\t¦Û¬5{µ1~ù¯ÿÙleptonica-1.70/prog/recogsort.c0000664000175000017500000001016712266633410014641 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * recogsort.c */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { char *boxatxt; l_int32 i; BOX *box, *box1, *box2; BOXA *boxa, *boxa1, *boxa2, *boxa3; BOXAA *baa, *baa1; NUMAA *naa1; PIX *pixdb, *pix, *pix1, *pix2, *pix3, *pix4; PIXA *pixa1, *pixa2, *pixa3, *pixat; L_RECOG *recog; L_RECOGA *recoga; SARRAY *sa1; PROCNAME("recogsort"); /* ----- Example identifying samples using training data ----- */ #if 1 /* Read the training data */ pixat = pixaRead("recog/sets/train06.pa"); recog = recogCreateFromPixa(pixat, 0, 0, L_USE_ALL, 128, 1, "fonts"); recoga = recogaCreateFromRecog(recog); pixaDestroy(&pixat); /* Read the data from all samples */ pix1 = pixRead("recog/sets/samples06.png"); boxatxt = pixGetText(pix1); boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt)); pixa1 = pixaCreateFromBoxa(pix1, boxa1, NULL); pixDestroy(&pix1); /* destroys boxa1 */ /* Identify components in the sample data */ pixa2 = pixaCreate(0); pixa3 = pixaCreate(0); for (i = 0; i < 9; i++) { /* if (i != 4) continue; */ /* dots form separate boxa */ /* if (i != 8) continue; */ /* broken 2 in '24' */ pix1 = pixaGetPix(pixa1, i, L_CLONE); /* Show the 2d box data in the sample */ boxa2 = pixConnComp(pix1, NULL, 8); baa = boxaSort2d(boxa2, NULL, 6, 6, 5); pix2 = boxaaDisplay(baa, 3, 1, 0xff000000, 0x00ff0000, 0, 0); pixaAddPix(pixa3, pix2, L_INSERT); boxaaDestroy(&baa); boxaDestroy(&boxa2); /* Get the numbers in the sample */ recogaIdentifyMultiple(recoga, pix1, 0, 5, 3, &boxa3, NULL, &pixdb, 0); sa1 = recogaExtractNumbers(recoga, boxa3, 0.7, -1, &baa1, &naa1); sarrayWriteStream(stderr, sa1); boxaaWriteStream(stderr, baa1); numaaWriteStream(stderr, naa1); pixaAddPix(pixa2, pixdb, L_INSERT); /* pixaWrite("/tmp/pixa.pa", pixa2); */ pixDestroy(&pix1); boxaDestroy(&boxa3); boxaaDestroy(&baa1); numaaDestroy(&naa1); sarrayDestroy(&sa1); } pix3 = pixaDisplayLinearly(pixa2, L_VERT, 1.0, 0, 20, 1, NULL); pixWrite("/tmp/pix3.png", pix3, IFF_PNG); pix4 = pixaDisplayTiledInRows(pixa3, 32, 1500, 1.0, 0, 20, 2); pixDisplay(pix4, 500, 0); pixWrite("/tmp/pix4.png", pix4, IFF_PNG); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); pixaDestroy(&pixa1); boxaDestroy(&boxa1); recogaDestroy(&recoga); #endif return 0; } leptonica-1.70/prog/weasel4.5g.png0000444000175000017500000000152410400443670015036 0ustar dandan‰PNG  IHDRRI\lðPLTE???¿¿¿ÿÿÿw7AÖ pHYsb&2ëIDATxœÖv PÀ  €à,ôN¸ÿ™hKC±:ÞÞ|Ûû&­ÈÿâÿÒé/Ãlòƾ–RŠÃpMÎqNyù‰yž?ÈÃt–¨A\›œßË5=hY¿€]<‰™«Ph}Œq=•5èÄA§>ÇÔˆ”ݤÏ3c ªŠœèw3͇€ušÑzô¾IZ#ŒÓ•¤–%ä%2¹Ç¤ÄsI>-„,³´W.kIraG9°¬†Eú7ro0Á#ŽòP m´Âmx#ãž÷!â ÷.³ŠÉ1&ë`Ë`_û!dPaŸ&m&—‰ÃºÛåø€P…öræ§'äô²öÀeI‚ÁàÔº¤¼Cxj‚`jI¦•Ä+ŠÈ Än¸K'ÃÛ~J^ÑžÛô}PÐ<&‡Øìòa¹Ü‚ÒŽ)™|¿–=8*‰ËTî;ÔÔ–;؃ËnßS ÛBô!Ã[¹n"³1½f§#i]”*­ñMÔKöuzè?Êš]¢kg× µÏã(ë%¤—¢œ°7»I?ÈÅ”ßÔÃ/E p’}2Û –õrâKv C“µb]‰72ÕŠÖšÍT¥9“Ñ Ðµx…Ý€ä²ö‡ÖÒøP$è7¸ÇŒ­A©£|‘a=—¡Ìzæ÷gwˆIR¼P!­oÎüVLb+šúÜK~ŠÑ.W£F0e<‘AÂÚÕ…®¢î q·'Yõ‰’,y–½“öþõq–\ÍÏdìe¹è.B-ˆÉRv­Q9,Ïe˜¤¤Wz;Áí9uSJÔ-ÞéíÝJ-øC÷,;ÌO!.ù»D™Ÿë"}–Ôù¡áÞžHj³Ÿ ŽMS¿—! ½gÚ¢=µ$½ˆ“4òƒ B.}.óKé]¦ËQNÆ.ÝvÉ¿T“¿?GiÑ–‡)N·ü®-ç æAJ@Kÿý½eÐM¸ë„U]~Þ³vò§Ì0Ða¾Ž+OIÔTècNRõÜ%bèºïo¿›Ìo^xû±½©æüMæ&ÿ9þ ýe¶p ×IEND®B`‚leptonica-1.70/prog/convolve_reg.c0000640000175000017500000002011712240303231015273 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convolve_reg.c * * Tests a number of convolution functions. */ #include "allheaders.h" static const char *kel1str = " 20 50 80 50 20 " " 50 100 140 100 50 " " 90 160 200 160 90 " " 50 100 140 100 50 " " 20 50 80 50 20 "; static const char *kel2str = " -20 -50 -80 -50 -20 " " -50 50 80 50 -50 " " -90 90 200 90 -90 " " -50 50 80 50 -50 " " -20 -50 -80 -50 -20 "; static const char *kel3xstr = " -70 40 100 40 -70 "; static const char *kel3ystr = " 20 -70 40 100 40 -70 20 "; int main(int argc, char **argv) { l_int32 i, j, sizex, sizey, bias; FPIX *fpixv, *fpixrv; L_KERNEL *kel1, *kel2, *kel3x, *kel3y; PIX *pixs, *pixacc, *pixg, *pixt, *pixd; PIX *pixb, *pixm, *pixms, *pixrv, *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test pixBlockconvGray() on 8 bpp */ pixs = pixRead("test8.jpg"); pixacc = pixBlockconvAccum(pixs); pixd = pixBlockconvGray(pixs, pixacc, 3, 5); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixd, 100, 0, NULL, rp->display); pixDestroy(&pixacc); pixDestroy(&pixd); /* Test pixBlockconv() on 8 bpp */ pixd = pixBlockconv(pixs, 9, 8); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pixd, 200, 0, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixs); /* Test pixBlockrank() on 1 bpp */ pixs = pixRead("test1.png"); pixacc = pixBlockconvAccum(pixs); for (i = 0; i < 3; i++) { pixd = pixBlockrank(pixs, pixacc, 4, 4, 0.25 + 0.25 * i); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 - 4 */ pixDisplayWithTitle(pixd, 300 + 100 * i, 0, NULL, rp->display); pixDestroy(&pixd); } /* Test pixBlocksum() on 1 bpp */ pixd = pixBlocksum(pixs, pixacc, 16, 16); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 5 */ pixDisplayWithTitle(pixd, 700, 0, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixacc); pixDestroy(&pixs); /* Test pixCensusTransform() */ pixs = pixRead("test24.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 2, COLOR_GREEN); pixd = pixCensusTransform(pixg, 10, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixd, 800, 0, NULL, rp->display); pixDestroy(&pixd); /* Test generic convolution with kel1 */ kel1 = kernelCreateFromString(5, 5, 2, 2, kel1str); pixd = pixConvolve(pixg, kel1, 8, 1); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 7 */ pixDisplayWithTitle(pixd, 100, 500, NULL, rp->display); pixDestroy(&pixd); /* Test convolution with flat rectangular kel */ kel2 = kernelCreate(11, 11); kernelSetOrigin(kel2, 5, 5); for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++) kernelSetElement(kel2, i, j, 1); } pixd = pixConvolve(pixg, kel2, 8, 1); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 8 */ pixDisplayWithTitle(pixd, 200, 500, NULL, rp->display); pixDestroy(&pixd); kernelDestroy(&kel1); kernelDestroy(&kel2); /* Test pixBlockconv() on 32 bpp */ pixt = pixScaleBySampling(pixs, 0.5, 0.5); pixd = pixBlockconv(pixt, 4, 6); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 9 */ pixDisplayWithTitle(pixd, 300, 500, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); /* Test bias convolution non-separable with kel2 */ pixs = pixRead("marge.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 2, COLOR_GREEN); kel2 = kernelCreateFromString(5, 5, 2, 2, kel2str); pixd = pixConvolveWithBias(pixg, kel2, NULL, TRUE, &bias); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 10 */ pixDisplayWithTitle(pixd, 400, 500, NULL, rp->display); fprintf(stderr, "bias = %d\n", bias); kernelDestroy(&kel2); pixDestroy(&pixd); /* Test bias convolution separable with kel3x and kel3y */ kel3x = kernelCreateFromString(1, 5, 0, 2, kel3xstr); kel3y = kernelCreateFromString(7, 1, 3, 0, kel3ystr); pixd = pixConvolveWithBias(pixg, kel3x, kel3y, TRUE, &bias); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 11 */ pixDisplayWithTitle(pixd, 500, 500, NULL, rp->display); fprintf(stderr, "bias = %d\n", bias); kernelDestroy(&kel3x); kernelDestroy(&kel3y); pixDestroy(&pixd); pixDestroy(&pixs); pixDestroy(&pixg); /* Test pixWindowedMean() and pixWindowedMeanSquare() on 8 bpp */ pixs = pixRead("feyn-fract2.tif"); pixg = pixConvertTo8(pixs, 0); sizex = 5; sizey = 20; pixb = pixAddBorderGeneral(pixg, sizex + 1, sizex + 1, sizey + 1, sizey + 1, 0); pixm = pixWindowedMean(pixb, sizex, sizey, 1, 1); pixms = pixWindowedMeanSquare(pixb, sizex, sizey, 1); regTestWritePixAndCheck(rp, pixm, IFF_JFIF_JPEG); /* 12 */ pixDisplayWithTitle(pixm, 100, 0, NULL, rp->display); pixDestroy(&pixs); pixDestroy(&pixb); /* Test pixWindowedVariance() on 8 bpp */ pixWindowedVariance(pixm, pixms, &fpixv, &fpixrv); pixrv = fpixConvertToPix(fpixrv, 8, L_CLIP_TO_ZERO, 1); regTestWritePixAndCheck(rp, pixrv, IFF_JFIF_JPEG); /* 13 */ pixDisplayWithTitle(pixrv, 100, 250, NULL, rp->display); pix1 = fpixDisplayMaxDynamicRange(fpixv); pix2 = fpixDisplayMaxDynamicRange(fpixrv); pixDisplayWithTitle(pix1, 100, 500, "Variance", rp->display); pixDisplayWithTitle(pix2, 100, 750, "RMS deviation", rp->display); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 14 */ regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 15 */ fpixDestroy(&fpixv); fpixDestroy(&fpixrv); pixDestroy(&pixm); pixDestroy(&pixms); pixDestroy(&pixrv); /* Test again all windowed functions with simpler interface */ pixWindowedStats(pixg, sizex, sizey, 0, NULL, NULL, &fpixv, &fpixrv); pix3 = fpixDisplayMaxDynamicRange(fpixv); pix4 = fpixDisplayMaxDynamicRange(fpixrv); regTestComparePix(rp, pix1, pix3); /* 16 */ regTestComparePix(rp, pix2, pix4); /* 17 */ pixDestroy(&pixg); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); fpixDestroy(&fpixv); fpixDestroy(&fpixrv); return regTestCleanup(rp); } leptonica-1.70/prog/juditharismax.jpg0000444000175000017500000044437411011761750016047 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ°@"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?î….i¢–‚…£ô~4œÐž( š3@ƒµ%4(éE€ ÑIJ(Í'|(ï@ƒ4‡¿J(£>”qEsëIžô PHh¢€½-'z(fŠ(QG4P!(¥Í%gµŠ  ½èh袊QE'Z0héEÍ’–‰A£ð£4(íE 3íEt ½À⓯j)QE%0“¥.i)QE QE€1Í'”½è 4”­(íI@Ð(úÒ”u¤9 4QšO€Òö¤ Ž(íA¤IœRæ’€šJnhM&)i3@4ÓºÓI `1š?J_Â-'z 0 RZ;S´R´w¤Ž´è£Ú€çGz( bý)3Eè÷£9<ÑGJ(´Q@n´¥QÎhæ@qGz>”P¯ZRM HÔoz;QEÔ‡¥/n) 19>÷Jh§Ç÷³@™r1Å+ž(N˜¤~)ˆ‡øªÌcЬ>õZN”Ä<ô¤úÐx¤Í!†F3FhíE0 J( AIKG4 J(æ“4QEsE”…¤£¿4PEP½ô¤Ï­-Y!Þ—ŒRRPiF)(Í)4”w¤ —4”Pš;QF{PRþ4”´ ZOj( AKIEQIJ>”Qš)(¢Š(âŠN´´™4j( Š)(Ni(¥Í%QÚ€ (¤ ƒGJ( Ò(éEP)3íKÐRc½´”´”P( Òö¤ ”sGjC (¢Q@Ãñ¢ŠJ(¢’€ôQE%v£½ ÒQÚ€ÔQHh¢ŽôPIÅ Ò(¢ƒLéIGÒŠ@v£½‡š(4PE&h Š(¤ ¢Š(RPx¢SGæŽ)(QÅR QL“éE€zPy4'JÐ!;Ñ@ š'Z(ïA4À(¢“Þ íEÍ%¢ŠJ(ëIGã@¨üh 4†Š3Å'áER=i8¥¦õ ÑE%)8 bŒÑEÀ(£š(¤÷¥Ï4†€ ;ÑI@“ڊ( J( aEsÖj é( ‰Å.E'8éE‚ô¥4†€ŒRÑÚ€šJZJ(ïIÞ–‹Œ;æŠZ9õ¤úšZN´ _ÆŠ %! GJNÔ¾ôÀ(çvâŽÜÒQIK@CEè 9¤¢­ÑFh Ô~4Q@~(¢Ž´{ÑGRƒ҅éA4Ä7>´QI@áIÍ-!=è©bÔU4?z¨L¶½)²t§¯ÝÅG! Dk÷ªÊp*´|µZ^”q4”´Úc ÑE% \zÒf‚q@ ÍÑEQE™õ£4PÅ¢Œs@Ã4uïGCIÞ€ïE¢€5éi3EY"Ð}(ü(4žÔfŒqF;ÐQÒŠN”¤â“<Ñš:ÐE'Ò–€½èŠÒŒPhë@¥q@z( Ð}))GJJ(¢Š(íEÔ”v¢Š¨êh4”QE¨ö¢z^zR{ÑíE-%Ðh¤Å-%(£4R¤¥=)(i(£Š`QH)´RQ@µP(¢Š(¢Š(2qE-'ZRRÐQJM% N©M! ›KIšCÒZLw ’–ýi€}h£éHsHŠ(ņŠ)€u4QIH½Š(  RÒ´QG½¨:ÑÞ–Š? )=¨ï@'9¥ïIÍ 3E˜¢”ý)}) %-èƒÓ¥!ëJ¹ÆiZ`&h¥”~´QÞŽÔÆQE JZLš8Í%…) B”RŽ)=èQíEè(÷ ÒPER '´é€RRÒ@-”´d ;RPh ÑÖŠ)3KHh=é)Æ“µ&hÏ4½)(4QņQøQ@ Hi~´u 4‡ŠSIÖ€ J_ŠN””A¤Qš\QŠc J)i”PhéÚ€ ´zÒÑíGµ'µ-zRPÑøRRÐ1(£š)~~Q@QÅ ) i)sE%(¤¥¤@£8£½8t¤lzS‡Ja¦ ¤4QšLÑGz)ˆ*Äš¯V`!2ÈàTRš—µC%4D9«C§J­Y(QA¢˜i )ëI@ÃÚŠNô´´†Žôg41E¢ š(Æ(¦A£¤ aÞŠ(4c½GãE5ÀÏj\qH)jÄQøÒv ëIÞŽ‚Š9 Š;ÒPšJ)h(8 ÒPG^”´†€’”Ñ@ Æ(¢–€Ž´RPKÚ“µw£éE´Qô¤ QÒŠ(£ñ¤ QíKÞƒ@  ô¢—”qE…Š( ’–’€RÑFh¢“­RÒRš@%1@”´t Å¨ëGzsEw¢Š)(4f€ ÑE˜¢–’€4Rö¤9ô bz)O4”CÒÂz(RRÒt ŽôJ;óER(¢ŠZJ3I@QïLÒž””€JZ( ¢—µœQœQE”´žôsA£ñ£4€;dÒ´¼ÒPhíA£Ú€$^”Ó×¥8t¦÷¦GZ1IÞ€¸(æŠ:RQøQŠ3@‚’—œûÒPh¢ŠJ9ÅP0Å(&Š'z:ÑEµQ@h£ð¤¤h£©ëGzJZ( Š(ïÒ€ŠZO€ CJ:ÑÚ íE“4QíŠ_ÆŽ((£t ¥¢ƒ@ ŠJZ(”©i;sHŒQøÐG½0hïKÚÒ£š(¦1)sF)9¤ñÒ’— ÍbŒQøÑÒ˜QHaøÒRý)(Qš(üh£ŒÑE´QE 1F(ÇzCù¢E0 (üh¤Eéiˆ^‚õ§sŠaë@=)1KøÑô Òý)i€MZ€qU‡^•n”ÉJ‚Nµ;tªîy¦âëVGJ¯OÚ ëIõ¢ŽÔÀ 'JSE ’–Š`%´” ;Ñ“š(¤¥4žÔbŠ;Ñ@h¥¢‰Gz3E5ò1KIÚ—­X‚’—PPh£½Z(<ÑÛ4QIK@ EPu¥Çz3GÖ€ RKIÎhÆhQ@Q@ ÚŽø Qï@J è Ú’ŒæŽø ŒQõ¢€ J)h¤9ïKHh)hÍ™=¨¥éI@(¤¥¤ ŒEsŠ(@%/jJZ)9¥¤ ½!Í-”w¢Š(¢Š(¢ŠJ)h4”QK@ IKI@Ä4sKÍ'á@¦Ó©(:ÑGz1@ô¤¢”ô “µ€J:QÞŠJZ;ÒPíIKš;ЊJ^ý)(ÅRPGÒƒFhç4˜¥¤ï@µ¢Š­}M>ÔQš:š†–šB Z(  @ùi”ïá¦Ði(£½0G=è¢ÀÑš( AIŠ( ‚Nh¢€ƒKI@¤§C@Ä>Ôw ÒPEŸZ RJ@%-èÍ QŨü(RRôPŠNÔ´Pb“š^ÔP1§¥(qŠNè4f€ (£Š@QGzJ(¢€ûÒt¥ïIÍ ))i˜4†—4”ÆÞŠ(¤Ž)1KšÑ@£½¢Š(Ç­…fŒó@J(úÐ0íF(úÑ@‚’Š_­Š=è ŒzÑAö¤Ó¥-%€ (£ñ ½(ëIJ84qéL4óŠa¦QKIÆs@ Š?*^ôœP!GZ¹Ž*¢c5v!ÅP‡µVo½Ò¬?J®OÍB”´œÐ( AIKEƒE! aEP £Š);Ð1i:šZJ))zÑŠ)){Ò(ïF( š(üh¤v£Š1Gã@Ôv¤ –Š1@ IJi)¤)i(¢Š(¢Š:PRÑIL¤£ÞŠ@QŽh ¤¥¢€Š % (¤Å.i(ïE†Š>´v¤úÒö¤ 4bŠCÖ‹IÍ-PcŠ=èÍ ïF(†3EœQAÇ­&i´QGá@ E-%0 CKÔÒPÒQE IKHh }ê)S“@‡·Je=¸)´ ÚƒKÅ% (¢€ 3Eí@%)¤¤A¢’˜h b€¸Pii &h£µ†%ëE€Š:Ñ@„÷¢Š8 &ƒEè(£Úë@~4œPE&ii¿ ûR~4QLÒqJ~´žÔ€(£ëG=ø æ“ð Ñ@%-'z@”´”sšBh4Çpƒ­ZMãÖ¨Ïv#p—qª2gaéJã:™©¨^ò%ฮJ}NwnVK©|îÔ :ɵxc^MT> „pqï\³\ãíP³Œž¿§Z|G9Í4øžqƒ\{Ï“ÇÐÔmfÈsôÍ;!Z]ÎÞ/Z¹|sŽjâëvŒ¹®>µç„7 È©½íÖ†•ƒTz+k€àþ4ßíh³÷Çç^x×ޤýsMk‡<ùŒ ÷¥`»=5H›¤ƒó§ÿi lã^l—’«}öçÞ§MV`Ù"ŽP»G£¦¡ÿ:Ü#ôa^t5mرϭ[·Õ]_å—ðÍ-Gs¾ .}+–ƒ[uÀƒëŠÖ¶Õ"—‚ø4\.iûÑQ¬¨Ã‚)à‚)ŒSFhâŽh¢’–€ Ñš;ÑÒ€ p¦­8ë@€ñM§oj`ôRQï@'Ö–“Œâ2X‡5qxZ©æ®»L‘Ó&¢O½O“4Ô50e…éN¡zQÍëE­%íEPQGb€ ;óIøÑ@úQÖŽ?)=)sIš)?^ÔS÷¤¥ühúR3KGJ)­Ú–’–¬AE-%'áE/zJ(£ £é@¤£½/j'z(£·fÒŽ””´”wæŠ(¢Š’–Š%¨¢€ (¢€ J_­! ƒGP0¢ŠJ8c¹¤"A bQGj)˜ QšZJ8ô¢Š)ˆ%/j1Š@%R÷ bQIÍ-%-%QE褥&’€ ( ÐE~4QERfŠ( ÑGz@›N4”ŸZ(¢€ÑKÞ“­'^´:Qõ ¢–’€ CKE'j)i(?JCKGjNôQGµ”Ró@ IKGzCô¦Ó%Š(¦÷£­'zif“½ÅÀƒÒŠ@“¶( ÐJE6œy ¶1L4ö¦öÍÔJ)i( ( Ñ@>”QE„bO|ŠÅTÔcJ{ ä‚k6âFn„}j™»f‚?:gž\rh³FsžZ¤É*2Ù÷ª¬ÛW$Óã— ‚8¢Ã¹1RA¨rsëR¬—#Â4 #-†—­7h'ïVQFˆš’K#%qéOAÜ À“ŠiR¤*Ã!É#ò( Œ¿9šU(\ÉǽFc qЏñ˜SpäÖ¢ùIܼû aäThÝåõU•GU`*æÐuïUî!0>ôãÒ¤-ØôD¸Gµ jã­5 c\«äzÝ´Õb¸P€Ôªijc äT§p¸ê:Š)({Ó…4t§ CŠLRœRaQÉ¢˜Ä£ÛÒŠ;昉áëVñòæ«B*Éáh$…é#ëCÒÄ)ˆ²:PzP3Š(;Ðx¥¤ ÒR÷¤ aA£w  QEqGzLRûÒPšJ^ôw§pÔPi=¨ RÑøPÖ´‚—бw¢€¾hüh4PÞŠ=Íu¤¥¤§ŠJSëIÚ€ O¥)”3E…Þ€–ŠJ^ô”§Š((¢–€KA”¸£CE-% 1E ÒÑ@ EPi(¢h ÑÚ€ JZCHaEPA¢ŠJZLQ@QÍ’–Æ€Š( ƒÍPIE-Š  (¢ŽÔé )úÒ@/Ni8£ñAé@ EÒŠ”½)(QÆ=éQš( bQKõŸJ):t¥æŠBŠ1E0 NôQ@Àõ¤¥ Ò†“šSI@Ã¥ëIÅ-™¥íÖPHzÒâ’€ (¤ lQEä¦T‰@g¥6œÝi½¨@PhÏbŠCK@Q@†—½'=){ÒRÑ@½%PÖ“½S¤¾õ@é¸u«DÁ‘UUŒ`Ÿ”õZò#Ҫ̅tèj½øÎ3Å$ÖûXŽ™æ‚¹J‹™"àýE*œ®×ÏéJ€Ç&2{Rª‚Ç#¨õ¦eg„Äw¦zÔòIç@­Áe©âŒ´LÉõH!ŽF…Í ”o19çàÀÀñÐJqMŒ û­Á¤t°#•=hVKÜcÉ\úTª3ÓÿÖ*;rc‘”ôïSœ$¥Aϧғ †S‚OM^O˜†ŒàÕÇoƬ[??ížõ>`Ñ·k©$È#ŒšÑŠüdskM®¡”cÔT2I,?2gŽÔÊv‘N’rëR­q–ÚÃ$Jß´ÔÒ`2˜QN Jpj\ñšhÓyÅ:›ï@!õ¥úR~ÄÐ:ÑëšsLE¨GµX#ІÅJÙÅ “Ò¤‹=*&ëSELDÃÒŠ?(”Ræ’€ )>”t Š(ú)(üh ÑŠ( ÒRÒPEP‘ÒŠ1E¤¥4P°¥ïIKô­޽èüh £4væŠ;QE%-’–€õ£µQÚ”Q@Àš1ÍP ¢Ž¨ aIF1K@%-‚ƒëŠ;Q@€Px¢Žô”Ph `(&Š(RQE IJi)€QE€AKESv¤¥) ŠNÔQ@…M'j)i(£ŸJ(4R´Q@Q@Qí@%)¢€ Cô¥PRÒQíI€‡¥%)¤Æ(£¥PÇ¥% ý(¤?J;Ðh¤ óEŽô{ÐsE.)) J(ã®)x¦ ¤£½% (úR£Š)(ü)(4P†P(àÒÐ8¢ŠJ)M'éiJ(4QA 8§¥GR%ÒR“IœP$!£µ-'jÂŽ½(£4QIKô ¢—šJ.š)ïGÒ€“Š)i oz>´¦’œw¢€ 9¢’…!¥¤4:Ph¢ÒŽô 1íGj( ÒšLД¾ÔƒÐÒó@i)~´”t¢Ž( “½Jk0Q“C6+:òìF„dR¸ìWÔµ 6 q÷³½Ë±bvýjæ£rdr ¬æ`T9¥q0Ξˆ1½{Ô‰O#50Œ¯sž”Æ@¨3Œ`SÖÙ dwÅJc*rWR¦Â2­Í ¹—åœÁ©Gr1úÒ± Á¥C,¾Q]ÃÀ W-‰×kwïP Ä0GŠREù>•RG+&ÖãÓ>´Æ‰·+pçSFäǵôªDî‡ :ýjÄ BäàzÐÐÒ: ã·µ:)wü®sîjINåÆ85ˆ£dvýi\µèQåàŸ›µW‘œ qO.HŸ­ÈÛzuúR‰!+NGj–f.ŠAù‡Z•ÐÇûÕ)¥5Ð"‘J%)cÝótúRˆ¾Px«J§#‘Á÷D ½niÜ\ºQ°sÐõª·Pù^ãÒ®…ÎA=)óÛ)dކµ ª7ÀceäwÎ 3â#*ç– }i ‘Üv¢áËr´'wò9«Ciæ˜-ÌN®8µL± àŠÀœã5"&Ö=?È¢5Ëã=8©Ò<ð¤+GÊã×¥IŒŒíQ„ÚN¤`P+¦ƒžÚ£I$‡îsZRÅœžøæ¨´8ädЉh¿o¬IQ!ÏlÖÝ®­«†85É„ íô§.ôå;zÓ&Ö;…¸G<—9®BßQhØ'µ³mª#aY‡4\ jO ¤V ¹—4Ѓ8¥N´ÜûSsMËô©M‹¥+Ó sSEÒ <µXŒqLD(£¥Òf—­'J(¢Š'z_“𢅊>¢Š( ’Š(£¥©(´t¢ý(´”½i1@âŠN´áZ~”sšQÛ”´QIÚ€è”R´t @i:hÍ/Ö…袀Š9 Š( Š1A ¢ƒE (¤ bþ”´%QHŠ)8¦0æŠZ(”uéA¤Å!…ƒEv¢Š))h Ï4QF(¤¥ ÐIKIí@‘Š((÷¢Š(¢Š(ïÍ? J^ô”½¨£½% Ð(¤(£¯zLæƒEôSsëN4ß­/ZCéE)”žô¦ŠCñ¢Š)ˆBx£½¢…”P~”QG”QŸJ)) /µ!ô¦(>´R ^Ô8¢€óÅ%ŠNÔ™ö¥¤ Aš(ïÒŠ( zQÞ‡CNN”Ê•zPm8ÓMRÒPEù¢€ N”sF)‚Š(é@ £µ†€ ( Ðu¢A ëIKI@ 4Rv£ë@%/ãIí@X3GSEt¢Š(1@4P ¤ã4¥ ) -%˜õ¥?ZJ@Q×¥PRŠR@Zi‚®3I€ÉæÚ§&¹ÝFðry«×· !%±\µÄ,ǃŒÒ’4ÒiV#€?±¾ã¸ñ‘޵e#2GJE6^•6À š¶Y2 ÕYÐÉaô4Ä \|¤qU% 6@éD“lnëP›„' ;òE4ò“÷NtÍ!˜ÍÖ0=i&yˆØï‘P«À0ëÆqL¥Ù(똧–3œ‘ƒŒ’8· §ó©’ßkc-šF!·Ý’OµJŠŠžOLb¤ä7<Ô\µ„yÇiï•'éS~\NHÈ"‹–£b±C€ÀLR„Ö­|öÇÒ‘"ÚvžiÊ6Êlaœt¤H€ùO ²‘á­ "‹”¡2^*Î20}«FHw &ª4EA8$SˆÜwzõ¤|²àô"§|¸=¨Ä|v¡2yH@#ñ¢H÷F7—’åOE(xþT)Snø¹Ï§Hò¹ö§,`ejÄhq@r•cR öíV”\äqB¢ù„bž‘íê;æ8Œ’TŸ¥*d‚1œT‚0eéÞ˜ÆçŒƒL\¤¡÷.jˆªô"ŸœrQQ·+‚9Îh‰ ±yl¬>ër1MI6¶OñÒ§È1í#§5 ¢ŒsÖ™-Ñmù”TK+©ãÔPÞ’–“4 (ü(£4w¢ƒ×­'Ò€·JJZJ9Å%-žÔ¿…J( =qG´”qE¨4®(ïH)kA IEQEÐIKI@‚Š(õ µP:PIÍ.i(´”¼Ò{ÐEP £4¼ Nh{ÒQE 9£w ÒR÷¤Í'Ö–Ž”P ëAQšC CEÀ(4”´”E:QÞŠ@QI@Q@RPóE'z(¢Š1@%-%ŽsA¢€”w¢ŽhïE%- ÒQŠ9¦HA¥¢ IKHhè4´†€š(4P0¤¥>ô†y¢”RPA¢ŠCóA¢’–’˜ A¥4”sE¨÷ ¢ƒGJC­QB£µRPâ’Žô£éC))i(¢K@ EP95 ûµ~jQ÷h†ŽÔ´Þ(Ph Š3Í&h¢ŠC@ IÞŽ´}(iZ:QHƒE'J`QÞŠ@'ÒƒGáE%´”(ïIÞz(¢˜Â­Ph¢Š) H’ŽôPy¤üizÒ¥5Ž*¥Ä»Aæ¬Hp¹¬›Ù° KeEo.3‘XsɹóWn\¶EPe¯Z„Sì"Hªr0y©¼³/5ÁÎâ:w«°#0àp*‰%XÆ1úSÝÕS&Ÿ,GÇåU]H\g“M *Ïv8QÞ³Zà“‚ f®ÜFOSŠªmÆãŽiè\PF»ÆBóÞ­Cj =óL‚& 0¸çÖ¤H00*$ÍáСxm#ÇjHS#·:TŒDÇ5 LŒàÔ€bœzR±HE@*D]ÍŠk)ô©`R&™CÌ@ iLŠØS(cDj¸àÓ°;Ó³M °éA[*3š¥.Þ(ç§ÃJ¶{u§”šròxà1HV ’ WúÔ*€§ð«ØêŒ“zPMŠÆž•Êjè\´Æq@Ò(àŒZ#RÍÉ«F1éDqÎ(¬Ÿ!ÏqB=êimâš«…È ""¼iq9ÍHFFÅ ûÓ‘S“I·ÍO·ŒúÓR\t«:äòjçÔT2.h%¢«&:TZ2¯¥\àƒŒÔ-M¸˜w1[ŽÇ"²ã™à”¡û¹ã5Ñ\IJךȻµî8«‹èe8]]Ç pû¬9õ+¨Àʚ̶œÇ)…º7+è iÆr¡}ø¦Ñ€J`“sÍtú}챦Ks.¡Ô’9~•%ûYɲL˜Ï<ЙG¡ÛLC©ÊšÑB®GM¿Î?š3ÖºKiÃzU¢ tRf–˜ šAA¢‹P£Q@é( 4Qš:Ð(£éE™£¿tæ€EÖŠ9¢Š(£Ž‚Š(X SH)ÜV‚Ô¨íEfƒI@…¢ŠCÖ€ h úÒÐy£µ&hæŽôw úRQGÖ€ Qž8¢@NÔ†–ƒí@ E¢%/4S(¢¥”¼Ñ@Š);Ð ¢Š;ÐIKÇz) CEŒv¦Eæƒ@ GJZJB P1)h¤ Š(Í ( ½”v ŒfŠ(ÅQ@”PÒ(  ¤4¢“  GJ))QE”t¢Š)(ïEœÑEEè4CERRQGZ`ii;ÒP(ÍÆ4稣4ãô¦AäR¦Š3E (4PQõ¥¤ ½Q@X:Ò ÷¥¤ ŒÑIÒ€u©J~õHzPi)i;ÐEŠOz(¢€“¢ŒsH©;ÑÞ–€ŒQKÅ%%)¤ ò(ö fŽ””Z(=(1EP0¢Š @~´”sÒŠQEQGz(¤úÑAëH¢ŠJ #qK‘LsCµÃàÁ¾›“È­[Évƒ\õÃïr+6ZV)É!i=?y׊IˆŒf’''‚h@ZTœc=«N(J¦@㘲Q´dը瑣ôªéÎ$U ¥@8ašˆ$ï95Jp¡I­0³+K&ãƒBƒÀ'5ÜIÁ©PHª3øT³x"ä  Õ¸ã9ÍU€@ìkF5ÀâzÔQ!-’*Ã(ÅI¢ÔTóS"Tqr:Tê0¼Š /­?ÐÐ9éHE2g4qÚ›œ 8sEÇmDäõèt šTRNsH¤ƒm(ðiøõ£)СM)=è`i¥d8haÆ"”sUq8‘íî)§$àÔ»{SHÇjWD{E(Çjp÷›Fh*‘Í4 Sϵ4àP+ #Ú}ÚRry Ó\AÔr)Œ=éäÓiˆXr)ŒC ‘ð*3ÏJ. “iÈÍDÃ*jËò½*»z-\ªë’sT%‹;¹­Ixª²¦‘M36¬ŽzâÜܼr+BÊAs`>uö¥šìTir®¹Ú[žxÁ­“º±ÍR=QiЕÜnqÖ¨L®ÀŒãŠß–4à¯*Ã"³®¡ØÜt5(‹hI¤^´l¸'ŽOC]•µÊ( ŒJ7©û¦¼õCG&宓OœÍ ýá‚*Œ¥··˜K Ôüâ°´Éʇ†^5´ŽU"GQEÀ3A¢Š)?3Gá@fŠ;RR抔Q@ÅQŠ(¤¥ QÉïGãE05…;µ%-Y"v¢Š3ŠQÚŠ Òt£èÍ’Ž;Ð÷¢Š=¨(Åw ŒÑÞŠ(íGZ9 aIKIÞ€Ôw š=¨QE=é(ö¤E  Ó½é -%QE!))E!¦0¥¤ ÐG4v¢! Ñ@¨¢€Ô”´„PßQI@ GJJQ@ A£­P(f€ (¢€ NôQ@'zZLREPq@ IKIÚ€ (£žÔ†ŽôRPÒQA ÑE (?J(h>Ôgµ J(¢‚¥P1 ô¥! #ÖóÅ!Aõ£h  Œw½©ªÇv¥ÏzJQGjO˜£·QÚJ !¢€ÑK@ Eè q»¥HzS­<ôâ ¤¥Í% (¤ ¤íE€RLÍv¤æ•€_¥%¢€Š(4t£ëG¢€Ž)M%'ÒŒw£¥%/ÒŠ8íIÛQE†æŠ(÷¦ úÒ)i(üi^)M!俇=©=óKÒ’„>Õ Îõ©‰À¬ëÉ‚)æ“e"…ôœkâ`­ŒÓõ ³¸àšÊk†iÁ<úTXdÒY°‹Ç©§Eo/ Xæž’6[<[ÉtªÌ0á2zÓ™ˆ§ÄŽÃ xõ§J©Éo­ EcÏZ§ ,0sÇ­Y¸™CAªþhvÈ^½šD‰ŽÕe ÈÏÐõ©‘ ŒŸ­KfÑD±GŒO5£Êc85N,ddUèÔi3T> Gzœ&y¨ÔsÒ§\ÔØ°y©wqŠbõ§š W½(<Ò¦€{„Û†¥Æ:Rã4cŠE¡6äæœ¾”ÐOãR/šcç<Ó 9ÅKÔ›)ÅPÁ¥Ú3M«SÏ4€B´cž)psJ£šbFi¸É©Hâ£hÜWÖ^ù©1Æi¤ÖÈñëM)O*sœPN:SCh°)G"‘¾jr©‚FãšÃŠ”Šcƒ@"»“Q°Ç9©ÙN*RGØ*MWu'Šœ©dˆ@Èô¡®S·åUäSކ­@¨dS!£>D"©L„®ÓQZŽœ‘U%N:sT™“BZÌY±„séZDÆqê^™ ½j„ #dtéZÌXÃŽ:U;È3#± ÊÅ­äÁr·^™®”·jéô5ÄÛJVDqœƒé]´Õ‘È]Lš6P†_–6çnzTq0àf¤à?Ö¬‚J(éIš-%´ 9ìi?ZCô QG¾( Š=é;P ZJS@ õ¥Å%-&hRШëN bŒúV‚ ;QGÖ€IJij:QÉ£Ú…ÖŽ”ph”v ÑÅ”½( ÷¢–“½h¥£­'j(4PGlÑA Š;Q@ÀÒPh?J))F)8 AKG4ŸZ;ÑÒŠ(‡ÚŽii)(ÍP0çÖŠ(Í’Š(ïEv “éKI@¤¥¢€Š(ï@bŒ (¤Å)´”£š(1Gj3M$çêJLã­("€’—"›¸tÍúRs@eéš\ƒÈ #µ'ZR)3Ú€ÔŸ…- B)>”¤úSp}h[îÐ=i­Óî!i ¦—¥7pÏ<Óìäâ†pƒ$Qæ(\䯠˜‰07qJâ½¥“xÆÐiÛ‡¥H˪)ìLcnßjCe~ñ¶)pÊ0"R=iÛA9<šB$b€'Gà®|u£‚ß(ãÞ«8d9*>P‚y¤‚\¤R–=ª!Ç?= cÇjhøÊ©9zSÜ“…UÆZlj nâ¥K&˜2¶ìnãÚ“•êr)îAn´Þ( ûÒÒjP{PIJG­&)vÍQL'Zsu¦¥9¨´ŸJSH}( š(‥RúÑE…%´” w£´¦“ë@ ¥¤ ïIE€–Š(¢Ž”R)9&–Š`!˜§RŠc ¡u>æ­ÌøSX·²ðyÅC)"ÔÅ›­eÜ>þ„³3Ðæ«ìÜ++ÝšÛB³c?•Jåœ!U9'šlòùåÇ­Çœ•À¥UX×qÅE Å1_¥I2z…= RìI.wc ô§J»Ž â­È¢8@zUV' ­ ¤îÆ…SÂàz©ÛÒ’A±H& Õ±ÜÛA«1.F ?Z¯9õ«ÖñŽæ‘´^…˜º`U•^j8ÐdVÀ&ˆM˜Å8g¥/hïÅR4Wœæ¥Pi£éO Ò‘CÁ§‚j,çœTªFØ•N{Ó¶ƒÀ¦€§;Ò 4Чq<â‘NÍC\qQíS’*&ëH¤0dMIÒ•T¢Œ б3ëJÅ#JhÍ2l)¦ŒÍ œR€x¤ K»š2zPRŽi„œ‘š“ŒsL Ew#枸Ç9¤ÁÝÅò¦&‡pj[o8§äŠŽ@XR‡¡ ¹¡©±œ/"•¹äÕ!1‡¡«±Á©Ù±Ö«ÉËR†6J„ŒœT§¦E4‘ŒR¢!p* ;Õ†R[¥1€óôª2Ü¡$`ƒTÂí›=‡jÒ”xÍS•0s´ÓLM\³ ˜`¹àŽA«'ÊòçڲʸAïùVêíuPØÈô«9d¬aE$åH?zº 9Ël^xâ³u–+¥p88'¬éç?\Ó3‘ÔÂØt÷«DëYö®ZLá«Ã—U#2aÒŠJ±L£½"œö¥ ‚h PE˜ 4u ûP(4}(¢€ ;ã 9 æ’Š;P¸â–’—ZQî(È ÒQE”´Põ¢Ñ@ IžÔ¹¤Ív£µPœQÚ–’€ŠO­â€ÆŠ(úP0¢Š3@”Q@€ñGz: (t¤¥ö¤>”w¢Š(¢Š)”t£4 (¢ŽÔRRÑ@ EhqÍ%…QKFh3Î)9¥Í!"€Ȥ4¼S@9ë@ ÒgdR£ÚšÎ^) ƒ<`IŠOz9¤Éîi\ {ÒƒšŒœJAƒŸ­)$ò*6p8=i …8¨d`Fs“I±Šò¶x5pGSJ!wqšrZF -ô¤¤«ØÔ‚@:œŒÀ#Á~ýª¼®¾f?Nô]‚4‚:ÒqŒæ©á€$SÄ ðN)Ü C£8Ôuny¥È Ùö¢àJ1œ’(.*2ã¥Bóc<Š›p-’x¤’U黪›…e°'­A½‰å4®‡•Ž$÷§11¨P~næ«DåXy÷©ËØcÖ¦ã#Ø>ô‡>æ“yÏHÍ»;ŽBô¨’ f`qÓ9 -}¦xÏOm4èfãÍ8'¯5A”ù›³ÀéR…û¤©¡0ÒÆÂÄhßwÒª›´Œ~óŠ®xäÚF÷éR‘âM¯ž"‹…»i£uÒÉ÷0¯=ê!l¯žÅVùT½ôõ¨äpì’Xô4®ÊÇi‘'ŠƒÞ¡ Üu÷©U‹±fÆAëL „»XF:Tò85 L ¹û¸ÏSž0á×Úªâ%Ç94u¨¼ÁÜœûSƒzœSùÇZR}*2sÁ Ò†ÏJ;ÚŒã­Q@ý!¥&’€h¢ŠzPÝ(N”M%!´¨¤¥Í%QGz(¢“½ âŠ?(÷¢éš !¢Š(éE!¢€ÔRf’€ÑÍ'µ)ë@Ä¢–’‚ŒQ@Í0­P(Rg4¼f“94„Ö4ìÓü´ î[ A¬·Ëc5±vÙ°îs¼úÔH¸”Ÿ­)¨$óK€$ÕvpOò¬“ÔÕcÕ¿Êi¾Ów†o”qz¿{˜­N9ãšÄ¶%®*÷æ¶Š1oShÆL@(?AZ6Æ2 =©Ä!Ÿ½V£b@Г\ºlÚCnæö«å7/"«²…|R*#¸¨d»{U‡äTd‚§¤Ñ \ 5r=ERÎù#ô­ð f‘´K*Äf¦¡A“SRo­'°§èzÒ çÖ™¢`“Ïjx£fM8/8 ¡ÁG¥K·Ž”Ä\`žµ&NhŠ9Í?9¢ŽüRÇKH çšqÀ ç¤ÆM<•¦î(ÞGAHIÍ8ã­7¯8 .'ŠNqŠ £4\BçŽi‡§i‡9¤KŸ¦±$‹œP4XÏÒqQ†4n>”ÀyàqLÏ­!r{SI ÐöóÅ ñÍŽ(°ÈÛ¯‡8¡‰&“#ЄôZ­ƒœžO“éQºdqNÀ™ 7™›­JÙ#šnÜŽ”˜…GéUäR:w©Ý¶¯éQÉùZ ±J@wäTN¹\â¬È1ÈíUä`sB&HÏ—>z°ä VÙ•BDßÞb±ÙIn˜©…ÁzV©œõföQ.ÐyÛÇÒ®i{Kr}ñXìÅæptâ´4ìŒóŠ£žZ=Ë3cм —ÍP²`"ÁïW‘ÀɦfJÍŠE¹5åÛ58¦ŒQGJ(ÍŠ RRÐQEQGÖŽÔ}iLÑ@Ê:ÑŧZkzZAKøV„…{Ñ@Ò’— ¤ ƒIKÚ€ÒÒ(¥¤£<ÐIE¹Ç4”QøPGÖŽÔv š(¢€ qEŸJ(£¥  4QÞ“>´´žô´hQKÅ'áH¤üih4ÀJ(¢€ýh¢’ EPö¢ŽÔ”QKIÚ€ŠJ &}èx¤8¦Ozk6Ñ’häÎi¤óɨrO*31ÎK @[žOJG‘PdÔf` Z Ü {Ð1 ™##­;e@Í0…Û’rÔÑ3(ßš~ü·M¬)‰ÉÆj¬×.ŽO—׊Š'’]þ`T§½!@)¨Iq$gpuzóŠÝÒ0[ïš.1’LÌÛ6­$l7ðsŽ0i1Žü1çšt †6mã#õ¥p.®J‚Ø‚•§)÷j¶w®ZAéÖ¡f}ø z˜Î üÇši‘܃ŸSH±äžinŸìѪ <ç=A=Ó+mïŒñU$y\aR{žju@Êìzã$š`Pªš@VÛ{[Ã)ÁÀÈëSǨ9EIGÍ׎Õ$®e\œç¥F–ıÌ`úšC%y %ÁÝÒ¢´€Œ¶ Z‚Þ-àÈ»ˆà(è*gaà¨1Ú6 5Â×»2ñߥY½™bP e…Eb­…OâãŸJCGi#WûÎy©Ø4F£-Ò¦Kf{€Áv¨È¦‚^(Ï$þTX6”Ï5¸ø2I§eYd .æ«à ÃoHÃúP!‘©fÚÊ=jl° Í®W Î*X¡2–m£½*åc¾Vm§qSÞ—ÈØÀ»õÅhÈ"RzUöÉ’91;Jž P!ÓJ?,±ùzÚ©<ñĪA»»Ô­ ò  Ëœ “ÍB–Í•”9àú{R$†`N«¤0?.jŸØ¶î‘döÍXˆ˜†oNℵ8%ºÓ’O—kgµb@a ¸`}ú}iÆÔ<.ÉéÉRjŠÊvž^•/œYvÓÚ¡ Œ¥vsœñÚ•J€?1yk’yÒž?1HîPAÇ®:R “µJFE8Ô ,ÀÖ¤;ƒ@‰1IïFCw ÓRQEH¼ ÒUÆ);ÐQÞƒA 4Rõ¤¤sE-% À;ÒRÒgš@-&{Òþ™ôœRæŠJ;QGjLÑô Ò´RÒ (t¢—ñ¤ Bu¥æŠNô´v£Ú@ IKM&5 ·jsµ@ïŠŠ× ÖE‚I&µ'|­e\zVr-’¬Ã5 œúT³G»‘Ú’%ÄmÀ¬º›t!ºhšu÷®)*«Nž@±…^ãž+ddÉšBÍÆ*{r}j­°ÁŽ=êÔg2dt¦‰.ÿË2jŸ-#Ö´D`ǃTed`=i2¢FT»`v¡“jàŠ|@0N)eR3ÅC-ãQæät«ê§ÐsU!R$æ´B‚ ƒLÚ"Ä8Ïz˜{ÔqŒt©y©7ˆà¹ô§ª…â“sJ§'“L´.Ð9õ¤Væœ9<ŠMé2“$ š‘HïPªœñOa·½qÌÀRƒÍ4E4)$Ð%¹0zqéLE§ކ'Þ€5€4 RcC¸ÛÖ“Mcô¦džô_A$Lç¥4}i9€$ÒAâ“é #šDÓ1ÅÒfÄpïK‘M"˜I!²JiëÍ41&“qÏ4Á!ä€3HzJiÈ nGZanÔCLf ,? æ¸i¥TnN3ÒİÇJ<ÓTüÕ>^”–¡- Ò¯ËUÁ?w9«rCŠ®~FÎ2)4FBóÓL§ËJÒ™ÕãÀ\TØ sÖ™“¿R›‘·žµ[sVfROOn• ¿t?´Ì殆Äÿ¾8þU±§¨#$Ö$,Áñž¦ºKƒÂ01VŽY£R'P *Ti ªùOZ† ,Ƶ"‰*Œ¬J„*ð)Á³Ö‘qNÀ ëE%Ľ)3Fhq@ÅPGáE&hh£¥v¢Š)€~QGZC5Áâ—9¦Ò޵¡Ð(÷¢€Ž´ JZNô´{PQAPqE/J((íEQÚŒÑ@Px Ž):ÒÐIŠZ9 Íw¢‰KE%QŠZ&1Fh£¥%QÅ (Î(ë@&8¥¢!£Š>””t¥¢€CI¤ÉÓFÌdšRب̩Ÿ½úÖ}ÍÉ‘ð§jç·z­#Æ"ùŸ<ö©¸>pìEBêd;‰5‘–mÂVR9\*u¾’5Û!ÝïŠ.4‹¥H?Æ º¾E‰nÒUõ¥/¾í™~àP -!bQ¤ÆT` W¸(Ü.~•Î¥‰Èô© ŒãŠ`9$%AÆ)Aý)‰¤7ÞͱHNÝBîåžãÈNp2h‹ÍhòÀqÆ)"ˆ‰DíÕÁ'µ9X4…U‹zã¥HвGˆ—'Øg½LJˆò]²j‹]ʃG\ç¥Hãzã%¸àÐÙXaX{ša‰£Ë+‚3Ÿ–¡‘\ ‚xíLVÃåHGë‘H šuÛ¸Úx”¡ ®$ùó´´ÆI&ââ)ˆÅøµÏ´òÀô\,[2¥‰Ç=* pǯÝÆQ8ÏcI&㌟ÈSÅÚÌ0 lçÛñ«jgan=ªáòÁ]à“É5±‘ŽõbO­!—²Wî9â˜ûÁÈ9÷5 v—‰Ìkœ°#¨«‘¯É÷-ÔzQ`3ïíüû‰$]ÅHsÎ*ݤÉgo6Åà sÖ¤6ËщÁì:Óü°B€‹žOsM05l£ÛníQž:Õ Ò¿nfQ–^vҬ͉?|yÇ~*¨”[‰$ »1Îiˆ¯¯,­Ëp4×X:¸ ØwÍ8ퟧ§Ø |Á œ‚zTŒ˜HI"ÿ½íH÷)Þ4Ÿg(€ÁÇáP´4˜Á#¶(¸Éƒ™0ÅAúÓ¥X\ï Î;ÔB&€üÇ ÷Š|ª6äp=él"'cÓ÷¹à{T #Êw¨JP ¶K}ÓϽ„l^ô†9cÜ™'kSÔ”Û†ÔˆHH éË$„ä¨ ¨ M:å#˜‰†GQ“Ú§¿_%üØI1¿zSËŽãÀ‘3¶ƒM #J à‘@úÐzñQ™“8'ô H¬x`hú;Ò£9õ/bÑ‹)`ǰ¸Ù†Í,ƒ'šb!Æ2Ç©·A’¡.~\ñNdÝ&Nkj$`=*µÄdé×Ò¶‹1e¨Ðº’Z¶„†¦[–êHëVãÀù©ØËJ¸58ÌÜU‡˜çŽ•rsCØq L‰HýjFRÊIëš ÇÏ­•:1eúS§®籤o¡2g8#8뚮͚NV„j‡$àŠJEÐAõ¦h˜ü2)ÉžôŠÀŒRœô‡qàƒÒ‘³šní¼b““ÖyÈéwÔÌ{P“Í+‚DÁ€ÓjpZk›\hh~phf=©J‚3IŠW)!¥¸æ€x¤Î /NÔ€u¥$bò=) æ‚GÈÁ¡‡lÒ#×4 ¡¬£ro,v¦hx¢Œ`÷§4†Ò%çj㊆I® 5#ê dgð¨C+ €KzT²I¶K{µP|ͼ7JCE¨¡yswR8©’v±ùÇ â›ÄFÞt  þ*‹í^`eVÀ=ÛƒLDí;'ßÁ=ñQ½ÉB6‚A=j,[Á,½IÆMÝG*… zŠWü¤EqÏ\â‰î,Ć9$vŸ™QÕ€ô€¡[iïR«éŒw­Uw æãiý*bZFCŽ[éL,O¼Xžy朲Æx$ñÍB¤ËÉs€)s!AçX@8?.9ª³Àd*ñ¹Nx«‚"‰¾WÂÝê).UIÅÆz“IÈ~7f“Ë*ÊC“R‹¥Û‡gœxòfÀŠLŸî‘ƒ@ 3%¹ó$$õ9¸BŸ('<€5Vd¼¹T•ô­8+kbËbrO4Ð2¹µrÁ}é6Ën¬Ü°ïÇ"®\^Èñm8g§JÍ7Í·Ìm­Ú†-K+#íÞƒ"ö†ÚÒ[Ç—ÄÖm˜ÜŒrzûVŠß$Ê]ƒ=JÑp·Q“^Ü»Šìì«vó,‰œgéY÷q¼,¸mñ?CSX°NIät¡1½ài¬©Ü9ö¦«]Àá¨9ç¨íTHØÛ9_J™px'¡$‚yÈžW+Ö€%#€Ò 1ïL¥¤¤$tÍ 1ÅšO΀P) ½©(ö ÒÒv¤ô\¢Á47½1dÈ43Á4®;§4æÀ5NiùÏ$Ò'f87jN^´ÜŒõ¤'Ò‹8ý)„€Ó‰â“>¢•‹‹'¡©1‘IÁ8¡‡lÐSbw£¾1Å"€y 8Å1¹éOniŒ1@Xi£ ö©I⛂G4XÀ¼Òƒž)NGJP2hHÜw4SØv¦²ž´Ãž´¤)§=)øùy {ž:Ó‘O‘sLƒÉ [ŒaqHàsޜ؎ô™Êà㊠ó¸gšVô¨ØÓ|ƒ¯µCÐ|­žÕZì˜,r‡Ü íÞ `YÏqL‡+²¢3”ö§0 çÖžÐ0}àS"‚[+ÌÕ°ÎqO”àt¨Cž¸¦…&LÇçR”Ýà†#» |ÕÅÂpykC–[‹¦MäÜ(àðEv6ì6Žk‡ˆr„ó5vŠª0–æ€ STšZ¢Gq@¤õ£4 Z);ÒÐEf€”Qô¤ë@ š( PIKš()i( fÀ9¥¤ óZ.x J^Ô”QGnh w ŒÐqE!ëEPEŠ9¢Œö£½ zÐu¥Í¤ ¤úÑÚŒÐ0£µw Ú“Û4RÒ†Š=é3LÍ%P0¢Š âh âŠ%-¨´„õ¤'6zÐ$€/U¤É?…,ò„޵•4Ò™9zÔ·aš©0v;Õ9¼ŒF8¦A&2ÃïE¼ŠcbÝN{w©¸(bÁÈ>Xå±Ö©O#³g =+H:¬d#nÝÀªïç.qÉÉ exÔÌÞX@$÷©ÖÖ/!É*3Ö«Ï4„°@;OPÜnÝ(¸ÍŒaFÑ×Òža’`?‹¥Wñ"©Ç=…>+–'c¨Á4ØßÉ}»ˆVäzR\$3p˜psÖ•ãçcÓÖ£ ’'mÃ/Šãæ/ä‚£ jz¡€Ã#¨>´Ô`Ñ•rÇïKy!ô%OÐnHä •{šTFxüÖ\`e½V ‰6ã y5§:˜­R>9Ž(’ÜX°Æ9¨¢VK´ÏðòA¨åÓ¸«=lYÀ&ËŸš\uŒR°- {¤*åðZGÀǵM4ʱ"€ìp£-Ô9¸O|’jÅŒ!.Öbp!€õ¡!ßBçÙDQÆÖ95‰s+G+¨Ëa±À«ú–¢n%a’·®+>yÄj6£4§ŠbL}«,ªb1¶,O½Fm¶AóHÌHÛN q E4£æÿ °¶kÄK†tSÆ(ì1ïÓx œŒƒTÌX|ƒÓ­iؼI,ªêH|…_J©,In®’äá1Èæ\­h²‰rð½CùU‹k)[Pˆ1Sœf ‹Ìi4|°˜‘Á9­‹{RÝÜž ÓnåŽEÁ]ªÝì;U!n`·.ÌÝ0:T²¬I!òÃåRjI¤–*€Iý(½¤R>$$ä}êÔŠIºúS‘ÜDF1ÜŠ ùØüÞ†—Pl`“ †L`ñïP¼Å€ØôÛÞ–i>ìžÇ¹|í^h@:îYc‰UXŒ6;UKvt¸P ð8«‡æNsMBV^zÐ A·ežrÊ£8À5lѧÌH'‚pjè Ç%zÑ%¨•€‰ø Þ€LKI<È@0=óȨçˆvuïÇJfƳ‘dS´gæ¾õ­öd¸·óã+žM0ËPB–=)—1lPÌS‚*Ë£Á9…—ÿ0=jI-Ú{&‰ˆ=óÒ€¹žP3Bõ[Ž-ÐJ­ À<íªÒ3G `dâ€cÜì¾3Ԏ§„Eh›Ø©…g5žä¦2ƒŽ½hºÁ!c'8 .$³ùòvÏ?(íIä–_˜‘ž˜¤ƒæ$ˆÈÉèE^UTŒŸA@S–|ƒü>•8µ(aŒr Xï}îqV ãq¤+•Ò4*sÏZœB<¦*ç#Ö§Ìcåxð}Æ¥ò’FÄ|=iƒ(<êêªà zUiÎBàVæ¶ÉbpAª`ä9Zå‡z ;½ÆE3ìË4_hŒ¹ÚÀt­)wýßUaÀ¥kµ³¹‰D@Æß+§¨õ÷ i‰nÆXÚq€Hö4ŠK36J|ö­à’6ÊÛAéUe,—Œzõ¥Ô{š‚6uÜŒ ã=iÑ  N¦‘¤Zlº²àSÕŽ*Ø`U…N3š,[hvsÞ—ŠdóšUsš, ‘–Lâž[šc6M9sH´.ÒÝéœóOúR€ cp}i¤v5*!¡ÐQbnE°”<)Ä3Ú¤Lã·Òer¸<óFÐ5; '¥&ÜcŠäeri„`sS¸ÇAQ¶qšH¤ÈˆšÃŽH@ÓƒE; ‘¶¢RœÓß â¢*sÖ‹{Hç­Fd§æ˜ÊŒÑaM@ì°¦•óÛõ¢ dž}iXÊs²Ðjnä 8§`ô÷™QX)žg98 Åk¹cÍ*Ûäv¨XŒ¶;UW‹m­Úª¤’sɦ0y0ü©¢0ËÅW‘!$õ§¡b=ø¦€|8í=ø©ž*`@·šªÊCÏ=:Ñ1#“È Õ£ n_·P÷ ß"ºåæ(ۜ㸸ä): àqžk´µ­”LÕ# n[¸ÁëOÜ*`jZ¢G \ hÎx¥”qGN)i1@i{ÑÅ%Qô¢ŠZO¥P1i)Oµ% ^:RfŠ,À¥¦ÒÖ„…/ãE'é@¤=h¥æ€Š € (¤ Š(÷ ¥gÖŽÔ)>”PÒRÑ@¤¥íI@Q@ýQ@„ü(¥¤ë@Š(4 &h¢…©i(f’–Ò¾Ô†¶*6r(Y€¨¤l.sQI SÉëU$¹¶“I€Ù~៥Sc‡ Ç=óCË…Ns×5œ£p€’:ž•R‘< à½MRÁTçqS­äØw dQEpdyÆP$»A‘ùÕWi¤Èˆãý¢iÍääòÇ=)ð¡Š\;£ŒbA$HÙXÙi¬l3ÜTÒË PÞ­@Ì]˜*œÚ˜Ð’ÌÈôõ ¼‚õh£ìÇ$TJ²`´€yc°g½Bç÷«1ÜW ´¬î»I܋х*©˜mL3+ zŠ`M:xQ†ÔhÃ!÷î*ÒY°²¹ùòTÕWe2|ä•£nò½º¹UYAqLFcC‹õºn•nå“¿pýßÕ¸ym™H8%H=jä§sœœf.;ŠnsBGfÂá•N+¥Ò‘`³3©fÉ'5…$[4È˵ºã­\3í`Ž1É$sŽÔ†[š0Ù›a*=)ÞR­’|³FxüêºÎˆ¢8ß$žõiäimpHR=¨Ð“*þÚd¸Ìqouèÿ 22S‰®f˾H ëZu +í9Ç«Iª¬E„Q«÷G§4Xh{D# 8UÎ:Ÿ­GÏ0î8\c”É& É$™ Ä ¨V Ü‘É=h©W9$ÁôÄùƒB¡!³Å$Yò@ÛówéM¼•Ö?*$u O$©1H¤!qÕ¸ëZ6hÇODîböªÐ2† "«H0Aö«Û¦ó“$mçÐcÛÖ2´¹Šàouè3Iu K1 Å@]‡®if °³ˆÙÚ>Ç5M®î~×#ù 18ÅF³®á8ÛŸ¥Rk‡k89Á÷©a›Í¼–2rÛKô à Å2à+€GûŠ@@áŽC“psO…”n;Nu×’™ÕÛÊ‘NaRG°I<{HäÍLe‰áÜ’6áÛRBKöüi±ÀS!Yv“1N¥Fn[öh:–L©C·i±•‰•1òg ç½=e2süUoÔ²21Ú„O)IË#9üêÞ•#›3€Y¶óéT§@=ºÕËÁ6Cõ³@t|GœP€W9_QL¶Øòm`1‚¬ DÓ!u§¶@ä€  F|Ñù:ˆ„8Œ¶p½Ò¤PHh¤<€1Sj0ºIÀ è} ЙæuÚNÑœ÷Å h†Ú3 K)#‚qPH Êç H«‚[Q úÕwd’LwîÚM ,ÀÀÎz¾Õ2G½ƒƒÝ=©ŒH‡b nÀÕòZH•~œÐ€¿5„ìtïPŠ>d¿TBê]ÀÆFAϦG’UÇÞÚ¨ZŒŽâE›÷²,±ciWW|° ˜WÓ¸¬éQÈGq“Ò¦ŽàE"aú¯#ñ¤‡VÞ@$psÜV\éÈSÉÈ$ð+IÜ4[”O#Ò«_¢&`p6‚:C3Q JT1e#pÏcTî†éÙ†zŸ¥\¶pŽKø8Ñoæá˜ ÑÅ!–¬PK§®r^/•‰î;TF8ÙX¸;ÃeHô©í ‡#8Úi#LÝÆG4ÀEni`¸`Ì4øWýåpHÁQîj(ÿpË#pG˜àr1ŽÆ¤g ò©àuªÐœî aIÍM´œÓ$˜2zt¢¢ÜßÃÈ´ðA”ÀRhÅŽ)(=zQEIÚ—µ& è÷¢ŠCEP}©?( µ£4Pf–’Œâ€z)sI@tŒÑHAÅ€)¬F( öä C_šf™!5r &4‰%˜ã"©Ë1§I.ƒU%˜Nj[)"å`j“˃Å>â䌌Ք–ïÏjͲÒD’ÌûrBç$n¨ÞF$J‰¥-"äŒ µ±-…ÅViKIŒ{ÒI.[héQg§­RÜŒ};š’59ÕY˜ùyÈ4ûg>O=éXhÓ„†#>†§!æªZÔõ|.þH©¹Ñ ªÅ["¤fæ£x𸭠L‘ÍMÍ-Ôk>sLyË|¢‘ОA¨·4d¹ÍæXŒ+8ÍM$j G5Y¦FPSÒq ðiX®bìR :S'>c={R¬9ëO ¹@4ö%»”3$¥›±Í:[DA¹ëžZeQÀ£fåÁÁÅÐÏ.ý;j|W®Ù_~:U²ŠœqH#B2hìX‚ð޵}.ÔsŠÎD@½‰§+Å)\ÕÉ=jRCVts²ôäU!a¸QÔµ-Iv€sNB·×š‹qÇ4n$Œ:šs°¢š@Š`V'9¡÷cŠ4Éü¹#ŠŽ[¡ ŠPA9Å Í92JF#wµ sœS[Þ˜IÈ¡ÏÒ/ÌG4˜ay¨˜àíR;áp*`4 1Ém¾´#Šc°Š|¼šØÖÅDAÝÍIŽ´¤§#¥æ±YÎÓšac8¥yg&«³ÈSÒ‚% y°Hâã÷æ•S'šURåæ—S !éQ, ’*}²HØ¥äýêl…IcH~|dAUepÀ±G¯N)©4ˆ6‡N‡µ;’îV9$nôÍ81GÁþté1"“åyÅBIRsŽM™j6ÝXã*´Ì0àž¼SÑŠõ8Í2y# lÕ£)n[µ&PûEÈ5ÜiìÒ&<•ÄiHf‘•k¨Ñ.J©·s‚½Q„À4 STœæŸTHt£¿…%`¥)(ü(h¤¤¡¼(4™ £ëGPÒŠ? ;К8”óK@ A£½èúÑA (¤æ”Ð(”´”sF)h  ÑÚ“´1E”w¥ ¢Š(? ih=(( t¢ÂŠ( ‘ÔÐ[š©5ÀÉ Í>I0Ù˜íò“ž5 )|ÍUä¯'ô˜ÜO€qɪlå°XäúSähÁË“‘ØRF±`‡héRÊ[ñÏ4«”ÉÀÅ#͹q°p(UrQ²G< íí»ù 2ª ç…òb}¬y²|¦–HÃ*œäô¦ÛåÍò±*1Û¡  rÛʲ+•<äT±K%¤°€HRxÍV¶½¹ŠB’/™=sÈ«—+ê*ÇÃ+dç¨4вJHîUƒ/ÓÞµ¤šÞkn!îÎ ŸCYòB¢FÜû€ÆÜŽOµMo•VB¸^ã¨3n±Oœ|«ÉAª· ¿<Ó3dž6ž‚®Lûw!$¸ãúÕ .@Ê1Ç‹Æ-ì³Î=jÁ“Ì(èìü¬j¦D 6²Éà¨ï@óÑÿvß»±Ö“ÊèæË ðyÍA4Ëß³éÓpùç&¬À…‹!~§€:}*òDbU,„¿CõfH0ðº¡Tœwâ’dG˜W¿@9cß4¦`·aÕ‡ËÁÒ…R–²Å"Àõ¦4Q–óT™y  ®àFÓ@”çqíY×VbEV 2zž$ctEH'3ЊII.Õ á‡Ú€*ìh5 {µll8qê [¶¶Ku§Î»U\¼Rz“Í>[wkB¯ÏÐñÁ.]Rà©óá\ƒ’DÛ;•yQX¿:UVÓ•Ôõ:.˜ç¿Z‘0dÈôÜ9§\O-ýÐ:úÒ³HÞ`}¤’3×q¤V„†ùx Õ(ܽâ„`ªÉëVÚÜ®]˜í$zÓie ÈàÖ¬E:YÊ?|?•f}¤FÀîž5níËX!ku;[!—ï~4ÆÍ1dq¸äzË(Ë~Ê2íåèjX„-§à>$ CsL¶”´Ó!Vó21Žâ“,ňÜyœ`g XÚ”wfYP³•=@«×Ò4ƒ‡;€ãñYñÏ,@–—*~\t¥°Ð°©L£d¡é‘Ò­ÚÎð„¯–G<ÔÏóm' ïÎ*ôj²BÊa×\ ?ºž]QؓҩܴDT ·b+!ETþ.SeµM±ñÇÞR(kbÛË-ô¢iØÛÊœÀíULйÇ8ÀéQIpÑ*¹¹ÀÖ€µÆÀÆ2ÿOÖ”Ç#ÃvÕÛ8À $Ÿ^õv['‚&R~j9zŽæ8—ld9­>2ºª–=*½Ë‹rñ1ùßgŠ|Mf†ýhÅíʹaã¶j¬Œ$òHç5Jisq¸¿Þ}ÃqïIy9c(w;œc4\,m[¹t*y c`<÷¬+MBEÁP@JÑ‚F•rrªß­;‰­K &ÁòséRÀÛб9¨†Ðp1Ò¬Ç)[?'–Ýš¡}) E%úS¢ïF­ J^ô†€ :)(i?( “ð¥£é@ š;ÑF( -v £§Z;Ra ½5ˆ4‘UÝȤ$UŽ:™ç5RF-Ú¥”¬U–FΩJäÕç‰j©4x ôíYÊå£:F$Ô=[$Õ‰#%¸™ä7\+;3TDÃ+ÅW‘iŸâõ«2yã èJœÖ±Ø‰hÌö?#dÞ¹¨‘Èq×ôéÁÕc(VÀ­ÐÐîUïRÂr@ª®Ç`æ¬Ø.öúúR*,Ö´éÇjÒQò‚>µBÙ0Ä~µ}G³gTv 3·¥F_ 1`Š®øÆGn£‡qÁA$“Ž)­˜0:SL€éSBäShE²ˆ¾Ï42 ¯Ö¬ÌǦ:Õe%[§´“¡àýêŸp#ŽÕPª“×­MÉŒcÚ‹uȤØäf• nµ+°çmW;•¸Æ=)Ø–;cdœäu¨š}¼Ô¦wQ÷=…BÃ9b‡¯îvâ…{1ÊBõÎzÔ©9€k>6]¸ Ò¤I0p:Ò°Ô‹éuÎ ZFÜ;~Ü“Žõ=½Î3š–T®iAMóX6ÓÖ£iCÀóJÇqWïI–™1ž1RÂIûÜUppÀ‘WR ‚(رÁæ¢f#•ÁüjF`Ù­WU*IöéEÊB™³ÁëH³lnE6P<¼Ž5ÎÀq@›-;ȨëÅFg ô H[=…&=ÙXàSP;Ó‘Æ„u5XÉ»èM2\‰Þø!éP¶¢Ì í?SQºd Ô2ªA'¸§c'2FbFwu¨W+&Týi– 8éRËÛq‚V¨žr@àO4y€÷æ«°qà:s@Ë&})X«Ü¹¼F¹QÏZ†[¢ÀŠˆoÕ òˆÆqJÀÆI6î£Z­+€NEC%ËØéLw/Ò„„ 1IÆ9¥•L¡JýO4"Ý0¨©HÚ9û› Rð®AÜk>òCúãéZ;Á@zd`Ömê†j¢c5fkh7*—c÷Zë’&Y‚G8¯9¶‘âeý9é]vª¢Lx<Tô3ålë"$­J­WŒîPýN¦Œ‡QIô¥)€u¢Š(¢Ž 3E¨ AF(¤Z-J( AG°¤úÑ@ Qô¤½ëB@ÑÚŠJ(¥¤=h¢Š(ëE%QGzC@£Þ’€ (£4QEQAö¢€E¨ ’—4” ;ÑE- ½£’˜‚—µ%;.q@ÆÒ­)â˜Ì)^æQLOáP$`DKHÉ4ûÄ"sÆj eXãÎsJà!—æ ®85³lãž*6™¼²AÎ9ªÆs:¨CóûÔ±¡$‹.î¹'*B¦8–5$džÂ¤ˆx9¥8FZ&'¾*C*!@ß3@äâçLÃw!Ó¥„¶ÆÞøÉô§[ñ‚0EG²JŠà|½1S€ê¿*:t«QGk y#¾p)¤µÇÉ0^¿…;vŒÎ[|`|ëÈÏJbC3±.p3Ÿ­]6øl¾ª÷3°] e”t¤ìWX•fÉÊŽj;ˆ9ùˆÏZ’to›¸"Ÿ‚UÑÈÊqÆ(A%.dà“¦¥¹Œ¡)¡w ) 2ùÛFÒsÄt§Ý”] ±w<ZÊ1•G=pHg#$)Èõ¨¢ÄÌç€Ø )žtªåÛÀÎGQ@ÑYI˸§ª<³Ç*È~SÔw«Û»ÀÅÌ{¸éëV¼Ö–B˜¡éLE‰£ŽIA f¢u¹ÁEVO\Õ6¸/Cã6rjڲɔrª:¯½H­Ão$‡S­Gqh“’(ðÙÉ^ßQM å¶®vç*tV2¯™!b£å`p ”‹±ñƒŽ˜ªæéü¼\Î;ûÕ›²df6œàsYÎŒ«˜«×?J@6eW$i`3‘Þµ-,Õ¬Õe¹^=yÍcÛFУ96A ;UûXåØŒ¼¦=;P4_ŽÞÈ0h¤óNsž•¢¤\EŽAøÈöªpi‡Ê mç’øâ¬2k}¬×£ž ,&-­ÌJâ7`¹m¼ž†­\aJ»œã޵Z{¦Ur¥IûØO­MY òI ÉÀlwô£` .ãq„ÚEg‰›Íl ¨=»U™-ÔÀc#cªrþí›Ê 1ìÝ ‡˜ù¤óxˆŸ”ñÎ0iʺ2Ëëü,?QLy!mÛpWœÕØŒS•VDv\¸àÓY¦6è—*9ÎIâ¥Kè¥]Ñ»‡õ`qO‘Ál$;@899¦³FÌWÊfo@¼b‹6Öó)a†;LúÓHRÄp=iV&WbPsŒTw’Ççaž{{Rzöd×&£i‰=A§Mä~I?(ô¦3JFU‰ŒŽ£±¢ábѺ›qF‚·Fì)Lª‹‡bj”k/›™_ä#5)IgffRþT`g`/—>¤óTÚFóXÏô©QÝÉÁPãŸþµ,ñ£1×èËŽ=é>–™‘™°;ù©®î(#æ(Ó™-!’Y@1¢œ òI†³5Þ .]ÜFƒîŽ•B[“‘Ü~ñ‰Æ20*͵ËÍlÑÜäÛã5‰$3LWc|Ç× ­ˆí¼x™·qùR¸ìL|£ØFW¯4Å!‹È™Gõ£óQOUQïQù€çd«ùP$NŠÅ[' ľb’Dü€WÜŸZÚ´-å0,qüES¿µ.£`AÆjJ*Äî’̺ ¸½IA/ˆ¹ãÞ« ‰G WÞ¯8FµÜÈ:á… 8.Ý”oc펙«ŠïµÝÙƒt×,Ø·!̸ʜ⵬¯ TŠiI' ŸZ¡4Mæ;XÁwN¹nÊçÀ÷ãµV_ÝÌâßx‘É«Ð|çBËŸç@6Úq…ZpÛyùONjµÞªþn&9Áþõ`j±I$pä*/úzÖ§%´2Ê#Ë+6àz*žÄ¯2–¤¯!7 >P @Ó¹X ¨.qÚ wž\4­¸„R~êúRÈPà8ùA¨/Ȱ­çLà(‚OµV‘‘åBŽ2i~Ò¸Èr0–ßlŠ™p@'øFE!“F¡_äsõv&`¸Š­å©ÃW"BG#Á  1–‹æ$üæjê:°ôªq«¿ËÀg&”1ˆ ,1žsëT‰eàh¨’e-°Ÿ›¯áRõæ¨AIœRç·zoW¤¨ ý(4RfŠ(&ŠNh E%-%è Ñô¢ŠOÆKÅ'z'jµ i\Ô/jÀçýY5»*8¬køËb„¥Zfu©õ0äÈ$Ub ¿#¥^»HÊô¢Ís’?:³Äjá†Ò:ûV’y@`sU’XÃzZзÃóŒRlij^NAÅ[PEC ñS“Žy¬ÛÔì‚ÐCÍE"ŒdSØã‘Q¶ŒB‘1mÊ3޵v%VäR@¸\RmT Ž Jãe‰vîÅTœñŒÕÙƒUÈ9š¨Áä=êÀ€E1Q[žýzÔÉ Æ æ’-ʃ׵.€þÃwrOJ¨u‘˜+p(*ÈÐ$\1‘à€sTÒ"n.9¦Cv’1ÁÎ8ëL®X–‹ (XÕ …íP=ØY9Ç¥'Û”d +1¸¢ÂÙ™FpGJŽKc9Biñj‰€§KåcÓ"ž¤8£=šáÞ2>” þn+EÙ$ T'µ'•SµÂ:â¸Êc½ZŠ]ËŽÕ„“4/†Ïõ¥äò¡«&j,Ÿ(,zR¬ä¾¥TFg5jçó©f‹R`9É4ædÏÿ^“nîõÅ€i•¸4É0«€x¨x8¨å“åaÒš"D’º’¦I,j½j•ÕÐ ‘ֳݥ›>‡¦*Ôndåbì·HüÀã­U{Ýí„$c¿\Óá±Ýæ?Zd¶éÈëWʉ»äšVãqÁíV`¡.G=9¬ýÃqJt7*ͱ›#¥é—|¤ Ãw©U1áŽH¬”ºù¦;êÊ2¥ ªÙ¼L£|÷úSäv'ݾ¬Ð[„kqNŽX²F3X¯{ ã?•Uà>ëSµq|cf±uØò3PHªy O©4Ä>òg½(1¨å‚žj”—* «7~=EM"¶Ü«c°" k5d,ÄÉëšW,+ÆÈ )Ëc8é<¸e 9Æpim‹§ ¸Q€1Sj@8Y Ï¥Q¸ÔL•‚‹žwõª0Èón-)8Ç^=ªÌÀ6U‚ËɪjñF‰ØqÕ}h1Ñ“9Ær@椴ň-È‘o¹¾]çÛ9©mW›œí$žäÐ2Ú#K#!b uö5Ô7I0Û Xs‘ÉõͼŠQ‹)XM\% ¾ÆMÍÔ±íM¤A‡`<³ò‘óŠHäò$dŒ3b(/&&TŒ¸aÁô¦¤åe˜ò~„P’Q]Pla÷õ¢}¢×(˜ óm5ViBpAüM73KWCå†Ú¬§µ;ŠÃ˜Àª:Jš§tëË ±%ˆ¼ž”³Jð#MìÇj’Oäk¡ÒtÅ{¿´<|¸ÎM"¶3ôÝÊÉ!i$à,g ­Ã­¤™•„³‘GÑÆ«]j²3IšlO7§°¬ù/cJ!e.FéHäA@·6¤ÔFÓ(@~mª: §.±PþòfÃ8ã5—l¦xÞà©Ú„Ér=*Cgsrù”$cqŠ{$ºÌP€â] ò9ëRAyãù°ÊC‚àÕfÓ-ÉŒ2p r+RßN µÝ~qÐ/‡¡rÝ÷)C‡VëÎ5Ínš6é:TrÇ$m”Éö-åÔ?) vÁ9Í! ŽÂâ“.öÇ~™úUÈì˜ÆÊ–ÎsŒUd½•äùäLõ¦É1vÇšà^”ªÑEmæ”ò­0êqÂXg5öì¼É‚:™AL-e‚Yækž~äc€iè¹n^öEÛœ“È€=MS¸Õ¶<ªI$§#4\ê7l»- މã’*¬PHìÍ+†Èèc#ó¦äãiç>•:ïea°ŒŒüêÌÚÌáŠ)ÎÞ¦£–é›#ˆ€ €jl óœ"[¸ô¦HòG I98Éâ–Ø ÷ÛÓ½€fB½Iù½…4Ëuèàãv:úÔ—R${Øñ¶2Ȧ²ÝW¶wvZ]²ÆìÄcOÒ˜Š7wÏ9;7l ×4²,‘{xQšIvŠ~™oAbÈ VÎ…ndº–åãÆªô w&M6; c,¾YzçŸJÌÔ'ލìÍ#ôEcÜÖ†»ªbçj€â4QÉÁïT–¡o2Eß1F;š,/2‘I“nP*²†Éìj0Sx (ëÏÖ´.­.&ÕF1É=k?ìRJUd*¦#ÆO'ÜÒfÍ]®&Q"œ/úU‰*ϩƂÚñdY“hääõ­c*P3½N:ƒH øvÊ 7#Ð7qíVôèÁS™Æ1—èjÛC>EÁù\|޽­J–àä\ì‹ú'¶G¶"2Y{ò Vµž8-œœ¿*ÝÁ«osnÌíܼ:YÒ¡š ê@fc‚Aºt-Óî#j©'=ÅL˜–'ˆ£ÍC§—6— Xòöîîiöò [wÁäô8ëíL‘³F¶0)v-)ííYs¸iz’O$Óõ)æá"Y3#rÅ„zñ¨åò£Q6΀ã’M"ˆÕHbìC`|¼ô¨]Ùî˜÷¸©†ÀÛT¹B¸¸úÓ#pdu*tÑ`" ¨ÊÇX(G ³a€ªÄÞ{§—Ê89õª·‘<·Š±’ªTž ê&’g'bƒ·n '­K¥j+ot« &)>F Éõ¦6µg‹¢pÙ<æ³%E»‰Ì[¶'¿zW ¾§i-ºy‘ž˜9¨¬“|Ä„›< w«ZV¶òé±ÚÜ'•„bz•íÍgêŠ-]°CGÈÝH]p3È¿(Ë è}*ÔRî^ãµdÚM#1Ï |ÞÕifòŽå;†phLMÉÉÈüiGÔI(•Žx©# ®r)ˆ}%-%QGz;ô ÒZJ>””½é:PE~4~4}i)M”cI@húÐM%Qš)3@ HX c¸Z£=è<Ô¶4X¹O=k†âN:Ñ%ÿ›òäþ"¡)šÎLë ­vV”dRÇ2¿éS¬@œš©uù8"„޵tHéóýj•â„mÈÅZ÷ýãÍ,‘‡àŽ šç•bÒê8•@>æ®Ï­Aåyy#ÈÖ›•õ2a™Ý•>+^Ø£5’í‡ÜŠNx«ÝÊnÌÿ1Sc¶>fä,@äTóT-®²0ÊsÛëVLùçùP.WÐο•Z´pñjó4ý=±ùTËa¥©µ€¼Ôé&:Vr6:Õ´9VLÕ"êÉL‘Ž3MJkƒ´žhEX«+7<æ¨Ë/̓üªã±äÕ …Ê–Í2d¬ˆÊ¤Òª“ïZÙ£&AÆkÌQÕ½ø­(nd)œžkU±ÏÊî\’…&³dh÷gx¤žK™T€×Qa”7Ìzô¦ËŒlIö5˜¯ ŒñTe±ÛçëV^c mæôiºH·61ëDt1«Kf\ðÆ±§iÖz­–£æ'Ú¡ù$TÝÈþlú×#$),®PaKqŽ+U­£•ãÜb£Km„|™Ç<Õß[™´ùmmHmtæ›gÕÉô%Ž êrÀzóRÄæ  T‚æKˆòm4¥"aI­ÌEg°Ù­K&óy‘QMfï 8Õ­>ÙblPíc¡&‹èHÛ~µo`<ž~µ ¼zTÑM”Á9©LrR9-ÔœŠã*>žµl€Àš¯"³®=¥&8”¥Œ`‘øUiVM¹=Å]hÈáE1ÛéŠ"DÑRÛ,ØÁäcëWRÔ´«×“U´äó$8è9®‹O·2]¦œúÕõ& Ýlè4¸DP:Z¿‚)"]ˆú´q·¨€Z\RÒS´Ÿ/”RÑH9 E'½- N”QG¾ô JZCÖ€6-%Ö„…-%/ŸZ(¢€ NôbŽÔcgŠ(&€ J0:Ñ@´žôu¢Ž”Ph¢ƒÅRRñÞ€ ;Ñô£½i)i?)3KHhŠ)1Þ– cTn&®9Çz£7Þ¤7”ŒR´gžS0ÜßþªLh¯®çæW‘TfAÎÒsš¾Øf ƪ9³sŽK`F¥ã®9ëQ†1ÉÏr´Æ&iÕ±´(Çfq «#/-דŒReeû¤‚8ÁíZ1ö±äj«b‰=»Äè<Ìg¯j®'x$¾LdàCèi ,#*«Ž˜5]ä`|ÁÈÛ½±SϲŒ7'¯µT,J‚ЉD <ÇŽ‚˜Î¤€:éQùªé‰@;Ó”(—bž@ÉÏjrMªœÙ¨”V‡¥)yeœ€ŠTŽ€ò*O²ˆ÷o' 3Ö\†=EZFŒuíW%\ÂZ"Jð9íU3;‚¯ un9«b[ƒ¼"¤`eµW]ñ–$ï-ƒI+•]Š3ž¤ö«—&q隠Ĭ¡@ÈnçùÐ=È­ÆC+0^Þôè£{ˆ1 ’FzýjxíÌL*ûsšœm òŒð($‚i¦@6¬C©Öµ$µ" $ŠSØõª™’> áq’*³]iñïw;Üt@qŽ}iˆžsC1qPg||‡e<ŒS…ü@%½§–3´nê}Í6hÌûÔœ0SÒ€èEäÁ11R2=A¨"—æ`„Œ|Ã>´ÉL¢\FÄm!H# Š‘Uû%‰Éô€Cì£7 ºTU äíº î­¸ H¿1S÷WÒ¨i*M4 yqÈÆ ©²oš7¹d;¤ ÿJ`õ*\ÜÆ¬"Ü¢w¼i¶Ú Ú½À¸Ú+u9ã QØT¶º|nÛä‘y# Iyw<¨Q ÅnQŽ˜®u¬[iÓ-®™`f1¢I8¡›í·‡i|Á"?CØ.JÛ£RáxëžÕÔ祥¸g¦À´FÏI¶Ê\*àg“šK‹”DÀ“ÔŠ±y8;ù’ tÃük éóÜ·šÀïì)†åK»©•°­”–Æ+:K¹.%ŽÅ‡Ž1õ­)ôk‚¦[ˤ1w]øÇµQ¸º‚ÚÕ‚ÆÅ3·äþµ#mã.ŽÛ€á\ûÔsÝK;YØîäÝ@n‘“ËÜó¼{S¡Ü¡ÅÂ!Få_Ôb¼S\ÞBÏ«í9%¾µaSSHAX•‰8ùxI V²mŠ<«6¾õbÄ1—%˜d.zÆ‹…‰H¼hâGa –5,[6e²Þƒ5š×«!YŽvärM\·’0™ëœÐò¼¦0°¾ÝßÆÃšrŵK»p1“ÔþÈÌ’)•%LH©Z6‚¼ÄÈÃ'Ú˜‰l ħ—U!{P¢µ3M× É©¸YT È =ýñU'º C¹#8è}M±<“¼•C+³ÐU{–ÝK`ˆ>aïTžwVF!EÆT7Æ]BP]Š“·‘ÁJCHÔƒy„9ÉÀµo/Øm ³zÁ<7"%pUW¯\’koÉ3ÆŠHÁ­eXÑ =È™¾grr°©“TEb±"¹é»“Qj‰cû”ˆ#sÑ¿Z° õª®H'dTÐJrR&Ý q` 2vPœ£¸?…G2:L›4PŸ=sUÛ,‡5<ØÐ&=*‘Z•lcw}¸º­<ÊïéYñÂØ!r?:ÛÑ¢+m»Œži­ÌçîÓ4Àâ—ƒëNâµG”Qš_€—½%-¨¥ ¢–Ž”Ru¢”P¥-% ½Š(`QGjQZZ8¤¥Å%%-%4QKÒ€’­ (£µŠ;RPÑõ¢ŒûPA¢’€ ^´”´QF( ¥¤¢¤=zÒ‘M4€\RJ)¤g­G!ãFSµºÕÙÒ³.Y×$ @ 6Xœg3¸*[h<~_Ì)tüê/´ `wõÆ*FI2²ÇÁéÀæ«É—*ãŸzµÉŽð~ïQžµe*Üõèi Œ.B–ÁçÒŸq—uaÜvìiÒFêªÈyí= 8ò àî#j@ElNù$7^{úÓoW)“Î4”“2¬88ÍK)Y aÆ{L ²LÑD¬çk€{JPéµÓc·<ÕëT‡UÒ^0^“î+u–&$IÉ$cÐPù°±Pä ‚*fÁ1H P}ë>ÚY˜–*Bš·(wŸ˜çnOJb6@¹‘·gŽ”—aÂ.$lŒ„—Y—ÉÏOZ³3[,FãÎjb!‚;;>â1¹³é]j±ØÅ:ÄQ 'þµR²Û,N;1ÔT³³ÉU‚©8ž§ÐP”oîJ™'=¿ª–ìÒå×*Ë!ùmÌÜü{Sü !c€C2 ƒ«ž¤ÓšåaR°€_a$‘ÚªÜHJÉr\Jö¨ Qy)Óž¦€+}¶k¦ ’Ãvr:Tâ$X¼Í˜ž¬(6¤FÑÇÃ)Çô^9±,Ù²~è>‚·q‹ÏÕœœö:™£‡tdþðÜÓ¤÷=›BŒ`zÕK­Ec( ªQþѤ&xÊŒîÉëO´å*™Z–Å{A")Wîãj 8ªù$±'=O4ÁñM9bFýôjÅËK*Ú©ç±Ó8–H¢†#†Áê:šÖØ¥ìÁðÅ#ê=hBÓq³DVÓɶ‚A'ÕYÒî8Õ¢‘FBÔÓ.îärc‰ ò3DWR¥ÀœáBž„ÓÜÓxwOÌ quAîM Å4î äŠzÕµ‘"ÓT!ä8ëÅa]<Û]Ü&ìïï@=Ê×WqÂøÞ[=ªœÞ#–``´ýÔ ýâ9'Þ³Úq#yN òœÔ6ëåE"®X¦NçéI±¤Oxë9!¥½þµ+ ž ~WÀíT" z²æ×zX!š6Är:(Æw6+ŽÃÞÂxgÁq$j>Vö¥Öá„l$Ü?†´Q„[”`3Ç~*¼—¶R&ø¡aÎÖ*y€AˆbD°r7uC<2N®V-²`úÐñÂä•Ã’O'ŠÒCùxÊsH«›OLGæõ§¤Hd½3Þ§mϱò®€HëíP,ûm¦êCܽÂ[a‚ÆÄ Çݧ,ŠË,êžl˜ÉbÜÖ|Ö͘ÜJÄ ±O~Ù¤ˆù†‰÷ÈefÂàÓD´N“3áÞ&œñÉI§FÓeg1ù²íùÔ²–†?´£•‘OðŸCUn:«ì-ýÒh¸2Û€(ûOË!ÏZ8GÚ"ŠúH@ý 4³ªe‚El‚‡ }§,2‹ÈœtÈ2ÓÒ€±«&Tˆ š¾Ó8·V„|ëŒäÕM3wc>¸;†G#ÖŸ,ÿfeBxa…找q™ø9,QRa—dŠÁ”ŽOpk6æ;¤’)Êr9Ýš‹döÊâÙ_›Ë ’Or)±(åÚ=ã¯jTeTkˆÃ8Ç#¿Ò²lüIÚ)žÜÇ,m´¶ ²‘Z’\[<‚XX€}:SC7y’•Êî\…Ç4â‹&R6dd1÷žô,XÔ€®x Ý ¤.Ѽ¯å–Ú™ÇAšè1f så lžç½\™ÜGÓ•8?ãXó‰'·2Ä¢7Æv“Íh[]¦ä†SþµvƒŽ “¹ù¥.¤óÔÊàìZ¶@ŽFŽpÑéT.$¹iÊ¿vAÅ$6kè…¯w±VÉtö­«ûEƨ£%7U=zX™$'s?SǺuŽu = U‰oSÌüXÖTŒ’ '¥gÚ°áW ã-íÇ"¯øø¿ö§Ù¡ycz˶UŒÜá²c±¥±Kaóþù·#äƒÑÓ¥KdV6ä©Ãr1ÞœSÓ3žsµsÇ4Øz4›—÷gw&“LÀ¤sIlà¨bÁHÏ=Ô×"«à¹`#*ŒOÎ…x<~”$“}¡ŒNæ{Ô7 ¢ð¾í³¶K^¸ÿ Cþè9¶r¬-‰JÖ²Qö|/$‘Ïb ayYšh.v”,¬­šÛµŽb­j¦$<ãéB)«6Í`U÷EX¶´kƒ ‰2HäûU)äyÌk+ít9Œâµô›’ÕI(F ;Þ†D±Ç m! eðsÓÒ¡¸ŒE2” 8#úÕÁåÍ4öì ÆIšålOº"É•+ nEmrÑmIIpÄ•pz{ß¶AƒÅ;Tí&NAäU°àœU<ô”ÅœQÅ­RRÑ@ A¢‚q@!( š>”€CIKE0 Ñš@'áQK÷MJj~í!£R'W=.7æºH}êç¥Èc“ùV37…†ÆpAǽtÚ4›“˃ƒ]‚à±\Ô#x;HÖ—…5— Ì¢¶n#ù"±˜%jž‡Mô%b6àRÄ›'½7a+Ö¦PZ<ÈR SzñYÓªCu«é&kUï‘vî­hg&etnqš³µQÎç½MÀÆi±D¶¹#­=WŽj%$޽)áùÇ­M:ã=jÄ@“ÍU@sÒ­)Àãš–1ÇNœÓX RƒÅ# SCEVŒg5 jó.V¡ò3Í2† 8éÍ?Ë,½*P€-*€8&„ÔcÁéNXô©K)4ªÃv)”†yGúdê) -FÒ«Õ‹dœÓ.ÁNÁ™C— ö¥²V[ˆØ·ÈOZŸa21vrp ëç+yKž{ÔŠ‡%ä'ž >ÎÑLA'qÍ3PºH—`ôå»P÷Ð6%7k·Ë±_CÒ«´Â[…D ¹I'" @°Ø—F ¿ Xž}êe@` ¡Á$÷ ,Oi ;<ò1Âð£¯537—›æ<óR,[L1*@ÞþãµWºƒ•<¯_¥1…IDŒrÿ6§´q›VŠ2Ã’O¥Rko*¡?7#=¬ñË#ÆÖ8Ǟţ”+£˜)–ŸhûQb~WÎ vô­É¢2&òI=qÒ²å ÄnI©ê;ŸqM05®Xy ˆëXóZÆnÀpi ¾µzåƒ]^¹â›I¸!bqó–«íäÜ–ªvªÌíŒÑa܉ ^„©'·B*«4VëòqŒ ²rÖå®#ÎÁ¹Ìyâ¨3,· ©jZ5PD›ºþ‡¹ Ñ°#ˆ†I9ç½fÉËt™ß Á­IØŒ‘´¾µ]KÝ¿+$|sÁ4†ëe2)1¦J’¼œæ¨ænËaÃ`‡ê+EíÙR6edIŒõÍ[žÌ\Ü4»B†²Ž3èE1y™‘I&é “ Jôö«0Â/-qqÉAÜzŠh‚[k¥t<u¿£¹‚å'@v?¯\, æï-™äXŠàõ®qO·‘âhbŒ¶w|äþ•¹¨Ä‰åKc8åúVl6Ïo7ÌÛ•`ýM4.†®‹~,5$,鴶®ë6e–S_ݾåã{YÝdÃG Êxª‰—“qžj±Ã(`Àààöÿ ›ŽÃfŒK:€¿(\š·krP…Èùõû8Ì–í+®Ö<úÔ%Àgœñé@u.h$Æã`ÎFkNÖà\Fާ¯ZÇV #Df(N «̬«÷CóÅR723Š)£—&œGqMf€sÍ´ŸQKI@))i§Ò€’ͨ4QA¤B’Ž}(¦QÈ2µ'zkr) ÁÔSål­Eµo—“SD2rEUÏ#5jž)¢ÈÎ3Šx'fGZh©Š‘\‘Oɜӷ Svâ”)=èE¤=pF +` Œ§Úœ\mª¹v°Â®E@ŇSS9ã­@Ý2;ÑrÒ9IbP·Që@u0<ækv_4îs€GZ³Án¤HHÜGSíWn´Ø#ºlƒÂ¥N3U¡ŽWçB‚Àc<Ò+ržæéš3º8‰È8Ϲ­{ eHÙB瓞‚›f.$9‚,—êíØVªÄ!Œ!9fÏ^ &=v1®pd0äüÙ @¨cŒâ…—pSËu$ŠºpÄ‘ÀèOsLH§Œ´6Xýj[--á[x9Èç=ªQ#Ûƒ´u;ˆõ«¿(äô¤–%Xis®d†fòΜnP¡«zijÑï.a'¯P=ýj¼Ö ( OÊ­¹qÕOµ «m‰ãR¬_ï{Õ)(i¡nDK…vêm5‘5§”<ÈܪF «¦ãa;ÊpÊ{T;ÓÜý)¶O+ …ÊÃæ»ܪÓ$×eŠá"Š]Ã!Þ¤‡…(H>† žßäMèŒá‡9 —SRÒâ[Áþ·d꯫GQºÓ”ŽFŒt úV2Dñ²2+“ê*jì/ßtšsµ¸#éLM2ßü$Z}È X‰ Áb≠EV1‘“T®`µº‡må’HéT[O€)+€½ÈɤØYË! U8útª ; FIAqÙ¸8÷«‘µ­®#Yd™‰î1õ¨nLX¼Cåéš’†\Ü–efB‰Ž«ëÜb¡Iažê(ÝØìppEC4ÎÈR3É^àÔ–l÷“§™–Ûƒ€;Õ'¡6: ÛŸ d|«ä}+‘¸¼e·˜QÁÎIÝô«÷/ÇÌÌD-ó(þé¬}F7’Ô­³~ó8ÀôìiÜJ'I<@®0g±5>‡!ä†V<1*=«NÔLg•È#g•0õ5ª^D¹W%UÔü¼ðÃÐÓòF¦¥h$ˆÏîöÍaGe»šmäýÓÕ¥tp\@ùOª{ƒUeÓ•¦y"“w8¶’òÆ‘'œ œáª4†{‰!Ãm‚ŸZÓþÍ(A!X¹ª÷ŒmÕ|·U}ßSíJãCV8ãF+ÌÏÇ'WÖ³¯¼¸-üàÞdŠIUî}~”É®Ze,áЃ“ŽþÕ¹‚[U€¼.An´ÂÆ\¡å”g9Éu2ics½ä!=Z¯3,¯¼ÀÁÁ_ðÍFbŠI%ça“Wº7¥©®a!ÅB]”b¯;(}+:Ij[Ø­tìFj¡æ<žõ ñùˆHŸ1ÛÀ8¦Œ§¢(\ Ô Ø5jpO8ª@ṪF]KYšž†éUUƒqŠšæ‘¢ØÒ‰ƒRDÙnz ¯ÊÕ:ŒEKbêX#w S‡LQÊäÑ!t¤ir7ÁçÒ y8¦'+ÅBªYÿÆ™¬"‚Ë“L8L˜#Ò²qAªÜH#šz šªIÀ2€‡üh/D9FxÁ§y|dÓâù¹§‘“ÍOr§R„ÀÅL¢‘†M» Ø)Jã §ìÆ)€Ð ºSŠ ½iXÍWiÇ@h3›\*æ©ÈùÎ;Óæ›+€j²’çФf*6[­N¸<š¨>VÆ*Ì9ôX6+"aŠIó¥M&Ô`á@ü(T 6ï›§&£|ìõ¤GbÎHrô«&"ãwsA\ä®xôëHÀªä¶AíÜÐ ˜Œvö¡HÇ%³ÓÚ¤!B|Q$©{Ô¶é$€€:Õ†h Ë\÷¡¶ð‘·söÇj‚9hܹÉ<š`6R%ÜÄ¡vúP›ŒH™%|ÔŸ* ò±äzTr@ãîHTã*r1@‡Çå‚È9íPÈ!Žã†epx>õÀ¬xYOP;{Uñ”T Èïþ4•7²cb7-M.‘ͺ=ªdg Á¦ù¥Nx#‚+BÆÐÄÞdr2¹ë´àúÑpfDšc´^Z3œð8­ [YâÚXŒ`qŽõ©pÂ7ÈÄžâ¦óc88ùh‹XO$Y$xàÕy,.< &]Œ§ä8ãÚ¶ *‚ÎAÎ)ésçÛ”c»o¦œ¼ö¯o“<àdqšdjMÆyÈïZ÷Ñ„‹Íä ù}qTÚF‘‡yÎ(ªŒQTž‡§¥T½pgÂ}åR?ýu§¹,Xžƒ$úT2ûm”37ÓÚ€3ÌJ#,û†ì7MIn#–5H2®ÀúÒ¬QÃ&@gǨȩ`„ù! g’£½ ZÛmrY÷ ‘éŠ|âmÛP(\uëR̯,Š"#Ë<Žj·ùA-Ž9¤=ÊÒ$ƒ™r;Š ÅUgÞãjF_Ü»°ù±Æ;ÕI¤•dÆê1ÎE+•fLËÃ8-´ž‡µ:ÖcæÊâ>£hÆ WÌ‘K“€¬GÔ‘Ý[5Á” ¸8>„И=4-K-­ˆYb2 Xå‰n­¨î–þ à`àýáê+•Ô-×R’ @lnØÝxê*"õtèÒÚòâGbÄ®*)ŠÆõ朲IÊa×µUExÉŠHX¢ŽŽq[ |G!Ôòjkx­nýbx4t2íÖ5]ð•céÞ¦a$ï”Eǽm:cýÎÎñšyÓda¨7vÎi‚0Z»ÃÆDŒ{öj¿1Üð=+lÙ[D¹žàqÝĸÍQ½ºJÛÂcˆôÍ&R×DFóE!F§óªi4¯p²-´àARFÊFÙ1<äu§Ír›7&ìgŠÍ³XÀ®Èw”)ÎI'õˆƒWcêOz”àT·cE¼hxã>ô÷…$7"žǸƒÁíA`y+Jå¤F©$d•;‡¡¦ÎC©%ê•d°šxE<œf‹ƒ‰ÏKWòÇÙž@þµ‰ ‘RU-Mýñï[·6Ë(8@•0xX#d‚0rj”ºà‡˜©æÛÈ ·ny¦”‘¢pZ<ð{ƒSA I4hpy>¹¦¸ò Æ0ﱫLÊÌ`„¦LrÊTœM4y¯'å©ék/Ìcf> N†w…ËhØ9R[¦}x§tKLQ¸£&×ÚIïTn!”:´.ávòÀÏáWx%“a’Àäwü*œ×¶l™‡%ÃÈæ† 2+yïƒÏ ÏÉ´¯j«{vò)HHÏ5*—G•ÓlDü ™M[³íg’Ö…€‘XVÍ‚˜t×8ÄÓuÏUBg– äsÐcéV`–vØ˼uÍ+ܧWLù˜¨1ÊžS`òx>‡š|9†î!)…Ú¯ýáïS^Y,²ìs·ŸcØŠ¦ÑM‰Rüîªä4CËÊ IAϵlZÞ- ”ïŒ +HÇcYßÚA.ˆUÈÏI1¥•®”P­ÈØÙÏÖ¨S©¶Pe#Žæ¬­Öæ #YWµÊGrD‚% s“¸ñŽôûJC½!.&ùFzsN×&ÇGwªÃn0ɹ‚çb¾Ms÷ø–ÚÁz˜}*½¦™,[¦Ø%fÉ?QWÒ;¨âQùÏËò¯cEƒb‚Ã8`K· !õ÷¥VeŒˆÝIF$šŸìW !ómP ³Hܶ=¿Z‚/í«.³ÈGSô¥aÞäÒ[HѰ Ë_œE-ˆT ØíWtõVg3lŒLü³Œò*ÒÚ¬ðMqgiæY>_aE…{Í)hB"†ÀË„è*(ã•dXÀUyIn0*쉴i²ð-Õ¾•Ò;ÈÎT çg8­f°ÛiùØ­,­€zåj½ÀlH!Q´“ȵ—Á’$‚RDHTã€*d½H`¤|3œqžØ£@±%ª¥¥«™ï1€­B'€ÂZF3ÊŽ¤úÓ ×O,®Í+.Ðà °mP° @=Ƥï5©ÚŸ0RZ¿¤@Ð[™fÁ;H h¬÷…ù»UøaíÁpyÑ ú홞Ì'Ò¥ëPDp6Ž‚¦ÏÉŠ:õ ÐQF{Q@!¢ƒ@x¤£Úƒ@%-% (üh8¢ày¥Í&{P2†TÖ£sÅtN2+&ú<©â¦EGs’”aˆDbjíÒøéTñŽk¹ºd$Öæšãx¬yÅié’”˜Ó>”âÍ©K–GXìLŠÍsóõ«ÈwÅɪ7*TäR¹Ú™f_,ƒéYXßš¹£zÕK¡†«LÆ¢*¸Èª ‘Ò¯6O ñU'SÎ)˜§œƒùUÈHÈrjŠœ UØ22(°úQ¨)œþU/c¨¢ž®@1Ö¡Ž=ˈE‘UÙ‹ Ô³¾Øp*%ÂÅ“I„'µ0ÇëFíÇ‘¦o=99ÍK¸ô¨ãTê¹ Ðj Ç_jPÔ¨˜íOÚ «ŽŠ2*R£½>5ÏJR¹úÐfÞ¤|‚›ÔñJìdÕ?$Šv‰]ñÇZI8&•¤õªÍ–lƒ@öA<ß.ªj{椹È’ÝqMldƺ’8üi"\6«F,š$ ÐM%L6zT± )dBMFKc4´eÈ×**ÔpoTQd`V®›iv·Ozi)YÓÀáðGÖ«:àkªÕ- Cû²"¹Ù!ÌÇŽ)´Ìé“T¤­;ˆÊž3ФÑãŒT”ÝÑ@ç¯cRÄ6Ê éHbž Û4Ó2µÑµ‚¸ÍL[²m¥#ŒÕô˜ÍK*ÅF1ëQ²á©ZLúÐH=è6CJàƒš†F¨©Ø‚½Weɤ5®¤,r1ŠhϽNTcš…œ~5Мž¼Òc#žŒ‘ž:RŽ16V”c隯#axâ¬ÏíYór§žl¹+n…ÕqQذÿÚ4ÅmÐmÏje›…‘€üëE±Ú7ô„ÍË1ñ]¬}<&þy­ŠÖ'i^lZ? J^ÕFAFsE9 ­cQ@ Ò—§JAKš>”QGN()zR(¥ïIKõ ¥&ii( MKH)GÒ´$) )ö¤ç43Å%´˜£9¢€ AEæ€ÒfŽ‚Š;Ñ@ô¢€ (¤ï@¥éE%-Q@ÄïK͆€Í5ˆšúTRíH@ò*…à Š|¥±Ö«uVÁæ“UäòÀ§¬D¶N6Žj&'¨ûC4eÀƒëPQaåŽc±ÕQƒÏ\óŒJƒHª<³)Ï\š_=-Ø"&æ#®8À}Â…@ u§Æ¢±Ç¥®ÖåˆÉ©ícq‚‡##:`Vcç5²,`îÀ­IDhw#‚zšˆÛÀÀ3¯%¸¤(‡É\®3M cpH9>½ªÌ¡Ì€p­%éZ…zÓ@gÍäœg°5b+d6[À «&ˆ»e¸#¦=)ìL¨ðî°ãÓ›!„LĹ/áO‚uŠAÂ7ËÒ›48PÍ>P ABãfw _fcñÜT6ò,“(©Ï…¼öã…Vá‰äRÙÂd¸Húsž´Á‘”QÉ'¨Ì𠀤Œ—ª¶éåàìÆ2ñ¥»ÈÚÃíPîØŽÌî{Ö¬©>Y9q‘XöHîÑÏ,ÄqïZ‘´?—(ðI\,NVT+*¹8ö55¥ÄW¼¯Ë&;õ>Ʀ†U–Ъ¨yç­cO‡Pe$%z ¡ž`'Ê|mc·“ëYóf†Q€AÈèjÄ€–Fÿžƒw½U¾…šçj:º`dûÒêö¡$NräŒc°ªì6©;Y€è©¨œ+³,2*®œwÅW†5À,1Èî$PR=žÄóR¨2y¢–«ms )# ö4ñ,¿1q´úÒ .Hµˆ`Ü2`*¢+ÜÌ6É·&–WybJY‰ÇQSÅ7”»cM¯Œ zRe¤BJ¢çåëQ…2® € vëC3¬žYîN)²Ï·æEÎN:ã,´®SeŽ6,î\º[žj)°!Ù³iÎqÜÑyФ©Î[ãLx帕Cdn dJ.+XXaóØH­…Ryi¢)šã,»ñÀ,8ÛéV‘’B*g ¿SOKÉ&dD÷œbšw°¼¶— 73GvcZi29 äg㊥xó¼™B§ >÷·Ò¥00í¸yé@$]k÷·Pc¶ó€¿6ìÔãP¾à¼n0zÀ¬øËF Eeçå9«°¬Ó1Ý#y<ñKšÅ¨Ü²o¯dd1ŒtbFM),XÉê­JÆÞéW Âôk)I³hÁ!"EŒáFâœÛË€@úŠR§g=êDŽ}*5Q¸å Q·9§‚Pì)\¤ˆZ3ØÏ4cÔÀv4…FìEÇÊBb È¥F©rÀà¨"šQ!ph†Ÿ›Ú ’æ8e LB&3š™@+•@)ÜV1å°(áãruÏÓ²vÉî}kaãqëU%[!±€GCT¤Cœl¡<³7¾ÓŠ>Ãå¾bžV‹û²7 ð8N sMÀ+‚¸8èj¹Ù<¦–Ťb¡Cöb3ÅGž¶‚B3ÏAZ~\©#ÏTª¹ÞS,Ü})\|¶)yBðàÇ^˜úSc…¥]Ò Ê Ç5e"333óÍLQ`6 &Å·Ÿ0R0¹äÔ+CtËŸ>U}ElÚ 2OUâÛ,Nàe[-Æh¸œJ8–åÔ&½*)íC@ [¼Õ9Z K’øþ”:˜ÎSµ;‘mbHi'!dÏs޵V%ž –‹‚ãæ=1Û5»{iòeÉÚzŠ Ñý®O>PÍZ‘%HÝ]%Īžã‘íOXîÄ&ÞÎå$F_ºFNïJª¶vŃDZ1œìsž~µ«-´‹$s,'£çŸnjïs&¬j¦»a¶HÄñŽD‘ç?…9¼O¨ÊSmÂc†H¡­S†æk“çK‰[9ÞzƒëMŠT,í)ø¬1¾É²Ü³3Iw9¸¹‘¥QˆH'ñ©–! _´‘ò²T}j„HÈçˈeŽCîäàÖ”R$%¹Q# nQœH,jG¬k pÛwõ­XL- Êò°Œ`…<kš[¡•…ÚV$\r Y%• ½Äç€NÀ¼ b±±æÛOu³À ®@ŒuöÍT¸/:TXÐÕ’o¦•ð»Ô1àç¨íNE’æP²NUTá¶÷¡ŽÄé!‚çoñkbÖFµd`Ø`ŒÖK)â‚$Ú›‡^¦´/¡!¢—g;rHÉ'DŽ5,„0ãpèMK{‹üË‚9ê=*­”Í,*d]è9•a„ðÜ$‘’lž?„SBÒ'(@Ï5bv‹£€)Ù½A!‡©×=†1ŠäM 9ïSS 4à{S´RÒu Š)(¤ïKš(œÑG=¨ b(£œPIÞ–’ Þ›KÍ„f©]G¹OwµE2åqI3’Ô!ÊÉ`CWK©EHÎ̤1ã·VFñdC×nÝŽõ`yS'¡95,mqI=MŽçYkr5©¦MÉž+ Š{ÕûB´@ mYJvE-Œ’£Š­r_« Õ0Î*•âeyè*®;¶Š+ó/Ò«Ï’qа¸ëÒ™*‡\‘LÉ”@ÉÇ5níùÕb|zTèØ9Å2Q©î$Ÿn¸gz†×ˆËãÔ¶à‰K*Y¢µ‹“îª;zÔ>ÐiìåNj²‚Òg5#D‘Œ žµ ÉôªƒŽ?‘T‘HÚ,r ã§Œ`⚣ŠP>lƒLÒä¹çŒHé@lpiøšCL|BüÝiÏ&9¨òšc¾zš¤‰jìYYvš¤À+qÐÔ’6jlŠL¥ âÄ÷¥Î)€ñÍ\qM r €OJ|(ÎsNa½99ªžiF+UÐÊHÐFù³Oó8ãšÏóÛ€ÊüŠeç#¨Ñ°àzÕ#vU¶¸Á«̬Ù8éÞˆ½4Ž•7œT8ÅUŠMËÅ2G+“š°Ó¾…Ö¸f^Nj»‘ÔÔ )îjV`W®i^ãzæ9"ª63žÕbBy$ñYÒ\òŽzÒ°œ‡¶4Âøè*5—amÎxÍ*7-DûNsVã“# ÖxF䓊³ |´Ù¢V/ÍJ#Uzš•N;Ô‡¶Aõ¦¶{ŠxÚyÍ)±Aw+%° 2)ÁB¹â•°8©`ÈGR*6ëO#McšD²¼£#5AÔoûÇ¿çW¤`*“ŸŸ4ÑŒÆ)À4Zr:’Ý©®vœÓôåó.uç㻞{ ›ÉØ “ƒê(c&³]¨Ñ·ÌP¬Ã’)‚#…brÁ‰äÓíÕÀó ÷95 FÚï´å†ô¬>¥I>B\™šªÈ¦F`;Hõ«1Ê.NAÀÀì)#¬Ûyn8¬Þæ‘(Ï2¢³üÝ~´‘Å3&Õ.ɃÇåV/SlÊ̓ònÕ]LûTÇ/” üÃÜІքŸd™ãÌ‹¸’zúU«KC欲F\ qòŠ"@;;öùsR4á§XÒwbÝ?²,[ŠÆ%¼£t­Ó2â0ò¨ÚqO´vóÉfËc®8œ# ¤‚Ç$Òl¨­FÃø•>u=;Uëf)QŒž‹Þ«`nsך2d\ ½†dÙªE°ŽM"§­>,0Àâ8,ѹnLŠ5NH2F1Š–h€ñÐS”Óp}iG 4‹AŒœÒ”÷ ¼š 3EÆ.ÑŒnP)á°zf²ò6ÐMˆ˜dã  ù¸ôòìŽ)’ež˜„,H¨ÙU 3S`ôÒç4ƒB®5±?SMwg^PSº¯Ri€ÔîMŠj³ ¸8ŒbœÑ<‹‰ˆ\öZ±€„œph%H$riÜ,RI|±ò¡`¼p1L2I4›™ ŽÀŽ•4ÈíÄJ™K"`ã×¥ X­åüÁ›š«:<ÒªŽëïZ/½ˆ;x5F8¦šFoÙÄ,HšB ©9éWÙAãŽ*‰O8ÈFd‡o0qŸAÁªÓB»*7g¯jÖx²¸^H¸$qëM2d®s’Y åmg =ýë5ôÛ€eWˆà¹ÆGq]Õ‚ÌåÓålgŠÄ¸†æfI[=ƒr3ZE˜É­•´9)!e 79 Rj <7KÈ­ÿTvõ°j{Vf™Ù(Úäñµ½­;茶(­!óaÎÐWµhe³0®,Élá÷FqPG0ŽP¡IÈæ´ŒBXžN1Ò©Ý[<, ™ô*_¡vÞâ.0é‰WøÑ¹#éV)'`\”Œò»ºŸ­e[Û» Ž7t8àV„“ÂG›²B£hB8üè°™cF¢$Üc=¨ÜÑF2«’p=¾µ\Ýms±ÌNrqÈ9íKhð½Ã†›÷˜Ág"‹j2$))âEp~oJ´g7¬Êx0’:j‚ºùg—'Œþëy™'¸RäsïŠA¹i]#Qn‹„PGr)"¹ÛCpIõúŠª‹æ<²AõíIp‡ìá£q¸ñJú¡³ex¯"Æy^Íë[1©,ðžOËÚ:§’ì‚zé­îbyR@ØààÓBeœcéH:Ò–Ï)"˜‡QÚŠ(íIKIH’Š3LÚŽÔ~4Q`Iõ¢úR4QÞ’˜´©qMa‘N¤=(2o¢Êšæ.Ї ëïå\õõ^HJ>åïÔS]ÎÎ*¬`ÓOBA0ÏÒ¤7j€WvÀÍHbm£4¬7v%ÍÃ0ÂïT gsçÒ®20Æ9¨ÑIÎh½! ¤OåRÄ8 IsMaÉ⋚8¤\\”ÚM %[£ ƒŠy=Ïz‘Ä·€>¾¼Ô¤žÕD‘ÓŠ³“Á¡¡Ü°™!'nqLR9©ü¸¤Æ™ÒÏ$TŒØâ‘J‘²  ‰ÀíR7$â¢ãŠD”î©éš¨Ç ÿZµr@ǵSêã ãÓHÆZ‰!Wõâ¯h‘ï¸ÝŒ`ÕQƒŠÐÑe¸'Ö¶‰ËUic±Œa@4úŽ&Ü€Ô•hâaEg½0 8ÍèÅQøÑøPKÞ“µ¨úÐ(£¥;ÑB£µv¦Ҍњ>´€×¹âgµ(­ (¤ Ò})MJZ %(£½v¢ƒš(¤¢€Š;Ñ@sIKÞ’€ŒRQ@ ô£ÞŒñÒ€!•±Þ³æpr «wÅdÎÌÔ± r«Ü&èXÒœ%ÍÙR*YFl!Œ§FNM\\1b,@˜€®9Ó4âìÓ!S»žqïR1‘fÜê{U¤ ÷*Àm÷yEAÏLúÔ¡öíy?¥bà°d<ti²ÝœŽAǽ=Fò”ŒqD˜²3`7CL%sçg’}jIXr}ˆ8¨#;a*xÁ¥‘€‰IÏ"€*j µÊ8`# ûTYBÏÕ€ëV‚¬Öÿ1$n$ d$'í¶×ŒÈ®«¯Zº“Gr¬fä0ÇVXÅ´+—,I'‘Ú ·¹UÚ8NârU¸¤ïc8†B~§½-µˆ"RwëNûD€†ò“DwÍ6Ô‰ºòM04axíŽà )èZ«^jk:7˜Ó8ÀêÆ¨j7/énT—n@ôªìd”G½NøÛŒÿ 4#UwD`žGEj6ÊØ'§@gK1W{rOªÞJd@²‚%fù›?¥]™Þ SiŸ›Ö§¡* ž”ØÃDgb*t¦=Æ~Ó¸ð¤/ˆa¶ÚHÞÝ8ïYlZFÉ}¸æ•QX–rI9ô5[P3“€pyç´À»jbž&ga ÁêjÊ$M´+‚®8†¹ØO/Ú(á6Ãò‘ߊ³otÖùˆ;ºç$‘Í1W6Œ@™eê?­V™Q¢ ¸£Ÿ×ÔS£¿/ˆÏb:â‰$Œ9u㌴\hHšC¹eDN#ŸÎ¬Ÿ#h\2‚3Ò«½Ä1©BÛ±¹ÍBòK:ˆã`ž¬1Hd¦î(¤1¢ÜgšCtÐDe•‹6wÊ«Fb22œqž¹4ÛðÒPä € 1I–åiġ呇8=3R›Hâ €øÝžõhD°–\g§#Ò¡˜d' ¬Ù¤YBhä—÷yó|¹ô¥€4HIŒpqÏ ÒÆÿ¼i p ¨ëÍ[Ž6Ú Œ>´ –Gˆ¢,tÀäÔVÌ®ì í`2HïVÜ”·)ÑñŒâ£³·XíØËBrIï@ìO4q¹d€ 5© Â:ú“U|¤h‘@Éô«àmy©eEÌ4®Oȧw©dS©Œî n`W·­ZY™Ü´J]³×Þ®Úè3®é€![ v§Ã§´JAýÞÞ1@\Œ‰,NZ¤–ÛÌ·›ÉæÛ(UŒ·'Ä{Õ¨<Š N„•‚å)ò"$óžJ“N`”±Þ¼àwϽ@c`ÒÁÚ äŽ™¤)$vá]²FrG©u(ÞþÞ¶Ž]ŽéÉÆA«K«Û8H¿¯#¸¹fVóI%X‚3È>£ü*²K #¹-Ôblï b+NßÇs'DÇéG# ž—œÒ×gã›IN$Ü­ÜlÛøŠÎq•™?:N-Ñ·IøÕÔíä8®Oøªùùþµ&¨‘V§Ràš¯¸)éRÞ‹-ÉøÇæ…Pjøjd9ïE/dL¸‚ÝÍ4ðiŒGj,H×l÷ª².OZ•ÏÍÖ¢ÚZŠæ°ÔB[8éR0ã¥< ª9¦Éާ½; ;²'8ZD9Í4’x=)cÎqŠ ¾€Ãq¦‘óTÁ ëK°ÍóŒ+Å<Ži\ÒÆŒë8õ ™I"XÓ&¬,b› æ®EÊI¦c:ŠÅf„0#UhVƒ¯ËÔÔM|„ɦf¦E²¢äâ‰!V×Ú­2pF)<³³Ç4 ŸR„è*“ÆA•`ž* 1H–Q—,O_6«n:ÕG<癌˜ÃŒ¶MKa'Þ<}*¹89ƒO´lMŒu5¢2gsbŭПJµUì€ÉŸJ³øVˆà–áGzNô¹¦ ¢Ž( µÑÞŠƒ­ÔqEÔfŠ ÑFh¦0¢RÐEP¸¥¤¥«$;QGjJ(ïGj1@¤Ï41@擽-Ú€ LÒÑšJ\RR÷ ŠN´´”t Š1@袉GnhÀÍŠ@ˆ%#5Ÿµ \>Õû¹äUy%x­rÎ8õÅ[²ˆ8ܼïçš`Ayåçœì µ\ Â[÷«×0œäGZÍ{©Œ¦?³ ƒŒŽÔ…sBKÇh€[|àã ö©¬‘¼Àªàs»¿µU³´2±%›žŠ–êPÐ86 uè)ŸxÍsuæ §‚;SìÝÚBZ>ž½ÅF=5–,s’ADsM3a9Š,¹-Ð…J—uÚ G w¹¢ëœäjÜD³&eFn:*xôÉ¢L ýÐ;P2”v—w…ä§ñzÔçO’%f,0Bð_KvŽ5Q–çõ¨ÐÜ´¬ ªD99ëLE_°EÁ‘ùÇzgÙ"F/0sÔçƒV¤xÕˆ`Ì3ŽE4MkjàâÆï-7VÖª”—v$.}1Z¥!‘Œ‘€öª×´±ó‚W?…„iûÓמ‡µ:x"òœ±íƒíR[]A#ù`àŽ¼qZ[‘„ #®‡±ƒ i ¾Ð¬ÅYJ“ßñ©ç·–æU1¿•^ƒ©5¢ÑKa%„#;‡­@ ÆÌ­·žsLz¬&XñŒ|Äã­=ÊÜÞ*ç·Ò£š)¤;™ˆãÒ§Ž !gÆqÇ5,´L\´Ì1Bά¬Ì8èCÓòÔÄe½)Éo»äbGaÒ¤¢2K±yäS]™ÕQ‹ûÄc¥^šØ®ÕÁÇ©§ÇEb@ÝŠL¤Ulyd:–ÈÆiö1³ðx_~ ZX‹|£Ç$ÒˆBƒž}Í"™;©PÀa‡<ÔX0À\óSª’ 7¦0rœsÁ¨“.*ÄቶôÇ5˜ùHè3Á¤W>QBÜž¸«¬…Œ` Ô\XÈóLyï“íV­ã$ñ“Þ©ò®Ç?;ŒVœKÆOíRF@—`#‘M ⋉Ž2¹Lf£‘ÞN¦”‚Eã¦MˆX8f£ËŒóVdç®y¨H#9 ŠàÐ S“MSÍ?ñHbcÐtâ˜NzƒOÆÖÛši6{R†èi•¸öPx¨ØSD2&QÓµFTô5#IÅG¹—ž´ÄDËÍ0ÐÔÿ+sÓëPÊ¥[#š.Y Z¥:•~e$ÜUYv“ÏÒ’ØÅØEÊ8QÃa‰àc½li¾[µå²ƒ„ï×5•¨òœ?6Y°&ÝͶý+¢-D÷*j!Öé]~M§vF.¢3Ëi:Œù¯Ç§"¹ €ïÏ­Z!¡»© ÆšV“Û4Ä?qiÛóÎj,cÞ”t d¢@F)É)FÈb1Ö«Œ ^z¿¡sg—Þ­G¯j ÂÎH÷5Ž[½*¶Oî+5¿Œ¯â|7NõµgãÈÉÛr¬¼rGJóòsJxÍ+ =f×ÅÖ7r†5±©o0]Oµáùý*Ä7×0`Ç3sŒÔò¡Ýžà·Ã9 pzñÛê™7Ž:Öí¯Ž²§ Îir>ƒæ=–¹[OØÊ€™žù­KmrÒã&C“Ž´¬û†©÷ªq‚§Šê`’ë€qÖ¨ÝêÖª0dZ—©Hþˆ>µ˜Ü~5zûT·|á׿zËû\r7 +EÜÞ-w%ƒž•­§NÛqšÇÜ‘W,%ä1¥ÆÐ•™ÐJù#©¨Jþ䚌K¼…¥M0+G&¬Ùꊪp*9[üjhÆS'ò¨ç—‘A ÄåˆjXÁ¨£ÉlƦå8¦‰#Î*Ê6çÇZ¥ùñïëW"Q¾¦H"]rD9ªÀ«OÄ`f«Ê '‘¬HÄÛºž;Ôë'k87όեa·Ú.ö-©Ü:ÔªqÅVñÁ©C)X¥+“$òxô¦¹ç4Å|w§‘ÍRdl ŽÔõ;V S€%sEÄÆ©l“C!~•#ƒD$lÁ<â2\’"òp0hDÚÝ*föÍ9Bަ½¦ƒBm8aÖšÊ ` Ë&IÀÆpi *J=iØÍÔw"kv#'¥9ŸËƒbŽOz´ò(£v5S È8Î4šÐžvÇD àãš¹„±ª×(Ny=*ÌeØ¡&LÉ!Én½©ÅpA¹¦—˦œƒ w}*ìM™·9õéJÀ21éÇ!uPqUZP¯,†£-×=* À ±Íȃ Ä`sQ¼žj†ŽÔ‡g¹@¦ù=zP#ùs×fM±®GSU„ƒËbN+;êk2)â9Î8íQ˜þPOZ²:€{T@™@<i•Ì5W sN@{ ý)Ù@ÛH‰±ð{U\|âdç¥zŒ)Ž7AïÖ’pi\êX N øÓÁiûsA¢–ƒ㊬êI«›~^j´‹óqQÔ*N 9ª²îâ¯LIÅSbcER3l« ÁÆ9éÅ>ÅK^"ŒäšIÁ©ô»T@@פLj7c¸€m‰W¾*Zj”S±ÍZ8E¢’–˜Q@XJ(íK@ãFhÅv¢““GjZLÒ⎔œÒÒqGã@ ÞŒ÷³KL p)zR *ÉžÔœÑE'9 õ¥¤ ΊNÔ½é -€Ô†Š(¢Š^´(¢ŽôgµQ@¤¥ëE‘¹´†€+¸õª³UÉ+:áö𑢕ÂçëUÒ&—*€oô§\Î'ŠŠ  !¶“Æj DÍû˜Õ3ÏF¬»Ÿ’è„ß2œð ZÜî 7 ç#E@ÅfA/–AN ¥æ4hZîh‚çï•b(CBW¦+;N˜‰„lß7|zV¬^d/Œã'?Zu ¸‚Há9Á≀6Ç-’Ei[æWq#/=8¨n켸Ý:Œçšv–HŽ@Næêh’Ù½JyF*xÛÓŠ{‚Q¤n÷ D³Å°Ü˜lqŽ•nØ‹tÈÀe]x &™4¦N‡h g.Òc="Íj¹bûÏ|wªŽ~|ïܽ9銂8„—[m@jvk­RVV[lƇŽ8¤‚@ ‘ÛØ 2T`B Èç YŽØº&8ãæÅT†Å¯dß*£ïdðkV9¢±UŽ(ƒÉŽ3Ú£i?åÞ2O§½K i“3q†O­eÔÔf ºYTM^E<…T=9äÕ&`éûÄÈ^[ÓQž7¸Êœ3Dg°¦ÙûSº.ùž´ÉÜʹ‰Cض3Tã.ñ¸eݳœûPPd!úƒœR¸kªQWÆqÚ’5‰Þ§¯µ1$Kµ0Jß¾þ{}j½»½´ÆÈçSH¢ËBñ>è²PóÔT‰!åºOõ©VWŽÉ Éö5M¥y N[ø»õ¦"¼¶«­µHç#ëZ¶rGw„.U€Æ{ŠmÌLÖìè~d Ž¢E|ÕeÈ*Gs@úYÈ"É;°:Žõ‘5º<‹•ÎH­ÔQ£0 )(êsTÈŽhŸ Ë! äSb[•ÉL¡ß´pzEÌªŠøPN[Ö£B±Þ\õi­:+±cŒŸ” ‚Ñu¶!@rV€–Irªƒ'ôÓ3e@Ž2*y…¹g ´-"pÁþrr}èYcΠϰ¨$fV1¨ŽH9©¡ƒËRç𥲒ä1ÎqQç¤väÕ/ä$ýã×ÐTEF5ˆš2ÅI¦20p¸çëN {úRGÈÊOJ’ˆŒLdFñV|§U ˜â$` ãÚ¥‰8Éè:Ò)¬yš6#$5h.BàñUåQ´>8[ÆG+ÉäRh¤8pÓÖ=Ø$ÓAÛÁ\çô©cÁÆ)‰‚E€O¨¦œ6N)¯’Ǿ;ÓÑÆØ<N{P4’ „±R:Òpª²¶Ò¤‘‚ÔÒHc†?^ô»>]ÅCz{QaŠ#P1»§|ÔMÇŒSÈœçÖœaÄA‚2;Ó°_¹T*AsœzT*:V6í£œñLÜ=?¥ ‹çÆ3À¤rXsÔ °PàãsP+ ÊõïBC#êzqHÎ\ ­JÓœÓ8Æ(%Žƒ‘KdqRºâ˜0{RÅ9'$SY±Æ)Ù ñCsADlx¦7=)äô¨‰#¡¦‰dnFxüi0éJW'4Ò ž( °Ü0*7 ­OÏOZd€f¥BbS¨ ¥#˜ÀäñŠÐ˜¤Vp„¶sšhLϼÁFB?úÕ:k'Q÷]é׊’ú%GmƒÒ’%Û§ÛÉ"ü‚gSŽã´ËQ] žáÂYÎÃïG±˜8õª×öŽÐ­ÄEv—·áL‰Ìºd°°$Ã&}:Ž~•fÙÒ[I>q€@Ç®kS¬R¶Ž;©w -±p2qе º¼„ì ²xªÑâÊò5C¹ ‚[¯«ip‰ Á?0lŸ­_š!›—Ã)ÃîA°.ZEo“'8«Ñê7 $Ó–Üd)±Y¶r f|Œ'Þüý(« ’{"‘’ÝÆÞ´ÈáTœ+‚¿*а Šb2¬{u­}NÞÂ{t{y6ÊFJšVõ9yQbl(N¹$Têð2ˆ¶±þ23Í,¶¸:çœÔvZjÏ#}£{åÝ¿J¢aK«IX:°ç"³_G–cùNáb+©Õ4õ±š ­‘B…ØInO¥g\JËÉRr9µ-JNä…º³·ò â,Ÿ™ºœWžÝÁ%¼ï¼8'5ÞO4q&çÔò£¥pº„¦k·r»y#ªÅ%ÔªN;ÒäsHM'5däŽ{QÆ)¿(Ÿ¤À<Òž8¢‡NhÏzCÓŠOj8žx4¹Í74Ê€½.áÒ£æ”(ûˆïN ß5<ÓóŠ<7&¥Žáâå$eÿt⫃ÅãšÐþÔ»Û=ºö¨žòyÏ#}j¦isßî"S+s’UÓÇ׃P’ &p)Ðé×þgÈçž•¨¬·ƒ\¬…'R o¥Ã>Äç© ;£¢œô³:{ 7s“Z72õ®~ÆG…psëÒ­Ow¸ªjV¹Ôª&‹ñ°)ŠARMA r9àÕ‰~UúŒÒ+¡N<aÈÓ‹•Œçô¤U;¸?•8€G˜™yó3š½Ę&¨¯ßæ­BpÜPöM9P=j\b¤%@Sšz!-Ó­B4‰™å384­{âµâªM Î@ª¸äúŒC‘œÔnÕ\«.zj’<‘Hqdê¹æžKcÖ›烚œ¨à(¦6D3R¡ÛM#'JÀš•Ð’>;TRK•ëM–@:šÏ–ý¶gžàSK± ®¥õ¹b£wjkNXàʳÍÉ8 N*ItŒ:¦ARЋǹ¥ÌÉ¥–`äØ ÖlFâH÷øSàI¤”« b‹ ÷M?=\c##ß­Gê…‰ü)¿`r ©ÅWŠ ¬§¦x¥Ì8Åß9Ü:ÓÅÈcƒÒ¡{&¹È»Ì§w®)s£U8v/¥ØØ©¾ÜŒŠ¯ý–[¡ª×6r[¡#œzQ΋Rrkð£ƒTÍæìäÑmd× ½‰T§ïõ¤æƒÚÁhU3œž´¿mGëŠG³"`¹àö§Ï§ ÈãÔÑœª­¬WkŸ5IçŽÕOÏ>fÒx=«Z+ŒŽHªÙ=°:QÌ›3ua˜ã5h‰ãœzŽaŒäÓ´ù ÃŽÍéVŒªlÏA\àf–š½4µhኤ¥ëÖ˜z3EPæ’Š(£ŒÑGá@âƒE ^ô”q@í-%ô ´hۭͯ-±EhH¿JoSJi( ÑïE%¨4´”RÒPEPÒŠ(é@ IÒŠ(ïEPRÑG~4‡­˜í·¥!€9¬Ë€&­Ìç©5JfÊŸ\T°0ï¼W¹¨.É'<` µ8‘¥ã€* ­ÝÛqlŒtô¨e¡±\ɪ֭ۜDVéK.Ž]­P’)YQð ¯Ö¬G&ÅgUÀM!ù“ZG»QeÆÒG¾+`9’Þ9^ø<ŠÊ·t»`èq ¡«q9KuRF@éŽõI’ËLäœc¡WUÄÑ´nr㹬ËiDÐíbC‘ƒíV#ÄèsÓï{ÓòJæßt  ã<úÔ®TSÐb´¦e,H¢³$„<€äzÒ#ùaOQÓž•aÈvN¼dtª¦ Cíaž‚¬ yÔa]G8!ù ei-‰“pSƒV<’H\‘Œb´¢µWU%Çê+‡PûGœf˜ŠrÁäF#“NEà:fª]K)!Kçn9ÏiId[¦O<Ð; ‚ËÈd$Ò¬\I&ÔŸ&zš† ÖcϽLÓC¹yسò0;P&R2ºÍ‹àê*µ¸q1yvŒ9gíÌì qÉ ¢Mƒ€¯Ô(½b¨ôô¦ÊÅ Øì)ÌB‘õà硨$diÌr9ºg±¡Ë‰ÍŽTãË#8ãŠØž!ugÚ…Wg;‡JÌS¸4n›pp1ÜVΖö‘8ÆÆ;{Ð>ƒííìØàm*¨=ëEÞ5\àê;×A`ñÇå@Ù;³øÖ=ÙÅì»"3E0E—"8U‰ÈeÎMg¼»£XŽ3V/& kn’+29#3+!ˆÈ¡©¸Òy&™HŽ]¬¤H椎âéçœSá.n—ð*IHÓ‚•^E"5#¹©$¥PONsšGa$˜åQŠLi„h¬Càà:½Â¦@ªæÚ­Ì­åÀù½:ŠÅ'vD]FI=*l™n0§œÔ1B±ŸZ¶¹& Ð|©²%_\qS  ‚[§¶jìò@â¦`ÖÐ4¤¹,:ú °…”`ƒU˜êTöÎ*aò ÉnhCD€ÛK2iÆHüÐIAÉÇSBPPO¡þ´ƒæaòŽp:še!È{„óH G#Ú¤žâѾ[xÜcÖ•v$Ye³Œvô§¤ŽwÏÌ:ûU-„Ù Ü[*ƒå»HpWŠp¸·™lcÓxïOhÙ¾p8Áät¨&$Æ£ 6žp(¸˜É„É) à c䬭†s¸}ÜR:8“O š² *9 Þ“*$.¸É j& xSÒ¬M¿so\6sÅDIBIÈ©ÒÎIð¨ß{¼žsO/Ðb™Ÿ98¦!ŽoÊEE¹ÔŽ«'< …ÔîÈÏZLž¢£ó†ZŽHÇJ äÒœœäÐ>„e†yÍ@ÄÖ§##8¨ÏCÅF:šd‡=éÛFiŒ¡³Å¬¦TŒŠ‹~áƒ×öxÏðy©c œUG$ç­Y2ðj£6O#\–E:’:ž:ÔwËÒP²aŒöÈæ¬• Æ~cÒ¡*ÍeqåÃtî+X3ž¡—µSZx#l$ІãŽÕ÷²‘ÄœÀ̹ÛÔ TÉ ®¡mp§wîÙžâŸrª·’çc #5²9å¹Zfz푹 *h¤xf–ß^#¿µK ²6 ØUÈ¡¥ß ÝÎw€jÑ •íc7pÜ®§8ýjž°ïgTQÀ_ZÔ¶Õl­"uUPÍè2j±¹IݘöîzbÅ ©/½V$ÀÅgϪÆ×rÄ‘1tþ08#Ú™{yµv ”>õPNÂ%Ý€§°äŠ¡j[[â܇éíZ :›}ÌBôÆ;L›ã·ùHÈlÔ€É>äa„ÇvëRÊ/ë}™vHeã'efÝÈgwmÅJŽsÚ¡˜…x »T5‡–ÖÊ)äWûû[¸¥{°µ‘y|Ï4hØQ’èk›žo=÷Á<œV½µÙ{É`‚ާ ‘Þ±¥¢rŒ#ŠÑ+Ù^zP3G~iHÇJb‘ÐRuïF;ÒŸJsŠ(Œó@¾i;ÒñÞ“œPÁëJéM$.;Ñž}i1šR óÉ£§ZN½.8é@M'4ìRPƒÚ—9¦ãšQÀë@y£4 IÉ döëºuu5ÛéúPHÕÊõ®) r+Ç5ê6WPK¦£‚¿wŸZÊ­í¡pÜ…ÑcZDW#Ôu¦ÞßÃpëøVSë;l “îkÆ] ›GEÜ«óý*”ÛâÇ·Z»±Ï½S:¢´©Žy¤ ‘Š•“k“ëPHvô¦&ŠùýájçÖ©’<ÎM]‡ÞŽ‚Eöo‘sVmÛ"¨¸ÍY¶zÔXÑl^TÉäSdˆc¥II©>9 Næl ¤ãéTJôæµ%\+Vs§Ö¨pܳœcƒQBêo,ŽEMÍAp3QLISŽ{Ó3ž !;}ß1¬«Ûœ²|WFƒŒb¡ž!’©I¢\#-Í£Œ#“í[–Òm· äb©ÜÛ 1“U ¸–Ýן™H?­>TÎiá¤µŽ¦Ð°¸±e¡]ÜŒñÁ©å‰£‘?ˆr=*m_ıkÛ•‰#e@ç¦k:{„n\uõ©å¾æ6kFlÀP¡ÝÜUQý àRÃ:ÁT-wsrÃó¬ùt-"óF b¢²ˆ!eÇzŒj1(É`~•Z-fÝf˜ j›}ätǸQÞÛ.Ò0+)|E MsôNãÄrNNÄ8ëƒÞŸ²`“f­ª¤jT1Ç5²¢÷®~]Fä’W š¬÷w ËH:zQì[/•!åVг4`ÄF;s\¤Z”ñ’¬NÕ$þ)*¤4m‘éG±‘2‹6R@Fj„ ³+ÓÄ0ËÙSžô±ë-¹RsœzSTÚz‰AËbÅÝÀˆ²Žµ™©š}äu4âÆâ]äuçš¿k^ Íi~U¡ÓN…µ‘jÖ˜ö­œgU{b­¡ù0jnT•ƾWHŒs’)Ì2@ÏZ9â¤MXO)çÖ™ æŸ!ÍDRc¨ÌØš±$¼Õ+†â½µ!B‰Î* fýjÄ*H-Ž3Q¸ÛŽÕHË©FsÛ5.Œ7j°ŒóžÕÆwM]ðâÔÔ÷^xhÊ®Çp½/JAÒ–©BûRQß4u4ÀZ((Ù¤¢Ž(úQš?•J(¤¥ Š( QE-0 óÒŒÑűõ£4 Z²D dt¥¤ï@ ŽÔKHhâ’–’€A¢Š(ö£µbŠ( ÑGãE”´P0QAõ BUÝÁ94é_­VgÉ4†C;N*•ǚР2æªÏåâ“8¦øóžµ DB°`@< ¸Çh(?JjgÉ%†N{ÔQ hÁ¾ñ/=éhÊë÷ºÕ—›X8éÏz•íD(µ¸È¥aÜ © ©VY‚ä£=kB'ãò*ôÔó¼Ù%©Y|·¨Hª¢2ß7j’[€X1Þ¡wt@N ·OjŒIŒQò1Îi’J/ o¸(e?xÚ¥Yô듃!GˆïU¥EHr0@8ª†6ä¬[‡¯zkùVùÂHÍÇ­){XÆd~üâ³ìL…€ìE[™K˱Àù±Œ´ìÒ_*"˜Á+ߎÕ^í˘ÝHù‡nÕ;A‘´.0@"˜ð²í€3ži\,UTAÉÜÂz• E ¹ àŠzÆÈ_¯®zU‘*ðA/ÏZarÆÈؑדííY°–YVN7  <`Õ©—zN>‚ –ÊGÜPWÌs²»• »@«&ì žÔ·¥ËG(*ŒpG[û†Kh;·p(¬R³9UăïžõjþYá¸nÔp;{Õ HÚ)äp Õ¿ã†UcF>ïPh•.Sß©£§\ˆÖwÆD«ëY†'a‰x9íV£"8€Ȥë>émÝ0G\ÕRrñ’ ÿ^h„£ÏÐTªd…=ª½Á’Y÷AÉ?Jliu9$0X¢.8ëH¬gUd!0>•h!fÀàzñK%°³¹hð=;T”‰t ¦_'²ŠºÑù’Ž0à{ÕKh#`áWíœ}çän}£ð ¢R§æù³O „íùˆÀãD¤`nàƒDØOåL‘º;uq1š"·EóQ»÷ Ž•´¤ˆ0S ñÖ¬À¥œ0ê â£Ô w2• ­t&sKs6Ù £–Y]|Äû½¾µbYmسòI9'úUfRó`8ô­ ¥ÜŽc} Aw!¡í§ÄÉçE.4ûx¦‡wœØ'ÈëUݤòÉ-´ŸâýêO9–(w¸vS–9ëL’ÜöÂXÿ{ °}ªºÃ¹¶7nµY-4!Ô ª>ëR,ÑÆ’awÉ!8ä Iå(PyÀô5Jî7‹pŒ`H­›y;pïól±ŠÍigvÚ0üçÒ“1b…îuîYñ+©ÏáV|Kn ‚JtÚ^)\;]$Hv§¦>ñ÷¥ñ ,,+ ƒ´†ìhêŠg Éäl_âÛƒÇj®î'ùHá»ãÒ­Ý4h;ärG­f‚CdzV„TƒÓÚñSºù‘ù«Øá¸ïQÆ{P>”`õ§qI(;IƒJ1ëAÆ:Ð!94íNŠny‌ž”¸49=é{äPr)=)H&ŽqÅ/"“­ cFH ÅÐcœQžsš1Š;PH={Q¸P1qÅ $v¥8¤äP“ÍN/'6,®1Á¨:Ò18 D†yåãKŸ9 =Å@õ' Šïô¹>T³ùÇã\Þ–åí£qÓ· $¨>•Ï%©êRÖ&‰Œ²gRHrUø[rãh’3Šg<à«°Å\·lß Òì¸nF;S­Žjº·4S%sÞ¬CÜôªªÄ b¬DsPô4F„lzÔÅŽ:ÕXF*ÀP275™:m“ŠÓu!±U.”c4ì-™Ï®HÅQŠãµ[²84PöñLd†5'ZP$(lp>•Œõ¥99¤ÉcƒK©j%I€éTg€œV…À }*¦7zÓ6‚º3Œd¯\ö¨®må¸gqƒØÖ²Â=)ÞRŽp)óXS„e£FBý¶(Â,§o½@ö÷2>摉õ¾ Ú¤[Uª¹Œý”;6lÐæÆî+Áä{ÕfŽS#¸Ít?f€¡lÁ9Å>pöP9ï.sÛéJÜn :uúŠß6€v§ `£G8¹#ÐÁ+q°©Ç'" 1Mœ1ö®ˆÚ†^•Y`çèæ)B&Ùä'“ÅBl2I'<×Gö1Œb”Y9ך\ÃäSœAx ÇÒ§[b: Ùû(ô [àc¥.aèŒø!eãj¼ŠGZvÀ•HR½É{’FÞzÔÁŠ÷Èϵ+’Z‚lNÍÐT©ÌcÖ©ïÉÁ«p’V™œ·&AŽqÒ™0'z—8 ¬1šbL©)«>gËíÍ\™°ÙíTñ¾CÓŠhrÑÆLT2¸“VÈÂtíTfð¯$>2¿ÁÆÚUñ¥òŽB¶}èä}ÂþG­yÈz‘Kç'LŠò_øM/pr¹Î;ÔŸð›]ðvž´r°æò=WÏ@y"2kɤñán\Ò/Œ¯‚à§4r>áÍäzÉž1ÎáGžŸÞäŸð˜_ýÞ˜§Þ•9QœñÚŽGÜ/ä{­- ¥ªQïGj(¤¢“ë@ íIEv¢Š(£ëGãGZ(¤¥ ïKIÖŠZ(´‡­àSXúRša¤“·š¨_jfíUÅ!ŽŽS³†¢i$˜NÆ>ý)¬ \úRc!“Œ“Æ*3:…PSR Ãu¤1 RHät5#yÜ>•¡ ³¾rL“Ul-$¹›';Ga[2‘ïNÖœðàp£©¬‰'w˜¢)ÇL‘Z·3y¬T½ª«BJ€½{àS°áŒýœÇ;îu;”ÓmËÆGCV a$°#Ú¢hÕ£åöã½ "ÞBzdo$’0û t4ã•ÚdÝâfŠ(7HÁÇziXªˆÀÙ—n«VÑÂÊÒ¸£lY1K4²Fñ¨¤±Ò›4“Ã:*cc¶h¸¬t_eW;Ô¸É>µRXÕF@Î*$öÆ ˜ËSd¸)~\zP æʘàZ‰$1üä“ÐcÒ’i|¸É&×RéHd·aŒ,ñsÇnyªqÜ$¸b9Ú¯Û$|¶GµgJŽŽÆ0¹=Gµ0±id‰ãÁ ç"«^ÕPÌsõªå6(pvö”†[·„rH\f­ÞÛÈÜîÈçÚ¢€€Â]ãi#ñ«/8"È8 Ó@HÖB07™éÜVqw†$‘Á$~5·ââSjƒÊ²nb1_2<ñCV} ¡Á<í\þ5VI €áqùÔ£qŠLpIÀ÷¨!RäÅ'P9"³f¨™[k ÁZcýå,;‘QÄÛØÄýØÅ9ˆ(Ä–àþ©*â;M$‘Ä‹„ûÇ”ùnaŒm—Ç8=ª.F‹ÌPB¹#wr)ðÙĸ¨#¹<Òe$9U昃¦MY.ØšX¢‰988«hÆ¥Cz‘†ÀQŒž>•b4 y8¨b%x:‚OJW*ĸdsOåäR/ “Èô£!Î1òúÒ“-làbžHå¿•3h-ŽŸÒœ«‚HÐõmÌ3ü©à᱓ڄPÙÇJ•xäON{SWÀ’Ç,¼ا±dh±1ÇÞç­`ßÙ8 äîAÐ’j ^Y¼hŠH9vÎqÏLR„'#âbŒ²‚¾üSŒž$E?`ÛÙC¢8Ùò¦åÎIh ä;¦ìíãŒÐ‰bI îàî$v¦.J°gã‚îiÌX•°9½ .A#84нÈdTÜÇ ŠB¤!¡ã¡©>Rçy<‚8õ¡Xðzt Åh×€I¥#¯ÌJvмfœª üÄЂä NìúÓñòäqLe#= HO'Š`BO̘ùÎ=:T޹zRƹ êy¥a2«Þš€çš–BA¦/­Æâ¡;‰ëíVXj¼ñI‚"e$sP²·­Ze¨õ, ²nÎIöªŽw ÑtÜ0EQpNGJd²œ lÈÕYŽFÐjì *àvÉéT[—éÖœL¤Ii óvgàSnÝãùÜgøIÓ½C¼A+;t úÓïeŽDP‡ä`{t®ˆ³ž}ÌFãß,xe$‡\õ«ÒËñ`“¼(ÍVdx¦ÂüÊÇinV( 4X,ç sVŒÙfÏsK³ibq׊|±:7˜Aäœ ’ÆàF“ÈHÓ™™É ˆŽjˆ-[£¥¡òÝ»RÁûµrrrIZ}¥ÈšÝãiã#šÐµtAÞ@ 4çŽ8`—-È@Ö2É#+þ¬x­ µeÜÈ7 œQjÂ[t7iåè¸íC(BñE+O(ÿUÓ#½QÔ'kù°Fß9ˆZ¹sºStŸ6Å!”ã’+ì±”In`¸P;RˆÙÇ߯ÑÞK. ±5[š×Ö•óÏE‘A+œóÐÖfô^Z,LU¶¶v·£a‚@4ÝÔÓy" Ž:ÓqêiwFh曚vi  'Ž´Ðpx¥8 q@O<ÒàÒçÚÀŽœÐr;ÓsëKõ¤àŠ9=¸¥#½ãäP‚GzJQïHq@jQ@8íA $Q’x¤üi@Ï8 kœŒÒž´6H Þž 颜¸4ÓèS–µÚO*{×Io)+Áâ¸ýör®ºÓjÊ{Øy^65¬e#‚kKh)’kAC¸z¾“îL×µA¹©DD½=T…¶J nO0}+ hÌ3<h]‰’êi#ïQô«’*«Ž=jÚ9Ú¥…Í8œb¬#`cB)3V£'%¤I!sU¥”⬾¨vœöªLžÀ«’zUˆ[<Ó$OšœÕ¡Ž2èZ^zÐäM雉<Ò--f;€¥ÏqHãë@SRÙª°ÙŸëU|àUæ`ԀЃR»0BÇ‘JÉÅ>,´Éæh™(É©•FzURÜðjX¥ã“LWe•@ UˆqÀÇCš¨%£ÎnÔÅ©fH €)hʼõªí1+‚O4Ä‘•†N´gbûÁ¨UGI#Þ‘¦g=j"ǽI h@=*6Ç SŒÇb£ã9&¸ÂçÖšªœúÓ˜æšÞÆ“1€P‹ÇZ6çžõ*´CHHS”äô¨älúÔ¯‚¼Š‰†zR‰†*sÒ®ÂEPF!ˆôö«ÑcŠ£nXaòÕi›¦vÇz§3|Àb’Šó±Ú*‡ÍÇ?Z|¤–›9ªDHšSµ1šÏ”÷>õjgÏš£rÁWŠ 25‚+8=:\Œî^Bƶõ›‘·`ïÉâ°Xó[ÁYuåwa‡ÚŽqŠVö¤íV`($œâ—$nqÆ(švOJwÓŠa>ÔgÖ€ŒQ“šfh E;w4ârqMêhÁþ &hÁ šnx É£<õÝØâ—´îÔ JSž”é€J ¢­u¤ ¢Š ”´”Ræ ?;Ðh£½™¥<ÑŠc*"õ3Uy9¤2'#“UŽsO™Èâ©Kpâò®FN1MŒm“Pîó˜½)Äy ߥHÉ%Ûs÷¿•4ÈÄŒtôª³ÜÃ,Ç­X†9 n~‡¥ 7¬[ìö# g½C>d;ËazÓf­¬hNN;U9¸ ì@ïLlYï"Œa{¸ªé©–l´{x¨fòòUzt«±?7?Jj¥ÉvÎN#ŠhÛzá³ÀDZàbÃrüþª*Ü—áÉR££ Ña²=E!„íLœT¬š9$)(!sÇ5ֻɻw$Š¢¯, YIõÀæ’êtƒË¶ˆ³?sJvHªàäãJÇIÞeÎÕnyïíZ6ìZ ™+ØÓ(²%epûÃRÌY!ÊäqÍD•qócM¼»0Æ`ƒÒ2Œ¬e“x$sÖ¤UÃüÌOäö¨Òh˦åÚJ’OQV2oÙµ°3Á¡¡ƒL±ªaŠžÄ |B+€Êò…|÷èMg¹hÓkžÙþT©){|°³ó(B,Ýé²2z¯@©¦[,ù"DuªýsÛš‡Ï’%ó"—åÏB9Õ%µõËÜ#˼¡ë‘ÐÓè’9JÚùØ`XìlŽôÀÅU‚½¥[©TaK|Æ£‘P">^j@¨àʤŒ£s´¢º.P°<6+E,ßi|ÃzÐé2¸õçšWKA»å.{`;Sä\]d|­Œ6+EIlï)ÛŠ¢#,Ìb_Ƙ‡ï’Çgw§Ö¡‰Þy7ƒ’îN 6'2;(ÁÁùÈè*Ôk±ÕJ„=F:@ÑNcöÌsœÒÞ…k¥$üÅô¦Ûoœ(¼Á¹Fäap}ÍêQÑá'¸äc½,ŒŸj8vÑ“ïRù n˜üŒsŽ˜¨å‹¼œ`ÖlÑ1¢A,²1be} BÚ *Kj°‰ºã’vŽyâŸq ŠôÒsÒ—B“ÔjnXQµb(ö­1’Bç§µX Ž•”¤m …y!x<{Ò‘žXT§SŒàdæ©fÜËÒ“.+¸õM«Á©å^¦¢T;sŒÔýHÀ ÈŽÀ9÷¡NFT÷¥À*OzPgqëC 1€9'y§¢ÔŽ9 !?1=iÞ@+ɦ€‘$C€~0*B@CÇ=rj% är(2‡l¾1Ø w$aš<°`„õõ¶9Å5rø…ìJqÈÎÃÏz¤;Ž'¼Ò(l‡iùÀô©VÝrAŸziË!äü¾ôö\£ñÂð>´Ê­÷²*h€gC¼?:Œ€8ê)ñ”YaÉÇÏŠE Ãb…R3È©ïcXnš4`À½@F$È;SªÊŠH2Ò=Á¥fG4ÈŽ%v9¥`d3/Ͱç=銥•bq¹‹ ‰FzÒê è6CÀ SJñÅHF3Š`Ž ã ¡Ô20QÍO.I*aWǽ&2:žsŠ¡(ò _xÀLÒ©ºŒp¸©°Š¯ÏãÖ³%“ó­9FñTfBpÞµH‰"•Ã'~FáÖ¡Žo>É'tc=9À©'«©Êð}ë6Ògj»ÆH*GAZÀÆh‘‹ÊŒÜœðyÇ­*£2‘¿÷dço¡õùÑã‘7©LŒr:Ðî• VÈÀ°d ÄÇÌFâiyˆ—œr:Ôo¦Ü´"hÛå' ëJic IÜ?!NÄèY´so4‚VÎÞjÒÞ¶ÂàtµTœ‰™¶‚p2¼ƒõ§"4m°’r8ÀÍF·—w(i]‘ ö4ûœ[qƒ°ÕD™€P@ >ö)“ÈÀªn$1I°±$3I3󸬛ӈe2BTlÀd85§lÏ`SæÝÏÒ£ÔB^@ñÄØ;€轘=NæKw²a”H®Ù sÅgæ­]E䪩p͸䊫ÏjÔÌ­ûÑÛ­ “·Z^¤ÁÏ4x£‘ÖŽ1Å€ IŒqOIÈ4Ò8£¥ žÔ‹œæ€š¿CGC@ œ3ëGÑÐОô„g½/z(9 Kž)½/è sGJ1šÅ)ö¤#+@Æ´ðy¦4å Fþ…oö˜åÆw'5ÓXJÊOÌ+™ðÅЂÿaèà Ý•^Òóp)=k9#ZS³:(вàý)ëS‘š§i7˜ÍiÄAŽ©ž‚Ô•0Pg¨¬íV  •£€@ª÷}»>”üÅn†5£øÉÇ­k(\&±ÐçÁàV¬d4c­7Ü”úUr85j'#ªÂÜàö«qš†irnqHã+šz—¦¶vœ )ºœæ˜:àÔÍ×& aóg5Bå,))Û@ Nz”š–ZH#>”àsÒ£<÷§)ÀéRh‡5FÀ÷§Œ7Z erœâšÑš˜cqæ†\ŒÓˆV?Z=jd⦠„ž¢„ÄBÔšxŒŽ†œ(¨ö¦"víÞ”tç¸sM~šó€¹܃֓?. qI…†sMe,1OqžhVr(—HSæ©X`Z@p:R m#‚)éÅ?óÞ™œpqH• PŽZ”0Áªìi¢X±dlÕÈÀ œU#ÍúÖ”xòÆ?lǨŒN0j¬¸ÎqVܽ*•ÉàÐQ\€XŸÊŸàiйàÔ’±àhÎ[•¦;›îk.úM±’OJÐ…SÍsÚÄå!~y¦–¤KEsš½˜ËpÇô¹Á A‚G`ÑÓ¡£ QF@ê):ó@ õ¥Ï¨¦÷£ ÐÁi§&“Ú”Pî!qŠ@xëFrsŠOj\óKži¾Ôgµ8“Hi7v¥´R}ii;Ðh¢Ž”QIE(¤¥¤ ¤Q@Q@(&Ž´(Ö¨d©J†@iNEœÖ}ÂÓô«· @"±n¦ulƒÍK#bG<Ñ4Â=OZW·.G=ê" ´“‘žHÙjVIŸrüªzÑ-êïXP Ydòâp8ªVð‡š<ä³{Ó@nî܉J­6âŽýsW«¢ÇÊ;TN¬SžÃÉGù—)Ò–0dœD«Ô¼òÅåùrÅÊÿi–/^$Ѷâ‡q@šÍmäO%˜1=Auì$R®+Rïk]佚«ª&äC¼8÷¦SI¦<¿˜q’iªŠ[‚’8¦Y~ð#¸5 ̪€€N9¤2Ä·BU$PyÆGz½³FÚ¼r b93®í €1“Jneµ‰óä²äŽ˜´ötÞbÉ`A9ÁÇ­Ep«-¶ï(’Ì A`ë5š:䃌ӈu˜¯ü³=3ëH<†1â€.* YÑCDÇp<â¦!$Ü`1ÉëI /ƒH¬¤2çè£d)ÈÈ#Þ¬)2C¿€*¬çÉ rO5,Ò+Rd"6$‘ÀFÛå“9ƒÏJ¶Là Æ=iq—NT8Oâ$u9ªwS¬vNÊ1òí9M_Õ’e”ÑvíXºÜ\²|¨79ì­( oCޏ#Ì rzkߎ*ÛF‘»FÐ?3éUe»g ô­Œ†uë@ô¼È£¨Î1@O4¹Í!‡Š_z¢ƒœPœšQŸZo=§0h§$óKô Ð ë@úSOZ\úRc½.8àQøR~½øRäâ›õ¥Œf€E¥éI@ ÚŠNzÒç¶(GCKŒÓyN8#ŠˆŽy§/¥4ŽiFhĤYU9è𮩤E*©,«“ÍyÒð:WmàÍ@|Ö®2AÈÔ¥°läx¤Øx*JÜ·˜qš©«i¥OC×^ÞrFZÉ«êŽÚ5:3£PÜ–åz†ÚcŽMXfV[3©Y˜·qa³SÙ¹8楿ˆ”ϧ5VÔ‘Œš´îŒÚ³6yÏ&§BCc5U$;Jš7ËgÒ“U‹ÊNÜö¥ažE1pÇ­J¸ªMVÅycš¨ã´%+Фãšhc¢84é=iˆ9© æ“ b÷ˆÇçNÀÏâëAW$Ç¥4‚z4½êXÓ¹¦y©eqM8 žôå‘{A¥ô$ŒdSñ•ÅG¼šF›åâ‚u¸­òŽMD\?:c9$ÓpzÓ¹\£Ã€H ¸ ‚)IäÓÆÐÄ‘š¢l&Gznð8»"šÊJ.1¯&WÒ˜“`E9ãâ«O<Ò+•X¸%OR§ Õ ûHÔÁïRC‰1wЉÍJãHz Þ´g=i‘L͈Ÿ+vö­+ƒYàž¾•r&Ä`Õ˜·©,ŸwTe9$U‰%%zU7›šV-l=3Ÿ¥E3‘Å=_Š­q.Xž´¶U¹ùdü×#­\&Àk£ºŸ ÞÃ5Å^ÍæÜ9'<Ö´Ö§=whجy¤íŠLàñKï[aZN´ž”‡¤ãµ¥íIÁ žÆŠ£µ.8àRcÚŒÒÐŽ3@8„óKÆzô ¥%.s@PšJ8Ï¥/JCŠ8 óAÀéúÓƒÙBŽ‚­Ê¿¹3c¨ëR7¹Zö·¨àÔq ACóTÀ¬ë¹ŒTHãdg }j–‚:¦kHÙxmœûÕr‰*•'àÔv˜¶òذô5¹YX†ùO"†G7”NìzÕ0ÞûÌ‹##UÖo3’Àª²¬ÙéÇò¥p°·–‡cT%¹º@e!TdZšge…™Æp(µRdÎ ‘ùS¸È®bp6ƒÈèEf]?Ù“%rØÉÍmÉ„²w¢³/Ã\LÅÂ(æ•ÄSl‡|Mò°;ö©¤d²Á;Yx÷÷ªˆ¨»vt#µkÆ-îm-µñ†Ö¨v,i,‘C 9`¥v±bñLaƒdýáÆ+*ÑÄAìÞLŸ¼‡Ö¶ ¶À^RÞlcd€w¿ÿZ€(̪ʤ™‡çO‚"² ;”ç¥K=°`NqÈaÞa`;‡+ÆsIŒ°#K˜öÈu9R*”‹"£ xÇCO™Ô)pŒ~éõ” Z8ˆÉ8Ǭ[[µÀ:˜Î~aëW|¤BC)UÆr+1î§€‚sÛ¥XKɤa¸äsÅ4„Y“ ¡bùŽ8&–ãýa¶3PÍrr…²sÀT/0’ `ÜñÞ鈳5‹«£BÃõ^êÚKˆ’HŸdƒªZÕ¶ºÚÛ>P2riø·bLD«fÜ̵„¶<З¯¡¢V$°Ëôîh‘1sÔT ®~W~æ‹Mb‘ö…c´uâ´!¶*çžzSƒC%ÎKt¢ŒÊ !É$AH.(Y6DpsùÕhNë—,IÚ0E:ivÄõ¤²…T3’Û‰,¥&RE„a ENyéU$•dœ1¶ö4Íònà·P 2!ˆ˜•Ï_jÊLÚ ¨±ï”“ާ€;P¤µÓ.0Í9‘0NÐh²‰¶4’X·ì*[²5Š»¹d(%”àñV•þ\µZ@cu õ 6`Ÿ\V{š- È.ع§Çž£ëO·#vHƒÖeWél+ß@o˜ãŸ­=QŒR!Èæ‡ œh)"A íJÒarZ¬ò\jáðIúQ¸DÁ›§n¾´¦P«ÈÇ®iܧ× zÚ‰d,Äõi’ÈLÃkmÝœãð¥Žu…KHáøF{Õï³)‡§­W–Òу3M#¨,8§r[E9u<>Z9p9>Õž×6…™3ˤŸJ¹4va ˆ¹8 7z¦‰j­•ž<ñÐŽ*“Ð@.c–ƒÉ¡ëŸzy–Ú\ríèzcð¨Z&rÆ9„À¥x’Eñ:68qØÓ¸·¸ÃC aØ0Á©’eá£?z§o½k¸wéšHVE_­!Ø–@Uƒ žÝ*hfaċϵ1“vAa‚>_Qõ ¡!YOJ‘¢Ê˵ÎÓžüÔ‹!bOJ¬Þ3éO߆w,¤Z¸ž)>r…çŠXã)ìœñN —w÷y¤UÉåGY¹ÜqëÞ ²7c‘S8Ë1䊪ß'^j®lÌqÖ™&@E$­ºŸd¤$ç)=Áè‰9ª“?8«sœsšÎ™Á42Så#©ÅDf8ÍBK<£â–GÛך%Èd·´ìBMT:”±afUô85$ŒÎH/¹¬ë¸ƒ¶ÐÙÈ늵C‘iõD\O¯'‘D—k"© ׀ñ÷¬Y#¶³¤·ž¹ç4ĺóFÅPIá¸ö=håÎŽ+ IWíNg²0+ž†ô™|§%\üUŸ¶…uËepGcRÐÃS@0Ä{Ö;y±ÈΤ˜Éé[ʳAË|Àô¬É›çA»•õ¤ ª2½Äbßrv“¸ö5¤EwÚÎ}êÖ§@Ž1ó $zVd”gB«žÀò Z3{ã<¬ ?PG¥H’aÕ¤”‘žp3T«Y6°<´‚]™œsTA<ó¼² tÉâªÀ² F:žsVÁ}çEjÕ¶Ÿssº!U<ïLØ÷³IÜÞ˜è*@¬Ö°ËŒ `j¸öŸcCÒÏ·‘õµ«<Ð[û‰–ï¶n:ìÀ¦ßÍPê¨`®c[¼0Ø’ãb×C{ƒ|òF FÞrþ%œRÃ-ž8î'±ÌÌwž3Ú =qR;—äñL>½kBÏ8ƒœô  \àu ž€R¼zÒg AŸJ^sÖ‚i? &M8ôÍ'µ4‚qJ>´gšR2:ÐcÞéCqH(NzÒ`ކ”ƒžOŽôiz”€c½(â€yéF3ÎhïAàu ™9 úŠ:ŽhÏZpÏ\SpA¥Ž(aMéNaÜšoÒ€*öŸvöW‘̤€?J¢2Z~}è×ln⿵P •aU/tÇŒ‘—=…ržÕ¼ë ò猚ô˜]naÁ9Vr\».Ìç­æ#ƒÔUă“R^éE[Ì‹>¸ª¡I]¤r*¹ÛJ­÷-HÂhØV\yŽFB«*僚†èêÀð}êR±³w/ÀÜ:ÔésTí›åQŸÂ®íIšEh]¸©I }j´l"¬ ¼õ©)"'cÒ£‘«;µFA"šeXŽ01Kœ7Šn ätÍ4x4¢Bz…ƒoâœ\«b¿zb%Æ)¤œâ˜dùy4ä|Z’â) Ó~”¹ÏJE#wJV.âàž)=ÅH«íO m¤Re`™n´ý  að(*pjÐ]ˆn¡¢!jDÀòw wʈ8&—?ãOd#‘HÈàd÷ wCY[¯5 žÄ™XàäTmµ¸#½HÓ±ÞœR¨Ë ~5!\ò)«Þ¥ ºd˜Áþ´1È⑘Ȩ÷e~£"‘#_ŽjĵLܯ5 1ªFmS“VÔ‘ RSó*ê·ÉTemH¦}£Y‰vàT³°c×œÔ ãšB1!x5Fî@‘œu>ÕfGâ³çä=x¦‘ Ú¥Á†ÜŒœ·Šæ[’I¯HÔ|(×ZjÊ£æÛ“Šà/le³˜¤ŠxïŠÞ­¡ÃZW‘Oè§4€àsVb0‚M½iHæ€tsIÏ4)sëI“ÖŽsÖ€¯ w¢îhqÍ.22M ëÉ¥'Þ€­šMБÍ/&ŒŒRgÒ€IÖ”ó@úÐÈ‘A'4”õ¥¤¥Ïb“ñ¥íIŠ`Ph÷¤IE´”Q@ IFy¢€ =¨#ÒŽ´QA4PÒQE5”U9›m\sÅf^1U5,ek‰ ͺaä÷éQ\]²¾ R¼»,£š†ZE´™›Ç± m-‹ tuô¬½2?µÃq¹«oO;^Kv` õ Lç|É‘öIØö­_20\z†ÅÑ,7ޤU>µ ´¤®ÒÄà÷£p[Ř¥,Ãåcƒõ©.£b«$g‚y¨J’ÇiàŽ”±LÀ4ràÛÖ€Õÿ´9]® ž;U™6w?Z‰¶3^¸æ€ ‘RX‘ÜÓ˜Š‘/AÅ]†ÙÛÌ#';BÒC&q98éNÀ@mšHø'®+6òÐÄcÉ8®¢X¼µUQÉ=+3UµÛc÷‰È'°¤3ÛEp6¨¸è:Ô6óZ6P™ïS¤R‰ 2sSùo8TÞÄzžhzjRMèT°Iî®ôùÍÈèk¡Hš dŒíeרÔÖ–k }ÍCrâ9 Ó·­bê]ª‚Qó&ŒH óПëUÔ$w2Á"ð˸vÁ©ã|`““Ó™ä`Œ©ÏQZ©\åœ\Dò…ÔHH¦@¨ˆu\*C“OØ(N1œqM˜²7¡'Њfv!–`É’>éäcùPÓ€$ÿ–€”ôÍ=„lù9ƒ×äSb`!ÀÈäS@ÑcÌEDÝ•~„ö¦¡)6Ò¿+gúÑ,lclel03än žµUå‘ä'ÌR«ÇáQÌKãw âÒ¾ƒŒO.Ö”ã^9«TŠ›#—ÆGPEF»eä·ÍГéJѦÀªO\õ¨lÒ)‘ÉÓH °EQ€1×Þ¬¤I°lŒ’*8ýÜ;“V6 €2qëY9#hĉ‘ÝðNjÜQ@8Çz!Œ/,jmÃ'ŠÉêj´D7$< ÆYT÷"¬2IéËdnãƒL.=Ëô§*–94Ñ’Ùõ§©ÛÐsI>Þ3×°¨·JNÕCÏsÒ¬Å,X˜Õ´·Qó6R{P‘W(EjòëVfš}¿™<©žíÔвO~ï’E"KÙF#CßëçÅTò¬ ›ÊÚ•à›™ùQô:óúv­#Ô–ÀßÝJ›¬l‰N¢{ƒ±×§óByõ äßc<ì¶OÓ'òüëV[Rq&¡rÎzˆÔð*,qŸÜªANñDÙ³"M6wr$7Ý?y!þB£þÅ›ËB«Ž $šè庳죠· w§ÌÂÍns L8â«>‡r±–Ÿp+¦irN Vi0ÇýMK› 3™}6þ3Tõà‘Lûv©iË[ äWHd97­V•Е²{QíùLØüO™ÝÛÇRµ¯o{kz¹‚Unø=k.îÊ @ÈVvúVTúKÆÁíædn1ƒÓ¹¢üƒ–ÇnŽíNG`¥q¶úýíƒÔË80×ÓX]Å}–ÞA"JkPEݤ¿Z˜!STd`f’ 9'Šy_Nj(’=}jDV zšŽ.[¿|ÕˆŠŽÐÃ…#š«(;…\| 玦©Üá»ð)°L¥#…©-¥*`|ÕNá¾n ,Á©¸=‹™ªr°pä)gïÈ‘2Ç©¨§Ò’b¢8åÜ¿tƒÒ¶’D#æ™&­agþ¶åú“úQÍ}…kGE˜´fA–Qùæ›qhñ ¥rQè}E\›Å¶q¶a·šByük&óÅKp²¥ª&Þv±Î*®Y0¿r=¢›ct#& \Î8êJνԦ»!Œ(„åÔk¨É:”lÏÈOQ‹FsÔØÔœÒAP¹'®:â±!@í’v‚8=ÅMs«¥ÌpGòªÆzFMI–“üû‚9ƒÞ´Hɦ9+‡9àƒÖ•m··Í»xsVí-­ßHA§jÒŽÕK#S×NsL–Ê–p“÷j0;öÏ¥tÖ¬ËLœ(ãšeš¬*Ò!P:qN–æ |‚è£×=)’ÝÈ®ÏÙ×Ísºfû£©úÔ0DövìAi>iç=…,—0\ÈÑÙ¡šVLŒ:}*K¥K"ûA&á†<±ÔÑ`3.‚Ç*p>ñ'Ö¸]bèÍtË(Ü€ãЭuÚÞ 4ø¤MÒ0ÂÆ9®îhå}ÓFÈì3Áèi®â¹FDåNWµFG©˜"Œ«n• g5Bñ¤Îhš2hsŠ ¥ Š:PzjPx¦“@ IÅ õ£&ŽÔ“Òœ4Îõ"Ši8Å'CŠ•€ÆsÍGõ 8¤&•±ëIÚ€G¥•(#<Ò´RöÅ'Ò”Šoµ¥âŒñƒ@9 QJZxÁÒ´›‰èiÊÙàÐ:SŒ¸8Í($t  RCSÈé^áqn Dcó0kÍÁö«z}ëØÝ ñÜf†¯ ã Y’«]é‹ %F cøw[Žê5à ‘Ü×VŒõ¬Zh¨Èäç³’6äU9Ô˜ðN1]¼–‰*àÍc_id¨®t¦šœäS”8ëŠÓŽ@уY—6¯ œŒb¥·›j„-ùÒhê¥+èiÄçw^*ò°ÅcÆçvCZ(ùA޵:l‹©Í8/PECÞ¦_œæ™Ve!ºqM@{Šžtî*¸lt¦µ2–ƒev¤P6ã1P뚎i¢#À'špx¦?§¡¨¢Å§ ñÇ4좣-Í?°æ•Џöá@„~£'­sH¤ÈŠ äž”g'3 4ØÔqMÁ"®˜Ô.xª2žD§q]†zqOv-'éME ÔÙOËŒà ]Ôˆcj6ŒïÈ5!C€Þ´™!Æiq 9¡‘väi罩ì\RdÜ«ÀôÏJžëéQ’6àÒ°6FÙÆ*¼„gŒqR¹=ª»°ä“M-L¤ÇÅ’Ù«;ð•Z òj×>y¦ÈEWby¨%bVq¹‰¦2€ £b“)ÈþüTºm±¸¾O— ŠEÉ­ÿ[-)™•iYho¤ja ŽƒËx“ÃQÞBÏ|ÓÅu92^E5¦¨âßsÀ¯¬¤³£‘HÇN*‘ë^'ðäwP´±¦ÛÖ¼ºîÖKYÚ'í]—1›V*÷£>´¤R“LB‚¢šrO¸ ŠLIN šB(£Šp>Ôb“ºPiÜšn=èÖ€1HF Í.sÉ Á£¿Ÿñ“@ F4”ÍÐŽr“@¥>Ôõ¢Š(éKÖ’Žô~4fƒŠ(3ÅbŽÔQž(£RÒ -ⓎôQE”´†‚h®k:ëNjû€FjÊœ–3—ÔcÀb+&m¦&CÉÎk~ú2ÀŽâ°¥…„àƒÇ|ÖOsH›šXííäCÆ<Õ¥Ÿn¤\6uªÉäi@(Ûó†Ú82,r£\‚^•I‰­M›˜Vóæ#-ŒŠÉ1<#iëž*Ìw¢ pÍÆÉ5g÷71íe窜ô ›2‚¼EU¹Bë´üC­[xÕWæ<þ•Ÿ,«» 9íLä˜Çâ9Ç¡±ßæž„Ýë)x“Ì|ñÚ·áKl®Æ2;Ñæ2;ɨDúõˆ›{¶I8§¼M‰£NA>õL×A2 §^ÜШc<†àvéYz¼.àÎX†äG £HÇFñ¼êˆ,rh¹IufZGæ·+¶1Á=2jÆŸšä0«À¥A©;´©)”Œåœ+cJE‚ ¬æìŽšæ‘fr!„‘Ô Â)æïrÜç?…nΦ²g·hœ°ƒÔV;l‚qÙ€©•ÃJCŒ2} ¨­ÙÙ!CÚ–qå®ä ­±„⤈n’RSwsV#™eŒDàd §1ˆ/μœ`Õ)-Îó†ùs•'¨ö­V§#V%xFF:ŒóUØÏ€Ç¾yȣ͸Ž"!°Á‡j|ŽÀ£ŒAî)Ø›²Å¸2[l`Kg§¥=UÞ/wÌ£‚{Õ@Îø9WÏéNÜû€l‡cR3ÃJ©'†£¶T{]Aå à+¯j²â!•¦0ÜñFë¦}È&@þt|ÆŒ™!ÔíY£ˆ;ªw9?(Õn ¿¿C‘×+ŽkZ8˶drÞ –EŽDòD Gß¾MKf‹R„zÄExFÝÛ*ÄZ„2íS2ÆIÇÍK.‹ly)±Ç9µRmä(ue`OB+7(šÆ=ŽŠÜ!EÛ*8öj´ª3€¹®[I`bZ\wSV ¹h4¹¥Žêap$ €“ÀïÖ¡Á=™Wks²qÆÜR*‚¸®IuýJ£g–)KÕpp=ëAõùm#sbs"î[gz9s#|.ÜŽ8éOW. ‚¹fñhgbmeU\ÎG|Öµ¾±dËûÙ žc•J°üèp•®4îi o0ˆvk4jÚt*]ï#Ûêy©#ñ“­{·gŽ*,ÙfÌb8É) Š2IíL²‚-m$¾Ôd’×EˆáÏùü¿–e£Câ]í£¼EÓí—̺uløWÓÜþUvêäê·J‰ˆtëq¶W…ö­`”udÞì–ææMQVYéq G ¹¦j´—pÛF"íœTwwÊbFp£­fÎzÔJw)G¹iæi ç¯SK†lTüâS╃gµ(Ù±½ŽïJð³ÝiÂy&ò̃(»rqïé\Þ£YO$-œ£BÖÞã7´°Kve(¸FÝŒzë\Ö©ªÅspóÏ"†v$Šë’‡)Í>}v+HØåŽ^j´²îæ«Ï«Ú …˃¨¾­’ØŒþ"¹yYÐ#&ËŸ­V•Ù˜’k:Mi#ÐPgæÝÒ¨®Å àpE*N6œäôôBmFbͼ{ò1–JYî‘‚™‰ù"Q’MR‹Ís{ )gPyªSê‚I±„ºdüïÂ^{ÔÆ-mÖMJS$电Œã„ÿŸz¬XÞ"´³ª*à, ¸ O•u®%™°òÉ19ÊE©éŒÓ °y•XÆ8<ãëWS0 &ÞSüÕc‚1KšÛ) éPðHÎ;“š ¤Q¸ 1ŽTÞiNrH÷¨'‘¸Œó𛾢q3ïD¹ ¬ŠXtÆ*{ CF°È¨äöÍTÔ[2Ç’'"™çoÝ9qõ­â®Ži¾Æ”Vb^eD|õÊÕ™¼1§IH§ÊŽÜTá–ð…D![±5·§ØI4¨÷R™sƒÐV–2rhç$ÐïíûK’Ãû‡©¨£Õ¯­Ë™é’8©¼U¨2]¶FÀå #Ò“HÕSY?b¾ˆ<ÛruÅ{Žé­KÖ—:ÝÜ@ý¤Î ˆÏUäÒ$¹“tìHI=«-ß…®|ø¢7{d2u)î+©´¿µ½Ž9à!Õ”0çoÖšb”m±zÂÎ }ën½ ö¬}BQa»Pºq$¬ Gç~ûV·³€\;…ÉÏé^¬ë’O9KxäËdsÁì*’fz•ué®f’ö𨑉òÐs…í\ô²$,Ç©©nKù˜±ç9ª¬G­1†yëNci p9¥qŽ(ÜóÅôc½ gåëH9¦’{RŠqŠNÞ´v ⓵'ZQš:â”9„ŒÑÁhä–nE4‘ØS‡4Ã@ øQŸjQ׊BMæ—ƒIŒQŒó@ ÀPÑÓŠQ€(:EŽÔ½NhÈ 4ÜÒžNih3ŽÝiè æ™Û¥>2}(F4ÁZyçƒL#šwÒ@&—$ šÓÑõGÓ|¹çÚ½kGÕòÝ7ë^%Áé[þ×$°œDÄ”'ëI«¡×™ÅNȲ/JçtÝZ;˜Ô«[Ì0kŠL¡£¤ñœ/5ÌÝi²ÛHp§ß«àІæÒ)Ô‚¢’lÖièpQß úUØ$ƒWots—ŒuôªIFpTÒi…*é­K‘?$VQûUhŒ•&¤ƒÍI¯5ÉÏÍÅW–"¹ TÊÇÔ€©uµ)+qÈ)H ©&„¹EFèER1h­)!±ŠLåF*Ì‘†\Õ\sŠ: aêà T§œb¡ÁŽjD8"‘i–qR:æ¢ÝŠMÇ4™+LPçªÀœR:PUÇùŸ. @äÅ#œTr¸™HT““íLvËpzÓa©N3šW¹(`M?z£$æ•› Bê<ñJIÎF¼÷ lGà«#‘Á5$’j«¶NsÚ‘ ؉«ã{`T„œ`÷§Å$})™IÜ|hT…š‘ÎF éA#¨4ÅÉ<ö AŽ*7.z™ÀþUJw8Çò d_}øø®³LA²^k›´ˆ½ÊCÍtÑ € ¤Žz²èh)ÈéNcñªñ¾jeæ„aaÒF²&1œ× ⯠­Â´Ñ§Cž•Þ eÄ $di§gt­OžîmÞÞRŽ" õ&½Åž5Ä+Ç^•ç²FUÈ# ­âî®fÕˆ©sëA”˜žôÄŽ”Ž´ÞŒq@ }qIéAÇ¥Ç&€ ¤ö¤ÛN8t–ӥ ôÍ<¨4о”Rçµ'CŠ'8 âŽØ¤éJ1н(=©1íFOjúˆQH)h¢ŒRP@¥¤ ­RÐQÍ(éEQIKš”´f AÅ-5ZFõNv!y«mTîzT°0oåÚ %b¿J¿~¤ç)&O$Vl¨—'l2F0T u©b’267˰qš¬J_¨Bîy È<Œ`Ò¹I\¿p¦Vm dŽ*kçŽrOjcˆ<‚3ô¦FIÀ©•A“>ÕƒgLQ Ð!áûUôKyÆ ãœÖÁLŠ1Ž NñÊ\xxìœT.¡»tÈU =ë¸ žA%²IÁJlN)îŽOOºŠIž,†RW<Ž•¹¬øÎ=zXVæÎÖ3mÜK€ô¹§Ë£Äçr®¦i©£A¸y‰ÉiÝì ÝÌØÞÂf/²-¹€ ›@Þ[C$ç5ÕC X4|¸Û#V±ŸGÓ¥ñE´g†if##¤gwbZH¡vsJÑÅhr¥ŒG:t­÷¸ŽvGœU-tËa$ÒÙÚˆ¢w$S.smëQ9_CH¥b™䟩§4¤®üqPîBK3ÐÔR^G1 XšÎÅ6Z1ó†MI#]±€ÌkãQ2 •QÜÊ›Y0±®TŒg¤bD¥c«73JÄØ;<ŸZ­<öPȆ`\³c;«–û^£(ó÷`)É­ Üé×^)³·ñävúqßæHä(Ü "·ŒÐÉϱ±ö½<ÆYAÛŽõªõq6~]ØÍb]¼ñ?fºN2lÖcê²£ŒïV7QdJV;HoRÊÝ” ³rAƒwûÙ‰ùº'aï\Ý¿‰Bº™àqÏ5¹·§µ¯› üàe‘ñœúSåk¡)¦_%âhã†#$Ò‘GË1ô¬¶t\ÆŒ³ëN’Le`_îñïô«é^ðúj—n§]Ô1BÃÚ2=;zûý+–²ÔäºÔ#²±ŠKËéÉ;UK3°žœôþUIv'KY£ýì¤É$‡&B2I¥’ØHàÁ#·‘y­ÝÛÊmå¢el2¸Á[ûvf9,W°>Ô8;êæ«ÂÈ~NÔß4±Û"m#žµœ59T"„ð@ÍNš…¼ŒÊXné†ÍCˆÔÑm‰@;™zõæ¢s³r©È<õÍViZ&ûä¡ãžqOˆ†-î*yzŽæuæç™~˜ªÐNc&&óWnÆÉÆW¿<Ö{ië0WY™OJÞ;³ÜÝÓ¥_´  Hϭ亸¸Üñ¼tÇÖ¸È,î¡|µÈuÇJØ_\YÚ¥‚˜Ò7Èir8õªÜͦbøŠ†éSvö’CLºk]VÞåIR¬}ªêé"îy„‘·Ì9sԞ¡ºÒ¦Ò^/µ`󞆮.Ä´z¥ÄÝiÂî JâTqê+XfÒ5E.<» ¶$ãC]‡<[£EŠéåEdÚA?Z¯}®«cs»ù¨¥ž'œ~5Fi ÚÌŽþÖΣ±cØç$çùW¬Ý›Ë\ÔåTÖ­_jÏ%²ÙÝY"]‡ŠÉM+Qº²–úä´„…yÕr©éš¯S)hf¼Œ['œÔgqR2îz`ST RW‘HNã’zÒ·Šh¼æŒóE&?*w{Ð)=¨Ù)=é0Aâ€h4¹4c¥9é@sJúRsK’z1AÉÑšqⓞ´~4g=©AâŒzQÓšRs@€i2}h ö¤‘Ò—­(ö #ÜS½ÔÂ>lT¨éM w Š— çŠiãšL8¥<ñH(úQÓÞ—iêi=è@çš äz#Šv2¾ôÐhzܶîªIÀ÷¯EÓ5”•GÍ^51°"º]#SeÒ“WìV× àÕÕ!ºW¥ê›€ËWMmvx5“ŠL¾ÑŠ£q¥G($ ½ Œf¤<ô¨4ŒŽ}¬^Àâ£(GÞÑ2g‚*¼¶¨ý±AѬĊËW%²)÷yª¬¥[TØèSL ëÍW‘0w ”‚ir“F˜eÅV–EY Æüt¥‡j‚×E%ãŠUàõ¢Aµ³M,4´$ÉSÕ¨ƒƒ×Š\€x ¤Ç†ÁëKæñP³ãšEPRdå5]òpiÛóÆi„÷즀 s×(j"øéMYì“Å ’õSQ“‘Í!˜v¨^U<¹¤ÄÛ€4Ö—Þ«<Às¹ãô§b\ô'yN95KÅ8BÇ–ïR…` Qb^¤J„œš—#µqŒSXÈqù¸žØÁÛ’)Äw4#“ž•IÎæ«¶sÅB‹’M}‹úD{¦ÜG w¼@Íei)€ÍøV®N:U£’£÷‚6*qW#lŠ¢AÝœÔðÈ3ƒA¼ÓÔñƒQ©È¥'Òˆní’hÊ0Zòïøu ™§…N?zÎ V~£b—P4n2¦¥Êî&®x)SƒLµtž%Ðä°ºfUù í\á\v®„î®f⓽!ÒÐ~¹õ”„Ð¥&˜:RŠqaŒSr{Pzt£4Zæ—¯¥ÃÇz§0äRb€ 4”õ- ¥æ€ô)1@ HE-%gÖŽ´P0”½è(¢Š))h4 J hR0´“@¶1Tî0EZ—ÅRçŠC2î" zb³n"òЕêMmÈ•Jâ=üb³hhçä‘ÏóéUe,ŸxOjÖ¸²9Ü8¬ÉL‘7#rƒÐúVlÖ%pÎÙpxô¥†æHH.¬=qRÄa>FÎ? ¹j~Ñ"Æ…=þ”!—í.®A9]¹ÈëVâAcÆy5•ò¥>lb·aW’ÈŒŒŒç*Ó3ftÈc˜…bØ8Ã:¨ç<Ô× ëœœdàt¬Ö¸Y#t`wg’i‰Mzb‘ÛµlÌ`0y†³]¡FÆò*{YÔ«#r#Þ‚‹6ñbìÈ•$`Õmb)ãÔ¼Ò¡×?6OQVìetR›Fîª Ï«¬ééqk¥€YÐmaÙ‡½> Îy’ÝŠJ-?xèz~ÙÚ0‚=yÔñÝÚ¹Wp¸`Wgq^‹¤8¹µŒÕEeY¸7¸ Ì“Ž*¥ÊnSZ%v\ê gÜžMb¶=ƒän†³'ºØù'¡Ækn q73éÍ2ïL„ÆÊËÉSOS ѹ”Ûd·ŽhÉ; ­9fyrÙUv¤A%¤Ï à£`Ôª¢6![kuºz‹L¤ ¼mƒê;•Ï›ÃùTqÛÅ,žc)‰ÀxúS¤yT’²+ëŒô¦fØ×•ã8F#¨Íàu+)ù³ÁNl2D÷Rj´öëƒ9â„ÅkkÍŸ(!˜ô ô¤†I¥¸ +¢BoÞ5ÚDì–$rqÅXHàpƒ¯ïMÑ ~ìcÆsÚ®[DÙÆ6O¥2ã.¨€î<¶{ZÓ°·&fêÍ€íH¥±#©¹™×áLOšÁô­·+\Ó‘Vª‚9µÑ”¢I œg5ø\µÊ<’3&rÊ£šëã·(Ê[öÓ°ò“‘»žõrÊÂk;Źr á@ýk©¼G€ ïæ³d“p ê=…m SOV‰'Ôäž ‰\úV5Ó™g_>>Üív'Á ê2j)Id±ÉÏÒ¥ÉܵN1èQˆìÎî‡z· ùe<‘–aó·\zR!‹#$t«ÖÑ«±*R:u©eX„Ú§Þ9ïŠ[|«mÅ^[g†pÙÀî3R„’ÀñЦ‰£Bb9ëU_³ßDz2¦h–ä$7ÔzS4ù[[™BñíUfe=™Ÿ éO¤íœÊê“8T2«óÀú×Cg§Y@€GiÀÇÜ‹áÿ9lŒ‡ýSÌçéÍt±) #ŸZsræ*/BÊE‚@ÇÒ«Må;NjVÿR*´ «n$‘ÓƒRÊäG?«Â«nÄ}I®~[+y‰yâ ô®“YâÙØýÚÇ·¥`s•qÁôª‰”ô9ã£Gu3l&ü ú}ksÁº¾0ΫsÛÚ@fažþ{uõ«±iöÒ©•Yd •89ªzl¦+]NhÛ\L FÎx^µ¬e¥‰kª*ø—[›_Ö®/fb0pˆ:íY:6±}¡ëpjšs¸ƒ%w&åÁ¡®’+cœ&æ#9â¬. ÄòF@$lq·‚ vz#9[V½×µ9/o{‰NX¢íúTf4 .vžœ×Bú¼r(>“UÆ“rÉ“œõã4ý¢näºMÙ-]6ÚØX¢\…`ïÖ¹RÊ”´$žOáZîاå>õ Ù‘&1לâ‡4 •º˜0ß_%σžkRÎdeÁqŽ Ôwz|LÀ‚&–ÒÅ"|’j[M ]0¾*%M½XàãÒ©«¨m¬~SZi—1øÖTˆÁ¶ç%j£kÍusvbb'#Œ£4ÛÀ˜×<ÔñÈ­uåJ…Ôs´T#žñ„JU'nzZ£WRI p\U¸î'Ž)]Ý2–εVy'ߥhh°›jÎ ýéÇÒ©jÉèz>ŸðîÖkî!Ô%†M¹둚ŽÚ§\,E÷0%I5Þ[=4’p3ŸÂ¸8®VòHf÷ ҹܟ3] iÝ­LÚØµä“ÌÊB˜ÑWÏSOðÿ‰¢Ñl§ÓÚÇíz}Ão–ûFþÇßéÓ½?Æ+åÚ‹ž0¤ ¯^µÆ¦¤#í»Û¥RÐݺšp[JIx *rÈ£œdôÏz˸±‰mÞX§RTŒ£pØö«rë1Ì«˜Jí9¨nu y-œšOp1V“DÉÅ£+†”œœâ“nFjÌ„>ÔqŠãŠ\`t Q‘Ú€ hŽ´iIIëÍ¥çÒŒQŽ(:ñIÖ”ûRœÐ縥ŠOa@È §4j t£QíKŠN§”v¤ïÍ/)ÛG^”(s– š¨¥EÏ&€p:Ò“Ú‚9uê(¼š9—éA dšLñHéJ 9J\´Þ;ŽiØ4½©ÑHÑHOJháM Ïs@^—¨’³Ïzí4ÝL0šò[{†‚@A8î3]V—¨‰04š¸¥kvšÓŽ`GZáôý@cÖýµè#­fâ4ÎXqLÕnAjÚL CE©ðnª²Ù«sŠÐ ž”»3Ú‘jG?=›¯AÅgLd­uÏîÕFâÀ:Ÿ–‘¬jè‘dïȧ€­Ò¬Ï¥²Æ8ª†¢ê9¢Ý£Qh{ÔoiÜT©6Š•\74ÍtfsZÈ=ê&Š@yϳíŠk"ž QrLc¸A¦ãZÏ 1è*µSÚ†+389æ3"®ý‘(HM©šÏÎ)‰ Ð6©»8¤0¨þAVfv×n§ fnXñW‚xï/<ÑrlTKE<š“ìà(«' ¸ª¸Á#­b·–`ÔmÈ«3(#­A³šDG4ô†OJqLô©\P!}*[æÆjË pj³˜“Ž)Ö ”ƒÅ4àm§–¥Û¹Ô hV6ôÔ l9=êîÚŠÑ6[ ö«­RÕŒÇ4ÐJ¾j^ F€-FùjPEQÈéVÐädR`hpiƒ5"âþ½£Åhá—-Ž8¯!Õ4÷°º1°ãN†K^3Z^^ 5R…48Åc]À2r+­šËÒ±om>ÕCLæ]n8=h³&Öè88#N¼BõàÓ Ý :ã?JÉèl‹QL]Àu¤Ö½…Ú2Ê ’`ZgØÇ x5§&ܱÆry«L‰"ÓÎ!˜1\ïY× “´®Š9 {Ô·W «3f>ÄžÕUäØÛ‚áݳTÈCm¾{BÁ¶ºçõ"¡B듵³ÆOP*õ¤+? ×=j;¸ãiY ª§*=hê;>¢¤ÆFIa£ ••Ôi’¤ö’i÷/¤´g=3Þ¸2ÅnS!s´·×¥lh×ÎÒyrdLŸ)'©ÇCMìTuÐ[èLWfÞRIÎQˆí]7‡™…ºù#ŠÂÖ¤ó-„åäl6;µá«§ÕÆAíQ5xÜèÃû²Ôè豈Ï=e]e¡Ç½iO3O6@â©ÞŽ„šÃcÓ‹e÷@8Í[¹Á„9ÒYE¹#µ ËœŽ)#9êÎzê!#Êê@qØŠIUwÀ$7n*Û*I; 8$dqéU'…±„ûǦGZÑ•7Ô§&·$œŒf£Ý«~îQ¹yÃ/j½9xÆz‘ŠmÕª*ä1ÉôÎiÜÍÅ_BÜ»™0yãŠEEýûn=8§çKpʹŒTGNf“$Œšd¸Ž ²P·N‚¬$A[Î!~AÀíšHâdÂD¤óŽâ­6ÙÊ9Œâ­ÉXŽÖÔGºR>fä’kVÝ™"Ë…’Äz §pá6"0Ú£sqßÒ™Ïy0;ˆàâ†Ð­scz¬?;ÖM´§1Ï,ò€²àB‘P…Ù¸+)»Ѩ§+R)ÛÞªÀC®Tà÷©¿"°:&ÏëHqŠ` ¨>é àt¤ÐÇnäR'm4—#ko#ÐÊäœãSE(IçªG aÉ&§R"3B@k£ ×9®2áÀ½¿ŒJŒu±J¯U7b¹]MY5yw Q,yäu Ö”þ#9#£óééÈ$¯¥aº£HxÍhÚÊ¥)Kcª ’7$íRÖº”‘Ÿ,(_ié¡Bp*óB¤dœµDad”=hH,Wh›†§ÃI7…ävíS•ï 5H‘žªÊÙ4X«è[I"‘±"uúT3ùaYvtç4Ï@`T{š­<í³¯¹ÍRv#–åK…Aœ1Øwªïó“V¥;¹ªÌ¥³ƒ‚i\ÒÅV`±äŒ1>½ª›¿`IÁϵ\’<œN=ED`@Àt$zU&+¡i Ê´mK, {TQ[ ÷÷«qF[+°ðx"†ÒW.‰ƒcïO9ïW@»™@P2j K|É‚Â£ÖæöÅœ°çGVD—*1î5 {F+A/”­(ó°룹6¶Ó5ƒ“hŠX9ÀÎ_jç¬Õ]!„¦Vo0œd¨÷5«¬š8´ˆ€ó°‰W¦{œõ«w±ÌçÍ ß Héá·yçĆ`"„¯,§œæºX‚ñJç4»i­Õa}À(è{ÞR@ŠÊ£ÔÚ”[Ô´åW–ÅIàqRù™NqU$’x¬›7±Ÿ©ÄÞDà‚¦¹Ù­ ø^\+,à3 ô±Šé®²Q«“ºM±Ì€²®N@ç#­kMœõâírÕµž‘á}2þ+À~Û ‰b89WÛ¨Èü géLÆÆØ—fyIÇSšÂ»(›â·.`Qæ*¹èOÞÇÿZ´ôÙŠYØ”&‘ŽœÖÍis8¶Ù°[qËdu#R .R¹û¡_2BIÜqQ)é†ëÅetn‹ŒÓ #žœwYÉnHéÖ–+€¬ '½Mþ°–s…'·JLhŠ0N9§¼@Ž¿­;j¡ÆA÷óuâ¢í¢œ(=*Ÿ3oÜàÆhÆH5’•5Oû>XŽ$WY"Ž˜ªí'…¦R¨ÑÌ´nE7=ó],¶‰p„ÃV%Ö›Þ=Ó(Ç¥-Of™“w¥‰»#]µI’MEŠ”VŽ!i .3NÆGîjÌ-‘Š…—¨Š·ZC.Ž1O°¨ƒdSçéHDÌ §s‘HàŒUÙ¡ÆEG‘ø·E6·d_”ú äÁæ½»[ÓöÕЛdWêvmgxñ•#ŒŠÚœ®¬g(ÛS;¾(ìiqIŠÐ¸£Á¥Ç@)ÀëJ*LPÅ/ÖŒsÖŠQÍÒj]´§Í&sÒ”Š@1Í}>9¥¤¥ ’–ŒÐÖ’–“­£¥%´”Q@h¢Š sK@ EP0ç4) !éÅ%)ëGjBŒóLaÅH)ds@ÊΧw#¥j·V|K\Ò@Ì ¨Œ3¬ qŸJ†ù?w“ŽqüëFê6&Nk•–M¤•qÜÒ.Ç-EÔ²Gó('G#ëQ˨#„“ØÓ^W…Ã8'=H¡ÂßFËlrËÞ­êc{ ŠYHĸUëƒJ.‘7G_˜rØ¥]1‘Ñeœ¿ï«>]¼ ™‚•Ét++H#;Ž@5R#1Ú§8ì)Âв)Ê£’Oz“2 1ê)ëq+cçÎ=¸¦š%§ÐíâRKŒ0çªþ\D ¥\—t¸’OÖˆ!ÜwÁ4s QîW0‡Ú6cnÒÜ 9J¹‘È?…XDHãbpéÏRµÆˆLQIïéíXšÔM4.ÊI*§â¶f,ªIª¢¹·`G$ñš¸ngSc3ö³Å i÷;ãÏáNÔ/c}y U.-Ó—¦óÔçüŠØ.š]º*Ï’0Fw¾;øü«œÑãyçy˜±g9bÜäÖÜÝLT.ô:K5,K19nMiF0sÅAoTç­XÈÆ+žNçTcd#ð2j£>I-×Ú¬1,¨š5'#Š“TŠ“¯¹]VîùÛ½O^•×KœÖ6£ndŒÔªÎæU!tsÞÓa—\´·½¶™ñ^yÊ7—õõªÖV參†ßn^w4í“Ðd×EÛLäK•›ª–9ü ¦´` ßÖ­ 6 ž´ã ¤àg5ÍÑSllC…*=4çhCa]ˆxâ¥ò|ã“CÄ3ŒsIê1¡ceÆìS£(9nÆ…µV'' ý*T±R>S‚:c¥b”òÆÇÔÆ—å=Tв‹ ‡ô¦Ï;HèyçÖ‹“$R•B~ôøŽµ‡,†æA•b7`õ¿>ZÚNÁGW9hN'b 2qŠÞžÇ%MÆÝÉ.±¬ÛÛ|Û#SŸ¸£éRk·fêîA½°®qÓhÅW†D¶±–ì±óf"ô÷9¬Ðp¬2yîiÑɹªJEô>õrªœš»#5mŸš×€ä Ä·<ŠØ„성©e"vmÍÚ•°«Žõ ''&œíº•й¸-Š• ã˜aÉÍ7c/N•-\-¢.ìŠYcV¨5]”óSù™ZIå9l T §.‹giÅku£oµU˜ù™ÍÏ¡H9Lò;VtšeÄm÷JísëA\r=zš*ÒGdíKCH×îsØ-R$`v©d€ÂøaŠnîÔ¬oÌš ™FìÒ•idºSYN1A}Ù·RÈr'óQÊÜŠB¶¢*îÉ9Î)Ò&#Í63¸‘RÍ€ ©[µ4’8Çjs6NE7 ŠC탴·lJ¨¬ë™ @¹o8d•Q]Nzï¡©š˜J³VVîjUsÜÕö4‚¤ ;U%n:ÔÊþô®‚2*<`Ó•ÁïG“`J†Ÿž*HÏZx;†(¸¬J­ëR#gŒÕcR#SÓFt®Æz'™Ú"NG'è„åx¬ëûu¹ãaF(NÎàÕÑàÎX‚1ƒLaŽkg_ÓÚÊùÐŒ.x¬†^kª÷1# fœi:´C@¾•zÙˆŽBW¢ü¤”D‰~žTéåL§ öð¥ašþ ¿?e6ÄçÊn¨®¾u ‡Þ¸-9_N¿FP“µÀ®î2CœŽ•…HêzxyóCÐ4Æ#+Žø©® ÎsUa&ÂÆyëV§Ë’H¬¯cu¹UÆy“}j ¡×†ÅkÁÁ¨î"Þ¹¥RfS‰¸£”qÔuÇXÛ\G+5+É©w÷GZ‹qϧ;Ò±»‘VƒZ‡ƒÂÔˆ¾´ÖÅFœJ½ ©m8;†ª;±ÂõÍ<$’i¡ÚèåµKy4kÍÆ"”î\t¸­£ »ŒMÇ=@õ§kGS°hØþñ~d>†¹ýý£/m9ĈpAàÕüQ!+3gc)àãéR¢r9=i»”œƒšPôàT¤X1Û'qÍ#[™´ŽOµY€€¯&šÊ@œšiBôôª¦Ç 8­„ô¯Z 8ÆsEƒb¶è ¨Dá’9éZ‚ ƒÀâ•CGãwÜQÊ+™QÀYNáÍ\†Ø `òFEI;xÉ«qÛ㌃ÜFÙ[ÊP§zƒµ±ÔR¼Là ÷ÅY`8eñ‚qÁ¦Çò®þ º´ìO™Fò%l(ã޵^ÚÐ#2´›@Û…E«òÈìûϧjÌ»Ýî´¶|ÂûÙñŸ@{â©$Œ›rÑ.¯~Ýp|¥o%FÈU½;±ôÏ¥X°´/L~b 5U «^Óœš‡#XÅDU,O(ôÅ589Å=˜g sRhÃÁÏæ)3ƒNfñëJÀnêh.Åg”ƒÚ¨ÏÈéŽõ£0àgVExÞ‚Z0Ë}Žé—Ž9‡½rÚªéZ¢¼o˜®2ëß5ØÞD{W;ªÀ×:c€§Ì€îRkX=Nj‘[›ð¹‚9ÈeT‹(Ú??jÈð­èšÕ­É%ä:ƒüë¥XIPä•2VatPû!#<ñ“Pµ¹ÝÀ>ùí[»ùÛ··Õ‰0̰ê}E+Tdù ¸, ùÓ€hÜò6ÖŒ± 6€ÙÆ¥U–&NPô-jC€G=;T3¯L¬ƒŒTSsÎ;RDHË»ÊÙÜ€.kšóDv¬rCÇQ]F ƒì²‚?„æ¹æVSÛŒWE%¡ÇWrÜ¢VES˜Ó!xâ«ï%¸ ±3*Š;f¥Óm>Õr#çh˜ôÀúÖæ:ÿت\¤¬¿½—„ãjޤÿ…w^±ÿ„ƒÆ­:¨Ò´a½ž@6´€Ï§_¹ËrEÕâÅ–Ûö{u ÀúŸ­z'‡$µÐô‘Ù-¼y· ×í£ûØãžƒT¿ˆs¦ñ.ªée‚L«sr7J±¯Ì©éíéž½kçÿø‚W^k%?èÖ«²29Ékµñ—ˆfµ‚Y]ÕooA%Aæ4j›à’ÆC’‡+“ÔW›€:ãŠÓÐuÓu{yÃí¶·§4n¬K]Oe¿¶Y"'Ö&9px溨ÀžÑ_9Êæ¹ÝJßË“vqY'Ð{êZ€îšÐв,Ÿv5¯¤3BØ~ð Ö”„‰TVm¢‚ÀÕ«‡ÌiXe¸Ž#úÔŠ2jù*aS+`Ô±¢LQŠPÔáŒR(`ô (Šòx M¨™æ¦ t¡UàR qV¢+ˆð`f¡eÛÅXyIéL#pÍ X$Süë’(À¥>3ž*F`êºhu.ƒ‘\´ŠÈì¬0AÅz<‘NFA®W]Òü¶ó”q׊^FÔ§fsø œÔLùlô©q–'På9ÁÅSkÆvpFÖfèZiª‰Wp9œê4;¿6Ü+YNÓ\4·om :œ9Ï5oÃÄÿÚ­ÈdVµ3WGF|²;Û¥l¬«Õ•Z…Öâ1‚2x¨Ð‰#Çz®èöϽ3´õÈÑ麷’#’)‘8+´Ÿjº'D7ƳnŽÆÝ9E’å}Ûˆœd§CéU$˜…ËqÁ5~;—¦¡Ã&p‚ hŸc)D ²Èà¢99æœ ||Øü:[UÜ$Fä•< ²&mõ'܆ŠsO”œDj6ìÞ¬Ü žœb›nŸ¼sÅ+‚A Adùøã½# ½V@ËÏ5–7dŽ”7 ’Ôb’@©QAc‘iqÈÅ9_˜jË$8RíMÀRÈËž´Ð¹Ë~B†4€€`t¦«0c‘O௠Ң‚"“ܤ9ž•i#h¨=*XÁÍ"…§îÀ4Ìf” öé@ÐñJÎ1MÉòôüEl¤ÀÁ¬[æi~ÓfÞTêK`p ªvzÌOökøÌ2â#Õ¤žÄ^Ça ÜÔ‚\zVu¥â8ÜŽ úÖͰ¦FséM!¹ ¡³ògÆF Î1ÔU‚2rØÇZ‰¦ËgÒ¨IÜ¢ROôô¨„D1Æ8â¥Kd“O2¶Æ0(ìEåîFÞyÏèã%vð;SÚâÐ|0{š§-ú¾ZE+äY1¤98Ì õìQ’Pï'’Ë·n^CÑ*¶¡ªE µ¹Wa•鎳ê{U0—»Vàˆ-T†Hc?|ÿyòì–ä«Èd÷Or¦Þ̲ÂÇN‡ ­ [tŠ £±G… VKŽÃ§¥g)v6в°¡@íPÊüjemëœsPÉ“€j "$®E=H#ž´ÌÎiTØçš &ÛMrHøS“=¦²’px¦5k‘9ÇoÆ¢ Ò¬°%pã¦M@àƒŠs:éF#ó¬9Ð%Èàmq‚=k¡¸ÿhuëX×jªCºÕ#£œh¥Ðu•œnò$<{ï,¦ImP†Þ¥r¸9ö¬ÛÝ2=CO10ÇRzŠÅÐu'Ò¯?²¯ŽÀNcœ ç§5Nu¡Ø` ¥ ‡8ÖÂ'Ë…Ý+ŽÞ£5§sym¦éÍ{w [h~Xãï+uGó=ªƒÍi¦ØÉus [xÇ'v ­è?©í\6¯­\ëúí´’¯•gÜ–øá·Ò¢ÜÌÖ)AjTñ«&£~×3]ÉÀ…_Oþ½d´ªò©‘OLøRêN Û`‚N*)FÚG#Þ´JÆR““!a9ÞOáP1ŽÞ”H6±ôƒé+6THqŽ´c<ÑÔb€éFHâ“´ H¤sF  EŠ>”c9£ð Š.;ÑøRpÖ€x4™9§)0!£  ç4„Њçƒ@âŒæ€œ:R .qRÅ‚¹5lÓ‘»PçÇJ´âr¹­0ç¥!Ð}…ç¥úš9§õ¦ŒÔ ö I“Ö”sJq· šp(ïÅ)éÁ 8÷…Æ)hÈÇZU'°¥ÁÎsHHŠ^ø õ¥RgšQÎ(æœ2¸8üúRdúSÏÁ bðN¨/ôHÑÛ2F6·Íž•T‡rŠóßêo¬=«Û*äzôû´JÎjÌK±ÏX’& ž†ºxÅsñ.ðzècRÑŒT²{$ùŠs¶û¢O^•&–ÈmIo¼WFg&úbèM=IëMˆjTLpj$ÊBŠ”f›·žÅMÆ) $S±F2iÜ,H£pI:õ§¨*)®76H­T´€°§)ùiy©©” ÆE %y©”2ñR0ó}j–£¹¶eUÉ«J¤š”(QÅ›¹æ·–òÛÈêãÕ2@+Ð5m).àbßJàï-ÚÒFž¸ªßS®KèÊò޼ `#¨e˜±ãÞ£ó²O5J,3Žp WiHȦ4³Uä—Ò°™+HqœÖmÜí+mŠ’I Œ ŒÓ =jÈÎO¡­áVÛy$e‡8®öÈçšaÕÿxW£Û‘僎ÕMõ9f­"p®qYøg™›µXš^1š„ºô(%!áFÜœb dWn)YËp:Sã!Wš–†Fm†r)‚ͤnG®EHÜUð‰Aäži ² [h Œ;€(šñH)üª†±,¦h¢‰°£ïb¦³ƒŒòiµmH¿B¿“#’HäÒ$5¨ z '¥-@ËÉŒb­Y«[)ÈàóWÂ/¥1ÀÆ1@ˆå†+˜ÈèH¯ñæŠtûö¸ B±æ½KG #¡¬?é±ßèO.ß™G5tݤ»G‚rF)¤3SÊ¥õ" 9ÇJèfc}Í7õ¥çÒ{Ò0A¥éÍ)Ò“ êh¥¹¤¥” (¤ ÷Å%-%})i9 Š -%QEQA Òb–’€ôQÐQ@ZcqO¦šeèÙ@ùJò*°Tk~ Æ9­©­c™ €(ǵVÚáo%ÔºžqéG2Ù’…Ë! Àu5lˆÄ@‚y©b‡É‘ÊÇ…'¥EuåÝ9å‡LPÇr£YbW¦FEM+8XâAŒO¸¨C-¬@GÉ•ôª×w÷™ HÊâ„&><¡,[ÜSrÈÍÁ‘šLŽø"¬Bž}Ã&0Ž„‚GÒ†3)¥HÙ`UOCRC!âH†[vï¥K-†Û€ •WldŠÔ–vPCýÌA/Š{…ìîuÚ6 ·v±Jù”~uª@~£Šâ4«¤°¿èÇìó|ÉÇ»Šì£—rô®YÆÌõ)MN7!•LDíèi"!úóŠšR óTÔ˜äÈPŠh¶a :U+«Bå0éŠÕ…•€ÍYkteÈ Ð^–9A3Gò̧Ó5–_5Z,”Ï$ ñ]Å€#;ERidAOŸ¹“Šz¢…ÜŠ{w¤PÍKr¸è*¨”m$X™†ÔÝÜÔq³À~ÉegPˆiñ.Áów§ÐVŽBáúôàR;˜‘M'æ8§ª‚Ã4 ÂÆ¥Žæ5+ÐRcI´‚ ©e!;ãµ<ðJLŒbœ2qH¤=Iî8©”޵'nMKHÎ)¡“«nSØüµm«À¥fiܤ?Ô¹.ƒ4Êvºu½¤žb©iNKHܱ'¾kE"%C°8'ëQF Äw«Ö6èH>•Ësk•U¨P¯·<õ¨æ•¤\)Çz‰PîÜM&R·,ù»yÍFd,½)¬„°ÀâœtÆ) °ˆù8=©áù8éL#ŒÒâ^Â4Ì\¨Zz«â4¥0ùÇj2;²ÓЬU„˜Ç¹§y` äÔâÖƒ'­clθŒÔcè=8 ÞŒw äÐr9¥@^¢“8âÒb€4hÆ)O­uíIõ¥šLàÒäw Ñ·=E!ö óÞŒàÐ9 ç4™çî1ŠiÀ ŒÒ‚{@(šu Ï­íG|ÐGCF=hÇ  ”dPF;S#bx§ç± çF )ög⛌ô§ž™¦1Hž”ŒâHpyÍ4Œ ÐG4ïÆŒgÌsJOzæ”c¦(éñÅ/½ ¥ Š?´Q@è š3EQE¥QE~Q@JJ ¨È¤¤ç4›±@Å1½qK»ŽNj9$À¤2•Ü„-rڜĶÀ:žs[÷Ò|§&¹kÆ-6÷¨‘QZ)2\…Ïʼb¶D„ràf±NbŸ&µ,½Ãd‘ÀÀ51*Eó 4àp+:æ3œà|§šÙ‘¿pª1T®"-•H9ǵDü÷.ƒ$”ð$:¤³•6œöš³lGΊF:Ö(lr˜=Å‚5æ¿”*#¡³ƒÜ¤"š5y|ñ'$Ojj"KnÅäÛž öB…¥øÈÁ¦2XÒ1¾e—,G(iÝ[%¸Sέ4DUÛ1숂:ž)e’0HV!ûØ ÄïðÀ„tÅiéòƱÆçn⬠CÞ±"¹Ši0œ…Î{gÖ–ÚCÆ>rpcH£ òüËPdùó‚?*¡{–Çí $DüÀ‚›m¨+Cöy‹1 ªŸåRé·×0Ìö÷H2¸'¾>” ™z†­w$ñC’ŠâX³ÔŸ¯é]¾…«¦¥b²Œ‡WSÔ5ajúg–|·lJà{ð©œy–†øzœŽÌôÝÄŒR’* [¥š$‘*à ƒV#ŠåÙž‹ÕˆØ«;Ý<ЍNÜr*Ñ}è;UnŒîÑ7¹y¨ÜŒqQ®OJ{0U÷¬ìÊv3®r&î+,œ9V¤à´ÀŽÕFDˆ4ÄL{ÓÈ'œÔAXO¥Éã8Å2Y*¨+Í< *1! €3J®ws@"nqš^½é›‰^)È =y â¤ÓvŽ”ª1I œTÈd sëS¡<àuÌe?Je¹mËdPZˆ9§ ö¦n8¥Ïjµ€M=FEœu©‡Ji9 m´ÕÛS¹³ŠÌvÜ2:Õ½>^H¡ìà9&¹ˆSù>‘r@n¸®¡O®3â[¢9àöÍU5ï –Ìñ7Écœòj29éR1[ŵЩËÞ±è 3ÀáÔ¾2vô©ƒ—æ±´àÓ—ó–byï[©â²æº5QÉÍgN‡Ì<þ°cËð+2õJNh!¢¨b§S0ʼn59Á"€€ PH՟Δg84óQ‘ÎzÒ 9NÞ ©PsPäõªhÛ"€%\ô§8¨Ô€H¤±"‹‚5ÉjL`ñÒ£áZœXõÍÞ”u¦n!I¦£æÖ£Å>WÞùÍD¢ºŽ!pOZÇzqS ZocGCÍ) ç4 {ÒRö ¤?ZP0y ñÎhzÐy¡y PÉï@£ÞŽ=hÍ%) Ð=ÍàÒRô ~4™ Ç4½(#Ò“4_j@;Òà@ IŸJqâ“€‘NÆ)3š2s@Í4‡“ŠP1@éÖ•­!¤#`ýÜÓqÞ„;—•†(¤sÖƒ‘ÞûPF(pI¥ö¦ƒOÁ&€~´¤R c­)Pàð3C)éÞ€vòi {<ЇSó@É9's@Î2yühž 8·4ßlÐÉÍ<;ÓAÅÔЀóÖ»o‡·ï£$ Ç2¸5Þõ³á«²kÖÒŒ`¶ÓøÑä'±í:’™­÷uâ«hÙPOLÆ¯Ä ÖÛHÎES³_$J§}9¬–Ö§ É5« Ÿ³ðy¬»e$s[+ò"Œv¨e"dNµ*NG¤55á©H²"{ÕBŒ¼ƒJ’•àÐ2Þ3FH8¨Ä€Šx Ѹ Šv($R°ÁƒOYqÁÀx¥À4›†¦˜ûŠ‹x©AŒ@ )M+SŒ0 ¦i ¯·œQ¶¦)ŠM´¢² SÆŒ:G¹}{E ­,k]pö±,ˆU†A¤ŠNÌñë…19FŠ¦Ý ÇJíòÛXŸJp!ßÌ”œã4Æ5ìãU[æîZ§&™çL±^ÀçVÌØ•ÙspÏò°Æ¥1ôÞsç+Èь֣@ó[hS½YOJÉD8,NrsO’÷ÍepŠpAî1ÖË÷vÓ±tmª@ÁêÔ7viÔDÔå†{V7”‰ ‹‚£ŸÂ®´Ž! ¨?J“Nèô[+øu+(Þ2vÈ£¯QNMoäÁVå2G˜ÁìkÏt]v]2÷d൫ˆ>ï½z=¤ÑMsDÊèü«Ú¹ªS;iÉM¦jÛÆ¨Šª1W#¢’ŽiæíPàœV|¶:B«‘Žâ³uXÑnÒ‘S¥Ò:‚Ò«^°v'®:Qc8éšÉp*_§…QÎ*@“æ£uØyïNÞ‘ÈÆM! ä³¹ª¼nÈ«0’x&¢UPE?ô¤QóSÈ w`ýiF9¤Sƒ@Ë74Á A+ŒR¨ãéK·å%ŠpiËJƒNÇ4ÐÄÇ9Å!ɹ9Å;`*•†*2™¤5!²¸+€*¤¿('U£zUY—žçØS ¢„»Y¹ÅC$a‰8ç5,ñœ’*“ÛI!ÉÈÁªD9-ÅûIÎsP½ÄŽH_¡©–× ëN1L‡&U·ˆù»Üe]’ù{ÓQv¶§ò ÷©lW&V!F;TѶMVŒàã5,m“ךve AëL?{Šazӎ敊¹a`SŽ; ‚6ÅJ[ @Èä?-T”àñVY»ÕYNy˜6P¹l)Ç$מø–b×[sÓŠîïzã°¯7Ö§^9d8­¨­nq×zDž´ qš ”¹®ƒŒL€0i­ŽÆ‚yÅ%{ÒPzæƒÓ4¾ÔœRƒÏ4¸Í'QIÆ)z)Ò€Æ(ÈÆ)3ØÐ(Å(™ö¥˜ ŽÔ‡ÞŽsEQŠ_jB:ÐtïJhǵ!Éí@8¤'œÑóRöæ€ÑžÔ)sÛ” QK@ Á4FqK×¥!É ž)xÆ(éŠLÐ ƒÒŽ:ÐàÔ„úš‡j`Ù\(8îi1íNÀ&—ï@ ǵ(ÉéJphÈ^”ŽiKƒÉÆ9æžhÙ-Þ”€4 tÅ) ƒÒŒRgµÖ€ÐRg‚ÔßâÍ8ƒœÅ”hÁ(Ààâ¬ÛIåOŠUƒsõª£œc­J¹ŒdЀ÷ç̱‚Lç(ZšTlâ9®sÁwÍw¡ÄŒ~xþSë]:.öRk'¸Gbýœyt¦\nÚHâ©Yœg°â¤•OšH5ËH¼=)FESŠr­ƒVÒ@‚Ç`cD;T¸¥'4X©SÁ§,„u©ŠƒÚ£dPÖL÷©C*™ ½)Ë)€.Rç HSR‹6h+šh§dÒ°Ä–¦IàÔ|B¹éH #¥!_j¬®Ñš•f Ö€Z’*6T ‚8¤+@ìB8§}(+Í(41X‚æÙ.!(ã × ©h& ZNÝüãÒ½ Õ[»e‘rGC‘Bvekc*r#‹€UÀö¬Èäù±šÔ½_Ý8¬`qõª[]0¤1j—jÂHB {|ö¨L‡"´x4…3@Š <‘œ™/N94÷„ÕYí±ÐQp±y/ïS ¥õ¬RަJé4\,ný ôõ”õ„'8ëR%ÓÍ ·¸0 gGxSVpz.Ï#š‰x;OzQ.{Ò3Í!™·ð€H+•5Äøƒ@Šæ&’02+Ñ\$¨QÅb_X2d V‘‘œ‘áwv’[LÈÿ‡¸ªŸŽ+мG¢‡S*.õí\$ð4lU…h$W+’M4çNéíHG¯ç@Gڃ؃L<œb€¯Ò™ŒqNèsIÁê(éáN¦Šu%Q@%/j(£¥'z(9£½PAçš=©:q@µÑøÑÐÐIô¥>Ô”´v¤ ÐMvÀ§Trté@ÊÒj¹\óŠ–N*´×QÀ…¤`1ïI ¸Åsz™E IÅ3Yñ¬9H÷Ö¸G\»¾$–e_Lô©äopLÑ—VKi ¸J­w~ò8).ÒGÊ[šÀffrÇ©«Ñ+Il Ÿ•x5\©eˆ`¹—̸–`Uz ðk_J¹xâau—Éù1\ô«æ!rOÝ-Ö‡žtÚ²è=h°:·•!Û1ç¦jÄwo²08î qÉw?˜CÙ=A«Ñ^cäçµ+ 3z{„+¸õgJ¼ŠV( Nت6Ê^Ïæ9cȦY9†ûk dƒœÒzšÚ”¬¶lŠåyÜ=ë2iœØËóÙöâ¯Ý‘sjðƒÉJÜyš}Ô.„Ê»J±8äP‰2¬ïÌónb»ÁäÕ˜m„¬än¸ª)f|ö|á˜ü¨M\‡61Gs!' ŸZl ¬B¹Âa”àzÕ9$"NqÏ\ŠÕÀÜ¡<ñž?:pÓÒF4[v“žÔb´Nê §Oj-Òt•Tž:V“¤wP<¨Àyd;â•[G‚#‚ë@µ1í#y.ÂÉõíVn ²®Üí'ŠŽÎo0 Ý ]u##b/ w*Kòàò`gØV¦‘¬O¤þæ Ò@í¤ñŸj¥ænˆŒ1¡«‘rã€20:“Rö. ÅÝ|>'ŠA·Êpø§ý®[άUO8kžÕ»¯~5ƒ²ØëUdÑ<qoÉ)epksÍ(#¸¬¡žEY¶“6ÃiÍCdÞä¹A“ŽÕ)û½DH>ýÍJ¤c¥fh5pé#ò§:ñHÄmÉë@†* š%Î}ªÀsšz>ZCE…ÎqŠyÍD¯Cšs1ÚMHa±Žjeô¬äv3n=ø«ñ°ÆhVÍ8Þ‘rzÒôâ¡T`ñJI'(8ëNÀÏ&™Bƒ’i¬Ø#*AQ¸#œSÈÜœg8ª³Ë×¥M+`šÎ”´’u¦±V7¸`AÂuäu«BÝ€I✓œqëLɲXâÚ8â§NzTjÀð*° h—!äãžÂœÄušŒ°&†5¨áÇQM=hyÉéMs“jYH\î9éL`-šóÁ¤ÇPÇ4 †51‚ P*Pàç8¡O84åhlr3ùS°Û  Ny5§zØoÁïQ°Èç¥ v*”¼QŠLâŒñ@3Æh\ŠæŽhq×4™íFri0hzŠ)2sÒ€q@ ׊zN*>üšp`¥M7p¦—ɤ€[#fœªJSï@ ö¥ÎM%Šp8gŒÑÆÚn0(Ùæ—>”ƒëIŠ\óÒƒKÇqG”™ÁÍ)# âŒ ð(ÔªyÁ¨‡Z•@4è.À3ÄÃA½6 ƒŠòÊW(Iù×úW«¬|dVU ‹ö„ùµl˜ŠÌ†VŠUb8qfÞsYš!îéŠíS÷f“n{S°Ë\ƒÔՀᇚP©È§Ç;'ÒeþM'µD“†ïR†˜PEDñƒÚ¦#=(â€*ËÒž’‘Ö¦ EBÑœS:L L¬ güÊjDœŽ´†_ÅÔQÎ2EH €zÓ}*LsA»'ZfVëLhÏQÅ‹c¥#/ÅVYY L²†i=SØÑ Ê8¤,1ŠL£"í2¬+ ÓH®ŽárHü+TÛ)Ö©l"¿È¥Y©àT,¤u¦˜‹qÍ‘ÍN•– Šš9ñÁ5W£ÁâšÉž¢£Ièj`ÀŠ`@Ѓڠ{lŽ•¡Å!_jV%­Èè*=‡¸­vˆÒ«¼µ+µ‡"œ³2œ¶aÀéP<”X £Ÿwz”Hk;æˆô«Jri¤òHG óP-à.cqŸ­HÃ"³çL=RD±u 1.c%pr+Í|GáÙ!È©ï^›ËDpÇ+O¼²‚þS¸tªŒš%«Ÿ>ËF9 Ó:Ž•ÙøŸÃ/i3É£$€+thúŒÓÍ™ÏcCâœAÅ#´sHd}i àt§Ï4­É ¦…:qEŠZ((£µ ŠÍ ŠCKô ¥¢’€ ? :õ£<ÐÒ“éF( Š)®á±4¤ÕK»¨ BÒ8P;šÅÖüYi¦ÄG™ºAÐ^k«øž÷V‘”HR<ô“BW ö;=kÆ–¶ÊÑÀÛÜŒ àïµûíAŽ÷Ú„ôw¬¶ÁäòsšcH@ã­V‹`·q[³ž”ÐGLg4„’¹¤Œf¤ƒÅ8Îrxô¨É8â“ÐêTÊÀ{™nYPá†yžj–pØÅ(~Æ€-Í2`4hˆÁ¨íý¡KœŒóíQèǽ*°DÈêh±Û)f?J‚ᘲ€pêx"¨éZ—/–íò0‘ZóE•lÀqÛ5›ºe¡mdÞf8ùOøÔ!å†vÈ]Œ0݈4ÔB“û¾Æ´-‡Ú#Û"©uþ/QM ™Ž‰$­" ŒQþÏõª†}HK6JgŒž•¿r‰€ÈÀÔ•MR.˜Ü ëBac:ìÌ׬@ ‡¦; ¸—¬±•_›<J‚kiŒ ‚ý:b­Gc"Æ®ÀmLã=@"†5©,V¤ÜlQž=ÅZ¼Än Œ’£ÒØò$nK¦BñÔT—‘*I)ýæG­CcKRÅ™"N8a[6Î2äd{ÖD9,Iîyȫ֬‰>¸¬%¹Ñk®vŽZ’͆ zP¡9¶Ì<ÖÁëSÐ¥£4bÎÇ~ôò¦£ROCSãæëÚ³f·:á³Gò{Sœsš`+ 4zTÑ/9¨Xa¸©c>ô†‰Ør £m(#ƒ,Hü¨P|¤ã½^ˆ|£5T€’äóš´§åÈô¤6L­ƒI¼SW ȧ…Å1¡ê})åy¦(Á©qïEÆ5†1HÊq’*B9É4ž½E4 Ô.@1ëTí×2ŒÑ•y&©G…¸n*“&[ áx¨CØ÷~ÕNG+&yº™¥sF6õ }jUzXw´’\*¬úÏ–éZ$?fÙÑ´Ø8'4Ã2Ž3ÔW-ý³#Á_ß iN¢Ç¡cÇ¥6ŠP±Ó-Ê~aÅ#\‚-\×Údê¹ü)ÂâRNw~U64TΑ%CÉp)Í$Np=1\âÏ '!‡Å;ílI"‹4΄J {qOç€%TàŸJçã¼óduæž.‰$ûóEŠöf÷š£¸üéÍ*qóŽ}ëNü»²x94íÙRy'·=é¤O!¶à,€V#¸9¨ä A¬¡raf!±Û­Fú„¥öŒm'½ ‹{,NàCw¦JÞk*]EÇUYoe“¡â•‡ìÙ¯qq6 ;Vt—iA<Ö|³ÎXãZIp¸§X95~Ù÷õ¨e¼R¹È¬‡¸ 0N*{ b¢Lœã¥>RFÔqËÎO^kBÝÁËG.["µìî[É45c)G±´>u jhùIaÚ¢ŠpëÏÕb5Ý“Žµ,Q5º–œv«â29¨¬# 1õÀ«r &; ‚ÌéøÎ+.àðNkJë$V5ÓíR3U3š×¦dµt{¯NÕÁ¸ó]wˆn †@>b:×!Žk¶š÷N ¯Þ)àÓ½é¤çµYÜþ”§­!Í&y¢Ž½èÆxÍúS€ç­7S‡¨æ€Öšzç§®hÁë@=¨ÉÅâ” AïF Þ—¯9sJ ýh0hÅÒŽ;ГéIÓ­/ZCÖ€žhÎFiqÞ@ :Rt¸ü©;àPG4h š: Pš3ÇJhçÐQ@&ƒ×­Ñô¤¥žÔ¦…ëNÚsÍNx sOv¦€@äÓ×É >´„qÖœž)O4ƒ"ŒŒÐpiÇ"€ð çAÇ4gÞ€švM&rpiÃg4 Ñ“š ÏP9 rE&9¤Í(Á4ÓÓŽ )À gäÛ'b¾´,pËžha´uç­nÁy$…XÇ€1ÝMs`;E•'޵jÞðÛG„9cò·=©1¦tí"¶F9#ƒéK×6ƒ,ždDðS­` Éb*’¿™”õãëW?¶d·TTV#¯)Xw:¨^ è°Ç,xëŠVÒ£ˆäcwPk›‹QŠi„¬Jc“³Œ~ª5@Ð…G,à>”bÌË,JÌ"ßnY¤Èê…Ž1ÀQÒ–MYÂlf!OP 4ê‹O.-Ç=úR.4Û žÊYŽK¾G8­S’ÓÊV'óZ’ê7r«(ŒŠ9ª²O)3ïÚ‹š*êW·RUãuÎO\t$-sQ¾Nàw4ôTŠ6îäô¦¤Qd¼’ÀÎ}è‚LÓ³PZB\m\ M¨Æ®"~W¡SëYöó;[>ÔÊ8ëšÓŽ0öQÅ!$¸Iû§ëR÷!¢kVRß>yÆjÜQ.Y³òýqU#FaÔpØ­â%TúóŠÆ[šD·ü¢'n½iÑä®ÍDp²ô¨-p°éVÁj„-Œb­;€ê Q.Aêj&ḧþÒFì #,Y²jXøæ¢ ‘Ú¥Œ‚¼Óò,/"” :ÒEÏü\}) …¢-"Oa}*<ÞôîV€%qÒ¥¢Fç5`.E«€⟌œSyîEwŒzPsŽ(^0E9ÈôëM ¯"¹¨²•›ê+RAòtÀ¬û•+‡©‘"œU;€È¹95}NãœQ,a£äóH˜³ÎÔuh-%¹[h\ó2ä(ÅJ4ao|Á¥[ˆÕŽ×Ú@ažJ_+ì×0ÆîA5jÞFyðNBŽ+d—)j’æ²Ø»”Kã# RÒÀ ÉU“r ÏNkKøh²ÇšÇ“š™- a&C6”¾[<` vªöv¢Yü¼GZêbþϕĩ¼”#’=Q´H¾Øïí¨©¿*:)Ô{þÇGŒ&ÑϊƻӴíQÁÅv¥Ô€: šÈÔ"2Ôœu©Œõ4¥6ž¦ÓQ†vþ•, ×Nëo ÈQ ¶ßJé`´@˜"‰g¸°‚d¶`‹*ícÜ}j¸Í6mío¢94ñ¸/˜W‘Û¥Iq¦4vâx.£ug*#?|c¹ô­;{C<˜Åh6”¡sÞ´æHs’•Î6H$_¼=ø¨YWil6sÆk¦»³ƒÆ+=müÇäæ‹¦\ZjèÄû$’†Æ}zâ£kiŒb»´’Àâ¨_Ø4CœsÒ‹£'U^Ç<š~åä“Mû  íê1Šëlôаƒ"òGz¨¶·r—cÆ6®8¤ä‘‹ª¯c“Ô´Õ…2}áéšÌŸLAf  ‚v:Üjö½xCšÃy¦ÒGª©K™«½L»HIàõÅh-³Æ3ÏÔS#TiÁNÝk}cŒ@™ç#šsFëb¼NHÆkj5Ûš†°µa‡vÂGS\Ïr¬žÖ@7LQrqž*á@ˆ}ô¬û’&˜\Ì»8°¯<~y­k§zu¬Ù6«9ô<ÕE6pÞ ¸/rËçXƒžµsRŸÏºsΪª8É5Ýdyòwcz(úSØÅFÜt¦H„sÖ€:ÒÒx ãƒ¸"”PM8p:ÐW½¼cé ÑÛš3@yæ–N/J@)P3F=¨(íJ“ŒP}M.G­qFÒ`w£>‚“§4)Ü@ žÔzÐ3š^ý(QŽy4™õ4gœPÅPš£ïOTÅ?€«ëK€)ݺÓ1šRxç­)gŽ”py4 €)1Þ“¥;9æ— õ¤Ç9£‘œÒ=ii9Î()p;P=('PŒf”ã€úÒŸzLúšP3ÐÑÆsŠýhNzOÆ—3ÎM>´ñŽ9¦gœâœ¸  Ï ãûz×á«Ü­ó±}Åx—…Q¤ñš€ /Ï5ïðäcŠŠ=FëO§òy¥ò½«+Í59Ššc=h½Å=&hÏ^)Ŧ”¤2äw*ã¥0â³6ŸZ–;†Œàô  Æ,Ô/µIÊ8äÔÇdS¸ÌöFNE9&#ƒV^<Š… ö  Ò`j`ÀÖqVN”øæ àÐ.â‘”b˜²ƒÒžn) =*Bsm5—4„VYjxî9Á¦˜ÅFc ÐÐ͘˜8"²ƒ2³ý3RÜ ƒQ+çœÔ¡²(¸ÉAÅQ™Þ~•¬FGJ¥r€Å!˜„lsÏz²„ëPÝ)0WÕ¢Kl* #r5®E) Êu"¢eÍi<Ž•NHÊçŠ`S(3)»™*ÁZaQÔŠX§>µi'ÏzÏ)ƒ‘J²8Í4#Y%Ïz˜>k*9ÁïVã˜wª-‘L+Í àÒä`0Þ£dµJqH@  ¯`xª’Ù+•§M*é@™Ïͧƒœ Î’Ú[vÜ„ñںLjÕ^[de9I´&®a& JæéÐæ¹i‘Í™!_\Wos§Î5u`ê ‘‘TFÇ•KDÄ05 õ®ÓTÐ÷)tQùW'unðIµÎqOqŸF÷¥¦ŠQHŠ:P:PIš  >”w¢’ E”Ph£µš\(ɤw¤“ŒW!⥌M™›Š7бcÄž'‡O’3™±Àå—úΡ;<ï»'8'ŠeÕÌ·<²ÊX“œUŒ ªÛD+ubŸ½Ç½'ʼšRêÑœýáÒ£1éHcì'«c‚ ÆI4„w¤1¸\äÍ c´ñJ} ȤÜ:}¹ Bn´€1š3‘Ö†ò(4Š<F ëA wÍ}*3Å(Èç…+`·Ê0(¤ñ“NY\0Î:RŠn¥XIÔP0¬0j çÞä ]ä.â€$‚è#(ÜŸÊ®4¹»*Ñþ¢³YU¾ïÖ•K(È:Ò°Ë¿jÈB/Íõ«ñÏ$°üã©ÎGZϳ·7†#¥lvÅ'dtѦå«‘X` ÕÈã ¼­Gn€q‚*ÑùJÖmž*v!,Z«¼Ç&à:ÕÇPpïǵU¹ŠëB4©Ë$qüíòGPyYœHž`_Ã9Å:9¼èÙý`è{Љe+&×c’ªG5f[²i¥µ– áO ŒzUÔŸËDw8çoãTìÉ Î„F8ê*â)xÈ“ ëÆyõ¡™6哌0Æ*ä@*ã‚kÊP¿(mÛMmD|á¬d\IÔ”#ê)ï©ô©ˆR ƒj)@$`rZÌÑ lM]L0?:£Æ&¯FO¥K4CÍ# +9éÀa°{šàŒúÔ”@§$ƒOSÎi‡åo¯jAÐÁU¶‘R’:Šªrç*t?/4†<úúSÏB)½F(\‘Ö€ç­[Fª¨vjaÛÆJH%©žù§-!¡à€zR®:úÓ1ÆsJ­ó`Ñqu%qTîùdc­^+U®rËÀ¦ž„™ððvúTÒ dÀ5YNÙñŽsVòHäÒl]JP)æPݳÜ{Öm¨û=ó•™_Aãºê ɪwÉ<$l;óÁq“¢¦¬Í+)mÑØÝ#´{H=V¶˜ SßÖ¹‹øïC.f¼Š›E»kQäÝ9#$¬OÐÖÍsGCŽTœ§`“|¥XáX`â–Í‚úšÃ½×¬,ìžàKçmíÏ5sN½K›X§CòÈ¡…c8»tBã Öª±ß(cØæ«ovàQEuº0 TÉ·~ÐyÅdh¸åzÔWîM«ìœ ¨ÏSéUÒ^:Õ©d´}>"¥ÅÐr„vÇéM&Ä:`"ÙT)!p'¡ô«òɳ€* 2æ+[øgž6‘9ò88ïEõк»–T]ªÌHýÛÜ$Û‘NõÃ!ȪútaŸxž”ù÷1æ®hÓ%ä7ÄdE' c=>ôFM»Æ-!ìÄVméV8eœóZ—>}Ä’¬~Xf,=+6áw¶ãD¥ïY®ì‘%!:ö¬Û—ÍÁ`qÇJ¾£äÖEÑ&ápqÏçVõ%nQÕåÑË}Üs\rÝù“8C‘œVÿ‹gò4Á2ùŽÝ'ŠÀ²·1ĬFIÎkJZE›ÒW5lAß÷ÏzÔi”(#Û5Ÿd<µÝŽjÑ´ùä/‘×D™¼Ý‘©n»˜=«jÝ@ÏN™¬ËEËŽp+V2rk¦#å8&²n¤"¯Ìàç«êQÈ'4Àϼ“å"¹Íb]–¬GR1[W'.pk”ñ Ç—nµ­=Ìj;#Ž›sg­GÆ=éÌYä,OZAÇZì8X`w¦R{Ô|ö Bp)ÏZR)0zPãš ”…N3šG ÑÇZ@3Ö—Š84˜qG=qNíÅ ”¸ïH ­)ÇLQœPI<â—¯ZBß.1GN”­‚(3ž c{‘J@  ‘H=i{SNhN;RqÍ)¤ö Qš8PxçcGá@j\ŠURƦr(LuÅ+±Å!éQõ8£'šLóŠSÁëAçµ ÀäÐMúÒqÚ—ÔŸQ@ 튭”˜ÏZ^¨ÏlQÏJ:u žh÷dbŽhÏ=)ÝGJLw§€J Æ(Æ)1ÜЂ1F=¨éÈ¥É#dt£¯"š>”¹>”þ:bœ1éœT}óOPsÒ€:?“ˆínIb+ß-œ˜×#µxOðÞ"·““Ôt¯x·m ‰ô¹0 š*‘MP­Ry\qPXÃ4†:yVZ2{ÒÈŒTõZ´í ÒƒF}*6ˆÖ‘ŒÕEE†g*r*Xî8j™âç¥DÐñœP¨æWj`TŠËØÈx8©c¹#† w.²U¤‹¸2H¡§à¤7'­IÝNуڠx{L *àŽ ;ªž>*Äs‚9¤,cÒ¤¸fœ(@0 4ÓíSqéKI9Nµn9Aj"™¨Šäf•€ÑÖ£š0ëUVW^ J·ðiXf}Ä@«-f“šÙŸ²;ÖT˲SïU1Ú|ì’l ã=ëo`uÎ:Ö#ÈÆp{šÒ¶¹ýØÕµÔ• ç‹æéU®-ÆÜâ®æ¢vjJ2dƒž•]£"µÅA$Y*„ŒòµGš¶Ñ`ô¨Ê`ÒÊeJž)ñÏ´Ô쀌b x{Ð"äs‚:Õ¥pEbåãj³Ï©ª¸y£ ÕdŸuH¯šbÒšMšz“"®zЇÌçšHÍ4HLj©=ª¸9¯’1‘L`jb0gÓ”ƒòŠç5,±³"`×xñ‚:Ui R9Äi ZAÅ.i€{Òf—šNÔOƃӊZO¥z8 ¤Í¢€­1Ü É8¡ä¹'Šä¼MâX¬ )~ôð¸=Äþ$ŠÊ&‰==+Ì//$¸™¤wË’sEíì·r$}Äúöª,ǑޞÂK«ŸwSMÛÓ€§Ž)ázñ@Æùy?­8…\‘ÐzѸôþ´ q’? Ð1Ç œ}i„ž˜ýh9Ïõ¤ä.M! ´óȦàu9©ÁÈïøS'± #=)ã¯JS“Ó ¦ž{P䎇õ¦•&Œœt£qb€w¤Á&”àõ4 ëÞ€qÖ¥&hIÁëHyéøÒs×4uäÐŒr IÍ»ÇJ$*[d2Ì uÏzµv7ìmÑaFŒóV¶n` ò­G)ùsŠx9ê)².á’zP&eÈ1(~jel.I¤™yÎ)"#¡ ]IpI=i¥yZ—iÀÇœT`ûг:êÙ$‡…ç¬YíÞÙò¸ìEt’Fq€9ªr@’ä? {浌‹M5fs¨°5Á2DGÝ5»n1ˆNÀtª7V^_%rqÅB’KÇŽÍÍ[wÜÍáÖð$¾MMn1¨ÊÖò¾1À zdV­•œVî&Š0¹îj¤º´—_fŽx•|‘µHQÓ·Öµ­¤ŠHGTMô2ji{ÆšÁ5¥Ü³\¤ TnL‡ÛúúU8î¼ÆÊ®FqÍ6rЏ$t©¡´òФÅWroç9éI$̶Զ¹â¤ ɬéå’$Är•ü*¹•×HMB§¨ï¡§ \d‘S[üÈük¶_†'¿&¦2/—‚Ø5¢‚ÍIdI @æªÌñ$2ôÈæ¹Û·W¸Ã8´È 1ÀÒùpyËsK•!ÛBéÖÄ0žb§µs~"»yÄ{w$jw`ÕÛ»Ø dǹ½0;ÖMä²ß`º•ã&´Š[²•)ÉèŒDVžpÏóm'ic“ŠÓ$€HôâšÀÀ t5)a·µM‘‡"±:1 ¨<Öź€A²-3‚}kj,(ük93»³fÉp2jôŒp*™G?…O+€¸ H‚y0™éXSÊY‰ÏzÓºŠÅ¸8R4ÒʲÈy>•Ãx–ée¸ò$€ É®ºöo*áPI¯;¿”IrîÞ5ÑF:Üä¬ô*ò{Ò€1ÁÍŒ\€:WIÊ# aÈãœäÓIæ€'½÷¤n(ɹç”ãÍ7>ôg óš1ÞŒŠ2sÀ Ï¹€äàÑJQAÆx qÖŠRO­'jvE7$ÐÐÐ@(ÀjáÆOANÂ(”Å4­ZhÎj6R;R°Ê­=ª³ÂTäUò=© Ú™ë+#`Õ”¹’@jªñ²MÔYCw¥8"³#¸*y«qÜiˆ{ fâ§&CTn½Å4&J²dSÃT÷c¥(—­1Ï5QMYAïNÝšX⎴”¢¨AEPGÒýhé@h¤¥ "˜ÎdÓ‰V½«¦hÎHÎ8ÍPñ/‰"±¶xÕŽyUýô—s´®Ä“R꺔—÷M3󞘪6a»[ .¬Œ’xŠr¡#TëŒu§6qÏ4Š#ÈÚ88 çð§“… w¦qÏé@N@íøR=IÍ)a˜Þ Ò c'½;äP#àœQD·ÂSa´üzRÿ$“’:PÂþtô»U¶e(K“€}*¾&È%4\DåaŽ; ˆD ÐÓ¾ÐtÓMÉÛÀÁÔh;BÔe0µJ.4¦Es–Í*ãœÒ¶#V$Š…à;©XGZ24¥6ž¦š€ƒ4˜¤cŒQÛ§4x"¯éî˜6Çj¢‰½€®L´Dœ›²7ÃÁÎeñžÃÚ¤Lý1ïB…xçV'³ä ö¥*JðzñA¯^=( H<Š“d@êzñQ²ñÏÒ¬·Ý銮ÊH8ï@š*ºœã¯ÔÓ\Bc`Qƒ‚0jfp~íCÎ6ã99ãÒ©N:‹Çr—Ÿ¼§€jY%0b<­ßÖ ˜,I¸“Ò«Crdwã<«G hò³n :‚¬C)ȯipY·n;»äVƒFʱ ;Öµ!¸ØØ$nŽqYÈÎ&òO´) šIس+ `õªÐM•ô«Å¢!GOÖ°5¶„Q~î\v5« ŠÆ™›ÜV•»œ‘Å ¨ìiÆû—ž*@2:ÕXß5`Š’¬#(d vª àûж8=j)ãîS×­V"eÜCÕ"¶=i¨pA§8Ú~§"¢P{g­<¯Ê9ç½DÆEHOÖ•ŠBr¥V÷¦:z÷¦©#'µ!–‘Žj^GÍWB1Ö¥ H#Ò‚‰;P昽;ó@©ãšR¨ÁŠycޏ J£Š®Ÿ+g½[aº +‚ph$ fɃŠEœVŒ‘…!O§ZÉ,6íÎz UhÍ”»•·»sæ7õrÒöé$Ç42c®ìÒÁhÓÌ‘¡›¦N+éϼŒa‡¨¡]0jFW3݃“.}GZ‘ne —eü)ÂDm¸ÚÙèj¼°È­‚HÁäb„K§M’É‘ƒSÛ¤{Ù¦sœ.}*¹BH¤$«žh¸Õvð‡9y?Z¬öñ)ár*á†HçÖ£* ÅMÙjªW€¼PBí$¯=±S0Á˜ m"´­òã]gÀZ°ÈîøŠrFWæÇÔÐsÔ•‹6‰Î@ã®+N €¨Ûç¡n@” óR÷9Ó5"¨ã²>GNê2Ä‘L–@9©°Êw/–éY3¿Ì@=*ÝÄØ$Ö\²€žõi&cë—]« ?3 ã=k…•ËHko_¼2Ý”Rv¯kõÍvS‘ÅUÝŠ§ÔP{RJ œU™:S§LñÍ!Æ:SHâ”ç4¼b€·JA€)IR Ððhi¥í@ç“FqA täÐKŸZ^§HÀtÍ¥/ãH­'­.3@&´PÇ­7©ëNç4ÓÁ âŽ(4cÒyéIJԘ–@ ÒEPN(ã4b€'„ü¸õ§¸â£‹4ö'Ð}(È&ƒ“Þ“¥)ô™ RóIÆ:ÐŒœÑÀâ—“ Z2(=(à(3N=éìhÈ1@ÇjPF(w ãÒƒÒ–‚AàP8äR÷¤Ï4¤ÐøRž:Ò¹¥#=h$c¥ã"“Œu§:Щ#Æy4Ææ”c¦h³ðEõÐÀ‘µkØQ~E¯#øwªÈÀñ°~uë‘8eÔOpŽãÂÒàŠpô§mã›Eõr)6{Pµ!’‰­J²‘Þ«…4õSÖ–D¾õ ˜š®¨MJ¨qÖ‹:¾x©0j‰õ2㹂ÃLG¨Ò¤v«Jr8×L®qEÀ€i| G4„`õ©PlàUI-Ê6A­C÷j&•ì3•nDÝÉ5bÈéNYJž´æQQ•¦âsëG›ÍVÎ)sšâ¸4¤f©‰ šš9ïV™6%+Q:gµN¬JB8  L¸=) óƒVíP2âŒ* Dñ†íRšP=h>[oAUÊ£vã?ºñž´jž(½Ôƒt=¬3&ã½|óëM+ ×B¤g ï“ ÷¦¹@…ÔV U'Ö‚…*W;©Ñ4l¬¶8 ÷ /$ª¥ˆä@Y’pئ‘eWŠ­ó5= vçÖ•ÀžîYn&,±¨Î>ïJƒìì0Xõ«Q)Úœ{Õ€˜ï“ô¤Ù\¥$·ÏQOX¶0*Ì™èÒ¢Š7wÏ?•&ʰ*Ë¥ rA’*xí ²eÉ5},‚Ÿ•N MÑJÆ_Ùä”d€_JkY€¹'œsÇ·**BLœuª“9ù#=+Ù²¢¤£vrM5íãe%2¸«ÂÝPrŸ7ËQž 9‰ä2š&Œ‚£"­aVl‚OçVü°AÄ{‡|Õ9ãtl•8íÅTer%ˆž%q‘Ú dÚsŒTé €:ÒÌÁÕD$äu¦÷äT²)VéŽôÕR[  šu©–`Äp+¥UÚ :zU=2®WœgšÑPvJÊOS×ÂÒåÇŒdg4¿7L(ü)HƒƒƒJ:gùÔ©è3ÇÒŒíÆÑÇ<ÒcA>ÜSóòàŒÒ,Œ€W‘ïM*犔 Ž{qLeÜ þQ×#·Y°9¥] ¸ ªåxsšhÊq)Hw©;°AãÚ¨¹unWqê j˜Áê9˜ªLä©EÌ—LŸvܼwëZŽGÆá׎ՙˆØ9ÍZ[“°¡_j™jgõy£fÝÃÅ€GJ·¤¦Ì}+ ÒðDÄÔr+FßQ¾ùÛjÊQcör] …“íWmœqŠÉšhZUxÈä`Õ»k€=ºŠZØ”š6ã`Üw«qŸ—V\rް"®Ã/­M‹- Öƒ…:ðiˆG­MŒ¥!Xyra秸©7OqÒq)œÔPÉ’TP ’.Häf¥…ȨÈe=8<æ…%OÞ¤ÆL­•÷Æã½ vžZq\®E"‡)qR«w&«¦Á©—‘@Ñ.@¥W昸Åî¯JC¹`y4¹ÈÅD²#©WæäsLBf¢e9Ïj•ÔõÓ–À#ƒL¨§œgf˜À–œ„uM¬ ŽED@c¥OËu8À¦€@ BdíäSç¨¨Ñ™Ž LN˜­b´Öªü‘œÓD?2ðr½ÇQWF¤ ëM›D1‹"—¶ô&®ЏJúíQ;TnÇ ^+E; »°’tórñ,ƒœò+9£y91œ1Àæ­º ùÛMn9¤äRi–Ö3tAµ9ÜTR=’îÈÆ=jÃ>â=©…Î)^ãçd@>_¥Gö>A=ÇZ³´žÕ \v¤˜:–3¾Â»²Çü*¼ñ€r+QÁ Н"*޹4ê2È=*=‹Œc«RŽ*¤“A“wc PZ»qâ¨D9ÏjÑP©Y,gñªwŸ/Š™ÜʓҲ®§tu¡n&Êò1ç'ñ5‘©]mÚNÃŽõvyNݤW!â ð×Dm•æã½mݘÎ\¨Ã»˜Í39êM@F,œSAÅuœoqÙ9Á4™£ŒòhŒP!zóŠi#Ò—8âÙ8ÅšL ^ôsÍ0×~¼HO9€Aô¥´z03œP‘@8攑ڀ ú L{QÞ—&€‚“ Ph8 >”¤ûRu¥Áæ€ëŠi<Òç¶i9 <⌃ڎ£9£Ž˜ ¶=)zSÏžÙ =hcžÔ­b€×µæ–Æ€'t§°ùsŠŽ2§–8äÐDâŽ{Ñš0M¶i£ž”`Žô¸&Ž=)rEh84¤ dQŽô˜Í&húŠQíÖóÖ€ô§ŒRv¥çÖ€j@})ÇØÒJBrixô¤$ö¥ôj^´¹£·¸Å;P@ëNÆ0E/jUäæ›“šzzîþÂd»™ÀèúWªE(5ç? b.· @ÍzljqƒYMê8’D„޵>À&˜±•©ÕsÁ,Œø œb¬ˆ°)D@õ4®;ˆ=…9sÞ§(&íHÙÎjE'¡¤´åuÏZb@¤ÔÈ8¨Dª;ÓÄÊ;ÒÒ*@¹Zª· ÜÓÅÊã©‚BH€bšsH¥Dr 0d¡™ê äR=è°r§Š§4@“VIã­Fù¢Árªn°ym["«¸=E1&*Ø4À¼=)JÒ#3RšDWŽ0ÆO8«[3Ö‚ PØÊ ãÒ˜#xÎW5}½…0ÇšW ¥ã/ *O´,é’CíUÚ":Tè1Ò¨R}JªçE:i.x¨A!ÚÝhLF1šg˜ $‘‘ÐT%X Õ9 Òt¨•ñÖ¥0È œÓ +ȧí>´l8§q ÉCÍZIÃŽµPĘQãåj“¥j7\ôª±Ü‘ÃU”•Xpi'4ÜÔTçÆÁךR¹4„RŒÐ!"ªËnäV€Œ€ö  )mHäuªÄ¼m‚ oKêQ–{Qp±AfÉäÔªCTs[ÊÔ #FØ5B±ÒÒgk‚¹ø†ò-øúVçµ[Òæ"R:uÅkÊÈ=açYÔ\ŠÏ¹ñ›h¥¥ºŒc޵ãÒêZ”ËûË©HãŒâª:»üîÅŽ3ÉÍ«¸jzUïÄ;ÝÒÝ\wÍj>7ÔîÉ œýk’iÂŒüT-xF2sŠz-€¿qw5ÏÍq;»wÉâ«/ '·ªËt¬NÞ•QÙ°3IÊàkË=°‡"OŸŽÕBK¶cÁúT ±ËT¥cˆÔ®Uäfù˜€jpbˆda›Þª;–lW"µ 7±â•ÆFÌïÒ¤ŠÝä«i@¥<2ìùi\i¬kÆÜŸsS(Âä gµ*Ù¯ÒŸ´ãqRÊHj@ÍK¸cf¥†0àÑ°Ó ò=qRÙ¢‹Ü£ofóöù}úÕûm$«`Œ Þ‹OŠàôêi®âòrO›•Í”R+>L¹Ž}j hÛùGz‘˹Ëô4ì \øR*ůLcÞ¡Ë«d/ËßŒŠ¹ V=ÐÓ0r àc½0*Hr0GOÊ›±%\ßœUǶR ?…@aà×­;…Š’Û´G©œõȧ`2má»G4öÔåNGSÞ›•#?ÅíM1r™wcq)òŠªƒa»V´ÊÅJç=4l¬~•¤YÏRw2`žxúS-Ôý¡8çÒ¦9e dQoŸ´ aÀëõ«{ÃY#¤G–¸Î@©Æp3Ú¢„a@?Ï56M`÷>‚ D/QÉ¥É9ü风x§ ɤh(`Ýr;ÒäœH#âtàÐ4;vr¥&Ꮄƒ gœvŒã”€ŽAÆäúUiŽÇЏß0Ï9½@éŒçŽôZw:T˜;A?…2L†ŸÒž¼ri˜­ñ׃ÛÒ—a$æòއ5"ŽAÁÏ­4H‡íNä7RþQþM)\žÞ”†‘-œÓŠ’ ™Q²àç<ÓXž¹¥“žJ,.D]T•v†qZÚÚn@W·ZçÊ®=xôâ‘@HêyQŒÚE¬[•Èõ«±ê0ºî)Zóó¸(,OR´ÜÉóÇ;{RäD<2èÏKiC&I#ŠªìclŽë…R½„(ŽwÚ0py­Ë-|N¾UÒíl‚ŒRå2• GTtñŸ5$‘Úƒò¶:U;[å“‘Œ‚Oj¸T8ÈëPÑ…õ6G×¥=±¨T`ûSÎ;R)u*wgŠ|mêi#;ÆÆG5.ͯ<”‚cžRŽP{Ô»øâ‡©)•zc1õ¤&‹ÒÍëI¼Žôâ¾´Ü „u4à籦¤äCИHzKæŸZ„Pyë@’àŽ3S,ÁÇ&¨Ž´¡ˆ=hñ\ŒƒLe ÔqÌGZ²Xs@ËOR½9£ 2*¥MʪòGžEL®z\)^)Lm†éZQH2*‹Ä 29ç•Í&†jdš6’i°J’(Á©NZÌcvÒœÒ*”š بX ]ÄÓyjÈž4aÍQšØ+nCZ%3LhIPâ;”ã_19"£x½ªi!u9SÒ–\â’‘‡'"‘C)Á«|+r(uV犱©ÍHµ R¦¤Væ€cÁ§¢aOF ´„Ò„ymè*™I">Õª·±sOQsÐÔ¡óÍA$e[8§DÝ<±ô 9iàgƒI³œ.¥ žj0£¡"€ #)aÒªÉnzZ3K…=¨ŠÐpj•Å™ô­Ùb²W•2˜"É<CŹd=E@/ü¥ù8¬ã1ÛŒÔÉàWEÌÍ)5n‡Yªê®çTËlÝ]€¥p"2œõ4¡ñŽõ)ÇÆ2ipJáF)ï³…fúÒ™#EÂŽ}j±vn¦“4#LÍÞš2Ü `<ãfîÎzÐ ^£šÐ¼+”¾HÂ÷QR** wqÅ&ÊH‘PCÌNGCKfF^)êFyö«[Í'#*=ª4Œo±Û–m˜Å[ŽØ ÆÒjTŒ£ óš· Á˜FN¨lÚ0HŠÖË ¹ÁÓ²“­¼j‚ª©ù=:Ó|Ær–§rÕ‹-r]pN}©2Ïò¦Ä$GÂÈç#5:ÀûrWò¤4FÊX (ÅX^Yqš[ÊNjD·.2M!Ø£$eÊ µ'¨õnKy÷(ÈÔàJ¯ÍÅ$Sºî^¸8â«Ê„dc5¬J’ ÏqL™ tÈã˜XÂ`#àñÍV“1•«,j[j.}3P5®c`SUyÇéȪS—üعeç«ï¨IÎTÔN‚N^õI‘5uc!eg‘˜Ÿ˜õ§!e™[ ÏëO¹¶0Ë•ƒÞ˜ÌJç?_jÙ;£§uíº%Æ3Š‘[<þUSNŸ}ª‚AaWW>†°–ç¿JJQL_»ÐR‡ç$Rdã€h¦x>Ô‡yý(Á#“ùR`çž” í''ò=h( pO„Æ—!”äRG'ÚÜwÊrO§(ÆqR. Æh*xú^<¨l{çÔÔ$œœš´ñáFMVhñÎNôÑœ—QñœuÉ©†H‡õªñ±f#u©U°»MB,yu4Š@äsŠ|ÙÁ8ô§c<=é ÔäñÈ&†(FqŸJ~ÂëH¬7zuűŒç¢ƒŽ}éweA ŸéOeÏR}8¡ÎNqœŒý b5AóGÖ¸9§í;p â”!=À‡a$FY‚žüTäçŒãŒQÉÉä R‰mµK«}‘¹ÞŠO^ WWa©%Ô(ÈsÀÏ=ëŒxö’ÊzibškI‹Âø>2(jûœõ()j·= ®@çéL_¼Àžµ“£ë x 9Û2ö'¯½j¹nQÏqY8œRNÌ•+xø8ýESrMYŽ@ßZ@®N0MHyéQÈ»[xªø©eÏž­Ÿ­E¸õ£qÿëÒ(¸¤b¦ HÕDrx5:¸ÛïT+’±öç½7çåà šBGLÑ`Lc)Ϙ'8§ŽI>”¡N3RR"`GJU9àTíJÊ’qB1Ò¸ÐÓÂŒqHªÔivÆ)¼ðO&á»Çp=i H‰¢c×ëP2Ø­–N‡9¨Ÿã4r"›FÄœV œÔ_.y4ŠHN‚˜Àö©\ ½xªîÛ 8¢Â°Ò0y9¦’UŽ;ÐÎ:âšHÞ3ÐÑbZWŒô¨¤'TÌrqÚ¡˜¸ ‚ aM™Š÷§¯ÝæªÝHv¦‰lÏ»Ÿç9è+2ælmÚr=1Þ–òã.@MQ`Y·n>ÕÑ©ó»‘L7ÈÎÃ’rH¬»»”3!‡ZÖe'<*'_—#ŽõiØé(Ér³•d1±bžâ¶îìÖU$}êÇ’6C‚9ªižEj.›#ú £8¦ûÓ1%ž)pq‘MSÏá“Å-!çµíAPvÇzC‘Þ— ã­Í >´„qÅ)£h0M.8æŽE&hdz@fzS³ÇJLÎ(ê:RäSNIÈ  Š(9Æhö ¤¼ÒOzq=©§ŽÔ¤Zoz '&—8¤êh 4ƒN9éHF8 J:P9Íb<ã R>G&–3òæ‘ÎO&€9¤özÒt< v0)9늚#Š:QíKH~´f”éI×­( “ÔP3Ú”õ Ž(Þ—éM c­€'¥&1Þ—¤=3@ Œóš ëF@ `c¥ 4™÷¥é@ y4œQŽiÝúP¯Ö¥B2j< ‘@àzïøh¡Ê‘¸÷®ÐÅÅrÿ§‡ ÜÛ‰ôé]~ÚÎ[°ŽÅ'„v¨ 5¦ÉžÕ Â3SbÑY%+Ö­G0=ê³ÂE1X¡¤3Q\RT"œt&¬¤€Ð2\úРÓHE;4g=)¶’ŸÚÒ°áÍ6œ8é@ *Dr Eš\йžõ&…QVÁëSÇ'© HŠò)Šø85opqPÉ ÀaÅG$Y¦Œ¯2iT…²µf+øÜhtÍU’2§"“ArþìŠM¼äš©ä­VU³ÒŽÅ/n(¢˜€ ~)‚Î)0ÆÅWxvœV…C TØf\‘çš„µ§,XÉJH©¡Ø®Z€iÆ#Ò›°­1RGJ—94àH  äTÊáºÔ¦i‘T˜™4‘+Ž•NHyQWV@G4í¡‡4ì#/Îdá…8\‚*ÜÖá‡JÏ’ŒäJù?Ú9ŸjX784à€Ñ`E¡z SÅÀaÅR1g¥4«§"„jh3¨Ü:UxîppÕedWiØW>fXb^IÍ $H~UT¹XНåÉüjB¬àäd’‰ÝQŽF3Ûž´©jN0h†0È8«jvç¦(c¶¢ÇBG8àÒù€ž™Çj@w.KS‚í >µ>¥ i(B‘Ó®*_ ¿84l›pO_CNãAænSþuDYI­H¶¨$“·ÒœJ)Ú˜¥q£>D–,ïpA>´&ÑѱÏJ¹"o“iU#×4É­°…€ÎxëNàS–ÕñÏqƒP>dÏŽOkËG<1ã‚ )·ÀÂãšhFD±ÍÁŒíþ•Y£ŠVÝ…`0yâµÜºnL’­ØÖ]Ì^T—…=F*‰±‘tìU”¯Ò©!à€JÕ•Cœ(çž•”Áâ•€8浃9jÄ·¥]yw; $zèCä3ý+Œi RîëÖºm:ñnmמGjS]NÌ m9¤#€(,à-7'8ÛùR|ÜVg¦?-ŒíIƒœÀô¤ËzÒŒŒŸ^Ô x03íH$óéH2sÏz8-Î(ãœQ’1Ò˜[éFF3‚)çd~j¼¨vãÚ¬ŒïŠd£Œ’H  {”FQ°¥RzœJèÈÄíéÇZ„¯Ç´¬R8ÔŒxéK€ZogŽœõ¥ b“‘@qž”;QÏ¥!Ï\Pi:ÐOjN¨Å4u§g'4huà`ŠF9íKNiΧ8¥çÒ‚=)=èÝ8£ØQœ Ð1Š3íF{Rf”û 3íš3í@Æ)õ šSÐÒ9£€€hǸùx $ÒNü)½¨ïKŒŠ4£Ú€pphü(9ô¤æ€GìçŒR(ô¤gœPœTÑ‘Œ‘‘ïQ‘üêhÀV÷öÍ5¸çà›q‡m†?‡=s]8átÙ¡Ú)?òÌVÐÖrÝ„6 fšV¥Á¤Ç­IH¯$Ï{niŒ‡Ò“C¹–ñ”_­_ XàtƒgTU„ÚìA¥L"Œã4€·E^*͵£È|ÉHÆr2jJ! ¹Ç5nÚÔ“’I”õˆvTÜ…Ú‡’(†0 øQNXÉÏcS,Xô§üª:Ô–ˆb·Ua“êjÁˆœŽj?3œS 9'`P;@ëQ|ƒ®*6.r #Þ£p̓“Ö‹dOÂá·pjsŒf¦Ì ’=éç 8çŸJ4åýMIoŠŽÄŒÌÄŸ@*dA‘ÏBhcò#’Íœ|ª~MF§jb¸©Ú@àäTBœã=Í î#/Ÿ¥Q–ÔíOB i:ÄN 0úUK‡âfÇLT™.,ç/#6ó67@¬©Ù·n8<×C{lLMœ“ž ®~Q‘´®zõ­¢Îj©•¦—piú}óÙ̓‡­2F0 Q`Ž{V‡´XWD¡€] ~Tg#¢FÝÎJy$Ò‹ 1uÉϪKFx«yÇSÏ"šPgàšCjåXÛæÃ­L$ÀÙcË~µ1_”Ÿ•3=‹%dd÷¥Y`dgéQçñHß)õÇçLw-^£…Žðª¾i Ð œñS£$>´¬8ÈyÀëÉèhqÎ0i Ûšf89ú{Ò,q%Š–jV`:6~”ßùi1ßžià:Z4Ú¹ü(ÆÞã4ñŽŠOâ‘—<–ìOjC€@Çn´8 cƒN ‚G¹¥ëœƒ@Ü8cÍDU SÇ#Ö¬6IÁ}i¥x €s‚¥!~¶ð€—$0þõtvwñÌ «‚+‰1€88>Ôèf¸µbñ18çi¤ÕÌ'‡OTz”H»Hìj2HàŠæìõä}¢bQºdô&·ÑÖxãgŒŽk7sŽqpz“zò(F W óÖ¥ÈeÈÔÚÂeÄ|weŠÊG9ÁëV¢“žMEðGcÒ”6Z Y<0:Ð4Nà‚8¡àTa²0M9q·Ó°É3µÆWNjF…è 5;G<Ð\‘Q—;i426æÁÍ@åW TÏÀÎj±ä’zP&ÐÆ ¼T àÅJç*¬ŽI=)XÉ»•î¥Ú‡&¹Ë™¼ÉHÝœV–¡t¸+º°CÄ‚=EodUwvNô¤ÎOSƒÛÞ”0*=ði ‘Å3¸6‚½NêBrFÓùŠP ùˆýi=1î)‰çAMa¹·Å+g8Å `A/b2 pôü*…Õ§ž…°7kLI_oZ…²:)¦gRš’³9–‘¶‘Bñ[–Â@]GÍŠÈlŽÕªwí"Ç– Æi xæ…‡žjÊF t¥pES¹‡ @·gëWBÚ” Kc)­Šg$Sª©s qBí#&„J¥I´‚šX)À4àsÞ‹ )@4QÞ íEóHs@ "£aRMj…A ÍZaPH8¦ 9ø¤#½ЉzÒ¡Ä ²“d`Ö|f¥WÁëLEã†íHP¯JbH;ÔèC R†íN 0¡ãô¦ƒ·Š`C4 ЍCDÜV™¹¨$„b#†mÜV¸ëT2‡+RE9<(Àô©Ï5V'µiX‘4Œ¹)ô„f•†Q‘0Äv¨™7sWfN2J€ŠhWaÇJL°@ÏÆµ1Xˆ§µ0¦EXÇ›}E0+4Æ ¶R£hè|TÈÄ÷ªÒ©C‘K¹êj‹™â‚°"ž9¦"Œ7j£=¹ t­B*'@h”²2³àõ4émÁíTÝ3)ù°Æ})¥Hã:±¤#5©™X®(޵1ž)¥ °sF)ø4`ô ÜÒŒö§`ާ É  VÀ–f¶âBäáYÖ{rŽ•½§Û´’?^•fÔÑ~(Ä1(Çj¹ LÑ’NÑJŽ8æ­ˆ†ÁXyHŽòØÇNõh¼Å,j«ß8@NO$Ð41XŽ¢¤†Á4Ù§@*8„¥þ\ä÷%زÒ$3Õvi$lFJŒõö©(ù„±§®ÑÈJ/p°ÔFXæšìÛ‰U>æ’YÕܪëCLDd(éNôƒšY# 05 nÌF[­<î.'š`ÆqÒ†ž2@}Üž})' 0 dPÈ Ÿ)8ÏJ[‚%7«˜ê»f“ éQª„_,~´Âޤ€A »ØœJÃ!I>´ÖiÌIÛüé«#Ç¡¥f'šq ƒë^µ ªÊpÇvz*u¹dNxäS²ÒF]“o¨Í; ”ÝÝ:‘ÍbjšsìÝ»Šë"Xãù—œž‡µUºA)#Ë Î})©4D¢¤ŽT‘~V^œt§Ånd\Íu7úb:‚áO¸íY†³Ž@ :ÙM3—Øk®Ä iº=޼úбn­j6åˆ÷©ƒ‚£­#O$ú Wlí…4¶.$«"ðF:sRFÄðqYÊæ2ÊjìRGDgܰhÈÏó£v9üé7€¹?  8–ŒôÆ)aò†ïIÎ1Æ:RFì{RäÀ;R"Jã?Z\ñ’ß…+€G*>•1QƒÎ>”Éz†cùS™r¸Ž3ÅVŽC»ošœHCm/Æ{ÐÐã+Ž)Ö 1±nÁ8ü*ÆàF¥!Sœ†úEîSY¾ ýjc±¸Ï½$±÷`»±éUò¾†™žÛ– zöéQ†0¾rHíH²0BHÏ9µ Øs“î8 ,žÄèÞbäzQ‚ÀŽ„qøÕ`ÍeNG¦*ÒH$PsŠV./£F ×ô¥å%|Ò2qדÐÒ–'Ž?*E^ÃÕò9çÓ†+÷{{´Õm¤Å9d>ƒ"Ü0Ų[ó§ ÉîÀñÁÇ¥0£ÿëP®Æ8Ïÿ*\?8íœw¦œ–î úÒ©#¨ï× ‰ô9éÚ”àn<‘ØûS²KÀÏ8¤ÈUÁ'‘ž(ÐÄ…j·g©\X°9£½1Pì/ÊqéšFQÓhãÒ‚\T•™ÓÛê^.åÌrʸÅ]Ž~œ×±·‘ÐŽÕvÛSšÝ¶Ê23‚}KŠ8êaÚÖ'`HnCÏzjɆÆyg©G&ó­c™C©ùÏZÎQ9õ‹³-Ã(Æje˜“ŒVbÈQ±Ó¬$¹=ju);šAÓÒœ%Ц­órjMáH ¢îü/jk>Žjã&Éši‚dÂP[~t3îàUbyɦ«sšw…’B®¨¨Ä‹ŽOJ…¥ÜÜk·“EÄLò‚85 H1ŠŒ° E¸—ɪA¡cpžI¨ÝÂŽµ?p3P³çŠL\Á$›¸Ô!=úR³…_ñªï *)>O&¨Ï. éœÑqv#¬+ÛÓ)+œt&ª1¹ òvE{鄳¶ÞUNzÕAžH8ã½Jq¿³Ö£?+séÁ­NÈÇ•X•hÀ<ŸJxuB„ÎÒ¦ŸJ S¸¹ãšØÜ1úÓ€Îxàt9¤àžI¡ ŒbO#¥‘‘ÞŸÂŒŒR9 ÈÈ V#np7~B™—¦3RÙȤÀ#ŒfÄÑÆ fßZc÷ˆ>¢µyb9ü*"£%OCÛ4'mNz´”ãfsÃÜt§dŽsV.àòœ•)¨95²w¢ŽqAÈ9¥çµ&”g¥v£‘Ú€F8Îh9ïGj½ñ@Æy¥ÈÆqÍ È žù ’OÏj_ÆèhQÚ€žÔ¸ÍéŠ  piÙã4€úPxàОMœqIJ2}(@#“J °æœÍ8äÖ–Œ¢MRÕ?4‹Ò³@É­F$×ì×<ùƒÓ[‰ì}gl‚vu @:Tƒ(>•pW9qØo–; àô©1JW½íÅ9iH4 ^½¨}i¦$qI·Š—nE ^¢¨D8Ïà´¥y¥Á cvSJTÀf‚¸ E)"ܸÅQt(x­w_j«,CÒ„HæìjÒHªRÄTäR$Ä¡9ͨc“#­J4Ä!\Š‚HA«?Zi)>VðM4zRƒÍjf;®3IZvxÎ)½è¥!P9Å8ŸJ Ðv“ÐRƒ·ŒTªà0>µ4VÛäŒç°ë@ÑoJŒË:ª®k²¶…£AÅVÑ4•HV@ºqÐVÚÀ!êr+žr»;)FÈd1…˰è*D`AcÒÊGjð‰ÁÀ¨¹¢£qéôÅYHÙŽOO­Al§;±–«\† Bô,¥v‡< ‚hãYál¦Ò2ÜñÅ$ºt„.Ö Î=é²24€GÈ4«)G OOZAÊŒ›Íkvó†BT¾Uê þ•ÔÆ¤´ÈÈ;³ŠzõÁÀÆsJ3Œü§±ÇQMÜIíëAC”ØÏnÝéìHëô¨Ç`çŠUa’ÉP1ÌH<àc§9™;qžž½éßáéíK·r• sÓ½1ݓ֗Êp\ô †ÉϯÒ)ôÀö=éˆvòWå¯z@H#‚=)9}zS!s÷¿@ 1Œ.JiBpÇpsO$ƒÛ  ’¼€„g&€#I$‰²Òµ-5ƒħãšËÚ@û«“ÜPÊI(G=9¤ÕÌçJ3Üì#ºŠåAV=蘟 œú×’M à6Ö•¾²Oî§L{žô¹N9Ñ”5ZTw¹ÏÖ§2‚:×6— òŽ9©…ü©ÔdzÔò˜ó¾iò)|ìò bO<iN¥ÉÓ¹Z9®f9ÁÓ0c5ˆú¢–áɨŸUd=.VÇÎo…éŒS þõÏlgŸ^yâ†Õ— ý R‹1Ð…õ¨ÍÊŒŠæßTfbªÇëL7Wn³gÒŸ+±.hèšå}j¹@¼šÁûD×!}rÕ—›W™{ñO‘²]DmÍv g?­RšüÈè9ɬ‰'v9Ú[2id™•]9ÎõªPKVO3d×S¼Üª’ ’MP,”r:­i^*A  8$v¬£ž›F:SLé¡*7pi§‚A=¨9ëGÈÇ<‚1LêN9ÀÏÒ§CžN:zUrG­JŸ0g>”d™ñâ‚ãÛ#¯4ÒÇw#Al\°ÚŒçµ=‡Z9PNzÐ 98ÀëQ¶x\cÔüó’)0 ’;v LkŒdŽ*2¼àõ©ŽÞ@8íHÇ99÷ –T¸ˆ€ŸÆ˜¥±îÖÿêÔz ´•Vûµ9íVÐñ\åÇaàf”:Ð:S”PPÒ8¦‘Š”Š…ÓºÔjpj@}©…I¤X¾b}j@iÀàÐ0¡]ÀŠ-?1=©›³Ò˜ÇŠ\q@#){R:SZ‘L4â““JÜsMV䆚…ŽMLÜŒT]¸  ò9ªÄ€øjAžÕN`AÈ  °qNÔqH`ÔãR6\sB°## Š®r­@U²j\ç‘PÇZtOØÐ†[†|V[l‹ÅPaéNŠs`š %`coj‘$ 9¥Ü²¯«º˜Û"€'dÝUå‹=ªd”ƒO ÒÃtmjÌSúš$=ª³+!ȤÐÓ±ª’du¥—•v5›Á¶&Ü•;‰Wž´¼n¨Ñ·.E<U"A–šF*BA¦f˜Ò‘žÔ(柊c&j&‹+ŒUž)¸  Ù#`Š£489µåL5U–0j€ÍI 75n9AïU勜â¡WdjcT0#Š\f©Å8=MZW½;…•Ç4 óš0)01ŠÐÈvî)¤Œõ¤4Ó@-ïI¸Šõ£h&€&€Á#¥khàÜ_" 9$v¬È¡€OÙxBÑIf# `j™;+šSW’:{XÌqŒ€1Ofdõ÷§;‘ÉééUžF’@«>µÌw ¼äzSVÚÌI'Ó4>@ÚO4ä(8ë@!#-'ð!r>b >‚š™Ï¹acã'  d QÆ)ñÛ—ã ïRù{Ï¥O ãƒ@ÕÆ˜—fÕgž}M#¬y9ÀAÒI˜•c“R2Àa¸ôöÚŒ <ô¦ÅP»Á÷ÍM<$'Èzþ”®Z}T’øÆ3ÏZlÈX“OPTeÇ"&3Ž*®3äÛ&Ü{ÔÜ"¹àô4\@¯&ିF–ËïZ] ê>X’vbŸ(Çz „§4Òª2 ‡¯­Û„Qß>ô›ÐlW’‚1š¨Ð<#xã§½mYIÆsUþÌÒ7Îß)è*Es.?´:ä¡\ã§5 µ!†æ’j}±Ç…g=id‘YëøPC•ØÉü«¨‹!U=AÏ5œúsíÜ’e$v©Y…?…KÔ°.ž0E$R]ŠÐZܨإ1ž>^”KlC(+óv=©èÒ4Å”û‘Ú­”iSa8|}(tR{ØrA=À¨¢2çc¶BŽ3Z ®'ºœc®{ÔsBé! £Zä9”£ Ï^k.ãO…É!60èEk2ÉÓŠ¯:4‡+œûJ{I£›Ë,£¦*n™0„c¿JéQ`W8¬û½0r~éÎx«S[1¦ïr§CÁëëS1ÞV㨪’Àa ’çš`¸heÛ“ÁÅZ×SxÔîh+áFiù'ïqÏj¤²å¸” þaÉzbµµ$*6úŠL:â—x|õéÅ)QÆrxÁâ‘[‘¿NNTöÇ4ä'òãéÍ&ÂOSé†4åÀi9#Ú€$ Øç¨¤Ràòr=sšo#-ÏJ@Á"‚®<ƒíAëÓ‘H01’On´»OlûÐ3ùœÔ„¸qŸN†™†+ƒØTgïI'ØÐORf*7 ÙÏ"˜JîÎiªˆÇ~”ó€#Ÿj!äc¶)¼©Î8îOZpW'Œ3ô¤bp½!õõëMxÁ#4ñò€=qøPNÑïšb mÑ8 Ю2>•f-H« Ù“éQ-ž£ÜS#~Üzw0©B2FšßDR‰²AÇzÃ0ì £0íÍ q4_xƒŠ,Ž9ád¶7À¹ ÏQN.N1·ßåºÆc<})~ܧ #“B‰Ë$ã£4$PÄò¨ ¤àëUEâI8=ªÏzÌÜš|¤\Ò. g~8ëU¥ž5\y„þ5EçwÈ Æ¤K*®FïN˨\kÝ<϶Œòz tp³1f88ÅYKt^3‚;Š–;y%}‘)'ûØàPØÒ¹ Å!Â*ä“ÅjCkäG¹‰/Ö­[Ú-ºç$¶0I¦\¸T#¸‹•ÍbŒHæOœ•ôª*ØgÓ"‹×2LĹ'>µd$¯¥h¶;)h‰Îy'ÆÎzæœp9¤b9ÜIù ’Ès‘ƒKÉ,N)Š@ÔëI¶šÍ0!h³Ug„íX}ª£)CÅ>l ã­ô§c4ƒµjb4éK·Œš\ÑšUñF­ȦƒÏ sŽhPåW ãµv> ¹Ýñ¶OCšâÔSšêü6É/¡â¢ 6¢ýôvEKŒg¯Jk*FG­Lª ÷¨?2eÇjçGc¸³šy;TsI(ŒÔkºO™¿*з¨Én*BþhájŒ¸Æ0*ÒÄ0®4‰"@‹’iû=úÔ21DÊöíëSA&îIü)ô)'¸É­Ë ¹çŠz[„*Ø«%׎8¦HÁøSÅ&%{Ž*®1Ò…*9ÅFÎÑRˆv®I#°×Œ:í¨J®Ð Ô¦B¼d‚âa<ÓAb´¯“µ†1ÇJŒaÞ¨½³ — óÇ¥t’Ù¸Êmœçª'±;SRMÖÀ¼æ¤YHà ö«ÓX3dƒÍgʆ¶V©Ü¥&‰ÒPNH©ƒqŸçTU°ý3üêhغž?^”•ËYln… ã“ô5lžF>•"°<HÑ1O”’{uªSDÑ0*2§¯µ^©'Žž¼ÓK©ÏqéM QL­¤¨ù²>µd9Û’p¹ïU$…ƒ–Eã9¤I‰^AúSÜ…'Ëù=q“Šp8’*ºJÌ0ÍJ¬ Á³ÍMSè5“6;çNÜ $‚TœfŸÁ9§­4I9iÕ6Þ1ÔOlŽÇaH ŠV9ÈÏZ°Fwž´¸4ƒ,2@ÇÖƒ‘‚~” Bü‘ÈñHc“×4¿3ííBç‚G€ò„’ =[i 1$õÉíQgzÔ›¿w’3@ÅfsŽ9¤ÈÇÊr{æ—p(Ñþ"›ŒžM! ·'ŒqŠQ€3Ö°‚¹ÏLw ž8ÁÏô@I9çž½ (c’IúúÒUr[Û­.py Ôt¦!Û—`ûÙÇëBà¶rW‡wȧ£‘N(ZiP:V&…˜æ©Ä€¯EHÍN§å¤R,o'i‹’¹§9¤9Î( “4cŠ`7Å@â—HhíAŠ=¨Í!⛓Ó4óÒ“Žâ‹Ì©0 ^h¥½ &E.8¤ Òç4@†{ ŠE$Tø¦‘ž´ Ì™sUŽEiË{U#ÁÆ) ¬„µ:MŠ®Wƒ"€.4ã4åYzU<äsB°††aÔ zIUËB¶ ŠÅÐF3AÁ >x©A@DÈsÅ )N¥Lpx£hó@Ç jT~1TþxÏ*Xå ÔóRÌçŒÓYi¨üõ©G5W ô§p*L R &×"£Q†ÅY žµ¦Ec$àc_hY†[ƒW R«´a~£¥Y%˜&ÆjêEeF2Ùv7àf“X8¨¦…80=ènTŠ’Š”Æ´ó÷±HG9«$¬éš©,=x­=ª7\ö¤ù[©O˜ÏZÔÈn=évúÓ±ƒMbs@ §*àóQîÇSFïzŸŽÃë]…$t¾òóò7ozåÖb¼ ÛðõÆ5(ØŒààR–ƔݤKa±= G;ø9gÁü*T ¸×)ÜG4{›'µ W‘ß4ƒs>ÑŸ­ZìŒri !ŒÔ±’ãð)ŠJ™P‹2` ŸzlgolšïgÒ•öl/½_B®% ¢Çz’ßpÀ4ÉbØFÓÔóRG”éÉ¥a\¼˜'ž•’e°3Š…™‰±ªE(ž(°&A1t ÅU’äãÛÞ¬ÌÎÃ`c‚jœ0/,Næ?¥ØÏÞË’Ç\š–ü±–Á«HŠnp=©’ Q•ZqÞ\mÊ€µ9d©5&Ñ}è Yò@ª@Oånã­H±ùc‘dÊàš7mäh—qHrN*¼Ð¤§i|w«k±—9ã5^gˆž™#Ò‚Lù!ul Кi·p£Ïz¸ÈI”¡¥qµ@ŒŸø ÑÛÅå&r€÷ÅYXÄ@¢Ÿ1BE1æ~3RX†ê'MŽ0ݱH¦›C H¤ãœUy"uŒúúÕÉÔ¨ùàr*Wn ”†ˆ9›ŽÕ$hŒ8=ÅL¨6ò9§¬-à~(@ˆ#ˆ+!ù<Ð|É[q=zâ¥.7nÍH‰·¿‹V(É –Î0)†ÓyÆ?Ô©9Hˆ wèdµyª·ZDSF3${WIå)Œš…íÈÁ$w¤26åÏ¥e4oä|ÝÀ5èW‚Q’+Ô´ÒªNÚ¥&·L˜ŽŽÀšž6 »{¾õ °°È+QxF@éÏJÓsTÚ/äpn9æŒ µV9Šo¯8©Õ¿»ÏzV4M1ÿ0çvëU¦·æS‡ïÇ«XsÜ÷¤q€¯J¤Ê1HÈÄgŽâ­G*œsLš%qœüØÏS/˜eãÖžæwpf™`Íš~Ìd3ÅR†àddç¦*מNHPXñ߃SchÉ2`0q’©¦îÈ84ß4’0sAçëéAWÄ<çÓœ0£'ý©§pÁ99 A$8>‥ú¥1œRäçž)X·÷‰Àš@7pÁÎ9ö§…Ps‚z⛀8ÆOj@Äàz vü×޷!‡§NÔÜ`ðãN-ÀÏ~œR*3ÈÇ®) @ÁãÓšsxïšc(Ý–è˜êH㦠;#Aȧž)§“ƒ@„ŒÓ³ŠŒ’§¨9Æi¡WuWù£äw ê)´GŠ’F.å÷­ ˆ‹b£,OjR§¡”Óžô£‘Òó@t  jÕÒ÷E{(èzVH$ÖÓÀ3Dsƒ¸ReÃsÓB!Œ‚@82¿ÉÍU2¡ðI©K` å;Ñ2°0)>Ô]ùÜT !íÒ¡lÞ‘fºŒ¨>½)…Šœf£·m¼»tíN‘ƒÃŒö¤³%E2 óŠ{J±Ç´M"¸T2*\3àj­r’¹ )”F*»màóÒ£³¾AÎ;T› 3@;?˜%Âgq«0®Á–?ýz€£y›±ÈïJ•qKd+è:YI'œãІ5Ú¡‰üÍ:M±ÆëêiŠÁ¾õOA­K@Œdâ—*@Ïjj #4¡l–àS@G$lFsÇ¥VÌɼâ´0Xð>QQÊ™ÆÞ¿Je%Ü‚9Y¸#9#ƒŸÂ¡(A,FH¤ýãŒc¸ m"P އ­;bH½}iD˜(1íÀPhÜ‘ù 0OJT(ø¿:‰räÓ˜oè0E4&!‰À 8¥ÀFù£çÚ¢'';»OÉÎâO h±"«Ç•Î} Dq;†;­H‡t|±ã¥9[ÌB„øSPÑîŸLԊ̸!j®Z&Àµn~8¤+§sWõ§<{sN™@`T^*PªéÏ&‘iª€ƒõò¿tŽôªv§…Ÿ5Aæ0±Jr¸8$qCFv†æ–5zàŠ@FÀníÏ­gÝ@®­šÕ‘09RhÇ–Hiô Î6îÈbJÉhNÒ¸>•ÔÝÆÉÀÁëX7m¸lqƒÁõ§Zo[3.HŠüËžhŽvC†Zºèrz¬ñ3ž‡Ò®æŽtN“:çµH¤3Ç®k,³Äp9õbÇž¸à拟F\ÚyÊý)Ž”½}iVm¬O^sÅ<2°õ‹ÝÙá`Êw.:RÅ30>õu†A gŠ­-£d´L š.ŒÜmª%(Œœe¿ZRùÁúÕ’EmŽ0GëVò 4ì8ÎåûqŒwáƒÕÔö¨Ã¼¶9ãŠs2 HפÕ1ù`pztãšvIÆ㎴Î7`œÅ(ÛÏ÷ºqIÁÎ=¸ëšCÕqN(ô;çšRGË8éHbî=Ç?Z]ÛF Œ‘·ŠxÀP0:zæ€>Þ@É4rsÏÊzäö¥ åqùÓrÙÁ;‘@Çr3Lœãõçò¥àÀôãžôà àûP…qw=sÏÒ˜O AÛÜfžÇéÖ˜`ç㡦&Šãc¨§XdrG#éÞšÁpO\þ4)PÝ1¹s@S‚2?¥)UÇ ~”Р`ƒ×Ö—9çð d`‘×Þî+ÔdvÖŒ/z\žAëNëŽOz3ŽF9¦€p¼ߊ”àrÀúŠC´¶8ÇzÌÝR0ȓnjq¶ºk˜ÃÂÊWŸ_JçJ±_~•¬‡“Œ…¥r5ÁÜbœA<HsŒ~ugqØN¥É¿Ný(r:R)Aö¤êy `RbœAéŠ9€zb›“Oç9¦œç8 PgH¥ “4¹¨óKš  fM.M?ë@¤”PŸjQE¨sIÖ—µ í Šµ&(\Õy"ã¥]+LdÌÉ"Ç8¨Y=«Iãöªïµ‘#¥Fç«…1Ö˜É߀`yéNÎÖ©ˆp)Œ„­cã|÷«(Ƴ(qV#“=êÄ^švA¨óÞ¥V(PºÚ§<Ñ·Š,2‘VŒåjÕ½È'óC 5^Hpr¼ÝŒ†^µVâ<1"©[^´D,‡Ú´ ¤Ñäš— Ó¹E³ŠNµ$ƒT[€9À§©4ÒÂ69ÍXG ÔË ÇZ¦¤GëLEÕqƒQ 0ô408ÍlyÁ¦àP§ÖÚ¨GɤÒ•c=GãV| F})¦&3Z‘›H#š… $dt«6<‘MÁÙ  ¾QëŠ6‘VJxcxPe\°ÍkX# ˜ÕO;…TÈ^jÕ¬ŒnP†ÚCsïC.;žŒl)œð¹wçŠd ¾%cϟœHqµXqÉ®kä29,y© BBÔœšd@éíVmÀ\0µ ‹m0Á¤Pe‰ëƒíOW$î#éLiM çÖ…¡CæpW Ú ,#ˆùªHÀÎ)&E# 3LÒ/ ë9TÊÙ<²ï†Ú’j’ n1õô©b–L’hµ% Í+«•â¢åÅKÆ&MŠóFòœ óÞ¤Š ò=hYÔd“ÉâœSq•‡}ÌYS±ô¦Æ%8Éã?IA›{jÊ¡ H§bÓãT¤)ÅD¬G©ÊK8“Ab¤êI8^FŠW&´ 5@BîÀ 1FXdzTlÄ6åbÖ­yyp=*&‡ž¹£V Xb)€…v‚:PQ”SãA7Þ`®ài ó”wíRo+·åëP¶Jí Œw±+"äH¦K,nÀúâ¦.»UÐO­RÜPÌ{qSF/½èe°ëƒÕßò)Ð2³¨‘€#­Yt.?ZLkB¹”9Ï¥Z‰ÆÐAª¦F0:T ´n~\÷4®Rõ4HËd*D^ &«Ç(É÷«Ee÷© èM¼Èª¨”o u« C.¨™lÇz:‰ yK&XÔ,ZsGŒÓHÀ ž(Ð˼‡*Hk™¿Œ‡Þç85×\|¼p°õ(‰ò€N)­Âí;˜jr1ŠÕXàj?8Ææ7ŽýñR@8êzâ¨ëŒ”ˆÌ`î%sT候{VÁ_séL)ò±#éF”Ü ’H€r3ÎjÜs‚¸É" –[*)@GãLÆò‹±¢%==qN!ON?¥È#sYA8¨©c”à8=M#UQl>hTÉ?8éÇJªÉ,Ü \ðjâ¶ì`Žiåw Ÿç@ÜSÔ¢²åZ¦SÏN)’Ùäf0Cg׃Q¬†2CpGóL›¸½Kdä Œ’1Ÿjx;æÎO«Ç/4üß#ó¤h™1}ÀŒ{sÇ4‰äýÒ?*B28 þ‡µ( € #<ôïéH«€°Gœ‘€{õ¤fAÐõ=jQó`ry¤;YpN´¼çn}À£‚IÀö¦g ïÔf‹¹NASÅ qß‘I¼…Á9ÎqÚ›¼näŽzP!í´õϹ¦’íèM7~îG§éM$¼IZ2Ű2#J ‚Bäú÷¦ƒ‚AüH¹Àƒ‘LWäw=úƒF>\¹ãëI¸@ç±úÒ†€;zZqwØ'ùiàgž:w¦3l÷¤óH_œsß΀¸ð]@Sò‚q:hb‡$ä”óÐÔaÉÎAÇz7g¦:`ŠqìY°qØŸëJzœ‡Ö£ä;ŽÒ”–8ÈåG~☇ghç-‘‚}©›È#·N¹€6ιÇ#ÜS¹ ”nî(É*9$¨ïÜR©`@8äwȦ¹‘ÞÄóŒ`åhǼŒ9ô¸¥Üq•Á?yF?Jˆ°ÏË÷zP{Ò#œ}F:Ð',̹éÜR©d£#?棃 Hî>´ÝÙlpÇ=8SJù(aŒ¯¯ñÒ—rîÎOâ¡rq€N3Ôv?Ò€Çvy?L,,‰iÇ úåJ¦yç8Îr*¸`@'¸èOèiôÇ2-! ØÛŸÂ£(»Ž¿J„LCp8éš™ˆñ¸uÇ€ºcÌ*:ÓÜO'§<â“Ì$$ž:R«Ž:Ð+!†6S–¦†ÀííVr89<1žEgЮdÏ@)»Øƒ»‡59‰ ç¹ Dà}M³+ ìsƒ×œÔáç"ž@UÀŒxàcØQ¸­d#Žq\ÕÞDäc½t2>qô®néËÎÍŽ3ZBç5û¨ÓÈëKÅ!ïݨGép\é×#çT'9ÚV­Í¤iWð*›hÔ÷aÇ\ÞFmIR#\1Ž”Æ„õ¯@ºðe¶¨ôÍg\x.T]Ñ9>™ô£™Î?ìàŽ¸õ[à‚wqZmͳhˆô8â“O´iîâ!Úyýi6‹Žúuªí³BÙåEN¨UAù¥Ø €ÚJVÃqœg€=+›S¸‰˜¼ƒžªÄ¶`ü¹<ñQ¤_¼Æiã9À¥°ã¹iä=1Ò Måƒcß”õù€\gœÓŠ$ã¯JVı1‚9éRº’F8ªÑ)Y9æ­…<šeÄ‘T7…FÓ‚䌓Cª„ÛŽ´îSE9N P>呸úV‚Ä(hU‡LŠCvH£mlÞÜŸz™¾EÆ8=*r¡ ÐB²d ã¥2:‘ĬXÓjÈŒÅ,Q¹ SðÀíJÅ¢"„AHŽôò¬ü=éÂ&éAhl‘—^OåQ¤X õ殥¹ ɧyAyŸZ)Ê¡yúÒcæÆ*ÎÂ&¢›€xÅh‰9¤1m ä~âI^Oâ)IR=é’Æ”ÈɘS‘“íš”Wæšõd“cÚœ­åÈW9 3Í:å8WN:ÒÈ …aÓ†IÝAŽsVÕHZ« [õüjä*q‚)64º UóTgšrkQ“j*š!b1×%§®‚EíÊž•j vá¿:’(Àª1ÅR˜©ÀÇsC¦)Ê™½)B—¦ÉùDx$‘S˜Àb}ø¨˜’NE,U•VEÀÈ5›µ1pÝ:S:RF{#Äp@éSÅ #?˜íVYwq·<àš¥4E] w¦fã˪-( Ü ñúSÔä€O'¨÷튩ˆ¼c“Ö¬‚O8ÀèqI—\y¿„ñÁ硤$•ʃ‘ЃÐûÐX€#ŸOj0Ã:r=ipcyëCN “¨¦ýÑמüw ±À玿JãŽvHäéH¬Oå‘LÈသ½(aÐ3‘ÅqwáNž´íÃùúŠŒÎÏn(%ƒp=×4X$×8˜¤/Üzר ó’=Fh8 Nxê¸î( ã?—qLÉìw``Špp‚9SAP ?…10.–ìpF:ŒS[ƒÁÎ1ï‘J+ÀÉ ¥Ÿâ„çç}r)ß(8cލ¤Æ?Ây^ô„ÀǨ ±8ÉÎÑÀ=Å(l®ƒ‘“ÔR…^˜9íH ã¶O+þÀ@Nì§ÔS°Bã$÷RM#uÀ!{cB}܆ÆyéÈ?Ò€Á“ÜW¸ÏqBöŒôúúRˆŽÝÄmSÈw¤Ý€@Ç öj3p$ãÛë@!ºƒ“üéIÜØ ñ€;Óppcíס¤Î €;ý 4¾T_NÔå+†ëÁö5 ÷‰ç¡ã¥11K‚pG$zãw¦î,psÉýi¹ ’xÏ(ž‡¯Ö ÀíÊã' ÷¤“œ•NÙÞ—£h¿CH S”î9 BTn?60F;ƒüéÛ‰êzdÓKÆi7@Á'¹ .I¸äà Çž¿<1È>ÝE8¹Àu‹6TŽßZp;ˆÇjJƒ‚¹8üÅ $÷ i–UÁÈó¤/»ø¿ „?<œ{çJÏÈ9?…+÷s·µF)󌚲¯š‰ºÒ“Š@Ù§S ÅV’ z ¸FE4 4¬LmÈÈ©„i2ü§žñƒPdmËÅM€GŠHÛ‘Å*Ÿjž;˶@*O&9E' o±Xt )=ªW´þët¬Ëù.m9+IÅÒ1H²˜Ûž•„šÓùÖ­E©Ç&°3ÞÚ+<Ú{"±¨e#Ô®!f1‚+Ð/t¸n0qÖ°fÐdRÅI9è1PÓF°©¹Ï"1”º¶ƒŠ–+Û˜W>ÄÕ§°x ¤õ]Óbd¡,:DfÓ-Å3wN¾iÀÉkò(azt®'Îm¹#‘W- xÁjk±m+\™ïÞ¬ªœr8¡PméS(8Æ)= ¹RUÀ⪀rr*ü£ªmÉé@ÖÄ%xÁªÒÄÉõu—œ“UåRx)ì#>u1‚qÒ°µ `êÄŸZèÝr¸5Bâ©Ñq[±ÅËœqÍ5]£Âäâ¶/¬Y>p2=EeÉ ÷}êÓ7‹º%~†”‚ÜÞ«òÛ®G½L®¦j¤5ÐŽÄzŠŒ Æ§b_œ>µPXà’i ¡ˆÌPáÈã¡©æ¹k™<éAÀܼ~8¨ ?PrHëÍÒe‡´2·ÌI”ò¤taU74O±ƒpF)í½¤ŽC!y<±¸]‘‰¾ëv î)+£6œ^ƒS&yéÉ¥ íÉöü*•Û Gù˜‡¥ŠèH£ŸÂ¶öRåæ¶…{hß•½Ieƒ$Îà:TI!°ß{Ó5a$Ü0#¾h’5~AÃ}*Õõ@¯¹0yéš”àg'ƒÔU$gVÁê*q&@¯Zã.„™Éêz`šxSÐãÒ£Wlr0Gò§4€I'J“D~lsÇãMåNÆxÀ)ÌT`äzwܱ8òp~”âê}¸Á¤ÝœIϸ4œ îϾj2XdñއЕI9 ps‘ŸZf~PvõÎ1ØÐ¬Tj`l®Gs‚=)…É73€¹éÇJÖàúöéšbœœÍ<¾;ûûÐ+€!Aõ<ØÒÚ‚1ïOcîž¼Ò£ 9ã¿ÐѸ¿p~éžrÏmÏ|zýi€c<î9ÎOÿJP ('Œž=&@L“׃íK”’:àâ€å³úô '9'ô4£'8ã±Ïó¥fr@fn*uàdŠHáRs›µ8©Ïµ2Z§+ŒÓ€"šƒ¿JpúÐ4‰W‘Ó§zdõ¦®:søÔêé@î9oãJãrã4‡ÔÓÛ„Ï­"6A·hÄR±‘E[pÙÚšU£pÊO•<Š¡‰ ÉéŠapÃk®ÓŽïH¤ÇÔämÚ’X‚®AÁDî¹ñÆ}(2ŽG\wî(, þ©ÍÒØ<ûôÍ!تsœ“€}é À¤·ùíN#k}âÜzö¦sœàš0FC}GøP‹‘ÕCqŽ{Šw`ñØŒõ¦n¾8ãéJrG'¯áL}¤zg¯¸¥/gœwÜ#­;;zóǸ ‚ Žƒó¤…Çãóí¤c<ôã­+ÔƒœûRØ.9Á8;‰ÇsÔŠB9‰8ãê)¼0NëNÙƒ× r)€H6œIäduå 펃¹Ó†eŽ>a“Ú†;rqÔP!㌜wë‘KÓö˜¤ #\.NG4›‹?°ä ãÉmØÇÿª ÜŽ¾õí¹©¤ Iè:óÖ‹ â°îÄzu¦àò@8ëKƒœ“ŽqFìtç­pG'ƒÓôŠ>RH"ž¸^¯#“Œàqí@š#8$1Ž(' Áý)ün ŠBsž;P+‚O>˜¥PÛ{ p¤fUSD·a…8Íej7)D<Óï¯B#"±¬‚ÅÎIÉ«K©Ãˆ­ou'Ó#ƒMQN ‘éVpNN)ËŽý)ÇZP;ŠQœz‘·$f™Žzô§`Ò€Ù=)9šv8àsHOlS3ƒÀ§gåäS’Æß ¦îŠp÷ïH-À ‘ÏŒàSŠãµ5€q@{QžM…!ë@ aŠ?qÎzSNhz1A$Òi4„zSŽqMç4Å Á¤=h(ÊçnGZFéÒ•HÛJGh"sH2)H4€s@8¥â›‚h€äŽiGÒ…ëH8îEÒS€ö ñ@¡ œP1Þ€b•‡Ð1“JpG=h&—Üâ“J{P£#¸ ‚x¥ÇNhA¥=W'‚Ö˜<Ô‘ƒ¸ `z¿Ã¸4Òàü…Ž+¾Fí\€¡) BH9&ºìYOâ“«â¥Ij >õ"¶*K/+æ¥ TRJ°žô†YŽ´b¢ žõ # cºRš3Kž(§4bœEPqM+Näõ ŽôŒ¯ £ãš°E0¯Ð2£GÍDWt§=)  ƒ"žžÉíQí"§†â¡ŽiA>´ÂäÙÍ(8éQƒNà}iá…GÞœ9 d O54ðƒKQƒO€ûS© !RcîÔ‡ŠaéÛäÐ9¥æ*1U$\¶A¨¥Nø¡n&4µe–™¶¨L¨éž‚ x¸éWÙ}ª2”3 •5,rÞ§’,óUZ23HeÔ—=ê¶GZÌG*jÌrð2htÔáÒ¡VɧçŽ)€ãŠJLÒŠC 5¶áÁUŽô»F*ZaÏdT’D-À+}¢ 0ESšØ¯**JLÿÙleptonica-1.70/prog/skew_reg.c0000644000175000017500000001446112244775371014450 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * skew_reg.c * * Regression test for skew detection. */ #include "allheaders.h" /* deskew */ #define DESKEW_REDUCTION 4 /* 1, 2 or 4 */ /* sweep only */ #define SWEEP_RANGE 5. /* degrees */ #define SWEEP_DELTA 0.2 /* degrees */ #define SWEEP_REDUCTION 2 /* 1, 2, 4 or 8 */ /* sweep and search */ #define SWEEP_RANGE2 5. /* degrees */ #define SWEEP_DELTA2 1. /* degrees */ #define SWEEP_REDUCTION2 2 /* 1, 2, 4 or 8 */ #define SEARCH_REDUCTION 2 /* 1, 2, 4 or 8 */ #define SEARCH_MIN_DELTA 0.01 /* degrees */ static const l_int32 BORDER = 150; int main(int argc, char **argv) { l_int32 w, h, wd, hd; l_float32 deg2rad, angle, conf; PIX *pixs, *pixb1, *pixb2, *pixr, *pixf, *pixd, *pixc; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; deg2rad = 3.1415926535 / 180.; pixa = pixaCreate(0); pixs = pixRead("feyn.tif"); pixSetOrClearBorder(pixs, 100, 250, 100, 0, PIX_CLR); pixb1 = pixReduceRankBinaryCascade(pixs, 2, 2, 0, 0); regTestWritePixAndCheck(rp, pixb1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixb1, 0, 100, NULL, rp->display); /* Add a border and locate and deskew a 40 degree rotation */ pixb2 = pixAddBorder(pixb1, BORDER, 0); pixGetDimensions(pixb2, &w, &h, NULL); pixSaveTiled(pixb2, pixa, 0.5, 1, 20, 8); pixr = pixRotateBySampling(pixb2, w / 2, h / 2, deg2rad * 40., L_BRING_IN_WHITE); regTestWritePixAndCheck(rp, pixr, IFF_PNG); /* 1 */ pixSaveTiled(pixr, pixa, 0.5, 0, 20, 0); pixFindSkewSweepAndSearchScorePivot(pixr, &angle, &conf, NULL, 1, 1, 0.0, 45.0, 2.0, 0.03, L_SHEAR_ABOUT_CENTER); fprintf(stderr, "Should be 40 degrees: angle = %7.3f, conf = %7.3f\n", angle, conf); pixf = pixRotateBySampling(pixr, w / 2, h / 2, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRemoveBorder(pixf, BORDER); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixSaveTiled(pixd, pixa, 0.5, 0, 20, 0); pixDestroy(&pixr); pixDestroy(&pixf); pixDestroy(&pixd); /* Do a rotation larger than 90 degrees using embedding; * Use 2 sets of measurements at 90 degrees to scan the * full range of possible rotation angles. */ pixGetDimensions(pixb1, &w, &h, NULL); pixr = pixRotate(pixb1, deg2rad * 37., L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); regTestWritePixAndCheck(rp, pixr, IFF_PNG); /* 3 */ pixSaveTiled(pixr, pixa, 0.5, 1, 20, 0); startTimer(); pixFindSkewOrthogonalRange(pixr, &angle, &conf, 2, 1, 47.0, 1.0, 0.03, 0.0); fprintf(stderr, "Orth search time: %7.3f sec\n", stopTimer()); fprintf(stderr, "Should be about -128 degrees: angle = %7.3f\n", angle); pixd = pixRotate(pixr, deg2rad * angle, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, w, h); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 4 */ pixGetDimensions(pixd, &wd, &hd, NULL); pixc = pixCreate(w, h, 1); pixRasterop(pixc, 0, 0, w, h, PIX_SRC, pixd, (wd - w) / 2, (hd - h) / 2); regTestWritePixAndCheck(rp, pixc, IFF_PNG); /* 5 */ pixSaveTiled(pixc, pixa, 0.5, 0, 20, 0); pixDestroy(&pixr); pixDestroy(&pixf); pixDestroy(&pixd); pixDestroy(&pixc); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 6 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixs); pixDestroy(&pixb1); pixDestroy(&pixb2); pixaDestroy(&pixa); return regTestCleanup(rp); } #if 0 pixFindSkewSweepAndSearchScore(pixs, &angle, &conf, &endscore, 4, 2, 0.0, 5.0, 1.0, 0.01); fprintf(stderr, "angle = %8.4f, conf = %8.4f, endscore = %f\n", angle, conf, endscore); startTimer(); pixd = pixDeskew(pixs, DESKEW_REDUCTION); fprintf(stderr, "Time to deskew = %7.4f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_BMP); pixDestroy(&pixd); #endif #if 0 if (pixFindSkew(pixs, &angle)) { L_WARNING("skew angle not valid\n", mainName); return 1; } #endif #if 0 if (pixFindSkewSweep(pixs, &angle, SWEEP_REDUCTION, SWEEP_RANGE, SWEEP_DELTA)) { L_WARNING("skew angle not valid\n", mainName); return 1; } #endif #if 0 if (pixFindSkewSweepAndSearch(pixs, &angle, SWEEP_REDUCTION2, SEARCH_REDUCTION, SWEEP_RANGE2, SWEEP_DELTA2, SEARCH_MIN_DELTA)) { L_WARNING("skew angle not valid\n", mainName); return 1; } #endif leptonica-1.70/prog/weasel2.4g.png0000444000175000017500000000135010400443670015030 0ustar dandan‰PNG  IHDRRIÓS™P PLTEUUUªªªÿÿÿÁbÑ pHYsb&2‚IDATxœuÕ¿oÓ@ðQ–5ƒÊÒ.^ú'Ô©²à”^†t`)RåÜ‚ÄÂ’Fm¥n5rïuè„T$„ÅŸÀÀÐ)ê@Qµ>î—Û17Dò'/Ïwß;;À*Æ%Të!)ŽžTZ‚bŒJ:®ÔÉÀÛV…R«ƒxUÔ$ò:h¥RmˆV衙ׄ%ZC¤Åxò ;­‰kÝIs ½’ŠRÜ“át¦*Ò¢ ©sY‰¸Œì|­¯ƒ %¦}}½è⥫ðU6î§*gÀ“­9&¦9øªøN´×ú[éj?‹©è½P BK}I—òÚB­*õ©‘.Elgš < ye1ëdHJïú C;Ó}¥ 1ö[b&yFVæÊJ,"ŠG˜¾¤w†¼†éI,W°;oå•ÚÔ±1¬¿™ê¶8¢Hmtž,Εñ@¾v ù­v¡¤ÇîÀÎé:ôƒ­•i}†ðH´7µª•)¿¯}-h ÷ÇiÞ(Mt®âÃ}Ì® êþ4b¦RßV{Œ tÞt»lF ŸlYÃsó!›Õo°<«Áíº?«ÃkW>ü/ úþO•~¼\— š™q}þË•ºœ)ômþì•nñ—¬ ¼[I5ÜÜòèÊޚЋ8Õha3¾óÛ/Ädïgó¥õÅ«ÛØ¸Ç¡ãOÕý½þn<%l¤k+¿Á‰ÔK#þÿ@¥þåœ31p<IEND®B`‚leptonica-1.70/prog/runlengthtest.c0000640000175000017500000000525612242265664015543 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * runlengthtest.c * */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixh, *pixv, *pix, *pixd; char *filein, *fileout; static char mainName[] = "runlengthtest"; if (argc != 3) return ERROR_INT(" Syntax: runlengthtest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); startTimer(); pixh = pixRunlengthTransform(pixs, 0, L_HORIZONTAL_RUNS, 8); pixv = pixRunlengthTransform(pixs, 0, L_VERTICAL_RUNS, 8); pix = pixMinOrMax(NULL, pixh, pixv, L_CHOOSE_MAX); pixd = pixMaxDynamicRange(pix, L_LINEAR_SCALE); fprintf(stderr, "Total time: %7.3f sec\n", stopTimer()); pixDisplay(pixh, 0, 0); pixDisplay(pixv, 400, 0); pixDisplay(pix, 800, 0); pixDisplay(pixd, 1200, 0); pixWrite("/tmp/junkpixh.png", pixh, IFF_PNG); pixWrite("/tmp/junkpixv.png", pixv, IFF_PNG); pixWrite("/tmp/junkpix.png", pix, IFF_PNG); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixh); pixDestroy(&pixv); pixDestroy(&pix); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/extrema_reg.c0000640000175000017500000000611712240303160015112 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * extrema_reg.c * * Tests procedure for locating extrema (minima and maxima) * of a sampled function. */ #include #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, ival, n; l_float32 f, val; GPLOT *gplot; NUMA *na1, *na2, *na3; PIX *pixt; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Generate a 1D signal and plot it */ na1 = numaCreate(500); for (i = 0; i < 500; i++) { f = 48.3 * sin(0.13 * (l_float32)i); f += 63.4 * cos(0.21 * (l_float32)i); numaAddNumber(na1, f); } gplot = gplotCreate("/tmp/extrema", GPLOT_PNG, "Extrema test", "x", "y"); gplotAddPlot(gplot, NULL, na1, GPLOT_LINES, "plot 1"); /* Find the local min and max and plot them */ na2 = numaFindExtrema(na1, 38.3); n = numaGetCount(na2); na3 = numaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(na2, i, &ival); numaGetFValue(na1, ival, &val); numaAddNumber(na3, val); } gplotAddPlot(gplot, na2, na3, GPLOT_POINTS, "plot 2"); gplotMakeOutput(gplot); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ regTestCheckFile(rp, "/tmp/extrema.png"); /* 0 */ pixt = pixRead("/tmp/extrema.png"); pixDisplayWithTitle(pixt, 100, 100, "Extrema test", rp->display); pixDestroy(&pixt); gplotDestroy(&gplot); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); return regTestCleanup(rp); } leptonica-1.70/prog/pageseg2.tif0000444000175000017500000077155611266777654014725 0ustar dandanMM*òrþMQÄGhì†H å\ÀЈ‰ Àä$s9PP嚤DDD†IGeF94å…V""$2VãœsÁI¢¹P+DDHd˜ä?Ñå6ÕÈwdpÉ‚8d‚á‘‘Ä#¢èÚ!¢³ÞGË¢<`!tG":!²àå̾GˆŽ‹äqHàÜÂ#‚çòùÆ^0‰xÈ¥Ñ|Õš²ŒáˆèG‘Ùs#†‘p.GÄ0‚äpË0‰sÁq  qÈàlܸ+`¥PG¡±¤s#åÑeÃ4Ž` –G28ODDDHª#¢8l#€¨eDDH Ô›Ø $›œR8 ¬Nè‹£Ù ´GhjÄD’¢ùä]Ñt`B8d™  I²34GDx¸üDD©"èÖŠ|ŽˆùäXäpBPøˆˆˆˆˆ‰\—.ˆè‘ò8CdDDJâÑ¼Ž‹ç]2"#ùÀ <Žˆã. $tmF³ˆË6¼î™|Â#çDGÈèº'd|â1ŸeòÑزâXaÚ˜ˆ`„C"%àÂÁ‚A„ `ˆär(ä09ÃÒƒqÉñÄdÈo xp9Xå‚rC”8A Cœr‡(p‚ÂHQÊrsÀAdW0ã”9!ÈQÌ9ÈjA`r Ç(â"@ê ŽPå"YC‰1ÂG‚E|ã˜sŽ.M Ë,Š8 „p‚Äã”9!ÊrrC‘&9NBXäQÈG0ç ²§(rC’ƒ‚Àå!C’ƒHä‡ ƒ¾·Ä§(r‡Ì9Ç(qC„#¢=Þýp%ŽLŽ/ƒ(p‚ܱÊ#å]ù7(p‚‚ŽPê/‚ (|±Ü „G$8Aà‚ÊJ§&9N"%Hr‡Ì8 ‡(rC”9ãâXåPà‚ÉPåŽaÿøA„ሑ`^"ÈêB8AFPøAA~& ±‚ âPÇÄF‚ r‡âX „\¡Ê ±Á>Xœp‚÷Ä ±(s8A}„ú¡âÄKðB"qÌ8âø »ÿø‰1öâXåD'ıÄaâ !Ac‰NXˆA|b9NXá0‚Ç ²ŸÇñ‚óŽ#åÙC…ÄAø‚ Ç‚ÇðsU„8æ °‚‚Âqà +þYNPåB8AeˆAXCC•p°‚ñ„ >ø”8AF0‹¡ñóŽWD °‚aˆAbqÊÄã”9C„ˆ‰!Ê¡ý‘Ð\`ˆøADá"#ˆA Oµ™Â  ñì ·ħ,Dp¢"Pä2²Îæ²¶eü_8å‰C„!„PåŽTpADð_áz(p‚ƒÇ/ÄXYCŽ9‡>_ˆ‰C–9Câ!ß‹/åB$Qòœ ±qô]B ÄD±ð>%ŽPå9C„ƒâ"@ð8ŸÇ¡ÄD ¢ aEàˆè ¸ðe[„ Âøý1ØBPær‡‚ !. Ds8Ab!•#ö#ä‡(ñ(rœ¡Ê „ „ °‚ "ŽPàAâPâ"8AcüTG(|¡Ç8å!(áÈøAD\o…ú”8âPáˆÂ ±È·ŠâHS„"%ŽPà‚ñì¡Â‚  ‚°‚ qá #„ˆˆì!,s9CŽ9NX’r‡Â Ç(r­ /ãå9C„ø–9Cœp‚øŒ ¸AvC”ëCAöH£ˆøAe%E²‡‚³Bá"%8Ab"XáˆâS„# ñ8øˆ„aÈQÂ#—Ø!$9C„‰C”8 °”8AeB8”9NPãþS„?ÇÄGÎ8Ab#‚ „"1ýAYC„ˆâ%8„`xœp‚°q,r‡(p‚[ùCœr‡âqÌ>9NBâ!â%ŽÕã,"+˜|D ±|O°²‡„#„‚|D¡Î:üD±Êp‚Ä|§(p‚ÜC”9Cœpˆè!8áø–8AA„ ˆQÊ,!~!„"9Ç(qƒ/Ä}DJ§!Ì8A7•PþPáÞʡ„„På8ˆAbxýÄK¡Â ð‚þ@ªƒ”8Aˆ•}â0Ââ#–8 ‡(p‚øA|^8å4GÊsW‰!Ë.,!(p‚‡8åVK‚‡‚üã”8AÂaâ ¥ÁðCÄŠ9C‚ Çds±Ê)Â\}áŽPåD ²žÏLD °¢"8ñoˆ‰c”9Ÿâ/–8AbÂüDĈ‹å(‹ ;‰‡8á‹”9!ìÃ…q É'ò‡Ò/‚¼q‡,rœ„qÈaÊ™·QC‘ .%0”)´;˜pAˆ–8A;”9V^Â(rÇ(qBAbXå^#„ ÄD¡ÂqıÁqÊ „N9C”8ˆ„%ŽPàƒ# ‡!ñ8àcÐA „På ÊÙÙC‚ Ç(p‚ñr‡) â""">XáÐ ¸„ˆš9C‰!ð@¸‚Çð@±(rÇ&8? °|¡Î>?‰Ç!)ñÿ,r‡\Iá#~8áŽXˆ‡!Ž¡ þ8åÎ8Axˆ”9C„"?ñ¡Á0D‡,pˆè \N8 ±„Pá…°‚ÄŒp‚°‚ÿÄ  ð‚ò‡8Aaìaˆ‰c„#”8@„D¡Â Ç (qq\1¡ñÎ8AXAx‰c„ÄvG/(rÇ÷Ù‡,}„PøAx‹ (w‚±áã”8ˆ”9Ç(qÄMqâ'/ñ»þ!Pç¡Ê0å,D…$"Páâ"Xå%Hpž-r¯ øþqÌ8‡(ÄDã„,~XŽ9Wð‚èö1e_’%ˆAA”8A„YÇ!ŽTÙCÈï`‚‹ðPAb"Hr‡8áÒ DK¡Î>$W,aÒ-„K¡Äp‚ŒD ³ŽPá=„LsŽPå"%Ž ¿B%qÊD ¡„Âñdt”å|üp „=„Ž!9Ç,r‡àŽ8Aaâ9c”8Acû#¢:#DQñqÇ‹Dr‡ &b=ø4B ‚ÄD±Ìá#þÄDD\¡Â# ‚„>?âCøA`‰æ¡ÇÎ8AùCˆAb"qÊ~ˆöPá#ÿˆœp‚Ä ²‡8å˜pAb>På8ˆaËã„">‚ $œ „rÇ/ù!Ê¡Î9‡"ŽS‚ˆ¸”8Ac„G(|B  Äã–9C¤X’¡ÁePþXAb,q(1!Ò!ÿ!Aeâq 8þ";#¢:#¢8'8åˆA`ˆ²è§ÈÄs>ˆæ]˜eу#²>\Ë™xÀB8§3ì¢.fyŒž1›3 ²8Èâ‘ãR qœyDt\ÎdxŽÐÍ#Š`eÀÔ åCŽ!e9Cö:”8@œA„På8Ab%^#AxˆAd‡(qÊ „DB Ê|q)Ê¡Ürœ „B ŽX‘ŽPã°¿Pï‚ ÄHXÄŠáŽ"OG!$â""""""""$ÈN"""""""""""""#á”8Aáø@²‡!q(pAxˆœr‡q áÐ@¾& ¼ ¼ ±,r‡/ıÊ,DB ) Ç,ã„"MÄA8åˆAxŽPá ±œ¡Ê>Hqð‚Êã ‚ˆAbPù‡,qä ÁXr¦9`i9†˜ä3ÁC“rC“²°Ã–äÜá9Z¢Q'9A”ç±Ë9NF9è{*ʇ+9»//‘èâ9ÇñC„áÊûóŽCþ#ØAxˆÙC”?ˆ˜p‚Ʊ| ±ŽŽŽ‚ B ,DDx0‚ÄrÇ(tQAyÇñâPãÃÂrÜÆÞÎÛB"""""""""""!æp‚Ç8á8‰C”9Ç,B\¡Ê°‚†Qý…(ï(p‚KñóŽCì,¡Â K¡Áġʧ.Är‡,x2‡(sŽBPèAbXáxùÄr‡/óŽañ!(sŽ9NV!_W¾%Ž^"PæqÄ b ùCž!„ï™Ê B"8ùÇ!8á#„8„aq¡ÂJqQˆøAb" â8‹§,¡Áâ_„Pà‚þ/D¡ñÆÊ œDe#â#šð9‡(0ˆèŽ‚0à‚ÜD±Ê§‚¿ ‰Ç(s9CøA^#–8Ax‰CˆxYÇ,DN8Ag „a8An9!ò‡,|G¿Ê ¼G rn^XˆÂ(r(ÿ„IPâ$Qðˆå ¬Cø…âqÊp‚ØEW‹,{ùOˆåÆ"!”9Ç!!ÂDD ¼GñÜqCâXùÇ,FˆâqøBXâq !ÇþPå‰!Êr‡!Ç÷0ïð‡Êp‚ÇãÁòCˆá ˆøAD±ÊB"8AXA–9C’q+!¡"Pä‡,|,qË X8Ab!–8ˆA`‚ÄDÜr‡Ç(rŸÿùÇÄã„”8A¯ã”8Abã…áa#á•$Lûò‡‚‚üÎX‰Cå8Aå9Cˆ„S„„qĉˆ„^9‡!$8A’«Åò‡8åC‰p‚ÄWÿaU,!ÇÊ¿/ìu.C„¿ß‘ÐBPaDYR:#¢8^8âPç¡ÂG‡,DåSˆ‚ø‘G„$‡DT „HAÊp‚, ¡ðX ^"8AePã‰C„G_â#”;  ˜AE‘Ñð‡øzGñaxA qePþSð@¹C¯‰Ç(rœ „| ‡J „ ±.1‡!ÄDK§!Ê¡Ç>Cïœp‚ÄD ¶GDz#„øˆ„/û(r‡qá„ 1B¨(qG ‚à±!Ä ¶1r‡(°¢âYCŽ!ePþ]ÂAe"XåŽB#ˆ‘\ °ÂÊ ±Â IXˆˆA^#”9Ç(qd{’”x0ÐSƒ'Ž ›#Äp98ÍŠxeÂ( à…Ä.„#†r8,‘à ;ˆå8A ±‚#ÁvPá âX CHÇ!(& †„r‡GÂ)Ê ±Áð‚)Ê¡ÁÄ„p‚á 7 ü „qü_ÊãÐA‰NBâ8AˆåŽB!!”?ˆ‰Ç/DB G8åBŽPñï0â#„xAvCŒÈ.#Œ B8Ë¢èÄGGd|‘‘ÂÁr>G~¯Âý¯„òœ ±+(s"9P]$Q (r‡ã §r‡(teå"X\Gae8@œPeB8AXQÄD§0â#”9ÇÇ(qóŽPá!Â á ¯q!$åâ!ø¸å‚ûT¯õûïT¾â!¸‰cøB,,±Êx0b"ÿ(„ã„Pሄ"Hññ½èæ9Ç(qœ¡ÊDሃ„ˆAg¡ÂD\¡Â (r‡aå9C„ !(p‚Äp‚ßëý{õûý5]åSˆ‰C–8Ab0eŽ‚ ŽPáÁ0øŽ>*Ç/8å‰Ç(r¬¡ÄGÎ9C„ÙC”8@œ{ B9C„9Ì8@±Ç,p‚‚,$8QÇŒDŠåþPá""åPâB9œDWÿêBÿ_û¾DÄD¡Êr‡,q,t\_ Äo'!‡) ØA WñÄ!,r‡(xADr‡, ‚øàa¡ËrÇ¡sX C‚”?yC„Â$8AaÊwð‚Ä „§0ሄq÷&åPè,¹ ¤AÿüŠþÕŽÍxˆá”8„8åPáq…œp‚ÜYÂ*8@¼AðAnaÁâ8Al,Gð‚‚, …œp‚ÆÊˆ„8â"¡”ã‰C„„â"Pá…!±Â ÄA¾#‚.™ÁÈgÑ482''ôB ‰ßè2¨Â#¸–8A_Ø ¼FÊ<T ¬qÐd üWyC„Páá"åq ÇÊÄsŽaʱ(r‡/‘â=ðä‡c”8Ad( °ˆâPø–8A~9Nb#œr‡òÇ,fFy>aÐU˜2‡!ØsŽPä¬Ñïòý?ÿBÁú‚ÊDz q)Ê(ƒá CáaAì „x~"1ŸÞCø–8AX„°Š¡Ê¼DCa*""YC„÷„Ž^%àø”9‡)Ä „  Ç.ƒ§(r‡H®Qb"ýH>ëÿúþr/ß°‚ñ«Ä9c„¢%/ádxCÄ8A~Pæp‚°¼að¥8~0‚ÊÁø=˜r‡!‡,r‡Äp‚p‚ð‚ü)CÈâàð‚+(p‚a"!ø„PåŽC”9C”8¯ü_ÇøBáùIDrœ¡Â …„"Ͼ<_#¿ïAQePå„å C‰!Êr‡,¨,G°‚üD›„"Pá‚ Ç&ÄW„B * aÄ_@‚ðùÇ;ââ/ âzÛëÿëýßÃ,}„Pá|På8AbCüQ!(Ät8Áa ØFB|¡Ê ±B "!…a6]ãã ±þÇ,r‡!B ðAþûïû#‡ð±Ž=”8Ap‚ˆ„Pá…Æ#‚ (ƒà‚Š„qáÊ ±Å…•c¯ÂÇħ(…²:# ^B, ±8áB …‚ !X>Dã”9ÜãîPá ‚çψ„‡¬ ‚â"X ±8å"(ú‹üFö­—~ýÜAþÂPˆ¾PáØ±x QÈ￈ô!ØP@¾‚ AˆA`‚Ä … Æ„  ñ$8 ¸Xá/ˆAg¢'¡ÁÅ$QÜva„ ¸¡Á‘áx@„rÇ(r‡÷9C”8‰Cœr‡*ð„§^Ý?¸ãXïÞƒÿËØEŽPá|G(r‡ŒÇ(r‡þ„‹ß„>#}‰C™Â ò‡G "!^8¾Xáˆå8AxŽPøŽYCøˆAgp‚þ±ò‡Ž‚"8R=a”8QË ¯ØPÂ/ÈÇÈ=‘GoíH£ÿcŠÿø ±8áÄEÄ ¯Ç¡ˆœr  †¢!>0ˆè"‡áïÁ„ʧáq…,x°‚ÜG(r¬ ±8âXœp‚ñPbâ"Pã”åPá!.4.GÂCà‚ÄD¡Ê µ„(ïUöÓ¯ÚÛöõû….ÂåŽQb9C”8P‚ÇÊp‚ Ž‹ Š)ÊGEÐEÂÿ^±a2‡/ „ˆAa¡¡Ê„²‡(p‚Áâ,Žˆá”8AaGD|Ž‚ÈG/ÇÁ!'ÁQ!,}„;å@">p‘ò8ÈáHùeÀðlýõíîïÚí=y¤|Ž2>\!ˆè¸ÈùHá¥Þ0@±„Påðñaþ+ñÛ,#ŽPåAD ¬(ö<"‡(Ç,":(†áþ8”åApý˜r‡"qÊq~ÂâBPå,DIC„â"PåŽGßÁ„Pá„9Ç(p‚ÂPB""/îÿí>׿µ^„DDDDH4GŒ+ÿdt\ ¿ ¡‹- ˆña8AGˆ”=øùC„ZAY…ð@¾‚ ß(r‡ ½„',XADã”9NPá#â9C”á @†N]øAXò>Š _ˆŒYC„ˆåUŒŽ!„GAtÖí´aS};A§Î’ˆAaqÆ8ñaa dq|y!óŽPåÖûB ñÐñË »Â a8Axˆˆû# ‚Ø\Dr‡(sŽPàyC„øâXá‘‚Äk/Å  ‚ì|G)Ê":X‰C„ˆAg¡ÁÐ ¢?O† „  „MPèO¡A•2œ¬:ÉNG‚œðg?ž0§"̪ÎfGgß•"¢ŠJ¦T P«-Ë‚Ë`r‚È5ÁÇ!ð…ìrã“â‡;ž ¡H: Â¥pˆd„ãØA| ¸A  „!ƒ,¡Ê¿(pAxúb#ùC•„†[(r‡/¾ˆœr‡(pAcõ(“^#Þ#á”?ˆAa ‚/à‚ÄG(ñS„8„b"9£ÄDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDt@ðUÊã˜r‡&æ‚´(‚Ç)@‡ì!ˆDtGA}莋 °¸ãe@AoáØ8_è £|§Gô\~#¡Î9C‚øåŽV#Ž%9C„øœp˜ˆ‰C„ˆˆAPøAeâ&§.e>ùCœr£ØArŸò‡!)ñ‡3„>ÈèŽ`¢9‘È G2>n#Æó™ˆsø2r(炇(rsŽg(r 9øðPåŽw3”8”9cž ÖDqHE^? ½Ä ·Ê\ ‚ˆê„‹ÄA”8qâ„r:#¿ùÇ(¼aÙ‚âaì …üc.‰„"Xà‚Är‡Dx2‡!|r‡„(p‚cøA /ެ »!‚ÊàˆÄDDDDDDDD~0„DC•©Cœr‡5„C• a b"""" ñ„Uð‚¸Š±Åâ0˜X\aàAr‡8â9Ç,C(쎂øACœp‚¿…„ ÊX˜p‚œ †„B ü§-„D ¼ã„GDuý)C• $bkEÕ„Ç„` [ˆÁ„ˆŽ$0áè £•ð¶GDtG|v±N\#ÃñÇ(rœAâBþPáå±Ê¿A9C‚ãA<¿ïõMA—Ì"}štºUŒDã„G@¡9c”è ¢!ñ aÄ ¸@Ÿ„øöZ(‰C”9C„8–8Añƒ.»0å^4Çx‚ „TXAp‚âS”:â"%8DuöB‘ÐA~?úL „ ¶nM›B"ÂˆÄ ‚‹!üðPð@‡ãÆ"/â=„x‡Ê^"%9C„qñüñ1„aƒáœqË „aYC„ +Ç„]òœ¡Ê(AcüŽcþ +–ÅC"¦gC Y ‰C.¡&S#ÐÜ”ƒ\† åŽPåáam °„V¡9c”8":.PáÐA !”8\_ÂˆŠ„âS„GQðA}‰ 8A8\|J<޼xŒqã,`‚Ä{-|b<µÅ²FHÁ3H‘„ƒ@ ŸQ0‚2 m¥‰!G+üaˆx‹ ±ƒ_°‚ìq ö\C-Ì8\Cç\~„\¡ÊG(r‡, á!ð°a²‡„&0ï„üvE×îÐz§§¦OŠã„G@‚¸VGE ˆè‹äêÈñ†QÆü±ÊXÑAÊ&-`„V4X ±Q ÄýˆA`ãáðAe‚ޏ£”9V#~_ˆ„Q0‚ðü8P‚!ÇÐA<1úú'ïÑxÌÚ/˜t_fæ‹·Á>($^3ÉDK¢ŒŽ„d1Á  ‚á„Gr‡a ŒB !¶?Ša²=ð‚ÄD ¸?×ãá”áä6]ö%U„"^ÂñÇ8ã•Ø†Š¡Âø>!Þ!Èê, ¾ïÐA¿¦ªÒm ÚA¿"1‚)Á $fÆE°ˆè!ÇìG”8ˆAXX_÷‚ ² ": >ÄDK¡ü? 8AEˆøœwƸx>%ŽP㊠¡ÐADã”8AC ¶+|B ÂFPå8AÂâ²=ÿÒoÔt›é¿¯¡e9\“Í!>‚ ‚ ã„GAaÊ‚‡!/°‚N9! Áv1‡Þðˆè"c”æB!âø„!‡ˆ ^BC8”â!ƒ ¢nPðŠxŒ º\^" ±qžYPàéý×ýim}„ ÄØ‚)Šü °‚ °°@£áœr‡+,Fʈ„¢Èi¹Cƒ ¢ø ¸á8APá!áÊ,JsÀAl,ã”8KÄl¡Ê „IÀˆA`p‚‚°ÂˆAFÐCeT ÅÇ*Â#áxANdtGAq£ô½·ý}±÷ftq"nôP„†‚.Âø‹añÂøù!ÂP‚ \qʱèa‚ „!‹å^8A?°‚ì!+(p‚ÈáýHp‚ #”9Cœr‡Ž‚ ƒ„">(!Ê`‚ü0b,,XAD ¢!üŽ‚ã.]E"ëíÿ÷ÿÿè* (Gö'©ä"=”:.!ˆAaû/÷á ©C„ˆŽñ‚ ñA9qàâ/_Å…„xøAxŽ%8AYCï”?øöE ‡Ç!a”8@Ÿ¿[˜pAxû! oàøC¾g,~¿KÛÿý$»qB‚'ðSZg+b¢XáaD":/„ÿˆAãùC‚#¤âEB#§‡qcÃöQâÂEà/°‚쎂ò‡, Oˆ„xŽÂ Ê (q* Ä N"ááâ?ÈêÿÂ(p‚ñ ¼z¿þÃ_ÛÛÁ.Èø—¥’>‚PŽˆ „C¡˜q‚ñ8ሿÈïawÄ` ñ Â#¨8”áÞ ¸ \Žëã˜p‚Œq)  â#ˆˆ–:×”8 ±‡(p‚ñã(pAb=„b9C”8Axˆ@¿þþ½‡Ú]¥ëÂHE#ZˆD „bHrŸ…”8!cÙC”8 K„aGÊ":ˆ°Š¡ñCáñ/¼h¡Ê ‚â#”>G!ÄD±Êã–9C‰c”9NXÃû $#„""Q.øCò‡+±ü§,qÒÿ$†Úí¥a/Áåk+!!3Ëá&ˆú”9Cœp‚ð¶PåQøŒ AA‚ G¼XAx¿.>Pà‚ñ‡._8åx”üBÄG3„Ž8ã’±±ÄD …ʡ vGˆâ„Er‡!a‚ö…‚Œò¢9r‡ÄB ];¯ÿ^’ý„0µ!£4‚1£û+.&0в‡¡ì": ˆAb=„÷ˆAxÇŽ/„ !Ê¡òC„" "(pˆøA‚$QÌሲDãØDx/(r‡R‡"ŽXáÏB"Aw„‰å ð˜ADã”<*,rœ†(r‡…”;âqÂ# „ ´\Dl ²œ|±Ä  Â C”8A¨¿ç¡Êr @âYNB6> ±ÈðE8AD!|¡Â^®s#âGAÑdfp‚¿‚ ˆAAãÃÇ@°ˆë‰r‡ó;ˆADˆ.9C‚ ÄrÇØAcsŽPãcˆÅâ0‰VXŽPþ ¡á„BVD¡Ê_ePå­¤# ~-Öc#¢:RtyJ¡Â~„_œ ¸ ç „B¼DN8‰c„„á”8 ±!”ø¾' °‚ÄE ˆœr‡‡ñ”8ŽU”9CåXˆˆA`tÂᄎkŒGâ,©áÐŒJ§,B Ä!øˆå E…„ñ‚ð‚Ç!qÊ „q)Â\D £ðâSŒ™Ê „Do‚²‡(q!Ç…á">_F/ÁøýÒ"sáÂØDtl!ð¼9Ç(pAÁ C–9¡ÊqÄ ±¥Pì!(r£‚Ãð¼ °`ãx¨åSˆ„øÁåˆAġϾ9V^/&m?©—Í¢… A{áÊ¡Î>#ØAa~!'!ñ+ Pâ$PáÐ £áÐAPø„áâ.På„ ,?â8–8Dt Î8AoÇ(„XAc/‚°‚ÇGÿd~B#à•ÈgE…áŽ%_âñXŽPã”>!ĆXÿŠ„YCâùC”á㈄,,¡Â )ÂJDH£øßâ ‚áP×…ô^"å^ÿ (DHøK.ˆùt1!,pAxˆåL,|AXœr‡(pA„„qò Ç) ýqB ýþÊ¡ÊÄD刜rCåŽ%8At#˜q8á(ø ± ‚ÆC„Bû–AH+ϳW(xaˆ‰C–9Oˆâ,^G ‡ñˆ¿‚(œp‚ƒã,r‡,G"ŽB!²c„ŽC4r‡‹#‹!"Pà‚òCø[ˆ„G_èá¦_.…GAt"Î9I ØG(pˆì!Ç _„/ø–9C„XA(]Ásq øEŽPå9Câ9c„?(s9C‰CŽHr‡Ê¡Êr‡(pA#”8 ²‡ì^>Pá %PáDtc ,":[üB (¸a)&GÆ,|« ‚ÄJÇ(sŽPãâ""Pç(ŒŽä‡Ô~. üDDX‰Ç â‚ á%ˆ ¼DGˆŽ^þ]â]„.ã„ÿB5éBc–;„0A‡ 刔>>\9c„0ŠDDD`‚Èè(ç¨(wʧ.ÄŽXùÇ(r‡!GP‚,X¿ˆˆ„”8.Pç ±/Ä` |#h µ‰WÁn"] ¡ÁæœÂ°‡ˆAx £„\bPâ8Æ,DJqÌ?„”8Al ¹NPø”8ˆˆ–8AbA(p‚ÄD „B ¼Gƒða3D ²‡ £‹Â.'ÖÔÑŽyñgp|7¢‡(p‚¼AÂN9C”> ¹c…!Ç BQˆÿ؈œr‡$9c”9c‘GcˆŽXå%PèºG)£.„)C”8/¸„øøA{Ž‚ ûPˆø›IPˆ†Aðƒaââ_ã‘GãÁ „.ñq‚ƒÄB•C”9Ç "B/áad{DJ":â„G\>Æ41ÿ‹™¬ „â qA±ì¡Ê ‚ã„Pâ#ç¡ø>X_`ˆêPá"! î øÑ‡(sljÇ(r‡]á{ñÁC  ‚âVÔ¾$uÚ‘úˆ„?ñ<ø”åXøýŽ%8Abâ!XAu0à‚óåã˜sŽPåÂÊ^$W(p¾& ‚â!8EÑ/A0‚°¸e×â°•()C”9C„GDr‹è ¸ÄxÿDAÅñ,r‡ò®/B#…Âq #œsPåŽXáØAb#„Q¾A~%ŽPâÂÿƒ,D¡ØáÂÿˆæãŽ%,!?GDtQ3„ˆAFXØA ‚ "<Ä ‡ƒ†!4PáxAb^Pâ#‰à ±Â#¨ˆÄeˆP‚Ë!ŒQœ(";…Â?ÐAÂ>ÍXˆ ‹¨Aa6Dã…ÆA”;ã”=(pAaøn"5„ # ‚ )ÈA‚B# AðxAx…H®PåA«ð‚ø ½„E ‚⎠òC„å.Q(ŽG)ãû:HL"èC„yc /ÇÄp‚ÆüG!…”9C„ ‡ÈøAGÊp‚ÅÄ¡ÄFÊaeXþ$‡$8aŸŽPåÈï‰N'G@‚á㈿Èèº(œp‚á?t›‚BšG¡!¨–9C‚.‚(qðAqb/–8Ab'Ä ±ŸÆÄG°¸‘GVP㈙ÊsB"øAS”9C‰C„Á1ÇÁâE/¿‚Ê^7Â(p‚ƒ/|Jr‡B 1ŽPå Ø_) ¨ Hg–G_¼ã#åÐŒ øåPü„ Ä_Êp‚á"5Èè.ÿÄA”8 ^E0ç8â%XAAåPà‚áÿ|/ !>C”8. ÿÿˆ1r:°GtA6W•*‚Ž‚ð?„„"a ÜDJ ¬¡ÊÁžQÇ(sŽPùC”8ˆ°¼\ °‚ÄDH áÐ!,¡ñ‚ 0ŸÄh »!Á £øAr¯|§Žˆä߯°„.°Ê‰.!ØAxã„b?–8A8s^?ÙC„GDw¡Â Äàx„#åSý˜uÄ ²‡¨xA{#¢<ñ °‚‚þQ|¡üq) ,¶‡¡AYÌ–8.>!!û¨ˆùCá!ˆˆA{¸ˆ„XŽ*Pç ±Äp‚ûâ…ð†1(ˆ„ÆØAxÇEðDt ;„FÓü¾ábÈé.C(…Ä ……ùC‚#‘‘ÒÇdx„">aÁ?•x":ØAe8A`‚qŽPáˆa‰Ç(r‡1b‡Î9C„G#¤9C„ì ¢S„b á8à‚ÿ Ž•ÄDmk‚#ᜠ°AbÂ8ႉ‡+(ábC”9C•B/„„±øEïˆâ!ù ;ÄG,B"E¡Ê »ÇÄÔ8 ¼G¿w.>¿ÐÒ¾h„1Æñ ˆêQa”8 ±(刄/Ê¡Áar¯,G(sŽ!ˆ‰8>qÊ¡Î8A B4qÊl »Äp‚à Ùxœr‡(t’ñ) Ð_ Ð1xA B>‚(xEXQ‚ %X@Ÿ‚üwCžB ññħ/ œB GAaDI?„/qÿ„Bˆ ‡âÄ,Gð‚Ab"$œD „ ‡‚Ê¿ü¨ùC„àÊÿŠ¡ÂÈiD&6T"]„_‚ árÇ(~ÈAÁÄh”8@†>]Œ0‚ñ0ˆï‰Ç„' ‡!¥(pAb¢,«Â ,r‡!#Œ1øez%På…Ž‚(p‚Êp‚!$8Ar:#¤0üa9C„ÿˆ—A ‹„1®%ÑÅ„B=cÇ+üã”8 CG¡Áð¯PáqñÇ(r­Ä ²‡„PïŒ ¾£ˆ„G@½…ˆáÈèð»ü¡Á„8CE~Å&Ax ¹x"‡)Ì8A*à!òŸdqB(rœ¡á¹C•XA"YC„â8@¡øáÐADñç ¯áeâ"qÊÖ7AN€±¡Á|Gˆ~ø!Èè ‚‡޾‘Äfœâ_ˆü| ¸]„l ¼B ‡(p@¸ÄN9P½XAc•~#ÞPä(åw„B üÇaˆ”9Cˆ„0‚Âò¬"<ˆHħ/a”9WÈ⎠¸ÂEþˆú„ˆ™£ha²:#È °p‚߯ü ^#ÞåPá0‚¿g X‰!ÊŽDãë‰+ät¡Êp‚ò-„…\¡Â",¡Ê":¡È¼D±Êð@¼r‡(xA„ˆæ…‰NPáÐ!q.GAŽâ‚‘Ösö"18ÙC”:â#”9ÇŽ‚ µñˆâ„\ÃÄ.Ê¡ÁB §ŽZãöPå[ˆAa쎈è/ñøAC˜~ 9 „㈔;øAx‰‡)ñp¡DDDG þ;Hº U\ÔáÑŒ ¾/œ¡ÂŽPå0~ ²‡*ñ‚Dz‡,D¡Î9C ± qø8A]ø”åpâø„°‚îXøŽ,ããAFYC”8Ab%ŽŽ” ¢"##¯ÓcÂ0†ƒÇ…÷Ž&§†Ç(p‡ƒÂ(~ÁIåE}„9WÐŽq ñ0ƒüx„Y (ÇÇ/! r‡(øaœp‚KˆâXåXˆ0¼ £ùЈ‰œ^0°„ ¼^<óã„ü0‚ácr‡ „Páo(}„Yâ"GA9Cž;áü ¢â!Æ0Šã„ŽXA8ˆ°‚ñc ­Ä§+s_ˆ¿âmA:«APå8ˆ‰\Èè(‡Áˆ¬p‚ƒ#ÁAø| ›Ê¡Ä ‡Œ":K¡Ê¡Âkì/""¡Á )È£„"%ANPþ_ˆAO(˜rœ °£EŽPáB"C,u÷±oˆAe9C”8D|Ž‚ˆ0ˆèŽ‚-Êñ&9N"!ÈøAq)ÊG!â:„DtGrw/eû ‡ÈégŽ¢6XöPåv9NCã  ñ…Ë$;þ] šXå\b8âPáÑ]Ƹ¹C•|!p‚ˆAq‡)Ê(æ|DGA˜A` "ãÁåÂâ1ØEPÿŽøœr‡¯þGP‚8An#á°¼":D3a•y!Á×è ³Lh¡ ‚ˆAa8AXAc‰c„…„ /”9C‚ -Å‘Â\qç‘!† ¼G(q—#CŽ^#øß ±Æ.""g!/ "%Ž(b âS„ß™â&kÁ%LJPë¿àÂã QÊsA>/(rœyF‚ ‘ÐEØF€AbS„ °áXˆˆïÂ!°¡âg0ç¡ÂB!ßÂ(r£ÄÎX@œF]˧R:>„ˆ^1 …_P‚²‡(qr‡/ââ!eq(qññPˆé":#¢;r‡!ʰ‚Î8”>ÂÂAFßñ¢ ¡ü|H9WàÂð/Ê/ôB#Š C3„ÇÄ¡ÁG²‡(p£ŽPáüa„m”9Ç(q”qÂÐ’ ¢1ãºJ¡Î<Ža(p‚áxaxA~?Œ!"F,/Ê|DŠ9C”8Ag¡Â ÑÇ'ñ@¿ò Ç(pAc‹CÆ#ÙC•ÁÒ#樠‚Êp‚ b$M×dzXáÐP‚Žg.ÆÌ9VBS„ $[/a$9Câø@¡”<"‡Ê(å8A„PçñÄoóŽPãöQÀåpˆ„ºð‚ 1‘ßý˜Áè0AxåqÊ€D| ¸AyC‹„"]„„|J XApE×^Â$8[ÄB Î8Ž£°ŠB ¿ˆA9CœrœDBØåSâVLwÁþPáØA`ä ã#¹®1Èè!(~AXAGû$8A A˜F‰X„„œp‚±‚‚áâ0‚ÿp‡.”r:.ˆè ‚ˆÆ…(p@±‹.Xå8Ac”9»ÅûaˆŽ|ñCˆ8…±ñŽ?AJµ(r‡+â¥Pá8AA„¿„ ±Ðñqò¯†Pàˆå NPá!„ ‰N^"Pà±P‚(rn8AbDŠá2=¡Ë „Xq(sS„"XQÍe¦%ÑŽhq…ÄB”á0°‡Èè ¯”9NPá0„ °‚°‚Ä ¸Aq8áPáˆ@Ÿ.¼Jp‚á9C£„GDwÎ8Ab@ÁÃÏ@âX¾PbBøœr‡(qÄãù´þˆè!B7 ˆ<Dt‹ ‡ýñ†!ñħ,|AñÆAS”8A$‡*øOǰ±På‹ ü|±ÊqC°‡*ñ„BPá"Xå/,D ¼!Ä ²œ ±×ÔYN¾ã˜p‚à‡8åPáb#•xˆŽP莂‚‹, ‚ˆóÊS‘G+ |T¡Êp‚Á‘ÐCü ½”8L!† aÂÇÉ „$nPå¨Ap‚à„„²‡(pAb#ˆ‰Ç(r‡§Äq,¡äuøa"Dtahã„… cœpž".S„Jã”8AâPü,_\×ÁÄ¡ÏÐ÷å8ø/X¸ÿ({.GDtXAyO’¡Ð!ÊwÄJw‘Ð!1ØXAYC‚â\8 ²‡!(ý¼DãÄp‚Â|På] /å^XAtX ^!„G ‹!A(ñïá‚ , ±Øô\~=„"8A²:¡Ì8A_œr‡!/Êp‚,ãî%Xˆ”8 ½…œp‚ñaf °ÿEÕ%,p8áü ¼|Jp‚ql £aG®"%Pþ>PáÁ~På_„œq!Áñl ´Aø Qˆ ÂâHpQÄ_ㄈr‡)áE ¯Ž¢"0ÂqÜ! ô{ «S^"X\|Ap‚Â(pDuät‡ |ã„ü ‡D °?ÂYC„8Aev"%,..YOâ%ŽPáPã˜p‚á cå%XA BPå]‰NXŽ ‚ã(q&X>%Uè Â#¡‹L ‚Êí„Aâ¹C‚ Á"œ £ñ‡(p‚±ޏ„PøŠÿ á~G{0á>‚ ÄFÊ¡ÊXŽPá…ÅÊ¡Ê „D":Gr‡(p¢$‡*÷Ä¡Ê „q/—ˆÿØb'\FPxË ‚ÜaD0Š^""_Â0‚ñ‚á c„ Aeħ&b„øAxAÿÐÁ”9C…‚ÄFð_$9CîHr‡‚×EPåqÂa|Jp‚ÄL9Ç(qèÕç‘ì>(„ ˆŒ=1±Ê°‚N9CƒöPåPàb$ å#šÂâ6XA.Ž"!Èè,{(p‡‰‡ På"qÊ":ˆ?ea Ê/0¸ï î9NPáb$ýƒ#¾„b*‘ËÂ#°Š±Â Ä>kÁÇ(rÇÄã”8„G@„Jã„ Ç åYãÇ(ÆGD| ¹Ç(p‚ávPå ‹¡Â ÄGÊ Cãåâ /Á„ñS”8¿ èN*(q(pPˆøBQŽ!pˆáfB"P瀂‚<|¼ÄB AÊo¼aa‚ ‚ß ñ„ÁÇ!ÇñÅB a{øŽXḈAgŒDŠ8":üAqÂJ °b.!øùNPá$8Acçp‚+PþaÂâ"Pç …„2ëðÆCŽB8‚ Ãá,Gb"PêC 8áå^8Åâ;ø”9C„ !,r‡!Ââ>"PåYCˆœp‚ ,D|ã”9CŽ!°‡Â C„á"âXá1Òý":ˆie8AcŽS„á' ° "C™Â A +Ÿ,)Ê ¸LŽ‚Î9Câ"#øAB"^AxÿAb"#S”9¯ „¡ÄYvˆ–8 Kˆå8Ab&ã„!‘×âŒO(AXAcá%8Ab"^",Ž‚ƒ-Ç^#‰œ¡ÿÊ ±Ä±Â ÂGŽPàˆøADK „wätG@¾é1KA{ŒYC„ A8AeŽPå"ö"PåXåâ!”?ˆ‰q(r‡(r±Â8‰Ç!,p‚Çq<||G8ø ¿±ñ,p‚‚Äv_õEú#¡ˆì, ‚ˆ¹C‚ ÈÁøAƒ„c‹˜|G²Ç,s’ XŽqʡ Ç) D¡Ç8Ae’":D ¡„‰c„âøø‰Ç(qʧ!\øm™á ¯ ¸ QˆˆAaâ8‰Ÿr‡È`p@„B 3„!ˆAAc¸A~#„â%Ž6Pâ;# „¡ñS„ˆ–9C”>#”8 ^B%ŽPàbHrœ ¼DάXˆˆA^,Ž‚(r,|N>qü ±‡8åN"%‰Ç,X„á°‡$:â"Xär‡(|Šæ B$p‚ËDJ±ÊÇ(p¢?ePå>#˜p‚èbÊ¡Â.ÇôGVa"C•aˆ”8\H9CˆˆA~"'Cáâ%Žaòp‚¡Êpáœ|B 8ù!ÊXâHqÌåU„åPሎXˆAvDB (p‚ÂDD§Ž‚ "#yõñâÊ ¸AvaâA,N9‡ÄDä#ù9C–9NB'¡É#’¼D¡Î9C„„å8ˆAGˆ‹0‚ÄB ;ˆˆ„¸Ag „ˆ8AaqüDK¡ÄrÇ*ñĈ”9‡q(rœ¡êW­¢:¨ˆñ¾‚ê"g(r qˆ¾PáâqóŽòÇ!¢Ç(p‚ÄN9œG3”8"8R"%S”>6"!ŽXåAEòCýPሄ"8DtWN†>¢§>"/ HKGA‚Ê":# C–8A Ããf§ b%ŽPå8Aã°‡(q…”9œ ·,p¢E㈎MÁ$8AAŽãåBL#–9C ‚âþq Â|¡Â 1Êp‚ábùCˆ„œp‚Ĩ.ˆÂ "%9C™ÄDB ±É¾#•e^Xæ-1°Ëᦱã¡Ê,IBaö„Pà¢=ˆ‹”9Câ6X Xã‚øˆÆQXƒ˜sŽ[ˆøA$A q"ʱüã„ è±Êã”9CŽ%Pîö^;# µ!•—-3§îGH §‘(…‹!œr9C”åB"Hr‡"XáG‡,H£ˆâHp„#‰Ç(pc„8ˆ¨A 8å"åPáŽXáØ‹ˆAXAb#œ|XB8A_ˆá×>²mˆ˜Êá2B'GchÂ>d|¼GÎÈÒ8ޤGd|Þ}‘ÑpÀ"[*Fgrø©á›Aà >‚)ÉPå$‡) óŽaÄK«ñ,r‡ Iä‡.ÂXø ± ¡âPáJ±ÜA ÅÂDIPà‚ÄGÁÄD¡Ê(Aˆ–8A0„\K¡Ê`Ê#–8A±;##¯‘0e)Àôw0($ HD‰µ"""ЋB""0A•P<ŠX2•`¥¸„>!Ø[”8 C‰!Êqq‚ÄD±Ìáƒ÷‰!Êp‚J  Ê „K¡ÂX ±Èî¢âHp‚¬ ®Q‚†""E¡Ä ¼G,p‚(r‡"$‡ÄL>Pã‰Ç(pˆè ¢!' ¼R_Þ@ñìwßá xrU]œSˆà¢c”8Œ0‚$9NXâ"9NPá"8AAã‰Ç4‰C„#ÄwÇ+!ŽPá8@˜b"9Ç(r‡á9c”å8AvPå„£ §.CˆAâB 3„â!`sŽBâ'¨ ÇB%ŽPá8ˆøAcÞ"?Âì † (qCž0‚Ùˆ8„”<"C•x@‡–êHò.¿È ¬ýÓÁƒý @‡+”9ÇŽ‚ñq(pˆèŽ‚žDtGÂò‡.‚G0á‰c‘G¡Á "! !"$QÂGʧ0ìXAa!ž /Ä¡Î9C„8„"X„!""YCŽ$‡8á0¼$ˆè„""BPá ø„D ˜Wþ«ôœ–‚ߊ,„ˆ‰NAøAxˆA0²‡ÄD¡ñ,sˆŽ'¡ÊDD§!!ÄJ^"C”8 ¼GÁè ¸”áã²=ò(åYC„ˆ ±C˜p‚ñ+Äaâ8ž ÉS„ú„ƒVuþïðƒ‡ýÑCŒ(2»(p‚E‘Ñ®9NS„$QÂDDDK§(q8æ · ²‡ìD§,_óˆã„!#‹(â&r‡)ÂA?”áˆAYCÂÇ*øCÙC„#yCˆŽ–áZB?îþõ8w^þÂ|r9Oˆå[ˆ£„Ž#à‚Â# ‚ˆ”å¬DJㄘwË „ŠåPê"8 ¼GEÑ’®U3Èùt]Èèº!|ºÿ×ôï¯*Ô ¢¡ Ç(r¯ıÁG! "8å¸ãøáˆŽPä¡Ê „D ™ˆAb"CˆqØB"Pæ,ÏãXø@Ÿ,§+Å ‚ ÄK¡Ââ.W#œp‚ÐPÌAã‘áð29D0AÇbÇü?·ô?膡Œ ‚Êp¸8”á”á"Cå%ŽÄl ¯AÄ „Dω >"%Xáx–8‰Ç,r‡(p‚Ç‹…Au„â]„; Äã”8Ab"a `‚ìŽˆéøŽË’(q¡Ïa4(Âgç”)õðïïH&ßðËåЊ„B„± Ç8æp‚ØYC”å!ÂD|«(qÇ,|J ±Ç!œp¥ˆˆŽXâ#”>±Ââ"!”â"^Xá‚ Ë¡ÄE.±Û£¹C„†Î8'o?瑚ÿzkúw¥ÐÙN8¡,¡ÂEÇ ˆúÇË+,D±Ê§!œq! ±ÊÇ,H£„a! ‚q. q8æì|§(p‚ñ| ±Ë¡ñ«p‚Ô7&Ê€B.¬ã q8æE3À@˜¨A ~ÿ׸zòÂeP莈è!(#‰!ÊÃôB‰Ç3â"Hrœ ±Ä ±Š9CˆAYC‚ÿŽPô!J-8OŽÂ !wÄp@£Ä °Ac˜p‚ˆA¾5¥Ùt8²±ßeÈ+- ‚*Ú÷ÝÓë„8„äQÇñì ¸`b!…! ‚ ¼¡Áñ ¼Dr‡ â”:”8D|ŽŽÉâÁðw{ «°JA%Ëâ?ïÿNõð’ŽŽ ‡|׈”8 ¾#„„â%aÎ>%8Ab"!%U‰ â!""¥Pâ#„!”>8‚.‚ÄÂr‡ „#ÿŽ%8Aˆ’à†ŠD*Ðlº"úΊPDt!¯ß¯éÝp„a„G|«+ "!„•e!õĆXâXøè ¸–9 ”8 ¼DIâ!(qÊ ¿Ê ¾Xá|B °‚ð‚Ç0ç „bÊ¡Â#áAw#ï^V¿!6˜,DÚªß]cÄ °‚ŒEò‡(p‚ÇÎ8AD(ƒà‚ÄGùCœp‚Ç,r‡/ñÿ!ò‡QØX°²‡ñññ|¡ÄDJã„GA1•س°¤GG}Ž_ˆì¯A‚ð BF/ßÛÝ]ëÂ#¤„qüC–8(ˆˆ„ˆ†×,q"Ž^"9c„9c„ˆ‰Ç ËÄ?‰C”8AxöPæ ±,r‡,G$>"HsŽPሉC„ƒ )Љè6'’C@•‘û.¡ ŒxAÐH‡‰~õÿNˆÙC”8A^%S“B,éC¾x*ò(ሉc”9,FÊ‘ÐX˜sŽPá”>6PåS`p‚Ä|ã”9œ{BޏŽ>"á' ±,p‚Ÿ!3”8HqdtGDw °‚ˆ‚#‘Ñu¼P‹)Ñ›ÿ¯ë®ëÙ¼#qÂŽ>S„!‰C¨¾Pá°‚Á‰C‚ ‹(r‡(q8ˆ„ ÄrDZq „."CŽ"'Üp‚üD „DwŽYCœq‡(p‚ð@„D±Ê^!ÂÊDp¸ˆAˆìÉefšýŒ¡Á 9»ˆþÖþÿªá±h °‚(|q.ÄWÄG ·AqŽ\8A c–8ŽXábå’ …Aò‡8åPá’±!$9!ð‚Á8ŽañDã™ñ8ሉ!ʰ‚Êr‡(p‚ áÄiGÍñ‚)ây)ŤB.÷}þþÜ †dX‹˜üD ¡âä‡(r¡ÄI8Aã•Ãå8‰!ÔEÌ8 ‡‚‡ ˆˆœp‚ìJŠ9c”8’ã”9V>ˆå8Aa8Ae>!„#Ù‡(rœ „B œ ³ŽaÇ!¡aÒÂ[+„ÊXÿ÷ÿÒñ —ì0ˆèŽW5ðŠPà| ‚Êr‡(w‚±ÙPa‰C’¡ÁQ"$‡!„'¡Ê%ˆ’ °‚)ÄN8‹ ±ŽPåX„8‰C„8œp‚ „DB 0ãf ‚â9NXDt¢#A"8ŽPºß­é'wøHp± =„GHqÁâ>PåX“„<æ #”8ãe$QÊJâ"Pê"9!ÄG)ñr(å9C”8A‘G°±/Ç8â"X ±åˆá8‰C”ለ´N„K¡0‚Gÿÿ­×ر,ã„ ‡ð¢"YǼJp‚ñÀåÈ鄉ÇÄIà‚ÄçqrC„„’¨8ˆæDX_ã”å)ŽPå"%Pà‚Ê ‡Ç(sŽPã¸Ao‰Ç(rœ!8 ‚fVNÊã†G_»[Ö¯ÒÔç,GŒxD‡,GÄG*ÊÛ(|Hƒ˜·P)c„Pá´Pä‡(r‡ÂN9C‰c•b$W(p@„GfB"È莂ÄDMx¸ŽPxŽS„ˆˆÁøÈè¯Èq£ytQÁð‚iþ÷«õ´1°Arè,&^'¡ÊÄã”çÇ*qÐßÁA‘ð‚å9C…„+øœp‚ˆ"Ÿ‡8ü ±!(p‚Ê,qnPåC!"PåX²:#ƒvG@„Aʡ Ĉ8â!(!Âp|ã”#”9C„‰Ç Aˆê !”8„"" â#ˆˆˆˆ¾Uˆâ#Ù‡3„ã²:# ¼ ‡0å8Acå‚ « 9¯ßßüƒ$÷ü": ƒâ8”áˆg ¸A{†¸ˆˆ’‚Hr‡+,Jâ^.8AxˆøP‚Ä £Ä~ ˆˆ“¤‡ò ·þÓ[Ã}vt_,"è*ʼ ¼ã”9Wˆñ0‚ùN8ˆAˆ„’ÎXì!(r¯øAyN ùCž1êÉÑ‚CüÐ ï_ÖÃë¤0‚ÇÆL ¬¡ÂîCü–8A ŽÄDå–9C”?å8A âg(|¡Å„!ƒ‰C„xˆ”8!áıÁdt'A2’/áµOéÿr:0ââ¥@Ð…ñ,§ÄDBz+†³ËûýÿNû}ta šwŽPáq1ÁQ‡Ä! ´9‡,r(å9C„PçÜr‡!¤9‡ƒÇ(p‚Ärœ¡ÊQ$8Ab#”9C ¡(r‡…©Qã–8DwØA š8Šuýï_é×ÿ!ü ¢9C„B(pˆäGDtŒ"‡*Ê":.%Pä0åPå9CÀä08Aa9cÇñ~"!%ŽPåqÊ„D¡Êr‡ã„ˆùN^%qÊ(ˆ„”áÐ,B ‚ C”áâ\DRÿîŸ ÷ÿÈ#•b>qñÁøXø•qâ/Ž>XA>\„œr‡ÊÇ‚² #Æ.Z„‹”8Ab#„„a9C”øAP@¾å_ˆ”8AxerèMHºþúÿ¤îÞ–¢.g(„ "aÊG(p˜ŽXAÁóŽþA(TÄø‰NPx£”8AŽ%9C”>$QÁ8¾Pàx‰c”8DpÀ/°‚ü¡ÁÐADq ÄD_,p‚ÇÂÇëÿ~–ßÿb0‚ ÑC•ذŒ8AXDzPá|q(¡R‡Ä…(øAcåv>"\Pâr‡ÇÁŽ#eaÁDN9C”9Ç(t±¯|G –9C‚ áñ.„—Ba~ûúÿ_3A<%Ç, „ „D Q„G.%@ˆåŽPøˆˆç ¬C(œ(rœƒ‚# ±dp@„¡Î>$Ä„±Ž(ÆC”8 Kâ"XL ±Ä¡Âþ%k÷‡) ¡„Šå ÿ¯ôÞýt!< …ÄÎ^>PåŽBÂÎ8AYÇ¢vPåXA„A0ä ± ¸Ž"PøˆA`‚Æü§¢C°ˆ°Pà{Ãþ#Á”8 ±ð¡0„QaxAb"%!Dt×÷µÿ_úë#”AJñˆú^‡ŽÇÄD ¶G" ¢"HrŸ,¡Ù|/q,l ‡(r‡„X^¡œp‚ˆAq‡ˆq!(p°B%Ž¡8åPáãeTеþ¼”õÿõò:‰W„^ø”ð‰Ž ¢=ˆ2‡apcePär‡R‡Î9C‰á#Ž"8åPâ#ø‚8 ¿‚‹Æ ‡-ñ,Xˆœr‡(q‘ÈŽÂñN8B#ßü5nÒ§ÿîAq a„`Šr‡(„8AAò:(’/‚HQÊq|Ö6Pä08Ac‰' \r‡!G!Ä$Xˆ²:#¢:#…„… 8 Xˆ’ŒG) Î8A`a•Õ¯ÿ@ßÿývŽþÊ ¯Ä\B|ÎXˆç†qÄG ¼9CøD|"ÄG‚ƒ¡èDã”8 ^"I ÞQ(p˜AA’¡Â# ²‡) |K ±ahzÿaéë{ëì ‚Œ]¾#ÙCˆ“r‡!~Ì8Ay BA.QH£å[H(¡ü±Å‘ÑÜDD¡Î9C„Gl ±GDxºDr¯ò‡,D^¿éªûÿíQÎ8AYÜ(ùC”ሑG(uÄB ñÂDDl¡ÇŽ9CöY Sä(áŽ*Xˆ‰p£‰Cœr‡,DB ñ9C‚"'Êp‚á œ¡ñœ¡Ê(ˆer¥ß¯OÿÒñEñ| £ÇŸA §+ 1”9V&2È`p‚±//Æ\D¡ÄD ¼¡Ç,r¡ñ!8á1dx…á!Ê¡ÜD ¼|r‡ å9C”8@¨FC”9C¡þ¾ƒOê¿ëâ#žD¡Ê ±q@„ „Y åPêXq¼ ¯‚Êñˆ¾XVQB;#¢:2¹’ÿúÿÿæµ%a‹á8‡&>!Äqx£ø8ç¡Ê…Î!â!qÄ ™øˆåBqÄ¡ÄD±Â.."^"!‚ øBXà‚a9C‚„ fQâÂAÇÿxOtÿýt†PãÂ|±Â !G0á¿õM¦õþ¡XA`Ž</„Süxô!2‡ á$rœ"80G G,~ ÄDN8AN`„‡ „r‡/ ‘C¤¼Q(sŽPáãÈQʼ_(x¡„ ‚åu¤F´?õõþ¿úü LqPˆè ¢'ïÿ„B ²‡Ž‚ ’ÜqÄDÇ Ç+±Ç$8‰s"!#Ž^9Ç(rœ¡Ãˆ‘ÀˆAƒEQâ2¸„"1ý.Óÿÿ×O'ØÂø„e"]„?0‚Èh ¡Å”9Ç, ±(rC䇜¡ÂHa )Ô‡}‘ÑÑtÁ !ÂûB~"BSÑs‘Ñae9P‡úKßßÿ¥ä~Â(p‚°‚ÅGèBq(p‚öf!p/„Ä|D±Ê§!§,q‡<dxŽˆø\.ðˆè‰ÇPˆùR: ñ‘ʆ0‘þ½V×õ¯Øèˆå@Ap‚ˆœrŸ!)„"C‰Cœq+$9C„"$‡(q‚Ê€‚È0áAà!ÿ)ÂDE‘ч!)Ú!Ì8AxˆA2:# ¶GAÿ *Ý¿öë×ʰ‚ňaÒ߈ær  ¬ ±åXÊ˨!–9C‚ˆˆAÄDvGDtˆ‰C•aqÁC‚ˆ„Œ^V8”áˆãØ^m~ Žþ¿ªÿ­Ô  þQ ‚Ã{`²¬ ¼q) AB,|DLá%8ˆåqÂDㄉ ×ÄDä,s""XåS„‘ÑñÊ¡Êr‡ˆèá¾'( º…üWò £þ¿¯¨~G†Wña#”8@ž ì „ _ø X–;ˆ”9NQx‘GñÊrcŽw8A"@ÀåPá‹þq Æ[ ‹‰!ʼN8Abø„Að‡Â ÿ¯µ½?õŠèºâS”8A„„,Dþ#x¼X„ˆ‘G8ã•aˆA~C@å1ŽS„$AÇ8å$‡,p‚ñð@—ÇØYC‚ÅׂÁ?àr9`  ŽŠç_íWÿýk±qˆxø‚!G0á=”8FÐ@ùNXk(sŽ"PåS„D!C”8DtG@„«+(qÇ0á$(áâE§, ‡Œ^Â/üD8 ½Pñaã‰C„",.Aq% }}_ÿÿFÑt¥ÐE†#ˆˆˆ|¡×l(‰áî#”9C„GA”9ÈAñ˜Dt\r‡ Üp‚ÊB8åPá„EJ¡Áâ>|°¸ü"p‚¼D{, ±Ë€A}l×ß·¯éWb8ŽGDtÊ¡Ê{0äq ²‡‰c”8ˆˆˆˆˆá"XˆŽ^"]„g(p‚‚‚8åPõˆøAE†øAb'Ç(rœ £GAaÐAð‚×úý~ê›Âÿds𱇡0á”9V—ˆ—â"""@ÀåP㹇Åÿ3‰!ÊrÇ/Ÿ°‚Ä,Dp‚û(¾ã”9C„ˆÿø‡¨þõÿKÕeÆ‚ A–8A_„ 8&Èá"$‡(q8ᨹC”8At""Pç€ø…ÄD ±¢! ×òœ ±Œ¡ÂŸ__Nÿöºü!(èAÙCøÁÊ‚ÊsAHr‡ H9«ÄD„a8AP9C„ÂŽWã”9Ç(r‡!G„S˜p¢"ðüDJr‡D{†W_ë×äÇÿ‚_lvAl ´Xå8㈜p‚¼vXå"Xä‡$9C„‰NPâ7…ˆ„•”9Ç,|Kc,¡Êp‚è †Ê¡Âˆ„h×ÿõñ׆ZX^8„ˆ Xˆ¸\DJ ±!)ÄD  ÊDá|Kr‡,p‚ïÇÏ 9CñXÐAaA ·þûþ¿^ˆ‰C‚øAeFHr‡3”8">,ÎC‰ ÑÊ…DDK¡Ê¡üs8Ad0øˆ–8Ab#å8AbDIXa9C…(|hô_ëþÖÿë°ŠÎXaŒ#”8AbD¡Êñ‚Î8Ab9C”8AbqÍbA ´9CˆˆöXˆùc”8 ^$‡)ñR‡"PøˆAâÂÎ8Ab"PãøK÷Óë×ñŒA~,,GœqÄ®¼D§(sÀâAqÿŽ£”>B9C”9C£ˆˆˆ–9C”å qʰ‚Ç(r‡a.%ŽPå8DtG(P‚ñÇ(pAp˜Aequþ½wã~½?„‹å^!¹Cå8AbøQ<¡ÊDvGDp@²‡ÄD§(p‚‡!G$98ˆˆå8Ap‚‰C”åPøŽS°„”bãC ò‡"8 £cþ x2ªãþ¯l÷ pEŽ/(|qÇì"‡$8DtC’¨ñ"B‘GqÊqŽaÄDà`r‡!ßürœ ±ÊDPà„B /_Šÿ þúÿá B`ñ§(p‚ò‡-ò‡à‚Ä¡ñ¡ÁábqÊ¡ÁÅ‘Ñ!$8‰c”9Ç Àå@ðq 1$8Ax‹áâ!äQËœs8ApB":(ˆ_áÈ6?ßëí‚#áfp‚°¢"qüDD_Qˆ„„"8AAâ"%X„"Xá"qÊÄ#Ž6aÁˆåPáðÊ¡ÿ‚òœ °”9C‚#á ‰Ç(pŒ¸k]oÿWÛ ‚=ÄÄ,ŽdpB>[Œ"‡(r‡/ËÎPø‰p‚Ä‚Pâ%ã‰c”9OáH\Bâ0‹ ¢Q2C‚ (pA{þqÂâ9C”8Ab1ÿÛÿþ¾ˆéø „"<QÂqÄq‡ˆˆAxŽ,D „ã”8ˆâXˆAe""BŽg Ž)¢X „G±¡Â ÄDÎÿÃý×kú¾„ö± ‚â!”8’Œ¡Êr‡‘ÜN9C”8ˆ–9Cœ|D ¬D…,q+”á""$QÊŠ9cmŽÂ *ñ‡,p‚ÈQÊ¡ØArí ˆîa Äã˜p‚ -Ãþ»ÿ¯ºBTâ%ŽPࣔ8Å‘ÐXâHr¯ŽaÊ „r8‰C–9C™Ê¡ÉC4s"Xáa$5„K XAb…ûÄGÂ#É…… ˆA`‚}ûßzúúî‡b'(r‡/²‡Ä ²‡J/¡Î8A ¹p"9œ¡Ê(r‡nX‰Ç!¡ÄBwC”8âSâ8”8Axã‰â; á„Så88 ¼";#¯Ô>½]ßá]Qu„Pá?)ÊDAâ8ŽPåˆì|"(åXâX‰q,pQ$8‰ 9 PåŽ#”>$3lhB„ Äã”9C„‰r‡(q(sÆŒ ±°‚ÄDB ÿ¿Úÿúî~0]•"XåñVPá‹#Š8Ae8Ab"/œ¡Äá0DAÉ‘ÿ3”9CøAd‡$9pˆá”8qÆÇ›ø’¼?þÁ”9C¸ÙC”9NXÿÃý®ÿá~oL, ¬ £8åPø„ ºÇ/ž""HwAx‘G(qìF r‡üqðA”9NBYà¡á‚°‚èAJ| °‚±¿„ ˆˆ„G_ï~«ªú½1kø‡0ãŽ"¡ÄEBåŽ %ŽPåXãŽå"[ÀâEDD „ ¡„"9NYÇ!ÊXÂß(p‚èD ¬¡ÊQ,A,!ˆÂ^ü(sÀAýúµÿðºiŒe ‡) !Â.C „aÊㄈ°‡Ç(sŽXâBŽa ¡Ä…HQÊ¡ð‚á–8Ao•aˆŽX ‡l ¼Drœ¡ÄPAa>'":.Èè+ì!_ïÝ¥ÿ௠Žá…ž q‡8â"%9C ñáG(p‚ñÄDGĉ‡ÆñÁø £œr‡(q‚°‚ë0ç †„åPÿø ‡õë°‚ät(Â(r‡]µö¶ßúøc Ô8Ay¡Â ÄB )ÂD¡Ë „DG!¬9Ç,r‡ÈfŽ, BYCˆâ"XˆœsPáЄ¡")â8ØŽXAxŒC![µÇÿê¶¿û£%TC…ë ¢#ˆ‹#Äp°‚Êp‚s,rœÃ˜p‚C„ˆä‡ñ!|B (qÇ ,GdxŽ£½˜pDtPã”9C…ÄF ":#¤8":ÓˆA(ü?Ã_ÿr £º¯‡(Æ„¡Î8Ad ‚Ê EÄ^#âV#–9ÇñüISâ"' £ØA„‹„‘(ØAD¡Î8Dt‹•ˆ<¿ûí/U×ýŸQ‚Êp‚PÂâ#åŽ""Pà‚ÄJ ²¹‡*ÄBDÔ9ÇÄB )ÂB ürÇ(pA{ ¯K¢:(p‚õ¸Âˆ‰C”?# ¸0‚á ?ïð¯ßÿ¡ ,DB ¡ÄYC”9Ç/C”9c”8ˆ„;ˆA8Al ‚Êr‡8åŽ"â#ˆœp‚¼G,FGAÅ|H£„Ô¡ÂÜ*(spüb.PåeÇÕ† ½íooÈè!_ ,r‡±à¾%ŽPåá ñÇ \åCœp‚Á(qp‚Î>"!ø¿ðE¸8aac„Pà¼)”8(â ç¿Íßð`—þû”åPáÐAz,!+| ²‡ñ8áÞ, ¸AAär‡ÊG8â ."%ŽU„"%0‚ãCÄB#á,p‚Â.Â,.¯øoòPÿkňïıÊr‡Â㈠¼GÇ,q$8–8i¡Î8ˆ–9C”áŽ%q ¡ÁxDAʰVGq;‚ à‚ !ÅB 1ü6¾;Õ½X0‚°Œ ‡Ž/’§Êrœ ·Ä¸¼DJH ø‘Ž>"PäG(r‡| °‚X‚ÁŒa„|«ÄJ¡Áá|N8Dt]G÷wýÿ¾úÆ) (p‚êISâPáÐAG)Ê „‚8A ¡ìÈ”å!‚8à‚| »(|p‚Ø\CŽ‹ Š¡Â ¼E…þ>ÂÄ9õûõ­ÿÿ¹’¥üDJr‡(p‚ñN9C‹•öPå7Žq ŽPå"gÄD±ÊD† ƒ”9Câ9VCŒ_¸„”åPî"¼ »ñxŽPçÂz#¾þÿ¯ÿÞðñGDtGAÄFÊ °‚ñ¡ÜÄ Ä ^B8”åPþ$‡)ÂðÈ.9C”8ä2Ç(|DBJr‡!È`rœ ¸Aw(sŽˆî0‚ãðBU„b#ÁøŒ¢=ûßúûïœ¡Ê ‡Ä¡Î8@±üãÑÇ!QÊㄸ‰Ç,.>B#’"8hˆ‰¡Â B 0‚ØA ÿŽ‚(rœ °P?0å?‰à";ã…ÿm÷êûè0¸ŽS… ‰C„ˆŽ.PáˆA C‚ˆƒý‰c”8A CŽH| ³£Ð8ˆåYCð@¼p‡œ¡ÂqÅÌ?ˆŠ#Ñ(p‚á ö ±àðâQ‚  ÿÿoÿßR:PAD¡ÁŒ*8å#‰CœÇ ¸‰Ÿ‚(r‡8áˆÁ„qÄq8âBŽ$2¯,p‚ÅÄr‡ÂX¸AaˆA ”9CŒAwˆ”8 K† ²‡(„'  øO³°µÿß­v¿eûh ˜Þ &–8AH ‡(~ ñ‚ËD ³ˆŽXáÐ!(rÇ(q8åB$QÊ"è!8åXá„âPåQ„°²‡ñò‡-,H®PáÐ^á„#„ÂGr‡à†ÿûþ?þûëdÇ8áxˆŽYCˆæ~ 0‚(rœ ¼IUâ9c„"!#‚DHB$‡(rÇ(q‡(p‚ñÙ#¢>GLŽˆè-„#ïˆÁýøax ¿ (åXÁ0ˆéÿûÿ¿ûè;„b"Pç ‡#”8¸ˆ”9W¸”8ƒˆAb"XåY‡‚Êw"ŽC;„Ž#eˆâZˆ‰C„8åPà‚ÄD±Â#ÜDp‚ð¡b>Páð‡(r‡/'ˆƒ0‹¨ÿ¿¿µimþРasÀA„YC•ø”9C”჎*(á”?œr‡(rœ ±ŽgG)Ì9‡¢^S„ˆ’ñ(p¸‹ç‚‡(q‚Î9C„ˆ Š …ʡ ìDB )ÂvˆAp„å‚ /ÿÿÿßöB ¿%cûâYC„ˆ–åCŽQ~""Xå9C™ÊIC@ሲ8¤pÇüå!âS„ÂÊ%Ž, „G¼¨_xÙC˜p]ð‚Á"ÙÇ"^8ø„#•‘ш莂à C ʰ‚ÅÄG„ùC‚ÿÿ¾J—ÿýÝñƒ+ ‰C”9Ç.B Ì?ˆ‹”9C”>'ħ,"è ¢9‡.„0‚C”áˆæ|DN8Ab"HpAbDÊ¡á(¡&GDtGDwƒ/Å‘Ñ~‚ Ü¡Áò8H\G(eØQ_ÿUò&>ºßz©C„Dr‡,q8æXå8ˆ Xˆ÷ˆ\GÊ(AŽS„B%ŽPâ,»# ±Ç(p‚‚ŒD »(p‚Äl ±8Dtq/ÄbÿÄsXAl ¢XácBJ°PpXÿßëC>ÁÚõïúâùCœ|Dr‡(p‚\ ¼ƒ„‰‡) Âàâ/ùÇ %Pላ#¢:#¸‘G8àˆà“X‰cÊD¡üD …‘ÑÐ!ì¡ÊDJ|XùW ã•|/ÆPáe8AaÐ ¢!PáCÿø ÿoþû þ"BS˜pA">.6PåXˆŽPáG±Cì!Ç(|DIC‰c”9Cá8–9C쎈èŽÂB"$œ ·Äã”9C„Ab ‚ü ‡Ä ¸ Q(âá!aŽ#yC„8DuUßAßë·¿‘ö¾%8Aa"BqÊ „(p8ˆ‰ÇÄJãçDr‡,D¡ËȈAx„Pâ9CœÄ¡Ë!8à‚ñ‚ì¡Ê B#áGp‚ØAAÄ®!qR‡Añ)û(ÛÍäuÿøMzÿïŠN8\D¡Â Ë ¬ „qq ‡,B Ê¡Èh¡Á"8AbBqʱÊDK N"%ŽPç ±ã„!”8 °‚Ô „G(p‚ñÊ¡Â(ŽPá„|XFÎ,¡ÐADD¡ÁîC?¯éûÝw¿P‚°‚Ar‡ıïÜB (rp‚(sŽPá ‚.üDD¡Ë ±‚ƒÇ³Pâ"a 8äŽV"'¡Êq#”9Ç,DDãÄb … ‡(pC¡‚) "Hp‚‚âE¡ÄJ§,DD±Êàˆè„Ü £å_ƒ ‘ÐL<(pAcöPåÄ]HëõëOkºþïF¡Êpˆë¡Â (|GÍxãœsZø•b"BPå>YN"E¡ñ"ŽC’¡Î8A`e""B8Ab"Hp‚ ÞCô/ °±,X¢;þ.%Å|!(pE×ÿ_ÓOívÿ¯{ˆáåýwÓÿ^þ¸°ÅA”9C‚ ]Ê¡ñ9C”9 9C”8 ¼K¡Ê¡ÄH¶,DIaÜYÁèŽˆèŽ ‘ň–8AxˆáG¼ù2;# \ŽùÇ(±!§.ˆADcˆà‚ÄF\Zôþ˜kû}°ˆè"‡|§,Db ìI¸„ØQàDD±ÏŠ8‰c”>""XåPãâHsåA ø‰‡Aá†Pá0‚ë°¾"PeN"å@ ¹‚ƒ!(0ÊåjäuøK­°—ýñð@¸ÄK¡Ù!ʨ! e9C”8 ^1”8’±A‡|¡Î9b „9C„ˆö0ñ«ø^!Œ/5ð„PEPà‚Oå8Ac’Ãàå‡ÿ‚û¦»±í÷Ô ¼DJ¡Âq²‡Ž‚ ÂÏ‚ˆøDwô„Ž""0C”>"På9Cb1"ŽPä4Pì!$9C„Áà ‰‡öB(ì/‚œp‚}Ô~5ûßÿzN"'¨øAYC„G@Dq(uý”9C…Är‡$9  ‚ˆœrJ¡Â "C8âqʡǂÄH£ÂÎ9C”>$QÄr‡(sŽB"'¡ØF±ÂaЉC‚  ˆxAB ñhŽ‚5‚#¢ôWÿõ¿®ÿæ«NBQˆöPå¡"Uñü ¢Páa'¡Áð„D§.ŸÊ¡ÄH þ>%²:# ‡!ʲ‡/‚ÁÁËáoáÙC„GDtQ‚ì.>ˆAAïþýôÓííÝpp‚ 1 qÊ °‚ÇÄp‚°‚)Ê„|J|Gƒ(¬G¡ò‡ ˆå8Av.,Y]Bäuÿý¿ÿì8A\Fœ">ñÊp‚‘Ð"œÃ‚!û(r‡ÄD›„6LsŽ#‹¨(Ç,DDq,0ላâùC„‹²=ÄBeû0ˆøAq0‚Šñ(r‡(p‚;¡ãõú¯µ¿Õa‡‚Â(ˆA2<#;„ƒ¡û "Yc˜qħ(p8Žø‰c”>"Xä‡(qÊp‚‹¡ÌáÐ!°‚ÆQÊr‡- ‚ðAx‰‡)Âþíw×÷ÝøEYN^9œ ±(x0‚YN[.â>!' °‚ ˆ”9Cœr‡!ÁˆÂ È莈å,s"DrCÐ?œr‡(p"På/³Dp‚ŠàŠp‚øÄDJã„!Â#ÿõí~šý¿b#ˆ…ŽXáp(ÄRƒ(q‡,Xˆâq Äq‚ŒDJp‚È7¿%bHp‚‡ñ‚‡/Ë;,¡ö‚ „U”9Wˆœpa+‘×ÿÿûÿFD˜DÇPáÄãሔ8Av#q”8‰c”8\DKû,ã”9CâXá!$9C‰!ÊDçÄN9C„Ž"q Ç(v]Ð ¢,Ž‚¿ØAD§ˆAx"œ §—.>×ö¾×ß!|N8L „q<â& …DJã”9N80„¡Ëþ#ˆá„ˆˆœr‡8â$#„î@¸åøAe;˜p‚ ”;ì,¡Áã÷áøùÇ.GErkÿµöï÷·ü „ ¼\(šøA|¨("‡(rÇ ˆ”>XAAg,DB ñnPä4/$>AJJ‚#ˆAe8âBƒ°‚ˆÄGŽ]âᄎ1ÿ_ÿµ¿ô8Ʋ‡(ŒDN8AZ÷ÿÿÿ¾Ð °YC”åPâB>"áC~Qââ'Ãþ_ q ±$9NPå8Aሣ”8ˆ ¾\±Ìø°…¿#„\Yˆ’ÂîÿýjšÛîq‡ˆâYCöp·&¡ð‚ àñC”9C„âXለâPãͧ(qÇ(r ÇqþÂp‚Á \Cðxˆœr‡(|DDD °‚AE#¯¯ûúþïa!JDB Ê‘ÐBX ±A Ô?ýøÂÇ(rPøˆ„ž (qœ†qñC”8Ab!… ‚÷x°‚ô0‹ÄuÿÖ¾A‘]ö»þÔ"œ¡Ê ‚‰!Áˆ ¸ü¡Ä „”9Cþ9‡!Œ ¢C4r‡$9ǜÈùNPâ Èá#•b"## °‚ý-þ½ß}úvAl¡ÂDMe8AcÙQ¸å"%XáÂÄ|±Ê(}„& ±ñNB$QÈgr‡(qÇÄD ²‡‚¬ ¸/ ¿ý}ôþý÷èG/cÇ(vQ«Š0በ>B"%S„8œ|pAa"%‰ AÂ"Hr‡-ñ,r‡)òœI8œr‡(p‚Â# AF,F(¯ÿþ·õÿì(ˆåq NXᣈ„Á”><C”>"æp‚‰pW#¢èŽˆè¼G":0‚ïÿýýk}ºtQãY! …‰c”9ãÇ(pA ŽS8AcS”8A8‡P‚0å>B$AÄD¡Êp‚ °ˆè ¾\!*ô‚D†w0ä‡$9à ¼Eç–QóPå>^ãõÕ5ûµ¿zÂG „#‰Wˆ|§,§‚Êp‚ £ÄL8Q‚±Ê¡Çq$9Cœr‡Ë¡Áˆå"$Ç8äQÊã”8DtŽPáp‚‡Ð!¡ÖGXAx‹®2¾«ý}õõ÷¿ò‡ (‰cáß㣎På?ˆ’ñÉB$2Ç(qÊ.$5ˆ”8Aˆâ"$AÂD ¼qS…+,(‰Ç(p‚ ŒQ(ˆ”8Ac]~×~×Ñ|qePáåýXå8Aç(p‚Ä,_Gq$9O–9ÄB  áÀçrœ¡ÊDs>"C@å]“„ˆ‰Cœp¡ÄL8 ±CÁ•Õ£Ëû_ûÖ×÷w‡÷‰œ ±GAYÜ¡ÜE‘Ñ8‰‡) >Pâ%Pçð‚Êq‡0ç¡Ê±Âa"X‰r‡DL9Ç(p‚$9N"'€\Db 8á!—á/”8ßÿ]zïµ¾úʧ,F! ‚âXà,Sˆ”8 ^!œq§/ /°¿ñ‚Âq‚ƒ(pˆà„tGŽ3Žˆà’‡,G,r‡*D¡Ë¡Ê":ƒƒ‰Ç*$w(p¸ŽPñˆr‡(²r»×ÿÚÿk¿¯ˆ‰Cœr‡¼‰NXŒ"‡+Är¯$9PS„ˆˆ„þ"%S”>"BSãåŽañƒG@„K¨+,A„!‚ ƒÃaÈ÷'¡ÂDx"‡_ r>ÿÖÿûµýﲇ+ÄB œ »Ä ¬¡Â „K¡ÁÂÔ9¡Â DG(q¡!ÁŒC”8ˆœr‡áˡ A”8ãšÈ`r¢GKbB8. -Œ8á1*+«ïð¿k¿kö¢#äQÎ8\G0áÐŽö/œ¡ÊBD ¼B )ʆ(p‚öGDtG ò:# @‰œÃãÙ ƒ„ˆ…(wÆø\ ‚|Ú )Ê „B …„GA N\à‚Oäu}uµ_Mw·ÚA9CœsB' ¯ b' ¯§GˆèbYC–9Cˆˆ\GìÈለœr‡ ‚ ·(r‡^ˆÃ8áüXDt”8Ab8A`*(ˆ•„EBACQø_êõµßß\G,§Â\J »!*ñ½,DJÄsŽPå99Cœqœp‚ñ,D±Ê „GÊ(r ÇŽ6aÄYŠÇ, ‡A`‚Ä\l¡Ê":]”?„!ßé^Úíö·ß«‰c„xøAaâ!¾¥Ž, „sŽPâ"Xá<Ž«…û^ôÂïoâ.ÿÅ…cŒAä‡8ùC”8âC ³¸ˆ’¡Â +(q8An,/8AÄcÂá "JôÐaoýDIâ# ±”áÂ0çDHŒG‚ñ¡Ç„%ŽU„ðü ‡c(p@±>Q Ç.[(?‘Ö?ä|0¿Á„­ïätˆ+ŽPå!(sŽPâ"qÌ:(ˆ™Ê », „ „IA¸â!”9 ˆ„ä(á9C”?‚ Ä8ŽQ aev"#ˆˆÃÄv?"èÆq¢:%™tp!.¢9ˆ0„DAÔ‘™MÄ·#r‡$9C–9Câ( ‚K¡ÊBDJ§(pˆ¸Ab"qÂD±üD „DN8APä4ŽÈ÷++ù9VLá9_EÈëd+!i ÖA[Ç(p‚ÄDå9C‰CâBPà‚ÄsŽPáb%ŽPá%9c”8ø‰Ç(r Xå$‡(r‡(p‚Ä „DB r‡)Ê ¯ Ø9NX¸±¨âYƒ>œ¡Ê§ñÌ9Ç(rŸXøA ‰œ¡Â „8‰C”>"YÇAy!Ê ²L9Ç(|Dl¡Ì8A‰Ç(rÇÄHQòC”9Cˆœr‡(p‚ÄDD¡Ê§‚ÄDáç„W |x\D ¼ °ˆ„[#Äy„Ž¡Â8ˆ”áØþq "¹‡ ,†Ê N#”9C„#œr‡‚ÄYÑñ,r‡‡(q²‡(qp‚Êp‚ÆÊÚ×üJ ¢Çwˆˆ J.!ˆˆAeXAAeŽPáD¡ÊÄGÇq Ââ"8ˆˆAX‰Dã˜|DDã˜p‚ıÊã…ÈÜ¡ÊÇ(~,Dã„GEz!4_î_XùN'¡ÄJ8åS„ ãÁˆˆAe>"YN9C¨ˆ‰Ç!ʸ(|Dåá"P䇈å9‡ N9C„1‡(ƱÊ%üDu(x‘G,¡Ä¡ÉˆâPøÂ(s8ˆ„”9ÇÄq(â¸q,§!œq „B Cœs"!d§ †C”9c„ˆsŽ!uš×ûG|r‡CˆˆAYCâøQ$8@œB!¡Î9C‰!ÊDr‡ñÊ¡ÄN9C”9NXä‡(r‡rC”9Cj¡Ê¼GC‚0áqÊψˆ)C„Â$9C„#‚"#ŽXåPä4PþXå@ˆ(qÇp‚±‹ˆ„ˆ²;#Ò‡ŽPå99c”9P< ¹à „B áÄÄ?Êã£Eÿ Ô8 B$W!‚±œ¡Ê„ "%ŽX£²=,DŠå"X‚ ÉS„ˆAÌã”8þaÂD(âqʡ $8A`Aâ!òC‚⺔8ˆ„ï÷,D¸8õ„‰‡(sŽ?÷ð„ã”?â"9cŽEEð‚dtG¯’¡Ä±ÊDAâ"Ná ¬q$8 B;# ‡Äb…,D±Ê‰äN¿ÒìÄGH …‘Ð^Pç ±‚‹!Ü{(p@‡ì†«„!"X p‚ý„>8Ëà‚ˆ–9N9C‚ˆÙC”8AbWˆ‰c˜pˆèŽ‚!ƒˆœr‡*AÄï,ï¡(u,DDã˜p‚à†ð‚ña"A¬px‰ ‰qñÊ”8„ˆ•~E¡ÄDBJ#„BHr‡(|qƒÐCåF0‰Z ‰µÿlî.Pøœr‡(| „G8åC‹˜xBPç¡Ä\J±Ç!"På‰! Â#‹r‡(p‚ò-”8‹”9NPâ"Èñ (a!ÐB˨A , „§,E‘ÐU¯á„ ˆAaãˆAx‰C„"È莂ñ Ò8 ±(q(q(rÇqÊp‚œÃøAccÁ”$W,DB È.9P"%, „B (pAˆAA„"‡ ÆQ,¡ñ ,¡Â â#“¡®A¤E] m‚!¶¸§e"#CPà(âHpAxŠ”8Ab!È莈ì"È`}‰!ÁdxŽY…”9Ç(rB"S”9Cˆ‰c”8AŽ%ŽXá""Xå#‰C–8Ac‰c‚ˆâ_ˆåv"!.„NÌ+äLM`ÊT±ÞæV€ò âCI(à \ }Ôl¡Â#áb"qÊ ±8åg¡Äã”8Acø‚DGds.ˆè~"%ŽPãœq±Ì8ˆ‰‡,rÇ(|B  DAœ|J °@¼D®Á„O’W>IÿùÂ*<.˃AÈ’AöˆDG,r‡Yొp‚ÔD{!!¡ÄÃ’ ‡$á""Hq‚$8Aa"C5Êq,p‚üJ€‚ÄE‘ÑÑz"%^B#Ï":#…Dtˆ ¹^+ÿä x/½8< Âü±Ê ¬D¡Â  ÄB ¡ÄGp‚§(r‡!‹ ?e!Ç(r‡,qCø‰‡8â!øöPôX–8 ^"%9C„G "På_# ‚ìÂ#¢;r‡)Ì8@„XA W#¯¾ Â@ðÎ 0ƒþ^9C„ñ,s‰c”:(¸A„…Ĉ;(–8ˆâHu,¡ÊrÇ8åL!!š9Câ8Ax„ û(p‚Ä¡Êr‡!ApBÆ>9C‚Ž6Pàˆë0„’¥ÿü8aƒ‡ aì†w!ÇáÜB ¼BJ|DAç¡ÄDGÌá„g(XŽ9‡+‡)Êp‚ñ¡Êq,DJ¡Ê ºN:#áB œp‚ñ(p‚ Ö¿ÿ ƒÂh>¤qÉPá#á”>4%^BC,r‡âE±Ê…pˆˆ”8Ab$‡(r!ÂBFÊp‚Äl¡ÊDD ¬ ¼D±×(p‚ŒD§ñaqwÿ÷ÆAÞƒAö!8øáŽ>VPâ#å8‹#†r>GDt‰!ÿ8æ‚Pá=“§!K¡Î8ˆ’":(ˆ–8@¼\¡Â ÃÂ^ Âá„TpPær‡]#áYP…è(çaK¯¸i§UðA”á"Wb"Pxˆ’¡Â. d ²‡(q8A^8áå.,¾"Hr‡)ÄDI8°‡ÄK! ¢Ž( …ÙC„AEð‚ð‚ABfKW„=ß  ½£Tb"kƈƒ„N9C”9Qâ0e"B8—8@„D±Ê¡ÄDJãŽPø”9 ˆ‰c”8 B"C(r‡8õ“ÉXႉ‡#ˆˆAv8”8A`‚YÑ4ˆˆAd‡!GË"8b9‡) $9C”>#”9C„wÊ€‚, ¿Ç*1¤2½¢è¬¤¿Ý÷i§z¯ñ8åq Î9C”8ˆ˜‘ÑØ_”9NPå@ 8æ,¡ÂD\ ¿ŽXŽBS„"XãÀä0>B#”åPøŽSâ' ¿ â, ¿°‚áfp‚°âqÑ\Õ%—J¿ÿ»M;ÿ¨AAøâWˆœr‡(sŽB"S„ãâ]ˆ”åPãØˆAe^9!Á>0ò‡Ä¡Î9CሉÇ0áâBŽX‰NPá Ç(rœ ±Á8ˆ…Ê8Á„ˆì_‚ƒÐˆäÿ_pí8j«ÂˆŽXŽ/Î9C”8ˆøAb;˜pxŽaÁâ8‰C„ˆAbqá „Ç)ÂGœ ±Gˆèä‡üDK¡Ä\K":G(~I¸A?å8Ap†GA&h÷ðí4íÕxrC„ˆ’ã„#„ˆˆ ¼D …ˆä4á""YÇñDJ†På#˜p‚Â"$2ÇAâ>PøœrãÉ,¡ñ‡"%qÊ ‚ˆ„„"#„L’Ó(¥_¿µ[U_”?‘,q(sŽXAbNÊ|±Ê§!°‚ $9Cˆ‰‡8æD±Ê†8å8ˆP‚†hâ$‡B Är¯|G$9C„„G,q,r‡Ä0‚el×\Žºû´Ó¿þ!gq&ˆ„YP „^.!Ј‰!ñ%a"$AÄDD…¡Ä†Pç¡áXAbXåXåŽXˆ’ ±*Ê(sŽPå8A‰C”9Ç!ʼ\«ˆŠ_îû´Ó½WÁô$‡ B"aÁµ ÄD±Èh¡Ä ¬¡ÊIPø‰!Ê ‡ N"BŽA‡ B"Er‡KqÇ+ó^"g(|G(pAuKÿ÷§wªöQœ¡Æ(„"9CˆA”9NPå$QÊq"ŽB#”>#n9 "D¡Ç(p@„DHƒ”8’È”9Ç0î! …óÁC‚ˆ„ ð‚Äã”8Q„Ž_ÿîõ¿ÿˆ„^%ŽB9Ç-ÄK¡Î>!°„±Â ‚ÈQÊ¡ÄDä‡"Ž"%ŽXä09N"Hq+„ˆ„qÆ„X‡Ê±ÂqŽ_ÂÊr‡(|Y•ÇDµQûûM?Uë’ÄD „D¡Êr‡!¡Ê|DN9C`p‚Ç(|GÎ9C”8âHr ƒ„‰!Ä…‚"Ž$QÎ9Cˆ’¡ñ(q«ñ‚Ê ¼XÂG%Ž"@KþýÝÝú÷Êp‚Œ8AbHrœ ºåB"$‡!Â|å"""9Ç+(|H¶"Hr‡(q ƒ”8A #ÅÃT‘ÐB"Hr‡(|DÎPù!ʡ …²:#¢;â8”àˆèŽ‚! Pá°Œ8 ¹^¤&¤)×½VõúØ’$‚G* ¡GAaˆ™Ê¡Ì8ˆAe!ˆ‰!Î8A^"!d3Ž$QÄDˆ8ŽPâ$naÈaÊq,r‡Gˆð!‚ÂqÇ/ħÜDB (xAG ?J¿ïݧ{¯ñ(sXŽPáÁ‰nXˆÙ‡âÈèŽ[!(p‚ĄㄈAb$‡!(âD¡Äå8’¡Ç$9CâBŽ!‚ñ!GKds#áb!a„ˆšñ‚†PሄXAaá8!ÿ÷÷­®¼"êB>XŽÈ莈ñp„|Žˆèˆ”?ùC˜|G(r‡8â"Xåâ$‡(p‚ÄIPáÑ 9C„‹#Áb‚(r‡8åPሄ>g-Ä\¡Ê±Â# ‚‰c”8 \ £‰C‚ „Dx¶GD|¯ !¯ÿÞš{ÿ(r‡!Ç/C„",,¡Ë|ã„"BXAx‰!Ê ±!‚Äp‚ìDN8Ab&±Ò,p@¿!G((sŽ*!G(3ˆ„‡ c(pAb#ÁˆAn#”9C„Q¸•Gÿ}÷wªõñ8á”â"PåqÊ¡ÄY#Ñ(sÄb"qð‚|ã˜p‚Fñ(r‡(qòÇ!8åŽXãœp‚Äqñ8æ ‡8å/( ÎPå(¾Pç ¢Cì, ‡Ìá©‘–Ã)4Óÿÿj¿ý¡Ç(pA.Hp¢"%„‰C”8AD dtGp‚Î8Ab#”9c„C4rljˆ‰!ÂqÄGÄDDDXAå8ˆ¹C”:.>X@¨q ±ÁŒ ¯Ä  ñ]d)BÂÿÿ½?ÿåPå>#‚ (q„PåŽgÇ,p˜‰C„ŽWˆ„ãŽ"XåXà‚C‘G!ã„qÈ`|IHr‡ ƒ¸‰c„$Q Ä| †ÄDB 8á#†] ‚ˆŽS„"qÊ¡Öd¥¹…¥µÿÓûÓ¿^¢>Xˆ„b"CHs¸Aˆ–8Aˆ˜sŽ"YN!ˆ‰‡,¡ÄoʱÌ8ˆA‘G!ÄDã„#„b%^#„ Äp‚¼Jr‡(pA!؈ø©ïÿÿ§Þ¿p8A‰'ÄH£˜xNYNBBHr‡""E§!!š>$‡! p‚$å#â%Žg(| ±$9C‰!Ì>Pâ%ŽWˆ”9‡"'ÎB.%qÂG, ^#”áYÚÂ#¢‘%¯ÿîõÿè1Äå8‰c”8ˆ‚¾"PêSâHrÇ(åT‰7‚ÄrÇ(r‡8â$‡(qC”á#„Pá"D‚‡$>>qÊ¡ÄG(p‚‚Ç(rœ …ÇÄIAq‡)  ^—ÿþïÿÐA C„$nañ$9Wˆ‰Ç,G8å"Hr¯,rÇ£”8 B$G/È£ˆ®B"XA"Hr‡ „ „±Â $9ÇÄB 8æCˆ”>6PåPሉC… øœs24Cÿï½S¿é¸P‚¬¡Är‡)ñ²‡(qÄç ±C”8Ab%S”8Aˆ–9NPâ#„’¡Î8ä‡(q!)ÄB ‚ÊDIS„ŽxñdtG¢Hr‡QØB&p‚„]…!ÈËÊÚ.¬‡%_ÿä‡(w|‚•ÿµŽPåŽÄåXˆœsX„„8–8Aˆ„Ž!åq q$9CAʧ/ÇÄrC„"Iñ"Žañ"¹CŽ$‡!Äã”8Ap‚âXå9C‚"'¨‹”:(„"$‡!(q!(ñˆA |DN9Cœ|IPê!d8êB&qÇ) (r+â%PሸAaŽS„"9‡,GdtGˆøBPaÈè=šý(_þýþ@Ÿ´ÁSwAè?q8åPø–8Ab8A`‚ÄJã”9CâJð‚Î9C”8ƒˆAg(rÇ$9CŽ!f¡Á"%4/’H á""Pá”õ–8Ab"Hu|LåPøA%ŽV"C9…³±¤5Z¤ÿÿ ÞÜ7L†°;¢îqÊ¢ …@ø~ƒ"BSâ$ C‹ç ¼sœqÇ+Ë%,D¡Â ıÊ«!!Är‡,p‚È ãˆˆ’DD ™øœs^åXá”8âPëˆà‚‡"PáaÐCÃ(pA1ÿ¤¿ÿo½:°½‚zéò‡) ,pˆâ…ŠXˆAF"B"& ¬ ±|N8Ab,Žˆè,AÄáq‡ ¸ X‰c”9N"E§ Àå%ŽXሂB#¸®",Žp‚‡8á. ‚ñEq 1Dë )…ÿÿÝ^ ·ðô¸A#‰c”8æ ±(cD¡Êq‚ïĆX눠ÄDX@„qÌ>"MÄH£âHp‚ñOˆàb$‡á""qÂJDB ¿$9œ µ_ñû÷úº`½i÷ê#ˆ‘\ ±Äå"È舒r‡Ç(  qq$;åSˆŽ#–9C„H4ŽPá9NPá"9C”8‰œ ±sŽ á%>!"%"8”á ±†uuëäuÿ·é?·áðýˆˆÊÖÊã8Ê@¨”áD±ÉaüGÄIXâ""Pç¡ÅÄK$åACˆ‰Ç(r¬¡Ç!(q Ê¡Äã˜p™8Ab#"ˆÈIY”*ªÿïýéÕ‚ÿ}üDDL b„½(t„DDDE…xˆ–ùCˆA”ç«ÉØ ¡„²8¼c)s>CÅÕ-/ÿïÿP_áéû+ê"]d|Ž!§hDq ‚DuXiiïÿïÁŽ=øa"ò‘óæ˜B$(â"éG#¥U¯ÿïV¬ÿpƒqÄL9Ç(äŽHr p9ð·}qÊ,/ÿÿ¯R5/ÿBQ(rìHw J@ðËá¯Ãvõ«ëÿý¿ß`·ïÜÉe ãç±ÄD‡G Ví˜r YQ ÑØŒÈ >×…]_ÿÿ¯ûó Tm ̆ˆâ‘ãÁ‰rCÃ(yð>±Ì9 –-v•„'B©þÿþ×û½3"«Ä!dtGŽ  ±²>Î9CЉNïÄŠ*Ü.µÿÿý~Û~d)RCLs‰p"%Žwq¸†A­Æl$vM2–Þ¡×HÇÿ¿ÿ~þþ`·y”9CˆŽSÓ,ޤ  qmâ*ºÿÿÿ_ÿ‡Ù’D$B#èBmˆžDp<ËìÌ0GÑÑ ("‡‡(r ŽXì0Ò§ëB¿ÿÿÿñˆ‘faeà 5BâSœqÙ‹ƒr8‰êº ˆëÿßýUú÷}"1ʰ„AHãyVS”9 €Üq ÜqU…m‰Oa鉣±ö©Taÿÿÿí°üÈ,b"Ql«Rƒw!¦>"Á‹~vBfªõ t¿ÿ×_áß„HQp‚C‰nTa%9È9 ã«bA‹´GÃWŠþ]*Z8ÿ¯úëÿ]Ãó"¤˜Q¸ÌÑ#¢8ÀÀ1(r EqeÄ0#(vÈ`sޏ[—@ÚGeH[v‡â—þŸÿõ«ïÂh „¡Êã”9 F\ñͨ  qâS¸6ãŽÚNu7zÿõõ¿òƒ¶ûS„LA[c§‹#àÐGÃr8¤q‘À¸a›)È7EØ„S„Ga¢è0Ð]~‰:ÿßúö¿Ã‡á"qåÚ—¢:ÑÇÜ`ä+ˆL§eÈŽ Èû‚+!C‡0äc„CÓã½BتÎ:¡üõÿõîü)ì"q C,XDÜãÄ\ƒhàÆ,¸ \C1""ì4æÓ—ÅüßUÝr:÷ÿ¯úØl>‚)áÞPå Ì#ÙÄc”8‰ÄHhPYQ Éħ;ñm•@ŠÖdK Çˤ|_ÿôµÿû¿"""# Œ¸…Î$(çãŽA¡ÄÃ’\º8ä‡mE¶xBõ‰Ò; NÂmÞ¸®?~ºýi+ûBM˜å‚];â@úű §aÃ'a*Hr+áʱÜ">‰ŽØ„‘ ÈéxÂSŽaÿÿ_ÿ^Ø~d(ŠˆIž »”;‰ ±È£ÆÐ0h$ñwÇŽÄD">B_"0–fœO­uB«ÿ뤗ë°ï±D®ibÄøeÁ — 285Lá¹8†!&ppÙpM0a1 %‚gf¹ÑâÊW´gý¿ …üè Ú]·ËŠn#¬E˜peÔ¡Är‡wÊ‚™C»¶H~êd}*Q¡7‰Å×½xt¿ý…ÒÿÂöÃã2RDÚ#¡¨ˆ0lYC=ŽXáŒE[—Ø“KG­ªe)„&}bfeOô½)üyà+Â÷ÖnüʲGˆAÁlº.¢4ˆà`„TB ˆƒBPáÆ¨$>B.AGh㆙~ ˜Jø˜ÙXPøciÕµÿãŠþâ¶üÈàæ£ B”,4¥Š[IUd‘l«DN!ÕÿHÍþ»úÛoºØAF]+ÂcÜH8ò:bäc“÷H¡Å†$GŸèaˆd~N0ì: ‚¡3Cå×Ç×—ÿýõ¶þD !…”9qN¬¾,DIÛ(#ƒ†Hv^A Š89qKí U¦uJ‘Ù"6!ÑN×ßïýu¶Ãè <3$‡d|X†¡Ã ÉŽSŒ1 T_§¸bíß°ö’pˆéa$'qЇ¥kTŸÿõ¿ÖÛ}ÂA$Í£a¬GÁ† Ê…N;.˜‰¶60ġɈû!"{#…#;¸ßH$¦Džæ"t>½øÿUýVÛö#a™ƒq—]ÙÜî$;â 7Â0qƒ#±CMÏ޾–ŸCä}?_¯ÕÖíøÑ„GùœOpeƒa•ÅM\êAÜAÁdÇg ¡Ü2<]ȰHpeÒ!–;ØsA1Â0ºÊH,íU"$m,Wÿÿëþ¶ÛèȲP‚Ί$8Dq0Œ"ú*Ú‰„-˜åŽ/B‡·¤‚(q†(dqÏkðEÎìÇŠ ’5¢”‡#Hú ¡áÿ¯#¯ê¿ºÛoÂ(ˆA ÂB@Ähl BG“±BBŽ4‚(pˆøoSØìÄ^#ƒ C.Ж8Ð"êØ°¢CFI &„މt"yê#ïT}/ÿáÖÛî<‚KåÑt ä—Bo>‚!:•bxI„,6N; $؈`øE¼„uv”>’„Bl†„Íêã©t©ú¯êíéEކ‚%ÐÊÄ„°Ã  ãLF`ÜÐ… ÈHZÃ#B&ÏLmÈþmf¬{­;¡¯ü/î°Ûý% Du‹`ÁÔ?GpÁ‡Éæh¿ŽƒDuOIè·pÑÇ¡ªÐ™ ª{ª×¯ýV¿ vö̰!Q©tгèA‘a—È醶”8Ù99ÇÊÚr‡ÆÄ0Šz,r‡Ç„PùcŠmé*áP¨™¡7Šýb¿ú‚ÿ…¶ð©D^Ê1ü$è †‹ ‰Cˆ†7 †ßFÒm†EL¡Èƒ‰P\}ø.­á‘ä F´'‘…G‘~·Ý/ÿ þ mü"øHÃ]á!Ì8GS« n"Sä4åÁ°vï »(qaPá%„SÆ—]ðˆü+C%Ò„Œ”ˆgÚ­ê¿ýÛðAB™¬¡Êt”g‘t8BGÈø4 Ã ‚+ ˆ1Ǹn¡!¶Æ¤Ç@Šp†ðbÅZPûκ] ÄN†³ z¡ÿú¿ÿP) 4ðDèØ 2‡. \â郔9È#Áƒl7CÜÂã²:#xò?nCÒ´ºT™P’;B$Â'Xïïÿ¯¯öÛíRiOáÁBP¡a!|ºvS„GÄŽ˜Ã&:†Ãià lPn‚3¶!µa&”Ž‚uw3ºZ;B¿Ò¯#¯ëïýA(@žl˜åqÊ‚°ràÄEÁ†=¦ÁðŠsHr‡a°ÞAqÁˆH}ñUWÕb5ŸKN’;-ÎÅŽ“ú_ùWÕÿ^Û}Š„„"_PBÂa EPeÑV`Îås ø¡`Á¶ÚôÛÔ,8<¡ÃèN1 Òü¡û¸¨"¶¤qrŸÚÕþ¿ûÜ>Ñ ”áÑ€r쎈ú8åF’¨`Ž™»a†ÁË"¬¡Èá°Ý„B)ãÄ0ákÅÆæÖëØé]b%Ñ„:þüêïÿwÐÐ@ÔDˆ:@„RÊ‚‡(sœ«nUN¶Ñ‡AqbÁ‘Øh݆Ô6GÂ(sñC†Dt]b.Pî]µ´¸p¢µS£$#²‰P¿é/û×ÿí†ú !ËŽÄ!%dtGă.ŽˆŽ17¶GA¸A2輩‡qŽ‹¢:„]P ‹ñb! 7ì6$9xøGw_´BãÃX¨â!1„œëë_ÿWï݇~ÐAtö&(D"²éœq,¨ (0ØcB  ð8IŒPlà@wQ EUñ·ÒG˜ ƒI!e_KÖ¯ÿ ëùÍ%‚#§H—ADqh‘¤CVPàÄEÄŽ†,`Å‘ñAÁèrÎU‡Š:Üai Úm ø¬ B(/üï_ßÈ2ì#~‚ ! „M¤O"à€ÍȺ¨ "èÈý‹H8a; ã„C‚I‚Ð"Ÿ§§»Ñš]i/ÿ ÿïpþG*g‚´* ­žD|Ž2è_ÄüT]2èf„ ]Ä#rÂ\]«xݨàŠxAaNˆ®.»tÒÿõ”€­{·ÚH"g„)¢‹çКb2­‰BGBL5#ᤇ@Ø`Ñ>0lÐ"Hà Pý†GÖ躴’+×õÿÞÿîþ—ˤ„AI,º=0ÈûÐÚAüŸÁ“uaùt!‡ÓzµJ‘Ø÷]üû÷»î‚à\Á˜0B!¨ˆö62 ÖÆ ž e¾Añ7«mc &jÇZÿ¼)Qßûí·âDhœÊá )Êãw*e< «(tGfi²:eM‹ ‡\E0rž°ÆðÂòð¤Ê²Ž Ô®Zÿþÿ¢ C÷IèDDD0²è(“V#h0bÄ9ì"‡A³ßU·T±UI¨˜‡£±Dv$Ž!ÿHÑ×ÿ<0}oïÿ¡ÄDHømƒ>ƒ$€âÌAº²èUžÞÓ­[U7PHFĨÉÖ=qÿÞ@ðª›n¿÷„§Geˆº@ĺÄ6vØ‘Ð:*ÎäX°ËöÜ#¤¶÷á)Nˆí*­ôëÿùÍkûô"" 9:”;ÅÁŒ1xU«Ý1÷ŠޱéD~‚Kÿä¶Eÿÿ »œß³!¢6ÍhÉ:oˆèŽ„[{,v6ÁBqÕ½U¨¥æÿv•#²”sõi(þÿûÖß{~ †GB"‚e“ö!ÜE”8A Ž˜`éùt­që5!A[µKÿöõ¿ûx~ÐDÜŒpY‘J#¡g,Žƒ Gmà© z澕 ‚¬PDt—÷ÿ¯þûüÈ@¢"8vìB0àÍ0Šò®ÛM…kÅ,t’JÎÄ#°µ„Ç qþ߯}÷öe¨§H«BŽƒ 4y ø‹w\¡Ý¸*ÒUA#´ ‘¼ê‡M ¿ÿÛûÝøzÔÈú(aN‡Èó³¸B]"Çdt"GCô>½*K¤")­{„’ÿÿ¯}÷úBˆÁ‰1ˆ;š#¸2·ó{ /_Hî´{R&~&i*_ûÿjÞíðÖú‰¼„2ä"ÆÄÂE6ˆNõ¥T†„\E%ÿÿzV’ü5µèŽ‚>¥8A^Sш-¹Ô6N˜c´ÉS ª\húIq.‚¯ýýÛí{<L4 Òí""ÁBAÉó¸@Åx`Ï¡ÝÐ"øè$FCÕ‰u ÿÿv¶¿Á¬0¾%F„”Ü&¤4Gmˆvl* sÁ.¬ ¾“ÓJbqJ—ÿ÷µa‚íðad2õöv±¸ËæÐh TGBÆ$è6:Bf½Gº¤,$„Dkÿÿ¶”Èj>A©ý@„à`L"<–" 2ó*e@b=ƒøaê"P‘ØZ;V‰R5¤’#¯ûýÁ‚ÿÇÑÚ ˜ADXL·B §v¢æ¬Z÷oH•hìKºI!ÿþñMmÿ¶Bˆð „ ¢vM$ Æ&ˆŽS¥Kê³?­q’ÿÿoÿOâF@‚#J(ç\!¸#ÈÂê=uA!Ò£DHI»ûýï·ÿ™XB;£ä"!œx°Ï§Ë¤8zZÓI"f’;YE"Uëÿ»Uÿ÷ ¡JEpLa@â]WŒ»}³LRšB!Ô/ûÿýýi ‚²¥DtmPMÈø‚j•·Çú; B4ïÿÞÖý}Ð @‰oR—à˜¶uC~Ò $¯ÿî×ÿñ„L@GÒö1+ŠóS”sùIʇí¬.U•¢#2ä}v]_÷û§ïëª!´GÑ•è%„Ž!qu ©„§bXˆØ ±ëÿï]õí„!8„D⡬6s¡ª›FžN’ÿíï¿Ö¡AžG"èoªèj„ö¿¿í{õôOáb_9˜X"žyâ)–!2…‚ÿþû]ÿáÅÑn+ˆˆé Å ‚_Q0‚ÿö×ýWh$k-Õ E)8A%óx«AÊUG`hGPáßúkÿÚA¹DI©!£¦GÄòq¡2ZåÿþÝöú­B¤jÆÍ¡+†„A&xŠDH¢HíSD-ÿ÷jžþ½‚ENÂç‘:Kþÿ{¯×ØAh·D ¤Ê9["vT„†‚AôÿýªÛúôA$³0„ÍÄ „ŒË¤‰šÅÿ¶Ó_×´BPBPˆÌD‘…4T"kG`ˆRAßöŸ~«P¢""mB8’Ìq8‰ÐGÿýé§¾«mDÌ·JD a!³³Lú¡ÿ¿ÛÿõÒDè „Ö‚DŽ„º.ŒÑ )zÿm5·×é$¸™â8ˆ‰Eÿÿvšþ«ô’Îý B8„¾DDès!eÿÚk¾«¡H „˜B""%’#°D¦U!ëÿÛOýWgb‰AGBM†",’4…ÇÿÿMoÕh":I \ŒÈm !r>"Bú'Fl;KzIq¥H£`RŠJÙa@…HÑÿØMmõ]i'‘ÄPb_4ÄJÚ;JCÿm¦¿h5؈HK ‚ÈèHø©¼º"èîÒC¿ÿÚaw†¡xHBDE8ˆëÿì0ƒ[ì ×geZ®] B'jÑŒì ÿþí5øi¯H$&DªÚD"‚ÿ¿á„ïaÖ‚†‹£ø³¯ÿÿØa0ð -4’+—FEˆ ‹¤…}Uÿý°Â -á„^’ìb:(B:B_8Šš*œ_÷ü0ƒ |0…´’B"sDLÑ„%‹"YÿöÁ‚ j a};Ñ Eˆ‰äHĦÿƒ÷0]„¡úFhO.¾""" 0B"FƒTîÃ[ª<ìÕü´ ‚-ÂÁ íÑêf‰¸*(F•\ä'cÿ- ò‚nc©#4ŽˆDò1ÄNÒÄUq6"qð‚ÄcñvÂGóµ4MGEÒB‘Þ«ëCŽ8ˆ“¬ú±ÐA Œ‰üNÁƒ(BTG26ˆD"©Gìì ¡…‰Ó6¨E!Åé.w›ú²:eyH…þÒB$Fh‰°J,‡ˆˆ‘¤NˆDWF3 ¯ "´…"l#Q6†‰|º"hâL{úB‘ðˆNI$'‘Ì›Á"$MôÇÿGb©D2œ#i"1 œ"‚¼Ú _Ÿ_uI²|D ˜B 2¤£˜œWý£µî¼ò8…!ˆþB9 ÑHŠçV%Ñuõ¬R4%Ñ7‘Ñt_e}1ÅIЕñ(e9TûHï’èK¨†""qbBg’:HÍëlWœKÿHHÚ Gò1$f••e !HÉMaúÄ'‘×õºÐA Ì›¢u[DèÚHVˆˆ—A†4:(üDR#£xœ¢èŽŽgÐùä!G¸ÚX±#¥„—÷;„s‰Óñ q"äxŽ…Â(zQÿüì‘b¤#@Š ­a&yÄz#¢èq5"¸jÂÎë#óŽ(ýôŽæˆÄ¡&q.‡6„2œ!QPãxáÄÓÿ¤"Q‰6H”Â#¤!ÕêGÇ.„S:"„ǃ¨(‘õú¦'bÈI„(!+‘ AQ§fˆèPœZl ‹¥.“ÿF@ˆI„#(p™ø¤K¢=b&ô)T ÄDòg_ÿhHÌÏl„lŽ‚ â*þ¨(›J"æ¾C4 GýÔ…"F&¿ ¡Õ(­iP ‚H¡Å?ÿ±ˆ—Ò6ˆøŠ—WDvG±ÂB™|adu S³Q7ÿ̆ ‘N¨DCP‚ƒAÑÄGL!éYQIAöƒ(u4ÃJGH$¨Âa!&]Â!åe"t› !ùØ1H †D¡ÈXÌ€Ä"hÖAMHŒDmTq£½QÛ„;Ts-ba üX^":„w K£¾]—GDyBËö‘Ñ|“ €D0`Ài0 0sàÒ\ d0sP`§ å89ÀPu—ƒ`á üAÆQ¨ÏƒPbCAøƒ 66xàƒ†@¹0íçĨIË¢|$g¤±ލHqÛÈèÆPˆèþž’N›Çõ„ yÛ¸A¸YY ¤BøOàÿÞÜ tÕéæFÄ" ˆìº„Á!ò:#é T¡Òc]F] ¡.„RóÉÏ/¾¡>iië½};áÿú®»…û‡æC£è+ ˆŠ‚gp‚$|C)Æ–B„¥¢‹+8Çõ®z[áá}>¯õ÷ ݪúÃÓhº'E"A0‚bTÄQº.“ îqkª}þ¸Xzzúûõÿ×û\ìˉÏ#6"M‹vË„#¼ä]Ñä‘õ<‚‚‹ã_ýû×í×ÓÿM5ï^·_ï¡ óéR6gt]dQÂBAÑP‘ô‚!!Iá„]A?õø§­÷¯§}ÿÿ÷zÿ}‰V’è›A0šŒ&‚0ˆúA(Ò3Yšð‚á]ÿ××í{ýÿý}zõõöŒˆœFhqá ã™ÒC#×A!6„tC„.–Ärèþ·~ºÿþŸßÿÿúýÞ¢Pˆèº/Q ¢>OœÄgYhX³Àˆ@ÏesRèBM¨ŠÞƒ ÿ®ÿéºßzýß~©½ÿÿÿ¶""]„œBGB'–L¹\±Ñæ9NPè¨ ¦y¢ åŽ2Ÿ ÂÄÍäº Äy¬†!rFù Gý\È<ÿ^=Þ¿Èaú™! ²øK.™N¡GІ!8î"“ï7¤,§Aˆ’X‹ .,üÿè;výé…ÂÛÑ?|'ü?úÞ‚¡í|ƒþ›ð @‚ÈŽ!#X(•¡Ù#£$—B‚=©|JŒB‘ Œ":/ä}":þ « çA÷4÷R@bA4°Z_º!€Âpnÿ}_ï|!äcßqIGGáKé2…ÅDXBÕ)B‚QRC`á¤ÒjCÇǾëÙôÔƒÇÿô¾ÿÿüCþ—ÿ቙Œ!HI°Ò ¡ÄHƒâ%aPqÃÍê#È.8ì-)t""ÿÿÿнmÿ¥ûÿþ½ÿÿÿø£ÔaÏÅÌN8„‹ˆI!¥AAPAAo:¤þïõ×ÿëÿÿý¿úôÿ£"ŸADO#FSáêA#… ´&XQey]ÿ÷ÿ­ï_ÝÿgÔ÷÷¯ÿ¨’¼ ¬0ŒÑ„§(pÆä…ƒ”8´ôh¨iHúŠdtG0@‡&Pûwõ|ƒ{^÷õ ¢?ÿñ§Ãÿùÿf^…%@ÁO¤6HDŠ8Æ("‡ÙbÒQ²:a,ò>¿ðáúÈQëúïëKëïþˆqïdpFÿëä(þ¸Du¨™ Fç—Adè¡ dxÆGM!—2ùt”htŒöWè!Âößþÿÿé/ýß„¾¿ïãÿívÄúSù| „º…G]i„ˆACSÅ5(tU‡bÓ„9t#ûØmñKþlÿãoÿø¯õöÿ­Åi„ˆìºpƒ „Ž˜B18†˜‹ ‚h L\ÎÏ Šua ÓaeÑ|òû÷ÚÿÿÕWõÿÇ}ÿþðÂ`àŒ8! Fð“GÍ ´dŸ ƒPåºG„ˆŽÄÆ´È£è!S²ëÒr:Kþoªÿÿÿÿúßoÿéë¡H*hò@ਠЈI¡ð‡†!„'AÓ* +ÄRú_}oÿÿ´¿ÿZ­îßÿý.=LV”M¡y|æy "­ÑĘY!ቜpDvŠ‘B‡a EL¨„/ý°ßKÿÿõÿýûÿÿÓ¹•hB 6Œa:3B!L&{(éSˆÈ¾&Ñ!BaüPˆ „HÇ C؛ˣë‰|vGÂhVºÿ¶ß ¿ÿþ¿ÿ…ýûþ·]‰ø(§›A}AL«8á5I†W£4žGÅÆSެ ¢¼$B*þï‚ Å?÷»õßÿÿ ÿùòr¯D{ýÿOJ¦\‹¡S†GQL!#æS!…A'£+Èä&Hº# A,Ì#h¡ Qa!Ø‚)ð ˆû aË£èºTYVQ[oûÿ¾¿÷ÿÿ¿ümýÿB)Ï©1Î8Œ «6¶QÊðŽÌ³L`’¡–¡âQÅúøC¦2èFÒIœÿáÛí~Aÿÿ®œ†÷÷¹Óëòù×þd ›2:¡ÂCôtÆZB! ‚;[DQÂD$ÎPè!dt'ã Œ(d~êû#¢>›)Ó(℺ÿí‡ÿèw¯ßþÿëÛý¾ÿþïµ0‹£Ó!Ä!McìMÆ3~‘Ù(Èêgá(v[7®"ÅD¡ÛbÄXú…±ÿ‡z¸¿s0E×ï¿ÿÿãÛþ?¡‹#¥JGÐ"œ$ˆêšT ¬CÙP!ÂŽ$pê,%„ ¾ ‚“ƒÈè»0‰èðFþP‡‘Ý_ýÿÿïÿÿ¯qßúþúÿýùÅL¡Ò ˆ²‡"c6‹¢úé©„t3±…ˆ”8ŠE8‹ ‚P ‚œŽhD f ‘ªÜ{Âp‚eyP—¡_ù:s¯ò;_¿o È`wÿ~ûëÿ¹‹ºöý~ "ž!ô‚?²éDæ]iBM°’Dæ]Õ‚ Ã*ϧa ´0DÂ;ÕH-8Tb)RPð‚Ó#éÒÆGàÿ÷ßÿý}¥þßë×~×ÿí_ò.‚D'AãDn‚Ša4’UI„Æx‘ÈÃb"V¥ãèÓ„8A™¢…Ý\U¬O ™CÿðÕ†¾ßö½“¨ý¼ÑCöúþË£ÿðý}³EæŠÿÄSÌ ä|#¢9¥;Æ --ØP¥Û 8 ¥P eB.”„((‘ó±ˆ$p¤…”ûƒQl`˜ÂÄ":ÿÁ…ƒ_ï/mv³ÿŽÍ¿Ò߸í?xacø`²ýW˜Dx^¥iJt&ª¥IDD °„N9Pb"’1Ñ!Ì¢DGÒ#£+;¤XúÿñH~ÿÇÇ_{Çûÿëñ_Ç¿mú@‚…B¦:A ! ${'DËDeÑtXx!°q¦ƒ(â„DŒC8â]qeÝSZÿ{íÿßýÿúÿß}ßÖ¾T!á}ÄÀ஄° ܘå- !Á— „ì ¡Ä˜ò1£xS²T‚H¯‹.‹„«mûÿ÷ûNõþþÖû~ýÿ_úß|0›Ï¢>}Ât!…—"èDu< • ’„Deò¶ !sÚÉ B Œ"èæ6“ñ³¬\[º ">_þ«ÞÿÞ¾÷úÿý×þ·zýö’£A9qÑt a3à”à‡T”R&€|2èºAÇ#p‚V"ÈAÈ*¸C ‚¤ %z£qñx¾vGD÷ÿëíïþÿ·õÈ8ÿ÷÷½{ÓA (Ä!BS¤"†KG1+@xBè…PÅ2:SLºˆIXÒVv¨¢V”=á3 >qÂRÿú¯¹ÿêõ÷¿×ÿþ|Þ«·ù÷¿bMÊþS ‚Hyó Pá4å, á :.ƒHNôæpˆè&]ü#àA4]JxÑ]¦‚,p‚Á…U„Pÿú÷¯Úw¯}ýöûÿKý¦¶¿û¾å8B$q`†"èÄÇ XDtG1+y‘Ã<3¦JÃ4‘Æ ŠzÄEˆ‘Ö$tB8¬vXA28Èð4±H [.¿]%÷·ío_{û]oýÿé5áÿð“œH»‰Œ"¡x áEm({ `t,œqq„Ž:Dœ¡ÂqሬhGâ.?ý~ÇÞÖð½÷ößû~økßt½½´Ž!v(Ž’#è2ë#òŒœBÎLqD|Žƒ;ˆ“r¹šœrƒ‰Ç Z?Ä!Ï#q…ñ8öwHÎÒ¡Äâaÿ½ Âúõ (x/¼7á­ÿÚëü0šíô?}$rçɈ¶xbyR‰XDp<Ž‚«l§0emñ !($Ž“1£Ž‚‘Ó³¸‘Gñ¢‡Gâ"?ø0A…îòtÎ=„ ¢a2C”9•›ì·]2‡0ç{(rœ¯+du‘ÀA„FbB!Z4Ê|ºeaNV…kaJ{Aª˜sŽg œwO3÷q7—Aa¨Aê$4f‚¡É@РćˆAžÂDvGQÆ%åÒ(p„ B*,Xð‚ Ž8„ä(ä?)Å"¢ˆˆˆˆƒ Áˆˆˆˆˆˆˆˆ0B"B"""""HxDDDDDW2 ¤¹ B#)ÂAÒ%(¸*P‘1Ä C#¤ˆèŽ„Dò"¡ „#¤ÇFÒÄKáNh#<Â"1¥„G×â"""#âŠ4c3®î!iÂ8ð‚ê'ƒÀ!e,ˆI8SZ \ÃÖ ”N* Ò³ÉFC1áA c‚þ‚EŽÉ K„z!<0è%B8ÅМGѤ âÜB‘ͪHŽÌ!¿"]‚¨Ðˆˆþêd^A4’@Û Â²„Y…Ì °‘ô$˜!£èQ¤bCiÒi„\ „ãÑ$4Hs?ûph#èEAé^„ Ú#ˆ4‘N¡ŒâG¡Ýâʨ«bG"<^1è±Â ƒ¸Šœ¼¯ˆ„‚b¢BA¨rÄТ çq&:6’`‚BLñQ„£iA":YCªÄíK˜s[ÕŠ ¿Ò!HAI2v)ÒŒa17“ Ä!¡J+Q4B4"ðŸî4BŽ#þ¢]‰YÅ$}\ ¡##¡¨LPHö ÙÕ‘üÞuÄÚ ªÓËæˆŽ¸ŽEGþÔ&Šr‡Fð EÐB: 2 èRFN˜">o ‘òèL‚BŠ8"?9ˆ"¡œT4G‚ZġġÈ2ÿT XˆH „C¢²Ò¼HmÇÂb“ AÐH† c":04‚(rÇDLfp1A3Ñ ‚¸Âñ™ÊB ¡ÿüQÇ8üK L’ B´T_AŠ s„-D|¾ØˆEW„"'5³IÁ:B9t$|FâHq‚ ç#Ö̃a Ò]BHrNK…®MÅ(ˆ…#¡A"_ D|Hè":@ˆä¡Þy—D~KˆA ¥0¿°‚K¢:©‘ñ.ˆh"Ç Pƒ=aÎ9N!è!6¡“᳦Å'‘u°ŒRã‹/°ÂGÒP#*” „¡ÈGƸáÿ# Žâ&5„°¢u—ÈÚ ŒŽ‚ЉÄªˆ–TDòDgˆ„!+,{äuÐ]!Hi‰ÑÂÿnG@Š.!„^r›DpÐЭh]Ò6‹ @–ÚB> C”8D|ºL¾GÂ%1A:7„Â#¡7„ƒ8à„п¨ X…yŽ‘¡%úMüE`!Š@ÐLŽwØ„?3BCŒVÕ .‚R bñ"ŽfDÇ,tHH6Ž’#É #¡ ä-A 0äÇA 8"é">G_áÑ—â4¢*×ÄT%¨ ¢! A á/—ò°‚#ä|!$?Œ!Q1Â\n‚PB&Õ”öB' ‚ÿE‘Ò¤!(ƒm‚u… \“Ár‡‰ü— pÍä~Ð Jn"”9‡ 8 BaÄG] BTl¨™Mb*Ä‘rÇ‘ïé ñ1D5ˆ†aâÃ0ˆøh1¬(„GÂ!Š(tá §Âœq $S„‘Pä‡!š8ª/ؤ8HE (r(à¬kûÍDyL"qEÐBˆáHéD<(ŠÞ‚0HC ˜x’DTâ)GJ|Ét{4L#! TüãÄNÿ!#éJÌ!#¢êaÄ":Nw†91Â>“°Š½Ñ Q¢ÇˆˆB4"¡á¤"±R‡ è#kÿfNGÕˆÄA¤šb§ÖÕ }A1†Q/›ÄYP!B²8Èà¹pSA=FÄÈ #ŽLqcÍ Õ©ÚÚ D"‡© DŽBŽErc‹„Š û Z:`ŠÆ#ÚAGXŠaA'…ŠœsX&’A Dù–¨Â!yC¤E!'”.úfˆÏ:£DEQð„„GEÑ Ž#èÙ“ävutm‘Àø¸¥Ñp%Ds. dGeÈŽ!¢„i!JsA}ˆŽÅGºA *¬JÄ(„0A ?b‚J¸+#y ÌúºÄfB *øˆˆˆˆˆˆˆˆˆˆˆˆˆŽÅ0A(JBC@äQÊt) p?@ŠA”8Èùt–  Š9Nqq¼£–C•‡ó"¹ê)ÎåaÇ8äcpù–ˆŽ…GA !)È8êw(¤ÃÁHø"Ç(w„D1‚A -: Â#¤A¤qCˆ$ÒŠBm¡!1qq ˆÇ¼}™¤DDDDDDDDDDDDDDDDDDD^Œ¦‚`EÕHÜ%)A„ùô3¾ ² ¡Ä,¡ÉŽSˆ°EŒLfð‚¨bÆ)`‚ÿÕÌh":Јð3tBÁ BœLáË´qÖ&0 —@¶" ¤œr ˆAFT$º8ŽÂò%#Žˆ4‰—ÿˆA(D$°øŽ“Ü : …UhŸ:§jañ<2>ÏbDH7†â…•hNidè&GCŒ«m2;ÿÕ‰ Ô# ‚A #gAqaˆ¦Åqp…H%#¢û‚"¸£ŽEuHâq2Bp‚$ÐPø÷ú…IBh1a („œBS‰ aÒBmh(ƒÑN ]XáZG$Ž!¬BT …n.¿°Š LºZ Baè¡ÊHbÈÜD¡ävU¤‰t'tmPä „Hƒ„ÐÄbqDÉÒÆ&ò*L¨8ç‘$~•&qÿ÷4A%EŽqØLl%²1Ëΰ† ‚ʼn7+ÅAšP‹ ‚D â‚åD‚Bv–¸¨“ ÿT‚‚ˆbqåÖ¡Î:b†T8Ñ ¡Á(  ’8é„„Ãáð „Aþ„â"Xˆ…1ƒËx¿ýL‡TŒ8„!`ˆä""vٱŜ‹£èØ.#dplA48A &Aʆ‡!ª8ZBl#MY"¡+¯÷ÄH¦’)Ê=¯.¡!èQ„‰8É*… Ô9‡Â:BŒ¡ÈLJa  ‚7¤¢'j©GÐ!aãÿì!›PA"ì"œ TX櫓È*.‚T"œÎ‡#¡Ë¬$!‰ ÁĆháÐWEò%ü‡ša& ºˆD|¾G_õhí*0‘Ç—˜A!$ ”$$!‘ócŠá0Š"­‘ÒBˆBXG‡D(®":J‰ #>’Cºÿ•ÌÙ‘4d/‘ÑD¶Ë Ú;ÌŽˆ„q¢Œì»ö„Cñ†„‚ÚA—FÐ-eò:0ˆñ„B9‘óŠÆwP¥T¡FˆœE •eA BJ˜BûÃMvŽÅÖõ™¬›ÂeÄ?£¸"ú=´koï¥íÂA†BU• ‰ÁE¡kDF$1‚„B1Q³4B$tGCË ²È´^$~Â`¨ ™tmKD|WûõY2Mo†ŸÂ¤ÙÚO¬7» ©°‚m+Ý÷þÂ&9CÄhÙ ±IQáÐ@¬Žá!PF¡â8üŸq7„‹ÄEHÇ‚M!"„ lvBAa9×øú¿ãý?Õ>"·tIñ\zì ‚Ä±Íla  ), †—It@—ÚX&aÈ9s¸.Èà…ÁI!@á#¡lt …!áÿ½+®½.F¥þ¯ë ýÿ«Ä":9‰#ÈøH CcRÄP©Í Ž„<§D|ê’‚ŽöqÄ‚ãÐDuF0‚ÃvÂ#è":ö åÿõÿÿî¿ÿëkõ¯Geh©‘BXí5 XD|$~ §I¬E —AsŽQ<ˆ1| ž"E ±Y¶mœDõÒøˆH2ºq¿û¥muÒ]½~·×áû}þ«,|":S4(¬):På-D|§ÉÑô|£¤LEÎ 2;#†Ñ Ä8è"œ Q"aP‰Ä‰„e×ýúÿé~õÿÛÚ¿÷÷ª¨A Otš— âÉ$Qä‚,L ÁcTSÆf—E::¡áDäPàˆðZ 5ˆyc£èRÅ’³%n׆R3DL6Buœ NŽDPŠ ¡Â!<‘Î9\l2&Å6DFGFf_8Î4‘OM¤F"èä:B=„ó™!ÿœÎŒ¢†P#Dt2_9Ó:™Ë¡ëó|üÙš Í›e Ï,1A@´#¡!Pƒ#…/ѼbPåŽ+<„â,OâB](H ÐÃÚA2:i""¨MHíIk|!á3æpŽ!u@‹ÇŒÁ„¹&š /0ƒÁ4Ñ„ggŒ&˜F°Ð´Ð~±aa1_¾,&i‚a!r „ŽCC‚aGˆƒA„Ï ÁÐò  Ï³A„h ;·_Ð"=kÚ-Þ˜E¿é(ˆ…eЂAÜ?—E,t"]ˆ"‡a ‚ˆ¨AK¨³ˆá[î$p¤Üä#Ⱥc I"—OýpáÑòéiÝ: Ç£ÃA8tÂ6l:8ìsM‡á„OAãÃa¯ èðÑ£ctw†YÄã´{Ðh ØtÑð0èôPl;„g»„aÚLqµéÄ Ø‚mÑá 37´ Ê…šaS Šs@]ˆ˜T<2ÇŒA$”áhDqQC„@ÿDÜÒÒHü‚]]-/þ›Ýéÿ [ÊzO±ZMº)û£Õ&ߺ·~îïñAÿb¢›„ÚMº · Þ‰YJõWbpM§»ÓaØ ÞÌ÷Ÿ«}¶)µþD àçÄ2;UvVÄDº‰9ÀÄ"tS£ºèe)Ñá¢C”8¡(XiB ¥¡'Ä"¡ƒ)#§ÿ[V¯ë×ߦÖõþ$Ò¸ªÿ¿ëWïðõ÷}?×ÖèãҽߊúÒź×ÿÒëI·ôBâ#‚£!G6TÍ ‚âò8@Áä4¨P¸!M„‚#æ%>¨kò:qéû¥«Åwÿ\Sñ×ý~þ¿×ýíZ]}{Ý:·ý4ýôý?°Òo¦ÿÕ½×Ý#-@Ã!‰ä,fòù„$ùˆàxjˆ‘$„B#…Uµ˜r±ÄŠ Y¼*b#°‚‚aHé‡ÿÛþþO]ãZ¾>+_Ž×÷·[cÿßë÷ßЯ÷ÿk†ÂM£ÿÿ¿tÒ„m$J‘#ÁRÊš”<¾$3#à„…bP£K SAþXâ&„p‹Ìq°‹¤X#Ž‘ÇN¶ëÿÿnëBþ˜?ôþ°Òþ+ÿ¯¿°¿ÿøc^½w^+ÿþÝ1_ïý×þ¦F¨å¢c¤A‰¢ *„)|úqBF#¦„Hƒ‰œrp†åXè!.‚ Á 91ÐDn¨ˆ›È¢ã|PßÿÿÁûƒ ðÇþ1Ö¯oäJÒ×õþÁÿ ¯ázúßœvÒ_ÿÿª¹ÚZBHp†3‹G‰N‚l`’A &WYP$‘Â!£ÊÈèô„˜ä â! ⌠Â#¢¯Œb"8‰Ý $]—„ƒÄÚ²>]g–×ÿýƒmv£ØÕuû‚,ÿXoÿ Þ¿þÖÃëøð_ÿü:_ÿÿø!!Ç(Êr‡„8ª.‹æˆÆ!1HG¤2‡B%ÐDQâG’$"39C‚Á\YC‚ œIKˆ09 »,t"¨£Ø@„%>*ÔŽ†'ÿÿ õòêA¿æ®RË®¡ÿÿ†ÿé'ÿÿ\7ü±¬º¾ÿm"ÛAÿúÿçjaœÆË ‚%Z–:„.qJHrœ(D|Ü`‚Ƹã„"6’H%Âdt„,T„¤‚3@’DD B ‚ÄVÐÿÿàÛ­þFþŸÿ ¿ö×!¿ûþÿÿÁ¿þ¿/ÿô“õúëÿÿÒB9V’„#â!4]ò±ÈŽš\A ‰N"Hp§!!¤W †¬h'°6[#ät¡à¿âÂÿýsh7ß(Aÿõÿô¿þ³iÿ<½ÿÿ8ƒ¿¯ÿìWôN’¿¿ëÿìì¡‚ ”9NˆeŽaÂ4„EF'ÀâŒ!ˆ’r8\q!G @è(š#AÂPá H±ÊªaœŠ:A1¬Y^T‹Kƒõþß¿íóËÿ÷Pÿþ>Ûÿëö·¯Î/Þÿ_ô¿ÿGúJHÿºí½>ç`Y&qɺaXšÑuŒN8AfâF(ã ŠLâeŽx xl2<_. ‘ÃPŽ28Äh ‡ —‚â`# ™ÈàÐ…1 ©ð‘tB§DM#Ù§(r¬îBþÝ_ûOäë¿ý³E×Öh²u¿©uþý¿ÿoëÿÿÛÿ“ªõ.¿ý/¤—KKÿ­+ÿŠQ@ÔPåÓ@Žá4˜‚)æÑÄjCŽ8ìE—BÇ0äÜ…“ê'îCˆåòñÕŸEø„†D|"‡\DAÐ"C ’B‘´P„le؈††_ÿ^jÚÿ¥úôº µm{]úí/m-n»Û¯ÿ¼åûkvf¿ÿÿÖ¨Cï×ßíÒ]NÂB"œ¨R`d‡i IŽLxˆAX² !ƒ§)ØAÏ!jãÀåXàˆô8âq ÁÅ#æÄDϤ„F…PLÎ! º‰‡!¤9ÇÄÜpñ¤JagDeRÅà‹§þÚZ;µÖ¶Õ´®Òaªì4•êøa&Ki6†¶¶ëkwk¦Ø_Ý~×í$×[Kl/î×UÕ‘˜}Gt•¤ºiÚIíª½\ºXVPá$$~PãvÄ„D0ÆH§Dt"&yt0„6GF$(xè ³ŽPé Ž8HJ)ÐAfÑœ%ä $J‰(ˆ¶Lq8莋®a …#èDò8‚ üLóÌ×¶“h8a/a„[Ø Á«A„;‚†)ŠJt˜A¦ÐpÒ „ج6H Ó °Â ÂlPA„®‡ðÐaŠa0ƒ‰ÇI„i„r<%T;Š0ƒM0Å&lB…I¹C£ ·¡PdtN”Q;,sŽÄDÍB"!AXCÆ"#H#0ÎÄÇJ”L"¦w¢"@ଡÊ¡. }DDAö[ÛˆøøbšùV!;Aˆ[ ¢°™‡B îƒZ  S„ ÓŽ˜Lª8T&lE¬Š`Äj;ûNÔ¨š®šÃ öÿöÛ[ ˆå†³ˆa†øˆÐˆHÆJ±Þ#EÑ1Š0ì"C”9G/a„Ê#x!D|¼°A™Êäx-$Â@âà‚ˆT‚(q!G!K±A¬ ‰4B,îî¿â""""""""""""""""#ˆâ"""""""""""""""6 Ž"""=)Ј‘˜­¨AbPሄ"}c#¢óŽ‹ä ŠH&,"ƒ3”áeÐJPðÂ<„TCB%ðX‰Ç&á%„Žü#Ê”N#"´a "¢Ì8ýaFáû;©Dt„](²‡N38A —Æ(AJ…®1BjFh T #k*†GA"!!(h 2œ$kHt푎{tBĺ ’Ž8‡Ä¡ÿË/~“â´&Ó)Ñä#BB1HGˆ8ˆ‘Ä6"N‹¢ù>K¥4aËá2èO3ÄCâ!8„$5çÐŒ g)cˆ2ôBEDWЈACódphþšôûáDR"\ ˤx‡I”ùtGÔ‡Ñ~qÅ …Dt3èÞ‰ô*†XBŠGB"ss0ˆ„m—A"ìúJÂ"œDDq!GH ´'DeR-¢ëSÙÇ&ÿýv—çq„…8¡Ft8°‚<º.‚,BXA ÄÂa ‚)æxLº.‚ ¡B$:2µŽ„¡„‚Ðs $‹ª˜z xÇ#§&8A ÖÒBI¢:.„DBt.Xåÿ®ØH|K APˆð„˜è2† „[DEBaGÃ<§(tB${Tˤ@„FÊ4)‚¡Â(p’-Š6 ¤pBá±Ñ'â<üqÈp¡™ÄDÿì<1K“D!•* !†’ ޳ˆ „ÑQ|º!œt‘G$8AXí !à„SÕ$w˜º ¹² àÏaH âD BAÇ(qQ8áQ|HôGÑIá9qÿ ,›™NßGEਫ਼A:Æ1ÈKøˆ‚ nB8AŽè"q"XêG `Št"0‚ÂAFqÂHj"ч „ˆI¤‚Si!(Dëb þ8ê"C±;„‚#à‚‹#£yÄ&Ä#³iKé B0•”sGç¡ìEr‡cÝ„ÐHÎÑä1Dƒ‡#¤'ã†ë7EN4ÇÉÿùÝâI£ˆÆ3Ž"’F"NT°‚ølX%T º„"/;b „`ˆ â›B!‘Û èúA7‚±F!1ŠEÕ ‡‰CÿÿAôGA 1Âä‡GÄV5ÄâaAB°¦²CÑP!„HsÄDâ"ÙçúHK¡. Ç,…BŽqŇ@ Éñ$èêŒ$ˆ.©á_ÿ¢h‚ 5!ð‹‚±ÐGÃ)Ó• £¢A=‚ˆÉ8‚ „tGG‚ÁBDø‚Ná ˆáHàÊG Gçâ‚Ñî‡ ¨"(âqðDþYLò:$¹"Ü(ŠA"”nÖS®˜³È"‡H : B\ ÜÄqД8—EÑŽ|Q„Aø“ÈŒ1É÷G­FC‘®;gR?€Ù‘r;ã2×8g É!, ÐfÞ™ P„˜ÁHäG@ ‚ âÊä|$B$|Ó0„ŒB0¡Ý …¤ô]’ 9ú]èŒq„@àq ^ D‹er„ãŠSMÝÿ··{BŽ÷m;·Œ;F½$c]kAJ ±;„š}žZ'F0‘uG:„V‘š„]‰Ñ%!¨A¡.UkC©‚#Ñ‚ Ô$_/‘á2,]B —Úÿ‡Û²ÏÇÇéh+ü!¡,EÚ²:.±T1iHH„m ÄL(Uät""!ÔŽ†„B #cÈ–"$‡´!…ÐŽˆÌ/çd,í ß­ò¿ß!iÒÕ_±µ¡A0Šc„#ú(p‚c†„ „(ñA g²"„I¥…nPâ!ˆRn$6àa‚DÇ$ãHDM˜øÈìBGþÂññßü_ÿ÷%1!!„PðIB"a r‡„ Qˆ˜ÄŸ¤qÒD4Cˆ‰:IT±¡„’.‚ ðS”9‡)„yÒYt‘GLŽÔNñÿÿÿúÚÚé(Î ¶9… ùÄjB&h¡$!ôGGðRè!#2… ZœqsŽPäG!@ŸŽqÌ8‹&WÄDDÓB ¿ªþÿÿë㈆‚a±:*¥±!‰lDºHB¡g*HhFPäc„âA¨p‚ ! 8AX«#Äpp‚hÚ'Ì‹R S±R:ÿÿ«ëÿ÷ÿ #â+‚Y­¢?Ð&GPˆúi Œ¾©•…„"‡DsA–aÎ=‹“qŽyÜ29D|!ÿUÿ<¯_¯_^ÎÅÐAhP„bHÒ3B&ˆ6Fb@Ž9ñ… „DìBH09qÑ*ˆA c‘Ž.qÊ†Ž¡#¡+*whÏþK"CLꉓ=„ÈgœD"Ù»1fˆœÿ>db"ñžt#^Nzy¼êȣȆFãù=yˆq‰-“°™ddti¢3…²t#90=uÅ£ C‚#á$‹áLБÑô>‹È$i›I ’„‚LÝÊ ¯G H—…Ý™/X+ÿ0A„Cø3Æm—#f`‚^NBóÁ|ÂG P²Â ÎOÄ&|Á2`Ðaãí¡è…ÈA„AåÈ";>F ‹Á0ƒ)`f\ü0ž„ ó6d!„Ÿ3g!I‚#³3A„ôg½4ŽßE‹4c­2uG+.£ B ÂB"\Aì$R.‚FA¢?Dp£CÑÈ*!‘Ž%Hz#¢:Ò=(r1Яô|hØØ Ó餰Ë9±óŽÃ SaÃÄ«jèØõFÀæÚ;´6ê“xežŒ;F¶oF ƒaÑÇi1£Ûh4FÊ5ºtkm«­è Ûi†MÒ6áèÖ- Ù¤ ºQ²A½±(¸"HŠt]  ˆèL ^ÂÅ ]Â3—á !pEÄE „SåÑA#Æ•åÂHÎHrÇ(p‚ aá"é!¡.’#¦SŠ>¾f½ol0UaÑǸnV4¥ºi+†Õé·zot¯ Ó¼§±OAÖÛG¤ßQ6“¥Ä êî–“,z†ÃÕ?¥i6 $ÑÇa¦õà åB­±M¤é{ºI«zìQaˆˆòCÄWˆŠPåBDpœºË ¸ˆa‘Æ…‘Ј"£ˆƒŽHr c—ƒft®ÕD`Ä(6c¿_¤©ú¾—ßãíîþÓÿ¿JÆ·¯L;Iúêþ´›I{»ëK¯zÕ/Ò¾½ÞßêúÒt›ý%¯q8ˆè ²Tš¢é 6ƒÇ"æ"§(pÒTXAA‘òêBwÑ£¸A3ªjXá0…CF b! ‘!ö2èºH§*t]ÒÿJãý÷ÒzýûúoÕe½x§§û¥ÿûú޽/½kIU¶ëãj¯îžþŸûÿ×ÓâħCc„ލ"ÇR­CFrœ ¬GZ (”8(Lª*è$GHã”9ÇŽ‚1…“ˆ!ÉBT‚$XÆ‚Ç[ˆ´¸ÿö¿è_ÿÿW ý¨û­Ðþõ¥¯[^;þµþÿªMÐöµ÷µ÷ÿúõ}ŒûUÁ9|Ž‚Cc ÃJ“Œ· ‚!A8Ò—@Šˆ¸ †8 Ú8F2:Y 8„º‚„„IŽœÕÊ‚™„ª&‹ÿCÚÿWúÿ°ëþÿÒ¯ÿÿý¯¿Û×þ«ÿ÷Ç®‡ÿWûØWð’;ì2ª &a¨N…ÐD| ¨#tm‘Ò™ây)ˆõ$‡(uC,â“B.XãN…kÿˆZ²ék÷ÿõ‘EÿÿuÿèñãàŸªG«õÛ«.—ü/൫_þ1øAfk£„&µ„qÁá0¨6,ãœpA°Š(„N ND|rè LDh‚ÄP½‘Ã9IŽC@àˆâ¸†y2%ìŽÒŸ%ÐÿÁ?ˆÿô¿ý‡ÿÿÿÿÿÿÿ„Xëê7KÿÿXüðDÇþ¿ÿ]‰3VGôÄâH‹¡×‚-B"’8åÚ èHŽ09'ÒÌä â$‡C™ÄA ¥Â8¢$^ˆ!ÐKÿ/—_ÿÿðn—ýÿ–-þX§°=6”²—¶¿þÝK«øF¿è/ûÿùbÜÈN†•"ùš#â'ˆˆ¤mÂP’Ræc  „DˆÂ)Ân‘C‰ ã“q B†XâB8”8A DÇ#r‡ qJ•JD]ü&?ôÿᆗÿƒwÿ¿ïÿý?ý~öÿ^¿Ö¿t¿Â ÿÿó Òeà‘ãlÚ!ˆJÊ„L¬ˆ¡IœI#Ž>GÎUˆ"¡Pë‘ÄR¡ÒÇ#Hƒ„0ÂB4g‚‡Ž‹¢J¸„#J™:ÿ¥ÿüBß÷8ƒõýõþÿÿßé/¿_þ¿¯P—÷_¿¯ïî!:Rè eÖ%8„”"!¡e(K` @>mBžÄ$û ("$RZ`Œ#F,Z-Æ©2‡N"d¡b‚.°Ä®)Ì8YuÌ×ëáÿè#@X"ž¾¶ÿþ»ö¿ýž^ïÿ£§Å1ÿÞÅ_¯_Òÿÿÿ®d|¹x‰¢@áÐæ˜A„‰Ô,R«#˜B…BDtBØ ‚ Œ%Äö(‘Î!ÐFc¨œwo‹åñôDí‚)ù„ßÝ·_ÿëþÙš<·¯ÿÛ4]ÿ“¬Ñ}eý~»ÛsOºõ.½³Š³ ïn¿³=Í„’Òdt"Ø—GÄ}ˆˆò‡@£†Bqп¬ã‚#¤FðÓ)Ìõ¥q˜rä ãIÊT] ÄyV"GD< ‘ŒDÑíu]\Ïÿ[úþû­m/Ô&¾¿¶—kÿ¶­¯éþÙž×þf.ÿ¯ÿûU÷]/ÛJÕÔÊô',dtJÓ„Ê #4¢8ÖÂB IÞ+ˆ@ªB1Â#¡A&X":GN:aÅqIZDŒBm""GF×ÿm-öÒ_VD(a']nÒµmßWl5Óm-SMé6ÒÛK¶Òl%­¡ò.­v­U†é¦Ò»[´?°ºjÚ8öéSVÂL0¾”¦< …$ˆö‚1—@ª`ŠD‘à‚§¡ „‘µ0ÍA(Aıˆ¥#˜BA¦ÜY–‚A Gئ%:b£A„NAFÃH Ó Ã B#á(á EÅ „Ø…„ † 0ƒ`ÂHÆi±LP ÓbS ˆ“ ˆ½0š Šl%±A„G’ ħ„MŠbS ÅCb¶ 6(1^[îw(AÄ „ÍB¤"/ %HpA$q‚r‡ ¸éE$qÑtC‘ N ‚AœuØÄÑs$è$i‘d"&N/i­ Âÿm¦!T<«†ƒ ˜L Ó@Êã„ ÁÓ8èCÅamPvƒ ªa5L6š}öbškاaW´Âi¦ƒ hDÍÐA 9ˆˆ‚£Xa uw‚P@„ÎL~]ED":pЬ›¨A hI;£Øˆˆ¥fБÿàÁˆˆˆ¦"""8ˆˆˆˆˆˆˆˆˆŽ""""#ˆˆˆˆˆŽ"""""""";‚ "?‰Dt£‚p§WdtÒ¤²‡ƒ°­ ‹l[@¸‰r1ÅDD¡ÊsŽ’@„ȵFBDxA3Wø£áwöv°‚Dqèþ]*ôf8D}{cBÆ,Q‚EÒbB’« ƒ”äØL6GF¥žD|Iú±§ý'úI„V(+Hâ0‹£²‘Δ A°V~)ÐF€°EXT‡! qB-!8ç99ñãRt!a uº˜_ÿÿüc,$îiL)O.‚D"íAÒ© e9æ„"‡<tD DÇ"Xé ¢Á ÇD|-PžG‘’´"„b.GÜGýõõöÂ#¢>tH!(ª.”GH £„‘ô_a## •'Èè$'ŽA/$èD ¥ŽB†‚&úC@±!ÙAšö]9>¹šöÒO°¾â"%Z.‚Dt¤„™è$ÂÂ.Eü$à‚´‚„PàºÄ!„T C„ Š€¡3€^R88¬‘ô†„H„vd°âJ³è*‹—IؠእphS6QT)— ,$áÐ…ØÐ‡ ÄK£œÃ‘GP£DB"Â#áŠ8„GQ"¸T‰Ý‚—V"&Ö](A b7ÿ20ë2RŸÊõ¡A4L›FÑ V^{Hà†i“¢’#à‘A!Ü"o?„—ÁBé c™ÁdpB:#´"{(|^qbq(¸£ŽËÃÇ„xн•a›ÓÅXÂKØÃQ&á㤩q H¹â;#„_ûþâþKÚi¯Ü·ÕFƒ8âÎ8’¨¡Â¡.„ÑF1 ¡‹@ŠP™ç#‰nð’ãš8A(æí$„âWPÚ‚õÿÿñÿ-íñ:e¬ŽçÚB!#‰V©B8ð˜ƒGDèDº8ˆûáCû „£ 0¤\ÄvГÿ×ý'_ñ#ª¼Ã„”9.!Ç8àŽa£h$"AAI ~¬æ„ .g4 Al-Ž8ŽÂ†‚ £ŽwCùšõÿÿ[õüpE%*݆ܤB"D‘Ñ â%Ò†„Ž<">— ¬$ŽPô(q0æt$tj¢­`á¹ pÊõ×þu×(B!‚»AÒÌ<¾"9´!(§Fõ„6"!EÛC.°Š$ª:p‚†GÒ¡PŠ‘ò8Ðþf½r^\‹æ¬îÚy”¦wH‚²vFì¢!Ä*>Œþ‰n¤U”gÑߢUgDhަPi‘$r!–Љt")ЋA!ÄNbœPEyO!9‚8áhÓ.¥ÃAcXEqÔDÔø@„+„‚5¢:}‚vPá‚ÿÂ!ò`Á>fØD.Ló6 dÌÂ3Æ`‚!ò`‚"'È ð¦Ù.޲0aD{0AGœxA„8fÌÙ„A„ ¨”ó0a#á°NË ã6ʳ>EÐ ÐeÌØÍŒ¹›3fƒlÂ4\Â!Ô0ƒOÄP’ š!ÇeüßÊàЬb'áÄZ/£Ž༺Áêè&GAp®"š=‚¤aÇÄE¢úeϵ¦Ðmiºhö5·A¦Œ:0ì+F£åÐ"<±†MPbÜ:8í7£» ÞØç±¸m0ƒGÁèöhö7hÐÝ=ƃmëm0B6=ÓF£[H82ƪö[¬ì¡ÊŠemÂ@ˆé¨Th…×Lk¿P ‡‹´ÈâÅ'¿!¤ôqÿÃ2«{‡Ed3J¶èãÂN“aÑîumˆOƒ¤î‚m&ßi îè ÚV“qOMé}6waœÒ–ú}'Š~3"t›tqáÒmYcÝ Ðpèðø”ý½Ñî‚‚n½‰XÒú–=˜sYp¢:#è"‚G¢:.…2ÇA¢}#xŸÍZTðˆèºÚ¥Â†8A ‘ôñÄv"ߦÖáßNéui\SõÓ}_Å7Þõïê½:WÒzß¿{о·®“ñN“½o´•4ïMÅ:OWìSjû¾êÞ™n¶‚,$JÜ=†GP‚PHiÁ瀄N*ö*Š~¢*P„YCÖŒÚÌ9Ç!8˜O&8_ÿÿWúÛV÷ÿzÒßö®´•+«_U÷ß§ÿÒx®ÿ¾ãïúÿï~®½ÅE¤¢KA†yX„‚B…$%(¤GŤ„$š…¢èºBÂÑÜ ¼E,þvãÿïïÕÐúýk××cýÚkc]¯¿úíkwþ»c÷µZ]5ßÞÝW_^½ë}P¤Ž9C‚aA!.‘Ç(zFôˆéa₆Õ$PÁç°º{%Ž%`G JW*Eº.ˆéÿúǯýn¿ëÿØ~¯}_^Ó_õúáÕ¿4 ¾,?ûÆ¡úÝ~?×ÜUÿfB¨B)Ќ×B„‘ÑtLÒŸF¢B"1j@…Þèm,„DÚÿúÿþ÷ýýg—ÛÿÇ*Oûÿÿy´ÿ£À"ï¾Q¾yçŒázþŒ8K÷ÿoG¿µ'EÖ}Ñ%EÑ„Ü.b")Ñ´ ƒ#áD`‚‹;•(å4冂Dz¡+©/þyz_ç—Öÿ¿ÿÿíÓOoýÙ¢_'^h·JÞý!í¿ÿþþÝ!¦)}!ó ¯Û¯ºÜDBB%I‚BI" èDE-%C„S–>!"Sؤ„O"¸RèÂúþ¥×é~ÙŸš/Ý-6ÿ¿ÿ¢ŠÿÜþëí®ßýÿ÷G­lÏï×ÜÓûûßýW_t¯ÿt»+§Gjh†„ †•¢èÞ8*š‘„S£ º0‚ˆe#GÑÇA´¡œŠ@²:þÝ^Ú­þž“këuúIö¾é?v’~Ú·W¶»a-º´—ä´z·º]í×ÚJö´¿¡K}ÚV•®­úB'-BDâvi‰F¢hŒb1ð‰YÎHxí&¢tŽ#4"Ñõþ4Ó°Œ<'q„L Ãa„‚h4Û q¦v’ &ÚUðÔ&a6!1„ ˆ[n¶¡0ƒ Èy†–ÃV á¥L&a$v”‡£p˜A„ä8ДðƒA„l4¡«h6!z—D¢èÚ< Š· N’4©ðBËø„ˆA¶]Í1#¥@ˆù„0„q+¤L«µ¦Å5a6¾Ø¦*ü1^ùV±[O*/Úa;†¶¶!J ö*8bTCƒÅ5ÛšpEÆÃÿØt×O†*UˆM¦¶Á !JÄBC ¬Ú„Í YuˆE¡‚ .qÂZ„‚%ÄGªE½ ™[T)Ö"]Ž¡ù‡Ia!°Â`¸¢:þ$ ².dfCe:) f0Y¼†F†qœÍ³‘ø†D„s#Dhfâé^é6IŒøzïò`Ì#ŒÛ!™ Ïd| ÅQÉLœ™aÉÏ2°îWMçC(G‘9æ"ŒöGÂ!N#«Íä2(3ƒfÌùœ ˆU¼–Uêm¥ èDŸ6„Hº‚Q·Œ:^ïòÚyÁ ÏGÀˆìñ„"à4x4< Â=‡¨AØA„GÆ „ #àz /Ò¾êÚ5·‚#ò‡è÷° Eà£L!hÎÑàax Àâðƒ@‹à˜A„gxAàšxA Eì Â=´Â'D'’}!£ÄVˆëã¸IÒo„“tÒNéi¾ê±N¾ëpÛA:ÜS}ǤêøÕ¥{_é}=:N•ûëýºNïÅVÝzWVïQN¸„麿{º^×I ò*^Åq¢ÏPìYV¤Rfk™¯í+ÒWoJúÿÒN®ïŠ­úïiÒoÚ_o_ÿÿµ½I=Òx«ú«Jâ½÷ï§Þ›»ÞŸý»KlM14…$ÈñŽ"¡¤oA?ÿI¿Ò﯎»ßý¯Þªßÿ«ëÿ_}-ÿ·®´¿ÿ~éÛët½¤®¯Þ­+úÿ¿ÒßèíS#£è¾N’•ìÃð¨˜ò8A£èº>±ÿúßKë¾-v*ÕÐÿ^íý…úþËŸkö;jßþ­X¯úõýÿªÿ[]ÿùÙR#˜A2<AÙ|$_.Œ# hˆÅU‘Å# b.„Ž#Çÿõíº[¡X<|Wÿ¬W÷ãᅧúø?×ñƒ¯û]{×ïÿÿ`ÿõÛ£Âé‹R& 1¤¹t_+Â(SO¡DCHHÿþÿ ÿƒü/Uáu ZüÑëþnØ?Ø>ÿG_þúà°üzý„ˆù •BA8Aá Œ—EÑ‘tA£*‰KU!)ÙvÂIÌ!Aÿ‹¯^ðÃüoÿÁÿ[ÿýÿÿ ö¾ÿÿaÿ·ëÿÿOõèÏ ?þ›¯sºô N’ 6‚A*$‘ÝLÔˆ‰„EP„µ˃~„ÿÿ–ÿn¥ÕAa¿Ð_þ‚ýÿøÿÿî6¿èÿ¦ÿšµ,³÷ü±>,7ÿËÇÎè‹áBc) ‚! LE•$‚Rœ$¡ ”¾"0ˆü¡Ä…íˆKÿý7~¾X?áÿáö_ºäÿý¾+Pÿðo¯×ÿÿÕô°oõý{D †MÐI$aÐJqÂ@‚‚T B‚' ˆùŒ· KÄ…ÐAò;Aëûé¿ÒÏ Ûúÿúÿÿýe þ¿é÷$Ðoÿû! ÿíÓÿõÖy{úYäÿÎ'Šó·Hâ‚HL&’Ha¥„‚ap‚& ƒ¢( ‚ãŒ":/ÿÁïzÛ~)ÿ·þ¿þ½×0¿Ûõºoÿ¿[õ¿÷[¿ãÿßûÿþ»¿íü.Pá$Ü …$‚BAA0…H%+ $g!)ÎÄ’É@‰CœpÉ8ˆAýÒýÿÉשuù¢ÿ0¿ýKÿýíïû¯_ýf÷Ni¶gÿ‚*¿ï^ßfˆòý&×ìÑ~¥ÿ´}Íå*»y‡Ah ”à‚8á8¨ ’pª $œ¡Á,ŽˆøŒ§°La]Gÿí¥Û¤ÓiÝ6¿j—ÿ}~šû§ii]:륾ŸuÕ¥uûjšM¥®þÙÿuNÒm?÷_ׇÿÚØVµ&„ „ š&ª Jp‚ pd}A Gt‰Cˆ ­;Dxº!T Ž8R‡Š—Dëö´›¯m.Âöá« .ð‡iÝÞípŒ8¥NÑǶª¡Òm$îÕ{¾ú#êI†´Õ†oÒ[­mµ¶Ò¾´aö«°ÂKv…ZÚPÂ0á±°Ò÷qÒA9NA ‚D¡ÄB’$w!‡ Šs(p‚AB(p‚B[—^†ØÑ´"躱AŠb‚ ŠÃX”êŽÂLPM6'xL Ða4Ø•ƒMŠÂ 6*a„‚<&("@`„ ƒƒø"ãØ¦(1A0D<Å ˆðH1Az0œB EÅb6(&lPA„âT`ˆâÁÛAŠk¢ˆì&!°‚p‚çp‚ŽqÄã„AE$0á!)ÂPTJÐJ'!]—0…¦‚ùšÃL Âa4 ΃4 Ä a†B""M†4" ( Áˆa""!§Ë aˆƒC˜B4àÁ4 õÐ0š„M4L¡Ê˜ Âj¬0ƒC0CÚ°JA„JzA&œtAZÐI#‚!I!¤&( A Ç;Á ¤xÊ$C-RAñÔq„DDDDDDGòV‚A H ‘‡!M ‚„B! ‚A(I šP‚(p‚ÂPXI ˆú $’/“qÐ W"Ž3â¡0¿ÿú@‚ˆ„ŠA"‚ ‰Ç&Œè!&ŠH ¨$© ’A'B) ¨ ˜! „Q-Ð…%[X„&µCý/ýȪA#aÂF($c„¥H ‚œ ˜BC …&”á"L!SŽB“T „§!‘ñEº‚4ëÿKÒû ! ‚Š $Hp–L!ÒÐF š $L¡ÒT’I#¸IaéBBˆù7.„5\¡Ä§* Q ¯Kòa%: XA§HB „)bB"SФ"SŠÊ‚B .A”8K 2ºÂÉ Ã„<Bþ:tƒð„ã ‚PA"&œp‚T”ã„”áwA“gH$è ‚Ž‚ H MÎ8O C˜p‹ù‘„­ £ ” ë­ãè1AøEŽ&á"‚!!I( ‚H§J‚DãŠH ‚8áAL!‚‚„BÂeBC¢èŽ„Í!H$‚@ˆè&Byòað‚ „¡)p‚ㄉÇ!8è!8è$‰Ü$A „BB!Â;¤©ªLSBS„ ÄXˆ2c„’ -ŒÂ(t#Ì×öㄪB’B „9Ü „B  ‚‚!Ž Â!HDã„H% ‚H ŽôBS ‚Dâ>WFEÊ„¡Êpˆø#Ž*CÇú „PB‘ÇŽQA ǧ  „ㄤ"B$Ç#$"qÂH$œt¤‚K8┉…Æ"h„’ ù œp‚‚8á) Œ8œp‚6%8A!ŽqËã¤F8A Ç!Ah ˜B!(!8á"’JÚDuêB#\ÍÅ„"w p‚I!8á*qÂTwAa(,îÂA"qÂqHR3„”çDㄤ"qÂ!“£pÜã…ÜYüIþ9e³°Dd­xEw ¤aÐBqÂEA „ šA$L‰Ü „B ‘ÆG ´œp7”ç±Â „"Lp‚‚GDß’óE¸ žq3Y^Ì›qŽÅH×ge$~$â2½#»3·~(ŽS¤w&’‘‡! ‚ŽHÜqA‰‡AŒ:BwKaAÐ „p‚ÎçtŒ8L¡ÂDà ˜´ÄB\Ήšþà{x?ÚG•ïÍ ‚H$©48âL!&8A0‡!ч Çz!œp‚ã„’AGp’ $‚ ‚h$A ê”B!þ•ûïþ‚½ó먉Ç!‚hPJqÂsŽ‘‡!ÄN8j‚ ‚ð‚TãˆA„p‚8á5H,0‡aqÒPEâle¬›Ã*Ð"PÃ6¿õ•Çú3D)uÿù’Rr·ä¡5ô]NáÂŽB’H!P‚”$qÄ ™) ‚Ì8‚ „#A#Ž' „BDã„‚A ‚dw&‚ZHiÒ« ¥Ke^ž\ñü|DV±ü}¤ÒT „R8é „PH!8á*aÎ8„‰Ç‚‡Aœp‚Î8HL9ÇŽHPAœsŽ!Мp‚dvœpA #¢¸4< ‘~#Ó`8Dt?Õ¯×ý¯µ\0‚a Nè!8á)p‚C„ˆ­qÄ$)â!"%8A4A ‚E„"qÅg!KH ¢‚„ÈèDB±ÙïÄYMóñÿÿ2.Ž(3§õú!Ž!„%8°I˜p‚8çD ˜BLq&8A„Ž9‡0á(!£Ž"‘ÇŽ&#Ž( ‚’Ž!… „eÑ6DbqÔB#¨¡#¡þº®½!ÁÙ¡/þ 8éŽqÅqÁÄ ˜BS„’3œr1ÂDã¤qË$Èæ¤9Ç!!CˆœtŒ8 ®óŽ"B!4A Ft@œ:< $r/à‘òt]õ_ì4|ÂUp©á¤"¡"B‘C“% …$”á"w á""B‘àN8H¨(fE$ì!8ç$B!"( LB#å|B‚#ð»GÄcãÌÖF²)8‹j@Œ™²C YFn te: q(ζƒ'h2CË™g,3·²qUjîÛjI³ºJT2È‚D@2`P‚BPæRd|!‚8é ÇA Ç$B"$t„ËA"C´aÒ‚¨îqÔã‰7 8Ab#ާ$"¦v'ÿâ60ƒ7Tla“'ùCÑÇ£ãÕÓØÃ%ôlhÖÁ–vŒ;H65pËØ• p‚a‚dq„"‚ŽB%8Aœp‚8çPBAÂN9R „I¾B!"C ‚A"’1Ó.ˆþx1ý&ÃA„•º8ðÓ 'l$àÌxZm‰VÐN’ÓaÒnVZmÝ¥mëb›Iµw¤ŸIº}YŸ„¯”öšIÝÚ}Ý&ÝÚV¿oÕ°Ä«nn›aKA]D Ú¶Ó¾‡0á,!AŽ9ÇHØq!P‚!ޏA¨‰1Î8”8A ‚ „%9Ç#!‚c ‚mô.## ˆH‘‹úý+½mé\WWó[iŠt­+ŠaÞÿ¥éuzO¿êßzXôúíéZ»­±OOßýi[OëA5~»ÿ IŽ$‡ŽBB„‚IŽB)tœt„§AŒ9Ç"ŽqÐD‡!ÂDî“ÉÇ!QJ‚H!8é$B¨!aº CCý&õ«‡õ·N¿ëýê½}_ÿïÿµÿûzñ_[íþúOV·×_éu}ÿ®•ÿÿá:$'Nå8„‚N8AœtŠ˜qa„ˆÐˆAœp‘Ç“ŒpRœ „PB(%8é Ç!A">Џ3ˆ":?Û×Çÿ÷ñ«ªúÛéÿýñÿÿûz¿þñÿõÜ~ÿ¿ÒÛ_oëJýëkÿµIt±Î8â!"Lt„Š8Ęá$AÄ „DãØâLqI 0á"qAˆå8JÎ:@ɰª/‹C©Ç&á gÔuúïmVýo­ÿV¿þÿ[¯úµõ`ú¿ÿt—Û® ×î+ëõýÚïñÿÂH ™T"B!$AÄãœqAŽqÅF:„ˆÇ!C‰HîqÂIŽ!„ „JsŽBqÂR#ã„'ñK‡õ‘ ÚÚ¦µ×ÕÚúõø¯ÿÿßþÿþëú"ŽêÿõØ7õÿæ¿ÿ¿^ÿB‚(à¿á ’L¼GÂc¤aÌ8AA0„á'$‚œp‚8çŠ8ˆ ‚Dã„„˜âPét¨A¤aÇ;ˆ‚ ñH1A>Å$Œâãzúúýúÿÿ­ÿ¯ì0ÿÿKŠþ¿ö®×ÿ†ÿÿýÿþ·ÿ ‚(p‚ ’Ft… ‚8â§p‚!AQÜã˜sB‘Ç!Ž"aÂIŽqÄR£¹ÇޤB‚!‚‚œ¡ÐTB‘Ç¡†5#È#h¾]Wå§òë¶·ü±OÿÿÿË«ÿÞ¾ÿöÒåÕm/Û¬7ýÿû}¥¯_ÿòc/üN’ABDPBqÂR0á$BA Açp‚8á ‚‚!ŽC(p‚A Ç!œ „N8HN9‡ŽB !!’@áB{m LÐÿm_ëÿÿÿÿÿÿÿÿè¿]ºÿÿ×÷ÿÿ÷ÿúûkô¿ð‚bCㄌ8AAˆA”8A Ç8â0BqÂD¡Ò# „˜é$Ccˆœp‚I' „RŽAh!8âLt”áòl(¬"Ý‚¤Â8™K¥ÿ×¶¿ÿN¿ïÿ×ÿ¥þÿš ßÿÅoM­ÿYÄ ß¥ëû|ÿºÿþ—ž_¡8ç$B)Ž:F „N:H!"¹Ç3„“E„'$' …N:B( ‚0å8²ðB°… AŠdtM• ’+h!0á0Št?Þ?÷¯÷÷ÖµÿÂ(ÿÿà‚·Â)õu£”ÿߨõëßÿ_ÿÏ/óË××Î,0‚¡Â‚DîPé‰;ªR8åŽ"‚!8çŒqŽ"qÎ=‚N9=ÑÇŽqÌ9ⲪŒtÇMˆŸÇù:{4\WÿíÒþhºþýuru߯ë·ÿÿë¹:âµþßt¿¯ÿú_Û¯ÜÑY¢ÿó ÿ†A Ç $B''p‚8ç …„!"&G äp(#ƒ— ‡8á#„“$aÒ8éˆHTã„“(z¢‡AФaÁCµ§ZwKÛ3_ÿ¶­÷ÿÁû«KþûÕúN—_ÚîÚíw÷û¥ô½mïÿ·í«­ªøUoõˆ„ Œ9Üã¤! ‚A Ç0âB‘‡A Ç!G!&9܉Ç8ôqÂB „"ÂŽB! A¤BLp q‚;¢:zñÄî)„3‹m-´“«­;U¶Ò¿´›I{´› [jØ^ÐM…»W@ˆöÚÚL5n­nBÛJéàˆõ÷i[i'Þª&û¤Ÿî•¯i6“¥Û¡V’v¨E$œp‚ŽqÐBqÂDDN9ÇH „N8„ˆ‰Ç8äc¤"¢1Î>) ’0á"–aÂJvGdyÒÆ%Ÿæqåö6˜ í¨A„Ã…°l0’ ÐaŠl$ƒ0œ"<ŽPb‚"¾*M6JAÅCV)†•MƒØ ìT0ì$m ƒ †ÒBˆi¤&ÃH   ´˜ ›ÇL&Ĩ±I±HãÉB( ‚Î8AqÎ9 9⑜ „N8H„ „ãœsч8ärÇ8â"qÄBD㈄ˆˆA4‘N"ˈš…PPŠ—_am;†!{^„ÓN Bi ÁÖ„TÓ œu±A…A„ B„">Ô«š V熻 ({Ó*4§¶!4š!èÄ&Å5½1Ma¦iÚi„ÑVšB) Ç'Hã‚ „*B–w8âqÄPBB'ãŽB#A"$p‚8ä(á$ÇnBLp‚c£ŠA$Ç£Žw—MDQÊvšAÃøˆŽ"""""""#ˆˆˆŽ""""""""<¸ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ ‚ŽB-&) ‚DPXA 7!‚aAœsÑâ' „ …#¤aÂDã‰ÇHIŽBMPA":&ÇB_<§q#үנDp‰qÄ ˜BqØYLjHI,ŽçR0á"qÄ$$ÇŽ'㈘sŽ)‰C˜t„PB‚!&A „Р•ˆgr&ÃPˆêùõ¯û”´²‡!ŽN% ‡AŽBLp¤)sŽ' …B!"B'Dî”á$AÒ!„¡Ì8 Ž8‰CŠ">M«îXöPæñÁˆˆ—_ÎÆ¯ÿNrœz)Ä ˜LŽÂAqÆ„˜â‚ŽB‘cœq8çq ã‰1ÈQÈ7 „PA%‚H“„‰C‰1Ä㤑‡;œtŒ8A8:x Z‹ q¡ÿuú]¬a$"' „t©!„ƒ„„¤¡"B$Ç# „¡Ò ¸Aœs¹!ÄR8á$‡H ˜B!(! 2mLwÑNŽiœ_ô•[KªEB‚,sŽM$%8¤qÂH ã„…Ì©#ƒp„D§HŒp‚ãŠFDã¤aÌ8œt„Lj´ xI{ã@Ã!ðq ‚aYcDc„‰Ü§HÜp‚œ †±ÈAÂDPIp‚$9á)$$ÇHBA!Ñ!ÐJqÃ&ÔGÑ„BC¥AQtB=ö©ÇhCÐH%t‚BPâB(!H „N8A !È7"Ls!"Päc‰ Ç!$8œsŽHD˜éBqÄJ ’ †] J!Ñ1„Ÿþ"*1¤ ‚RAŽ$Ç Ž"'$'p‚Ž"qÄ›œq8á$Çc„“îF8AAˆ“ŒpÑÇ&8­‰Ç,$)QÃ*ψÇ_ôMqœp‚c¥Gq8çPH! `p‚ B"qÂE" ˆœt²œsŽ'N8ˆAœsŽ’T$(Ž…‚# Ž:œJ Š CýЈA 7AŽŽŠ ˜BMÔH$' „Iw$8AÂIŽ)BPåŽqÎ8A q!CˆA C ’6B§¶SË¥«=‰T\uEPA!"Pá"PæN8A ‚ŒsŽaÄDç „›ˆ”8“D „ „¡Ä˜ô,!Ž#IŽ'ã‰1Ò‚8ç18„&ˆdu¤ÿ˜p‘Üî"qÒ  A  ˜B%9 ƒ„q8çD‚BŽ'!8ç!Ž"qÂIŽ $F8¤qÄ ˜B§³AC‰c…b9õòÜU¢3+ˆ,²" …RAŽB‘Ç!GAB8è!!0è$ˆÇ A C„‰HIŽ"S„ˆ”çÎLrLJ!Ž”è!!&‚t„GÉ´$‚¨aáHøÉ6dgu‘2WÊà‘ÚC4”$qÂD š$á""$ çN8A BqÂD¡ÂDã„AÄN98 „ãœt´LŽ!!Ž‚ŽqÅ!&8°„C-Ò—¡A%!d|ê‰*þá°{áÑž” š&ˆ‰ÇH$aÎ9œá"‘á$Ž8A„¤Xá"DJ„ „JîaÂA"""9‡8âqÄ „Jp‚œã…8çCx\*s˜ó´é߯;YšéNÔÔ ‚R&‰9Ç0á#C¤qÄㄈˆAŠBB9ÇŽaÓ&8AÐA GtŽ9äc¤"qÄ›„œtA Ç8æ0‚DîqÎæãÆÈèÂQ¥ÿµþÿû¯„‚A„¤BqÄPA' …#BaÈÇ!!˜9‡ŽB"" „'H8á""*qÒ0é“ „ãœt„ˆ„…#BB( ‚‚D"?&©ш „Ú¥8¾?ã¾?¾„VA, ™#¢9*BŠBqÂDçqŽ"qÎäcœr1ÈÇ „ˆ;Fã „DIŽ0á") Çc ’8á"Cˆ „ã¤n¶ŒÐ!¶ÄZABMÿÕ~‡GR! !³Ž(!‡!G‡!Žw!HJp‚8é C„ˆˆI!&9 8ÐAœq!HBIއHØp‚ÄĘ0˜r¬:4¾Ÿÿ¯¨A!ÒH!‡3¤B"œp‚ á'㊠„㈓N8HˆœsŽF8HŒp‚‚’ŽaÂN9Ç tF!H „PDc„GÜD"‡)Á3LNˆùô?¯ýWÕJA"Cˆa C˜q8ç …„")$Tp‚ „Jqœ „E$C„‰Ç „R!!„ㄈœp‚¡h…%`‚Š§ä¥šå:5¬ªæh”ä/"qüî½H¦F¤ÎïÎù&D¢¥&PÑ1Ì8„‰Ç‡LqHN8ˆ“N8‹B!ÑçqÄH08ˆ‰Ç!"F9Ç!G&ˆ‰Ç‚$8AŠ#庪ÂhÇì ¹0‚dta|¨3ŒÙŸ#c>DæaBù“²ð“”/0Ê'"þ\Èd3ìÛ <à̳6aGa0@Á^0Ë™¶" \›„G™ƒ3ã0)ò* ¸Hs„#²\8g  dÀ§ÌÜK‡<(A“@ÌÂD.›VS¤"PìŽÈò±8á"D„R Í „˜â' „BBHq&åED „DãÄ „BIŽ"Lq&8ƒ ˆ„¦8ävÒHîÓÝÏç¾oMÅè4|hù†nÖÂ5¶Â ÆmÂpé„‹ÙIŒ6štaØF‡áÓ7ðl ƒ ÕMko ŵ„l{Ú=´kxAº5´kaÚ5Ç œÏ–'ã‰1ÄD˜âqÄN9‡# „PB‰Cˆ‰1ÂN9ÇA ‡&Gd|¸B8e‘ò8BàÚGGÑáÓÚA¥J,5UðáÑâ $­'c…aÑǤú=µo}Òm&ÞVh:M«|'`ÎiKm¤Ëèã´Û‚ Óîm.û†¼§i6Ða$ØpÁ$ÓA­÷IÒl:8ò£PÚ Òm+wi'¡ÂDãçp‚‚c¤%8AœsŽ$Ç8ä(âSœq(s8AqÎ8AAˆ‰C˜q&ì!8âLsŽF8A BS„ŒC*ÏÃHO !.¾ñA¾’}é[t½â»÷¦êêîÕÒ´¯Kïq[K¯âµø¦+~¯]oêö·é;ý[¦ÿûU«Iý„‚J „KsŽ'tŒ8A „ „IF8A¤‚C¤'˜á"L!"'R q(sB‰nB'IqÈÇ)ÐBqÑt+‰uÍœÂÃÿ[­^ýÅa}÷\1ïÿÿñëÿ¯á]I ´‡ß]|l~«ëÕƒ¤qé0ùÇ;ªH$ˆÑ 9ÇI#ŽaÄD˜è ‚8âqÐBqÅ!HDDI¹Ç#ƒ „A$QÒˆœt[‹` ô "‡<Æ!DL!õ¿ÛLkúÚüéÞ¿¾ð_¯¯öÿÛîû`ü/ÿ¿…QµÇø4S„B „""(!&8¤MH$'ãËãŠA!$ÇH „§!c„ˆAÎè!8á$ÜB „"qÄã˜p‚ŽqÄ „1Ì!¤xѼóhâÿi!Á×ì?aüqû *?½ Em*Ïÿÿöÿõ¦ ¶¼à¼ì0^Î9‡HƒŽ$Ç# ™aˆœp‚ ㈒E"ÇH „PA!!&8äp‚‡0á9ܧ#㈎L!c†!#h †”- )¸ãþû.·þß„h†Ëк¸aɆN¢Ýÿáþ_ÿ~û×õ,O¶Ý]ÿ–7ü"ãËþÚ …!8çJN:F$9ÇŽB§Ä‰1Å„*qÄNäqŽ'"ŽCœsaÄDE' „N9Ç!ƒŽqÈÇJ[‰!4ÂꋨAò:„GFhH"œ_ö´ ßàß„ƒUàíU¶’ m, ¿ÿÿÿýµ¯ýÿýh/¯èÔhãœp‚(q8á"qÄãœq(t’AˆH㑎( ‚ g8á$‡8øŠ $98¤&R!’!8â"qÂBHp‚dp/8é$Hêð‚œ1º‚±ÿý`ÿàߥƒÿø7¾ßìR\V¿ÿÿƒÿÿþ ê—_ëéoþæˆA)YNAœp‰Ç‚DDN8„’#„CDîB!)DN9‡‡!I$„˜ã’ØsŽXâ%aÄãœqÎç±ÂRŽ8¢:ÌÓ¸\ÚjÙtE×ÿuΩ¿ò|?ªŸO×ùßöÿGpK£@-/Û^¾Ôòo<¯ýº¿<‹áÛ¥UÕßô¿½pA[q  N8„ ’# „I¹çŒq)ÄN8Aœr8 „ã„“ÉC‰D§HDDGHD$Pé„N8Ž$Ç!!8á5V„ò A F2>m ÿÿo‚)ÿßú·÷Ûmÿé iå×ÿÿÛÿ[|oÝüu˜VßõëÝæ‹ï½$‚ ‚IŽ’FDIŽ' „N8 ˆQÂE!8â""qÎ8ˆ‰Ç!G8äcƒ‘ŽB"&h㑎!$ÇSŽF8A‡¨ B~# ‚° ¡Á.qÂÿMšwûiw_àŠwW¹¢sOí¬Ñf‹oýTºü/ÿÿ¯OëéVh¾¯kU}rtþº—Ng¶g¶­¯]tÐ‰Ç $A Ç `sŽF:„‰Ç!&éŽB§BD æ„ „HîAŽB)ˆA„„DN8AœsèD¾;3Á:Q!£ª'_ýí--t¿ü&¶ºM«ikjÚ¶¿ü6Ðä]|~Ú÷ú8û[JýéÛ__ô5ÑǰÂÚ_¡¶“¤éhãín°„ã„“%¤B,ŽsŽˆAˆœp‚A“D¡ÎâBBùÇ!œqŽB8AœsŽXçȓㄈˆ"øŠ“Ž ,GëkA´¯Œ7…†’jèÊ´­&°ÂI í(i0ÂK &˜NC‹ÑÇÈ$Á¶ÞaØFpôÓAÚÆ”l"é ƒa®Ã &ÅC vŽé;Xm¤ÚI¦ØFà 0Òa‚Ll .‚R0â( ‚8çI"‘‡8æÉÇ!!H$C`âLt„ãœq8æŒq(â'ò87N8HBI Ç8ä3Ž"AÇ8äc¤B‚¾[£ªޏ$á8™NU”`¥Äü ÂiñPˆâ´Å pDvM¸"â£À¦!1I¬q†)Š4¦­°mÅ5ìW§{¹N6¸¨lU1I¼q»[lS„ ŠiŠb˜¦·År‡!‚‚a Ç8â!"„’„¡Ì8’„îœqŽBC@â“ã‰Ç!GÂD¡ÐB)p‚c£ŠœqŽqÄã„©E¾°T¡Gä˜b8T’ˆˆƒA„L!bˆaƒ!„ Áˆa0B"# 0ƒX†ˆˆâ" !È0°`„0N !aaPa4!„Ê 0„XMa0„0„CㄈLJ0郤B$Ç!!HDhîB$Ç8â'…H â"‘âB’A$Ç‚‡0á"$Ç8á4L,(Cw„³õ„ ²:øˆˆˆˆˆˆŠ5"!ŒTDq …$Œ8A Ç8çt’!HR!ÄN:Dc‰1Îâ‚Î9á!&8’N8A 1ÒŽB‘‡ ÑŽ"¤F8ˆ!''XEððâ"?'H;ð’TB!"! ‚)ÂDBIŽ"A8âL!&8]ÂIŽB'Dt„RŽBLq&9 8AA 1Æ[‡„ Šp‚µ '¯ÿúA$B"‚Ž8£œq&8œq8âB' „N8ÌŒq(r1ÄDIŽ' „N:BqÂR0â‘Ç#ã´‚ˆ"Ò Hé%ó‹1ÿýp…„'ãÂF …"DDˆ8Aœt„ã„‘(rrq!&9 98„‰Ç&98”8¤"'sŽªEP]…ÈýQ!~Ò´bBÁ9Ç ‚’0âLq&8’„DD „˜ä(â'ÉÇ8çsŽF8¤BB"B!"nj’A(#Ã#ô“b'К×à $à *h¡Îæ&ˆA0„BBLq"A sŽF8HŒp‚c„`r9ø’IŽBމ1ÈfŽ"'N9Ü „˜á9"1ÈAÈÇÄIô‰ÒIÂoèÂ>„~ `B¡ AA 1ÅN:Øp‚cˆAœp‚(q‚ ㈄„‘c„“I¹9ÇÎ8ˆ‰Ç!"BLq‡0â8äc·Á9N‚BÒ…<¾#Š „㈊BŠDœãˆˆHŒsŽ"'BIŽA¸â'DD „N91È.8A0„ „E!A‚#Åu”C_ˆà‚ˆ#ê’Uþ"$Ç#Äœp‚A ÇŽB'I¹Ç„“ÑŽqÄ ‡0áÂäc‰Ç&9c£ˆ‹.”†E BqÒˆãýrqHp‚&ä âqĘ䇇#˜qŽqĘäN8ˆAœsŽ"$Ç „N8Aˆ“p‚cÊéHÂt›=ˆœÑ‡Ð#rEñ*kú; ˆÇ A0„› ˆÇ!!(qÄR! ƒ£„ˆœtˆAÄDNç„…Œq‰8AqÐB$‡ ®ZŒi ˆÒA‰Ç $ZSyto6²ê>BqÂD˜æÄP@¢qÇ8㓱ÂE9ÑÈÇ8åŽAÇ!Ž‘ÇˆÇ&8`r1Î8‰1ÄBE"$‡8á$ˆ˜BN’)Ò@Ž:DaÐHDDg[‹YØÄ_&êrŽB$‡„s¸ˆAˆˆA0A£Ž' „DD㈉Ç8â$Ç8âAÄ …"1Î8œsF:FØsqÒ8âqÄã¼Íb&ÐAP›dU_22 A˜Ì";2#[È·d`É$BÈ—p‚h „IŽœsŽ$‡!#tDcˆœsŽBLp‚$9â"qÄN8AœsŽ”8A2;B)ŠGÃÀá"Hr!erÜߊfÑb¦8N#ëчhØ5°ÿ‡{aèhùÇ;˜qŽaĘâ!)„$‘âqÄBDƒƒ‰p‚0á)±(s‚c´aÎ9qŽG©Ä‘ОB:N/±@³4GD„u_­ßÕß~­„D$qÈAËB“H â"Pä â!)n>B8‰ –9‡!!Ž"….… ‚ŽqÅ‚„1R:”b"•M‰C‘Ž'î$‡ Ö8œp‚!Aƒn8ˆ‰Ç;ˆ‰1ÂD‡ŽBLq! rDã±>’Œ!AGµ!‚(Ba ´+ÿúZˆãþ.?¤Dc£ˆAŽqØBqÎâqÄDDD› qcˆA ˆ–ä äc£ˆ”:Dœ „˜á!(q!HZ •hÞ"m ‘Бó 1Ñœ&àQ¯ß†’TþÖ…çIBLq8áÂHN98ÌIŽ!#sŽaÅgH „¡ÂIŽB"‘‡)Å ‚c‘ŽŠå(B_ÆŒ$„HòDt] ˆê"œ%8‡õ¨ÿþkØs1“—ú‚8â'D˜á"qÎ8œq&8A 1È8á"$ÇŽLŽa‰îB(!!&ˆÇH …A´qSŽ!#ŽbÊœT‘ ˜&Òal#xš"}WW÷”ü4; 6‚á!%F8œsŽœp„„‰Ç âqÎ8’Œq"'ã‰Ç!"‚ÄN8A Ç!!˜8H„DDãºHM¢øÂ/ˆ"Ž2Lv?þµõúh6éx[YÝ%8âÑá!"Lp‚‡0â‘8œt„ã¤aÄHf"qÂDã‰Ç‡ á""qÎésŽ$ÇŽq˃Ž,sÈ$: ‚!/°Dt¡¢è¡PEÒ 91Ƀ tgHÿ”ù;#¢Äf¼û šó«5äYL‰£Fs:³ÑHFˆœóq£>}Y"=Ïj¯Ê†Jco9’Í¢,d7 ffD‘ª4AHfC#ÆpÌÈŠ …BMħ!ŽA¤'î!&8AŠG ‚@âLq$8A A"ˆ‰ÇŽB"Pá,®(ˆùü ±.’hº#¡HA)´²¢"ª"”âÂŽH…rvO á¢ØAØL¸ÍŒƒ`Ó3Æ0AªGA F îN!"qÌ9Ç,qÅ ‚8æ ‚‘!Ì8A‘ Üq A„œq äc„ˆœqHîHy\ c¦'HÚÏ‘.eÔ!Q†ü Ÿ—Sÿÿþ¥×ÿ—\7.¿û¯ÿὟÿoþ]ÿ' éI‡ü7òÆ5ÿÿ  ‚ äœã˜s!!8A Î8A©ÇHN8A D‡ŽœsŽ‘äŽ$Ç!G qËH4ŽF8œq!"'DãÈAÄE)\Gú.ƒ*ÑäB£B4§TD|ð‚útµÿþÿÿòý#ËûKÿò÷ÿûâ¿ëýƒZÞ ÿÖ¿¾6±£‚„˜éaÂŽ"qÄãœq‚H±Î;E!8â)ˆA„‰n$Çcˆ“N9ÜŒ¯Zˆ¡…!!…DèDPCò­ý/âuý~ÿ‡ÿÉJ ¾—üBÿüÚ~¿þ½÷ûÿK¤{wºÍ7þ­û×ç°è ™3‘ÂЄJ"B$‡8ésŽXøAœr98ˆ“„rsŽ"AsŽ' „ˆ8‰#DD‚!ˆˆE§t¢h³‰„]Y´fÿ¿ÿhÎûþù>ùåïÛþ¿£‹ÿþßïõÿÿÒÿTÎméwþþñÅv¿í ’FÑŽB‚ŽB)äc„“qT„D šŽw#Dr9Ç Ð9ã˜p‚I ‚ƒ„‰p‚ Šõ"B>¡h$]EõH^ÅK«Rê¯Ûçª]`ŠŠBÃÿý¿ÿþÿÉÖ—ú¶—ÿ~“Ößßÿý¥þ§o®í×­¿Û^õfkN÷¤ã„¤PäÇ‚8á ‚A: „ˆ9'!HãÈ8‰Ç!&9!È`q(r1Ç `tŒ8ˆˆ“IŽaÄH8á$3‚GÄ$] áeЊADHè ¬ij%ûÿÿóEþé~êÙŸÞÚ^æ~H¯mu_ÿÿïÓ»õëëlÏÿÿ^뤳E®ßþæ~ÿºÜ¡ý„B#bLq‡£Ž$s!МqAh!¢8Hƒ¸‹#¹Ç&GÈá‰ã sF9㈩ㄈˆÊâˆ#ºÒ¡ $h…±E:ý¥®ê¶­¬?ïþöÒ[õ½´•m&ÒT–þEi/ªéiëº8ôÓK}µû´¿CuÔ+a];Ö^Ú]+i0Òp¼5ˆ ˆÇcˆAœt„ã„%ˆˆÒ㑎(!&8‰‡!HIŽ$t„ã‰C¤CXr;+º0‚P‚Bc>Å(G‘tˆ²BÞÅ„aÅ1L0”‡ª„Àm a0› +@á¥a6( wi0Á$ã „A²Aa˜AÂ#´°ƒBÃ6Ò‡i„“Óa„‚h4áô‚ &ħPÒAÆÅZ;†аA„á‚M8 m¤ÇÒBqÂN8˜sŽBLŽÂÄ „‚BŽBB! ‚ŽqÄá$ÇC‰1ăŽB‰c˜rr ˆ.‹¡´´T2èÂ(Dt"<)óéBmå@ªMˆNÓëPÅ/†'‹ ž»kjU¦+®°Ä&¨M1Yäc­ØªMA1A± ÿ {O*{1TíO¼1]Xb˜AªžHq&‰Ç‚‡&GdpU#‚ ‚&8ÌDIŽ$Ç8ç#$Ç ï²:¬BB#‰;¤AnaZHð²ëâ Јˆ0Mâ"" Áˆˆˆˆ¸ˆˆˆŽ"""8ˆˆˆˆˆˆˆâ"""""""" ÁˆˆˆŠ‚eÆGÂ8郑ŽB:BqÎäq‚ ƒ„“ã‰1ÄãqĆ`âAÈ7Dâ) ‰ÁÂX؉ƒÏb§( DtˆÆãB?ÄB.o#ø±Ž"c‰ÇŽ"Pá#ŽF8`p‚aAœqc‰Ç!!GCƒ„ˆˆœr8`t¢fŒh¼޲èÚÅYX¨Dt¡"y}õ¤þ 1Ù‘Á„aÂBJq$:N8AAÂsŽ'!„‚#,ŒsŽA p‚8â,ï‘ôv¥ê1AÑ<¢èE ‚‚hFœFyÒs–—üã„#¸A t„H08ˆ‰Ç!Žˆ„‚HhR8âC@ä(âqÂDâ$‡ 䇤"]ŠB)ˆùä-„ÿê•¡8ã„„ã„ „ãÄR0âA!;‰Ç Üq$8AAˆAœrrp‚KB¹! 쎭"눺aWØizM¥ð‚Ž:œq8æD˜äcœr1ÄH09#Ž‚&8qÎ8ˆ‰r œ|D „C#T)t&¬pHÚ!!0“r“rŸl%„…ƒ°Ôã˜r ˆ „$$Ç @âL!H„D›ˆœp‚ ' ˜B@¬r9q8çD „Hvt8•hÇ B (D „Q!ҜˤÁˆL`ĪA$,ŽÈàáŽ$Ý#ŽF8çq&8‰1 „'… „ „DãqÈ7†&8”9ㄉܡĆhä âÉ¢'Í¢èrèæA’† ±Â øˆ¸ A 1ð‚ âqÄIŽ"qÂFPBA°sŽB"-ˆ:X‰C q$8“…$HtœDHjSµ¤NB"0‡B,è„ÚH޶Rå_¤œtŒ9Ç$8œp‚‚‚8çr £ˆœp‚cˆ‰ ˆˆq ã¤wb¿ˆ›Ë E<ÍX‰¢ qe:„XCý‰Ç $&‰98“ ‚cˆqÂIŽ"A°r8A0„ãœr1Ì8qÈ"PêD#ª¡$$…,$8ÿ°‚D˜çiF8“I"AÇ8á$E#ŽF9 9ãmD㈤'Dƒ‹ (ŒMô4$B6‚ˆˆžY!ïBHqƒ„ˆˆ“R!”9Çq(sB""AqĆÄD „Šä ä Ç8âƒGiÌ9WQ8‹ù¶a$)|®B;B#çj±dÂ,´J‚D‡!&9ǺD ä2‡œîB")t„ˆ8œr £‰ ƒˆˆŠAЗÕŽh!š Œ ç:5âHI_D·ƒ%È•]JÁ3±†wìì0nd›$ÐA¤'$(!&8“…$“ „˜á"qÂB$AÒ8âHsŽA r ÇŽ@ðVî;Æ¥ ‚ÄRQH÷‘ÑÄGÂK¤‡ààáç‡|)Á‘õÓ Œp‚8çDN8Aˆœq Ø8œq9Ç#DG!°s"$Ü@â!2PŽÕ@‹¬h „DÚŠ$´‚BÕˆÿßw÷Úvl;A8A4aÈQÈAØBLrqHÃn8lD˜æE#ŽCHrB98\t„284„$Ç ãhX¤f‹ ‚2:ÄH¦A‰t_.„PBÿÿØ_µ¾ÖK! “Dî!" Ú8“ã¤B"qÒc¤$Ç!¤8œr Ç‚8ç†qÂIŽÍ¢PHA„¨„äèDh†„æGFkÿøïŽûê(N8A Œp‘‡cˆ”çN9‡ @âLq&98“DÈœq Ø8œq£‰C˜p‚ Àä â"B'b""a ´Ã8‘PQ8‰ìqÿÿ¯ýú&âA28ÑÇA Ç 1ÈÇ ! F8“Dƒœté „H „˜âHrr Ç$<¢$¢èì|‚BF8Dé,Ú:áÊ™\TÄL“¨ÿÿû{û A28ÂA ÇŽÂ0á' „J!8çŒr ÇŽHîC(qHDJr ä áÈàЈ„‰p‚ŽIÎ8±–‚Fð˜P„#h(ˆˆˆŠA"q¯ÿëÿþ©Jp‚8âqÄ „E,D㈔á)p‚ âqÂDhD‚$4"$DIqÈÇ!!Ž:%*! E AD_! ‚H„jTcÅÿÿç—ž^¤§@ÂŽ0á#ŽF9ÇAˆ’IŽ"BDÄIŽATq$9ÇI$rr1Äá"qÂ#æÐ„EÒ(2‡ADt’Dt!R=„™MÅü™>K³^l"0æ´_42„{4yVFŒäC?'2qsÄhdƒÉs7d2C ARŽÒ¢!ñ#á%ÑšÉD]ôñ¿ß¥Å?µïúÛý%¯ÿÓþýv?ÕýéúW¿ÿ.ýZ]5¿ü»ý¯ÕzŠ&ÐA „ã˜q"&ã‰Ç Çc˜sAÇnqÄã„ „Dã‰n8ˆ„ˆA‰¤B) 1ÈQÄYØÖ]‰R- p°©(•TBQˆ„ˆÿúþÕ×ýqë_ñOý_û¿ÕÖ `ÿÿõƵþ­ýÿïƒú÷þ‡¯B'!!Ž(q(r1ÂPBqÄãœp‚ˆÇ!Ž'ÑŽB"CPqH„H8â%B'DDRŽˆB†Ža‹‹# @³ 4Äæ"}} ß êýn¼ÿŒ.¨_þƒ Ãÿ{öÿÿ¶ïþ¾=‡ÿç×þ‡ t„˜â „$"qÄ ˜B8©Ç;ˆˆ“$qÈ(äcƒ£‰C‰1Ò‡ âBPâ5;#4¦ã„]ü¡ì‘døŠŽŽ!2#üzQÓú;µþ°Œÿ¯Á1ÿ_øF{`‹{o¥ûëÿöþ—žÿªaÿ~¿ð„%aÂIŽ)gJîLŽ)&G‹„FãÀätYÇ#JDI"C0r1ÅIŽ“Tメ;ó<‚ˆœâ"g(p‚s0ˆèÚ4g‰äR’_“Nù«Úÿ_øA}ÿ.°¹o—§þjÿáá°‚Á¿Kë­ÿÿoÇþjá¿ü~^Ÿñ”: ’!Î:GsB""LqÎ8“DPB9Ç#$qÈÇ!!$8‰ n8ˆ‰Ç ƒƒ‰Çmš”:nšvDúDtÖq }¯÷¦é××Â_ßÒ]7ëÿûégV‚Á½´¿öëïúý´¿ÿ#ÿõ_à‚b¨HE ‚8æ¤HŒq V8H„ „R㈜rq #‘Ž"AÈÇ&8A 1ÒHã´Ò@‘!ê!bHrX!]ŠB9t;+u~é}úÞô÷×ïú^Û¿ýÿ¨K<ŸÈ4ŠûÿÍ ßñ ×üŸ ÿÿwû¡)ÂPB[ ”㈃œt„DH08‰Ç8âqÄ …„"Hq&8œt³ŽBAÇ8â'E Ô&.B‹¥n$º$YTB'2:ÌŒÿõcŠú}ýµÿÿßÿ¥·^ïÂßÿ]}¿áV­ÿû×ë»ç•|ã „ã„B"L!‡0æÜr1Ä㈉1Ò0âqÄDB „"qÄDa Ž: Að„ „Dî´,«„„¨—J?ooc§m/ëëüj]m¶ÿÿýx"Ÿù…Uý1·ß·_ý}}öÿÿ٢Ϳfi9Çcœq8ç†qÂD㈈A F"rÇ!I ‚n‘ „8¤$4;J‚‚)Ä‚”+6…!,6'“™£%•üÑy§×_ëj]{®Ú꿚+_[3_¶–šßª]wý­gÿm-oþõý³ÿ{×뺶·ÞþAMp‚ ㄈ‘’Ž!Ñ8ˆœq†ÁÒ$9‡œà°9Ý ¨¤AqÊqGP‚‚d_R`±¶¦Ò÷Þ“mt=6ÓÛKCØm…t'Ûa~Ðít8ur‡NÚêôÚZ^²0ª§î½¤Ú^ª¶“i:Z°ÂPHB4"qÎâ'îIÎ8„„IŽB%$Ç n8ˆ”:BqÄH Ür1Â^v­ ¢\ÀA ‘õ ; q:!<†š/°Ò¦H ê¶ÒA¶Žá¶žiÚ;°œ0­„gA4iZh4à ƒ „ &%:†‚bSàˆðP›a>» lB4jÚPÒL ÓåL Ðl0@í+Pƒ ‚lqQ„ ÆBqÒ0áÈùÒ”9‡ C „ãÂG…„)Ž"„’ãœrÃ(ƒ@âDŒp‚b ‚¬1ÒÆB ‚b"f…!ûìT7Úb“b¸„׆+ئ›ØAŠïØ„ý1 ¦ „Õ!0DtØ0Dt5AŠ ÓÓ˜©V¿aÈ ë|1 e@ Å}a„kvÊq ‚k±‚E!8á#IŽB"$Ç!G8ä2¬p‚c¤aÄt‚H)Ž'㑎aÈÇ8ãÎ9õPáa# †A EŽVGD•D| „º#£â.²¸ïàÁ2„¢ Á0„DDDDDDDDDDDDDDDE GqÄDDDD0B" ÁˆˆH#¸A¤’ŒqsBB'q“r1Î8ˆœr‚°á9ÇHRR ƒˆŠB"B"qÅŸ\B# ˆÇIŽ7‚ Ä ¢s'D,rê ¤¡ˆ7ñE¨"é  ‘C¤"qÂR!ŽB‚8äc AÂcŽ$AÈÇ8âAÈ8ä â"!$Çc‘ŽAÇ8ç$ ˆN1A2cˆâ"q ‚‰! Ì „DZÿWé'„°­IÂD㣄‰Ç0á"qÂD˜âqÄN8Î8œsŽ!"qÈDãœqŽ$AÈ6ŽBŽB"$‡!"(Â#È4B@¸ô¡xŽ$vA¢¦¾v7­y};tA%: „$F8A„¤B‘‡$8œq tœq BqÄ¡È4$‡ Àâ"$Ç ƒ‰rÇ!tB$‡,s¹N!5XÑ#8¡­J‚¾kBvd¯§V•éZ¨I ’ÐA"qÎ:H!‚8á$Ç8é”8AA„#…#²8#ŒÃaHá–GÁ ŽÄ|ÂÃ.B'îaçij(TQð‹¢9‘Å=¥›C‚"a8ÿÕÒõu¤‚#$Hãâ"' „˜é‰Ç„¡Ò!&9ÃâLsŽEãˆA‰!ÈÇ! r Ç Ð9N98ˆœq8â")xT‚1ʈA!Ø#¸‰P2:¡4ˆiA!³è¾CˆÿH2CªÒ`Á 1Ž‚B ‘Ã.qÄJsŽF:F ‡8âqÂE"1ÄDBRH ˜B$3GŽBA°q Àâ"B‘8ˆAÄ£‚Z"%¼"‡Dq ›Ò!C7ŸB}}Š,¡v bQ‡!FŽá"w(rÇ!œq‚i„"‘‡œ „Š9 9âLq8äq! q!˜çŒqc‰AÈ8äc„‚#çÑØhަ¼xEÁ1È#ø„('>’Šr‡ BLÄqMp ‚FÄJŒp‚cˆA TaÎ8ˆ”: „˜âHp‚œR8åŽA¸ä â$N99 9ÇA\q `sŽaÄDRb"‚G±Ù¤‡ ɽ–8F2t]hqAIˆ†Œ!èÂþA„EŽqÂh$qÄÉNB)Ì9ÇHDDƒˆHR!‡0ç%„“ã‰1ăPâLqHDH ä éŽB"CPq]#Õ›PÐjBEt(#is˜HÚ8„òH!@‹¤“#HGý‘Ñ AÂ!!A !ÄBDJrr1Î8“JÉ1ÄDR‚!C‰9 ã‰1ăœp‚Üãn8ˆœq£œq8è$v] @“aG(rÇ 7”ì/ LtšEÕHºLTr>$jYšþìPH%8éŽ!#$Ç!c„„’#DIŽ'ãá)q&9DDDãœq $Ç0âC@ä â'JŒp‚ÁP’°‚^Fû¤<`¡„ãeÁ$GÞË¡ÇúHÄH$‚N8“㈔9á"""qÂIŽA¸âB“#ºIqŽA¸ì! ÀâLqƒˆ’ŒsŽB'DãÂhI"ŽšJ‚„•‰tkB!³ „L…WÊ®WKDb2[ÈùÐöD†VˆÚ8‹¢.ŽÂÈÚ2DVåAÒA ‚ ™‘ð…#aÄ „IBC8á"qĘä(âLqŽqÈÇ‚dp¡„`q Ø9Î>ALj8ˆA’㑎$‡!&8ÆBE"‚”=aBa šÄDšcðƒ%dw¡¨ìrAñFé‘#Â.| EëBÓ·jlÊ™0ØU…0¤“°…$‡&ˆHE ‚cˆ”çIŽaÂR0â‘á$ÇC„ˆ¤‘cœp‘‡8æŒsŽ"AÄ ˜BqÒ8äc‰Ç Üq BaÈ8ŠBHq&8A´MÂD"èzH% "SBkÉÑì(Ã':HÉQ}Øw°ø8pøoA41‡°‚ n/a‚i7b‚‚Ž‚$á"qÄãœt¥œq‚Cˆˆ„‰Ç!Î9 9Ç!–8SD$B'BH08‘8äc„ˆ“$BXâ"$|¡ÐXY'@†"‘‡‹¡8‚Ði2ð#\AܾénùO“/}'A;è&ÝÚÐ`šl ‘'!&8HDBRHŒp‚)Î9ãˆÐ9á,¸‰Ç0â' „†˜äc„ˆœp‚c‰!Î9‡Ž$‡! 'IŽ!ÈàÚ_X C‚I{¡ÏaBÇ5F¤0„xI(_ÿµí¾v)ÒM«íS¿¿^SóŽ‚,tœpœrsŽˆ‰7!A c£ q8â'ïD‡c‰!RsŽF8”âLq&ä á"!"AÇ8è!8ûŠ<…lQYJ›H#ºQ#¢êPô"‡A:ÿî>?»ÿº^*ÿúBû&œp‚(p‚dq¤’0çŒtét„˜éŽBLq(q&:B%"AĈ9 QÈe$ "'$ ˆÇ!9ÜâB'î'ghN—Fh8#Ž@„R#ùt*¨#èC—Eð®(b'—Ô}úûKß_÷ÒðŠ ŠB't‚sŽ"qÄDIŽF9Ç#!„ã‰Ç8â'H09ãŠD3GH „˜ä(çDN:„BDD¡ÄDIŽ—Ñ!á!)(ˆHŽ‚ ‚0„S AX­)tGPBfŒ‹ÿÿªýn¿Oÿÿa5A"1ÂDDBDç „˜ä(âB'R$8‰qÎ8A2;#äxŽ28ÈùHàÖˆ’Dã˜r"Lq8çrq `q&ä6"LvL«"sQ6ˆð@„aQŽbtÐ*ÄPP‚ ÔŽ!þºþ–ºÿ¯ùäúZ °‚BS„‰Ç;’…IŽ"qÎ8œtˆÇ!Hã‰7!!‰8A„¤!!"HqŽaÈAÈQĘâ'㑎$‡8â(#'㣈“ã¤4âgH!؈Óˆ‰ŒŽ‚ˆ¬ ¿ò”—$‰sº¬´‰ 'Èž(É_tŸ ×䔋ý"¨µ‚B‚ŽB‚H „¡Ì8”9cˆœt„㈜sŽBŽB$Ç8â(!8â'N8HIŽA¸äc˜q8çp‚!$8AœqqÄDH äsaÚUB]󦑩œ@b]GÑÍ‹HçDBò@ˆMH앒ɸ†flähy¸†Da„ ºD/¢pf Ù›`‚ƒ0Â!r`É)Æ\SgÌÛÁÐ d ÌÌ ˆí0A Èú!IèOÃ(ÌÍ™¶`ÌæP3C0ñͰA™™·š e׎‘ÐÌ™‚aåÌ"c‰1ÂGqŒ8œq–LŽÈàá 1ÄNçB ‘ÅD æp‚c„‰1ÈÇ ˆˆœrt„N8‘#ã™Î8A0„˜ä#ƒn8’ãŠC‚° ABG‚F0ätÂ;eF’.‚„c N-MëÂaP˜F‡„4£Øè#cßm ¦úhøè0§£YCÆVGÆöcF¶ËèÖý±úza0è:Âa§£@sØõÒtô{iè6Ž‚0çp Ž9c¤!"B–$AÂN8A‰NqÆÊq&8 ’ @âAÎâ"qÄJãqC‰C‘ŽBŽB'EA4(! Àâ"qÄ›ØIÂHá)Ôna$IP Áâ:3QÒlÒi¦J‡M‡”=&ôhh'“†c«àƒ‡G1(tGºV¨IXtqúN¯«nŠzL±é6“¾©7Ä«îxt{sÃÜ:=¾'†•†ÑÇzM¤úûʶ&%‰âCI‘Ç H „˜âAÅ ‚ â!$ˆ; „0Œ8œp‚‰F8AÌ8JŽä â‘ÃqÄ‚"qÒ8á"HqŽA¸âAÂIŽ,îÑt’GÑp‚VW ÓLtm ‹=„ÊvémB# ‚ˤ)Ťû»Pœ$î–“q [÷Ó~vÚ»\Sjût¯¥Ý{éúém%úMð­oÒ¸¦­Åk íúô½ãÂpÛ×j{A „ã„“sŽF8H …"1ħ8â'ã ‡HŒp‚!Ž) “IŽ$Ç Ð9ã‰CÀá$Ç;ƒ¤"!$Ç Ö8A`q&8¤qì(ŒEDò‚I‘ÐŽ4 ±H(aj”î¨ûû^û×K§§÷ÿKô±ë«þ¯¯]x¯q¯ûþþ:û¾Ÿï¸ëI½ïÿÜF"q8è!8á4qÂBqÂPBHqŽ$Ç"ŽB"'IBLsŽBB$ÇCœr1ÄÄ „N8ˆ‰Ç8âLp‚cˆ`rq ÀâMÈAÂIŽBHp‚8àˆúÈ`~"(¡Ê(?'T%/b-!s5ô¿Z­.)û]oÿ½.¿û]¿Vãj·qÚö¯cúþí}5Uµÿ_Ó_ß.úuë×ÄJsŽ%9ÇHN8¤B4aÂD$%$ÇH š$8ˆˆ’N8H„“ … ‚cˆˆˆ‰Ç!"B$‡!&8`q8â' „ixN*)΂↶$¡” „މ×ööïýñþÿ†;^•õþµøÿ…<¸~õõãû_wããýŽñ)ÿÿì΂!8è$Œ9ÜBB""qÄã¤qÒ‚ ‚A¸âqÂD „RŽ>$sŽATr㈉Ç8âqÎ9p‚c‰1ă‰ÇH …ZN–¢HG\‡”øMÙ^SÈðEXá‹t±S¤°‚èc¯úþž¿¯°x®«ÿúüUë]ƒµ¯öï¿×ªñZßÂÖ¶Ãßo÷ÿA„8Aˆ‰NqܱÈ8â$Ç!Cˆƒ#Œ„$Ç!G!ˆ8„„ˆˆ’„H098A 1ÈQÄIB"B‘‡$9Ç"'㤂ˆ ¢a)bä4#݉t+Xhbyř؊ã8¾öåþ:ޏøx.ŸíÿÆÞõÿ¼<Õ ‡^u_š—‚ÿáð¿Õ×ÿèãˆA0„˜æ±ÐA8œs§†qÂDN9rC˜q„á"'„Tã¤"C0rqH„Œp‚ŽB"Lq8çp‚‚$9熂ˆÇGp±„G²¬«ƒB 2¡Fa#×ý'¯¯ÿ <#F?ô¿‘¤¥ÿ†£·Ru¿ÿÿÑÿÁÿΪ°¦Tÿé~”ã„ÙC¤!Â…$AÚ!&9ÇAÒŽqÌ:D(â' ¬ „ã …"99qÄ „DD$‘â("OœqŽ$AÄA- ÇGôh«Eº„"‚†lºR/„("ëýkóW–cË1 áÍöëø&ýõ„ºm&»¿öÿ øAþ_ËñÛý¿ú$!Ž9Ç0äc„“#œq)ÈAÂA"(!!sŽ!ËŒ„"'H08‰8â"HsŽF9LJ‚ ÀâAÄ‚:ÏJ’¡* n¤ãâw(~b*×ßÛúÿÿΖ—·ûa/ý^Ÿ÷Á½\4°~Ÿë]P_þ‚ý¿Òÿ*/ÿm/í$BSˆ‰Ç!ŽB!""Lq‡HHf'㈜qŽ"qÌ98Ð8’@ãœqŽ"qÒ0â$Ç!G!"‚8â.*‡6 ¡A¡+±´ÂP—C_Iúýýó‰½/ÿBÿÇõùÓ êü! : ÝVÚûÖëÿëþ¾—îuMû¡ óËî"%ŽXá"qÄN:Dcœrq&9‡0çDHBDDãœqcn8ˆØ9‡ŽâHqC‰Ç&<¥r ":¨$GTlf2:6‚SŽF:”è(AR§wÿÿø"ŸíþŽ7÷Šÿõú¥0°÷Ý×·¶¿_ÿ_¿ëÿÿ£—ú¡AŽF9Ç0âM 1ÒŽB'É1Å ‚;TŒp‚ `qqÄN9†kœt‚H09ㄨã˜r ‰1ÈAÈQÄF#D±ë0éqEBªCGjh~õí{f‹É×äë·}TºÛýs‹ìÑ=6—ý¿ëíš+ú¶Òèÿúÿÿ¯·_©uöh­ò1oþ¿˜¢qÂBRŽ4qÈÇ ŠBSœq8çsŽ‚#ãŽB"$‡#ƒŽB"qÈ8â$Ç$8HDDDDâHrr Çe-K)ô&ˆ] „+BÔ¡ÄL9\<¡¿úí¯¶½¥jÿÿÿî´ý^ßivŸÛkÕÿN©¶—ê]þ]~—ëû­¥ öÿ¿½f „DJp‚‚0á$çŒqA¤g8ä â""qÄN99 8A ÇH„D‚$D§&9â$ÇŽAÇ!C #ªR!p@³Œ,ÚE;˜q®]ãí¥µ®ÃI[KVW}¥a nûªÚûa.%MÑNî“ÑN)9†”5l%A†m-†—vínûz†TÕ´5VÂW¦©Ýë!«a.B'rœÃ˜tœqab'"1ÄPBqÎ8‘HIŽ!"$AÈAÄãœ|I@Àäc˜r1Ç @Üq ãœvLÀ¼%8„Ú6…j„Ùt„CT£Ê;i Òh6( lPA Ø œ"<c‰N“A„ &ÁÅMŠw ÃÂd¡ÁBlŽ( 1PEÆÇ°ÂLVà Óbw„ƒ  Øáƒa„‚h8”è a6* á  àÂh8«‰ÇA ‚A"qÂD ™dy Ç!&9Üã–8A Cˆ’E"1Î8œp‚$8ˆA28¤|Ž#†©ÂŽ$QÈ£œq! q!(A v""Fš,Ê1APAØcC5¬1 éØT ¡á¦˜A„Ä&a™@ÂÊ; (0«bD0„A„!„ÂÃ!„Xba4 B &„HhE„І1D0ƒ@ÊÕ0¨12” eV2ˆM6"j"’Jp‚$8Aˆœq¼ „R8á("rsŽF9 8„ˆ‘8â$ŒsŽ!$ÇÎ9Ç#à r£‘ŽA¸âMÎ9cœr1Å•4Þ‘Îd[Q{fu*˜rǃ@¢â""""""""""‹ö"""""sb#ˆˆˆˆˆˆˆˆˆˆˆˆŠ'Œ]t‚F"Lq8çp‚Ž"' „I""LqŽAÇ!!G AÇ @â"DŒq8âL!‚DƒPâ""L!8á(f²‡ „FŽŠ’* QœtPkÄðµ8´t{@ø”á4B$AÈÇŽ"Lq! p‚ "qÂD˜ä(âDDIŽqĘâ$‚ "8`r Ž#J$QÂHDÞ"kBæ!;¸˜sÛJaÊté¤êÄBR$â‡# „ヘsŽ)ŽB‘Ç,qC„“G C‹#ŒŽŽ!ˆ8á! Àç¦NPã‰NˆÂ<ãÂ#b%8Â(r‡Æ(*.¿ÿý"‡,qçIŽ!""B) 1Ä „D˜ç…„DIqÄ›G!š9‡ƒˆˆ’„Hƒ¤B%aÈAÂF„E˜ÂT]B*%{”änÖqó:Bĺ#äëýiUª\$Hq$:D âPäc‰1Ęâ$‡c‰ `sŽ‚c¤""AœrqHN9ÇŽBLvœ‚ãÒHÂAbCB6tKDt0¥ynMÌ8ŽC ÎcöI†–ØJ¢%‘9ÎqÈAĘç#ŽaÄㄜv\hŒq8çq&8`q8â'îB"LsŽC,r XäŽ$ÇcˆAœqªÎ8˜t†sùt$fi¤N„E•À¢a ‚Ç*Gåü¼È›ª„(ã¤BLq8çqA¤F8â–qÂp• Çc„‰1 ‘À¹ŽŽ ¤yr9ÄH08¨‘!&9AÄN9‡!"‡„#GZR;C0Ž-+„9„‘£¡`©¯ÄqAœp‚A‰Ç0âqÂBE„*"A2;#á‰Ç“˜sŽË†àP„IŽBC@âqÌ9:E!&8’„ƒŽF=’ –†˜":0T" Q;î Hëö‚B ¢1Ä㤔ㄈAñcˆ¤‘‡!„D˜âAXqc‰ÇH„HC’DI¸œp‚?((j¤'‘Y‘ŽqË"ž‹ÔPOÞ¤!' „¡ÒLŽäÇH ™)#B!Ž‚c£hI@ðÜr9âqÄIŽ$Ç!G Ú9ÜDãÎ9Ç‚ŠL$„Ï4DAX鈋¤ “DÇ8ðŽ8Dty¥ýsŽ*MHè ¤"¤F8“t”8”8HÃn8„ˆÌHƒˆA„“N9‡ŽqÄIŽ,!&9 9Ç#N<‚#v3hºHÏ#£ˆºJ¢NX‡ÜDÐ1ñÿŒ9‡At„‰C¤HqHIŽ$‡&ˆAÄIŽ"CŽB'„…Œq&8œq8çrÇ&:A$„¡ÂD†Ä†`â$‡!¸I(A !!w‚EÕŠE-P@ƒ)óŽ(”: h˜àˆþ¹µëªBLt’!HR8âLqQ Àâ @âS¤)ƒœq$8AˆA28ÕˆˆAœqŽ$ÇGÒ¨A3l$"$~´&¤qC….)PD~!*±!0ë.”~M‚ƒaÈ–™Â; TRòHdÒ!fW 8A“L8H ‡8çDN9ÇHØsŽA pÈã#ƒ‘ÃXŽ ’H âLs"BBPä ä Ç ª98„ˆŒ „*HeÑAELÐAˆA} Á-éaRI$Ä~ûpá‚ð|=¶Ø ‚aA0‡$9â"!9Ç!G!!&9‡cÎ9á$AÄIŽA¸â"AHD˜â‘8‰7!o. éÖ‰ÉÐÆSÆ D} ,Ð! |6á§Es_øAs¹'HÄ“ƒŽ¡"$Çc˜t„N9Ç‚&9 99ã‰! V8A0BAè!&è"v $$Ïa!"] Ä¡.2žÄD·KB#‹æ^¨7^øI‡ýmlJqË㑎‰ÇCŠ$BF8A‰Ç!;‰1ÂD˜ä(âqÎ9á91ÂHƒ‘ŽB9Ç0äG0á"r1È5ŽB8Ð8ˆœq8äc¢Z‚QpÄâ.ˆýYžú²è.A¢Ç(t”qoõü÷—5ãÝÒ!‚Œ8HŒp‚!(s,!$8“hÃçDN8A F"1Î8ˆˆœp‚8â"$„D㈄ˆ‘Gcƒ£ˆ‹A£Ž,Ä)p!8„ÚàhLj,¾‚#ŠJ•wÿþ¸U_ð‚a„‚PFp‚&9æ „ヤ'ãØ“DN8A“R‚8æ„ㄈ’ã„“ „ „ˆ98‰£ˆ‰1ÈÇ8ò.’‰ … ‘t)15â’a>ã¡(„ …]ÿTî¿é$9ÜRI"ˆA BÂ"Ž$Ç!Ga’„N98ˆ“DƒŽBqÄH08ˆ˜p‚‚ Àä ä(âHp‚ˆ`v!ˆ„&¦ñA„ùAâaÂIœt‚ëýÒÿ‰Ç ¤BAĘâHp‚œãœq0ä âLq$8“ ‚&á%"AÄD‡H „I‘!Ä㈓DÄã„2 ä‡G’²°R™¡8æhI DÈ„Gá ’óýsë¿×ý„‰1ÂDîS‘ŽBB"A"aÂIŽHIŽ)qÅ!#ŽF9‡0âLq!! q! q&9Ĉ8A NqÆE8$2>(Aˆ"‡EÖfŽ+t$"MÔz—‚ÂH„þ@Ì ÊtB#l&Cd(Ê §ÍFn!™µÉ|†^s/žÈ芛9çÌÙfÅ6O_•c03›ˆc"f|Ì,ל΄CGL›D|æJH ÉQYs!™ ÉÙÌŠ‘¤rA"LtƒÎB'ã‰!ÒŽ"L‰Dˆ8œsŽ"¢)r Ç ƒn8`q ¦98‰!È5ŽBŽ$Ç!Gcˆ¤F;ÎhñX"ÐB Ä¾B¥Ð‘$‚ „D$¶H^‡º xÂl0ž3dˆ ñ˜0š ñ„Á "ðFpÏ ÏŒØüK™³0oР0ƒÿúQKÚðƒF‡£Àóƒ Ùá›(´0ƒÐÐ"æ¡è[†¡Œí0ƒÇ!GHJÊDI$8@„DH8äc¤AÇCƒˆA`q8ä æIŽ"@ÀçDäcœq&:BLq8çBa—s0ŠªDR —§…0êô±e:øFÊ>0èîå;b›plh>0ömÃG† Ú6ÛA…¨pèîÔ7á ÂA6*h &ƒZ3´œ:Aö:3´l4Ó:<4›„ÜBnm(xAÝÚHØq„ãˆÐ‰Ü㑎w @âqÄJ#Ž"qÌ98ˆ’D˜â"LsXçDIBC\qcˆˆA ˜ÄºÆ˜Ú6èÚ<’¢OÅíDPe_7Ÿ_«IاH;NïI[£JÒv)Òv­7baª°»ïÝÕ¸mÿô•[õé7ï žknûêêé½6“wºWÛ’!œN9Ç#Üp‚Î8‰Cˆ¤F8ˆ‰1Ä›œq9Ç °:X‰7 ã²8\!'qÌ ˆ`r7ŽªŽ`‚‹Ò*‚ •À9‡(w '´] H./êªÝ1·ßêú^ªÝ1^ÿ]ñõ§þ—{ÿ½$¾õOWï÷¤ÿUw{wtë{ÇTÞú'$9Üà‚R ˆ”á"Lq$90á ‚!#…PBqÈG8â$IŽF8ˆ\r ˆˆ`q‰äBHq{*2°v¥eåЂXÊ„LzAÅ„GH!ÿ}{ÿW¤½ÖÝ_{õ.?¿÷Iu÷×Ú}k¿éoßÖÿ×÷_{¯W¢œh œDã „ã¤qÈÇ!HBB‚0âAÄã‰ÇHØp‚ â"'„㣈‰¡Ääq(r ƒ„“ŒzÛ£¸o#æò1 Y#‹I‘àŽ8 …œtN…/¥¯]Õû¯¥õû]oÐ~ºýõ¿ý[ÂK·¯{}Ž—öÚõµÃ¿]ú¿œqŽB0Žá"qÄDã„çHRŽAÇ!Hé B"LrÇ!&8‰‡8âAÈ9 ãqÈAÈ7DI""‘‡JÝÀ‚8@N˜ÅB õ „!.DW–¤Ž>Õ}úú†¿ý±]mñÿþ¿ý$¿ZÿØ=.Õûüv¯}ŠëúH „Jqc‰Ç!&9‡$9Ç!Œq! ãœp‚Ò ÀçN9Ç!Ž%"qÈÇ0âqÄD˜á"'…ãn8œq&<0’\ Fl¾44‹(> 8áÐ Z‰šYÄPµÿÿá­cßþúÿÁ}Òÿþþ«àˆòúüµû£_†Ð28¡ký‰1ÄIŽaÒ0â) 1ÂDã‰Ç!"Ž#DE‘ÂÆG ">GHà`ŽÈîB’DDàÖ8ÑøŒq$r!¡#ô]IœEщњ.‚N:0ç¡ÐDÇU¤N†ãÿÿÇÿ÷à‹~ïïøFßÿþê‚]ëëaÅÿßׄXö #?ãÃÿôaÂIŽE ‚‚D˜âqÎ9 8H „Dãq&9â!"q‚c˜q‚ #=ŽBqÎ>’ú¡HD(ø…CŽ)âá ‚ÿÿÿ.¿ÿú û\ ®þA¯Þé/µÿü–ïÿ¦×† ödá?ÿ8éD ˜BDŒp‚ŽB$‡!ÂIBHq!)Ä „ˆ:Œq ƒ’DH099QÈ2ŽaĆÄN9ˆ‰Ç;Åw!Ä80‘¶4]8‰×UŽg$-GI Å÷ÿÿ¯þ¾¼ ¿ëë/ÿ_Aÿ^‘:þ›¯ü¯ÿ_ô°m/ð‚ÿøˆ„‰Ç!Ž'$"!"!‚cˆŠNçIŽ!"PâAÌ8A‰ÜÒc£‰ AÈgãqÂDƒŠ ‡ÈAÁ,"®#ät &"! $åº]‘ОÍû¯ÿO÷ÿ¿_V×þ¿nŸõÿµ¯ßÒÿSˆ>ßêÝ7^Ï p—Ö¾ÿÎåE$aÅ$ˆÇ! âqÒ!#DN8`qHãˆ`q!&8ˆˆA !Èf¹Ç8ò7ˆEP"‡&äc¥(ã0‚‘Ñš/‹FóZ P!@›Ê"ú‰)´1íÿÿ¥§ýÿéWÿþ¿ë×ÿ«Ò¯ÆÇúûÿ½G×o_õúúAfh „N8AA`rÄDDˆ8A œ†C”äcn8‰ ª8“IŽBŽ$ãâ‚ F8ÆÐx‚Q4ãLc—È躜FhB¡b+@$G¨g?ÿuïÞÛ×÷ê]|Q!ÿ±Oý.¯Ke ¯Þ»öÿÞ¿Ëÿ©íTºúö)ˆ“qŽc‰1ÈAÈQÎ8œsŽ4"'IŽF8ˆˆˆAqÉŽF8„ˆA">A£4ˆ9C¤BºEÐ;h*ÆDj‘á3\WB0’ýŸN—ú¶«š/3Zýuÿºú—_”V—¯Þ==ëïïÛ÷JŸ]{ÿ´›?ÿ¶—ÂDã’F8A”çŒq!HR0çDHƒ„ŠGŒsŽF9 9ã>rrCƒˆâAÄãqÈǘªÇì!I[ Hù}; .û£yìºÑ¢Èü§RC”æta¯m«iihãý°’¶´—NÖÂt·§z¯o^êØGv.Ÿ½í¥v—zßëv…ZÚ:¸CWõBqÂE:FE$„‘\„N8¤"aÈAÎ9âLrq!ˆÇ! ‚#H08‰1ÂHhDˆ8œp‚¤'ZA8PCI=‚#š A4qÁ4!Ê‚F!²:HÑ :ôÅZAƒ Â/¥ Šb‚Ä&ÒA Ó„G’‰ÇAžäPƒA„ؔ𚠭Š0œ4£†z§ü&m„‚pˆðH&ƒ0ƒ ¤ôa6%>H±ØIЉP‚Á„‚h8 ’H „¡Ì8‰1ÄDHƒ‘ŽB!"BDŒtˆÇ‚ ãœq!˜9Dƒ‰1ÈQă„„ƒƒqÄDƒŽ‚P0ÄEæ F‚¹Âº!ÅD% PŽEÅ-‚AO ‚†bšýŠ m4á Ä& Š„ æpièZÂa4&‹pЈbaADÓ¾Õ†!0¨1@Ó ÚdêXeBi„Ô«&*šÃA­Ø„ã PA¤8åŽS‘ŽBAÄ „Dã‰!Ä „Dãœr9äq!ŽaĘâ'BIŽAÇ&98“"1Ä‚¨ãB‚0äB!S(y„]FBåB™¤@¨˜æq8â †$|$—ÄDGDDhDDG¡¬DDDDDDDDDDDDDDDiF„Aœp‚ ã„“ „ƒˆ“I¹8A0‡câ"Lq Ô8‰Çãn8“I"BC0r;#èP#ŽÇñ@„˜èLx„s ’ (ˆŠP‘´.'ÿ¯úR PˆAˆ‰t‚IŽaÄIŽ"$‡&G ™dxŽŽ28Èùd|Ž Â‚ Àâ"C0q"F8’N9ǰ„i 7”å8HîkD| ²t§ ":":a*!–9c„Gtÿ•„¦Wùé*ℎ9âqÈ7HƒˆˆœsŽF8`q!Cˆˆ“Dâ%"aÎ9â"""Lp‚„B[„·7 ‚péBZ!"ú]ÒHE!•„½è:MRAëÉŽ(!8á"Dã‰C‰Ç!!! p‚&á$ÇŽ$4@ q!"HrCqÈA¸á"EÆBHzhdpiÑCªà†qéè#ÖˆÆU²­תUKaÈá–GDã‰Ç8âLq&9 8Häc£‰7!$9Ç#H09H)Ž$E" Ç Ò8`q‚•ÄPEs#ƒ— &GDxSI $tG ”A”9àƒHætr†qU¤“IV’Ì9Ç,sŽF:GŒqHDãÈAĘâHqœR!c‰Ç8ä8á$Ç0âLq8çDH08A$Œp”"‡ÁøH†jtGÈãD(à%0ìB …EðŠƒŽ’Š„ ½)Â0‚ž×á±CÒHD „R㈈”8“Œt„IŽBqÎ8œsŽ'R#ŒsŽˆ‰Ç8åŽqÒ N9 §8äcœp‚‡ Ê8œq‡BÄEÉŽAqÎá‘Ñt‚ˆ„“p¢ ˆê¡%8aE$„E© Hƒˆ…â„!á„Lì „ãœqŽqÈQÄâwHN8ì! $F9Ç,p‚‚c‘Ž""MÂIŽ@°q8â!"HqトA 1Æ7‡qŒ$ ˆ÷.ÆÓè $‘¼Â# Šq&9Ü;P‘õñ%&ˆAÅ"1Ä›ˆˆA ˜p‚dphDƒŽ$‡!‚FHƒ‰Ç! Àä â$sŽ"$ݑÑðÒÄ A 'Èé=m›KF0 Çˆ„š(ŒH„}G؈œsŽ‘‡8ä(â$ÇcƒœrÇ0äcœq ÀâHHI¹Ç&G “DçŒrqŽA¬qŽB$Çn@ðÜq&8 V”«B³Pa&1ÂSh#pEÒ@‚ðFž B9P’ ЉÑoˆ¤B'Jr1Î8’ „˜â)„‰‚(sŽaÅ'DâqÄDã¤BLr1ĘâAÄN8ˆ`r9â"(eåYÜ¡ÈÇD~<"8"!°’…IU@–‘pØG ðÁ4u™¡œ]Nå9Ç,qHĈÇADDDI¹Ç# …!8ä(âqÄN8A 1ÒK„ƒPá)n9ÁXq‘’xPGBN) ,Rxú ˆè$… ‚(pœH£ÆÒP„i‚ÂDDD㈘sŽF9Ç!œqÄN9‡8ˆA ã‰8â‰Ç8äq‚ á$3 xÇ,p‚‚c†‡(±ÊŒ;„†'pÌ=! Ž8‰!Фš„ü‰´[¹Š2¸ÑM†eLÎô&*"qÈ8âMÄDIF8A 1Ì8‘G&9á!&äc„#‚©‘ÀÀB'ƒqÄâ$ $ãˆAœq ãœq8ìŽcA8™Ä‚6Ìh ¢ð“¹‡Ž UJB$ à©.8…©ä%ÑBøE»_zmºAp‘Ç3œp‘!ÐGŒq!…!8â%""w!#!$98ˆ‰Ç! â"‰Ç¤††‚XQ)ÂC‚1bG´H}Á !Ù«ú1‡wëpð‚hU"PâB'$@ÄDDˆ9ç†qĘâA²;#„#ƒ‘ÀðP“rqƒœp‚Œ$Å($ !„§ÌéB8ëB"²<§Eé'&K;VŸ«;«ÌÓï)ÐA%aÒ#ã‰Ç;ƒ„‘,sŽBBŽ"$‡&8“„DDE$AÈC(p‚8éŽÑÈ"ààŠq£ŽPæBJ$W1Arr Ç'p•(ý'ÿÇÉ&?¤œp‚a A!8á"' „IŽ"Hq&„IŽB9Ç Ð8œrs'ÈHŒrrrr‡á$Çc¤AÇ!œ „˜è˜ðˆÇT}EÐB‚#¼Ïê„À“Z=’„qÌF´Ÿ2[Zÿ×ñ&ŽB%MsŽ)ˆA–9sŽF8ˆœsŽFâ"$s¸„“D¡Ì8’I"$ â"B"@Àä(è!!…”8H¸dt,! ±Ä„ ‚WŠH¾ )ÂL!GÁ4#úJ’U×_ïû_„N8¤aÒ!‚ŽqÄDĉÇ!8âLrqŽqÄㄤ"Lq x8“ƒŽ@ðÜq Ø8ˆŽ„@ˆè&â/ ¡Ûã…IrC‚XJghAˆˆú¦ÿþ•ˆ¤© Ç!8çsŽC„‰Ç;AÄD˜æŒqŽ"B!$AÄDHfw‰¼'s[Dt$tÛBÇ(ˆ‘(ì”/~«­wëìPA' „Hƒ‰1ÂDN9â!%$Ç8âqÎä â'N8Ð8œsBA¸âHp‚cÈt@ÒPJC’“¢êžBŽ8@´‰º”ðBCc‰îÈòH¥uO\í:;ˆ·äj!ÇD‘©×*YØHk óR"_$8ˆA“sŽ'Dâ$4"""Lq8çDˆ9±Å!&8’H)Ž"$ƒk(ŒsŽBŽ) Ç8î%EVB(ƒ‰N‹BGAaÈ®Tä ùc ˆÞâq _Ä Ï™¶xËè…rðÚ™x`";/ˆæJÈæLÁ “q gŒÛ<Ñ “l†DÃ6a>2â˜#„]ŽÌÙ¶y&fÌÙáa.‘ —A¾VEРϳ‘˜™ Í›d!¢—Ys ffm„³Žw$9ǃ‰7 Ž!"@ÀâLrrq8âLrÄãqÈ4'ƒŽ‚"ŽB"øŽàŠ Šå„qùˆCÖa! (È âBË,(ú<¦z´cÂhÖÔ#ãÜ#YÒpƒG¶á0i£Û´Ñð®A„èö-M áÂz>4khö6 !‚F¶Þ§G¶nÐoHö8•£[øôÑ¡ð‚Ê…ŒqŽB"Lq(sF9808H„DH09Çc‰qc‰ ÁÈÇ ª8œq&8¡Ì(à.Í¡—°ÐPA0T$t^„‰p‚‚s‹ÂA°ò‡¤á˜ôU°‚l<¡éD¡êØh0VŽ%[Vãەl3!£Ã 6éXiá$Vâ°5ÝúV“œ0©¶ ´+Ž<4A&Òm¤V7 ÔO Òµl:8ô˜ØœpÑœ§‚c‰1Ää âœq&8œrNHqc¤aÂDN9Ç Üq!˜9 トœq ÀäqHIA³ÀØÄÆa!Æ” „(`ZìžX’ŒHQÈ08/6¿Öé]>Ãzí-&ªþ•úÒx¦öÝ\SjßµÿIø¦õZu}}[ôŸ¯êêØ÷÷í&ïtºtL¸@ˆÇŽ$AÄBI¹NF8ˆˆÐ>AÈÇ0â$H)Ž!"AÈ8äcœp‚‚ âLqˆø=$9XXänXíEp‘œ$}8± Y\§ÄŠ>…ÂO#´ÿõ¸ëþÖãüwu«éÒºïõëJývûÿÿ­okýûn—W¯÷§ÛøõãD‡Ž"DHhŒqA“ „‡Œr!GG‚àPGGr8d‰N„!ŽR (XB½GËêAÄBLèâÅGß^öÿ×OßÞ¿ÿ×ÿÿ·÷Oþý>ºøö:Wt—Mj¿{ÿö¾ôÖôŽ8œqcqóŽ$‡c‰r1Î8‰ÇcœrÇ$998qĆÄDˆ9Á@äŽB9Ç3œs»JÁÊ¡Å(A¤’  Š¼üC#ä}'tG•#š Öhzµññúÿ¿ÿ­^­}jÄzµý}ªáì?ìvñ굿øcÝl%Åv)q&9ÜŽB"LqC‘ŽqÈÇÂD çDI"A X9âC0r „„E4qÂABX‰à¡ÉŽt!PœáÁ a‹EAÒ* <ÿ×Ó~¡´ÿÿø7†àÛ5wWÿðßøA±0âLq8çqAb"Lr1ÄçƒqÐA$Ç!G ä ä(è#Ž""‘I"8Aˆ’„Œq‚8âB2(„„‘CÓˆQA)ZJ!3Dt+™Â‘G ÒáXæñ3Î-{àúïÚI^—ûÿÿõ«Ð6—ÿÿô àÿ@ßß_þ ÿ„ŸôPìŽ p ˆAA`t‚DI$4"Hq&8ärAÇ"$Ç‚BHƒ‰ÇŒB#¡„à…PA`gˆ˜ BŽ ¢”BDw(ìº Ñ¢‚kå?ÿ’­|òÿÿ{ûŽ3Dé~ßÿÞm>g‡ï#7öêî¿Íº¥ßØ“ „ã‰!Î8A Dcˆ‰C„„N8ˆA q âqÈ*Ž@Àâ$‡8âC\|IBqÅ8¤C‘G”ü(àŽ8GÑto§H%BŽ:ŒÜ/8‚Î+~þóÉûÂ2z±Þ¿þç—¿»]ºÿ¯û¿oþ¨ûü{ÿà&ýzÙuêÌâMÄDN9Çoœq!˜8ч!!!¶8’DI¸‰ÜDH8çHƒˆ„Áµ,â a4„DލÀrwD4!ô}_osEÛ¿{š.—0©Íýš/ÿóOÛ4[Wê]ÿÙžõø"ç¿êöÍNh´¿m§_ÿ?ÐDc‰Ç8çŒqHhBD …#A¸äq&9Ä‚ãqÈŽB"Lq_ p‚ˆøÑý„0":L$BS‚.‚Eý$•„1ßm{JÕv×·M{[¯ ¯ö¾Ú_a*ýÕ}µÿm+[õ½?uû]ÛVý4ý¾ÕëUÛM6"""Hrq8âLr(âqÎ:Dc‰„Dˆ8“É ÜraĆġÈ`q"$Ç n8`r Ǩ„TÌâ( ÈðedDu8»]'ˆAâ&Jp‚nqÂA""$‡8äcˆœqc‘ŽB$ƒŽA´q8äq8âLq Àä â0‚ V… BJ)‘B Ä…ÁÓŒ#6Êò‡Ž}†—VG.QÎ8ˆ”:G†#DH â"Lq$8“N8ˆŠDcœr Ç#DŠä5‡!!G;’=ö_„Gæ«ÊSÑ1á ‚0ˆH;ÁáEÓ+âŽâ2üpÈFXŒ „¡Â „IÉ9Ç8âB‘ ¡ÄT„$)Ž$‡!"F8‰ Nä â"AÄㄈ¤"Pá*!0â‡k…¡‰(ÒÄ·Y‚¡A!áE!"ŽB ¡Ê8±Ø¥B‚!8‰1ÄIŽaÈ8æ „ „Š9 ;D ™‘ÁÈàx(#…#äp7#áÈà`*8A¤|DN#yHŽ™\xQ+„Š>’Ê)\B'jÐB¡ìN(üD¡ÄH‚¨âC@â)$""aÎ8“N9q"$8ˆœsŽFâCPq&9ÇÃ…„¤ÜYtEбB 2±#xAÐ;e+)(„'g¢c˜q&9‡0äŽ`q8ç…‘Ã9‘ƈ‘I‘ÀÜŽä|ŽäpXD ä!¹Ç#ãÄbµR£# ‚Dt!ŽBC‰0ʹ˜Äâ"¿ÒŽqÄRHHjqÈQĘéd‡ŽqăŽ"B'N8UDIqË㈓BD㈜p‚GÒ" DM">F+ +7£Ž""PìÚ#Ê>"8•jCH{øH§!!!¨8¤F8“ΤqÄ ‡$8A ÁăˆA 1ÂHhp‚8æŒsŽ)‰Çî“Aˆˆ@„H&8’«Ä$¢Èú„™¢èíM`Ôrn!ʼÈi“páT$8œr „¤$ÇŠp‚8âqăˆ‰¡Ä˜âAÄDBDãÄパŽ%;Ä0¦·,pDxŽ…":Nc¡m#ºHÂ8Bo ÂŨ#¹…6¯©&td%“! 6).FÈ Í£µ’;rA„)tˆ7Œq8ᄤÇ,sŽF9 8A’ärq8är1Î8AÄHh„N8A‰C‰Ç!lBBÊš0ˆøŠ8öPæyxA2 «î’ŽÉP޾Ú0‚ Âh8t~ppŒùN’B' „‚˜â(%!ŽAœqŠ „D㈒„Hƒ‰ÇŽBŽB'DN9!çzë “.‰VŒÂHHƒ“„ã¡\.ÂCÎC@ç?pÁ ÑPxhmÞí0Ô;õqA îB$ $AÂPB"Lq8á"ÈáàÜ! ÀâC0qC‰1ÒHáÈ9E”S … 3©c‹#ätA£ˆƒS„’ÄPt…!P‚&‚;‚>(AöŸ2×m[I¿éÍ2h½xA H „†óŽqÄã„“ãˆA“…Dƒ‰1ÄヒH…DJp‚ cƒ£ŠBqÈG8äcÄ …¤¢Pâ3AÕÔ BLqKéºêÄ …”9Cá'Yë뤵I´¯úÿÿèd $ "AÅ„"qÇ;¥˜t„N9R Ð8¤'DD㈜q&8‰!ÐBqÂc² ýÂNa0ÂPBC@éœq0äÉ çㄈ„“H4Ž$‡‚… ‚ qÄBl#xshycŒú• ‰”=ˆ˜v_*“LH®( ¬Ž| Ë£†`Žá„ðA„ º?x Á/™ƒ>fÌ Ï™Â8f 0‚/„ð0ƒ8A/Ÿ3ˆ˜Bø"ñãAü4ŸïzðᢠÁ?D(C8yÆl œ0ƒSƒ64¼GA"<"äA˜@‹Ç0˜" ˆ,H£ˆˆ‰Ç‚a‰ ¤$Ç!G Ð9Ç $N9Ç Ð9 9ç$„‰! #½¶aá „!ZIab$Ž%B™Ì$c-Th0§—G°ÒÑòÆŸ£[AàDx:8í˜páÑÝ„lh&燄ƒº8íè&ã»GÆh6vÆÚ_ëá þà ºUAÃ- AöÕ:5¦1£ã„H8t› ¦ŒÑÎ8A ÁÉgc‰Ç!G!&9DƒŽAÇ!„IŽB$H08ˆˆˆ¤B"Lq8çh":ˆDt””V¤‡ A5—b@ÀöqÓG$cChŽ6£úv)ÖÒum'y =Úmè&Ø0ë{é7V“a(û‚ ¤Ý0اIÝoI]÷«ûöD"ò¥a+u½ÑÇjÚÚNÓ^•¥{±Mº8í+x‰ %(" Ç!&áÈìŽG‚8Èù) B$Ç8ÌIB"qÈ8âLrr 08“R&‚C;’L"¦CQ„ ¬a#ŽA¸å*¨)…‚ªS³N#ªŽ®ÕÛ®•îÔkûÝ7OñNª·½ñ±N½7ý?[ Û_õ¿Ø~’«ïÛýi]¿·««¤êûÅtüJq8â"qÈ8ä(äc ‡!"$Ç#BR# „˜â!$QÈgDIŽB"qĘâC@âqăœq8â¾2ð©q¢Ç!œq]Qj"0#„&hÚ=‰äGAaðA —D|(ÿß÷ýÆDWÝ~·íZ^ÿõV—^úñ´Ão^Õëü7ÆÕZWÿI~“þéZßÕÕ-òÇ Àç!$8„‰Ç„BDcƒ¤"'IBB'L9Ç "qÎ9 ãˆA q8¤F;" #båŽXè!H">–B_£ÙtN(Пýâ=±î¿K±–Š»ÿZÿþ•¤ííïc¥t!Óa£ÿZü7â¿í}×ýXÿïø¯²%9‡ Üp‚&8AˆHDãˆHIŽBLp‚‚ˆÇ A¬q$8A‰ ÁÄN8ÎË¢8ÌgžzËŠ°‚CŠG$2?Š] B5£D!ðë_á÷ØÿßêÂÿßý‡ÿ aû×àß[BŸø¦»jÃÿaõy¦_AÂBB"qÄîqĆ`äc‰1ÈAÌ8‰1Ę∜q&9†qÄH2qÄH09QĘä6‡!&:²:#º#è·Aq  qbŒ>H „Š9 =’M¡¬!E!tBw(pˆëÁøZîØ:« ÿ_׌„ákÿØ>>w ƒýá|7ö0N××_ê mVE1¿ð†Îé„“DÎ8ˆ“D˜äcn8‰Ç0âqÎ8“I¹Çn$G# „N9†PâAÄIAqÄF㽆BqÈAĆæá„ HR!£Æaa ‚ä]$v°…ÄFql?XûÐØF}}_ÿÇà‹ëúÁÿ†Ô7]«Ð"Çø~£ŠÁ~0_öTa‡õþ¨ã„Ì$‘Ç8çŠ9Ç âqÂH®BLq‚$9DN8AÈAÄIBA¸â$AèBDãÜ ±BÄBDc‘G!¤=Û¢2ÜH.8„o ø":É!PNPE‚GB1ÃÐO\šwòÊÿºý~mzÿ¯á¾]H‰ß_ÅF_‹ù´.¸F¿ËNkûjra–ÿøÒHDBDÄB „'ãˆÄã„„sŽBŽ"‰dtGä|!"'†¨â$ÇW,t\6à‚!v œr<Î:CBuØ‚)Ò $˜¡àß„íH-ÿÿð—ûþC}iî¯ï ¿ß÷ÂUî‚ÿ n°oÿ؉ ÁÎ808A q‚ˆAÈÇ8äcŠD˜ä09DãĘâAqÈQÂDJŒsŽB"AÎ8jDƒÂF*”9c”9àPJ$  )C¤PíÍèPJS„è2èÑHÀÄ †hò¡ޖ߃}ë¿÷ÿ¿éwÿçoÿü‡~Ò_ßÿ ¾°—í©&ßë¿.9‡ ãœq¹N"""'ÄAĘá!$ÇâHrCœq $r8„GBB QŒK§HK(PB"2Cˆ$‚(sŽ&<ÂZJêåÑšá·õþΉúÒÿÞµþõUÿ_·Â(w×úuÖ¿ßÿž]ÿ«ÿo¹Óo÷®AÂDñÎ99éœq(q âqÄ „D˜âLr‡"'Dá= ŠBˆ‘GCP‚Áˆp™ˆ|m(tnA0åyNx²¢k_ú×W¿ÛÔºÿý}·oó ½ºÿÕú×£ËKÌ/_8¶ìÑjª]~¹uñ_y:·ÿøA 1Ò‘‡$:„D‡Ž9âLp‚C‰Ç8â9Ç q㑎ATqAƒn8ÛŒq ¸á(ä|/GÑ'ä+ÄÚÈqÆn¥ŽCFèAb… ‚Gˆ”¤©¾×²éû3Wœ®ó?_ýº¿ó5fk]5ýÿ½ºlÿ¿Mª_õ_´¿Í¯ZþÙŸ®Ú½îg¶½_¶— ¸âqÒ!Ј‰1È£œq&8‰Ç0â$‡! ãˆqÄH6BEp‚C(Djv¡ »D~ hn-¢é$qÔD§Z]‘ôH|E‘ÑÕ3äMJqw_„i¶ÒMU†“hiúºNŽ>öPØI´qݤ·u­­·¤é+I{N†·}®ØI´›WCíµt7N­[I´­m%õgŒtŒ8‰Çƒ£‹.2>GR86‘ÆGR>„H.9 ¡ÄD˜â$Ç `q&9ä(ç$2Ç;¥¨ƒ‹Ò® @åŽPú‡p- •e"ëZü"<¢>“žØFpØ«IÁ ‰N“0ƒ °ÂLT0ƒ6!1¶‡&ƒ ±A†Š P@ØqLS¸AoħH0œŒbcb¢¢TB lB‰N­Ãá¤Å1PÒ„GÂA 0‚B© Ç „„‚ ‘Ár>‰Ç9â$ƒŽ"$AĆÈÇ BB'ƒqÄDI¸Ú?‘ð¨˜åŽPá"(åsJ!8ˆQcH1‡ÒB9Ãý+ &LB Â•jà „Ó†e: SL!Ó¦a4"!„A˜@ÎPM1]a„Ó8á0M1 § &š UPh4Ðb©åX„ÓL¨±NÅPåZb%aÈÇ!AŽ8A‰1Ì98‰r Ç âqÈ8ä! ㈄`q8âDN8`p‚âeþ4]êwA#¡:.Pæt™(q!G.#†]‚#Î?Äq„GÄDDQ!ÄN8A‰ÇA B$Hƒ‘Ž"""'ãUN8Šƒ„„IF8œt&㺲è"NSŠ&4).ÄF‚¬±Ê¸A¤¤(á@‚güMÐIÑZEðÿ¯*×Ò8á"Aq&:“œq8á$ Ž$ÇŽBE†Ðä(äG""‚#ƒqÄ „ †ÐA0®ÇN ¦¡èC‰CéêÑô© %EÂ!B”Pÿü›K°‚8á!"B8‘Ž)ŽBB$ÇCˆAĆĆ`â$Ç!&9ã‰Hær¡8E„C¡„GÈ膙݋yÎ>’„¨Yè „’ Ô¡AëŽ"ATsŽ$ÇŽ$QÄã‰qc‰Ç;ƒˆ˜q&9QĆÈ7HfF9‡ Ð8œr8‰Ç BqÄF#ˆ‚3 IË ”Öˆð&&x®GÃÕ1°R‡GvGÂ#p¥ŽÔ!3ò<3‹·½-‰ ÁÈ8áÂˆÇ é q ƒœqŽqÙ Èá´GÈàxr>G‚8Èàäp=‘ȸŒ#è¼0H":BÝGØŠ0„e8A ˆçaò"ÄNï¡ØˆA ÅG$¡}Gë‰1ÄㄊB'IŽqË „‚""MÎ8ˆ‰8â$Aă âqÐJÂPF!!‚X#ŽNá-  IãAc¤.ËÄ}B—J!F8@øa¤F8A’#ŽC8â8”8œsŽ$6ÇA Ç ã7HfA q! q ÀâLrqáPÁ=HZHh!ÂfhB3¨‰廎‚$8A- G+µµ¢ Ç0âB"S„‰Ç$8A‰Ç!ŽChq&9 :B"qÈ8ä äŽ'IŽAÇŽaĘâ$Ç‘ÐÃ.‹Ñ‚(z ,TX²>5„) !Âx …¤"%ÑCLjAÅ#œq&8‰ÇHŒsŽF9Ç$8‰C£hƒŽ"$AÈÇ Àé Ç8ç„H099ÜJðÇF’mI2œã¤Âì㈠[ J‘Æ^£m#Æ샎Xä‡#IqÈÇŽB)Žw$:B""Hr Ç8á$Ç!ŽqÌ9‡ 㑎"%IĘâM !ÄhÈK8á†S GĶ'-‘аˆø†BCqÄF¯ „$£ü1Hã¤8â"")“H08Žqăˆˆˆ„‘8çIŽBŽ4qÄヘr"AÐQR4TLЉtGϦ!8Æ)Ì:EŽG0Ê ²‡ätY N"…óŽE „R; „ˆ9çŒs"qĘâLrÇ8â$DBD˜éŽBMŽ"$Ç AËR0öiFX¡Pc  ¤‡""ˆèb„D%òÑé$"qÄR$9â"qÒHäcˆ˜rc‘Ž! Ø9ÑÈ8ä Ç ˆœqŽ$Ç#D˜øA2á„CŒ;Ž80EÕPH$„…›‰;ò‡ÏK†Fgã3ÊâÙÞ¦dQe$d[¨wŒì-„ 3qÂGŽ$AÈÇ8ìŽ28ÈàØärr1ÈQÈ7N8‰AÄKrr1ÄE"8œq8â7rB1ˆŒtÂ.†Ž‚Ž Â.“# †$»KÚ§ªz駦š0ôB'$BBLr£ˆœp‚&â"CL|DãŠB!$4$AĘâqĈ9â!!"A;œt^S£xQ6‰4ÂA Qaƒ¢>¸ˆFÜ0œâÃØp÷‡¿Ã:VóŽ4aÄㄉ¡Äãœr8A‰1È4"B$Ç Üq Àâw ƒƒ‰1ÄIqÂN8A„”8ŠÔ%_R9„Ñ tB%Ð! qÄtˆƒžÉLK’z~ŽÔ‘Û¯khÍ'rfÒâ"$Ç8æDN9ÜDˆ9âqÎ8“ƒŽF9Œq"$DD$@ðÜp‚á"AÈ7qôŽ8éa ƒŽñ#á !Îð±$28Èè"4…ýýüqÆñÿôHqHN98‰1ÈAÌ8ˆA`r1Äâ)œqcep‚îBqÔDƒŽq㊠„ „DÃAâ¡Áì2ˆ¤wªHu‡# „D":.„ø1ü|+„_zþÓHŒsŽ!"MÎ9äq8çH08‰!ĘçHƒ‰Ç8ä „ƒŽ$pÈáB#Eq „$ÇŽqÇ!ã¡FŠÈ„Dó^2®!ˆ"<Žê3ˆË ¿ýW½kÿ„¤F9Ç,sŽ$Ç3 „ „ˆ8œr 9‡!ŽaÌ9Ç0äc¤$Ç8ä(ç"p‚ˆ9 8“IŽ'DN8“DîqÈÇ g"1ÂR!HŒsŽXâ*ƒXHMX¤"!–Pä‡HpÈüHxA#m/ÿúúø3ŽBˆAœsŽ”8¤BqÂh „N8ˆ¥œp‚ ƒˆ“p‚8æIŽ""Hq&8ˆ“C„“IŽ‚ŽB!$„DEN8A„ã§ }Dt‚"HHh«EðŠ›Á§ ˆAÒCP@¿÷Uýk_ iƒ„„ˆœq&8“!8A„‹DƒŽBLqŽ”9‡ŽAÇc‰1ÄJsŽ' „BBDDãœr1È8â*qÄâˆù‘‚ã„ !!®B%‰C’E"C…J"oÿ©)U”í>f‰;%ò'ŸÊQüŸ%°R’5ÇG©#&šgbñõ®A£´yF± 1ÂE!)Î8‘ „' „IŽ$‡#ãˆA‰1ÈQÒ&â@ÀâAÎ9är1ă`è!!8âÂŽqÐB"Œ‚ FÈðA }"1 Pá#º‰Câ\ IFI/åÈùùÃ@ϳfA™¶fF„_D+“²àž a°O a;. Ù;&@Eàƒ<Ù™¶"ú`• ŽÂ¼™Éƒ33f`ÂôBˆð‚*͸tEY¶0ˆX'„ø—๓Âì°Ã3v|ÌD/L0@ȱœ80ƒ0D8’Œp‚8âqÎ: „ã’ÂD á"!"MÈAÅ"1ÂD‡c„‘!‚ ÀâLrq8ä3ŽB!$2‡M1NSÎЃ„ÌiTR;ˆŠ#¤Ið‚¯èðÿÂ5»M´Ñì4|Á:m‡FÆ'á<6˜H1„lx@ˆì ·M6bÒºƒdÂÂ6ÏpË¡òÚ dÝ;nÐwh0SÝ7 ÞÐiAÃFÆ ˜¨„‰ÇH“„ˆAˆˆA Œp‚8äŽ"'ã‰Ç äc‰1ÄIBC\q ãœq8çqHØq8çDN8œsŽaÂXˆ²µ(tHF¤B.Ç´"~¿áü:M‡Ed5(zON'GÓÖÂwyLJtVR–ô¸ ýº)ë4R½Ò–é[è÷H;[­ªîénŽ=+h\4øt{aãޢSýÑí†d WI°ÐzVöN•´Ë „§!œsŽ‘#D㈜q$9Ç! Àá"D ™3‘ÆG\!#†ÑHàx`Ž2>G’B"HsŽ!)gN:Ï$ªƒ) ”²(¨B!Ó‚ CúoÿxïJÒµ}ë}SßtÇ{' ÓÝV±W[è{âŸýÒÒ_ðýjÿº;â·»Wi®)úm+ö»ÐUtü ‡H$BB"qÂIˆ‰Ç8âMÂIŽ"Ä …"qÈQăƒ„ÔãˆAœp„#†Y5RAÂŽ>¾½~ÿ^?þ?¯ x5ö¿aëÿUõÿÿÿxøUm_‘! ˆÇ ãœrÐBAwŽB‰ÇC„ˆ‰78äŽA p‚ á"$q"p‚ â!#œt…*8ãÄP£±tFÑB-XN—A Š0¡ZÌÿÿýVïÇûõ]Ò´Á^‚þÁìЛø>×ÿÿoëþÕõ×_åŽBMÒ#㈉C–9Çã˜tŽ8`z ÇcˆA“Ã‘Ž‚ŽqÈQăˆ’DHƒƒ „ãœq8âPá")hE„!%(Í„gÔ ”Jp¢g¦BGE΄ ˆâN/ÿÿê6_ÿÿÿ“²=ßcõXþ¶ÃŽÿØuëÿÿÿÇhãè#>8ÿˆŠGp‚8â"B:Hƒ‘ŽH„N9ÇÂIŽaÌ9‡! qÈAĘâ!"qÅN8œsŽ'ƒqăœqyªÊô]Eñ8‚)Õ‘\xEáA ‚Å #ÿÿÿ-8þ¿û¥øAS ßøaíËÒ?†ùuýÿÕëÿå…öÔ%ËË-û,rCŠN8`sŽ'D˜â"[„“DNçŒsŽF8‰ÇHDãœrÇ!œsŽB"Lq C‘ŽBB"qÄIB!"qÎ?˜Þ!”9E`™C”éEG‘C¨A8Â_ÿÿÿƒÿÿö“øAtÚáÚ%þ‘£ëðoÿÿûKÿéëÐ]=~ÂG!8á"AÄN:GŒq ÀâBqÂIŽ""‘JIŽ"AÇ!a`q Àä âB'$B!"MÈAÎ9 8„ˆI $QÌ9Έ„ˆ ˆèK¦N( @‚'ˆ3ÿÿÿûƒýoºÿ±_×± ø¤¿Á¼?™ oT¾½ŠÿþÕº {vë´¬ …#BA„Š„‰Ç ƒ‰Ç8øˆ‰$98‰!ÈAÈ7DJsŽ' „DN9‡ˆÇA!Î(By „„A#ÈDÂQÁ8IÌ9Cĺ…_ëýëüé·ž^¾y/þ„¾¾Ó×F­œ^T&Ýÿ ßÿ¿¿G€_ç—ñQÿñA$‘# „IŽ"HsŽC „§&8A Ç!!Ç#r8ˆˆ„ˆŽqÌ9‡!G8âqÄl¢ìA#ÈÂ¥.eÒ‰´)—B‚ˆ"èÀ@ÿÿÿü_ýöf½¾¿¦Ì×ù…íš*éíóŠß'Y¢ÿþó‹Zïô‡ÿöÞ’Ë­ß­„¤"qÄN9‡#BD$("7!&9‡! ÀâqÄŠ8œr£–9ÉÈAÄä „t‚ ‘Ár8B88BLpD|ÈU„PáØ ‚Bc-Ò ¸¬„Htˆä¥÷ÿ¶—í­Ó«~–¶¿úêºê]'©uýÿtÚM¯ë~æ·ÿú‘úþiﯷfi´µ„Ž9ç±ÄDã„‘\„PI Ž8¤“"C„“ „N8ˆA‰!Äãœt„ „IŽ"LŽ*Ž)%1š%a,¡ÑÌE Â-tP?Ú ûßþÒ¿ -£ŽÛ 0ÖÑÇ­ë! ý¶D 4­ ‡hk}¥kjØVÒÖûKm+]#תü‹£ýºöU¶ÖÛ ÞœDJq‚eâ8BøB"Lq!‚&8ˆ’$B"A°q!˜9ã„“ „N>Lr1Î9p‚;„„¥D$y‚A@ˆúh¼¾XðDy ˜A„ ƒ ƒ „ 1V“@Øá±LS a0ƒ Á±A4ž98¦%> ‘Å8Dy&*¼b˜­ÅB#É Šb¢¡„ Ó „ JA0›MÅ=D§¦±LP l“ ˆÇ tA`sŽ"A0äc²8e‘ÂÈá ƒhBLq Àâ!",Žà˜BqÎâ'ã¤!ÕA ´ŠYp˜ „Vh Î.ƒïLSûEÐpÂ`ƒM4ÓXeƒ °ÓLªж &MµA”:>„CÄ Â ,C ƒ;ÃA Â©Çûûu¾×†ᦼ0ƒ ”ê‚ ”9‡A Ç!ŽBŽqÂDãn9Ç#!)ÂDƒŽ"'JÈjDƒXä‡# „˜éˆ“„ „D§8ìFC„R¼FÙ |DDDDDDDDDDDDQ‰ „D$'Däcœp‚c ˆÇ8á ÄDDº &Q„]F!šá~BqÔã˜rq!!¢9Çc‰ÇHB ¢ š$9À¸ä è!!8â'ÈH „DN9Ç#㣵\î¤0Ž‘àŽcI)ÅìN8A B"qÈQÎ8ŠC08q ‘Ù!&‰C¤Ahp‚ ÀâqÈAÈÇ0çD˜á!&8“tƒˆœqÎú!)H$ :„S"\ÃÈ`t°‚ÐDDN9Ç!8ä(â""Lp‚Œ98ˆAA¤"qÎ8A“N8ˆAqAD™¡.ˆÄµ8à‚…˰ãÄE}ЧŽMÂDI$5##ŽBLrC q8æŒsŽ) D Ö9㈈éŽ!"‚HƒŽB(IÑ„" ç ŠYí"6¢@œYÜÌ®W™#%t"’È™̽PBCG#A¸âqÈ#˜p‚œrq8á"MÂDDƒ‰1ÈqŽB%!‚cˆ‘#„$qÈhO!!>!Â#éÈ08 Y¿Úge;•gë„kj›c„„RH„!!ÜH8çIŽ$Ç‚‡0âqÈ*Ž$ÇŒp‚ ""qÎ8œp”9êqÄ,E1ÈBheèÐ_Uð~ÇzAÓ˜p‚HIŽ$Ü „˜äŽ%aÂD˜âBMÎ9âqÎ8ˆ‰! @Üp‚&9‡&Gd|Ž!HĨîqÄㄈ8è ‘!؉ ˆ BŽ…eŽE»ÿ;_﹚ÐNvkå¸Ò´LŽEÂÎ8`p‚:BqÎ8“u$9: „ãˆI"r ˆÐ8l㈓sŽ"HŒq‚œq‚E$$üà‚ „ÿ‰‹ kþÒÿµêø|:$9‡$8„ˆA0…!a¤qÄãœqA“Dãœq8éh„I"!"SœqŽÈ쎜q‰8Ä „„EÑŽXC*Ú© 4¡a$þ?þº_ª!")q8æ$H|D˜çN9è!8á"‘ç!Ž‘8ˆ‰ AÈ7„sŽ(!$8A$‡8êB"SœtW !! ;  ‚# ‚!h¯ý?ÿ÷ë!ÂN8¤A Ç8âS¤$4"„„ˆ„‰Ç0ù1ÂD˜âqÈQÊrp”8‰Ç8äc„ˆÇ!$8ŠI¹Ç,sŽqÈQÐC+â#â&¤]ÄB ”9x4A³ˆiQo¯ÿþ—¥­hㄨA28P„BDã „ „˜âqÎ8œq"",Ž2>Gˆˆ`r‡F8ƒ„ŠH ‚a Ç8á!"!ÂŽ3#44@’IˆˆŽ…h¸q„A ]uýe?ÿ]}Uˆ „N9‡‘C„‰ qÅ!‚c˜q&9ä(âB"Sƒ‘ŽA¸ä(âAsŽF9‡! ÀáÂSŽ""MÄãœp‘ "qĘæ™¡Aè!H‡>"!aä)¢ò\¡z­ù²I|U%;ÄJ)ÇI!&8ÚDcn8„“RcŠDc‰1ħAŽ!#Ž!$4"‰DI‚!&9â#œsŽB$‚e‰N!0„â !&Ò•"\±Ð*UÇ DfÎD‚ÈÃ(gÐfŒä 2^]–Häs'f²ìŸ“Âì™v]’‚‹”¶H/0`’c03|gÌáaœfÌB!Iò`™¶|‹ ˆ[/ З“²ñ¡›fŒÛ:¡œ3æm FŒÛ<΄ffÚ!x“” ÐÌ a‰C˜q Àá)p‚cœp‚cˆ”âLp’GBDBN9Hf!$3Î8AqÂR8ä08ŽqĘä(â(NÇH!/ˆ™¡w)Õ˜@¥b"+£ÛÂhÐð—W£ãÂxF‡i„haƒ´Ûm4| g¿nƒF‡é£ãi§GÆØ}醄km¦cì&¡ºbÂ><'i£@}ºaÏC@vi£@xAèð0oA£c¤$sqÈÇ!HˆA"aÎ8„Œ9‡ArÇ8ç$C08ˆA DN9Ç!œp‚ ì!‚B'J „I‘âAÇ8ñ#HHñ„!ßCŒÎPè_á&ÝLi7 XnPðËB ‡G¤Jãl;£ÛVËÉ:áÑâ}ÚVÓL$›iô˜Ý‚ô›(v“ƒ2(öÒpèãá6­‡G¶ °à“h&ÃÅ ÃÏÌt&ãßn$ÇHDㄜr8‰C‰Ç8â%ŽB'BA$Ç!!ÇŽqË „†Äƒ‰Ç Ütˆ8âLp‚$8A‰1ÄBD „çN8A 1ÄBIŽL!•Έª.¨r9KrA~­ŠnŸß·ÒÚJÿ®ÝëŠ~)ºÚ§§Šn¸§Woûmúxÿêô½þ&úÕïbž)µa¶’«Âbm†ß½ñM§ÄDBA'ãˆA“ÈA ‚N8AqÎ8œrqP‚aˆ“DDƒˆA`q8ç…N:L!8áчHŒsŽ)‰ÇBkGD$[K7Œæ $©QÕë]'ûãõâ©+øþÿ\mþ_Ò¿¥×§úK­öô®?k~éÒ·ÿN¯¦éÿÿÁ”9‡!ÈAÄB ¡HD „DBDã‰Ç†¨âC`âHsŽ$E#aÂB ‘Á{B"B$Ç!Bq tN‰ä|()s‡A(~q}ï¿ý^ú]4¿tÕ}zßý_ö«¤ÿú¾×ýý¬~¾ûÿZ_õºý÷­¬ ¢¥9Ç&Gd} t„ãAÄ‚$Ç!Ä㈔9ÜÄ”9ãˆ`rqŽ$AÌ8ˆ¨‰‡!£ŽaÄL9Ç!—£»ÂDR±Xx—I'· uë] t>Þ;CÿýŽõ¯ëýWÿÿÙ Nèaÿ‹l/ëßë§újÿû_h$”ã¤!!!Ž6A8äcˆÈÇHŒq&çh „$'H äGc‰! Àê‘Ç#B8AŠBqÎ8ˆÄJšÖ~al!Æ'!‡ûÿ6?ñ_×Ó uõû¯u×í¯ßÿWøk]ƒý~ Wýü{×_ø5ð§…A$D¡Ä˜é#†Q|!Ž‚aA2ã „ „N9‡AÐ8jŒp‚ â$ÇA œp‘‡!(t‰Ç&Êrrr(ò¹ÖtAh †¡Jckÿ×wø-qñ„ÿÿàпÿ”íÿÿØQÓøº`ÁÿÿCý‹ýƒû¶)¤aÂDã„‰Ç ã „DãÍDã¤!"qÂR!nqÄDâLrq$9Ç!N:h „Dã„“ „DDãœq&>BŽÒК!HM£ð¥AM£2¤eÿÿ_„[þªO‚ÑÿöðÜøÿþLZ½ÿÿ¼ºì?åÙAÛ[ÿÿÿ’~‚ü0Â-ý\Zb'sŽ)q!Ž$AÄㄌ9!ÂR8äc¤$ÇSŽB'ã–9!Ç8âLq$8\p‚0H „N8œsqÈÇŽqÌ8A“BGN:‚Bré£Ë3Òˆha4<âÿü ù«Â‚ÿýÒèÿý7¶¿¯ÿïÖ ÿŽ  ›ÿÿý„;òÓü6Oè,YBqÂDã‰Ç b! ‘‡! ]ÂD$$Ç!‘N""$ÇC‰ ÁÆŠ#qÄãˆHTãˆH$' „ãŠN8A ÄDBGA)šÍ°ˆèPÈè%ÿÿÿAú_ÿ°Ò_ÿþ¿ÿÿûü÷Á°—ÿÿÿ®ÿƒ¥ö—Ac„ˆH„ ‚H£ŠA"‚Žw‚ŽqÈß Î9 ã09ä#ƒ‘Ž'ƒŽ' ÐH „N8A 1ÐH ‚c „ㄈA2ႉØhÞ(!siHèG’EF\þõ÷¿éú_ÿ D„Ý?ÿ»M×ÿùå¿ä„ßþAï_û®¿ÿäè7_®÷&“BEN8H鎂(qAsqð‚a ÇAåŽq ‘ÆBAÇ!&8‰ÇAŽ!"q‚cˆ „Dä' „R‚Ž(®+2¡Eóèþ‚:ätBa¸˜J½ @…GÿuÿÿS¿ÿÿ ¯í¯ôÇÿ¶¿ÿßož_ûªÿÿûûÿ畺¯ù…a4'#’ „¡Ä¡Ò‚8çJqH ‡ „N8I$A¤$R!Ü „˜æˆjIŽ"S„‰!ĘâqÈQÄøB"¸A%…¡!Ò4f¾—ûúê]w¹¢Û4J¥×ÿöç.ÿý³EúZÿí®Ú¹§þ—¶h»üºÿz¿óDÙ¢×lÑùõå×Z«KIBt’cˆI"‘‡!‚t„…N8‰Ç0â$8á!8â$Ç#H6BLqA Çc„œp‚ ¸áËÅq´0„DÑAPœCõ ïêëk¯ÿ¶½«ª¯ÿÚKþÚþéû@ˆúm¯þûiwW¯kߪÿÝh§ûikþ¾ÚÝõ_Ðçr‡‚aAq&„“IŽ9Ç‰Ç âqÂPH!8ä ä(úŒs¹9â"LqŽ$ä á)qÂDÃAÒ! „JM ÏÉ!>ÂF] Ìfµ·Kwn­£Ží [[TÛJÑÇëw!Nû Ú«£ŽíXiVÚM¥jèã´ÖÂ[ +i'jë«i-îŽ8Öõm+[[a…a¤¶¬4–í+[l!­ÚA„3¸A0„DㄈœqH ˜B‘Ç!(sœp‚8âqÂDN9‡ŽqÂDD¡Ì8œp‚"C8çŒq&8Aœqc„ˆ“ã‰!Âp‚[š¢A —IE.†; $ƒ ¶‡pÂ0øØr, Å1HÐ@  ÂlqZ0@Ða6*Âh6+v!1PÓb›L Ø­†›Ø Â/¢‚h6( pEð”UL Ócb¡ ÂlSƒM6)c„G‚\Nè ÂlJŒC„‰ ™—r8AqÄRŽ$‡!c£‘Ž""qÉ0ç!!C‘ŽqÈ8â"qÂD‡!Ä›œ|ãˆAŽB2¸²ž'ˆ™ “!{ÓAˆM!l* ,Í4Lðƒ0šh0DtÐe 1ˆˆ†˜B!„â †ˆ†„á„"„Ða0ša5ÊV0¡a† „!ˆAØA¡ ¤aÂHh#B"‚$çB ‘ÆG–"MĘâ"qÄîqÄã„‘‡„D „DƒXâ%:Dcœqdp¡‰‚hèHŒHèN!"Èj(‡ñDDDDDDDDQ}ÄDDDDDDDDDDq„¤AÜãŠA!&8 „ㄤ“‘Å#Œ‘Ââ8Èሜq8ä æ$%9±ÄãqÄsŽB*w8âqÈ7 „›ƒ„ŠHDºÍ´¦‰Ž!ø@ƒ}0 „ „JrsŽ‘‡„§8â!Èì!cˆœq8ç „âqÉŽXâ) q&9 9Ç# …!!˜9 9ÇŽ’N8A 1Ì8A‰1ÂD›Š+˜F© Fý#Ø" åp‚,Ú.‹¯¤ÿœ$HtB’Iƒ¤"AÇ!C„œp‚ÂB ‘Ü$qÈ`q8á"qÈ7L8‰Ç!‚㑎BPè!8á"œsŽ$p‚+§B$ŒH4ˆ„„GA0@„"éuHúMI Ç!c‰Ç;‰q8á"w)ÂD „N:BqÒÒA Ç‚ á!!ŽqÈAÈi!"Bœq)ÂDBDá"(¯¢EG’ „º¢*„DÐA?ûiiR!‚ƒ„„sŽF;N: #qÄㄤBLq„N8“…D˜âLq!Ž$Ç8â‚!""Lq8äx™¥„DDº.ŽdtRxýµðÂDcœqdp¤q‘ò8R8ÈàÝƒé ‰ÇHNâ' „Dã‰!ĘäcqÄ „ãœr1Ì8A ÁÈÇ$8“ „L9ÇSŽ!$AÂFã¥%ˆEzHŽÄÚœE 6!bA""qÂDî' „ƒˆ„„ ˜B"$Ç!ŽaÎ9cœp‚dpÎG ˆG!Ž"qÎ>qÌ8œq!ÇdpΊIŽBŽqÈÇHh …%A"$±‚Dás‹Ù‡ã„‰Ç ‰ „N8ˆ“N8A‰1Ät‚DãUN9ÜŒtâ("1Ì8A 1ÂBDPEŽqÇ8âL|P“C›ØCÿˆA0„BHƒÑÇ! „BG„†qÄ „L9NLŽÂ8â"!$Ç8äc˜q! ¦:I‰Çc˜q!HŒq8á(®„Dhºù6VˆÌì[#çB:™Jd‘œ‰iåY•Í í-–ç|쉖8A4aÄN8A‰Ç8â) Ç!G Ça9ÇîIÎ8„ˆŽ") 1ă á!8áÂŽ"$ÇŽw#㑎"B(¯ZH‚¢²ÈÄc9„dèóë+ã&†w2N7´ÂG¿»<Ȭ%L˜#[0QgžÂ ¡&G áG8äsŽ’ „Jã¤!" ‚IŽ$Ç# „IŽ$‡&âD!ŽB' „çŒq‰V„$P’.a8@«„×ýÃáÇJðÞ?„ ‡„¼N4¹Ç! ã Ž9c¤8A æD㈘p‚c„„˜ã¤g8ç†qÄãˆÈ äc¤$3 Üq‚(âLq!‚8á$Aås¢ Š(p» A ˆ$›“Dÿä-={[DùP´w<0¨o»îÙ£‚$8A0„R8AÐAH …#4qÈÇ0á""8œsŽBLq&9ÇŽB$Ç#ƒqĘá"Hq$8œrÎ8A 1ÈQÄㄤF8£"ŒB'DY 14Dºû^EûÚÿ×ÿ}ÒÛ8*°ö½ªv!"'D „ „BD›©1ÄBDR!Î9Ü„ „ƒ°„BDDN9‡ˆœsŽBPâ(!Î:A%8Aˆ“ !’„DK÷ñÿÇÿÚÿÇ×ßÄ[bSœrsŽB%8HP@Èã#äpÎGÂ!)Î8ˆ‰‘cœr:B$Ç8â'sŽ)qa”çR qBR‰Øh šAPAGÿÿüýtÌÚw¯ŽqÄã’%aÈ9Ç„ „I¸A0„ãŠDB „$Ç0â$ „PBqÂD›ƒŠC"‘ÇBh‰Ñ3B™$a ÄaŒâþ—ýõ×÷¿ðÌ8H „BJqÂH é Ç p‚‡cŽ c„‰Ç ƒ„‰AÂDDãœq8äq‚ ƒÄD!#£D’_×_ýõÿ¯ÿ„ˆ A„ㄠBqÎ8‰ÇÜ„É1Ò $Ç0â"qÎ8‰Ç!"$ÇŽ2¸Þv±´úäL.@—ëä·ÿÓ¼5½~DL±Î9Ž#„„ˆˆ¤aÎâqÎ9è!ŽqÄBRŽ@ qÎ9‡$8A‘,p‚c’ ts<Š’t‚"? DxfÈÐϳ‘f Î=š›7ÆŒùÍ"&@¡º¹0ÌÌ eѨf`Œù,м¹’ˆN˜d”á̳6Á¯63c8eðˆN$å+%dpJdüž„Ò¼š„È$èá“D,²vm Ya8ãåÈùù³3æm”„lÌl! ƒ„‚IŽBS©Ç!&9 99ÇHD „N8HDH1ÈAÒ# „ „BDIŽ"!"ŽÚtvR±Dmhâú=¿Ðì ôU´Âa ÂjcG°ý­£ØÚiÑ­»z4?G€Ñ­øMÛ[¦±þÕh¬{ Ö~„Â4;G‡ Ð#3îÂ-ßè0a¦ÃõÑ÷Ú5·7tâ"Lq8á$¨DD „˜á+‡Ž("Ç8ç±Î9 ãgq&8ˆAœq!¨:D âAÈAÈQÈÇ!¤"FÑB&Cð“a Ò °èöà °é¤G† >é6 Ç¡«`Ì Ç¢'j˜I6áô˜í´¬3 O +cÝíßM ÔNØI[£I°Åã&Ò ȇG‡LJÇ¥›áÒ°èÑèö  q‚(âqÄ[ŽqÄBDE"1ÂDD „Hhp‚c‰ŽqÄá' „ˆ9⊄&U#LS"«<‡ý»I7îÛÊ}\StÛ¤êýMþ›÷ßJÝôŸÒ~i?°ôÿßßßv’w­&êô–´è/±N´ÕäASÿ¤ÜBoŠyÇ!ÄãœqŽw!ŽBÈè—ˆù|!‚c‰ ª99æN9 QÈÇAA 1ÈQÄDá8AˆA 1Áñ "¤Èkéz®×W¥«Õ½ïWÿõOîßJßÿM÷ÿ»ÿÝ/ÿ¯zé_Åk­ý_bÃÐûëk¿ü2p‚‚ˆAÒAsB‘ç „lRA Ç8ä(âqÄDR âC1Î8œpœqC„“Œp‚! åŽqÄã„’H"ŒŽŠ B"GBBa !Gþ»ÿ¥½þõú·¿ÿûÿ­_Ò~´Ÿë¯ýw÷oÒâŸé¼5ZúÿZNÙßÿêÿü …!c‰Ç!‚E#¸A0„ã„A"qÂD›‰Ç„ …#¹Ç @è!!‚cˆŠBBDB „!"’Ð¨Ž—Wm¿Æºúlñû«áª×ÿ÷ßýÿÿ¶<1ӯš_ú¯ÿoÝ_ýuíh$%BŽ'$B' œPC Ç!8á"Htœ „ˆ:B(%8éœqH„ŒrvGd|"1ÂN8AœqWÍ®‹¢&ˆhŒEá4K8½>—úëþø5ÿ þìŒ'¯ï¯{_íÂþÝAðÿïÿîéü}oaÿÿú£Ž‘á!"' š„w! q‡# ‡ !ÂE"AÈ8”9 9ÇÂ)Î9ç#Ž$Ç!!HBDG!HĈAÑNŽÄÐ XA 4*"tB¸þ7ã¯þÿ¶>°^¿‡Áåïÿøÿüÿ`ðÁ·)ÚQñþ†¿ûí¤÷ï_ýxA‰Ç!Ž“T"4L¸`„"L#aÂDㄈAÈÇc¤AœrsŽ"'qŽAÇ3œqŽ$Ü „˜âLp‚‚&8¡;t(!Q!ÙAäÇ*ÁÕŒ—ÿÿì94Ÿ¸ÿá·Kÿ¯þZOËú£GöÔ0ö¾‰AáWû_ÿÿ¿}ÿÿþEÆGG Grù/„ч! „JÉÇ! Àâ$Ç#㈉!ÂDã’Œp‚""‚!œq&éŽ$ÇHŒq8誤ŠNŽÓ£44% 'ÄâýŽaA ÿÿô_„ý`ÝÖ—ÿÿ_×î_ýx6ÝjÂåŠý§ÿ÷¢÷Êwõ×ÿÿ&Gdpp„†É9Ç’‘êAœqŽBŽ"qÂR!Î9æ „DD›ˆŠFrc‰ÇŽ$ÜDã„„Ê„$ˆDDD…£xœC‚%ÑÄ]~¿þ¿°oý/ûÁ¿oë_ÿÿýRþüÕÿþ×ÿì%ÿoýÿ_û!ÂD á$N:HAÌ8Aˆ‰Ç8â‚„"$Ç8äQÄR!–PæD§8ä æG8äc„Šqc„‰ÇÚFPˆè—ÉÒDt‘.Œ ¤" "9/ûVß¿ÿèâwý/<¬âõ7¼qW÷߯ž_ÿ¯ûjhŸ<‹¦ãŠÿÿÿ<¿Š_õ×ÿÿ÷„‰n8A Ç!Ž&Gdpr8Èùa F ‚ `qÂIŽ%"ГsŽF9Ç&8‰N@ÄN8ŽA# „R# •4"]I(!P‚à«ïÿ÷ÿvÿÿ¯õÛ»¿¥ºõíþÿüR·öí~÷í·÷ßèâËúî¿ïýø¤HtˆA0„ã„ ‡ sŽ!"""qÎ8œqH㈒ã¤C(qq)Âr F8ŠD ç±ÂPD â‘8‹"èÖ”IBhPø‘¬E¡<£ï“¯ýëþöÍq~¥×ÿÿ__ýÓšù§ÿ©…ÿuë^Ù¢òu¥æ‹÷3Û¯Õ­r… ÿ÷Kõؤ'†qÎ8A)ŠN9Ç B!$AÄDD†ÁÂIŽÈøB"qÂD˜á"&8‰Ç8âqÎòaˆ§„”ª0’4aœC‰äƒí™­µ^ëm[íoýVë^ûÞ›[@ˆöÚëi6—¶—ªé¤º½«iZÓV»k~Úë·ëÿõ úëýëÿg)Ç B*AŽB$Î8A Çc‰!Ęä(çŒsF8AœpAœr Ç$9äRcƒ„“ ˜B"LpŠŽÄš" ÕÁˆMDDê6»aZm+[I^µ_I°“ammq¶¶ª·i{¤ÚWm§Ðm(ÖÛ Óí´wëV¶­¥á°’°ÂV•ÚM£ŽÖÂMé­ÈA·ªm+[U¶Õ4ÓM60‚D‚c „›œsL!8ä è!ÄI$ÇÇ8á$LJˆA G!&8A¤F8AqħT¨A )Cp¨­£h¾N‰Naól(h'Ø­Š  áÆ6( ÓA§ŽÂ†*(&ƒbª)ŠA¦l"ã§b˜« ±)æ)Ši4Ø ¦ƒ ÅwÛ°E䘨"ò»LPD!ÅA’cb¬&¨¤Â &È ˆGÁ6).(M0ƒ ±A4ÓM6"qÎâ%ºA(- ‚!‚‚ äc„“BDDã‰Ç0ä6aÒ!‡0ärÇŽqÄBD â'DN9ÜŒp‚`ˆú™¡DRÐaš‘V¡4="º‚”¿XaPaPÔ4ì Á`Ä„ =h4B",! ÂjCL†0ƒB!‚ ÂqhA„8aalS(`A„Â3A„Ћ9ØaFt 0„OâÂaÂI GRaœtˆÇHÃ‰Ç ¤$Ç ƒˆ‰ÜD㈤"w!! ÀâLq&:GDㄉÇ!•k¶¡LªŠØ²Ì×b6# ˆëˆˆÐˆˆˆˆˆˆˆˆˆˆˆˆˆô""#ˆˆˆˆŠ/˜aˆˆŒ$‚ ¸‰Ç8ä(âPá#"B’IA I C˜q&9æIŽ$Ç!cŽaÈAÒœã‰Ç!Î9Ç!ŽB'sŽ­O±;B".uFÄGFÐHTB ”½>ÿ îÄãŽqÄ¡ÈÇcŽ! ˆ“ãá"‡"ŽBœqHN8A 1ÄçN9Ç ã–8ˆ“ „JsŽ"–B"qÌ9âBa #œ¢¢·BŠJO#A @9…¤N(þEtº|A N8AA2;#ƒr89!FÃÌ8A„ˆ˜p‚8áÌa„Ð8Aˆœp‚8â"(!8â"Lt„ãˆ‰Ç ‰„¡‚¢èú8„«DB|$""mˆˆYÅúú!…"8„“! ¤aÒ!Ž#$@Ęä(â'…îB)kŒq8âDŒsŽF:B$Ç!„°‚±"YBCEˆåZW”€…%‰Ÿÿ×× …ã‰ÇŽB'Ã’ÈAœt‡!H „˜âqÂH08‰C„¤"qÌ8‰C„’ „†`âB"B'$BPæŒqŽB˜Cd|ºP„Ö„ BL¡…8B"&´!¯/¯I[i &œp‘Ç3°„‚"œs¸ˆ¤$Ç8á!!„DIŽ9‡!Ž"qÎ9 9 9ǸHE!8á ‚AP†yD)äP”HÚ>Ž!RŽˆÂ D­ /ðìPA†!BD „Eqô‰aÂBBPæŒp’H ‚8âEN99 9Š8ˆA‰r1Î9é$$‡!ŽHpˆAÎ:F-!’i‚¥Õ¤¥ÐæA Ä£FК! óµ?ʤ[¬Œ"1ÄBBRRŽ"Pçq8á"$‡ŽB9Ç&G r>#ŒŽŽ2>GáˆAˆœp‚HN9Ç#„"Ž¡n)Ê„ $aB<‚ìÕA„!Ф4R”ªþ8‹HBIŽ"qÄ$PäQÂBRAp‚há!"'DîAÂGCˆA4aÈ8âqÎ9 8œr Ç!HDã„‰Ç  q)B$¡F"ˆAšÐ‹DÆ$4"q¼Tú±)Î8œpA 1ÄNá"qÂF㈤4qÒ#N9ÇH†!cœu!!!&8ÒGE!8á$ …!!ŽBC hº ‚Q6‚ 4BkBCGD&wAr”ÙIAŒ8A”9$’N8AŠDc„ŠBBqÂDJp‚aˆŠD‡0âqÂD š ã‰1ÂD „D˜äcœt„Š8œs¾qÐè":Î"èú=#é&}“DG b-Dý„ˆŠCGq)ÂBDã‰NB'Ȉ „L9Ç#Œr ÇÎ:B"Hq‡Cœq8é F „DãœqˆQB‚#¦„œD ˆ¸–£ÙÅb+óµí:,ƒxfîqË „PH#Ž'$8è!8á!)Î9ç…XBqÄ „ˆ8°˜BLq&8HD㈓㣈AG!ŽqÈ£œqP!!HŽˆøA ót'i2tP‰j ÐÐ&&húE9!Ѿqd!Ìì\ÊY–óge±ÂLqQ&9æŒp‚0çN8â$‡!8éqHIŽ"S¤)„„ÐA GI ¡ÐA3ñü!#£4](p‹ˆˆq8‚EР’#¢:DQõÿÇ×ÿüwýë­IP¦Ãš Õ°„‚‘á"A4Xç㈉Ç8á,¤ˆˆœsŽE㈈AH„ ™q¡ œsŽBŽ"‚SŽCœtˆÇÂDã¤0‚Ý1¥!³kPB|¡£4GB] (p‚EàE†Ù‡!(pf/þ¿ÿúÿûÿj †ÝST²‡!ŽB4B*qÎ91Ò8á4Y1È7R0á"qÎä â$ÇnPä(ãB""BLsŽ!„"B)Ä „R (cC„6lèÚ#¢: [GЩ¢tU¯eÓeÖ5ÿõÔ/þ«ÿýüãÚh6è$ „œqHDã ˜V+ŠJÈáàá 1ÄD „DãœrIŽ"aÄã„‘!Ž"MÌ9‡)Òc‰!ÅJ„a ‰Å(+tC‚#¡b2:iDˆÇ$! %Dv=!0æ…‘Wæ,vÍæ£#2$eH0™thŽgãÑÍœ^r¦^åP®=DðÀD¬•’²œôùs:žU¢>`ÉÑìД&Nì†z’ñý×#wþ¿ß¤Nf9Ç ép‚à 8äc„„ ‚JHƒ‰ÇC‘ޤaÎéq$8A‰Ç;‰Ç8é#²8T$Ç8âBLp‘‡‡J‚&: GÉüŽ+J„ ‚bmFŽÅЊaA ‚Ø291#9Rý DxÌfÈÙ!pžòvN~ Ð"ñó ‚„Ñá£Á>li¡h"<šÅÚq`˜A£ÙÝÿèðÂ4>4x`š " Ù `Œ>f£Æ"ðO¬Ùœ ‚#ÄL™ƒÿëÿÅ.a„‰1ÐBH¡Ë „ã¤( ‚ŽB‘‡0âqÂE,IBB‘‡‚a Ç8áÂEŽ"§q$8AAœs' „E$ %& (xB(¾Ï…,æÈ ‡/„ÔŒÒGРBGÁÆÐ‰$ÏAÃL&–†A–ˆFv‚ ‡M´ÂM¤á–Ї`ËD;¦:<0”Ji„í´›Ý&uA6 ³Áš9hØÝw¤é=w‚ ‡Ÿ¥ÿG‘Ç ƒÂD‡HF°‚‡HÄá) BqÂDã‰q!H „‚ã˜qÅ"1Ç!&8‰Ç!H „N:IŒ8A œs¸A Nƒ(p–à`¤t](u{ IGJŒ"t{1, jQÔ¡ØYÅíá&ßaWº8úŠmwœ{£JÒwtqÞéu»£wIö½Ý¿í+اtqÚ¶ÿ½$Û×"ºufza¶é[èöþïÿÿü7(p”áÂŒ9‡‚T ˜B'N8¤w s9Ç+‘Ž"'…!!8á$AÄã‰C˜p‚ŽqÄã„„ã ‚BSœq!ÜE!DG¦‚ÂM …•á„ £è¡*G’8áèE²àœúêþ÷Ýý/­+Òúé÷â¿×oëâ­,}/ééþôª¯}]û׈ZXÄ-­[⟴¿ÿÕà‰N‚8åŽB)$;„Š „D ™r ¨!8ùÇŽAÇŽqÈÇHŒsŽ"$ÇHæR‡0âPá$ÇI‚ŽXáÅAãÙ%ºuŸAD „N!ÄE*S„LŽˆh1ñÿIô×Þ?§ø®6–ïö½wøÚÿÛÿû[ë×ÿô¾¹|ÿ—úúûV×ý-¿w I‚ „N8Hi' …IF:T ‚D0„ „˜çq8çŒp‚8â%8A0„ãœqŽ$ãÀé BqÂCœp‚Ræp<ÃÁ:¤°ŠxHTDŽqBØD'! ;•a \x¿·é~‡ýñÇñè~¿ñëýÿÿ¡ïûî1Ãïëýí¤Ú8ô¿KÒìY‡&œp‚8é ‹ „N8HD¡ÄD „BDã⒱ ¤ˆAÅ$á"w8ä ä3Ž"'îAAˆA0„Nà”Ú¤!HÜE)PI A"è‚! ‡P•D'H’ªP‚Ò hªq{w÷këõ­õìþ×õÿ÷_ö¿Þ¯û Õý¿öÿÛÿbSت¯ŠÿƒB!ЄˆAŠÃÄãœr1Ò8åŽ'"NBB"4"qÎá$ÇŽB'%8qÂHf4w8çHQÂDã ŒáH">—A# œã„1R &ҙѢHŽŒ!" ‚B(r¨rK<A„c­HG!Ç ÿ_ÊŸ ?ëî Ž:Ó.•ƒÿÇÿÿnPÿÿúÿàÿ­¿­¿ì/ø0X0ZüÖþ¶ Ç0çN8HæRŽá$ÇA‰Ç8á"9Ç!!HEC8á"qÎä á) 1ÂBLŽ288H"‡E‘б‡)ÄV]‚)ÏM&‚ÔCŠæhE!AF(î’8%‰7Lÿöׯßþ?ˆáõÿõÿûiÿÿþÁýýÿßñõ㊥øooØa„‚B „' …#ŽŽBLr1Òœ ˜BqÂB$‡!HäF9Ç!ã¤%9ç$BL!hâAAA „'$F9ÇhÐM‚ ¢C‘Ž(¡¢ùt‚¢>A N"ˆ"Š’BD|ŽA ˆ¤è”„óëÿúu—ú–žòÄ?ýýºt¿ýå‹ÿÃk×û~ÿË-ÿýû~¸l4‡!‰Ç!ŽB"qÐCˆ“îaÎ8“R8á"AÇ!!HD „q!!8âqÂIŽ!$‚3„ˆª VPâq×d}HèhPD}$%)tGGà@²èº8ˆÄ¡Ð•„a6‚APýÿÿÝwÿ~¹P¯ÿûk~¿ëÿÿæ£ÿÿKÿ¯õЇ÷ÅeA°‚Î8A0„J „N8HNç ˜BB)4@Ä$qÌá"qÈQÂDã„„˜â"qÎ9sŽ"9ÇJŒ9Ç#E( ‚c ¢‚ˆ„ º' %PHBƒÃWQ!$b4L×S‚. RT‚#‚þ¿ýµþ¿ÿ§5 ÿÿÿñ Vëþ¿­ÿÃú×ì0—ëÿõOïù©{RÌ9ÇŽ0á"Pè ‚ŽB'Hƒ Ž= Aˆœt„§8âqÎ8ˆAœs¸AˆŽqÂDㄔ㊠M,aA:A(BFé•aEd|Ë¢è$m ¼Í Xa A¢OÈùtD‡Âÿ¯ñLùåïý·ÿyå¯ú8Xãÿßÿ_Ì÷ßÿA!k¿ÿš<ãÈwû÷†Ðˆ‰Ç! ‚i!‚a Ç âqÂq(r1ÈAÄ „I¸ŠN8AœsF9Ç#î"%9Ç!aœrÂRA‰aÂ( ºCŽ0ŠYµ!q´AÂIré! ‚ˆ‚#LÛ¸He:GBF]hAˆ‘\/÷[¥ÓÚÿÿäëó‹÷4Oÿúµÿ÷ßõø"Ÿý¤?ëëK_ÿîĘåŽqÇ&¤w(3Ž8HæN8ˆHãˆA C˜qä#”9p‚‚&°ˆÇ!œq8æã–9ÇA$‚!œ$"ŒIŽGA q„¹Ç$9œRV}*@¢"‚0ˆè¡‰ÄA®ˆâ ”\På¡Ê„»ÿ{ºÿ¯ÙšöÖëö×J×_ÿkûIÌÿöë_¿oúëûÜÑ륙޽w²œ „Má"4‚I„B‡H „I¸ˆªDcœsŽXá!#a9Ç  p‚p‚(åŽÈ쎅BDãÈAÂD „CDÞ…Â&é†]ÄUBŽ"ÒEÐRúV¡"1)Rñ Qù…Ý&éWm Dnµm~Ò¾Õtqì5µÑÇëò0E­ý6—in«v·Û¥ëÃÒôÚþ›¤ê«­+ö­! ‘!ÄR!Ž‚H …N9ÇA„p‘ÇSŽ'28ÂAÊr1ÂDDãœqHãá"qÐA!(#9ÇK8â„]Ò#IŽ‹FбC‚°QÖ¸ˆ‰š|B™¤DN,x"<M´ž‚a(aA¦Å€ÂPÂLP@⡱LS0D$ØL ä¦á0˜A E䘮H6Ò„ÆÅZ@™] Â\“âì$›iC 0M0˜AÒT xM2:z •¥!A$F8A F!8á"#˜p‚‡0çqA N8H„ „ㄊ B'rc‘Ž’B"!ÂHPB"$Üã ‰Ž¢ÉÔ$EG„àˆÇ$8A 8ˆhÄ#çÐAq„PîŠu„䈣Ó/‰Ž$h —eÃÿ Å+N›iµá§Ø©àSá­ªam>á‡ÓõAŠ / lBUjU¨ÃƒBM†„ж*ÐvlS·M„¢›*Å($’0á' …! „IŽ!"AÈAÎ9‡8â"8A A"'DN9ÜB$܆Pâ"qÂH.:N8HL8£ÚAè!Ë!(p¥B$Ç8ù!ÂCJ!„>޶4]YB;š<‹xH4"‡ ޱâ’ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠˆˆˆˆøˆˆˆˆƒ"-ˆƒ ÊÙ( aˆˆˆ•<1Ò!P‚a H!Ê"1Ò0⑇ ‚Há$Ç8á"‘Üã‰Ç8âDDN8”9 8“… „N9Ç0é‚Rn$1{,8CrC¤'DBàˆøÂ!Rq.‹úDèÚ¢6¨D¾’ "A­EÿF;ñÔˆˆîÅ$‚DR0䜎")Ò„Tã‰Ç !ÄPBqÂDîqÂB$ÜBG „N8ˆ”ãG$Ab!iJgT*!rtB"®HæaH!¡ n ˆ¼ „ ˜Lb+øKô›Pb“fî Ž8„$(!8á$cœq ÀâqÂD㈜sŽ%BŽqÈ:ŒrÐBqÂDˆ8„Š„n»‘\ƒŽ-†ØBaC‰cŠ&W•YT?”8±# ¡ ¾"o;AÒ !H ´-²:"ÊqÈá§ôŸ„”=$%: Œ:IsBqÄIŽBŽS‘Ž""B'ƒŽBqÂR‡!!ŽqÒ8á)rp‚cŠ!‰1Â&Èê˜é)C¤! ”t"B ‚†_He,`ŠtAB"%O":ˆ”àˆá ¢_<•Ý>;iá„’  ‚R!Hp‚‡!8á"CœqdpΤ§ã©Ç!8á' „I'㈪Dœ …#8HPà ‚ dž„DT㣠BåÑ,DD`,I„.§©¥ b"„ã×í¥«ib‚H ‘‡ * "1ÄㄊœsŽXçN8A”:Jw8äcœ|ƒŽ’H!¦ÂR0âqÄN9‡!# …B’&‚0ð±H§´‘…‚ÄC`êÐG‘„Œà© ‚V¥R"H%JPŽdv$ÑB$ ëìëÃ&h$' „ …$AB' „ˆ8„…$œqŽ8HBBBP$'…#ŽB[ˆˆHIŽB¡#B!ØŠÂ"K„€@ŠˆRè(NØA ä†] TLº. @„M¬DToh!¾#¹]`nÂK„ÎB'$' „BD „N8“ A""%“RŽ‚3‰Ç!ŽA9C˜p‚ ”9‡!(q"Ž…ƒ—QÄŸ, @†… 8„áDx$ †%øa*GÈøâs#¤á}bOžGÑ ƒ¹>>#°‚H „PB’ÎBA C˜p‚§!Žw0æã¤BqÎ8œs¸AA4"‘‡!œã‘ŽqÒ!‚ŽqÒI-_aÄŒv GHB"A#œuŽJ™tGJ ä4$4P¤ÂDt!¡…Y„“‚GA%Z„2?üt‚HÄ”ç „PB‘Ç’C BˆAœrp‚ „E' †Ž9 8ˆ ‚N8AŠ N8H¡Î8ˆŠDQÂIŽ’/›Ðˆ¤%@ B,GÛ@Ñ’˜±& Ä1¬ A ¸¡S‹ö)$Èé$' „ ˜BqÒŽqÂBD˜á$Ç!8â*MŽqÄãŽ"$Ç!G&œr:A¤²8ÈæGaiÈ(ƒB‡#Î9cÒ-ÂYt¡ÁëŸG’´@ð@„AÍhDDÜâýé„\àÂD ˜BqÂDㄊA!#£œp‚ŽqÂIá(!œB' „ „ˆ9:Dœ „˜á8”8¤‚Êp‚‘Ç‚@Š…8쎂H±áèXŸ±Tã‹0¯ã˜%‚.™Ì¢%ꆄ †_jã?êÄB%8Aœq¸Aœp‚‚dp¡J’8øA Dcˆ‰Ç!‚‚‚&Gp‚ag)0‚‚GÍë(pAf ›#Á8âTsh*¹åÑš‚`†PãAh)¡ÎÀÌŠα0dËËD÷h#‚!”á"qÂIa(!‚HîBAqÌ9c„IŽ'sŽ'…㑎qÄ㣄„ ‚D …!(p¥*Èù$‚# ZBT ‘ôD¡"帉1É:$- ¨Þ‚­ätaDt]Do3GÑt8AD¡Ë(’úPˆù: ŒÇ½0§™ÚÌw„v¶ÓؤCœrqA$"¡"'N:B§„t„ „Tî‘c „§ N8HR8á"S ’0á"Pé6’ØÄ%³Ž{DÇcˆŸ%Ð@‚(t\BáÒNBA`ÄPh"?ŽA1á¤åð‘!LZÇ#Ä4#ˆAaüFvèpŽáø0‚&ˆÇ!&8HHAÐBMÂIŽBB‚œp‚@¢&œt@„D „Jrœ ‡8á(!HDî´S¼ŽeÔVˆØIÆ„J(™ÄîF-ó;ô"èPT"%:¢†TÒ+…‰ÏÄŽ™CŽq¤¯û¹AÉ„I1H …N8A Î8A ‚BR3”á' „N8A †ÒH ˜C„”á„A YÜ„$aÂI¸A ‚Âl¡Ó  ÜuŽ‚)Å(rc᳎*nˆ—AÍ E8„0ÔHÒQ%Ó>ª‰ÐA ^]—$”E hÿÚ¯ké¶µÑN‘ÇTá(,ã„”ç… ‡8á"‚ „N9ÜŒp’D‡¤6BPä#ŠGR!H …qÄBDã„QÅcØe=N)ø¡K$± PþÑ!ú„º&rœ’×½k»eV¿_úMô „BA#‚8é Œè –wc„qÐB ‚H#L!Aœt„ ˜B!ÈãEMФBÂ!¡0å9C„…PäW)Å µ’a*}*‰ô,ú6’e9OAy„#GÔ~½ÖÒzÿû¿ºßvßÿ~é´:×[ýÿþÊ·ýõöÿ}‹ARA%A ŒqÎáч!A A)Êp‚8á!8⑇HNè!N#¢#¤²| Ž8PŒ ÅÄK."Â)ä|!Pˆè$) ""qfÜAáOgë.…ã¹ÅúV¿­¯ýû½{ým]ý×Ã×ÿÃ~¿ßc¯Û!Ž:ã–8I¡8âSŠ †‚Bw8á"B) ‚a'$%8A A ‚ABf„nMàÅ„ Œ$,D·$8ˆˆh±ÚG‘t9´8pcèÁí”åšBDwïÿ¿ÿþÿdhð~+¯ÿCì?ïúÛïÿàÿìC„Œ8ˆá)s‚3„ ‚XA ‚ Äㄌ8HG „§ ’ Õàˆè#Ž,ú $çôVaÁõhrq+GÒ<ˆè …£ˆ2‡@ŠHä@8Ö—®8þ:ïÞöül6°u‚ÔúÁÿÿÿÿÖÁûð†!Èì¸ L!A$B¨!8á*8á"S„‹„РŒ9‡;²8¤|!TˆHãˆCõ$8@‚`©-•aCÂ*i rÇ&á"aÎ:± 2:0ˆùô|LÑBÄ\`–Cª<=¯òz×Ééÿý‡ü±Œ0ü7á=ôÃÿÿÈÄÝþõðb¡S„„BUBB‚!(tŽ8„¤%)Š˜p‚AÚ N9ÊNñÁc¥‚‚Cd}pAeŽwìŠ9oŠÏB±4Byˆ©ôGÇ¡I"éÉÓþ|/ÿó¡ÿƒ`þ~_,ÿ,Mëÿ~ƒ¿ÿoýû5GrœPA"qÅN8A  „˜â§$qÚ ‚8á%8á„!¤"3¸B‘õb%ÔDBì"Ü ¨±Á8äÇ)Ù6‚"})0Œ ‚åÐ'çÐT •qD2Åÿÿÿ×ÃàØ7äVô¿ÿ·"ïÿÿ^ëýpo׍РXáч‡A‰ÇA“NáB‚R‡ ‚a ÇA!8á ×5GÝçˆp‚‰Cºi$^¨F RŒºö‰Î¸ˆˆˆâ"8ˆˆˆŽ#ˆˆÐžIœpA0„ „Aa Ç&ØHNá$Ü!‚™‘t„bƒ¤"IÄá"C@â• Cœå@!>@³¸BÂÌõ Ê ƒ!"™_ßÿúqÒS¸Hä%8Aè!A ÷©Q6ôˆ¾-RÜP<«!œq$Œ8£ÚA+A1eÒ¡\Gœ@Ž:DÇM?ÿõñÇB$Çnq‰ TOÇ"ŽLtG(hŒqI¤‰uÍ’µžA ©ƒÐFsrH&G G(Dt‘ôGCûÿ®Äøj7ͲDghM⠘ᄄDHƒG¡ œA*P’QPEÐEŽAi !ˆP‹á!üÈëõéª^v[˜Eò>GÈâ‘ñ„.‚B0¤3X„H7¡Ä˜çtL*J˜I ÆŠCp‚!„ÐÆ{;Dbýè:ñáj—@’´š¬DL8”9 Œ(Fú(X•4A¥>o°ŠA ¥8D|ºBQÁDO"èá4ÇÊꈟ.™ÇXˆA0U"lŽâHp•ª9ñHÄB'‹Jž< ¨ ˜*A9ßd|Ž… íV_×ø`Šø‹¡èBPÒ,B+rí$oµCGéÆÂN!;5FˆBI&DrtžÇ’ ŽÊÿ°1‘Ñ)Ñ „ò7 p‰ÁpX呎w rCÓ ð¡‚.¨Dqˆ">Ä¡Æ42t’¤¢K¯ÿ¤NЈ(TXéPQª( A‹.â&‚#ÅÐE GÑôBP¡U eXëE :H)[EIû÷£±E8á)´} B˜ŠHr‡JK é0@”- HÂË¡0„æ“&VH":„GGµG_eu$)LF"q:, AyÇ 8æqC㈄ˆ…Ads@Æ5)Ëi­"uòl6—úD" ãÒHŽª‹¤¢"¤‡qŒ¡Ð$¶q 9 Df,¡ÂS ‘q„ BexÌ–YÑ?™ÎÃ")Ã" áfUÅa#ˆŠBfåØAây$‡ \p‹ †GÁ6h)è"‰© pA"œ ¢L˜åçàÿ‘\Ó3ϳ¦ÛÚ8û}ÎÌf¯²ºÖvZ™sºsDuH ‚HA aD…§(q.B"ˆúAŠ .²|iAp¡âÑ ŸÇwÿB¢°áð•‡õè®QŸJv.„2(ô,Ngˆ°‚(t“(tGˆä"7†‚Ž^èa›B]BAP‰tGÈC„Xˆ"‡!‘ÑšL BqGoýj’%‹èÍVÿ‘d¿ãGb~‹J(Þ\Ϊ"ÙDF^#¥•ˆ*°´‹ §–)‘Ñ|O$&$”c#¢ä„ ²‡)Kõõ©UÿÿõUÓc@£hº  Dt‘#Ž[Ö%h‚—H$"‚D8‰´'>@¸QË’ ²¶9­ÿ:z_ê×þ«åu„]hï\@¨'1ÂA0A!ƒ„³’Ä †“8å[‘ù[¥*ªS•PEу"ï__ü×ü® é†"XâÉí•x›§Pù®C¦w"ŽHqa#\M›A""èÎ…Böv­”3ˆúûzþGD¾¿þ«´‰–šG ">ƒAôK„º…(p‚‡ ‚³†ˆ"t]¤â3Dxa6GN!Ä–!ÿÿ£æpÕ}õœ|§ê'e©”9 ƒŽ:S‚#„# ‘´£H'LŒpHE „‚Bh‡IbGAåm“ Õè†ò]“é™ GÑìèd7_×B¤ò]‘VzÎ%Îó †gBÎD/‘­~ÙXU”P,BEb.œB¡õ0ùÇ‚)К%BÒeÐX‘Ñ„c$#²Ü×ÿ*`Aãæ`# ‹çŒ hrË@‹Ä¹(0aŸ0A‚a‚__×ô‘ “gˆÙ¼žeY¢A0ÿ ‚-ÃF‡Þ -/¡‚ Íh¨DpÔLæ„ÊAVVÊLÁwacœpB’:9„GóhItqe:!6†( ‡M¥Í¡°š ƒaôh&ãÒ£ÐA°ÓA “aåІM¤úòçá–xF£[ ¤ôwn`E øþ'¶‚ ¤ÞÂd&ÿü®µˆ²e&0ø@‚!. !ˆ„˜!}Q}mA ‘„8‘ÐA2¦TYC˜s¢'ÑB쎌Ñ*_wªaº)û¤Ûƒ{Ä ÚûP¯t½ Ý:Wú\JpÍ=*ˆA´›zJ[â›w •ý7é'ÂÂMú^Ý&™CˆA 0ƒ±Æ¶Ò¡Pê"'¹t&„MÅЉt:Tâ!9¸Ný¡ $| „w¿Iqêëu«Ö•÷ï·´·¯6º˜'­'Ûñ§þ¿«·¥ÒöÒëé#R;P¬Dc ‡‹á µ'Pˆé4Î[¤‚ ¡„%"E8FÑtaB>„hD=zïÕéý/ÿ}Û×÷ÿ÷úé¿Â5µþÿz¿Õÿ_Kú×Õ!;©&'R C e¥9‡)è]ˆ›B"ˆŠD „G!.‹ª y Ø4]£Û).ý5ïýn?útÕÐÖ–—Ö¾Û¤•?ÿÒÿÿWV¯¥®½}ü,AˆD|(öCåŽ[‚#åÒ¤%òùAJ V‰J#£‰ @±ISx ÈíÂS‹Ûëê÷ø:ÖïÅý¿ÒÇb©~µ¾þ¿ÿüWakö–¿BD!¸Dè‚9‚anÄz„‚CËïâ¢'B6.•‚Âõúÿ"̈;ø?õ U¡kÿ]Šßÿêÿþšÿ‚XÇÿ¥îWT]RRœãƒA*$ñ„A‚±4‚3ÁådtGGc‚Qòÿ°â½‡þŽî‚0ÿëÿ_¦×ÿß_þ?ì"Ç÷Ö—þ"4_Ƙ«ˆÄ ¹àÝÑxHCÄÏV|?QâN2‰Ñ„¬®-F#„ˆd0‚#’hC/Ĩ‚‚7‘õwB‚hæ]BGEÑÑ0e̹Ä6áöÚ\—EБ×éŠA°EÆÅ]ÁáŠé„ÕÞÅ=®ŒÐ"­oìRZOI«Çl4Ði±¦Å]Ðb˜§ Z»ý¤"(!/ H’: ‚=—Fa–aˆg%­DRQ!¡‚†«ŠC‹4h1ì¤ÁS†PAx—D~qb"" Áˆ0œD0B ÂXG†2†‡øƒ­„š †a ˆ‹A‚ !¡‰#¢!A„ï<º%ЈÈk)ˆ†ÉŽ%qC–8¬hp£p65˜p˜‰Céq&ômÉ×Ä\G žþ-"(¿b":dØÆ S¢>c!è °aåC¡0³È¾m3áÇG# „(b#¢èÚÄfEV!("ŸHDDbGLý.“ûÄpÚŠ¢:*$ ÆPëÂA&òéGVPâÈè„")qH$!ŽMPâ$Ç/ýCí-/Ô®h‹¬"ž"9}•itœDDPFЉìÀ â!#AáÆ9üâ+@¹,DZ‘òëézWÿý$!:)¨A¶ ÑåŽPè!!ñ”9Ç0åŽ{!$9!à•0GòèPJjÁbA¤sŽPåKÆq"¹C ãŽTþº‡QéZ퉚4EÑ„#˜ÒŒ*²‡d"H†¡‚Åá0‚,'&WÑC.‚ ÒA‡ "aF8“ã™Ï`Ò^P±zÿ ØKÔò;Oš":1.‰n’¤¡¬ £)ÐHN!EhÑ(âBŽ“#Œ$4‚ n²:ˆèÚ¬‘e9OÈ+ñ×Zñ Bô¤+Ä%ÑN+°ZGB=ˆ›XÄDDWu,¡ÊȦÊy… …â'‘ðÓûÕ×b‚#a$¬ƒŒLÐH… AAƒ)‘ÁƒÅBYQõ!¨9N‡ã)”Lª¿HŽ„æGçp’.º#ÚY,ÅGEПGÑtcˆ ²(ç Á÷!C6ÂjŒat<âý91H)bûAu –áÊúHl““Q„!HÜ"#b"r.° Ž9cwBHL"êÜm% Ñ,~ª2ÉáÓ"P¹„ ‰2øƒ!yû•ÕQÙRÂ]ªLL(FPˆŽƒAF.Æ—C!š= Ç ‘ÀN‚@ˆø „N&AÇ „Ö©Ä"‡ÿ£˜jA•ÕPié¨G@È?b¤t# , …„Ò‘ÅЈËä3òK`¨‚:";T‚GA žJM¼K¡Ð„]qÂ#®dÏ#!rû¤Óò#¡Ô¦Ž7#­ƒ£oÊæ3µlË?¢:/ „¾S¢êÔDRA"$t¤|è­!4B't‚dAő ˆœsM …HÂ.’a ÄÄÂÄ}e,6 «ýÒ°ó C†GG¨110lta] ü”™ßA„ŽúhTŽ’<±5~O„$œ—B'B&¤"&Š[…v5"·Ã#¡k.bD)゘\““xtnŠN­ í AêØ¯H?ptxa†ŸjHÎÉåÒô,®=ªޤàˆ: ±A"Ÿè©#5á%ð‚°Ì9C¢=dp lºƒ„Mhº°kQ£Ê8ðœ;„ÿ[Wþ´­¯þúªNL“êWTIU$Nâ‘ ÉÊÀEÒ„w@Æ‚A 8A„ÄÍQ„A¢èHèéÁq!áDt š# #°EÐ$ «þ¶úrd¿ÖÒÿ_#ª¿ü¯¬âI×ë„T-‘ðsxŸB6’GÑBñÍI!K‚Q²9£X”ô#‚æ)Â#¡Ê#É”ä(åØiG­õú†×ßìzû¿ÿÒ}­¶% $œ—H!ÈÚ.†¡Ñ8I«„”º7ˆ@¯„@Í3C4rC‰NPõ/  _#äº1Š È`‚ÁðG!ÿëÿõØWô»{]ëýGÿú Ð›ÄMáA"Ñð!$0ˆµ°£B‘: t}AT!Ä4±’AA CÈÒâÒñÇv‚ ‰t{þý6¿È•ý ÿ¯Cßÿ×}t„E"] ¡ ä–PEA»ŽÈìþ$4AåЈBä]‘Б€°„‚0ˆèÂ3bTK¡Û@£´ˆèކ§_®º÷_l_ëû¿é:× ®·–#hDL"ÈèÚBJˆ á"Xù5/¸‰¼ ‡IL*.•¥Ð2ƒqÕ(ˆ¥,R’™ !ÇÇqÿýw«#¯º Mø}_TŠÒØI‹¡ —Í2„N±¦±Ê(…,t¦øAÏ+ÒåŽPƒ‘°ÌhAEÑJ9|Žˆ4&#މt „Älº1ÿüâ:²„rÄ¡”ùó0‘ á´'2ðåÈÃ'ˆ`¤‹°Èkáƒá7Y*y¡•$Ðd6kÔI §GÌ" ÃhOÉÙv‰ÈºE™8&Sº ÖGB]‰ÕBA1…$=b2èº.a^„ „Í$" Š}* A”åœsË‘ # ˆùŒõ ‡.‹¨ØDt4¾Çñ.\qÁ"ð&ƒI10ƒö5°ƒG€ðƒGÆ8ÿÔ^Ãþ4¸~ðƒx ˆöÖñ›F°ÁðBø"ñæƒÂ^ #CÓ{O±O „ ˜">Ž‚ÄCEÑCŒR™ô#莌ÐÒ„Pá6"!ˆ‰1Å-ò<Á"M"#Ar%¡(t„[,!œ_£ÃAÄxé8tqøpf>U´åVÒcïÍj”?z~Ã,ôgiá:m ÂIÁ–rÐm®l:pƒƒ1ò¡¤ÃŽ='VãÛá%$"'A8Gñ¡sA‡ ˆÎ":³ÝDUa B"è[)ÒÊt²cÂ*%ò:/üSkqMá+zëØnmÒûI×Èë3 ߬ø K†×Q ´­'MÃý»I;£Ò½z¿¤é;uï|W¨ÙÄF!ñOÎ9ÂD㓱֒Ћ‚Œ«cb¦hƒBu‹ƒnÙD|Ý’¡ -‘Ð,ãŽÅ‘Ôzéú}uêõÓÿñµÈéÿCá‘Ó]:ÿÒk}k\~üm÷ë»{t'EdttB!ލlŽ0ˆAÂqH ‚ŽPåDhˆD~—ÄD2C$!:Q: ‰>)Û/*Ù¿Z¿ëqM_Õ¯ïï÷\CþûŽ·Ýoÿßê¸ßW¦¿­/{wëòºR;ϬÚIÄB •PQ’’2cˆˆAñ.‹çDy$*9t§Ih‹ƒ8ˆÂL ëŽÄ?ëJûÿÇÿƵûû·úû~ÿÒv­º¯µn…Òºþ‡¿è®§ˆªG‘Ðh`ÌÒGB †„ˆ8Q„ÐåÑN„Ï«AS+Î4T2¤£'Èù´§+ž‚I‚ĺa×ûúó@¿Ãÿ¼V³c÷êäŸíÔõ¯â¾?ÿšý‡Ö¾ÁŠù±öWÓÄK¥‚T”Î5 ˆ£„ÄI)¢Ò#éØš#èDA£¡ŠÈêÒ ‚‹Ž!ÜO¡.§ü~àÂBêô¿_fùu_þæžÚٟߥù¢ÿM´Bvg!„GIgö4$6Pér ǃA‘G8ú@ÄÂLB´l±Á"'š—EÐB).„Q ‘8à‚8ä‡-¡á,l®Ÿ@ЏÐK#ó‹]m/NöÂK}˜K¶] ¿¶°ÂH­„pØa$×Úé¶“kªúkêÚ[{iwÚûa%´´?ñ¡<‰Ð¨Œ$‚ ‘øˆÁB!"âP쎓Dp”ܧZB(pB9­I†ÐˆÑ!òœDlI0æp˜@˜Ñ´#ô#ðD?†›0›†Â°ÂH $ƘA°aP6%=°Œ8}‰¾Ä$á„£‡lB0œ%Ø ša´›G;Ãl#¸ ƒb˜a ¶°¡i1 Âla†¬JtaÑ\¥2¤jRƒÔWÒ¨Gt„+ A¤pdq±L§vˆø‰ä"ô² ÇÇb3hrèDþ"ÊOôøb¿bx±NH6¶¶AˆOÃ# „Hâ¡æ0Š˜dt"‡a;R:#«Ë± í^Å1[šj) ثbx†!C‚.6¼0¹V!0šf&¼DÂ"¨í:†ˆë0ÔdG!£VBLr;6aóHs¸&D8Š0ˆèK¥èŒJ.„˜âg)ó½œpˆáèŽj¢S2<¾"""àÁˆˆˆˆˆA‘ÒÈé Žˆè!Îæa%ˆˆ`„!„80˜BÂCC"""""""=ˆˆ“¡R>!ÐEÔ±×!¢C‹#„ƒeˆAe:C.§sÄDLÑìÍ Re .8­‘c¹OŠtÙtÐñâ#ˆˆˆôWTJB9„… „Tã‰!Å!dpÌ0G¡ ‚ätD1¡DÚBD| ¶$‡òÇ$â˜A8…ð†PåˆèÂÿ^WBe4tUDèDP×"PÞ$AèIŽE²oAÁxØ(‰‡BsœùC…XÈhq(xA &àÂ40ãÅ}~e^º©ÚÊ>‚A)fñ7¤¥Ñ9#=F"G"Ý"qÄ~‚Dc‹Bqˆ{*ÊÇ@ cà9C¤H{D~/vß„¿Oì®( ­’¡HN!6‹¤úAh3h¾Ž8 J.Xà‹èƒ@àˆâ—Ò†Ò0á’MÄã²>GJ+i%ÄTc p˜cCœL«†‡Òþ–÷¤v „Í ÈèB Lb!ˆ¤¤Ç&äAÄDaø§‹Aˆè—LkÂ#®EÃ¥J†´¢%ÑBECAqïÒèPB" .B0†";¤ƒË†\ ¤G@Šs¹Ç$ð„$"gBm%"xCáb˜ížDt"! œ[ûåqD:0á t¥ÐQEXQ„S H!È£¤Ÿ‰u;ä‡:HÆcÎ"èTŽ„ºD3ŽâPáì"ù„_×!³Èú3DtEÑBúøé¤CB]BDBq(ÂYC–8­$%ùc¤k$:P”5Žg(qaEЈ¤¦ĘçL· œ}-‘ÉÜlDÂvS„%Ðÿ¯hN ’EÒG4 F! ć˜t‡(|BRLcÊ$GX ‹S.>5.EԱƖt(4!i'ñ<Œ!wÿâ$èím B–ff0@”ÎSÌ$y!ID|]\R3£ÛT${(Dt’L˜äÅø$&aËD}$Pä6CãŽP„ÍÁ$tÓ¤C8ºÿ×JÇö\­TiÐH5—L(AâHꨑ„‚(pB»š!¦C¬ C*à •è"‡‡C²;ˆ„GD|„T傈ˆƒ!ÇG ¢;HºH¨bé$|PAn?ÿÿ×þ.ÒÄÞX‚+$9ñœEá0Ž%CŒ&a\/„PâT ":Š#ø´]@’ˆÎ:…›‰(,qÄA…amH/Wˆ‚aâ$b#¡*|]„Âʽû×ßý/ü®(„HHIMJ„L$ˤPb‹×„ªÅKäŒ"‡„‚ˆbÈã ØY(¤G’ BA"HqC‰!ÅÂ,FN!¦Š BB!+ÿÿþ’ÿÙCX•Ž…(AñGÐì¿„ 0„æ\Œh ° B0ݛ£eÑt"#UXƒ&áHQÄDã²?˃jI4")žG’D}ýÈ Ç x29O×Kþ¬DÞ$f"P‚BTX”á1 ,$.¨Xé$‘$ÒGHøÂ¤é!¡Î8DuBËq$8‘G¤U¤15£èLòYìp\ÔLdˆéó¯§~n*ì—‰C(¹Ã=„Ãhï$™K×Îó HÉ;(ˆÄgD»ÌÙÔüHšÌÓ‰t¢’èð¨* )t§h8`¾%¡Â":!st,b]БÐH!)È£”8’‚8ÈèŽdt_.A rŸ´\1œXAÙ³6Á‚#ÅÐA‘ðƒ=¹0aa3æ"òaGŒfÈÙ¼DréÞ²LÌ@Ï™Â<ͰA“™ó6Ï ™¸"Å"0 l‚|Î!p2èáðœ0ƒa#ž"8ÂÊàˆMâ&Ф±BCˆ…zÂ<ˆù!§F8üb%¨Hš¦V +.‰!ï$U ‚ÐPEú£XÝ4|h t|F°Ñð¡á–xL#[‰Vm&4m àÚMÐáÞé£[o´>0¶i£ÛºG¶ú=¾éÆè×F¶T|¤ ðѳårŒRRB$ˆa";¨A;èèh(ZA1SíB(tjG»'A ‚ðA5AQp0âqÄŠ9ljäCB8²¬-$~qRNè¡é6¾é:NÔJºL:wI–=XÝÐNo®àÚëyXÒmÁÃ£Û iÃ®ŠºM‡G¶ ÂP©6A„l88eÍ8tîŽ;Ý_WJû¬:H–"¬ £0Ï ˜ˆa Ä‚C!ê1lú#¤ÄÍ Ä\B R‡¡œ˜þg)È µoõë­ï½Zý7]_¸¤þ·××ûÒ·â½4ºcu¸¯õ¿ßß}-o¯~ÿß¡CB"ms¹C‰zM8H"‡AGAag4‚ „a “j ä)Bö„GÂYÄÎg*4…ŒãœsC”8Aâ,§Ž‚¿Õ¦)ÿ_ýÕ÷Òÿÿ~ÿÿýéÒZ¾›Iéý4ºJÿßßãkÿ·Jü®Pˆú §pˆä„îS–8”;ÐA8C X…¨bÊ&’Ä †I(Ž †%YÞª!ÐŽIÊDˆ9CŒìVaÂ#è"ëý¨¥Øï¾ýi_ÿ¤Ý Ö¿Õ½uëûïÓïÿût›¡·Ç¿Pˆ“¤´A¢V‹§‚ ¢‡Å— ìø¡ÁpDŒ¾]5G“Gt¡!!šaÑJž•ìNW Œ8QC„‰ ò>¡Â# ‚½{pÅmÿÿ_þáõÿöµýZÿħ¥ë·õÿ Gá«ø´D$ÄÑ R&ÈüAô[¥ô Hé ‚©ha),=°‚Ét"ˆáVöG‡.…^dÇ+² âHtVPŠÂÄDN/®Ó‘Ћ:×ý­ÿÙX31x‹áWõãÿÿôÝíÒÿ²4kµØ0]‘ø™²ø›Å1èazŒ¨P…”:Ž _¥ ˜ˆIK¥ ¤…GZ‚a Ou(uLã”⃠ƒå9d«!5cõ¾)†qÿñ÷·Uõä, x2Z«ÿÿô/øëéãÿý‡ü{ °ÿ²Þ‰¡#«áÅ‘G @‚øHT+¨c X‚(pˆè× ‚B!$„"i˜Å‰ÎˆøA® ¯û&8üLÒºûü´í¹zå˜û¯üÃiúÿÿö]_—À¿îLr±6¿øoùuC„N8oú+š"莆 ò4B}EFÒy0Â(xAÄÚPàˆè ˆé!LPÁi’21 ä'>˨)(aÈá*¾¬)‡(v‹R @•D"f‰õ0‚CþºÉÿõ×i~žÕ=ÿÿ_ãþÝõ¯àßõƒhßùÕP†t""B!î‘cŽ,)}lBâ’ ¢ù'é'ñ£ˆ UIZŽšy7ˆ"®(¡ý a›Â $9C¥QÂEè ‡7ÿZΨÿýüB¿¬ä2†¸þ¿ÿýÿëÿÿõ°oþŠ6¾qßì®6†¡Ë¡#éBD3ŽaÂ#ƒªÑŽ(¥ £.eÑ„8‹)ÂZŒ$ ‘ñ¤k¨ E:0‚Œ(Ä*Ī#èÂÄBûÿ6›v×<¿×FÿgMÖQ¨FAg= L—]9Éп"ñ þA~ ÿºÿÿïý½µèò.Ÿ¿íÒû}|D&B'‘Ù51Ì:¤BŽ’!I+I @„¡ê6ªOˆ‡I+„‡hh. BH4Ð#ŽHx„„B þݽ¿ÿíõ¥ú¹:÷„t]~Âh†¡è0ƒ" #¡š€ðQû®¿ÿ¿ç–ÛÅu÷ߺ¶N¿Ôºïn´ˆè®° ‚Bq2‡&îE$'–ÓÄL"è „¿ì ôq ÑD1š!¤„YÅÑìq¶QÂc B…#¡S-çbHN#ÆÛ_4WÝYš~ÿ³5ÿ®ž·ôy²‡ÂMl§F;©£fÑÎÿúÿlÍ6h¿lј»³E½6¿~ßkÝkÿ®â&t!,ßi#B"qÒ!sžìaÝCjS¡H`ÄB8¤" Fh ‡Ë¡A ¢!™Ü¢#À ¼Úc(îŽ>Û i*ºÚë¦Ú§K"“jÜãØh+K¤Û†ƒ ã{PÚN Ä¹´na&áÈèÍ_íö¿jÚÿ„¾Ò]Ý'µÑÇÚßé¶—khiÚM׎aD…*CÐA‰Ç¤]EõQ0‚Qº8• EƒBtGA )<º0”D „Vx0ìÂ…¨‰-D5âfƒý´¬ Ø4­(i0a&ÑÜ6(&›a("òI²G ŽÿúØ„µoj)éµqa ÂiºNŽá¦› $ØI4Âl5´Û „Óa… ÚV·¤l#Ø`DOa&%=8jØK¢¸Ú(B¥ð¤èÑ„B"\ "ÇB£NcØAEÁB #¡!£ZQÂö% ¨A ty Ä¡Ó)Ôcˆ™¡®qlWaˆR­2 Pb˜­«ÃLVÃb¶¶¨º¾ë´[¿ÚmnƒþÓbi„ÃÅ'xbA¦Å: lBv)ˆVÔqìS±\«M5ʱ ˆ]ˆš‘~¢FÒ’èÍâ>”8"> 9CŠZ1t¾A:#é£AF8¤"f ’—BGG³ë… edºÖ*KˆÿÇÕ‡ëUß}ªÕµ_ˆƒ0„D0ƒ",!ÂhD0¨0A¡ !A„""""">—† »èòEDD¡ìiCC „AlU“¢"A$&Øâ]b">© ”AA÷…n AWøF;þªÞõ¤ºé};¿ÄDDDq쮪ˆêÄsÈ%‹+bp| …£„Ì:‚ë©!Å4#B&hXB9B"±ГD!#'þïëîÿûêŸõÒUŠH)„v„"D †-e$Ÿ3 AÏ¡"¨DT†Œ"u—J>‰IšœE ÿúêþªûÿݺòÜV÷+­¥éô%F&œN9NaI"莃—Óaè!³h‚!ÄHè¾!"ÂYØ’ˆÿÿýºZþµë^Åßiz ÄR+B%¸Q Šp£«Y<,#LD’"¹¯¡¦#Ý!³$#Çm+þ®»÷Žýû°ÕuýBC B’$=„xª„Ýê"sHÄD&ƒAÔeЉŒÑõðÉ‚þµïáWþàÝú] BttEÑs L˜â"Lr(â;ˆeÐ"œã„¡Ê›LŽ‚xåЉ0‚)ÔQ3B‚¢:,$ʧ(_Ë{·õ¿êø.ÿì=qZ ®f‚ Q"HAÙx(¨Òˆá:„ƒ„Uçш’!ˆˆ‰Øé!8µ{ß ¯ü?ŽÐ‹(4"Uâ‡$â „GA1¢:.„D>2¡ „DMt'`Qãh}Ý-UÒG¾õøoý•ÖP©„ ‚)Ì9C–8¤ HFy BU|¡ F3;öÒ[ÿm ‚õ¿Ù5þ¢% „! 㸄’²‡¢Ý!£ÚD蟤‰õgcâ'‘…°g,8ŠدÿŠA?þ¢wôWBD A2”…,¢úT‚cDc„Q?aÈøI%è§DI ˆŒB'Ð’1(Ä ®7Ð[×ô–ÿî꿌"èÍ„ERDÇ  YN’H)űB‚HBDN!3Y´wDf¬§EÕЛFÑ„ÿ£!;¢p#j¾£hë×Ó¹'yn|ŽŒ¼Î.ËxFñ„yNGDÏÃt$s°ÅBãšÑô6‚PG¶—EÐâãòTÂ~lb·èE/õó8mï™HY-0Úô)$DЈÇ(q…BöfñÄѣʴGñ;H!;:†4.!1þ«Èêû®¿¿¶_¨w bü®ªœDÏ+(Ú !–:¤F<"‡‘Å ¨TD©¡ŠÄN‹q!¢:"ëú¯·uU‡¹o¿ºþ«ÝÐNv:í”¬ê ¯‰™ª Ž*w*ñ„&‰qÙ:IÐAš×Éë;Eä0_·òKë~×ÿ|‰,•*iz¤4%ÑÌDÍAB#ƒqQ :BqË× ÐHŽ‹Âg¨‰t_³hDLÐÿÿÊpö¿ƒoKÿ[ÿúÿ ®”Bf‡UBHrv"S„!  )¨†sP9!A(!u#¢t@ѯü¶Ÿø`õßûÖ¿ÿïô/ ˆèâ.‚D C£Žqï0åŽ,:²‡ §:HDD$ŒH„£Ç×^{ÿzj¿aÒ¿§ëªWô›Â"K¢ø§B‚D3`Ah›•bADR„#¢'E:AB"Hì’%Ö%BÎ--WÚ¤©öèv¿Ö­¯ïÕ׺ChD†‰t4ÉŽS‚AàEÅÆ‘ĘAZ„—EÒDéD†ˆë8ŽÆÐ‹™¡9²¦R‰ôõ^: nƒ6 § ƒ8l4˜i*_]}zPè!Ò&H ®Æ"$oAÒ HO ‚’/—I ô"&Þª„âq‚„Bqd¡;2Á#dœ¯!8¼5 „9- YvGdbú<$&Òi¦ŽÓ@šÝ†ÂVcä ‰tPÉA’ŒGTyÑd3:=r „èIhÎGȺ…²v^„¦NË'ÊáhÚˆLƒBP„DRÈéT¤Ð!ŒD%{ ’èÈKãû´{z hö;Âa£CÖ{øMúÓH á¦æ×Š—$XF°ÌÌ ÂÓ30A™Œ!`Žƒ4ôBôÁ‚3†ˆP(F€ì&cíoO±ˆB+d¥d!‡8äAÈ â\%‚ÇCSÚ‘ˆE!.”â!Á™“aÑá¤(©Ã-qêØ3i1(x4Âé""sPâ¸aˆˆ†m Ž‚k¤Øu„FÆçpÚwMAѬa–Š;´lbT›(v“ƒ2(ñI°èãôÒ#¡*Ñ:1!"¹â¨Â<ˆ5¥”$Œ•OÄŽ£ïVÅ:Mêí=}é_µµ×ÜDDGÞèã´›JÕ·A;Óº=´´­'vi½tÞ¾ûÚÛ¥ì,HªŠpQ!ÄDãâ‚„ˆª5 ‚Èú·¡\Dâ0‰×­^­oß×·×ÜuïÖýâ©o “ÆïñN«¾þ÷~—ÿÖ—åu$a #6&Vø¡´ Ž8œp‚dp\Ž‹åúHò±PA„Á ‚èC´I¥*õ!ý×ÿñMRûimë]u÷ºZ_u}uk¥izWþ¿VÿíÓ]ˆš*:4"’!0ä  Å „j(Ng:Ñ „4C ¢jß%Шˆû×ô¾ø¯ý?j÷µÐþëþ¿×ÿû_šúµñ쮪¼ „H†Ó„Pì#$(áLîHDq.”O%Š„sAhì4¢>…%Ký_÷°~¾·ëõ¼W]X_í×^×ïø¯ºÞÁÿ¯¤"GBY:qÒ]"" ÂÈèR>XAZB“BåÑš 9µL­™uÿþÁø/«uíV¸/uÿø¡kõ¯† =ƒþ:èqMÖŒ W!!¤8j„Y ceZ.‹â4,¾GT¥Ð­˜FNˆòžC¿ÿý¾‚4yvw ¯á´ƒa%„Xú®¿×þ¿ðF~ïMÿ'_²ßžDèº ":ÑøBBPçE1 „DMäé!ÄH5ù„^’A1;N<ŽŽ¨òœUÿÿƒw„â-Ó 0‚ 0—'å”Û¯ùzÿ í姃×¹]-f BBˆ‹ Ï ä0>!Ët‘ >" X­–¨`‹¡èDq%«ÿÿ~ Ö—ñZø¨®_ÿúÿ»ÿ„¿ßÿþ„Ú²ÔŒ!l·‡0þ&á #£ (Z‰¦qKHÉM3Ì¢ñÿ·_ÖTÓúùå„[…× &¯wºöÿÿ_Òö×Éç—ÿ M+ÆB)âÄÅFД ‚áÑt"HT"7J"cÄ…¨ösú÷û|÷ÿ»BÇÁ—ÁL¸-‚j¿¿ñ_ßùÅõç“ÿ¿û¯‹K ÊíHg$:ã‘GŽÈä•góÆË¬RP øŽŒ H ‚‚ E^¿×}×úÙž¹"â?Ë®ÍfkÿýÍš&ÿõRûjûf‹¿_³?ÐDt[Ô…$-$„„(ˆP“ ‚ëAb'Œè„$˜Po L"ÛöëÛ^û_ ‘ÓtéYuWþ¾ÚÚ¶—µý¤ë®¾ý}«kÝ7^Ú^Ù]-•…Œ¡Ò­B#†E1bf$…L"<Š¥ eVD‘'EÐÍj¬$›¨M7I;IŠ ¶Œ8ì+ $Ä’ûhiºM«ÕúûaXa&ÑÇÝ_aÒa«a ØXÂh6 õ+¬¡Q)¨ÂÑ|¿*b… £B!”èBuçï¯C+¬§‚eL¡Â#ƒØŠ”AP¤ÈèØ¤tætBDE‚‰ÿªÿ´W*F†"MQ(ˆG D| ‚.Â@¡#ÇË¡<„Ú7šHº.3ˆ“F@X„í.¹ XÿâqJ‘]•Å9'†7 B1›‚ØB™¼ºÈìDÄaà ‰U (ˆAôR(ðÏ‚ …FŒfh"S*e[uÔ#ª¤x—H¡Â„âCŽ"!)àÊt_ž †§©8¡0˜9važ[ã^þÊëh…gbhV„1&8†à": I*AÔ¼˜ „R6ÔY|"¤Ý* ! ÿèDPH"t«)Ì9C‰ƒ0†1ð Èè¨BXJ1¡ ¤RéZ qQ~qW .q¯â%ÐVThe¸‘À¤%Š›ïg¢gð†‚P DŽˆð¨ÈfŒƒw‘3*Y±–æ‡äÝ^´ÒH .ˆú'é-­B ‚Â.‚XLÍ%…i-º»ÿvß“ré!™‡$8‚#è±Â|Ť!"ê HøÚؤ"m¨ô”šïnäÂÿýê|fhÇGF0Ž!q‚Ä%œI ¡!DtÑaQì …†C„kI Äw¢œE I(Xw}×úwìHEFRè.(": zŽ>‚(pB\ÔÇ¡E3èb"è‹)s/õÿÚÿïÿ+¥!¾„TŽ9N*Pøw0$„ó1Añ TTxúU¿ÿÈÁ Ä3ù¼!£ÈhòÉTo Ç]Èiù9NPä[ÿÖd "‚M¤qˆäz ¨'‡¯Š¢S;¤PXŠ#£ú ± ‹x_»¯ÿú4˜L†\Ëaa5 `"8a°Aï+–#hÍÆH2Cøbdð†„º c%X‘!ÂZA Â4T‚… 3¸-%ÐE:6Z.„Â.£Ýÿ¥ÿÐhâ# ÂƒG&Œö쎓£ÓCG0Ý?¡¡5šŒ/¤M†!1ˆÐ‘Ð8QGáC#¨A º ‚:€±7ƒ”b"!ª+Ž#û÷ÿ^m-Í™Cí¤Ú!ž  Ú6tl:8ˆéªÃA¦ÛA{‰UY DtB¤²: BÂA„˨Å!3‚âL!ÈýEЕÊóȃÿ_äF¤#ÌGVtˆÄEžPÂ}‰wVÒ¦Ò ¤¿¥iH<Ž„!¾D¬ï‘ßmü—3¡ø‰™¬ZAaÐA …¡] @´‡ #笺#ÈO8VjÆ´”fµ´Ðã˜$|ñ›aG„eÖaEóìa.ðƒD9>žŸÜ=\+}´ÔN°Ø_2q“™¶DÌÆqxi„ :h Üö8•Ú ·Ú>Œc]Öéҵ¯¾žénü"í„l è4Â>=Ñ =ÞƒG¶¬4Ñ 4{4ßÑÇé£cGω=RN:Æ7…ã„\$ˇ#âGVGA#v”I ´ãpH†ˆè¾"<~%cWtqØJÒV“«n‚m6í[¯­Zík}ú®¯†ÒÞ‚¿*ØbT4{«{ &ÃØuVö%A6“ÂþßÄ««ï¦WYU‚ W">L¨3ÑŽÁ‚B-eŽT 0ŠtÁHB#ªÐA$s¥A@”":9‘ЊÇë«ê«ýÒ´®ô“þµ{u½Ò]Þ¿×þªì6銻}“µz8ô›Ki_}þ¾ºoµ}¡%(xVGCB«@ŠpˆèEq †qÜ!NA˜B1B†&0Eh‹­{¯«ïÞôû÷}ÿÿ¯}U{ÿ½¥÷ôïú]參k§Þ¿ÿûøˆ—A ]$ŠAÄÄ^7¡UÈðA !„GK8èæ&ÑA$mRB$t"N§Búþ‡»´­kÿíkw»jª–ÿÛ¯_ÿþ¯½$¾ö»­/}ý-µëöǰ‚ft쎋…D!І_Œ †‹زÂFÆÊø•Ññÿ_öÿÝcÒßþ¶¥íï¯Õ[Öº uþÒéÐÿöÃLj__²nMÐ@…R ADÚHhÂ7ªˆ…Qáñ5§EŽ•yÌ»3‹™ÌþGEÙ#„.Œ#º.‚GÉÑüâ)¿ûÓX?µ°¾ ý׆þ»_í0{­­DWëÇÕzõ]‡ÍŸÿ`ÿ±bÈæ"‚h:3L‚9‡—F2<§G V„B(xg„a$%Õ#ˆíH3S#ሌ(H'$9‡!%Œ„ /˜Èã#Áÿã¨Ø}„aõÿ÷áü£Ð¾øÃÕßx/þ þÞÇÁû×ðEaô:t„3=2èEF‰’3GhZJë^Fúé/ÿúa[WšÕwumu„½ÿA<Ðå–oöÒ˜oÛâ¿AgS웫IT&4‚F,DòÒL'±ˆ¡¨K—L¤åL¡ˆÚçþþàß×éÿWvõgƒG× ºÿt¯á/¾ê½´°lèÿÿÒÏá¾’ Œ ¡Äº !8Šc„‡©ÂÄJI• ‘ð‚ºË¡ÙñÈ`|JýùP½oí/zÏ/ë†ÿÿÃkßõÿú÷ÿuB³Væÿý/~„!I¢ZZQ˜}Öc§3V’ŒEé çñ;UfóaKÄtGEã4GDt]'AC.Êœ†(r‡0äAÌøÿ¿ÛÝ;©uÿÿ¥ ÿëÛoþî¿ýTºÛoþ‘Ä;~ÿÚÿRêþƒ'ò\0ˆøZ¡¥A „Bæ¤'4r °„qHDDDDDDDDDDMÿ4[f}ýfžh¿õz×»ø2:¿¯î¿Ks?Rëÿÿ·4V–ú¹¢û£÷ÿþ«bq)ŤcQ0† ‡ÐA H(ˆˆA3†RtG‰Ðôõm{JÒÕ†“ uÐöÒm.»âÿ»ï‡ÕÛö•¯ÿê»ÚþÝ]­­ö¾›ëÚדqHâˆè b’DbÄ …+V¨¾M‰‚!4IR\ ÓA°a †[à‹É6 64Øaé¶±ÿ|ƒßä0íG]råŽÝWA†ÑÇwií£Ž5¶ÂV•ØJC†ÂPê×Ô “¥MħÚ\6„º[Îh,‘ˆ‘ $& QtGÌD~)u¤a4$u5¬&¸bÄ)PHn„Å1^Å5±5ý={¦ýw¿KöÅ1M& ¦qMÐaŠ‚.0±L0ÅNì‚/a O­5< ë6†Q ’HЃŒa3ØAÑ…„¤˜ó‹ÄDDDDA‚Áˆý^¬>ºþ»ë»ÖL&„DD0ša(aÐa6B„!ˆB"""""= 0š% A ôÂhPF¤"*SB%Ñüކ=ÿýV½ýÿß[Ö""#ˆŠ/؈ê ‚ ‰ „ŒäÄâèEŠ8‚ Dòÿµ¶µ•Ö«kkÿð‚¶Á‹ˆƒ „º*‰"'?ÝÁëVêùW|=xm/ý}Eу=’híIEu•!(B‚X†Ó/ˆÎ/­ªMö­¤6–½­¤´¯ÿÐaƒD æŒs¼‘òùx‘ò;#åÑxº0‹ÅÑ.2ù|†‹æÑ.ˆè—dqO‘ÆGGÈñ|º.‹äv]Dù6ˆñÏD|¼]ÊtN‹ç²>}È膉|Ž0A3ŽXåg*Ñtx‹ÅÑ>GÈùD|ŽÊ´¾GÈèâ.‹çV^ÈöGÊìB]¤$s'ÍZEâèöhŽÿAÛiZWV¶©¦ƒ´›VÒM5ÝÖH£ˆˆˆˆˆˆˆˆˆˆˆ‰8ˆˆˆˆˆˆˆˆˆˆˆƒˆ‰!ÄDDDB",Ž0Dq&8‰1Î8ˆˆ‰î!„""2>GdpˆƒŽwEòø‘ÒC#áK¢ë#ä|)ŒŽŒeÑt]™£ˆ‘óÂDB$3ÈLk„í¾ÒŠ B „‚ aØ%tØH Øl.ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ“DC°„E‘Ú`„j}» BŠœÖ¤õ!hኼ< aˆXDGÿ#¢: › k%`ÁPdxÚ GD| MK(r)ÖW,CÈ ä2‡â"$A‚QeÃ#""*¸õÿ¿×ÿÿ`þ5ü/ÿÿò›Ê¡ ä!Ïö¤4L a~µ…ÿ>«Âø/þ¿ÿÿý‡é‚-ýÿõBuÇáÄßྱÿñëöÂ3ûÿÿÿÿá¿eëý÷ÿ¿ðÐgTÈ/D¸4pÃH0Šá>],wáþÿÿÿÿ¿àÿ¾¸Aÿ¯ð ÌPøNh Ý þ ôÿNõ]¿/þŸÿÿÿ’Äÿý~}ÿõ^¡Â?4´¿éw„½Ööõý/Òÿï_üòþ¿Ûw¿ýyåõýÜ6ÛNðÚMÐm~¿×ÿWuúJú_N¿½ÿ(NÚ]×äé³?_õWúÿêÔŽž®‚þÕ7õàŠŠùéÍì{kåÖº—_ûjÿÿÇ^¿M&Òn›”?Ôºoí.Û¯ú·õªuþ¿]¿_omm¿ë]¼õ¯í¯ö—ÚüpÚK +I°¶ÂÚØC´“n­[I5ÿêµ®·}èí ÛJÒ[km- Ó¾5¾Sµm{}¦Åb¥‹Á&¸Ø¦)Š´ØìRlPL&Å&}ÓåÓõÕuÖM‰Om+‰OˆzL0’h<"!ÚLJuhîí‘^ƒ ±Ø lT6!Ó{øa†!a„ a!‚a4!„"B?õåúÿ®þú Åa…[®ýŠi Å{L-à šjL(VyñœD#¦R"ù?‘ÙtG2ƒ6Hó>˃˜0Px6Dpr9Ù‘ÌŽÍñDDDDGûïô»Þ—ÄDDDD!q`š ˆˆˆˆˆŒDDDDDDDDDDDDDþ_]]ÿ{ãB#Èd†³–äÊ‚  ¸åar˃¹ È+;šÌ9Pl!’£lrÇ"9A’¹*ç}wVý"׫¤þµ33@‡ÿÝ$Ÿ®eÃCŵõ•Äê^¿¯_ÿH#Œ^·]‡¦©wò…ýÓK ëÐ{íu]$—äk5|pý×TƒŠ[inö( 8ãõ%õ§âŸ[UèØÑ­Î/öc½®­7_Çô´ž/ù[ÿïþ“¦ÿÛúí¸a¿ÿª­Î/«<`ÿäu Ý¶«ÿ¯å +…ÿH„ÿ^/ §¯ËrL›)#Eêëÿ*¦w žpÎ&A‘ûûxoØchÜÃjJ ŒD™’Ì—Ìž?™!ÆÌá ¹’ 완 ƒfÌì›*¹žK‘S"´H0ŸÐíÿ}>úíÕ‘ÓÖ– :@ݤ½5L'§¶õ¶èÃíµÒïßßñÜXpî×··»GM)bcðöéàÉÍáà r..ÒIÃ4ÿÿ½;µïýÕWaÆØ0¾@×^fö­ß¬ÉÓä§ýÞ’ÿ÷ÿÿãßßwK‘Ðd6ËÔ°aÚÚÝßlÿúqÇK×úÿÿú½ìxØAú¸ë\qÞŸÿ×_Ç___Ýê?ÝÕõPú†üþý-+ÿÿõíë×ù¢ù­ÿýwpmšAûëýÿ¯öþº¥÷¿8‡ú¿ïý(;ýië_T’Kÿ× ¿ÿ~’^JÒþA¿¢­äç’ƒ%gÿÜ<Žší>ÿ_TŠDY%‘Tkˆÿ¹0d2'D» æÑБ4BäÜt2(øÍlÎã6ÌÈŠdtffæcÌ2ƒ:Ë£† BT›Àé/°I´¾B ÀÌ0A#ÇŒÁd¸Ì ÀË—„ÑÝæÈÀÍ#ÇŒÁhëê¤ýW_„BôÃ>FÌÁçLD< —@ƒ>3có7RA.f3c„¤p¿ÑàŸš‹dvB ùF†Ÿ„F€ðm?½4gqhsa‚.h“Ðí0ñ SÔ4A…hïAãðÐaö‚ áÃA„A°úMÿ¥ôÞÛRQ×|&ú{·BbÂ5º¤{ ˆ£Ø´lnóß ÿªNpÓHùYèôƒ`Ë,âwi9i6:„n‚#MÄöÐAÑñàáÁ–tÞA¯ `¿õÚM± ÷è?Ii^û¤ÞŠz¿YW xzÕtéxf@•l8t{|pfN&pÒNqÚN•´ÂIá‘ÅýÓ¶˜I=D ßtôéC«o÷bPý·õzot›½ëov¼Gîý:Ý7ïÿ½?º]º÷}ßÔ5×Iô¾Ÿc~ï_JÛ¤»Û½o¿ýþýúÓþ'ýÿÝ/W[­][ÿKúÿ÷Uié×ÞëÒ\S×Õé?é|:«Jþ¯…ëû«o¥qOýþòñÿûîõÿ}_þ½ôýû¿ÿÿé}¯ýµÿëw×½/ý¿ñxP—KkxJê꾿ޗد×í[^ß}ÿ± ]ö?µµúû[õâ¾ØµÕ¶+×ÿ½ýýnÿýÕ|Wö’}·@Èç¦×¢‡Wïÿ¥ì?mWÆÄ~¬vÿî UÕ‡Ö:ÿø¯ý+¼:¿þû_þê] ýÑÇÿü~ÝGAtš`Aºv0i°’ÿÿ_ƒ«ÿ¦G_VF/oü†¶ ¦ð_øð_þ/`Á}‘ÿ¡ïÿ(Nß«]{Ýuÿÿ¯‚-ü a O4H1AˆJÄ/ÿñ~ÁûuÃn˜}ÿû #>Õ‡øF×à‹ßÖ÷ûÿëÿãôÿ˯þÚÿòëÿ.¸A}Ö0Š2ø Á4ÐkëõÉðßë.»a ;ÿú „øoð‚ÿå‚Ò­e–Á°‚ü7ÿòëÚ_ýn½ýuëÿþëÐ_(â""!‚ ×6@Àÿý>¯Ãÿ^ „j_úÙi~ þÿý¯ÿƒ ¿ÿÿþÝkÿí×ÿÿºúüF„_ôþLW¶¾ ¥½ïÿò­Â]¤g†ÿ¯<³Ëýµ7†×ÔÆ ßzá?ëÿÿñ±õ¶¯ñO×õç—ï÷ç‘Fß^ùÙ®õêhŸÿÖ¿Þ·Ï.Öï×ßIK¯¯~Ý.ÿëþÈïþÿÙ¢ÿ®ÿlÑ{Ù¢×.¾¯ÿ·ÿ¿ûª—QÛ×ÿœW—Qßùu¯ßf‹ÿíVÌýýK®¯Öë4÷ÿ×í¯îÿë¯î¾êÿ¿}íÓÙŸ’;ÿjûKýB®µWºu_U~ÿmoU÷öÖíu[î.÷VÒëÿµ{k÷Zª·¶–´ÚJÜ|;ß¿_½Òº×mU;ÝW´•%]5í?Cïµý µl%¦ØI[C´ì#îÒXiZ•ì4•´qô› ›ùP?àš ˆA0ƒÒa4Ù†ÅnÆ6G>)4ÂziØMŽÒm&˜i'ÚV‡Z‚ƒA„!ôÂ#É1)ÕXJ)bSب šlP"ħ„±P 1I¡LJ|qb˜¤Ø«cbƒ%ÿµ½·é÷Úh5^ÂÚ¯ÚM;4ÓAÝAAŠAðEÆÄ&žTPºÚjéŠi§ž©ØTÓ[A ÓL ÓM0š -•i¦ÔðšÚ`š 0¿h?ÄDDDDDDDDDDGðЈˆˆˆhA„B!q &˜XˆˆˆŽ"#ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ}_úÄDEÄGëýÿ°þµ-uÿ×­#°rå-ÒkûÇ×¥éVÒÿ¿át›z¯óëœ_õ¥ÆÅ~®fÿø±JÂaˆ@ˆï®Ö8ê‚ ÿ½þ¤ÿׯ[ÿòãóˆÍÿN—Ç!h"išgv[çbñTˆèìÉ•ÄldÍÙPgy™Ïæas+ ™3ºˆÊ÷ÿ¦švnä &@¼hG2%òL6 ÜA”YÙd˜A¢à;JÓKÛðßÿÿM=4cêƒûá‘ÁO´wv=ƒ£ÅÛØ}$¤ì¸¿»ÿÿÚ}Òw Èë†GPëØB_wõT›++TªŸò »‘uøÿqa;¥Þ„>ý÷z®¾²Ö“}>Õ*[î:ÿÿÌÖ/I?µ÷߸®>?ºM÷¨õ[oï¯ÿÇýýá}ãþ£ûùÝy;$">uîþºÿý¿ék¯ÿiÿýúßùÙ8„31§uþ¿ÿÿÒ§÷²:O†ϧþ—¦õÔ4|ÃÂ{{}%­uùKÈÖ’Xr7©(þ#¨ýõÿ"êA#êªõékÍçVg’DI•$hÂ92vF#T@ŒYaé¶—ÈA›³2ùó¡›uJ336 ¾ d ž€Ï‘ƒÿÿsÄNÏæàD&å™äï"Ùƒ5äæhF¢4<¡”#’"ù¯›3 ñ”0ÂË™ò63†m„BÁ;'dÈ ÿ¾špƒ ¢,Fc00ƒ%Å0FÈ"ÈPá| aˆO—$!Äø m¥Êõ£Øôk Ðb:5·MÇŽƒ¦m׿¯ÄvÔš^Â^ÁQÝž0ƒÐçœ0„¼ „hÐÿÐi„kz #cô¾{m0ƒûñMà 4-F¶¹î8£XÑ­é£[FƘ†l2e¦+ŽÂ  áÒw÷Ò·G“ƒ.m')ß]þ´ØpÜ¡ç áÞc‚ ‡”=&ÒpóXÒmÑ¡†XÒ š^•mÞÜJ··ÄðÇ”ðÌxt{|·ÿ8ÿ‰VÒvƒM0Xwz&íӫ«É]&Úñ¶×¿VÆÚ¤Û¥ïÅ:Mé.½|k{I_¤ýb¡¤´w 1A0ƒŠba‚AšlJ„š ‰Q}6*Ðm&V ! Ü ov­{NÓÎâš V«V)„Ôð+°Å5¸ÿÄD4!„"áˆBB!„Ј0C×]Ý_û°šÝÜ0œ1 ö!l"AaŽšzh0 Å‹ ¡ % &Z3B6Ï"àœA‚P‚Âa ‚ ˆ0˜Ma†aÇqÿ~ºÿøˆˆˆˆˆˆˆˆŽ""‹ö"â"""""#¯Ë®¾úÿëëÂ>îñýÿÿõÞ³%šŽèÿœXé¯ß_¥þš­ÿþû¯ÿû­-Wùu »þªþý%ÊÿŽ=WÝÕ'ø„ Bi¯ÿÞŸUÿþ"_.¾º{áÚ÷Ž?ÿÿé¯ÿãû­}ß×üâþ–ÞL ÿýµÕ?};ùd9Éžt"RDÊL¥—T“¼S ¤¿*ÌïA‘¬’ Ú;¬£°S*§•ÁL‚†ÂåÔDmëô÷¶ý‚*Aa;H lmÈ@è· B-Å÷·#¸;ßò…Û†Ã8ꛫÜ80A h áÃíBeÜ>Fz;šþ;Xm¢µäŸÔ0¤vã£S&q&(y´¡û»I:AÎÅ=û­ÿßÿ×ÿÄ0B""""AàDDEÓ¥ÿõþ¸ÿþÿÿˆ¿õÒÿßÿ߯o¯ý¤ÿÿ×ÿ®½ùC½_ÿÛW_ëßÿþP¿u×ÿÿ^Ÿÿ¯õ×øå$jŠ·í¹Ò Í£U”Aÿü.AÙ£#lõ39<Š gÑtm"$гwù¸èg…6EY›Ž†C2Aá“$7.f¸ú9‘ÑÈèFàˆI’)ýQ áÙòOï3˜$C‹ùA°‚#È…þ\ÊPEòr(/>fÙ@ñ3#6mžj&c>fÙs0H…Ƀ:330A.ÓÂ^L¹#„aÃ>AËAž3˜Fv°ƒpƒÎxA„ŽÂG‚zh=3Ä.Qa¡§hùKþ”pèùߨØMX)g£ÐMè Øe•G€Â6c¸að˜F¶’=»A ðoMÑá²N´Â6;ÜßI„Æ;¦l1Nèöæm Ú68œwèôƒ†a˜v‚  ƒk2è^8•l:aã;IŒ2Îoǽ:¶é{}XxOQ:¾­¿|S{{ ›¦<:45o 6t{ôØtqìSa¡‰VûûuI–:ÖL{¸bUÕé¶)½é6®—Aø„+zˆM¤éi=WM¼ãÞ)ögÒMõõûÕûÕ»þ­+Ò¿®='JÒ~!vßWz·¥´ý6“}»Ÿã¤ãôÝÛ·\zMÝëOú]ôý«ké7ý}kŽ¿þßýöô¶Òÿý/ÿ¿·ÿ÷ý[ªu_¯¿ëÿÕÿÿúöÚÿÕjúomëÒë§þ›®ž¯«ÿâþ¾ÿ½}i7ÿým~–¿W_ûïWUõ¯×C_ÿ[_¾¢»]?ÿöµúëý÷Cö¿¿ý†?^Þ»ÿÿÿö×cÞÿ†»[®õñÿýE>óDGKÿâ»ö*­ëÿ¯ÿ«ÿûúæÿ‘jÿÚÙ„¿üz";Ï‹ÿаiõþ+ÿþõßè.A_á¾°¸ÿño_ÿ××éÿÛÿoˆßÿãÿü,k¿‚¹×ÿðE>ÿë õÿþcõúðŒ?þºµ®¾¿ÿûïÿøa„\ß“ÿ–Y—\{üo 9Âõð‹ÿî¿ÿòbÁ”m/ð{ÿáýËþ^…éÿÿ÷Kñÿƒ ¿ö:Oþ·úü X<½?áúÿïÿÿ¥ {iÚ_á/ÿ¼%÷ÿõÿþ¿_¶•ü ÿ8ïÿÿ¿ÒÁ·ô·ÿÿÒ¯ÿtŸb¸¯ô½zý-¿ÿµ÷ÿÿâ°Šÿ*>½¿wI¿<¾ÿëésÛݯév¿ûÓÿYåïÒáhð¿_^ýWÿîÅ}»~§ý£•o_ýºþ¿tùåþýç÷ý¾ÿþû×÷õßÿzå×C¨ÿê_¾õ}T¾æ‹Ï¯ìÑw¹¢³E­÷Wÿ¥ut÷ÿÔºüóL;š%½#{æžæ‹ÿÿ/ûš/ÿRûii~êßùìÿ¯¹¢õõý¿ô½'û è?Ý^»VÕ÷W]/ûuÿ{¡í®ŸaRnÕ;_a¥m­¯úXO¾ÕµÿOµoý´¿½4î½°«Æ°duÈêkö…ZWí¥¡M¥ê¬4ªíµt­;JêôÓµ‚[K¢.´¡„aá6ÑÜ< Ü0Òá±ìPMØI6I[ Ez¤ä~"øÅ[†()Rö‡ÃøwÿßÝR“´ò¦ž…ZÈé¨wuÒVÒ½+Ó{¼=+¹Ý§ó¿NEÓ'ÿëú]oÿÒQëªÖõÝú֕¬ìuºÿ}5÷ßÿüÍ~•o¾°×I§þí$ºéVþÿׯˆÿÿýÿÿÿרÃîÒkÿþ^úþ×ÿ®¿ç¿~>œ:ßþð—µÒk¿õØ"‡Ýÿý(‘±M„'"rõ×ÿ~ëþf¾ÿÿê<Ž·[Iâ!ÿ~½ì(;]ýu×_þøûõ¿§ë‹ 1×ö¹n‚¥½Wý Íᇄd yDº\ÈIÉä¼§y‘‘#È<ëwÚø“” Ì Àͳ‘"¯üÁ 'EÐD)?ø}\~þžò6ÊRfÊ#[è‘“3¿ß"f\‰}œtNFfa‚àˆ°\Á„BäÃ!Œñ›dhdlf.`ˆ['@Ï™‚‡Éƒ!R‚xJ€Ï˜A„BÁÜÁ„ ñ›`ƒD.K ýŠ0›ÄÍhÐôhiì ÓtÑ¡á=úÿ¨ïþ¯§y–BŠ‚~D-îÁßÿ"?[Û[ ?ÿÜ#Gü"ãí¶—ü„uɹBß“ÿÿé¿ÿ–f‚ ï½ÿ~»¾ê«k–ü´îN¯.¯ÿ×Lº¡¾¼ ¿m)uþ]P‚~°ÿÔ%ÿ ¿þÒ®]XC^ëó5ÿë×ÿè,ÿ¤¿ïÿ®»¼†¯ƒg___·±ïôD?úþÒÿô¶×÷ÿôþú!Ý?ûÿÿþ÷Û¦?ÿ×3N—L:Ø}]WK}Ù¬Ÿ:  ïý÷ýþPŸýBŸ8¿ëüÚK¬çëçõù‰¸â¿üòýþ;¯Q×þ÷]»ž__ ëá¿_ÿa÷·Ï.Λÿ}ÿýj¯Þõé)uèÉÿýj]Ewïÿïæþª_ÿw÷îÿÿÿ®gš~¥ûïûku彩º×m{~N¯×ru{f‹ßt¿÷úÍ>Ý¿ÿþÌÿöÌÿ÷íþ½ë]Uõþûíëû3öÌ×ý™ÿ÷VÒkõýºõ¯þ¬QAÕÕ6Õ×PÚj·m®×úí~×Û3ÿÿþöÒõÒýW[muö×ÕkµVþíC×öФÒÒzöÕ[[UÛ .EÑuöÓn¶­m;V^Ðᥠ$ôÆÁ$V©Ä¼a Õ „ p¼6•­ûiZºëi[u~’zzPÕ8tßi¶Ž8Óy CJ4Õ´“°‡§i&ÚA›MŠŠM4ì#´¡¯¦a„6ÂQI¦Å?ö%Cl|&mMŠ ±*„˜ÖŽ€â¡„¢‚N#BƒLA ÓNp#JÅC¦0°ÂPÒ`ÂAa„‚ØH4ÓH'I´Gb‚Ga&!lSIìÐM6)bwN² RlB×¾E{Úi±M0EÉ”â©Ó¶)X§µkÃýª B§5 ÁlðD0…„ЃÂèÚ#á4ŒBƒ^Â(v#¥3Du‰µtŸµ;Škb¥@¦!xb°Åh0„,SV˜@Î8!!ƒ(@T;a„A‚a ª ! †D0L Â[C èD0Bˆ0¿øˆˆˆˆˆˆˆñG@š"Ødt¤pÍ6)B `†G‘ÑŽ ÙTHq¦øˆˆˆˆˆˆˆˆˆ´""""*>b"""""""8ˆˆˆ“ ÿ»¦è}ù«ÿó‹û^·ÿ_ýwþ’ÿÇí¤»Ø4~¼âßõn*ü"&!Gí­ëúÐa)Ŭ0Â ŽøfE+ÿÿâ›þðÂúýiÿƒ8?þ¶£¬Ey6-F{ÿ%De¸‚{Êåyš7Š#y’Y<îfIHìc;Ñ Óÿç¦׬h"<níöß®¿ÿ úúI +AwÇþÿóEòa;ÿ™Q%UJ““%ù1ýS»ÿ…ÿ‹ÿ¤®ºOõþ"í/ú_ÿÿ^š]ÿÿ<½~¹ÚÀ§‚8×õ¿Q§÷ÿ¥ÿúÿµ$àÛKïîý½}*öÿþ»A£ønõ¯ºþ¾©~—ÜpžE³[=×r‡äÑÙÔ·“¾@ðL)ùŽˆ©¥5/ô„‡,)Š|˜Dtqê|Ì-”&A/›Ê3‘ ³B!‘¶\gˆ‘tI‘¶|gÌÙ›d1›©/cNùÅÈ_—3B8A"í?þPòª`ƒy/§ EËÅðA‚|Ìæ|ÂxD,Áž3láTÖx>3Æm„tˆX'0ÉÎŽôl61M†ÁݤŸd›˜taáƒÐN¡Œ4‚¡pèô™cß !ÿ¨„îÄ&Ò–:õÛ­Òtž'Iøý-&Ý=Øm‡Á™ ÃÎ='Á˜KNÒÚt›VÞqÛMúkOéZIÄ«lPoÝ&Ò–:i«ú–:I݈AÒÚñôý~?ÿÅZÚÚOï~’jÜSîßêÞ—¿á+tqûñN•Åu¿êÿZKON­é7ãÓî¸÷uøüwïÝ_ÿÿK¯»¿U÷ºÿJâ½ÿÛBŸ~´º­¿ûým«¯õ{UÚÝn½oÿ_õú^—O¶¿ãõ­UÕÿ»W_¯µu÷øÿÖØú¿×ëj·ïðÇ×ûõçÿ]üBÛþýu¦ {÷_þÿ_Í} ýýþÜ?ý…õûÿÝSôÝïµÿÿ÷^kúÿŠ;öëÇzÿÿé‘ì¾»#GÐkÿêÁüxÿúþ®¼¿Òºÿÿÿ¯sßÿŠøor†TWïýÿaýƒ 7aÿü?ëÿÿzý·¯ÿ¯ÿÿÿßuüÕW þÿÿÿ“ªßõ.»ùuÿ÷ ü½?ÿý÷àÝÿýÿÿÿm/oýüê ÿ_õþ°oßóYõÿÿ’ýÿÿÝ'JÁ¶ÂZÖᆗó5ÿêÅÿûçÐïú¿ýýïPß{ÿú›ÃøE¿ÿþ!~mŠn¯Ð…ü{8¿ð·÷µÿ}Û|‚ש~A‰Ë‚ Y 5íõý~Cò|?õ´Q‡Ï/þ»ý¿_ÿzßF+OF¯Ö¨ÆÆŸÿÿ××þÙ:~¯á¦2 B îhºþý}þý½þõ®ûô¾ÿÛ4M™¥þÿ¤ŸmÒzýHÏãëÿkýþ¶¶f›O®È¡ðŽ&Ï´ze<Ûk½ÿÿõ³?º=þži÷WûgÿKOî»Ý]Ý-µ¿Mo[ýüâÿ×äfIÛI°­¬:èÜB´6é8„›í¤éiZ8û¦×½5ÛØjî•î½ö·Úí¥a+K½[öêBÖ»ä)­=§ÿØ š i²e¦’m &Å1M„gÂÝ+ Ú‡’¤Ú·Øao†špˆþØJØÛH&]ZZ DÚ¶IÚQ¦lH v“¸a0¥Æ¦(&4Øa$Øa&6A0lB ˜AÁ×þº¯a¦„˜ÃÜ0ƒ Š©V+¤­vœWÝ}Š BM;Ø„Å[LR¸ðƒ ±*ƒ‚.6“Ø…Á&;™žMŸö!lS{R¬Sa¦Á6×ó5ˆˆˆØˆˆˆˆˆT÷O]-+àÁ4"8a…„ ˆaˆa`„D0„DqDDDDE6„E1O£üp‹§Ò¥üŽ¿áøŽ"""#áz„YáúOUÿÚ¶©¿ús˧§ÿ×þ°û _ëÿÂuÿÿ¾ê×Èè-Eÿ÷ÚêÚÿÛJ¼Ž¾#Ö’ÿ]°–“”4¿ìsô0°º¾šÓÄ&(1…åC6Ïăùع÷ ¾±ðƒó"­£º±öÐaˆñþ »ÿÄGÝ(öÒÿýôÚRtGf'ÿÝwÿø@· ¤ÁŠÿ¦ßý×ÂZhR¿ÿÿ×úz§ÿ×m|–"Ì€³µ›ï„–Ѽ¬›”™Ð³¾ŒìÎ ¤kŒ‚ŒÔf@…ÿÓÓ¾Ùu÷Ò ïÉA6U™Ú¶v0•ð¾Ûßÿ(ÿaÿûúê÷Ãá¼88} u¸wÿÂ_¬Œ]_]ë3ö»È}÷ü œ¥îùØ4í¿þ_~ÃMyuO÷”_µ‘ˆ•&¿÷ßkÿÿKãâ=ÿ_H3PF¯¼õúÇ×ÿÒÿû¯uÞׯ×þŸõÿÿ_ëÝ}5Tì6½?ÿõÿ]ÿÿÿöÒNáI·j¿Õ÷T¿ÿÿþ¥w¸mB ‡k %××òBÈ6CˆW¨ò…"’Dï1qìž=Å Ú ‘Tn)óC˼”è¬" ó è~˜M[0¾T¶`Í`ó 4NÉKȰJÉ òNqPÈ°Ì G/R>Q$  ÃÂ!:o:™ŽFòA³xD"ràøBYüöqÏ…áõ'†âĦ㡄PGÌá6=gÌÁžaè gŒÛD,‚H ñ›tˆA¸AŸ0@ˆì&"í0A ˆäˆtŒ Ïh= ÎAœ2$ap‚GgÅ0=0Ÿ§ Øþë£àôÝ´Â5†ÕncGÆÓOƵh:Ia‘Ð^ðƒÎÍdša… 0¦ƒ Ƙ@Â=†š\°ƒÎÑ 0 ¶évÑíºa0G·„Ñðl":tÑ­¶ƒ|ÄöÜ ƒPÆmbbV74lq<<#[šGaÂ0íPA¶ƒPÎHÖüDX_tqØu–ø•l3Qá¤ÛMiVÜ0ƒøB Èé”'ÐO ³Ñá¤bPýØ2Ä'](ã°áÑâ¬i‰QH6“iÜ>“ÂÒmÑí£ÛI¿VÃéa‚%]&ê][{3Ò–ô›ÞžÃÎ=+¦ô›bU´ÅÑí«´×¤ßÝ/IÚ¦ø§ÝÞŸ{wþ"""²:b#Þ)´­çÿÄ&é^ž½Šm)oIé´­%«wÒuM[b¢ž¯Òôqûþ•Äã÷¦õÆœU×鸯n›þ¢¨¦û~›¯ÿþ?î•ö½ÿÿßû¤ñ^¸×ïëôûŽõ¤õ«î’ý=«úMÅ=¿M¯^ÿÿu{õô—^“ïtÿ¶—­ÿö¿¯«ûZ¯ý/í~¾é®½ÿâ¿þÿíuý?]&úÒ¿þ±ë®ƒ Ư«_÷û ÒßýÕ}ýïññÿÿ[{û·¯ê¾­|ïl|~ý±õÿþ—ÚÿÿÍ/Œ?ûÆÿë°cï÷KÿøýV«þ¿þ¿½v -ù±ýÿÿ__¨ÕëýÿkÛëL?ÓözéøàÿÿîÖ½|-ÿS‹ÿ¯ÿtqþÁ…ý?uÿëÿ`þ?÷þûûÁ…ÁÿÁýߥ°ÿ¯úö¼׿ÿýÿÓu¶¸¶–×m'ÿÖÿá‡ÿêÃÿÿþ½~LVü…°ÿ“©õÝn¤ëÿéÉëÿÂ.?òżmÿýlAV¸ù0—þY×á¿ýº ü²×ûZ¯åÕþ°ß÷Mô ÿÿ½øAv–×ÿÛKÿöתÂ[QŠÿþ_Á¿¯´¿þ¾ÿúßðo÷È„ioLBb°ÿúÿý-ý~ÿ¡ ÿÿcÎoWpÂÿÿ¿ÿÅÿ¿ëÿÿÿÉ÷Ï/û}taÒ0೦Þykÿÿëÿu{üâýgÎ~õ®êµðÈèÚ¼â÷ðŒ3ç‘o<¿Ñ«=oþ»ïzýíïíë÷ýÕ¤) “«þëzëÿK.˜úÉ×_úþ½½Ú»üº¯ˆÿÉ×¥í÷ÿW]dé³=ÒÿVÌÓ¥ôÙŸý™ý÷ûš.ÿþ׫[öûÖÌÿÿ×þ×ÿ÷÷þ—÷ë¿þ¾ÚÿÿÕ¯úwœ~ÚÝ7èãíµµÒût¶Õ׺zö×¾ÒîÛ[Û®½+JÛKûûC«I°—•`ÿ[„4Û «t×v“hzßí¥k#Ö¶··KêȈÿm¤Ø^˜i{i¶ êžÃKl+ $í(ÓNH pÒ‚#Éä9Èt †ŽÂAm$$› * &ƒM4a{Áä˜a}ƒø@ÂlM6( Ób½8"ã‰P´ÿb‚ 'aÈy†› &0„ 9ðÂXM6)Š S0› 6**a6+bgLBAÁI¦¤çqI1VÁ°Ã wÔrL1TÅ&Ä%µM5bšÒ S¼~Ɉ†"Ðe д"A„ÓCWµá­¦mOšßÛ•bžöƒ ¦! A0„D0°ÂЈa4"B Âp`…ì0„A…††C!„"""&8WÓEôDDDDoÄDDqqDDDD"æÂ'8ˆâ""8ïô7øF;º}è&ÿûúOúN‚tµz|®Š¿ÿ¥×ÿ^¶–«ßþÿõõÛ¦×ë¯øa„¿n˜i%°ÂL0H n—ùøb{a²7CƒˆKú?çklɈˆþ¨ùÿâ?é$?ÿø‚_õÿ_ûÿ›Úÿ¯-í×ÉdIcñ3.Îè_™äfGD¡˜2b;3¸Ù3³S*±ÞgdR"6Ebþÿݧ¦ôдïí>õm7péþÿûÃ{÷áÑ݇Pÿ‡»»»Dv$¿¿õ¾v´¿ó¾Nfw|'"ërTžŽß߯ÿþ!§k¯¯¯Ü;þ¸øÿÿ÷×ïÇ×Å_×ÿUÿ6¿ÒWýãõ__¯ÿþêßÖ¿ýWýkíut¿ÿï㤴¿úÿ¤ºÿéþ«éÅ7È)-,ƒÈ$C”íó­þDÒ¯ù!$–Ȇ®AÄY© ÔG\èg ˆN›Î¯73G3D@³ˆ„a2‰LD'’¡vL§‚lÚà‘ó†gÌÁfØ@ ϙ¶äì“òxHàÂï ùœ0ˆTä ŽÉ9;!zn!æÆleÈÙ›d26È1“›9"?U¢¥Èa¥æ È2D ‚ËpÜØ¥ÈÙ„@‹ÉÞ„ Dw› ƒ4K xDrD9s8h"9&n§öÓGÁèøôÇ £ÛØÑ­¸A²?¶›º>4kèöûö»¼'ûúa£[×Â4a4xŽ-4ll(Ññº>C'0ƒjÂv‚bÃ,ãA7£áæ˜8wAZ€ƒh è ᓘAÃÎïÄ4S‹Ü8JãۉVÒo´a‰W 'í¤ÿ¤Øpá–¡;83" «°Ó8G¶bPô­&ôƒ‡M û %]pÁI[VÃîÕü'ˆO³:ä­¤ÜBmX{­ÊÆîž¿t«¸mø÷÷ŠzuÒUºox¦ßIÿ­_zwߊoÝ­éÒÖú¾S÷únÛéÒ½'ýë¦×´›§Kö?õ~Ý_õ÷ÿ¯¥m}¤ÚK·ÿOý¤ÿ¥ý}ý:ã­7­Çÿÿõi}þú_Õõÿ¥ôÓÿ§öû·_ýßïºÿÒëþý/ÿÿÛÿÿ׫«Uÿé­þºÿþߤôºÿïëÿïöÇ®ÆÇÿøðÇßÿÕ¯ÿ¯ý}þýõ¯¯Û¯ÿu½[Æÿÿ{c*[þþ¿÷×ÿxÓ ¼WÍçÿú§ÿé¯ã¯ÿÿë¯éÿÃÿ ú‚(…tÿ½k‹ô?ÿäSÂlŠx_¿øaë×ñÿýÿÅ÷ÿûhã×ÿÛ÷î¿¿Ø?ð_â=ƒÂhzß^õÿÿì<+ ‡‚ÿÿaÿÿ$Uÿÿù0õÿÿõÿýu¿_A‡þqþX”7„hÉŽÿ}õ–%äêÿøaá-†ð‹cÿÿ¿áÿÿ_ÿÿM¯ÿë߯ÿá¿ô×àÞéÿl ¿þ¿ÿÂY ɃÐOÿð}ÿ÷úÿÿÿÿ]µ¿ÿÛ®¶ÐOÿäEþÿðú_Çÿïÿø7 œò ‘˜o_ÿåZoÿýïüòÿWßþ6+Ï/ÿþ+ÿò„ßž_ùå{æðÞ¡×·½#@,ç»ýÿúœß<•S}ìC¥ÿý¿¯þÛÿëÿwÿ_g_ÿñþŽ'z·®ß×ÒRþ¿}üyu¿éþN¿ÿõ¿üǽúùuÿþ¶ëÏ^Ù¢ÌÖ—Ú¿êæ‰×ýµþ»ÿßõÌÿ­/Î[ÿ﹟ÝZ8õ]½o¿Û^Û?ÿ÷ÝZëWßú¯ù?Úî—ßÚM«i{ëü§m…{öþPýwÝëO¶Òm-¿ºOõÛB­%ÛU½º´>ïäbT­Xi.ÚÞ¾èã»Û]Òºmmÿ2ÿᤃa¤O ƒ 0¬Iº4Rh0› -°Ò°ŽîFçÂìþXæA ã”¦U ƒÁK%* Ù©VaÎ9^y9Ç+ ¡¥l®ÚVík[K´íÓîB¤jÚVé' ~)4JÆ6)i1±)ÐM0›!Ò  Ø ƒ ±A0ƒL ö*¥Äãí+J)‰O0ƒÔ#pÿ*+šzjÅ1LV­*Û±1ÜDDDDDDDDDDDDDFÄ&)¶)éÆi‚!íé„Mƒ Sb8"; 5´žÓM{\ð*šý†×M;†þÔ&T 0šžOši„Õ}Ž" ÂqÁ0„A„"!„ Áᦠ§¦@D™†Pê„YÎÃ4,!bX0„DC" ˆ†`„DDSDDDDDDDGtŸ‹ˆˆ‰6XÄDDDDDqEóDDB,ÿלZ]?NdJ¿IÿäØW÷×AÿÿKMuëÕã¥Ýkà RÿñºVAaˆQZâh~˜ Åe¸¹µô¡Î/aUˆú¤Ïøýqÿõ¹ÅÿûÿÿJþMÁÙÜ6dLŠ™åP‹2´f\dfBïÿ;ЙYFˆÀBáLG(2µfeoÌgâJG`FSÁr)Eú}ÞšýRñÜ6¡  Â¯óðÓvíÚoƒ‡Á°áÃØÿáÝ-¦šIÜ;é.ß̵Gsýº}ÿÒ[ÖEÓ¾F'éëz]£5þÿþ×ï¿8¿ZÿÔ^ÇWÇÿßQÿ_ÿêß_¯ÿÕ_þºÿ÷W_û‡ß©P)°æ„NOþÿŠÿ~¿þû¬O}|4x¤º÷ú×þ»ÿí¥ÿß×Õ§mºõ÷ý?üì­&uš³U’Ïh‰ÿ¶­¥È” ¼ÞC÷¾³ˆ†0ˆ@zo¢ œÎ†C2³æahämErÎhˆ4V„¼ŽÊ²¬˜2ŽXÑ!« J„i”fÞKc\u²¨ÏdÆF©EœGVK’ ¡È’6Ï2@ÏŠly,ÌSFr4<ã3“™ 艌  Ãú8÷J[â»h&Öö¨:º½CwH1 ¶ÛÚi é6•ì'bUÒeºb›pŒ=&Úpé<7VÝØI[µNÜãÛŠtï­.þqû½U6“ÂOéŠm¦ßÿG¤ÚKNÅ:¶é6“´ï¾“zK^£Ò¾ÒoÛýºÝ¥¡é-kíî¯×î;ñé6÷_÷†ŠkïoÝ+Vôºoƾ•zýöÒwôŸIn+Ú½Û¯uâ´¿UÒuT›ªëý&âŸô–ºûöüo¾šÝS§ÿªÿýu­[ßÚJßÿ¥¥ümkÕôÿkûþßÿý_é}~¯·ûkûÓ÷ßÛz^õ¿þ®þÖúI%ÿíÿ×íi_ÿ¥ëû¤÷ÿUßýªmoÛÛWý¯ðEŸWô¿öƇÿûíúì_Á¾¾¿^’ÿ uÿâ½ýZþ—õô=Xa+kûWCøÖë«Ku_¯Cúµ^ûýÿZÕ~ÿýE}ÿ_ê± \E/õݧ¯ÿÿWÓ^ Wÿ½½ºa¯¯ÿ_Û_êÛ½[ÿë¬WWÒµüýÿÍ¥û# EÅzÖÿûϥ꾣ÿþÿúêÿ¾lnÝ_¡Åû"“ïÿ_ßì\?Õò/»³ =×ê¿Ø?ýk~ ¯à¿üÿúÿúÿ×Žÿúþqÿ¶®ºøEÇðÚ^¿Uì?ÒkÿÞqél0E¿&iÿÿÕ¸¨Ž/íëûרíÖ—Õ„[ïü"ßë¥ ÿïÿäÇ8k“ÓÿÿÚ]DÔçrX½ÒÿÿÿÿÆÇè.½¶TWù0ËÓ@ß·ÿÿÓ~ „ÛßíÐaɆ]e¿ëÿKü0ÿý¾Zz˯øAoþ]~”Úëþ¿þ‡ëý÷[Qïÿÿû½kýuá/û)ý¯Áëm+ÿ×_Á´ïÿþ ÝuþÚ_·¿@ßþ½mÿú^—éêyÿûëþïþõÞÄ'Ý'×ßÿþ¯û}~—gYå¯îöoñ óŸ¾Å1Y´{¿ÿ]¼¨@ïíÿ¿õìÍýñZñ_ú]ÿ¥ïô»ûÿëöãüNõÿþ‘‡QÇÿÿþ믆ÿê]wÿþÝõmøG¿þ¿·K«ÿî¾­íöýÑ…O_‚oýg ÓÌ­˜#†|˜A„ Ðy+3l‚GgÌÛÎ h‡EY˜ ¢Å„ ñ›dŸ3„30ì gÌÁœ0A„ Ù ƒ/„Bø3Ä`ÎgŒÙ ˆä‡ÂÇ,ÙiáôÐÐã@ˆäj…Îä­¦š Â^Âa£8va¡Ý„ŽÓ´Â 0š Þ˜Fv;ôxÚk®–ƒG¶0èöÑò á¤|n˜h0ƒ&scwFÁ鶘MÜ&cÖÂ6 ÑÇs»@ƒm§°Hù ™D:0í!­F¶o £CoF±zl4knš ûnÚ=Ñ­¸M0Œ6¨ àÉÌ áÃᓤѭ´i!ÁÒ3›GŠ3¸M‡ZpË: †‘£CI¶a ƒd»›tghÎÒ ‡ÎÒ  ƒ‡bŸÄDb/p“o)î“Ó„¬…ÓA+yOi¦’·”±ÔJ¶ò±Ïl;Ïm'I½Øm ›MãŽúVÚ¶!:°Ù„…Òm'm&Ü&Xê%C`Òl1*Ü÷IêÜ>36ž=ººGÓµ·¾Ö·é6¬6’o¤î—Ü' |ãµ}'b«m´—¼ãÒ¶)ˆN“qOMûîßÎ {×¥é6¯·éo®ÿMÿqÅ|W_¥ìq_I_Ói}_¤ÜS¤Ûý5M°i]1WV’»¥ôôÅ:¶ÅR¾Ÿÿßé7½t¿ß[|o¶ÅVÿ{Mׯu«ÖÚôÚûýÁýxýnô¯ô®+º×õzziúut¿¦ŸúT’ÿÕ¿Òu·½¿Jƶõ®’õo­×÷ïÿþ¿ßïKûétÕ¯Oú]V­½+ýWOÕÖ—oýÿû¼ßöëñ×_ÿ¿¿¿Ûßíú/úëêÖý-úÃi7Nýÿþ¾Ö—BØõÿÛ_­ºö;ïc­ÿMâØë×õ} ß_¿Ýïü>õ®ÃýzûÿÿÿõׯÒÛëÿÿ]úÿüÿµukì~ÿþ?ýÿÚPúöÿÚðuÿuÿßë¯ð~Õ‘Åþ{kúÈ¢¿é_ÿ¿æ¯ëW³ ð½§asâß÷ï¯ÿÿø?ÿ®>Áÿ^™t¨<+ÿ‚ÿèãöEƒþ½`þýÖÝPÿë÷ô6ï¿àÃØqüm¯·Åzÿú×ÿÿÄø/}ÿÿÇ÷íׇï®?Ø?ÿˆö ¯ø"cßööé¿Øÿì?ÿû¯ÿþþ›ÿ¯ì=¹uyiÃÿåÕëÿëÚÿÿ—§ü"ãRc¹«†«ÿù1Rëÿÿä]Z×òàã…ûÿäê†ð‹þ‚ÿôµ ?Ãwÿ²êAïý}ù0=ý|±·þ?ÐX7þ ¿¶—¶¿ûixÿÿÿøA}?ÿýþÚ_oú~#êÿõƒz ¯ð‚×öÿõ!õ‘ë÷õkúÿßÈ©ÿÿ õàÿû×ÿ«ÿþëÿé}_ÿ×ÿý|4¿ßßÿÿÿÁ½.×ô¿øâmüæÿÿ(O„Pïþê+ÿýõܤÃêµü,«ÝýΛÿ·XE>¼#8_ÿþïÿ_mùå®ÿÿ¾ûÿß³›á?ýò}õÿÎûûïþøE¯ïM¿zÿÞý¿ý~ïý„¿ýî»üzÿÐÿÿÿ¯ê¾÷¯ïç;§þýQÄþ•ï]ýëûïú0Ÿÿòÿõ]ögë}«ù§þ¯þéy§ýuù¢ßî¿Áw¶gý™ÿuÓfÞÝZ¯ÿûkf}çÿüºöÛ3_þ—_f}™þézùþéÒíìÏs5}úÿîh»ý5×oõý½ê÷«ú÷Kö׺ÿo¦Ò÷_ßöÖëÿÇ´´½´¯tº´­§õtqì?ý}Õ´4ÿt?Ý[Kí¾û¦Òmõ¾Óµo×t­u¾é´¿l*õèz8ïÒð…jéSÝC èãáî¿zm¤­«i/é;kvÝ_¶–›kÕ£Ží/ý« $¦ØJÒnnaP|SiECôi¦ši ÂvŒ8l0“hîÕNÂ0ðªà G„M´˜àˆòM«iL6•£Ž‡=xu¤ª¬5l$Ú0áÚLm¤šiÃI† ±)Ó ãØœxA§ .¡¨b¢¡ØJ)†0ƒMŠ4¢˜a$A„تb° Š „A±A› $Ç?çew\lRi±PEÆÅb“Ú SVÃM4ÓONØ…±LVþ›šTö)­v!5LPbƒMŠb›a„|ð$¤aÅ1LBà‹ŠÓƒM0Å+*$;UµÂ vÅ;Ê „×< h1M{TÊA¦*· ;[´þ×°™P)…RÜ/çb¸OÁDB  ´ a ˆˆˆˆƒP@Âq &„D¡†Xa`„Í0ƒPM”!jƒ˜B"A¦¡a4B"B!„!‚aˆ`°a4" ˆƒB"B!(B"""!‚DDDDDqþž""#ˆŠ4â"â"6"""""‹æ""""""""8ˆˆˆˆýרH?„?ÿ§òß*­/øÿ¯õÿüâÿÒm —¥ÿuµöX@üAþ(„8b¿Ðh3ç0‡+¬øú?4~oÇÕVÞq‰/ý$éÿÿõ¿†_¥]ü0ÿ, kö·øaäHŠ„vPe>R3QÔdæI2»çs²&3hÈÄvPËqS+g’Ò>Ì‹ì;³)âdDH‘ ƒ’ڟņè=;Ð"<äÓO¸jDy2W]ïû«¶_ÿâÃè}à­ëè Æ–ŽîÇÃáö÷J ˆÿ†ïîÿÙ(YÙŒ…'kIÉ’«KÎèŽý´ÿåe”þJVïð°ÿÿö¶½u­­XMi:®½wïí~+Mïþÿ8ƒ~8ÿ_ˆëýt?ëãÿõÿÞ¿ÿWúÞõÿþ·ýúÿÿÿûúÿëÿÿÿg÷¯ÿõêºêºªÿ§ëÿ~õkó± þò$•WÇõSªRµeÓè˜G,—”é6EZy/фɕF{ȃ¢wÿ’ì„Fy9êà =|ì y<Û93dlfdxͼÜfdämælfÆEÈøsÏŒ0ˆX.ÈìÉ’r°…‚ðÞG2dˆ#³A:М*NÉÙ`|¤3æn<@ˆw'e†KËØ‘òs)òaœ  ðãž„à¥Ж!äÄÉÁXBð0ˆy“0@ÌÌÛÌ lyP@žp ñ›h…ðÁ|͘A„Cä¹ã6d\‘0‡°ób—#` <¹ ðŸ[Ñ‚ ¢P~Å1Ax5 EÇiû£ÃÓÂÑì4ôº=¿F†oMôh ÇÚaÑ¡£Û èÐÑà~ôxA£A;é£ÃL аÙã5 „gkÅ£¸Î³4h &ƒÐ èÐð£_F† îÕ¼¬m„é6; £[­4hm«£Ý„­Ó»¦oEÃÇ4k ÓG·¸a4õ¤:aÚ “aÑáèöĘ”?Fw†˜I6i*m+ ºZ $›§cÑÇ{ƒ2m&%“¤8thzA&ã§cÑÝ„›&‚ ‡PèãÒlgƒ¤8tgi1†YÓh' º'd'JôjØ &¨1öé6Ã.6¸bU´›d â‚mÑÇn®¦ÛàíÓ,uÃI¾˜ø•t°èãÂMøˆô´Ÿ”ýôŠx§j!>ô•øIÒZ}¤µoÒÖõµÚÒo}ˆOé;¥Óú7Nèã·¦ùOzÒmÿ}ˆM¥-ÓÓ{ºmé6’ëÞèãû®›Ý&Øœ·nî—Âm[ëzêºmiªt»Iúm&â¿ø¥×Û®êûüiÿ_ûÿu§ÚúïÒ÷+_îþãÕøõ¸¯]×ý&ÿWëñ×ÿô¯ôx§Þ¯ý.«[ýŽ»»Kú±¯n—ý~’oékíz×]zOÿíúZ_Ý-߯Õ~Úÿ»õú]=ÿþÖ·ðßÿÿÕé&íýÿ_íý¯ê¯_¦½ëÛ_­+¦¾·}/ÿ¾ÿþ¼5ÿ8’ÿ¥ÿûûÛ¤¿Ûÿì|Zÿÿìòq?ÇkK¡ëÇý±ÿÿÇ 'ýã·ÿÿXôµþ$QpÇÒëÿ_§ëî…lº8¾){û}ÿ_ÿëÚãú®ÃèW]ýx?öí~½ß[úÿÃëÿàñ]|uU¯_ý;õ°¿ÿ¢~|5v §ÿ^½ÿè2è/ôµëÕ ÿÝkî£øÿº‘iÁxÿ‹`ÿðaEÓú­ü°~ïþÁá./âÁ~Ò÷®:ßÿþ?Ø<?ï¯õÿˆëþ¿ÿR,/ÿ¯ßþ¿uÛðÒé‡ÿÕl?꿪÷Øé~ÃÁï…ò>"ßïúüÿ¸ïÿÉÍc·„N7ûÿÿÿ'gW“Ô/œAq—ýµ—_ý¿ýe§ókÿ–¦ü%òë,CÿùuÃ˯ÿËOðß«ÿƒz 勸!*ÿÿà‡ýëô5”‚åÃý´½ýÿèzÿÿïÿ¶ýº¯ÿºÉ+éûix?ûþF=ÿ¿ÿðoöKàÞÿô¿êÿÿè%ïÿ¾¦Ðo ×ÿÿþÿÇר¯ÿBúÿߺä_t!nuA¿ÿ|¡?ïí×ú¨âùHƒéxE>÷Jýµï½üOÿúÏ/þÃxE—o½pºþ×öÿÿõ÷ÿ£ˆümýùåÅ>ÞyuàŠz8‡Ûÿ·Þ­ç—ßëïÞy7øF,`Ž;[|ýÿ˯ê¿~Õ%/êþµÙ:Þý.·ý!Ûz¯ÿ4]š-bv íÿNh¼ÿúþù§îi¹žß»fŠë_Rë[4KVh¿ý½Íuþæ‹Þ¿'[öÿ×½_Ò‘ûìÑYÿ³?ÿj¯¾ÌÿÞ¿ûJô÷ ý^«ß_®–Úžºî·Âî·»kºßôÚý¤Ýköû®×n+¶ÖÒÿÖ×½µû]Û_TÒýzÿ¹Ç~êÚ¶–ÚXCUý/ ¯jé6…{ö—ÚI¬5mzk|Œ·Û¯}ÃU†•9,( »G¦0ÂJŸi«!NÓN˜h ˜L0ÂL0J)6›JÕ°¨=6VB"ÚH5MSÛVÒ[[Im´—m%M´–ÑÇßklˆ.Õ´­&Ò´;I°“ (A°Õ°‹4êáåM8a Å0Ö%4Û 1¦aŠNÒŠbSÂp ÂAa„‚l4aÃÈ@é„ÛH aŠ÷„¶*ÐiìPA„ðšh84ÓMØ „ Šb<1PEǃbT&˜¨4ئ$˜A§† "Þ ÁŒ ÂaŠ„!fH"…˜¨l"<  Âr&)ІŠbS¦6)ˆJ¨…Z¿± UŠPìSM*†)¥ÚùàSM5ßì>Ø…±_§†![^qÁ„Áˆ`„\D[0„C0ƒpÂÐhC  Ða6 ÂÄ!Ã…„"L!ƒ(r…ƒDO.ƒM4ÂÄ'¦6ÐaJ±ML `„!‚ Âë`…‚ `šÁƒ""!‚ÄA„!„"""#¯ÁŽ".>""""""‹ö#ˆˆˆˆˆˆˆˆˆˆŠ'ŒDDDDDDF£ßûøH= ƒèz¼$ÿðÚéVEeIôƒ–åÚþÿðcë××תõÿ‡Õ´´›K¿KØiÃÓI†»a(ð†+ʆaå‡Ä1Å!aˆM]†’ F<#Æ#ˆŽ#ˆöÞÎ/¯c½/þôúó²³ÿûÒçbÿ×ÿ„EWË8)Ù\ÎËYs ÙK„;tGÎÖrœúÿá…†EdÉx©XŽÖÙë*í!e>U‘Ù,v&D”¯%„œ]¡At-;þôBÏ <:;µ{ÓÃún›¸|àÁ82_°øÿᇺW¿û‡‡Ü;úJÓÐo|Í?ÿ/\0ÿÜÍmoùÜ-÷$©ÿÌ£ï·tö¿߆­ âí~¸ïÿßµÿâ½§×õý¯ÿÿúúW×ÿíÅô>—ÿçsG24©úPA‘ó`ÀAï½ÿ§×Áûý/ÿ)CIyßÿzz6 2þëžZ8ý|ÈívçKõÒÿ_ 70ð’_ým&÷A>CÿÒõè~•¾YˆlÔò*Ô)"Ì2%¨‘Ù©”T—’ï Ø_#:ÛÒH£S®j²Tòvu3‘„mdX‰äC?*‚ÌÈèEf³ÑÔÉÑÈ" ”ÈuiéÖðæ ù›z¾ùÂ4#ìäx‹ä˜¥Æ`eÌ"&ôGÕ6 ޼„»<¹"9;!ì"ŒïOOǾќ;MÇOÝa^Ål|ì ZAÂ:6=vÌj2æc‰VàÜ6Œ; Ú>Qòyïávl4jÓF¶ÂÓwOi>óÅG¶oO4lz64ƒi„aº3´˜ö!7¤6whîÒmцXØ@àËOýá‰Ý‡Gw­{ œ:i 4AÁ–q<‚­&ûJâmmÞ·§wxA´®'A6“|B“}0¢UÒ°Ìq*Ûº=¾OÿÊ–Ì„ÚO¡†'¾Þ•¥-ÓM{'ݺ»I4®)Ò“lB¿ó‹ïøO}·£§ßêwñÖíðµÓïïWÿqôûúÞ×Ý;ý6“}6ñMè/õõ÷×I:zÒ¿oq½?o~»]%^˜«Jöô›ñ÷WÒon¿~’ã~Ÿú¯i~—ºßÿ·ûÕ:Ýöÿ¿N·õÿÿý[ÿ·^úMëON•ékºOÖ—þúõï_îºÿ[òãW¥ÝU»k_ÿÎ#±@ÿÖ¿÷ýýßØØ¤ÝZý­i}}zXú_öÿ­U÷ÿõÿõ}u[Õkþ·öõ¿_uô¿þ»þ¼W×þëø¯ ‡¬?¾Û¿ÿÿõañ_ðÇ_ýýë¼ßßioÿÿþ?ÿëßnÕzaé¯ýkÇC _¿ì^ýƒë‹`àã`ÿ¯G^ÿ׬&ëuØ?\××½èõÿÁqøÿõå¿ÿÿ­8ùmÎ=ï?à‹wÿþÃÿ`ÿ¦aÿí××_ñ°| gžëañÿ_þý¨Fuÿþ˜ïªïÿÚéÿÿÿívߺÿûüºÂþÿðßøåŒa¹†ýþëò`ŸþÃì>^Ÿÿý´žûÿè*åÔþ]Kþýõ!/ÿí磖ù:¡¾Ÿ_üyÙmè.ÿÿúó£ÿɃÿúÝ}üÐÁ¿o!ÿÿþÒô¯þ¿/þ»ÿIÉ Î'Óÿÿé·ÊsµÒÿ®!wKúuü7žA¿Üêƒf0ùÕûu«ïÿûƒÿ¾ ÿþþêÅj—úöº]õßîs~ÿÿÿý[Šc|òûáëOÿùä]?ëþûwýG÷ž_þÙý¿úÍ[xE=ÿõü#ÿÿÿ½ÿÿÖßý.ÿÿû¿oëªõÂ]š-L&ÿ¯ûõýÿ³E}îiÛž_¿µïÿÿwÿÿþN³Eÿ×Ò_—^Úý}‘öÌÕš*éÍ?ý__m&«Kÿ)ä¾óO½ëÿø"cö×Msþ­¥ö·WZßû­÷W^Ÿî“ÿš+_ÿ~¿Ú{«í[_öýºü*ÿ÷úî®·ö¿i7JÝjÝBVëÿM;Ûm{éû¯¾O¶“¡¶·oªºWÚVŽ;´®Õ†º½°¶•¾·ÓÞØWKûû¿ÿN÷I´›K[ÛKmd-}M´qÝÚWa l$à wa†’§jÚA6ÖÕÖé´•˜M=;Nᤃ´ºMPb¢S¦!Óa„£pÒØIŠaà &6*Vb¡¯„m ºL بÓL Ó „áÃI4ÂIü0”l0“i„ ´Å2bT ƒMо¸ÂlNö)ŠA„Óba6)Š@ØaØaÅ1I­Ø t`¦ƒ RŽÂO¦Òkóˆ1á ÓAª¦!n•¨1 ª•b·h5*Oƒ UˆU¾¦¿a4šzwk< A„! Ä çM1M}ìS°›všf™Pƒ °ƒ(á4A„'ðÁeA„Êàƒ!ˆA„B"$o FPƒ „ 1TâÐÄÄDDDCDDDDDDDA„C@ÂLs¡ñ†üDD „ÿçaýgÿðÿ¸A×ÿÒ×ÿÞà 4•'äj:(Ö¨¬ ~a:J@ƒ†Ã¥ÿÈ£¯é)kÌÓè².ßw}/IÊ_DG™õšäkô]~vWi~×ÿämy ô—ÒýwùØ®ƒ¤ŸÇÿÿ¯®—ÿ]¯ÿâ•×_×ÿüì„Q#[[îŸÿÇÿo£:ó±’¿úúëÿà¦Áä©»½mõ_lÍf‹œTíåX`ð9ñ„ 9ñ—Ì Ø8@é×]uõýp ¾a¸W׺ë¯þÚ¶¿ÿ»´úáTI1¦E3½#_”i‘¿$#R\—ÓÈš×ô÷výüâ: ê% ¤iš³©šòDLð™ÎgC#¶P"r'3DGͲ’"¹42І) d†C#‘„_4/°”0’µîOýpƒPñ4núF¶é£c œá4ka taÚ6 ]0ì ƒ 1 ·M8bl#cFÀÁ– Ø™ ƒsÜ0Du¦ ØdÎki1‡Fσ !‹]úÿè‹iRl:8ïvtxi6xyá£ÛWI&ÆÞ“jØtSà %[Û !اŽ;I†“‡I°ÍDé6xA7‡Ø$˜xh0˜è0ÐM†i ÞÐa$ßÿñ*Ú¶“úMºÖÓÝ&ßVâoê!:][£Iµwot½-¥m'au½¤›I–:t“ñò+äoîEò3Ç«ŠÕø§ÿ☧ïÿÒ]tý~»ëi¾½ÕßI}ït¾÷é/ë¬$ýUý/év½=ÿé?8ýúÒâq÷µ¤ý7·¼WûÖ•á_o¿œ}·¥«Ž«ó‹§ßDLµç…øzõ_Té7õߤé?þ“{Å}?»÷%éï—úI7¿«}Ý+{é?Öõ¿öÿÜSïÓiuUÿ¥÷´·¿k¯¥ÿoÅ5þßõÿ¿þ¿þCà=/o¿ÇkÖý/ö¯aWÿA¯_ÿ·úkÒýº×Ku_ºï××]®ÇÉÙy|lî…ýµúþŸxc]ZN«{]׋^—úÿøõöïþØnh½†õ¯Uãïÿµ®+X×þ+ïýv,/¿Ò_þ½»ëÝWâýb°ý úƒÿñëßõþ»`÷OØ_â°Ç¡^Ö¿ /ÿñ_þƒöF…ð×üí}Gõ¯µ_º«Kõ‘Šº×õ××îÕë¿õæ·ÿáX>Á‚`ÿCÁuëøÿ]‡ñã÷…`üŽÿýBþ¿Ûà :‡üáWþ0_ðOÿÿÿa‚¬}×ñëýÔ~Û«ðE½‡ïì>¾ÿÿÿý‡ÿþ·°ü"ßî—ü~¿¯éþ]PÝüº¿„\~XŸùiÍðwÿ¿ÿÛ·¼‹¾äÇ+K¯òCÂoýÖL³·ëøAa½ùuÃË®Zÿ×,Çß ü˜ôð‚ùu¿þquú_¼‹¥úÊsÿÿ-ÿß ÿ kÿ[þø6‚~X¯–î‡ÿà„zÿªöøê´³¡ÿå9ÿéÿÿôHÿXKý/ì%ÿø_ è£<3‡†ÿÿÒõÿô¿ôÿ]úÿƒa/þŸïÿ×û_ý®ô³È>ÿ“ ùåï¥ÿç—ÿÞc Þíÿ¥”èÒþ!þE ìw¿Ú¦ÿ“ïœ_×ÿÿÞëÖyz®y½_¯žE÷¯ÿoÝ,"‡u±W[ÿÿú÷÷¿më÷¥û¯ûßë~¿œO_ßœê¼ÞŽ"ßÿ‘êF?ÖAàk«}¿ûÿ¥—V¯ÙÄÿ©uÿùuÿ¿öh¿uRé_û}WïŠoÿþ²ý¾þi÷ÿæ‹!­K®¯×ìÑio_Óš'3Ýo×/Ûþª_û3×Ì×Ç®÷[ÿ«o³5ÿûfþ»í™ûùŸ¶hµöÿ×þýºÿmo¿ÿ4ÿvÌþ½ÒsM­-ÜÑ¿þ»Zýµo^¯ö×OC{u¿Û[ûï¾ÖÒ÷_ úÝ^µuk{käHóˆìK7œÿoi¦ÿúomxiZý¥Ú­¥êÚ]…Ðî×ô;U´½[[VÒmtWm/îÕvêûKoû 'ém]Û„;Km[K†“i]¶©§j¾›a+M°•¤®”:ÒmXkjÝ&èT:«hm… ¥!PÛ x@ˆï0_×ûÚÿu§l+`@í&( Âl0¡ƒ ¦ØFÃF6PœS $a¤ØFxA±A0›Ž˜§„GÒi:8í°Œ86ÂQPÖÂ0ãM† ¦°ÒO´ƒa-´tÃÓT‚zi„âqð×a…b‚ka6( {A„»Œ&›Gb¡„¡Åb˜¦*(8öŠ@âqÔSÁ¦Åz aÿÿOA…·û†A‰âÅ,ð*¼1 ÖÓbšb°Ä-¦*ئ­«ØNÒìR†)ж)ئ¥@¨¦lVM„›M1LS±JìBh&…nŸ°š•bÄÑk•bŸØ[°šé¬0žšÃNža Â &ƒ *•á„í4ÛA¯Ißÿˆˆ†‹( §64B" ˆ`„DCÐ`„0„0‚a0L!Ââ!‚ !ƒ4!‚ &„0„DCpÐ`ƒCh0„DDDC"8`„!ÄDGˆˆˆˆˆ¢nqØ¥ÿ_ÄDDG¯o÷ãÿ_ôþ“úü·)ýÿøþš]wuëÿÿ Z¶ýÿ„–Ð Ð0ÅzC›çÙSôØñz+¥øAÄìOAø†"?èðçHÑñÿŠÓuÿÕý{ÿÿô¿ÿ\b«òTe>Cg`Ùƒ5d´ˆâ”ߟÿuÈB5³±Œ”Æ@q’Fd¦ó!‘*#³R;Ú Ó@ˆòî ÿÿŒ,>««ƒv¯‡°•ƒ%ÏK˜pßÙÕ|wÝüímyݬ;^ìÉ{UœEM4Þá†ôW,ýÿœ^ÓYšhʤû^vûÙHºs·Y_×ë¶Öÿþ¿ÎÄÂxˆãŽ?ØÿŠ×ø÷ï_Ъÿÿ÷øþßÿ÷ÿ;-¿ýW]=Wõ^¿ÿuø¿ª®¿Õj¿¯ÿN¾Ú_oÓUõ×OÎù)Ò!QIdŪdi¯qïóˆ MçC$ GS;Ò߿ۦ֓þÒmu_]×ÓÓ]mu×k¿ÿ×ûí[K[JÕ¿öÒí}/ö×B®´»Ò½\*wèU¯ú½¥ku«¥}ê°ëʰý¦°ÖÒÓm-=Z´ÛK{½´–ÛI†´¶Õm%½[[KûVûI´4ïVM„z{jÚ8ûCîÒVÒ[µûCm+ apá«éZk¡ipÕ4Ó8¦FÆ‚r  ¬JpàÒÓ6%º  Öч ÓØa&ÑÝÚ±M¤šjÁ„‚i|?®L'Ga(DqB›aB›„m„º Â#Á&(&ƒb˜¦8la6( ÂaA¶QºxL&ØA1ħ„ ŠA±ÅC ±)ìSéCbS¬' ƒm$MŠlJtƦ*àˆâìRi¦¤^w©¦oÓHBV maŠuÚi‚.;[b*nÅ1W\m1ªi†+žxd¸?×M4!ˆXa3Â`ƒŽ›({M 9N 4¦Ê4A… ¦ƒè‚ ª Ũ0X†˜¦ƒL&šØL*Úi Âb©¦šyP) Å{OµM0ƒLi„HCDXƒDD0ƒ ¦„\D0„0N"&„0„D0š ÂaAi ÂÁ†´Ü[ñDDDDqDDDDDDDDDDDDDDDDDDDDDDqŸ1DDqÛÚ×ú×ý†ó±4¾½5ÿ± ôëý/ÿƒ µ_m$´¿¸êé{`ê+êŒÞÂáˆB×ÞÎÊð`ƒ^#õ ¿ˆÿÚ]ÎÔ¯ÿ 'ÒÿâÒÿåÖº_¥™‘ADØÈÿ–K#°qØ2"¦v6—Þ™4<ìhÎÏäz;-; Räh‰)g`ÉIXÊ4̂١¦þq%ª‡ÎÕ#ª$EAÙÑ„aÚ¦·ÃwðpÛ£pÝçwø"ÇÅ.÷¥IT ˆðFvƒ~¼>¼2\0DLÌàáó°Ð|6I9KAܘIkáÒéõé%H6“aé6¹*YU_ï´$Ó´ßäÑ+ïI?Ú¯øAt±Ö´›§¦éºñ¿Ú [¿·ßÿzë¿×õÎ$Az j¾­­­í/øõ÷~ßÿöé=ëâý%õõ½+ýëQëÿ¯ÿý¿zÿ_ó #úv¾¶•«~¿ª[ë÷ú¯õ]úÿz¥8¿õVëÿÕZK×ßÿîqÞ®½*úÚr’$Ù‰ …GL‹ÇGÙnóÿ]|ëtÊ¢O ì™"ÍÙ×T‰<Õ;Í%:_šaÌeÖFŒÂ(<¨3™™ÂeÖNÈoÞÉ|f`±(3ñüñÂ!`»,2^0œÜHA˜DXvhA¢¤~C«àˆpħÎÕVˆ˜Jaž ƒD!‚\8g iäÀsm„ó.G ­/ÖÿÊ@áaäÉá8 ¹0aG´ gÌÁa3älŽ `SQœ3 àê‚ ºñL ]xA„CÌ3Äaý„h3ć DrðƒÐ!ÜC ˆ÷Þÿ@ˆî àMŒíO0‹vÈ"ÝééþðªvQ§£ãtkaÂ0í!Ñðhø7mÚ=Œ9ÓF¶öŽìF¿þûdg60m‘7L2ÏÎÐA½FètâU†îÐa6éè×G±høÚt{Ò47ÖÝ?ѱÄñF¶>to©] žnƒ·HØÚa5„l= œ2éG† ‡N'v‚  ƒÐmÂ60e‹Œ`|Dm¥¥‡I¶!÷ztäé;NŽ=&Ý&×ÿÿ’´› 't{oÚ·¯Û¯NáÚh;£Ûc¦éÕÚ $ŸÐM†YÓaÓý[„ÚM»Õ:W¼ã´îšÒm&öúm§k¦Ý~ûõnŽ>žõun«œM¥ï¤Ýi?¿ýZ¾éiqÅu­ÿÿýïýi^’wÓöîõÅ>•«§½o¤¾•ÄãþïÝ&ý÷þ*¿ô›KÞ×ôµâ½úÒãëýÖô¯Vÿ‹ivÿï}¿«ÿ·M:ÿÿúM¥ýkN—ÿ÷^­¯ß·¿¼BI·ú¯ÿ¿õ]&úÿÿß½[oÿÚúþ骾÷ß«ÿixëþþøÿjý–þÒßÿÿÕ¿íûýj›¯oúë×·­µº‚ý.šý®­oÛm×ñjÿõöúôüÐ"] ¶¾?[bþ·ÿðÅpþëa X~—þ?ÿÿÿë×ÿÿûŠÿÿþµpÄ~¡ŒÕÿ¼~‡ÿþùÃñÿ_é¿ï¯[àúþ· V¿WþqVÁÿò(žﯯkÒúÿþÖ×ÿ­0½ ý_ßÖþà ڰzwÿø]ÿÒ`ãü/ñý¾»Úá…ÁúÅþ Á…µÿþ'b@ûÿoa°ÿ¯×ÿýqÇÿü}‚ÿû¯ÿ°a}‡ÇÇþÿøÐ"ÇÿÿÚ;ýª¦ïë¥ ÃXÿÿþûÿ <0Ã&ÿý¯äÃ.¯ÿËáÿëÿÛMþß%#Uô¸ÿöá‡,„ü½5±½¿ÖòuC¾]_¸†Â ×ÿþ8?þ àØ¯ÿþ ÿ§ßëúÿü ½ÿíü@» o„<ÕÊ»ô¿ÿLôÿÞýiZ¿X?ÿá,/ÿùP¿ûÁΖ¿ÿÿºßÿÿÞ¾þ—÷^ÿÿƒkºƒúú ½¬ oð—ÿûülw·” ßý|,æ ¥ÿžN¿û½y½ó{f6ÿ¿ßü¬Ý>ßûùåþsÿt¿ÿŠÿº!Xt¾7ßqýý/ýwïÿç–ynÿÚ½:ý½œ_þ½é{×ßëûÿîûÿÜ:ÿ_ïéi6—oÿ¿ÿ‚)ê]~º¿ø#¿î²ûßýéz^]]?¥ÞÙ¢ÿ.»×ÉÖ§Ò»þÞæ‹÷ý³EïàŠ{ê]zÚõïî¿×®û«[]}Òÿº?>ÿîgÙ¢oÿý³?mþ¿ÿ¯=Ýk÷JÙ¢÷4ú£KK_KKóÕ¶•×kjÞêœßkÝkî¿ëÚê»uî—þý´¯¿z½ÑǶ“}­÷û¯utév“a-´½µí-[«N¿÷I;í>¯ím&ÒÚUM-öÖÐ"=­Õ¥®‡~ªÚMöƒwK­µmVøjŸ $§hwV‡é6mSòKxi&ÚA4á¤h4¡¥aa°ÂM£Ž h6ÒM4Á´“l$á&ÒBxaXkM6)a„¶I†‡„Ó‚/«aÃtÓNV]¥£¸§´m„˜Û ¥a0•„aðDy& Іá«6%:b˜Ób›GpètÃI§¶ D}Š„ðÂQI„b‚M‰ÇPÂLJxL0k‡WïÏ“ WÎâ¹àTð)ˆ[Å=¦Åi¦˜bŠb˜¥ BbV©ºÛ°Å1M&žÄ&+ÓA¦¦+‚.6*¸"ãÓ‚Å4„Å4“Å5ï* Âöši­¦+vœ1]aˆNMJA­¦ôÂyìSL-ˆM0šÿˆˆˆˆˆƒCD!aˆ†ˆ0„C hDCDq B4 •¢ƒ Ä0ƒ §Âa4BMaˆˆŽ"8ˆˆˆˆˆˆˆ†ƒ(pB""""""""""#íq¡ÄDDqñþ©uóµU¥™R¤ŽÑW¯Âõª¤š¥¥¬×é-$´¾XîªQÇÈA˜‚0gÔ/Å ¿vŸX"qñ ~ÓM­~>ïÖ¶ÿßÛ§áõÝuáÿÖõ{ƒ ¨‰gòº’;:3GcyÙb.²¤ŽÓæT3°qØÜvSåA‘<†2Hd§6D1ŸŒˆ#º¢œÿZÞÓM3±„ƒ!aÌM4/MNÖ]„ÊTií¦Óè{¿àˆ÷ðýøu$ð}Sã»M¾>ÞÃûu®1ëß>škòR½­ÒÚJÎÔûþÑÙÑšs±O}[®v¤½ß;Ø_†šý­¬…/ÿan׎˜þë×ðƒÇÄWkÿO×c8§ØžŸ_¯ZÿŠÿÿûû]Å$húZÿÿúëþ¯Zû_Î.›Ò¯ÿ¿_ÿÿÓ×ýn:úJDÖ¡>Ì…Qk__;«R¢$¹¼»%>QÉìÅ“¼•3A”(<Ј¶q!L4ÉF"­”èͯ´ŸérS36fÝP")É9À¦ ‰ƒ0gÌáBá':Bð…Ñò>EÑHͳÌ336F f `ˆ§ža¾F*ÌÁŸ2r3g"f`Í ÍlÁ£‘¡“™„pÍ 4#ænD Bd¦^A;/ Bd~NË‚ì¿1„BÁ:|Ͱ‘ÑÁ›D µÐgŒÛ0@ƒÂgÌØÎžl™‚îh‡æš„ÈØÑÈÜ”— ƒ6FÈ Èéüâ²3Æa¢½­:±U£ãôÄQñ£@ôÑ¡º*ÿG±Ý{„hƒA„|vè4hi£CÙýéØF·„éðl#@j áÂ4ÑèÎðƒ]Ý§Ú Q¡é¦ƒ0²Cð‹†ábÝ羄«nžcF±£[‰á¸vðcwF¨bÃ&s[GÁ£cviÃ&zhÖݹìl‘ÏÓF£[tѳ¸ˆŒâiupáÑÇ«tG€Â ¶aÁÁš—e”ÃÐpÚ<4{jØpèðÂLJmoÃ,á7º=°é6{A ôÚM†)°ö“icH63 ™tÜ8FvhÒpèãÁÑâoÃBÛ®“´ÂIö›tqá÷JLzMÓm»ôáØ„é2ÇM$Ú¾Øiªw‰á¥¸t› +a‰V(6“n»üDtïzïKŠ~ÝßÒ}ã÷Šb»wŠzÚJ÷÷Vø§z»«xZ¦“´îŽ=/}-+bú¾Ž=âž’aé,S«þÛO»Öÿ±[¤é4Ò·^þ¯µ®:ZZ_uôé&þú^×·­×ÿöõ¥÷ý¾¾½WþûŽÝÞ?ýêÜu~’Õ÷Óî“}úWôú\oNýú_{_¿Wúý{uÿé=~ß­ÿõþûûuZ]=ºó‰ÿ¦«ýöëÿþZ;¾ïßVºõúMõÿM:ë¯^Òûëýû]_Ý5Õÿ÷]í÷êô?ÿÕÿ¯÷ÿ{Ó·ïÕõö:ÿó± Æ?ˆì1«_ÿ±ßøcöÿÿ ÿëxõõßÐü1ýþèý¡ü5þÿ z†&kïéýÿßÿ×_¾ÒÿWÖÞúïâÖÖõÿØ?þ¼Bõ¿V!úÿÛ^‡Ë½nOÿëÿë­x…þýƒÕƒ>'ÿÿ!dq?ûÿïÿÿ]ÇØ?é^.˜?Ž VÇßì¿°‚ÿþûÿÿû=øØ=xÿÿÿÿ𾿰ۨþ½ÔWÿëÿ×þ»sŽéÿý‡þëJÃþoð‹xaü˜ªÿaÿXoð‹ú^¸ÿ_ÿÝz$éþ©‡ÿÿ¿µûÿ‚.?×·á†~þ¿Ö]Guÿÿûúþþ“¯õîêòê†þvª” _„ôÿàûþ þ‚ÿoôÿÿôëð„–!¿Ë¯ÿÿÿþ‚ÿü•©ÔÇÿðÝb?¯OþØKý¿ÿýA¿ÿðo÷¥ú úî¿ÿ¼ð—û %ÐKÿÿÿ¯ð{uÿõ¯ýkô¿þfƒûñ ÿÿþ!a?û¨â—ïóˆÿüŸÿºþ¹íýÿ\ò#ïçç×ú¯¯ïÿþÿõÜêƒkùåÿ¯¿þ¾yzùW¼U¿×Ú£8OÿÞ¿£8^ûÿ¿œ^úß‚8ÿÕýþ«Y…ÿwßë·ÿZoú©uú8Ï©uàŠþõ±ïw_~ûþ»×ÿ×ýzý~þþ¿éN®­}ÿÒz×Z¯_³?÷÷KÞÍyÏçeUòGàŠ}}™ÿ¯W_˜»ïÿÿ×_¼óý/ý.¶ÌÓšÙ¢·kìÏûÿÿÛÿõ.¿oûÞ׺Õ×µÒ×íïm&Õºÿm-o¾ëÕµî“è‰v»OÕ<&·ûiZ_}þ·¯¥þ«ý·Zö®—~ß¿ki_ºé&Ú¶¾õ¶—·ï_ö‡i^—ÚÕפ»k"èÖ÷ýîû‘Jš_î´öÚ®ØJчÚé>¾Ú­ª}„^ÑÜRh;mqPÒM6ÂÂ#ôÃΤ›„ÓN¦©¶‡h4Ù CJ8ôí0šm¤ž›a ØKIXa(kèã¶ÒTì*m¤šjšÒM4ÓÂ0ö4à ˜AÃK†¼qB!9¶Œ8rq #°”JpÂa6Â3°˜A„Ù,0Å1)Ûº ÅN)Ї &6$ƒA Ø„ÚMt¡Š¤ÓØ…Îâ“Mˆ[Å[PEÅOÂ4ÙN)4qMÕ`ئ)¥Ã±]ÚlRI±LT"ã„8©N( ÃlPA¦Å!üR˜A¦6)A¦›šiX¯•š•´û¶Õ1 ¯Ø®½†Ó5†Ÿ¦· 5ÊM!}W< ¯Uì&„CA„B !aa„BÂ`„0„DDB"M‹a„Mi„Xˆƒ\A„[¡ƒC ‚ !„0„DD0„DCBB ˆƒˆâ""8ˆˆˆˆˆŠb"""""""!‚ëâ8ˆŽ""""‹øˆˆŽ"#ˆˆˆˆˆˆˆøEÑ„YãûÿAúè=?ãÒÒ,šµ×_×¥ëÿé:½V×ô¶Ö_ÜSa„´â¶ ¹+Ê€æeÐaˆX@ÚÎÆ† º4xøŽ#ˆø3 ']ý[~vSÿý^•‡ÿëqÛÿýÖ<›ɵYe¡>Hd©²ŒÑ›1—EѶU §ÊS#3½ îã¹ä«;ÐÎÂ_ýYdî„Brˆ•æ„fÙ#©‰Ä(6!y „NÒ— HïC!¦ƒC©€ØŸi§ªiÝþ¿E«‡ ޶D€Ã£ÃÇOº·{`Âц’RP[ÇL>ÿ‡×ýá»@Þ mÕw~NÍ—È8:ít¡®¸XwÚ!ió¸NEÿÎíÿÐ_A¶žÿhÑ{P·üíQ7Nv|º#ié¥I*ßÚ¿i¦•Úýõ„øïÓãïÿõö¿_þÞ£xþ":þÕ¯ï½E~»ý}=YCçþ>«_ë¥þÿ¥Çÿÿÿ^qèãßÿ×ÿ‡~ÿ÷®ÿ¿ÎÂïÿõÿÿûý}¿ý¿®×ýWûI9Ù^ƒÿÿ_¯õOëÕ}-:þýw{Fò“?®Uì.D0¤¢;øé©7%â5’›ÓzèJŽT¸üHp èÏ'#o¬Ùœ"ƒ%Ùƒ3g#1Ÿ`Â!|’%Ï'2 gB6Ï‘¡›3wç†|f` ÐÍÆgá³'2ðó2 ¡Ok’ f›6 êy¼ÑŸD†u0ˆKGG5 ƒ>‹¢tN^j3`€ƒÏƒÝ¯Ãž @Âaù0gˆÙ˜ ƒA¢%Èh…Kƒ#ä3„|Ñ äL'„à™˜0ˆ|—$â0ÂBA‘ÿtx·áaßhð¨(F¶º]á´xÓF‡ö¬=/a/£Øhö`‹‡á8£;ýÐhqøF€Ó0š;’Vk =ü 4x@ŒF€ÐxA¦.A#×5ë>hWl‚4?¶‘¡îž"5„F·¡º4 ‚Ó{MÇé£pr1Ó£ØÝžpm½p6´Â47A„ko=Ä0˜"?8’¯QI½‚ ÛA¨”?K“†)°é¤Ù¤¨›ˆMè&º±ÓnxzA°Ó0•êAðË:ptxhðÒ“ƒ,úA´ž&Â64%;AÐA†g.aïÜ2éÒ ®gMá‰Pþ'‡]6$á…¡‡ JºL±á–q=»ÃBû†'E~Áÿ¯Ž>ý{þ?×ïߌÔýo”ïëô?Ø0—ÝaY€ÂãûÁÇ«·ÿø/ÿÿþ?úþý×ðWØ}{Áÿ¯ëǰ8¿Â4nJÖûu¿õÿ„Xþü"ßÐE¿ûöý ‹{ßõû`‹wÿ‚3Øm‚-ÿê°Ö?ÿ·ÿòpqÊûKõ$7ûKúþ¿E½pß~ÛÝ%ª“·ñwð‚廄7{¥ßóÿ®°‚úå·„ý~¾‚úþ]Ð_±XK †Aûrëàß_þ_ÿˆþ/ü/Ûÿý´¿ê ÿƒ`ým¯ðºÉ¿_K§¯á¥ÿÿ¿Þ_øAvAï]7„¿ïø6¯Ý ¥¿ôt?Á½ý}RýÿÿýŠõþ+õÝÍàÿæÐ9´ þÅ~ÿœAÿþ—ݯÅÿ×ï‚)ׯ¯—ÿøõ^­|Oß7†ëÿK9¶m:]ÿgÍ~¿Î/Kú÷ÿÿëAgþŒág?Is‹Ûëí»oð‹yúoÿõ÷ÑÅýþ½zÝûú5Kþí^*½ÿ¿ÿ[.”òë_un·ÿ·o<°@“ÿõ÷Õÿ÷_FÿúCõùußý¾ÿÐê·{f‹ßÿú—]æž–º^­š--ºïüºë³EY~¼¿ùõOTþa·Mšßû~ëàŠv÷ê_Íé^æ‹I¿ïõÕKÿ¾æ‹ÿû3í}×ÿ¾¿_®þÿ«®õ¿Û?n»{ÿýWm´½}{[[÷þ×UÒÛ[ZM°~ƒ·þÓ[uí[Kû­WUý{Jë½µûNû_Ö×}µÖÑÇèRêªØ_Õ{mzáÚ¯kÁÚÚèv«iz÷¦—öëî—i]¥çf¿´Ómq®ÚJ¹ ‘ “t6´“´“VÒÐïM°–ÙzkéÚNÖ¥´qÞÚM®šÝhU¤Ÿn‡}ö…XIwFi6•­­Òt£µ´·TÁ\"aa¤A„ðD?´Û AÒAÈp!H4Âh0›!À†A±8ö4¤i¦†aªa0ƒd8 ƒMŠM¾—4ÓbšA lPBl!A6!C Tq lP"cbS©P)6)‰ßĨ¦a‚ÅVÄï@Ø«ãbA¦ƒ‚/bSØÂ  @âS¨a&I‰O PM±LS‚ ІÅ1ÃbTU 4Ø¥ÓûØ…±JÃi}xm{ ˜K;Šû¹ÜTãŠOXmjÒa…Ï¥; ±a4"B &È’ ˜[U„ ­aXaB &M´ÂtÓ%XOL&„4Âà „Âa! Ba4ÓîÓDì†ØM0ŸaB•bh4ÓAŠh]…´Ô&š !q * !°ÐˆˆÛD0„0„A‚a2ŠÛB!‚ÁŠüì§Aâ"(¾b"8ˆˆˆˆˆˆŠ/ˆˆˆˆˆˆâ"""""""""""""""""""8ˆ¢æÅ8ˆˆˆEÎ">•Qã„>@þ‚tm ßúI¾¾ŸÕÿÿÿÿÿ¥×Oß_ºïöÖ¶¿ÛIvÂI¶Õ†  ˜2åíØ¤°ÈM……àÄ bbÜkãûýü<ì¥zøÕç“qU™Gb™6Eos²LÏ;Keш“ EL¸ÊYÏ;šÿ â$XÎÖH‚å>F̧™Â? ìDI#R*ò&E<`°ƒ1Xg,ÊÁ›ˆ2:&! C²€ zkÖ!Ù@˜Oýíƒa7[uF˜@Í0껣X5Mwm‡uGÁý0Èð0à –áïã0Ô˜NÐGpF0mðáÛJÜ#¹á£`aÃ}ôé<%áÜ7Ð0ÃÞ@‘Û«v˜nUpÓ†ðïù2Z÷"êéÛ«Ýú¥zvÐMÓïé=S¿þé=ík´ûÿM¿µÿÿÒÕ%ÇÅ_KT[ÇÒliƱþ¶õ_~›ÿ¿Çî?ÿª_û ]?JÿW]ZùÇûûë×ÿÿ}u¥õßñ$Å0ЉÇ_ÿÿ^øÿrŸß¯ÿ×ÿßþÿÅ~©†Ýz×ÿûßÿ¯¿ê´—ëúÿÜì®=k¯íá ÍẠ-Þõ¿×ÿû×ÿUI+Éo5%ü‘‘müíQÿA¥„ò Âd¢"rÞ+˜~F‰KN½½"wxëù‡äÁ˜D HŒÎ†H{šEQ6$6S¢TÏvB74~ôäƒ$ Ì.Ï.d™™²ðˆw'eÁ<'Bn{!CY"ù˜ÌÆlg¿á gÌÜ%ó1LÌÁ‚y˜ü‹ƒ8ffh3fm„ÁTx¥È\— F†ˆQ σ=¿Ó>^lgÌ Â c·ôˆA¦°éýxŸGœ3c8fÌ"Çff0ž!@ŒÙ‚Гkukãòxëÿÿëú¡_ãþ?ÿáºÿý[®+zØv ‰ßOü1úï¯ðo|ÿ¯ý¿†6>?ÿÿÞÆ?L:¿ßë鱿ÜÿÃ_—ÿX]VµyOî¿ýÿï“Á³IÁ‚ÿÍ‹°A}Fÿ¾°ÿÿ×ÚõúJEX.ÿÿ×Áð`¶°ÿþ ë‚ýÿÎÕ}|cøÿößïÿëýá×`é°lW¿í‡ø-|nu_øoþ»þ?ÿÔ0Øw…ÿýÿØ{ 1ïL;oÿÿ°DÇÿ…ÿþ¿ø]÷A|º¿ïÿÿÿÿ†ÿÛ#Z¾ÿûá¿Ñ£ü´Ÿÿ5§ÿÿùpŸøðE½°ßAÿÿ¬7†Ð]á¿ÿ—W#_è/ü"qÿÿñøA„ïù({×ÿÿÿ{udžé?׋@ÚøA×ÿ÷ý~é|ºÿµi`Ø7ª ÿÿûÁ¼-ÔïÿôÿK÷Ð/ÿÿþ/ô½ýÕ}ßÿõÿÿãëÿ_øoô¿}¿ÿßÿØa/¯ÿA8lð—¯ûÿ©ä”¼/£DX"£ëú}¶‚ÿUþÿÿø_<½|òÿþµ¿ýÿëûüë†ÿòÿòM>ºÿÿuýÿþ…}÷þ–y6Ÿ¯þ½|òý[Ï-¿Žû×ïë<«¬Æ¿úKÿþÿÂ.?ÿþ»ÿÿý{ÿû÷×úÕ¯÷·þa}Û«ÿwÚ_èÅÿºîê¶÷éy~éý~ÿïûë/½¿}×NiúùŸßå×ßå×ÿ¶gö—ÒûÿRûjÙ¢ÿ?°ºz´¿Þ¿ÿ®¿iU¼å¥uýúú÷¹šsDÚZGÿí/ÿýÍ?Ï_^]_yËK_]+¿×uºµ1u­Æë­­ß $î=WÛ]WÏUý¥½}½u×CûKÝBúÝý¯¶’§éý×Ö’ºô·Ýržºkö­«{zëÿ« %mm:OCM+¤Õ,!WM¥…û^ÑÇÞÚ§ l!Õ¥´Ý]6’¶“­§Z›­¡÷vºa°’ßðcx¤ÓmÔPl-§hã»aá'[A&šh6ÒM6Ò½4¶–MáXkÒPDy$Óía…†ƒmqI„à $ÃI°“ih4ÖB#é&§!Ðm„“m„›ammpB˜œ|I†¬N8a±AŽ¥ÚQ8÷†¤ì0’GŠ@ㆂ A»Ž‚ 6ч ‰N‚ 'i Â 8Â!+á¼:vÅm1A˜b­Ã0§A4ÓV)0›A„( ðÎ⃃¶+ RkÊ Š´â¶Å1L$ÅjšsØ0]ŠL Óa‚›±8ý7Né‚#‹)Ä&¡SI1LBiý­…ÏšyàS ®TOLSA„ÖÂbŸi„þÄ-¯ûß *a|0öˆ`„0ƒ" & Ã0¨0„DCD0„DDD@Á Ž"B!„  B &„DCXaŸCb!„!„Âq ЃO! 0@ÂDDD\DE¡ˆˆˆˆ0„D0„DD0B"Јˆˆü7ˆˆˆá¡DDqÄQ>b"â""#ê""ÿ¶—AK£± Ký{zOéÒ_ëÿéi}|ì¤Hm$¿I/Ö#I°Á*ÅŠ‚za„;_üGìhb8Sÿ”8‰Ÿþ'k(Ò#ç#¿þ""#ý’„d¦[ó²|¨$ÿíaÔþ;¿ÿüì__øÿó²œÓÿÿßû_Iÿ_ÿúþeˆ¡Ñš<ˆèò!£4yÑäuG‘Ÿÿ<‹¢‚4DxÜEŒÔgC$^A™´}“¢‚!£Ú" ±‡6~v²ŒÐ—Duᄉt%ÐAfÐAa‰tB]ÑäBY´!#¯úŒáƃG‚g3° ÌÌ Âèîõ8A&L EãäƒU,ÃTaòé:eÑ—‹²<\9R84BHìr<0b!7ˆ‚FÂDX‚ˆ „HøÁˆ‚ ¿áÐAãÃIÒ ¤èüã»A Ô6“aÓ ²l8GdJˆÈ‘Ñtg‘óDG3üÑDxò4ÈùÆlˆèŽeÑÃ0ŽÄtGÍ‘R:4Œ2>}ˆñäjfhæqò:;«;XD$]è"ù­òù´#Æv`2àÁ#ƒQ)dpØGÉÑä,ØqÊÃŽI0Ì1#³p‚(p'`Ä\(p…”9S´½Õ¶)éÒ´­oH:]1¾­¼ãÝ+~ʰ(‰tC„a>GO„pApE\އx„PàˆèŽ‚)Â#¬Žƒ‘ÐAb]Ð^ÿõu{×J“lUî¿ß¥õÅR f ÁC£–ä €Ò9ÃJ 9C•dcÍr Î[‘ŽqÊ‚V{;”9“™Î9XPçƒùc”9ઃŽqÎ9T)YNPeyEUž¢‡7”‚‡3•B•ž J4ä çsŽXäS”9Ç(sŽWÎçâ‡(r+•fÂŒ ëÔŽñ,D ·,6X‚ ‚ð‚ð‚÷ñ ÇF_ %úßÛ«j¿ûÿüW«u³€Áà…ÂD ±#á"¢( £ ‚ˆAc8‰xB ‚Å”8X—Dub¿úìu´µÕý¯ñÄ ‡ö( ºX¦"GÂYC…Š(p˜B#p´!"Â!†ûý¯µï×_ëø„C„ FÂHìApŒh ¬!!fâ‡*Ê¡Â.‚(pFÐA#ñC•eUõý‘Ñ…Qÿó‚ÿ„ë´ü€Äà‚ˆF@‡¡ÁA$1 B ŠtG@ ¸ŽGÄŽ„Aÿ݇ÿúþ±ÿY!!< bDB ‚Á”9X—„|B hŽ‚_++ÿøn^¿Kñ ùiø#â0‚b•f³qC„Ê!EWŲ‡GÆÂDŽ‚D§ýÿ÷ÿÿôâW!Š&PåPáÐAvX—„KÂ]!ØA—A:!+0‚Â0¿ÿ‡ÿïô¿ü€ÈŽŒB A÷ö_Ž‚(pˆëàñ†%ìB è ·,Ž„ ¿úùMû×ÞëëùÍý"ìE!°”EqdtcÃ…„(p¡ˆ‚Cˆ(„ÿúí?'Vh¿ÝZÌ/òuê( Q ‚Ã#¢: ˜1‹0Ì3X°…†ŽŒ@ËÃy\¿·]7M««ÿ¯ë¦¿¶¾ZÀH(#áóc_]På:# Š¸E#YC„¬6 C”áÑh ?Ýtï´›JÒ½½µm#Ö‡ÚV—ˆŽ": HÏ Hò#¢<ˆèò3EŽ":<ˆhò#£ÈŽŠäO™¢:6":6ŒÑG‘äy¢!ÑäGEò'Fyš ÑÌò#¢<ˆèò#¢<ŒÑäFÑFhÍÑäfˆhŽ#ÈÍG‘š)ÑHˆè†#4GG‘ DtyG‘G‘D<‹£4@‘D<ˆèò<ˆhŽ"#£Èò3D4fˆ„By¢„yDtyDtyÑB5¢ÍŽ#ÈŽˆhò#£Èò:¢ˆhê":!£4yÑämÑäyÑä]£<Ž#4CG‘FhƒG‘ŒÑ(D ¢<ˆèò<ˆhŽˆ8‰AD ±#Â,c\AE”9C„0`ÂøA8AÂá‘Ñpƒ °ÒNÒ IŠ ¤˜A¶ŠpÛG%:a çDGA‰tCdtyÑ´GG—Dt¤tyóˆòÈè!>zÁù´$|Ž‚ Èè ¼º!.ˆè ¿.‚ ²:, °9×y{ <º, „ „ „º#£Ë‚.ˆè ¼Ž‚M¡#¬Ž":<²:‘Ð C‘ð‚‚Ĉš!,Úè „º#£ÈŽ":6³4GG‘u‰ !Í ‚è ±, ³h „º!.‚ !.ˆèÚ#¢:Èèò#£hÚ#¡Èø „ŽˆëÈèHùÄB/,Ž‚ /, „K ‚èŽ":6„r:ΨÚ#¬ä|ôaXÙ›A"] tGA,¡Ê!.‚M¡.ˆè „ÚèŽ ‚Ï#ÈHèHêÄ ²:!>8„Žy—Dtydt"GF‹!è „DBM£È „º#£®qA „"!"BÊ® ‚‚Ä „Hè ³h O‘БìœCâGEЗFhK¡.ˆèò!èÍБÑäf„DDºèM ‚/DtyÐ@„Žˆè BGA&` ¾%ã XFX2:#¢<0fpG":ã„G@‹":0~^^>]¼~¶!;R Sb¯`ÝŠÚÃT®Åx²‡D ±A‚²:,K ‚‚¸AD …Èø—‡²:AÑ+š »1bÞ!åÐA ‘иøA„%ÑdtX„?#áGI‰tBc!Ä „K ‚‚ð‚Ä „K¡.‚BDK ‚.„ ¬DB r:#¡#Â!Ldt&ÐØA „BˆAˆ„ØAb]‰Ô„Yt$w‘Ü1AfÁˆ„ ¢ 0b,B‹(x—A,¡ø„Ì":;\b] Èè(‘ÐA ñðc%á‚ĺ!a ´X„›FÑâsò„"Êà‚‰´$|K ‚‚.™C…ˆ„³Ð!èK ‚¢]„‰tBBB&Д!±AB]—Dt!&ñ,D š0ŒÑ¢#â]Ó*²¦V¡A„&Ñäá&БГK¢:<‚B è „K¡.‚Dº‚>BÊ,{h „BM®ÂA"!„"m t&ЗA&Ñä"m A"m tB\%ÐA‘á ²‡L¡Êøaƒ7hBlŽ‚!( ¢X„$| „º,B ‚Páb]„PáPà Š¸Ab]Hè"‡]$tä|{ÈèN(pŒ0ä|KÂ!åÐE@1‚Ä(2‡(pFÐEXbC‚6‚*Ê«‘áÂ+Š  ò;CÄ":#¾ Fñ "‡Ž‹ÀÊ® º,Hè"®Š#"®C‚.ˆè"®ñ˜H ²w„Â,Hðá"GÂKØ„‰tBD ±Ä „K ˆAXAc„pEbãÃ>X„ˆˆ‚ ‚ð‚.‡!‚ĺ!!èp‚޲:±‚   „ „DBEÈè ±,M£ËÄ „r:ñ6„Ž#„„á8‰tBXAîGCØ@œ!#á ‚ð‚ÙC”8C„áÑtB^BXîGC‰l-Ä„„8—B]„!ˆAAøAA ´%Ñb!#¢:ÈèA‚ Á€ÄAˆQ! Š€ÁB=þ\/þ.!ÿ…„PáÐE,1áŒBÂÂ~,?ÂG«Æ1Žp>!ãñ/,l ±‚áA¸Abá!ˆAp‹ ŠtGA8A bGA|/‚8@œP_Œb]‚ÙC•ÁF ‚Ä °ePà‹ ‚ÅÂGÇ!އ Â(‚#„‰£ˆ‘ña‚ ‚Å„,,c,B :-ãÄ ‚ E\އ±DtG@C„DB!C" !Â,K ‚n(pX8AbX=…ˆAã#pˆèA8Acˆ ± EÐAnX…ŒB :«„<„C‚(pEÑ" ¢B®%ìBÃ.„„—A"X—A,G@ÍÅEˆèŽ‚ ”9C„Ê!è „º $GA8"莂8H&GDtã….X!Ó(pˆìŽŒ1ƒ7bC„GÂ*Qf/ePà‹¢:&ˆèŽ‚á´GAGA8ApŽ8DtGÄ ‚8áÑ}8Dt Å…C„ÑVB.‚´[„$t‚W8X ‡ ‰™ A ‚ÂE8F0f Š´BÂ/ tVPå\(r¸!.‚$t®(r¬¡Ï@ätððAá8E`BÊ,B(r¬¡Â,B‰tBB$t!È뱎„ˆ‘ñ.‚ !èK ‚‚ĺ‘ÐA ‘БÐAAb¡Â6‚\Ž‚ §ŽˆèHèr:‚‚ñ#á"]—A%ÐE´$xB(p  ‰pVa*ö8A"œ":#¡†$| …„#‰tBÊ™C„!Á‘ÐE\Ž„ŽˆèL!#¬BaâGA""&ÐA tB,¡Êî!"GB]ø„!áqŠ ‚Ä ¿1‹0ᎈ쎈èÇ ‡GAp‚ ‚#á9VaÂ/B¡Â.ˆêv¤»Á„„1ˆ®!E”9C„]‰tC‚-Èè"®C‚ñ/ð>ø \O„ .ÇŽ‹ˆ‚8áŒXˆAbeáŽøPáa|"¯¨óÿã„G@‚ûÄAˆAbX‚Fñ‚Ä „K ‚¢X„Pà‚ Œx žC„GDtñÇðG":.¿ÇÄ ¼ ±,|XXˆAnGA|G#þÂÈ鄸…GH":…„øAk"‡ ”8]â>?°±#xÇò:#¡#ÃÙv> ƒÃˆEPáÒ(pxPñ\B ¢è „º!,B ‚ÁÂB 6‚ pŠtGAp‚h ‡":UàLj"‡Â¡Â# A„+ ±.‚*Ê!‚ĽˆAbGAp‚¢\ ‚ÜŽˆé…bX„W±A‚ Ä"‡ ±.‚B ‚Ä …È莂  „$tø‘Ð „/DX¨„‰t"B!ˆAb]‰tCâYt"] a#¡Áˆ„„Páa",KÂ!‰tBÊ,B ‚ÄŽ‚ r:!ì"‡ÚàŠâ‡+‚ ˡ#á!ˆAb,¡Êâ‡BB :!.ˆè °‚#£<ú6‡#äuᲇ+Š!!‰t[(p‡Äž}Œ1Á#„qÂ# @‚áb »ÂŽ8A{„ÿüÇ//Ç‚{ØÅŽÇŽˆè  áŒx„„6X¡ˆ\B¸½ŒbVÂàˆøAcÄ(¾Âà:.!Ð.GA"C…LjW# ‚!‚ÄB r:#§±‹ ØQ|!Èøè$\ºð‚.‚B Š":.‚p‚ ±,B r:Ä>!ˆA áÁ6@‡°‚Pá„„!#â^X„=õˆè"‡Ø„1ü °~ /—A²‡ Ø^X„aÂ.tÄ"‡ ±Â\ ±ŒB ( ·Á6ˆ#áü!£a"B!Dq‚ÄŽ‚YC„"X„‰t$tGBGCâ'Èÿ„‰#¬BDºè „BD ±.„º!6„Ž™C ‘A‘ÐØA ˆAb&ˆAbúBÁÁ1#ÀÆ1a ‚/„˜ÃÄlv޼{û(îvS£?üHè"œ ˜^ÐDtC„ÑC„GAáXAÞ( ­¢„Pá2‡)ÐFÐAnG„+„h ¶QŽ‚)Â&B, ­Ó# …‘Õ„„(¡Â#¤PáAƒ ²:-”9C„,¡Â.‚ ¨°‚Œ"œ/|‘Õ¤B!0b66BCdt,¡ÂñLXB!Dº aàŠÊ$a*"!Â0ˆû‘Ò ´‚aA‰ˆÞ%ÐAA Pá‚D.H鄱Š#¢>ätø1q‚Ú(pˆæ1Fñƒ„…½1.‚ e„(„,¡Êè0b†!Z# GŒ\]…Ác!ì …C„‰tGFÐA K ‚‚.‚ ”9C„ÐH ±a,¡ÂÚ# ŠæaÐAÂ8áÐ#Ø1#á%í•Ð"‡ Â+"] ™C”8BÊ!‚ĺè „K¡.‚B(ta8Epb6"]‚(p„º!.‚ Š#h „º©„%ÐA tB%Ðá"HDHø˜ØB"] tB‚ Ê«(r¦W8CˆA ‚*ät\„L!#¡ìA8DtGH#ˆHøE`B]„U˜p™C„,¡Â,BDºè „ ±è „KãÙXA â]AA—B]‰ty„›B]„—A"GA$!f!Ál8áA,Ø#@`Í`ˆèŽ‚º¡ÊÐEXrk«„På9V§A=âÁ$‚adtQdtE@A•7Ž!ŽC„°¾/AöX@Ÿ#è(>]áp‚p‚ šÅð>Bm¡Ñ÷#§ÈøA áˆ#Ž#A tC„X‘ÐAxAbàÂë,p‚ðˆAXAc‚+ƒ#ã„D#ŽŒ`Řp„"‡(„ˆ"‡Ú¬„U”8BÚ«âGA:«¬_Dt#¢;Èî Žˆè#ŽPá‡Gp®U…·‰Páð‚,K Šâ‡¡Ê°Hb0fßfA …‚8áÑ!H °‚ÄB%ÐA ±.‚ .‚GÇ® Š">GA!ˆø„/ãÙ"œ!Æþñ ¹"‡ŽÄK ‚‚ð‚Ä „ ±/Al¡Ê!p‚ð‘S¢:#¡#¡A›Dt^XØA„8›CˆAbB,¡ÊätyA:#§#¬Ž!ò:\Ú!!èK ‚qè „º#¡.‚B -Èè!ñ: Ar<"GÂB(ðˆøAb]‰tBXAb]²‡+‚Ä NGA/ŽGÈëeWHèHø„øA‘ð‚‚‚‚Ä ±,Hè …Â+‚ÄŽ‚)Â# Ep!Á" A8AÐ"‡¡Ê¿ƒ < ‚Ž‚ x¿ãÅ0p‚ÇÁˆÄ ¬Žˆë¥øAbX±ïâ_âþ"|p@„aŒ‰ ˆ—±,K ‚à÷Ä ¼º!eWqñ-ð‚Ž‚ âø@‡±ábGÇ , ¼"‡Ž‚ 1/‚ÇÄ „Úr:#¡Ça„ ÿèM ‚‚òèM¯‚ĺ!!‚Ç è „º#¯;â"XAc„„8„%ÐAl¡ÂÇÄ ±.‚\ ±þŒ «Øþ>^G\ˆ ±/,K¡ñð‚ß!ÜÂñ¼GË¡6± „AˆAytB!GÄ"¸,Hè"®GBX´…ˆ$ ‚ü ¼NPá,=„ñáØEáb\B Š«„±ÿü „BˆA°£„1 /b1‹0‚(pˆèŽ‚øK‹âXŽNÁñ #1,YC„X±ã‚ ð@‡¸QAãÁ1ƒŒbÂ,BˆAb^ 1ˆAbHð¸@¢Â Ì ŠY„,.Dt 0c‚B ^ã…ˆQ/„C„ž1# Š¸"®G† F Žˆè#ÄA`Æ/„GE჌Y‡ŽpC DBƒ„  „B‹#¢:tðŒBŽ‚dtG@‚ a1~ ¶CÆ/ˆA—„"KÀÊ¡ÁC!":#ÎG@Š1ƒˆW,¼TBDº!ab†!D „KÂZ(x„‰ÂAG#Œ1ƒ2:# AÁˆAbX—A%ÐAˆAAGCà؉´B"B!ˆA‰tBÊ!‚òè „K ‚޼q>8AGĺ!‚a{YC…ˆAcˆ„%ÐA „ˆQÇl †/aÐ C„„ˆAA—BÊ,qè „ ±.°‚M¡# ‚h ±>",¡Âa—AÁ—BGbÂ,K ‚h"ò(Åñac ‚,XXŠ„!D§ Áâ !ÛKø0Š€`Ä(Á› ²‡*âÍeÄ(±lYØA Dã„‚0È莂dt°± ,Ž‚8åEî -„ÍàXAX\#ŽTˆœqa #¢:ñ#°F Š":.‚Y¸!f#p3XB$v ¡Â.‚ƒ5ŒBl";\ز:# Ž8AZ# `âÙ‡ APåtBá´G„B ƒ(pFàbذ¶GDtÇ ¶!ÇŽ‚+…ƒ# ‚# F‡ Nˆè"¬F „6öˆè#Àˆ ±a ¢ÂŠ0ôPáÜ(1.‚(p‚+`E‚0ˆèKÀÅ…¶W.ˆìÃbÃ>B^¡Âf°G!/ EU³ŒÄ! ψB‰œÄŽÁGDv,HìXB!‰tB%ЗA!‰t\™C‚躄GÐFÁ‘Ñ´B]‰莂 ‚ÄM¡ab]ÂYC”8BÊ®*hâAV) Â%БØÂ ²‡Dº!/„!fEpBb‚eAC…„|“bA"‡ .„„—A„,¡Â‚.‚YC„!"] tBB"]‰|è‹§#£<޼ް‚#á! Š®(p ‚,B(pˆé y2‡/„q °‚ ‘ÑØB8A Ç!dt³ŽÈè!g4PᇎåÁ›‚\Rû ã„G@‹";0á(r‡Ž‚ ƒ• "¬¡ÊA`Ê¡ÁA9V ‚ ‚.‚5ðpì,B# ¬"<h ±}‘Ð[•áD«0á"‡]På\ …üpŠ":«®ãîX8"¯=âã„n„øÂ+8A8@Š¡Â#á àʡ¡ʲ‡*áÂB¡Â# Š§A9C‚ o„S ‚·S”8DtW„B8á(pˆé„^¼qtGA.VPá`Ê¡ÑPà‹ Š«„ñapŠtGBGAáÛÅè¡Â dt Ž®qÊ¢¬Ã„Á²‡(rÐE„kB»„På:,"‡,N8DtDtCœpˆèÇ-ˆÂƒ#¢:Œ—A8A8 EU˜pEÐAb]U”9C‚¡Âp‚˜ApEUÂ>aDðã„"C„C‚6‚+Šà˜B!8#h"®\Pá t!¡ÁAeW8!# Š¸"¬":«ÙÄApŽ8DtøqÂ,K ‚‚PábX—A8 ‚ÄŽ‚pEpXápŠàÄA"‚Äq>B]ˆA8AˆAb]›BGA9dt$tà…„qÂ#¢>0ÆÄK ‚qÂ#¢è …”8B!‰tC„]+Š!†.X‘Ð@‡WB!ÂÂFÄA"]—BÊ!è „ „ ±.‚K¢:,K  „yäuæÐü^Z.GÄX‚ ‚òè ¼CâÅDcøÇà‹ Š§. `ñ °~º# —AbˆèŽ‚)Â# E\¨i,•¢:2©Ë£DRÚÉâXÆÂ ˆè"‡x¾!Â. Áˆ‚‹âC‚# ¢àÊ,B „^რ°‚ +ï °ØDtã„ׂül …ŒB5”= ˆQ-„GA/ pEt ‚ùp@‡1ˆ#ŽFˆ ±.GbǾ/X߈A_ØA_„ ð@„n!ÐAÈþB+ˆAcâX±ˆø„1ì ¶Ž‚ †1aGa·ïð‚ Ž8": ÇŠ¼ ŠVáïÁû!Å…öÓ„/apˆè_0x„þX‚‹ ‰tC‚/bX…Ä ±# Š¸A—„ O‘ÐÁŽ ‘ÞGA8A‚ ¢,B >B ‚Ä ¼ †Â ‚ÇÄ ±# ‚#x°>G@‰!Q‚Ä(ØA„!ˆA„!ˆE´!#¢::Èè$qHèA# A ±!AbBX„8„!‰¹ÂFAÑ"G‡±@±à‚Æ1,B(p‚ Pá„%ÐEAbGA9x„L'# @„A ¸A$| „A"Xˆ„‰tBB!‰t,¡Â¡ÁCߨ@„Hï1ãdtX„PðQzˆè(ÇŽC¾ ‚.ŽB ,llpD|(1câX0¸Ž…§Âï,B+†Æ,&GAb,_abÐG":X1î8áÐ(áññâC„°‚Åq(Ü œ °x…öGAq|B6* ‹":(b1 ì"¡„1ˆAD ‚Ä„°Åq‚h „a‰°‘„0xÁŽ‚,B ‚<`Æ1/(ð‚è ¼bÂEÐE^ñAa$tX X‘ØÆ!8Dt]!ðbðˆè(‘ÐAl/áC‚‡ññ„BXx8ˆAbQ";„ G„þïñ|xAÁñŒB  ČE B# ‚ ‚%á‚!D „Hè$ĺ®BG‡#â „qÂ#¢>0b ‚Ë ‚ƒˆQ.‚Dºè ‡.„Ž‚+˜„Â9@„HùÌ „B$|HøA (p„ ±/(tÆX„ÜŽÌ Œ-¢‡!o\ìb0œpf #¢;Øœpdt^”â!+àŽ8";!ƒ/ÝCaÇŔ8L¨(t¡Â ätNxöGAdtGA¸Al ¶‚쎂ÙÐA ŶG˜XÙ"ÂQeVPá`°Šb]ÐE:âÈêÐDtGNGPˆè ‚Å‘ÐG":ESƒc[¡Â!Pá ‚ˆEt¡Âè † Ž‚AGDt"è0ˆè$GH ¸G": =„PáˆAbÈé”8DtGÑ\†0c,Ö [+#¨²:+’ 6aÂã•áã¶GDt(±,XX¸Æ6!6GDvÂ`ÅÈ莂,p‚ÑP!1ŽˆåC¢1 °c°£hŽ‚aE”8'¡ÁÑU쎻!pŽ8A0½‘ÓŽ™OA‚PAE„’ ˜p‚ è NGAePá ‘Ô":# ŠtGAÅp(„GAdtGAÁ쎈莜 ˆé!#á¤X° ‚Pá „‚(p„ …Âá ‚á"DB‚ "6BX„PáDtB]›B!0™C”8B]ˆAb] tBä|FÒ,YE ‚+Šâ‡ ”9\PáAAnŠà…”9C‚Šà…Èè"œ ¶1dtŠ":TQXá ˆé„GÁÅW"Yt"](r‡BEÈè"¸® PåY¸³‚A‘ð‚PåYC…ˆEU”8B!8 ‚ÁÂ\Ä ‚ÁÑC‚Bk0á¥!(p‚ˆè"ÇPá",J °‚°‚ò‡(vGDt¸Al(âŠ":e™SÝÝ÷Â Ô …Çð‚Ä}øÇ°‚÷Â_ǰ‚ˆDt«ØA Î8H ¬¡Ê";„G@‚ÆüB ~PáAŒc„Pè °xcÅÅ„dtÈè,X¼PDu(pˆè ±†,, ¼º!AþX„Pà„"®G‡¾½ðE8Ac¸ø²: albÄ„ 9C„ã”8D| …”9C„#h"®aƒø‘ÐACAÐ#ŽX0· ,Žˆè#ŽAÁˆ‚8åYC•ePàˆè"‡(p‹ÀñX2‡(rœAE…ˆDt a.˜":#¤PáÙÑ„"G¡Âå@<1*Ç]Pá8AÆ!¾BáÁ…Šp‚Æø"¯a)ä| † ±„ °‚ÇÇĺÂb1‰tXEº# Š½aá÷ñÇ‚ ØðÄX„„]%ÐAAtX‘ÐA tGBX„S¢:r:™¢:AÆÂ Ä ¼º!6„º!ñ,BYC„!Ž$tätö!Âð?‘ÐAAcá‰tB]ŽB]â]—A>1¸E_Ä ¬ ·Èë˯,Ú è „º#¯‚è …”8X„PáW8"莂 ÄŽ‚ C‚8 J"!‚ð‚!‚Ä,"è"‡] 1£ Àf8á\ ½‘Ð^S„ÂÇÅB Ä ¼ ±ÿÄ ½‘Ð]8DwðbÃçjGíÿaDÇ,X<,~t[øÆ!ì¡ÂÜ °{ˆAbØ\Ç,>!ì.Ax^XÿxˆA ‘Ñ ˆ„ÿa",B Ârè „ ±/‚ĺ!!,Hè „Hè „ ±ÅÈéÈè!ìBà‚ðF/ˆAÑÂ# Xä3`1ˆØ‹ˆè ¢øApñ üTD ‡,u1 ˆDt¡Â ÎËxÿñ¾\AD ¢±°Æ/²‡…,bHæ‰àDB,,YBF1Ä °apŽ8A`Æ,(„[!ˆA Ba B0b6.,ÂXÃñŽ'“yàˆ^ÁFƒ=˜p£Pf†-…ÂGA1°‚1'‚Š";„åX^Ê¡ÁÐQxL¡ÂePáA´X1QÁÂ*äx{# ¶GA`ÆÂ(r BeQ¡Ê ¡ÊQ(‚.‚(pEÑUð}eUÂ!} ‚ápˆèCœpˆèb^q”8Dt‡åöPåAp‚(r¬.]{áa[  ‚Î8AbQœp¢QqÂ#¢>‚ Ê!|YC„e(‚.‚ ePð‚à‚ħ({]Ž‚ Ì ˜XœpPAbqÂ%[„áaf BPáB  ðˆøEU¨ °ØA[DtC”ááÁp‚ÅûŽp‚ġ pˆé¡Â# EÃ-ŒQ¬.tC‚,Bƒ„U„³ ,BÑÇŽ‚]ÐG …ÂE8Dt DX—A—A8D|"‡ ñax„Pà Š¸AoîGAG@ŠC‘ñÁ!à‚ÆÂDÇ ¼"‡ÚPáEAbGAr:„!.GAr:DCÞ/#¡ÂDB ‚¡Â6‚l „B ‚ÄŽ‚\(‘ÐHbA`ár<=ñÂ(?ŒDÇÇ¡Ê";#á ‚Ä"‡Ú«‘Є!‰Pà8,B!fAÄaˆ „KÂ"ã„c!,B è"‡º,|B Ë ‚ñî!Þñ/aà„^…NXoÇß®!àÆ8H¡ÊLJö „ „ÇaÁà‚Å‘ÐB ¢^>X¸AbX„ Ž‚Ü ±,x„Qñá8AÂ.´Cû  ‚ßÁÿÄboŘH ¼J";A¾ÂÄ ‚ ‚à‹ ŠtX8Acâñ„UÈðÿŽˆè O‚=ãø„_àñ !qÅ…àÆ,¡ÂÄ ±# ‚# @‡±‹àc‚Aá0b!D.!"] ˆø—A:!‚ÇÄ(‘Ð@œŽˆèHðà‚\ ‡!ˆXAD"¬¡âX„ ±, ±.È莈è C‚CˆèŽ‚.‚ƒX¨„„!ˆ‚ ¢GA.Xù´NˆèŽ‚$t«‘ÐAa|p@„A!×Â`ñ¼B Ø[‘Ð1A ‹„10âBÂqLŽˆè …ü!‹#¢:ã„GA"Xø„ ¸Ax ¿^ÁäkÈ5ù´S¯x±ïâX”8Dw&XŽ‚ÂÞ:CXÅ‘ÐB ‚Å‘ë#ÁÂ Ü ±,_¡Â „Páð‚â1ûöÁø…Q/¾«ÁñÇŽˆú!#aááåÐA ‚Åñ¡Â# ‚ĸAF…øAb!#â„ O‚Œ1|cÙ‡Ž‚ Ä  Â÷,bø®Èè!Û!du‚,ñîýã»({°£xAbˆè"‡0b!B !‚ÄEq,B ‚,í…ÜcÄ^^ÂÆAx„%ÐE=âX‘ñeU…Ž,¡Â!ÄBD ±.ˆèBCa"]4GBf(81„Âð…ƒ¸¢‡Jr® ŽˆìA!Äm"9±ƒ±G£²: D ±|XÅ…¸7„a” ffÙ™gȘÁ"åøA‚ ²3#œÉöGA$X²:²< /Ù¶ í¤GAnV DtVGAl-„²:Yáï#¢:I8A0‚ø÷Å”=E„PöqÂ# ™‹‹ˆAlŽˆè!a{ 0ˆébø±o“(p…”8L¡Ðݧ°Dtb.-³GA 0Ò‹#¢;#¢:qƒBbÌ8AnU›¢ÂÅ— Ã"U²:Aƒ0ÂŽ‚dt†]Ê„XᇎeÆEÎ!1œ[‹˜Pb%8ž˜2æ DGA # …Ê B¢á, \Tº- ¢Ó(p¯PìÃ0‚&°±cà‚ÆÂ  !8DvGDt„ÆÌ=4PáAŒbMøA …Èè&GDtxA]± ‘Ó(pˆèÇ /GAr:!¢]  r:&„º!«(rœ": “ !,ÆB]„åÐA tBX„Páò:®+Š!.Èè …Èè ‚ÃaÕár:&X8VB  ‚ÚH ¶‚𠂈„Pà‹¢:!|XQdt[(r‡ „GAXAlŽ‚ ÌnGA°‚ ˆè ±¡ÂèB è „º¡Â.ˆè „º!e%Ð@„Ž‚$tGB]â]*àŠâC„Š";° „C‚0áXA A ¢p‚åYC„]aÐEPá„#¢:#¸‰Ç!8á,Ž‚Ä":#¸ì°ýA£ãp¡ÃTh ¯Ñà4{~cÖz/øá6GA`ÂÂáƒðŠ":ÄGp°‚ÅÂ(pA ,(Ä.ƒÆñ ´]„ /GAn†á"‡ ÂŒF!ðpй,/‚ö«Øáp¬Ž‚(p‚àŽ8":< ‚èC„´CtC•aÁˆ ‹ŒA «Ä^Dt¡Î8Dtã„G@‚‹Š#h"¬! ¡ÂÖ!Êt"‡¬DX‚# Š °fL!abŽ‚,pDv@„«0á¥!(pDw*«(p‹ Š¡ÐFs.‚GA8EÐEZkÄX„,Žˆì,J …˜@Ž8":#ЈìçﺡÁ«(r‡,z(0à¢Âƒ„º¸…àÂÁãŒN8A9C„AlãÄ"‡Ú! °‹ ‚Æ ¸¯pˆè"œ °cB+(p‚áˆEApEÐA „‰‰tBXŽC„ ðE8A` ò>:.,p‚Ä ¼º!‚Åñ.‚ ,B ǰ½{àáa|Ç,<|cÂ(pˆè ±/ Ä ¼ ¸ ¾>#×¾BáÅð‚ AbXAbX‚ \B  !‚Ç è „ ±öPánX¹„a\PbÌ8@Ž8At\"‡$±Â# Š# ‚ÿ …ÂGŒE|":¡Êp‚B ¢ÂðEÑS„GZëÑ㴘”=&Úa0ƒüSi6'JÐAð‚ÜŽ‚!,Žñ°‚»(p±,|B ®º,!vC‚#¨‚J Ô":1ã,BDDDDDDDDDDDIÌ _ý{^—ªÿ]?W¥¯ø¢‡,J";„á0¼B(p‚(pž7à‚(r‡DtW-„%8A ‚áùÇ!8á‰Çpˆè#ŽX„'+”8Aa•pap‹ Œ:, ¹Ç,)Â#°±,N8Ag ·,bã„C„”8A …ŒxAp‚ ì ±(„C”:.,l ±A‚Äã„/p‚ÅñŽ‚8áð‚Ë(ö!àøÄ.!ØDtGA.!쎈è#ŽX°°¬Ž‰C„G|±Â„B(pEÐESá}…ÊB  ²:EdtGdt!K ±,B „q ‚ˆG ·,{(ý„¾ÂˆA9C ‚à‚û!Ú"è ±, ‚ôQŽ8Dw-Ä":#¸DtGÆ=˜p‚0ᇽ* ¡ʰ°~(0ºÂ(pFÐE^þAÐh+-ˆÄ ¸Eã"è(„$tC‚.‚(p£¡ÁDt'#ÀúÇŽˆïƒ„G@¢øEC ‚Ä ¸EÐEº,|K Š#h"¬¡Ê¹öÂHéà‚Æ.#ŽpˆîB Ç(p>Žðc‚Á Áî ‹ ‚°¸E_pAÄ":¡Â# G ¶B+ˆEPáA²‡+‚Ç„C‚6‚8A„$t!#¢::ö<, ¸AoPábX„8Acâ]ÐApþ`ˆç r:DÚ|„µkÅhÛºÿµ¿±Ûýð@‡²: ‚öøà‚ð°‚ö\F!qøà‚ħ.!Çàñ¼_dt!ƒˆ„!ƒ„GAñÂñ,CÆ‹ !ÐAl ¸ Ø^!EˆQf ‚ÜB/ ÙC…¹Uáa}ò<ðcÆ1áåÐA ²‡ ¸A„!‰xD ±# ‚,Bö† DBì.ÅÆ! ‹‘Ä „Æ+üˆkúþ¿ï~¬»ñ²‡a}ã~ÈêÈ莂abá.XøÂ øAb!ah,¨„QŽ‚ ®8„GA8A # ± ¼c´[,B(p¸DtÂÁÇì"‡ÆÂ c[ø=„ÅoÇݱ„På!#bÆ61fsÄ ¢¢B Ab+°¾ÇŽCa,,Bñì!Å…Â.cÊC؈Qdt‚ 1Ä ¼B# ‚ üB ˆä\ Œ8A`ˆäÆ/ˆ ‚a‹(x¡ab( °<`ÄPÄ ±‘Ó-ñŽp‚ÅŒ,eáƒ„ÂØXˆAbXxø„GŽˆílD „N8ˆAbø²:# Ž8A±°ŠÀb7ˆ ¸°‚,YC„!qAe/AbÈöÑS„,/p‚ØAl ¼ °c°„QC„Ê!°ŠÀ±°‚ð‚Ä ±ã²:+#¢ðcx ‚åÐA 6,/eˆE\ ¶ŽÐAE‘ÑS„GA$XG-„,ð‚¼"‡ŽáAú‚ö[²‡ p‚Œ{#«#¢: ‘Ñ „ì,QC„G@‚Ø0`Ä „B Š#p°„B PåYC¡ŒB8áÛŽÂ1+0áØaÙs.eÈÂf#ÈòˆHS°QP]º¹Cÿþ?`ã_« Â÷&GAh ¸A쎢X„ˆAb[¾PálŽ‚< zcf¸FtE»(vGAlŽ‚ÇÄ": árœb>ÂìC…)Å$N’#ÂÆÂW¹S„GDtâ²:&\#ŽŽ‚aˆœp‚Ž…‡(pˆìY7HćGa8@„«0é˜p‹°PÁ˜":`Ù„bÃdta…ƒ…aÂŽÐħp‚³Y¯âÙ„œl „lXBÈèŽØØAœq8ᇎa`á"Ž!ŽÆ!!ˆ, @‚)Æ,QˆèŽÈè!ŽBâÈè&GDrâÂì¡Â# ‚ƒ”8„GH ¬Ã„ŒK˜„PáVPöPáYÛÄ T. ,±Â dt!E…ˆDtã„GD}h!„K ‚Ä ±E(p…ì º-„ °‚öXXÜl ‡°‚PáÒA‘Þ ‚ÅA8L¡Â 1b!h ­ÐE8A}ú#¤S¢:!r: ¹‘Ó(pˆèŽž7Œ":EAbÂÄÚ!- ‚Å”9C„\(Ã~üãÂðcŒb!ÐE^[# ¶1aEr:|!àÄAáá8Ap‚Çÿ‚ ïáÚÂøA Ø÷ŽÂ ( ¸à‚ÇÅ8Dt]¸A®?°½ð‚‚ññ!x{[ät]Ž/—AØAb¾‚à‚ûÄ/„\_âû# Šp‚Áâ¡Â ¢‡Žp‚øˆ ±/Š">GA/ý|":¡ÁÂ=û ß{¼B.GYŽ#øøáü.#â^á0¾œa‰ÜJq/ øA{u_¯ÿCØ<Úü „c¼"9=ŒBƒ(r‡ðbø„‚ „!ˆAp‚ ‡Žþ>!쎂²‡ ƒØÄ ½…Á/EÐA^C‚ „Ä ¸A†‚ aÇ…àøÆ1c¢]ˆAc„]PàpãÐAD ±8áÐG¢Pà‚Áü|~ã„G@‹";ÄX°¸@Ÿ¸A`ÄAˆ^AcÂÄ ¼B# ‚‹âáˆAEaÐ(cðŒ8@ŸGx`à‚/GA`‚*…ˆAbqÂDBÆ!‹# º8á‚ñ,|pDr Ä Š¨tC‚Cˆ"è"‡1aÁˆ\B# AŒbÂŒB GDvc1 ²‡ °‚Ä ‚‹ Œá=a1üŽ‚(pAa‡¸Ä ¸DtGA1ŒD ‚÷Œ{Â# ‚òè ·,|B  ‚ß!þ; ‘þˆ‚áߊâX„²‡ è ‡…AáøñEÐWŒ{^ÃÁãð‚ °‚ÅñŒBÐX"è ±Â~AG…xøŠãÈè ^ Áˆø…ÙC…ÃÅñ}”8[„?ø„‘ÐE^÷Þ=áÂÇ¿°‚  ÁãXApˆè!!Äb8þé|Vß×ÿø7ÿ‘ö†"N8Dr  Æ!0Dr#b£a"X°……²: Ù"B.#„%¢1ƒðQ F[caƒ±‚XX‰ÇˆAbqÂ#²:#‘v!Ž8A”8ö""‘Ñâ!œAò:ñávñ,Y²: ‚ÄㄈAbSƒ £„G"æ,B(ÁŒ³ A`‚ápˆäGDvŒcÙC•dÇB†1ŒX„Èð8ŤÙCØDv`Þ,,"XŒcÝ”^!ƒ# BPá‚ġ„GAp XöaÂøD|"‡ …ˆðAáƒcÄ":Páƒ# ±,B „qÂ# G ¸#ÀˆQ+.\";„ã„Ê¡ÂáÑtVPö]aÂ# Š¼Aˆ":(„G@Šã„G@—a1â^XÁ‹(r‡, ‚ÙC…ˆAp‚ aÐE^1ì."莘DtGX$=â_xØAÞ>C‚.‚ /â"‡0b ¢^Èè-…†ý‘ÐX„GDtÇŽŒbþC”8EÐE,^Ä"‡G /Ü ¸Ax ½÷ŒB ( ¸#ŽXÇ!ሠ±.‚BâX—A,¡ÂÇÄ ¿¡Á†=…Ž8AbX?Œb_„"!0Ab8ã‚ s5ÿêæ‰ÚÿóOîœÓmŠ,|A#Œ ¸ ½…²: ‚Å‘ÐX„¿²: Ž!-ü+r‡£Ž‚AXAbÂûñ//p‚Ä ±ú/‚Çèx^Ž‚ cŒp‚ ‚Œ{‹ö^>ÂðÆ,/dtŽ ±a{¡ÁÞ1á¡Áñ7‹â_~Âñ,B ÙÐ"œ °xǰ¼QC„G@Ž8Aaâã‚# °‚ Þ%X÷ˆA8/‚ ãÇÄ ¼BD „B GAbX2:# G ±ŒB !p‚ßÃÇ8Çþ!ñ°‚ÄXùÇ,B ,B# EqÂ\ ±ûøAy{ƒÿÂ-„Páð Å¿,YÁãÇì"‡8áÐG ± /쎂°‚ÁˆØAqx‚ ÖXŒ\ ‚à‚ø=¼Y…Â*ðÇ¿§ŽÇq a1øAxAcaŠâB^0n1,C„/‚=ˆ\ŽÂät0c ‚ðAc„PááaØEXÄc­{ö7‹ „qÂ# GÁcÇÇà‚û„ã¢!#㰽 |"¯ bý„GA0°Ç±ƒ ‚ Áp¬ „A" °…ßhŽ‚¼1‹ˆAbÈèŽaˆjrÜAØÏ3Š Ž‚ ¶×O}Ø_þÒa¤ÚG¯´¿!°‚ßa Š¡ÁÊq²:(þXâÈõ ‚Ú,YˆHB Ù‰Ç!r‡N=‰CöPá.#‹.Èè!‹ö²:Y‹ÈôB GAn6? 6C¤1°˜‰8¶BÂÄQxЉcŽ!ˆAcˆÆ!Â8á#1c„p‚Eì…o,A‹ .àXŒÄc‚ÁÄB ˆ@‚C1Ü]„ˆA²9ÐBS„ ¢ ‚ ,/ˆçŒB ‚ "SˆAxˆDs¨Š(œqŒY,B GAb8û#Ö\X‹(p‚Ål £p¬(½ÐE-ƒì"‡a‹ì,Y«Äb#Ax„ÐL+A´S°­l.Èè £  ßadtGAac°‚’- ‚è¡Â‹ˆ¼PAx0¬¡Ê"è ¡Ê§Dt[(p±dtBätW²: Ú(p‚8áƒl(¤CŽI„Pá ‚ˆ#Ž´C… ±²9´[ÅÅ‘Ò(pˆäGA #¤,,XV!ÙC„Gp ‚è ­8D| ¶‚l/‚Û«…avGA #¢:!r:ð"ö„\¹E[„]På@„›† ¡ÁDv°±GA ‰Ç(pDrAB#¡A"áx`’i¶Žé6B 4šÓM8"=M„­+´ƒ $Gâ‚ °‚Þ1í„PåBU‹b6"qÙ°±‚Ù£ŽX°¬B ‚Äã”;# ¶5ÿ¡…ñáÐVX¸„LŽˆè$‚ dtÈêÐAA”9C¹C„¹Ná ‚ï(pACàö`ˆè(1f `ˆìŽˆè!8åÈ莂²:#‘Ù-Ž#.¡*Âf§„ ,&³"Ç!lB#¢:ã„GdtGDvGA # ‹ …‘ÐBÄ0dt‡Ž‚0àÈ蹄k %8”âx;@ÐFpˆì!DtGdtG":#°…‘Ð!8áÙܨ'w¬Ð%8ÁЧ,BˆAbX²:#³!al(ÙÑ.,Žˆè$Ch °apG/øÊ ™”ñq{¡Â âÄã„GAádt<Ç(pˆì/axAGïÄ‚ ØDt[„ûAŠ# Š ¸@ŸŒ{ðŽ8Ag °xÙ0¼xD|Ž‚B Ø"<1ߊ(¾!Ùþ.G^A{#¢:S„,B+0á‚‹(p‚Á…Dq¡Á„Qa>Pà‚à‚ùÇ,B ¢œ ¶GAtq a, ¢^Xá¾<t^Ê,a‚è ±~ ð‚÷¡Êpˆè ‡#¤^Èë|WÔpŽ8AYC„GEÐE¡Â,\tC‚.‚ "T P%9 ƈéóÊBXøEÇ R{ á†!m&N˜¦)Џ"ãb¢¯..VX2:\¡ÁðpDtC•lõÄ ¼¡Â ƒàña{# ¸a,Ž‚Ä ±/dtGAÚxË">ŠˆØA p¼"¯ˆÆ#°‚øáØÄ.!ÐA`þ=…Š(p¬ °Î9V"@ˆè"‡(pD| ¢â^,`á8 ±!à‚áp‚Øx²:# ‚# EŽÂ# G&a¡Áð‚Á‡] ¸ ±]k< ½‘Ð]„,B ˆé8A ¸AAbPàá߇ EÐ@ˆéðb‚0â ‚Äñ³"‡,J‚Ä ¸GÊ BPá¡Ò(r‡”8Dw)á1ÁA9NC8 ±,X‚ „b(bap?» !r>‚  „C„GA„±ˆApEè"莂*þ8¿dtø…Ø_„ˆAp‚òè ¸ññx ‚ÿÄ{øDtBþýû.‚ ‚x</¾ „Ê,B  ÿ‚ð‚÷Œ{ûðŽ8AxAb\/‚ùtX¼./ avÿ‚ ÄWØ^<Wþýá°‚ÇÅ…âX„/ˆA{ °¼{üqñ,D ·ì{?‚ ñ\B0á0áÐEàˆøA~^< µKÁ‚ ÂÃDDD `ƒB  0˜/áŒ>c÷ƒÅ…ì.An^þ1c‚ÅÂD ±ØâC…Äx ‚DZ°¸EÐFtXŒB 0‚÷ñ‹ãàüà÷Ayt]„,,B Æ<º-üB //.‚ßaˆAXX°±a`Èè!h °p‚ ."-cŒFÃâ"~ÄDDD{b(+A0„l …°ˆð°‚*ŒJqƒÑÙÕÃa ‰N,Á°‚²: mDoGA # „N8²:D ±+dt%!!±”9CŒ`Áˆ ¶‡„PáÐLŽ‚ aØAcb"!ìŽ(X¸Drbqò‡(w!°¸Anâ…b"#å8AlŽ8ˆAA·¡Â ˆäGþCƒãØØQÆülE„#bx!!dtG"9"B!ˆDrˆ‚‰N';4íØB'qdt„ˆ"9"PâqÂN8Drƒ ”AŒØ‚#¢<²:N8A # ±,Xb!‹# …‘ÐB%@41af°‹H DtGaÁˆ ™ƒ# …„"Èè!dt²: ‡ŽîTL!ˆÅØÅ— XB' …‘ÓÙσ# …‘Ñ‚ C„J";Œ„‡AÓA6ÙC•p¬ …‘ÔZdt‰P ± ÁñŒ1‹ °„XX°ºQp‚°‚²:-„aˆAb^Èè,B „S„2:#†±ÂÑÚ(œr‡Ã‚¸EU ¸"è#‚ aÑE0‚ÇC Š¡Â.hdmQ][RœJ Š":à‚Áˆ ¸EYG)ÐAl ±' °‚Ä ¸>‚ GAeŽF BPåB^qÒ(pˆè"‡(rœBpkà‚Æ1ÅK¡Ë ±aeŽVPáç XV, £Ž‚ 0pa…$9p1‹¤PåŽBqÂB#£hŽ«‹# ±,r(á‹ØA8AYC ¬¡Ë¡Å·)ÂPEPç „ã”8„' °ˆè#ŽT Ç!dtGA ÇŽÈèŽW(pA9C Š¨  áà ŽBqÂN8Dtà „ð"Xž‘Ñx”(@Š¡Â#á«":EPà‚àÄA‹ ˆè#8A ÂÄ":ã„G@Ž9C„G`Ü Œ8EÐEPîT ‚¡Ê³XAF0x‚.‚(rœ ……¸°¶GDtGÆÑP6r‡”8Dv ÁP庡Ákç“…ˆAbqÂ# ‡!dtÈèŽpˆîSƒ„]PàˆøAa‡X…„Q Žˆì(":X"è ‚Â„X1Ax(¸Â3„ÁÂ(pQˆAbmGü":ã„G@Šp‚ÅübC”8@Ÿ] D(„[„)ÂoØ^!Ð"‡,0ö#‚ˆG": 0bÂ/®ƒˆðA‰Wˆ\ ‚àŠ¹~Èê!Ð"œ °xÆ,Ä">G±òp‚à‚, ¬Ž‚ð‚Å÷,B £Ž8áãÐAD »¡Â  „AAƒÄbQŽ‚]ÐEX±ˆAp>] 1ˆÄ !Ð,DB.1Ç‚] CPqƒÞ,Á—Dt'ì!Øü|pa{„  cñdtˆA ,cðAq‚ÇŽBþ ð‚ð±°£ŽŒ„ÑÄX1œPAÃxAˆÂaˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ„ ‚ì¡Ê…hò\xŽ""""8ˆˆˆˆˆˆˆˆˆˆˆˆŽ"""""""""""""""""""""""!Ð#ŽX8AgœBCÄA"Á‘Æ\‹”FÄ¡ðo´¸âq ‚XC°Š,FA>BFj@ÊQ²<‰Ç‚ÇØ^!ŒBÄBDÀ q†!"!Ø®!qaì$ÆÂ FHb6"",(Ä ±, ."AlG!8áˆè H¡ÊFÊN8¥Ža,"œ¡Â ‘ÐX²:#²:# „ ¶G[a9C‚.‡e6Pì-µ„&¤GVBqÂN8AvPá,,D ±VG@„åqS+Šâ‡+Šâ¸¡Ê²‡+Š®+Šâ¸¡Ï…q!ÉApXåApXåAp]“³91Ș{,r „Ç%P炇<‚c’¡É'"9ÐBqÊ“ˆDt£!]Påñp‚ÄŽ ЧDtNX2: dt!מL¬,r‡ ¶ ‹# ¼¡ÇG.8A~Xáœr‡|1 a{üX‚ >!ÞD!‰C„Q]^"U¬GØAb/ Êp‚9B „qÊ!•%@‚Äã„Èè,N8@„¡Â]âqʆ"S˜r¸Ök5”9¬¼(r¬¡Ë¡Ï†ãáZ•Çâ‡(AC•‡™@Êâ•2¸ e,c‚ ì „ ±Æ[œr œr¬¡Ê²‡)ʃ9C”9ðã”Að㕇âˆ)Êâ‡+Š ©•Æ ­”\Påˆ ±ÿñÁâ]•Åq\TÊ™\WÅWÅU”9\W9\rå.P2·F1Ä ±ñÇ"qó²ÒÇÅŒX „t„GDtþAc„F7‰NˆëQèaŒc!‹ÆñŒp@„c!áÓŠ(p‚Ľ«ˆˆˆˆˆˆˆˆˆÂ Ä":ÖñŽ ‚ ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆÄ B!F.,ªá DDDDDDDDDDDaÐE"B' „N8œq,|'á*¡Ä§ BûC¸ˆAœpdt&¨(Ù­JYÈ!Ž‘Ñs.F¡öŒ:#„ˆˆÆÎ.#Œ1dtG ¬4á"Z‰ÇŽÌõžC)ÊDlÔ9AÄㄲ:#²:#‘"qÙ£sñ„±ÙÐ!(p‚Äã„GBàŠ§O,p‚ŽBqÂdmBhޱÇ!dtG":D ¬¡Ê NPàˆï6˜A[á<±ÙÅ#âCŽPù1Ð"‡*ÄJpˆìŽ‚(r‡ G\§,\˜á,Žˆè Dt"BmL.æ ‡!¬8•b ‚¢,JJCÓ~þ ñ/dt_Æ]„!Š!ãp‚ .Ê ¿Çð‚-Ê(‚ ‚%å‚ Ä „B GAbB%‘Ñ‚ÿˆèC–;áØù¢ (|FÄlD"è#„¼°º,È,P ¿­#""BŽ"" Ú8„„ „BD§<˜FE)uü¡!‚dtˆA²:EÂ#Á‚(pQ8â"B,ŽâqÅŽÊQ¨‹#‘ˆè!G":D „lE‚Yˆˆâ6ÖÖ!0âTƒ*`‚'Â8á,ŽˆûÝÂ%؉c’†°ù‡,r‡(s%PåŽPâPá%Ž' BPåýý‹A9Ç, ±8ᄜpˆé¡K®XåB.ޝP‘Ç!, ±)ÂN8Abq Ž‚(pQNPî^È莈ùёшèŽDt‚ ‡q8á'"9" ¢:¡Êá.‚,p‚0‚Èè ¢ZB#øˆAaˆAxAœp‚ŽB!‰ÇÇú~?áÿa#xÄÁ#”8AÁð‚ˆAw P㈄ ÅDB þ„‹ë‹â¸„œp‚fX>' …BY‰àN8A`Èè ‚ä|Ž‚ñ,/(t\t\":# ‚‹-„>Èè!(p‚‰àD „DG×ÿ¡ÂGÇÆ1 ‚ãØA˜xǸÁö^ØîPàö2ô „§!EÐV‚°‚¼N8Dr ˆè&GA¹p8Œ"‡ÄB ,/YæB }…ˆ<î#xˆ‰ÇŽeÃp1;$^½x³B!"qÄ¡ì­BÄ#ÀA ‰c‰ÇGA„GH[ޏ¸A #ŠGDsØ„œBˆ „ã¨Á…‚ ‚8âÂ!œ¡Öc„œr‡l „ㄲ: ‚Ř*ˆA[œr‡H&ÛÃ¥ê[“ „ƒ`âE\>C;¸.«‚8á‰Ç!8á'¡Äã”;öPå$„(¡Ê „ã„„È莂EPåðQ,±ÂYÐG¡Ä¡Ê–8DvGDw*$8Dr„J „¡ÐF!(pDr.‚ðb8‚ DXX„GAÂ#Í–é„]K …Ê0±ÂqÁÐ#ŽPàˆîB9c”;<2ÇHB ‡(qò‡Êå-Ž#4CG”%„É@Ì È›)ÑPÓ$LúL‚ÇG‘»~Èè,B ‚ÄㄈAxÇ#ã,N8A b!qˆèŽ‚ e „a",_,B „ˆAb\#ŽPøAbqˆAbPá8A„„ „J¡ø"Ç(|"懎àˆï p‚¨$Mþ!ˆAbXoñ/8å!Š”8†ÉŽB!"A°|qBDㄌ`Ää|ò!#âO‘Ô ¹ à‹È4ŽÏ À¡/0ƒ@‹š!pÐÁBEN øDx'›3„>6"Â)Äl":AgD8œp‚ät!èDAɈ‚ED ±7ü"¬D ±ñp‚8øìŽ‚,J";„ˆQ,B  ¶41)Å„"‚œl „lDã„‹Š„"%Ž'N9C‰ÇŽB'‘v]A„Á›Ë£a,2Ða6Ða › ¨A º&ÉÙCuAѬaãcâPâS’¡Ð@ˆô\":#ñ(q8á(ˆDu·(q¹1Ò0è"‡(r‡œ"=GAn8²9"qőѢB."qÂY"B'"qőт„‹©q(pˆæ] ˆè ‚*ÄN:N,ŽˆæGB8¡Aœq*ÄJp‚DDDDIÌ"ߺOZM´Ò»£Ž÷uwwG¤Ý>é_,±Ô¡Á¡Ä¡Â °ˆë²:áåŽÂíÒÊ ‡!Êp‚ÇGŽá')ÉBXœq,q8ä‡(|˜áˆAbS„„^q ,N8Ap’$GäÇ %8 ^PáaÊvC”8Ayqð@±(p‚ ƒ‰C”âPâPà‚‹ Œ;åÍŠ>_«jªíé\UwýiZ¿ë¢‡-‘ÐX|| ±Â#¨÷ÙC‰Ç!dtG ¼¡ÊøG":ã”?ˆAb[àˆïáf§ŽBPþºÉC‚"Sˆ‚KBBGÄAî!ˆ X߈Ab^?¯‰C„²: ,p‚Ä¡ÊÄr‡²c„Èê"Nâ"!‰Cˆ„â0ŠD·ÿi/}~ûÿñ´º_¥ãÄBDㄈAã":~!ˆAbX„GCjû5¥âX„!#㈄ˆAbB!p‚Ç, ±8á%8”9CˆéâPㄈ@„DB"6PðÐIqqDGG$9R,q‹#†|c†?KÝ}Rñ±¦¿¡ÿÿÂ,q8á!"qÂN9C²:„™ÕB 1dt‰Ç!‚(r tá(…œ …‘ÐB'N8A 0AAœq8áÇGA²9ÐB'D „N9!ÊÊá"qÂDð%¸•fÈìDeŽP쎈è!8å' „ã„#¢:#²:# „ã”9!ð‚‚Ж9C˜p‚ ,r‡$9C‰Ç(zÁÿÕ…[uÝCÇÿ÷ý­„”8AyN%X²:D ¼BÆÈÒa‰C‰Cœq ÂGDua8Dtá9C„]Uħ!ÉŽ"qÄã‰Ç!Ž!(rœ ¬Xd dz¸EÔà †ÐâPå%%S“N8”9Cøÿ¿ëàÞ—õ¿øâÂD ²Ç(p‚Äã”9c„GQâ/²‡$8A #¢9åPïãã”9!Ê ¼ ±8åXá„9C”8Ae²:#‘‡(q)ÈÇ ƒ‰C”8¸à‚‚°A‰W‰NâPðÐ,ã„X„!‰C„¹C’¡Ò Üp ¨„GHB ŽXAbPâq ,N?ÿ_Mþ á/÷ÿ~'ŒB ŽB ‚,h":|AŽ!#b^ „GAN¨bXãa",!‚Å‘ÐB!øœp‚Ä ±8á‡(q8á!‰cáˆA”8„!ß"‡(pD|"‡ £º‰NB+ˆAbB!"XøAcˆ‚#ß,p‚DE‘ÈŽ""9ã’ûîø¯)7Áuÿëþ „DB( ‚Aì.2‡‡A#‹!Æ DAÐBSŒX‚D ±8á#ˆAca"B!ˆA„‰Ç „N8AAAœp‚ÇÄq„‚ ¢?AA”âqÂBD㈄‰Ç±&‚#èE9!Æ„TwÿËÿßÚÞ ›“qœB# ‚¸D~Ω“âqÊBbŽˆè$Â# ™„‡ŽEÈ! JÌŽEÈ!ˆ „㈉ÇŽPâqÇ!8á,ŽˆäGAA‚# EŽBÌÝ{È%8Ae%8‰N' „±Ä ‡(rçWdLJ(r ƒ“r(â!,rnN!n?þ–f&¬Íwõ¯ûš&ÕÕÌÖC”8”8@„¡Êár‡(¹Y8Ar‡!8á!‰ÇPå!ˆ@‡ØDuŽ¢Xœp"9ё҇!8áPàˆøF±RC”8Ae–8AAbD „±Ê`ÄB‰C„Á„•bÂÄ":±ÂY‚aËÊ CÙ‡8@œ¡Á§‡)ÅĆÉBAHxA4KˆA‰C”8”8”8@„":P‡í[I°¶–ëÚM­¡ªí«kjÚüN8AbXœp‚ñ.øø„' ¶GA¯ˆDt!Ž1¢‡,B ŽBX„G …‘ÐXá8DtC”>XŒx BaÄ¡ÄJ‚Ä¡ñ(pDw A ¡ÁÐPb ‚ A3‘ˆAb!ˆAbÈè!‚Ä¡ÂD¡ÊDDm—MÊD„ „BBDãˆäQýŠn˜ Ú[5ЉN "!ÞqÃbqÁ°Â\AÄDDE‘ÅðAÐXøˆˆã‹#Ù©~ÜDDq8âÈâ„""8„/ÿ„G ±!!(q–"B%&ÄB#ŠJCÁï²8Ë‘,Ž‚8âÈè!‚8á"ø@¼ ±,r C‰ÇŽPâqÄã‰cØû†(0˜¦˜®UŠh0𻨦+iØ®A Ç!òÇڎв8œv duÅß,q, ²Ç!,rC”8„8²=G!Ž' „±Ä±Ä¡Ü˜åŽ'dvŒ8œqdz-„ÂAt‡!AbBXœp‚‚8å¡…j"qÂJ‚ á!!‰Ç!!,p‚ÄDDŒB"""" ª‚Á0[–9C‰Cœq.Â#¤PáûÈèÇ)Á"PàˆÿŽ–A&ã”8ˆˆAbq !ŽBÈèŽAnBqÊN8œp‚8âqʱÊá' ‡‚ dtG ¼ °‚Ë X”8Ø ‚ˆAb ‚Äã„XÑqÂðÊ¡c„á"%%" ‚J Ü#!(p@„J{q":,PAbaÄ¡Ê(~öâPãÙ1É8 B8 B!AbPáê!D«Á)Ä „B ‚,p‚,q,q‚Ä ¼eº¼ºHÂKA(qÊw@±ÄJ{!ª8°™â!ˆˆˆˆãøb!"qÄÉC’¡á Lv‡ħ‚8â b # ˜CA!"PâBX„‰Ç„…ÜÈDt ˆ”8‰CˆŽ!"S‰N"S‰Ç!Ž'ˆaaD „±Äã„„‰CˆAˆâ‚Œ±Å‘Àò.G"=ÎÉ„XâqÂKBBEA;6ˆñ´G@‚Qx DtGj]#¢9ÅY´GGȺ#¢:På#£ÔC6ˆèŽÆÌº#ät"<}Dã„„–8œp‚GDr# „±ÄJ|ã”8²8`Ž ²Ç)ħA ‡Ž&q8á!ÄÁ䇎!"qÄㄜr‡ŽPåÁ!òÃ$²¤)„AHr‡,r‡,r‡‡(rÇ(q8á5‚û, ±8á'¡ÄㄜpˆäGDt\":!Ð.^”8”8„GEÌ2:På8@ƒ.‚&ááˆDt ‘ÐA"qÂ>><ŽáÐ.¡ÊRn2äGA'N8AAbXœp‚GDr#¢;# ±8û  ,r‡!,rC”?‰C„D¡Ê» 0è#‰N%qá ‚a3BBXá' „ã„!‰Ç!ˆè"Ç!ÄRg›# „JD „B ŽB!‰Ç!eéãá/Ž#Ž"8œp‚Ä ±8á,Ž‚Ä ±8á„%C”8øáÄJ!ñŸ„8„!‹# ……ã‰Cƒâ>!¢Ç‡¡ÇˆŽ"*!Ž6_âX„' „ ¼KäQñ,N8A #¢:Xá8A„!‡,SˆŒD¨GGAXœqdt‹¤Ð\Dƒ(â"!‡ˆ@‡^C²8kFQÇÇGA㈎"Pøâ&aå"!#Ž">""#ãŽ"‚D\Gb!"X„‰ÇŽ!%Ž."#ˆˆâBÈá"-Êr´GDDk\âqÈ)&qHË„z^1)É8œqdtG"9ÈŽˆäGAAbX쎈â‘ÈŽ‚‚dtGDr#ŠGäq‘ÆÉ'¡ÙÈŽˆìŽˆìŽˆè!8åXåE±ÊN8A c‰Ç(r8ÈÜD˜åÀA Ç(w@‰Ž'Dã‰Ç,q8âXùr‡$8A Ç(rÇ(q8á9c”;#¢:#’ ˜LäŽVHr‡$8–9r(ëaP‚‡(q0âPåXå%"aü7ú0á‡G"9ÑxŽˆìŽˆè”8 B%8‚ !‡!œB ÇŽBÈèŽ\N8A Ç(q8åXåHp‚Ž˜q*Î/ D¡Á",|B ‚Äã”8„' „N8œp‚GDr# „ã„L8”9C’q!J$aÁ&DÎBB8‰NB ‚,BDã„„!ˆþøAa‰C‚"Pà C”8 JaÄ¡ÊJ|‚¨äQÜâX˜p‚‚ÇòÇ(rÇ/Ð_†"Xœp‚‚,B ,N8@„¡Êp@„$B‚(p@„Jq!‚Äã„"!ˆA„' „BDã„„G"9Ð!ìBˆA Cˆ‚GŽX‚D§!!‚Ä „B ŽBXœpDw,J¡ð‚,J „±É%PâPâað”8”8 B%8”8 ‡‚ ®Ò !‚Ä ±,N8A „„! $NXâ"8„‰Ç‚Ç8þßá8ˆAœq8â!"B' „N8”8˜qÄ B'D!(q8â"'DN8œq!‚(pˆäG":DÈ‚FÄDJq8âÈâ‘ÈŽ)‚ÄDT „YˆA Ç‚Çâx‚8âB!F1ˆáÆHq8á"qÆÅ‘ÐB!"qÄN8œ| B"ÖA`q8âqÄ …‘шãX1ü „±Ä¡Ä±ÉBXâqÄ „N8A DÇŽ'¡ÄD㉇&9Çq,rC„„–8„„'N8AœrC¤%&ˆ8ˆA‰c‰Ç8î'¡ñDøADr#‘" ŽˆäG">Gi8ç „ „BPA"qÂBK „ãŽ's޾Äã“¡ÂKJp‚8„!9Ã~Ä¡Á‡ „BPâ, ³ŽXœq(p‚‚ ŽPä‡$9C„Xâ"PäW!,p‚‡Äã„„„„²:B ŽXAyC”9!òÇ!,q(rC”äÇ$8”9pAAa'¡ÊBDã„qʱÊN9C’ä‡(vGDr‰Ç‚ ŽPä‡,N8AaŒ4‚Ar‡‡(|§!ˆ”8”8ˆ …È7Š9!èPABBDƒ`â!(q(qœJ¡ñÃy’‹Ax˜q(p@‡(q+Ae:ˆ‚q!‚Ä °‚Ä „BK¡Â ˆA„ˆ‰Cå%8¨„""B8ˆAbX„„X„„á"”8 BˆâT ^!ˆAbqÄãˆA„8„ˆA‚DBG,N?þ!Ž9C‰C”8AAcˆŽSŽ"$ âB"#ᇒ¸fÖ‚D¡Ä „ „Z!‡R,q8âXá"""qÂBBD „N8–8ˆ„Ž&JŽ""B'BD „BBKBKG!áÈŽ B%8ˆ B"‰ÇÈŽ"Ž‚!,q8á"CAD~"#ˆˆˆì ‹ñ8ãàúσ;+ÌòvR3«5>' „ã”8œq8å%!%Ž'q*ɸˆ”âg$9C˜p‚`ˆè!8å'Dã’åHq8åÈ蹂Ž#S‰NFä09p',q8âqÙÈŽ‚ŽPâqÂN9C’q8á%¸¨œp“#¢9ÈŽ)âTDð"x8ã“¡Ë¡É'¡ÉHr‡,r‡,r‡$>@ðã‰C„TŠ9CR ²C”9!Ë¡ÉPþ>‚"ð@‹èŒ Eüˆ ±8á!‰Ç!8å' „ã„DtC”8@„¡Ê±Ê³!(r‡œ`ðAx ±)ÂKá!'ŒN8A ñ‘ÐX”8@„¡Â "(ã„ Ì8•f§Aħ!*Ä_„ˆAbqÂD ±8á‚a‡(w- ŽBYc‰Ç(rC‘G$;„GA8@„¡ÁÜ¡ÉS‚.‚0ùQ-ÒeÑu,Jp‚Æ' „ㄲ:D ±!HHdˆ„!9ÇQWÉÕÒI´›I´›Â0ã‚"Sˆ‚DDD!!ÄF!Â#¡KŽ!(qž"B1!‚â1ÂN‡Ž„#&"@†ÆÄB"%8 B%8„Q/ÄTGŽBÈè!,BK „rC‹D „B ‚(pC ‚ ¢?'c „s DB!ˆ‰ÇbÒ#òÇœDD¡Ä¡ès°·ãð©é´®›Ã‚8â%Ž‚dq¢‡Å‘ÐB!%Ž!ÖÛl ±Ž¡,G"ˆ"êgIŽHq,q8âXä‡Q8á!!‰Ç(rC’ „ °‚í ’’J „±Äã‰Ç,¡ÊJŠúA!å¹!ÈÇ$9!Ä¡ÊN8œp‚Õßþ“Óí× ,K(r‡,r‡ Ž˜A …B¾!–9CŠáJáâ ¸{„'¡ÉXAeŽ!0âPåØÉŒŽ)3Hâ‘ÈŽDr#¢9Ë#²:#Ñ(q(rœA"%DN8A"%"!‚‚Ä¡ÂY"qè ‚hŽ¡!‰Ç,ã„„>!–8@„¡Ê x;„#ñ(qŽ!!‰Ç!!†PúJúïö·êß!ÄqŽAoˆDtÊÔ,XˆˆAøq,q1hh „AˆAA„ˆAœp‚‚Ä ±0ô"Pâ"B""!#„X˜q(rC”8Ab‰O‘+”8”8ˆHAð‚ÿW‚ Ä ±,N8ˆŽ8‚#èo!~½oÿÖÿE¹!ÄKN8„Šf ¶_†S‹˜A ÅÐû×øA„'"9ÈŽ‚ ‡ñÓŽBXœp‚ˆê áÐwÂÄ ²Ç!,q(vGAAb%%"P÷1Á‡(qˆˆˆ‚ (!D§ˆ‰Çˆ Q!‚Ä „ ±(r‡„!ŽC(r #ˆ„ˆ„!Ù1ÄãøºL8„é;¶Å=6­Ù»ÿûâqÄDD „BDã‹dÇøE=„ˆˆˆÕí8VGQdpWKE, „B A%!"cˆ”ä‡É' …‘шâ„"qÄ¡ÄBDãâ$žòÇ ¦91ÂDãÐDtœq¯úÝ÷`Òzaétßúÿ°‚Ë¡ÉHq8á!„Ž8A $uŽ¡8"?o ‚ÉPåŽE‚aóŽBHz(|N8‰Ç!‡0ã„–9!Ä$CŽ [«ÂA"?!,B ‚ÇŽBqÂKN8AB‚ ¡Äã”8„‰ÇƒŒ ¿ýzï ÷NétßþÿüD§!!,DB#§ˆDt‚": âSî!ÑÕ¿(q‡!A c‰c„Û ÇŽPøá%ŽBX䇂ÉA(rÇ(uŽBYc„J¡Ë „±ÂK¡ûˆaD¡ÇD§!!,q!,\R ‚ ¬8b>vT þßv ßî7þÿë°‰Cˆ„¸„±„A‹pc ®;!8Š,J „XäÇqD§‚‚8âXá#Ž""B ‚Ç‚8ýÁqÄ C‰Cˆ”8ˆÛ D§csjqýõØ`êÿé¿ÿþÄJKqÇÕ"qÖaÕℱĄq!È$4¥Ž'Jq)Ä!8âqÜ„á"'N8„„ÐAÂg ŒqÓ(q!Ç"ެ&]PDÇ¿oñýzØ0ßýÇÿú0á'¡Ä¡ÉPä‡h˜øDurÇŽEŒu!eXåÈèŽDqHäG":#‘ˆè¹‘ĈâqÂF BaÄ¡ÄÑGÇJ±ŽHr‡,±Äã”8œq¼ ²Ç(rÇGr‡dÇ(rLJ(q(wÁJ¡ÉŽAPp‚ú\N9CÿÞÃþ¿ë^¸A„' „ „N8A Ç(p˜ Cc¤Pá!%Ž!ÔaÃBD ±!,q8á!‰Ç!8á"Pá'¡ò(ä,B ŽBYcˆ”8 ‡¹‘ÈŽ”8à‚A”8Ae $C!dt ‚Ä ±,J …‘ÐBXœp‚!”9r"ŽAu‚ØÂDãÿ¿Xl•§×ùŠÏ;×ÿñDãˆAˆœpˆê'S Š">$~""CAÔ":#ù JJqœDDã‹D ±!‚ÇÄB E‘éc„‰C”>Hq(p‚œp‚‚*¡ÂGá„Â:ˆAb"!"Sˆ‚D ±8á"B8ˆˆ°…Ä":7¡8ã’/ýðnÿÿO÷ýþPâ"Sˆ´Pá1":”9Ç œY±j"4Ü—EÔá"qÇq8âPâ'D „N8²8Ëuk!ŽLqAq8á"B'N9Cä à‚Â#©ä t¢Fÿúç°ÿÿëÿ·_³Pä‡"º¡äëˆ":¡Â#¤_‰:„¹C‡)Èf&r(ä‡$9C ŠëÂDã„–8œr‡$9!ÉPâqÔŒr‡!,N9C’ „ „ †A ¢PâPá"cŠ ±‡!.PâBŽE'!0äˆë‡$9C×ÿ¯íÞÿÿ^ßïZ,BKJr‡$9N† ‚ßñN9!ıáãØDt\ ±!(rÇ(p‚ ‡‡@„q ‘bPà”8–8AqÄã„„‰Ç!ñ!(qœ¡ü ±, „±õŒ °‚Ä „±Ä¡Ç(p‚±!(|BDúAÔDHAÅðˆê#çe@žqo_õût­¥¥Õ®ñ8á!!8„Š! ÄTGL „ „±Âk-ÇÄ „K „BDKN8AAœr‡p›Xœp‚LJDD!Ÿ‡)ÄBBa ‚gä„!!!â"Pá‚8â,!²¤(LqaXþ½ýÿÑú¶—öf˜Tôi=:¿ÄB'D±ÄãˆDN›ˆˆœwŽ˜ÆÈâ‘ÈŽ(BXä‡!!Ž'¡ÂGarüYHà×LJ"ŽA¸”ã ! )1ÂDã‰ÇŽB'N8HN8¸‰C ” „ã”9±Ãªd‡ñívÒ¾}~»ammVöêëbS‰c’BK|¡þÊá8Â0áÑ ˜™Ä „±Äㄜp‚8á!!"qıí„u!,rC‘Gr(ä‡rq8âqÊN8A BqÄÃì."S‰NB!ŽBBXâPá%Ž‘ñÈjøâAqôC”âP÷ìPA¶L ì%Á‚A´‚ 0›ÚM¥m„›IÂXAq(q3ˆAIDã„GPˆëˆ˜q(zP‚ÆÂ#¤!(q(qŽ%"PâSˆAACP|/‚ ,±ÉPá–8A Ç/‚‚Äã„XâqÂ%Yc„ š#òc„(”: œJ±,Jp‚&‚.¢$ ⓱ˆA xk SÔð*¨1LBü0ƒ1 ئ)ŠåB%‰C‹ÃÆ÷„aÉ!>#ˆAa"PâBB!5‰C”8âL ˜CÄD „Bq*ÄBxŽCŽ#‚a Æýq‡D „B ˆ3§c¯"8" ”˜âPä ÇÅLN9Cþ#ˆöGDr#¢9ÈŽDr#¢:©NÁ 8œr‡$8àˆþÁæP‚‡(rC‘G,r‡ŽHr‡$8"?œP\‘ø”9C‰Ç‚Ç·!È8â"Ž”"Ç(xˆË¡Ë¡ÉPàˆê0‚Æä4%Ä „ÊQãÿ¼N8Aœq8á!!ŽÅCâ „Dã§”8"?ˆè/8å!‰Ç!!Ž'¡Ç8á‡(|â ‚„' „±Äㄜr‡„ƒ‡Èƒ‚%S“ã茷W—Eò?,BD ¿èÔ:”8+'¼˜â4¡Ä¡ÿKˆ „D „N8ˆ¤"‡ðˆé¶&p†0‚ Â# „§DD!œOX„ñ,r8¿¸ˆ‰NBX„!Ô¡è ¼ „B ‡‚Â#£PŒ<0…‚‚D§ŽBÎ&fÐb."!ÂQˆÿá8”8‹#‹âB†Çż¡Ä¡ÄDDXB"ذAWqBGŽ""#nïâ" ‹¤¬âhB,z G"Ž@¬pˆäG DÇý-٠㑌":ø´ˆéêÒDtÄ…Š9pDt Š9Cûä âBŽHxAÓ*±üä‡$;]’‚&ˆüŒq ÇÏ&\2 £°‚/ÌâPä ‡ŽB,p‚Çþ¹‡r‡$9C„XâPàˆû!°ˆê‚,r‡,r‡"!¦´*_}r‡$8Aa%Ž%PåŽPáÂ(sC© ±ÈL+P@³" ¸Al¡ÅÄãˆA…Ž‚Î8A qxA Ç(rC„GAyb\rž„†É LbB""""qÆüxA"!"BX¨…L ±Ä±Ä":ÓÑC„GLF1ŒBDD „ ±Ä „| „B qAL8A„XåAlGLø˜q(r+‡ì":b% A(„!8Õ~Xâ(+#çbˆÑ@…óÙ6 D‡ÿ‰ÇÇ&âqÄ „T"B""é„",D†Sœrœò(‚ ìâBS¡Š~"1ÝX‰Ça›L®±£ºgN9q8âBXþ~‰ŽXåXåHr‡$8":tàˆêPåŽPâqÉPï”ôF=âDŠ9!Êär‡C$>C,q^É%ŽHrCŠ mW -Ä"èÂÂ,xi‚ã„Xá(Ž¿Â ˜ôCLr(âL%"Ž!„âSe‘NÄÏ B ‚Ä „N8„ÎŽ5‚Äã„„GWŽ‘C”8„GAA„ˆ‰ÇŽPá"Žˆé”8œr‡q!A ‚.A Ç(q8á!.„L©ÀåHr(厡Â#¨•E „ㄈAb\cþPâ¢$(ä_Œ±Äq(|¡ÂXA‹W ™¢=fu3«ÂDD „aGQ¦Š¡,|Z,CâBáó¨*‘ÌŽ)µ‚Rr(ä‡añ,B Ž8®JpÂ&_’ „BKw ˆá ”èÄqgL¨KÄ0™|ÄDDF‡-Ññ¡£ÃG†#ÂD68¦.¡ÔqŽ ‹ñDy Ljê4qÈ4ŽHq!!ð±Äã¶"!a1‡÷qØV*!%Ž' „±Æc¹C‰Ç(x¤‚AHG+{QÊŠ:A #á!ïAz ‡I6“tÞ‹q0åŽPä‡AÓ-”8Dtc‘GÄ":GN8A „GLKäQÉ'Kq8ø”8A Â&]D‡H":aÒœtÉ'BYR:# ~' „kòÇ(w(rC”; ©…ï8ä‡(rÃ÷á$!Äã‘GŽPôL}êð’m&Òö!0âXœp‚ÇÆ‚‚.¸Â8በ:áƒA!#E0‚D±Ä „ ²Ç,|D¡Ôá¸åHt/Ë¡ÉPâPäQã,¡á ‚ —â#‹‰Ç(xADˆAbB ˆèŽ{Œ9C©Ç!r(ì ‚ žBbPâXâ"#Ž?W9Žº·Ä㈈ˆ°›q‚„":)Ã4!|F(y…!G!£CˆŠ.‚ §ˆAœr‡, ‡¡…ìQ ƒ‰C¬+¶(!ˆAœq!qÂE±b” „áõßu{r£•#åò:#‘ŽDpÁs<ds.7&„E— Àˆ+Ž"â-†AQ8â""/‹a$‚#ñT&Þ]DD§ )tÆœz xAÈfJ'‚Ë“ƒqüì,ý?Ûõô$4ÂÂCD „D¡Ä „±ÊA„PäQÈ8 ŠáÐ!ŽˆìŽ£‘GHpÁ$Hr „HxEŽPä‡Èkׄœr‡$9C’ðAÚ(rCá„ÂeÔŠ9!ÉPä‡dvC´Hp‚AD~FäÇ8è"‡œ B!¢: …2C‹ „ËòLJ H8”8–9!ÉBXù Ñó²¹}ýu¿ÑC”9!É#bBXA c„„„‰Ç(rCøA 8”9q(q‡"B"' „K±Âp‚rC‚#”8”9Ä ±!ÈQÈ`q!–8A4A @„JD§œ „"9ÅN8ßø„âB!ˆAaÄ^%B%"Pá(q¡! qA‚¨ˆ„ˆˆŽ$4¡*Þ@ÈÌͳ†hf' ÍŒœÎ„P]ÿñ!ˆˆˆˆ„ˆ„‰Ç‚p‚œDHQÇÇ$9Cˆ‰c„ˆ–8”8‰C‰‡± D „ B"PâPâ#A ’ 1!‚8öw)ˆˆAâC,r ¯Q±ÑâøGÇ„ÓtU‡£[|#@hÐ=“^mV—ߎ'Š8–8œr†N9q8âXâC@âqÄ…L9!È®%Ž'Š9!ÄDˆ9rC‰ÇÇ!!,q8â‚ x?Ë©q8âqÉ"CCØL š ¬8œq! ‚ ¢?,r‡$9!ÊHƒ‘G"Žä5‡‚a@ðÌŠ<"c‚#ýï[mÛ ¾›h0’môâ±þ¾ÂBN9C‰Ç"ŽHp‚ŽBqÊá%ŽHq(r‡$8‰C‚LâXâqÉBX䇎Pä‡,q(rC”8ˆ”8™È£„–8œq8á%ŽBqÄã‰Ç‚Çq A ±ÂB ,q8âXäŽ%¯rêDåHq(q3‰Ç(ïÄã„„‰Ç(rÇ(p‚Ë „ã”8œ|H, ©1Êèq0âPö#ÿ¤ìTSþ“né:ÚºS`wwþ„§DDBD ±8âqÂBDã„–9!ÉPá"%%"%8„ˆœq!G‚ŽEå%Ž%%%"‰CˆˆA‰NB¤‡}2¤S‰Ç!°‚‚Ë „±ÉHp‚‚Ú  BB ,rC”8A c‰C‚#iCœBD „DBD ±8á9àãŠã ”DHQÂB øû§Ú}o¤­/t©¿«ý‰C”8”8ˆ„ˆˆ‰Ç8âXâ"""Xâ$(â#bÂAÊ‘@‚"â""B8ˆÈGDr7Ñs1‘ÑÈ莋¢<^#ätGDtc#£`£Žâ"qÄDN8„‰Ç ‚ „1œHQÄDDã¤#bEÔŠ9ÐâXâqőߥKêûýµý»é/ÿô"'N8–8ˆ qp’&¢"'Š=ˆˆˆˆˆˆˆˆˆœp‚ˆéqıÂKN8AìÉŽPä‡q3’aºø”9AÉ%ŽHp‚‚‚ü_ÿ¯[ëþÄ$7ÿü¡Ê±Ê$9!ÉHr‡"¾BC@ä‡(rC’¡ËŠ9!Ê…ƒ×†È£‘G ƒ‘G$9C£„–9!ÊŠ9ø®¤‡ ÝÈ£’ „±Ç$9C’ƒqÈfŽE…A ‚‚hD „ „ ±´‚Aq8á'¡ÉPá%Ž%%S“§¢cn9p‚a ” „BDDJG ¤>©ÿÿï®»N‰=WÿıÄBBq,q(r‡ÊJŠâ"qÄD „BDãä‡rC”9!É%EDA!"8„â'á!è$.‘‡!8åHr‡˜q(q0âP㈈ˆ„C#¯}qÊä‡(qž"1!DD „ ¼Dq°ÞXâ#Å×ÿö±ÆÁð®÷§ø‰cˆ–8„„ˆAbXä‡!DBKD…DN8„ˆˆœq8â!!ˆÎ; !b!‰Ç8âqÄ „N8–=ÖƒqÉEDbÐAË©1ÄBBD…e¹4]Èü „KDG!˜8d| ã_&ŸÿÿR1Ê|Ê„Û)ÉÙ‡.…¿ÿØ£’Dã‰Ç8â'Š8˜rCˆ‰ 8–8œr(ä‡ Ür(âB"qÄN9!áˆDt-8ˆˆ–8„–8œzb,q!GŽ%ŽHq8äQÉA ¡%Ž$åHrCå)2?&9ä(rCn<2 ÇúÿÿÖFDŽ·÷õ¢Ç$9CAÄ¡ÄÎ"XâXá–8A c’åHqrÉ 8„‰ÇŽPä‡(p‚Ç åHq,rC‘G!œ †‚Ðì ’.˜’Ñ!,q!.Ñ•ytÇRC„œq,q8á!%ŽBqÂeºOùC‰C’§@„Jq!q!G"°^""$p‚r(þÿÿíïƒi¤÷Þ¿a' „N8A$ à‚8âCˆA c’¡ÂHhâXä‡$9C‘\D ‡D±ÂBDã‘G‡(qExÌ9CˆAb"XâB4APr£°Ò ":ˆ‚BDBN8ˆAœr‡ ‚A"?8á"%E „ã„D¡óŽ"A´r Âh"üáÄ~ÿ¿zëÍXzú×ÿˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¤A3ȧ‚!G3¨Š}xˆˆˆÄDb'D㈈؄‰ÇÐI(£ÿßÿì{ö«K×·ìÖ9!ÊŠ9 ÑÈ9 Î9 Xøa("ê'KEÈ`xA4‚ ¢ƒËt™t]IŽ%ŽHq!G"B)t¤QÈ)&ÿ¹¢÷¿þÍš+ÕXThžžž¸„„,Ž)ÈŽDr#¢;#¢9шà„qHá®G’8`ŽG":#‘ˆäGÁÈâ‘шà„tGdtG ¿kÂN9C‰Ç(rC’†!ñ!G ´9!ÃÓTqÈ£’HAÊ‚&‹¨œr‡!,ä‡, „öÂh"ü±ÄHe!$‡ýµõÒÛJ›W[¨ü&ÚÚÚXFJD§ÄN8„„Ž!"qÄã”8A c‰ 9!Êä‡ÜDã„„ˆ„„AÉEƒqÉ#‰C‚D „Drp‚h ‚„%8Aœq8á%ŽBqÊ㒡ġȣjä‡!˜ V‹òC’¡ÂK „ã„–9!Ê „}üD¡ÂDD ‡,q8éÕ†h÷ºˆˆä‡ûIS»¤ÛIÛI†ºVW®ÒzuœDDDDD±Ä „N8ˆ”8ˆˆ£ˆ‰ 9!ÄHh ±@†Åˆ¡ˆˆˆAŽ""""H&‚8âqÄBDãˆAœq8ñA ‚a! Àâ%8Ž"‚A”á¤=†)˜NjÅlSaxa-ºa„˜ia8£‰8–9!ÄHQÈ`qqÇ$8œqŽ$AÐL—EÓµX,N8ˆœq3ˆŒZ’JŠäÇ(w ƒ‘G$9rƒ‚, ®Lq8ð¼0„FƒB ÐaJÀ„„አB BØAeŽ%ŽHq!G"ŽB%ŽHr‡!$8–9!ʆhâC@á"XäQ Ç$9qÈ„FLrC”9Ç Ür(ôAPpÈùt]4Ü"üL9ÅPä(äQå¹4Gá!%Ž%BXä‡(p‚ŽPä‡ÄDHiEDÛ‰C=Eo;)ÇÄDD\Dxˆ–8AAÄ „±ÉEG‚Pá$4Hq!8ä‡!!Ç$>(º.¢B'¡Ë¡ÄÃŽS¨Ëê( …C’¡ÂDD! ‚ˆˆˆAAœqÄl „HQÒA$ „GÎÔŸþ‰Ž"$(âB"C,q!!à EÔâB!‰Ç(q8ä‡(rCˆ¸„MýÂ)èDK†Ç¿ÄDhDqÄãû^U%±8ä5‡8äQÉ"ALr Ç!š9ÁqÄã”;d5‡TB~$ Hr(þí>´På%Pä‡"¸”9p‚Ç!G"ŽC@åHr #‰C‘! @á$4Hr(är(âEˆ9qHeŽ‚EÐJHsŽaıÂG!ÉC× „Aÿ.·K’åHrC„œr‡$9!ÂKv1É%"B̆ Ür(ð HC’ „G!–?OªKñ,N8A c‰C”9! (q,q|D‚Hq8äQÄD „N9q,qr(á–8˜q(r(øŠH ‹¤B!’HQıñ(qAÐIM¢""!"BB"qíÁQ!,q,rC‘GD±È£ˆ„+¨ˆØéiº¥Ä㈈‰Ç!8â"$DDD¨ˆˆˆˆ‰Ç…¯ÄDDlàƒˆAnPÐH)!È7D¡Äh ‚hÉ!%Ž!"qÈ£¨ˆA4ˆþÂ(v$(â"BŽPä5Q¡H JC‘G¡˧\¾Ä…D…r(ÿÞ%Ž"' „N> R©äC‘G$9{ëÂæ „†Xä¼±È ä‡(p‚ÈQÈ,CXpˆê@È£ÖrÃ’¡ÉXåPêHrCô¹c’ „ã”8œrC”9 ‘G¢cÍ$H$‚H$RC”8–9¡ÉPá‡H ‚!ıÉB'¡Â\‚Eƒ ä4‚I%!!!ÇÇô±á‰8„ÄDDN8’ƒw#â$(äQÜKHQĆqÄDq „ZH">ħ!AbBB'åBXá8~Xâ$Qıñ‚ÉAEÔ „D¡È£ˆˆâ",!l© ˆ„¯ˆŠ “”8ˆR‡(qÇ ¢$(ä08¶! ‚F"8”â""#bA2éÙC¢:ˆ‰ 8ˆÿâ#x@·õ­ãÀó•D±È7ƒHçÈ.9‘Ä…rc×.ˆêA(|àƒ‚# ‚i$A0’DŽC‰Ç"iC&9ã͈EB „Š?¢#ÊâX䇎Hr‡AGÞPâaÄ¡È8„GQ.9C‰ 9!È`rC‘G±!QrC”9!ą删K–8A !Çqúÿ² Ž%EBJJ‚j'¡ÉPåŽBXä‡$9Cä‡Rˆ‚A˨< 웥â"qÄ „ „qa>%Ž'â ¢$D…BDã„GR‡ˆ)""Xä‡$8AŽC,v#‚ŽPâqÉPä‡ Ü{#æ8„$tÒ ™ê&9!Ä „±Ä±É!„ðE<ºˆˆ„ˆA„'N8¸½¾@ðn8øŽd°ÄEDDDKB#Š„DG~"""#B"AÒ ˜L(„–8ˆˆA¤A Dˆ8ˆAè$IH'÷Â,zc‹¤C8ú"èºÊ†°é:»þù!ÄHQÈ£’ÉHqœò Ç"Šâ5––a%ŽHr(öAPr(âXä‡(|XäQȃâC,r XäQÈfŽAá<ÉŽHrœK‚El¸á„Ò#¦‚ _ˆA‰ 9C–9CÐA ‘„„£‘G$9C„D¡ð‚eÐA3ÈNÈm„ó*–dgñ8â#eA¸ù‡‡""6Pä‡"ŽB#ˆˆ‰qEÐA5!!‡$9Cˆ‰C‘_0â@C‡è$ "qÄDD †ÅP\tnÿBâC¸HÙ%ñ î˜A‰æ²bBñC¹rçÃŽ@òl0’º‰Ç‚ŽEEÄPA4G̽Áhb?¡ÚÈ£ý?ȣ͡àÉŽ™C¡eaA„qÁŒñ—€¡ !G$>CXuüN9C‰Ç!G$>ÐH&!Du \r£Ërh$.¤Š9!ÉHr‡$9{ N:L¿‚Pä‡"ÖI¿þPâPäQÄC„Ž8„Ó(rC”;é±cf<$¨dŽCXr 䇂…†AÂ!–9!Êâ%<pDs˯~Hp‚r(á’"#$8‰N"""qè†`âÃAv¤‰|‘òüDEGß_øA£† R]9ë6â"  ‚'@Štrb·ùÎXä‡0ãb"‚IQ(p@„DDG(p‚A$A0‚lHQÄD „F[˜EÑuHq0äœÅD†É.,D2:·×®¼N8œq!G|f΂ ƒeÐa8³„áç * PlDjÿ¸ˆ´‚J"qáÐHº’N8A cˆ‹ÖD †‚AæqÁÜá¨: ï&ÌÏ5—8LìvJc\javB%ŽHr‡$8·ï(ýS tmˆWTAdr(é:&Rc‘G¢„—EÑu®GR $N0‚‚ŽPä‡$9Câ*ö‚&¤Œr¡È£’¡Â_ë*  336¼ˆ_‚  3C6h">èw¡‚G •"‚CˆA!%ŽHp‚lDÃñÝzA ‘ˆˆˆí#áœp‚d~žë±A¸M­¼ã´›x„ßlBn›MÚMÖ×]S»„°pžë\\†°á ‚ ¨ˆœqŽE ‚.”èå##¢9ÈŽˆìŽ)0‘ÈŽˆäGŽ2âBŽ#‚#ÖÒ ˜A4A¸äŽHr(øˆˆˆˆ„ˆœq8â,PH ‚9!ȣ͈!ÂQ8ã‘G }#ä2ÇØi{_uïûôõºUúKüâBŽEꎂ޾,â0‡ŽK›.HwöQÄ…äG"dã @‹©c’Š8”9Èj@q& ÿ»!DÇ(rCˆŒDdQÂB ,p‚C(A6Hã„GâØ ñØ«®×Å+ë¯×µÛKþâ$(á"{&CXqal¡ïØ_õþ=_±_ê×± ±VØcïˆ÷†ûoÔh¡ÇsB7±lЉ 9‘ñ!GBA1,rCˆ£ˆŽ($H$qÎ:J@ñHÃåŽÞ?ÿR ÿÂúGÕ¯OÇ4¦|%´Pë’xeŽTtP厨4d¡²‡UÒë‚.‹®A¸ä3G(rCÑC'gD…rc’fF?‰N%Ž%ŽHr‡$? !rc„âŒQ…ÿÿà‹ñüð 9!ȣƞ)Gd‡OÂ!àÂPa8ÂÐl¡Ê¼† Ò9È£ªþ%9‰c’ „FÄR!DtÐA$GP‚CÐ9C’ ‚A"êXá!DGeÐH¬ãâ+öCh|ì-ÿ,·áü°äõìqÕxpÂXб±L{b±ÐA0šˆ£ˆ‰ >C(uµî¼D…D~"1A‡_ñÎÊAÿÿ¯Ð_éýx£PäŽÂ8í>í³ƒÌ$kÒI² #á„EÔG‚  ’$‚ ÄãìHèº.¤5G¢†¸áô¢#×k…Ÿý×þ—ï)þïሜrC‘GŽHr‡‘ô"!Å#‚ät‘tGV… ˆèŽ‚(u #á8g!¡(pâ$qÉÿD8ä< Eô“H ‡"A"Ž9ƒqáÐHºƒ’Š9!Äã’ƒäCÍ„Ò#áœsŽ©C݃‘Á‡*…f?ÿÞyzÿ«þˆ„ˆŒŽ‚$9C„–8œr(ãFâ"0B¬ÂÇ‘ÐEŽBXá""C@âBXù „‚&˜A 9!ÂHe‘G&¢êº#ñ8á%Ž%ŽHr(ø‰ ÍÓòCˆAœq!8œ|FõA´¤!âÒÄDGÿru¥þa{i]¤Ýš,ò¦"""qÄDHQÄEÄDDDDDlC`†!8Ž"ÂA$A0‚qŽ""B‰)X™ÄD…G Ê: ’àˆå„ßÎÊuý´»KÿUüÑ$ßæ‰µÖÑ 8pA2œ©Ø@¿|qaˆâ, ™åépˆýÈa'×ïí­¯zí…W´› é6—8á–9ÁqÈ`r Ç$9Cå@ð7ƒHä5‡„A#&9ÈfŽEh$tØGtGäÇÊá˜>ì—SHr Ç$9Cà?DTŒy‰áÕ}°ƒ „„ lSM‰O0›AÂ#ôà 0Á(éˆAä3G!ĆĆą†$8ä×ÄJŠ8‰ôChr # ‚†AÐA9wH9C„³ºmC8åHr‡HQìáš:h)Ç8àˆü ãí)ÃM{Uì.ö6!1MhDG!Gq!± $]P‚Ç!!G"ŽHqÄU‚û~ˆlqùt‚ô""#B/PÒ!î¿Ã"-h1 Ú8ŽCXp¨ „b"qÄG xå ]06ˆé‰ !ò‡ ¶‚EÔƒ‘G! r(äQìá¸á)_ãÝZD ÿ8×Ñ î!! rC‘G$9 Hr(䎂Ç$9r ÇÆ/ıñGSNLr(ä‡$9rC’$L|èq!G"ŽÐH"èPH ‚‰xqÁÁ„ABPëôãýü¡É"PäQÄDDDã”8Ë8ˆ£‰ ÍŠ9 L{ x7B  ‹© 8A 9C’ÃŽE!,tGà‚°EÔDD±ØBNPâXùâXä‡!ßòrC¦%Ê*ʃqÉØ‹ý¥ÿñ8âqÄHQÄDDDPcB±Œv#bM Lõ8Ž""‚A ‚.‚  ‘’D±Õ°ƒqa0‘˜sŽÛûñb"´PäÇ ‹£ AÇÔ§ïz¿I;ˆ†ÂDã·„GÖ( H „RT-Š&=>vH¿AÈ`r9C’Š9ãÈ ƒ¹xËŠ8´‚fâBŽE&¸D6Ç Üp‚AGé)r‘Ò ä6ÇL&T“‚˨£„¬ÚŒÂ”9CÙÃ4p@¿rc†Œe…ÂhDDD±Älæ8„ba4#òê%8–8A c‰Çq˜Sb$4-6ÐID „o(r(ø† AÐHºˆ?jâ4-LòóŽqÁø‡¨C‚_LHeŽ"$|rÃÀä09 A0…(ˆœq ㈠X"ëò? #üqq­¤÷wNè ‚IDo,tPäÇŽCXr #‰ :Þ""ŒJtÚ¼A4A‚&ˆ äQí¢cÐH$t$tL­+ô½ ‚a8œuü-|är(ä08”8‰ 9q8äQÈk9 aÄ…åh#Èùt]HQÆ”|à¸à‹Þ8alF Š,{#à㦒&EÔŠ9C’BöTGTˆ2ŽHr(äŽÐIÐa$Dà‰ÆøˆAˆˆ„„ËðÈ£ˆˆÓ„ÐH ‚A$(õö"M]L‘D‡Ê’F—]ë!,pˆÿñwõaŒ‘Á@ÿ_±!¤9CAÊrà†$8‰ ˆ ‡ÄDDEWèDD„NˆŽ)d3 „DDƒfÅÄDDF·×DH5ì\Dom~AKÂÌŽ(0Bh♃ò‡ gÝ©Ç!¦>¸‰ÀßmVăqú!°|òªGb¦v\þF=„„ ƒû \~„Jr(áÒöÄ ø£‘G»Î9C’†hä‡u!˜9 ª±…‚9¬¡Ì9Ã8ô ˆü>úŠe½´F8}S¡ì¡ÂBPäW!ÕR&9rˆ8åqCÔHŽyyC˜rUˆýˆ‰dÄH®SœsËS9NV‚)hßr á¬9Ç;ž\qÎ9‡B"ÆÇ =Ç´Èü#Ñ1G28¨Vá÷âXä9 w#rÇ8åA(r Ç…¶âˆ‹ÔþÁgt?uÂÇúµBC‚dá¿!ks°E†HrÃPøq¶æ IU´$Fê ‘Gtä´ºm‘דL ‹« òêEŠ9u¦ÊÅÈ‚ „GÐ CùrCãûý"N=áGXIe}‘ޤ 䇬¡èt]R â%#¢:¸Du(|àãˆ">ž+!Ç(rCáÊXø<¤‚! $ÄFDuŠÉˆh š&G’â?ÿÜ¡É6!#¨Ù!Ò¼]5¼aÐI(”8ˆ°¯BR&GáqÁøˆâÑCŽ:ï˦DGG:ŽBWb“#ÿ¯_âqÅ&Å»¡Õ{ý}8Æô¬m ‹¦ ":¶Pøá„‚º&‚D~9Çbx„‚ þÖvZŒ×«ëQ´R:H0DtôªÇ‚ ”åTì{þê9Ç(rCä Qûb!„‚˜rCÅàˆø…£<‡ $&‚JF9ÂHr(þao]}–=dQÓ ¸XÜ ¹C莑1È`r†`îDL!Hd ä‡(rC­R ‚H A+؈â M‚ñÇ$:„Gã”=ˆ£‚#éqÈü „D}#Édk5Zf¬§”‚¼ÞM[Cã‹eNtµmc+ˆI™È¼4?RêHq!!GüÀÿØH%ía„‚AÐHºB0@´CBÐA">Ì8 ^>‚b”a=´yÁ„f†p l`šÂD);Ó(tc±KpÂNÙCûí4aE$A DDÅ E×Â#¨Ž¯ö"#xô–ý­5Ã&8HøÑñî‰Vßi¤|{Õ"tŒ8q±HôPäQÒŠ0á,PYú!¤1ùÈ£Ž‚A ’$A9äŽEùÀ¸äQÚ _ †CTrˆfAqÈý-[KhBV“|¶“na+aÆa¼¡ÂHhÅÊt’Ž¢9C”<1¿±œš9y¹?ƒqÉ-Ë HÈQȃˆÐ>C@ÿÇøˆˆá"Äh ˜MHƒ’Š8”9qıÈd|2œã„]GâEJéëmo«ÿý+â"±@¨ò Rqhµ®“”=‚Š ‚ˆˆA4º$DˆD|„‹®òê""8|!äãûþ¯¥þ—Ó~ÝûØáK›@¯lO¸ ŸñÒ „íHPH ‚‚H$ãÁøøé}­éWßú·w„}q¸÷ /¹n]‚DD qÂûSÿúñn>CŒ4A2êLýzÞŸHwÿ_þ’ÑcöPé~‚×ÁúÔ2†¸üDd‡ ®>Aœv‚AM ’#©ñò £„0‚ —A ‘.¦q! |±ð‚)Ñ^8×ýΦºÛª×íýÿ¼‚ãžÅ"c¸­÷¶‚ñè8aœq‰EÔG!ÇbÿÇ  †#b($H$Mu¼ì§ãÿÿ‹ïúÿô“N+P’~=_PØ?Š9!á ‚hºâ‚AGÁÐAùÀ¸äÁÈø|¾«øa„/ÿ/^?ü±á?í­~ü¡ÉA¸îÊut·(}#Õ­ÜŽ¢#«þ)0ÂA$GöHqA ‚ —A Aù9!È7Š>@ô;A‘ø X"ê@ðƒäQÈkÿÿý6__×ÿq‚±ÂPBáVñO!«&=aÕ!ÈŽA¸ä0]I#.8£’tírCÆ© ‚tÄGH$*S #úÇ`ÂM£»ca¤Úª ´aÒkaw¶•„gv—peÁÖ$(â'DDDHAâA1ÄE EÓaÑØ¢> ]¯ È=Áacÿ†)ж˜¦!'q ž1PéŠb¡±\B"‰ ‰ÃHx _È:±&( œ˜ô@ð.;A$!„‚!ÕtA4wIHó°³Á‚„0„ !`ƒCLª¡„‚ r‡$8£ä $40H$]H‰ ‘ýµxÔƒqð‚_È9HGÿ†‚&]GÎÊ’xˆˆˆˆˆñHF"#‚AL$‚D~#Š ˆùt ‹¨ˆí ‘Xÿ¬ñÿRÜ".‹©þïCÒH ˜&!„‚!á H ™|%¯I¼·—dŽ%EL&ˆüh ‚h$L+#ÜVÙþC‘G°DØØ­h×î´$6Ç$9‘ÄH)E†häŽ@ðVÿ~C‘G ƒä Ò; G[ Ø9p‚A.‚A ‘uÈq „D}„ã¢ëCõúìDDDDbA0¢#ˆ°@²ëöUX‹ÿÝÆ@ðÜ|EXÐH ‚û]%¢ð‚‚  A4A: xŠ;A ‚A„Âej< ‹¤¶Á´¼W(rCn9Á@âC Çåò>]øŠìEAM‹©r(ôAdr£°‚h†L&]o Ââ"@¬q!â‚Að‚h$tÎå:.¤r ƒÖüº÷â$2Ç ƒâBŽ$(þ°‚XKãˆÈ(Å‚B‚&&1 ’  ˜CÄPI$ýËrè¾GÈükä~÷~.„±#®-„!œp‚eÔ˜þvT%èðä0v©eR$fJ‹C ‚E× tGíÿ÷øâ@ñþ ™uÇ|&eb+3lìʆAŽPä} ‚.›I"?ÐH$EÐH$.¤AèXH$G×dÇÛÑá£ÃWG~¼BˆRðC 6:.‹®@ñŽC‚#ÿ½Pò #Ö BH!„–9 HrÈ+C4tH$& hUUw[ÿøÂ  ‘u ãWÄE‚A ‚h$GøÐ8ü¿åÒþÄYßÿ^A>¶‰R÷ÿÄbC@ã´Š —‚A$H$.žÂ ¢>Î8 Wýtû®8ëò#T± ‚B!ÐAÊ—´HÆ…M"êõã @²>„G¯ÂA³FPÒl:aã»cçvL2®‚jÂh0¿ð@¿‹;ÐA($h ‚h0A< š Ž9‡8éÿÕÕ%òžñAø§§ÝÑÇïþð¶@àrÃùQÒ„‚A"ëD;ã ÷ü _×ùÑïˆ`‚a2>¡þ¿ÓÇõ}6·ñZ»îîº&9^!7 Èðä³ÍdÈ'd † xHr‡Õìƒ0â)‚.…Mù Ñòcˆa$tH$]H7†høR A„ˆùN#ÂÎÊõ¿[¦¿ý/úßßn¶$™P%œ b<¡âžtDF)EÖ…wþ1± ¤=Õ ÂAÄlFB‚ —Èÿ(~½ÿñëëÿ¡lVÇ´µh]Œl!„«¾M‹®‚A ‚ºÐœp‚ ¥å?„Gòê".@ðã”>8ýÿÿ¯ß‡°üñ„S„yÒJm´s#¬ó ðU¥÷þ¾ÐA-Š º ‚ºÓ ˆøgîºZ! –_ÿÇ_ÿìLý¨ºyÁPt…¨Z:= ˆdÅL!ä‚ÐáÐH"éüºÑÿúÿl† Ü}(„$Ž„ë;$_úOÿ_ôÃØÂOVá+­ Ü/Ü$@ÆB# ãØ‹ ‚I‚-M â"‚P‹¨ÿ0œwßÿ.¿_òÅ>PÞý«J’aô﫤(Pì‘òê9;þÛᤂ# I]v ðÐA ‹«O1¿ÿ÷öÿþ°Û`ÞŸßr‡ÐÁþ—ÕB† ‡‹A$GL&úì©iר"?øB!ÿz0ÿõÿÿÿàÞå;ÞõŽŽˆê*;(v¡zÇô…H$‚AH>@ñŽA¸á ‚R $K”9r CŠA S¹ÇGÿ^BCP|ì¨ÿüò÷ï'ß8ˆÌ>“zIo¡e…(ÿ„PîC 3–åÐH$]y_׎#ìBq C šºø^—Ù¢ÿÿ³Eý¿þ¿ºuæÃ‚(|7qh1â#Ú ]6‚ ý AòêˆøHºÐ¶qÎ9åÝWÝxíþê¿é{¯ÿ÷é7õ_ûÅU'˜ÜHèº.¹ ±ý‹\í R Ú$ I*÷VÝ+M†—®Úûi*ðÒµºUoé:ü5µµï8ä‡" ’.¶($D| ™Ç - Áqûxÿ |=_Ø ‚HŽ¡urc°Â@ˆ[!|P@ q„A±„B[¤ÅXTÂh‡ÚJÙ+uµû Ø„Ä‚äëÇD ¡Øˆ A"ë<‡$8A Lº ‚ºŽÚ ÷ÿ[ˆ£çe û•ц™ÇMU´TÖÊMJ°½z]EE)††[á†â1A(eŒº.‹ ‚ÿâ"7q¤cÐaÂIN\Àã¾"""""""""""";„ûÈêÂc‚*z¥ ]‚A-¤A š#ã„ ¹±òx [½„.íd HQñõ7©„y†ÌÒ˜ÐdtyÃiÈÇä.µÅL!åŽA ‹ H ‹©¡É$(ö- ‘tØ,uׄ?ò7G(†G@ˆ0áDA‚(q‚ÂÆA×eÐHŽ—²ëcñÝøˆõ$A.ßÿÄDDDDDR„ˆðÂ&‚ ‚t$Gà „×H$ ЯÿýHdçd|º.¤ ÇÁî#ƒ/âZ EÔƒ^„yDGmˆøiäu x‘éd2ÇÿÐLa„L!màÙ9Øä š ™åÇsŽˆý<àƒ.8 V‹¯_¦žCü a?ýú®¸Óð‚A A$H$]qh H0A+÷Š š ”ÿÇ_¼VHº.³i§‰Ãqþþ©Ä>@ò Q¥ (+Ì,ºYÇb ™¡Ú‡úò ñs‚&ysIGõÛY $GTGòë­¨0ìR‘ôÂPÁpЇ"ŽHÚdF[„EÑuþéCA ‚&¨"?Ä‚é‚Aà š® i‚A @¬ã¨ˆŽ"?¬xH$‘u§_„¯ïþ{Ò¦ÿíŠ …ÿãèq¥ï´ „Aÿh$A2ê‚AÊ[¯ $D}쎈ÿÎÁüHè ™C¯!GûøÒ¦ bA#þ¼ š H š_;) ge†w¡‘Sä ÁÇ%XI$‹ªýŠ ˆøA &]~Úù…þú¿·G\áãô>П‡ÿ×ä äñÄc®@ðAÐB($(Œ?ø†hDlq'Xt­õ„bí ‘«{ˆˆÓظäG ¥±q]Û!©±z0ä0>9Øšë*Ó{"Ž@Ìc‚ZÉ ö."#^A´}! xÇzßÈ)Ã! õúâCPq½RÇÅH6á%Rã‰Á‘Ó šÂ!Ç_kô$4­È1µCŽU•éÊÙ!›È!‚ƒc”çòâCœsÕDH@ðÕã’©hqÎå=»Ñ @ðlãœsË ¹Ç Žv 'ø¯ÔàØö„DDNÖÑt]5][&‡&ªíáéNž–Ÿ„‚A  ˆ÷òCçeAÿÿë#¼·/„‚Ii®Âý÷kÖëÅ$uû¯‰M]q! ~I%}~d2!Å !§ä3Ž@ó EÓa ‘u­M]Z¯ßÑÁ´tGÕÒâC@øo&RädE½¤!ùt]iÂXŒlP@˜lwŠA’ $‚]ˆI®M‚GÃ¥ã†Tƒ8a|ÌD.L „ øpˆ|›d2$ÆlgÆN3FrÚë ‚Eձ脲?_Öºÿû£Ø„²?¼7ºhGÆè0ÉѦ¬ad Âhö÷F¶°; ÿȃè\w[A ƒA ‚#ô´ *Z ‚A[vCØ„ ÿÝãàÁîmÚM‡G»Q*Ý:V %c 6a%k‡O_C:&PÉ´ƒ_˯¡ìƒ`ãlDC „1ã˜t‚MŠt—ø¦)Öâ›é÷Ûú´­Ý&÷çºÆM‹¨ˆÐa A *#BAòè.ã`‹¨a2ëáÕZMÿ_¥ÿþ—÷Zýïò†¨é°Â&Ã[*Z ’ºâ‚A">-ýÿõýØÿú[zMý5÷†A0‡ËP@›#ý䂯›ö< A0‚ø ¿ÿ÷á­ý?õᯅ„ˆìPH A ‚ „+Mèˆ@›.´&ÂA1.¿ÿöÿîþÔWä ÇÈ äöGÈùuÿÒ ®‚I—A ‚&Px H³ŽwïAÿ÷ýl?ÿCmcÞAZ€„ —„|Œyá„‚!í.‡²>]rcŽúý<5~‚H ‚z0äQðd ÿÿ·ÿ¬˜»©u—\h< Â#°ƒ0šÂB=‚ „$A0–È4Ž!&&¹ÀÃ$J¿±íLÿúÿÉÿí?H/ð‘ÄÕMz¥Gù.‹­÷KB4Èè$A\XA0ˆøaÂGõÿÿçoÿýt¿ÁB#€Á AÑÂú9ÑÆÒ%Â!ÐA">Å’.¶@ðÕ AYRÓÿwèEÿÿÿ<¾Ã½yå÷Ö—ô—i&ê—„0ƒ ¸ü4M0˜Aš$a‚\ š ŽçùÙhÿÛKõÿÿýØïÿU­:CK÷òܾ.‹­‚#êð@·|áÈ£Ö’ ]‚†B(ý?ÿû×½¿oüÑniê]d‹º÷¾Ú”ýâ"<„ ‚ •/h ™uÄRA%#ª#ùuÙH¦Gѱ÷í¥î•ö“¤¸Im†˜ih}ýÒÞ–¨¡â5J[„EÑŽ1A„Â{H ‚a„ pH$L‘ÿ ›Ðaƒ 0A„PL á¤Ã !R 0›í‚PÂ0ðûÂ_«} s4º„’A]qÑu ßûûñû!G÷Ðojr!h4©V)ˆM¶ƒ ˜¦!5Ö’fÈŽ-wKæÌŽ/ÐãÚ „0’"ë–9 aà „„‚g#$#èE*×ÄDDDDDDEÄDG} ½~ÁíÄŽ‚ ”2·þ;`˜‘Ða ‚ ¤H$aÎ9ÇOÿõÝa}FÕÓ! $‘uà ‘ðH ‚eý Úÿýa°˜Bˆëÿ¥ø"œŽ8kz“["iñä QÂA ƒiuÐH EÐH$‚.´H$Gÿÿùn'a®á&qk¨; &* ×—ÛõämØâûN.I ‚UûÅ1Å!LPaˆHDv‚A$@›A%Ä 6GÃ)Î:Ò&S„,Dkí/­Ó š CƒMDOË¢èºú|PA ‚á’A‚ ]m´.™Ç0èþ×t´‚‘ò:T´dt™D4 `ªL&»&ˆÿå×!¤8Ò˯þCŽ@ðqÁþAA0Ÿ!œ}†áñ„""#"# $KˆI’ K”8ˆh$A ¿¼pÅcÄe¹|—EÖÿ§þ+ÂA‚.¸–:&‚EÓ&‘}…ø†aÂ:‚h ‹­<5GA#¯ïˆÿ $I|wÁøÔB[!ÓH ‚a„.H ‚×çeKðHº.¶@ðÖ$]X@žÿð»þ¢ ¤Gÿûˆˆö‚ ðÂh ‹®‚ ‘PAˆÿ ">Gâ*¿åAdhD2U-Â"è¿ÿKãÈmŽ8aD0‚'ÂA AsŽ‚_¾ÿ>ÈÈ™–á ’ºè$I$Iþ!Sï§åü6…ì†ù †8?aÝhMBA#ü4Dt 9<0HºTqÁZ°í~ßÄŽ‚ ¯ìº_}î‡x¤b’I%ùC{ki× ô ‚‚ áL†S…}amˆ»ÿßãùt][.ý¨ðÂA ‚A\0ALã²>²ÿ¯ÿ &\„àã‹ ˆû¤GË­äu¿ÿ¨IpO{ÿ_xŠ …¤H —iL0š pH$ÿþqßëî[—ÂEÑuüuOü B›# ’ ]r‡ÂEÓ2?²Cn>vT½¼èÌ_PÂÓA<¼&‚ºä6Ç&Èëÿ‰ÀÈaÁê„V„ß3Ã03 ¢™™ƒ%b„hyÃ…‚t#™xb üº.»†!6Á1Ø£„L ˜a4â ”§8çöô|m4ØôÂ64hxFþ B`þ $]p‚d|º„ »|~ḋa)"?ùïVݪÛomÇAÃ1é6ÿˆˆð‚h ‚g—0‚a]@˜˜TIþÈù#èDWÿ}-Þ—Š×W_ô›boò¸¬hˆº.‹ûÛðÍ™qßÑÁ`£Ô(" &øH$ sŽw_”7ïÛÿWÿêïü®P„0I]p‚aB¨a ‚&¸ÙNˆú¯þØB/ÿ·®Úí{µ«Öþ­ýw¾»ãÅ6ÊßT0‚ „GøA ‚AZ„‚ _á„‚EÓÎ8DdGÿ¿Qû×þºÚë^ƒ „ΟAnÿ½ùÀÇwÉá>·cÈc°˜.IÐãíÿ§KZ׿ÿâ¾òø¿$(.‚A‚—Åø A$Øœr(á A0S† ²?ÄWiŽ/yØRûýç ¾ úþ¿…õëÁË­ þ»ªâ! W¨H ‚e×$8a ‚#ð‚eò?¬>›þëÂ4|#Gÿþüoß× &\ ‚h÷†ÂA"ëîÈëÿþ?é<ç„l_êÝ¿ ÷ïú ÿo†‚ þA0˜A ‚ivô‚I.M’@¼# óÿßîµA~‚ÿÿë ÿò-‘òèºàˆú¿û½èà\x¿¿h!ì!A„¤ˆÿoÒo÷¦65ý}ýûÄ0„yÀÀí#ò,†A]rä‡G ¢:`íu.‹ýÎ:#é!¯öýÿªÿÛ[ÚÏ.ÿ¯ùaq#Ý„¶Û¢šlJ‹Û 'a„aÄï þøI$uÐAÐ[é „䇄LºýëÿؤBˆë·ïâ Âh0š &j0˜FxhÑ1 ™N ¦¹ €Ê‚NaÊ‚PF9C–9䜡ˇ²‡>ý„Ü{ÛÅ¡ A=á$A3‘† ö¬úY !È£÷Xâ""""""""<‚¸èDDDDDDDà š.¶@ð08A hŽŒ.·o.­¯÷ûß|\$A4òC’ä‡Û üáÒxˆa0‚°Amhá¤;h$]ia‚lC EÐI×٠ˆᥤ¯ÿ~]p@¯Ùáh½[õH$¡›R&]rpÂH">ÂDä â#±]`\ŽÃ „{&ˆüö)‚ºíu#¨7¿{â]¾ã†®¯uØAÒ éÔ ‚h AìÀì$Itá„Ò ´ )Ç8à‹®–=+ûôFò>]ZÝtÖÖöGøÅö˜L«K_„!‘ûþ: xw!`…Â+š(áªùXš h ‘t""Û&]H)ƈøH$""’AÎAŒÑ#åÔ^üíIü‚¸èù†!J™;(PÄDDŽ‹¢ùu q~èNΛ‹O xqÈ£°Âi¼$ …sŽºþŸÇ ¦”¤A„"*„CÂA$A ;A.„ ‚eò?º!G,ºõ§üCa0A‘û¤C•Š_÷Ü?¦¸ûþö‹ "ê®( ’ ‚ _Ì.AdpÂD|ºãáÇF7ÿG~¶žoà „Õ¼N‹¦^׎¼8è>)‚! #Ž ÐáÑÅŽ™VEïJá$^ô ‚‚ ¤¯ AA”èÿ_ll\H`~«ÿ‡øoD‡rcá×ùuúþ.‡ ùaÚÂH …Õ?!à tÂã„Gã÷ås\ùŸ26Ó×Ò$úêëà  —ö‚ ð’8á\-kÞõãßH&‚ñL ‘™¢ š£\šûÈ+û±Õ¿÷í%{Ó $_$9ÁÇA ‚.ƒ „ë„‚&–ÿÂ5´40ƒÁÇâºëÿÆ’·/¤]UÛ&F_ðDô"½W{ÄCa ùÃ\|xMÒ6mþˆ+ŽÝíýd5xˆõh ‘t ™uï x`tI$’$Gïì‘òëŠêÝ%Ókm~vYñJ?ú®6‚(~[„EÑùCÿ¯áüHQØ*"#W²NLr(ä‡"¹7&9NMɹ’å B’8èº_ß*¯kÓþú ^6:ˆŠSÂI ‹­¼eŽPä‡%œ˜äAË‚C‘G"ŽAA A ‘ª !ב¦`Èè¹Ñ6Ì3™ÑxŽˆæn<™Shã³*²>GÓôVÝ3„ „Y&‹æhùŸD|Ø„x¸dĆհ@þïz¾ÿþðÒïöl“Ž"#;(Z÷ÔDDDDDDDDDGr £ R‚#ã‹â$u KÁWã¹Ç"aÈ8ˆ®""""""""œ0ÿý«kÿÿœýv¡°“ˆˆ}‹ˆˆï„„DDDDDDDGõ_ýÿuîé_üõßJïö«¯Ö÷_ä\ô¸iÍ­'µÿê·ãþ¿1˜#dqþaš™*2„N‚j´ºîíÜCë¿ëÚY‹¾÷¯Oð‚^³€‡9 €Ö᥆!1[¦+i?Ø„Å*R¹Àc9»ÿFfç%9絜ÎT÷Ñåíý}ó6ú6Ú[Ó_ôáŠÄ\DB""!„A„Â`ƒ^­ ÷ðôi Õ§ëÿ¡›5<+œ8 0ƒS`†ßKA›A®×o¦ßúë\0¶„DDE÷¿ÿÓXïõßþ¢“mUc«þøÿúOu­Óþ:®‘ÅûûÒþþÿïA_¥þÚõþ¿Õ±ïˆˆ‡;*]?«ûÿ«¯uïþýÿÿëKû¿éëX¯µœOæ÷íëÝ\ßÿa¶“ßÃõÿ¸vŽ,Úé~òÈ?Ò\†>šÓ¯ßõ’ Ègoù ƒ‡òÒ¹!ÕºêH ä2]<~õì>ñÛÛû}0â¯_oý¶¯°|Vºðý×­U¯aÈ aùþ— Û_!híÿ¿öÛÿÛëÿoïÿÁþD¦ëoöþÞuÛÿ†Ø}öo¦ýðÜà?ø[«Î ìyCkÎõÝý¾ðoœ yÀDÛüàh`ýN¬<Ø_6þÅs€Ÿú ýúCo¿ïè<âu¥[køw÷´ƒ|âëÞ׺íÿs‹L~Ç|ÿãýÛÕ}ýßýÿþëÿú÷¿½÷·±öÿîßëûqíÿµû¯ä²6_÷ßöÿ~½íuÛKªþë¿ÿûKûKÛ%‘ÜÏó‚öï÷´ˆÞ»þŸ\ƒ¾C ]+WòÕ}öȃä­ûa¯všÈ QúneDt/tÝtþì0©®ÝòöVXå𦭄—#4¤7oá‚Ê „¤3µòA çFt…o¸PaùöÞþìRÈb}â¢4*6+ÓJ?ëc¸ïÿk÷!’ÐFåý?;-DÐM‘ û¿»Mw×»íS_«^ß¾Ö½û }¤ê­ÿ¯¿ý¦·ßÝ­ Ða}SOSUá„í4HÆÿÿR­ÓÿÞŸpÂjžqJ¦ÑJš &GËÀŠvaE¬!DDDDDwÿÿu׈ˆˆˆˆ`q„_ÿ×^ú¿ý½yK ó-Èg‚ð‚O›‘á>6Á,<Íd09xGšçe&6g ñœÎ#6s:é<â5D)…Léô(ôÓ&éÙ8&æ‹áöƒ·P©ª_úzG¾ðƒ@Ô ÑìïD.BDx§3"ñá˜$Bƒ´’!|¬5h$mÔ=ÿk˪¿^¿£ÃÐ@áÇG:<0”Jg ƒa´aÚ ¶š ™;[#cܼÂTAÓÑöJa`¥ú19tÆ/4龾MíoN“lB“» ¬RfB¿½þ©ÿûµáÝÛõ¥ïCý}?Çõøí:WV¶é}jÚÛ×ú}µµõ]÷Õûûþý§ý+ê×ÿm}--Òï寫ߧìzþ¯«Oµi2ûþ$QŸüÿþ´›ë´Ÿ½½®Ü*÷ô·¯^ÒÿÐn¾¯ÿïõ×ÿÿûékª_Âøw Ç]ÔpqüU¸]ÿüuïÿº×Bþ +ô’îït§mÅW®‚)ÐÃ×^»o¨þ¾¿]þºøÿK×þê‹÷n×@©õ¨(-ZVý×ÿ;ÿ¿ÿËòÄ}ßÕx‚)Úîcöõêíúä`Ð9‘ÈÁ³‚ à‚ÉA øAÛÿþÃK½þ¯ÿþ·¬[õ/u××öÖC÷ä2²ÈÇ&9ÈÜŽ7²  å9 d,G Ñ$É ¬#䬂Y˜DÂ1È®BŽGÄxC 0“–änE–¹1 ‡â^Dà’r7!G#äÈdƒlÌ9!Âdœ· EíO^ð‹·ë¯üBÿýß ŠÿÐëºÖat=éßÞ]wZíwáN uA‚0ƒR+£ Âd2›‰¹nFäQîÔ*|4ïNÖÿÓÕs~àŠ´0^ŒoÐ%º—èÀ-†qÂoÿÿGœëþÒ¼òUW§«Ý)µµíðþ9C­¿‡­ôž_ÿËÏÐ$cl¸9}Ìnõ—Ú09ÿ¢÷åÃ'.bË·ü½— ÜYvþ.ÝKÎ]¿ZOôÿWøn«Òom[ÿ×þ͹:§ÕÒ[Û®‡MóöÚÿÌ6÷~•ní{[ßý_Ò§é´ŸïzßõI¿êúºÿÛKoþ»úzoÿÿ«ÿï¼D…žÿê¿Ýþëö©7Òqëÿ§êÙ@q^¥÷Iàö*­Í抃0ûõ߯Û×ÿ~ßÿßÓû¯ÿÿû«ÿ¿ÿëú¿ë~ÿW¶Ž>Â0ïM;ªÚW°Òí°’Û~¾éytUS„ªk}ëQd¾×Ðÿÿê¯ïýwÿÿÿþý¿„PþÿÿÿÿÚÿ¡ýÿÿá?ÿ«ìT6)†4Ó °qA0ƒb‚ &Å ¨?Ú\DDDDDDDDDDDF…‚Q_ÿïïÿïáÿÿþëëôÿëÿöÿÿÿ²9ÿÿßïþ÷\L ”°ÃNÁ… ÂµÓLWÅÒÿûßýýÿÒ¾¿û„Sÿÿõ××¥ÿðE:ßÿþ—÷Ø_öë„Pÿ·õˆˆ¢ñˆˆˆˆˆˆ¢c¯þ¼O߯úõûzÿÿ÷ÿýûëwÿþûkßÿý¤Þ‡ú·ýÿ÷áÔb¿ÿö÷g‚¯ãnÒÿ÷o üð›ÿø¦â¿ÿ·oàÿÿ¸¦ù‡ÿo}ÿ >Òéøÿÿ¾ßÿþ¼'ÿÿoëÿû¦ïÿïVþ ÿÿû_¿ßmðEGûýíü¸?ÿß¹ÿýü×úûr=ÿýÝ߯ÿ^_·Òÿ†êÿöö+´½7ÿû»ëþ÷ÕÁíïÿêÆÿ×ÿðGwÛÿþ6×ÿÿý¿ßýü0¶×ïÿümïþ¿ûo·ÿþßýÿÿ¿ÿþûÿÿÿÿþ¯ûヿÿÿÿëõßíÿÿNÿý¡ï{ÿÿ·ÿÿÅíÿÿ¦‡ÿøÿÿë^¾¯CÛ×ÿÕw×_¾ÿþÿº¿÷ýïÿæ×õ¼ì©ÿÿûþ¯ÿ÷ÿý½oÿ¯—õý'K×ý+_—>ßêÚýB ïÒ]ü‚½Ã™ÈL ƒ‘p»#‚1Êrì‚ãH×þÿÞ»Wþ\ߤ«þÞ“ú]«ï¶–¿÷ív—­×ÿ¥ý¥j«ý„—ÿ ›®[©¨">á„дșnŠîz¶ÂÚñVº×¶Xë×ßiyna¯påôW=ñ^_1ñLTôz¿—ß±Q—ÔûÅ\ƒŒÿÓ뵫´ÿ_|Và“µ?ÿÅGÏçûñÅm<íýW~Õ;Mpšú·v§ B",Ž/ú/;ß‚þº²êÂe×µ„ ‹CE„ÓPA¦§wzE‘ä!‚ !çÿ__÷Ãj“×Iˆˆˆˆˆˆˆˆÿ÷·{ORC¾¿ÛÝþ×Uz^õ¯·Oñý®ÿ÷^×´•ÿû’dž88¤88§KÿðŠè/Õkçeüz0¼p[o^üK½ô ›Duyrõü®vXô¿áøÖß½wüdQÊâ°³e_Ýp׿÷¨wâ"?¿½/…×—»­ì›”9CqÍÞ\ëºÿëÂ(}7Wñmš¯óÁ5TAî¯Á™ðö»÷‚)ëêŸz]¿â"ÐŒ ¢""‡ ‹ÑÄ8ƒCñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü€€(ú_ÿÿïÈÉ™jgH¬Ü€ÀWƒì\ Ó)ÆgšA{7À‡ÈÐŽ¨¡fÄ8!ÌÏâ@ðjšk~ÓÐ"<ƒ»Uõä@™qªÏoÒ~8aѳ¯1"—G'ßè{úëôºúÿßîš¿ ºúÿüþþ—×ãÌÿöý¿¶Û@ˆúþ— RC<5G)Èe9 îaÏdŽFç8ä3Žg(r Ç,sqåAà®$9œ¥H ¹ëëì?o‘<6ýº»ˆYd4Èè¾\f‘ÈèÂ0ˆèèˆæ^#ç"æG ]žEÙr#ÄtG‹‘€\æl‹²FGgãù|Žf/‘ÌŽ)"3‘ìDDDDDDDDDDDDiWá‡ïØa°w_!0‰œDDDDDDDDDDDDDDDDDDDDDF«ß†ý‡ÁmÖÖMÂÿIsãðÃéùÄ0ß½BÈ}(½¿~Û÷nëþw}+ßÿaý»¥i~ßZÿýøØÿ~¤3þ޾Hó¿ûÈSõmu÷¿|€€°Jöa„¡„½ö¶—ÿym¢èʈª"„fˆÄc#£yá‘ÑÈæaÌA!2׊bƒï!8Sû"a!¸dpÖ#Æbãùš#¢<^0a›Î#q›Èñp„|‘ÈŽÈäG ‚äpÉb89 0Ž0GDp ‘ÑLD„j˲>F³y Dù#¢ŒÞ]Ê„qQ&ƃ.EÀæS-ré¦0M;Bì Õ5ïq r!ÈjYÇ>ÔªŠpQg²CžÈQÈdƒ(æ‚9ø§8ä\3”æsŽ\,r¡®çƒA”rNHåYCåhV‚ ž¤ìˆ92Dʲ¼ÁGf“ÿÿÿÿÿÿÿÿÿÿò 3ù?ò¨†ÃÌÂÄHChr‡0å{* ‚°þUœÀ*WGŽˆâóGѸјDtF"tA¢6ŠÎkFÑÕ¤yE Vl6ÅÂ,?SÁÇÇ5,¡ 6‹Åóèèˆù¼Ž‚˜Dt¹„aÐ YtGDto!¸ˆeÕœF„{#ÄxÚ#¢:1‘Å#ä|ÑòìŽÌ">GFxÜGD|Þc/ãˆEòùËæt]Ù"B#£ Â.‹¢ñtGFhº$eó„_.Èñ0`ÈáÈù]â9—lB@ê FøˆŒöFçŠ9 )râ",¡Ês̡ʷ)ȃ: f""""{1Ñ„GG¢uïù‰=sº3†Kâ†ôõuýiÏOe9 ò1µœyäÌ…DLý‚[’¤œkÏ~†æ×kà·…tOâä+áFƒ  IjqÞRiüþ—2ϵÌ®¹”.‘´¯$²„„Ì/ÛˆŽÝ#õ¢8³{ïÆîLj­ˆ!²(¥ ÁOâ$ñGX³×«¥†¼Ò(ý››Jž} Ä@Ò’äp°%íƒ2 Ð?]•ìúaîù˜ý°¤3âAzÄÍãø ?ù´&êhÅT¶cY€ŒÄ,‰ö.òW–R)` c—ø[øuK}Eò¾²h!³8Žû̲(ŽIÅiÓ$Í2KLà™HQ‘Yk¤S}%ö<úi«br.»Úá‰} ¡üŽÃ]ô•êêb&Œ1ëAƒ$FЍ«2Ž3&Šaøÿ㜧@Œâ,­aÆi¤ D4s±ô.ýåú’y¦ýºÔ€dΗyr¯p¿çÙŽBû»Y[smªM4]1–ü:=ÐélËÎéa¢ój±ís“š0\àAHÄñ„UûX³VïWŲÄò"áøµÂ5Äl…G2šzŸŸ JüvuZÈÈ8Cf9¤÷–ç:׬ÆC_Crà`¯&¼[ý œqˆeU¤a@ùiihµí ˜‰ùýçAÊ)U…pPeY&qH™ŸÑ•¸Ûë£EèÊ%2ú%«pæ1™Fè1ø¼ =—Ô>¶ ¶z*3v ^@I’eÇü˜±vFu4^·äÑÁ¿l¤õŠ(ã½â˜]W•”%z! ö?è«Í¤žã)ë¼åB_Ñôß@„)¥ß  azR÷˜STLÈ #LǼskã«—®Œ¤Q+]7‹mg}Ç3¾°þ§\y¾¾Ö7”:åÞü <¶+yBJ×q³çø¡.LP {E(ë |gŠyÊF¾ÊvSÆ|HŠÚóŒ5 ut+Æ-}w&ÀS6Mµr[w‘ó^©³†­A9ok ¤<‚ÿf*IÆB¶·ú¨t‰CEÔŸ´².dI“ŸD,ë /øôÈŠnÄ QíýKf]Ç㘯Yy3¶£À”e™È†ë‡!»hÅæ¡Åy¢ºlGzmˆhÚOOÃrPéu`cŒ²AòËWÛ. Xo+ A|‰*o`¿Ìk‘1=(ŸŽ!\êáÅ…²½ƒ¥%#¬¬Î€ðôNzôÃá\VEzÍÖ»PØ8ŽßÚá –$êþW}ýJÏñCÞ/lûF(÷ÜÚÉS½Nàý–U'<ók‹$Ð 1Ì•ùŸ¼½º\——NÔªŸæS8’êËó¡¹ü¯Ø–Ù 9OO¿ˆîDF°`Õ»/CÄ«¶Ägη«rjJ‚²úæþzýN”ù=‘oXûf! ˆ_êëóë‹6E—ð…"ºÿ}AxýA‘ÞVߨqýºdQù¥R§³WÇ2â2yŽN°äwoàŒßï•Í’µ¯‘tk UTäWCuFxeɚ톭IS –ú]f»,‚!U ¼Ãsœç©3EDq¿«¾ Äò*ïš™KYÒp%x•ÈôùY$ñ©VÕ¦¯rÏ=­½›Iu!«Šb38ä ÇrsâÝ^y%DûSÅ©3GÚ­|˨K ƒ)†hUÅâë‹‚üâÂ}¤²µø†7 ìæ¼öåÉ™ (@jÆ Ê9/™¸­eˆïÈçd4sžÅ¢O,•Å ÊÙ-'!u]Ö{·aÓ áwU¥‚b:OÊ€ÈB‘óøÁw؉dÃ06+×]ùþÆ%,'¶è˜ºh s>püêóDýð°¨(a$XÐ^!^!”ti‘sÜufOsø¢p#zW4õ#¼?¡¡.à büôâ<£¸HjúÁ~ƯeH’e Kxß±‡8Ás óÖ½¾:º·y,IVóØÖªöGOœÈkgðâ‰ø&ú]­€v&æ·ì¼™Ô$Ø”CêÛ ëÚ<<=lÇÒäïšxÝh¢¿õ7T›Tåbw¢ªÜ ò‹ù,ê±ëÚZ½a¢-â;O!–í¶ñÑý(¶þ„ÖÔùçÛ#ÍÛ±¬ªSV×Ñ­ ý‡g§²<ñQÿ[û9æí®Ç>¯?È*Šª(‡nåà£w·?­‚«¿´Ò4Ñ8^ IEND®B`‚leptonica-1.70/prog/tribune-word.png0000444000175000017500000001554711425464255015625 0ustar dandan‰PNG  IHDRþ€­±ÝgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IÇIDATxœÅÍŽå6v€y-c4Œ(»Ì°yd/Œa%¥Ž)cÞLÐÛ, Ô#d™åUÃ@j ^ ÀU£é,”:•¤ÔSj1"Ï)êç–Ë.ªu%þ|<<<<ü‘ZÙ焛学´v2âÆƒMnpx+®Gõ¢éÍ1›úg(2ñDY€ë1Žx “J>øì³QC1#ÿã£]~"Àûu€Fã4ý~»w'L)ÀÀt€Þ=`T·ñ Ÿ×Ç=³®„ü÷|¨üDZ† n¶;µ°Ñ .k²áݨ€WîÏž>¬L×<’ÉáV¼ö ÀHw‡Ì"‡ãKA  oMvÂàÿ¾?0¬Ü.¹`ĵ^Ø/žüß7Ç·].§z+û}Ã…ÄÞ•ÀXå3¾»À­> °«„ÔÿŒf`c€« òÀÍz ½ó€óz’,Àdö{Œ Ü4q}8°+´×†  äÝlÜWâúû½|éâr –äÒ0\ °o€AË»ÿ» ð»|7(y7ïd"e‘-l Rßf½1)v¸ç?GB®egß\G$ î2×Zܫݟ´rÞÁ à£õFýM¸›]b€Ë ¸–#;ÖZ`5‡Ò]­ tGó£Y¿Î×# ðÐ9u²kÃÝ|²¿=•ð±õÊ$ˆºóq€ÉìÙ `H§W?e((0³iÓ,!À 0üyü¸Õ×MŸp¶:¿O 8“ô t±­ñâq ®^p®Š³ðqG.Z(!>nj‘*˜ØêÏiö7ž××òU îH*I…`}'ÆÍç"­4ųY*YØ·‡jŽz†>X=&&:õ`¦] ¬•’ÑïldÎûJÖI†Kpî@êC:€Û l„€ñrõÕmU¿ö· É@4åš@ùHoæ²J»SN/އ,@Z¾÷ æ&s£˜"Sù‚ úVQìPæ0È2{•äçÃæÒTBì*—¾ê£ÊÔoèåÍ&'£ãÓ"H{¡ëFˆ%@ßÉ2Uàˆ7,Ò^èé7ÊèÛ›ÛÇc`-¼ÊÜsi/L”1h`.Ü´‡ô@·IѨÈ<€hn­` guI.ëçô —€v kq¸D€šŸÜð•Iå¦H7 YÈÚ!Wë‘4G ²,ö–È“ürvˆBF¾ƒ¿ý‘$ˆÎµ &no‰<ÈšT¾:ªö ÖL¯Zîš6z¡^&h鿏pÝ:£¢™yŽÃäàþ*ÀÞ$6r£g€ói—™Ô KFÜG»Kƒf  mnHX1¨zSˆÃåzèL‹FX13ÀÛ-€½ž<@KÙ,†åLî ¦â €e§ŒÖr@ËÜC¨—ÙAç;½ÛHJ”s„Œ£04AÙš]€>(Ç´%)åéqõ°²u1€^ÆïöÒEF1Q3€P¶Ä5YF?ðc&Ùzð!—V–Ÿë…mèk9·c `Šg£Û½6íÀµ£°¸ÿõÄœ³Ó…þ¹P{ˈy¦õÚÿå ðã2êu O ™}º°w¼ –Ì Å.#®]Œjpmý0'ôXD¾Á@SA £HŽçžÖ'ç·`në ÒÌã&ÊÁ?1RIÃfÂh‰ ¾·ÿ:?Š\/¬eSx²Ò }݈6þOï¦26ÅÔ b= ýs uG&@-¾PZ€™L•(¸#P'ˆ»UËh@.†ù¶½,¸|¾Ú¨GßðÔ¨r7 €2Á»#U~ kúrßèðC‰yJ.è‡bô†Ké„9¹…rý˜Ùyb€‹"€Þ7/jÂÒŸ}Tê¸d>±p §—),j5ªÎWÕ·b ÍÛr $ÃçˆP À¨IðE¬ù)ËLð´X¹ž­@²àèøyj†N)0Þ$Exð ß²¢^€l @ï¹@Àê¯àÆ0レ… û@J âå;X¹¬œ½Yz$ EÍëœÏx Р±Û{…©Oö4˜ŸÛ§™rc±ßíè"Lìü†P d%°\Åž¸®ÔÁœ–ç—#]9=ÕZ ¾ýõ€ev°i `лÇBgøçI øW f€’/AõGÐQ¼·‚ybRDÖþ‘“e êFX@`È5WnïeL@Úßh+èq ÀÊC0 s\#×+kâà|?´@ýìÝàÂ9X±)hçrÝøI6Y€à ,î­@€zuãÖ×ÿš-€xZîbÚp&LÜ wZ»pt‡AÀȽp€Îºevf%lþàþè W¼Pâ6–š¾µ¼¯·Î°Å•!´4ù\Çbã0ä €ë¥òwÆ#b^ôÐÐPåÀ§ñÝì~ÀÄÓŒGÄår[4k—v@úËPx̼ZÌ¢<ÀPD´dT,¼'ŸX:u©ž“iÜ%g`˜øH îA;–x‚\GVBgÎÎ2âï>x*€j®á߆æ.Ÿ˜ý¬›H4ÔýOVìBœ°'Ó>©—µKÇýs"€ž°ÁyéÑ­yPƪ‚[ónµ¼@€Ââ*˜˜Ðñö’w]²eo•اr¼ƒZ @=ÐÌ¡K»lè ¯M€šc^ò®K6>ïZ ‹œ¼ï TØ@ãU› áõ;&r+-.ªŸ¾tà;{Dm˜YðÖ « •Û$+¯#Ž}3€WGZøh!× ô8O÷«¯ÑcÑy„4˜Y¸©ÓuT®JºàÏkõh‰ÈõÌñôÙÝG€Éçãô~bžÊ*îÒ–]XÂZôf€‰4M8€sO€B€Á§szÿ@á-³Ü˜‰$Ê(„üFMìb€ï ½ƒÉÇžzŸ®—M0òz)Zâ¼åô¤äæè^ƒ¿™|¥`¼hÁÀ­½XÓGã—0`¥xP`~Ú†-ç|oûzÎó3~^àz–tqè À Òk?2¶þÆœçìÛ`ÔŽ´PÞ^¼…hͱ¤µåWZ|EÿÑZ¾£€9µóÀ¼ê5ø^òkGc %ŸÖ`¢“wAð{WÍÅÁ¶€ ØÀ ©W[Ó††Q›há”v.HOaÓ΃òt±´¬7P {ŒêÕjZJ7µôÿ¸V¶lp(µrþ~‹Aº‚(6)µu Ðažð¸Ñ´£0ϱ4ð¬z qªW9ëMa:°g¼K]o`ø ªl]¥iƒÝ:/¢’mŸ: Tûä#RA¼$Z–¼p¾Sd|¼òÃÊ.*õ‚A‘kñVPÅ«p2 1ÉÂ(€¸œ‡ÍSNnA0ä]qÂ)€2œ¶êÂ=Ò,ðÑb.çÙk‹&¥Ðˆ^ €NÉÖ›/yç)À¦šÄ!fåܵ/¤Ú!s›(”ÍG(Aœ’VôtÑ €ású!:%Æí0$ß⿵P_ô§ p P„ YZhP-•30TªœQ1ßp¶h±y< —iä1Ó€¥ÕŸŠRÄÛI æÈ§ îš.ÃV`  @Kb0 ›ù$y…7Â’ÆÜ¥Xð Øµöÿ€a€&’€Ó†B|C „ @Þ³A¬ @d…´C:¨Ye"¯)yW"À³â±šÙM„šŸ‚¸YÚed‡š`HX'a0þš’·u Ù¼ç¨Öv¨üÕ–*@‘DS}’H@e%ÐcÑP6` X‰ö9¶X—îW ð ÕvÀ6+[¨I®ýz¡„= ŸLu³)€RŸ"€?•Õ h([·c’}f¾ß@«€÷¯I¤†ó0‘‚}/,H¼gdmÔß‹ÂSÈó4‘Ý›]hì…ú’„ƒ¯´U|¾Mÿ.Ú«s—¿â‡¿–>Y2€ÚyÑþêR‹*(×%àMqð!˜ïs×ć_V=#OpžÎƒ0H-`-g À.:²e˜ •* ‘*¨¯~©Y?ÈçØ;bµ¸­$@A¯±Œ+¤Yt a<ÛÈæÒ°~àQ7;$€Ê3´¹K¢Ñð=½‹Ú)–ü*ÀDÍ3¢lÌÈ­Q Hå7VC–{”šÒÓœ†P‰ ½ýÈ­QQä‰H\CxÛ. kFX· ð­& =%+ï|õ WÍœ& H wjȦzÇž– 0ë~ŸÌ±ÿ34`žœ>J€)€"tÀoŽàMj^¡R¥?àyQQ_ý^¹Ó6ý*Î÷çÈ…ª¡Ù©m8ät—p[Ž&З¹ ^I±N(ZEæ'8‰v0» ÷ Û†ŠGQô¤ôݼ€"fmñ29€‚šÙÀ‡eT“ê‘H… Û‹h9ÐÂ-€RŠ–¸ñÙ1:Üàöa9˜>MÆ<€å((ej~Öy€ó&@ ªä%0>s·ææFŒG. ˆ´¥° 0¥v g´`¤w+Fl’@bW\¤R€~/ÎkÝ0 ÀQWš ˜>ϸ¹ô«}06„Cí û<Õhq³^ $@Mß}•P¸Ç°pµHÞX0)Ç7/ðš†e7_ Í·`OÛ€f0å0×›éEÂ>¤^Уð¥D®ç(Öê5%œ®è@n0úEKÀæ’Åê`ØïA!Ò\Ý¥âÂ!Cý•Ý%h—JøqÏ=]š ;ãìe¥üDS|’¥Ù‰ÉÏP,žÓ ž çu@Q17¿ ÀÓN꣘´8Àp –ƒ‚¥ãȳ? 0OòxÎÑæì>À Î\ö ~ ‘+pã6@ Ü–À W$[Âã@ €þ)H`³ø995YÑx0Úp‡W'ðÝA€HDó®è€á«¨H3êD W#TƒéŠÑÐæ¬°K€S¼Ø€ÄM°˜z«ÃhxàêÑp$MÍIîÿ4€ÃÈÌî€Y0ÛØXŸž[ÿªÆm ]ØØëî=Ãóë5 ìxÅæ€b€~Ð9³ðnäÆúhtGšÓevÂFÎ"Þ²yq€n“õ‘øð$Š8'å ¯Gð°çÈ €Z¸uâß½¤FÒzNP/š vÀüˆ…”{G,aOÀ½€MÜRýíºŠ«º“½³–ðGÔƒ @·!5Ÿ°¢/~¸} €Z ͳvu Û•@é_Y{ŒJ °pH^àŸgGJû[ƒÒîm•@”kjˆ–ÑQ½]P¿0Ô2o]®¿? @A±,Ô®èµYU5ʽÁw/ü³bŠŸ2‡ü`ä"h.ú`ZøV¼Ù‘ö 0À§>å,ƒÛv'û­^“À‡à:B—| À„Óz£ šÃM`¢HJäwJy¾åâ]áuÏÀüưw6ò¯8<=cœ®åÿ4!2˜~’Z• ]ªs œ>KŒÌõ¹M_'Ä[@[| V蟠Ml`·DùW¬ûÖHìH` àiCEÐÐãàí3fFkMÐÅÔ "€*xýÓ$°PåÊà»—¸»Àô—y€–Ú%²ê¥noíaƵÌ&À´°å’¹L.)Àý#;¥ÀÿD§j}&>Þ*|,¼bþ¸pz1€ ³ø¸``ÌÒYTÌãs±H®Nk:ðÝA€È'—ƒF·Ü½h6 •†CÐÀÇ€Š>’À €©îô·àsÚè,“ ™ùS}রJÖéX Ë±î¾ø ´'#˜YðŸ£0ê(æ‰R5O‹©Ú:–@1UítÛµtw"€.àË0úRü­{q1’4“l W@[O @ÝÀqøã·%À»Î(­¾”'`SéàEåÔ88Y£À¿XÅþ`E]¨ñ-Sªœr_ÄáÙLK¢h𞩟ó‡Ò pç– 8«ù?Tš €–ÁçÜÛZJ@ýV ëÙ’è¼‰Ü ÅPÚ‰ 0ò ÑnçšB/Ì» ©ø¾ËôA|qÆ«%ÑÓ z?ʿԌRÁ¶’—á4àm#TPîåh|_Q1¼ÐÐr‹bu;•”¦¹-{~Ð%é9$”›£øŠFD~s‡/ë ¼^TÍ¥Mç¸×0Ð]ÀDõDóÖ|¢¡£È6j*ÑÒeÒAÍËŽNŒU¶ìø¿t¤êÖáxÿVhw9©/4(a¶2T˜ËPÍ-}Jj’RÑVPNøžË©­@Õ¸iÀÆA.³àõu§KO—zCµAÒâ²Uâ=`·ªˆb*F~ÑFs:Èv¤™2Þþd}±J˜<˜_º·¯JÑŒâc§šº÷À†Ó%Þ‚_7x˜566þfk冗 o„“ïêï+*6d±l~°_Š¿ÚÊ¥ 6÷ºˆTP~ïÆÝn‰²¡úq@HüFqż²#¸TÁV4Þ—3¢)*«[·t+zwÊçè‹4¢!´€õÂB°ÄëUŠP]=Ò-‰y‚sQÝ*–5´*,éP…`S*ÐD(Cui*#ˆ…¤5ˆV-Í@ieo*â.Ê¡ ¥‘,êHN• –Pv0øe@¹hB>eœ‡ZHŒlý|+¼”YKâ/±Ax®,(RWÅ]TÕ•&€áÂuÌBš³@q•¾çâ ´á·¨©&µÁ@m$0\X¿a9…„ ´MÉSàÔ pµMÔm À}=#1 _®i8aH{qå¡Ðª˜ºIGZ+ÅU†iůƒßä}«Ž†/5Å/W‚Ô{úâ@ÐTÊg f¦LjPñ.·“Æ2ÿ¤9nD&RáçKÐpñÊ®ªø(׊„Û°[ztË @‰aÏ@|«*ðŠYÒ§ (Œo~á€2¥ö‘fç bèàõúÆpa•ÕB;â+ÝVPê…“âßÏ›•¥fžâÌlÜÁ/îSîËt Ãv 3DüÝólrè"t%>¾ŽRišfãœ3ˆ»pt«Äþ žÿ¬,N•Z¤;±¢Á7>5e†o­9€÷aÝáh‚äc_A”¦¦(؇ç‡ðE NiñÀ:OÐ]1Z7J¬Ã[â½X ±ú†%i Ð €^(HSCÓW(b7‰WV7*ìD¸üÞÁwg$•­° Ð30àÊÿ,‘®¦¦dwQSÓƒ8 P~O.ë Çx°Eùа(M6ÎUŒõ_6 *Öò‡Œ€Ÿ}fîÎ>fÈnr-¡–aƒ§²x‘>C§BûЂŠE€4•×\Ú ,(l m!T £„ žÚ¢&€FXÆÉ£ò“z|Ö:6²¨Â=9Ä5(@ç(._Zn݉ŠÔ€]%8‰»Sœç >¸×Qn\œa÷H£¦¶aYo@º"Éá'›#6Ó€´-p”htb¹ˆ›Á m±6ý]Àa'föÖ bƒc?e»‰¶`ù(Lt3£“•¿|,—íb&ÖÃ>[ÃÏÎeì‡^ŽÒʆ¥/ÚÅdŠ EõïÂo—-êÿÁá­ûH‘ÅÿŒ`‚Á Ç~bвmäQ. éôÂë 5áY¸Ãð¡_XD ·úH³š:`ÿNZ ïRù0‰ËXm-£ Q½ð¨ À˜iEx#$¼¤ëÇ-(| ›|+x¤ãÌ=@½ ʲ%xÿ¢?l¥O†Ôäà _u|Ëxœ¸¶?tûÚn„ úžî€pÄ v•^E¹{€íFXüÒáYGþG÷ŸàþO ÁŸàû,öY¯ö£ —k‚Ü_ ãÿ•¡`’}ÙJRtIME×9™û4IEND®B`‚leptonica-1.70/prog/pngio_reg.c0000644000175000017500000002421612266543170014604 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pngio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for lossless read/write * I/O in png format. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in png format for * various depths, with and without colormaps. * * This test is dependent on the following external libraries: * libpng, libz */ #include "allheaders.h" /* Needed for checking libraries */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #define FILE_1BPP "rabi.png" #define FILE_2BPP "speckle2.png" #define FILE_2BPP_C "weasel2.4g.png" #define FILE_4BPP "speckle4.png" #define FILE_4BPP_C "weasel4.16c.png" #define FILE_8BPP "dreyfus8.png" #define FILE_8BPP_C "weasel8.240c.png" #define FILE_16BPP "test16.png" #define FILE_32BPP "weasel32.png" #define FILE_32BPP_ALPHA "test32-alpha.png" #define FILE_CMAP_ALPHA "test-cmap-alpha.png" #define FILE_CMAP_ALPHA2 "test-cmap-alpha2.png" #define FILE_TRANS_ALPHA "test-fulltrans-alpha.png" #define FILE_GRAY_ALPHA "test-gray-alpha.png" static l_int32 test_mem_png(const char *fname); static l_int32 get_header_data(const char *filename); LEPT_DLL extern const char *ImageFileFormatExtensions[]; int main(int argc, char **argv) { l_int32 success, failure; L_REGPARAMS *rp; #if !HAVE_LIBPNG || !HAVE_LIBZ fprintf(stderr, "libpng & libz are required for testing pngio_reg\n"); return 1; #endif /* abort */ if (regTestSetup(argc, argv, &rp)) return 1; /* --------- Part 1: Test lossless r/w to file ---------*/ failure = FALSE; success = TRUE; fprintf(stderr, "Test bmp 1 bpp file:\n"); if (ioFormatTest(FILE_1BPP)) success = FALSE; fprintf(stderr, "\nTest 2 bpp file:\n"); if (ioFormatTest(FILE_2BPP)) success = FALSE; fprintf(stderr, "\nTest 2 bpp file with cmap:\n"); if (ioFormatTest(FILE_2BPP_C)) success = FALSE; fprintf(stderr, "\nTest 4 bpp file:\n"); if (ioFormatTest(FILE_4BPP)) success = FALSE; fprintf(stderr, "\nTest 4 bpp file with cmap:\n"); if (ioFormatTest(FILE_4BPP_C)) success = FALSE; fprintf(stderr, "\nTest 8 bpp grayscale file with cmap:\n"); if (ioFormatTest(FILE_8BPP)) success = FALSE; fprintf(stderr, "\nTest 8 bpp color file with cmap:\n"); if (ioFormatTest(FILE_8BPP_C)) success = FALSE; fprintf(stderr, "\nTest 16 bpp file:\n"); if (ioFormatTest(FILE_16BPP)) success = FALSE; fprintf(stderr, "\nTest 32 bpp RGB file:\n"); if (ioFormatTest(FILE_32BPP)) success = FALSE; fprintf(stderr, "\nTest 32 bpp RGBA file:\n"); if (ioFormatTest(FILE_32BPP_ALPHA)) success = FALSE; fprintf(stderr, "\nTest spp = 1, cmap with alpha file:\n"); if (ioFormatTest(FILE_CMAP_ALPHA)) success = FALSE; fprintf(stderr, "\nTest spp = 1, cmap with alpha (small alpha array):\n"); if (ioFormatTest(FILE_CMAP_ALPHA2)) success = FALSE; fprintf(stderr, "\nTest spp = 1, fully transparent with alpha file:\n"); if (ioFormatTest(FILE_TRANS_ALPHA)) success = FALSE; fprintf(stderr, "\nTest spp = 2, gray with alpha file:\n"); if (ioFormatTest(FILE_GRAY_ALPHA)) success = FALSE; if (success) { fprintf(stderr, "\n ********** Success on lossless r/w to file *********\n"); } else { fprintf(stderr, "\n ******* Failure on at least one r/w to file ******\n"); } if (!success) failure = TRUE; /* ------------ Part 2: Test lossless r/w to memory ------------ */ pixDisplayWrite(NULL, -1); success = TRUE; if (test_mem_png(FILE_1BPP)) success = FALSE; if (test_mem_png(FILE_2BPP)) success = FALSE; if (test_mem_png(FILE_2BPP_C)) success = FALSE; if (test_mem_png(FILE_4BPP)) success = FALSE; if (test_mem_png(FILE_4BPP_C)) success = FALSE; if (test_mem_png(FILE_8BPP)) success = FALSE; if (test_mem_png(FILE_8BPP_C)) success = FALSE; if (test_mem_png(FILE_16BPP)) success = FALSE; if (test_mem_png(FILE_32BPP)) success = FALSE; if (test_mem_png(FILE_32BPP_ALPHA)) success = FALSE; if (test_mem_png(FILE_CMAP_ALPHA)) success = FALSE; if (test_mem_png(FILE_CMAP_ALPHA2)) success = FALSE; if (test_mem_png(FILE_TRANS_ALPHA)) success = FALSE; if (test_mem_png(FILE_GRAY_ALPHA)) success = FALSE; if (success) { fprintf(stderr, "\n ****** Success on lossless r/w to memory *****\n"); } else { fprintf(stderr, "\n ******* Failure on at least one r/w to memory ******\n"); } if (!success) failure = TRUE; /* -------------- Part 3: Read header information -------------- */ success = TRUE; if (get_header_data(FILE_1BPP)) success = FALSE; if (get_header_data(FILE_2BPP)) success = FALSE; if (get_header_data(FILE_2BPP_C)) success = FALSE; if (get_header_data(FILE_4BPP)) success = FALSE; if (get_header_data(FILE_4BPP_C)) success = FALSE; if (get_header_data(FILE_8BPP)) success = FALSE; if (get_header_data(FILE_8BPP_C)) success = FALSE; if (get_header_data(FILE_16BPP)) success = FALSE; if (get_header_data(FILE_32BPP)) success = FALSE; if (get_header_data(FILE_32BPP_ALPHA)) success = FALSE; if (get_header_data(FILE_CMAP_ALPHA)) success = FALSE; if (get_header_data(FILE_CMAP_ALPHA2)) success = FALSE; if (get_header_data(FILE_TRANS_ALPHA)) success = FALSE; if (get_header_data(FILE_GRAY_ALPHA)) success = FALSE; if (success) { fprintf(stderr, "\n ******* Success on reading headers *******\n\n"); } else { fprintf(stderr, "\n ******* Failure on reading headers *******\n\n"); } if (!success) failure = TRUE; if (!failure) { fprintf(stderr, " ******* Success on all tests *******\n\n"); } else { fprintf(stderr, " ******* Failure on at least one test *******\n\n"); } if (failure) rp->success = FALSE; return regTestCleanup(rp); } /* Returns 1 on error */ static l_int32 test_mem_png(const char *fname) { l_uint8 *data = NULL; l_int32 same; size_t size = 0; PIX *pixs; PIX *pixd = NULL; if ((pixs = pixRead(fname)) == NULL) { fprintf(stderr, "Failure to read %s\n", fname); return 1; } if (pixWriteMem(&data, &size, pixs, IFF_PNG)) { fprintf(stderr, "Mem write fail for png\n"); return 1; } if ((pixd = pixReadMem(data, size)) == NULL) { fprintf(stderr, "Mem read fail for png\n"); lept_free(data); return 1; } pixEqual(pixs, pixd, &same); if (!same) fprintf(stderr, "Mem write/read fail for file %s\n", fname); pixDestroy(&pixs); pixDestroy(&pixd); lept_free(data); return (!same); } /* Retrieve header data from file and from array in memory */ static l_int32 get_header_data(const char *filename) { l_uint8 *data; l_int32 ret1, ret2, format1, format2; l_int32 w1, w2, h1, h2, d1, d2, bps1, bps2, spp1, spp2, iscmap1, iscmap2; size_t nbytes1, nbytes2; /* Read header from file */ nbytes1 = nbytesInFile(filename); ret1 = pixReadHeader(filename, &format1, &w1, &h1, &bps1, &spp1, &iscmap1); d1 = bps1 * spp1; if (d1 == 24) d1 = 32; if (ret1) { fprintf(stderr, "Error: couldn't read header data from file: %s\n", filename); } else { fprintf(stderr, "Format data for image %s with format %s:\n" " nbytes = %lu, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", filename, ImageFileFormatExtensions[format1], (unsigned long)nbytes1, w1, h1, d1, bps1, spp1, iscmap1); if (format1 != IFF_PNG) { fprintf(stderr, "Error: format is %d; should be %d\n", format1, IFF_PNG); ret1 = 1; } } /* Read header from array in memory */ ret2 = 0; data = l_binaryRead(filename, &nbytes2); ret2 = pixReadHeaderMem(data, nbytes2, &format2, &w2, &h2, &bps2, &spp2, &iscmap2); lept_free(data); d2 = bps2 * spp2; if (d2 == 24) d2 = 32; if (ret2) { fprintf(stderr, "Error: couldn't mem-read header data: %s\n", filename); } else { if (nbytes1 != nbytes2 || format1 != format2 || w1 != w2 || h1 != h2 || d1 != d2 || bps1 != bps2 || spp1 != spp2 || iscmap1 != iscmap2) { fprintf(stderr, "Incomsistency reading image %s with format %s\n", filename, ImageFileFormatExtensions[IFF_PNG]); ret2 = 1; } } return ret1 || ret2; } leptonica-1.70/prog/ps2png-binary0000750000175000017500000000145610376541211015076 0ustar dandan#!/bin/bash # ps2png-binary # # Rasterizes a postscript file, saving as a set of binary png images # # input: PostScript file # root name of output files # output: png binary files for each page # # Restriction: the input PostScript file must be binary scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outpngroot" exit -1 fi inpsfile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # choice: output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpsfile} # choice: output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpsfile} leptonica-1.70/prog/test8.jpg0000444000175000017500000015345107430611256014240 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ª&ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷ê(¢Š(¢Š(¢Š(¢Š¯öˆ|ï'Ïo¥X¢Š(¢Š(¢Š(¢Š(¬½SZÒtHÚ¦£”G¡šm¿Ö¹é>%øvQÿóªØ?O–oü{n*µÏÄK¨Ïî¼â¹cÿ¯-§ÿB§êò£‡ÀZï?ó×Êøý[x¥GÉà ãÿq _þ.™?‹õËoõ¾×Oýr{y?””ù_ø«ÿÿý•ãkÀÏxÉÿ\"ÿã”IâíÿEðùÿ®º…¬û9¥MÆ]ü¿Ž¯ÿD~!ñ~?{à‚?î)2Ojöƒþ×Gýzù7ú Õy~(iƒþ&ºf»§Ãÿ=î´¹?ë]F—­iºäiÒõ.áõÃVT2ù¿òʨKwuQþ“ãµJMvò(9¶_¡ÿÐ>÷ý󾢓]Þ'—ñH?ç¿ÿ»nÙ85-¾·4rù¶äKÓƒÏýñýßö—pª·ί2Ãö¨é—þÍó|¿ïr>•Âë>:ñžsåKö&_õý›øÏòû•oï †/‰ÚØ;.~Ãk4›|¬§î]¿ßã“ýÆÚñjçï~2øÞÏím:Þ(ãº1M³~ïýáŸÄzÖtÿ|qÀ]&D1y™ŽÙ¾ïýõTŸã÷ñiÿø ÿÙTð¾¼sÿ?6ø (ÿ…õãŸùù°ÿÀQGü/¯ÿÏ͇þŠ?á}xçþ~l?ðWÒ¾¾“Vðžy³Ïº²†y6ôÜÈ þtÏk?ðxgPÕ¾Ïö“eå}Ü×'Ľu´ßí;ÜE§ˆ¼ßµj±Û§ëZ>ñ®¯â\ëW^þÏ´HŒ–ٺϟÿŽ «þÕfÛ|Y–çÃÿÛ1xKVûpù×3‘ÄŸî3ãÌü*â|LºwÚ´­âìÅzd †ÏÛ^Fþ,v¬1ñ[TÕ´/í]3N·°µºßî›í7óÆãÁ÷ªÔ.3ç^ +K=6u‹ŽY~ÑÚÖWëžµ£‰|E{ðäkBÛÊÕu)?Ð!†0Å·É»×äùª)|Yâ™~Ñä蘖]?Í·ˆBîé2íÜÛïyƒþùüg°ñ‰ü‹ô»Ñg–\ÿ Ÿ³>É~o›M¸ûÁ{ã4ºmçŒõ }Òÿ LDºžØr>ì»wËýåVçåç9âÿŒtÿ_¿°îf‹—ÄÞ_ï¾O/ÿgëòúŠÊž‹8ÍäÚô‰-§|ƒûû6üìs·(ù¼+{C¹ñö›}ý©ll5þ£^<ãê röz7Ž,ï¬$—Q½¹´ÌRÎ>Òžd_óÑ>aûÏüt›µ±oˆañG›&%Ó¥µÏöŸ–)6ÿ _Åóþ?7^Õ¤xk[„ÛÃyoÒKöÞ:'÷qón“ÌO×Ò­'†üJ²ÜÝXj0irM)r <ùÛÄ{·ú¯Þç®?»ŠÝÒtÍZÞx&¿ÔþѰ;>¹ÜT§eå~nßÅ]QEQEQEfêš½†‡b×wó¬0SÉÿeGsì+ŸâŸÜb˜úV£äý¾o²ÛÍ 9ÿW'QT(¢Šû{ÀŸòOü9ÿ`Ëý´¾7€\ø_‹×N¸ÿÑm^/¦ÛøßÆVº Ýׇ »Ð¬mcû5´÷‰SÈ«þ¹ÿ‰¾?Zè5|A¹Ö?áµÓ¼;ö»ˆ›ÌŠ)$—ì±ôß#p«üýª¥Ãy¿³~“kvmíòb¹oøI#o _é?fótëin®dµ³ùþÔþkl’Vþä÷r=*X :o„NªºŒòÚi¶¿gþÑÊË¿ü»ÚÀ›÷“u<ⳎŸkk¦øgJÖ!¸]¤gZÃæKå÷}¿óÖfùWûˆµô.§ý£uác&ŒVÇQ1'•ö¯ùcþÿá\{Åñ)î<ÍFÀ&A÷uw§þ‡ó} hxzïųj6ó]ÜØÝiß>L3GûÁ”D~?½µÜcéSjRøŠçÄm®m¡Òä–(ð.~âùøþ÷?.ìü‹Û55¬ƒ@”Ýk:Ü?ëžÜï~úËÿ=;`b³¦ŸVK[ifÖ`´…wË5ùÔd¿2üÊ»~ïû/.9¥¶ÄO§ý§UÖíîtï6ÖAun<½‰ ›äfÿ{îžß/½dj6óÜkÒj {Kß2Bd‚â_Ü|¬7¯DÿW›n{g5JÛHÓ¿³î.îüEeäÿÓ/6Fò—÷žS#|ÿòÍÿïœb¶$þšèE§êß½–ß÷VZ{É žKîû»OÝm»›øOö¯R¬­WY²Ñ ‚KòG›(Ž< ß5iS袊(¦o§ÑETK­¹’B#Ž?Ò¹ ÛßÂ_¨Áþ³")ü{ÛÏO÷äûÇÛh®ÚŠ(¢Š(¢Š(¢Š(®â6—4ÚU¿ˆ4µÿ‰¶†MäûñÿËXÿ®«HÔbÖ4‹-FÛýMÌK0úZ4QEÅ´7Чy¦Cz¹å&õû7¯ùÅeêðÞ[›y"KX»Òß_Åÿ_»Ü0®SQþÑŠø—¥y_½¶µÿW,món’ÞTùeþ,ÇøcŸ{§CsoqöKckwÿÿ럗ýÖn±úýÂå¯$ñ6—ys¬}’êÚ 9¿åÓÍÿWÿ\–^ŒŸÝßóºzUiàctÑj:tÚ>£nsŸ!ÿqÿ?òÏóÛÛåâ²'·wS¥×“i¨ÁéÿÐg¨?t×=Eö÷?äŸøsþÁ–ÿú-jî³l.|?¨Cÿ=-dOÍMyW…|Yw'€´ ø\}«\’Ó÷²“û»Ýþ²Oèµèžð§…ìfŽ"×Ww¼»½ŸýeÃúµyï†<'Ž~xJÆKŸ.ÂÚ妸å $‹³õ®îOx}¼5uáûk±é÷X3 o”°ÝŸ½þxªúÏ‚­µ]G@†F†=IÌŸaï¿Hÿà+ZxWIƒÄ·"òs¨OÄd“Ÿ-G÷?»Mñ&s«[[‹KˆÐKæy7+¾¸#k¯ëõÎÞ|?šñug¸Ô 7wÑH<ão›öü½~âíùWóÍIà);£i¥ê0ZÚ_E›Ì¶ó$,²;õÜ;ÿ»Z~‚ÛXÒ5I<¿:ÆÑ ÷ÿ¹ÿ|æOž¨Ü|9…õ‰µDÔ®"¸–é®p>îã»þ8ÛüXùzV.¥ Ï kúFŸi¨!Ô¼Ëoô¸ÖO!7£|«ü[»îþuÝÅ¡Amᣢ‹‰Œ^W•æËóÒ¹û‡:uÚ®uùb–íäo¿±÷õ¾ëN?é‚I|ÙgŠ×ìÂrØ>_ü »¯ÍŒüÇÖž¾ ÒbÖF§3‰ñ ÿ[ò|ï¹¾^Ùn~\SüU®Ëáí ]ÚÚ«¹fHb‹ÝòñU<{¨Í¦h0Í ¿)” ÕÇO¢Š(¢¼¯QÒåÕ~&ÜiòÜÜXC'ï¼Ø‚ù“mŠ?•Y³ò}üZéäðM¤–ÞS\O/ýtÚi¶Þ?ñé©Ïý÷ÿÅTMáq"Ö²?í¼ú Õ‰4_}ŸËþÛçÔ µ3xÎÞãÉ’ÜMüõ?þÇùVŠ®|A¨?Ã’â(µ¹¼‰H‡‘Y‹û¿Î½.4/—©(¢Š(¢Š(¢Š(¢ŠÐJ¦99®#á¼2évLJæþ%ŒÁÿ\_l©ÿ¡×wEQEVþ‰Æe¶")¿ˆŸàßí.¹›ËYAœJœŸë<ñóíþ÷Ëþµ?Ú_œwÍaê¿ÙÖÿdÔå¯ü²¸ÿзôÚ{>qÙ¾l=rþ"ð„76ÿñó<°Û~ïþž,ÿ«ÇþÉä}ßîדÏouoiqk˜g·ˆõî?ÛNûɪ)c)0!—þZŸJ©$F9Œ~†£¯·¼ ÿ$ÿßö ·ÿÑkZ÷ù¶óEŸ/xÆúæ|àëOhO‰„²™ “\3Óò\W_U-ma±ƒÊµ·Š(‡ü³Œb­ÑEQEÄxÞ·á{Ï´yQǨ‰õß·ÿ‰®ÞŠ*µÄÑ[[M,ßê£5›§éþmÐÕ®âob<õ‚?î½cüKŠ<s,¿òÏŸý—ÿf®Â:}QEÄÝÿÉXÓ¿ëÎOýš»j(¢Šåv}»âVz7Jüžy?ÂꨢŠ(¢Š(¢Š(¢Š(®"È‹ú¼#ýV¥¥CvßÚ?ýmvôQEQEJöd‹Ì*L±ŒÆcûãé\^¡¥ÌèéÙ–)[ÊÇð¶ßîK·ï'GôjÈŠÞoõ¶—?ºù¾Í/þ;åŒg,¿Ã¹x‰¼1gÇö„_è¿ó×þyÿ½þçÝÿï¬îÜÜí”Ú=Çü{Ougÿ-íÿöeþä‹Ü~#åÎ9Ïø|éWêØ™´ù_QÏ*Oâ‰×ø»ùq\µ}½àOù'þÿ°e¿þ‹Zè(¢Š(¢Š(¢Šâþ!'üKô{®öÚ½´¿­v•!¸—û>4dó4±ÿË4ÿÿתR_ê6-ö Ažkøóº ò÷ÿºWïzïÅ=<3Û|ɮ纶?¼’Öo™oùéÿØôü«¢®gƶÿið­øË—º?íVŽƒ3Üè|ÒMæÉ-¬R1Ô•ëZ´QEW«É2|PÐ_ê|™Ÿ÷ÄŸüMvôQL§×+¡7™ã7§Ù#ÿÈ[¿öjꨢ©_ÙË{nbŠîâПùkÝßøð5çþf¥§Ic+ëzËû?÷¾_ÍÍþÅI¬käž7þƳÖͤr_Ãòí£“b5´’«GO×?á&ÑþϺ¦«u¤ßl¿²¶ƒí0wåÛ÷{’µQ}oÄF×H‡Oñ…Ý­õÿÙaÕ–Ò«vÛ$wxÙÿÖÝèöš­¬SS[òzkäÿìÆ´nD·˜ÃÌ q^q£xóQÔ<q5ÕºÅâ(´§¿·Átr$OÇ‚½¶*힣âmYÔ Óµ» [h­˜ 4ÿ;>d[ÿç¢ÕHÿÒåÿ–ÿÏÊ}åÿãî7R2­ó ??âK¶XÏ8¹}¢×ÉœòË?ø÷Hä}̰dÝâW6S[­¯µ|Çà?£ŸœiÖùÿ¿k]QEQEQ\_Äsåøb :âî¹Éù«Vâ&Ö/æˆ\O ¥·É}†IÁSþí^Óì ¹‰®fº‘Ïï%”òÈ­(®KâD"çáö°h<Ïûçæþ•sÁ²ËqàYÖ¶ŸïŠèh¢Š(®3]óá`èW¯þÓž»:(®SÅÑ VÂãKa7”-ZâãÊÿgî'âÙ?ð èíæómá—ûâ¹ Èñã/úûµÿÒh믢Š+Î/¼%­ÜAs l±ñ$zŒ2¬Ü¤&ïø߬}gÀ~+:ÅÅΩÏvÞu­ÄWÎÍòG:2îTÿm†µ´]+Æúe´Ò­Ï›4rçÈ¿Ô Êܯ÷wù`ÅŽÝ}ëÄ^ñ«os«Å¦ØÅw-Õ´¿Ù–wež^íîÒü¿¼mÛr¸ù}Mu^ ´ÔtÉ®meðÉÒìäýáŸûdÞåÿà\Ší%x£€™1å×aáÔþhúeË}—Pµ´Å½Ô7”~ïðýàW똷𮯠’jÖ®öUœ$éúšAûØ‘‘÷~ñwgåÅjEà»ëíGXºû4öI{¢G¢KuæýšçýîyýÔGuwžÓåÒ|/¤i÷$­­!‚O÷•+nŠ(®#ÅçÉñ¿¥ô¿¸þú«·¢Š(¢Š(¢ŠËÐW5¨xV)ú/îâÿ–xûÖßî³þÏnÞ•‡yiy7vàÝEûÌÄ~_úèö®:©Ú¸»:k[{‹Ing—÷ßèòÓýèÿÚõÛÐŽœ4uå+Ómíõk™tBeÒ¥ÿHP1°ßîØÿgšú¿Áqìð.‚ždo>>éýÚô®†Š(¢Š(¢Š(¯>øÁq-¯ÃÛ›¨ºÅ(ÿÇ·'þÍ]–•gŸ¤[ÚEÒ8°*ýQX^+·ŠçÁú¼RÝ ÿ¾ Eà'þ]ìŸê>É—]QEÂø¶+±â"îõ>u¿þŽù¿ñÇjî«“¼Õ¦ÓõiõYÚQ¥Aþ‰ íž¾oý÷ûºC{­ë5µ´Úd–„H#Ÿþ^[²»·¯û_îšÔÒ­$ûÓÝAåÞ^~òqõèŸðÀ©tCÝwy†!åþ+òŸäkÃ?ò8øËþÂÿúMuôW'ã{Û»}Ú;Ÿ³ÝB 9'þ(ÒI6¶ßö½+Å>ÓtÏê÷zc^ÙÝÛXO'›ow&ùÏ–ßë?¿UÏî¯ÝݯDðŠiðéV™¢ÞiPÏ‘sŒþFºJ+…ñÜÑÁ¯x*W8‰ucÏý±’»}ôú(¢Š(¢Š(¢¨ÞÚ}²gËš>c“Ñ«×t/³~÷þXÉÿ,ÿ¹þÏ?ÃýßMÅO òù.½§¤}«OÓ~× ž]ÌóÚÏû«µÞÝþÏ?÷Þнó‘Goàí+iÄ–0„|ã+°cŠÛ§ÑEQEQEp¿`†ãᆰ%?»ýÉãþº¥iÚx·N0yw^}©>Ñ7ý;VÝ–¡g|»ína˜zÆjåV‹îe±ðޱuk›4vr?à&³>Ü Ÿ†ÚYû L}8®ÆŠ(¢Šâxõo5Î’"8DI^=ŸÇ(þaA¬‹ÍøGíïõ?›½:;_"ÂSj¸|~J;måþÿµPµ¼ðÄvÐi>%ñ¬7±Y£ý‹ýD9ûýßî÷l{Véð¶‡/‡®/ãÔçŽ#uq«[jüoæ|Í·ýŸ¯Z©«xûCJ·—Zñåá‚Yc–ÒXá‚»ûÅþ™¾\ÿJÊ{Ï Þ(xûÄw"/ô˜çXÿÕmFù·¬û»ªÔ>’&´Öõ½nîÏQÛäm¤‘BOUh™£Oš¶í4m+A×EÞ§âkÛ»»kI$‡ûJåÙáù|Çû£ýŸ™©×þ ñ‘wý§ov-‹Zþîoùø_/c½\üºƒ´»û#9¸Õ/t‹_숴ãžeù|Ïõ{~öÖë÷Enh:‡5-NÛÄ]½Å„¶Ÿ¹’Ï@óq,_ÞaÇûÕ6£ðûN»ñÖ­/ïô˦ çý‚o/Î-üG¯?εt=}!n<írÿRŽCÇÛJ~ïþùU­ú+Îþ$ÆeÔ<%p‰%“VàzþêO¥tÚA»Í$Æ'/þ«ûÛŽïóýzoQEQEQEVf³£Zk–Òéxê§û¦¼›UÒ¥7}×ú-ßúÈ¥þ;ø¿à-òîömÝ«Õ|;l–^ÒíT>È-"ˆoiùTW±â¼Ãã•ÇÙgðô¦ëì¿ññÏ‘æÿÏ?óÔW1£x»ÆQ®4_hz¬rÿª·º›»¶]­ÿêãøâíÇÍñ„®%>¶‘~ïþúVzÖѾ6øKS]ÜK¦KÜ]ð®ãKÖ´ÍvßÎÒõ.¡õëRŠ(¢Š*µÅ¼7–ƘD±IÖ9+—¸øqáyIû-£iÒúØLÐÿã£åý+/Søa Úƒ§ëW6sGÿ-ÎñݵNãôÃo.ŸâX5_/ýlWÉßÿ¡UÛ/xÒÚãþ&Þ¸òéÜ¥Çþ<›•iÙx×íDÿĸâ>ß?›ÿ|lþ´j¾*Ñ.|?¨E-ÊÄ~É'îåÿqªŸÁÙ<φ>góHsÿm»Ú(¢Š+‘ñý†Xn<›Àdû’=?_¶í4›[X-Ç“›n$ÇvûíÿïZtQ\£ëöŸ¡ÑÏšo/­ ÎÞ?vr?ô&¨ô(¾ÍñÅ#þzÅg7þ;"ÿì•×ÑEgë)¿EÔ=í¤øé¯’Y×ÀöþÿIJÏûv ç­ºEæ§þFmŸð ì|7}®Åý½‹¢Xê‡V¸“ÍŸPòÖm“îùmýÿZë5 /n|¨ûQktlæó Š3#ä–×·vZ…ü7¨~÷ýMî›uÿ=mä·“zÀ íÿwmu6~$¿½øoöY|;ªEjt<}¾_+Ë#ìÿïîçéU4µÿ…‚ßÙþ)ÛaåÚ ióÓtxûNÿùiáÛ÷{óYÖoÿ ‡Žt™u~"¶Š :î<|¯v‰$²Cÿ}ª7ý³­ˆæ+ˆ>6£ý©~ÙåÿÏ:›¿à})Ú¤VcÇÚÀ›TŸLÔ|ëY4ûßùd’4;<·þ›gÝlgµu¾×E÷Ÿg¨%¥¶­ÏÙæ?É;…ߺ>íòsê? ꨢŠóO‰—>Wˆ¼ý=ÜIÿ|ÃÿÙWE¢éòÅma-®<‰"çþ™»ü‡·Óž¦Š(¢Š(¢Š)”ú+’ñž‡5õÛ¬úm· ÿ®;~#½nhÒÐìžmãû½>è®â}—ÛÛIÿHò|£$Ÿúùôõôo5¼ðͤ—9–Û›Ÿõ‘KþÏù~ÿÂÃ#çòò¬ü!wg«\¿‡õ)ì&¶Ûþªëînû»Û»»~Ä¢¬jÞ.-¡ßéz•µŸˆïmøŸT’Ë‹\ü¿}~ÿÍÑŽ9íÇ+ðvï]‡PžêÂÜÍC%¹¸º;m­“*û™ý¹ùÚíZ^2ñ–«©ëû?ÆÂÔÛ~ïʲ‚Xa“þ¹·~X­;/|DÓ<ƒi¨é:¤S«ƒQºA+ÿ»Ÿ.µãøÇ«i@ø*úÂÖæ"LªÿìÕÔèÿ|%­Þ}– CÊ›°•1šêíõ]>õŒv·pM' j¿EQEVâÊÖí|»˜"“ØŠÁÖ¼ áýsO‚ÎþЛX¤ó~sŸÎ¶´í6ËHÓá±°·[kh†#Š>‚¯QEQ\_£il,¼¿õ¾wúòJìPï§ÑEeÏ£Ú\ëV:¬£ý.Ö9#‹þßʱ¤“ìÿ`¯´–ð(eÿíÕÖÑEFè%SœÖkø{H“®ÿCûOùw?òÏýÚǸøoá;›™®¦Òó,½HžUþM[66¦éMµµ+fC(îo½×ïU-GÁú&©§ØX\Úƒœc6¿ôÏg T-þø2Úq,:¸–>à¿øÖÅχ´‹Û;[k›$†È¡·ªÙ÷vÔ7>Я-¯`¹Óà’Ù~Ñry?½PZø'ÃvÚuÕ„zTáþ .dú±æ¬iÞÐôÍ>âÂ×N„Ú\óp%ýïþþì<;¤é°Â–:u·‘Ÿ/Ê„ ™ë[QExïŒ5n~+ÛÛK‘ie§ù>aÙ´K1Ýü_{åUÿëýÖô}9­­ÿÒ®¼ß3ý_ùÿ>üÖÝQEQEQES 6ÕÃ|A>Zéçþºì¿äsŸL}åâc³š[ímBçû?Hÿž²üòÝÿ³ }ý›ø¸Âíò1G«\êæ‡öV…þ¾çÍÿ–ßï7÷¾÷}ª7dýêèíô+MON3j€hÞí,%Æ£·û‹ü1÷ÜzõàmÛÍx‹Æ~!0xsB¶V‹h?ÕùküíýzèUè_bÒntÍj;rö¾tc3ŒùŸ'Þük±×tOé–3êz…¬Çþ¶âß|?ú/­q }áå>Už·«ibçýF¥©Y…¨ùx‹þºÄEoÙkZv£ÿwðMþé­+ñÏ™`tAŒiy¹ÿ¯i>I.þ]•QEQEQEQEekÚÅž¤\j—óˆ €dŸ_öð[ÍvãPÕf¶óo52oõߺE_ö¿Ø_ß<çîû_†-ÿâMks'SÊ?¹ôÿ?¥t4QEQEQEQEp¾;¾ÓtÙ¬.oí./e`¶·Æ!Ýòÿ¬oý—’Ý•«Ë5›yµû{Ä×3Ë »¶²‹ý¯áT½ ³wl«·Wè–ŸÚ¾4‚ãÏDþ/öZvÿ€ýÏè /­êÞ#ø‡ªA‚òé®ú$ ò¯—üMýÜgö{ó],¿üc‘– +|Ÿ~ϧÝO»ÿ³Wcðžy´FÔlüFNŸªÝLž]µÄ~R«ÿ,û7ç]Ÿü3?м2lm.71L—ùŸqÙÝjù³Å>"Ôešø™_Eö˜|Ù~Ðd|ßÀÿÂëýÖÇJïþ øòá¯Ç†®@6l?ѾõrüÇhÿeºû®+ÚuÝ=bÀÂqæv5åž"Ñlÿ±µ*Û÷ßô×þ^6ÿ÷·W;ee5¯ïnõ?ì¯+ý{ÚÏ÷>OîüßÜûè˜jóÄÞ.°ýÌÚœB/ùuºƒÚÿ»·¯~>]¿ð*ÄÄZt¿h»—Â6½ÿ[ý‘zö²Äß7ßÚÇë÷qDž/Ó¾Ñow§®è³E»ý|Kÿ/–çõ­}+Çþ-¶˜‹_h:¬>—áàÿÇ™WÿB®—Nø©â˜­¾ÕªøKγÿŸ­:O6?ûé7å]׃|]iã=!µKy¡ 7–c—¨ã?ÈÖ†³â-'ÃðÃ6«¬RIåƒ)êÕkOÔ¬µ;oµX\Ás é$2ozŠ(¢Š(¬i<;¥I¨}¯ì¾UÖ?ÖEòÒ±o~é:Çö¬YŠóþ¹Çÿ¡mßÿU8¼'®i·7ÙúÝÇØäé¹ÿWÿ}«ÿè_…Iößhâî½ø=OØŸwþCfÿÐiúŠáŠÜZëzqÜG²@?û,VW…¼Gy¡\¶ª[_ÝéÖûE¦¬mÏÉð¤þŒ:oèkÓh¢Š(¢Š(¢Š(¢¹_xïÃþ·ÿ‰¦ <üd[Ń+ÿÀkÀµßk_µ¸¿ÒE–¾eŸÞa·øÛo?ð/ÀW¤xkÂ’MþˆLðÃü|Ëû¿ßsøz÷Uü[<ë”ú(¢Š(¢Š(¢Š(¢¼×âMÄQ\éCmö­^_;ìqEþ³<ÀU}[¯¡šâu]_Hðm¹º»¹û^¯ÿ,$‹þYÿy`ÿÙ¦#”qµxíÃ:×Å=\ÜÉ8¶Ó£”y¯ÎÈ—ÛûÎ~¹õ¯¤´/ i~¶ØZ„“¼§ïóè8«z†£Ž"–î_õ0wÿëzå|aá}CÄ>½ûV Âê0.-`„~å>aîþ™?€­ÿ¶Úk7÷3yVw¶l„ÿ<|ÿ:ò{Fðe·„´5k™åÕ¢óc¶0|Ÿí¤=6ck~?6Ó\¯ÁßËâAªm––é2~_3øý_ì×Ôõ‡®èÖzžŸ8šÜJqÓü÷¯7ñ^‹ö]:âïOýïîüÕ÷··üúùu·sqqŸ&Ú_3ìÿòÒDe]ë½»Þ„tæ™rñKqþ‰sÿ-|Ÿøß»þ÷¦îþMbÞǨi¿½–æ ¯3þZõÿ'æüzv­ß xQñ ”÷S‘¦iK$—º™?»Ø¸Ý·ûÝý«§ñ¿aáïaéVóØi<¨¼ïô›ßúlÿÝOöxÎ9Çݦ|2—RƒÁ„2\ÿehžoyªÏ»åCþÓ{ßæªWž#øi{ö‹Y|#{ ÿUum™¿ÞØÍ÷½zûÓ-¼?áqpeð×5]ïþx^[IŸûî?Jèlo~+Yß}—Eñ“â(r¿j‚Oý kÖ¢|^ñFˆ<¯ø&øùëo¹õÝŸûêºâï†uÀyšÞ_B7ÿèoÒºÝ?Ä:F¦ ÙêL_¢ƒóß=k^Š(®cT¾»›XƒEÓ‡•;Åö‰îOü²‹~ß—ý¶ü¸ïT´û=GMñtjzÕíù¹µýÎBGº}ï‘G£ŽµÚTR¼q2N=ë•Ô|uá yþÁuªYÜÌå„_¿ÿ¾¶çõ¬›é×ÍökSc¥é¢X¼ù¤ÿY.×ݵQ~ïO¼Þ½)bðö…ãMWÕ.­>×j|›{i ’,lS¿oOï~•qü%®é™>ñUÄqùsÕÚâ?ð>$_ûèÓ¤×Õçj‚ëwÎ7ÿß_ßçýß×§¥øs–vº}¿•mþ™ÿ=~Oý—ù·ÎWg­[éFX4»<ÛiÑßÉÿ-güô&ïÚºZ(¢Š(¢Š(¢Š(¢Šò¯Œ~(ÿ„oJ²)–êçÍŽ!Œ /ßîW§É÷[ø¸â¾mÕ§¼¾»7w÷_hº—¿ùã«ê/èÚNqsá«kýŸ.ŸmûߟÍwÞ®ßøâWDú7ö<"çKº¾Žx›ý Îóc“¿ñîaÿ"­hÐfÆ ë­²^\D<Ù~¼íÿtUëéŶŸq7üócø9#ð.€&ÿZ4øAÿ¾+Ǿ³Õôë‹É ÀcÅìCïl_ùjŸôÑ9ú®åôª~¿Ð¼£Xi1Ç™¿ÔåžÿùèÿÝFþéøs]ݾ©esaöØ. ’×ó„ƒgçTï'VßiÓçó|¹?å“ÿßUÊê1Íu¨yQ\ù^l¿½ÿ?ðW™I6ÍÆ¡§þêoùë:~çiþçû>¿ïV«¬Ù˧gé6ße‡ýdlÑú~óæÏ÷·}ï—ó®‡Âóm®|Aã oìý _õVD~úçû¿íìÍôª^'ø•æÃöK[h­¡µ—šwü±‹oüõþû³÷WëYÞðxÔ­ÏŒ¼su4Zt‡0@9žù¿Ø_îÿž5'¼xu9mí¢ÿE6Ü[ZEÿö{æÿnM¥Ù^ÞµÎørHdÓõ nü¬I/ï7Gº¯}‹MþÏÿ‰}Ìÿl—þY©_ï¶Úe—ö¨ò´­åûLß꼟3æû¿ï}ß~•ÜÙx¿Äv·öÜÏö8ÿwþ„ÿ7ýñs»Æ®Üx·GÖ¦¡¢iW_óÖ[ý?Éoûø¹ÿ?¬pÅàÛÑn-ôíwKÿ–y°¹K¨?ñòÜÀjÕ•·ö¸‹Ã_-åŸþ|¯÷Ãÿ³mÝÿ­Û}gâN‹§Î5 {ùGIàòn?ñÄhßô«vÒÞ%‡_¶]Öe–Û?÷ùÿãõÓè¾.ÒõÖò­o7ÓÿñôÜŸøõdÿhYÍãËB=fÞ;;k?²\¯Ýýâ»7Þöù½iSYŽëâ„Åfû'Ù$·‹Ì‹'vßÿ$\WsYw6›}7™ui ÉÇxó?CV­,­,—˵·ŠèƒjŠ(¢Š*»ÛC ýì—Ë¢ ½²Šú*^•ÆêÿûBÔAu?a{þ®/îýÞ»k“æâ]BÞytï7þZÿ¬ùzl_áËtôÈkZ Ÿüzhšl^~òâçìó¾è·}ÈŸø#¯ËÃ&³-ü7=†¯Ÿá¿µË/îm¢?êùöOVß‚[¥h‡ú¾§¨[éÿòùúßÜÿǶߺžbþíéó㢺½;ÂP}¦â[[o·Ï1ÃöÈ-|µÿ€/Oþ(³Ÿ3¾ðׇåý*þÜEÿ<àÿÙŸúÄüÝ;(¢Š(¢Š(¢Š(¢Š+’ñ¦á=fÂøI͸…N!–i¼¬ôo¼ÂïàŸ…õòeð÷‰'Š_ùåpŸüK:ì´k-_ÃzÆŸ.©§\\Åm¥ <ÞÙþÿî¾wlûÿøé®ºËÄ:N±‘XêpK>?Õ}×ÿ¾櫚7ü€4ÿúõÿAÄx÷Ä©%΋¥¥ËÓRò:ÛAÿ-?àL¹xëRkTúéÐ-¼[=¬b"³Ì‹>^6î]­üY¬»]ø[ÀZ7QÅ4ÐÛ}¦oßËýÏ—øºôåJêô‘c៛YŠ™¬bíDûÇÙü?^Š¿…y•Ý”ÂþãÎ0E¤IûÈ4ˆ7ù0ïûßìõnp:ä/&²äŽÏ—úŽ“þ‹ ·pÛ_[Å?î剿ñßøÏ·3õž/ñ~›a£yÑ\þúæ_õ±~óîíÝÿÖÏå~*×a¿Ö.&´µ6ß~ðÅþ³û«ÿþ&®¿Ã¾Ò|+go¯x¦×ý.Oùh§ývÿïI»ÿÙ\óóW)㟈7zÝõÂEuæËœG媷_îÅþ×÷Ÿ¿n+à ´ðõ¤(ñè/)ñ/ÒÞsêëþ}Z°|mã‹û½HËÌ?jÿW ƒý]¼Üú·|qÅp6WQEqæËçÿÛ#ZV—Ã>¡/Ùÿw/ï!óßü+Z=jÎ[Ý~öoúzÿÙ»þ©£5ö¡§Ë·úd^g‘ålHßÿ­»-GR–ÞâÒ_ô_ÝÇÅÂ?þ=Ã}ïþ+ûÕ—§\ÙÚèßé~|PÜý?{þÎî½ø~+Séºv›þiŸûßõRÅþŒÒÿÀ¸ù>çÍÉ®‡Nð…åý¿•§êSËúÏßÁÑ'ñ|ßÅüV÷ÅuZ?†|]¡¤Ÿô¸cÿ—{;÷åÿ€>c÷ûÙ÷·{¯Åö_øÚߨÃÿ<µ=3í1ÿßPå:]BðåÞ¯¯ik¢G{l?×é“`ÀÑqúÕïÙCuá Ko•}æy¾Ví³õ~gÍýõPßð*ƒWÓ¢Ño!×á¶šê ßkˆ¾[þ»ÿ¾£wüÎ=+Ä^0ñ>«Ï%ž‹=Ö“ÿ=å¶óîÿ DÌÛ~©Ut¯Ú=ÕÿØõ o²ÓÇû¿ü‰±¿Jí¬üoáËÕýÖ§_õñûŸý¿O¢Š(¢Š(¢ŠeS“KÓ¥ŸÍ–Ú/­S¸Ò7N×6×)¤ãw_-?‹gû^ô—:A{(¬-gû5¦?xåý¿Ç×ó­+(tëa°ÄCµ[¢Š(¢Š(¢Š(¢Š(¢Š§}§ZjVæÖî,>†¹iþøfFó-mg°—ÖÒfOþµ@ϪÞ\˽´:<~_ ¾fï¼ÜòyäWy®ÿ¤øÃXŠõÖÚ|Wn_bIóÇÝïóËïòתêÙîm¿å¬pÅç{ð»ý¶ÿ½ßøw9/j÷+ÅœÍûïí_üq}_ï? üO ÈiVº¾³«Ák¡Á5ÅØÌ©]±þõì6zF“ð³Oqö}CÅÆ/3ÍŸþ=ôýßÅþ~föæz§ˆ5jÿeŒ\jsÜgþZÜz /Ý_öz‰á+áΟöÍVÚ SžOÚ"°ÿ–vKýù?Ç×…õ®3Åþ6»Õæ1Grei#Ä÷Û>ÿû ýØý¿úå²ü)á}KÇïÙ­`2wž^Ãê{œWÒ øUáÿ ÙCæ[A}¨õ—3®îØî×G¨xWÃÚ´>]ö‹c0÷…+ȼsà ÇG¸Ô<7¦êÒý˜˼ۭÿñì³s×myî•q7ÚmîáýìÑEÿ,®¾÷è»…héÚ­åö¨Ú}›ýoï%–/Ÿd_Åóß½Mm•¨ÛÝý›ýûÉÿEþ$þ»¼~÷ÞþGo£éÖzn¹=¼Ñj^WÞÿ[û¿ðùÏZôÍ:ßìÖÞ_Ùñÿ|ìµ¥Eq­®§­M§iz}¼W„yz†¤#OÜFß6Ïö—·`Û½+°ýÍ­¿üòŠ:àá¾ÒZñ´ëVæêK¼ßoÆ×“z£ìô]£œô­ G^¶Ä·ú$üEÌúf¡OûæmŸÊ¹MC[–ý­ªùÃýeƹ¦Äò?û*}üóótî3^âVÏWÖ&—IÑ¢ÑíDñíví_IxsÄÑi¼8÷ 5Þ§sa·³ˆîšàíÿ?1àgšÕ_øŽÖßÍÔ<#9ÿ°uìw£lý+É5OŠmµi®#Ñ.-m?å­ÆžßÏ­tZ7Ç}:Sz®›å4ífþ/ö–M¿Ì×sgñÃ7ÏåA©f_C ÿè_wõ­Û}[M¿˜Åm¨A,©Õc”Ñ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬=/ÈþßÖ|¯õ¾l~oýû¦êÐõy¼ëý.Êi¿ç·–<ßûï­`Üø [_Þè:Ýö'¿ïô.Î:piÉ'Š,®E†«áËjÏù’ÂWqûßÀÿ{üû‘•oqàëŸ B;ú÷•û¿´CŽ6ÿuþL»Öµ¯t]vKmfk[› VmJ(cûD¹oÝÿ±ó+}ïï àüJ’ÛϧZßÛOa)»›¯þ8¼ãÊ~ï}»<ÛTÐoõÏß[XÛçÌ>vá÷<¿ïü¼mú~¯C·Ôtï…EƧÜgRºâæð Þ^ßýŸæá:/ñd×Dº×5È´½2ÛÍ2Kæ`úÿ’¿ó?•wóÞi,ÇOj^1¹‹÷÷Gý]§°ÿ<ãŸJó=oÄ2ëw÷ÅçæëC!ß$õôö­o ø^ß5¾Ágn|ËÛ¡Ò0ßq#Zú›Âú>¢h‘XhÂ/²Æ2H9.¼Õ¶î"S$œb²§¶þÛÿ]ÿ îñϯû>ÝûúTº¥˜ºÐn-aÆLXÿe¯˜c¶ÿ‰†±öO"X~×åÁPÿ÷Ÿ{Ûn9>µ—¦dÔ>Ëö“Ï—7•ÿ<¿‹äþêüÍÓÑiÑÍ©Ü\Ãumcçy¾d¿ýôjŸ¯+ßÓë^eâ(b··ŠoõPÿä/÷=]ׇ®ä···¶›2ù⇧ûÝuUÇý»QñV¥qi§\ÖO&kØ¿ÖÝH>òEýÅ õÏÖ¤Iâð®«Ëä\\Í¿hã/$ûð©ÿÄÿÀk–Ž/iúúÞë:”÷×—7)¶ÞLW–ûÓgÝofþöÐHÍhë^4Ô¦X-<7¦Ãuw&|ßµ6>Ï'ï?vÉ÷·nLnû½;¡®k¢iÐÉã;‘}wÜèöIþ·ý¹}}ÿ€µ^S©ø›Qñ†µæÝ~öÎÛþ]à‡ýOý2‹ovþ!ÛîŠçí|;}â½^ Þ &qŸîyIþÞý^µîâ] á‡íæÕ.P× §’¿óÒDOáOîD?úç&¸{ÚVYfû~‰o,&NÎÉ…þïC]Þ‰ñj-N^}ƒ -‹[ئ#÷Íh^ê>Ö5²kZu¿Û$ÿŸý?ùn?ñꦟ¼u ºÓíç‡$³½ñ5–> ê:eÇÚôO\ ¯]BÕ'ÿÇ«2/ |Yðô³Mkw¨§ Žýÿô>ZŽOˆ¿tdÖ¼9{å×–õð4"µôߎZmÏ6Ð ˆ ¼†ÿȘ_ü~»X¼s¤cý,ÜXúx‡ÿgMÉúÖõ®£g|?Ñna›þ¹¾jåQEQEQEQEQEQEÊ}rÚ%ä“x«ÄÖßóÊxqÿ~“üôü}:šŽY#Œ~ðŠÎË“\óbó-?Ö÷¿ÞþŸY½Ó­/àò® ­q—-b¸7z¡>•6?å‰ù?Ïáÿ²â+ˆüq¥™âºµ°ñ&”zÇþ®}¿î·ÊϧÍå(ñþ“áë{Áš#ésHÿéÓÌ»%ÿ®\«Ï4-+Qñoˆ Óí6‹¹~ç;+ÔîüM¡|:Ñÿáð¼Ëý¥p™½Ö¼œÿß¿ï{ú×Ýܛۃ7ü´ïÿÅTF(Ö29ùô¯¬ü£ZxNçûÔ¬Óíï<Ïùë'βý»êΕÍù¶”~î8ã—õqZ”ǯ%Ôa–úûý“såù_ÝùWòþC§h³_ÁûÛŸ*o'ýû»Þÿ=ë¦ðôr˜míVâÜ nÒŸ{úϽü+·æÇ=+«“Qûå}§íS«ý×ú¿÷~áÿ€ã§êÚ^»©M§ÛÝ]XAgiÿ-1»äþU[ÄÞ%óíàÑtK¯ø›êgìöÒÌ_óÒ_øn?Zét.×DÑíôûQˆ-£òÇÒ Õôèo Þ ÄWCý\¶Ï²OÏÓë^g£^ùz‡‰¬"Ôç×ußµÇ Ÿ›÷¢òÕsàˆI×ýßïT~"ñU‡ƒ/¯îmD§Œowq0¹¶QÒ?ð_¼ÝÍy{ÜêZ¶£q¨êdÉ<Ÿè¢iäé»ûÿð Ë·Æßøφ´-GÅ:¿Ø4»|A¹º»?òéýßœ}ù~gÿ¦»íÅ:?ÂÍ3ûGëW!d¹–CÿȽýÔôôãúíί¬_\ê:±û|ò×?Ýÿw~ß»þÊ~ua/—qpÜÏ 2þî9?ç§ûüãëþõwZ6•´`]?ÃFþ,ââìü‹ÿlŸio|Žzfà1µ¼ÚWö¶•ÿ–º§—ÿ}/ï³õ«¿ð‚ê"êâêÓS·–)åů’ÿ÷úܧꦉÅÚjæKkâ=tû¨ï?òÊúš±oã«;heÕ[ÉÏíÚ|ö¯Î•±eâØï²b·ó¢í-”ésÿ ôüj¾°|ªÉåë'I–aû±öÍ™÷Õa]üð^¨ úx¸°ó;Ø\ᨪ7 u(Ô_™%ý_ö…”rŸûùÃÕkm;⦉o9ãQ?Ãäjû,èßÌU£ñÄúoü„|3äÿÏ[‹)"ÿÇ£ó?­ Œþ¹ž i ñK/N7ÿ³ãµÔéž3ðέƟ­ÙL}ÃúÖí>Š(¢Š(¢Š(¢Š(¢Š(¢«Ü^Cl?xqQÙÉæ™ÇŸæì“Jæ´(ü¯ø¤ÿÏO²ÿè¿óÞ»κÀò ·óHûŸßÿ>µ˜'?ðŸÛŸê¤Ò¤—ÿ"¯ÿ]%Åx£V»sý•§~èÿËY¿öEÿ>Ãø™>cñF‡v×#ìÓß-^Ãg¬Ã¥jÚkèŸÙÿa¹óÓåßò7úß¹Õ[¿ñW ÄñÊ<Èù÷¬¯´ÅŒM©ÿ[-‡˜ŸD“æÿÑ‹[UÆ|DñU§…|3q4§W4pS\_†~øYðV“.±§mGÉækYù—û¬{V~±ð?UÁ:V©Üý]µä~VÏûãÿ­\køÇ>¸·šM:&#æù¶¨“sÿþ­7Ã2M¬[ÛÃiÿ=¡ÿM–×÷vÛ~œ»üÛB/_–¶|e>¥¥ißÙëwÞTR¨·³yÞwð¬ß{jŸEQü9­Úl𦱍x–ìù¢(¾ÏÎïó7/÷½¶ÿßUëzç‰tí ©‹Jf—Ɇ8ÿå£úúë#OñN£®4ö¶šq°ò³çÞOÌvÿìöÝ/¨û£®ãÒ¼Äß-,>ÑáÏAå[Ï+}ªþ/õ÷Oü[ÿgü«ˆ²ì¢Þ+¯°ÿªó%Š_ùiþ÷ÿõí÷»/‡¾¼ñ—útÖßÙö­ÔOß›þ¹îþ ~~Ü÷­¯|H³ðn…¼-â Kp£>_û¿ÞoV漤Ü}–íYn¼ÝFY¼Ì—3ÿ_›ñ­è:ïŒæ¹¶ÓôØ%˜Ë_‘b‡ñþlVå÷Â[\¶Ñ!º‡Íó¤Š+”3üý)öZ¶±áOôI­¿²¼Ù¿ãÞ[Y>Oý—oç^éá«íGRµ‚ðÝ[ÝC'9Žwÿâ?Jì(¢±/<+ ê/ç^hö2Íÿ= #ýõÖ¨Þx2 àò­u;ûhÀÇ’eûD'þ.á\6©á _H›6—:L0ÿÓ­«ÙyŸïùMü€þ{y¸5ŸèyÔ%¹Õ¥†_ÞÇÒ\Åü?v9~ßFþx5§§|i–6ëR°ºÇü²’ÙíßþúÜßú tößôx¥‚jÖ}:i¢óPÞ&ßÑ¿ñÚÝŠoøÎÛÍú]øÿ¦ñ!þu‹¨|ðmñóm­n4ù½mfÿÙ[p¬™þøŸM·+áïr?Õ‹„xqÿ‰¿öZ­ý£ñGB_²Í¦ß]y_òõmåݤ¿ðÚÿøõ>/Œ÷–WeÖ´È-fÿ§¯6ÓÿdqÿWOiñKH–6k[Ñûó[/Ú¢ð(·*èôèz÷:^©ewÿ\¦ÿïžµ·EQEQEQEQY7ø ²Üy1ùmÞÏJ¯¥iþ]¿îõ2/3¬i·îöþyÿõæ–Ÿµ~#ë=åû¯ó’µ§”YÍq4¿º‡åýéqþ}«óTÆ¢t¯´ý”ÇûÏ7þþ÷Ê3ýG©¬9ü¯ˆ:|¿iûL?ð·ú¯™>YSîü¿áü«¾·›íÐËýñš±Uá‚É’!þ²¼“X×4ßüTÕõ›Ûlù‘C’ž»6¯ú¿ö¾V,¿Ä1ކ³uÿˆwž:Õgð¿„§[M?¥Þ­/téòý~èîÞÕë’+ßèòŽb–ÂËË©u èú˜ÿKÓ`—ë\v¡ðלiZœñEÿ<§ýïþ‡Ÿîû~˜lk‹oxl\EþºÈްÿñ¹w'á»ÿf5WJñ™cp"û/ö,×<ŒÚoÿ€|Ñ?åéӠ鯱vº„„7:„¶ñcóÿÑ[d»ïÈßu?»NñŽåÒôþtËÛÎÌÞ ‰Ÿú껓orÙöž8û‹xe°·ÖõÆÛùóØguf,vv¿h—O¹¾¶—ÊÿW<ÿñ}þnÜt­;?x·Hÿñ;¸µ‹þYˆmÿ®wùW[gñÓÄZYß8‡T´þëíùRßIÇþ;]~ûAiŸ·è×ÖÒÿÓ¹Y³ÿ Öì|«Ûᄌùç{oÿ를ðoýwI:Ôºl±\Ž&Œ=³ÿß<|ß…yŽôø|% ¼Z]Õð‡Ì_Ý]ª<ÖßÇòÉÖ&ÿet¯{øw¬¾¿à #P”ïœÃåËþúü««¢¹Ûù—×~•k=íÜC÷‡îAuäþ÷°É§5ˆîeÖíí¿Ùµ²ÿÙœ·òª³è#y¿uâ눢ôû¹ÿÙj¼°øûLÿ[­#Y‡®ËˆZÚ_¦åb¿øíZÑS+~mü=ûç^mðîÞÒçHÖ>ÖÂ!æÃûð|·ßü¾½½xëôgÃù|χú óüÌYÇï]¿/ô®¦ŠepÞ8Ò,%¸ðü³CŸøš`ã¾è¤úŸÈÒÔ>ZyÓÏ¥j7J9!ÿŸoóêw ÛˆÁ'ßÿ¶Gåöÿ*µ—©á»{óu5¨Òõsþ¯ÈÿCŸfïÛÿ{¦8ük«·ñ”ÖÜ}¶ÏTf#Ÿ±ÌàG÷oÿŽ÷ãŠÍþØžÚâ/DÑkwßë.n¿uÓ wû»?ÛçñfZòý//ÚsöKË©ÿçŸï¥÷ôùÿ©5­~ëìþoúŸ7Îÿ¾Ýù“ÛŒåyçj§‹Os{¬^Â%>l¼B•ô†¹&á *}W[ÄZd£ýB'þ>¦òÑ×þùù>èêy¯ñ7üCã9g¸Ô.ìqŸøöŒâ1XÖ-5ö¡oo¦iÆk¢q CçË»^÷á/éÞÒ£ñ/„_ê"”ïHEÇ!Çùë^mãï‰:¿‹õi¡‹u¶“oþ®Ø÷ÿjOö¿•r2L|ŒEqû¯ü‰+Ÿ—úW®|3ðÞ+Õÿá-ñ@YçýØÿËM¼sþÊþµô%Zòò L×3ˆ£ÍrRÔ|QäéçìÚLññ9êÜ®³NÓ­tÛQmj¸ŒvÍsþ”[\kÚ* G¦êýÉQfÿÙÚºÊãàÕuÝ_\Ô#ÓÆÚÏM›ìò˜]ÚwòÕÏF]˜ßþÕTÖ4ë­Jk˜µ]7ícΈþà·ü{¡VýßûeúŽ8ïÒªÂai¯ê³øKÖґöXÿÓá äCè½­w)¦‘¦ˆÀZÛEDz­y÷‹µëK[oµéZ”Ý˼¿<_ïè C<&[y§Œù?õÕþ¢ºÛw6+,F¦§×7âØ<è´‘é¨Ãÿ³{èiõÂx£G´ÔüQ§ùöÇ÷V·fõ§îŸþ¿NJóÁÛ~ëNºû›ûÅÿn?—ø?ïžß¦åÇ&»aöˆ¢óüŸõ“ýŸîíÿj >_ü{§ý¶¤¶Ô-$¸:|Ll9ÿ[òX|ßÅo&C6ïîlíÜü®Ô<5y©Ûo:Ý›öG·ƒÍÝe÷ÿ½÷•—æþéÓ«nÀŠßIø6MÕûZk,“ýE¼g÷vCûÍþÑÿ>µæÚî­«ëú¼×š­ÃKvzç¢ñ4h^Õm•Ïï™]'‚<3/м[c`nWÚ$1œ*ÿwýªúkº-¤~ÒßHÔ/í-üœˆüï0ø îý+¤Oí›þXKýûÿ¥¨ëðé¶þmàû(óD½á[>÷Gã\äV÷~2¾DùZÀ#éö©ÿô:ôŠåÛKÓþ=b»Ž)ãÿoøŸø¹bÍ–oË×| ªj׺MÅž¿í}6_³OþßÊ¥_ñÏ^õØQEVMç‡t«çóf¶_7þzw®GUð$ÞAžEÔ?óÊ_óþ~¬Í\ßöuç‡n<è¼ý*oúeþ¯ýÝŸq¿/§%suo]éž7Ðnõûo´›x¤Ûqeû¿‘ÙwnFÏM½Tݸëéš'‹ôO¶ÓQƒÊÇ´ñ¼3ÿãß{ð­m mmî!6â(c™¼þÅZ¸Ë·óMÇ•åÿË_ö}ëæÿŽ™>&°»Žâi"½ÓÇv}ÙïW“yÇӶϾœø9â®|ùŸlŠYã’8¹i{µÛüœw2^Ê'ÿD¶ýìŸøÿ÷½·óظ’_ùjsS×'㻘m´í<ËÿAý¶<ønoÌ&æÛþóüÿŸåZ5Íj±Çqâý")@1ù3qŸ÷}ÿÏó»¨Ûy÷pI²3[’{÷ÃmùÇüæ°5[y¿³ü™u¿7Ê?òßËó_æ^ŒŸüOáÒ¹»'Mº·¸û^™ö¨bÿQÿ}ÿþ×îûýâø6Úuçú­'Sû,?óÊã7 ÿ|·ï?‹ó_ï«ñ]NïÍ×ïî¤i’êCõù³ÿêªw–³[Ü8s Þ1óu¯§ü‹á_ m&ÛÈÕeµŽV“Rýלø^<ΟE¯#ñ¿„þ!j3Í­k6ù$ÿ–¶¥fXÇû;z-y¼Öó[ÍåKŽAØÓc“éߢ?ð²mæÿ–^LÑÿã•ô‡†bЭâŽ*(̈¦…m×%ñ )®|+q]û­M΃m%¯ú£Óó­j+˜ð¼ ßxŠÿ½Ö¨GýûŽ8¿š5t•ƒá[yGSÇåùûTßð?º?à)µà5/‰.E¶ƒ~LÏ ‚8ùä8þ›EÕ­u­* BÓÍòeû¾jl?+méõ¬xÇûÜÇknf˜˜?&?ï®?ýXë^c{s4¶þn·sVõõÿŽîSý?QŠóï\ùwþN³ö®ñyS/þ?³øÛ¾qüë&+É¢ÿK´ýÔßòÃþónÿõñYWpI%ýÇ–3ûÌW§xOá=ÍâÁ«ø£ZwËåZã÷×?ìÿ³Çøû×kqâoìÏ\ZÚé¶öºTB8¬mbÿ]»û¿ôÒFê8ùGÌs•Ï=q§Muqo.­mû˜¿yö_áyé£_®ß¼[?;6ß™þý¯óŸFÇ“kN²³º¸ÿK¹ò¬ÿÏù¾ïðí|ï¨IZæOYŸùŸZúŸà'áż’ÿ¬’êsÿפ×ã{xVÿAÔ&°û~.þËöcÿMýåÙÅ&•.…-åÌGR7W’ËÍ®ªÿ¼‡ý€þ}ëzÜ›i®Ñ„Q¸`ÙûÏåZ1Éæõª7z•}m4-móG'{ü#Z>¡¨]\Ü_ÚZÚI‹?úg»ÿŽýãÏ^µcÁ–:g„¬-n_3ç—1dw}ªvæ¹_莿­_jšÐ#ú,>u­˜û×2ªïßÿ²óùW!{o¨êz‡•·ü{y’\þ ûͼü»~æï½ÿÎÞKJÒmuKý>êCçxJÚêîâ9‹É’üyöü™õíò×H4MGá_Ž4ˆ¡v…}¨/—?ü´þîÝßî·Ýþ-¹ôŽ(ç2c?5QEUy­á¸½€Iõ®C[øw¢j÷V×ñ©µ»¶Ïqº>}Q¿¦¿Jâ|]à¯\ZfÁªÝùYõùé›}ßø ?€gxOTñf§˜u]KíWgþ]oå‡üïzÿ•b7oükhöðjÛO¥KדæÛ²Å—îóê¿8¯2øÃn§øjîÖæ˜§ƒnþg?'×òÏøÖw…>M}}e%ݨù?åØõ‘¿ÛÿgÛþ×vßNÑ~×¢jÚŒ7vÐy¶×~bÿߨÛÓóÛü¶«ú½Å¥µÇ“ÿm?ëŸ×ÿÿ9­ˆéõËø¾I¢µÓü¯úÛúÿÛüÿ:܊γåËI|ãW+“ÔíÌž>Ð$'ý\7Ëóý>Ý ¢8Ï›ö2_jÃé:‡Ÿ²þþ`‡Í”¯Ýçÿ¾Ï·ç\ÍíÌ×ZÇ•uçùQ¬ò¾o‘?å§û?†9ÿk^tvÚl¶öðÿªýóËùeü›åôÀÿ€ŸÞ|Ù{ÿ!{+þ{6?:ö|¼ÕÈÔüX&µµê–¹ÄÒ¿ýßçNÔ|i®xOÄ÷:$6ך¾¤~î n`ýô?»ûÿw»‘Œ ¹£|Kðàò<¯>Â臘ãžÿþ¯º¤ŸPмGu;kR!.<ÙÖ9|¯øa¿Søü»¨Þü ðæ¡d.­Mö–|¬â3ö„ÿ¾Xo¬_ü=Ö¼3â]P±0ê–ÚlÏ%רß÷ÿ?ý3}¼íÅz‡u˜nl.mf&Ÿí £­ÏîæØefû‡ýêí«œñw•ý<ïõ^oþÓz<'›à_´ý¯ý~ÿûõÑÖˆµØ1¸?<ÏýÑýOaÍsÓüY¢øvÆ›HÔ` ÊAó`“÷Ÿ?Þù¿½ýÑ[O®O.4ýGD¾µšç÷~ht?÷ñ>ïü-iiwÖúF‘8CˆÀ)†ÎT¾3F<Ù¥ës'ü°û‹þ}Ír^%Ðnü5 kú5ý÷ÙmåûUþæñ(ÿ–’Gý×ïº}+ÊŸ£i·z¬§·Wߟ•}øú׳xkÀ^øsn5¯][ÝkQE˜âÿ–P¿ðãý®Ù=úV ^!Ô5´j…ÏÚµ¯ùEÿ<¢þô£ói0ûú‘Yy_g–_ô¹­·ãßýÌüùÿdý÷RâI¾ÏæÿÏ/óüöÿÓˆœn£¨ÞK¨[Å«}‚ï÷_ê¢}ÿfÿÙ‹ñÿkøõ-µÈ´ï7PýÕä¿åÚû½}=‰,¾Auÿ³×Cüëë‚Þqøqk$‡—šrŸO0×£W9â•Ïö?ý…­ëŸÔl¡ºñ ¼Q~ö7þºÿ{ûßð/ׯÕÕÛéútš€ºˆCçGÿ<†ßÿ]> M¶›Î†Ü‰½DÏþ5Æ™o¦X\Iin3Œâ³5+}ÞÖŸ½óôùÉÈÿ¦g¯ùúq]•ÿ {úâŸú Sñ\ÜøKW‚Ø4–² ý×™ÉSü=ëÀ‹Ãþ‚Òî%åÄ?é™õþçü¥s2x;YÓü1âo›x%Òg‹í7[¾d1"lŽDÿ¶KÈ­Ë‹i> ü/Ò.##í’ [¼žÒÆË¿ù8¯@¢Š(¢Š(¢Š­qi Ü]Ì"Qé\gˆüiyl³Z[ÊeþY‡ëû·OÅ—~ñ»ºú±¯5ðO€5[wí‘i¿Ùö–1yé—ý+ø¤‹£cåêznù}WÜô}×Fµ1@9þ9zä5«/'\¿”>Ý,cøþM¿.Þ[ú³÷—JÚ[»ßÞÇoæù~_îî¿Ùü½Tþ]u‘ÅåÂ#©+–ñÜžW‡­åÿ¨—þ”G]+çoîúÒׯÉ-¿¼-/üõûD?ù Ûÿeôü«²zªö‘ o) º»ʸ‰>׫.£iƒÎýßú,[#ùGþ…Ÿ˜òvÿÀÖCy›cöˆ¢ÿJ›Íÿ©½ýÔÛó6ßÔ÷ùrœïÂiRM}¯j0yš§žÒAæÝÇöÚéø«}6Ö§>-[hB]+Ahnõ|s!ÿUoÿÅò}+ÍþI¨ø›V×.®§šæi9'2wäÿŸä3¶½QøQ¤Oe5ܾF|®¾ONŸÝÿ?w¯Í¿ŽÔ~^[7O¹ž×þ[®ùö]¾ß‡¾ØíüEãïþúèhiÿ/—qû_7ʽ1Ûîÿs¶Ñ]‹ñ¶Ò蘵›o(ž?¹ÿÿß]qüÍzNöMmwHÂê!Ö9ü¹ÇüÖžºTÖ$Å`×¶Ñz‰¾Ñÿ€IÏýóXš­î«¨hU¼®Ï3þ=rÿu¾ôRñU¡à‰á²ð¶Ÿ¥]¢ÝÛEäùþíÿÏÒ¯xÅ:†`èù·rçȵ‹ïÉþ êÇ^w¨O.¥mqªø–çì—w?èÐ[ÄžoÙ£àDþ9OSúÿ Õ¸_ùÿ?ç¦ù²/u¯°}¢)m ÿFÿ[-×÷ÿÚþ‹ßßægåüáø¥OÙtÒ-d›Ìû|£Ë‹ÿ³ü:~£ªÕ¼9wàBÃOº¸ûö”XŽëgü´_½û½Ç¯~•ãW›‹ë*߈óæß_z¾«ø?û¿†š|;¼Ï*kˆóÿmÞ»êæ<](ŒèÿV€èUÉj73E¬ù°ùÿë¿Ïû_×§ìUèü/o4R™¥¶ÿ[ÿ-Ïÿ«õfìiŽ7ŒV&¥gÿŽ¡imli,b?r¤Sü3¨A©øgO»´æ)bSô=ÿ#ZÒI(d‘‚ õ®FÿE½¼Oµh~!¼>gÙþÕ”ÿ€·Í·èw/°®oÀ?µg_¹ð׈´µŠòÛïóüjyFíÿ^=«WáàøBâÓ½–¡=¿äúõèTQEQEQEQ^kñ&k8æÒ Ì9†Ú+«ÜÄ|¹¿uú´“¬{·sîâ¼óÃ>+ñ·ˆ<™n`ºòåÿ–¿ìǽ¿xœmÿi»n$Œ“^Ë£xÓIÕüˆdŸì:„ƒþ<®~I?û/ºŠå¼veÂÆX×}®ÏÿJ#­mM/>Ì~Áþ»ßüÿŸ­`è:†£öè-oýç˜yûßçóû½qËEâi|¿øH/ü´»ûó'ùäþÓÏ$1ÍûÈ3Û?ïV\÷g÷g0'›þôŸy¿ÙùOÝÿ=ùû9!þÐò¢¶ÿUûÙþþédÿ¦íç®ô vX{)#6éoVëï<Óÿ|£?ñÿº¼~?Ïz¾±®èzÞ¹i¤êöðÛM,XýÒÇ?÷?‡æü«—¶|ý Cû¨ü¬I7ùõ¯aø ¥”Õµ®q$SXE'NŸ¼o“ü*÷øF<®ÕÏGq¨êwW}š²ÓTþþ¿ÿ_¦ÜìY¹¸ƒý$Á,ÈyòÿÏÖ±5oèz°%­„rzóþxþê㌹ø%kosö½S¹Óçÿ§o“üÿŸÇD×~$YhVúµÂë–¤~ò+Ÿþ9òÿŸ^k¢¶øÇg ÿe×ô[í?þ›ÞEýôÍuÚV©áÏÛgKÔíïàa'þ:ß5a_ü;²77­™¸±¼ë›_Þ‡Û÷>I?ôÆk˜¹ð¦¯u¬\]ÿiÁ¨^˵¬þe¬¯û ÿÇþÖîµï¦[ÿÄÛMŸOówþdãÿBoSü8›þÿ3ÈÒaU§›i5Ûy›4–]ª©þÓ|þÛ[×{Ÿ YÇ5ô÷vj#Òm¿Ñì´¿ß—ÿd_öWÐÖŸŠo~Á \\œyCýgÓãŠçí¥—ÃþŸÄ¦Ö×õ1#ÒGÿWÿ²»»uùq²~ë÷²þ÷þZKÿ=&ÿõüÞÞûK3¼#ðš[éçñgG•¿ý#ìDlϼŸÝÿsÿÕQë_f×n¿³ôá‡íð6óýÝý¼¿Ó¦}+Ï5WûjÝt½>Ùmáýߟ<§oû©¼ýØÇmÞ™5JI¬‰šÂê ŽÓ÷¶§ýfáÆïüw>»¶ñÓ¶Þ'†/³Ú}›ýl^gývÿ¦kóíŽÜ~"Ôu;&ÓMŸûJçw•ÿ] íþ!ŸÌüÎÕÜøá%´«öÏâîcÒ×~Gûò·ñÈ{öì8¯PŠ(­mÄqqþ•ÎøÚßH½ðü¶Äæ!sÄWúï3ø|¡ýúùßGø{â)5 BêëÃwÒÅäÍåýª­Ó×ïzv¯ >éói~Ó´û«f¶š/0¤ûÃ÷Ö»á> Úý– ?-O’mnÕȳIÀXv5#¦ö‹ ¯·X iy§z¿ûŒÙùOáùV®Ÿ¢ yÌ–Ú”ä ÿŸóÿ|íÞL¢ü懒8º×âíWR‹ÂÞ”~ËåEþ¾QóÿÀW·ü §¥oiº=¦¤.—`<¨c¾ð'ø¾¹æ¹ÍSáì:ŸjWXòÿÏþüú×—xǾ#ð‹Á¬éÖÂ(ÄMĺFøü¯úiµ6·ýõ¹GJ×🈭ÄÃ^ñÀŽkÉ»¼ûÈû¤_-ÿßdùIÇ%xãxÇZ/‡5ŸC¬ÿ  Ný¯a“‡X÷ôI6nØÿZö‹KÛKëµZÜE,GþZFr*ÝQEQEQEÍø›ÃkÐÀr"»¶9‚\ô òº·û,8õô®BÃá{Yê·˜ºýíÏü°‹ýT_wîývõü{ ç>$x \¹Ñí¥†Ü_›iŒ’¿ç—éõÿëîfO øƒVÒ-íôý?[šîhøž T?÷ñò¯ßOA‚G¯ñl½®üMÒüCámGF»ÿ‰^µ±þâSòHRUo‘ûýÚö..mþ´ôŽ8‡Æø¾ISÅÞ÷Ô$ÿÑ{ÿJêîÎÁ‘ÿ nù»VMÜ_¼øü˜¼Âçîð>Dõïþq›! öÛKo6/7Ëû‘ÅÝÿÐzóþYm-îµA–îä]Z[KÉò>BÿôÏéýîÝŽs ñ…m>¿ãÝWR[‹{Ky¥†ÛÊÏ–gþßçÁéÚ%Þ¦ÖðÚäÝÜÊ¿öcþ}M{Ï +½7Ä3ÚÝ_‹¬iPÿÛ?Þ¿ËþkØÞQ&I;V<Ú©ûAµ8µÿEó„³vÿ€û}iÚm×Û§ó…Çî¼®>M¾wý4ÿ Û¢¼÷á|Q\ø첟7÷¬$ÿ?çè:WCwá*èüöËoóþ~oïâõƒzmÌæk[“ £ý\¿òÓþúþ½zûmÄVñ׃?s§q¨Cúßµ7ÿCù¿ï–úéõŒt\éúÖ‡}i5·üµÇš›¿Ï¿â+F?Cªißñ)¹‚[?ùkÿ¾ûßìÉóÀ«|«x4{ëkˆní¾Ë Ï—öŸ°Iå}Ï»¹>ëcÿA_M»·l®5Ý> tµÔôRÔÁuþ…)ÿeve[þù—â+G_Ôt{ W×ÖZU´ÆêúR|ØÿwÌ`yyÝÏ^”ïkêºÅ†Ÿ¢y„¾V~Ïþ×üôvþUÿ¾·íõ¦I‡¼ÖÚ¯‰u/µj?êâþäî§üïž~^08¯&øãËÏ j;Cîíbù?ï¬ìßívûÞ^_yÁâ1ZðÍw >i?gòŒsG¿þZ¿ðü§ï!WST[¨M£ÛÜ}¨ŸÞ}“¬ÙëŸóýww^øI®kp[]Íqý•öbšaýçýóýáýï×ÓÞ<3áM#ÂhµÓ-±ýé.ÿçÒ·÷×;ý·.³çÇáð$ä:Œ£÷ØÿžŸ‡ËïV¬|?ii/Ú¦ÿJÔHæòàeÿà?ÜËŠ×G'|Ô”W'âMCH¾¶¸Ð%ÿO¼–#›+_õŸ÷×Hùþõr÷—·v¿Ùÿð•ù¯ú±uü{]µæÿË6õ^=Fì.ÒÛJÿ–¶–Ð~÷ý¿þvõéø¬ÛÑî<ÝC÷¶ÞoùþóúîÙÒÇ$>s\Çj#óïg“÷}?Zä5ëØüg§Ü辸 iç§êŸò ­¹•;;ŸËÔ×9§|bò¼M‡åò5xZhíÿµlÿr2Ï·”lÿã§é]çŠüK6X[Å-ýÎï/Í8Ž$_½#‘ü5æ?µ}6äÏäOa/éVËÿ÷U~}§œnÏ¡æ¼ç\ÖtÛÿϬEkªZéÆ?ÞÚÍ·(ÿóÉ?ا§ ¯Søk§Zj°\C|omä“÷–ù›#xäþÝIù½é]÷…´MC@½¿µ”Äúo—Ùe!-óÞ¿ßû™o⮺Š(¢Š(¢Š(¢Š(¢¹ý{šOˆtÿ²ÝÛðîä‹åxÿÝ®þËmq¨Jnµ ßê…×ü³Oîÿ¼ßÄßÅßï1ªf-GC¸Å­Ìú\±˼_ê>oúeýG??lí¢Óþ!fòuë_*/ùúµ>bÀ×ï/á¸{à®[â›Û]SVð~¡§ÜAsiý­ïc|ýåoóþMz-fÜÞE¦®>ψ½EsÑÞÞjZ½ÿHˆ dó!ÿwûÜíöÿëîÛÒÛÙýšÝª¯—¾ ÝË/‹üAÑÒÞ鼨ü¶öþŸÏÔ×öÉìoþ× Ç•/¬N}?¨¯¡~ÞC}âë™a¹·š/ì˜ü±Ú1æ·ðÿ:œŸV¼žKx<ÈÆO™ƒô®K^xÿá%·‰­Þþo+þ=ÏÜÿö‰¸üþU§é—“k›û¨£—ÊÿT6~ÿvæ_§ùÇñ3vÔW ðÕó§j0ýŸÉòµ øÿ¶¯þ©æ»Š}2¼£XÑ<ïk×qˆFêÞן»_½ÿŽûôêvŠåï<¯oq>“üµµ›÷_ðáÿ>ƒ/&âý2âßþ&_ÚWü²½ÿ9þ9<ã¸;&^³‹ýÄ$ñ^¬ûEŸïbûŸÜ8eþ™þpWK¡ø±o•¥øŽ;ÊÿW/ü³ÿ¶oþÏ¿ÔðÍWT1ã'ÿUrÓj–¾%ñ°}DǧüþDVÓíûnϾÌëÎÅmÊu(Ùâ­Þx#ÁÖ6¦_ìÛ}<ùz·ýÌ¿÷ÚüÕcÃÚ”ðϨhº­Ç›sc*î|Rª?ïÿ õ#=멯8ð‘çèú„ÖÚ•õ¬ßÚ·£÷Oò®oàl­u-·în­¬u;^çýTŸ÷ÉÊŸÌV"xgD ÓYÿjølÿ¬x­æû<Šs> ê2;Oñ½ÿýuû-¤Ÿ¯—Yž Ò¼=áÍ=µ?ëwú¬_ÃìùIÑ`]¨*ñ|LÔ¼\`³Ýý—¡gþ=aî£ûßÞÿw¥eü<‰/þ ø~Þ>ŸÚoûçæ¯vŠÚ_k º“Qòlã»û/ÛùâÚv˜£ü‹¶î>nWJ]ÒçV·Óôÿ"Ö+ùj>i7lÛ¿w÷Õ[ ž›³ýÚãôßéz—‚¼{a-°òìu[ß³\IóH'¯_ñ®'áMÖ­oâE7-Í×Û#ˆÿuQÿx¿]®­_QÑErÞ1×tý'GÝÝ‹yo?wúWsìý¿­pv^9ñf¾eרµëàÚÍëþÏãÈóíCB»Ón-æóØMÞw›o÷ÙÆÖü¿»þÂÓ¼=ñÆoî4¯[Üy¶ò´n‚<ƒócç~ïüu{¨Zj¶BîÆq42taL·´|÷D\Ïÿ=<¬Я¾%E%¿Å}fÚ+lù·iòÿÏMÁ[s×ñKay«Í§µ¿— 1y¿f´ûòE»î;¶ß7ÞÿÙšµôo YØây _µë˜þèÿ? P:Z+…ð x¶Öc—¶­qýó+ÿŸ_Òº›}* <ÚX~äUÈ¼ß y˜ó*Zó¹¢óÒoùïg1…ÿ5ëø×Ëÿnumkâ-þ—%Ì÷¦ÚëìÖóгâ_‡> ð§†`¿Ôît¡Œƒûß›øÚÿ€ÕOƒ?¿ø±£çþ›ü„Õô׉#û7‡æû-¼9C&>âŸß)9þµ'‡í<«µK:ç÷™ÿc·ÿõjó4Ù¿ üw-ÌÇí7—]~_™öôÿ¾«gÃ~²Òtï x¦æ(i>ÿK® ý?yTt/g\ñöT>¿ò³Ÿ7ÏÞuÇõ¯Z‰ã”y‘óïRÕø,†þdµ#÷‚ll?p—ÿ tµ–{¿ ê7Úò Ÿ²ПûgþÄëþñ–Ÿmåê-ˆ¬ÿéÄß÷ïü?Ùþè‘á½Wìºð߈ïô¹¢?ò ½ùãÿk÷oÛþÇ?ÝËwÚÄýrż­{CûPÏü|iG'õÉþo×Û¨5ÙøÇñBÿÄ«R†Yqþ œH?à5ÒÑEQEQETn‚U1ÉÍpÚ·Ãm:çUŸXÒf}3Q›ýnøeÿy?ø’=k̵ýÇš/ˆleÒíM­ßIuøõxÿÛþè_î¶}ߺҼ{¬Zâ-gN7ÑÏݯÉ'ü /ñþ÷+Ws¤kún¹oçX\ù¿óÒ/ùiûËÕkæŸÖfÛâ­Ì‘ÿËÌ0ŸÇnßý–³ôŸjZ¹œê§ì°Åÿ}îû¿wÛåý¯OWøe¤Úè¾16¶¶æ(¿²z÷›÷Ãçoóôã–öˆK ŽNõ¾im)’q{Uš§©gsqöX®›ÓéN[È>Úm~ÓõC¯ùé\·€?×ø‡þÂ×?ú5ë¶¢ ·¹†à®+Hµ…¾#ø¢o³A$>UŸe?¼ù¿ñï»ÿ|Ž}; +ak•¼1EØEYú…Åܣ춖ù—Öxw÷ÏãÅy½í´Ñ}¢)ï×þ;íþÇþ9ÇÜJÎý÷ùÿ?ïÿãü‘½ßÇïçx:àJ34rÇûÿö~îßñ÷ÛÆ~Xø/ø\ñ´ó .äÇþ²yÎO­}!௅¾ð­¼ßf†óTŸ¶8ä?ûݯ@®Å¿tï˜a·êìÍäɃòÁþùÿ>µãúÆ£yâ­[PÕuö¸|™>Í©û¨>çÝùŠþ=}ÁÎÊR^ÙØýŸìŸgó¢ýä²ÿ Kóÿw?7Íò㟻Ûj×Ems Õ¿›ú™Õ»þw~»nó}¿C‚x´ˆ|ë‰å“gÎ_›óæ¸;éúWÄïéÍ™&ºòfãî|–ë¿üþu¿¢j0ÿkÜJ.D²Üžb%ã·ËÁüAjÕ²“\“Z¹’ëÈ‹J÷pÇÖI?ÛÝYÖQÞ?ÄÝbYnsin#‹f>ó¾~¿sÿ®Â¹?‡_ò#X×[ýõá¯j·¾6ÔtýFÜæCý‘qäìóvýÿ÷‡¿ø×q{z,´ùîˆóDc8Ž—NÔ!Ôì!»‡ý\£Šùû¶Þoí ¬ÚjÁr.MÏ™ýݧšäþ//Ù~#jt,VÎÎ(żü)8QÚ¬|€·Äý:CÚŸÿÇõ¯¥üC¦Ë«è6·"nF¿Ïô«·’Ec§Í)ÄqEå^¿Ú ôÝÜÏþ,—ú­Ç÷-Ä­·{·ÝËlü«3Ä~'µ·¹Öl. ÒôèÇ–%“÷oWwæËNÇý¯ªñ^}¢^KŸsh.‚YcóâŠM²Oýß_‘~ŸÅ^£á}kCÑn7eÔ- šÜÜGüš¸ýCáv»£³Ká}hÝAÛOÔþaÿ“ÿ­íÒ¸Ícì–·_eñ†‡>—7ü÷ÇËÿlåOóëË–¬x‹M·Î‰âA¨ZEÿ,/ÿÒ“ýß5>ò8ù•k¯²ø«iLj4Û/þž#?i·ÿ¿‰þØéºÎ›¬Aæéú…½Ðõ‚`õ§EQEQEQXZ†4­Hù²Ûˆåÿž±ðÏOʼ__Ñ$ÓüM¨3ÝO¶§No‡rI«¼‚Wôÿëòj='O›Å^9¸¹ŠäkSYE?m—þYð¿ÝÂýï7çëéótôýÀ±q6ª3/üðsüÿN?¼Zc‘ñŠ¿ê_“ÿJÿ­]¥•®Íök/Ú<œW™éQý—íßÜÏ?óïkþÏÍÿ|~˜Û—g£iöú~°mõ‘nÄpOùúÖ'Ã÷ÍÇŠ?ì9uÿ¡ÕëëöÔ´ÿ;K¸›1]Çñÿö?\¨êš¯ˆ¾ÏcåZä^I™ûþ–éýù?¢ÿæC4}^íá‹í9µÛˆ<ÑûÙ€ûÒ6>êzqý+?@þ.O‹¶ÜM¿É³ü?Öú“ü€®¾öòh@’æe“äŒÈxÝX7öë}s Þ˜&¹“÷˜ÅÖØ¾oÏëÇÿZ³ì¥›tÖ±~òo'‹_—§ÞùŸ,T¿Óñå«’½ûd¶ÿd—þ{yßeƒæÿ¾ŸýŸ~ý”íTäË,ßêmV?Ÿîÿveªú”·^0ó®×þ'¶×sVç•O'Ëu‚4ÿe•‘ñþÃgšÛœøzÆúx¾Ó>•7™þ¶ ¼¸óÿ ßBŸðÜÂ<mWw—5ÈÏý·’§Ðü1‘¨Ü\ʰŽÐ þé ŒøÇEþÇ÷*Ï‹QäðÅÇ'ÊŒÇ$Û3Ÿ-\3ôÿdÄøs§Mo±~<è´ÝJëϱ¶–o7 šOûhrد*·ÕÓCý¡õ ¦µž\ÝÉî[çM©\§ÅQ&«ñQ¼´¶œÃq,0ŒÃ³÷žR|ŸïVçÀy?ácÜù¿òï§ÉŸo+ê ç|m¨O¥ø;Q»µÿ]\Wé¶Öþ%>(¹¶žKKm>Ú8-G[‹™>Xv¯÷›÷ì­R|AÓ¯,?âi«®Kiˆ#ûðC,Žÿ,IþÂ/êÇÒº ü1´ÿ…p4~–æë7õ·f^0Ù©þ YÇoàýBH­æ¶†ëP’HÃzmEùàJÕé´V£á}'U—í3Ú…»‹È?u7ýö¼Öhþ/ÐÏüIu‘¬Ú÷µÖOï?à"ÿè@ÔOã-æçû/ÅÚqÑnú±¨ãÈ—Þ9¾ïò5Õ%­Õ¥¹û5ךqÒç“ÿ}õüóUî5 / Ç­[ý–.ÿjÁ‡þúéù×%«|!ðÍìßoÑÚ}ìt—N8÷Ïøb¹]GÃ~8ðÛôkYçým¯îîGüþÛÿe]¼ÇüS’j?½óü9«BëÆTþþŸ‚üýŽ•âßx÷7m½güõýÍÞßýþúç¯÷[oc¥üKðæ£qök¹æÑïü»êƒÈ?Ïiüë·¢Š(¢Š(¢Š+žñ†m¼CnÚg´ºý]Õ±ýà¨ü'á=;Âz|öö OÚ%󦑂Œ·ü]-q¾)ÓfþбÖ4ûókªÆ ¼dŸÜ˜þû‰Wº™ã¹»?‹bÚÞ ¿ižUœ×rYÁmÿ-Jÿ”ß2©úµz™¬éÚű–Âê pyCþÐþ¹5¬ ²hƒÞ¡“K´–Ú{SKÖ•"‚ÂÈEòâ‚.#ˆtJó¿ ¬¿ÚÞ0¢c4ZÜ—U¿Éæñþ­ÛßüñœÚ¾×õt&¶2ÝÍ.ÿÞC½÷8ý?ßäŸÇcu}8K}q·SÍw/üòú|Þb¯Ê6ü¹n‡ŽŠnxzÜÄx¸”‰eó|»X~â£ýÆvþ{ó÷˜ºÊ åøâx­§ò‰°³ýï£~óôüþ¾U½¼ÖVûIº˜wŸ»JçÁ-±’ÂæÒ~ïÏ‚*“æ—çêßÇ÷}ýÍ2 ^èãÿ€ýüÿ½é^‹U㵆9æš+x„²ÿ¬“ûõÎë‰w¢êÃ_ÓíÌ&!¥mÌ¥”‘=YrÜwÚµâ:Oˆ´ø.£ò/­$æ9zŠóÏÇ«_[\èÚ]ÏÙl­n®¼ß*o.yŸí2ýÙ9Ú¿søyõ®£ûgVÓ°—Í?éý<ŸüŒ›£ÿÇEkG®Å¨[M`}eÿUÿå­KÛKØ<ÛYâ–/XÎkå?ÛÞÉñ_ÄÚ*XîÒO3ßåÙQx÷ÆRøÇWÓîc¸1ýŠÒ8í¯Y_ÿ¯í]_ìóåkÇž,þ÷ý´JúB¸_Š2[xXâëì°É.'—ýŽŸÏmqß 4ë½oXÕµÛÑ8Ó­ïØlåþ ä_ûâ=¨=+±ñN…>±ã_ Ê|ßìû_>k¬tÊíò÷ãÕÝVv‘¥ZèzL}¨Äã´h¢±.üW éó}žóX²†oî´Ã5Ë5þ¹ã]CQµÑ.,mt;)~În®­>Õö©?‹jî ±zUohÚ¬Vú…µ†¥ý—¨i—_f’ <Û)†Õ‘_Écû¼«Ž‡5±sâ­KÃÃËñœ<œqy§Mæûôß?þ…Ztº±çꢾlœÊmöãþ÷Ôf¯,Ú•²:Ø^zÉîÏýòßãTuoøª×쥴ǽÏË,ÔWyðzm3÷¾Öî-üøÞþúóùתꎛmöOxr{_úzò~Óoþà_ú»£ÝÚZÿ‡‰'´ÿ§X¦ûD÷êOøÝÁüYBõö_µ6þÙÑ~ßyºÒÿøÓrà$þXÏY¡xóþ">U†¥ÚÿçÖoÝMÿ|75ÓÑEQEQEËxÎËP›Aó4•Ý[ùóÙ6²²~M^'¢iÞ&ñ ޤ¾}ž(óeÿS¿gú¿áù_ ó7û¿Å÷º Û+Íãíwvße¼ÿŸõøþ¯×€ìõ?ágøËLñÆ•´„?ë¢ ûÏ/ø—x#§O˜nõçŠõ=ÇZ6«8´/öÁÿ.÷_»Ïû÷_þ],°Cq0gepÞŠX¼_ãkA61¨G7Ó|hßçÇÓpèÂѧº‹ý&ïÊýÉ/óÿ/×ü•Òô¯+ìòý›ì°Åþ®×;Žßï?ûyç¿çVm¦šH§¸9Š7¬ÿóÏÙ‡ñ®cLšÚÏ⧈-ýl,€9þæ{ûûqÿv€³’>Õ×Í_ûõŒ\ÿk‰¦·ýÌ}–/%?Öoþ-ßÀ¿îÿ€§ø~ÞVâ+b2ñl{>O¾ßy³þOSÏkÞO϶šþâ~xØò{Ÿ»ïù–ã¥8o[Á¢øþÖS›ù¼Ÿ21÷-þïîøþ?§EÀé÷üBÇÍŽî àÛsÄßÝ®–;É®eÌVâ)¿³Ôy¿îÿŸåíUžîÖÌé÷_ôÇýTXÿ?ÞÿëóœëdºÔR~Ñ­£ódO;góêÕÑèÖ_éUßî¡òÕ]ló_wÝÛþ'ò<-zzuåÖŸ§Å§ÿÇä_»‰?¿þÓÿ O¿ˆ×ý¢Í÷·zç†ôûˆ­ÿ´5Nu)Gï$Æß“·Éü?Ï×Ðsþ=ñE¢èóøz%–]GWc‚!ØIû±+u3ÓÖ¶ô/Ýh^E„7cû&Ûˆ#Ûóÿ»þïSùzWSEÀø¯FþÁ.ÐOÙní¿}}ÿUyûûÓûûz7Z‹Âvz[ýCKšÌÿÄÆöçé^]âËÝnßâo†4 `–Ö)íï$šÚÛÊ—ošW÷Ÿìþ@×ãÏ6ëâÖ¯i ÿ—¸ÿÕ}ÿõióÀ~jæ£Ð¶.5‹»OÞÅkÿ=Ùûßç×ü!·{jÑÇ©CcökO'ÎÙû·—zðÛ¿à^žÕ§âŸŠ¾(þÑþËÓ‡úgÍû«;oî³{s7ÝÏË€=ëñ«ã››k}?Qi.G™ˆ®¼ïºÊß?ÌÊŸwں߆Þ<—EÕ¬)Mj?âªÑ'±þ_,ÿúÿ×u¥kÚF»™¥j0]¯¬ZÔQEQEQPÉoÄ>TÀH¾õçš÷Â7S̶—ÖoùeÇú¯÷[ï~¸ü2 ⟇Þ2‹IžÒ&¬'§üõßýíßãýÿ\‘'ƒõÏøsGòg¿ráDvWãýXÿ||ßN¸àc,¢ºŸ øªÎëz YÕü“7ÈûSïýß§¯oö½òËí+ûÉçÒ.*ýR–ßÍš)Dòǎýppm¾/ëÓJUâSo$fO÷ÛÛüÿ.²ÒHµI ºÅåñŸùïÓôÿ=:èÝÞýr-§—þ¹&j—s‹ˆå?g„ÿ©1ÞUMHXŧê%ˆ#ýdØ—òÿv¼«âLO…uoôo°Û]}ž?6ä~ôþ÷ø¾¥w·ò';|ÂûBÒm4û4»˜5 ¤›Ïýï—™=xùEsM)òb† ¾ÕúÌüùª-æÝ\dŸ2Y*îŸQ4w7:|·ç÷x‚õÝiÚuž»þ‰´lÿWþûÆÿuWø¯_v^Z¾†ðw‡¿áÒ ·–Ü,Àu'Ìøzý8üª/|Eðφfû6£©wÿ>Ð,Ÿ’ôük²Ó¥Ô/¼5â»È<™u-kíWüò‡ìî)ÿ¾ñzõê*”÷‘¬ÂÖ3™äôsÜ×-â+ïé&æÒÛûBÇH?×ö¾î?»øo>•£ŸxÝnm5‹{ &;©-nÄs<“ɱ¾xÿ»ÏMßÝé]‚힨úŠÞŸüŽÕÐËr!Ž@6zV,¾³Œìë‹._út|û÷Êãµ¢ºñŸü$šÍȽšÞá³ù6y{ííþÖïÃÚ¼_Å·¦/ˆ(–>¿jòÏþ8´Í B×_ƒJðùóa¾ÿ_qÿ<Ú§Þ÷àW¼é^ Ñ4}" >o3›ƒþ¶Gþ&f÷¯<“À“hÜjp2Ëc¨Mû¿ø™µÓø‡ÏÆÓŸfªÑÇ®Åû¯ìÙüŸúwÓßÌþÓø³ÙvàøB8µßŠ0M~ÓùV>dÞ|¿ìýÔ~î7ã¸úû’^Únµ§kØNAÿÈ©ýCU±ªOn¼Ó®"ÿ®CÎÿЯÛ\Ãp3âO¥X¯?ñöš5[?íGìºu”Sêw–ÿëÂG·÷hßínçýÚã?°o%x«NÿIšÈ[Íýì²Éå§ü³ß·cgû[OF¯U¸½¹Yì4û cš÷ÌýäòÏ`Ýï[u•®éÚn­¤Oiª©–ÌÞ›ÿeíX5mG^7Vº]‰¼ýÙvo¾Â1ʨ_”gÐéZ‘Ô¡˜I•uo)†x‰è}~„Eiõt–~:Ômt[‹½VÔ]}—ýgÙw'ýòß+~ð­]sÂ^=±kIE½ÐÿŸ[Èv7üwóZäõ¯öÍç…µ ïþyæB¯óúW)9ñŸƒ-üŸh“ÝZÏþûÏûëü®àOºµ˜ð·ˆßÚÿÇàÿŸy ÿÏóöÝû¾‹Nñ'‹t;ô]J VÒ/ùa©­ÿ€ÈœÿßKÏü wt¶tˆÈ‹Äeö‹7©ýô?÷Ú…wº~§§êvßiÓ‹ûиaW袊(¢Š(¢±u_ éZÇ7VÃÌÿž‰Á®7UðÔ\ZŸµZÏþ—?ŽÒ˜ÚV¡«xBßì¶·ùQËþù?ïŸãü¸öåuú/Ž­g¶ÛVçM›ýY$ï‡þþvQºÊ¾d|×šßÆl~(_ÝÅäf];÷¾o÷H÷wþëwü¿½­eq­qÿ_"oùç/ÙŒ;6ýíÏŸöÙvÿöXÙ¸·¼— ƒkåÿËùg'÷~eçüôéL‡[ÓíŒ~f–n#ýÔ/ë·üû ô«fk;›²ÉoûÞ¸–»vþÝÿ"¼ûÆ^ŠÛáλ¨êX›Q–׬§ýWÌ¿ø÷ÓýÕâ¾k¸Ú3­‡žðÿË ýê¹%—–Ÿa¶·ÿJò÷Ü<¤ß*?ɬǎDó¤‹ýVqš•â’èÁ _¼¸ÿV#ŒW¸øX|-Ð'Ô|Ioöæ¡ÿv‘~òåÓû›‡-ÿ×­OKã}Ož]eφôŒ/ú=¿ï¿ïü±üéø.ßZé|aá=ÛØÛhö:}ó2 sç‹¡ýè§?ýÞ£Ò·5[;«7ÙˆšïNÄÐçý†ÝûãŠèmî#¹·Šh¹ŽA‘N’UŽ#$„lÅyÅ¿Ä-Úæãý }²I|ÉëŸü³EÛ÷›gAþõhj¾>þËÓmîäÑ'Xo¥ŠÞÈ\̰4ÅÁûû¿ÕþÕt’4Ëyå“þ>ïeûMÎSÌ=vûúê&µ¼ÒmÑíá¹LË7“$¸Ë;nù_Ó¯j|>"³ Ká6Ÿw¹t0?à2}Æü oQ_2x‡OÔu?‰úÆŸ¥ÇåΪ¼”þOsÐu¯wð—„,ü)§yQb[¹9¹º#æ”û×I\”zŒZ'‰5uÖÑßMÍ´òÿª'ËHÙ7{äéþׯª^E‰u/Ú!‰ùßÁýGó¯8øY¡Ú^ÿhjÒ[²ǵžï©ßæÛó³]´þ°Á6ZÍÿ=ùÝúÔ‚?Yñðjû-êk]PÜ^}P°kYýO(ÿîµnÖ³¯éÚmÌ:~ úlrù||¯·ø?Þ9àw¬?í_øGí×PºûTÚ¾!‚Ò ¿»ÿf5ÿ¦Ä[ûœÔº¦£(š ³öŒRÚù1öyÓýó»åïÓ½tPjGû.Yóyäý£ìgmhñª×÷–ö0®®<¨½k?B³x~Ý,UΡ/Ú$Ÿ*¢®Ä\ûÖ埨iñj6æ‡çü‘Þ¸[ŸÃæ!måÓ(¿øßÝoöw}åùO*+Ï5ï‡qZêÚyÿCò¿å‡îZƒgû Û¾åÇ^¹°jþ"Òn|«©þÝgsåÿÇçüµ‹ýåë÷1Ó;©¶ZΟqiuþ‹7ü»E©AþïñûŽ+®—]ñ„-¿´4ýKûBÏþ}gýêÿß›ï/ç]VñgJ¹·ëVÓiRw”þöûí­YÖ¾x/ÆöÿoŠÞßΔq}§ÉÔÿÀ~Vük‡Ö>xÓÃÃÎÑu!¯ZÇÿ.·_ë¿ÏãÞ°ˆ¥ÓnŸâ=6}R3þ“îŸüÿŸºdKÓ¿ä-¤ÜÏ¥ÓÆ›7•ÿù~_éïŒy.•ã_i”»m/Z†>¾iû4ÿ÷×ÜüýÿºÛ{M+⇇¯›ìšƒM¢ÞÏ DyYÿuþë~uÚÅ,R@$Œ.¥¢Š(¢Š(¢ª^ÙZß[ù7VâX½ q:§¦íØ\"?òîÏùô;TW9§\ê^¸ò­?â_ _òï/úŸûãøàË—Î×5›Í[ÄÚ}Ρ§›cÇ›)“÷|ª}ßâ\²z/˜víè¶ðý¢â[¿ÝYù_½ÿÙ{|Ìß.1íÛbÖ¾—q ¶·”ÜùÒÅæIþ›ÿ.qÿ{ýý½1ùýænš¨Ï«f2?³¿ÏùãÇ¥‹»˜bžÞ–¸8Š/ãßþ¹ß‰S#|2׃ƒnM¦“ùWÉ6qý¢}æàEÏ_óÞ¶´Û[é:xŸÎÿžCþ±ÿÚîÇåúz hÒα}äéšqó"ân~OûëûÇÿÔ+¹Ðš×áö O‡Sñ6¥å›(Ç8ÿkàôþùçîã>¿àßdÎußÜKÄwó.%;„?ìGé]ýy÷Š48tkiï­`Æ”y}oæÙÿçîîº}æþð÷ë£á¿‹™Æ—¨KJ.<Þ6\à‘?ßO›Û櫺*ÿcÞÏ¡0 ió¬ë—ñ'ü¿ñÒµ¹$Q][˜äHäýi¿c´Œù‚õÅrZ­½ž¹ñÇKºòeŠÛJ¸’Xý5dOýu7Â7²é·Ú‡…5IüÉôÒ ”²Ÿš{GûŸ]¿pŸjî*!Šæ€IëšÅ“ÂÖ‘1—J¹¹Òåÿ§Ywÿ~Û)úS_PÖôµ?nÓ…ü#þ[ißë1ïì¬~•ƒá/ ù~/×ü[woåÏ6-#|ÉŒnöÝü«Ð(¨d†+˜ r$g®kþ¯ ùÞgü#º^}~ÊŸá[´ú(¢³5]*Ç]Ó¥°Ô-ÖâÒ^ Ÿóú×hÞÔ´¯_ø¦ÊêúþïJÕf·šÏå’Ym¿Ùgþ=›~½Žk­mF+ëó«ooÃû½úTÑꚆâK}+T0K ðo²]@¾_ïnhÙ2‡ÞÕ»¨\‹M*æëþyÄïúf¸»}Sź ´R]Úi¾J9º‹dWÿ±÷[ðèôéæbµºÿI˜%ù$ÿ?JÖ¸´Šê*Q‘\ž¥eöD¸üÏøûs~ÿ—åoásè¼ë‚A¬ÍGúv±§ÜÚMmæù¿¼ÿ·ñÿÀöñþÚ{׬ø"a§ý’Ó÷¿¹ÿ}þg›ÝvîõþGÛêõÂKa¬i×–¿nŠ¥‡í†/š=þ©¼¶éø~u»ÿ _üKíáÕm¿Ðå‹ýmŸÿo›ïî«ÚEž“ý£ý«£ë†)®xólwûÅÿ¦|}ï—vxûÕÒh_|Gm¨Üiú®Ÿü6ßòÞ/ÜÍ··Ë÷¶²·ð×{câ øÒ ôüÁuÿ=lo#ùÿ7Tø!a½®¼1©Ýèó‘þ¯w™ü:×oã .u¯ »?7?m°ÿâ‡ñ·eÅGeâ#SŸì¿¸ºóÂ÷ÿ‰—ÿŠü~ûé6—šÞg‡õ»í+þÿ×Cÿ~ßýï÷¿àGjõz_Äïi§Ë×´_í8sÿZ_ßÿ¿çõï´øsÄ߻ӵûGüûJ<¹ï–®žŠ(¢Š(¢Š§}§ZjPùWp WÐתø>ê3æiäKüñÿ?/ùÇ mož÷Äøqi¦f)|Ã'ÙïŽ öùsþÿó=ë¼Óµè´ÍBâÒëýibòþճ͎gûß+ÿæãiÁ‚„ì.5Qb>ÕöÞÿ¿ælßÿïŸîŸã’ßP†ÇH¸Ô"ÿ©?ç¯ðsùÿŸ›6Þ#ÅÚÌ×ÞÖ%ºýìßÙþ_šƒåÝò¯žíÿØ+x^jC4£É÷®ƒÂž¹Ôɺ[Ÿ²Ú«ÏñMÿØúþ\šõ;GÒ<%á›kQ¶ò´«oõvÿòÒòoóøcòä¾ÿŸ ÏûÿëÄK­j¹‘sÿ,boñÇà8¯V¢¢.LÄkȬ­"Ó0ðÆ¿Ð\Oq£KŸö·ÿÇáÿÇ«»¢Š(¢Š(¢Š(¢ŠóFõtCÅße¹òf–kæÿË$—lLëÿOβ5qi¤x»HÔ-®çÕ,þkY¬n&3N<ß”íY>n~N?Øã­mê~&°üJŸw,¾]­¬òÚ_áÿwnß›wûU“áëæxx}ªÚiu{:Ú8­yûÕfÚ»:ý?‡¡úu–^#3hy Kªˆ³4?ÕŸö¿Ùÿ"²4-NøžZ ;C–Hàãçžf|ßdÙÓ×wµv:ïü€5úó—ÿA4í*H¥Ñ¬$ˆ,˜ÿ¾jž©á­?T\àÃ7üö‹­sbËžô]GûVÕ¿å•î_ð?õŸúúUiüE¥jWS‹G>T–·?'ÚGûtoçǪŠÓ1ù¿½ÿì>÷þÌßøìŠz¥¨ÛCu§ý¯í?ê¿ç—Ëþÿáü~ß?¥q·¶_ñ.þÛÔ<ÿ'Îýï•¿î/úϹòîþ1ü¾ÒµWUÒ¬ï´ïÞÿ®ó¿åßû­·ý^ïõ|$Ó/tiç¹e¿ýö¿ÔWe©ÙêVÿi°¹†êïDûªíQEQEcjþÒצ}—÷+å]­‹o÷¿Øùvõà/N6‡fµûßjWïf–?ôúÿµß?ùÇ áß ÿi[Ûê¯ú¯ùv³çéôÿxâ½oÂ~þÐ_µÊ<½8ôó×ý•í³·ê§™ÓÄgÇì¼4ä¡ÅíôGîË+«¿à?û5z>ŠÅÖäÂÚîyÉucé#ª7èsÿ®Ç~u§ˆo÷gܧÓOGÕ§Ö’|ûY±»*Ûב&ök{ìÿõÑE$?Áåà »™Sû®›G§ïî‘Ph··—_hû]·•4±,Ÿgÿž¾Wɹ?‰v§â;ü½*É ÙßÛþ÷ýw›û«¯ùe»ËùÕöü¨Çä_OÃW­Æ—fMÉó|¿"s¾O—þy}?ön7k–Š÷WÓ3­Ïî¿Õù_}?‹îÿÀ·}Þ3K>¥i>¢/.tì—$@þìwÿíZW³hW>vŸ©Ø×+_þʽCAø±¨Åöí Yå³>d?hÿXŸõÓîïÇçü^•êz7ŠtŸéÆk3ö¸¿ŒEûÐ+Ö~øgijWI¸:f£×íztœ~+ÓùW¨ø/âˆËuðxŠÿíœÿýü{î¯\ Ä‹Å:|`ÚêâÂìu‚þ?/çÿf9êìÓÛéQ[_ý¿Jóì5ùú³ÿâ>ë~#õâ>ÃJø•¨hãËñU°ºÓñík1ÿ£cíþòñ÷}Ez¬][Å4'|R OEQEQY†‡§êMæÍn ½¤ïþÏJá5? Íe¨ØC‹‰t뙣ŽYbÿ{æÝþ÷÷¿¼Å—޶ðö‘¤Üx‚[K›í>+Ÿ3û7ìOò|òÅó®~éh×þúÇJßøg Íâ[Ýê¿êb–HÛþšìf]ŸîñØ·«]ÜÚézl×S‘­´[É•y®;áe¤ÇÃëWöþUÞ·w%ùõØßêÿñÞŸZï袳.ñ&¡cmîg?ðþ»W#ã¸Dw÷2ãþ>¼?¨ÚþJý oźƒì|²дŠX =$ÙÅji×ke Àþ!óö¿ˆ~¹?ˆÚ<7ú Õ9ó4ÝÆ_/ïÍoÿ-¢ÝÛrŠå±²øc«x°_]ë%d1˱•#_ö8ñþís—:õž—£ÿjý›÷_Ú6·?ùn!üážUÿ¶5ï7¶–ºq»–q¬qù†Lñ¶¼ÿÄ:¯Š.à‹U°ÿ@Ó¼ì[Eóù²vYnvçþYúrk®ð¾´5½$K/q~îàïyÙn¢·è¢Š(¢Š(¢ŠóÈ4Q}ñÄÐ}²úÖ3kg6-.^»yŠÍÇýsZÓKt?iE¨_Oos Ä2‹«–“/òº·ûßð¨X9‘Òd“þ™:©V‹æßó\ñYÐëšeÕÆƒ.¥>«isæ]Ï5˜ÿSûßÞ~ì|Í—oáaü|W_àÝ=2i®aµžÖ vÈ.>G—c?ÎÉü?{åïëÖ» ÓÍ·–?Q\~…¨éw> Ñío®2ÿgÛÈÿÀbù>÷û?q«{JŽÆe7¶·n ÷îÿ€ÿëTõ?ÚZÜÿgÄÙ”’Jøàÿ{ßÚ“D½†{û˜íïæ»ŽOÞ~÷þY¿ñ¯oï'ËÚºZóSÄö׸ÄÉ*Ûù†?3äÛómôûÿ椸Ñ~Õqq,_½óy/ýu_›rÿè^£ÏùOjÈ“ý*Û÷?ó×Ìóm~îïâùû7Ï÷öã2®åâ²þÅ4ZÏ›ú,ßë<Ø¿wòýÖOû÷ºE^ŸÝ?ÃU/no/´ë7ýL±~þ_?÷RÂÿòÙSÿÿµcU£´›ìßj´?év¿¹¹ÿ–Ÿ4fýßóÒ"oÝÕk™ÕntÛ«Ý[OûØÕË_“ý¯â_öûüÛ†îkÔZЋybÉ™·yùûþg÷¿Îjâ„×Hs(Ýæ|ÿÅýïÿ]KeªÍk>fÿJÿÿŸïUë=DŬùÖèIÄGÏtkwoãÝ×Þ»ý+âÞ5½¦¹mÞWü½iyrÿsæ_ºÿ¥z׆¾!éëC:¼­'_ú©“ýõvÿÐs]&«áÝ'\€GªéÖ÷ÀÏd¯:Ô¾¦œ ÞÖ„c­ÿï­Ïõ_×õ5䚇‹5-O@¿Š12ÛËåÍqßëC7ðîõǯrqÏËí¿5'¿øuo ³ù“YM%·Ðòþ•é4QEQEVN·§ [F¹²Ù¤ŠxºÆÿÂ߃W’YøÆvš©°»ðìW^l†n;œ,)#ooMÿ¼ù²ð}kÖ¼9¢AáÍËJ¶?º¶o=ýZÁø“æÏáOì‹S¶m^î-?>þ÷þ8¦ºËkxm-¡¶ˆb(ÆÅfŠ+˜²I/¼q«Ý·ú›8¡´‹ýüyÿ¡¥gøí7ê?ýq¿ÿÒg­ï È¢ÿØ>ý´Çû]¶³åEÿ·?¾'þxíûß÷×ËÿTÞ"ÍðƯ­¤¿ú¯1³·Ôu?‡VÚN•þ»L¿ƒoï›ÈnŽ˜á׿m¿ì­r~%²1Oÿ·7ó\ÝÃm_$ê%—oþBš*ôÿø#RÓ-à^Ö§¾†Ôÿ¡XŸ¹þÍǘW·eí]Åå´W¶ÓZËÒAƒ^a¤ÿhøkW¸7&|[y’ƒ×í_ï/Þ_ø÷Ízœr¬‘ ##f8©h¢Š(¢Š(¢¹"5ÿ…ƒây ¸ÿUgšÜ—õÿǪߋ›ìÖ6ÿóë¨[ŸÁßÊoÒCWõM;ûNÞÜ™«(óSzñ\n¡§˜®.,t»Z Z(c&{DÿG™Û;VAíøavó]n‘¢Å¥î•™w0Q4¿îÿwû«í[4WˆiZŒZŒn"Õqýciæ×_–$n~gûÿ÷Ö~ž‘¥G¤jö°Mófò£’IGîžOö›n?»[iz|VðE¬>T_ê†Ï»Y—ZL¶Ö°Ï`D—öÃ9”ÿ®ÄŸøT^ñ)Öï/m$µk[»h¢Á)ù€“wÿÛŠæÊÚ :ßþ™Eþ«ÈÞ¾Cñ-ÿ¡b¹ÛF3ûBïO¶óa¹ÿ¦\_rHÿà[»ŸöX× yþƒ¬iòéíæËïõOóôfÙ辘ï×­WѯÑüÝBØÝCäùqyòÃüùmY7’Yy°yV¦X¿åàÿöÿkø~ïÞªÚ‡ØeÞ–ùfbûŸý÷«%Þ3ÐTÖzå–VÚá¢Ï¥wðf¥ã듦›¶æþöðõîüß?Ò¾¤Ò´Û?èö6-lâÀ’_næ¼CâwÄ­CRŸû+ÃSKŸÿ-.¢û÷?/ýôoFþ/¥x¿Ú®`‹Ö½ßö¼‰5iPœÚþææ2kÞ¨¢Š(¢Š(¢Š+‹Ô$›Yø‘§éñÿÇž‹Û®ë´›£ˆß>a®ÒŠ+Äz¢éÄæàE)ÛRï»m_Ö³´‹í#OÓ :Y¸¿ÿ–ߺýìÒy÷Ûÿ²ííX*“W—PÓ¦º6ö°ù7¿èë$ÿi>fûçå™®¿Â€Gàý?M>ýµ¹Y%ó?áÕüŸõŸd—oýðkÎ|s‘ã‹í>R"»ÔmsäM†q$?ßÛòI¹_"Dá¶µhkZ2|gÐ.ãÿZD—gþ–ßûF»]+_Óµ³p4ër¶Òù2J>æïö[£~•âE [ÜÇ ±º»ŠÔÝùYò×Êé»wûÜc­c[hߨA©Íÿ!}¿éR~î)dþò¯÷?å›zŒ7ðÕŸ k6–:‡ØÏý›s+}“Ïÿ—YÿŠÛú§ü „W{EQEQEÅøi.õÞHæ4ÖãéQ¥tö“» ßiRŸ–æ#Ïó¨|1¨É©è6÷3¯ÿU?ýuO‘ÿñå5SKsoãZÈqæ‹{¨Çû_—ÿ¡G]>ŠñÓà(¼Q>£6Ÿâ3oTýÜ{öüÍ^©ÿ ”bµÿ¢y_ë¼ÿ¸?àwõ©ou‹k!k†ö™¼¸ÀqÏVcø*³W-¡ˆo­õ½Ÿík[O<ÁŸ’æÖG.7ÿkäܾ‡Ø×?âK«=[V·–>¥»XNï­Ÿly‡nß›ýž•µ¥j¿òéwû«È¢ÿK‹ûŸ?úϦï×?Þ­ˆÿïô_¼‹ÿÚÿ(ç—ü|}Ù[wþD^Ý÷ª·jQ¢KûØò¾öÖÿcÒªXéój—F(¦žâXÎd/Íósÿ¿þÓ4_iñïÿ=?»·ýŒ?þ…Yo3Jfóg'==ëÓ¾ü»ñV5=cϲÒOú¾ÒOôô_zú'þ$žÐ?冟¥Z¢óú׉øÃâMçˆnnm,ÇÙtH7gÍù^]¿Æÿݺ.:ûð<›WÖ>Þrƒ2“¾I}ÿÙô¨,’T„Kúá+üwþúõ¯Pøpm~#Ü[Kþ¶æÁÇþ€õôÅQEQEQP\M½¼²ËÄQŒšãüÿ;}GÅ[ySësùÑçþ}Óä‹ô¿àuÛÔ2c·>Xó$µžÚ„±Þé—¾W¨ÿû6ïÒ¸ˆ·¶zÆ€&×:@šK¬YAæyÒEü ó)\|æ®xgÂ÷w¾·ÿ‰œö¶rCÿ¶ð}›ïãßw€sïéŒ/hóiŸÚEre†?^I·ú´ÿÙ›ðãûÛ½KFÓáÒô‹{X`ãÆ+N¹<«¯üõ„Ãÿ}ü¿Ö¼¦[Ñ¡êö¤B'Mº Aó&7ümmÆʶܡ®¯âÝßüH/í^s»ûͽ¼ž_Ú ›ï&ï-WþY—ÿ®í †Ïúe¾—§Yy‚o¶q40Ã÷ÿr¿søTn9bã»ßhÓx«Ã" ­ÙÛ4iÿU/û[sÓù×á]CGðÿˆ5ˆ¡ò>Éú=ýÇñy‘ÿèŹºŸ¼ÛŠiÓhóBÂègßKÿ( ÿveï«lùpö5ßøg\“U€Çt¹©vQýõþL?…¸®ŽŠ(¢Š(¢³õ]V×DÒ§Ôïåòímãß!År? £Ômômau\ Ïíi¦›þÚ"Iÿ³W}\}ëŸ øœßâ_ìLb㈮—î7ý´'ûÊž´’øWOÕ®?¶¼Gj—7MK÷-cë³ü[×Ú²¼=© Y\ÛC¢êÒè_igÓå†ÛÌùæeòþøUmÛxé]Æ™©Zjö_ØÎ%µ”ew«ÕÂøkÃöמÒ.ägÔŒ>`¼ƒä—ç;ÿú6EhÝý®+o±ëÖƒRÓÈɼ~aþücŸø~B£µ³1Aö.äj°ú‰Îÿ¾¾ëÿÀ±õª—6š¶76‹7qË9aÿ–òüÑ7¯·_Z¡¥ZÚyæ|9¥Iåy1ÿ£ÁåIýÅûÞ›[¿JÀñõ®&¿n#·û4Ö³ZÏ·g—ÿ-6À“o\VÍÆö«µÅsö[Ïøöó‰ÿúßêÿñóU$½–{ò-Fuo$`ÿßq~jÒ)ôo÷k›‹Q¼—þ>üÿ:_´~ê_ùeý~VEÿ¿kýîhÛ\Íuá눥ÿJ›þYKÿ,¿Õ/ð{ü ¹[Í0øšÛûB,E(û5¿•ÿªù¶7êêq÷¾nj΢ÿÚ“›_ô­F×÷~oû¯³ÿ}ÿñÔÿf±äÿBÜy7Ñ}¦úfë½›güùÅGy†Æßì¦È Oü»¿“ó}ý»?ïœõþ+. I¥+$¶ÂâïÎŒF‡þZmþ¿Çº½£á¿ÁxíükÅãÎÿYê¿ë§÷¿Ýí^«â/éÞÒZîù»b("<§ûªµáž6ñ¬¾"°¹7CÊŠ+¦òíƒ+oÌ¿yþösÂô5yN¥«K¨NÑG‘kæy‹2ãL–Þ6y=³ŸóþGZÒð´pý¤Íuäˆ#•|ÉOðŸçëŠï~Åö_ø~äñ5ìSÆsýÁËÿ þ?©únŠ(¢Š(¢Š(¯,ø•=߉®„4û¡m›öŒþ¾c~îûçtìƒÖ½*Þ­-ᆒ(†À)ÓËåŠÎûÝÀýíÏ—¦yÿÇpëTï|+ö³æE¬êÖ²zÅs\ï‚ôï´ëü×oöß*ïìþmäT»”.ï|ŸÜùÀù»×£WšxÊÏíúŽ±æ¯˜Ó,bÿÜîý–½.Šä|z°Ëቭeà\KâßÏÎyýßñp‡>Ù¯:Õ­þqi)¢s/úÍÿþ›ÛãðžMwÖ`øçáM¿úNf¾Óãýïý7_âÿ¾Ö¸]cLºÔô‹®£öS©Ce4–öÖÞl·w˜Äq®ÿ•Wy©è+KEÖ|EáÛCã=vÊHu¤™üÙ¾k-Ÿíp»Xü½:ô®Ÿ]ð¬ëöú´f i@Ìí?<ü¦ß›?ìcèÕºþÒ¥ðñÐͰþÎò¼Ÿ+Ú¼ÅíµOkT 5ßÙqu×ý|?uöÿ´›Fÿï›ï/>§¦jÖz½¹–Òp|£åÈ;ÆÿÝ5©EQEWã:î÷Nv°\ÜYÅ,Ñý°"CùåüOýÜô¨¼;g'†´+{­¿á»pÒ“çÞéÙÂÝy—û²ûÿCM¹ñLºå·üSSÀ–xÝs«Ü©ˆr?ïÉú/~x®V[¿³ÿ«ÖüHp|±›È×ÿòÿñÞ¹ã³mÒðçŒîí/íôÝzád·¹”ÇgwÞ²²ýxè¦@ܵÛ\èö²Üýª6Öóëàã?ïvoƲµ y¥V¿¦‹èGú»«4ËÇÿûùÿs4Ý1 ²‰c¹þÔ¶ŽLù±ÿÇÂpßûßøïûµËøæóO“Å}Ô`]MöYÿp;¼eØÕ§oäý£Êÿ–ÒÅû¯øïüÊÜßð*«qqö]BÞî+o+þ]?àmÿ²ï“oÖ±/nfµÔ..åýÔ2ÿË/áþ)—¯v\ÿ¹X—w›§jEäEgþ³þ¿rÿä=ÿ÷Âþ<î‹sy¦¢KçÚù·iýïú¿’7“åÛóÏ/o—Ò³õXô‹ï³Ãi¦Ï/úÉ û/ûRlOáù³åþmX–÷ÚÜyÖŸ½ÿ¦Qó_óšK]ë_ÕàÑôµK$@óÿ,ÿ6öÍ}+ெúw…³{0z±ëOÝ€r!ü+úÒøãÆðxa³í 'Vº†i"¤!cfÞÿð/μÅ> ¼»Ôn.u=DÍ7`?öT?qÙ?™&¸G¸¹Ôæ†"rz ÐÓ¼-y©Ïs?ëm¿Ö èõ}.7Á>\ËçMËûÏþ'ÛÐýÒ¡¹M3>£omÉÍîÿ¿^£à¹.ÿáqhðÿ­†ÖY¡ÿÈ/»üþxé_KÑEQEQEâÖâòÇÅ÷:€ÿJûWŠü‰>MÛSjÿß*þØ÷íëÓܘǕó&ô§Ancýä‡Ì—Ö¬Ñ\æ ¿Ù:ÇöÉÇÙdˆC|éƒòIúàû»]yÞ³ÿ!Aÿ}ÿ#™Çýù¯D¢¸?É ³èÚqæò[§¸€EsäMòFËû§ÿžŸ¼\Áé\¥É”µ»œsuû‰¢O'ý#ÿh\ÿz6ù%íƒ]ÃKŸ7Ã70ÿ£Ÿ²ßÜCþ‹—ùËaPò˜Ý÷OJεÑíĚτ5 ;J¾ÿ‰½ˆ×Ë;ÿxªÃîí}¬1ýúä5 Xø3_ÿ„ƒÅú]Γq¶ïÜþO÷÷ºfÛòûv®ÛÀ:ÌÑ1ðÖ«k=­Õ´Bm<]>çšÐýß›ûÉ÷[ð¯@¬?é-«i,–³ù7ñ~òÎãþyÉØý=}«žøm%ÇØo­nÅŒ7\æ]>ßïÚ·ñoÿy¾eÿg¹®öŠ(¢Š(®WÅÚþ£¡ÙAýŸ¢}¿ÌÿY%ÅÒÛÁú»·ò¬oøšì'IÔíþÁuåyv‡;¡ºDùvýÿ³÷»âºKÏÃ4ÆîÆæm3P#>lýøþë?zÁûþ.Ö`Bl´I¹òyK«Ÿú #ò;³0þïkóÄ}¥ÇÙÏ›yÿ>°6_ûåz}OÈkž$šöüiòaf3öYL²°ò+m…½Îüt®{í>U¿Ù"ýÕŸü²Š/ݯËýÔþ ß^¿?1Òó!û?î¿û_øáÿgîÿ U‘ò[C-½Å¤¿êeÿ[þ_Ïž$uë4_oÀ0GªµÅ­ÑÿDžr|¬2Éå»oþÒº[‹ÝCM¿·µøeŠI?é¬{vþ÷½Ö…µÑõ©þÕ~×xó ñÿ½Ñ¿ïªóOŠ_èWÚ=ÕÎ58bŠë3ˆü»€<“œ|­þµqÀûµÑé×°Åöx¢ýì2ù~{ÿ³*}ÿûå?&ª:Ž«7öw›öoÜÅwü ‘ö·þ?òýV³µï&/´ZKsö_õ2Aÿ<þTù?à_ºé\½ÅÄÒø‡ÊûO• Ï—±À<¥oÿW÷ù9ÎÞNãQó-î?Ògв,?¸ÿÇ¿ò"~5•¼É¨MB®£‡Éÿ®~\cþó?ëõÁŸÁ¾ Ô¼k ­œ>U¨â{ÇO’?þʾ¦ðŸƒtŸé_bÓ ê?{1<§ýªãüuñ> ÚãOÐnÚ”[„²ÿ¬òvlÝò÷oŸéò¶zb¾ÔµIàÖ./æºûUü§ýqùýÍü¿úÕÍK,—™$9'½w>𵮦a¹"qiåÿŽáÿÙþêûéOö:Û}>ÒÞk·•çÿ‰ÿë®Ñ.O$Ã7¿çªŸó»þúÞÃðüž^¯oá’hÇ›ýÏœž+½øuØ> h}äÔ&ŒUh™wŸÿ_ÕQEQEQEyv«¤ÃkãmBÖîãìÿðË Î•r:AuÌü¿ït®ÛCÔ%¿µ1ß[‹mFß÷wŸUÿdö­º+>âöyþÍó.¤äEŸóŠq´6æ+Ð$ŽH¶I>C\¤wš‡†&ƒIŽãûhˆb?ñõ.ÿï'ûx{æ Ô<¬_Ù\L|C‹Ë‰ º’ }›|[>_ïÿÞÝW5›ÏXiëW:…†ŸšùÒ[ľrÊ;†vÛøm}jþ¡ã]ÁãèL}aåûÏ÷ñ5æ¾)ñ†›«øšÞ_ùsý—ªM÷þwó#MͳäO~e<Š˜^y–÷Í‹¨e‰`¹ûSîù?.~ôóÎéàUÓ|5y³¯ÛKçþêò?øøÿ]þ¥>ÿgé÷ÇßûÝêïŠç(ðÅø ¸šâ ùh­ïý§ô­éº&­¤Ü_êoÛÄV’€ùöóªÿµòýkÍtx5 hèIÔfº»Òt­8Ç$Rü4ÒþûÌþ÷îez׫ë$ÒtÃ_Ý,DŽ#¹ü+†Õ<[©jZq`k™þ-ב,ˆ¿OÞ6éžûuÖx3NþÌðݸýÆ%wîáh€ßócçbÜgø¹®šŠ(¢Š(®ÇÞ&Ó¼+o§ß_è׆%ýו÷"å»Ó¿¥p…̾!‚{Øá‚ïJûT?ñ+°œÅlnO”Ë+.wüÙe‹êO®´~3Ðmôã¨Üë–ÉÅ·•{,‘\C¿g™{wÎÓúV¯ÃÛË»¯iöš\ y÷W÷_0ß#ïùç£óÉè¿ÏI¤àƒk6³wÚ{éŸÈßþÌk÷½ö/û9ÝÅaÄ%ŠßÊ‹÷QKÿ,-Q-¡ÿ¾#Æïâûäýv«1†(áµ·ò¢¶ò¡ÿž_þÏû¯û[Dl’Oô'üíÿöø’äoóÿþ¾ùÞèE•öóý?Ýý8ÿV•±á ±†u+[­6ìÿí¦oúïùhŒw¯Íÿ³{šì¾Ïÿ‹it{¬EöY±Ï™ ù“þùÿ€ÔmöAª\ ZÕa›÷`^Æ8/üôûËøÖˆm‡ˆ|/¤@.D¦æÓ&YÿË– ô«WBÒ­¥ð原‰bŠÒ;?ßÂÿì»k?Æw6Ù÷Ÿê¿uæäuÛÿ n®vóþ&w½Ó~Õú=Ïý3}©¿û%Æ?ë§ûUçž+ÿE·ÓâýŦ¥ÿ<¾ÿÈé»ï{ýßz楺Ÿû$¼·9ŠOõ‡Ëù¿ËW}à‡:¯Šà‚ûV3Yi&O;wü¼Ý7ûÝvW¿YÚi¾ÒþÏk66ã8ûªµä>*ø¨ÚßÚ4 gËó|³U®•§°ˆÂ=ç¾ÿí=[òÅÕ§—să÷‘ö® ãÂ:oÚµm4Ûû/ý";¶ÿ¡ùŸÁû­çë÷8ü«‡øáo@¶‚×Ãz-ÅÔ1Awï´[GÝ_áv}ìÏŽ}kͬ|ãÏjì½TÌzOw¾?ü}ëÖm´)<=>Ÿ/ï~çÛËuwoþ¾ _›*Çÿ-!;T:ãž½s]/ÃXßQ×âýÏ”~Íå‹y¼È?ÕŸõ'¯—·nôéQ|E¹7ZöiMŒW·dõ/—?÷WçÿP5ÚhÓØé#íWiûùß¿ùþµÃ'ŠF±6—à-0 A/úV£ol=ßì7ÝÝþÑ­Ë/E.¡ý£9û_ý3ÿYÿ?øœ}k¥²Ñ´Ý4²ÚÁ¸æL|çêÝkNŠ(¢Š(¢¸ŸÉäÜéfcÿÙY­îG¦ñò¿¢(=_¶k™—ûNX'Óµ½J{Ym®áO°Òb‹Ì»Ûµ£Yýþ÷ÝQµ³\®ƒ¡ÃñXû¥Íÿü#úsÝlKºO3ÉO/åûÿ1o§µvþ,Ö¼±ÿ¶ˆ>Égo—s,»ÿ¶1úq÷›°l.\X~_›ÿl¿ÏËþÏãýïúhôŸóþ]Š•ÕŸóþðûÓüÿŸ×׿ÜÑGþÎ8ý1Ó¸ŒŸóþ'ßæÆ÷=7ƒ Õì¼#o‚êÛÿ¶ýŸ?¼ò|»_€ßŽ+¤’:û_°–ô-F/>>›$çôuùÚ%½Þ£c­_Åunn¡Á'Ÿo÷Ïßÿ–ðáü«ñ´Ñx_O‹þ[y·Eö“¬rºè øû×=áOËuý±wÿ-¥†³ÓM©ÿè[«;Uñ›qå]Ûy°Åþ‰ûߺ÷’7åûÔ_øsZÏŠ¼¿Ü˦ÏåÏ“ÙþâýÆ_‘½6ùCþÕÄMywu¬Aöo>Y¥—‹oãü«úñé^Ñðãà˜´j¾)ýäß~=?*×O_÷zW¯êÚµ†…¥O¨_Î"´ˆr}+ç/|D¿ñl÷‰qöM÷rGñKÿ]?øúõ®&ïR‡K3Zèç·îäºÿÙSÿŠü°+7MÒ¦¿b"ÿ?þ®õÚ[}²ÖÞÞ_³AÙ¡ÿ–³ß"ÿÀ}÷7÷‚„Ô¶½š×ìþoï|ßÝËö$ù~_¼ßðµ@è}6ŸÞjI$?ê¿ÕŸâÿ9ÿgÊ.<ï³Üy_º›þYKÿ³ö?AÓb¿-â»™bЧÓ㲋ËÌòýù_üÿÍŽOV-\6™Æ£o&ï/Ë•àUé6?c‹Ä¾¿Óí¦gTŒfn®Ù=ÿ‰±Æ[;s_SQEQEQEå^32Ÿ¬Rt—NýÇÉýÙ~o›ßrõÎÕl›‹oµ[ùW½†_ó»ü·¯Íþ±êŽŧ‘ö]oNþÕ³ÿWöŸ/ý2ë'áóôÈÏ£„´ÝZÜ]øo[¿º³?òÀjóÿñ\|¿Þöütô{í[ÃdéúÕ´òé½!ºûÞ@þëÿyÚäãït&³üEãÙ¼=ñOÓáÓ&Õ!¾°Êû/-÷ßvÞÍ÷W½všn¡§x’À]ÙÜ aéFÿi=jKÛ;@ÓÕÓ-bô^ª|HÒ>Áö]âûTûwîÿx¯A6Ï3yLý+Õè¯(ñ7›ÿ þ `ÿ]¥¬ƒìÿñö˜ó¾xç¦ßâø–©Yx²ÏÁÕüG%µ©j ö,î®vÆ©½º»ƒ±ôéXþ Q¿ðþ½âO2~î[ùá·ý_ý³;±íøuñÚéÚÞ±“cuöŸßZÉq{§Áþ®ùvüé÷wnÿUø×gei¦ÚCiin¶ÐÇÄqGÒ¯QEQEQEq>3Õa±¸Òtù®`üÉ µ½ÿyÓ~ööì?‹v1éÍø¯[þÍð·ö}Ìßk–/²Çs8ýöÉ?»ýÅÛëÏÝÿzº‡vvÞ‚îÖÓì_J×g?Áü ÿŽ"W›[Iö¯ô¹×\Ëö¹à[¶ÿú¾ïÓçz»üñ‡üÿ½ÿŽvþï}ˆ¤Ÿçüÿ߯UÜÒ²(üßõ?çù7ÞüàêYûŸóþ»øzqµe#ó¿å¯úïâÿþÿþ/ÇýcÖWˆ¯a°Óü©n|©®w÷?‡ø¾_eÿÙwò*ú™{¢ßx[O—Ãz”Ö¿eŠÛ÷ÿÏ-é÷ãÿÙ—ó­ÝBä}¢Åu­gú<¿òíµÙ¾LœþûGíS\ZÍsûßÞÓO¿³ÿB<~¿v°¬ßTÕï ±µ†kûÿõpŒù„»_Iü9øYeàôúzÔ£™1‘²ñUÕø›ÅZo…¬„×× æÉÄ0÷—üú×ÎzïÄ [Ä >¡ªÜÀ‚ž3ÍüþUËz?ýóçÚù½œÏ$è)l-åšãÊ„sÿ,ÿÏõ®ÃJÑáŽÞßþ%³K1ýç›çlùÿ¹ÿ¢××.‹.\y6·ñíaç¬ÿHºÿoÿŠÞßD¿ÖOmöË«7O¹ƒÉóÕlÿ?>Þe?Ãû·Ç¨ù¿g´Õ­¿}çŸüwúqŒ‚ãû6+²iÿ¦Eÿ?Yÿ®ŸúþËþÛ.'ˆµ™®¬¿³õ |MO,ùÙíþ—ð\öÿ£¯o§Þ_½í^·k>íÂËa«/ü5vûÿí?ÌßÞîz×ÒQEQEQEyÿíü½gÃú‡ý|ZßI¿ÿi{}Erÿ¾ÿ?ú¯÷?‡ÓåÎÄ—?é½ÿöý¯ü¯Ëÿ,dåÞßRÔ¼cå}§ì¿fÿϰyˆÿôÎ9$ùY™¿»××¾ÎÊãÅ:¾—ooæùðÉ46þUçßÜßÝ‘ýßáþk˜,Ï…âÖ>×~5m.¢òþÏŸ:Ïø¾EtÉòÿØ;Tü¼zÇât´#O‹Â>-+¨êWim‹)óü_3¾Ïî¯vþ¼uúu¯‹tkƒ GûWNô¼¹ýïü_ý•—þ:W%¬ÙYßē–÷”’Çö.âÕöA·çVßÊÆ¿î­¿Ö½ÃÅzuÃ}›Pÿ‰f£žÎôì?ð÷_ê´Í_ÇþÑUMþ¹fôòÿ{ÿ æ¼×]ñÚ-µÝZù0\ÃÖ¶R?—>Èÿå¼3.vJ®ÿ4}Bõ¯ ñµõ†Ÿ›Bhãò­áŸç«~uô‡¯ílõ‹˜tMúãH¸±ívÑCÿ· òù>ÝÙ\îÇõ®ËÁ:ðׄl4©DQÍýï•Óq9ÿëWKEQEQEW?â/èšÝ±:ͲË1¶Ùÿ©ÿi}½xf±¡k³Ù_iZ}É—Ì?½óßý'clTI_ø²Í»oc¿9Û^éh¦ãÁñZÍûÉl‰ýöW‘Y~ëN·†_õÞTëû!ÿ×û¼}Ä­õVÿçüþ¿ÞþîÑÿŸóþzã£acgï¾Ïþñî«øtÇû8óOõ_ºÿö¿Ïëøïdd’CïeýÔ1~óþ™ÿŸÃû¿/ú´¬ïëÚšÔæÿ–±M §üôÙ½wîôf격ç’jî«¢Ù˧[Ýé6ÞWúÉ¥ù?Š4VÚéÇãÞ½Fñ¿žE¬Úý–yâxÎèNí½ÿƒïwãÞ´î<;å_ÛêUÏÙž'ú/ü±—wþõZæVngcÏþÂv?çù Ѹ’®.<­2Ãÿ¿å¯ÿ·»ÛäÆq¹š”šUݯúÝ÷_óËí_÷×þ„«ù÷-«k-:[ø—ÜÏkyü²ÿ€}ßö¿ý®ÛC¾ââòÿýïLû_•»Íÿ–rŸþÌçïm¥¨\ÅsoqwisæÿÏ{[¯î|¿Ën?à?? ϪéîÖÛËqîá?~oöÿÃÛÛ“‹¤EuýµoåA™£•w÷?нkJŸûO_ðDÒÿ®}CýV?ç–íÍì¹û¿ð.Ë_FÑEQEQEËøëO›Tð~¡§ü}Û´Û×Hþaþçúuì7ZwÚí?{ ¿ê¿Éþ¿ísìô®/o?ÑâŠÛý2Y¼Ïúåÿêÿ¾³·ø¿ÕÚ²¶û¿•ÿ·/û]ý]±µdÄñ~«™§ÛË/ï{û¯øïO½ó7C׿çïµtQÉö¯óÿêoëôoõY׺uÿïe¶ƒþøÿëgüŽ>â¹ö/²éßÙñ~êõߺÏÿòýßï}xÞõÄ藺ů‰e´»×/ÿѦH¥ÿN”|ŸÃÏûÍþ{Wøi2È·ŸhœÃ$}%¸c–þö?ïŸÿVÒÜ­·Ù.`0Ám9»’/Ý;ÿÅþ?ðƬ\x§WÔt«2FóÖà‰'?}¥uþ>ÿ?«£­zÿìñáø£Ó¯õùmÿ}$¿g·“?À>÷ëü«Ý¨¢Š(¢Š(¢Š(®WÆ“ÝÛø~æ;ke»7IÙGúÙ7 |ž¿OÖ¹÷ûsþ²Çß•öˆ?†Mñ\ÌÞ[ãŸ÷Ýu> }:ÓOþÆ´Ïú/ï u6òüñ·û¿ÃõJá¯#–ÛXÔ-e9–;¹<Ïúçþ±wÀ[ùôùÞý/ùÿ{þyöþïñmD‚HÿÒ?é·ùÿÙw~«Ì²yçý¯ÐîÝøîÿkqŠ­ÄpÅoæËäy1Eþ·ýŸÿgg¶6ÿ°åÞ/ñ%æ¯B zt‡ƒ/úË’¿ÆßÅ·çùGãËdÓ4´:&­q£êi Rü»¾Ñ¿ä?{gû-ÓŸök¹Ð|Eykoû¯Þù_íý¡à-»û¿ã]}¶µ¤KoýŸ/þ]þâßËþx¬ ßê>ñ Ä?ð’Ïû¯ùe/ï£ÿ?Žk¦±ø­¡ë¶éÚý±¶ŠXš9. >m»®Ï›æê¾ŸÖ¼Ú_ Íñ3â5ýç†íæ!˜y··?s;~l}»ôÎ+è øGIðv‘ö2Ütýä„|òŸV®_Æ?tÝP—DÓîê@~úP7%¿ø¿N?:ùÞúúÑ5+‰eóåóO›ÿM?Þ܋ױÍ\\Ks.e<Ó|ªémt9ž²B¡îä‹Ì“þ˜'ÿ_<½*ñÑ¥ÓÒÝÜy>Wï#‹ø¿ÏÞÇ=wœàd×·´´Òu)<‹¹~a'Ú·EåÿögæÇ çï}Ûž|W:¿—kö Ilbâ_?̉ÿÙÿwæ“wðíÿÇ™qªÃ}öyµi☫¼³ÿgqß·ÿú«x•‹SifÔ?ѵ/·yRùqC/úÏŸjÿè?/üéM#Ãfâoµß%¥·ú˜§ÿÙ»mùdÂýIùwWgsEoû¯ùëÿ³ÿûŽÞµcóßÛÅ¢x² -±ûý²IA{Ÿáÿ{üî\î|3$÷_|%,–‚Ô›‹Ýzm÷~]ÏvÉëšú2Š(¢Š(¢Š(¢¼Ã_ð¯ü#3Oªi'ËÒq$—Vßóìÿ{;ßï/?Â@ùF9ûhìÿÒ.âýïÚvÉ¿ýœ|¾Û1¿Û¯oõ³ÿªÿ?Åÿÿkß®ï›ï²q:Ì“jzͼ¶š”òÙÅþ£Èþ UÓËÿ¾›g¾Ô\ºµ×é2C.o/ïüŸ+÷_jûÏþ×ñ}ïåÛëmÉçñßü{ÿ³ëþ×#çuƒþ™ŸáÛõÿ–}¿»Žv*ùÞ£eö_Ü]ý›÷7QÛ?¸¿û7ùa÷ô¼|%Ãê3‰|ïÞÿÀ·nÿÇ¿]ßÅ¿o¢[ÚÛ{«ËcœŸòõÿÄÿº{üßž+3Npo~Ë¿Úæ’O&Ý¿¿¸ÿ÷»|µö/…´(|/á«Üå-ãäžç«~¦·(¢Š(¢Š(¢Š(®Ç,>ŸIµ³ÓÖë[Õe6öYáås¹½>e¬Qá [Eñu¿‰-'þÔÔ?æ ù?hܬ­µ>êãl{ryõïKc¡ø‚ãÄjzRÏ¥ÛZGåÚÚê0§ïüÆß$o±‰òó÷Oð’ÜY#ñ{9Ô&ó´ýVÇýQÓn?å _›tO÷]—¨þ"¿Ã´yÝ[ý®/ÞÃ/ú¯ó÷~ï黸w;Õ¼½´Ó-üÙn`Šújþ_ûßç}ˆ³­5™µ»ÿ°hdú§•<Ø¿w™òÿ|»@þƒî›§½ðåá¶û_Š>Î|×ýLJôßùz“øVYOÍ'÷›¢õcXºÿ… Óüi£Í}n/5k«Yînfþ9Y6ìþê®í‹ÿàµp~/ð€6νkuæÿfÝA ‘}ï‘£_Ÿ?ï}~§©Â\Ž;O(þëÌý÷›ÌÜ|¿7û_íU«Åbmî­Gú`ÿi‚þ÷—ýþü“X:®¹6©qæÊfüëÓ¼ð£Tñ%¸º×ÅŽ‰Ÿ2;ùmsÿįù÷¯ ô­*ÇBÒá°°€[Ú[•kËü{ñ&o³ÜiþÄíþ®[¸¹ùÉÙ±?ï¡û··ˆ^±Ò®®.®ó.¡!æ);wýçýóÓøºŽ>÷9-Ü×ù§;ê ‡nþÕ=¡ò˜?ÖÿË?­wúT—v¹ˆ[¥ÿ®¹—ÿeÿiþ÷¦à?–„sj×SÜJ4ùü¸Ï/üÿAçû½NÐ>í2ãY†ÆÞ{{ ©üÒåñ7—ÿÀ}þöÞ™-$iz-£Ô´èî£Ïúؾÿü ýŸ¼Þÿ¼ç®Ú²ÞZÙ@…sqæçýD¿ðûëî¯ÿ«ßðÎ4¿éÚ…¹72toöÏýõór殯÷ÒÿŸóþ?s¾Ä\xªßìš‘,ßêÿÙÿ>߇#&N'YO6kk©Žï2LI<§ç¹}Ç{ÿ¹ü#ýß­z‡®fÖ>,èþmÈ—ì1\ÿ«ÿ®{júŠ(¢Š(¢Š(¢ŠñïèÁºü$“kÿ:c«9?òËûœ¶~^üõ®_Jñ6â»{‹K_>)¼¯ø÷ÿâvþ]?à?*«ÔAû/Ú"‹Ïÿ®Vÿ»ÿ]ò}ÿö#Ü}>÷ûE»8­¡µû?ùÿÎCªþ]ÿ{þÏËÿŽ`}Åhdÿ?þÏÿ_ûý·³gk6S]h×Óýæÿп_ö¿ÕRÕ<™| æËmö¯ôO3Êÿ¾Ïýóþ·¡Ù}»G¶‡OÖ§žoüzìý×û_ð^¬}ûs]7¼?%ÏÆo&c¾7}öGüÿfü§ÒôQEQEQEQYwz.›}¨Yj7V°ËwdOÙ¥?òÏ>•i­!yf‘¢¤ õj³nt}:æI亶†S,^T»Çß_ö«¾øG.…cýr_ò¨?áWøÿæ[°üÖ¶ŸáKµ†ÒÇN‚Þ y|øÂŽýê¿ýiý¥ý¡äµù~_›ßmU¼Ñ4íJê »ëfžÜ:E!ç`½QËámk{ûi4Ø<›ÿøùÿYZÉÿ…eà¿úì?*OøUÞÿ¡nÃþù§ÁðÓÁ–Ó að툕:|µ×U[›X/mfµ¸H¤q\ãü6ðd|9`à4Ù~ø6âc,¾±’C׊þwÿè\°ü©ÿð¬¼ÿB݇åNá§‚âÿWá»ûäÕßøC¼9ÇüI,¾Nœtÿ8¦]xÃÖþM΋m,|pG§J§ÿ ¿Á_ô-Xÿß&¬ÅàO ÃÙ#Ñ­ü¬tǯÿ³Qÿ»ðî✰ýÏú¾:V‡ü"ºï3û6Ëýßþ!ï‘Iÿ¶…þ¯û6 }?Ï÷›þúoSYÉðÛÁ‘ôðå€ÿ€ÒOðÛÁ—?¼›Ã–úí«šGƒ|;¢^}¯KÑíífA°2Œq]QEQEQEâŸ|Aý§¦ é`ÜË-Ð2ƒ”¿…3úŸMµâºtWþÕôýFêÚxbÿYæy?Áúv÷ü«Ý#³–OõVÓËÿ-;ÿÀ‡ýÏC÷xÎÅYä¶¼ÿŸoÿgõÿbïO±j_ê~Í?ýøÿ=ÿön~û$²¼ŠãÊû4þwüòÿ–Ÿï{û¿Ã×n9بg^ªû7îë‡ðÿŸÓÔÞÕû7•§y_fÿ?7ÿgßûùÿ–Œ°YiPéŸñémûï–?óíó'NûO]tünm~'êÂN~Ó¥Ã.?í¦Þ=¿ÈÏÞ>¿EQEQEQEQEQEQEQEQEQEQEQEQEQEQEÊ)ôQLÿ–ß…>™E¢ãîÊŸEQEQEQEÿÙleptonica-1.70/prog/karen8.jpg0000444000175000017500000003713607503776022014366 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ FÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ð/ãüi(¦ÑE:Š(¢Š(¢Š(¢ŠRry¤¢Š(¢Š(¢Š(¢Š‘[?ZabiÉ»<æŸPw4ñ÷›èi¤cŠ)´Râ–Š(¢”)= ¥zŒRR¨†N=ÌC„R}ÍFOµQE x§ygÔRùí C¤(E6Š(¢Š(¢ŠPpr)é÷E: îjFûâ™E.ÜŒä~tÜsJÜqéEQEŽÚ '½QEuúÑEä?5HA?tP-æ#¡¤h¥^O3{zÐÍžÔÚ(¢Š(¢Š)ÊÛiKŽÕëSÓî Œô¥Á#8✃-HÀ—¦ô¥¢Š(¢Š(¢ŠRry¤#Š(§n#¡?˜õcùÒdúšJ(¢Š(¢Š(¢Š)§­Jß|SY²sIND,p6çÝ€þtå]¤ò3ìsNf!ÝT÷ê*(¢Š(¢Š)È9Í)N2)§9æ€2qHF QEQEQEQEQM=jgû¿GE:5V8fÚ=jO)£'±¤ rO½CÜÒ‘ƒƒEQRÁ§$º ÓZ½hØ=éÞYÆG_jpb¦¨aš…—i¤¢Š(¢Š(¢Š(¢Š(¢Š)§­H[“ïM¢œ¡Iå°>•vœ*–`:ñKqˆåz`søUÅ<&ô$GZMƒ>Ô⃰¢Ùñ‘I´z µbn¼jÔ¶°É_Ƥ¸Òr¤×Ò±^ܬÛÔÑÚOû‡oÒ›5·p>•M^ÕšJ(§(ÝŸZmQEQEQEQM=iÔSº ËJ[¾éO@Ñ‘Ǩ5¥<‹5²mÆqúsT'ˆ+ñЊ–Øòú‚?JHãË=‡åS˜1·=1š-¬¸9<ÖÉ¿|kò? z{TÖöùUäw­½5C0C€} tdáâ0Hö®cYј)¸TƒóJ—M+-¯ÏÉ¡¨omCÆI{€+›º’SÒ©¸&£¢ŠzŽ£ÔR7ÌÜSh¢ŠP2p(#óIEQEQM=iÔR¯Þœ)ûÕ*HŠ0XþU+H¡FÚ|ª®©Î2;ÓíÔ)(H$ÏçH‹´±ÿX$¼Š g#¤–X@ÍžÔÖ…”åô§[DÁƒŸQZIB¼XY@+¢Òï~Òåmp9SÚ­ÜÚ¬ösÂTƒ¶¹-ä†-Å SžEApÒ)l¡ëÇô¬k§ Ì\{•*¨b »øÔtR«m4”QEQEQEQE4õ§R…ÉÆqOHÉ88©#náß?¥@ܼ҇$â¦ÞL`ÔõbA#5< ûÒÈj]̳ç8ÚØúWMor’'̣͜t>ô®7¿8Õ4H‘üǤùñÃvÇ­i&Ÿ4Q‰™]YyYã¯ÔzTɪ¼[~Ó€Tå[ü Z³¶Š]66ùwóÁô¬COŽg9@'‘\íæ±¸fÆìsYòØ(\¶I÷5HÛ…bUvLß("™EQEQEQEQHzÒÔ›yþ¢œ¹gÖ‰’A¨‹Ö’¥VÈÍY‰DŸ)á»P ¤ûHÁ1ºýàùdÁ8­Qg5»d§ø—Ö§ŠPËóÈcö`jÊÇîÛÌ~Ÿ(­­NynËŽ9Ç¥wÀ°Ç–oJÃ×ôkqa=â)…€Î£qXQ½æ…yñ<–Ç‘óϧ§Ò¥šæ)¶ÜÂù8ª7è_¨$ñÞ²¦ˆ`ñǽd\ÆA èzŠ‚hÀF g#5B]¹l}Ú‚Š(¢Š(¢Š)î8t4Ê(¢ŠCÖ¬R·88« ‘ºxcЊ©"ì|dÓ(©U¾oº?µ//(*ì–32†*K/·?5`2.Òv°ä Ô¶¼W…`¹RÓ(Ú„þ•««Æ1ùƒÔu«‘F€€Q‡¶Þ+ ÓåX¹Uç§ÍÆ+­²³iQd”‚O@: Èñz´j/;^UÜ=‡5#Á¶ß:Œ0{ŒW {mŸ¬{f 䞀u¬ûÝ5í"/ Ös'Ò1Šc®÷¦QEQEQEQHzÕŽ†˜Ì0E5w}EN„—h¨\m,=iï~*ýáõ®ÓÂQfò3ØÒ½21µªwZ@R5,çŽ;V<ðß]Ò»{TF#,ó`Æk2þÑàŽàµb¼·(Ùó[5¾£:¸Ý3|ñ[ºv±qŒÊYk´±¼ûBžMh‹Gבڪ̻1ÁïX:Ëa1©#{O ï\ƤÊ%(UU(ª>Ïgö;¤?‰¬-Né¯å;¶ˆ—°¬‹¶Bà' ª¬Á§Hû”{ ŠŠ(¢Š)Í·µ6œÿ{ð¦ÑE‡­X=i›²p:R Rß;2ûã5#º·‡¨¨øaëKŒŠr.[ßø>¯>¹ý+ÑcO“ØŠ¦Öh’™2ßCU.'XAbpZÀ½Ö~s´â?_þ·zǺ¿ó‘¾Ï³ä°W?>¤XàÄÃuµÞæ}IÒirA1]ãiõ+³°‹ÊQÎGb+¥±ØÊzRŒ*ð:W!ª\yq㸮BæP÷#c€0 e^Ý4§nÿ“ÑjޏUȪ³ÛJƒqS¥R§¹‰íJÀŸ÷hQòýj:(§'Þü*P¸‹q×.Šîç¥p÷wEÜòjKJáG$ô®ŸN°Œ°P†iÿºJ±â RÓìþÑqE}ÈÀÉFÝÇzŽŠ(¢Š(¤=jÞùwÊ¡“µ5>ð«Î+Ò<-h×±!P" î9ë]&©oµ¢"c,zѤ¯—;ÖÊŸ—Ú—Óšz®{â®@¼ç5iA$ ¯8àvéŠÎ’0O>´Õ‡wlTê›O5eŠ£­cì-’9¯×_7n3Þ°ªÍ³äVÙiW¡Ô+óïZò ‘ÆF1ŒÆ+êÌ副ârkòÈïm£aYrÚ¶ ñUJãƒRa `gš®ËŸ­1>ð¥½øSh¢Š(¢ŠCViåCrµt?J‰>ð« cÜצøT²é˜;Õ«Û¶–xПºkJžo­k«n*®ã“úUˆ×¸©‡ ÊÄÔªÙϧ¥Døf¦ùÎqšSŒc½C·çÅK«Yä€X±ö¯ÖuÛóÞ±ûй å«kOvˆ€sŽÕÒÁ.äëøÓå]ëȨKgÔàb©If ’G>••}c ´ûVðÄL»øÓSï~Œri(¢Šsýï›E†¬Ô±®sôÍ2HðÇ*%“žÕnÕÿÒW%GÄ8¯YðÌ(öጫ t!ƒÇÒ¬j:FÉýiÖhctVê¼Ù©« úÕÔ\šx‚@Í1£<ã5"AœsS¢^G5Ëüª ?yª9dÇ…¯6lØ{s^=ª‚·-õ¬Îâ®[·Ì=ëj̆Ø·b¸•¤¤2žh1ñ‚3U.c§Ö°/›(sÞ¹™lŒj (¢Š(¢Š(¤5w€}wSÐ…ÉñŠ”€Ì§Ž@ª³.×bzb’½GÀ+p€ݺ2†ù[%Fp2;s]Ýõ¹x .Þ™éY2C°«ðyçµz6è*ÌgŒU¥9sVМ`u§¤ç=iÄðÔ TR¯?: íŒŠ©;c<×?¬Í˜Jò½aºb++<ÕˆO+[Vo‚+nÝò^‰…X$c#éŠÏº~¢¹ÛóÁÅaLrj¥QOÇ“×ÐÐ#-ÐÄâÆÃµ6Š(¤5pn§(R8ôœ…Èì*7»Üz“PÉÅu~ñèÊYC,‹±—€¸Ïá^iâK{åY€X tá]ÅHÀ9úžqW$š'Ca¸zŸjš3 ZŒüÕf#ÍZGÇÖ¤ G=©êNþ¹ô¯2¯SÍV¸¸ g™YœñUî\í®[Zfò›šóMQ³pÕÞ¦¾aŠÚµ\…­xhÍ]Ž]¸ô©~r*…ÔÙ°o\×¥dLÙcUh¢œ¿+sR³–P8éQ?Þü)´QE†¯¨È$㊕yS` +€ˆAlóŒÕix¢¢<­wú`F}ië‘L{4às\ˆâòQó^U~s;}j‘ëNC‡Ói‰æF8­SØÊâ“ ñÖ‘äÆ{V}ĸ&±®dÉ5œçq5QOedS(§+céM¢ŠCW•ÁR§½ >Ü€*6ž¦šä°µ!ã­>1Èö¯]ФŠo…WÑü¡¡‘™†9$ŽèGã\ï‡$ží3ÿ!^‘ÌcŠ~*Tf¬FƧWÀ5Nè–9Í2ÆÜnÜÜWgfaÁ¬gûp•Š°Ú½±œÕø¥)f¹/]ÆÑ´ƒ# ¯%º`dcïQ„sÒˆâg’ºÝ1´JÝhp*…Òílõ5›+í÷¬Û™zŽÕ“3ç­Uo¾)”QE=8íH˶›EQHjÁ?6sF}¸¤ëÍ 8!jiLn¡”`ô4ØÖ^§¤\Fÿ õ(£m³GpQÝ”ŒÈæ°ô'?èÏŽ<Ö¥ze§1/5X1¥.Åô©#?6ÜÔØ85 !ïô§¯È08ÇzV| w¨O<Õ{‰Ö8È`qí\N½ÞFþZdõÀÝX:9Ȫ^IÜ*õ´ƒŠÛ±s«ÛÖº!*¼]‰¬ÛÂ2Ù5u&Þ dÜIœÖsœÔO÷¿ mQJªK`u§Œ¯dzrÆ$? $úzS\b==óMUÏÒ‡ûß…÷¿ a«‹ $îÀúÓc­0œ ÔÇøÔ„Ö¥‡ýhúצhøm®Cæ³'8þA?Ò°t‡1ƈGìÿ§ÿZ½KLs%´gÕE_#Û›xÏjP¼Š›?.)Žûzv¨š@Z˜dùp}i<ÜPÔ&qК¥²I<׫Y¢ÊãëhBò)öøÇJ¼=jŽٌ=)&¸ ½s‘X×dry¬™Ÿ9ª¤àdÔTQE$c©«ÍÉäpÃúúÕ2®ߘûSÍ» Ý(ؾýMFX;FaLcó})´†µ$\8þUÆ=xî¼P)j晟yxâ¾Ðü- .G2Å#~8þUäO‚9ñ \~ w¸iñùãÐ/ škýCI»çùÕ‰Â}*¼snËf¡ŸS‚Ý¿xû½–¡"·Î&>™¦M©[]¡ ¬†ª>§ooѸ¿Ò¹íBê+‚N>õÏÜ&ç·ÈÛƒZ*¹O¨ëU&c c׊„Ü•8ªW2î$Öl‡æ¨Ÿîþ5QEHSG9U¹§µDfrNÆšÎY‰bI>´Ê_àüi) jŸºXŒýT ³Œ÷¢E#‘Þ£ÁÛžÞ´¹ÉÇzÑÒdòo#a×5ô>âËuð ¶ÕH¥F'¹ÆxüëÆï¯Œšl²GÆ.#Ýq]µñ´ï^ƒÈÅm`{PÝWœTr:Ö& d|¬yü+*UÔ"ˆ©Ú3ӚĞÏR•‹<€sÊÕ»>Í<^mº2+à÷ÛÇ}áé¡¶9ùj¢ÿÂ;#Î$<‚§c×Íx‰4xÃ5š°8àO?q2Ü eýÜ™Ç9õ¡YX†SøVí¤Bâ dÖv§Ö±]ˆ'š­+äõª¬ri*(¢Š(©cˆžâ•Ô/¥FŸ{ð«Å•È#èhxW§ ûÕiFAúV‹?ÏÇ8¨QYŸ8À¥˜QP8Áü©Q7p*ÔË ýÙi7“Ïà½Y#™Ç“´ìþá×¥Rˆ!ð|£`ßöœ–Çm¢¨øS:~¨Ÿ”œ^Íer“B¬§ ŒƒW 0ò‚«\“·¯50†mÄRÝ@$Ed›2Òì`q޵`øwÎBñH áo­dÜé“AÉCŒãŠ©-³Gç<ÖMôeX‚:qÖ¹û¾ªbO›šè4KÊŒÆq¶¥Ôˆ–2Às\ÍÇÈÆ³¤lše QE)PNjDÂEÓ“QHÛ½psSÇ#ǼzƒÞžò¬Ì0|tªR}ã[ÓEgEf$w¸«º%óÙj1J‡nkÜìfó`Ïñ(5uvíþt݇4˜çÍ;Ëç­)‰Jã=jÕ¸#¨â³$œsšBHäU ÈâlðÒ°ï-£Pp+ õ@/AY)škÉNy5By2Ü®zÒTo÷¿ mQE98õ©qƒJt€° ?T‡r–ÍihöbYrØÂúÕ»Ë5ICžrEtÚDöÖIâFÚ„ôÏÿª¸=lÖ.6 çùÔ(Ù?1êi²ÞSÕG–AäñŠ…†r)ca±”ôÅ'zìôë8 6ÌMö¦RÝñ¶²4HÚ¬[“*=iuë6·.N@Y™Uº:Ö=¹Ä û×¼xq¼íÜ““ååZÃ+iÝ[ûÔìQL\á½jL’¾õJ`ìÄøÕ)¡çÖ²îsqYÒHY‰'VEíç%OçXwƒ¸f³%o›9Æ*»K×°ªîûŽi”×û¿GESÝ|¶*H?CL¥5`[w€Êš=àl¯SŠét{U.$ävéQê—q]}¡›†8ëN0fÓ WÜGS·­qZº”Ôçûç¾i-£ÞÜýéòI Á<ô¤.¬1ÐcŠª[÷™4å8RÞ¼Sïší4i×û!i8®OOÐ<)µÕÃîDÜ?šè|Y¦Eugys Ïs.3Œ‚kÌc;^½«Á׋&n3Ê®+«u.áà €6 `Š3ÎiW…KÔqC tµBo”€>•r óXwD(nÕÍj|Å«I*¬²U|ÒQPÑER¾7t¤¥O¼*ÊÆÆ2ã¥H£J½l¨âª~¼Ö¾›~žaŒ€ÄŸ”3Z:½³”Sž3Ȫ֛¹eŒä®9_çA¸o0°=:WOà¹7ëg$÷áVíò[° h ÎqVÍ»²•Tޏïèj8 hdS·y’+ª±oâI[#h<ïãœVݵºØIŒFC¯,Ç?Oóÿë¯3ñ|kˆî‘>èsŠ¥‘Ôv§Èß.1´ûUpŸÎ;€)&–06Ä…G÷‰æ¢‹` ž}ªIæiH' àÚ«V–—tÖw°LŸy0üëÜ-õ‡–ú+’7[KnŠèsÊ·½sž;ðùºÓZxT<Ö8ù€æHOÝ?‡Jó[‡¶”q]Ή¯¡Y¸®ÒÓT«óf®›”•qÆïåQ¼Øù[¿z¬ó…9ÏJ«%Ï«=À#­Tšã }k"òqŒW9zÙbÍdÎØj¬y4”×û¿GEQES“ï~rÒãÈ|õ­ Är óXU¯*s÷X7˼|RÈ9|ýx«I<–’Ç*7ȼ*ƒœí]Ö›p×V–ò¹…B‚äƒÓóÿ9ü‡˜øäÆÞ*½+ò© Íf«„ÆÓŸZk4nqŸZÊ®@ëP8þ!L¢¤O»øÖŽ•h×Z„Q„äŸA^£,æËM¶¹DùcÊÇcÐÖ݆§¡aªÞÄÑ‘ó4';€Ï\pkÉ<]¢6‹­JŠ?q!ß…MeZÝ´.9Åuzf´@µtÖz’?Í‘»}kYoÓ$ÕY¶°%[úU9#rp®9õ¨^ ¥çf}¡sû¦ü«.àLsˆä<úVt¶—2ˆ›>üU94Ù1~*¬Æ*« qM¦ìõQEQR'Ýüjxd1¸9®u{uBpØZr)¸Ú2ƒŽIÇãVX‰aXmÓ>_9ÇCëïZ3Ëqi¦GQ²:ž gðüýë…ÕægÔf,rwc®j8Ût„v#É3»… Œ6hpprj?/ÑÒ+¨ï¢d7k¼1µ»Šàœ<ôõ§Ç)SÁ­kÒ¸æµíï÷ãæ«Éw¸u©c¼ÚÝjÚÝ‚ëCNXpÕVVb+6vbk2àš¡"ãéP„ÏZk®*'û¿GESÕA4ò™ëLäV4ú)UŠœŽ =fu8<ƒšÓ´¿2Êâa¸È1‘ëÚ¶\”ˆÎH8=0:ä{ÿžkŽºm÷zóO?xñŠŠCÇZr)Û¸ô¦³n,OáJ^õ`GÇãSYÀ Â}k®¼Ž tY#2ýìž´«w ©Ç*Ü[½È7YWꮦº»²’H¦ó¤]¹aÀ8õ«¾ ±MO@¸‚0€ûTs…^Œ¿þuã²(.Q†2pG¡ªŒ nA§G!Í\†ã Ö´#º8ëR‹’;⧆÷o|U¤»Ü84ö›rõýj¤­ßvMgNã$cš¤Ç-J©ÆMG*àUr3ÅG°ûS¶z6zqõ©wTª˜¢Hw ȪàcKEbœ±Áô­~ £«±.ÃåÿëÖD‡æ«rG»œqOŠØ7Þà~´³À@à`zUWˆ‚yæ–tÕ¢~Nœç­Y±]×QŽÅ€­ÛÉ]õEp›ÓJ¢³me‹ƒÚœäÉÁ;‡ãµM§³Cpªï¹è:šïô‰â%wȳœd#‚:zgäšÄ_eÕ."0W 0ªr®åØñô5Zž²sÍXŽb;Õ…—"œ%Õ˜§ç­[ð9¦HÙµS Ýj  táÇAQH:­ ù©”õLŽ)|³íJ#÷©aSÅ?^•m-A^•Fö×Ë;Ô}j•¹ õ«v–Ö¸¡§&©ÝYÜGÊgƒVÁÁÍJ€¼x©\`aU%\¸5[co#Ò¬«BžÕ~Â'¹"RÎHÀ­;£¿PeÏÌO'MSd4ª¡'>•bK0^á†ò8QÉ‹s·ýR€IÀÏQ]7…on®±;¡f=JüÃõ\W5ãËd·ñÂÆÙ Ûˆ+·ö®P“Œdã®)¤çžô”ªÛjuöjvóíNYH5e.Ô¦\ŠŒžæŠu5ñƒéU$ŠE=jÂÇëH“À«Ú³rjäv uj()å0*­Ä[”šÃ¸d‡*P3Ž)þDÈCOŽÊw`‘’Gu t$ãúW›ëv¯k©Í‹† R@ñ“Çz–áLT âš®:gÞ£ywVš v OZeÔ¤~ä|ª§ ïõ®ƒÂ“Gou#mk(Tþµ³5ÞýHm$ á»b±5}6h5PC©ô²éÇËF’-ŽA8Ͻgˆš)qŒúk¦Ñ›çŠE;d‰ƒïž*ÏÄË0‘YÜs»zÇ#†<ŠóF]´è¤18aD¸,YzTtRƒƒ‘OÞ=èÞ=éâ¥F'­^„U¤LŽj_#v=*Ä6Š9ÅYPºã>µ6*-ÜœTð1 2jc"â«<¹8¨&mǃøTF2GJλ‹Ëp{ÕµÔ9ìdXÖ8“y`dö$þU·u­Ø5ê›{e€¼wg'è=ë´Ðuˆ. ŒÊ`dBrrÀçÿ¯^gãÈ#¶ñ5Ì1}Õ#ùVJ1SqOi”ç)¹ã§ËOD&LO¸O"ß~pOÝÁäûÖ`,O"¯ØL@ …OftV74ªodË›G{×Yd¶×2‰æd’Lqòœ?aërý¶æhb•î•õ²4­6[«±tÏ9»û]*×Oýô¹P Bç·½Vø¢Ò,Õxù˜í8ã“éýkÈeB®7Œ3QÉn9&Å Nîj(¥"¥ óRÆjì'¥hÁÈÍ_2¢§U {ƒåŒ ÏžB3TžN¦‡=êC)AM’|.3Í@òsNŒ‚Àš°ŠÓ.mDÑ0ïÔVLrù$‰±\€ja™˜Üâºo_ùrªOœb±üYsö¯]˸6_¨úUZP¤Õ›{VÀûª;šÑ´ÓÚêE‹Êd…yvÎ7SXúĨ÷Œ±ãË_•@ìg!ùªPH5r ˺ùŽF:7¥uV·%ºýŽæB¹½ÅtvñÚ²æ„=Ûµh[Yw4Q 3`gÐŒö¬›Û¹’ü|)<¨9ç½n|HÓ&—örÄ Ä¡˜ƒ÷†O\׋ÜÂèê­’1Á¤Hš3¹>e>¢–å#•<ÓÒ©ÑETÔål¹ àÖ•³Õ§ øÕµ Úœãä5™v¸&³!¨Cƒ“JÌnj'8ç½@Í‚02jh_š¿ÍHã9êk;T³8óнþ5“ÎkNÂâ+l3|ÌAÒ¨j’y·²>sÈ¥N«ºµìt—” |½q[¶vñC*¼±8ÀqÓµQ¿Õ¢…eŽ0¿ ŽÕÆ\¾ùY½ê5lÔè<Æäõ©]4Œtâž“+cœãîŸJé´=qˆ''x<1n1ô®ÆÖPÉ4LÛ˜`¶ìcÒ².…Í̆á‹™é’ô=/]±ñ>’–Vo,#&G'Ôg§±üëʼCà‹í.ùË)g÷e†23Ûü+ž#m8Þ‹üjôj ÇnµŸEQSP*xŸ´ ”ñÍiA.H­Þ¥2ñŠ«6¬¹£äš€ŒRT.rjûÆ¥wãZ½ܸ5!]J°Ü§±®nöÐÚ܃±¹Z«Èp{æ ›™[ë]¾—¡ 4¬¡ºàÖˆ lÇ€‡sëU5 T%»nPI\•ÆÜJ]ò7góª®9¨êhÛ¦:Öœv2ϹdDAŒ»`¥g¸*Ý¿ ¶A\Eñ°/‘;æ3×qÎ m.£ÅÙHÈdlH=ê N+"xîãe'#ct®ßAñ•§‰4ßìb%|à+÷ãßÚ¸ÏøR}2ãz=“sËЃßüô®áZ)YX’:T˜m8¤¢Š*Dû¿:œ8«Q¾+B p+B)²MæwÝL•÷ ®Ãp‚–ÚUŠt‘Óz«d¯­]ŸkºÌ€ÉáE\ÛˆƒA;ºU¶‘VîD[Rx0uÏCë[&°°Ì±´ .âÜ:è|iyZC,»¸=¡®:ÆI£™LG¨>•ëžÕ¡Õ,ä²ÕY\n»’9Ç¿¨ïõ®'Ç~}à\Û¡{¾ëvŸLÿ*àpi´QE9>÷áRRŽ•e>\U¨É ¹˜ÔË'¿4íùã4€äõâ«ÊÿT~XÒ„=è ž´ð08§§Þf6äóÚ¬!'W#ÆÓœšÎÕ,‹ç"üØäW-(`äZþΊ­ÊàsÔzÖuõÐyZ'mÄ•@ªr[È-÷¸àdý9¬™Á'r©Ø§ÅBC6_ ¥š !;d]­èzÕf|RpÝqÚ¯M:O·`ÛŒü¾õFe'åR@Œ­*‰4û¼6U‡"µÙäÕO™òŽØä“ÇZßÒô½>$ýíÊ™s•Ãcÿ­üêâÛI£È`ãiû¹=º×[asý§oqi¬ 0N Iè„ÿËAŸ~N>µä^0ðô¾Öå³~cûÑ?fCÐ×;EQSRŽ•:œŠ°­‘S£æ¦Y8柿#¯žaÛòÔRH:t¨÷zvëKŠ2: ‘çO^1ý*ÌOÎjüo“ÅLcÜrkŠÕãj3(麺»yUmŸ*íûùéþšÊ <øîM^Áh á·>1·9Ϩþ•ƒtà­†#Ò¡IŠ.2ã׸¤˜3ÈYXÈ;ä}*´­¸ýÞÕàÔð‘ÎsžØ5qºù{FòÙ-ßéIµ ò´íæ9ÌÏ­,wNª6±_¥X‚öo1NòO¿5ÑYêSËÓ @Ç?^µ±kâ1ewžjÌùV`OÊ}G©â3þ#$‹$ð#OhÝÞâOªÿ*ñæVV õÚ(¢¤O»øÓÁ©c<•[52·qS#ƒO$gŠLÓ 8¦±ù¾”íãÞ—pÇZZPÄsR#’qV!lн nǵ^\ã5Åk¿ò›ýïé[2HèURPÇ,ÝÀ¬öºŒ1 rylóP]J®~VbØÉ'½UTy3Žqך dwr{w É€F>¢¢m½ê7jUmµ:¹ó7­ZWIe Ü/|w¦Ü*<¬QAïãOœ­ƒš˜p89(9æ—4´”§­ëFhíÍHƒ©«sZ·Õ¤|×%­ê3¼?•kj“G0ˆF€È¢ôÿ?ýj©Eb2¼€2¯ùíùÒÝܦÄXDp sÆsÿêªË"ùLXüÙãÛüÿJ,€Uƒ¥Iö5h]ÚDB¼uê{ãô§Ûéwü±®ðFr¶¡¥–Î F•\‰3ÀéÁÿõVuÄæwÊ£€>QŽƒÛi9UÆ®×O¹¹¹hçÂ\€§nüyéQÝZ ufUÆW‚çëm5‹Ç4¸Dn2â–\¤-"¶Ï'ðÿ=ª®–'ÛåFco皸Éö‹dÙU…cßÓÿ¬ˆí^)¶n zs]„Cu¢Ic<Œì¹–Ù‡XÜ€p=AÎö§Ü|8#D¼¹šØ ìnØÜÎ@ï^QqŠB„`©Á¨(¢œ­¥IJ J­Ÿ­1ŠåõsF_­J©6âÒùƒŒ†¸¨¦’LIÿ¥0¹p7¸ÍMöbÑ'hÆ}»ÿ«0ØÜ(>D‰*“ŽüúU›‹8mZfÜ_øçžÿ•O¥¼PydvžIÏÿ®²¤•¦;IžN)_K”í1‚Á±ÏN¿þº©=³ÁËwä}:ÿZX®¤BæÇ±®ŠÏPw³“»åbßwy­xî5]òü¹èsS¬AQHÚ]ø Œ÷ôª·‘(RÌ@HÉ­–(ìËÃ9cÈèFçT/<‘*´(¨¡³‚IÉgŸÃõ«0ý‹P@<©'ê?\W²\Þ-æ“a¨¡.ŠÆ)pz+®9úWΞ(¶û'ˆo Ù´¤¤è+¬jGûß…6Šr¶>•%:¤VÏÖž H‡œSé;qŠZ:u¢O½L§i«•NŒA÷®sV9½—ýáü«¬’‹c8e¯¯þÍY׋Ì÷/¦õúõý²n-cócpWÿ?Zˆ¼ÂŒÜãŸóíP­Ä‘©Ur õÓÖæ@»s‘NY °Ý·õhK€. |ç `ñíZ|ÑÊ7p«µŽxÿ9ý)Ú…¼QžGf# «Ï<¿éXS[4lÅyAÎ}õ¢9Ù(8æ·´}CìÒÇq,ßÄ0=0A­ûÛ•ó¡1R3º3ÏëéTïe•YLlŘw÷<ÿZ¶È# ©0çßq5“r ÆT«3œö©#¼C,¬VD8rGOð5é »–h'ÒîÎèî£ýËÀuéÏáúW ã­IM@çBÞUÒálõ÷Î3Ÿzàj6\})´QR+gëN¥¤{ÓÁȧ–,)Ë÷ >” ÑOUÏÒžÉ>´ñS&TçµH­–ö¬ Oþ>äÿ{úWku§M&YX(BŸ¯_ÈþuÏß#IkÈg)¼gò?f ñ±ŽP@ê9ïOóã]êT²°ŸóíTä@ *r=j:•NE=~ðæµ¬¼—Êÿ>p1Àǯæk§¸ÑbM>;†••‡P: öý[þù¬ ûeØæ ÍÆXœqý9ü«þWÅ>%g8 ŠÑ†æâ$*²¤ðsþ}jä2± îÝsëŽ+@™DK¹Ì‘·Lãƒô¡¿y˜Ðrp8žØýk:H™›xQŸóüëCGÖ®´éÓËc€Á³êÎkÒõx-|A¥&» a£‘WÐG÷îÕãšþŽúV ÑZ#Ìoެ|`ç½DË´ÒQEI¼{Òƒ‘‘Nœ­Š”6E<Š’}jhú{Óé@Í.ÓèiÁqO_÷qNÖ¤su!ÿkúW¦JÅlÚˆ&c–þ˜ÿWêI ã«çvsɪŠÅ#­²œå~oQLv@>üœS@Ú¤÷¤O½øSÉÀÍ[Óˆ7€\òO¥wëg&…"n9U “×ëÿ¡~uÆ%ìžln>½}¿ŸçQ^§ËóGówèyÿ롘äÜŒU‡"·íeó-†Øv‚@Îx=¨­+hâi¾krvò q’8÷ëü«OOŽÚuX$‘’6ÁI`Ç~*•õ¯‘|‘Ç2º8VÐsÏõ¢÷MžÒ(âb_æyüñUÆ‘,„â?1ù@é×µu^ÔçÑ.™'BÖ“’ÄHÃýy­øvÚXR"ÿgÜ’örŽ|“×i=²q^?©éói·’[N¸t<ûÕ-ƒÞ£¢Š)ÊØúS•³õ§Šr¶j`qŠž¤ŒóRŠ“ËãÞÛ&“† š~9¥#ž:V ÿü}¿Ö½28 ІŠC÷pùÈãû%qž!#¼*›ŽŽ;~˜¬<´9ñŠ‚¥YF=3ÅY„IrÊ‹|ÙB¤Åe‹`ÿŽiÐ,[²²¶à~U)œþµ¥nò$ "•$fþ#óÿõÕ 2“6ìAž×"H¤W;—/<óýk4çwû^ÕjÎå­ÛvãJÖ´Ö0drÜÓiéþ•Cs¬Mç¶É>Rr1éZzMùž)c–D c; òþêì> c6²…òÔã'®>µÑÇ{j|—޲¢)SŽ¿pÿX(.Nácrúþ(+sLšÚ;94ÍH¿Ø';sÝOÌ=ÉX~,ð±»Í”Ê‚ö·ÿ\÷W‘ÜÛIm3G"•e89¨Š(§o>Ôålýiâ¦VÈÍL‡œTÉ÷…NŸ•N‡ ô0ã’iÊ€._ΜSž:SJ‘X:ÅÜŸïJôå´H4HµK Ÿ´[íU¹Œ 4}G÷sÐûW=â e»so†V›ÔòErâ<N;Õb¤T$`✿|×KáÍ?í .Ôþ÷oÐÔ>$\»3ÐìÁÿþ•„§#ŠÙÒ¤"ñJ îs´ßý|þºÄJ²I<‚:þ…e‘Œ·Û šŒù[?Œ>yî1K) '·ZM¥’@=EK4jCrd{Õ­(¶Â»‚‡p¼ú)f›mÌ€g`c´zsZvš´‚(± {zt­ M~pø‘²¡·|ç<óÏë[öúý´×ª×Ȫx÷ÿÙ«©Ñõ -~ÀhÓÎT‚¯m'up:sês\÷Œ¼0׫,þBÇ©[¨71©áÇfQ^Uun`¡éÚª²ãéM¢Š)É÷¿ x9õb*qR£çƒÍ[#Šxv Ö¥#š•>è§R0$cÎêñ÷'ûßҺȠ»³ó­Rå’]Â#g¡ç9ôÈ{×¢hž’ëAš;«ED eùÞ1ÈϪ:·Ã¹bpæÉ|¯ã0> üóʸMOßgwe«ÕÇo¯ùë\½Å´–ò‘Hôô5hX€I¯@ðæö]9®n«cåýáÔqõ~5ÍkÌ%›+Èì{úOÖ± hi~k\*B¿9=qÛ½tº†–#„³Êòçæ$=ÿ]ß•r÷ìX6㑌P2O­N‘ÄŸåL}Öò²¬œtÊž¢ž. @ŠˆW9Ë ÏçZ‘I§IÍiYSzfÆ~¾Õ¼„©_±Bœî,Ç­néö&ú8ÌVvãž.Ì߆jÅΙgq欌mòAêÿ9«Úf›}y2Kå+ŸÝ€Nœp9&µ,gQö™ZäŒð9ñõý+Ðm§ƒ[´Snâ[ûTÝfAŒjò?è1YÝ ËEÿD¸ù£ÿd÷Óœ×'JŽŠ(¢Š”ŒŠ‘š³ ±çj3Á©5*®ÞôïzJç5?øý­{ úÁ­Ù¤‘3N¡DŠ«Ê1†Qü«Ù,mR[8e1íó¥3•>§$:~¯d³éWqª€Íqí\T^MGIU”sŒ^=â?½®£qmîòä+ƒíÆk ‹®CÆwrHãük½µ´ZÀvÕáð@'·ë·ò®6ÿD½2ŒG¸¿ 7qî+&M&édxżŒê2p¤â’Õ絓*6öûµÒ‰æ½Óäy˜ê¡HÇo_éÿ®z癞YYºzƒþsT§d v޾ŸçÚ«n9ûÃ5<.cqÅG"4Ra‚8"¯ÃwÄ k2ûc¿ýn•R⵸1± ƒÔv®ŸÂ·’A¨Aääã—ö'¯µv:«y”¡ñÉ qú¨üê{[Ûv±%”3ɔϧíÕ*åïc’—Hå*§'À>ýøÅuž–æÂa:üÊ1Éî23øàÖ¶½£ áy§Ç“sþ“fËÎ[wùšðíNÑ­nJH ö"³(¢Š(§+céR+S#çƒV#έ£ñÇ*7<žj`7ÍJ£u§×5ªŒ^J?Úþ•ô~£âÏÞÃk9×m–hd)!™Gðô­ËO‰KH¼ÍvÑ[+ÏÓ¥9¾'x,‚®Ûx?+…R·ø›à›{uŒëqqŸùfÿá\£â¿ \x–{“©+ÛÈå·ˆŸ¿>•KMñ„~×tnµV1퉺géVÇŒ< š‹Ä/Ùp1*ÀÀçÐ ÎÖçaŽÚu8n3Çÿ^˜ž0µX#ìÒ»#ôãô¨î|Uo:mH¾ùÝ¿ ½aãÈl Ú,ŸûÛǦ+u~-[-m›M™¥ŠMðIç“Û§§ÃøŸ]¶×5Yní¬ªHrcß»žç8…æsÒš[Ú“"ŒŠ2(ͧoÿd~T¢R;SÅÓtT‚ùÇð­H59ü³Z”kƒ‰úÓ†·0ÿ–qΔë·ñCð5qp÷4ÏÌyÅÿÙleptonica-1.70/prog/modifyhuesat.c0000644000175000017500000000705412242266113015326 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * modifyhuesat.c * * modifyhuesat filein nhue dhue nsat dsat fileout * * where nhue and nsat are odd * * This gives a rectangle of nhue x nsat output images, * where the center image is not modified. * * Example: modifyhuesat test24.jpg 5 0.2 5 0.2 /tmp/junkout.jpg */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 i, j, w, d, nhue, nsat, tilewidth; l_float32 scale, dhue, dsat, delhue, delsat; PIX *pixs, *pixt1, *pixt2, *pixd; PIXA *pixa; static char mainName[] = "modifyhuesat"; if (argc != 7) return ERROR_INT( " Syntax: modifyhuesat filein nhue dhue nsat dsat fileout", mainName, 1); filein = argv[1]; nhue = atoi(argv[2]); dhue = atof(argv[3]); nsat = atoi(argv[4]); dsat = atof(argv[5]); fileout = argv[6]; if (nhue % 2 == 0) { nhue++; fprintf(stderr, "nhue must be odd; raised to %d\n", nhue); } if (nsat % 2 == 0) { nsat++; fprintf(stderr, "nsat must be odd; raised to %d\n", nsat); } if ((pixt1 = pixRead(filein)) == NULL) return ERROR_INT("pixt1 not read", mainName, 1); pixGetDimensions(pixt1, &w, NULL, NULL); scale = 250.0 / (l_float32)w; pixt2 = pixScale(pixt1, scale, scale); pixs = pixConvertTo32(pixt2); pixDestroy(&pixt1); pixDestroy(&pixt2); pixGetDimensions(pixs, &w, NULL, &d); pixa = pixaCreate(nhue * nsat); for (i = 0; i < nsat; i++) { delsat = (i - nsat / 2) * dsat; pixt1 = pixModifySaturation(NULL, pixs, delsat); for (j = 0; j < nhue; j++) { delhue = (j - nhue / 2) * dhue; pixt2 = pixModifyHue(NULL, pixt1, delhue); pixaAddPix(pixa, pixt2, L_INSERT); } pixDestroy(&pixt1); } tilewidth = L_MIN(w, 1500 / nsat); pixd = pixaDisplayTiledAndScaled(pixa, d, tilewidth, nsat, 0, 25, 3); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } leptonica-1.70/prog/reducetest.c0000644000175000017500000000474212242265737015010 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * reducetest.c * * Carries out a rank binary cascade of up to four 2x reductions. * This requires all four rank levels to be input; to stop the * cascade, use 0 for the final rank level(s). */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixd; l_int32 level1, level2, level3, level4; char *filein, *fileout; static char mainName[] = "reducetest"; if (argc != 7) return ERROR_INT(" Syntax: reducetest filein fileout l1 l2 l3 l4", mainName, 1); filein = argv[1]; fileout = argv[2]; level1 = atoi(argv[3]); level2 = atoi(argv[4]); level3 = atoi(argv[5]); level4 = atoi(argv[6]); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); #if 1 pixd = pixReduceRankBinaryCascade(pixs, level1, level2, level3, level4); #endif #if 0 pixd = pixReduce2(pixs, NULL); #endif pixWrite(fileout, pixd, IFF_PNG); return 0; } leptonica-1.70/prog/hole-filler.png0000444000175000017500000007407010606270437015377 0ustar dandan‰PNG  IHDR½Há2 pHYsb&2 IDATxœÔ}mw9Žî8U²«cï¦w²;³wÿÿºçÞ=Û÷töÄ=r$«jˆÒÜHU%KŽÓåLÇR‰Å·‡ßá¢Dú·‘?Á}®Ó¨ãriá²J}%ÖÜ=t µm‡‚þBõ{“*¬9,ÿEFä~úÇÝh1ζzœ>€fÄâø&L³Æés>Sh™Þ]”‹Š†8ìÚ ÃýC×6-Œ,Íàh”qŒhž¿fª˜ŽQêv‚ææ§›nÓvd¨´=)Ï‹]–‰9òái÷eÈoŽ–åòZpßµÔ PÇ̇aœ"GMKÔ5Ô`À#3ž'^ ßEèà ¹{ &4Ôl>¼¡ë€ˆh“›Á”¢ï3€ˆp|ì ûqèûç—Û™©~{{ÓQ È]–³ôœ“v’†F>¾|>äaÓ gÓíMG„†šÐ´-F¦Fš9ˆ|àaŒ#èw´Ûmš–šÛu ­üõ°{þÛóÞ ¾ ¿+Ð3ðn>m?Ýêè†È†Ž@ÌÖmNõ3rŒ Ž8ö|<÷Ã8ì?Ï‘bQ³`·ÝthÒ=Ãð#Öÿ§]{&…s<öÿ÷ Ã¶LáF¨¦CnnÃD2nEcÎŒ#Ëô8ôcƒîîvÐ"xÒ"æØ?íŸûþ©GªýBø.GOÁûððé/:B@ .€ÒÐ -zÒ§ÁM…1ŒÈ`Ž±ç¯Ÿ<†ýaX¨h°ÝÞo3Ù gz;ÇD£6fš¢L:Žüõ¿ÿëÇ—ßFdüºûÛ¶kÚ¶£@¡C ™¤Ó¾{Áˆœ…°"À`Nˆ@„D«€Áàó—Ï_RÝÂw z¼îãüÛýí:€@ˆt*LÆ6qµ £àò±° €92sŒÜ¿~=<í‡ýsMSÐÃÇ»®ÂŽ+~I鮉l 3Í©’»j³ûÿü€‡Oư½ÛÞÞl>¬iM”èK{B6WÊ™™!úS’4Tˆ@3øÈ_¿þ÷=öHÀ%ðM„µ…$à=üå¯?tAaë JeÌnT˜Á` K8UEtr2"˜9‚™Ÿ{þúõ·§ÝÀý3»v5 vûq»¦ Ülg†›™èA¢gßÑEB0è #øá°“ÊFcº{èš–Ú÷]‰yú&÷ p´ek¶–·¡ ’1 @ˆ!2Þ3­»¶û¥Waö²t)zšnß¿ïB0^Olž3»…‚ÑGƒ“l„Ò¨¯o×:˜ÄÄ î˜#º>vï?üöÛSÿì[ßÍí¶%?ˉ։¼#ÿ毖¾hµ’¦À!*5¨í~®üt÷aÝ…ŽÖRvZU FÇ¥É&f„M`P`™¹ÚÖ%L2t!‚À¼¾ÙlrÃé⻽/_þ•9¸q`d&éJ¤Ä ×$&Ú ™” ‘뽓³›ô^ ’Ÿ{1¼—7´ b}?NÅÏ`-I¤R¤jmüøó‡ODˆ(M9[PKt‰€è2æÇ¹«é™Îë  ãØœÓgÒ…èY©Ã1?cbá „˜Å>R‰Eg!2¾¸+ð¬Ü SøÊ>å”ìÌÁýð–랦ýÁ3ÈürÀA?Få€P¥õˆSVÄ´rÙ(¬92Ö·ëõ×v³ÛƆÀ“õÛVþàZ¡Ï™Ög;\ʧ–(5´?mÛû{¡;B^Ö ž ?R¥29ËéC^D)ûR´ÿÌoçÒ…èJ|O†ƒÍˆ/†ÀÚzã’¬³›efLÖ~R2µ¡£Z¿?÷#ÞFFD p.uÚ Æq—úO^±÷íÔW12€ö§÷ï×JvPåÀ3M]À%žqNÑd ^gᩊ¿(fe1°­lL1¸c”É.¿–—JB€LœdÜ…58rÿðe'¯»~%â«ÉŒ#–Ù'âü À Ú~¼ÿØÕ‰«KìlyðU¨¦§€cAÅÌ2[‹© E)—§k_àc9¿cP\t†ŠxEà4Éfªô¦£@Úx%@&†È"80ëÛ›ÛýfÁÄÀ™X ð„¢xa%³ø\G¦ùð~MÔ…Ä fPÍ7²Aà³Á*(q:gÙȧâfR„ôêËöØ1©ÚéVº´ºÃOÒlHª~0}i†ôÒʘWi.²>¯I—ç➙Ч¼’ yôÕhÆbiÏÊ™â ] jmadŒÄ$V³§ßT>X£WÊËmUø’PC6À™ k€»¯ïC‘¥L¨.Õj\RZY_uÒÍ+”ô”®–9u ¿&>`Ú ¯ j¿)‰ºnZ‚g LÀzÝÑþ(ù¨CR¥ZhÕßhBoÞ²Þfš56Öó^÷†óú7ˈ€eõb¹EjÆÓ’=Ó­9åîÕ þÓ´º<«ðã¡—ùå飔—ÞL:…î¿~ʶE¢õÇëô€œT_-¢ä˜Å8Ÿ‚Mž¬ÀtaÄPìùÅ”PŠ–1ÆÒMÆwÊxi~ÊßÌ9ew3/z@ÍY'µiº–ö00X8f©öè¹`6ÑT‘‘®FÛÛRú¦bYß9ÖÕ䉫ڥ«ÍÊ/)¿±Yù‡6Õ‹£¯¦ Ÿ¬ S݇T!´1”V¾éZ«ïùK/¢¡¹,‹ézôzõÉÕ“¥ˆjBÌ[,.I÷ŒÁQ'ЦA¸ç¨Ü-ÁaÃF }³HS À$%ý¥ˆGŽËCp›•¾p) "ä†1HGdËU­ iXý ‘óΩIT›Nççˆìy‡B… &‡Ð!HF"eŸÆH»îýZß ¢y,xR‡4*Æ¥&P•BÅœÊ[ãY»0å¯à2–­£ø§PAâö+cN±æ,a^!ÓÞeéjôî0m¼yG(l¢Õ%{½NÛÇ>¡i€Ìlhý!-} «ùÜóç UQj!;(E†°Xƒ½$¬2mKå%l楉h`£hÍ Ž¹_Ê8/C¯(k`æh.’iIæÌÛ³Tÿ->F0sßÇ€¦A½£ûkäd“ÙAô,ùÅI»< Àf»6g½ÔJÀD Ø<ÍïêÄè)Mü§ÕÇäú驸Æy=í=힎ìøLÉ?ÀjIFÁÉø²9Ë£þܤ\Y4eœïD^?ÑUH ?sfsg¹†xm¿ l”¥^¸,'e™2ÏøÊ½>ñ¸Îiº‘ž²M>Õ¹,! ÑèiM„Q tRb"3%´¨vrRvÑ[J´ÁÎ'Wwö´NÏ0Ú»pÙ»=?u‡áëz €î—´åG‘|BÙnW±n;%øbg©˜è¹ú9†ªwéˆÙº²i˜ê©£ð\ˆ£tNP+ØLþDP!M!![Ñ"÷õ>òRb‡ëìf×ÓÞ°¿;vk§ÛþPNI].EcS§lôkm(}Œõ³”Ò+œõïª?ÑØÄ  Ã:t zs-Åà×¶¼¢Cö¡MÚ´ýh×fQàò ªcqÎjóB{8‘%Χ Ñó$vàØ‡´€y?}[(qAöVEãÂëðU•dЉŸ::ަ³„ÎY^AL EÙCI[edº“rY!@÷ÏÊ•–ˆ3érŒK§Ó¥è1¥ej8lÌæM¦[CŽ ¡bÙ¤V±Œìñˆ }WâË»æiÛ³x à›{µ£:ñž×v¬93{]O#zCDª°ÜIôMRa0¡?÷²Pºq𫃠KGX®dœ¯X÷¤ÒÀë·Ý1¡õQV!ò¢)‹¦àÖ sóñ+Ö’OÜ©{òòl^›ÿÝ:¸ºƒõÞ PÚ12uÏ#‹8ƒÐYË“?d¢<[-™x았ÕnS°xÍ“Á”ãu Ãuè ñ‡°ó7…Òã(#íè„ÉKÙ«Q×ýȋ޾t¦F~žbïiŸrFû¦z3'%…Ù{L`k[“ÁÌd”ÑãS1r_íúÚ‘d2Îêvaz í†È²x{2ÇÚ³<-î ê¶d4g¶ г»ÇˆÌÌý×£ë®÷FÈ^ I"Õ”KöÔê¾v!S0Î`ðÑr«Á\Ï„˜Üs@äðKÀˆ†#îJ¯…Sf>jEãxÐòôÆ¡çH añù…)mø·d;'ÕüÒ“³åÔ8›À™ùØ?WFŠd×Hk”“*&=“ã T([RÞÞ‰-LB/‘a®ôv1Ùî™ÖF1¬“È3k{#Äý1ûß›|3³°±Ysm2KéRôR¾ÄòçT‰ ˆN3.?L/ ÂÑÀ“µGîŸû¹“ ¾Å¼]Bì¿;å CYU™]eG[óˆ±â˜}Äfκif9 BÜ*µ;çÚȸZàÄ«hã0tDYꜨ ¹ðÌë¬2Fe}¢’‘Rð˜ûç¾< Lœ-Kð¦~Ôù•Ú™$=Ð&Žý×¯ÑØ±©y#YÃêPC ÑX÷ˆ!tVd¶å:‰_ÕEŒ 8)šÅ*Ä”ÝÈ^Ü+K¯A¯÷êUdlpÉ Låç`>wòU4G]òÀ|ìŸûÚYa’„¿™(BB,ª¨Y•aV,M&›Ž@ "ó‘ÇÝ# ø A#܃GFÛm¨kZbëžB¡ð#Pf£k÷Þ*áĺô„öò”»¼W¡×¶ã€ÐQ}ºl%™0–* lë§Ò©—V>ŽýSŸ…'j“ŽO1‘‹îÐÜ1‡rõ§a$€Gæcd4O=CÂmÇíy8´·MÛ1ƒŽ¡³hT]IŽùò3§µÁY´×ŒS™%J}Ÿ“Ï.Űi¹ÖÕø *K¡¯Sñ—Ò—dþ¤H/(Ñøà¸, /D„¤7‰ó™Ðê\O¦¢NÉj"Ì‹mO¿Û}y^ê÷8ò¡íºv¬å]›¬n¢¤H4* Ã$^#™Y­vÛTñ­½Ò1âU´‡@¦ŸÌÀ•ÞEöAzH Ð˜Oç¨Þ b(Rð¾ZAjŠmoWÏù;ÔíK­bj216MK»¹¨?’F<=·Í­„v"Ñü B§®®¦ñDö1œžé™²Ð(úSøî´'Ó´ÌÖ9\Ьéy Y+ <‘ð"3Gî<Ÿ<áÙ£Ìý|n)ñRn‘’ %ˆ˜ˆ6»˜‡q’ŸT¦zn‡çû÷ëu1²øC½>#œ±Ð´\xõÁ_ÑY0f¹îÂô*ÚC£,0&kmjˆ1IÛ$*b%‰a* ±ö~û(¸eѧ ŸZ8)HÏ`ž™I#4”PZ>«¢U]b€¹Ÿ¿|Ù] ÞõèÅà &•÷€;ý¤{DF\L…@$ädÈb,|Ïh¦õ±´)¾yƒ ;ðGËꯊŸä&> ~üB=x ƒÏ—?'ˆEŽ<ì>?ö׃w zŠˆ“-&ƒ%–v˜K‰)|Ã4uÙÍ›_°=e„bWŠhžÎX©„.Lþ¾ðäÂn²Ì,zb„˜ ê˜¡”—Áóo¸ƒ¾ EÇ$\ýÍï]]œ®@O³p;m«QÜ~û,)â‹­†Ùì4m»WÊòEŠŒºgSQq,óM(Ô8‰-2£SÊókŸ«-ĉÉhºGÉ|Ø9ð®JWsN´PvY=-’)?“]¿)aÙª§—÷¹ò ,g˜ÙÂR¼äšiú)™?Š¢“½ˆ°àÍåØ~’mä½YR"Ê-]õ-õ»ýÌÓ‹ÒÕè…MG€žFÆ+ÉêÑÜ%<ï\Œ˜Í¨îQYX ²°R!ËND‹CUk½ßÕFÀ$ »Ÿ[Rö©É„¨&U±5 fºaA’òNóŒÙˆGÿºt5zíF/2_ÓIŽòp¢ß,š©ºÎ¸Ckq\/|1¯wXÚ,U k8¯D®9™¥OéÍ‹("ô*ÐÁ^ÍòsÙc•+m>^qy”+ñÊtÓ6-“yŽï”Þß3/0ƒ0±ϲ¿ô’-Žég­”X ^5t186w°Óé‚Kz_(HJ†~ï²t+u%I8&ä 'ĺƒÉæUé ô ïÅH Ö”¥bu‚ÊŒ €Ìàë€ÉœœûÌÈ _Þç4Óôoú+ùfä'I™5´Wͦ`Îpú$Ѧ3‰'ÿÎg‹¯ÐÒSë®~ÃØØ‘Hµ¯y½nþkZ ËÆ“/ªÏ‹¨œÂ׊¥£¼tÏׄË]ÓœêØB©4 z…ÖÏÜ%Kù_Õ9Ìß459Õ,ߨUäÛÅÖë1°tý›j}^hÔurÁ=åázq†Fâ’ÓpóÜzÇB• p/ñÚŸiøSâ? @¬aê ìpKÒNŠkoÑ ˜>MGJñë^íÃsíØ29­ í®TM§D~H+ÖNíñæ´¦Sœi°³°p¹›9hÑÔਣ‚PöÀÀ«€KŸm FÆ44´¦yu]ÉE­LÂ>EyŽD²ãýIGW‰slúÆÊHîP¡ŒaG©Êà³6/<•y•aþ¦5¡:ï¾JÖ>òÏÙ£—’Ùß0n6»å÷Ï¥«£«6¾á³î‰si® Þ=`÷@Á3"—3³° h„€ÜEÔñ”Ró<¤AåübæåðÉÅ®rù0WÄÇ-ºçšQÝFlœÞ}• ÷jKçëLuž©´–3c°|:CT‘¤DÖCÏüœ4»ÌÜã(ÍlÒÉà<Ý“9*‡Ÿ®afÊmsî0ÅS3(ëŽY›Ãšëeª(³³•ÓQÙ‰Gû'ÆðP¿aº=ÝL$¶Ÿpö’µdµAf&§5lAƒÝ¯`ŒÌY,Ï¢ñ ÈQÜ3Ä?iœÛá˲Œy¾„¸¬ÓZïª s¦%F¤Ñ$€þ‰ÁÇëÉR¯Nnûš—ý€lHw¤"»²Vr¨º£Ö‘Èý³SFûN»ñŒDó¨Áókž¤bÿqÖÝÄÍ.eË4ÉUv5ú3cÓÎÏ•œÞVÏÌ *öœÏî_•®AOå«â•8g«(¼"bqÀ­°šP5øvŸ#Ë+“áÈ#ú!IìI̩ȗ»Ø±ŠÛ+D¨{•òŸÜUÇòíOeá¬Ho5– <0óñ(·Àò8½šüÂt%íõ“Á™‚g½4Ì,¾¨{ËÖ,$‹Þñ˜Ãa¶0ò€ q“ÿÙ¼0†Çç:>³K”‹)š@[½óîuƒP<˜ QX*s1/ø2UÇq®>}2Sö%I.ý­•ÖIˆ9O ä/ÉD#†'¡8ö×dÀºÈh¨‘£g(ç:'¥›s g:Éî»ëzº®3gÿG®fY—#èw"gS4ašcŒ*1[HÜë%Ïkõ½öŠÌ ÿ%AS‚×?÷ðÝgÛ+àžÁC× 5ÆÔÒlˆ¹t6{&»mž´áíÀ¶ªMé˸èô—¢gÓÏÖ‹+ž+xœ¢ ñxnâOס״r‚(§ýzŒú\unq3eMEd¾cr5ÀŒ<ãôlò¼l¡;Ê6sæ¸&ÃóYH93±ƒuÎö3Q ²X©ÐЭÙX¢øsò£c12_wŠKס'#èB×{Oøì&‘ÖBùc0i°ˆÈ}dtFÁcˆ²ÇÀœ•LÖ8çæÓÇ—¦˜zbFÑ ¶šÌ+S•!]—À IDAT1~/YÝKƒ‘ /_gD jäWòÍkÑ‹< ¹¾LìŽ5+Í—W¬î"J'—p÷±g1íCÂ5 CŠá¥×˜rTÞªjˆžÔe¯¼¡økMÁ‚q½>‹«)ÅyàÄÖuî>xi(Yëf‰‹&oóˆ1^d¶hååi|ꈚ.ÄÀ ¦ˆ¥]†R]R' 3’úðKx¾Rnâx6îÀ¸c¾mg'¨Ï‚‡ê¥!¡ŒÇÊgYg÷\EåXùÕ²£zreÂX1åŠg«ƒ™%`‹¡Ñ^L×j ;jšÜdhŒÎ«Ü#L•“‰xôKžOÆûÂСõÌeµrÆ‘Ì:“¢Â/v1†Òɳê‹Ô’×¶ÄÔÓJQÈyüò%I1)ziáyì‡×û%]‰ÞøLÔ¥5˜³Ä翉¤¥ýÀÚ“(±‘f„/ŒîÀ÷Ï}_Z(ȃL<ôZÖ8ìl´4 ÀÊêš;`)¾Æœ›PÖgêN’Ùõ$uÂh,Ö{¡’2ÝÈ`‹ÈüLRðÌÞæñðüº­=mè•©µFÁ1 tn­ôvÿ7Ik)FËׯ<ëL=‘Ç45Ça0YŽ\lÅæã¶’&¹‡n3²Ð@#ʥ͙rܯÌQÐb~1n@É¢;“ô(©7óˆð8Ž»]|‰³êÛeilúG ™d³‡ë¹ Ò›&›Åàˆþ©&< #'H¸E÷Äñ}.;ÄLJrîË(iÏëƒi uÃ’®fÚi1 âÈÆk±¸¢r¤ë¥|ešT\ã£r_%½ýkÎ;m¾6õ9H Ž])Û9ð&Rt’ÖdG¯?~½€åy@ÆaŸc…ÍÌUwØq^Ã7yAÅgÉ‚iþ˦H¦]ùJð×÷˜)­®\cn+Ç`æqì‡oï*ô¬]û/ÍvÔ=vîɱN)1Ÿg,$>µ¬@âr¯å¦|³\ñÇüuô}Í®›Nßdïõœ{˜©Í$@y³vÖOÖ$J¶p œ;ifÔÙíN ¼Èà‘yìËëV®M¯ =à©AÛÙZƨ/÷u³ÔŸ¦3ìÔ¸rLFéù†I #šÑµqrÕKÒÉÛ¯Y¶Þ啲ö (ÏÓ§µié`<æAOoÍVmNú:FLbð^™^…^|Âí8Êá‘c—u¤ùël$T:«cœ‹ŒTåGe!k*ÿå’ÉlbRÓ5)FÁ ¬­–g‚Ã20Er¡§Ë~»ƒ^n¾°Z¬Òëȼû2¤7^•^…z ý¶¡¾ñ×LqÄCÅF}’á&(DZl±Ò®„Âø5Öš¢¬1 § ²(:³ʵåøú½Õí›bS“ý‹ù¿‡@nòfè\¡r]*ºÃ8ì~ý&‘W¢—e“ñydjÕ¨ÈfÂYº¾¶4w˜Q*,ë–ŠàÈýÓ/ÉŒÔÀ!¿ú,¢(éѹ@åšRÙEÆ}ñ°Ãû5iy%tz±’]Væa8ì_}âùêfjj¬qÃÜ7ÀG9 ¦–z&3öÞò¬Í‡¯8ÄbåáÔVÂCäþé×Dõ½ÜcäaÜúç+/^XHßB{ÒÄDâ˜mEd‡c6¿g…ÐÄÎÖ©S5‚ûçÇJŸƒ¯ó€»yd’%»<9+v¥/˜_¿Žàź_ªïå,¶RÒÑŒ5Ì#c¨ï:z5é½ÂÎ dâkô2Afñx§³Ç  älŠ"‘Ú¶E*7òGŽà~Øï‹ : :”® %xú‘:6C q +¦…£]ûÆMZ“~ WM¡ÜJ^Á( 0'â‘C?\0ÀoT^K{wšÄÉ%P>`Er[—¨ò6ï¤é¥Ð)9ÉšÅóøüœ.±·Gݶ٧½dÍ Fç,>Eñu7dû”æ~vUsõÉoÆÊ†’Ò5~,‹Ûû«]fÒ·pN% c@`ª\»ÀHáK¬ŽD,'{2[ˆ¿ÄÐïgÖ†1á5×…â“ýÒ²K©k¤óF–^J«f–gÃÔs†|÷3'älIÖ{^"CNcäîsú&ôü©OYì‚…“Hž–ÌÜA,@w‡øg"ô‘y'÷™Û>ÔÍΔGþ;›5ÆòMH=X«Ø½*bHIism$Î{‚b~ÁS]áÆÃ½ù53w´½~Ù»½zÉvî’ru2zÐ:°îE‚€èb;å•ù¸lè­hdŒ¨úÚ »?ëÇ`Îcåþe$8ÃG§˜ïš•ºt‹3–Ð |Õ9±ÿ×¼®ó„Ô–õÌGm/дDoÇ:¯¦½1Y[ê¡n{"ƒùºž€ˆ›t÷†é?,”ç]Ì,É£qŒý˜j³” uBExé7NE >ýiÝßd‚;1b¹Ï§J5›ÆàtBÖ{G5b€ê63¡^›®A¯ÊÛPc'¹}G¾Š„ûãZBÙÓS,BéDÈþPm—·²—2izòk´lz ­œè-5гÔÄ8eÜ XxQ…/ïWÆ ðUÚAík•#Jæã1y$b ¸Í€×^ž1IW ç³ÆP7#oE}d öCÛÝA®¡ðQ-¸Çþ¸¼n«p¦ flüì D ¸‘c#¼9ùOY¥Pa´¯¡v…ô*ûh=¤ ›|Õ¹3žŠ›IG G‰yÑlûo#´\^™3†$×R¶EæáËóÍmß­CO˜ã:[¹ø¹ç£Í—«ûÌ"÷›ÜŒ&Šù(%Í‚W4ßâk#%’¥Ììm-¬ws¡¾äE÷“\–êôE°ùéy¨7^™^-sÆ®% %¹@`æç_Úv»Ý´Ý:0ŽÓ¡þ÷»9ðxG¯Ó6Zúˆ»÷™\I£›b žñÌœ]áC:[ôª\.oÕÀ³Ã\*uÖl F·wÊxüVð.Go’‘ºFYQ¡gd><}麛ۻ÷XóºëÔ^Õ÷GW^m—Ó5Îs®H·rª5­” i‰ÕM¾Å,Š<ˆ:ÛcLøæ+Š$Ñ¡Èìný·Zð ´š®+Bv-±˜Ÿž@7?µ›»_iMÔ…Ú È¯L:=¹t™ i’QšœÑûfª{1ÙðQgó.¹”εlšé-æÎIÑ4íí0~KXÎ\è·½)çÓ”øÒÅ& ˆ4 ¶w»» Ñ%w½”˜ñ…Ç¡?Lüu¼?-9ÄE ªÉ–¤À¢· ×ÞÙýÖÄcó©1﨨™²z' CúeÒª¼¬¸»Ëb0ŽˆÜÿ¶ÛßêÁY¦×£‡‘3|ª©¯wx2Ò+à>óx—ÔÄÒóʼ­Fž÷³âóÃhK½zyC99U½­ÍM >É/06›~%_ÎDŃM¼IÝÅæ~Øÿ:xiì Xç+Ð3<†ýÌvÓvGÄè/Ÿ.àãGŽ[*Oøe#ý¾¾w\Ë(œ~2sLªLy̽I­ö<Ëâ²ÇZÎûjÞO¹\í–ÀËùìúíR_ß&½žöýM#'ä$;äP÷Ãṟעø‘ŸÛmÛt•ß§èÁc¿ó|3.SjvyB¦gù¹Hõ'«Ù-¤êô&šDH/ÙBÉ(VÕ©‰ ¨ÑÚ±cÛ›§·Pò\º=7ïñ ™|0ðx8ìéÓÌÀ?=µÛÍvlQz›0˜G0Æá©¾ÂÓ™³gšëÀ SþUXRÂÂýŠ&)Õ-59Åz…¬¬Ø ¼—Wêîöùm+uúÚCßê¡‚ÀvœŽÑCŠÝÃŒ¼?|ÆÝÏ÷mG&³ËáFŒŒ‘ÇÝôþÕ’KÙLû3xú̃X‚WÍ&#=0Çdé‹0 ¬áKËä”òæVÃê4?1mÚ·q%Ëe¾æ%Ããз C—Èæ85ö©• ÇRž†ÃGx¯$qtä»/‡‹Æ«¾Š²ìÓÌÂêL¹_Œ\¦F¥Ù­…ºð‰šçÙ~Ñ¦Û |/î#žO¯£=…ïðyÜ6c“f)£Ÿ·ÇL=1Ì(ÛÀðËþá¡e†F‡ùpö&ÁqÚh#½—3eØá·:2ƒ¾XƒÏzPðÊAÅŸoÞÝ»½‚ ý¶›64ÔPCꮸúÁ;y#qæ«ÓÓÓ—Ÿ€†šÐ0ôCþ Gˆ·HµÚäÂñU?–C3I¿…êç˜D«yÒéô£0W`~ô“§%¡™Ça8üœ¶çwÏ7Ôt]C]Cú÷ÃX‡þ‰sÆ.àé  ¦%"Â~8Œ¨wj³du‚È&d:ó'M3$d/0æz£(&á“f¸ÿ¹ãkH6@^À<¾5x× WÍCõËÝ!4Ô ¥Žyà tUöi¡<Ô¼äåèb™@ ·‚ÎÔÍáéœè:rÀyŒ#ü¹|ûêK‰ÀÓâ™ÇaÿG¢7OÙ¡^°Ð`É|'ö€ÙreÝFp zµÙ[Úê>–ðÕ02€ýSÆžyq Z#^^A|@OÛ3s¿÷b·ì}kºjrÕSÑÏ ² œ/õeAÜ(B¡8s²Wé’ÖEÓ&}ÃËN_ŠÏÿÅ£RÆã¶DH¼s)À`ÑA‘yž óß›¨íߢïIÎa’RDÀÔ=³,è…d§ö’ý×Ôª ^²\M­É•êVÇò=îŸò·_·„už#sÄw.ÔOÊ<­92ãáoCjèw%zsSñB¿—Òñ¡É•+xnë-/Hß/Á—õ0øÿ´âh¼¤5d™sN²’³©9#˜yØ=9±ì fWÒÞõËx>?™úùZ7ñš ²KPß&Pk̳ uoxîùð7_ÌÓ/7aMzT žùmsÐdÊdµQž®Ìð{ßÐ<­éZ4æ‡eqIýGË´`x.ûVêˆYå·cÆzéP6þ—­œ4T0ð*½Gß±|³8DŒ‡/Ï3à}szÔr)ûœ4²$Q5§Äú`ku8±$ë™ÛÒ˜LçpvÁù–¦çf5 Ô˜ N‘×À}ŽwºF[[,ož9Á¾*tˆ|䇊Þ0½Jæ|­;#uFL9fý޾Dh-¶–PN&'±üÞx’ÌÚ2ÓMNøÀtӚؒ¤¡$ð’â ö0vg[lzià_å,âîqü¤÷JaÒ›™…o¾g•¾3I 6ž…+ãÌ¥ô¯=OÐMãÈ?^ ºý) ^‰¦P¾°\$ì@æ â5½Ý¯óF–oÞí»úþ½KÓÒÏϼ f·³þîrÅÛnŠïÓè2¦[ƒÕ¤zÖÂÊòÊ|֜΂Ù±5r?Ž»_žñ]Hï•´7}«¢©s-œYÍ^z-é5Û%6ØNËÁOÇ~Y¥Zs⬰4Ѩa¤ìQ#J¥‹¥ÖùÁJ—yª•}ÈÎÂxß¾Ñþf´7.~±T4vœÐà8}T·¹¿Í⟨߹`FŒ1F°cT_±¦½¦Ä:TI.t4N)"¹E7‰ÄÆ7!»ÕûÝ÷ï­Ö=¼È¦mÁç«ji¶3z¢ˆœQMZ…„ÓNOÙf\°ø‚ô,##€É.%¯…OÀŽwJ Â©â9r? »_žg¹æ[¸¸¼’ö®®úÂÊÅ…5 ·²ÙíÖŸL7^ÃB'jT »3HF}œ¿mÒCÓù.k35#³{9å^ê†Â¯Í=O½Ãç ÞøÆà½šs^Wù [@œÒܯ†ØÍ]K™ö”FcƒöºHú)¹«ÖØ÷"j7î*r¹4'Z8MvÈMZHNt©4ð8ì¿2x¾Ç Cq]zõº÷ŠúçßXÀlšno9ïS]¤ìÙ^ëêWÿ4Wx[,|ãa?ØeÒ/Á‡ ‡ÐåÝqÈ7Ì4óÓ·í]˜Î5öÅŽ¤R“øÁ"Ê6ZŽR·7îª÷<𙵖EÇ“—í²NKœ pœx;ÝÃyúµ% ÌX¨ÝñÌ Ô—Hï-±{;Ú[V×,ÑÌÖÜùTäﺦðUEée¦Éb ¨›RIsŒ"›óØ&ÚÞL°ÛÍßP‡T²iév>2gŸŸLó¯No‚^6lœ‡ðjüIoÓRÝ!”Ûó%s'L™g~6iÚýOÓ‡Ã08ëwùZê( äG!ÏŠ w‚Çî5C°œ¾½EQrÀ«Ûn[{ëú­»:!èÐ!Éž®üÇÕxÖyàýv¦µûA:Sé sÉpó™ã´Ço ßh 3=z CÐe³4kµÍ-j‹æ¯ÿµ4w6ðð8p<ënÈÞìæ tà ÞOμ!|ßÎ9ßv†°!ãD ”{îqv?4‰™ÊïvMY¹KóXÎÆ.¿ìd1°`&öiôµª1 bwŸë¿Óš|#zsr¸ûé‰ ÙÆÝ<ÃÈ>(N!~¨o2·'ÚöœþRlïælÃã3Ǹ; g•‰z¿Þ8ìý/s6]ú62¾£kÎ-6p+Ó~Ó6̲—^(ÈÙ옞•õÊ…ÓGà~Þõä°keÿΚÌ.Hvvx/7/¼ET¤ùôÝ´õ%”.Ÿ.Mb €çacÆÈ0ÌñM«¯m 3YÆa–F†ÝÀ1fºš¦´1<¹‘€Çñ°;{ø Ò5è½­´;[CþXß­Žýž{æ)ï4UŒP¹X9Åz]Þç;W£íäÔ³î°×›æ­YhqÒfxä!]*ûÝxçèÑÛàwY3'¥‡QÌÆP±¥XãòÒ—•«hŠ€3g;á:@úéye윽4ƒÇ²©ËàaŸÅÍïßåèU¦àÓâ·\‚Ê™MÓ43G»tAÍl1aµsådzõˆ±>½«ÙÇýÀ¶žÕÄg„ÇÂ5<å›ãðœï'ø.E/£v!|¯%Sá˜!„¦†o8<º×“~JƒéLγ)΄ôôPùRƒø0æ+GË_]öŒkJ˜6¹T¶_ƒÞRźlŒ©ürAýçÊ]’;½1¥™™¯‡]ÓÚñóDYèLaçF(߯ž«çì'c÷ ³‘õ±Åɤó&F„pY1|o‘¯Ó¾¼WO>Þ·ý\8xWëlÉ’)P/=ˆ ðäQ›ã—–ˆå.“"þ6’šxª^8bäÝ«ìwði)ºpiº¨òooÓzk68¼ n¡’It~y:ë»”R<ì‘SÁõèù/øXDˆñê¾–5ÒÃîWéêwïBô²ƒê·úrc3ƒðþyÆ–ìJ-Uv7àaÚ¤òÉl8W}vø…?¶]¯ ›™¦Ãû‘‡ÃîÑ/zß ¼KiïªJ¿™mŽ æµãaßà™!Ÿò•BéI™iÊaùpÎ$røPÓÞ¶Û¡õ›‹Bw‡þY¹æÄ1ûuµ½˜Þ½o“Xfz"ä~=_I²{ªáQã1±"•àŠAå|1†štêI½ÜJžÚ]w·u b÷CØñ;¤7Eï[ » Œs6za:,ÓÊÛ€ˆ4n®‹4= Ø=™ˆÐ€0ìóÇ›/jéëÓïÅ9/ëÀõ•Ä—¿•%º­"f°cLƒY3"‰vqÛ^;‡'@‚K4yc^Z\WüýÒ[¢w¦¬K»0³qEÛ–NË3ûU¦@‡œc¦š—@î ÝáÚvÍ`<›oÎwJ¿í½Yn7˜8#ÈWº-VåèN7wDg—üë+>Ÿ^Œ¡ó]Áû}л® gV?½fzº¤Q­ý÷ÓB{9È'µ—SÞ|Æ©ûûàw·s^”JøŠ…ÏÜŒ·­UIùÏUÁ E^ï Æú;àmý9—Ú|u__ µ‚nŸ¸z Š&Áù­‡…!žö9ÞÇ’CÎxóÍß ¼·õÆouõ”.8ÈW¼â‚#¶íR4ã,Å,”_®{1¹±GжsYsfOà¹Uï;V8“Þ–sÎÙ0f ½Vq7ÈnnÖ²;’Ÿ¢åÌÎJçJõD+¬3l»W|jAÇf.ŒÎï›ÞÚ¾>¼7= vYt¹LÍCŠ2W±Ê4kfÞrD—¿‡2;Ñw¹¸’óýaà}©å¸þTôÜ>l’sQ] Ï=Dµ¯—“Þž‘[¨ûónw% óöèß5ý?^JF~&OÜý|Ó­ÓOœõ6\¢åÉ{é“XgŽþùgñ⦂Ë,>ßß[óåô£'YÀö®[S òÁ2ÙóØÚP3_*ŒcŒ‰ÓúŸÅWt²± °œYô~7‘óAï9ôn»YÊ·ûsãäž=›#‡Ÿ“3ë©t!âk|ÑÆòû¤G[Ï®>UŒ °½S ì’Ê¥±x“ÜgY›.¦*ðw÷—Ý {>‚ýïIy?zŠ_r/µïnÛ…@ApRftw¯G$#6-Ž+#0ÅŸþwùCÍt¡û½6aÓÁ9--óOÞÞÑÚÑœÐPÆy4W²Ä;)q\ÿ²­›aýp¶mu…™©ž û]ÓD{ ©„ô@Á ”ÓT-x¥¦àNœ—ïF¡Éh³Ý-¯cð¦õþþéÇ¢½I"ÚØªW(òî$tœu´½xYÜŒëM yóýϷ벌ÕéBo†÷$ðÐ49ú€%LJÒ?½.Mˆ²bÏyA -ü­9eÉK^xþû¤=ãk>b@ ·³¹%Ï[2M"¡ª˜¥DzÐA ÓcÒùe§ëUðý˜àý@ë^MÞâÝloHÇ<Ú5[)Ž\ñ¢S#Š’suqmžr7ÏRgÈ®K‹Þ~Ú›÷ñ#=Ä®¼¤Ï;VZ°ÎB°Õ/XÉ„P„Â’m¾v&N f¼ïð~ ô–’E)¹±Ûb=×x!7y~å úåò?RJwƒÄ>íñŒ0ôÀ÷c wnõ°¹¥`¡t¼œ9—|e¶ ÔVíî&.˺K’¼½…ˆÏ¢v IDAT§¬ÑeOI¯<ËSìÏ(ABÉËÿÌê·ÍRçEòÈ,´ü èÍá—C]5²R‰ èÌÓ¥ñ«ˆkŠâKÈ—RfýoƈMmq,~áþǹþ ô£ W…m´éX·mC•Ž0Ùw%wW&È 1Z m¼Z;åööŽ®QÄÿpð~ ôÎ$wI忞hæ·Ü§FÍÊ ¦*4»{/‘ÞÞ„ž®b¤É§‚ñf‡1½—ÄG·ˆbs ˆÕ-ïÓôƒXÈ,ý@èù¤ƒ¤§áÆÉš–¤ýZuH¯©pzÆ¡ÜLû>…ú‡8mžI?(z:N•|?3Çý:ÿ,ÆXô‡É;¢V,Ðá5ýÃÒ„Þ∩÷Š£#³½ØUJq Y¾5,œÛ¢ûœÓ„Þ¾ät7I^™{±°·$ bº"¥xÓð|aYûŽÂ_•~(ô^Lz%¡fwîU&ÐYYúaÑTÝq¼)ì’~0øþG 7#uN™_9ΑÁΫ nêž²I?]<‘¥ƒ^—´w±oþG çn“I#B(¿§¼2û" CÚtÕ»¾ßcïíÇF/ßúiÑÄœRY}™ƒ1"rRh&[åõ2'²\ŸíãW ü±ÑK‰pò#+ÇxâëWTbña"X ë|ëd–Øïš~,ô–Ø&k¤[dÏ?+O£à·ð¢¨}Ñ9³71õ”™õ1Öú2¿‡‡àã,¶fÜ7\l…×çô)äj4þêRÔpr±tH³ L ÚÅÀ$TdÕØ?~éí=ïG£›ÉáY#?ݬCÅ Þ–²oûLù–“2Ñ%{°/-i³šè›¦ÿ´×ðÀ‰@Œh’@ÈÉY_\iQ‚z¬ò¸¦Htu¦9Ê+P=O~x Ær¿ê…̳/ý@©’ìú¡EÅ;«¨~BeF±\§aÉ|¸âò× Œd/sÏ ¸ÌviÜ­½* ‡‚'ˆêIÄSøÌÌâ”ËÅÝMr4BZçÆ®ŠËr]|³¥ôZ~(ôrcj¥jˆÂýPº‹Ï­rÕiZvÌËø¦3„…:~Ëô] ÿ¡Ð[î)÷#G¹²Î$oe‰Ó«{œ³TDaúŸæçäóÂ9ÇŒØù]ˆï•é‡BïLâÁAÉ/ ¹-ZéöîèR6¶ŽÜ˜Òâg¬“‰A’µJš3¶²WÀ÷ þ±4†×'sù+¾å”ÅLêHÿQ͈¶÷€Îè3±KleIRʾÒbö*Yçû¥‹.[J£Ü––/JfÊZñgÑ«ØNž…æ´ ‹bHj#½ÿëa€ÙÞŒg†é>Ѭ2X6h:°y]^øáúô½Ð›mü7¨s7äBÎ˽â aûX­g Âúã—ÿ´'ÍèƒË—ðÍÉ—SmÿÞ˜s’¥…_¯,.¯_ÔP௿*+ÒKf±iÅ¥¤£&¢»Owé÷ŠA.\ËøÚä¹½¾·iËRYµäk%´¦%EÆŒp§ nÁQÉ΀ÉwBD `b"ÞþëaÉFæ©õm.áþæÁ;ô&%Õ‹{ƒñÚõ/ÇÙL¾Ô:Ø *zb—óûH€âFùs±u$!Žï><|>×{e¾²Ç¿ƒëç[qΚ75“·1s w]Hý ¯+ާ>G2ÒKö-þªW’QŒP ŸnÎ5q"ÍæT÷î¥Þ¾Az#ôÊqŸ…N~9Gí3;4é§.oÕYšQl‡×fËüCr&Ì"„Ü$¢õÀ7]øê6U©ÈôÔáwðmŠ/ƽ97#þ¬N/¢EXëVë‡5…æO'Æ 8¥f¯V§Õ €SsÐHá|:\=§€°²g+ùrc0N«Ó»N«Ó»šU’fþc¶RĪü±èth€FZ²Z­æKy!-ŒQ•Þ„öü¸_0Ý.^kmš7‘S¾9Jʪ6²òmYÎ.°ÙÊ™ÁD´¾ýø 5Í÷%Ìüè?o2]·Y‘f¹’ËÆè ¤–’ð^ÈÜŒx…ê·Ù’ì¾ÅÊÊU§ùEoNÒ<‹AŒÀáöãð%ÝRsFö˜ö5 5Ô:•©îG~îg^m^®älúvô\ —°a»ZùÌÞͤ ÚnÛ@”¯ª$½-#Tï9Ê[j£ªÄ'—XRD`ÑÛ¡?Œúss±ðÚ›[BCMhZ¿]2‚G™Ÿö“‹•´¿¯ yöè<Ó}mÓv]#£·[È£)~ -)1뇛NI/BˆaB‚)ÖÎL2CYvhâü/Äv-"­q÷0Œ™EÓ2#½"¥Ëˆ@·‡_‡sÊ»»®»¹mÓJ-¤Œk)ߌÃþ©¸S8¥WÁ÷ÖÒîîöÎúQ iÜòpØ »/ú]˜Å+`{¿m‰@ðÕ¥zÅ™ ¹ÒÊM]ÊÙ(jƒ‰À7÷û§Ü:?²;Eåö~s{Cpöló½p@·7‡Ãîp˜ðúôî•ïM±k€n³ÝlÛV$ *g`Gæái×ïìž:?àí¸ùy{ÓÞ®ƒ'=鵤²5Ð! & h}ÆËfI7‹ò0¦5Ž|<î>ÿ2äÖyº(#¥E<|Ú¶Ùù™Ä2ˆ`æáy÷ëó„„_q´ó•´7÷Zw÷Óö¦í"€¥#Äè6†Ç_”þL€©›ê﮹ùù¾m»ˆBì‘®öb3<ê­Ù¦Ó“3]¤JבElo7ÛÝK‘rcîþòÐ’ö¹ª©®˜8DqÀion©÷[ҫЛ{is÷Óý¦éH»Qo›0KË»¶Û~ò›ðúIÁ7Ÿ¶mÛ)ßToÛ²ìe[ç¼ïì™’:VƒÀëx³•ÛÁ‰«††¼“€ÿ~×JäЬANk÷\”8D¦övóùi±Í—êS¯Aon/ááa{ÓvÈCg¹ü+BLt³ù¿¾rIÊ)†»ÛMÓQ0G*&øTé.à«;NåçzÃÏ“_PÙ Ýöð¹Ê;I1|ø÷Öi(.ô—ìâÁ¼ª"Bd4Ô>Žóð]¬ ¿½™Wîvd£X«D&1ãæà›¡¼MÛtÖDè » X¸ÀüZÏI™ß<³Š(ùÒsö‘I9B`¢›ÍËQÆoþýCGa-$óêë#µµ‡Cˆ@GÔÑã0ßå–Œëíœ3àmþúófý' hE N|âbO.½ã€ÕªY5ïÖôjüÔôéÍ€í§÷m«àñ » N«æ´_ƒÓ §Vbo¢Õê”,„+ý—Wà fN³Q'œ°:N8ˆW8+­wµj€œxŽòý„Òâ©¶T<ü¯ûé¶m[àtЧ¿ŸOf€ÍŸp:­N N'œVÍiµÂêÔà]X: c..YD— Áaquöí§‡¶% TO0á°:Î YYˆ˜ÖÝÍö³/¦ú¥”ÁÛJ±D&øDˆ,˾³RóØïù˜ã‹lmHÂk4F?e­5ЏœäcˆÀv»y¸ë#:é¬w)Snh@$N×Çö—gG}f×¹xû*ôæ27Ûíæá†ˆÂ$ÚóÄuĸGGL´Ù¶ÿ}ît£€'ã“CÀG¹KI¶ÅÛºSY^o³*çŸÏ¸wV d$¢|w5š ðá§í]kØ%*ü©¥e÷Í{1¦š¨iÛ_~+ËøÞÜR6›³»Ùn7­¨ "¯¤¹ˆ–ÎS ¢¨Ý~ù-¢==xD](î® ºTÂŒ™%„¨/,…öÈ>\"C^ê ç¸R»Ù<Λ®_L—ÑÞŒ]ìî§ŸÞ¾ßtô§U U­h%à <»3Üœ°:ñt:5'> ù­ÚŽûVÿ˜¯ù…–(D>%Qò$‚f§•¶ëônEhò†»dRIsN§Sú¬9 ¤à´ZN'•IW«€Ó ?ž¿N»>}z¿n[ þýù>IM+ÀÈ{…Úb=¿[«Ux×`EhV¡}¿>yú\!y¾ÎRÖÜÞ<ÜÞX4•âŒðdz%-5Ís·F§ÅÞÿ«It÷ó¦%UôBä#¦BÆ‹» Bq¥zžoÆ š¿Š j¶û§I¹7ë5ˆ#ÛõoìdÚd7XnSTS«c¢ööËç¼ÿrùnÃe´W-zÍç?o×ëîO«ÐÐ*4´­‰ü-ó|µZ­Zeg’æ¬NªÝœNïøÔÞ­ð. /§Ùö_Þ'ðpràÅ€&6«Ó §§•®1 aujÐ@H;ñ¥ <“…WZ橱Ÿi¢¬{«ðŽßOÄ׈6Ö|ø·ë5­ø8üý>! ›ºªª*Z +ICN äé„Ó»Õ‰V+¬Vá]X5aµ^ßvl|úr⻽Š@»úŸ6]÷§¶iWmcØ…†:1Ĉ¿UƯ€§ætjˆþ±:­Þ=ëËíŸ?xÔ¬Và#`‚Ê.ÍétZáÔ`¥ZAÐkŒÉ6'ÆJ‡TgT.+-ó¤ÞC+œpjV8!¾#àæÓȽÄJĉŸ~Ú¬ |ŒÌR&+:+^ÅrP£·Z!4Í §Ss’¦ŸÀï°’)¾z4«¶]·Q¥—M½˜‹Òͧ;噓ãtb'tìC¯i¢,ïÛlkñ‹ãPíÇ- xYW(RuæuéÐóT„¯Š#®­£beg€ˆšm1¯n~ÚÞmÖ žgÀÄ"ŠLšãmÔÉ×[7(%ìOfµÔ„ÍçȬóMŽU—Yl?m7¶”¶€Dª"TTÜý#>É“¯´¦u ¦û•M$pj5/¤5èT¤T1wØî–«}ø¸éÖ K^y}jNº÷ûã[Ú^e•ÉN¼¦ÐÝl}êq|/¡WýÞ„›íýC«»ÈnmÃSý#¨®@Œ}°Z¦ׄ»@7ã°û~dlT ¡UBÔÝ¥Ä0ß«òî`qy\[v2ª¾RŽáJÔÝáË^Èïç?o×kÀG a—T~âJåWñÍÏoÝÉÕvE× vAÄD›ûÏ_žúì¥ô|çÑ+ín6´ÙnZ¢@S±ŠA‰ür¥*Œ‘3&~Æ ˆãš°FÇýCÏc»1ðJ”1}Q±“t¹hÞ®¿0ŠUˆn “§u Ø4í~öãöáÃZƒ˜KãŠtñËUÚŸÎ[fí¼±ÙÉ…HaÝm>>~yÚ_jr9ëQôûþa³iÛŽÒVd•˜Ò´K¬Énˆ…´;²Z°}h•°&àȈ=à¡=„ˆb/›/6LE³Ò¸tÝœ”™9Å%˜bU cÒ¸e‹ ŽŠTaäÍVn,æ(½p<Ù6 î6—¼õÂfƒù–»€ù"äæxäÝîñqÙõŒçÐsmîoïïÒÆy¥ÉÙ2¶S³+ÖH7Òuέ'…XVf ƒNB€šYÄ6}¬štíX@OðÓ–F!¡çæ^Kzk"”ài[Ø€7N( 0l4Šy®E*p ²i.uòñðåócŸý\–ñ;ÃVÒOÍíÝý¬Ø6×ëîØ°KÚËÅå£b;Z !²"Ô­à8T¥I*ØtdÃaÚ‡ê•Bœ.-lÞL]097•=øÉź­Ì¶Œ“¦¶Må‚Îl&Eo 7£;ˆÄó…Ö›íçÏO9žÝ"|// Ív{ÿ°YS  Ç®“ÀȃâXŠJ,AGàϺq\¯e.bÆ3Æ7xrÌr¢·¿9®i•rª6Ë M¤<Ç&Ñ`8õ'óX‚Å$Œ%[&uñ&/þäé!|“‹]x†Hb ]8Šõå¿“¸»˜^Doóñç»Íz ¢@BDV.ÖP5øŽzÄc3¢ÑMe6ÃY¼£ÎlòýŸ7B-†z™Ý-Mù­ä åŒ!Qh3c¹€¼ô+åEý71¹À¨«¨ËS6Kq¤ºöös\$¾eôä—ͧ¿l×´†nqgú2ÙƒPù¢«WáKÊÑ`´e9Ûm˜üÊ ›ý©ýäà\´}†H.¾\ÊÆ¶à(¤É$,xŽ ¬µmÿœòçc!Ȕ๩ǔÀa,Ä`¶ f›¶D|\µ ¾¥´ˆžü°ý˧í:ÝUlE§]ÒÒJ¨ÞÍ”úcì LØÌÍ.lC „(™—nsŒŽÅ]šr±iŠs X³íçãúJ¾L6sבBhný|H½ŸK³½¶‡›ûýç÷ëP¹¶'ž¥}"3Ê#Z‡®˜x¢'3V¯8ÈTèŠýÞ€?F„ ºmMÎ×s®O\ÈÅ’¤êrú9ë9å‚nk½Ï5(þ–I;µQ¦5+=æPvbŠe~â (2è˜8Ý~øùËç¼4‹ßTcÈ¢æÃ§Ûõzm· –Ç’èË >ûçzP²¹½ë©8-Rp^ñü°¥#7„€u’Ö8­åZ™NxN¿G›µ”>P9ç‹$÷aú™à ”@WâûÄ»,Š`UhüäζöÿÇ•˜'½yZ þG Ö.¨k"0sd>~}|üõÑ~œ 8A/wÿóÇûõº[ÐåU'*zÁ|Œû§ÝA‚ÍÃýûµ¹—Eåô {*"4:ŸIÑ\êIJðk!µì<|±v“™Ñ#¡yÓÅ|P·hcÞßãE@ÿKÚe7 ‘9÷O½¦" ÀœîÈ ª\˜"ôuÁGæãñó2~5z6Z÷?ßßww´&Êzp ÎÍAcÔxÃç/ÏXOÒÇOwï½i‰ð¸®¯‘Çl8*»y¦dô\/d‘1=ð|fëùÿí}ÍfÍu×ï©:§oÕóÕ3=öŒßq]çV³8§>îÓ=¶%‹]®Þ·»çù¨{«Nïß9ÕÛÖO@ `ÃJÑ0ð±ÊÏéøñhzSŸÛž$É8^¼¹@°!OðDˆýÓûPŠê¼@"2Êxõþõ›â=@ËC× ÛR:Ð"1D€H´›ˆysúwm.×’„O~â“ÓÍv3lNNŸînïîJŠ.»Œ•£ì²Ï>;ä¼Ê9sÎwFM ß—töá&ÝËj çó È÷€ô ‹_üÇã«€¦­³CvÙg—}FFVDÁÐ{d—=ü£)iÔ4c[Ùî3ÉYîr. ç2Yš2Zòúdп³"ä‘“>¼sš·¾øq…8fçô GÜè Ä9çåœóݕР­œÏ9Ï÷óaºV'++çò Î(ç $HEˆÍY²ÊùnEäÁŽ×[íE³ÀK,6?öêl½Ùl†“àïnâ $âà“9¸•AGV€Ë9ûɶÆý½poÅ‘'w/ÙAŽÄæ/þÓ_ýâOÿÜëZUಃîxdäé`)ZPË€pðºÝ.~–{jE?%YÄAiMpŠÒ —ëㄈ#êee&‚ï ˜WŸË€÷ÈÈx_dæn)[FȘstB'¸×#èÒA‰#ç]^Áym5É@V©©è9¤B¿,yuçAà Là %¹_â%zê€Í«/îvÛÍNN w“H>äUÎ9;ý_à€œsŠÀsÀ y•áVWUvóáænðƒ£UÎYÜ}O¼¿ÿ;_:qîó{óUEê8E¨Øò!‹ÓI8É.gŒ¼rpû\¶9à «•ÿW0bAr¹;xG€¨°žA~+GÒ†sG=—‘se,ÇFPø©/8r§U%…P>ô¼GÎå|w'+€2‘'^ß]地 îÄùì¼sÞ98‡,9)ñ’³š/+ ™²wÞ­À¼:–Ô£å_áå'›] ‘0M6Tm½mÝZÀ³†ÉÓtÓbª‰Ký«¼ßlÆH5Ò®/€‘ÂßûÓoêÍM'Y~ž›ù¦l_ÇÑ9ëÕ]/ÍË窊ÐLHÑoè§‚ZÐ-ø IUŽ´Þç«¡Ô쪖S/YDd@Df9Líd±ÃÅàoM9& +…ÉÀ#¼4骉̓ìÔªš§ÃtœÇï~ûO^ñ8‰Ôj€€ˆQ 5/?{SYKËÍAâ£>íÀ¹ý½ýõ?¾:JºO42Ú¼')–/¿%aaÝÙô˾µˆeA 5ÿÎVmÐújG<ÑøHÅ~¤’Áû©Ð–µŒcË2u‹ ‚ˆ\]%™‡ép3Õܘ^˼‘$ÖŠ>æòí²Ulo«X °~!¯çÞáõ=ñ6/_>ÙÅà '1-ê½'Åf ÇìOÈÈ9!çœ2Ž—õaa´UÍã·&hrß1ýê—<²sOWŸª¨UõdmèÜJ…E…™Ñâõ#ä²÷ȹî–€÷pÎQy!çžx¬`D6!—UQÑ Cì?IwZ†ANÑ;[«ü l&‹ gGîÄÙ|/gHAº,2^\M—ßûðöýû«‹þHFÌrŸWÈ€'ïœsð`ÁJU‡H>³–pv À;aG«{4Ý£õ[£îçæåËýn'™ÔdFÛÿ "^¸Í """ÓáÝåGêLgêx˜ÓP˜òë×OpÂöâ¿äÕõY°¡âŠ´â‹-+Tq‡ßvÄÝ•¹Œ? ›g° O ©YÁR‰6æÏî,²dJU=rbäê»·ÓÍAöYš¯1oPí8ªÉ)+#+¸+}L“z 4F"–=æY.º¿n¹6¯>9ÝÅFšêaw©‘P@‰7ßÉÞOë#âU¯n¾¹Ù D}—'mýÌ¿ùê¿~}ù$M±QUG­‘zmÖÑí7Wè³ ÀT9¬ƒ[Ùl*ñĬ֜EÄJ'U6q†ºa’%¯r>¼;ö$«‡¸ÚòÎ V9¯Šè¤œþwÂ÷Î݃_ý«Ës8r€óªmÔȤâô9ó²‰Î"P;b9û¸Ú”*ä ç ¨ääZïsA¦£Äl3Y‰ÇžœC†ƒã•þÖi–¬kj%Û wιó›â§p›ïþÅ÷ô6G>@äNˆV> ìVœ÷—áVÙÁå\ç>ù”=²“ŒUÆÊ‘»Ï¸'šäÞ&ÜÄÏæÕ—N÷!†Œ2%‘>×I%^þàT4?D~{û± ýÛ‹}KûW #Àkbm‘ã1oéËÿ² ¨0ÀœL˜Ô<°€å¨KÒr]:bšèÑ*Uî^©i<¦ü!&5K€ÌâÉ:¬>óçk‘¥£:CãÍ ßZwä¹³ÿí•™H‹Ï.õ7WQÍ©Öë$`¬ÁX¼¾(,íÀáǾøt¿BDº½»K"cFÎ^ ¶ÔžÐ‚yx/Þ[ Xá>'™Ž˜¯†\Üj=w«|—;»eþ'€'ŸÝzû¿³s€ËÞÁ“;¡a`VOËe«Þ@^Á»vÁǺ‹ž”}ç3Ø{ðc=jkUh6ÇJ²JÍ :†w¢¥sDpî§cý¦S'/׊ԻϺqòá³oÞÀ|Åùd8‰'fçsÎ{ä|'L«ŒìÜ*;—‘| iíJ^ÉÊ‘[!{:™'kÕ`›Àþå³ý.PL¢ŒW´8€$(NVG¸—ZBÛùpÌ|3x@n.6–ÕZ€Ž¿Î `N~f¤_þO° 8˜ ‰+aº¬ÌJ%6LR•ác|X,þèž¶¾Õ±EÉ P쪌ÅvÝÈFx{t{¹™†Yfà1Dßžú¡54*H‰â( ˆÆIDAT¤A×Ó§ý ŠÂá¢}àŸ=ßï¥iB’±TæYFÁê?€˜ì$CP”ÍË›o-VM¯Ù‡‹ÓãB°Ù[ž”3+þÝ?×ß±t‰€12–ø¾Y/æÙé|é§Ö·¹-âÅNëD=!¶9àLR>àÇÛ(†Wò‰¼ŒWÂìóch(lN×ä‰ô-;ÙßÞSpÝVŒ@ g¹iÓoNÅÓµùª,£5ŠÐ7³³rRNÄÇA‡›MPÔ,õ&Ø\µ'€ŸØ£v´ÇBÄ•Y»,SzEŽUÊ {ïØ6mW*Ä{˜Tlî’„£oAÛl™7o+c¿§ó÷z¸Àáëò8ÔÃùv>¤ª¼Š,’ˆˆ…‚œ}¸@¶£ýf° $ÒHg(XƒáÈ8Ä.k§WØLx˜= QD3‘TòÍ'Û µ^TŒ?ÄJ‘$Uë@ër%”PK&Újdil_=ñ4 ¸ä¼ÎY ÔwdD}YÀßi¦XŠ2N—çŸÍ^ãÒ\ïnΞmd“Z´12ªµ¤} Iý¿ÔF„XálD2+&ÊÆ¶!2˜…1k›E©Ôû1±òþOqDLû—¸|t³a–®(»ÅØþûoÍ>uÒågÿu÷™G,2ŽÇé<)A×´Sêl*Ëüâ•—–Ä«ìÌX¨ÆÞ"îb$ò—hú|Ä4Êtx4 i×ô^ž¬ûg#«ž«-ŠH…Ÿ0’†DˇE„(ŽezÑf¸Y+Bj Ìd“àËC›ÂS ‹ª*OPá7o–yé I±¶ýËÿñ©ºð¿ý¯²ß¨®ë‚E6Q×Y®͘yàÐô2Öë´ª¹ž=™zH:Ÿ ÀZ(B€éàðÁ `ÊØÌ ŠNI 7…¡ 6Ywõg—‡©Nq»‰‘˜o§|MU÷èV2Þ+°¸ æT ™·g§ï–lUÒ¬g&ÌÛŸA2©]â2Ÿ³w܇b*QÇæ÷j;pcI“­ÀG]ÃF°Nn.×ú¨ïSXEcÐX½Œ¿oRT¿8Ý~°±?vMØ‹(ôÛHì'j^)'ˆF"mž_TêíˆÒteÌk¿Ší¶ä".-$¨p $‰$†çÏßËCÎQ?Aò«~Nð˜1û¹AZ3A»˜Š1Õ’GúR÷YûñúÕ}H<[/”;ÚpfaPÜ=Ùj†kNr# ÔDDMtI¬‡ck d× YCÐGݪ«P¸hŒ @QöÏonïÿ“/ŸlNȧë Éâ4–òÊÁ¹œÙƒ<\vXÁ9¬ ç¼w>ÛgûÝæÉ}sÝ€û°] ¤þ½ž2âî?ùmºÏÀ wïîœüyvÈ`ïœ×\y>dɹ4*ÊÐCOœ?rÓ³CöÙÖäØÅô(sýQLK¾v@ °föÚèÉ“snn#Gôäs§'<ò}þ·2œ‡sÎÓà$Ëõûj\‚[Àrm?w¶ß 9ç<“#Îwê°CRÎ9ÝáN3ÄeMjäìSö€xä¼rÎçÕ½»¿àŸ¢À¸NH­É˜:È’ÀBL¤Õcq_R ˜X+¹%I<ûBºxwûá²Ù\2IÁ#õ[3Ëü¬¯}å?«e Uæ´²ØFÄMEÁjø#ÄøyíZš%³ðàÍÀË2ħF¨ÑÇ o¼éǯwÆ(AR:,JŠØkWØ¿8Bly]@$%ˆT¡'É2âè4scŒÀÕ.€%ž®ßÌúr#W£ÀœXúJ‚ÄËN ’:~œ >Wviÿ…«‹÷­{šLkaÑB=ºò³õ速'_ù3!õD¨»q?õ#‡DJTˆCXrøè¥¤åk‹º–¨wC<ê…°Ÿ1»„cJ|H.ÞcñŇvê0œnN÷DÑÊKÕç•”DŒtfMXnŒm‡ ™•M ‘($Žû·„ðâl)ðx%’PjË(aDíÂG6A ê D{ñ•¹( >¢ìξp~þîÚp–YÒ1¢VðéW4ãgm)é×ÿL;zåö¸>BÐ xKëE ÐÇ£Ù:tW÷î‚éWÞîÃÒá \ªï §i[ÞûWjrC.¥IÛóî7üÀ~ž“@fÈ6§›!0(2NA’È„£}e 1E;*X) 1vˆBÛ³›aÐ>|ÍS*·˜ª‡e ÃÄ‚IƒŸA Ý‚œŠuD /·J½ÃÍ©þÁ]ì‡äùç81fíÀéiYÙ(¢eÏ‚®îöc@¡èÿ:‘‡Q}§l‰.Ÿ $i¡Øÿžß"ª¡Db • BgÓˆÜ^Àþå)ÈCÛ@Žã4CfùAá¸zº+WäŒI‘ê$ªË>‰u*P#ÝæM B,Ã~ O¾ÌÕ¤\‰”c̦–š™ÞCÈš³¡…¨’ÓT<óiDRLÄb g€þÏïýÎoPRÆós*€~k=Qâ¬ÊÔ¥ÚZ=z-õ/u”+”$›¹hÓ ê2{Žõ§ ¤„øóþ¹€nì_>×ö D`„‰ÅÔš˜Vâ'€¥¶k°Eý¢ÛŸ¤`-®iyOEópâJZÎæ­Se2Œ‚õH+ESõÑ…Ä`$œ0Œ¹F‹·ARÐú ñ8(ù<þ¿A*)çT³yü6ɱÚyŒr­ËÊÂ4‘þW*cJ{§ E£u(¥L]ÊÝ’$i˜H~Ï^/kŸäúl^>ßjŸg% $¶6x¨' ç¨_ªÿçgq—;PˆÃÒe]ëbØA¬:Ѱñ£¨áTÖLI*@‚\‰ùÆó‡õAJ\|Õ€_ åÀ_jz4±XF„‚O9޼ô}det!ÐrU¡ µ I=>vô·‹Oª.2\ÿ[5¹ôeb•#Ãæùóml´ÓÅKüÈõͲDMŠ&Ž{îó¸ô–'€"†rRB©¨g-ò­fFŸ+é ­fqÑ׊J|’¡K‰.O“ÙÿñÍøÃðË(ÍÙT5Y2ÁX¤éUZµÛÕe}Œû˜Š‘G”ëžH@Ü®7BÇÕõéZ“ ÿU‘›õ쟜>ÝF&BK5‘Ôµ1Ùkœ¦*á ‹œD¤T¹tEâÊKDÃz@ ’OÖm¶öÛ–W0’0‰Òz’8!>@Ú °Rä®ãÈųgÐ3±+/éõ^þ Fb;£ÅÜX옳+‘£E¢·ê²È‹B÷¤?Jõç±WQ^º÷àóv¯Ê'X‚5îÅÀðb³×c“JÕj­n­Å£öÑ#IsP^D'tĂ׀î në©„Õ/T3ÚxHPÚiVT "¢$LÖ,FoT”l ²î™ïzQÒÑÞ÷ôÏš¯S¾fÿM AjäÊfÙês›l1EšnáL½JžÖ¢CŠ*‘Ê¢ÄÞf)×tyK€ŸÉ›‰@8Zo#Y>š,TVùÖ6bÉÖ’lù’zìI(¢ÜˆVz™I“,ð[:]›¡%£qظÀQêî'0jÂAõØsE*lY)(8ÃÕ³Û2[¡YRRIrT¾þÿùk6µæ³D<–Öý©l`ÛMÙÖï” ÈÂ1Sè/ÀE¡$JeO.9Î^‡^’ZHš@"ÿÆC[%‡H ;°L?^ú·Ô«XTkhv?Á$Ÿ€ "RXŠÈQ×qÔnÚ€ˆ‘ÃÈ¡døË œÉ÷Þ4°Ëõb‰Kê«tlÁý'M”Z˜)¦Ô´ŠË£x¹êDA å壴b8ØR7ǰ…)Ž:+èZ<]ǺSda FL¦Hˆ`¦Mˆ]±ÿ¢waS|J;ÑH‹˜m¨³Îr"0—o&A"ˆâèi 6÷T„¢Æ»&͉kœFÉVŽI»Å$*“¤h~a×ôB¯³Ÿyóu¡o¯“§$$fªÍ |ÿo¿©Þýˆb¿Eõ”F*T2+«zE=û5ÁyD7[ E1ЈH[3%Y"[•¶ÇÆOz¾Ô“õýøO÷0)MLÄ#3EÃ"´&%DÚ¨‡ÒÍn Δ³“J¶*©[Ò£¬¹°Œ€§")Š,efåJ<ý@×» êDŒ ‚ÁÎ /¿â¿]c¶s=´¥Õ }üÚÛ&à«AÊÈLUˆJLqj’qA¨‰—]öà2òSˆ†í¨´¸„qÃ/4j·«¼`®õôÇU³ˆhˆ(‚,ÑW9oIºB;Ó(S ú”û1ÚA‘ ?dº µù¥Ð%ˆH„Y…¤4 Y\kòen¢vMãÄ¡áÁíøÐI.š¢|)¼º¸½øpk++"^¬0…}àÿõw„O¿vv)Óì!"#qS[¬Ôí|ÛÝ0#5üð*äClÙ´ŽP©ŒYdt˜ë€€õ›*‡!œ„-0‰áx›<^ܲ.&7kúÙ0ùª45éîiC'$LúÌ{°Hb2BHeîDD`+*3Z§f;•çÚœG5Κ°&ìÀO§«÷ï.¯³%/âÔYö!½)ɧ_‹ Ú’JDèq*¤V‹vµ[rÊHÌX§uÊÔY ›³/ùïnð£èš&à˜­Dj‚hÄ –ª°¢#;ªÛUÎÔn)mh¶ìT¢k^j6˜ !;ñIä†nn†R@âuiŠÁ‰¶`€ªÛ^Œ"ñ¶†Hê€KF 3· &AˆcØ_x{yqQØ?ø…èŒbДô7ð!AˆSŒH"­z¯'b¹)Zˆ­éîõ|çÛ©ƒ ¶~ xÚ Yi'HHl˜ ývbÐÓvWýN2‚èí[¯TVQ û¶(77&ìiWtmodëGªãÄ€”s•²¾˜eh:õp ››S;ʼn€D±Ñ âT\Œ¦°µm­Yó Ì4“Œ1E*>Šþ ÄÇãûýé€Â~·EŸŸË I$L $1Ié WoZÖ¡aWê¤ IbB/YÕ‘´CÏw)Aäš(–Ø’ˆ~²~ö!þ±Ù&7Ñ‘‹¹ÒÓn)2;¡jýnJF K ™)tf\÷.‹…#‘4_Ót}$#%o'uç+±jñl»Œxé+H4º=…XŒOD’„„˜ˆö[Þ™pß]ô|·e Øb“€“$‘Ä‘ÇV_g“ P^tn_m¸nôë-í*o‘Áê¾’@¦˜'“$¿ò‹ uýo+íP5+¦, u´ëÙNŸX’Èm¡VQÛ©µ ‘¹xPd‡*‹“r¸¡ùrRa¡5®+áP \*ø$µ÷L»êã¦Ö¼qŠÄíˆ9¤0…+š‡ š© ìŸn×´˜›ÓNÞ uê­úL 9ë½BëàEícI<{hIàMsB¤ ¿ÿ•W@ ½ hÈgùÓŽñÊÀ]b°£]}­Î˜¤Ä³Ô(ìȹÒ7™N&í` BÍñ‹ùr}K –ÕHq˜ $Iê20•ôºR^ S(V¸H€$JÙâ$ ES„xuI# ·"ñ‹x²®±É²UÕ`â—¸4!OYX")-³!*F³@:]Ug ¹øh‘Z¢R4 F ¸þÍ­ ÍíPö&„4þ£¯Òĺ WS7¿ÆùŒJ¼N7˜Ü'$àD„µ€CÑ :ddžÈïà Xô³®MUöOvͨRÉÏåå‘@Ë kMÃ. Œ0Ý2§ø ªazt÷k=™ã‚ùsú÷¹Åk«½¢âŸêW ¯ŽZ+zþÉV!Ò\ä§½G8·Å*I Žå!V'e I"#DwN‹L§sº3¼THfª{Þ™x˜#Oš¡ 6+ر8,µÃ²P‰# b8œK€–kŒ11JŽÂ–bLA¤’ÇÎÀaø<áé93’`왑¶¹º>º.¶Í.$LGo4ÿNÒ"îÚ²·?ÿeˆ&‚ø¹ˆ`ûÚ·•b…xf+Hï#Tš.%(AFm! L@¿){ã¹jÁÅ/hµ¥Kˆ4Š5Ó$ˆ’jmRäNŸtNc[,Ûƒ˜‚ŠÚTã2"¯ ™)q$ªF–™yÁÕ.·""©hU¨^`PÜ*fÆb¶:lj° 4jô £ÿWd ¤%lŽœ ¹ê¤nPÀÞT>üúM· êr3’L©ɲôHíoJ`A"l1)Ú!òD# Z))Äêãè6h ‰!pJ"2ž¿ÇŠà·ûçÏN÷!ê±ô‚dÐ@m͘¢!~D…_Â)0#(Ô†·f—[ßNíÿ8ãw¾yíCŒ; ã¬.‰ŠM‘Q›I*LWv 1E¥Ýè^D¡Öí5ÒÕƒ¸Ò±xwzrEÜ-á̫̆ŧ¿ûÜ·óAhš§ß/ލ:ÎÖHD"·×cÏz´ÈfØ/%0©XJÈH€ÈâTýÑãm!ˆD[’Lãôþ[ß|ëgÏö§û)0A“&wd4ÉPh%-~G$¦ÀDÄtÓ¤bËÕåt~u~ysóîò/´'\]é©zíÄE#öú©R\Ò ºB4³ ic<äBû¶&É 9Lïo6¯žï«è#{Éš5—qfÀ÷Í ›}©ùxÓøú ð›ÐJÐv)¸hI.Ôµ¸n£¡ž5K=ÖÞó ÄH£LãÕù·¿}¥žžÝ|vw¤ Hjb3’`ê”(¸Ù%䀲aDdœ.ÏÏ¿÷îòâ¦L›ü‹ON㎴ïëxÕXèXòwrZ'Ìeó$Ko€¶è§u¤JtƒQd¼º¹Õ“¡ô³›ŸD‹MGC»¶´.‹ÍÒ¤9«vKÓåëo\­·š°õ`hş±6½¡ŽíG ¤‹lw¿ÛbìHã4Êxþö¯ÞN¨Ô|Øl6ÏÖOcà@Äš‚#+A‰dnµä¦I‚)]Mï¯..Þt-xl/žnUzdÇòÍ%b³X4åP {€Ïon„Y®yò¿+6ÝÒ%ãÚñæpñîèŠáÉÙ>”¦µí;’ÌS 9^å&÷r¼zó­÷æŒ@ g§Á³'øá©Uwwè•mbciA½’¥4Mã8¾{a½rWýTývýdðaÿtG‘PAkÝ¢vÏ%í)Á¥«óQd–ÃÍÅEkÎe7÷ax¶~¶ÙÅF›Fùñlo–Õ—1]¼~#Ç%©ž|¸}øñv­Ÿ a½±ðý‚ Ѷg™J{v¬yøM¡~nþ¡Î„åýé@>'¢]¤Bh¼Æ0m(’äêüöÐS€¬ºyx…aMAüÚþí0™]1=Òg÷»ìû{ôâá‡;•x}º!øÐí=(„ót¸¾¼>jý 'üX‚å²ypÿÏáô妴·íŸjn,óÈ.©“X,M[`ÿØg|L¦-Hã7›àɳ'o[¶Ñ°= 2ÓA+Ýʸ?üYÛ?âe{ñûžžøÿãz €ð®ïÇ6‹¡Ô±~¤½ûÃ>å__}éõÿifÔ>:l: IEND®B`‚leptonica-1.70/prog/rankbin_reg.c0000644000175000017500000001042412240302537015100 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rankbin_reg.c * * Tests rank bin functions: * (1) numaDiscretizeRankAndIntensity() * (2) numaGetRankBinValues() */ #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, n, w, h; BOXA *boxa; NUMA *naindex, *naw, *nah, *naw_med, *nah_med; PIX *pixs, *pixt; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Generate arrays of word widths and heights */ pixs = pixRead("feyn.tif"); pixGetWordBoxesInTextlines(pixs, 1, 6, 6, 500, 50, &boxa, &naindex); n = boxaGetCount(boxa); naw = numaCreate(0); nah = numaCreate(0); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); numaAddNumber(naw, w); numaAddNumber(nah, h); } boxaDestroy(&boxa); numaDestroy(&naindex); /* Make the rank bin arrays of median values, with 10 bins */ numaGetRankBinValues(naw, 10, NULL, &naw_med); numaGetRankBinValues(nah, 10, NULL, &nah_med); gplotSimple1(naw_med, GPLOT_PNG, "/tmp/w_10bin", "width vs rank bins (10)"); gplotSimple1(nah_med, GPLOT_PNG, "/tmp/h_10bin", "height vs rank bins (10)"); numaDestroy(&naw_med); numaDestroy(&nah_med); /* Make the rank bin arrays of median values, with 30 bins */ numaGetRankBinValues(naw, 30, NULL, &naw_med); numaGetRankBinValues(nah, 30, NULL, &nah_med); gplotSimple1(naw_med, GPLOT_PNG, "/tmp/w_30bin", "width vs rank bins (30)"); gplotSimple1(nah_med, GPLOT_PNG, "/tmp/h_30bin", "height vs rank bins (30)"); numaDestroy(&naw_med); numaDestroy(&nah_med); /* Give gnuplot time to write out the files */ #ifndef _WIN32 sleep(2); #else Sleep(2000); #endif /* _WIN32 */ /* Save as golden files, or check against them */ regTestCheckFile(rp, "/tmp/w_10bin.png"); /* 0 */ regTestCheckFile(rp, "/tmp/h_10bin.png"); /* 1 */ regTestCheckFile(rp, "/tmp/w_30bin.png"); /* 2 */ regTestCheckFile(rp, "/tmp/h_30bin.png"); /* 3 */ /* Display results for debugging */ pixt = pixRead("/tmp/w_10bin.png"); pixDisplayWithTitle(pixt, 0, 0, NULL, rp->display); pixDestroy(&pixt); pixt = pixRead("/tmp/h_10bin.png"); pixDisplayWithTitle(pixt, 650, 0, NULL, rp->display); pixDestroy(&pixt); pixt = pixRead("/tmp/w_30bin.png"); pixDisplayWithTitle(pixt, 0, 550, NULL, rp->display); pixDestroy(&pixt); pixt = pixRead("/tmp/h_30bin.png"); pixDisplayWithTitle(pixt, 650, 550, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixs); numaDestroy(&naw); numaDestroy(&nah); return regTestCleanup(rp); } leptonica-1.70/prog/lion-page.00010.jpg0000444000175000017500000015010111330622065015462 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ€ì"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¤Í-›¨Í+€´Rgš3Í0Š( Š( Š( ŠLÒÐEPEPEPEPEf€ )3K@Rf€Š3EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE!¨ÙX¿¤Í5D¢¤µ ØçµûÝBÆX¤¶ цR;Õ­7[K›]÷KöyÁV4×/gº±¸Ú„Ñ1Ç#×ìEqwN`Ôe´ŸPY„(®¯~¼¾ƒó® œÔgÏtÎúTáV’VhôÀÁ€#œóYsj‰¢ð<È6…;3Ï5§x·NŠÂ;y.ÝÆ¡6·ß½s+¸2kº©h¥dhةʘՆÒ}þcùU׫Íàõ3§‡|ö’Ðôô¹‰¡Y7§¡ÍH²)èA5ÃèwúV̘ €ÜgüŠl:ÍÄÛæµ—+üÞŠ1ú÷ü¨X«%tSÂ;³¼.3ߥ7ÎNNáÇZãÓ^¸ºÓcur_kàsŒõÇn¢›{«Ý,2:ÉŒ ¼÷â©â•ôD,,º³´. d‘ŠC*ªî'Šã?á&I"òL…åTiã5=Þ´VÍ0¬y:Ž3éTñ>Dý]­Î±_=¸£pk“[ $“boá\õ­­4ñ[ɳJA܃©Ç 4,Cdº-u:Í”zWyâ …³,BVoM¿wØâ“Nñ”´M#+.ÈûÞ˜ô¤±:ê‡ì[™a@#ë\äz´_½srBÚçÓ¥7ûQ͹0Ì~^NõäUÇ­r}‹gKºƒœ×+g­ËrIdX¿„?;O¥^{çƒË2M»vÁÇ4–!سw4›‡µd¾¡Â…î'Ûíš5¥Ù$²`F™ sÓ´¥ŠQè „ÍÜRµ‰i¨ ËU»i<¸Ü’»¿ˆ„}jÄZŒs³-±’b§ ñ8œq©t¢K§mÍ Þôžg<šÎ’,ëÐyBF+Wæ#<ëÇJeÍù†Ëí‘C$ÈF~R<“ÏjNU–©dk dsíPKtb)˜œ†8Èíî}«:ÛR+¨­¤½$RÈÄNzgñ­Yd‰€AõÍmNR©Æ@Õ…ŠU‘Ðå[¡§ÿõë F gUI'“ôç¥W[׺•Z ©V<(Œ36;ŒsMU’|»±¨§«gBd=@ãëA™Aˆõ5BÎî'€¼“ƒƒµ·ü¤ëœU¦K{˜òBÈ™ÈÁÈâµWîHø®¢•˜#†ÁÁÅOQ"F¼ªŽ{âž[·çV„ÇQMÜ1ô¡X0È¢à:Š3E0 (£4QIš3@ E&h€Òšwd`ñÞ•‰ p2})ªìP…O¥KWJ(Í@QEQEQEQEQEQEQE%C2³!ØF}©éŒ@ õ3µµìrw ˆ²\ÜÞ%ÀÇz™3Ä4›qqe/r³6éÈêkÐçFhÛk`ŸQÀý+¸´‡Nñ ×6 æj+Ä‚FèHÂã<ëúW$¨ÅKDwÐÄK®¬âüQ O áiìäAI"Mù^àžØ®jxVþí|–hâ‡<í* ädz⻯ë©e¨é§S·˜ZÎ ÑE!Á'¶:×!â-rÏX¹³]2Ý­£‚ŽRPHÀ>Ýy÷¬§IGSЧRSK™!ú/ˆeKÖ†wy1Rç/ÏB3ŽÝªäìzR\%»´‰#©UíCÁÀ®fkK[4Š`vyN íË(ã?{©¨%ºŽCp± gŒcy ž}+>Kê\Ý‘Øk³Xfå” ˜É2c=p}XÀ–k[uVĶ»Ø÷Èþ•“s*ÝxE_né”$§¡ãU$¶ c™[Î1lRù³ž¼öªŒ49ulÑŽî"+u—%YÝâ™§<#3Ü,Ruç8?ç5˜ðŸ»vâ@$u<Ž™ö©’9b¶„È„ä“òœŒv­yB·Cj[Èâ¸@¦P§¶x#×5eg˜J|§®Ìd“øÖ5»yÂV9s†8øêƒŒvëZQÎÑZäD½N8ÀÇ'=ê,§Éí–þâÊòQq$bŒƒæþB²ôíVavLJA,1œt­éó»XjL]m'‰­á-Æü°â³ ‰#¼ÇÆÕÚF2Aǭɬ™Ói·ÓËjŦÞÿÂN~^z §§tm®)Y€$0ùÕs õŠÛÛ‹V…._`w$ž£òã4ëÐ’Ï3Ûȱ&~W®=1ëJÚjhìö-A¬êK@ Š>H  ÖÍõ𸸷 ;‡'θ©fKV-&>ð˜óÍ]7{°èª_ßþúÒq°Ü4:ÛÇ’)ÑÄŒ”¶ägÔgï\n­©ÜÜÞ^Fû “Á÷Ž;ôÀ©oÚâ=2àÊÛ]ÆÑÎp8êséŸÎ°¯/¡† cBªwR@»Vkâ„’¹×éÒêzÖ™fͲØ\‚¯ÝeÚN¡®æöÞçLÔRm6Îy`’WHÛ#ÌmánäW“øFñ§ñ—– ‹(ƒëÞ½½%ß•§<×£BŸ¸pÕO˜ËÓt«;½>ÖâñçžeÄÄË1ýÛû`àcšÝÊ«ätÓÚ¹p6›©Ûê) KY• ¸ŽB|¢Ì@R}:‘øÕŸ±ê±ë^1ócÆÁ3ãN\sÎ9ÏzÑs/uºi”µtŸOœÚÉæKk9&óÇ$íú®xöãµOiâKñŠK2(Ûæï“þ»qo§awðíqµð¬sÕO¨çš‚ßLÓ£q!„Hã‚ò±cúÖ/œ›rkÐ¥/vÍ¿éÚÄŒ\(áðqV?á[ºn—Œd—2Ü?ß”ŽOÓÐ{TêÑl~Et(SÌÛTÎkXÂ4׺ŒZm‘¶e$…ÞÖrrI@y¨çÓòн¯— FÙ . c(œcœóÞƒ3}Ð:w¦å¨ùZ*Ëq}gHð- gÈ?0C×ó¨Öâ}Nß}¥ÚÀ»7ìÙÁq®Wr®AÝëYÞ}²ê >à'“ä;xÝè­c*ÔâõeÆ ô-Ù<Ò©YË+&U†ÞQÁôïV­WìÖÉÈdeþ"1Q¬Å”–#¡œ$þNEi‰­q,—éIæ.ÏZ‰¦S~}j;ðY°r:­70Œ.jo™ÅR¾Ô ²@ds“÷UAbß@9©£uØ c“üëžÒ®ãž)õG*d•ÎÅ^JF8ÆCÞ²«VÈq†¦ÄW÷3H¹±–8ñ»*"ÕíÞé-d-îHTcv=CY:®¶¶ÓÁjeû<Ò†+˜÷ôƘëYð’BúœVÒ\fH~ù !7Œc×¹¡‰nVй¢ Ünw`çQ®H?Μ8¯E⚎'. >¸éŠóMVÝíNà>Š( Š( Š( Š( Š( Š( Š( Š( ª÷3Ç~rîqêjÍWš5s2*ÙR{ZŠŽÑlkr¼×¶ÂV§ ña˜ t9ãô5ÉÉ¢i7ÚÃÎðË4‡÷Âc9È$“´ÀZêM´HZMƒ$rÄdÿžMr7Ö¶éª%Ì,bpÙ;ˆ+bÛgn—3iqiV³ƒÎÞ»XÍó“ÎHã¥yŠ%¶jÖPG"ÆÎŸêþU(È>£Žžæ»©|E}¤XÝÉu\Ɗ̳(ÁÉ•âŽÖÍq°¢arO]Äý2J—FÓSÄ¢Å4’›8I1|ÇêGÑW'ñ¬ïè«[-ìîɧ€<HçŸAšé"™÷íbY@ÆÞ CúÓšáÑ|„EXú’8¨uybG±wÑŽ»o"ÊI%Is8 `H\ödž+âÞ°¸¹iþÊ‘¡}¡ràç¦:x®™/ìE“Þ>µFêG°Ídjv÷7P–Æ {1•<Ép¡Bâœ%Ì‘ñvg–R2›½BჲîXÉÈP}}OJÓ´h#D–B®évœœ’*.KÕ–G•ÉV[x¶`¾HçÈzTzÕ²X[&˜»^óqšõÃêê2?*éMlÍauª @!’3hƒ~dÞúÕ•BiâH• ^2ÍñéM·¶žåC%ŽÒ€ö=x§¼‹k,–qEº!òÈn3× wÿëV]nnÚµ™×x,Ç‹Ÿ([–E.x`Ò½4¹,Fâ·+Î<, M_I·€,R4—vK1N‡Ó¨8ö®ýAWÁqÈÇzë£QòèrT‚æ+ëdzÅ¢[Ýò–T„8 TçÛ8ü…\iÜ¡þRyÛQÅ6 zÔ4ß.ÅÎ>•¢–º™ò’ ܱ ÇoLæŸ*H'Óu@€œ?.jX× ‘·ïÖŽ`·bmÙ8`29ZœÌv)žâ³ËŸ0™$pE8G ÷Å'!r\ÑߘóŽ*D| Î߆ ï‚§8«HY†çsÆ;Ô=Ì¥ V¹¬E.»uo/VCÊ"Ifm¤ð:qëëXÚm½€2K2ÏÊnwfÉÁð­/éÓØø°\ÛCrö×¥|ÓÊ7ñü]øêÆ© &´.×͇E÷*à 6Wûó\Ž„dÛoSºœ×³F—…µ¹®5k½&æQ6È„ñN+œØî? êG î''ôúzוørÕ´_^êww -,!òÌŠ›D’‚£?xzuí]¥½þ£zËu¼QÂW+ ççqØä}Ñùš¸^:_Sž¥;ɸ­€of˱Î8ªPj¶“_Ëh·óD~p1øÖbëŒt–3Ìy)ìîôÚxÈë\Óè‘ÄZCs, ‹æË0õ`c9ò{T¹ój˜•&Ùéª>lí'Û­rzÖ{ÿ›¥MÏy*–%²*ƒœvÇ>™ç­&§¨ê §Äê¾Df@IÉ2ÁëØg­oÙÚAy‰+;7;¤mÇ™¤ÛnÒØË•ÃS%<9i%óê7±™e`„ÆOÝeþ GáùUËmÞçR7W(&–”“rOP@àã«kMyg#]Å*ˆcÚ¥@ÎA<’=i[_Cjö¶L¥U%PÄrp}h§;K]‚nVº5÷íàñøS²HÍ@7`îašrxo»îô9Ù'~´ƒH½)Æ´Z’-QVEPEPEPEPEPEPEPMeÈÆiÔÒi5u`2ï–á` AÁ 35É_­×šÈ¶™Tn#‘Ï¿µwoåDJœzæ®w¼Å‹}MyÒ„¹Qé`¥$îpþ!›GhšvrùÀÌŠé\î³<«¤Œß$Ðùk½ˆàžøú×]ãHÖ}ÉwÚ³\D¤“Ó •qZ½Ô«vËl¤JT–ÝÿÖé[RI£ÒroVWÕmÖÂêêÎk\(Ókð®qÏoÎ#L7:eÖ 1´*"Ryó%8ä t'ˆãš!p¿¿x¢p²Ç¿OÒºËí1t¯‡Ö–’á‘ZbÌÌIŸÀþ•²J&3›{ÞÓÒçG›Pâk ÐDNvƒå$}Nj–ƒ$6W;õŸËp;ÖÚùVQ%µªíDPì+—ÖDPoŽ5òÚiw>ÜòsÖ°œœÓ:hÒÕ\é$»´žâr_fq’„Œ*Ë´ìBT)ÈÇ^•ÍÚÊépÎãt~aÉϵjy‹5ЀóØÖw¾‡C¢–©ï/vC³!‹öôª–nR62&âNA&ª”-q1Î0åW=êD-¯$­ßõ¬¥¬„餬‹©!y0YÆ@Û›–Ç—æb>o¥1l¥‰8aÂÔ+–íãœîóÚ¢K¡‚r'µÕ^;`¬› gƒÉzèáHµáûH.ˆ7˜É;I÷ñ\t&1tZ@<»pH…néó\]¸2“Éþèô«„m©zJÛüE­A£ÝËi§ÁD2í£Ë‚G@äœzt®oû*àÛ£ùW ¹÷—š¹ÉêÇŽk[×-4+éºÖe;¥•ÎV8ç·ÓÚ¹{½Jþä´×:•ÌÓ+ȵH>ºÕYjo•ô…ò`YVGùÊãh<œZl—VñLÆ+lK© ÄŽ1ÛÒ¡ºº–[X˜º³î-ó6A¨.¯œª<'ÌXô$g=>€Ó³–¬&ú#º±[U×´[Ûv)<îLŠOj0ÉÏÔWzò(ÚÛy gšò½Xïô¹!œöÈ^ÝË`¡9Á×8¯EÓ.>ߦZÝ©½‰Xäó»çñïUN|ªÌ‰#I ±ÜïR]ÄàãÓ=+*òù4ùFüñ3uÈÈÇ­]³™n óPe~+EU9X‡ .K,†$•#wÚ3µOåYƒYŒë6Ö12±žzààcõ­g‰f´š6‘á ¿}8eÇqëXvÛhúŠIr©;L¸³0ÆvŒä°ÇÚ›ÔQ’Ié¨í+V’]îêáO 9@rzàtúREâEžKVH$Xy#¡ã??@Ò.t—¸µœBö÷*XLŸ+÷àƒßçô¥þȹ°±Gþ™H'‚sÀÇ$S_ ‹Œ äîl9;R['¯­HB”ÛøŽ+L¹6Öä?™=’ó¨ËÆ=î¯éVF»§;7•p²6ìlŒÄúc¯z9ÔV¤J:ص¬Íht÷KæÛädç=¿ZÀÒbw–áуÍùd' (ÇR;õªn¿·û+«Åwt­äû¡—œBEW¶ñY؈ï!.¢ùL[38ÎGâ±îäÖ†”ùcŠ^6’æ GM´H‹ÛÍ$Ž™nB«¦HúÖœpx‚Ò.$3¶ð×x%õNçQ½Ö£O±X0 r÷ ˜O©§jBD…\ª¢ Ž“®Œ2sëÓŠ­$þ•œmsò[k±ø£FŽx¥.·n©†au2Ç;ŽçŸÊ•*‰ûª$I»ît(îÑFÁGÌ “R)äóÈöª¶%ßMµrÙ>R–#¹ÅOm¿SÖ»QÏbecŽG4¬Á@,p:Rž´Žz醯lvii:÷¥«@QEQEQEQEQEQEQE †Q´œäçÒ¥5¹p=8õ©–Ã[™·“† »,F=+TÔ-­¬ZiYv‚s޹ñõ¦ê—2Ï ¬’ñ±ÁSŽ ë\Ýí¼êšt¬^W2ÈQq´†Üyxò’”®{zµÌk^ƒT’ÒÖåó ®Æ7NÁÿXºDRßê6ºa@ Mîx8NOsÓó­­WG}Bi·4‹4@¼mÚÁHäøŠ<+0“W¿T˜cÜã3“Çá]I]²mÞ6%ñ¥¢µý¤Àÿ­Ê†ôa³þ ZÚ܉¨$Öîr’„žv÷§k3X<)gv<Ù&9V:çúVLå"Õ lu³àÑ*—±t(jî}ë´L%;¥ˆ•èGOéI{²K0ô8ê8“xo6;œ¶A$ã½j_A¾Ò@2äõ©zhu´–¨FHã±wŽ<OQÖ«%Ðs‚è‚î÷þª±¥ÍöÍ5U€È;ìÍUó..-3˜ß1úZÍvw6mJOjd·#= N‚&µÜ¥°zŸz¥jf¶¸Œ:(þfôUÛeò`1lg,Ò*’:ñ‘P•ž¦RÜŽÜ´ˆûñØ_qVþe.¸>õ•¦°«¸a!\°# ÏZÚ´`ÓÉ!S÷ÓÐSjäk4øgŒÃˆç$ñŠÌÖ|emioöm!CÌçkM•¯¹ªZæ¢×ú”öÈå,-ÂǘØü«œÔf>z[¤V1˜ñÀêJº4Ûvg-j®Ú –Tµ„ÐÀgšÃ»ÕÆ£okÌ’Ä¥\ˆ£Ë*yÇŸþ½kܺØèVšTl~ÓuóÌè[?ž*„ñGunm§„kzu ã£Ô™ÑmÝž$¾{½4£1æhGϨ=›ùñé\õŒZŽ¡âi5+·ˆÛùrùè9ëß<•Éh“ê}åïØc½Ó›$WÌŠAÎ ÛùÖÂx¯_Š=ÓÜ&Øí?¥’%Ó–ÈëæÐ/'Ž9¤º…®ào2(aN˜ ’rx®*_JI{m'z €ï*¦ìzpx­[j÷7qÛíä3»Ñ2£»séPh~Ò]®Ä¶Ép¾{,fBI ÈAJugnn‰Špw–¥8õÄ—Z^’eŸcÈW £†.G@jxñ +H…cŒŸ_aPëjLV³Hr«:Îà@ϾH¬$š‹’ÜÅüFµƒ/Øm¸aå®9ÈÅX=«ÎMºy|¤QÂ*î^;c¨úf®ÛÜÉ™!œu>ë_o¥T+h›3”lô/E*Ê Cœpj+•™•VlO$Œö?ןŸoƤ+õ5)#"½»­ …´‚–¨Š( Š( Š( Š( Š( Š( Š( 5^`ä¾Üƒ·ƒïV @êAv rGz™+è8îr/m K :L$|ônµ‹­?—5¹NZ5ÃsøV¾³u…½ÝÔ™Ùà}{w¨8¯¬ ¸B]•‡'gú×:}r„¹Zlç‰n5.J5š¹Rz?øª6Vé¥ëZš²°yBɃøÓ£|úÖÅŒq¥öª’•ÛäÅÁõÞqúŠÅºk“ihSûR KB ùfFÆñùŠ¨Ãš-ÞÕ/ÐeäžtÒf5!y9éïXͨ4¶Æ,a€ÉlûñZ·l­uÉ(þsŽÞ†±ïmB;<8xXrÀãåâ¢)-N/RÅÓ<¶ðÜ.Â0RLŽ„´ëÉ -µ²N×Çó«’Úˆ<¦“ä#iäŒqUnÄvóŽM¨¸àôüêºX‰EÜŸAœÃs$LÄÙùIþ/oZ†æO²ßù ‰71(Ck5ÂIÀ2m#jžxÏOCÇò¨oäޑΆAëŸqS¥Ç&m^ƒ5§+I÷€õÍ]I ÖÓ©Õ 7c™§,±Xý¦žTlùdrTœdV„Ï Z².B»6Þ ’E+™ÉkaÑá‚+˽Ê|‚Œ¤{Ñw¤‰Å$÷.1ä'Pê}*8Yï~ÌeÀH¶Èé×9R@ü ¬ý*I.mËDLZ†©;~÷©Hùl «ƒ¾æ3M—z=ãÝM2\ÛÚ´îÎ숑¸ç5OTÒõ+[c,ñ¥Ä@¯·â»Ø´ %-ÂIl³9ùL’|Ìǹ®R¶—B¼ŽM5µ|¬–ŒÙR;ã'ŠÝ»=u}81þÏ"‚¥†Êó3VŒ0yñí(p¤cHéZš¾•k²_icý—|–ÝÓ=HõÿëV"ʳD °dçûÜu­ã%%¡É:Nœ¹d\KK­B{kx2¼AÙKtÿ=j¥Ì(Úßq2G ,ëŒÿLUƸH5/:ÝØÆl$`à •ÕgÕ×˱‹nLóÊž?JIô4åIyšº-ûé²ÄÐ> ²GÊÙçŸZì ñ.‹uúóðv»VP3È>¾£Þ¥K4‚ð=¼k,¹dÜ~cÛ9®,D©ïÒ’åКC³–Ëg“U¦‚ÂêhâžÞO¼Ü?y•^Ìã ÑyÏô§€ÌGÊ0£‚G5Ïv¶5mXÄK-BÆf6² »\±Lx¼t¿ãíSÃÖ#£õŽEà OÄV¹ŒHr0{zÓ&²Šëg 9QÔŽFxë×§½kܯRh«b¢_!P6Z[H’çû/ëZ–q®ïœ…Við»xùBŒ/Ö³>Á&—Ÿ¥BK&ÝðÈå·¨bx'ýãZßÚÜË)öÉÕÕøaõÚ¦¤qÕMÈÆÔ¬ç´¸Œ[yO ä¥<™˜Œ 8#ÜzT²é—·¸K3iR1tbçðy­”M®†ìµ„Ææ'úùÖ¿š‘†'F2Ý€Ç_¯Zì¡;EÜÂQIÝ#“{–öÒHt× ˜;YRKAã¨ëžkFygѵxoîa€4ÐÉcrçn2¡¸é»ñ­ÔœO§œÕMb%¹ÒäVZ-²¯ü†Ç㊹;ÆÈ.å-LýCÃVãNQd%…ˆ û”ðzÖÜvmÖÒ,‘Éä&ØÕÀc×üô¨ ¸ßl$ñy ~^þµbæ)d¼·ìQ’J‘Ôq\¹´–„ó¹Ís0ß*®Q3ò©Çoʋɼû ('G,ñnçA ×Û7 ¸ya—Žõ›®ÎâM<$¨’<¬£p=ÔÕIr®c Bú"Õóedž1*È Æø©ÆGHæ¬Û<°y0¼…¥¹ËODàp=ú~9õ¬»¶JRêÚ–ñ!HßkHsÉÁØ_‚{é#U¸±hÀÃ…Xƒõõ÷®(×I%%ÔÆQw7-#’(f—Í_fÝÞäzÔÇ—Õ•§j2\I$RÃS“^¥:Ñš¹ƒV%¢En ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦È ô4ún)uŸÔôo¶Gs Ч#PYxhéñÊ`Q‘Œô]«Šér~lbª_Ê µ–f$ªŒà ŸÀVn6½ÎˆÖ›i&y¼‘ǽ¬Áæ`°Ì1ߨÿÙqøÔPÛÍI‚0ˆM§9ü;ÕmnìYj6R¯“06sƒÆr¹ôªºÕäQÊ+áî^kŽ¥âô>ƒªåd× –7vî˜r«Õ¸ŠÁþÏ–Ê7šMÒÚ¾ÏU'µXŠîKH "‹?)Ï?ýn¿¥,~ ŒŠæMðÉ‘¸ŽžÄZ…tŽ©'c{³m+.ÿ—åT$dœžJê?á[¹%{ûŒ BªØ!~¾¹ÍaæG¨ø²Â%hÌqfgMÝ—‘õïZu«»a•œ¦3'úâ£=¨O[£“”Ÿ+ÙÏ¡hZ­¼ñC$QݨΉ°ÊÞ¸úýkm#RÓõX ¸ŸÎƒcI ñ¦wê¤zÿ:Ï“Ãp}žÖ{9çˆÎ¸r\óž¹®§I¼¼‡MŠÂPf’2êd~~„~s=¥©JœãïCK’h’G¨[ ™#@»œ©Î#ðâx‹’má3(*›¸/žß­dhòÉl–ñý×ÞsîMMªËæ4q¤›]HgÀçŸÿUg{;8¶îRŽ{ˆuQ1ËSž¹?¯åQi·oiŠˆ|ëC qÜñÿÖÿ9«Òfi¿Ö/HÇ5öeá˜ÂÙf\ dU¤˜=56#ñ)¹Ó|øaÄYéÉôï\Õì÷÷$Ì÷2ȶ#ˆCz'š’Æií ¹·Õ ˜ÛÊB†DÈ^zÖúiVsCo$×ÓÞ@+ @;p:‘T’ƒÔÅÉï2xe…|Ûu öÅUHÿþªåïô¹ ¹’k4/nçq…FZ2˜ë^œ°@Œ%‡Éäô•fÞéé1 9 ã“ëJ5z¹jÆÒÝyÛˆ_2ª?]® žü`â­Ã4»c1’UXma€ýDÖ®¹gymkˆÖhÔß(cÇ^zÿú©-oüv¸x|¹À`6gŽØïšÝMìsNŠ‹²eKˆ¼¥Š$vYr:ŸZšÎÖsçáco‘¸à®GëT,'·¸»»†9žH£``‘¹#=Aü«h€òX¦,ž:GJ®k+ï©ÓhrÏ&‘lò°fU*r98bj¹nâMuT… mjH$p ·? ‰á+³²[V_™[xç9ëúÿ:Ù‚qm¬\$ªTÜ€ñ¹èÁT¾cGJ·dÕ—4,‹ZÁ‘'²˜1p³}Õ1J㯸©b’;°Ï |Ø‘HåpGniÂ×aæugH¸ßä0?A´~µ¤YÞ¦¡-û\‚`ÊÜrÇq ûé«Lj„ãu¹• J.ÌÞŽEÝ厃ŒÐ«&ö ©3éAÈçƒÈãÖ¦@>î5ä4îvóòU‘v‚Ç;»ÔœƒŒƒÎrMµ·§ø‚Öá™&›‡Yc#sV„g$vn”:å[xù;ŒæšÄIÌMV·ia5%ªÂÁŸ`Ÿ^½+¥ŽõdpÁƒÿŸJΟOµº Ëi1þ2£5Ñà[–¸žè|¶8nIä~&…‰—BÜÔ·FÅÖ¡-¤1”„È^QôÏz“SUlRXÐÀnHpAžÜ‘Y!oã¸w ð‡.ª~VL‘Ðú:›RÔ£kTŽcä1™gSŽläqZÃ]IJ)ü'NU·ìS·ÆñWaFÛó(üóYÖ7vú”^}´©$yûÊsZ°ghÝÞµÏS†¦ƒÂcÿ×Jƒy§cž)‘°2¸ˆ¥uFšŽvMEW@‚Š( Š( Š( Š( Š( Š( Š( šÎ)ÔÜI^öålídñ¶5,séXÐø‚×QšâÙ2¯ÖÞ=EI®†šVTfW þ,ðF+Ÿ¹X—R`‘lfÂ:ô8ö®Jõœv:¨SRÕ˜^(Òc¹ñÙ#$_A½T`‘?Áý+âG»?g¿”ÆÐ¹PÌ6ïì2}+_ÄÖ·“Mesk![Û9KD™æN>e§m/Ú,µë1”,¬r®¸e=pGnµ”¤ä®Ï_ +;½ôR[\$r0Ì}t?z¯%„Zœ^di‚ÀŒÖº¸lẰ[küy‰¬£ ¬‹¸Ž”±Imš$b¤zZÉ»m¹Þš–Œã,e}ÅÖS½Â•Qå»7M§"ºßÃ1½µÔ¾YmGîî"?ÁþÕrþ#·PÛqñ†Fê?Î*m3ÆŸc„ÚjÖæuo•¥+?ýU³‹vhçO•´Í1âM6 ¯Ì"TFHçŒ~Utjí-Šêf’Ü>HWêTóüêŒ'Ã][Ïi)2Èÿ$xä“‘øN×obKb÷‡î’Ç=1éÖ¡ÅTïfäiI£“žZÕr±’FTˆ7dqõéDz®›æyfeP,ÿ*u¶§[ZÍ@µíÙÚdwa€Iå\à‘[ii¤Ï#Û8%¡˜² ‘œg®¸ábÞ¬ÆUZèf©ã$ƒžœvöõ¤smÇzPjhr½æ’ –‡ -˜9ÀõONüR®¡hl£»Y1ŒsÁÜN>ù¬jÐt™Q¨¤Yn«zçµ8€pÀ{Õn‰Œ%È |±ÝC X-•P§“ÛükúÐV“sà±ÜS‚ŒñƒL*Ápxö¥ÈÝË1ŠÊK©$Ê/¯½GÉ šE#nÝÙÇ­H­÷v‘¸žqéQä&…`Äg'©6œ·Ç¡¦³¯z"EVlKzóŒ ¤‰hyRxßõ¦ïl)•'¸Æ.œS%öä䑌ÐÊùäðz­W#b—¹°òâ–B@FþŽ•»o«\³!R¹çkäþUŠç''†ƒüªäDÕÜàžv­W4£³&p‹Fýޤ/âVh¤„ƒÊH0¯F?y!õ?Ò¹ÈÝËù«ænõùÖæ#Ëw{×n´§%pUЉzŠ(¯DÄ(¢šIÝ€8õ QH3Þ–€ (¢€ (¢€ (¢€ (¢€ (¢€µ2G¥niõ Êy±”Éô¬ê¶¢ÚÜç¯u“f“góBzæ³.ïàºÔÄb'ûSQdGÿ@k¤žÖ¬ŠŒªsÈïëU®"Y䈮7©?3kË…åñ3ª2Kc“Ômn5»i¢H¼‹›vÝ  àùƒ~â¹kieÕ5Yf’Ü »–p§c©ê¿ZôÃJn-ŽÿZåuÛ!ovÚ¢ŠuM ^{nÿè‹OFváê¥#œÔ®¥2 1Ëœ1É=:uªñjï&Œ2€AéïWí<½QÌw[— €wgueßè[4žKyˆ¤ðN*\:¼*Å«ñiz’4¾XŽsÐ×ÎêiŸ-£U íÉ^ElÛX\H®xhÈÏZmâN©uYw6FrGjq|»£+Ø_³œ J§ÐsÍʲA$į#°ÙódŽk¨a£j‚x¢‡a!È"²¥±²³’AnírÁN×n­y•Ét¤ºè\Óq`P+åÄgÛùµ›¶öxºÄíò‘Ôò gèò}·J®%ˆÀrsœ“]t±+ê‘&Ñ"‚pOc\ÒW‘§4cŒ´ŠúV ¬säç}õúóšÇ½×¶î5í0me™\Jß$J6°ãӊ󘭤ЕœUõ%Û±qm"ŠQ,H¨ÝöðáRïVN8ýi¤;dc¨̪&Å9aÔšv¾åE#í'O¾Üu¬ ʸ7°O ÒäLˆz À8#ñ$Õ=>` lõ«µºI—lo#|°ºçktöÿ9§xrçíoRÒIr$l§nÀéJ½Ô.s:|SfúÛ͸ûDå(vämÈ$~8§Úª)fÞÌe;ØÀlqíÅD7Hv•éÜQ”Ëóu¯=•bäŽ`žàS ¶à9÷¨Û–ߎœfœsü8î:ÖRb[ʇ àóÈâž ©Êœ/N•*A$ŸÆžŒ¤’N2)uÉ£eØsȧŒ¯8ÇòÍSŽeBS‚¹ÝŽ*è0çVd±ª›€`¸Ãd4ò¸Ç'¹¡à’zúS•¹Ý–=‰ïU{È«* ßw§^jÝ»`pTñÇ Üço>‚¬B­cŸ}½x¦ÚhMèh[>Áòà>3œÖ¦—+K ïÁer2;Ö%´§ÏÆÐr;{V¶ŽÀ­Â€$5¶VšGsVŠëœáEPEPEPEPEPEPEPj†Aàf¦5(É9ëYÕWˆÑ—vÌ®ª‡$vª¦åòFAÇñWæÛ!þð±T¥tlbü+ΊHÕJû2 œVlÁŽQŽAàƒ‘èjé`*ýëš®ñŒä¨ÍMM£;N½¤]Crnm#fÔy‹Êëþ鬫-OIµV‚;‡·‘ÏÏö¢Az‹û²r }…rúÿ‡l¼@9•*˯åT¦¥£;)Wqó2>ОSIéqHêÿ®£mD”-ºÉ0uúU=Eo´(à¶¿‰Ý›Ûù KST[RñVb9¼¢¾a3c·«hRrØëXªqÑšéqdðJ̦1ÊFY¸ëY¸Q Çm‘«aQO˜w¤3Íg§Íuwk¾O½ÃuÉÇAé\î­ªÝê÷¾dòª¯HÑøñZ{)u.xÚi{ºšþ”ÛëBày>až€Šôy-£{ëK Ãr)CÏPkÈtéÞÞþ6¶MåÔ¨óÇ#ùôû;±uª„ç lÓבYÔ+±1¨§ —õ,jZSÙnÚqëÁúW ugqo¨ÙâR‘ÌÌ“c§Êqǽz{ ‘‚Tt<× ãŒÛèI¢;J®G@I?çéV⤬M9$õ!Öô¨5½1É‘/mª¯BëÝOùïYzu¼p xî~Áv¹ÿG— :”=¾”Û ]ož)ôä•ùçñÿè Úœñ,›&RÙܧc§ó5ÊÛZ3º ùJÖzþ¤‚;U)+L8îð~óduP3ÍoéWIªi°Í4kö…@ºŒœô#Øÿž•…r!Ú5ííZ²…Ø{&9ç¿­ZðÒ¹,2²¥º7ðÄ£¯<õæ®j·[œ“NîçHŸ*cÿ!\¿‰d0Š aéÍgEEÏ]ŒdßCžÓüa£Ïa$úѺ’ìnÛm+tñëõ¬Í2{g[·XiñÌHeŒ žç“œµ×µ®‘mµ£ˆºÜÌ¡9ä…íÎ1\î£ã)ôé+‹{K¸LÞhp]WÐ zó]©Á&¢Òš\ògQ§ê*ðÃùI™vçîÍŽ ׎GcV÷ùk$®HQü=ÿýuÌê:‡öµÝ¹¸røkp2§pÜþ¾õ^çYÕîy—ì¶@ž0››<Žýð}+•ÂÚ£xÓf¾¡}q<¦ÇI ×H<Ù[fBÎ:rMi”Óµ‹(S¬AÚG&3·èGÎøvþKM^i&ÝG0ËJ±£(ê@NÕwW¹°ŽâÊæ‰4s!7¡†yϨÆzÔÉÙØ¯a&^ &“4w7B ƒíp¡$2Œ|ãч>ƶ´›»Ëèåšåc‹ù?¼ÜïÆI-ÓÛ½'š3‚ÈÏáþ5o _ÏpÖžu¼­†]±Èz»ã=0:9­és_C6úl¶pêvFÛ„nw/ú‘XÖ—vÚ$ÆòÖK`ƒ>th;äÁö®’ÂG{xÃÂ#aò”ôǧ·¥GzU"ÎÂòä\rI8¼¢¥LŸ¼ìÌ)uëÙ^9^XöæIc’.‹¸üEh†Ðý{ÓæÓEå´zh \ý°‚‘¹àñÓ‘Y‘[ɤM•uó*¦mfòÑ}û@}…sWÃZ)ÄÉÔÖÌ×Rœ¸Ï\g¥#2RÎ:qŠ€>ÀÃvq¥ Ïr8ý+βeYNÖMã`RI,6¶í<¬‘Æ¿ÆÇóÆþ ­£–2cþº·4]Û••P©ï@qøZ(Aé}G*v#Óîíµe’ÞMˆ&#˜W<­Àýç5Åêª4 m¯mq ¬ÑFNÉU›#±Îk·‚>\àŒgÛŠÎ^ï[˜Õƒ‹Ð®Á'§20 9ç§–B€A'Ôä 2†>ž”ï¡›ÕâAæ„ M^ѿډòÓúVu¿7JP#‘Z*¸šô“ò@PµvaRç8kÞö6… +Ò1 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€L~”óQ¿\wÅEGhw.¡ÈVçbª´È̸8ôæ¬Þ«+åWŽüU²;nBö¯6÷f¨fAnòHã\ËÕ00FUjRFÆL±¨$ ƒ:œ· 1J[D®êH,xLt÷¬Zö='Ošñ“ÌÀ¼Äà̊ظÇ£5Äx¦v¸Õí,”’Æ× £<“Â"iS‡4bí©N÷¦óPµõÇ?ì¨þèö©šF“¹é·°¦\ Ðçw”ªÙqò±þïÈË­z‘´G4¦äÅÜ¢3ÆèÙpÜuÍsz¦Ž‘Ÿ>ÉrÀåã jè‹"ÂË÷Fí w$ôךŒª&©HÜo­jö°ÔšÔâ­®$·ž•å••ÆqŽq]¶“ªÄ5ù ‰£ò£öÆHü†sºÎšÖ§íP.ëYd9F¬­>ìÛjqIbƒk7¡#–kž½.e¡Ù‡ÄrÊÏf{Ìle…~u'¡9ãÞ°õÁÅög€Ëí•aÁP„ôüªµ¾¨·zhkfÝ‘ïVzt>•™=Û·ˆô®X«»‡Ïýsf¹T›‰èrY]–î|3¥\ÈO‘äIýø¸ÏáÒ¹{‹kï \æGß Ê¬øã±÷é^€z'×5^êÆ+ˆM¼Ê²E !äc×ëïXÆrZ2aQÁÝ­¥‹iñ[ë’B“,'|¨ßxŸÃ5Ú£+*°}Ãkg¶8¬o²ßO¤_DLr/>d}~•'…I4b’õ*¹´]—j›JžBñ’?/Ò¶V<‚qÁôª:µœ“ÛÉ%¬¦„”•2c%O¯JŠS´îa=V‡ŸxsO¹¿²?ñ31}¡Jå' êF9ÇCš½gáv·Ôa´Õ Žx§FQ+7,Àäcž8­iðÇ4ö·Jþd*bŽfÎ׋±±ŠÐÔîn’³šÕn+\HD~}³šîÝ?éú0‚iJçòëfÖÀ;AfÞZ+7ʧ?6=9­øšX?ÓÆ.¼°1*î ÇQÏ^kÞÆâ×X¸X•o˵[;óÎ!ù×A¨] .š+Xð6Ș9À9¨åº±½)F)óuè*jëýš~Û"ÛßÚ©) wç¡ëÛ"ªI5Ýí¥É‚v‚7ûÐÆ£<'нýƒ³§ Žk{¨d;’ï1O†)šÆ˜4S¦*˺åÁóNî§ž¾ƒ$ ]wV;-‰åñ\¶öË™+C*K$‡j©`zʵ´™ml$©‚ð´…ÃìC9û¸À®Zúk™ãï†6YN Üu­Å EqÏ·ûÙ–ÞLªúÝÏ?€§Iu9«GÙ´úí£¶î‚ç#üšIîçó…ä º+b0­À›+…=ñQA¥¾ø|ëüÆ)Ї8á¶ôÀÏ\Õ«‹o³(» =´"8Bç…''=³É®¸SÖÌâ­YKáBh ÒhpÊã÷¥¤g Øïn¾õ½n/´É|¹í7›nøù•”gõäœæ.|b,RK 2»¸židŽ0ßêÁ%Žà=Ï­TMñŽ»šîêhGï˜~õ››øbŒã¦õ†¯§êÛ˜äæA”Áä’èqWd nAàr9®E¬|Q§Éõí¼­¨%/Ýí«(çšßÒµk}^Ñ®-¾m§k£“½[Ðþ¼ûW™V“ƒ³6ަ„YÊïÿg¡>µJ×|Þ?x–Ýd€Ûˆæp^…¹Ï|í­(Ìp>P±Ï5‹¤ÞÜÇ⻥ŠÖ+ÎÉ0S†;síŠtU¤R6Û’E cU6–  ÈkpÅIP c“žã×Ú®éúüw|r²²—PpÝy­û6·šåç0¡›nß4 ±_Jãu&×Ãv×L—/ä»n…äGþÆ{ä“ZÖ£«£z2NjCõMA.4;Ø× ²+(Ïn+ªÑåiü9§Í.ß6[hÙÎIÉ*3^}oiy«Ì4ë\ˆÜþò\|¨Çó¯M†m-#†+j#@{(Æ×*ÔŒw"’P!eþ%`@銒5'dž½zS5¹í×S “b˜ºŸJN6Õ‰c<ÃbIµ4nØdfn‡·³â¶™öÜ>n£ðæ´4…1Þêà€Ï|ŽµÙƒOŸ^Çwª6¨¢Šõ BŠ( Š( Š( Š( Š( Š( Š( Ô¸J`ƒSÔOÖ²­ð.Î×Q´àõ$à ¥?Ï‚IõíV.™š]»F3Þ‚©ßK ´3«–Ú=;šóc+3[>âA=}*FäŽLuÍHÌ.#,¼«/µ ŒÍò€¸ JrwÔ¸”frc,§“ÂäWžÝݵƽ©ÜåÎÉ<…Úqƒ‡$×g«j0évò^ÜçʈnÚ:“ØÄŠàãŠo#tɲY¥u8ÜKsïÍo…Ý˨í’ ÿ1m¥8ǽ*HìT3áAà~Òb<±ËdÔÔ{\º«± 3è§µz'"ÜcÈÓë1@\ˆáA2(4œóŸAýjôž8ƒÌKÜzUKTón®n°É‚ t ¹ÏêjÚÊË6J §¦GN•Öè»ô)Ïšíyo"aNz×-,oe›w€ÄÄá÷rýÏZì/mžâØýÐáw+z0ÜÕ"Ëû7NŽÑpÌ>fsÉ« &NÑÏÉ隘(;J›½…qˆæB@ÃéL{¸íÿy<«=2Ýh/†8V<ã=*¦‚¶ú–«©IyHÀ”A ùc@Jð;r3øŠÚ>iXnM+˜†àøŠå Ó kv\rdÚ£“ƒŒsÆkbÚÎ{«o²ß\O4D€ñÉŒ\â²4YáÒoî쯭Ý(ÈÇNÙ8 þ5°uë-¬ÈeG÷Š¡=ùÁïÚ»= ¨Ír]³Æ:D6ðGykCl©ä2Æ>áÎU¯<_ êÙZ¼;Ë1,³EÕPõN¼Ñ¯jm®hÒØÛ#FK©rb란סü+гL#‘#,ìvÂÁ±»×Ò¦¢i^ÅÓ”nz„WIª“-£´¨¤)Ó=Æ{Õ×[MRÅã–$–&wËzçë\¦“©jw~ŽþÍk¾Q²&“Œêk±²ûDr4À›AY"9F0cÇOzp“{„ÚåÐæï<0¢8£·º“cʱ¢M‚'ÔÖ‘ð–›{l«u%Ë˸yFU*0p©4 %ì^zf‘Ý™J¿r;t?•Gcåjºa’èy‹#Èwç•!ˆc¾MjžÎ:$c99èAo‰-c³t´Fû:yr§Ú4±çŽ:nqÏz¥âßJ|1%§šmd–äGtÌ¥^(Ï\^ÈÍlÙ[\Øi/渱ÁÞÎrʸïß§|öèjÆ»¤ÅâmçI™Óí)x®‚Ž™Ê°ÇcŒÂ†¥©Ï8$îyW…íÖËÄÈ>uMÌqÔŽpN õ#U™iÉs‚™þÐW ¢iö÷šM½­Ä‡ív°Ha) zä~ðéPéwª õ¼sì÷²…ëZÉÉ{Ñ:ãJ3…™ê2YÛÞ°’tg|åw7Óæ­4Zä‰Už"F ÷&ãñ®§þË{{xIIÜ ñÎ 5ÈøÉ¾ÓâÛ(“&7%OÝÉ>˜çÚ¥ÏÚÅÅœÞÍÁêw· go%Ì€íw0'ð÷ªI©£éÓjÃÇ,¢F·VÃÄŒž\ž•¬ëRF4Û©ô鯕5È"N p 6û‘‘Ïozé®ïlõ¯êHL¶ÆR¼ü½A£Ì“Bækat[ø¯ìÅÌQ¼`3)Lƒ‚=)5û;{ö#±•H†røùqïšÉÑ~Ñ µ¢©¹a$éÒ%oïzc{æºÛ]: ôíFðË"œ«·Ê‘û¨?Öºãd¬Â´ù5êgh>DbX¤Ýíu,-Áð'¾A{ÓI gî'¦êåõÝ~!¬5ÖipÓ¨Û; ¾TáGqžH=k¢Šò ±nmÑåi¢ Q“·ùW%J/ŸN§+nÜÌ܈ÞIJ¢ ,xÇUŽç\?ñ.(­ÿ]Ƚ=Ç\×Ao¦¤–Êבî€^2rúTÖPÃen¶ÐB#r@Ïrrk¢hÇVa*è†éö·°“q2¼®Ù`£åSíK§ÀÑßÞ±d…H9ï‚ O—r Œ|Õ<æ‘p85´SÓ±Ï5ÜœRÒ Zè$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š Dø-ƒéRž•0Žø¬ªü#EKàŒ.1õ¬-YæÂâ(ecѽ¿En^€G$Žx÷¬× (¹¡=¾•礓49½%Ñ®4×m½e U‹`}@£råUBXõ©M²DæhÕ <àZÇÖµô½>{»–@Ê N =€•;slkaë¨ú¥ÝΙ-À¶´¦á¤8ÉÁÂãÓŸé\pÔ¤…ºW3"ޝ¡«öÑ Ýß³Ë{8EfùTg!qéÒ¨Ím(˜H²²«¶aÈÎz0®êtùQ3’–…„º·•"d™ó¡¾aéÅE¿pvÁ¸=j¡&ÒåZ{H·oÚ&„õ;LdÖ ·Œ…Ž1ºgnàŽ5²ÚÆ|¢iÓŸ&h ¥Ä¸?SŸëW#“œäóÓŠ¥d¾e®áÉiånzòÄsþ{UˆŽ%ÁõÃ×% [Rט†ÜÄI½3YšT’N×R\¨Wy›rt\ŒZ2ŠP%¸úñKMŒI̸r×/Œýk:†±BÜ]A ¾Lä®9*H#>¢¨\ivÉ‹L›®?+øÎ…hÝíÀ0²I»ç’ª;ÒÁg4ºK¦Ýæ/%vª·cïI¶•î\ZÙ£žÑ~ß´²ê4e*ÜÇcéÞº¸|F±Ê"»´–&þ6(‡'ç§¥QòV-ZË, HÒ™d~ Ï<ŸÎ¬¤É=ÍÕÔX0¨Hãoï’OëŠÊTã'vtF«‚,iK3¡2ùkÆáä÷À§ÂUc"â(®Ó÷x®PA'‚:W= ˜4-Zl|î!¶Ï¨f,ßžÜW¡ZCöb] tÆ*\!Z;4?x®ÌY”ÝÝÍqu yìXžnm½·„ŠÐÓî4Û‰$’ßBýøùDlãË8qœøU«ˆñAƒ÷€ã<{VLvÍEö(Ô²ÏÉËßéúÓR’z³§ÙBJö:+NÚÝÖÚ;4³•s±?Ý5ÏêžЦw‹çÁ"£\yQ—qÀi©osuŠö[ˆZ26a’Øå³ìIüê;f+X¯¬užòkr©*<î0 sÅií­¡J)j‰4ûY¢žÖìÐií œå2p¬G~3Ítj6ÑC3’2…‘²ƒœ ‘øÕ;ioó\ÄñÀ×VheI“qÊä7qK6›v‘YËz~Ï(’%÷m.Üt&¹#‰ŠÜ–Ù=õİÅp¢)"žíV+d †“®Iôêiút0Ø]Mgoû¨¬Öã?xc?í~µ$q¼W>{I-åÊDË—€'“3DQ¤–QÚÝ¢ÈÊx*}AíŠÊ¤ý£]‚ÖÔ¿+Ëgum.ǒЮÇ3±²0Äu#¯¯jËÕç›HYo±’ÞDM¹.Al€î*®ÐêÛMwå³­¼7™ ýÓ· cŒŸ¥]Ñí¡Ô,ÄŠZæF&LŒýHöÇòÅ]*Ww`”oï|+wE±Pž| 6s’á€%ïŸéWüC§ÝͤÜÿfF†O$ˆÑxfÉù†:þµs¶ÐÜè~#žaIc1n‰ ”Äe‰ãèIˆ®§JÔ廞í&[}¿» 9Žq]iµèK•ôžþã‘T$=èÅ—Ô~§Ú™¬Û­¯üLc‘üÕ 7 >ãÍPÒ’õURFÄ`=ÅgA<3ÊÞS¨$ðßNk¶Í=L\Hås1Fïö{ƒŠ–ÇM±Ôu8àž6U·’Wˆ;TÐ~té¡(…9ù—½Mi趺Œ0%ì0'Ùµ ÖÅÈù•rBãëÉÿõTVšŒ|ÍhÓr‘‘`ð[[ýºG,Фún&ž&T•€RTŽO|Sb³{T˜—4ˆëŽ˜r(UÇ$œ7 ßçá¬Q2Z‘Í2dÉ3mybÇþx¬{ï!Ô‰b5bfpGʪ}GcÒ¬\ÜÃ=âî*lâ‘wƒÑÛ¦=ÀëøT«jÓÙ€Gïo¥iKzF£§è?:šžîçf*Wo¡ _µ²Ç$oqu89·ÓҬůÈêŬ®W ­S¸‘žVP G‘ǧY$ÆÁÆ;TòÛ@›»ºE›½DÞN Í¿–b‘\;²¹Ã=i&§l!U„Iå …S`zöõª4Àkö Ù¸ØF8*TäW¦ ªŒ0€Š/©p¥Ìµ˜aüë¡Ð|In-„2 wÀ€`FNW§ès\¥ú„¹´ò„Ÿh„".HbAùHõäþ•Øé÷ze•ÅÕÄköÙŠÁolã’G®XŸÂ°©êèÏ–„šåÍ£Ím2>žr^µV)#–Ö[¨¡.3°wïÇäkvo i×–V:dña!ˆ™F\Åχµ é÷w·ÏlŒs†8Î=y«–M]Tq1µ™bâðï-œMòn\Ž3ý `ëOö¸l¦ˆ|¨êÍŸ¼OÇøUËM+RMZ eM‹‘Ûœ ŒüÃÛ UCÃ3ÙëP=ÄŒtõ}æ` D#.#‘ŒôúRTek²ªb#Ëe©ÑÎÉ-¤—R?Ùe´±r )ÇCÓ×éQGª5ü­”K[Ióg$’}€úúçÚ¦¹†ÛReґĉ+,’ˆÛîFzSüê®§§GkªÙ[éÆäCG÷fÞLRÁRÝTž1ŸÎ´!·ŒÜNËdrYøüÁäUYVúÙ1$da´½°É#ÝNòȦ[¬Kp :<¥Ç$Œ~dbªTá³%Ån™e÷êÖ²ÛÛ#EfêUîd,=çVl´ë-=_ìáüÇÃK#9%Ï©¦1Ôf‘‘"Š'UÜÆVÜÛ{£¯çP_èw—6é*^Ktàå Ï–Ž=|ÓƒŠ÷be'î`xŠÿÎñšš{o¬³rí88Àê8ü3W´ûìÉf3,¿½pó<ɰô20?¦«iF9µ-FxãòÌe!nÒ¿.Y}¹5 HhÞ7`D€‚3þȪ©+JÆ~Ó[ØÝ·¸KÈŸ1”u8+qQÁVÌfÚùuu„‰í–xTäH˜Æ}Ûkd~^õ™¥\¶›¼ÁÈ*Ío2%r9=3ß­j_j¾a@‘ýžk‚C3ŒãŒpœþ“R™½6¤µ2þ(jðÛÁ¢Úï˜Ü2gï(/ç»ôÑè–öƹ$BÄü2ž¿0è=Gô¬[ èzÔ÷”·Ò£D’&'k3“Ÿº¡¬-OÄ’êž*ºÔ­f’WE呸¢çï/9É'B\±QƒØÊi¸½oi©¥¥,³þêUQÎþ¡±Ô真aYXÃ6œQVD¸AºE z™Êºg¡•ÔxsZ_³jW·ï—P äAîÚzƒŠåΘÍ}öô–h®efrÉ'žNAÏ•\¥ÌµÜ¥%Ì×At+ã>“r‘²Uœ½ó½vþqkã#Íö‹ÜEÚÜmôëúW ¥ÆËs$lU]ç% † ŒtÏ­vš{|ec1)¸C4{ã ‚jdÝÒ"¬¦ÙéF`_c`ôªβš%´7Äæ}ŒËÉL÷ǧe‰F.NFz £¨Amª^Gg:AnÌyÁùˆùkz¯–<´•ÕöÏypn$™–Ùñ²F'=:þ•§eÂ8ôlqQHÂyÚ p{ÓôðDn[©nÕæaeÍ]\R·+±xRÒ ZöÌBŠ( Š( Š( Š( Š( Š( ƒÈ¢ŠJºÔ• °ßŽø¬k|#FuüQ](…³÷ƒ½ŠGòªW‚NdnÇòõ«z€ØVRíé´ÍfÞ¾`.<à^Z‘¥®S‘•œÈùḵÀY™5ê‡`_ß*=°£8®âZæ%a‡‹$gÐŒƒ^z³ÿgx¯VElΗ@£¦~•Ý„øõ-èG‹1åsÓ€OƨjÒ5eo´XDO=êØ™Rc÷éÞ§ÜœW«g¹„es€Öükan­iwv¯,© !|çqÁý3]¬¶†;:Ԥўý_К§3ý³Äº|*™KxÞåÏû_uGþ…ùTÖzQ²Ô5 ~Õ$Ÿi“ÌÚÇåN¿ãúW‹˜T|éÔc¥Î^Ž{/ß]›'µÓ]Är9åB8oÄŠËx ÇÊú¶[lgi$vúW¤ø®Ö;2ÚÖà |۔㨠e›ôS\áËøç¼·žò>ÐꪮF<~•ÕB¥í:ûHù·'¢Æ«ˆb…zG¹°Iõ$Z÷Q}ŽêhÜ’¶V…W¹ÿåQ_ø`i·¶¥ãMoqt «›×9«:Þ“©jº¶¦¶?$H‘°‘ðrª8ÜÖµ#ûÅjO–›ó2%ÒuDÑÆ²Ð©±ûç óí'ãÒ«Ûi÷w¶òÜ[Z<¶±’E_­M{?Š-´ÅÑgŠW´\/Ê¡¾QÐgÒ?Åzަ9¬•–h¤Œð~½k)*ª7H”¡}ÆhéëÚnÂù†RÀöU5é–sÅ4FI AüëðÆ‘ý©3Ü,’Ã0ˆã“%‰ÉÆ{WIhÓiZ¸¶¸—ÍIÔ´sŒ°<Ê¢q–“:0î­=ËòÜÄ·2[´e)#ƒU® Yš[yˆ0¸Ü«ØÕëØ|ôÞ¸WÎF}k/Qyƒ%Ì3[1£ô4›êޏ¥tW:|zMÔsìŽkIœ·¨&=1ìJÔˆ}§Ä6P Bpp:“ò¯õü«mrßW6ÚT ëpÒ _r*«ÏëÅmè¤ÖõIÎ ®È”ä02ô.jVµ0šŠZŒì²ó†À#Žÿ8ýj½Æ«klg¸Œ ëƒî+XÕÔÜ-¾pI$ð°`AÈ êM?Nµ‡O³‘­ã,çæl’Ìç·Öº*â¹_*.v£Í#DjÚkܰK‹qpØÝ’2ÃПʴè0NKncè>ÿZÃÃpT"yÌÅ|§=âåUg½¸ÒWí±{4*ÜŒ²ÆTúwǵDkÈ~É=¦[{;IfUŠ .çuLôϯ^ê; s5Â^]3FH‚2p"SÔŸö±O˜‰¯cµØK!ê¥ÝéÉüªrîdÒ¼›dS5Ò´"BØÀÛÉüÕUŸ5—B{Éã›ËÆ‹I³v¶ˆíyÚ6bÇ8ãc­jK¯] GºDÒe¢²H1Õ—<8«Z-šXÛ˜#…¡·Œ*¡$&?‹¦¡Ôm_WÑníd†hX³¼ìoÈ9xµB¤¤^–±±jÑ_ǧj )@ÛP ­¸wÿ=…M¸Ûß««²O…Áà$°<­s~k¸tae{G$LXì äÄûõ­ÍWZ·Ó£š9qçùb«!*NN?ñì~U0•™É?uØÂ‹d“j3Âûbšá¤ŒçŒOÓ9ü*ËÍe2f’æIÉŠ(ÂóÆqȨ?³^8-Ú@Ä~ñ£äÄÄÁbô5ORŸÊÔlì¥Ô]þÈ¥Úe]§ÍPG§Jê<5ªÚÛ]-ä°É š!‚9¶ü¡™²ÌÞƒ…çžõGU¶þОÉZ܈D…C¸û²tLîäÖÞ›t—Víiq”ÊÅn:ès×ÿÕ[:œÉ1Ô¤¬âw¡£’áò8èjµõ„—‘G>Ÿ:Á}ز²äÈ%î8•s¾½:\¿ÙWû>qlìsƒÏîÏô5ÖÀpÛÔ ¤äVô¦¦¹dxõi¸;–º•ÌW2ézœ%gUiRr²&IÎ{b·ôÅ n@ ääèi]b-ºTF;vî#µMlª¬á@ ‘€;qP¨B£(˜ÎW‹BŠAK^ˆQEQEQEQEQEQEQE 5¿=ñRg4Æ"²¬›ŽƒFV¢vË9Ø3¸ààtª7© ÀÂ9v—a}kZæÒÚèª]Ƴc;U‡ô¨Ï‡ô†_ùÀ>‹å\pÃÊN÷6§Íaç<“ïóت¿(<î?RNk‚°µxÏX<´¾y$žAÈÜx¢Ê 5ÖM.Iù¢)-#ïÛÅhˆËâA@o’2qŒÖ»(Ò”gvtoº°¸Zylåéè*ê6‹7'¦+5#xg±\1Á¥_Y•ƒcn1]×lÁFÌÅ{ßìÓ­êæ).%ŽÝcŒs€2ô,Ö̶é©iRÀKÄ."Á~ëšÍY—GñE8Ûe¨ídsÑd>™ãŸj¹ªjWz~§§Am§5̱Ye_ùgoóÚ¼0&“_aXÓw§qËI\‡Tñv:wÚ%B&ók^®ªÝø{×¾!¿š{ÈÒ-.[{£Ž@=F}+ÓæÑ¬f–[†·C$ ‡ld‘ÐÓ&±lq¦ÌcnÐ8§ZÜÍä-ÀPŒ¯œa€àäñ¸zt­Û’ 88¯&¥9S—+•äsººHtéÚ7"h€–2!îʺ=oEk‹}ZØm˜*4è£;×ÔUúXš˜Æp å—bý[üëÑ!am 0“À@ z èÂGšéœøúŽ‹‰ÈÉc ð"nYÀ µ€#ÑïØþžÆ,èÖ÷l†â7)È‘{?Ô÷÷ªZŒúeÒ5ª¯Øåo”<¶'îýç„ÖeȹqÞDʓŻi~™'ãÓN§u+,DoÔí^U“xhÈÚØõn!‡zÆÒõ(5;Rñm;Xª}ùô­˜ŽdŠM®g©çÔ‹‹³&´‚–½# ¢Š(¢Š(¢Š(3KQHøš5îÙ©(h¢Š(¢Š*6Œòr éÍIE¦œSª2¡‰ ⥰!ŸìùÊTòw÷Î+:çÄV–±‚ÑÏ–áÊ+¼ú Õ«Ý:Öxöµ¼gw€üëŸWþͽMÿ¿·f*’»|ðžË~€Ñ$þÉqÙÏx„Ég£ùLÿ9{—ÏoåŠó›¹ç±ñÝûK Ã$Ò+àŽT?*õyn@¶WgÝÝEy¯Ž7A­ÙjË÷dC‚ÞS‘úùVÉØëäÐè¾Ô›@q’y™«jâUç®5ÍÇz%„6Tq€MmZº´{|ϺpÇ­k} Z³-Ý[[jMoxªñÈ»YOð¬7Q¾Òî.ín¼Ë>Ü —E#ŒúŽ:Ö†ð‚3Žý«>ßNmjÞù¢¾’Ñ–ø2¼gï*(]§Û$×&2ÊúšÒV‘6¥«›J=*ÚÜËí»båN@$øöÏ#­T·O³ë¼;N#¸Üp}UO–’¶—-Íå¾e³ûL‹,XÉ@ ¯â9áLÒ š oY2\¤ë3¤±Ê~F\øW&~ù½t’E}e‰ñ&‹µXæ’1Œ|¢Ÿ¡+±¿ÈÜ Ü‡ëóU‹…ó¼KaÀA3Ü Ÿz«áŸù,„€ZI3Ÿ÷ÍvÊî¨)~êÆÔ&NÐ?ÈñRý¯Ã×x$•Œ2 ú¥j;0$®×Ö«ÜFg‚Hd£>†¶k£2†éœ^ž]®®4ß4Ç îÙU‡9‡ãÅwvðǺGFƒ ©\.•i7Ø­H?½~FÿiOB}ë®Òõo­‘”íu4m÷“ž„}s\”¤•ât׆ºåË+|¸Àªò•t?0 Ž3SpkùÏ .r¹Èä ×RZ\Æ;”B˜ÈáH?/A.ŸÅW æ¬\Kù— ª£’OIu[ªMÄC# îíKÌÚQV(ê:4’ÀѪ9ÏEQµÕ®4YZÞñ¦š&9IG%zúWVX±c>ïÓkš½ÒŸÄwÏoc¹D'ló¸Â'¨§Š%Ë%y"¨¹SvQ4fÒæ¾ŸìV› ”c¹:ú?:ëZšØÆÑn‰“nÌ1ϧOþµaA¢A¤Ìe*‘“FÅ€ô §§à{Ö¡Ž%Œ>¡xHGʃžƒ¹®xSQ“lí”›HÇ½ÒØÞÆ¶·—’ ¤±¹J~Ø«³ZÇm©˜¯$ §¸$Í´»)Îpp>@ry­ u{}RHþêdÞˆªB ú÷ªþmÑEšá‘7”6ܲŒnèmj·Øèâš9ãk((Tä©Iw·ÛÇŸÔW-¡^}šúú)Büyýؘç }@Ÿ?‰/ÑZ{M.6¶UÞÌòáØÖ‘âÒ9jR•Ëš´ÛÛMq köÙÑVQÁÃó&¨kW‰ai—émæ.Örq±§¹éTíï®u}oN»º!":G?*•`ú±ÏéZ§’u{i.6Ì üc9^çèqXN£i.X;Û-¸‰ÕãeQÒ7ôªïi:óîzÕ«ý:ÖëIˆTJpѼGk{ê8üEC¼¶÷ ÖùÊ’‘÷“üW{×2ÕÏÌæ|A ¹½¾ »öG¸8÷ËÈâ6%{RŽßÞ){)-®¡Û,ìÉ5Öd ôÉ$óïÍXÓ#e²š@RW<Æ^W?¨¥'Ô¦ÒÍ]KŠh£Ôî&{‚ͼ}!¸òsÔçÞ·ä“åÜPž0eèþdVcœ’ÙŒ,A´ãõ?^wÚߘûW‰VNsÔÒV¹™ª8g±ˆ6Ù^ê&_l0É#ÓükÑå˜G"ü¿0{ óÝP!Óg•cùãRêGÞÈçúWsâæÖÞ`r²¨`{c®Ì’Ñœ8è·(¶ZYRî&†eRŒ¸ÃµËÝÅ´ÂÂìI.A1JÿÆ™î{‘ßë[äŒʓܞE–Qj–†)Ç îת7b=벤N:rörº9i ŸK¹–ªYdÂMn%Sëî=}+¶Ó˜<×[`ä+˜‹DÔ..”\²C ðYdÜ_è1ÇëÖºËhRü¸Ô*€rR¦ÕK±âªFKMË"Š(®óˆ(¢Š(¢Š(¢ŠÏ¹“½”yë§òÛþ5~²nØ鋨ÁpXëZ¤bÑE!8=*„-€ç‘Ò–€ (¢€ LPj9%Hc2Hê¨:³Kp*j„žsÇ5Ëjv‹x&óf“s F… {ïáZ×Úœ×ùOÓZéTçÍs±?Þ².­5‘ Ïqwej±©vÚ¥Àÿ€5qΊ\¶ÔÉžââÃO/}v²L €àS\7‹uù5«X,ÖEüÕ•‡'?Η\ÕåÕ¤šòy™Å¼ @p Þß±fº“ì²,ˆŒò0]Äpª?©É¬§RÚ#Ч ÅÜÙÒ/R{4à,¨ØuéÈ­»¶´œÈýbŽr=kÎâK»V3C–ÎK/9"º]RŠâ5ŽFÊ s†Á­©Í= *S¾ÇKy«ÜyJ!Œ*Œå»ð©<¯[ !¬Š?Ú"Š[¦¯ÊÙ$õüEfjËöY&UÞê£#pÝŒwü«wm­¿ƒÊX’g²‰ R7á‚×8¬1ïÜH(Óqo¨hÖͤèÃ%®®\ùïz—n˜ì9þuá–wšǫ̃ãp…qЄà‘ëÉÇáMñ5Ôvº‰K)Ýu ¸‚Lå¾X£ÿŽ+ÓQ¸ÒáXíÕV"'Ü}k< ÞCÅI+$u±Æ¯âØki’3‘óßþTôߣZ€ûF7QšÎÐîÄ&±}(cæ9Œ‘×1üÉ­=!|»;x•ÃD#P8çó­ïzÅò#D3¤ÏÂÀïM˧h*Ÿ¥6úòÖÂÙînfB™f=¾Ÿ‰Åy†½ãY5«xâI­a‡2eN „ƒþ}kvÒw3JÛ~Ÿ¶ËQ¼±T*I¹¶ÖÉÏëúSoôI~Ú5>g‚ìÞ`ðÿZ­ms/‹t˜µKUU¿¶\ðôO¯\V–¨´ÊЫ/˜ƒ&78aìEp¿v\ÖÐô)Úp·R…·Šu ižÚúÃç^wDx+ëƒK?•Š¥•”ŽÁ¾v“Œ§jнŽi_ËšÎØ‚³y¸?†+Z:U¥£ÛÄåîäÀP™lפ<…ìâµ3 çP»io§t‘Ï"0YŠöz×G£x{N"¤½’î܈Š8ƒÇ¿"£ðƇ5«®£ù¸ýÚg”§ß§ëW5c&ˆ’jI–òÈ<Èœ‘±ÎFW¼d~5\’Üi£µ–¥>œÎ%_2“¸!φ?•R±¾‚×L¾·ŠáMÃ\Iòžä’AéŠÐ”®§a ôÑN¨J8çø‘‡qëXÖZ]æ“¥Lí½Ç™nZD“¢`“ÇáùqQ&ìtÒ‰¿«:Mê Ui峆-‘ÏÿZ©ÞÜ­Ó,jH@T‘ fAžøªZZÞ]Á ¥Ä£Î€€;¶¶AÉ'®séü"·ôØ£‚æEâV_8òíƒÿë¢:šÉ(« [‘ªylËö†tÄÀõÚ ãðôúSWJÄþDw Ê xäHT+zãÔŒãñ­ ÄMs€à±òÙ‡#,·B?wÙ&¸šq%Ò• Û#ƒù犩+¹³>ÚÚ;¥Õ-¤_³j“[…hWdêqÈõî+™›ÄâÚG·µ°ÄŒJɪwué×½u2[]j7^jΰ¬)û²£˜fæý“ßÔf¶t«‹kÉwÍißDÛ&,ƒr¶;B:RŠww"S”=å­ÎNî`·F¿·hü¸áò6ì,NÒ¾ÿZ†Í¯µ(e•  ,~s ,8šÕÖnç»Ôµ¸Êâª2y<£ÿ&±¾Ò--ï-bF?g·h¼Ïî’ä(ÿÇDãgd`êÊ*Ï©¥l?â’±`Nä’s‚A8ÀãÐŒ{ÖœI-üoŽb¿³—å‘GFÇà dUKIm´Ø,w‡È#Ÿ”8þŸÊ·\Í(ˆ«6ÿïñüúŠ)Â(å’r9ÐôÛ©‰š)#1¹Z+‰ ë·¾A÷¬–KÔ/tåÞÐy…ÓqÉÁ¯zì5TŠ=dJ…·O× ê;p *¾ËYÙ~ÑRŸº<Åþu.|“¿B©ÉÄã2`šþXÐf9#š2F9ãü tÚSKªx†Þ(ö˜í¤É'eÀÀüɨu}Áté/-#µ³£¯ò²†¿×ð¬>F§UâŽCŽ„’ßýj*V¼G_?4rѼÝWXÏk²Ï8Úµuà‘Ƕ*”Ñ;_y›Eò‚þšªà¯Ô€úÑLž@Æ:óÅyU~-ŠRN ‘4k‚’.å9ëÓÒ«xZ¿µÓ¢†ë÷‘Ê®–Ó(ÉBƒ#ð«7 ‰>ö=õ©<,ê_[–YVÎÎ9PÀüÍ]+'b11½>cO¿ŽëO³ž`"¸¸EýÛq†ÇOÐÖ´p²ƒÈéÅsZ­œúˆµžÜ[N’+žüÃN*ö‡©_^ÜI%Ô) ³ {œ1aüYô®øÕiEHésa·f=ÇpÏ­Z…‹)$c$Õ/´%Ì¡cpB>QÎ?—çW£?/LQNJSÐçž‹RZ(Wa˜QEQEQE“vŸñQižÎ?ô_øV¨éYWn‰4Äîaœþ^_øÖ®*^à-5€a‚2Zu@5T( ÐS¨¢€ (¢€ÕymyÍùÑyGõ«4”€Ša„À¯:ñֲш4[y$»RÒ2Bdtúס\± ÅyŒJ7Š^nCÅEÇBrÃóªm¨6޼,SzœòØÅkkpÒ(gPˆú›ŸŽ4ûíGU[]=V|äc…ô'Ó®*þ­w5¼wv+¿ÏfR¼óÜsÇ'$W¦øCöú-’ Ó ÏÜž¿Ö¸ãynwÖ¨¡#;Eøs§ÙÙFÚ›µõÆrÙ8Aì^×<¤ë‘(x¼±€{qµ€ì­tÒ„P[~G =*"ñócšì¥|Òzžnÿ ¯­e&ßÄ TðCÞ?:·k¢BÖ/3HÍ}öslüð®˜ãê ¨®àÎÄŸ›£u®/ĉ-†¿e{d¬íuº)¡‚0ïüv£(7ØéÃÊNIz,õ›ýJûQ¶¶yþ|I½°á°2µ1ΠŒ$—O¸‰Q°X¯ Òºë)5]UAÝÐd¢ñI|ÓÜÏŸ¼Ÿ9÷·¨Aý3ŠªUyi* sÔv§gý™à—·Áb –_ãfaœsÏzÍÓ¼Uh!•0:6ÓŒ~#­iÜ4²ë6V æ;tóc#$ð?JÕße|Øá;qfP÷5ž—{•YZJ(óÏxÒÏU°¹Ò¡‚V,@ó æ¸kÉç›h·Pö¿•uZ厙âÊt„‘óH~énäJ’ûáÍôv¦k+´ºeÅ‚ÐzÕó.c–­)ö5>\´S_}ªBàÔó]Þ«¢ézÄâb|» qç@Ø=8ú÷¯%ÐìU.Nª#iòÌÌÀ‡ü:ÕÝ^×þÉ! w<—fO:7Û´tÆ9«í&‘¬)óC™t;é¼5)´H†­pÊ?é˜Î~´Xè–s i®å§rÕÆXxÛR†Ô#Æ—%:ÌGÌGn2:WKe&­¨X Ø/mUY ¯—f>ÜšÑVŒwV 2ÌÏrÞã5“¨¢ÞÛ´w(‘AÁàÚɲÔ..¬c{f(ã`@Øóî=…_³Õt{TK;[…‘±¹T±bOsÚ·Rº¹B{µþËžKŽö“s(A“waޠ޵Vk¨µgŽÊÎPêüÍ"ö_îþ=? ’ÿQkhîHo)I^àãýΓN³¸Òâˆù˜Þ'¹¹”œø'aU$íÔîÂIرegr² ìÙ%œFÀÿ/õÍZûo²‘&dXóôbúæ¬XC$6ÄÜå76?¼FOêM>`ï´ä±8ÔšPI«›¹¹2;™­ °šYw¢*ìTdðA¨«q0™#‘Xíu 8ç¥S·–9beÊI(9ê¬*ÜNv•àÒ´ÐÆwz2·ÚáþÝ–߹ȎUaÆüeú€A÷ÅD—RÁs¯,ŽaºV9݇šÅ¹X® Ä,J»2HƒæÏU?×ñ«"öâ]ÊÎý.`¼8<’1SøŒ~9¨-ãÝy¨È?¿ ¼ôŠͶìqN<®ÄÞ_èñ—¹·’ó˼è±Ê’Hvì;Òÿhj·†úêX¬ Y„b$MÌà¸^Oâ:¯©ÛÝÜi“Vuê·’¿ˆûMNËÄPÝXõr(ÎG–Ì?£k7+nGBÆŸikk§…†0.c™²woSŽsíƒøÒ’ßj\¨ÛœíÅdé ¬[j7K¨e‘ãÍ$åxñü…k¹2Æ1YÉëa5}ˆ,Õ®4;ÛyÊVx²G`HÒ¬øH‹™onՀ¤zàn'õ•VÓ<Ź»‰‚°ûCü¾»°­]ð¤vúHŒÄÌw6O9J†ýÖi·Ëbÿ‰á[ Àùn¢m¤°K¦Ù¥»4æYYq cÃú=}ûÓõh^mñqÌiæÜí!¿¥Co.Ø”†Ü¸ëž?Ï5…U³:èEJ-"ÝÊÆHãŒRøzQ-ö¬ª *@ëò ¥5À–QÁ äUÏ ©}åØPEÅÓHì0¿ÐÔÓwñ)ÆšGB’`}æSÓƒýjÔr ®€Œ÷z ¦Kì 9ÍZ†(Ÿ/ÃëZTº<¹ÚŲ[m]%³Åîä é`mÑ=ë¤-B#¸­kQˆWŒuþu¦MÔùõÒ,QEêáEPEPE½ܟ^:¹¥êC·JÔr¶­þ¢àœ…þ5ÉIÚZž–"•Ò±Û9”¥B1ó(;Ó’E)º6FR8lõ¨$‘W¨ÏrEv)u9¢ºX¹¼8PW©#­r¾--o µôq4Ïm8sŒå •#ÿ­é®0ža ^zW9¬jÐAÝ.NN9cÔqJRMY›Q¤ïsŸÓ –ÞÂk»µl®ÒÈsÈ'¢ÿŸJ~˜DqÜëD§ÈQF8UçúÔvv7Ò ï”ÃlNR"~bsœµKrWX¸K8%”OûÖ‡>•Ìýïulvrª~ðý%%–Iu ‰SrÀŒñ… ++ƺÙ-"±‰Û͹Ë;pƒ·ãÏå]‚ê&Á¹vúךxÝžO,dab0lœ×M­KW"ç†l°Ÿkœ.}?É®ÞÅY7LIàrqìk I™VeWRÄ}kfúAºÆ¬rqžµÊµw;y]’1üU¥ {Hb£þ&ÿ4N:9#?‡—kykqák[Z0Ì70þ Ø?ʯkó\G§HöîÉ,l¯¹x=kŠÕ/d¹sg"$•'BÄ“ŸÏ5|·×±œš§;ÞK%™ì¢TÛ+#GÉä;µÕxp]ß1wFe‘£9#?]‡JþÁðÔ×2¤ò®ë‚ë’ÙRC“Ö´ÖwðóÚD¸v·ØŠŠ¶i_¸Ô%w)>†5–‘©lššÄ%áe‚áIR@ëíÒµîîÞÕ’%ÇlÊÀœÕ}îÙ´ÿ±J|›  2¸Ã*×]°ÃQ”`«”ƒžkªŸ-¬r¸>†ÚêúÚÚáJn ’+pB Ï?Ž+ªÔn#ŸI"'ÊNñÆ¥O ¹€?¦kM¶Žç\˜\!uŽÜ.Öõc“ü«Vúxm$ÓìÄc` "»Ãcò#õ¬ª;;ÇmòÀÕŽ×ì÷·^{2JÏEÆzS'X¥†H¥¢‘J¸=ò0j{€cPÈȤ…Ïj§ ¯uaï’î¹(yÛW(èVÚ‚­aHaŒ$kÑqÓ'4û”»xâ[9H 猭V¾º[+#3—`¤ (ÉúÕñ«ÉäÓ[YŠO©t(ÎÂIVãó §ÙôKý9_ßpŒžÃýbäûd~UnêâæÚ{K8— ÊOEîjAoº…弪 Ï㎌? ¥'¡ ûœö¯Í­i7±±\+QÝ‚_Ñš›§‰ß$‡¸œžáˆ£Uqe¦è‰å¶"¼òÃçî¨,ƒ?†(Ò?w¥Âî2͹óRMsÔÑܪ÷‹©òã;óš‚ìÝ"cu«$·lù(X‘ê@íS‡|žN8«^*÷Úœë(s½QA9Ú#Ç9¨‹¾ˆÊÝQQZ;¸KÛN“”å•[}ÇQP•d ªFF{×OªYi÷Ú„6…$·Ô3*^@˜ ÿïŸC\íõ­þ’â]DÃ5«ñöˆWiF=7OzU)(ü,”õµˆ¬€7÷ѳ€ÞrÃ·È ^ð²ÐR>¦9d\ý«™–öîMÝfC‘Ð,VÏ…P‹;…·R Û9®y—Mô:0a޽3Ç>ÕÊYÜ­”ke{û™âÌ{_#pz×Dš«N"óâ.I\nAä{týhk MoÄöÖ×*³}’ÝÝÕÍ—#úcõªŒOu›Æ¯±w{}¿¸´ešáŽ#9üëªÒlΙ¦ÛØ–¢Q¿ÓqÉ?­6MÇ@׭糈Gìo(èFå#ð Z—G5FÉh¢ŠõL‚Š( Š( Š( “šÏ’톹od>ì–ÒÊ@?ô#Z€Š( Š( Š( £`¸½jJLq@Ì +ú5‘eXWGzÙ˜¾µVhÆBŽGz¨½M)ÊÌòo$xjòHæÜ– ùŠP¿wÙ¿>+båtýZ2Å!# Ä|§Ú¶ïíã8’0Ñãzåkœ“Âʉ+i3ÉlÇæÇtyúvüëšt•Ü‘ìQ­xûÆ{iZŽ—1›J¼¸‰óüè1íØRG«x„~ê[KGv?$qô©å—^!µINxÙ!éìÿ9§K©j!2út»¶åH?CÍCŒÒ:’†ä÷6×7‘DéàÏ2ykœûsÒªM¦iÖ1K9ù¥P ;¶qΫËw®Ê›~Å[>kçôbÍk%ÅäVúÓÊ$s²þTã®{ôª„%Ô«ÆúÓR¾ÖfhmRÖ>·~÷²Ö’ \¨Ï^ã5Q À±@ Æ˜8U@ÿ"­o³çøEh’‰”Ô¤÷4^BYJ…Îpxý+Ë|U2]øªþEȬkŽø<×O¯x•4Ëg·€î¿a…ä'¹®Î&žå™÷‚Y¹ÉÍ\ž†…šHícŽâ8f ÛÆãÇQŠ¥ëËr‹¼î.Iv<ì)÷úÁ”5ªaX.Ù]¤cÖ¨LŒª“’<F+­»ö6%Ô¢‡YŠÒñ¶‰~VÜ2:V‡¬RóÇS†ù–$”¨ïƒTüQ|—vrÆÀÈ޹ÿ9«š~–ךÚI¤,¦¹ˆ:¶~ø' ¿Ç¿µ)+#šræ—¡èz­”±¢MóF9Qß¡ö¬­¹71Æ]­£”¥¹s–pGÐâ¶®£Ž×MmÌY"%ÏReéq›[÷ #yd.çбéùš‰;CÔÚ£²LÍñj[¾›IûCÜ*,~lwæ°âŠ4UXïnãSœm•v¥jks#ÜÚÁyp»£cå¶~YSõ"«ØÝÙZ¹Žâ@¸l‚®…zýAô¡6’±tÔwf†å¸[ɶB÷E§XÙ˜ò£hæ·nwŠ ¤q“ÓÛÿ¯Px^E’ÿS*WÏÈ Ô‚ªE_³W¸ÕµåEI#aYT/ñÈ­ Ó»Cœ¶±eË3\)?Σn“nÓåŒq×Ú›d·kj‚íƒ\ŒîÛÓ¯,j“œŒóÆ3Z§ÐLx@ᲪTðxÏÛ»È,¢IgfØòR«È&¢²Žô$æñQ„)Ý{U˜ñ*8eëúÑv+®ãޤuªnÓÿÂIDCÛ|ì{Ü3SÉ"$~dÎucùSàP×k&ð @CÎsDŒí}L=YU|;©à ÑÎÒ ÝˆpÜ~Ϊi®¯¥Z2“÷q3QÞ]\Åá=V[„iåu ã'h?Ê™¨Cga¶oí1§3 8*ÄwÚ£H]Ýv-HÏæí ÇV$S4ãq¦jÿ#‚³†Ø®ÝБߜÄW)¨x†ñ[Á®I)g¥XB"{œOzÛ–[E6ºý¬ÞV&ŒÌä`ƒê=;ÖOF`¢ÏF’dL²²ƒ€“úW®_ «™SÍ2C *Q¹_¦=8¬Ïø’ò=#JÔm¢Y4éâ!ÐsåH;\ö—w}«El'‘c’[€ªOÇõ¨Ÿ;\ËcÐÀª\Þöÿ¡«§Ê–’ÞX™‡–¬²£9ìF1úWSáK¸¹l$2\ÈêäãåÎ3X‘h¾1Õ4ÝNÙ.%Uã$ä;~¢¤ñuôšäµ´ï£ÇÇmÀRp(QOÝl䨣í[Ö
¢m–5HÜŒ óŠ·ú¥úUIyDõ«ÿª_¥u`¾6c1â–Š+Ó3 (¢€ (¢€ (¤4…!ÏŽ­Ç÷tÙOç$á[¸ö®}Ïü\¹ÿ˜[ñÿmVºR†Å¢Š*„QEQEÖéœÓ©ŽØüi7`"Õ4‡¢ ˜÷ƒœŒæ³µ¹íÚÙdÞ³íõ—‚Ók§1žFzŠÍÕ³ò5;—î"ówoPËØv5Ìë:ÊéϽ³r»dtaPäÓqü*;ßÝJ$1°@N#úW7¨NÒݤ­“9Œ!>¸éS,DmdwѦïfZµñe¾¤²Ä‚ô [¤ ?γ´mrò9ÒÆóq•ÀsÐíœý0*­!‡S’ûj‰š5@{ŒgüGåJ¶Ëý©öæÀýÞÀ šËëw:ù™o⛉/ã†v+¿ûX;Ž?«~'5©†ÞWŽö3©Ï< óùTÖƒm}rn?ÕN\Tð•-cŠþâîLÈÓF#;Žzµ¢Ä[PI½ 7Ö¯çÓÒdR¼HV@?Ù*ßÏ5µ¨kL¶Ésh…H—ÊßÎâÃ'cüêå­­¿öH²PaJ¶Q“ÿÖ¬~S ä(¸H­íò™ ·?B«ÌôóCv`4r7ÌK;Ɇ=É5¯`©a¦\Ü4LÏåƒëž´ëÍ-l4Ý*ð«ï»ó ï꼌~4j,dŠyjü~güýkI>kX)EjØ–QÂexÝšIß.çÕ½M Úì³gh{{RiPÔ¯HÊíUPqìH?­Z–Ù¾Ñ ý%fœŽŸB’M kœuþf¾Ž#µB‘‡¸;úŠ©Ê\C ðÈL.»”ž?î9W[Ëçø žÃz}+“žÒm;í—7“b/$ÜêœÇ–$>U9çþ«¯AJŽèÊWË-‹[¼Ä‘Xt*Ài,­¡±€El@ÄðzŸzt~T©º'V 7S•?CV! ŒÄzb¼å.ŒÞ\¶®ÈÀ‚pùõ©`'¨nœ†ï×?2<³¥JªPÞ†Ìݶ4#•äP”Ï֮Ǵ.å v~•‘ï`žÕpn@çƒÀ¬ÙË8$É›rÙ‘¸téøÖ”_ê×è+(8kG9cŒ‚qèkV˜—é]x{íÓ$¢Š+Ô3 (¢€ (¢€ CKHh›cÿ"1Ûû%ÿôj×H+œuÿ‹‹zéOÿ£Vºç´m4«ØÁ«K"À—$ bÑ&y”ç''ÓÚ±¯ô»ø®Ú+}(Cf8FµU.Ãýâx§ ÕQ4»Åµµ¼†vQ†=ŒñÆ1ùÚÓV7RIØu½ÏŠ#y#M5äX—q[‚7{×­CqâMz ë{{»q¦Å+mó¶g¯Lg޵Ðh·SéVҥܭpK™B{a¥fkZíÎ¥fö§Þ8 Á°sÛ¥k{Ø©T•´v,ǧÛÃ,®î×7|’\3Ó‡z{eFJ†$ ñÒ¨xxÞMì—ñ²KæÓ€«3%RÓ"œ`©ln+¹7f%mÑæX™ˆ#9ç’jå£6æ?#¯Ý¥P¹xæt;Ï+rjÍ›–Ÿ:=ªf;²ûäÈ djšûÉlã%G çúT1Òzúž˜¤º˜ZÚÏ8Ú‡èx¬7b•’:¿ ˆáð¼-²1!óÝ¿‡æ9þµ¼­—ß· kÓL’ßÀÑiÊ — nwtßÔéÈ­8n{h&xÚ#"‚c=Pžª}ÁÍz¸{¨$yÏVÍÀÏ|Ö¥'r7äcgÛ•E›—n8*•û»Hm¤ñøulc%®§¨Á†oL°á4yß÷±ųžŒ=zŠÜB<ªnËrAã½pÿ¼aýŸ¬ÿcÇo±ˆÃ\yƒ;²8δ¼ ®AªhF­þ‘n»Iù¶Ž‡Þ¼œ]7 )ÛCª6åÐ꣌!ùA7_ZœÅž™É= œü£9ê?­HWø³×Í{jCm m5‘†Glv«Â0`ÿªª"¸l¨ê*ê@^=ñQ&ïs ·r¬eÌŒ-œÖÔ_q~•–ªŠ²1Éçªô­H‡î×é]xûËùÕ$¢Š+Ö1 (¢€ (¢€ CKHhŸcâ¹õÒäÿÑ©þ5Ð Êh¼Mä|ëfʱu'ù ÔüJ” uQTEPEPT2ˆëŠš¡—•l šÂ»²N;R‘Öì’§s`àŠÈ¼´Î½òzw®’ê&yÃ<,BŒ“ž¾Õ€É+¹¡8ן9_SÓ¤ŽkV…¤òÛ$”9*zb’Úån"hðÛœcŠÓÔÓ.B°çŽ{ÖmçÙ¡Ûn2²ósUl™Öž…XcI#Õ€È<Ô–¨¡|©Ë–$*z`äUX#hdhb’sRÊïê;¸…¢+ìqåEµ4vµÌF´’ÆÛû66ùå:ÉÝpF~†µJO1·f'E${“Q›+Bæsæ\H¬§wׯÄrÄà*vƒÄ$½ÓDìˆ,,Ź–Fmìççf9$ÿ…C+y.X3>O#=*Ôî-íÉÀù«LLÍ*.á†3øÖ*ò÷¤T#¥ËÒ\, AmÙ?¥=%T°9<ƒŽ•™¹§N@`9àÕËw ÁO½L­k(ܺ²E dã÷§0TŒç`cŽUx8ç5H‡SçîóïW7b1I6¤’B=Ô~[Ì[lkË1õ¬k›´½$ÃhÒ‘dd ¿‰5¡sf—–’C!Â>Hä¢éwg¨Ä¬÷7m?(}ÍíéZSkæc6ÊòYÜ]Zñgh¤t`NG½jY,‰nˆà¼˜å‡qMŽþÒÇ:‡tDñW`6ó•–ÞLÄܦВvÔ˜»lJIˆ¶Ò: ­¨¡DÀI* ÉËаT™@äu$÷§A»ÕìlãmÒ%ÂJë×h<þ•”UÝ‘Rz]šÞ(Ö.m­m,tù€¼r]€ùI9ö$[zmÒÝÚC2ãË‘VM¹è¹‰®¢>)»h£Êè¶ñ 8b%ºûµTÒu©´K„Òõ„ Û¾Ë&ìŒg„oOJ锜d¹VÆ^ÏC»…²ß‹ž~¥IêG®X]ý§'Éž0vÌ›IëýGòªÚºÚé0©@&uß/|¿Ö´nìF=zWm'Ì®pÊíØñ_Š>Ô­5ëÏ­°¸‘FTòŸ/qéÇëLð¼ñxvûQR«öyƒÚƒÆHÆõúqõúWu­xžÚKÇÒf€Mk Ù!'!‡ô¬OÅg¤iPf…¶IÙ”däà õúV5ªB§¹mNª8YÁ§=™ÛÙ\EsRà 18ÜzŠºàçð®oÁÀ·…´âÃ,b}+£_—9ö¯&ÞæU£÷nAƒõ©¡&XùáŽF}*¡"ß1w©í.â¼²[‹pv7BW=éÉje=„ðBðZ¸êsùÖª}+=‹ùAJ‘Ç$V‚}Ñ]¸/‰œµÇ Zé£0¢Š(¢Š( ÑEShÈÕ#“þ˜ºÿãÊjبÙ|­èüñþ'4€Z(¢˜Q@Q@FËÔûT”Öèj'%¨Ñ¨º­³‚ppyÅrFeû,™À==}k¬Õ4$³•=+‘¹XæF¹`8¯!¿zÌô¨lfÈKD$fËsžâ°fgûfçþ!…ô­ôFEÝG<Ž•—|Š“©aŒóZÁi”Q M–'v~\SßÌ™B°$+g'¨¦VttÝæcv éW`€Ï>ÀØÝ‚IèiIÛRõاfcÏÝàç ©5(Üxfð,«›UÉ”€)Î?ÀÔüb–Ò5¾lVub+®psƒÇá\çÛn5gy.îÞbÚ 8Éìc[Ò¡)5&g:ÑJÈM¯›WµN2y"ïHó÷rgð¯`ðµÅ”W:‚L °Ü‚Üž1øô¯)²Ô.¬îR ~ÎUÎdk¶GBkÐ|'¡ÚÁe&¸Ë#ܱqÝÀ__ƺêSŠw[œq»:BÍ…¬Ý)å“ÊÛ„þdÖÖ•AdHù²Oòþ•‹:,~³ŽU9¸š6|z–Þk¨±@-¢Ú£ëT¯ÔMØÃ²p|Sª™åÁ³ÓoÌ üÿ˜¤ñÓXÏ Ù»=ô¬±­¹?+gw$vÆ jêúd²Ü[ßéêŸmƒ*¾ì¨pJË úÖ}ÜÆüÚê¶6†êXÔÃ=«°G Ïq“õÍ'tÛîDe­˜O)Ì7m䎙ÇùüëÞ?1¥’i.,¥’ÝíñÎÂÛ”çÓ­jex£y£òå#>Y9ÁÍsÚ·ˆ4‹ zhŽúßÌŸg2ÅØÇ¨ú‘Šù7)ÞúÕÌ·7Q&-­î$dvoõª?ÃÛëï\”öÐé·š†— $pÌ$ßyÕÔ6 õ5ÓxsK’¼ÔîžIäI÷Ÿ×ô®ÄVO§ë'R$Ë£ WSÿ,œ(ßò¨©84o ûë±XNŠH#ha÷‡\Õ¨˜nÆýØÀšË#Êp1€ƒš´«òï,APÇ­y~§kµÆÜ\y‘œã'å8ªbBZ6,MOK$„íAö^ø¨£!ò¡¸Ÿ Ù1TÊÏý¡ö¸R)€?yÕ1éWm>Ö£¹‡-ÀõJ— jÄå} ·×¡Â-‘@OGÈRÁý£*f‚5^…$³2+ȃrù‡œÖšPIÁ‘“Û­élC± ºt²D­5üí¸òåz+FÊÞHªœà{÷¦Cvoǵbóci ŒëJSmÛ¸® &k@¦e;¶ŸâÅ]Òâ‘4ë·Øm¯/#ÚÒ¯PqÁã4øŽÈÁc‘ƒÓ®qÅYV&0Â<6Cc¸¨æaË}®•k§Â³ê.“IÛá•3¼±çÔ’*}bÓOÖì¼OMº€¸ù.2Pö9#éŠÍ]ê{¿´Ýj2àQc8 È#úþu¦ñê-#…½‡oÉó{“ùWE«êÌä ;V6Ö­ ç˜Í ØgX˜,ž‡ÎzçéNÕ5ËtÒZæ'WWÊpIüy¬]u„gþЙð ¡ÚßyƒdÄV^¡¢jzŲMu/–611ÄÇèkeVÎË`…8&™‡j{ºPÊ®wzûf“Ä2> #µG¡YO|Ž£ÚºÂÚUõœN“•PTþð€pOjÖÖ<-c-„2ÁF¶@¼YC9ü b¥{¶wWÆ)$­±ƒâ­.-.ÞÖW{W‰IêlVêx’ÙˆD¶¼sÛÌ7~8ÅrvÕnŠ\FPF(Î2XqÍv¶Zµ½„fÆî ñ²:pëŽ@çƒXºJ2Ñîy•>„wsyhÎñ42J» ¶'žO,qí] `Ž`Lk·$VE«\[Å#-¬’-–vù†1ЀóZqHÛ‰$6ß~Ô§w¡Í-Qdî0` ã­h ÂŠÌv¨pÍiÆr€ûW^ {Ìå˜ú(¢½0¢Š(¢Š(¢Š(¢“v(Íh¢Š(¢Š(¢Š)’}Ú}G!dÔOáÜÈÕ¡CŒÿ{¥sˆ·,E£,¸Éþ^•ÔjÞx?.é\ÝÌòeÄ‘ 9?sž;s^[†®Ìôh=€Âq3Fì3Ž£¥T¼‰¤uLpÉ=«JhJg'ªÄÁ— ’}MBцQ¶’ICFç Ã?çó«[å·¹M>Æ?:þã‘h×ûÌ{Sîì &8ËM+lŠ02]»¥vþð§ö=³]^6£rwM)ê ö¤bç¡5k¨FýO1ñ~“¤øzušêé%Õî"v•ÀF `…ôÁë\6”e‰MÒQ9<‡>µÕ|MÖgÕ•‘omk€å´Û‚•Žk׊QJ'*»µŠÚM¤šžºlÉ$»Œ™íÕå^× °ð´vÛp#·Éw#?Ö¼ÓÀÖ‘EªÎÛ€Ùi.K‘Á8éÔשêŒR?Øá·šXä•`F>E$ò?!PÝê>È•±´ÑI§é–ð³ôŸ,䂨Etö±˜’$Æp sô‘®'ŸªhШþ)&qøþ*·­×qP8ëVº37- T”_zſіâôêwoev~ù“Ór÷­¹Fîý*œ™BxÎ{ÕY34Ìiî¼AieƒM+•A&æÃp2; ç¦{ÆÖmuéEÄêáTˆ7 üG5ÛÝgû9ݺ##Žÿuþ•“âûAäI$k‡ ½qþÏ=? VÖÃç-S%³‘Æ:VN³¦.±£\XîÙ+ŒÆßÝqÊšÖ‚Aqf…1†³ìy¨ü°[*¹üzÔ/†å)4Ï3Ó¤{˜\—0±Žt=CøÓþÙl%û)ºE!öüç8Íkx—L’ÏYöâ%[ØÊJ\áŠ2¤údn…qöZt%Ô&ž@ñ&â˶v AôëÍyÕhÚNWÐôèÍÎ6êmÏ%µ„ˆ%¹$#p6܃Å6D‰Šnx÷Êï#±ëU¿²tÝjg·¶ó¬|¹$Ò³ÛÃÐÙ†ó"ÉŽ~ïÒ’‚¶úšòÈ»vðYFd¼“b±ÂÉ$ú ¶\ 6àyM÷¹þuÈ^@°0« 1ò†;üúé¼1yk%°·W•œ|Ì6œÿ_­*´ù#ÌLe­8 pˆqÆzÒ¦’2@ùwŒ÷éZ¡Æ:`ô4<0Uã¯zæNão¡Ïjv/u ɸ „ qžϵ6Ö{í?³½Ò4 Æl)'Ú·–Ùbryç©&‰,mîy°Å Î9Õ©ifC+¤ÊÎUZ9 ã€FjÔk¶Mì>n™íU¯4 [«CK$Q‚9¤K=^;‘2Í ‹!Ã!/¸<©õbÖ©*Ãf±Ââ弨¶õ { Í&ˆ÷«ö›]JPÓÛ0Û8p¸ê}G½Cq,0êñÜ]:ªX[4®O÷›€?CL7ÚöpÞêQ¶y´½Ü}íüGcÖ®1\HRv:#†nËž0*Rv`^õË\øŽûG¸µƒWŠÅ%¸]Âb¬žäònN85õ­ÍŸ´©º?ûèd~x©öSNÍÍ]PI#9ëVc%r$ãó¨-š;”ó`–9Sy@ªwÚÝ–˜â'w•ÉË„ ŸZöBf¥¼B$¨LUÅl!#5¾Ù VÇQœt4ð tã>µš•̾ãÑŠ4Q*€qá©Ý‡fÁ¥BªAÀþu!8R@è}êÖû™4.÷8,AÔê\çœtç[vÍX€4«’[±¡»Í¢ÓsnÇÛµ^î ª` ‹ž«‘qÕׂo™œ“K@¢½30¢Š(¢Š( –Ð&•Ž®±vò ãÀUÚÇÿg—ØYnÿÇÀþ•¯Š˜ƒEUQEQE ‚àœu=C:nŒúŽGÖ“WC[˜Z€c#c%°1Ú²'¶üÈž3ZsË"ݰw]‡¯Ö¨\Â’F|¼‚Gœý+Ì©¤š;©¶Œ§„ÜÇæîGj­=¤CHǯJÕòÑ#˯$úâ³õ(ÙìZÝ%d7$"AÔ`?X­Îµ; á;ûcU“Xš#äBLV ûuÇ¥z2 F¥¤ÙA¦éÐÛ@¤hÛ{’˜ q^Ž G›¹æÖ¨ç#Æþ!xõõéµ{D°Ý²–ùöì~Ô\Þ¯áÍGA‹È¿†–dóchÉ<ö?ã^ßxPÖ ²#0Zq(ljùýOà+BêÂÓP‹eݼs¨ÈîÏJ齨é×tÏøW¤­Nöi`ͯ‘±ƒ¯ÞÜÃÒ½JêÞ8µ 2Ê‘cWyØÓ ú°­hm¡´„Co CôTPgdñ ·ðE  >ìI?ÈTòêØœÜ™˜fñ0-’bYUN~ïdVô1óŸÊ°¬£Ü=ðc¹¤œB<Ìù ÐA»fI"´¸É0oÌ­Vœ|Ø•sr—<ôĆüSˆŠ’áì.ç3ü©š˜K›{RyÝ,=ŠãŸÏõ§ÞÃ,úuÔv’•â! ìqÞ“P·hm Vl²F°îF?¨¡|BlÏÐËK Û'Ñ|·+Ü©ÅYcp­œãéTü.Ž,®`vËGs(Üî[wõ­;ˆú”Á äâ¦=bÔóߊ“Yé6º`9k×/&!·¶Iý+–ð¬{ïšÚ6&Œ«í=>•¯ñ-ž*¶†sò­’²è~cšÌÑãû¢l¶v|Û}³\x¹{–G±‚¦ä®z.Ÿ§ÛÙÚ†1=Or}k/\Ób@fgz±>•KOñ4ÎPË€Ƴui®íäð¥€Æxašç§8ÚÍjo sRºzæ±iFK•'Ȩi—Ϥê°Þo/vÙs¹;çéHÓ2ÌÌe;Y‰'¯ß…j¯†–ãDmI§hÁj'\– Ï·ZÝíË.¤Ís꺵•í®¡›e2N€ãå=>µk·#ƒPé¶PéÖk j‹Æ *ãqõ©ŽÖ#98•ç(¤ô"÷ÜG€½ =êUAå* œŒäuô©ÕYS$œc¥ ‘¨æB8Ç0#xÂðGAI#b/' «–ǧùÍQK›»ó³ˆÃ ¦ï2R>aŽ8üjy]®†¼É®4‹=IÃÝB€‚FqÐZ±¬FEŸj/ú:‰‚‘ÇÈwcôÅYµ…¢AæÊdï#ðªzìÂKh,Æ1w Wã8~g?ÇãWÞý z™7IáŸß[M~Åo Qòy›pAë[þ*Òî¿JG€õE$gž9¨$Iãó©•@öîõÁ­Ìšh’è¿wñ'¥ i‡íÚ›&%%]v·÷…9aèéŸj©,b"™ÜÍŸÀU˜ÌkÐ cÖª¢ìfãtÏJ±‰ÕrÔqTµhÊh²pÖäà` ³ÛAQ"/–P­X^˜ëaé%ª9dÇQH)k¬¢Š(¢Š(¤4´†€0LøòTþóÖø®~¼sw0ÆÄÓâC“ÎYÜýÖþi-†ÇQEÄQEQE×åO¥4Œp `^B$‚²Œs‚:Ö|ÈÂ>@bP9úV­éQ! pß•eËMª¶%<ýî¾õçV…çtvA² ’7Aƒ tuÅQÔ"dÑæO*häP¿Åµ²•M‘qʾ@äФ„¾b,dÔW3͹®né^ Óu(3 ÊÁ,Ã.=Eh¥Ô ngŽTxB–,­@®.é!ŽoµÀŠ_´˜ôÇƯ| a–Çß*Gôª™ºTe´{6ÆÓqüI'õ&¶#RôÛK4µµŽÝ2|±´²WqÍ2›!*Nr>µÙVƒ‘Ö®àã­V¸B0 çÖœX¯qÂ¥·túQ}´AØn+ÉÍKÊÀmÉ>µ,ª¦6 ;jžmI9ÏDðϨ«:ôÀz«Z²¨8+Œ“Üqþy¬Ý)±¨ éçŽo‘kYW8ã¡éM|Nãgš|KÓ¤¸º¶ŸËì¶âD}ä-‰>¸Ê¦kÏì.ä·‘‘”Ääç¶é_Aêzd:¥ªFîbš2ZW¬g?QÎï^5©x?T]ZòÞÉb”Å.ÇÇÊFå=ñÁéXÕŠq¿cÒÁ×åN7±ËÚFB±w]áˆ\núVænº®º¶¢EG:+ Ãp ;õp>QÈÁþtJÝ•½Œé®E©ÙèÓØCá}=mî#•ìŠI*çæ ß,€Ž½¿*·á$÷šk7/0v™™®IÌ—Ñ´_dŒ#œf_šAëÀçó5¡kysa~¤ŸíN¿¾iít^â8ŽõÎá'Ë©EFMųùi–v Øš¥£ÍæiVÒI fòþv=r W]sKÔ õ™F»YÙ° ôÏ¥fØ­ÖbÓ’1™î–$«;ýX(6¬÷¹Ÿ©ÔÀé,+,, 0éSĤ«1'Øf±¬¯`Ó6é»dymQUØ/(_ú~µ¯c#Ic ó ®Ñ©Ç§YêfÉ|¨äU‹y7¸ãUs‰T‘Å«$ª£$ÓZjD–†Š–_<àf®•°ÈO8ùãZ)÷Ez¸Y;jrM¢Š+¬€¢Š(¢Š(¤4´†€2­‰>)ÔFzZ[èSV¦­dZÈÛª{YÚÿèSVÁ¤†Å¢Š)ˆ(¢Š(¢Š)§¥:“µ 9­Q¼»œ¶~n1ëY×Hª›†p¼çÒ·5HTIæç<`t¬Û«RÈ&-»ñ¯>¬}óªV3’T¸$È0ümaÖž¡I1Ìß¼ÇjŠ8ä…ÌdRzž•l4j&ÝGã\Ž÷5æ(4m‘•cÛG¥"A ±K®ø ílúz´!Á X4`àý}(6ò$o,`•9ùXõ¦¢ùŠŒÖÌ‚Çû^Ü xµHžòÇæ§ÌlœóZÚW‰-Ξ²_Ω8bŽ€s¸:{ŒƩĨѬŸ0\÷=ýêݼ™Œ«Hë•ë]TkHš‘V7,oáÔ`2B²„ ÿ:rÛ¾–ã?ëSBÜÿãߥgÛÈÛHä©ó¥²[»ž‰šÕFèç,2÷[׫ÐÜnr¸Ø×Ø1šxQŒÖCx“I¶½Ú©'‚jA¯ÙJvÛ¸oH—4Éiš€TS&áïO ‚À‚FpzŠQŒä $E°ço4’3a†:ñSçV~©›j×BãG,ÇÐæ‚â›c-m’9$uS½Û,½SÜÉ´-4òâ^®Ä+Ÿ‹Å¶íeÓõà|ªÐ“õª’wWÞ·ï µŒ‹Ì(™víøV2ÄA+ÜÙQ“–¥ëÿiö»VÔ¾¡;®åŽØƒÇ¹Îsv:Ü¢îòöãJ½_µÌeP (Q‘Ÿöh}]ö[Ëíü¹ÙT¬±’{wÒ¤šmjYͬ7HÎÖrWðl~UÁ[)«-ŽÚtankXxŠÆùü¸f"AÇ”à£Àõü*ÔÒ‡C…#®{~ËO}¤ê0ì¼™Q*'_-ÁöÏ9úVm«<>müš†K¬m™PqË(üë(V}M½’^ò65mEd‚k›¶]Ëóvöªº~›%¼÷w onÌý”t}*ý•œ;¬BÉÕã%ƒqëý)þ_\îÈ9§:ÎaÏÍ¢#ÜÂN„RòIVë׊qIg'™†$äm$pjc±Iu…ˆÆIË„iíFK)  úŠ’4e]¹5ôÑ82ùx'• 6µËF•åF¾d˜.}i\ˆ¡@ Òš¤ù‹ÏÊEJ0O¢Ö¨‹SÈÀç¸4q†˜äœÓaù›æ>ÕeW'Ø{V¾ÎèÆrbÃ>rúUÄUT_Þ?>•i:WfsžbŠZ(®²Š( Š( ÒÒ”‘j1â­Dã­·þ‡5lVt1‘¯^IÙ­ _É¥ÿѤ†ÂŠ(¦ ¢Š(¢Š(àP:RÑ@®¢Y†\Öt–“‚9­†¨d…]J5Ï8krÔ´±Ë´bW î ÷#½F¨7`©À÷­w´Ùvv¡œõ¢K ĸ\f¸V³±³ž†,l!€! äâ©e_Ý#Ë)ã’µ¡w§JU ýÑÎ)lí¼·.FsÔzÖ³¢ã$Éç¹› 0ÈÇ+Ž«-AæG÷3ŸOzÔ’Ê=ªÉÚO#Ò™«¬ƒ€W#Vª’ŽÂu›C#R’(Ç\uïWДì@ö¦›b¥Y9ÇPjqà3ŸÎ»SV%Îâ”IF×@ÞÄS’$A„UQþÈÅ=Wm.)Ù ·JzÓñA‰ÁÆ@É®KÅÍö‹ýÆ1™þØ%ÈPÅA燥vV%ÊYéºŸÚæ%®oF„ •P:näÔOH³H=J7c–Ö0sÛÓ¬9þµ/ïäó×ëQZÙÁ=äš…µÔßg•Ø´òÏv6’=9l¡Ý¡²sšòm¢Øí„»™NTº•#¶Š?,n8ùÛ©ü?:~™¥[éÏ·˜åØi'¦?©ï<=k¨•’_1HrÇïdAöà~UpÛ2(ʫކ®´+>¥)¢†ç+< "÷ æ JÓ¹]>ÝOªÆþb¯(nsÐÓ¼²#,W&…Í9´Üä—F¾Ð®o.-#[ËIX0†?‘Ð ýÕèÇŸlÕ›Kˆ/!óRBw|»HÁVÚºUI$Æ„°B}븴Ö±y- ´5œG;ðq׳cùUû>mvLÓ6ÁBÖáN@ïÐÔ–á.a’DY@ŒâXåhÎz0ôô"¦[bìr¥HíÛð©q’ÜÑNú!›WŽ0{`u©–-ªÁ>†¦K^ƒ¿"®m†×ËYÀV•ö)#Ø$ þ”[z™Ê¢EE‰dm»Nzû ¹ œ©Îz“Ú¬Eo’¤ R3ÐŽÔ³ÙJОT™À#œ×D#žU™‹$€qéšc èO㊵·ÙÐÏ·ym¡¨¤Mʬ úñQ6•Ù wµŠà dŠáõmccö¦í. jlØùŠÅùÜÀúpµ àŽ87“æ&Ð{g=9bÂ`óŽ8ªŒPsÊrr:ô¦G®v©ç>µd€€Ù=ê–ßÏKa2‰ÏD“ÆjÚFŠnÊ Tð¢ä ÷4¡@aÁÀâ”|¹ÇOz-©-ÝX’"¾fvœuéVSk9ê*œJ|Å—kœ ¾Õ~!÷qÖ¯mŽy‚«CŒUÐT!G˜Çœàw©—¥oEu2c¨¢Šè$(¢Š(¢Š)ÈÅ-@&i;°òÏøÔ”Q@Q@Q@Q@äP8SXàt Rš­- #xÃv¥ éO¤¨öq½Çv!¦¬J­?­-[Iî!Å" \Ó¨¦E-QEQEYÁöÍFk©SˆÉŠç÷çÇáïZäf‘P(ÀéS8ó+ ;à°†Þ†  õ¶U9­bŒV.‚+‘yCÀÅEöeÇzµŠ1MЈ¹™Wìê6æšÖ€àà u½\ÅÕ>y…¸¸ÇJ­i¤ÚXÉq$0%ב%‰­,QŠ=а¹ÙšúlOyö‘$ØcoFuØãêj4ÐÄõ#­lQC¢š±J¤–ÆZÚy-œnúõ¦ê†²UR¼ÄÚOc¸V©QLhà ô5-¬'6Îf%»†ÆüÛ(kÃrÃ(0¡ˆóØdf¯iɨ=¼ŸoEK”b GÂ8êþU®±(' ã“ÇSN+ïøÔ:)êZœæª¯<:—&0¦' ÁZŠXµÄñ.ôÆ$£%zcú×M·“@SëƒYû4ÛÓq©™—+söq‡Êg"f8]§®++W»JÃm?Ùæ·‘Yân éþÉüë¨Ù­FöñJU¤‰©ÊîPqB¥aûC&ê-Gì iÅF âP8_§­7Q7ðÚÛ HÒI¤•D›ÆP s“Øg¿½mì&‘cÛMCKX|æ.“ ɱI/€I²wFz§=?Ï­W°µÆ±ª–Up³FÀíåIA‘]Œ8éÒ P­ãÝ*‘+¨V;ŽÔrÙ Tg?m©M«n¬Œvsóó {Ó84ƺÔ?·ä³1ù°,ŠîÈ! òÛ»àûWRS=NAëK· Ï&Ÿ"`ªØç%›T‚ý,‘!“wïRc`€Àûò+ ùÕ”*.ÃÔ“Óð¬‹ÍQ-õktx¥Èéçm<®AtéÒµ­æŽaòº±ÆN .UͰ¥{]‰Ú|é6 ^¿Z^ƒ=j™eFûÍÀ÷©ÅuB6ÔÉ»‹EV¢ (¢€ (¢€ ‡µ²qKš§…µ9â=˜}Ið«t´QEQEQE˜¥¢€ (¢€P0”Î…Jùx;ÁçŒ`þu=%–Š(¢Š(¢Š(¢Š(¢Š(¤=)h )h¢€ (¢€ (¢€ (¢€ (¢€ 1ERKE+˜£´QÊ€J)h¢ÈÅ&ÞiÔQÊ‚ãvѶE.Tž´¥A§QBŠ@BÐ#0f²çŽFzÓÖ$˜Ê¨¢B0[Ÿ­Y¢“„GvU¹$O,1‰fE;œdúgµI fYÓc2¹Î8©zŸ¥b­+ âÑEQEQERZC@£9Ô®¤qÿ7«8ª±ø™Üÿ×(ÿ›ÕºHŠ(¦EPEPEPEPHN)íRk"kÛ«ûK[[Y"–_žYrWËÉPÉÈèZ‰»¨ÍpÚ&»â[J}H 8B¯uPŽ ´LÊ­÷ŽA+È÷CñvŸ¨ø~-Bæî(äû$W#æUrõ휌OZ§‰æ:ªZåoüs¤X.œXÏ0¿»6iåÄIŽ@CŽ£äc<ô­CV³Ò¡Š[ɼ¨å‘bF*H.Ç 8dÒqh¤Ñ¡E`Gâí g*š‚d I,¬ˆ¸“$Œ ¹æ•<[£½˜º[¦1´Þ@'._nìmÆï»ótéG+ì.doÒf¡†tž–2YC)Æ2Èë\®¥ã8†•¨ÞiÀ7ömòZÜÑ‚òê¬W׿OzlnI€9 šÇ“ÄzT x÷h!Y<“Ô·™ýÌu-íV?´óGkí6X¦V„É ç*ÜqÒ‹0M3@Òæ¹ÝÄöšŽ…m¨\M,ö©s2’@@@'ê9ÇåëW^Óš/ÚT)‡Þ`+·³œc¥¬9‘­EsðøŽÂúKil¯­eµ–9d,XîeLd§ž~½êH›s5ý¡xù˜ì]ÿu|Æžñɳ‚;´Y…ѹEa/Š4†¶’atBF¨ÄÜ1W;PŒOІoXÅ­izj­Ì’jI#ÄË aB`ÙrýE¬9‘ÑÒf²5oiú)€_I"´Û¶$q4ŒBŒ±Â‚p22zsPMâÍÞþknÊ\[²,ÙöÆ_î–l`êMaÌÐ}±K\•—Š ³km­KpÙje€Â¹ÁDurK7ÏÛò©äñׇ£Š:ŽVxšhöÄä”S†8§‚#¸§ÊÙ18¤Ýíú×â¯C¤éSK§O ׈‘ÊÅ$‰±Î±^=‰?…]‡Ä0¥Þ«ö‹ËO³[\%¼b0ÆEr€”aüGœ€½³K‘‹™&}¨Ís> ×.uýk˱øî¦€4(ʬ¨ÛAÃr§xÖoõ9o§‚ 6ïìëqåÈei‡]Üw=>‡ÖŽW°s#·ÍË¿ü1´7k*K¿fCnm‡ŒðG¥t·pÞÛGsm"˪9ä2‘E-n5$Ë4QE!…Q@Q@Q@Q@!¥ ô  ø:Íêÿv(¿özЪ0.5‹ÆõŠ/æõz€ (¢€ (¢€ (¢€ (¢€ (¢€Ëœv¨™ae‡jÌŽíÀíSÒP&rðÎ¥¢ø^óI›P·–YZgŠhá+°ÈY¹¹ÁbzŠÏÁ:´6ïzÌ ²àÓÑÅ®JùmØ-Žrxã¯^+¿ÅéT¦ÖÂäGžEà-ZÒ8ZÛ[¦‡S:„F[bUw#+®7䃻#G­uúÞ–º¾ubdòÞTýܸÉÇ*àz‚ü+Sôb‡6ÝØ(¤q–> “N¶Öc¶Ô0ú„Acgˆ2Âåpîžw0 G­dGðóTÖÒjöw sp—8{ic„ØYXK¹O‚¯c^•Š1ïOÚH\‘(é¶’Ùiv¶ÓN×ÃFó?Y?\f¹É|+¨5¦±jº„Uåò^ÀL˜ÈuvVù°Àíöë]Ž(ǽJ“NãåG }à‹›Ö¸™îìÞa©›ø[mñ`Çå•uÜ3Àêäfº};Nû†-ã+R-¡F þꃚÓÅ!8¡É°åG7>צÛZÝÞ«µ¥ŠÙÂɆFÜÊIÝÌiǦG|Šþ ²½ÒãÑå²¶´71Þ¼²=½«ÅÌl§vÍä2AÉÇJë×YÓŸRm=oíšñFM¸•|ÁÿëEî«§i¡kkæ!¸•SwÓ8ÍR”“DÙt9½N¸»´ÒoáµRYÛÜ[ýŽTgûÅ@pÇ <®H=©–~ »µ :…»Fš9Ó?ã܃’s¼üß§ë[ŸÛ)%ö ¤Ö3Av²1o´ÅTpQGßàž1Gü%Z¿¶lÄlMÊŒ1Î^§7!òÄÍ>ºÛz«Ú[[. 8C 98ÝÎw;{Ôw~»¸Ô/nô—Z…­Þß ’!FÒwsƒŸsÅjË®E$ša°¹±š;¹š<›€ *‚[f3¹†9­ZµÖ4ûÛ©m-¯mæž!—qœ}AZ9¤…h½:´žîºÍ£¨?¶HUD‰$%”)›i]¤`žww< ôCKûmÕÚɲâÊFxɩ܅X‘Æö©®u[ ;˜`¹»‚¦lF NŸ§Ö›³¦¼Â¯í^O0ñfRÁÀÉ\g¨ºÑ)94ì %tcYxVk cN½‚ÿ÷6ÑÜ,±Ÿ¥&Ýõ)ZÚZ—†ïuX¦3ßB“O¦Ic!X L¹x³Æ:^´Áá=šûêžm¬‹?”ӥů˜áãP ÆÛ¾Nƒ±äqÖ¤ðÇ‹-õ½0Ku-¤Èe3[¤ÁŠ*;!o\p>™­|E¤]ÙÉw¥k%¼O弫(*¬q€Hîr0;äS÷–‚´Fk:+êÓi²%ÂÂl¯è†vü+.:Œ}î¼ôƒ€ä[{K{­Ee·Š+ØeT„£H·-¸CpGÐæµ<9¯Ï¬è÷·r¥²Éms4 ä¹hØ!À9÷ª:7‰µkûýÞçKŽ%¾²’æà£’``@PxèÀñøúRNHˆÙ¼5ÒIö«Ëk‰>Ç”JöÇg–®–²XàrÇQKká+û;½ âU]´ôš)|èÙüÈäel» € Ià ì‡"—sÊÖ*9OxVo[[E ÌVÍb²´E€#+)R9õ¸®}ìn5¿x“EûAŠÎkkD™ÞÙ¥[vÇ$(<ã$ƽ/›hSiX9ÂßøïPì÷öÌÒjI¨Z¤¶ÅãB#”‘K|à¨ö óK?ƒµ)¾ÈÑ_iѬ.-$H슣H$ª‡q´qõõ®ëæŒ{ÑÏ ä‰À]øS“H–Ê VÑ|û;{{‡’Ð’ZŒ¸aŒúÔÍàÝEõ[½Iµµ5üW¶á`;–/(« Ü‚¾„y®çbŽy*9Ï h—º­ô7—Ü›‹Ùn•£ˆ¦Ñ!ÜG,{“ŠÆºðf¥&‘smý¨º:¸Õ v„íR$µ†rzuÈ®ócÞŽvÇÊ1ñ,Me*ÞiÛÝÞ\·™ˆ¯ö… Ž3ŒoÒº¿è÷Úƒôí'Qx^æÖ?-š%Hã€zWE·=i@Åœ¤¬ÂÖŠ(©QEQEQEQEÿÞÚyš~hŤtL^ÌÞ± ü‹UšŒ/ïY½@ÏüjJ`QEQEQEQEQEQEQEQEQEQEÖçùÓ©1šó¸|%â¼o®³é¿eŽöi|¤Ü¥¢‘’T oã©Î ½ã«Åµ¾ð¹SoçTybwØ¿ê¤SÎ xvëŠíqLx•ö– JœŒŒâ©IÞì—þ«óuhÞm¢Â^úK…ƒFn1À÷ëééü"ž —B¶°¹]žÖ[P’ª¸3E îùÉ€6ò[šôc<š\SçbåGoá]n9ìÝÞÀõ™õ 6;#‘Yp¿/-ó“Ï «Þе] #²¼t¶Ö±40\Ä­ö‰T° ¾x_q““ÎEuØ÷£m.vÇÊŽ#Yð…Íÿ‹TH,/-naŠ)c½g-‹@¼09èqÈ5bO™|Eª_}£Ë³½ƒå‰AÝÁCJ8àìÚâk¯ÛïK´QÎÐr#Í.<¨Éá94¸­ttº?eC6é1!²î%¾°w÷qÇûÆHãòÊ3‹·¡‚ê}éqG´¹QÌøSGÔtx5$ÔÕšæú[¨þÎ[?$ŽÇ>µÒl¸§cÞŠ–Ûw@3KE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠLRÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙleptonica-1.70/prog/blend-orange.jpg0000444000175000017500000003536611653424354015535 0ustar dandanÿØÿàJFIFMMÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ{?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô*(¢¾`úP¢Š(®ëáW’}qžƒQ‰ ˜o¶38´’ä>ÎO¹»Z@*”¬¬RvM}ÍãÉbéqvÊÖrDHÌ|©à€~ënÏ·jÔðÂK.—7WrÏ4aeYœþí†~èÇŸå[´Srº¥uk{n›Í‘Ší;rtÛÉëéO–êæØjòÛ‰USF••[>Nb1Î21‘ÏZé¬tı¹º.'v¹}ò,…q»ÔaF8«ÿè9ÒècéÒK…;ý¶K‚¢FŽcnåñëÞ°¬µÈln܇íBn!™Ý$OÌ ”gÀëÇÚÒqR¥ä%%®‡§ÞÜ]Iá©.̯Ӿà˜ðª=ñÖ´ÛçÊE>f2KtQêk.–6ð®É䞟_´ɊÞÕw}çrycêkÖ„Žø«¥ØÑµ‚`ò6_ï¸éô¨¸òÉ#5ÍÝøŽÚÈ”y ~ê šço|Wwvøµ,ùiÞ¯ U-±è‘Þ" db­-ò€~µäÿÛºÄMºUÜq‚?Jwü%7x¤wªS}Îñ nz»ê1¨ûÕŸs­Å,\:לO(ù¦"©³¡«TÊS茥Kdt×:íÅÛ‘ •Œw=ê¡/)Ý3†=—°ÿ£·3’#× «±@Ç™˜)ô‹ŒÞ矈ÅÎJײ²Ü21V œZÖ^(×­° ¾™Ô ¿¼øõRHmÔÇÞ§%@ÀÀ¦©w<õ^Pø­/‰$¿n©¦Y\z¸?®k&{- á÷%´–¬¸Ç—4ÂE1±ëT©ÛcHæU–í?Tg]è1HK[^/ÒD#õ¥Ó´ˆ!m÷.Ç@9mˆõ¨ˆ·w \e(»îtÇ4‹øãoCY¢‚xv¸Çjäµm"X\º)+íZ­»ä 3(A€?Îö»ˆÑ·¶õ>¼{æ·uc?‰Tq4¦í kÙœvæH ­D\1â·îÖÚ÷$l ­k¦E%Ü1==)$›Ñ7g»QEàøQEU 6æitç–á•äŽYã%WnBHê8ú(«ù¨RÚ8­ä†!±]$üÎʼnüØši«XM;ÜÅ—^”i w%œ¶¢kGžÝË+œˆËàŽÇ:psŽ•au°$&{WŠØM,y`rÑï$íãßnôë_XÁb¶Î’J>ÍösºW )\6ÐX„Ïû8«¿`¶Ú‹åeRg™A$üï»q÷Îöã§5£tú#$§Õ™Vþ'¶X˜ãDuvl²¨SÙX–^3~*YuÉ­šhçÓ%GämD•XIæÉåŒ:¹ÅZF²HäË‘ãtòÊË;¸UôPÄíè:c ô^YËоnù^$’Í$ŒËÂå›#¾éœÓ½;ì· u™b–;WÓä7*Æ"YŒ2;Ýéû¶¿‚ç_Îxš! ‘."áŽð¨SÓëÏyÇ5fmÒCQåÏç»´ÎÒ9òÝÎ[pÆìŽ{{ÔãH°yfÃæÉy™‹c$±9'É9¢ôû§Üf—«Ç©4È$‘'k‡Rq‚;ðr)÷7Ò%Ùµµµk‰V1+á©$ORv¶·$RŦÃ<¹.~øv/;»63€Kvóœêi×ZuµÜ‹,‚U‘Wnøfx˜¯¡*FG±¨¼9¼Š´­æEý¨¢)Ý ‘L7@ÈÄg.#=¸ãÌ‘ªÉ¨]T»9-ÚãË(Cp…±Æ§éVŽ“bÓ¤ÞS›U•‚Ÿt•i#ŽÃÐTÍcnÖ“Ú˜ÿs>ÿ1wwçw=³“Nðì—rœ»Ër±µ›¬Mq%²Ì]~gMÜã®Ó°óëÛ½Aa¬^Ü[¢:ïò*J¡U7²¯'§ØäŠÓ[uú¹šuùʼn?øó~u èöR*.ÉS``)Þ6ÃJHÏ84sC°Z]ÂK©.tËkËvÈðÈw?tYwç=0¤ŸÂ«[k¶²I;Or‘¨ÃFŒ¤a8ù‰ÇS¹N;\€Mh=¥»Ù‹CûBykÀÚ?‡ŽÜcœR%”1ßÉz¾gŸ"beb¸Rp?ÜúМmf©^é™É¬L×­mon×nï#! ¨ªˆ"<žùó?É©aÖZñ[n"ØŽçz¡”8P å¶²žÃžµv;+x®ÍÒG‰Žü¶ãü[7qÿl×òªßØzxHÑc•#X¶Ç<ˆ`¾n8ç4ïÁiw ´Õ§k*{fòÞî[t˜T±_—®0¸Ï¯nõ­ª_Y^È‘B­ ÃŒY‰”)PHëZbÆØ<™§_˜ðç9?øñãÞ‰ìmîdó%saFw°aú€i)GšöYZ×3¥ÖÌfæ'·òÄñŒ>à"2Óõ÷¥¿Õnl¬ææÑ­%‡.]dUVw`ž™õzM6Îi^Y`ÎI`ÄÙM‡#§Ý8¨£ÑìÐclÒ|ÈÃ͸’Lm`ËÌp2ÀëŽi©CMik¨ë«émtô¹kF2<‰üg.áFOAÔ×ñª?ÛSÇ5Ä+i%ɈË#0e@¨¬F=Ïz÷Åi qn–â3å#¬ˆ»Ž«ôÇNÝ(]6ÑgX°Ó+,‡qä1$÷õ&’qKT6¥}Fã]1Å=ÄRÏkåªr@<Ô Ã'ëŒÕËñ{%ÒyF3¦2c‚FHê3ŒPA¬Û¯}¢á‚Ü´r…âòB€;8Rp£’¤ÀcI4Ø#¦Fœ;¸w&fbØÎ’p ±8åÉm7yï®ÃnoeK³kmj׬bY>pT’'©%[nHâ ›Y1yò}ŠSojÚd. Ç• xÏ͵XƒôÍZºÓ­¯%Yd¬vï†g‰Šú¤d{‰ô{$aa÷AE•Õorƒµ°ƒÐzRNFÔº&ñA·ØòÍ,q+ʶ³Øg äò=ñ;ê~v‘í°)æ\CÀ3,l=;žGÖ§}2ÖHR=² GgVŽWF‰-ó)ž™ÇåR}ŠÜÚÇlP˜£du‰;•ƒNrNà={Ñxid+K[³Eu µ´ –…å·&@waK Àr¹÷÷Áâ§Ò¯5 o#‚í§Ø£™œ0Évfìì?J¹‘gí‰.ÖCFÙOPªNð¬Gk R‰0â5‹9?ur@ýM7([D 3½Û1×^–1p¢ÒK³‰¥’@ÊQe‘0sˆøõîEn† ¡È# Õ5Ó,Õn‹áY$ùÌ~9‘ãWB¨P0À©“‹Ø¸©-Ŭpá`úŸéZõ¯’3ËqùS¥ñ£—þï/—æŒÅßyAü)Mº;t¦Ž01S¦G5Øãs欘‹e&xîi§;?îöóØš¶ŒäóRÚF.æÚwaHÎ+ LÕ*nIPÃÆ¬ÔLÙl%…7°Ép3Qª¥[äaü,8ü«®e 0„T^§—«YýªxÌ;¶0Ìùë\8|s”¹fŽšØN<Ð×È䤱3M–e9=çSE§ªdª†*>nø­E‚2\œƒŒwÿ>”ª’ÖðFþoñ+ò\•ßî­Ï;ÙÉìg2ª†¢ucÂÖâè7m •Þ5ë÷›$ÿŸ­gÇáÀÏ|ö¢œá=bîEJ5!ñ+Ô“–?JW ʬ0Á!y´Ü{ÖÊF\¶ÜνÔ`³€ù¤!ÎYˆûÞ•Éê"¿¹q—m#EüR8ÛŸ¦k¶šÙ']®±YÓi)œ¡?BkXJÈêynUŒ :ÊÊSE.Û“°†ýEnGaáè“1C¹ˆë*±ÿ ˆé쇅$ûQöWK¥ =#ûJ²Z¤Z ¡ˆ€6*\cþtÓ¥éŒ Í”»ðXäcÞª‹vÎ _ÒÉ´½We-;—Ö¢t”Uá¹Ts J¢U~Ÿð‰è©"•†vÎb3V×BÑì»@Pygè;Ö™Õ¤Dˆ[Œõ© °kÙ|Ë’e#¢‘À?OZåJ‘W›±éÂ¥*¯–š¹Ê*Å—*¤ðP*Pé]ËiqºâKq‘Ór ʻУ2¢[ OÍÎ@Ñ }=¥¡æÖËjïŸàs«œtÍ8cÒº–Ñ´äD†SåÈÜ+s’kPÓ$°œFÎXeHëqZÒÅS¨ì·918´#Ï-Œý¾†˜c'½M°Òm5½Ï=²³Fi¦3VŠM´› •6ŽYã¶æXăºÁõjy)ž®zë\ÝÍøší æ*xýô©Z½Ü'*ŠOcU¥ÒnͶ­ë¿‘æ™ýœ“Ç¥ä3îçc~F²XúŒ’A­O¢¹ï´QExgºQE… ’®—ÃÜɶÖö0³’ÏÉ"ãïº=p;ÖíGäE´/”›Cù˜Ú1»;·}sÎ}j£+ Jæ~•w,óÝCqé:°wߊW°ÀÏ$pj8uÉ¡ûZ›A4ˆ’|Ì®î3œÊò¸瓊ҎÎÚåž+hcš^d‘#ŸêG'ñ¦­¢]µÚÚÀ·-Á˜FŸø3Oš7ØžY[s&÷^š h%mØË fG!WÌ•dŽØf?…ZµõŸŸ‚ÙͱGžtVØ‘²¹ÉLäPgà0lv­Òl…-¢…$•%E®öG 7qÏ#ŸbiãKÓÄ °µ«ù‹…v†þðÆ}깡m‰å÷ Õu 4ælJâ`ÑÄ ÆgãbŸcósÛžuk»ö²{5X•®„$9?{É‘¤ Ž¡N?¼„dW@ȯÊpÈέ0Cˈ“åbëòŽç${œž}ÍJ”RÛQ¸É½Îr÷Q¾–ÖèÇ*Ãs©eÜS)6Ì…ÈÆ@õã8æ¬ÿm^ý½“ì Û¥È¶c°‚N@-¸¶'!pr1Ï5²mmÎìÛÄwäääçêy¤6Vv.ÚÖrÆ1¼÷±š®xöIw3ïµ;‹[ËÅU‡È¶¶Šb[9%ÝÔóœgñ¤»ÔîÆ¤¶V‹o–¸HL’ä…ÌO!8dü‹ÇkPÃ3³F„º„rT|Ê3€}G'sQÁeilˆ–ö°DˆÅÕcŒ(V#€ŒûÒR`q—s;OÔïgšÛí1Û¬sù¨{‰VŒàœž àñŽ8ëEΡ5½íáB§k[ÛÆ²1¬Äåýô¾ã5ª°D»vÅØI\('®>µ²…§¸‘Óx¸c’7¡ žÞû°~‚ŽhÞöþ®²¶æú¦ º„V†[1,W© ufT}ðÈ~eÉ ç.y sÏ“T½–ëû=>Ê·K+£NCÈUFásß¼.xÚÇ' ºVœ°y+§Úºì.Þ„tÇ¡?™§6bö‹hÖVÍl§"”ýÜb›œ{ F]̸õÙÖöWŽ%kkW”a‰Wdy°{¯îÔf«VR]6³~³J¦HŠF‚„ƒžr}=*Ô–sD¶–òÕ‰O—þït*pŠ®ÎC¶70œtɤåˆj2Òì磹1\Ê·óÉe-™¹YÖAûÌÉ@ ûÀÎsìré ÔO´€\ÿ¤³½ÄÑÍxc/ä)dÉéǽlGag HÑÚ[¡‘ƒ¹X”`r 㓞i×6v׊«um ê§r‰cõ§Î®ŽÅ 5 ÞËI{@o™T5ÎIE1<™ OÊ;÷¬ëÍcPþƹ–E†-ö÷H†Û’H•¾lžÄ© urk¥hÑŠEb‡r>éÁœ?Qµ­»Çåµ¼LŸ7ÊPógwù9õÍ%8®‚p“êAa#µÎ£³2Ãuµ 9À1£ãócWj{d·í,L’4ŒÍÔ“þ{ST7®†‘VAERQEQE (¢ŠQE‡â'Ø–ßï7ô­ÊçüP@KAž¬ßÒ´¥ñ£ƒ3vÂÉú~hÌYKtèOÆÒ7tª1¾0=*`û“^¥Ñ"7½Kg$–÷ ¦XH0@öäZ¯ioç¾I ¹ëÞº;Xâ:÷Ú2kÏÆb©Æ.žïò=|’j¦Ëóis¾âhÙv¬j¸ ¤uÏøU‘ fÚ$öFM÷wbc å7ÈÇ¿#ñ«ÑǬ`åT`dg?ã^“½Ñí+X¦mÑnÄÛBʇ xôüzÕ˜G˜<­ÈFièâfÜÊsÐS˜Á]¼†ëǵZ«&ÒlÏÙÅ^ÈÎÕÃ!Dw[nÎÞ¯ÓüãÞ³ncF€Ï 3Œrk^îÌ]I†ÆÀsP¸°œ±EcŽ9'½¬6"ŒaË{3ÊÅÑ­)¶•Ñ‚T–Ï@ ({VÞŸ%¼e‘ÖXº^ÇÐÑg¦­ì/µŠL§¿C]´y¯¡ç}Z«“…µ3p½?•#EžœJŸÉe,¤è=!s×Úµ±Ï{hÊçiÖÌÆ„œ´ŒrÌO$ûÕƒÑÒ¶Vв=êTQS û~U1›ps΃ªÇ»QEâðQEW= G“¤·ú.¡9ÌÎ|éQPd÷ÈÐÒd@9#ƒíT¥be˜Ú-é–þúÎ_)®b`ó:NîШ)=ןNsÒºc ROÎ3"#*0'î¶ öçh§<©@ò*—m¨±¸àœS€OáR¦’JÀâÛnç5{«ßZ?Ùžå8æ’7»syÂÆÊ¹o”¼öçgœu›“fîþßO&ÙeŒ”\1,03Ô`)Ú¼üýzg¦ÍF&CH%R‹Ì‚AÉö çéO[áG}ÎV=zåày%Ôà‚Uµ†X h†gvŒ1­’q…ägÜTÿÛ7"êäø–â;‘ZyAºE;r=IäüÃŽsƒ]¸·g–{wG2]‘÷@~˜§Å pyžZíó»rNXõ4ÜãØ%ÜädÖ/,ÞHVx ˆKpñ¼ŒƒÍ´J6üÇ^Ÿ˜sÒµµË‹¨¬,§† / ‘•݇Ò°׿VÄ’²6:UBÖ·wq¾ôy­K2&v¹ *3ÃG7½r¼m%6­°ýœ’Ü͸ÕRóPCg$Wv©$% dd"b˸wÀN;gÞ£Mbìù®-õ/.Ź‘í!û¦ã¨r“Üœv­ï=ý¨óÜö—ö½Œ»™š£=ô— óÅq+*:9Üs•%>^ÀúŒóÚ« Ç‚2^%œSÝÝy·rB•‘•S-À$§û¸êEn-Ò2$†XÌo·kîmÄÁzæ’³[[Ë$n‰y$‘·ü ä—$çŽsŸNkªhÔ÷¢‰qiZæfw}{ –e0Çn¬»cÚ%̲¨“ž@+œ{ÔPê±X^Ê.¦ŠÞÕ¤¹ùœ…Õ×'¾ qßÕ¾à9¡ œ6ðÛ²¶è¤&PÞa}ÛŽs¸“œæ¯™k r½59k½Fö}+Tµ¹» qý”f)LÄDJX?ubÅ»`ƒÆ5»ªÝIe ²›µ‚7“ËšîE_m'?ÝOûŠÓæŠÓ¶€ Õõ9+MQƒÌV†i.e&øª…b«U¾QI÷ÚqV[]ž9¤¹–(d{=ö›—o(iTI DBò~a]&O©£&›©Ð$ºœ¬z”–÷—Èš„_h[Ý©`Pn”¹Çñw8#ŽsƒUßX»³Q O5ÑädkùÒ ¿1ä…çæê8®Ë'ÖŽ}hö‹°½›îdêBybÒØÈÖò¨ŒŠ˜^çŒ}+“…8sHÓ Ž¥Vn ë¹¾“ï•QHã–ùx éV—«ÆÜc‘Ò¹ë½nÖÁJÆŒò“Ÿ*Ï× Ž(Ðõ·ÏåÌ’C9åbôõÈà×?Õª[Ÿ•Øèxª\Ü—W7 ŠaxnqÓšV»†Ýâ]„ÝqÀ¦^³mX‘DÃæÜNH÷&ªÉn÷î’ñ‚‚ýê.£+#tÓW‘° ½ÈiAÜ0è?…f®ž¶wu»Ÿ%ŽJz}+Mi´;Ø–tdŠG y,~•Óý¥.¡Y#䞸ïøWeÛ…Ÿü9Í5k˜Ú¹®RH›æqó }â+2UmÃ'-ß®’m"ݳ#Ë.þ¿/϶+A†eep¹ãpÁ"½l5HÊ Õ?Ž¥(MÏ£6,´Û7ÒÐ4jÅÆY¯·¥cÝi¯g!*ICѱRAy=¨„20}*ÌÚÄ>NbßyJð¥s©W¥SUtÍ¥,5j[ò´c2õÈæ toN*ÇÞPA#ëM ÷5êXðe4ÊøÂóŠh^8éSì” ÷94ìR—ž´“GçPÍ2CwíÐzš&˜F…Ÿ ž+žÕu%‚&žcìˆ;ŸAFú#zTÜÙ¯«}|Çùæ~#=ú±-arÍs1/4‡$šX žyåÒ†vòìµ\U,r!Z¤¢¬{ØzŠÂ ïÈ©01ŒqBñëKɤwÅY•)6zT˜¤ÁëŠ Höê(¢¼cÛ (¢€"œÌ Ûª4ÛO–$b·l ð¬­ÒòÔb¿M­%Æï1&f.Li¹Ú¸Î1Ó1ŠÚ¢©JÉ¢\nÓ9+-N×E nnÒXôÛT$v`¬I2à1ûà`Û PF¢¶:I~ñ¬ˆÑD#^Cµ²»˜™·“ò‚;‚k­¢¯Ú¾¨d–‰˜Ö—P\-µÐgÔ%Ýc°DKN¸;ºû㊟Uµ’[·xá/>å7ÏÌLxSƒ[TûG{•È­cœ’ÚþÎ?./¤‰¡…¦;‹8!°û3÷I^ËŽœ ÒY £ª'”5d.P§Úƒä/“.~ÿÍÛ~÷9ÇlWIA§í4Ø^ÏU©‡peþÒŸíÚ[·¯Ù>Ë»ËÛµsœ|™Ý»>glb«Ågyl‚XÍÑyo/‘–;dÌÈBô0B©Ýךé(ÍÓKÙÝÜã|R5Mâæ+v%›ËŽRÆM‘Ÿ,†Ç ŽÙÎ{V”S^Z^[Íz×R…³‘•c*¤–ÀÊ1'æ§ÐQMÕ¿A*vÙ˜úèœ%´¶âådÅqæqвýÞ¹ÉùxÁ¬Ä†úîIŽí-Zbe0¡žè’˜ç<ÄN9Úxí]CFä“MòWÔוH¶£¯Ÿüýšn÷9»Ávc·û#j+c¾O3ÎYŒ™Âìû¤K·ïõç8Ï }µR?íÔ˜ýœMª²Ÿ7sgxRyÛ³ïü½s]/’¾¦%}ML¥]«r/¿þâök¹€Öo?…ô›fŽu–?±oDvF]¯ìí ð2}±žÕÖWöúl²[›Ã4Ó^«Ç–*„Ì„/AóÁêwuæºu‰U² §×E •T_´ZÜR¤žÆv÷©vnŒ·Œÿn #.Û'ü½1Ô篾*¶‚·Ñ :S*G¤W“‚¹`ˆŽ¿x;~WMMÙ¨fÆæ“Ž™­½¦–°½ž·EVfEPEPEPEPEPEP^yñbNÓ¥UÊG#î9é1Ç~•èuåߨ­žŽA#÷²ÿ%­ðßÅV0Ä»RgœÆ­<‹QÈò1ÀUŒ’J-ïž9•mäs!8 ªI'éYbg!Û󦬆7ŒU”äyìrßsÇçìwÚGo4ÒI ê¬?*Ûº×ü ¯DN¢í¦Þ‘Ÿ28”þkÊ>ß8?ëj9®dÃÊåØ £=‡¥dð±nûzíÚV;“¬ÛéÓõ´¼·ì<©ÇÑ”VÖ›ã.õZÖI^-ß3„FÃtÏlúW•Ç6 ?G;50=C rÃÅÅókcšt¡Qífûh{*xö±û`DÎ8…úþ Z0x¶ÂÅŶgY”µJ’:Ž W‘ßœir‘ÕXÖºuˆOXãTü€ÍRš”,úŠŽŸ4[ÓÐô i³ZÜÝ]µX[t…9¸Ç'ò¬i¾&éw—"Þ,P£|ã“s{œ/æ^(´‘%Šàn17ÊG`úõŠŒsÒ³†[‡·2Lë|Ò÷\™í‡‹t‹ï&YõAŒ|…U‰ë×}ªõ·,mI%ÜN½N!‘þ‚s^&„í'#§µ[É*ŒœñŠ©aáÊ£mÖ.\Êr»ôÿ#Ýcø¥á¶åïöž˜6òäµ›ª|AðíĨWQù‘ïšñ‚ÀTsd!ÏZŠxJqš’¹¥l,jSp“‡ùÑgâm"ýwZÞyŠ3å8þb¶!WºÄ»÷ù×–xJ4õnrïšõÝß1§&»¡J2•"Ym4·‡ù ý…©0ÊÚä×EÿC¡êJ¼Úð?Û_ñ®ÒÝJF9’.æ øã5¿Õ£ÜÃû6—wø‘Å6‡¨§?eÆé¢ÿ5t]EÏßøúÿu·í²>Ct?…IyK¹Ö«Ä?³iw‡ùdš>¡Ì–øï¯øÔa¹` Åœôù‡ø×Oqæ#…éŽj£áAì£êñìÚ]ßáþG/um5¤BY£*¥‚ |Ä’p$Ó†›xìT@Iï†_ñ­™öÜj‚=ÀEh7»¶GÉüjWŸ#Ë„mNíÜÑõxwìÚ]ßáþG{¥jÎçu¡;~ê PÿìÕί…õË˶º½Óœm8Š#"•AøMz²¤kÿ-t¡¢ßþ®Do§…F+cª–¶<ͼ;«ÈøûöÑþtóá­^!“fükÐ_pøíÐÔBp€®wü¨£ØÄèNÇœ½Òº ûñ¬ÛËû=>ãȺœG&ÐÛv–À?@k ñ>¦šLw2¸±(ž¬yÇë^Kss-ÝÌ—¶é$9cQìÑ£›;#®é]®‡ýûð¤ÞšÌn×'ûÊÊ?21\M(§ì½£>²¢Š+çÏ  (¢€ *™ZÞÖi–&•£Faõrp=Íd~ãí—Vk¦·Ÿo•Áq‚8æš‹cI½Ú+;GÕ#Õ, ›|"w‰d’$pJgÔur˜.7yE.ÆØá¶ŸCŠhiÙ’ÑYk«=ÍõÍ¥ºÌÖ¸¼’ùhÿ!X“ëÅX¶¾Y,÷H-»!IpCëÆsŒŠv`ÓEÊ* ¯-mÉÜÃqHŽ™æ–;˜%‘ãŠxÓ視%~£µM‚ÌšŠ† ˆ.T´G*ƒ‚cpÀN+ý™ïüËJX2 Ù$S€Ý騷°$ÞÇAEeØêæîÿP·xÒ4´1â@ù®»9b¯›«qHgˆFç ÅÆûô4Ð4Ñ-3Eq–RXÏGF â*J@QE (¢…Q@‚Š( Š( Š( Š( Š( Š( Š( µyWÆÖÛc£cþzËü–½WµyOÆÏøñѿ묿Ék§ ühœø¿áHñýçd)(í^Ùá?ËVýëØÛßëRýŽç ßg“ 2ÓȤx%Ž,¼. ¼AÅC³!ÅI§¶ÝV?v"˜(·;u8ûb‡³¹ØÚB“ɲA”R‡®qøœ Ù•¾~õGO‡r±ÇÞl~“üÅY”üæ¼Ù;³²!q w–¯o(Ê8ü­qwÙ]œgtúŠíTâ«ÝÃÊí‘sއ¸­!7mns1€@íëV<°ˆ‚>µeôÉf˜¸ëùTh‘öH¸oqS+½Ž¸J-jWd w ŒG%Ìé `³ S®df#9Ÿ§Lë–e¾îüÇŠÒšÙ™U•“=#A³ˆ-Ôg`Ç­z†¨Mß•pz4x¹ùMz–² zWEÔáªõ±Ð+œmD¨î¢,Æé¼g;Î)åˆ^?­{9XvŽY¿Jé1([¼…šiääœôÏÐØüóK=Ð|µÊ}jA-ûÀTr‘Ž>¸¦m×ÉäöÇçÇõ§¤Ä£º.ò£å_SUuyöÅùi2 ÷Æ[ÿe©ì£1D ¹ïÚ¦àSµÒ¦L™¥ùÝ‹¹ë–=MiÇi qøZ°€(û¬Ç×­¿@TûÔÜ«¤ƒ–ܾ¼éT¥AÈz8ê>µt»DÌqÞ©_Må‚TåHåH¢áb¥Öð›•ÉÛО¢±/o~S‘‡zêc¬r¬¸Vô>•æ¾5ñJ@^ÎÎLܰÃ2ÿË0¯ÿ®“`ŽgÆÓjšÃ }ÑBvŒ w?Ò¹íÔÚ)XMŽÝJZš) æ\QEógÒ…Q@s¦Âükڕض›a ½\äɆº*)§a§c´ðýü>By1À²ÞÎIQÇÃqÔix{MžÍwÝZy3ˆ´o…}yí[ÔU9¶S›kSœK»ÓõI¢‰®-/›ÍýÌÞ\±?~r8>Çð¬ùômnmÚÖdŽâá '’YC¸fû¸, ãÓ¨ë]•Ëp$e,«Ü€@'ÿ>ŽvMœ„ú%õËÆòÙÆÌ4¦µ;¤RD§¡ý:ûÓG‡¯ˆTŽàݤýÝ\¬àäã¨8Æzó]0Ê‚q aæ.¾ÆQOÚ0ö†Fƒa5°–k‹O"âDDý£Ìß´``€1øÕX4Y'Ö5I/ísivñº¨›ƒ°c 䏿ºJ1SÌ÷3»g1q¦êBïYž X[íR@Ñ,Œ¤ñÐ23ÅUMP1[½¬l"Õ~Ô3"bÝ’:Ϧá]\ìjv1ô ôô¿Žh–4–òI¢ À€Œ ˜ÅlQECww%»»…S$•"hðS#l@{œÈBE1å%Ž&l<™Ú=qÖŸ@ɦŽÞ '™‚G—v=$Ñ©2³FÛ‚³!ÇbüÅ ¢ŠŽ)cKDÛ€fRG¨$ùƒ@QL†hî ŽxX€ (¦cYÒÀHêΫ܅ ÿ/ç@¢Š€ÝÀ-ïÌB«1~À¿ÈÑ`¹=WvóÈÑÅ(w\äØb§ÿR? ž†¬ ¦S<èÌæß¼ ¿o¶qŸÒŸ@Q@ywÆte£äãËü–½F¸‰újêVºb™v’L{ä-o†—-TÙÏ‹þû4óÓô¥û2ùh?*èfð´ê †E|v$TqøWR#úõ¯]UsñºâÚ¥~î>YÈïÜ”ÛØZKR¤Ÿ¼Zløw­ ½:çFÓ<Ë‘‘p6©ž~µ‡qr·A hßÀ>Àv¥Ìù‘|ÊÖ"Š2/áÍSD7é´ä§&·´í1µßÉrÒ ËFÎ=zò* ßjowŠÒV¼Œj”Ò•›&Çk¦@E¸r¤’§×±þUÒl—ë[RD-â†5û‹ úóY·ð±*øâ¹¹=Û)êRŠÏ5.0*ûÜÖf„ЮW '>¼ŠÌñ ²Ébn$|“ê+D  e?¥AywP<IF4EÚIƒ9.ãGS')–=½éÚ¤ð¶¥+ÙJ$‰yr)Ÿ|• Ù4mnØ$gÔv­5Ò-ã³I~Ô&اÙâ\qÅw§±‹Sžç§øæKÝÞyŽçƉêEz¦˜Á@ÀžkËþhº–›(¾QlÀÃûÃÔšôû1§µia&k;árzVmÄŤèBŽôÛ†f}ÁŽGj¬Ìç’ÜúZXFR['# ÍAq&ÕÂô¥$ÆzUIß·­6#>ñMƧaèæn›~U°“Ck4ŒA–c\ܺ঩1¸¯ˆ‘à_BxÎY¿J’yÚ  º%;”úúʳœ”UÙp‹“²5gñL1Ý[I"Žç Ÿ <þx«:~»gªïHƒE:Œ´2 dzú~F¹+—TʃX²j cr—°ßÝõÇâ+•WwÔìxhòé¹è·sa³ŽÚÃÚ±uÄQ±'$ÌSŽ¥Õš\Fû’E rÈÿ>ÕÍkzªZÃæNáUFâ`ÿ\V휉Þ1ñ\ZM¬6Ñ2鑈LýÜž§ÛŠò)&y¥yebÎä³1îMmj³ê:³]yáL¹rN"³ïJÏ-/’ß¾ùKãnNç>£Ú’`ÑOp£p­óÍÁ|A•9b~TéõíÞ ¾ÏÌ„;©Æò}O·j|±K#ÜŠÖe”=É-nÛÁ]§Ù}OÒ£–ò¡ #Ã)`¨aÏñc‘øÒæSêz(¢¾tú0¢Š(¢Š(OŽãM“^¸dÄKuçÃaå"œ|ÜÊÇœu­Ñù{RÑW9sj(ÆÆ&¹§\_\ÚùJþX]²2I°€g·cÎAû¨ý=>•=½Í½¶§on|€Î~ÆXî IÎ9ã~î+H“óýÜÒÿLcó*ŽÜ¤òjärãO½3æÊÆêɾÅ4nòÝ))´ðÌsÃ|äÍ>=2y/e–ÖÂ{[oݧV̡Ûƒ€ î3]7d÷Î*k=*Wa*I˜XÝo5å¤×k ’Iíâ™FÉX©^¬¡‚¨*xÆqÎEX4KÉ,¥ûLS‰’Ȭ nK.ùH9–§Ì}~µÕ•ˆÿyöŸ¡ܹÿdÒjÖìÓf"ÚÏý Ò]XÜO1™Z;”¸ ‘§cp#äC{äâ­…Ž¥k© ‹‘91´<Ê.aÉ=FÑŒ~}&pÄvù\Ò‚Lj{•ñÅ%WM‡ìõ(jqÏseHedÞ¯=ºÈÝ0r¹È©#8 žk=ìܬiwFÉZMÖhRÙ!v¶7íÚ0ÿ.ïâéÑí0ôÏò¦öR?\*šÑ •=Î^MökYšU˜Ì–N¶Ãí)!w( Ï,ªPn>üÓ¯ô‰Òä-½´óÚ‡‚FE¸Ã34HrXrA<ŒþuÒBŸQ“ùŠs€€Ï\uühö¯pöKc–ŸMÔ$³¹Kh'·ŠDœC ˜nt`C2À8öè%Ôt›´ybÓÖAe˜]ã¸Èz Î?é‘9#8=y¢åcè ­âiûW¸{%±†–‡Âº«,†i¢™a‰Èw&ýæž~ñÆ{t5…×ÚÝY\]ÂÏ7”‘\11šF rê”Á+ƒÓ5Ñ‘Ã{2Ï­.ÑÏàzý?ÄÒöŒ^ÍŒZ„š¼qÃ4¿lÓm‘g®#m˜bÙ ÷ ÔæÆñf•®l®nдÆŠà'”Æy1Ë eZ<’0F~‰9›gðüƒó#4ªwîgŽjF%Mþ‹aygqf%·”*ØG¯#©TuES Ó9È+Ôdy‹R°»–kœY\Ïpó£Cr—Q#~\n`¯~:`ÜûÿCIÌ9öýqKÚ;ܯf­c:EìPù–…ã¾–{­ò´¤íF˜û‘€ÞQ?:“N²’=nÓM¹´-%ÌÓ«îvhÈà3dáN[¿zÞ?y½õÍòÙ±#?Ž(ö‡³HÄkIµ$yìn.§V†å.¤iÇÜÆ@w¾x¥&‹y’ÂÖ9EܰÝ$Ÿ¾ë¹X äãïmǧ·5ÔÑIUh4ÎVãKÕœF®"iÙ2!žvÀ‡Pñ“’28ö§Ã§ßÆ,œÁpå.K,NÊ©d¦r„‚0Åp[©ÁÀéè§í*hÄÕ4û‹ÝN,†×÷~fÉvðÉ{Œúæ¥K;¸ô{û[rb´¢Ô—û ýÜqÉãÓð­j*yݬW"½Ì-6ÒHµŸ:=>æÎÛìÌŒ&\3îSœnp=ëvŠ)Ió;±Æ)+q@òtÖ2F˜y>ûc< íëÍ~.;-ž•†#2KÓèµ®^¢G>/ø2þºœ˜ƒp?é6äú EhÛþì©Ybáç¢ò:á Žß9f—þz7ç^££~§€æ»^¡§K©G,S2”|a„‹Æ:w®;QÒ®ô[…Y¾hßîH¤}¸èjÔwSŽ’eÄòMk"HÁ”ã‚i¸»_A{H¡–W/©qì•Aÿjëÿá#Šý,ÒFXZkˆíæMÜ®ãÉìã<מڻÈ8âµíÀ7¶ùí¹P2;n§:Q•›6‹=Rñ“ª` (µX¹²V¶¨éQ°Ú.;©8GáNÐr–§ u•#-SU'>µ©ª€'5—à×HÙ´uBWDÍdždfø3TŠ‘#6¡9QéZÇ,ä`ñQÜ(9â³M£MÇi>µñ¢à©2¢ nfÛOŠÎýí£EŒ¤…p¥mü/ø–LÿϨ¤ÕÑSÅ×Û@¸?Òºcð¦`äîÑÕèWDe;Jì¨Ð‚¿xŽ2q\ž‘÷Ð{WLœÀ¤’™é]ñ9X†"ž}ª£±ß‚ÅHÌL¬s÷z{U Ä»ЍDæBz£,ÌŸ®ÐN)ò³sɪ7÷Ýúf\ÂK}7P’æÞöŦ¹ ¹euùJ†ÀÚGêåÞµÎý¸< ¯`”‡ìtòk†´®ÏC GÔÂÔDFqÈõÃ꺠XÙS‘Šô÷EéŒå^]ãXbñÇT‘C0ÉÎOè+8Å7©´Ý£¡ÔxOP2xZÜÊNàƒé½ñúb¸oj’ÝßËÅœ€ÞŸþºèÞF·y „ì‰\¢ 1øšó™%’[†.ų¹ùþñ<šê’ØóÓÀ“Ù°">rÚ?ÏŠŒªùiû¶Éneçæƒµ3ͤ$¹Ì­‡?Þ Í"¸Ã‘²<¯û'â"=Ó~ဠ»îÏ©4åò B R_™>œp;w¦ïb­fÚãs ýã×'Ö¤ʳI •ìxV r£¦ì1Ú˜†ï‡É‘÷–ï•åɧ·nFž$ Êw1nç¶µ"»m1dùq¹*ŸÃž™#¹÷4¶·×)7ž&c,‡íÉa‚psô•+ÏÿÙleptonica-1.70/prog/weasel32.png0000444000175000017500000000646710400443670014620 0ustar dandan‰PNG  IHDRRI!_æ” pHYsb&2 éIDATxœå\+”ã8½»§@@   РÀ€@ƒ PÀ A@ƒ  `Ð@ @ À €@ <çE‘”ô̞ݹgNc;Ž®ÞGï#÷?Ü«ÃßÿÜ@åþ^äkÚj¬þ˹ú£NÓiǛҮªÊ¿EQpæÔÉ^70º—sNAé#_¢3|òéóÚîìúËS—ŸpCÿk޵uôïRj½Š§ÙÒèÝ‹ G2 Ji ø~ÿ#ÿzEçGHøç™kÁ#ècÇçúqÆž¼çœsîéózöišN&ÙãÊn-ŽeËwžùÀ½†:{ í´‰[ðúØ´…3ýþ¸Ÿ>¯³,“#©ÇI±)æóSÃu/Î|+ýÿü«4_]p㘔¤ª*æÆ¶-lš¦…Òv¯ŽÕ˜8§i:¹зb¶.Ì·2Ф¸=¨†{q¤ÖqSc5ó¦É½ºïëãM@£9Mþ™àž`Öš`ig»µY–©±"Îʬo¸dêªÊ®–+k­”2MSÕ@þâòM¡?êwy¶ÓneÛ:hˆ´UMšl[­:{\I)ç¿Æ|’f!þ)aæEžE!Gòaª"QÏN¤b½å›2ÿš_HÛ—X g¦ÚTxÿ†æÔë¹4Ÿ3€bS¤iÊ'+÷`Gr·‚Û'ìc½)È¡`w¶7mx2le~~ ‚«dº¬¢r$[W/ó­”Rªƒ¤‰”2ß”“Oðôy]lŠl‘69WîíaUXkËEüSòôyíyw¹©i—eí“$AC·Ï90ò€°¸BßÕç…B˜ÒUŸL<Ö‚œ¹µV“Sr¶Öfëµïöˆ¢Ë{6?XŸý§4Oòñ§%„lRÜ R?vgy.¤–¦0ù‹3[¸hzœÌ~½kw¾)õ8ižïçÉAØO•¯'Íã¦z31"\[¦¤Õ$ÿª²Q$é/÷âh5šYK ãQ¢o‘ÈV 3ÈDÃÚQÓ·ÂWV £MÌÖ«@ÙЈ-­Æ´VR*uX½úÂ_äê3 ßÙŠ=mšDàš~¢ª*_ué ©ÉM,‹bSèq29a·½L·{u¨Þ ÷´“t&ê$Â8&Ùœø&8êà˜ì2к'qëÕ.­c‚ÑôÕŒw9yNнœ¨ø Ε{Ë7%öVÓ´¯. ع ,€Ù»³vkÖ§ýO6m{?KÄ9[¤±j—RGDbPûp›ŸùÝóèD»ª*³5‹:rÚ§5œdRä9€ÖÀãЪ¶Þ”­?ÚEsß§]»®}€%Ì„ñž†W•¥«;çʽ™ÂÐBÕ =NòMɪ øÝçߟ›œd_¼>Þuf”*¨•{s¥‰PT»Æ@,ÍÖÅßâ–õIÑ·"Li(iñÑ/J#¸Wç¶.Å cÞÚ¦<ý3§sX‚}ªÎ3&ÃRÀÖÕiô®”R’éNÆ ŽCW±Šå³Í²Li}yÑ®ªŠV2òØuqg{ñm]gâì“ ¥¤œ™2ªJ¨ÈtiºÈ­µùªkéÀìNά…ÍzçÛ¡mS8Y–%;0Ÿ3ö™ f{£ƒìq•e™”2[¤³; €³HæL'ý ´ ÈXÖ›òZiGQ„ªÎhÐQ$[å|Fà,çük^l øE"³¤ÝV#1˜´''‰Š|SN>õîm„¶EѦ´NºzUeMih•"вzùп$ùºÈWœê¡W¾í‡%ÉTεž Á†ÀÙ€ùlŽá? 䨂Í%žž£­z߈×Iˆ0q&­fu£®PJeYFÅ6ôÍÀ4UîÕÕU‘áÑÕ:n„åTå»>Ǹ*Fv<Âeߢ(ZÎvgåPÆI|÷‹¢ó<‘çìqEB^,Ñ›¹šH?ÔŽÍZ’vG´Ø6¥u‘çvg‹¢X-WtIŽ${V*"¼²Åà/5aòÛ}αP7´+y’$ZkšŠ[hÈ?8„ŒGBÅ0…¡…ô/³êkÐ.m¿r*>q+ÒߦÎ9ýQSÀÿJ¾))樓BÎÕ¼wðt¨ÌÜë+5mö$m³5ó9­Or$)êh¥ œ*QÝÃl]<ê9Uî­0HÞìeÙxüý¬õX·Ù]Ñw(Í$cŽ“XÔ¦4ÆSÎ3=Nô­ rç©úî)Tîm½)ý¬Kÿ»œýkÒë!K>¼pÝ®ªêîç»åï+>ã^‡œ\ýàJ»|¶ù¦Ì¬!¥ŒGBߊ.3…Y>Ú—iš’ãÈw_žûN__´(y3M'm§€‡_‘ŠW*& '¡ÑÈg{ư}ÂÄVJ¹X.±/<½á’:Q/„‰§ßîòÛw¢HÚmKw†>’|XiƒŸñ§Æ—0³Í²÷îìÖ½-|€ É^ÚÎá¸KÅÑ«“Ø4oª¨øúÌȲ,Nâ¢(°ä }Ý!¡—Ž´Ø¶OÞ½†U¤|SvÉ1È3SÄJg(VOã Ÿ-cÒÖÜú±8jô6{]Aµ”âþõ æD•ŠÊÌV•Ê¢(”RTë­ùòX+ÌÖÉ>:Ò"m†ÝÙ œ'19¡|Sr„wæF`·I)åH*¥ü®E–eÉ›âÉYÚz(&SÕ}ô–_žÉ_\“»$[~â͈"i'qþ5gEÈwNJÁTý**¤”º¶ ¼oºJíazŽ”’wQ^˜x2HÔh«E‘L?Õµ>®=ñG>ÜMi|6ûõ.&Õ®¤`ŽC.à šáiš*­µÖY¶¢ÅµwÛGÓ“ùðkLMÙú—èL³G7¹=S˜r ÙARA2¹Ÿ’åž ï Ú.,ûhÖÕ¸w†zG‘¤NPaнHHë<µØ"(¥×ú¾~=ÓüÚfkºTÂσ™Sá@Q€JÞ,öµ^¼Ï @°¡Cõqÿ”ÜýN[UUeYRƒÍû’"x_ë~ÿ‰ßÜ;ßñòëj¬{’;¤ëëÖÔRꡈÆ÷Jë$Išžÿx6ßJ.H«±ò7†÷HE¸Â΢Jˆ½*ä|fµ\I)ŸË@$„ ÷Ö=I‘ïö›8TŒjP/T«¤nT€<ϹhGËd¶^Ó¼°Këˆö¬ÙÄ=Õ÷óÁÒöONgS1žÞืî˜Þ@Žê$äô3k5¦ˆ¦)ýmÌ íõꎃ´ý°,hâvÙ ½=û2gÍWz(`Ýê{}ó“È7ÅóϧŒvý¸ ¦Æj:›Þý¢Zµ@œÄ—ïB¤o2É@±»œ¹”2ÿš§ét`ÂøäÞ:ù ž>¯‰6Q-òœ½·«S®ûJhûËà‘d™wtïþþ3*HÝ%‰Ý9=OR[† ösT•C “l=—#yJ¶×ómï ØÈÝñY͈h?%öf°c£D%û²¾˜g_Û®½áî®n²õ¶¿hѱ)M±)ËEö¥X,ùÎMoð$ëšÞÀ܈l½.y.ËÅrylOmÖ:…PÚ½à;mÔXÉÉSPSEëû•\YkóË÷†µ|\5Ù_ƒC[ÿ²NhôññÙ¦Pã#ß«‡bõäÌÕXýIœûmÙé+p&$!tLÆÆ¯3”ei­€')°s¼éÀ˜Ïfüß·í ÆïÂK‚c¾§(¨7Vç§ëÇ­Û ’ð^ù/Cs‰î»nwÝ…H”Æfìç[õȬ¥ø¬†±Ä¨•üf·Öß¾€•xú`·l`â$fìEòç…Âc­ïé Ï<ç;ÇÒ~’BÞ\[ \w5ˆÛýëçh3¥‡ùܯ“ÑUê00þ8hÝÒãCæD/rð¢ïœËîClŒª²¶Ç^šVœ¤Í L¢£–}:Ï(À‰Z/còép•òm”^ þؿ˵Çr±ÀþÆ…©H–3‰.[¤ÑÀVopx=oºRcõ°Xp«@IÊ–´®užçÖZÖp=ùÎ]&+Ê.‹M‘­×»¾< ÓAœÄRÊtž¥iZíJT÷¥¢OúiâÀ9=Ìç~í–^p»ß—Yï­ËoBY‡Ùšì÷ï)¹>3iîf8vWÔȲl9QFÊÙºÈI}lé|6óß¶Ö>xµn»µñ÷ÚªëÈtçšãöwN`¿¹; §ÒìF;¨ŠrŒIíû‡}­Ûl·Š¢xX,è˜Ê G~;ß95VT'¡3AŇ+¥•„¯fz„ÿŸ¤@¥ÒºcºZÓ.aûß½UÙ;8íÕFºçÿÍ‚‹ØÑÛµü$Áû›Í6hð"ok«´õç»?¡Ë“OwÁ بcIEND®B`‚leptonica-1.70/prog/convertfilestops.c0000644000175000017500000000644612242266730016247 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convertfilestops.c * * Converts all files in the given directory with matching substring * to a level 3 compressed PostScript file, at the specified resolution. * To convert all files in the directory, use 'allfiles' for the substring. * * See below for syntax and usage. * * To generate a ps that scales the images to fit a standard 8.5 x 11 * page, use res = 0. * * Otherwise, this will convert based on a specified input resolution. * Decreasing the input resolution will cause the image to be rendered * larger, and v.v. For example, if the page was originally scanned * at 400 ppi and you use 300 ppi for the resolution, the page will * be rendered with larger pixels (i.e., be magnified) and you will * lose a quarter of the page on the right side and a quarter * at the bottom. */ #include #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *substr, *fileout; l_int32 res; if (argc != 5) { fprintf(stderr, " Syntax: convertfilestops dirin substr res fileout\n" " where\n" " dirin: input directory for image files\n" " substr: Use 'allfiles' to convert all files\n" " in the directory.\n" " res: Input resolution of each image;\n" " assumed to all be the same\n" " fileout: Output ps file.\n"); return 1; } dirin = argv[1]; substr = argv[2]; res = atoi(argv[3]); fileout = argv[4]; if (!strcmp(substr, "allfiles")) substr = NULL; if (res != 0) return convertFilesToPS(dirin, substr, res, fileout); else return convertFilesFittedToPS(dirin, substr, 0.0, 0.0, fileout); } leptonica-1.70/prog/hmttemplate2.txt0000640000175000017500000000711611707074233015630 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast hit-miss transform with auto-generated sels * * Dispatcher: --- * l_int32 fhmtgen_low_*() * * Static Low-level: --- * void fhmt_*_*() */ #include "allheaders.h" --- This file is: hmttemplate2.txt --- --- insert static protos here /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /*! --- * fhmtgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fhmt* routines } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fhmt_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ---------------------- pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.70/prog/trctest.c0000644000175000017500000000444612242265550014323 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * trctest.c * * Example: trctest wet-day.jpg 3.1 50 160 /tmp/junk.png */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixd; l_int32 minval, maxval; l_float32 gamma; char *filein, *fileout; static char mainName[] = "trctest"; if (argc != 6) return ERROR_INT(" Syntax: trctest filein gamma minval maxval fileout", mainName, 1); filein = argv[1]; gamma = atof(argv[2]); minval = atoi(argv[3]); maxval = atoi(argv[4]); fileout = argv[5]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixd = pixGammaTRC(NULL, pixs, gamma, minval, maxval); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/colorcontent_reg.c0000664000175000017500000000711012266271665016204 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorcontent_reg.c * * This tests various color content functions, including a simple * color quantization method. */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { l_uint32 *colors; l_int32 ncolors; PIX *pix1, *pix2, *pix3; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Find the most populated colors */ pix1 = pixRead("fish24.jpg"); pixGetMostPopulatedColors(pix1, 2, 3, 10, &colors, NULL); pix2 = pixDisplayColorArray(colors, 10, 190, 5, 1); pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 0 */ lept_free(colors); pixDestroy(&pix2); /* Do a simple color quantization with sigbits = 2 */ pix2 = pixSimpleColorQuantize(pix1, 2, 3, 10); pixDisplayWithTitle(pix2, 0, 400, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ pix3 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); regTestComparePix(rp, pix2, pix3); /* 2 */ pixNumColors(pix3, 1, &ncolors); regTestCompareValues(rp, ncolors, 10, 0.0); /* 3 */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Do a simple color quantization with sigbits = 3 */ pix1 = pixRead("wyom.jpg"); pixNumColors(pix1, 1, &ncolors); /* >255, so should give 0 */ regTestCompareValues(rp, ncolors, 0, 0.0); /* 4 */ pix2 = pixSimpleColorQuantize(pix1, 3, 3, 20); pixDisplayWithTitle(pix2, 1000, 0, NULL, rp->display); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 5 */ ncolors = pixcmapGetCount(pixGetColormap(pix2)); regTestCompareValues(rp, ncolors, 20, 0.0); /* 6 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Find the number of perceptually significant gray intensities */ pix1 = pixRead("marge.jpg"); pix2 = pixConvertTo8(pix1, 0); pixNumSignificantGrayColors(pix2, 20, 236, 0.0001, 1, &ncolors); regTestCompareValues(rp, ncolors, 219, 0.0); /* 7 */ pixDestroy(&pix1); pixDestroy(&pix2); return regTestCleanup(rp); } leptonica-1.70/prog/convertformat.c0000644000175000017500000001226412244775345015533 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convertformat.c * * Converts an image file from one format to another. * * Syntax: convertformat filein fileout [format] * * where format is one of these: * * BMP * JPEG (only applicable for 8 bpp or rgb; transcode instead to png) * PNG * TIFF * TIFF_G4 (only applicable for 1 bpp; transcode instead to png) * PNM * GIF * WEBP * * The output format can be chosen either explicitly with the @format * arg, or implicitly using the extension of @fileout: * * BMP .bmp * JPEG .jpg * PNG .png * TIFF .tif * TIFF_G4 .tif * PNM .pnm * GIF .gif * WEBP .webp */ #include #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs; char *filein, *fileout, *base, *ext; const char *formatstr; l_int32 format; l_int32 d; static char mainName[] = "convertformat"; if (argc != 3 && argc != 4) { fprintf(stderr, "Syntax: convertformat filein fileout [format]\n" "If you don't specify a format, the output file\n" "needs one of these seven extensions:\n" " bmp, jpg, png, tif, pnm, gif, webp\n"); return 1; } filein = argv[1]; fileout = argv[2]; if (argc == 3) { splitPathAtExtension(fileout, NULL, &ext); if (!strcmp(ext, ".bmp")) format = IFF_BMP; else if (!strcmp(ext, ".jpg")) format = IFF_JFIF_JPEG; else if (!strcmp(ext, ".png")) format = IFF_PNG; else if (!strcmp(ext, ".tif")) /* requesting g4-tiff binary comp */ format = IFF_TIFF_G4; else if (!strcmp(ext, ".pnm")) format = IFF_PNM; else if (!strcmp(ext, ".gif")) format = IFF_GIF; else if (!strcmp(ext, ".webp")) format = IFF_WEBP; else { return ERROR_INT( "Valid extensions: bmp, jpg, png, tif, pnm, gif, webp", mainName, 1); } lept_free(ext); } else { formatstr = argv[3]; if (!strcmp(formatstr, "BMP")) format = IFF_BMP; else if (!strcmp(formatstr, "JPEG")) format = IFF_JFIF_JPEG; else if (!strcmp(formatstr, "PNG")) format = IFF_PNG; else if (!strcmp(formatstr, "TIFF")) format = IFF_TIFF_G4; else if (!strcmp(formatstr, "PNM")) format = IFF_PNM; else if (!strcmp(formatstr, "GIF")) format = IFF_GIF; else if (!strcmp(formatstr, "WEBP")) format = IFF_WEBP; else { return ERROR_INT( "Valid formats: BMP, JPEG, PNG, TIFF, PNM, GIF, WEBP", mainName, 1); } } if ((pixs = pixRead(filein)) == NULL) { L_ERROR("read fail for %s\n", mainName, filein); return 1; } d = pixGetDepth(pixs); if (d != 1 && format == IFF_TIFF_G4) { L_WARNING("can't convert to tiff_g4; converting to png\n", mainName); format = IFF_PNG; } if (d < 8 && format == IFF_JFIF_JPEG) { L_WARNING("can't convert to jpeg; converting to png\n", mainName); splitPathAtExtension(fileout, &base, &ext); fileout = stringJoin(base, ".png"); format = IFF_PNG; } if (d < 8 && format == IFF_WEBP) { L_WARNING("can't convert to webp; converting to png\n", mainName); splitPathAtExtension(fileout, &base, &ext); fileout = stringJoin(base, ".png"); format = IFF_PNG; } pixWrite(fileout, pixs, format); return 0; } leptonica-1.70/prog/sudokutest.c0000644000175000017500000000626312242265565015052 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sudokutest.c * * Tests sudoku solver and generator. */ #include "allheaders.h" static const char *startsol = "3 8 7 2 6 4 1 9 5 " "2 6 5 8 9 1 4 3 7 " "1 4 9 5 3 7 6 8 2 " "5 2 3 7 1 6 8 4 9 " "7 1 6 9 4 8 2 5 3 " "8 9 4 3 5 2 7 1 6 " "9 7 2 1 8 5 3 6 4 " "4 3 1 6 7 9 5 2 8 " "6 5 8 4 2 3 9 7 1"; int main(int argc, char **argv) { l_int32 unique; l_int32 *array; L_SUDOKU *sud; static char mainName[] = "sudokutest"; if (argc != 1 && argc != 2) return ERROR_INT(" Syntax: sudokutest [filein]", mainName, 1); if (argc == 1) { /* Generate a new sudoku by element elimination */ array = sudokuReadString(startsol); sud = sudokuGenerate(array, 3693, 28, 7); sudokuDestroy(&sud); lept_free(array); return 0; } /* Solve the input sudoku */ if ((array = sudokuReadFile(argv[1])) == NULL) return ERROR_INT("invalid input", mainName, 1); if ((sud = sudokuCreate(array)) == NULL) return ERROR_INT("sud not made", mainName, 1); sudokuOutput(sud, L_SUDOKU_INIT); startTimer(); sudokuSolve(sud); fprintf(stderr, "Time: %7.3f sec\n", stopTimer()); sudokuOutput(sud, L_SUDOKU_STATE); sudokuDestroy(&sud); /* Test for uniqueness */ sudokuTestUniqueness(array, &unique); if (unique) fprintf(stderr, "Sudoku is unique\n"); else fprintf(stderr, "Sudoku is NOT unique\n"); lept_free(array); return 0; } leptonica-1.70/prog/colormorphtest.c0000640000175000017500000000747312274450323015715 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colormorphtest.c */ #include "allheaders.h" static void PixCompare(PIX *pix, PIX *pix2, const char *msg1, const char *msg2); /* MSVC can't handle arrays dimensioned by static const integers */ #define L_BUF_SIZE 256 int main(int argc, char **argv) { char *filein; char buf[L_BUF_SIZE]; l_int32 size; PIX *pixs, *pixt1, *pixt2; static char mainName[] = "colormorphtest"; if (argc != 3) return ERROR_INT(" Syntax: colormorphtest filein size", mainName, 1); filein = argv[1]; size = atoi(argv[2]); if (size % 2 == 0) size++; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not read", mainName, 1); pixt1 = pixColorMorph(pixs, L_MORPH_DILATE, size, size); sprintf(buf, "d%d.%d", size, size); pixt2 = pixColorMorphSequence(pixs, buf, 0, 0); PixCompare(pixt1, pixt2, "Correct for dilation", "Error on dilation"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixColorMorph(pixs, L_MORPH_ERODE, size, size); sprintf(buf, "e%d.%d", size, size); pixt2 = pixColorMorphSequence(pixs, buf, 0, 0); PixCompare(pixt1, pixt2, "Correct for erosion", "Error on erosion"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixColorMorph(pixs, L_MORPH_OPEN, size, size); sprintf(buf, "o%d.%d", size, size); pixt2 = pixColorMorphSequence(pixs, buf, 0, 0); PixCompare(pixt1, pixt2, "Correct for opening", "Error on opening"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixColorMorph(pixs, L_MORPH_CLOSE, size, size); sprintf(buf, "c%d.%d", size, size); pixt2 = pixColorMorphSequence(pixs, buf, 0, 0); PixCompare(pixt1, pixt2, "Correct for closing", "Error on closing"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pixs); return 0; } /* Simple comparison function */ static void PixCompare(PIX *pix1, PIX *pix2, const char *msg1, const char *msg2) { l_int32 same; pixEqual(pix1, pix2, &same); if (same) { fprintf(stderr, "%s\n", msg1); pixDisplayWrite(pix1, 1); } else { fprintf(stderr, "%s\n", msg2); pixDisplayWrite(pix1, 1); pixDisplayWrite(pix2, 1); } return; } leptonica-1.70/prog/shear2_reg.c0000644000175000017500000001660612244775303014661 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * shear2_reg.c * * Regression test for quadratic shear, both sampled and interpolated. */ #include "allheaders.h" void PixSave(PIX **ppixs, PIXA *pixa, l_int32 newrow, L_BMF *bmf, const char *textstr); l_int32 main(int argc, char **argv) { L_BMF *bmf; PIX *pixs1, *pixs2, *pixg, *pixt, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; bmf = bmfCreate("./fonts", 8); pixs1 = pixCreate(301, 301, 32); pixs2 = pixCreate(601, 601, 32); pixSetAll(pixs1); pixSetAll(pixs2); pixRenderLineArb(pixs1, 0, 20, 300, 20, 5, 0, 0, 255); pixRenderLineArb(pixs1, 0, 70, 300, 70, 5, 0, 255, 0); pixRenderLineArb(pixs1, 0, 120, 300, 120, 5, 0, 255, 255); pixRenderLineArb(pixs1, 0, 170, 300, 170, 5, 255, 0, 0); pixRenderLineArb(pixs1, 0, 220, 300, 220, 5, 255, 0, 255); pixRenderLineArb(pixs1, 0, 270, 300, 270, 5, 255, 255, 0); pixRenderLineArb(pixs2, 0, 20, 300, 20, 5, 0, 0, 255); pixRenderLineArb(pixs2, 0, 70, 300, 70, 5, 0, 255, 0); pixRenderLineArb(pixs2, 0, 120, 300, 120, 5, 0, 255, 255); pixRenderLineArb(pixs2, 0, 170, 300, 170, 5, 255, 0, 0); pixRenderLineArb(pixs2, 0, 220, 300, 220, 5, 255, 0, 255); pixRenderLineArb(pixs2, 0, 270, 300, 270, 5, 255, 255, 0); /* Color, small pix */ pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_LEFT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_RIGHT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_LEFT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixs1, L_WARP_TO_RIGHT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 50, 50, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Grayscale, small pix */ pixg = pixConvertTo8(pixs1, 0); pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 250, 50, NULL, rp->display); pixDestroy(&pixg); pixDestroy(&pixd); pixaDestroy(&pixa); /* Color, larger pix */ pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_LEFT, 120, -40, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_RIGHT, 120, -40, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_LEFT, 120, -40, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixs2, L_WARP_TO_RIGHT, 120, -40, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 550, 50, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Grayscale, larger pix */ pixg = pixConvertTo8(pixs2, 0); pixa = pixaCreate(0); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "sampled-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_SAMPLED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "sampled-right"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_LEFT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 1, bmf, "interpolated-left"); pixt = pixQuadraticVShear(pixg, L_WARP_TO_RIGHT, 60, -20, L_INTERPOLATED, L_BRING_IN_WHITE); PixSave(&pixt, pixa, 0, bmf, "interpolated-right"); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 850, 50, NULL, rp->display); pixDestroy(&pixg); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs1); pixDestroy(&pixs2); bmfDestroy(&bmf); return regTestCleanup(rp); } void PixSave(PIX **ppixs, PIXA *pixa, l_int32 newrow, L_BMF *bmf, const char *textstr) { PROCNAME("PixSave"); if (!ppixs || !(*ppixs)) { L_ERROR("pixs not defined\n", procName); return; } /* Scaling is done after adding border pixels. Therefore, to * avoid rescaling, add twice the border pixels to the target width */ pixSaveTiledWithText(*ppixs, pixa, pixGetWidth(*ppixs) + 6, newrow, 20, 3, bmf, textstr, 0xff000000, L_ADD_BELOW); pixDestroy(ppixs); } leptonica-1.70/prog/tickets.tif0000644000175000017500000041570411741636501014645 0ustar dandanII*& e †rÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@|`Àøÿÿÿù €0>?ÿÿÿÿÿÿÿäAñÿÿÿÿÿÿÿÿÿÿÿÿÿü€øÿü€2 xÿ'ÿß²¯¡×È 9ÁÈ ÑÂv¤Qÿ d EJëBFþýd €Ê8AÿÞDxd|5!³_õÂD à™:h 5\46µ 4æðm’¹€0ÈmH{µw!`HƒôpÖÇw¡Üp¤‘·ÿù ƒ\}!Á/4ÕIûùÄ‹#>E".Û.ª@Àí28 xE§­Æ™q A ‹ 0þCCƪA/ò&Ëztfm¨iÿá+÷¿Ý§ô"%XxPíºßë×ÁA;F±¿Ç_ÿ”z²o¤mƒE¾·WÑÁ?“}H”w¦Õÿýº׬¸\3‘ÎBXL7ÿ]/m龜N# Dò#ÿþãßéXr ZñÖÿý÷ß r Ǥ¬*RÁ®&ÛÛ×¾èÃø¤°Èl ňÃGŸi]û÷ꜜ1nÚÓ ¥m¿ÿ¤“!bêÚL;olDt•¥ È d@ƒi2w²}õÜ)ÁÍ̃R ââ#Í&<2ÐÕ«„í—Koˆe;M6ƒ±é_±ØOÆ.÷úþØ»ä6CÃ#†X~°õpoŽÊÔã—Ìuª«NÙ#â!¢0GÀ¿¤ ¼†Xk‚#¬EÓûzÅä5œ÷× ‡²]$dk!ª?¯ìWXE@5}Úûi|29u‚ âÿmO ÜRú„Òîëè1êˆ(µWTû!¨ŸçÁÍ„Lm'è4¸Lƒø+>¯úkô‡&ä>­6éÞ÷Pza/Ðóh6â¸m_ßôF=hH¯×ýmƒkýpŸÿþÞôÓ×Òoj6ÛûÿÒa‹ó ßÚyP+þ °ƒ=ÚžÛü}pߨ‚¿þ@” Cî»ׄƒÃÓô×ößµ3‘×¿ßøoÙ ×)È.Mû×eÓü„öÿñmß!D2­¿ ºëXm¨Ñ Cúþö®Ãçé %:—‘¶lÒ ?Øû¯#ÿ¬48¨(ƒAl4ÇÈ‚C¿a´ƒØZ_Û MnDZxä3c}þ:NùAa )°QÈqÈ{Oü{¸$ï‘ ‰Y28!#ÏȆðap¿}kÁd0Ë¥<‹e9Áë avŸþöW¦“ Ë‚ µ¿×ÿÖ:ýÁhTä C4xXL‡ü/J¹t…`îs›2Çü ;¯ðò(áï|ØK±xèØ."Ã(u3Š ò(ä5Ô‡œ.øV{tyUtA QÞC \ŠþDCÇûpkõïMaúA2 |ƒ$*dod3 f °QfC2Öè=ýxúÕ¼—BtúÚ‘G_Bf¢â‘Êw´Èmþímî@ÀOUõ M Ø-¸d68~½Z}"$1¢ rCõµÞB9 ðaÍ¿á!²ÈŠ‚aÓ* ôÿC£Ð&Êÿr ñ‡ù ñäßí¯}ôUˆF*A0Å¡½ow „†Ö}á>Mîôî l‡~²û½»òRIPa§ ƒw!ôÄnð¤)pÌ{_ûý¦ƒ¿âìsE¾¯´•÷_üŒrÁe@½¦AC¨"?Á~ÿülH7|=÷ÝX£@!(þªƒ#H ‚Èhr²UþÒÿû_!–ëo‡mÿÂA6m&GÒ¿êAÓæÂ‘þqÆ4ׯÿ÷Òw»¶ÝÞ{³§ÿÛH(T>/×uG¾“ˆžÛ{‹ÿÿ‘ðï¾ïÿý)(!¯qa.C½+CX$Xm]Eÿá}?~÷Û~aß•Ú[TÓ!™¬ˆ«ã I]ƒ +dAßÿÜVú;ðý¾wê›ýþ¾³@`¾ÐÈls½ëv:AH(zl) ¡Ý/ßîí±ûw»oký^•¶ì!vC¶¶g!ßP¢Ëƒ]!žpÖþþýÿkÞþÞ?¿érõݲ ÷ýä#ÏqÖ$W9ã†Aãl;monœwîØ>ÿÐuM×!D6÷ªõï$>L˜èwezbÃon¡¶îâ.Ûû ±¸pßÿô’¤m ¿ß!Çk= d ˆâg„èr&wwkíZÛ»ÿ_u¶"@xeýÿ»Ow본/ Z¦ ÛNþ÷ÐÐ7·ëúº÷ò+ëÝxRC®/¤œYn]ì‚£ˆ‹ÙÞû½»â•Úû×׬a:zëñ¯¨WCÈ5Íf <Av7‡ví«ÈÕš ÿÿ‚½· q¿û¿H'JApsÉ¡C`â!¡ám«å È`º·þÕ{plXd`»m´ÿÚÈiø{xMêJƒíý¢ ÀcÞßÚÊ{þñ$Bm[ÿìˆ9tº˜àí:ØD€sx*öíb¡ ÒþôÂÂA®òD6™VF8é·Z·°õÿ­¶Åø³ÔFû}ÝÈØtBgëñ| /Û »¥ ㆃA´­ÿÿI=plƒ¬D†0Ê~›ê~¾º!k}ÕP± »ý;[tÿ!¦9N]Û¿*€Ä%ò$²k€zö| Ñ ƒˆ³å÷ÁïýàÞ¾ˆ{¶¬òI¿_]&ëìEz>eòàPïòc÷é.î#S|&Ýë’Õö«ÒCùœ§$:Ú°NDÓ†‡ÙC°{ÿúÞÄBM\†ZG¶ÖEÃ/Õ;u º†øŠÅµÅŽöÄDt»wuõ)È7}ôëÞöת›A» $Ï«üŠ%øþÂ[Á ݵ,Ž uþÖ×$=6PïdM{p½°ƒI§­}ºúd5«»Ât+¿Úÿätv)§p«!y|¸-þm^®«ÃW¿•­ßímqL6½«â:¯@ˆ8²Ûow Ó·¾j_Þ‡ý _ßìèwê  ”m}„Ð{Ùã—SJÿ’røþ¹!é†í¥Jˆi5Ô"Rgjý>÷!ÀoððÁ5këÛÿ@Ësä9‡ÚA³Í—,úºÝ^í†Á°Â^Ÿ¥îÕÚµ{Aê±Äz@Ä5d.»ºú{nÛb›¿¾¸6Ô_¾…ÕéÞ¯oúì1Øi»^ÿ®ßµù ¥ô‰<7³ÀA­§Ûn¾½oûp™õoðBÇèfðÁ¶"»{^á¹~×îÞ×]™‰ÝítÈ(®oÿé««Ú¿õúí»[1ÿ‡þIò) :÷þÕÄïw{ûHWëa¿ÖéØL}ü‡ lþš¶Òy»{0‰p9«ì(j¸‰"ÿzø"ckí]ÜÇW‹Oä2þïkÿÚ[èzamÛA÷Z!¯º^ÁZãþÚ[¶Û+?Nâ@ðôû~Þ«¿ñÒ\Š"xí½ïº¼2?ú_‚_õm‚¾&±{mÓÿ%1°<HàŽûÇô¿ð¯¯u¶ó\ŸùÁ“»ÿ`¿% á9ôé>é[¸M#©úÂ{àñ…ù ‡«ä«vôÿ ÑV<§MáÁ¶Õr_8†¹Àõ¿z¿¦»ëâ«ä(•ƒ ‡Nÿƒ0ƒ0na>¿wtºd€Ë÷ä2ú¯¯°mÂi÷ÆÐõü<úßdÇ% ·ºÿ|+ðØvÞRà¨á&ûa»t±Öïÿþýíûü ‚\÷Û×ßM.öÛÞÝú­íÂqêˆ WwîïöÃáãýÙ Äñ¿¶íá¢cû.†¬?”^÷ÿƒ¯ü=ßàÃaÂt8! {r*BüwïgMÿþàîî÷Iì6úWL'~?¾¯ßWþì÷gOÿí·ù ß0ä ÁÂëÚwv±™ßÿí÷÷äšÿöÝxŠß ÃÛ¿3Go»~ÿÛ}üÎö–¿\6ÇUÕö,;ºnÊ’1 MôR-ä(¨w þß;µ°ñï½a»i"†S„GW”óO½¿©­vý}!íÝ·uØ}¿ðØm±”€xj˜Ù¬ï÷öÛÚo"ðHGd²7ýŸ¾ÃñvßõÃ`ܧÁXh_«ß»ïÛÿVï¶ÿ7ßý»l2û“ŽH¿õÿ‡Ùš º·~ûöÛ†}A×Þ®ÿ߈„wëo÷»Ý’Žèm¨}ö˜nÐëJ•·ÝÝ´äa­ßÕoúŠMÿo• ÁÃc¦qoÜ=~GÉ@sÐ_ýU÷Þñ h%­þ6Û!…õ‹Æû¦gЈ„Päù„+ÿK{|äk ÷aƒdtŸ}.AƒÞV™$ïÿÞEô¿!HÀFAµ íÝþ‰ä…wwù*ŒHnÿ{†Ãk—«²Ïw#a›dõ_ý ï·x[QA ïÿݾଠG þé;tÿ}5òP»éÄeÑÒúþ»û‚Bµ tÝX`Û xÿµøûúHÂúKÛw ÌÑ,0’ЧÛ]°ÌÀösý®îÛÝÈ…[Ýþû{i¼!Âÿk¶ñÿðiWûÊOuÿ´¾ÛubFÃ+ow§†NAØW¿°öêÛ¹´M@Éú«­ûnÓ…ÿÃ\oÿ÷øW¶ ÒõÿûÝÜ"àÕßã¶Á¿ÿýÒÆÃ Ÿ~×#qˆø'ý·p°…~úØaƒ»õëßa‘m¶/ô#ëöí¬Œ ¿ðÊrnj:ƒ ¿ë¶ˆ¯Sk¤MÃöØ®ÿ¿ï¸KüDCiC'aÝ÷î›_t7ok÷Ù êAí½Ü%ÚÿmÿÓXÜ4õÚ¿}êPNݲ a†p /·¾ _ÿñûŠ=Úíñï¸v“ww«nÓÝûKh0‰™!Ûn×µ]ݰÃjö½äk`ÉpSý.ÐþÛÚo_¥í²âÃb›ÿI;ÿý„º_îí?zö0ÛW¿j ÿïcÈ û{mêûíÓ{d ï ~ö¤%’à«OèýcýÜ5þU"ãd¡o»»Ýþ«aÃ]ôPî×[aàÂoñÄ~ôÞ«ßpaÿÚð…è[mA7mvÅîí¯j¬È“÷ñà¬>Ê ÷ý=»°›[Xtƒ_÷ 6qÜŒwBGQLõ}W ÛM¿ë¢ 7®ÿ!ïê-ÆÑ9†¿Ú÷¸a³åÞ÷årÂù¨=ätökÛƒ!ªG«Ú÷¸a!BÿÒÌÌFÝÜWƒô‰ PfývÞK$>þ×L¹ÀÇãö 7L2Aµkݴ„X_#ë¡gài§wãèø;?Ø[ý·ƒX‡¾âÁ „F×¾Ûºb"£¯i{mºþÔû/‘ô‡ß¶Ü¸lT×µ#[ÛxdÁƺmˆÎÇþôÛ _ýööáȸ[·¸É5Á›˜i·úE@^ÛÉÇ" îîÉ0:Âßè[w·ö¡{zL{øeÒ s ¨ýøOrTëû[áÛGôýx²Á“ÿÉp9‚ÓÒïõîÝ»!­ñ+6¯÷nkáýö?mÂþÚhá^œí_Ét‡L û^ß»„È%ÿ N¹iÿ †ðE85õí*í¶!„û»*€x5Ó°Íe½ðƒmи?ÞÁ,¡ú¿"Àx+¤0ßý ·Nîþ×16Þù „@ðhrãȃn›Ou· §K·j„vÃÍRe×úa<3Öÿä¸[· aÿµ>-·Úöhƒs0ÑÒHNÝ4 Û}={†™w¸ w¦²rƒqÂfwÔ0þø(6éÃïäá»§aþ „w¨2jÝîx€Ínýxdvyݺi÷šóÑ0 ;ä… r„û^ %í½4;ø´;m£Á;ôŠði§ô푵â¨;ÚëdP2r8C*ØÕ÷Ó¿#Ì7¾Íw 6ë!–Wìå¶;ù « xl: íàÅ’q[ðC‡a¾¾#†ÃuC¸,¸ïìÌ*½öx a¼<1÷$ŒDp6†_nÈe:°A<'ò0bÌ?ÛÓ ÕÙ˜d‘eÈ?n©ˆ4Öû s/ö;a±X! x9‡‹O hxßá›Á«Ê}Ýó÷…·tÈñx¼N‚è¾G ]¶ÿIí&Å®¦ %‚r’ˆˆ< Çšƒ|EÕí†ÚÔá¨?½Žð[ܧ €g#‚Ãf={±Ò xlëû o xl †@kfDåéxmµ)">` ×ÿN; ±Th™'z[v23#áµý¿~· 2 µ‹k¥ƒm°„àœw7}+wûàÛ‚þàÜÆ_.†Áý?¿AlŸl0Èd‡º(]†ØˆÿJAéuh†H[‘Ô» ²V9Þþï ûmÈO¿Ù²ì¸d‚ùôlbÓ"ðò·åÿô· †AŽl1¿(×¾"C ðãžhD>tNëm²YÊÖ5½éýŽÃ°B=ï¡VHRCÚÉ ð©¡:Jl>ü6à xhâ ÷ßïðöÿöµÃK!c¡òSa²Ûkƒlûô“wÃØd'<5Ãßú ~: x49!Èh;’¸U¿ìd‚Ö½òœ  blàb»ÿµÞ™@ Æ':>r ß÷û˜@ô5ÒßÞ ¶¿þqë~÷þ¦ÿØm­ëûÞž@ñGm²‚ê?ø¿ø#ŽAw ½•°¿¤Ûÿ¶–ÈèÿôŸÛŃ Ä6í{Ð ÖÃÌÃA°ÿÿÿÿÃw¿ú®û`ÿþäw[t@š ¯~A§ ’½¿ÿûÿa¥±wÿI­Ü7wïè0—‘ 4K îš~ÕP{ÿÿßÿ\;ûû $)²qŸÏýè}4LsÁ`4=ÝM‰ÿ[ûÿÿ¿Þ°Ã´ÿ᥿ƒmÛïú[B¹c‚´O×n¨íÿÛÿÿý'ðÁ÷÷äcûvžÿ¥¿’?nM¥þÿ÷^¿ö– ®µHoØo_ývq·Þ¶ªÿÿÿé_ÿpjÇ·^þï]`Ê¿ýõ› àŠ·ÿÿïÕÿùH|C#ÁƼ?ÿí/oæÁ¿ßíëöü¨nòOÃDãàÁB(~ï¤%>ýê×ö='þ÷o½ßûÿñ)êE¾šk´#þ;þF«Ýÿÿ~ýußßÿŸm¿Ó]z$Õÿ^¯ûÿÿcæ¿ÿÿd|;ßü3¬ª‡¯ù/ô§ÿõýô›××ïÆúúì4">ÿr @ wÛ]“ŸÿÿþõþÛìŸþü2ú xh hñuü-ãÿoÿþ×Ù;<Ç+6¾úƒëï©@ƒI:ÿÿÒ·‡ÿm-ívüo¯µëgÿP¶ÿÿý¿ÿ¿ãê¶P ï÷>÷´Âž þNˆéÿïýü76Gêâ8nžÿ ãìø3Zú_èÀ>ÿÿÿˆÚöh*¬2kèytf ?áä1¿®ûÿµˆˆì¾¾¤Ãj-íw ÀæôNŸýþÚûäiîèGtÈá™ÿgId b{½BôlÿÿÚ]î½2àmIPjß©8Àß¿ ÿ×ÿl¢6ÿ¦„Y. ÝøL¬2@*ø|øÃ¾ÿÓ&?kOH@ fÑ!ï¡Ý~þ—äÈDý[^AøC*ÇäA`$ 5­>/þßñ ]ªh4â@” £5a ð‡†|ýÿöÇ }øeÃDDvŸ`iH>¯ûˆ÷©„ˆä Adý{#¥²Lu³ Á·þÕòtl ¡î#5Huî|`ÉÈ.=í4´2A\¸CZ>óùˆàLyP!#Ol./ñaÉ ŸN›ˆŽÁþ?^$2C¹È äÓ5  ›×[‰ UŒBž+Xìù«ä`ς٠\0ÖÂyhjO!43lŽMIt!¤œ„ ~CYÁ?íbÈù}¢ s vˆd‚­¦¾|6 MþÐâ;‰ k‰o¦$2At_ƒ{o¯ÖC$6üª × r@È©ýÌ_®×þ Ø" ×`†›t@äNí‘òèð Bïÿõd|/h†H°BV—¤@šniÚˆº¿ïÿâÈèŽ/ä2e:óaÛj@š„$_>YÀ»¥¾¿òÄu!²d`v”Ø7¿&‚T|°M´Fûµ÷ú¿è/¦]œ¶ü0…Oà›¦ÿ¿ÿü~‡R¨éÍ£Àßýä `qe×I&Òûôÿÿý“È6¹ÃN9NmÑ…ÿúQzÍ„}S«ÿÖ×ëþAl£Èù€9· Î9öQÊt=!ÿû}úMúßÿ¿_ÿñ: `N †‘vGÁqEŽXæ†Ðû:á„"þ›ÿÝffô÷×ÿÿÇÿnôýT!< #†Q÷ˆ’|œMúÞ­ûíù°žci}ÿßûí˜uç¿oMV<'5…#†â›G€˜ù"žDOíZïÿ·ÿë×_ßÿÔCúÿkÞ¶žšÄè\ €Õ±Îœ‹­Þ  ׯßGÖß¿õŽ>‚õ»^ún”ÀGVC7ÊþÓ»¤ w!˜rsñËò7)ÌùPW¢wxáÿÿö)ÿþßûÙ‡ ÊGÛÑêéàã7EâáM–pWþ˜@âãD È莉 ´2ä CTf³?÷ÿþßþ»é¯ÿd+Äú†ÿîôaÿˆŠ@ôyïN¾"aò¢:óÑu§ÿõÿÖÿÿoÿødÑAr}ÿ×o¤Ã~ÕóbHbd"÷ä aÓç@t!½¿ÿîÿ ëö¯û~·üwBûýõÿú¾×Óá;Ì€÷\  '²>GÎD~ÍÅÁ€ƒ{wßïÿ­×ûOÚUûÔâ1Á¼öÒÿÿmtoêþ½¶–Ÿˆ¸Ž5ÿ×ÿýìWé_¬Cöx»þqÃ:|´5ÿízÿ$:ÿWÿ«íþ@Ì ßßÿýÿÿæbÿýúbø›ÐýÿT¯î?ãÿþ¿¯º¿ä Ã;HY¢ÿ÷Þß»·e9T†‚ÞºPÁðH&û¯¦ïûë«÷Uï}÷ïëÿÕ×ÿû¾›¿øGéWÿÛÿÿÿëÒÕÿÿÿ×ÿûò `®ÿU E_ûú_ýpBPï¥ÿ@’|ú#ëÿûß»êßÒÿÿÿÿÿÝ[ÞÚ¤ßÿÞoþ½³ññ÷öü·ÿÿ}6†¨ÿý¤»¿ðý+éÿö× ¶vÝw_÷_ßÛû¯:÷­óÊÿÿûãõû¯ÿÿSÕÿÿÿÿ×ûÿoÿÿ÷ï«è6ß÷þýYÿ_ïÿÿýþ¯ÿÿùñ|º~ýêÿÿÿ÷ÿßôý;~Üz¨ékº_ÿúÿÿ¯ÿüz·ÿõýÒïôßÛûüà_ÿnûÿþÿÿÅuÿÿÿÿÿÿÐÛöÿú]µïÿtÓz·ÿ~CïßÊ%ÓoúÔÑ›á.×ßÿëm/¿ô±¦ßþÁvï«ÿÿöÿöô¿õÿ¿ ÃÇÓúMüþ¿ÿÚÚ[ÿ·é7vÿ þþ¾ÿÿÝÿ´l;ûÿvèƒýkµ¯ÿ¥ß×ÿý?Ýÿ®·×ñ<ô»ÿûÞý×÷Ãú_ÿîÚõ÷]7ÿ°[þßÿ>BÚ_ÿýÍbÿoÖïëûÿŽû!¬>÷·¿ÿü2‡^lý¯þlÿþ¯ÿš„ÿÞý}þßëþþßýûa?öÿoûÛˆ××¾ÿþlU·éýÁÓüÏÿúþ½ÿÿéP¿ÿÚ_ü-÷ÿˆëÿÿù:z}ÿÿ¾–±}´ÈèCügÅúúÿÿÿ˜òíWúM¶º¿Tëú{ÞÿÿþŒ¿ß«Iÿãݾƒ/Àäëzâ7õðßýÿëEŽ×ýïõüØlûÿþ÷ÿßm«~ßvÕS5‹×õÿïÊ…ÿ·ëýßí-[þý½šÕÿö¯××nÒÒïúq!kFÄ#§ëáÿuþ#¯Þ>ÿÿbº~÷ÿ£îÿÓÛûÿ¤Ýö=íi›B=Їòtl+÷ÿã×þ—þ¯»·®Ÿÿ¯t¿"Ïlöéøÿ¦±_õ ÿÿÛþ¿ýþ¾ïÿÿôßik'_ë}µá´ÕÂhGiûí?ö½·ÿßú]6ׯö½ïõ¶½±´:ÿôÉáþ½õ_ÛÞ¡Kÿÿþµþþ»¾÷k°ÁwšfÂô¯ëÙà[Cÿþ»_þú_ôÿ‘Óí®?Ýöþ¯» ´Ë0k%ϵN$2CHsqÇ ÿí¯ýkïõ×ÿÇýúÿk÷üˆSB1®í4$2A¤rÂè„YýþÒÿÛ¯ýzûýÿ¿ûýûÞÚüD†HjÖ†·\—?·ÿì5ÿÿþþ/èñVýêïÓ&=ðˆ`y¨!˜}ª÷§Å}•Åx"q9P–ÿÝWíüбùÇ@…‡¿«¾äiýœ@ !!ÎåqXæÑøÀ_Ó=-ö¾"ÈÆ|{{§öéÿ6 ÿ§×í¥û§â28dƒa|è(‹ö|lCŠMÕ -5µïìW{’÷ oÿý?þ½µÛÿq! Îä1]Ú̽vˆ‹.á©õÿÿÞKŒÎü=¿îi˜_ÿ¾?wfô"è+߯ ëê"2àx`-ßÿä¹ÿ}~½êõö")û(Dy#‚=/û|DDD‚xv°×ýÿÓÿüß}Ø_{§¿¿ÕDDC.0šýÿÿn¾ÌåùFÓN3‚¿z~“þº¦¿ý´¾"üDa¥}WÛºˆÿØ_º¢Y ûû×üzÿögþˆ.æHdPäãKÿõÿU r‚ŽC¹Áÿþ+y d!p.?¿¿Òÿø» Ñ„ …‡r ³ÿö±šrc„uÿÿÿzµÓO29¦Drƒ!¬ä£ÿÃ0C 6àç­a?ÿǧêfoÓÔ&¸ƒ!‹A”‚œ‡"ùvBqÊlÁÚ¸‰ €Ê}œÿýëÿ§0ó‚¿»øÐÈáA0„LÁ\¸ÃoÅþC !ƒßÌÅÓÿëõÿ~ßh/Y±há9B®’Þƒ „/øhHdhÂ.«Í¢>lÀ#§÷ÿÒÿ‹ïF§ê› y°»dr<_í…þk /Oñµ»ÿô¿ßWI½$›IéµC0ü 0mÑvÑÄ]¿ÙpÈ“àA°Æm¿ý_ÿÓ®¿9»úû]'¦Õ´oIµæÁº„!»ñ!a‘+NH© ÿÿÿdÇ_§¯¿é.ÒÿôŸzÛ ÚXÈžNò,i¿ýëÿþÂûë÷ÿ~õ÷¯ë¾@Ð ôN÷Iß÷ßµÓŠÿÿ¥_IÝzÿû[õ™¼ØZ÷ú¿üöë÷ÿ½®ž·ÿÿÿ¯È㮚8&›˜þß÷ÿÿ»Î`¿o~¼m%¿ÿëÿò`Ú€·8'‡_ëßÿÿéèõÕ¿_~úÿïòa¢Ð=(W ûûÿþÿÿ«ÿoKK^»þüý¯ ¶ N«é6­ÿýzûú¯Þÿÿ^þ¯úM×ÿãäÀ¸æ=ób=%ÿñß®ÿßûÿnh¿ý0ÿ§×ÿ׋֟û¯ûÿþÿÿ¶ÿÞ?ß[¯[ÿÿû[A7ÂûÿûUí&hûoý^ù ?ÿý™†:ÿþ»üÒ}¯§û_·ÿê˧ÿú¿÷÷×Å·Ú_ÿýüÀ^Œ^ÿ¬uIýß²‡8áE‘óÁŸÿû×ûÌé_†øg#÷Öô˜e?íÿúXû÷úÃ8ç·ˆŠÁÿþAÝïív÷Õ¾yCPüUeAÏzQýÿ{þ—ögˆŽ†T?Ú{ÖõûôØ1O¬FŠá ?ÛÿkIÿÂßÿ÷wp½÷Óôÿîý¾í6×¼„õB¿íÿÿ^ßþ­î·ÂI¿ýß­½ÒÛ­úf Óÿ×ûÁ•O×Ýÿÿü‚¹ø_ýû{M†*ÒàʵÛÙ@€¯ÿ·ýÅþ÷ÿþ¿íú[ÿ‹u H£Š÷Â(mwõÿé­¿ô¿âÈw8>ÞÿëØV=­Çù°GÀýÿÿÿ¿þ÷Øw®ÿÿrøÚpÐhßOrÿ1—§ÿÿúßø0ÿÁþ¿[k»R†„¯¾ïÈbÒuÿõ}W¹Ê߆â?Þ÷öO¶fP/ý×þ×ò~ÿ±ï«êÛ¾ýÈaÿ»öpqZýëoý[ûïýȃúÒ·íûÿÿýÑ X·¯úöÿÿ¾½} ßšëéúùô`ßßþé'é}·[ëi×ÿ·üØ}ÿßú0ÿþá…M㽫_m&×ÿn«¿ßþÛ¿ÿÿé¶N¸ò\ëßÚ[þéö»·ßïä1}ú_ßSPOµwÚývÚDþõ ÖCXöÿo}smÃÿµîûÍ?§ï ìiÿÿwÝÅôϰ„C#‚„ÓTí5ýñ]ÊqmÏäy_ÿí¯þê’ÜDDH0;B 5×[õ ÝØŠÿíÈaÿÿÿæ¬&„DE¦šö¿úÿÑèŽ]}éÒßúö`Á˜Ž4ÌEÅMUðC}ừ]†¾DDDDDD0YûïÖú°×ûÄqÿþíµÞšÿ_þ ôjß ÿm×lST"?ÿk¶òù#Ñ!!…_Û]¶}¡É0A§‡ NÈ.äpqÏBÿ_S6¼D†@i¹3£/HSM8ˆa \5Kåâ:#‚åÁ¬ŽÇÖÈ#÷»µ®·öšv„E”è2ð¨!129ý…‹}èFà¦zGö“Õ B0„0_Žú ÈQÈaÈxÈ/‰øMù¹›é÷ø¸È K" ¡×›ª½*æ~f+ ¼xϳ¨Rá“Ä8¨]¥¶û¾ “zS`‘a#ˆ úòpÉ‹†zïªßõõ·Ðƒz\¸d¹ G|â#•ë¿ô—ÿo[ô·ñ¿eèAõÿkÛÿþªþúÓòh(aþüuÿÿ_ëÒÑBÿýu~µÿ¿_ÿóaëj¿é×ýã¯þ«ÓÿÿÿI/ÿ×ûõk&÷ý:vûzÿû_ÜuÇÿëKÿÿþ—ïë_üuÿ¿þ–«ÿ_ÿÿÿOÿî¿^¿ÿëþ/þÞ•ô½/õý-ÿÿ]×ÿ·ýzùíÿëkÿ¯ß¿úý?ýqzïÿÿý¥ôÙ Y ÿh/‹ßýâä5Ȥçr&ŸúóÉÁœúßÿüWö@È ¹!ÚÿÐn+ÿûÖ{r[î@¶ ï}‘ÿ¿O[Î?ÿ½<Ð2þßÍ‚Áÿÿð¾¿úún`ÿTêßÿ÷6 UØÿ÷¯¿é7ßÿïþÿÿï·ÿÿÿíÿ¿~÷¾CÚÿ¥%1ò1ÿKÿû ®?_ÿ÷î÷ÿv8'ÿ÷ÿޝ÷íÿ÷k»ÿù >ßo}þöÿ÷{Äý>ÿÿÿ÷ýnÿ§ÿÿÿÈaöÿÿ ñßÝ$ÿ¤ûï_úÿÿ¿¶®Ý­o¸aÓïû~¿yÁÿÿí{ÿöãºÛKaÿïûýÛodÝŠû_ø`“`—^õþ^õ·ÊOïû”‚ g‹-ÂÓ}¶½ÿÿýêXëßÉ~8ØŽïN[ýúî•?Íÿ÷Ù?jÚÞˆe'®Û|@eN¿íí6žª¿V·öûíƒ ø÷ðÌ従ˆâ$68´þÖ;†)†’$ W¿ÞÄy/[lD\ƒ]Î;[}…!µÐþýJ\DG††Za Ýs@]ôØñ±S¨{¥Ì{#Ÿ÷fhïþ-ë²zÈà04cÿƒ]œÿQãýÿ×üôGok £ïÿÿ_ÿõÿßÿ¯Wÿõÿö×ÿïÿ¸2â_­ÉÇûÌC__é«NÐÿ±B#í4Î"#ÿäE : çÈd! 9Ã=Ø%‚ˆy+Áž|6<#0Îè}0Áß ?ÈC*uò@Zƒúd#Ót¿Ènh^Íž ›þ@è(ä09ž¤ò0Ô ¿ð’hR6&ȹ†È0AœÐs×ÿφ„Þ…LÃ;ÿ‚ òû M˜+& ×D ãè-z[\4ÁÌÁX„ÿí&†ÒL.Ç ¿Öü4#Â(Ž0t®†íðDt,#á£ú@Åÿõèt Ì ?‚µñò°ÕÍû\¨ÿþÙPkŽUŸª^8JfË‚Ý+ J ²d ½á$…¿õWÚõ„ ÊnïòÛ5äsaÐ ‚AGÚÿ6¹4f7ÖíB ¿_òÄäG#€ƒ¢8(Iÿ G$.ûÿâ ÓáwònW A/ômié´Fƒ0Î×GWéÂh$ðEGßä TpDCÐ0~y½m Q73F4þ®¹>xYÒl 9ZÌÃ;@žµÂŽØX!ê(/÷øðÙ0Ú˜hCHKµÃ $l$‚ÿ_®ä ÃLÀX/í †(tKÿÝ›28cý„fà—Þ-(}…ÂA_í¥ÐÙ¿ ¶ ,BŸ´ýu¬†cˆ%äàã.9ü1J»Ú¬øhh9£÷ë sñxŽ>¾œC=‘!ÿw­ŽÔ0JÿPô“¯ˆ·@¥£é*aÿôp3ÿþ\Ø/ o Ýê ´Aqà„Qµÿÿ½ü%×A^¢  %§ä$/ÿz0ŒÓ_×Âá^ÕX2c=ÐO~×ö£ÌoúÂ<\"‡²c­à=jxõêå÷ãÿ¿þ<8‚‡‚ñ0äÓ§øQ&Áu«¯ßÒÿÿëˆ%¦?Ö2 L£”çÿ¾ÿïõÇÿÊÂq ×õ‘4ˆŽŸÿýºûý¨6 @ðËš …qÊ$4}ðÌÀ¤ zKiÿýë'd˜0­”8! Ú#æ28Ÿ µ à-÷ýö¾¶„0HE-DDkÐzßõÿ¶½Ó|CG¸›¼‹iû¸"‡]k§ÿlÏë­„™'vjeÚÙ0Ha]É9cÚ¿¿öA?ëä€ÑAfq1Ä_ñfaŸgÿ[ß‹§Úìð] ý=) »tAl0ö¿ÿá…B7KÚÿ„ ÂG‘ôG°ÁèÇF?÷û5˜·‚ ÷ ƒa›ˆé0B$2Chrñ{{¦«^Ô¸ƒua/+ü0Èì²Îâ"$2AµXAªÿÿB>/ ÄPˆDh(ß­Íá5x¤Ú^d ÿùtL˜i’éÁ?ûêàxKµñ Üpdx)˜A½-dtKü%áét"#Lºa{̓}íþxH‚ û# Â a8@…†—õö¾@êG »È6~-®"í¯üƒÝy¨?é„éu:%[ ×>?¿ºûò@Ôూ_6LBfHE÷ÿÿ®'H‚Aƒ ‰ +õ<{^ÿRC‚#­…þά3g0ŒÑpçÃ%qO¿ú¡þC(r1â„( C¿Xµ¯þ‚5ê"ÃAl´+4¬x_ú0éÏ-\CØ ¨2 2A˜ŽÍ¦]i/ßPÞ¢Nk„„6PébC$Õ‚ qá/ÿúþ¬Y §3”DŠ‚ØhÖl¯ÕvõRoBs0ÐÔ":Ááþ´sÿ0DAl´i‘Ñ€Ž¹ÅÁý×ð“ïäHC$ <ƒHˆB!à­']…Þá L¯_ö„†H6yU‚0`­„¿  îÒü0AÉòÿò0Á°XGAÿú/‘ þ@–àj¿âC$(ä,0‡äõ!’<%öÓþ@– Âëÿ[å£@!®Ö: ôl[ø@ðn;Ö×û*3ªÂ÷†ˆd‚­nWAºÈßTo‚ÈBœƒW ˆ‹Cä @ÈòpZ¥â$2A¤Gtâ Zœà¢@”vz8-øsVo/‚›A}×à%‚ (r†Î «P…Z…ðAˆ.ð—èJ@ö:8Ù²ù´-S x(VA¦ÉŽXú œÿ4ß,0ázþ ~  *" ÐB$¦@ðÂL!È0»ÈA—§QK’ÒÈC“ ÑN’t¿½'û@’«ì(6@òCN°˜Lá‚dИÌ&#Zè/ f еÿú„¥ø$/ð0ð¡†vŒŽ0аN2„Ðî[áA×AxA„tG Ðn™_¤Qý]Ð"yÛé6@aÏphÒ<¡²‡!ŠŠ ›ä G_‚(w y°T æaŸ4ä ¡Â†A ^ C¬áH aðÕº ÈàãµÈƒ3–Gà£û[­QÄ`”:(  Àj·Ýzþ@ðÄÈmÍ`ÿoøh3 +6…ÈÞ^.a— jöR€XZZ`Špͦ 1‚.¾—<01.ÊTÿþéK¦Ž«ì!>`¢@Ô+˜„!õú®Cô‚ ’7dQÁBèâ*ïÿü°â¼àÔ: á5o k$øháxXRcóFòïý¿Èàî"?]!Zoÿü÷ãaáB32í0ðƒWGºä‹„¹!æÂ`¯ÞÂI{=—ƒé|y Ž·ßû.’®·÷JˆoEÀG@Ïá…¥ ×“æÂ ‚öÂPÿÒ_a† 2ˆ‘Ù /î'@[Kÿ¬Eÿ|á¨ÿ£ˆ+È‚®‘àÑ+]†\GuÖðˆë„ Á‡ˆ‹þC*Ÿÿþø¾>Žª Áä Àȸu"SKIÂÄðaÂßïß×°•ïÇ#l/ÿýuý _‹$ÿü/ÿÇÇPÿ²€[§ÿúÿÿù°ÛÑ<¨EZ6Š¿Ñëÿ­ú[ÛïqäÀ#‚Ø6ÿ¿ë×ðŽ:ú¡3‹àcúü(0EÖýÿnáµGFÀÌ'ÿð@½/×B?é}hyÇÿýpA¿øaDR¿__êàׄ}òàxWÁhDài— €RÿÞü @¿]ú† ÿ­–ü|†H(ƒŽˆ7ú¥¤8Q{ÿ¯ÒýûK¿cô½m?$èØŸ!’dé†ÿ¼"È !ÿ×AxpA~C¿ÈødªÿïÔAÁh— #ù €j§0@­vÂK‚ìÖ B?¤Þ/t» ~;„íň/\Pþ/dpF¶úY €Ï8š‚0Úïa†H<3{­Âúä%´sV ¶O{ãÖ‚ð”C‹¬N â t4Â3 ïü6E€JŸorCàÖÂ^¡/CÃ`¢¡œGl0ú  „à¸9@hhÁ: _ÿ ÙDÿ¿Ž1u VáH?Ü ¡«ˆ‚_òƒOøGºƒ‚‚ ü"4 CòããÞ zK‚#£‰]C!\¡ÂÌ ˆ-‚p&¯þ/…¹§]r”O†‚é‚WáWRCàß ¾ n([8ై¦3 Ž+úü%áÄ‚éB…HX?¼à²‰B.ЋÇç³ Ö x-Y¶F€Ì´"èØwßáô¶Ç@´ Ð+ÿ"yè@ðÊСçÁEVøB÷ _ ½ˆ"œ×/¤¨tÚÿ„¼ X`ì$à‚ì/e„ xg44E28F9ÂÿíøKð•á¡G0gh?þðz aÃ]ÿÞ°ƒf0 šÄC^ú¥þÙæÉ€4 8Kÿ"øAxK®Ô†£µËívº‰Ðس[ Žë ² `ˆýÐ/Ö(G_Û¤|3>‚ò¿ýrì;wÇí®;ƒa,‚Ù8Oü E¥Ù Ô@…Ã7ˆN!’sÿ_X_FÀðÿDÔKÿIh{ý‡VC$Œ`è."ÈlÕ @d‚¿Ø ¿Òð¿Ú ìxDAAÿò^ä2@½„ú<y|H-üÿþÝëù ”, „ˆ‚†W¿ñ ‘Ñ2C,4}› ÿ®×d °U„PfòÿÿðÁ‚¡ýòWù Q4 ø"‡X¯ÿVGHET_ÿבó’ ¤p<´fÿû#¦Ht¡Ý!ô˜0@Iÿ‚_‚Cm† ÿÅš#À¶h}ê‘mQ!È‚Ðoÿ"†tÏÿ ª r·º«zDŸ¼EP&Ú±¨‚Øj”è ßþ &#ûº ëéø/O‚>†§ÿr`n0/àÁ­<8Š ¶8T¿ö˜A‚ø3;®hëÿè$30Ûÿúþën帴Anœ¤EÐ%_ñƒqÈ5AÆ|HÌð0Ð+l$“ýdG[Awÿæ‹ÿÕ›ŽEA‘Ñ€.•oñø†© ˆñ¸Ž[ Ü}`’6‚´†`ÿuâÿÓh(‹ ¶VIÁDPK·º‰!ð`¢"CE<Á‚#ü.9Ë(ŽÕº†QDÃQ€PJql(³á‚8*0¶…†w=.øH¡x0ë!’£Hˆ) lÀeCÁ'× 0¢"3ì¾aDp‡¼b'’ïÜ‚Èé^AžÂÙ1ËN$2,pMÖˆhA4$ÄÒ^û5YpȰAÅ~¬A —ØXŠ!’ °d#¯glò|ކ¥wþ&œE‘ó|ŽEõΨÛ.`ÕVÐ$D‚£`È`8" ÒP‡¤ ʵ„$Y‚ ¿¶b""l¼G0hø$Gƒ5p@Ê„ˆdó0a} (ôô /×a<2Ü‚¸â"?£a¶ì+8 „ Ðø ”#¨_ào¯Îdsad žCLGà¤XI°@¡”ç ¹Ã០ŒáŸýP]…úÑÀÁhg[ xeù £”çâì‹Z!Aµˆ„C$k@þ 2pTm ïzY ü4XhÌ40T Pˆ‹ { ¸ ÐåY É¡¢!®a Û‚ªaÿ¯g‚œãš¿íS¬ã± ºe9 ý(R † H<ô@Ð7ðU_ý+ˆˆŸOþ°@ˆf~ ,Ä6)¼àÂZ< Y[ž ¹oÞ Ä!G@œ~ü(Mû¿à¶ƒÿaoõ¼DjNNy%""GµPddGH†IxGÃCØf>ø" a¯Ç°¤4“<¿ÿÁpgL/ Ð;úƒä¥}#á 1 bdç À¿ ð*ÈlƒàˆÈBi0ÁÈ6z«ÿ#º\D|_Wðè7„ ºYš0ÈänC$:»]ešH—Ð@ßÝhdÄù ˜á?ºÿü,ÃI`ÁÐ.„DS ©×öA¤t2 Ò¬KËüýeÐ/°@ð±X*wA÷îø.†Ó…óS=ƒ„Fa¢¹Ð)Cnx‹ñ}Ü0Á/ÿ×Ð_®†€ÁˆäÃ#†Hk: øÞEO¸Uˉôo\ÿö¿ëÿ‚ Õ—Oþƒ#ˆ\2@œø`´`ÇòÉÞBlƒ~Í|ÀÍO±é_~׺7ûʑà à—ÿôýd6àÌØƒg/ô ¤¼†HjÿÉ £Á˜Ùyÿ œ7áPÿø@±ð‚È1Ý üDÇÿÐ/ÆÑ·Ý¨:뤧Ã3á!Úü ¿]< ÿð‚ Z¸+â! ¬ºlÀ5C\%áï¨û´ûøx)±Hûô5­pIB^—ä2CdÌ:>ÁŽ:D3P¬º ÿ Åÿd†þÃÅþhõ×ÿÈd…šA†}APÄP¿ðQÿÛKoéÞÿø[“£bò$j @ðÑT‡ý/þ=¿›ÿÒÐ\0Š°É h_!ëé¥]+ÇÁqÁr-…¿‚ ÿ`¿àƒÿIUâé_A£<Ž Ðÿu_ç@[MøKÿ è¤2A̯ý~¼ ‚ ^PÝW‚CôÍ aƒú Ñ}x@¿ö`Áqõÿþ‘Ã_ÑÀ<(} ÞK¢@¡¤ á!#ðÝóÐYT~ÐÉÁÿÿÿè*CÂ’^@ðßDp3´ ÷ÂA 7ñü ´.¯dp[áÊ2ùƒ3»ÿÿà‚Óéƒ!’AÜóZÓ aqðT ÿÿ }x¬ˆþ¿ûà¥paY ã ~Òuüƒ†@ðÐ $ßÿáÜ%ë_ÿþéhcâ|Ù—\˜½+,&/ µŸ÷kƒ3 aÿþº‚"20d2A@çð’ø‡ ß+@ì%Úuÿþ Bÿ¿ÿÔàÑë-¯í¥úÄÕH 3@¿A:þ—+ÿÿCù i»þýz’;pKØa,‚Øïô-‚ ¶ T?ý…þÿAB@ðm#†ë?ÿºÁíàÁ®þ°d"D2AaÏ@¹šy iRž/ÿ .Ѐf û½°H ™ðÌ@ðjô²»0L†Hi`O¿ìD†H4ŽaÌçóÔœ9·¯K«\†e E?®þÿÁ£„%ÞªPñ —Ð) !×þÉŽB9ƒ¬!‚D,Á“–Õ‘ÐaàÁ!õÿ Eœr å¡ÊÚò 4à/èá”þ&‚Cþâ"Æ*g‘ÁüaÆ]E†ÿ¯ñ„#ÿréœ:à!ø+#£è¸-zä0ÿѰQäìñ4‹ÄpÕB ×Ý"x4ÑÏÚø@¼ƒÿÿÄgp‚û Ø#à»"¹0Ä28-‹ÿò6 y áÐB!†^BA9Ó:âb<:0Èæ…ûÿâô¿Pl,D©O×ù8-†ré¡\%Ùj9 M&ðQb"ÿÿëòp`hºPÈzÙ.ÿÚ†Ð;z¿°ƒÄE‘Ã`% àýÐ"‡!“ÿ]BsŽðLBSæÌ ?øª< ûÿb,‚)Ã]ÊŒþf;iNþÉŽº XKðH0„H£¾ú¹°iÔú- O$}ˆºÄk°k×Ä~' ¹{Ó ! Ëeö¯ÉÌ `pBÔ‡áWo jeÚkXæ`\/¿ è`˜K ¸äcž‚…ûa,Hdƒ ä“¡ARþž†_â"-8=Ï?ÿÒù ˜ˆÈdƒ/…û(‡  ä6l kÿõã²2EdN_š7þ.…ƒ Ra}Š ÌÀðSƒþl&‹_6þ¿ îq˜pÉzûDÁ¸0Rçâþ¸Þ@ô‚ƒqÄ0_°ÿÂZQE4°b@¸Ïgƒ$ ƒPtÑËð‚ß„Âd  HäÿþÂãH"C 6œ‹‹øÉ_8 Ãýr9‚´jO )\ x4¸‰WÿýÕ›fÃ'³wÕB°•á-¼µC­Há2†…38¸=˜sŽ?¿à‹«CÝÈ QÈl¡Uhò¢Ž ŒÃE}_´ ,—æÂ0¡P0„Dd2 ÿßã„C$6Ë¡AGò€¬a`ˆeúø _©È4«Òlá¼ÔÕ á™ä2‡)GëÐçDQ ךÀðm¿4œ¡È, y§ ¤°¤€ÎÕ“ƒšŸKŒ#0#:ft!d› ®9cþé|EÈÄGŒHm9ð<¾ä Áa;¨[ÿÁD Û'Ø¿ïôÜÌ45A ÓR˜åA‚7&?ÿÂ(z ¾„t °Fwðœ%¾@ô;ðŠÖ CöÏ®Ž Aí ðPCB",~({a!‘°Éð!˜g}[ w@Æ| ¡Èi¹(J›aä4GøƒÛšÁ‚L ­Sпá¨3@ÎÌ<Ð2A§D õäÁ¨sœ#ìŽA?®AÜÐg]‚8á‚È*vAýwþ úš2 0`ˆëp„DHèØg †H7òa=[â! €Ír”([Ð/ûÿþ ëa÷èlކ¡¯  ÿÈë„„Uð¿ób•¥~”„Ú Éÿƒ %ÿã÷…Ö‚ô P2B8Á*_Òÿõ cér€ÑK ì5þúóþ¼,†H£˜ôˆ Ž °g‘òáÚ¯þ V–ØA%¸]‡üþ»èå­Ì$ÞêÁ8Ⱥ’p¾·½¿ð`Ò oOþ¿ÿ¡ÕÑÆ ÁáD³ D†@‚ø/ý¿öÁÁ¥B†!Wø`¿¯KÂá²!G<°|h5µò ªúû®>²‡]ð…ÿ†~6 ¿ýAúOƒÁñàˆd†×„F ÍϲՔ={ýøHt5ºò:ÿ§&ðDt ¤ÿÒ£0ϯhÿÿ¦Ÿ"€§Ó¡õÐ(a?|<^¿ó’ z\z‰OÂÿûÿ3ËŠ\à–Ëǃgí ¿ÂÄ4½/ð¿âC 3Gà›ô<S 1ïÿÿÄpb?á°—ùÃ6ÏadŒðX Z^¾¿y ‘ ˜Â„‚µJóbR„ ª Ïÿÿ¤@¿%ý ›OßB:üt ‚($#ÿBã ‹…È Gÿÿ„ ø8JHFÒÿ¨"v¶‚CÁ!ì þý®«<6…‚ÿúíyû`Ö"§ ¶ÿ“þ à‚¯âõȾˆ)À‰¿¡þšäX÷_Úþ@ñ`_aÔP4?øƒÕ…Ð/^HÈà»ÿÂhÌ6\> ¦<—0¼0¿Á÷ {ðtdŒ¼G±¿öÿ ‚6 è[ÿÂÐ3àxcø%<4ç<7Ǻúý2 £÷ A¦G 73 ·þ?ðA. Ô'üYÉÊ™ÅÕvÿíãÓ#ßÿôˆmgVAà\À¸hûú!„i%×A²‡ý-dƼ‚‰éx0ˆ¿÷ú§¼EL ×þMA” ôìbÿ ©`ºz×àAo{ÿ¯é*  Ÿ ÿü EƒaÉ[ým¯|*ÿíýßá8IC0ŽŒF`EAƒò÷pHbjDêƒRû®l# {‚æßØ ÿÿòŽ Ã â#M„x3ÿùÄÂ-%×ÿKÿA*ÿþ¾ã†Lp´‘ÿÿ HdgÿÈO¦ú· ‚šâ0§¾C$5G Ú2¿ üƒS±„(nÌ%ß÷øHH<Ä‚þBžÿ ûÿj 0YÿÒI~ëõB†a[ Ø,r‡/Öñüàƒÿ„ „?ø0þ kù iôÁ÷û`D<2œÑ°Ê'ý¶—i•ëïÿÿ|ëÂR*†¼‹ÿ¦§Druø0ÂÕ3¶ ì5þ¿ÿÿÿþLŠ"ÜAyÊ  OYCªÁ®¾C$Ä=ÌìAÁŸÁ #$2ÜÌÈàŸÇÿÈd†¨ÒüP¡„¿úǼ8ˆáˆûÈîÈ.‚ï!’ ì˜ hÔè `ØhËùôf2:ªÝº È0åŽå?ä‡*cÂÿíx©˜d‚•Èdƒ+Ë‚bj"Úµú]—À„àd†˜ÿB à“. /ÿ°@±ÃY`¬¸dÁN ŽƒaGô¾!°ÿ°„1 °?ÿÁòb6N`Ž€{3 ¾¢C$RHaýkŃÖ ‚·<¬ƒJ ÁÿòsY 2De¯!´\& ú8Aè)Ä#¢:¼ØF m@A„,· x(¿ï¨eA«µá ûH * Fa½ér€ØßþÑÀÎ4-2a?þ"a#Ïß4ßFaž z¿êð¤}ÿî CÑÀÐa0ƒ x'˜2 (O õØ4¬Ì3ÿ O5 n¯ÿ^…½ÿ~Ô†ŒÃ=B 6jÄYNS<3†w%„ ÿº[)Ál7Ð0Êý†@Ìf Áã­Ö°¾ïÓÛ§ é9ÂFŒÀ€Á&F@ð/èIÔÐUý ±! 6¨àÃU[]%ÿ¶¶Ð@Ú}„ž|3°g„>aǹ‹ƒI¢!¾©é_îAlƒƒZp–,.­ª_ÿúV°ZW @ÚN"ÒTC$9Xÿ †@,¨_õ2¤êŸY× xf† *þnˆÇ ÃàÛIµ‚çÃ$6šÿ ÔÃÔŸõ•~¾øõ<3„²‡94 /!ÝaÑ˲†&¶& P¡Ø"!¦8.ûï&Þ·­°\:¸!óku„þ†ÿúÚÁéº1`~»J8Zòç{?›"8ARlŽP‚^ µâ´0a/ÿÿ~ïuÔaýÖ  ÈHF28ÜØ#æ`x9êCcù0q5/âÈâqªä )²ŒŽ d:ÿJÉþºþÿþ¼ïmq!c’ÀŒÃeGKE rg‹zä A®؎@ðÝÊ€`…öêÅtà}WÕ5‚.‚_lƒXëÚ¹ €Y'@ÌÄë„GJ: ^Î?þdÊNà^ #ü3‚úßæ©ÿ¸èTåѰÊß±< àµþ!2@‚ Ð÷úèA.ûöÅ5†HúÿkéøDt¿ } €ÑȈØ_Ð'ZÚò?ý^ÿt!÷úüýG¨-®áB3 õü%Ô`ØWª_Ö@ðÖÓN ¡ÿö}Ál¿à~ÃKaÂÐ ¯øGŸgä›ßý{Ü_ Ia£¬!ÿÁqýyðÌÄ 0‚@‚„ ý}‘Ã$ô 1ýt ¿ /Á 6ÿpQïÖ¿Êl$ i¯‰ €/„ {ðXHj»#/øAa‡ûÿáÈèB×_ÿ\%_=Ï/دÂKƒ'ŒÌ vB_†ÈG ÿX%ÿ¡”:êù0~Ȳ+G„ÇßÐW{ø ^"úpš_¯ó0Ï㬠\_×È ²èaßúÂøkô¿ y¿~ÄŒ°nl2UÿÿH?3 ©.ÿAäÿúÁ`—á‘ÁlþާÑðÌà`Ïh‚Ú²ÿöƒð@ƒIÐ(-d€Ïô¼&»ú‚Ú è ͤ ¸‰ rc•ºÇüŠUõ@ˆeØ POOÚ ÈÈð -äiØ_ x5f¦è _ÁF ¬$"!„ÈdÐÿì?ü% T¸ ~‚^ƒ ?ä‡Áƒ aà DÌbü‚öÖ1@Ñ@/ÿßÿô ´ÁÿðÖÿ x'e † iïè@ðÙÃ?”œ0@SŸ ÿ!+‰Sÿô ðkõöèG×ÉŽKR†€q5ðTà r£¸Tø$A¯Aé°Ð@Áø×þ Zi”8ß‚> ù€Ž †'ô-Zyê/ÁÒ›Ã7 [Ö@ðæAl ¿ÿÿôl!S×ÿØ/ý„‘Áòù['Ð@–ˆ$Á ¶ ÁÇ× nlÁ‘ÀÐ5ö•úÿø/ÿøuëâH!±Ç°‚³w6¤ÐÁ¯]ƒ!¢˜‰ ÀäWßôŸkÿì ºOÓý¿K塆ü4¢" ÿîÍeÈ-†‡,s¹ø 2L0wý×ëׄG€ð.`C ~þß+è0ßÓ €Ñ Ð9êÿ‚؈NC$<¨DF ]zD½­6ÿÁ(ˆ4?¢V`¿~×á7ÔÐ(‚ Ô `CE€÷²…zÙ$2A¯ŽbB`Š× l?õ _×ÿÿzñ𸂠#áŸ~,Þc/Èà¶<Ö ßý¯ã‚¯ê®þCž¿ý/ÿòÇ x"spE8´¯ø¼DDHd…ƒÂ3á’ ^ù¥×@ÕëúÿÄ303ðþ¤pˆ`f ÁCI‘ðʶt  a¶®fø„ 3k57 Á [èÿÿëÿüGÁÂÿr l€N»û‚b"†×"Žò ÿÿÿÿ¹Îÿ‚X%é28dƒ1É„ÿP„áˆ&'Ãþ¿_ü/þ?“ð3 Ï¿óP-‚³ƒD0×â@ð^gs¾ ˆÔWanŸûü_䇻 ;%ÀÌ6ÿ_‰ hr„CÌÃ;ÿpˆê"-8ƒlT3LJ„ ­ÿÿú>ªÐXÈ"Ÿ½>Ü‚ØjYC˜è{8÷üâ,º#äxýÚ‰ ´¡„ ÿml·ÿP`ÕÈd›¡¿ä2@œrÈB肌@¢ëðlˆá…ëxµýî¢vŸ`C0ABì„C$ô²Ð& ï·ˆ¬0BõÄ¡zÿðCÞÁ†“ X´ÿ%ÀðD"…”::ƒ -ÿÿˆ†°bƒhC×ÿþÙ C$ èê¥ö$2¬r .Ž™t.f_Õø0œh2„ÓCÿò-먄 ˆ fÌÁCA_RBhÌ3Ð"yÿäpSœ ÐÉÄD…ÿäˆ/1¼M#‚Ø%n½šFÃ$ˆá˜:eÖ¬øÿù‰øä2@ÜC ÿ±}´ƒ ä$2°úWøˆ h`ÂØÿ”*qÙá3f}ÿÿ Pˇ#†J *Úö ÉÂ4•ÿöewßAC!ñ¬w¿ö(D†@4Ì Õ-/QK×ü\†ÿÍ„.’hÃG¡5à`àÁ¯ÿì l¥4+*˜|-HÕ”ä0O¸l)×/˜„ ?ºG;Ÿ ]0Pƒ(r‰… !•#ÿùP¹ gxèä Ã^ Pûk¬0ÂP„Xp˜zø%’˜L!aa .‡ â84—`4¯ÉÐ@è9»‚O¡kãêÃ, ¯](pädøh£ð0¡d ý°A^"˜g O¾zýK¡ÌÃ1×ÿá!’ZD4| #A„È È8¨hm ÊN†vHd†Š÷×ä2A— j x ^_‚…õA9ÁËóaž#øDuëòûø+ ,4 Ѱ/ÁBp0B˜eõl‹Èd†¢@Ž€•Ü%ÂA|%¿K ¡Lm¡6/Çýo°H RIÐh˜0QÔ1H4f ûëdæWÍŒŽštî )׿ Á®÷Þ?þqÑCj¨«L?V…H30g^¾Ú_Ž 9ÅÁB‰šÈŽp¿û"bÿÿíqjö¼øhs⽤@ö0†HAÂ>?Òsj¢—‚Ø$Èî¤3 uÿQÿ[^?ziÓš ÔCùÈd€É ÃH qü.°—ëä À”qÁƒÿeÐf€@ µßÇþ:\ ƒ›Ð?(ñùéz ë킚1mÿ‹C,%ÿþ?hãë`¢ÁðD2CXba-ÿ"ŒÞhJ ø"‡þÄ7ßdLÁ¦c6 `‹×ÿ§ ÿßD2A¬ #À¸5Çð@Ð,IMXi~Ù±‘Ðl?ôöh `Yÿÿÿ×ý‚PA?¿È)Þ ÿIþ"Ø?ä³ñ†qÊðùz› ¾õ÷Õ‘ÀÌ6DN-l}$ͮφ@3‚´¾×Áaßéö&"fœqÂñ`¹:M‡ób܆H.þ9 i¤Ì3ò ;Á) 3ûêË‚Gß_Poÿ‚a¯ñWihˆÃ_à¾?É‹›ÕÿD ä2Ѩ ¤ ~…õÿ˦ Á/ë’=bTá§ÿïÈd+Á‚ Fï x8å @¡Ä}Àäܧ0å[Zëþÿ‹ XŽo0¿\' ÿõä2¬b®Õ.È–qƒ(°Òý?~Aœ{ô –°T>CZ|:TIôlÓä2ÀÐFŸÿ„ }‘D\8»ð·ü ~(Šˆ-¢·ða €°@ƒ Áá: ¯é`ý‘Ñ "Uç€Ì?Â_öèæƒ C œ°Ø÷øJ˜iX*úY`ò†ÌGPôqØÿ )€ýÄ_gP3 Ýé}{x†Ô0„†H+ðAþCnh.ÁF¦nÂýPyȺ4 àÂþŽ‘ ÀbA|(¼†L<Ô WML|'"ýA‚vT„ˆp¨¡—ÿùÁûÐ#ŽŒ ¿ˆ~Ž‘óZü!Ô_y;­õ xhVÈG;„¢, E8‚pBÿúà—‚B ¨«¨@¤€!õ_<8‚‡­Âú>¶Â "0oaª:¤@¾kÿ£€Õ —Ë¢úu\ ¨7Ïæ¿½ñ ©?ü*½~ÔI„ÌÆ0A  À÷úo^Â0½ø P@ü¿þÊðjþ ”:[ 6‰ÙÁ¿†0 Ðˆ¨_ÿðA-.ƒ0< [ÿ]vÈàŒ‚”ÿâÈ`u ¶ÿÙ8 /d}«(Î$Èùp4zýÖ‚¬Á7¿÷èX7ÿb)ül‚iB$2Bá=d†x*ù? ƒbÂýwÿ‚ø0÷þ†H†˜_ëØåB‚Þ8!cþÝ ákK| X Z^:@ð`g·ïÙkë{°ˆ(²+È܆Hm$Aÿƒhÿ…\ XbxAoêÿ¿i— ÖûþB"$2A  ¿öÿº¼/¨ ŸðR_ä §ì‚ã‚ …ÄiýþÈã#†H5‘â8)˜g~÷j ÿð‚ÿUe¶ïBèy‡HàÒ:6 ëÞ"C'ƒŽ_dê‹£†l&GOµ”#hÀ-4 Â]Ò ½" ½ú ÿ!oýÁg #W_Gƒ_äÂA¹dÐ ÐQ1qá˜uÁƒ/ ¯ô  ‚²‡Ö°`Òb"”0ü0¿Ér}ÛƒJ —â?\0Ò ‚ÿ„ ‹ü„ÎÈDðICGnº™CÊDQ®½ƒ!Ç'r† ~Îç‚oÃa‚ ×ÿð‚Ÿí>uÐd4r/¨,/ë°A 3À7ßb@ðw5Í‘ñhÌds.éX4 Òÿ@‚îA™üLAG €V#åÃ$­þÙ,Hd‡ò ©„NŒ#xÄAÐ'zìDE¡`¢":ç¼niÚTè~_Â@ÃH⫘9E×_ Ed2@®h+„"#qãû.ˆ(‰j=ázì… @—úL0¢C _Áxa0ˆdƒi4’h‹}“‚ìHdòÇjêëÅ„‘à<¾Q@˜@ü/ƒP91¤ÿ N"- ð`Ð-ÐH+ufaHâØAB)Åú^ ˜´º_Ð0c6ŽA|CØ_Kà˜2œ!†9˜g}ï[×5™ô‚ ð@œDZj$ùB0 †V.Nƒ%†%ÌeÁl&ˆõÐ-È-ƒIŠC ]ˆŸó`xlÁFm¨4"C ‡#³SøUÈdG Ð"~˜õ‘Á$ ò ¦"®’I:ºfa“ \$¾¸¦L%u„ C(t¯» {NCc“ùÈN@–£³ª1‚ì ‚Ø ˜dÇ&! å`½ý8*3 ൰EÐÈ4F8/ùÃp‘:ã0Á’U†b ˆd†ßž ÷ಬ0-w…ê"Њþn.IЉ˜mà )p9ϘH6 !lŒkÂä ÁaÈj$ xQL¯r@g×ô#6gsD¬†¯<ˆhÌÈùú«3¨d‚¨1GA~ë„ Áׯý‘÷õ„“<0„1ÈA|aÃL„P4)¿ªg…Ðÿ@ЏCC^¿óánœ0B á 0¯éA¢³¹ðÙÂM¿ÄC ¶n =‘Åøà‚ …†ÿ×Ð'Y˜gpÐhÊËHAªÊ‚²ÐÃ$Q:äƒ×ü‚ØÓ#¦/û…¦a' ÿ L¼$ 5§Faž:1a †„ž ‰ €Ó¸aë®ô øÀ`7î”à×Zˆí¾–<+a‚  BCú3 íPÌü"­‚ Zû"€¶úÿ‚ä °.ý¯öC2aX`0Ònž| ÙtÈd†Ë!«…P¯ô ¡º £àÝþ¸ ]Óš>O_êì_ôßhàf2‡èH'Á„"xä¸d‚Å& ú8ë‚_£as?öµjÌòéýàØUëþõÂÇPz†H.€ƒö„†@5yX@ópT ÇHfÃÈ5Á³ý&Ä=_`%<Çÿä÷ÿö¯‚A²"§Ì3¿.¯*à ´0¾‚ ÄAuïcì@‚A ßÄ/ÿkÿëà×~#œDpÈ ¤‡¯ª÷ÿD3fCŽI6¿ÂÿñÈ8ÿãþŽŽ[ìD†@k|÷ÿ3ÈðÿàÄeù¢ÿÇÇd¥È€ˆážžê‚Ä[ÿþÁñ„á¢'øý)0h/ûñ!?öh ­Uþ‚È{¤ýÑÃ`åGt7ìZZ_þ¾$2C…IüÂß ¼zæb›/T/áM@YàÂXA ¿ÿÈd†^¤@—†T`ÌÃgðAxºÿƒ¥:d|â~Jûù a"¤ºDBˆ‡zWéi3¯ìLÌ3ÿ“†Šú@‚Èþ>C x ¶"‚á^ òb8, Hƒ¥gøV³4½C/ª®XL•øVmP‚pt¡8H.æsi^ `¸H)Ã?|PǦñ;YÃað|CÂ*MþF€C»CDPè„ÀÇ®°@–ëŒ<è‚ ¶ ϼt|! @–HF'‚üá–8-Q>®,3<6YóÄŒ`ýöè*ÐXd ˜HD‚Øn“®Ñ°T‚> Ç€ðÓ> ¡!‰Ä£#¶ød†z<R†îUHàfuì[QÙ#˜eróü ¬.D†H2ºþ@‚6†±°ÐžP$3p¬Árˆ! °v >ñe÷úí¥bAl/„DUü XI X@Á£0ËhEu¯ú\†õDï!]ŃÿàÈ ŒÃ;ÿÐAQ°/ºa°ZõÿóàÜŽ½:h'#F¯éq LŽŸøGNHÃKýïÂó€x.Gïú^Áº^¿èÁQ0(®X?ð–" Þn9 yá˜ÐµÛø%þ …ÿü. `–ÿ‚„ @–»áßÿÿød ‚ؔٿÿùÀ}ZÿAa@¿ ©z ñ^þÿšÔ†H3Œ({ÿåÊpo!|†H.çü~ð‚Á¿ƒÐ_Ö—ÿÄ ̃Úÿ÷@¢Al5ÆÆÿH‰Úè$á/Á„ ÿÁ„C$˜E:#§¿Ü 4vˆ-‡Â ú†Õ=,/ÿý&¿ý†\2CP6Ã_ büa 'I]ì0‚õl†»ßÈ-wâ°Jßàî¤3á’ àxfšH2ýº@ˆè¤—þÕ¯õöa$|3Õôþ¸„!0X]}0`‚ŠÐ/ÿÂ]à¿þ,E_üyÙ“Ã2†B4 ôÿh¤¸$ÿáë@¾<7µáÊè/[ ?d0[̘ƒ¦ÝòA6*;ô‘ÀTä ; ƒê—àŒÀð1ëàÈTø ¬¿ØkÚ&› Àià©Ðf|öØVêò'î/ºúø¯×ú¡L"@;^¸†ÐaË1)Ð’3$cà %¯á @½ Ì<Ç‘Ð]ÿÛB ¿ÈAb,ެ}\£0gpÒÔ:ëúVØapЈÈ6«~ °0åVn x>°ƒûä€ÐÄH<0)r'G\CB #†d% ²‡‚༡Ìç| _ƒ $$09 A €SIý…Ù¬2A`ÀÌq IÖþƒ`Š„PüDÖ8g…b\â"þ`ÄHdÌ÷îÃĆH@”-×ðN""A"ŽE™ÎàÓHƒ/þ]ñ…‚üNvr„\¯µöö"" ŽÂc×ôºÜ*4?µ²8-†¹œ<&Ö?®"Chv8ÿÈ`xg ]Ø9Á¤u¢ 9ßk ]Á ÓÖO ÃïB$S"¬Ž`E›Ã. ~ Á˜»kâÑ ÖAI…¿ÐZy 8ÎSÖ“ô"C 0¯›‚ñ!’ #«A(ˆ?´"C<09Cœ}¿px0E9 €n=…ð½ jáïù/{ð†„dÕˆg®í|D†@#œu:8Dl õÂ^@Ð è3ë!†wþš áÕkÃXÒù 8ˆÑ Èd‚Lä.@Ð ¨FÃ8jþ oôs#“ d2•<ÿëÐÑðÎ×Ð…ä ÁZ€ƒ¬*þ‚&ð‡ ~2h!‡L†À2„&C.…‘ú­*:Q9ÏW~@Ì5†¿¿„_¾XBÌ!ÃA„FÃ`²‡VAIýB¸Èˆ5Ìã ¸PÙ ðfÄo ÑD\OkþA”p°­ïK¤:ChÌi„  x1d=ú!iAƒ øâß[ƒ4f(30Ì9ýòPR:úìǃ y˜`¹ð…ã ‚ †¹ÈSO†Â1h)ý21É¢^hö›V` pè>p@Á…ÂO®J Á<Т†ÏÿìHçà‹¨t¡‹Í BüF$2¨Ò÷öô¬‡¥®·øBOÐ+õ÷ô*f%´‚)Þ6¸Oü†He͆¾/ÿ½7º_ÃBæeKàÐ/Çß°Jb(p“#¯> ‡C.ˆø2!¢Êr `Î?ø* ”gýõ¿ô ÞCd'‚_ÿÿõWà“á„ÿ~@ôÿó—ýÃò!·ˆZ‚^#äüè)ÒÂØ _ÿ‚_ƒ ü D6‡ðÌØ?×ð—ø2? ß¡Þý¡„¶P?ÿ~øþ¨ðfqõKÿ_ñ"úßD2C]Óÿ؆@ˆd‚ÿƒ×¿¿ýûë„‚ ¯ÿ¿ñ!Y™€F ø@¤4`‹—Á µ ¿Òôlÿð­ô p‚ü†ÂøßÞC$3Žu,=ýhFÉÀ(N‚l‚_áà¿þ 2: /Úδ$µâ—ýô èÁ‚õ„ ç"0@†°—øKõÿña„²HÂHUÞ¿¯ò¦œH3û£Š>Lru<ƒ„ØB8L0“à¶?d „û³û1ek| ‘°uj‚KË]|4&¡~ JâÊ.ÑÐJ0f™#‚Øfÿ¯B ÿÐágò˰[ì0@’ o_—ú4 ì§ÿE¯ÊŒ! `„Gÿð«û`‚ˆ°Ñ´‚Ïùy¥ › xguKˆ:Û\: _ïþL&€Ã#£H&A _ó2Nþ 5Ù˜-†qy»l#¶ll)<85ä<Æ× @²†ðÁ Í{Ôâ~"4˜0jdÈñoäP¹ åðÂÊ@[ ]GP0FÃ$¾ 0† (~„‚LÛ!ÂZa]wÁ¥M†ÿQÃä5?ÂñLÌÀÁt" /í„a e]eø$=6‚Ù3ð'û~:XAB!—Íÿ_‡ß¿ö„!£0ÏúÁ a„5‰ÿ`†ŽHeÖ"2‡ÑBt ?ü%Wý‚ ÷ÿ A,” D ßú8¶ þlâ>lF_…ðA¿S`›O A†X2â—0W>þÐ,i”ö8G$·¤ßöEŽ ¿ÿWûÞ߃ ƒ®#@Ø[ÿ[ !=†Tay˜gé8+ý]ý~È%žÊÃAl1ÿuÚLE õô ¡„ ?ÿõéw½ñC$ ÿëÉfŽÀBC&³žµÿÂXFÀð½ð–ÿÚÒä ÿ]É ¾_ú´ xR`Ð! þ¹k‚ù…×·ÿ°Áá–„ ýy Ò…ïùavG@™°[φPÿ zZøbxKßÃdJˆTJÒò Qáæa’õÿ±¿Á ¢ >÷!¶½Ô"‡ Û _øørË I‘GƒKÐ{¡P¿äNôq,B„x3·ý[\¡¿ Ûߨ%¥ÿaˆ0!PA{x0ÔtýRN›$œr a­Š†?¼{3 ˆ‚×· Iä /Ü.ÿõ o^Ø Qÿ¶N ¨†Húþ,‡ùÒ.aXa„¡Á/AùÞÿê$QðÁ‚°Kø0j L" ÚåOduKë¶#¸j86­Þž—ÿó@!„¤Püeà A}ød>¬ê `Ö Â¬°aì* Ô•‚ ãPØ`>Ïýwÿ¢ &2%p‚b'‹˜3Q÷ý&1 ¡>ºZˆá‚¶#šÑЃ­‚>öÔ_ûàa!áZL!r¯ì3ˆ‚ ¶,è?ÌÁ ÍT½°¢4 EÄTàÃJ¿ÿKAaÈèH2xÀdƒ$6zü aÉÈ":…½ÿ6—ƒ‚–Á\6õhÑ Ur² á8#á–ßÂè/V%ãþŽ85úYÔÑÀËaAÛ - €ÚôÁBãìD_Éâp3#þo$]š‚8Xüp¸â®/…a¨#àCã}åD]5ÇÿÒôÌ4Aò»èê!Õÿ¥ÿëj¬=’9 m'þ²ÑÀ_úøAd3Â< `ßâ0k×ÿÿðµ}d2CRiLï¥DpTíÿ׌$øfwÿdp[àx ^ÿ¼¾Ð8\GýWÙÇÿ½/zö*lýt¿ÿŽ o ×I‚´ ”/ÿÐ[…ýð`Сµð@’ý}T%!’ °@ðÂp¾ðD59E>˜!ý Pcÿt£__ßôqîò ]Bÿ<2èC0@‹§"×ðA¸KÿüàDõ@µ\Ïçð½y €es9 Á¯û x å¸":_Rè!ß|†¢^‚ÿì%„*Â>EÿÿÈ a³Ý_Ј©#†„‹?üpˆ„¿ö!N#c„´xH$1åƒÈQφºÿAÍAƒ„ƒýBøü/ðK È3_y-ƒBèðmÁ›ä fO‹Ë‚ÿ pß¿áÈèПü¡÷ùŠÈ-޲cøKA1=.H þCG×~@ðh„kH×ðDtÈ Žg.bþ×쎈á`» ½kĆH68&H2è,/x(MòAžd}Ú¾@ðw°Faž/…ì41Êw¼uðKvÁÐ[[ þ…úXAyÃ66^6Ãh†_t"ÜݧuÖ˜%àà @ðiÿßåxÌÁ«×°ÐñPDeð@´:x¶"ܺWÂzp@ºÿXewU·ÿùO ýX3Žs„°Y˜gúZ@„A²>ʱ `à‡ÿý2:ïôÈò ]ÿé|,(ˆ¯H? bÁ¿ x.íì5õö‚_ð½°¿ZÿÂä & á¦a, Mú xl·~ü@¿ý/ô Ã3FÃîAl49CÿÿLÐ,2F{/„"©~HÓÿô¿ý×Äur c²Ñþ®+Š ÿ®‚®÷__ÿÿëü„ ,‚Øncÿ :b¬" aª9dþ ?ëýÿûÿÿº<ªÈ^\†H(‚è}÷6 á¬`Ѱ`£ß¹°gÿûù €,qÓÿÿì _éñkÉÔjÈæÿÈÏ­œF¸d9 )‹þ ÿÿñ¨O÷oøWò ظ@˜‚@æ`F÷!\¡ë²1Ë"R#À¶@äH2A¹\^ y^BÞ¿ÿÿ§éá‘Ó ÑøPÿ„.ðb)—Íçl6œÌ2A\×Dõ§‚ X9Ç(ýÿÿ×’†= † +6 `Á g£a˜/רdæc•Á‚!”9C”á#ñë×ï‹×¾#¯ì†HG!'ÿþ>Ä£D X_‚ "0aÉ‘ÈÜ!Á·®—É|Ô _ ÷§äÐÿ¿àÍ?O böÁAA«àÁ¨30ж`2@°Žb E87„ /‰Ûi?§ÿ¿þÃ:NEÀðÑAÔ2œè /ûu‚È“. `ÜYCª‹WÿÙÉÃW '@ÒÿýøÝŽaÍ3`f[ ãþ¬lø-‚¼%õ¤5Ô^Ù¼ð°ÂÁ„ÿÿ²’â/¶#ãöPæãHd†eÌÑ‚/—ëÞ}DàÿÄG*àØI׿µì>þê@ñA”ä2Gûø1@Ñ Y€M". ÕZC „GccØa @°Ø^N¾Í‚áƒ$悇I— €$#ƒc×Ã!0Ñ— S´Áè _D2Aý?,%à ´8"¦ \GÒò†”Æô¶Gª½)ᦂÂ*  ¥ýc! „Âýaô'€†,Ÿþ@ðÕб֛øX‘&Ž[Á¡óF}@ðCßlP »…´¾œ$ûö@ðË3`» xkÿ‚Tà®@ðw7Ð/p„ChÎ.g]&C$gsáNC;’²qûÂ!’ˆUö¡ð‚þÿýx@½úßÁø":‡ñDŒž`Âq\ ÃgPh ý#Ëä‹‚C‚Ot ÿõçÿÿõV_#º ¾¤hÚwîÈ0[ ®é§ — ÞýõÈT²1Âeqýä°2@Þ¿‚ˆ½#>p A„<ƒ¯ÁÃ$gÁÈàxgßö:ÐO¯ÿáÐ'pB"/ÿýtqý|(7B™˜)ï¢_‰ WX@ºÿÿCÈ þ¿ÿ¯Kó~ßì O_É¡p¨Çò H ò ‚lîÿþôp7üˆÌH,_õ_PøëiÿÉ H5º6ˆëe¨¢ú-×ýWü.™¢ëàH+6 ÷{c  dÔ%\rcáƒCÈd†Z¯~ì VAAâ7ÿÒ²†x. 3í[ñòR†‚øC‘P<h{d%NC$› Å ÿÁ† Ã­¯×üD„Ÿä4P7úY5 ¨2|Ž·Q²á’ @Ã×þôÙÇ&æÖT#1Pê 0—þÿ8 Pÿ+?‘PÛøA0BC$A: Al4?ÿkà¤p9~Ú ÿõ 7~”[>Û²èÌ0¾]t±†Š¦ºé1Á©‡î¾¿ð†H3ä<¸$H³ÄFcŠD Z[Ø M„4 9†`Ç×þ–òõðZÊ=þ"¡Aþ 4‚g€9‚·jÁ}ÿZÏÿ…‰ÿá„ `‚÷Û:¶HEÐ!X¯ÿ×ÿ´-ÿÃ:"àf^µ²ôňf#`pG É AêË­- _èøfà KÅÃ$ö·LD!yÁB!¶GûŒ @Ú…!’ 7úC¯í €k=:@Ð2!AD1ÿ³8V$¡èøf/ xgŸ‰ €UsФœ&ƒÎÜbA´Mˆ«»ÿëûÈd‚°Ä" (ÃPã0¢Ì$Ö0eYuI|¸dƒø [_É c¤G÷hDE Á=¥ 2œ00h/KýÐ1"ŸÚ\20šapk`—‚g‹ö" ÂCìú"$Á¦6kf×ÂY¿«¡!<Ì3µ…ˆ)TƒQè'×h†@¸@Ð@ÞòžŽð…á˦,Hd/ÐaPL<-a²‰G Ù‘òð^ÎŃ\†HXBC hå!’8Á °ƒLáÜéÈ4 •ˆˆ­ùŸ!’  hœ~¢„]0¡ À¸ƒ xhÂsýV*‚´ïÈL†~F€ÅLáÉ0öÂP@Á9 €Ë„hQÄ¿I”A¯Ý8#0!„P‚#¦‰€<)¸¢4 "8Ç‚(xh"’AŠ¡:ðBþ¶:O>Ú |å Ù‡ x.û‚.ƒdpPÈá „pjŃá:LÌ  N“£0ÎÑð¦ = ôÏA(:m9Çî8Š•ÁD­}X~ `þ(2$Á²‡ÛQjf‘ Âa ü†QÜ‹Dû ú_J¾ÿQ‚>`Ð&G\DD‚ÁQ¢S³šþ9 ÔŽvžø ¼ ¾ö\ ÿ«a!oC¡AÔ†HiY³ÿ ½Ô¿iÿKü·û)û¡C!’ !˜#èHdc”„fÖ?ûÿþÈ÷ãÞÔ( ù@ C„ÞÁÌ.©ý øùyáttä <!A ˆð‚H*ƒXÿÿý}*‚3 áê$2SÂ`¶¾ Jñ¿ÿQÿÁýCÚMg‚W ÖðÔù¨iý“/ûÿ¬kì 2A³o÷*K!’û¯Âa(þ°:Á;#§‰ €n8\邤2A¯þ ÂCÿúø$"ù hƒ— x©Èt§mÿ Ÿ…ŠüèŸú×ï6üC$( ?ø$$¿áÏ>ð¡Èþ`¿ä2‘Êñý’X`×þœ"‡él‘{ÂëþÑÂÿôq$àc+!õÿ‚ !† ¨‡Ù§K¯ð›3EÀðUø":á!!©0@(ÿöÁá… x#𤑿r !gï@¯ð´?ÅzPUÈÐ4À¶þ©F†ÈJˆˆÊ„¡ð¿ä H xn:ÿ  –C$3þ);*h†)¸ºQúýP÷é{ x<Ò@ŠçÀÉÿÔrSŸÂ§ñKKÿÿH%èDóuü ¦28"Ä[¦˜ö ¿ÿý„ Ò È ïø@„Gl¨@è_ÿì5 >… Óïð@°`Á×mA‚_ÿ<,ü" ølá aOõú Ð Qñý(÷ûc@½Ð% Sgõüà½v ÿÿྺX.@¦PQÿB½GQ+÷ÿé ò fõ‚# Z`tl¿‚$ÓÿÿѦ\z’Ì998+² XšÿãÝøC$7kýöDs¹аÂ_ÔN hCuøhw¶•ÿ£€x3ÿ3ŽxS„×ùjú ^¤G‚¤Ò ^‘Þÿò ¹9Z!×ð@-ÒŽR"p;‚©Nƒì`íz¼t ò…üDŽÿþ‚¾C.ç>^$ÀÍ, hayžG¾ 0J6ôÕH ÿƒ$#5þÛAwøAj@²pdœ¡‡pЈ;g8AëlE2>Hˆñ}C@”6—‚>ƒH5íÄC3ÿðAƒ×@¿!”å;Ñr ‚6×qb" ŽH °Á }ÿ~@ðGÿÿ„ð\ ¬±ÈÇ*  vaÈfŠ"°[ xh÷ØA‚ä° Œ@½tÒÿÂ~ý´¢s²¬ÀÈG ÙÞP ÿò Ð8h.#² 2œàÓÉw¯ÿþþâùFGdp;“.A‹‚dtÊ™;¬D3ËÁaØŠ‰ŒFÀü4 Óÿø¦þ6•3Ø! víyð.á ‚ÔlDYÆGlŽ8e tEþÌÁ¸/úë[!Ç (EÑvG°3zÈfp œ% ¬DDDY„tÁqaWþÿ„¬è@ˆ1ÄDÔ Þºö–¿BHv_Lº>Œf ¢-²œ¯8}Úÿ÷Ͳ‡  uQo›a÷ÿaÌD|ŽÏa`ÄGöÿø‹ v ú¯‚#ø~?zˆˆ‹Sùz׿î°ÌóuCÂAÈ–¯¿ý!ï†ì˜éuþADñPÌB ˜ f…ÿÿèŽC-_þÁ¬‰ÔòÇÁ{ÿð»ÿƒd6xÀaLÀ¿µýïôl ¬ a~C4{¸ÆDLØÿø(ŽùÿðS0Û³0Ëß¿×á• xlü_¿i }uûKg¢8À“רA0õKðk¶Ã#¿ØT¼ A_ëïZÿƒÿH†h;ðÙJÇïÿÈg#]ëúŠÿÑÏ|Wù XöüÎ34ÿ#`Ú`WúŽé`×þÿRëøKaÕ²àT ÿôYðC༘¿­ ·ÿáÿ]Ž‚úÿÿáz’û‚ÿô·ìÐAò.+þ ýÁmqýz÷÷IbÙÏ#@Ùãä…ßë Å÷ß¿÷󨿮íö×”o:€À¹1©˜/÷äš#¯d3Ç W|Ì6ÿŽŒÀ¸|'†þD—ûüðÌx: G?ΑR8 ÿ÷ :ˆ[ÿûƒ C43k¿ÿþ:±‡ÿï¿0ìE.#ÞÝÿÁ„ÌÑp[Êp2†Ïëÿá„"C$5h?Ù׿pÈà¶„âïÿ²8-‚˜4l!qƒÿßÚhHd‚‡-ÁDp¨·ÿûB$2ATb8Ø_û†g<ûBC$1­ä ß«!Í„Eâ C¼ûƒ3# ÉäŽpÂD X%ï®Áx(5¿öQ™›Õ¾µÿèDt=‘Ó_ÿôl3ÿî(È*€·ÿ9 t@Ð ‹ïûä  Í`Šì ÿÿÈ@â Pÿ»òÐÏ'š#Oÿþ¡ î†ÿÿÓ¢ñ,‹ÿÿä ¡Ð‚(xd €¢íÿÿ Mc! %‚ÏÆŸÿ¿ä a¦rßGW KÇ4ý—×øÈÐáAà”9u KçÅNüGýÿ Jh+Ê:>‚"YNÍŸÜ(!iÜØŸïÿ l7( ‰©øîwȶ¨2,cü(: 5Fi7ÿÿÇÁ°ÔŽG‘€:@Úh)…½‘í*i#Á½'Iÿûû[‹BÈ3q Ü!–9ùh2Aá ã‚3 í_½5H]»ÿ׿a˜Gj§ L†Yò¼ƒXä8ùhW0èhé xLÎühØŒ¾îœ;ÿ øŒøhÌÓ_#ëé¡€ÊàÒmÂXfâÒDxØ&˜4†>kêmZbjÏÿ^@¸åpâ?C8ä €©Ðt"`‚ÕpK·VúnÄÿûñ ?ù˜sÑP„GLᙄ4¸Ž y`ƒÖðÃíwÖÝ+^‡ÿþ¶ÿ8¸‡ž 297MƒÐ»½ëWÕCÄVÿä¾ïýÿ×Á&Ì´FÈÈEéþ¤ö h/ÿï˜fƒ3¯×ß»}‚‚ó²…ðÎò€µ§‚ ƒñÿ.ÿèZÿýÿ`«ðø:‡£h&ò€Ø+ýÿú ïÒþ÷ßö %õÿ~º6¡ê Þ@ÑG¿ûÂ#¥ÿ¯ô^{ÿpÿÿþÈxp¹ÁÓ ò`°¢Rã‚õÿá2‡ÿzþЇ_àÁ¤è/¿ÿÆÖûä Á¢Ê‚ ´Ó#æ€xPÿøHÿø´ÿ«^¿ÿÿþü˜®Z„Ä__÷úAëþ@ÌßûA> ÖAý½õäÀ±Î/#û}? ìþí'ùñY0VçöZÚ ëƒ š‚# @Ú~÷Ç3ïú"÷_á/ÿþŸü6¤Î B ÐC_ó~ÐúÿÇåD`4A‡ê„A¬p—º ÿ¥~ƒw@»ê@Èàmȧ·ì7ÿþfvûU½B'_Ñ€%¿ý_ëo‚í`ÐɘG[I”:_ÿÿ]ða  z Ÿ×ÿ¯ü0h5Á`¨b.ÿ [ÿÿÜE;Lð²Ö©·ì$)~° ÿ÷üE5/™áÞ¡ÿÕü† Áäh5à·ëxP‚÷_ëÁ¿ˆ‹¯¯ÿÁÿ°¶r.°i3 ²sÿÕ<¨F8/ëÿÌØ5k—OÚÜ%íú¿ƒ)ð±9¿ÿA¡>_ÌS¯£ ÿÿp…‡'°¯þ¿ìŽa †H)⯲>ÂSá(7¡}Zïÿ \.ïáwÿþ.$2CC›ˆH8~ߌcüÌÎ'ùHÿÿ×ÿð—×½ÿÉw?¡qømzÿq"Oÿ¿û®½¿õÿÈ1Š¿ÉèZh‘‘õá‡÷¯íÿþ{ ¿Èhÿ ãþþíþC \çÓ›` «ïþÇ ¸0ÿ¬|®þÿìðc•e~ÿÞ¿rØä8Äç ŸÿçÒØ™§ƒä/ÿþÈÇ=_õÄD}úÿNóx‘Ù€Uóba7MÿøCµò “îË•®ÿ¾ùî—A‚®ßí+Q x( ‚hl §A6“ÿþ·oü/ˆ‰ž¿ïòâ®HŒ(5?~Úô@дM?I¿ ÿ„}ÌÀÈþ¿ø]w/1½ù'û @çƒ\ƒDî»{… h¤-Îdz «­÷ùÿúB"EÏëÁÐ\E׆¹ 7ä òWM ×p¾¯ f“!€Ó¹á¸B÷÷ WÿêߺÉ>:8aöÚ Ð@Â! C¶»¯jÅ3 Ç?¦šhؘ'H8?þ?ÿýàÿàS0_ø[dtï ÑÇÃHd¸‚€Ö=×~¬˜AÈTá³b:n›«¤:÷ÿýöAˆÿ ²@koýרvÄB!’·:î\öš ¶ ³Mg“›¤ÚM®»½ÿïýþØM[Uæaµ‡ÿq¼3A^rC$2ŠpÌ(Í·\{M&³@Ð\&žŸzoþ¿¯ ÿý¾ôä4àȉš†hè9ð`Âr$2A­ÈO˜Ci_ßÞ÷ûAÁç¯öÒl Zýûÿ! Š{‚ºÞ„†H5ÁG!à .5û«õ¯ßý{Õâ"þða¥„¿ÿ_°eòùtG €$#ävGÃÃ@0\5ˆÉQ‰ÚÿOÿŠÿûuYs§ï_ÃmÓk¯ÿïíˆÈgB0¾ ´Ö£j„öºM׿ÿþ—Ä0E;. Ë伿öԌԷAÿÿÁɺ6ŒFs.!á6“®¸î¿ëùŽÞ”ú DD„qiÚü1LD.ÿÓ¦^BC 4Üî:þÓjÞÚýãÿþ]4ÙóKD%ˆh0AØ-Ã@ÁsV`Ž·Þ ôA©ÄP°äpáí‚ÚÓú\Çú¿ýü ظ²p\8ˆˆ°Lޏ‰›Kˆ†]ÿ¸È‡Tl4AÐPûuµÿÿþ×øç„|UXˆˆ‹ZÿøhA0EÔ ®ìWÿãéu[i<# èØjÃBÂÿD28 Q¸ÕÈk¸÷ä  Nÿÿ¿æ@m-zn¯r0qì¶Õ@Øÿ6‡ˆ ÿßÿ¤ÚqW’²hè7]8o jd6ïöÈ9@ºÂ‡þ@Ø ¨ ¹ÓOÿÒÿø»µCëí'wL†ˆF€Ü¸*Dp:ƒr&áÒ¿òÀÏ4 ³ˆ¹¿ÿï,rwé,ø» …ðþý¾TÔƒ{LÀê{¶s<ŒÀÍ3¹ ©¡ÿä @œá;O¡}þªÂy²Æ°ÍcÿÞš Âjƒý¡ ¶j?ýȆ” Á¨Ø©7ÿéqÈb‰Si²ÿ0#!hŒÁ%ÿ»ÿ h õ÷3y±[¤ûÖFÿóïá(%º Ó÷ÿêþê Ž ûiˆµozjŒæh>ÿì4³‘º]‘úO„°dp·ÿþ®ÿè6@Ì «èB3Âÿòp«­¤ßkù+*âýzä3ÝVö?ÿú»¤þ‚xÈ2y M:FÒÃn¿üàV‡_®“{\E²~Ùå̸úz¿m-ÿÿÿ¦È=¤Ù Y÷øTÇ xg¡}Ž.{ÿôþð›õtaG¸çb/ÒÚ¿p—ÿÿöL}wíõðPQëAùÛ¦Òmÿò`®`†­)†¶°ò`W ÿ¾Du¿ÿÿ×ÃV“ïë~õÿ÷N¶¶©ÿúóLÓ Ð t ¸O3‡]ÿøÿÿßúè]oï¯õÿ'í¤ÚLlýoP¶ð°Ò)rvˆœ¿ÿ¿ÿþºÿý³ú_ëí¥|t×ÿ» `šwJÂÄ7[téá¿ÿÿÿ×ô´¿ÿÿÿ½ël»V*šf?ÿï@– ªë[wTÈzÿûÿöÿûaÿ×ý~“iqЈÿþÙC•Mu÷ÿ ¶ Ý:˜àÄÔ Ÿÿÿÿÿ×ÿÿ|œ]>ÚÃ]¦f_ÿÄkýÿù ( Uœ ý÷öÒÿ¿l/uµ÷ä ûi]m&ö+dúÿÖÜ‚ÿë§k_°ûÿAkÿ·ýsÿý>ÕÒá¬SÂ(q×û¬_ÿôÕur¹´P0ô ¥ÿÇþ!µÿt®ëÛá™Ðÿk8/úÿô|à ÓmˆiƒýÒn¬+ÿþ¿ÿ¿N¯PÉÎ-ª Ž¡ÿë§o]ÿôlJúW¿øt®¢¿íÕ6 Î>ÿÚWuVÐdp%_ÿÒm‡÷ÿûä6_ÿ¶· ¿ö¿‰ l¦ëû~Ã) 5Pâ?ÿÓ‡_ÿúÙ…}ÿƒÁóL([þ>—ý6• ¶0 æ™p%‚ÿ­†-ëÿö¿´ýÿpLc_øþ¯i6­«ÓB#ÿÿ²ÿ¥ÿÞáAÈG(ä3ÍŠÿëúÝ[J0ÖÎ03~ÿûõ¿×ÿò`°?áÈ£… ÕÇ;•¨ÿýþ@‹Û iÓL!ÿÿÓÿÿÚþü˜w[5(WÿîÿÅ1A¡_þˆ] âÚ½ïÿÿÝcßÿÿï_­Ð`úÿÿ÷,ÿ†ðnCÂïÿÿ‘i˜(÷÷ÿßþ¿ýá?Û×ÏXíßÿúìð€ãÿÿþþÿÿðp×?ÿÉ¿j-¤ïÿûÿÿßß»Xeòt†@-Xÿûëv–ÚN–Ú_ÿýÿÏ þ ¦@Oûí+¦ý½ºí/ò`È?ÿÿÿÐoð|†H/exCØ¿¯^Púú ýÿé¿Ã:†H+Œeˆ9 ¥öÒºm']Šl%ºNá‡K¶þŸßÿ_ä *É !â6³`h ¿ý[V+¦)Xõƒ Þ—kÿÿµ¿´C 8îqÓM-ÿ¶“a(ÚÚkkØáéÿÿßd2àb`# ûþÚpÈàv uµõj,›ÿÿÿ¢¯6%'A;÷±L*g€î p×½à»`a+¯ÿûÈ Ü£ žŸoa4B Á4Ó ˆ®ûA ¿ÿðhàÖ鬨Mö¤1øvG¸JÚº¶—÷ÿ‰Á¾ŠCXôí-ÿñm¢è,6Hrܧ˜‘ #Ýkï¿ùQ£ë~ñý¡„l‡B Ù õÿûä ’`¨wö¿ñÚ+"6{//ÿµÈ îœâ/´lG²=ñÿ¦c/­‚" »þûÈ‚Ík<ƒAm'ÆîªÿdpÛM]ÚY0l„íD==0Ânøþ@Êñ¦A|D~ü‚==d ÁñPhØŽ´˜iÿébg9èAtcëÿºzÈ-‚›üsèÙ‘ý==>ò?û¯,ý¦ša ^ cõÿù°T–¯ZÝ*ý%AÂÐÌs\âN« Ø­û_¥÷é$¹F׺¿ÿÿýßÓ÷Õ~û_Aø"&ÀÐ6ã¯õý˜sú]Wãú_ßÿþ¿ß´·ëÓ~GÕ¿ Öõÿ¯ú¨¥ÍƒOô¿ÿÿÕ/ýEÒ_Iò 1Õê×÷ÿÿÅÑ ) ¥ö½õÿþ×ÿëu}$ú¾AßÓÿò`ÒGÿäí/çò9Å ïÒß_ÿû¯ÿ÷¯»ëÿþ¯È†'÷·áÿ¡na;¿ô¿Kÿÿ_ÿñõý~ÿñü‚Ø+z§þ½ÝM qî×Kì/ÿþ—_[ÿZûÿäÃ<„s‚÷«øgBïÓˆt-öô²OÇÿÚõºY¬¬tµë]®¿Çÿ!’|…§ÕúTN›Ñ ÿöA¿òZ¯ýµúÈ0át7ó¡õÒýÿò!«hhÓk··Vo{iúP_^¾°_ý…ÿCˆl3½Gëgïò1ëÿÿ!’ tMFFz óqcºQÊéµ÷÷Hqé^ß65ÿ±ú]O˜->ëtÞ< óÃøëþ¾ÞëHb)ÈÃ`ûÿãú(@Ý…tîÿKM×áý.Q¾Òˆ½› ]éºÖѵá6‚~ÿÿr+ïÚPÕ7LÂ84_1øƒ}¯ÿñv=0ÖÇtªÒ» õ ˆ„ôx# #ÁÍ7ÓÿMÿ×ïMÿÜôï­~±Q¸‰fŽC?Dÿ¯ÿÿ] _õ¥¥N–ä>Òa¯ïuÕÿâE¾ÿ!®:^ÆÓ$A ® ÿ¿éÿuéˆétÕúD¦é¦êƒëd7ýý|m_ÿëõ!¢_§ ø$ @^Ó!ægOßÿò ÷ÿä0ï~?¤;XAWÓ}»¯ßýûÿÝ}6¿°„HÀžGŒ hxa&סýÿ´Èàv‚¿ÿÿëÿÿ÷ÿÄDDE¡ Dçwiv¢"}Õ}¾"@ê VBv«ÿýýÿÿÿøˆˆŒóšöškÿûÿ">@Ô L~ Fíÿÿÿÿ߯õûñd|ÃMVíû¾ÿ§‰`iŽWºÚ¯ÿ÷ý÷ÿõíÝþÞ""?þõ½;@à„?þýÿ_ÿÿþ×ÿþÿ×&ý¥¶¤á—Äò%¯ÿýý]ÿ]ÿßûÿ_¿{Òí÷i; çrÍËßÿ×ÿoÿîý¿0¯ôÿþ¾ºûû Ô vã•H´?¿ÿ¿ïÿïÿûÿÿ¯ûÞ®›K^2P7ðBq[ÿÿÿÿúÝÿ_øÿ¿Óý·µool§Kj.þþþï÷ÿöÿúþÿÿïü7¿ö±`–Òÿý_²:þÿÿúýÿß¿ÿÿ]ÓiE+_þßÓ*ÿÿÿ÷ß¿Zÿÿ{ÿÕÜÿÿŽïýÿÿÿkÿÿÿûÙ¢M4È踓ÿÿÿéßÿþþÿÿÿÿ†)„ÏÁÿ÷ýýV¿ÿßëþÿÿwïí«Lÿÿ_ÿÿÿûÿïÿÿþÝ´?ÿÿÿÿúúÿÿÿî?ýï~ÿßÿÿÿÿõÿíÿÿÿëÿûýÿÿÿõþÐïýú¿þÿ¿ÿ÷ïöÿ]ßøÿÛþÿÿÿÿÿÿ÷ïÿíÿÿïÿÿÿÿü޶ÿÿýýÿÿûÿÿ÷ëÆÿÿÿïu¯÷ÿïÿïÿÿëÿÿÿÿÿÿø¿ÿ¯wÿÿþÿÿÿ‘ÿÿÿÿÿ÷ÿý¿ÿÿ¿øëÿkÿ¯ßÿÿÿßß¿ÿû÷ø_ïÿoëÿÞ—ÿÿÿßÿû×­ïÿÿþÿ¯ÿ¿ÿ ÿýýÿÿ¯ïÿÿþ¿¿ëûÿNÿÿûÿÿÿÿÿÿþÿ×ÿÿýÿÿÿÿ§ÿÿÿÿÿÿÿ¿ÿÿ¯íÿÿÿÿÿÿÿÿþ½ÿÿÿÿÿþÿûß½þß¿ÿþ÷ïÿ÷÷ÿýÿþ¯Ûÿÿÿÿÿÿÿßÿÿïÿÿÿÿ÷ÿÿþ@ê—ÿþÿ×ÿÿ~÷ÿÿþÿÞ@êpýëÿÿëÿýÿÿÿÿL®_¿ÿ¿¿ÿÿýþ¿þþ¿|Ð2ì¡ÈN‹¿ÿÿÿÛ¿¿ïÿÿ÷·ÿ t;6Fªÿÿÿïÿÿÿÿwÿÿßù˜69ø!~»¾˜[õ÷ÿþ½ÿýß§¿ÿÈÀ¸à‡ÿë¸~íÿïßÿÿïûÿÿò ,r8!ù{ÿúÿÿÿþÿÿÿÿ­ÿÿ rhˆ;¿ÿÿúÿÿ_w÷ÿúïÿ_õȃf'ëï_ÿ×íÿÿÿÿÿ××ÿäEûÿûÿßõÿÿ¯ÿÿÝ÷ýï&ƒm— Úýÿÿÿÿýÿÿÿ_ÿýùh#„?¯ÿÿýÿÿõÿÿÿÿ¯ÿÿòÀX²&«÷÷ÿÿû¯û½ûßß½ÿëÿï^@˜c‚ÿÿÿÿÿÿÿÿÿýÿÿÿä ƒºÿÿúþ¿ÿÿ÷ÿÿÿÿÃßÿÿÈÀ±Ðÿ¿ïÿþþÿÿþ½ïÿÿÿÿÈ‚"9Ü„ƒa ƒ<3G8ùXiÁXC޶¿ÿÿÿïÿÿÿÿÿÿµÿ÷ýüZhø‡@„|Àx ? K µ_ÿúßûÿÿûÿúÿÿÿÿý}45"|J:ƒpÎG -HçA¬ÿÿÿÿÿÿÿÿÿÿÿý¿ï¯ÿ­èZ<ðg$<ˆàs )P5Ùܨ[÷µÿÿþ¿ÿÿëúÿÿÿÿýÿÿÿÕWŒ‰©dL!p†‡.ò¡1†š.·ïÿÝÿí÷¯ÿ{ö·ýûßßß¿íû^¿ÿߥ¿i¦¸":¦šC<ÊÂ#•ær99Ç ]òÐkŠä/Xÿÿÿÿû÷îÿþŸ÷þÿÿ¿ÿý»ÿýíû¥þ?A¡Äd'D$ƒC@çrCä ¡ÇŸS~~ý¿ÿ¿ÿïÿÿÿÿÿÿÿÿÿÿýÿÿÿý~d$Ù„8ç†; màΙCÄzþ?ÿþÿ¡ÿÿúÿÿÿÿÿÿûýûÿÿúýÿÿUô 0…‘u G™ÈgÂ|°6í6#M?ÿÖÿ×ÿÿÿïû÷ÿÿÿÿÿJ¿ßÿÿýÿûõл Ùd(ç9ç‚ q^B6W§{>¯þÿ÷ÿÓÅßÿÿýÿÿ÷ÿÿþïéû·ÿÿÿÿ¿ÿúÿö°í Ž4È7r9¬…â°ƒÆ@Ù_qÿïû¿ÿïÿÿÿ_ÿÿÿ¿ÿÿÿÿ«ÿýõÿÿ×÷ÿ˦¾³àÀd/ª ùPirñ?ãÿïþ·ÿÿß­ÿÿÿýþ¿ïÿÿÿÿÿÿÿÿ¯ýÉOþþ·ä XäBÁý>·­ýýý¿þ÷»ß~½ûÿ^÷½ûÝß«þßúúþ¿ýþÿþïÖþ¢*߸{ùá?ÿéïùCþ¿ÿ~ÿÿý>ÿÿÿõïÿþÿÿÿýýÿÿëÿ¶¿ÿà¿ÿ¯4¨"k}±~½þÿÿÿúÿÿ×ÿûÿûÿÿýWþÿúÿÿÿÿÿÿÿ·ÿýx[ÿ hXŽ¿ÿ¿ÿøþÿûþ¿ÿÿÿÿþÿÿý¿¯ÿýÿÿÿÿz߯ÿÿ¯ªÿä Ã\r7Mÿoò‡ßÿïÿÿûõÿÿÿÿÿÿÿûÿÿ­ÿÿúõÿÖ¿¯ÿÿëü˜hšÿÿ}¯þÿþÿ׿ýßßÿúÿßß÷íÿûÿßúõõõÿÿÿý¯ÿ÷ßÿ[h š'ÿÿôÿÿÿûÿáý×ÿÿÿÿÿÿÿKÿúÿ×ûûÿúÞ·¿ýÿ~ÿÈ-‚¿Cïÿÿýkÿÿÿï÷ÿýÿÿ÷ÿ½ÿÿÿûÿßÿÿÿÿÿô¿ÿþ½wÈ-Š9å‡~ïõûÜ;÷ý¶ôýü-ÿû¥íÿÿ]½ûßß·ÿïÿïÿÿ×ÿÕûõÿÿíëÉAÈMnÿÿ÷ïýê¿ÿKÿÿ÷ïÿÿþú¯¿ÿÿ÷ÿÿÿûÿ¿ÿþëÿë××ò ÉÞÿÿßÿü÷ÿßÿï_þÿÿþýÿÿÿÿÿÿÿÿÿÿÿ¿ùŸÿúÿ—_ÿÈd· „ÿ¿ÿÿõÿÿÿÿ§ÿÿ÷÷ïýßÿ××ÿÿ¿ÿÿ_×ëÿÿ¿_÷ÿüuÿY €S¿_ÿÿÿ½¤«ÿ¿ÿý§ÿÿÿëÿoÿÿÿïô]þÿõõõ÷ÿõ¿ÿÒþ¿ÿô ÿÿýoÐÿÿ÷ÿÿÿÿÿÿýýÿýÿÿßÿýÿ÷ÿÿþ?õ¯ÿ¿þ¿Nÿÿoÿýÿûÿ_ÿ¿ÿýÿýëÿÿ¿ÿÿ¿ßÿ_ÿÿÿÞ¾ÿôÿÿ¿ÿßýÿûÿÿïÿýÿÿÿÿÿÿû¯ÿïÿÿÿïUÿÿÿÿÿÿÿëÿÒÿÿýöþÿÜ¡Â#§ß÷½Zß{ÿ¯Þÿ·{÷ýîßM¿ßÿ½ÿï÷Amßÿÿ­ÿõþ«ÿ×Ýþÿ_ÿÿ¯oÿ÷ÿÿÿÿÿÿÿÿÿïÿÿÿÿýÿÿÿÿëÿÿÿ¿ÿ¿ýÿÿÿÿÿÿþþÿ¿Ûÿÿ¯¿¯ÿÿÿÿûýý5ÿëÿÿ¿ÿÿÿûÿßÿïÿõ¿ÿÿþÿþûÿßÿÿæÿþÿÿÿÿ_×ÿÿ_ÿÿÿý}¯ÿõµÿõUÿ¾ÿÿÿÿÿÿÿÿõëÿü÷ÿÿÿÿýûþŸ·ýÿÿÿÿÿÿÿÿúþ¿ÿ÷ÿýúú_¯þÿïÿß÷ýÿÿÿÿþÿÿÿÿÿ~ÿþ¿õÿÿúÿëÿÿÿÿÿïÿÿ¿ëÿÿÿ¿÷ÿþýwÿÿÿßÿ¯ýÿÿïÿÿ÷ÿÿ÷ÿÿ¿ÿÿÿÿÿ§ÿþÿÿÿéï¿ÿßúÿßÿú÷ü?õÿýzÿÿÿ¿ÿÿþëÿßû‚)ÿÿßëýßv÷÷ßûÿÛÿ¯KwÿÝÿÿþ÷Þ·÷ßþÿÿÞþ¿ÿÿþÿ­ÿê:Kþõÿþÿïýÿÿÿýëÿÿÿþÿýÿýÿÿÿÿÿþÿÿÿÿßÿÿÿÿýûÿ÷ÿÿïÿ¿ÿÒÿÿÿÿ_ÿÿÿÿÿÿÿÿßÿ÷ÿûÿûÿÿ¿¾×îûÿÿöþþÿÿÓúÿÿÿ÷ÿÿ·ÿÿýýïûÿîÿþïýÿÿþÿ_ÿÿúõÿÿÿÿÿÿúÿ÷þïêÿ×ÿþÿÿôÿÿGþÿÿþÔòCÿ×ÿZÿÿ_ÿ¿þ¿ÿÿÿûÿÿ÷ÿëÿ¾ýßûÿþÿÿÿßÿÿ½.‚ÿýÿÿýÿÿÿÿ¿êÿÿÿÿÿÿ¾ÿïëÿíÿÿÿÿÿý_ÿûú‚ßþÿÿúÿýýÿëÿÿÿÿ_ÿþ©ûýÿ÷_ÿÿ÷¯ýýÿû¿þÿû÷dàh ÿÿõÿÿÿÿÿÿÿÿ¿ßþþÿöýûÿÿÎ?»ÿíé¿÷ÿÿ÷ûÓOvïýûøÿþßÿ¯ïÿþµªÿÿþë¿¿ÿÿþþýëÛÿuÞÿ÷ÿ}ÿÿÿZýìÂCÿÿ×ÿÿ¯ÿÿÿÿßÿÿï»úÿõÿýÿ¿ÿÿÿÿÿýÿ°„_ú×ßßúÿÿÿÿúÿÿÿ¿ÿ¿ÿÿïÿÿëÿýÿÿõëûÿÿïüƒwÿÿýÿÿÿÿû×ÿÿ½õÿ×þÿýÛÿ¾ßÿßÿ_ÿ~¿õþÿÿWhGÿÿÿÿÿùÿÿô¿ÿþõÿÿ÷^“ÿÿÿýýÿÿýý{þýýþð‡ÿÿÿýÿýÿÿýÿÿ÷ýÿ÷ÿÛ¿ûÿýûÿÿÿÿÿ¿ÿÿý qÿÿÿúÿÿÿþ¿úÿýÿÿ¾ÿþýÓÿÿëÿÿßÿïûû÷õÐÿÿÿÿÿ÷ÿÿþÿÿÿ§þ÷ýw×ëßûþêïýýïôßýûÿÿîÓ'X_ÿÿ_Þÿÿÿÿÿÿÿÿÿÿ¿ÿëÿ÷ÿÿÿÿßÿÿþ#×ÿÿýÿÿÿÿÿõý}ÿþÿÿÿÿýÿÿÿÿú¿ÿýý0Cÿëÿÿõÿþ¿ÿÿÿÿïÿûÿÿÿïïÿÿÿÿÿÿ¿ÿÿí8þÿÿúÿÿÿÿéÿßûÿÿÿþÿÿÿÿÿÿÿÿ¯ÿýPëÿÿ×ÿÿýÿ_úÿßûÿ÷¯þ÷ÿÿÿ÷ÿÿþÿÿÿLÐ ¡¥ÿÿëûÿýþ¿ÿþºÿïÿÿßÿÿÿÿÿ÷æÿÿÿûö\Kÿ¿ÿÝÿÿÿþý÷ÿöþºÿïÿÿëÿÿûýÿÿ¿þÐÿÿßýÿÿþÿÿÿõ÷­wûÿßýýþÿ·ïûÆ÷¿zý÷têµÿþëÿÿõÿÿÚÿ¯ÿþßïú^ÿÿþÿÿÿÓ×ÿÿþ™ÿÿÿ¯ÿÿÿÿ¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿߺi¡ÿÿÿÿÿÿ×ÿÿïë÷ßßúýÿÿëïýÿÿý¿¿ïüGûµÿõ¯ÿþ¿ÿôÿ¿ÿÿÿûëÿþíÿûÿÿÿÿÿ¡ÿßÿÿÿÿÿ÷ýÿïýÿÿÿýÿ÷¿ÿÞÿÿßÿÿvp¡ÿëïÿÿ¿ÿÿéUÿ÷þÿÿþôÿÿÿÿþÿ¿N#ÿ_Wÿÿëÿïëÿÿ¥÷ëÿÿ÷ÿÿÿ¿ïOÿö¿þìÿÿÿõ¯ÿ÷×ÿõÿ¿þß»íÞ÷¹Cýÿ_ßö»ûw¿þÂÿþéëõz÷ÿïûþÿýý¯ýÿÿëÿýÿëÿïþ¿m¦G¹ÿÿÿ÷ÿÿþýÿýÿOþ¿ÿ÷ûþ×Þþÿßÿÿßúxá›ÿÿÿþþ¿ÿè?Í×úÿÿÿÿÖ»÷ÿÿÿÿÿßÜ4#_ÿÿÿÿýWþÿ_ê¾Tuß»ýÿßßþß×í߯¿ÿëãÿ_ÿÿ¿õÿ÷ÿñ÷ÿÿÿûþõþÿÿ÷ÿß÷ÿÿÿÿÿþ¿¯¯Å·õéÿûÿÿÿÿßÿÿ¯û÷ÿÿÿÿÿÿÿ¯õÿÿÿÿûÿï÷ÿþ¿¿ýÿÿ_ÿßÿÿÿß×ëϬúÿ×ÿíýÿßÞ÷ÿÿ~ý÷Öû¿ýõïý}ÿ«õ÷ú]q÷ûÿ×ÿÿÿÿÿÿûüCÿuÿ¾¿ÿÿÿÿÚ÷ÿÿuú×ÿßÿÿÿÿÿÿý ÿýûù¸h˜Uÿÿÿëþ¿þùuÞaïßÿ÷ÿïÿÿÿÿÞÿÿßýÇÝÿÿÿ×ÿÿÿ㎽ÿïÿÖÿÿÿÿßÿï¿oÿ ÿÿÿëÿöÿÿøÿÿÿß{þ¯ÿ½ÿÿÿÿÿÿäà`]ÿÿßÿßýWþ½ÿ÷ÿúÿþÿÿøÿ÷íbBÇÿÿÿ¿ÿÿÿÿ¿þß×õÿ~ûÿÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿ»ÿÿÿî÷ÿ¿Ûíßïÿw{Þë¿ÛÛÞŸßïÿÿÿÿÿÿ¯ÿÿÿôÿýö¿ÿú¿UÿúýÙ¸e_õÿÿ¯ÿÿÿÿà¿ÿÿÿÿÿÿÿwßúÿÿÿ¯ÿÿÿÿúÿÿÿõÿõÿÿý}s5}}ÿßÿÿÿÿßûÿýýÿÿûÿðýÿ_ÿÿÿÿÿÿÿÿïíúë»: 4ÿÿïÿßÿþ¿¿úÿÿÿîÿŽ÷ÿÞ¿ýÿßïû÷ÿÿµÿÿÿÿÿúÿ½~þÿï¿ÿÿÿvÿÿÿßýÿëúÿÿ÷õý}ÿýÿÿþÿÿÿÿÿþÿïÿ¿ßÿûßúßÿûÿ¯ïõ÷ÿûïzß{ÿÿÿ»§¿ýï®ðÕÿÿÿúÿ¯ÿé¯ýýzûÿÿÿÿwûÿÿÿ_ûþÿõÿÿÿÿÿÿÿõþ¿ÿÿýÿÿ¿ÿÿ¿ÿßĘjÿÿÿÿßÿÿÿõÿýûÿÿúÿMÿÿÿÿëÿã_ÿÿþÿÿ×ÿÿüOÿÿÿ÷ÿZÿÿýûö¿Wÿÿÿ׿ÿÿÿÿÿÿ÷ýÿÿÿýÝ¿ÿý×þïw÷ÿ÷wÿÿÿÿ¯ÿÿÿü÷ÿÿÿìÂõÿÿ¿ÿ_ÿOÿ×ÿ÷ÿÿ×ÿÿÿÿõÿ¯ÿÿýtÿÿÿÿÝÿÿÿ°]õÿÿ_ÿÿÿÿ_ÿþ÷ßßß½÷ÿÿ¿KÿýÞxÀ7¯õ~ºÿÿÿ½ëÝ_ÿÊ?ýÿÇÿ¿ßíÿ¾ßïïÓ#èGÿúÿÿÿþ¿×ÿýï}ûÿþ¿ÿÿÿÿþ„GßÿÿÿïÿÿÿõÿÿŽÿÿÿÿßÿÿþ¿ïÇÿïÿÿzÿÿõÿÿÿÿõÿ÷ÿïýï×ÿÿÿ””ÿëÿÿÿÿÿ¿ÿÿõÿÿ×ïûÿÿýÿ÷ôAÜÿÿÿUÿðÿÿþÿûÿÿÿÿÿûÿßÿý2ñ€Ÿÿÿÿÿÿå ÿ¯ºÿÿÿ¾¿ýÿßÿü?Uëúÿÿÿþÿÿÿßïÿÿþþž÷÷ûêïõ½…{·öá¡ÿþ÷ÿÝë_p±ÿ«õþÿÿÿÿÿÿÿÿÿ} ¯_ëz¯ÿÿÿþÿúÿ½ÿëzÿÿý”?ïúÞË€Ðßý¿ÿÿþ÷ÿÿÿÿõÿÿïOûïÿûCÿþíÿþ¾ÿÿ×úÿÿÿÿÿýÿû§ÿûÿ~ý8ýÿÿÿÿÿÞºÿëÿÿýÿÿÿþþ¿w¿ÿÿúÿ××ÿÿ¿ÿ¿_ßþ÷ÿÿÿßÁœ Êÿþ¿÷ÿ¿ÿÿ_ÿûûû¯ýÿÿýô#ÿý¿ëýÿÿû×~¿ÿ¯½íÿ²:ûßÙ:ÿì!izÿõúþï÷ÿ×[û÷ÿýãÿ×ÿвá°À7/§Ú®¿×º¥_þÿÿ¯ÿÿûÿÿïÿûú Fƒ»îÿÿÿÿÿïûÿïþþÿÚÿW^"$ Ž"È쎂—ú÷÷ýÿ_ÿÿÿÿÿ÷÷÷aˆˆ‹.28ˆ`x_û¯ÿþ—ÿûýÿÿýÐ0B""$2ÇdpÎq)Ù(pÓ»[ûýÿÿÿ÷ï_}PˆˆˆˆŒÃ7 Á?ÿÿÿÿÿÿÿÿ¸ˆˆˆˆ‰ãÓôýûýï÷¾Ðˆˆ‰ã—wûÿÿþÿ¾„DDƒqÈ8koïÿÿêGhDG[ÿÿïy<„ÿÿë„ÿ¿þmð:ƒGÿÿÜ0B$ Ã,ÿû|‚Çßß~¸B>÷þô?ýô?×á‘À|á©ûÚïùÀ/ÖO¡ÙIö˜B"8ÿÿÿä €Ô>?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜3Gãÿÿÿÿÿÿÿ\Çÿÿÿÿÿ!ÿÿÿÿÿÿü€Àn>?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùð5Áÿÿÿÿòàhñÿÿÿÿÿÿÿÿÿÿÿÿÿ * £ãÿÿÿÿÿÿÿùX, >ßÿÿ}bA¡Èƒ<ò°ËH9<(OEš,(áº!‘.×JÉ9øe@˜ Õ×}"Dd ¬sù¸àÀôí‚07¡\õ‰ôèH#j¼ (Røyä;à˜IÁ@xDèŽ w±ûº†’á€ô„ƒHåL†d!¶9!ýUÜ ‘t0†SèÆ\Ha±÷û׺D/ Ù˜ZUEøÿ߃ƒÀætYS+ †‡!šø) ã™ÊƒŽÌ&ÔOÿߦÈâ‚TÍj„e93\D8Al4ô÷}ÿ²v¢pýƒ,r0Bd2‡Uôÿúiñ†aÁƒë„ Õˆ`¯b5îþñmHþ!AævG¡þÿè̵¹î‘RŠØpŠ.±bÏ“Ôaþýh/Ä‚ãüd‘Ñ4< ì!·A÷ÿ­ë¶ý%nãô‚‡@[ÿ¯ ×dc«êÁ¡‚`×j"¿ïøqñí$U´ý$„a‚Îæ{ _ýß·œ}/ ‡>•l¡ÞC" …Ž­½¿ïûô-¨4úL¸ZÔÍðkBÛ}ÕÛîLwzToŒÌdÇÒá.#°™Çta¤Ã¶ì6""’Y; bHdCérpÅâ,_aÂdïý*h1r ßô;.‰,ƒ(â/»3ðøàÝH`|uWC ¹yÎCHs9ŽCŽ#[Þªä ù!×òÖý&Ò½hDë”à«{µÛ!°…Îûë°¦0Á¶ƒa_mÈ:I´_D~¾º_î-äñVgª¤5…_<3é=^Yp/ Ý+[$qè"<þÓû ßR?¡1‘ÌÐlÉ]Lc²´Q]/Ü0Ö¸ˆ¾f:X1…# oAÒ[ÈjaÏL/ÁÖÈXõûw'oÁ‡´Aí­w… œ u÷¸!Iú¤È‚{¶AÁÏÕ¥÷_aá-9 µúM«÷½.þj·ñ­èCO¤ ’ïáï‘Gô”…}†×ÓµæðÙôµÁôÿý„Ÿêº$Ìê¤cðÜ›•5÷ƒ4zýidAÚ]Z[ÁPƒ*ž¹5B¾B!”>#äÞ pChÔŒc~¡I0ÛL/·øzA0Ó>ÓmZvƒÿÁ†6—¼æ¿õ ]&{º~šõ¤Û ޏÃuuäH¯iî@=ÕôÝm:mŠ™¨lXz¨Aòp’n[¥ßúÿöí_þ¿× ¦Ðû}tþ’Ûa;¶ÃL†þ¯ë"ø†¾¯û­pa‘ Ø2×ÒO÷ƒ¯}=W×qkV/°½UÈÇRßÛ¿A¯ý‡ö•Ð_qÚ™¨×é†ìnò]{·ën¾‚jÿý‡¯«ms¿ÓûKn»iQ 2}U5 .ï m¦Æš‹× wCèjÝ.ÐTSƒc"¾—Þ×Òî”÷ ¯xï@Ãv7Ó´¿ÿûöfí¤XïÿtíÓÁWÿ¯×a¿kB Š&º}>ß=Ýdh5—ýë×í¿‚.¹Òõ»û\”¨éd#‘ývÿC†ïë®ÝUÐ[¶½õÈfsWd4X+$ ]W÷kûÃßþ¿ûmj†ï ‹"HØðE=ïߥø·õù#}+ ñ#© iÁñÐÏácþÃ_kÈlµx_¯ œ|{·/üƒŠW¾õ»J°é}õX^þûWëã S ¡ßX$®n°Å°Ë„úœŽÿÛIõ¤ïDlEÖ5}üÔm%ò%í}¯ŽC…ü2¿ÕÝ—tûmu§Åýñþ…é§ÓBô¾îü—¤+Ýü‡ýnÚ0é?» ÷Zç‹Á™ÄoÇtÿ×Vßá4½ä54õšÁ¯oö·¯Ž¿Ò 7W‚ù È:>ÐÛÿ÷«ÂOÙÌ#Áã·ÚêCd!™ÈÄù-}…÷Ágý/ÄCïòÕÅ’˜B“u•0Õ”í­×¾ ÷¡k+—{jÊ!ᵕjî¯ ¸äŸ^ÆïÖü4Äl0a^õkÛ¸KÿÈ(îUžŸÐ<öáêý§ñþ×ð_ÈAIO¯”ø´H}Òÿuû_ÿ­û‡øf|ïwûü/vÞÁþk§cÝ}Ù Úã»ÿÿë­{ÿ÷Ý»¿ýû¥ò TªÿÞßÿýÞý|†Qwüžìê¿ü>é♘JéþûûòM_ïèÂÖÛá¾Ú×ýwöÞ!-B»íöŒï×õÝûÏ,%½ïÛn‰ž^#îÛ‡×VoÞ‚~K½û¡ÖÞ7þ½ÿ½}4·wx•8Á‡`ÿÿd@ÎïV*ž™ ö»m¿3AB¡²:[ßÖy a–ߥ­+ þÿh’‹ÞÿÜÈ Å/ÿT´à‡ûÚ’0{¿êÐ"S”þßÒꊘŒ;½¼ã¤zÿôx‘¶í«{ú~íüâ8%{á„„Woÿ‡ÚO‚4§‚ëîû7¾¯wzd`Ãûþ…¶¿ïµHƒ,6-§ïê“ 6ví8”è”i1^éøÑ°`éÀƒàS9{ úr7S îßqB‘7+‚_[ªHN’àŽ `ÜŽ0Sî²>½*!ôï‡Ú´IE|£¸P²a$"„º}²8´ÄwðÒÞÛ½³Ù+@¯T"7J ô† ºè{UE-ì‘¿uûvô)-{¥tB¨<ÉŽ-ÃÛõA2;=ˆÌï®0ýïX‘¤Gû¿H‘eÃUöÔ!^ÿÓ­Ûu„4»{ m(ž ' úȺ$c·õUÛí8/þ×AA³ÀêÛvӞϡƒýkÛn“«Ý:× ™ãÈd†qì]øÓíÖ—ûƒ3®»ƒEþÞ@Åÿ­îÝÜÖ Ïïˆð‚I‡`‡yvÈ4¢!ýÝ÷ïK¿eYnR)RVá¦A±Ý×yÞPÚŽ ñ^âÙ²K×ׄI  tï½Ûy3Kݸ”>Ùv›gÞîû­$ÙŸ¯ÈMÛ7*b„F:sò³îF„ ìC`ÛK´þôš¸Á6CcäÝE¼6ˆ¸Â Kða&]í±MÿÕb¬†cºÓ÷vÊBCõæ¾í´ÿÚÒ¹àU®aòÃí·lè*ÌÿÓ^ݶ¯¾Ôï 'pcþ™ ÷×lØ¢ÇM/Z’3ÙÛµäÂßJëjAqçG >¤QÐ"£ˆ®½ªß{]Ú‚m5l…(E¨Œ$ÒîÔ%o«8 Oq¸i½}Ipu´FéÇ)Ê•äqÛvª×Âa{mÚ»W´¿Ð!mÃékÝízú‡Ú ¿ÝíBÂF@‡m-) ×m´ÂÿXOw´KŸýÒt¯K¢1¢ãøõÛ½uÿ¶Ã† _»Tõ)þ±@ã>‚”aû}…ýo†  ÿÞ´C k¼?Åî×ï¯vÓIxkØKT Â÷õßMw^ˆt}·A”å>ÖºÌÈp@ûÁƒÃ3ž+È܆ÁïMv½d¸í¼X÷acÂ{Ü5hCÝ1a_þ÷bÿ¹ÁÄâÇû`Ú ‰SÃUÿãño. ¸»o_ÚûpÙ+?wˆ"€9ÿÁ†!Švk>A¦yëÿîÊ€QÈ¿ÿýa°ôB#zi5]&j{¶TCG\;Zkï"AÛ¶DÌ$h7Òr6©P[îéþä²1¢ƒPæµþ›¯ŠX²P-úôµ¶ù@J;]sõømæ½>üŠàÈ-?Uv´š*ÁI¿þ›d¬Œvî4¾CCß®ßAÃþÖ½}‘ý ¨”†¨zþÿ§mÔ§%øõûl8 iúÙ¤fˆñp<5LeÂÒõÁ±]-ì=ÚþþÛ«ÿ´é½úpõâ"$Ç8æp…é}Sn¸¾Ý.…§{ᯭV»l6MíÈòM?”wmýH7Øš£+¶Çá·@ÓïÝÌ}ü7?ˆ<6šþÈÿða´ÎzÄ.õwýÜ?\‰% îÝP+%Àð'":wâ?·ýt˜‹þ™}éÿä ÈàG§Ãç ÑÁ¦ô!ÛÝ7¶ë½ò CwÛR ŽÛu@ÿq8ÿÛoîNhàÜs8MSûÚW¯,àkoþɸm¸[Ó\¬ Õý¶÷¡nºÙcÿoî¼XÌÛÞ½»I§ëNÒ ®ÛÖ¨vˆÍ·àŸí×ÿ ìˆ?cíÝSÿë»l1¥ x6ô÷±~Û m¹ƒ½ÈR/ÑÓŠ½m·Ný{i ØvÔ“FÑvGÃ(äbúÚoN–íœDm9o¹càˆý°þšÿ ¨[\;c)ÀðÒ.Ç×Ûã¿ßÄG±!ÇþÛøŠCÛá,½ûþÞCmt>.Þÿ[û ± x9æÿûÛëä3u0î« EƒºjÑ_ÛmMJïÂùî©‘Dü3ažÝõ»ûpÐéC/cwòzvKË'oäøU»úÿÃmÈ ˜þ¾-óéþxhm¿£ 6Y0mÈeu×ÁÙ „9àO¿]-¶†Äm„Gä aqm±ßI¤ðÃâ?ù «ýrÇ^!¿ÇŽÚþë°ÛÿìVHÿ|UåÚ褠5†ûû^ xÃÍþŸäc‚»í3Þ/ð› µ×m´/ÿLÐÛÿû\&S·|+Úödÿ½á;Õ¾A¢®é} wÿ¥Øl2Œoßâýþ·øAoL†w 6 ·¥Ûaÿë¶®—xzà‚‘ŽSÞn2†¬" þá†Ãµ¾Þšw­-ý¥]1mÄHl‚­ü¬0a¿×ßá+öúT ¾¶D_®ðØ7ýû_]¿ÇA}2 C¶-Èê]©}¶ûÚüˆ=};{ð—Óê0SÈd[îÔ—àÁ°wú~Á´q÷mÛ¥ ÚÛ Y8ûKxa†þû£5Ý‚ôö縯¬ƒ˜+6 †@@@¶ðïÿô+ÃC~ý¯§† Ä‚ C9È ½‡v»÷¥¹‚cß¿­ý‡lây €×Á"¹P ä @›¿Ø[hY#È3݇ú~ŸÙ”S†Hl 'Ûëÿ]®÷¯þF‚m ÚhY k!‰ÿ j û†_ Wwý¹\†ša‹X³à3ÈÀ@Ôkëý¡}Óålæ¸þžþ² ˜@ío%OC˜mîÕeP>ßr%W_Õò'ˆ`û¸4ýŸÕ¾Ÿ%¾I>ÿeDƒ¯*ÈÁ|~#î±&tšŽßâÐEÖ >H_ûÙxŽ .ÿû÷Á‹[Óº”Ð"?ÿ êÈbÍA/׿m» ÅÈùT2@e¶ :ëÕ8‹Dà‡€Ð(Juîýõg³HD7ñ½…ƒi‚¯Öž’$ iè=ûA¾Âu ¨0ñ$ø">©…d€½8ÿÕtùWýñ÷í S ~/ÿNð¿ÿWNÜJÆGº#Ç‚þ’Ç¿ôúO÷ù@Vbä ¡B¥õúDFýõ§² HEL-*Ý|Ì!5éz 5 µ{Áù=¶È¸¨I/þ×ÿïK½ïäàtÇØ7B‘UïÿIoëÊ¿_h, ßöä˜k •}ç%{< õú®íd…Æÿà„[ÛsP2Ì ]¤„ °Ø":m׺V½?¿ÈWvÍZD>?^aöëý¥_µ5˜*ú~TÔ {«µüCPÝû]o}ƒí ö›ä@C5¾+«¯éƒúíýŽ, Ÿá>ë]u3J­ô Ñ Rêö {çóu vö¿ÿ#ÌrUí»áàÁ«»Ðöšÿý=ñÿë|@Ô6ëÚ]‘õw~ðûü *o®­{\=Ý!Û°µY¥GRíd]=WµÒ¼¨)ˆÚÚÞ÷¬|kÛéªþÊo}•Ÿ™åò<ƒ ¼ûú\Òÿï®-(ß j þÚáß×ý°éÞý~QßdÅð¶Óoÿ tÿ—_ý lE÷Åøkõõííû ½ðÌ_­ÑH{ÿá­qÿMma‘g¼è‹Ø[á/Y×ù }Uÿÿ÷ÅêíÁ‚¼"cÝ zXaþ¹Ó/«"ÇYþìð€‘Ú(!¶8O¡ëoþÂ3ƒôëx?ªí §N‰¿þ¹ lÑ{âï¡û¶Ü&0‚™“÷ßW MуëÿЭò `}a[†l]ÁXKýßàØuõþ‚)ú¢ ¤9ÎDšdGÛqe .‚öC:Ôˆ9 €(¦ÂÿV:ôµaÉ’9(BÁ ºm¶?ÿþlWw¿ÈÒ¯®éxÈjÐÑCn­îˆÃü3ŽC@÷ëD=¦Úzü†HnOœGÑNÞa]5Ħ¶Péú‹´ú®¤këÓ©ŒÐD#A½x|5~AA‡¡·i¿øþ•ªò¥˳°÷tÁ·ÇW*ÚKëGêþö뢃Iôs#£ 5ÿí†ÿÑZ«ëwþ´È@^Ð4H~NƒQ{ºoÿv¾JÿÞÃV¾¼ƒ^¿´Cdè0DÝvˆjŽqÈ0r¤ßêî¶š´¥ò.¿èÝí'ëðÐÈòh$80ˆ5DO|Óþýý š}¯ú[µJ“ÿÁI i]~A1=ÿPvåÐ}ýäZý×¥ÿÖC5ÄÏòÀ¸tk°÷FÓªß×éƒxA­_õ¿Õz!¥Dš¥@¤¨‚x’BôæÂ¿éïÿûWºß¥û_ÿTûÈ=3BF¿ j¶Aâ¡N Ýÿÿ·«nš FµOÁõnÏ ˆG!‹ò¡¹¯8ˆá¡7MÿÿþûjØn©þºOÿºFâô†;ö}˜H0„G× hŽŸjºoÿþÿô­a·Uûî¿öÚ…®™D˜B#×4{Oúÿÿÿÿ§þšoúUIú„ù}¢ G fƒTpZkÛÃÿÿûK ná;ÿµõ¤úTÕš b q÷ª}úúÿ[ÿýXtÝîôÂÖµ^¿ÿ!•"#[ʈ‘M¤“hÞþÿßÒoÿå7‡P†½ÚYUªë EF„ØÁŸ﮿þûÿÿæ±'¶GLzÝZãý×Òü±Îä Ã8ÿ§êßþÿͯïÿôÐl[ÿá-}·Uí¯@ÁR…óûÿþ¯ýÿþ›o!–:ÿÈß›k__üƒI\ a­Ãzÿ÷_ýÿþòF¦Çv ½ jö©èzÕ.µ¦mÿoý.»ÿÿwÿïçeöö©ÕÃÈ0O¤íÖ?ã‘ÿíÖ)þ¿õÿõ¾ÝVïWêÛk¯ªAÿÛkïÿé_ýÿß`ÚþXì/úØ®Ÿ D|à(‘lŠÿÿÛ¥ÛÿkL?I¿ýö»u¯O¯Ò¥ô598ƒÿÿöÿøýuûÁ¸ä—^÷ÖÿH‹—ÿOßÙþ­¿ïþþðÿ‹ÿðºÐOÿ­õõñà»ÿÿíÜà@dÁ½mÇÿÞ®Ž„úm´—¿¿÷ÿõëï†ØÎ9œ0S¥ Òõ]W¯[tCÚd<_ÿÝúù±{þ¿÷ï·b$6Ay³@U"Ðd=/×õýýïFhÀ‡ÿî¿ù ÿüÿ¾Û D†˜äÇÌ„…¡dp&ƒ~¿¯×^ö±3Wÿýéþlÿ¯ÿÿʃ„GÔ‡§,Uû«˜Ã!s{¿a¥«þßÿºÿÝ1m<ðW¦ý+ÿ¯ÅÈÇoÿØô¿ÿomÿ÷Ûl~¿_ÿþ˜"‡ÒÕ¿ïûÿ—_ÿ· ëúïþ¾¼ØhúZN×ÿÿÛëïÿ·† Èîõÿ×ÿÿòÈêÚÝÿý~ëàÈXïmµ.cµ4:þ¿úßJC]ô?ýýÿÿÛ_³Á_ÓM°d 8!CEDcØ9à‚îW_©™úš"8a:ÿ EBõÿÿþÞÿÛa/ÐÝ¡`Þ8ƒ«£R.Ï̃]ʃ»küâWúëúÿÿÿow†Qý¦\ˆm?Ö.2 òÈg {rÐ$#ýÿ‚*=|†glØlÚýÿïö¿%Æ+h0„X¿T ô,§ ÄÑDPÐ7_JCÖ«éSj¿¢€6V¸þaþ¿ÕþÓˆ:úÝÿa"V‰Úb×öŒüØ«íÿ‡ÿä1 -þëý‘*ú Ž2}ö¿õÝT7øõKÿ¨&D?ÿßÿu·¸*»0PYpð¿ët›__ÿÉþ½–S³ú3FúOîà ·¾ô,k×éú&Œq[ë×­ þ—æÛ#²Çþ`Ý{üòP†Sƒ+ÿU¼&3x6—ÿ­¤ÝSÀhLÀÔ6¾¿«øD3״Јƒõ®×X†0Ê/ÿób‚Û®¿m›ý÷«á°BV­m·««ëd#ÄRë×ÿÿtC>¤ïïaRX†žà)ÀÿÝ4DnÖ¡_ú×úõëëq.¡þÃ+õ§×úKO©±85õÿû~¾¾Ð¹ÿþ"— ËåÀ¦ïþ»¾Pô ÑcÕ¯û­ÿÿó –ÿ­Ù„G˜+´ÿÒzè?}µ¢pʯÓézþ¤&°4þ¡„ЈÉì¨!¡È˜aë¿·ÿ!¢Ç‘€Çÿõê×õÆÈ¯ò öâ$2CñæA¶¯ú÷PÇ¿ ¸wõ_þ¯×ü¸wýõÉAXO v×_éþ×Õ2#Á8g”ë¿«ÿþÈ0þ¸q!’PAánsy°zÿUwÈÀ&éÞ"$})Ëêû¨"?¯ÿýµùÑ ÐÉNy‘4î¥D$m¶½-¢zuþª¦6ˆÔ…n›^ê(RÓ­RªÛëhDHdÌ\büþx)°í&ñïÿ"¸½÷ÿÓùÁ¤?÷÷oÿõÿ!Ž+“[öpõ~¿ééÿÚOäÇíôÎÿï d @Üsœ‹^Ò8+Ý{W×ß«[W×ZVô‡“µû¬WÿõùP˲¦†žœOÿ×:†»ÿý¯ý/פA¶8±_ÿ¯ëíúÞ5Mÿßá˜ÛÿÓXÞÂ_þ¡ ð<2’ÿ£ÿûÿ hŽBÂi³a>“ÿÿ·wÿHWKÿ·í}H{úþ»K hBéÍ„{hQ­ÿûVÏ3ëûë§UÒG!P@ððíÿº×¯ýd Á@ä° úfUè6­¿ÿøàÃ!Ç ¿K´¹Ñ=mÚZA–b×½Uü%÷]tÿU¸_÷ÿÿðÆÿöšÜžZ­F–žÈ¶[‹]ãöþ–Alµ¾fÞ°ƒ«ÿ^ÿy¨)D“UûûÜ“¼"?ôVŽT'Àð1ÿÔ†û==þý éo¿ÿÿ~| Ô_û þ×ÿ®ôBEÓ‘½:uÆ¿½:oÿÿÿר{#àù_¯þ:o_þ †C<§=uõ ÂM¥Í‰ÑµIô—Úÿÿú¼_w½|‹µúÿÒûhØz oõ¿G£×§éµ½ý[ÿ}Y ÊSºÿ„éßïKô¾¯{!Ž x}?¿Zt½¿ßý§¯ÿèxÉÞXêþ’ýu¥ÿú5à‹Ö«ø#þßÿuŠÞ“k÷lϰðʲëy '4:Ú_«Õ~ÝC¯ÿæC¿ÿkÿþýløUÅ2<ú_%Ot·_ª}VÅì‰÷¯_ÿþ:·ÿ¿ BÞ 4´ü~á*zëþïÿ@ŽìßE„p<5ýk¿ÿú_¥ÿ{ƒóXfZÿãë¯OXßJÆl0΀•ÿ¶úßÓ~—ÿSc¾@ìa®Ý~Öì"ßø5ûëý5†wºÿzÿ«ô ÊÂÿó`ÝmáCeýðÕÿ6Ýÿú8+Èb"á„¿ßÿWý‹ãVþlïy°Z½{Ô5´ÐÿôÛ3 }W§òð¨ x9 uÿÿ{úÈûxU÷ÿo¶S½í./ÿì¡ÿý&ý‰ ÿÿõ¯üX}S}?[ûÕ&ÿžV Á„%ŽgÕB6.· ]ôþ› ×ÿ Å$Ÿÿÿß;tõÿî búðÁ‘ÿõýëdæ@ðÏzõý¤úöüØëï}¦ûA‡‡×ã‡É¥á¿qoUIºõæÇš€ðkÿüÑ?oÁ¿ÿêñ v“î×û_ kþ·ô¯ÿÐßûuÅõ|õÛ3…í/|‹í_ùÿÚÇÖ¤0?ƒ­¥ú¿óuý¯é?Vß·õÿê=oô:õþŸ¿'?¯]x‘áÔÌÿz¿M¿ÿĺÿkä%6ÖÌ R€Çî¾*¿÷Mæ¡?Í…ÿïû}ýßÿèƒ €Æ±_øÿ׫£|†qÞK»þû·ÿÑB#ïúýß s‡*…>ÿÍ ¡µÃu¿ÍÀ•ý¸D-„Ä?û¿þßüÀ#ÿÿnˆc‹"ED²Ð×#õÿÈí'ë×Õ¼àÙýÿ}¯ÿÚÿÿݪw( €Z@š ¯ðÒÿô¯ÿôŸÿã÷ò ¾ÿûÿ¶|[˜ô©>x(M‹ÕœzÛ ×+ïÿÿì'_ÿÛ!ª=ë½~—ûqïiµö„";ÿõ^½}Ðÿûý ÿûö׿q9ݨ[zdHó´ÿÿè&ÿ_Kü_}ÿë¡Èk::Š` .¾Èâ½'ÿÿÿ­«­zÿÿM<àbþÕïþûú×ÿKþ·úÿïÕÈeÒoã\ÿÿøÝéukëÿÿ~ï@Ò!/!‡"òXÿÿ¯õõÇÒOúÿÿ­‘+ßMæ´Foÿïõý÷ë]7Zýj½xMƒ#´}HÀ<3‡[kÿýoý¯ß¯ÿý¿üØ—šÀèöȰ@ð`ý­{úú^ü_£ÿ3?Î*ÿ¤ä!29®¹ ÀðQ{KÿýV¿ü?þœÖ&µjúý&ç<#Z.@hý³m&D{Üä`ß~ýWžß«ÿý×ëúý7BC:"ÉШÿ¡œM1}B×ÿð¿Mÿë3?_¦‚ÿJÿy°øŸŽ0,õZ7£‹Ò~ÿñlþ¾ŸÿãùÌŽ_”?ÿú­LvŸþ‘ zb×ÿß¡ÿÿÿô"«þþÿÍ‹È0ÿý?ÿ×u¾Ú ë]ø[ii]*ÿð÷Uê¬:Kÿô]ÿo5ýÄ#`ÿœAojÿÿ÷iÿ© K=†ïMÂý±’çÿ­zú"ßµkÿZïuúõ­!'Pcÿûu﾿ÿÿõ}U¯·®«ý:ßÿÞÝú¶@æ ûkýûúßÿÿÿÿ ¦öD§ÿûþAqû¿®ÿúûú¯ýÿúëò$`A—ÿÿúnâ×j½íÿ®¿ýzÿøªÓä;ÿýwÿ¸´ÃKïÿ×þÿßöÿëô°Ù ‹§ûöíÿ«‹Z­kúõÿ¯®K]ë¯lØcÿÿðŠÞëëúýþÿþ·þý~—Ó"÷þC¶ñw]9†î|¿ýö?úÿ÷éj¾’úG¦BÇÿÒÿºï@r8 ¥Æ¾jEÁïÿgpWÿ¿OëÿK­ úÿß~ëÚíê"—“·×ý¿l/sêqÓ Ö?¡$½}ë^– Õ[Kÿ¯¯íkÓí¯öôž*Þ`+ÂbCF]kßëýywiÿq÷ûÿý~@ÀοԆŒàÒëùpOÿò†¿×ÿïúðÿ»k·ì!oÈ/¡ Œ}ŠÓ§UnµôýÕ´—ú¤ý%ëö÷Uu»èÔˆâï¿ëëß6(ÃZY;ÿçºÿÿm«uvaÊuÝÃ#³`s­©ã[÷ÿã6du­>½a>Ÿµ¥¶Ä+RXˆ¯¡¨"¡ Ô†@hý¿úú¥ñwßé~ô«.Ö0MªhK«ñj‚oÿÿû»þïõ…ØÚÃ6ŒiÇÿH>‘ pÆŸ##×ÿ®º_õ§ ô¾ƒ<ŒÔ ?ÿéüg ”çÿÿ½âµÿ†¿¥²„Ã6Ðý¥zV…kÿþùh(%íÇë[0ˆ×ÿú6%E¨wúú¯¡þ–ëð–?ëþ•7vAÆ—mWûÞÒò‡æÒÿý.½t’y€›@Åä0wÿü`ÂUûä8ëþÕ®“ï¯ihæGù Y¸e8-ÈÁbÝþè~>£U|WKIº-ñ( ‚Ã=?ßè‰iÚ«ú§Šýê‚ï}û"àQ¤{ëøj!¿ÿ_ÿºõß­„äaÍ /÷܆>S¥V¿=ùÁ¯ÿûhPCgw¤,ŽKÿò½,õ°Ÿ ô“ô’µÿ\! © A3ˆ*Ö¸†¢±¿Õ¿ûþ±ëûçü§Áas¨]ímó»ÿÿá½-u×­~ŸÐ2ô’çñk_ÿ…·ÿ ÿƒÛÈD͇_·×ïÆÿý,?›ଅ‚p@ð+¼zׯÿ¾ïÿýWº˜Lþÿ×®f þ¿ÿ¢ødaÑÇßÿùÊÝj“ÿÿ¥xÐþŸú÷\&Áƒ×Vÿê¶á™Š¥ûñý¶¿¯µþÚO©ïúÿ¯®AK»4 ¿ÇÿÃáì Û^ÿ×Ü7ÅýÿëI^1:ÿèãaøé×ÿÿì/ÿÑ®¿_ÿ Sz±íÿÕý·Á/õ¯þ@¦%?Ö¿ÈaÿæÆ’o_ŽŸþ5þ¯T÷¾ž¿Üj¼U‘Æ7Çÿï_ÿV¿øÿÿ¿ù˜Ÿý¯ÑÔ?~œ†£Ú[¯ñþøû: ÏÝv»÷wü† Jö±m+nÿæ_5ˆVñÙ׃]>²…ù€O3Gâ«ÿýußä}ø´ûoûé?¯6 Π¸?¶ïþѰ¯ÿŸPaÖ@AÖº«áöÿ‚m¤Ý~ú_ÖC*ì#‹þ¿H÷éo…1¿ìÐG WúÿÓë­RÿÄm?ÿû¿Zëä ÿì'qËÏ뫃 ÂÒ­Àê 5¦t‚¿ýSŠþ¼P$â#¿×ïÿùä›[þÝwèÌG‹¿ÿº8(_uäÂ#nÒï^èI†“h†P»Šm|ƒÆÿÎoÁ†&Pß’÷ÿÓk­„@êqøuý_é?Tf<Ô07cúß_¿Ãó Þy BÈÃ7ÊÊ":·ÿ_×Ý>ÖŒ0ƒºq]½×p¿¼0F€C Ä9;_ÿuz¨7„Sî#®"ñKïOûàh> CWGÞ— ñßu¿­„®…­½ûÝâϪ ˆ¿¯íúú:dtG˜fU‘×Çþ«ÿÁ½dt·÷È̺²Ðk岜G€ÛU¸¾–ˆ/äü0Ž˜XïE8µÛ_ò-@äÀ.9Œ÷ÙPU+F×õƒd˜RáØŠwȳðHð.È0LÃàˆ4`9YqKtA/Ð%ÈW%8çrøãæ€zþ"ÓMí×ä3,†­xB".":®!õõ vPä5Ñ%pq€Ÿ¤5þ.6…„t~ú®ðK £0Ðôrùm?ÂZ6e‘Ì#á‚øpˆeFB¿ÁÂÿ l ó0C §À²¿õù¥þ¬_¯Ù¼¹úè!0‚ü x1™PRè$ z ÜD6qõòU@Qp&œ&Í"ùq‘Üÿר‡áðEüƒÁDDP.ÿü  CÒHá¼¢ðN…æ uOøø ¼†e‚ðUä À  x£?üà¿ðT ÚQ²à·È†VzýþD¿íÁ?úqá &ž,Ñx"Ÿû_ðÃHR¥PHt@€˜ 3Ã\„èCˆõØ#FÒõÙ ,/Õ‘ÖPX!’ . B.ÿ8hp^øb«ü[FaL"éÃÈd†¹2‚'ÕQÍ}1ûÿÃ@„Xy >ƒ_Uë8ÿù *Ðá±?á-0“êM €'ƒþ ]8LX[ò's¨Î€<2ø@¿ ÷%Ã$5(D€|õ𒶬"FT@->üQ¬þ¿n¹±dGÂ!î|41¾ G^t›)ðºëX2 C§X:$H/ x6Z8‹„1ƒH7õ Yܰš@ÃSb9`g¯û„Ê»èSðHFÐ'õ°‚b$r($0aw(•_ÿDo# 4ߘžžá~ÝÐ@Âof ßa¶»È!êµU•zôBY g÷ÿè9›øú[d2¯ï‰¢/‘ÀÐ1]'û¢;´ˆ ^#û#ª²:ØÁéz¬ÌeòèEë«ü‚# Wù!ÉiÁèâ‚B Ö@ó¦¡úèD»úV‡„/_ØDïPˆ€ÈU_üƒ@ÿ¥h¿÷ÿÐt¨¸3 A]ÑqÂ%­üm}ÿ{´F'xA~5¡7²8˜.^È/ë^·ÿAÖ%Ã?ÐYÎÿÈ!Â# Ùþ¬«uö¿þÙµ@Þá/¥]"1 ¨¡µî°]}¯ÿòÔp˜=P"‡í/È,Rà\/ðºÌyuñÿýP=§ðÚ|6—iN^JðÎC«Ó5ô•¤ÿ^·Ø!ò>¼ Eƒom¯gt¾fä ÇUà ×õÿúoä@MˆúB«PÂY±G$G ‘Ó¢¬c¥þµ__å³ÿZ ÈdXŸbÁ©ød|§ÿúÞ‚ï f`xcú Ð`„†H5 .$<ß'çþº ±ëÿøOý«e:6 `\ø.D€È†Ûýß´'PΣP-…±WÂßÿú ¿1È8…™”:!r—«¥PPõ¢3 ,×ýýÿÿÙ!Èw&ñ…÷ýÃ}ĺóHÞ$€É…óáŸÿÿÿº> „µ¿äG®HsêC3úCs¢—Ó{ÿÿ†jeåßká n¹ŸŸ‰o‹‘Áßô›ÿÿµßðD  õ"=bëâ— ÏÒÕ Kÿÿ!š=þޤG@mõõD CÂ<7vGUöRHXþÃWÿÿ _ÿ„"C$Wÿþf 0Ùáaâ.Ì:äL2_è†"¯ëÿëĆH(Nÿò ø1>"ÿÏ™ÿ¿}®¿ÚÙ +…²ì†À$rúú út†A½@Ä&ø4 ©!"YHôµëwÜ Ì$C$4hˆ˜Iÿø‰à<ÏêÈ0á—T>Â< ?ÿÿÿöÂâ$2A”P#ᡯ¯Kj:#`xe™¯ÿÒ§÷ÚßBTÐ"Ð7ïëÉ=¹¤ÆÎàµÃõ¯æÿ×!¤$2Ctó0WÁý\Œ:r‰æ\ÍðÓ…_ýxô|W¥ªqC$ Ç%ޤ¬/‘p ÿáQû #à]ÄjÔ«_ÒèØ%°Zƒ)ó’ Àм/öeì/¿!•ìƒÈë–9Cþ¾¿`ÃR˜V™°[Ù Ö µ ÿˆ7øsŽC"¬§ |G‚ù2ÿéÍŠÿ½²!Ä‚Øt#@Ð÷ ‰€Îô¾*†2‹ò$ˆœË†~»­{ýé Hd§'gÍ  ´ƒK«ÿÞC)DBû)í.¿ÈÐ-†PˆzÿAȃqâ¿ÿ yÓªˆw<ñâ ¨‡ÿìÑ'!’NK «_¯ ÿÈŽÔ2ù£ |‘Ð<“µ1Z¯üA9Ã$ A„B`Âÿ£ÃeÐW®½(BUà´BÈê>Ž$ Ï_üôÊ8ˆ"_ äp_‚þ¸Ž@È n×^œXˆmÑ ÃSìG¦S­(¯_i:Pø!ûab"gŒ¸d‚±€Ì_Ž@²pÁ ˜GÅAw÷ Ž—á|"ŸõÂC¯x0j §HD†He“L$ÿÓ`ƒµæÆÓòt¢ý· ^üz\‹á«!ìˆç —DqƒÌ÷þ>þvõrÑwÀªt@ðÓÏZï@:ÑðÌìF"(—6‚ ÷×Á¤CEëÓëÐùðSœe( ë¯ô-<ßà°Áfèoÿ¨wê)þ¢.@ðK3‚‚K¨@¾gô }ÖÈÄl ÃY/ŠÃëÁir„ŸÖAÝ)ÿ x5t<3B¡ $ !•OKàˆKÁ÷ƒ”8\2àf ­/0þ³àxiÁFè`2}S«üᘆüb°Du ÿôÞWzÅ…hRoâ:×CF€Øzë[üá a «Ò¦§¤2Ÿ<'îÞ“ä…ŒHd‡à¿þ¿™ WawúëÑ8GP ²ƒTëæˆò üýð@—† Á[u w§á/æ‚‘ðÐ2¼¡õöþ²0 ±áýB#¤,+ù‘ßO´¾H¡¢ Î9ÿÕp~žÄYcßãþ¯*ó`x¶-fèAD!#þ˜‹ëÁìBd€[ ×þ`?È4‘øGÀÃ#Š/7Ñ­]yÃ4äFÊrƒƒð ¯›|†tŸëá„ ³Va— ]ijôh‚¥UC‰á?µÕÔ†ðä5‡)!ÁDða£àx4úvò Óìà†ù˜-Öÿðà¯÷al#ºþ¯A¯BL!Ã4zo¼6ÞCSMïüHd†ÁÎ:ÿ÷ä Ì¡ÒÜꂯïßÿ P@ú E÷|Ì2_ôl+ÉgB‚ßK¤$ Þ‚W­3PšßëFWÆ–Û!¢uþ Ñ +å]ü(ûÑý,Wt¿þ ôˆd†ÁÿKšã’ Œ°šÔõô¤tƒÁaÿ‚õùµ¶¿îÿë°Z‰¨3 ím/‚Ïfx¶‘86ô%\zûÈ‚üµª3Ù‡-poøÜ ë^‘lîzPŽ@'zÂ#ª ÿÿP@Š"‡ AÈ7œIÍ(Z¾¸!!’Ñ gi19υܵ2ADÄ-|áœt!$U`ÿi!¡Â:¢àx7°a_ý[ ß§~»A® /Z x$},#îÿýpBPƒ‘ÿ!“†Ê†Hkèw ?_A:Äêl ¶¡ä0<¿ë… xj?ZõÿƒØ‘Žq˜c 2¬!’ )‚# º¤¾¼ØK h Ø¢>Ÿ‘šÿ x4Oÿ ë]£6a1!c xe9ClIä: ƒxãåÐ-à½2:a‹%@ÍüàD}Â\ß Ø9Oÿ£ct¾Ó Z 9†3ˆd2O‹G@Äl%ëÁ [×6âJxA(+Ñ®A ™@¿â2è‡A à[r q@#0Ðò†½mû¬'BhY¦Á¿Ü†k°TÒn².)~½¢@l:®ó0S Êì†K¢A²‡qúÕªÂT±#·8åt=ÕµôÖ–hÿ¿ðßán ‡ôgñy €+1d2çº p¸ØHƒgö"#a Þw@– †r>߮Ǥ²>PâÈÿ¡Ä‡™ß@‚þ¡/ï‚)õ›":lA_z Tºãó@!¥º9‡þ1cô ÁΡ’Rƒ# È××ëøè •à™ €qϨ3 IÃ~éGú|D‡†¿ñô GLl†ÎhªØ½¸$C5Î/‘@S©äÈâ1K Ì@ƒˆ±PëÒª¨{ÿrêCRuÅ­öA° ‚ê…o<4Aæñrà×Ì´F@g^£àˆèCëã_Z:@hàº^ ò¹ßX-[¯ò†izL‡6[ãñ³€fýÏÒP§ŧ@™O¡C„|^#ö. °T"HÃjÁ.kþtA‚qÈ †—VC ?eñ'»¯My¡Á| µ‘ <4·èÌ2G÷úè]WÈ1Û>`µÁ)îf$cø½Bph\Ñ <3p×ÿü ¹:mÄÐú¤>ôA½, x èkÑÇ>a@ðl„`)Q+8ʆPèÇÿÿKs B‚ݸ_ƒxÃ<,ášæâ‹„F vC$6³ñm€xjpPä0§&è'‰A!›Gò^ÿ‚íãø`Át¶ÄGˆ²ù!bÒÔ`h>@ pA²†mTb#š|]KQñ÷ xfÈ ÿ½í„´¿ xk§C,•ð[a’§â² Æ“È Sê°dyF©é}ÿ:?Á0È Ë¥Ñ ±´GK‹F‹ûhV@ðÑM%â!é{ïÿþ ˆ-†}?ìHQÎGlù<" Žo!°gJCh1Á ²9‡=ù €e ¡ÈI‚ÿ²8 ?ýCɇ0·ë3 b+T¡cý!àŠ@3?”ìCäçpx‚!¯÷âß×ᚃ$6†ÁWúD3̃W?Bƒá/á&]4¹…!¤ ¯Ž¿ðr‡ÿÜHd†XIJ`/\ð.ÓúK²>ÚQæb—ßuá(pzùÀ®‚ÿö/ïÃ#¨ ÙÐ zõCE‚cìF-ðÑÄ‘?I}!¡Ö2 `£¿ÿò?Am¯ì²R ¡÷¯¥èt. ­ÿ¿öŸxGÃ;Û~\oùÃT£{ Ì¿c\Ö­;Kÿ» x^ø]$_ðˆ0<}üD‹VC&»ûÁÃ,Ú.½AKËrÇȘ6ÿ÷ý`–A°x Á×üI0Á?™åÚ¡!’@ÂûZëàÁáŒ5 JÌœE¸-aúÖ]èÔ†Úð¿Pá¬4Al0`áFmýZV¡•¡éabBàÙÃdÞÄ‘Áª˜ÃJÃÛ* ÑHŽh=ŸÂ!’iáª='ê°R@.M‚íZ 4'Ѱ[»iWàx#ôô¾„[ÄP0‰ãÄð•áÐ+°4 8•h*h$Cˆùt³Ú _§¢A5©ñ¶¬H7*h'!’+ž4Fa¢@ðÏ4½u¤§ÔAP•‘PúÈeŽƒ_„íÈ0r y†ƒ!²ä „Y¡4°ò!·.ø;ÈÏúÒ°H|˜n9­¢†ÿ„| „AGú4bd§È*Žä ÉØ/¡#˜(xBâ°R†VªH jŒÀÐØfÿ Ahá2¸ ¡ùÀPÂ*ò8d Ú4Ãb®ƒý6ÝLò8>Ð<†L ‚áp¿zA--Òð™ €Ãø@…ƒð¸C¿d@Á›ªúî†AøCÅmˆ]<†@3 D …Úÿ K® 7¨ø ­z!™ˆÐÈø4S†¯±Ãh‹gYt í:B0ƒšeÀðhPàÁÿáR× C$\àÜÔð– rë ü!!çšÛ_ø`— ‚Ó›H:!$ È~ޏt8¿þ@ðÀˆ.ËH Àˆd†~ôƒÈmP,àŽ‚Ä|[bSƒ fÿÿ´C €ÔU¨vFÃ$@ðÖ #œ@ðiÿýÁ(pº$æ¾<¦F<–d ´ ø—i2?!’NL %ÕU¤ª„2´×¦~)$J ÿ¿ýrÅ©.ëí„ üá‰ñø¦$Dè`×Ð ·‹·ïÈqœ?ûëøµ¶‚ †‡ø&C 3§þöC$4œñ×Kæc/ŸAÿ^CaölGMÿ«ùÃ3äb#hŽˆaLÀ¸"‡ƒ äk‚C ‡üàED3Hxµÿëˆ0ž¼m!é´>ûA~`†#„†!?óà¹tÇ xSä ©¡ý[Ó”=<Oø@¿!°Œ=¸%¿ƒàßì5Ôb÷‹dg ©uù±ü8D˜d>•idh_¯ßÿlŽ¿Ý‘P<8enG¥°P`¸>]C_ˆè@_¥ú0<íÿì?üþðfÃGJx Á– ?ŽqÖ‡(r Ÿÿ3 ú×ÞOZµÿîÿ=ük‚HmP†XïÆÚaõ xIœr ƒqöÔ Ö઄“(q Ì4 Ôÿõ0?§ÿà¾Ä3ãií<2‡f‚aä2^?ˆ:!á­ÍArzÖ!‡¯ÿy0›ÍÿþÁ‚±5¢áÙCø`È Ö²:‚p4M‚$ÀðÌÃâСûß ýÁü ÝÿöC<ÿÈ <†C(bÁ+tM ¸@‘àf ö´W= ?.6C#»¤ï¼_Ð`ÿûˆš° :ªd2ŽY9©CüR4 ˜vFøÃ":4bÊ„@ñŽc5ŦÄ`’^þäb4WÁÿßä2@®e÷ÁD†Š# ]ä¤GD3Ò$03 §qD82œÁ 0†·œ|q²wÿR@hz¯ù®ß‘°É²ø‡ùô(ä ƒHAjüHòO2*mȸ„4ËᨠŠ2†^¡'AiHa’ ÿô ÿëüød†ÙP Šõ§ÁeÌæ¡ÛȃðÐD¥53ÜAô.C 7I3B:á2o£\\Ã0‰†H?þŸ}ðmAÈ€¡uïÃ"p†é5 4ƒj Ñ5¿Èd˜: †S¼¡ 'Áä‰ÿð—ßÝ m,BcKà•<Ö|Pd2¸î‚)àðÃ<`‘ÓKþ®ø-Pø4C$G0æcÿÁxôCE“†@ÓßÿÄêƒ^RàØ˜5Ѓ´1oÿý°I°H\pÉ1Oë×üNÈ&ð@—¨fu‘´lëîþ ~)# <,ƒ¾ëëD32h˜°étº xjÓæd/‡ì¡°KÿÈPÿ²ˆÝeÐD2A‡D@iûêüÔ?ÖD-”ˆ`¿ä» x6ò$Âä1S#†a ¾²“øzÿè_iDB!’†Oƒ'ûZãÿAä€\à•„K˜cfØF~ˆeÀ¶jðaשAËÿ¯e(Ié1ý ðKº ƒ EíúMbÇ·{ÙÇþÁÐ b.Â!’*Àû ­ý&JÀð^?‡ xÈ&;ôŽjHGx}ÿ!€È½ÍB‡,|bp5?àÚƒ ¡Â@ЈL¼À8x% $í/ Ç’±®!>6C"D2CdÆ„„¢·†ÒÔ†@+M´Ð‰ÀÑ”€aÿÃv0¬† `¥Hµ¨5ñ!êëôFà 3¦Hå@(@ ÷|0‚(«b^LÂ&¾½'XĆHŽU˜|¿Ò@˜«æd ¥vADÄ1‚A4ò@µ´‡÷º!,øuÿí‚ ¶Õÿù qÊÐáú3 ÉŽÆC$˜ƒr Hᥭ/myðndÇ!’•_Ú±@Ñ Ús_a aþ‡MZøF`xm|ð.вã”@AAÚ>¶ðë< " h=„|2@á0h/P`™ 2@DX"|Òz þýžK ._WLHG@Ì%WúCÐ@îˆLÚgt¾È`„AÔ-þC$2çˆ4è‚>‚ /w™‚@²`¡ßKü+ki‹ùò>6l2@¹°<)pmë_{dàûÁKåûÁ9 ž‚Ä7ú^¡†S™Ð'ÞPÛ\É R>(3ÃÝ=ïfìU*A|G)Áô.-‡ô‘}H ˆ“öô†²Š~ˆ- 0l×ü‘z Áê5PÙz’ÕtþHˆ`x4‘ø":*Àð\äGÇ_V$0ûD2AW“@˜u¯øAïõá'øØ9& mìè ýi9¡"¢LÌ+ lqL#Fxp•úÿëÂ@Ð ÓÁÍò. n],2œP[@ˆÿ¦ù›b6Ÿä2E¦ Xk¾?¼ˆ ÿQô!†ù´cdÊsÁN„È4ŸB†’8‘ !šÄ>†™uWBØI +rñRÎþ8Q”ù°7G‚2G úÜÄD º ©e37(v0ß ÎÁQót&ÙPøh‚ÛÉt„ 0 ˜Á‚(Kü½x@‚ˆúˆe#Qpɱzp<Pøa6¬÷eÐŒûÅ=£Fò!&ƒëÿô ÿºÕã!ßÈ€<6µ ~&.¾ 1 ŽH úÐD ƒÆC ‚z¥o´ß¿ h xmP3hŒ¿Í#G@×­ƒ¬@ˆL }‰9­U< @èè!«‡32ìÇØ/ ¼! ÃüØ¡èT! ºZý ƒÛ!€Ë|ÝÈÌ"tö-r ãž…ÿƒr¬2C*@ðeB›ñÿïôx3}7ä y‰ >@ð!Á+.üF&°@}Kc ÓÞ¾“†@=ýÃ\K x6YU#b8"ú ÿûýȃ( @ðá Vˆ€†ÀÃþ"C$3œ$×ø _þ Èt4AlÉ×ðˆ.‚ xŽÆƒïƒ¡'5LÀÌeSí”>Ä¢<2ª!šƒRÁò§=œxÓÿ…¿¿ÔA#†HkÈa˜¾Q0Dd5Ãþ| ZAÄO>0¤2'8FhióyàxˆeT¿ð‚ÿû qCK›]pW@ÈdW•½/ Ž É ñ‡G°¢D‡ˆšÀhDÐÈà¶ÿøKûöɸA< |4|ðl˜Øˆ°ÿÇH†|ñ¬†@hñðÎ?:bxÃCÿÁÿ"w† N1 _ "ò èþ°æÇõ­Ì]Ï…4^»-Ê¿@Šò Cê–C,º6Ú þ-ì9Ô8'ûÑ¿t>šüÓD09GÒ]H7€l"‡â!øH_Ñàͼ-›ŒÀÌn ~Ò°d"ƒýF¿' xeBô"ñP QHvŸ/îŸéÄVûð’¨ YÃ2«K¬,ºiÒô äê zé" ¡â¸o¯ð–aH;¡4p3ºëÈS¯RÄ ‘3××]Á6¡ø"ùV|.ÿÛ"â°„†H®‰Âö”?…Z ÿIÂIýרÈa…¦#íúýëÄB!±Ê #0ÎÕ¿ i‚_¼ _þ‚PëÐ1D3"µ¶Öºô h†Ha1Èf—„Èé¨7ºêÈ|x%Á,2†Êßü ¨:¾ –æïûÂÁ‘D2A°˜L …†C¿Ô."½ÒG xm¨úúÿã!9×(KBq‘Ùp")@g ö )¿ˆ Â6‹³õ„›ð@¬$ÿû‡ xjŽðÈ%‚_þ ^C ÚáB"èAø?ÙóÈd†Â`¢-®«éA„¼àÕ_ׄ2»Ÿ›* ´ ýiQ¨?Qw ÄäˆÂ{ö”D1! ê'ƒ;¯ïô (,áµ?GKñ$8b Âÿ¯!©Ü>¡##!’ ÜVAlQt›M±ÿÒ¤&ÀðÝ?¡ |‚§ /µÖ¿búа<š„| °Dr’ò!¶GáˆRR ¬l P aÁàÃ÷| R3ðß×鈳Á’ ïG8ß#®?ÙÖâ Wà šorN#áSi ·ý‚Lºì?_!®@þ!¼HAÌ_B¹™¶h)‰ ¼l©µ¹€h3¶3Á«…ÿðÈ`W¿ ×ý‡‰åU‚ ˆ&ða" èHbňÈq×]ú %Å. ¾ºô”âõÞ3D¡ÕRXd4Y\ ”B°ˆ.wÔ‚Ø4ùÃÁZ÷ÿþYæ^/ªø()ÏÿÁ*ëWBSáGèþ>C$!cýô¿Á&"ø _3´ˆH¸-duKÁé `x#çÕ?öm"8d†ÓOûð‚ÿ@ˆ W xwþ¿ô$à¶'Qfa€^¯†Óf0¬¨ðøˆ…R†0óÆ»Iÿ 4 Ž]~wý~µ²ßù.þ—ÃFCbqÓÉ„#á×ÿ xhuÿ@„†BëÓô GÎY™ãÆÈpÊÿÁˆúöGö" çàx2{D4ò gà†Ð/ x!~û!æAl øî;÷„j  ^?%Ä—EÃ$6p¤ Ç aâ4“ƒ<ˆ^!y ¤|/ E?ýD†ºÿRëÆ/á°œ6½á±" ÌåGà‚<"*U}~OÿÆüßõêhzoLá˜?KÕ9 €®YzéÏ œFëõЃýÒØ(o xn/‚ _D3‘ÁÒ>¿ÃÿÕ†@º4 x7œåò1È évÙÇý³c#ø4 ´ˆÄu®¸ø ‘Æck„F}>s¸ƒ¯ÁA„AäpɆ۟@F³«„¿gƒ/?‚8á$±b¬D-ðº_¨õèHaOðˆéhAèCðg3¾¯ñ:àÐ Æž@ð^§º¡Ð"‡Ð"‡ßÈ5ÂI?±e á3z”àH9ŸjgƒðŒÀ¹0@Ódò† µÿÿÁþ âÚ ðàƒ x0*ꠈ①#È )0ÔŠ9¦3 0d?|ñoþ^@±ðÁÿkä ±É A—kÁ †Ä|*º? ˆ µÿõÿKàÒõð_‡»r@!y¼ù«„Iá—Á™—Èl°a‚ýïþð_‚ Øh+KkȇèA‰ æ` 8¹Ð2A¬øƒ2Á°ƒÔ#€Ô ÂÈ`×ÿ×Á-ð‚ðm&Î9c–ŒuE d†GŒðÚþi6°AA>Èdnÿð~·áx+Pb"°ËÁCCµâ!—à‘…)Ã$ HO´Ã ¸ •¿1×_»_´×Áƒ!²pdb„Am ÃPTf0È% àõˆf€xk «¿ÿÑ­”àxc«ñœcD2@°^tEÀði£7¢é©‘à ?®f ¨!xT"N!¡`‚ïпÃdN™€3Ÿ„s¥ƒ\ÏD¯îŸ¼‡ÅÈ“_ˆ¯äš6"t üðÁðB©P(‚ˆEXdÿøtxÔ͇¨kÁbH •PGÃ$5õ¿:‰f‘p4R=@”ÿ? yàkø^ˆµMA©È ¯3 è%ÍâùÁ¿â„Hd†s‰×*ôu£Ášõñ¥K˜ázJ°Ëàß®CBðd†Ÿòä4Sö°Ìë£è"| Gf †ÊÈ ã÷].¸.¡¹OÀ𠎈˜éºç!˜ïo?Ü_ðd`d‚‘Ï"€Ëô† ½pŠ!28dËúÿ _Ä…#Ä|áüá]Câ ¿º¿ Ž a¸ˆ0GQ‡£€¶’†Wêª!'!†ƒÙ0×<1‡ŒA¹žN"AAíüUUä`2CoõûˆTp3ƒÂá*ÂUƒs1 pÉ€ÒN—ü$+‹ x4$øk‚_ µÿö2s.P_\àB5 @ü†sÝ^½–åÙo¤ƒk‚Õä3†2 Áî¡1ÿ¿ ¶d€†ÒCá$ôp1ˆˆz<Ç<Ñ jA r`Õzû„ _¢ ¦9 !!î@½«#¯èCÃI?JGØf¨Â/¨j‘@3±QŠãýW<‡m/Û°ˆdƒi0¨àf=ðGÁ°•á•ÇÆÛ•óS†"6ýä}kÈd°‚†ï~–¤ˆ3èØGÃ$ø6µˆA£@^ }þ¤Â3 EöDDød°@•h†yÞø-òÉÖT~‹ÂI}û0’höõšâÈ-ãÿÙ €ÙËÂ1Ô†@3‡Á7j }ý zúìA/ÚV"C ‡8ä¬çÌ3´ˆ¶¿Ð"‡Db#b }BnŽÿHÐSxd2¨.0BœŒp©bGáÅu<6 ß_$9 UCý‘4È-‚âÛ‚ ÂC Áô¡Ä•%8d8cb/ ”?«w¢d ê”ð_„ †H)1kk"# °DY°b½Èd‚Èá: ^ÿ^¿Øš¥,%ùx+ x°w3ÿ †×d Ѭ ô$€<ŽÂ±iÊr `c·T Ÿ×ÐA~‚ fe @ˆê'ô0ÐB Îý¼ÔÐ4 ’àÈx~@ˆB‚ Ž!AB°KÇt¡×ðA4z A½v€[?)+ RC°Ñ ŒE“ƒ¢†ufýl$$ qÂ_ãðI6¾èÌÙaÿdH6: x=&`Ào`ŒÐD3Ñs<2«ƒ!’ Ï!’ ãƒAƒA<3ƒïÈ-†Ûò±Ñ°(‚>‚üD4xBhÎHiRȆð@ðØ7v* _ÈCô!Áˆ¦hÒ‚ä2AQË x©Ð&ø ƒf‚1ÁRþâj htR ÿ‚l¿[!‡ x9{HðÓ¶*­²œ 49 “p¹ {Bõôˆ‡(Ÿü6¼ ü6tþ¤JˆHAü9 €Uú„ÒÕ‘Òð‹¦!ÿñð2­}i胕;ÿ2ÝÄðÄ}ð³@<5ˆæ_t#¸J&²·ýMçuIÁ¢„\çu«ðBüàÄdpá~C$M>@ð(p´"÷Y0ˆ)˜gƒ»Ý28d‚‚$ ã„|>…0Dt}Á/Šúè†è†H/0@òƒ køGŒ„Ýÿâ@ñ9’ Ù xž@ðá>ÐÛJCä›:GKðžátÈŒýbÁP aö¿‚%Ã!=-ðÔ20ë3ú<~Ÿ¯{î”Ö ¿ÿ ÈdÊ¿d`/ïƒb— yŽ@ñŽ@óþ Á>ÿæò9ÿêP!ÿ¿ä!”9 ƒ~°Èñ{ÿÉ ž@dHÕô…²‡Ÿäü´¨@»ëÝfb4kˆ@@±oëÈ-‚s¨D|aùôÃz‚é7ÿÂP˜0»ÿŽ‘ @€6’ ¬9Q°ÿñðÛýa¤†‚ûk¯Oþ ‚XAûJÜ1!š>è7÷ë‚>7!†¿ xg¢5‡¥ `x5oÑÅ×þ$èÑ4‡A{°`‚%™ŠݦÃ]%÷È/ò *Ô«F€xl£1 C X$ïù hò C”:ƒ~“¤CDçPÕµ}Wô Û#`ß‚T1­Ï1‰ ÿý{Ó`–^„׃`r`2ÿè/!’ïP@ІCKˆ Õ1Fgz‚Û u÷&‚!—ðX%áàöƒÉH`þ@ðÄÌ:^ ZCd3G <B] AH`5u †]  @¿Ð?Á, ]†Á Å~¡²„ ð à _¡²:ä2B‘¿Ùa á¦2Ö" ']c“­Rÿ‹ë@ºù˜b ¶-“Gü0B\DêføBÞC%Œ °=®C2ã xmØg@àŠk_r‡ Ÿ_Π¿ìô¬ÁAm˜¿|èpƒ F¢ E?ÏÃ#Ê©8M)×¼Y¯B@÷˜6_h/ù@l÷ Z °1Èñ€É³DNÖ› ­ Àä|ºr Óõ'=…t8ŸõnÂì4½4j°h‚ÿ@Áþ•‚@Á…‰ Ì0Öªñ'@ȨWbæ è†H9Ö=2s! ƒUÖ¾LدøWø@©+)ÊÀ“#‚Ø7 †ýZd2‡Êß0ëûÈ ·+^@÷3ú4Ê@[«ý‚lþ؈‚F ädÞ__ O3 †,†‡H;à ƒõÍÕ¬Eü¢Fú¯# ™†|Øf¡p——M«d9üð «®A3ò|KÒÁü†„PK÷˜õ Qƒ:æÀÌQþ–«ªƒbO… ÄGÒëôF൥ð1ƒ¬†coOüŒÿøx l,Cˆ V ÿ‚Þ@ðl˜1N¿ÿò†uê­®!*Ìø_ÓÿðV + ÀÐWûÿyÃP˜eÐ@ë_ÿà›@ßø5 „Aáöÿ{j±A— Ø^8ˆ€ÈÏ÷Òþ‰ ;( zÁÑËþ¹þÊôKŒ2èÚ‘ÿ¯¡Y C°„†H…®º[¾d ŽPå@ˆaŸPƒôÐÝ-%Ô†‹ ^‘=˜F/Dâ’šÄ £Dþ¾"Á‘Œ" ©„Bó×ýþf šƒ %Ìæ×ªýþ¡ì‚á‚0œó? ƒÈf‰ÿû)PÈà¶‹dœ è ¿þ‰€ÈduùÎ=hOÿàÃDÀ ìŒxc úêÈëÛÛþ 4¤HÃ-‹_ø@—á6|Cðþ½+£H1%­©á£v´-äõÿ!”;ò#>²!®8#<àpÐVáæ?ƒhÌPm E?ëÿôGHH¨(r†·3 a<¾”=M5þnØ„$2CKèpºþ/kxhâ†ÉÙáGõúÿ‡€ X²0<2êÁñ¡ÿ_h†H)áPPëD _áôÓ0c‚BØn Š0×ý~®ÇJýÿûh,3£8!¶"*t‚¯Á-x`x6ðv!„¯Ò_ÿ¾G¤s0_2?ôð`ÂXˆ@ðW@ @ºPá£=á< 9‡Gòu´ÿÿâŒÃ @]\MHØdG>Œ¾ ¯Â jCaä{C2œ@©.¿_|†@.ÿÄ=^"„Hd‹ Ì`¿É­.ôtAƒã‚d2¸ä2õ,Õiîù@Pú÷ö |_H†Hr«(pEô¾A?àýH28O ÿëN@ðÝÑÒ#†@f¯‚!¡Êõ…ö¸4C$5è`È5‡Ö‚C]XMú„Ã#²>¥ýýÿâ$á*­ ¸ý®€É±j ]ŽgÌ0‚§_Ä…#Ž ”= †úígçø¶—¶¡!’âa5y»¨†Ò#á…÷à‘ÓŽ„ð¸L5ÿ@ŠrsS÷׉¿ SŠÈhà¯îºV ~º¯  Æÿô„Hø‚‡*ûý¬Hd‹ó0ÑïW Èd‚¿…d4`©~ Vˆ3»¥ÒXVPN x6C{d /jˆd†ÐëƒËŸõKƒ_ät gW Ö&é+Vˆ výŠ}—Á4C$5¼,Øf1"{\øV ¿ãZÔá¤>AJ¶P üXé÷JÐâ"(/c¥¯pA”á êÐ GõA«4@h:šþ¸9  Þ@Š{ "!Ç*õ Ö Ò‚D @ò$—È Ój!-B @úcUÒdt°Fa¡†GÏ!Èkz¨-†T‚Ú{Ð/m– •3¬á•ñA-pTCFî@ÌNjDpÖô #Ð8†#ÛI‚ØlÉR‚ŠŸë@Š|(…Â[.Á‡«z¯ÄÏe9£TtÃbçÀð׫oM y ‘*Ö~¾ô :^’$@¯R'mÿê DAüŒ €ßäæPþ†CÕ=F £1 ÂÄ9Áqÿð@·ÓIàÁלO³ ijWíõ̘û HƒŸ û| Üs¾Í| .7 Š°©àˆè 7_¶ä3EBD‘ä Ãÿ_b7Ú¸!> ­!¸GDè_­!‚tp$2A~XÑÈÙ8:pºÖ¬Æ½›5^« {@Ãaa’r‚»Ú6Ãþ°0µ¥ôƒ†0`ë …ãð› ¼ ÞžI¢8 S޹ •Ñ i§‚·ø%…\(&ÁoÄÇI² 8244ö@Š‚)ôqÔCø5x@‚ !Çã3þ¿ë Za0ê"ÝÂÁ(E<0—¤8(ëã⣀x®f6îDÏG`öSýÖ@ðjù CX0‚Á@þ †@lÇd#@ðß¿Ò×_ x_†¡$°A}eŽ7áA¿àŠÿ"‡Ð$4’‘žEP^!—Ab—úOºªD8Àdï@µ@ˆ(™ “‰  £o_ü H ¬‚Ál6¸GÑØaßä  B> Ð*AÁnDt‚< †W“Ãá² ˆ<2] ‡ê ÿÿ X$ˆª#äGKha‚#AÔ›^&¼5þ…HÀƒa  £Bx&`x*^Ãÿÿ a΀‘ŽÈdƒc”ûKvC »y0Ä[é`¼Ì#`Ô¢¼ X°æi<3Nqÿ«ûþ°h!×Ä-c SÃ"àëH†~ ¢:¤¢²€îÒ çl%_¿ÞøKAUzM‚D3ÎÁ&ò˜˜#PH.CR~ÃF°<3"‡È Ð" æ3Žúÿò(æ«Ð+® ðyð.Ø‚<3Žz¤ºàax6ωÁ_肉á&ݵãÿ哼à°_á¨9Á8ƒQf–-/!’ ƒéh1 a-×0“ÿñwÁikýìE8dÁhH8¸@¼†Hj°m ŒŒÁ¨Øj qg‘ŒºÉ …Bÿ÷ä‚ù÷[ ¨>•¯=¨!žD,†£œbK© ƒ“‹Ü˜lìá¢}”>°ÄDB(@¿þC?_Ù†² b uúd3Fä' V ÍIþ Š€3  á‰ÐÌÅY¿ÈÇþùáÂãh†HkÔýÁ…  dºúP@õ÷ x !¯×Q"$4øÿ é`—BC$3LI„»ñ¢:Eƒ" °a(%šD‚'ðl†@…ÿü˜2"¿ëð@µç@[ ør@-†ÜÉ?û ’°È ¾BT•Atz½È ç }yÀ¼È-ƒ~’?"?õÞ¾A¬|BA¹˜-‚µèàÔðE>A¡XÖÄ4”ð/_jÄ#à©ÔaÌÁp|GìŽ m/ò;$9PthÌ3þë⇠ٯ²ù…;¨\7Ö6¾@ðöCÞ¯oM|w눈ڦÿû&ø80^"B¹C4~á½|àD>²t…¿ £Žá¼>÷þ=28†¸ aùµðŠp<& ^ ÉÁ¡«ƒPÿR‚}q† Ïgs7Ϋÿ‚ò$¡_ýD„Ïpˆ ;ê’Çÿ {p¼ý¤N ±ÿÎûúì› Ê#æ0Èá’¿×ߤ¿¨ _^ñŒ®@ð/D,ÞJ2>ú‡×¿îC)ÊψÉÀÿù @}`›_8 Ô¿úÈig QÃáZHsÿïÿÄEä2AcåAåëôˆg¢è"ƒŒ ®;¸]¥ xMfŒ-ÈÌvÚ4ÓaL @Ù •úÿÝd2C\]9Èá’ ¿þfþP@ÇiWÿ"BxâØ{Â=(5¼?_ÿú¶\2A›ÿàýÓ…kÊp@½|$ÔÏ.™Á¨rƒ°Dtƒd?/á:ÁïÿþFØ5¦ …ÿýƒõr P Èëã_þ¨!!#) `÷‚)ý°~ÿû"ÿt$2F1”cÜç×] A<3)®½(%‚./0lÚjÈé„ôƒ¾¿úþÈd‚›’¡­8/Â0ÀŠ×þ‚}j¿\ \xb¼pºðÿ…Ð.CA×Äÿÿþ, Pl†Cò¯ýÚ_öØ@˜`»D2C\\Ð@aðIÚ¯õù ª<œ¡ýh†³¡8a~C1¶ ÑÞk¥¾ –8 ¿ð`ðÃWðÐß!’ ƒ…’=¿ÿýâëk9D3hôfƒT!‚¾ÄÌ×ÿìPÉnjMfG½ý‘C¦Ì8WÿÖ²†`é¾à±ÁÆÈx-ÿíìP0ÿÛ ¶LÁ_«¡P@ÜG~¿ùÁEDÇ0ã¡u~ xGHÀdOÔ/!’ÿä4 ˆdG'P†¼"‡§d> ÿõà¡eáPSäDz£œ‚n8~‚3Á³„!”;õ£à¼ˆd†—äÕÊ­2-Úñ°¶ßPKô"!†ãˆa‰ì†@h¤x ’МÀ±û¥ÚŒÔì&G°K3 ï ù g˜ìº^øzü/£xb$2A¨ÁC·‰ðò: Ñ FC;²:×Â5„ ˆk| -½ ü‹Å¹]}ÿ x4Q!}HF î.¨Ax ˆlðG@<JrøAèB }âC& Á0øB,†Hkÿ2p_ÿKä ÐXs@SྨŠˆŽ†v¡¾u ¢ bü‚ØSKþÈËÁ„ñ(7ÿô‚ºðaÏ‚üN ÄðÁ+Ð2­Q˜V MÉ_ÃEKýà¶V¦§ƒÃG_ÿÁ¿Ù ,\!yš#ĘÕ¨1Ò!²dÃ@ü!!’ £ª$ÿÄ-ûV…L.½}< wˆ1 Zá!ëlð xK8ÂÈd‰Ãó0ÑÿùN Èÿ f _3X@Tø _»iüCÖ¼†qÌç°Ä2¬ BDÕ\†IŽ `Ñ ¶£„ æ¿ù 48/ÄCék® @Õn¤ .¡¼ ¼DC×á*À½Ua/òûè«ò ahn¿ÿBÊ>@ˆÈ†áŠH`x*È2LãüŽË㙃æpƒÈd‡ŽªÕûɃö>Dí2„ð×þµBu Ò§¦2œÍˆƒ1Ñí_h"?!’ÀЬ¸ °L¡÷ _Þ¤0ä2Å‚ÿê ßÈ’ Ÿâ!‚« ÈlžŸâ· ¢t¿! ]ëØºÿzÌÀ€é¿‘`<6Aª:ªä © x)¹NQеýØa!õì/“ƒ®¼ði¾È T_þ2CV„rpa‚‚?p– 4¨0í‚ ]YÿØia!ûK!‘ ÈjSÈc׻ߠ£½ÿV¿pß ¥@öpb ¾™8.#?`çlöBÓ!þ¼#@È õô3ú8§ú\[WþÁpØ…áá2 kZ’j˜Ú#¡R C£€x,ª ôöø( x,Ø…ÿÁì߯ð¤2FÂ(ñkБÀðÛ4/ß_ü#΋ɹ ǹ fÜ~½‚(pÍ@¶Z µ3Œ!”_ÐÂ=¯°Í0²…ž±Ùƒ,u чýýmp]Ј>?øhF´ˆ1áÿÏ‚T{Ä…Œèp]ZˆžÃ*@ÅE:³0.üúÿ´^@¼ÿÈ¿³‚0†L?éÙ5ÒÇCÒ x)hªâx >¿e?½®·' ÿüGÁÒ´h˜þO_Kä ÌàÍ’@ä4L; ¨üphCò@gª¯ùÎíô œtˆ&žªèÿÔ#¦ ¢ !hƒ!’3dh!§ÿü(ôÈé÷ï÷LŽƒ ëqÏOðçò½B"ðÍüþÿH;±3J¿ôºà…ƒBjÿa,0½´  Aõö.–ï!’>@ð”!˜áÔ6Pä{ á@µð•uø_õÖʆ}Ý<~E}ýRÆÈg˜ tñ9ÅgŒAºÒÈd œ/ú‚tV¯í„¬D" `Á]¼€ÈúÁÂ:A~ˆ="Ûö©&Èdü’ÿ‚à—õä» 4¢„C$‡(oüƒŽ ƒkÿÂgpH†HTä<~C?0e9wI¨ö@üqÿZ#?"~»{# LÌÈãÉ ÙÎQ}bóG_×âÕ òÇ(d25ü@ÌáÁ^u2œN?Ý= ³’… b3ü"P™‚uø…È¢ ÷à—]©tølפh4ÿíÈœr àˆè) -ƒÍ@¶ b?RŽÈ6sþеGt©±"NH"‡ýCåáÇ ¶‡ú¸'ÿàÁàÅ•©N)ÌÁl~ñ@á6¿ˆeˆr!žd4“þ?t5ø¼Z ¿ÂJ0·ú’4@ÂqÌ3ÿ×a… b u—MÕ]l7á+µ¡lðj | VwÖ†ä1HèÌý„ Š’ÌP`ù°Oýÿd!ÈÔE‡þÈ s Uy »!²d2CRaÃü$EˆúðÕ„(~»µ Þ$1¯y ºwámH™¯ø„DH1îûàØPΈ [ý~°¤ìý°é™‚ûßKÁoAÿú A’ ô¤X ÏìS0!ª`2WÈdƒhÿøê@ñG9>Âéý=Œ  ÕV´g°‘ O xYÊp¿á ‘‰Óÿêô-ÙÐÿU[ÒÆDHêøH‡Ô"·kÔGK ɺqqßýÈ T@Å ¤Ñ6 *û f?\†hÆ6ÊøGÁGÐ/mXfq°Év‰þ‡Âz!\ðWÊÔCOÿÿ†Gè˜À¹Þ¿­µý.ø‰ Ûd0É®´—×è‹aá _ª_ø‘Îhƒ¬)ØC”ÿx8#0<1ðŽ÷bšE^x3Ÿ»ÿî«‚¶! ÿÿý~ˆ"B¢ƒý~¿ ô$2šÊDÎ#Œ¯Áù D‚#¥ÐpGÄ WOõýÈy°ndcàbª÷ÿ¿ØDÀÀ#ù5êA³à¢ 0iÑ{Öþ¾··Ï—ñ²‡²qúø4C$6Á®ü0µõ·UÃþ·ýS†C޹tXøDtlƒ. Î"Ÿ8a(šÐzë†U¥˜¶—øpÙ €Ç§ñ5‚ÆAƒCýq!’bHÌ4; t28_ÿaø~È(=°Kì%þ0Ã#ëõ;» @_þA¢1!’Z£¤\|kXBCÿà‚×R–ƒxfÇÿ<Üî#üd|º j ‰ƒýY[ܘ¢3  È|†H2PŠ`ÿÌ3>°È¦PFGÔNEÏíwøBfÖ– „E‡ÉÂ_Ü_"^½èAB¿Á²‡ð@’}o!4!• ˆ6…{Ô/Áa>Âè†HÕµïh†H)r µß¸_ñia @¿Â†Ï @.°E{/­Wä 2GÁ„†HiÛCŽ`õ8ô!YÔ0—ìg ‘Ð_^ Dì#àÔ¾°‚nÄH¸=þ¼ò#ï‹h†"h!¥ x8Bp Êq ‚ØkF /× î\qlGÅ® ðA_þ %¯úH8xo‡üb$2Hr‡ x(¨û2€`ü_ð‚þ¸"0ÿ ¢|5Ò ¶Eü°ž?¹™ã6ü@u#ï|5޾0`‚oþ¾ŸoÁH-‡#‚!’ £…_ü˜H ß²:ÃÖ,Ð@ðG0èðá†@ñçïÒ¸9Ü‚'°0²c„|-Ußa$vÖ"È@ÐÂD æS†4&úlƒ>„ÜñøaúC †’m, Cˆ)´äŸñ$fçN»΀‹äãüaÄYçý®A·‚ ñd†G.ð6 ¶å^¿’;‚f ÓÈdÃÈ §ˆYíX"‡úâÿuЯ"§Ò!’ YÉbd=ßü zÿpD}LÀðÌÿ>C(«Kk!›­@Çɤd2C*lYž¾¾˜7w ãÞ@ùé €vö@ðÌ$#y/Ô B%A¨#á’ ñ@™pɾEÿô¢"~ý  Â{dH¿‚Ô? j ¾¼‰dp< ßä5Ìt—ÿÈiËëðl¡ÂPÉÁUô@ðó’°Õý< juzñõÈ)¹Aúßþ.,ò8¿ˆ‚ôF@¯ýµl xl‹™‹`ˇ8 ±þƒÿ Øñ@ׂd2D¦@ó¿ðKHò‡ x% Nº!œ€Äû AHjp>ÿ?Á„Èa’ùØ"©þ@ðϩ˴ì†Pñ¡¯1„2ép^¿ø":ÿ´>ŒÁpÁ?ä ¿B?êxhñKà]z_ßüs ©#¢ã#‚؃ ?Ûª\t@ðÙ¤/ xj|÷ú»í‚xˆø":· a¯ƒdô²xWw¼7<2þ—ø¡<5‡D`dƒl%ÿïÿd 3áz€^ƒª ðÈ6}„"×Ãtà—© ö,˜ i„CÿäÏÿ|zpM‚Zø ˆh Ã&×n%Xcð{hµ 2*!³CÿdÁýjÁ…I¬pN5šÐVÃhä2A Z†ð@¡ÈÌd¿ò€þë!?ü2%”0â¯<^ æbƒH/~êØ{&™Ñù äP ½¯ë؈"‡v^_üSè!¢v"‡o¯ê ‡Ìû< 5Ñ ¸ Üë_ÿø4,!ü²0x'a•E¿ü+†•¾ø¢\2A¦¿ßÛìͰ‡þ$x: M´¿Ô7 *DË×Fƒ$ }×ýlDí~À‡cÖÿ Øg@pÿ¾»÷×ôC0ÿ†@ðãÙÇ!t`É8@’Z[Ø…Úø":<+_þÿÿª E?ÈCª Û8ä§ ‚(R ÿÿÛëúA?ÿõ¯ø ÿá²Ã*ň¯ïò°rÿ×D ~½î5ÒÓüJ€<ˆîÿô¤ a—ë‡Áÿ¯ü7ýPeÑ €CÀxîàˆúüW¯›©ðÉù÷Æÿáÿ Ö30À|0¿B*"Ú^¹éÍ5ø®ˆaÊ?ìm¥d L#0[ ÖÖÐDßãé „Cõ&†œF hc²ù€;ƒD1°þ¿°¬ºkâ +Amb4#ŽØKþü_Ô4  ad5ðÊpPHÈà€¿ëÐd §8ÿˆ3]Èkñ šø±3_ÿjÈî®Á¶ÜÛë\]HsáCÿ@öýÈ-ƒWhþ¨Xšƒ$ o r¹ÝTÄf#ÄàDȇ4íHqúxJÃQAð`‚€È7üL3]Dp@Š þÂÅíÕú¶Ž’ :Ãt/ꮳ0aÓ„GP~©Á’ Ÿ ‡"¡ÿIðGôô ˜5Èd§ £4æ8b" ƒüà× ­xGúBømo"f0è…ÓÂ5†@E`¾2œ ŠOƒxf²ÃTü" ç)†hùp„2ëaê"§Uøb BóbÓúMÿ C LÚOÿl ÄböGO~0ƒ!ª9cº‚BDá¤pU°ˆ-ªƒL5ñQ ™?°Â/‚(p«ˆ:õ ÿ‡ü4Èd„<3#mDWR0½k¯àˆé6Cc“ |0d²8“àÓ:EÅÿ¡¡®á!‡ÄŠèz!’ 3ì _‘Žëý Èì±Ê Wu˜5$¿ì†ÍC]PKÄ„ j>P,C$6` ^@¦ƒªä3O¿M× ÀúʵD0) ¨šÃ$ ?ú8A`@äï‚cù  `R 2;È d‚·ÿH†‹‘PÈ’ BÙCðN ä‰ý/¬a7èG‡Yš6°åŽÜ" ÿ×™¸Ý,<›°ð‘ ÿhè°(h7÷ùÃÎò èÁèàd D$(ðÔ Eß À– oúé‘þ2. C#Åò÷ŸHC|ÞR,Á¼ÈßÿƆn(áDD„AYÕ;AƒÒ!Ttùe(ëÿȃ±´?ãùá—ðòÐ$ƒXÐÿþŒÃ dtm({0ízúä-":.°ý<4¦Ñ‘ÁúþD‰á‰Àäp<4ë„x_ã!(á¥ü*Bä CZ?ÿ x6HLjoëñÍ"\ A°øfÿVòëõô2 ã< Ž!›GLˆÀ¿×ê·ÿ LäÌh<ÿÁ#Çþµè†Šä a˜ä4ÄX[ÿ¯ÜƒbH8åòú_ƒoùXR`xGuOïîµ x2 †•b?…ýC "„`  ¦µ%¥ž 8L¡Â8Ã(w_J—× ÿþ1 ¡ÏÐ×ò Å‘¨‘ÂÅ<4¯ÿå×ø>C%yÇþ¬†j†ÿhðg×µ‡ÿø’àxeC<qŸƒT‡ { 6/‚ m 9 §?£<ô{/ÒÔéz¾T™Ã8Mµð/s1,aü'"-„ ƒ‚qþÂOÿ$~9¿ ö/ ×çÓÖ„´5àã ü°G;§àÁ„°±}J=ÿÑ è2 ÛB“è"|WøƒÚñºÚü&0ߥÁ7óã'AÙà¨<ÅŒ!ÿä A’:ȆeJ³oÓþ@¡Õ¦×}'ò‡˜· 2 2RŠj =K©Ãˆf±Ad J Ý-q_âƒW_ðô¹›d2Ž!’XƒdåXex±ä ®d¢?X}ºþ8 J´0ÿ!—i Õ3vˆ 1½2Ðnc hƒœyÛUÿÿÕ|H_ êAS&c~°ÈA¢¼˜jŽ\¢# Õ=W )õþµÇC30ò ‘×Í´$d Ã1Î/ð~¿þ b÷ýÿŒ ‡­`,b¦`£á{ÿô ÿÇêôFûä f aÿÿÿ´#úþÈ ?ü«ÿóà©aö°@éèpŠp% þ—›H'û(CÓ¢\qÿßÒ`ß_¡!´=`ÚÿÆDHffA‡ªF`äæÞÿû ½ Dô˜Ó"?þ*!«ž ߇Õ?þÕ{ Íÿá$|3~¾ƒ»þ« ÿðþõ_ÂŽ‚ÿ@ðS¨†Ï8„Ÿÿ¤¨†S•3¿÷÷ö`eCþ€%ƒcIÿ…ê@ŒÃþþ˜Gæ„H`K /þýø„$'öCQè2Xoú^˜|ømo¨wÝüÓ{IÞßÚb¦ëg÷á/ƒïÛ™ÄxˆXeÚ`Öác¤ù‘Î@Ÿþ 0`­|á¬x•xh3iwd€ÀKôƒUèHaÊŸ_ÿ„8B/þ¤ `°D/„$'à•´¯ý/ÅÈ7¿®ÿÕþíô…‰ð<4t "Ex8¿_4Úÿ pެŽ WøA{ÂÿÿáòƒIè†Î[àÈdƒ0OúuUPm @þÐ^ 4·]‘ðé:è,/È-‚w‡ûÂüYC÷^â¿Æÿµ Lr< LÆ›ª\u ?†ŽTƒ½£0„|_ÙÌ{öEOÿº&0ý ¡ÿǽt¼? ðPf Ôñ Ñ÷æp¯ýVqÎä,˱ðA ‡†#ùX)Ç}=뺹 ¡öDÁ€„{B÷ÝÄD_p‡ ?¢p<z»„¿ªi‘ÓèÐfÜÔ^é{ý°[­"†á_ù “N¯a¯ë†rÆúŸÿ. R Ž aƒ Ÿ†É09>@ð_ÚJø"À\Æÿâl]~,0G‹ä€×ß6¾®¨€9Ž/Ó Ö>D‚;@ÿúújCˆÁ~”ºÍ_G6ErŽ1{/~†28?ßûú~Á‡(Zv}?˜ D=^‘"jÃ-˜rÇ¡ iÜhO]ÿýÿƒDÝ•¢:¢ôSú‘"Å Ÿ!È$Çø²‡8á!õþßÿÅ0Œ†qä€lä3þüøn` È Âk!†1ðÈ Gì=ûö_ EÌŽl9 Z!’ŸPm~¼P2Ç+¾DŒÃ˜A¿á?Áÿé¡ _‚8^JÁìÐ1Ƹ?ûTœÈádžù 1Èiƒþõé©2AI¤Ý2:dX·õïÝ£âäR‹ÄƒHðKˆCîÿ©}É % Bà r® _uúú†ÿ™‚}ˆ¿ÿAœ‡Šitm‘Æ^[ r ª:ÆÿþµOÕY ¯Y,©×:°äŽaÿl‚âí "„!¶LÄâÄWþþ¾–Cf} ;ÙÁ<à„Ð A¯àÁ¨‚#¦ à¯ä@WåiûZÿë½}ãTsýáÑ¡š€Ô3Ș-@ÈjÀUoüHHü†HfúÿM«ë†!ºø@ßîÍ…6eC `×ñßÿ_¯Ð@ÿé°ÿ‚‹þ` Ãk ¿ü=7ÿÿ½×ëÿVÐ3 jˆk·ÿ„ëþ¿Ôøà߉L!ÏÿÿŒŽ¿á,¸ôŸöýzaíCÿÿnˆdy”âÃúë OD2N?ßòöñÿ÷†ÇPHa‚×ÙP¾¨A…®PÿT#z3fwÿö](Š@®¿C¿Q]ŒƒŽ¿¯àßÿâ Â!’ÎÈÁµ8&•'ôx3kßÁaƒÿíÁÐ ÇûÐJ¾ÿüþß¿ u— •Ô†dUþ>ÿþ@Ð3`§ÿÿ¬PD?¾»bÿ´0ÝW^@Мˆ3åÃWÿà‚î×Å»ÿõü}~ð ¿ßï×òaÈg„éwß õë«LHÔ#€j$Àœt×›0,ÿÿûuéf¤o …È-†^ª®ÿÿëëÿTÄWþAlrž÷¾øéRõÓ#»`ˆéTƒÖ×aÿÿäc½H8ý~$pèAu¦ þ M@Ùÿ_@ö=?ü˜Ž-øáªþÿÿOØZÿ¨²@EdŽ¿‘ήÝüÖ­òßü2Ÿá×}—UüÔ0ÊïÞ‘'Ã)ä !Ã[÷ª¤‘Ñp< Ät›ëú48¿õ°A&y°NŽ€xií-}"`pçºÈ6F“|Ç÷Ýÿt‡)XÐ6(>Ò}üDr‘ÿþ—ÿö‚mHÂjÈdG+¨«ÿPQþÿÿþ‡]b,Û!Åí&ê°‚ÿ__1þÿXd!Žˆ{ ´Ã\%á/ô¾·AþáÐV‚  ™˜V¯Ï„ \Wô¿õþ†@Ìïù l‰ 0D …û´@Æ›¯¯õ}-´ÿjA©Ädtl–Ô&@ðhC4ë1þú^º>&õÿ Ô0GºLƒÌXõ_ÿë¦Ãx@»p;£6 ëÿÿi°Ý®Êyb@” èƒß„ÈbÍïÿôºàЬƒV¨%œGºÚ7°‰xfHއþ—û\x1 %A˜°k}'¢%¦ä ñšÀÔ×ö;†]À–‚h`j뺺d 8¬˜PÖþ¿pðk™ŒÂd@Èqÿ«K˜âèàÊ¿íÂä Áf€Â!’ì† ¢(H!].•¥§< Ã*ŸèA÷¸Èl!€Á ÆDÀê uûÝ'Å j+‚#© ‚‡ÿëàÂæsûõ½¼‰Ž‹ HâBöë³è(!ðx*„…Dû›`)èƒc].«×V ‚LPQÿìE¡ø‹T  ­H7<˜®N_Úû¯@àÁÙ€€«úT\!-þ‘`:@ªÿô½ŒÛ!•Çü0D”9ô ®è†= ›¿du!š¯ý~•µL™ÁÇÿùñ xht%Nl2ûÿâà Ð\Õ¯ÿéÖlJ»Ó ·ÿý; h|AˆCLÐN»W§C64*«õéè&Ö²š„/ÿ÷ÈîA)kSb†¸?mkþ@ðîSïÿ_ê®ýÒ™ ß0çÓÿûA3qÍDú¬öG{‡ Øö—è_ÿÿÿz°ô„_í©0jâ;¦–i¶_ÿþ—ZßÿþŒ-=Ñ{kÿ5Ä8Z›œûÿò¿Oõ_®®þõ­ï_~Al6œ O6 ×­¿ÿïÝd ßúÿ¥Š¾8#à\>×ý¢ a®téëÿÿõÿzV_Úú^ÿÿý„C$9QBhØAëd{ÿÿÙnTIÙÿÿ]¿ô¶×.»i~âC$¹ÃTº.2á ‰è0÷ïÿ¾°„øP˜­r,­~ÒÒ¯ê/ÅoBC$ ¹Ni°OÒw_ÿþÿ‹‘0a×”ÿ®\  Yÿøé×ãû)È.a®„!°Ñâ¯L=ñÿ­):/ïãÕ  Ë}K© ž4S eY´±Ò ¼Ñ€µt¿»ÿóOõ‚æaTט‚„É V¿ì¶µð}a°¡›EÃB›¦ÿÿúôÙˆAèb5T’nf ƒ~*?þˆ?ikä buð‰Ähi°·Ý¾×ý/ýUõþÁâBL!:6þ?Ö¬?ÁHþ¯N“×þ^œ þ¶¯™ÄtF¿µ]°ˆ™ëúT”Ðn¿ À4‘ÀÌ ÷WoÛÿý„.º¿r,~q×ðòÿ×úä!¨~¨028‚¦“ññÿËr§ÅÑ7^{W×~:ý´f»d2´8ÿº¯ô¾·ô YöUy0W‚iÿ¥˜øCíH¢?ûoõì/öà.Á}ö·þªä ÿ¦Ò$šÿ¯þž A.7û¿­?k„ûøO×ÅËêxO®¡°Q8ù0ç {ÿ¥‘ÝEÍ?Mì  ýýýÌ?3š‚¼†e‚> §§Rï® AÈdƒ~ÿýµAäÀÄÄ…ÿ÷u²ƒYpD$tÚCÿÿ†:ÛgÕƒö<®×Zÿ´F@i}º¼‚݈h8|ØŸÿâÒžé·®¿ÿëé:ñµ±Øku~¤6ðÝÞ‚(xy Û´ÑŒº.º ºë"Fµ>.°ð›Ú±ÿÿõÿÚGÕìS×ù,§y·!(Ãÿõ Éý4Öpt„[]¾Ò΋ê(].9ÿÿï¿õô ±j÷ÿ†C €wÿÖ ù ‘Öªˆ'ïJìÓn¢ë Òì[ð—þ½lº_þ® <öjßú ‡ø°•Rý7Ú£Z·ëúÙ7[!à˜æ­´‡üß$ù gßÇúÿÛ ‹Z]0Tpü=A4µ´›Jÿ»ˆ¶y‘ÜŒ¾¢Â´¿ÈQÿý~°ÃûG¥ék çaHiAñ¦V—á tuÀàÿó™‚kßú‡FxžßBßNAw/õ^º$ýÐû‚í}PÂXÂ…¯ôèâ¿ÿÞÐþÝ7½Z¿8Óƒ=¯^¿Çéµ½×õýnjrï‚/~G~¯‰„ÁÒúûzN¯ÿþób:±ÒÒýò>>é7ÿ¯¥qýÑ<3OOûif˜*ÿßÛ ˜·Wÿ[í¤ëÒÐ_yÞé´­l(?ÿüWä©Â!žd `×qú­XK!­‡zëÿßuý=~®ŸûJÕú×¼‚ïúÆ=ø2éwsL¾k Eã„x Ä0[ÿí¡ÿ¯ÿ¿íi^Â×îô´¾ô¶êÛ¦ΠaøI A Ñå8Hi]AÚ[_ÞÓÔ7ÿ_ÿý¯ê?ßéu¾Aû]Ž)¦GAYãéÿVǸU®¡Ìáÿÿÿÿþ—Þ÷Ö¿Þ–Ã.j _L؆™ dÊ'?þ×ü> WÆÈl†a-ÿ_ÿÿßK_ÿÒÔ†ÇÉǪ÷.â"›Q!ãëðº]6˜¬ßø„“L‡˜¥¯ûÿÿõ]ÿ¯¯®ÚW´Ð¦CC‹"ÀµPD|Ø.· §?ÙXèJ?iÒD0<3„‚úÿÿúÝÿô´¯¿uš3àÛeÀÚ!XR †FOÐÈef øŽ¾©/A‘f!†A‰ÿÿÿºÿÿ÷ùïÂut¸2C†Â Èœ@ðgB^­ÿȶçÊÚ^ÚÍ“‘xf -këÿÝß^ÿïKûtà lrBb!¨§ €,ï°oë@Ý¥®´lBõûKïÙ™},‚‹ÿ«Z´“L˜à±ì&a A˜7d1¶»¿ÓHVk*?'!ê"ÐàÅuÿ¯ýÇþéºK|2/0ÂÖÌDp%bêBFœ2Wûëþ7ÄAÖ»d3ú@ðo×g…ÿßÓ@Û¿êþ΄!±TЊ[ ®l%2 9Qÿ²ëÿM£}ë´˜ÛCÿÄW÷L‘ý ¢ DW¾ßS’†:h2àKžAí[Å0Býu?ðAtDÉýÿúSs!{ ¯ð_îÌ"ãÿþ•Ôþ"&jHGzFlzÿü$•<"=¤ˆKGP<pûýb?km¤¦ÁX…³@Á/À˜ÿëaçü‚_ZOWõãI<ÆÝê¾lÿöPv°×9¦Ndpr8V¿÷tD‚Ê>¿ÿ‚^Þ䧪]-6‘<í°@¿ÚþÿÅ­°¬qLØ.Gh‘Ã$3ý®Â VÄÿX-}¹¬_øUè‚îCCˆ|ûÿÿø­¡ñÖ˜køpn¿@¿®K¿×]¤ „h†© Mþÿÿþì Èñp%_û­ÒÚØwÚàÐ5?ä.¾‚ÿ¥°D:àÖSê HdÁþ÷ÿ÷!Ú Á„"?¥ý6-\0Du𗮤?×Âßt-0a”þŸßÿþž"+ûõØó 8àü$@è§ñ­yÐqþ`ä dü. ?¾¿o×ÿI/ÖàÉvþ°EÐ%ýKƒKÔ"A´ßòãm~¿ªýåÃ`„ê9 ^ÿÿO¯ i²pOÿõíûkÿfŸøË ¿ÿIyáuõœ}´pF ׯÿmK´¿\ þò `Y8fy/úþÿ6¹n·ŠÝ7^»I´›_¶>´¢t¢$3C FÀè­/ÕTwíꇧ!‘#ïn¾Õ´¿õžÿñ4 jþÿ(]ø” ÿrP?ÿì0“µ^‚¢ýr`®ÿuÿujŸô¶‚yÇÿm[-ÂQµ²â+ô¨7þ:½«×þ”ð¯ÿÖ&`hWüº1ÓL!XUüV—ù¯¨AßýÁSöö)¦dp;†oÂBÿÖ :ž1Úù'þÿô<Ûé·°šgÀî UÒõÿ­'Ø-}í|H1á¡ô¿ýZbº¯_µü= ÿîÐׄ¿þt¨(¶¿õlϯA¬†XêŠp3‹T?¥¯ü21ëI~¾=ÄKúÆ!—Ä£ŸZÒ^!j¬Ñü®w0ÿé/û@AYÿþ ÄÙb#‚¯ÔŽÐˆ{iiyPYsŽbì4¾ÒU®) ò QB™ ýÿý)0Zá AÞ+ëÿçÓÿ˜l#<ØŽéU¾"ÖýõíB!oý""ý"/ÿÃ_×ù ȯ_^ö+JºÕTi°—úÝ9­z¶…õÿשXàë¯ßÑ ÿjèp×m÷ù0$¨ |j¿ßr\eÞµûJÚM«ò 4Ù ±éðÞM×!„qâþ@´ ó¨v–•Ñ0eHA¡9 ;†q­oÿ!²ùN Åä¸ÇÖ³D²pa÷Kõ\t}úüT ]¦Õ´¡3Iä3Xd AŽÕúúè„×F <Háû ¨ ä ÁZtÙ‘ÎyðÎðÍK¯„ß“uûiˆ„Þ–Cíä_+ dÔz°Dá™­2Ç!ÇiŠöKK!3ºï_oˆÎ RøZkîƒ x8þŠ28œŽÓ3^úÿ¿è  b×ú¸A#ÿÿ8#¯Ü„: †&ÂöGDtƒ) AcöE˜ö“¯âÙ‚¾"÷ùƒ0¨2°Þ¿ÚõZF 6šŠ¿þ9Ÿõ ö•¨· «¨úÚgƒaÆGŸû‘ ^Ò¥ö‘ÀÛÕþlZd 1ÿ‚BBrÿÁ†™£_äÍúÞºÒp˜R ùËÁº×Ùh8çÈÿôßÖ­¤ÚAæi¤H@lüv­×úc„ZúWÿõêÕÕÃõØhÿô¤ ¡ƒäÛ¼Ô\†ãúý7õªd ½ ‚³ýBWÿù‡_ïÈAy‘5Cÿõím)Á½Ãö ýj¿dGVÿüÐ FµëÿõOÐz¬ƒß×ÿòA£ ¿¼Ð09rwúÿëjÞ“wÐUü?^¿A‘írô©d`±Ä-Ù¿á¥ÿÿªN@Ì4‡®ñ×ÿÿý´*™š_¿ s܉‡ƒ¹w÷Åuÿ×øÿÿÿ×þ@mãïiò ×rc…ˆÓëý_ýíd Þ’õ¯ú¥NÖþ– CäßüÔ:ÿW®=ÿÿë×ÿäÂÑgÞIÿ r9–=…ÿÿæÇ¯ÿÿùÿ×ÿ¯¿ØøKÉ¿&ƒS¼ÿÿï¯þ–¾ÿþ¿ß¥¯äŽ|•ªùhžXýwÿïÿþõ…÷Öÿÿ×ýzè …~@˜ ÖC>©ýÿúÿºO¯Ã]zþºékþ—!àjÕü0¹HAýÿÿ¿ûõûkÿ±j)'ÿ¿×ÿÿ!ÏÝr°h† ƒôÿÿôÿßýCô¼†HgȬ_ÿÿ_ô| ¢ÚYXWGÂÿûÿÿûÿÜ~—ÊpÈßÿÿÿ­ä^ä @¤ä3ù?ÿ}_ÿÕÝU!Ç<ÿ×ÿÿý|œ¨ lŠÈ€Æ¡ñÿÿï¯÷_ú²éRHñÂ@s2}`ßÿ¯ê¿ê¼E‹ä Hrœ…Ð/ÿïûÿÿ]!ÿK ÂÑ 2p‡†—ê½Rÿÿø0²ÐË‚s:ÓÿÿýÿÿÛþœ¯¤qÂjAÿÿÝúõþÈC-òÀYã#T>½þïÿþßÿßý~“Z脵_@†«ÿÕ*õ¯èƒg°4‡-Êî„?ÿïÿýÿÿÿÿÿ\ƒ|ÐO6#!¯j¿ÿÿÿÿy™`0ç„"/þõK_ÿ÷ÿÿ_ÿþ!‡÷IÑ ì3:_ÿ¯ÿÿ®³ @¢@Ô5>dNÿ÷ÿü/Òßÿ¯úþÒl&CaÈ$5Bëÿþ¿øò2 ðŽÿ¿ÿÿÿïïÿÿu~¿o_¹ÐƒHiÀoZézÿõUûFbÀš²€WÀ¿~ÿÿÿÿ×ïÿíö·“­—Èîßõ¤(0g<œ ‡ÿÿë_õþ4 Èäø«ÿÿû{É×ÿÿûö½þSôÄH¹ÿºˆÈh² b;aÿë×Oÿÿò`ª9¨…Ýÿÿÿý÷ßëÿÿ¿«¥i]õ_ýBÒÔ# do ÿÿÿ¯Ò¬†qòa™èZýÿÿÿüR»îý¿»óëµì?®¿¥üUºo·ðÃÕkUó˜u_úü†øCy°7s¹;ÿÿÿßÿß]{ÿ¯üwŠ}Õ¿ÿý'äéÙ2r¡ÉºV¿ÿÐÐÿú["×ÿÿÿÿþëÿÿл«§í/Ìwô›õFÄjDsÙ\"A­E„ ÿëþ½ò YQɱÈmúÿÞÿÿÿûÿ÷ÿÿ‹LUÕ¥‘c‹¿ýôb$àç!—ë÷ýÿèM˜ pšÿëÿÿÿ×þÿÿ}¾@Ð àjP—ÿaëûUIýAqÊpËŒÿõÿëÕzùÈWÈdƒò¯ÿÿÿûýÿÿÿÿÿãQ¿_<.N š~×ö³ÐL„@ˆ`Ê⃪úë_ô¿ô¸eewÿßÿûÿÿë~½ûÿýy@S·f‰m­Cˆ~:.»®!8eÀb&€j Ÿ¯_¯ÿøŒ„ïÿßÿÿÿÿÿþ¿ïûüZb¾¡7l?µqþ`KBy ‘ÿúþ¿ÿýÿ÷ëïïÿ÷vëïûw×ÿä Añ®ÔmM.ºUê”0fê—ÿZé_ªUÒKÿÿÿÿßþõ_ÿýÿâË ¶+¢è?ÿÈþ·.'ÿÿïÿÿþAÎ?ÿÿÿÿÿÿÿÿÿÔŽþ"¾“Ðl”zH/ õÒ80Èmÿÿýt¿úüJ–ÿïÿÿÿû¿ÿõûúÇ÷k§¾F¤¾¾“i ƒpÈ ë^«×ÿë_ÿd#ÿÿö·ÿ½ÿÿ¿ÿ÷ÿäñk[‚¸iÿýTüÐ €µÿëÕj¿ÿÐ?ï¿ÿûÿúÿþþÿ¿ýÈ5ÿí뤵KUÕu”âÙ «õëþ¿ÿÒþ²ÿ¯þŸÿÿÿÿ¿ëß¿ñÿÈPý%ô·í…X-¡'`f/ÿÿýÿýÀ”ÿÿÿÿÿÿþÿ÷þ»ÿÿö‡Ò¯ûÿÂ̓r €]ÿÿÿÿëÿÁ{ÿßÿÿ¿ÿÿ÷¿ÛîÿÿªI%Jº\%Rí‘C!°zþ½R¯Òõ_ýUl‰?÷ÿÿÿÿ«ÿßÿÿ×ßÖ½}$°’^h(\‚ÅâA12qÿÿÿÿúýxü‚ïÿÿÿ{ÿûÿÿÿÿÿÿÿú[`ëÄO‹×~•¨mÿõÿ×ÿÿ¯º”(_ÿÿÿß¿ßïÿÿÿ÷÷¿ÿÒ¯]ô¿¥6#F¡¨(ªÖ¿ú××ÿÿO:)×ÿûÿÿý}ÿÿïïݯò°8þðDpcÒ žÈ÷áTóm¢œ Cÿþ½×ïÒýW!_ßßÿÿÿ¿ï_ÿÿÿöõÿ¢Œ0Èõt„ý|ƒPé$ÚD%ÿZõÿ_ÕUi_@Ž€moÿïÿÿõÿÿ×ÿÿÿ]×ÿ¥Ø·ôÿäïÇKIæÔ2ÿÿÿúßëþ¿Þÿ÷ÿÿöÿÿïÿ¯ÿþ“ÿôýûL?â×éµÿÿUïÿÿÿÿ @ü½ÿýÿ½ïý^¿½»¿÷ÿöÞÕ´—¬+ TkûÖ·ÿ¯ëߪúÿ¯ÖÿÑð6†Ïÿõþÿþûÿõëÿ«úúìÍ«ßô¹¸CõYø¾þ±ïÿýÿÿ¿ëôÿ¿¿ÿÿÿÿÿÿÿÿû÷Xì$Ý?°UÖ”!oׯ_¿ýRÿ_þ¿òaøÿÿÿÿûþÿÿ¯ÿ÷v™¥ÒµZÛýh?¥ÕUÖ¿ÿë×­ÿ^‡÷ÿýÿÿÏ/ÿ÷ÿÿ_éý%‚ÔØ©¡íZƒþÖätóÑõÿ~¿ÿëÿúÿ!/ëÿÿÿþ?ëÿÿýµÿüZb¼%ä¿dq³Ï‹¥ÿÿUý×þºþ¿L…ÿÿÿÿÿûßßÿÿÈ2×ÿÿ°éðÿÕÿ×ÿëõ¥õú]°2ÿÿÿÿÿÿ_ÿ÷¿ÿâÕþDÕ}E‘Ñ\àW¹¿ÿÿëê¿ÿýÿ¿îu`7ûÞýÿ¿½ÿÿÿ}ÚÝïø†+Óõô«¯Bþ½j¾¿Ö¿KëKÕÿÿ÷ÿÿÿ¿¯Ýï¿ÿà¯ÿÿmoÿ_ÿ¿Ö¿ÿÿªÿ Ä?ÿëÿýÿ÷ýÿÿÿÿ¼Ö íÿéOSÆÖºõÿÿëõ_úÿÿBÈ—ÿëÿýÿÿÿ¿ÿÿÿþÈàA.t¨ˆÿ¯ÐéQ •šÉ¿ïÿ¯ÿÿ_ªÿý%Áýÿÿÿÿïÿÿþ¿ÿÿ‹8½¥ÿÿ§Ó„¢Ó¥×¯^¿ÿÿÿÿ×òÿ·ýÿýÿ¿íÿßÿûñ#r¯ƒ=;Þ«_]È:ÿÿÿþ¿é¯ÿ÷ÿûÿÿÿÿÿ­ÿÿßÿˆìVÚM¥ÿôß>/¯úõKþ¿ÿ_ëë ƒÿõÿß¿ýûÿÿþ¿¿ÿ´ý¥®µÿÕ5ýzÿÿÿÿÿÿÿX Høÿ¿ïïÞ¿ÿÙÿ¿ýûøb‹ oÚ¿ü†ˆ„í}u¯ÿÖ¿_×õ_ÕVP¸'ÿõÿÿÿÿÿë÷ÿëÿdé:_ý{cõ_ÿë_÷ýzõõÿñÿïÿÿïÿëÿÆÿÿÿýûÃ^ÿ_{Uÿÿÿÿ_þ«¿ÿ’Ð6«ÿýÿÿ÷÷¿ÿûÿâìVðºþÿÿªõ¯×­RÿúK]Wöÿÿÿûÿýÿÿÿ¿¿ÛúÈÁ¶^ ƒéÿÿëþµ[úÿõÿ_áH}÷þÿÿÿÞþÿþÿ¿ßïˆ4¾©þ¿Ö«ö½ÿûëÿÿþª™ >ÿÿÿÿë×_×ÿ­¿úÿ‹¹SKúÿÿëÿ½kÿþ¯ÿëÿÝO_ÿÿÿÿªÿßëÿýôÇ·ÿÿÿ×ÿÿÿÿÿÿÿùÿ{÷Ýÿ¿}ßûõ·ßÿº}\ZÞ¿úþ½¥ÿUý.µ]U;úéuÿÿÿÿ÷ï_ÿÿÿ¿ò@8_ɯÿÿëÿõÿÿý¯üø†×õûÿÿë¿ßÿÿïß·Ç´¿Oÿÿÿú×ú×ÿÿªëÿÈŽLr£ÿ÷ÿÿÿÿ×ÿþ¿ÿ«éÏa~¿Õkתÿõÿïúÿÿÿ^Bÿÿÿÿÿ¿ÿÿÿÿÿñÚ·“w_ÿÿÿúþ«×ÿúÿ_Œ…ÿÿÿÿÿÿÿÿßêÿktµµÿÖ¿Z«ßþ½V¾«õ__ôC°,ÿÿÿÿÿþÿ¿ÿÿ;Cðöëþ¿ëÿõÿ_ÿÿÿúò?ÿ¿ÿ½ù‹÷½ÿÿ÷ÿõøáŠÕëÿï×ÿÿÿÿÿÿÿõï½ï~ÿúöëÞ¾½ÿïÿ½¿ìj*ÒºÕzÿúZ¯_úýKúÿÖÿýÿÿÓÿÿÿÿÿÿò`W£PÖ¿ÿÿúýkÿÿÿõ_ÿÿÿÿ¿¿õÿÿÿÿÿÿò`$†™¯ÿ×ÿÿÿÿ×ÿÿýÿïûÿÿÿþÿ¿ûëïñ ÄØ¯þ¿ë×õÿT¿¯ëëý/ïÿßë÷ÿÿÿÿý¿ïȆW®qÅýׯ_×ÿÿ_Ò_ºúÿ_ÿÿÿÿÿÿûÿ¯uÿ°…@šUÿUýzõýWÕ}ÿ«ÿÿÿþÿÿßÿëÿÿþÿoÿá@¤ õÿ_ÿÿÿÿ_ÿÿÕ_ÿÿÿÿÿïïÿßÿýÿûÿÿÿÿ¯õþéõ¥ëúýïßûßÿïþÿ÷¿__ ¿‘¡×¯_õªô¯õýj$½*ô¿×õÿõÿÿÿÿÿÿûÿþÿ­ 8ƒëÕkÿúj¿õÿÿÿ_ÿÿ÷ÿÿÿ_ÿÿÿïÿõ}‘?ÿÿÿÒ꾿ÿÿÿÿ]ÿÿÿÿûÿÿÿÿ¿ÿûúUëׯÿwõÒþ½$ºÿê÷ÿÿÿÿÿéÿÿ_þ¿õëÿò uúÿëê½zÿÿõúëûÿöÿÿÿýßÿý}ÿ¯ß]uÙ ~ý×ÿÿï_ªýú¯ëÂÿÿúÿÿþÿþÿÿÿÿÿõü)__ÿýkþ¿ÿ¯_ÿê½úÿÿÿÿÿ¿ßÿúÿþ¿ÿÿ¼„Ïÿþõ¯ýÿÿ¤÷¥ÿý½ÿ}û^÷ýëk÷ý»ûößÿ]ttèŽg^µ^©kþ«Õ?Uþ¶–¿þé/ÿÿÿßÿõ¿ÿ¿ÿÿÿ¿×_âÊÿÿÿ—_ÿá.ÿÿ×ÿÿÿþýÿÿßÿÿú÷þÿ­ëâÈ›ÿýÿ¥úÿWÿÿëúÿ¿ÿÿÿûýw}ÿÃ_ÿÿµ^ŸÿÈ1ƒúÿÿ¯ÿÿ¯ú_µÿõÿÿÿ¿þÿÿÿÿûÿþ¿ÿÿê¶B9N5ýz×Çÿõ½ÿÿ×ëÿÿ÷ÿÿÿÿ_ÿwÿÿÿÿõ÷J…‘,·uÿÿõõëÿõÿ_þºÿÿÿÿÿ¿ûúw¿þÿÿÿÿøŸ¨6¯ýk×ÿõ×õ¯ÿëÿúýÿÿßÿÿÿÿÿÿÿÿÿÿÿÈœ?ëÿ½ïÿÿëúÿÿ÷÷¿÷{¾ïýïëûþ÷÷ÿ¿Öµë^ª¤4@ê 7¯ÿëëׯÿê•zëëô¿þ¿ÿÿÿÿÿÿÿ¯ÿþ¿ÿÿ„ ˆ9Ç$8ô¿ÿ_ëÿý}Õú÷ÿÿÿÿ÷ýý¿ÿûÿ×ÿ÷ýk úþ½×ÿßÿK×ÿÿÛ÷¿éÿï×ÿÿÿïûÿÿÿ_ÿ‹ýÿ_ÿ­ÿÞÿêµ÷þÿÿÿÿ÷ÿïÿÿýÿÿÿÿéaúõÿú×÷ÿ_¥ÿÿ_^ÿÿÿýûÿÿÿÿÿ×ÿ¯ë d å`ÿÿÿëÿ®¿ú×ÿÿÿÿÿ~ÿ÷õÿïÿÿÿÿúúõvõ¡( Àè :ׯëÿú®º¯ÿ¯ëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿû @è ãÿÿúÿëÖëý Š¿ï{õ¿ï½ûÿ¿ïÿïû÷×ÿ¯î«üƒ!ÿ_^ÊZ¯ÿ_õ¿Kê?ÿÿÿÿÿë÷ÿÿ¿þˆlúõÿ›Zÿÿ§ÿ¡ÿ_ÿý/ÿ××÷ÿÿÿÿÿÿÿÿûÝØ"œGÿÿú×ÿ"{þ«_ÿ¯¯úýiz]î»÷þÿþÿÞÿÿ÷þ¿ì„#¯ÿÿ×ÿÿb ²@ÓÿׯÿÒ¯ÿÿÿþ×û½ÿþ¿½ïÿÿø!_ÿ¯ãÿú]bNŽ@ÌZÿþ»×oúþ©ô½uÿÿÿÿÿßõþûCÿ¯ë_þ«ï‚@è Sú¯ëúÿÿë÷¯ÿúÿý_ßÿÿûûytOëÿõ¯ÿò cÿ¯ú¯ª_õÿëþ¿ÿÿÿ×ÿ¯ÿýöø`„ÿÿÿÿÿáÈë_ÿÿÿýx":ÿÿÿïïÿoûÝþÿ»ÿÕ3ú ÝÇê×ÿýkëõüƒ#~µ^µ__¯ã¥é}uÿÿÿßÿÿÿýÓ#´ì/õÿÿÿ×÷¿ÿÿ_ÿÿÿÿÿ¯ÿýõÿÿÿþ˜!þ¿ÿßýV¿È1ÀÖ¿ë_ÿõë__ÿ¯ÿÿÿ×ÿ_ÿ~ÌÀ”.¿ÿ¯ZÿÞ¿UÈOÿ_þ¿ýÿÕ%ÿÿïÿýÿõöGþ¿¯ëþ¿þµÞDÁÿÿ×ý/ÿ×ëõ¯ßÿß÷ÿÿïvˆ(±ÿÿÿÿÿÿë²x swKú×ÿÿëÿÿÿÿÿÿÿþÿ®]&Gh¤pÈ¿¯ÿý×ëÿT1uÿúõ¯ÿëõþ¿ûÿ×ûÿûþ]h6zÿÿÿúÿÿï샭ÿþ¿¯ÿÿÿÿÿÿýÿЈ¯¯ëêµ^¿×­]# Bàs ?þëëKý}/×ÒÿÿßÿÿC¯×ýÿÿÿÿꎠs]~µÿë_þ¿õÿÍþßÿß¿ý¡õýõÿÿýWü‡zÿýÿ×ÿ­?ÿÿû¦¿×ý—ïÿÿþ½zý÷þê0iþµ¯ZýÿÞë¯ë¿_÷þÿn8ÿýþ¿^¿õ×ù!‡ÿÿô«úë®ëÿïÿÿÿv„­×ÿ}¿þ¯¿GÄ9ƒú­_×÷Ö—­/·_ÿ½ïÿý`Í0kÿÿ×ÿÿÿ¯ý ÿ÷ÿÿ_ÿÚÿÿÿúqÿÿÿÿÿÿÿõÞÈ9ÜÌAÊëÿÿÿ¯õýÿûÿ Ð ¡—ÿ굯Z¯¯Zú¯Iw¥¸±J½$©U/ïÕ*]/ÿÿ÷r8ÿÿÿÿÿÿÿÿùƒXÿÿý~µÿÿÿýÿÐ×ÿýÿÿÿýzþY þ¿ÿÿÿëýÿöþ?ÿÿÿúÿþ¿ÿÿè2zÿÿÿëÿÞ¿ûÿÚdp9ëõ¯ÿÿÿÿÿïÒÿì„áÿÿýÖ¾¿ëÿ¦„oÿÿÿÿ׫ûþ¿ú_È0åCÿÿþ¿ÿ§ÿoû@Áÿßþ¿ÿ¯__ÿÿúÆ@Œ r \Ì:õÿõýÿÿí×ÿÿÿÿÿëÿßúÚý¦W+ÿÿ×ÿõ×÷D=kÚJµ­W¯ÿÿéuþÿéE‘0åá(;¯­WÿK]%ê¿LР¿^«ÿÿÿÿ_ëÿþµþ# »‹¥ÿëÿúÿûL¸CZ¿ïÿÿõÿÿÿÿ¯¿ùqÿ_ÿÿÿë_ÿÿïÿÿÿÿÿÿÿÓ ÿÿú­ÿÿÿõÿëý×ÿ¯ÿé}Ü7úõ¯ÿÿÿÿÿþ«úþ¾½Wúÿÿõ‡d@Õf¿ÿ×ÿÿÿþ¿¯¯úþ¿ÿ×é_úˆÿÿÿúÿÿÿßÿÿÿÿÿÿÿÿáªÿÿúÿÿ¯­zÒÿK¿ÿõ¯ÿ«ê—ê¼_úõõZþ¿ýÿÿ¯ýkÿÿ×ÿÿò1p§µ_ëßõÿþŸÿëÿIkÿý»ÿÿÿøþ¿úõÿÿÿ¯ëÿÿÿízÿ_ÿÿ/.­×ý/ÿõëý~ÿÿÿ÷_ÿ×õüGëý/ûÿÿÿúþ¿ýZòuÒú¿×úõ_×¥úÿ_úÿý}ëü÷¿_ÿä`±ëÿÿõú_ÿÿïÿÿÿëõÿÿÿøëÿý×þ½/^¿­zU_]®ª«ë_Júú_¯ªÿÿÿÿÿÿëþ¿ôÿÿÿúß_úªõÿýëÿ^ýký××î©ÿÿÿÿú×ÿÿÿßï_ÿÿ® ýU}þ«ÿþ¿ÿÿõÿëúþ¾?~¿õÿÿýÿÿëþ¿ÿÿ×þµ¥ÿÿëÿOÿ×ÿÿÿÿéÿý~-?Uúÿ_ÿ”=zúýý_ÿþ¿þÿÿÿÿþ¸ÿÿ×­úúÿ¥êÒúúB꿯é×ÿÿÿÿÿÿÿÿïÿà×ÿÿÿÿ^¿ÿÿÿ¯úÿÿÿþ?õú_þ¿ý~¿ÿ×½ÿý/.¿û_¯¯ÿÿý×ÿ¯ÿÿ¯ÿÿßãëÿÿ×ÿÿÿÿÿÿõÿ×è}~¿õÿ_ÿßõúÿ_ÿÿ¯¯î¿ãþ¿ÿÿÿÿÿëúÿ׿ÿÿë×ÿþž½zÿþ½î—¯ëÿÿZøú_ëÿúÿ¯ÿþºßÿÿÿÿû¯_ýÿëÿ×ÿõÿýúýV@ì ÷÷ÿÿÿÿÿÿÿÿ_þ¿¯ÿ‹ßýÿõÿÿõ¿^¿ÿÿÕäáž•úþ¿ÿÿÿëÿÿÿZÿÿþ=}ÿÿÿ­úÿ_ÿ×ÿûþ¿ÿÿ×ÿÿþ¿ÿëÿõÿù¸2ŽPþ¿×ÖºëÖ¿õÿÿë__þ«‡Ä_¯þ¿§_ÿõÿ¯_ÿKÿÿüþ½úþ¿¿ïÿÿÿ_ú«^—ÿ÷ÿÿþ«ÿÿßÿÿúÐ5¯÷ýú×­W×ÿÿÿÿÿâÿÿ÷_ÿÿ{ýk^½~×ÿò Tÿªõÿ¯ýz_ýõWõë‹ÿ_ïÿÿþ¿ÿÿÿýÿ#¯ú­Rÿ­kÕ÷®µëáT¿¬HþÿÿÿÿÿþÿÿúÿÿãZ¯ÿUõÿýzÕkúׯÿÿëÿúÿÖ¿¯ÿ_ÿ_×ëý¯ÿëþ¿ÿ×ÿ¯_ÿ_ß×þ¿ÿÿ½ÿ_ë¯õëþ¿÷úõï^¿¯ÿþßÿÿÿÿïÿÿëÿþ¿×ÿÿý ¶¿¤µÿëýzÖ«^¿­}ø×ÿÿÿÿÿïÿÿþ«ÿÈC¿ÿ¯Þ¿ÿÿ×ÿÿÿÕy €$ëÿý?׿ÿÿÿ¯ÿÿƒ¿ÿõUÿÿÿÿÿÿÿøÅ?ÿ÷ëë×ÿÿÿúý_ÿÿþ¾¿ÿ×_¯ÿñÿÿÿÿÿ_ÖŸÿÿýH-‚ãÿþµõë_×õªUê¿ÿ‹_ÿúþÿÿÿÿ÷õþ-}ÿÿÿÿÿý¯ÿÿúþ¿¯ÿÿëþ@ÌYþ¿þ¿ÿÿÿÿ×oãªÿÿþµýÿ/ÿëñþ¾¿¯ÿKúÿׯþßÿÿÿÿÿú×ÿÿÿõ¯ï×ú_ÿKÅÿÿÿå×ÿýÿü i9OëÿÿïÖµëÿë_ˆƒÿ­éºÿð«ú_þÇÿõþ:÷ú¯ÿè¨$>¿ÿÿÿÿÿKøƒ_ÿ_ßþÿßÿãÿþ¿ëÿÿÿâë××J¿ÕõIzþ/ºÿ~ÿ¯ÿÿù€Ô9Wÿÿýuÿÿþ"}ý}úÿúâ?ÿÿ÷ÿÿþ/ÿëÿÿýÿÿÿëÿûÿÿõÿê¿ä¼î¿þ¿ÿµêøˆ¿ýÿÿ÷ûY ÊGÿÿ¯ÿïë^¿ÿô¿ñ ÿúÿÿøÿÿõ¯ÍÂâÿÿÿñô¸ÿÿúÿøë_ÿ__ÿÿÿÿ‹ú×ÿ¯ík_ÿÿ‹÷ÿëþ ÿÿÿ‹#¯ÿ_þ#úUÿü¸?ûë×]%ÿÿÄ_ÿ×ÇÿúÈ ¸ç«õÿÄE¯þñ¯ÿÿÁ¯ëÿò£Î?â5à̓_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüQßXÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ%‚¤bqñÈ™>È-†“ä ´+åa=?£ˆ&×ÂHjõxI”rá™ð‚!±Á½| D00pò¶?¤¤}¦¤nBôB7aVÓR à‚D\4ÙAÒ´ˆß]" \©×û[ßPM‘÷a_KzÈ#ü$Ä6ƒBoáJØ;ûV­ÂúI6›þ:¤C§¤ ÔÐÎâúé d\ÒDU1«Êqßh‚éé!Œ0C"ú§_©;!¦98°¢÷¯ƒZAl†eVgÿ…þ—41Ð:ºwÖ·…Èh»ÚÿúNËÐ6ÂZÿ£Ð9oÒ³R(†ËÅÀðk­ýêšãM]ðx‹ÿ~²qü¾ÙÛþÿä8ð_Â][òˆàxf?ÿt‚ÓMôž¿ÒZø÷‹ãêÞ¸<Þîÿ…®¿kð·Þlm¾ÿÿôÒWl†«·ïÒïé\~‘¬ÓpéÛ Ò¦íµ»l²ßK! ¿û/Ü\&ÝÝ/ò€!_¹#BN›Óa+mðßWðDv—Øk¡´,:†ßã¿T‘—¶)roúî‘8Ö¶Òk †Ý«÷ô™ 3ØXÜ/5B‡oÿÑy´ 4êì$ù˜ÌCncþ4îÙ S>›¯3ˆàÈŸAä‡È¾ 6 ã¥[¯|Ø-2‡½kà ]7ÿPõ®A¬qkKé·÷]úÿVÚíäw£èŽƒo½i·Mô;ЋükZµÁùŸõÛj7ü! !ÿö>¾ƒÿ^³Ý·ð@Èl¿ívÿwô?Ö »ó´õ}ãöm°ˆ ,3?¶×Æß¦A¨ý·[ Ò8)‡Mà> Úý†÷Á F'é ~û|7[û¿öÒòÜâ º…ÓýëWжÎíÞ¿ûÓä_V Û_ÿÇì!iÕðÿõàø¦¾÷Û¯¬=Þ‚ý}kþ<'ßíø^h'ïïÁYï˜pDtù(PŸû0£ØHFœ‚/ÖÛiÛ„«A„Ÿ¿Òø¤¿î«…ývüƒE[m ÷Þñ_‘|/{ÁØÐ#b+ö¿×‚jû÷õöH ÏÝ»>¿"ÌÀ}ûu°—}7ÿɰ½ÝßïÁ÷ŠþÛößuûo~÷ÿz_ΟêûïÝôë½÷¦)Jþ½{·ôÈñu<>þBÙcÄ.íûʪŽò¯üI†'ßOY x=¯Ò÷z|” ‘šÛÚýl×vÞþƒÇoþý»ü“ÌCJ ýÿ÷îý¦)ÿÿ÷ºÄ—á Tî¾¾÷iÈEB†x/ßûí·Vf„Q(Ž—_ëÿjÔÂ*aÅ׿®ûw ŸA]S¯_‡¾ù+GßßöÞŠJŸ×_míd 2‘„:ÿ_ïÉ„cK¿Õ^ý0Ÿ×ÿÿÃkDŒdplõ÷…k±Øs¨2kÿßn†l ;\‰"y{mƒt»ô#îÛb½-{µa܆upÎÿwÞÝ!}«ÿ{í·wý%ÛûëúöÛ°OwíWîÕûío~×Þínþ¹ÊqŽöÛ°›·Å¿Û i½íÝ¢#ïaºY½}{Ü ·H¹‡ê÷\;ä5ëQëí¹@ÙN3Žwî÷^Þ{LC!–ê„^ÿ^ݤ-ÐU«^Òûm1õì;ëÚDK{m¿ûP¯vÿö¤'l;ïÓõ†ù+}ßéöîkH?Oµû½0þ¶MðáÁ4ý^ë 7 iÿßý¹˜1mvóð%VÛ­é瑱ØuOûNÎ2ñO¶ݺûa4"#†î·¯Èfˆ 3@mÐïÓ>ºwµ×‹.àK.Ý5×%(º8 Ý=­_eò4àL{mù ²¿ ï†:ò£BC ràÓÄÁQöØÉÃ$B@ ‚yp[ '°ÁÝX&• öìT4$2Nv@^- {íèƒPç‚°†@iP†Ç({ÑC#Èi¾Ûj"$2Á8š„ÐB¨?†í”á’‚%à p6ûÈOöd Ø!ð@»¨Nü+$xv ¤ï ‚œÐd2 †@)ì6Èd‚Íq§ê‚!Â2€!© €mtÈd3_dzÃ!’sYýtÓôl2 þÓ k§Œ0Ù €TJ¿Mù;Ò îí© ¡ÉZ’Û)Ûšdá÷~ ‘œ0aþ¾—AÚØ¶ÈdpHrqëø~!K˜vš{M?þƒ xg⬆Q5õ”÷àðŠ0Ó_[÷qá3 Ÿõoî0Ü0_ ï"DZ¶@òp_ýnùÀH–fnÈl|¨ªD0:Aø`à „ï÷ûí tÊ·Oûô ñ çÃm§wÿ]÷ © 1J¯VÃA¾]ñô¬?Ò²ǧȣuý´Û×ú§·Ô&#xˆýoƒXvõúÕžþé)|A±írßúæŒ?×èu]%Èfk)×^ÿÈqðm¿ÿ”!ƒûÒäBúßkÁ·þ Aëÿä ¡¬uÚ—LC#þÈ #ÿÿ¥á¿ÿƒ­ÈwÑ&0Û…¥qz‡¿«_ü? ßÿîIÂhf ¥ëo¬=ÿõÿÞ×Úø¤HLÃÕ®àèæ.¿zÿõ Ü|ýýÿÂ<‚!œeßîÓbÃÿ÷¯uÿëÚPË#@½Ã‹ †–ãì5míH.éä @‚£ÿßý-kðÛa†>ßÿ×áˆ;Oÿ#ŠÝ"ÐÏB ÐqÒ§{¼Ó;Þl%vî:O5°ôÿôÿ¦† YQ ’0ˆAÊ)oÛ »èDœM»y ƒìÿá Û¨H„†@œ~„C_¶«ôÃnõü²¥ÿô»Ñ1ÂAá1ƒ!²>š[檹 #4;÷û6 ÿ¯qàÃëÁK!@÷°ÅJ:åÙ1ë÷wÇÿð½P‚RîGaßÒlé ¿KubÛnâ:ÙìVí ‡¤!‹vŸHâ±m!$vD“²þáé¯Ã(è†Née8=¯Ãi+® ç;¸Úúwǵ†a!II‚C)çÚÉ8ü)´Ã“+=Ýø˜B —ˆNø¿$çÏñõBåÐzŠýCášûªÄv¹&· ðe"ƒÚ ”A»Oò1ò:ç/ᮩ٤]xý¡ð’Ï®¿ƒ X¯õÿ jC™ü?û ®•´]uPûÕ^× ýÚ ®ƒ¿ú·NüƒXuÃëÿ! °i\‚È.:þ•¿ºÝ¨OȆÕõ÷óÚIIŽ3@!¯¿ï½µw™vh WÿÄH"¸1pš< /]T†Œj7õ ` °Þ÷þ:¦A¡È£ÚÒDXûªþÓ2€T×¾Ò…ƒC†¹ý‘®»ÔÿÐ2öïñTáÀD UÃtû Çd€l×ð¡noVœ(ô½ë¶ÿ0­®!´>Zõ`s i#úÈf¿Ó†Ûþƒ ×^@ÔXþÿ ë¯Ý=RÃoÛMúh<¨-½|œ`Óé_zj=ºì(uÂiáµÛá•:§!ÏBit·ÛÑ ÝOdb~ƒö_5¾‡E:züCÕj¼7Lkoéø¶¯|—˜-*ÖÈ8;8î¥o¶³üq ²8­~öT¯…R@RèûÄ2P¿ÞÚOέ†“wß6/µóèóð¨û‰ð<3>F9?¿^Ù5öéøoý¡îÚ{úJè‹cöL^û¼° ŸïM—Õߢ¡à¡Î?k}ý«Å¿êž÷‚(~”8Âüs?§ÂÿÓ}ÿªýø¾¡žˆàt |$-¥ö1iÚ^¾ß 'éþû#¤?d*€¾cKoÝð]‚]?¦±R1æðaœf‡mô¾ïoþ—‘ »O®kë¯öà ñmýê½î Ï«@á××’êÈæöBŽ”[zk¨¯|ƒqÿ!” Þ–÷¤½¦þ`Û>b”÷eÁO_ÿ‘È þëÜ®+ë‹úA†,S=ãT"Çÿ^ì•©¡îëõø+ø/Òm¯iQW‘Á^þ¾·ÿïô·ÿ°E?®ÛU‚#ÁhYý‡û ’Ö‡.÷²µv!:äl•ù w]¶¼]8¸Pöê®Ìÿ¿ï÷ô ~#þ ¿m'ˆuê¼|^ÛÞ5ú †}W]ÚüÝ6þš}ÈqÛðú§t×È„¡÷J˜uxkÈlq :µßû»¬…ƒ©ðiìœÀ¼}º‹uá“s¸ºDAïo÷Ÿ_ƒ§\˜DS’-†ÓµöXÒzé0ÞÛvÛàÔo fU‘ƒ+8ƒDÞü?mçÒÕc8ï÷DöûÿûÈ4½¡AÎ9r8¡ÏA8‚ò!Çj+µow*nôéY7}Þ»ú¾`/ôÐÖ#²(àƒ"ЮL‚‡0å9C•­×úåÛ÷·ë»¿½õûðÝãBì‡xˆˆ2d5܃K09þßõ}¢pÖSÙLJú¿ì‡îõöôdžAǘ ï ÔŠNûµ²H!ŠÈ#]ȼC¾Ûø‰NcoÅ®îÞóÿþ“­^µüØsaAM²=›ˆùá‘Ð/@Ô:r!4ûm/*¡©o|îïße[ò¬Ïýëö“£üRÞ"Ýâ ØhjŽ'^§r+!ÿn¾\ýÊÈiûk«¿Ìô öÿÐ!kß÷ªßÿW¿ÿD$_ž q/´¿m{¾¿ßy™àß’i)ÿßýv¿é?÷¯MеC6¾¿k qÂZé¦?nÚôB§°{Iÿ¦ÿ×}~þ¿o®coM¿ïkûI3ý dBpÄ\=[ȼ2vñÝWÿï·_ÿ÷ëªÿíêïz¾¹ !Á„×vŸŠïýþ®×ÿÿÿë¯Uþú¾C3‚œvG…êƒ)ÍÓw­HÞÏjƒwÿÿô¿Çÿÿ¿ýÿöÚÛÿÈgW/ä3]¾Ý¾ê:Aíÿþÿ×ÿÿÿû÷ã_KÙï¸!}ÿ¢_+}õÖÿêõÕÿþõÿõõR+ýd54ðCaÂ…Ó8ûÛiÄÔ“ø]¾ÿÿk·]?ÿ÷õë_uÛaxØwä6´›}9 ¢,2áŒËýoÿ¶Òÿÿù½¾­ý¾·ë(ú°i~¬úA˜D´+õúïÖ¾ýÿëô·÷÷]{ÈÀºê«°áµá¡ JÒý.¾ú_ÿ_ûkÿkÝ{qOþªC>ov¯,‹ÀˆZs¡Ž½ûÿ݆—ÿþÿÿÿÿ×j{½'ŰÅý8¡ÚþëóA¿Kcëûÿ¿ûÿëÝ'ÿé~ nþE…(x~—\E{u­ü†‹„ðÌ:ÿôÿÿO¶Hf×ôà‡Ât*·¤ýiXu§øµâ:oýï[_ߨ@¾½ß&V½]êýZ·ÿ×Wú÷jÝ_ÿ }2 D7»ÒXKïþlÿëê à·õÿÍb3Åi~ôX§Ã2ŸÜƒHçDÖjôž¿ÿÚÿù°ÙæÆ­‡é_ÿÄlm|Ö¨[bØ·WidK/›dpOß]­ÿï_ÿ¯èÕ­¿xéWNÛ¶Ùæ—{„"?ÿÌÓøj½}ÿïóˆŽÖ5¸vïUû»Úß÷Î:¡üëýü!±mo{ëzá¶Ûi/¿!¡BÿÿÿØoײC¯_ïµÝÙåø~ðÄ+þ޿΋ÿ×þÿ¿ÿõõ÷U »Ý§ÿi£ÿ!ïþ»ïâ¿ëWvûzÖäh!Úïiÿ¶—ÿ~²àŸû_cÿÿï÷ý?Õ¶ÿ¾ýU~ûÿV—õÿµßw¿WÔ5«wjì'í%ÿ×ÿ}ÿFÑ+ÿÿ÷}o\SvÞ×Þ…ÿ¯ÿõõ½ú×ëÿo¯~½ü+ü¬ 3?ûþê—ÿíýÿ÷ßñm®÷{3¿q×ß×ÿ¤þÿú÷þÝé¿úÛzøÐÚÿÿÿÿ¿û~ú³Ýý{nÕƒ+ëîK›ø4¿öÒÿþºëïonþCßêÛ¦±¿¿÷ûÃ<Ó=í®ÿþý}?oü­¯÷#x-¾Ìè B8ßß§ìö^õµñ!Œ_›{„ÿ´¿ÒÞÛ^AcˆLf9áþJFG eô­·AXpH·Åê÷ñiÚÿúüŽ¿ƒuÿoýz`›ŽÃüxµ¾š…ÿ׈ˆ‹M>×{§Ô§DqYÈ×þÛm>J0IÇoö“[mÈØjÓëõÄE¦^N×ÓñÅ_(Eó†ßwtㆇaþIR@f]äã §I*7ö¼DZƒD8悜Fš®"ûïÖEñµ§pš»m&2A"×ø^""#/—EÀÁt\'jŸÿb­îIÿa]Üàaœ6µtF爈ˆŒÆ_.ˆáíovy$Ú놕¶àŠ1õí ¯>´Mãúo ~ÛR†×ODÌ8[Ê¿ÖÛþž¼™¹ÎA‘Èl½ÝX•ƒ‘Ž×þÿö¿‹!\ ÈÈ9pAP{‡·ª$p_ë®ïïõOß‚AC× ‚hE®ÈÆ™ cʪ¤§>4 øÿ†òV}ߪù€Žû"¦¼4,ŠäÍ2°ÉANÛ HÏ ‚(x¢7­ú!l¼Þè?¾ÿîº>OÓ»]5M´B ¶á¤"’$%ýDÜ× ýx4¯Ózráj”Ø­67zÆBêC8îîÊH$1Яø3Z°îiÿV]ü¿WÒIá=÷ÙÓ‘üÚStôò+àóP2¤6¿‰˜Ha·A }¯k—FÔ'½[I¿AWßaP†ïÅD‹hã}‹°éVºõl6Âw[†ì%ëÿ½.Ò½´c}7ÿTBGݳ`VÕïùOm¹ð"ß^Ó8¿¯^•}¾×TžºØa'Ûö‚ׯ׷ï_Ì&#ÿÿý×ÿ¯¯½7¶ö+®õïð©Úd¸¿v¿ýzÿþ¿ÞíõöGÃ`ú¯Ü†–ŸÿŽ‚ëÿÿõ»Ó]½wÿUn‚Ç®ˆ6Gú_øãÿþÿþß /_þaÐkk‘db.‹´{õ~×ÿþýÝûÿKØnšý„":ª¿ÿÒ¿ßè5°ÛµzׯÛ܆S¯.ä2»ú÷}BoõÕ{ÇÞ××ÿo>DhQ@ù¡ÿ\%ÿÿÿû ½?õûêòpÈRæ`;ãëûaýÿÕï¦ßÿ޴˵}ÿÇ4 uïéúß kÓÈ—ÿlƒã\‰ÁšdGלþþ~—ÿÿÛƒW{¡½°Û Ì ) zUôBæ•ö|Ì¿ö½…~ÞÂôµêîÝÈ8 ǯ¾­óÊAK¸êÿ }M¿»(pŸÿõ{!\ˆá ÃNC9{Òöú~›  ß ÏaažàÊ€¤?öèÅ…zïÕ°ÙCÃf È `d6x&½/^œ? ãb!ì=‡pœ®6Ÿ½±xÈ ±Êu?þÿöÃó…ÿôŠ%ÃcÃm£ÀŒt¹ƒ §}²¬ŽëaƒhG„ï^¿ÿo§§øDç †{°öîƒe:à ý²·Èý²!Ž=øAü£ÿÃ_ïÿÿ¡„ íßC("‹¿Ü}‹ ²(t%£­ôÿñôÛÿkõ¾ðë ‹"¥Aëþªì2n9oÿ±ÿþÿn?½{¶ìR#\–†zQÃr©_ü§Ý÷ÿ¿þßÿÿ¾××$ˆ¸Úìrƒ3èBÿß´ÿÑ€íH`{ ÿþûá»··Œ=¡ÃI[†@ðÙ„àã¡þ«pöú¾Ÿ÷þ¿Ó ÿû\6hE­{«ÕHÀ5_ëýÈi¿ÃøFÂÿÓõû ¿«ØòCæßÿÿõ¯§¾7ÑÝW¿îÿÖØlîný$»ÿï¿ßÿºþÿ«"‹¼×‡ëþÛBÿé&ï¿K÷ûoýÿ×ÿ¾Û„u¯{m´ÿþqí-{K½ÿµÛ½Û…w÷L0Ú¯ý?¿4/ïîÚM×ÿ×ÿàÃniëK®àõÿš$¾ü†°Ëâ£ãÛ× wû¥ÿÞÛ;íý+ÛÿôIÓø—#úø©#÷õuõ»Õ¼'{íß×ðbú¿k· Vßö«ýØ"êAñ¶êŸß|»ïôÂÉ A„bË‚…MmUn¾Å|êÜ8¤í¾›÷éYÿú~ïˆÐ¸´õOïò\ûÛ„íõÓX²tîÿïò1üDDZ÷÷n¬w´iv†&€§¿ê -á›\DDZižFÁõ°©îší¥ Ú×û_ˆˆ´",(Õoû_ý÷ñƆkR4í”:~ý¿él6ýÖš`Œ2>/ÿëßÛo«}qoÿÚ"û®íê×ßôëë`ÓikpÂ\3Xi´ïý:úÈbW ¸ä(ì6Ä]¨NÞŸþš÷ZLN !€;xöY 6TŸÿ„7t´Óí®CSR gÞB¹7pÚÿ[³~ºÿIp~m}¤ûA¡jƒ"9á¶Ý¯âÛÞÚ[A‚Ò"gNô¸´ôØpå?…²= ЯÙpÓÿqøö¨Š>j`'æòùØkM&ÜàB1òøRHí åT §©q›¨e?òñ_ñ-ïÛý&õÄl‚÷0'¦ÝœÌŽhDH#+@ ÿªÖþ¿Òo÷¤ƒzÃlDD2àvJwÇÖ>F?ßÿ¥Þ—á¶ÚÞG? …Ãÿÿô·öMÁħO×Úÿý}ÿÈ !æò!/ƒ ítºõÿ×ÿI0Û&<2“áøý¡§ÿ_}^×"XÊ?ÿšÀðb?ÿ_õÓgø?~÷!¡ÿÿ_㤛 á¸ä.¤ x3a !ÈeÌäã÷àÍà_ÿþ¿ô±¶„2ü¼$9A„ãh!›g8P™WF€týÿñÿþ—­`ØjEÐ::x‰ð.28&CEd3ážN1=í'ß×þ—þníb;ÓT Õ9 )úÿûëÿ Åÿ§Á5¤Ã«ü.¿ëOÿP{µë úd€Ó<;ü“Ðÿÿ¯û'ß÷÷zL ŸÖA´ÿÿ×ßúÿ„ßVÖ¿…úÿz_@è ¿zÿÚÒD®Cÿu(hfÿþ{ëü_õ÷é18]ö˜_ÿÓÇÖ ô.Ÿä€­¦Õð‡ÿ®®¾rl?ÿ„÷ìÖŒ©PKÿýë½ÿý~ù£:%{ú%ÀÚ ]ûFï«jGu{¯ªƒ†A‰Dt›¸/ÿǪÛþºïí¢@ZO‹û< ¿ÿÃÿ¹ #_Õ.ûý¯ÿûÿm†Pö¿ÖûÁ:‚ö‡ÿýßíÙkÿ­ß ¡ßø_ÿ÷ýX¶·ÿA»âÇ{g€”|žä0ûÿàΡ™õùG ôÿ|ÿÓïò ¶@è çÿüuﯶÿ×ïð½µ w­V×®HeÀ–öÕ¿ÿCëþšÞûã»—ýýûië¿Úlo´@‡*;¦ëm-¿ý²@Ð8÷ÿ )!](B;e w]ýëÇÿáõº×ACÃ1÷Ö×tÿÿðdµ½D\}êÃ__ÿ¥q|‡Ù:†¶»ÈÐïÙ e9‡ÿ÷kÈÇ|q †] Á½8¶»ªÒïî¿ØˆP=0ši¯™‚ÍḈѻ!°rc»LÇ•x¿õ"?ü  €Ge޲.Ÿõ­~ m1~÷þŸMWˆ9Cõÿ¸M-Ò MŠÈ°Aª;7¿! r†¬ËC`ä?ýÿ"ñÿé©! M2C"DsŽW3"Í#☈àl™›ÿùâxøIt½[Õu¡d$'ƒ ÙO„)Æ~4Ù›ÈáÄp52@k§ôAœ}Z n’6ûu8Ÿƒ]ß÷¯B,dH Äd”î¾Ðÿ_ªÿ¤ kj²cÏ„6œØMóª_~±o]í|_ÅnÓ†ù¬'ü`…"ðÝäÇTlI a ™6!€†ãsý¥?ÿøio[Õ[@Šá_þŸNíPн¥ú/à×LÿëÓþ¡öÿFþ“«°Î=úß´á¢Lsÿûß÷¿Õ^¿ûß •-}û*‚?îÿ¶ÒõÿÿÿúoþßÃ)ÁÕ~»‰uÿÿëþ¿ï¿õÿõÈz÷w®„>LzõÛKZÿï¯ÿÿzÛß_¹ ¯ÿþ?ßÿÿÿÿë°ÿÊ¿¿éïöÿÿÿÿþ»K 1 _í×é7ú_ÿ÷ýÿÿ¿¿Wò½þáW·¯þck¤ß¿ÿød{ÿÂÿ¶ë_ÿ¯_ÿÿ¬G® ¥¥ÀšÿýÿÿÿÿÛK[úfðPÿþ¿ÿ¯þÿÿ÷ïüˆˆék¶¯ïßÚWúÿÿ®¾ÿ=‘à†×§cëù¬O vý¯ÿ[I¿ [w) VíÙC—Oé7úñ]ÿÿ÷úZ鮆¢#ÖÚ_ÿê¾ûÿÙD\BF›®È°½¸}Ö­ö¿¿I?ÅĨùHûÖ±…®×_LØló…ïÖýÇñky#åÀêÁ¿÷ÿ¯§ßéúþl‹‚¯|'àÌaû×ÿÿýÿÿô;µ÷ä.û#]šŸªÿö¿wÿýÞž¤4Ÿ!¢Ÿ±ÿûÿëÿÿþ¨ÇµD0<<}?ÿþ÷øÿÿoÿJÞ“ ½ÉÙyëÿï±ÿÿ÷ÿÿ£‰ÙphGæ·çýÿÿïÿÿ„µ°D|¸ÁŽ“ù„?ÿÿ£ñ}ÿ_ÿ×ú¤ú/B±IOÿúoÿï}ÿþÿÿô“üE£^G°^ÿÿÛßïÿÿÒëÛ nŒz!š9A¡d$æKúÿú·þŸ_ýµÿ_ø}âÌ×Gÿ¿ÿÿýk_ÿö—~«óaé‘C0ÿûiï×ÿï^»þ«MÿÿÍ‚é8ÈWáýÚëÞÚ_þýÿÿû_Ö׌Øé©ˆ?5 ê+àÁ{_Þÿtµÿú×uQÿ¤ƒÎeÓ´Ñ:#Ô äA¿’ã#ß‘Hû°¿ýý¥õúL:È÷â|¸}W×þ×{ wÈC)Á—¾ßÁÒ_¯ú|{î‹Ö Ž"ßö¿¤ñ_|GÿZMõþò;iðõNÿºë­µÒ¿ÿü3¢C\q ™à±ª÷æõÕÄ/×þ¿¥LDD\G¡Õ¿ÿÿÿòpSé;ÿúÿ/½ ˜ mj¿ÿ×\/¦BÌÖPÿß_úÿß÷ͦ„Yý¥ëÿפD·D8¸ =rêôý{Kö’¤!Œ$ìC#ÂÜî@ä aG Ô9S.9ÙËåÇôßÿ¯ÿ¥âCÌ«E‘p¡àÓRõ"ºa „µÐ9Ó‘!–äTäÇ(?××ûëÙŒ?Iýº`ƒW€r|wÃM0UL‹ È&„4GòÿóPNºÿý~(ØBýÀä)€—æÄ®ø}ÚÿhCÿF¿­þ—úWÿБ @ûý;¥D%£‚æÂ¼†Ž4L3iüâèöÿÕþÿþÒêºÿ˜ »ß@ŠtŸÒá§Pâ¿ÐÌÁ‘ÿÿTþzüÑûë¿úöõïVß[¤ûréêºÝ+ÿÿ¨C¬ÿÿ~÷÷ý_¤ß~¯÷þÜ þ@ê ÿׯüÔßýkú·¥ë_á.ûÛïÛÿ‡wä¢ñVaÈ`q×ü†'ÿûÿÿÿéÿ×ÿÿKÿ¯ä·ˆdM8?õ˜ úù±ÿ××ëÿÿÿ_ÿÿÿõÿ]H1 %ͤõö©½~ÿ×ÿúý¥ÿÿÿÿûGAM…w¯ÿÿß~–—ÿï_þ*–8ÿûKÿÿ­#a‹/úÿ÷ëÿþ“×ü5ý_×ý^±ÿñÿª|DZöÿÿ÷ÿÝÿÿÒÒé¿Óþ¯úÿÿµtcØIkÿÛõë_ÿ_ÿ·t¿Òýõêû‡ý}u«ÿýkûK„µõ ÿþ½þþŸö»RýkÇßÿô÷åÂ}}wê·ÿ­bÅ}ÿþü/Zÿ½D®³@ÂÖÊÿ®›ÿ¿é¯ÿûúÿô®¾þ6ýCÿW¬Ð ûý¯ mGù ÿßÿþ¡“]g…zýƒ£Hïô·ÿDz¡¨äìXUd)z·¾Äð‡ÅZ O¾yHge=?Ç5Cä?}¯¤ñ ƒŽ#d„.—þëútïíôÝî?ýÅ7ÿ]<4Èd¯{a~ˆ<óf Š†–ý}8oÒêƒ~û_î`ƒÈdkä4ƒK®¿×ô††>õ~œ7Ì îÞp6È๷ë×ÈKR S q ¼l}ë¯ý|غÿ×·ÿ뮇"Ù ±×›ÃF?þüh 2]o¶¿ÿýWþߺÿÿ²8/ýý¿AµÝÿÿm ¹û÷ÿ¯ÿÿÿ¦A»Èã×´¿ÿÿÿßíÇÿï×Íb{ý9±²N¢/äaž?ÿ÷¯ööÿ¿ÿïëõ¿åúAï!¯ñÿõw_Õ·ßÿ¿ûägA?ý ŸI 3Wÿëïÿ/ÅõÿÿÿìW6)î—«ì=S ”*ƒ‘Z·_û§éo!÷!¨þCï0ïÿÿý?÷ÿHæYü2¯_ý_O»®i>¿÷µÿìÃÿþ¾•ò£Xd^%]¿ÿúßïþAqÿò#ãÿãýUk× ´r#§bÆãÿoÿûÛwþÿ»kûÿÚþ¿ë‡A=©ø˜ìÚºÿý¾ßÿ¯¿ú¿øk×KIÿ¥´›FÂí àÈ 5ÿ~—÷ í&ÒÿúÿÿÇßíz¼t¾Ÿo²-…úþ¿·ûi6»þõÿ¶¿ÿq^ÿ_Þû£¨d§¿æ‡ƒ+þOvð°×¿íý"ßý#7ýk_í„mHló½‘\‚ï\Ö-ê.$3ìVÛVß}™×M¶Á¥ÿü&ýoþ¿é¸!G:©=à÷æ¤û×Uÿ±¼—;qßÿ«ÌúXý¤DÏ’á ¯¾h žFöšÿÿoÚ_õOðÿ^—µÿÂÉœî$ ŸñZ¬3=4Õ>Õzþýj»¨ÿû7Ѓ –-xˆÐˆˆˆˆ0²¢Ý?ûzMú·ê¾­ý æÑ 21b8þÚÿëúß¿ý/Ð: 5ÿ¯úÓ|\õþÿGFúcõ(#fuõÿç»õo¯ý¸D-ùÃ^>-ˆ˜ÿÝkÓa‡Z×]j½«úd –@ Úÿÿë‡ô¿þ“`¤ >šœg´Mða}² ¹z^¿õ÷;‚ããùÁáÁÍ"""!®«­‡Á¯¾¿ÿ;–‰ÀäQ„"H!Ç!©¡Â£ùÉ8PL§DÀÏ!(~¿ƒzßÿþºxAé Ñ)„h!påÀÚ Â6©èO¡5‚äR6@Wÿ[n—õýký÷§÷¡vºúφŠ4#ÆÁ42‚ãþ‰ý¾jOÿþÖ‰ò “fG]+iOö›hÜ!mFr‚‰c†yé§D5»y±Ò¿ë]DÓ~ô ê”Ày×äÿ:C.à„„ò㜀¨D2õgT¿¿ív¿þã¤ÿ¤ßïÓëÿð`” Œ%™£lÌÂBÈ6òÖ¾Awþ½÷¤¯ô½vô›×ÿ_Á ÁÁ."9 Séoë¶ÿïóWú¿û뺫ëüƒdÍ>ÿ׿`}!’ Nw!¦åA”_ÿ¿ÛµøàÏšßÿÛéúZß»×0†ûP½hY #‡÷®CMÕi»ÿˆv•”ÿÿK¯ëþ“õƒ^/Òú¨N ÌzÝ,:ÿÇÔØO_ÿï×ûÿÞ‚Çßê&@ÔÇ‹ûûÿÿ ~¿ÿÇÿý/|üÔ#ֵјgˆg.­„¿òþóÜ`×ÿÝ/ñÿÿñõýV ±¿ÿFõæÇ!³?_ÿÒÿU é%ÞŽpPHkvëý" uúí0ÿúô¾ÿõÂPú’¡ÿ ¦ C[v¯í«úÿ`ßÛýëþ©ué¸A KúZ^5ÚN©ßÿõ¿ÿz×ÿZ·Óñ %‚ÿómŽ;¥Ußõû~—õÿî½7ø%k¥ä0>kâÔÌû© ?Öß[ÿéézúø Z‰Ÿÿ–##p¿Åú÷ÛÿÿÅé|_úX@šlYÃ<ûƒ´ úUò¡k~·¿ºïÿÿ^ÛÿÔ ¡ËÄñ¡ Kð¼X]úÿÿ÷ÿÏ{;¯Î/¯x Uh|ÈìŽ+´ ×Åïöëëêÿþž#ü?f¦@¸±á.†¬Ñ¹t"‰|Ž ¿û¯´ºû"ÕûuÕ||X ^ <6Pô8]Ò»ƒ0ëþéî¿ûW(K鿽/ ~ñp@éa'Hzb*¿¿ÿþ`¿ýF( ¼ ¿ ¦Ð/Ð!i¯µÿÿ×ý[ÑBâJˆ/,&xÅåõ .¸Q¾Nÿÿûï£` x XB!œ|FÒX,ƒX1ôA»¶¿ÿ·ÿ~ô ˆ}'„´ÿz_õïÿÿàxI/Á 2OÑP4/¼2 )ßÿÝÿÛÿ×Áá•W&ÈÚ' Þ¤ý2$ lE'Ÿù GÿÿÿáqÂýÑ %´ò~ÿ_õ¿È.îßÿýWAÏåP­P*;Ó",/÷ïÿõïõpK¿üDC3 —†Ž ^S†@k« ÿþßÿÿé|þ÷ öò!#È ûk¯kßú¿]­ƒ D§äì`æÈdƒLô›è‚v-Å0áw[¥·ý\Ž A «ÛâÿÿMœy ÷V¹!ÛKýµýÚø’áÅ_Úßÿÿ6dz¶CIØì¬R"v.ß¶–Þ"õ¼F3†þÿïúÒ’¤,E+ù ¨ @k¾!«JCØ4¿þëPnû_Ä8®ñeÁ`º ÖÁ(4b ^ºVõ†CÍ&Âëý¯ÄE‘Ò§ŽKâÿý}m‚¸DE¡äŠÍ+^"Èàxd}6R¿_ÿ¤s#™=Àî ŒDDDG…‚ Wƒÿô‚¡ º"ǰ…‚ö]z­ë†æÁù íd 75‰ €Ëø`‚ÿö¿ù±c<4 xlq‚(~SëÿÇ_ÐO¥ÙÅA“„pb«×úÿoK´Ói0_ÿ¥úZ®Žlj@ðQä5S†ÿÿ×Ñ aá…TÇÿÕ/ÿKv†ÁA x(™äQý~´¿þ½ûR‡pTÕ²˜B PEÏúþ¿ÿî°T0GÃ8ap„%uÿî¿ì-G@ŸöÈ(ÆG:`Šd4<>ƒ9 “=ï¯ü_øé~† Ì3.¾#C$A…X!@Wÿ¯¯¥ÿ©Á¼Á(v$f(Ó#ƒÁ)ƒ ?ÿ¿×¯ëÿzÃÒt!´…¶Iè†HðŒr»úùï¯ÿ÷«þ@ðÄÕ a‚>Nˆg˜†!pÊ*”Ÿþ˜z_ »ýíXaá&k×ôÕýWÒøKÿ}¤Á„?a„Ú¯ñ_¯þwú@×^ÚI ôf‘÷—ÿÚú éõüõ…t"ýûë½|_ë_®øø †&GÞß_ï0}ÿ¯ÿXatªÚŒÿý¨ÿß‚ÿ„ ød‹Ò·n¿ÿô{÷õÿ­ú°¶½¿þ¾ºoœËÿWÿÿ›Hqî*×¢¿éú¯ÿÁÐ,~7§ÿÿ¾ƒ~ÿ¥þÔ4’ý¿÷ÿÿÿT¾ñÛkÿ÷«ú¯ú<5 .¿³JÑEÖÝÿàƒ=˜?ðHáš HxÛ¢0šÿ¯üDˆÁð’H/[d{­ÿ¿ÿôä5f@ðn¿GþÿÃÓïýäi£ˆ(Pˆ¿§ÿøds8¿ûa!pU 4@÷ÏéußõˆyÿìHá·:!’ ^V„3\ºÄG÷÷ÿÿüà<¡qãºï_ÿþ ¸ÁC.zïÿÿä5&Pôò ­9tðDa5ÿïÿèt ÛbÛ·ø`Â_ÿ„——VÈA}_Òt õýp‚È+yh09¡®ü.¾(t¿ Ÿ„ÀZ‚ &ä%?àƒ4dôØF‚ãiáBÈ ²PSä1ÓG@\àdÏÈu‚ 2`ݼøLð¹ÿ§ÿ«÷°ÂÕ5OæÁAÁ_ïõßiæaà¿P?k~ú×ÂÐy˜)œGÑì†H(‡!«éúO0¾85¯ïê o„aÉCC¿ÛI¿Ç Ž {ÇÕ`þÐÓ×ÿÿõÿ[Fàwÿÿÿüçþl3  ‘ ý®¿þ þäyÿðj¬?úÿÐ*ÿï¼!’,Žîüü*ý&ºüIøGO¥ëÿø@¿ÿ ÷ý?é/ù0ÿü¾·ø@‚WöšZÿÿûïùC„6¡ˆÿÿw—]ô  @ðbaeZ`“OÿúOÿø @1<(I 3×uÐþÚwþ‚ÌÒ¿µˆ?×ÿëü†½T?B@¿Ö …Å8¯¿ßPõo­@ðjò º”>@ðÊ›àsXM /ý}Èø¨«ü J#†Ç^Î2fÿð¹°ÙCWï >ÐÃôØ“®þúúÿ oKÌN7ÿñ^ä5ò} A~„3¸ÿß÷ÿ®ð<4¿Æ¿×ÿ÷½/„þÿþ×ü~Ö¨%òÜF9ˆ(sÃþ¾Alñÿû^•üDÿü_þ÷ð@²óò?ÿÿÿ£°—‚.‚£ÈYCä_ÿ÷ÿ½UøfXò‡Ðÿÿ×ÿ_ø¼ºïòÿ×ýk’°Zà‚ ¤ß‚ÿþßøk¹g3Œ§H0aqÒÕ2}êû÷ºþ7¡Äv‹ëWG«_÷þÂvÃR+(rÜð¸0Á+àOÿdvĺþ#.“ Ž""½@ûÎñöÿA‚ûÄYp\0@üÕ›°Â×®ûýb,¼bLÄT2 ¶»#àÒª›Ú´íxˆŽˆ¦GLô ¸ˆˆˆî¶g±à£<Çdp8°‚i$¡È*ŽhÁÅ–ŽÀŽ!¦â#±&@ðÐä‡8äîl/Žü0™0ZhX!d + xhò /Ø[ xgÂnndyX aT&@ð¤È'ÍŠÂè4$¸†Ôâ§i‘ÐaðNÁ«49U< ç9ÄPç~ƒdIæ°öˆ †`é<ñ *]2 Iá zDœ§Ì`Â(0i‚E¡"$7‘v\g$7ïЉÄ!„Â@ðDˆÆÿn£á¢ŒÃ;GtŽ˜`„êb!öë„4g—áB`„Y ÎßFÃ1 ¸LºÂtÁ"îHSàÀ4Ð~Ã~!l㎘a0Ð!<¡rƒ!·0°`“!g‚„ ¤”ø2 àŒââ9}d û ‰ÀŠ4ç•(r 6@çýWI†} n„ƒú>ßþ@ðe>ü Ü!gÑ7´0¡ÿ_ÿ>¤Ú ¾ûÛömTCh'¡%0«ÿøäC¯ª ¿† p‚úÿñ öL8 üÌ3²!›Ä‡¯÷ñמà°ÿ[ ÿñÒöÕ&Âd=RoÇ×°‚ûñî¯ÿ×þ݃ … Ø„¨ xhûõÿûÿÿÿò(þªÁëZ<0iO_ÿýÿÿÿ»ÿþ«jû`ˆé¯u_jþö·õü˜Íÿœ¾ ê² (;”ä €pýö^ô/ülë¯{„¿ÁW y B%LV@¸æôº  ¿ÿ÷ø‡Ù„þ¿ëøO »¡:¨¿Õ ØI÷ÿ¸*ðoþ?ýWù›0ƒû!_Ð(H3£.ˆù°<àå„Ⱦw-ëÿÀÿ èÇü÷G¾ä"„„¦³y„·àk³@$ˆ‹(p¿Ã\!Ð$ þðßÐ'‚Cÿ„+ x/2H ÿè˜h ÿ÷§ðäSq´íoÁ )Õä€Îä6~ÿ†öœãá†Y ‹£Ä—ôo_­é0dÇE@Äj´!¯ëð6²‡aMŠ8 þƒ´$Yª_áþ†gì0´„G _‚Žö„¼!ÿÁ"ó x4ú7ÿŸ º8 «ü}}³¸PAFÿ ÿ¼ÌÙ qVN/Ô†uô7`_ÚaîqÂAþ¿ñAI~“ëëÿÕÑñ¨B8‚ÒÖÑÇé0éÓümc!’<_ïþ “ᙆÑà¨CõëØÁa²÷¯þ°=¶¢#ÿ E~Iÿý…¥N.Ô ]?<|6@Àç±Î3ºõ¿Á°„§ï‚Bõÿä\»ÁÐ 0a.Hþ¸Iúȉ‹ýÿðÿú6 à¿×Äp†¡¿cô¾üý”;¯×HÀB>ü%ÿ_®®ÿß\#ÕtÔ2O„pýt¨2ß‹‚(r„E¥ãÚ‹Þu©ÁDúß F5ÿï¾ áeŽAF®Ð/ý  âPÀWÿ_øK÷ÿðIG¤²ûÿt¡Ž¸Kþ%@è@æö¾¿Ö½ÿÿ ‚_éÿø%ÿzþ¹O¨FyÈe=s ªOÿmÏÿ½p‚¥ÿë¥ì£>º50í9BòQá$„‰er!Ô :¿÷ÿž@³¿úü#`Êk¿­ø ^"J˜BKˆF"\2AL|ÑCDô!°ýOß Ÿò p¿ýâ"#$eÚñd|Æ`Cù}AlDô´x?ä @CÿÙ§ JCˆ‰gÄDDHjXø`¿þÂþ@ð\~?ý Gh3šÿú ¯Mr‚SÿÈ6d Ñ#õþ–¨Hý‘ü²8d?ý†@ðcÈ5„ìõd6‡3<5G|kðŽ$àÕÁ|$âDô ÿÖˆµ^ôhdüƒQ2ƒLsS &†AQÏÈèvŽ‚Æ&‰Ð_BBYé A’'ÿç=Ž—A…¦@ð©fUÎà¹<I4,àÕ„4Ç#‚LGÂHZS:7‚þ"‰@d†þÛû§CŸ ò…u!¥d~r„ 4ÃWÈI´@ðH˜ Èh ©/…) ÁøgâÇ1è!8ðd3‘_ÌÙÅêkÂõ†ôl2˜!ˆ°Dª4Á°„RàÑ2!Šd69CžÈbÿ<4BkÚ,F@ñU˃Ù~wdtƒñ²B4»ý çêä¹5ÿÁCÂŒ„/>èØ`ŽØ* !qÚö†† „ ! àîAÇhð(<,ÖŸñö&?ùÁ&·® &ÁFôfáþÛùÃBy˜Èùdts„Â<ÀÏÄ3,ž6Œ;°_lL9߯âµÿ¿<1>h ¡°@ˆfgkNÀärðGÃ0 º>¸ˆˆÌÅ.‹åöšП €À_C*‡_ÄZÿ÷ü^Ÿ†­áÂCs0Éú÷ xfІ¥žŸB#s0ÎN ƒ!’ÞÆüG¯ñkO¿ôp ¯øGƒ2Xkuÿ¸¹À¾˜@ƒÓÂ!žÇ›ÎFðÁdàÐgŸ ,r‘ÃOÔ~!¯ò ø/©Ãw×8ëÝ_§ÿ<'¨0Á"D–É!sdGèI]x_ý‚üü~5]Èëïÿ¾’jä¡„O0Dt…Èàÿ ê¢?ýøDtr¾ õÿþÛúð…°@— öÁä ™ë®ú_¥ÿñ[_ÿÿðLްŸÈgͰL†@fSOÁüœþµÁ˜[ÿWÿïÿ¥_Qa„7á2s¯E_á„A†y TùW…Áÿÿ×ÿßÿâÿ…°”4¿f4KäpÈÈ–¬IÕˆz4PÐ>¾0m¿ x± ÿÿÿÿ¿îªy øNAzàÉ@fdAäàŽ;Òý°•|ÿ:6¿õý»ª†˜ÌÁB¼á…D4NÁhØÙ  ~ötÿÖA’ðÿ“9PWÿÿ« õ¹˜ l‡n@ðQBcðOL2DÑh · _±Á|"‡ÿÿÿô#×m~–£€^ÄpiPí¢@CsX0œ"ð?… x4ϰõÞLgÿüJ@<‚ÿÇÿ lÈ> X.£Ð†ÐW3 ö‚ZΨÿ x.×_´U†@fÀñÿÿ_%Wÿë‘N¬¸ÂÞ`‚膉ï„|˜^fõéaê!ÿÿÈ`E_°ˆ@cÿ¤÷°Á0Èàˆ`—ÛOƒhØþ×I¿Ð,ù!Á¿ÿM¤X”€Ÿû×í2n,ƒ4® C2ÿáÃ.~âßßÿÈé”9Á½ ô â¯ù˜@ÁH¸d ~9OÁð„úíÿ _@ýWþÂ4 ÖH ïÂ_ÿTCDÁ2ß?bÿ¿Â ý°oÓ°‚ø(?ÿñÒŽ ÿû®„‚׺cÿÿúZþߢg€vÈèŽ /ûÿÂô úýõàóáÈèµuÿè“×~‹ mÿ×þA•n‡à‚Öl/þÒS¯_ÿÁ,%¿ü ]ÿÿøA3dsX¿ »ßþn@ñ)ÿÿ¯Áþ¿Ùp—ÿÿø$":ø#á¢Ößäóðt& È ¾@ðùÿßÿÿø‰@ßÿèÿþÿ ÀðЮ›˜ €Ñîÿÿÿÿú ÿýá-? ëø²øqA„È0þ½Â9¯ÿ÷ WÒµÿÁÿ ú þt¢!F Mä+úþ–ò Yþ¿ü0¿ú_àˆèàfù }£0ψà [t ÿ×ëï÷oß¿¸7 úÁßâ¿]`ƒ~x°ÖÿÙN–ÿ¶«M„´½{Òÿ cµ×Áÿôõ¤ó0û7~Ãâ>P‚¿Øuì -H—ò þ©õ¿„¾ ^:!˜ó£<Óë_’°<ûa 0Au…êÛûþA³¿Âÿ_‚ ˆÃâ C].ìjÁŠwì3Ùv 0Õµöø`¿ÝP+È-röëõcìB°.ÉÀ[[^±ÈÄm+GÐ}i¿¢Â?ÛÕý+ÿý x3Y €Cä6G¼“ñ`˜À‘4áâ(†Á‘Ê´g— –ÁøaÁlÀÿí„5ÕÊ µÿø%^ " YƒéŒDZÙ0… A'Z† ˆÿÇv#ŽÞ X@—ÿý à™ Î?±á‘Ìêâ"Ë™„_/‘û3‹¤”‰¦ÉƜΠ5íHÄH (ƒ+J¯Zÿ†® Ö Èdîcøañäb4„ÈèDBÇk (Ç{è­„—ðGÐA Ö“ñÄDC‹ pÂÚ3I AAƒ¢·øHk„iô$œŒ|D⋃ #b»¨Á‡ø L%u ߈gÏÄqeÈÜnà‰+#®ÂT¡" õWü f9<|DDá•\ù¤\jÁh/aªý>9úèZ>dñ°:¹Ã6… íÄDb'Am;ixA8#0òà§/Á™ÿ‰Ìødƒ8?MA @ †@5À˜ Ô4S†Ñ €PÁ¡·6@ðÀHˆÀðØŸa¡:Hr ý‚‚yO x!2qÀ¶“!˜LÈäƒ5´ 5x ­j¹!±ÎæGŸ ÜØµA„Ó †@ñR09¼ÎS™Ècø&™Á¿ÒaÄDƒ_ƒÁ£KÂ(y oø<†‡*hDœÈá’¯¤äÆLÀ†B"`Dt”:< ÇÔfâ8 j²ƒr CÈa€¼à¿•1„C=×Ä ÞaªAÈ1 3#ÅÙB!@ð08L&C$rc‘`†Ðþ ŒÀ€s2.  ƒ xT„ “ r o•ñàƒ¥þ)†h)ÐÜ @Áê¼øf`Cš0P„IÀ¹&ͪÒÖÌh†Âd ¬†ØâÈŽ—mzý#0àÁˆ4 |[Â͆Sè=~šÿMß‚»‚ 8"‡æa£5& ¡:°3±ãûÿÔ …¦¿ÿÿp¡Q€0GèC¿Óù£† PíÌÃ<ñ˜0@ÁÓAÙÇÿ_×aÅbïà¿«#áuê ,:aÿAò†?ÂA´(C‚ña£B>¨YÇ!’*B ÎPüOg¡×„xêúdäúÈë׈ã¯Á‚°ÿ±õÜ ˆeúÜ!%ó@ j…£bbAƒƒ__þˆ-úèxÿ„£—ÿúüoõ¿A§¤ x.;pÂÿ¿†ÿÿúN d2Eÿÿÿ®m&Á&  ·3ˆáð`´ä2„ŒC”91ÂD ÿÿüwð@½ÿüÿÿüá¼`¢:°X:õ°R×0ÄDzÐ'ë–õàuÿ E¥ÿÿû#¢84üuÿt ¿ÈàR Gï‘3CôÓ6žµ®@ðÓ*´|$ Éà¢à xÿ†ƒ²†Ž!ªœá°rX@°}2‚ /`Ôá½8áþ¤GØ'…A<0L‚¯<09 ù¦š@ð.åáXmÁCµØ* ä3#Áë`¨˜ lÔà­Dx<a0„N `¾g“á¨G`%B 3™ð<‹*\èdq‚|àEP„‡Ÿü”Hfz°_¦`xmê8˜ `¤Ó"Á!”¯› 0©¡$à^-1ä ©Á?àˆëþé^a">ft4D€ðÌiÉ i6ðÎÈlNL&A© ‡ xoä‡8û{#§ô†Ïøo½VÒ~f4ˆìµ †HªÈ2gߨG—&ŠŒ0P™“!—ÅL(a­ Áñƒõò œ~Ú¡ÛßÐ&GMiá‘f  '¤ëáFÌ3„L!)Àð¤tGp ¢à ®ÁÓ¥¾¢?à‚`ò‚¦ˆ'  D2ù@ÆWaƒ—Ø#wðDtý&È1“0ÁB  |.C3œ;ÿÁð]¯ÿ x)L@Á®¡l  Âa.°×þ ™q{„kB™ ¡l¹NŸÔáè èûãúõ®×í®¨ Ï@žÿüx m}Ý73 îh«Ésx9ˆ‡þ†ÿÿ·ßã‚#£ÊË¥ú®õðJÂ@Â!™. ·™™‚ ¤t!²ÉaVJ™âN_ÐoG_ÿë{⃌%W^Ö|3~>ëud¥YÇJ "ŸŒiÄCÉ5hÂAÿÿÃ~@ðÊ‚é6“`µB!Èd‚ãœbÿÿÛ!ŒÚà*Úvˆà’3 áȸdEóP>‡Ä°zÌÏÿöÊqpQ -‰Ôü2;ÿñ@‚AÄ?Ký xÐé‰ ßx2R Ÿ¿ÿðbÁhê†mu°IƒZñÿðø H$¤L çDÿ ½ÿðW4£ ÈQ÷ÿüX7¼‘‘Ŭ†HeZÿïød#é¡x"'ùa:õÁÚ @vW N¤§_ÿþü?DÔ'`ûÿÿ (¨ x'ö?ðK`ñ#`ù˜)úkÿÿgT¯ÿ œtÿÿÿ@@©†Pô ü†¿ð_<6¡ìëQÿÿÈ8ä6Sù/bÁ2Ÿï_ü†¼Â Q¼:áѮ֠ˆ€ÈN€úþ¾5ø£ç÷ˆ‡õÿøA‚8þ“Eÿ<Ër³™/¯ßü‰ÿøµÿÿÿè"ƒU/ÖB×øýÙðaÄÿô›Ðÿÿù·!„_ÿÐH8?Ýÿýtf+@Ð U_ý|0@·Û¢ ]þø‹ÿü K¿?¯ðGÀ¼ €„p€¿ìžõê×A'ä;ÿÿþÿÈqü Iÿ¿ðK×DL2@ŸüD†«WPa„»Iý7ï×ýY`ˆü‹þ@Št¯ÿ_As1›Þ ü†œUí ·Á´½zïýµþA:þHmuýéSô Ð$H³ýh‚LŽ„~°a†á;Ñ €Zζ׬…ýU~ûí=Ò˜ä Ø yÁà×¢'!ªÃX%¶ aÙ>]:‘Óþ6 {V× ¿ýjºôCÁ–¬Ž™ÅOM„Á< Á2:†˜ù ¤p–ü[!m/dŽ‚ß Z@ˆê¤—ÿ­kÂQ!ð×âÁ„@ƒ 3å8x6@Ð xhâP!ªDà눨øaa¾°Ö4W[¡ø /!sûÒü WøMÁለ¸i…ƒµÈyBý§ b £úï ÿÿ E<†ßè͆A¸d‡–¬D28Rã ˜ `¶#²œŠ?ãM`Á~h=߯ÿ„¼†„<5¨0ˆhÿè†z!C 3Ÿñá®ä4‡! ï† ˆ† â8h^„¤Àð`àºò'pf~ P_à9á?ˆˆ‹/¢ ® Aþ"Ìð¸¹F€‡\Žfy€<˜X0‚ ª|E0õ* ŽŸøxœEðÿ!¡Ë„q¬H®õq4Ãv[„›  OT «D *ÙCÿAƒ¡!G<ëÄD0X‡!™ä4;{Ã+ rµèYÒà–Xj Ž"$ d6cƒÄG|4#Œ!¸%@¬$ ãaÿ h¥Èz9 añ`“’4„„[­ÈÁ‘Ó Ødþ„2‰NPäÅ›Iš’ƒ)ËNð–lƒk«Oü`™ÂžÃaxþ`eÃ(Žc#0@ðÌ‚b ˆ¦/àRà¤2 ®×›Pƒƒ†B"ЉÀ<=ž²8A“ä“ÚÆ0G™Áv’ýB^G 1Z¡fÁ£2`…GL x@"~@ñxÄŒ9ÑûTc9ŸÐ3 ¯YÃ*sI×à…áÿòé?—r Ç ÚeƒM‹ \Gàƒ x7C`¸ˆŽ»t@ƒþF}A‡ÚVŽ‚ c D‚ô(t8œ —Å„uPH!’ B°®!¶çÁ¡dʃYT Ód  @ø#àx/pA¿Z º;Zô!EÁ•™†‡Ê3ùF“B$à`O†@3}†pd4 <ìp„Dää€ÈK «Ø0Ð]z D{Úá)Ùà“à‚A<ØóàÊG͆piÐ%×ø#0†Øuº áIiºIpÉ+ÞØ_Gà“|ŒeðZB?® ¹Rµ 00`ºu„f# æq‰ÿOÐßÃMÄL‚d7"Ápw!îûÁ†/‰»ƒƒPàÄWß¾>ûkІèHy÷Âmöù˜g£ALPˆ Јˆ2 ù _ò‚ëuƒßÿýiºû£a–Ð"‡oòó 2“@`ž„‹;AèA͇Ȝ`0Ö·®ù·WÿÿwÿÐ l\§ 0ÿ{ÁCyÁ¥Ò| "w>øgx d2AyÐÄ8a Ú¥ù°aúü}ñëG.‡jßêïL6ãm(0DtA73 Â*Ã(„DpÉIÃ6d2Èa€Dû¼àF…à Øøßïn=Ì$¡_Ûÿÿÿýô6AÌì#á 80Bõ!šFŸä ¹²@cãÿÿЋ¯¯û_ÿõÿëÉoa‚‰Æ¿øeYC‚×ÿõÿýþ£ÿýÿý÷÷hÀgÌÛAäTêÈ 6ˆÁ(!’C“ºÿK[Ð/ñÿÿëÿa`ÞÚBú‚d2/Á‡üfT|!WßøAaè%ÿoÓÿþ7^:L5lðËúŒ4«Å‘Ì—ÂzÔ!3F"8-}WUAÿßÿþ?ö‡°{j ±Í•ö"#®C4x‹ö -xH.ÉÌÎV?_¯ÿùÿ÷ëä Ê+‡ê/ž ì#P«ðl( ´I# ]„"ë‚û$ë¯ö`ˆ~úïïƒØ_KIƒp•o58A`j ÇÄ“j"ñNN8ÿˆj%ðûÿî@ðj˜0‚ ÍøHVœö\¼aÒÁò_1Ð~¶Dïü=$ »ïÂûè†ÝðÈ  QSá™ÓÐHd30˜páÉŠ–PP’º_éD?ÿä€ÏK “«ñ×÷ xe A¯PF °K‡D4wX4à`3M< Mæa—Ü ¤€!ó`Ÿû¦ÕjEXIÁ ïþ@ðÑH4ƒ >B¿ Súßâ¡-a£™êÐTß_ÿá—0éb„& cßÍð/ÐÑ €P0ð]’h> ëG¿ü ZVÁïÈd†‚ûÿú`Â< èPR@r>]8‡é|Ö‚ÿLnÁ´‡ ÿ <2æAŸÁ’@v?¥MÿÿŽ ¨Eä0Ãðu£F †C:5 xÜ@xܘB<Ð!:àÓô ¾¿þÐ$ PAºýWÖˆ 3H†y†D@ƒ BǾµÈSJÈ1Ð/ð‚ÿý?‚(pPA2:~½Íëð;Ì'/õõ¥Çþ]ÿ«ÿ„%èX~“ê?¤ä;M‚ä Ì¡õýð@²†yà×âÜ„9CœÁ.½þ¾, @’^Õüa«ÿ†f¢à Î98ªHkÿëGð´E¡Âþ»ÿ„( ¼`¿íj!ˆˆX#á’jDÏÂè/ðÿþøKõ œˆáR×iƒf‰k_꟪U þ—ÿÿXA _ú6‚b#ÿÐD3ЃWˆd|ÂK­x0a½ò ½ûø@»ÿÿÒABÿÁ! «¿~‚ˆ’}ÐK_ß],î?¿÷ öCÆÀT#á ¿| A§ö¾°¤qÇi3ëÂ] ZúÿჅÞEü,BAàÿúÌÂÆ͆%À±‚áêÃUü:Uùû„¶GA¥ë<¿ÿAz¯ðÿ!’û Îb9¨ˆàɰÃ%íXa‚üo²zÅÂõ¯þ^ÿû<÷a 5 3l3_’Cdp’àÃk_ûëÞ á ¨:6†šÿÂ_ûä @ð\ åXd†’ú`ˆf$¾"8ŽHFÆ\9€Ö°ÂÚ@·_†N¥ø`á¾4 È3_á/ÿ†dí©EÃ$%ÄàCÔÃëZƒSÄEó©Ü¸¬h/Ã[$Ód}pKGéþ_ø%é‹Â< x !_°ÄÈ ÷N´ŒPƒ¨-ý…[òƒÂ#èHøv Èl… `ƒ ¼!ƒ;Íüo xn8 TÿÙ¶¬ÆÝaýªtŸÃè}h¡ÍŠ'Ø":ÄD$!êÂ÷QÅr ñà¯Ü÷ü":É9NTázõÚPî3àÆÂ!£Ðò ¿Ú‚Ç>>Ô2>HÁ.@ðÓ¿r?øÿúO~…Czïè`×Á‚(po ¯E Ö“D@d,P":âå>£[þ¿‚]à·ÿý®C2ke8$,Ñ Âðx‚Øþõÿ÷×ÿ÷ÿïõö?PH<(|š €bÒX0Òß \ _Âÿï_êÈoû¿þªf Ò GC =~Þ’Éóè,°i~ wþ¿þ?ƒPÿûªªOÓ C ¿ø@ŠOÂ×éaëÿÿÿúÔg—pGÃ,:[‘@É £¨|áš A DtÈ5¢ÒÄ4¿ðÁ‚‘"¾ÿ&^¿ÇÁ-C$Q[Áth ‘ü¤ËƒgÂH ‘FÍ\M`xCYÖ¡ ¿®×,[ÿØA„¯é8Aïì˜(ÄèŸ}Pƒ´ˆ5(Ú¿ °b !ÿýñ /Kÿ÷®‡¶@ðÙ`ÿ†G “ÞCéS¥ø%‚]~¹ 5Ý¥¥Kâ«t 0L†@ åÙÓäÞ$,Ð" ¾³0 ç‘†CD‚Ð"‡ÿîH ÿuÿ¢ç_áä¬Î-(ÿµG—û„x2C.ŽŒ!8˜F`Þà õÍr/é¿ÿú-R×IŽƒ ÿà¢;~ÚXWÒm/_ÂÂ#œ oÿþ`Â^½XBÿÿäc{¿† /ð@‡]ÿúNÕ÷ªþVðÑÁÕ t8‚ûàý=AÕ‘õ¾ iAá&ÁzD€ïÓÂbßûþ:^, Y5f¿Ca„ Áÿ x!5 Ð50ë÷ÿ¿„ ÐZTÿ“™Aß¾@ðí—|/þÁÿÁ¾ÿÿ÷ z8pJ}õh_þ@ðz(bi}*üðfdx¹ST †HfpGà 8&CF#@¦& %€|$@e’3lŽÐܸdÕ:Xû²]¤­&Òô ¸&ÂE‹æ`CF‘/‘ØaÖ «A0„C x5AÁ™Â!†@0—õËsqOo ƒ„0{#¾ $Èø4 ‘ø":¤¡«÷a@ñŒ ªäY Á4 uvƒ^¢"Pƒd†dßÕñ!?\(ê0ãðf›J_ëõ„ƒŽŒÃ;Fq Ô"$²( ‘ÀØï„ ò až¢‡þÁÿúÕm ƒUè&ûÁÆž„Iø*‚Ø®{.Ÿø":RA¿ÇÒÿðõý¸UíA¿ xT,¿@›Ñ b©[íä'ÿAQ ÿÿ_ûã¨5¯÷àî 0a sŽ´CGÌœ¢éɬ3D`dƒbl" 2äçßÿ^85á£úÿ·ÿÚÆ @Þ16 Ã$ÃXÒ²àQ]*ü/Ç´ŸÖyWÿô ¯ô˜=˪Ó܂Ӡb¹‚ ÏàÕÈd†˜ÿ¯ÿÿh‚>ÿõá!ÿüC£0Îîm®âpà ­~š„x¾?ÿ×ãÿ‚ÿúü¿_×þéñH†ß½-(z_ûËP.Ô~µ×ÿ¿×ôrÿØ @ÙCÿ¶ ;è@ð{&àä2C14»÷õ„/_Ð.¿ûKZüëýcú Q3ø|ô0°„y ØáQP€­õ¨ƒÖ¿õÁþ°a„`]ÿ㎾Pê C!š5ÿɘ*T‚G5¥ê¿×²è4µýý«üâÂKÖ÷‘ÓëÄT@ði8Qt út¯üY¯ÿðZøâýT<(Š”á:< vC$3Ÿ  ü.›(u!µ"†s„— ª­î‡ø0hØÿý#¢2dº‚6ƒ@< Ùýzð@Å„ 3¼~@ðÑçt†./»ãð“`’¯÷ÿÚÈ/‚Ŷ׷þÖA!A#‰qª_ëóFGð1 ÈQÿï \DÐÃDš6aÈmÎ ~ ÞA3ütf Pó¤a}/kè_È®j”¡Ð/òË„ Ö¹„C="PB^Ûß`÷ÿÂI Og²;Áp¿ò,ʼ$н߈0’ÿí=Íìmÿÿÿð@‘ă.©â0Ù d4Oî¼A‡ P¦c#…¥¶ùëÒÐ73,3ÙN ë«__ö„`Â:FÐ7×ÿú½_K Y 3ºò1š< \Øy ƒ—ÄM1×àÿë^¡0Ç¿úûüà­0“aäŒáºp@«2NPûÄE³¹þ+ä3ÇïÁðAk|†#´ÿÝ´~Äp´ßÿÑÁ°A †] `È£ D ûÇÿÿ@¶º'D\)®" $ Ç¿ÿ öž ¨¬À4ƒ Õ2 £Ë"R]ü%¿aaG×#¡ ¡ÕÿÁ –CN—q„=?_í¿’¶¨^ C9Ï@ðƒôDEˆík]{ü P_òéÿéZà™Ó–âøIª í}có<’á … ^ÿÿÈrŸP_¬H™ ºwßø#úB?ØdƒMŸ Àëêް Ûä2øößàx`ÂKÅúí_O×_øÿø) V¤—º`]‚ˆÃ }6Ð/Oª xfÇû_ÿ_þ@údê=Þ6?ø@¾Õ‘úÊ"8 /VÕµ÷ # P}ä^þÿýñ ž5„ÿÝpJœa쎄çþ;¯ÂI!þ@ö9Ÿ¿­Ò Yà‡ÿÞ&ýÐ% xj=… xqÅÁ82Fs ¸0‚O „ãЭZWì5ÿò†‹×ü%þÁ‚÷.c…F‘ d º]Bk E|pw£Ø": ûþ¯´¾ßá/רÂI¢ÞA”âB9§à5ƒ"«¼– FÌð†DÃ…¸4(0d4: øÝA†/÷ò9Çð@—×TJÀð0 !ë#ä|ZfðÁqΨGß Ã–:ÞÐb ƒWÁ×­ È3Gÿý„½Q Ã ú‘éS$kh®AɈö™(þ|m/Á>½Â#­`á’ƒÂ?R!žq<²áÕ‚" ŽƒAtG28g.54^/‘Ø"”€¨ˆ@Âý¡`tÂAƒi] Ÿ‡y :D4OWG´ìE„DDDDDC#….@¨3èÛL§Õø<²ÜHƒ~Á‘9g@N  EôÈ‘Ùã}™à þ¢C5&!ƒ˜r ¿â#j ŒtØj Á ”†Hi {/ÃHᢠmWØ2ÔFA¯ÄE¦²``v›„®ug½„µý­µÐCf,=ŒŽ"@ðÓ0ƒ53àx4¨ŽC5" I½¾¼ °6 xá,ÄD\ cˆe AÔi´J@ð÷µ D·ÐÈä Qø&o ‚‹´3à„2@' ø#=~@ðÌ:ÒdiÈ4 x5ˆ‹#¢<­ŽÈw1ج ¸¬}% be^Žëh0‰€<0F Í`x…Ùp&„ˆˆñAl”a°’Õ- 2C2…g0šk¡$aV† ÇL¸5Ùr8Ðe:!‚‡dt§db ò¯ ­þ˜A‚ ¬íZ„Yú„ €ßÏ9ÜÎaÎù ,' 0¼:–>@ðÊš< ôˆƒ¤Ï/ƒÿøh|4Aóc6(`ËáB°P@îÈ @‚² Ü|C6#èrÓ¿øèHÜðWÿ®­¡Œ‰¢8Ó³ùt 0X4ò FÓ ˆÛü_!™E„"ß5 \ ãø#á˜à,8B."8r?F„pž ÈÃ^+½†<,,@àÔLÀÐ=6·\`ˆø a´#ÂÔw! é‚Èb­ý‘~@ðØ:‚?P«+@ÖàqÁút)† `Ð&ñ¢"8Tf ‡ÚŒŒ ?ÄH`x.+߆Ï?¬0ø(Áá÷I†Pé  ýr$ ÁüZòë‰+ëÆÖÂKºµmqT ½y,KO¶CÿÜÂcßôá¯ìŽ¿êà0ÿ {˜<@ˆ3âˆ2üàCœsb©ÁDø¨ÿûë·ÄG»É·ø"\2F)‡‰Äbÿ_ÿÿúý,àÉ ¿þƒ!Cƒþàÿú¯¯7ý-~ÿ XA„âÓêÚHâTÈÿ!’-‘ÿþ û×OÿçÃE &†„‡„ð†¯ÿt½Òý.²¯þ¤4{%a’]õØjÿ¯_a„·IÁc_ù ‚–-zÃd!’üéÈe†g×ÁßᆂÃh –ÿ² تðA`ˆûNa$CD&€h ƒô½}Í…¹NS ¡ÒõÿX+!´@;ê—¸aùê?ðÄDR ˆdX)ÂHÚ «A}(6"‹3ŽùÂ×Ú уþºü `°Î1?ÒëØh̉ à 0CIϰ'£21°A:†‰ÿ¡ü ¿ x.äê[WõíÿB!áAâ9hHIá´p fÁþË£ì~—ÌÃ>+t»×ýxd­ˬïþDÏÿßü%„ ÿü!ž‘¨dÇþ"ƒh"‡Oÿýÿô¿õô Èg§õ¿† àÁØ…oì‚Óúþý ´ˆfY Ñ˨>›Ésïêà°Á¥è¿ëÿÂéàÄD0Xn¾„ŽžôÃ'û¥¯þëõÁ®–_‚ì3޶ë|6“~¿ÿ~¡+/Q°@žHÁ~Èéø1L`à ½0h& @Ã@¿FÃ$òƒPH`x6hàÕ|0Ê/øÃöGJƒX3V¬„um&×ÿÿµºÈˆÅ}[âÁ-ˆQ:¼2C¯ëõýCõ ^ Ëæ¯i¦G GA¡82  ÆÅ•á/×¥ðDtƒ¢@0ò c °ˆ4`2a|Ød¿â""#M “" »D0É?ñ8‚–7¡Zb?â,¸‡´^ŒÛ$~¸2dý]„ý,ú1ƒÿ —V´"¼5Ù1 B„ÄÿÄDZe;ÿ®,6Õ.ÿˆ^"ŸN‚ª‚AȈ*Ì87¯‹¶¹ÁH x@¨¢î„N’oò€²>Ð0~?‚irž×ÈЛ•3A±Ë­×ë[x´fÌ#‚UÁ~‹!˜áÁ”ä6ÇÁˆ/ë¯ñ’&ŒIÁ'­B ;Lá ™(V¦²cÐWÅûÿ[AÍÛþÂÿ‚È‘IAuþßêH&„YÃ6=‡`×IpÚøŠÿŽä߬ƒ<ü+`ƒ«Ú4í›Ó ÕÂD ƒµa ÏÔ »aöG—ã‚þ«{ÿþ+ô.CEÑ ެDÔ ÞðÈ5‘t“àÓåp¼þ¸®¿ß|þøH0û)àŠ6 hä^#Ïňþ”ýˆíQÿÿîÈà×ÿ]àÁ{ c„}¿ î¿öýkýõd~è6–C0l†@(x5Rqrƒ—Ü ƒ³qñƒþ ­ô¾“Æþ¿ÿÈ#à†a˜…ƒø1°¹ÃUÏV#äC4_¿í—Küo3Løÿêó[8ä4Ç úþä¼ ÷úÄÁïÿ ‘ÁCÄþýÍ¡D~õ xbbÕ7ÿ¯ ¯¿üak/¯Þ´˜9 1_ÿà‹ K /×ðûàà ÿ†Â­Éã’ÿ þ ˆ ?ƒ(pHƒ6éé~¿ì?÷øÿ„!È)ÿèØŽ Ò¸1(ÂOÿ|/Âÿ ¿ ?ÿÜ0ÿ]/ŸÃ=HÈ!©ÄØ­tžëÿKÿ ÝëöÿørŸðŸ®¤0ƒQqfxMä&d2C,ÿê@ðËûÿQÿÿ‘ Ž»±þª\$ ˆdóAôò ›Jðfò‡ï¯ðOÿ߈ðÝþ/Rb"Ãß]ÃH/ïÈ#ÿFõÿãü:ü%ð½—YðáÃ|1è‚¥ ú½@üáG-òsÚïé¯èUÓÄ‹09  §Ô†HåhC1@«® ¥½oñÚC ‡ÁÝúû\ ½EÐ* ¨w !Èv6Ð"œHç4!Áaá¯\0@œ6E¶¿W£Á›¯ï\(7¿øA}ð´ƒaù€È#èÍ†Š‹Ò`ÄAIP¿†íÁ`Ú¶—„p2AGëê¡÷¥êªA²ì0B E©B l†žªÔ9V•°d0Ž-0Ð ØA2:mþÿï ‚eï„` AS¥ÿh‹e¸Vɸ0°ÇQ\3à[‡ÚÁûÿéî¸/‚¿óFg†C>§ÎqìCî@Ð\33á‚pÂØŠá–äAÂVLs² Ç_÷_ëï ?ü^¿AÂ#B¬Ž˜ˆˆá¬0\DS P!ŸàÁqË´ÿƒtà @ŠAuúÜØÃ Õ º.G¥<3ùÆsS52áŸÐ‰P D{ýì2&õ.= àd øPèÎ#ï± Ù )q‘â<ƒ1‘ãÚEòÿñ_½¸k¯PmO¤ñþa!!‰î"""""C$Eb2>YRçÿÁ‡6Pä±/^¿ðj È†]ô$>""?õa¦" »½V½G¦ÈV;L¾™}àÁÁ•eЄr¡tÁÓ÷ðÃGÃ$ :â"""$3<¯aqa ¿ÿlá p ù¼Dj¿ë_ã `;¿ h P@ðÜ™ I<5/ƒ²8Bð"‡ï^쎖¤6Vˆá’$oÂÈÒ.Lá‹!<†Ÿb"#ΠxmÂPû .#èD9¦\07áAL!(åâ0 Cašy  Ë!’ 4!±Èh‚ž‘W—Á£CÍfa}aÉ ¬?D€ì( a€x40„A<ìþsžÊ ÐSžšj„2³ŽAø§ ” u8‰Ô+±ª41Vàˆg™ ˜hÌÃ; ¦@ð0‚&„Da² `Ü~í8²:‚-×Aü(#0PÈd†0Ì:s–iµyðÐјg|OeàÑ­$ Ò‚x&¨úb‚Ù¨iq?Èk'.i~C$2œÎÄ£Ð/Âç.>‚o„$s@nGæ`„y÷Í„`¨À‘GÈéN$Žq!—OÈ2½<ÊJï°ÄX¥«!—2‡t¡…†< @ÃTž†„9 / Ð'Ö»b5C„‚˜ä  l[ÇB!#àŠCö×ï–ºØ,>†˜Y ÿKªVÁ!¨sF¾®… õ[ÿÚþðXx(,žÇsW‚ÿøßÿ¥éá muüoï°Uâ" ÃÉ-2 ‘¤:V„E ƒ oõKÿþ¾}™·«ÁðDt®|ƒù GÁq8!ÅÛ§üI0<4Ða‚/¯üˆ9üÿÿÔCí¿¨0Á ÁèA:at¢¹"#¢Bë‚ « :lP_Ø!(8^¿ÿ³£ f £¤87öÕ¯àß¶Áúvjs¸WAa$.:Qê½°._õñiGÁú¦ÿÔ7 xkˆ©#6 "†ý‚¼¹ Ñ4#ÒÂT- Q‚[|h%Òýýo_ÿýwÁ0È¢?H¨' »àX PA°¿`Á‚Ê80”¿ÿSÂR÷ÿßûTÈÁ ë ×oðil2†‰ÌÃ> ­iÈfñôª¿_éÒ|õýy˜¹¬2O»[÷ÖsS `‚§‚IÒá—5„—@¿ý*mÿÿú!¢`‰0È €¡ª8‘Á¬[¼ZÐ*@»  ]ˆºƒ”(GxAÿM„ÿÿþ@ðižˆÐd†hòJ$ ±ÉAG++ü%„ PUªd „/ÆÅ¢pKÿÕ®ƒÿÿÿÑ ËF‚ƒÎçs¸QHE k¿Èç¥xKáž-˜ `N_ wã¤æÿÿÿƒ„Aܺ"'úЯö–„á†w\oà½/ý' ªÿ߯öE˜»œtýr€´:A„¼ãŸ¡»ÃA¦/ÿÕ!ˆ3ÿ×þ[þ@ñÖËÊ'ÀðR_þ‚ Ү¾Á0@ºý…ß¿ÿè§ÁýCE dp‘ˆàx4ßøyÉézäS<Î{ù+à¿ý]aÕÿÿĨÃ_x&,CAnA‡o>†¿ÿZ^ö¿!’vw"ãĸd†?ýaÔ èEοÿ© »éÑ0BH €cÿê¿ëéþ"Ð…ÿÿ·‡ÿõýÏÿ°ëÈÒ_i Ù§ü »¯U ÀÿþÕ/ ×ØD3m-ðÙN‚!£ðaÕ.¿¤/î‚‘ïénµu§¯ÿÿ¿Œ ´8Âd!û_a¥~4Ý~ûëß¶—õ߯ÿ_¥úN@ðÝy¯a‚ñÉB.»p©† J 4­&ýÝ-ý´’ h£ÿÿÿúdàÚ5@a6[˜zö¢ù+*j€Í xaa/«µÿ f Sý_ÿõÂ@ýÛ#Öû_q_•lo`¬L5×cúÛKúûúë¯@—îf9 ƒ•1f«âÌã @Ö…ÖÅC?1Ë€¿µ³÷™ºo®é¶¿‚>‚­|†Ã„$¸dÄ>"" Àf‚)ÙˆÔ“Ð0Xv"™´ªH "Ö…Ç ³ƒÿö¿„…~ñ €0?ˆˆˆ"$04!a±‚X Aa…úBx2AExaHg BÈ2 NAx-ñ Ì Ô, ‚>‚¯¦ÿi§dBuY°l—HD1I HCÇfÃèк¾lª šj˜ˆ¸ A H]´'Ñà8ðBýö 0#˜0ÑÅ@ŠHd†häA¤¡p2¡P‹ð‚mÿm{H„Š!!ª72  2 œ‡ÃñAÈ9X,^¤ jT®(áä3ì(qý½'íÝ_D,‚.š˜.H °GÀðmB#Ñ óõ‹ÿêÿª¤èöm+(ðÁU2AAü¨ è!² y. 4 ‚uý¯È=¤Ú µn}+„""\ä_ÃNÁ0š" !H‘D\@ðÓžH0D}.ãþ·þµþ.ŒeÉèàúA4Ô&Cn?‚0Aðâx@üF †U…ÐÿÓ÷þ¿¤ôÚª ´pV³™{tš¡„`ˆbŒÀØ\;f´l tÁ-¯ÿï¦÷ïIá>·68 ‰ûM5ă_D§Í|ýÿ¿z6¶ë¥Ö©6“|&ÐWTÙ IÍsÍ¢uG„ë*£àx/Ø+:rŸÿÿ].Ÿ]?I÷µuHˆ;«é:Ö/0ЃÁ3Äò ä5ú"!’ÿÿÿÿø«kþ¸ÞÛ«úV“¤Û‰ ˆïVò\¿ÿýúÿ¿òÿÿ_þÈkÞ—ÚOŒ{¼ 0_aòñ2AG_ÿ¤ŸKÿý7_þ‡W¶ýµz¾FžÔ¼DY ^² Iý-õÿÿúýôm_ñJ¿ÿÙ àׇO *&È ö½ÿ¿¥ýªþ¾7¸ÿÿøû% Œ Ì?d ܃DIGeðx'Í oýÿéú[ý¿ÿêË“†lLãøÜ!S!’|4>>•}}-,Ÿ6–Xæ_õ_ÿÿñ!–pÄqü8@Ù Ï4 ø"‡ÿÃk¿ p±Ý8BÿÕ+_ÿýñ ~»à~‡ÿ†Xáu¬!Û ˆ}ÿ ª—úÿg ä,w߆ù莾ÿú]Lü0¿¥¯ù¿¿ÿĆ9ðŸðë‡Â¯÷ú¶è‹ˆsäÈÇÕ'~’zJ%6k!Ç´W0®Ÿ¿Ãÿÿe¤Ô‚‹ ó…A¢Ÿ#š}+ZýS¼äÒp—› 2N¶¿ùy{ÿâý¡Ú è7\_H/é$Ò º/¸¸¦^†ÄA0ÿ_öþ¾7¦öà»ê ¸ÒÚJ§‚ÈúñA(·l†Ä{ÿÿûþÞMÕ¯i%Y9G>+»JgHBA‹Ês0<7.‹ƒB×_ý÷ÿûûÐ[M÷L Ú©  b@ˆA¬C¿ÿÿõð×ÿÖ«8®AÝz!—c·]76͉Zqcÿ_ÿýú Fv½þ„1r‡ „d4@í:ONÕ6Ï¢œduëò(å_·ÿý×»×}á „CÃ{x®ÚMÏbAìXùb?ÿÿÿ_ý_V‚¾þµl68ÃKøÛ[ü¸ÿýÙýi¿ýmðÊrc‚ þÿvÒt½´²#÷ÿX’½&g!ÿÿßböƒüÿÒm-uÓõÿµÒ‡ý¼1ÃGK™ Ÿÿïon·Èdÿéþ®¿ÿÿ†¤€\Bè_ßoêÒ}í(~þõ]-úÿ9‚¬Ò1—ƒ{ÙÝ[^¶Ò]ïÿÒ×Óý¿ñ]þ·tÄTSXf£„&ö "F½Øî\Uÿˆ0UÿÕ5LVÇ×]wú_ky8ÿ×ò@i³ÿµXi¦šé†¶ö×t½/ÿÈ#ÿäßÄÄD‚ˆ\“NÔN”:ƒK®ëÕº}¿¿§×&ÿøˆˆŒE1QL3 r(þÚM¯_ý«z}¯´Ó±Í!ùÜãë¥k¶“í×Nµû6‹é˜I„û%ÀŒD aœùp i}6–´Ÿÿ fÄDD2;#ÉÚ¯¸­ †[…ƒ[]mm/ñeóèÀ(Óé5±ÌñÙtƒ/ÿÄE Èâ‘Æˆ/Û ­§ŠÖ?ñ¦˜Aê¿ JîJ Âc–åІˆ#aÉ ƒWâ"#!, "—®""8u´- ‚×hâXCKŽ\†n=™‚ŒÍ”"­…v‰Ã4Yá ‚£ŽSÓŠ>öTsЈÏvAªŠ¶0„0šfì5^í~ŒÁCGÃCFGËŠ\ ”  5ăX׃{þ°¢*Dp\=…ùÇþmðÂdtÂV@ðéÒò€ÍžÅþá» !mXzü Páö yÊt›ÿõ¯û@¬àDé8?ÿWü‚>Ü/ÿÿŽ”ÿÿ_ÿ¿ÿw¯ÿÛ ïû @ßÿCõ ( ˜ÿþ¾«kÞ¿ø ]þý[ÿzóM„~þ’ ô [$Le tÚÿ„%® [i.#û_á•zþº" TÌböº Ä—¤\ÚWh%`Tƒ@.¤ˆãÿðO†! ð ¹ð^BTw¡™‚ÿa X":·:¨†mwè|ƒS¡<ŒÀ¨AC¹ð^$O¿G¾1~×ÿþ ?3 8¢=¿þÖ¤}ׄÑ` aŸ†ý¥âÃ× dAœnýÿàÈ·ì³wÐKÈfAÊ ×|Än1áÿœ^ ÿïîŸ@ŠÖïýFÙ#ÿ×CïyÃ÷ßè!Úÿwúúd4‡ðaþ¬?«\ƒ[ûä3{ïýplƒßà½zºõ×íðÐáÿ!•Ÿÿû ðzÿÿÑ8ÉÛö²ë¾›Ap]þºÊ³÷½úÿ¶CòÇKƒ0ÿß§'ÉvX`È1Ð÷ÙXk„¸øA¿á÷û`„„ÏøÁêÚÿ"€½}fÛ™Ä| ËßÿÕ¹ åÔ2y°<`þÇ Ä ]‚‚·‰&Aºwªß÷Áˆ‰µh`Î?)>•ŸÔN˜ÿTöÈ0L㈉¡é‚)Á§ØLÑ–‡ƒ ãÿÓÄ18hDGšÐœ_‘§ÿðtf/!—eÀˆˆÌÁãÁÿØAML~õM†‚r0¨>Ÿ_õþHH~ÿü‚óo݆×~g$þã|˜eÈ ¾"9NC†@‡;ãø0}\L^ÿFÀ¼"pÐ\ —`„€Ð\@QX†š ðh0\ Oÿ«÷ß¹ÃC•všw ?×D`˜ Èš5 Ør ××þÿÂEò:j4Ô¡Ž@ðÖŠÿõÿ|Y8‰ä=`sÙ ã.?Úïÿÿßÿÿßýÿþ«ÿÿþ¿ÿœþ“í-fÓ Äáÿ×þƒÓx?ÿßÿÿ÷ÿÿúÿÿ_ü}ÿé7¤BXPE‡ 3õöÿªûï‡ïÿ_ÿÿ~¿ÿÿþÿÿÿýn“é„S†@…×þÿ ÿÈ_ __zÿÿþþ¿ÿ¯ÿÿÿÌ/ûd麛A¦#ÿ~úѰ&¯{ñ:ƒo—^¿ÿúÿÿûÿÿÿÿ¯¤ÿ½ûZ"FÈéúùOÿÿïÿÿ­ÿÿÁÿßµûÿÿ¯õÿÇúûZ¤Û8Œ•l:þ×ÿ¹‡ÿîÿÿÿ¬¯ÿ_ÿÿõÿÿÿþˆ¾íïé?ÿ[4è ü_ÿÿÿÿ^ýÿÿÿ½ÿþ¾º¥ì†á¨7¨ KÿþÓÿÿÿÿÿÿ¯ßþ÷ÿÛÿ×úþaiñd}0ì V¸Gš ÿïÿëÿÿÿÿ¿_ëÿÿûõýwÿý~ÔGKÊÁpAÿúwÿÿÝÿúÿÿþÖ¿ý~ÿÿýk{#†Áß„_ÿý/úÿ^¿ÿÿÿÿ¿ÿÿÿ×ÿëþ-Ù‰(Aÿ®ÿÿÿó;ÿý/úúÿ¯ÿÿþ¿ÿ¥þ@ÌR º ÿúò`o‹ÿ}éöþßÿ¯_õúÿ¿ú×ëúÄø “i}Wêëý{_îª/ÿõÿúþ¿ÿÿý/úúúødtjÃ/ëÿÿßëÅÿý}}ÿÿÿûÿKõ‰zß­ÓÖ èæ·ÿÿ÷ýuÿ_ÿÿúÿÿÿ×úJºñæÀ𴽆ºðð£†ÒëKþ¿ýêÿÿÿÿÿÿÿõÈlB_漿I‡[ Wa„0DtAwþ¿ëÿÿ¯ÿÿÿÿ¸O{ÿ_í¨دcˆý[Ca„º_þÿÿ½ÿÿÿ¯_ þ´×Uü^¡…í5µÞA¬s9Oö¿ÿõÿ_ÿ÷ý}ÿÿÿÿù »ªôù ¡šGÖýa‚Ù ({Bî¯ÿÿ_~ÿ›¿þµÿúúëßõû¯¬ø¶¦¼àÃb iPÏ‹5hPÈfù‡;•aGlû¿ÿþ¿×ÿïÿÿ»ë_þÚÿM5 Ä„˜¨pb Áˆˆ„Åÿÿÿÿÿ‡ûÿ÷_¯ÿÿmšðƒ‹#“èƒnµ/¿ûö¿÷ÿÿÿþ÷ÿÿõÑ!ñ± ^¼DD28Í‚Ømú_ÿ×_õýõÿÿïûÿÿûü˜-8â?ÿ×ÿÚþ¿¿ÿõÿÿÿûýÏT3ÿÿ¿ÿÿÿÿÿÿÿÿàÿW]ÿÿÿÿ÷ÿÿÿÿ×÷­¶¾AŒÿ ¦8õ½þ­+úéúëÿ¿µÿ¿½õÕ~¡ Mr´ Û2YÇ ÄÈ7Ãÿ×ÿïn¿ïÿÿÿÿÿü-ü˜j…"- B|0!/‚ ¸ÿÿÿÿÿ½ÿÿ÷ÿókûuGõôÂd5ÇGR ojM4Âd2@ÄÊ dqaËqÿ¿ÿïúÿûÿÿÿýz kß¿„,ãiNCLçœØvBŽHHFÙ—ïL†HhÐ(42 ‚YX]×™CÚ²ãþÿßÿÿÿÿÿ_ÿß§ý´½T!¸#hÂèkÐÜØ‹„jŽ×j±Ax!C‚:: FY¬Ð'9Ã9p[ëÿÿëþ»ú¿ÿúÿÿþÅûsìÏ ÁD2?(}¾¿„ía s`Ø­³,*£i¦!µiØM áJpÉo¿ÿëïß¾¿ÿÿ_÷ÿþÖÚ[tN5Ãd5&¸þ­«jêý7ÂAÈj8‰N`2ÜØ¬ DHFÅÎEçAh&Ÿÿßÿõÿÿû¯õÿÿÿþ×(×¥Ð#âÞ©‡äéºëAzoÓtÈá§µ] ûÐzæÀã6À£bæÃ¯×_ÿé_ÿúÿÿ½ÿõ†ºXì}­ë‡n@ðAÌ?nºM­« ](kî•6•¤ô P¥tôHÿÿÿ_ÿÿÿÿÿþ>ú¯§_opBtPmÿÿÿkû^œ†;uöÖêÿí&ÐOÿÓþ¿ÛÿÿÿëëÿÿâÖÍ-¥Ô¤Úö¿ú1Çþël>Aª+¦éµðúA÷_ÿÿÿÿÿÿúßÿÿ÷þȉ2˜«K¿·8èØßÿÿÿÿikÿx?ë}ýÿÿÿ_ýÿÿÿÿ÷o£¨dU¦Oý—×Å‚Ñ3uÿÿýQ¥ßÿö¿ô¯ÿÿÿÿõÿÿ×ÿÿýÒø1g0£zëàÁÿÿþ¿È;ëÿõãÿÿõÿûÿÿÿÿ_ÿÿÿïöA‡iúô¬„r ÿý/ÖÿüÚÿïÿ×ÿ×ûÿÿ÷ÿþ¿_úþ`-2L†@çÿC=ÿÿÿÿûÿ÷ãÿÿþÿúÿÿ_ýkÿÿ×ׯ­a ÈhqaßáAÕ¾“ßýt«úÒÿt¾«ú¯ÿÿÿúÿ×ÿÿÿýÿÿûL†( ‚#¯ýÔ¯ÿÿ룇^ýt¯ûÿ¾ëïþßÿÿÿ¿ÿÿúÿþ½Õ„È:"!œ}j›‚Ý/ÿßKK1î²çþ[éUÿÿõÿÿöÿÿÿÿ_ÿÿÿ÷¤ØFÓ Îñ µÿm}z‹ml ëð‰ÃG6È£œíÒÿÿÿÿ_ÿëÿ_¯ïÿÿ]­è„ˆd†ÿà­¥_Þ¿ä=æÄ¢ÿˆñçG˜þÝyn\ÿ_ÿÿÿÿÿúúÿÿù´µ´pZd @Ð (__éðà¿éµúÖp%¹á÷¥\4¢ø‡ÓoV¿ÿÿþ¿ÿïÿÿÿÿÿ¿uoá6ˆða2 Ô ×úßÿÇõÕ7(XNF#ùàž¾xz“›ïçÑt’‹ÿýÿÿÿÿßïýÿ¯ÿëIÒud|ÕÀÐ2·ÿ_6/ÿdZä Å<ØG·ÿMëô)á$W'ÜàOhGÏ ÿ×ÿÿÿ¯ýß×ÿúÿºm]D_Oµ×ëë×·{ûº¸ONÎ_ÚoA&IBP öײ?ÿëÿÿÿûÿëýoÿÿúýíSïÿþÿñýUÇVüA˜ ñð“MwMNüؾÿýÿÿÿÿÿÿÿïëþµÿõa-fÄ×Ìkÿßþ¿BïôÇÿKü$-Ž7ô°ßÿÿ×ÿÿÿú×úÿoúÿêÚ¤ä ïéÿ×½zÿ»ÿÿô¾­ZI°d}ÿþÿõÿÿ}ÿþÿÿÿÿÿõé7ëý¾ÿÿûÿ×þ’þ‚÷õqlÿÿú_ÿïÿýÿ¯÷ÿô¿ÿú«ÿ^·÷þiÿïýýûA/þ°ßþ«ý_ÿÿÿÿÿ÷ÿÿ]¯ÿ¯hÂøoøÿ×ÿ¿ñazýßü/úõþÿþúþýÿÿÿþÿ×ëÿ¯š4¿_¾®×zSÿÿÿÿþ×ÿõ‚µÿþÿ÷ÿ¿ïÿÿÿÿ»zïÖ¿Ðÿû¥ëH~½iXÿúýÿþ¯ú ßÿÿ÷ÿþ¿ÿÿÿÿ_ÿ¿]CGý[ÿÛ …¯ÿÛõý_ú¯¯ô¿_×þ¾þ¿ÿÿÿúÿÿÿ_ÿ¶ÿõZý/—B=n¾ÿ½Ôœ}dG×ÿ×ëü ¿ÿÿÿÿÿÿÿÿþ¿ÿÿæþÿúøÂ(}êÿût¯½µ¯»¿ÿÕ_ûýÿÿÿÿÿÿÿ÷õõú­Ý.«Èd†x !ßþ¾®/t»Èdÿ·ä<~þëÿýïÿÿÿÿÿÿ¾ýýý·Ö¾ƒ)2–˜aÿÿ¿{¤Úý^é=ú^«Ø?Gÿÿÿýõÿÿÿëÿÿÿßým}%üƒåvºþý¯M×]«u«iZïûi7¤ŸÚõäã&?ÿÿÿÿÿÿ_ÿýÿÿÿÿó5úôˆHE>·³4™šYc…uÛIë¯ë×K_¦ÿÛïôÿÿÿÿ^¾ûÿ××®´¿ý¿×cÿAB‹ì‡ãçÈûÿþØ„ÅDSÁ‚¦¡µm&õm/ºt½-ºÒtºmÿOÿ¿þÿë×ÿÿ÷ÿÿÿõ\¥‰ûña®ÿûNì-ŠlÐ C;¬5µïï[¥mw[[ÛK¯¿ýÿëÿÿÿï~ÿ»ÿÿ_dè,!ä ŽÜ¸ûLêH7ÖÓ´ì'­¨ˆ¨¦%±\3ÌîÙ~Ã=¬;®ééÒ½µúõëÿÿÿÿú¯õ¯õÿÿÿµýCˆl†¼ÈqÙ àÄàk‘Á¥¯ˆˆ‰îaƈ9Ç0í4áˆ_Ä[ÈÁ מÈúµl-¯Áÿ¯ÿþ¾»ÿÿýÿÿûUÿëë[pƒ@Ê㸈ÚÔ#è¸{xˆˆ‹#„ShºM4íxaU±[LEGÅÿ¯ÿÿÿë}ÿý{_þÿõúäßäÑŒÂqAì†@=¡¶Žñçó4œ4Ó[´Óµñÿÿÿÿÿ¯ÿý÷¯§þÞÿÿèmþ¶†ðƒ0ä|‡ˆˆˆˆ‡!²l¼4ÓMÿÿõÿßÿ¿t¿ýÿÿûÿÁ¿÷¤ó##0È (7¶ˆˆˆÿïÿ¯ýWÿÿýÿ_¥W_V½l=zňóGP¦ ÍF‚ ëÿïÿÿÿúÿëÿ¯öû­wë]&øB0‰ l ]}ûßÿÿÿûþÿÿýý«¤ù7û ÄýÿõtpZž/Ð&þÿëÿõÿö¿ÿúý{ÿûúV·õ6[¶½ô†ƒÍ„@ƒ!Å a˜Gÿÿý?ÿ_ÿúÿýÿÿ÷ߥþþj5ê«wKÄ&‰Ã Dÿ×ÿýÿÿú÷ÿþ¿ý{ö“׿ýôµë{èÀ” ‡!‘€ 'ô×ÿÿÿÿÿëÿõýøU†;VöÕ{± kÿW[ ƒAÅÈÉ¿ª¿ÿýÿ÷õÿÿÿïåÿˆÓLV‚Òr$y!ÊÂs8\¾ÝÇﮄ¼ Äu~¿õî¿ÿÿß÷þý|o×Âxk~ºˆt"¬'¦»ê‚ty°Ž 4 ßÿýÿÿõÿÿ×ÿÿÿÆ¥ë~8ƒÿ[[HGïÿÿéïûýëÿõõò€ÑÌpj¾Óhâ7ç‘oký_ºxD,Û_ÿþÿÿúÿÿÿ¯ÿüZb¶Ò¡ пÿ÷êè-H!ûÿÿýÿÿþ¿õû4ˆkºátäQÈã¹ ÿö®FÀŸÿ×ÿÿÿÿÿÿ§äéÿþ Âæg}ý  üÖKÿ×ì!óÿïëÿÿÿÿÿ¿ïb¿ßÇb“VêØ=µK×ñþ`:“† @fwÿûÿÿÿÿÿõþ¿¿ÿÿ°ÈùtoéQ j•ÿâ  d0?Ûÿ~¿ÿ÷ÿÿïïÿþº‹_øˆÐz¯ú­È6^@ÄŽ˜D€Èd³qÚÞ·ßÿþ¿ÿýwýÿÿÈ/ëá×'Î ÿ÷ûFÆÂ•b"$²œƒŽÖ×ÿÿÿÿÿïö»ÿã_¿°±I ýô¸@ó88xˆˆˆf ])=Wÿßÿÿ¯×õÿÿøät§Äø28u¯þ—0®""""ÏÞ¿ÿÿë___ÿ¿ÿ “_ØK3”9Oþ‚ «h'›±!š8†GFŽ5_ÿ÷ÿÿÿd `ÖÿëúIS}Yž­‡¯÷Ú·Ž"""t\Âf¯ÿÿÿÿÿ­áT~¾/õõþ± ]Î8`ˆ`vG¬Ñ/¯u¿ïúÿÿÄ ‡ÿŸÃÿ÷ÿÄDDDD†;²ô4ô濯µ¿Kþ’ÒæÚáÿKŽ>@ä ÇG‹õÿ¶—oªé~ÚWÿ¯ãˆˆˆv·ßV×ÿ!"¿Iºvÿÿñ†CÙàºnŸÒé÷µ$þ_ÿøˆ±ii7D‡Ò aÿï¹"£0¤pÆÂþÔÒÚ꟥ÿû|]D?_È ìB†QîŸH%úõ¾C‡Î ñv=~½ñqé¿KñiöÒI-×ÿ÷ZÕM€µ Z­ÿã~’V‰ÀÊ ‘fš†–¤ ÿ_ÿÒQ{cuÿÿÿ„ˆg~@h+;Úw·_ëþ’<'²´»K¯ÿëK¦ñŽhŽ0–¯ý¤C+(?9¸“ŠÕµÿÿÂ`íä ¡–>,(³Ä4­@Úü‹äMHåABg‚ãqÈ7r‡Æ8ÿô;M:%AÀ ðrèæ\6À(.Àh#Šl5K,¤€®ÎíA–ë·õöºx! AGQO&DðL„âB …raÈ0äQȾ"b+ÿÿÿïâû¼GÁÄà‡žrˆÄ&„CÈlr1kÿýÿø"ŸûÿþøíV,)8„Ѓ¹;”(sŽB@Ë . ö«ëÿÿãõ_ÿëõêDôíÓŒ„ЈçŒzÿÿÿþÿ¿ûÿôüwë÷íÿúõ”?ÿÿëÿ¯õúÿÿëÿ¡ÿ_ÿ÷ÖPÿûý¿×ÿÿ÷ÿÿÿ^ÿþÿÿÿ~¿þþÿþ¿Pýü~âþ¿_ÿßÿ~—ÿÿ__õÿ¿ßþ@¨~BGÿÿ¯ÿõïÿÿÿÿüÂ_ú ÿúÿÒöÿ¿þ?õ_ÿ_ÿÿR%ÿÿýÿ~¿ÿÿÿL}ÿñd×ÿ÷ÿÿÿûøÿûÿ×úåÖx).@Ù÷ÿý{¯ïëÿÿÿÿ_ÿþÂp*¯í_ÿëÿç—¯ÿÿÿþ?"úÿïÿÿ_ü_ß^¿ÿõÿýdÿÿ_×ÿÿ«ÿß¿ÿÿÿëá2ÿÿÿý?¿ÿÿÿÿÿßÿÿ d<ÿÿßûÿ{¯×ÿôý¿ÿúᤠÿÿÿÿÿõÿïÿÿÿÿÿ×òÿÿþÿÿë÷ÿÿÿÿÿëßÿÿÿÿþÿÿ÷ÿ¯ÿýÿo^™#ýÿÿÿúÝÿÿÿÿëúú­=|ãaÊõ¿õý®Ÿëßý÷ÿÒÿ¯ã‹!cÿÿÿýÿ{ÿÿ¿ÿÿûÿÿýmràw+ÿþ¿ÿÿÿÚÿÿ¾¿õ¯^¿ÿ „å×ÿÿÿÿÿýÿÿþµÿÛ_ÿÿÈlƒÇÿ¯î¿ÿý~ÿõéÿßÿÿÿÿø! ÿ÷ýÿÿû_ÿÿÿÿõõý¾Èx!úÿÿÿÿOZÿÿ¯ÿïÿþ½ÿýHHOÿÿÿÿÿûý~ÿÿÿÿ­ÿéT"ëã÷ï~×·ÿÿ¾×ïõÿþ¿ÿÿëÿßCCýÿÿ¯ÿÿÿ×ÿÿÿÿ×ÿúëWǨ@Ërÿ¯¿ýÿþ¿ÿÿÿ÷ÿÿëÚ_Öµ] „ÿ¯ÿúÕÿÿÿëÿ¿ÿÿÿÿÝkÿUÞCD~¿ÿûÿÿþ¿_ÿÿûÿÿÿïýùõÿþ÷§ÿÿ~ïÿ_þÿÿÿUþ¿ÿ Tßÿÿ×ÿÿÿÿÿÿýÿÿ×ÿÿúûÿßõþ¸×[ÿÿÿµÿú×ýV½ëÒýÕRHƒ¿¯õÿÿÿú¿ýÓþŸÿÿÿ×ÿÿÿ¿”ä åA­ÿÿÿûý¯ýÿ÷ÿßÿÿëÿÿÿÿþ4"È\ÿÿÿ÷þÿö¿ÿëÿ__õÿÿÿþÿG@9Ÿÿ×ûÿõúýÿßïÿÿÓÿÿÿø"Ÿõü†{ÿÿ]ÿÿõýúý~¿ÿýÖ¿ÿÿUÿ¾ôÈKÿÿÿÿ×õÿõ¯ÿÿÿßÿÿýãúÿÓ!¡Î9Ÿÿ÷}ÿÿþÿÿ×ÿÿéÿúïÿÿ×ÿ¯Zâ"ñ¿ÿßÿÿëzýÿÿÿþµïþ¿×¿ô¿ëy×ÿÿÿþ½÷­Óëÿÿ¿ïÿªÿ®¿ÿÿÿÐdH)ÿÿÿýÿÿß_ÿÿþ¿õÿ¯ÿÿÿûþ,ƒÿÿÿÿ¿ÿÿïýÿÿÿÿÿÿþ¿ÿ×ÿà ÷ÿÿûÿý}ÿßýÿÿÿ¯ÿ¯_ÿëÿa˜ÿÿÿÿÿÿßÿÿ¯ÿ¿ÿ_þíWÿÿõàŠ}È1_ÿÿÿþ¿ÿÿÿÿµÿúÿÿ×ëÿ´¿ëÁÿ÷ëÿÿÿú_ÿÿÿú_××ÿïÿÿÿýöAïÿýÿÿÿ¯ÿþ¿ÿÿ­®«ÓÒ¯Uý/ÿ\‰Äíëÿ_ÿýûÿÿÛýõ×ÿÿ¿×¥ÿÿÿÿ_õ"#ÿÿÿÿÿ¿¿ÿÿÿÿÿÿ_ÿÿÿÿÿë_àÈAÿúÿÿÿÿÿÿÿýwÿÿ¯ÿýïþ½¥ÿùà‡€” ¿ÿÿýÿ÷ÿïÿ‚8ÿ÷ÿÿÿõõýúÿÿ¯ÞA‡ÿÿÿ¿ÿÿÿÿõûÿÿÿÿÿÿÿõÿÿýùÐ @Gÿõþ•ÿÿÿ×ßÿÿÿÿ_ÿÿÿëý}ÿK² kÿÿÿ÷¯ÿÿýëýÿëÿ×þ¿¯ý}ÿ^¿Ù ÿÿþÿÿþºÿÿ÷ûÿ­Vµ^µÿõëÿÿ^—­ëè ƒ•ÿïÿõmýnÿ^×õÿÿ<·ÿëÿ¿¥ÿÿÿúä_ÿõÿêÿýÿÿÿÿÿÿZÿ_ÿ_ÿûý~¿¦¿ü…ïÿ×ÿëÿÿÿÿÿïÿÿÿ¯ÿëÿû×ÿúý×ëîÿÿuß‘ï_ÿÿÿ¥ÿõëÿÿýkþ¾ºKÿ×ÿ¯ýýÿÿïÿÿÿ?ÿÿÿÿÿÿÿÿ¯úÿúõÿõÿZ]ÿÿì/zÿÿÿÿÿÿÿÿÿÿÿ½_ÿþƒÿÿßÿÿÿãýÿ_øÿÿÿê¿úþ¿ÿÿ½}ÿÿÿÒýÿ×ÿ×ÿÿ_ÿûÿïÿ rÁõ_Õk_ÕkëÖ«Öµÿÿÿ÷¯¯oÿuÿ×_ÿý/ü¯ÿÿÿÿtÿÿ¯§ÿÿÿÿÿÿ÷ÿýÿÿûÿÿÿþ¿ÿ¯úÿÿé¿ÿÿÿÿÿÿ_ÿÿþßÿÿ×õëúÿ×ÿþ¿ÿýÿÿÿÿÿþÿÿªÿÿ¿ÿÿõÿõÿý[ÿôÒúÿÿÿÿÿÿÿÿþÿúÿׯëßÿþÿ­j¿ÿÿÿÿþÿÿÿÿþ¿ÿÿÿúþ¿ú×ÿþ¿þÿýÿ_ÿÿÿ¿ÿÿÿþ¾«÷ÿÿÿïÿÖ¿õýÿ_ÿÿÿú¿þÿÿÿÿÿïéÿ}ÿõý]÷þ¿~—ý*úõÿë¯õÿÿ_ÿÿõßÿÿÿÿ÷ÿ×þ¿÷ÿÿÿúÿÿß_ÿÿÿþÿÿÿÿëÿýV¿¯ÿëÿß×úÿÿþ¿ÿÿÿþýûÿÿúþ¿¯ÿÿ_Uÿýÿïÿ¿îúÿÿÿÿÿÿýÿÿõ¯ÿÿÿ[ÿõý¯õÿúïëïÿÿþÿõýÿÿ®úÿõ¯ÿëÿëÿÿÿûÿÿ×ÿ¯ÿ¯þÿßÿÿÿ¯þµÿÿZ¯ÿÿÿÿÿÿÿÿß_úÿ”/þ¿ÿÿ^Xÿþ¿ÿ_ÿÿÿýoëÿT¿ß}ëÿÿþðE?ÿÿ­}eâ—¯¿ÿú¥¯ô¾µ~¿óõ¿ý.Ÿÿ¿ÿþ*?ÿé×_ú¿ÿÿÿýÿÿÿßÿÿûÿõ÷ÿÿÿ¿ÿÓÿ_ýÿëë×_ÿÿýiÿ_ÿëÿÿýÿÿëÿùu×ÿÿÿÿÿ×þµÿÿ_þ?ßß÷ÿÿÿÿÿ×ÿüZúÿ÷]kúÿ§ÿÿÒÿßÿÿÿÿõ_ZýÿÿÿÿG_÷ÿ_ÿ_×ÿ_ý}kÖ¿ÿÿÿëÿ÷ÿÿÿÿCÿÿëûÿú¯ªÿÿÿÿÿÿÿïÿÿÿÿýÿýÿÿÿÿÿþ¯¯÷ÿÿÿÿÿýÿÿ×ÿýÿë^½/Z¯¯ýWÕkúí¯×õÿ×õÿýýÿÿÿÝÿÿ×ýÿ_ÿÿÿ_ÿÿ×ÿßÿþ¿ÿÿ÷þÿÿÿÿÿÿÿþ¿ý_ÿõ¯ÿÿëÿÿ_þõýÿÿ¿ÿëûúõÿ¯ÿÿÿKÿúÿÿÿÿÿÿ÷ÿúÿÿÿÿþ¿ýÿ×ú߯ÿ×ÿÿÿÿÿÿÿúÿßÿýú¯ýï^¿ÿÿÿ½}ÿõïÿ¿ÿÿÿÿÿÿëëýzÿ¯ýÿÿ¯ÿýúõÿÿïÿ¿ÿÿúÿ¯ÿÿÿÿÿÖµ¯ÿÿÿõÿÿëÿÿþ½ÿÿ_ÿÿÿÿÿýýkßô¿J¿íz®¯Òõÿý/ÿÿÿïÿ¿^ÿÿÿëÿÿÿÿÿþ¿þµÿÿýÿÿ_ÿÿ÷­oÿÿÿÿÿKëÿÿÿÖ¿÷_ÿýÿÿï¯ÿÿÿýþÿÿýïÿýuÿ_ýëÿÿÿî¿ÿë_ïÿýÕÿÿÿ_Ö½ÿ¯_ÿÿþÿÿ×ÿÿýý¯þÿõÿÿ_ÿ¯ûÿÿþ¿õÿªÿÿÿÿÿÿÿÿßÿëÿÿþ¿ÿÿÿþ¿õÿÿÿÿÿÿÿÿÿÿýÿõZÿÿÿþ¿ÿ÷ÿýÿÿÿÿÿÿÿÿÿëÿëÿÿõÿ¯__õõ¯t½R×ÿõÿÿþþÿúÿ_~ÿÿÿëÿÿ×ÿõÿÿ¯ÿ÷Ú­ë~¾µÿïþþ÷÷ÿ¯×ÿÝk×úÿÿ«ÿ_ÿÿûüA‚ ÜpÈòwwwÿ¯ÿ_ï×ÿÿÿÿÿýýkÿÿÿ×ú×Q &šj©¯¯¯ÿÿÿÿÿÿÿþ¿úëúÿׯOЈˆˆˆ³t\ &GIڧ߯ÿÿÿ¯ÿï×ÿÿÂ#¯ÿÿÿþ"""""ÈñÀ<6\'Úÿ¯ÿÿÿÿÿô>¾¿ÿÿÄDDY2Ë‚ *ÿïÿÿ_ÿÿúÿÒÿÿK2CKúÖ«ê•uÿ^•kúÿ¥ëÿã×ÿúúÿÿÿ¿ÿÿÿëÿïÓÿÝzÿÿÿÿÿÿý×_þûÿþ«ÿ.–¿ÿõ_ÿJ¾«_ú×ÿÿ¯ï×ÿÿ×áßÿýÿ¯ÿÿýWÿõÿ/ÿÖ¿ÿÿþ£ÿÿ×ÿ×duÿÿ×ýÿÿ÷ÿÿÿÄuÿÿõ_úÕZê½k×úÈA¥ßÿ÷¯ÿÿ¯_ÿÿúÿ/ÿÿõ¯ÿë×Ö¿¯üCOÿ¯ÿúõúß÷ÿëâúÿÿû_õÿõõÿÿãþ¿ý~ÿ¯_ÿ÷ÿþ/ÿÿëÿ¿ÿÿZÿ×-ñÿÿ÷ÿëûÿõú­øc ¿ÿÿõÿÿô¿×~¼Gëÿëÿ_ÿÿö¿üf=ëúúÿ×ÿÿ¿ÿí5ÿÿÿÿëý~¿þ"APÿ[ûÿþµ÷~—õøˆ¿ÿÿÿÿÿÿ¿ïÿÿÿÿÿïëþ@Êfÿÿûÿúÿý ‘ëëþ—ׯúÿþ!ÿúúþ¿ÿ¯ñ¯ÿÿKÿ_õÿÅ­ÿýo}ýp¯ÿÿÿ¯¯üX_ÿÿÿÿÿø¿ÿÿõÕúø¿ÿÿ]/ÿýd§ê¾¿ÿ¯¯õâAßÿõûÿÿüZþ¿ÿþ¿üC_ÿÿ¯ÿø3½}¯uý/Ä|þŸ×õÿ½ëýÿñduõÿÿûüE¥ÿô¿\ÿÿë÷ÿþ¿ÿ & .ÿÿõ_â:ÿþŸø4×ÿßõˆe×ÿúÿÿÿÿÿÿñïÿü€¨f»ÿýâÿëÇ×ÿÿƽkf‹ÿˆ¿~5^?¿‹XÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ@´´þ´¼(HHleptonica-1.70/prog/partitiontest.c0000640000175000017500000001356112270122643015532 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * partitiontest.c * * partitiontest type [maxboxes ovlap] * * where type is: * 5: L_SORT_BY_WIDTH * 6: L_SORT_BY_HEIGHT * 7: L_SORT_BY_MIN_DIMENSION * 8: L_SORT_BY_MAX_DIMENSION * 9: L_SORT_BY_PERIMETER * 10: L_SORT_BY_AREA */ #include "allheaders.h" #define REDUCTION 1 int main(int argc, char **argv) { char *filename; l_int32 w, h, type, maxboxes; l_float32 ovlap; BOX *box; BOXA *boxa, *boxat, *boxad; PIX *pix, *pixt, *pixs, *pixd; static char mainName[] = "partitiontest"; if (argc != 3 && argc != 5) return ERROR_INT("syntax: partitiontest type [maxboxes ovlap]", mainName, 1); filename = argv[1]; type = atoi(argv[2]); if (type == L_SORT_BY_WIDTH) fprintf(stderr, "Sorting by width:\n"); else if (type == L_SORT_BY_HEIGHT) fprintf(stderr, "Sorting by height:\n"); else if (type == L_SORT_BY_MAX_DIMENSION) fprintf(stderr, "Sorting by maximum dimension:\n"); else if (type == L_SORT_BY_MIN_DIMENSION) fprintf(stderr, "Sorting by minimum dimension:\n"); else if (type == L_SORT_BY_PERIMETER) fprintf(stderr, "Sorting by perimeter:\n"); else if (type == L_SORT_BY_AREA) fprintf(stderr, "Sorting by area:\n"); else { fprintf(stderr, "Use one of the following for 'type':\n" " 5: L_SORT_BY_WIDTH\n" " 6: L_SORT_BY_HEIGHT\n" " 7: L_SORT_BY_MIN_DIMENSION\n" " 8: L_SORT_BY_MAX_DIMENSION\n" " 9: L_SORT_BY_PERIMETER\n" " 10: L_SORT_BY_AREA\n"); return ERROR_INT("invalid type: see source", mainName, 1); } if (argc == 5) { maxboxes = atoi(argv[3]); ovlap = atof(argv[4]); } else { maxboxes = 100; ovlap = 0.2; } pix = pixRead(filename); pixs = pixConvertTo1(pix, 128); pixDilateBrick(pixs, pixs, 5, 5); boxa = pixConnComp(pixs, NULL, 4); pixGetDimensions(pixs, &w, &h, NULL); box = boxCreate(0, 0, w, h); startTimer(); boxaPermuteRandom(boxa, boxa); boxat = boxaSelectBySize(boxa, 500, 500, L_SELECT_IF_BOTH, L_SELECT_IF_LT, NULL); boxad = boxaGetWhiteblocks(boxat, box, type, maxboxes, ovlap, 200, 0.15, 20000); fprintf(stderr, "Time: %7.3f sec\n", stopTimer()); boxaWriteStream(stderr, boxad); pixDisplayWrite(NULL, -1); pixDisplayWrite(pixs, REDUCTION); /* Display box outlines in a single color in a cmapped image */ pixd = pixDrawBoxa(pixs, boxad, 7, 0xe0708000); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixd); /* Display box outlines in a single color in an RGB image */ pixt = pixConvertTo8(pixs, FALSE); pixd = pixDrawBoxa(pixt, boxad, 7, 0x40a0c000); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixt); pixDestroy(&pixd); /* Display box outlines with random colors in a cmapped image */ pixd = pixDrawBoxaRandom(pixs, boxad, 7); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixd); /* Display box outlines with random colors in an RGB image */ pixt = pixConvertTo8(pixs, FALSE); pixd = pixDrawBoxaRandom(pixt, boxad, 7); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixt); pixDestroy(&pixd); /* Display boxes in the same color in a cmapped image */ pixd = pixPaintBoxa(pixs, boxad, 0x60e0a000); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixd); /* Display boxes in the same color in an RGB image */ pixt = pixConvertTo8(pixs, FALSE); pixd = pixPaintBoxa(pixt, boxad, 0xc030a000); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixt); pixDestroy(&pixd); /* Display boxes in random colors in a cmapped image */ pixd = pixPaintBoxaRandom(pixs, boxad); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixd); /* Display boxes in random colors in an RGB image */ pixt = pixConvertTo8(pixs, FALSE); pixd = pixPaintBoxaRandom(pixt, boxad); pixDisplayWrite(pixd, REDUCTION); pixDestroy(&pixt); pixDestroy(&pixd); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pix); pixDestroy(&pixs); boxDestroy(&box); boxaDestroy(&boxa); boxaDestroy(&boxat); boxaDestroy(&boxad); return 0; } leptonica-1.70/prog/writemtiff.c0000640000175000017500000000373212242265516015006 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * writemtiff.c * * Writes all matched files into a multipage tiff */ #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *pattern, *fileout; static char mainName[] = "writemtiff"; if (argc != 4) return ERROR_INT(" Syntax: writemtiff dirin pattern fileout", mainName, 1); dirin = argv[1]; pattern = argv[2]; fileout = argv[3]; writeMultipageTiff(dirin, pattern, fileout); return 0; } leptonica-1.70/prog/pdf2tiff0000750000175000017500000000175510257405614014115 0ustar dandan#!/bin/bash # pdf2tiff # # Rasterizes a PDF file, saving as a set of g4 compressed tiff images # # input: PDF file # root name of output files # output: ccitt-g4 compressed tiff binary files for each page scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outtifroot" exit -1 fi inpdffile=$1 outtifroot=$2 # assert (input pdf filename ends in .pdf) if test ${inpdffile##*.} != pdf then echo $scriptname ": " $inpdffile "does not end in .pdf" exit -1 fi # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -r300x300 -q - ${inpdffile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -g2550x3300 -r300x300 -q - ${inpdffile} # use this to output to a single multipage tiff file #tiffcp -c g4 ${outtifroot}*.tif ${outtifroot}.tif leptonica-1.70/prog/iotest.c0000644000175000017500000002134312242266314014134 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * iotest.c * * Tests several I/O operations, including the special operations * for handling 16 bpp png input, zlib compression quality in png, * chroma sampling options in jpeg, and read/write of alpha with png. * * This does not testt multipage/custom tiff and PostScript, which * are separately tested in mtifftest and psiotest, respectively. */ #include "string.h" #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" LEPT_DLL extern const char *ImageFileFormatExtensions[]; int main(int argc, char **argv) { char *text; l_int32 w, h, d, level, wpl, count, format, xres, yres; l_int32 bps, spp, res, iscmap; size_t size; FILE *fp; PIX *pixs, *pixg, *pix1, *pix2, *pix3, *pix4; PIXA *pixa; PIXCMAP *cmap; static char mainName[] = "iotest"; if (argc != 1) return ERROR_INT(" Syntax: iotest", mainName, 1); /* Test 16 to 8 stripping */ pixs = pixRead("test16.tif"); pixWrite("/tmp/test16.png", pixs, IFF_PNG); pix1 = pixRead("/tmp/test16.png"); if ((d = pixGetDepth(pix1)) != 8) fprintf(stderr, "Error: d = %d; should be 8", d); pixDestroy(&pix1); l_pngSetReadStrip16To8(0); pix1 = pixRead("/tmp/test16.png"); if ((d = pixGetDepth(pix1)) != 16) fprintf(stderr, "Error: d = %d; should be 16", d); pixDestroy(&pix1); pixDestroy(&pixs); /* Test zlib compression in png */ pixs = pixRead("feyn.tif"); for (level = 0; level < 10; level++) { pixSetZlibCompression(pixs, level); pixWrite("/tmp/zlibtest.png", pixs, IFF_PNG); size = nbytesInFile("/tmp/zlibtest.png"); fprintf(stderr, "zlib level = %d, file size = %ld\n", level, (unsigned long)size); } pixDestroy(&pixs); /* Test chroma sampling options in jpeg */ pixs = pixRead("marge.jpg"); pixWrite("/tmp/chromatest.jpg", pixs, IFF_JFIF_JPEG); size = nbytesInFile("/tmp/chromatest.jpg"); fprintf(stderr, "chroma default: file size = %ld\n", (unsigned long)size); pixSetChromaSampling(pixs, 0); pixWrite("/tmp/chromatest.jpg", pixs, IFF_JFIF_JPEG); size = nbytesInFile("/tmp/chromatest.jpg"); fprintf(stderr, "no ch. sampling: file size = %ld\n", (unsigned long)size); pixSetChromaSampling(pixs, 1); pixWrite("/tmp/chromatest.jpg", pixs, IFF_JFIF_JPEG); size = nbytesInFile("/tmp/chromatest.jpg"); fprintf(stderr, "chroma sampling: file size = %ld\n", (unsigned long)size); pixDestroy(&pixs); /* Test read/write of alpha with png */ pixs = pixRead("books_logo.png"); pixDisplay(pixs, 0, 100); pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pixDisplay(pixg, 300, 100); pixDestroy(&pixg); pix1 = pixAlphaBlendUniform(pixs, 0xffffff00); /* render rgb over white */ pixWrite("/tmp/logo1.png", pix1, IFF_PNG); pixDisplay(pix1, 0, 250); pix2 = pixSetAlphaOverWhite(pix1); /* regenerate alpha from white */ pixDisplay(pix2, 0, 400); pixWrite("/tmp/logo2.png", pix2, IFF_PNG); pixg = pixGetRGBComponent(pix2, L_ALPHA_CHANNEL); pixDisplay(pixg, 300, 400); pixDestroy(&pixg); pix3 = pixRead("/tmp/logo2.png"); pix4 = pixAlphaBlendUniform(pix3, 0x00ffff00); /* render rgb over cyan */ pixWrite("/tmp/logo3.png", pix3, IFF_PNG); pixDisplay(pix3, 0, 550); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pixs); /* A little fun with rgb colormaps */ pixs = pixRead("weasel4.11c.png"); pixa = pixaCreate(6); pixaAddPix(pixa, pixs, L_CLONE); pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); fprintf(stderr, "w = %d, h = %d, d = %d, wpl = %d\n", w, h, d, wpl); xres = pixGetXRes(pixs); yres = pixGetXRes(pixs); if (xres != 0 && yres != 0) fprintf(stderr, "xres = %d, yres = %d\n", xres, yres); cmap = pixGetColormap(pixs); /* Write and read back the colormap */ pixcmapWriteStream(stderr, pixGetColormap(pixs)); fp = lept_fopen("/tmp/cmap1", "wb"); pixcmapWriteStream(fp, pixGetColormap(pixs)); lept_fclose(fp); fp = lept_fopen("/tmp/cmap1", "rb"); cmap = pixcmapReadStream(fp); lept_fclose(fp); fp = lept_fopen("/tmp/cmap2", "wb"); pixcmapWriteStream(fp, cmap); lept_fclose(fp); pixcmapDestroy(&cmap); /* Remove and regenerate colormap */ pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixaAddPix(pixa, pix1, L_CLONE); pixWrite("/tmp/weaselrgb.png", pix1, IFF_PNG); pix2 = pixConvertRGBToColormap(pix1, 1); pixaAddPix(pixa, pix2, L_CLONE); pixWrite("/tmp/weaselcmap.png", pix2, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); /* Remove and regnerate gray colormap */ pixs = pixRead("weasel4.5g.png"); pixaAddPix(pixa, pixs, L_CLONE); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixaAddPix(pixa, pix1, L_CLONE); pixWrite("/tmp/weaselgray.png", pix1, IFF_PNG); pix2 = pixConvertGrayToColormap(pix1); pixaAddPix(pixa, pix2, L_CLONE); pixWrite("/tmp/weaselcmap2.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pix3 = pixaDisplayTiled(pixa, 400, 0, 20); pixDisplay(pix3, 0, 750); pixDestroy(&pix3); pixaDestroy(&pixa); /* Other fields in the pix */ format = pixGetInputFormat(pixs); fprintf(stderr, "Input format extension: %s\n", ImageFileFormatExtensions[format]); pixSetText(pixs, "reconstituted 4-bit weasel"); text = pixGetText(pixs); if (text && strlen(text) != 0) fprintf(stderr, "Text: %s\n", text); pixDestroy(&pixs); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ /* Some tiff compression and headers */ readHeaderTiff("feyn-fract.tif", 0, &w, &h, &bps, &spp, &res, &iscmap, &format); fprintf(stderr, "w = %d, h = %d, bps = %d, spp = %d, res = %d, cmap = %d\n", w, h, bps, spp, res, iscmap); fprintf(stderr, "Input format extension: %s\n", ImageFileFormatExtensions[format]); pixs = pixRead("feyn-fract.tif"); pixWrite("/tmp/fract1.tif", pixs, IFF_TIFF); size = nbytesInFile("/tmp/fract1.tif"); fprintf(stderr, "uncompressed: %ld\n", (unsigned long)size); pixWrite("/tmp/fract2.tif", pixs, IFF_TIFF_PACKBITS); size = nbytesInFile("/tmp/fract2.tif"); fprintf(stderr, "packbits: %ld\n", (unsigned long)size); pixWrite("/tmp/fract3.tif", pixs, IFF_TIFF_RLE); size = nbytesInFile("/tmp/fract3.tif"); fprintf(stderr, "rle: %ld\n", (unsigned long)size); pixWrite("/tmp/fract4.tif", pixs, IFF_TIFF_G3); size = nbytesInFile("/tmp/fract4.tif"); fprintf(stderr, "g3: %ld\n", (unsigned long)size); pixWrite("/tmp/fract5.tif", pixs, IFF_TIFF_G4); size = nbytesInFile("/tmp/fract5.tif"); fprintf(stderr, "g4: %ld\n", (unsigned long)size); pixWrite("/tmp/fract6.tif", pixs, IFF_TIFF_LZW); size = nbytesInFile("/tmp/fract6.tif"); fprintf(stderr, "lzw: %ld\n", (unsigned long)size); pixWrite("/tmp/fract7.tif", pixs, IFF_TIFF_ZIP); size = nbytesInFile("/tmp/fract7.tif"); fprintf(stderr, "zip: %ld\n", (unsigned long)size); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/form2.tif0000444000175000017500000001177412251657772014233 0ustar dandanMM*>ÿÿÿÿHgDEr°ˆDJŽ;AQÕΚ ¡gaªÕ°A.Èø¸‘Á€„æ‰(äc˜sA&$ÿ„-5Ž"ãˆüwü_ ƒýþæwÈ0h~¿ÇдLÿÿßúýb}ˆ‰Ö$×iòg”2€ç"ñôF"öG!â<4ÁµÓLÆ„1´ËßBD†Áäqȃˆˆ‹ämGXÇ¡ÿðDH ƒˆ|†‡ÿ ®?9ÙŒþb3°ûêD=x} @в8L/Ù(NÎ8*a3Â3g Ï0Ì;œrÝk÷eBeœ¸ ûŽ""9*ŽGÙÄr4F"„Td&yF–h2œ›•kê]XM4Ó<“8ÌÄ)Ò 4ͤÏ,DDGÃB!äq28âÈᜎÿøŽ#ï0Ð\!ÞA&>Lr1ü‚ÿBñ ðŽИ& IÂd°ÜCŽaÂd1dÇ_£¬DDDDDFU™Ðµ*ϳ^HsBeXGK:b""ÿ‡i„ËÄv9öˆƒÌr ä09 åŽF9rc‘ ˆ9 91È ä2éÇ÷ƱƼwù úþ$3ŽF=ÿë·Ó"Gò ä6ïäH߈ˆˆˆˆˆˆˆˆˆ$Iv§b­G`ˆ‹"1"X¢"""9EDT#Z.Í ‘uA˜Y!ÓBÓLô™xì4R¼H¸h#XC0)pb " 'C)ÈÇ!”äDŒrÇ!G ‰kñ„8ã¾#ˆûü†eÅ. <œ~C,r ÈÇ!œw™á›“)Ìæë8èÌŒl³—Êšd8à©p¥ÙýL:=²,LóPÊ­8ˆq{‹B""ÂHDú4"P¨AåBRÇÄCˆÂ5¦‚xˆÂhˆärÜ““†\ ›"ä\S.eÆG \eÅ0Ž"qds0º0Dq‘ÀÁ³®Ühh^‡§kñhp×ÿÉ0ùä6¹ÿÿéþçͧ…;Q»µ ÃÂaL:ù·O4&qÈ0>® qÌ8*a;RÇ0ærs'êC3…£N%B°`ši¦á©œœ'¨ˆ´""-ˆ" ˆ6C)EĈ‰|DD‚•€<3¢ ܆ÁÄ„…YŽ!#š#ȃ¦;Ž"#øï!®9 © ƒP>BŽD†ÁÈ äAÿ `}NΊˆMH”\Ó7#D ʬ¨(¹ÆÊòƒ)P¡b–"ƒ)ÉLÎWÊs9‘½ a²ÄƒØLŒð„Zˆˆ¼!DO¤„N)g™0HÁš‘F"„z>3hé—Žˆˆ³b.”Hx „¹í3hýj¦ói2ù12>šeÒpâÌ`žy Ì#‡LYŒ6‚jnˆ0BCBhDDX"qF8´!×#F‡ÿX‹ö"ûõ!üƒXùr7¼Œr:ùãb ê"jBÊPj ª„ˆ¦ ˆÄZhDEÄâ8eÁ›2î#Qa Žú&8‹ýýޏžÇ×ù¢#Nûþºd}2<]K#@f Ëq¨º1ΔDDe¹J&{1š¢N'G³ùD©Dj%9„šhˆ9 ãAÈ`pr1È‘ÌA˜#† lBâÑѵñ±§§Çär“‘äc¿ûM3˜rc§ æ™Ç²+ªgÎ9á27w0újaËr1ñ 4Nв‹ Ê„g€…¡e9„ʄʬ aA¦V- 8é–:ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŒ•Dr7ãdGÏF"9›g‘ŒÐ!q 2ù€Í8ÍŠ`äxœ3¸†óŒá͸[ˆ‹N-B."ÓA ì!hXA§Xzwý¯ûÿ£ïïí{M4Î:Úi„íB¦A‘Þ˜O"1D"""""#*¨F¤QÑB2$RPˆR!È äHlPˆÔ•¯!–<ìšúù¼är8f"<`Ž3‘Ⱥ8“0…ØK‚*<†àŠ~§ CmAàŠˆ‘Ò¥&¥F‰IÓfãBdüØW•dH8ç‚ –D"9[W¹6  ¤AY¬`ŸGÅ0Íä|ˆ£™ÈÜa#Ã1—ŽD!™ÇŒÚ7˜gî„4$nD`ƒ4â- ‘ŽFäH ¸âдD8ˆ×ôоùã`|Œüqâ´ò1Ðy1ÉŽúÞAÈ.êB:”ˆDDDDDDéˆÄrQÈÆQ™æ#lÄz#™Ã#æ1ãb‘ófyˆùxº0‹‘x‹Æ#4qdqO€BxÁFs6)8Eÿhˆâ-4Èစ¡"!ØB.-;Œ! !hY*`„hD_ôD±zühZÇ|uþ8"?ñH08ù ƒ»L”-áHà…Ó‹ML9'$ä|„u"A@éÚgDDDDDDDDDE”ˆˆŒ•£L"ñ<Œ3Èú9—g‘ÄS™#'EãHŽÎ#HÁ„‹ÇUFÙÁ˜2„CFãš.Fòô"qwåÍ0™hA¡g @Ìh‚‘`XLŽÓLØDÌðQ´Ó#ÅÒg …Á¡iÁœGpÂ"Ðv…ªÜG"8²8#a oȃæÇÇñë·!/Ù ƒ˜u´×»Èƒª‘weŽLr1íS²C‘Ž«Ðé©RÄDDDDDD눈‹)hàF %(„ZÚb4 éÚŒ”vèôA£ª7É4CÍÆälÌÑ GÑžJcHÓ‘°3 NÖF}z6Ìd|ó/—f6Ë£8Žex“.ŽGÄ­sa LŽšXL!#yC‘EоÖ5WDrÍŽ#þ!úðdAÉŽBÆAÜŒr˜\‡p±øˆˆˆˆŽ#‡É9!ÈaËŒrnA¸å¹1ˉ ÈùxÓÊR®ºú©‚"ÃcýþA@ä(éâÔè‘1+ReÓ'9N™œ”Í5Ç’_æè#’±žÐ¸HE…[!Ç"ZݯŠ}3f  …â#Œ¢ƒ¹¯#ƒpBÈàñhŒqdsBò@h0<.Tø¾Þ"1M> 볎šhGc“toªÍ+øˆˆˆˆ©˜Èôºé—eò>tr>Öt äq—ˆsÀsªÃÿdp`5Q¸5¿ô1#ŒŽ — À½HgŒ}YÑD_²y¬¨EÅò çtÊxf‚c© ]•}phMHÑ]AÈÇÉŽDl³Çj…œt" ÊÄq["Ïh„³9Ç3™Ãû;•¦Vi‚eñXtˆE#¢«F¢é¨§aPˆ¸lâb)KÛbGICFŒs`¦G!N 4yGH½œ6?ê©„ Øhpz¯Æ„CˆˆˆŽF=÷}8ƒE¡|†hùöEÐ*Ègƒ9ÄZaS<‚cûÊ´ ˆˆ4#+P„E+4ÓMeÅ1›4Ax&ä,Îå9pBx'…bÂ(ä0""#„E§‘Íд 0úÙBĨ»/â8`Ø¥ÊqòqìÎåbÙ‘ ;ˆµZy‡»²1Û´Õá”0!9'ù÷ðÎ:vqÔ—}2*(ˆü¨à™8͈Gº„ö\4Ê{'=±h†„DDºâóŠÂbÎê9ö¡H)µœeÃadp؈`r-ٜízMš$¼‡Ö¡ìmPþ/õ½+¡h}a‘wÀëWÜf/h^.ʃ6ƈæGŒd®#çÑôhŒ¨DpÌÑ¥¦š`„;"í0š ú ˆú4# 3:1—<8‹ˆˆ‰ 8$ADE„ErP,‹Ñþ"-S´âÐÿȃAÈQÓ´ÓR ºe² #6GÍÅÐ${0eÙA›ˆì»gu0ᩜ¬)ÉÙâ Í !B,¨Qàâ""""RÓB1ÿü@Šþþ6ìô(%€ %€ leptonica-1.70/prog/ps2tiff0000750000175000017500000000201110376541232013747 0ustar dandan#!/bin/bash # ps2tiff # # Rasterizes a postscript file, saving as a set of g4 compressed # tiff images # # input: PostScript file # root name of output files # output: ccitt-g4 compressed tiff binary files for each page # # Restriction: the input PostScript file must be binary scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outtifroot" exit -1 fi inpsfile=$1 outtifroot=$2 # assert (input postscript filename ends in .ps) if test ${inpsfile##*.} != ps then echo $scriptname ": " $inpsfile "does not end in .ps" exit -1 fi # choice: output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -r300x300 -q - ${inpsfile} # choice: output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=tiffg4 -sOutputFile=${outtifroot}%03d.tif -g2550x3300 -r300x300 -q - ${inpsfile} # use this to output to a single multipage tiff file #tiffcp -c g4 ${outtifroot}*.tif ${outtifroot}.tif leptonica-1.70/prog/colorseg.jpg0000444000175000017500000015370610371255516015012 0ustar dandanÿØÿàJFIF??ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ˜!"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?¿½§2nyšœ~ù ~¤V…½íÇú›¨_ý×±N6칉Jÿ|?úÔÓ¥Z·ÌÖ±L§¾Ñ¸~=ëÕúÄŽ'F=•—xؤdÿõêÝ¥™`‘F¼t®R+ xó-¼ÓÆò‘È öâ­X^k6ÄG±2çÉ¿^ô¾´îÕ…ì|ÏK´‚;;eBF{š_1›'8ÕççÅ>"¶p—0Y̽˜å3øóWׯ76ñï¼ÑåUá”8þ•ÏÍwvmg²;™ÃðIõ~&<°Zâí$Ѧ;!Ô­Ët¸Sù™Ùì\[F¼Ò qUfedÍFnAò8 úsMÈ ñU“) WÊÈÅR•TÎrÙZ‘äÚ0 6W—s.}k¢*Ú™7} òÜlR£­@—²§ñf¬ÝÙŽZ2sžEfôà×DdŒ&ä™­opò ,zš†é€$\˜—hæ¢fy¾ ©övw+ŸK ,Ÿ6:Ôd©íR¼=j2¡O­iîØHÌ`ô '5(¥ØGzEc"ÒímÍIååª@1ì)Ãn(M¡YÀäÓÖœE);±­ÀïIšF曚VÉÍH b¢ž¹'¬Z&R£éN3à`Te)énHÉ¥§Qê5¥'©¦,Åzp}jG‡mGågÞ¨­;9$žM&I5"A“ÐÜÓY–<…Çzºó,ÛÊñôã=jÆíýë8\G7Û0=iJ›š/Ú)¾g fª ú’zP' xÔòp¸'š²·!NÅdyŽ€ïM20Sœäô¬Ý+—ÏcZK£æsS ”ŽOJ猤©9¡¥ÏVÅ7‡LJ©ÐµÒôqPIyÔX¨e‚N;äÕ¯1¶¯-KØ(Ú¶N'>acÍ §$qNŽŠy™"ãƒì)7ü£K¹,(¥‘RLeyê´sù§ `/PjÁ_0„Á'¿jÎIÞì´ôæ@»w Öt­‰C.J÷5v+X²D³¨#µCyH¹ŽLOZªn)ØR¹•wNûò*¬¶L‘È>¸­?“iR @Ù ÀçmuÂmhsÊ s$¥!Z°É´úÓ®‹˜X€­&ÚŸoÒµWÚMµ1ÜQphm&Ú’›Š.!„Rb¤Å&) ZB•6)  å*6P*Á- +íôT»h¢àf¨–£ÍÿãO¾{WÚ{¡éøŽÕN)‚A4g¢“ÏàjuX.èܤ«ø0úבtö=!$‘ÄëåH:6p?M{ˆãdK¦$¼!´—ºÒK{‘Ü0²‘»dv¬Û 8ÚßÏŽi ]Ìp£Óiö¬e?zÀo"È0¸¸‡º1ä~?ÐÓbÆâ-Ÿcw‚NŸ€ÿ ÍÑ5%ÕA+ÅônAXÛ9^Äö?…jJTao#û²§ù⯛KŒj+ð ´§±å£º¶¶œÿ¦Û"7üôÛ¹MHóÁW"x1ÍÇ^†¨O­XØà%Ðd=b ·ä{Ræ@Nše¼ L^dŽ%·rž’jöƒäÕîü¾Î‘A5ƒ7ŠÿgZ²ŽûÎWòíYSê7÷™Y.H rcˆ‡.¢E(¹t;+¯_é®ÝØÜ.3È!¿éQŸ‰sù[`Ó•¦õÜvÿr6ÚTÓ˜ ïJzþ´E……¹Ayv€ï«ù çž--.k5÷¨x¯]Ô˜´—Æ?—õ5«¡xÌ0[mTüÝàûßãYpËÔ„Jv |Çh?Ö¡žÖÎàˆ»Û¸€ÀñýzVT³ Ó•úÏGsÕ¬á†íC,èÊyÖ“Ã 0aâ¼5Æ™0ÞÐ{úÕ×i »„¬•äÊ´†@¿ðÎ? ×£gµÕ3‰áýž–;—ߊ±,ݰ=Mrö×úͱï-å‡Õ»¬¥ð™*\»”®íR 6±,j¸FjÔì\†SN··’Cœdg«R´u…Þ…p˜"[™: ÖþÏT‹,ßKFÃËŒOzÍ×] TJQé$Y,þéªÒéS$»@ÏA]:‡3M`¬ûZçúÄ“5ö1±…m¤ÈÓ‘Hrjòh›vî=+LNW€j%^m”©E2ÛÆå…G±@Àª€;€#Þ¢’$2`MT}AÁ 'TX 0*õä%FàGJ««Ê7nWDd­ve(»Ø«$„ ¦ä–­k«ò¾BCSY 8ô­©´ö0¨šzˆËÞ€i =(­Ì‰îç&®@QS8æ©nÆ1VbfnعqÜ´X0ÅA)n€Ó_x`«Éö¥·.GÊF}Mf’]Km½‚–« 2mÂàŠkéÅq‰9ñ´G®G@h\²êñèXÊÊ9•J›Pn 3U!l6 \ŠÍ¦ ê}(•–áÞÈk]ÊŒŽjÅ”!‡šÿ1=HºR(mìÍéƒVbD†%t®yÔ­XÂW¼ˆåTÁãëMŒn=h–PÞÕ·=jRv)½K‚(å °çÚ­Eg •ÎS…¾ašÔ‰” õ5…F㱬lÈŸO·o˜Æ3P\ÛFð4dê*ä®Bã5T©ç9©Œ¥»ciÝÖä£8nLÕ…¤ kªkh³)Î:Mš 4j;]‘Ä»YœÒ¡wtU].Ý¡Q´^ôÕ°†5+±jÒʪ‡±RK’Xÿv¡Jo©mE¯íâôÆÞ˜¬ØmŒ¼“ZRʲ Ry¼³Òºé¹ZÇ<í{”äË©=)•+ÌO­3ÐŒXÊJ~=©1íUq 4†¤Å&Ú.DS ÔäSJÒ¸XƒoÒŠ—ð¢ŒöRÚû=Ï–Žà¹êÀ`þU­ÛÍcÍ&P1¿£f¹ýI¯ÒheY'ERÑ€¤89ç¡æ§Ô!šEŽíd]‡p ßùð¢ìKr{ƒ¶¹„Ê%iÔºƒ¿½Ikaéòç,ªc-”Ær¿½A+ÿbé誒ý¢@ÃÌÀØAëÔg<Ê¡¥«[Í­ ¸us=¦£ôS30ÿxZšK‹mÞŸ)d2”nGÐ×ܪà†ç¦=k¥ƒ^x$Dc†PНð±×Þ§’Tõ‰wŒÕ¤vZw‰Ö&òõ%hÜqö˜ýõèMtÈ’Ff•ѺÉmÈ?ï!®&±Õt7?Ý'“ôõ¥·žûC¸ ¥ŒYìpÐö5×G¥¤ôg5L<¢®Žüm1’¸1÷òÆôÿ!ä~׎7‹ ªÑvÿ–ˆ?¼µOLÕ¡Õ@hÆùÀù‚“/áÑ…^_Þ9dÌŽ:´$«õ^†»¹XØZˆÈò‘Q¿‹8èãúÓ¡ŠkRV+ÛÄ`+LLå[ô©”‚ÌÈw7ñ4ck÷ðiXG‚?‹ËŠŸ…0hlW¤2cíÆP?†HaõòÍiØx«Q¶‘æÎÑí׬–ñ<ýk/‚œ`¢úeÔ~yi gœÌ[#þúþt7uf$’ØôKMoOÔ”*Jð?ÿ¯øUõ*½:W•ýÜ•'¡àgÿe?¡­+MvþÓÈ£þY°çò<þDÔ[¡W= çbªf˜gXxšÈ~釯#óíøÖŒwbL8`AèA­!g)w7ƒn3I¼Õîc –<Ò5øÝÁ©öl®tX’R‡«þ|æ—í*Êw`Õ)÷<Ÿ»ëXAu"Ræä¼˜ÉÆ1M[‹€x,1*¡YNEE=™ <¾­W.Ä;îE5Û2žk>¯É§ÊAe!€¥µÒ¤•ÿ| ê;šÚ2„Uîe(ÊNÆm³q£(BÐÈOYo Ä@u*OLÖ«­•9Gr]J09´¸ÎSzò±5Ö‰Gö\3[FK§2²Å½8'¯SYW–ª!!f`Ià7}¿Æ­ÅtÚvÐyr””Åæ\cü)Is¢o¦„²jž}šÉ3Ȉ’Gñ‘׿JÍ7·WXJÝ8!“Í^vŒzðk1ïË^H#Î\ 6î}±ëZâÎdÒ$Û3Í*• *ª9ÉÔTrYÜzîC¨êËvmÒÚ/œ |Ç×#ùvª0=ûĬÇjŸ”9&˜Ï*AyvËxɓԟSÒ¶ ¬6šBÎYMÂ.öÃõôõµœd¯ve¹.ds6¶äG„o*Àä^œŠ§y1’ñˆ¸+ƒŠîÚÝîfûzH‚íX+)ä‘ôé¶¹ù´xžyZI ÈX–ÆÍhªFã…äÌÛ[ù#Â?Ì£§¨®ßK¹¾¸Ó× ö¤™œzƒÖ¹4Ñ·M²9sœã+×ÛŠ¶Ú­Ô6‰lª«coNO½gU)|(ë¤í¹Ðù;öÝé®F96ÁCZú‹\•‡TŒK´àL>Yýk„Ó59-&)|²x`~ë}k¥ólõdç÷Xãý¯§­8V•-ÄT£ê·;ØäKÅVŠE¹Ê‚vÊ¿FïKþµ¶ÿ­uþù&_¡ï\µåæ‘& ‡„œ•aòŸ§¡®ÏN¿MZØ2&80ÌpãýÖï^:ŠkCŠp”™ddÆKIèß$£èz@HvŸÞwrOðj‡ýÙ;¿éÇ ø5!ÁýÛÿ\®8ÿ¾Z´ ÅPdÿ Ã~(x?…&8 `¨êÈU<”àáåçˆî?öW¥`Kä†ug8?ð„åwg*?‹%€ü~òÓ¡¹šØ‡ŠVU=2Fâ8üéŽq¼ýƒüø0àÓyßçªýÇ?‡F  ¨uÖR©pŒ î?—øV¬-Êo†Eqìz}ErIРõEÍô¥VtmñHÊËüHIÇ×ø‡ëZF¬‘šèvx<µH’•k›·Ö¦Eýþ$_ïä>Ÿž+Rø&ÆÙcü-ÁÿëÖÑ©8¸šK)<Òùçw¥TsOÉ<Öœ¨žfi¥Â²€*Ì$°?_zʈôÉ­6ªnÈ&¹ªFÈÚÔ¸Øô±µ(^CæÈ^Å[žèަ €îF)SR‹æC¤¹Y‹å>qƒši­É™KªòÚ W9ŠêkîsÊc.Š–X#Ï#Ú¢­“¹‹M¤´ Ó£ŠQ’p94O¶8n¸¤öZ“Åg4„ =MlÇgmå.åRÀVp¿ÂŽ”‚ÿ8®I©ËÈ郄KbÆ=ͱ¶‚{Qöæ9o­T7ùè)¯w#¹jw+šòmQ€C¸‰ViÎïVWO8¥ã¾*®£»%]ìCÉŠ–YßîàS¾Ê|­øU›e*iJzh5½I=©·hõNX$w;zzšÖT܇8¡™<®­Ï¥a 3W £+ì²õ þt¢ÙúÖŠ€ÊI"‘œéZûVÈäE%‰ÉÇJ™¬ s7åC;sQ}¡‚”àÑï=ƒN¥YÇ“Á WS¯ è“[ݦ•r-Ù;À`{×.н¬Âx RÙùQ×vqßç¡­ÍF4õ#zÝI+íè˜Þ²•äŒggª>› Ò’âXÑ NçÆX“Æ;úñþ5›ý¬FݧÜU´È/<Ùe”oÛ'+éÇQíå]ÅÅÝåÉB$L™@<Â@¿¥g)é©2ªž†|šrj3Òi™ ¬Qœv=¾§?…XÓ|?,:uä—>l2Z¾Ðøo»uà‘úUk«§´º+š²Ä1Ã*qŠ‚ãZ»¸°¸¯g3M&X69çÞ¢-¤b¥-‘VòôÚiŸº¸u½w w€r¼óž¹ÍcC=Ä’G<žtaÃI°ýåêp{qZQF·6Ò6¨’4i vR©‡ÈÉnäVÅÕÝ’xN :×NE›ÌÞÓ:ü­ížõjÑFñ’¦`½ì·Z©ûRA˜×9`¹ÀÉ«Þ!¶²·€y,¨ëãvrMS¶¼ºº—süŠœ…QÐà=«>ú9fžMŠJF@lúš”›šGleh]™÷•€¯¥X²½¸„í`^?~£éV¡²ÝL“[¼ÎÅ|~aý*3{j!e0Ÿ8½Òµ¾–±•Ów¹ÒYøŠ4…c»>t2F]?ÄS4O%…Ü­v%žÙD$ E“ž®gí6ì¼Å¡ InÃ8&/Ý»¡T\ú\ôãë&]²Á<ÑöY6±FÎkA<[¢ºa/NÏùãuqôlqù×”~àò%ÇÔR„NÓ/ò­ý³1tYìÚæ“8dƒQ·R0Nà©úµödLÿ0xÏÐŽ•ã"9…ÁÍJc™yÛŸ ¦«¡{)v=©ÔÅòH ôI>hÏãÚ†,Ÿ"‚Ož3ô=«Ç#ÔµØîgAè$`?,Õ»ë£lW³'%I~DUûdO³‘ë-ò€$ùAû¢S¹û®98Á²ðùÿ È?­y•·õkiFËüHÑ ­õŠ»Ä ¤Î-`\õQ¸)ÿ€œŠ¥QÊÏ@?+€I{7ÈÇþ÷Z˜SæÚ ýÐ6·ýòx?…r ñ×ËÁ±’<ŽUdWBÝ8ÇçW!ñ¶‘4;X\B眑ïOÑOÖÛj76Ðþb¯PA8úŽ£õ­{mb @,úõ_θh|Q£\ ¿mDeä ·cðld~5r-VÆåÂÅynîz*î?FW¶Ù‘(&wèá”`Aî*a3*õ®ÞöX$ýÄÅO÷ ?ÐÖµ¾¼ r…Orå[F¬^æn loI1n¦˜²r @’Ã2î†U‘}O­)n8®•g±“mà/¹õ¥ûV5K&Š~Íí4³‡àT¥£©$´%¶÷4dæKNâ°™¥æŒ(¸4œÐhɤŒö© æ¢Í9KgŽ´˜Ñ§À Ƨ™ò1ëUE¤¥w9l® `0Ûëšçj7½Î…Ím‰D§½O¹qΪÒYº ‡ÍTÝ"´(©-ÉÇttpæ«\HdlžEd¹ÆiŸkSJ4Ôk«¦@«óqéÍBó硬æ¸wëšh‘³Z*D:¦¬`¹žƒn¥¹n+>;–CÏ4ö¼cÐRä•Çκ—%ò•v޵8\ü£4×™›’j2æ´„"SLCè0ŠRiµ²1l]ئûÑI@M%¼PQKÅòà‡>µ©å€OÕ9l®-"V™6‰åóÁî;UèO”‘°ämç5óµšÕ¤ 0ÇŽõ¿á›™–ËhFæ\EŸátë|ùUÓf•ŠÆüd£0 8ÍM§Eq¤jI,ÑÍñJ¹‰—nTƒœþüêîT¬Õˆõ+x ‰%Ó£žd˜I$‹ÕÔöÏP?®ÙÜ#\›¨apå’ÊŒóŸ^2*†§haÔšUh|2Å’#ŽV­Ûì°#Ã)hwŸ’q´‚ ëQk#‰ù^žé™`Ø U Áïª˽DW;˜ã>J,qõú“éRMqö…S-¸‰8Go çß"¢:c$BHîcv,B¯œþÍJúK–DºŒHË3\# Ú’&0ª ÷½ëM4h¾Ü÷Öö‰oip(£gß°…>§œóŽôš}õ”ñOæž'—$£`0<óéÍAsxd¼’H¢3Þ¨Ëä©ÎAôQ-Ëö«Ç,ðéy{W’ÞWžH?¡qŠKVO;($meã OAïôõ¨#»¼{%³ÕgfÚYT ¦_=*S,1²ƒ°N€ÈüFk6fÖ„š„F’:áR"Œå€.;c¬ë)mbˆGöt–F%I$Œg¡ëÖ5ýº\¸xÖâÅDj0£Üµ ¾žB<;¬¥AEÆÓÏ@G~)¥¥˜â» ¨’¼Ñ°`œ¨'“ÇãEô‚[}’Ë–EÙ/ñsŒçµ2kF‰d¶Ú>ÓÐoB“ׯSïVÒ kRT‘îC*†Q•SõíéIÙ#t£¢DQ}£M¶Žé³îáÙN8éʨÈòërM4î¨è 3—9é€:ûš·©Ë}åǨ”|øv5^-BãJÏžVgS’$ƒÁÖ”áÍn¥Ôœ“·Tca3àzÖ(6Ji&šÛQNOßéÏcV,‚´Òm/1É«µ'ÌìÈ–Ô7¥ÜÛ·ñ­ôÕ¸É çµ¦${JÌù,ZÑQ“W¸TŒæµ }iŸg$¬q[öºÏr‘Ky$q7Þ}›¶¦jœv..#†HºqÔzç·OÖ¢ppÜjq“±” qœ7éK¶p>WüŽ+DZÌà˜öm÷¦.€1©ÏL~Îm^ÃçŠv¹PÍp§©úÒ‹»Œ|Ã?P*ËC:‚L£<Ô2(èqЉA­Ðã+ìÈÅ㟽ÿß4}©8ÌCð8§ar>RqŠwÈqÏOjè Iõf„¸GãšA$ :°ü)ÞZ1À#'µWš)f'“I.€ÚµÉƒÇÆ&Æ}jdŽfåV csu5J4Ë*œ«‚w)ê*Y£„[–ÄnáÜw8:½v!Ù«¤N&ž!”$cŸã•]WÕAW;{4ÓlîX 0F!ŽNGêG°¯Qð=¾žtÓ§ÍS²¨‘dwëZRJrålÂsQg§øÄLž[ÜÊ7ÞZ ØôÈkÛ É·ˆº•bƒ œqëÞ›kaid[[Eã“å \þU`â½JT•>§-Ióì7m§S€â¶¹•ˆñIŠ”ƒI´Ñpå#Å(&Ú1EÂÃE)Ó±IŠ.E&*M¹£m ÅY¶ƒsnbT•àç½;Ìoï—v´*)-Í8+cw¤k#àÖ9f'©¤Éõ5—²FžÕšbà`åª1>xªc¯z™#^ |ª"æoF9¼¥\mªÂ6n­c#“ÍŒdqøP¦ÐÜܠв ̼S3éW&‘]qš©ZÆM­L¤­°ÜÒS±FUɰÊ1OⓊ.+ 4„ââÂÄ[hÅIÅ% í£m?>Ôf‹…†QOÅî>j³†]Z1Hò]¨à“Á_OÖ§†3¶<ä0EP‚Y#ºi ;ãÆÒp:w®–ÞÞ9êŠ@&FÝ÷þž•óµ4HõiÉ'©VÚY-.’âU`Ìw$‡#¾3ŸcZs‹›¤y]Ã<ÅJ6òÅÀ<¶{tîqTç’®0ªíoÊã%õǽZ·¿·†ÔZÛÂUL‚LÈ3ž1Åcæ*nÉ.[ì@\ˆÉ$œÛý{~JîÕå²yßlgq“nUNqKç­Å±7,ŠˆùI9ÏP{uª777n‘ª63–OálŸþµ5«1 #†p×n.¤8Qþ GTvèÓÞFî]TŽOE>¿…#Æ#ƒÍ;„Ÿ)r§Çþ_•GoÖ‘¾_”sèq[QXX>¥y,R5­žïÝFÇsÎ5KO¸†ÿ_¸kÉîÍ÷±¾3è>œÕí2ÌEg*]ÂQÃaY˜Œ·¡ãÛ½iQË—SXJÌe¢}¢ñ¬­iB³–-´ “íZšv“g¨iö}GÈq0DˆÇבÉ>*祄A¨œ2°&} ïSëËseohâRÓåZ-˜ÇM§ºÖФÔTbMEï3Bþúm;R’ØO·ÉAR+´cžüXQJßÚ2”sµÓœ£5Ž×2? sÎry5£§ÜäÿÏ3ý*ê;Â̪kÞF”nP(i3,gПåYw×/Ð ÇhãÖ«ý®G.wè3Ò¶§U(¤LâùÙÐNÆû¦¨X©òýãUmõ 2¡ÉÈÁ$÷«¶ñîǯÎk:óRIšPMH³Ç¥6(C È$ÿ:¬÷CoËÃçƒSÙÜ£¨V$1É®µ5tŽVš+Ë]A¸zU˜Û̲¦ÒØèj,îÕwÚGèjÞÓ€=«ÎÄ;T;èFð2¯"Í-˸“À*Γ`³H Ü~ñ&x‡ìÒ~?Ê´´{xÍ¢;7ÌÜc5 M¢*Ú[jÂUx®—Án骢ªó‚þuËÝ,§ËH/ƒÏn1]¿ƒí^ÖâG¹e.œ®8'·½74Î6wy£t¥¯\ÆÃ¶ŒS³…Å62É©ÖäR¸ÆóIšÇ ÓzÓê;õ¤¢€i´Qži€nâšI¥4”(Á¢ŒÐQGPæ—4ÚZ]Æ›“KHh D$šNiÜRS¸¬7š1Uïoíì#pûT‚sô¬‹/YÝÍ$mˆÊÌ#\·Þóôâ¢Ucr³b„e‘7)ÈŒý*Öôñ$q›•W‘Ê=sMÎ+VÕ—© L±¦²àÕs ådT䌹ô´2GJ/ØîIöqýñJ±&0ÇŸZ‡'ÔÒdúÒ³ÒèMöuþý[ÞŠ,Çt|¶ †ò‹ù ¸`ã¶kjÃkAfã§^”Mcx­m‡nyY0IôõÅ$´Pn œμ*ŽèôhêÚ.ÜKm é¦p§¨oo^õ C,³G/ʰŒqžÙ¨LO5ÀYºS£žâ9|“ÎŒ0}k?2§/3jx¥v†ó†Þ£ Î}sÆi·YY!•¡ÌKòcqÆ1Ç?© q¾<²IË”ç§CëÞ–ÜÚÜií ¶ù³ó*‚9ÇOJG#ww*Ãw,,/´G ó£®A$Ž:ŠŠöÏì’JærÌcè§ä÷ò²Ï#5º¤}DXçãŸéWoÖ(ìãò¸•Øù‹€£<ŸLñÅ7¦¨—c:úf¸X¬ƒç~£ÛùŠ’ ˆÿÖH¥Ë®Dˆz§éR‹ «Ë¨Œ)ò"©bü¢“ëÇéR\O†ô–(Þ@~p#À yø¥Ð-q°Gg›Ÿt®øfMÀc“ÜôÿëÓ…´ÛG0aÜÌ Mólì¸Ïõ¨Î©¹™«FàUk[ÿ´)Œ¤ãx¸õ¢Ïp5NŸdÒàŽ{pSp’)²Þ¹çò§]Ã5•Ë·ó.f;É‚yíéœ{ÖL²¼JXÇ’ÿ0,ÜŽÄ:¹ ã,q½ÖY9ÞO'¶sS+» oSÊTÄüdl(ÿ©%ů—4“3™,¬:çë:;Å™ü±î'#¦=1MØó©TRÌãõ /˜ë§Fôù™½íÝÍÀ'Tœá¸\ûúUëX#3Íüq2ù›’uä9£Ôb³Ìvöíæ,žt‹ËF£~§¾)o5 bÝ,á€x˜uŒôÇ·WT¢“ÑÍôëUšHa•"Y uó ÆAÉíœqíT Ú]Om#tÚXÆk6+ùí$Ã+,€ç#×üšµ`ÅçvbK“ßš$Ÿ+5¢¯5sUüDl {)#BFåVñ€ÃÞ±oµ«í_È[ëÙ'X¤AÇÝ•°OÚ€ÿdU¾øüiÓ„R¸N+™ŽUBx~U«¦ö¬~CÓð¬e;H­,ÿ¤ƒþÁªŸÂʧñ" QAº0oz¨©…™zzÕ­X¶ ÿv©/Gÿvˆ|('ñ1bB$å”þ5»§äÀÿï ç¢æAÖºM7þ=¥ÿúTÕøJ£ñê®\ƒÓëR‚É"œJ¬§÷­Úžü$šÐÁ­Kö Ò_Æ[ åºý+h¯Ìk JÿÈ»òßʺ u5Ë]ûÇn{¦}Úÿ£J~¿Ê¤Ò·4iû¼€z“Ö’ó?f—ê•6Îçe¬kœm\óžzÓ§¬L±} ‹™]^/•ƒ²½Eu:f¡ed-e·‘šY\ #Œgõé\þž?”ÈIÂuÇ8ÿõUËhEÝÓJˆB¸8£=½N+®–‹C…ž¯ ¢HÕס©€ãµaé7f-1àˆÔp»ÌEY:µ®q½‰ô kЋº"ö4™J÷¤™&®Šp±»}N*Õn_„Hã­É­=IlÛÏ¥„—W9$ÌÄŸÀ~Uf+ùpãyõ5.@j`â“Õ5Ô@2§ŠêN7m>†ŽqØž—ð¤ýj1sH#YÉýÐy¡Í-جHiµVãT³·¦yÓ`$œÖd^'·–ûÊØV"›ƒ“ÏLš‰V„wcåf÷JJã[Å÷&RR(Ú2ß(œzWScv·ÖqÜ.áÈ8>”¡^3—*‹f“4VÄ‹FMâ“=逤úšÉÖu•Ó¡aù—ùW<­sšž£p§Ò¹z²jK<¤¸WfbX€Ã5j-¼Ö‘Ì rÌ0àñYYuwemÃØf¹ç6×)V=ÏÃZÇöÆ’’Èñùã!ÕHâµ_+Ç|{~÷ðZZ³/˜áŸp1×Ú»ïøªßCTù²1åwcë]xz‘ót3–ŽÆûçÃU4ÍJZÆ;¸Èã¡ê*ÕuÂjJèÉ ¤Å-&jî+fŠÇ‚Ý]Ço}äªPŽW-œç'ëýjÜöÖë"JóÂêÃyˆXgÜË4“4{Nq tÏ­_‰c¸8•^o¼‘„Èc¯s_?%¡Ø›OBCg4ò±··< þ>ƒV¥mnÖO1YA ÔÕzÚÊF:IQb„ùÇ·ÖªÞI¤¶Ñ"î'!Ù¹a× úãµB5r”¾Ë÷yF4Œòöœºœ†èMPó;â<`äcŒûŠ–ÎI.cgnFs!Èr2MP¢gC"2H†u;‡µ%©)84™u˜ ä\"äïgQ–uÜœþ5jMJFê`¯½KËÁÇ^üu¬€íç¾r@FzZÐ{„¹eÜû±ðϾ+F´"zl[»%˜Éæ±f¤™`8É õíYâK8cÛ =Îã‰##vÑߟ•>âv¶žxï›ç®rväUoìØmc‰„¡ä‘ §=;{õ©"W™ ý¯‘¸‚6X7ü¢NIÇçš}€ß°e$aŽ;RÛ˜«%ܹV]ʼðzý{šÓ°†9ížS*5¬ryH$;H>¹§'mua³\—1I ›Ëy’¯ÌÞØõ5¡|Ó¥¶Ÿ-¡ÛNv|Í“ùâ¬_ÈJC4þd‰æ ĸ;ÈëôãµE§Xhê7?e˜C Ò£HØÈã5—›Uõ+]Z$™H£ò\œmc€¾¹&ÐÃjðÀ$f+‡™G_`; uÀ{›ævæÎíÊy'®r{Ó¤±x£eY²Xôî@äKDv)ZlÊ–(QG‰Ò8I—’ʽ¦kzM­½ìçJ¹û]£:ˆþR‘Ó\¯ìQÍÜŽY•Š˜ ã#ÝIÉéíPÛë zäØÛ†Î.+¡9=ŽDÌ[«+›e"x<ëŽjÖš|Ü«­­æ±uÏ;ùÓGæHÒà)çúbªiZmÃE%ÖÕ¢í9`~•ZÊ,Ò‹÷‘¬‚n×ÝF%ùÅiêÑ4—C`È ÔU$‚Pãä?T>UO‰•˜âµô£þŸîµf›iðÒÓT¥ÔjÉü,)üHf²?Ò—ýÚ ƒ‡úV¦­Ir¥@J ¶Ó ß'QD>>&Aýàô®LÿisýÿéX+k0`J~µ»¦¨›Ÿâþ•~¨|fü¶oZ‘ùÙëJm¦óXìà÷ÍL “åã8ëÍj–†2Ü“Jâê?÷›ùWD¼©ÏZÁÓ‘’ú0Ãs] \1É_â;pÚÄ£vÙfü•&ŸÏo íýÖ2ß/^}in×ý~Î*Ö‰1ûcfV0Xàg<÷ý*¨«§c,RØÓ·™0j…H¶tÈmÌÃs×üúÖ3Ø©ºÂáÛn ¼ÿ/µ,Ùc·Øìvȹq]˜xJ5)Aì]MIоcÚ‰⬋î0ÅN2Nk"úY~Ëæ(𨃓è1Tlg’Y[rmÀmÝIÏ"¶N|öaÈŽ¡¤d|ç‘ß4ôº‘‚+o]¨$°8ÆqŸZ—TÂÄã•xxÏðñ®—W¢Z™û}66ZâPqÐzrI!-“ìkž[ë‡[x“$'ÎíÓÛúUƹkko4L¯!å:ŽpA¡NîÍ Òw²6¼ÙBäªãëŠe¦§ ÄÂ5‘A÷ï\ýÖ­uudˆ›s78ÎxÿõU{e’ÂpìÁŸx*°ô®jÕd’)A­ÎÚúîK].æD$Œ‘ϵpÐê2®ÉVB>n¤ô«Úž­s<ŠÑ1Ž ’)çp>ǯoι˜å˜ÊŒÑâ@Æ8¬*µ;cQ®Ù§òXŽqïÖ¬ÚÜ[B²Ã#°‘“>bÃŒü½½«Ui¬eŽ'ò ÈÛÎ28¥E»»ü›iE\×­f¯ X±̱J°ðC€rµÚxs[µ³Óž'F)Ûëõ®.D÷ò.ÕáJãøÖ”qÉ%»¼08Ën>Äö¦¦Óº@Ñé-©Ú"£4¸~\÷¤MVÒK†eùר#ÀÉquvÖÛ“÷PÄôÇ>Ÿ†*k‹†VK… ±’$éÏ¿Ôñ-Ésмèÿ¾¿5®"U-½xë\\zòÝLX8ƒ¢ˆÙO¯\Ñ6¨D>Ó,JàŽqÓ=k_¬À^ÊfažFQ,ƒt§æ#=fM¬”ՃƇ¾^r9çÞ«]JË{(I ‘Œ e^áÖ²½Õ¼Šæ~nCm'¥pVn[¨µ£7ouü·J‹ ©*J®0 ¿:é^þÆ=:á´ó(Þ¾V{“Ç¡닟í“ÚîU‘™ÊávÕ­¥iŒÒ,WS‹Réò¼ƒ<ã´+ukRYPâíQÖp[%¹pn¢³Ñq<¨W?/Nk\xub–f‘¥TL”‘Tý¸ÅQnérÒG ’àž~¹¬Úe¢”б2à*àpp~¹Y˜‰FB7 OcS±!·-Ðp8ùNAÍRŠÒñ p}X`éPâÞÃ6ô›‰ì›Jb™KmnXŸÊ«ø“V}cR’GUŽ5ù[¶â;û’ÃO,efÌRíÂüÀ¯ó¬â»[ƒ¾)ˆ F@ÈüéÆNÍ"m­ÎÃÁÝÜ,žS;’}€õ¯Kûsu;GÖ¼COûcHíb0ƒ9l/ä+¡]BÿÉÝŸ ç5µ îšµŒç}ÏNþÑ]ÛH]ØÎ¥7§U\{šó4Õå&_1ƒ¸Á Ñ&µ¨<Xw ±<äú×BÅ®ÄòHôß·îΊòïí­Sþ{\~´SúÔ{³‘ÍÀ±ÄŒ„OFþíOÝÂ9|,†5Ó£:ú‘Mû<èyVû»½jÂÝÂà[ºyq„?½ —-ƒŽ}3^73= Њ^àß¶Åq (’ë‚ øòH¥*Jtéž­Ïc¯½RUòŽå$ùN­[̉•”…yÈëéÒ•ÐF”ãšzu—™%õ»´( R_æ†};È’ÇíkäK¤ƒ)ÚxöîjÔ‘ïf‘ *¡r¥qùV\`FN£ìèNÜ dúg©ëWjEÞå¡–é“Å ©µ‘ñœæªJR$ŽdNÙPÏNEh§›sö1ÇÏ6FF=3øVs{‡&2ÊP±9àg·ò«F}JîL @`¤©=Çjµo"ÎVGTFþ Hìyèj²ü¸C»aÎòr3žµ=Íý¦é¼¨ƒÚÛå°?áÇã@†µñ…p±&×pí¹H_`9äb¬ØfH¤šBBHä(Î{?úª± ©Z[Z‡1ʤ—@=ÇàK+OÈ/ʨ?»Rö)- ‹y0 ;†îI9öÏ?Ò¥…ÞRd,#刞ÄöÏ9ëÚ‘-ôÿ°‡’iZàäíQÂûåøÕ»ÛËV>ÈDj ´\rEfÝÓ{"Ä7qÛ[L°Ã Ë¿æn{ñþsŠrË$¦;8Ñ&KPÒ1QÆ ÎOsÖ² o$LМÏîÏ IÇ?áRÚ—µ›Ïˆ÷<â—%·yÝ’Ì©s¨ÈÀ'È r€`ç“Ã¥R›M‰ýb»cvu«·E.år!hÑ q–ç?…%Ä—H—(Ç€S§Ô§tTeb¥¸4Rmf1ð8?üënþv¿·DKEF‰6‘E³ŽN:Õ{dG“s˜Ñ3ò±#æ=ð:Õ[»‰­®L«tH îyá½‰äæšn+šúšÚ7\¥tÓd”’–òÉŽ “Ký‹xÇ"Â|×RïI,3 /o(»˜r[ž‡Ûšt–·,3IöÉb?1R8÷ã­+Ï¡Ñi%aƒDº fÎqÿlOøT‹¤L¿7ÙewòøT âiW‹ùíò¯øScñV´¬ ^¸Ê?£šlÛ’1,9º½¼™éÊkXÖ<}V¦ÿ„‹T0ïŽýÛžx~öÖ©(9½—ž(\Í ¨¡ ¤y(ÿ¾iâÞ%C€?*…õ]FFÜ×rç×5%¥ÝíÄÄ´ò°y¡§`Vì'•8ÂdûS¼ˆ€ÉDÿ¾jÃÁ;H‡ÉrKwëRµ¤òDÛ!ýÔsH¾X”Öƒ† öjn’G­[]:õ¹KY˜wÂ[-"úä”H`r1Š-)hŠ)-”—I„]ÀÉ‚=5ØišaÒãŽKTP¿u˜c “‚•cÉcw¦#ïÄnÄ«Á#µ6 ¹¢£©Ìj==?zØl2ä»z³Š¼¹™£,6bá¢0¬Š?Õ€x$tΩ]SPhí¸Š J©íÇ"¤FiIv¿îä%NÞ£þ½P¹*ÓA"ðå°Ã×'šê“¹³gä™ÊÉöÚ¬„ÿ ïøÓç0CrÓ]€ç@ÉÇóªpÝ€îãkoB ÈÀÅ2îb`Ž!Á qž¼õ©R\úŠäíuÍðÅ–ÈÜØÉ99ãÞ–öøª˜dTó.ÒÝñYVw.Õ ¾zšKÿ0^Å0ÎÅ/“Œ•8ÿëRSŠzlÅ}da SÇäçÍ”“Ð ÿS´™I€Üg¦A9ÿ Fß˱?&KÆ1Ò¡$=²ºåJ‚úŸzQ“ì;›Ö²[þùÈ,Ê…Æÿ®›¡nÆ(ÚÚ=Í’\.qך§žd¥ÁýÞÀ§¿cÇä€ÈÅ‘+¹2À^ÀÐ¥½A;›ßYJÉ ˆ†U!2ê:§šsÜÛ˜îíáE†L‚ˆ>`CXÛÎþfe9Àj_2{¯´Y¹âEÝœô9ç¥t4㺵ií¦X`PÒ*Š9)üóZ7ßc’8ⵎ8˜ß&éÉüë“Ïjñ;±X$ Çž­‚;}*]RIy?xä>3œu¤©ÆLI.§N·ð©*¾[vü§=úÔò½´kûØ£ ü`)ëÛ"¹ßiy»…YÉôÿ*ЖüÅxe ®¥‰—ÅÛò¤èk ìygdW/ Nª2ˆ«Þ¤üÄWx WÎáΪwº¬Mj³qf;óü\cuö«¼Ì’¸+NkNI\›‹md¹wµ…Ns÷F õ©+D i^¹Ú¬µnb@Y”2³‚p9­eºWó±I¶6#h?çÖ¦Qi{ÚXÊ =´NËÈàsNH¬Hû.Ìc*8úTz¤¯2¬eh''ŒTu  ùlŒÝqøT·%¸Ë(ã\.p:qL3ª¸-é…ª°^<…¡+Œ çÔTæëËÃLØÏ@hæî.+†„í*’u Ý1èj&¶É&T—Êš­u|#MÓ.å'¢¢·¿µg-å¸#ùm‰è=#²vmðD8좦û:Û6,gÒ0I¨¥ùâó`88$®>ð¨ÅÂ[îU»ã±Ågvž¬j-–"µ³`“pZ1N6¸"A`£ŠÏQó¢¶$þ"jHÅÃ6UK)?14Ôû‡+':N› ›Ä1z’ æ£ŸN†TþïÊ_áQÒ¦,ëÝ€xÏ4$O¼¾ð íŽÕW$®4k"ÜDœðü*¼ZB#8Tòòx'ŸÊµF±SŠsH¸ ÒmÇP:PÆeÿe?üð‹òáEjï·õþú¢¦Ã¹æwBê6ù·î•w>Ção:©rðEÊ’¾F³éÎ¥mIãs=äWÙ+`=…E¨X½²Ù\+y¯(.!Æ3ÐqGS>yOs4Ì^¶Ë ®[¢õÅ8›O´:±’H€ØŒ§dõ÷«¡–?<$p¤‚0¿)Ç¡Í@²ÛÚj©1¶Ycbc×½«DÈ“è6[x­öÁ#ãæ,¥øãÓ#=xªŽó2©Š89åUy¦Ozµx.ïfºÂ w-ägO¨ô§ÃoØ7-³ñ!%°}{})¥¥Â#-b0Ú¨UGSºWl¸àOZ³o-ì‘írCä.ã™G¡=¾•41³Ü£u·‚lÁòߟô§êmok!ŽÒ  ¹–f=ÎMDŸB”’d«p¬±Ú¬q#3aXƒ¸äôô©Ëæ×ÉŸ`f“pbpÛÿ¯X)vÉ(IrpNyæ§ŽçÌ-Ëçb²ƒ»‚9?ýj‡M˱Ô\46óÖI<°Z8Ó Ž¸÷ÿëV\÷‰$ÿgw¤ßu”`Ÿ­gI*E$ ÄÆ`¿8-pN1íŠ}´s}‘eiJîb±á‡QŒä~"‹Yê$®Ç\°’áZ4!Wå`Oœš$¸{ #öx]Éœ˜×-Ék!öyˆu'qG>ùõëùVjJ×M»mŒ‡!N:gùÐõÙ’‘·¦€%/3¤« n.§*Ø>Á¢óA»»¸{È]nP:ßìöm#ÊÊG.0 ㊣¨]Íj"1;fA¹OLqô©š—7º])(°¨±¶lÜäà¼zÖ•¾—zšd±=³«”;SOpEg-ƤðG²v1Ü[9ÎH«ïyxº{J“K €ã8úœÿú«¢Œ'Ìù»2œtF\6·)6—}»ý”ÿëSîm7)Î|¯ŒÝ ­Ao¬êi9Y/g ;3U¶¼¾½4ÒKŽ=ë 4ö4MInhè[ Û›‘" SȆ2H,O$‘ÜÄûV]µÒi—2dFϤK˜ëÁ­+;›ˆˆˆ‡óN=qN{<ÆI!ùÛ’qÖ£ÅêSŠ’Ñ”5 Úê(å0*ç1Û²ä~XýjM/Xº²D°ÛÂ͹žE-ùb´ÎR§÷R…ÉéT¤‚%1Eê„àŠ~Ñ_b}›µ®jO\ûA¹¶º·žÔ“³tC ú• úþ·!ûPhŸü*¬ZY–xÞ5rØozÚdÊØÓÊíä°/^Ÿ¥i ßs*QÑ3bMLµ„rÅ,¢_ YŽ cï÷?ֲ乸k£pò²ƒ«œÜÿ*!¹yY¼ÈÊ…ã–È?ˆ>¿Ê˜ÑÉwq$ Ké´@í]ô㔌¬’"½i/A€H~WÝ–ÂȬûwtÞîܧœŒdtÍX¼f†îÁÃ! äÔrÈ£œ! XãÇO­:¸…­³9ç; w 2n=ŠŒñÞ«ÛJ¬ñÉ0RÉd=Qý(ó˜+íÚ œçϧJ¯{u¾â7òˆB§o<\Ê«ræèf¥vO Û8vL±*ƒŒã4@ñα»p rÓÿÕùVWœ!Ì̯"”ùÂö9àŒži%Ô ‚ö“:®~h[²G¥—$ì¶í#RÑ’îáÚHpÑ)ÁaœƒÆ™§^»K,ÂFó•Èà€j[kÅ eÏ™;¨ØzœçJ®nRFl䜨{~*©Û]tI•`æI­Éd(˻Ӝtô«M•#@¤H˜ HlãßùRÄŠí#¤1m' àõèã²;n Ãè¾¢µSµãؤZ¸q±Y™NÀï†l‚Ô70Ïò¶oÞË—üö©Ud$2ùK¸† [ŸóÀªwr7ئBdÈ”*hó$‚7.ÛB¢ßÌfØw²«ÐgŒÖyro£TmÏpG×Öž5h“æÂŒ”cÔú{v¨2±Ý,jÇEmÙàsüŽk¢-GUÔm—é¥Ô"Ô ¢ôÁéKpVâbÄâCÙäc¦k.æeUóc!KX’?J¶³Y0K6çƒîj¥8ÇÝ7@¾uReò·… øã9ÿÖl•ʹÉSÔ¼ÿõéâkY$Qå²G©"œ-¶^N·8'y¡=? r©fÐ62ì­Å¡~˜o”œñךXî…®™å€êÅømØÈ95›n^ki$ÉXènFpMiƈÓùÒ6øË0+×fó¬Ýd¥g°œ‹nÙùm 1Ï^ÿÖ¬Rgœ˜dTVÈl޼ÿ>Õ3³éÍl@o=ƒ7àGO  ±˜ü»€T«“•TŽ™­”“µÆ™f ×3;•Ÿ9P;ö4È5=Í*¸.W¦8ãü Aq/›3¾9>¢©È8”ã;—¡ïÍJP0[›ðM²é€bѺ¨,{ž£f[Ñ-£HÒAëÍdÂ>Íd7ä1PpGS¯jd˜*J¨2¸Œ€;W-Zz]ÓÜÙB²Æ‚\7CŠy[X#wB~s‚aX6W¿¹‘œdÜՃ|ï Uü>òã?äÖœ¹‰w½ëi¢KDÉ#ÓÞ…¾d˜™÷MÁö÷¬¹&AnÙwM¤sÖªÚß,±ˆe$’q’sŽy­}NVû™³æZ»É$nP‚HëL3ùvÙBIçÓðªn¹cÎ@ÏQš­%ô–ò‹n8àç°q©jƒ™ìËyºEÁäg¿5p\Ha&áï\ôoæ]Œzž£Úµ.âNNÆÆO_¥S‹!¶[k˜Ú0ÊsÔãÖ©OËH²F7ŽÃv?Jt÷±,J¡ÑFIéÈíMGʳåO†):’ؤÅÝyÿ>ÒÿߊO>Oï~§ü(£šCº9Û‹Sh$`#hëÁñ@Ð/f™WÍM¸ø z`úsÅkZ"BÖÁUw´<ÛAíü9==h¸Ô'º¹[eT…`Ï ½¹çð¨uF¼Ñ¶§=}gÖèªÞmê°4æP:çðéU¬²iÍ(‰PÞ¡ˆ'å×õ®™ôæ{hÁEŽ@>I8#} ªÓ[Eg‹”ò¡ÌÇssЀ 8ÎèJ)œ›yáT%?_Ö¤ófå%*Æ=Ž ö®†=&ÈÛE$±X©#c·)Ž1ÏéP&mÇæÛ˱&.u'œ;b§˜Ñò¨ÙþÛ›eíænîÜ}óT$2 ‚Ñ©C»+ÎOZí5­à‰‰µ™î »™{ ?‡Z&Ñâ¹²Žê'e2F<Ær!ŒóŽGjÑIndÒ¹ÅÝ âMÿx’HÖ¼V¿g±²·¸Ü‹xá˃÷GÝðùD4øÞþ(¡˜J%e\ã¹85»,_ë*ºZnŽÝ6fc…r8½é¹¤…ÐʱŽâÑ%¦ ‰Gð“‘õþ•zéf´R)RÔ6Xq׎?ýTçybo³Ý²¢¿©"Bx>j{I–-:O.Íà•<»§‘” Î9=¹â³ßRt2$ÒÿÒ¼ùÏj0IS·>™ô&¤„Xª2 xÉbOÎÄ•ô榌Æ÷ÞA`²>Adl¨Áúf¢Ö'”ùQl1ƪ¹b£il Ø#·‹ëat+ý™¦i#]РУ,ãžýûÕëK{x®<¹­®šX› ¿>œRÄÂ8þ{À%GÄg$6[žíõõ¢ëQ v·âáGͳå,§žsïÏZo ïîØrZý¦â8IbÌá¶u {þu>áÉbg½½F ˆãèA®;W4½E,¢Žò+o*Ìo“’Iç¾OåZÚͧØÛìû•Ý ÝÙs×÷ç¥gªvF•‘•q¦]k"E´.60_”g×ð¨5_ K7«qm ÅCæÊÉ'ùãð®›LÓìîb†)‘DfÛdg‘ƒžÿZ.áKVÌnÈw€ì¸Ï?Ö›¨âÂ-%va[h«h’ù÷« $ùv/VéøÕ¥Ó-nSÍ–éVBfe%#lqŽØõ«óÛ‡"8ÙŒ!B_ø¹õíÛŠÕ·‡|"ÕŒLÁ\§Ž½³ZÊ­•ú°Nçêö‘éú£ÇÏÛ#Îá F\úƒ u¶ö¶Ï£Z½ºìYÙL›ce Ž£’sõ¹qḅ6öSr XmõÎüâ¬ÏkX‰Gmîãô=ó<ûÒm5¡¿5Ž~!bn¥¸šî´«€Ø!¤úÖ‰‡Mº‘G¶›Œû@ ŸLV'øÔ¯ C±ÜOÚ3×Ûgõ¨‡Ã-Ÿí—Ð(8ýiÙu¼Å¶Ò<¹ŠE{æ);”™Ãûã­M¯i7v>z$ŽÉó.S'Ž£>ãÖÃKeû÷÷蘫¶þÓ 97—dûIåJQL¨¶µ9=2I!*¥r‚@æµ&û,‘–áÆÑü/ԞߥuxGGŽ!ÖÀ9™³ëëZÖÖvv‡÷cêKSµ¹S’‘竬 Œn¤)b퓯çÒª AáÔatË4‹‚<’¸Åzˆn¢K_Ý] g½ñï^NÌ©{Á$!Ž6·*¾ÙúþŸ•ÞKfqÔm—R ãi ß0Àû¸êxÍbKxðEå¨ó\äçÔgÓŠ³%üp¯ú4†2‡lm''޼ÿJªo-WOXy“Hw”qíÏÐv©mËsw¸Û«çŽÓÍ Áœõ'8àLS„2Ëf×Wîå0FÇ òîãÿ¥R›O˜Ù Lr¢’s)Ýž?úüû¿§Þ;Û¥´&Fg\3*(úsÛò¦ÒJè{- Úuì&æ@ŒÍòín«ÏQëøÔwÖ‰6¡n–¶ÑŸ%™þeÚCŽÿ*l¯µš#‰å?3L,pz}¤)‹†'Ë_5rŒo×8¨ç»¹êZºµ…%Hí§i$ÚIgùG\¼}GãO·‘¡u•†ÅTÚÈ[¡îqïƒY6–SC|ÂÝ£åYÏðõŠ…®nòXd,Îd@_á¶{w­"Õ’EÇÔémB¹ 7·Þÿ»™éúÖ^žÏˉÈΊŠÀ“¡?ŽE^¹Ÿ}À‹ldÚTî9ëýkM»-X©}"K’bXŽxÿõS–óe»Cæ+3.KmäÚ¬E!ÊäW'îò2?:KÈ…½¦[ȹݴõïúú×T¦´¶Å¿ òâŠRH}À’6㯮qT®†å7žP¯ÊÇ8õr) ØÕ\ÓNúìÆ[ÌéäîvÉ<‘VÊ àÊTF‡#©àw÷ªöʱ2»€Ø#H—z¿öhÍ­ÕÔÒ.NÄ—häŸÌ~U¬ª»è5"„ÖÛC—‘QÍÓ¢ú|1ØyÒCǘ›3è9üA5Ÿ) ‹l <ÇÞÏNy#ŠÝÕdhl¿³X©XFAQÆ9þ†¦›r•ÖÈjZ™öÒZÅjdh™|ÞxÛÏCžýiÖ’E8èT`>`:qÓ?\To<7N<Ðî€Ú£äœzƒP„Ú*´r$qÔñÛùs[JO›wÔ’8dEQÕ dnGÞ=6ñêzUt’HBT,‘õÝ×èsVb»8ï1ðg’?:¡mæG{*¾B†-ßüæ¢5yfãЕ-M3Ǹ†Þn3Ÿð¤ŠTžä±]»”cñÏz««9¡ÛÀŒÿ‡­%¸uÜÛ¾cŽ£Ï5Ñ*¾ç˜Û%KóÓp>RsÆ­ n£ŽTnÎå>¼V%ÄÍ<ŒY1埑Û𦤦}­#2€ØïÇ5³”Z»è;š,’´ûbctù‡#Þ®O4$êÌ@Ý’xúUK‚aÛæß"‚¬*ÕıI1FX‡ ÷â¸*»Á4+è>T·-%¥tíèGÓ=ªÜ±C¹ef1m듟¥W²1µË¢Ä¢@Y}OáVa‹l æ°È9à籜¼˜ÌŒÅÿ?—ø ßãElùóëýô?ÆŠÏ™‘ö÷&UùÊj)à+8ê9üêKT++¤‘±.~U$óÍEqi—Xw@°0gßóq×øR.ø¯s’7ƒ’¤ýÒo|×9’d«¶åµ!‡–CŒðëùœÖn±woq±!g«m—#höò­®ÙÑã– ÑÉ0›s6Ó€^Ç©Õ3i2•\°cæ89ÚØê?¨´ƒšÚ¶V‘^Ø[¹„³€<·?x c®G½Mt²y°yqžG%ÛÆrNsßœÕm>ö[x „ðAP§'øy¨¬ï>âAcvÈcÉo˜”c×’?ýTÛˆ9>å½HªÝÀê¼™3œ°n?Ÿó¨4›Qg#ƒ÷¼¦YC±pc#ü;S¦’EžÜo/~à_¹ÈÉü1TumVX̶èÒ«FA\«ú¼gò¥ícE¬nW–ö‘,/ñ¼:½?‘ÿaYá…®L³Å Œ°T?1#¾8ëÅj,è é]Êà±=y_^ÿ%ÅØŽØ0ºY\ÆçìÊ #+Á`@Ï?Z·µ‰ò2ŵÅåå¥Ö Dp¸ã~Q1ÚVúîæf!Ø[¢†\r¤äc’Oz|ö×ñZí½ßއÊRTt ºµXÆ¢Yf`¾k©+c¨î;Só`Šú|×sÜf ‘IßžÇ@=êiê+äCnwó·`ð:JÒKEM7}±x$¸Û’äîvíÿÖ¨âÓ.á]Ì0ÎÓÒ1öÊâfu…¤×Ý{HÄ)ƒçpXõãŒî©`´ß¦Mq"È$f\)Q¿SÏqŠ“[Zj.«h‘)ÚcLr9 gÐã­gM¯\Ü\,Í#»„T*GÞ c§ášzËa£¥±—O]2òÄ4H)S•ÝØàtüj+{iE®òªcB²+Ëméøæ¹HïÚ·‘·r‡îöükrKçkݳ•@¤!(ÝúñøVrƒZ¡;£©‡Vša6¢žUçõOí¦x<¯0ùË÷A·ÁíYÖ—Š·2,¦CoÀÚ­†n!RÛN-ne‘¥ eJŒƒùþkÔ‡~¦µÜ‚HÖe^!A休ֶ­8£ü.ߘã=kÖçìåÖ*E+æ¶ É;@úÖÂÉsrmÂ3C>ì,*„=ùéØsëNNïCU©ZùåY#Ù)G …Uê¿LS¦¼7ò¤$;)só‘ßñ=ªYe’U#>\›»ç¡>õnm!šÙ[Ï"}À4oò¹3שô¢›•ì\op2ûÃÊö…Œ »ˆÚ;v¨âÞgˆôä“üéÒørYÄrb #`3×>‡Ö‘¼+l­qyhœgóÍtós=•fµ*ÍãÛÖ8X#üTUGñ޲ÿ2€ôÚøV±Ñt8dÔÿv:F“ÃPGµ®ç”÷C/ÿXÑv;#Ÿ“ĺäÊss7àHª3_êÓ8ÌÓ’}Ítí«xj.c²–O÷‰¨Ï‰´Ø@0hÈ}öΕÁœ]ÍÝÜd†–*C,õ¨ìm$J†ÜÚF§ò5Ù?Ч›1ãBCñ†Œ`ýzŠ£}%û@Íök8^' T"ñœòcÖ´Œ%(· Ó{˜˜´âß •—8Èú¹¬˜]Y•Ý ƒ´ò=린Қi®áVH˜à ÛN zf¹ëûm+ÂV ´î9qŽ*j +³[<‚Y4¨|É"òŠòÝÁã¿'ŸjË·uÒm|ÈefÎA;¶‚½°?¯bʳsz#eO•—$U‹Ç²¹†3¼«Ád çŽ=ýë£%®ƒíÚ¶<Ѝ¶tËuàþ£êM=bòZw|²üÈ„ýÐ{VL±Émq Œå 1V<€qõæ¶âvæDýè)ò¿ÃÜJ‰éªEÈP,%ðŠKd3Ž?ȦÇžî葪-æÈÁIöüê±kˆ‹ª e@0$g”è!»¿ýÕ¨S,@8Pɬ•ȱf{BV+˜T- •'Ÿz† ¢ûJbY#8ÂïŸù5tÏ­ËÚ\åp6¦ÕÈ`z V y·z£%¶r”ŒŽOñø~•¢»/[3ò#Ì@3òue=껼’ÎÊØÊäí#ÐsŠî¥/ Ãch Ç#¯J†¹Fá¶“‚wI‘×Ò»£/uzsh]/‘!Ã#ùUNIã¿¿Z©izÏe,ˆÒ˜N{óÅD—ÍilÄ·Wãž?¯çVBBmŸd‘É!fqÔõéX)¨ËR•îAe‰aIv|Ù'¯Ëþp{Ôh!{™~ÑØŠH Üž Ž2kOE¼),ÿèñyÞRn8Wp r3Àÿ•Åä/,F6*  žƒéÏó¨u¥6öfnNã--–K‰VIÉ8 Þ‡9ä~­FöÑ‹—ýèhUF72F{õª;Y"ŽC·ËÁ$ßÞôê*ÛOó-¼±– Û\®Æ_Ëò¨œÛ•Å&ÌÝ0 ZY$‘ö£` Æ9OùïVÂc[eŸk;d·\rxöê*xHìžxãT(KNz‘Ÿ¥Ro®’"`( ’8ÎI8ªŒ•õcL´î ”ºM±rPnà1õ÷Éý(Ô/Ýì™Cy‡h%SŒ)¶þ\å##GÁò9-×v}†éTÞÞRf¬A"m¤¡äœ`}=«Z2JM¾Â/éêp“ •<¶k žïùSo¯žæyå=ª‰¹’0ñ•PP~„Õx&êWa´H8Ü×\eTôÝ–ôZvÁ–F‘Éo-rT‡qõ«i(»°z³å±)ëÜÓghΛZÉÚ°‘òsƒÐ×zε`¬®<œ`ÿžkWFº±sYv÷0!o)}ßׯzŽÒ'†æH®"++KË3ç§Oo^}êžFUU‡`{ÔW²:Üye‚!û¬N Ïzb³Ù6„ŸRK÷G¿ˆ Ÿ•zUœG'(À°nÇžŸd\±y2 ±a€G\b¯YE ™d*ñ¸|ÜñýÜnõS«tÎâI‰ŒlÀe¾ø±ÍD–â=A#(@nx¥U¬»™•¶åvšcÊ(]0  RIÎ ÉϽvR÷¡¯SE©mHž_& T†;÷·^:çÒŸs¨ù—ñDJ’„‚r8ÅAfDE攳FäîÛü>›x-Öæ?-¼¶Á%H9 óéÞ¹äÕÒìFÌÒKø “l`âÎNqÔþ§’ìC˜ù¥Að¬K‹©„~L;•˜áŠ‚ i÷PܸF,\à‡¿Nk:“æm É’iMÿ•UìÅÚ®Ùp±9XÔ®2Nqƒßio„¦ãí¿(o=™NrH_oÆ•î%¸Ó-m6.öœ„Ï9é×ó5¼om [v¶íyrÛT«¸gõö­í>Ä@Îâ@ßÞR(çRéÿf¸ÔLêDpÎêƒ`玙ã8­9¬Òô‘gVçʈŸô< zz}+:’mØÞ…$²ŽVe H;€ï‘úU¨ŽfiK wùÀ¬èÒm5ss+–)µú©F?ZM—~1»np8ýk ]yZ"(¤‘ÕDk· /?–MY†T·™® 08¹'8úÕ î"oÜãsP6~oè}iép« ãQ1É\·|qÈïŸÃŠ„›)˜º²õ_22dPÒFWsìÏÔcó©¢¹mFá£ñÉÊX¢'ïà`öïÏ¥bExÑ@eÝåÌ‘¬n±6ùÉÉü=ëKKºK{I(ÿ¾ËÎ[€œµHù±ùÕßRú“[ßÎ,b²ižS°«ÄSz€ïëOÔ´3=£_´òaÂ"*3ÝpN~‡Š“C{9aûÕYÈ69Ý‘ÎXúsŽÕÔÛ"ÉtUÙÕ`0S÷°1ÈöçšÚ&Ðvg'†üÞ|¹ä#¾ßþµZÂs °NAèYMzÜv²º«òž˜§ËerƒªªÕŸ§³füç–Åá ‡ˆ¿ïcÖ­Çá Ð`´j|ô¯@KzvaþËcúSÖÊÍ1ú¾¥O*êU®y¶¥£.—n%.ÓsƒˆøŽx¬Kkd¸¿„‘#2”uê7sŒ~­z‰ôˆµ-=RÞ"¥\p£'Ó§§<çµy¿†ní‘Ë_G,RyªR[t7 äò3ø×¡‡kÙ´ˆ’îO¨èpÚÌÖ©ep]³ÇR8ÏsÍeÞx^óT+,P ¶!Tÿ!íÏ5Ùx®ÐVÊâÔ]Nc‰¤ ü¨€rçý+CÁþtšŽg(b¸xÀÎòsü󊉻ÑV!Á=Õ´;ÛiÊGar¡ LGò¿Z¯gÜF71ɰ6]|¼ûŒŽü×Òo´r 7 f«´h™Í®[8'ù×-î¬ÉöI œk8ž@ç >Ó•ï÷{Õé.mçžAÿ¾•BEôÆEzù°µ¸½ÆáLŠ ?•Gs iwIµ­lÆ?é˜þ•›‚êÈt.x´wê; „ÇÒ1T íÎ=+kK„Û[-äAã˜ç€21ï]¤ž Ñ ù-Èn<¨Ï<ÿú«Qðl°¹k ë“)bÀ´{A?\ðG%ö%Ò’9Kø§âyJîˆóIÏùêjKµþÉÔd’Å7òr8eàç’F3ô¨µu;6û$³ :ç<’îÀZØÈÿhW–ºàS'™¾ò‚ÈüóT-nâ¼»³Šî/2 Ìr#$tíگ܀mm]£Ž˜ªM¥f'tгÝÇksç†k0 ç8ÅZPÝ4U"‰~f]€±cÉ$¿JVY!’I åIÛ‘€™à“ØäUkéV]Ò#/Ê@௿¯¥KÕÕË— o}"4jSÌÜê™ 88äv8ô¬í.XයTVY!}êÙ?2ŽªÞÇ¡­‘§Ù=µÊM+ý¡FÄ>Húœ“ŸÿUc[@§ÄKm6óàÉ´í,çÿ=)E§r’±rwVwBêáy!9üzš—dQ;HX,ŽÄ¾à`úsžµÔ ‚í ¤³u*ÄñÈàcŸJ’ÖØK<³Çû?*Fz±½¹?äT5mÌÙ[0$‚Da!f HìOJ[iúîÊ&ç ‚xǧ¿JI-ŠG¾%TL’yŽ™öïKmy6ލ|èäÜp9#×ÔñT’X"ÒÖ0Ëfër`gh×wÞÉQs»ô¬oµÏi{ìRîFFzó޵Ñ_\› Õ1É"LÖå¢8ÏBÅG¾FEbiѵÕÿ6ï=Žc7·ãW%r˜Û™§Û)c¹ßäÀäg#¥TŒ½¼„J|äáy£`$Šå–’H£øÈÊO?^µBîp’—G%Øñ­ØÚmÅͼåmÞGF|°v_­,q»HVäˆäC±ƒ& Ryý*¾œ“ϧȦù#žTǃ¸£”ë{Ù% $BÒ†áàcüÇ_ZLM˜¤Û‚7àîàgž™?Zf¡\"ÊRPU±„ªŽ£'Ö¢b’Ï2´…‚¿ÌHÀ'üôúÔñÞ<”Ë¥iRÛr¹àÿ…;Ý$E‹ðªy—.Yy'üóW´{;yfÙs.<¡¼ÄOz]>ÎÖi¤»–áX¬›öã–O¦:ÒLQ’âKuR«ò’8=¿úþÕ;»_AÚâjª!¿òž=“eIƒœŒƒŽÜǽ@7$eFzúóŽÞ•,…šê &$œm>½}þ”јn‚¯~|¾ÝO?•uɸZ%=«nZâFEUs°œK€ ç ^•šlš8æ…É3—UQ ¸?—åZqK ¬kä:³²Ž£Œœ÷ö¬ËYZê䬼€Kښçný„•÷"‚C6§†áj:ŒN•o쎗 ñJÒ6«œe¨’IÚF гÓ5~Î-›Þ$ÎOgZÊ*í‹—R—•©ÿÏõÇýý¢·¼¹?èýò¿üMW+‘w2J™nÙwJ¾0YqÀÇjx‘>ØÑ)Ôcqè=qš¯ÐÄ¢GwU6gO¥>;ËyÆ1•œ†UqéÜóÖ¹\t¹ ˆ©!ƒ‘±1x9=+é” –b§w8çú ¸ Œnx.vï“’TqÆMPž'Y•Qà‹‘ð r}}?:qÕÜwbén²Å5¤rÈê<ÀINrHüúÒÄ’FÇtŠdgî§úc>œñßK$ªÚÈTŸ4xÆ@#ñ©ÞÖ8îâx†Ö•‘“èéÅhäÁÝ•d–K¸ñ!Trpo¥NÒ ý”‚ã(¯Ô?­R¸‘DÆÞ Í 3…çnp1è*Á†3 0•‘„™MË‚ÇèsøT]D¥r{ÑÃ3„Î×À d¸~µi±æV:¢¦ß™}HÿëÕèÌÂÇͼïf<‚rsQÜ®lâU$î~asÇzh︛3•Dwˆ×c(à•Û¹²1UM´b$Fh÷ÿnpI#Û$þUª‘¸Qf@¡H*zŽÕ#Á­ëXKj E°³ä:B=j•UÔ¦-´Vq°xäó6œ»1ÏAŽÞµ%´¹‚å#FÁ DJå¹ LùÔw6öö6“ bêròFzÕË-6îK@öÖoù»œ“ž:cÞ´Zê2 Fæ0ímeHÔ‡ž@íþzÕimâ·Ó xîSå>v¯Ì¬àqõÀ#>õdi—SÍ{v».–떆㌅ëÉU‹2çL€C+/Ú77š¹äˆþ5I¨¡½†YÅ •„f”²ÜÞdaHr ïßšÑAæIÛœóù]NhD¶ÂDvß/¹Ï†JιŸ6¬î¬¤®ÄeËŽ1ÇÒ°nî÷'¨û»=ÖQË$ûKÈX¹!€3“œsZvv‰¦ùWO$sÊrþSÀ‘Ôµ‘mfu ÅÚ­½¦ÝªÀ.:ªñŽœÕÙâO·GäŒ0l9ùŽxíôö«z"¯cM¯ím¿x–м€’A9aÓ‘Žõ’ÐA ˜K¾y°ZR|µç€}x⬠µ»Ib¸y/MÅ@;qœŽ0±ôýGn™~'“d2J¥Œq&IåéOäRìhØÛØg­ª[‘,Š^K‰æÜzgõþºµsaYû%ò‹òÆTÍ€qœ8ïëX‘*FÖÓFÊæx\ʈH(GMÙàœžqHu).¤H𬠸7ÌÇ=â+)\­:½òÒUd¸/HÉã~ß~pz V´rê6ÞD2y²Þf2xÈïŽþõÀÚˆ âç}»+“œ’Aî=ÍtÚvœÑÉ‚l´¥åŒr0×8ýkH•Ðtw ˜P˜ÆóϾkxÛ‡ù,†XWç§RkÔUÎÕ|Ÿ¦k˯QàÕµIÉV0ÌD‘µ l¯ØrO¨úUÒm=#¡ñU°h4éWIdS¬²ã ¯#I9¨<é(¾ÿp¯"Ëû–9$Žàý?:ˆÙF¤Ü[ÈÂHØ4 #'9ç·éïMðx„/ä<¾HP‘ÂD„g¦xÝØ~«»õ:ÕÜq¸†Ç#réNÊ $¨9>õmôâbPˆõ!Ž?­7û1†aqÓ,+šÞEèT$\ŸÎš¡cËIÎ[¯Ia3L*þ™#Š«q͹­”!8ÈaCVØ †ÛFPôÃ`ÓY VF(Ø~PÎH¡YûDG¯ÍJò2ÆHŒ±þîjnÔ¥4]J³6ݦPHt%:ã5‡ÖÚlN"‘ŽJ¨ÈÉý{~µèi!+–èØ¢šó•üÒ8êÿœÑ}EÈž§‹_x!4™Ä/©Å\Ñ¡i =±ôΫêÖÑÛAÙŠK½~f~ïO§lús^½­Øé—P4º…«N‰ÎåfGÐWžjÖ¶hakfˆÚ°a`–Ú9ÈúÓ’Òæ[#”·ŠßP˜}¬ùK8îÿCëü꽦û©§·–c/„FÈ)þÐý=«¥žÖ’X•HSc^ÀZÍ´Š[i…´Ê¥¶`»g*2qÛØV\É£‹hëa"X¬(Áóæ?vÜIÎ}íõ«"ļîò¡ˆ+•wd©¥6Æ¢™FH9U<Ôþ¿\V½ÌæõÁ˜3Æ2 ×<¤ÔÕŸsš‡A+ìÈ;qýjIãû5ÄIèU”/£ã 3õ9©O•l£ySå$0|žçœgÔUYíe‚ìÛ°û¶ =ßzßš2Ø–¬D|‰bAKò®_~0Ƕ1UZF3E°œ+ŽüõŸCZWðÄ^HÃ’˜'Œ“Ž¿Ò› ¶R‰g‹Ìe–8Çÿ\Š6 Y—/bï«ÊY" ˆ ¾Ïà þ5™& -ʳGûÙ ’wuSƯj¨¸µ:tqùm#HÂVï’=8çñ5å¼Ë†GSmÇwåííT¢¬;u.Cwd©|…7\dìW úA¨a$Y'dXÔ `6Aê>QYS!i|Ì©*ß1ì}ñR›«§ÚR8Úpôã§Ò¶åHn&Ý™$‰"Ww™Ê£ˆÀ*}?ϵjIllnE•ÆœWËS0™˜ƒ·Û·áUôD¹¼†)#ex°¬‚,þñéÀëÇj±<·’Àmæ/µIAº<61ÐûšÂRÔVìSŒBÖÍɵñò6A9Î@$w;ZeÌr<í!òì9ü«Yç´šÍR8Úìý8=zwÏò§$ pðÍ4¨¢¨U?7^¿–hæ°Xæ ´2íSòd‚TqŽõÐ&‰z Šer°Ì‚í9;‰Ãô©Ëh³]G’®~`HÝêJÙŽþé´|G,6rEò"ó9ü;Ó½Ú†2Ø‘ÊȧhlzñúR[ÎVpfù·“´ÁàãµNÖeJ˜XÊO"BG'¸ÔRYZJoŠž…ƒ7<žkIÉÉ݃ÔÓû=ÏÛA9H$·sòŽÕRÚÞAw<ä³¶RÝjÓ„OJóÜl ßu”2ãqŒgÓëB”tß¼v,Œ\qŒb¥Te(»‘Çf#V˜ FOÿÕWEÎU7ÊŠ ŒqøtïUd”Ål‡ YIùHë_¨›ÌV+Lœs’xǵDJjÆŽø¿ç¡üÇøÑYŸkóÑ5ÿ *®…t@ðÇ% ÄØ™†à›F Àã¯ãÒ ‚ѨÜQØî žsõU”œÁ¦!òC K¦p:ž½{b«îšò8§Ëyh6nUàp0+ž\ÈÊÃÔÉn¡æ"Ø ÇÍדÁ}jS!žS„¼¡2W“Ó ôíH°Â—s Ä|G䃆ã“ÏLS ç $jUžL‚¿NƳvzÔ˜˜Ä©#*nUxÛ€zgߊeÂludbÙÆƒòóÆOÓ­ZGXfq¹Yfyl2=ïPM¨ÄodÎR7‘Æê)rë Zè€O½fA{–2ZQÃ1Î@ôþU)ã:“ Úe$¶æÏxé߃PÞÁ !GvfÄmÀûÄõè?Æ¥]Y0+i-4êé½–-ÇrîùAìxúUØ¥g‘ ( '  ·_çÇãTíîíņÔUߎÄä.G?§ëN{¥Ävаp ¼ÿáïè¦Ú¢3ÎOA’ÇŠ·àϲK ºåž%ÚI¸ )Éà/qßó©,Ëj> š ¦Ž_/±!v€ôÆA±¼ c‡Zž)V@øÄ~ƒŽI÷Å7-ô‰urX…Qì*1{æ` è àÒåIã±gÔ¶ø’ÞÂeSÉÏOÓô¬}ç±®ÆÉšráVáÃÀÍ6F¹xÊ´ìÀÕ{DŽi%‰2«9ôàãñÍYtr¼c¯~*T˜ìQÙ&á‚ÄžÔÒ\›“ƒÞ­¸pF"RÞ¥>jàù,;ŸãMj ¯-ËÛÛ³I‘ÐdœûzÔQ›Ï)„Ó®\¨ oj¿,Lñ4goÛ­6' Á|Åûì:š™¦$ÈnLmlÞhr‡®ÕÏ—Jà5LjÃ0…V'†@ ¯×mu‡U‰D…mŒO» ‚0AÿÁÖtU·‡)>èá;¶‘ó×ÿ=k6™]ÑÆÁ"Î"v€0Ã#þ¾*I 5ÏÚ% *6!AœãÏQÿÖ«vÖ(Óðv«d$yçÿ×V§´ð,‘Í•Y?(“ž?JÉAêÎU®¦22˜øÚC|ªTüÀc#?‰¦YÎ.gÝ*ì|µ¹Ïß¿åVå´^O ÂI@€Hb29ô¦FAó F6’½Ó·z‡µÉnÅhÚY•íÑ YOñžWðäþUFâ)¬n <§@ #$㎠äkFìy*³[±Œ‘°©=óÁü…D-#’5fSƒ÷öuçŽ?>õQ^èÍ»´–âÞØ°„4yÜCu^½:}Ÿ™g*J ”˜Ñ›ï?\ÒZ[\ßN~Æ»mÔá‹0êsŽO_þµMi¥±Š 'l€K¨í×9öï[6îc8Y5&‡sð«Á7I+Œþ¹ZÙ¼¹hȶðG¼ÎÏO_R{æ¥d” ˆê˜@ÒŸ3ê u¾¢,t˜.må–)vȼ†brIäóÿ×5: KIî"½žk‰¤9Œ„Ž£>ßΡš?4§™( (zŒð=êK²Ð›tŠ(ÙØä9^‡±æ¢Èv¾ˆI-Qå`X&¸üÿJ¯=«¼Ë iËÂ.8ükRIf22ªÊ@'¡^ª"H‚D‘å?6ÑÔò)]6)"¾c3]¨¬¹, ŸÎ³õkGûSLp’Ü®rXgŸëW„³•ûD@,J£hqÇn`¹ º„Sê ãq$ôÜZ¾eØ‹쬗Q5´s1tY}ìzÊ´ô‹ òn$¶çˆî>•rêËL·± b’‹€¹o4–,3Ô{öü Gms³º­yb£&09ϯ~~´IôX­U¸/¶5Û¶r?xþŸ^¼Ue3Æ¿g;>Q¹‡Ê8ëHng¹ÔcŽ-én€>Èûð9üóOÕ¤¸•mÓìÈ-öïù¹<žk;¥5iÊÜ9‰bCys#Í$&;ÑvéŒõ›=™KÙ&‰”Ä~ôduíÒ¤[§´V,æI$óƒ×­6 ¤Ýu ̪e\Ù-ócW'mÊþd?óë/ýü4UÏ7Qÿ Yÿ¿‹þ4R ™ó#ç¼ )ä6uϵ kqgo¼·!cîÚ…Yƒc 0ŠžæÊHT–ù%+½9íùs1Ž*;adör\›‰Þï~ãåÇNŽmÑšV&µ{™K0òÿÝR8üýþµ´R´âxÔ«á–ØÙߦ=¿Z’ L[ÜH¯l³/– ‚1צ1Óµ]?c»´µ¤ÑÛJxòÆò =8þT½›z¢¬ìd´P¤ ŽA yQó1ôý)ÖŒfôÕ’iUŽüþN* XýžXžUY­Û’0AÁçŽÜUÛcl‘\HöR1%JvÝð:þ5jê7C[š£Ásx’FÉnîD'ÆuÉ=F;^•—©ZD“ÊŒí!;@mİíž2*¤÷Our"± ¹ [$ž1ÇQZ¦ÔôHî¾Ï(òd"yŸî1c¾9£›™/ Ñ½Š–VÓÛ”‰¬òànÜSõíO’i£gK‡&TB¼™ž—ëP,¾tmqq"#>@H-œœÇ×Ú«[[ÅÂýºìÄŠ›¼Ý»‰>‡ßŸÒ—-ÙKM‰ef{9_ˆ› Qʶ8çœæœt{?>ÔϨ[CÑ’À‚Åë‘îO­Q»¼+¦Àér NÅaòðÁ°>bqПzn™r>ïãßÚ©º  °C!v*bCžÿÄ{ Œâû[4qik3É´Kmúÿžõ¿¤iRy“­ý„’Â~rÈ®@qœûVQ¦åªCå»9›/Þ´ûKÆ¡’‘úz×§xoLƒM·bî³Ì£œ!%~¹Çò¶þÑþÚÂÞÖåX÷y)ÀÓ9Áç¥nÛXØA‘àŠßÄÍ×ëÖ·Q¶æ°‚Ž¥µvÚ]¿ïc¥*H à`±íO(¥cŒt'9¦ù*Šv6Ür¬¥ÿxÁWÑGõ©ÔD¼ìõÅBªWœ·\‘šÂXsê(‹;ãœWê¶ðê—’¤LÒ¬ŽÊ¸;¾QƒÏåëÖ»ÍkR{7€ŸÞY¾Rf²ÑѾ•Ák-jºœ÷™&€·—¼$äzàþT)k©CCò„ѵ*=ìу!| œqÏéPøD%¾½`“¸1 ò’}sÏBgi“´2LÞs)‘6öàîäŒvè:e¥Êiwi:IòÄDªØ?1ËdcZ ¹#Þ½jeD®ô 2u9ÿ'ñ¦=á{‰beØÊ0÷ñ§rÒDX•CM¹DQ¨eÄöý*uÌêP0Œ`z3úÔBO20y,¸Â®8àóÍXšbHÙã!%Ý‚{óZ_Aõ*Ù´ÌèbG“óçŸÀU—òçÀžcæTùA9þ¼Ôj…R­µx'Œã¥=  i2sòç$çÒ¤\ªåXÂÀ²Ž~Vùr>PAÏjsâd%\++a°s’?—ZkAº@77Ìx=¸ëV­â¸ŠQò)ßëØþµ]Ê®@ÐI½îgΙ?ˆ·AÏ·òª÷òÂ$‘–8Ë©/ÜdýkF[¹bÓÌlTÂäï’?‹ëYÓ@ï¶ ÝÀã9’O¨8™ë$¾Z4yÊ“Ÿ¡­AvÑG™)!£ ‚2{cšO±‡E§nºŠt)ÄÉ(?(ÈÇ ÓoR64cÔ4¥··y ¬Y@,ÇêzsÏãXº‰Ž}PÍ ^\2„ \sÌÔ—Ê6•peW9ÈÈ9ãÖ·(öåØƒœÜQ¥†·,ùKÿA+ïûé¿ÂŠŸìçý¯Óü(¬ìW)}~g»WpBm ª1þ3V´ó MR:˜\fT,T{ ¯NqT=J@ ]ñ€ì®wzŽ?aUî`•ÖEM»AÎ1œŸ§4(­ µ¹¡ Àºšk¨"ŽÕÈu•ˆ’@:qÖ®I;];ÊÌë]ÐÆ§)Ó#·®k'C´Y¬§–I˜‰ »FYHç¿¿¥%ýÂÚ~â7ÞÁvŒ’ þF´“iY ·s6÷Îy˰çw`Oo\Wy¦_¦¤÷WWÙ²Db6±­³¨É#¦ãŠËðî­š<© RßÌ|±ª6 #®}Iâ¬ý’>ê÷QÕ¯#y®T-$ÜD¸?­±¤t9Ôɨˆ•¤Hqþ°)%GsÇjܳӵmSM §*ÿf[»²,ŽœCîO5KXÔ/5XÕUEÀµ‡/t±me\ô> qT!žïG–c=¹âEYw+}=*RV§Ck¦_Øj±ÚMi ®I@u?(ï“ßž™©÷úì¿ÙfÁ¤aS¨ÃõÀõ$Stë½?R½¸¹·{‹Kxí™®¡–l369ÚNs\öj&ñ{f- ¢ùìÊú±ƒÆãÉ«=JZhiÜé·šmäºKOö2WØíp ‚0HÎ;‘øS…%Ô-¤—JƒÌ± Ûf’EVà`àwô⟨޿ˆôË„:YXGæ Ñv6Î>fÏ@¥Me.­¤!µò£GO1áæ(V?Цìµ)¤·2¤ÐU4-ÖIžK̲$p“Ž;ƒý*½›Ï² ±X‚â;†¶Á†ÎXg¨9ö®–ûIÔ5;››«Ëæ›(ÑÒ"w›¸Úx†ª¦‹›k;ÝÜÇ,süþZ€æåTƒ¸ÊòE+騹uÐ|úN€· Ës{&Ie´`Û{Œ p½søUm&÷O†Ó7Ös7Ì aÊîíÓëééR@-­#ŸQÓ5ƒouä…Ø-ÙŽÃüô>Ù§é63âÍwvž[ÛÎŽv—ÛÆ0=ê|ÇfÙ ÐMy¨0±‚U‘äcå1!†GN}–²­D·•˜´˜8hË`±ÏOnµÔͪZ¥ÍıHÐÞüÍÌÌC¶{c§ ü+&çV[›m%‘%I%i/f‰Sv8Û·¸ê3š„‰qF4¯uyxaÚVœD¼g‚xã€öâ¨K¥}ºåã‚VX PĸìÈü+ Óà_·Ü4PKuh‰³Î#g—“ŒðzŸ~¹­ËKk{‹û©¡„$A I¸ `ðš´ùvÀá[LŽ1;X~ò8B–mªNp>EÏ=ýkKKÓ¦ÔuHœ§–»ƒ•$ùäf½MÓtæ„Ë0/Æ×ÜÊ b_|w8­m'NÓážXGÙ'ËÚrØ'¹Ç|~•¢×sodgèwV–v‡q‘]¹vã““ë]-õ´Ù1NìH߆ÏJ|VªÏ•Ãv#8©’Êv”Ç$cvÑ=3Tµ4JÃã™±»å#9ÍNvŽOCÜàUEòáo*Ê5iXŒœêqWmôtœ‰¯UšQÓ°…5¹Yfó®L1³P hÏ¿z¸©·†Íi$|°ªª; ‹û>Ô’Å MÆŸ#’*¸éI“´á@úÕ·Ó XË)eo@äÕ9-ÝyIŸèÀRpcæG¬éú¤7Â’G&ì2¦ý¹ïü«›¸–IZêIeu‘ÑåÈÏÓ©¯MÔ êA¾ÙЕûÊT’ÃÐc¡¯6»²Ôn€îIU‰ À ƒœzšä©NIÚç-Xkî˜÷«.õ´·ŸËi›²g$ÿ!Tçw†y£{g’c…( “‚¸ }s[Ï¥IJârCGºÏ8ÀÇ_›­bjÀ¸ ­€q¼àü¿­E)ºråHÇXÊÅ-2âêK´¼Æ|Œ>£úVýÚ¢ÕtHиE$ŒsU|?ciwm‘#GÃ3(ÆN> ÿž+V÷^)öËf)’eê6ð3îOò5¼•å}‹P‹÷™ê]ŒqCrm#ûVÑ—#ŸÔu­x•pÞñ%Åö¤Ë+¬*’}É«šÞ¹5¦¤-ãf/³+8ßóê1VšjèêHµtjêP[A÷U!’V8`§ˆÇn½¸ö®/P¹û%›\$ÉÙgƒóÓ>ãåSǨ_ßÝÜ?œkÅцâÃ×&¹­~H…Áf|Ç!9*FÐOeù±ô8?Ò±~ó9\›d7ˆeÂ`3·vìwçê*³;ù#ÊU¼”eI8~<ÔvþXÛçHFHÇ<ŸÿUO=ƒËqÂ0FUL¸ù@¨ªZ^âê,S´r,§çÂíõCßñ4Èñ$!ÿu%·à’OøŠ’úæíAІ+mä•¶Hû.ÈWׯ~‚´Ôvv:´Öo4g˜ñ‚bÎj˜}ŽHƒ²À_åäQüªH]-ô²ª¬Ê#×;Hëù‘Y JÑF§ø\eÇLòOô…E®®œ«®ìüÃqÈèzúU™5>?(ÇB«»¶v÷>½ùªPyòÌ‘•uˆ\Œ€?çJŸ»fdAµÚ1Ç’ih4ÚE™/cù^g%w™:Ò´ tHNÙQÖAÆïLÙý+Zªå‘ɑόþ\½æQ!C" ·®On}2?Õ¹fÊÞ@Æà6õáIÏ$õþUv=»ä$»°~ª…”íxœdG& õ$GêjY%t·•lFÆòGqÇõ¤Æ‰£Ø$’ÜíhÁáñÓ˜m”HÒ˜Š¬ˆ )—×õ¨¡»ŽPTà0/ ÉÆp1ŠˆOqnþbm˜áŠÐŒÿ€SKRÔ‡–(ÆŒr1ÅH%.ä9ÜÈ'vp; ¤òÉ•JX®eX¥ŽQ4²# •ÇoÿU¼ÏPJÅ»«;x® ®Ÿ,—1²²ˆJ¶O'<z²-dAma py· µ^V’NwîàzÕ›~k]NÞô"»[á`\cìüÒÞO¥Ü]ÞKªI=¸’"Â3óH­ýÞz ïVh×b[Ú}„Ö²jŠ59$û9P»£ò²2wc°?¥^“L¶»ºžv¼¸ÕÊ1-Û»à0Áû™äcúVU†‹m¨hRj÷É®ç¹ÆÁÔmÏ^•®¨ÆŠ#†y&¾_–Fsœþ‡×óm _±‘ Š(>Ý-Õ¸ŒÏ´Úo&M½·O_º®öI®u ŽKyVÆ|ùI“œ\¡°O·…Üçsü¼)ÏLúWU£ê¶6Ÿ£žÂ›oªYÚÁumx·m› `)lg>Ý+"{-^ÓðÏs¦¬6ÂL} €‹º{ãü*º´w×^kÜ<¬ª ¡É`·Mµ:—´¹Ð/#T’ ”®õÉ8ž09Á«skÚzÈa–ÅZÒVg;Ðð:ŠÀŽK»ËØ–Ò+·•W'`åz~è;Vå†Fµv’\™mܘÇIǨ犕 îRcž¹“PÔu)ÞÚeQò€#$c§ÐwÓi^¾ó•>Êþ^gè=}p;à×iᯠG`~Ñnío¹ˆ‘dƒk8:ž>µÔ-•¸< vÎK7$þ5N Ö)SGm์™5 X ª/Ë' Nyè=+vÙ _ »I݃Œv® œŽ4ØŒzûRä4åFŸáˆ¬¼ÃÎÅÈ?7nØúUÁ¤¢Iæ Ýýï,güóVžê`Y%—f…F-ƒÀ÷ÕbÓÜ—{ܳfD\@Ìp¼DAãç“ôr0HÞc*¹ÆÂN^ßêj¥ô6eýâOPI8 ¦Mt«lþ[º™À8åç8ö“o˜™A¶hxrØ]^E´H†É;zœžÏjëµ"m1¾ÒbdŒd9°#’wqŽ=+—‹R‰u ”FÚB«‰2I?7#=óÁü ZÖ ÑÓ-š9Ýä*2#p;süèVHè”,S·‚‚Iã‘CÜ–ÌÅqòp1õ¬+÷Š ¦kb×2s»(¸b:sÔ?ݽˆBÎòbYcR Y娮 Çâ:篧º3È”~ð€yœ‘øŠ†î̤»™òBVÐ@Ûsòò:TV·³*È™Æ6©<óÁþ5vyD“}w ¨ÉÈä{Ö³,-×ûz8ƒ¡†2KnÀÏ_õZò–6ÁpXÈaˆ'ÏødÖݪH`å3üXéýk+ìÒLÏ äq÷y?L}søV¾“u>eä2,ðH È>Päcwöýi¹-˜¬ˆ˜}‘UåÌ.ÃŒýïAì9ª1i×wÍ"«ÇÝ;°3ÇÔùUõ”@Ȳofv¨þñŸÆ‘¦IÉË1' äü«>wÐW± "·‘â@Ï´.Âyþ!“íÐÖ|1Š$Ú|ò*(þô÷éúÖ–ŽëËX¼Ó$y<³qŽÕYô×Y¶2§Ê$$äô4ù´(Í®¤F­€ì0ðžŸçëL .â¬Û—mÀç¿ZÔ†X!ggµe“v·`)èx55Æ£ ImåÆ,¸eùàƒþ{ÕÜ,R¸µj"7Yrý} ©c‚[AÁ HÎY¹o@9úÔ‘Ç$×±J˜%2çž?ÄŠþrÇÉ‘•m¹Ç g–H?…oBÒJ+¡¢[ôS[Oç°òC•Úr¾ø©Ø¸XíÚEç I䛩üª(Äw+ >LàÈ\÷ãñ£ìŒ×S$GÏŽ=ªØ÷6Ëp<’¸b3‚¸àc½69ÖÛO”Ë»sŒÆ3Î0{r3øÒH¬ÆÇ p»ŽCúÔ©»¢Ì¨˜ë: cšÏ[¦ Vam|÷W"c&;²NüñW"¿h/Œ ;«H ìSÃç¨?­PX@#Y7”| €{gÝ)mlçZ,YÊÊN9=:ñTüÃSE%–O5uÀ܃1ùZ”>Ù À'°õ«s• û°ÒGægvÐ r¼p?ZÎv|ã<0 ‘ü?甓ù¥‚;‡•x2·SߪAs‚70SŒ¹ãM"EöëÔûMÃa¾vp¹Žx?•K©X¥H£.-åËÚ@(:ò¤f¯–ú¡Ù±.ŒrHì'‚Aàp?¥Gf†b‹#ªÆÜí<¿½Aù6Œòn*8e³SÇ© m#…lãH;ðCzõïéB@¼Ës©]¥v ÷TÇÎO¡ö©¤H’…€9à™7cgÔ+>Ké/åű„|qïïÖ¦žÞ?&Öxüˆ‰[Ædù‰É熴åI6Š»$¸Ž …b@3ƒ¹ŽyÏZ®‘"BA' ãר ••Ì‹<"@H!ÉVÈÀýÍ2(Þ[¥w±a¹ˆŽ#(oñÇJ”®Çvf~ïþ{~§ü(­_³Gÿ>×÷ìñ4SºÆÚßXLÉæd‰õ p{çY±É›ÈX\¹¨“qÆÞœ÷ôªÉ¦^ÈòAlŽU±œtÈ÷üêý¶—©ˆZµr¹ûÞù5§*Dµ¡aå”BP¡•W«–öÇáIòÃo”!@S…ÏËÜû)·±MknCTo¼ëÏ#Œ~µŸçˆžHàRA]¤H9ü=éB [ ÌØ·š28ÖÅMº¿™)aœq“Nå[—²èš륳VŠìšrAAÐç§µq÷-um<>e™&% ÈÉ'ðïÍK¬¶ù3!;˜Tgʯ’Æ‘ÐèldÒg¶k 5o¢’í¶\Ø9¯~8üé¯uöèaÓu ¯µkxËŽYÆ=GN˜¬ˆn൚)¬Yâž<•’6ÇQŒôãÔ–ÚԨΠ‹—RA–/“’yöæÛR&9"ùv»rsÏùÖävð%å­ýÀ¸²ŽÁ'cÎôȨtJ;æyZx–áÛ!ž%ϱÿkŸZeŒÖé{ i–äJÃ#nx8üÿ:ÊI¦ $oÞK§Å’@¾K·îŠÈU‡%±‘¨J—³•ÓÖ+8ã¶T&!™$#'žFZÞïWÖæ¸¼–aõò—ý`g ãÙhö6vÌ®š{FìÒ¥‹íõ´ÖSœ†Æ=ªL‚>ð ¬ñöR¾»¨;ÀÀ9&ïÆOI8¨'½ŽÍ<Ë‚¨ž½sì+&Yî5\™7CmŸ‘GV§ü)7aÚå‰uc!òíœN rj™C¹™#ÜǾ*ÔPÇ—j™ÈÁ#Z‡;•Ëb€iP©?¬ýN FŽö\ 6üÊ¡íÒ´ei¥—M±Ž0£“õ4’G‹µÐ0Æ0ECåêV§“]G¦&¯f¶—3\Cæ.ôùÐŽÞõ¬[¼º¤hÏæ#áw©?8=: úb½^NÒm]å´°Ûø¢M잌W ã=p yÇö”º…Ô»íÒ-[qŒñŽÃýk.KjŽJ‘H©,2Z«41pý3‚W>‡®j¶£5ýÜïròšA†ÛÇ@@üJÞ]5¦ÒËM¨¡‘Fá˜qßÓƒœó\Åýô°ÈŠ®KöñÛ’yªƒd´ì[Ó[d² ´~†·wýŠ2Ûo˜£kîl¨ Œƒÿ}ç¡»H¥±¶A‡ÂôÈ럭Msq<{¢$Jzýãýãîj\o+±y›VÓIqç?˜ñ•T,œÏAêMtƒoûåy ,K|Ûˆ ±þ‚¹¸ÓLƒK‘…Ô‹4ª³$ØÇ^Ÿ­\³ŠeÓä™\2ÇnÌWv?‡Ï“YK}FŸCJæéÔ™‹†iäàÉ… ‡9'Ó;¾¹Ç½Vk‹X™­^ÝÆH›rã>çœÆ¨}¢ïT´Œˆâ‘˜q=@ÉöãµJºœ÷61„áV!‚ÛsÞ¢ÄÊFRBÉLÊn#9È=^k_Dºº;´ømª\Ê®ö HÎP ɪÆfkXÒM¾iÉTuä¨íÅkij-ze·Ú 2Ž™œù⫘„îì[¸²¹ŽÚkÓncF£âƒÏçÁ¬‰|´P%ùAlþµjþýî.ÖÊL "’Áêy÷Éü*…ãGk«1·/-cÝó:ü¯ÆpG¶OåY¤Þ«aI\KYe–ÖYü—‘†.BärO¥]– JŠú4a)Îõ=AUt-EàŠD:Ã6^TïŒã˜Æ†ôÅr%’ ¸ @*pãœõæ®)=Ê+Yî!{m̘Ú>l:ŸÀqZV÷ˆ¹žìYÅÁ!7G{¡$Ö]´mDŽ#ŒíRGÞ'#?çÚ•ÚÙD!0ãy;œçŸÖ©>ã‹,I ¦Ïc4ä´x"?,_<åQŒb°’9'µ+ýØcnb0ÏÒ®Ê|¦tXmù08ñÁõªóêSÊ%œ0ņ*,{ŸCNá¹ny£‰0ãæîÛpGÓƒùÖeú´SåQÍÊrs“Бùõö­t»"ÎW™wË`°Æ'³¯›í¹e|ˆ°B÷çß¿ÿZº0s´Ûò)2{ ,HQã–#¦?úßΙÍÔzˆ–3½•³Õ»ãüúÔö÷RY,%$Ia}Ò9<{éPX™ÅÚ]Å(†4#&CǶçœÖS~ûl›6Ç·šê¢æÙÔ,Q²¾ü{äâ˜ûã’TKpð¡ùßÐqÔá«ê“^_*½ÃܳRØýOΰï.ÝoçL±Š0Ôgñ¬Ò»ÐMY—´ß.köó¬Ù•ÎUaaÇRNy#Rý¶Øió*¡i]ÀóKãË[0sh²ù¡1’ç$¸ükQ. Ç,#šUÇÍÇÌ@ÈÏ#­K²vcH.à{'‘-¼ØßvÀdõèx¬Ûx¦ÔnfgÞÓµ7Œç€ÇãV£®£mj—œn Ò1á}Ïåü«k_Ž•dD‡Ìã|Š1½²8íÖžÈ,aÏlbÓ¤YQ–äQ’3‘“ŸåÅTÞ»š'!6ÆTdgÿ×W.e1FNs¹¹êÝ¥Dëäé³ùѪ³ã O<÷Í$ûÌûh£ŽvFg’%Ü£mçÓ¿¨æ´–Äg™C – ô÷üEUŠîÞ+D´[uy YXò/çb-n¦h.®^QÃ;SNã¾–fÓi–ÖZtKss,SÌUüÖ@Z<8ÏN¿­W:Å¥ƒÜO%Ô—·q©Hr>Luzó\ÝÅåÙ¾{h'yXŸ/$HçGN•ó…ãÅv’G3íØB÷Ïqž3Z%¡\ÝŽþÐ=?ïëÑXÙÿôßòj(»´‘Ôë¶š„1\ÛÀb¹WªÌv ñ’=>‚²´øØÚÜIú\BAdNâ9ž•ªm IæMexùÁÚ·~`ò*hÿ|³°kfQ•.1ŽÄc=ƶ”w;y`ÝÌi¼9öÝñ+¨´†27'9Àçß…-†@+w5Õ¨òØb îaþÓf­ÿføœ¹œ…$¬ëùâ¦:Ük‡x Ævõ=3ž?ÏqI-ËÜܰM)Æé °B¹.Üûó“Yþ ¶ðIJË+F¬àX€%½*²išåÍ´Œ¶ÑËÐpÇè?Z†"y@†™-ܩѥ—î?\Óæ¢Œ$ÓíõEX´²®Ý¦âiî÷Æp>œÔ±ü8Ô[åIàfb2Äà(þµÞZÜÍ h‘iŒ¡+)Ç¥K&¦ÄrìÇ_׃։+“ÊŽSMøoua'˜n võÇð5­iðêÚ)㹚q<ˆ~éPýzÖ¡ºWc»ÄݼÀWóÍ[]BÙ"\ÄJ¨Éɨäê4±hÒ#Çx’ÕT¯”¨å‘À­Hí’$Tpƒ Ç Tp\<° £d= ÒŸöÐ ¤ÿ!þî‘ìiØ«Ç_Η b:‘Á*©PÌcîh°Ç¡ô?¥IœMV’åbœ…À5M®g½Ê[îD'R?ðb/Ïy o` àÉ'éRE粫€#øSƒÇJ¯g¦Çnªî“O˜GÌ~¾µmæ ã½>¢cÚWNK‚qŒGö©Yð˜}®ù“#š’8Ä+œŸÎ®í r×ÚØr긮ìU˜¯¾S`ú¿5˜Ð‚¥òª0ëî´¡TE<÷¢-±4N§,8Ïb*®¡ªIj„[Ú<¯·åçõ⤑Ô)éPHá°¿7'µSˆ±^ÜN·W$»Áb0ØßZÕó4ÁuEEq4p¯ïœô^¥°ïYm4ÓÎpSCuÿ=+'Ôi.Ð&#xËd ç8¦™Až@}ÏJ¦lÔ i" G4‚/Ëqü#¸>µ:©dÏ8POÐSAvrÄ…^ÀÉl%qžzÓŒ!@ÍÉÜzŽJZ09ŸØ}²Ñ vð;(9iY@QÜò2OÐט^ÚÇku ŸgÈWn sØô?ÝxâYn,ž{´Ý‘€ Ü{ç§ÁÝëwš”°GY·†=¥UfȈ#éX¥vÌ*5{”õX®a†ÙŠÊñu=î??éYÓD·0¤òÆ^H¤Ù,}7ÏáÅoÏfãN{½ÌòÄû¢YWçÉãŸ^¿Ê¨)»šÅ,ç)匫K`·Õ‡Z##%;­HÆ‹xšöÀŠ4±gJ‚“·‘×®j¹¥:œ.'Ž5ÉSÇLñý’Ê;¨m ݶlwã“Á<úÕ›ûhìÀkc• °–êǯ öþuwWÕ„º²‚I"œHÑÈßë`Û÷ÆO§=+{M1­µìq”h—äRÜœg?Ò²4w²žs-ÊÍö²Wcà•¡>½8ü+j{i B³Â–‹0“8ÁaŽ q×·ãXUÕêM–à Žã)$w– $ŽyòCÈãÞˆ¬E® •[“"«@ÑðAÈžªü7EÆÞ#-§Ê ˜ãŒþUQ§‚HUZß–]ý÷`€O¯JÉèK³%8¸GXöùª›¸^>ñÛ¸ü«JÊ$³™¤¹]œ†gWÈlr¸Çâ+âêm=Qî1ö4rF©sÐáGb?WÔµw™ÊFd '*ƒåŒ8÷çÿÕUÝ\­7D·Þd—ïxmÂZ íÊ‚F3×ÿ¯U,lò<ÆÖe˜‘«þp>´¶×SÃGä1UU›àžqúô­;bMœÁPWއ9ÿÙk9·Y=GýЬŠ0Q9$rýMIï‘4QÙÚùR’v ;€ê:Vk\H¢EØÀ2©Rxþ?ýoΚÒI{<2ÌbILdF¡zð?žiÇFɶ¦Þ–²ÞÙ{¯¦Û®ëÆÎ2}úYW“CäbæHCª)‘7´däw«öÑìº:\7ŒÖ“)rò—sœz♦Ü.T/„O°2GàqùÕ§¥†Õ´0å7·½Ü1\}‘ˆU7 #ö>Õ¿s«éðhØèêѤ€ˆ™NsÇ;~:túW?q{udßf[‰„oÒ=ÇnHëŽMhiÖÀ¤Ó\°Uˆ¯šPòÀ‚qÀþuMÛ`MÞÈivß+¦6"¦Aë9Ïâ?Z©!ÈyVl+ôfP ~_äT·òÁop¶ç_-™‹®qÆGJóó+‚ÍË”\?O›9ý:o–ò`ž¦Åœr\Ã*Ÿ–'”Æ>½ý*+H¼é\HHUeTò“Ç?OÖ´¡¹/QCÈ›T²ŒŽÏjÝÒ¢Ñ#³?ki$MåPTŒsž™þµrlqWÔÀh\K:y¥Uœ2ŽA côãð¬ØÑü˜ÃG¿2•’i99;WO¬E§˜¬¤™î. iÕׅ䜌™â¹‹“0»#ÎÂF¥ÙG ÷?­R}î´mEãh­ÞE‘•K3å[‘O¸Ž8,‘­Ž9SŽIúúõ¬pd—Ä$¸ Tt‚kL–h†c%Zp„tdäÀ rš V„Æææk…¾,°K»£\`ñùÕ¨ófª†RX• Tg&ª²n½µŽ5 ±f-G|gõ­Ò7·Ên¹1`aBô9÷¤Ö£}Š%­þÏ8,öÆr^?*ÒÓ<‹£'îÀd “Æ;óÀ¬d°7‰¾!)Æàœdp)× e0Z<‹)PªÌÜœq´óŒS²sM¯&ºa$¾[4` ` )ÒÅ,ÓÜÄ—2€êÄåp{Ðö¤²6ÓÚ²Cß»Ì$œ§AÒ›5±pB¦P|¬3ÌS„¹erJ¯¸Êò 9ß³9ùOAVbšX$[…TÞ¤àϸüê°ŠO³3˜ó)8ü³ùT¾VäŠß:p;•îÜ‚úè6e’}fK˜Ë?.$EÀV¯ÿ^¯Þ³^CáL˜‡–ìHÏ$úJÏo,[I€Ì ´qÓ½hC3ØD#‡ÉòK˸ç¿_έ^åE­LŒCÿ='ÿ¿tV·kýôÿ¿gÿ‹¢«”Zõ•œåÃ$1©wcÉlv#¥O9û<*ÑÊ»õ,£Ö–Ì-¼r¤Q‚FŒNÐO¿°Í1 >wî›çcó9û½2ö=}+±Dël{F¡¤bû¢P6¿B}GéTï5;5ä{9…s€{Û<õ«lñî "•‡d ½ò ¦ùvæ)í`ƒïàÌ0\c¹¢Ã¹aZ8ìãu”,’ŒíQœÿTó3>ÓòÈ>[°qÕfÊÕ m¬’Â…À;U˜§Kå S*±à©àýqE²¢–V„ ýÌyù˜…ð© Žd»F¾XDϾsвm¶Î~ê{úRƒ‰ OÐöþTlO:îy¦3[Æ8ùQzŸzuÕœÛD±Û©RÕ’2¿ÏŠ·%ÀŽ ¢bð0¤ãêjyÄlÞb»)RrÌãÅ&DoÚ\<¶i 9åã'#ž£û­2(¡WŠæpàçÉ#ߚѵ¹Hl¶DI#9 8÷ª žUÚ§ £ʦI½‡v6¦¸¶òâ»’=ØŸÞ³aѧ³Ô"¼›R72Ç’¾j¶Õü^¿oÝ]mþdr»€ë’; T÷3I!I-ÝYÜâG?t}jBáö›Ï1„ÐÛJTná™p3î8ëV—S½‹b›f\ŒUð1P]µÙlF‚U@XÔ/ýõýï¥B¶qj-d—zϼ’RBŽ*¹P]—¯t\| ‚HÿRÙ‘59Õ¢ÞÊ7 nPaùŠmÅ»A1„#´dïÚè¿ÿZ’â! qÇ4kó±"@¼ýirê –à¾‚X•£W98#?T»™Ù‡Ê¸Ú@$tëÅeÏ"ý–àÃ<^V@žHÏo_ËÒª­»y1°Ÿ,H$r­oåùÓäÖáÌuOqh±+}¨3ó@üè[„î$çŒ ×?+]yic¶w(Ÿb8?OjDSl"n#;Žẇ$ŸC‘EÄtm?3øV}ή‘²Ç ‰œèª}ÎåXóÏ©´ Š(-»t¤nçÖˆå“g–mLh£;•Á?äQq¤‹°¬ÒÎÓË!bÕÀQíÅZV >Q›¨¬ëmNØ&˜Æ~ú0þc,ú…ƒ&#¹VcƒÁê+vh’F”Ò#7ÊÌݰx¨¶Âç…‡>õJíÞ»ò9ÏQÏúÕ›‰ö²>ͬ>SâÿÕRÀ´IÇá\•Ã$º„pEvª2ß!ã/ŽÙþUÕ)YwFÄ /?T†ÎÂÀ¼‚4R ±väßš‰+‰«žsâ[K›}Òh'b0ûăŽøP~œsÖ¸mÉšâe–;— 2LdUõ#Óñ¯oÖ®«gå+«ÀÄ«I˜ÚÜvï^~þ*ngÓ£â|ùFÞxê{víSkFÆS§w¡’o¬­Òâ¤i°˜ )ÚF?úø5—oi:…8æ,ä¡$¼zöüêå¿„î¯]|…ó%2dºFGœóøõ­–ðÆ lmfò7g'r€02:çŒã¿µ¼ªèÇ‘ÇcšEYçGÈŒ29 SV ?˜K9d<éÈÆsWot+‹tóâVˆKŒHNr;ã¨Ii%¼¡ZA¹Pykâ'œ÷íj åO*Î>R¢D½nŽ92®Ï?ËJ¨Ú¸žÐù‰"\|¨™ÀR1Î}óMÓ/¦¶˜Ëgi72`ã }©u!¹’IAÎÜóþ4¬¯¨¯ ¤ê0BŒÌç @°Gq$ÐC¸NÈç•Î={~uT›°åW{B‡iT“î¨ÿ?­C·ËhßvH$r1O^ô8‹bÕ¤ÒÜ:›ÙYÒÂ’rì?•^Ô¡·bò¯b¸’D…p8÷î? †ú?±-£±¨Ùµ@vœŸ^i·?gxíc¹T@Ð ±<Ä})hUÕ¬ZŠæî;SE󹑉±Ø~~U­¢_XZ^J÷ï$a]1‚Àäg×±§†[»ˆ.Äi ]Î[ ù楹°ìÏ·1Öf*!‰÷6îAϧB~†“Wz=M‰"ºÖ—PÖ<ØÌ+òÆ®Øgo< t£Ò¬¥¾ŽI·+Im ä/uªþ öÍexb·ó× ò–\É$vü*¥öT’Á&Ä<¡™O ÿ nî +\¦ÓHncp@Œà Ž˜èäkjÞn5;8î]a¥Ü]ºcüñTäÕôµ‰¬Æ’•™ä}ç=‰ËéZÖÖOr`{³J£d‰)Â1 `1‘íÚ“Ž¢Q459ômšÊ %3 æ‚Øçý?z§ªÙC èœ3àyc÷íYòéz¥¬·"X£vŒå’6ÉÁçåõ¬-SQ¹‘Ä’;Êä¯Î `:`~<Ž»iZòÐ] KduÞ#Êç¡ãB(bŠ"“Pí¼g¾;:‰$áM³¡!J6_~†´®´ûq¢Åw Øyã*³!^"SÇ'×·ãDbödF-“ºÊ¶n©˜ÐýÓœ'ðÏçT\Kk,&yLŒØçv1õ­d¹Ò¦Òb†_7íÈCɆʷ³zuþu%ή¢ñÃOµäO)•Ô0õ'ÛŽT¢Ñv¶á!Ÿqo$ˆÉ·y;B·ob=ºóTÌv“j[Ï!…OžêÁÈÆ8î:TòCq#„¸-*㌶7œv÷995¥¨ép]h¢òÖÑ€,í …À¶zƒÓÖ¥FÃåkR´Í}i©X³Ë–Ì}¤ plã?•B¶ÖðAŽMÒ1"‘Èà“Æ²ÅÙg{9CåpýI—ò« +ÛÝM,fEíVCО:{cÆ­´µ”o±zßKšÞY‹ÙÛÊ}ÍÉ{‘Ž*;¨ä´¾k+yâBãæAœ“ÏòþT«¬]܈nf¸/²S³=¹Ë¦¿šHî-šA¨’á†3О´ž£÷Y‚lî¬o˜Üy‹,nNdë·µD°KÙ6±6ç·×ô®†[kÝBîK™#iÙ@bûz õü}=*‰‚o±N× @gÊ£JO§&—0žÄ:{}öY Â+cwþu§5®Û5y&Jü¬`OóÅQš ±FeyÎO»ÔĤLJ´b,Q×#ÿ׊†î aÝ]A䎦™;Jƒhùb:ÆŸD&B»Å$Û†Ó·‚0ÃÛÖŽkô*-±{P¥Ï¿'Š@I%æÎà <ñŒôþUzÖ8%•VVa=Wþ¼t¨äÃsû†2’Û÷†–*ã'`Eo>×þž?ï¶ÿ+Gm·üû7ýößãE>dQèfÖÝ•b’峯^üŠgÎò…U!p½ò:tªÎª<©™O æ2I=sǽG)•Îôš@ÃX6¨ý+ÒHëf¼»>R‘ž2qÓÚ¡eT 6O=‰=ɦÍû¨³–Üsµ@ä4:ÆÛ€˜F[ ߘ¤;—¤¸‘´äÓãC¹@ÝŒ¹íšphâUŒ’A<3ü¾•Žò¼wÿ½;¶¹9Xó.¥˜®ØË`3 JWê—™§ïCÒ.9ÈÚ5V;ødG óп•Gæ ±•˜Ÿ™:â¥o.PvžAÈ$mü¿:`LŒ|Ϊç5E:ªÚ]ÕÙ·¼œS.Rx!Nç1nM3prËs†Œœn€¤Çb›àÊÊPàn-†Ÿz·•eï,°Q‘žpqÒ§{H%Hå’\ä#©,GaŸþµgÝÜ'Ú…¤xHÛŒ¨ôïÖ‡¨–…Ø€ˆ(–TÉ;˜nçBGz©¾+i<â¡üÆ%÷Ë¿óªÝ´V¸vvyŽ+öÇJž+T•.Ø8’F; ç;NsÛ­ %°nQF{™þ݉@ C@ (?ÿ^­F°ÌŒ.V(@ÒyžüU›}67Œ#ÏåJ8tS3ëϨjöæÞEŠUi£|eäÝ»¨ééM ,ù,“[Á#HùÊ6~)×{»¯³ âù·:€G3ùV|ú¾m´{Aè±Ä7sÇçPͪ:\m‰#¨g.x\ûuSµÐ™¥2Ç=¼ÒGp¢5Ú 0äãÔÔ-6Õ \.ÇáNK6GŒæ‹¸ŒæÔBæhF×`#¨é’9¤UK´W‰¼¡½Bª`U—z•u ÈLÓKt°£$œ³ä¸ÏLþU¥6¦×¯om¥[ÊÀå‰hð£éŸæ­:óm¯0³ r¥ÇËíÏJ§ö™o-lBD@Úiå{ÄŒÕ!1<ÉÈ‘(>^uçåÅH—)·bãví‡vO>â‹#2ʯ3‰F£cúàzTwl-Oڤ£0UebIÏ®i;$ å«–]…JæM»Uc_”ëUSL³yº‚2ÅHUaÏ^HÇàk8ëSÁo+\ªEp±‚ʼŽã>¢¬éº´WVâô…ldI¸ Ÿ—=¾¤VQ’“°st#ºÐâ $7Ä㢫g?Lç¾8ì·¶ ç½Ñ•cùˆ’1‘Ï·øVÄÍNüÌÜ’O>Ô×(ds(ŒÇ“œ±àc"œ£®…&ÑJ=^ý-VfµŠUr@hØ‚xÏB)YçSsoqm©dRG8ô«°ÉhñyÀ~óp@NTvàzry§}±B ‹ËÊÈPúžýhpº?r­¬Z"ÝG-¤ñoUÚ¨øzÑ«Mr’$0RÁpp}:j Û;=Fê /‚ùe3¾Ælb«]xq¡‚Þm?Q¹‰™ŽV\ŸµgìÒÔ¥$ѹ¢ÞH¶(²Û¤R–T^åZ‹{èü£)^ä+`Ÿ­p &¯bî^X¤Æl#-žqŒñÔv¨­u «›‰fxd‰ÆõoéW ‘z37g±Ú·…íåº3—ŒõÆG¿5Çø›L²m`ØÙÂDËÁ^Fìgi¶ךØÓüC{Û?Î3Á`WÆ©[jö2x¨ÉxÂ'bs¿@œáiÔ†sgA¼w)oktP.Kn¸÷è?Ç»†æÆvß…Tߎxýø×»[=¤ÛÄE8àTu/ Øß«„ŒòH8üxü+7AÇb}š<š&Ïþº?’QŒgßê)“´‘9»wf˜Ç#!Á±Aü«Óµ?†Î\5£G¹rx,ÙäŒþqà›ë_6–,`‘רã¥dî·F|3Œ ö™Ô™ ü« áA¡Çnio 7HNÒ=v°í´ÿõ»×fþ ¸¸µYJ@Û¶O6<\ó‚G8óXÚ†‘p— k+°(1NCdd~€Š—¦ãtÝŒeša"ùdˆ€eÏð|ýOó¢;Éì¦Y`rýÎ8'ç=GZÙL²UÉ`§'€ú稫0éRKs"´`^\œc¨ïÚ›hN,ÕÐaŽê&ñ'”Æ­ óËœŸ¡ÀúÖ”d…\–FB ëëŸlTòÇyËs %´q†Ww°óÁ©ôMRæÓíÄ2,’E°¡R|ÜŽ€ãŽ˜=(¶Ë{!·/co-³ÙÉ)Ü7¼£‚¤dcó?…kÜI¦Ïáæ¸·»ò.¡?½Þßxàpär= eßjÁmá[P% 7c’Ûs“Û“Ÿ~•5Äfúd†ßxrFN~f=ù¦žŽÇC¤ê‹|Ë ]#!XÙ\ ÉíÏ=þµ=Ôj×ÄÑÛ^Ém…eˆ–IJóžÙ9Ï…piúuÌ»ä’Sþ¥ÉÈý kØýª YRÊáݧ‘V8•yf'ž¾ô8[aZÛüÞÇ ù··‚è!YQ£T €ß]§§Ò²­‘®P%´²$Qæ!$´œôè:Ug¾Ô5-®™ša L1Áã·¥iZË&Ÿõn_Èʸxºçéž)4û„“zÜX#Žk뻈IXÔa™Gßn8½ÍlÝn¬¬ô›ˆÛc Vd”8ç¡ìp•eÙY< Kf’DŒ³îUÆñê­Rst,ÖK˜Ù£»öÁÇ*Wp‹¶Å¯=ÌQÚ§I~ò A9QéÆ3ëJ³m©ßi÷ =Xä>hÛæ“É Æ®L&×-,×Îóõ4B"|¾å·c½`N²5Ä–÷,Ë>7n#c¦}3Uè÷пü–¶÷QÏl“5ØÊNÝïÈéƒR´´M13ɰ.@'i##ú~u‘cg9¸F3mÚH3üg‚÷së]®£û¹ôýD¥´;Œžo—–cüô©’¾…Zúó3Eh±”+½ˆ`LtýI­[;´H¸d(“t€sÎ3õ¨n<¡f‹$J[ådnr8ÿ=k6Æýâ€À ß¾áJDZ?ŸoÒ¥ʺ›6WÃÆeNH-Á8õöÆi÷×Òj\©eŒ2X³g?€éǽ7H°†úi–êábØ£;”ã'üþ•vÚÙ®&`¸DœØ-O^•}¯mH§’GÄOlÁ‰;K ãœü¾”ÝCH·Fl.›0fÄ®«‚¸ã ñÐÔÚuÝ¿ömá»—a!™K ¨ã¿~¤t¬[¤o.tå!¶¶ÐGqÞš]J}É%cgpmÊrŠwÈÏ­?!¥$F$$t–Iµ3æýÎ7ŒñŽçÚ´n®!†`³„Ç ²çv}MKI½ÌÒ¹ë„l.Ò@ÈúTPBÂRÌùfç§ARɲ(Q¼ÔbÃ'ã×5 nY”〣Ö„µf;ìÍýïüˆ(¦yÇþyMúÑEÄzFœÍ*´n¯æ8"0€x$Ž˜÷«RÆa´2î·ÌGqå¹É9úôCO‡Q¸k—kˆRLüÌ>f-Ù@©ÞÝV ­§¼3²8wä0'©ÏÐö¯\î.åHГÇßÏþ¿õ¦B³C1kÒ ”´iÐg¡Å,6wbu¸iqà ƒæ\þŸ…6;‡Y[Ëó¶ „s8g æ€&ò•Zdƒ÷Hü·¢Š´Ñ¢§ÎÌÙ%O̓׭0F‰:»32•è€Öª4äʈªó1n¿À£¶ONÕ6cдÉîòצãÔ§çùS.Ÿ[ù[È‘±ˆÇ ÛúRܪ”[€Ëòœ†n¹ÏùëOy®g¼!î”ÀÐ7zg­KÜkÆ÷b§wÞà~éRË4,¦VFȲÇyè{S¸[QWÎ3,›[¹ÇvaÏAšr} Þͬ FX±v]¹ëšµT”©;IrX(=ñJ#„ÛÈŒ„Œ?Õ¹8ÉÏ<}(†y…õ)<¹/Œ¼cƒ´òsÓ±¤eí-ÐÆÑç{#õÝ‘‚ ?|6ÐÜœ’Q²C ¹çÒ5þÓuˆ¢D9$–åÏÏnýé¦+„áYÕq&üùƒøÇ§Ó½'ØÛÉ܃"IÈgáO<¯Z«3êÐÝ·ÙcRv2çváŸÇ·ò­· öO*éÁ@`còsŽh[«&™•ªl»dpwϸc=¹%€ΛÁùéïÍNc’ÍÅÚù›ÓÛýz© ‹µÄ-ØlÆCÂän#ÔžÝè¬iÛÛÍ4ûÔÔ@ê6ç§èj–¡i+_'Ss‘ q•ÿ=i|û»XöÛÄ𜑷ÜÜtëÅ,šÌ’HËÂbáÎq“ØŸñ¥¸-†ZÅÆ@dRIùAv?­2âî7_*âHZ5#ï®p ^ô“ysl› æ «ÄñŽß©¤ JªHñ±gÚ9ÇAÅ'm˜ns—ÚUÞ­bޱ¬RïÂ)bvŒvéWôm;K0ËW³Ò†;yŸO\gšÒ¶JÎg•9E÷çï‘VÕÈ “Ëeä¼H?AøÒI^èZ·´H mÀcÔö4m[ˆü¹QveðwpO^”ô´ûKß9²·*Þ¼ûI#Æ&6êêF ³d€O¥0,â‡ËHÜ¢Ä7Á?:úäšž d.ˆS˹µSPÜm$I òÉ$lr>e¯â*ºª $d€ä‚Ç~ã¸â£–/PL}Ο]Â2²3lR=¹ý«˜›Nu׸€F§ËQ¼têGàk®}F/5y>ddäqJÉñ íŒ^"‰¼äû!Pä(ÀÈ' ó×éZ[ v!µ»š w8Q΋¹­XjkÝJ;öA%¤® Uߌþ=+ž¥&ÝÓ4Œ—RÍ¥™žCötFs¹ÃÄyüi·z6Ÿ±„ð°g’™ qOϯ5{O)2:hG1ÜX‚˜+è1V”)#5̾i=ݸük)Q›EsG©ÇêŠþÌ‹KuO.PšûvàçåãxïÚ¸«­:}0F²•7^v$عÛ9äuüëÚÓLBDÆÌr}k.ïÃKyÌÉ,›FУ`æ’£%¡Œã±ã×v¶öÁá‘‹®ç|Ädz“Ž™ãÞ²«Çp¶£`$ýíÅAè~¿á^¯qàë{™<–šfh”ƒ³÷³»ž‡ük<+h..m ”Û¨&äÈ\p¯_ZQMt"T»­Ö¦úͯÙÎÕ¯-úŸï®1ÆNIg¿z£`öÖºž/!•q´Ç&ÂpÃ9÷ÀÅt³øB]šïíqËò$ ¿þµs·ºt°Oö´-•2I¹1®xÉ'ëT®Ý…Êî_…tûß5ËË%µ¬r‚Á`0HÇ=r=êÍÕ³j7éº,PíÊñµÉ'©ΰæ–Òß3†¹—˜þ‡üj[-zædXâýÎÀ¸*FìýzõÏâ²zÈêm~ÏczÖ·È·ÛÄU£Î{‚Ïu½ìQ­¤¬¯+•ˆ3ãvr}ÕGPu[˜å0] ²ªìïÈÔ }zÔQ^\}­¤ØñÅ!Cé_ÃÓÞ„¬´¬íc_Iº»ÒnÜ[NÂëË1î*ÅN:íÇZcË=­íÕÝàW™Ø‚Ã’ÙᇽW€{9Úîà,›÷DPnÞÞ稦Æì³ââ‘·¼Ø+Ç^z÷¤úö&ÎÖ4,ö'Q·dY$`²/˜w*ŽœcŒšKý'6És4wHbc9ù'ëüª¡»ŽÏSÛ©dÚ ŠÍ‘ƒÎp=*k[Æ,ð’žCBqÃcü=jYI-‡Ï# g–6Ü›Øyà  ʨGö´ÈCB'Ìpuéš»u Çî@bxUõÆp?:m–™yq+ÜñòäIÈãôÉüª<º’,—Vó0V’-džänP~½êÔ7­2ÂCÛ[p<`tߟ¬M«X^hñÃx¤Ý¸uIQ¹RqÓc½RÓ¾ÍÓÛ_‹‘ÐA€sÖ•š³@Ö¦†±qcŸgqc¶YKys \ïÏ'j£y­ÝÞnå#H°DJ¡vœJ‚þSw5­„âU]’&ó·æã?•eÅ%ÂÝ;/#grŽãž ZÜM›é¨éòi Ak Û¤ub[w<éô«vÚµ­ªIæ9‘Hc(!‡¦=3\æ€öú}ó߲ôœ6ÖÏR=ªÕìï©ê“Imàª#ÓÓžiÙ'qÅÛS híõ·Eíáó!ã=?Oª[À%Ó¥†e‘ú±Ø=^‚¢hn4Û—vÒ U†@qœžëV.oá´u»´žE‘Áä2}F?‘êlÙZ5s?̹öü¨¦lKÿ=WòZ*½™6‰é¡¯•#¸Ü\”ÂO¡ü)†ÙXfFv?(< òHzUkÍNÖ XDC>V†<ÿצ۴’¿îÌnÒ)‰ è½z7¾ÇS²z—„SÊóoü¹Rü~´C$Q‡™J WTœü?Æ«ÜȲ~àÎcØÄ±Ž09ÍIk4vñ,¦ÝšB¤ä“_ZlHŸlí!e`$?2"®nj¹Wx³$ÅäVùaQÂ×ÛùÔ²ÌYB%òóÏËÆ};T±?žË#.écVFôÇJÊ’?`“;ÐtPpj[&Úž98N0>SœuÇ~*¥Ì‹ÄE±ÊÜ“VÒFpé$²B®sæ ™©:«Iºgaó|ß>{ôϾ 1¤µt.·K R1ýzg4õå_*ÖGaÉ X{¶}j½µ­ÁyhÄÇ µœ¼xÉÿ«âÚ¢Á-Ô““×®jꈮ­DrbH0Q°Ü³o¨úU Ô$–ûX7>^z~Õ9VÞ+t¹‹;20tõý)+€ëX#¸½w£uØvOÝÿõTrYÜ â×kË–ÀÏ®_þ½iÛ²5¶>ωoWZ©!H$Ÿ0D2‡'=ºç¥aÜŽh"[¸üöÞd^v¾Fç¾sSˆDN&±š@Šv°dùœzäSíü•ÕVøZ#¦#!2_<žÏJKìCk4Û#WýçÌqǦ;Q¡%S%Ĩëo0Á²ÝŽÏz¸–—2ón2"î9“$•ŸnMV·i#1¼%P¢ïlü™àw<àcó«âe‚nK,ÒG—g=¿‡¯­0OB(²¹‘Ä{‰;a,0Íß늡,övÅ^5Ž9$pMÄ…cœaW=<ñUoÍÝ´ââxoãhÁùñØ/¿¨¬Éôm^öâ9¦¸‚ 3/^zð*y»!Ü鄯s!Û™Ë)3ÿùã·ùë:ùÑÌ¢b%óŽÀŠ[aÄñÔvªöð]Ëp.#›äBv¡ÚqN=sÍGq#ÜßÄÍypÆAûËXy úžœ ~] Ì–ÖÍåQw8`ƒ$lR œqíþE[žòëxTZA<‚É7”1üúbŸ>M×î÷ºÊÄ4O19L`~£õ¨5;˜í­ce¶FÜ2rxã ÷¦·Ô7`l`±>qoß°Ãò>€ôãµH×’OhÑGwL…R[' *uŽQ;N®bÆb/ÓÛ߯òÍW«{)»4L8 £½qõéÅ+…ÆÄ`’%XÚLÄÀHd` õ#Ðõ¢ ®îåS#nd3JqÇ=ò;R]Lßd–èGʹlÈÀÿõ«>ÍuµÔ¼Á,o òËH¬¥W<öÇaß4î¬-MIædhá¿gåB‚å€>¼gºUµ‡êY<ÆÝ1o›æcÐYHˆòåe¸ˆ|Ü‚d9éÐã=k™k™­µÉÐÍrʼnl¿!}Hü8š[c¬zZÈe†ÐÅæüÎlýsºîŸi¬êzi1¥»n3 8lƒ´c¹Ö¼zíýõ»ÁfÑ’À£©Û¿õü)N´Žh–FŒyN à;`ÇÞ¬ƒq ÝÉb‘ZVþK<ƒoQV_A–3<Ó €B·ã¥^>hòâ’7ŽRä¸êAáqëL¹Õ^+iZ[v”ÎýÒqë×­ ­ØÈ^ÎÖ7ýÍš:ôÁÀàõÀý:ªt‡¸ÄªÊYpCœ‚ßÓëVtDúE£Ï6d–à¶ëZvRÇ.§ä– S–,p+5½ÐîrrZ:1IÔ¤‹Ã0zâ“dbdBÞfÒÎGÿ®»cdŽ1IÃt šÄ6JK$1‚Û‰S׸­ÓV#3îE´ŒÈr˜àý{ÒÜ¡ŸtW "bÂÙ•Kyw6¾SH¬øÆuç·åT#’D‡ËtzoÉÓž´Ö›ÙØxŽ¡Q$BýÜ gð5zrÊݬâ7Âÿ-qÍls—¸úæª …žBãÜ ÈàƒõïM;ŒîäP÷ €¬X’YžÝêÂXBŽY‰lÿ{“\5–£un¹†e-œ­òŸÆµ­üK{ââ$r½GCþ)&6Ά]"ÍÕ·Âã9=OãY:Æ&‚(ೊT~J»‚ z}}[µñ%¬çl¬#8ç5± ñN7#£.: $ñÝkJÒôèi,±"¿•*Úwaˆ9{öé\…öˆïzÿfµ*CùFT/oþ½}weo}“q Ir†k"ç@¶ŠOµ[Ú«Î ¿h$Ö2¥/²+8_¾¦Ò§œ²+)ùY‰á?¥møQ·…Íåá‘Þ/”|nÏøqǽzN³àKb7‹ › G“ÆP1\s\ܾƒM‹Ëk¨á• FèÒ3ƒÏ^{ÔMi°¥Ýœ«^ÆòÉ ¯åBî] ®æÆ2·aŠ| '¼ÚÎ<–?{'ÔöÿëÖýDžƧy·ÓüȆsAoS“I}à»› fÔ,.eEV"eǦGÒ¥ÇMÁt3o4»›kDžú/,°*¯Þ\÷ÿ>ÕVX`pày®Ê±ŸUöý+¦½kÝnÎÝ)`®79àsÁÿëÖ4ši²™!¸ßK;ÂUTBÝŽ+=z‹•¢)®SÍŒý¡Q×'æ8É#·©éúÖÆŸo%à‹ÊÿR¬Œd~žõμQÝÛ‰¦*Â<䢑Ïg×zÒF·¶‘ D‰nb7{ç=k9E^æOI\XžÛOÖ¦µ½gHÈ œ®Ó×ë[o¯âÚòxƒ4q|¾[€íŒ›==±\®«k7Ëu$±3;žòzsî9«º&œÚ•Ãï–5…P+&1¼žv÷­[¢”ºèzMÕê½ô(؈|ÄœƒÁíÖ™¦}™/EÝ×ï—8uVÈ=‡j»l¶Ö³¸•>b½¶ˆ12 ƒØ`dþ!7bÕcŽäº2 žHç±ê9éW¤’ÐZ»\Cž2’w¾;ƒþzÕ]='w¡7Ø$ÿ Œ?ø ÿÙÑXžhõoóøQUÊ-OW²Ò¤6#Ø1Àt¦3Àúñš–n܈Õö¯_}ϽWmìt‘$è®’à` ãØgŸÊŠ(@˳GašOõoåÆIÅG|Éhcó"‚VÅ’XôÐñE6ÔXtõtÄ  #ÅÁ«Ä`0Çæ4›Ón?„ŒÎ?*(¢ÚÈãKI²@óX± ŽŸçŠXZâtØ®€Â|¸ÁÇoÇQ@ìRw1\.ë¸Ô+e@RL‡©Oz±qå¨W£ N3ð‚(¢®*è—¹fqqòeFQÆû¾„ÖtqÂ5 l ‹Ï‘y‘²Ù<äçT­ÆËï5ÏÙVWdX3å+`ŸóœV}Ï•³ïf^„÷çÖŠ*^Œ–jËcqönü¨•v §;à‚±õ ÊʬฉNõq¸áG-ôGÖŠ)ììJ/⼉ae—j( #¨ü¿úãÖ«<Ž.ÃlfO3pŠD ÆG~I>œQE]•Á[Ü™6yB%lÊYAÈç§FZŽT†ìǬK=܉æF<Î$Bs•ϳǥVQm²šÐYãˆC¼öµã¾™É=zû~”—׳ÛÁS´:€¥Æ PAÇÖŠ(ml9o¬£í¶2™SË }ÕcÛØž¿Ig±[¼Â$GÜ£ÌÚ¥•sÈõÉõ¢ŠÓbVåo9b¸™Ò‚2Ká·de±žjHÙîL«*|¼°ùÆx#¨}袦_ )uê¶ömy^¢s=úÏ#Ï“Œ—“¶r=h¢³â‰ÉŒå˜ÀQïÛ°ëéUQo5e’Î ô†V\y¡9äŽzäw”QR;”Ìn?³®n%YI–3œ{zñÏ^•~æ÷ì;§Ûlí !ËãwÈz·^8ïE¤w4Ái©é멤ÆDuÉ}Ù8ÏןëTåÓíáû;ü±‰ís‚: Gc‘ÚŠ+ɶÑmir!¦ÝCÂÑì! žZrHîyüÿ ª¨P,Hn¾þýqÚŠ*á&D„2m}ÄãoúCVRæh2ÑHÊHþFh¢µ$Ù±ñ%Ú(,VEßη-õûIB‰A‰˜ñÆy¢Š¥¨pÍ Â "uuìES½Ñ4ÝBužòÆ ¤Q´4ˆ Š)Ê(kk++q¨†5ØV%Õ±¹†h–ÜÇ|À·'ØÐQED¢•¬3:ÇÁM¶úaÎY†üzdô­éôx®àŽ+†i8ÛŸ¼=­TÆ*÷%˜÷~Ò–9Qá"?€(8뎵Åj¼òþYàTSœ؆ ÷lqÅTÔ„tŸu Ýd†8„¯ m8Oõgï}qÿë¬ÅZ¤­:½®Ã¶6BA'=>ŸZ(®)+JÈÎjÏ@°x¡»Šâ$Pû%È»€Aÿ¡L ñ`¼'ã)¤÷NÝÝbâ;¶:‚á÷‚õwì»72󉿫Íö?Û2ßó½€™ËÕ6„-í*e2;¥\Ïün—a…úçQÌÅS£éIEND®B`‚leptonica-1.70/prog/lion-page.00016.jpg0000444000175000017500000014076211330622156015505 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀŒÐ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ LÒÓqI°4f“Š5M j‚æ/5–ÀÈ'™å$ m'oO½Rçb’¹o"ŒÕ6•"˜’@ïš§.±m¢Èÿ;ÿž†§Ú¡û6ö6(¬˜õt˜°GLОjíåó¼œ&â:–Æ):Ñ]Ù³w4Vd÷w1D|¦|d¡<Š…uWÎ6‡Çp?>ô:Ñ[‡³fÍU#¼I#ß÷G½U»Õã´ÀuÎOðö¤«Áì.Fjä 3T!Ôñ‰QsfëR›’®«å±ÏñvÕT&™nŒÕdº !Œžµ.æÀ#Q¨¥°X~hÍP¾ºš¢//'9-Ûð§Y]<öË$È#âà{Ñíì.æŠÍÓõTÔMÁˆ¨XŸnsÖ´|»³Ç­ZwÕ~h¨šdRAa‘Ú˜—Q7ͼÓši0'4µ™U¶3Ç ¨ç» 8-Æx£Q]³Fj‰¿ øÀ9©ë…óWk0è9§fÈ´H&“pÆ{VDÞ µƒ_·ÑÜ>Xüν*Ü÷ž\›iõ–£zn]ÑU¾Ð¢2Û¯J®/ÝQ “ÜûS³JŠ€Ü(p298ëNiB¶ (ÏL÷¤´U/¶äp´²PGCCÐÒUY.vrª àóš/Ë9(8Îïþµô/Ræ³ÍùYnôqš®u…ä!wä/nij SbŠ£m¨-ÐÞÔõ&§k… ÏãJàOEF„¡¤ICª‘ÔŒâŽ`%¢š\Ó¸QLŠ( Š( Š¡¥jvúÖ—o¨ÚyŸg¸A$~bb±äUñ@Q@Q@ ¨¦ž8P¼ŽGv8©Mrú‡Û_Tµ™–®]v¯æj*MA]šR¦¦ìÙ±úO!X·>~e$`S,“6á*ªàðç#ò®Z]n=xí$ýõä̪º à~´ßˆëéÉÅqu E+Àcœ~Ÿsû^d\éÙ«lië~,Ót !ŽèÈ|ÑPgÞ²5ï-´PÉh<Ï;„=Ey·ñÝ[<„,Ûò’î ±Hçžæ½OŠËQÒ`hgC I‘»–ã9Î+ ²mYÆ•ÍdÔî›I3ÊNB3Ã5ƒ,÷W:]–¢D:½£?Â3ïëŸÎ—OÖ,o¯ŸOF-Œ†eRB?­^—ìš.’ Á®L`ˆ¡•ƺ…ào¥*p|º•fµ+AzmåŽæYü•8ÆsÇLóÅ[e¿¿2I ¯”ϲ0çn{UK=\•xšÒ´À¡ñåä) àÀbœ¾*›Y±ºÒaxm/™@‰×î‘õ«Œ[†ã”ô4înŠMÓ£~vÎqŽõŸ&¸ˆ‘ˆwMÌqéTN—¬éšdÑyr$¿ñòW¨ò9ª—q%÷Š¢Ò,c 僌zšä—<£x”¢˜µI®Ë‘—¿qàqëZm,-m ‚áX®î:r:V•¨Ã{â[ÿ ZÄ%1æ\ž€ŒpùëRj—vDpÚÊ‹su ‡pmE'¢Ÿ`)ÂHô܉òÛCkL×£¶I–%]ŠØÚÇ¿·JÑT[ɤýÙCŒçÏoÇ¥yåÔï{=À¶™¤w*Ç´ëóc¸«w·š€É§°Œ`â6óïØ~­=§$¬™›¥tví{öpò ÚàóÎ=êq­È q€Ÿï˜_jäìžþæË™»¶JÄ0>ųœÓ S[Yþy`GûÄæµuÒÔÅÒ±ÙÜÉ%á1Å*ºÈ¤‘ÇsMs}¤êfå®U-Øc!' 1Û§­ÌœE¾À€ öoj˜Y _A†ÚûpfPÜ6"ºiÞòOTc;ÇCzÎêÙ£&U¾bãô§\j1¬"3¸‚ÀdO­sº&–ÚK•¥Š\m¢Ÿþ½j0!öŒ±>˜ÕÙ¦´V3i’Åv¥¤ H`Ä}íÜv?=gòÜùç¦kL`ÐË(*¥[ËÀà¼f§eX‘´°ëEQlÑ–i$¹IÁmËÊŸJ©s¨M&C£ìwž†£û[: p9=(ùÙY›sØf«• BÂÃu#.ठò3ÓÞ¯& Á•³Ác­dË’ÀF@éøÔ–˜s)ùÈúRqê¬óïkòŸˆ&hU´hâM§©Ç<ãÞ½#ûZÊîYa[µ–ê¾r.2;â¼?U–âÌn-ƒÀ·ÆIϘàäsé€+°ðeÅÔÞ;šâ[V†È™Ö1ÈoNkš®Î§MÊ+MD–l0¶Aއñ¡&±ÉÃîqÉ=)¯éäŠ §îç? ôâ¢{«HdV‰ƒžvƒë]6¹Š‹5휡ó®,\íÈäÓ'½’K…f°/ “ëÿꬫ­IŸkFªqÉg9ª3Ü38rêÄúŸJŸgq¨¶lKt›HB]‡?ìƒTu=NþæÂhí%mƒjŽÇùõªÊX¹bË'¹æ3; T=³SÈÙNN{M’ò©#›Qk?˜þì’qß­oI¬O`LRá?x‡'ñ¦µ­½ë”œ€Ê~òŸ›óª·ºeÊxÚU3‰Êà#ÓÚ’„æÔ–Æ‹jžcA¨[0eL«àò3íY…ÃÙ]ÝÏlÞS¾×ê;çèEaÛý¨ß°Œ5 c‰<¶Y{õà¥tV>ŽêÄ6‰e;÷–_ÏëùÔÔª£ÓR©Ð¾½ }7U“Q²ˆÃ ]«÷œmÞ}GªñÁ¸–ææMÌ痵bE$šzÄ¡ €)Û²GÁüMõàTwŒE;â6{~9®5:“Ñ+Ô¡ꎶÎh ’5¾vC(¦é¾zǹ•÷s¿¨¬­6@±©’æYäoãà>‚«éü¯°K#U˜dŒœäðkZ‹Ù¥s•G™»˜¤ažõWO¸76©!Ï#’F*Ñ«Ý(¥¤´ÐQLŠ( *Œp)ôQ@Q@Q@u;Õ°²{† Éõ8þµÀiºÝæ¹âkÛQ<ÌcòöÆxHÇRN=ˆë^…yn·V²B[Ç\g…dGcgáÛ;‰ †3+åÜà.óî}+ ¼îI-º4e­ïéÚyÖe¼š{ˆÕpíÏã­gø¢ÆÓWÓ•n:FKã<ŽH8â©izÌ„÷NÓ¼“³‚çN0¾ÕÏüI¸Õ&У´ÒåP’0óŽì½¹üj=„ZîW$“M³…ñ|š~©q–<~e¸+µyݓޣӾӦ¥¼E™cV+&ß®õ¬M+N}>yNO8l„ç¦{ÖÜzŒr‰–t;|ÆbSï.NIÿ>µ (éŽØÅrÝîv:V§¥£ÎšU‹} g`6}Hçñ®¥¼g~ÇW4Ú'…%¼ºÐ£†[ë¦;˜I¸&zçׯN?JÎݦh–¿Û$’Ešä±‚ÎYG÷»sÓ½túGƒl4ˆvieòòUf9 }qŒ ]CA´×/[ëxäe] •Èã§N?JŽVâìŸ/âÈ“QG ѾOµ(ž]¶Âev‰í[\-Õ²ŽväàS|föºl6æXÒáhUoº°éPx}d¿ºš|Èa†7;3Á=‡èkŽ­'®æ‘wFœ‹ Æb>fÑõgæÏJKûé4È¡ûyóàbñ‚8õÏùÅT±‘.ãiã|ÈfTûÀz~K§Üê ’&6³¡V,ß4'¦}=éÒŒ¥¡ŒÚ¶¦þ—bnL3?“¨¢ŠÄ÷$ÿ…lI£÷g9Ç4ËDŠÊÊ;Xä‰6©ÎHúÓãf“æÏ#Ö½º1䎇$µÖäWW‘Ù ŒîÀ°P@àNI÷¨¥×­¡”BmädWÃ0 ä•ÏJͼ•5 …û,åÒt‘‡BN8ëŠHô›‰£dGO9ånpàʪ¥Ub”9µdº%Ü3}¹aCµf,IoRH«ÈÐÜcéÒ¹ói?†®e„Km U•ƒciõÇÒµ˜¡ ±Æ×\«Žƒ½:U9•Ó&iE–a7–l`óޏö§´±*'ëžj ‘Fጜõâ›#¢F@“ùšÚ÷›ŽóaŽ®ÀõlñY¾ »ŽËJF¸id Ç€zš´Êù(ÛÕ‰÷®{Æò·Ù, V8gf#¡à ~š‰mpêsz•܃Ü],0ù¦5ÃOÍМj—ÀúÄíâ t½¾l[äE¨’1×¾*‘ŒcÍv·ðöÒxrÖÖ/Y¼“$*¾Gs€x8üë‰Is\ëƒoÝ=^åQŸqSÆsTå<–o0…ÿJžhܶT• ÈsMòœÇógÉAÔW5¶1ŠiîT‘|Èb¹àçš‘tõ]¸|àçéëRª•dFÆFH8©|•ˆn2§œÉ¡»š9[Aßg$ñž3žpiR8÷Œåxþß8¤€qÐðx¤ûZïPäã¨Å+µ±Ÿ3CÒÖä&Tú≭c%|ளw§Å0:±#*1ŽÕ/˜±Æd³qÈÍMÝìÉ“m\¯Ÿ§¶Éi†Uð ªZÏ%¢4ñù£&RC ö^¾Õ¶ÒYgqäóTe op·-126íˆõ'Ô×u}c¹¾³ƒ³ØÌ}ZÒãPº’éÖ98ýÓ/`3“šÒµ±{‹¯í+k†Š=FÐ6c¸9ã~•Ï^2i&ëR¸€\Ëv<˜!\cw\“YZ(Ô¯¾Ác©\HÖS«7• m ·{×D'xjMY6ôg]ˆ£¶»’ßNF¾™ùT‡>\x¿^«xJåo-®n.#h§óŸpp0~•cÃ6úoˆuˆãU[x–=¤ž…`è’»N±‚ê.æw¯­sV“–ækT{*5p@­BR ahr~áË€ ­Âw)ÅT>Q…t§SPaE:©QEÀ(¢Š(¢Š(¢Š(¢ŠC\õ·²½Ó1¶vÍß|ý; ÔÔ.žÖßÍTÜ3†>ƒ×ùÇçOˆ—€o>>o¯¥&‹I­O3ñ;¦‹¨ÙÜZÀ#•”&Çn÷?dkúˆ–7_› þEuÞ<‡nƒtѧïÒ02OÌ?¥yMïö¶|Öqò°?ÃZʦŠÇ}¤Œ»‰wUÎsÐÖ£¸V·ÓnK±XöãæI©o j¥ ‡¡áK«GåhåX 7H¤ãù:ˆ¤·4lé~[nñÄñœ”± ÜŒšõ}q€Ä|¿{wc^Iðæâ+}rôyhÆxÍz‚_•Œ—!‚JŸÏªÎÌŠ©Ýæf2ác»¶5Âø£Ç?Ùò;H• Éæ[¬ec°äÿ*èôíDëÐK=ÚDño"(FŽƒv?Ï5“â«KXc­í!û]ÜÉ*¼ãØcÐVnR_ *1³ÔâáðƳâX~Òn<´•I±‘ÊçýÜâº[;_ðÿ†ƒYjžs[…ÝÀˆ2Ç©®šM¼B5(Àã§cùSÞ\/lñšÎ*mݽAȧ‹´ýZÇìönçS’ ±¬é~Uµs5ÅËì2ñòÈàdÿ…Vñ hÒÍâ4 xX+ ì“Ç®HÇX¾º‚åÚÄRÂÛªˆžrƶSo]™“Š9‹]/ûËûK[‘K²;xù%¸9cOnõ |E=¬¶W18K6`Æ1ëëÏóªÞ2kÛ½SJ³Kui6œù+ò$dŸ`1Vô JYôÙté"·x-d ’2޽È=ÏjÍ­n÷.vhè¯q´×šu©m¬Ñ/ ŽàûóSXx‚ÒϘÿglã©ýjød–0Ê7drqùÔ’ZÚÍh«4Jùàdd}k¢Q[ tù‹‰s öûƒ£‚8*Ù$lhÇ@Jå.tË­:O;Mº’Ý;nVú¯ÿª«¯‹5M:/2úÚ •Ü>æQ‡áƒ]1¯ iÔÁá'ÐͶ³3Os4WWQܵË*…o‘p»ŽkXCk{ÇTº_Þ,"3ŒŒƒïÍ3Ú¨˜OHà´ŒáNp7Z½sj?µ¬äk!º_3rã±éëQQ^íF<®Ö4LÖ"°•îµ™î”å]•ç"³¼/ Ú3¾æç“É8Øþ•ܼBKV ?{°ö¯4°·½“K·fºqP•Æõõ¬¨ËٻɘV÷¶GTå(APñô¦˜Ø©ec¸6õ5‡msª[óל ÆËŒ5½¦ê ©E!+å]FNèÀÇ3]Q©´g;A»nÒ¸ßDßÚ·MÒÎ$æäFz~_wŠŒNü€ßtdã9þuÈx» ¯ˆ¾L´K$„ƒÁúTVvEÃVŽeÝ!‘Wìï•?òÐýìsùU]Eai¦” ¶v¯§e¦¶&†Ùì®Y% ÄFÁ‰õ=çTRâ=?V³¸™<Ø¢;™qžzù×=îŽS=B$LÇÈŠ¥AèØΦTpêaÓ5Ïx.i§³¾Lв‡,Ýw2î?­tj«‚vÝ9=z냼Le¹ wnîi­!vû«Ÿ_Jœ€#‘A8<T$Gäù³ß½W \W\ýÒ@ÜGµ@’F_>_+Œ~´Ÿ3†ýÞ0p[8¥û9EaåãŽÆ© دssŒh™‚«8Q“ÎãÐT²\l-Œßiè?Î+•øŠï‡it–ägžp¹ä~8­ ܶ«áø¤rÛâÌlIë_Óò¨çIÙ‡%âÙ¿ ©2ãדíL¸Tdaæ|ç‘Þˆ"mäŒð>”Öf6c=y5”¬5sÞ&•!SH¢\ÝѨÏn°ìåÔa×ì-¡m V&¸çp'vqíýk_ÅróøLq‚è}?: ¬ó1n2rBЗ y¡Ý–ÞHÁÁaéúT]½ qÚ͞‡â6’õöA, ?çš¿â]kÄ[Xn´²ÁÞÛ°òè9ükˆ¹²º¼¼†å•Œ—D¸U8Ú¹?¥tº6ƒ.­ ç’Ä[Z&ùåÅŽ¨¤ÕJj1²Ü•Þ§Kà»›8¬Ëo+iò ¨@9šAÙ~Ü×Iq=ÂêÐꆓsoÑ LÄ ï€O=?*Wº¶ˆxf]>HbT”G" ËVõéÐÕŸø“Ã×z[ÛGª£^Z8š5q]ã±*1ÒˆÆmY“*²Œ’±¢òºÊQÁã£UK™ œ `t’Òå¯4û{”ÀY# 3Æsõ¬M_Ä隈µò ®«ºG Nõ“‹KAòëbåÑŠæ3Š…cksÏ®+;saÞ\¹Ü†ç#iôªÉw­jŒM¼É 2åìŒúäŸJ‹NÖM¤’éۤp§ÊfSŸ1½…KzÚ%ÊŒ–èÔûr[Øîb­°àôþuÊÚX5²Íçnâà»|¼×G{lftŠ%ƒŒà×?®o¶¹XÙ”¶p:ûUFWvf-jz…#¶“ldòrG­€«°+zäcÒ¹ÍU´¾-•™eŠ!»v{zõ«e$’Ünòn’E¢i#|cbx<Ö%îŸÑ,Lªœ€íŽky ʬ2sëȬ nDKå…ðQmÁaÈ#Ös§Í±¬&Ó0.-î4Ë=ûÈðúÖÕ¬çS›F“xtK¡¸+c¬\X-í³Êvž§§LúU-Nm>ÿ훼ÅF.Ž Gõ•(U’÷dͪÁT2ÜôƒƒÐ\qžÕà÷÷š„73Gi¨Ü¢$„ cnwtÇã^£½ªâÜnïÅ+]”Œ}V§†{yèä\0H¯º’;=>Ö7™¦HÉë^ËöȯmÅÌkº2{ñßüþuâz‚£é‘ìÁO-‡ýk*½ÏJƒåL†7Dˆ’~rHç­WK!y ѶPºä94rŠ"U³³ýsVRe†)A IÏjÆìÝÉ7re´ÓÍ’—»E”D•[bö¶xÍhiÓÙéþÒåž<Ú5æd‰Té¹°ïøÔQ^ÙÂ7%ävÊ·À,gž:ã¥Yñ™Ó¾èÖAwç#;Á$5¥*i½H¬í°Ïë:%ö…q™¤=•ËãËeÀÈŸ”p>Q\y\Z²ª¨ˆ¯Œ Õ«‹•Œ¡#gÌíx?¡ª¶ÑlÓùüÌ 9®µhŽV›úï‚5…>x§‘D–;SÔ¨çòª—¹×ìno¤¼h&œdÇ´CÔ=;þÅ‹‰íµ6lDÏÞ2k‹ðì—:zj'sDîP…þ:çò&»‹[øŸç óIÓ$ ñR⥠Ôä¶ìËñ°™ª2Ä®IÀ%ˆÿ8­V¹ITlB¬}ª(>òÊr;ã½KƒlÒ3kS>ÒÀ9ÁV%˜,ÖÝ¢e ¨8ÉQÓÖ©&­öx¥™mìÑKåJÌàÙ§=krhã`+ÏUªIÇ̉ÖnZž}®xsû:U»ÂXHGœ1þ©½F;…bqo•*]IGAÎr?3ù׫ÍåKºˆ:?ÈaY àm2w+²e‰¹!$ÀJÁ®N‡-Kœ]Æš·Ú|2EµYäuʧR ^O?¥Vµ’'’!vÊ‘Å÷†9¿Êº½fÎßH´·†Ò"-m%nIÉÝ»Ÿ_ð5‘;i÷RLñ´Ež,|ØÁ÷úÕsIÇDeÞÇn/¯Ø^B“í8I#äA݇´¡Õ¯üM©ï¿º]ê@ ì@8ãŽÕÛørkµÐí4ø4˜>Ç>DŒ@`WçëÅpZìáïÜÀ–Ð@’HÑåuõ<ƒùÕsO•£xk-Qß![qg"o„™”I yäÖòê—’Ë »ùŒ:`7Ò¸ßjãQŒ‰eß(„~Üö5½!1ÞFÖû£uBñÈ=GåZQ«eï1U¤ú%¾URÊ@ì¥]Š?™HŒw ùuªvD]À— >W‡®=ÿZЄü¤”9Îk§Ìæi­%ñRCˆn”þl²?œî½`{Õÿ N,tuYŒ“Mqq³dÔš†cº´Œ2m—søõcϽ6Â'Ý¥Í Ñ«Ë熋à:zšóaY9³º0•’:™µ¨c‘•a’H“;ߎÓ¯¥: rÊY¥òÄ xS ÀPqœ{×.÷)kªÝÛK2+Gµƒ19É"œ5;)-¤³)<¬HÛØû`~´K¯+F¿VÑ3WÆë%ž˜ÛñHSÜb¯^iöºÎ‡Ána•Ý[j ŒšÀ½šé´ý>;¸¥òÍø(&lº¨SÔƒ[:†“hum"³•ŠFsÃxï]1Œe©ÅV>ç[¦ÚÀž)¸Ç n»Jãœæ¹m>êêmFí$!¶ÊP9\ñœJét+ {J[XÒHÕ`GÛ¼÷-ß9ë}ÒïW% DÙ銮„²Žqž• r£ÜâìgóP¶uò¤GÉÎH瓎Ãúb¼ÂèŠ m£ÊŠYåçØþ†½ÅS%®²·Z|¨—Û;7!²8È1#ØzWšjÑ˧Íaa<èaDƒ`ÛÎOôcõ¬*ê¬z´µI÷$Ô ŠÒú8¢ Ù]Ø#¶½eOp$F‘#ó@ “´{V–½>ýAÚG(«ÌqÖ»#ÃöÚmˆgî)äã?†JäNM•ÍnpzVÃ:„¹Yvà‡#Ÿ­wÞ,°7^X BÆŽ`=‡_ÇÖ»áÉb´žãIb†fhO#o zõ®»KÔ­oì£ò›„A‘žÜc?taªsm¸êA´x»¤Zƒˆ—*@`;xÒ¯¤ Y wåHõ5è:ÿÞMA¯´2‘Èã÷¶ýoJá|IoybZj6’D­&JdÀuÕ —õ8¤¬Cpdû …‹iuù¸ÈJßí±Ç5“ùwH¸È=~µyäò ·2‡†uÎÕ?Ýæª<dgîšÚÜȈ· ^'K¤üF½ÒÕ­oíî@óòçòú~UZÐoµÍ:ß\¿Ôa½ÓR\²C•òËzþ@WöÁî#‘Á]œçjüW—Ú~Ÿw­ô‰k4x’,ä}¥c*Mììnñ2–Œô;i™„6¶‰ÃQå¯`;zþõzæÖ]ɬaÖb|Öaó/ úW1¢Euk»O¾›cÀ‹)Ápë Ø®„Ç%¶•qœŽgdÊ Ü\{ã5Å“q.¢ÒæÍªD¨Je€Á ÜŸåT/­’ug±xŒ€å–6ät®.O^x~(ìçS-Ðei¤ûÈê)¦?ìwµº³»I`‚“ƒŒ{?5Ó8ÅÄÊ3”%u±ÛøsO:rÞêW¡C°xÈTQÓñ5[O“lƒP»ˆï¸.íÈû‡…ëõ«Zf­³¡ÝFp³,dJ¤wÏUõí\õ̘Óîa7Jv”nâ rxǵRŠQ°s9Nï©§lÉn^Í%¡‘1( û? Öª·v×Vñëä!uÏ žÇÞ¦ImaŠ[x<Õ›a—,2XðO>œV†©/Ÿ¨“u2¬” yéÒ²«{]TîMk«HÚu¿žÍ%ËcvåW#ñ=¹d„ì, äH¤gߨhs-›‹ibÌN¬K¼: ÈÒtÁªx¤BЈôûy³¸À8<.OsS]'s¥5$îm_Ú¥ÇÚ®´ù) í–1È-×=û÷ükcÂ^!‘°»d[Ûa´Ž@qÛùb²/ÿâQ{s$@ËçhŒòÜôãÓŠæoæ—KÔãÕì×!ž%=¿­iÌé»3 ó#Ö.îí¬ÜyÒ,.v÷ü©’êÐ&šnàŸ0¨,Hê0=+†³ÔSWS¨=Öæ$™7`ƒš¸×oc$!³9`Ä/µ)ÊúX•游ƒþÑþá{;yê›rC±Èý:ÖE­­Â^ }Ò*ªî{ãå=ô«³©%½ä+%#xÁÎqÏáT¼F×Mòë7à ÈÄr ¯ëEXZ*Åáä”õ7’KÙ­£ºKÚHF}ñß‘TLšG’id¹’Wl\€9KL¾7"7é1k/³¨µ#¹<·ãšéÖûdç…*ãH>¾ýJææMò¶T±<³q±É]A—â fX©ÂäõµIÈÄ›œaŽ8üMEU}Œ©iwäkO+[h«-Ê1z)<ä|Àv÷5½§¬ÿh‚W;‡ÝÉ#õ®WRº2èO1/´ñ²²ÿÜ8ǽu–Q•–B@[¡¬éÁóÜÂ{]š y4úb÷§×Z1 (¢€ (¢€ (¢€ (¢€ (¢€ º. bŸz£lÁ4·nÄFß-IœtÍ Ž^ãH´‚î{”Œ4“»7$õ¹¯º‘¦»xî0%Ê!cÀtü«ÝïdV“žI=ëÁµé¾É¨Ý6Ȳ•DQÌHÿÒ±ª­ФløjÁµ=}d˜«Gg‰ßøGáŒ×£!Ú±9!ÈÆO\5ÏxôÕÑ Ù»´Êû® ¦±ëøSüIªcXù²´‹ç’rF:ð+Ì|îgc]W×2ŧjW„ìR+†A$÷U}}9ª°Þ“ɫè³$Á?ãê!Æáê®i~Ӫ˫¸ûvÏ5æšeåÖ‡­É¢ê‹¾Ý·C$L:œõüëÕ4{ð]íèr7·<ñ¯.ø‚/O9à+©Qž}N?:ÒœŽ:‹—n¦î‡|tN(UÃÇçmãøö'Ûú×E¬iñ$×7å<©ˆToRÀþ¿Ò¸M0®£©Y"g3Lª1õé^É©h±ÜÞJÄ ˜(n¼:gÞ·¨”ENO”à-"hnÈI®%?/Èqõ«vñ VApìnD+Œ°ûÍŒ`}+ª’Þ;=0´Ê<àŒKÓ=y¬ŒÁ§ÛÜóÔ/‰®ióKC{‘H¯%Á."FˆŽCd¯9Çô­˜µ(ÿ~†2âà¦]T2ç#&©ÙÅ&Ž;»ëIÈxŠ9FWp#þÉG¥¦ê"ylæKˆäc$€‚¿Ÿzèµ/¶ê6×qE ²˜Ëœz:VÜüÔšêL¡Ë$Æ- XbÛåµTý*ÍåĶ«>fÑ·“ŽsëÍR‡NÕ|’‹hÂàõlãéZ6š5Æ©m†½ß'÷‰¸ôö®Ów+–œ·,ß\†°7©çqnƒ>µÈk7BI$4’³ëô­³ ÍqýŸ%ÝËÇìi7Ïã­¨ü ¤9VwšpNv¼˜_ÒœéI½AÆš»3ü=©Ðm`[„k’¿½SÁÉ'€ mÜDòá|Éuú×¢h/¼n¤½· ¬±ÂÙ$väUë'ñ%ÞµlòZ¤P”‘6ŒzåS9G•ÝÚÅJ|Åø¯›NðÔ¥ìcºI.Ú܇| Ƨyw¦ÚééÍlH-ã= ¹¬›|k:5ÍŽ”±\›mGtÒ6åÉÂõÇøSõYcKFêFšhÑD2@@È#œô5×MÕ#'}N’ÉMµ°ŠÞÉ¢Ið¨GR9ïX:¯¤AâKÎÕážV;Üó¹‡QŒœWMjÉökgV 6 °È+Ï4ˆoÅRæÞÆ[˜à•þXð$wbqZ´’ÔÍ=u=58![ =;*lî °<Y-ˆdÁ·´ÓÐä<Œß®ÑÍ,z³Z\Gm«Zµ£žPÛãsõíÖ¯E±ŠK¡¿ ¬¬B¶çæú Ò­ãyAÜ3ÔaÒ½&8–2¬ƒ' –'µy÷†­®.cÜV ©,¥‘’7µgStiMé#vòWA"hÕãFfFÃæýsŠém$¶ŠËÌFIç«Äi<š$H³F— >`27 ŠÑ²Ž– d”)Œ¶Î0H­£cžz§ên¡$¶GCÅ>˜‡9ÈÁôÍ>¥QLŠ( Š( Š( Š(  ×+¹QOvúU-kQ¶Ó4ɮ8ÔŸ”rO`=Í]œüñV¬/éòêž¹‚™@*Ž­´çZ/esH%Ì®q²øÖÙ.Ño­ÞÝ_î¹;‡Ðã½y½õ¼š¥û}…KÝÜ]7‘´}áœgtvúTšŽ—%ÓaÉàîL×5Àiì²Ò„˜?x¡½[UµÆ^‡R²!/ @Äcœú̚Τb¶FÖÕL›SÑÅÂÞ´ ¿h˜¡MÝ—¡üsWc€Å LfP ;.~ýeøoYmFÀÚÞ~îöO¹þu¾A1ShÏ® E§©¥ìÎYÒînw][Ï3:@¸ »–üªÆ¯c£¢]ÛÌê"hб'µøUù™ažYUNw9ÂŒwúV$ÒIâ7ûš²éìÀOpÇo˜ð¨î3ŸOZÒœ[kÈÊrJ-¿†o/í¬ÍÚ˜­öî$³ç ÀéÆ+ªžÑ­ì¡´´„¤1/^1“ë]¥ô«k‘>eÇ–]#ÛÁQéê}¨Ò˜]鑼â ùd1ª·qõ¯Ntç&¤ÙÍ (=Ž)b_–`Ü…<ÕŸìûóh©$ °àW|mã~R=1ÔT­ˆÂàžù©Tf´¹R¯¦Çe¡ß¹ó<·Œ„`sùýk/ÄÖº£r°ßÎö÷Ñ.G–úúñ^ª¿(ùW±Ç#üñ\wtg³—Uˆ®£œH:`Š·JJ;˜ó©Is#‘ð^‘a¢kq^ß¼ÞLd›7 œŽã'>•ê±¹-<¤‘¿Þd9Ïa^nÖwÚ}œmqe @(Ñp­Ï Ý‹]NFq5µœÑ…_10Lûtã54ªkf'J){§Sw\#e(xÍ`jZe´zø²|¦8/ÜàŠè®L "99?JÎÕÙÉ FV2²äÓƒÛ­t8-Îu7ký³D ò–bÇá[ÊÖÑËûŸ5ŒÎ¬Ã·=+':+#®:å}8à~­t^G\ˆ¡¹`Òyƒ0Î@Ï$zÑd÷ÔÑÊå:'Ñãv9#ìò¶rÞ¸öþµ}m) ÒF~E#$÷$×M—osö˜4™<æ2£“øœTÓi\ d‚Òo¾$v|ÜT8.€¥c G…³40@|ÈÔò/q‘Íj3§‡Â_]\'•(Ä€“ÃŽ€9íWC^[Û½Ííý”(:¸‹ŒžÉ?¥s>*–]WÃÓFöO!•ã-lP>ðà{UrÅ Tw÷KúN¹o«j÷pH»b¹UXÔ¯>¿Òµnô¸8T^I £n#ÌÆïÌûW—Ù˜íf‡QŽG1+™òAQßúWm^ä¢ZØÛpªLî7ÎrHÿ­QÆHvrÕ›’Ï`Œe»Ül.Ÿñ¬½GRŽÎ´ÛšS/Í;! „ÝØûÔº°ÓkÇG»´ƒÏ »Ì€ £sÚ³ï/ ׉/>Í “¨m£Ë]ÛB§Û$þTäÓ‹hMr´‹7ï¢0ÛD-¯cÚC–ÙžìsÏ5¯¦_ê…’›so D|·‚ìÄu pçt¹,ïuCOÔ¸¼"‹ƒ´äŒýHü«¾±Ò#°µðCqßýkšŸ57«º.n<¶f4°é°*ØÈUîe èî§$ú’kRÂÒê;h™æ,qŒ/8”š†‡¯nc¼bÁåhÉSCгkd–öÐZ@]b‡‘ó~¦¹ëÉJZ!s{¶3¼7 &‡ øY\5ÜÍ1 À\öµ\ŽÓl˜36ÁÏqW–Bv0çZ'`dαQåw[œÇˆ,?³7Ón¤·žê_%#Sòe³–  d×Q ØZé:Tp¡L±%›«;w'Þ¹ÿ¬sÜØˆ¦CylÆQ8ÜÁö˜|w4r Ò®QZl+¸;t ï¥ï-I©hž–ΙD 7·Ý¸ëY:äPÞ*YχYÉUäpk5/ßj†â²Óæ‚+‡HÌÀà~cºkz´ÆMSU…ѱ*Û6׉†@#%}jUZÀ-"lˆd*ûq€çŸÓÞºý"æ`ŒÄÅ(8o|ßá[$qÕ\ªÇC6 `ð9-Aoƒç<~U=AQEQEQEQEQEJì¹¶SŸ¼OJ†êypky5ë~‚§–0÷°œ°1Ϧi×Ðàdã9¡k¡k¥.Õì ûl÷Zeâ[[- È@Ýß•Á^hÇÄ7¦â8"Y-˜‰HàÊÀôãù׸ßÛÇtøQ<sšò-TA¦x“Q6ï,X•C›‘œW4á(»ìz”ªs®S‘žYä–äÝ+‡Œù?`W¸‚3adÑÆ»‰;›=zv«ºšºž ùر ןZ¡-Ì_d‚‘"1ô'WæÔÑJúZ~Ÿçi·DÐtíRÐ'‚òÍ{9bS,;€`vø×ašÛÈŠB²—Œ`ÈÝÍ{d:–+³^@Øãð*˜Ós¾¡Rn)Xàu[-2æê[´MBÒò^QL.Fáì:Ó´ÝsW½š*vû ëó ‹ˆIy SŒwë^††mûUý³umÇWŽ!so„–ŽH؆ˆ©ö™ª¯c+þ%šQ6«w5æÜ|²|¨?•©+YéÖêÎÉ Æ2xùÖEÞ:ŸÚng–ÊUòŠI6v¶29>¿Ò­§†Å¬ÑMg ‘Påc¹fe_÷rH¬!è'®¤ÂÖçPÕb»ra´·B!A÷œœdŸnëY:÷‹,ü5"Ù"ÄnßæcåÐ;ž ~µÐAuz>Ñ-Ô0ÅQ¡;±’sÅy¯ˆt“N›ÄòÝÄ[ç ’ÎŽ{1Ç¥j¥mIWߢ:}'ÄZı ÛŸ³½».Dj0Çñíô®‹NÔáÕtĽ·R¥²67Ë‚C^O£ëªöèÐ tUˆôú׫èúy²Ó ·œ3Î:yªDÉ÷'i§~#H‰Ç,ìp*¹I®¬ä[††X¥B¤F¼~döõ©®í$¸*"hö+e‘‡ÊãÞ¹{ÝnãCº¸ƒËŒ9ÃlFWüÙíŠÒÈÍlXI#°½õk»u³µP‘ÎY½êHã·zmljô›ûfµn!‚åâ  úã9šäYä–þMBý³4Çvâ¹9ƪþ\ ¿˜‰VëSÔ"Óá#ýYæo}½GåSh'ª4I=¦Îhïg¸²ºh%xX›*Ã×JÑ·´†&8"‚œúñõ¯9µ×´&9Zk¹.$žìá_#8ÅtŸð‘Ç­xb9,n£Žä¶%¤ WÈê /mÅ8_cm¯m“Pû…ËqôÍZwÙ·síÏÜ0X6šE­ýœës+µÉ’f9+èF2? ç4}ZêóRŠÒ+;ˆÑ™Q¤^HRAcúV^ÒÚ¤S¤¢¬÷=®­Ö?2i£އuD5}ÇÊó$þy¡'\OG¾ãGP£'¿8ñÀ÷¡îðzzí¼+Zž ³ÈÒ"¨bRT K`òIÉö®\±–)…â^;N¿ bx9ìk¤øsy)ƒS·•0ë"ÉRzãڳ峹—=ìtw°YxNžæÎÎ%–LD¥d–8íéš_ éQi›…ˆ‹™ãÎxéý+Xùn 0pqYÚ–·caº¹Xç‘P)<=«©ÊVèTUââQM2ßµóD·a£ xëõ$“øWVfV¨¯2Ñõ衹µY®¦¸xI,bì¼Mz4w ð,‡åAÃGáI'Ôª°³DÌN-ÉñÆìsÈ) ¤Œ†ÜTFV*§ðêk6Òz¢HûqƒG=y§!9ªÒÈ!ˆÏ4‘Çy.Á@üOzãµOŸ´˜´wˆÚ¨[’2Hï°OSNœ%+¶´Žƒ[¶¶‚â=B[³o#+n~þ{êO5ÇêºõÛXAo¦Þ:YÊI‘U¶Jçÿ…mÁ¥Å# ‹‰šö ŠÈ—²ä/\z/á]0‚+‰UDjѪe\zãúRöê:EÕ’Lán¼EqeâS®<†%ˆÅ8~NÌ[o^•™gxɤêFêUQ<æm£™$rNÕê{úv®öòË1Oö›û °1¬j \wè};â¼ûWuþܱI¦˜La|y¥K‘† zƒŒz]êºD!ʶF’kº ¶‰4åŽÁae%’¸îÌþ§Û=jœ:L*¦Þs:ÀÁŒnìp ó×ëž´Ò4§XçïÈ6ãœóè iÁ§]ê« NàÙª~û‰9 ŒätçšôT5©„µ(\ˆR®ªÑƯ»7œgŒäãÓÕè7×6°D%,î€û€kœñ´IoáëD´LGÜAO§ZÔÐnng¶·•¤Žvÿ¯^üW&³ƒV0©i;ž¥hs#“ÉãdÕ{eÄ`ñÈÕb¶ƒ¼n`÷ (¢¬AEPEPEPE‡¥@nH¢Œþµ ₽@Ç­KÿI›=A½ªÔ<ÍAíZÞD ¹‡ÈGÖœQWÔ­pб Þܽ«É|Km>'ÔÔe£¦Bdþµê·^Ys»qž+̼M ›Å…Ó,‘¬q8ç×β­ðø[ó^­½žâß6ó†õÀ®mà •øMd×5ŽŠ$– 9fˆ²b3#08 Œ`W§6ƒg Vkhö”cŒW¥´ñh„–ÛÈ Œànþ•èV7"ëK³™9f…céE%ÌUkÚèÁº³ƒM™Þúê›î¤D¿Nj=kV—æiÊ€HÅÔ[3øæ¶u=<^\xaÈûÇæÉÁâ³öÉ»Aj\i7¾ÇiàýwSî¦!VBÈ%9f#ý‘ÅnéÞ ¶ò-fžúi‚6Ȱ¸·CÞ½6£¶·D–-µW9'ôêzþ5ÊZÛTšßt^[){}ç€ ä~”¦¦•äË(»Øèà´´ ù19È óõ>ÕÌ^xsNÒµyau5¥Í˲àòxì8ýkN=FH$‘¬{3…fÆFO!‰ÁïHï/esk0r«å¼‹Â`òsÒ³åvBµÞ¦;M¬Äx´‚à}àb“i#èßÒ¢“VþͶAý“yåù»å7¡=yô®ƒZžÞ;­:ê8ŒGÌ),€q³ñÇZÂÖµVÊ_1G™g–làÞµiKFÆSŒT[#MFâñR[]5ÖwÊ7:ävç´øfžàîš0›GŒ}@Oþµ>Âæ=öU»ßä\0)&rC÷¦¯4%™g1ˆÕÁl) ô9·#‹ÔÉ««£ê5+;äUeFXz‘ÓÝ.øéWöwÑ`±EÂ/\}=jêÛùW›”d‡=2=¨]¬÷[B&CEÔ¸'œô«zuªjôû[7¸¼t™”EíÇÇÐ4Öµ¸Ô´é&™n·-¸h#sŽõÝJ +–Æ.Zèmx\—Iº‚Îí‹éÒ?ÊWþYØûVôž#Ðôë™ ¼d?1ÂRÜuÚ‡é\|K˜Ï–ÁdU°9ú{õéñb(í6wìÏú×=lsº-TºÔ±}ãH×Ék™yu7xŽ ÇŒùk×מxëYÙÝjWsê7ªÞ3î%¾müb£Öê S ƒ q‚@ýåRo3µº>¾õ­2¦¯Ô—+šZt²^jé7$[ù®WÎPJ±Æqƒ×$WE¡ˆG¶6ìÅJ‰pûǹ>ü×;êYêšTÎŒÉÃÌbsŒ®ÜÖ߆Ø&™nØHaКª®ÒHráq_”G>™‘©ê‘ù:úy$Å n…òk'OŸZ¶°K´@ íC¸þñ5 ÔÑܟƯIά²`0‡çÎk†x©IØíŽ/c)/lå!Þ%ÇÊVPWsûkI³Uo·ÁÇÈÛ›>ÀsúUKÍb2Š’ª6HÇçž?ZƲ¾]FU[uR™#~Ы‘Üzš_ZK¡qÀ_wcvËT·¼¿4Ë™åòÃÊ ˆÓÀ?7s“RiúÂÚÍ,Ž,Œ2–!Æ~Z̵oìPßÁ½íÛ v§©ÞãÐ×vïn`«FcnU·¤zú÷­!S]#ž¥Gc'BÓþ˦¤ÒŲîã盎KO?LÕæ1“q)cž ®Ý.b3Ÿ,H Ï¿à+3TÖôÍ-MÔ·}ùCÌî\ß_zŽ[êÑW¶…Чa\1»yíõ¯>Öom\¾{-×>rÆÇÊÁEp0rÝ?Ÿ^”ÍRÿS×›7Ãi¿å³‰Šä{žæ› ?cem¨e³ÓƒÜt5×B“Nç4ç®…÷[°ŸP¸·[hŒì£Ì‘|ͽ~UéŸÀ¬¯ Üùbñî/YËH<f<üØõìØÅ+ÜÏ8Ù,¢( —T †“pät^^Ö;eÖ[Êr‰€Ñ&pN@ {Œ“Ï¥mÊïvBz›‘i·6?jH"óÉ!ßo ¾x={̾»‘"xî­î-N~óD@ ‘Ro{øµ+¹×h…BÀØN1ŸÄεñ­fó[[ê2¢ùBŸ˜|ñZj6¬Ë.Ö70£Iuªä'¨mîv¹u?èìHà×8ª:åíÆù.^Öd‚E8hB“¿Œ¸=@®«Á^ªë~]íŒ)-²Šó¬¼±ÎzzTTªà´Ô«\ÃZ$šÕÓÝD%þϵÌÏ+–GQ«ê;šÒðû´Z]¶fħéþq^‹¨2ZxzøÂ¡;Y61”פéñ:ÑæbŠ0ª>™&¹c&ï'¸®Ü\Hüt¦_äºá¦‹8÷p*§…‡H€L…ºª’ÙØÙê?:½ãT'áüŠ|¯*Ãþš*§‡ÆôŽ7G•eÁã9…{û¦\º4zÜ$‚«’~PI=êz¯ns·ÙqV+hl`Š(«QEQEQEQE€35,BcÝ´œûŠÈ¸"wPÃó’9Ç¥mê.«Hç5ÎI.$Ù’7ñÉ«TÔ£©¤ec*ãK²rKÆ äsÍ` +[?¤¶Ñ”v³pBŒgŽÕ¿{}£:<ʬ7'?Oư­¯£ÔÞ:6j×4MuÔ­åó#•š|Â…ßü÷ª·W‘ß‘agæ,N7]¾Ü^ËìOSíZÓÓ-†Ÿj-ÕŒ„¶âòY?©¬;-õ¬ÛÖùåg,@rN'¯~®®"ð¼L!Cßò5Q ³¶vUUR¼OOþµqVÐ^xƒQÞW·¶F>lëÿ ÜÓï´'ö[hNÉ¥ »ÕsíÛÞ»û&‘¢Û<’á e‚K\Myöm{šÍò-³ðžir$òd¸~2gc éÓôªzׄ‘ƒ]iÅp§w–½wÒ¶4»ƒ6ŸlZ`eh÷c¾;~• Žê¿+qúÖª0¶«SÊiÞçžYß‹›i¡‘y‘LDÈÏN?ÏjGÓ,mÛÍæ1ÀõÇùí]%÷„à»ÔòÖæ{d›ýlq‚}}QÔ,ü?á´ŒK]ݘ­Ü™‡©ì½d£>kFç\±µÚÔç..tûi`•9g߈ዀýÎìs\Õ(Ryµn'LÈÿ1}¸Raì; Žqu4ú¥Ì1Å3¶ÅŽ4 !P}猞kA¥sj"FĬ»™ýœ~xâ½\5•äyõ몒ÚÄðo*4ùšAéè=éÖЮ§p’Ì]mâ?»„ž[ž­ïÿצZi"âì–%"a«ïð«7Oy¦‡„–PÛ-ÕO sߨw®¹;úÍ\f·I¨Æ- 3¼CÍ$ü¨3Œ‘ë׊«faÓ¦¢y bVAÈ.:Éô8ý)®#L±g–Eó]Û¬€¿ŸØVͶ“§ÚÁgw¬êR‘|ác–8' í’:qJêÃQå3µRîÕ.4i¤Î0ÂmvN£qî9&°­!-Ú$¼¬+ϯëS6±u{rˆžàÁ'`èü*EX̱³±UQŽ}«D´&éêe4m>¢ÑÎ~ämÂñžFüë¡Ò®?²µ½:õЧ–áY‘H0?ZÃ1É·((Ê;†FO?ž1[Ï ·òä îL`‚IÏü?*‰G™4\eª=¯P—þ$׌:´·½•'Ö°–ßm´ \ª‚6ô«^žk¿é6LžFÇSžÜ U0äÆG w®XÄMòÝXÅñ»—ð­äH¬ïæÄ¹?Æ -¦R$!þP¤óÇÒ¦ñJ Ò|¢ £Mb:“¸TúK´K×÷np=À®lGBzžj”™êfªÛà@¼sV«Xls=Š(«QEQEQEQE™ª„åÛøFIôä ãuYƒYÊéùc©<ãÞºíY••£nê8¨ÏÿZ¹Mfhl4ã)ˆ¹—÷`ÉϬeîØ®[ØÆ‰Ulãs¸bÇ©5NÛ˲ñ*9@ßè„`IÝŽ•¶¢öó5´ð³(8R¼P­ì7>-µH•¶MAœvlž? ‰|'e(¸ËúìIâÙ +ž4Ϲõÿ=+„&—:ο~I\ŽÝë¯ñ•´ê¶åeÌ‹´:¯ÝTäûšÇ{[¦·ûQù’€ðsšÂR] ¡düÎé.ÂÛ›¦ÁZÈôI?ÌW=£+H³‡ ªÉ»=¹çúֳζöG6Y^”?ØàW;§j…tëhb‚W“Ë»•xÖôe¡S[ŒŠ"ò帕ɜ䎿çÞ®D.7æAÇ`+*êB’Ò—ymÃ!óŸJ³ :‰Ò –ìí!ù€Ï8ϧӚÆzÉšFñŠBk'´HguW•Î=ë%‘$ (f,8(¹Èõ⥹¹’’\ÇåN Ÿ«{‘M·/<*fd½³è3øÒR¶„½Xÿ³KýÔ‹€wu?OzÖ±Ô- ³KY$Ú½9ÝZ€Fј$"TƸÈÅeêg´³m±F¨¿ºIëTÚ{–½ÇtGwªÛµ»YÁ.é]O%OÓÛ#ñ¬õŽTQ¨ 󎼞µ±¤hŽÂòE24§€X¢£Ô4ѧê-´ ¤‡#'§LÕ+£’æzYÆoïÏåG¸ ¹ÜÝ©//# dI`¿„íVŒí;¾¾œSž íçv‚à9Ï˨Æk¡5ëù€ ˆØò à/ÿULd¤ô+X£¼ðÏŠSWŽkœÃz#<=2Ó­s¾#[=]XRí;ü4–ÀóyØ}†–p–jí›·+/Xǯë\æ§m}§ø»[³ºX¯§¼(‚æUÿVÞÇU,ã®æJÎhÐ×â‚×KŠîb¨EvS*Gjì¤ÕlmÖ’é1>6.y< ÿ:åot»Oì Mt¦w²E"äòÀ ý}óXÍᩞ$y[1B޿ʹêòJÎF‘M&‘êhë´µê>Õ?¶´8®ßp˜1I€þðÿ"¹Úåf­s+”üM {4ÃÝD3ëÍ[ÒÄA d ùà½zQx†BšdC¿Ò#?øõ^Ñ¢Š8 E‹[8=µqâìfº¤ ûÄù6å Å\ê¤D} `qåöéW\4Ðå (¢¬Š( Š( Š( ÒÒzPµ:Å&N~TÎ嫌ԣ¼¿µhÜQŽå ɇ?Ò»=e[ÎÝü;xÀéXW?)ÃÈç´I´ikYœÚtÃÍ "<€î²9dêš„–Ö‘{åmeiUG=k~òç~¦²ä· $§ÿ^«Md/|CcdP²F³ºäç’œrk*±PZtœÉ5éÇØ£™ƒ"†$ŽOJç5˜êº\/”YH?Ïá]¡hïc;aÙœô¬/<…t™cb³l(væ¦:Ææ¯I$÷­x‚ÐI‘vÜ00çý+›Òn_ìÖ£õcå®—E³OìˆLù‚ÉnHùNyü+Ó2¶ð´jÒBvííSÍ[ÖÆ­º-È•gP]…8Áÿ?JšÊ]Ac6ÐsÁ,zúŸz­m ì6‹t,[%Xtõ=þ•rÚXôëK½BêB#C†Ú3Ç ÎI¡­KæVÐK¹Ù‘ÖúÄG ¸ãµI𾉠¹“G( 8ç@šŒ:ÝŒ³Z–ÄL7FËÔg½GzÈÓÆUÔM,~ƒ¨©i\¥®æ´2ÆÅ¤\½G¨ô•­"Ïi$+†iä_~¸¼ ÕÈ/­Ü¨ËÊDj§$ôéMKg¹¸ûUÚãêà=¿½ÖDÉ_Dli 5Œ ›€QÊžœVF½q‹è’)•¼ŽdQÉ'Ž>µ­ÅÍÍÅ…«&_ýXÇ@I<Õe­ímtÙMÌ‹å`4®Ã¯×ùVÎjÖFP¤Ü¹Š_nB‹ŸÞHÜ*(Ï=³éÖ«ÜÛ»ÈcµŠBʃr‘’NOLRé—¶M-ÝÌs—·Û¶7 ó Ï?AÚ¨ßj:ÙºÀËrFU&NÂzŸ~õ1j:Ü*s7cªðòO§lº¾eUK9n\O®+7I»m[ÄSL±4p^]}¥ædˆcQyõ&³cÓ¦iÕ²Îø ›‰8õô­‹ynZÁ`M±ìù”ëÅQkÔŽ}AV Ý4Ã!Y n‘x˜žžÕ¿ÚÖÑÅ;ʲ¸³«É .¦½’8€ù¢àïö¤×¥i×[2Cy-™,K˜ÉúŒzþub+ø!ºÏç^#ÞK&â§Ô€×JÄC—ÝÜåžW²gG¡XËŸ4÷jêîc,‘Žv_ÀY¾)â–ÛMjJÍ,ØlnQŒíž Ž/Y¬à5Ú0=ejýψžU+(h8óÐ6O\öæÌõdÊc+Wßwk5î Œm\Úvè`éw+§j6§WòÄ[?rB‘ŒŸ¯?¥n_kCiÏm`a–ævÜÅU‚õçqöýk‘¹……ݼ×÷Ì褓涇óžÚµ¢^ le–å>lq&G®O_Ã5Ýeﵜ½Ø—µ ,ÖábŠå•1´uëÏÿ«ó¬‰ û²òA—¦z~ŸÎºmE}vénn·:,3|Òîã¨sÄú0Ãâ¤;¼¨-üåŠ8Ç¢ñZ{T¥Ê•Ñ‹¦úèqé‡p]¨¼Œó@`\»|ýôô§_³Ž[cncæ”ÈÏ9¨tq$οºo˜(\;V‹ÈÂj̾÷&+I%ÉW!N2x'òÊ–6°´ldÀ+°|£vKùÊ Õ.„‹GOžLÉ.rH>üίÂBZB’±G*7¹I'8ÓÔ›hU™¼µ"I ¬T•É$ã]oÃë”õ[@ø "N ÿ´¼þ¢¹ JØbrãßòç]ôߪëŽÃ”Æ÷S¸ÖuK§ªgOâ9"ûI<¢Ó§8'$ð^*Ö—qo:$¶›ž0?Š2¤Ÿ¡ÿ£öXÛlM ܦAÍu7Ö¿d"TÃ;2†Ü3“»<~F°¼lͪ_Ü…ßäDTw,úÕÓùW×wÆ ‹`ª¹>b· ÀíÉéXN¢riô:i§È‘gQ6¶:t÷¬¨“Bždmœ}1Ÿ¥pÚ‰þÕâ8–ùÊG3l`“Ö¶|k–ž†9åûEÌÓˆÕÏð¦IãðʼæËê–8 ëÏn¼Ö’pmîSŒì{U΄îYÑü¶a³ƒž; Õ }[N.%¹icxöɇ!ŸŒ`WIvÄÛ‚Xg>µ˜Za۱ǿZãR{#²1bÇamnÓ4VÈÐã}?:h´òc‘ˆVŒ(~ÜÿŸÊ­² 2w'q8ãÒ£PîÛXü½}«7æ6º•#ʺlRJ›¢ÚHæl`ÆÇpÛÔÕÖ…!cãd“Úª=Õ¨ž8ÍÌjä—w=qþ½‡{–&ÚVÀ “Ÿ^µZC¿Ìf`Füž3éýk/R×’Îsmi ]Üðv $/8Áãß5UàÕ5@ñ…¬¹‘"êQÉ}d8+ì^Õu¸tý9Úâr²LqSœ¶?AUíõ¹õG· hPÏæi2Æ ­Ic¡YY(óTÜ?8yyÀ?Ê·LŽB(ãŽ>•²Ú(ÑC_xƵÓÇ9ydx¶38Ýž?,VÍ­¬1A‰>oï¤sžj_$ n!†»ùzÖ•½ºIoèÛ‚Œ««duýhÖ[Š\ˆ‚òÖëso0}€ÿ m¬Øü-c 1í‘Fs÷«¡`>éãð¬Ï^Ýi^½½²ù§ÖþîN3[S»|©ØÆVz²“øFԣř¸Àf~÷â¹ký5Ê[-ÔW|Hñò¼òîïRøSKÖ¼Aes©¼^|{ˆ Ò8i=p3‚*ü6öw»a1µ¬±œ*ô*{ñÒº#͵ÍðÔiÍݻۡ%Ž–&!TËý+mt"‘¯y {~gHŠá,áv(â@ÀîümïB{)ÇS]é«5ëÊö‰ÈO ÈË›Vh$-Œ¨ІOµùŽKûÛ‹ B@ü«KVñÓ FmŒeƒysJr ×?•dÛêþ ¹±šîÚ&nÉ,«¯Ÿ&¶¹ÉR³Jò±xI­õâ·Dò[…ÞÅŽzäg>ý=ªÅ—ö6Ÿ+hÞD÷iÑÆ¥‰öàšÏ¹Ó绌«»‰¤Ý^Sòý0xª¶ð*xÈïÏR{Ö‹ äý硌±Ï—–(ÑþÓ¼†iŸI–kHQ±°2ûϽ-Lj®õ7·¨Є12¬sÁöªîv«E Ȇ&¨]ò¢˜H9Åu{5k#“ÚÎí±,£Kï\YL±Ç OR×ùV’Éqm9‰ÕXuÏÝëœzvâ°X¹·ŽÐ…pwÜc%ãŒ}j[¥xÐǹœÊ ÷t_â9õíBÐÆZ“omfí¥„© g={þ'óÅk4E°€ õꎙ¾Bâ4I& ”Πû«ùçR\ÞH¥-ãÃ\H:·HÇ©ªƒêfïrBØ®˜'·<Æk¥øoº­ãK$²¤i8åÏ=Mr–ºmÖ£ªÚiiuå­Ébïí={gŽž½ëÑ-<#£¥·•o§Â ¦2Àn'®IïÎk Ó»²F‹Ev;^xäÖ´há–2Ùü’Gbº»RÑÛ¢ §Ó¯=k“›Ãv­‰ì Š ¸[tr Ç#<oñ­ÿj§R¶T]BÞ\ÑÐö#Øà×4µÕõ‘Ô/,O| ’¢LîbIüjZ"r…QVEPEPEPHzRÒÀ¹_.úæU9c´éÅcjJ³`9ÊzûÖìã}åÁäÛœ÷Ɐ€Mã!`ßJmÚ6:£®‡%u%‹©l‘¸ú{ÿžµ`^ÛXmP~ÄíïŽÏó­íLG³9Àwù6úäuýkÒ´ÙßX½–I7°+ó½ü«šWØê¤ÒlåóðÄ–C ûÔ7󉣅X|ªI!{gµ_Ó-KÚÚ©B LÖ]Ú²?” ŽÄûv­÷BÞñѤogá«£É[rsßuýJ£©5¥¼QHñ Œ¼ƒòŒçéZð©oÞ.0ÆÔžGCŒçò­di;d°µËüê‹ò©õŸþµcQÙ#zjíüŽ{Å×òišLö1ª+ß0'•ƒ×Üןۯ“!îa‚OlŸóù×CâK±y⻢ÌZ†ÁŽŸ(éùÖmÄ@Ä$U íßüÿJÞ ¨«œí{I9w€BºÉ|d´kŸC‚k«frˆÑ†2îwzúý+˜ðD xrá˜1»Ä„ý?­tR^Åag-ää‘Ê®yv=ŸZóêÝÍØô`’¦™Íxþî9îôý,º£Ã K1'¦qõÇó¯9ƒê0`ZU@ê3ZºïÚ΢.oIk™Ç›'¦OoÃ¥'‡Öñ>š­òƒp™ÈÏzîQä§dyóT^§µÝ¦e<€QÚ¢ŠØ€ Îâ{Ô:•ôv·Rn£yEå±ë¹¹|_=ÏÚtë;GŠýmfç?ÁßVz’Zhvó8E#'?×5Zþxl­Ug%ö…O˜–#8®|mg¼ÓÜ+Jñ¬f4r3Ï®3[úiÞµ”³$“*¹„á—©ëïZÆŸ;¼zÕ¦sÖ÷Ú¯ˆg–)÷Ø[[1I6/Ììrü9ÏÔU};ÂvÖWMss$—7 .õáAëšÒѵËbFŠÂël¬¤ˆ§!2G^{Ö”+~²HëiÑ“(cŸqØ~5”Ý[ÙhkMjÆ sç´È‹æ™±Á'žjht餈ž6“ǰ«v«6Ñ%ųÛʼœ‚GåWawÀB0>•Íg'«4uøLYã– FWŽ$~•r;Øc²óïY-ã)w<~½j‹HîBïåUzžÿ#5æËâ{[ÝZk««§ÂJÛ&ß•G®ñkZtä›Òéæ§£ÜY®N¥s3ÞÅ!¸•¶VU?Ãý Õðˆ¼Ñõyt ™Ö{y`ûTdOÝúÖ ÅÆ¡zVXɉÉKx‹c~Oaß¶kª±Ñ’âÁ® ‘Ž­ †%º«áÆyÈÞºT.¬9rÚÈØ¼¬ã  /ÌÜuõ§ ]áŠD Èva€1õ¨ÄVì¥'‚O¶ƒ°Ûm ³ŸNœýkRßÃ’ÎñÝÞÌ’ÝDÛâŒÿªN;×ëíÒ³¥{DLä’³4´Ò´;k~_-áïןð¨u}ÓXÌ‚ì ‰WŽ}ýh“R{ bÒÊñcT»F "ôi8çÛ¬Sð@Åz^Í%c™Þ/™;dr]éÛj‘<@ ‰Ð¿Â¶áÞ)Siàµn\Í6N÷D} ~™<Ö¸ÏèZ~ª÷÷w6€tËIÝ«Ç#=*%7n«ó«Éls†¡6½¨¥œÀà ¹i ©Î[8QÉüjM2$KVg›r޵ÐxÖÊßM-ްŽÖx¤h—„ qøÀ+ —²4\HÜpJö8÷¾Ýs3š­OhÉn.CÄR5;ØŸÃñªPÛeã-Ÿ¨õÍ+‚«‚„g;ÁÆ~*m…D¬Œ~XÛOƺïØÃ”‚3#¡„‚WÔ{f¨]È–ìL†p3ËzV„wkm•* çó7^*Œ[µëJÿëJ`  g‚zt46–‚Z‘Ûƒ³\ÌHÀHèAKu*Ksän_,|ò±èeþgð«0éSê— m¦Bn.\–\ày`tf<àuª‡OžÄIm|$‚ù\—óùý6Žã­dªÁ¾Tõ2Þ³¬„+F¨P[9Çqþ{T*~ÏæG¹â*74½È üçUà¼hæÑ|Û…FÊÆ7u{ u:€õ}kD‚êKØ ŠåCQ»j˜=sŠS«+ A-ÅÑ4˯±7ˆÊ<gTû:7VŒœãÐö¯L± lõÈé[w[j%[ŸqŸ­rž ½y"’ŽœÜTU¨£Nºqr1µ¨H˜33HùG¥eé»§žõ„mäÉl¸,Ü•ßú}?ƯXHńْ§q#±£BtžÿXEe‹ñ\ŠnS¿C­RP\̯k±X•aÀôªNu‚@’MÃ#’=+^ÞÙŒ…AËÉCY+³–lcŒ銺b{¦jNYô+ã‚JÛ¹q“ƒXz\±2ÖHÆ@ íÅjM|"ðýüùVûÝzëÅb«á_:"¡~ÊIÁé•ÿëV5d´GE.§rày!#¦_2GÇ$–'fPcË8tïP_ù6ÆØ7$Û¡õÁÇzm¥êLßfy„Nßê¤(O¡®©t0¤–¨ëü!‹}QWî™ÔŒñƒ·Ÿæ*þ¤5 \Ì6Vç÷Y³‚þþßA§uc¢Ï”"–õò܃JÏ»VM+Ë„1UÇA€a\°¥zŽLè©+EE¾ »K­FIT‚¨nتÚ"ù¾"±9i×nÓŒÒ^A0TyW ·,Osí[ÿtOí?‰]s¤fR3üG€?­oVV¦ÙÇÝDŽÂ=3ɸɺIž„ó¸“üêhtò·m/’ªd –¨·Í´q…¨ÏPF}i™H4œdd-y)NG¯Ïé"´IfE†Ic€½«ÏµÉ¥j· ¦KºÓy_%ÆQ‡lÌþ5×êN—7Öö³ä[f Ž$8è}1Uµ/i×vöyJ1ËJ„–RqŽœîÂÓ•?y+œ‰JGk¯i­èŽ_@.%½o)ô®÷Jº¸Óm¦Ó4Ë8l¶ÒHïæ¶ñŽ>µƒÂk‹;£qk© ¡Ü7§5Ði6×öWðÏyåÉô[CF r:ãÔ~têMßÝ_™%&Ò‘jÖ9!™”‰XHÛ¤yæfõ­6Â8 õ¨çgA¹T­F.˜ ¾@ïžõÃi7ynvïbêhÞ&V(êU€ààõÁ®$xCµ¹V»žy¢Îá” ®žK‰m‰r¬ëQ-³€Æ8árj›·»wòiÇvR½µ·šîöB€ D@îãÒ–ÒÞîÉ¢Ô#”Ë,`¥Â±åÔÿ‡Š»ä`F0~\æ¬ÄM²ùÄP~ûãWMÍI&¹lƒSŠÚçM‹U‡á@á²Àcq×Z›QÕ¢¸"ÄÉqw‘åÛI€ ®ØãéÖ±£¶Óu °^ÊUs˜bmëÈ>†¶m"†ÑP*GŒ—õëï]žÛ“H˜r¾¦.¡áËýR÷º¬ž|X’ÜGÂ#Ž™Ï'ô«šwŒ…¥ºZø‚ÞK[¤aš²>zö­RÅó·ËØã†t0ÜFXÃt5œjÊ.áe%©³$p_$[Ç›!— ûÖÿðøÆÌXêd `E ǰ=j¾w/†µ8,g—ÌÒn–Éx›—é]¿oöíêqæßúóþ}k¢iN7G;N.ÝÝwû:ÛA½}V-ö(¹‘UrÌ3·ý¬ãõ¯!µ‹Tˆß_A§Ë6—ÛWËÆ1œgÛ"»Oë-©|<°nFÔæzƒÏê?ZÉQ¼ðºÉáï&“PQüHî‡øV1Ÿ³·+±0§ÍÑ‚—Ñ\Íl"‘á‚V^eÚ¼~o¨« ¨iòKä¼++ž Bû§½~ÇI†ÒÆÖ×Ë]±Ænß@;tíVⳂ?œD¹ì1ƒWõÙ¥¤Q2hóÝÁ÷š»›R!ig»"Ø}ùGûgøAôØê^Ñõ]>;«DhâÿW·å(}±Òµ„23NÕÎv­J#9,;ú×74§.i=HrF^• Øè–Â;(îTrO<“Ôžišåœ–ÝÞÛErDÒe àfµÈ%0qõªÚœ:Ž™sg;‘јدŸCZB’¤î?ð”úT6rÅy¤ÉlÓ³Lò,?»*À¸è1ýkšOx“L–K[]Eb°¶&8· ’6’=+ –cP€é—qÁ«ÂpÃònüÍhÚxrÚ( Šâ4’U%„»FIçðéŠqçZ%©ßÓZ²÷‚¯u bÂKýJ=²‰ jÅ6™wÅsÞ#I%ñV ±ª ‘¦öãåûu®ÂM¶Vó_2HñZFeØ­Œàzw¯<¿Õ¥ÔõGÕ4¤Ü×mÒ[H0Þ^~ßìþ•»v½¹‚RœÛŽÆ¬±ZÃk±J$RÍ ‚Gu^ÓmãÓ"dDÛfÓëÐWhš˜µžûJ™VêÎÝÙ×?$mþ9Åz/…µ gÍ™ýÜÊÝä€r?(Mi©Œ”NÚˆÔwÀ5GÝqïRUDóžâÑEB (¢€ (¢€ (¢€ JZC@wÒ¬7ò¸Æï(~=k‡½î`xPzžµÚk*‚Y ûÆ0ךâõ' 3(ÞN3“^~"Wv=l,SŠf6­o4±ÂbbpÛ°Z»á)ý¯?ÌZ1Ïl/~4ÛeY0ž^„㵤[˜¯uIvŽ^5þ×ùR¢õ±ÓVÅ9cÛŒÖUü]ø‰g~î˜?ýjècŒîVfÇsÇJ¤©C(i]Õ±žÝÿ•vì´9š¹BÔÇsoq‘~áÃ+Ï'ùâ°íKàÆT+¼[8Áè#ükq¦·Òí¤¸¹IÆqÇ'ÇZç¨ö~fñÒëÈábµo•Ü’Œª7gÚ³n4åƒ]Œ@wáê+sU²pºŠãË™Ó5L¨àu¬}2Y"ŒÊÊÀ@ÁÍt'}Nf–ÆÅ©i·îlŒ•PO@:ÿ:ÒH ódLÛ£eÆ>ótÒ´|#¦[ÝZÜ\ÜîÞ…›3Á¨¯aûE›BR0Yð~ñä þ8ü¨Z–ݵ9¿][\8X²'F÷@ÛÓó§èú«húlæ-îòKó…r¡†\VuÂAÞé (¸`ûíÅIiÒ)Xb2J_vÅ<öª’Ó^†jmO˜õ­ú6Ò¢žöîÆ! ù#S†_©''­m<1]àÅ$r(8;}+Îô? ^O){¨Û²Q‚¼þ•¥}¢Çlìï$' «Âä­qºi½¥U=ÎÂ[4Ú<Å]£¦ê± ùf-ƒpSÝ®6Æ;›xµ‡Ú Él­:ÓÄ:ͽ·ÚZÞ-BÉ$(ó *ÃHœ$é½Ôe¹½­ø²ãG¸’%Òf¸àlx›9oʹmKâ ÅÛ[)Ðe ‚O˜’sè==? ímä‹P….àÃÆê[ÔFÚ'rÞJ¼GéDñRzr‰Ò]Ì­ÄÑk¬b’Ö[i[?+ ǯá[¢ÈÆ;Št6°†&(ÑTU˜ã*»IùGs\Î*OcNr’[*…ÉíOuŽf•Õ®Xàgêk?QÖñq¦”DÓ;í’P7,Xþf’=®YeÔ¥yðwç#=Ž)¨(î;Ü·Ñ]#:s8 FúzÕk6;û¡öZ4@~ïåZ¦Î| =)޽=+T»“{ZZ[Û§—`c¯:Ýœzb£–X켌#^Ÿ9Ûüè³›í°4‘2¶½&¬=l,І> äѳv0rsÔô©i_™†8ûU]Vóû:Ã0F$»‘¼¸#ÄÇרrOÒ’}Eu²(ÜN÷ž(‡ì¬Ë¦$RØÜÌ>`=Àó«ú…ÍÆ½ º4VW1H®‚ê]ÃlkÔ‚AçŽ8§i–Ç@ÑI ç]¹ç#™%n™¹=yàWK£i)c§سÈç|®z³O¯å[ÆO–ËvaZv9/ˆ°XxsHXÔ,6÷iÛ…8¬¿³ÛßüJÒ.âãu±‘À ˆÙG? ô«6ÚöÔÛ\³@ܲ8ÈÍcÙh/†%7öÉ ÉÁlÕœã$ÒKC8VJ6ësyWç ÔÞZÆGzÊ›W(c¹ˆ< ÌÕõÛ™ÛMÒ~[Û‘¹¤eÜ!AüXïž@Ͻ¼º³ *üŒ:Ž{õ©[ 3Ûë\vâIîì¾Ì÷ÉyÈ­’72«»ŽÝ¨“YÔÄ y±„½;!ºO©Ô» œµÊx¦þ&DµŠvK„uvTcÈôª÷­óFXLÝ犪‘‹§i$ Èz“Þ·„l#NÛÙ3 IÏø“[‚êÎÆH–êî(^Sò 3þsPCkS+;`“µrq“ŠÊñn³Om{2¬êª"ØGÝ<ùàUJVßCeï4†x·P“WžMO—ÈšÞ3;ÊzH00£Øç¯µaB óÙÝÆÁ ¶1”½p_δ­£gX<+ä³we';OâN)m4ǵñDÉl sÎ}+Ï­[Ú;-ªpTѱ`gšÝ;ȇÈà}:Wiá˜$¬À±t¯@;þuŸ¥énî–ê¢&%PóN+°ð¥’A§Fg<“Ey#*ÕT`ô:ˆ#UÎJŒ–¡†2)$|Ï‘ŽÃJš½4¬xoqh¢Š¡Q@Q@Q@!¥¤4Îj‘<·2•Âòk™¿„£›sr;žµÜ]HžMÉn\gë\ÝýŒ.¦‹æQ€OOZóñ÷®zxZ¶Vg—ßO©XlU@‘$Y™”ýñ’Oà;×B³ýŸÂ1_å·]Íö’‘åƒúm­y´!sy?šN&H=29Å[=¹Ò—Ns ¶X;sÓŸü©R™ÕR|Ú"´¯›j¤€&›¯Esž"³»Ôï`[6XÄq7'¼1šÐkYoôIà cd˜˜  ç©äâ4…’zûV³­Ê´c©ÈXi×7¶0Ç©‡q”(O¯nø­™,l¬4Ò\a6•\6èãZélCìMÇ<ã×ë\·ˆ¯ôËèΙ¡Ì4¤òGPO×нIjhÚ¶‡)¬Ùé× &³¸)p¿,ÈÙlýqÍaÀB»ÛJ€Ù÷­ jò ܆8î¶ï£Ž€ÿ:Ͷ‡}ÈÆNrMw(Ù²zV©¦š$…áo.N3ŸZdÓ&ž.#ÓKÉç‰çîD8Ë^ ¬É.c À•8®K©.‘er»7K4`zškk »îqJ…¦i|äžÂµ¬[É·v·¹òn™ÁSž[èk>Ú0Ê‚{ñVà…£¹R ŸÀ ·µŒc}ÏHð¸ŽÙ%Ô/áY°á›'§Ojv—jë¤Ë ®dÿHv@O* ãô®vÄÉŒ$­Ž[on†¶´„•˜'*~lŸQÅc“7žªåõÜ4Hë´g~q“ô­5½Š =f¹Ûc®:“Àõɨe+M5Ãì‰G>ƒŸþ½e›èV¿Õs ¬-º(›©#¡aëíÛ"®Q]H½ÑjúVÇËŽ×Ö§³±[L¬qªóÐ ÈSR¶ÃØËƒDÜË$í$¯Œ•‰Éú+f+! AcèM]TÉVeÇëVâŒJHÀàt“Ž·¹«dfˆÁ³`c–=«›Òç‹\×¦ÔØkò­ñÈ_ïëŸJOë2Ú]éú ŒbK‹³æM–ÇîÇðÿÀ¹ü©ñ]éöúdó[ÛË‚2­XtpEim®:Oš.H×µ–;íL]ÈÈ,mF!vqµÜ÷Ø ëc €:çÔv®Âúþ›¬ÙÅÉ·ÙÓÈ19ÚÄãçéší¬âÙÇ Hd ¸ H9…oÓl実Ruùº~•Ý´wUSŽæ¥`ñžž´¬¤“ß?7èsìÎK[û‹äÊùi\‘KËÉô‡5‚× ¥-ÝÍË7ö¬ñ‰'p°Æx n¼{Ö×…Ñuë©õùÕI‘Ùm•Ž|¨ÁÇáœV†µo¥¨Úii“æ,×tE9½‰¬w’[óÛFrÞÑ¡³–mVKW·’åqDr‹ŽÿZ×i`vë‚NJÖº¶]¾èÆ?Š«Ë§Ûù…Œ@{ŽÕq‹ê_µG0 7Ò»@±Û€â{ Òhti&x–ê—¯–²Çè+ÛPÅüºJi’CÆÛ. #ö*?9MGr×¼Sñ¶z…”oûÁ,žíàñô«–zm½Æ ÎÜÜÀ#3³|ØÎpj[Ûyvó°–8`ñïŸqQYÍ5¢]Fѹø&y>ƒòÁ®J•œ“GLTTn‹Vvžb³È€“Œ©äžµ-Õ¸ºÕ¬ü¸÷É*dr9P <梹´ýQ¯J–¶hXÁ嘷}*Ý´2[Ç4¯¹äp¨sŸÝŽ@ýkÙhÈ”›|È·.ò–Úo½Çó­í2Ím#RrðªZoïc ªpqÁ­˜Ól™õ®Ü-4µ8±3mØç©Í>™^”úï8BŠ( Š( Š( Š( š{S© fÃ]^«tr1ÿ|ŠÍº"9®äž × >ÓrO|túV H,ƒ85͈I+”5cIÉÈ<ã¿jlìb¶,ÄÝñÞªM¸F¸f§§ÖE à¯ZåzìvòÛR¶ÒЮì'Š„þöfUÆÔ«s8E\ðOg¥c꺄N‘svJ3"ÇïžÂ£•Ý#E-.Vñ>´ÚN”#¶ŒÉ}xL6êxŸâ>ÀWÝééV)“ϼ‘Ì·û äþu§¥.ª.u]C÷r˜„vШû„pØôÍa\åŽrÀçßŠì§ #6õ¹P[‰>dÆAÎ:b§ì^i†Ÿ”ÚŸ§ÙÈÅUÈU#$“Ö¤Ôæ3@aê¨;µµîȵµf4nÂB@zÕëÛR–¶í#ù“È™nz ð?Z†ÒÝw.ÇkRîØÍ´®Uc‘W§BUÌku1žN5©cháÞ?™yPGò)ðXÄ/2(Ü ÕÈíØ¡,HãÖ¥»+#@"µŽB˜ûƒ é×ÿ¯[ZF±îU{.?:æ—$#.ÍÛ=+f»K%‹Î•c…Æq»ü*cn_ÄZ¸ÕöÁq=ÊŽW gn¿~\=O§µI¦øJ[©~ÙâæÈXµVýÜ]ùÍA¦-³ø”_Ì'¹HãÿFÆ\!$‚Oàuö—Qjéy3@À‘·®j*9Iò­ µ‡"˜Ï—*D£sô§„TS»ïç9<Ôª0Ê«€ÌÜÒÆâsœgÖ³ŒF¤F¹ç>ª'o/ïÜRI Œä)ǹïQ+yÒç-ÔzQkl5½ÇC.Nc F:°àÕ¸DLÀŒéŒÔj€8FqÚ¥TÍ·rîÎvŽj›Ðrw,Ål7ØÔæ= –À>•^7òÙ€ÆóÐM&W9èO\š‹¤gfÍHBméÇqK…C¸žÕNÚb»úf¦ffÁR}(„yŒœ]Ì/xZËĉÒ“äCNo¥qw¾ñ‡ìÚå¯VöÜ6^5S£½z\›äƒlmåèøè=³YO§[³bêõå•”‚&›±ö¥Té»èkJRŠÐòóø•dŽ8ZÊÇ"q•ÔŸ^«Ó<¤Ýhú#ÛK©™ÐËæFã²úsÍ>/ ²²çŒ|£oùý*„öwW3ËŸ— ΦÊZ²êJ5Wñ œíþƒpò)?>ìƒS\x®ÖãM»Ì3'î_ïöMs±«ù¸(y'è*¶´ÞVö‰>ù–Ú0RÙÉúc5ºvw0•(%sWÂÚšh~Žæâ5^¢÷ØôýH­Ý;kx¥•î#’êã÷“;79<ô•Ïx†ÑœhLyŠ Í&WÕPíýj¦§ÝÀ‚)¸%³Q;4“!AIÝžŠ6\‰ƒÐæ ¸ q ÀÙÙ"8ôú×4Eˆ?j{+ï²e2þÕ7+"•©‡Âv6÷pέ+rry­¤ˆ1,¼§éRZÏêPA9"¦FËüþµ”`“¹2©-™Bhá•äóJ.ÄÉ$ýÑëY+´În¢E}ä•aЩ~•Sð鿊þHfkyî`XX©ìz{ŒŠ¥`ž¡T R0{øšË˺ZšÑ•ï`žÞ83·1¨È>Çj…ò5³®HAùÕp°ÿõ×1#²Áåïþzy­c+„¥wcSF²&PD^R7c±Ï½I­Åqk{%«HUPUHÆqŸëZPÝ®•¥‰‚æã`0äðöä×N~èó$»I%¹¯œæC—lsúÔN§/@hó—’y…Üjëžžõ{O¹Õ5›–·µ&C€¹ ˆÖ½R hÖßêtøð>à$Ç5¤–öÖ͈íÑrÐ1YûIKe`vèrºÃë/* u)¤yÀåb}©þ5®|'¢-‹Ûɧ£Fÿ(;‰o^¤Öã22ò~cß©‰…±ÉõªÑüLÉÜã­ü5…Ôm§ê×6öêÛÌ=qô&º[kh¬­Òˆ£û tääþ¦¯îØŸZŒ!*GnÞô¬–£L†8ÿz²p äíùRM"”$q÷zš¬Ttqž½©Ï‹2HÁUq’q¶‡rofTšÕä`ØÂú­}sk¥ªÉ3<’žå˜û ·qs%;í1£˜³mQ}N{â£Òô˜¬gi¦g¸¸cóK ÉÏ· ¬äµ-NÅ5ƒTÔ¤O´F,­ºâ9¿xGÔ+ZÛO‚Å?t˜ynK©<Õó#$’sÓ½ ’ÀzUfÉs*öIòd6FO­W¿¼·ÓеÁfyË `³·Ð~_k nÀª×º%µäÂòHYç… .®}¸¦¡bìdZêZ•ó·ÒžÖ<Krà ýüjÛh?lpú…õÝÁ@Ä¿÷Êà:ÉÓ­üGbÓEö(ü¯4²bNpzŸ^jì^ † îܱ!µ_ޘؕœŒã¨ãó®ˆB-y„¹›ÐÐ>Ò¦AæFò0\#±ÇëP·4U…„Vˆw6âX’sõ§Úøš‹Y.Z)#¶ylßòÓè+IuË(íbšââ8RBï8Ëz{ÐéÅõ&õ#©Ëé÷_ð‰êSÙê.4¹0-äûŒöSÚ»^Öîš#±8H`G¶+#Ĭө±ŠÄ\ùË–i=øç5WMðíÕ¶›mdš…ÌvÑ)_*,&sÎsŒ÷¬ym I©jΊU´¶¦—ËŠ5ä¹ãÏÛÚ_\Q’¬‹hˆÛÉêÄzž>Ÿ\·ðÂ4ÖÒÌÓJÖü£K37>¸'ƒ]p,I¡@èùýhP¿C7;ÅÁû_´ûUÊ·¶’i8éœ(þµÓ­¸\G_Jæ´Éá—ÅÚÕÜŒ‰´qÛïcžI¨©n%Ôu»‡X.$±Ó2>%›Ü7aéU>[¶ö%¶ì‘¾ÖÌ"^;T'KµóWŒö¬„Ðí£€¯ÛoËã†û\„×¥P‘5X =rä(;O›Éüë&£kµbã}–uööÑ[®ØÔ ÷¶ñHˆÂiŒ]˜¸À$?Çá\_ŸâˆePú¼cn¹ý«‰5«C§Üýšì¹Ã«§»/8üÅ8Ê\‰Qž÷;-O¨þuÀøí䲞 ÀB¬ÈB%цAdzW ãpæ šÖ)‰ó€‘HÆÖZ'Oš,šU\%svΞ6_´¬Jì£øOSU´ëc1Dfv­Gž-|U¯H%m³ÃÁïŸcùÖ¤1,7(Ê»²0A¯>¢Q•¢vÆ~ë5l†c;³ÈäUÐ÷¨mÔ„ÎÍX'½: Á7v ÷iÔÔ•Æjð°½R@,r Ía^7W:hK•œÝåÖÙ«¶æ½* ™^x™—¢ž}ëBKxÑ~rºc8üj³Â$…™bè ®ãÁ¬¬Ò;¡Ë}Lµ‚0ÈèUÉ8ÏaJu {w0ÉÇbéVd‰¢thàãõŸsjÂ5v_ºy=³UÛÔ¹Ét6´{x–‹ˆÁ 2•n;Ts‹6ËÉr~cÉ·óªÐ_¶Ÿk†; ¯lqTuíbÞîP¶À)NIõ®¸ÅXåwæ05IãpÊäûóU´»¶Þ©b8ÆàÄu=é³âêìd…Ï9ÿf·bDƒFyƒlypˆO§|TË¢F±2Ýžó]ÓíH8{ˆàÁoå^É9ýç\ò1Œ×”ø&Åõ_†fh´ø÷“ÛÌa^³&ÒXORAþ•Ï9^Vì\]÷! +dãjq#ÃrQ# mÇ<þ5!ÁÀ8ê)k¸4M׃N”å+°.vŒäbš[1ó;cúÓÕaœ08ƒJú™È2¬Û³’*Hƒ0O{Õ+íRËK>[¾n¤\¤ » ã‘éïÒ©n»¿"¸s ṉEÇ—p9úâ›k©6¹væúÆÅwI2ÉpÀùi,íøëŠÉ[K­VégÔö›uŽÏøú·©þUvÃJ†ÝŸÈb û‰îkV8V2q’ßÞëš™I½ùRÜŽÚÜ›]~R8\qS¨f8Àã¥=CoÚN§9«W8QžÔÒ²!±,€qÈäÔÊI8#ƒéB #ƒŸZrFÑ· óÈ­b¬fØåR¼müûTÀ€@ëï@`Ã'sÍ4žG9­-Ô‡©©Óʺž®æí(Ò.DC®G¢ñ%¤¯ÄX|¤F²‰dgÇ.ÍÓ?@?ZìíãUDN«ŒtÎ*TTº#YN\ˆ± pÏ N7äñó® \‚ püéM·å;ÆqÒ®òãVÚnL]¸ª×“ÇknóÈÁQI'õ©ÙÄk¹ˆ :“X~%¿[]1CB“G4«+t(y'ò¥Òä­õº›6®÷òB’\>qPqÀÅl"@‘•P޵CNÕ,îl¡¹°®  °ÏOjŠòýË•”©l„•›e«ÉØ%U’蘘º°Àõ—¬ºÚZÉ wPÛÜ´ÇUd*VÜŒ²c—Z»Æ×F¦îWÕu¤Ö]"ÎÉ®Áùfߺ=œðGàûÕ VÞoøI£¼¹K™Ð‘e9e'îNOøÖõ™³ÒK›éà†wá‹6ß~õ^ÚÑ|K}©s HOú,.8oúhGò®YÎV¿àCK¡b=f› ØLör,J¹A<ƒ×©üé‡Ã‡Pέ"Ë.NÃ)°ÁþõѪã½;j’°ùÚØ£¦iÑi¶ÚBY£‰B‚ç$ã¹÷«¡GãJhÖ±‚JĶޢŠ(¢¨AEPHxíKIŠ)¬N8ö§UyªÈvî8†‰-Ð$ABí™ÍKM\:˜‚Š( Š( Š( Š( Š( ß;ÇVmØ2SWËfãi<Èæ¡º· »ù¾µqi åïàW£d9AÌi mVçO•×}¹Ü¼c*}+ºš×y*à “\®¤¢=vÉ‘Ðùâu=qŒç?…D’:)66Þ4Œ™$å‡*j–IÅÃñž£¥2EØ6¡Ý¸ðzþU%ªâ@‡^Mf‘rdÈ0Øù¶žõÈkúWÚ¼ž¾¿¥_KØ”®ÆÁ¥ÚÇp·Î¦IFOÍó}zäŸrjÆ“¤Ûkz§™:ºéù D{‰¸qžPJŒòGõ6—£_xSH–&ƒL^^v]¾o QÆkÐ4½>ÊÊúh£g{oÜ8 ƒ€?„wàt¬&œŸ)ª²C,ü Å²T±‡#Î%È?‰<{V™Ór˲ÙxX£\d{ž¿Ê¯  yéØ •F#~Î(ÁÍŒ‚Ú8$H¨£øT`T¸Á9 ·çA9õVFw¹OÌñ,¨dN©¸dqXÞ)ŠÅt³{z¨e¶ýäœ0tמÕÏëº=Øñ-Õõ¾Ÿqu‘Å#nÝä~5—e j×÷©XMh¼‡–æ@áAë·“ósXδbùY´!´Ó5ì¡ñ-í´2Û%²ÛÜ"²É$§rŽùsôÈ­áíB kË“4sÞ&(“tqçèXŠélmb²³ŠÖ,쉌õ qÍGªÞ.¥]Þ»`AI“Î0=+D¤õ¾„º®ú†6½kem¨Á ,뉸rñŽAšÏþÉ™+“u?›wpyßrÞf¨ŒÖüh¨0£Òž§Q‹¹“bÑE¨‚Š( Š( Š( Š( 4Ɖ‚Ê9% (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ uýüoŒœMHÃ*sÒšÃt‹ÏJs}Ó@Ì‹†B™ÝëŠÀ»ÑþÛm8f_ ³m a²1úfº•¤`1Ç\W7£Ï4¾$Öb·—Œ'8àò> ƒJi5sh\…Ôý¥A…àœ P)$‘TŸ|V­ôÅl[h;Ï'+Y0†<zàv©½µe¥Í±Œ·10~T‚1íé^nÚß¼X>d.B.xÆk»šd†ÝÝyÉ=«ƒŒ›½I§Žù Éô©ææZ4ãmMJåo47¸B ¶’,«‚6Hü«Ñàqygmq¸è§5å Ó í %šDt ýâAÿ?…z7ƒä{¿i®à+¶¶;à?•cSEcGmÍS…b8ÏaŠC8ù±“V¼ ‰–#¹¦œõÈæàìcœ ý*|g©Ï¦)T¯~¦§‚,Œ•Ç=ûÖ‘Ô‰HdQ´Œs¢­Ã×gaò‚zÔÑÂR=k3Yñ%ŽŽ6Ä·Jò”à.z'…þ~™­â»˜9¶ìŒ¿ê²ÚKg£Z‰ï74Ò¯UŒ`lçÿõÖLÚŽ…f°E´¯€±§Ë…õ>˜¬Ë+jW®‰ûÉ×s Ë¥m…I 1ê{úTW¾µ]N[ÝB[íI†^ÞµP¥˜ç=±Ÿj¨ÔŒX*wЫäOâ]iRØHÃvS¯úc°5ÛÙx×ËU¹’òRCNÔìíõ5gBÒ†›eQD`îm‡;‰ï“Éú“] ‘‡ù˜öµ*n£»Øs\š"œÚ%£j߈š!µbÇ8ý+C)Œ““ýj“<ó0Œ¦ÁÝçò©ííUy,sëMYlKZj\¦}{ÔŒCqšfÞ:š]¼qÖ¬Àp^.9☠/^iÇ‘Í!\ç#Jv¥8pÍ>XöÌëíVÏLÛö©¶³çj…,Ç€ ã¼[â»+ßj‘,Ȇ=¯4‰´ ã€9ü+¢ñN‘.«¤¼6¢%¹Ü¥ds‚ ‘‘Ï b¼ßP†Íí¤.±Ûƪ߹l“$¹õ=qÆ+µT4G^”%«{«¡G:Œq«X/Óh­1Yµ{/éöÒ³4‘À‹œâµXàg¤-k£šIT†¥kçù&P¯žqŸ¥[ «M¢²µrÓH¶2Êá›?,jFXÕ][ºÖ¼É“AhyŠGa–üøÐÚ[’Væ: )Í-2BŠ( Š( Š( Š( –Š(¢Š(¢Š(¢Š(¢Š(¢Š(<àž£¥9¿ZF ½H#é$%cb«¹±÷sÖ€9ïë £iRÜlNNÈcîÌ}½+²è>½Ô.ˆ’úsæ0ëóž}Em\iï%û]ê^UÿSQA}¥@ÐF“¼‚<´¤oç#ŒcʦlÚ±réà†LîUåóÆã\åܾgšYq“ŒŽ+¥Ÿl–$çƒXvæ(6m$œš‰ìhØãüAuåÛ-¨~d?JÂŽTETuÏFWS}¤¤×‹{&çll žáS˜-¢HÝØ.ÉcÀ¨r莸ÇKœÔMìúòi‘H^[î2nù£P~lR8ükÖlmRÎÊxÆÔE ªAé\G„£m[ÅWz¹èÖ‘}–"G±ó~£è)’ÁúqÒ°“NDMôIÈçÕŒÊqžz˜+HØ'Þ§H¼µ½iÅ9ÚC"ˆ‚8Ï¡50n¼úR fcÁÅ9W$Ú¶ŒR2”®TÕ¢Ô.t¹¡Ó®…½Ó $¥s·Ô|qøÕ 7Ã6¶¢)îžé9Üã€Ür¯¹É÷­¶`ŠÌØëSYuhÝfxíÉËùgieî3éô¢vê(E·¡£©O¨Á4:K”·”o2ïlþY=ûƒNÒ ²æÞ?3žKŸVn¤Ôú$oÅn‡hR¸'ëv%ñ޵dâ綆ÎÔüʉÛßéZˆ¬#¾ðïR©ü¨ ݲ‹G,§pò¾C·ˆàžqK†UPNOsR("—֑ކm\•¥ÁûÓ¶ü¸ÇlS Å_B3O zS³Ú¤ O@4™´F+ŸÔ­¬è<÷Ó#þ¬Iý(nÚŽ*æÌ·6ð®égŽ1Ós0β®§ðíØ‰n'±#ùˆ”€}k+Ró̪L¨_#pÎ+7Wðâ^Ü<»L$ðCœcß5œ¥º:!GÎÇ  JÄDΗP¸EÉÚàñ\6©ãëðÞf¬‘(Ë+>[®=EgØøZú L–rÜdŒѤU ½ ÄZ|ŽëhY Ÿ}}ßN9£Ú¥±µ*4“÷˜ÍG^Ô|M,X–*r¨vç=óϧ­EÖº¶æ¨–h•ògÜ·¯Oj²× u¥ {ë,d„‡Yü†ë“Áã8ªštðiÓJóÜ ãåct-œäžà~.¤º3§– ZÛ>²†óQi/íþÐÒü¥›'¿¹þ•ëÐEoÇ*F £W¢øªÖ5T¸³嶬Фƒõ$WY© ª§<7*Aê* ¾Ó8q mÚÚ sšuV{¸¢ˆÊÌ6¦¬ÈÏjÙ­5¸´QE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€#—!2;S¹Ç5 Ëm8ÎXÌNi8Ù˜ª€2I õ vÐÍÔ¡ÜÙTwsØz×-m¯i÷𡆠¸¦‚HÿtËÝ;†jýÕóx£P›H³V[$8¹¹ÏßÝ_cëU¼Gá½6ÃN¶¸´Qk,3"#¢ñ†`?Ÿ_zÎMÞÉ\tä“ÔÓY<ä,~AØU[ÉâxÝ@ùðëYókVÐ ¸à+[:ÇÓï»q°{ÿ*•à)²v^ óŠNjÖ:azèÀ¸ºV¸wr©c,[£¹®OU»—R»Kk(ó$ zM&?’õü_ñ"4Ú‰#žW{ê}:Ö—…íRïħÏ+þ…h¯>g<ŸÂ²iÚës¹´‘×hzdZ&ocß°eÏ÷˜õ?ZÔÁesÍ4ÂY‰^G\Õˆã'ô©„Ðæ›&ÑÆ}M?a- œ›T`þY§F3“’=«[YhbÛ §aÁÇÖ2ªñúR,€!ùIç^ ä°‘^XÚéÇÌø¥Z0¤jP8Å9•8æ’H^å—æ+´ö¨å»ÔnVÐj¢¿ÝSéV£‡g&[p:Õ….­#)O Š£Å8(¥Râ´HÎâ`QŠZ)ˆ E'¦j\SsCed¸PØÅY 3Æjƒœã&¦T$‚ONÕ:ŽVcúÕil-f“Ì’gþñÕšZ«\”ÈÚÉ+‚}©^Þ)‘ô©¨¥Ê‡vF±¢.ÕP°§Í-->T+4¸ÑXQš«.a0ĖѰ>«šÐÅ.{¢”¤¶fSh:~Ý¢Ú%\ç?• ¢[ ÄxŒ"Z¸£•8¢½¬û™çO?ºw(Œ© о.)kE¡N[…Q@‚Š( Š( Š( Š( Š( Š( Š( Š( Š(  —¶Q_Zµ¼Û¼¶Á;XƒÁÏQU¬tk]:6HÚwF"i™Æ=0ÄÖUÔ®Ež›srå”Lÿ¥k…Ìosw«_Û—&(}6 Æ@úæµ5{õ-2{97mg(pÀ‚ÇâT𥹷ðÍ‚1%Ú îO÷›æ?ζ[§4’Ð6gšiZ0—J]F`Æ!¹ ©V<cÝÎ=«Z0òÀ›Áà}ßJ·ksö­•EDyAŒ|Äñþ4‘+$f2€ÔëXròÈÚFp2Z WÄ72HÎ#„|¸÷­ß Y™õ»ÝAH1,f-Ù˜ñíÚ«ë÷ÖúitŽ?”FYö}á‘ëõ®›ÂBiž·@Í#Ì<æ$t-Î1íB»gLªû¦ºÆz稧¤uiPÁéJ¨¹æ­#Q•L{¸éýiv°PE]+Ütô¥X” ã‰s+;FG4õ‡'ž«!xÅ(P(å¹lˆBZx@: }j$¶Ø€RãŠZ)ØBb–Š)€†Aq@sH¤"–Šh<Ó©¾ô¹Å-QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ³µ¢‰zLfAä¾Tqž hÕ=FÈj2Ú3”IT«9Áô  ^,|3§nbÍötËŒñZì2*í-ã‚!¶8Ô*`1S‘š”´ÔÏéö¦ßMk}­û¹¤#“óžjµëQŽ •ÕÒ˜÷EanÅY|§Ü怿¡©o/.àÔ­’;S%«²Ê*OL~?ή@¸…„`…VPGAÇo§+š­u$Ém‚´›€ùÆ3ƒÓÒ‹Idš-ò¨VÜF pHïùÕ­¾ôb€+Ÿíe /•ØŠ‘™üÄÆÝœç=}±RâŒQ¨7žni_$˜c“D¢s$^S¢ 9|Œ’=OŠZ,9pÄðFõïý*N«Ïz\PiX¢B‰´c©ëM¦`â`q·¸©”rsKŠÀ¨Æçíd.ÃÁ>üÔ„È€Ú¸>õ>)íœb˜î œ ÜŸZu 4´Ð‚Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ŒQE&)h¢€ (¢€ (¢€ (£4QEQEQES%‰fBŽ2¦K@ # Å*‚'4´P€(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(£4PEPEPEPEPEPEPEPEPEPEPEPUk‹Ëkg‰fž8šgòâàoîŒõM_ÄÚ&¶of†M)¥+V]ꃞœÖš·Pf»_Û­´· ‘"$?•óGQ“‘éT?á(ÒŸCƒYŽg’Ê|y,‘9y3Ój¸ôÏNœÕ-#B‡Á¾¹²Žâêò$if“{åÉl£'“\Ö… ÿ„OÀðKg©G%œè’ ˆÐ°…Ôîé¹€Éõ¦’&ç¤´Š¸ÜBäàdã&¨XkVZ•Íå½³»Kg/•:´l›XŒŽ dc¸È÷®{Ƕ¦h4Iš éá·Õ#’e²ó „ÚÃ8Nxb¼ñŠÎ˜ß[ø‡U¼··ÔÕŸV³\Ç”x¼´Y€6•À`ObJn„äÏC9àþ4y‚¸ ßVºÕ¯#ÔouXn|Ë”‘V'XLlÇÊdrvd.Ücž¹õ­.©5œ—´÷O<èEd“+#DHi€õcü¨qAÌuûè =«‘–=R<Ëö™ì\í*Cˆ³•Øê[æîÆ&—¿¨YêÖLÚŤ³ØÅ5¥ÅÁ`Ë8ݼzv Žž¤PÓpç}J (,µpÞ‹Ä3ë²Ï©ØlÙEäqÊÜ/š yý¤ûn§xôêï1é1êM7Ùî ¡`‚@£fý¸9É8€yÎp(qÔ|Çl[8ªš½­åýåŒ,ææÈ¨Z6\n©€8ÒðÆ·)|Ë3 –e#’NzúcÒ¡:6£?üEyÔ¡u¶´Ùwû1˜ÆÊÇnìJðAr«Ø.ìz|ûTrÎ"…ä*Çh' 2N=yˆÓµ{m6±Úk ØcŠî%¸>l·&UÜèÄœàoÜøŸHƒ]‚ Hu+-A¬­îîÖXÔ’î¬w@Ãç,Pø$uÆiò-îO9Þi:Å®±¤[êV»Å´é½|ÅÚÀsÔvéU¥ñ„Z¶§n’I5y-¤7F꫸üý3Ž~•¡é·rü*þÌžÊâ ±e4DÙ » Èõã‘X6ú[6›à膗¬C ­È¸ $Yü 0XÃs€ )™£Õ‹}hÝ^?%¯ˆuì µ×àŒi°ªµ¬ ].Õ¾s*œæ#gšÙ:¨ø’újêçM/UÞ.ßärqœmg!±Ü(ä]ÁIÜô}ÙÏ›¹Åp~6ÒµÙõ9t[»èÅäRYKäÌá-ØÉ6Ðp1´ƒë‘XPx–O éW—3êÖËu?™¨Ç›<¶è#ÚUY_ia¸í9ù†sŠJW¸ÜšèzÞÿjPÀ’jñ]OLñ5ÑÔ`³Ô©=߉ü8ú‹Ü@­äw0´D$2a0£Œòœò>K=ÏAšöÚËk9g qrÊL¶Ñ–#·y«dƒÏ\ñÛüÿrºö£4.Ò4øîfUº´º/&A .ܽއ—q\øLxï..Y Q4“äºȨ̀#±È©qÒås`Çÿªªµõ°¿&EûYˆÌ±rTd~&¼ÃMñ¥4Vfµ¨q Ò3@2¢'ýÎ2œ¼ûâ´—Å7¯m%ÊݺÌ|8/J´'bMŒ’@\çÛüiòy“Ïn‡u¨êvzE›^ßΰ[©ÈÀ 8rZm–™ka%ÔÐ+‰.eó%ydg,Þ€±8°Õæ·ú¿ð~¹tÚãÞÙ¼vñÅÉÎŽYw’§§=.¹­ ,ïRmNüÚišý±y£8€ª–ÎæËô…7 •ÏW=Muàëë\Ä sà™.ašî8Ökwy-÷ò¼ÔÝÀû¤ž•Ìx“Äךn§rðßêb `Óî,¶@XH¾agäàlÚH89©Q¹W=[ƒÇNÜR™§ô¯/¸Ôµ  ñµÜzN.¶pÇ€3•#äË|á€Æp+[Á:½Íλ©XM¨]ÞÆ¶–·÷•!ÙO˜Ú8ÎÎ;f‡0æ:ÝCM´Ô Xoa"8‘0ÅJ0èAG¨4iöºlO´F5’C#–bÌîz³1$±ã©=¯?×äñ Zõä«ý¬.Æ¡nºZ[ «Á”ó›~QÁ|—öÅUµÔµr¼Íúm&=×¾©&Lé+­ªV:ûtºMWTéj—ÒÒO^©>úôžµÕWý×½.ª´´«õë_þ––©N?]%éê©Z_¯¥ÒÕiuWþ•g7­kúI#Kõ]ÞºIR^’Bv'‘óŒ„3×T©V’_]u®’N•/ýf5ªJ¾úKé*Òôÿëÿ­k"Žƒ$öšè/þ ©Ò VµI/ÿŠZ_„¦ša;\Ž>•!Dí$±Q_¥¥V•xõ¡Ü'®%¬é‘Õ:\›—Y;0ÿ¥õ{Òüdǰíêoüà=_ †…Ò¡×úô’á5°ïÓtý„[CÿÐÔ£«ëý]Úê¶´».¾$«Fí*±ëôt^s{×ÿ_ZOúä4—¯]ikZû¿]%ê’þ•-*ýRýE$î¾—_æÒ^©W×ëõú^¨¡ý/éýt¾µÒ_ZkUIÕTãÚM¿÷KTµUKöÕ-$—zûªI4›W®’Vº^’þ¾’®·éW¥®ºßT·I´¬auI%m"mA Mí%Vªàœ4áõH M¥’Ú ©pÉ–’ À ‚!Œ¶: ñ@‘Âjš¦ÔÉ,6+˜­ZA„ˆ{zTÄ/i i˜„"9ÂÂaS+`eˆaŒåƒ2s›+ÿÿÿÿþefKЙ¨eTÍyÈ¡ú+¥¢=½0˜MB íA ‡Fxw½Ñc¿þáðáë¿´î—¿¦½¯2+ÿþ>>»_ÿÿÿÿ¯ò fÙs7#£$׿ðšša0ƒ ²¢:È‘¿*âXgXìÕ*Œü­')òLÏ"ù×!³6aÑpý;L&™Ñ.¦„…¹s<@ž`Âjp˘&peÈŽ;.h33.Œ†N0A¢&€Ë™ˆù2æpÁò ÍǘD|NΠÉÁ3’ˆÇ!ŒqeÌa„:LIEáFÆ áðì›­7FÃå4 ‰Cævôú„k Ç^G¶Œíc´xqi£[UBÓMa8´hɺF°âhÖÙwå·NÕvÁ‚ýªjÍ·®¶»V‚ ´ðƒž–piµpl2Ë—×I¶JÚ*Úï²,0 #‡5¶Jé;NÒN+®“l'ø¿õ¯þöÖú§]mRßµ]{ÓutmêÛQ¿~ŠzÚuÞ÷}®Ú§ýét>½÷n«ëÿÿZ·þº¯úý{ッÞõ¯ô¿ë×ýÿ[ÿó þ¿zÛ´±øoßô5u߯^·_ï[xÕï}ÿðeGjÈéÞPÿúzõûÿ[‘G×ë_ÿá×^¿÷_¿Lºúë_¾¡|m¯ûKüøÛzâ˜ýkõþ›ÿøü1Ö—ƒÿü0—Û­/„?ðãÿÿåëcåëùdGÿü/ÿÉrô[ÿÛS¿þá }-/ÿö¿ÿþÿÿóÿéü!ôêýÇÿ_;ÿÚÿ¿ÿz܇ƒÿÿ¿ýeÓÿ¿ªÿ»]ü#ˆ÷¥fküûÿóÿÿ™ûþý;Ÿúׯµÿÿÿßþýo4^}×Ô¿¯k®ÿ¿íûõöûó5ÿ¿ý¿îh½m}ë÷Jôö›a m&ÒONí¯ÖÒýVÒzÞ¯é½Ò×Û_Û]í/u.µý¯ýµ×Ècƒ‰ßÅØ”; ý&ƒM°© Ø´a- †ýl%kjMé4ÓˆôÕv×] =°ƒkm$Ðka$Ð}±0ƒA§k}Ý MˆI«$îÃ]± \­¦)ŠL Øa$Ó ²N‚ Õ baÄãÓA±8ïØÂj¡Šµö""""#8B!‚hD¤ÃBÁB  &(À¡TD4,¨A„ÊøaÓ°šañ ! ‹Y¡ÄCDDDDDDDDDDF‚ÒÆ–½i/ª]º®Ã6cؤ‚ AÅãÿÉ@C …›êA–‘Útgzçs"@ÊðÉvkGj 87 ïO5 éú;N@áçaÿ»ÓM:Vûÿ;)ó»[_é;YV˜YNßÓ¡úWDZø"£¯÷xÿô•^¾¿þØÿÿ_©$_<²'Ï¢]”r7/ÿù,@½±Â Èã<(&aÌ9˜a2n>g™¸†fã–DŒœÌã–fyVÎd2y¡„ Û8fàA¯ð ‰Pôo‹A¶šá¦a4Ñ „aÚh=é„F‡am9Þ„ 6ÏÃ.F ÓAü#»[»Fq6¼;[L%l0Du'tl†Ë¶3s±*(Ö4{é66áô‰NÒm ì${£Ûh55‡àжñ(vŒì:)è&ôƒpœ6I“l{öÛªñ«Jü0»v¯z}.­ßö[ø[Û¼$œ’=Ú Bm½&ôð×Z¿ÿëõºÿ¯§ëYcíõM[ý]®·õ}¿[ÿj¿[û¯ºÚ÷÷ýýãÿ¿Cuÿÿÿ÷tÃn¿¦ÿ½¯ÿëñíâ¾Ú¯Ó¯ÿý\¥Kþ½koðÇý+ÿþ‡÷úÿþHßÿÿëÿ¨ýÿÿÿë"uÿúý0ž+ÿýÜ%ýýÿ%Ëÿ®Ý¿ÿÿûSºÏý×ÿÿÅgÛþý_Ø÷Í­aÿî­ÿ_ÿû`ÚÿÿÿòzPUÞ¯úT²?õ×ïÿþôùÿý×ÿr‘¤ìÿþÖ—×Ú_úýÝóEÿý¥‡ìþÿÿÛÕU‡K.©¿ÿèÎýlºÍ«ûASO~ž¿W_ÿXD|wßëÿÿÿ×úÿëO³5ô?ú*F@žŸýÿ÷ùûÂFõ×[]×Ý'{ÿwÿûýý쎿éa£ñI„Ý´¬*{a$ªi§ÚÚÛ¤õ„Ó´íþŸëZV«úv›i-¡v©­üNdâïLSƒ6)8¤TÓ È'G¨b˜aXœv›‡aa„Pˆã`â¶ÂAši Â <&Óƒ.lRh0œ‚ILDDGi¢uL"†Ô±Â3ÄE± m1 „àÐiúbšÚiÃNÅi§ô¡­ŠÂi¡‡ÄDDDDlDDDDDDDDF‚ýµ‘hVFàœ3NG̹„ã6A•“¡xN @y.G™‡eÙ™‚EÌñ˜ŒÍ˜FG2‚A˜eÍ Šäf î.“n(fXc  ½ :*(A Âj›í¤ƒŽáÇðLS $ª“±AÅW\lN¸ˆá‚ Ó(tBL&A ×¬Ã‚#ðDtægBÄ%e@MPa„І˜…+.&NÂÃBÂpа‡ˆˆˆˆˆˆaˆˆˆˆˆˆˆˆˆˆˆŽ""#¸ˆˆñ_ý%;›õKùÚ»KÖšIuõ—b‚ö aDGÿ–‘%"ÂŽÈ«;52Zw¡ØfdúÚälˆ׳±¬&ð}7!dîîêáï»Ó‡ïoö¿»ù¯!ñL5ýfDŸ®»úï÷ý×é_÷ÿÿëÿT¿äRT¿õÖqö¿Ë™ó.apeÈÁ¢-‘ŽJÑ¡•hédEÝ䑆Nެ”Ar1šFÑeêµ å9•xÍņo‹G‡Õ¬\$Ž`ˆœ˜AåYåâ@ë²æ˜@Èã tÁfD|ó/¢%È$GÓY²Ð"ñáL¸@Ð<¹ EähvÃKÓa“z¶iÃÉÚtg£CÝ‚#ºƒÎý‰NÑ­´i‰P5¹ÜhÔ3 m‰PÑPí°ÓþÂÑPÐM › º®ºÒ}Þ­è>ß“|'† Ði´›öƒOÚAÒpÁSÕÔ6öÞXf¶­­Õïï×ëÿ÷WZKÕ½Ó¿¯·Ò«__~¾•þµ×wKþ>ßíÕ¿þ=û×½õ¯}~ûî•_u¿m×ÿ×ÿþþñýdQÝüÂ_¿ß}þÜ7öü1‡ß®õÿà ÿÚßÿê70¿¦ˆ_Ùׯ÷_þÒ°lŠ£ÿÿº¤ÿµµûÿ¢ëkíîÙùÝ8ø~:ý}Úøðwý‚_ýÔ'þí¬~¿ïñƒm¥ÅË·ççÿöç-ÃÐÿþ•æ×Ô!i/ý{ýè„4´Lƒú]ÿZN ƒtq~¿ì{÷›_ÿüÓýíÍhrê¯Ê„~ô²é×þ«ÒRèº0ÿÿþŠ?ÿüÓÌÿÿíõÿÛÒîÛš%WýVÿéû¯ííí/sEÿXMoývþ¯uªW¤þ÷ß¿÷ÿêþß¿ÿ¿úö¿ûÚýûþôØa,'—U~ºªÛa~¯úÕmÒþµímÝ/NÒð[µ×¶ÂXUM´¸Ób©6>r†”JUÝ‘ÈÖ k­„5M0¥Uk‡4­(0ƒ °ÂP 8">“X@ä%ŠŠM6ÂLRa6 ¸âІˆiÅ…\ÃO«„`“V%>Ð~§ ÓPEÊÁ5ìS ÅŠ÷šjÂ(xbaˆÄDqÂC"!„""!– !eh„DDDv„DDDFˆˆ¾døëLÚÌŒ®«ªV+ÿéZN*ÐAµlÿó³S5ŒêȨB:#¨OM6L,–ƈgnä…É—°…·E»’‚!ð?¿Jí;aÎÅŒ6?ÿêÞ­Þ³>¯C¹^߆˜Y?¡ÿßñ÷ÿÿõ§×ÿûëÿú¬–˜ffh´—Ò$×”" “$ªHŒÌâ*Èùt' ðDDœÌŒÍrb4gÃ.g¢AyòÁ‘ÈÙšH)â12M”á—#æxŒG’e„ˆñ!œÌ g̾u 0ƒ10ˆHv4âÃ6Ý:A"9úGiÜXA£;ÒMZh47ÐŽhðºhÐôhxH6# 7F¶y]‹}$|m›‘±²Q¤Ø3»ÓÃ#&ÐAØ(a°îÉCG†“vFÆ‚l2WG‡+4áŠÒmh5M°ËÛzMéZLÎß}ÃÓL›Ü¦ÛÚVÓuúýñ§ú®¦)Òn!%kmE:ºw]_¥½.Ö·­ûuúW[·UûKÓýu¿ûÐK{_ÿ_Ë«×~þ¯¿oI7ûôúZõý¿ûëÓ~·úþûøcÕÿé^ºÿvÿØýÿCÿøëv/Ž;¯þÿÿùÅnÿ¯ÿûßdd×Zpknª»Kªúÿò0mÌ/­5ÿ^Ãý‡ýÿvGî/ðÅt8;]+ñø`Ž?R÷þ¬ßZñ¯ÿþü7~ß½/ñ0õêÖá²~Ni½«ñ¢Eð„|Gü[n?Þ^«ÿ×õƒþ ÿÿÌ+ßüIz¬èXª´«÷zèëõÿ_ÿ^qüÂÍ­ÿúú8Òü Ý~•ú÷íÐ?ÿ¿ÿúÿ·Þ·Çïú³=ßoÖÝrësD®äë×4_š-ÚÎ/4W½}¿»ïþÿÿÿô»÷ÿímík×w^ÌÒ޽$þ¯µÛ]í¤šé§í¥«ö}ki­ª[÷ôíŸJêGÖýÒAØ·ÿé7i-·KÛH  *m‚(yÕ¥eÒ}§¶ÒNÒl%¦¶“\í°—M…ínЭÂ[ -¦Ù‰4¶“ ±ä}†MÆš BÊD#*BM޹1„ÂlJ˜A§Kƒ SšiÂ.’w6*+AРħ Ø¤Ã!æØ¨"ãhU6˜¦+ØE àÂÂhOìq 2ù4B"""¬ ¡aa4Êx`„XbB!ˆˆÄDDDDDDDDDD[#GF“ªVûa+$8Q‚ÿ"æF"Je”ô&ƒLì •êdhŽÏ É›êêÓuƒáôgo¿wÞ°û¿;5Îõ×È¢&×Çú þÔqÿãÿýuô¿ú×ÿõíu\®ˆï˜3äp˙ÜEr0düŸBxW˜‚DÈA„ìÄ?f‘„UµO#jkfãÌ dŒeÖa”ó1#ÆpÍÅX¥ÆxÏ‘‚ ȹœdã40eÛÄ¡ØNNÛN¸h>MÃFvp‹šÄ4A ÂA„Bˆ0aø0ˆH'bhÐøÌG³ð°nì DyÜ#aòÜXGpÑáÉgA·h1*ÝXv5¶Ãhðݰt›bS¶™>4k´tlmU†Ñí®á’†Š¶“ním¥l›êöØi„•‡pÉ@§VÝ…¯ª~úI¶¢·¦Òv› iÕ½°ÂÝ+ 0©ÒÁ™YtÂnÒ·ëÕëWÚ½¯Þª÷tµnýîõßMÿÛ_V•¥ûû­Ý·¾ûûõÚWõ~íOß×úÿ½÷ׯÿï·Vö·ÿÿÞïÿÅwüÚ_ÿö×ÿýëõÿÿýö¿?ÝoÿÖ«ÿ_ÞµþÿÓ†¾¿ÿ[|ÿÿ¯kÁþ¾+ÿöžŠz_ál¯Çµÿÿé%ÿòáÿ…Vûÿ?>¿ô,wú$Çüºÿüõ±ÿÿãeëý|ÿ¡Á¿ÿ ÿÔ~ÂÒý±ÿýzÿÿOÿÿÿOùôþmz_›_ïµþÿÞ¿úYtÿ×íkÿúþ¿~¿úÿ×óVÿþh¿ßÿÿ¯ïþÿúïÿû™þïøþ¥Ömëš$ým³5ÿïÖ¯úýu_ëlúÿû>—²ÿ·_ߤ¹_õýþÕ:kõÛ_ûí5µý馚îÒ§TÓTôÛ ÞºZ¶—{Òö‡îºií„·ÐjÚH6ÂVšnÚM§j›h¡ÇTUL!pEËŠM0ƒ ¦›aXáÓi1L4ÂM„‚ƃM‰C⢂ 4MŠTØ ›M01±)ØBpÚ{/iÓ†„ÍÍ*eD06"9±M;&!u«M;X²­ƒ éÄZv‰û ! Lç&šXˆˆˆˆaˆƒB !hDD\DDG¯ˆˆÕtµU™}é$³°Kªé*§]m.£ép­kŒWh é« DGÿÎňëN© ÎÓ™çë÷ðöŸk%i¯âÒ¹Ý{OÇðáïÿ]_ê’RULYÄQŸÈ¤ka ìŒ5I*"L4aÚ‚ "%D|Ì\Óa„Ïvpd‚DO%„ ²P‹z.ØAq*Ïpé¤kpá£ÛÓFv­ª=¶ÕªÐm/¸^“ƒïN$¼\1)é6“a—DØl»ÓÕ¯Ûïýî½_Ò﮿íÕûõ±þÇÓÞÿ½W[ªÁýoÈéJ½ú­ëÚõA‚ï²)°~écïï÷C`Õa5ýþë‹æw†õÂ\7CCÖüÌ„á¡äÚûÁŸÎ ïþ¾—ÿ"ø}Í={ÿÃ¥ækÒÕ-þûÝÿþë}ïzÿÿå÷3ݺþÿ´¿_ìú[3Zí&Ò´½oí5KIõôÿ.s ×¼5cb‚ 'vƒ.tG0’i±(pӈᄘÛI|ð*T<¨µˆi¦) ¦“d¢ªb>!„ ˆˆŽ""L¢¤-4 Ó #ˆˆˆˆó%õµÕu± ?þv\"Pè5L«Š@BáÏ™,#ñ‘#)"fFBã!ìÔtl›æiªv¿IÃäh‚jÖÔ;‡H?µLÊiºwß¾Õ¿y—nh¨ôvµç]ȤFy[|{ª X¦7å ÿÓþýo]zÿKÖÝÿë¥þ¿ëÃÿUý}uõ°÷LN‹KU$^ºäBU¿hff<¹šŒÎ1ùä2‚(ô‰òb‚'dù´a&™I&GA—‰tfÑ¡ä{7™°ªHdŽ×75’à 6JÚÊ~Œá£; Pô‚ „A£ ‹8eÌ d6D@ÉÈ""¢ÝÅäL Â,v˜LMˆG!80ƒ¤ £ðåÉ0ˆI°÷I¸M‡G¿Ú¤I´œQœhÐÑí¤ £[%õ÷G½ ›„èÙ JÐmÚ±G‘¡ÖméD§iÃø:=¾ þ»ûºOIi7]W[IRovl2êaÃ.®á‚VêÒ¶´(”;ai6¨\Ó¤àÁB ÍKjá—%3ºÐouêß{ÿoÕ÷í/Oý÷÷zzýÿu¿§Ò÷ïíëûÚØ=uúÞëªë÷®ºß×µýý]_uUî5]ê¿õÿßÃ~¿ðuÕ×ÿÁ»_õïúBÿ?úøúøþõ¯û_ÖõíïÇö.üבzI¯ÿuø=µí]ûÿñPÿñµïÿ÷÷öÍoÅÆµûߨý…ýþU¬Ž‚ÿà“ÿš/ïKþÿÿ†Â ûßë8ºÛÿáC¥Âqü ¼âü¯ÿƒuÿø:Oÿÿþqe¿ÿ¿ÿZþ«ÿ¯›úÞækÜâí~®§T ×ÿÿÿæðÿþf¾ëSÿ6–«×6¾³ ÷OßúºO_z®f¯ÿ×$_í¿×O} Dt‚ÿíü_ÿÿ_ü5ÕÕªï÷¿÷W>ž¿íSõ×ͦ×^·HG¼ÚÕÌÖ¹´½ÿÿßùœJF;°•¦·îôÚV÷V¤~Òµzï½mn»ízö׳ËW>­z´žõîÂikjê•®˜„ÓaŠM4âŸb¡¤ÁƬ›V)µ`í4ا8ÂpÂLSšL0H&Ø$ƒ¶Iµl-„w*M‰N˜â•9Ž* Á°„E•  ÐbŸ5A¦(0˜¯µiö®x†˜#ÅXb™öÅTSÅm{NÂjµO ‹X!qÂE± Âh0„DDDCB"-DF„lDDF’=5H< —×Çí¥`Ë¡ƒì„Gê1ÿ;­Ùˆc2.EMÌd‚?‘["12;I“3UNï°úiêšj™]Ô8vǽôg«÷pîîîõ‡ëÃíhÓß+^J“¿š*Ú\ïTûOõüqÇìq]ÿõß×õÿÿ¯×þ¿_é/×äX!Œƒ10™™â.ȇš"v¦³7Ì" ÃP½ Aª)ÑBO""Mæg„ ÖĢ,—Fhd„iÎd ).Í!~/Bü#@zG‚`˜GºaƒM!˜(†p‚ÈᄢA‚ ŸÑúpÂf <¹#ÃÍdeÍs´ÓL¹‚#ðf eË.A˜3ÆNYƒ²;MI WAÝC†%;G»H÷w •¶%[ÃMV  ›F¶T•Ø'FÆfMáØf&L7E‰NÁíÝ:>6Á¶šk÷Öà˸>Õo®Ö»Õ´êÛ,EÜ;[Wô ¶¶¶¿¸iöé×úlIw´Ø†Õ°Á:Þïµné]7ÞŸú¿ß^­&ÝÿÛm¯Ò}÷Wý+û÷}Uºêÿô­¯uÿZ÷Ž×¯M%ýzúm¥~½}úÿõõõ¿ïÕß·¿¶˜íëï{0¨ñ¿ÿïaÿ^ÿ_ûûÿëû_þ·ŽÿúÚþaW¯_t¿ýzÿûþÿíE}ûñ_ÿêºkëûpÿõþØÿ“µ¯ÿþßÿ{¯éÑÿ÷üüÿÿúá•þ¬NÒÿa~ýÿÿïþõÝ~‚z×ókÿKÿúÿ ÿÿã÷ÿ÷¿ÿðGǯKìyµú]¯ÿk^—¯ÿþ—ÿí5ÿúkðEDÑ¿ý.ÿÿëÉÕ`Š~þ¾þë˜_êÿúý½5™ßûýÿûý}}þßõ×kþÕWý|~ºýÿÿókõïÿÌ×ÿ½]w×ÿ\Úýnž¿ït¿uoßmµöÒÿÔºþÒ½7íu½&œv’ûm4öéÖÒoõ¯´¾×÷]5Ì%ëM¶)u¿«¿õÒWûëU·^ôá­1A6 †d¦l%‹´­$ÚŽlS#pØhîØ”;A±ÛaB '„M0¡Á¤ƒM;¶8íÂPÂoÒvœRpô8† £CîyâìSXbƒ.0@ï… &ŠØ&¥SØBÄ![]GæžÛ´b«|S]¤ÂÄDDDDDD0B"#Ž8ˆˆˆˆˆˆˆˆˆˆˆˆaˆ‹B,!„DCL¢Õ}W¹ PKê°ºëUâ†4]6¢#ÿäXŽÒòŒì#£±<îqKe»ôÐ4дÂi™LîHm=]×ø8vÝÜ;ƒ‡¹Rˆ*¯ýýõÞ8h™ù÷ÿãÿÿ­ëúéÿúÿúUõÞþK g†|‹´Í"¶^;3×# žF2 ÍĆQù(ÿeÉ#ÚlCA óÆp(AŸ2 Œã.¢áKŒÔd♑‚0g Ã3 yƒ4\Ðv48eÑ™2ùèèÉFÈÍ›Š H2ã6yžGüJv7 Û%AûËŠ44¹í£À¹;m:a£CwâÖýí±)ØF‡¡£\Ð CF³ð CR; „ºP‹Ü4 B.F·Þ®jØ0­¶¬5·½RO þpì*zwa8eãF±† ÅÔ6•„ÚM†›¦Þt®ƒ Nm!ÐM¸t´´›_ZÿÓÕïÒ¥{ï]_[Û~þ“0÷ûõ}ÚÖÍî½:¾é_ï·½}þ—ú¿ÿízK´Úz·÷¯]ëïÚûþ´¾Ö÷ÝoIÒÓýuM/ý®ÿµ¯ÿ.úîûñýqë¯þ÷øbÃþÛöŸÿýw¿ÿA…Æ¿×àþEþEšìÇ×õãïÚýlˆ½ä^"÷ö¿õýnÒÁ‘Ï'¿Ê?Òƒ Á®ßºMн~þ®h?ãýáÚjÃmVœW÷¡_ëÿ, “mxJ¾ …þþöÏOÿ~×Õf¯†Ãt-· /‘©ÿÿÖÿïªß¯êm`ß“—±ƒizþé~—ÿ¾ àøE\6ÂP—úÿÿ×ÉÖm%¯¥—ý/! 8ƒýè-ŠþëõÿÉ×ù„ ¾a¿Kÿßÿÿkÿ¯ÿÒnh·ÕCõïÿèR_æí®·Vêý¾ÿ™Þÿ¶}]~ë}×]Hëý?Õt¯ûõ{ÕKªýië¨ÿý?öÓ{ßš'Óÿÿÿ§ÚV•„-Wâ­4’mSÛ[î»ÝUÿ§ý<ÇÝ¥{ÕÿÚÞÚëÿëjêÚí¬&b£bqÔ4Ù+ÜvºVžJ•(hzv°àíX”8q„Ól%¥iCJÕ³uÿtéü«h6Õ´­´ôqÃøa4hCÓ'­Š„GÂ.R S´G&%:Âiòšm;V¬UÉŠ(8EÉŠ„\¨Á°ÁX”;Ù¦Á˜&!1L;Ø«ˆˆˆˆˆˆˆ`„i¡hC „4!„ЈÛDCA‚!„"@ a LSN„ÂЈi„"!„ÔDDGÛÄDDA‚qªË¾)zEþ[’ÉWÂUÓU]/õÒ×KV×V“ $;LPbÿò.tÎÔˆ3ÌÖD\e@ȸÍDv,GbC#Y dXΆdj3ÿ½uûÑcÓtd éÇǸtgÒ‡»µ¾ï¿ÿX}ÿí?ùØÄémkù3]}Ç÷«ö…úl0­Çëÿþ+Ž+ÿÿÒÿëÿúÿë_Í£©šE9š†]ÿõ¯þ¹Ú¢áœ4E‹6F #›œgìÜPDÿ˜Š ¼Þtdµ yvPe|Ì0D äàÞJf9o#.ÈzdtfDíHƒ>fÙ›0‡¡£Ûa‘­†G Þ%@kh‰ÐMÚ¬CMøA„ŽÍd\‚á˜Â4­4Öì#;L A< EàN, gá—2Aœ‚š"‡œ ªhzm]á$ÛM‡zot|Ä«iÒJNèöÒ¸fäl1)è Ø`©ºmØbT4la”8 Ûi6é °jNÚ=·Ó@‹ÉèØÒv’l8t|ë»ÿ}ÿêÒº}´Þ«mvumv“«ÓÞ5û¿«ÁU«nÙ¶“3M];ÖïÿÞén¯ûýÿÕÿÕëJý_­mm¯ú«úÒ¿´·ô™‡þ¾­þÿ×ÿþ½íéÖׯ¿ÿ«ïïëÿñú_ú}½§öµ×ÿíõŽéY/ÿ¿#§ÿ÷ÿÖý}ïØ_µ¿­¿ë¯ãþúÿcóO½ÿûöÇþ+ÿ×ý…µñütÿÿ_ÿíïäI%z[òÕÿÿoåúÿ??×A-ïÿó]ùEëúüÿ‚)ÿÿ·ð—ÿÿ þ?éøëÿÕ a/p—ÿÿ/]Âûÿþ¹u¿þ—›@ÿÿ¯ÿÿæ×úõé%ï½þé`Š×^ÿÚ¾¿×°þï™þ—þæ‹ßÿóEëÿ—ÿÿßûþõßóˆ?ÿÜÍ~¿ÿþ¨?ðE=¿ëúÌûïþõýÿû .ïúêžqþÐû[Jîë[}[>ŸýõnþÒ÷_ö÷ÿRëÿÛî½+ý7_[ëÛÓ Ó`Ë“±PÒbô»´“íl'ªÜnšjÚ_u­¥i6Ó´4Õˆ­Óu»Üö·«Óg¶ïn­4þ 4Õ  dß¹a8Ó ±LJpôN Ù7jl0¡­…b ˆòLla4Ø”ðœ9Ó‰C†ÃH ÓJI¦ŸTZ °¬JØKϱŒ«N °ƒT‚M5AœtÄ("?aŠk Pa4&ˆ&‚#ì": &…„Ó”âƒxY𠏤¦¹àUGqÁD[k¨©ßI_Ò_ ¶—µˆ1 Y€œò,¨‚öAì±¢[VL2fg’B“º™›‰(0^ši•FK i–é 䬘JèÎÞ×{×[½aÿ|?wõúòTº2$NýGý£L4Vá¥ÇïŽ8ÿý/ë_ÿýÿU×ù¡Ÿfhg‘› «¼Ægµ4EÒåj(‰Ò;R0ÍùT¿¡áË@Â^3bf Ï™ƒ0h‰q}—ÊCd|aDY†Ls8afeÒ"h á˜gÈñ#ŘÁ3 &aÛWGÎl4ÂA6n¤í¶¨Ð÷è4îŠÊq~PÛG£[Gº=´hq(vG¶ŽãV'wi„h~¬>ƒÄ4hiäþÿ»^“gêvË´›i ì°ƒ®;`ÍH¶ÒN–­ÓI6bUÕ´ƒ†YtØbPô›Tû d®“L;þ“~“ku[w_×ýû÷öém4ÚMïµÖ­úß Úµ™úûîµ­t½z¿ßïïõ[ÿ¿ÿÞ›Þ·®ú_®ªŸ:î«kxû×½p߯þúàÅzõá«P»Ò_KþÆ¿÷|þšwþ<ˆ¿ýZƒþ¾Ù»ã÷ï¦õõoý*ÿê)Òööïýþ„õ· ûôõßýûø7ûµ¯“©ÿíÿë·¤àÜ!ÿÛ­ëí~/÷ýg÷ýßÔ~o‡ƒÿþHv–ÿÑ¡çÿòÇÝ{ÕÕësMþ½ëöóˆÏÿüâm£D¹äù«ýó>½[ï­?î‘ ¿÷ÖëºóDþ5ùõþmokåÒ»š$ÿûÿõ_·ýˆAÓ×öÖ›¦—ÿ_ͧï ÿÿÿT½úßýkú¯ï[„PŒ*w +ë°·^’môº×zëýÓ­ýí¥®®·õu¶“ÿ¥r* ˜ '¶¶)´v’l4´Ø®î´Ó[I=;Ø0“#q°‹¤›]4m„­+[¨wÓih4ÖúÉSÏì¨C„Å&K•±Onàœrpšh6)0šÁ&)…B ”Bš¦ÅA&*s †+b•ÚÈ<Õ—!a4"8ˆ‡ aˆ4â" (“ÍhDD[ (ˆŠXˆ¤#ˆ‹×G£ô–yn«$’^ûÂIuÕRÒéW­ŒAÃ/‚V†"Dþv“&ê¦lŽÒdÉyÈ!™ªgd2‰hÌŠˆ”’ØA„ §  úöžR‰Ñ‡lîGÁ‡þàÐ;Ðt-6þ÷vˆ’w׫óµuG5ù•=~¿z÷ÿþ×ß¿ÿýGÿõÿÿôµ×]ÿó»!™|—d§×+ u肯Ò'Éì—D´Â!$ZeÌÙ0ƒ7f$DW#‘8Á>29s'2‚Aš9àˆ[—2qäž32ìÁ˜ŠŸ2è« @ßeÎÎ gÈŽFÍ3„\Ö¯=âÑÇm£CO4âqÚ3´[·h8l ˆò4aÚ?j“F‡£ã}†Gz ÞŽãF‡xH#Ccôgqi£ãa—u«W ” é1¶m†¡ÒmÛTØmm&Ø$ƒi(0PÎi7­¸v†nI¾ÒlI‘ÄÛdÝïA°ÉÛ8ÖÚpf’¯ûM_é;0IÕ¶ÚýÒV’¿êöúokß]+…g½téý¶—W×mëô¦uþÚßéV•ÿêûézþÕWm­¼_«þŸïüïì^Ö¿Ka½úê¿ë÷ÿãÿï÷ñÿÿ÷è\ˆ£¿×_ýÛ_¯_kÿ®·ÿµì1ßÚ_Ú¾µÿÏ;ÿÿácþÈ÷Mp×÷ÐÈKÿüWƒívxõ†T/ìŽ/þÃÓÿ`ÔŸ«þ+þ¼±'ÿþ}¾ß^¿á7þ‡ÔßKõý|Çé ý õýzÿÿ¥àßúOú_ý/÷3ïî—ïï¿ÿûëÿúYuœ@úúå×k_þÿ^ßþáëš'4ÁüÍ`Š{©˜ïÍ?zÿþûú_õÿsE®¾ÿû«?¯N¶ªýf‰×ßÓÿ¾¿ÕZíÞ¿þ½K¯ñþ§zŽá¯~£þŸ«ÒÝí®ºÙï_¯t˜TÚ]ÿéÿÿk÷ÿûg»õ `Å&M}7[JÂPÂIÚiZM„®›I´›a&ÂWM­ªvŠRzM¥eXH5M°Ž8Ó ¦Æ¶Çµžª¬‚L4Tî)Šb•;H1LSħnÐA„ئ!* ¹¦š°ôèÁ¶0ˆ0‚P“M6)«M6a6¢"""6'¦©„ Á) Âi„B Qpƒ  !¦CÙ¤¢6ÄDDqDDDDDDswJ‚ô«ë_JõÂë‘IÂd²™ãÿ2˜ÉfˆÌ¥#³<«3±6dŠè2@/ÓM4ãM4­°Œ;áÝ4ÝÕÜk5Ãí8}Ãúõ;'í4f·ÝÍyß-úïøØîÂôõzÿê?×_ÿëÿúUëÿ×ï}WþJÈÌdäGAƒÐ[ÌÞ¤¹7©©ByrèÜH#ñ¸äC#ÌŒ'# ¡™Ä¨ÉLN"Ó#¬ƒ3ä`ÏŽA¡j˜KC8a0a3„\ÂÎA›¬ŽH„¨—’rcÙs8†ƒ±ØM4D÷ ŽA; Ð2938)ŒA„@Ða ÂG»FwEÛF·=ÃHÖáhÙ}Ñ­Ä4h~á/'¡Ò=°àçE;G¶•  2ò=Ññ±)Ü&ô]´lm˜peÚ5°í:5¸f5ºÐA†í$•ÛîÁn––á‚}°ÉG îôÇM† [¼,[Vëö½ÕÚtß®¬4á¦Òv¡:Vm' ݪJé-¾õzÿÖ–Ókþ”±ÿI[¿ºVÓ{¿uª¯ôý·]7ë~•Û_^»ÿûÖý¿_w¯^¿ÿÒö®’ÿúÿ·×Ç^ºÿÜVþëÿ«õïÿ¾ª?íÿë×Ý 1ïÚ½t®´¾Û×þü‡­Ù…ç‚v…Y¢¿ýÿí/ÿÿ÷¯ÿ`Šl‹ŸÇúÿÿÿõÿül('Q?;yPßÿ¯ºÃû¿þ½uïøÖßùš¥Çÿòãoïÿÿz„‡Â ÿÿ¯×Õõÿ¡ßë ¿ÿøõÿþ—Áí]rèÂózÿÿÿ¥þõù½úÿÿÍOý/ÿþ“ÿïÿü„ù¢¥?×úùµ¿ê¥×ýëÿ¿ùžýuÌÕÿü§^ÿ«ífxõ^ßõ÷ÿÿëýЯÿõüÑ_fkozÿßzÿ´»úõë~ÿÚZðn¿ÿ¥÷þ¨ã?]^ÿ®®¿ßú~¿þæi[ô½ÿÛK´­¥k}Õ­¦Úwk·¯¡ÿ]êúù…í¥Ói&ƒÝ+ÛAí¤é}«j¾ÞŸ¤ša}¦×a&%TllJ²NÓŒ ÛJÓ0Úi±¶’ q¦› %ÔRÅA¤ Ã0h8Øjƒ špÁ œ5m%A°ÒAà %±PÅ0œÌÚdá4õílTa“…ÂÈ'0´Åj×lU0ÕÎè1@ÂÝ¥ 1 «°Åi¶ÅZ†+“§†!l(aˆˆˆˆˆ‹E¡±a4""!¬DDDDDCB"""!‚`„DDF"."8ˆÃèÇôŸÿþé]ƒ‚pÅ'ÿäV¢.ÔÉmTûA4„(8ÃìA`G*>¦Y%QÄع5ÈÎÀÞJAˇ*®á…M§<£AééëåHPi7#Fg]£ÄŒ¡ªû†Ñáßpá…-fîߪs=Þ¯î½Ýß„×ÝUbé&©6ÿý„Oäoú*{Oä&&ˆU­~¯«þ–?zãÒÿê?ÿ_ÿõÂ)ðÿÿ¯ ¿Òÿi%‡õõúÕÿÅ/þù‰ —ië’ö‘.—èÒMHLª×ªO~kE7æA‘;0”¢33>(A„!‡$äð\‚˜0ž ˆ¸N ˜3xˆë0ô4 Á„ Ù„ ñ— ƒË¢ëV’)¹,¹aadq—4@Á1ª~U† Û$ê´´T5´Â4¬ö⼫§¤m'wÖØ”;F·ú³QmZ;·F·Hðö©ò³I6”;ê+VÚvœ0VàÁY¶oMpÉÜ0N¯ž°I&à Ø'Ûh6“`Ì7¶Çœ8j)Þ®+iÚí\*¶ÓÒêï§ýÿãI½½÷¿PæFëôºÖþ³ëIú¯U§ÿ×ÿÚë¿_ý:Üïë¯ñÿûúÿ´´õzþß_o÷×ÿ¯µô­鵿¾kWþ¯ëºáøÿÿß«êøéªêí×ÿÿëÿù}ïÿú¸‘h­=úaVò‡¨¬}uÄŽüPîSÒÿýn:ëa¯Å/ÿKÿëFiå.¿Çìb‰Ùy¿þ >Ëÿɉ^^ŸÝþ^›ÿÿÿ$1[ëðð`ýÿKéþ¿6«®ÿòƒþºÿÿþ¾ÿßÚisˆ7ÿº¼ÍY¢ªó‰ÿööÿðÿÿÿï^ß“¤·×ÌÿúP@°ÿýW]w[ûèÓÿüâïÿÿÿô”ókë¿ÿû}Òþþûþcý/oÛs5ùµßû™¬ÚýÒûýÒÔŽúïuÿ]má=é6»_Iÿú­ÚÚë§®›k÷ïÞô«Ò¡þºÚV›M6‡t›Òp›"a­„«A±ÚÕPl0‘i.Ú¦Úöu _°•„‚r;m¤¨6ÂA*Øj4·pƒA„šØ2åŽ0› $J*iŠ Pë]1HlR lR â“‚.A‹bƒÒlU¦År‘b¾:?ªµv…¯i¡¶+ˆˆaˆaƒ—A…<Â5 ÂaƒLÔ­“D0„D0B" â""""""!ˆˆˆˆˆˆˆˆ¨ê´©aGÿùe2ä,Œ”E(geDV"7 ËrãÙ•b*0í4þøt¿Áîd ‡®º2Zûúí›M)Øé{Cˆ×ÉOþ>½ÿþ—¤µú;ôD¿Ô–#²3¾G`ôȤ®m’«3A›gLäkŒYF#6HtpÌfŒž'f0@’d|eÙèû0‘ ñpYͲ0fs1a82ã6)ó1fFdGÊB.a0ƒ4eôDɆP^Ó ¦°D~Ó@‹¥6ÂKZa º Ðd} #É„h}ª\û´3µF†›l;F‡µz _@L"á¸G¶]4{Á´]´l„›Tw¤)¦‚¥ J£[IØeäkhö9î‚ ƒ › ÒÍKfäƒ1Nî“a¦‘®è¨i: ¸AÃfÝ6Ën“† †­Ñ —JÂU\îéÒ6§z¤»^ßµ¤ÚN“­°•޽߫õf~¿½-âé'Wû¥n·»Té^ªë­U+éR‰OIkÒÒýû«Ò·¯úÝ)cÿÚÒo­ß]ozÿßúþ/ÛT’KÕTR¥¥¦¿ývêÚWþ>ÿÿÇ^Õÿÿ‡¾·ü7ýnþª—¤)j–ÕuŠßãW0þ×#§kÿûW¦—ú^?ü4±ÿÿ쎿TµŠÇ¯½z‡Á±þ™qûÿßøïGøÁ…üHöÿßþ!µÖ5¢hK­Gý ¾ü}¾ýëþ]UŸøCkþNßô?©jÒê•G,âÿjð߯{¥û‚ÿ¢œ¿óh%ƒïõ¯ô¾ªÒÖ÷úV0G·þ8Þû¥uù¢×ÿ! ßÿùÄ æ×ÿÝꪣ½}W§ÞëÁÝN¬%ÛßKùýì9³ÿ\ä’Ûÿ枯³5®«¥ªú®æŠëͽ»¯fi+Ó~½èI3ÚM/ïý~õªþ»®êÝ_t½t«S ’½^ý+ÿ­Õ}µ»õý××ô›?ßÿ¿·Ýkö—û]-$¢%pŽð•¤­¥­¶ÒµºVÒNÓÒré4ÖÕ4Øa-´¶ÚVºi¶”Wõ´»p—1à ±NŠÝŠx¨¦0ƒƒ É8aÅC Ž(l*ÅAÚ l' …È'†›Ó&ŠbDqºi±U´ðFLh0ƒb¯\¡Ê†„#Å¡a4-4ÖÄ&šÃR U4Å „"fÄDXv"[ ¡>ƒ0„Cˆ†hDFLî„0°b""4""" ÂÁˆ†DEÛEDDFê" ʶ‹úU *&èÄ«K*¿¤•:­t]+_I×JÒé0Ò`ÂV(1@ÅC ì¥b?þR†;EY“u¡™'‰+cªi…*DGpC²€]×áÕáãàÞÁÃÃþ䔣°C<ßß´i¥W ^Ôí•ÏíÓú«\økúÿûøþ’õýWý*¯þª¿úÿ% óÒfflÃ%ÎÈé:"‘ª!è†ÍråÕLæ{>Dc$ ϸôQ„Dò@åÙAdtq™™PF„fÍÄñ;3<ÐÏv|Ê>h%M4wì"<´—0ƒT“íÿYŸ·PÝGýõöäƒï¿ÿûC U(_ýpTØ7ê ÿá.8Cÿ†÷èyaû_àŠ~õùµýQåýKô¿ŸY>æ´ÿƒàŠé}?ùÄ~ÿÿþ¿ÖÝù¦’]Uéi$½Rõ°øüÞw¯òê¬ÏÁíþsEçß'N¯¯ÿÿë¯Z_õô•/~hŸÿ×_]_õëÿm<Ñn·Ý×ÖÌm®ékûkZKë֪誵_½µ³é~ÿëõéµoõïý´»ÝSÚM§z]]é¶¶®•:T–––×¥ªXKi$öÒl.ŸjôÚ¦›h{¤ÚM¥§}¶­¶“§Û É;MŠa„‚ ŠAÅ&ƒƒ XKâ› >T’‡ ˜®*)ŠA¦„G6)±(tìTSi ÓŠMƒ.LPA±LJ½Š 4í1Aœ{ uØ„¬VÓLT= =T!©Ý0˜KÝša2  i§¦iŠ™ÑüÒ$&†´Âh5 ˆˆ0B"!„" 4"")Nt"¢"""""" !â""8 kZ­I¶aMik\.’¤b‚#ÿçjDKndÎÅ3±™Ø‘WP™KÜ ÎA¦ðèÎ÷Tx§oÞ°áín©û®ïGk •ò²¯rKÿ*«òUÚÑÞb+ãüSñëÿÿëþ’þ¿ýÿ꺮šÔ¬gFffó7ŸJQ'µé•‘³'jHŠÓ%ÞO›F£6i ÏGÙ³>hDrT"c0 ¡4“ý´–ÒÕ~Ôº^í+I;ÿí´»ŽÕ>Òµmh;M†°ØÂ Âm¤ƒµTí+Coí;I±Õ6ÕSŠm$ Šb“c‰CŽktÚI¦›¦Hl`›±H:ccb&V+ t›qI„f$ïbSÏŽ jÅ&›±Jj5Z èŽ©ŠÝ7i Úm¦š§ *k$4°‡)톰ƒv0ƒD0„CЃDBDDD0„DDDDDF"8ˆˆˆâ""""4?Z[ÎÒ¯é©[¢¸¢ýjñø®º+‰$íE !….ñÿòª‰ „OÇ ú; „d(fhÉ;²µMBe;D6 ’æ¡´ÊÁAaîÎÐGÛÛü?[û¶ø}ï{]VÛÑÙ?s<­nvUÉGê8hŸiü|÷AÃã}ÿúpŠxEõúÿý¥é?ú®µÿÿ×ýahˆ7ÜžÓ%î<ŒÈ$¥fÎ,)"4Žr1’"aK¢Ê¤iÍŒÀáÌ@ˆñí.ód˜0Aé ñyËĜž€Ï‰1¦f\yÂ@Á.Ðh‚0G »<<¹„LºDœ™Â#ÈXA•b— A„Óýòœ4aï÷ºÚ5¼$ ÓÝÛƒF°øiJˇi÷tka†^G†ûè¡Ú4=G·+1(v‚ Ò.M#[bÝì‹Ö÷ï¸f¦®ÈãIÃþì”4UÕÃaÁ‚O îÂÝš‰¶µm‚·I¼uupÂn¬3N­Ù8» õ¿íø+¿Ý>›ººoßúýÞ½ý»nï÷[îúJßzÿþ]zÿ} ¿ÿoºÿÜ?ëþúûþ—ÿ¾½ÿoî«KÖ··õÿ^þ>ý}×Bßúô?_]þ¿¿¯‹ÿúã»þ…v—ñ¯ïü_¿ÚU~•|5±ÿá¥Òþÿöj¿ìÏñ#ÿæwúdqþQ®õõ }~Á|Hë¿ýž/Úú_è~þ¼%á'ü%}t?‚OÚÿt\ñðKÿÎ —iPìëÿßIô—ô¾ö¿Kÿÿ/8¿¯J¿ýR˦?ÿÙ¢V¿muË­êŒ.¿×]ŠÿüºÇ]ýpïÿ¯þ×___þ—6úÿ_ÿ÷KÿÜÑt¾mšåòûû¯ÿ_ókß÷õÿï\º_ïý³5ûå×ÿ®½ÿ÷_ýªýuª»™¥ÿjÚ@›§¯}ªªo®¾ª¶ºÿhiµ}—M¥·Þ뺪ºu×·ZÜ{kµ°ªƒ†AåÁ 4 8É`{C†šlEZ¦Ã *r8\ü&ƒc†AÈ£àâM´“íムšnƒ.]¤ƒñZ±DoÓ*—VJ" s ¦›'lR &ÓM&ë¸b•­Ù'pؤÓq©P)0¬B¦ª˜¥xhDDDDDE¡„DCDB!„"4"""B"-ˆˆˆ†aàÁÄDDR¯ùdEDܼ–Õ5ëþ¨%Šb®ÔGÿÌŒE¢†eeA¶V#¸2fggìì°ˆ É´èõMjš½/Ñžàú3Áǯëv´½þV5Ú ©¥Êªö?|ìÕÚ“¬~½]þ>5úÿ_ÿ¯­këþ¿kÝ}WÔ•u^@Òäc;¸‰>E̳0ÏŒñ2›Ž;.‰ÙöpÌ2‚NGÏ43ä]¦GYÌ ˆ¼þˆ³'Ä ØxL"¤%I™Ð Ï‘‚@òæƒ8EÙ³/„ò.iô;»ÐâÂ3»´Ð°‚#ÉÚGa™‚@‹ùr /i„/4Ñ 4"‡„Ô#@nä „[½¡õa˜‚5¸¹P4[¶-ô\CA¶Jé /Ïè&ñO>Cè&Ø”;Ò †Ë¶¬IÕÝ‚I°Ã÷IÁ„‚o^œ8pÁS{a“ЇA6ÉCIðƒÖ«´Ú^éû­í6´õm +݂ۭ+]Ú§¯t­…·úvîÒZ[ûßO¾þoÿÿzÞ½ý[«~ß[îŸÖþýõô½ÿý¾¿ß_¿ÿŽ÷zÿÿýzõÿëþÿŒ­õþë÷ëÐÃ~ëüŒÿþ¸1ÿßõÿßõÿ^˜cúßÛëÿüŠ(«þÁÿøì]b ×ÿþ`X`«ÿ{ÿÒâ§ú_û H÷ÿ‡ýæooϳÿÿéz(uÿ ÿëà“ÿÿ¶/þG­}h* ýéþ¿ÿˆÿ¯Y:ÿï —ÿþ—ÿ"¨ùÿþߥžAþ´²ë6¾½ÿͯÿÿÔ?ÿÿÿÿš t¿×aÿûÝ®˜>f¿¥ÿÿÿÜÑn¾ÿï[é+¯î½¹Ç¯¿·¿zðPM÷U¿ÿ¿ýÒUÿÜÏÿýÝþÿNòëÿëûòÿÿõÿÒÿ÷ûý{K×÷_µ´»ói´´ÖÒ^¶ÿ]sk·û×¶×i6’¶’®ƒmi6’vžô·_Û¯¤Õ°“ Xa=m+Ó´Ÿ·]°ƒb;M´‚aXi'iqA5l t8Ð6*ÂÈ Ë ÁÆÅì+žÅØ ƒA‚ °’4MŠcnlq±AʼnOd1)ÜwlPA EÉÙí6%FÏ0¤õB0ŦŒÍ¦ƒBÓUL-v)Ú`i„MbÐh†„0Ma àÓ†A‚Âa†ƒ†4"#ÂÁˆˆƒDDDDDDDDC"""""8ŒdQ؈Õ©:_ u­Õ]!±S´º?ÿ- ˆ¥‘•L”Tˆ–‘ÐÎÕ‘ØA‚dGvGd° ÔìPÂk×TëÓL=‡~y‘†ôh¸w»¸t¿Mÿ’”û^¾í%_ôütšß¯ÿþ:øÿëÿÿ¯ÿÿþý|Â$×y[NL~P²TÈ×$¤c!®¹ˆ8†|ÁPg"æb>Œdù‹)Ìù›È¡„Pàèƒ#‘ÆŸ Í 7” øÈã0ˆð” ¹;%IÁKpeÈg»Íy ÂðˆNÃF‡'nÑ ×L*gž\"<˜LÁäŽÂ£;§F‡£Ñ­„[¼ ÑÓ£8qÚ47 ŧ´ÐF·º48½/#@}#CIk`ÚMöÚ5†G˜dwM†Íö ¤ JÏtƒa…¤ 4“zAµ¸Mħi6ì$ƒ‡f' M±)ì”9WÚ…¶i&Ã$ýIÝ„“ipÉtÝ7«kí:»Þé[]:M†¥o zÕá>í4•ïM»û[M·½%õ[_ôÞ)i=û_ÿ§¾›ýº×^¿¾¯½U+îû_ö¿Jþ¿½méoô­oïïý÷¯ãOþÖ—µo÷­ô¯__¯ïI[ÿêô?ïïÿCÿÿõõ_®ÿë_ñƒ®ú:-ß×k_ºÚÿÿÿþ¿¯´¿û_/¯ÿ«ZúÿïÓ]ë^í+ ˆEž ­ÿÿßÿ¸©q}~ôãÿùšûýrDŠvÛKÿß¡ÏÃøw FŽ][¯ÿÿû¥öGñ÷þ9aÿÝþþÿð… Ýÿõ¥ð‡Òõ¡úÿÿûþ+ÿùc¿ÿÿßu¯þø?úþúûö—ÿõ×ÿ»ÿOI7ÿüÓ¿û…¥d§®Ìðïÿõþù§ë¾h¿ýÿÿuÿÿíõþÿ[Ò]õýß¿WjêùšõÌ×Kùuë¯÷¯þ×Uš/ÿß3Wÿ´´¿H}{×s5Þÿ¯Tß~ÚM¯éôé>Ÿ÷Jº®Þí„–Û¦ÒÛo{æ×¶•ûiwÇ¥ö¾Òí[K°»„qÃl-­î†í­„ôí]+M4Ó{ m¥jé=Zm…l'°¨4ب"ãMŠólý&¬RÂN¡5ƒ‚¶¸b‚lWÅÂpfb˜”í5L Ø«´× ÅSƒM°I´‚ñLJwb">áªa L0ÓU@ xh7\˜…*¿læ!;D4 Âè0¨XM9ô 2¦RÔ\0ƒ*±LPˆh0ŒÕ‚DDDCDDDDDDDDDDDqG?ª·–E;¥Ú¥ëµ¶¾¶ÒØ«‚¦@Ïÿ,Ò×2Œì¾B"%¤Gu­l¤ÝÅhŠÞRòý¸²4 ÂaƒPšy梤/¿¢Çi£;Þðê¡ÜÎðàú Ò÷þîL›õëV¼ïE½nÕ/ðkã´ÒÒŽñ¤’êJwV†‡Åúý%ýÿÿõÿýt’ Wï_×ô–¹fUÇÙ%zdù ÉHH”Y¼ˆÉÙ„ELÞ<ÜPJS™ž{'³7E$c?ž‰®` KäxÁ 칌&G Ãx‹²äG#f0ˆH'0Ïs‘¹8'“™ó<¹gAÚTC]†ŒáÒGÓ „’@‹Â0šhB!zF€áܧmC1#ÛF·¶Ä<#ã~4qÚ=ºtkl3]vèøôû sÜ;% ‚¶Ò é6í¥hX"é’á[i8i†îm'V0M2woÛ†Ã'›· ÒzmÝ«mÖìãÚ«I§iÁíÒô›­ô•-&«]V -Õ¿oínºz½'µ¦Ÿoû}ßþ—ýûëí$µ^õÆÕ­ªÿíw÷û¦º×õêîë½}ÿíÿý}zJ©+i*6—_ÿÝi}ýzøþÿÕõã_õúÜîµÿJ¸¥ØÒŽ•~µUÿïÝ?ÿÿÿ÷EßZõý¥þ4‰ ±®›^µKü×åÅÿÿ¾¼Ïÿ±²:ÿîÁtþÿÉúÕk^J¿¯–c÷øÿÿÿëÿü8õÿê„[ÿúýu}~¨âÿÿ_ëÿôÿ¥æ×þíoþþFÿô—ÕP"­×Uë¿ÿÿÿ}Kÿþº_3ZþHÃÿþhµ¤—ÓÒ¨"ž½/Í7ÿó?ÿÿÿÿî¿ÿuß\Ú÷]_ß_^—Òßßÿï½~¾—þº[þï¯÷™«ÿ×ÛÒKJ¿­éÒtPõëé.¶½¤ÿw¦ßßÞ]cºKô½¶’¯¶¶ªžÚI­„°­¤­„SÚWl¬zOWMØH Ðiª &Ø[H&SOIB 4GnÕ4p§iCL&› Š4ÂqH0›Txù(‘ûJJt)E`ì+Ê…îìSi¦¸bhXV­ˆWÓ¯†*.±R¡M@§àЈaSC ŠbšjE«Î!0„DE„HÄDDCDDDXB""""""""""1ÿÿù‘’+ê9U ƒ&ÎÉÃ’‚[¨•Fo¡!s.7ßrWwTôè¾kƒ%±KTî‡é1íW¿ä©?JŸÒýÚR¹…µIä¾þ7ã_ê¿ézU_ïÿ×J’¯­~•Dù'ÈL¢‰%$d~9.²©$DtCɃ3#«$"5¯ðƒLÛ8w Û0ƒ „XLÍŸG$ÆHeì̾Ì0’lÂ0F #ä|ÍDäa‚Ç#rx Â"!›‹Äœ¾xÌAÏ ¸Î„lͺZ4;NPõ@ˆõ£?M$ tÂv¡ª w¡Ú=†7\0 #[é­Ú4Q­†Jò$4{Å£[ˆiõí„ý%¢ž“pEôœ#ÃI¹OGXá+Gv¨ÑÞ ´’é‡KH8w«“iXe“» ^Ÿz°Õ«a’zVÉD-ØAØ•ŽâÞ–”V:ZW_û×Ô2î´´½~›V÷ú·ÝUÿ¿vÚ{ëúºöº}%kÒW¤Úßt’XøúÅ*Òÿëÿþ•׿_}õ÷ï¤ÞþõµõÌ/QõÖµ±üÂÒ¦©zêÇú»Ûýu»^ìkúëH}¯õÿÖ5UKKpô¬WQU­¿ï‘Óþ¿^´Ù ýŽéªþþ¹ôxÿëõú«ikU_J°ÿÈâ0ÿû#Þ;Ê~=—þ^7þëô=ªT´«]Sd›úUÒצÿ£DßÿB>mXÆfðØA}ø$ü˜Ý^¿­-V–¡Óת].¶úñ«¯ÿt–—×H/§þ+}ýUu¯úç6ô¿_éM¬ô¾ðýÿÞ¨ò\ºÿ\ÂõÿüëÛõ]-}j;zÚ_¤«¤’ ¹ûþßúüÿ«ëwÿÿë¿æÖÿ =RæV]t¼u×Tó |O]ÑOÓ_s5ÿý™§þ«Èÿªö•úý¿ëÝm/`×Òt½õ¥´´µý-RÒª_ío´úÝ--w×½ÿô¾•Ï¥óÿÛI´–½c×ct´(¨¤–6ÑÝ¥¥®ACªn½´PûKl+ [§ÛB­)Çi]16]>“¤ôìS[ ¦˜A„Ó )ŠŠi®šb­ŠtL&ÅB#†Ø0ÒØ¦*?a˜8 H0ªAB.l“ÂlPBØ0¸L&œ0B"""""&„DE¦„0©”D¡aa†ðaaˆˆˆãˆ†š &F=¡hDψˆˆˆˆˆŽ">"""£þ¿òÊGùغZþƒéתýW­$†Çb¡„ZVˆÿ;&D̉b­„ ìs&Fv"; ‘r?-•Ýv¨4Ó‡§Ü:[£ß³½ã½úÝ+ö›wy(½wIH¦Dö¨-¾ŽÉçaÿ«ÄW¼uÿã«T¿ëÿògøÿþ½k××_ýêL#­ŸD¾uÈ}kꪵzý6EØ"-M0HŽa„A>GˆÄ¤t¤cSZ$4D& †fãÙÙ,PgÇ©Á™³~y™Šx‹³Ñ ‘£ ‘‡ Ã#´k¥»£CE»AL#C‹Bòä`ˆ/l»DHj`âаƒÂ.a4hoWiöL ѡّ­ž2æåÈ' N“uÓ¤Ú µÃTØdú*5½‹F»PNÈ݃høÃ°ÌPI7a${m†÷W J‡*M¶n¤kl3 ÃEÀv½mUõl0JÝa‚·I²ÎL“ëeݦÝwk m¡ _÷Þ¡ºVÖŒ[i°ÁS žÿZµô©_ë½uým{½ué7Ót»'£ÚÿºöúûïÐ÷þ¿ÿßï­ÿßþÿÿÕ×í{¯V¿êÝký_ÿizýèÿÆ ÿ¯ÿÿÚññÿïÿõ¯¾ÿÿŽG®—ÿþ˜?ÿM×ÇüÍåÅÿÿëê¿ýxÿÿðíÿü}æ¿ý|5_ß_Çý{ýÿÿø!ß ùµÿ-Kÿëþ~¨uÿ¿åÉoßûÿÿÿÿ4@ÿÿûú_õÖŸù¿¯Í¯ÿÓ¥®f¾ÏÝÿù¢×Ãæ×_îj¿ÿ_õ¥ûÿ×ÿóO÷÷î¶f›T÷¯ï_ïÿÿÍæÓ׿ÿwîh¿ÿ­^moM«§tékúî¿ß¯Ýûk~¿zz¥ªºÿiO_×n¸Ðm¥#wØJÕ°ž›i'ûuv¶ºÚê¶ék}«¥v†ŸÈÇOl%}«i-ê»ujØ Ó†\XÃÄîÜ&Å'"À`°ÂA0špˆãŠŠ4Ð0œ4°ƒ ¦Å1E #žƒ0ƒiÓ „Ø ¡66Õ0ƒcA§ %hZ &‹ì+h0Xb–t ÐhF˜ k?4ÓVÂhû˜å:aó<4Pºb­ZUb¢"-ˆˆ†DDDDCˆˆˆˆˆˆˆˆˆˆ†E‚ *ˆ¤":á$©µQÿçpŠË’ÁÅ" Bœ„R$ r²¶RH\¦L¹`¥$3sƒGàÛ c……)ÍI‚ 4Âd¨‘ 9×4EûH;O ȸ@ŒîÂ.Žíß² &PáPL4­ýôi ƒa׬8°„2móüÑ}9-iZÓzZþõßï´PÿUÒ·þ²%×ÖÿÁÇúýý¬ü5ÿSÿ]ÿÅ/ÿ|4—ïý¥ƒþõÿ{ %ÿü{_ÿûUyƒÛÉ|Íægëù'dº;ÓR8 ÍŒ‘”<¼¿¨é’[¼7úzh<¹tn!­¥DQÈܾ›8F(@Í"s0Â|“0š$9$aq ÐaÌ?!™ó6a2>DI) M† ßͬ#[a¶n%û«5ÓMq „Ñ¡£C#t¨F°âPíŽÑñ£ØhÖù;£[íáùàh·£C¤Ýwºû½%ÂÝ®)v¤î“lJ†“¤Ý;6 a¯¶iZ¶“`ÁUÓa‚³nôÝ é7OIŸû®ÿ×½&ëKú÷iîÕVßunµ÷UKÿmmë²:#àŠÛ¿ÓïAƒÿý4½®—×i]_ÿ×¥íSµúÚßëûÂI¿·[· ¨?^Ç¿¿Z »éÿý-oÿÅmuÿÿ­×øc÷T•ÿëiuöÑí-W×÷ÿ×í¯WûíëÿöEÍÇ#EúÿÃëbBM7)Å|~>?ü~Gñÿ]/ÿûŠz_ÿ¾ÿÿd‡H#Eòzr"ÿþ^ª‡ùtÒÿ÷ÿþ—S¤¿œ_ýÿC- Zð–]uÿÿøÿï×ÿø"»@Ý%ý_ë_üÍzéSMõ¯¯ï¿ûõ×ÿÿöÈh º^ºoê]mŸ^ƒÛô”͹¢õüÍ7_æ‹ÿÍÿõúïÿ÷Цêëþûý}?­ &úö¿ûÿýýŸ^ç÷W«ÖüÚÿ×íÜÍ}X1ŽÓôô=µ_Û­oz_Wµzït­×í&ÒÒî+ÿ¾µýo¨dƒZh6bPô„“ æ ÃjP–«Øaol!¶•­é°Â¦Á„‚aÚV­¤v“{jšf¤ªÝZpi0ÂPÒ²ìâaˆ²ª ªb“·v)5L ؤ ‰P˜¦!XL&Ä$إئ(1K*1LR &„„‚‚˜2ç*Á†*Ž,DDDD0„Cˆˆ¸ˆ‹B,&ƒ@Ј†A‚ 0˜B,&BQ™ANƒA„â,†Rqý*¤• –Æÿ;ET‹(š%×LÉj2UˆÈìsƒ¸gbDkÈÛM4ÑÇÓí?êçc PûÿKá÷’ž¨È/£¾Œó°›FŠ¿H©M=Å%ÆÇkKǯè$ãUÿý$•-Ò®êúéWé/U$ÓÎGO½uUÒþ0˜ xX‡„ ÌȈÌÉã31 …%uäC&ÄHi¦göm‚ Â#ç™"æqêFã8‚"+&S¢r²çTkhÖøR%½-ÚÓAà™BÐa1 fÙÈ Ì;@ÁD| f  Œá¶Å„0î-©£;°A¬2ä\ó ù#âìÞÞ¯VÐMÏÄ¡ÚèÐ6GmM°¸´Xí;æ†Èá ˜m; ÒvÎTØt°ÉCE]Õ ØbT8">í5h‡H7'n %i__֭ӆ­n• ÐdïAÒpÓi8`„é7Ø0ŸJéŽâÒºl4-=[º_õu|i¾úÒýo}ë[k¦ÒfOwOßÿÿë½<›þ·oêýiëßy…ÿ¯Ý5öý­¯ÿîÓ_Úÿëíw_V¿úc¾¿ßëÓ×kÿÇìkþ—ÿÿÿúý[ïÕÿë¯ÿÅþ+°k¨YýÿïûKúÿý]=¯öÿ«_ÿ×óóãÓ?þcþÁ:ëÿ_ÿûÂ_áwþ?]o–ïõùbùz¿–õü _ÐÿÿþÝ {¿¿õÖßéäaÿÿÚK—Kÿÿ¿ßÿæÖÿõšþºðE?rýýo¥«þm?þ¿ÿíÿ©Ï¯ÜÍxO›ZOíÿ¨"¢®gœ¼Ñ[êæ‹?ÿ¡ ÿs5ë›[×õ×^ïý'¿÷úý¾Òîôï[[¤k}Õ¤õ›^¨ûzö—ÿÿÿo÷öÙõÿmë¯l+i:H4[ã´›_m/÷[[[¾¿éµµô“m+½[I=B½+W_íSm$îñAŠ WÐ$Áö)¦)† Š@Ò´˜`“Å&ƒ[‘Gì0“ƒ6ÒL& §i& "‡!0i§Õ&MŠ „ÞÂ`˜B8ˆ°š &!>Ôî*$ÅU9YMB#Â…TÐ0DtÅ §(tÂPÅ0@¢~šq<ØD…mw¿ =ˆñ†hó[Ló6g Þffãc0ˆìÖ3ìÙ‚ÈKlJm îÃ1[´ôhvOH`™}œa@Âa#´A£;A¦åÉ„™„ˬa45DA*aNðšG¯CFwx4íZïNÕÓ`’m‰C´kv${h÷iá‹GǺA¶%;H7ðÌ4kx m‰PÑ­†%@hùðN†^H1´H6;i=í¯~·t¥j¶½â•÷`’¹'û.¶›JÃ(N“x0Ý^Ÿm§ßpÓ»ZRǼ$ýÿW´ûu×»ZßÝÉå+ßíªM·Òzþ¿ü0ýý.¯ÿÿÝýöµëÐÿý®:ôýmýú½ýî·þ¾ßõíýºÿí*‹×ÿ_Å]/¯÷ǽµ¸cÕâëë׿ý^ß W_àÇ!¯ú½ÿûù{ÿüB]ü‰ßÇÿ×_Þ_Ù¿Õ°ÿþ‚(zÿü ½×ü‡üŠ=º_$þÿúÇýÿzÿïMà“þÿ×cýëü ž¹z¿ð¯ÿÿûÌ)ðÛýy™~µÿ¨Kýë_õþ•—Wy{ê—ÿþÞmkþÿáõû÷¦*¿ÿ]ðÇZ_Èh6ºéK¯ÿÿÍ=sˆõó9Çþmik˜_ßûßðŠéø"£þ¾»®½%¯÷û÷WÞ¾:èúþëºì tšý·ú~h¿Ýÿ¯~ó ßZÿ¾¿ý|Æþ“ö—wô“bqÖšiØMÒô4ØÛ _ku¶‡˜Jß{iz÷iXIo]ëJÚj›¥i­ñjÄ=È& ÓïR1ŇGPÅ6 %¤ƒ.lh7I4lRa6(Œ ‰Ã  †·QM@ÂqÁ—4ä>‰’Œlþ"#B#bNÓîÅJqA Åm=0D}ŠöºMCPPR S3¦˜ª#é ó\´M0D~Ü0„C?VÄD0„XB" ˆˆˆ°„DDE‚ÄGèD~‹èˆˆˆÒRcµäT>¨¤~+é+›UÕItÿ×…ÿV)´±´´¡LU¶:a„H6!5dÚæ^mD´ 1ÿä.‚qy‘™"¶e½”"ù¬C2fU²¤î‚c2 =îÃÕÚl?½'Ûú4_Kü…¬Ê{VLl'«÷þ>?ýÿ_«ú­-~³Fgõ¯¯ü Eä ŽG ñ3Œ ³—™ ,‰4ò]#™ˆy•S%â$òM6H‰Y˜ŒÌÑ×I¶-î, ч!é#â4³>gŒÃ%>f@ðƒ@ó0A Â gˆŽH‰Ì"A8%a›4â0a Èä`‚ Í ˜#ƒDIb–É@6Ã% ô;#‡¥¦á¦Œî-Æn¬6¡±(z5´{qhÑÝ~ô{ ´qèöö%;F£[F†wm‘ŽÑ­£Cé6Ó»Wkm7eÆeähaªI°Ä¡é6Èá¨tœ0[¤ÛV•«†Nôì†\áÃé6ãjûLBm-+IÛÖ“tÿú÷éºðÊ!jÛ´•Ó«µ~·íÓµª¥u{µ»»N»½ÞûíÛû]µÖëëuþ‡ÿ¯¥¾ýo¯ÛÞÇÿõº¿êµþß­¥ïÿÿ¯ÿâ¶á§þµ¿þ…uþëþþÿÿûü~¿þ¿ßôû›^£_ßÿªôÿò'ÿý¯ÿ°ÒÁú±ÿÿþ¿Ú |Š?¿ÿ×ÖßÿõôÌþ¾Lïaÿn÷5/ßzÿþ »ø@ÖKXKÿåëÿÿúøKÿAIÛþ„7´¿[÷ý-´¡—íÿ›^ýÿ‚+?›_ûú_ûK’ø7¯¯_ÿKÒÿßÿúÿÁóÿ›^¿Y/úYÌ7þHܶ“kÿ~¿éeÕyCòëÿ¯__¿¯ý~ëý•ï÷×ÌÿNÚ½/kí×ÿîæ{Þ½+«þ¾h³éëÿýu×UýÌÖ·÷½]' „­+M4Õ;ÕS]Wm%_ïý-m[ ®—Ú§ëú_]¶‡ßÚW`Šv¶ªÚߨ„¥µM¬B†ƒ æÚÚßhkm„iZI í$ +i*p‹Ž0›iÚ¦Ú…X”< Ášm…m8í(¸lTW!F"""! ÓÈ/@âSªbA»ž˜V%;b˜¯ U±LRi‹MtÁ—6)6)4ØUzÛPEÉ’z°‰ÌDr E>òäœCA„ÓA÷iÜ÷i¤ktm(0ííNí ì¹ Z40ÓG¶ì\"ì,[¾ÞäÓF°Ñ­Ä§i<J„ka’¶ŽkhÖÑ¡ÃM5êîÒ¶$­yîm% 0Nl;£Þkmƒk¤é1(~áäñ œ É[dží4øAÑpÝ/°ÓÓ†©é¶Ÿ×[I¿Õ½;ÕtºººM¯´é6Óî–î’ß^ïïNÛ[ôëWM¾ÚoM¯Ókö··J½Û½õo®½×§ÿ¿Þïÿ¿k~½úÿ×[i/ÿûúýz½ílÝßßÚ÷ëÿﺿK‹ÿÃÿÚî—Ûñíÿ_­~×uÝ{¶<ˆ"?®»#ïÿþÔë_µø¯ðc÷Cºô«þÒÿÿ­v£í_¼è¶Üº×áÃúÿÓŠ_¯öÿë»ýG°µÿñß¹ïÆ=°ÁvãþY¸žÿ¿¶Kÿùoš_ïÿßø?ÑšPüÚùi=_—$»ÒÉÿÞQ–Gÿý°Kï×ð—ø7›ÿõú¦…ÿÿ­/í~¿³Õkæ×þ—þ–õ_çÿb«ô´²ë_ÿͺ^§š}õ9¾þmoíØ"£ÿëÐ:Yuî¾aXIì?_ÿº¬Í}îÚëî¿‚)û«¯¯½úû3ZÛº_¯¿Ù½ÿÿü"«å×ýë׿ð½V­¯¿Û[ÈêÖû_w÷Ú¸I×_mm×ê×ÿýtÒÛ]~ëÿêûGWC÷OUÝ+­'Cm'Kò(îJ›I†¬C‡M…Ó^“oµ½µ_mØE4íáÚiß®’wêÙåm„­S ± Š´Ø­&)ƒ.qL[‹ Ï“±TÅI>*)‰NÐq§a&%Ðk\Âa6 ¸ã H%#ÚkŽ6+#¤‚ 7 ¦"1*/†kµi†¨Ža¦A„Ä(ˆˆ°ƒA„ ò­šÃ)Ó[ƒNÊM{´Ð‹ CDD4ÖÓA‚¡†"ÂÄDE… !†ˆŽ"8ˆˆ¸ã'òc¾Ž‡££Õõÿé?×µö–év%°` v(6+ƒ'±¹Ù†1ÿäÉ“\ìüMÜ*C5/‘ : &KÕR´ÎÌ]%ú˜NŒ;uU[Ó;Âr gÞô·m·‡Ú÷‡þøÚvˆ>ªÑ©{Mƒˆ[_ØßÆüwuÇþ½/ýÿýý%ýý}ÿª_ý/%škúI.Dd ¤F¯ Ù™˜©³(0ƒ(ø  y¸ ³ Ódisplay); /* Get the textline centers */ ptaa1 = dewarpGetTextlineCenters(pixb, 0); pixt1 = pixCreateTemplate(pixs); pixt2 = pixDisplayPtaa(pixt1, ptaa1); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixt2, 0, 500, "textline centers", rp->display); pixDestroy(&pixt1); /* Remove short lines */ ptaa2 = dewarpRemoveShortLines(pixb, ptaa1, 0.8, 0); /* Fit to quadratic */ n = ptaaGetCount(ptaa2); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuadraticLSF(pta, &a, &b, &c, &nafit); ptad = ptaCreateFromNuma(nax, nafit); pixDisplayPta(pixt2, pixt2, ptad); ptaDestroy(&pta); ptaDestroy(&ptad); numaDestroy(&nax); numaDestroy(&nafit); } regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixt2, 300, 500, "fitted lines superimposed", rp->display); ptaaDestroy(&ptaa1); ptaaDestroy(&ptaa2); pixDestroy(&pixt2); /* Build the model for page 7 and dewarp */ dewa1 = dewarpaCreate(2, 30, 1, 15, 30); if ((dew1 = dewarpCreate(pixb, 7)) == NULL) return ERROR_INT("\n\n\n FAILURE !!! \n\n\n", rp->testname, 1); dewarpaUseBothArrays(dewa1, 1); dewarpaInsertDewarp(dewa1, dew1); dewarpBuildPageModel(dew1, NULL); dewarpaApplyDisparity(dewa1, 7, pixb, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixd, 400, 0, "page 7 dewarped", rp->display); pixDestroy(&pixd); /* Read page 3, normalize background and binarize */ pixs2 = pixRead("1555-3.jpg"); pixn2 = pixBackgroundNormSimple(pixs2, NULL, NULL); pixg2 = pixConvertRGBToGray(pixn2, 0.5, 0.3, 0.2); pixb2 = pixThresholdToBinary(pixg2, 130); pixDestroy(&pixn2); pixDestroy(&pixg2); regTestWritePixAndCheck(rp, pixb, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixb, 0, 400, "binarized input (2)", rp->display); /* Minimize and re-apply page 7 disparity to this image */ dewarpaInsertRefModels(dewa1, 0, 0); dewarpaApplyDisparity(dewa1, 3, pixb2, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixd, 400, 400, "page 3 dewarped", rp->display); pixDestroy(&pixd); /* Write and read back minimized dewarp struct */ dewarpMinimize(dew1); dewarpWrite("/tmp/dewarp.6.dew", dew1); regTestCheckFile(rp, "/tmp/dewarp.6.dew"); /* 6 */ dew2 = dewarpRead("/tmp/dewarp.6.dew"); dewarpWrite("/tmp/dewarp.7.dew", dew2); regTestCheckFile(rp, "/tmp/dewarp.7.dew"); /* 7 */ regTestCompareFiles(rp, 6, 7); /* 8 */ /* Apply this minimized dew to page 3 in a new dewa */ dewa2 = dewarpaCreate(2, 30, 1, 15, 30); dewarpaUseBothArrays(dewa2, 1); dewarpaInsertDewarp(dewa2, dew2); dewarpaInsertRefModels(dewa2, 0, 0); dewarpaListPages(dewa2); /* just for fun: should be 1, 3, 5, 7 */ dewarpaApplyDisparity(dewa2, 3, pixb2, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 9 */ pixDisplayWithTitle(pixd, 800, 400, "page 3 dewarped again", rp->display); pixDestroy(&pixd); /* Minimize, re-populate disparity arrays, and apply again */ dewarpMinimize(dew2); dewarpaApplyDisparity(dewa2, 3, pixb2, 200, 0, 0, &pixd, NULL); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 10 */ regTestCompareFiles(rp, 9, 10); /* 11 */ pixDisplayWithTitle(pixd, 900, 400, "page 3 dewarped yet again", rp->display); pixDestroy(&pixd); /* Test a few of the fpix functions */ fpix1 = fpixClone(dew2->sampvdispar); fpixWrite("/tmp/dewarp.12.fpix", fpix1); regTestCheckFile(rp, "/tmp/dewarp.12.fpix"); /* 12 */ fpix2 = fpixRead("/tmp/dewarp.12.fpix"); fpixWrite("/tmp/dewarp.13.fpix", fpix2); regTestCheckFile(rp, "/tmp/dewarp.13.fpix"); /* 13 */ regTestCompareFiles(rp, 12, 13); /* 14 */ fpix3 = fpixScaleByInteger(fpix2, 30); pix1 = fpixRenderContours(fpix3, 2.0, 0.2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 15 */ pixDisplayWithTitle(pix1, 0, 800, "v. disparity contours", rp->display); fpixDestroy(&fpix1); fpixDestroy(&fpix2); fpixDestroy(&fpix3); /* Test a few of the dpix functions. Note that we can't compare * 15 with 19, because of a tiny difference due to float roundoff, * so we do an approximate comparison on the images. */ dpix1 = fpixConvertToDPix(dew2->sampvdispar); dpixWrite("/tmp/dewarp.16.dpix", dpix1); regTestCheckFile(rp, "/tmp/dewarp.16.dpix"); /* 16 */ dpix2 = dpixRead("/tmp/dewarp.16.dpix"); dpixWrite("/tmp/dewarp.17.dpix", dpix2); regTestCheckFile(rp, "/tmp/dewarp.17.dpix"); /* 17 */ regTestCompareFiles(rp, 16, 17); /* 18 */ dpix3 = dpixScaleByInteger(dpix2, 30); fpix3 = dpixConvertToFPix(dpix3); pixt1 = fpixRenderContours(fpix3, 2.0, 0.2); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 19 */ pixDisplayWithTitle(pixt1, 400, 800, "v. disparity contours", rp->display); regTestCompareSimilarPix(rp, pix1, pixt1, 1, 0.00001, 1); /* 20 */ dpixDestroy(&dpix1); dpixDestroy(&dpix2); dpixDestroy(&dpix3); fpixDestroy(&fpix3); pixDestroy(&pix1); pixDestroy(&pixt1); dewarpaDestroy(&dewa1); dewarpaDestroy(&dewa2); pixDestroy(&pixs); pixDestroy(&pixb); pixDestroy(&pixs2); pixDestroy(&pixb2); return regTestCleanup(rp); } leptonica-1.70/prog/binmorph3_reg.c0000644000175000017500000003433612240303453015363 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binmorph3_reg.c * * This is a regression test of dwa functions. It should always * be run if changes are made to the low-level morphology code. * * Some things to note: * * (1) This compares results for these operations: * - rasterop brick (non-separable, separable) * - dwa brick (separable), as implemented in morphdwa.c * - dwa brick separable, but using lower-level non-separable * autogen'd code. * * (2) See in-line comments for ordinary closing and safe closing. * The complication is due to the fact that the results differ * for symmetric and asymmetric b.c., so we must do some * fine adjustments of the border when implementing using * the lower-level code directly. */ #include "allheaders.h" #define TEST_SYMMETRIC 0 /* set to 1 for symmetric b.c.; otherwise, it tests asymmetric b.c. */ int main(int argc, char **argv) { char *selnameh, *selnamev; l_int32 ok, same, w, h, i, bordercolor, extraborder; l_int32 width[3] = {21, 1, 21}; l_int32 height[3] = {1, 7, 7}; PIX *pixs, *pixref; PIX *pixt0, *pixt1, *pixt2, *pixt3, *pixt4; SEL *sel; SELA *sela; static char mainName[] = "binmorph3_reg"; if (argc != 1) return ERROR_INT(" Syntax: binmorph3_reg", mainName, 1); if ((pixs = pixRead("feyn.tif")) == NULL) return ERROR_INT("pix not made", mainName, 1); #if TEST_SYMMETRIC resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); #endif /* TEST_SYMMETRIC */ for (i = 0; i < 3; i++) { w = width[i]; h = height[i]; sel = selCreateBrick(h, w, h / 2, w / 2, SEL_HIT); selnameh = NULL; selnamev = NULL; /* Get the selnames for horiz and vert */ sela = selaAddBasic(NULL); if (w > 1) { if ((selnameh = selaGetBrickName(sela, w, 1)) == NULL) { selaDestroy(&sela); return ERROR_INT("dwa hor sel not defined", mainName, 1); } } if (h > 1) { if ((selnamev = selaGetBrickName(sela, 1, h)) == NULL) { selaDestroy(&sela); return ERROR_INT("dwa vert sel not defined", mainName, 1); } } fprintf(stderr, "w = %d, h = %d, selh = %s, selv = %s\n", w, h, selnameh, selnamev); ok = TRUE; selaDestroy(&sela); /* ----------------- Dilation ----------------- */ fprintf(stderr, "Testing dilation\n"); pixref = pixDilate(NULL, pixs, sel); pixt1 = pixDilateBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixDestroy(&pixt1); if (w > 1) pixt1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); else pixt1 = pixClone(pixs); if (h > 1) pixt2 = pixMorphDwa_1(NULL, pixt1, L_MORPH_DILATE, selnamev); else pixt2 = pixClone(pixt1); pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixAddBorder(pixs, 32, 0); if (w > 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); else pixt2 = pixClone(pixt1); if (h > 1) pixt3 = pixFMorphopGen_1(NULL, pixt2, L_MORPH_DILATE, selnamev); else pixt3 = pixClone(pixt2); pixt4 = pixRemoveBorder(pixt3, 32); pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* ----------------- Erosion ----------------- */ fprintf(stderr, "Testing erosion\n"); pixref = pixErode(NULL, pixs, sel); pixt1 = pixErodeBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixDestroy(&pixt1); if (w > 1) pixt1 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnameh); else pixt1 = pixClone(pixs); if (h > 1) pixt2 = pixMorphDwa_1(NULL, pixt1, L_MORPH_ERODE, selnamev); else pixt2 = pixClone(pixt1); pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixAddBorder(pixs, 32, 0); if (w > 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); else pixt2 = pixClone(pixt1); if (h > 1) pixt3 = pixFMorphopGen_1(NULL, pixt2, L_MORPH_ERODE, selnamev); else pixt3 = pixClone(pixt2); pixt4 = pixRemoveBorder(pixt3, 32); pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* ----------------- Opening ----------------- */ fprintf(stderr, "Testing opening\n"); pixref = pixOpen(NULL, pixs, sel); pixt1 = pixOpenBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixDestroy(&pixt1); if (h == 1) pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_OPEN, selnameh); else if (w == 1) pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_OPEN, selnamev); else { pixt1 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnameh); pixt2 = pixMorphDwa_1(NULL, pixt1, L_MORPH_ERODE, selnamev); pixMorphDwa_1(pixt1, pixt2, L_MORPH_DILATE, selnameh); pixMorphDwa_1(pixt2, pixt1, L_MORPH_DILATE, selnamev); pixDestroy(&pixt1); } pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } pixDestroy(&pixt2); pixt1 = pixAddBorder(pixs, 32, 0); if (h == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnameh); else if (w == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnamev); else { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); pixt3 = pixFMorphopGen_1(NULL, pixt2, L_MORPH_ERODE, selnamev); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnameh); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev); pixDestroy(&pixt2); } pixt4 = pixRemoveBorder(pixt3, 32); pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt3); pixDestroy(&pixt4); /* ----------------- Closing ----------------- */ fprintf(stderr, "Testing closing\n"); pixref = pixClose(NULL, pixs, sel); /* Note: L_MORPH_CLOSE for h==1 or w==1 gives safe closing, * so we can't use it here. */ if (h == 1) { pixt1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); pixt2 = pixMorphDwa_1(NULL, pixt1, L_MORPH_ERODE, selnameh); } else if (w == 1) { pixt1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnamev); pixt2 = pixMorphDwa_1(NULL, pixt1, L_MORPH_ERODE, selnamev); } else { pixt1 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); pixt2 = pixMorphDwa_1(NULL, pixt1, L_MORPH_DILATE, selnamev); pixMorphDwa_1(pixt1, pixt2, L_MORPH_ERODE, selnameh); pixMorphDwa_1(pixt2, pixt1, L_MORPH_ERODE, selnamev); } pixDestroy(&pixt1); pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } pixDestroy(&pixt2); /* Note: by adding only 32 pixels of border, we get * the normal closing operation, even when calling * with L_MORPH_CLOSE, because it requires 32 pixels * of border to be safe. */ pixt1 = pixAddBorder(pixs, 32, 0); if (h == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh); else if (w == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev); else { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); pixt3 = pixFMorphopGen_1(NULL, pixt2, L_MORPH_DILATE, selnamev); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev); pixDestroy(&pixt2); } pixt4 = pixRemoveBorder(pixt3, 32); pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt3); pixDestroy(&pixt4); /* ------------- Safe Closing ----------------- */ fprintf(stderr, "Testing safe closing\n"); pixref = pixCloseSafe(NULL, pixs, sel); pixt0 = pixCloseSafeBrick(NULL, pixs, w, h); pixEqual(pixref, pixt0, &same); if (!same) { fprintf(stderr, "pixref != pixt0 !\n"); ok = FALSE; } pixDestroy(&pixt0); pixt1 = pixCloseBrickDwa(NULL, pixs, w, h); pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixDestroy(&pixt1); bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 0) /* asymmetric b.c. */ extraborder = 32; else /* symmetric b.c. */ extraborder = 0; /* Note: for safe closing we need 64 border pixels. * However, when we implement a separable Sel * with pixMorphDwa_*(), we must do dilation and * erosion explicitly, and these functions only * add/remove a 32-pixel border. Thus, for that * case we must add an additional 32-pixel border * before doing the operations. That is the reason * why the implementation in morphdwa.c adds the * 64 bit border and then uses the lower-level * pixFMorphopGen_*() functions. */ if (h == 1) pixt3 = pixMorphDwa_1(NULL, pixs, L_MORPH_CLOSE, selnameh); else if (w == 1) pixt3 = pixMorphDwa_1(NULL, pixs, L_MORPH_CLOSE, selnamev); else { pixt0 = pixAddBorder(pixs, extraborder, 0); pixt1 = pixMorphDwa_1(NULL, pixt0, L_MORPH_DILATE, selnameh); pixt2 = pixMorphDwa_1(NULL, pixt1, L_MORPH_DILATE, selnamev); pixMorphDwa_1(pixt1, pixt2, L_MORPH_ERODE, selnameh); pixMorphDwa_1(pixt2, pixt1, L_MORPH_ERODE, selnamev); pixt3 = pixRemoveBorder(pixt2, extraborder); pixDestroy(&pixt0); pixDestroy(&pixt1); pixDestroy(&pixt2); } pixEqual(pixref, pixt3, &same); if (!same) { fprintf(stderr, "pixref != pixt3 !\n"); ok = FALSE; } pixDestroy(&pixt3); pixt1 = pixAddBorder(pixs, 32 + extraborder, 0); if (h == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh); else if (w == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev); else { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); pixt3 = pixFMorphopGen_1(NULL, pixt2, L_MORPH_DILATE, selnamev); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev); pixDestroy(&pixt2); } pixt4 = pixRemoveBorder(pixt3, 32 + extraborder); pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt3); pixDestroy(&pixt4); if (ok) fprintf(stderr, "All morph tests OK!\n"); selDestroy(&sel); lept_free(selnameh); lept_free(selnamev); } pixDestroy(&pixs); return 0; } leptonica-1.70/prog/livre_orient.c0000644000175000017500000000635612242266147015341 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * livre_orient.c * * This generates an image of the set of 4 HMT Sels that are * used for counting ascenders and descenders to detect * text orientation. */ #include "allheaders.h" static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; int main(int argc, char **argv) { PIX *pixd; SEL *sel1, *sel2, *sel3, *sel4; SELA *sela; static char mainName[] = "livre_orient"; sel1 = selCreateFromString(textsel1, 5, 6, NULL); sel2 = selCreateFromString(textsel2, 5, 6, NULL); sel3 = selCreateFromString(textsel3, 5, 6, NULL); sel4 = selCreateFromString(textsel4, 5, 6, NULL); sela = selaCreate(4); selaAddSel(sela, sel1, "textsel1", L_INSERT); selaAddSel(sela, sel2, "textsel2", L_INSERT); selaAddSel(sela, sel3, "textsel3", L_INSERT); selaAddSel(sela, sel4, "textsel4", L_INSERT); pixd = selaDisplayInPix(sela, 28, 3, 30, 4); pixWrite("/tmp/orient.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 100); pixDestroy(&pixd); selaDestroy(&sela); return 0; } leptonica-1.70/prog/adaptmaptest.c0000644000175000017500000001717612270122643015322 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * adaptmaptest.c * * Generates adaptive mappings in both gray and color, testing * individual parts. * * e.g., use with wet-day.jpg */ #include "allheaders.h" #define SIZE_X 10 #define SIZE_Y 30 #define BINTHRESH 50 #define MINCOUNT 30 #define BGVAL 200 #define SMOOTH_X 2 #define SMOOTH_Y 1 /* Location of image region in wet-day.jpg */ #define XS 151 #define YS 225 #define WS 913 #define HS 1285 int main(int argc, char **argv) { l_int32 w, h, d; PIX *pixs, *pixc, *pixg, *pixgm, *pixmi, *pixd, *pixd2; PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi; PIX *pixim; PIXA *pixa; char *filein; static char mainName[] = "adaptmaptest"; if (argc != 2) return ERROR_INT(" Syntax: adaptmaptest filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pix not 8 or 32 bpp", mainName, 1); pixDisplayWrite(NULL, -1); pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); pixDisplayWrite(pixs, 1); if (d == 32) { pixc = pixClone(pixs); pixg = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); } else { pixc = pixConvertTo32(pixs); pixg = pixClone(pixs); } pixSaveTiled(pixg, pixa, 1.0, 0, 20, 32); pixDisplayWrite(pixg, 1); #if 1 /* Process in grayscale */ startTimer(); pixim = NULL; pixim = pixCreate(w, h, 1); pixRasterop(pixim, XS, YS, WS, HS, PIX_SET, NULL, 0, 0); pixGetBackgroundGrayMap(pixg, pixim, SIZE_X, SIZE_Y, BINTHRESH, MINCOUNT, &pixgm); fprintf(stderr, "time for gray adaptmap gen: %7.3f\n", stopTimer()); pixWrite("/tmp/pixgm1.png", pixgm, IFF_PNG); pixSaveTiled(pixgm, pixa, 1.0, 1, 20, 32); pixDisplayWrite(pixgm, 1); startTimer(); pixmi = pixGetInvBackgroundMap(pixgm, BGVAL, SMOOTH_X, SMOOTH_Y); fprintf(stderr, "time for gray inv map generation: %7.3f\n", stopTimer()); pixWrite("/tmp/pixmi1.png", pixmi, IFF_PNG); pixSaveTiled(pixmi, pixa, 1.0, 0, 20, 32); pixDisplayWrite(pixmi, 1); startTimer(); pixd = pixApplyInvBackgroundGrayMap(pixg, pixmi, SIZE_X, SIZE_Y); fprintf(stderr, "time to apply gray inv map: %7.3f\n", stopTimer()); pixWrite("/tmp/pixd1.jpg", pixd, IFF_JFIF_JPEG); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 32); pixDisplayWrite(pixd, 1); pixd2 = pixGammaTRCMasked(NULL, pixd, pixim, 1.0, 0, 190); pixInvert(pixim, pixim); pixGammaTRCMasked(pixd2, pixd2, pixim, 1.0, 60, 190); pixWrite("/tmp/pixo1.jpg", pixd2, IFF_JFIF_JPEG); pixSaveTiled(pixd2, pixa, 1.0, 0, 20, 32); pixDisplayWrite(pixd2, 1); pixDestroy(&pixim); pixDestroy(&pixgm); pixDestroy(&pixmi); pixDestroy(&pixd); pixDestroy(&pixd2); #endif #if 1 /* Process in color */ startTimer(); pixmr = pixmg = pixmb = NULL; pixim = pixCreate(w, h, 1); pixRasterop(pixim, XS, YS, WS, HS, PIX_SET, NULL, 0, 0); pixGetBackgroundRGBMap(pixc, pixim, NULL, SIZE_X, SIZE_Y, BINTHRESH, MINCOUNT, &pixmr, &pixmg, &pixmb); fprintf(stderr, "time for color adaptmap gen: %7.3f\n", stopTimer()); pixWrite("/tmp/pixmr.png", pixmr, IFF_PNG); pixWrite("/tmp/pixmg.png", pixmg, IFF_PNG); pixWrite("/tmp/pixmb.png", pixmb, IFF_PNG); startTimer(); pixmri = pixGetInvBackgroundMap(pixmr, BGVAL, SMOOTH_X, SMOOTH_Y); pixmgi = pixGetInvBackgroundMap(pixmg, BGVAL, SMOOTH_X, SMOOTH_Y); pixmbi = pixGetInvBackgroundMap(pixmb, BGVAL, SMOOTH_X, SMOOTH_Y); fprintf(stderr, "time for color inv map generation: %7.3f\n", stopTimer()); pixWrite("/tmp/pixmri.png", pixmri, IFF_PNG); pixWrite("/tmp/pixmgi.png", pixmgi, IFF_PNG); pixWrite("/tmp/pixmbi.png", pixmbi, IFF_PNG); startTimer(); pixd = pixApplyInvBackgroundRGBMap(pixc, pixmri, pixmgi, pixmbi, SIZE_X, SIZE_Y); fprintf(stderr, "time to apply color inv maps: %7.3f\n", stopTimer()); pixWrite("/tmp/pixd2.jpg", pixd, IFF_JFIF_JPEG); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 32); pixDisplayWrite(pixd, 1); pixd2 = pixGammaTRCMasked(NULL, pixd, pixim, 1.0, 0, 190); pixInvert(pixim, pixim); pixGammaTRCMasked(pixd2, pixd2, pixim, 1.0, 60, 190); pixWrite("/tmp/pixo2.jpg", pixd2, IFF_JFIF_JPEG); pixSaveTiled(pixd2, pixa, 1.0, 0, 20, 32); pixDisplayWrite(pixd2, 1); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); pixDestroy(&pixmri); pixDestroy(&pixmgi); pixDestroy(&pixmbi); pixDestroy(&pixim); pixDestroy(&pixd); pixDestroy(&pixd2); #endif #if 1 /* Process in either gray or color, depending on the source */ startTimer(); pixim = pixCreate(w, h, 1); pixRasterop(pixim, XS, YS, WS, HS, PIX_SET, NULL, 0, 0); /* pixd = pixBackgroundNorm(pixs, pixim, NULL,SIZE_X, SIZE_Y, BINTHRESH, MINCOUNT, BGVAL, SMOOTH_X, SMOOTH_Y); */ pixd = pixBackgroundNorm(pixs, pixim, NULL, 5, 10, BINTHRESH, 20, BGVAL, SMOOTH_X, SMOOTH_Y); fprintf(stderr, "time for bg normalization: %7.3f\n", stopTimer()); pixWrite("/tmp/pixd3.jpg", pixd, IFF_JFIF_JPEG); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 32); pixDisplayWrite(pixd, 1); pixd2 = pixGammaTRCMasked(NULL, pixd, pixim, 1.0, 0, 190); pixInvert(pixim, pixim); pixGammaTRCMasked(pixd2, pixd2, pixim, 1.0, 60, 190); pixWrite("/tmp/pixo3.jpg", pixd2, IFF_JFIF_JPEG); pixSaveTiled(pixd2, pixa, 1.0, 0, 20, 32); pixDisplayWrite(pixd2, 1); pixDestroy(&pixd); pixDestroy(&pixd2); pixDestroy(&pixim); #endif /* Display results */ pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/adapt.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixc); return 0; } leptonica-1.70/prog/rotatefastalt.c0000644000175000017500000003007412242265716015510 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotatefastalt.c * * Alternative (slightly slower) method for rotating color images, * with antialiasing. This is here just for comparison with * the better methods in the library. * * Includes these functions: * pixRotateAMColorFast2() * pixShiftRGB258() * rotateAMColorFastLow2() */ #include #include /* required for sin and tan */ #include "allheaders.h" static const l_float32 VERY_SMALL_ANGLE = 0.001; /* radians; ~0.06 degrees */ static PIX *pixRotateAMColorFast2(PIX *pixs, l_float32 angle, l_uint8 grayval); static PIX *pixShiftRGB258(PIX *pixs); static void rotateAMColorFastLow2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval); int main(int argc, char **argv) { char *filein, *fileout; l_float32 angle, deg2rad; PIX *pixs, *pixd; static char mainName[] = "rotatefastalt"; if (argc != 4) return ERROR_INT("Syntax: rotatefastalt filein angle fileout", mainName, 1); filein = argv[1]; angle = atof(argv[2]); fileout = argv[3]; deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not read", mainName, 1); startTimer(); pixd = pixRotateAMColorFast2(pixs, deg2rad * angle, 255); fprintf(stderr, "Time for rotation: %7.3f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } /*! * pixRotateAMColorFast2() * * Input: pixs * angle (radians; clockwise is positive) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error * * Notes: * - This rotates a color image about the image center. * A positive angle gives a clockwise rotation. * - It uses area mapping, dividing each pixel into * 16 subpixels. * - It creates a temporary 32-bit color image. * - It is slightly slower than pixRotateAMColorFast(), * which uses less memory because it does not create * a temporary image. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixRotateAMColorFast2(PIX *pixs, l_float32 angle, l_uint8 grayval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixshft, *pixd; PROCNAME("pixRotateAMColorFast2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (L_ABS(angle) < VERY_SMALL_ANGLE) return pixClone(pixs); if ((pixshft = pixShiftRGB258(pixs)) == NULL) return (PIX *)ERROR_PTR("pixshft not defined", procName, NULL); w = pixGetWidth(pixshft); h = pixGetHeight(pixshft); datas = pixGetData(pixshft); wpls = pixGetWpl(pixshft); pixd = pixCreateTemplate(pixshft); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorFastLow2(datad, w, h, wpld, datas, wpls, angle, grayval); pixDestroy(&pixshft); return pixd; } /*! * pixShiftRGB258() * * Makes a new 32 bpp image with the R, G and B components * right-shifted by 2, 5 and 8 bits, respectively. */ PIX * pixShiftRGB258(PIX *pixs) { l_int32 w, h, wpls, wpld, i, j; l_uint32 word; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixShift258"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", procName, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { word = *(lines + j); *(lined + j) = ((word & 0xff000000) >> 2) | ((word & 0x00ff0000) >> 5) | ((word & 0x0000ff00) >> 8); } } return pixd; } /*! * rotateAMColorFastLow2() * * Alternative version for fast color rotation * * *** Warning: explicit assumption about RGB component ordering *** */ void rotateAMColorFastLow2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_uint32 edgeval, word; l_uint32 *pword, *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 4. * sin(angle); cosa = 4. * cos(angle); edgeval = (grayval << 24) | (grayval << 16) | (grayval << 8); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina + 0.5); ypm = (l_int32)(-ydif * cosa + xdif * sina + 0.5); xp = xcen + (xpm >> 2); yp = ycen + (ypm >> 2); xf = xpm & 0x03; yf = ypm & 0x03; /* if off the edge, write the input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = edgeval; continue; } lines = datas + yp * wpls; pword = lines + xp; switch (xf + 4 * yf) { case 0: word = *pword; *(lined + j) = ((word & 0x3fc00000) << 2) | ((word & 0x0007f800) << 5) | ((word & 0x000000ff) << 8); break; case 1: word = 3 * (*pword) + *(pword + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 2: word = *pword + *(pword + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 3: word = *pword + 3 * (*(pword + 1)); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 4: word = 3 * (*pword) + *(pword + wpls); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 5: word = 2 * (*pword) + *(pword + 1) + *(pword + wpls); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 6: word = *pword + *(pword + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 7: word = *pword + 2 * (*(pword + 1)) + *(pword + wpls + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 8: word = *pword + *(pword + wpls); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 9: word = *pword + *(pword + wpls); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 10: word = *pword + *(pword + 1) + *(pword + wpls) + *(pword + wpls + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 11: word = *(pword + 1) + *(pword + wpls + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 12: word = *pword + 3 * (*(pword + wpls)); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 13: word = *pword + 2 * (*(pword + wpls)) + *(pword + wpls + 1); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; case 14: word = *(pword + wpls) + *(pword + wpls + 1); *(lined + j) = ((word & 0x7f800000) << 1) | ((word & 0x000ff000) << 4) | ((word & 0x000001fe) << 7); break; case 15: word = *(pword + 1) + *(pword + wpls) + 2 * (*(pword + wpls + 1)); *(lined + j) = (word & 0xff000000) | ((word & 0x001fe000) << 3) | ((word & 0x000003fc) << 6); break; default: /* for testing only; no interpolation, no shift */ fprintf(stderr, "shouldn't get here\n"); *(lined + j) = *pword; break; } } } return; } leptonica-1.70/prog/ps2png0000750000175000017500000000161110141356041013600 0ustar dandan#!/bin/bash # ps2png # # Rasterizes a postscript file, saving as a set of bitmaps # # input: PostScript file # root name of output files # output: png binary files for each page # # Restriction: the input PostScript file must be binary scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outpngroot" exit -1 fi inpsfile=$1 outpngroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppsfile=${baseroot}.$$_.ps tmppsroot=${tmppsfile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppsroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpsfile $tmppsfile # need mysterious "primer" echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${tmppsfile} leptonica-1.70/prog/italic.png0000444000175000017500000005043107463574043014444 0ustar dandan‰PNG  IHDRxzºgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœí½KäJvçi^¼“–Ba9¨MŠ»Zi›BÓQPŒÛz1»®¯… f¥ A@Ër9éÅÂe/„ò^jQP|-µdß4*³™… 4ÂÅNiŽ -visþFÒ_áñÊ Ï›¥ñSu#ýA'4;ö¢ýíó¿[ƾo€GÚžw·¶çÝ­ýîóï³Ïò@»É;^¼ªcü‰>|>šûí®ôu ³ùgƒy€=€W6˜ØMÞrñêûçÍãÍOîâ þû½úC'ÞG‹·FÜÉÛ˜Ø1Ó]–úÜ×|ñÖ­òÖ½æß[x›ÄþÌ–y È–%¯eÝ1ëÖîâ’m7âí¼6ykÙ~ï˜m›eTânã5ø“ät “tLê)/ý@f¾òöçFÕÊ]¼F®óNß6¯C5°8«d•Á›swÈ=;‰<‹u”K-òW߯ÞàMz>ñy<…>Ð/•°CU–öœÞ¸ƒÈɨ>Sñ–™þæ{怗y¦rúƒzN”0Ne¥!÷0õó”àñŸÈŒç¥ùܽ¹Œjà\­óê—£©YÜð:%*ú¯¬o/¼q}™™Z”æÅ÷À›(òG«Ê)½¯qÄ7{‡f· 4üwUT_GÁÓC•éZ–FÝsþ§çý»ø¿)÷µªDÄ]/ðΩªšÌŽãyÇ[Ú¡ô)5Uͳ¼Tù¼0ñ÷À{¤¬³É/"rQÑòfoI¼ðWŸR5\9‘•6%ªÐŸŸ÷¨ÿ2®ˆ!Ëyeoò¦öLfv ü3Ñð¦×Ä‚~T~öžñžÇ3;’“|Ф ¼†ñŽ7³gŠâe ‰-EF¥Ô–r†ïƒ÷”xÉAÕåØg[y‡ÄKm/*‹Ò*ÁMM œFå§Õgç­OOML”¢a'¯lüÉÙqÓ¾e†êZmãZlðRåà³Í¡ègà=ûMP”€© ÞØw¼”¶£oF~#4x+'ÉøfWó3ð‰WÞZ˜UÞÆˆu$ò5^×ðÒ°H|¼x©"åµìxz»à-ìãÿG5¼fô"§ ØW–xk*xŸ›× yU 4¶à õzð|v‡Â$JûsÎNÕk~åý/MýC‘üúGéue~ømpäï·¨%x…ky“¨f¼8ˆªj!¬`_OT4¡Î¥©9gg<}§sÎГøü¼NoaˆÌɪåõ‰Ìÿ6ôwꯤ•ì•£O¥÷ãyÍ“WC‘sý•èÙÁç4•Y'‰wL¼¼ðß÷oÈ%f¿‡Öè sß #ÿt^‹„Ê›æXFÝï7­eú·ô›ãùn°véßÑ_x¨Ù¼VV¹¾Êh\ýæ³ó’RE½ŒGÅg“·y¢óåõºã^;ôkUËÉ—Ï«GCùä¶Gd‡2øïª}y¼1•ý¨r‘%ñ—ÏÛ½@I¯ü °ê3Ýc7Ÿ5ýnó®Žõ¿»÷KóßñÆûmÏ¿$KÔÚ[û¥ónØÖçë_¶íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­ýîñþ=?õ^ÞvÀ»Ïócޱˆ/&†nZ²òºV·žçõÕÓ1Ýe÷ñÖ,^¾¹]o„ɱM›.ŸßÞž5æú¼Ìîà=—onç57y¡ƒíxíòôŸˆÎ܈Ïî˜guƒxåºõ°»y\9ò.œ™_D /?¸Õ˜«Å»»xãÕ7êÖÃäMÿͶúÃݼժ<¹‘òkÊØûxW¾ÞÊûfha+g]ùáÝþ°…··Îû]->nåWyœ\ïÁÙ cL–šêÓª°–Îßg|iö‚8“3& Ҝы‘°8‘?`½œ.WËÔþ4'î¯MD7úbØóЫdtk¾>6¶?óïq=}x tš¼O£€Í×ê8«náµ+¼cSƒ×GG#1Ö'åt¦­Ãaì™LÍAo Ïg|¦Á{ÌO˜:9dLhÊN'£ùœüÁ ¬˜† òú„Zyž3åísncAŠ¥|~È äõš)ò>U0ŸÄß²ˆÌ›¼|gálÀ{çmËkVxS3’Ù[ªJl-èµô~:5&ðŽ+ Óçx¿"¿ÕCÇY>8!èo‰W¡}›_Ó)íîT[öfˆ„âúˆ¾c‘ñYêNão¥×#Ùîž‘Gä‚,“‡ëÈ Í¿¢Ô§ôJQQ&—Óݬ´BS1ró%/´pÜ0‘™XÛ—™>7uJSq«À+³)A™ZPŠ¥ÚǼ¨…©oxGÐgfG„“R95^¤vR"ŽxŠŒÐG'ìyÔ¯dAç 'œöŒd”úU©eÇr*ÿ¹ÐTˆrn¾YòŽ×x•˜$ì\­óVN¦t†–·¬êê+ï(öA_Ùò {F¥ugA/D¾-JhíŒHü¶œYå åѯcžÛ³‘èÈ‚Š;¥Æ¡G9YVæ@wŠEªcÁËRÇ“«:^*^˜ÿL牗_$l 7yUx=&.ªú9#^i^ƒW5¼9;]òÊÀ[¹a?ðx›<*ìñHÐ*ðŽäee㨯=p§AŸ~LΚÎ( ½Â‹eÂà-ïÄ[x­2KHkßðú%ïYÃ+Á+¯ÊÙËÐß!Ðà+X"á¡3/ !#ðº#ÊRJªæ ñrxû×öUiG*K+™ßŸ.y!ÕXáÍ$ÕÇÑ&¯BK¸ÂûÀú“¿vÜõ…;S%Ôð’o+º|<¡ñ¯ñ%x9ñš¾ ðÒi®( À[áTt›Ó ¼šdÁ‹eE+¼©¢N<»ƒ7^ðºã†—j_÷Þé ^‘yóÊÞ²9E;~ Þ]ª¿à¥Nί¿, eÂ*¯ãk¼¿€¸3Yç­ná= ¼ub›éKþ (7±tJGk¼8G4ï¥sœqÙñöÖx©h‰×œ¯ð¾¼ñUfFàÍQ\t|KúŠUÞú÷šñEà͇k¼šxmœ• ¯¸•×þEàU-¯[ðž6¼®ÞÁ*o¶à¥ú,ÎãÔÿ•‰7ê_rü/ÕgGêx{ o^½à»ô%„’¸¹Çò‚¼/âÀû#:ÇѳŽ×T«¼pû?[òòÀ+i8Ké:ÍššFÇãú/mË\ZòÆ+¼òñ†î€,¯4]èÕ à-ü?^–5 oÕòË{îxÝÉ÷~·¼U:„¢åU¾*6y/¦h…hx)-r»ä5 Þ1 "èâtgÄ{,¯Vx¡2ÿ@¬œ Há_.Ò¾@Ü«¼¯—¼Gñ{ðB|ÜK:Þr—Ê[xCysWL2ð2‰×Ô~jáçÄkâ4¬½èxóoy©8SjßZÞNwM¼XÑ×Å;^j,^Ù%o‰x-xOÕñ†Q[/÷7xÛúê3'^Ûó=}Æ3ê rÇTO¨¢^žî¡R$^ÏáÓä|úX¢IôèËPT»i3œêx­Ò;©_dÔú¥Ì·¯Ì3_ÕMúêxqÏÓÂÊËŽ7Zð¦ /ê‡fùÕ ¯au/?ªxz51z­9V½Dèëêêñ ºŸœ^ÉHã³#^SͨÛÑkxÇÕœÚC;FÅœNÍú-Qàµñ/õ+ž¾×6ôשY /§ì*Ür– ¼Ú·íÛ¯xÏ‹o×QýË1%ÉPXé?PÓŠ±õW}.õQDý óò°g8ú®Ôƒe4 ¡?Œx/¡ c&¢&Ǿ¨#êÖ×,òôz <•ñùJäÜ¿9–)š3ä‘Èíɬþý0 Ì*âUàç-/µ!…ñ)ñŽDµÊû³¡£K¼¨(ï2úÃ|ÚñÒõ‘Eœ:¯œn•M¨å/š‰ÔžÈ\â^ígÜlÕ_Éüëš©¨ŽÞ9µk¼ ;í·¼QbÉí¢1ñÎÉÛY»Lk±úi]†ÿ:ü•a0~þÒ)ebÜ+5 •A%qN÷5bÄ{£ç>±Ï¢<¦²þ²OÓ(·’1£˜¤Î-çåñʾboÚÕΕ/&4>ÃÀûÁ'ÃCªÕ¼>uQf%ç2éi7%_#õ9x·®ê2ß-ÎãOá=5o¢êr©'áUw¾u•Ô&ï=çXØð®.ÞfwñvßÝñä~Ý>·KŒ¤î²ñÞsŽ…}oÞ¾½wë*´ ¸ï ûÞVõÜ]#¿õÀÆ¢mnð>ãx™Z¿æmÖÛöa³”¹þ,¼OaX¯¶2û´)¬¿Õ¾/Þ¶ t¼Ó‡þîwo>öwËö¼»µ=ïnmÏ»[ÛóîÖþ=ð®Né/쳯Eßn¼Í”µ˜m|ÊØáíaæÂ¸hë¼p5¼ý¼¶×‹.­aì«{xõ6Þ0'¹-³:»~tÔº‡ñžž<û^tÊ·:WgźB᡼a6ºãÝðüg·Ÿ+lbyó› §º‹7Yãu÷ò^.yWôB7$+s'§ÛÎõÝòåÖpyaùõ]A.òÇñR^-xWzøoÝ}ðÎÉ«mçZ ×ñ^¬~Þ;ƒˆèuÿ} ïÊi;Þ…pæÃ-¼+‘4;^¹úýý¼ëoïõ‡Þh©ììäÖ¯|²å\Vâ3µ¼ë®D¼õŽxi¤Š±ßähçTfW6.¯ð¯¯ÿ{ܸÎ{wP™Oá¾ Ì1æÅYŸûž×•NUEYÜÊJ1µ#15àÚáaL¼Nð’* §ÆžV+žiê7E“t6Ë_J1ÖLfxÝ d¯=÷"5ñ±LD%”ÛŒ\2eZRΈÂEð†IÄþ‚·´Bt!é…J›çr¨ª "^É8Óâ—Xˆ7 ¼YP†`zOoª-D1*›˜Á‰þ+Y–ïôðDæ r¡àð9D”M`“$’¼'‚1x9Þ¼€DŒxç¡/H¼)x%feÙWBå×xk©Þ"aƒ¸ðârÉ;ñsð†»¯+ ¼tCª-Ô?Ó^ŽË÷ÚJmF9HÙ Þ¬áµCèÿD–OƒþâWŠçæ„nc(g3Äò$^9·~Á›ïZ¼|Á«!coÝòZâ哆W/Ô CÉ݉ô!Pè’—¡v ·©kÖ+èÜŠxOdËäJß5é;Ä;dƒŸð÷E.~/¨ ýuc%´¼—ˆ+¬}4¿¤"@¨]MT¹ÆãZ^uÞÒÉ!@î»–WSûñ!>­áa¶9½>N‡°ÜJêúpSµ¼†×Ûç9;9u¹NzÚ‰;5¥¯ˆó‰ #”WtYÏÒ)uúÔyIÞÔqðoDB-¡ é[‹w÷*´ôÃ1ðÖ*ðVaÎnrµ#’ßœ)a9ÕèêÈEÉ:>&EsF´ >8š²ó"=ãšF¯zPŽjm:HQ¤‡˜ e² Žœö /gzsô zɼH(¨9û‚²…S³#xQó)xù¼©‹uœ»sÕ‡”ß°0R½=¢?YÙ‹ò©¯åñuà=ˆÌ‘…ÊèXrË –<œB›„ yÖËû¸H¢ CJT.Š©¦^,×CI4òMb¹‚F±3tªÐÇ@Ÿ¼¬:‰Ô‡ˆÏаÞ«ºñäâ1ÇúÞ£Õð–4G ®cä\Nw^-)_zÐ\’™Ã( MpvÌ5뇼è%ýß1r…x+è÷4CÝðJÿ@Ûäý¸Õí‡ñ¯Í{‚É ¬ìñidNà moÌB˜xF¹’˜á®=¼°å5Þ“ãix×ãJÛµGVûN¯šg›” >1Ç•£ï Ngmü3ýѼ³Û|ïüöñþš… ŸÆkïzøx»Uï±¶ö‘ó¼w¤5ûì¼]œÊ'â½|øOÉkè8­|ÜÏ[[ ¥û8Ëcyñnýö#ãU®+”L'zˆ}/óoëa%íc¾^³öîΙMû÷0¿ù%Ûžw·¶çÝ­íywk{ÞÝ[ÎPÇëß¼þ¬5¶˜Äß þ"Ãß±ü>nôtÆÛíáQ㊵q0–bîšc¸ä¿C>Ý:Ù÷$Æñ96bÛ·cüMÞ%åíîš›[¿Ûn¯¼µÆ­¼­?¬¤"¦{”¾Í=ÂjYßXDpˉùuÞn3ÞNê²Ê‹Ï–CÃ;6§Ê™¾uÛ±þÑ-#ÃMÞîH'uYå]ûáÛ»x¹ 'ç›g{(oWþ»c·ò^nå½Xy±õzñÖOÕüF½ó@ÞÎ?;š[y'[yåòH¹íûÛôq7Ov+ïa{â¿Sð®ÔwCî[yÅGñÞ¶«ë#xÏ1n™Ê•ììeÏ(#y‘8©}a  q{ж^U¨¶ñÖKÞõgž®­7ejWm•‡ð†¢Åji,Å6¹b²ì%ëY©yr,‰7Q…FdÃuS}–Ë™=W(ÌŽ!ŠÂïü¯TÏÇ”%WQ‚Ïj<_½V7f߬èʶ™zï¬åíaŸ2_™~_d—cÍ~Š0¹E ”#YEé;+! Ñq"ƆÉy‚ /áw0SÑ.± Ô'꬗à‰Õgl°¶ÌÉ þÀOЇ2uÕ»²+'eÛ ¸Y™ßä-^­ò’ïA‚…‰áé$5ñda‘²H¢<"Ô\çì%%â5N"Mì€ñ1x+ÌXWøÓùN^À½t Þø2ð"w!ûQ˜ ª…0^bžÖR·¼ªáÍYÌ”n6Óµªåýqa/CðÖå-*,Z5òI3¢¼ ‹À9‹²B31Ms,œžÞáIË+’†·¯ïÀ†x52,>ï PRVA¬¶ÆËxVKÄp¯lž›ÓÑ!6ÓMBhœ¬á Ê©’4­ðò"Hà&oƒ*ax¹ÆÿF?8á“BÿQj[ÞÑIxcÄïYÇ‹ø$B¢o\ù%o¹àåajÀ4uË;lxEË‹Ít«f³A'Ìø–ߦ¢-o-o5‡D‹|J,£w2-¼¤òE¼æ¯SGE ¼õaŒXD£%•¯Ž×þW‹,”’-¼(Ú Þçì!ƒà‚JfÔðΩE›ÌâyÇÛ¥oXßIuê’WTAR–‚×_^UT5&î#QP: ^iüAÇkD“¾ÁÝŸ }ý3®Wx‹ù Þ.Ћ´?nx{¯§ ^á»ô¡¶Ë¦7x3ô‚j#„‰ixqJÎK­}¤o$^ÇWyx¿¥›qÑ*¯žmðêÀ㌮áÙ’7{·ÂÛ¦oŒÖd²•7Ks¾äuॆÈ`ÇЋ†7ixU˜ŸWAïÞ(ðb™q½Æ‹IŒ›þpÔðþÏ o>êx߯›lçÅ®ìj…·jxƒ¨-©¼²áM‰÷Ýë4Ô¿}Þš[õ¾ ;/¾7¼ªá•wð†Œ6Ý$Jà]øoxqÖ¼Ò×È ^»àå éÛ( R*³W/ÿÐò^•aräMmdÍ@½/:š ½L£Þgí@,3cϼr•×·¼è6l÷+ÂfçÛÒ·á…Þ5P"»€Ü@Û~4kxå´á…$$Dõ»¢K‰«Žš ·1qV8¦Yòºoì¼Y}ÞñÚm¼A¢Uó2ì»–¾"Äwúñ*DÓYÊ_01™Rú™¯%ãÔ xá8}©Wx©D}Öòö±ikŒi¦Ä–‡Ð‘õ6ÞÔuþð7îVÞ×Äk—¼¡~hyx =z–šR,ËOZm¡OÀ˨aÇ©¦3èqÌ(ÈDŽ4|F¼¡½¨ñÒ} ¹HWxûA+ƒÍt¯fÛòŽ­¡žF¨ëm¼Äù×ñª· /ú]DŸ‰¼9x©+^ÃSÄùµ°LäÒsQÓ'·(©Mø¡3›LJ-¨+Æ©C—º¹´nö@åf8ì‡p]â–ªKß¼GUÿø^HÊÈ'¡âYçåþxMóPÁ{tãŒî ÖÊœ"f 9`’sÄÜÉi¼Á^GyÐT$ç½.ú"ª!í¦?=ò^ðFúìt„ðmØœ–ñêocä„UydyÂÎcôwTh/Ê0nêx-!]L =²i§UØ­y]ƒW·ÏSo]m?kÿ£RZ#°¢O¨ó¡1š&ç•’îui’ó—îì˜^¶¼‹Ítÿ•z…V$_k•˜3ôÓY µ}XF}RT‚“)T<ªáÍ áQ"¡ö¸\ðÞ9?Þ<X`MWõ>Ëà ³p¦‹æ}Ù,HÔÜë¸zúgÿ*-õ‚òeÓ«c\7Z^Ƕʺ‹lOËDå=÷iiOdQ¤æáÞà¬ê©ªocò®s-íMóC Râ‚’*JM"Í‘GL+êPù‰sŽ¡;Ï©‰éx/Ç+ïâ]ùê㬆̪Ùã^PÓk$ ®Ì•ö-/–:Üj&7xÅÞÅsËOæ]±V®@µ1–¶}ÀðÞ@§•f¬ñ®[7x½ ó.[ò66{o›ø«’ÞêãÒGãy”Ý«ïºF;M°* IV…lò~áºmò^5¼×·¬}‚´* ÉW5åí÷íÛò^>`þ­½™UÞµ™¤&0Íâû¦yˆmð¢(}Ñó…V6ÿ¨æ-Æ _4o[7uõí—ÏÛ”N. ?ü¢y·Øžw·¶çÝ­íywk{ÞÝÚ*ïm“¥_’­ò¢}nì#uÓŸÁVyóÅœâ’üaÖõø\|÷vHŸn«¼ÓæíF(V™‡ˆ¥?¡S¿Ê;YÄ\zl*-ygá]îy†9Vǘëçi¬ö7mwñê±¼K( …©_vXái±eì å]âoW®ò.§Ä?–·öÓ¬ýpË=ÚZÞ.ÚÓ±Z=n›Êêiyoyt¸òÊ/áXTÛ^­KÛ¦²úªŒí IDAT$Þæ’w«;l¤ùJ=ÞëEô¤ZÅ«ÇÝÅû~măêßjYÜû;mEÓò^u¼kÇmåu¼gc†g<–ÅlÄs*ëf…ÌØ¿¿@Œ“ö‘ˆÜøéÃy7´"¼Ç+Ævø">ï‰-6ðÖ,þ1|"«Ü žÍcÃësÕòâÙ¸Qœ¾ÃîHÈžkðjëýkÛm ¶QÇmð.£'mdë6E«EêC ‡ç˸ ODÜé ãÞ <¶azÕU®¯øð4Kb°Í5·Aeϰ¦J‹oÔ·"—š¤ÙW,Ioûƒ»Ò¢Qï½÷ÏëEáì°¯¶ë¨&­ðÉ0:$^ë¶aêvÎRÓ°Eþ†ôÍÊÌŽd ”QPYhÌjнþ-ݧJ$ý[‚Ù^aÍ(ö<3‘9Õ¸}²E¼‡aW Ñí,ŸpÞÆk‰W¾ÛÍpHÒY¸QS‹ñ¼qšŸãLN´…Ìè¿…™A‰&m’•àÅ.S ÌNbvì™Ä–`R°„-Á¬âóyEÙ…µòX¥›0ÿËŽ÷yØÌô\¯>:;§œ@¾VËå¬óZÕõ 󼺯G0…À+1)‹c<‡ôldã´êvÎJah=pR+¼eŠlÀÒã_©T‡-Áž5[‚)þ®2Ížg¥™ËŽ—Eö¦b0ÆŽ [y¥J(P8zUb$å ô;>Ó×ÞᎠ1äØAªå­¯MàmwÎ:‘-/Bbש‹–·‹Æ…m°­—S…v'!JG³%Ø’žc㦖7ÏC0ƒŠJÙ󲬥™Õ/ [b¢ª‚~Çgùœ EÔð¦7ëx1ý,±•“S ^xË)Ü ¼R^^„» ¼ó°­Ïl\èú@FàÅXÅ?#Þ°ç¤V¼³àåM´'5³ýg§'Ðî˜Yº¾œUh½ó—œÏª ßñiþŽúlo ^¾àõ+¼Ó)f?$æú”O×xÑî›À[Uõ‹J*È7½zgP’mŒPÄ{w¼”z·t'ؼ ¼}9Åi« Ó!¤WÐïø2ùY} ÂödEÃ[6¼EàuQËHÀ{ªD"§W¯Pu„—¡BÂQ9x-Hƒ—ƒwˆÓ©§z<ðbž®ðjÖòJÊ›*lœ‚@KÙ »ÈT×)Ä[)’ŸÓ¯ÃödÅZú6¼u[9-x;ÞYÇ{¨,xSð†òeLÇë$KØÌ‹èÍé¼Y½àEÝZSVV¦áiHáˆ÷:дo¶ÆvŸbk¼7ÒׯUÙñ†ôu/oðºSðö.Ý×aϳÑÞYóóúP6›3· T5;wyªÄÁ«•VôȨÚixÓÖo~x³/ùo®–¼_Åe¹–¾P[¿Îûôå³ÞÄÔ‚ ÞÁ¼U- œÇöU—A G¼gT‹¼ºá5çqØo.mxE[Þ¼‰ÏÖyç¨Á«ªŽ·ï·¯.ª /eRe_>„7å /â¹A_boØNÉ´¼ã–õÙ;»àoá»LÙ¦þõ?¬ðb,y%é«°çYàÝ–¾é/4EaŒ„ëS3Ï€–»Bh©m û^w ï[ Büb×yó¯Zå—Êçâ ãžü\•æCS9“?lðV-ïIÇKi‹j:Ì8¡üÐ߯-/;¤–ªI9N¨=ÎØ.ÒĈn4'^8~–cw¦ZrÓðvõKŽè}i^·¼…iîÕA•{,Þ-x xmÃ; ¼êv^øBØ3kx©>kô;¶V†=;Áö‘a£Ä3™j&ˆ×öƒtòqrš³(ñç oÙöÁ‹ÍŒ"}Úö „E¤{El¡ºÏ§oïÚÅmû¶Á«É¨þ]òRâmò=Œõ 1Ðo¥šS¿ˆµÝ ž  whÏëg’ªùfç¬!vÏDgƒ|œ Vqæ;Yošþâ9Ò½ÖØFmÄxáŸ5%Þ¼áM­;áP©"RË£þ-êþ*¯^áM+L ³æeÖwü…¥ÒAœ£Þ.b—¬ä¼Ù9+?E”ã¨á…„¼Ô›W¬v™Â¦d»cžS„ ý2FV±ö¢qÎN±¤*ŒcQaÏxoÁk°skÐB6í5šåÿ,;Þ4Õ =̃ ©YÛ„ñ›¶r êØ„ô­Ûô}ïsˤDK à4teÃÂ8Šò„º&qØÌ¿st+§çèÕë¢fQnú,ðZQóÁzœD£fË/*3?J“ù&}×ðŽó»xïœß°«æ¿ÅÂêܘŸyTˆš±vK0ÿ®öæËrAƒÀ§úARŠH5<Áð„ú¿/7ýÀ;¥_ô…‚ô•õ§ª»Ó÷¬}4³ÑlŒè© f¯Kë‹7D{ £>î"éclÞFAM+‹ñÔ”ÊOxç·ó~â:ÍMÞ‹ûò&ü•Ý[B&ïðÍ"”=ˆßÝÎ{«$íaÖ>:XðÊ[Ž»Ýn¬o¹öþÞ7¾Àšm¦¯zô¶­Ïšíl¾eƒ÷¾-Á¶Ø6Þ«ÏÅû*$¹å³éÎxÛGÍJéñ¼[C†=D¿óq–7—ëž—ç·x›mãÝ¡~gƒ÷ñµã¶X÷_²f[ä¯/™w›íõ;»·=ïnmÏ»[ÛóîÖ~÷x/¾o„G»{j»–mWe9+vµKœ{Yy××V¶ –Ú‰2tö¶F€™ò¸ï^»'}ÍV^+;™ýºwÄ:Ô¿÷x¸-ÆîŽýë:Þez–¡sº5}ÇwðæOS²ïá­e³¯Ö ßU6³uÿ)}G(›ôñcŒmv/oûb-=?†÷Ñ1š¶ÛCy×øj¹…W…ápó@wË™ÄÓÄÀú¸ôÝ mH—¾ÛОŒ÷¸Az³õë‡óbЦãÝ’õµØ–è7V3î~V‰\á™´ªy}*¨ÏkQË–)ãëk¼[ü×ÞÊbï““'à•a#$lòTÚ0§”7Ã~S%ñ–»)d÷‚x±uH_ïÔÌÝYL·xÐ+@^ÝŽ £^Uú'¸P.ÝPb2ͨIÿèå}wÛ]¼˜æ,mØA$Üa–°š5¼Žñ‰ºFNJãKkûB…\Í«ÀK®t ^'²²á-0¯E {!öDg¶˜€L0m–ô‹ ‹©?n…âkäÿ{6ü,]Û°aà ÉAé ª9x¡|!Þïl_/0ŸP£FßgöT… S×W·Ôõ3IÐIà5‘­Á›³°ÜÞa“;™ ó¸~x›ÀWà=U–5È«ðŽ±·MÃ[Ga{_RñÄþš ?#^A¼±O¼ØÚÅOm­&¶×Ê/U’‡!È9¼Ì{õ3ádÊíRlý^w4‚~ ² IàE“àx1g ÞúDÙˆü×ç—± /"ïœÆu„ =I/ANô ]y«{¦áE Y¾¨ÅÄ)%Ê& Ê£y©’"Þ4DbÁk_¡ÿË;ÞÃXÃüóoÅ¢ÈúÀko¶à-©†˜.x}b|+ó~2;õ2sІ[nôQ¼õƒŽOÈɈûMaŸ¸%¯?ˆK”7wºà͈·èÒ·J;^xsiÕ o~¾Â{E¼S×jîóáq¼P†T7ĈÓÖcÔ¿e-:Þ¯|†ú êEìoè±Ù‰@ykx§å2}Ä–Ä%¯^ðš~u´à}ÜÜñVK^ôL¤Oý?w—£9J¦!Â(”/MýÛòR³À—¼Y¹ô_Lõ¢²àuÞ,y™XIßÇóæÔ×nxQ*Êaª±?Ö‚÷Ý‚×,xå‡À[kªHÞga·.ð–áæÁë!}^åm¿Þé'ð"ö‹Çv‚—.»!ä:ÈH°ëŸåUÞñ2}±óÔ;H8S§ý?ª+Äj"^ìt„›w×"BÜòÆÄû¯ò;LªÒ¹>!}Ų ý Ô/eP•诉7?·jL¼…‰ͳqKW¤àµWLÁ;¾61"ï@5•‚7¯ƒÜqæýÄ:µè?ÔŠZìß"ÀÐÝãO_…&F³1nx FFyÏ1ñþ= z»T{ˆ ùaG=îÝ!Ï©ZEäƒM¿ªZQ·#ð–ˆçÔUà­Q­+Ågm!ðNÀ[=¶>£>lP²Å>Þz÷ò4ö»7¿ù»e{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íywk{ÞÝÚžw·¶çÝ­íyŸÌ¶Æ¡ø‚y·Úžw·öï™ws¿ò OÐõ{ïò¥ÂŸh=òŽ_:Ï}öÞe˜Ü&XJº7×<.ßÇÙ'ñêõ¯ëOŽŽºb[¦o¶‘¾w‡–~¤%q–1ƒ›¶#Wâ]ÙŸZáO¶¾Iœùˆ]Èn·ÌëÞæÒVÞÇ»${s?í.HPÜüó4Ë—'×ñ2 QsézÁ»µ.ª7Âloò¶·ßm…¾þ˜àS[xW6#x/64WÞoòŠÅa˯?q_¾¥÷íâ]sÚ%ïÖàèà]¾ûΗß·¼]ÄŸÀ»yÌGÛïëæŸûy—Ÿç¯âv¿ò¼ÙÖç"¥×ögZ9eçØ¡66˜éVÞ•°sj…WÿÈ÷®Y注¹-çÝh‘Ñ /Seý\šÿ„[ÔÃÃȳú/ÖQ.µÈ±#©VùÉ“õGVyëUÞ<ªéÊNÞóŒBNÐÒ2IÍj !½>–©;“Uد܌¢š>¨ÏT–æªÌrJôÒ¨ìøÉ3­òÚUÞ$²,N½A0IâN¸e‚¸™w¬ÙºÂœÉl±_¹=/ >ŶµÔ*‹Q¨K‹‹' ÞòÚGˆÅì##•þrx6Ë 1¦Í ÖÆýʧYqº òÏq™ûß:ìW^DkõJ;Äþ¹Øô·&Þ?iyŸ¬IÎ|:¯#cŽ„ý#}Èk6âxk9% ª·e¦»ãÒ¥—:"¿6C5A-¡‰U;%Þilo\G¥ÁžÏõPeU-KjÌlÌßðRµ2¢.T>-(}…F¡|ZÞÔö¥oêNxÙÖUÛ›¥?ïHt‚lØ;ðÒ/9öÿޝ™É„Ä›¡Û@>¤CDí§á­ÅÛÀ{"Pv2ÊÞ¦þ•èv7¼®á­¨¼ù޽Ôg)578ù.oxÉ3´ç)Ÿ •ßòCdF'¼œª¦,ðrì Ôðâ½¢_7¼My µ•~'9Ò¯á NIÛñŠÀ[<5/v»§)ðZj_›ö˜Û¾°#ð²8´úk/õ™ñoÒ—ªÂ?åù?/xÿ½¯%ÞU9Ƶ鳦‡x©ž¼r*‰©¼åÔð¦>[À3ÿ[~þùy¯ÞáÉ š¬‹¦½PݺeÚ¶[ü÷È»ÁðÔ©µ.}·=ʼ{ÉØVÞ‡?Ÿ´òÉHf·¦ïÃì‘a±?ݶEwOßÏîI|ó3ó¸çÕß»=òùú—`ß'ïGíÿö仵=ïní{å­ï?dÓöé»[ÛóîÖö¼»µ=ï#ìýã²OßÇØãxŸ¾»µ=ïnmÏ»[ÛóîÖö¼»µ¯¼¤êC¿½çÀÛƒŸO*üMz˜êbñ*~Ï}ö8ÞÈ=ˆw9›´m{­bÂÚãx ׯ[ð® F[ËoûÙò™ººZ¼œ·ûÍ6ö`ÿ ×-êø±é«n~{?¯•KÝhÒí®0Qø¸ú¡Xˆ~ï±;ýáVaóVÞ#ÕL°i¦…tùΊì¼úÏÅïåäÇñº%o}¦š LóÞ¢Q>€÷ BÜÀ+½÷(Þ…­ÌöÕýÖìª?l×ÿÞ8õMp7üc 'íEgæíTåKÞæ“…‚©) çżüFúBtC œ9s{ÑâÁ¼k3û×} /fœ‰·V<‰_Æ£æ\ù@UËÚ9³ÒOP©mÿf“±•wíÆ¯ÝÎ{}+¯]™12A’Ìóšu§&Þf.[¿+- 7ßôéÛ\ðf§tvúRAîá¢:òylD=ˆ-Òˆr*^Ó¬UÔwñæQÝkŽÎ#ÿƒÈ'~ŠÍ-8n*üÐÈɤ‘P—n!‚"ÞF+Qr3ˆ3^¥9“!}YdÏ^&5vx¯lÏÓKnÂ6îØÐ÷@2Ás,Sºäo¹¦»ºÂ¬$ênð £Ðm±›¼IäðÇ/ôà/çЃèÁéf GtR\ŸXܲùSeâV´=IÍ©é´ÐLÿe‘1¸xa™(é˜ùÜèº/§¥frFí…;²“£(ÓöÅ3ºjÿ«¼ÞE7F¼©ëá#p·óúT:¦.¯ˆìix5%ö׮у ºP=¸eq¾à-©¿#çÉ{äš×ÍšYØ?ñ2½Ô¦Ï38(/ ´¡¾´R@ïX]ÏͰ/&•=SªþÝðŒŸñÌXƘ;;a=JÍšÏ(»LÞÈÎÁ[F¸ܵe£PÿÖt+ËBÁ¸¦ëe5 ù >Ì ¸Q#RUÏTH¸qÏ=WIoÁKªÊ‰6qÃ+¼JL4xgv ¡-ACO8Tü¬/RãÄØ¸¡ìðH>{G‡š¾ók|•15ÉÄ;7g ¯Êæu«¯vq«¯åŒ\ˆnÙBT9™#}£†—ņȤ´#dDÐJÔ¬Þ· ³o5‡–¼W7x£.}©Àzš)ðʇñ’W®ðÖ›¼Ä{Ò¥/xCúBuƒ½áñ)§Oœ´«¼Z…ú¡j:3~î¼Ò/üÁ‡n™SPïWRw¼r…·îmð»Êë{XJÐð†òv¦D} ²ôµt ¼¥O]´Îˉ7¨ùB¿îbèÁ'A_½,oþ5. â†÷™Ðþõƒ ¢†W8÷ Õʼ>_ðV ÞPCçñÖ ^¨y=‹Óô¥N†7Myó½í¼žqã/Võà”6ë¼õ¯‚&íåÓ…Ç*†^~í¨Ž|Õ6žÜä­©g  ÿñ¿A»äíù–7îx¡ìoë3Ÿàë¼y§§}ÐWS{1Ô_¡þ ëq¼k¼©Qä®X~Ñð¢›Í­‰«±³XÈ·Á›ÒaW&÷§ê·AÅ ½¼ZZ-xß¶þð¶hx)û¼Üv³¼i²lôÕè7¸çèPÇ.¢NI¬c{&#‚¥œ4¼cËÐDFT}º2DÁ;çvÔË’9õÔ›þz¡MÛÓÀ«‡y±ÆK7ÚðÔe›¾—Xö×ð¾~!õoÚñú õ\úà&mõàœº–Ôϩ٨у£×$Eè~Kž[ôuÔ¨Þ©*” ¯¬b"ï™>Vï˜gÄËÎ~ŸJêß),Kó³¹fCªfé0‘R-k’ê3_èxå¤åEרhüáÜd;/:Ï(”íÁ£gè€ƒŠº3ÝÌ×ô¥áh…™9ˆò!òÂÒIÆ9xsj.©YÑ‘y®¨Gay®±\Òç§ÔÁ§«¹¡cUZR/ ¡ü±Œ ôÙí1Ú‹àW„€µ^¼¡4ïxÇ+¼­ÝÐ+£ÃI7ƒêÕJ´=ÄÛËûa<TïÔuåè­iY‘+ªãž†Øã(9?:¡ÛÔ_Dèû™ýõ8çæ˜ç”–=òÊj3†L/•¢?‰î‰“ÅÜÚÿè±@«åÍMè!>T_}Ök™e»|ÙR¡4…³Ôêµ'ßž r: à°°vŒî÷qd^Ðûg=Ǹ~1L÷Ù(Ê”z½ªly©—9Ç”%~M¼µ[-¯üD^µòé¶ÇeÛ¬–ò ñÒ-ŠžVãš¼ mNRœ*xŸ‰0^¥1!ý͇Qã_kúênÜú ÞŸ¾[lû(^˜Ý~¡nˆ‹úÎ[ÙñÚçÆwE_ݾº%ôº-ž­=èxïG,¶g+ÂÕN¾MʺizÁ»¶ôþ1¼óOÕ?tñT’¾K/ú°úñcx¿ºÿ MûØù–[ÀÅ_>þºOïr¥åf€Ê¥­VíñÎÏÄkäÍõ£|e%ùxíãözñªáý˜•~ [¦Üí£!{3}ëí¼nKµ ²hÐ4¼Ÿ¢°z¯“ÓŸ­ò.Ïa‹6"‹&ÝÞO m¸¸ÀÕVÞ×ø³m9{¶â¿KÞù–hs|ýd¼‹kM·ò*üi#áýE÷ŪRe…wKœ•‹Ã½Æˆk™Vl›¼ånÞ&eFø@ÞÍ»-˜Ãly8ó¹Ò2—ZÚ‰»x1so¶×mð.=c•w32æÍ+¨Ž—ÉR$2zœ/×Èoë±ÆQ™Öñ»K« LµgÍñ\Œ²õ-^¬ð†ÛùHÞºã­OD–i/yÞËO®oå]|îXÍâD\‹Ï8 ƒƒ}•øDň|Ë"a©åÌ ÉØFT‘ýÎÅë:^§OZI÷&áy–È¥ãšúE|•õ'½nà^*!X”áùþs9¯a ±Ç±‹„¶¦Ï:ÞÈölг=÷bˆ†˜Q=W¼‰¢k¿ ¹x’Xb>¿ã/ÒÎÄ ¯îA£šWIðïˆÚ'w$]ŽqºaIDAT&–zóô{g݉I$ÒüëQ_à·Ü09IÁ{ÊŽû‚±ÑÙ1c2u˜¸Žæsjþê³S>×–ðsAx†Vä^x¦¬DÅ„¦3>ùs²5Þð,Dxd6žˆ4ðz´ÓIÏQ2…ù-瘱‚®GXÆ52¸†`ƒxk‹ùêüJ¦¹)ÞÌô%ÚÝ|pòìt$Æz8”½…ùÂFàuᙜ™û3ÂôÉØ0û‹åV%жå1å]½ÌrÖoM™D¼Ñ/0aC¼T#¦•µi;“Ôõeàµ/bórô• îqT3Êx:›cqA©lG†xyQ˲°Ã˜‹·à ‰JwÂéîSsZ N)xËê:LCeiÏþÒ‘Á•=Ä$ÅËXXg3ƒÿRŽÑÕ³R3Å-¤(8§I¯~¡o5¼Ià•SËàtNãœÌ kæù”üß&€%"^õ–xT;à=„˜„x…ÁŒíé0ðÚÀ«}Ë›YJc{^ˆNµUrŽ™Üjâˆf™•æLòkä¤ þ›|Ùõ[Þæ¹ºœ¹ÒDX„ItjŠPSsr1‡úÁx™]‡‰&k^b’Òž2>^å­¡yISû’·º^ \œD¨¸>¹Øé’·²}YÑÅ&eàUö¨D<¸yˆÅꇱl¼UëAÝQË+(]/fæ]\šZIÞ˜þ?oõù©÷bÉ‹¼YòŠU^û—À?ïñ&ï0Ä7«ä’×·ºoÖ¥/îתëx_ó®¼ù¼Ñ’WÖ!øî+„,©{x1XòÊ5Þ?î.ô]ÞïÒwéYà¥ô‚P> `þ ×xçWþ¶ãmš¼Þ:ø/ý°/ýÒCwùƒ9÷ÿÖð–!Ê`Ë+¼Yé^’¯9…[q­À%„¾Ák†#ÑåoÇ[‚×ÜL_'þ^¤ÚA?t1ÅðlÁ;T¨¦M|>ÙÕAíóÁžÇÿƒxkñ¡ Þ«×YËû]Ëú—xß.y¯PŒ¾#_@}V¬óÚÀºr?d÷'7yÙ ëéƒÊõJWèyÕglÀKEa†ìêßÍöšz*ö_Q{!¦ªåå!ð6Õ'1µº¯hxq=‡(Ò÷—¼ä»#j$:^¹ä…æmƒñ™b¢ãIÐ/æÜˆúHa‚,Öi۵uõZεo/+ìŸ\L›ö8B‰v}AÝ’4]œª7xK7’ÚŸª%oÕòª†w0Ññêïyúë1ËLd®R^Ó(]¾Ð]×L˜žÏÑ ¢[CgH²?£ïì€ú!½‚úS…í3×/ÎGZíFG¦Æ¡½-ï,ðŽÎ$å‡Ôg¹ä-íŸËq—¾T+€—^ÄV ÞKâ-|1³*W ý/(6¦˜ ¿‚NœI“ya6’n­‹ïh_:6b½Ä't%Å$úúÉ«¡@¯VŸ×¨¤¢{ä. ™Vsªóܨ߫,e9ŠÞ‚wj~+zçñH^†Êp”;ÐNáa¸õ5Ùö|gŠaÌ4ÔgR)¸¬tmjt“Ð9†j°GµZ/¥§bZ&14¬¹>æ˜ÕX@£Ê›a ½Äï{æg”»î˜ú´?uÔ;­ÑÓ žKLÌ ûfЯ¹lš‡Ðëí'ƒR>–-ï@n¶x²Ñ=E™ß<¦9îMwPþÁ0—ª²ú'”m¿~\Gä÷¸(ñBÈC½gN RJòäü$òõ3ê²Ü!ë°x+ ²Ú„Qn‰I_Ñ|]Ò6ÞÅ(îÞ[­‚-ž˜©µoß„¿Â—o0¾8áh&l<®ê(ÀÐXA"“’Wùi९úW=}Æâm¼Ëµ`Oû&ðÙb݈ù¢Õo4cpr÷Z†Ç a\Q2ò¼mÏ'—£úîyÄcŸþlòÆ÷ðª[¿Ú¦O·òÊî•n_=F$Ûà½/Fé1¤o>¿É»¤[ðÊ»/¸i¼É=‡"ïÒºñÿí¡·Ûï}ÄïཾñÉ.æ[Ú¬ï}[Ll{&×X}ó§»àmôkuwêû¶¹=fp}ó§Ÿ7»ýÈ`FÞöÍgâ}2«oν|ѼËgÛ û²yoÚžw·¶çÝ­íywk{ÞÝkGW7{n_¦±­[i® :Ÿz_ÂO´†·Ž6¡šA\˜Ë×",c¿›Øv`ÚD®hkÍ—[wzø$kÓ÷ÞÐÔëB'ÖfüyÞæ@ ¢£vÑÏ‘¶˜ºý«;¬õßtSa²ÂkÖc¯×b-Õ¼³0¬hF¶ùE}z;T;Š¿}pqµUmÕÖíØe3àqË»vÕ ^¬Þ¼Ó6Š þ¶wèîØÞ§=äÖ±aÍ—I¸’ùë¼›·ÔL(¯ûC-×½Ò´Ó,¸I3¸éïŽG í!·J~j¾üjå¦Öy·êŽ6 Íš§ qrÑ {¯ë`šƒÞljn÷‡l s+ïÖª«ã½\åUÍÛþFv5`3‘»Î{±qÂÕòzïRd¶’ à}»àÝêMo[%oî2ºuÞoäV^¹q•eo[ã 5^òëÍ ÞZ–=,‡¥’md.´tsKxûÝ m˜Xáíž1mç5k¼7´\+Ò¹­ñ„ì’÷⯠:(÷‰ÈyNÿ™o4§J@'PYÌæÞþ' ¼ãZ4xé ©Žÿ^jù³¬.¢òQá«ç1–`ö¥BvhˆÏ®6˜µ­-ÊÛã 5“k[ykI¼Rd©V“(gå›5a«ç^Gy¬…cƒÈõܱô¶Ï]OKâ>§ «Ÿmäë¹Ò²ñw‚ö"aòÿÉ çë#q]ZQŸ++ÝŒµ"˜KÈyF7yõ‚·K¶î‰©UJÿñ¬4^šM¯(µòŠêÈqg‘†”BRç9ñޏ-rYTÊ–3ðæ ¯aÂèѱòù ãK“°öìˆx-ãùXG†IÃuÎ^IÊùmˆÏó*jøw?­¹ÿµ$·ä!² ñNÝ6Þ ‰×^¼ûqv…€¨„ ‹Ìx‘UÔÊi3bXUŸ(°áRªkðjTþB[&*3ê+ª±Y4×øœxûCA¼QÒ+g–挕y{‚ ŒOØ#óÅ _¹—ìˆë N`t«NDƼŠé¦¢ ß2ao<ɰ¨6qú¼˜”ùËv[SúJvôƒ†1Fˆ—S†¼•S×*lωIºñߎF’Ü+ÒQ¦Í!GH¡¡ÁlØö,µLNSdŽfÐ!E&7Œ!Â@¦Gg/öL«YÐï„÷ÄKŽÙòB+ÒñžSº#¤ ¶×!jL®?Þ¾(Öye¨â iyS§ˆ·cí…(>)Ì_ÞZÒGt’1¡dëæÌ£Þ;mØ«]*âEÖÐ),ùQYÙ/õÒo¾àU æ„]±ýªEˆ!òã›ô½É›…(AàÍ¿Q˜«L¡€c5¼)ñÆtPL™6žPâk($ÀxfǺá5Ã>nU¦×æXfÚ:tGVy]Dtæ<†V¤å›f?YÐ`»–³ô·ñŠ–—©°î݉À[„%^r^O÷ ¼±ˆ‡0JŽ2lj†Ô?³Fe²&EÔ–.Ú€AÞaZ^-ÛÀBV¥T²ÀK2ötr•·ºÉ;Š:Þf>;§Á{ÚòÖk¼ˆ'ÔðžHª<†ªÂÖ›à•¡*çf$èfG¶^ð†ô­Ê†Z‘†7&^ìC×0 ºwUµ´j;¯BÔL[/fo¯áÅÏNU‰Í?‰W­òÒ/¸my“À›5¼"ðïï© úDjy³ÀkbŒlZ^^5‚†Â&ÉoPû¯ùƒZòR»Øñ"ÅÃ&ðÒ%ã†× ðf?xHˆ·&^ª+ˆ7Ål?• ¢{H?†‚¬á þ«|¨Ïˆµ¯‰yQ­òÚðæj-}¡Ø¹Á{¯ð¢ÍoxËËÀ‹¬ñÙø*ðž5z¥À q—z/PÉïë´ã%ç©‚ôÓÍC‚`TP4lò®øƒixËŽ—:(o+¼™o¤oÖòš†·˜„íŸÃà2KÞ~o¾Æ+¯/°‹²ã¥ëVŽ^ú¼eË[l㥋X~·àµKÞAë¿>¹•·ñ‡ê"ðæØ6eÓÀ«Ø"}‡ÐVˆË ‘Øäý©…^Ò© œix‚Ölå¥sÑk¤oáCý›}çZÞà£%¯¯ßà´þÛòê†YãË?ix“óÀ+(§E]ƒˆþB,1™µõ¯þù›Ÿš}kâaÿçÿbùòŒx¿½·nxóºáuuàU¨ÈaxóU^ÄBýï<õÿ^xí ý›¿ ¯¼2bL/cç‚SâgÓÀK×=‘‰Öü—f4Ѿ¨(óˆú'*ð¢½(þQ!¬¡çT” 7¢l€×®òÁ›Ùkêî\Üý<•nüÊöÕ”zÒä'>‡XΈ1GåÍ #f{ õÏ©ÿí¢äüºì}ˆÅ8ÚŸ|ðŒ9GHƒh–r®UÏðX wšŸöC<¡¨4±¶5Ï4£&à'!x"kP¹D&¼vƒÃ­úÇX÷@cg<5qÿkX|ÐÿwâºÈžïQ}[(#h´dD.5FôöY-Ë«ãOˆq-M/hǬ42ÄÐ2gÈìÒM¼Åܺ[ô;;°åÃ2¼Ãˆ¾–“wˆ'tÌ1L£ é¨KNýí‚â½—#küuë3N™ó²Þ®ßÙ)oc7­ðÅa ðâ­£Š$ ٦馄ƒ”ìËãmÜ~š­ú]Ø&ïÀ0“ÕÃîšø~x'›ˆÕÃîR}/¼7þpûºÙÏÃÛ>œî”/7Wë¼ÛÖœ¶öyxÛmÓ»t½)h[çµÛÖô6ö™x›ë‚dÝx¨Þ uº'ƒ7ž.í˘ßtp« ŽþÅ󶶘î‰o=ä‹â}€íywk{ÞÝÚïïÿ‡_"‘:]tIMEÒ /6Ö‡+´×7/ý"é|ºN}¯>ô Æ{²kµÿ‡æzäl:Û;w¦‰1òM}®GÏΣoÚæ?á8£suhþ yVh;<«†§#NölÀnû¥ô¬ òèsVÎXž|AíõÇÔˆÌj=lo–¨…zÿu|ø9ºVîœMŸ³óÏÿËVê/RXç»çs}sØ*eEOìk›\!ÿ¢'íw8Û­Èú]jk÷Û÷žOæÍuèzV³ÛŽ­¬tý>‡>eºz;äû.¤µÇ›œæ ý€ûô¼ô”?æ­$ô7“!åXtÒ63ýƒâœy6}Çv~.ÚùãMÖi†&»ÉÓ0ßÁg¼ì×Þõ†wpµK½Qy} „å§µâk~“ülùŠ*æ\¹u:Ž¿QØØ.òõ²µÈ1P¿áˆÜkGÐ h©\™!ôKgR”+¿CqÍœ/=›a£+êLòµCa#8oG´möžûè¥+Pœ)¿E×ó„ý¾ð÷7êNÎ¡Š†|%ÿÚ!wð[M&ùLbß>ð{‹^÷Ò·buUú®?*ëu'ÇïYäkÆî*|ë4X­ò®d–ì×  ÐÄ÷‰G;"õ,Ú“½kŒ¿vk×v*#ó5Ì£Hì]ù|Oy¿ÿÐú² •{4GüJcW{û;ô;öK"¿ü½ž°tµüðÏSöÑc_¯âëgï#þ^YùˆACïI´<ËQJòPFûOêÀ|)5äùuzýÀ)ªœÏž§žf,÷wâHä‘Þn­ÛÐÝÞÓ¼8èy|²ZIÞè×1>VŽìù%FQ~ü6]É3¬óÖyŸcFt÷©“¯¡•¥5•»õˆÝ%¥ÙÝÒ+¶;èÔüu"|вã¥+z‡}sÀ¾ÜÃŽhâëÅg´îšóX¡wÅ’Ï"Ô{ôgÎéÙô 6ÎÓµr@ï¿8áÅú}Ç×.FD ®§ÝW©UôO6£yê¯-¸G£ÛX‡>«Ûsèlœ§Z’,žŒgö@>ï!_3vA|ÐÚáˆÝçKÕß:Æ_üb¥Èw͉yg‡D‰B×%—ý_®í…+Ð3Åž²üÍVäòµ²Õ¨Gx=Úµøy@wöݬð v zõøËøùw;OãÏ’µWúGÇù±.çzur5ºªlÎëjä "Â’DÞ°Èa±…­”v0>‘õ3lÅk­Ð?¬ÃÐØ±ûÿï½éRˆC\νóYº²xv°sy;ªXâײë`’·BW‡æ­uå=>r‹%®Ówò¨ŽöÌÑ»ñÔÂ=ghÿ4ºƒŸt¼-ÆŒº;KØÆ›¿¡—EÖïÝröI¶³_Æ“éÊ~ªÜvw'¹6Þº«zò|,ùžíûQL¢‰Î­—2ººŸd7€Ùº3±$îw¯ëÉÝzYK¿×•œ/ûºq½]ßSMðôøÄ'ZsÕœËìšã‰oß³ýl¿_5®W¤;y o4ûÑ$’eÕU=¹S/îƒoÖÛù}ɹüŸDwÀ]ÛS³oðrâXrM:_ë§÷%grÝ­BØÇö&¶O©áI$÷^~:h'ú|žðï8ž„sù?‹îê-ûý$BßÅ’ODø©wœ»Fý[tg±»ŽÆ ‰&9ž|ËŽ3éHòÔ;Î33â<º“¿†®ì߈ù§ƒ&Ÿ´åS´Ç®k~w>;fÏ̈óèn5„ÿ ÿr"¿™ÔÑäÓ¶|†žüÿ`¼Xr%ºO áÿ×`ÿ%Ç"bÇïaÉ»2ïç¥t§âÿ:Œ3ö«¬ÆO>açiÝ®ë"ɹ²ŸšgÒ<†= ûû÷õ&Ÿ×û|šµkx¬²vFÂzû’ëÐýjÈ↷ÿÂÿ <Kj}_SõÉ÷|w‡;Ž—g6õj¹þëwýDØAw­!v¿Á~äý ,©ãÞ)c?)y/oöuOÞ¿Q¦Å–H=çÝäåÜ.»"=îIì_sEdÂéóz‚ªvÍÛÿÌo¯{9óœD Ç·úIÀ±Ä;Ëo÷®"¦;"°Æÿ·/‰×Îøá;¾›Õ¶ÊýŒ¾Ÿ°«F©u,±(eqêXõö%šlbWXñ;À{z!§ì.]]qy&–œÁOV<×_çb熪»ÜÍí¢ûV÷¶ÿ½Xr/Ÿ–|N_‚8ÁeŒ|¬iÁîM¬Ã±_höÒ½«ˆu'ìŽ#Wy·œÏjþ:ß®ïùnOUxÚŸÕ—h¹Q×xdin)"ÕØ©×¼XR#ﮃþû½;ëÑöò¿w_ò ,a}†=ѬµüÔÅÎÊ~¯3GO©"Û›Èq‰ð¿Ó—x_Eööï÷íKâ{Æo+éàË+Þâ~ÕBP3¬\\½—žTEö6#ç24ù¼¾Ÿ!ôÊ~þ÷îK>ÁÙÖ1C|¾¢«·“}³ÙKO­"Û™ØÛçó±DŸXçËø$­÷%ñ½áŒ¾ãa3Ð{‹rÔ"’ÕïgÆë™U¤{Ô¬ß|®ζì¾}‰í^wq®KgÒØM'Æ|ç_LviîÑs«È~•w‹ûßÒò\Bœ!á®}ÉàÃFŸšgÒ“}†ØïÝož›9o_2·÷Nùp]Ÿ[EÄ¿ÂÊ®ñÉXRÿ~·"ãŽX’í\½=Ùµ=Å¢½ñÍ‹uÖþêcÕ³«'ëSëH“Ɔ&ßÔîLz*–ÌÜqêßFVPJߥmoÌ*xŒŒœd_U½~:C¸GËœ·þ¹U¤I~…ůèOõÂ'Pò{8ÇéU×tÖ*†zŽu ˆ)Ç›ýªÚÑRÎfX¸÷é™UĈåÞjWwuúe,ñGsw rÂ^#¯eÛ—T$Ú¹‘á¨wû™£§V‘Gò ÐÝé•~M,9VàsÍ#;±D1±÷“,‰zO‰ Øi}|î=zî™ì‘Fè'w%ÏîKþ¤Gã²’zZîûbÀúÌ;öm„ñó­õPLc‰|rõú•zxnù¤{¿'£É¯bIgß5»/âľ—Œ±J_âglÔé|Ì`wÄF;ôÜ:Šhx·Ò+ß—ž%qWò÷4w£ùÄ÷9æÉ¬c‰Ý/yã}^¢†Dœ5úU,Ñ~~ª>aÙµû’9.ûNfüfñĻåÄwÛWX]RhÂüß‘)Ï­#NÒ—QŸAOîKΔ;Ï;º{àù/ëüøå] ~÷@à(ƾ‘ÈY{ßÒglßö§Ö‘O2¦kÞ»:=»/9ϺÎXÝò6á©{k¤åùs,ɾÆÌØÿÔ*Š Ñä©^8ß²ïyïÌ3`•¯®Gûó¿k>Jôü²½ã·5:‡>ƒ%çJð%Ÿ‰%O͈3 ¿õþÉîóÉvõ¹¾yË9‡ÏÓ3â,ÎÏõ[DÏÆƒŽøžgíUî8{u8Ë&v†ÅÿVþ·Ô¾È'ü·œ=ÖX¹Ï¯(ή³ï“þF7òò Ÿ'kÝ*þ>OÚ? ìP©…\…ÑÃï0c ¿\Ø»ìÓºŸÉýúäÛ}.†ŠtÎêoD;lûn_"ŸÖ´ð+z•l g_^åS„rKì»Ïi?i™¿Eñ)}Î9þ-BLgÞz~óëëYœ÷}‰ÑõeÃ=¯uÔ¼#¤9õŸQ'óueÿú¬vgv&«~Ó/;úó}I»5Œ¿c^sõ;ËéìzG~<ÿòZ{®øxÙéV¾ë‹ó¾#î䤽{LF#¿7!W%磉•Žœë’_5#’¬Þäá¡eì¥g` ÞvqåXâ{ZßAÙ›¬/±w£ý$+ãWɳã̳€åý‰ãf¼þSºIgªA_‹ãÍb‰ŽÇy9Æðj7=« f©rljgŸˆ)ÿHŸŽì¬üžÍ{Ï@V¡»8ë{K~ÇÑúX3lÈûý¶jÓû׿–üQÔ—ÄXñ ˆò¼Sï›Öî”{.–ÈJ‹1phÁPCóÁ®ƒÝ•8¯3ª>³ì·É¿ß2ÄÐãOÄ“„ú]äÜ‹&çpF,‰¿—ðDg–žGü‘<-†œ—¡/–ø$}nŸkˆÂg>iÅ™ôm{ößr4ïóÈC-yÌfkåï·î ÏÉë3Hâ;ÆŒùv >‡ÎóáŸI¬{=‡$±C#¾ß§f#¾kç}é̼}£Ò£‘ǯç\Õˆ«1˜ÝU9Rx+^T™¥·/¹ ½ù‘ýJŽ]JçÛìà¢Çø®7*5:ÓOo :ôž†±Ûí­3$Éú ½déìï£grl}½ÆHöIì¿ð{rÁ]Z¦·þs–ß…ÎõËëñ:yúúÌ'ûomú_tì¿îyH"9jô±ÿŠ!Л㟢·2ê¤ëáÛÚ\°Ö5zØ/¯öû¢•08I ‰XoÔþèýúú}zûç E·ëA¯'ɲ»»ÞïS~9~gÛþ«~í’Ìñ_ÎLj,аÿe€(Rõ.C•¬S‘£ë6ߋεû=:C?^1²=Ç1nû Dý¥¤›“¹²ûOôM÷¹d=°—÷N~Ï$ç¯Ï8e=ÇX}%©yØ[ˆaW1L‰Ö?‰¢ïÔ»ø¿‘κ¿‘oët=â÷?Y­I=òŠ®Ö}¥bøšç#ŠíwaÊó=·J²þÞ¿­ÑUIç£F†$~WuüÍÓˆQ¶êWþíNjмÕÏö×*Éü{¿˜ø„'›õC< ØýD™oWá¯/E®øTÑo³˜òl?­Íð×WÉêÓg<¿ÝXü>f^–k*Øó·‡á[¥²÷aÍS ¿Vÿýí¡Ê“ý³B¶^_yÄqBްyþ5ÐÇoWE+ÝWrn±ÔšÌû_Íòg{fŽXî¿­Û•Iß!lúè‘gëàÚ«l[l,ækûìœÀ~%¶:‹ÆïË«×Gé¯#2·¢Š¬ ÃÁ¹³GïfQõïNŒóœæw'Û•ÃñM$± yo8Éšü{×HÒ©ÓŠ”jc¢c‰ßi"þ¾¾5MžDÖÆaùïx!#™,_b4jPmï6§ªu>äÚ7­%"ÔÌM¬‚%OËŒö1ú¢É?bùòÞpj$sGw(ü{kÎ íw²ÁóSëá­Èõ5Éõ¼3Õ¢ú+ÔÍЗ$êcHÒû·É“ôcź&ÄìIñÉ'íüªÐ×ö®¤»wv–|G¯O’íokdÏþ1n=ZãhýžÝ?jZzXRæR£‘ˆjþø$íÑ ¿\ÙâäEWvÃOµ}7Ù›ó|G2öãÌÉPÄ<e®¯—(ÕjbuÊù~“ÎûÒÁ¿-í•ñ=Ês„gÄs<°›°'á·‘ ¿ß±b¦ýžÄC@´¦˜I±•×OÓ8öt%ì¶#g¿kí:åyyá¾vŸMú«&G’—èÝ®ŸÏH/$šÔ¾wx+µ–¹‘Œ³ e­IÖÜ|^è÷™Ÿ¢,b?ìÖ.ßÒÿ$s¶'a\£÷5îG¬uG¥óǬ¯—ròk#ÚsŒgfc¤»OD¦)Ž_?»²ûMŒ+¨]ý¤íÉü«-òÞ…täŽ19’GÐÆë7}¹B^MüÍy{r®‘¼®†ÞËfÇëÍëlä9¦eÚUŒkå6c¥å8Ä<ó›XÂÎ}_a’ñÖè'ÕKUâ•1<=Ï·6;›ý^÷n7ñ,f£?‹…žG¹Å<r®æ—®'ŸBÁ'Y̯y‘d†ü*ù›õvå|³ÙCJµJìíȿ٠×ÌÊìæb9{·)¿?²3ž—¸–è+Ü_ëd~ƒtle§¡=ª³à7ûº}UÍŠo³}lÍx8>°.×Å=Iä…èÉÓÁï›$2mÐ^Okìâѧ/iD‘£öéõÚŠª(Â’Þ=>_!ãnk‡ãŒ_Ùùíåú~ˆÈž{(Õv)Ø•Éu¾·¸îøôö%HÕü}½¶ƒü:ù›ãÉø£T¶KV¨W;ç|Í£5Ù<Û¡Ÿµmú†¡»ö¬5Á¹Ø³¾F»^ï|†¼,÷VǜةœíÇJõï°Q/Áôà+¼y»Ÿõ^Ôœï´ûíLæÙÜÿoµTo7¯×Î ¬¸/ÛHYL`ø %ã™®×iÞºJõ:[±V#ÝsDÈ`o0!øˆI¶ÞôÐ4ó½Çó¥—>GYúãr­í¨6ôÙ£‰í ô*^ûº'©Þo*ky7¢‘$÷³Dû½É"às}Qå¥oÑLþy{ðnáÍZ\ÑëýªF ¼ùúí†KÉæ‡c½ÕJÛæuL‘Ÿã™X§—^:‹â¬­fà¨ä+G-/yZëžÄÞ âΑě“ÙÛP„yÕ[:j>óvI¯sùœëK/ÍÓÈþ,»eþñìÖ³Q'/yè» ïKlóÛ [§«†×÷¡÷Pc«¡^ŸÅFúíÌv0¯kÍÞNå¥ýd³,_ËFÇ›ž±u6Öá³³ØàÝØZ­—Å'FÜ3žZ6êÁ,›­Ý¡?ŸcÄëòõ/½T'vƒèô(Ù›Æ;Çn6õ»ˆ”ÊW£nÜÞl¯ßI¡/ÖÈ¿óôúŠå/½´Bõã5m‘D㕜Åg}zW+?[!ë:çVóŒÞ+­Œz°µÎÄß÷"e欯kúÒKÿ¨ß§¿²zð¶ÏÑDŸ©º6+µï­ÕÚehÒñ¶Gðwmñ eXâÙb»¤ŽõóÞz饃tå÷€ãÍþÅL<žØíF×dTùÞJœ÷¿ô*Ã×É¢êºN7¯K³ºs¸Œc´ï¥—*T­¾‘c~_=ž'{Šdì¯ÊWÌÔƒöALÖc«•çkë#LäÏ Ç[Ǿ—^ªöÆrÌ®”9&×cFõú†ãwZ“¸.üý*`w¦¥oƒï±žs{ù݆{Œí޽8ãÑ—^ªÝ{xžêóO¯—k¢¼•;âùì|­ÛëÛÏðbøeŒáß.íA¡ØŸdÑAË_z Éæ†­'oŸþ’€ütåEõÏe÷V°µ™åÜ&´ {’Y-ªûªß=ºzƾÝgùK¿Dºšâ5rÄþb&òŠôVéù˜V¬EÌàáJkqU÷kÅÖÇU¸G>?<f%¼ô$ªt¿yÎØÊÒ7?×-oEö¤“ÓüëîF8ª ›Vî'’ ŽG÷K¹Wîð=<«!“í{]êý"ËK1åù‰óY¼ÚÔâׂÌU/“÷Z׌־÷-Á[çû—û¤‹$c]EËH{ß7zdEÎKϦÚsYV϶¬xþúU³n›­¿ZzòýÕœ#žûšO¤Þ==ÏÍz/Šê4'á¥;Q?ÊXsÑJ¹Êf;®óêÀÏÙÝ™ŠÉÓvUWiÌÏCÎÐ 5•FÍ™egù1ç¹*á¥gS-uýÉì×#^^ŸY¨©<í³¯%z­‡ Ö•}Oô¾«h½"Äžc¾ŽüS¡¡ñ¼„—®Ië•X©iÌz-=ª¿ °rKòy™éžnzþ/÷UefX¬Ҟ´>ðvd>Ü[ï•;ë‹(¿N9bð^Fe—WÁ>Ëjò°ðt÷ùWFY¯ÀuÄû«ÎÌŠØŸ{|ùò½ý<‡öÆUšž¯#É7°¤ò¥ÿÖ‘$îJlׯvq}|oTìñV"—õlá p^º펜ý ÂWù¹­ÀÕgt&Ùy.oA‡•T4«kI~‘ј†Ñm(òß˼̴ˆí­Ùj5z1å®ÔXý»€—ã»n7»±Ä—’i‘cI¥6ìW O7Ö¡„ŠúFåu’z­ËìÊ,¶Zé¹yþ/}’ÎŽË¿&Ù®lýN,á§¾>+G]q½š¬ë08ZîÌ è½9쮪?­çÑs«±àñõ°ò¥«Ñ§"d37Μ žë3É=}iú‰íŠ8Wu°ZûúðÞ ÷Zd­ªù‰ë¿žQÜV9³*á¥ýôɨÄy­ð÷œ¯Ö­ÉÏå:’Øš2´&µ»MlÛ_ÕÔön8ÛçŠ2¼XH_¼tšË¤i~6׺›½»,ˆ3—û÷úh.Ó £SnC­\£Š>»$œgÅK+4‡ÙÈŹPû:`ó'³`õŽS»c0$‘<ëX}ø½Y^Ñ›YÑóSn÷HÏ>ÿJ‡ûÒ7¨ëý•hu3 ¯„UPû>ikOβsù­W¢Tön÷WváÛYwÏþYÿD<_úÍx|î~Ÿ”¾6þŽ\Ÿ™JfºF÷¼‡èQìÆ5×4çyÞ÷ôû’³"Û¥ŸwØñRLŸÀ{#ð2;º°súp™ÔXã±Gjõ̥wdúHÂVVGWüWµuðfvH`üwØñ£ïÎÜŠô‰Ê²†ç¹§s=/zß=£9OC¹“ÙËD¹œ¨Ïñ4ëÄñóú“C_Ul6ÌËà1à£/í ¹ûJwµß—°u˜]>¢ÌÛÀ¸åÙÕ"bJ–±rWE‚ÇçÆ_¦!¯²ŠíçÕæø»ãË÷Þ>ÄzIÒŒ'gú)ϯ »OzÆ=³!×·›QQ†Vª@ÖMŽ$ö›L¶Ãrà^á|Фf¾Þ¹%¹œjG¼nÓ/Óù}‰ÞéG-þB‚#lݬ¾³¹$÷HÔ«a‰Õ 3Ýë"øzŸªÖ²š,úú]DÏž\2ç÷ /Ü—üó©³Í×~¬"¾#¯ôjV[lw®îÌrjÌKÝš°V«J Ù9žD–GÞèî[!ﮚ{dMªç¯Ï{à)4s¯Hóöç|1‡F÷Kˆ1Áò9Åõ’cê7ýƒ7ZóDuG>[M‰¥î¹uë–zõYÜ‘ú§¶]·9>Zã«¿è ¬H’|IX¿`yIYò[†×«{çî,ŽÌ옡Oc úL>ý­:Ûîý>ô-Ü-áÄÎØî®µxE½l‡‡Ì69Ê8Ç|ÆÚX*b bÐІYu(:»âŒã9¹?G?™çÒrκCü4¢ì±KsòNUYW üf¡ŸVíÆš¾œá‹±¨Ü{0k™z…ŸŸ‹rím>¯É³YSÕ$çlyÚûÙ1_GìÉÆ~ìN¸C²§m%ï‘ÿ™=ɰy›ö—·‚!«ø“é2gs—Ü}}<ñ4ÌÆuoí¨ëÁ2bßãÉf‚Í›1’EO®ôyv{ÄÙÍ2*¯‹8‚·¸u~þ;Ž®âJŸ¤dË®Öc°Ë7(»ÅØ;Á޾ÄâÿNúw ^Ïnš¯îMðYŽ YL²õÓ‰¯ólœ¥èFÖåÃ4Ê{<1ÄÞêJ–ù=çÓÝù{?ªz¬zŠW¥éxí©-…W'ʉ³FÎ ]Çﳤ]zGµ˜†lß1CÙ™Òãc5ʺ’ãÙ¶Ÿ¬¾^_Ôµ|íˆç.ZóÞ9†eëýÑ%º úqˤÈ_&YIˇ vÜæ!fn'Ïãg#ÉÞó1CkÝáyvî «“í‰ú~Ý[ý;bºƒzž`ë$š0Ü^ÓÎïVøjÞy§QÒž‹r'>sšÏ@ž‡ú©“é³{V½¥çjû‡oæ8Uí¬­«ùÊê¼âÛ蜚¡«aIÅþ ÖËŸ%RëÎZÇÌä;ô,b(Îy9®ùv3}vOŸ"Ýì±çM†1c=ÆÆFkM˜eú|˜õíŽ80½¾M¼[ôWsg´nK˜fº²W)ެ”~¼G ¢¨ÆOЗ½\ÿ~Ob½’Ï{6T5‘¹¾Þ•h=ùy1ç]»r=2kû÷潌_Ïfl-ا9í0/tí JèŒÑ§“ÕUrµy˜gn/ÓëU³ê¥.Väó¼:3.#tT<««þažoRGg¬yÕO}.«ÑÝCÖ‘o|½eKlo°×w^6Kq¿Ìµ¿÷ãoÔ• "ÅéTß×óQ%’±Œ|Ö_¡½íõÒ^¿×%iµÔ|ÌÆ1ÌýT]qàg÷:ß•Ýè¡ÌKš°<_ÓçÂ'û¦“îBëáš/ÙÊkWhOž°ŽÝ÷3—äcäzgͱmÝ{(¥ºvHG]lÍY¯ñ³óX›“Õ¦N³Ñ¨×H¶2Ã’š&Òûûép’ìë"öñÚwmñt`}‰–àKñ0f‡#–R‹oa‰DÜCGìP$v Ý£Ž/ÊnÏ÷µ=¸³“Îê äט,³€[Ûñ úO†cN÷ ‘ç}P§ù˜z¼f¬‰yJ?ùJ•ߊN~ÌöX{H™[çË8‹möVHëÑ¡yäíø¹²¶¯‹õxÅÚ>i I0¶óX²ã´§Jm×ÖóÛª–ŒÞÑùr×û+WÞ+vP·/á#¨ÓÓ"Ü“–Ù¡®?¤”ýë½UÙ^ÍúÏìTP‡ž§÷e®Ô¥¶Ši[õʪ†YŒ*öh€R¿Ý—°gí¯c<:‹ý8ú^®íY÷VwO-ÖlM¥[~GŒØ»C‚í,m$}>;¼”ñˆß¹T«½öft î Öùغ‰÷¯H÷ãÿ],ñO2­·\ÍzšÍìatlÌ"ëí›[Óëhl.Èß¾w¤º–ØL‡Ž·ö÷%ÏáŸñ–éÞ]׃·®‹ Áì\Ïë~œgk¬‘ÕÏ¢¶cÅðd/Ûë{,‡¾Ï;^a¾èÌ×åÉnÛÚÁÍwpœ°‘Güú^`ç£Õ&ö‹/QWŒ§·õÉ™d1:öf乊´Z&¬Ñ\gâïö;a¹#¶ÛXÛÃeö:“9,Y›¯Ëɹæ)­—Æ!;Š+|~™î^O[Ù=ìg3¹ÄÜO=öëù˜§Öt«åÂ*õûÿÚ:–ÊT,¬ìØã§9ßÎG¤²3ÿolžwì¿ÙÉéãIÇÒÕÎ;%ס;ÿyò 4ryÝ [Vø×³aEÊúZnó¬ì]ñÓ¬oç»ðo¬Ã}©ö$^7^÷´wŸ˜ñH~j£5+¥ÖãyU¯9Ò8†1vÈõüÍ“ÐɈ5;f×¢UØ;Ë7홺mñÚŒêÖI=ût–hý¬{dðª ï3û~>«RYfJÙþØzc&_ö‹>ß›q¯äD—ëÊŽúZ}’òÞ­j[¾:çsŽ•Õ]+8sØ^œéO«äÂ;DÜÍxgÖÌx!ãɱDòÖöŽ}×AMÜãóÙYËŒ~Ç3»¾×Dzí¯Ú6öÏRÏÆsú’-¢¹a ë~»¾±ÆüÿìéàsŸµu–8ODÄÉã‰Õë÷)?};œþ~ãÌX·»ç»Žò\C4©d=÷X¾“û¼kå^Dθñ(0=عŠ>ó½Àxn‚X]*"K÷ä®´%Ÿ×m·¶K¯ub:ËHw8Õêd]_|ÊׯkâÜ­w\žÌÜ3kêï[“äiÊú†²<’àì!upˆ´èØ{HžçéÏ£•C¶ÖaF»IÆñ¥²w¬æ‘³90¯g}m´:ªùÔÉ~5N\ŸÉ§™¾Dç°7{D;Ê„š/mWp̲Þñ˜kâ³ â%k©ä{Ä—Péú´ŽR–õÐ5ÑÄZÀ,Ó{䓟û,îñé!={hb£ßG”³­<4èí`þ¸XyÏ5BYçÁâ¤gõîHNn©þ[ã0®E },Y9•Ï&-Œƒ·GîfQ³}ÉŠ†µýšÔÀ¼Àì“þ‘O‘ÞŸŽ•s^ÍüâwÈE[j+7öŸ_2sô›ýOzÎC&»ê+ù´£rsïã Ì.ôÔºNg‘Œ4‹6Ï+¹óEÆu]»=k‡VlµŒ]Vc‡«õX†)¹æl}µ–ØÛËæ9PA]0st‡"Ÿ#~’ÔmßÑôx0ítntºœ+Ј µC[õ%Þɲ¢×9«#Í*ÙÈíÖ'¶¯v7gYyhŠ:wö3^,îèlæ*9ëCz3ê„v IvÌù,›»@=¿½OË<òõÇÜŽXô<×Ï]ù¶æülŒrÖÖ@d_7Ûw –éc*ß©;Ï>qm4÷¡ö$zdðŒõ™óÖLÛLéîÐã½Ü¸Ù3V÷Ò2I¹Ãî^Ñ笵ºš°«Ê³?¯Þup\êè]µ2æÝ«2©÷@ W¬5Ç(f’×—híño.5·Nj×õOÄqfþÎhr×kèØcüåÚãúœW4>UòpØíg/—+÷kmj¶vj£¶²ëck'>Õ*šu¬KÔHâû:Ò¡n–¹N;ÐèîX")ªîùaÿ5ûÜåõÎÙ™žWPG¯lu„NþêÞú|•Œm‡¬4;Ÿõ# »$’¬a‰Åw©k‡Ïe–êú_Ÿ¢“Áó3Ç÷¾OzX2ÇŸõPqZÛûh›Y¡X•Ú寭ëfkEÖµOÈÁóQ†$q'èÇ`ζ9ù½5ÑÉ;“××&ÖIfë÷H=gµî¡ëHb+ êjx½Ô5ç¹U±î° —Ë’«}kýJfhê!´•µÞÍ5È-³zÌRO¶ï¯§‘=âÚ˜9“ŸêÚꉭ‘Ärñ9Yl°HbW²|Ÿµ«RZ‹Ìªn®²Š‹Hïe«%¯ãÙëT´7™w3"Ëð9êúÔ‹ÎZ,ÎíKp§ÄI›§µüd§Éjÿ]í$¤æ² Oú·wöa~Gv±}c®µHÂú½—i·Ö—èód’Ìp@­ë<—>‡žÇ1oÆ/V™òÎHâ|z]õô–è¯5ïuï¼~kH£ŽÔÛö&Ò¶ÈóÚÚ¹HQ³9WI§_dzsÞ8«/áUqÌå= Öc—¼ÚZラ+Ug¦ÜYAÖi`—¬ðëÛÓ‡÷$ö´æZF’2_j«†nk§¢'?ÖR¾ÏdÆÓsf†Ãy«±OCo/7ëÉöetyɶÑëd…èÙX‚Ö\wžæ^W¤Ÿl$wÖ“0OÈ}™µýQVЄûù¢1n³ÒŸB˜73:£«÷ÎYNk²´Ì,Jðê°=ÊÐÃãŒgfId=ë.Œ£Ÿí Ij^@Þõœ—?_Ó†EžÁû²í¾Äêd†cQªð󲣇$™-3½1ïR:¤þãyðÖzÕ*Eë0Þ°,’øÝWŒ&|¤k¿”SßY—³ƒ#Ãÿ¡÷yzÝd¾ÎÖ†]oÏ.m¬›® ý[¡Œ?{®éƪ/î<ûX5i+c­§½3•Ùà!‰žÕZÚ·nΰþ§³³'+æV?ßl¬mwö»„hëg^ƃÍô%l­åÇ3ŸÕBW÷ºf¬¢*žcU}´]WíJ¬ß¬Vè#î9ÛÕðšêd‹/½³{/¢ôd3­ë±.Ù,ÖJGW^[ÜÛ³ìgµ°CkOz¬M¼ßïÚÆœýësÃ7ÉÅjëپëÇ_Õ%¡.q»çxtQ‰Ù.g=r~Áü©gJ¿³¯¬Œ°€uÞeÚÏ‘ßô¤s<Ñ}I~ ÛÊ@óLÏo«½ŽÖاº¬²6ë;=é#^œ»ÎÕH1Ä ‹{‘×ò‘ùŽdfçƒOkqïë£ÇÙÙwUâ}H§":ù‘ÕE=~=ä¯SìÿVíàã,ñ¸±¹š×ôïßîŠÆmý†¨Úã×Õ½!ý×çx²~ˆÎW?ãëòzkýì¨äûywœ¼×¨{Pïã¼jHŽ·-»¶N;‘dw$Ml§ÒáUÑήŠ|rø¯«ËýIGDÇIç–çÓº¤ÊÚ±°«•ϳ¼+;ªvH ½»¿£X‰L*‹—1G|gn»¯ãò<Á39ç[u¬ÁuÒ–CßOÏ ?GÑ{6«{>›ë'ÙÆÑfûyÑœ«'[v…¬ÖÃVÈj¯Kêо譒ÍJö[‘=øð¨à )ãéí{é0“tõk:ÜzÒ½ÌH ­®1÷YšÛëW©æÌï-œ±š®¢—U±¶·£Ê¹û]JÌÇCj»fÆ;/– éÕ¢I/cº÷oDJ·1­÷¸]½´ôIì²±0ê¾õ¼ÕªRÚs‘G;¶žÕè·¸'‰t`¼0®Ç[ì¿7y‰“Î*ôeÇŒäü†ºÔ4ëwVƒ{o“É+–!JÖµëÞÛŽ®R߯ýUÅ5™Ó÷xÖÖdìy±$'}ò鮹wJïË2/¾ò4ÉyÈu½>fկǓœO²Êñëcžúvå»úüãuu^voñx¶½î1‡û^4éÐá7ù+ÇóÝ=i?ÿ+·¯™Þ=Ó«Ãad³%êR2ëÐ Åw®žUͼ›JÄ7úΟe£8ÏoŽÑmÌ^ª“•J^ìA­¯™›K}Ï,ÁóÎﳬÄS"ßÔ©oQ¶ÏŸ­t2­EnQ¼êx’ûd¬°Wÿ™ñÛ¯Óð´­ŠÈŸ]_G}‰Œß\=àT×m=g2z–XÄÃùÜ+š³'Âãe2îö½v§ñÖe–{>vsN¹N/yÄjÁC”®·+½2φnÑÍ‚]wû_t7Aù˜÷±WêÔ·dìšë<2©|¾¯ëØçy+æÎº£ß½dÉïØq]í4É;…¼rYqº]Éž¼±–2|áö±Îêó=ɱ'öIýÓÛÝ? *Ö³îÏÓvÅw/Ådë@Ïõ¸øóYFô¤GëYû6œn> M2¯ä^ëÙ õÈ$ë=ææzTó@æ 9¿âÁ—±Ü–ù}ŒV*¼"mGmØ“§s/Z#í'ÞÁó>/²°ê—¾¯˜~‡>Ú"ÏZO ¢¡'«£™?Só‚|b<µ>2.u-_ªë¼ó³«'a­>t ôuÃ\š·ÃÓ••wþ}hÍS¾æCjä=©Ÿ‡|Ör =]æü`ÑC?Ïù1Óù¥d;•u_Kî{ê#«…h× ±ldg4ëóÖï2}?qÝåyÌqQZw‚£"Ÿ®ŽC~ïöW“¬íŠ4ŸÑxË3I#Ê|þZ¾6 jUÂÏ—žFëÄ’}Íõ;¨¯·Õ#³1æÈÙšYªe Ó7¿ãÈHîÌëUNO#D’QÙ®œóZ•¬ÅjÏ Ä½ú´Õ[Êy1ÿöŒ(Æ·›ž'Ø[“/aÖ^,¢®rMO­í*Çç¿ï¬xjµRº·+}vïß]\íNzŒ]ötX·0ÞuF[õI|w“»4¾ÌøX?Ïðx>E7ýYŽ»ªeFƒõ×µ“™ªoæ[º¨Ò×÷oëKÎè%4·ÕýÜöÜ+yÏewÍùYÆ–U>¿@ÑM†Ûzµ¬ô%³;‡iì†3&]M]#Ó­|n_GN¤AãÀ­¯x&BÊ9Ž‘†ãÙ.çWh-»5y‹ïp]½aÍïîè û=¶³[ò’¡3–19þlço­¯ø&Æ—˜ç¼–¼ãúlbþêyi¥j¢¨K_Ù}IŽzúNn»”ƒçœG|9.ŸÙ§­È¬ôõèèÍ9 ݽî˜Ë‰Çnr/Jëz^ëóÞy2²¹ÙÓ¨^F|ÏÓ~C/»¼Û ŽÄ>éé§ë„÷$šÌx?B“./«öAÝGÑ Gç¬ô—~^;+}½"^Ïpgî”·#™§2,‰¸I®ÇÂzÿEKÖÛ¹¼¸ýÍ­÷ű¾ëê<†Mǯ‡-žWzzY~š·]•Û×ïS¢µ]4±¾`~ªrëd |šÕš[ ­@é3¼ŸG:Su&Gëµ+;÷èºÎ£¾†ãFIz ÿëhàoÜ“ ^}Ûû}‰‡b±6zdÆ[î±G?YOâÞòsgg%<‡dî¡øjæ?ÝŸ«éyØIì¡Èà7SZ'›§NÅx¢WÕ¤Gz1î~O郶ö}6|­µ‰øÖФv¾ð ¢T,y:ÉSL÷¸NzÍæõª?£|G¤f{Ýã¯×¥ÌdÓÈM†z„å±Çã×é=ü9Û dœxEûõ‘´ uà<Ûíרãj墶¬êë^³ayâH•÷±¯²Æò;ŸØéhs}w_b‘,Îî 7«õ³|¿Î‹Ý<¯2¿ëUc%ç9ž=Û0ZfXdˆú¡³±D{*¶¹Ë-©¬²ñКÌjðLÂ8a&³Üš÷ž¬Ð(c½½•±Jׄ•%Ç4vÎ"‰´Sf¢íKxõÕ*Ú÷‰´†¯ô£{Uï±ÕĬé`‰– ÷#¯(v‘WR~?7žH¬¶3$YÇ’¨Ú;XÂ뤣ÍF}þØú¯ðÄìó1ÅþÅU–·§¹öŠªïèÝΠT[á³X"½ G˜®Mú1Õ9¼Þ#=°v¢lþ[?ï³I:¼ó¬ïsÐÚÍ  ¯$ÆIã‡õ;Ç [[^Åʵu,ñ×ÚžAk{À÷˜Ö±Ä—ƒkçiöŒxñid2ŽÄ;æda­æ¼ùzŸK5sõ“®`^Ûy¦Ø|î#“Ø3ƒ¿ÔuÇ*Ô+#?ÔÈÇHUÞÚ_R&ãÓ©ÝŠ ÃÛžßUüaòX¿ƒ9‚g&Óš¡‚Æ!¿'±ç[dwÜ¿`Qcô—;ƒöÔ¸Ÿ:“÷H{ãäˆý»Óä#|V£”w³±™“ß—rtNu|8öTw u̘ÿ]˜El<çóy,²wÈÀ<°gÓ>YϣݞÁ¼¿Ù¨äP“¤ñÍfCF¶ ‘9åó‘³5ßôýíyEŸœ•\+fy¯rdµUµßK±¦ŽíÖ§FÏ/¿@Ò?;ýâc†­ú :Òô¨¬Ú^_2j %Z]ÓzÍËl/úµ'Uäºùk?Usm«qòâËrã· O‘]~Ñ\üÄ«äB%[ú}ÉŸäñW>±üÒ³¾d†¼*Íj7Ó m÷üRÑÏ[ûÉz«h\‹·?ÿÛtø ›79GœßwôÚœûà÷þ&ð‘NIÍ<ýÏð®ì¦ÁG+TÕmÕÂ]TÓzîˆVv¼ô\b°æ¶ÓïÁ«ü}¬¶X?ä׈}ê”RéK2ë3ÂØd÷+O/Œ|æªfWª§š>óxâõ½«zß0eEÉÓ|†st±cÙþXëçm”¾ûo7Rëóú˧Z-sñìÈìõ9K\¡’¤½{µÂ °§Væ±'Òˆ¿ö7CÛ>ßñ6§ÛÊ DK†Î2Gôˆ·SæL¥7¸J:^Ý=ì9·’wõÖ·{,œ%]9€y`5x6yùâŸæu¾«zåkø³Õ™× £J s/!º­‘Ä’z|l<ÑÏV»Ö[WÕe?i? u/U%i«1®è½ç¯ Û“ØŒÊøÆ3k]Gÿ4ví Ý¿ mÆH®÷žÜÚX ùN© · í–ºW¼´ÃÆ.¡¬hÏ©"Ëó;Ã*úß—lôíÝ€åIÎÕŸËǪžÏÖèxÖò_þÖV#’xZ‘M\^½ ôZe­ÄÕ™‡>MVjJþÔdÚÌð»û Ï{’¶_Ž[4‘oϺüú¨ÏÁC¨’T*#Ë—HË3òÈ·=ÐXS±×Ãˑ͞GLk=ÏwU«»Úa¡¶7ù´g®EÒ+è¡È#«¾òxÏr­uåý~„goÑç°dÈôçx.­â'‰E"»ë,{™þû¡]ä‹Ñe’úˆ¢û{¶&çø$bxª3†íYõÒN?³ßI9ÆÕV­ÙËf£cfØaí¨{ø"5:;+¶á i]¶ªÒÍÕôbž”:Te>‹F.ñêòúÚxqŒôã0VØ:ÑQóÑ ÕúÁîŽL_™¹†èÏC ìVª¹ôŠêO÷oë’V9X~:bV÷ÉŒªfôŠM<ófùê¬e–EÙ­}È÷Û:æ¼æÈ×-ß¹ÆßWªYÎØlü-Dá'˜Æš5 ]ÙIbõÛCÙ;–áÈ<_{ZóHÆQ°g¬æV‘õY‹SŒ%~¥Ïvjšß*–{çôоbÑõWäœåvçù܉u²]nQŽxTr³¢‹æÊ°!ÇmÉ·á÷‘Ýœ#˺²ò“cæ¶Š•4s:!·Y<Z ÏX?Ñ‘ÂrҞɸrFÿ;Ã×j¶žq†Ë<Ô1ë’æ9Fbûª¶{O™÷fs«››³}‰]W‹ ¼Ý0-êvÛèÕöù¼dYŽ{\­®Ç˜·êÉÄï;±õ<ÏfëD¿í έ¢i§rŽ¿:{òÝó½{}gÔu5È…Ÿñì)—T«s±'j,Ǫ^f‡¼|ÙO&´ÿx«äOåü^Ö‘äk×IóBÞ±unùÔ³¥—Y3¹è¯žËêÕ^u¾ŽfvbÂªÚæ"›¥0ž¶òòó¹$}Uœ<‹í9P—Ǹ®’æäé½ç¾¡yô3¥‡=]}=ûÏÊfä»ç®²²ÓžŽ3ÝœgErŽ#Þ*­W.‡YU×ÔÛµ’ÞÞûd\„ß±ÁêàeÑß<âJOüüÍ1åë¯A¬KÓc¸BïµÜ*2gIï¯Êò4›ë-ó±ÝwɵHË5„^!Œó¨p^÷x*è~¦"q};Ïvßçy‡Ëó°Â›±êaI„&ßÄ’ƒÃN~gÇcßìJ,šxÕ¬+_Ÿœ½ªg;,oÆŸõW"ï£+|¬•¿sn„!ÊõìÛuÏ‘;öd„´îÚ„¹ð7fŸüïºn>g©µ‡*ríX_Ï5ž©Z*C”³ìþ6Ù»L„¯+PEë9,Ñ{íxOsïm…î%ì> çôHÕ;ûí¶Zúp¬ððDîªÉeÙG¯ÞcõõÈv!_Q9ç;¯zH2<>ë}Y+hb±è¹™À)‹DÔ§XNgù¹Ê謒ZH»ìYZו粇)(ýy„Zñ8±‘’ ’ÏÛÄ5®s´¸ùÜð cuŒâ|•Û~ QýWg™íWpflE6G­ëPžšMØ ½¶S©cKŒ%^V¼-³‡ëTç1·û9„1úcëj¼v¬ñvò1]Ñ6ë°òíêŠlÆÕv<ÞÚ'’ßEyÄÆ{H"eï舫xçï?²‰Ùô[4êJ¬pò÷ÏÇžïÁ>qbÈÃ{âPÍ>äÈ:[cÏÊ,Þ`­_Öñ²‘ ’hÙk÷›Á!Ë®|?³eE«{Òˆ?÷‰ž‹9!ÏHfßÛþyf»{(Í«„Š<³9¶°Sû)¤»=æoýá¸îÑà£3mÕ³x–öw³¾æiñ®"z5:U*\}^ý<°ù¨ç8šx©ó·®‡'¿Ú¡ ‚X?ãÆ%Ž›^wìÛãÑ(«j{=+Ò5’9àG©†.lŽu•lˆyy¥óã‰ÜÑ÷Q¾<O4šè\e{^D_KIöô$‡ä•Ú—5ƒo¿F¼R3œÈVT°¤W¿†ÙÞ¹Ò©ÈõXó¹>Ç^Ìy[#ö,}V¦ézèm­ÇØiEHb‘h–TÏ´œÇ‹%ÞX¥Cípõ÷Û,óæ|DáŸxš¿Í隥6óe®³*{*žp+ì¬w³{%-o—îȽ¶‹Yfg‰Ú3OhôŽ=Å=™y·›úX€ç£(| ®Í5±|Y­h,|¢dø-Wé=ãy‘UêÎZ•Ñ—¿Ú2¶ߤNωk‡,>øŽ~ÏyÖµÀóœÍj=åþµ8ãæQ¶*²ší³§ïlt}Š|Ìû Ïëµût>x¢v¸FkÀm°ó¿C6Â~Ý ‡<ÕâÁWÈó-[ëkÈóWÖ2«y«C·æ=Þº&[ž„'Ö&¯/³ù$’`‘£ÇÀèû=²xì!ÚÏYj±¨hÅø³³CÇÿÚ_¯¶šÇ/G”ŽþR¯çá‰öÃMŽ+5$9Kj(€ûtåUðlâõ‰¾µ9Àüù°ãÝü”à»,š þþ£„Œ]YÓ'®çv(:7YŒì C’]uêa‚~Êö[Ûvêx?B¯ŒÑØß¶£Ëê ë_™al?êk5a‹•k+YZ!…÷5™ >¢0ly¢°îÃïP<ŒAžûýÒÇ]AjÝÍ3ix³yŒZ¼µ(3öF²úÚy|Q»ÊÖ*b€­\†(äo½â-_åžÔ¡XÜRÇV#â‰ÓýIŽ(ÙŠŽ–³íK,fíñâ÷‘„!¿·óëyõWÐ@#‰ü¨v÷S(ÎPvRØÓSòÊ8Eœ{44×ýŠwfðºÅ*®t(êØ€š!®àêY]ƒ,‚Ëç¼ ÏÐÇæn&Içס»ÛõŒ8"eó1j×*ˆãÏ šøÕåÝ˜Ž¶+•9QC D1‹ 5{ô>®;J»'¡g8²ð{¬æ¹Üå®×ó¾²&ù”Û»Ìiy¶ô¥Íy”÷Æì,×Ù"ÿbÜ%Ô1fOPš×7Il¹+aÞTò<‹ùi™Å±DçÓVŽé,|õ±$ïü*s«}‰Þm1Uߘ«E4¶Ì"‰×ÕüÍHÿ>MþÑò3Xb»ƒ™ºÖÈ`Oª¼¹ü4ÕÑ„XdŽ"rŽï4" HÉ6ÊìœÀÜÖµ=OØ/å6¡dŽˆ÷$Dî –ì”ìiÓác³çàb+óîv®×&¬QÞ‘`>c¦sY9ßhGeÕ{Œ¼î#Ž1OzØ#=»p/ëzjþ¹"a >Õ—xXÒå¯ýoQQç—ø,4‘ñª[Ÿ†z§®;¶ùô5Ìç}áú=œ±çæ 1¬îùÂòÓ£5.W$ë‘O ó¼Œv¾šëäG(Ò<’|Gâ˜é¿ßðêØ…%Õ:^ö™až‡¸†£IU¼µ}5ÏgaI¥?=Kâ¾Ä“«s_Æs%Òå×°Ä?Ó÷Z}œé1Ä»¿¿¨ö/6ðm­/‰¨oá>סŽ%ûìô»næê.DŽÔ£#wÞŸüž×hï04Ù•Ý•K\ÁÑC÷V#0㻨áïìÚËxÞ›j–ì³”sг×C©7ö´5e¾>#–uãWÎ3U,©eN±‚`ÿšŽ}¶ûÖì$Ì´NÎ ¿ ^ÝÝw¦}vr$‰î85~x u8<§3ñqZxëêžÃºf;µgsÞØhŒ“5l×c_Šø#«6F—ØSñ“–ï»?í³Ó¿­t«Ygªäô;qÑÄ­æ§|tþ×e!—¼[Éñãg öQݤ>/vu,ŸÌÎîžgÐg¤‹% 5f:œcýý#YÃ97{Ëâ*±Æ“ñGÌâ] ö2ؽŒÚÇ^g7Evö÷<‡öXé{k®/a<ç¢2SM×#nwÖ!Ìçq‡òŽ…R7”†Ù_ÄVÇZÎ jȽ™?s.Ϧ³m”‘èíòÎÅ*'v¯îèp5Šú>ù†ëfìžÏþZ§„(¥£­WÉ9¶‘BÖ´Ä06?G™×ºûžB{lŒ‘:Záócþ¯ÇD¯»ÿ=dzû›fð_îeˆÆþz·˜ÈKw,)¼*îâEæw>…vÝpü±¹¾äøÍÏ]¶›íóô¼ u±äðÁLW²ºß‹“äé! þ§µÒ«dö𠳺‚k»Ÿ@çØ§³`®/94›éØÇ^›w§§y”Ý+Ø)#0w×ahî¸×ëcø}Å"‹œ­Ï"A¶+Ûÿ ÚוðdÌî:Ý$FYžÇ˜Ý9fîSÿٯ˓÷Ì\бÏëd³wè6vDH±ObKWyÜvY§o®l¶ß—¿ÈÓŸ9Få¯Çµ£Ë5ÈÇŒn¿R“&+.’óÐúŒ˜e¼°«µ|X‡"+ºÒ§HKgQÀ“ÕãrÚc÷”>Cº’t¬-ß<ºmÆÛcße:ë«ÒØ ¢ÏÅrµ8!‡îŠX×q¬«TõþÛMcÏw¢=Ö1ï,ú}ɱÇÞU2n2o˜®wD“;«ëkÒðÌŸ©¹ÃÞO²½ýg±`A2›5ÿŠ”žÿîDûº|ÆÌ™;ÑXj1ñäŽØ÷ôù6e9]ëÈ;¤Ê*™áÊ:C~F°½Zªüõ«5ªä¼Úíß²>Ï®÷îB{l“eù1‹%‡v¨%Æ„EIê¢×ÞM²¬îîÈå!¯^5 ×õsÕ+[½k]GL‘–{ùÝ›öZæqãw ·cî–Qñb¤O0œûÛq§Èfy]“®=é‚«ð®Ëz ~¡Ôc?V¨_»:Ú»*¿"»ÇñÎ4gë=b´X¹ãpî6[<ù1滥ïQ­Ý·ÏŸ^¿¡ÇxGˆ˜ ‹û–§Œ9«ioÆâÓ\Õ×ö÷ùÞ—ÖìÂ>Ô÷ÓLÕJ~K°kñ2ŸI—;îÛ,ZŸÁÆcƒå*Gí#Ý·*ï;Ò.«*ç{”•þS¸ÿx¿>ŸOÜoǯK¹í 92ƒå¾Üc2Î^£±DÇFÞl,ªä}Їq^íGÚëÜÉ8YžF³Vá)_ÉðyV†­9uH:Çh¯C²Þ­³ß[m÷Îa0Ço¬1ݵ`=ʬn=Taol4Ӿߗ¬õ‡W§›ºÛ\µœuwlùŽ9_#OÏçžnß ª¯£>¤‡%ïŒãáYÎ×bÅà¥Ï*¹zÈ—j;Ïóê\kÒ“£u~Uü†;"N•½3g˜=ƒø¼.çäÉèzãTÕ1ëÏëòª|ž¬ä\e5jÈY9ʳ€F{dAº§ïh®?¸åó3ò¿ó Ô³x^t¤ìöÈTÕ½bçjÞ‰¢¾ZÏjDÀ56ÚÇ_ۯȽgdgï[àáBFV¯kçY†¯wñÊÖŒ¿Î’?çÁ±¥/לּu|˜uyåä²2<ñðÑŸë(ûÛ©0ü–Yá}Ž­zßZηJóçÜÕi¾O`¼ÎÃDÌÞŽVLÒU{©am}ç,¾õäháÇÑFQÿ•2‹ßÖFœ±½Î÷(ﺜ3¬¹f†ÍÒañ>~µù,ah¢Wi4±±ìÉ»bœeÿÞYŒ™¼Ž²~ó@ŒÐëc½ÓÞwFÄ¥¦µ¯Ü7ªK²3‘Ìûаj'ÏÊlKŸ#šØur‡ŽVï¦Ó×ò“TËÂ’Dó^5¬ËÅS"Þ…x¦o=#—íx­þ#{òÝœc>êûñNtX²»[ÎçúQW†,2c¬·ë¢‰´([¿sÞ~·¯Ìdg‹ÏEcƒägërüJþv ëM|-|\ˆÈG!rO íÛ}\ó¹n_"m™Öz £Õ±ó Ïì Ì¿^P•à½IÎq%p”àè¦×Ú7½Òöº/ñÑ"®û؆ÇhµÍÎ{ÓaÉn‹âÈÄ+ø.Ž"Lo‹cUÇÎ+G;‡êÊ.i¿®_ÄuŸSÜšcsöÿ㶆YçÁŸ3Úõ>éÎ([uÕ ›¡s°$“×Ëq™»:—½ÓŽa%Ôä^5ΨY„ÝÚ{þRŠ®_¿þ=~Þ;J²—Fod¾©`!C€ˆ_„g–Sî¿{ÐYXâñ›ÃŽ&^_â¡IßÖëÆ9>ík31OVKÕŸ¼ƒ”»=ÔC|Ñç‚î•dâ ¯ªc/ä46àNOfMƒûаë ÞÑhK4ào&£Ü“]_ý9ªvdjÇ]’/ïKºèlWŽZÕÝ {c©F´¨~ýªöuí’î`*ëp/:«/Ù‹%¶ >Þ+55¢,ß+r¯ç:nÌX¡ïŠè‘\;ÍSjWÓeËšED±¿ÝæcÊE>œ_nù=è°åSÉ,–xhÂeèQ»¿ÁkÇ9;QÙs•³=õ=$‘ÕRÕõÒùÇ{Ê1'‘‡×p½þcí:¤qÍ"Þ¬÷¢aË Ï ô`îÏcÅø¼jrõ®ÌÚëÇ7÷Xm݇;m7gñ¥Öri<Œ7ëft%Ë÷ùúÍw£EªýÌ3hØrŽU’«Ì)7–ù„hâï‰8ù{ÝËç©^]$aø÷%¶W`ÚV¬ÑR‡>¾V²Vc±crК3ñðDëÅå>„±;C‚=»t,"éc·×›°=œþe]1Êõšèå©´˜×¬­j{úŽÑÁ·f\mßüÎÄâ «Ùº×l—jRA;ûè>äeÁ^³g¤ô¶ýQÇ2,Ñüïá8khè[†&~íX™YfÙzòpcèa«”uÞlì/Vù>Y$« ÉsûmÏ™hR]aõAÏã¯åeÇ£=öl½v”‡¦‘–Ÿ3Ñ(’c Jó£ÂÇl]i,×OX³r¯¬S^ñ/t¥Wˆc+Z•sy­Ù“ǨªÁð¬3›ã^†rÞz9>²ãФý€ºËuþ~ô„ô{„¬£¬ÑZp¿¢.vö%:+xuö*¶²ß®°a¸ñ¸nžÍ’ýs¥Ú,±ã_}ú' ‡L‡{t#ÿÈÖ¦==|a5¥s:F’¸~:~³ÈíÆªCüÒÕmk5×-®x‹q?b½åó©hw'>8Þ÷qÎ%ëa~0ïsÔaöT,‘¨ÕµïÛäç"ŽV»V¯9¶h‰údòÑžk⯶šÔQ âíU¸ŸƒÕž$âûç¾4üp¼W‡,’M|Nùi§O¼{QT%r&óÌì78’Œúãzx:0‰µ5¶#ɪ?â]ácO=™’乜ix/²vUíÛé…Êi#u¿–S GöÛðz¼Ûª‰Î=ôÏ‚ØÝÜàÏ\Kö—i×Eê^'©«Æ ŽÏÿø<¸#a\ާïéå>õûÉs­ÙOÚÖOžzk4nŒyï¼õN_&ÑCyÌZ++ªTûžy²‚%h|óý$uÍ9?…¤5ãù36Z_Fžÿ›£s7’wßèaþ±¼µ~Е9ÆlÊ5 ?lÝÔ3GÇÏÎðqÔ«:ʘš'}Ò#h»©•¾¤¢ç½ˆ¡éw3ò5jÉvçÉ}Éú+:³Òv Þ¨ô²íKô.-1î7šy«teê¯î³³üâ5.Ÿ¼îƒý—! ¢áSÈf fæë<4§kœ÷Pæiq;ˆõ(Ü+²r<„ˆÎ\Ä»Þêiøàq±Öï~­Fþòƒ3ùe¬¯ðtŽ)ÒöN4ü€§›\Á,ÎÏœ3HêbµÒs¹ ÷$mÖ7óŠÜ¥3_îõëÁëì:”ŒÝ³ÅG­w|Ö×jӮ͹Õ{Œ‚ÏQ>EúÞ‹l¬þÞ0c{1›Õ¢¶Nç²Ö‘¯{FÄ;¼u%£ Y˜dOw;êÕÏ ?“P–ä“G’ú[!‘î‰ïNºúØ9ÆdìÑïž ™{v®îQ5ÆÿYQ„'ýÈM9^Eˆê;­ñüñ´ŒÆóÊ«œ`VÊ^b=jSÃËõYYzØõ÷|ŒñžÄžx9Œ9σ5É^lЂç‘í»˜÷GDùÇ; ޗøx‚záß¹º=42u®²9‹ÙŽXÖÐ5²æn„݇wVýýÖ댊²J²¾Agº§åXáEHŸsÏ#é{ݕؚõ±ÀrÈ‘«IŸ :6¨ ³ƒçŽ´&®ÅØG+ÄmÖÏ:Ϙ¾¹ù|G~bçó)?ïÐÇš¿'YÎò•r•§gF‰ûÖZÍОŸ:Îrm ÓÚ>YÍê5˜û§Kèÿ´B?r­3$ôO»ë>ô8C¹Ï$ë=O²õ¢aÏRËÿYq±$íµÑë0ßå(ï<ìN¾«AëåÅ;ÊÏÏv$ý}IüÑX®ï­;“ß“ Vëq­g¼Øy¹•ÅÇþŸ\—´/™d<þÞJèŽ|·ÅÄ-Ooù¦u­Pî“7»}šÛuìD>…8ŠÈŸ˜©QÖ+4ÿùØÙýgzæš$ýa=À"Åχ¼ a¨#ëO…8"lN[E?óÇ\> +¢~ÃÛïÏûZ=IðTúaçÎxÓ£c¿‡"r†ùYrò‰ÍŸí›«Rä…cÄFT>ù'€×ày ÷±8*x^ÅuW‹sœ!Y.YŒÄõƼ¹®ü'Ña‘w‚ Ûùùe­AžÚ›ìLÈcô9/]‰âlô¢5æê¸áE“y^Ÿ‘öL[¬±ZŒý³¦² wø˜Ás5’ùñÞ”ç›Í§±½my2ôñ|ËãäEä)®ê>BT¢o«Ib‡ÿìÛà!Gû*¤OÊ|m ,¶ú™H¢­byTϲ8Oõ¨ökžU<"¿GÜÛrg´íHõÁê“ÙÑÅ“–Ä~«zyƒ2¤Ç´÷øºŠ\Ï2įzÜïBÒ.‹8z¼£_5Ç(O1Jshò Ï\“¤õÌŽË·ÁG¾x£e#·Ø’~|;Yñ÷G±æÇ›”ïiâeºôÖñû4vù'×X+ÿ¢½³Rò¶'\„$~¼~‘X|˜·#×'1Ç ÝaðºÀHXDÊÑÄãïɳcò%Ò"Æ_Íÿy„>8ÆŽ§8çŽQoÖv ­}Ï{ñþEb݆õEÜð8z±óNX-†–gO'ºõ é·±›•1šHêq¿IÏï*üÍGX,WùY«evϘÏùæjÄ:œÏp?FË‹G@VÓäà‘E­ÙNŽôH{ÄŽ×8 /ÿä|rÖ1d`3ÌC¸ÊçTñºŽýMâÞÄ5º²óî#êG*udO«óXÅ5®EÖJ›§hwtRF{¬/õégg±ÌÁZ¾¡‡Ÿ<Ÿuâóß>é•«‡ñè ŽáU‰âÜ©¢˜j,óÀ·_Æ?תJ=+y>Ê'ŽÈœãsiØgÏ>< µ¯äž½vDF`Há1üD¤3õodü•뎿¬º{#Q<xÅImt¤ukqõr¡B,פöZ‡È:¹ŸZák ϥჿ·ì¼ò2¾ã3ðÅ’AÒ_rWy(G”ÇŒÇãƒçƒ>™x4?#L[ÏL­Ý‰85|Êv¯fÃõiøFf©‡"˜?ì|ó8ÙQ¼äø/’¬Lô+b‹í°Sˆ#£Ïmô½WYɈK=¢<ꤻ/gyós“#ò!Okôd’>:~1s¥W¢lô½¸„y'Ÿmü~›´ø){ß‘¿2*QY­ñõ•ˆry]â|ì‰Æ×ê<µsv·Ž^/}ût:ìôð‚{×±µ§)ú7Š’\ûË„Y9þÊz.B‰Œ‡­¨˜t…æ«sK;ü<†íœž‘ž5ŒÖ»0~O'i«‡±ö¼êô$WîyÁß&õrÑ#Àdüe§®ò"¤sCj³Íl‡Šx|ıë¼ÕçÂâõlöz }dz’õ%ÜÛ–7øç›ì9‡™gQdÌY4Ásϋ﯒´äïx?ÖàzŒæüXk},%êºÉû“Œr[‘÷<ù»3tôæm DhÂuY͈{‘ïS–ŸÇ/?uþWDóÿ=ïK²ù‡§«\'Wèõú9F{`¬g©jí!uíã4øq¬öeþ*’ü#íÖ›ØójüeÅ@"¾ýjþ¨n=‹{“k9o¿C©t>åúk¤ÜÓ“X.•ÞÁŸïô$Ü–J4ŸDÜ‹¶9V_vŽÙÓ‘Äz]êq®­W¦Žý #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *fileout, *fname, *fullname; l_int32 depth, width, background, i, index, nfiles, n; l_float32 scale; SARRAY *safiles; PIX *pix, *pixt, *pixd; PIXA *pixa; static char mainName[] = "maketile"; if (argc != 7) return ERROR_INT( "Syntax: maketile dirin depth scale width background fileout", mainName, 1); dirin = argv[1]; depth = atoi(argv[2]); scale = atof(argv[3]); width = atoi(argv[4]); background = atoi(argv[5]); fileout = argv[6]; /* capture the filenames in the input directory; ignore directories */ if ((safiles = getFilenamesInDirectory(dirin)) == NULL) return ERROR_INT("safiles not made", mainName, 1); /* capture images with the requisite depth */ nfiles = sarrayGetCount(safiles); pixa = pixaCreate(nfiles); for (i = 0, index = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, 0); fullname = genPathname(dirin, fname); pix = pixRead(fullname); lept_free(fullname); if (!pix) continue; if (pixGetDepth(pix) != depth) { pixDestroy(&pix); continue; } if (pixGetHeight(pix) > 5000) { fprintf(stderr, "%s too tall\n", fname); continue; } pixt = pixScale(pix, scale, scale); pixaAddPix(pixa, pixt, L_INSERT); pixDestroy(&pix); /* fprintf(stderr, "%d..", i); */ } fprintf(stderr, "\n"); /* tile them */ pixd = pixaDisplayTiled(pixa, width, background, 15); if (depth < 8) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); sarrayDestroy(&safiles); return 0; } leptonica-1.70/prog/colormask_reg.c0000644000175000017500000001412312240303335015443 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colormask_reg.c * * This tests the ability to identify regions in HSV color space * by analyzing the HS histogram and building masks that cover * peaks in HS. */ #include #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, x, y, rval, gval, bval; l_uint32 pixel; l_float32 frval, fgval, fbval; NUMA *nahue, *nasat, *napk; PIX *pixs, *pixhsv, *pixh, *pixg, *pixf, *pixd; PIX *pixr, *pixt1, *pixt2, *pixt3; PIXA *pixa, *pixapk; PTA *ptapk; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Make a graded frame color */ pixs = pixCreate(650, 900, 32); for (i = 0; i < 900; i++) { rval = 40 + i / 30; for (j = 0; j < 650; j++) { gval = 255 - j / 30; bval = 70 + j / 30; composeRGBPixel(rval, gval, bval, &pixel); pixSetPixel(pixs, j, i, pixel); } } /* Place an image inside the frame and convert to HSV */ pixt1 = pixRead("1555-3.jpg"); pixt2 = pixScale(pixt1, 0.5, 0.5); pixRasterop(pixs, 100, 100, 2000, 2000, PIX_SRC, pixt2, 0, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDisplayWithTitle(pixs, 400, 0, "Input image", rp->display); pixa = pixaCreate(0); pixhsv = pixConvertRGBToHSV(NULL, pixs); /* Work in the HS projection of HSV */ pixh = pixMakeHistoHS(pixhsv, 5, &nahue, &nasat); pixg = pixMaxDynamicRange(pixh, L_LOG_SCALE); pixf = pixConvertGrayToFalseColor(pixg, 1.0); regTestWritePixAndCheck(rp, pixf, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixf, 100, 0, "False color HS histo", rp->display); pixaAddPix(pixa, pixs, L_COPY); pixaAddPix(pixa, pixhsv, L_INSERT); pixaAddPix(pixa, pixg, L_INSERT); pixaAddPix(pixa, pixf, L_INSERT); gplotSimple1(nahue, GPLOT_PNG, "/tmp/junkhue", "Histogram of hue values"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pixt3 = pixRead("/tmp/junkhue.png"); regTestWritePixAndCheck(rp, pixt3, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixt3, 100, 300, "Histo of hue", rp->display); pixaAddPix(pixa, pixt3, L_INSERT); gplotSimple1(nasat, GPLOT_PNG, "/tmp/junksat", "Histogram of saturation values"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pixt3 = pixRead("/tmp/junksat.png"); regTestWritePixAndCheck(rp, pixt3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixt3, 100, 800, "Histo of saturation", rp->display); pixaAddPix(pixa, pixt3, L_INSERT); pixd = pixaDisplayTiledAndScaled(pixa, 32, 270, 7, 0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixd, 0, 400, "Hue and Saturation Mosaic", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); numaDestroy(&nahue); numaDestroy(&nasat); /* Find all the peaks */ pixFindHistoPeaksHSV(pixh, L_HS_HISTO, 20, 20, 6, 2.0, &ptapk, &napk, &pixapk); numaWriteStream(stderr, napk); ptaWriteStream(stderr, ptapk, 1); pixd = pixaDisplayTiledInRows(pixapk, 32, 1400, 1.0, 0, 30, 2); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixd, 0, 550, "Peaks in HS", rp->display); pixDestroy(&pixh); pixDestroy(&pixd); pixaDestroy(&pixapk); /* Make masks for each of the peaks */ pixa = pixaCreate(0); pixr = pixScaleBySampling(pixs, 0.4, 0.4); for (i = 0; i < 6; i++) { ptaGetIPt(ptapk, i, &x, &y); pixt1 = pixMakeRangeMaskHS(pixr, y, 20, x, 20, L_INCLUDE_REGION); pixaAddPix(pixa, pixt1, L_INSERT); pixGetAverageMaskedRGB(pixr, pixt1, 0, 0, 1, L_MEAN_ABSVAL, &frval, &fgval, &fbval); composeRGBPixel((l_int32)frval, (l_int32)fgval, (l_int32)fbval, &pixel); pixt2 = pixCreateTemplate(pixr); pixSetAll(pixt2); pixPaintThroughMask(pixt2, pixt1, 0, 0, pixel); pixaAddPix(pixa, pixt2, L_INSERT); pixt3 = pixCreateTemplate(pixr); pixSetAllArbitrary(pixt3, pixel); pixaAddPix(pixa, pixt3, L_INSERT); } pixd = pixaDisplayTiledAndScaled(pixa, 32, 225, 3, 0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixd, 600, 0, "Masks over peaks", rp->display); pixDestroy(&pixs); pixDestroy(&pixr); pixDestroy(&pixd); pixaDestroy(&pixa); ptaDestroy(&ptapk); numaDestroy(&napk); return regTestCleanup(rp); } leptonica-1.70/prog/weasel4.16g.png0000444000175000017500000000276410400443670015127 0ustar dandan‰PNG  IHDRRI\lð0PLTE"""333DDDUUUfffwwwˆˆˆ™™™ªªª»»»ÌÌÌÝÝÝîîîÿÿÿ{ pHYsb&2jIDATxœ–[L\EÇç,—ÞbrØåVê.´Pž„.¶òT¶…íª R±%M‹,ÆPÛºo«6l r±œ©>h/¡;'µ5ñÁîYÊ‹ÖÈ.í³Y.áµr8QcÆ=ã̹ÌØ­éŸåéüòÿ.óÍ—øyžŸœlú_57±É×Ô5uiÑú©ê¢©”£0#³µJ)„I&èxÙ&טԵ%uÑpMýTÔ•J%J’xÎg“„µc‡šò¢û&Â3¹H*ò\V”[^ºÂw´Ü¤‘æW'(ù½¸÷Â{›ŸIž ô(Jw„°àYäõL–A)_ùn7'79¤ºÄI4C,ÞaÜ=¡ä»ÂÈVeÆÆ´µ4JÌ/&S?6@)TY@,'^TÂw¬Ú[”öÉꪢ Ï!¢¯Í¡ÛÍš{€ëC@µ);Ϻž‰£iê!õú„CU“Y“Ý%â¹Jnow‘oÏ}hD*“DæÙã×–Ïo°4ÍX{…;øI N•ÞˆÉMòœ:Ír 2kEðæËøÞ®0kçßYž4&¨$˜Õñ§q[_ø |è=Eû9ÃGŸÞ-içðÊ(®èu¿DŸ9±¡€pj]çOsQ.øq¾w÷×ñ@K_]Nûfן&÷úmÎùþ Ú¯J¼àœQNÉöKgr<×iÉ&1ÖÈûËÖ6ÈêÄÑKjkUiIEND®B`‚leptonica-1.70/prog/fpixcontours.c0000644000175000017500000000467412242266364015405 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fpixcontours.c * * Generates and displays an fpix as a set of contours * * Syntax: fpixcontours filein [ncontours] * Default for ncontours is 40. */ #include #include "allheaders.h" static const char *fileout = "/tmp/fpixcontours.png"; int main(int argc, char **argv) { char *filein; l_int32 ncontours; FPIX *fpix; PIX *pix; static char mainName[] = "fpixcontours"; if (argc != 2 && argc != 3) { fprintf(stderr, "Syntax: fpixcontours filein [ncontours]\n"); return 1; } filein = argv[1]; if (argc == 2) ncontours = 40; else /* argc == 3 */ ncontours = atoi(argv[2]); if ((fpix = fpixRead(filein)) == NULL) return ERROR_INT(mainName, "fpix not read", 1); pix = fpixAutoRenderContours(fpix, ncontours); pixWrite(fileout, pix, IFF_PNG); pixDisplay(pix, 100, 100); pixDestroy(&pix); fpixDestroy(&fpix); return 0; } leptonica-1.70/prog/affine_reg.c0000644000175000017500000003147212240303544014711 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * affine_reg.c * */ #include "allheaders.h" static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); l_int32 RenderHashedBoxa(PIX *pixt, BOXA *boxa, l_int32 i); /* Sample values. * 1-3: invertability tests * 4: comparison between sampling and sequential * 5: test with large distortion */ static const l_int32 x1[] = { 300, 300, 300, 95, 32}; static const l_int32 y1[] = {1200, 1200, 1250, 2821, 934}; static const l_int32 x2[] = {1200, 1200, 1125, 1432, 487}; static const l_int32 y2[] = {1100, 1100, 1100, 2682, 934}; static const l_int32 x3[] = { 200, 200, 200, 232, 32}; static const l_int32 y3[] = { 200, 200, 200, 657, 67}; static const l_int32 xp1[] = { 500, 300, 350, 117, 32}; static const l_int32 yp1[] = {1700, 1400, 1400, 2629, 934}; static const l_int32 xp2[] = {850, 1400, 1400, 1464, 487}; static const l_int32 yp2[] = {850, 1500, 1500, 2432, 804}; static const l_int32 xp3[] = { 450, 200, 400, 183, 61}; static const l_int32 yp3[] = { 300, 300, 400, 490, 83}; static const l_int32 SHIFTX = 44; static const l_int32 SHIFTY = 39; static const l_float32 SCALEX = 0.83; static const l_float32 SCALEY = 0.78; static const l_float32 ROTATION = 0.11; /* radian */ #define ADDED_BORDER_PIXELS 1000 #define ALL 1 int main(int argc, char **argv) { char bufname[256]; l_int32 i, w, h; l_float32 *mat1, *mat2, *mat3, *mat1i, *mat2i, *mat3i, *matdinv; l_float32 matd[9], matdi[9]; BOXA *boxa, *boxa2; PIX *pix, *pixs, *pixb, *pixg, *pixc, *pixcs; PIX *pixd, *pixt1, *pixt2, *pixt3; PIXA *pixa; PTA *ptas, *ptad; static char mainName[] = "affine_reg"; if (argc != 1) return ERROR_INT(" Syntax: affine_reg", mainName, 1); if ((pixs = pixRead("feyn.tif")) == NULL) return ERROR_INT("pixs not made", mainName, 1); #if 1 /* Test invertability of sequential. */ pixa = pixaCreate(0); for (i = 0; i < 3; i++) { pixb = pixAddBorder(pixs, ADDED_BORDER_PIXELS, 0); MakePtas(i, &ptas, &ptad); pixt1 = pixAffineSequential(pixb, ptad, ptas, 0, 0); pixSaveTiled(pixt1, pixa, 0.3333, 1, 20, 8); pixt2 = pixAffineSequential(pixt1, ptas, ptad, 0, 0); pixSaveTiled(pixt2, pixa, 0.3333, 0, 20, 0); pixd = pixRemoveBorder(pixt2, ADDED_BORDER_PIXELS); pixXor(pixd, pixd, pixs); pixSaveTiled(pixd, pixa, 0.3333, 0, 20, 0); sprintf(bufname, "/tmp/seq%d.png", i); pixWrite(bufname, pixd, IFF_PNG); pixDestroy(&pixb); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pixt1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/affine1.png", pixt1, IFF_PNG); pixDisplay(pixt1, 100, 100); pixDestroy(&pixt1); pixaDestroy(&pixa); #endif #if ALL /* Test invertability of sampling */ pixa = pixaCreate(0); for (i = 0; i < 3; i++) { pixb = pixAddBorder(pixs, ADDED_BORDER_PIXELS, 0); MakePtas(i, &ptas, &ptad); pixt1 = pixAffineSampledPta(pixb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, 0.3333, 1, 20, 8); pixt2 = pixAffineSampledPta(pixt1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, 0.3333, 0, 20, 0); pixd = pixRemoveBorder(pixt2, ADDED_BORDER_PIXELS); pixXor(pixd, pixd, pixs); pixSaveTiled(pixd, pixa, 0.3333, 0, 20, 0); if (i == 0) pixWrite("/tmp/samp.png", pixt1, IFF_PNG); pixDestroy(&pixb); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pixt1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/affine2.png", pixt1, IFF_PNG); pixDisplay(pixt1, 100, 300); pixDestroy(&pixt1); pixaDestroy(&pixa); #endif #if ALL /* Test invertability of interpolation on grayscale */ pixa = pixaCreate(0); pixg = pixScaleToGray3(pixs); for (i = 0; i < 3; i++) { pixb = pixAddBorder(pixg, ADDED_BORDER_PIXELS / 3, 255); MakePtas(i, &ptas, &ptad); pixt1 = pixAffinePta(pixb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixAffinePta(pixt1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixd = pixRemoveBorder(pixt2, ADDED_BORDER_PIXELS / 3); pixXor(pixd, pixd, pixg); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); if (i == 0) pixWrite("/tmp/interp.png", pixt1, IFF_PNG); pixDestroy(&pixb); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pixt1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/affine3.png", pixt1, IFF_PNG); pixDisplay(pixt1, 100, 500); pixDestroy(&pixt1); pixaDestroy(&pixa); pixDestroy(&pixg); #endif #if ALL /* Test invertability of interpolation on color */ pixa = pixaCreate(0); pixc = pixRead("test24.jpg"); pixcs = pixScale(pixc, 0.3, 0.3); for (i = 0; i < 3; i++) { pixb = pixAddBorder(pixcs, ADDED_BORDER_PIXELS / 4, 0xffffff00); MakePtas(i, &ptas, &ptad); pixt1 = pixAffinePta(pixb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 32); pixt2 = pixAffinePta(pixt1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixd = pixRemoveBorder(pixt2, ADDED_BORDER_PIXELS / 4); pixXor(pixd, pixd, pixcs); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixDestroy(&pixb); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pixt1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/affine4.png", pixt1, IFF_PNG); pixDisplay(pixt1, 100, 500); pixDestroy(&pixt1); pixaDestroy(&pixa); pixDestroy(&pixc); pixDestroy(&pixcs); #endif #if ALL /* Comparison between sequential and sampling */ MakePtas(3, &ptas, &ptad); pixa = pixaCreate(0); /* Use sequential transforms */ pixt1 = pixAffineSequential(pixs, ptas, ptad, ADDED_BORDER_PIXELS, ADDED_BORDER_PIXELS); pixSaveTiled(pixt1, pixa, 0.5, 0, 20, 8); /* Use sampled transform */ pixt2 = pixAffineSampledPta(pixs, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, 0.5, 0, 20, 8); /* Compare the results */ pixXor(pixt2, pixt2, pixt1); pixSaveTiled(pixt2, pixa, 0.5, 0, 20, 8); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/affine5.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 700); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); pixaDestroy(&pixa); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif #if ALL /* Get timings and test with large distortion */ MakePtas(4, &ptas, &ptad); pixa = pixaCreate(0); pixg = pixScaleToGray3(pixs); startTimer(); pixt1 = pixAffineSequential(pixg, ptas, ptad, 0, 0); fprintf(stderr, " Time for pixAffineSequentialPta(): %6.2f sec\n", stopTimer()); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); startTimer(); pixt2 = pixAffineSampledPta(pixg, ptas, ptad, L_BRING_IN_WHITE); fprintf(stderr, " Time for pixAffineSampledPta(): %6.2f sec\n", stopTimer()); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); startTimer(); pixt3 = pixAffinePta(pixg, ptas, ptad, L_BRING_IN_WHITE); fprintf(stderr, " Time for pixAffinePta(): %6.2f sec\n", stopTimer()); pixSaveTiled(pixt3, pixa, 1.0, 0, 20, 8); pixXor(pixt1, pixt1, pixt2); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixXor(pixt2, pixt2, pixt3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/affine6.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 900); pixDestroy(&pixd); pixDestroy(&pixg); pixaDestroy(&pixa); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif pixDestroy(&pixs); #if ALL /* Set up pix and boxa */ pixa = pixaCreate(0); pix = pixRead("lucasta.1.300.tif"); pixTranslate(pix, pix, 70, 0, L_BRING_IN_WHITE); pixt1 = pixCloseBrick(NULL, pix, 14, 5); pixOpenBrick(pixt1, pixt1, 1, 2); boxa = pixConnComp(pixt1, NULL, 8); pixs = pixConvertTo32(pix); pixGetDimensions(pixs, &w, &h, NULL); pixc = pixCopy(NULL, pixs); RenderHashedBoxa(pixc, boxa, 113); pixSaveTiled(pixc, pixa, 0.5, 1, 30, 32); pixDestroy(&pix); pixDestroy(&pixc); pixDestroy(&pixt1); /* Set up an affine transform in matd, and apply it to boxa */ mat1 = createMatrix2dTranslate(SHIFTX, SHIFTY); mat2 = createMatrix2dScale(SCALEX, SCALEY); mat3 = createMatrix2dRotate(w / 2, h / 2, ROTATION); l_productMat3(mat3, mat2, mat1, matd, 3); boxa2 = boxaAffineTransform(boxa, matd); /* Set up the inverse transform in matdi */ mat1i = createMatrix2dTranslate(-SHIFTX, -SHIFTY); mat2i = createMatrix2dScale(1.0/ SCALEX, 1.0 / SCALEY); mat3i = createMatrix2dRotate(w / 2, h / 2, -ROTATION); l_productMat3(mat1i, mat2i, mat3i, matdi, 3); /* Invert the original affine transform in matdinv */ affineInvertXform(matd, &matdinv); fprintf(stderr, "Affine transform, applied to boxa\n"); for (i = 0; i < 9; i++) { if (i && (i % 3 == 0)) fprintf(stderr, "\n"); fprintf(stderr, " %7.3f ", matd[i]); } fprintf(stderr, "\nInverse transform, made by composing inverse parts"); for (i = 0; i < 9; i++) { if (i % 3 == 0) fprintf(stderr, "\n"); fprintf(stderr, " %7.3f ", matdi[i]); } fprintf(stderr, "\nInverse transform, made by inverting the affine xform"); for (i = 0; i < 6; i++) { if (i % 3 == 0) fprintf(stderr, "\n"); fprintf(stderr, " %7.3f ", matdinv[i]); } fprintf(stderr, "\n"); /* Apply the inverted affine transform pixs */ pixd = pixAffine(pixs, matdinv, L_BRING_IN_WHITE); RenderHashedBoxa(pixd, boxa2, 513); pixSaveTiled(pixd, pixa, 0.5, 0, 30, 32); pixDestroy(&pixd); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/affine7.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 900); pixDestroy(&pixd); pixDestroy(&pixs); pixaDestroy(&pixa); boxaDestroy(&boxa); boxaDestroy(&boxa2); lept_free(mat1); lept_free(mat2); lept_free(mat3); lept_free(mat1i); lept_free(mat2i); lept_free(mat3i); #endif return 0; } static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad) { *pptas = ptaCreate(3); ptaAddPt(*pptas, x1[i], y1[i]); ptaAddPt(*pptas, x2[i], y2[i]); ptaAddPt(*pptas, x3[i], y3[i]); *pptad = ptaCreate(3); ptaAddPt(*pptad, xp1[i], yp1[i]); ptaAddPt(*pptad, xp2[i], yp2[i]); ptaAddPt(*pptad, xp3[i], yp3[i]); return; } l_int32 RenderHashedBoxa(PIX *pixt, BOXA *boxa, l_int32 i) { l_int32 j, n, rval, gval, bval; BOX *box; n = boxaGetCount(boxa); rval = (1413 * i) % 256; gval = (4917 * i) % 256; bval = (7341 * i) % 256; for (j = 0; j < n; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixRenderHashBoxArb(pixt, box, 10, 3, i % 4, 1, rval, gval, bval); boxDestroy(&box); } return 0; } leptonica-1.70/prog/blendcmaptest.c0000640000175000017500000000636112270122643015446 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * blendcmaptest.c * */ #include "allheaders.h" #define NX 4 #define NY 5 #define FADE_FRACTION 0.75 int main(int argc, char **argv) { l_int32 i, j, sindex, wb, hb, ws, hs, delx, dely, x, y, y0; PIX *pixs, *pixb, *pixt0, *pixt1; PIXCMAP *cmap; pixs = pixRead("rabi.png"); pixb = pixRead("weasel4.11c.png"); pixDisplayWrite(NULL, -1); /* Fade the blender */ pixcmapShiftIntensity(pixGetColormap(pixb), FADE_FRACTION); /* Downscale the input */ wb = pixGetWidth(pixb); hb = pixGetHeight(pixb); pixt0 = pixScaleToGray4(pixs); /* Threshold to 5 levels, 4 bpp */ ws = pixGetWidth(pixt0); hs = pixGetHeight(pixt0); pixt1 = pixThresholdTo4bpp(pixt0, 5, 1); pixDisplayWriteFormat(pixt1, 1, IFF_PNG); pixDisplayWrite(pixb, 1); cmap = pixGetColormap(pixt1); pixcmapWriteStream(stderr, cmap); /* Overwrite the white pixels (at sindex in pixt1) */ pixcmapGetIndex(cmap, 255, 255, 255, &sindex); delx = ws / NX; dely = hs / NY; for (i = 0; i < NY; i++) { y = 20 + i * dely; if (y >= hs + hb) continue; for (j = 0; j < NX; j++) { x = 30 + j * delx; y0 = y; if (j & 1) { y0 = y + dely / 2; if (y0 >= hs + hb) continue; } if (x >= ws + wb) continue; pixBlendCmap(pixt1, pixb, x, y0, sindex); } } pixDisplayWriteFormat(pixt1, 1, IFF_PNG); cmap = pixGetColormap(pixt1); pixcmapWriteStream(stderr, cmap); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pixs); pixDestroy(&pixb); pixDestroy(&pixt0); pixDestroy(&pixt1); return 0; } leptonica-1.70/prog/rasterop_reg.c0000644000175000017500000000653512240302522015315 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rasterop_reg.c * * This is a fairly rigorous test of rasterop. * It demonstrates both that the results are correct * with many different rop configurations, and, * if done under valgrind, that no memory violations occur. * * Use it on images with a significant amount of FG * that extends to the edges. */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w, h, same, width, height, cx, cy; l_uint32 val; PIX *pixs, *pixse, *pixd1, *pixd2; SEL *sel; static char mainName[] = "rasterop_reg"; if (argc != 1) return ERROR_INT(" Syntax: rasterop_reg", mainName, 1); pixs = pixRead("feyn.tif"); for (width = 1; width <= 25; width += 3) { for (height = 1; height <= 25; height += 4) { cx = width / 2; cy = height / 2; /* Dilate using an actual sel */ sel = selCreateBrick(height, width, cy, cx, SEL_HIT); pixd1 = pixDilate(NULL, pixs, sel); /* Dilate using a pix as a sel */ pixse = pixCreate(width, height, 1); pixSetAll(pixse); pixd2 = pixCopy(NULL, pixs); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); if (val) pixRasterop(pixd2, j - cx, i - cy, width, height, PIX_SRC | PIX_DST, pixse, 0, 0); } } pixEqual(pixd1, pixd2, &same); if (same == 1) fprintf(stderr, "Correct for (%d,%d)\n", width, height); else { fprintf(stderr, "Error: results are different!\n"); fprintf(stderr, "SE: width = %d, height = %d\n", width, height); pixWrite("/tmp/junkout1", pixd1, IFF_PNG); pixWrite("/tmp/junkout2", pixd2, IFF_PNG); return 1; } pixDestroy(&pixse); pixDestroy(&pixd1); pixDestroy(&pixd2); selDestroy(&sel); } } pixDestroy(&pixs); return 0; } leptonica-1.70/prog/lion-page.00013.png0000444000175000017500000003667611330622140015507 0ustar dandan‰PNG  IHDRÌp3å¡'PLTE***UUUªªªÔÔÔÿÿÿa¼ pHYsb&2 IDATxœí]‰bä*4‡üÿŸ<¨$>úHì\ÕîË$Ý>)JbYn°üôîCéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™?¢¯¹néA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:ÂKæå¼ÿQx#“jýÀÞä‹T_dRYÒ²¤úÖÁµ¤† ó"&A÷oïÑè!ª9•7®ÜxÏ5-ùîgøAü™%-lü#ó/9nï`¶¦„;¼6Nj÷mw,9,óÓ ’Ñ楙ON?–öYãvɹ6V×väiÍís6k»W?øâͶw¦ŠÿÝyÍ·ñ½dRnÆÈÙ¸Z åÒØÌ‰Jó[jû#/°×ø0‡[Øž\‚(•Oßàü¦T*¿‰ÔJ}‰[oñ¾—ÌšZ“šJa³lïÎ?J#w-NªkYk£­4ê{^Ì#Ð3׆Þt‘Þº5…­]i•si/ÖZšÄžØ7yßÜÌæöÊíµ3e*­.%3Ë<•Æjk£ß 4¿ãÇ<¥Ç®M¾Å.©Š?ÜÚšÖõ¶gmïPZEm7=ì`}³q~3™­umüe®·Í2ä¶C6K6Ñ• £µZYýtkUu›t—„¤=<÷‘ír¥}Òž¿u üàí¡[óS™ÖËwú¾Û›me¹Caž¸¥mu¸UææÁ,Û&´²#Ĭfö|?g ´¦EÎkå»r; W¡’>ÿøìtóØGì±ñÇ$¶ÏÚÅÛƒg¶ÌÒ¼ýƲõ¡÷öÍ/ðíCæ°ÑÕz™Æ%q{Ôþ®ÒRµºM°NéBa­…ý”!«vc…¯‚‹ÔüysAÿȽafòÄM#%“[ØÊ¶ˆ÷c®ýãœÌæpOÃ>[&7JÍV¸gØ&s˜¹ç¬Òô6c&4Ëç³O0â$nr›ÕË|ϧÙf‘­áom'·ë*ÿ‡û\™ÌÌ.P%_ekµ—hÿ~k;ûíd²QÊËf‹°âýÛïí£Æ"¹V) ¦¿·Ã¸Å-ïO¦òaìcJif°¶+´›}ê©Q›— 7 OVÕ8‰+`kbÛwlœÄ¾z«ª­knfü­†ù3@<>iŽOëO¤å֖ͳy Í=bƒ´ÿÕU| .BžqxoÚ E&ëd÷$nsŸŽ?F÷2º;í8é0V ÆëÆèn¡ÝàÅî³u~ mÅàTÔI<ׯ½ï9¹b•R :ñ¿ò”»XŠäKb¥ñ«ÈT—bL$põ?)§ÉÜì¸ 4O•G Ü…æÍì¨L$°µ’­[UX™Y­~ÿA7nÏúêð«Èĸ“ ]Z(Jxjµœév&ˆ'“ ö“UŒ>{Û¿/}2¶,lM/ª6õ ¯ªÔWõÑ .¦ØQs0kü+ZXàW‘)¨"9(ƒEqvÍkM+$DÏzie™àº˜õ$sꋆG¦¡ì×ã9Öãì*·ú23¹§dõÃOLÁ>Ä/$sáû~öMb)SG:¼!’ô$-­¸À,²#«UÊP¸rõXml?:e¬`¯ê=øÔ6¡.Î4|3,ØL`Vð«‹âCø}dš UÞÑ›-2ï±&/[p±²æ„]]3áå¨>(QAr#xU'›­#I‚C0k_Ç-±î ïÇÆ¹r{nˆç“ õ§ýÂy¿ÌZɘå¸d!„Ù?^®`²«"Ðɲ0¡5m´ÚšYéÿZŒ«„€E*O¡Ç¬ÕL79r`)í'§`â“9ÔÕL¦/¦çÆl™ü˜°eKd©zv…CKÚˆu—jÔ›z¤SuÁý‘¥·àoÙá;Áª$Ë”ê9n™@¶çŒîV–˜U§ÚZ^G˜ ˜št‚aÕp.Ô‰Éß’º„ÉÝ+j_Ž?F& ýÜŠqh3K™kÕBÆ´‘hæ¨KžåÕYÂá¨Ôy_qVaѹ¨2Pf|4ø7óüE2WÈê°d›¢af»bp˜º!º¬È¹µØE`–zQž×-:ÖÅÌ뇒]üüI2Õ…5²L|у ù®1 9_ae9,•{UâIwYüÂeF;*?Ǹöø›†oá’ {ñ ~ëℬ:‚JÒr¯™Ä)ÖÅlÑê­E†‡tðoú/$ʬ?†¿G&O×Qéþ æHÊ"#IÔr#@ÀfŽü©I$Ìc¡K~öµ6u®~ÇZÈûøƒdBÕ¨ªroBÑZtñ¢"úºÊ,ï.SÄz «³º¢²-Q!TÈþ©.ó‘ÙË5›_Ióà¡@ãºÊBf{r‚4oºf‚¤ižûG¾‚NêsK*]_W úø;db Ñ‘}ý –‰%y\h£þZ1_¿9žý“øCd¢°1 +³²ÖUjlz•ÏŠ'ÎÖ=DÖG:¨´ÕihÚ<í„Ñ›~ç›~…LžØ±E ™§‘…eeDlTæ†0ÈçU®³¶qt„2ÔÛÙ1R¡Áî0ö뉦¾…Ìզ䓟)® Ö%…„,b»‡…/u­³]¥/œmΙ¶zsû»ñwÈTÙÖÁõYuŽ\'Ê1pœ!ßÚ)BoÒ'j¥)g••Ñîù™÷ áµO[í/ü4BùgѤM´îu:<Äq•&Ò¦u³"S4žüõou3þ™cV]ån¦MËË›èZ_+9Ú'[Ä>Ðõ©¥µËöÕÔ_ßmþ 2æþ@mn ®µ2â—Itô›ÏƒÉ éF¬=nícÏÆB¶`†5·¹mÿ•ø;d®«¦Ößɺ8uJµËT.ž%mé 'iŒ‚*P¬ù¶¶[ŽÓqµúwáωÆuˆe€¢ÁÊX%òªü”‡Z+²%N Ë(«q†áí2ÇŠKû`Ôóóø3drC7÷•âhB% iÖ8’@k}$‚¤Ùã±ÁæF";˜ê-+bà!è㕘ߚ>ú¯I'> ÌR§î¦õÎtX%rrŸv˜û*r¡2]kgˆ0Ýãªæ/üU2I—OôÏ­wÛ—£MV#Td¶¦ÞOÝZá43€êu‰òëñgÈÜ[•m€Â滄~Ë[US‡ÈøTÆ8²FvΕ¢J¾2äC„Î?Bf=ñ9”°º2³«¤ÿb–$êg¦èPõ„ÌÀ;2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ón!“÷vù¦ííÇž¥>È5{–cÔrYÖýG_Ó§TO÷»ÿî!séûϸ·\d Þóù)›yY}_xÜÍ%e“éelN½Öåņµõ“e_e×ä}Џš–ûrdÞB&ñs~ð‘>÷)‘f«œÏßü¾ìÓ±xÃÅM*ÒU·1.ÓŽÃô´ªpŽéåÃOŽ“ò®”äòú÷qÜBf]^Õç÷ŠâÁQåõ›—ÓGá르ÿP7OƒŸ—EÕe•÷€ “éðÉÉS]À-d¦Sk°ÌÚÍ–´êó£WÚZòYúBš?[ö–c*9t´¬“?âÌö4àØzk¥«wîC~™åÔ0K¯Ã­Ô²þ[¦½ 4‰öÈš¿öŒéºùÖnƒKÊ‹&L›ÇÌÉ|‘ xW8}8Ú›µª% ÝÑ6vÙ¼ûæ&µ.ÖÈ÷d™ö‡kô[ãWè'hµ§.êRÿy™ùÄ0©*ƒø]7cŸúÞô› F“»–ö× w€Ðú\²ÌXûh‘ÍÜy/ï´Z%i%¹cÁNÚôyœm´¯–e“µ½ÝJ˜{åf¤=´»¹”ñJ|H*y)zŽät×·Ãó˜mÒüs‹„ª…›oÚ$¼/¶pàæ’=Y½ØÞ@fMË1¹=•µ?X•—$Jyœ“xoõUì…_‰‰æw$~7¦švmZ­ìÈV¸+·¼KïM¢Gñ=ßsq‚¢œâyYvÖVÕiãü´æU4ÅÈÁ_çWâÛ`DTB’†³Ú¸Ì϶òý§ÈÙzÄv«²¹;WVä&Î Wu9ó#¿ï{œá2ó¡›ZeGŸ‘s;Ië9¸AÓ†´ø\Òš¹À˜Ò”kû¥ò±eótB¼Ò¿ð^¨ígk‰Ó/“?ÞvÞÒɶ‹åPáz§…ÍUÁ"ISph{K/+ó†E•Ýn­+N¢‰ Éî.'”ƒ—SI_¼ðÍaõxõ§-“–Ã,ÓŽM­þ'l>;uN\k«îqPÙ¯ãzZ¹æó/íXØHÚ $¤.“þl¥Ð*Ú!ÃT×­aÊ¡RŽ~‘>u«0ü€b0Ú7výd”½žYѸ7R¤V2ÇMÄßÒG8p”{ÂV K² ÔkcÎëd–cÉ»hQß!¸ýž°ÍÁôJ¤#:Þ‡¤½ªnJÛŠÑznÅ6c>'¢J±K©/œt«‚¶àÛGÒŠþh˜âqÁ'Ó1Ÿt™Ü‰•ݱò$bä¨H½RÙ|“p1ÝŽ7(>gðvx¶Êu\h¯T/z¶—ɤ“³òÆÍÚA¶ÚË5îÌæ ±þ²ïHð úx¡lÞM¼iâ„§ÌÍsA¹ 9Û‘º ŸØ†Í-4«=‹õét¨ŸïHö“Fé_"·T¬ÛÌsO’z‚íÙ«Ž\I|»k¸Lf9N¯É(Ã^³šlI_£ö¾KмóÍʦÍ!ñSaè7IøH½â®iôëAè¶QÄæº[ép¶ëž{¹>L².È'šÚ³aI’„ý}Ó¥£NBUàzV¹®Ïê]%ó`˜dï”tßCÒÂ*Û^+ÙKmMR'EÔ5Ø:€= e²HC—åì‚æŒ½˜B£H„ÆŒ§;lXÌ·â:—Q†²ó1NR§AÀâ^q-4ö:2L1ѦYȸùù„]»3Ûx«N¼‹V”kûR]$³9óû‰bîéйÉ+p'XñлVv©º_L»@•- ´ÃÝ|¹ »ù¥e]¾‘[Ä>™…e³×"³/E=Lfc8aFÓΫbŸÌW‘y#1 cáŸ-2'·TÙe…Mð¦7Ë9¹»3ß‹›®ð¨»Äƒ´¢-ÅÕ•§Kdbì›¶MXÖ¡¸¸¼u¸s‰ë~™\Ek>ôÃ)ß¹à ç¨Gˆ[…/Àï#“Wä·½+Ïò|²z³w{²*r'ZÍ;î˸‘o½ûiGøU ů#“ö{²ªãÓ¶UNõ,·¢ûoÔ¯¿ù¿ŽÌ#ÊëÍÝ¢9Ñ?·¥0ï ù­7ÿdÞR?Æèwâw’ù_ýýød>… ó2~O3ò›È|Ç[ /(<º2ýBÿxç„{q™ØœûÃ:è6@›¦§eEäÕòÍ£pȮ҃†×gOë15¿£©-_8X¹+Ö„wçN²~þ>vK#ïIç"ç+8WоšÕ€Ç)õèêÏawû;p™½vRþ Ñ”±4Bï6 ŸxyÅ +OskôNe4-ð§ç´žáA—½Ã‡»3JÏc€ÎϹÛ0Z¯O¢¦÷ë2}àØ÷qL4.c}ÿg~&nãþ£ó“øH›!¢™{î;p™ÌzP¸ôå ÊÂþ õGaÚÈõŠÈLÚY²6 %ɾoaÅzh¬Ö¬Ou7L[~ý£`º‚“È~s¹‡öq,ình‹%|8 ]:>…ft·šÒƒ0’l~ÔR/®j^&s»^Ç’‚¢ü,ž',¶³Ny¿zQçu-Ê*]-¢mÆ45õÇÝrÕž–­hߺÜÙ¨dÀ 9‹‹qd;GîÕÊy凜³øÈR¤#e “ê²*Æð)ž,œ¦à¾†”+BbøñiïßÖ´È[,‡†£nÓQ`û!\tí›J®ùÐC1µ&g=ÔîÈÙ0+©îŽ©`­q­¬ü¯Ûõ@¹yñªËA|$= qx ™Õ•¤~«DêA[t¦®¬Å©zi‘ZU‘Ð ™¢5iê3gáA TÝú>eG™]`=.Ïò£Ñy4Ýû¸Jæ¾ÇÁëi ‰ê²ª¬uŸ5?yU-B ØÉa¡w†q~=ðOKñá)O¡A­ÞQ«‹·ofOúíîÑÉ#‰nŽõDªÛìòZâpq£ ËB¥bó¾ÀÃ’¹²½’¾ýµîû*™»Š]'íï¤DÑîú¦Ý€ œh)u§ëR2‹¦›áqwJ£’k¡«ÂOxÎó¸} }cÃ6lUjÛÂÒæ yZ¶0<ric"Q&‘U¹o»é1š\/pt3øíéL.ô!ÜL¦j­+±™¤º­u”6·÷ï¤QƈžÜÝr¯ýÂþ^ÉaÎè+¡|ÖÚc–AIUïywyâ¾HëvÅújµhŸ®œW]ý²Z à ÒI¯htX«$û²_}•Ì­ÿSÕ²à— þP$æüy~l˜$M'YtˆFÏÕMXÕªšx˜'«n§ÞÇè[«z‰ÐG—¤m™tUi9HøèdÒ¦¿‘F“hlK.Z1¢Dß™ìqŒ‡”G[tâ$/ò@ù,-Wɸ£Ï1Eí-WS†×å yš XäNuRû9|qÔÖÑE)ÉÕÂüH#YjFL—Ä\Ò˜]D%³s&œæh·³Åê"ë\•+5üJÝ CŒVÆ:Œw[VÜcJ€Û”E¦ûíëCËñ1ÜàÍês•ªº^0Ú*oë1ëp=v}Õ’ÇÔ³XejP48ËóàŽèŒçMÄ×F ×£*eå#¹mÄ}vY÷óÜg³©B«’ºxê]ùP¸v7·H ºòó4`ëÒNϼ¦.ryCàVHC¸re„ØµÑæ²ômg<)Ïîaå ¿·F—·~FYGSññ8³}Xó*¾£Þ7§"g¬¿˜V?¹ð£'ðõó?ûä7‰ø¾Ci°ï">tîÏñ3·ý¾«™òÄ<-—~Nºúá‹-“ï&¸ü|u3[kPù6®–Ô÷©ó‚Ó/Ço’Z."Èt„ ðÑ™ŽðÍd~dÜ®a™ådÊúf`RñÕ£¥-xtví«ÿß·’I™ ÒÿžÎ`S"·nÕÀpÒ‹Y*ÊO2ù??s“R_Š .çÂëKQ/ßLæÇÔèÊb‘UÉü˜×ðÒQù¸±䓳’›å0)‚CâÌñýI×w’ù2óÆæ=6GÓf1j€ó—þTQ¼®G¥ÇÉíÜ{®Â¢MÚfžÏ»”Vå[É´·:]˜8,q”mº­¹zÈ0ß(œS¹ê|«ZæÅšþyu}3L]¦ÕÒ7ˆÿ8n&“Ž¿ö¶ šbYáÌ™ç5I¿~‘FEÐ?hïFœw7otB[¹¥œ°ÍÖ[JhH?’¢}}œ÷˜äÂ=Y}Êë±j¬W ó–í¼b̫ʢFfä¾ûgÉx¤neܤ"s$á—"ËO/gKÙªzrNŽß3»Ú¥ÎÙ*+jµˆÜ{\‡¾,žm*xHùýDþµ:4Õ,:—0~vV’*ÛËÔrÖxYÞnïXFI=_ÝU‚Dæ¸Ñ!­ä‡p=ypf-ÿE‹»¸œ9=c’Œ¢œ«ª3¤‡Ý …3´Í÷€¿W’JPY”‘I¬ êFw®;b@ž3ª½ä¾¯H¹®Á X»½ Ì.L‚3¿â*bV$Q‡´¨ä®½Ê²1¡ItD‘ÈZCHúË2]œLÂÏd,C;¤Š”¼¤K;ƒ]t‰XI뙋„½²©Í™ Õi—á´ˆ4UœÕÿ¨Ò(‘‚UdÂF €5¶sœJ¡!`ï}L+lUkÖÕ2z{–ç˜U]ÄDRVÉ.©žË¢¸ Á¨$Ï>oÕl•ü¿΢švý±ÏØvUš.z™Üc*®m^—Zm1Æ‘,³,DlÁò¤›îÀÌ…ýº\DxÊ2iÎe*ûômmÄo˜ý‚‘)}"Ób˜‚.ˆÎïL9lÄfÌ_Î’±»¨¾Gý-É«ÎwáhÈÈÚ­ ·LÓM¡EFb‰m˜/®kÊ*/j¥^eXÑ.±%Òü'Ù«Šó¥P‡a†3ÇÝh!“j¡„že³³“êQõ”m¾ôéI*ÚÛzW*†0ÓìÓËp’;|J†ý´©C²S‹Ü´âÙ;H²[5ÜŽ's){F²Ëu‹½„ëdö§,º“À²“KÒèîf§nú]ýšl‚ÒH9bÞcÉ M¨¶|ýõÅU‚ëÑ“á¿S6ûÀiuÒêÐ=nêÍ6Ͼ„ ñ¿eµÓeÚ¨LÔª¿CIDATíÏj]ÿȼéË3!WɬY·JÊñu¤Ž¯]¸O¤ûɦ ƒl1nV¢£ÂVkÙt;‘~²ˆ‹1&ºa˜÷D?C9¦ÔŸ±}Tž¢™LmŸ·7ÕM;ŞŒiHµ?‰A’0'1_ÛˆãáLÈ»¸N¦‰Îm©ûiI$$oše,Ë¿K'ŒÄ‹aËê5J¤‡²®²CIòtA Z+¦„öÚWÛ¬PÕ6ã¥F|8Ý{véÑTÎ>ZÞÍ:BÒFћҸ)Èâ‹OU8¯’ãß4÷º' †8U÷_¸Äæ52¹m³ÛÛèAQEb’3WNlŒ  Jw;S‚g +¤dî5+ºxê|î°ž$ÝUN51a\+¥Ì]I=nkH›0 ¼=?Æn¥ê˜¥m«ŸÅa•˜”l7Å.[8G-Œ Ç­£½ÂšP†G,GénKWp‘ÌÑ/õb Ë‘$Ûÿ <èÚ\@SÀ÷ƬZÆ`„àhÅÐÄôÒ'²í­&MÙ5%ÒV#CäöY¥éOBåxë‚M„¨vÓ¾?G±Ë½ø²ÄüIê~G$¢Íƒä©É›õ­Éä.)-›ÑÝ~›Ù‚-%¤]µ'±õ;ñ7ù"}nÓÂÉóôÛÉGÚô­û û4ÿœ¯NOÛÚÃÕ‡­ëéÕ\˜ù«W7]×ã4â”Õ*Z§ß/ryq+Œ*³?Obž»|y¹—|àÛ»ðŽ‹ùôIÞyÌ›^å ™š?àl?óO<Ý÷pó!ÐGòý‚ç¿B¦:·¥¸úmàèÎïrÿ“¸B¦ŽÉêvAÇ 8“ËW¤+ü:\ê3+ï¬ôpó€?zi ãpÑ›ý•Yàsݬ#\µÌ{ž"p Â2!Èt„[Èä´Ó çŹ$0QmÔÇÎËSKoèdÓâT>¤;;´¦“-Àö›Á~n!“óªŽùÏÇríwQ»r³Ño¯ÙÖ­¼d:¯ÎÏŸ¯~dä,+½®Ä]¹ì'qO3»M.v9Ôgˆœi]_êà6‡ÖЋEΈ7ä¡<»Ä唕oàËœô3ë°‘‰|ÀÎ7©›Öòù€ªŠÎè§Õï¶×½‡ÌÇzœ¿Àé§ÓrÖ\7f{µŠ²‰NY¦ÔCñÒË}dCdMøÿ¸œtºå=ýós¸%C×6îÀL³ZêUÉD·[Ñ4Ýœä >S×µö5¨…õCüÔuFLºaâ v"‰Y‹‘‡¤FÕ²Tmë⫨V×íN(të(ªˆ›ó±>ˆs' õmæ0…¾ÑßDu2^ê[Ä|ÖÍçOŠù5î s+Rí[ê@ö­+ì´Í¿Êë  Ž$­·¼¯„Ï'™/~Ëz~©íÈEÏ€r¦èmXեزžOØTv˜fêß4³¹kz+¢É6›ÈeETÇù)+ë GL~sEcÁ¥0²ÅÙ@J£ÊjþÝâ¸Îà/ñ ]pÁBùK½;vš}HìkSƒå”¢I<§;•.t‡Né9EéÉȉiü!¯ Mߟõ Öþ‰¬-ë}Äð6u‡×ÄþíŸ5¯YÍ݇{Ab¥Ò!â<•+’œÊÑ+FrÔ±O‰èL4ûªkû,Ý>âr°§h,]{ÆÊ—'Óz54¦dÂn²ø5¡k§9§³0Ç¥Þš'.O2 ãÈv®WÔÓ4…-šQ‘ÖêMEy¬Š¡,ºvZ÷>Hʦ8' Äb)z‘"g û0+$֌ԚèÂ"â[î U“®9†ûë©;éÅ’F“å`ײd­EÒä¬ïxq?¥ÈÜzŠ"|í_ðA4[Š ó»Î¹šZV‚9æ!}ÑFsYÈiø‘R –ºzÂý´3L¡ÐHË…EXWÆ)ö.Dªãœ®ÊZBÄ­y_'kÏ¿};D?±TOŸ€å—ièüÑŒíÿEH[u3ŸÏㆽÀ¶;ˆ!µY3ùÒ6Ùº¨ý©kõ«Ön‰&Úh»âµ{Ñq'Bm4l£L•£ªÕn\Y©$d;u© Iƒ¤hœºhiÉåéEÕ,_"² éÐFëféÚa ;§®zYêB{m¹´5C’aÍ yæì޽Àäå¯Í.jžuœ V«•0‹Ã!•'ÞG7ˆéû‹ô°Ù3fU+i‡|¤N55 NÞT·=áòb&aÏŸ„~õ ¾+™þyö͆ÕÑšèþR^êOÐ…ö=º„ô8é-¶ã®Çg.iú›{O'u”ËGd躥ùRMÿfµœ÷Ãã†â¾S¤Ï¤‡&Ùc$‚¥[× ý5ûPs_G¼µ‰Älp |‘«·– Î…£ ÛèSj0Å\#“5ûŠ”d;iôzQthQ§sI Ç,JG‡—Šª„ÕÉgº%£lÎ`‰õ{ÛÅXó|;\ ¼‡ËÎóIkÿØëͯ4-E?PGøògIÛ=êÈ›¯ÿu}(Éâ¯ß4Ó×râ`ŠË ³ÿòât+ÏreÃhwøÃdÊÈçl¨ÿ—LlEÖÓ]m¡\àï’i³³%] 8vƒ?L&q¨²ßdìÆ&&'üu2‚LG2á^2¿«sÓSÞû"÷l¹Xç?Þ>ÏVûp…GÓ’´ÁÇnpû{Ýï;_ç2Y¤Öÿø€R‘uðòËšó£,PÙ’š *ßíûf|6º=•xÝ|ƒ;³ÍߣΛ³Ý¼_ÔF¼mn|ÝV³Ë‰Læ½4jw`—¾ëCZê7qëï!s[ß>O­ñÉŽ4éV¨¹>­pûmÀ÷[g_G×FßrÝ;¤–Ÿ,^Ë üºeî²Tº!ç°7ÌÓ=Þ/¡ÞÚÌÜÑg‹÷­zf–WÇ5ÃÓPž´k“åK>8$_ ³çÜ´OrÊiç+O??‹«é‚·¸A' ¼5óÝX‡%Í,'{ÌÔ¾hK%knH,÷óN>gqó¦ÖMsÕÓæRúg·ƒ|^SŠ#E>$ʬ״ᤚùÛ}‡%*:‹Ó#=kúv±ÕSVèVUºÖv'ʬ^ª¢û¾0ÏZ QÒvaX•° MXWòEÿê:™PÂ%«˜þápæÑ WÔw%MúÑÊ«ËÇ%v‡II2 x%ÌATc½Bå/ÉÑ•¼Æ+B]‘U$ÔÈËO»6…D¹Ûó2söÕ!æÁO ûÏÅ"[ÚÁìͶS0e­†¨@f5¦B”QZ‘dKÑ+SÝà“šçs7ð]ܰ{‚*”Xu!ÉÚ9^€T'r=•®ëÈ«oÒÖ×ÎÌþ+D}O€,¥=áþb ZV«gl†!–ÁæJ„hÂuâEVß­ç¥"Ké ÙΗž`~…#ýzÏIŸE®Ÿäñе—R«±§ÉMô ˆÉÀST“N‹XåœR~˜Lå l!ÉÆÚÀ–mRo˜q6-*ãµo¾7LÕc!´`èmÀ Jš«}.æ)¶­JÒ|bØ&‹BàÍ%{“>¬HÐ* ,3;?hƒ¥Yeµ.ê Iîdê¾QIšvVˆ&Û—F4LœÀM:" T@à̳¨6øgÉ\ˬKÀJÇaÝW'„k=MÁ ôN@q*eÉ ,:ZëµÌœ´ i“øßž‰’ µDq§ªdàù¥ O¤’<ž:[#Ü)‰æW{N,$Ëu«’j4yÄ$Ê5‘m‰: o#1Gª¾æ]Þׄçä$ ? rŽ‹š°Wµ¤5OR#“•û“8]ÃÜk®zQ·–ÙµD3g¢ð³ ù¤þ™‹ÚQï·ªY¦¤qî3šK¿+ôÒbÃH0Gc¤ 1|A—jÛªTÚŒ»d¿—ªO¡-¤™¡¥âýh¬IM²s€¦< 4î"À_¬¯” ¯î–jLÑ›_Í.gíLë./*ªf²H=œdµ¸<”Õ2Ò®'Ý­h›88ÁGš›ÿ)*«Jú÷4ÂUV‰X³ñPž{7 D# »^5[\DÖ*Ö²jhÆÏîk"yAXe®oÒ;Å:t“)Û˜‡r «˜êkÃo¨2ÿ£Fé7%3TKüOÆ©W"mæ =‘£:”‚an¸¤r&+þÚ£V«®EÛ†’$ø/‹Åõà‡”{ÜŒ<¤ßY¾ Åçq‘ÌE¨ªÌ\¤à«±Ä´:ú¤e•6¯Jĺô5fýx“§i^݈Š5ªyÞùHj Ô áA"H›Þ¼ìäC ‘¢‹í•S7‚l¸C2r{ƒì’¤ì:;OdþR—©ó/ûV•µí`á¶tyn뢢]Ù—L4÷Ú¡K¤Û"q5©ÈDzµTû²¯Oï ê7§¢UߢåtëŸ9‡¿dè®rxß{‰šŠt «¦È/ûÔª2dÏÚF/Û¥i)Ýö{VÖ>,äŠ!â|Þ@V”ëso€à°9Y3ïko™k¾¬2¼H¦ÖLÚüc¿-2{®Šž–^þí=æã· KQßORe¿þ#_ U|Ý]jºèɪáÓ‚+»ëØbÆÕdªp{ƒÞîŽxóüûd–Éâ‘áJƒQºïžpÉ{ëw"´—åÅÆÑz0‰´ØO¹oéÉ_ÅU>TtÓ4sÏÛÕ~íàÁÂíþ½†ëWù2Ok÷a¥ÛÖ4Ô®>ö¢>MBÓßæ“ßt‡Ó‹]¾ø·XæI‡Å›)]K­1] ápå¶ìø”·k_¬ZyÐ¥ÝIî/µÌ7@ù$çç¯ÆAÉw]Ž8áêœà‚teº×*¿¡›=ÇïgîœÌ?Yæ_†?Nf`FùÏê¿Ì§Esøò« òõõ[&¾wÞ'ow ¾ghBO‡!xU‘^Ù'ï ?YF5½”ªÔ|2[üÖíæ«š^¾N9gêWæÝÿ&Ë|SP·Bg|ôVBsúä¤Ã+Q<­§‹æå­±Ô¼€£ ¢:MMù‡/Àw‘ù„ýn£®zgÐø Cú[OóòÄœ†˜Þ*«ÍL fÅž+ƽJÙ-nŸh?ÿæI»&²ª÷'Ýû]ê£i™WÐLÅÏ9p¼ZG×9ö¹•Õ[Ì9Û//@?Ã÷Xæ“h’n˜G3{NÕ]†9–±&ø…ÀžÛKq׿_i˜×7vƒNúžáºÞWE.‚w©C$u ¨º/zÕàøÐ&Yk9,j‘)ãkÑ`²EãjêšyWî~§]GÏU'sw¦ÄæÍžS–­ËY†;»–¨ì4îT~h{ISðÊÚºlµ’ë‹›ŸÅeu'û%D²,@r5s €&v­Ø0U$¿åè#VVˆÌ" IV®ºÌ¼Í$¬—&Kôš4?iÒS^sä8Oñž¶ûQ°À$颤eJ7tQ¥ŠB+?ñ~ù’u^’ǰðŒþ¡†5‚E­‚äŠú–ª2°.†Óòg1L<¡H¥Š¾³$v¿áv•ÌFP’, œl]ô¼±ÉsɆRe7‰Ýù&uK…£§5£¾t†‡±?|]M 'IÚUÌ*)ôÙo¬%Äá5¢R…¥¦õUújËÏd™'÷ïYÇ;€ ŸÈúc•]U]`5æäÂêjHFJíR¡fÁ›/°þ%| JàçLÕTDz™„ˆƒ.âœ}¥VÅ-kL».¾¨žøÄá]’…(ðOI œrE"`‰^È›n Çɪ¢ ®iÃ,8.},•¬Â#Ô²m‘ÓF"_¿ 㥱±“ù^¥¡á0ˆRå¦õƒw„àW¸2xQÄ :1F±x-›q…ƒÏFXÖ›ò»˜ËÚ¥åd4Xmˆ(æ!­$f/©¨dNÆ%"ÕÎÓ`båU•µ°p,SKò=~ßaÕÝKÌáÃÔ;¡!Ðq|_¤¸æ Ù…‘Kùºwt¹Ï\ C‚Yø2K=ëú/ åȦìc£ šmG‹Õ9c_ý%‹RN`É„—ȯœæsä( ðL4Ù¡ænÎjâ§s Ú»J¢î]‡:?OÑvWeVkì6Õîž•[Ë;Œd³—Câ/÷™’ŒY9µbÒÇÖWÐp“ya„ÖPÛYÔ¯²ƒLÍlc:Dà?7vëäù Õh‰×¾sŒ µµ#µÀ‡ýMiºécÃ\UÞ/*wu•uN•S;oûTâá¯ø_%3mB†ôîE8 ŒYv2vvUÿªQtYþ(CÐ_¦§ëÜÈiÛµðÕ*Ú9Ï»ÍJiÉ™¥V“4zG| þÀüå^R ±û¬žÞí‚Té¬1,Ó×àdì$窊žM¥wZ}¬ôw¸ž ‘lh¼ÐƬ²…”mtÀÛt!žn] .~­B=ì “F<óu4jos¸Ä[ân€àƒªbâQÆuSd»¡wjWGÌáðqe# P±ëBJsUжRç×ýgUN‚4F§›Ê¿¶L_CÏžmc±Ñ&&o‘„ÿG ›AÕ"ÁH§_-^!A¼^¸Bï7ÔaUYC\ôY°¿ZÞsÏ%$}pÇ-€´Ms2|Úî¥=Él7-¶©ò\¶– ‚ÚVU£fÏʺgº®^­«-ež¦‘{ZŽÛÍ_<÷AÐ3™t§÷oL$~ ÷Yì…›á Û¤0”™XHat1êZÚ y¼O'*ä7Ÿe[ ^õDg_oO³ÿU¸…L*¦š«uYæ$l]뤒Ÿ&)}Rø!>¦Šzrt¯ Ëò?‘Y«’ÉZðSÃLÖð9:MR*¢K +Ã1µ¸nó½—3þU[‡+fgLG›@éèëô7éï1³ûí—} ™Yã>jŠN2d“CìöÀGg1HZ¨^•(£í¨’¡±áÔ÷I…RÛXN¨·’èŽx·T=Z¶ª_×MÏܼ¬E”¡¥ì#B»¨He±¬“°c8Ñ?ò¿KwPŸ…Ò|'nÙ ¬jÚäBSPÎd£Ôuð7o~*Égå†J+òIjë k…J)È ¯j¸Èx8RVÍÁ_*')„¶±ì{²øØ%3L™ìŠzÊ(qZNŽuýaa%ØòV4é7à2‹¨e ú™ÞfN6J£!åà’YbsÚ!I’`‰:Ðûiˆªs‚|¬Ý ¡@‡‡Ýd–!K´ t¼U·&šGKÕSÝý–LÖÁ`d 8´Tâý!D4ÍϘîJNuwì8TDÌNΠ¦g²cñË\N%ÍÞá!4ˆ¡ÚfIMÊ**1(Ë ŸÙ +[àØˆ@o*Âɪj¿uµ|®œéýb™og õ!¢Wâ7™Þ&Ù‘ª[yrûÿžÍèïØqhécÙ8ú“ûS÷±“ÄõlqíBÜb)¤G©ö‘I¢ =­›µ^Tl©ôŒÑ"—Ê[3¶àM-{’,EiJ]:o1hòØ=½ì¯Àu2áÜ, ÔéÌý •û B/¸SÃl9ü‘œl‡-o0À»©¬³z–<í®°Ú ôµè«inâM)UdÓVÊ#Ž<™ò-/ì:æƒ,ó'qL¸ ’ë΃‘1#I 7ýd?옸BJª‡€™>¸Ê[nïž×>M§Â¡A‚mý"=iö¬2–°…M8Y‡jª­¥±Оc]M6ý*.¯“YU¹,AC£ÍÔ ™ b?1˜: žëûÀʇQÞ­¡÷Ã|#%wkjIv™©Ü›jôUY/‡pOv³jÕ­žNzÌuLþÈàUb¸ãå ­úûæ†.“™UƽîÞ­ÓÆîæuw¶¦“˜M9.%õ1ùgs,Å 9ï1ÈN Ý4VùNyL—ÄsTí"›Î±×Ò„ïÆ%TìYÕô°ÓBV›äˆnœ¹öå…×;z| .’Ù TöŒàx}þ} G8 ý&SÜQ&KùB¤I“UÒáEoôL°…„eÙX†íu’ퟔ4…=òÇ–ý½4nŒoµq·‘ð]ÛÏ¢O˜S–M‚Hc|0×ÜçÉŒßÕºõ7|-› ¸únÄr<<àL®c–7(9Æ h4ç:þé{ûí+wƒ‚:ŸÃ¢é؃~^lÝ|Áë«¶·¹lEcÎPcõÿcŠëW,¬„ÒÀ‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LGø*2ÿZÖø"29ÁÏ×\9ð_ÖÌÒM©•ïãëúÌ0ÍoÇ’ùeW<@x³Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:Bù·PéÉ—A柕gl™ Ï 3Èô„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Ó‚LG2!Èt„ Óþ'2Ÿ¦*ó€ÿƒL*5»§ò¿!3•úÓÏð øOÈ\–°L7(i)?ý _ÿƒL¢d:¥”–ÿ Óü?ÈÌËR¢Ïtú/œÙÿ„ÌÿA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéBæ Cü–éA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žd:BéA¦#™Žðƒ»l,.Qï~IEND®B`‚leptonica-1.70/prog/pageseg1.tif0000444000175000017500000040446010603537047014667 0ustar dandanMM*4þh ¤|ޱ†`ä09Ü‚9ÎS•3Yì Vˆ£â""""CÙ €Ürr9!È7²C”99*ÅÂDDD†@,¹'3’¡Èäsá@ ²C 4Çã'DDHŽ"$2rCÌr9ܹ”šù‡!¦>CYÇÄDDHdãü@¼äW8ävVr ðVÚ΀ÞC“qì†HlX!ãœr lr”9 ‡&9C“—š ãœr(攂‡5ʃ¹ ä+‘ŽC0r ä‚AXs¹‡)Î9’ÊVP¡C—eqC‘*ÈqÌ91ÉS”9‡ x9Ç \r°9 LDDí"#¢„y‘ó4GFÄÎærc”ä C]ÄDHrc‰ˆ„ˆˆˆˆˆˆˆˆˆˆˆˆˆˆÐˆˆˆˆˆˆˆˆˆˆâ""""""VEò9Å# 7ˆˆ[aÇ;/F#¤G¨3‘ψˆ‘tG£l q @œŽ*""wÌŽ346¢"I„#lášGµ/‘Ñ˃‘à Hèº#äs0Èàd8ˆˆ’Œº#åÑEÑ쎅ÆG#²P„DèÑ$3`Ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¦Óÿÿÿ¯÷¯ÿÿü®·â8s…Ñ´aóˆŽh”äaË¢>\ÈùÌŽ†a#äp¥óÙtqp„DDDDDDDDDDDDDD‚Ø+&Tpþd(ŽôDgó,åȬoLùšÙ¬S‚“ÄtT2A ¢/PC ꚦ……A“0Ø å¼ßG~ŠòNGè—_Ü4kÑml Ôî ’™NÌ’eGeÈŽ! ÍÌ‘ÀÌ¿ÿéîaúßþ·¤þúþþõé^­Õ7^Ó¯‡[a:ýÒm^ÝÇOM‡A7Èã¥úM·ÄDDDDìÑÔGGïøýý}+¨ý®£‘ç¿®¶¿[wªöµo§ïéþ¾´ŸºëK½“ûðœpÉóý’ÏÿÿÿnkÅ~ƒÓÿø¯ï÷úÿ¿ëu¾«Ú¿þ¯]Sõû÷ý~¿E¤ÿüq˯…äÌ'ÿõÁÿ[ÿëüBþþ+ׯý _ÿcO×_÷ÿýªðŒþ7ÿø_ÿ­ùuÿ ÿáwÔ/¿ˆ^¾øŠÿ¯ÿÿëü%÷ÿè×ÿÿô¿_ð‹ÿ…þXþ ¢j_Ûü/ð×íßÿ»Wè'ÿÿü%ÿýßÿÛþ_ÿ„\_ð‰Çÿ›úÿ‡¾cÿ†ûÿÿþ¿¿õþ—ÿûû¿ú_ÿ ¿ôª ÿ­¿Â þ?äýÿÞ×ý}­ÿ÷ÿÿýÿú_ÿ„¿úëöÒÿü7ú ö¿ÃI³§þþÕš~«ÿ]ûõý×ukå ýÿ¿ÿû_×ÒûûÛýí«kÿk[i}ÞÙÿuoûí}ÕsÝÿký×ëÿ_ëîO¯ÿf‹÷(_áôµüw¬S %¯Únñý¯ ·Z¯iÚßuè=ëm/Þ¿ÿuÿ÷´¿þõû_¬òzþšvÓ–í6/¦“V!¦Å[iEݱq [K^˦Ҹ0Kûÿ°··_kªÃ]ì.½„_}¿Kɲ™’‘B 4Ú $a› ¶h9Å´ƒbšM6½6ÂI§q¶”žÚK«Ù6•ÜAÝìTC»#þÅZjÆ¿ÿkéü›ƒÀgL‰ˆˆ2÷ ØL¸†'UIÁNÓV…û Šv“L Øa$A§"¤Ø¤Ó‘¦©´éƶÓí­;ÓM+KˆwÁÐ ¹À0tçPn"""""""""""" Ða0¿ BO¶M&^L$ïa2W ´ƒV™ …„M4Øk›¦pƒ5OM2@48¦°Ó6 XˆˆˆˆˆˆˆˆˆˆˆƒL! !ÂaK„UˆT›% xA§÷h†xÍž>ˆÉÌŒd3A”3¬¤ ^ÿ÷ª¯­þ×ÿÿÿ¯OLxM4 ‰@ÌØLh0ƒdC±’'‹™á ì¹ Ò0Qå&lŽ?¥óÿÇü†ÿßÿíš‹T]¸¶ƒH؇EÄ"p‹¶ÐL"oE„Âwa | „Âv­:VŒ?K놿ÿÿÿÿ’¶§’¶Õ+ö“Âm‘]îÂFÆ‚y=š„]¶ Ñw¿ˆÂô"¹A:ÊÙœ2Ï‘†lˆdCxÎ<¨d2!ÇVHÏúªñÿõýy þC4rò–õ ¤ºíRo¤[iÒºÞ‚d¹«lŒzWRWI¶GöK퇮U-UQêEŽÕBia&óÆmš fEÆC B€µ”âÿúÿÿ¿âõo÷tžê¯÷§§ý+]§Òºo§úvúiýWš¸iT$î¡Â Â.ïá a¸DáééZ„MÜXDݪ,A?þ¿¥×ÿñ]¯®?j¾õ­Öý¦Ÿ®­zßk =뫤xÕèïGz\z ÐTáô–•h&ÝUXÐM²8 ›EÜ ƒê‹¿ÿýÿÿþ¯¯ÿ_üWûÐÿÝ¿õõâ©}(­%’Eix¯KJ´¶%F!i=:^éRZMÿÛ÷¿ßÿéÕ_ºïý_Âõÿ«õî¾ßûú]Z¥é4––ª—ë¥Ô‘ÕÖ•ú_¥ÿÿÿï¿î»¯ÿ×ÿÿÁj^¿ïù` ÷ÿþ´©u]%Ib—UÕ}WUKÖ½Šþ·ÿýýÿ¨MÎ=ý¿ÿÿÑqõþ¿ÿ±ÿ;ÿüðM xÒÕ$½.«¤—].•­zÛ¤´«ÿÿþ¿ÿúßïû×÷ÿáÿÿúþOûÿýRéU„’õUUÁ.’õô•k_KKKÿ½õÿ¯tÅzßÅ]¿ÿïÿþ—ûÿÿ£OèÔÕhBÕ*ëÐ…®½Uõßÿ_ÿÿÿýûcýßÿêûý/¿ýýÿKÿÿñÒn—µêJ¥^½pN—KÒT¾«O¯Kÿõݺÿÿ»¦½lÑ{¿§ýù?ú]ÿý‘‹ÿÿô´¿á~µ^CHBú¯éj©&Ò¥ZKÿÿÿíÿWÿvûKßuõîÒÿïóOÕ_ÿ_KúzIU/¥KIj}.—Kûzÿÿÿ]uÿþÚ¯Ø0—´ôÚÃ[¯µØaXkûû oõK½/þß}%ÿúÿ_檩/ÿ¯_Õþÿÿ¿þ@‚÷uOcUÛX¶A¶½± ‘`U„vÚ b¯»NÖõ¿úÒë/ö——Ngê_õ.º0¨%®éz^’Ö§“ë®—ÿýëÿÿ"õ Ó °h6˜¦Daƒ_¦4Õm+iƒOb±•S¾ímt’ôµ°’]Yõj´««Ÿàò?Ö¤]--+õ#ùÒÿõ¿ÿ¿þZûkö dn ŠTÙZ ÂM; RmRi²(ôÓiši¦›¦¼RkñLWabPâ–) %=$¢ºÒ¤´¾Ð­/Kþÿÿÿö"""*"%""&`‚ ²„0„0A„Ó „Âi¢ ý«M>¤ª¡UE4×A Šºl%Ò{iXA6•¥Ž¥t¹˜/ÿëñÿ½ˆˆˆˆˆˆˆˆhDDE±$bÐh0M Âi„MBiªahtÄ.‚{Ä(¦Ð@ᄺÇ_§ÿúøˆˆˆˆˆˆˆŠA±Z`&¡Âi…Xbÿïÿÿúè8ˆŒ³uý}~ÿùny]_ÿÿÿÿúß×ÿ÷ÿÿý¿_þþÿÿý6Ú_ÿÿÿÿØCa%ÿÿúïþâÄ+ÿÿýÿþZâ©ý}ÿ¨ß߯ÿÿÿÿ¾ˆ/=?ÿÿÿÿ¿¯rn1¯ïëÿüÉC>ÌŠ"+&SÄ^¿kÿ_þ¾ ¸((A‚ ˆ‚T è3¡qÞÔÍFv+íÿ÷ÿÿü h5L Âad-„A„Þ gq“sÖõ[ÿ½¯á÷tXævºh¼¢í¢íêma¦á“ †JÄ4’°‡ÅÈ‚%bž=☭ïß¿ŠÓµ¸»¤î‹†¨Ù«I´› ¡&Òm Øa4Ó¯‚ ¾í§ÿýWÿ¿úÝZm[ÛÛôÚN‹ÏO´ÓA¦Ç»ÿUÿõÿë½>/ºZ[¯Ý9 ƒ­Ö°½ ý?ßõÿ×ÿþºWÞßÝp›]oë­PNýëªÿö«·þñ§Fúºÿ­ÿÓÖ¤ ¤Ó¾Ÿï¯ºÿ¼Ó(#0dXŠš#¢:>‰È¡ff¤ìê×QÒéý_Ç_þ–«'ôº«UÿÿÝuà¡ ˜Aœ!`˜&˜C0†ÇÖ½÷ä¾i?¿t пWIWIR]$­5õ¿¿Uþ¨¸hZ.Pl!¢oL"o}-/ÿÂþÝ&zßx]uèV­5¿úû×~éÙé;O[n‚tkpŸIt¸¨«ÓþéXH»}t|™Ã>FÐÍÅ3gÙ ´Ž¦:2ˆæHŒf™üéy­ë]$’´×ÿÿÂûÝ&ØMþÿ²Q§I´½, ÷ý‘ßÿØI7úª®P˜E»O øNÁ0P˜!‚a0ˆŠé  8AÑÆ¤!›9„ª~ž¿‚÷ÿ§Ûnÿq]'W :­pí7·¾–•ûáÕ6'ˆ}&ÃÚ5Ý$hl$[·T\tÑo\"ÇaZ„è*aBp ˆˆ†UeAEû²c5ý¥½WJúûj—ý~¶¿·ÿ£½|+ÕÞá/H%´[ª êOA: ö OEÝÔ"q“`@À0B"""">­ø­ªŠõÆ–Ã¥ÍEÿþÝZÖ“ÿQQ §‰P—v’_J´¸• };éi>ú3Õ'ޏÿ„ß ¿þÚU†ÿ_øØÒÿÕj«èRÿ­$•.±ATWô’¥T±U¥ÈÝ%ÿü-§…ý¯é4ÿ“ÿ»×þý}j½¤[¥KIitªÅGI-i.º¡ þþ8¾EÇÿçzQ ôMû×øh2n’ÿúZõªýPZÒT©%­wé.¿^’ýýóŽÕÿþØI?î¿üƒc¥ÿ¯IRUªéa'IB]—«Õ*IIkÒI¿kév¬kÿþôÿ_úT½ÿ¯¯Õ~„/ˆJ…Rém¯º¤’úT°H‚†×úõتKïnò1zD¸MÿÿõT¿Û®«õëJ * ‚]/½PI*ÿ­q ûý?ÿfŸß¤ ï½Õ%ÿô—ÒU­¥ÁrÓªêŸä´ÿýt‚ Ô(rˆ"7ÿ=këöºÿÒ“®›­/ÿI$¿õ]i}i×¥¯×Vô¡*ýWªÉ› {¥éêíZïÃIµ½Pß?jûkþ©$OíÖÝ}.’ÕEu¯^–éªI-­u[n•n!Õ1› Å0Ðv©.}¤›tÚZ_é$‡n¿õYu¥Nµ™û™¬ºÖ’óÿþ•~çOZé¦Ã ]ìˆ=ýcj6"—†WiZMÒªi ‚IAÚJÚJ¾«] ªÒ­uÏý©uäëÌýK¬¿—^]ZZù¢¦›“OaU;#„ƒa4 *â°Å1AŠAÞ˜$[°Ò¶ÒõB°•iT0I¨a$*K´qÇHWJ¶ÐôõVÂèV" ˆ;0„C „ ˨2ÆÁhCì ÂaWèAU!ö´°ÂTÅlB¦*¢©i5MX¦%:ŠªŠa„l0JYK—cˆˆˆˆqâ""""""[ ªˆM!PaSM0¶šv˜„ƒ6U4´ÅWÄ)7¨™j2*ª—P „,""A„Âjšh0M0¨0¡StXí¾¢"""""""0‰wi,"ñ ….‚J’lG¤õT5uIÊ–*ªëJ¿]:ëõ§HBª^<˜dŒô™øÎ9Æy &iœJº3à „S ‚¦a 2ä4ùœg™Nͳ¡—Ék:éMÃÓ¦= ‰¸úa4ÓL&a  ¿ œ:† Ý_A:N œê‹¶Ò«‹„‰Àh¸ëT›‰ßUÆ•-*¨¤Â3Õ’¸IÐT—åºYœú]Ké-z#¢´*%FžµÒß4̨ɔv7ˆÏ;õõýWJ¡~—ªÒÒê’[Iöª*`¥º´SÄfFD2ék^—­%¥Z]iV—ê•…Iéû]L”Ã… 0@ÓNÙuX^¾º„’Ö«ÒÿKéXöš§wÆ(Dá„\4ôІwWëÒJ«¥ˆUúÕWëé* ¬D„]ÆÜ,&Òm=wÖ’ÿ¯A/¥é/K_ÅXõLÉI~Tu(z¶“hÝiZ—„²»×õIt¤ˆ¥Õ-V´’XIé|¥õâé{tã8s˜¯ÕV½i-RÖµékìB“XM?W_Û®¾½0‰:Œ¸g6NçOõªýuÕuëëZ¤ŠþαѶkŠ$õ]5_õÅÿvƒM¦'a†¶ºIQ…—Yu©uÎ:/æk^ºKUKY´¤W5a0D% ŽL Í$Á‡âøP)D\ÏŠCž.E˜!˜¨3L2FlÈf@‚”3¨R­ 2DjvŸ¯Þ£ÓTÉÒ­ ™:Y;m[K¯]uJ—K\.¤}}-,×ëš$‚‹€Â°BÂ&áÐ\"c†´Aý‚4ì  5>Á à !H3AIÊH|Μ`ÈcÿÔ”ç\”/éïÝðÝ[ a.) B¸¨¨¦Òl!Zº_K¥©ƒµI‘]¤ìˆ=>ls°H Ú¢í¢ïk6$]¶¢í¦m‹„N!4[†‹€é4\p‰ŽE»4¸Pš~‚$Ø"$ȘK Š‹BÇñúï·Ø¦ÒÒþºŠ‰‡UM¤—¥aqPÛ ˜N“l á’Èd+x}&Ã$é(I6ÉeéöéÒm‘ÃI¤„î‚t„ì7AÑpÑ­ááaßûá4kÍp˜DÇÿW¿ì&!STÕUS …_º¥AEUÅ UíÖÕÐ¥ÿ½×µn).î“m>):º[¥ïIjúM¥Ó¤ÿ†JÚMÿx_t»£cAÃ&7ÿ¿ÿ†0BÐa0…¦ „ L*aWQ ¦‚3¶ ·Kõ¤¯íÿÒkßéúWÕûöëÝ'Jÿ¯öë :N¯étßþ•Ú0üÑDFYpB6 ¥Èûþõßûþ+þÒ¯¿Úñkô-zaWÒnõ¿þ[¿mU«ÿöÕÿóNŸ¯].´4GûúõÿúÜ*úB¯¥Ò¯Ä/¯ØÇÿ6Ô†;ÆÿÕþ¶«ÎíÿJ¯ëûÿkÞWí µÿ°þKOáyÁ+¾ðõÿýŒ>ÿCW~8ûúãÁ.YUoÿÿÿ¯ï¸ý$cÿµá~¡yzÿØrõ,[ÿ,^í7Ãaýþûkñ_Kÿoÿû}Û¤¿ð‚}oðßÿáÿÛ¯ÿ\2o œ^›oån¹.ÉýþO0³âb•´¾ë¯ÿûÒb_é%ÿûûý/ÿöïÿüRöÿ¾éïnº&?O\0—þ¿ÿþì%ÿIëÿ¶—ÿøoÿÿëÛoÿÿé?_}þÂL1 ßï­´¿ôÑëÿõûkï{ÿ¯ß÷‡»ÿߥðáÿëÿÑØ¯½¨ˆý×ëÿïZÿé_ø³Eý™ÿäéµý¼ŸÉÿþÉÖ’Ua¶þïÿÕÿöñû¥ÿ·_Úéëþf´ÿ¯Û[Vþ×[°½úD•=¤Ú_þºÖ§·7‡ü?ÿ÷µû[_´­´“ì¶— “×Ò[ vÚZžøi°Ám=еØa&í÷¶¶¤cí}µ´‚Jÿ÷¶½䎟ü‘íðƒL0ÂI§›a$Ócm$áú§CƒVÒNí&.)‹éˆr$ ˆv]:WQLWM§ñT’E~¶µ_ý}¯^ÿlB´é6)›LBM¶Fô¦¬ŽI±I¬SL&“ mšca¥íTqj›I„ KuÔCºþð»wú[ÜDDeÀ!E„ !Ã4"'\0ši aMN¤' i’´ÓA‘Ž1 )¦©‘G Óh Âb“´¡¤í6L'¬0ªšÒh0]µâ"(ȈˆˆˆˆˆˆˆˆˆˆˆaA„L&+ôNH(I±QLŽ &)4A„ÂL Ý4)ÃAôœDDDDDDDDHxaa!„ïO´?¿¯껆•XªmSaD-SHìºØ&v]’¶d;÷Ô&(R½Ö.ïúvA2ºÓÓ´Ü/ -UT'sÿßÛëïùÚP…òC"qhÖÍ„'Ó(&˜aê¿ø!Ý¿a ±~«ßèŸðÛ —Ñ>†'ͰՕô\´Í3HÌ3B:fÙó:šd„Q›gV¹¶jÿÒumöƒ ƒ´‚mºmx(A‚j0Pƒ ‚  „B!2 ¨#c<òã$ ’P) d<Ù"ÈR‚'#< ²¶“§þêúMÛ¶ŸBÐÑvЋEØl š7" Qiÿ-ÃÂi„BM55 „ai?uúOöùO›#„N) Ž„F‘¦m-{#‹¤á‘Áé6ÂÙðš Ú>:i«I½Ú6Qxа‹†t\7thxEØa:îÿÒ{Á0˜M0ˆ'³á€PP˜ ìê3œgÅ'§‹ŒÒ.g'ÐSHÁ fc$´dí$Ü&ÓáØM¬.[mêO7¤û¤ÃdvGti¦Þ’} ÷º0ùǤúÚ;¾"ѱ£[»ráBÑc·Ý°‹€Ñ‚iª`…¦ §Æ®½oé÷á:þµ­ýã[M?¥¤þ¯Ól–5½¿Í?÷²XGu×Û„dW ƒiª§H=è¸hØÑ­á“™­¢ïú_wßÿÿ÷ÿß^Õê­oÕ]*½vŸýÿZÿoi§Ý&éa6—oëîÈíº ´´›dvô›Iýûþ•ÿÿñö–õ|wMÿñÞ‡÷½$ûkÿºõþõ×Óÿõ¿L'dçí¯iõÒÿÿÿÿûwëÿÿ¯Þ¿Õ½¿J÷Ûÿi?ñKõ¾Ý{±Þ–ñ[¯ïûÿ×ÿÿüµ__DÓ¿þXß“ÖIÎo¾¾ÿþ¾ßñ_Kø÷º¾øáÇúÿþÿëî¿_ªé¿úKÐ_\ØO½¿—ü5ë·þð¿õÚáoú´¿Òý¥ßþÚÿ¶Œ;þÿnÿÿ·¯ý×CÛýÿ¿m[úLz_Ìé‡üºƒ“«òz~¿ÿÿìWïÅößþß¼WûÓÝì~ïÿ±þ“º Z_®÷„[Ûߦëúÿ÷þõÿ ûÿzðßÿþ÷õ¨ëþ?þÿ ¶A-ûFA8aÿ·ÿÿÿßÿôa?äûµ¯î÷_ÿ·ûÎ~ùÕw_ÿëÅW_·½F–ßö¿«ÿ[ikÝÿÚUý×o¯öh¯ë'^—ÚÞÞ¹#ýëë’#¥þP¸§ðú^ß÷ß×ëµmný?íZýþÏnõ÷anìþí…ßÒ÷ß_oÛKמ¯Fkû_¥ßü¡ÉÿòðÒ°Ú_ôÙÕdC.½ŠÚO´¶3ý6—ìm¦Åpa.ë¦É^ÖºMÿïýªúÿÚÓú›ßûS¶¿·¿Š ±„i°ÂQIÝÛi´Ó­¶©µkjšjÔnÓ­­«a%íì*«~à [ÿjˆZ4Òÿm%¦¿}.Â_ia+\+aiØbA4ÂmÒiµÕ¨bmE!*vÐvÒ 1 )ƒ–ÂèT„à ›i+­ÛàâUŠß°­®ÇtÅ{lpÐy{+f¦¸`„A‚ †Õƒ4Âd B[Pƒ“M7  1  Âa"½†È£ÐÂíª§bí+I:¿M8:cã”b""""""#/jÁ‹‘ 0A„@ÂhSi¦¶^šmoLñQ 0Ša&4×Iñc±MDXL#3„0ƒ4Õ4A’pºýfê<.º_†—Ò_b»T¸A°–$—°ÂA±UÄm‚â q yj’Ø' šd‚2È%šThié…&Æ)Å; rùÂS²qÑ<„û_¸t‚Ú`™à„´IPSÚ¹,9júV•„îÝ"]Xa5¨C°µÆÄ?¤‚í]4:%õõs±O-ÁSxIñ"~íz<¾'תÚK®©?ƒþP´ºß–§¢tŸ8ýtï§Ö¿]'ÿ–™œ0A” ž.HN(D(;g\Ùž2A#qdƒH†È+OÿõKõÒzß‚„Âh0TôÖ  „&0Â Ä gQž0AŸ3ƃJÜ»$ãчš£6“äU÷_qÇÄËF¶…°A¶ Úš-áÂ..5ëA·|;@ÂoÍaÇ4flh„™r4"¾H#¡Zy¶–Q‘dGà ‘å†G á7[†Gx ›d}6“i;´‹¶îÂö‘pûKh¸® º›°BÅß Â@ðƒÄ2x Áš„(6&V­°Uúá4êÛ%6ÿúH>õ%z`’oÿ§ÿ  ÃÒèÎÑp÷‹ÑpÁ '¢c´g{ ÿûUz·Óu´=?âßWý8é7ºXdž“øpÉãÒÃ%oH7O°R(ýüÖôiëúê¯×ÖšímWn’·ïMû}ý þûêÝ:ñ¤êëPƒªØdž“û«è.×ûÿÞü~¢+ÿõ¥ï]}}~õã÷ÛõÐ÷ÿé—_ûÓ ý~°Ûÿþÿí~Æÿõý½0¯ý>ý/þ:]?ûý þ]aê¿ÿï¿ì?ÿÿ‡&F1_ü~/Wkÿÿïÿ¸·tÿÿÿi|?ÿïÛú _át°­×¿ÿùÿý-·÷ÿÿÿÛÿýþË/ÿp¼™LÕÿî´›ëÿK Åkÿÿ±^Ûÿÿíþ8ÿà‹Z-ÛwélŸÿÿþþ×wÿÿÿðßÿëá¿Ð]ÿ¥þTÝÿoýý+ïÉÿÉÕaÿÿûö¼6ßÿµïú_ý¥ÿXnÿá-{¯ÛKÛ[ÈÍêëÿÿü=ÿúøoÿ¯ô¾ð»rcýði~ë¥zö[ kîÝZþ~ÛIZû|ÕÿíþKïöi¯þßùBü=_ö5ä]_þÅ-±Åßëa;½?ÿüôà ýûkÿíWí¯Yôøna› 4é´“A Ó´êí…I ÚL\kv]6•µ÷I†ÂZý¶¿v–½ûa°—jŸßí«¶ƒ‚ U0šl ˜M¦Eu1 „Ú|m¤žšv–Å-¦°m¤ŸÒ«Ÿ­¥ '±]§ûqa†`š &]EâaiˆA6‚ á„0šh7ba ƒ ÓjÁ§†DD;ÓˆwIÜDDqi„ !ƒh0B&x2a>Å]†™+ ô ˆLŠ: °‚ ‘GÅ't±`ƒÁaƒ 8al&kýˆˆˆˆˆˆF[bëÚ媑Œ©ÙÞ¡ Ó;5;È‹38ˆ˜ˆÈÉW;*É ÿ Á£ XL)߃tÊ–˜'\0¶èÑ÷[°»a4Ô—]ßftí²TºïQÅÃnî¸zÚ}ûÿ¸ØòÔS5ÿÿ^wÿÿ⟠ÎóR6gÙ ÉÜy"‘Ÿÿ§¯ýpL& „&&A™˜ òRJ"Iâãòq” ¬Žd2ôYAæo!Š3VGD§Ù+]:l!i£;F7hÖ„ѸL½Ph0ƒˆaè3fxCi‚"P· à€…‘ŒûçHÁArö¸dp'ºA½êÜ„ó[»ª.ߤyFº-Ý¢íûJ‹¢â‹„MØCDÇi… žá`…‚ÿnM¤á’ƒÞ¯Ã>“í:M²;pÂ]¤è ö—ì ƒzOOª µA6mPêÓõõ÷C«_^•¥ONÂâ’ñîO?îûé:¼tØdoIÒpá’ÊXd®ÈÇ.?V÷Õ}.¿ÿõ½íû[Ûÿ]+ëý[a i[´ÞÝ6ÐÿÿãüG¯CßWù+pÂÖ×ý ×W±Òõý}÷ú¯õôÿÿú 5´=±_øÿ¹9÷ècÿ·ëõüÕüþ]Oûü8V–á©Âý‡¿úþ“¤ÿÝN»¸ÿO_ÿ`‹Ü!ð¾üºë·ýü³Žÿõ1ßýú_÷kÿî‚váÿøxÿÿÝÃTÿ¿éìW×øK þ“ßøoºÿôMÊÿØKÙ:ûKüaÿ[ßIÿïÿðBxÿøïþ¿“¯ý|½þ¸oÿþ¯|7ÿßëÿô¿Û_µÿêÌô oý³Eëÿy:ïû4ÜŸÿ¿ÿßö¾ØJÖ½[Tþ¿ýÛ^µÿm}Mï·ö•¥úOuý_^!{azaX©FÚþ”0™¾¡‚ZVŸ¯ l5ýÒÛ[_ûuüýMv›I§±jšPÕ´i¡Qw±ÚLZkì|Cº[KŠb½UÕ+]:i„Âi†“ †% 4Õ«¶)=È£âšb¢ÓA¦ÒmCI6Ò ´Òiêœ4—øˆˆƒ"Lax0¶ƒ0 d-AŒÌ0A„ÉYq¿ + Œp˜¤b¡†˜Aš œR ¢""3¡ˆˆˆˆˆˆˆˆˆˆˆƒ!‚ˆˆÉŽˆ½\D\FµRÈQÿ[ p1Kêâ%Š<·Á׈ì#2ÕŒˆ_ VdMƌђWF‡êØTgi… ìP0uE9öƒ‡'tºwì&nTÎôŽôŠœgñ‘-V½ý§ÚwwH*/Tì0¨Šç‘A2ƒ.dY²1ÿQuÂÓ¿þÔ&EüÉÿÿ%›’”Œˆ:Û½;N‹Ë¶c°µýÓµÓ¥z̯ñqµïM¿ýë]j»Ôì“ÿ§;KYHžšzPDB.‰Ù^Pf§‘c:#‘ªÈÔhŠ|ƒKœ_ÿ¨ÿªçogi?W]u32ˆ`ša ÂA„ È6  BDgÅD%Á(— D-“ÂT‚!fzhœh`Èdš_ëúõëþ@× Dà7 „,"î‹pÂ.è¸`…¢â†‚OŒ"á…O¶×ûA¦¡0ƒ‡÷DžlÏÐŽ™ˆœÂ#S"#M==|ËQo\/¯j~ÚN‚t&Ù)dX;I½ØeÍÓqa“¥ðÉÏz6X(´ll¶& „ *a!< ÍA‚  X3ANIÅ3#9dr!Œ‘›2a Ê@¤èè“$÷"¨Û"Oš‘û_¨a=:MÓûM¥´Ât›d¢“òYWd²ï»‡v¤wW×´]°…„[ºEŽÑpдѣ„„LwiÜC0BÁ8aA0PƒM†'Èá ”0˜"!†ˆC‘è4Dùr:‘F ÔgS:Åßÿ\uÿo¶65úªßÖ©þ¿ÿô¿ýÿÿÂ^¿¿½7®/­CïÖ‹ý¿ õø/ÿþ á¿ßýt—ë_¶Çøÿþ>ßÿéÿÿþ—¿ÿ®ý/úoÿÿ¸_°ÿðKð‹ÿÿ„Xú ÿïÛòÓÿåŠ\0»ûÿ×ÿÿ²~ôµï)×íÿúÿê¿Øoõõ×þþûA·úá.ÿÂ?ÿþNï×ýÿÿýáö`ºËÿòÛ‡½¿iÿývN¿ÿÿûßõú÷ÿKýÃþô–Çú_ÿþ‚éÿÿþÿÿ m†q½/ßëÚ÷­í«y÷ïÚ÷ºöýÿë=¿ÿÿþþå r„¿á½ÿW×ÿÿ× Ÿÿ×Kÿÿéa°Ú ÛI¿×ÿÓa~ÐpÁ+M8j»wëu°Òÿ]ÿÿ_ÿûû^Ö¯÷í+ë¯ëÿ¿¿ÃoßZÿ¹B¿ûô¶ÛV˜¯ÿï¶±k±±L_õbõÛUв?¬Cï†UﺿµÒÛ¯ô»Kµ¿óßÿv¿úÿþÝ®/ë¯ûö¿þOÿ‡K ¿ÿ„ 1 ‘G Ói¦¶Ezi´ƒM6ÐI†£NÙ}Úl~Ÿß¦Ä6E[®ºíÖÃØa-ûn›ôßûO_mÖÕ¿ún—Õ¿ö×KÌÓŸNº2viþÿdêì&˜/ “„Ðdœ´ÕÛ#p•; T6šL&¤„Šè Â0ƒŠtlô¶Ú]î·"ਇ¯tÙ6”0œ]0wÇÝÜ4öm­Õ­×ºû +[¾ÒëÕÕïIµtµûXˆˆˆˆˆ‡Áˆ†DDC+@˜M0˜L Õa0ƒb‚ §¦Ezvœ4£l$ÆÛÚ§õ`Ø´Øâ0±v•„­+‘0Sa—×b¾Â·ß§Òº[öÂ\DDDDF„ ÓX`°Â„M5i¦Å4Å% šì2P•;ØI´Èß™ñQL4“¦˜Ø«M«J!ÚV“ä‚›[lû„DDDDDDDDDF„E„B Ádõ>…&§„Ô* Ä$Ú &EÓj)‘GØ[Y}´ÚIÆšuKb 4 `„0„C Lp˜MAÆÄ&M†ƒm&˜aR_DDDE¢ °B Â~‘"ÿµ-“!þ«ÿëWðÁm&ƒØ¨¦˜A°¢.(Ž[„d­‰Ú^v“;RP¡BdFg¦ šÙl;ïèÑIu 4ÁN˳%<‹(l=:¥‡SPT ì¬!H2œŠrúµI0·ww;Õ0˜LÈ(RœRºSÐ))ÙC(geûê>wRýßp´a£XhÖÝ Bø;þÁ¯ààû°˜Z¤ éÛ¤Ká„ ÃÝ×ÿ¯ÿâ!Ñc{[[m$v¨ áÃËz/¶õý$µz§®¿&ZOÐl–ãàƒÉ:…$ Ô2( tåuÓ6ÐeFm’3Djf·“JÑOz¥þ¶­«zªOÿðB„Pˆbma¦‚`˜A Â„ Á !„Í0E„É”Fè3 á)4ó¥è?ÿ½Roó %OEÃEÝkhØÃ$\QvÐØ ¡ pè·atg á\ð˜!a0ƒ:ŠHè2$)¨Šr*¬¢YŸý­úÿÿ§ •ô¤ôÒM¤ÛH&Òm‘ÛiÃ#‹º=:AÚ¤£cƒ´]´kaxA„Lv7jEŽÂ ç  ‚èã>dæ`ˆAm­¯äÄ`ŽÔS¦a“ŽqÚ0ó¨Î‘ƒ@ÉSŒë›3Æu#¦bQÿõÐoÛIÕ¯WÒt›i÷§þÒt›oJÒÜ0'I¸Nn£eÚ6tlh¸©Bp‡õøB, Á ïá °ˆrÂa 0!ÂýJä°flòÌÔÍFS²XÉy;î½~·ß××õú_®Ú Ÿ¿JéëIÒt'WIÒm]]&ëwkdWi5ƒÿÖš/HÖûKFÇÁ#XhØÐ‹E»C &wAkϹ*hA‚!ü– 2†hcýã§Ôiÿ÷ø5_¶5kþúÒ_×í/ûØJÚ°÷„õX7Oþ+#ÊM†Ié7½a&Ù,Ò¸I¶GdyAÙÿ÷IoH6áì#e;EÝÜ&¶¿ëú­úßÿúñÖ(~‡øÅÓª}?º¿¯V“ú»¾øÿ¦­-¡_µ÷«t¡nÓ_ÓMëÅý¯‘¿tmîèØÙìÞ]~êX—ÿÿïäêòXŸÿý%ãHEW‹i}{öë­}¿¿ëöÿßêÝýêëÒÚ²OÿþoÒuÿm„ßõÿûÿþ¾¾~X,eù{õ…üBþÿÿ÷ïÿÿïÇÚZþ·¯×ë†ýû{®•ú]?OÿmoþÿþÿþÿýWù“ÂüÅ¿ÿÛK÷ûúÿ¯ÿßÿßÛö÷ù>ØÿØÃ ÿÚÿýˆ_ÿÿÿÿÿÿþqü"âõïÿÿï¯þúú/wºÿßûýë ¿ÃúáÆ­zÿ~ö·¯ëÿþÿOþöîþð‚þÒÛ_n®Òþë§ï¿ÿ¯uÿ÷¯þ»K®›þÛ×^þO8_úìz5lÓþÉÓ¯ÿþP¾ÉÔîîÿ(^ùBþëýÅ}„©ÿÛK«ßÝÿâ¿þ×ý}ÿÿöþ¶ê¿¡ú­­ékkÿûjߪ^iÙ¢ýt¬Ñ6·Ù:×ývìWìWõ×Zÿÿû׿Úßî]~ûÃëÿÿ¶m4Øiu¶–—þ¶¶—v’†Øjëí¥ö·DëþÍßdëçOækø+¿ÿõ¿½®ÿÚÿïbŸüoýîïÿö—§ ôÚWu÷ý¦Ã›VZ» C |0¾ØJ„Û[W_¾ÂúOIèáI'§úÿ­ÉÿÿÕ;ÿrïõü7þúûþ˜JÚc¶›IXM­Û"óö.8†Å-±Lz±]ÆÅwl0“ %««i*§jh××ím&×ÿí-÷ýé×û]Ûõÿ÷²uÿ”/ìPM„Âm Å ¦!Âth0›#tÓ  ¶Ó&›H5i­‹b¢¢á ãa„ÑF–B†ëù[$4‰¯ë½µá¯]¥úÝzÝtßÞ¾HE"Ò3O­¯¶¿Ñ1Áa.¦A„ 4 ÁÕ0šh;LaIÁ0½¦“A°•0Ó[[Û -¶WÒv²)†’¶­¤Úþé+›ÛÒù„ˆ!ï† ½¯¥øM_ú·´ŸÖÒÿˆŠ2"""""""""""""""3Fáa27°M27°Ø®ÓtÓNÓˆVØI´›I4Óa¤]+iZÇ ´—Ø¥ Ã ¸Kûµl'¯°aa¬4Øa/¾“ˆˆƒ Á¬ aa`ÂvñjžÕ„áˆLBbk†!Xhpƒb“A´Ûƒ „HÄ ƒB“Tîê/JÒb˜Ø¸ÓX;^""""(èˆtcÄDf¤E¡!ˆ0B 3B Âeeš°Â÷ / ˜A„Å2(ö*´ò ö­?zJô“¤FDDDF„DD\L&0¢ ‘Ä0˜ « *ØI}|wÃB""#ˆˆˆø¯KÔí"K_ÛVKK(Cô— °¢† ƒ i•Á$¸Õ´Å1PÁ$:X† „Âb¨x3ï@@Á0»ˆˆ`˜IÄV2mª–á` ; VvIñQ‹æ‘•jª à   ª ýûõÔ²*,¾'Ð‡ºgjlÊŒ®;*™ØÓ3õ¾âHWûO§à˜A¦e'ký+kÿÐðUûúþ¾dh…ýúûŽ?þ¾¸´é¨;_9”ù-X_×Ô®²ŽÒ¼|Dè±ø Á4#„Љq”’!²>,äZÂT’æ êIÌÔò„u‰TF™/”ëP™ß_ánáÇ ÿ„íº  0† ‚hFÆA“°ƒ3± ‚e>Fj¡Sÿý¢ù»¢ï¨e¨MR67{EÞÑ¡°HÐÑq ‹€Ü:5Â.BÑo$¢œ0@ÌÈØÍ ƒD ‰Ä%¨3—äRdR€ÈÃ=“ öORC lŒDEaN¶Cf»Uü•Ò¿¦ž0ûî­ïI<ÚAÚI´Ò ·zznDxA; ÑpÜ8!h±ÈN-øL´h¢Ç`ša†°Aš†pÂfNÐg~ƒ0A”29žŒKÊ#u".fƒ: è3 Îƒ&2Flój3ª6f£µ5/ÂöýjŸíÒ¦ÿIáïKW ¤ß®¸a7NômÝ‘i á–scT›AÐѱ…NkjÂÝBÕt‹pô-ØB ˜A…TDÇ  ‚‚a<&`ša‡™s!& •ŠHŒ¨²“!™Í™¨ˆlöa_zÿÿßÕßÿ´½[­Õÿ}÷Wô¯ØAÒ„—¤á’t•+†JÚ¶ÈŽäXa&úw‘nÂ}„oFºMöœZ6BEÃAѲ‹†•C‹F†°‰ŽÜ-#C˜ì Â&„ÂaƒBÐÕÿmíWþºt?Uþþ÷]wTß×µ¿ÝýÓ¤ì'a=63ý„÷§I½&Òm’„É\8d®•†F>ƒþè&÷9'i6PAÃ,ðÁ$è Üh»¨FÈBÂ' ¦ÿ¿÷ý¾»ýøý/ûõÝWú¿¿þÿ®®›Û^«ëûêŸIýÆŸ§WhR¿]_øO6“´õx?¿†JÚNû†Gtõÿþëÿµÿÿy1,–]ÿ°ÂÿÝõ·c¡ö#¾¯»û{ÿþ–·ÚµÕu]UýxýïÝ6¯ú¿Ó¤áý§¦ïÿÿëÿ­oÿýpB¾¿¶ýýÿ¾˜°Â÷ïïÿÿïßñŠÿúŽ†× bï¯tþŸ÷×_ûÕ«½ÿÿÛ¯öчÿÿÿ÷¾ÿa?ö¿ÿ}òÓá‚Ý~¿ý~ßïªÿø…n¡ÿñúí‹_רïݽºíþöÒÿÿþÿÿ 0“ÿ½þ¬?Û¸×Úÿÿÿ¾—ü°úÿ–£aþåˆõü1 ëðýwUÿÿ þ*=/ïûÿß÷Kÿ¿ÿÛ¦ÿmÝû×ÿÿ}{áýþ‚-í«ëëå—û`¿ü?ߺÿÿ2ï¿ÿþOùBÿ ªýî¿þÅÿ ¥ÿ_ûõÿ«ÿ ŸÿþÂ[oÿÿý†‹þÿµÿ·Þ—ý5Û~•ý¯ö—Ÿßø«ýöoðÚÿû¯ýÿ_ö¾ÿÿ ·Ã}_ßí„ÿ°ÿÞÒÿ¥¯þûúÿî—kúïþÿþ#VWû'Y>ÿþ¿ÿ¿û¿ë¥ýßßøm¶ÿÿÿÃiûÿó½·M…DŸº{JÓí>˜a-°“v­Õýkö­6—ö•¾Úû¯ïõÕ×úýûuÿþN»'ÒÃÙ:ÿÙ?ùBýëûðß¾ÚÇM4ÛJ.§°oM¥±v”r%Šƒ=Õ‹¾Âû ýZÖ¿Úÿ¯ÚZÿ_û[¥æŠ×ê¾××Ì÷Ôú}ÿëÛ_ÉÐmýþø¦¡šlS"ºl&˜AôìS"‚nÅ4ÓLRl4¤AÝ«ÓN=µbïJ:²üWuj»×ZM¯zÿ *úÝûim¥~ö–ÿõkþÿÿïæ‰ÿ¯ƒ ¦Žƒ …µÓ  ÂaA&ÈÜ …A¦E$Ø„Ó !27¦˜aSiHƒµXv¬mw±Û[ it°ãîÛjÛKb˜µÿØø0–ì0·ëêØKØa%ûhÍß÷öþê×d1aF!`ƒ$‰‚a†^òÄ&˜PÓn*A†doM6)ˆPÂA†Aïv°øm¥oí{ºMŠˆv“kwé1¯}—õ¼'öŸÿuµIÄDDDGaŽNme!4׆E1 i’°•-騄¬&G 4ì&˜M¤ÚdWØZ´M4ᄪÂm*qI×ïbÖÕU´šÿB(Èb""""#,arÀXa†0˜A„4îá…†TÄ ÂŠ»PÄ ÂNÚM¦*Ùá0ƒtÒi°Â[]-'ñÄDDDDDDDDDDC9h!„Ó ½‘¸%ˆWaŠkÚ¥õЈˆqÁ—ª^¾!P!l%zIC b¼ËQ¥fQEJ©%a&ž1;Wl(ˆ-Íc³5´È#;ögtÂ…RÉÿiß-ÒdFv(‰°ê–îé‚i‚fIF!l”²ašÙgnDÓ°ŽÉåZÄ?ªØ(P¡t)Øl¥Çj +®E·|;îßèñP¶¯ë“<ìWqÝ î>®ï£CúzÿùÙ"¼qw­©n"3lך3T*#­©Ñkªþ½þV׊Œ·5gØA„›390A‚œ`‚ gÄÌãA2g…adÌó êi”™¯®ÿ×úì‹w§¤Ü&é6“ì7ª ÃpÓHÐÂNš‹E»h4ÐBÂEÛF‚#l!i‚0ƒ33„‚"LÎ  Bˆ¹¢ˆ³4ÂH"œÐHä_˜2B50E@„0 ¿ó´ŸîÂÕ§d¬7¡÷Dº È®ï×Õ·¬_è6ÂAuh ƒì m§ÿý _¸ ŸÅ'­Ç廌ž0d‚Ér3#ìÐÊ3†hƒ"FlÈfU••l”ä»5GXÕÞ¶ßê¾ÚOé?¿Â&8`„40ƒM0ƒÔ&`˜L  œâ8G˜A‚ `‚OÂ4‹3Ì>lÏ Š33æý~¿ïôÿAT]Ñ¡´ÐEÃBHp¡a  ‡l!£C·avaS ‚‚¬X(A„ ;k˜3ªÎ¦F™­•¤kˆ¦š¤ú¯ÿû ŽÚ ÒõM´ô‚m‘c ´˜a‚H7o« ƒpŽ"wwª6m´\4,2æ|¶¾`ža Á „ àÐyqt# È0D8»(¨g\Ã46gˆè^feˆñÑA’·ÿOÿý§_¿IÙ;Vªì&Õ×Ò}Ã% &×JÒm’ÄìŽÞ.Já’Â;tØd¯¯ÝFÂ5´h¢ì0…„ÂapÝâ "Ça0BB "âÂai„üaS@Ï ÁB Dá,3~gk¯t·®ñzI¿KIþë¡ôµ}Úa; ÷Þž˜N“ÓûúÉ[¤ÚN‚vGbhhØÐA°Á0¹î‚m5FÇ4=m F¿¢Ý„4k…EÃ^á¿ý ¾ÿ®.ôEß¿Ã# O¾¯÷éêªÿß﫯^¾Ý´aõ[ÿº¶Ó ÷§ª“Æ“{¤Û#¶ÐIÕª¦Ù‘ÞŸI'Ò}'dXÿƒ'_Õˆ_]]c­/ø}_ÜWû^ÇâÿÇíiý-zê´­oëWQKiÙ4m&™4všu}i°ÉÚð}ÚzýëŠï ÿ&åk©u[ýùdÿþ¡ÿÿaûÿü;§ÿ«VÅoõ÷ýÓM理›ß~«¾Á$ž†ßÈa:¨E¿þ…´»uÿKÿ÷ ýÿ»]ÿòêûn½qÞÿÆ•ÿÇqÿÿµÿc¡‘Ð^Çúð×ëµßã/ÿ¿®¿ÿÿð‹ŠÿÿûÿK¾Ókÿ,L?÷«ÿêß¿âݸ(¼W}¯ü5Éóþ—ÿzýÿÿ÷þ‚ÿÿÿoÿÿn8ÿé‡ßòÄ¿ü±Ë¿÷X_¸rz“ªÃÁßÿðßÿûö+¶;ý»ÿú Ýõÿøoÿo¬6õÿ·ÿÿõ¥uÿ„XÿØ}má?»ÕwºöûéùBò…×þP¿ëÓ­ûÿëßÿÿnŸÿ ÿÿÿáµÿ¦×'ô›ý‡„ÿÿÿ¿_ÿÛWµ§ÿµë~ÿìÑdëÿ×Ïa¿þÉ×çÐw¯êÛëÿÿÛmúýŠÒÿoí½/W­ýïÿÿíö•6·M×ÚN½Öºö­«×ßþÿþ¿ïÿÞPƒßý½á»þúëü7ø}/ûÿÿöûM† ðÂ[ê»aoÝ[_VÖV¿]_ÿý¥ú~ÿö¤w¯\ý¿¯òUW÷¶P©½~¯_[ÿïÄ4ՋЦ+ÛA|Sh+º‹ØaÆÝ}Ú¯uª~Á…ÿv¿ÖÒÿýµ¿ÿ{ÿçÿ³éû\ÓþïZû×ývEš ¦ºM¦TÓi†M°”„§ÓM¤·Ú]ýú¦Å]ȃ´¶¿Û {ký„ž»øg'³×[i.«ë¥ÿú·¿»¯ö^ÈÜ Âh0“íC1H0Å5 6G ¦a0ƒŠ0œ0M0ƒA¦ÐM6¡­kÕ×Û¥ÚjÆgìU®ôˆPí§ÿðÂÿëÛýoÿó7Pe‚A‚ ˆa0ƒ4L¡Á; l¾Ÿak ˆO Ó4Ú†­„“MZ ¤œ>Ú´š´“m(>-oº¶+ºâì5† ®Ã[ ¾ô""""""#-¸kUL0¢ƒ“MÂbm&¬(¦¢“b˜i½„Ó†’´v’lˆ>ÕŠbÕC\ECOUøˆˆˆ0B ˆ†0B #\Pš /dí~Å 8 ƒk  Ã Ephb a0ƒzXˆˆˆŒ³#Mˆˆˆˆƒ$„!‚a•fB" $ ˆŸ¿&úk鈈ˆˆˆˆƒÐ¯ªÿ¨¥«ì¡%h'ÃJ7±C † #Ëzã²¼ˆE/"™)êv †!«M4ÎÒÙÜã±RáQnÑn¯¨P™_ÌÝ ƒ  ÿÚ40ƒSµFF3½Y(fGÍ$ÊàJÖ“¤êÓTÓí#>Â… ©‚ 2¹¨8&v†UÙTJr°¢·Ø8”!µD.­$ôÛÿ¬ ‚‚¦ ™÷µS´yñÚiÝÞ É[wu¯ÛUu×ZQw\6îÿoÔ/ÿú¾ÞþÓ¼·vCGVu޶½ÒJE½uÿóµ%’ñ̈C)ö`‚î×"ò!—B(3LÐGdt3‘ Ž†‚ð‹äO?™G$\<Á’ Bd7ÿ„ôûëûÏl(CF†Ÿí¥‚ÐTh‚‚`…„Â,v ªh8xL Ða‡ðÏ À§ ’¢èáŒÈŒFf™ŽGHŒÊuÿª™)ôÿZ¾Èƒ°“hØÿbµ “ñª5µAæ‚46¢Ñ­ÂEŤaÛµA M4*a…ó0@ÌØ@Ê' >h)>aŸ yâ?Ys42&g\ˆi<Ü™PÈÉÿú÷ °ƒÖ•ïÖ–2XK,ŽÚM²1ëÐH;%pÂI°`‚7M;M4Œì!h·B.BÂ. …ÑnÁ ƒûÖâgØ Í4Aœ aÄ3ìñÃ8Áfa2qSüÐSž3ã$K83233<ƒÌFg’,õÿZ_÷¾ÿoÕ6Ó~Ðï»ußMÿþïÓ¾m¤ƒ/í ½-EçI´‘vÑ¡ïÛÒ5´[†­;¶ð¨· ! )õ„ý†ô  „2]Ÿ`ƒ*š Cã8Fq‚ß ªÒ èØý(¼h»n"ѭŲyh¸{ïëcFwþÃéýãÅ}ºCüWCoí:ÿ÷÷V»_Ýÿ÷ªoê’º~…é¿Ým«_ÒÿÒmuô»½’„•û‡ •µt›A{†JÈò“²8áÃ#†“VüÂÖE“¯ðÿþ\Á`¿Ô/ÓÂÿkÝGÇþ×ø¡þÒûQ÷µº¨íþ׿ÿïÅ~ßõþ’ý4;é_N—êÿMZÝ7»OÂÃÿñ¥oý¿ÿHp‹úËø\/,cZµZ×üB¯]x­zî»Ý_ÿþ“}m}!®×¥Û~•ëõÓ¤ÝoÖõµý=<7ׯÐwý¿ÿð‚oÿ\pEÆþ÷êjòÀÿ…—¯Â÷Éx_^þ¿ÿ¶ÿÿ°êB¢*ëô+¾ü¯øiãßý{÷¤ºþÛÿô»ô¿Ò­/ízZkÿø"ãÿøEþ÷­õÿÿÿÿ÷É× |žœ.“×ÿÿî£ÿ¯ÿßþúíÿ·ÿíéuߥé~õíÌ>¿ÿKÿO ý}´½µ]ÿÿÿÿa¿‚-ïUØ^XÇýòÀÿÿ¿ü_ÿåsDÿÙ:Ê^ÿŸAÿÿ(_ûP¿_þãcêûÿô¿½ý/m/÷¨ÿÿÿÿü7^—i~q½Òÿÿþõÿ¯ÿ¿í­®—§ú¿¯Õ®—û¯õéu“õQLéÿ¥ìW±ý;ÿÿ_÷ûmV‚ÿô}ÿÿÿÿÿÿýýÿµ´´ž²‡ÿëúÚ]­íZÿÿÛi>õdëÉÿÿüO(_ÿ ú÷ÿÿÿÿðÛ^»ëËwn¿_ÿõÿÿÿ¶–õ¾!1éZé÷ÝôÚÿôÚ_ßßV´ûÚí×ÿý­÷ëóë'[ô÷kÿÿû׸0½-«Sô¿ÊWÿßÿþÅm/·i0“izpw÷ëklC²>¼U—Õl'eûTاª« vÿþÒl/úêÚÿö}uÿõ¯ÿœN?ß„¯ý¶Õÿòûïÿü¡ü,PA„Âa¦‚ ˜ ƒÓpœ4“M4âšOb­ÚŠ[ˆqLCêö=Šÿ°¾Á‚à 7ö© ì%µ¥L0­×þëÿiz÷Ýmÿûzû×iþÙ¢÷_ÿFn4ï°˜XA¾ÂؤÓNá4›% ÂtÓH4ÙZ‘]OTÓVÒkÜAª± ŠbÄ>AüU÷»·ÚýC ··Kßúo oµÛa„šív×ööÒ°ª¿Ú_þ”DDDDDDDDFMPa0B!„B!„Âh0šgpEÐaPµ°‚  ƒ4ÂlŠ:A¦íRqwKP ¨0ÒTàí; 1Á¦Úët¼C¦*!ÄqZ·VÅiõ $Úÿ ßøuÄDDDDDDDD@ʨ/ö^Âh21Á&Èà·m†“pÅa¦!^Òi±R(ö“bi°ÂA›"jƒR ôáµVØIi4Õ‹mX¨‡z±J¶GíVAÛÅb""""""""#40eÁ‚ e'"B 0ƒX@ÂL Ä+M…Jdni ƒ¶°ƒbA´ƒMÓÓ"“NÚNã[NéiCCˆˆˆˆˆˆˆˆâ †DLÖ Âak “„A¦$Ó °¬&ÐA§mÒÒ¡¡F¼~•/¢Eí$’T•ªpÁH ÈPɹl‘”åU§¤…!ZÅ…OðÁ(0L&TÅDE„ÂaDA‚Œ·2Œí:‚¦ × ‡,ãl‚² dÎ,©iÂ…F…&ÊŒÈÔÊANÒ£HªçiÑ„I®v³m¤öS ¤,‚ 1þÕÚ£EmpŸ^º} ôš=~²”¯|l]¤Ÿ›gF@Ѥtdf™Qy«5ÿjžErl?ëâ@Ö<  Œ0Ÿ`ƒ@Î@ˆ”-Ã'œóýt×ÿUÅ„Á ¦¶QpBÓE¾Ë DBSgFSçMû]Wÿ_£cdG="Ã`¬ ›´lt‚xÂxŒ ÁiÍÀƒ62qM#8)ñ’„ ÐdŒÄƒÌ2A&R2IY‰.uˆËµý|•½Ã „Ú[O‡§ –vÒ馑±¸p‹¢á‚i¦„-: …L Á ¸†ƒ†kа‹€Ñ­¦‹EÃ^üa4Âka0P˜L a 0ƒÁ(ÐRxœTBLŠrÜ–„d¨N)"0ûú§_í×õJßïá’s@A„\2N —OI6ÈÇÔŽ4õ"»w´ƒtèÖäG"=ûTt"ŽÑ¯mÚ6A–‚ñ„4-4h£Z pÂ.Þm(ÐÁQ£„Lv0šÓCþ?ÿô5ïIý+úšû¡ÒÝ/JÚ„ë{?²PTã§QIØL'í’Ë×=Ù´›I´ŸJÃ#,²m't›¯]'IÕ&Ã.BѰ4k`Éœ¼ {ÿ×ÿÿî½ÿ÷ÿþ—k^õûþßе­ÿTß´Ýýk°´¿_Ûhj¯µmÒu}&÷Ü:_ØdvÒÒz¦ßòÌ~jÿ¯òõ÷[úÿãÔR½{¿Õ7öÓÿî¿­ïêÝzOOºZU×ßþ»ÛþÂÕÖõvM¾ÿÿÿû¯þü/]ÿŠõÿé77ñ_ºéãøãWûÒôÿöŸÿñëúëêÿÿÿÖÿýÿòËÿÁ~^¿Wÿ ÿÿí×ëïÿúÿÿüuê"¸¬1±ï|Põëÿ÷ýÿþWKO_øE¿ü"ãÝ-õ‚ÿþÇÖUð¿küž]E×ôŸþMÊsÏø]m‡°ñ ëûÿ¿þý×ïÇ_ü ½}÷wÿþÿýºü#Gúõÿõïÿ¡ð¸,8}á“÷úÉÿò…×]~Oßuÿi?úýÿÿøKÿÿÛ¿Â_¿ÿÿ¿ÿÿøEǸ†ÛØxE¿ú×úÚ_Úÿwûi{ÿ”-Òùcÿ·þÖ¿ÿå»Ãé~Ú_ß÷¯ÿÿøAz[ 7·„ÿ¿úl/ðÂ_ï_jÚŸ¿ýýnÁïÿ_ÿõé½}/ãÿûÿÿ¿ëÒݼ7¥ÿÿõb—Øûµµø«A¦Ö—¶«ÿý«zßékß÷_Ý>ïÿÿ{'^å Ê¿ý”/í},6߯ûúì4«M6“Vm+¶˜ý¾ÖÒÿýiÛmÿý}moîžÌ×ÿïë¯Ø[]~¿õÉ×þïŸA½²u“ýþ!4i¦ÂA§„“ ´Öî“a6*ÂÿÚÝ<0•®Ýo÷ºN´ØS×ú_Ú_iZWúÿ¶•ûkÿŸNs~ßý[_úàƒ(DˆC¦2´ °Â œj˜iEÓý;bNÅî’r,x¶ £ô®\iëÃ_~íƒÕ†a…{Û¯øa+¾ÂZê¶ÿÿûÚ¶–ëÄDDDDDDDv!27M27 0ƒdn!„´Òl0’nš}à § (l%i5­§ÓN™û¼TS®’ß±°Â{ '¶¿k¬0“ ïô Âa0™­4àÓL·]°ƒ#$úöJÓQ ‘ÂâÅÚ¦Èá&½Âl$m4Ò ƒ ÓM6˜Ój-8ƒ´®—©ÄìTvÚIñ52(É"!„Fhi„NðÐaIÁ&…¦šl&E$Údq6G *) 'dW¦›MØaƒ¥Rö„"8ˆˆˆˆˆˆˆˆšˆ0ƒÂ@Â!1M0ªöa ÃúéDDDDDDDDDDe¦—¥ëT?÷™ m+I¯Úˆ&ÊQŸ&ÉÁ@)ÜvvÜd’!ÿÔíXTÎðÙ™–ŒŠg~‰ú%dºx`°ê©‚gni™+Џ‚å\-•ÃÉûí2Gm£Ç\'`š‚ š0A‚ ŠÇ~3µFOëwQq§õwûáB,vŒ=4Ó2 µ¿{´>wi÷¤éÒ}:­ÿÓÿQ ÿwIÒv’|8~[ª 8ÿþv3ü|qZú§æã[FIÿá}|ìb;IäË×Qñ„ü`ƒÛ50ƒ63 Ê# üC)"0yV3©²so* —Œïý}UW×ýñiÖ&˜L!a4Â&ì ôÂ!é&vi„;0ƒ(yñO[$y¶kõôýþ¼èØÕ¸ÄîÑ­ª„^8MÇ£CF°Â¢í¡øEÛXLj‚ h 'Š"ìÐgQ eXÈy³:…$ÑNgP¤  ŒI‘¬ŒÂgL‰÷çOš×þ{u°˜AÒl2NƒÕ®Èíè&÷t› Ž‘`Ov‘±† ¨´ÑoL Á<"c† „‚f€êhÍ„΂ Á$C 0DJê¤%Á(„Rd\'„°…‚dg3—Ç¡ ˜djÁ™ÅÙ™óf}ù«5­ôéjÝ5ý—»O««=7 ã[a4?ªM°˜)´kh ú5æÆ(AдlªapªŒá„[†ÐE»EÀhÖéEÃ~-£Eo»¼& ˜& aq…L `©‚eCó60@Ê3œRqIs8Fq‚'Š_8g  ûëýz}®ëû_W{ÿ«}éoá:M®2Q Ú^¶UÝ‘Å'} è ì$m ÚNÂH:A°ËJ.dQÚM¤ðƒ¸pdèN†¶†±¢íƒ'ÃEÛBÓ à†aô[´Ñø(L!­„õúïño¨´¿¡ÿÿ"ï¦þ.ŸhW_øN–í=nÉ¡6—¥¥{×U ÒoÒmwê’l21áÙºjƒ#“a‘Øž?²#´ltáAÛ¢òáÑpÿÿkõø…ÿýoäçÿÝUÿý[IÿÕý}ý÷ÇÅ[øOOº^ÿþÂiÖФÜ*l?†té{í¥û#¶-ôwþY@ÿEˆêùiÿÿNÿëÿã_ã¡Ø[Zÿ¥õ é Mßjÿëwýÿêß×ß^ôÿÖ½ºévþÖé?«ëý?ÿÂ.?Óþÿx"ßÿ·ÿÿ_þ+þÿÿ_Ãî¿ÿ±ŽÇþ?ÿú}ÿýo÷ü~Ÿ¯ë¾¿:/ö¾_öÝø ¿þÒÿôX—ù“ð_ÿÿäêÿÃáÿþì5aÿÿû^·ÿûÇ Xc?ýŽÂßÖÿÿKÿ†ÿè%ÿÿÿÿÿáÿÿÿáíì?ÿ^± ÿæOþÿÿÿý¸jßÿÿØZ÷OþPŸüéìWÿ¥ÿìÿß÷xAëÿÿþÞßÿû{ÿþ¿ÿÿó' ¹iÃÿÿæo þäéoö×ìÓÿû'S º_ÿÿWÿ¿ÿéÿÿÿøo ßÿíá‡ÿÿ·_¿ÿþÛ‡ÿÿ¯û]ÿ×íUJÕ.ÿÿÿÿ²…ÿúÿÿÿÝÝøooÿß ïÿìÿÿöo ÿÿÿøaRµöK¶—þ­ª[ׯÿû×ý¯ý“«']{ýÿÿ{áÿþðöÿÿá}ÿÿûmïÿÿÝ{bwkà ú…ФmW»_ý«_ý&ÿµ´¿¿ÿÿ»ï§Ýëÿ£‰¶Í21?ý“¯ù„»¥ÿúÙ: ‡°ßÿþôa7TÓTÚMZ‹Mcjm/âºû×ü0ºz¶l/}mªûkíŸWÙôùôöhžÿ÷[}+û þ—ßÿûöa9´Éóÿ÷ý“ªw°­4Âi´š 4ÈÞš $Ô4ƒL Ùzi„„Úm%‘r¬Sƒ½ŠÌ,'}ßì;î6‹`Á[[ûÝÿöÒÿÿ¯ÿûJÝ{KÿÿXˆˆˆˆƒ"Âa†Q‚pS„O†w ¤ÓÂiìP@ôÓiŠM:¨âì]ªÇîÇÆÚV¬¤ÚWeþÛ[Ø«¨`Üè‚+{kÿú¶û{_ïû[[ DDDDEñ ,0®ÚdQÂMÂi¦G ›IÚni°˜NÔB†—k $ؤհ•¤Õ«¶Òi¦œ5WIW»µØîµb®› þà ØMФô""$„ ˆƒ0˜A„Ѓ8TÐdµ  Âi¦j)¨„„&›¢šˆR+„0ƒaM4ÛA±I¦ƒ ¦šiÕ¬:«Ø´ÓMŽ-ëâ"""""""""""$IhD#S˜aˆaPálã„ÚpÁ]­¦Û !E¢¤W 4Âlˆ=‘GL/¨ˆˆˆˆˆˆŠ1؈ˆˆˆˆƒud8#¬PB}ÐgtÁlÚEwÒH8ˆˆˆˆˆŽ"8`’×b•W°šµàÁ4ȃ®#¸a'ca·Œ·Æ[ç ™ P )’Ã$£;Ò¡¶(P™ ṫ‰D@ã¼èžC°ƒèÑ ,Õ3¹²¸LŒeA×’ùÚVv,ŽA»§»Oþ0©¦ IBÊC3A „3,ì¯mÉ;ZŽÂøÐýB„gÿÝo^ý¡Úi­ß}°áõÒpÐa5·[ý~ñ“±Ö.¢>}ÝÚÞ¾ºÿªþv)çx‰RÒ®'æO˜"|ÁÆHÌ4wy ÂpÈ”öJÙF­Õ]oIõmµ°íL! ÁB·‚ÂeÅ8afa<Ø ”ì¸ÁD#‘ÁÉù‚âpR0`ä!Ìé’Ž?_ýBé?ýmÁÂEÛBF8-½í¦M]†ðÂEÃZuTè0Bú8xL" ˜&)b’ŸŒã(Í3HDædæj¢ts5iº¨]ÿml?dXr$4›dc¦»ÐNÁ;é6úI;"Â66 Út^5Ø$la“/F†aª.ÃXE»  ‚‚„ÁP8`™›L @;.2šFlˆƒ8Gã2:³2!”VNEí´•þ;úõëúwþž‡¯~Ÿn©÷_dæ­§íéÚ¦Ù0{ß„úý:Wš·ÿºVÃ% ·ÿÿøo“˜^¿~ þý߯ë~?ôÿö<_ÿýW~ú[ï¦ÿ^Õë×ûÕúµoB_û˜zý ÿýýc¡ÞÒÿ òêú¯Wÿ.¯ÿ„Òö×þ‡¿ïµÇûüzŠÿ÷ý~×WÓ놿Ý.ŸÆþ¿ßûýëaû_ÿúÿÂþ¯ÿ|Oÿú_ÚkU^½zûv—ÿ¿ñô¿ûj+R¹šýÿÿßÝwÿií£ëûÿÛ^ÿ·ÿ¯û‚×ÿùuýî‘:²f8]ûÿïÿÑÊ…»ÿ…öþ¿ÿ»ýÓü±Ú_ÿº¿rÝßû /ü »ÿÿoúû_ïýVºð¯þþ«ýü²zÿt˜ _ÿV—¯e ëÃÿÞÅEk÷ׂ8íŠúô¿ÿü7ýûiþÞ—û„\Wÿ߯ïÿÿÿEÇßý{ÿ»k´ÓÚ_äÿ½ÕoÿäüžŸõÿý¾ÿØ®ÿøÇé?õý¡ÿÿýßþÖ_n­u×õÞÂ_õí™÷ûim{mþ“¤o__ëÿ‡ò…ÿÿþïÞ©}ûû?ÿ¿ÿÿ÷Köºn•¤Ú[ï z§_´¿kôÝ{z^°Õ.ÿ¾ÿÿÏ'Û_ùÀ¾Ù§ýWý.ïúô×ÿÿå ÿþ¿ÃI‹º´+‘tnÅH“½¤»|C½Šlº§×íºÔ,R!QmÝ?ÿÓKý-/_ß³E·ÿÿu¿õ__¶­ÿíkø©|qQA ö©­†’a6¶©ÔoM¤¶Ûi,mHcž–¶‡þ¯ðÂÿ§w°Òþ°½žú׿¦¾ïýoÿÚÿ;„Ô ƒ[ ]¦º R Ÿ"ºM0ÓTáˆH0ƒA±„ $Ói†!!ÅßÚ§ÚȰ)q’ÿÅk½E[¥ &­„ûKÿþ×Õ†“k¯þ¹CˆˆÉÔ]‚`ƒ" ˆ‡ &ŸDtÂiÅ j'Ú»kÙì ˜A Âh4Âv–Ò 4Ó¸í6»N©¥«V.âÓm$Ú«‘b¶_t¬üS‹úì-Ýñ§ &dœÿÜBi„ši¦ÛA0›A0š{´›Q ´ƒb“Ý7NئQ Óh1Zi»LA÷K¤ÄDDDDDCCB"3 !=†‹D0š *d¬' ,5ˆ­iÐbI¦Ða2+¤Aµ²7û긊EˆˆˆËn@A‚ !Á² ˆ‹°™¸ã§ú Ò|DDDDDCTúÒÒÿc _JšqVÒ¦› Šê" &c¸Ôd‚q–ål·RÊ…; 2ž"ÑØ;¨Uµ ¹ŒˆgAÇÿ ‚‚eŸ î#µùT^ôîúàˆq̳)BœE#&QO}J⸋¸ppáU0PU"áÏ„OÚ¬­ÿî·";¿†ƒ_UßUÿÐAßÐ@Û‡ØL/¯úÿúO¯!‚wÃNíJæBž31ç ñ™Æ 3"@Éó घÉHŒ<`Èft0ƒ'3£ó™ß"j¿ý?þ“øÕÂÓ ¨A„*i„Â&&a ‚pSÆAŠh!;.2xÌDBqÐFr/‘<Œùh’õ×Wÿ†šFǶ0Á#CEÅ (» m BÑc´htEÆ-Ü"≎BâÁQoÁB 5A©J`ŒÐSAIpæƒóAIóâõÓëÿô­õ²8zAé°þ–“lŽÛ#ŠI¶ lh'¶ªOT†_Qvѱ¢œ44l„L{¸Mì(Aú‚„ 4š'26gG‘¶™"5Zûÿߦÿiô­'’û¤é6×NºNékÉߤ­&Ã%y+a÷Ãi:¸ÒAÒtw5´Í”^?»hs]ÃaýÖŸõ·„[ÿ„?ÿÃÚëºWßäêš ÉÓÿÿÿÙ¦¿Ý{ø"¡ÿÿì&8¦+Ãßþÿÿ÷ÿÿûƒÿþ‚ ðÛ~ýÿßè/ýºÿÃôýoë[k×ÿëíi}î¾s~×4_ïý#O¥œNäëÉ×÷ïÞ–½ÿÿÿìNÿÿõý°ßÚº2?ÿ„¿÷Kÿo¿Û¯â¿¼0•¯ëÝÿp×_ÿþÖÂÿ·[é9Eþ·k¶µù?çoÿîÿÿþŸÿîÒü6ø¯oÿJëüNØ®ÿ ÿïÿþÕŠn»ÿ‹ÕX¨a6Ë®ÒûíŠb¿ívÖ5kmC Ø[ûK÷ìÑ?û}™ýÿßÿÞÿû’Dþ÷Wý“­òt¿ë“ð_ûÿñOïÞ7l$ša;M[Ní¦!Æ› +NéƒiÖôÛIm š-®!º± Ø¯Û }×a[¯ý´›_ÿÕ¶Ÿýû3ÿóéíþ_û_mõ½?üƒAÿºëÊa1Ašh6Fá&˜M¦G ‚aŠ §´ÂA„ 6( Øá÷´ÈƒáÓ­÷ÛkkÚl0½ý§ Ý×ëjÃKµí÷´¿Û]m/ý'I-Òõýow]ö׃SÂ""B"!„„B"'Í „ †Wíl&¢šA†‚i¦Ò§iA´Ú ˆvÅÅ6–œ‹m;cbš«ƒOa„w׺붾ÿŠíŽ]u`Á$Boû{¾î¿®ÂW¯@Ј`˜E`„$i´ƒ8¦š TŠè ÚiŠAí'®Óº±wÔi­¥ UƒÝ=S¶“ê!®‡!‰í/ÖÈý„Û »u¿s ‘#\DDDD0ƒ= Ñ4L Â`°É8  {Uì•„Â䣆 ¦J Ø¨„ué„ 0ƒim2+Ðh0“M„a$wLql_a$éXã¥Òˆˆˆˆˆˆˆˆˆˆˆˆˆˆ2…Aˆ™ÄÍ‹Tâ܆S¦S”€BÁ „ªp¼1 Sb¡2+„Á4 ƒpƒaWÕ!ÄDDDDDDDg¤DD«ÃA‚˰•‚`· ÖÒ9%I(8ˆˆÐˆˆŽ$†*—⪽a…E¨œ[I(`šá‚F@ňÂb’Ó ¢ ¹(Ž[™dS%tdÌ;TŒÉ[;HUö !… …³±<ì‡A’ÀÑ8èÏ UB¦LˆÚ3Žþøj†wIõ¬!‚¦wNʃÙU”ñ&ÎÖr5™{–⋆ÎôTðÐw -‹é°aS uýµÛ3üwzAv‚'–Kúª0î¿ëë®Rò¯ñ§ÆƒmÃÐpîzú¶¶ëý¯«}5Ù\Qc¶ëRÝÆšÐòL³È¡æ#ègW¹;:GX§Óõý~·Ê\®v:Ý?ÈÏ¡„ÐaÂ@ÍŒ& ‚a‡ °„D˜36ƒ±D'‘g'f‚XH™æ‚aÈ™ fƒ(F¡~÷\Sÿõî‹¶1ÂF†t\\:„-áî‹£E0‡›°T0šh˜ì&4LLìqåȆ3FzOͳ£²+ Ç[__ÿÓt)IÒîÈqá‘Å'ôm'FÊ îZ¶t6„E ›‹FÊ5ÑvÃ$él!¢Ç!‚ (@Ðh„†aÎÁžaiˆOweÈ3 Ðdb6d2l«gC#š^Q3±Œ†efȧž^¿_í'KöNÐzzazZºV([JÃ#¸%„²•²;i:N“m 6è Ý˶ª‹N›p…‚¢c°BÛB ìÙ‚ …Ã5 Ì6Ì îl& ™°A„Íbž0ƒƒö3HÁE¨Šä\'rã4dãÌ™@ÌÌ—3¡ªæÙÑ•™H²¿jëïô/V»ë·C°õm¡ª÷k_zo]’€—‘I¿a0R(ðw‘ A¾¢ñ£ca.‹‡a4ki#[ãFÆ´\°›Nz,v°‹¶Z4Zw‹ xL0ƒAœ0ƒh„†`ƒ)Æ`SŒ3ž0D?‘(LpÿQ_ûû¯`¶*¾÷¯oëÞõÚ„KýáßöaÕ¶JaÉ]+VéäqI¦‹ ܇€’kD¢“lŽN í½MpÁ ž’¶Dv“´ÕZ¢ñÅ¡s[a:44\j4é§EÃjpºúÿêÿñÜ~Þ—×´»¥Ø÷¿ý>ßëZ÷»^•¸·M¤ÚMîÐn©°Âm+déÆÐLœöÓý5½ ›Òl2Oí„ÚMÿ%põÉ]‘Å]ÚI´† Ev‹¶íi6Ó†N7P¼–‹ÿÿ¿é†—†þÿÅí|BÓ^ÚOý§_þôÝ{×õîÃÝ_ø®žŸé§½}'¡Þ»÷ªwK§a7ö©:¿ é·ëî&Ã$øE¿„¿ÿÿüÉܺûÿ‚ÿ°÷ÂØ…ÿýëýú¼7õ«ÿ§†÷í®ê•¿®½ÒþÖ¿ì[¾½^¼?½-×Õ¥ö¾ëÓt0‚þÿÿöÒÕX‡ïÿ˜ÿöáü/÷ÿõÿëíúßþýþ„#þ+ýññx«]úïÐÿµß Ž•_¯íÿº×é}ÿþµÚ]6Ýûÿþ‚öÿ-B-ßßúú,WÿÛá¿ßÿßo´¿nN¿øWý%ë ì;ëOÿÅ](ÿî†ÿþ—ÿýáŠü?ä"¿ÿÒÿÃ¥ÐAWýuÿÿÿ¶ÿÿÿAøÿ‡_˜ á?÷å×E× {n©mö |ž%¯ÖÕA[Kßÿ‚*?þÿ K(A·(_×ú_Þÿ¥Ú_õ÷ßÿûýûÿÚ··®ÿü ­}µÿÑößúÿ„[ÝaËôÿÿÛkÿú8mLokö×ÿÿþFmº×uúûÿ¿ÿÿ!¯ý±OËûÿ¤÷ý„ºÛtaë¯þÒ êÿýÓP‹Ž¿õûJöý~µÒµû_×oÿUÿ·×ú¯ÿÿò…ÿÿßýZÿ°½'ü7÷¥ÿÿzOáýºßoý-¿ÿöæIwUþÂàŠ€Á]iÚzÚ¢ $ØJöÒîýëÿþÔóéÿò‹¿ÿú¦×ÿÛK¿Ûßÿ˜³ý{ÿúÿ±VP·(_ømŠÿõ ëÿÿQ¤í÷ýˆ68¨¶-‹Où fEuÙ†•—í.ý†Õ´ßiv4ïéºÿûH§½ý¿õ½ÿA¿ê÷ßÞ¾¿ö×µÒ[ÍïOýšõÅX#ÿ²…ëÇÿdQÖÓMHƒÐa…¶„&¡«I±ÅE0ÂA¶± mŽõm$؃û ««jïÝ…_ÿt¾½ëKý;ý×ßÿíký/K¿ÿ¯úÿö´›ÿm^«k¿°šadœ"Ž ~éÚŠi8TÐb“A„ÂEtƒM®(1A"¸‡qÐL4¢äTäX{iEëmÒÃKÛIº¿ä*†–“i'g¿ÛKõý¨av_ÿÚÿa…þ¯íuÿJž×Ý.""""""3dC8!0 ˆ†aÐa4Ðg ÉÀ' i–÷dW±LS"¬&j6ÓM8i\0©ö­¥šiÁÃJÒºàí$Óm-b¯±R, ؆½ÖÖŸúØMØ`“ †­ZîºDŒDDDDDDDAÄDDC³¸L Âa4Âi¯a0™‚NÂaŠ8„šaˆLSIýÅE)7†M6)lŠôÐi´ÖÐAé§ _MSi4á„¢1QDw±OÄ=[^ºT""""!t Áˆƒ%!†0˜B ²Lpƒ a+pÂTÚi5Aì&jÙ$Ö*šMi4â"½Új“MªvDé¶’UfØDCÂ4ÄDD!c„ÂaS27 ¤Õ„Õ0ªlBAÔ$’I""8ˆˆˆˆˆ0B!‚ %`†Á‚P«ñÇ"¿P³OÒƒÇårzÅ„¸C† µÂDCQÊæfw в¶Ì¾; ”ñI‘O‘3+FgT(P ¡0‚ 0ƒLï·á4[†‰Ž-Ú-Ú4l*“q#¸ww´tm ÃH0ë îƒ;gpezã8¥ÅpOûº6VÕÒÒuwzÑÔTÊé"2ûçi ºn®›«Äqÿ_°P_ÿ¤ë¥®¿¨i„àáúÿúã÷·ÞÚäÞ¥B/»Nïÿ^•ý_ýÄ]ùq“ŠN.`‰™æD3R6gŒ†DŒÃ>H<Á̧—û­{$2#4õÎÅ?Ë ’þšiÅ„‚a   a4Âh<&3æuZýÕ‚!ð3H`ƒ4y¤N2qI¦©§úþ-m6‹wI¢Ý¢î„h»a 7‹EÛZÿÿ蛆M0¸(M0@ÉâæpCHÁ",3FxÍ3.Dif¶tdfžuKúþJé{Èâ‚{dWh'IÃ#‚-´›tll¿"»KdAëÝk® œÂt"×T\4l„C4ÁBa0ƒM0P˜LÙ&gØA„ Ñ„ Â!|ˆs9c GáŸÈfCFÌY3ì†eáž2èz”!¤N³£"Q›!²9¨Ô¯õíü&ÒoaI´¸Mil”%o„ûl ØMÿ¥pÉaÃáÐM¥¢î¨»ÄZ.Û‡CF»‡BÂpÁA‚°ž!a’àá0ƒ0˜L Á¸A‚`S† . &&g…8A& Ò.dqOÈ2‚)D<Á”#fC3«L¡_›Ž± ´ÿõÿ·ÿ´êÛC_OíkÿÿöÓOïûí21é6ÈìŽé7þíºzMÈ;‚ ÇÚ.Û Qvh¸èZ44"ѱ¢íú5ºi ¡ F‚&‚Âh¸„- Ò4S ‡A0L  LL Á0‚`‚`ƒûKcè}q¤õûö\Mý~ýÿúßÕ»Ò¦ƒW´Ó¤Þá“„¯á’Èd­¤Ødn“lŒtÉ^ŸtlŽ)7²8"ÛI¶G[i7_¤v½‘]¤ì‹h¤Û";­'FÆ„”'T^4khÖÂ.Ú…¢Ça†ÐT\bÓ‡ÿºÿÿÇ®?!ûÿûKÿñØþ5×ÿãõÓtÞÞ5Tí :Ûº»MþÓZOM:Ú¿­¿AØN¬ „ßl'n·JÃ$þƒÖ“¤é6Èá²+´ml.ÚAí"þ ./_ÿzþ áÿÿñ ÿü=é¯ïoêÇÿzÚõëßýºé§úkß¿Iû_zý«u_è]]-+K¦Úv¤ôïM×%m'aøDÞÃüÿÿåü/ïÿþÿåÔïÄ/é·ÿZ¿ýûŠú_× ÈâW¤Û_÷½uþÿýÕŠÝ]jþº½=:ZúZ½?uý·ý÷ÿÿ„N>ý{ïáÿ¦X_ÿø¿öº¯úÿ~¿ñOþ!vÓÿßñýÕ¸ÿèPè5ÿðîšJúéµ^þ–ÿÿÿë÷Ð_½÷õÖ_ÿÛoáÿ­ÿoÿÿÂÿø_ù:¿æâø_^ô¿ÿÂýÔ4·KüVÿãQ´-þ–ÿþúÿýuÿ÷«ïÿÿðÝ®_Ýÿ°ÿÿß¿ëÏýü/ü+ÿBEÿÿûÿ þܺíÿ.¢$þ·¯ÿþ»ý“÷udÿÿûe úÿÿ}ý/ÿöØ­/ÿoÿýûÂOÿáþ¿ð‚÷Muü#_ÛVëú~ÿè½u/_òêÑÀŸó‰þÿ[K_ÿµýWKô´µÿþÉÑŒ; ÒÿõðßÿßÛ_ú_ÿ ¾þ×ïÒÿîw×÷_„ºÞ›¾ëÿÿÿÿõïþ»ûa/Û[ÿn»Ký~¼út¿ÿÿýwF€¿ý×÷¿õéýÿÒýµõÿûÿ¿}Ö?دÒÿÃ~ëÞ×ÿÿÿÿÿ°·üW¥Úwî»aoïò_I´w·Mׯÿ¶—¤?ÿuù ¿ëÓë÷_ÿõõÿÛÿÿßÿÁÿ(\cþÝÝÿ¿CM8‡i'¿ 'bôÓ´–)‘^›k Ò}6Ò×^Âkëñßúþqû¯¿õý~ëÿÿúÿù§ûÒÿÓ×óý.÷ Ó¶»]šy>äéëÿSëS¿ïnšlŠø¤Âl ƒŠa4i¦ÅTšr ôÓŠ†–ÚA†m$؇i§iÛWRxiþ›iZ÷éõukéݯ·_ûi/ÚÿºÓ_ký¯ûë×tÚßkÿkf}ºÿY:ÒÓA¦¥· &¡ƒ$ák†Âi=¦“¶bŠŠb‚ÈÝÓA„Ð`›QPkÓýºˆiôÅÚêÝm‘ýµôâï´½°ƒÿ÷¬/Ýèÿ_jöK}°¶•…þÒuí'úm~""""#-¿ †0A‚ [ „gt}ØL¡ÖƒdQÄ0ƒ;b™zKŠƒ 0Á$â“m$þàÓ ­¬Zi¦›Zi¶“í[I®ï‰!•¶ ×}(«ö)Šb­/öX0–à u† """""""#nÂeÇÜ0˜P[Èà(Q1IºlBM4ÙÚ¶!-²1éªvÒi¦ÅH¯0ƒb¶i¦ÃM4äAé§ÃV“¤é§m+OV)Š‘`SúS¢""" ˆ”ˆ!“)1ÂX!DC0˜B  &0šv¨0¶œ0škà ­S];M„µ¨ Ònj˜LPM0ƒNšÚv+M>¡'ÄqÄDDDDDDDDDDDDDDEÅ;A”h0ƒ0¿°Â 0˜LÁ0ƒ ×¥ëð„:B"""""""I `„xÚ ½u§a$¿K â‡ÕNÔIXL/`ÂHqa ÓŠ¨¦› ¨ˆ`ª#–æÝ  Ì”F@ò´ˆ'NÂÙ•c*¤™Ú¤@Õõúé•fTÙ1q’ñJ#±ÖÖÁS°šgte½c1×ÝÄ¥¡vÿôh|ðíSL)ÝØ µ\ãâÐzµ«UhÑõL }uñÇÃUí5»AÃØD°>¿ÿB*#i4ת7U×ÿÎÄ¿(ܘò!i7-Ü@ˆUzñ Åá‰ÌŒ pÎ"A“L2D ¤rƒ'¡`Eaµ5f.Z$†F슮ÕW&4Ö×TÎÃÒnšaÂêa{NÔ ÐaSB 0A‚`ƒ s8xA‚²638 ÎF‘‚$ w.¯õ×_×UèØ2j˺66 Z "â‹»aÃ'é¤kaì!drp˜EÃE¸a M„/A¢cÝÁT´AÖ ›`ˆ“™ŠE2åÌ&GÍ ‘“£÷• 5O\.¶´Ý]é´¶ƒ½Si?ÓÖè Ý­&Ò{FÆ‚ ®xAÜ6‡Ú.B0žÂA¡`ƒ ƒ"Á™˜Le g#ÃÁD&‹?˜g'Œ Ž„T2Ì£q™Õ÷Òk{®éÿzº[¡ý'K¦û§¦õuý¡º}‚ “š)=-=7a‚ íÒN:Òm i¤kh¼»pMRhУe£C+'æÈBÑ¡ám„‹v‹» Ãôh"c_¶ EŽÁBaOapBäy„ fÌáa0ƒ¯×¾†¿ö¶1î•m_þ·¿­?ÕWí ÷îé<–il4'þ­†Iþ—NÝ$Ý?´ü‹ '­Òa²8¤Ý?»I6»pAºvIºÂN™; ´ý Úmá¢Ý†¡!¢ì9®Øl!„ýâ¾Òÿ÷Ø}¨Çè_ÿßÿýû÷MÿÐï«Ðö“ïþ»¿tÂt›dév¤ôý“´“oÿ„Ÿ§Vê + úᤛ Ž*è è ïR#Òm'ÝæÇüÿ–5ÿº¹:®¾–þ÷ëÿÿ¿´½M׿Ô1êúö½Ò]/÷öÕ_Jûÿ_ÇúõÿV÷ßn¿äæöu +ïà ´Ÿßd­%ÿ›ÿuÿ÷V º®X——®÷åÿþõñ L={o¿~øªßÿkñð÷ô/ûOÞ:þê×U¯î«ý÷IÛJŸ»hUÿ »öë÷û¦ýÿÿÿÿÿêÿ Ãþ¼/°ÿ ¿¿^«õ±÷ÿß䲄å wÿ›A¿ìClŽ ¤Úi¦EuUAá6šŠa6Š ´Ç¦šk v/ºöþ»_ÿïXa°­ýß{asMÛ_l%ý½Ã[þÒûn’muÿÿô­+T›÷÷ÿXaM˜L¡Â œ (M`Ó jÃL(M1  ¦"Ži¦ƒ´Ó†·§ÚM„¶ îïÛAq Š`×b¢ãmÝ(¥öÒ^ }ÿ†í=† iö¿ °Â_¶–«ëal$­õumkÚQDDDdÁ‚#97 Á.°BiÐŽƒ6Féøb¢‚D8a$ØÓv´ÚiîCI¤í&Òö+NE†–ÅqEL\‰z[‰…}‘öKa„þBÐS^®¿k±ëÄDDf;a4 ¨Fføa­„Ò|R 0“d­4ê-4È£§t)«Šbi´Má…6‚ ‘^í4Óƒ;i4ãa„q x>•á¤ÃJÒˆjÕzIÄDD5ˆˆˆˆˆˆ`˜@ÁA‚tà„0’„ `ŽŒ0„!„Êì)CˆXal&0ƒ$á4KØa&›Aˆ$äXH0ƒ¶*)І‘^uKúñ–Ɇ¤DC˜1 &ƒ(å¬0ƒ_A…ÔRÈ(/®•tq˜ñfÅ)wa%T½ÒûŒõÕRûI§Bƒ¢nãô¿°H4aE*pÂPÂ\DL†“T¬T|C «a1 ˆ†a0‚"d'qnFv¤d+$úaš}ë–T‹¤ï–P„vÉÌìVµ»º… M–Ù[:‡(ääm–ã㈈Â…c˜CD3³ •\8wí¦‰Ã ÷ßvO×Äú‚ÉÍ×ÿ÷n·ß Ó'F™³ f 0˜A„ aõ†}¦ „âæ 'þÿVïv• M;žá‡A áQpì²k›3QåUë]ÇÕ»²#‰âÕá6 ± »ß§Á0˜ ò! O$ tÔ<è3¨¤<Ù‘DlÈÈda‘FB"|î‘‘žL²#5 ·ß‡`šmt[ÒÃ%º¸tž´ôÂ~š ôL°B pA‚ ”!|C dAPa2´!¤`‡ÖØözÿO·z^“´5ýíG]ôlh¼tkhÖÑpô]æÆšj‹€ÑpTMÚsC¸hh·¢à0BÑoþ÷OÿªØïí}¿b0›I½^ŸT›V©ôk†GEéÒk„Er#´&äAÚAéä í^ÿ§ãº½G»ß§ÒÕ¿_a$ú·ðžvI údgÛ0ƒ¨î“«†¥él?¯·ôÃOÿaì?ƒ^µ¯ÖÿÿiÚïi§ê¿Úëúu{K ¾ê¼ÉÞÿ÷·ñzÇÓm_íôÚÿÿm.ë÷_Åmøÿaÿô|?KÿÿõÅõþ…lñ^×…†þÛÿöðßË/ûÝ#Ë+ø_ÿßÂÿaÂõò1Êo¯µøÿ á×ÿÿ¾»Áÿÿÿ û /îë‚?ý5ò„Û~ûoÿ~½Õþÿûíp‹ö£þqÿö×ûOÚ˜Ãévh¼öÎo÷ßþØKýÿÿ±Z ýÃa'ÿ/ï÷×ëö¿û¯ÿ¹õîP¿¯mŠ÷ÿ½¯ØZ_«i­þHÝëúí¥{ipÂ]ßÞkÙ¢ýìK+'ÿUý~¡kþ¿õÿÿô²$;øúzØÿþ¯í,£uo×Té}_¾Œ#ÿ·ÿº_ÿßúMSM… a…A°‚iÝ' °ºv½}„•µî¿ô»¥ÿ÷Uû[þÿý+A4iµ„iœRqZìR¦Å6«ÅHt Û[^ïÛX=5ÿ3w~Ýëî¿t¡"w ˆˆ0Ž`„0„Lá3ƒ¦›W´Ú Þ ¤í&!ý¤¥ ôl_Ùú•‹Tí; Ü8kÚá%ˆˆˆ‹Ú´v˜ ƒ6´˜b´ÂqI†*ûM5´®ïb؆š±i¦Á„«Ðˆ0Bá„[†œ0­„ÉZÞ´ÙtíŠÙ(J›ÈÞšlˆ8$AÅ ¨‡cÄDDFM,¸ˆˆˆˆpÂfÙ¨&ˆ4,¡Î8A©à2‚I ô‚$mˆˆˆˆˆ‡Ò¯ã¥µÖ— Ò쟣Á‚P­&Å „›PeÈV Dy6 ÎÖ£°ù6¬eTd,ƒå¹:š¶ê+ð7;I˜­"2;5²PG톇ÁAA4ÁMÒ"¹u„Ð;·TÛ&‹%Kª…Ñ•ÒÌÖdY‚fVð@S"ˆï¢ž!HìW%~¿¼c[Ðw>“ë¯a0L 4þÿ¯¿ï»[ï‡ Âÿ|·$«ûÿ÷ÿqÚiÇÿ‚8öëãÿÿï´Ó]?0gB˜v¤‚L¡YÕW’µÿåt¿ÊOÿÄI<©¡uOÂa¾h&L Áò|—@Èc(‹³A(ÌÐŒÅ<òtNˆ4mšŸþ¾¿_ª®ø´[ºaè¸tì!a‡øTÂa0T ó`š }öpŒ0†VˆèólèyC)ó?9‘¥…õÎËGßú­y´Ûé;¤é¿T#F¶†‹¶m í5«‡hÑ@Á x ÌØL ƒ4fp ÉÅCù‚ê4âxJf‚XL‚3ž ò3žfA5f;³(h2£$Ù|'ÑY½U öé¿mÁÒl2x×ã ŽÈí¤Øt©&Ã#ŠM½^îȰÂAѲ‹‡&áè¸a E¾,(! ÞÓ]¶XA¦XA„ ÁAÄ< pͰ@Â| ÓìÐPDTòã' SHÁÅ8GÅ: œ\—"ŒÛ:<—Fˆã$2¢RªQ~µûÿÒzëö?²Ñizm/Xý„õú änÐA½&ÒIíSH8dè^†›¼aª' Ýè·mzt˜Eûhh·§á 1h4Á §A„Ñc¼ Á0ƒ`¡0˜@ϰˆ–BpflÁ"¢üÐH¹°„Â#xýá‚(~ßÿß¿ûV­ÿ[O»ý««¥pƒ×ødo§’¸pÈ㻤á¦G}Ù‘Û„to«I<+ѲÂÐM×"ÐAïªm'´l„]½áNÚ60‚£cBÑo ´h…E¾“^LE¿ÿíâ¿ûµò_þ?ãõ¿ÿǯVÿhméöƒÕÉ—NûTé6Ézo|Ro’¾•Ó¥«°ƒ¤þšûÉE+¦Ù,¿ ´¯½vEˆA¹ÚN¨ ì5‡lx¼0H'ÿûà¿þ ½ý_ÝdéÿKµ Wÿÿ_^:¿ÿOý~¿ôúßÿuúÅm¯7¶–Õ¾®—ÿ°žœ8a>áÿIÃ%w,‡­ÿè±Má ÿòÆz“Oû÷úýºI¼z±÷Þþê¯ÿCÕ¿°×ÿkê/úÿøú¯ïuÞõ~þ½SÛ¾úôþ×ÿkÿcœü"ãõÿß_½ÿÃÿð¼?û‡ÿÿÿþö+×Çô+ÿÉ¢*çŽ?uIÔzÚOÿü{þëþþÞW«ÿtÿá/ÇûÛ¯û\ý†¿ø.Ãÿáêÿ_ÕÉp/ý†ýêë}ÂÝÞ¿×x§ŠýßcÇÿ¿Øð×÷º_ÿ×ÿ_aúýÿoûô[öÿöÿûUú„?ý…ÿ“«á}zð°ýкýÿ‚X__ø|?ïëøqa~å ßÿý/Ο߱Wûé÷†ïÿ/oÿ ÿÿÿÿá°‹ÿøEÇÿð‹{_º_„[ð‹ÿûaóW¯¿Øqÿ]×û_ÿÿ³O˜s‡(KÛÿ_·ÿéxoþ›ÿ÷ÿm'ÿÿ/ý¯A8oïûÿK ÿý½½}t¿oü4¿ÿ­×÷ô†×óN¿ÿÿÖ—·ÿ·¿ÿÿúûa/ÿû¯ý¯KoÿÝo ÒþÿÛÛÿ~ÿoý…ß_oýþ×[ {i~­íä—{4ýÿóDÿ6ƒ÷_ÿ÷õáëÿ×öðת†ú{øÿïKÿü7··þ×íõV)7ˆv]^—ÃOÂþÁ‚\…8þ +ö«Úý¥÷_ûÿÖþ¿Zÿš{·ÿ÷ïûøú»þ¨“þÓÕ“¤¿¯ÿÃáÿÿü< Ó¶“vãPÃIn!¦‘ª|RÈcÖ¬U\_¶ƒ½°¾ëßßþ»ïýÿí¯ú¿ÿÙšûÿ¿õ8Ÿ«[KÿתVýÿÎ&óÈ?”/ÿóè=šmöFé ƒbi²(è ÂA Â  ƒ¶i´áÚkQ_uØ'}zÝ_ÝkÝà mÔ4Íõi÷í…½†s×ïïÕýµµúºa¥Ýë÷ÿoíö¿÷ý¼DC7a0šgpƒ é„Ó×á…» MªVFé4Ã"Ž5i4Û ± aªwëi+i]ñ ?b¶ÂLv±l5µŠ‡Ç '«aö×J*%îÚØ[_þîÿû®Â_ÿÿFã`”XB"‚bƒI¦„²+ˆqI„Â!CH lPA¦›¦št›ÃK;jÓj/¶4ÓbÕ«LR­:LTCV!ûa?ú[ÛT»Õ{úˆ68ˆ“L0B!„s –öõ†ì”ÕCVÓ#tÅ27·¦Ó« ‘½4ØA‘_Ä*iƒØ¦™xOM8Õ4á­ÚÇI¬öÁÚê¨DDDDDeÊAž°B!„,Åaœ a†\¶še˜A„OM0ƒ ¦­’Ši†E ƒM8„Šh4ƒM ƒ>*ª¸ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ`ƒD0„O&Q š0ša5µõMJ-©ÝÉb"""""""""#† GØ„—i®*N"8å—–âQYŽÄ«;ˆ§°PLf¹333i’2'…Uô *aBáAB¥å-\8p˜]ÿÔ ¤fC3$"dËs_-Ïuh8|;¿aLŽ aR0ƒ2'lî‘ÙˆÏ;Ž7¥àã㻿°íxTa÷‚„ 0Aë÷ó¾÷ ìÒ'ý~Œ;ÿ¿þ¾;Né“Ö ŸIÿãÿÿíû•Õ¬Išh}õyoÑ™òs:ÑåFm †D„bïȲ'ÿ×ýÈù'ë¨ÿ$*\Ѧ`¡ „0¡ „Ðy±y13Gæ‘@¥‚$Å'Œ )&Y8Ƀ$d†uúúúþ«Â5°¨¸h4MØC ¢Ý‚ÓO‚i¦ÁB *`¡0¡ ¦ƒ@ÁÊY ί(ˆ×úꪺ¯éõo§FÊÓ"ѱ¤ßµMñú¢ñ¡hØâÑwE݆°‰ÃÓ›Âa0†œ``ƒ4dâ•c'‹‘ ³A” |³B$fãóéwZÍÖœIÚ§éðÉ:\t›WaÛW “­öðÈì–0þ&Ã#†»#½:N‚l2+áa—3c„ØEÃF¶7¦´Â„ÓL! ÓMB°ƒô á&DŽó<ÁxC$Å…N@¥(Säp‰âã$fè)Ó.hD)È¡š D™œº†x'¡ Ï0ÊÕo7ˆƒÈ…¯¡ý®´¿Ç½‡°·iý«IëÛa6­êÚêÚN­ èj‹¶pд]Ñ¢wiÑv¢áénÐB/°„lCMà…‚ƒ=PaSP…„ÁPa ˜( e '„ R†2 ˆyš`ÍCœŠœ›sZkì}½úî›úÿÒn¿§]]'§þºuêþ&Ã%„±‡Ié°ÈⓤÞÛ´“oMXWvnèØô^0Á0Z5ºwšhØÕ‚L‚í¡†*.Úù ÐTMÃ\Z !„ðž‹ ÂÛC[øØ_º†ýÿÿÝ«úÿ¿ÿ×ôšõ}ºß­&á=:MûªM²P·Šý“Â<~¼ŽMµRwIÕü28²;i6ÈßT‚l5LŠ:§ ŽáØZ îѯsC], Á“ Ø×…áÿZˆ_êÿÿ÷ñK×]Ð×k^¿UÚõÿ×ÿëèqÿ¦¿IØOÿM÷¿°ƒm:»Cêòi-:Ü'Ýè:M†JòVÒl2VÂOƒé>­²7ð¼9zÿ–_í¯ÿÿþÿ¯ü/ø®-uÇÿŒ}üuÚ¥÷ÿÿÓ^“º÷þîÝ_ýýÖ¿ûÓÓï ¦ýÿI¶‡„\vþ¿›úùÿÿ¯á:ÿýü//U…Ä*ëþ’õê)½oÜ—?úûÅúâìé×þž½ÿ±þ®ºu½ÿû~¿¥á¿ÿA~ÝWÿÿþWÿÿáð´ òuå¹Ç=.—…¿¾0ÿ÷õýÿêÿ×Þ½oñ_oõî?CþÇ_é{ý¥÷®ÿÿïú_ÿÿ„¿¼"ã¢ßÿÿˆëòÄuý½ÿÿÿõþ^Ýÿÿÿà¿þÿÿÿ¿¥áï¿×ö2¡ÿýþ—÷ßÿ_ú]„ÿÿýøEÅÿØ{ÿûÿþ”?÷þÿÿ·ûÿü±žX°ë¿þ}>Oÿäý}Wÿÿÿÿÿÿééz_ÿÿÿ¥M×íÿýÿ¯ÿøoú_ÿÿÂ_°ÿÿÝ-Vÿÿêö“¶¿[ßÿÿõéþÚ_ý“¯K´»ßþÿý/Jëoÿëýÿÿ¶ÿÿëïýûÿûÿûÿÚû¶¿ö•¯u}ÿë÷û}ÿÿÚßù:ÿ²uÿ“«ÿ´®?Ãÿý¯ßßþíÿÿÿÿ¥øî¿ïÝ¿ÿa2:»X¦øí;ß×UÿÛõÿ´Ý6ÿUÛW_´¿õÿ¿4ýüŸýüÑ?ÿýÿÿþPƒÿõï_ÿ†ÿÿÒÿü?uÓˆÖéãTØQ׈¤ý5ûm¼CU†› =/m;ŠaÝ«a}½µÿm[_½´½«_}-þ×ë×µ$‰ÿ¯ÿý?¿ÿÿdëì~hŸþƒdW„Âa&›R ðš˜Ah4Ðaa64n†8ÛI5‹ƒj!ØN*Âvq_ì0J_wam~¿8õ»¿Ý[=ûkþÚ[ëúÚ_Ýÿÿ½ëö¿ØoþË& š ”øa ða^ªi¦ÂîG Âl&b“A²(÷i…Þ!±ÖŸÅ1]°ÂlT[·Zz¦ŽÿŽ?t®ï† _iëi=wº÷á~þû_êÂ^ëÿí¥ÄDDDDDDDpaˆˆˆ”B!„ ¸8Á „Ó „' ‘Âa2(馓PƒMôÓc«¦I6ÒЦØi­ÛKÚ\¬U¤ÅÚWM­²(7ul‹–!ÿ[—öëõcÖ %ÿ_^±˜MIÁiÚa„I¦È£„dpšb“ŠÐUIÚ´´Ø¤¦Ÿ dAÔTS ƒ PN“‘¦œ5N4Û & š]ä\}¶½,DDDDDD `„A‚ÁB !adêBÓLA4ÐaS Ú ¡Ä ÂaB¦µl+i6¦›iÅ&›Ò 6@Â|4l0AÔDDDDDDDDDDDDDFXÂk…‚A‚U A…í-°¢‚aˆ\²PM¡Ö¿ð¾_º ðƒÄe’œ›Yœ0A‚t&3¨Îƒ;"ìíOá˜L  Ð`˜RX3"Jé§scEãDâ‹·á…©L©3²¶MÚ¼®%¨ì]†êßÂa¤Øh;[]…̵]& ¦vªäØ­~ôéÒÒm^›úh0»ü‡aS ×­Òz}µ¿\¨ÿkÑ÷w®¿]kî“~¿ãîè==§·ˆã×_­­þ‘Eé8¹Ø’[û>ÍFSÄòæ èÈhåéW}¯Nµýké9[ûɲ…+š4A‚ Ñ„ÁƒÓL ãÕ]~ý4—"dùƒÊ³:²5öºúë®°…¦7a >- !zI~þ½„˜AáB0“°@ÉØO* ë>µúu×\ˆ8ÐAµFË#v“{éÿl/Z-øBð˜E¹ ‰ŽÁxA‚NÁ'eÉ"@¤¹ã3#0óÄ™–D ‘·”3Tu”W]a„ Ÿ=°ÉE+éü2xØa0Ÿÿý$ÜŽ(&ù?›4A¦ˆb!)Þ¡ M0ƒÍŠ`ƒ!0A‚ e ¤ì¹Q&)>`‰ä ø™J*~<3ÌÐe ¤ñƒ!‡!"ìøÊ†E†\ŒÙ¡3:/šdFkK¯KqÛá»a4þ¿ÿºm&ðÁ7¥k=8d¯£cEÝQxÐѳL'Dá„=„Ò.ÞÂNh`ž‹vh4B˜! O˜í;[4ÁBj šh0ƒ j0š0A„ Ò@„ì¸Ê4Œ|R¬Rq“ÅÈ>þÝ*ûýa¾ÿÿôžŸúokVéô´¡I°Èâ–îÒ6ú ‚§á#cIïH6‹¶t]¿EÛMXH¼„»lŸZjh„^4,"wCF¶th¡´è· "á„\0©…-´Âh±áB`„0ƒû¯Ç^Âý†uÔ¿ÿþë°_}U}_ý½§Þ›·þ¬2wë[ÒßvGÒt›H6Èã­²,CÒO®“áÞ’oÃ#· Ý&Òt›~N“t‰‡Çv‹Æ¨ÖÓdænk¢á¦‹¿ÿÿÄÛßýïè|û·ªíé[OÓÚJøáþJñi¿é×Jéµ­„Ûõ×»é?µ®ÉM^é6ÉÚn’nµl0L—Y´› ŽÚM†Gé'A6ȱ¦ÿþ‹~÷ûÿ_ÿúÿ¿ãÿ×±¿î´·úMnŸ¯j×Ú÷Ý[ý´–û§§¯¿ñuÝ].žØONÓ¯ ¿{ &Óÿïÿ¢Ýüî÷ûÿßÛå§ï¢uÿ×8ÿÝöÚÿŠÅGŠj1Ó¿þÂè}øëõÞ;ëìŸ~½×¯ÿ_Ö÷¯ÿ÷øAWîûÿï_×ÿ÷þÿ¢u:Öþþ¿ð^¡ï¯¯úþ¿ŠÿkŠÿë vê<{ÿûø·öÆÆ=ß-ÿÿÿ^—ÿúëׯßÿí×ëÿÿ®Ã½UûÂòëð^X÷ÿß_êX·ÿ—[“«è›™ÂT¿ûWú_‡ñ ÿ¿r…ÿù/ïý=}îßÿ¥‚)ìWþþÚï¾Û§_Þ8Þßá¥ÿ…ýÿ·ï¿Aÿ_ØuÚÐoÿÿ¢ëý·.¾àEþév·éú÷ûî’ÿÙBÿ¼¡Búñ݈]׆íÿþ‚ïoôýÿh¸¿ëè/öÒÒýÿoÞ¿ÿÿÿö¼"ßÿÿ×ÿÿú~×ýú÷_õmf¯ÿ>¿öߊ“érÇvý/oÿKÿK¿û/×\7ö—ÿÿÿþoð‚õþÝl4¿¿ïH÷^‘öôÚOíªö—úZ ¶÷þÍ9«ÿ”øx§×¦ÿß׿ýÒÿÿ_^+ÿ}÷½ÿþ¿ïöÛ¿K¯ªÚ¬Sd¸ƒî’ #3IºMºÒ´·Ká…ôµaªzë[ÒÞ¿wî½½}»4Ì ýuݽ}úÿ~“¶iûÙ>—þ­“æmÊÙB·ÿöÿwðØoô±è4Óa„oA«¦¬EC¡„kº°é´¤\u«v”3ÈR Gj©êØTû_ú§ýývÝ-ís5w^Úî—º^º_éßÚVöÚm[3í/ÿ¯Éÿ܈Aò…ÿÓM0Ä$ØL-9$a…¢˜­Š lS±A4A8 †ðÓm}…ˆRöëïÞëîívᄯ뵆†a¶¾Ù"ÿû®í†¯Ói_í¯kö¿a+_ÿ§_µüÍ=½¯¯ÄDB&ˆa†p0ƒ ÂpÂa˜A…{WJÂl&Å !OvØI5ºkm$í†È£ˆklv¶’űQ]*°ÂQv—eÓj¶*Ë­Øì.¶ƒØ«¦*öJI´¿Öëí%ýþÂZZñ„DDDDIÐ˰BQÎóø0„T0›6)4VÓƒ8tÄ8mZQ Ûi¦*ÓbpÂIÆÚIÄ6£O¦!§lwWÒ´ÆÅ6—}¤Úûö_µºcÒm~â!"D" ± &a„Êpš Âõi‘Á1û *ÉBi ×†#u›LBA²8A¦‚m0¤WI¦Â0ÔPiPšb‚ 4â› &›J±ÝZU (ƒ}/⌈ˆˆˆˆˆˆˆˆˆÉ쨈0A‚ IŽC‡ˆa4Âaƒ0š ˜Ð&0˜@Î:pÐaÓ“M¨h6Ta…ÈáqKZIèDF„DDDDDDDDDDDe¨" !„LaK&O…ëÿˆˆˆâ"ñàÁ$ÒÿÅ0ο +ÿ† …ÄC š¬{A§´G-ÊØq(ŽÄÈìÑTgÕ4ÐgkF ¦dµFxPª w„Nˆù"(Š#¹÷zIûçc‡$¾ –ú‘ì‚äØI «M>Ó‡ á„´õ ¦-É 2†Q©Çe±â$Æ8”µã´Â pîT*aTÓª¯÷økäû¸z_ëëøþd…ˆ»îîï×_ÿý|·:ó¹¡Ç¦¥¹¬`Ê(Ìã ùƒ<ÏÅfˆ3æPdÂdš9dS'ýÿ\î©}rOÄaSL(PšØ(AÃÁ4Âa4CŒaG#„} Í‰’aÏÆbˆN(D'‘œðXÙ:!)Ìÿ¯ªúëд\0¨Z-Ãj•Û(B4ka‡A EÇØCEÃÔš,~`©„ &pa§Y#üÜk‰tCI߯®¼2VÒpí Út…†GH{ ›XB ô› ¿n©7„^V¢î‚pË™qCFËn‹‡¸'äTRâ< Á'aŠ ‰œŽ€ÉÆQ31’#HA•³:…)˜Abr:æÙ¨É¢7”gFS¼Ù“:ħ'Z兯ݓ´“n¡×ôÂtž›ØAÿÜ2Qþœ:N“i?M¿î‚y»×ÚiâÓa?5 „0ƒZiŸ0B„AÙàáXDa„ C3æp@Á& f(yCD%¤ ²/bH!¢>K£lêΨŠ"B8ÍFu½>ßC÷é?ÓWz¿Wû[뽿þ“²BWõá?¿´ÕHÞQvÚiá‚F¶¨»jŒ0—EÅ\iQvÓF†XEÛa[´k¢âØl+¢à0†˜.˜ìO„# á‚a0LÐ „ 5ûKè}{[ÿcÞï_}OÿÛëuþ“ÓÆÿü&ÒÃ% 'zIºI¶F?vE‡´ÂvG é6“°´˜l‹ 'i-…A°“¤îóóe &Ùñõ ³„ „èÙEÛi¦‚pª!h·"}~!tºþþ+¯Šëö--Øþ×»ý½W¶ãW~úí ì-Gn¥þ;$tì'V ’Žú]:Oëz¶ÂiÃáþÃ#ô“¤ÞÖȯIÞnXdW¤úü/Ëÿíþ¸^¼/ü1 êt?'Oïkº­/ªÿí{þ÷½]ÿ´=êÚõúOÓôï¿í jºMý0ƒøzð›I„Òü"cÿ×_ý†¿áÂÿ°Â°ù«Ãÿðÿßü|oQ|tÒ×þ±»õzÿk쎂úÿiëuWÿ]t—ïi}¾)tþ? þë¿ý¿ü"ãß„\Û¸·®ß¯×Öý}{k_Šûë¬?«ýñ Äiñûÿþ×Úý6Ûÿc¥ÿ¿á¿ÿømß}/Kÿl%·ûÿÿý5ù„e‹ja”XÈ/Ãÿð­¿ÿø]˜_þ‰¹C…ÿÿâoõô×ïÿßø_ø÷ÿÛ×ô½/Kÿ ÖÛÃû~¿íõ_ö«øDßíÿø+ïû\"Çð‡ëúÖÿÿúÿúö—ÿþŸìŸ®Í?üÞÿ_¿_¿ ¥¿”,7ÿÿ~Œ;[ïÞ¿Ð_°ÿýÿýë'ÿ¿ÿÿÿ¸î¿nßöÞ—ö—ûý´Ÿÿÿ{­zú^¿óÉüâ ÷{ýÿÿìWÿ}é~ÿÂ[×°ÒÒûÿÿzÿý/¿ÿM}‡¯íÿõûZì%ÿûÿßßÿý¿ÛúYßóEÿûþP»'ß([é~ÿúÃïÿ¥ïýÿÿú^õÿhÏ®›ëöÒÿa~)튳 þûKý;m{Om×®K'vïØ_¿®Ÿïþ­|Ÿÿßþô°Þ¿ð¿ò…ÿùBïÿý/ýŽ>ÃëûÕ8†šo«ÆšßÓtž±DiÄ;†ƒ»¨»ìÜwaX¯ÿÉî¾Âö“ßÚÿïÿ¿¿|Ûö¯ÿ¶»×ÿÿµ{Õ5íõúÐi²+Âh6A6š  Â àÕŠA¦›Ô„¦ÈƒÕmaÚÆÒÝ¥ýúÞ›þÃKl%V¸i]¯g¯ýÓ¿Þê´µ[µ¾ï]ÛÿÿþÕÿ>ƒé¯Ñ›×ûM{^Mkñ4©§#„Ðjl, ØAÈáE4ÒcdQíOOîÚiV5cØÜ¾Åv¿«×¾Ó%îÕ×ÑeuØa+M¾Õ†¶×ÿûþÿ¦¾ý/ü—|DDDDDDDDDD0L Â`„XL! œæM›0·„Ó^0ƒ0ƒ?ÓM„;Q´œCU½5ObØî îWr³ˆr& a§âU‘ûJ×õ²êÂjÓvÚOýׯè„Ññ""#OûÓIØi¦4›"Ž“MŠNôÚ¸a-6)4í"i¨ÚdAí1M¤¶4ÓŽ!Û±n•?ú¨[Md1O¡"" ƒCL ˜A¦š &¨4ÓÉZ SXajÚ°šh4p™pš„¦! Âh0š 7dp‚{LWI„á„q„ÓM¿®"""""""""R!EÛ!†N˜aDDE„Õ=27ÂiýŠZ¾÷éPÑD"""""*""""""3{é$ž’$oÅ-%KIãk]$øa"n¨*aRR¶ ¢¡„Ó , ÁDrܱâ>w7B!ž giœ 5†š,бÝÖƒ ˜A„ªW(dª%™nŽÄ"ÎgekXkîÓULϹ°ƒL¬4Œ‰Ä½ñ~©?¡ª3» §kÿiÕÝéÈtžƒÿñqiúkkþY}epi&Í¢8‹MKqÅ(/8gˆÏ0ÍÅÌäN2“æÌ^D™®:k“¥aw_ÎË1'Äï; ýà¨F ƒ ‚a0ƒódpBQªk…̵÷_uÓ ƒhØü8t#»h»hZ-߇t[‘0˜íI²XÏ23¡YSˆÔKRéö Þ¿ª­_{ýAÈqéil‹o÷Iáz¦a0ƒ «3F`ž#„hÈâ”DqHb’"æ’b„ —#¡®%2A”ñ9 4 Šd6j3[òb!Ærë–ú¯²P'M>ÛN¼L%mÚ "í…EÃL(!sD;„,°ƒvwqa ™‡" Ì0ƒ3@¡Mvˆ^0†‡²~[³ ažáqœ`‰9>2dŒÁ’ƒ: Šdè†d4q„Ê ?ïýëý]®“°ž’ ‡A:7=Ò}ÓMC,™xÙ%aZ.®¬$ÓE»F» é°ÚEÀh¸h¸ÐP„E…á8&X*a0ƒCÐa`š ‚ „á„´¶?Õxµü_ÿؽUºWàì–=ü2Y –Rm‘¿¦Ý©+ ›zÙÛ B}ØI>Û.A6N ¿¢‹x{ÖÚ°Se„Â;k…h*.ÚÂEÛX¬92?úB üš?ºöªþÒûN¿´Ý7NÐëµÓû²I,'ÒÙ#ÛW÷N¶­ÓáÁ“„Âa>øvK!ÚKK‘ÈŽá6“‡`&ÙI6 ÿëèœr‡ ÿ÷½Z‘GØÿúþ“wúý{ýÒøö;§§_|k¾ë­ýé°ÂAÕýðé6Â}'¸EŇÿþcþ„Gþÿ´¿Æ?Ûýÿºÿë‹þ½ŽûÃzÚÝz×^ÿ_Þ¯MÓu{ÿõýôÿÿ'ÿm/õú‘Ž¿‡ÿºÿºý¥ÿþ°ûÛ÷ßÿ÷í/±ïý{éÿWj–ßÿö’ÿ¯Ý{®ý¢Å~ßÿïÿ×ÉŒÿò~ ’­ì7 ýúÿïÿÿÃý÷Þë×× ÿÿ¤ÿáŠöëÿý‡ÿÿÿ^ÕoÿCP˜{t]o÷ÿÛ__m_ÿ¶ÿÿÕwÿõrÿ(_ôßÿ÷ûÿÿýÿÿÿ·°éÿÿ×Õw¯aÿú÷þÿ÷üâÿí%ýµßÑêÔSþÿ†ÿÿþ÷þÿÿ»omÛýÿßÛýöÿÿÃßýÿ]þ×Þý~ÒÖí]OO¯å ÷ÿ÷ÿÿOÿÿÃxpÑ.ŸzëõÿïÿÛÿ÷Øÿý{ Ú~¬U…ø×mSº‡ÝviÚþAïý}×ÿûÿýÖøvý÷ßþ“ìWþÿîƒÿÿÿb¤šl]§Óý¯‹ÇµZzí+Kýÿô}é¿ÿû4ß4Üoúzÿ÷ÿÿmºë¯ô¿ÿ"¾H Âr ðƒA„R ôÓh ÂDÛa+{]°¿ïië×_kÙëÿìÿm¤}?æ[¯·ÿþ×þ}×ýèâÛÿ´ÔWm0¿ 0šM6“M¦Ä'Û¥j)Um&]-[[²éÒîö)Wû`Âì0UïÓµ»ímÓ_õû§õ×[ÿû®"""""""&˜ˆa ƒ4Óm4§k (iZJÆÃIa­µvšw Šâ®¤K}ÃI²>ÚMÓh?ÿß»îû«««¯ït¿uâ(ÄEé…´Òa4ئG *(1H:bokJ·«t›PÂMCJ˜¨ÛI°”i¦škw_§"?m+[VÖ×`öÒîEÀÒ먈ƒ ˆ•l0 ¥Ž˜á0˜&ƒ Ú¦ƒOuí5l&*¢º¦)ˆA‘G Ó4 0ƒÂ &M¨0“¢¡¤xA±I­1^ºqF'T""eY†0@ ! pkaEªƒQ[JÂM7atÒ V"""4"""2àµ`„DIDFí…¯\qÅ õï2„Âõ÷ˆayf ‹ã, ÒÿÄ Â]ݪA§ÓˆäؼaÅ.+˜äÚ P TÀ¹‘ (Lí\L2'•ZŸ¾˜]2¸;/‰ä<¼%pÉSúy—ƒu2 2VÎõÌ‚FCæ‘JŒ„dµkÓ†ðôÓôö …°PLÉ.2µým;ˆ¾Ðdϧý|*‚‚ýÿÿLpîû¶‡òÝPŸ®·ÇOÄ©,}öŸôãŽ?úÿXþðŸ˜"@óP¤ù²8Dù‚!‘1Fa—ˆñŸ“¢tNŽG\ˆkœ~+©ùØ_ßÿ¾, ôÁ0˜L°@ÁBa0ša=AA0Aš3aP)£4VÍC4>NZx]?ÿëÚ5ôkhFš/CEÛI8Oà¡ EÄ!aáþL&ƒÉÑ@Èyˆ„Dù¶H5$225樖®õÿÿ|•é½&Ã#²;l‹›­»Ö®é7¢ñªOÓs]Tkö`¡0L Ð4 fŒ Ê6gÎ.g#8ÁÅAÈ d’h# —†U‡4 ŽÈ/(¡ÈñüÏ4Ì ˆóC2ŒÛÈ…˜3¡‘œjÿôêßì*vk²sì”ñ‡„þÉcKI½-'KtŸT]°† í"á„-í4L}¶X(B â6, Âv&a?…/_«ý$õúxA¬ŸõÎâPý¡b¸a- ‹I± ì+„um‰ a&ˆˆŽY@•3%<ìÓ¦ v.i™zº…Á2µ¼™ÚøPRZË6l¬F@j[އAÜ0–ÁI– ”àÞ™d5üvÚkÓW©‘„¾ûBÐ}Ã%Oü‚Õ–rD>ô$Ó6ÍLÔd "Fb(2š‘¸ÐÉxÎ ¨‰®ÿõ+¿§þA‚„ÁÁ4¦ a4Âh É6N "/“Â:ÉánNdd ÐFygÙÔòSí~þýì ‹¶´\4LpÂÑ7h›‘,h¸„,&!6Ü*…P˜&ƒ½x˜2Ü0ƒ<؇™£0ˆ†„´-äílߪëãj› Šô O!z6‚uI¶Dqjt]·††‹†…°•¦‚„N °‰ŽDZa Ð< dâä É$Dâ”F Ÿ,†iNÁ¤ÿɰ§×a6½6 á’~ß8^Âd²é?†HxdcÐM†Jì&Ú¦E‚,8OÂôtkaz‹O4Aîƒ ¦MÕ`SŒÌCHÀÍŒ S6\31J±IÆiA0—‘TÍ‹ƒÌ ‘sìÙŸŽŒêüƒ3¢7š3£!²ïÓÖ¾Ý ]5C»M?½CCôÿjÂa:Þ‚+|%mè×`´kz.EÜ*68¾«˜ì´ÂaS A„)¤ÁBiña? ‚„Á0‡“ ‚a0„ i¯ÿI¯k­ÿ¥¯ïWúioú~»ý.Ÿ×§I·’¶“}§“lŽ;´Ò6Ç5´-‚EãIÑ­¢úØÕ `­¦Ðˆ´Â-ØEÇL"í„0‹†‹£^׊þ1ï¥iøëýŽ?ñþ·]oéu«úºO´éz_ ÕØMûé6Èì–0–,é>é8d~áÃ%–¤qI×H#=ÐAÒôÞ“a§×…ýoÿð¿ðëÿþõüV+ÿkKµ×ÿµõ¿µÝ…½6ÕôßïCé[×Âtž¬2p¡5}ÓÆ­†IõÖ¯H‚ÿ,Oû¿‚ÿ·ÿËOýºü/ÿŠüÇ¡ïÓïô•íúÞ+{×îßWÚ¾=:Zú] N¿ì"ãþ×ß~7ÿ°×þ«é×Ü/ûྻëÿÿ·ûþ‡ÿæÕ¯øë­ûëöëkìY0ð‚ý÷´´þßÿÿßøEÆÿè/Ëü°,ºŸÿö—ÿÿ÷¯_ÿKßúòtרÅÃý~Þ¿¨b´¿öÛÿ¿þ½B ÿmQqÿ_÷ÿûÿþ]w÷aË«òÆÿü·*ÂMë÷Wúaýïÿ…ÿøÿÿcþ»þ)ÿ×ý¥þ®ª¿þ¿Ý;iýâ1òõÿþ‹Nÿÿf‰É×[iLž—þfŸÿÊÿúòÝþ ýÿûiwïÝ?ÿÿ†õ¿ÿýz¯üoþÿïµuýÿþ³Eÿkþ×ÿ·ú6ÝwÿÞã¶+ÿnw¯ÿÿì;Ý}{þt?OÿÿÃuõöÂÚÝn’}ÿ÷V×Û_ÿÿßúÿlÓ÷Êäüÿ¥ÿþâ½ÿõ~ß¿ÿÛd~!¯Å*ÝÔ‚ëû§ðÂ_í¯õýu8½[]-$tÿøßÿ²uÿ¾P·²úûÿ¯S¿ðߎí6š†M†°ÓaÚÚv­E¦œUò&?¾Oä:ÛVûIý„•[UÛ¯?µ]ký¤F'µ÷K_êÍWÿ¯ö—fžPŒaûLŽi´ÔPMˆVr8Ai„âšdAé„ÃI è+¦·Ó†šiÁÄ8h6)<¾<,$‘Öëª{¶¿ºþß»kÔ5þûp»õ{i?þß /žøaD0‚eŽA…™á¦˜ g™”C ¦{J­C¤ &ÈÝá ÓO¶7ãö¦8‘û´—ýÒûŠÿJø­â—_á¥ßkà k½pÂV— øˆˆ¤#9 DDDDDDMHD0…DD0ƒDé‚ 4 +dp˜L&è Óa+M„ؤÓÚ¨i*{K²-º´šºk¾Ew±¯þÅ0Ð{i[Å]WÄDDFcØMN´øj˜Z†ý;h0ƒi*) ƒÚA Ó¤Óa&ƒ5L&Ôi°Õi«[ú¥I8ˆˆ†„DDfâ‡b""4 '…A…í4ÂÚ /ÚÕ¤Õ4vÐdQÂ6! ÃMEô’Õ!0„CC#¬ý„‹p9mRKjD¥±Hv•uµXUV&…A†0† HF%-4LUDL‰¦Ä0QË2¥&ëhÓY7%$̉šÌ§Š~¶0A‚ 2¬gAA¦7h¸ "c†1ÃA™0Ìgc³°8´¼'EŽgz ´Aѱ÷aAL–3µ–WñN$ÌŒD#"fGyɰh–"6±t©Ñ±í¥uÓ«l Âajžx((&ªi¹‘/¥ºAÒºm[[JôÐpéèŽÞ몯ý{®•­ïþîÐAáÃAÒÃÕ}q×ÛÞ{º)_¸Ârª‡oÚyolˆÍ"#R¤6§E¯ãÕ¯ÿ[º¯ŒÚIÔíe‰Zê3F Í‚ œ xLÍŸeÈ)I#„H¢0Ï’˜2@Ê3núßÒÿlÈý/¨¤ê¿¯Â-È‘T[°…èÐ𞉸x(T!„ðšh0¡Bð˜L&Æ¿_­ù(AÛj¿“sS__õºAãI» ¹§`‘xØ(Oª.1‹¶†‹vÁÔZ.Ú¤¿÷Nº{ÊPH`Èf@Œ‡›yÞi tê¿ëêƒ$õpÉ_ÝÒm×ÁÃ#¶“LŽÈòoA;C%m‘¶¿ßÿ¢îž´axA„@Âa›ñ”ã<ÁA™ŒÑ‘ÌðÉâäPD¨eÛ>2ÉófQŸ3Or!æÚg“æ Ñž2A H<†y‡˜y«5#‰sy¯"¨ÖΫÕÓÿÿ·í>Âi®› ¥o§]‚ ¶õÿþ›ÛÕt]Ú¢á„=¦« áÂ-Ø!i„CDØBÁSMT Á0ƒL(*Ó „Ð`ƒÁ„g…<`ˆy‘Á4Bd `•l"3†ˆÝ>õ]}Ž“ý]×}m~ÃOÿÿ×O_ºx)´ ´›dAÞûM#e‚Fͤݣ]m4[°‹¶šË¸EÛºœ…°AP¼:-Ú5ØH»EË‹iè&¾-0…¢á¢ß_ ßûKÿþëÕ§ïõ†ßÿ÷ûºIÿ„›I¶«öúm‘Ž’pÉ]!IºIéÙ.Âkoá Ž-;"ÅÝÞì$›Ò ;Þ–rñ¨eÒm4›A߈_ïß÷ÿ~?Å}°oÿÿÿy‡¯ïúôõíî’^¼!îôá“„· ÜRôõnîÂI÷éúäó%o®› “®JÚM†K?幬aßÁaÿ‚¯ÿÿ}~ì?þ¿âÒº~ǯÖÿÖþõMßÞÖêöŸZþ¿úÿ¿Öõn›¦ßÕètí_î ¾°‰¿ûÿ˜ÿûÿý%ð_˜vÿÿþ½ÔVèûÓÒ ý¤ýõûÓþ·ÿÿkcÓûþö—Wﯿß×A†ú ÿÝÿý§¿zÿð‹÷‚ßÿþß­u¯·ÿŠþ¯ïûÿ¡ÃûÒöýý]ýâ÷k±dWØ­/öÿÐ[ÿ /ÿÿ ûÿÕï„ÓÆ‡ü°;ÿ¤ß.¬ºá~þ× Q¿ÿÿõzÿþö¿kúø…¶ÚÒÿß®¿± û®ÿ¯÷kï÷KÒ÷ ‰Å¿ÿþý/¬"Çû}ï@¿¤˜ó*ûÿßå§ÿ¿þ¿úäĸV JèßOþÿë¿ð¿ÿ(_¥ù.·õöÿúÚ­†ÿÿ÷_û ý½ûѯúH×ÿúþßýÿíÿÿׄ[ØèüÍ?×ÿèÂ_ý×ÿûÕnŸ×í%ÚÞ¶ÿÿû¦?ô¿nël(_ÛÂôÿ_ÿû}ÿÿºþýÿ„¶ÿ¯¯Þûk꿯í¥Ú_¯ÿÓú]^ÿ†Òáÿ¿ýŽ¿Òü7®Ä*ÿJ±iÿÿÿ ÿõ×Ýwÿß ¶ëò›Oó ýëSµÿ¤ÿü0¿Úúé7žmî–«?œM¿¹?ûßûÿ—ëIa…wÿÿá÷¯ëö?¥ÿÿ?ƒN!Úlv”‹a¥CôÖCÞ­¤›d{V!ÞÞ‘Æ“~•½=7V½/µý¤é~Õ6gÿþÛú6¿Ú âß_ûý“£‰ÿß¿ëërÒÏ ßô"¼&E4ÅlŠðƒ4Ðvšh6IÔPNíSˆ¨a'I´»JÕÒbÚßý­×ûÚíŸý}¦ë_þ½²ëÿ®­…ߺîºëÿ￯·KÝ0¡;M¨0˜M5½¦¡ˆVÓI¦Èá&˜aD&)жI†a¤È£¶ˆwÙ½Šuõkb›8iêqzò*~ªµm+¯×ía¥}ºîºêý¥þÚZß׿øiD;_¥ÿˆ† „P˜B!‚†UR v_h10»dìœ]Ý„ÐajÒj¬(&¢ Ä$b˜¦!aÄ ƒÂ 6¢™ñ_µT!DDDDDf興ˆˆƒDDDB" #ª`‚0˜L'h0RÇL&…ûJÒ•"F"""*""#ˆˆ§â˜3TÖšØQRµÝa„Â,ÀAr…XŒ×Pf²© Äv+[ …\C&ʲAÄ^97ÕÛ)ã6F3±B;QÂ…°˜Pƒ;NEuUÿæ~œ8|;¤î™7gdG`â¸Â2¦‚A‚i¦µD'h4 Ј6ɈÌÈlèÈhå“ÿUOÕo¤Ú¶'N“u%zt®K!úvA¶EŠM† ‘a£cF¶‚j·EÛ`‘­¡„^5F¾ a °‚a 0„&4 2BIÙ‚8F‘q“ÅÙñÈ dª&A!„èR <<ÐR|Ù”³$ÐŽ„IŒ ÈA”„C"Fm”DH7—Áš"Aѳ!žU²#4ι.K šçKÒOô=?N“¯Vúì; ´Ÿa:N“k¾ô‚é,21ײ;i8eõ6.ØBÂ,v‹vôhh·aá„,&°CNÂgÁÂgŽÐa0„=;, DsDÃA Âa0Pƒ4ÁU430M0Aàƒ40@Í A„3ñ›8¦‘‚D&¤'ƒ¶¶¯¾·Ö·MSú^½}ÿÚN“Ý:[zMÂiÿJÃ%vM²+·AÕáÃ#†Á$Ú ´n'}á£@vž©ª7h óc»h׆ ˜2í„]´]´9®Á&Á6‚ ‹°Ð´\= °š`…„Lx!a4Á ð‰÷QŠ×ÿÆ£ÿü¿Zkkî·ÿï]vþ“tßM°ƒ²P’[§Õ´'d° ÜŽÛÕÉe’·»H&äXzì–i×­+A?ONm‘ÛIÚváI¶EwO¤Û"8™èØ„ AãF·²eË  Ãë…ýÿëÿëú¿ã.éÕ Ð÷¿±ýÿWÛh{Ý.¿ÿºkiäézׯb®ÂýêÁ$ÞÞ¶•Õ´ûí½6ÂuØL ÚXa\2XKM†JÛéeu1ßE—ÿÿ, ÿú.¾¿úÿÝkâáý_ÿúÿ¾“JÛý7ª{éÓÞúo¾˜ÿýí+×þú½?mW½i;TëÂVÂvë¸ÿÿ_ÿÿß÷/Bõí¯Ë«.¸_o×ýo‡ø®?ÿÔ~‡÷ñÓãûm{q­í*c¿ëïõïªu¿ÿû„Nß\ ¿ÿîÿþÿÿÿÞÂ-þÃýÿßÖJ 8h˜çr‡Zà«ÿÿ ®¾öÎ$¿ ¼1 ë¾+_÷¯ï­ø…Çþ?®¾?õá>û¯ÿÿÿúÿþ¿ýºÿ/ÛûÿúÞ·B#½ÿýùuyuö|±/…öÂÝK1ðºþÃÿúÿ ‚ÿ^½ÿÿÚ½ŠÊÿÿÝÿÿÿýöº_é~ßÿÿþÃõÂ.þÿýÕÿ߯øE¿á„[õÿ\W‡¿ÿþcð‹üÉÿþ‹¯ÿ×ÛUþÿò'_÷îP½ëüNÁýŠý/Ãÿ×ýþý/ÿÿ¿ü7·éøKöÂ[ú]ÿ†õÿ÷ð‚| ¿íÿÿÝ{Z_î—ö•¯õý¯ÿÝí¯ïdéìçûÿÿnþÒïÿ×ëý½ŠÿA~A;¿¥ïûúÿéz_ÿÿÿÿïá­­÷Wí«a/îû´¾ëé°¶•«Uj­¯ÿoí¥ý×öNƒå ëýÿÿÃoÿá¿…þ—ÿ‡ßþÿÒô¿÷ÿûÿÿ»Ö˧VÈÿqQßjÚ{¶¿pÒ°­Ûí…n׿ÿÿ÷]-ÔÚv×ïÛ4W_õßß¿õZ^¥a:\°Ù?{û“ÿïßïZ^¿_ÿßû”/þ—Ó¶œl4£MZkMv/¤Óz[ãb˜‡¼V_Š[ûýë÷ÿµ·ÒýWWÿºóE}ûí6hµïß}PN¯K÷Ú^qþÿ¶ÿýìÓ_ÿ×ýµþÂdn-¦!Ri´ÐA„ÂaÐA´šlR 4ØMUSQ´± 4õ²þÚý˜WZK %ì0¿Ú°a+¯ÿa…öÏ~ÿaoû×îÖZþÃIÿºÿ[ßÿïþ×Ûÿµÿ÷øa0™¦ „ Âe  (&ƒìŒp[ öi¨i ÂݪiȯA§Å' %ãl%~ÅZÅvÙbn«~—¬zžõâºì'ÝúÈy†n» u÷Úö¿¥ö×öÒû¿Øi½_¡aaa ¦ ‚jS…A6*M¦*! Ú†“I§´Ã Z ãMîÚNí%i¨av-~˜‡ÅZñí¥Áò$r-Øu¬C¸†½Ç{ &«Å}—M—Û_¨ˆÐˆˆˆˆ‹A‚ îƒ;ØA…VˆA…jÓ#„LBM5…l%V­b¡‹Q 9é§ )}´„r ꘤ÂI ¦D„Û í‘¦êš´ªÆ¶›I¦Ç0‚uÒˆˆˆˆÉì Á4Daa†  Â¦«i¯ŠaSa¦­„Ða—Š­¦ 6)SiÂlè0ƒM„ƒM„ƒ4I§Pƒõ¬DDdײä Ôˆˆˆˆˆˆˆˆ‰F"&X Âa82ì&Q(E Ða_+™ YëÒX8ˆˆˆˆˆˆˆ¶½ ÷Kbµÿ¨kUúi UÚ°ÂQ kqQNÐl(ƒ@ÁDG-Æ‘ÝÎ̘ ÊÁ’FJâž;ÉJ¨TaÚ‚‚¦ EHí`î þºª–â}õ§§‚’A kGbŒÒ*q6ª ¢Œ—2(Ž™æMì ;J¿‹ûOºÓIª„Âi¦&!… ‚¯ërã´P°áªÝüA¤Máôhk¿þÕÊßí[ˆpû ƒ²h‡Úý}?×ÊäÖÚ§å¸R ×]>úµµÍ³«"±ÕYªó®D~½ëª÷þW3í}ðÿÐçjHes!˜ãÂ`•l Á`† 2 dB$Xy@Ð<Á”F™‚!‘*y†uzâ3)«½/§•Wÿß·]5Å¢à0…¦DÇá0˜Pž~ ¦„ ôBx33 ’â2ã(™Ò"úo­Þª«þÞ?­Úy´ƒr#æ¶‹¶‚ †Lææ‹Ç6Q±è»lXT-í1i®BÑpÂT 2’<\ÌÆP) e†`gÙ9 ÔÁ ºFy)Í3\S ºj¿÷þ©Þê¤á„Ú ºm&+I´+Ò ò;‡dX¤'‘^Ã.eÛT›¹²ÐEÛX!a4[°˜!êv鄵d ‚ afq d䙑œh831IãpŠ^`# ø²'‘GÀÂ!.\‰ûf‚È3ùˆÐ‰³.Úš.!4h¦‹†ÑpðT\4.é×kº·º^?þ¯c鯧õý>¶ïC¾ûÐÚ_¤Ú[k[L é:Né]z‹Öí%²XK!’¸dž“ºM ¿’¶“~ðºV®î“l‹{ )FÆ‚oIØ- ܈ýë×úÿÿþ¿_µü?ãÚýzo[½/}+Ú}úÞ«õÝ'ïßÇIº§ièjý÷ø^þÜ~õ ™;I6ÂkWÛôµÃ$ýºJØOúÿùz—Vë×ú×ÿ^öë¯ñÿ×úŽÆ/µŽ«DWz¥¦ž¶÷k}®÷·«zÚ_î—ì?ýî‡~›­/}´ºún›ºkÿÿÕïÿûßþõå§òë…ÿûßáÖôºñ·Jÿƾ¢+ßWÇ×O_Çü_†ä¿´«×õëßb«O_뿹‡×ÿÿþÿÿÿß{ÿ¢Ýÿÿú&¢Ó«å‰þE°ZØOÿý{~¿ÿþ¿õáº|Vûêÿô.xâ¿ëÝ(þëûþûï¿ÿëm ÞÿøAþÿì>Ýæ+|¢uVð]†ÚMòÓÿõôOOú, ·¾ý_õº¿ÁÅÿ`Šúÿûõÿ±Mÿû¥_ÿûíÿZÿŸõþŒý¿aÿÿï×ÿûõ‚&÷¯ÿú—Xrôáþí{þÚäÿï_öN½oÿ„×û(Z_ßõþßÚ[ý¼ÔþûøA>ô›ÿÿþÿÿßÚ×ÿ·ú.?ï÷þ¿I´¯«úÖ׺ÿôb¿½“¯ÕÿÿÜ;{ÿÐoßúÒðÛoÿÿÿÿõ5§ô¶Òÿÿðßáÿþ«í~Xa[»Òm[Ï; o_þ‘ï­…ö×ÿ×uÒ[4Î&ò…öOÿ”*Kþúõ÷ß¿ÿ{ÿmþý-Šÿÿí¾ô¿ÿ¿ÛuìS &­Ó¥ lWkÿ|ˆ@w^Ú_ %Ú~ßßÿïkM7ÿjêþ·~ßáÚ¹:ÿý.ÁòuÿdêêßýÁ{ÿþPƒïÿßúpš¶M6šbí´˜i1Ûí¤È±M~Aÿk|keö+°šì4õÖÃJÞÂWá+öÖªÿ³4é÷ûïÚ÷õßêÚÿë÷^—Cö—íú˜OdêÍ¿ÿÚ«L1I¦Ó ‚6)Šal ƒb©š 4îí$Óa'Òl_ÇeÓiZWL~Á„¿†“ÿ턯ìò×Ú$.ízívëmm/û ZšV§ŸÚ¯ÿþÚ[¶¶¾¾Ú^zˆˆ†D a2A„8 ÃXa5ëk|R¦M¨H9Ò &Âc††Ú´šÚŠ‘m¬V­ìlZlqy ýûߥzÙuǘV_ö6ÂIÚ_ÚÈRïm/ÛN[ᄬ%ß®œDDDD8ˆˆˆˆÍ…D«ÄA‚†B Ë€T¨ ›Q°‚ ¦¨&›MÓµAÓ¦ÓiÚMZLZk %m(Ú¦8Õ6˜®KN؃ƒí´¯X†Å_Ä—öÒ×ÒB„DDDC ·ta‚ &á„׆zøa0¶¤qX…ÅSI„ÐqH0Ä'ašh Óa5Åar,+0ƒb‚i ÚjÂL&‚Š6ÂVÒKHGaˆå<A‚c„jA¦a „f‰ð ¦U„ÐjƒU~Vš†F8L( Ða[#„Ò± 4ú^¸ÐˆÐˆˆˆˆˆˆˆˆˆŒÇˆˆˆƒ$„j@Á† „Ѓ"¨a*×IÄDDDF£ ZZج/­XYd) $ Á'ÜPÅAXQiÔD›rŽ[™Çâ઺–…\ˆáðpM3$‘‹ žFgj3°ò©öµÕ2ÜHÁAAAANÊeVã‡ýUB¨Pž iÚw8zø‘¬í:wßpûÿÔªåa{ÿ-Ísf|ÉC<Ï$ ² ÈfHF#FHZø_÷ó±›™ðš &aB '„& ˜ Ó¥ ÿ__¡-Ú.!B..Â..CEŽÓ,…'Í™ ì£ròë×ïýu²;#¶‚múM¤úM¤Þ‚ á0˜L!Dc4Bp0DS™Ã8*"yCñ9¦{'àÍ“"„q“äLÊxª¥ ò(ŽõˆÈëy¼ë¿(d[5Y zëaS¥«‡§ß¯Ã$úm¤]°†p¡ ¤Â,rÆ7jƒP¡0ša0…‚ û30C0C0‡Å3#ìÌR€àœö‹¹ƒ3að‚h!áO `†lSâžá”ñv|\œˆLÓ0H—"AfQ›dÉëµí×¥þ“ý â–4Ÿ¶ ÚAøM†#e0Á*$]´]°›Nm0˜L"à=ӛѭ¾m !a|Z.. „= ¬&‹z.Òtà… ðƒÁSµL Á a0ƒ_Úi¯Ú«­vá:¸pÉ]Òn˜A’¯[aéÙi&ÒpÈá½$ò(îéÛÒ>8AéÚ¤&Ùz äoIºI·a#cH:O°‘­´øEãÑ¡…BØ(´[¹¡h»h¸løÿQ¾"º½¥ôëºÕé[îÂ~Ÿá=×l m’Ë%;n)6–£^Ânž~®>ëN“Õá“oL“é½ áÃ#‹R8h éÃ#ŽÚ ¶ŠæoüžÂêÚ_þ·[úÿÿÛÕ·ºßúv›jŸ]¬~«Ö¿ÿï­×úK¶“о•¼'á?i<'õð@ÿÐÓøEŽü/-”ÿü{í.‡ýµïiûëmÚÓÛ÷_¯N×7ý׫þ—ýUÿ×úN½U¢áÿïð‚¸ø_Kÿ¯Ä/ÿúX…÷×¾ë|ò{mlWëñXŽúk«èïÇõ¨kIÿúú ½/Â-ÿÿóVü/,ÿÞñ õÿk^Ãé†ÿÕ¿Âzþ Óu÷ÿëÿˆ\}ÿÿëú_„ÿÿºáÿý°ŒÿlÚ ¾ÿ¾‹×þð 7Rõáy†ù`_ÚtL™=x_>'ìk{uö—¿ÿ÷XAÿþð¿öëöÛ¦ð‹ÿ„\[ü"ã¨EÆ÷ÿÿûZ…áõíÿúßÙ¢¯Í5÷'Òþÿûcëÿÿé/ÙEÿÿá½Ct—ÿZXoôŸKí.ûKÿÿ¯ü ¿Å¶¿¶׆¿ÚG¯÷¿ý…­ÿ÷ï¥þ—¯_ÓûlmŠ_ÿ¥·®’·û¥ËÛýÿ_ÿ~—ø/ø0“ %¯a+^Tÿïÿ²tV¾É×õúÿºýkÞ÷xvƒ¥ýþ–ÿv?¤½øÿîû׿ë|B,½ˆvÅD;b¢±W®¿ÿj–Ÿ¶¿ÿzúÿýo_ï¿ÿßçõ¤´Ù:¿öò„Öõäÿµû”+'^½“¬ ža4ØTi‘^iÓ®×ï¿Û _­Ú÷ß½kí_ëÙŸ{y¢ÿÿ·þþ×Oöì/õ·ÿïk¯þº_´Ú Œp­¦šPÓ%&Ok±»²ê4Aý¶T ÿîÖ×û Úý·M0ºf®š¾Óö×í~ëíì+}¯l4ší{ ëa+K¿a¥¥ÄDDDDD0BB ytšm&«L5ˆlt°iª²-´˜‡vì]¥i-¥Å0aoï°ƒøh5[ ‚)ÝiqtÅC;=¸ý¿b½s öV ì,UªÄEØM^È£„š 6˜Z ‘¾ƒAé¦1LŠ<&qQI±M4ÇiU¥i±­Äv”0©·ÓZm°6Òþî/☫â äEÕHDDˆ°…a•i„L&a0·¦`˜M=lž(P°Ð°šb¸¦GÓa ÓdqŽ!ŠöƒL&G ÐmR ˆA ¦mPL&È£Újê¢"Œˆˆˆˆˆˆˆˆˆ¨ŒDö@ g F¼0˜B Ë „få¸BL% 3X ÂhOá…Ðk -U…Øa´Ó ­i$õT#ˆˆˆŽ"8ˆˆˆ¤""""""""#úúØuI/]U’…a…+”´º¡k‚^däS.u®¶’PÂaZm+UeÂÕ­ 騈ˆ††Gå6¦Ëz” ÍBÅ2T0™Ú£3ŒÙØã£; „Âà ž'»}ý=¤l£eÝÃé<¦Ý(ÂxM‘d@–@о8×WIÕuþ¸ãJ®¿×õ_õ–Í3¬FI•®BI”’Í#®jõþSK0 Áö4 0D:´ h ÂdD`‚"P‰I²8A˜dNh$r(2H"Óšfqƒ!D,ÈÐg&ÜÔ!i¦ÝºJm¤\7·`†š5Ñnþ0…¢ÇaðP¡ÒaW[0Ò6ˆè"#¦Gx£cdWlMƒ-#]¦ —0›ÑvéÂA·pá—Ô^4ÐAÑvæÇá44kƒ‹¶ f ŽCPç§)œtÂm-„’o „Ò}[éÃ% '^ÿ‡I°Èµü4+jð’ †Fò¸©b""@Ì ŽC]s˜)5ïßMêÿët5{­ÿÿ ý÷§áum ž97.#¢ÓL%ý_¿«úû¾¿¯Í:!³Z/—ÌïÃû ¯¥ò4d2$F †gDn>EPe@Ƀ$"C$ Ï("6dÿíÍÂ`•Ȩ™°„”yÞ£!â™BÇñi¶ÕZÂ0P˜D?0˜A Â  Á4O0 ÁB M?¨„X d1„ÌžHÏ Ì f:ƒpš Ÿ“ý/£[EÛBѬ0†‹†tlª.Ú.ß5´]ÃBïêƒÐaï=;T †w!|…Ÿ º‚E9d"Q „Bæ}à IÒl2;jî‚m'ÝÒl28i>®‚¸AÕ¶Gꈖâ•¶°_!îÂßÒl2¸M"&6ÝÝÂ!¿ Õ;bÓL&˜ ükÿã¸z]bÇÿÒÝ5zÕ:õZ[«jÝõúmªa-È`~ûh&íRDHhˆ£¤DvÛuÂûûùpïÿ …ÿý'–ãâþõúµ„›Zÿúÿõõªx ýò*ßtch2i½Ý´EË¢¿ïZ-;aÿx\#?ÿÿ§ ^©U…ÿµ¦¿ëïû~ÚÝo½=m¢OZß§d ¹·!‡ »·Ô; Ÿïûý†ÚÛøEß/ÿúÎ-Ð?á„ þ;}4¿ÿÿ¯þ»­{÷¥ëo­È êÁ0Ÿ÷×ÿöÒöÃoõ¥éÿ¯ýûĵ¾ÔL=ÿõýßëU}µàß®5í4ÿ~—ý|VØv÷ý/_ûÿýà¿ÿmª@®¿ÿÿúÿëèv–”Akûü6¾¶ÿØ^Pœ=ëévN¿ÿýX_Þ»bXân¿ÿþÿÿÿئ4 ô:õ¯áŽ­vhŸôjú˜Û1½u_ÿ¯ÿÿ“OÂ!#ÿ÷NÒÿÿÿm*ÿÿª¿ÿÿƒñín½.[ïÝz¯{i^Ýyûÿ´þ“ÿýô Å?ÿÿ÷Rg_¾¶¤2ÿï·û $ë¬Kaz½6Ö÷ý80¯ºúüKûŽÚÒÚëÿý¬1_ÿò­r;ä=™ÿ釮ÆÚKÈ?b¯´¶ë¸‡q Š‘aÚZÝÿú׿]öö—‚kÿÿ\5ûÛÿÖz×ý¿%Ãg ŠA§h6¡„­ ƒb“ ȃ ‘^Ö› $Oÿï]mÿÞÛ]a,­_ÿûüÿK]´ûûÿ¿øi…Ý«QLVK°šØTa(bÛ¶¿ÿµ²ý½úUAÿÿÖ×ëÿï‡ÿ^¿oüDFl(xˆˆˆˆˆˆˆˆˆ‡¼~ÝqlOõ†}í´÷¯_ëïèŠ ”ÿ»TÙ×_õÿ íúBs؇Âm¥Ãb•bØ­½¨‰O_í­l'ÿý”a0ýõÿç?ú]5ÐlRvÒi°Ý;kX›A*ñêÚZ!„ì/º}í„ÚjÁ7Û'»û_L?dL¿Hp „Ã&ÓIÛm&ŸL6I;¸i«i' b‚µA‚úà í…|ÿßNÃí¿a$„~M2 ´W´ö BM0›h[°é;ˆv»MEñ;ÖÕ7Øgˆ0B Ð0B,…‚U‚dÇ.i¦ƒ!ì„¶Â{ $ᆦڛO†Kjÿ^"ÒV?b¸ˆˆˆˆˆˆ0@°`„Eð îa;m{I¦Â¦™ î)¦•4Ó´á­þÂâ8":`…Á‘Ó Žšh4øaU0­{Ub“ x2ÚY¨ˆ¦"&mÌŒ©4L ÂM~íl/ˆêT"""kƒ9TC¸&ƒ þèXˆ™DN¡ÿÕ\Dà kýŠa¥ý…çeNñ”슒Äv%v …èƒ5„Ô“rf^ /aïëÄKrødñîáÁøýÇr(¼›,Ÿýý|Ë5ÿÿú¿ó½Oý~YR¿~Ÿ¯É½Š…"B„ ì°ý|æ\ÏŒÌgÙü ³B!…)Å@Ïfñ’3C"¬Š3y©©,f¸èò^%!ޱÕa?é jƒ;%/O U;PP†aQc¼ NÁBΣ<`ƒ <"%’²^Xá„Á„›Bîöžv$ß„4]¶ª/(ÖѲ‚Á*.Ú.F°Ð°‰Æ¢Ý¢ã£EÃa Z.B¾îúv¿êô›zN“¤ôôÈǤdvÒi]‘] é&ÐM¤Þwí4›wW-—îþw=ì‹~žhi»õÒµ×Ú U´õ ÚzÞN—ÿîÉc –Rl2N°Cïþ}NÌ_ÅjïZ_Óßâ¯^ÿ ÕíVÕû÷öž›¦ètLuïßWÕ?áRö—ñ¯c×~½ï[tÕ}ÿ¯èsëÿM/AWø.·ÿ_aÿý⟥ÿâ?·¿úë×ÃM.úûRÓû×K—¯¿_üýµõáÿþþ“¯&ò1¥^"»&¿ýí×ÿ°þŸß˜ÿû¥|.Ãÿÿÿùnd‡²By[5„΃Ép†f¸ªû_¿÷þ¾ÿºAWÿþqÛýÿýuá†FÂDsaPeÃÁs±QM º…úÿµÿöëÿl$—þé?¥íÿ_õÿ °¾ƒPŸq "Bd.üBœZ À‰Ã#¢.:ŠNØŠk á¯éŠÿðß¿ìR_ßéxoõÿ¾¿¢.6A¤D†©û…½5½ ?È0q "ø0_­oÙ?{þ¿0à’ÿßî¼?ÿßÿü7¢ôÒA´AÇ„BX{°Ñ m×ípƒ¼ ü}½ûÛKÍIþëÐCÿõi9:_5§ÿÿÿÿÈ~¤ïI7!:‚÷á4îè­nˆ·ÑD#¿÷¯¾ÕµMïn½ný½ß†¿ï®ºM¥÷þö'µí'ÛùÕ…î¡Ù ¢é …¢mØ$ƒ}«[i±PÐzNa^¿!FWí:ºl%kßk×]ÿÿÞ—]/ëßýßÕô¹» &ü&›h.غc¾5m$Óƒˆv›öÒŠb¾.Òµmyq¯úþ·^÷Óýÿôÿ}ë¸Nõ~ƒ6+6L&*aŠM;dW„Ói¦)©tvdAÜTS $›V¿­uî—®ÿÿë†ÿÃôº}]aˆeØ a.0ŒÐ`ˆh5l&¼2N Ã4ÓIÅ5T„>üAõãÐÿ×þ †/þ¿â""""""3""""" !un/äØÔÛ¯ÿ÷ÿaÿ Pkúߤãí¿_ÿúÿÿáú°|~ÿê»°Ÿ…ÿm/äsð":ÿ×öÿ¿¿ïÿPÍ`‡„BÇþ?áûi~ßá¿«_û xAoûÿÿ±]íÿ|…ÿö+úZÿO!Gý~ü7ûïÿ ~¿ýu¯Â!ŸïøoúúðÂA ÿû{ýì?ôC‡êsüÂýwüSO¨_Ói÷[3á¿Óý0ÿÚÿˆøƒÕî­[ ÿ ïûý‡Û$/úú·vàØH1+õnwáoÍÿaìNÂÿÞ4ßba¥M;D2ûÄ;ãûðœ0_ÌM×öì;A„ì$ÓT/âKN,%b“V6×û!ð‰i„ÈW" ÃAã„-nìU&ªké°‚ò$Î茭LìRᕃD&rˆ`ƒÌ ˆAZt[샎A4´ÓI ðÅxA‚™’aFâ°EÑ)×/šI‰r4Dxˆ\DDhDDDDƒ Ó2à “9p0šaƒ ØA‚ôg„×F‚„$µ†`)áTh3Óë¾""kÄŒÏÍPazNÐ}û ¶Â Ö„_&å%J‘ xˆˆ‰ú[»«‡dù„méªtš¾šH‹­$ñüJÚ|ãŽáºmÞ»Ý}ôëÿ­ú“ÚMíë¯~ÒZAuýÖºû¤ÛzÕúøÛTµý}uÿ¾ë׿ †IÒô××ÿI÷Öý¦!BŠðˆZH<NË‘ dœaŸ RsÆp‘ Æ ŠA Qì¹ ý½/˜õj°¿ ‚kń„ÓF†‹?o  ÁBaw¦ÿÓêaé}7rn %ƒ†Dhá“9xÐØ+FƆm'A÷vOÐDíÆ‹¶ š€¢Ñnýnõ]ºõø‰,^Õ0Ã#É^¬21ÒON“{»†á6+h&é…#Š ½}ú®×é¾?¥´5 Õá ZzMÿº·N¯ôÚMéo§ÿÿÿÕêÿ½|Zýë«úŠû˜z®ézWÿïéÐê6Õ÷þ¿ßë°µî•ÿ«ÿ÷ÿõ‡ÿê·ëèp_ïU½ÿÿþX–XÀûûßÿÿêNª·ê½¯ØOÿÿé}ÿ×ÿÿü±EñQ^ézÿÿûöÿïÿÿÿÞ·®ÿëÿÿþëÿ¿ïÿÿk]çFÿÿûöÿ¯ÿÿïÚ®½oÿþP¼Ÿ8žÿ¿z÷¯_([¥_þ“ÿúÿµÛÕßïÿÿÿ¿÷×kþ¿ºÿ¶—a/´½uºûKý°»io[þÝý6ÒÝ5ƒ¶ %tõØ[.¶×Ûþøim¤Õ}zWÿ´“‘o±ÜUí¤±;m$Óm+‘n¬i¶–úê¿ü aŠ ÐA Ú6¢˜ ƒdWNbi± ôÐl ˜bºPƒh  &t¼2´Õ¨A„ ‚a2‡A„îØIí[ §«{Ný®""""""""""""" Á 0„DDDM}Êåyñ¨A gk/ïªi–â7ï’@‰ªaïÁ>ÎôS+ˆd©•dX½ø j žW%¦šgeÄ ¸ zyØY…M0¯ðž¡<& ˆ>˵ӿÒk„×Á¾©þ®ºªzjƒÿIêïÓõü³‰ÝSÕUUUBkéõôõÂzzÿí=%ÁU?ÿÊø½*é©\¨jª¶—”Œ&eìȈƒŒ®~º® ¯ëþ*¦ [U×+‰Jª®¿ûw¨õõ¢¸iië¯ô¦œ9n=ÕR\.«÷øä­tÂu×ê¥uÙJºëýâHBw4T—ôA¿}pª¿Kþºªÿ…ªÈ(ÎWN ´º¯þºªá­Âý𗯢 ½]UqÒ %XZ„•QxO^@²q“ŠxÎ@É@¤ñƒ:*@ÌÆfgÒ0gBÌ#¢6dŒÁ Ôì£!³ª6ÐdƒO6Î…Ò^¡%™ . •uÁQ¯„Â`¡;Â}‚„Â, a0ƒ aóP@Á4 4 „ý/„–ŒƒUKú¯õIѱ¸tkh»Æ‹º;‹¶áâÂ.Ý¢í„0†‹†­EÛBÝ âÑc‡ÒTº (A…¨JºÖ¾/éºl2VÐO¿·nÈïO%”›‘ȃ´ƒ û¤Üˆö]m—B7h åqUè%¬%Âii.º_ú¾ÕêëÂÕý×kjÒë¦Ã6A´¿äØa7Óðƒ¤åq³>Ì¥éV“^ÿô¿}þ–þþ®µý:¿«×O·¿õuë}}…_ÂÈAý.D5‡¤’þ—ÿccñuýmŽÿéªo÷ÛIìýúõú /áT*úA-R]m‡ô!}xx…ÿÇÖûÿ‡ú¿ë¡¸d­ô‚Æ´Ífœ]*×_ü;ùj_öÿëÿý¿ûÿÿ®¿ÒÕÂ@´¨%ëõ^ÃaúAÿûÂ-ÿÿÿïðÿÿÿùk–éý%!Gé$–¨†fŸ «¯ß¶ßáÿ°ð‚ÿÿßÿÛÿÿßÿþ¿×ZkZAj¿_Û ûiáô»þûÿûÃÿ÷ÿÿê’úõMúI~¾¼;¥ÿ†õëÿúëü7ý×úÿÿô©%T¿„«ú¤¿ùô7‡û'_÷iúÿïݯÿ÷¯ïÿUzUI*p]uýkþûþ¿þ¯úæ‹ïý|âßþÿòuÿøþ½Ñ_Òô½_ßÿiíþö®¿a}þºn·þÿÿöÂÿÖ‘ ?ªíUKI_ÿWM„ØîOì ì"‡æ„á„×b­m+]]oïtµ·Jþ_þ¾¿ëúýWÿ¸k|[\CUc±¨â]¦þÚZV•¥z¶GûIy6Gý_ð¢•:ª„•¥Õ%ë¤Fu„⢙ì+dQÒ Ši‘ÂdW 0›&lTTS $ƒŒ Øi&›L0”a0›_û¥®é+}uõ^~CÁ„ & ÖÂjA’pŠCa0š Aš 4A… aE+ îÚb˜Wl/ÿ!Gü*éaëÖ«ú~""" ЈˆˆˆˆˆˆˆŒ´åÈ !`—_ÑØ ýzêM®œ/×ÓÿÄB ?¶Á'\/Uº§®½kô½ì/¶¥ðI5JÃׄ½V«éx‹ûöà }+ªZ¥_¥úñö²}C„©:öÁuIWøÿ²V/Y¬ý$%×lþ¿é§ì‹zG@é_^ýXé~—é û &šOo RN«uÒ_úÿ Ú©ØÆGøt–ÿ_ì4ÉzÈ4 ì€Å^–•UCÕ-$¿ö˜D&¤%7R0!ÔR 4) m¤¤¨ÍgT×Ui}þÖÓ°©Ú &©Þˆ]HC°ŸN©YPÉhÖ•~¿°ÕvÒUµ ›}ªkÓ^6@h5mâyQWý»× êá¥êí%A0ž˜(.ƒ¤ˆÀ~¼É,ìmý=n“ð´½U5ØA­SM†(%A?5üA¦ •S%Ú£"#±ßaÿªôº¿Z®ãêl(Ipšá:_ ¶Œì-á24œ_¶©%úªü=u[¤´ÖÓP’„éBëáÿwý¦¿j¾4—TÛZÖöºUm$—^—ÿi¤ëv˜YnN'\7Ò^º…Òn´•+ k«j½/ª_¸•$8ä »{@¡>Úªªô’¥·­*»Uªl0ºªz®¿ªêdüHü:ê©*®ªÚê©â´ªê’áR×ÿ]Õ=ÒWûr Zת J—UõIoU¯H.¿­ê½êïÃÂzUaÒ ¼Ud3Uµ¥¤›Tµ …ZU]R_"¨×’èë#RÉedœKÄjÈÚU]ÿI“kªÒ …®‚Tƒz¤z«j¡uÒ_¼¤D¡n¶`š ™³àà„BÙ3ƒ'a„ò¹œ3ãsAQ ÆA‚dƒ%d¼ô?ƒË–‘#$".Kä¸8zÒIAé%Z…¥RTaÒT4³«ÕdxtCgkÖ•Uka„,(L*.Âè¸mE¸a  5›¼ ÁPa;TÐ`šz º5øMºþº×ª„’D\ÕcÁú mI%_DßþDv‚ø˜q<:}gêM²þA¹vla(ÙxM²E㦚V ;TÑ¢Á|&ëªú]j©j ·¤ªy*J’Y(0ð†AxÈ0:© _ ’_a=Xda:¾Uøzvt¯ “¤›ÕÜ:M†JÞû[µ%mðÒM´WSÕê’IRªJ’Ò$UuT•5Õ|‰ºIh' –´‚}«VèawßéoëuÓô?÷ÿOïtý>•¤ÞÒá_õKªý*T’L:U¨Céj‚a¸H*…õéBUÿK¯ßñõÞŸÖú[ßô›¯×ë½ÿEä¦é*­V–’KªJº¤•*J’JÔÌ&ª•*T%ÿ÷ö±_Hï÷øú_ÿ¶úÿCÒþ­úT’×^µÆ­ë…]%¥ ¶’iUkK¥F…Kÿÿ¸_P¯¯ÿþ+ûü=?þÒ¯§ׯ_]UiUUµÕUUu ð–´µÕBª!O_ÿôð¿@‹«ÿÿ0È/¯íÞ—û÷.¹ñ¿¾ªZ¯Õj•]%Z^4’^º®’KÁi4¿¯ÿÂ.>Aÿÿ¨EÇÿá½ÿö•}ÿ×].õZIR¤¾©-RZï¥õôºH-Wÿ¿ð‚ý$Ÿ{÷ÿô¿ÿ Ú0õÿcÿ_õÖª¿Zªýu¥×® +it½.]/ûî¿ëý/ÿïûtïû êëÿOëþ¿ª×_ªô¾º¥I$†µëZê•Uj¿ÿõ¯é/ïZÿê¿ßáãcÿiükúþ©*­zI*©é-$’¯ëºKê–)RéRÿÿõþ©÷ÿ²uÿÿ»_ÿVO÷þ¾)R¯õUä3]*¶ª§¤©RƒWÿô—éiÞ¾ÿõ3_}×½}¯ÿמOµþþ—ÿÿI*\,uI%§¡ª¦“üôµIRÃé-Wýµúõô–í÷õµöÂO¯¶¿½õ¶¿þC’¤5U¤µU]}uK¤C5ëý*_ }i/ëÚWÚØUõˆvGÖÒíÒ»l'{¥÷½wôœJÿè!ý/ø×I%Dà© «ÒªHƒMºõ­i/¯U=z«i&šÛí4>;l%{ %M®!ÁÝ¥­®üï±Pwþ—i,*AuI/„*µÕu¥ª]-%ªkT©" þlRh4lá{#ØL1 i°‚ ‘ºp›h8aÕôAáÓºþ–ô’T“uÖ‚Ô‚TC4rKUU –A|^¿Ò¢ 9ë¬%¯ˆƒ""Áˆ†0„0B!„"$l Ó ”<0¶Š§°Âö°Âa7Òã×ZUIV•ÒJÖ©%A Ò…¥Ö—¥Uô¼DDDDDDDDDDDDDDbר^µ¥ × ªZZJº¤°¿ZT•%¦½RTý¥öJ5U¨ô£Jµ¥ªÒ]-%×H —a:I%þ' ? ê .•%´’†)(õZˆ ºúëV’«^©Gâ$‹Èu¥i&©pÍA²¾“êá- IT!.:×ŠŠ‹L&— ¢úK…­Ô>Âê’¤‚_Jÿ¼ƒ0éЍêªÓê’#^©&’ ¤}ié®C"zÕk ÂÈ(½ª…I$—UÿÈj:ªªpÊUZ]¬TXBÕW°•¨IR xm8I%C¥ûH|DX^5þÓ!—ER†¤Ôƒw Ú:®AC.:ªÒ“QÿýªªPä6à*¦ºjªª›áUW kª¦šªª¦ªªV½:Uúj¡UiUUUBúê™î©Èc¥Û B…P©ª¦ºaWUL†cµIÓR ƒ¦º¯2# (ï"¸ÝØMU4¨UÔ Ô(ItÂ~ªš¦CjƒxU ½ANÖsPs@†ŸJðÂà ª… ]Âiá0ª˜U … ÒêL*… ·Ù ü0Âm5V#?A‚a4Âa0šaBa5L ÂaBjšiµ¨M0ªªšáU~앆‰Ì0Ðh5N“ð`ƒ „ &a˜TíB &ª¸L.ª¡4Âa4Â…MB¯iè6“NûñA‚ j@ÁBaU0˜&–˜MP¡S[MBó"xû¤Ûo‰ñâ"@Á „Õ5 „&AÝC™à(Mp©…ÿ¶­ý.¾„A—²ð Â!A±„Âa0˜M4ÂV¡Bõþ½µ_ÚCB%XÄÃ00ƒ „Âa0°È[ „Âõý+o¥ýmˆ†Qa•S  Â „ä d3##ì–æÚ”,„2(ÉÜ}~ýëûAˆâ"/ „A™°L Ídla0š!/„ÁO Á0…ž?]õ%Ù˜„@…”  SälgãˆN"‘Cù…¹6æµÐøCF¶†®!tEŽÚt[°„é¯îúFˆD݄ Ý¦A„?_ȰÖäHÃwdXl ƒoH&Ýý*}5ððm(¼n6Nf°ÑyYËÆ½*ðÓ«† ý„îKzÛd¡=kíø:ZºN•Ó~Ý'Iôœ27•Ô ñ“ßþ¯ë¿ÿöíRÚìý}{÷ZN¯ð¯Þ½+h|'Òö¾¿ýõW«_X¯öþÇÕúJýým}¦—¬/ñ_þ½xþ=ê Û­.ÚZÿøëêë¤ký¯ð_ÿ¿äÇMª"qû|–¿[øbÿëÿ×ÛÒÿ¯ÿÿÐõ.¾•Z¾ë¶×õùz÷I/_áÿÿïûþ¢¢¶EÅöþ¿¿ûé ¿ÿÿÝ/ußßl%ûÿýÿ¿k!'ÿá/ÿëþ;î½kÃp¶ÿÿûÿÞ—¯ÿÿÿþPšr…±íÓ¾¿ÿÿ×ùzÿÿÿ÷ÿkë×ýg““«'_ÿàŠ½v—Òúÿÿ¯öÕ᥾ÚUû¯jÚõÿÃ[û÷_ÿ}¯ö½ÿ %VöÒv»õ†¶“kkû„®÷®+ÿ¯}ìC¾ÈýìVÅ+VØKþ˜a6*7¦Ó^ãm>ÒÞÿöžM9z«iÕ4ƒÓ`Á&´á¥Ó ´¢ýƒi6Õ?ëéá’„šiµ &ƒ ;Iá0Ä- œS#{AئE ÓØM‚›ÿˆ°L! ˆ†ˆ0„!¡*؈™¶A„A„Â`ƒ8ê „ ›‚dÝ3.R¯¥â""8ˆˆˆˆˆˆˆˆˆ!'õ®×пï-ôÂA¯úúúÿÿöü}×ôÿ¯ÿÿÎôŽÕ3¼¹Ø…^ ˜/5ƒrì&I ÍVv¦˜_ÿBÕU0L}÷ªþ¡I±¢:#Dm"aFÑ´hŠáŠV‡îÓý÷|DDDDE2 2p‡œgëÎÉâ@—äðŸ<4C‡&åHÑ0£hÚ6£hÑÑ¢6T hZ 3¾¿Tþ×ãî"""""""0ÛNCÆ2b!™‚²F }Wõ¿ùe¢4GDCGD‰E´GÁÓ ’Žê«jŸúþ¶ŸòܵÄh£DCGDh‰b4FÑ¢‘!«mm$íÿ|­Ï#ˆÌÍl†Iš# ú($ÉÌèyþãŽG R|ѲV.vjf¸×(ˆˆˆˆˆî—¼z† ïà™› ¡‚¦ƒ3a@Á4ÁBpaÓïÓ/>gp“Î p ñ ɹR4FÑ¢!ä4h£hÚ6 #hÚ6¯ý¶õ{Üwôka ¸„0‹v´lm#»t‹pÑw¾º¨]WOì&…©oèDDDDDDDDcí/÷_Õ¶Ev}Ú!kl¶$¤ùh)ÿ¢áÿ»¢pöªMú&ñ+—D±#¢!£hÚ6t­·rÝ¿ý°,2qÜ0ƒþ(=éô›­¢Ð,!Ò¯%›pÖïTþé6ȱIËu$EÑ¢60´mDÂ:,DDDF¿õJß÷ÿO¾)[MþÐÿú¸¢Ý‚~¿vL®ý%î—´é8ˆˆˆˆˆˆ´}k¿ì5¼‡:‹÷µú]~õþÿªZ6‹‡ú}~÷]vêž¿&ÆHÚ4DÂ4FÑ¢6 FÑ´mFÑ¢!ä"£bÚUouü!a5ëÿÐûüWCô´ƒÿÐî«o‹ý¥úrÜ)ˆˆˆˆˆˆˆˆŠñ_j¶µ¦Ÿø_þ¼/ázõÒÿýÒíâ 뉢4D±#hÑÑ¢6µÿ×äoDŸþcÿùuð‹ø//_OO_äê÷ÚRuô‚ÿ–å¨Ú4GDCFˆÚ6¢CFˆÚ6£¢!£E›XˆˆˆŠuzÇkÞìŽ4ÿáÿÿ„ú.?ø¯ÿïøß¼/øˆˆˆˆˆˆˆˆˆˆ­_²<7W[´ÿ× ¿ÿô¿Ð_úÿÿ®·ö4IÿäÝÑ¢&¢6´hˆhÚ6£hÚ6´fŽˆÚ6‚#Ô‰mvíö¾×_ïþ’úÂÿþ7ÿÿ¯¤ŸüDDDDDDDDDDic~›CþœBÿ¥ÿöP½/¾¾ïúÿfwûÙ›ÞþY Q0´hˆhÑF‹kµ¬=ÿázÿÿõÿÿ÷'ÿÿí¯ûW]/í©nZ£hÚ6£h†ŽˆÑFˆ†ŽˆÑ0¬DDDE?‘ÖÐÿ ÿÿþÚ]ëö–¦ýnÒ¾þ×}ÄDDDDDDDDDìm{ígçOÿ_û_m{ kö¼0­ØNþ¬R§ÞÅ-C ö™7#¢!£DmFÑ´mD<ÍFˆÚ6£hÏ!£Dm ¿õöŸÿDâ·ñz°ÐvÇuGV]-±d}Ša§y:øA¦ƒi4 &Õ ø‹N,®°„DDDDDDDDDDG¾›]¯§ÿT¿öwµa&8ÓO¨öÖÌ××jþé¥{A¸•ÔÑ£hÚ6 ¢:+Átš÷¦ÿõú}’„šlˆ8AŠ‘Âi4Ù&˜L.Ò”˜0BÂÈ4Â`ˆëzh®¶Žˆ‰#hÚ6£DCGDmGDCFˆÚ4FÑ¢!¢1B"""""Åëu½Ñ¹}ÿ=®L!`„C [„L   „ fªÇ ­¬„#L•–IÂ2&„DDDDDDDDDDx é5V©­§éö»AøˆŽ""""!Úuâ)ˆ‰\QFˆÚ4D4mFÑ´mFÑ´mæ´mFÑ´mFÑ¢!£hÚ6šI†—ÚVšhiÄZ¤Âmz“mшˆˆˆˆˆˆˆˆˆˆˆˆˆ²Ô&*šŠûM8ÿH4År¹qL FÑ´h£hÚ!£hÚ6£hÚ3ÌÑ´mFÑ´m0šÂj˜TÕ;Lƒ[ÿQ¢l£DmFÑ´fŽˆÚ6Žˆ˜FÖtB"""""""""""""k! ”üG¨ˆˆˆˆˆˆˆˆ‰Ø"4FÑ¢!´h„Eÿíu4hŽˆ†´mFÑ´m#„mFˆÚ6£hÏ0£y„mFÑ´mxˆˆ¥éú-ÈGDmF3h‰#¢¼ øˆˆ¸ˆ™ #hÚ60£hÚ6£hÚ6£ŒÂ7˜FÑ´mFÑ´c0´mFѵøó.‰°º1˜ÌDy™Ì您Q‚´*…*ʲ¬«*ʲƒ+B¨U•B…â"""""""""""""""#ü˜d#>d› ƒˆ\Fdj+¤I¦„DE¨ˆˆˆˆˆˆˆˆÔ£Dm"aFÑ´mFyš6£hÚû… …PLLB_; "a#hÑ#„mFÑ´mFÑ´g˜FÑ´mFÑ´mFyš6¯üqúþ¿®W Ȇ`åL¾L!;åÿ}Ñ7ûâ„DE ÚZ4FÑžf£hÚ6£hÚ3Ì#hÚ6£hÚ6£hÆmæ´mFÑ´mF¢6£hÑ $п‡pÂzh8wtA¬rÇ,rÇEòa#hÚ6‰„h£hÚ&â"""""""""""""""""") É ¾vªÎ#!,”e¹ñsU¹‰^¤„DXˆˆˆˆˆˆ"6£hÚ6£hÚ1˜FÑ´mFÑ´mF34mFÑ´mAšd¨¼Á0RfÆ E_õÿÔQAÙ,D4h£Dm"aFÑ´mFy„mFÑ´mFÑ¢1™£hÚ6£hÚ6»ÄqÄDDDDDDDDp‰;Uõð†¡ê¾¹]‡¢ c–>Xñ„L#DmFÑ #i:m_Ñ}w”î’áLÇšdãNw!r€¡2­™ÇLEˆ†e4h£hÚ6£„mFÑ´mFÑ´mÌfy„mFÑ´mFÑ´mÌ#hÚ6³hÚ6¼GO*NÂÃo¤îü*x&¶ƒC><* ã< ‚"H™PA¬rÇ,r æs;/ˆè0´h„DDDDDDDDDDDDDDDDDDDDFÕãúYÚ¯•~‚rJ²M}SÕ;ûÐzØP…¦1Hb"""wÈÑÄh£DCÌ#hÚ6£hÚ1›F3„mFÑ´mF34mFѵN¾J,˯ßý]uü»¢áü›§a'ÝQ8òâÒÚh A 0èFÑ¢60ÑÑ´mFÑ´mæ´mFÖmfÑ¢0£hÑfÖ8ˆˆâ"""""""""?ë¯Ôí×^uúN“ïMIݧwÒoIØ'ƒ‘‰Ý̱ýE§ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ’hI4Lf´mFÑ´S£kK"¦œ…Ô˜YKoÂ×]u×ÿ^êêÿ¿·«îM=lD0Ä1;©#hÑÑ¢6£hÚ6Œf3Œ¼aFÑ´mFÑŒÏ0£hÚ6£k6ŒóÚ6³hÚ¡°˜A à ‹" OÂv&qø‘˜2F`Ž„tÌ4AB§›3¡ÖHˆ6™!Éã^Fâ]–žr5Ý ÿ¯KÞŸÿ¦Ÿ¶C0y…0äAÙ|ÍXˆˆˆˆˆê…ˆˆˆˆˆˆˆˆˆˆˆˆˆÖ÷ö˜BM0ŸÛa4(A…L a4Ða°˜Aâ„¡7h(L0DE`ÉØDd °ƒú_ÿû­ôûõ¡Å‹ˆ‰ÚA‚0ìÆCGDmFÑ´c6ŒóÚ6£hÚ6£hÚ1˜FÑ´mFÑ´c3FÑ´m_¢NaW}¦þœ0]°†Á"Ý¢îÁE¢Ý¤8h[„4\4k¢á„-ñh>½_ÿþ¹°Ÿ_ DxÝãÚ4D4h£hÚ6£0£hÚ6£hÚ3Fѵ­Eÿø¸ˆˆˆˆˆˆˆˆˆˆˆˆŠ^‚všÑ7è”9qa~ÃÞDw"CI°í ƒ¤íHâ‚o„Û"½—:M¤é7! AÙg#|×+¤G/òêíÿ¥þÿÿüŸF_ˆˆˆˆˆˆˆˆˆˆˆˆ0DpÎ"""jFˆ˜FˆÚ6£hÍFÑ´mFÑžfªõnªJé6È®E†‚oiý6ý„ 'IÙ3ûKá:MêÛ ¼2qÿö ÕøM¤Ø&2xÅÿûK÷úÿÿþ„1a±+ÑFÑ´mFÑ FÑ´mFÑ´c²;#‚FÑ´mF3„o0£y„mfÖmF35›^8ˆˆˆˆˆ¥õý=« §ûöµÓÕÖ“ÓõÓÓøþþÓuôéa ÿûëÿÿÿù¢ÛÙ|†ŽˆÑcŽ"""""/ DDDDDDDDDDDDD”¯ÿý­-1ÿ þý«üü0ºßõ]~¿ö¡‘Gaßdëëÿý/Çÿ±ˆ†"""V LÎaæhÚ4FÑ´mFÑ´mF3Ú6£hÚ6ŒfÑ´c0£hÚ6£hÆh³hÚ6’¯ÿý¶ÿÛþ÷ÿ×ýÿñìWÿ®8AÃ÷ì'è/ýU¿µÿò}KæÑ´CFˆÚ6£hÚ6ˆy„mFÑ´mFÖmcŽ8ˆˆˆˆˆˆˆˆˆˆˆˆˆˆŠ_ûüŒ±?ðÿh7ÿýú'e#ÿ&9Ç:º¿øXkëþ´Ü”/ki|žŸï¾·õþ™¤aÆ"""""""""""A‹4´c1™£hÚ6£DCÌÑ´mFÑža$­þû·þÿµûýÿB?ÿ‚°Áÿ–¸§¡í¦ÚK¢~Ë«´û^îÿí! QD4h£hÚ6£h‡˜FÑ´mFѵ—åŽXàˆñ„mFÑŒÚ6Œf´o0¬ÚûLºÿÄDDDDRzÿÿÿn½§þÿÿÿöÿü"âØEÇÿÿÝÇiÈ/ 8´âíµNND}¦›e¢4Y4CŽ8ˆˆˆˆˆÐÄF""""""""!b""TÒ_ÿÿ÷A¿èƒMÿ_ÿÿÿÿém¥ÿÿö6“MÓAÄ; ¶’lq &šxŒb"$iˆ ‹ÈÂ/˜Ìf´mFÑ´mFÑ´c0£z—‹æÑ´c0£hÚ6£hÚÍ´‘›ûÿìÑ}xÃVÿ¯Ý{ÿoÿ¥†Òÿ¯úÿL/¾·Ø…mwjÂHÂ6ˆhÑFÑ´mFÑ´g˜FˆÚ6³hÇ›_øÐøˆŽ""4…¸ˆˆˆˆˆˆˆA‚M¥¥ÿ„þÝNoøaÿZþP¿ûÿ\:_ÿ}ÿÃ$áŠ'‘LA˜© ’´ÓA Òb"""""""""" GBˆ‰B6 ‚ÄŽ£hÚ6£hÏ0æ´mFÑŒÍFŠ;ÛÓ¾ØiZö’o~7ÿûÿkîN®ëþ³éÿßý³Oþ"( q ˆˆaôh£DCÌ#hÚ6£hÚ6ˆy„mFÑ´mWdvGdvG³Ú6£´mÌ#hÚ6¿ÓÇÄDDDDDDE'I´¸µŠ[Vÿƒû­tµºûIµþ×:î¿ÿoÿú_ýÄL†#Eâ"""""""""1GDDDDDDDXb$º&¢6©Šb‚Ó{Nímoï´úºuí†îþH0ÂÝ{}¯Úûw /UÕDlNêFˆÚ4FˆÆÎXäAÌðÁÌf3Ú7˜FÑ´mÍ£hÆc1åóŒÂ6£k6£hÚ6¿i¯„†›¢¿l$ÅÚÚ¶’È–)‹ƒ½Ša„köGø»ì&GJ°Â Ëë±ZþI˜FÑ´m£hÚ6£hÚ6£„mf×ýDEþ"#Cˆˆˆˆca²XPçôÓ%i ÓUñR ø¨„Å Úi§M6˜¦ÐI§l;J#»cŠ´Úÿ±Øˆˆˆˆˆˆˆˆˆˆˆ¦ A˜Fˆ „K£4mFÑ´mQ6£hÚ6£„mFÑ´mF34mˆˆƒ"!„A‚ùÜ Ó(áPa+0ƒ$à˜K°ƒÅ&› ÉBŠdqM6EÓjëð›0£hÚ4FÑ´c0£y„mFÑ´mF3Ú7˜Fѵk©µ›Y´m/è~""""""""">"#-9kˆ>ÌÂ$A„ ! ƒkðÂ&ÉÑ ^"""""""""""#ˆˆˆˆˆ‹‚A%ÑFˆÚ3Ì#hÚ6£hшˆˆˆŒBO°B4$U!£DmFÑ´mÁÑ|Æc0æ´mF3´c1ǘÌ/ͬhDDDè'Ä› ¥Ñ´hˆhÚÍ£k6¯ñüE1ùu¾8ˆˆˆˆˆˆˆˆŽmFÑ´mF34o0£zDxÂ6£hÚ1˜Ì#hÚ6£hÇÿ;‹ Ž;0£hÚ6£hÚ1˜FѼÂ6£hÚ6£„mÌ#hÚ¿ÿÿô(DDDDDDG×úaAY*Ì´hˆj$"AˆˆˆˆˆˆˆˆˆˆˆˆˆÐˆˆˆˆ„ˆ@ƒ‘ó4o0£hÚ6£hÆaFÑ´m_ßü& ""(DQ:"6£hÚ6£hÆfæ´mFÑ´mÁÑ|Æc1˜Ì#hÚ6Œjm*æC㈈ˆˆ Âÿ©’6´ ±Ìæs9œÎg0üÚ6”ÂÇüGÄDlDDDDDDS(GEÿ÷üDEdtÕUÒb"""""$ttI˜FÑ´c6£ŒÆc1˜I—Ì#hÚ6Œf3Þafѵ”µâ+ÄCº ®ñ„Awjc0£hÚ6£hÆaÌf´mFÑ´mÌ#}˜F×þÿC؈ˆˆˆˆˆˆ&@Œï#²QøAýÌŽˆÚ6ˆz[¿î"""""""""""""Aˆˆ@„Ž„ „º! —Ìf3Ú6£hÆmÌ#y„mFÑ¢ ˜M?Xˆˆ¤‚"! @º6ŒòaFÑ´mFÑŒÆaÌ#hÚ6ŒfÑŒÆc¢þc1˜Ì.Ì%þ„GÄDDDDD}Sñþd#hÑ%yµÿûÐøâ.""8ˆˆ‹b"""""0ÌЂMHÚ6£hÑFˆ;º_ÊxÁ"4!.3°<Û!–DåQ±:4@‚:6£hÚ63f´mÌf3ŒÆc1„qæmYš6¿ñÝäßå¹§Á³†p³†gz™°]œ3Ì!š h"¾c1˜Ìf¼#¼ÆaFÑ´mFÑŒÚ1˜Ì#k6³hÚï¿ùàÃ÷wÅúB„DDDDD_è|‹3² di•ÓçcÞÓµ al'Ú (MNÊQÑ%ñ¬DDDDDDDDDDDDDD"­‚DB&¼^aAy1˜Ì#hÚ6£hÆc0æ´mFѵù/~Fv0¿è¸è»ú'tMé¢ÝˆŠ BGFˆÚ‚‚0£hÆCÌ#hÚ6£hÚ1˜Ì#y„mFÑŒÚ6Œf3È7t¹ˆˆˆˆ±¡ÄDDDDDDWUýÝ'{RºßÙcº¸p–28¤Ý»¤òï¹Ú¢6£hÚD§f›Kø¸ˆˆˆ‹ˆˆˆˆˆˆˆÅˆŠ B]‘ò6£hÚ6£>AæEé˜È&B¥÷ÓÐtûM;¿¾ý={ôé{B""…ˆˆˆhDMHÑ$tmFÑ´c0£y„mFÑŒ‚#Æ3ù´a_þ"ÚxA˜ã0TAæ| ó ø¨3ÙvpS8Á?õuõ_Û]?Zµÿö®v°‚EóŒÚ1˜FѾ‹æ3Ú6m)´c1˜_ÿßÿ¼ETCOM;MSZi¡`„Cÿ2Gå¼÷ÿØê/ø×«¡ÃOñDDDDDDDDDD B"""!tBîÈñ„mFÑ´mÌ#y„mFÕ®‰8ãD‡¶Ú ,Eÿ¯ý}ïØý^ØŠ ‚Â6£hÚ1¢‡fÑ´mFÑ´c0£hÚ6£hÆc1˜Ì#jÌ#hÆmÌf8.õˆÄDDDDDFJ»zAä-´vJ:&âN!’r#þ¾ª?ëÛþ¿Ýz†vRˆy]o_ÖºñDDDDDDDDDbņc!æ´mFÑ´méõ©'ñÓNɹÒ~ƒAÄÇý}_ÿì?ÿÿäêb1b ˆˆˆØˆ’èÚ!.ˆyš6£hÚ6Œf3ŒÂ6£hÜwyµÿâ"¬_¶ö“þÔ{NÉ^Hp©ü‡(8Ï ¹ S¦\dˆÁ# É‚@ÊAA©$ófxΣ5‘0ÍÖeFL"F`Ð;0gRÿûÿ÷ë~ØE8"<_Ìf3ŒÆcShÆaFѵú˜Í¬Âÿÿÿcj,DDDF½{Cþ¶,zìŽnþ¨:¤ƒ,&0šxO ˜(L&aPƒ3â Á0TÓP˜Aÿý¾ÿïÿlì•!Óîðê©‚Aˆ‹ "¡˜Ì#hÚ6Œf3ÞaFÓµÿ-ÿß鎿FÊ>7tkz64â&Ím 70ɘ/(ÐЋEÛEÛZ60‹¶h*(´[¿ÿžA÷3¿Í:ÿÉðâØ „  Gv!‚f´mFÑ´mÌ#yŒÂ6£hÆc6Œf3˜Y´mÌf?Aˆˆˆˆˆˆò }Ûä©ÿ«ÿÿIÒÞ’|$Û#¶,:N,ën–M†K e Ú Ùét¯Ü2Vé’Š9]C3Œ?ýªaû_í;÷íL çbÈèÈþÿºЦ_6Œf´mFÑ´mÈkÿЧÿä aÿÿ®­ë¿¶ÓuN•µôÞ“ïUuk´;Ó½=z ¾ÁAB ñýoOû -ÛiU­§amÄXŠD B!†"8f”#¢6£hÚ1˜FóÚ6£hÆc1˜Ì#hÞaQ}qÿñýýúýÿÿÒþéoKÞªþ›Õÿí÷W§ý{^Ÿ}'ÐÿwØNôØ«Ö*í6öW’ E:³ LEùŸ³8">mF3ÚÍ£k×þ¿÷qþµ¦@„ „DGµú¿ïðßÿÿ¡¿ÿúÿÖ‡O÷ŽÕ¤ÿúxÆFíøM0œpÒM¤Âi´œ\Cb“Ǫô«iDDDDDDDDDDDD!# AAAA b.¼Ú1˜Ìf¢ð]'Õ?û'Ãýÿõö¿¾ÿÿ¥zÿõ®!qzÿÿ ÿûx¥®î–Ú¨¡H Œ @„ @ƒ AS1˜FÑ´mFÑ´c0æ3Ú6£ŒÆc0÷þ«Øˆˆˆˆö­ôØOõì&ÿÉ¿ÿåƒÔ±ÿåˆ×oü±Oð»uÿèµÄõ¿Fá4-M4í4ÓG`HÑ]ýõ¬¨DDDDDDDDDDDDDD$Ù|Æc0£hÚ6£ i…÷´×O[M¿ÿÿ_ïÿûÿúÿ·úÿÿÿÄDDD! œ‚p`¥„E!`0A A!%Ñ¢!£hÚ6£´mÌ#yŒÂ6£hÆc1˜Ìf3_½ÄDDDFÑ7cÛK‹N"-U´´×ïÛ¯úÿúÿû×ÿ/µÿþ½øˆˆˆ‰Úª6¤ ¦a.ùKókÇ÷ÇÆ¼EÄDDqL!#£hÚ!£Dm(¦lU2 bô'¶«§ÿÿõÿÿïÿ¥ïOÿÿüFé¡(DDDDDD „ „ „ „Ž:6£hÚ1‚ ?ÔÚͬE¦Ðiª´) ba4ÿø¯ÿþÿë¿ýפ¾?ÿo¯ð@˜ „˜FóŒÆPaÂ0£y„mFÑ´mF3ŒÆaY´«ÙŽïÿìDDDE„BB )&E‚%­ªÿ¾ÉÓÙ:ïëüŸý×~ÉÕÿVN­{'OÿùBýû¿õª_"c1˜Ì#hÚ6Œi¯®4>">ÆÓM&ÚV’v_ “cjôÛIö!Å?¦Çïÿ>c1„w3™Ñ„™‘ãŒÂ7˜FÑ´mF4Ј´wªýWþêÎ8b""#ì&ÐA±Q& †“6ƒm0‚ ÓbƒA"½­iÒiÂÿ“p4T/ÿB1ˆ±„D0Áˆˆˆ@„DB  æ3ŒÂ6£hÆc0¯k !Ô‚“ˆ`„C0„2àaRƒÂvš *_a^_çb Ê2—°Á!a#XáÂ;³hÚ6£hÆc1˜ÓA—ËÆ´o0”ÆcÌw]ˆˆˆˆˆˆˆˆÐˆˆˆˆˆˆˆŽ""")¦½A5;$Fˆ†´Qï÷kïü\F""ÄDDDDp fÑŒÚ1˜Ì#hÚ6¯Õ4Óêª""# Ž„B"8Ј‚ ApËæ3ŒÆaÍ£h‡I—™Å±ßãB"#ý ß}̉ Žä$|Ç«,zfÎaÑ|Æc³ ½‹C÷øÚj"„A‚Òî2,oþ#LcÄDDDX†!! ‚@„#»AGá¸åŽg‘ó˜Y´mÍ£Ú;¿&ÊBýÄDQNÂAœÃ„‚#°Žà"ñ„mÍ£hÆcaÚ¯ì|Pˆˆˆˆˆ/Ý2TFˆ†´mnºûÆŸµÿ¸ÄPˆŠB(D¡Ñ„c6Œf3„mFÑ´m~¿ñ†$ DrB"@„BDA@„!# Šy/Ì$aæ4ç‚Ë™Ìöa˱Þââ"""? ë’äH`É;IåuÚ6‚;ÛªµËˆ=Ljc1ßÝÆÕqTÕ!ˆ‹#¡#£hÚ6ŸÄ0º xŒãbÂf„~&Bæ‚“Šf)¢$ Јèì¥b<~ÅèEˆˆˆ‹!‚B@‚A †A`rÝ#9œÎg0ó˜_©´cNí4í0˜O ¦4,DP@‚Gs;FÌ#hÚ6£´c1ÇóAÇÿõÄDb"""#äÝ¢nújÂ'w¢nÑcõ\î´hˆyš6£iG~©Ç_þûŠˆ±!§@ƒ ˆ8f3hÆc1˜FóÚ6¯ú Ò »í«oI>¯AÑqÑvÑq„P@ˆè AŠDBDA@„!#ôGŒ`Žà‹é˜íýwÄDDDD¨,ÞE¯ëÖï¢Y¦ý/õ÷u÷;%F|ëäA˱ÖmÔÆc»¾*©:jª""„!#£hÚ6 ƒˆ3ì B!Ìäƒ#[$’ ý4¯õ·[Õ?O¾î“®<|DEˆˆˆˆˆÐ „B˜ „B!îAeÌ9 ã™åûÿÖ ñ„ CM| L üíFF³ k«UÝ­jíû[Km&=5´!0A— ÂaFÑŒÆc1˜Ì#hÚ6ŒeX0™°Ðg€À dâ™…@39É B4?ÿ÷õí«ˆˆˆ‹"!„B!B ·`ŒäW”9 ±Ëˆ8Eá#æ4ÓU>cÌf;´Ùu\±Ë±Ë±ò9n¿ÿÿ¯еZaa˜ã!„A˜ðƒü(¹þáGkx#¹—Í¥1˜ìÇiÚv¼±üÃÿŠg‹õ_ÿ_MEÆ„DDDˆ„DD B!„D „t°«¦ššÿépßß¶‰£°4mFѵ︸ 4"#H’ Â@A0A„! ‚ ‚aB ÂAGp@™yÈ åŽXä"GËÅã Lf3Ýæ51˜Ìf3 ƒ‰p'tHv‰GvÕ¯ëîøom!0$|BGÌ A ‚HùŒÆcîAC˜t£P—Û±ÕªÿëßkÿqM5îâ"""""!„du²nDŒ Å}D¸h•ôNïù2K½~XÎÆ"f£hÚ6¤ù‡,rÇÿÿÿüG®üFÓBáhB Á„B! AÃA ‚AAA:6£ŒÆc0£hÚ1Ó¢ ô™äÂÖžG2X˜¦A1ª_ÿ¿ÿ¬£´""""Ö„D0„DB ‚!!a0‚ @ƒ0‚0ä6Ç A$|¼ÙŒ¼^‘õ1æ3ÚröaËsÿÿÿúñãþŸ§Jiüì´ïVw["LÉ*;¿õm{~ŽÌðAA#¹cg™}Lf?µ´õ™ëÿÇïÕWÿý5!„B!A‚D B!„„‰¯Z÷Þ™'ñ~ˆgÜáB¨_÷fŸ·ÿ¾ça¢6£hÚÌ/â6…Äz¦„DZPB@‚ @ƒ! ‚ ‚ ‚  a „#ŽC–9œÎgIÚiªjcÌwz©0£! ¿Zþõ_­aƒw}?òÝéôézn""""! ˆ5‘ðA 0 A$|Æc1‚ ˜t‹±Ú£9A÷ÿúÿÿĦG馡dBþ²TûÚò𽓛ww Ûm-z  ½«†wDtFˆÍÌ#hÚ6“æ±ÿÿ_ÿ±¡Ј„B! „P B!!¨aA ‚A ‚A 0£y„c1˜Ìf´mFѵ_×ï_ì| þLŸÃmøß[M¶Jé´½m[ı[‚!A@‚ ‚ ‚!‚38HÎĘËÉÚi®š÷}§ÿýõ¾8ˆˆ¯÷ÿ_ýþÝy•YY3ý¦Å!MÓi'uØÚ6£Dc1‚B;¶A@åOTÿûOù WîôûõÿÓI"@„ B!„B"!A‚0‚$tmõ ÿÿÿÚ|˜þý¿Õ=xMô˜a Ã$á…s´‹ókÅ÷ˆ†"#ˆˆˆ@„BÜE@0„ ÁB ‚@‚0A A HÏ´ïTËýßÿ˜û]å¿ýk×WÍ?;Ô·¿×_øaB Bb¸¦Aˆˆ„X!d9‡!¶<Æc1˜Á^/˜Ìf51ë Ö9c‘ÿÿÿÿ\h:j±»OµÿaÚõö½m§á·‘tkͪëÄE„!„!g £ºÑ´g˜GŒÂÍ£jÓAÒËõ];¿þìDX@‚ BA ‚`ƒ @„ ‚#ŽBÁ ‚A 1˜Ìf3Æc1˜Ìf3„mV˜]µõ[ z½Ú~¶•iö|Cœ#âäâ°A‚ É0¤â8gŒÒ0G2xÁ¢'‘Ìü2FlÊAåÌè3C!# @„ Îä5Ç0êìÆcM4Ó¿ýfÕþîèDPA„B!Aˆ‘ÑÑVÿõúýÿÿÿÿÿ·þþoÿÿÖøD ƒC“Fä ©•eYF ¡VU•ÿ¿ý Oª¦šjšpa‚Aa ‚AAa Á1I©ŽïU1˜Ìva^¤ïÚëþ¯ÿÿÿÿü »ÿ ûÿÿÐR h‡ D4ÍAªl4„DDDDDD"œC ˆ@ƒI‚ B @ „  ‚m4Á:˜rc‚#ÿ¯ëÄD:“OÚýµ»ÿ»ÿÿþÿK®ÿKÿþ½÷%†Ãð^ÊÒ4FÑžaFÑ´mÍ£s>aÁôÖgö„Eÿ¿á GA¤ DtŽ‚AŽ;/‚HùŒÆaFÑ´c6Œf7kOØZ\SÿùBûï¿ÿÿÿ¯ÿÿ×þ‚¬6L„zøˆˆˆûˆúŃA „0A @ƒÝ‚ !(r£„$ÓM5ÅqôÕ¿ÿýÄDE¦¼u²uÙ§º_{ïþN¿ü¡~—úú_ºWÿ÷ý‘m²%¶œùòND2ÈHˆFÑ´B!‘ó AH Fy‰diý÷~ñ!œrÇÿ_ÿîñA@„ BBBB #hGô­Zõ¿«[ïéµÿíÿoÿêÿÿþéíÕôï –÷hÌÈ6¢aF×ëÿ¿ÁøˆˆŠ¡ÐPŠÂAŠ@‚AA@‚  f]骩ŽìÂò§‘ô›Km/­[ _vÚÚV¾Ûi÷õ÷ë×ý_ÃáýÞ¾½ÄDDDDD A‚0A„AD"ƒ–9œ+„˜&›3©‡!œs9œÎ¯õÿÿáЈˆˆˆˆ‚a?ÂQ¼VÚZQ¶m¦é1éö°`ºÝ§í¤¾¦ÖÂúÿÞûïÿßü‹fP£hÆc0æ4ì¿wó#8ˆ×þø‹ ¡:@ˆìP @ˆè$ ‚ $Ëæ3„mÌ#ŒÆc1á}MSí¬4šºi‹Oâ—dXÙî¾Ä“iEÈ«Õíkn¿þsúÿßÄDDz¦ž»¸Šˆ„  AÄ „ ŒíŒí2òÂÆ •ÇÿBâ";øA4í &˜ª‘]& †h:‘_H6)4äW±LS"½¯ëØß÷ÞýoùÏ"¨ÚaAA! Á0L¸ G}úëÿ_þîéB!!! ;ødc–\! `‚–8A„É “€A‚ ÓîÂé¦4¡…{TA„‚¯nµÛßÖˆO2ã3 8þ­TmD"6»0–ÿ_ûâè XH!‚  ‚@‚ A Á2‚ÓÕUTÇvaFÓ¿ˆˆˆâ"""""""""""""")¦ëØkÿø„Á ÿˆˆˆˆˆ„ N! ! & šh$g3˜r£™÷wÿ¯ýÁÔb""""?úi¶–áÿþmÔ–fÑFÑ´mÌf5¶ÌusXù‡"™Ì9ng3˜zÄDEPâð@ƒÈè Dt ¡ !Ñ|Æc1˜Ì#ŒÆc1ù”ïÅØ…á£;ïøäáòqïµñþ«¨Œ!dq¡‚aArÇ xmŽeàM4æs;Q… •<µýVâ"7køƒ ·ý®R~8Â!$UA @ƒB A‚3–8HÎËÈÎaÌåŽ/Òÿúëÿwh B!„B!‚A „BGFÑ¢ Ü‚Lˆr„f hL‚G'©ºDÑúêß÷ôí:_ú›GDg˜^½÷¾ÿèq‚AA 0„ A ÂaÕÝÚªÿyµ„qM„á¢ø†„0— Ìòœ@@ÏÄs.'ßn¿ÿjëßñ& Žab‚)Ø Â‚ ÀäÎg3™÷ÿ_ÿô""""""#ý®4ÓB,".v˜!¯o¿ëÚ ÿùFyŒÂ4FÑ´mF4ÁÂMÚM¤ÝæT~„DB! AGA„ @’ÆaÌf3ŒÆc0Œf3ŒÂvŸD ;DcÚM5âÓ_;‡CÿäGˆ^?‘g‘B""#¡ZhPE: ‚FàÈ9œÎ“M5™ÝBµW¯ª¯qwJJ:#>‰Ý.(€š°$ÜH1AÿþœÿéÄ „º!3ÚBPå¸@Žà0‚BPé7õÿÿõ÷tB"ˆ@„ „ „ „B@‚:6®újëô¿d.&A/]4ɽÿšðé륒?D‡_ýnJ’æ‹B?þ)Јˆ„AAA0„ A@‚\Æc³ª¿ÿÿ¾õ$>­<ÐÛIöõÙ+¿ÿúýw9 Ÿÿ¿9ˆˆˆ‚Ä4„`‚ È(äAÌÿÿÿÿqÒ¯¬U½èWPÇý‡š®¿ÒÿúÚLŠf3Ú6£hÚ6®AÇ,s=^ù‡,Á  A ‚( A ‚/ 0Œf3ŒÆc1˜F3´c»ÿ|Ò«ÿyc‚ïÿ¯®ºéÿâ£B"""ˆ ›Ap„B ˆ ÜÃ<5Ç ƒ–9ŸIw\.—j·èhDD] ÷õc’¬=Æ}µ„aÿ¾¯KK ¯}ÿz@‚èÚ1›F3Ì Jwm³9cþ"#vâê)B„ pŠA ‚@„˜A‚èBGÌf3Ú6£ÿÂÕ7R!Š’Óß’¬ìS+¯t¯iZVÕ0¾Ÿú‘5ûzú¼u8æpLÆg š`‚L¸ ŸßÿãB"×þ‰:}¿ÿ ‰Ã~ ˜)Kd¹™ ÄÃÚi&š‚„X,EÃM4ôÔDB!Hè „ B Ä0‚A‡,pÁÈ åŽXåŽAœÿÿÿ¨ˆˆˆˆˆ@„ýõlzûV“ïë… ªkØaSB„†Úš¡þïù–9c–?ïéâ""" Á A ‚ A A„,Æc0Œf3ŒÆc³ÆmF9uë¾i‡Âÿ„Ÿ ø|;¿•Åož¡V–šB!!ˆ‹BB@‚@ðnæ±Ë±ÈÎaÿ÷ý_UB""""""Ó^«»a3{i¯»i.y?í;»Mz ÅdpH@Aœ{MTbH¾c1˜ÌaÈ(±Ë¢Ç,}#9‡ñüDD2:29!„1@‚A 1˜Ì#hÚ6Œf3ŒÂ6ª{¿´êÒ·†¿VôÃùXªw“¬EøˆˆˆŽ×â"(D|FÄEŒ „B! x6Žg3™ÜðËÈÎg£;Fÿþâ""=&šI¡nÅ]¡§ìDwúëéíq„ ‚Â4FÒ  r+„ Œæ#Á‡,rÇ`Œ9 ãþg0ãUô©÷úLD B!ˆˆ‚$tmFÑ¢kT)5¦¢Dpк»_]ßÿÿËþßï!!0A„ @‚ ‚ ‹˜ïShÚ1˜îÿ6·kdWO´Ô…LnÜW®¾øˆˆˆ± ‚ DsGB LH09ű˱È5ÿÿëê„DDDDDDDDD0„ Rä,."Ù’…A‘mW§›gS#Fjf´PŽ3©’¤C4A3¡ó0ÍLÔÿ7LˆEK"%—dØi#hÚ1›F3#¹aými‘â;™ß ŽÂ† A¤0Œf3ŒÂ6£hÆc1˜Ì#y„""tpA„"[2v^¡|a0ˆCÁ0˜"„0˜(L ÁPxA„ ô2`R àƒ> fŒ&y“ŠhÁô""""(DD6)ˆdtD¡È£<5Ç3™Ìæú3™õ¥0ä ·^#XˆˆˆˆˆÉîˆÂ‹E»EÛF‚%‹€mR3¶ .Úc†‹‡ña0‰Ã-0‰ŽÂ ­…EÇ䨵#hÚ6¤A@äW3™ÛHÎg0år9|±ÄDDhn‡q !‘Ñ´BB]Ì#hÞaFÑ´mRû Gia'Ã#;´n’oKdq’A>ÁHÝ ƒÂôl M¯ºÓþÌ/ÿ‹®+ˆˆˆ<\Ö9œ$gHÎG€Ùpr8f;»ÿîÿÄl/ð'Ûàƒ´Ú°N©>“†NÖí=6“}ü'JÕ°É:JÒpÉ:“AÒ|à¤åÎÈ„DDE‰C°Á A—aÃÍ‚ÈåŽXä3,rÇõÿÿþÎለˆˆˆˆˆŽ WßÓôÿëýãôÝ:_ý=?Ðïí Þ÷ìAòœd(À75¢ñŒƒdh£hÚ6£#½™Ì;ýzþ""""!„B!‚ @ƒ ˜g‚‚Ëæ3ŒÆc0£hÚ1˜Ìf3„mZÿº ZUÿöêÁ;Ó# ´Òÿÿý?Kjÿc¤o„A¡d€ Ìß ÀÁ̈ˆˆ¡!‘Ø!ã˜rÇ3–9 aÈ3Žg³=˜{ÌýêÝÜF„DDDDE:ÿ¨Ç¿ÿøˆñ_øÇÿQã¡ø}è$›ôœŒ|4û@î ¥#hÚ7¢XåŽXåŽg3¤çƒÌä6Ç,r9–ºB""""#ˆ¬C  BGFÐA tmÍ£ŒÂ6£hÆ­{÷"Žwÿ{JIÂä¬,/ú‚ÿÐ_ý½‡¥û Z8mãi°É8mY-_ïñÄ]h^¨DDE"@ðmsg3™Ìæs9œ ŒætÜ#…0ä}Ýëúÿâ!¦ÿ,ZÚÿ«ðCÂ"Ç_òÁÿω…Ñ1¯Ãï%ÿÓ!l‹i0Ý—M´É»e8‚"S‚J‚"Çh$Cls9 ÁÈ8厦·0ꟿþ½vœDDDDDDDGÿÑ£ÿ·Ú_áÿøEÇý;¸ÿ὇Š?Z{[È— u¶ò&=Ù(FÑ´c6Œklƒ–9c¿þ."."!@ƒA ‚‚a @„a„! îDwÂ6Œf3ŒÆaÌ#ŒÆc1˜Ì#¿+_þvÒþÒ~ÿKÿÒÿý/ÿaá¾?ZÖû{~ßUˆˆˆˆ¡AJrC–8 L¼^.Äpf^»ÿàˆþš³¾ª½Åñ „Ù‹ÿÒØ¯Ø¨ÿÒÿô¿ñÒ÷¿}ô]?]ÿÒþýÿl©£y„mÑ,rÇ3–9c™Ìæs9‡\ÃÛ0åŽXä Ž#wæqGOÄDR„ Õ ‹h¨Ä  ‚@„‚!:6$|Æc0£hÆmK§ÿÿ øMY:ìŸ×ÿ´¿ý/ÿ á»ÇÝÜÃ÷¿þÿÉRÿˆ¸ŽÈ÷ÂA „w-ÎæpI‚ Œêaæ0Gzsÿ~¯þ»ˆúÿöN•gùÊ:ÿ×þÙ§ÿöN¿²tÙ§çÓç÷¿Ö˜Ž+íýïÿˆˆ„3Ž"F!(p‚`ƒaÈ29œÎg0ä4‡¦¼îý×üh}EÓ!„DA=Ë‹_þØ_ ~½®Ú]¯þ—ÿØ_õÒûycÿi°ÿ¯ïÿò.£hÆc1®È8æs?fÒ3ý˜qèDDCÓ ‚! A‚"  A—a N !î(‡¦^/F3ŒÆc1Ù„¦3˜ÌzB/÷­¥ðÿM¦Òxa/Oþ×ÿÛIWa« /þý¿ü=õú¿oõB""""‚„œr #–9žHà@õXÓå¿þ¿ùcˆ.8Úh]þ†…ÄDDrQ¿åûãbƒÑ¯ àv*ÈûÄ5Uب`žÙuñL0¼Bî—­¶ý+ÒþåŽÿÿ%9žc0æ4@‡0åŽg,s9œÃ“Læs9‡3Þ¥ŽA¬rÜGiÅ;ÓQ„PLE:BA A! H‘ðA 0Œfòù´c×ø¤Õ«´í;ª ¬ˆ>îÓj!ñ¦›Q›´©ßvªÞN»Ì;‡ëßï¯úB5ÕkÄDEÇ#À‚(@!Ìæs;ќΔÆcMÈk¾þÿÿÞœD“všûJƒ &G ´ÓM·i¦6&˜M6™ÐA´šm2(éÓAŠ Å}¯Uvê!~ûkÿ!"BŠBD“„ÜŠåŽg —‚3˜rÇ!œs9œƒXæ}òÇýiÜ_ÿõ´Ê!V€„B!!"$À`ð§¢áÏŠf5:æÌœÈ6u|0„A‚`˜J"3DA‚ 0BÁˆˆa ¢}„E)‚ A‚ "E&‡· /êßK­iþ‰R6£k6•YLæs?NXÿÿâ"""‚+„ ƒ0ÄJv ŠBB „#ÃLÂ1˜Ìvc1Ù„ª¦3ŒÆB!¦„ š.>…ŠxOœ†‚$B""""""""""†Åvú[ûÿèDDDEˆˆˆˆˆŠDHNaÈ8á&ϘzG¦s˜wë3­bבG®ïô""""#jšƒBÔ“ÂOõiZm6½®Ý·ÿ¿ü"£ŒÂ6è–9c‘\Îg3™Ìæ±ÔÙËÎ@ð ÅDDDFˆ±ƒ¡ÄB‚ ‚‚4aÌf3Œ¼c0ŒfÔIŽ&;“ô׋OõÔD0¿}}ÿäRXÿÓìo‡QDq ‚€Žà29„A,s9œÎg ÌæsXìÆÜY‘Ù ËýþÒûôÕb,‹a4‚ S!ì‚ïDí"QD£²ÄнuÇÕ¿oZÓÿâ!‚!¡Ä BÜ #BqË ŒäW0ärcÎ=™úÄq÷éÄGTDAÐAD BB""!!!!>ciä—NÉ:o®AìS½;ý„¡„»Òg0üˆ?ÿ}/ÊÎa.m*²:™×}ñÿñ¡„Aˆ@‚AG‚ƒP÷LÂSc1˜Ìfª©Ú´»Wª}êHu^»ûÅ}5W®Ý~ÿüDDDPˆˆˆ`„DB „H Ž[˜rÇHé‡ò åŽg3˜óÁ‡:ßÝס¡ŠÐ¢A~»]nݦ? º¬¹ì?·uûÿä•#ŒÆcDs9‡,sA‡3æs9œÏçrÇ3Ž"8ˆˆˆˆ¡аP  „B!A$aHùŒÆc/Ì#µþÿø…ÿ–8‡á„ Ò§ûÛëª}-q«cB.#ˆˆ‹ˆˆ„ˆ ng"g3™Ìæy1˜ËÉÎ÷¹c™úú¯MVãȈò>ÿÚ…ýÒ¿ö«wû¶­ûôþ!!!B(r „ ËÅàŽær æp@™x¼^#àävG eˆ‹¯úš¦Ä[L  B Á B!:„„‚A!$¯„ýè/÷Éü.ß_oV»ëÖVQµþ¯S?ûzâýˆ„ L Aï !. ‚A#»/‚m÷k¶šß§÷žö×0¼î¬ìª%âQ•ÃÎéñ3B"!„ÂÐ’Tmÿ²Ç÷ýõÄDPA 0A eðGrÇeû/˜Ìhîæ7ìÇ~«©´-8ˆ8í0™ƒ0mCMˆf ÁøNÁAL‹šd›^""""")‘Ä#…B ‚ „@ðj±ËƒŽXåŽg xfClz¬î"æ^†õõIRŽ,DDDDDbMÚ G áÚñ}¯¯¦¸Tù6XF3ŒÇ —2<]¢ÇZ,rÇóÑcqȃâ""!""h"¬4 … AA B‘| “/F3ŒÆc/Ì#hÚ„ëMZw»kï‡û¹6H\qªŽ#‹#†Æ‚ X8 …H9Ì:¹Üz,zzú,qûïSB"4ȶš &¾@Àä0>™ â[ä{ÖîÓÐO„Hè „ „"œ A‘Ùx#9‡dv^#²;3‘3<rcâ:ê›ÑC°ŠeÌ A‚‘ÐAAA 6£ ‚ Âe¸dpFœeÀMl&¯ñòV±Èhòl®õZßì?ÇÄDC#X!Aà ;T;1˜ç{Uöc¿×U¹{$@â""4 " /ý}=øˆˆˆ Ádp0ƒw C<ÌæsCHrDz ƒ˜rßôÌ=ü$8¡~""""":N¢#ÿ¯é5ɰ"4F3ŒÇG™—ÌDvG‹ÈÎgÛ0þX㈈ÑCˆŠA„ŽÁVTî‚8á4aà&"ñ„c1›F3ŒÆaF×ÿþ¾ªÎÄ#hÑÌf9ÎËÄvGdw3ùŸS9‡,ñÄ\DR Lw‰#GpDxÂ1˜Ìf3ŒÆaFÓLzá’¶–+†IÒM½I×IצJ)6+jÂÒ ¤áÿ¦ð÷TÝ?²;pf‚ûÁ5;5FˆDïB""""!‡ Ê9 ¡ÙpB8iäaó¿ÿþ+ýñªÄDC_ôêô†ŸÝ^›ý÷¸]5¥¬-__wUuý§ &h}UlDB! ã°LŽ‚ AHðEÎg"@ð rÇRÇ!˜>XåøˆåŽéÐE© Ð@„ B!è$!„A!!!.‡þºÞõ»Kÿ§¿ª÷ýo÷ÿ®ïúvZ Øwå¿òdŒf3žfúvGúÌ?¸ˆˆˆˆŠB ‚ft™‚0èÝêÓ/Ü*»»0¥US°¿^¿ßëC^Ç÷ûøÿ±ÿîì¾›~h8v„DDDZiˆŠ ‚DDDàÒ9œÎA¬rÇ,räDÌëêaÇÇ­-(ÓÆ4""""RŸŠÿ«ûÚZÿÃõ¿ÿý¼Bû®ÃÿÒãN'jÑžc‚d;™Ìæ±Ët•Læs9œÏŽ""""„B*Á ˘@ƒb …">! ŽáðA 6Œf¼ÆaFÒèd*;#5¿ÿÿþ]]¿ÿþ]oááå‰?ÜØŸoûÎδm)µþ±ñzë‚ã˜rnXó§ôœúÿÿñªÄmSü"ßþ¿ïÿ®ÃýþþºØxE¿ÛJ›ÿ½'_øˆˆˆˆ@„ B„¡Á Ä G 4 ËàÖGdvGdvG Â;.¿ ï÷Ð":LŽ‚aD&!lB""BB{k¤×Ð_ÿþÚÿûÿ׿·„ÿ°ÿÿÿ’ g™ ˆÛ*ˆ¿çsFˆÆmÌ#hÚÓDó>õu‰qA@‚`ƒ0è&Ÿvš›S1¦c0£iTÇ´îïéïÿ×ÿ†þÿm.Øimé}·ÿÿ\ Œ ÏFx@ȶ†H|\ÑŒA¸ˆˆ‹LFôÄDDE@ðkÖ9ÄNåŽArǪýWé1‘ÓÕˆˆˆâízÿëÿûïÿìW±[õû¥‡þ‡ïúhFš vKŠiªyÂ,"XTg² !w Ž Gƒ9‡,rÇ"¹Lëx½ˆŒ B 29GA;¢è#»  ‚èÆaÌf´m;¥ýÿÞ×}“¯%ÐoÞ¾dê×øò„ßê«þ‘8i¢p÷EôHv=U2 FÑ´¹µ¯ÿõQñˆ,9‡ C‹1ÙÎ?¥ú¿µUÇüsµKÿÿëÒ÷õ¾ßí}OèÉçÓÿïjDoÿO_ ÙȯVÝÒiÚI¹8¢oûDâ""""!‚A Á AC0s8  ŽÈàxg#²;#²<\3àx(c‹Ž6¨8ˆ±A‚.г5«ÿÿo×~»ÛW_¿¯KµK·×úußÿÿôì*zw÷~›IÒovDDº6£ŒÆaÌjRý\–?û#ÑÈàxi;kv\R9‚; Ftc„^/Ìp¬ÆaFÑLjgÍ#1 ä: ”›BÀý§ö×tý§†½{¯ÈÆ­„¯ÿ_xi}§iwÿöšz¿Wé.º÷a:N".8ˆ»W¾„E‘ôÂAqƒhö@ðG3»ôL«+WŠáDDDE0˜TÎ ñ§ax)¸à8D"‡ ”*„ZüCö.×m{bØâò$[KYQcDŽëbd¨«¦/þ¿Òþ¾öïí«ÿ»ø„3ÙPxA!Ø ÁŒ9c–9ÎÐHÎ{,r ä ã™Ì?†GHDRjhBƒŽ;0’aÌf´o0£itÓ½mÂaNÍ’~ȯA„Ú†M†i7a5 &lPA§iÔ4í$î4÷´¸aºÿ»ûû mkô?¯ÈDmF×ÿÿÄD±Ë}ý\DDEaÈ#ÅÎäJœ­û#ÖÒÿÿŒ¸wHœ:Ño´.×õö©m‘¸Q ……dn  ÈÜ(¦­…Ûh6§ ‘Âh&á…ÈÜ(®ÿáÿ†é/ÿët""(!„Pˆˆ „ ‚ `ƒ@‚† åŽg x5ý=÷ ˜$›¦1DBb"""“†GI·ky'¢Qy7L/EÇÄDDeÀ!`„DDê„Q® ÁL;HC „ƒe¸I¶•ü/ÿíõºò| ò F3L#yTA,rÇ"g3ÿÿäAÌ8ˆ‹!„(Ý—`ƒ#°–Û`‘ŒÆc‚/˜ÌfŒÆc1ªÓ¾í®ôüä.YéÚ’†ûþ")1H‘ˆˆˆŽ!ÚMýýûmÿô=nÝŽ8ÐïÐE:B""0DDá¨=B!îDM8aË±Ìæs8I—ˆìŽÈ쎲89RóvGLXB"  AA@‚>c1˜Fó kªo«­­ýÿ¯†?¯øƒÿ¯ÿÔ?ýûI£jÿõöqÄŠæ}¯ÿéq)È;w nùrcþµÑ_Š_~ÚÃñ ÿ×ýÿ¥ibëÿ›Ý§§ìÓÿ¡!ˆ@„ B Ð@‚ „0BB!#8i$‘˱ËûèYi¡Ð¨ƒ0ÄD „3§%§ý´¯ÁRë¿ëaÿ -„±ädz=ÿ×z½Cö·áÑVT‰3i§0å¸]òǼÏù‡-õ"¸ˆˆˆAÎÑì$$ÈìÂAÌv‡—Œ#˜ÿÿ¿_ûKþþب¯¦ƒMá5î×Nö½Õµ_Zw|ZSMpî""!‘ÀÀB@ðlàn9c¯™È5Ž+‚#‹ñëGxˆÿÓ~¿ì{~› ¤úö©Ä;U´¢ýÛJÅzz ‚ „&| „¨„ ˜@‚g`™qKŒ¼ ÌærÇ3©‡-Ì9c=Ž"!ÒÊE˃‚AÐ …c„S„"<$|Æc1˜õû§ øD®þ­kíúa‚ ¿áƒL1Q i°”[I¦šl0®ÿæ÷ÿ÷§þ„DD†@ló´Žä2ÜÑK,u]h±÷õõVgøuëÿÿÃøˆúö˜­¦“Zv" ÂB @˜@„ ‚aAÜP@„ aDr‚:‹¸ˆˆ¶‚)Å L @„BA.ÿrO]@¿Îa¿í4Õ %dÅ“#ríl Ó kÈ„mÌf>ÕC¦¨ÕS–9c¯÷TXåŽ"GvG ÑÅ.)—ŽÁ6§pDy0FèǦ¦5á¥~ÚM'ñ¯ßWý¿ñ f¨!EôDTziDPŒ,DDE‚AHH ŽAœr ƒ<5‡ñq¡¡Ç”b!ÔDEŠï¿ûˆ½tA °½ÿñÄh¢)4‹ A@‚|ÆŒ9c„%9œŠ9c–8U0æs:™Ò3˜r äG,u8²:¢œR"Ž‘pËŠGÇDx¼aBAãŒÆci0žÅ<8µBÓƒ‹L'iUøö¿xãˆø½cj""!ÓVaÈiAUU,z&?X­u²:¡jü5Q-Ŧ›v‡ó$±C0ðB A„qÐ@‚A Ç@ ¼„‚î ™œâg3˜rcç…]1X$‚H@ ŽËá!$}„'ºj𠕦Ÿúó"–EYdV"Ì?Á‚‘Úâÿõ«¹Ü±ýëüDD$ƒ¡Â ‚ Žæ†¸äQÉŽE±ÙWJ´®wéªâ80J !:™ÃDîÉ ¯ … ôŃˆˆ0Èè$(ˆŠB! AAA<s9cÖxÎû.ÿWâŠUH$ê"ÄPˆãˆŠ@â?îF¿¦ˆ˜ufŒÆc˜rÇŒ$ËÅâ;/¦Ö¼Ïæ|ƒ[¯‡á@…1$8‘Ž JÂ#Æ#Á‡"9ÜÎešÐNáú,©Á;L!¦wT.î„{ºÄDDDDC#àV0‚f„wI¦«ÈfD´–µèbЕ9J±müX3âñdbEP ‚Æ!‚P@‚0A„Œ9œŠæs9œÎaËsfra˱ÿ{3˜~ôÓú ’8è&,BH0A C šùØŒîú²N”-ÁŠ$ÂÍ­ÿ¿û»â8¾""Â! H Aa B&AC4r9cG"Ž[¤’B¯µ˜wý1^«ÿÐ6Ûó$™YÁ¸Ašâ"""! A#°‚#†`!B ˰„ ŒæâA±È£‚#ê« –=9‡!®?‹^8ˆÕ b‚‚)Ù ª«Õü6Øy\Q`ºa$mÌ#hÞa*˜é_fs9ÝvG‹¾?b"#wð Q!§‚dp„pB8g#ˆ‚DWGšUvÔÆÂh0½!¯g*®ÃlDDhDF#ˆˆˆˆˆ†GävGdvG‹Â!A 0GrÇ@Œé4Øÿ¯ÝkÄE‚òc0D”E͉ÈÐh%Q rã(IÈ‘dL„ƒm•hÑFÐ „˜Ìf;„Ö9naË±Ë±Ìæ±Ë·²Ç,~Èê?_ö/hiŠã„†‚½˜Åp…„T0ƒ/Ó0PU‹OL"ný?¾8xNô›‘-æ×ÿÿèDEDDC0‚ #Ž(BGÂ;‰±È£–9uȃ֣¿Â  '&0¼xeÌZ5´ã´kq ›Ã'Oßÿ}Ò½±@„ BB Î9‡0æp‚‚œ±È®‚0äÎg3»þé_öaÄDEÜ28 S GpÌ#$ŒªÆ¯Ã%t­‘t­‘Ûä¯N H|•´žOïüÃÿuþ¿•hÞc1˜ïU\3Xärï~—¨ˆŠB( N!†GI‚!Š z‚8 LŽÁ28„vG©$ë™é¦˜&ûN“m“m? Õúuº}ý­i¿ÿìmö"""".í1 "‚˱ÐFt›`[Mfq¡IŽ65c¡Aÿû^õþ·Õ=þ=müˆ3AN¬ Ê©3Ì"^su}ˆÚ6£hÆc1˜Á ‚AEAœ‚XäAËŠæ±Ë·3˜r ÿ¨§èA† §1Ã#ˆ]‚ ¸¨ A ¼ˆ íªþºoûÿãþÐý¥ý-¿ i› A D#—B¦™‰ûÿÿÿýmLæDDDDDFÄD0‚„Gy1Úl†`ä ŽXäq-ĘõÕiÖ1ýÿëÿÿÿÅ ÿTÓM=0A§kêïâ""!@„ B Â! Òæ‚9‡"#¹À‡"aÚzÿÆÄD\E„!!@‚;†w¬d}ÿÕý_ÿ™?Þ]|â¶þ‹Š'Ñ7EûÑpï–?þõ*ó<Æc½S\Æcùœ–?–?}Xˆˆˆt˜ BÇ ƒ“‘G ‘ÌÌR"º´¶C¿_þÿ¿ÿÿÿ·ü-¿úM‘Å0TïNÒäQèœR~?èDDDZiˆŠD$‚ x5CXvŒ>ö"#Ž:UX± 2M§ÿÿÿÿÿá/äÆoêû†džêûjðŸm_ÿ hÑFÑŒÆc‘ó„mÂ@‚g ƒ–9œ±Ìêg"¤gÅÈ—¸¨$eÙ/H¯…rȳ"Û4Œ²$ÆFXdvDïÿÿÿïÿøOë¿þ¿ßîž)þ¿ÿˆYµÿÿûÓÔDEÄG DpÈ2á)|ÆààƒÖXâXõø§XšE›gn3Hüt¡Ä0ˆ€Ÿÿßÿÿêý}¿Ãº†0Ǧ©þÇÿ@„ B!„0„D!B!È åŽ.Èì C!˜?ÿžDD$"!±Ap‹ÈZŦ¡0˜A„°éÙÁOL¸Í—ûuýöOÿäÿ¥ýwö÷ÿ¶×Ä+þ‰4c1˜Ìwvšk˜Ìwû;™ÿ~‡GÒ A3ÁÁ"¹z"¹r æ·u·ÉÁÑ'$:Ìv蛋OúM¸¾þë_µÿô¿Vÿ×ÕXü?ûØwý…¾E؈ˆÕ‹ˆˆˆˆÄDDDDav’§¯0éP‹‹)*Òv¤AÈÞ™o—}Ý…Ô‡†G'ýÿÿµþ­/¿Éï~Úßõl7ú Ãýü¤FˆÚ!‘óŒBGÌf´mF3GrÇ,s9c™Ìæ±Ë±Ë±ÒÈs²:§H‚Ò!#Šá" äWeÅKd‡%v>˜A§xÝÕßÞG§wþ›KÛKïØ0JýX¥ôþ¿cýµaÿáo߫ͯÿþ¿ß؈ˆˆˆˆˆˆˆ@ƒ.—Ìf3c8êXäqª\Š8™ÇûþûbÅ>è¸ÓNôÿö“¤œ‹®•Yé±]ÚU«ÓUÿ‡¯bƒ†ûø[ÿ¬ˆìDDB!@„ B ‚DB! ÎA,rÇ,r+–9œÎaˆhåýûxˆ„„„D¡á‡ÕH/=µýâÝÿ]÷¿Å1I»ƒAÒ 6‚aÅ4šEzhïßúóOÒÃ~×öA£ŒÆc»´íu1ٌ¿˜ÿq ‚  `ƒa²8iÁ Š\]"¹}þý ¿_-Ãþ¿ÝXÿ Â¶a{^Âð {MZ½ïÍXn½ÐøÏáÖÓ½, ø¶–â"""""â""" ÄDDDz¡wÚ„DDU×%¯ÿîþåÿ˜ØxUzÛߦ¿éþþÙ£hÚ6Œf3ŒÆ!#åâñ|Ú1˜Ìf9‡"¹c™Ì9ng0åŽ@ÜrÇb(0BALr(äW  @ätÇÒÿûíÝ/ÿÐaûµUùï´ÒîÂÛ_iwÿÿýè{¸ÕDDDDDY}4çTu"޼"Q¯ü7ÅÇÿô6þäÝ¥§W±šÄ^š½n""!@„ ‚ AØBÂA „FsD±ËÎXäœÃ®qÅÄDDD…6» ~ÿ¾ÿõÿé ø¨¤ÓŽ*“AÚA4a„“²1FÑŒÇwj«ÿki¯ÿqA‚A‘Àñâ—Ž!B8„qâÃ-¶½}0Ý¿~þ¿¤>ƒ^¦½V!&؈ˆˆˆˆ„RLP @ƒ ""*ùœDDDDB‚ô½—ϹuÿMˇþ2¼x0˜B(¾@Âdc—²P‚ ¶‰tmFÑ´c1˜Ìf;X"<—¦¨ÎXäAÌæ±Ë! (r†¸äW"¹È£Ñ· 0…ßêé¥MzﮦïOâ)B"""!‚Ç÷wÿÚýˆˆˆŠL¿jËàŽ={ˆƒíbÖ)ßvûBýÄD „!A 0`ˆóbÇ A‘3˜r9cGñmD†Rmé§iÚuiE¯õRÜtc6–ï¿ÿÿâ=!㆜Ã<|Š:DAȃðÈHÆ„·NÒvžÇøøa!  ŠH! A (v28‘Ã4ŽÈàäxŽ!—‹Åà ¾8ˆˆˆÑ'!ÈA„Ébdv™iÝÚh0š±E¾f´mF3¯~^JÕ·d3Ž@ËsvEˆ:–9lÎÈõV!bS<;‘G"DŠäW"ŽFŒDDA˜€„0„E–5i‘¹p¿´"".ïõí1N›±!Aħ‚„  @˜AGsk0âE‚Èô"8‹IÄDhDGûE¹Ñž!‚B@@ˆó AÂG™‡!œs9u,sAÇ,~ÎùŸýÚš®È#ºzb"Aw"¸íWû#oB®mf?ýãÿúb>"#é#èSM Â(t B"@‚Šq`‚‚î@ðP9ꈃ‘"° ¾W\DDDB! Îé!A†waã w4 p &ŒèL!¶Õ‹×ã™ÄDDGó°@‡ÂfRÌÈi•˜‰³±(ÜìÈS¯¦aFó UôÐ"=ÚÈ08µýô#Å„„S†ààƒ‘G"Er äW"ºi}T*……'#`¡4ù¨Œ!gv)|Dh\EÄSÚb‚Å‚<A%8„B!  ¼Î@}­¬î""",0«Á„ ï†Óµ$JV$,ŒÉÎ tEQ´!#à‚>c3ž ;#Š ŽêÙ‡w ŽaÌôчÄD]TÈdt1D"E†qȃØ&¾Ü;‡—„²Õ~VˆÞ ¦êž?þﯡ\2:j"‚ J$|#;D}r úÅ…ÿçb¨…®º§òPEr u¦pƒá…†ôÄB!@„ A‚ !î!l3ÃB Œ;¢Š?ýâ"""(ý5þ·ð°ÉŽëWÚOAdk0«Õ5þ[Ó^ÙÇ~ýC Až9c‘\Š9r äW"¿ÿõÿÿínÚû‡÷ÔDDDEÂ"„7˜b  "  ŒæÏ/£ù‡~w©¯ýoë÷n¯þíl‰#hÆc1˜Ì`‚lÂF±àŽè¾Œïч§ Ìëݾ¨ B!e@ðÐ9r+‘\Š9rðƒÿ h‰% øãÿý%ßÕuÿÿ}¨û¦›e"(Xa@ ‚;¤Ë×eâàx%F½~Ÿ” šEÆH†“Ñ—0DTf Ðpyr:C`ó^b3#'Œ"4Œ »[ç=ŠTßî×@„ B ÁBA)&!qØÈ7t_w"A‘èÏ[˜wñ¿\DDBî½|'‚˜DÇ¢Ç *„Â.N,'„CÁBa0˜(L(Pˆ;wÇZ«a‰ ŒÑÆPý}2˜FûÕ?_æíÎøþ´-Úìta@‚ x äQȃ‘"Ezÿ5¾Â64tt4lÓl5¶NÞŽô-l,Z¡h×+Ìñ{†eÁp‡ÿˆˆˆˆˆ°í‹ #Ž!BBŽXåŽXæs9œ A @ƒ#Â$w`‚FÄDDBaßö©>+{¤éXdo[_I·’¶•êÜûI8vGl;#º½œ#3þ­,44ôÛ[$Ñ´mÌf3Œ¼cweÂ;»D~ȃ–9cµ‘ÿú«ÿÒ@„ BN@ðÎ9È®Eˆòöþœi_ ÒºÒv†›ß§ái7Ópƒ{'k·kÚoa4ÐA“—ãö&íÌ>Xõÿߪ–?zcv",Ž‚!‚@‚Gp qÈ,Ž“´ÙÅzëUÿÿ¿¯Õëûþ¯ßCý}~îŒì/÷˜w{!‡Ó\õ뱄B!0„ ‚ds Šp !r#™ÜÃqÌæs:™ö¿oñ騈„„AG…ü‘èqúކÂ^?ãþŸÚýÿý ‚ ¢ïÿIÞ™p}'Û^g”™„o½S_ý{ÿÿˆ‹ãB-†GMPáŠ(q`‚ˆ(äW"ŽDˆ®A@ÿçôÿº¯ø„ÿõÖÿÄ/ÿûרÿovÓïûß®""""!qÄP¦A! 0Žá ŽËÀ˜Fp‘݇A —/&G#²8äpÖˆˆˆŠˆŠû_,gåÔ¿– h±?Ëÿø_ÿýWÿÚVõÖ—«jéi6T#hÚ1˜Ìf3Žî˲8¥ýS_öXõõBÿúˆˆ<È®Er+‘\‚Òeâùßÿÿÿáÿÿ÷ßÂ-ÿÿ÷ȃºüŠôï ˆ/ÿüWãîïõ×»C‘CˆˆŠ"Pá‚ A†AqÈ Ö9ÃX~ª«´Ö#^×ÿ÷þOÿÿÿ„ÿ÷OQ†/ïŸ_þ?ì&"‚ @„ A„ „#ŽGáÁÚdpr<\ ǯ|DDDE‚A!c0‚^×ÿÿú_ï¯ú_ÿ°ÂÚËÄ+ýÕC‚ÿéþ†Uæ>õOÿê/]ˆˆdt!„V$ÁÈc‘\Š9È£‘ ¡ÿö¾Âûú¿ÿ÷ÿ_ÿKÿö!t‚ÿÎh¸yì<“ÿÿkÄDDDB!!$(0B #¹Á¬x‘óš0ä3ŽX刈ˆŠ„Al„^?“þ®Oý“®ÉÒý“¯ìŸÞºÿÿù‡ ¿":þÒ­¢ì§iº ÿÓß² FÑŒÆc1˜ïµ«Aó/!È9‡&9œÃ§öê""$!ȃ‘\Š9ÒjL¦ 8…aÉ(„(_ö×ûI½µõ¤ýt»õõÿý!ÒÐ_ñZzþ—ÿÍOZ.qÅÜk®˜ºˆˆˆ ‚Gv$ ‚ A˜vÜ‚AÜÈãB"#A(M‰ BV S1„C=¸Bš´¾­nì%°ÖþÂ_ÃR1ï]ÿú±ØKþ©ZÞÿ÷û{ôà‚:A$tB@‚@ƒA ;ãqËrXäs9 È:«ÕuÿãÉ 1Š8AÑQÆiêšìWjÅ6а®aE_Å}¯ý…ÿù9K§½Õ[®éWû×ë[îë÷þ?â""",Ž! AƒA‰Ç!’=×´„ƒl&N ãi ˆ¹v½4é;*c $ÚbaØ5V¢›JÒ»bªêœAµfš_[VÓ»X‹VÓÖý{!!0„ ‚ Ð Aˆ@„†Èg±ÈŽXå¹ÜÎgeàM|Æ«0ä ä|DD^é^Ó!²$4›j’ÓK„A¸N0Ó"ŽAdoi… ÐmSÅ &ÈÞƒA Â ö•ýÂa ÃJÐqa4ÓV­;#´mÕþ®AR=ˆˆÖ= üX¦ˆÉ ‘"¹ȯޛúnƒk{¤õøˆ0C-Á! ! Âa ‚ƒ0ƒ0½¦¾šªz† ýjÓâ280ƒ´!é¦DDDDBA‚ Ž‚(vGáÆ¿þÖý]uõÔ0¡q# ‚‚‚A „ ‚ r èBa@‚ÃqˆØåŽXáL9r(êÿ®ë­ˆˆ‰!ÅÃßÿcþŸÿÖ„0¹6.³iUÿ®wGæw[ñ¡mb0à €fŠ9r öE{·ýtÝx¾ÿa%"""!„B! Â0A B!8ä5‡,rÇ#ØEã—äQÈΦDDE_þ¿ú¯üUrl1˜Ìf4íSOîîaêŒ>¤Çh^ûIq!’‡ C‘\Š9ãØö‚ÿû_M¢ºâ#TÕ=VÓHRCDX A„ ‚A0äG  s9œÃ‰¨E·ÿÿÇè0Á%ɱ4m„‚A ‚‚A0èîÄCI—/Îä3Š?ý~;؈‘ŽAræõÿÿˆü›_¯ÿïÿ„B A†$ˆ@„†@ŽDˆ:ø Ç~—÷æaÿaq@„ B!`‚a îG„1ks=iÌsfDDB7_ÿý .wèÌf3ŽÓ´Óä;í}Þºïê1!ã‘\Š9È®A@ä3,uAÚûÿ]äOøóPsÂP ܧR”삈r©ª¦¸ºbÈè"°D0Ž8a‚a Œar ä3G"aÄKq&8–8ˆü?ÿ}{_ýpƒ‡wa4!•hÚaA „B@‚‚g â6Ž9s=X"?ÿeÁd!$FN—߯½öš‘Ãa»M[AG‘ ÿÿÿÿëtÂD0Á„Hdäsˆ­¿ý×ïþd-”ñ‘R"Hí:;-_aƒr$6DËM6ÒG…„B Á AŽ8a‚ Gt%Vg3‚#ýH7ˆ>gDp<3Û#züˆï§¯½§ò¬2«‚˜&BÓ%l§`™¬!8ø}-Ãtµm œƒÌf3ŽîîÖAÚÝÖ¿0ö)ÐûˆˆÈqȃ‘]—Áöý:»}6¯¿Á¯j²ÃaB…ïéS{[êâ#UUMVC‹¦“h"†Ž‚ B ŽÁ ‚&G²â— €$.)qHâäïoõ}~éõ_ ”Pì ÂíªÞöÿ}9V ‚‚‚A „BA™vGŽÁ2ØÝÜíG¿¬ãÿˆˆ„‚#ÚN“iwi6•­ÿô í{´f6œ;½~·ïþõÈ…~Ÿÿü}ÿÅhD G0!$f ñ½Ui7PÂI¶„'§V××Ü”,S"« ׆Ç÷É…í$¯óþ“ˆˆˆˆ@„ B ÂBE8„$G„$­]=.:ê.!—¡«a&>)´¡¤Þÿwéëíÿt½¿Õ߇îAæ3ŒÆc»OæsD›ÿò§ZI œqAË—pk#†r=Å1 ¤Ã Š S *§û®Ÿþßî«Ý/ÛñÿèDhj©¦°ŠPâ6‚Aí E"(Ba8érÝ¢ê6E„ES0˜M0˜M*ÿ}}u÷þé|ú­_‰& ‚è „B!‚B 4ËŠ^Òa·M289‘Á ñÿê=Ðdp!f‰<@Âaa™Äf¦¼ëùŸ›d Ù)'ˆ×éûºÙoEÚ[øû–;×ÿÿþïÚiˆˆ† Îáˆ@ƒ Àe‘Ä#†M-È®Ðqô"""#þ¤D%–á‚}„Á:flû5Á@ÈÁ Ø `†åÆP??Šh.`²q’ù hëÿü?ˆˆ‚!@„ BAF‘ØGpADrä‡Ý°D}5WcB"AÿÑpÁ-0†‹ŒaBNEÃZ&þ,'Ø*-Ú-Ü^ƒ t_¿ÿýôJ³ŒÇwvš÷Ëëóç0øéˆÇB!"(ær‚µI&ðËâ ôlôò7k}¤Ø`’m‘h'`´lÕè&ïF·6]Q±† íïNÇ“£pˆˆ M è!ÓA0@ƒ Ž²à€‚G€Œhㄈ5ŽXäþ„Pþ¾8ì éXd¢“Ðpì–4´Ÿö:NÔž4½Ã¼%¤íé]ÿÓ×°„ŒVU•eYP‘ðA †ØHÎ#À[I§ ƒ™ïúñÔD29„ÑÁ3¢òöüv›Û¡¾·iÕ´¿¯§ßßû§éµô¶ñÿüˆúðû_ÿþïþÅTDD0„TG€ˆ®@øqVˆÿ¡U×ê¾5ûµÒúÿ­ÿoôßéwÿ÷®¿ÿhDD!„@„ A„ Áa FpîAqÈ;™È®aÈ39cîaÁõ@^aü4B&A1¾Á ñÔ?þ›Qǯÿû¿ÐýÒCÿ®»û»´B#ŒÇwÚzÞÌ?ÿøô",ŽX²:Єƒ#†H…ô¦±Ë±Ë‚‡ÿú$ Ößþšø/ÿÿðÄ.ÿ÷ÿús“’+ßÄDDD B @„ AD0B@…!ÃD;gÎÈâÁ"GÐK¾­;T„PB!Aè/ú.¼?þ/ÂýËûa—¯t¥Õ>«iu¯½äB7˜FÑ´mÔÇÞ³¹ìÃí5Aÿÿÿ4 „ @ƒA#9î3ªL"¨ ^²5Éü"ãÿì?÷_¸ú÷þ–÷ÿÿ¯ÿÕl*þïîïûéñÓM!‚A$gp‚^þ»þœ0ƒ LìÉ‹Ý/þðßú·è'ûëÿÛAþÆÿ÷­-+ {øA tB!‚A A Â0ì@BŽäÌ9ÒÿñA0A‚H08A Aä­:X ÁúWþøoÿWõïÿK „ŸÿëÇí¥ÖºêíÿÿßßKþÿ¬Eá8  *A Èá’äp.š÷×ýV‚ ›¦B_ÕKÿÊÿõ÷×_ÿþ_ÿöß…÷ÄDDDB   ‚ðAG0A$‡ ã´Èâ&¿0ö,Ž„Fˆ@„ A„A}Ý´·úÿµÍÿôÝš-Wÿû'ZYäé}vN¯«'_6 †¡4݆¥^aFÑ´c1¯ë0ÿÿ÷Ú|cL¾c1„‘êÕSWêñw]ýµíÿévÂ÷ý÷öºûþ»kû¯Ô1T’ ÓvÐŽ"/û6è(@¨4 Ž8ˆ‚0ÄLâ>î Èã¿ê"5¼oýûO¿´¯ÿ×nKÓöïöÂXK¾þ» ÞðÂß Å ˆ”^iªÜ1A%Ñ´!#æ3 „ fvGm$ËÕì‚9õüX@ƒBÎg  „"ùŽß¿ÿ¸‡pj¬Wuv·J›"ê!ß òúÜjK|^— 6¢²ÿ`¿ÿ­ßþ6¯â,XA! ”&¿ ƒÿ꺱ûR0OôÜ'¦' $ÓN)4ÚÝ4«QWi6ÃTÚbö˜øˆˆˆ„BB  œ AG‚ v^ÓWé ˆA! A AA øLÞm˜"q“‘R"CřޜŽm]†“ŠUN“ÃM2P•YpšM0ÂAÅ28LBA†˜TMrl]Ì#hÞa*¯êŒ;ý_ä{Ó¤4öc‘G[}/­°ÿЈ°ˆ%†Bó0¡„D׈0A„!„" ”b#.ˆ†ˆƒ,!Â>Ø&ƒC ÆA0\DDDDwÝ C@‚ &"‚ ˜t_#¸ô=b"’ÆþÖIéª 0˜TõñÄDDDDDG“eÚ6Œf3ŒÆEæ0‘#9‡§ò9œ‚ýþ¸@E A„ ^/’"ù‡ý+hâ[Ú‰!Ú®‰ÿÿÿ[½{ý|DXEAOÚoÿ¯¦ë´ÕŽE};ì ܼ˷Ðøˆˆˆ@„ „ A‚ ! qØa$AÂFƒ½28K_â‚a„AAa.ùc‰o³3„ôÉ=ÞµÿþM‹£y„mÌ%UÿVÿ_ëbÈéècFs9Ÿ3ýzðßï°÷ý1mX§ôßþ"#B"8ÖÁpŠñ‚ Ž‚#8@„qÑ|œ†@f#â(%¨@©Šëë‡Ó§·ËÅö?òl¡FÐ „˜Ìf0A‚@‚L¸"eæA0ñÒäÿþÔHdá‚3ÂA ˜#Â/ÃýVßþÛÿ[ÓåX‡ÐC´‚ÿM=|nßú!8b Ä·U¿ÿ¬?ïÞ«uÒù>ü øBÂN\Ù œð¢"!@„ „ „ Â#¸@‚aØ Ë‚‡AGv™!_ŠE"  ‚ADO’7Øý´›y ¥¿ˆ£Óí`ÂS$f3…z¦¿ÿû·ÓþÄPÐÂFs:™Ìþµ_{_ßxÛký¿è tK ‚vѺhDF…Ä\h X@©6‚*„Pâ& 1„wEðFÄDDZ’;þÖ}¦ÿ½¿é:¶Ó´ÈŽÔ6ÓFU#hÚ‘ðA 1‚HøA i£ÆõL޳´aÈAýú¼A%[™Îæs8 „§I&_1ߢcÿ5 ÿ;þiáÿ¤é7}S¥o_ïõ_õû´£LD0Šˆ@ƒ@‚¯ÿëïÂ_Zm®aé´ôóÿIÖÿDD!„BBA !@‚$gpÄCEðŽèBñ²8"סÁA@ƒA ‚ ¤Â~›ë²ôÒðÿý'ßõÝ#!„m^¿ÿÌæ{Gþ«ú¬SDÃPs9Ÿþý (½¤ø»@Ó¾Ñ'*ïó/gkWíõô®ñœG"â,„R/£Ì$@ðXj½4ð„F4-øa4"× ¥ßàˆ]…ʰcïö~í¤"""Iæ2ñx¼^/ù §US:ØÈÑÂA ‚Îá 2òeâü+i6- x¦ŠðDQÃä)?ýnêv¨b""""""""uËÅò8g1d|À¥Å#²8„vG‹²;#Åâñx¼^/Ä#ˆGdvG¸!p<W]{M4ÓB,ã„Lg™ÈA¦C¸AÕ4ÈbDæÝ’ÇþÝWûº1em9VXç„"""""""""F1$ð\5ƒ0L"œ_I·¦ÿ÷ui%±A1uhDGÒlþÙh÷Ö*÷DžºKôÚû¯ÿEŽëú¦ô°KÖÿÃÿâ˜ïÚö-úºþÿ÷äG×5ähÊ3á”fÌ ë6Îz.Ï‘ d2ÌžF™H†Œ3æFFqGÿê©¿v¶øL4&iÚaS0˜AÄ?Ó0‚j3æ0A§ÿ÷ßèAXL/· !¢î†ŸpìCF†‹¶oð†m‹¶…§“rGÿÿmë °°—„:V?]Ý éIÂO%oH8H6“µ¶È°'Š„ œkÝÒwýp¤ß™´vÿwûÒî—Z_MÓ»Uµÿ¼'vO±W´“#Ž2Qtbƒ°ž’dûAé¬5a‚Lˆ;tÚ‘ºja6ÂL4Ø´í{í~+_´^õïïÄCßíœv¿Õ=;ÛÓUL†ïLá?µr8I¦Å!5H0Âa8aZjƒb§#„  î÷¯‚úâš×úý`w_×c«_bêÐxAö×i¯A„4ÈCA‚ˆˆˆ0SÁ0„D>“i/_ð¿±ÿAkøþÃÿŠÿ±Ê 5¥Æß~"""""‘#j*Ò~!ÿëoÿǯ'£ÿûK÷Ø`»¿ÿúù7Uaˆ_-ÂÒ þ´N=ÿÔ‚ßÛþŸbKOZÿaþ?ëHC ùSq,ÎÑ‹…7Ä2±×íév¼˜ÿáíÿûÿÿ¶¿ÿÿi$#ÓL-œD, ÌÁ`Á 70!8 îqÉ+"Ž{6É‘Fÿýzaúÿ¶ÿýþÿöÑ7ÿ}}v¿…UŠðƒàîÓD„@‰È1ÄÁ4!„Ÿï_ÓÿºÿÍÿ šÿá´4ÿ¿¾!ÿ´:#æÓ í©‘GPàî 5MWOì&©þ½„ÿ®^u÷“þéZ¬ÿä‡þ×vå½'[i‘!²#ݤvƒ!Ü28híÆ"öÓ°„0ƒ ÿ¦?m_ûý°¿iæ'ôúþL}ƒÄLÓŠM+¤ß·Ÿ6Ú§i„Èd á‘Â7Aí$8“€Ò»[ˆîâXïNÕo¶_­ÿ輦OÛ½¿üjŸŠOVô{ÿéºÐ<‰µziAà ¡Ý&„ZhZ©·Z§k|Di-¡¯ýuoï{Õÿ~7Û]‘GNÂdpši~-!ñÚi¡&ô!±„ÓM†² AÇ *q +_êP½-n»î¿ÿßvfPMÂdíšaMH%‘GM0¡WTÂÚîâ©„«d2‡šÈÀ„v\SùÈ»7¦‹9öb6!äh)œ`ˆWzÿÎoöÿþq~ž""""C„F2Ä‚„D  a&aa2 „ÓNÐkÿ¡ „"Ði…$ p“!¨&˜!i„k~ýx}ÿ¦úÛC&¸B"'Ì2ðØaC!kF¾‹G§&?ЈÐi„ÓH{^ü~ñêÖðÇÌ…"hÊଯH2 ˶všDà‚ˆ¢p98mZýzßùŽ­þvZàPPS*š ‡ÒXþXäy}.½LÑI’r+Òl0UÿÇ-ûõÑëÔ5¬0ƒVì Ð!§{i¦H{%ߊ}.HrX÷§a­ÿÿØ{“ý¦h8zD§ VƾŸ^ßïÕüÐ6ûýWa·ô‚w÷ýÚHEXêÿ߯ÿ» ºoöºÎÅ“äkIÊ¢îÃÿõÿaýú¿¿ýûPºl‡ ¿õéRtúÞÿògíÔ™×ÿ]ƒÿäG[‡ÞEÔ‹§lGÎõ/½[U]~ßÿï±ûúýÛ§þ«Ü7®²,l9Ùò(Gf¢ïAÿ§ý:÷oÿõÿoÿ߬‘þûSÿþ’´ÎBBÁ MFtG@`œ0H t ¬Äw‚ÿ ù tQ˜"@¤0䘤ñvf2@¨¡7GB$äHÌNDŒÄfdÀ¤ŒÁ x}/ÿëPÿÿÿk®»œ¾Ãä‹ýìúBú á i Á QZõ õôì´Õ0T ï;T¡ ƒÂ`¡0¦ h_5a¿ÿµÞŸAû«úßúÅw·ÿöŽR í7¿§DwVíÃAêvqåöž­é£[FÈEÛCšÚM°HÖÞ‚.¢Ý¡l449ò‹¶†8•ø¾ÿþÚ}Z¦ëß[Ý,/Z﾿ã{váÝäà‰2%‘; îÛa2xm]¸NÁ~þ›¦Gm&Õé°ÈǤé7I7­6ô‚+é6êé;#¼ Ò  _uu릚nØ[Õµû]µ¿]t·ºÂ_éo¾/NûáÕöEÀäK}+¶©×ýcWÚt'Ka Wþ÷¤ß÷¾“²gþÕ­£[ Öû „;ˆ–8h:ïÕ6Òßt…´µßõÿ ·Öÿ¿®ÞÞîÈ·é]ë¿~î›úö¿ý-ëý.÷[÷ON“¢íøâ“N£ØpÕ6ÂI§j›{u“ ÷H0^õ_ÿ÷¯÷½÷÷õ÷qäAÊzñ®£¡†¾7T?‘ý±kõ÷H7êµdWA¦ž)6)5b‚ ƒ à ©!„xab,&‚«ëë¯Íýë·Wÿß»¿òhþëÿˆ_¿ø÷þ…ÿº«½BT(A„ÂE´Âi¦œ5†(1 $¼RšlC 4gH$Êé˜Ç}áý¿›šÝtÿö¾XÏ˯×,'˜©Ô´ûDëü´öÂúö*üeØ! Å¡4  !0Bq êulPDpE‚n'§ï¨Ã_ÿß[ì~½u¯þü"ß«¯õýpÂ,ý÷ñ%Å# Žˆh¾8 ¦ðº}ÿûïÔ}v gÇ‘±•šµÿÿþ_é{ÿûaÿì?#ÄDDM Þ£Â$ï×Vý÷í~ødœ$Âa›gÓ:‚ø Ì ûö«ÿÿô¿ÿ^ðÚ_ôÚÿ±þGŸÂ~8áÿüzü5‹CÂi„ÓÓ´ïi÷¿¿ûKÛköûü6—ý·ÿ÷ª§×ý´Xÿ¯â—mÙ md;¿“qw¢Núða}“ªÒr…}“¯'þò„öN»÷ìŸÝ}¿úo­?éþÝ7ÿõ,w¶ûO¼&A"ßNÓøß­ý¯ëÚ_V¾»f¥fŸ_YBoþðßõO¿½ãýÖõ¿áSíºMo»TðƒþݶµÕ„›Øim®·im®Ø[K¾×V¿õ+Âwÿ¶©ü‰ù{ÿð–öÿkñM>:õõá‚WjÇiÅlU®ÃjKm&ÁuØ`–ß…öïÿÿÖOuîèÿ"×÷¹cèBîˆÜmm+ÕzlRÚM1m-D"àªb¤U‚QW². »J!¯íî¾ÚÿCï¸oëKDHè{n–á~«q ixMÐAÅBi ´È®©„í4Ä&“Nœ'jȯMÂ÷®çbÊ:¯ý|§Ã§õÿÞuá}$F£…ëaT Ðdœi Âa4ÂkaP0ƒ V˜Wš{PÈÝ_kò–`™Ø!›2°×sùÇßéÿ¹ÊßÒ×(·8µÉñÖÖ¼-¯ˆˆËgRi=UMSË’™-Ä.dW]ïš^ø®òýý×í'þïv‰GëôIìwðDq±^ýuU§ÿjÚÿ®ôúþ¸¯.oMÚð‚ý/“z ªñÂí>è·O¾ªÓ_ö’þ·K}k«®—¯úþ–N¿ÿñîIwÞ½VØa{]n•ízªýÚnÓi¯ý„þ×ë¯y*ñ}ÅëÂhZÅ&¶˜%j©¡ !CµUm0š_ *z¤š!&Òõ¯ÿþ¿æI[‹MZÚM0„pÖÂ’ªÅûh“ˆ°šªÇ~„[ú^µ_×úi®ê)a  „-&˜„ÄDUÚIÕè>F z.3@¤â'—#1Of#AI2'š ®K¥4ëñÁ /Er UA;!\ nëâ©:â­ü0]°© qi‚™qKŸ„ËŒ&ƒ†`…çÑæ\KÓ6ÏA²#éâ""$ˆˆˆ’2œ!pÀ´Ae€ž«ñêš}¡§áŸ¡ÓCP¹‚," †a`0IU‡ “"œ‹ÇãA*d@@ eáŠBÖFÝDáÉņG+DÞ‰zD≻õ퉵MSCBи´ÓÁ ƒ´k“-ýöLr;¤ÒNÔ”RxM½S¤ÿ.È;Ã8¤ŸÞN(“í‡&>BMU5J«ýmuÓ}=IJ‰Ø¥êý)!Ó´áéÒ|8dqJ7"ARd0ôœ0R7hœ9£¼¸ª…¯×N®¿]íjÒOÿôþë×ôÿá…¾ÓÓUN“«»"ÅzÉ@žv ‰¶}¥ÿãâ5Bë?CÿéÕ½ëÞ½§JHtëõ×»°ºhm+Ðed!8Íh2I‘Ârq˜GÁÁŸ_ýÿÚÿëÿÿÿÚúøÿëµ¶ŸO¯­4ghH?0…Ⱥº zëòŒá|Š9Ç__®±ÿþ ¿íwûÅûÓkðÐjÒpÃÑ'† úÿÿ½ òôè‘ÿ¯ûH/ÿõê­÷­¦×K´Éþo'ØAä¦Ü®UtN¿þ½ÿ¿ïÿ¯øZõ÷ÿ“¨5¯Ó;5gv#âédO;5ÎË¥¾ îx.Ð_ûÿZzÿÿÿ±H“ÿþÒÿoöý5: Ì+ge¯ý?ýºÿ§ý/»÷&?°NÍ>‚8ÿ éÿ´‚ÿýûoö+ðª¡4ÊÛ*fd¯oÕWÿ}öðÿþïïµÕ>Âk÷ßïõ]ûý†ÿÍKÿ…ÎÕ—$ÿ«UOúýûÿ®ººZêØTMÛ &‰ì/û¢c´ÿÑ2ÏýÉášEÐá "qwz¥ÕzÌ´Mª0õ5"ˆÕ)Køã~ÿâ.á§|qà $ÜKpÒ»m>þп_D,ÉÁ;.ÿý^‰Ô×l-ÿÉìHë1wpÛ½où) eó†p#H¹žé´Ban `¢ v 2x¹ `ˆZg&#ö=‚“²äC ÖÓ#ƒ „¡¦ÅTTRabÓD$V Ó¾àý4­«kòõí+Ó_·Å±wkÂ.avØP†›i/„-4\:ÓL ÁP~1Ã_ïÑc†0¿µv+M¥§BÛC[†šñ©é*h‚ü.â¯TÓDj?û¾?M„nhpî¡Q±õXeõm&ÃÄî'z5ã`ƒ&pƒqél5tx´^Jø)û"ºvšyk‘L-«»¯´Ób-6ì&G¸‹B – 3åé/ï뮯áÁ’zWz·†J ¿ØL ÚM†Oé0Ã$ýx»%-0ˆ³Û ,!:Âf&XB!„BB{6L›•2 „u»ÿ²z}ïÇjˆ„°¸ Î3ÑðçÂçÇ‘ÆfGHÆlÏ8ÍQ/ÿõ¥ïÐû¯íþÕtûú]–o[k§A8E»Í‹ÄDDDDDDD2Ã&Oí4eÁ($&:WÙ : 4ØNÂhXM (]8°ƒ8@˜A˜Î0@Á I‘xÐI9¹|Läõ-ãÈ?ëW¯ú[z¦ÿë÷Óëýê+a×þ½7Aö¸ˆˆˆˆŠ.m #¡‰AœMï² ¿Õp¦´Ó ƒNЋ< ¤  Ø`*9ññ__ŽÕCkÿ‹ÿï…†ü4¿÷«ðªºA¡HÓ»†Nxd¯'tJ‰;Ñ'v‰"Ðì(M4,!jž øZÿô¯ïñ ÿ_ôüˆߊúõþ‚Ö½Ö¬“÷ü2@Pét× änéÙ D}D ‡‡pôIÝÉ ‰ô.ð«ÿòÊ´‡òËúù“ÿ_“'à¿ãþ—ƒ0;K®¿ªë}Òõºd°&¤É9|'äoÃØ Û!é2 Žäî‚odœˆÿÑÿõ¿Ñ£ÿÿßû~qÿ T »\X`¿þÒþ—»Ç]tõ¯Në\ ì'kdð'©8:Z¶®ÓøK¿ÿؤcÿ }úÿÿáõKÿn*íD(«ÿÄÿ_]Ú^Ÿ¦ëðÎ:øHÿ~·ê7§öž´¿ÿïßôŸý¿ÿü‡ßH/¸Ãû ¦¿ü/ÿñô ¿ü~ˆ^‚Ó÷O°—¦?ÿÒßÿÝé¿õëÿ÷ÿß×× Ý0Ì8 Á0›Ký_ä(§ üáv]ñ ûÿßöi߯٧Ký“¤¿û'_÷_mú_¿¥·èDCõ¢O¯ÿªµÿÂÕ…ÿü/÷ÿÿuÿþôß¶¿ÿ¯þ¿WJ—û·|íPgo™(_ýßÿ¢c»Ñ8ÿØ^=÷ü/ÿýv­…mØa-°•ß~ØKýëî× k­¦¸ynù šgj@@A™ˆN3‘°PS†±>GDhCŠú]ÿ“ªÒÿÑ!ÿ¢Qäσy‘PE ç$+e9y™ø@Ða4 ÁfÁ4Ó ‚ah&@ Â0@Á4Bp0†SŒÀ§ äááKL ÂéÄDDDDDD! !d,)8!Ú ÑpLp‘'¢OÞíª,Å¡…M M#„pÌ.a„ƒMàƒ¬"âc°B‘v„,"í…Ћ·hX`‘®tk£] "á„Ñ­ÐDÇh¸´Ó@›Q¦ÓA F°Êúýq¤Ý?î¦AÞ“¶íÅ<¸¤ÚÚ&="<·ÈƒÓNÐŒ&¨ ›AäÁ+ì‹öGdX ƒ²8ÖêÝ=: º}[  áûû G /I„›‘ñ?9Ok»N“í|› ôîì–dqÒ÷äoAIØV‰ÃDžÉ9õDž‰½“xOÒéÃ% ì; ÖÃí0Ÿ¶›ÒW][JÃþ•Ó¿Aê¥nd³OX)8΋±M-töýuÿï ¦íÕ§„ë$=‘½ßÞGºdǵ ‘½²‚C“Ì&é–äïè¿õºÿûê.Ÿ¿ïÞ_ÿu÷߯nÒ¦ÖÝ ¡ èBÿÃ¥ÿúýlXoý«´éµTÿïôÝI:ÝÕ«÷®¿IÿÚÞ·ëû¿ûñ†+Ó]z§íëþ»í½EÛ ØAW^ñ ÚN`ö鄼_¶;cuŵÿNšïÇíS¥ßø¡ø¯â¿úíûQÇ㯺ÿ¯û]'F#aÛÂõëÿ+müW߸Ä/üE×ÐØ÷èía õü0VØjþ¯µÿê·Kzz׊$?ý‡…ïÿ¯ pþCÁÿL=¿ ¿õ×ÃÞ£þdü/ákþ]l"ÇÃoüEëßKþ`züÀMu뚃œ ÐOÿz'÷ÿcm¿¡ûïä:ü‡#û}õë~qû¸ÿÿð ÃÿFÿýßÛÿÐiz 4ØKÁ€åÁ ‘€CaN¡N¡Mçj‚¥ýáôŸïdAûü„»mÿííû…ÿ¯öºÈR×A{Ò ÿÿÃh-†ü%ÿ¶Œ=ûÿÛ­FDžÕÐ.¶ši hYÀC…À¸A” N)%_ïžÃ}ãÿøl7ÿ†ð߬œÿûâ»ß}}t¿þÿ¸vßô¾ïêëÿNÿ%þÓm.Âi§¬"+ý0ƒO%``À!€CݵßUé×ÿ¬‡/‡êÌÄÃíû¤þý÷ØþûÒÿ_ÿÊíÖØ½/ÿFî·ü°ö›}‚#ö°š $všÑÛ÷÷…_»{OÿÕR×·Wù1ëŸÛÍáïSK__üÑ7³OìÑY?_ßýÿºþ}:ç˜MÝdëÿ'ßkÿ²uMÕtëëÚºTï´ÓM$¦¤ ˆônam;ÄZÃO¨ˆîÓ´ï»Bû˾ÖÖíýþMÚ¥÷úý¦ov¤Ç¯ëiÓÿÿÚ_Ûý½»«k_ß~×þªÝ­ñ_õozÃúþ“ýaÒmù("Ŧ"^Ðdp"iÅÄ_¡÷¦šñ,zõwëØJа¶²n×äÝ…·öÖ¸jØJû[ýöýýýV»öÂW×ß°Ö¾žŸ·ÿÿïþ½;^½ð·ü;ÔU¦G"¡„IÃí,'i‘ÁâïM>.â¢"/‰ž„\W\0—±LjÝ„Õ;†k÷Å{d~êÁ;î›Øû ÙuÚ Ú\Âî)&õµ¯ÿ^ö—ôÿÓ¤Û¾õ²7NÂßi¦*!1Zi¦G±¡a Ótâ¡Û§´ÕÁÄ=V5M5V“N;V!ßjØJ–!ÆÔlií-ÚM¥öh¯½åHLèÕ­íÕþ¯îúÿÜDC' „˲VLLŠ970™Õ;ÓL.<‰ ´ÚM(–ý28'µA=‘Â8i²8 Ði Ðl$Ó¨©(…Ä& ‘]4Ða5A:L&ÒiÅ!VÚÿ¼&x0Çëþ¾¶¿ý¯ñ“r ¡ð"ƒ ! E8’ €™§M0M2!SU†á„ ! Âaˆa4""!„"Dð`˜Dì‘4,&š ËZ1ÂaA„A•Bc„O°Á&ÿzi¯ßúOãŠOxïîs|DDDDDC=G-Na0˜T,*ÄDDDDDDDDDDDDDqX¨}f~‰ÃÑ7ö«þ?]ߪŽ"""8ýA´ßöÿdG¤ûõÿký×÷ëø†¿ìjì'§õÿãþgwë­…üCÿv¶­~å»Kÿ¿ÛøãL›˜ñÿÒý?ù˜'_±þŸ÷ýįßúÿýÿzÿøp¾¿M}íH³ÿµø×„ü/þÿû[ÿ¿" /î‰Gÿÿ!®ÿÿÿ‘bV…ÿ×ÿíz{ÿ}oïºdÊéâžÿáÒûý¯×ÿíwÿ}JüAS&—ÿûö×ÿ]ÿ§÷ÿÎH˜û]A3µfw6Mÿ}~þŸ´»ÿëÿÅißßP¡¦¯Ÿh;ëÂïý¶¸õăNîÓýùoSè4Æ›´Ö†­ö»×úéiçk91¸™¡wmüÈo;+Õ^ÓÐ~ Øjši¶’nŸÚªêº~ïöˆÇƒ8ç !dQÓA…µê›šjØA'ªi¦ F‡®bUÕÿü"s|DC àDݤíh§Ø¥ši¡ Âƒˆ3AIJˆð¤äšd#!„ÿý4›â""""!›X „ÓÓÐTÓÓD08´Â ƒ6aOA4Í— Ô8ý|ìgz$›â"""2p ì*iñi…LL°ƒÂ }œ35 ô"82 B,Ë’'ËÕ4Òo œ0˜)|¸hœQ7¢qa1kº õÓL&ƒ¦pPƒ´ÁaB×ÿ­ü'I½’ŠN¶ìÏ;ì-&ïDÞ'~í¢C¿†šzú£Õ[ÿ½ì—&ëªd(ý-Úzm‘a¤úAºwj“A6õ¢NôN2ßäk"ù£²YÍFkak3Fó6CG#¬SÝ'ýÐþ“ ÿ%ɽßt¶šý-[wäWßR7á‘Å'Iü3†p°ƒ4 =Â3a8>ÁB`‚„ `ƒ4¿ÿña„¾í*_ûuµûT߬'ß ý=vþ Û0ž‹pÖÂ-ÈœXá„/ð†‹¶´[‘8±ÚeÂûÿýt!~„/û¯â¯Š÷uM6ÝSJî¯cé>üÖØ ‚]A;"» _NȯA:Á2ã8ÿ´HIüÁý¾Áz÷ÿÿ’Ÿþÿ}Ã% &ê›VÒ„“l'÷ “×h>Â_B ñœ\ˆËÿõ_ø_ÐÿÿÕVŸM/w_ þÃýßhR}n½Òzè{jצà ’™sÍA´Kä0Ê*¥ÞìW¢wü"1ÿ¯ø_öãߺ§ ëߨÿ¯º¶¾¿þý?ª‹'„ww_ð™nëëÉö½/øOßõè“öþ+¾>Âÿ·÷ü|ý þñÕ7ºíYê ìB!s¯ßj‚ìý)1ÿÿè'ô÷~$ãý7íý.—ïÿþýV¿ü»"Á!ÈÓa4‰Îê%ý~Õ…ÿûëÞŸÿZÿjë÷°ßÃþZO¡~‹¯í®þ[ ]ÿ^–›ÚéõVÒÛ#ý¶³°Õo]ûUÕ{^EuÝu_øaÿÿõÿøEÇÛKUÿÿíë¤>ö¡8b¤1™Ç—ìǦÓNÿý{MZuÖµþóûýóQ¶¿ýh/î¶¿áúßÓü4bpÓj!¼8â-ˆ‹âÛJâ!ìLúëDÝÓݯëþÿþè'ŠÿKö*ÿöûõÿæExâM{í=\C¶)0…´ØZ{I×´#M†…þÿ·U¶þÝkûZÿüqôþÖˆ¼Â$á0©„ûÈ0ä0?kºbž˜¦)¦Â% 6-/ûdýu¼ú²uþºþ¬Ÿÿßÿ¾¦c3Í™Ã'˜¯Q äiÂdñšrv˜BÉŒL&G ¦NÓ\V±ù&»îêþ´µý´¿ô¯ÿßî’~0ƒ, Ó6gš"y—QdAÙáLóŒÙšÈŽˆ[(d£ÔTDDDDDE›Ì,4"Aª &E –ï¯avé[NÂ_¶—¯ö<ÿðÿëûT-;A…Dn³Mi‚…‘Æ`gƒ0A©æc'š#âšfÌÑÖ""#ƒ"&g÷ØUb»K¹1_˜M¥mªjˆ$Å'ÿ¿Ó 0ÿ •“‡¢pÝæéªi¯q¡h5M°ƒA—4€\"U4’ûJ!Û²-µ^ í8Øa%ˆ ¯õÎ!üR·ï»"Á)6î¯A§EÝe¸$]ùoëÑ7¢cÓUDÇwÁ—~)‘\ ›  Ä$Aì šm! ÙPh6ÚÝoðªþ½… §ßwëomÏÞ[äG«Tè»èœ4™N‹{M‹òà „!„ !Á„"ÂXP„pÂtõµÿýý{N·÷VÞ—{¥Ér{}éÃAê•Ò½'I“é$H¤õ^"""ŽDDDQˆb0Ÿÿ_ìBÿ¿Ø¾±v+õí×ûÿQ^’tÞìé=i „ßî-/ úßÞ©,=ká‹z¿ü1Câšôž»hÉG ÕV±J?È®×èÿöwÉ}o·Ý/û~£ýõ J¨ÎÍLZûI5HD0ÿ¿äDcÿÿ½:¡aòzWaºký´Ã‚ÿÿm3SA” û;V2A!ûVÒÿh¾~Ÿÿÿ†ÿÿmÅ?ërzdÈÿü5 „;ÆA§ñQ_۠說ÿ^õa¿_n5ö)ï÷ö×TLv¡4Âiû ¯í«k®—ûuåÐnDš0ß`¾ÿh?kúûhœ^Ò úrpÿ Áuÿô³läríû[i¦´Ãúù#È®¿¦ÌïPGÝxoDè»i6î‰Ý&ÿö›ki Ëˆši§x^յжëa§ö‹öõþ0gïÚhÖc¦é_zt®¿¦œZÚa4"Ó½+ [±3û†ûéÚþBÔÛ ºk¿~úõÕý:»ÿðëüE¦›A«UPê"“M;ëµN⸙ØD‡‚)ö—w‘¢ÕZu¯ÿì§(sŽ0ƒ02à¡ÏÜÄ×Lƒ¯ 1[µöšp÷ihC†‰ºA‘Á… µUOA‚  þEP?8dtu#LÛ$ÿâ"""""!¦LÕ²ba27MPaTŽoQU÷Ò¿lR t‡Óö‚fp©%y?ˆˆˆˆˆˆa 0ƒDiÚg0ƒL&MqH“¶«N¬tÓ »ù^™_ÑW™ëñtš aa.°„ $&ÃÁ21Ú.è›ô[Ñ'º$=y>,–l!ñS+¹¦ ½CˆˆˆŠ·½:Ý~›dX úAÿi­t×ë_Âb¿×öµÿÿ &šÃ}9\\ýª¾«_ ªééï»k÷¦§uðdqý;ëí‹/® ucíø´v°±;%Bwk~Åòà’û_ðü?î•u]û X!¯a¯ûíû¿kªåp5òº¨Ø_þ—áõ߇çzõU××å;%YˆØ+˜0 DA ‡2"fâÿ_+ ÃAuÿ¿ û¢:D £‘!©:7&g i’,–dn5å«Rb5A<Û:ýAB¯d‰0…3 p…§ `ðC´CµþÍ5]ëÿÒ úmø  ‚ "Á„Âdr6GÚ a „B38 ÁfÓIäɦ˜!.=9ÐD9?¦’©ì:]ïÉŽóÈ?§é"á£[ ѳ‚†Âh±ØCtkxPP˜DÝ„-4\: Z4FcM?½<‘`èñ4Áh'AÛH' ´èŒz¦éi*Õ¿ýõ­¿úzM¥»"ÃðÁ>ì‹{„6ȰÙsþÄîÐ&Õ)8`–DzNË™4l yrâºßÚÝ:NµAÕ‚a2cA°í„Þ¶ ‹íí{µÞ­³í½~Ú}ðÉÂö_m>“xvŸ°É:Iº¼0›V ÒmâÊï­÷m%Ý'õßzsçL„²-“r&]¶¡„‚- Dv—ÄjÝš4›úOלw^˜õÿBýS¯WÿÂt¶‡¿ýÿõÙsa?_ÿu§«ß¸wýúßd[vìU¶&* (i±pÂM¥ÿm_«¿ìþý¯ÿk_þ¿z½>J5¿þÖoÝ$÷I×OïKuý¶ðÓ dAÂpÔS­EEEõ¨«ßÿñþ+þ£Æ?úÿÇÂt›äFm—"qå SÃ}â®^Ÿoÿéûï߃,µa ¦Jfš Õ~ö­ÐXÃõÿÿ ÿ® þïý~¿"ÂvG#†ê.¶;_bD÷æ÷¶¿7ÿxˆˆˆˆf. h0¾˜õ 7ûÿôZwáéå—ÿëüËϽ?Mö«êÖá¾A›28¦oKöÇ_ïéŒ"á°ß¶ÿÿëÂ.?ö¸"ãÿÿñù!èéÝŠ&ïÖ® UØ4"ºúŒ?ÇïöºK ý7ïÿþ‚ÿýRÿÛ¥ÿK^á‘Þ·w¦¡ãtXûþÑ7¢o»­X?^¯ð×¥¿á¿ÿÛü/ÿ»¥ÿ±_ßòÅwkI×ÒmoÛ­¾g{™ Òã‡ÇÔ±ßì&,6µ‡ÿÿ(_×ÿú_ü/ò…ÿúÕ§ÿ×í[o]]dÜ ûº¥¿á-ÿ¯8Ÿ¼òÿíÿû4û'_ÿ8—í}ïB¾º¿·™‚SnÛ»Z^‰Ž=¿Š¦?¯×_õþÒÿÿÛ÷_ÿ_íÿ¯ÿüˆ=>Ãúût¿OíýoûÚÛ¯ßö¿¶·Ý¯ý„–J×ýoØiïÿäÄ»ªá¬*¶!Úkoÿþ¢•öõ"Æ/ø¥Ü¿k~ÅqVv] Š%ÿŠÿ'ÿöþ¿ïxmê/ ëï"=ùþþÓ¼=4Ó†ºlˆ=4Ói4â´Õ4é]‹cM4áÆšm~Ú_ëÿþœæ‹zg0պ䌺ÿéÃûûÿL”&)=bI°¡ ÓM«V™$Ði¦A°¤WXM4Ûi5jÈÿÚÿõ÷ÿí+íþý7D£þÕyžûßÄC0Šˆša„ Â4B!„&ˆˆaa  Â„"OÆŸÿÍ?^³KÅ$›šý>†ð¿ÿÜýÏ)Þþ"""""""(äDZL&×û†Ÿv¾«­Þþú,{¯ÿ¾)†üS[ÿW}¯®ØJôíXiv´ÚWíé^¶Ò_·Õ}zï¿êvt"]=b®ÂЊ\+v÷ßÞ·Úý«ú®Þþ¸B Ž,Fš¡§tÚ¯ ŽJÂkéÓØ_×½þKûVÈ.䄚 Ó à TÂhpÖ"Õ‹ë ÕáwMýŠâ, gôA„Ô'ê!1V…E6ƒÝ„Ð`…¶¿µÄDDDDYP0˜A¡>Õq BâßÃÄHºA²vL' ¦Dc#³€Ó Üxp×ÿ¯ÿË9`¿Ë90éÖÎþ%Ÿ–ã#8·ƒ0ŽÃ'P  §xÉYò;è…£²ʰ„ã2г"Í=„,¸SÀ®e&=UB¨&BÍJFdI„Âh0ïþ´Â¯I§´× ªøv™>aôÿ'dQï#vJÈÈS8αKF¡ô.îûÿªÖ{ ÚéƒR>!`‰¨&©•‚L§3vœg××>jÍ[»îîï&ëÝHߦŽËê$I—þõ ¬ÍÐk[ôÂ…ðO¿ÖýÎnââÝ¿×ô×Uûõ^¸}¯_]{"£]ío¤òS~£íÒþ½ª•Í}/¥ï¹Ü=4òá?þ2qNA›3Ì äd@"?— «—2‚%:”jº}ÿêŸúªëíô¿½sµKоpáÝûí4ÓAÚfáC‹A„!„Îã!‡<à%)×6g œ²œ».È5_íä3R5ƆHͲAù Èdu<Ó#f'G#ætd4rNwdFf¸‰Éšã8êɶ_o¥æ÷·_ýEߨ*Ñï¶-;¾Ó‹M5T.0B!„p‚ !ÏÀˆˆŸg³†GÌ9ÔDôƒƒ›LaBh„A„0S„la  Ó&4 s£3H0@Ê#6  g ÁaB |1Òõb‘ÈœŽˆùÐ]ßà ÚA6\òQD¡»¢o²8Œˆ=:uLtÓu[ ¸B¦~ÚAè±ØBÑpÂ}Q¡¢í£\+‡F¼ …„Âa©°…„-Ã[„4Â,vá'áÅ ÐfÂÁxÐl"ž18U4Fbš#Œ¡ù#ÿöÖö¤qI·tš‘Ä0˜)Ñ8¾‰Ý» DŸ¤›i¯¦©õêØ$oIÙÚO¤“u¤áÝÒpÐdp'Š6Yv%ÓT›äGl¹‘`Om‘]†3l¸‡ú°ïBÓA„-4"ÂaL@Á4Í‚àƒÂ„þBxCÑ‚'"ƒ#¯)ÏÞ·ý„õÿUïMÓõ½2 v™r#öøRâÉÇDã¢Qp‰E¶/¿½' ”-ØAÿ $êÚ»ÿðšom„ì2Y –5l8iöN“l û„$ ðïŽØV…¢n-8µB4Õ=4üت,"óo80ƒþ–ÿõo÷¦«§TÛ¤­iöië´’od¢ÿh'dw§I¶½ô¿ºÿx¯ô¿÷özúwn›KxOôßÿˆ8á?{ö J(» ^)DÑ †\4N21Èâ‰À´Hwº$?õB×Âꟷÿÿ_ÿÿQºíoõO\U®“¾ÔS´ûý_¥}kO×c Skÿìzÿýzßþ«úú Œ{×aß¿º´Þɽ¹;];†&IÈâ“á“à˜4dï.(·ÿK^¿ÿï÷þ¿Ýw_¿ˆTö¾×ë«ß·¡Ú+ðä‡QŠÿðÿпé¾þ¯ÿô?ö…þÿß_$9<ÿ%‰öK:»ïNï·é?¤®”†"“[ÿ oî½ÿô¿ê$ü¬þ¿zºû®®«ºª¬/Ý7Aký¿úýÝ_ÿÿþºí߆úxøÚé ê´¿ÖéÚÿ+t™!ÂWÃéoì{¿ÿûýâßÿ­ay"ÿØÇÿî²ëÌž‡ûy‹×þüºÿÿ÷ÿòëÿ¶¼=ò#ßõñÿ¿ú¿Òÿ|Uµÿû_—÷ÿþ÷دÿÿ{Öë×nÿ¯þþüOííè×ÿÛÿÿ_®úð¿ÿÿ\<ŠïÜ7ü‹Š¤‡Azð‡ÿõˆ__«ŠþýEß]þ½~õµßÿ¢q¿Þïÿû¾+ïKðßvïü7ÿÿ1ûßÿÿÿý¯5ïþç‘|ø!á^Lg ×÷à¿¿°×î›ÿý×ÿëÒÿ»3·ÿûK¿ü¿îÿßý/ÛÛÒÿðßýÿMëÿøÿýëØ}¿t-ÿýúÿõëÿ§ÿ†¿#±Âö¯µ×uµDˆö¼·«\˜ÿ×»3½w¿¿ª­«(_ÿ‡Û²uïþÿùBý~½ÿÿïý+þû~+ÿkpŸý¿ÿøD£ÿìtßè!O´¬'kÚéÈ~ß­Úöº$?ÿï]|Äþ[ÿ¿õìkùäû÷þy?û®ý7ÿuÿû“¯ý×ß·ê×ø\Ò^¬Óô¿ÿú÷þߨÛûÂݰ”\Zm¥œ‰A«š´.4ïÓ É»†ïþMßþßþÚ[këûý¯ÿ®ÿöºëõ¥¯ÿö¿ý×ý¿O7žÏç–½­ª_§ü±ÿï^—¯ö&? ßßÐcí6)´8a7؆NÓˆ¶â£µ¿aÞœ0ž—íC ØKÿ¿m†Öþûÿá„¿ï^ž¯ïû ÿÇî»ôHwA4Âaz¶¶•¯iz­ÿßÿî—&ì‘·ü#4ûÉòP|'ö¹týr8¿M4ã´"è'hE°Õ?ئÈûÄ;þÛb¢ ö.û#÷ìWv]/u«i/¶GûØ«»#þ×µNÓP[[NÖ/‹cˆ¶Ò°º·{¯ªýëÝ¿è™^[¶Â2p}I« ‘G'‡!`&šÜ0¨0™ ¯ä#«C»V( þš¤ÝS†M‡R ö+‘v”všm|kvV¶šq¦šÒ¬ø0’hDpÒÿ´Õ±Qq ±v©¡}­ì>Ò»¼þöí$„DDE'b!‚ éÃ$8A„"Aža[ Âa4Õ4Ȱš¯vL$ÙÓN)7i„ìŠ8[L(¦‚a4ÚL&Ò '¢ƒ‚i§I¦a„ƒM«#÷DÅtÅêÛWÜEÛi&˜L6BÞäÇj«!‡¦ÄR«ˆˆˆ‰ìÍ0LÂA‹0‡Ä4A„,DÒ4$èpÁ !ˆ†‹B2Ç LpƒDCDA„"Q«„ù.HÒ:ðšjÚdGA„ÓNûªƒŠM &"N/EÑ2UDGDDZA½ñÎ!a2VOPLž¤0äôÂwÚÞ)︅zÚ§ÿ õñ áÈC‚œb ! ! §A¦Ep©ŠKþ„Uûˆˆˆˆˆ¢æOˆa5_×Ð~)¦«Ëp—ÚÿÅ‘6­_kõ^ÔF¸¤òl³ªøf½„4)â‹|¼]ªÂ2)2Zf¦25Zâ? ª0¹Ý³º¢¹ÿk• ‹ {%a q"(úªáSOÇšƒ9°ÀC> ÂGp(@Ëäj:£Z;÷“ÿuÖÚŠî ÂÝ„2„ ‘Ђq}HJhÌ0P28gpî‚iÝÿûm ÛDxÑ-A",màÿPƒ´Ð0È ^„Yÿ Sçi2I•äo-ñÝ‘!´“²$4›H;L$u†;m8m$Ga´Û§çz?ÿ¼‹ TÁAHPSAJqLdÀ†ÐAÄ'ï¥Óki}(}êD¶Ô'I ôˆÉÙí ¤Qÿ“nëMmS} ÑÿïPþ“Óè$´Ûöî›Ò¶žÚ’‚$S 6Ö àÌÄ'@…ÉÂY9”<Ã*5_Þƒ‡ ÂDî4¶aæ/ý{ui>•?~Ûý+~ÞÖíÜ Âi…O A„!ŸŒÄ8eÆf) R30G¤d$ô×MÚúiè ûO©UýZýÿI^ïïKN¯þ½v÷DÞ‰Ñ!ÞžÂk`¡0…¦†0g˜D$ðÈ‘v\Ž ¦ˆÜpelUü”,JKÿáÒMÑ0²`¿ÿëjú^¿»kt¿ßýÿÓIÐM¢wDáè“ÚDž‹wòn4ô-S4A‘Å8a°ƒ, Ê@ç möºëúè']ûu<¯ÓÐÿíj“Ýÿuýýõº÷ûTÆÝi7ÂpËäÞò7zL‚ã´\B%¶ÑoDÝ¡¦¡ *iÖ«¯ÿ¿¯t¢®ªºIZC¥Šßí¥­?Þ8ß~ºTêûz¿ûÓºM:·N^ïºO' ºk“!žï4ôýp¿úN»ªÐß*ô¿íößµ_ï×µ%?2pŸñZ_ýjÕoÉÖ½BwÕš)jɹÝ ÉYÒißue¿æÍÇVtFãé2Zd4my†toå W£®¤8§ßÇö–ýéÌí~*aܱÿ¯÷Þdp`/ïÿ×µÃô˜ôôïû];[O}V“'¯´úÕ/NH3„á0š`š\SÆ0L „Aûb¢‰Ä¬ÌäÇ!fB—j!83H'~þ+ÿ™ûõ¾ë¼Ð×ùcô0·ûûzåÂb ßÿÇÿðÇQikz¦Ÿº´ýìoÖöÞ-„0´ÓH»a ¢Ñü<&á„MÃý:A‚^†—»Í×÷­ìw×׿÷è±ý7ÉÓ‹×ÿþ¸,?÷ÿÿoÄ/ÿÇðÿ¦ÝÙs#v‚ T–ȃ´ž G‚ ?aÒ/º ŽL¸M†L› ‚FÇ„GÖD†ú÷￵ßÿᎩºØêMÈî“Úÿÿþ­ÿüš×ðÞ‚ûi~õû{ÿü êÛ%?°AÒ~Ÿý½&ü2Ot›{]½,2O¸`¤â~v½{ëßýŠ­í}Úëb¿ÿ÷Ñ8·ÿÿÿíöûÿäÅ~Ã×Kþ´­¡÷_úú´¿aûýMï¥ûФڢÝÿn¶¯ÿ[úßÿz«þºux_ý~CŸém¯ÿÿþߢCþ+ÿÿ¯Ûÿ÷þëýwûý½+úÿÒýS¤Òoÿ¶û×"ø÷Ò®¿ýÿ÷¿èš}ÿˆõ†?¿Óÿðßh&ýÿ×öÿ_ÿKÿQºÿø¿ ûÿ«÷ÇÇÖêÿÿ©ÝÓ{zï÷ÿþú¸/]®q~¹„ùcû_ÿ4IWÿ,|›ÿÃÿÿßíÐ_ÿzðßÿÿN—׿ÿÿöÿþ÷ÿ¯ÿû÷]tCóDÇÉŽÔ&éúºý§ù|:ºïû~æ—¨cô/ÿÿßúÿ˜k¿ÿÿú.ª.¹ E¯ÿoû«í·7ÿªßm/ß_Â$ýùݤÚM¡êÛO°¶ÿkö«úªi*jµþ—i÷—Ÿþ¿ÿõFßúûwÿÿ·_ÿþ»öÿ:{ntXo}ÿ÷ä¡û ¿Ûb˜¦6„ذœE¦šm¡«@ié§h_õ½ï_íô6þi¾ÿ·þè$ÿÿþÿÿÿ¿ø_þÿ¶•§Þš^ý{[úïÁû¥ÿ»[z- ˆi¼i¦±qlTFŸ§m¤›Úp~~¿ÿßK½u÷óZwÿÿßïý¥·íÝ6–ÛkÞö¿ö“Öúþõ¯¢Q Ðd-S[v ûiӴض­6“´ãNø´MßÕÿßÿûÿÞ©½ÿÿôÛÿ„LÔ%ê›n“avÛ +ï¥{[Õ¯ôÝî}KòǪшe2Ȇ†IÁ %â¦S‘h˜F› „Õ4Èe½§ôÓV¶C¿Š¯WïéÒýª_ÿò}éþÿûïÉÿ'ÿA?Рƒ`Õ; ¤Å&› $šièBÓíé´­íp˜LÛ0.·ÓˆŽ""""CÄC2pˆ²P|B ”4Ðh5°Ÿkÿ¿ûÿÓþÿímolÔºÿ{Im}B_é0Æ®Å4š±I„-Ò5 › % $›ªh5OM5ˆ¾íU!Q ! 'Ã'´^“ÿ_µõÝÿi>ijØW[þÒê×´»']%Ѓ0ƒA„ *pÓÛP“MöÂLiºЋMPˆw¥B>"#ý¶¾ÛI{0» {i¶]jÇ %†“i7XO·¥x­Žíuþ É*pA‚ ˆ°M8áˆA…µªµý« Àõ¯×‹‘]í­ñìCî8Öé†`®Õ† ZLZpm¥ÓL‹ [K¥øˆˆˆˆ†hDC(2Ašdß )¢l*_ ÂlŠ:¤ÂlR ÚjEza0ÓI„Ã Š¨„Ä&JD›±Aí8iÄDDC ¦š “.W:5ÿa0š¬0½­„Öá“€švaÏAŠa0VÓ ðÔ&תñaSHWˆˆˆˆˆŠˆˆˆˆˆˆˆˆˆˆˆˆˆ‹IÅüh ÂM¿Ó_ˆ²P‚|³‹ÂÂôƒÕ›ùg&I™Vpù‘@¢"?Á0§h3†TÙÚ†dXŒú_ÂáB¨A `ˆ/#Pò*'ùkÿL&OØ\‘³M3³Vd´Fˆþ{<±ß´J¢C¿ }pžvThE‚ Ârä !È ¢È`RFòg]ÅÜ4‰IÑá?ïÕòD¨Hhªk¾JqAêÐN¯ýÃÒ'é®B„Á:µëÿ­6ºNL½?ïCBÓÉÁ šhù´õmHÜŠë?š ™˜Ìó¤æªoû¦)½Óºÿæ¿ûÓ‡§Ýý^ œB 3¸A ab Ï3“ÌO49"Õ¤ë¯ýÓׯýíëëaV¡ô.Ó»MŸ„ÂÎ0ƒ8ûGÅ)3f™ìÅ•Ã\—?]ÿÿO®—z$\Z“ºÕôLz$;ôÓ ˜Oo™²8Љ„•ÙW;)ÎÆ‹„ ÍÇq›˜©Ÿ¤Ž%4›$â5mm~oß[ýë~©&IÈâ¦ØRPõtmߢoDà-~’w!ê½?BÂi„C»0)ÂA›4Â!Ç@r Ž„Rqÿ{N½­¤·WþŸI¶«z×Ûô›I“u¤È.ô½¶ߦ¾Ü³•}~®©Ò&;ôÕSÓL ì ÓÿQý•ÿtÉïMû'vBE†‹¸2ñj‘;xa"á¢Þ‹‹h›ôHz,úºªøþßý-õö*× -ô¿þšöKôµéø)›û«îÂiÒ¿I²8I:OË{¤ÜÜ&ÒÚÇÝü?¯ÿöúC~õ×ûý}>µÿ¨^¾¯°«Óêž½’ûñº»º]:ÿǶ«~—·ËÓûÿÃ÷ÿøô«Öÿ~º¿×pïÚ_ýô?Ûªzõ¶·új½ö¿å¤[ý/oÿÿk}“Gýÿÿ¿öÕv—Þ.üBùÁÿþ!u[þ!Œ1ýªv»uø¦:¿KÛïÿ×îÿþ¿Â_{ÿýôÇämùÓFyùª:Ù>C_ÂøA¯ýaoÿí¿ÇÄ,1ä?ïÿ‡ÿõÝpßÿßÿV¯_ÿÅ+ É Ø Álé› ÁÁ=ÿ ÿÿ& ½ònw+úø-ò,ò#Ú¥ë¯9‡ìÌ_º×Ãzëÿþ—]ïÿ¿ú.TÑo¬°… Ñ­óG-§ýÿÿ­¥ïô"ÛÿVßÞ.õõE÷ÿÎoiÿjiýÉÂZß­Ò¿Óqp[´Ñ²“é=Ã0)åý/vŸÿÑ8ÇémÿáÃþŸ×ÒÖû´¾úû÷Õ'ì&þýÜ*_ÿÿ®+«ÖÈí†K)_~ôÕ gúüWÿÒÞÿÓmÿô¶¿»_’>‰ôïâ*ÓÁv¶§÷{ .»i¥®–§¥N­}?÷ßþî» Úm'_ö¶¨/ô½_þÍ>ºëüŸ †þõ¬?÷œ¶­WUBáøMcmb-Vö%ÃKâXâ¬íÒzh{i÷ªêÕÙÏëû½ÿßÔGzUúÿÿë®ïß¶˜sVú¹˜ºYßñ_Eÿÿâ¤AÕÃØ«BA¦ÓQkÚ¢Òa„MéZÅö¿í/÷‹a¿‡ÿa{ûö_ÿÿ ½½÷ºøuýZ­·]% “¦SMwLRÓV¤Â}6¬0I†“ìW…ø}÷ô»ºñ¯´V­/´ûëaVÕ?ý-éÕ-TD E¦™!ÊÔ+‹äa4Ó[_Ó˜¦==¦¼/·ú,¿‡ÿþÂqh4Ü âÝ&œE÷ØB%Žû®µ­át”DDDDD†hC4ɧB. Ða4ÿÈ{^oö}~qvß^¾Åê›H{hH7pêQqMi‚¾¼0«‚ˆˆˆˆ‹@Âd ÊË Â xA~ß¿è-CzuÿdnA *vƒ B<4×"E€¢£ rpÓŠµGÒaÓŠÄ}/ÃhÈëí¯¶Þ—ü0ƒ8¡BO†‹ ª¦M8dQ×Öö©ªÿøzoÿKÃz0ýˆˆˆˆ‰B) ÉèE„ÉŽPèDUœsúiªwt½/Î&×ÿ²uûý¯üDDDDDDDDD´POÿßoú×óÉØ¦+ÿ_ÝWÖ¶ý\ó¯ë×á?õ½t˜« Þ»_úø†©ÚIÜ0”4ž ûJëÿµìŠôq¦ˆQL&G Ø­ëï°˜Lî@Âõ,u0˜TÈ ëô¹g&!p§Çâ"""#Œ½ƒM4«õì· žg²­¨á4ÓäB¨!h5JÎÄÌègvÉ]þƒ¦Ÿ:‚ Ìß! çÃ4Ø.Kä|¹—DxÝ­T*ª§þ¢-ý Ÿ¢1ÙNàЈˆa|5‡:ƒYÚ#;–úwwÿÿ„<4Ò%Í Ô ê×Â"ŽááJ܃<| ÐR‚†¯DR&X»»»§þ>©XoI“a\:d#ÐA°ØnB» Ãìi¦­ë«ç]÷Ó^Ý%Õ~ôáä\mšMÈÝÈŸPØa<Ší¶‘ÿ4–ý0ƒú«~¯ë¾Þé7·îÓÈöBAK"Ä ƒ{H ûtá>3<Äb0aHÓ'?ëÿâ=º«ÿM¿öýom¿w§ætï‡I¶N궨4Á‹D1„œ4Á8Â&ÿ¦™ÊT<ß×÷Uþß´¿ö7û_ûúÚú¿Þî“–?A§qi¨D\% Á"q˜ÙÏÐq &x(@ÈHƒÈ˜§ Ž3Lø¿ûJ›ûÞ³‰öó_þqÿû¯z{~‹ŠNÂEÀ¶Eé¢ßèáÝßñpÕ\fÈ!yN`…‚a3ƒ<û¯øêÿ«ÿ®¯ÿû\mß¾š¤Æí$ÉCíuÒ˜|±ú¡k¥ÿÝÓ–8áñ×ÿèXê»ÿÿÓïA¦ÿ}÷ë§ú¯;, ‘¢ ‚i„û]{ &߯}-ëŠ' ü±ß6¤ÿÿ×mÕ6´úUÿ¥u_ýQÖÕº¿µèÎÖÑÿý¿´¯ÿŠíd4ñÿ¯·Û\½åéÿþJg=ÿ××ýcÿûIzöëöºNô“•ê»_î·ëÿ×ÿɺuÿöö÷ÿÿþè[n¿¶î·÷Žßë÷ú÷ú÷wÚv°Ò™²uÿöýŠÿúÛKê«®ÿÿcaµVßÿûwÿÚÿÿßßk&þ×ÿ*‰XXãaOÿ°ñò#ú‘_÷Å{KýHÿÿwüÿÿãn;úb¿þL}vÚþÅíÿúê¹ÚVµ¯wú»¿ïÿò,D'ëÓÿíïš7ìÎÿþ[ÉàíúúÿüW_ÿÅ?Ö¾ºíÿòFÚë÷u½þkï¿÷ðÛÕZoëÿÿi¾õ܈?ÿ“×~×ÿ_ãçz ëë®?ûKíµ÷=ÿÝHƒúöÖþ¿ÿü6ûj÷ißö¡ýuªßý×tH} ¿jÁ~šôò­ ëiæÙÑ”¹5Ô©dnO¿ÿ/Ûâº[_·¿Ñíÿÿõ¹´x¾#¿°G§vÚ{W·´ú÷÷÷Vœš7øO¿ôðƒC@ðƒ3œ`žó˜¥vˆK—@ÉšEÌðÉÄD&r)Í‚¸ëuûTõ¯X¿·þ*•Wÿÿ¯¦õR;Z „ÓˆˆµvÒ°žÒ¯¥þš!{îÚú¹¥éÚ l"oj4é­ ¯›†_ƒ0U4Lw…¸ ´[‡FJ…ÿÕ´¯VÝW^Òý¯Z¿ïÿÛö·w EU¦œˆ;A‘×%¦Ö-®ÐiÅ«zm¥¦ÔKzrÝÕ'þzt°R7hØÚ¦’m¦—@›PË6Pѱ ƒlŸRnÂ82ä°Ì që]ëî—­--ëmkÒ^ûút¿K}ëaS#€©öŸx­ˆ_¡ Ø¥b›]1kÚºzM­ÓðƒÓvëúôØdrxÒÒ°ÈÇÿ¸t› •齪Î?ûi6ûð‚[ioú¯ÿÿ®þ÷B!„ & „"0¤QÉ( …M4ÓOím7ì…w{µëI?«õ®÷®ß«´=:º»B“ÿÓÓ­ûNøA¶“ $Ói! 7K‡ë…°CÛNéµûKÖƒ'oRjÔƒÀA­„Õaªÿýúÿ¿é®ëJÿûª¥ºÿë¯Þ¿ºaˆMEat)›iÜ&Ò !ÆœZ‚VÕëïÄDDZæLQŽ*kþ1UÿC¿×ßý G¯Õ¿WßPëè•„UNí5†*ÞÞ;A‘Á„)Œ&ƒ ¤›ÃIDiñÇ ÿïizÿÿ¯¿ÿßÝ}lA„EYˆˆ†Ó# a42tô„W±I½„Šê¢¥ª¯Ö‹/_ùboP‹ÿòÀüÅþ¿þÞ¿ñNÉ$8Baa„ᨤ®ˆÐé/ü"ãÿî´[¥ÿÿ~‹ÿÿõÿ žü!S…Á˜RƒÚ¼ ¿ÿçw »ÿÿÿ/ÿÿÓÿ¨ˆ1U¥íz[ÿí¥î¿ÿÿi~ÿßÞ¿ö˜UUá…‚;²…ÿýÇIq÷ÿ÷éõº0úÿ‹ ¦«ÆªÕ{ÿsOkÿû'Y:ìõï÷M¥ý¡5öKÿûÚkýëýµµõÿúãúb>« .­­ý…ûV»_ûVÂ[a+þ×Û]­kרV)ˆpa"?bšâÝ.˥☮; Ùu·]Ý.×ÿЦ¶6“6¶™ô› ›¦Ö›LCŽÛ &¡°”6¿ÿ…i‘Ä27Ò{ ­ªÂ ŠN“L4A‘Âh&Ä$Ób‚}üJ`„!aˆˆŽ Á B,ah4ÓA„"!§þþ"#B""""/JšÿÄPa4éúBž¼›^¢?Âÿÿ_à øòl¨)@†bš |5 "þðƒ½0ˆ/¡ÓŽw! ‰Y•.VA‹hÓöè Ý“r{MØCðBû'“:È30Ê#†ráœÖ3 Íœ „2$2uýÒ’¶ÛA dÝPdcµDqi„‰=ªVò8gÂ!Ž Â Ñ#e_õI¶úwéíïI†ƒ[#w»,rC‘dX²#Â Ú ›°ƒ¿ýê÷ïivª©'ôöÕ¶˜XwhãŽÛM6‰XnòS–áDW#C*-ý_îõ½Óéoþ÷z[׺OOÓ%ºðLª š‚š d¦wÐ `Èh‡sVPä ÐRàUWºÍãij«ÚJû§ëû¿N­ÿkw¿°hðÚuFvŒÿi¡Á‰ m †¸d5õ8ä>¿»õuê÷ÂIz_§ýy½ðEEX«Š{ýÃ'á«°˜ZM$ÿvšawüã¾Ö+UHb±ôÿ¼vµQÝÿîÿ|7´ôš¿´[ˆ_ÿ»´Xÿß⾫o׿Õ&µúÿÈöÎÂ#°kÈèqA½+ÿùÞ–—·õSû_ú¹Ýün»ßûmä0 “FzZømS[Õ?¼ˆ:dÜ·#r4Õ5U±ÿ±{Z_~’3¼*ìÿëÎ; „€l:¹ 5ΪD\6ˆL.¿j½¤¾¨žpB""""J‘&Ž—~¿ýÍ ýÿñSÿ×ÿØûMBh2€m!†÷Ußí>Ÿt""?¿¼Œ~œ”5¾óÁ{[¤Ÿõß_ïú륄ólëvPÈhÙÈÉ”#Œó:™!h2×Hë&tÈÚ Ñ©#ì†d3dŽ·û]Öôõü}ïÿÝÿýwÈxûõ¿ÿ„ÁÜa0˜ Á0œ³ „A‚a;0ˆU£.ÏhÁˆ°ˆX!ü3FfÓÿõßsýûµñè{òO‘ÿä_û³­§þ¢Â&;ôXì!s]˜EÃBá]†ïA5L!h¸aPhÑV÷¸aB5Ôwýoïoèœ^Iݵ÷û¸}ëá?â""jŒâ8Âiö Fî~ÐA¹v“{ ‘`JÍ;#‹I6`mgÆ Rn4žœ2g,éïIÿû÷_®?=íÿ¢ï#ËŽÜßæîÿô·&á:Mî“°ƒû% a5¤ÛA¾Ÿôž· “¯d±î¶Ö­‡ œ}ñû[k¾¿¥nQí·Ú ƒ{h ßøªŽÛ®½ûÿOßöÓ~Ðõ¶—^­÷Kn•´>ÓÿÿÖ;ÓÕ´•ÓúW°»¿¥ý÷¿®“”v—íÖÿú¯Úïÿü0¿þëÿÿûÓ÷Ø×NlBOB“C´Ø`©Ý«¾ÆëúëkÓkºûÿÇè~+ÿÇú_t‡¡ãü1_Åz‡ûu &ÓA&˜bi†6“°›¦›¦˜*‚°Á[[#m%þ¾¼/ÿ!/ÿuþ‚ýÿ…­¿ˆ™°Á45׆ᦓ]¡ : Šb˜¤Ø¤ÝwôLN”´ü"Çÿó'ÿËO–žØh_…ø Јˆˆˆƒ/‰¸@Èê §írÇA„A¥ $ßÿÿð‚ÿÿû}´µì"ßíþ¯{5—‚@¥ àÎ GÍ„'¬9(2v""""" ÊðLtx0‚ ' *ÿÿÐ_þ¿ÿþ_°Ñxý/ÃöÿÒ¡ÁÁxh4ˆˆˆˆˆÞ¿é~—ÿ·ÿ[ÿI~¢ƒð—X~2ÜŒ{ ‘l‹ÑÓH“Úm6Õoïÿ¯ÿå ÿë[Òýé¿ÿo¥Ní4ÚM: ÚD}doVFíÃDa‘Ùÿ³OI³Oÿßíuû'÷'ïüò¿ÿ“§]aÿúw§ï§oB$ŒÏQÄ í$ÿû]+úþ×í/î¶›K´«ÿõ_ÜÿþÿÿÓõ}ïné† ‚`˜Lì%È ~ÚXJÂZÚÿí…÷í[µ»¿½&×ÿºAúÿͧµû}_×ï –0P *êA(‰°ÿÙ^)BLU¥kdÕŠù»I]ŠÌ&)l/ÿÞÃ;»×Ž?¨ÿV×]w÷áõ@•[¥L®¢!dS$7â“M¤!qN›ƒMI„é†NšŽ–!¦¶’h;AŦ¤ßÿ_îøé/·íƒ²ž’§Óê˜LÍ$AqÚ"±ŽÕ¦ÒTÉBA´šxa'm1 íPiȯMšalŽM8¯ñéÎ=°ú¾õÿqÐKºïj¡VÓÓO !gØà¥À!Áa`˜BÈDD0L!FüWkôÞ±K¥8ïÔÌSÈŽÍ¿If#{ï,uz¬·ÿˆŽ"""""-/ýºý‡üÃí-¿ ІƒõDß]ÿТ(þÑ8tâÿª¾?ÿ½¸­Š@úôC¿ÔÁ‰r˳C4<¹•tÐt«]ßÒAËpîK²C÷ý¿‘»K­ÕÆ`?ÃKýtÓ‹A„û‹ÄQ3¹v\ÈæS“™,'fLƒtù§‹¯Ã^ý!§þý~öío{ ; äWýîÒÚÞ’aA´Á Nì Í„ ™ÁPfÆ|VõíŠ!™†HÉÞO²xœ~?ý£‹¯Î Þþ…ûÉs¦ÚøA¯ç0÷T\=íî)>ÓÓªMU0&åü&šf„a0ƒ ¯ÿt÷ý0ý×ßá¿þƒŸ[i}UKzO ‹º'DǾ‰½ÑqMà ·¥ûJ©ªè5Mtÿøýzïþ‹Ç$õ}¿âñÓzCOì*¦ÙbÅÁ8Ó²o´©¶ê©qi½.×tLtÌïUT[ôÿú_ÚÝ+dÿÓð÷þ×ïÿŠ÷’p¨¯û§ÿx_ÂÒx&ô®;oiY!êú'®øýu ¯ë~Úw«ïútŸÝ~×Þ°†ïý§_åØWKmW ¯¶›íZOaí:CÓ}9PþžžÚ¶*ÒÛ iw·¾ˆ£´‚$ïôHà»ýóËó××ÿ¨Ç_òÈëþ„7êà«õ½uúa„iá6¢“b¤ôÝ7°“kW«¾¶®­?µ³wÿïþr{ûóÚÿæ£EÃÛ–ü˜î]?ûé:°Õ&I&h;MÁ b‚M„ØKõ}á¯Ã[ v—ýÿkO_Ú~þº¿¿yïï÷ÂÿÄ£$flòa @Ì8D1´L&º}á M5 W'±I¦Å1VýÚk¤»Ú^¶—Ýwä3þÂ0ûOóvñ(wa?øˆˆˆˆˆˆˆˆ‰PEàa4Âk &©7M¦—i¤â“^Ø­6¶Õ8¶==ScÜö•¥Ùáªö«{Ú¯™gqåYI‹—µá„Òm'i¦ÕÛM1I½lUÒtšLiÆÅ^Å^‹vñ-Ř~vðPLÈ©¦˜OˆŠB""H„Õ5L/kk ×m&Ò~¤)¥MÓcŠjÿv— ¬ðúˆˆˆˆˆ¨²´0`ƒM ¦é ÔŠ:kØXal&¿ ÐpﺵËBØèDDDCB#D!< ýSïUµò¹i4""#ÿçeˆ©¬EGÒÿªæHþÕú®¿¼ïAÕ]W§çWšâšÞ@ÙÑɬÓ:骕¬‰÷Ë@¿éø òv0A„0A‚a0@ 0GA“q!ˆO f‘ RC"%ó¨R5—|3Ÿ¡Á ð¦E Á Ï† vÓôXï-;F¸EÃZ,vvÝ5ˆaXMð¸(E¸a E¸ndª?k¦±Hü2p†±”ƒ1HÌŒÉP2@ºê(‚ AÉ Ï¡È4Ù ˆ¬„™´¯ú7ÈŽÐA´ž›i­–ƒc 4^N˜`• ÞA°ÉÈ”3ÇÃÂh21ÂMAmCðM0A„ –λ&ëUµ´Ó°ƒ'Ðh?N=ð“¤é;% 'WÒº’Îá’ÊN“‡ÁÒl2y§ÑvÛ8Gãi„ovh"Y“ÂyDL 6A°ÉÚ P© i‚ȧ-7¦‘8Ú¼+BC*6©¶ßúWíöº[Cß~ýZ[MÕïý=6·¤Û¸(Oøi·J©áaˆ íí´Ü-Q,hžS èó¼þ½×ÕeÁ Ánœ2á„K*ˆÉÀé¯è5¯kµTúu½Õì[ý·¦÷ŒŒÿ‹¶½†šé»«Û uJ)¹¿¨D]g`òÚs‡uöý¿¦XëjƒáéïmÁÿ’F?xÿ Wøûîÿÿ¯Wðá”&î»qÃMÛßik^“ƒá3bBy.#‚?#8gèŒFÙã7ûuÛW8~“·qí'÷¦ýªëùy5¿ý]‡þþ¿ÿ& Oë†?pûÃi:«M÷ƒ ”&¡; ‚hz ˆi§ÿÃû]6¿é¥ýÿùb-p_Õè±OÌ+þÿÿýoê¾Ãm5Ø>žg|ÎÅh›êñ¯A*'š¾¬$ö¿m{¿ôØcÙ»IFõ[úÿ_ÿѯÿÿì?ÿïÿõúš[_mvö´¿ÿU­‚W“|Ϥ\$ô\}úºØsû^øãî×ý¯ûÿü%÷ýÿ·ÿÿûë×÷× õì?o}/¿ôAèMûmcNØ/õm“rOm.Øðé_ú-ÛT‹þÿÿý/þ¼7ÿÿÿúþN˜™Åa‡ß‡öö´¾Õ/†—ý~Ó}tí4ïÿ†÷ùÇì?®¸[ø`¾ÉþªÉÕ÷å ü¡ûáÿÿzÿÿûNøøö6´¾0‘ÔO†—ýÖê]þ+ÚÛCïd ëÃ|êÖý|¯ýöÍk_ký“¯º>›þÿÿKÿøÕaö×}ëˆú¿D[ÿ‚)úñýýø{þ¸°þ÷ÇÿûkÚ¶û ¶©þ¿Úôë¿î—Ý+ÿÿÝóp}ü7»ë$éü ×}Z}ÉáY»ÿßë1iþú¿C-Þ·ü0Kê ´Øi' '[a¥~ØK^®¿ºö×ÿÿìéÕÚ[áõn‰ÆØat®;ãûXz÷׿o7zëEã1ýËvÅ-¤ÆÅÅlTC²?—ïcºmoìíª«ÖÝzÿ]7~ºX}×dzÒ øƒb“iVpØìŽi/o×ê¯ûWO™ÛmÍϽ/A„Ý8ØNÐAÔˆ=ŠiŠMjÂV‚´“6Ò´Ø0’×ûé…L-Uà œ0’ÑãW¼ÖúH)ûûiZ´Ø´ëb“M{Úáªß¯«wö»vg««v¾6l&ƒ$àƒXa0šh5¦ƒaE*)6‚lRvÄ$ÛJÂ÷ÂîlRaƒ“tÓtý´‚ 5ÛH0¶¶žÃL&½6¢œ'· %m!Ý¥z¦Û *Wl<ñjÁˆˆˆ†0„A…-­ˆa37 ¨½ýSIÂMˆA7 ‚ P$>äÐDDFMâ!œpši¥…V×Å'ª¨B-¶)8؈^ˆŽ""!„È£Öô"!™Â3‹íí>÷{I ÛKIÄDF„DÏ}“Xì“…~î½ñ & ñq*1 è °Å~ ˆˆˆ•3!]„Áˆ”o„#>Õ ÓQ…õÄ=DGaWøØBÁ?ßM; L ã‰n¸ÿü·=–ùÙ†vE{)nC†#l‚²)â¯"Ö‘›5'Ë@o¶N¦¡Ba0S%ú&ôxm4ýû»ûéë ƒ«´Ó$ßr¯}ûýŠAµiéßÿ§ÿ»E¿³ºÑU÷;¯ÆòÿüzúyÚ¶r¡,Ä«U_÷Iwÿœ3˜§0g‡"'r% Ÿ#ÌÝ!>xóÕÞš‘²3~«n¿®?^ÓJÂë|4ÕM8z@Í…3ä!rS%äxK‰àpÏÐí}v¿®ßÿ ¢ÝËz-è·Û¢ÇÛZ,v¡]ý<&š|4M4Ð~20D†d*BÂ}f¡“Ši<ŠsA/bN) f‘†|h‰äSš r?2BGHèh2ƒ$#q™³$NŠ3fx¼V‡^Òȯð÷V†yvþôL,w¢ÇP´L|±ÚJ‹µI¦Âa´ƒ@ý[EŽÑo nô[°…Ü4Â&8a4ÂE» ž˜  º4A„Â`˜&>ÁB &WËÂýaŽÁ?c.&û]+ù8|^†É=&ŸA:O-蛤ºj[Ñpá^È£Øè è'T°H&Ó µl#em m‚A6†Ðil2@UF†Á#;9­„-:¡ ~Yd ¹j?út¿ßþ¯ù8ÓºØãèZOüvNÓté;ïJᒾæÒpÉB§¥l2NRl;zM´A°êØdqû ,%áž3„i›ÿü:ëoþ¥„ÿõè™È·–ýxÇpÒõý¼Í;ÐoÒÓýÿú}†¶½ WýTÿI?ìœûMï4áwÿê¿Ûÿ¿÷ï~—ê¿ýÛnZ<°–ûÂ#dŽÙ«ÿÆÇ±wºðßÓOÿÓzßkÞ—OÓ¯ÿO¸C#/ùñ˜n}w†ûÿ3_ÿûoþÝ/ë ‡ÿ»Ê‡„º~­·}í/íÇ!â½¥Mï kÙq:ý±“ýoÃ…ÿkeðØOÔÞÿ¯iý¥Ö¾zqüÚ&ðÛßýòcó™À‡‹lä™ãÿ†ÃᅥÕ_ÿÒø{ÿ¿ÉB~»w,pÒX»uàõa¥«~·]¯ao¯ìÜ–ñ¨g¯Ïö—· ƒv¶?„þ.Ø{ ûrõòë‚ï¯MòëËšÁ~ÿž ßÐý;‘Šî?Š‹Ò‹×ŠãúµÂjé²c´½°¾»ŵÒ~¬;ÛÂ.?‡þ°‹~Ú_ÚU¤8E¿Ûé_ÿÚm<&“ªBâÚmŠn)ZV•4iÇkuDSi{þ×û ~Hv ì=þÿÞ‚ÿ~ÿ/Øx¿ÿÿÞƒ šÓL' &·i¦šiÒ …6˜¨Ú]Óküœv\=çú2-·†ô¿ÈEú_}üWú_‡×Ø/ÿâ""""""B@Ê ð0ša4«ea2ÓL)Úi‡úwßPÿõ†Ã{ë÷Û÷úû¯ßíëøo:¯Çþ""""#-â Áƒ(0ƒ*`˜MWþ=~äö•Õ·|?ÿý“§']“ý|SÖöOùBë÷×÷_þ8ˆˆˆŽ÷˜ÿõK¯ó4æ÷ϧÿû¦Ö×m-}¯§ëµÿÏ'×ÿÿþ›¶óE¥v§¿I½ÿ¾õþÖÖÒín×{«¦×´¿û}/úúý„mÅxU¿û°¿é­×ù…iýÝ1Li±[kí¯PÁ-†´ÿõþëÿÅm UOHÝa.#õ»¯NÒŽ.ø6JšºdXw½+±R-Šâ­¤ƒ8.šnºþš† ‰Žâ´!]z ' %N:doA¦ÔSMÚ¦G éŠAï´lŠôpÔ!„h;«_ä¹‘Ñ ŒÈÐË…' kdtJÐa!Ó¤Ó$ëë( ÜA¦L§-JÀƒ0„L&VÂM¦A…mWq š¦6øB „4 ! ð‡ˆø!q ŠKˆlR€Á e[ p&GÈèÂ"\H è¸Rñͦ¤Ý5á2¦ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ±L4þ¡Ô“†Ã?OÓ[Â`„DY°0AˆCÊ “Œ!c‘x¨;š ³.‚×àÁ27 ?¢î‰óh0™;rPÑ+a„Ò%ÓJdnÒN­5†ƒMv6‰b.Èàf ¦ÁŠô„0Ck÷VëÝ m&öAéåÞš Ô·sA8-Ó%²»Á»ˆ‰“Äœx9€äp„pÈ\ìÀ/¨ˆ_· ý÷§}.©[÷§}ÚtN)²wdí†'Ñ2“ü›(ûu×´tƒþýkªý{ÓÝð߸Øúû¿ýêëÿ¶¾×ÅG¬l6»tßúö¿ë¾þ£ðÇþ+üúº÷ïÄ0¾»Á.;ú½¿¾ˆãÿ[ûÿ=†»ñÿù¡FÃýk{ôØsßü{þÿ§·óŽæ“\qÞßÿ…ú‡ÿÿðßîº×í¥þüvõù1þ—á©9Ûþ+M/Ã{ÿúÿíè›ôÿ­ÿô[Šäç—ˆ6‡úòqøšþÒ×oï×üˆßö´Ÿ¯Úëþöïßúõíþ¯ÿõþ$F÷ÿÓ^BÙ_™ ³ QÛÅk+ûVÒÛÒm_ÿmòuïïÿo7ÿ_ ïÊm[J×mRl%i0ÿµP¿]Ù{üÓõoK¬_ï~ž2Ü`(6ñQL0’l4)†ƒI4á­…M7â5»U‡ÕéZás;ú/‰÷¦ƒ²~…Ð4Å'˜QLRiÅ4Ó¤ÞÓ[ ÚK¦ `’§« ÎÒ•µ¸‹^D rÜ]†0©„ a¯j£tÙp“MⓈ¤) …Z¯¼6w_Éñoˆˆˆˆˆƒ.…[‚do™s]UpHDWßî¾Úû¼DDDDDD¨ÃÉÀ& »¯[WÝkøˆˆˆúÖ¿j?òc0Y@ÌÆxÏFá i$ ƒÒ0D€¹×0Î QšfÌ£4F̆d £fƒÌ ·4"x¸ÉÅ4Œ4B.=¬‹®¼ ü&š`…è·a ‚&8`˜&Ó…Á4ÐxL û0…¢ÇañÖZS31éèØÚx‹F·°H&í4uBÕ EÀ0¨X`¢æ‡èÖÓ Ú ZùSie¹ Œ;ù“oL–å&Ù,êì–i¼2NªÃ†JîÈ⓸dnêFí&÷Iä[û#à’ÔêHÊ:%Ä820R_"‘GTÛXa>¯tÓZ[WûV¿Cý;´ÝB øN“úVÓ~ÐüC}µÖ¼0š §d$HmµÓ}[ý¿ß¥_û·ÓïÓôëÿµ×_¢á }“‡m(iZõÖ󰳿ßW×øÿiiÿÚúÿÿÿ‹ø÷ù+¤Û^ƒjÔ¼ÔÏwÛúûÿýº÷_Å~¿¿þŸÿÿ¯ŠúÓ~Á¿õÚ6Šu´í–f¿ÿÿ¬ºýúþÿÿÿä°¥~N«‚ùð?ÿ{Õ¿ü&ÇÖö猞9ÿkïý„\uþ‚-ÿþÿÿÁµØE»þ¾¿úö:~Õ¯v×;¼&`3§ÿû×ÿÒ ÿì ¿ÿëÿþ¿AWþ£ÿ_aðóX§ÈÌQNˆ\Ý0×öý4×ÿíÿ^ÿô¿ÿa¯ÿßý¿kè/ígwßê„߆pÌ ‡Cƒ5ñšŒÐ‰ÈœSS'3R5]¬ÃÝ÷ÿö+ÿô¿¿ëÿö+ÿþ½Çì¾’¾ÞÂÂ…N«Tú ꚢÃ0¡(¶3`ö:ÙpN1ÿ÷ÿßõûþ¿ÿÂÿü¡k~•ÿÐDßøªö\Ñ—mê­Þ!<$XôXíU4ô× ýÃÓZßÖûþäëí¿ÿÿÑ„¿ýúNOÿÿè/ô·†ÿWJäŸòOyø[á÷–ô[¤N¸h·Ëz&:k–÷ü/ð«×º¯íµ¯¿ÿÿ¯ÿµÖÒÒÿý-|$ÂáÿýëÞ¾º~Æ»á6“¤ÿNÝ$ÞûÿËg÷^—ë /ö·¶¿k¯úþØK(a~׿Òÿ&¾ÿ¯ÿÿ¯êãµÖ6+¤á‹êÿº-ÿÝúXm_»b•Y8†¼4׈}¯¬‡WöÌ/ 1V”C¸?×ýy ÿ÷ÿ¯ÿÛ{ýýŽî·ý×ÿ6þ§ &“TÚ»©zi±„lŠ;Ní5¸4ÓN4ÓiU $á7ÿÿÏý?ûÿÿÿëaì7¯ý½÷‹þ×â“bši°“M¦V¡‘ާM&˜L&ƒO ¦&› ƒQR8VÂOõþ­á;׿ÿÿ¿ukþ“qÿ®é®Å|·A‚HDMˆa DDD0L!eL&Á `ƒL"tÊpƒDi-ÁB!5[[þøVóŸïz_­ÿwí¢âNØîï–öÚÿA¼i¦ÿB8ˆˆˆ£""""#ˆ‹h4؆þÒ»[Tïí[þÿ»³L:Ú‡­,~•‚<_õÝ‘~Õz¤öÈ£äPôÓ°˜,Vš¦ÇiwqÿÉTø»éºÕµ´íéºñ 0„ÁIx‹ 릨GZh4ì1H^Ŧš{ÅDi¶n¢â/wX±Ö× …Ã1 £ä4êkahEÃN¨2u ŠŠn+b³µ$G‹÷ä,[Kâ"""""@ É¹!ÓN 3BjÚi¦C¦œì´2 ³†_)×õ`þ"""""2Lj2ƒ&œ®0¶ƒ,p@ÄDHd`äI’s·îžÅ'Ð@؈ˆÐˆ•ÄÑ!˜Èñs.¡˜¸A´$ë¸)—‹Ç$3+&ƨ|5 ˆ¾>(ùÙtJ²<ÕA¡ –3‘øì‘H0TŸö°˜TÐ1%$FG¶¿ínê©… ‰¼É8Íh”\vŸtXþðµ£Í…øù „ò¦‘c§m¿IÁ‚ýz„ñH}þŸ~kpSƒ>ÈìÁšgÈñY.dr7ù“´ÿýF›á0¡‹ §t…¦lüˆ r ð‹dE†ƒ33<¾B8f×Kçbº½xå»ô‚’ké§n°½‚ †hA—?!Ï#²q?×ì“““È`wÍiéþ‘1ì»ë´ÁCîEߦC__ý6G4›dá;ØþûûQï²Ö‹±H·l'ý=}o½W[½|5ÛT¿`“ûdüœ~’’Ó¿¢om HÙž2@Éóf‘‚‚!õbåÈ):µi¥[V!Eßò*{kÅì¯ÞJ2!ÿ¾¢÷ÿWd®dRt„iÐjÓÝ4Ó¾Ei¦Ÿm¤·ßÅûj¡2w×Ë«ëî×Òúá?‚a$9öƒ …íêÂi´;¤Ø¤ÚAêœZqv¿ý?þ¡ÿúþ?ðB"""."""P„3¡2O¦Öû ö7Ýÿõ¯ü ¿~ÿ_þ"""""!‚šÌ䇰“ÿÿÿô¿ÿùuÿ¤"""#¿ÿ¿º_ýÿë_ÿ(_ßçUÿÿü·#AÒežÓ<Ìò¿µ{úõû®¿ÿéã…LŽ&3ÿÚþë꿺ÙEÿÿtgzá0«þÚKÝÖªÚé7ZzKí£¹Ç³´*[¢ß4(–>Xô½n*öE‚ŽÒ¸dpñ¥i/ûf‹ëXTì'Ý:»†¤ß§jÒiÒlPL!ȃ☤ý®©ÿÓMU^¶]±‡¦ša­ZL4ƒÃ „A¥l&Ÿa/ø»S:xýzeŸìDA‚ ZjÆ¿ñ"5ÿùgm§‹h6ï𾋾·ûoúˆµ dYäB=˜ÎFˆÚ%Ð[] ßÿfȸ­û !të‚`„C$$Ã8Î ™ÁÅ04CO“×{iÝ«aüaµý4ÕmÓ á5[bâÖ.ÿÿhÎÑoÑo¤XïEŽÙ<ºjìXdAıÇýÙ8' ’rOŽþ£ÿì:-þÕ´ÕÿªÕ~“Õ‚CwäßN"" ¡Á(p¿ï[×_±ýÓ®""?ÿÿ—Oü´ùd×ÿ÷ÿ÷¯Ö¿þMÍ Èâ—eãÿõ¯á}uÿ­³Ž""$2Iu/õÿí~®ìåÙëý|L´È®~1â9È‘ÀÌ?ýÿ°Ñcµâ"×°—§»y¸DDDDÈ ¬þ^?‘Á ‚æðfþ¿÷qLZqVÅlzÚ¦"""#çjˆ¾_#¢>L™Éâb*Œ™äO;‘LìÈüDDFײKWiÛùØ l 0P©‚ Ó_°šä;„¶“b7 ¿OëÿÐa4Ëùa5òG¸wpûø~"""#îñöœ0šÊàGÿÉß‹b:ÿÅõßùÞ§¯ßûÿ?ÿ×ÿ§“¢@Â!&E<¸òŒ \¹t IŒ#¥›”ŒDæuD„lΈ£6ΤF†HŒ ?ÍA '.‹ÇEéêŒïEŽâðM:a0¨0P@ðƒD&Pa ‚i‚…0ˆ:€Â„ÔÈ´¿!Nh>sèSH·ß¤á–pƒwªM¡hÖÑyEÛ ‹€âè!¢á…aB.Eå !O¿ƒ#0Ëú¤úòWÃîÉ]&ÒÒôv-&Ü28nºk°É[WDá‚„ ÿ~œ{ÿMïÒ ÷§ðêÜ•¼2P½Úw êÂút¸MÅ„?ÿß÷Mþ;®¿}=?CïWÂþº÷]‘^‹‰P¿üŸìv¿ûkŽºõºoëýýô¿a6‚uëõ‡¼Wþþ+ïûCþ¿â¿ïÖ®½oäZÏ%?îÃÁwûù«áßÁð_ñ_­/á2p5 ŽN®Eâ+G"¹*Eâ Ì…Â „[+>þÃÂ-ÿì?_±ÿÿ…ÿ÷Â&?ü/¯üËèÃs£xFàïæFÁ M0˜N,‹ddS^gˆäH!G"9/ o¬[Ð_øoÿ/_ü"ãÿ÷H/üú¾»Ûè7÷Âè7T˜'.a¢äÈH´a´l60ëéè27!Ü”\#@Ùío„¿öÿô½ÿÕ/ÿÛTþ8úÿ{¯¤?ÚMÿÝ$ý„oÒnªþï—'ê¨Ãr,ë a¿ÿÃ~ߥÿû¥ÿû’þôÿëÿ¯õûø×MÐê“ÿzú½÷ÐnDƒ˜¯ ,èƒz_^ÿ”+ëÿ­Rÿþÿéï«ý}ëúÿn“/è{þïÛ¯ÂMSɲËñÔâõó4ÿjÞ¿uÿþÿ£ ÿ¯ßþ¿àŽ?_ýÞ¿~Ýq_#ßîöú#~ +!‰ýoïë÷ûKÿu×õ¿ÿÛU×÷úL%ò€ý‘ßýû`úö­Uáÿÿô8ª˜¿^®×_½=Š´í{®¾ïÿÓ´þï_ñ⢿ûÿû“ˆ|«°z¿Wþßþõ¤äú&ù+þ™ámYÄ;I5´µv-ˆ{~•—IÆ«¯rC»bÿÿ…üÀhïýM†wàÃÿ”ãVÿÿÛý:tð¾°…CJ¤W±I í š „Ôˆ?l$ÃJ4Øvž¨5¶Eza6˜úo ×0Ù?þëÿè7 ðo[È·6 §6zé¿ëÿ­'¹ÄFuB>ÁÉ„Âh0¼1OA É8L&°Ä&)¤äp‚vš Sm„׆IÁCî×úü„ö/ýzy€ü7ëƒt‚ ”ôÿëÿ·äyÄ»²ä]Û„ÔRÄDDDDDDDG ÂaˆˆŠ6J)« ;ÿÛ_Úlˆ?úÿ«ñìu¦»_¿ƒõë±M4·HC‹ Óbÿ{Ûõü/kÖAߦ蛮­þ×Åìüoé¶ðìØá›ŸGË]ÄMa_ÿa/ûKtµ»^ÂW\Ám{ÿþ¿ïN•´´´ ‚ÕD@o­éˆR€ýب; C [im« zv××ѽõÿm·†l$Xí{ëQˆˆƒ3ŽÓ†'˜…(BØ„ÅU6ÌÅgˆ#¾ôÿ„¯Ý†»ÿmæ¡ÓÞM•!ÄDDDDDC#ƒ„D4Äð BÿîÅJ/¶Çÿäì¸÷±RÝ""""""C"bþÝõé/}ˆL*ÄFßÐu^^Å={0_³ïƒrlzýˆý†ÿÛDÇv§$Œÿÿ±&í^„qj«ßü\.Jâ’[Ò2¿ˆŠQ¼Œ}„.5ø2'‡ÑG!Þ¬&kL&ºòÏ‹ˆˆˆ™)Äqà¶ Á"¬.DqˆDDj•6M„È'ÄL“³c<GÁ­PˆÈ ±ÈŽW–¹™r)áBvW5¸ˆFi—°ÐvpË.)x×èÑ O´"d§ˆâ‘ÁÌ GdpeB"A¤ žûíSâ"""'e(†d}?Ý&…‘7ÄGÌø”§÷úªú0ü†‚khCV£ŽNÊrš?®žéé„ ‰è!´A zˆb 9Ú€_üÊ´º_¿ì‰È ØAÐÈk+Šfƒä y Fu"FlÏÐe‚D@‡‚D ¡D´<2= ÃLƪ%â¤Âч›d1”™<>±ÿö· d€l$i 5Ž€æÙ‘òèºð¡„Á ‚a0ƒ „ÓP…‚…0ˆ?4Ñc† ‚ ÁôPÓ#x a4 4Á0…æßú¯¾Õ„DD™ Ú dä% 7IÁ Ѱ4]ѡŪ5´0ËÐѱ£\! ƒ¡a6‘pCi "Ý„4lhh×TâAªÄŒg2ùÈäÊ‚NBŽOÿÿÞƒ(Ò6Ã\äDGtn?®È°õÒl ›d°JÇM†JÞÈí†Ié6®m‘Øžá‚&ÿFÆH Û®+táÃ%| þ"""""$Z#ÅÑ|ÖW¿éöªƒ$a@m° HaŸa?é{Óº½>Ðzoa2g𩺧 œ'­þÙ;_N¯Ór7h·yœ\wfr · ­¯ÿýz¿ëíëK¯«­×¯ÚõºT¯KÇ¿¿~ ›Á CœDDDH]Õ=ë~ïµâ‡ü_ÿ¥þÕÿï½_ßU×bÿN“öñTG#¸Ž­¯zýñUÿ¯÷ÿñ_ú¿Ðøñ_aÿýá’¶zˆˆˆˆ‰ãæG2;5#ÅÃæškü–3ó ûÿ…ÿ_m}p¿úôüDDDDDGü"ß×ÿzýïà‹ÿýK–2˜ÿaªÿ_ÿAÿÿûÝh/ÿûÿÐ_¶ïü˜å½ÿú_ß_þà a/þßt¿Òü7×ð„~ÿúÿÿÿúLW_þ¼z_†ÿÿÿõ¥Ù:ÊöN¿zßœe÷­«([”-/ß]{ÿúþÚÚÿ¯ÿÞ•ÿû¯¯þ}ÿýÿýö“ia/í-é;ÿû­í.]ÿêŸÿ¥ôÒì&ÇûÝ—_ÚRøkþÚôà l0½­ýöiëý´–!´Öºk„“m(;bŸo_‹‚“ˆ}Ã[Uû_ÿƒdW´Â0˜M„ƒM¤)« ȯA¦a6( Úki6Eza8 œ4õa„½.0¥a0ƒ0ƒ(X!›‚“ᄯ†Â·a0ƒ ØMPg"ƒšqKþeè„QÑM¥´–º¸ˆa ᄾébQ‘ø ûÄdÇ ì%B5X¯v×L ÃÓa;F˜ˆôáÿÿÿÿü®”E44è“´ðƒËǧIëïÆ¬€ÒÔT\Åå70æò|ØsViÇœÍ ‘šf™#(¯ö~4ÌǧÿÿÿÒu¿Ò~»×°ƒ=vÿ¿Fwþ3ÿ8¼~æÿ§šG×üýëûÌïÆÿ}½=eóôÌöÿä+чÈ{é_!âx_÷æé?¢nýÿþó®ÿWßýïVý+øAߥ¥Í=!{kÉTÿ1ÿo¯ªkU³ËjÚõÌ#ÿ3sò~ö?Ê/]ÿv» a„¿ý÷û]þÿ¯[ÿ«ÅE¢û×ïÚËîÿ¯~èiyÁ~h?ý7ÿûÕ_Ú¶»¯ÿÚì &ÿïßðÂ*9Ü‚`kà oþh~|Gùšúä>Å%{ŶDZ[¢ù߇ðßÿÛÿý­ýöDµ½;­­`ßkz¦¶ši§h0…¡ÂG»ï¼ÆüDDDDDDDDUá‚M¤ê¿­ŽÒoâÓ ãºâ &E{L|A‚Õq×ÿÿÿÿÿÿþF‘°ÎG Á‚8m‘Ñ#²äGˆù2Èùr3EÑÑ‚.ÈèÅð„DDDDDDDDDD‚Øl¡Ëƒw(rnIÈð§;”9 ×&9C•gîqÊ™I ±àLˆˆˆˆˆ‰ œr ÎTg¡M¢£²à%ƒDDDHdÇ"9c‘ ¸#r£˜rüöPæò‡)Êk ”ˆèŽˆèŽ kˆˆˆˆˆˆˆÈ·!¤åBŽqËâ¸îS”9Ú\""v¯>3‘vG ÙˆàAB86‘ÀðÐ`ˆèŽŽˆè‘Ä#á¹ v@ðÚDDDDD†H9C•Bš DDDDDDDDDIR.ÆÑtC”9œ§'…Žn* ãŽl. ™Ê x4Žqñ!ÈÇ%ðvAÄDDDDDDDDDDNÓ£hòêh)Μ§(sqÊ✆qÈ98ˆˆ[ Bñð©*ttˆâ—Eò:0ˆè—DtaÑ‘Å#†i0fÑ̎fa— °f´ 00gçå½Ì¥CKi—‚Tk‹vb{=dT tÔñnFÅÝÉ)ž"jê ¸ICÂtšPÕ1fÇr[Æ^rC ÅÎ mçéÔ%õNå(~âç¨!u-fÚ¾š)%e¢c]"šž§Ä Ð`zS º¹Úž…§U&iLµ?’rŽ4ÒÌ#d’gresuÖC¤Jè`NLìaæ¿-+À`àÆdL¬œ/FˆEÿ¦4°$€˜,ƒùv¤÷ᇧÍcÿŠ‚†NS‡œ×Bò,—晨 UÚ,õmã)~ azH=øzö#u¾˜dZñYìu%Q0Ý_¼ Ñ• ®5Ê’›W»C–hÍÏSæ)18í$ZG¨EUϧžNsÔ¢Þ#äÅ/Ú,4[¢í™±@i£ÀuZ{€âàçÄ  þžR,[U®Ñ”&-d= ŸÓ”–ÕöP ÔO(ÖïL¥©69Ú²r ­W+רjâ}#Tÿ×¼¯xW •´˜wØù^«Þ ;ÐX±)º’Ò#R(<*n„šjß`f¸²a ¬WíáEë÷ÿUÂc¤MžiI•×+æàæÒÕ)«:7`µH%£½jôHöçq:›eè´¥ßê><žŒrÛ†'Ôevþµ¿VµÿʽÆñ~ðátIMEÒ ¯§Ò|IEND®B`‚leptonica-1.70/prog/weasel8.png0000444000175000017500000000307111357027012014527 0ustar dandan‰PNG  IHDRRI‹V. pHYsb&2ëIDATxœ­˜m¹ã8…ßî'j!-Q0„B¡ áB ˆBAè!ûCrâ¯ÌÌÎŒn’+Öѩ=ù·Ç÷‘Ë4ÿ£õ&Ó0n¦¾å/d lÿ2™¶ëw—}LñsËÔnÕþ¥-D¿É–+{ÿßAÚÙÖ2d^LM0OäÑ™&3m0/§²€-` ¢€Çœ™ãÞ.E¸6¬>AvØ5(ó<&Ò£&Í5†´ý#È5  CzMׇÒhPæ´_ñ§Ö@MLž)%`ž}0€ñ·º·ÅŸ@J/éU dÀ#®}~Æ÷®uaåûæ ‘ žªl®Q“îy:@†šÙvò …èN"ƒÒ°½Þ¬ Gýh~±^AÐWn$FaŽ$!35$9/b$kh{‹›·¹ön±(©ù;ÑöŒˆjž|½½Z(ŸèÒ­1oo uqÔ¿Ø4áùà/ô•;ÁŠŒÄ;qÜJ>ØP'‚ïnU,ŽÈ’Œt‹ñÈ*é$E\v¦‘â%PË P'®¾_h¶3]~ßîÇ•±¬8q–M¡Põž]‘•ë5tðË5¤6€êÁ¨ig½%É%z0¬~o1le–uÅœj,~B¶ÐN¥6•율cî_»=3wéÏ}N£‡x‘xÚV©Ý+ߨ4·„|Ôe¬ô£MʼnÇÃï™®ÎqïïÙʹ.]!É0-θäò2ÛH÷Žd™Ýð²øñ²a5‚+‰U C2N"äM³Î­b®!˜©µ-¦Ž)rþ ÖY¦²gÞY.ŽÓ5?šíH5vÛvÈô*2½>×I§™âH“ØÝwiz°GMžlAÔ\üSʙyDR-·%©Ú_‘¹\w½ö(gP­¥Î ì ½~´xc ÷7Vvý ˜{/»ôÜ­[@,n9º´‹Ñ¶uØQ!§,MHNB¡*CSòÄ~qD H#'ã$á_IQr&j-fÉ× µVlœU®}Þõ(”(d#%"ꌿTYKØuò~;ãxüÕJ­pÏ*=;©DÀp×ô(P,uüÝmİ@Q›ãÍ^¹ÈyβWmV‡õQ+ø0 Ôe>ä7q=†µZ–Ó¸À©J–Óœ=•×?xÑÒNm! Ô|2ó “ ažÌŒTMïíx/NdÑSyN¥baîîˆÖÐzžÌó–cÔª´oƒóHK[nðò>že¯ZUÆŽayå KÚµ¥èXÿ4aÈŽ*Œ¨_Ï2à…E“´ÎjSìK‹¹ž¨"݇¶Mpê]âî j"&fzë-!…„¥œšQ4Ï%ŸY¼Sk=íú€k1¹ÏS‡0óÔ«œjÌ•4œšgÝ_i©Ùç?æR(¹»aæožå~Ï~f[kKÛƒx\™¡¸yØ×ë¦(¥ÈÇáÕ“t¹‚Ô¡ajļô´¦2K×Ía`ß«¿e¯Có²}]2•1g¢Ô¨J?v.(+k k½QO æóƒæž6YTK>¦c±øxxnñ·j³L2¯½ÞÈæüõ¡]8+ýX¶ß;êýú¸U‡àç1 ²üKǶ œF²’ˆÐ×^ŸX~oKÃ@ÔÔNÌN:¤ÞíHñQ#Tb8ü ·ßÎX^–“â± Š 0Ò±>å…´Ñåñˆþ–Dq5T%ó“.ô²ÿ†¥^GEP%-g…"¬ÇÀqÛSƒ]ì<ñîÕž@DM.íëKƒŒSÁ/«Ø™}ÔMÆ£—Qq¥),NUy{0æi_k½"[¾¦ „aG§¹~¶ —·­Ý¦Œ tMILÍ0;È:•~_&íSŒÛø(£O× q‹/PjK˜£*ETYþùÞe뀗Õó”bWe‘Œ2B•ÆŸÏ_Ïç¯_Ïó¿ç‡ùõëñ?IÜ¢ "ÍIEND®B`‚leptonica-1.70/prog/lucasta.150.jpg0000444000175000017500000031272410645437541015136 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ «ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š†êám-žvGpƒ;c\±ú t2ùФ›7v¸ÁZ’Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*/´Á¸¯áÁ†EH¬¬2¤ìj7¹‚6*óF¤vfž’$‰½YOñ)Ȩ Ôl®¦’{¸%–?¾‘ȯԕa˜($êMGÌ®èfŽEÎ2ŒϧÙï-­qö‹ˆ¡ÏO1Âçó¤†þÎáÂAw¬y$ J±Li£IR&‘ªXe±×½6kˆ-”4óG'»Éüi©{k+„ŽæcÑV@I§Is $ f è€Í0ßZ.Ý×P ßw2jF¸‰c4¨#=°Áüi‘^ÚÍ!Ž+ˆd •WãéK-Ôº¤³Ç? À-ô©ª9§ŠÚ#,ò$q¯VvÀ9U ³ d’x …›î\áq äú ³EB×vÉ/”÷,œ|…À<ôâ”Ý@$òÌчÎ6ïϦ(¸¹‚Ò#-ÄÑÃêò0P?K ñ\B²Ã"ÉŒ«©È#ØÔM¨Y)!®à89p:|Wvó³,3Å#(‚8$g×èY·vãœs*ÿK=Ä6д³Ê‘F£,îÀøš ¸†êšÞT–&Wƒ)úL{ËhÜ£ÜD¬:†p Þ[M'—ÄNøÎÕpOåSÑEQEQEQEQEQEQEQEãþ0Óô+m«iÛÅ´/©40´.xE!A'¦k{᫵ƹªÚ²Å£^ܱY‡ÝåbG𒇵Uñv•câ?‰ÚŽÖ±8†6¾¿p¼º/˱î3ž Oãi~Í6ƒà1dš¬Ì%0.ÁºüÏ· éøÓõ¸tßx»ÁÖzUœV÷7DÞR…ÝC¸6:òTýj·‹oæ×¼iá?= Òmm¾ß©²’<ÅÏÊ„ŽÞ¾¹¡×ÃRøëAFÔlà†=ï=¥´¡VI-Ê;üÍùU¯‹‰m/†íìþÅÍþ¡r––å£ êåŠúp fÁ¡[jþ.ÒC°M-|>ãí®Ê#•ò£jmG95é·WPÙZËsq"Ç J]ÝŽ­yŽ‹©ËâŒv÷¯*µ´zD’ÛÀ¬ÉVp ¶:3Híœv®›âeí¾Ÿà=Jyí£¸Çå@Ž¿xÿ*ã=ù®& ¼š_…ôŸé3A¨ÙO ·z›Ûv*Ÿ,À$žœÖ×Å£kzº†öÂiïïs$[äHS !\yÀU SNмCãßè6ZTqZÙ$—·q½¡ˆ”"À|¥‰>•ÙxÎM?Dð¡,–vïokn|ˆ0P60€©›á­"ÇÀߢÔ%²‹í¶¶k‰U‘Î7²îëÖ³| §‰|-/ˆüKn—:ލ­2\›x¿cþî¯ãok:¦¤¢]+L¸k+ gBë÷ä#¡=†zUß_ fñe¾›ý’ÏPxí#`Ü£°óù×+sá9E²6õ¶Oâ9ÀË_N(Ô4}JÇųxƒJ´‚ñî¬ÖÖh¤—Ë*U‰V#œíLðw†o4G[ÔµC—ºÂÊ^?º À#ð¬ýSFñ^«ã'X’ËM[M0Ëå[µÛeÙ†’µ?Lð®»eãÝ_T{˜?³µ¢™$o4Ô1ŒtÉÏn•>±câcZ·Š{4è0ϾH~ÒÞeÀt·Ë€ço|jމâKoMâ¤é±ÛMh–‚î°c·ûƒ?JŸÆºˆ¼A¨é‹kžÚeÒÝ4RÜ2½Ã(à€'Ö»XšSn**ÊTEl€Øäg½p#Fñ]Ç"ñ5Þ§”·´kh-Vôü„œ—ÎΧ¥Yðî‰â _êºæ­idF ©4%Œ ápTg'Ò¥ñ¾‡¯ø¬í,â±þηºŽæQ-Ã+ϳ˜@úô®ŽÿOmgÃ×:}â¬MunÑHî Yppp3¥sVzo‰$Ñ-|9smmkk K÷ÑO¸ÉŒaߦkCÅ6þ)¸³û†ÎŸ IGžæG‡§Ê#§s\æ³á zîÓ@ƒNÓô›a¥ÝEtw\±2• òóÉ'šè|QmâMS²éú|6Q^Þ@ÑM#\0Xr0Jü¹n3éX^ñMdž4ÿ Ú¦›a¥Ä‘Ãw*ÎÏ$±Œn ò3Ïç^‹i IjB¨€éPßÉw”¯csÝû¸ä“b±÷88ü«ÐtÏKVm~ËMk}LáÞ†f‰m^GåÔÖ‡Ãï Iá A¥ÎÊÓ¬ŽîÊÙÎXãŸeÀªpi:öˆ5=?E³´6÷·2\Åw$ØòLœ¶äÆXƒœc­ièð¹°ÒÑn®Æé]æ}ž|Ç’Ìpq“õ¬-#Bñ4<½ñ£k§¸»Š;dHh”äã)ódóÚºuµ£fbÑ`´y¤VS%ÌÌ‚3Žœþ•™à ÿÃ^‹I¾ŠÜ<Ÿ6KùÌÄ–c0rj´zN»¡júĺ5¥•;§0¹iŒf6…l€§pà=ëgNÓîômDŒ‹íAËM!‘ö ec“ÎaìqzW‡<[d5ùî´Ý2êóV¸kÆ€}Å#g!qVì<;ã-7DÓÒ×R³MJmA®µYn+º¹€·Ö½ Š(¢°¼Om®ÞØ}“E’Ò.VinUÿgòFyí\÷‡|5â Xê:~Ÿ6œm$v’Å$yìÄžGNGSV|5ákÃúÝÍÀ¸´k в\ÂË ±óH¹Ä{UŸ ø1<9®kº€”:ßÜy Î"CÉÙbOÕÖQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEPÕõ› Ì]jˆ¢,x%EP9$ú Á“âO…â`’_H²f1wÞ»z‚¸È#Ó­X¶ñ÷†®ÕšIHßjåf<ã##žHëW´¯i:ͽÌöw_-±ÄâThÚ>3ó+GŸâíTy–ÖùO“•™Ô¢”Ä ûŽ*%ñ¦…-•ÕÌWñí·MÌ\2ä©Õµs®i–w©eq{ w/ŒFÍÏ=3éŸzãü?®I¦x³Äö:Þºdµ·žµkÇDÆôÜ@Æ=@ü«¿0AèEp?uÅ´ðÕùÓuÙlõK%yV줶H`G§Ð×Hþ'Ñ´å[{ýVÚ˜àYdId‚>b?žoèð\Ao.£n²Î£Rãæ Ðþ=ª)|Yáøu—Y±FöJu6Î0}*ÅŽ¿¤êwrÚØê6× ÉRdãµ2ÿÄz>—} •þ¡½Ìà´qÈØ,?È4Öñ6жp]NÛìó’"8!±×Nþ•-Æ»¤Ú…Æ£kœ»ãß(—Ô{{Ôx¯@Šæki5‹%žõ‘™€dúеw¬éÖñÏu{QH2ŒÎ>aê=i/5½2ÂÊ;Ë«è"·—\ŒãžF=kVñ¾•¦jº=‘½´+¨ns#LXÂ’}N®Žiâ¶çšEŽ(Ô³»œ©&¼ÇBñtú®¶š¼ž'°‡Lûuż–RÈ£1ƒ¶-žäŒç<ö¯AþÝÒ¾Ê÷?Ú6¦“Êg‚ÿwëíQÜx“E´‚Ú{NÖ(n›lÒ€$>€Óá(Ð~ÏçÿlXù[ü½þzãw§ZÖV¡”‚¤dÞ³¤×ô¨u§É¨[­Ù!|¢ã9=ÔúW&ÓjÍãi_Ûw)jšb\ÂB¦`vféòôù{çŠÖøw¨ßjþÒ¯õŒ÷SFYä ß1ÇOjÚ¿Ö4Ý-áKûûkV˜íˆM(MçÐg¯QQh«œêÖB þY=q»Ó9ëRßë:n—rß^Án’!‘ÀÝôõ¨åñ±E.©f2y‘«L ºÿxsÈàÕË[»{ëu¸µž)áo»$NOâ*¾£¬iÚDjú…ìªÙÚep¹Ç\TsøƒHµÆãS´ˆ\ŒÀ^ehÿgÖ¥·Õôë»9.íïmå·‹>d© *˜ë“Ú¸­/Wžëâ»ZÚës^éRi¯r!,¥O0.8×Ö»]SWÓô[Qu©]Åk`¾d­“Ú³ÛÆžPŵ»°oß”„ýjkŸh¶n³j0©¸PñóTôbG@}MG?‹ü=mu=¬úÅœsÛãÍå¦}jÌ!Ò.oÖÆ FÚK¦]ëH #Èõâš|G£Oû4ê}¯vß/wñuÛž™ÇnµOþ Z#­Ù‰ü¶S& ·¡ô­ðCA„RÑEQEQEWœüQÔ,¬ï|6מjy¿jI³!)Œ© ɃŽ1Yþ½ðõâx§T±ßjwóˆ £,‘»*°ÉŒ‘U"ðü­ðŽdžÙõdT·™$€‰ ˜¨à°æÀêE2MY¿‡Æ6VÖ:‚I©ÙEöiçŒ p‰‚¡=1×Ö“TÐá%ðÔ£EÒoaÕcÒÑåœ4@m*|¥‚NOJÙ³X¥¸WK}ji­t×¶‘e·( a…Î}:b²-`Ôað'ƒ´ËÕm3QF¾‹ìÍæ*ß6ÜdŽGJ†ëí·'Ä+dÑõŸR¸Z§Ù÷ŠU@çíøWgoã°¼ðÖŽÚEöËøDfåã(±:¯Ý Œçå?…u÷–Ñ^ÙÍk2ŠdhÝHà‚0kÅtŸø†Ýô).#baž}eÚp,¹ÃÈàûŠêu×¶‹â¶ˆïi;ZXØM:Û;FŽØ*2: åmãþ ÕôýA®-|B.]ÎCåD%fÝ÷x#ó­‰4ô’ûÄúv³k¨\K¨_Åwd`W_=WpPÁ³õ…i£øˆë¦ÞIq|±Ej¬æmES´íädʽWÃSý£ÃZl„Hìè¬$Œ£Aär+ȵ«FÏÂÞ6Ñî´û»J÷Sû\3‰"%`Àc€ÇZéoÓVø‹¥-Þ™q%„š;[Hïk Mò„'géX÷–—¾&Ñõu ¿™ Œvvá¼èÕT"+í;Jí¶:Õ¿x#PÔuÛ¸í•ÖÛSÒº=qq<¾G$È×eà;˜<7 棋S½Ä×#nlïÀ°þ#˜Ÿ\ð§›iq<6Ú€žàÅnî=¤dëŽ:ÕÝ|?ãƒ*yöz%Μa­íüà’,êF g9¬Kýê(ÿ³ìîµU‹LHWíVžz]©i Äà•€ôþ÷µmn†‰_iÔísIáÄ-µË¯×µPÐtkEoM­\ÏoérÛîy¦i7aƒŒ¦ÑÿÅ!H¶7 om#ŽÏýLHÂ2§oË×v?!^•á DÞÒHÝ•µrCƒžzƒ^Y¯Ãyöï°Òï!fÖ-§eŠÝÝ^$eÌÛùç–ºu—ÆÞ§=ä0Üh±D¥­d*$‰\íäò?:è>¿´›fYkxDr¤‘”*Ýq‚=ë?âÕ¼w~²·kW¸y50ä p\ð8®wPKHõÏ7Ù%X&ÓR _ôg(Î#`Bü¸Îvʤ³Žê; j·WXbý‘¥æS Ã)Æ3ᦶ“g§ë>‰¢½–ÒÍ®di.-ÉeVfìzÓŠè>È«o¯ÄXÃjÓÍIOÝ1ùHÈèpj§ŽÌ£ÆšK‹KÊà-ÌQ™C³`y[z}Msí~ðm…Ö™vÍa©Åçî·f*«¸·n€*æ§a}©iž9‹N‚á|ëøn#O%OÞ g8?\V½…üü_†þ;”³ŸIÑ\gU’MùÇN8O¥w~ Òa×t í2u —0´|ö$p~ â¼›ÃžÖ.õÞ_BY5fµÔÐáRÝBsݶŸûê·5K9ìuÁsÒ¾¯l‰§lŒ°qå•òÆ Ïãš­me§Š§7Öw3[øy-$œZ;‡˜gpœcš¡¡A$vŸ-ÓO½ŠæÎyÖëYËÜŒ>bG®*Æ¡M¤š&©&¨×ñëí@I?y¹dó ôÇ^}ª®½a!Ò¼~‰¥^›Bñ>ÎVÍÏš€/ ã !«½µñW“¯hþ]*õ–æÈKö¶ŒªG…èAÊë(¢Š(¢Š(¢Š+ŸÕ|5%æ½o­Yêky 1,l¤ç•$`û‚*]3@k]IõKë¿¶j ’$Õ9¨÷õ'¥mÑEQT[Iµ“WMNPò\Fž\[›+=JŽÄ÷5zŠ(¢Š(¢Š(¢Š+‘ÃúâøùüB×vÙàž@÷ƒ9Æî~•×PFzÑEš(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šäüv5‹mkÝTšÖñY8ö#Fİ‚¤÷õ¬½Æ7Z¯Ã%Ô’uþÖÚÐ3…,Ã9b½85¡à;Û˯ÛkZάóÉ'Єm!Ö,)Ã7ÚúkJ£¸…&†E’'•Ôä0õ¡½Ô,ôØ<ëÛ¨m¢Î7ÌáF~¦²µéÚDºdo<u Ö8ÿzÚA%óè1úÖ&â Øüwâ;TÕ m>Ù!{c Hö™2vç¿¥v77ö–P‰®®¡‚6 ’@ “îju­. ü‰uD›g™±¦PÛqØÏOz· ÑÜB²Ã"ÉŒ«¡Èaê ekÞ#²Ð¹’1%ÝÊA4OÌyn{ɬ]sPƒâ]æ—w©BúHÓ–î-È©°´›@ÝÜ`~µ±©O©·ˆt”°ÔtøìNãw¼Ë0Ç˳õ­DÔ¬d8KÛv;¶|²©ù½:õö©..í­›‰â„9Ú¦G “è3ÞšoìÆìÝ@6¾ÆÌƒ†ôúûTÈë"†F §¡"¨ë_I`ÆÂùlåL¹vˆHñ‚xú×-ðÓX×;×4{û¸î-- †x„!]å² qŠ®šö¢ßí´¸µk&âÊ[…H‘IFR ƒÏ\þ5ÛU·Ze‡Ú Ê¬<ÁÁô>ôë‹»{HÄ—3Å €Ò8QŸÆš÷Ö‘”]B…Æå ‡¨õѩؖE¶ÛœáGš¹cè9æ­T?k·óŒ>|^hÆSxÜ3ÓŠ_µ@n<:?;ò÷Øúu¨_S°ÝöÙ]>ò´ª ýyâ¬E,sIJÅ"É «#d¡¦Ïq ´{çš8“8Ý#ükÅZóéqiÖö“D—:…Ò[Ç#á„`‚Kc¿ }ªç†äÖdÑcmy Ký͸@r¥rvŸ®1Yšž·¨Ù|AÑ´¥’§^ÛLò+'Î1œîÏNGåZ:캹‚É´9lƒµÂyÆäðÐÿÜw­6¼¶MÛ®"]§ —Þž³FîÈ®¥—ª†Éú‚[ÛX'H%¹†9\ecyfÂßÙ¬)1º€Dç æAµ±ï\ΣªjÖ´m=.Qô½B ™â1 £F££uç5Ó¥í¬“<)s K.Šà²ýGjçîüAý­¦k0è—öv÷¶²yO<€¦ü)'ƒqQZ¶wɬz†¡h׆i\*¹Ç,£=:ÕÃwn¶ÆäÏ€ ÆRãn=sÒª.¿¤¼ö°¦£jÒÝ U”&:ãzVQEQEQEr~2׬,£‚ÆaróµÄ†Ùä‰$Æ®+JÒ¿°uŸ6ÙÛF Å’, wI*ãê:qšŠ{Ø—àņ˜¶w¯4$–&I#xG™íÆHñT Ô z,VÒY¡Ô-•£“Èe ˆH«ŽíëZZ ®cS‘À$ð=êî¥6—y­x²öú(£y4XVœgl»*8åÀõægxí}á›­FòÖ-)ô1 s]ÄdŒOÀun@ úŽk]&ÓUðU®¡pÓ[Â.–K‰¢1E»¯ËŸ»“ØW¯iU¦‰¥[鶘ím×ljX¶Ô×ñB %¹ð½åôµ¼Zª‰å•UŒ£d1=³ŠÈ–óGÔ~!M=Ò@°/‡Â,r‘³¸#¨R8íšÎÑ/lÅ·ÃY¦p×4©3°%£B±íÉš«­Zéé?$Š%[³©F-‚®HØrƒr‘é]‰5,ø¥%½ºµšÑšŽâtŒ#¹8ÞFrQÓyáÛ}#OЗOÔ,–îæ'šæòäyö³ºª)Üz.sÃqÎ}kоJòx#OW·X< ñF,¬ˆÜ¤õƵµÝFËMÒg–úæ;xÝœã,AÀõÅü¾´o‡Ö 2}²1¦ƒ?:!Á#¯q]ýïŸö²ãíSyYé¿~µä† #Ãì×w?ð“[MróÛ&<Æ•ƒóg£ÌU]ì<oj×"»oí1S æù½ù$uïŠÅº›M±ÐÞÂhR+Û_y„ða„Ììã…#µâY®.õ¿¦‘)k·Ó-•D`’ÁIóûí8üjݦ£¤7ÅÍ"K2‹i-™FI (= ?Î+ÔëÅuˆôñÄ \Ú PF<ݸ¯û{±ÈçšÙ°dÖ|1ªêÓ«hÿØeQço\|»·gÅr?XϤêPx#C×ÓÍ»²Ô¤Å2òm&rФz Ê@ì+cá÷…Í®µk¨ZÃ*hwœÏ%¼ÌIœã¨‰¯R¯—Ï_Kw Í´ð®·¸ØÏ[w…/¾œg€ª¬zœjV¨¬èë®\4‘ÈspªUþG`0¤Õ½â͓ǖRÁ`’[xŠßìW@¨>[©Ý¼ûìÝùW¦ZZ[ØÚÇmk Ckµ#A€£ØW â0±|KÒ®5ƒö"ØL"3"[ŒŒç™¥Ü8äsÒ‚Àc$ Ñ‘œgš£­mq¬]é‘î7±Ç$œ| >p3ëòš¿I¸g °Éôæ‚qKÒ“#Ö‚À ’)i2zPsHHJ˹ŸY_ÙCmgnúKÆææv“#ÿQÜV­cx¦þûJðåíþöc=´M6Û€J°PI犛ú„Ú·†ôÝFá&º¶ŽgT²‚qùÔzÍεÖšºU½Ä\¼ydÚb‹ÕGsZôW-¤ëú•ÏŽuò+o"Îç†Xƒ!ÉÀlž£¥¨Ükqk:dVvóiÒ3 Ùd“ÇÊTwæµ·q‘Ÿ­/JLƒKI‘œR“š@AnÆyô¦³å L3ÀÏzÀ³×/¬|;ï‰m¢´½’q †Ü2ϵ0sî t9¢€AèsKLÆY”:–_¼3ÈúÓîÞFUIâbÙ8©¨¢Š(¢Š(¢Š+ÊõÙ®fø´Öº£Y®š4ìÙ-ð>K9#yô-ý+6y!Ò‚MÖ«ÒÁ«J©rAAäp9<¨éžø¥¥¶“¥|FñÍcº’â ‘ D¼ƒÛƒšäôû‹+_øcQ†ò1©É®myA½b.ùSÏÝéÇNkVX¦Ô5?Eªê6vwËt>Ë,èZhâ1˜yúæ¤MF×þ$jzmÕç”Òé–Ìâ³\É8ççÀç¸É¯dª¶¼2ƒDÿ„Ù4kHãÖ~Õ2Z˜Æ$Š!$×~fº}’ßÇ‹Bd6“éM& "9ñµŸý¢sÉäÖßʼnD õ¬¸RÑ8ÎXqXzL–|@·Ó£¹ŽK;½Ú™w,Ž|Íï‚ æt«—ºð–‰ia=Œ×j½+i|ä$€9æu€#nkÓ>ܵǂlƒÃ$M xY^Mù*äø‡½sÿì4ëøKΕb’k¶Žà¬Û¢Ä)ç¦s\„ÓCká¯ÝC{‰4ÝhE¦í¸?¸ÌRBŒôùtZ¬í©øÒMR\+ŸKmûvéî_¸ô±ï/5éâ³-½Ôö¶¶²_!œÃunv«™[¸îsí]7…¬t¥ø›â‹†EŠèM€<„Z¶yê~œ×¤zMxÕ¦—yâ+{]—2›ë½VV»¼W*%² à‡p*FÒ®åÕ†ñãŸOŸN‘ä73Iç\€r@ÉûúRêv¾M‡-ïuXæ™5ãË„£Ä¦ã‚TtϵlÃ¢ÛØx®Mòi¥ÑâÓ^âØ\I•24„¹ê1AYZ]ÍÃÏà[íiÞ).b¹Šy%r¢T |½Üã%yªztÿmðÔPi÷vo ×.ÄV×ìÍ«–Ú¬ÙÊñÊŸP+Ð>Ë#xXC5»A-½ÌÑ:™|ÐX9'kÿçö¬OŠv¶“Ká—–sÍ«C u”¡16w½:sÚ¹mAm­ì¾ $W®©¥²I¦ªÜÜ9@ħ?Þκ›‹È§ñ·‚náKÜØÏæâNùjFFqÔµr±˜lô ÍBÚúT¸‡ÄÂr. òãó‚í=&µõñüº³$Ëœ¹c8(=Øœã¯á]÷ƒ$ŽOè¦'FQe ü‡ ƒŠÁøƒöxu/ \S Z$fß·÷xbAç¦@®S[·´]Câȼ•M¥¼RÚ„¹`#”ÆIeõÝŠõ?Ý=ï†ôÛ™%É%´lîrÛFZóÍZ KŸxÆiî0 Ò"d .Ü8WÁ8=AüªHu–ëáÅä÷›®n""v2}ÿܼ3ýâz÷ªÞ–øx¯H½t³º´žyãK›y Í–V?¾ŒðH¨¯T¼·ŠîÎkyÓ|R!W\õ¼WÃlö¾ Ðu >i¦Õ\6ÌBÍåopÑàŸ»´gõ­ïèÑ]k>%–Öþç:n©æÚÁÛ‡·ô$þ•OK½¹‡Lð–«jÌÚΧ|Ñê1,Êw— ¹þ¦)|:·:Šj0Eue}ñÇworß¾$g2Æy ÔV†ä’ÏÂ^¾Óf’mNma­åÝ#1h·H'î€ýkSH]CTÓ£Õdº·¶Õ¢Õ™'–Y[yQ!SÀ:#ñ©ü5áÝ#P×|Eþ—"Ee«y‘EØP‚1¸cû¤ž~‚°"†ÃPð/†Íä¦TO˜‹[åC+ðN}溋K }ÅÖVr=œ}–kpIße®1õ®Š½áχ,ùžs*Æîœ´Ì9'ÐWK©=ÀÒ®žÌr!s=ßiÇë^K£M³LðDÖì‡S¸¸‘uMßyãÃy¾o°>½*ÏíAÕo¯ï¢uŽîÃZ¸–†Aþ¯¢Œs“Ó½rŠ(¢Š(¢Š(¢¡¸³¶»P·6ñLªrˆøÒ›h(0ÆBŒ.Tqô¤k[wríeÙv–(2G§Ò¢þ̰Àb¶Àéû¥ãô§½¤³¤ò[Bó'Ý‘£—è{R >È\} Z@&Ý»ÌòÆìúçÍYªëah—R]-´+q ÃÊnaîzšm¦›c`Ò;H-̇.bŒ.ãæÒÚò1Õ¼S 9 *õÁ¨SIÓ£}Éaj­´®V¨éÒéi‰£6»a—É\ùU˜`ŠÚ†Ò8aQaPÜi–r¬·6VÓH£ä‰Xõ"«7‡tG H±!º³¦éRÉ£i³ ¶¯öp;¢SåÐ/¥:m+O¸gšÊÞIU·x ñÎùQý•aý£ý£ö+¶…Ø.<¡æcÓw\T·‰4–S¥³¬s´l#v Øà‘ßšò¨¾¯Ù¢‰<2–ÚÂí-ª¥ïîÕøÌŠ ç®NÜÚ½FãK±¼hžîÎÞâHþãËb>™éK.e<†I¬íär6–x”œzdŠlºVŸ=—Øå±¶{\äBÑ.À~)HÓdŠ8žÂÕ£v¢´*BAÇû½6Êý#K»H'XÎPK`§Û=)ntû;ÈÒ;«X'HÈdY# Žà•z>›”G§Ú¨”æM°¨Þ}OÕ¨ ŠÚ†Ò(aQ° Ö›czè÷vv÷ ™ØeŒ6ÜõÆj#¢iL¬™fCpG¼þ”õÒtäòöØZ,˜…~P:cŽ)§FÒÙ :С9+ä.3ùT³iÖW2 '´‚W P3Æ ÚzŽ{Sím-¬¡ÚÁHH(ÉëÀ¦\iöwlæÒ ™F’0Ä~u èšT…Ëé–l\å‰IcïÅY¶µ·²`µ†8a_»jGà*³èšT#¾›fÍ!%ØÀ¤¶zäâ•t]-atë@#ûŸ¸_—œñÇÔ‘é¶PÜý¦+H}»|ÅŒǦjiÙÖ 428RUqÇšâ>øzãGÑ:¶¾¡’9(å•Ý›Œž®¾ÓJÓì$y,ìm­ÝÆ¢‰T·ÔŽ´ÈtM2ÚþKèl-㺓!æXÀcž¼ûÔsi¶vMue¥B×B"ª!Øcî‚qüëžøw¡O¤hÛêzJ[jå×ÏÊ1uf-Þàs]?ö>›ý oþÁmöÃÿ-ü¡¿Ó¯ZtZVŸ;Ecmu*Å"Q¸Ç‘Q¾‡¥Ihö¦Ù›w`Ív±ÈÆ3\ìúˆ¯µÙ´û˜l×ë42ÂÉŒ„NJõ,°¿¬h鬥¼3ÌE¬r‰%„(>n9“Ðgž:Öª‘é–Ï4ñÙ[¤³ Jë ÿSÞŸgk#Ioi.Ã ÑÆ‘îEY¢Š(¢Š(¢Š(¨æó|—òBvÏíŸjæ<âMK]½Öí5+;kytË¡n|‡,ã9æºKÉf‚Êimà3̈Y"È Õ/ßj:–‡owªéÇN½2ضíœ9÷þ5©Tµ=R×Hµ[‹·+H‘.If` cêjífë×·Úvqy§ÚÃs<*_Ë–S*O qPxO[ox[OÖ]ÅæÕ²’1ŸÂ¶hªÚ…ý¾—a5íÓ”‚Üä à}*ÂÀÐÕkÝFÛOke¸r¦æe‚, åÈ$ÐÕª+SÕוּ½.ÆÛGžîÞí˜OtŒÛ€8'Ö¶h®oÄž%¹Ð5=ÓÖ{mFémZo7kDÍœ|¸ä`zÖ–½¨]éZ4÷–:lº•Ä`lµ‰°Ï’Û¯áW­äymã’HÌNÈœ•$tü*J(¢ŠG`ˆYŽ&«Ø_[êv^Ú>ûyЇ¹ Z«[ZÝjÆæ¯Æ!Žt[xÙIòòQ€sÛñ«/{y¯xRÓ¬üÕ²²Ó£m;ͽhv“ŸÞ“ÎüÜÿ:l:…Ö±­C¯_];DŠH^ Ycwdbò›¹çú×iðÄ¡øk `ÀZ(ÈüiŸµ{ýÁ7z{˜æ2GH:ÆŒÁY‡§¯jåïUÑ Õ+¸ìì粡Ž[ç•„»Â–-ÕU·OãXú“ÜÜø~ÿNÕâÔlf¶L¶ÿl2 ä •prA œ‡½¯ÝDuXô› ^íí­4Ùå‘<÷VFV HÒç'ŽzV\ÒÇâSà‹ýFëÏ}ßjh®0[— 1Œ1Èçð«GS×5ûŸɧËqšs"éì÷B(âP·¸þ=Ýóž+Ôt»‰.ô«K‰vy’ÂŽÛW$dàúW)â™ç´ñß„¼‹Û˜’îybž)òäUŒ°ÊôÎ{×+¨_j–?‹u(5›ï3JÕV;PóåB“å`z˜Žk×bbÑ#¤\/ĸšâ_ Â’´NúÔ@2ž@ÚÙ#Þ±µMFþÓÃþ?µT¼ItkI|òe1«ãq䌓֣ñV¥­ï•ì…íÔéм’YÞyrZåIgh΂;õâ½JÂâ;½>Þæ"LrÄ®¥ºàŒŠâ~&™ôËM7Ä\^¬Vwq­Ü0Nè$…Žʤ ‚AÍexLjrjZµìÚ„—:4Òϵ®¬«"…N0ü=ê kROƒµ¶\O{¬_/aóX®Æ«œ.ÌEO£Ûj/¿x•éúUÄ—zM¥Ä»|ÉaGm½2@'ÕÌø–êêox{D/,ZmÚÏ$í… Œ‹ò¦áÈç¯8®#Q¹—XÑ­£qrVÓÅÂÞU”´AølƒË›ºñ^ÇkÛZÅ;ºÆCÈÛ™€îOsï\GåÓôRn„11]w.þ§BzÖ¨ðþ’4¦ÒÆŸoöëÁ´óžE5¼7¢¶˜4ÖÓ-M’¶ñ–6†õǯ½6÷Ã&¤`7še´¦ÛS½ºSï<;£ßË·Zu´¯ìBÈ>UôúTºV§hv¦×K³ŠÒÛ¼¸†}jÍͬ¶Ïos M ƒkÇ"†V„˶ðž…im-¼:d »w¡ƒ9žÀöéNÑ„ö?ÙÐ}šr ±Nìr=øíéLo hÐÒmXÛÇåÄJ}Õëqšgü!žû 6_ÙÂÚ ±Æ€¬x$~RÞøCBÔ/–òæÁ`¡ RT:Ž€8`=kmUQB¨@ÀpeßxoHÔµoïlcšêyR99LzsÅA?ƒ¼?r—)6—¥Ôžlês‰ûÄg“ZöÖÑZ[GoìŠ5 «’p?£©x{IÖ'†}BÆ+™`æ&d¡õ‡Þ >Ð;¨Î•nRïhsæã¦ïZ$ð–…*…}6øÈÊŠpyôïøqÜœVç‰<=¿¡®Ë¶fQ'˜›Š þàìÞ‡µmEÃDƒŠG ›ÿÞöÄ»þ΃ÏG2ÛüD“»ÎIæ–÷Ú6¥r×7ºm´ó4~[<‘‚Jú΢o è/ö-úU³}ˆm¶ÊgËζkf³G‡ô…ÔΦ4ë_·“qåùúõ¢ß@Òm/ä¾·Óí㹓;¤Tçž¿L÷ÇZ4ïéDòͧiÖÖ²J1#C]ß\V•QEQEQEsÏŠî4iZLšL’[j2yQ]¬ÃÀÉqšé袨kWóiš=Õí½”·²Ãu·‡ïÈ}Ge¬$ÖzsÞDÖwWË”¶“– ·q^=kN¹»¯5¯ìü8úeÉK¨T½Çîò2Jþ•ÒQE`x¯Äã¶6×rXMu× ™G–Xàž¼žÕ¼E-QÕ¯ntû¸µ±kÆ^Z5‘P…ÆIÉþU‘á¿‹ôØõ(4©­le åË,¨Km¤m=A®–°¼Mâhü3oiq5•ÅÄW nZ¿#9IôÉí[µOU¾}7K¸½Ki.L(_Ê€f® ã§5̯Äš/Ü &èZkŒ‰ ÅÓ»d…aœôô®ÊŠ(¢Š(¢Š+ñ/‹"ðÿ‡çÖ!´}BÞÞB“$PSië׌VüRy°¤˜#r†Áíš}UMRò]?L¸»†Õîž$/ä£,\ÇJƒÃúÌ^!Ð,µh#x¢ºŒH¨ÿy}iQE„…ž‚²<7â;/im¨Xä¬ÒCóuÊ1üzþ5¢—Iw-¢J¦x•]ãU[8'ëƒùS®."´¶’ây8bRîíÑT ’kïÄégâ]3G{)™uv‚éYveWqg=1ùÖõQEs:wŠ'»ñ¥ÿ‡n4ß³µµºÜ$Â`âE-Æ8®šŠ(¢Š(¢Š(¢¸ˆ×'ðe²ÊÑo¿rdFà 'oΰµÝoUM/ƶ6÷—‘cIÚ],ÇpܪJ3uldž}jæ¦Þ#Ðí,ßûZâî=fæÚ"x n ûXð LSu+o.‡â+{kÛËy,ÂÝØ+]˜&ß™‚I«c4ëk»«ÿë~%´Õõ4‰í –æÿVQ>b8îÀ¢K{cÄþ–}OPW—K{‰%œãNNhñ<úÞ™ã‡ÓÓYÔÛT¶'OÛ Äw€+Ó‘ƒœWo.˜º]Æ£%Ô·ÐÙ²-ÅÁÎÜ.I2@'¹_kZ´¾#ŽËVMJ-—˜‰s"Ë¬ËÆã¶CÓ5ÒxÞ÷Q±Ð’M0HÓ5ÄhÉ *ÊèOÌ#ÝÆìZâãñV©q¦Ù[Bî+™õcm$ùw~VÀB7w-Ó•KTÖæÔ¾I¡rnn,õ¨ãF]£K€ pOã©­Ë?]§ƒ¼CâX¯îo^Ðʉa¿Jµ jü:ö”—&òâÂúÔ´ó]Àcp1…9ÚFxúWm¨i×'Ò'þF¸Ïƒk·án“Æ2e?ù«oÆ—×ö2é¾a¸3F›b+æ2–ù‚nãv3Œ×¬kwZçƒf–qs»h‰äT±©d*$Q€yÉÈà×Cy¯êºKx¶Ùõ8éöqOm=Ê…ØÎ­÷¶ŽF@ÇÕWF×uÔõM'R¼’HŸJŽâ!rd:¶å#Œ€Fk"2O…~¯BobãþÙµ{y½ìšÙñþ»c»wŒZX¼X€BRBX¤¯ òûÒé¾ Õ|Gwá‹ n%´ŽïKkë©­ÈV‘Æ(8àdäãÚ³fñV³?ƒtÿ½ôðÃa©µ® bP<ø›7ô8#ƒÇ½Yð½æ·«xŽM*óZ¿i× <ø¢X+B§å÷MwúòLúçÙîå´™"gI¢ÆTžàŒq^}¢xY³Óü{¨½áÖÉŠáT*|…•†F1ÏÔûSt_j‹¬èS^êfkmFK±3` G’@#_z–ËŨÖBÝO} r’’OY°¬c(ê8Áô«žñ¥uâ8¬5C¨ÀïfÎ"¼vÊà©-¨Ã víšï/ci¬¦'’d K7'FA¯„9ø|ÒêSÜËv>Éö£ÏÁ9<“Üšê¦×µ-_Ômd»{ءЎ #u+…Àû§úQ jõÊè—2IröÚ«¹¥–0«#&åh—9ãž1Ó­`èÚ¿‰ŸÃþÔ»<²êZ“ÙÊ%TÚ#ˀü6ç==«³ðv£>±âM.òíî“M»Hà–@7íd ƒ€Á®U$i¤p|‡ÿÐMy„µ ÝÃÞ]M4z¡6ÒÂ~ê®ÒAQØŒu÷5eïµÈ|a¨x^]rõg™á›O˜$dù>f~^qƒÏÒ½ÚêÙfþϱÍw "Éï03ô«tVŠï$¶Ñ pZêõ…¬ ³ðqŸA“øWà%o øï^ð̰ Xn•uHwÀ?+€G@« û7ÄOIsªÞ6Û›{tŠ•¼{•H À8Æ=ëW⊱ð¢ëw5ºªþQx$.ÓÇNk#S‰eñ?„l­õ9¤žÞKˆžw \(ÛÁ§z­'‹µtÒa´óešg×›Kk¤EWòÁíÑCÆkªðÕÆ¬º®«a¨+ýš&ŽK6žUiv0ä6ÒˆY~$Öuñî™áÈVålæ´’êFµ$’08 ¸‘€:ñÖ²æºñ“ÃÝês[^M¨Ëgp°Ê¬$C0-Ž7àÆ ¹ñN­g êvÂêI^/.œ.XüñÀÅNIõ‘šÓТH~2ë‘,Í(K€í¹†[8$òúõètQEQEQE—ªø{LÖä·’þßÍ’ßw’áÊ´dã$x<j¼žÑ&Ò&Òæ³ó-'2ey´êÍœ±úš³6¦ÜhˤÍoæY(QÜ’0rlç#±Í>ÃD°Ómå‚Úoõ†GggíË1$ÔøcI›@M íâZŠ@®Ê6ŽÇ$T#Â:$pYF–X9û>$l =W9É8•sUÒ,õ›híïQž8åYT+ù—¡Èô<ÖeÏ‚ô‹Ûc ÏÚeÍÂ\´pÛÚDû¤œóŒ tÞ Ñ.[Sk‹g™µ8Ö;£$ÌwªýÐ9ãÕ ~ÐÒûí¦;—¹0˜ZG¹r̤ÉÏ$@=¥oè-oa‘p±iç6ª·R(óÈÃuä¥tj6€==kçÂ:EÞ§u¨ËÿjºˆC3­Ì‹º1ü8‰¡|!¤Å§ÙÙÛÇ5ºY«%»Å3 #SÕCg8>ŸOJ´¾Ò×CþÅ[D~ݾHÎÎzõÎyÍY‡N´·¾žö(..Yå‚çn~™5[Ä71ÚèÒH$`ad lìIõ5Éü9дöðž‘%ŽÁ¼³€ÄÑ\‡Q ‘‡Ú­ÐŸQ[ ðÿèmvÚH¿erÐpøLõQÏ sÈèjh¼£Å„$í-;” Àg‚CG­X°ðÆ›¦ÞGun³n†3+$Ìëœd('Œà~U°ÊJžA5ˇž\šiµ˜Ù»1™0$…ð¹$ã¦jäÑíõUÔÖšìCö}ò\Hùû¤ Š“N𶕥ȯk € a4¬É=v)8_ª/€ü>–öÐ%¤«¬¦hnd7?Ä>n_ÌÕ½/ÂÚ^©]êI:Ü]ó9yÝßR #=³ZÓD“ÂñH2Ž¥XzƒÖ±mü5¥è£íVLÒ[Fÿf‡Ìb©‘Ê¢“…ÏN++Ã’ÍâM^Ûĺ,ºtöÖÙÔ‡Þí– QÏûGÒµ­|%¤Ùx¦óÄpÄãR»ŒG+—%Hã íÐVå¨x3FÕ5a©ÞEq%ÒQ…ÔŠŒ¨ ãÒ™?‚4;N=NX®Môi±.>×.õ^xwNjÊx[IMyõ‘nßmr¥˜ÈÅKÚnq»o«º¦™i¬é³é÷Љm§]®„ã"²—Á:ÜZÜ y¼û]ÞTŸi“p'©ÎîIõ4ø¼¢Cesf-] ¹›í+Ìì|Ìçx$ä÷¡§iz_šÖÈÞd¤%‘Ë»ã¦Y‰¢¥®[Yñ¼z§mew£jY»¸öÒ Œ¬Î}>|Ä ¿iâk;m´YâžÓQò¼å‚u¼N›”‚Aüëj‘˜*–b$žÕ‰ªx¦ÇIÔ4»IãžOí9VóD›£Üy·lŽkrŠ(¢«ÞÝ5£Î¶Ó\Çî¡PXóŽ"¹ÛXjK|ÖÚv¨Ëa!Šäýœ~íÀÉÎOášè4ÝFÓWÓ῱™f¶™wG"ž«TQEQEQEQY7ˆ¬õËBÚÞ;ˆ¦°”E:OÂŒŒzŒV½A{t¶6rܼrȱ.â‘.æ#Øw¨4}VÛ\Òmµ;Mÿg¸Méæ.ÖÆ{нTuRHºÔ®RW†Ù ºÄ›˜aÞ¦±»ŽþÂÞò%uŽxÖE0ÀžGcV(¢ŠÊ¾×íl5½;I–+†žü?”É(»FNãÚ´#¹‚Y%Ž9QžE ’‡ÁôàƒNŠTš%–'WÀee9zƒO¢Š(¢Š(¢Š(¢Š(¢¸__½»ø‡eá;+©,“ìwqq«;s€ƒp ä⸟kZˆ|¨}ªåâ}7W[96ƸŸ.Ö>ãÛŠõý.ÖKKÒ{´ÎF^s¡sêBñ\gļSàÅ·m’½ôН¹û¾[ëŒãÞ³o¼G¯ÁáŸ2êd]h—ž\3ùI™ pÃ'žÀS¼Gã=SHÔ[uÅÄË gKQ,˜þa©çŽÕéѺɺ«Aõ¼ÿâkÔ|A_íuòË}Üí=j]zÂ}æëÇ:¼Éu>—dékkmT\õ$’I'ò›/Šu]*ûJ·¹xîßVÓå¹ä"•>ß÷N{ú{Öø×S¿ðö½ ·“Auo¦4Û.,ü¹U¿ˆáe쩵U¹‡Kð5¿Û£žåu|¦ò¶¬y„íÎϽ_¾ñfµmῺ\ÃöÝ ãbL`âU*¬\ã?7QéZ0ëZ¼ž+:Q½ˆE6Œ/ ÑÉ3î:ðkžÓ|c≬Oë¬ÜiO)Òï~ÉšZ–ûFÒ¡Élpy8ÁíRǪxºïÅZ¾auhðÚiPOR«',‡‹ž}‡½T°ñ¦®u­?íS@Ð]êsY<( Æˆ¡ŠºÈ:Ÿ—‘“øVׄv·Œ|hËŒØ?òÅksÄúÈð÷†µ X sm uSз@¶q\况¬?•ÚÍsou§É4—ØÄ°Ê;FG*A8úu¬/ k÷žð^‰jd‹í¶rM,ñG½•ýÕ’HíÀ¶þ%ÖáÑ¬ÒæÙ­îçÕ>Âg’,b"NÙvö$0{š­.µâ‰¬µûˆní#¶Ò–â!+CóK"*º¶äƒôâ¥ÿ„“S¿Ô´­.9¦„ɤ­üóÛ[‡gs€9'JÎÕïÀZ-抚LŸj[U—ÏqÅL’gvæ=Îy®†ÖÜZZÇ–IB.Ðò¶æ?SÞ²µo iúÖ¥iw%и´; 1NÈ#=ȹÍSè’Yj6Ž.Ú-FA-Ön\™zœÿ/JI|¥È³§Ú/•.Uc¸_<‘*)Ïl½}릎5Š5  (°Ëë~±×ïã¼¾Ô52ðL'·DŸ Ž…F?žkoû&twÓ/d’ö#häkŒu=s€=k"Ø¡ÝqwwtéhÖp4̹‚&!p8Ç''Šwü!ZsÛKoq=ÕÄOjÖŠ²ÉŸ.6êÆ{NzTðÚ2X 5=BG±”M—Lï ´òö^*X¼§,ZÜS\ÝÜG¬ÿÇÒÊãã\ƒåQÚøÒÓTRMKQk¤´6…ÞE;£ìËÛŒb£‡áî:dQßê!4ÙLÖÃÌS±S÷yê:•ü¥I«’ܺêWêL¸Ìr‚0èqFåZZV‚4ë¹o'¿º¾»’1›q´m@ræjýí³ÝÚ¼)s5³61,8ܼöÈ#ô®DðM¾¨\]Újº“™¼û„’Ee™ñÕ¾\þX«ºÇ†áÕob¾ŠîâÆú8šso·qŽJüÀŽ£>ÕU¼¦Gk§Ge-ÅŒÚr·¹·aæo¼àAÉääT—>°º}6Yno|í>Vž)D¿3Hà ÍÇJ‘·åÀä㌜šŠé–ú^e×q4Ÿ²\,ƒÍˆ `b ax¯Kò_KÓ¢½–Î&y'—RºgBü0ÆãØñŒqSxvÊóQ·Õ´-CU®”𪋸 `¶CÆ ðx‘ë[rxBÈÅaä]ÞÛ\XÄ`†æ)™åŸá9ÀíÚ‰|!fә໽¶”À fŠAó®I9I,I=ZØÓì-ôÍ>ÞÆÕ6[ÁŽ5ë€*½BòîêêßÌ–îÓìr’zÅ’qúõªúׄl5½2ËO’[›{k7G‰-Ü.1´ô=1OÔ•ª@#€µ™&¿§Eât'Ÿ„ЙÒ-§”ç¥iÑEQEQEQEQEQEæþ53ÂÏð`¶(.\…g\òõ#¿z–ïÅz¹ðÏŠ\‹&½Ðæd.ГÊ7ÝÝSÝëþ xM°’Å!Ôôó<†H‰12€I0È笨¼y¯ Û[•,MºjcNžḞ~ÂêÙùyÁÆÖ½F¼óÄqÝËñoC3G ÃK¸&GMûWröȪw<Ö_Â:oˆ­…²[‹¿²j(ð–Ûóì2)Èã§Öºß Þêú»»¾¸´–ÌÊÉkäBÈÅT‘¸’Ç9ª¾5ñiðÛivùbëRŸÉI%RÉ–r'qX7þ9ÖàðÖ¥{m´—mÜp$Ö;¤r 2dü§žzô«7^*ñ:¦±§¤zvý>ÍoüͬAR òñž¹{ô©ÅW:·ƒnÚÌÛë1ùâÌ“ÿ•³Ó·J¦|mâ m3TÔna°htÍQl¥TVT.ªYNîÜ=jÆ³ã›Øõ­fÏOªé0£˜Þ‘îdeݰmû¼`gžMK/мAqâ{}6ÂÚÉ`ºÓ>ßÜ+‡‹¬3ÉÉöý+Ä$Õ|AáO _Ù›kdÔ5c–9#/ûÅbG —)õ¯Q³+i¼hÚä(ó%!KwÀ<â¹ëÞ!°ñ¶•£Xý€Ûji'–òÆÅâ($á†G=8ªp|@¸½–ÏI‚(SV›QšÂII‰<®YÀÎNF03ß­Cqñ)á'Lòâ¨Õœd*L@¸É´ýÞÙëÞ³üKâ][Tð¦¡l¦Ý^ J9&0:­Â;®Ö@OÁäô­oxÚûÃwkc<–1N¶‹"É,2§äm {Ö»è_Í…$ÊGCšãï|W.·®Ùé‰n#ÐíÒiÌÊI™ÙKlRÚ0:àòzV ÷7^(ñ—‡¯"ûØ_éSI£0ØÞ^ðÃ<žÂ½>c·…!…8£P¨Š0€ á­¯uY~,ß[Ísf,í,cÄx`B»œsœnÈ£ëך™«_Af2¼»:l†+¹còÙ†hã_—ò»A÷Í\okM'„#Ó¡ÓâƒZ·%£h˜ùG¿# >\qÖ¡>9Ö¢ÒfÔ¦·²òlµ?ìû„UlËûÀ›Ðçåê{Ôú·5!w¯.•0Ñ™È0,Ó-šâÎ=#QÞ‹,°a‘S!I 3“D>"×WÑ´ä³MFúÞKÉfH[dQ®0¡KrÄž¹ü*”^7ÕoŽŠößfO;W}.ò6Œ·Ì›²êsÀÂôç­nø?[Ôµ[Í~×R03iׯÚ7… †] ä‚O<Ö—Š.ï´ÿ ßÞéÍ ÜÛBÓ/œ…”…#ޏ®7Nñ‡‰®nü7mû¯õ|œ`ãåãŒ~Ua¼‡RÓ/×X¾Yôë³ÀqHç+É8Ÿ/Ã+GÑÿ²×XÔØ^}´ FH—vìýÞ™í]´1´P¢<†FU» SŠÀÕ¼&º–¿·£qi{¹¶FEVP¤’ÜçʹmjãÃú&“7ÃÈíîZk‹"bÊdJîØëÝ·ŸA]ö§Ç¤èöz|C o Æ?T¼“É9ç5Q>Ç…´ÍuiÃé—BæÚäD¹Vàè~ñ®¶ÆÕ¬¬a¶k‰n4 e”åœúŸzóÿMŸ<% ŒV·QÅtw0 ´•Lyô­•ð%µ½¡´º1êV·r^¥Û¦íÒÉù\”çϧ4ÓðþÔÚ+ ¹UÇPûr Ïœx?/M¸ãûÔ÷þm[HšÚÿTšK¹n"¸7 B´d ãñ©u >¡-ÓÉ©Éþ•n–ó#@ŒŒ °£ž{Võ•¤v6PZCŸ*Ö4ÉÉÀÎêž[ÍGP»³¿{#©Â°_…Œ7šŠIû­‚FyúSá òuÍ/P²Ô¤¶‹MƒìÐÛT§”q¸×'šê땽ðs]x®Mn-JHVx¢Žx<°Á¼¶Ü˜9㞣½g¿Ã—}}0듘ç¾û{¹77ïü·v¦ßü5[åÔkW1%õÌwŒ¢5$L¸ç'’¼}ÞÕ}|bÖmµ5[ˆöÛEmr |Ó¬m¸|ÙùrIϨ®¶¸Äð#Åuª˜µiÚúigT˜ÞEÚçq<ñœqÆ{Ñ€L ¡mÖ®Cè¨ÑÛ0‰ANáŽxâ †Ë&“q§vóɸ¾û{Ÿ*<ù»·Ý3ƒŠÖ—ÂeukËëVæËíû~×h¤HTcp$|§dU ]"é¾"ÿh[ËŸgf-^9˜ùR7v×’Þ¸÷®ÅÑdFFV ÷Ìé~Ó4¯ìSIÒ|ï(•7™×4\x7ÏÖïõA¬ÞÇ%í¿Ù¤EXöˆÆpËž2:†ßÀ‰a˜l5[ˆ/4èZÞ–˜ð2à)o¼-åæ™t5ÛÄ›O‘¦F1£o‘²ŽG¡Æ¬ê>–mfM[LÕ$Ó¯'‰a¹d‰dªç£ œÒ˜Þ#X°Ô¢Õîã{f¶‰v£e,HÉ$€sYÍðäcZi©®Þío>Ý£'ÍÜ['Ž™'Ší£VXÕY·0Æ2}kÎ|E­hÞ3ÔÇ…V ÚúÏT‡våÆ|Îãýœ¹õa]^¹áÁ©ÝÙßÚ]µŽ¥hb¸Dò0Ã)SÁʨØ&‰ca ÕÌSYÝ}²;ÅÛæ‰%˜ä`ç'ŒU¯øQ|9©\E©]\¥ü¾t‘ÎâLX3ÈŽ•¥­é¬è÷:rÝ=°¸CÈŠí<3ê+›¶ø~Ö×Z<ë¯^—Ò`h-³p€óTÇĨï-4XíV {íLÈÜ“åÁåœ1= ç]„!ñ†©¬x2â]2]6E7ñY™à°ÊÅ0GRI ƒÓëÓ4æ¹k~Ú°­È\H°±dØ q·ßž+B[-<ÜØi׉e;.ã$’±„c žIëX6ZÓøwÄþ=Ôl´µ–ÞÚH&¸]â<(ŒnÛÁËu8âºOøÞçLÞÖv1´i§}¿}Ë”/RŠ@ûÀszn¥ã‹ûkÝ ;=n¡Ö`i >vX&âcÏ^~•JÿâMí…»Íq¡›cmiÕÔW2”|1ÁXþ\1qÅlêÞ1kmI´ý>ÔO<6&þàÈN>Ê‚KOjųñ·«øûIXG ‹iMsåË;+mw@Y—oÞ ~µz?ˆpJb»H¡:d·ßaGó{»q]û1÷wq×Þ›§øßX»Ö.4öðáam¨-”òÁ9u@W;þèàwéÔVߊü=‰¬­¬'‚€N²I$ƒ-^è?¼zg¶sÍG§xm`ñ}ÿˆeЦ–!mÅ’Y3Ÿïp;]QEQEQEQEQEQEQEQEQEQEQ\®µá‹½KYšõ&²– -Ökyoæ  ’Xr<öôªqxm.æÂûF¼‚;È-E¤ßh„¼r¦r8AéÏJ³©xFêî]3QƒRDÖ, ížHÕþò”éÎF+cBÓ.´ëyõñ»ºžO2G ±ŒEÉÀV^£á{ëßÙø5(cû/ PrÙ Œ’w{zVT¯#Ò"°þÚBaÕ´ÒCkü[‹m#wL“VÀÓK¨ÛÜÞ][MäÞµÚÉöß'ÎX"¾x^zcÔV׈^Þ¼Ï&²‰ö-té@·Ý±@Æc%¾\÷ëV"ð~±ï†g:›.‹ˆ¨·eóC.Â~ñÁÀãÞ ñÃûÝjÿ]•5X’-RÝ!XK¼;GE9áI䊲¾Ö­5[}fÏR²þÒ6bÒëÌ€ùn åY@9tç­Osá=EüCk©Á«/_c¹ó£,î»÷–RÁ=9è(Ó|'¥±¶¼µ_Úd& Λq@ÙÆ3žqœ~u/†|;ªèšÎ³uw{kq¥pnHŽ6VFÀrHÆhøsNÕ´Û;ˆõ}WûJg¸y#“ËÙ²3Ñ Ù¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+:M{I‹Pûš•¢ÝÿÏ*ïéž•v â¹&‚E’'WCÃÔ’©ÝêÚ}…Ä0]ÞÛÁ4ç$²…g>Àõ¤¿ÑôíPÄoìà¹1SÍ@ÛsÖ¦ÛE:Z bYJnXwÛGp=*z©>«§ÚÌa¸¾¶†P2RIUN=pM'ö®œF~ßkÿ—üjE¿´iV%º€ÈÇDƒ'ð«T2^[C2E%ÄI+ýÔg·Ðw¥Žæ d’8æäŒáÕX§Üv©h¢Š(¢Š(¨çžhŒ³Ê‘F:»°P?O‘Ò™,ðÀÍ*F‚®ö$ô=êJ(¨®.!µ…¦¸š8¢^¯#Qøšt3Eq M ‰$N2®‡!‡¨4ú(¢Š(¢Š‚kÛ[gTžæ™þè‘–úf§ªÏ¨ÙEx–r]À·.2°´€;}^ƬÑEG<ðÛDežTŠ5êîÁ@üM,3GqË ‰$l2®Œ#ØŠ}QEQEQEQE#kÄ­õïé÷¶šß‡¿¶¼=w<³®«eó° Ç–A¼tâ»-ĶÖ^Ò4¸~Ûk{jâÖãÌÙŸ,d†dvbˆPÉ£%ÛéÒGu. Út¾`&IAÁù±ÀàœúW3â¿ÚøƒKÓo ‘[;ÄÛº 6æSÈV d=+½Ð|Gý±}©XMfö·º|Š“F\0!†å jɾºÒíþ&Y­Ö’ßÚ-a+A|%Èò—–]¾¹5sBñ”ZíìÃfËð¼ñγ+®Õ `ã£|Ý=«+⿆àÖ<}u¬mfæ)`¹ØrW=Æ3Åq"¿Ónï¼#âË[ o°Ûy+x|¡ß `ŽŸ.?Q^…c§h0ê:·Šæ±µÉbäÆ2©ù˜qÇ;¹ö&Ÿã˜n%°kÛ3gk©ÄóYLòÞª7Ã)ÛÎ9¢ÇÇV·RiÒËjðXj……˸ýáPO̿à  æõýBÓÄ—žÕ¡Ó¤ºª {ÇÛ¹Ñwqê# V¼V~ Ô5ÿMja:„ÑÆ!Y³½‹`9$áwú]&…®®¶·è’Û=¬¢'Y6IPÙù‡5‹¬|A²Ñõ;ëI,®$‹OòÜÊ@‰ @<°çœU­sƶZ5Üö«—3[Z›Ë€ŒEp '¹ì=ªçÄM>(L¶p=ÌqY%ýË!…¾ï®XöÝji¼yg¶âK+;‹¸­-RîíÔ…òcuÜ8=[hÎ+xâ'Õ…¦›qrZÃûBQÐ,±ä2x<÷ôªÿð°íŽ‘¡êK¥_<:ÃùP„ØJ¿8SÏ|jf³ãV> ×o¬¬.V÷Oó že íÎâs‚ ñ[¾¹½¹ðå“ßÛMÀ…„άυ1*O_Γþ$ƒÄqÞ¼6—VâÖå­Ø\G·q×ÔVWÄ™tȼ#+k:eÍþœ$C2[È“‘ƒÔÎ:UkR‡Çú~‘i¦\µŒv&F *à²(b Ο|š±ã£¤“¢.³¦\]Âu„2Bà¦' ¸d?:°_°8ýxÍmÉãëeФ¾[…Ê_ÿgfaòÍœrÃ#o|Õ=KÇ72x[ÔìôÙ÷Oi-æˆÊ1…ûÁ»ŽAãžk£ðÌ÷Òør͵y"ºX•XI v|(ù‰µÉiúÕ÷ˆÿá0·Ôô™VÊx£Y™b)8#?x“»Œýiþñv~ð¦“5 Û]\gUÜÃÈã=»V­—mou[[e²™mnîe´‚ä°æXóW¨«áŸêú—ŒuÈ.tÛijŽd†"Î… Ú™9ÁÎ[#¦{WqEQEQEQE„d\7‡´øLû-ö¨ÛLòK‰Ë(‹sòåÁéÇÖ†ðEåˆÐgÒîmEÞ›$îþjyܶéƒÒ³í¾êÐip¼µ–úÇU}FÙ¾`²o'r¿¦sÔg¥«øg\Õí-å°KˆõïZ›Ë@2I<’E]Ðt[NñfµªÞIfÐjB3²Û£(6Ž£œŠf³áýV÷ÆvzÕ£Ú$VÖs[ ìÛÉ“ôÇýk;ÃÞ›L×ìu)-¬­§‚&7’0û[š<`sÎ}k¼–4š'ŠE Ž¥Xàõ¯9ƒá³ÁðÃTðÊ2™å’H· ‡Ì\öÀõ®¹|= ž>™•%™¶‘Ç$åpO×95ÍZøúít{=a­þÇ£ÛIo@䵯䨂>\.xÉæ™eàmB[] IÔšÜiú#1Šh\ïŸå*¹\|¸žO"«Ÿø–ßIðþŸi-‹D½ǾV|cv7|¿)ç¶k°ñF—s­hMen¶¬Ï"#¹]Ѻ”ñÜVoƒ<.þ›Rd·ŽÎÒåÐÃgÍ*Æ@!›$qž8ö¬øÄÕæ¾EÅŒðßþÈÓ»fÝW P02GÞ«¿ðë¶$ŸZ†ÖÊùõ+%¶¼‚Yv¬l¤í#+ó.Æx©â𾫦kÓj6qØ]‹ë8­îÒlÆÓ8pG?wŽ‚ ¾ðž±os® ³Ü®¹kÉ+ù~Cª.AÎ9©âðu摨irémo,6úQÓ%3ÈQ¶äãäðxâªXøO]´ðß…ô÷O’}èM!36@`1òõù¿J—þ]jçKñ}¥ÂYBúË4:LÏ´• eG§Që]/‡íµ; _UxVf ˆâ²DªŠ¸ýÒOꇂõ-cS‡R—S’Þku»e²¸‚2‚X±×®Çz6¡â \éZrÛy×Ak‡*ª<ž•Ÿ{ k—å¾¥ µ…åÓÅÁ¶aùÇñ‘Ú¯xÇGÔõ›}6-7ìÿè×Ñ]Hf¨agoç?¥aKàk»eu9­ì“Pûxœ_Á+,‹|ìaŒ?Ê6óëí[þ0Ñõ R=*}0@×éuåÌå@d޾•‹'„õËMCR¾±–Öiõ{$·»3HËåH ëÁÜ0Ý8é[¶~þÊð(ðõ”¡š;&·I$èX©>Ù5ÏZø&þé´;MSÉ[=ÖH#x¤%®“`l`mÀϯ5?‡ü#w¦ÿgÙÜØi›4ù7& ªi”gùO<œöâ®ëÚF±{ãM T´†Õ¬ôï3Ìß1Wo1vœ ¤qׯ5¡áKâë½jÚÒÆú+ët†h.É]Œ½|§ Ž¢°µxµüUåhú?ÛÓO[9[O• ‡ä¡1ØŽŸ[}>_øßHÒ4åÓÚÆò(¤¶½ƒ…ƒ¹AÉ8ûÖŸˆ¼7y©k:6½ ­´÷VQÉÖrÉòº¸ÚØêôæ ¿ðÖ¨©¢ÜévZu¼ÖW²\ÉiC½ ýà9#9'ÐÞ×#ñD—I$rÛÞYÛ[Ü\péå±/ŒÀãñ¨ÛÀÚêè¾'Ó$º²Ž-L¼¶þP;UßnAà ¸z×aáÛ=FÒÎS©¼FyNY#Pª¡A zg§zæì|5¯XÞx…#{amu5ÔN% ¹xÂ*0ÇsÏj‚˾!¶>W[º"ºÊËpÙ“t{2ÎÙÍRñ0×6R]ÚßK;]´¾@á€n˜R¡‡ËÈúV¾áïXø¶êQ4K¦O~o¤•d;¤PA_¨ÎsÚ»š(¢Š(¢Š(¢Š(ªj2±·pB„csïÎáSÙ¬1ÚÇ ®‘™SžœUŠ(¦³ªcsÏLœQ½wmÈÎ3ŒÒ4±£gPÇ€ ëO¢Š(¢Š(¦‡Rp$vÍ:ŠBÀu"–ŠB20hU ¡T@)©m¡†ïLÐd@á .ãÛ<Ò‚pzQ¸FM-S|ÄÝ·rîôÏ4¤€2N FG"–²¦Ð´ëËÖ½Xç| $·ãߎ›¶‘œ{Õë;+{L6Ñ,hX¹»I'¹>µ=QH##¥-QHHQ’@ô+©â€AèsA u4´QEQEQEW3®xÎ-Z´Ón4«ù ãˆíçˆ'–î‡%†÷ªV-µþ‰¢êr¸»6oîIÉÈßÓé‹ñ"Äêvi:œS[\Gm 1©ŸNCt9®}u›? |=Õ§ðΙ¨DßoxÏ‘KE30RÙ,F2F=ë°“Å¢Ý쬎›tú­ÄF_±Mè‹Õ˜îÛÆ¨Íñ#OVÒŒ—êŠâÞXÂãÌPw!È#Jèô-fE¶Ôíâ–(§]Á%]¬¼ãWŸ|LÔôýkÃw±Ãe,Ïa{ð¶)w¦å9èpOJ脚,?3ÍÔZšieŒÌÿ¹0+ œg¨'Ò¹Þiº·‰|«Eg,-q| W%GïáÚpx$ã888ë^Ÿtl¬f¹I9‰ yQcsc°É¹â.“¬¶™å[^äͼ³D´‹’S žx>ÞõbOéqÏ!Ù1²ŠäZI|òRRq·9ÏRqŒÖ~™â«Ëÿˆº¦–,/…•´0Ç’©µ·±óÀzWU«ê¶Ú.™5ýÙa XÎÑÉ$€ú’+Ÿ¼øaa¦^_Üiú‚Çe*Ep¢5-a~öärz¶|_oý¥}§.~×v–âäÄG™8IlýqÒ©é´Ýb ˆìïa·Ô£¶–eUH%:õùO±¢Ûâ&—p—r=¥üÙ\ k©eˆÉ9õ#¦qÞ³tÈ¡Ó>&x–k;Fe}¼¦@Ë»3’FH8­=3ÇöZ´VÙ麋Ç{;@‡Ë_•—ïn²çò­ýcPþÊÒ®/¾Í5Ç’…ü¸@,qõ5å¾!Ô_\ømáýzý'‚ñ/í›ÏeØv»ÅvŸ»Œ~Uè1øÇJòõF¸3Z1[”¸M¥Q*ÃÈ85&›âk[ýIté žÒíà1E8’,ãpÁ?ˆ<г®kv~Óþù˜Dcz³1ÀTlp‚zsŒÖ©oh¿¼1yo¬—Vw-#¨Ç˜®Üúõ®£Å‚ÐøWR[øne³00mˆÇ$r:kÏÅzF‹cáÝ:ÞÒý ¿¶_°¡‹¹ ÄŸ½Œ{sÖ³ügã´|:Ôot¨¯RÍk# Öì+çŽàžµcäønK¨,mo–æò?·K`Å3nŠð3œqÉ&´.ü¤Û,ÇÍÔzœ5³À€†Ø2W’5_ô¹î–Ú JI^Éo‘D#æˆõ={sœþµ£iã=ú]-`’S¦처ÈG*2W>¸Ïäj(¼q¤Í©¥šùû^鬒ãhòÌëÕ3œƒõ¬ëO©ø§Ä:dšv ,ìâHÀXÆwmbÇ9ÏÌ ãéڗÚև£xKIKûuÄ7rG º³òN1ÓËSûoÛCŒ¼a˪…ê$ÛŠf¡áM~ëGñ5³µ-«_­ÌmöžFÞË×äýhñ„|C®\k£¶hol`óãìÎÜ0'¿j¹‹âI|YáýRòÒØÅao42ìœqæcçh{×WâK{»Ïê–Q¬—›á}rËOðåìºzÝæ}Ö‘Ê¿½Š\ò§8Ü2:úKêóh:ƒ¥´fûSÖcÔe¶yð±FŒ]à œ/ëí[V:~±iãw]¹µ·¶·º³"w¸ £ï t9ý+CÀ𖝫x^Ímaû[Èà< BHˆVö#ó5Šü(uíoB½Œíû$η,§*}‰~5OGð­îàSK‰EÕÔÆhàÂ$F¹=?QÓ¼9®ÛIàÖ(©¢Âñ]´/9fWצ©sàýrãAºÝgÝÁ®ÿk[Aç‚&]ÙØO@qøU{FÖµ¯ß‹oÃg=ýä¼lbBƒ3ÈÀà“· þµ~ÊË\_‰’ki Ÿ=ŠZi˜Ê’Ù ‘Ú»ª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¯}h·ÖRÚ´²Ä²©Rð¶×CÚ¨h>µðæ”4Û®M²qË&óô\þu…á‹_Ü^Kkuy'Û$3J“ÈVu8«Zî‰eâ-ãJÔQžÖp…lFÔSô"ÓD°[;5a%‹;gcÕ‰=M^¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨ç‚+˜^ãI"qµ‘ÆCB)ꪊ@ KEQEQEQEQEæ%– ãp²]¢ÜÛLó¢Hî²6¨ çØ í ñn>u« ’–¶¬É9‘ ´l:©R3žGí+Ä–š¥ô¶")í¯#e0\&Ö(z0ääVoÄËá Ésm ÃÜÊDp¼Pù‹[·ÆŸwãk: EšÚúK¹àiþΠĢ4ûÌT‘íÖ‹ÏipéS”º– Qsm,0– q¿_jÏñÄko]êšlw-qßeØÐÐË0ã·_Ƶ®¼c¦éñ[}¡n¼ùàiü…€™5ûÌW¨°üA,W~)ð^«§ÝLa»¸ec­²Hü²Ã+½}³SiÚ¾‡¢ÜøPûn«3 ¸ÅÔ3Æíä»p«ã893Úµàñ®‰qiyt'•"³‘a”¼,˜z ù›0*Dñv–öÒË™ÖH¦5»BÞpr2μŽ~•£¦j–z½©¹²—̈;FÄ©2œAî Q»ñV—c®.;Î/^`vª2v0O°æ ƒÆÚ%Þõ¬óO ìê‚(±Øpçn2îkcOÔ-µKoläó-æ]Ѿ1‘^w¥oáÿ‹:âÉ-ô–§OŽá¡Rò¬lY‹¾2vŒ]}ߌ4{+> %™Ž¢Ù^8YÒ\ò`1œsV´}~Ã]YÚÄÎV neãù‡ ÀgsŠf¥âm3I¹x.ä‘Z8IJ‰cC 8ÉòªúŒ´].îKk™ä C3$LÉ»½€ÂçÞ¬^ø›L°Õ­´»‰&w(^Xƒ€2p@ÇÏj𯋬߸zèjš ûaË2$w/УåqŽëZÒxã@†{¸e»‘ÍÂ\·yYèXíà{ô«ºŸˆ´í% K‡‘äKÇ´®Pul('hÈçÞ“Gñ.“¯Íu™t.بª>aA=G‘Y¾!ñbèÞ!Ñ´µŠfkÉÊV|FËÉÜ×5Ïiz¥§‡|}âãwusöDŽÞUŒ™&Ø vÇ%Gé]n¥âÝ#LX ³I)šp‹oH|¡Œ¾éÍfë¾5‚Æ}lÖyâÔ¥ æÃlÒ©‡icŒ§Ü šëAÈÖ¼ßJÕ-|=ñÅÑ\ÏxmUmåXÿy0Œ,íßhÉúWe}â]:ÇÉ¥žI¡3¤vñ™Æ:¾nG5~ÆúÛR±†òÒU–Þe޽5ƒ?Ž´›}VóLxïå¢y’F¶®~Oï9^:ô«—>(ÓmÒÕ£inšæ#ãÄú]­ì¶²LÛ¡eI¤T%!fû¡Û '#ó§7‰4ÔÔ‘–O4Ì "m†OîîÆ3øÒÛxK»½KH® –Mþ^c`/Þ*HÁÔQgâ=*þè[Û]‘•™ FU¥Œ0Ù®3ĺ¼7ž*ð´Ú^£zžv¢!•QÝaš0œºÜŒdW¤U SX²Ñ¡ŽKÙJù®#‰K<Ž…TrMP—ÆZÖ¥¼+b²yO'–Ä£çX•9ãš¹o¯é·WWvÑÜ5¢ &I¡T=2¼GÅjzÜZ§Ä/Iaut¶ó‚Êw"L‚2U€<0Èë^‰,© O,®©ÌÌpI¬+OhW…¶]ùj k•yƯêêHå}éÑø¿J{iæ&æ1 BrnáÚ3üj¸É_qÓ½ø£DÔšÂÍ.d'U„ÉkˆÝ|ÔÛ“†ÀÁǾkžðN£¥kí{};ÛÛkÁO#Hà|¡Pg$òp3ÂÓ†ø£â ¸¼kQi žEÄŽ|¹Ü1â½ Š(¢Š(¢Š(¢¸ rÃR¸ø¥¡ê‘è·YXA4m:²`—e³Ç5“ÿž¹«øgĶsÙÉgqsª}¾ÔK"âE¤©8û¿¨®BÒ¼Hš»h·.–Æ &¼º2Èü‚@vG<žjÏÄ&÷Xðœ¶Ú|&{”š)– Àà ã8¹ÍgLñN¥¬ÚßI¤¤–æÎX’!*#ÂìNÔ®Üd)<úÕ}?Cñ4zW„ ¸Ñà´ª³¦v„*\rN~ƒÖøGmO͹‹AÔ‚ÜÜÄgy.Š]a¾uù°¸È¹æºoé×úf™w ì·RDnY­à_8¡—Ç|çߪ^%³Ô¡ñî…­ÚéÒß[[ÛOo"ÂWr3ãi9#Ž:×§xsW¸Ðtë=OFÔí¤¶¸»šiì¥ ,lï¹Ld™Hc‘íí^à«-COð­­¦¤XÏp»Àß³qÛ»o±Œã½s𶙬[xÇ_Ô­´·¹‡QÓRΗ"@-“ÂüÝ}ª {Ãg­>Ê+”:®Š°Ï¤ÿËE=±ÉZï4k3a¤Û[¹Ý*¦eoï9åâI®Æ>¾Õuû›ˆmõHHµH๰•@‘¾bRD' ¼ŽO©¬w@ñ-âx†'Òšk‹¸-£†[bˆ’ª_qÎâÙÈ¥nø¾ÏU¾ðÞ“©ÛÄ–šÕ•Ümd䪻lÚpzÃ?J³â}"÷Ìð¬:~Ÿ5ÜZmìsLêÈ0ŠŒ¿ÄFNH?dkº6¯2xí`Ñ®%mY"ŽÑÕ£ÃíŒ)êÙ9<Õ]{S“EñVŸ8±¼ûBhÂÞFŠØÜ z§å ®}}«°øý¾´‡GiZuòÏŽ]ë×zžAçõ¨üOkÿ 7‡5;Kná´’e™b+¹w¦ùˆã=kïIÖ?·|mrš,ò¦©i½£¬‘Åc*s–àe½;UYô?•Òb<ž]¾ŠlÔÇ$jé9N÷Î|¼ ñ׸§iÚ‰l´O NúEÄ­¤»$֊ȲÜì;°FòN};W§ÂÎð£H›¨,™ÎÓÜf¼âãNÖŸXñ­ÌZ%ÉþÓ¶K{G/ÜV2§?7'?Jdz¡c©iº½Æ™¨L¤%…ެÀI¡ëà ©ç¡®Ïš_ö?‡mì¾Ê-U ²À$/å©b@,IÉÁçߥr7’ÜEñO\[{nš]$Êææ0[?úNpH¤’BÅ0H ƒ#¯õ¥ºð¦·,ž{ŨC©"Û¬sZJ¦†D\ùÈN8 ŒãµiCáË›;ÝvÆûN½Ô-µ[Ï´,ϲ2Uþ`F1ùb —ÃzŸü$²ê6ÐjV·QŠ’«[M°IùNÐzrxª¶^ÕÌÑ›q¨ØËsÂÜA4íáŒFz©ÎÞ½M£è7šf§ÜYêê:e¼4²Ã˜ÊRÏž02jªéºä6^´:%ä‡Cºk‘UyJå9äwÍw6 ¿¹ñ®£¢O¦ˆ­màI¡¹nßž0Gns¥gxúÏQ»¸ÐZÏN7vð^‰n$Vš 7zšäçÐu÷ðO‰4c£Ü³]ߴЩ*K†>wnç 9÷­{ýQÖüS­m²º´¶»Ð…„w ]ùcëœrOZ­Ÿ®Gªø"FÐn zÖÉç’ÞG¸É+õ.Þ¤ÿœUª(¢Š(¢Š(¢Š(¢Š(¢Š(¯7ñuôš'ÄÏ ÜNò;K¿8\Ûù¬b;SåÂù?vvþ$Ò.tû›øïcû=±"vpTÄGfd¡ƒÅš=Ä7’%ăìh$ž6ÖDSѶ’¨Ÿtù,ã¶»w7ŠZÜùÔƒŒ`zÔÖ^+Ñõ ô³·º-,…„E£eIvýíŒFÄÒëÞ)Ò|2ɪÍ$ÌÛVA º‚N$^õ^OèÙOw5ãE _2R™‚2J|ú¾—­}³GµÔ¤KÕ‡Ìad‘³Ea|;×âÕ<¦Û_jRͨ͆y Ç'8n„èr+ÒæwðLj`½ñMÞœ Ö¤·†úV22"•ÂgÐÿZïÛ^ÒífKF1s„O˜à–lcÛ'#zãü;®Å¢xŸÅVšÆ»#ÛAu[}®]Å@ÇžÃ,9®ÓP×ôÍ-ãKË´¤]ê,vެpÜñUu­KO–Ãì§VkY.aia–Ýþ}£ÀààtçÞ³~_]ê^Ónï®d¹¸>éd9fð­¯۽χ¯’;©ídXYÖXk)Q‘Ïá\ÿÃßÛj~Ñ »ÕãV–ÔI"Èÿ;ž§ê@­è¼M£Ïª2+øšì– ?1_¼èHîr¿5ÈàÑ.OÖ.­5 I@·bªY™AF8ÆpsŒçšïc¡\“’£ŸÂ¸? ëð麯ˆ,5mqäH5©½”bœgÓqÅu÷ú晦H©{y,Ë» z/MÇÐ{ž*ú:º†RHÈ äXÞ2Iö½ xœFêd«ÇÒ­ßëZv˜è——QÄÎ *œ’@êp;^•«xÛKÓ5ý/K{¨7^nwbIØr§SNñô×6ÞÕo,¯'´¹¶·y£’äÈéVü?­Zßiv¨oR[•µI%'‚xnzŒç‘ÅX°×´ÍNGK;´••wñ‘•þðÏQî8¨àñ.t³47Ѹ… €yAÕ—˜{ŒÔV>0ðþ¥5¼Vz­¼Ïq‘R~r:€}xÃÒ¹ïëëý¡ ÿdëÊÚ´6³ÇˆX‡Œcjô eH"yeuHÐfc€êMc¿Š´saswôlG½² ð~éä ‚z•Ì|<¾ÕuæZ›][«i­Ò,±Ì3—$c°xÅ;Ä:­Þ‰ñ;Dêó¦—wo3MjØØ $“Ò»ÖtåÓã¿7ý–\yrîá‰è©öëXºæ¢—£>âk]>7» ßj^†1ž‡5§'‰´8e–)5{$’È­:‚Œ{x5jûT±Ó`Yïná·Î¤pAëIk«é××/mk{o<Ñ¢È銩èN;ÇñOŒ´ÿ Ëa÷-ÅÕÂ&Éc'æÀøÖ׈ô‹&‰n/âŒÊ‚EÉ'å=úsY^3Õí Ð¯a‹V’Îù-šâ&€üÃíÏOõ¬Ý+PžößÁ²ÏâAmq5¢É=›€Zô´`õ>‡'ŠêÄ\z‡ØZò1>ÿ,ŽpÚ[ olæªÉã/ÅÄ’jöÊ–î#™‹`FÇ8Ó¡«~$Ñì&]_Å•Vù³Œ7Ýç§=…jÑE1dî€0)€Iè{Ó袊(¢Š(¯;ñm­ÅïÄ ]ŧÞÏo¦´q"[±EÜ£i¡çÓ¥gM¦jïeã#@’c¨Ü$°Cr ,¨Ÿ½ÔV4 fßÇFäéwBÂêÆ c-ÊŒª mÁ€?)Î01Vü7á=BËM×´éı™ítÉû‘?Í‘ø°ð§á­Œzž¡¦jË{¤6wÉ.Ø" ¹HûÀñǽi|\ðtËóIÔm@Oï~ðqXZç†õ_KâÝNÞÎâ¯4èm­­ä]¯+!Üx?—½héoqãÆÔ}³è«n’K?x¬IÓÐg­eèšFªúGƒ´¯°ÝZÜiW†îõÚ"¡P8£ÝŒSéMÔìuðg‹-G¿óµ Q§¶Œ@It,§w· zÓõ=/R¼×ç¾²þÔµvžKY-L–÷,ª‡-‘û¶3‘Ò¢Ôí®eOˆŠ4AçÔURЋG>n#ÛÁÇMÕul®añêWI«%î‘ ¨6Ö¥Þ7L†”©+œç8ý7CŸÃšÓN,5 ‹;lí¢aæ¼n§î9.sœœ <7¯]øCáŽæèWÒKÀ¶¸„¡ŒÂÏÍÈär:w5ßë²ðþ Ë²1·p©f%Hד^iáËK»{o‡¶ÃH¾†K/ÚËÛ:ˆËDËÉÆ9cYŪiÿØ×ŸØš„rÚë3Í-¬p6ÈÇ †#-»ŒœãžÕsWÓu{ëº;é7ww³jŸlGŽêc2+n ÜÆ:þë–Ó lâ˜$Šmu*ÃŽã±ö¯%¾´¼—@ñëC£_µÎ¥|>Ì¿e|Ê€.ã pÕ¡>Ÿ,^%Ö'Ô¿µWNÖ, Šmld8T!ãa±ŠsÎ:×yá›94ÿ iÖr$ˆÐÀ©²WÞÊàÜŠó½Z n#ø³H½iµ-YÉ™¶ÆŽ?½ZegÒõéu[ë{©­¯tH­¡ »$‹ÈT ‚sžERµÓ5oGàù®,繚ÓO¹…ü¸Ì›%p¦4lt²xâºïÛ^^ü?Õ­¡…¥¼šÍ£Æ2YÈÆrú6£âíWL†âÑlô)¬äóch•ÔÎ3¤äp8 hóëZDöÉ«&©•5¦ë„òcš06çhß–'Žjæn²>‰q%¾¯öÝ.ÒH¥ŠH<´ˆÃ(Â3$ O­bXØÞ[øoÂVí¢jÏe«µÕÒ‹VÊ&\“ï÷—üŠí¾#[Ý^xBHm4ßíy¢ßÒÅP0%‚‚ Œâ¹ks©Úßø­ŸJÔf‡P¶S½¹,àE±xXôì)Ÿg¸m/áìrèú€þÏ‘Zí~ÊÿºÛߘcûØ¥ñVs¯ªÚiš Ém&ŒÖÖ­gË+1bQEœô“Ö®hòjW3øieÒ®íü«)í¼Ö·aå|Ѝ[#ŒÆ°ä¶Ôì|3ám.M"þk'WI¯dKfp;Êqóg9â½Çvºç€õ+M3x¹žQGÊÌ2 ^}FGã\ÐêšÚjö–—igg¢=¬ªÖî­$¬F);qž=k ømçEàM2ÒæÖâÚæÚ!±ÏC¸zg¨÷¬ÿƒmñÃzœÖÓIgkop%–8‹ˆËm œî+š¶Ñõ›4}Vä]ÅbšµÝÓÇ;žÞ9så¹LœçŽ7UÝKN†×OÓ䲃T½IµøïÝä¶bBŒopª£jú2yªÚ¼}÷Ä?³/ZKÛ(á´o±ÉûÒ# …ãûثֵa¡]øFÿR”ÆÖÚ{©Šè YBœd˜ϱ­ï†Ún‹†/´ë‹[Û¹ ¤÷PW/åóÎvi|~’Çyá«å´š{{MHIqäÄde_-€8œd×8Ú}Ù×uù5ÕÔ¡ƒ[³‡bÙÛù™ ´_tí`O¨ëN›M¾Ñ'ñM¼–W×ÑêZlQXb#!;#*QˆáH'?G-É·øwÿÝE>Âqt £þçlù¸ãŸÓš‚ëHÕ‡nü1å\6­q­ý¥.<¦Øb2‡ówô¦sÆ*?ÛßÙ'm²o®%Õ OlðÀÌŽ¢5 wŽ0xëNÖa½»¼¼–ÏûNÕÚ+m–Ïfe‚ñ•… Œ£r1jô Ü]ø®óC}"ê(í¡Y>ÚÃ÷R”~¡®‚Š(¢Š(¢Š(¢Š(¢Šç<[áy•¯uwmcn×sÇ+÷¤‘‚¨üMV·×4«·Ùo¨ÚJÛ<Ì$Ê~_ïuéïRÁ©Ø][{ÛyKä¨IU‰Ç\`Ñ¥c7›åÞ[¿“Ì›egמ)ƒWÓY‘WP´&O¸Ë–úsÍ!¿µ½3ÚZj}©TŒFêíõÛ\Ï‚|I-ΓvuÝVÙ®b¿šÝB‘T8V•ÕÐñ>©,ú唺bBž]¢•nÃï3ŸO­kÛêº}Ô‹½õ´®Ë¹U%V$z€ êv0]-¬·–ñÜ0,"ib=qÖ¦·¹‚îžÚh找ëÆÁ”ý©h¢Š(¢Š(¢Š(¢Š+È>2kvŽŸm¤ZÎ×v×ñµÅ¼p³aG''¿­Yø>‰/€®bÑ,D—Ó¢VÞÍ·gøxèjoêvº‡‡¼2m£º•íµY%ÖMѪX‘·Ž¢²&–ñµö¹²¸yö¿™—shIoŸHäÀÆO½VXÅ;ÜjÇð²È¹ËÜÄ{dWKðþÑmâÖ%‚âæâÖæôͳF#W$|Ųçó¬½hÿfüG»Ô5fÙòé&+Fq•gæ_÷Zæ´ëo±ÞøzÓEæëÌ‹vÐˈCœv5ì×-¬¸àí^)¡ÚȺ„4ÛH^ ^ÏTk›ØÚ2¯ ¹rþÅH×56¡ÛkñLúm»®·ýÝ͆TÆÊB£Ž'æµü-iow©hMòK%µ‹ÛÜÚCk³b•O;ºqëSx#G|š­¾¥kÚhSOoi+®wG!ßž”øšçtÈ¡o‡Þi­³ ¦¼Ïq¾ùq—å†8+ùŠè¼uoqý•áÿYX/Úôû…Ͳ®7Ã'É·§úWsáý×CÒ!´µ·H7HusÉ'ד\f¿=¤t¹UAhôÛ˜æx×ä ªHèH¬ïÃ{c¯Ù\ÉyõªXÈ…ÔÅsj˜ @8n€æ»ÿ ø–ÇÅzOö‚Ì‘ 2³&ÆV¢¹]BæÁ~4id÷:hf`½•*¤ú‘ŸÂ¸™c±·ð¼òÛÃå^?Š ±²ÄC,"\†p›yôæ½ÕZ;˜ ¯‹‘Ü0"¼rÝí¬<âý0Ù4W²Í}¹„Rß»^™;³À†¶4Ùl­ü]á–ƒÝti#ºp‡ øBøå¸cƒïXTnÞÒm¡ºm:x¯¯dMk¾$R牎V?ã^‹ðñ.!ð}½½Äq«A$±«Ä¥RUpê@{W©ÚÄþ$ñ…§ˆç¹‰uáM9 ûòD þî3ƒÎî£Þ²µø¥Æ»Z]ÛÈ—VDFêÒ³,{3(laT8êEkêÉy©j7WöÍ%¿šöòÿgÝÚï[’¡H(øÊ·AŠ¥qa-ÂøŸOÕïÚÛRŸTÁ ß<±‚¦1ÈÈàns^‰mâxßÅÏá·±»Žtµ péˆäõ…a|Z†ÚçÂq[L›ä’îP³m)r1ÓŠæï±¿á"ñƒ,H-HmÇ”v6°;F>÷ÜUá »ðÞ««ÍÿÈô³«Î2ä¤xÀÖ,Ñl-§¼[)¬Îõ±’ÊvFÇFÀïùVÄEcâ&òëJ‹í2h¥¼ wÏæÁ#;‚€sÔ ôýR(æÒ®’TVCd0Èè{Wøv(çðç#Ò‘~ÓÃO~vr°mmåÏ÷H ¦ðö…§ê^×nôˆßûrÒâõ­B’¬‚MÁp= ô÷æµt¤µÔ|OáH4€’[Ûi’Ǫ"•AU$ÞÝž½Iá\Àú½²‡:+Ï›+Æ &Q½Oü?ÌÒ ÚZ/U±¸y5EÇÏo0Éß“Œg­fhú„vÜ—öq^i‡Uºù ³ gl¬ÜŽW{g5ؤÖ-ñ[œ¦ë[­0Æ|¹q¹˜g?)rþ†Ö-7À m[Ä¿ÜíB‡ûÇ:u©µ‰4ËË¿é²jö0\_j‘Ê·¢¼(„+!\îþŽÄ5wO«i> ¸Ñ4 2á Ôea[®èã$ä³÷'5×QEQEQEQES|´Ý»jç×ê(¢€F 0hÆF;PCuýh ƒKI´g8çÖ–('¯ŠR29®6_ k—~*¸¹ºÖ–]Iâ¸K2§rÇ ;`¶ úWeI´g8¨®b’kic†c®¥VP¡Š\µ—¦A¤Ù h 7Ì]äs–‘ÉË3RjæÑœàgפg­(¢€F -!PH$)h¤Ú ÎGz£m¤ÛÛjW:†d’êà/#gbŠ£°ïîjù¢šQOP1ô¥#=h*aÅRÖ!¼¸Ò® °òĈQLäíà“Žk+Á%÷‡¼-i¤_µ³Éj¾ZÉ$:õÉÈ<ô®ˆ*®pÏ ¤XÑ *ª¤òp1šP1H#EbÁT1ê@äÓ©1Æ;QŽ08úW¾ »K[‹GƒG¼2³ÿ¦ÞB^f OÞõ uôé]v™`šf—ibŽÎ¶Ñ,JíÔ€1ŸÒ­ÑEQEQEQEQEÆ|Añ³x2ßJ‘"WûUâÇ)e$$_ÄÜtê?:ìExÄ€„nÚœ¬­÷H?CC0Q’@ô›×Ü0=ë+[¹Ö “O=µÂIp«tÓI·Ë‹»/©­mà ddö®VïÄZ•¯Äm?ÃæÞØØÞZÉ:Ê óN öêksWÕít[5º»,#iR 2K;ó5~¹OxƒTðëisÙÃk-­ÍäV³ woÛãÕÈé@ ô4´›†HÈÈë@`Ý?JMê{ÎHHj˜ÔíΰÚX,nVpF8 [hç× ÕÍÃ8ÈÈ®SÅ>!Ôô=gC†ÞIlõ Ä´“~ï1 É$cŒ`WYTu}VßEÓ%¿¹Ï• Œ’H ÷É‹6¿¨ÃñËC1[ »I.AŸ0À öêk§'iAÈȤ9Çk„Ÿ]ñL>7´ð癥Ÿ´Ú½×Ú>Ï'ÊãnÝý}ó]Ð81±ùÓ©7 ã#>™¥¨$ ˆ™dAϘ¬9>„çüS®jz.£¡‹Tµ{Këèí%Þ»²r8è+§Ï4Rgšãuk_¸Ót-1/M‹À.•Ž dü§8Tdžz×bÛŠ¸ Ž3Ó5Â{Å)ã¸|6òiX’Í®Ìë‡6ݸÝ×ñ­_ xš}O[Ö´KèbKÍ)Ð4“²Eq•8<ƒÇ"º]ë·vá\×7ãoRÐ<<Ú¦˜-d0È‚DXîV`¼F9«Ñ\kOâCZÛì¡„ûÿxfÏÝǦ+_p9äqמ”¡ÈY~ët÷04‘1lm”ƒëšã,,tqâÍÀÞo´¹ÑL÷ˆ×$¬ÒŒa›ž¼š‚Ê÷í~ðUÄ·Žó¦´° S¸ÄÆ<ð­]Õ¡¾ÕutÚJòjM¨ÅŸr¬UbJ‰7A‚#©«Wš•ŸŽü9£µÔÒCtKM1ÞÀ²œ¿ ®uÄz¿‚|2u)ä¸h|CöPÍ;±yŽH>€s^¿áË‹K­ ÚKÞ;P"厊ç$œçÎk–ø®#}EŽWdõ›`ì§ œœý+’ñ¥¨éW$°ÑËÇ£%åŒNèä,!ø”þ~\‘Ó5Øø^ÞãOñž¡oÕ °šÙ%[+yZQ ƒÙ »ÓÚºz{»oê3Ø®û¸í¤xWË…$~µåþ …uC{jt®—ãí$·e”–Þ¸ÀÚFyéNÑ-t[ˆMhei´»©^ãMË”3.HóžT Žj†£ikeÄ6·‘’æÆxä°A!Ì-±NPvË+D¶³®^kÿmxmo­m`6Ò\\<_eÌAŒŠ üÙÉöÅ>鮵ûßêêQØÏgclÖ.HÃ&ç•Tã’Ùê8-¡µ¶ñΫ¨•š{åÓlþÌÌÌ­$Ž®2S?LŽÔÏ ®¡6›¡ëv÷V˨:Jnѧg–éÊ1(ËŽ °éۛ͜ºg€ïn.öΨ$»go™ˆß»vz`à~•ê¶¾#ÒïuûÍÞä>¡f‹$Ñm?(=9èzιO‹v6w²–ê2ÅutVÜ@PÒ ÝñÓ½R¹F¾øáûKwQ§¦›tC•,Š1œäŒƒõÅcÙêwך†-A>›.§s ÃM) Á¼¤väí>ýpwŠæÕµ‹Ynàžî÷@1uXdǸŽqúfµ¼Q­?‡|9yªÇg%ãÛ¨"þóäýk’°¿—Vø§¦Ý cûˆÉ `vpB;õü«T½¹}3ÆZ…Éd×,µšpçDDa£gŸ\ÒkÒ$røãûBiai–÷!™—l¥%½ééA°²Ö…¤HÒÓ,ØÈâGÌ w0îxëÏZŠÏDŠß[»Õ¤u’êu)$c¢ûœõ'Ú¯ÜÚÁyAs sBÿz92Ÿ¨5YôM*M›ôÛFØ¡W0¯ 8銉¥­¤–ƒN´Ò¼BÚÇÜcbÒÎÚÂÙm­-â‚û±ÄT~¥’4•$PÈÃXdPÚXZX!KKXmМ•Š0 þUºVŸ5ê^Ëen÷I÷&huú´—z>›7›wam<› {ä‰Xí=FOnM6J·0˜tÛHÌêŠÀ §ÓŽ)ï¤éÒK$¯ajÒKþ±Ú%¾§ÐÚNœëµ±s0®#ÿwŽ? 4-"5 š]’¨bàï§§Z•t»¸K…³·&vÈ#—''Ü’jÝQþÇÓ´?´>ÃoöÏùïåý1×éK¦ÛÞ5ä6±Ý6wL¨sž¹8Í\ 0Á²×Ã:Œ.`>–Éþz{+[›_²Ïo¶øÊtp: *Ñt¶N´!Ô#~åy ›#G§Ú©Œ’…aQ´ž¸ãŠ‹þýnß웹Î>Î}zT¶úFi;Ïoam ®gŽ%RÀõɈô6(¤Š=>Õ#åÕaPú‘Ži¦,±Êºu ’2 0A\tÁÇ,:}½Ä·ZÃÒÿ¬‘#Ÿê{Õš(¢Š(¢Š(¢Š(¢ª]êV–W6–ó˶[¹ P. ÜÁKзEr¾4ñ6¡ák[[Ë{.­dž8e/1FRì``篭^ñ^·yáÿÜê¶¶ xmÉ,M7—„$ƒƒ“íQYø‚úòãFèÓ[û_´Mt·8)õ'5&­â môk«ÝN—VžÞo!­âm¤°8l;VÔNÏ ;¡Fe©?túSè®sÆž&ŸÂz(Õ#Ó¾ÛÈ©0ld B‚89äÖ¦©ysg¤Íwkj·3F›Ä-'—9?6jç¬|gy¨økAÕí4+‹ªJ©$q>~Ì„]Ž9ØW5¨xžçOñ¶• ¾šßQI wbnAE˘úwï[š…ý¶™f÷wryp¡›õ žäUsEV=þº#³ÕN„^ÝéØómËù|í ÄcîœÔžÕÿ·ü=a« î(Œ¶Jç¶kRŠ(¢Š(¬¿jW:>‡u¨ÚÚ¥ËÛFÒ´o/– “Î Õe»¸¸›^œÅu| VV ¢ÿܺÕ+»ÝWNÐ.•®ï&vÔ.¡T’v`ÁbS“ïÔý* ÜÜéV~_NÐê6ò$¶îùR«äÀìF#¯5&•¨x‡PҴߤ̓¾¢Ví&¹ “æò•;0ãóõ­‰¦êßLÓ.lµ+››P‚ñJUJ»s‘ÐÖ¿®êÚx›LÓîn%†Ý-<©å”»Áæ®w7·<ô©õh5M;K×Àº–ÖÄé†êÜöy£™z°n»NGê)níµ«#N¼‡U¹¿—PXØ5É…¤+.óÁ9gmC§ê·º­ç‡ôKÉua–{¿¶‰d))tÉH‹©è‡œUµMRúÚÆ$¿¾añ+é±ÍÄmù<ÿxŒc'=*ìúý톓ã+#«OÙj1[ÙÌû¥o vg œ’@9ã=j{ JAiã:êw–ÞÖØà–s#)hIq¸œã>üWaàâÀz)Œd ˆð\7‡¦Öõk'Å ªù3M*ÞC,ŽG–•aD.xã=óIk¬ê0è¾ñººžÿTÕ¾Ïqndmž[3©@hœgŠ­yu©éz7嵋æ:^®Ú+ÎXÝCgï¸õ®†þ«^Û.± «éjhcŸ>â_AÇoñ¬›_kµ‚-&i¤S†Y.¤ŠO)¦hÇÊ»¸ÆzœuÅ[Ô ××Á—…õI­õ[+§[5†è»L„‚‘>:±Ýjµö£<Ÿ ç×´ýkPRÌ’–iŽac V‹ #õ­ CR¼ÔAÑHh k ²i¤p"ÛP“†#ó§ÞxWCÔ-ímî´Ø$Š×" €õZÖ¨ŒFqÆ=+ž>ð±d?ض£dÞzáHýG?§J’ûÁ>ÔZf»Ò-äi˜;’ËqÏ^¥Ksá= òS-Λ ¬Ðˆp8dß¹¡<%¡G5œÉ§D$²]¶Í–ýÐôñPÿÂá³Ìm¥BÑܹyQ‰*Äœž3Ç'Ñnîín¥²_:Ö?*FdòÓÐ`Œ ¬¾ðÚY-¢é‘ˆVc:üÍ•õ`ÙÈ&šÞðË[\[*%†âU–TFe ËÐà1×µ±6•gs¦6hŒ–…gn@ìNsYƒÁ^–ÖƒMAom'›AÜ,oê£<à§ð¬óO¨\^Iâ‹mB[‰$Ž 2cö|çå*NG<’9ÍwV^‚úÇKº×­’ãW¶·TiË«cæÁ¹ô©Gƒt°¹²]9µÌ¢iP3s 9œä6yÈæµm,­ìlã´¶‰c‚5Ú¨:cúÖu…t}:ñ.­­Š¼[¼•i’ß{b“…ϰ¨$ð?†åI‘ô¨™'—Εw6ÿ¼FzÖݽ¼v¶ñÁ íŽ5  ’pNMf·†4g¸¼œØF%¼R· ÁÆzø#®*1á ZÁ—OMÍ®‡“þï5$^ÑáÔüvJ³—2cslˆ&v†÷ÆkâMµÍö•¦ÛÛi÷W…u'‘ax£Ùü?:èlô}3ìF¶_º¼PgIÁf|Œa÷dð8ÁéP/„4%°šÈéñµ¼À Ù›p$çÓ¥K7†´yìm¬å±­í³ä)'÷yùNr( é§¥‰³Q9‘v± ¬z°`s“ëškø[C’ÞÖÝôØ V¤´ WîÔ~µü!~1ÝFt›r—dÁ÷„‚yëïÖ”ø7ÃÄȲmó,b)̃±çšÓÓôëM*É,ì¡Xmãá#Rp¿LÕ hÖº£jPX¢\–/NÐÇ‚Ás´êiaðÎoªhÇd‹r²¶I Ç«*çžä ÔRø;Ãó‹.•nâæO6`AÄ×qäÔ’ø[Ežñï$°ŒÜ<~SI–¦1·ƒÓÚ‘|)¡®™šš|kiù‘F¤-½Tç+øR?„ô9¨k?ebÐüÍò±ä·^O¹æ£_xul§²\_f¸q$±e¶»œ‘ž¹æ§¾ðΑ¨È’]ZdŒEì7 þÁù‡±Í-džtk«ß¶Ma\ù~P“$6ŒM¤hznƒnöúeª[BÇq ÛŸ`zS5MLÖZ6¾¶<`ª¸b­´õ\‚qÒ¡ºðž…zöÍq¦@æÕBAÁPã¥i]ÙÁ{i%­ÄaàmdÉ…c§‚|6’´©¤[,Œ0Π‚ßSžjh<' ÛiÓX[é–ñZÌþcÇã/ýïcïW,´›:Ñím-Ò8\’àr\ž¤“É>æ¤Ø.”4±iØD~P€®Wo¦)ºn‹§hèëaiÈÜW«c¦Iæ¯ÑEQEQEQ\¢xºå||¾¹Ò–ž ¿80‘ýœqù×WEQY®»ý—©i–cO¼¹ût¦?6Üàg.{ žÿT–·oÚî-cÞöѸ‚2:ôെµÈüKáÛ-b(ºMâ7 •䎣éZµÏøƒÅ–š‰wª¤ßCfå.Ø©1‘×9#§mÚηVÜ*•YQ\Ô3RÔsÈñA#ÇL꤬j@,}2x®SMñÄšž±©iqh7©q§ö’òÄIRT»œâ´tÝk…¤mîÊ×dóÈ„Iƒ”)'¨5½EgjÄ6:uýÒG%ÓX©2AÜùÚh¤ùÔºV 5]*Öü[Ín.#yS.3ØZÌÅ Þ3o ˧Ï¿f71ÎYJH€ÆG'½o×+â\øzúÖ ´9æŠòå-mæIÓíÓ œ×ò«Vþ(Œx‚-Q´{+ùâ3[‚áÒUpøô5ÐV6±âôÍ'íöÖwóÄ]šïmÛ¶ŸÈƒŸ¥iý¦p-Ì‹ç”2óómÇÔŠ¡ k_Û¶s\}‚îËËáÙt›Y¶Ÿ¼¡­Z(¢¹][Ç6º^´4ácss¶h`šHFDO.vŒu< ŸLŠê‰ÅsPøÆ)|Uk I¦_[Ü\C$ÊóªªíOLMijšÜ:lÖöÂ)./.2b·‹ˆyŽHSI ëö>"Ó>ßa&胴mœ|¬§qÇâ*¶â«F^á7%®™3C$ÍÑö¨b@ôçôɼR¶W–1j6ZA} ŠÞvu`d#!XºMtR1!I'Ò°¼1âaâ5ÔA²–Î[ ¶µ–96XríÍYƒYyüIw¤:éÞ”]²â)  žäU^úM3J¹½ŠÕ®š/å+…,^O¶MG êñëú Ž­ Mwp¬ªŒrTÆ´h¢Š+–Õüm—¬ >=>æð¤±EpðŒù-.vñÔð2}u4QEQEQEQ^wª¾Ïºd"ªE£ÌÃyÀw5“¦ø·W]K÷wzk}Fâh®gdPHhòqÏO­Z‡\ñ.½§«i—iصQj¶Ò:¤B#s6FI9õÕx‹Ä𮹫iÆçΰ¿0ÁhÒd¸ç$dçéŠôø˜ÝØ#’bi¢(FW#±ö¯¹ñGˆ´=JâÒ÷XÔ$M+SÙzÄ/Ík&<¶û½yý+²k­sH>ë3>¥}²å&Hþã!`¼/lÅUðè–øÊæãVºœ­É·H¥VB!Ü ØgÐVOƒuWLÒ<Vñͦ¡$–ÒÛàl •#¾r3Ÿzõûˆžky"Išu H€eO¨Ïâ–®mþø¨ÜjW2Ï5ÞØåÁÈY@-'#<ý+ª·×õMYû-ÍѼ¶ j-FÇBÕÀÎ0{Õ]_ñ5ÊøwU"æ{mHÿ§ |µ†0ÿpÅÎxéß5êẳëñø«Ç×:8ŠH­eµšæéãTÉŒc±Ï®1^…}ãKxþOâ­*5™ÓÌŠ!ÈVà`ãО~•“k}â0ÁL÷âÒçLyÝÊÄ;…†ÅTŒñƒPx_×Üx2KÝHÏý¹ ¾z"=ÊË׎sÇ4Ï B=ÆWé­]›˜ï®„eÄgæFîú(銎óÅ @Ño1}9›LK‰å°HähåoâxÈå>žõ76µñMžÒýâI¼;曨”æAÈ 㨮§À:Õ׈<§êW¬­s*°vUÀb®W8÷Åa|R–T—ÂK"–Öáq‘œÕs[Ò%Ófºñ•üâþûK²—ìpG—|N2I'§^•OH¾ñÃé2»Ý›MFÅžêâFˆå*Z!“ÇQŒzZçl/õ +á 7öšå×ÛLË0 ¨~VŸc»È$“ëšéBJ~*_K6­u1iÐ2¢íÛóÈË·IÆ@>¹ïYqx«ZƒE6ÍxòÜÜxô´»d\Åâ3ÀÆpu4ýo_ÕôëOiðjM"nmnØ+?Î9FãŸlàÖ¾‘ªjöþ;·ÑîïšîÞçIæ"ƒ›°víŽ{滇;Tœg8¯)¶ñ^¯'†m|X×3´—:°µ6lXŒ…ŒîúÖŸƒtˈü}â·—Sº”Cqäp˜”˜†°£§lb½¸]PŸø\ú=—rA÷Ü* «{뿌’F.žÞÝta岨$æC¸ ‚:íÏáTü?ªj7>{ m å† F{[—°Æ$Dn Q–'CQx'ËÔ¬ü[¦ßi×XÜêt¥‘V*£i!¸`=2=éí¢Ú²è–2ݺh:eÔfÖ'˜Kq{1o”žx@Nq×µzD7–×Ë3Å$²"¸%¡«‘øw©èúmžµc¨Mokis½‰HxY€'NFGëXÞÔõíW_¸Ó.õ{´’Îçí ¦(ÿ{jÊ `¼OoCYbçSÑôÏë7ï[ë…’ Y2c #ž8®‡Sñ þ‹âOÊ.%¹¶´ÑRö;WÆÕ³03”T6¯®´³Ýê‘Íc¨hòK0’O™§)»÷kŽYÞ¹Ôt‹_E¡+Ûê1f¶8(G¹Hã ñ×5êðKs§ÜAíÒFÊ’§Tb8#é^+iâ_G‰¹ÔõwͦÝW?lËyxù{ñùŠèüM«Ø]&›µs$–zCÜÌa!dÄŽpoÇ_je߉õ{íJ¹²{»©?³V[¤Ó™|Ȧ*§s)ûëÏA]熯´¼1¦Ý™šV–Ý H˂͌G®s^n—~Ö¼{ªAywy=ŠÄÁ$ÚVF1p[¢ç·a[­y©A­išIÔîdUÒäšYÃñH éÇçúTãñ§a¤ë·ºô—6²ÛH³[È>óo!Xqè9¯E¢Š(¢Š(¢Š(¬ü¡]jçUžÍ¤½*WÌiœü§¨Æqn•N‡~†ÖÚÜZÌÑÚ¾øÜ9òýBóÀç§J°|¤hËx‚â14‚Y­ã™–c È8'R\ø;Gº¼šáâ™<÷Os2G3î€àûú÷­©[ÀYcf8HÆOР͸ðö—~o$žÐ3_üýÜÙ÷sô¦jþÓµ»»;›Ï´y–o¾.w@ë€qšŒxGHÞ "”Kw“*‰X!b»K`oëUcð‡â[%ŽÞuKßl‚êLDޣ殞¹gø{áé-¯-Œ‹{¶f’%¸p¿3n`xòqVaðn•§¢¦é® ‹ÈB÷.ÃËþáò>´ÛiuÔ3B.Y-ؼòNÍ,{ªg©Ç§jܺ·[»Y-ÙäE‘J–‰Ê°úÐ×?cà]#N½»¼µ’ùn/mÛ·c/É Ñmìg³ŠÙÄ3Ïö†ÌÎÄKœï’CgœŠWðŽ‘6™waq³ÇxÁ®^I[̘Œcs“ÐqÓŠl>Ò`Ö-õhÅ×Û ŒBŽ×R7È?„‚pG|VýaÅá-&ñt‘H17ÚcyK/÷ÂtÝOÓ¼/¦iZ¥Î¥h³­ÍÏ33ÜHáÏ©‘ÇoJÙ®~oh³ê ¨I íxªUgûT»Ô ÜaWµ ÓQ044rÀŽhe(à£pê)öú5•®’4ËxÚP¤b7enNIÜrO|æ³bðF µÍ´v’.ŽëˆÍÄ„Jxå²Üž5ÿ iÚ´:¥¦”‘ÞBÅÒO1Î '㹤ð׆?²õíkZ–íæÔe¹ŽBã OÌIþ#œñÀàWA¨iöº­„Ö7‘ m§R’!î*8t«;{Û‹È¢ <ñ¤N㺦vÃ&±[áÿ‡ÞÖæÕíîZ©<éÑ®å"Gë¸üÝz~UjÛÂ5­ü—Éo#ÜI‘#Ë;¾øñ¤AÛ?èÖI*G ¬@«$ÎÂ8Ûª¦OÊ>•ü Úú-%`ÿ\\H<¯÷~n+£¬¯øG4¬ç싟¶}»©ÿ]ýê‹R𦋫_›ëÛ%’àÅä»o`?ºÀ0úÕ[oøzÊŠÚɡ؅ã™Ã€NHÝœÿú‡¥nÚÚAei­´b8"Pˆ‹ÐY6>Ñ´ë»Û˜ ”É|¥n|ÙÞA éÈbGN(µð–•h’ª¬îd‡Èß$ìY"þâœåGÒ¬h>Ó¼7jÖºbK»ˆžfuO÷C޽«VŠ(¢Š(¢Š(¢ší±°NpI¬_ø«Oñ?ÛEŠ\#ÙMäΗÙ[Ó·(¢Š(¢ŠÅñ‰ôÿ Ú›En¼€¥ÚHmÚE@8ùˆ{Ö¥¥Ìw¶pÝDG2]Ãddv©¨ª:Æ«‹¦K<7Åˬ—`;œÔš.¯m¯hÖš­žÿ³ÝF$xÁÁõ~Š(¢²õ­~ËA†).Ë–™ŠEk—rcì$ŸJ—FÕìõí"ÛT°rö× ½ NGÔUú+2û]³Óõm;MœMö‹òâ‘–_”dî#§ZÓ¬sÄvÒ[Rº2IÊ"ÿGO1·ÛŒC×éZÊÛ”0èFy¥¢Š+3Äí¯†ôiµKÈæ’° ›˜äÀüjý¼ËqoÊ,ˆ žEIEQEQEB÷PGs»Ê‹4 ”Œ·ÌÀu {dTÔQE6I(ÚI*(%˜œ=kQñeŽ™­išdÐÜ–ÔX%¼éb,A8ÝŸA[ÔQEQEQEQ^pº§ˆføÁ%‘†Ímmì *™Ûý[8ùÏ{ŽŸ­bÚ꾌ßuM5áO±ê&R’Æ_ΗÛOZèuOjwZñÒ¬í|­=.ÞHíŒìîÿu0Àã“]?…5KÍgÃvwÚ…›Ú^:‘4.¥J°$n3\¾¥ã Bâo]XM¦™ ©YdxÃ5ÌÀd¨ÏEíë“T—ÅÞ!¸°Ó´ÅçZ–Ì^Ý<0ƒå«‘9ùG¹=4ÛŸëö×ú•­Í͵ºÛY}²Wû2@ÿx¾2lÕ»ï_É¡h–¶èãZÔ-„óˆ#ÞÐ(P[ Óq$žrzTRx—Å)¥é¶æÖ[«Û7tVˆ*.ä`~\3Nëémwжµ¹ÑìãRe÷ÌÀ•‰{F2}øª~!¹ÔuÏ x[EÕåouyÖâô*í ¼aí´W¨BÑ´(Е1• ô#¶+ˆñF¯âKi:^•ujaÔâ›Í14jwgœç¥dŸøšK›í;lQêzUœrO6­2ÜÎÊ[`#îŒ`gÔÕÉ|QâÖm Â;-'š)ã™äBÅ=}k;GÔõ3Ã>³Ò®`X5q ¬°î*De·g?§µ],ñÞÏ£ÍåêiöK5ÏÙíZu–VÎÕ*à Ÿj¯«üBÕ,¼·6šd³ŽEŽâÑž?5³¹dqÌdc>¼Óï<uoâÁb÷‰2^E I%©1IÛ¹–aÆîO½:¸ÝC^Ônüa}¡éó­¢iöîYZ0æFcò¯=ç½sj—¾,Ô| «[]Glo<ý¨Ðy‚'XÈ~ãp8#Ú½Z(’–8ÑQ`*Œø áõjrø“UÒ´Öš&ÓmRE[yÆy\àáq۩犃Ä^$ñ£èúÜf;k{‰yi4C|,ÊyÜO@ÝsÚ´®ucMÕïJK¯jº~‰¬$‹ Åý¦®šd3*aNý¸v_mÝ;‘OÕµ¨Ëoq—«‹%F·UóÓz©ÉÍÚ¶ujwZ§‰ÒÆàZà[$ a¼ù ;‰è¸qƒÞ²!Ô¯uŸèú©Ö ¥£hŸl ä©«:\Ÿ\uü«Õ«GPJåüi¬Þé¥[YN›ÛŸ*G2…Çü³Rãœvé\âxÇX>·»Êó.¥-¤òÚÀS„}3ÀÎ;fºk’xƒÃÆîk•¸•n%Œ°Ë ;ASÈ8ÇWât·|?Õ&³¹2Äwü›‹¡à¨ôÎz×?⽉ü WPÜ]Ũy{Ä{U3ÆW=”­Osã}SMÑõÁ8Š{Ë=U4ëyDx>Ü3(î7;ñ[z¯«Üi°ÜMcöušÞúh|¦fèÈFz‚8®¶Š(¢Š(¢Š(¢¸ÝOÁ—Wž1“[·ÔR®-VÖâ‹s Ÿ”ç‚~•4¾±–ÓXµ…úA«KæÜª²u#nGAùTòø:qmwo©ÞÛßÃÙÔ{7K`À®;VÍ…ŒZV¬Ý"åŽæcÔ’{’I5æ ¶þ8ì´È/¬…î¡æêÒà,j„nvÀÎ[hsê{W}uá[;Qï„÷ùÑ$7DÀ,È™Úã'¡ïU®| ¤]oÎóØës¿•TPœp¥4øNXíü‹›¸&Š7ŠIãqæLŽA`ÍŽäF1Ú¯ÚxcN±×?µ G‹U´EÏÈ‘©Îv÷ªz‡‚tíJêþi&¹D¿QöˆQ€G`»CtÎ@íœqÒ›sàm:êâÊw¸ºßmÄçpÌÈä qߦ8âºePŠ@ «Ô|"šŠlµöÔï"¸³R°Ä‚=€7Þ®yúý1K}áA>µ6«e©ÝióÜÆ±\ˆ‘2®q÷Á#"£¸ð6—4’4R\Û ­VÒáap<è×8 H'<žET‡áí´h°Ç¬jJº9?dæ3ŒŒsòsÇ¡¨xN+­iõ{-BëN¾–! ò[í"T Èìj½Çí¥ ¥}w0¬ epèÄ'$–ëÍD~Ø~ò$¿¾K9®ÄÖ»”£° ÈÊŽB+®®Uðœަú”·7rÛý–y Ú|ؽ`pG8#Ö¢“ÁZ~ý Û\]Z.’¥mRP#9S’GÒÖï†-®µvÕmo$ŒE4–Ì£ÎAÐ6Aéê9ªš‡‚,µÝË}|-…»[-¸‘J*°Ã$“êri"ð5œqéHuFOì¶-j^U%r6àü¼ŒqøÔÚwƒìôÙ-<»ËÙmìË4óHˆ ¶qžŒ@ÀÏJ­'Ãý&M]Ïz,äpÁ£(ï :n9«³xZÞ}H_›ë幟c,²/)×û½sÎkñ˜4}NãLÓ­-ähï®bIãÉeÄd0À#¨'mø õåÔlæÔ†§¦Aåý’ð[Cèá€ã‘ëQüEŠK¿ì‹as5Œv’Ká–8°¸ êA6N 銯á[kù§Ô4‡Ö›TÒ$µÿ¸­–.F8*¥F#'Ú·á Óÿáo µÍëiÅDaLƒpAüã§ëïDÞ µym® ¿¾µ½‚³}®Q$‘uÚÙR·U™¼)¥Ï¥Xé²DÍog:\G¹²ÅÔîÉ'©$’}sQjÞ°Õõ¨uY&º†å kf0I´I9*xéôÁª¶žÓìôÝ:Ê;ÛýšuÁžÕŒ€˜Î1‘ŒOõ,~Ó–§m<·7#Q¸3<®7 F0ÊT ùRIà››)á½»¼»¸™£oµÊãÍŒÆr›H žù©%ðŒqGöÝBþââ9RQpd à¨!@Ún'§=óY>$ðLz†ƒ.“ Ïs-ýÒÍ=ä³1•9ÛŒà ëë]šCåÛ¬*ì PÝúc5ÊIðçK—O»±{íI »ºû\Êf_ž\ƒŸ»êü*íÿƒlo縕®n¢û\ oz"ejEøë‚FF:ÒÞx/J¼Ôm/?} ¶€[¡}¨ñ †:dJ­á>Ÿâ{Yx¤·”ªV—yùs—=†sÐtV–·á›zâÆâå§ŽâÆC$A&ÆRF>â³­¼¥Ymî/£Ùr×Q9Är09#븞sšÚÒtˆ4xfH^IyLÓK!Î2N0:? 5Í×Ä-Ö•zì÷)±öî+øÑ“Oݨ_™¬g7 6õÜòÛ–ùq÷xà Dðš!Ôâšâîá5Dó \q(ÆpÀü«GKðüZ}Û^Myu}vSËܰ%9Ú Ï^2kbŠ(¢Š(¢Š(¢ŠÎÖõËéϨ»¥º}æHÙñø(?U‡Åº,óip¥ØóuH̶ˆPƒ"œôãñ­•ufe ^ ”¡Bç õÅ6IRÞìrO¹Å>«ß_[i¶S^]ʱ[Â¥Û KBñ›â;y§Ó¥gX%0Ê®…uR Õ­CRµÓ,f¼ºr°B7HʥʠÑ¥êvšÎ™£c'›kp»ã|‘ô5nŠÃ¾ñ‡´Û·´½Õ`·[aI2 lgŽOÒ ºñï…ìeX®µ›x¤eܨû#Øb·íçŽêÞ9ámÑȡѱŒƒÈ©(¢Š+3Wñ• ¤oª^%ªI¬à㎹ `uïPÙx¯BÔ.!·µÔíä–qº$݃ ëòç¯á[4QERZP1E t¥¢›½wìÜ7c8Ï8§UMOQƒIÓ§¾¹ó<ˆWsùq—`=p9¤Òµ;]kK¶Ô¬œ½­Ê #b¤±«”QEQEgZëšuæ±y¥ApöÌ+OÒ6äsÐÕqâ3þQáòò®¢ÈdThX+($1={Ù¢ŠÆŸÅ]·ˆmô)¥•/î3å)…¶¾qÃc=ëfŠ(¢Š(¢Š(¢ “ÐW™ÿÂÍžæÎóV²KW²µ»û8³ÚÍq*¸ àu$ ~5.±âkÍGñlv) YiÖͬ±’ò±-ÎpÐÓ´}FêÇþkಒ Ë¡Ý3,Eb*}¬í'Äú–…¦x¯_Ô嵸X¯¤‰aŽ2$‹µŸ»Óµn?Š5k-Ut‹¹mîóNkÛYV6_¼Œ7sõÈ©|¯x›^‚ÂÿQ³´M:êËÍó"8e—vÁ<‚2zqZ'ñ$ÚV¥£i6qÆo5YÚ$’PJFª2Ì@#>Ã"¸ë÷ú®ƒªèî`[­3P¶ŽáÂ6É•J3Ǹç¥zN‡¦fX2½½œWS;Kpmª<‡«sÏ¥pz Ʊqsã©u l¼±,¶ûcRºB1·'Ûøæ™àj^“àÝ6âÚa©Z²DÊO˜…vOb XîYmõXâŠM6kãiöD‰Œè›Šù¥ºuwZô°r2+Í~"_[ZøßÁŸj‘R&¸»“#<" `w9< é4Ë%žâOk0$WQ$ƒ›X:àÿ´z·åÚ²t¿Þë2ÜXY¤šo”Ì´¤0 Yúr71p©ÅE§xã\Õ#µº¶ÐÐé×6îÂóyØ’Œ‘ýÞ§×ÞÇ·š•þ€’Ánj±ÈBáƒá-/'3Àëš•Tç‚3ŒœóSk>0¼mi´5{ˆm1hËä¾N ( Ë1éÇRjµÇ‹¼M-ö£c¥i6×7v ´eŠùjçî±ÏÞÆØzÔ°x»T¹ñÈÑbK`vY­ä@«óäöŠè¼S«Ë¡h3_ÅöF@NÂû°¶Ž[“é\œÚãKÖ—3Ϩ-”Eí¨bîŸxó|¾Õ-Ï.¬-§·šßu×ö„VV×- GÂAàNÑ» H÷¨õokºn‘­O ÊúcÄÉ<Öî‘ÜÆü¼ðÀäwéS·‰|HºÝÞŒcÓ…ÌVPY¶9E\c#9'#¯J¯wñãд]Q–u V¤ž'‘Œ+÷sÏ'Ò»MýõMÂúC’â‘ü£”É8>™®2ÆÿS‡â7‰.o¯-…¬*Ê! ùd;€§wÞÏ^¹¥³ñÕÿ‘áÝVí`þÏ×®|ˆ D!à; lüÙÇ<µÙë¿ò/ê_õë/þ€k€ð6µ©iÚ‚¬eKv³Ô­Ú4UIÄÜœàç•vÏÇ:“x‡Oµº‚Ý"½¾šÌÛ*Ÿ2€•ráˆ98À#4ûx…|C©h©ýœ—qO³W „åÍü 6Ý÷¨u^¤ºÃX,2ÿcʰ=¿ì÷O€_iåÑaÒÅô·pÀ6ÄÒ¢‚«éÇZgˆ|9ºlnsma7kp6ÆÆ õu‹yðño¬.ã“V™.ïnRæêé!\ÈÉ À» X¥†Ö(æ˜Í*¨ )]»Ï®;W<$wú´Ðë2¤7òI8ˆÂÊ’EÍœóòäÛ4Û\Z·‡¶kŒWDa j¿:•ÚAçÒ¬'‚g…e±‡X–-K“rÖ‹ß’ÛŠ 3¤ûg¯5ØW5©xBÛWñžŸ¯Þ¸•4ø-­Êð²’ä÷à Væ£c¥¦ÜØÏ»Ê¸‰¢}§ 0q\ͧ‚¥‡B—N—Ufafl­¤Ž‚#žXàdûv­I<9ü!çö×[CöQj²Æå\`‘Û8þu˜ÿôã{¦N“ËXÚ-Ÿ– bHÔ‚=¹ã¯J…´½?Àú$—÷÷³Ë¦iûÞ’.S{“¾ß1úÈð—ÄúQ´™§ÒôKV1; QæËÈ\x.K¹"½.¸½GÁº¶§â[jm~?3Oi ¬?büÜœqšè5½=sN[Yd1´rÇ¥Hf±³hÀòÜç·V “ŽŸtš­‹jz]Í’Ü=¿ŸŒÊ€PF3ÇJælü,ÛCY»x´`VÝ h2¤m!ˆñYïð¶1gik¹v±Ú\É4Ë_”Iàž¤áŽµuxjÎOÚëçþ>­íZÙxê 9õÄÕ)üPÔ.tíJ{õ"ö(ÑNöÆ7)?t‘Á<×G ooƒåÆžÀ®ZÃÁ ¦]Ê–º”Ñé\›£§¬jœ‘»®ÜóŠKoÚÁ%œjvÒì®åµ–Á…’yn¤I »øz·k°>µx#Öd\8ÀÀ ÇùU©ü.æ95[†Šî$Šâ6 °U 1ò±¨§Ïà{+«ýJ{›™¥·Ô-VÖkbЊ0¸8È#'š‚×,uiu›Éçµ­ˆ‘Sl‘à#ÝG5cLð‹éqGi¯sýŸ¶¶òÔyG$›«Oþ9¤Òük§èºŽ‘=ä÷–Wí#Ê“3’X‚êOáE·ƒ›ì‹c©ê³êQÛµ¼p4jƒk ¹b>ñ À<}*´~dÔôkó­Ý4šH1Û©‰1åÓÇ'ëG„´;«?ëÚÃÜß5¥ü€ÃÓ©î`¿Â:ì+±¢Š(¢Š(¢Š(¢Š(¤bzk;K×ô­i§]6ú–·`²ˆÎvCéÒ´©®ëv ª2I8U 3]Òõ–•tëènLD¶Jç§à}kFŠ+:Û_Òo5I´ËmBÞ[è2Û£‚èŠÑ¢Š†êê +i.n¦H`Œny$l*RjšxƒH“N]A5;Cfïå¬âeØÍœ`„æ¯Ëw4R¢ÉŒ2°Èaî)¶öðÚÂ!·†8¢^‰…ð-TV·eMÍ´3lû¾da±ôÍ:ÞÖÞÑ [Á(NJÆA>¼T´PN+:Ë]Òõ+¹mlx†çDl3ŒûŒñšÑ¢Š(ªWš¾Ÿ§ÜÚÛ]ÝÅ ÷oåÛ£¶ è*íQQ\\Cim%ÅÄ‹1)wv8 £’M6ÎòßP³ŠîÒdšÞeˆrâ§¢Š*9¦ŽÞ &•‚Ç–f=€äš­¥êÖÕ¼Ón£¹·,TIã#‚*íR¹Õôû-BÒÂæî8®ï7}ž&?4›FN*íQEQEQEQEÁ·uÏøJõ]=ØÉcoö‘1º!Y;gåàšmÄ+›¸4MIô¤JÕgÈþveIpJãrëšeçÄÈ!kÛ¨#¶}>ÆìZÌ\Lç 3"ú ÷ëƒN¹ñŸˆSÄ:¦—i¡Cxm"Šâ3§2Fç‚>÷N Gÿ :ò],VßÙñÞ‹&_7÷ìÙ \/÷A?ÍA¤\Ïa®ü@¾ÒíR{˜g‰–bªøˆÈzÖ—†¼eªø”é’[éö_fºƒÏÅÃnCmÛ¼¶séÐÕωÞÛøU{4Œ³¸™šB¥•àäþU…¡]6òÞËNÒl#×nìæíüædòPLœ“銜üF¸º“EþÌÒã¸UŠo/tÅY%Œ|È@Sǽv:ýΩ¢ZÞÞXÉcq*n{y:Æ}+•ø­k:mög§[Æc¼¿ ­pc,F[f<rJ£s%ݯÅÓ=®Ÿݾ€D/µ2%$å±Ï â´OÄ8çÓ´³µŒ_k*ÍWSlH‚œ³xæ¶ü+âHðÈ?C]÷‰5="6ÎkÜÖòHÒ4¬`]ƒ…/óê*œþ%¶Õ"ðf«&‰o:jW!#y›/hì¤åxçîžãµ~>¿²ÿ„äÑâht9QnnN]X•zàô8ú×u «<Ê¿uÔ0úšå|eâmWÃ2iÓZé¶÷–w7 m&éJÈÎÅA?WN]bßQ³QÓ¼¯ÜÀåÖo7„ÚHø\6î¼óÅSÓ¼£ÞÝC§ê±éw7-rÁíóÄ(9cÖ³ãøy{¦]xyôBÙ"Ò‡lð±3<Ÿ}‰aŠô!œsÖ¹¯xró^]*m>æ.´ëÁržzF‘ƒŽ{Õo jÖšàÔ£Ô­\®œ,BÉ Nw'w÷‰ãÒ³lþ_éú~†a¾²›PÑ̉K ¦‰ú«Œ’yÈ®¿Ãú\úe¬ÿj–¸¸”ÊëlŠ>ÚƒÓŽýNkŸ×ü q­kZ•àÔÕ!¿°ûG,;Ì#œ˜Îp3žx¦Øx#PÓn¬u58[PŠÑ¬¦gˆ”1’ íàŒ~9®ZþÆ-ÀÒøR=R-Fþ×U¶,‰V_2pàNO^•×ëž¾¿Ö5KÛ øm×SÓÅ•À’2̸݆SŸFÅV>½“H²²»ŸN¾H,’Ñá¹·&3·8u9ÈlõÅ\ƒÁ×VZ®Ÿsk~¾T|vS¹•vå ðONk*çáþ¯>•©ißÚ¶b+ÝOûGq·bTï·ïr>P?:ÒÝ_ëÚ­î§um-®§`,f‚(Š•QœI<åoJ·£h:¶™i«Ýéï¬mŽöã ÎsØu­c[ü>Ô-ôÍÉuk\h÷fê6¬7’[ƒóñ÷éZÖþžßÅ—z¢ß'ØînRíàòþ1còÀÝœmïÓ­hx›Ãñø†Âüß&æÖá.­¥+¸$ˆr2;ŽÇëYcÂWsnòæòÜjš´ jò$DÇ@€ É<“œúzVdžt»ÃöšeÍÄWÖ1Ie2Šžj]E¶ñ…y¤Ýî\ÆQŠõ_B>‡°äðæ«¢Í¥ëº’\[›ao·„ÇŒD’rÀ¨ô}in´=Q´Kص-jÛÍíÒD¶(¨`»ÇqÇÐT+á©u†±è- )7ÂTmB6’¤çøyúÔSø#RŸS¶Ô[XˆÜeŠpÖùA¼Œ´`Ÿ•€d桲ð§m¥hVM­ÂÃGºÂ~ÊHe Tóuäœúš›Pð=õõ§ˆí—T‚8õ¹Üý˜“ æç…­uÚt[iðApñ¼‘ BÑ©U8à`qÅqÿ†…¤¬lWÖ-B1þ»®;Õ«ß[jRëw7-öÝIaD\L@Àïódþ”æð•íÝΣ¨^jNêËìÉdQrIÚ[%‰>¾• ^ ¾†ËÃp&¯m‰V6ç»FFî8&¢o^Ë ëºtúÂ;jwBñ$[}¢)2§Ür¿(ýjÄž½¸Y^îúÒîIâÙ$w»áÜX’Áwq€@ö®IÓWHÑm4èd.¶Ð¬JíÔàc5áß _éWzÓê…µä´4Ñ¥¹Œ‡*ó0(Ѽ-ªhÖéðjÐÿgÚgì«öcæÎÕvÝó(Ï`3޵BßÀ7öö6ÿmÇ$¶7ò^FÏlJ¶üåYws‚Ù;]¶ÓÛ-¼?ÕºíGÓ€*E¾´yV%º…¤a¹PH #ÔJ–9c™wFêëœeNFhóSÌï]ägnyÇ®)ôQETmWOV*×ÖªAÁeëùÕˆ¦Žt߈ë꬧ÖTº.¨Ú´¶¶éxØÌÍÆHÓ8ã=kKÎÌï_0ÁsÎ=qO¢Š(¢Š(¦K4P&ù¤HÓûÎÀÖ\BYJ›¤naê=jJŽx"¹ˆÅ4k$mÕXdôð€€RÑE›ªøI× 'S°‚ïÉ$Çæ®v“ÜU½ÖÚ}ª+µ»%Þ”>"ÚOy¥ßA«1Þ9ÙÁŒDYHV?0'Ò­h¾:³Öu+T´š$¿…ç´™™H‘Pá²ÊŸc]]W•ø²ËJ°ø³á9[O‡Ë’£"Eo¸¹ J¨ääÕ› %ðÿ‰üEâ™-ç°ðÑ·VË2Í ˆÏÝôÉÆk£‡Æ‘Km«“¦Ý ½)Ií·!%wVÎÀ'ð®Oƾ&Ó¼Sà EÂæ3ö(¯`–x†Ü3€0Aàõýjè š-¯¢–{ •Õ#ÒK­ÖìÄ`R73×'Ò­èÞ8´Öo-­ã³¸ŒÞZµÝ›3)¢œ‡å<Ž Pµø›§Ïkö©´ÍFÞÝo Œ²HªDsgN''Ó#šÔ‡Æš•«5ôSØI¥ ’æ)À,¨Ã*Ãi çùñL‹ÆHUÒm2ê+¯²}¶bÈ^X³‚G8w™¤øóOÕŽ”RÒîõXÙ­$•T+²Œ•àäÐúÖ~…âû©§ñEî¡es …„îwFyh¹Lœ““éÏZÕ°ña¿KÄM9ÅÔñÝE™ š' èG5GLø…©h—ú.¢UìÞíÕù‚6Ö\çÏO\UÆñkgK6šUéQ‰¦I3XÑN |6G$qVëx–O.0黸[pίi~)µ3.›qmqm4VñL€$#‚ÃþGžj-ÇVšÎ£oiö9 v¦îÖF`ÂXÁÁé÷Hô5.‡ã+mrò!µ‘Râ6–DŠêUqÃ`å[‘Á®š¸ƒñ&Ú'ÕVãGÔ"T«ã|…c Ѳ‘ÏAÍkê)ŽÛSm:ÎÑïn¢¶û\Ê®Gp9=IçÚ°Æ×‹´K}"ÆæçO¹³{¢é"(«’ ÏÈIÏ|ôÍwõËëÞ5‡EÔ¦°ŽÆk»ˆ- äÊŒl@à‘Ÿ¼}«O½‹RÓ­¯ Ï“qÊ™á†Gó¬¿øxWGmRK ‹»xÏïL%AŒzœžGÒ¨¿Ž!··¼¸»Ó® ‚ØF›Ñ„Ò>6¢`òNáIyㄱ³Õ]2sy¦Ä³Íj’¡o)³‡8#ƒžõJoˆâ=&óROê/¤QÏ&J©1:ä0ÉçÇQZš_ЧÕ5ѧǣ̶âÝ.ðL¬ŠeF985ÒÑEQEQEW ?‡µØ<}¨ê¶KÙu „ÌfÚð„9o—ç ç½eÍáM¡x¦Ãfœ%ÖnÚTspØ:üœœÖ¯¿„/¡×ßX[>ù¯,¢·º·¸íÐ`2¶Ó‘Ž£ºÍK:>‹obLDÆ|¨Â $“… æ¢ñ-¶©{£Oi¥}”M:4l÷,À(#&¹¿øD5$׿ñ %öŒöÒHÌŒ[\¹öܪwÇ&²´ß øŽÎ?A-½“G¡3ùÌ·/¹J‚£olæ®?…|EŸŠ4û«{dÔî%º·»w†p¿)ùz‘ê)ºo…uý7ÄRj¦œ‘˦­«Â$c†MØùŠó’A-ÀÖÏ…-dð—ƒ,4ýzæÎ >O˜²üŽK¼°œãKÀiëÞm¯Û¤ŠÓŽ#ŒÌ£þÌ? Üñe…î«á}CNÓÖqw B ÎUT0Á9ôô®y|7®.£á­–etx)ÔÎÙmÊ*vö<ý*¼ÞÔ®ôh“½ªÚjr^Áp¬KïgWUeÇmÁäæ®Â?©Mgvˤi6WOdÖŠc|™ `.!G]¼æ¢¼ð¾½'Ã;B·ž¯- )(Y˜$ñ¦27•Î=+|¯Èþ$·ÝeicªÀJÇ „&ÅP¤`p0yïž•³ªxs^½¶ÑoWì¦ÿM½[jÓ7–PG³h}½‹§zÊxžOø«Mx,MfèÜ#ý¥€]ÛrËÛoZÛñ†oueðþ¢¶Ð5æ”åžÌÊvH¬»YCã¯B ±á½)´á{;ØÛY5Ô¡üˆ0qŒ³cæcUüw£ê!ð•æ‘§<Ûµ^g*¨2x=+.ox‚ãÄ'RO±ZŸìw°FIY™$'p`6à€EgXx/ÄVZ¶‰}–(ö–fÖá¼ÆfrJ–|•ù·m#³V4/]éþ&±ÕËO´š$syqe#(ºf\cËÀ“œûW¡W˜Þø;Äwv~.aÓë³+ÆÆá¿vªçäëòçñ­‹kšÜúΟ´·7ÚzYÜE$ÅV7^Ž9ž0+>?êšAÒ“I¸…ü6K gw1´eÜ1‘p{ñô¯EQ€sŠà¼QáMsX×ïg‚KI,®tókØW9Ë Oé[Þ ÓuM'ðÚjÒF×ácrʈªHÝÏãZº¥„:®•wap¡¡¸‰¢qìF+‰>»¸økg¢Ï26©nñÜïå^D9 ǸÚ6ÕCÚ¥þªÃm¦iv—¶¿e_±êÌárqÙq[ ÚÛøzÏF×¥´‚[«skå r²apBä ñÏJËø]¤/ÁÑ—îâFu™Ï-;cü6*þuÚQEQEQEQEQEŒÁFI{ÒÑEæŠ(¢Š(¢Š(¢Š+3\Ð4ïØ -N,"E•v¹R¬¼‚9­iöÚ]ŒVv‘ùpD0«’~¤“É$ó“Vh¢Š(¢Š(¢œu¥¢Š) @$}éh¢Š(¢±õß é#6ͪ[yÍlÌÑ0vB¹aGu¥nC AncBª&0 t©¨¢Š(¢Š(¢Š+ž¾ñ¦“§ß]ZÊ.œÚíË ñÆÍ‚°ïÈüë./Í?Ä+,o­½¨bE¾C9' ŸîàcÜÕ›/ˆzõÒ[§Ú£‘®ZÐù°í (•oN«6¾5Ó.æ¶XÒäEw¼ZNÉ„¸+Ô/=x8Î3Tí~#è—(Ò¯¢Ž;¡i3ÉnBÅ)8nMlj^#±Ó.þË'›-À„Ün4ý›©ðZÒ¹—+<‘˜nþ÷­h[ø»N¹ÔÒÅ#ºÝ$Ï R˜–ì€îÃ{`õ¨Wƺ4÷‹i²Ÿ6G‚U>IdQó*ä`ûVâ/ øW‰Ìç¶p}ø¨.¼u£Zêk§°»’y-þÓ“lÎ%ŽTÏ_Ò¶t½RÏYÓ`Ô,&[N»‘ÀÆÀÕ?êÇDðÝõòG+É/åùQ!¶œAž§¥q> ºµÓí,µcsªÜÞêvhŸ`hÎd‘Fé%±œîûÝ; é®|¡ÛG§ÊZâH¯ÜÅ ‘ÂXyƒ9Œ÷ Áâµô=jÓÄTZ–ÿ"BÊ7®Ò ±RúƒXÞ7ñQðÕ•§•íqus(ÑÀdUÆìûã8I¬;ÛØm>*iº‚%èŽëH–Y åƒ(»ì@ö®£þý)ô›=F–t½.Ú(Ó2Èã9P§¸ÁÎzb´4­^ÓYµy푈à ¯UaØŠ“QÔ-t­>{ëÙ–h¼ŽÝ€¬¥ñ~˜±Ü½á–Å­íþÔér¡[ÉèO~1×=«”†âÞ‹óÁ í¸¸ÑæžX˜;”+ÉÇ¥>YhÐãÑŽ©{ íð…&ž&‘ñæàç¿ ®ª÷Åv6S˜©eŽqp±G“oèÎ3ÇCÀÉàñTï<}£Xß›IVè“hoc‘"Ü’ÄK)°úRÏã›ÄòCmsqX–HÂü…•ʓ»a“Œ ê+/T×­4©í­¤Yf»º$Am îwÀËp¹5ÇøÛÅ1ÝhzZéâõí¯o£Šå …‹Ãñätl®1×­uÑ×EÐ’Ý.®îGi”Ý :9 ŽØéŠ±«ëöš;ÛC*K5ÕÓ·¶wI!'¦êOÇø®òÏX‡Ã𵄒‰F± ³ì¥ã½sŽ£¡¤ø›ªX^ø?]¶DšYtôÉš2BÃ)sœ~µÝicn“f2N A“þèªÚÖ½i¡­°¸Y$šêO*b´ŒàdЦ³dñÖ“mª”º6³ÏöbV,˜¤Ý³kú|ÜRÝxÎÎõ¥ŽÖñît˜„“Eäà°9ÚWÔpN}+ñòj~ðv½yo,wƒQµHc(X¹¶ŽêHãÖ»˜ü_¥ý‹Sº¸2Ú®˜qt“¦ÖLŒŽ;ätÅ@Þ4´Š–žÆú)à·FØ¢™ü`Œ sÎEAoñ F»Uû:]»ÉRD†-¦A! mÉÇP*ÜÒ5x5›i'‚9£ò¥h]&M¬c<~5¡\Ö­ã+GÔ.-&YåkDI.Þ$ ¶êÇ [œþ@Ñ©xÛOÓ5Ë]"K[Ùnnâ2Û˜bܲ€2BœÓ›ÆZTš-ž¡–a}7Ùà· &H)‚FÁÎzb¹‡0A|d¶öÒZÅæÁ¶ÿ–+:úç§étQEQEQEå:ï…/õk7‹¦j0M,ª,î¬.UL ÿZ„àŒ÷ÇN+M´YøÂâúa0¼²¶…®£‘TFÑœ¸ œœóŒzÔÞÐõ°øŠÓVÒÍ Ônçž7.…q´”’¬ý;ºĖþÑîìÌ0èy¯v$R·A žsÎqŠ«/…|E/‡u]8iH&¼Ö…ò±¸M¢=êÜó׬ø†ûì¾5ÔÛLÔî'’Ålæ{+a:„ ·?0ÚÃ$sÚº6˜|'m• ÄPÛæK”Û*ºãÖ©ê¶:Äÿ´}JßN-aiÐÉ7œ£™1ÎÜçŒW(žñdw:MËiÑ5Õ–£<òºJм0WDÎŒç“ïVì|©§ˆ!¿—VWR]I%Ô‘\)¶xÉa»fr‚: ±áPÒ­´Í"çBˤÜË$ZŒ¥JرÌ6w@ä`U᯿‚¥±:;}¨k¿oXŒñüÑy»ø9ÆqÆ+GRÑüEyuâû›M.8_Q³†+Q;£‡dÜpɃÆxâ«hš‰-Ö¬m´M8Ý4zÔº¥ÜQÈŸºVÝ„#$n= z„1Ça#c^»T<ž•ËøûK¿Ôô½8éöÍq%®£Ì‘!™œã$ ÖcZø„øÇMÕî4™gŠ £r’Æ^G Ãî€5‹cáMrÛGðõÜÚtÆãLºº3YEpÞ9˜ÊÁ€ÈÈïë]¯„4³§Å¨Oýœúx¼¸ó¼™f2HN,çq$tÒãoxBûJ¶‘cžUVŒ± nV Ç®1\®¥á;ßh—È4c¦ß=€Kquæ³êᆠ'ËÔúнkmâ ü{a«O£46K¥½£ƒ2GÜ'¡#µCOÐüI§øGE·i7z~¬nf„L„Égo”çùÇ\t5r}\±Õõ»ä²7­ØÇòÝ@‚eR¸9?wœäg¥G£xgTÒbe˜K`œíÇôªÞ ð^¡ªjzÔz—4 Xê÷"3¸¯ñ ƒØñÅzT*é ,¹Â€ÍêqÉ®CÄzUõ¿ŒôZZM|–°Km5´%w€ü†PÄÏ^kœ›Ãž ¶Ðôô‡K’{§Öÿµf&D+¼„’2ØÇN3žkÔâvx‘™ 1PJ SéÅr>%ѯO‹ô?ÙÛÉv¶ ,3[FÀ9W2î ž¼×?ÿ¶¹ ½¡K’[Ÿkܨ™À…É×–Æg<Òk~ñi>.Ò´ûAvºÌææ†™T !r„œñÛèš1¸:= »¶6Ó¬J¯pÅHê85ÎøÓLÖ5 ý ]>Ý.--nL·QTŒaJ±éÏ\×2žñ+ø;SÒÊxµA{lÃ÷ãÎóÏaŒœsšÔ]ĺ׊..,Þ_OH`>r“*2€Øÿ{µV¿Ñ‹>‘ “[˜£º‰¦ ¹OÌ®:ãUÿá ðO„n%Ó 4—ëäZj7l‹ †æbÝO½*2Æ5,0Ä C^Yâÿ øŸYÔüD°ÚC,¶±Çi2Ì#T Ë+ެÄôÎ@ÏjÒƒJñž#ðþ«u¥FE…¤Ñº¬é•/ zà ïT4ßë1hÚLÓÚ*_éZ´·«œ–7bp@pÝý+[ÂZV¿§øÓÄúŽŸ[jŒ’¬‰8o/jà)I篵w”QEQEQEQEV4žŒ^]]Yß]ÙItÁçòJ»ì2œ8ô«š^—m¤YýšØ1ÚGw9gv9,OrjíQEQEQEQEQEQEQEQEQEQEA5µÄðM4)$°Ñ3.J0Hô8©è¢Š(¢Š(¢Š(¢Š(®þ»ñiðúM™mü×q0ʱlÇ©äÖ„5û˜u_ÙëÚÌr‹mCȵiöGòíÎ1“ÍvÚ¶Ÿ¦ìûmäyŸpHàõÅ[ŽDš5’7WFVSG¨®ÏÄRi5Í;TÖ‰Ó㶆XRpª#w' Ö¶ï§–Oikoâ+h!±—M!KÜdpÀç éZ‘ëzdº‹iñÞÀ×kœÂæã­6m{I·»’ÒmFÖ;ˆ—{ÆÒ€Tc9?…DylüúUyuý"åÔí.!f™@ú)Ï=Eõ“®ëPjÕ®tM\$ö¶ï2ËnUŠ•RÆ`â¤xŽÒÛÂz5浩Á×6‘»I;ªb “ƶnµ[Tº¹ºŠ8· ž˜õü*)µÝ*ÞÆ+Ùµ t¶”â9ZA†úUèfŽâšHÜe]A ×â}SQÒ|wá¥S1i—­2\Ûº @2Û·‘Û¿jꎯ§g›ÿ¶Û›AÖa )×~µü$:?Øüêv‚Ñ›`˜Ì¡7zgÖ–ß_Ò.çx-õ;IeDóe%WûÄg§½Ka«iú¢»XÞArá¼§ Š/µm?L1 ëØ-¼æÛ› ]ÇÐg¯Z‡þ ý'þ&–è¤ ÿ|¿º$ànçŽ}jXu}:å™ ¾¶••<ÂPH_^;Wsâ{Ÿ øUÔîõë RëÎYÉP¼‘µ8<‘œš½¡jèðÏ>»â[[»K¢¯dìë»h_Ÿ$1»Ó[óø‹Fµ¸OªYÇ)ÍØó(;?½ô÷¨dño‡¢wI5«dUfuà0È={вš¾›ytöj05ÖÂLqÊ êr>ÖΛ‰»¬»ÛYj­m ÷’•B©?‰®ªßÄš-ÝÜ6–ú¬·®ø¢Ig\g zb¯]ÝÛØZ½ÍÔÉ Œ¼Žpg?Š48íÔš¥¬p<½òHÆpsÐ⥋Ä:<òMZ£¼ æJ«0%Ôúzþìovu[E·Fò<¡B“Ðô®oƺû¦Ÿgy¡ëJ$ŠþÞ〣«,Ž Á#Ž˜Åu—ZÆesµÕõ¼3ÉÊFòÇð¢óXÓ´écŠòö$—î+¸ûý=ë”Õ5+/ânš’jÒ&•qa<ÓC+¨‰JmƒŽ:ú×Nºþ’úkjI¨[½’œÖ@W>™é·4¶ÓN /á€íówp8Ç×=«ðN¥}sãØÉ«Ï¨ØZ­¹·iH;wHà§á^ƒEQEQEQ^b ž™ñ{W‘ì!KeÙG“þ¶BÇ,yäÖêÄÚOÄ2m¦’{Ëô\BçÌ^9N=}+Yšâ&¡s=¾™w£G¼âØÈó¡%IëïŠí¼btß YZ¤ìŒ0íXó6n;s€1Æ8í\ާ‹Ox²î{Y]n4¸í­ØDÌM§(0:ò*µ­†§¥]ø Úú)亵µ™.eX™Äe” ÀcÛðªÚ}µûé¾Ñ¡I[²ÕškÇ(~DË1l`†\Ör]hW×2iͤÚã^»ÜH¥rAŒŽÇ·'¥tïá͈Òé’é£û1ôhíÑDl#$9;CøÇzåu‘$Rê•ÔN¿æ%Ü„FUóCc…#€nÏ%¼Þ+ñ4ÓÙ˜ç¼ÐáòãT,wº¿ËŒ}âqõ¨í ’ßľ ‹^ óYé2¥ÑhË…ÚãÀ?ˆ¬Ý*;Øô/]/™—g­]5Îè «òܯ÷FzöÎjæ¿§Y·„î /wÖ· ë'ÙHQó©ÆÈ\gŸ\Õßi6vÚ¢aÝe}ªÞIå–kc5´ÁØe\¸N1ô®ãÁ†sàí(\Û‹yRÝPÆ3À^^y}kεh®`‡Çz}ê3êú”êÚhÚI•0{û'¯¥kéÊüV€^@ï Ñ£·yþÌÛä>[ Œgæ½æâ;Ki.&$G–b8Øs^káýRÞŠ>'Ô'Žî;K¸mżïm I6¯ÌÛÖªëZ®§ây¥»Š ¤ÑtÝfмr@Èd…ygÁ+¸ƒôÕè´6ñN£ãM ÿcjų!^eNd\öhÏ|UDÑõ}gá-õב³[¾‚0áçthÛÿ ÇþR^Emq¦êº¥¬ºÌ‡D{/(ZPHùSh\³dŸ ª—p\ºiH4ۥLJq±’B1<)ï–ºSOäø#T»·»]/O³’ÚpÑ1hæØ9P3Ù—8þtø´Øô?èw‘=í¶…öKˆ¢’æ#+$¯&íÎÊî úWià[ìß}š7º{a<¦ÜܨWòË8ì:‘žØ¬O¬SøóÂ>m¼òÁi,ÒÎRtL¦±¼+Ù#hª%…×–þ&óä_""À‰v€ ^:{ÕÏXI«è7vwUüÒL’Í N#tÆIÉã¦(—JÖï¾ÝÝ}”®³sK,j¿;C¯©ÈV8﻽áåµ¾ñbê¶W“Üìÿ"R°yP®SÇ/ËqØjo‰ÖÓÜøC0Z½ÃCw®¨»˜"È < æ$¾†ãÄ~5œÙ]/´È–ß6ûâ‡o\‘Sh«!ð4vÖ³ ‹Mš+–02fEá‰I Ö³ü¨ŸáÿŠ,ZÆìË>­3CÚ;1Veé€kjîHtß\êWÑÌÚm挰Yþé¶îÏÍÐ8cyþ‹¥h’Aªx"Ç]°šf‹O¸I‰‰™c߈ì8{Z766~2Öã‡L˜[E¡­•¹KGeÜ7eCcž ŠƒCG†O‡è4ËØe´ŽU¼?d™£ÆãûÕ½á-u;Ù^ÚO:…ü͉á)º7EPÃ#ž††vWßÙ/sªÄ¢îÛþ%Ñ·\Ç 2îϹ'ò«_ôûÛÝ?IžÕXlµ8.n¡@Ix”óÀëŽ=«hSxžçƳ¬lš~¡QÚyÑ•Ý4i÷À#8Î{â¡}7WÔþ5ô–xÕnÌ\ÅüïeA\w%W8÷¤×mlî´jVï©]Ë{¦‹l5¶ÄgØB‚Xg“Ž•±aa‚ôiôû ƒw5ÅŸåÛHX¬,7dcŒsõ©uxg·¹ñ²]G,²êðÆ4Ü# 1• ¾˜nHíœÑ½æ‰6²ºê¼Ó^èðAjáKù’,l­÷ÜsŽù¬ÝKOñrxzÕ~зֺ$°Ü\}™¥Q#! Ž@Æ~µ§©ÜßkðÆª–z|:uâµý ¶;£Â• ™Tœô?¥V½ÒÙž nÂKû»Öâ¼»ia*Bm.ˆ$Œñ×&µ¼uŸˆÞ(f²»·Žûɒݤ·uWUS“’0 ÎpkÑh¢Š(¢Š(¢Š)6Œç>´´QEÉbóa’=Å7©]ËÔduÄ/îΊú,²é’Úºk§´&áêI'½ýk¶‚·‚8T’±¨Qž¸%r–¯kãíG]’{F²¼…!òmè;OLs“šêè#4QEQEŠ(¢Š(¢Š(£QEš(¢°|M£êz²X¶—«¾5­À•ˆRË*à¬ëOL±M7N†Ñ¿–¿3v<³w$“øÕº(¢Š)–Š(¢Š(¢Š(¢Š(¢³¥Ö-—\G ~×$ 8îAŸÄþ•ÏøO^ÕouÿéšÄ¶¬tù㎊?,0eÝГê+­šxmÔ4Ò¤`œìOãRšƒí–ÛÝ>Ñôû˼e~¾”ñq Jb¡ ” 2®+D½Ô”êRëWšs@.ŠÚµ»€>ÁÉþ*ڎ☬RÆärB°8¥Y¢y k"^ªdT•Úaóü:?;ò÷ ØúW¨x—^»ñ]Ι Åi$vÛ¬é+ Ò+üÎAÏð¯§zî\íRI9=bxnçX:l²x†[´yî#kVù<¿áä÷­‡¸‰"yD؃æ;‡ÄøOÄzö½<¼ßbMâ)X‚B¼9T眓šíšêDvš0¯Âã ôõ¦ý²Ûvß´E»Óx§‹ˆ[nÙPïû¸aó})âåXžXÖFûªÌ?AYóëöxŠÛE,¦âh^có)P2=÷qô¨ô)uvK÷Ö&±p·/ösjNÛóüU¤·–Íš·4dãxqŒúf¤I£’+ÔÎ)&žt4©“Œ»ôæ\ÀOGÓ?xt®fÏVÔ×â þ•uunúrÙ-ÔŒ+)g#çž•§©I¬ÿlék§½—öyf7¢b|¸ùv~5¥$ñùž@ž5œ®UIúâ¹kš–¤ÚÕ¶±, =†¢öˆñ§—½@dóÍu„885ÂYjÞ*¸>(Óâ¹°šÿOš(ìåš#d2†;€'œìÖá`¶„ÞÍ JÊØRØç§K{k‚9naŽF‚¼€=qéSÖ'ˆdÕ—ì)¤]ØÀæáLâïø¢þ ¾õ¤oìÕ™MÜáp} Y#"¨êú­®‹¥Üj’Ç0£9.ÁAÀÎ>¦¹oÄ:™>Ô´ËÔŽÓQ»†Þâ×bI€à±ù»ŒWmݼ±4±ÏƹÜêàŽ¹4[]Û^ÅæÚÜEÕáú\Ÿ ¼Emšû˜eTʸ(; ¹éÛ5ÔYÉ¡AãÝrË̳þÇ}eˆ•13†9b:ŒkÂæÕ4?È‚Ý4·¹˜jLi@o+ÍüøÏµEâ…¼'¨}¢H’ÏþD:[y‹¼ÇþÎwt­OhžÒüWá8ãkuŠâþ[‰‹ÊØÉ?Ü$p:V²éV¾ñ%Ì70¥Õ¶¾ Å•óÂòçŽ+SÆWÐÝÞx¦X_A«Âe;œã d‡u@<ž{ô­›ë'þ5†ªmmçóôÖìȸ›ÌP¤rqÐúVCHñM½ƒ´_Æ× ä¦ÿø>ÀÕ­»ÿÂnÖËnú'öl[6ãË7X?snÆ:{UýM:Ëâ‡à°ž%Ž]¬Û~öL©]Þ­÷½ú×wâmxrûKT‰âeBFv¶>Vàבø{F¿¿¼Ðå¾ÓcjÖ†Æív /ÙÙHsîÁX~UÑêGHÿ…¬ýªâÙb‡CXV'#níÍødŒ{Öm…äOmðÂæætkÌ’HçæÛå2€OûØ÷«:TQ^³ÿk^˽ˆW† ²¨l"€yòöàäq€k UŸK]Ç—hƒûE5|ÚàH˜1üÉßžsJöëKˆî,¡¸ŽExäŒ0pr#®kÈ5{Ë+­âC4ÐÊ$¸CoÈ;ˆ@+ëÎzVӵNJ˜jW¶Péw,ie-ÊnŒ“þ³iÜþ‡éŠÀÖ­¤ÏŠ=VÊå­ôø"”jVåà, OÕ_îóÔz×µÙJÓÙA+DÑ3Ƭcn¨Hè~•ÃüPšÊ;} ¦h…Äz­¼ªXe–0ÿ9ö3\Þ¬4KŸxæWí.4‹ iv¶Hõl•÷¯EðUɺðV+KæÉö8ÄŒNNð 6}óš§ñ"Ío>ë+öe¸‘-âVMÄ6:|\V¯©éWš?„m¡mícÕ-ݶ)PʱÏÀé¸ã5±ÍÍ·Œ“J'È:•¬Î±¡!¡ ¾au uÁ®³Â°Bþ+¾Ôlµ(îíî-Qe[X6@ާåçqùñœ¦{Wm$‹m#°TPK1è¯.—ÄF­ñXj:²iš‘ò$wdšO¼W× Çº§‰$ñ\67ƒ†VX'šA·Í±-žˆÏø{Ö^«åφõ;¸á&©ª˜t›aʡ§šF8á]‡×5µ®xNÛB–Ñถ+=Jò!¬O$‡ !8>›©ïŸz‚ÚêÖÆÿÆ:Ù¶œ8‰-í vºÁµ~u…Ë>éV~X<:ž¨× ÓÛÅ ¼w¶íû¹S€W uèHõ¯J¯ Ô¶jzíª07÷ú×—+›;er²û« Ôà>1²ZK%½Ž˜÷—´x2’•öGãPhp^Þi>†÷Íþ˳3]_8C²IÜ«î‚äzµ¡àGòüY­¿Ù˜ÝßÝI$à¿d…8O»H™5éTQEQEQE^[Yî#ž[h^h¹ŽF@Y~‡µ*ÙZ¨!máõ4Igk4k¶ðº/Ed¦€0=)<´«“Ôâ“ÊŒ6틟\Rùh¯iQƒŠ®)©mr´© k#}ç ?SRÔ?d¶ûOÚ~ÏÚ17`ÝLõ§,+ïXÐ?MÁFiä<ƒLD:Dƒþ(ò">Zg¦vŠl–¶òÂÐÉO}ädOÔPÖ–íÆÐDQFJ ì)ÞL\~í8(àSZÖÝ—kA_Bƒï""0cLcn6Žž”¾R|¿"ü½8éG• 6.¯i±[ÃB(¢Ž8ÇDEÂåGv.GCŠ}7hàqíIå!$”\ž¼QåGÇȼtã¥'‘çyiæãöŒãÓ45¼-Ñ!Ï\¨æœˆ¨B¨ Iå'÷ò¡¢G2) #8 Ä„䢓œäŽôúBŠÝ@?QIå§÷GåJQ€¤f›±@§¸*…Pö‘ƒÒš!ŒË4ÿ¾i|´Û·hÛéŽ)vŒÒ‚ ‘I±Nr#Ž´GD»cEEôQN¦˜Ðç*§''Žô¸ c¥ P ž§Ö–Š(¢Š(¢Š(¢²¼Câ?ÃDšŽ¥.È—åU´Œz*ŽäÖ£â­oGЗ\¾Òa6®ý'&xËp›‰àò@8éžø®®ÒYdµ…®U#¸xÃáÏ#Ž´dUHoÄ·óZ˜Ê„Ud“9×J¶F)<Å+¸0Ç®iAãÒ¹ïk:–‰á{­KH··¹¹€‚c™ö®Üüߎ;VÕŒò\Ø[Ï,F)$]£?ÂHɳqsg¥\\Ú›q$(d?h$&Ð2sjÂð^¿­ø“HµÕïìl¬¬îc.ˆ’3IŒáO Ïå]gZ:RÉ¥Í&k˜Ÿ^Õ ñÝ–„ µ’Úâ nÓvø£\'·,q]8 ô¥¢°µÏÛx—Å'ŧóǥ5ÐÓéeWP¶ÝŸx÷ïúTšgŒ5›­OÃP]ØZš¬s‰Ðß ‘g>Øéú×wH#"–ŠËñÝõ†yy¦¬sM(Y󵂌‘Ç9À§x{R“Wðö¨ÍÇ-ÕºLè½²ƒŠ@½Õ¯mî_WÓRÆD¸t‰Pûãu½³Z ‚2ETÔõ+}'KºÔnIò-£ipp=êÌ2‰¡I@ :†õ§©–“pÎ23éFáœdgÓ4´ÐÀ’yéMÄHD$œ 0æ½sŒÎ”°^¤­€8$gëFà;õ¥ª·Ú…¾ž°´ìG2€ ’Ìp+Ë[Ô¤ñÝö…s °µŠÑn¡’"Ûˆ.TÏàô®–«j2ÝC§\ËeÏt‘3C6ÐîžÙ5‹6¡q£ÚͪÛGk~ñƒ41¾åFô¯ÑEQEQEQEy·Äm,ê>/ði»?ñ+ŽíÌÛ¾îü¹úãÖê7vw÷Ðé%º9̸ˆ! ¤ãÕ€À¯=³šóRþÆÔX–ñî®ÌÁO6öèX#²€9¦ªêޱ[øªàJóˆçŠÎ @šõ¸/×±nl{VÕ¢y>3Ôìî/ÞLX§”^iXoi1ÐQ€{f°4XÔz"ÙÌñK¨^Í5°ƒof»²?Åëô«:f§u7‡VÊÕÞÞßPÖ¼¹6±Åµ¹$lÝž„çýÿz]^XSÂúëÚ~ïKâßNÛ,¤*^zËqÔŠ—ûThκ——7yZtvòϳÉ-ÃÞ`^Áw=3ŠÑø}£‡½Ôíõku{‹3°ŽMöîÀ$¨sœœçœW¥Hâ(ÙÈ$('¼«^ñ«xÃÀqZXZOiw­]‹(b‚í~y÷5«­ùzî¡]°‡Ãú~”÷RFNr˜ESêsR+¶¥‘àɵ™mæyƒ“+•1C\çžY—bóL:’ÉàÏëÍÀ¼¸ºgKA!&8c8õ#$ µâ ã@ð}Þ·¨ê÷wKeKhÌv<Ø!qÏ÷™kªßx{Äw ?Ÿqwg¢‡¸Ën.w€?uB‘‘ïëPO©ø]//ç–òE:–©$nO˜F B8ûÌ£híõ­YõxaÔüY¬^\Ok<¤ivoeÞPò@dz›Á—pø~×^ÕuÉÞÓì!dßo£€s–Ü3œœšôk;È/ì¡»µIÈ$ÇFR2 OPÝ[ÛÜÄæ(äXI‰ 9ð#5ç–ú¤¿'æDTR·˜N3ëŽj׋#·›â„l‹ªDßkyQÒFÅ<ã¦OçÍsÇU»ŽÒÙìG‰d³¸w–ûÛj–ä…'>œWgá+YìµmjµÚ5™xÞKggÄ®d€9Æp:UŸO$“Ê¸Ž $žÕ¥ÈC™mb9 zèk€Õ¾Ò¾ÖRöÌÚ]Ù_ÛL¾UÑ–8Ñ™(ÙÈ\zfµÞ{câ?Ci*´gGWÚ­X«î#ôÎ*?ƒm/‚m´òÏÞŸ'ÛùÉdŒô!ާJÍ’óP°ðüV“ÌЛiä’V&+mà»’ >€š³âA©èºV§ýŸ{VW7¢Xläcö8Ù¶ÈÁ°0Ó§&«øÓH²ƒÃ¾(^‹‹`Ö²Ãk+®X)ä3’^‘á©,M’ 5 ÚÛLЩ.\1$‚Iã$¹ϊzioÇ­Á{*d¸*¤üñÔúŒsøV„´IÅwz~£o/“k"ê±?˜Ã *|±y Á¸ÿf²tÝn mOBÖ~Öø¸Õ/<ÙdoßIòºŽ0ÀžiØÉp<[e¨…µº²}ZXÄÑJÉr‹¨Yðê¹àŽ€ õ]Bá-4ë›™ „Š&v(2Øžs^/áJ =s·}Ñ_[\ †ß™.7³Í‚üôäûÒ;ÆÒX¨]VÛWÅ#ûñÉ´F;däqÖ´n4Ë⟱å¼Z\WEæG)™™yûÀãŸzÎÕ5ï´ömVR5  ¤®“$l•xñÉ~9­ Él5ýgÀÒÉw*½ÄrÛÝÈ%Ûæíˆu瑸ŸÖ¦:eä~ Õ3Çöª«äk^ð ΧpÓ»_ˆe˜ÌÃ*úzð9ë]&-¦§ñ.í#$ÛÏ BnÁ æ7pzàŠÂðžöÝxsQr6u%Á¦“÷Ñ>< Nyêï‘^—â ›Ã÷ëq/ÈrIm¸ dsõ¯*·òîü=ðÙžúTšâQΗ ¬é±‰SƒëÆ}ë¡ð½ö©mkâ›m$Ôd³Õš;Kyîv…Œ…'æ9àd×GáýCÅ7—ÓǮ薶ê€Å$7BRÍž˜ôÅt”QEQEQE Õ¥½õ»AusBßy$PÀþ¢±Ó,tÈŒV6ÛFNJÄr}ñOŠÂÒÞâKˆmaŽi9y0¾§½/Ø­q³Cþf6¿ýﯽ8ÛÂdi H]—k1Q’= ô¤KKxÊ‚%(»Pª´zAM{ I-Þµ…¡s–ŒÆ6±÷áil!HDyI‰°aqÓ’K+YŒ†Kx\È»\²¸zQKmioe•kPÇœíŒýMÖ³í´=*Êí®ítÛHn¬±ÂªÇñ¥¼Ó,u‰¯,à¸h[tfXÃl>£=*K‹;kµE¸·ŠPŒˆiÏCL}6ÊDt{;vGq#)ˆa˜tcê}êYí ¹ŒG<1Ê€† "† 4ÙÛ†¸6ñ™66 Å}3éíUáÑt»o+ÈÓíbòX¼{!Q±R8àš•ôËûFû;vûGúìÆ?yþ÷¯ãLþÇÓFœúØ-¾Äã oå/–ßUéV¢Š8"H¢EHÐTQ€ tS鮋"2:†V# ŠÍЕƒ.§©¶@GéSÏ£é·7Bæ}>Ö[€0%xU›R3DZF›¼°Eak2ñ$k …¨Ç55¥•­„ ;h­â;"@£òë‹h.£òî!ŽXòÙ0Èèpjt» {Y-¡²·H$Éx– ³ê;ÒæØÛJ%‚ÎÞ)ya’0§o÷xííXºý¶£¦Ú¥Ï†tëF»{”7Cb«€SåŠ9âh¥ExÜa•†A„P"d.¨¡È XHêj£hÚc[Oµ$¸“ òãøºu÷©FŸf· p-`(!dÃ=pjÁŒ•Pé¶Q h¬-·FÆHÂÄ£ê8àû×3àýþÆÿYŸVÓa®ïÞòÞMë!@ÁFÜõŠ‚ËF¿oˆzÆ¡¢¤ºuêBÌïì1« ÅIÈÎxÇ>µØM§Y\L³Oi’ *®ñ‚Àz{Ucáíù9Ò¬¿r1îäÏqÍOy¥iú‹Fol­îLg(fˆ>Óíž•LJ´k»–¸¸Ò¬¥†GYˆÆ0I£@ÑÖËìCL³»üÏ$B»7zãÍQÖôÙì´«ÛÏ éÖ#Z)û¦x”o9ñÛÞ Zj»Ôõkt·¾¼d%!Œh‹€ uÜ}·VÕͬ470Ç4MÕ$PÊTÆ£¨Œ .ÈÎPy òœçŽ8©m4­>ÂG’ÎÊÞÝä;ERØõÇZ¹EQEQEQERmVÕu”Ò‹Ÿµ¼&p q°3Ÿ©«´W1ãj>ÐŽ©ckmp‘º¬«3• 3c¯ZécbÑ«¤Å:Š‚ðÜ­¤¦Íbk§ËYI O¹«Àþ#ºñF‚÷÷–±[J—2ÀR',¿#c95ÒÖ'‰uæÐí-¼˜V{»Ë…¶·‰›hgny88j_ j—z· íö&Ÿpå•íäÎWŒòZÖ¢™$±ÄPI"¦öÚ»Ž2}½sö#¹ºñ¦£áû=a[[d¹Žu›w˜¬Ä00x5ÑÑEqÍãyþÓìÚT·mÍóX­ÌLKRC9P0FIíÒ» ÅTÓ5+]^Å/lܼX+FpÅOÜ·Y“ë1”Ô㱉®ï,/n¼b»•A^•¥Ý^ëþ*úÅúÿfj %¼"v}ØMÅ9= â’ÃQÔ#м+®Gq4Ú¶¥¨ˆ®ãÞÄHŒ[r•è6éÆ++[ºþÑøªßê³´z§öÏ’P¹ùUeP ôÚ3ú×G®M xÓTIîçŠÕô8m•w?2àðx+3I¼¿ÕWÁz=Íä¿d¸Ó$¹’V•³4Ê>PÌHÎ3ÍIkk:G‡5 ñ©D–3ÌdŠá Y¦Y6ãwVØ?:ŸO—TŸ]дoÞ,–ñX\¼’E) $¨ûF[Œ²¯ëš»ðßWÓ4‡ís{¨A²ßξt“!Æ}Íz*:ÈŠèÁ•€ Ž„WžüFÓ¡º×¼&Ò\]GæêKyS²äÐûõ¬GP¾k_Éus î‰2Å`¾k *ª•%s†.O$ç9¤m;TÖüo}§G­_éæçH†è¢ÎÌ"˜·$.xxé^±4pFŽæGUœÿÇZóÿˆzlw^'ðƒI{w Ë~ceŠr€ÀžõJâ/·x÷Y¹·½¹†%Ð"”4rrA}¼Ž}ÍCkâ c[›Áú|­<_ifîá¡›Éi¤ÜÆ3’Zì¼>«&‰,:ÄÑMwms$>bH•åÜG€ ݾµ¶rÛ¦„H¸ó!}®¿CÚ¼kà >›áïÜ[ê—©ö=´‘ÎÇO2L¾§šÝÓ,5»¿øŽ(|G{¦™} Ʋ¹“ä)¹ÔûƒÒªhWZ¬ó%®¨oã‚ûO›Ë»ŠôËÓà7˜¼æ3€xéÎ+wáT¶žÓâŽææ[‰­yI‹¢Ì>POË’NµÞ°Ü¤dŒŽ¢¼Ã–V¶7>1-}¨ ‡¿šÞûS–!¸óÉzþêEžûSÒ~ÎúÕô3_ËG9rùeŽFzñ×­2æóQ³ðî½vº½ãˤjâÞьğ,È™WÏßáˆçÒµµ+½gWñN¹§Aö…vq5 ŠçÉÝIó?8Ïb¾¢ºãüE%ůŽü*a¼¸Ž+©fŠhD§Ë,LÃ+Ó9ïí\}õæ§eaã[øµ›íÚ^£Ú#ÌHLì$Pwc¶.à>*µíÍÝØé1Î#IØ Æ\cýÓ‘Þ±[YÕW–~&Iç:Ժѷx ´§šÉåléÐzg<×°¯ Á¯=ø×ƒðÒ÷æ DБŸúè+BmÊ h|M¨êÜO§Ù;[É2®Ë|¦KP2xï\Ç…5{ˆ|K¥[]ê3¼ŽfœÉpÏæH]U$Q“³;ºùUŸXß^i—z„šåãÅc{}•$…ıUAÉìyÍQÓ'š×ᧀ涻š{è!*R¡‘²ƒœ´ÝoX™u]NþßP™Þß\¶¶‰ÚCˆeD‘ÎpNI­_Ôâ¸x¥aÖoÒÖ %/".ßjÊwá—žËÐqOѵ-J=CÁ—Rj7ëRÉwHLnÂ0˵z.T~»×õM7IÖ÷„ž{æ¯5áU1—dò–>Ä|¸Ç9õ¡©iº§©&¯},¶¾#p,³—QšªT‚~n ë[VÐÚÙüS×nî//–¶B5YØ‚ÒJ畎: ôªò}OWÔnŸÇŒ——óhEVÂ$•‘vYAÃn>¹©>Ó©ßø‹P©ê±ÿ`G~Ð$Äçlôôt®ÛÁzÖ­à½þõ÷ÜÜZ£ÈØÆX޵ñB/ÃiŒóEåÛ³æ'Û»¶¨9äW1«¤&ÏÁvw“—TŠ6–G,ÈZÄ)>†=*¶¥â-oIÑXô‚¡“Âú¶ض—l-b}ñĉ´#zŒt©.¼=¤ÞÛAm=„-¿ú• ·ËíÁŠtú“si¬ú}´[œÅFCíéY:¿ƒl/4©4»+ [[¹„—x€dû¨n÷=+£‚·‚8cŽ5£ÐYú—‡4^æ+B‰¡ÿVò •úQuáÍ"úú;Û›¤¸r:ã¦GFÇlçÕðÖŽšÉÖÆ1¨·ÇÛ¯OjÖ¬í_AÓ5è¢R´K……üÈ÷ 7¨#‘Uäðž…,òÌúdYPG#à‚Ê:.}=¨›Âš$Ú}µ‹X¢Ájsn#fCû¬GàkFÆÆÛM´K[HV(S¢¯êO©÷©'†;ˆFcu*Ã$dqXià GQ®‘Hdóc\¶ÿ¼9ëïV¬¼3¤é÷W76¶¦9nA°‘Ï™Ÿ\žO¿j[O hÖ2 -tøbaˆm<l÷õ¥Ñ¼9¤ø~9#Ò¬£¶Y-·'8è9íÉãÞµ+O hRÝÜݾ™Ot™ñ÷ó×?¦¯„<>°ÛDºM¨KRLgú¢zíô¦7‚¼6ñÉhö¥%mò.Þ½O©÷«7¾Òu !’âÐ3žZ2»)ÙýÒA_cÅV»ðäÞ"Óµ¡¶éÈ~Ͷ?Þ ޽”Àþ•½Y·š—¨_Á}wg·P`Å+g)OJ«7ƒ¼=p— .•nËpÁæ8‘‡sÏ&¬Üx{Iº½µ¼šÆ'¸µP°Ès•ä|ž{ÒÂ9¤iGìý¬>ñ& Óv:gß­JÉÖ<1£x£:®Ÿß–0¢Là½3ŠžÓFÓìtÓ§[Z¢Y°`a䩨æ¨ÁàÏ[L:=ª2#!9P{~ƒò©­¼-¡ÙÙ\YÛi¶ñ[\ÿ®‰ ÿZˆø;ím±Ò-|ˆ›|qìùQ½@ìjk hwo;Üi6r<øóY¢¾1ŒþCò¦Iá=Yå™ô«S$ш¤mŸyE>ÞÔAá=Ö{iàÒí£–×ýC*àÅþï¥I†´xµ /£°‰n$$³ “ÁltúõªÒø+Ó[gÒ`0™<Òƒ þ÷¯jÛø{I“U‹S{ìJf9ȧ×ã5§Y7ÞÑõ+Ñywc“ »‰È·¦à³šlÞÑ./n/&Óã{‹„òå–˯÷O==ªæ™¥YhÖbÓO€An§+b@údð=ª[Ë;}BÎk;¸Vky¤‘¸È`zŠÅÿ„ÞU¬gLB¶¬^ÈùFõÎzûÔñøOBŠ;ÈÓMˆ%èÅÈ$Ÿ7Üäõ÷ëRé>ÒôI%–ÆÝ–Y@W–IG*: ÌIÀôéZ´QEQEQEƒ¨ø Õÿ²4û#}¨„ÒGæ¬k€I>¸ì*µ¿m'µ¼ßm,7ö“­´¶lÀ·šÿp郞µ~ÏV»:¢éú…ŠÛË$M,M¾b°Rp0FáÚ ×¼J4¿ßjÖvÂù,K ÐI°¿{ŽH­M2ôj:]­èC¸‰eØNvägëé.â´w²‚)îÝŽY )ü@8ü«›ðwÓÅM©C-‹ØÜØHHÝÃd÷ôâ xÎoÝ^-¾‘$¶s´O,Ãæ#ûªÓó®¶ŠÍ×õWÑ4KI,ä»û:h£`¤¨êr}4í UMsB²Õ"‰¢K¸VUF9*Î hV'ˆüK†ìÞê{ 똒&•šÚ-Ê¡FN㑊³¥ëê>µÖ ´Û‹‚$aò)äý+2ׯÚmΫ§Ø4sÂÚ’3Ù< :¨Î@ ÈÈ{\ñ¶‡. Èï.¡t¶ÐªúžI>À Óoµç‚ý쬴ۛùâ@óYF@K’qœ ³£k6šîš—ÖlÆ2ÌŒ®0ÈÊpÊñ´(¬ oÅ)¡ëU„ö&¥0‚;„+±ç‚3žƒ=+~Š(¢Š(¢¹h¼qi7‰"Ò"³ºt–imÒéT2F2ãÔÓ>µÔÑEQEEsq¥´·30H¢Bîǰ$×=á¿Åâ;Ù­“Nº¶Ùwò¶Hß•99Çj·â¿Â-¡M«5„÷‘AÌ« ((¿Þ9=+VÒánìà¹U*³F²z€FjjçüEâËmFmQm¥¾·I¼™ ³)òÛvÞrGñqÆk}[rƒŒdgGV¿¸Ó­„öút· dºÇ")U9ùˆÏÒ°´¿lx{ûrÓBÔZÈ©u%¢ Ê3’þØ5{Ã>'_XC¨Zé·pYN…âšrƒw8ÆëÛµoQEQEQEQEQ\‰´ÍÛÆVšÜK$¾"í†>ÈØ €ÒzŸÆ°Æ‘`šv«cu{öí[X½….oalG ­’»'@ãÜŠÒÒ4-kÃ^*†Ò÷\—V´¿·’(盋‹P£9‘ƒÇ>¸¬-:Xàø?â%íÌóÜÇ{"¬­»©=?Ú­ßϦx«Ãº{_K,º1–h\å×n áëŠôg;PŸAšñ+uºÒ¼a£Éi¹£ñ-‰µ”¯Een[þùÍtž½K?ÆÒ‰’Ý-u;‚¯/Ü 0O·[šö§u¯éöÚÏ•©éዸ—pPñg•<ùT:^¯â;o Þøš]fK¨tÙ/#6ò >pV*™ u¿¥\Gñ èòÜÝê u§Þè2O –Q¼ÎW$"c…Ô^¾Õ4»ŸZ¶ òÛj–.%¶e]‰²0P®G¿<×¥Á}ku$ÑÛÜE+ÂÛ%TpJ7¡ÇCX¾>%~ø€Ÿô ¸?îåõ׸OÙü›_õŸÙƒî•]ߦiÒK6âo¤©ó^Å$ ´*Ûƒ˜È ؃šÈñ&³¨¶»áfÔ4mHNº»HªÃacù¹ÀñÜ×G©YÇmâ•×4´º:õí ìr̆ó%£ã®8õ­OiÖš„öËö¹ZêCqrÿ(–r~m¾Ùãð®’â#=¼‘,¯u*$O¼¹î=ëÄ%ñˆôK‰ ¿Õ.åþÉÔŒz“ÐæÙð#aòûþ†º?Eª>—à´Þ4—ójñÈf•t{‘Î0Ö–ÿÆ:Æ¡øLÂòêÃRŽÊÖs‚¢@œ°éI¬ê~$Ó´ÍuRêþmôñwkwr±y¦EÈtÚ+÷ONýkGFÖu˜|]¢i×Ú»‹SÒM܊Ѫùr.ߺ@éówÍtž/ÔgÒ|'©_ZÏÂLrN~Enƒ?ÓßËøKÄ—¿ð•\i•ì®go4"è(5ÃQ€8Â’23Åm|Añ߇<.×V*¿išxí‘ØdF]±¸ý?sÚÆ­â_ G —{y®-mìn%‘^UóWrg8ÈëRëºÖ±c'‰´»]BUm;KŽþÚçb³«ÙFÈÁnzw5gNÔu¯øH42ëRy¥¤=ÄŒ#@a”må01ü]zW3¤ê‡<)<°^Mq-Þ»%‚nTÄE¦!¤ ±ç©ÆqZ¾!¾ñŸ¡ø‘–òòÖ;8æÂi3+velg+šMSQñ>Œ4¨¦Ôžê=nîÕ¢Eù{¤ N,G”xŠïÄÚgƒµ«uyg%ÔfÆWxÝ䉊‚²c9Á-ïÒ­Ÿêšµ®Û]]ɨÅi£. ‹"("L° måàqTgÖ¼O¢øv/›”¼µ—I7R¬Ò.B( =ϱ¡_ëÑkÚl7 yq§ÞÚ–k¯-vNo)ÎÒ3Çn*ïÄrûCÐ m?)qwy  ›ù!Û¹ãéîk™×îo”ø·ÃM¨Þ=­®”/#˜3Œ«˜ŽTã>½k¯ð%¬–Þ ÒD—3NÒZÄù”Œ¨(0£p*¯Äó†š÷ýz‘úŠæ¦ñ.£á ’ßÍ›Q‡þö¾Øø;$LŒç§µh[k¬7þ³“PšS®ØK$’mR`” pÈ1€9##¥r¥gO‚Sù×òÜÜÜ̳,r…ùsuŒäœžNk½Ñu Nßhw—Æî°Ší£U(ÌÅX Çë§¿8Ó®NqˆŸùó_E©7ÁëfŠêÙ`6³-Œ¿}ÃùTZ.½wáϺ5Õª©¹.Ú78eBòÜ{f­øƒ_Õôvñ•«3Íg¥.£ÓF…”ä†VãéVÓZÕâñ=œGT߯€÷¦ #]«*…²qÉ?sñxãZÑôÍBæú=D\ŧ¢†ñ£–MÊ ˆéÕ>`qèkn=GÄ–\·›s$éo2ÜÞ˜”%ÈùBÿÏ~)Þ×µ¿ÝXjrj°¿ÙÒ×RÜ ÈÊeäW¢QEQEQEW-©ü:𶱩M¨j:`¸º”‚Îò¿oNx{OðŽƒ¥é’éÖZl0ÚLÛäŒdîo\“œûÕÛ"ËOÇÙâ;‚í#´ŒÓsqíYÑø+ÃÑ[Ý[®›“tIš2ÌU²rF3À'œ*Hü%¡Åm}[›P7È===«GPÓíµK6µ»Vx_ï*¹\þ ƒY–þЭlⵂËdP–1#æ2ÃiÎFG¥2ÓÁ>±[•·°Ú—A„èer²î;8'Þ¡‡À·¹´¸ŠÎE–ÑvBÞ{’«ÆIè1ÀíW4¿ é>›s§Z[¿ØîKa–V‘Nï½÷‰ÆsÍT¶ð&‰mi%°K©"xŒIrí²2rQN~U8 |^ÐáŸOš8g§ŒZŸ´È|¡èî•…¼.4mSZÕ^à¸Õ'<11eP3‚IêÇ$œqÎ+WXÐ,5èD:‚ÌñmdhÒwX¡‚‘‘õ¤Óü?§iš{Ø[ÄæÍ£ù2ÊÒ(P1€œ TV>Ó4ûÈ®¢ŽWšÌP¥i<”=BäñÐ~TÍOÂZV±}íêÜÉ•CO𮕧 ¼¸^c,^A7‹þyŒô^Ošo…tÝ.î;˜„ÒI F<é ˆc?™è8•Soh-§Ë`b¸û,ŽËዸ< ÄœzÕ»o iöº÷öÔr]›ß(BÌ÷ ÁtRÿZ¹ªèðë¬SÏu.àD4{ 㨬Ë?év;i6’ßEbT¯’·O€r÷LÕ½FôiÚ|×f ç.ã ¹Ø{õWÃÚí§‰tK}ZÉe[yó°J»[‚G#ð­J(¢Š(¢Š(¢Š+Í£´Ÿo]YD6¶ _³Œ,lÿps×½TßÆÚ«xv-ÁG©}•4𫱢Þäã;ûç?…h]x£W¼‹Äú••ÊÛÁ¡6Øíš0DåWso'AŒW?â|Oa¯Å,¶rO GX¼Ï$¼€å†: ó^¥ GpšL-q©IäÅÆÅPÀŽÁGJ§ãIoí¼)y§_;‹X^pâ5}ÛT¤Zæ´_jö÷>‹S»û[kÖîΫ¨…‚Hç9Íehî“àm.+I’3y«Ï Ȥ_%ƒ¸ñéWcñΨ¾‡æIuõƒ¥EpÑíÝ1—×ñëN»ñOˆtYŽ—~¤Ks©-­ãF®íÝÌûrx wïƒ]/„õCR“SµÔ ˜9ÂCs%¹‡í‘ÛN0zŠé$Zó'\ñ”ÚÞ³möË;«=PXçw„#<%w7Nàtõ©´ë¬z^ª\Ok¨Lë%ªÚ¶ÑüÛ_ÌÇ={síPh>6Õu»çÓ¿´mí¯¬’¼E`('.3Îiú5Á¤økUÖ$·–bcnb‚¦3†*àçœíäzvã[TOÕb†i­/oÌ h–ˆ ÉQ!“È Î9ö«šgŠ5ím!Õ4ëq%„Ú›Ùù;î¡RTÊÄòNáÐV^•s®ZøÆz§ö…¬óAypq%¯ÊíÓwL.1ZrøƒÄOáXm'°Ž-bÓ|ŠðcqbÃæäsÓõ¤>8Ôbø}«½¼2_ÚÞ½ŽP,°”F$ÆxƒŒÓ¬5ÏÍãÑ#k «{‰¯n f2ÑȤ .?Ž•ß×t?-ß‹åF±ßz˜ÓgÜDƒåÆÖ?Âo|šé<=ou§x^ÎËk[{¨ ýì6ç«zýk‰ðÿ5koG‹S{Qo©‹è©…¶1ç“$8#¯§µzZâ/µ?ÂÃ:¶£o¤Ö v¥­·4D6Üuù¹þu—cñ ëZ—I°ƒ6·3Å<—S%¹—o”û0‹ÏVçž‚«êzž»¬_x@Ë2éÒI}*´SZŸõ‘£âLä:õ­k­oVþÖñ%„7–¸¶ÓîÞá`ÉËnëÏÍ÷xúÕ ;ý[Cø}á{ym/Ÿqk·é¸s÷†IÏ¿J±©xÇQdñF¡e"Åmáé~CÆÚ}Ǩ멩æñµwâi쬮â†Í´tÔ£g€3FI#içœãð®‹Â̾!ð–™«OÇ5ÌÝW n‡•s_üèMowPûd’6‡qf2®ÓœŽ„tïQÜê>)¶ñuç‡ôÉ´é%þÎ[åw·òÃH_k‚zã9ª÷>6ÕF“¬ø…dŽ;='PûYˆÁó•YUر䱯=)—¾#ñTZ¯ŠbƒP¶6ÚM¢^C¾Ôn`Ê[aç§g­ii~(Öľ·¼x$¶×,^äD‰ƒnÊ¡€ üC Ž{×{^yñ=æKÿýç:ÂÀÎÓÔö«~×%¾ŸWÓ5hÒ=~Î䋽¿òÕÜuÿgÕŸÿ ¶­{>­u§ÛÏ*XjÎ;(í ùÊ¥DŒ\”òHú¹¤¾ñ'‰-/ü\îØÛèÐ¥Ä!í¾gÜ…öÃ5©uªj<ðÅÏöœ–ϦË|ˆÖû„?*nÉ'œ†<ñŠôåuoºAú伫ëÒ Õôé¡°L‹yï>S0ÁÈÁáßë:î¿>š—–€Áy»þ=È2ÚÜ|ÝIã>õ“e­jZž9ÕmÜÛZk¤ŽE%¥ ü¸çžk¦Ô|Su¥øÚH%ɧ.& BʼnWanÏ#­C¢kÞ#ÔÆ—y=²É§j–2\HÊ¡VÙˆÊ =Xã®k˜ðF±­h¾ðY=†¡vÖoå|ʤ± »=r>•ìBhÚVdC"Œ²†…>Š(¢Š(¢Š(¢¹ÛÏXÞøµ¦¸ºŽi"H¦Š7%U9]Üg¯¡¨—ÀšJ\­p¶msö¶±<“/]ØÆzóŒã5-÷ƒ4ëë›É ·0Å}¶Á€—ànã#ŽȪ—ÞÑõ}Zæâqz‡ìËhUlF,}ÕéZþðõ¯†´áae=Ô–ë÷â]û ôKÇ·[øX±[Y"@$³²Ö²¼áý>ëÚEïtòÃb ‹{`Û 8^2G|Õ¿øWz ¶Óáê7ÃN™á³Ü¡#-žøÉ’@$â£_ Ùh–QÜO¨O,:u»­¿ÚJâ W–À'Ž95Ïü5Ьu è7Rj uý›¹ã·mŠS¸dñž„àZê,|k§8ŠÚöí4ñ9¸[Ëå‡'w\nÛžqœQiàÛK¹Úòî;'¹7fÄò¼ÒrNq»çÆjøA-êñG©_Ço©´$*˵ ˜ÞGñß8ÉÅ*ø&5›H•uDI¥Db·?»ÁR0w œðü+›ñ7‡ãðç…áÒ-µ V+ýI¦šòò5xb, 7˜i=3ß?‚Ž©§ø´ñ©éº½„Ð4Ó\Y[ˆü— A äzóò×£ÑPÝ[Gyi5´¹òæF°ppF pñü*ÓR 2Õ5#Ó·$ ̘ò›ï!ÂŽ¾½k½ç:³A'Æ«kæµi%”™Œ¿sž¹ã­t_ð„éÐE§gË=Æž¬°\DAråƒdÙ<ŸzMCÁVº„v$ßÞÅug3Ì—HÊdfu*ùÈ#}8íNÁv1jwW¢æè‹›5²’˳ÊP@Œädœç½Sl›IµÓåÔõKYc’'Þ‡—þ¬}Üa¯5jÿÁVWó^¹¸ŽÞÿa¾·h[‚¸ž22ÍMsá 9õYµ»¼·ž[QfDL»DCø@*qÏ5sÃÚÑ¡Òígž[x#ó˜£Ó *øfAW—pÅ ‹(H@fR “zPÛxN+Éâ#¨ÝËtð sìÙåŽqÂç¯5^çÀšuÍÕÁ3Ζ7W usb»|©e9îê4¼wHÔ2·*¥±€N8­ÊÎÖ5Í?AÓžÿP˜Åmú£>ß®ÐqW-®#»¶ŠâݨԑRÔs̶ðI3+²¢–!³=äŸa\ô:Ñnµ ´ø>Ü÷p(yaR¼f¬Kã õ—Ô# ‰ä NÇÎ6‘ŒƒžÄVÚ8t§*à úŠÊÒ¼K¦ë•þŸhòýªÄ…¸ŽHY ç8êsŠ×¢Š*+‰ÖÚÞIÙ]–5,V5,Ç€rOµsvß4[½QôÈcÔú0¦H Œ¡…†8ÖÆ³®iÚ¤wZ•À‚%XUˆ'.ÇqZ†qžzÒÑEQE2iDI)V`ŠX„\“AÜÖG‡¼S¦øoœfÍœ¾LË4F6WÇLÚ¢Š(¢Š(¢Š(¯>}kÅ|G¹ðÜw–imöOµG7Ù¾dà–çëT?á:×o-4Yì–ÕZ}I´Û˜äˆà¸ÏΧ<:~µwQ×¼QböV7²Z[O*Ü;K‰„?»ýÙÏc'·µVÔ|Wâ'øccâ«)bŠdï"òCMÛY†z9©µM\‹ÁúÖ»miskSi¾×"E ž}NÒ­\ëž">,M2Ö{Ao.”oAh dq½ÎM5™k-ô ·‰Zh”ä#‘Èüëƒñ'uMVԗȶKk `UŠD,÷)!°`ß. î;W¢£‰0èFkÍ5‡¼‹ã¥ƒØÛG<¿ØŽ6É&Åûç¾ VðÞ£§èÉâïêzón¬cÊh†ï×5¯ŽïT0’Þ §—N{ØE¢±²€LNsÉÁê1œ+#PñÅöµàïI§^éÒ K564uo›pu(NT€#úoÛëWúzxÈֿÚW³,‚61Ãh+œ–è:Öl¾>ÕäÓ-.límuÕŽ“w †Á“8 ‡<‡œõö«·ž'ñ%™³´¼²´³¹™nÌÃÌŒùgäCó{â²µ¯kþ‘à‹«¶·þÓ¼ŽIM͇U,ÃòŸ~•¾Þ ›Lñ.®5 {3og¥%ë\[¦$nX$žGÊqPÙx³Só´!|–Šºü.Ö¡æ ½U¹ùÆ9¬í3Çûiúv£¨ÚØ}šãT:k¤!·½”H < އó¯F–E†'•þê)côçö><¾ŸNÒ5Ù£€iš®¡ö8 T>djK*9lòI^F;ÔÒîï¼WâGÕ¢Óîb‡TŒÆÅÖQídÉÀ~5èÓù¾DžAA6Ó°¿ÝÝÛ8í^A§Í¨ß|,ñ„ºÅ«‰¤¼#ËB¬][ y?wŠêt¿ßiSXØêPÁöFÑÍâ4@ïAPU³ÔàƒÆ*¾‹ãËÛëÝçŠ-urÀG /¾ÓŒ¦ö<ô<kЫͬšð|eñA°Š˜iößëܪôö²4­A4? x¦æÞ8gÕmõ#6§ow茌ÄÁû½Á<ñÎ+§×ürt]gì%¤/²#w Ëöç¯÷A‡­bͨjW¼w¦­»kK{‰<ðHm±¶`ŒgŸÒºøJïuMOMÒ´¥‚ »4j3Ip¥Ö48@d’zçŒVBø÷YÔ‡$Ómì¶j³Ik*J¬L2Æãy^>¿ÒÄþ<º·ÓïàE ÍŽ£ö«„äie 9Áàuã5ÒxG\oh ¨<¶Ò––DnNƈžA#Þ¯:Ð þ+ÇÞ6ÀþCÿ­ZÞ5ñévEì’ÖâK[‹qqñÀ‘©†ê{Õ(çÖçø«}ÜÙ-½¾Dx˜®çÜ|ÙQTíýí Óm¾Ë ·”¬¦2Alž¹8ë]upz¯ÃHµ5šÅÌj“%ç–­¶TÁS“É\»]n‘¦ÿeiö"v™¢\X`³I8ú“\Ëø#S“Åiâ&ñ#›Èà6è¿dM‚2rAõªñü/²þÕÖg¸Ô.&±ÕYäšÌ¨ $e*X¡8­ðž£6˜ú}ö¼ò@¶æÞ 6QÀÜÇ's=‡|Sn| ¡g©C}~e–ò×ìžzB±°Lç-¼ÙïÅ"ø&hžÆú-XbÑœý­à]YB•(ã ½úŠ®~¢éÖÐjo–×ÿÚ2Éä©óçÎrGaÉÞ•«ªøI5?Á¬B{y£µ{GDPCÆÇ'û§ÜV4 ¾Ç¥é–ÖZÝÄwuÈž ä‰_!@¥x_ZÔ‹Á‘^âúçPšâ;‹a-»¢…hÆ};䓸Ó4ÿ‹[­:KAîSJ…¢ÓÐĈ0 ¹Ž~fcµPd]ÓN]~ãe­ñ¿ºæî-϶Iâ»p‡Ê !váŽ1Ÿ^+‘²ðµ¤–væöI4› ¦»´²1åÈI#-Ô€X*þƒá«UÔ¯dÕd»„žl‘¼*¸|#¶®Š¸AðÕSHÔtÈõ«…¶¼2íJ“ÊÛœß$OJ¼ž êö—×:»Î–öMb`0(W‰±¸zœiÚO„.tß±ÚɬÍ>—`ûí­¼ ¬1¡Ü°ô«¦¸ŽIm¤Hfòde!d aìpz×#ï­|Ey®CâK{wÅ)khÊ•^˜³|;°oê\W—¾¥7Ÿ}tB´“¶sÜ`sè8«¾{ßµ$š£<7xä\aP.S?uŽ3ŸÓŠŽ_ gÖäþÖ¸Q«À ™DI„@ ¨à3K‚å³}:æÇT)ghl|ù`$‡ €TÈÀÁ®kÄ:U¯‡oü £Ø^-·‘y+¤`I&2K0ã;‰?tñx&(CM£"»ûuê,s3ARª0¸ãYþ‰¬õfñü²_ÝGu<ΈX´x*8­I| eñjÿÚsxaŠê!â)‹)Ïðòy³æøsB ‡Y¼†Þ=CûB‚!É»qê2FIë[n…ý…}¬ê­{qt÷ÄM"_”¢àÀôÀü+Í,[S´±ƒ\´ÖôI¤g3Åe=¾ndbq°Ùó1òäµÒë×ÚGõ;¦ö”rJ¬1° Üì=W.}XW¢\N£ðÖÇQºÕå:ìQê’$ÓD›p$Lm`HÎ8éÒ¬ÅàX¡ÕP‹W¾YÖÏì}##a;‰åz“Í2‡ÖVšV“ik¨^G>”ìÖ—!‘pÊxÁJŸÂÞ O ꕞ©uqü†i!™WCÕ²s]MQEQEQEf_K¤i ö«¥¶„»à7–7;{`dŸ¥2i7Û­ØK‰ËHeVG'û¬è kR‚@ÈéKE5ãIkª²žÌ2(Ž4‰FŠª:Ea\xÏö·†Ò}Vî˜ü¶È%‡aÇ?…_°Ö4ýLȶWqLÑýôSó'ÔuzŠ(¢Š(¢©êZ­Žiö­Fê+kpv™%l Ôö×0Þ[Eso"Ë ªCЊ–Š¡ªëzn‰ rêw‘ZÇ#lF”àéWdt4´QEQETÓõ;VšÂî˜ÒC4NGêÝ{máÝCX[KØ4ëHD$XæDiBÔgœf¶qŠ(¬Ø5ý*ãX—IŠö&Ô"RÏoŸœÔãÓšÒ¢Š*ej³ùâÚ7üô7~tõ‚%™¦XJà áFâ=ÍIEQEQEQEQEyljÿ.-¯7}ŸJ±ßm}ÝÍ·.=ù®»Ä:u‡ö¶“®\´Q˧´­¹º²Û zãüëÛÆ÷Ïk¢jÓCéšÍÏÙ¡ŒæE»!œàçŒwªx÷Ä6VzÍäö:|ÖúE趘ÂÌ À2 ô##®ki|M¬ÿhê:\–ö)y‚ßÀÛ˜¦ÒH*Ýò1ÔVF•ãýzîÛÃòÜévIý·½ +e{·û'Í[ÿ…‡2hÓ<¶qi.«ý•hÇËysÃg¨9ü)Úõ.Ë^‰í­&Ô´X’âU’9baœ¯R [Ò<_sâ; 'RÓá€êö†RÅ@ÆUò<ö®Ê¼ëâ$Âßžu„ÈÃQs±1¹¾Nœà~´—–Ü,¿ñ°ÓÖÞ;]4–rL\`–,ÅrOéSÅñøø~=b_ΖÓA Èr–‘¶á°21ÁïÁ­MÅ—ZÝ–®¶öÿii’ùO¸Ý‡W¸öëTtOÞkVVi¥ÁS,Ïtëæ¶XŽ#o'Ú—Nø‚—òiÌ-íÖ U,€¸Ì›€%|ÅÇʳŒŠOxãTׯ­ã:El×ÚÏ:J\Dñ÷è>SÓë]Í2Y<¨^M¥¶©m«Ôã°®#Añôº¾©§ÚO§¤ ¨Ç3À¤ÉŒà¬Š@Æ{U øxm®®î´1¥ž¢4ë™çqX.äFá’=?—Å~!’þÃÅZ]•¬3E¦ÙtÒ1Ý—F8QŽÃžk¢ðf?á ÐöŒ°Ãÿ  ½¬ê¶úwª]’ µ‰¥|u vÊ[xÚüÿf­Ý•´Rkr\Ø(à2¨`’R9õÊÞê:†©ð*kýZËM$r¡G,Ç3ƒÐŽ1Ðx®ÐxÏû:çR¶ÕíVcb·Á¢rá£$Œ#éÍAiãk‹¹b·[{?µ]Ù5ݪ-Á`6à”“†ÁíïGƒüa¬x•¬gŸBû>ŸwjÓ …°WVÛ´ñß’=«¶®ãâB[ <ÜØiשc;.ã#ÊÇbŒ.zššëÇmZž£ ¬o¤iwBÖæVr$-• TcRߎ G{ã]Zß[Ö4ø4›Y£Ó¬ÖûÎ7%CÄr@û¼6NžôÍSâ*YæMZÃõˆ¼í’ó F¬7}j8u­vûâDñÙ[ý•4¡6Ót@"F\±H$Æ=ZÆÔõÉ­þjm£hÖšqþÔ{Ö9ÈùŒ © É$û`~UÖŸê–Þ Óô)ôËoµ]ÙË:²]ªÑãå?&pr9ý+žÖüc«ê¾Òotý>(÷RKWèåfÆvœžÃ±­‰5K[OGý§£ZÃz4§¸7é&öHÔÉ÷G'šu—§œi3Y–ZÓ2X°ï ‚TH1¸Ý*•¿ÄKÓcõÖv«ªfLÑÎ\‡ß³r£#57ˆü{q êètôû-‰ƒy•ʼâC‚bãoz|ªãE¤€†äœÓQ]Åp÷þ/Öí|cy Ã¤ÚʱY5ôsØ,a†Þ¤ñI¤øúmBmYôÅ‚Ç[Þ¶ÒyÙue\üËŒ`à㚊?‰K4WI³iRê`R%Ìû·mmÆîý9©á=™ =׊cÒ;MÍxöÏHËþ SÍšãP”3ù3ž™äqŒTמ—P°×ú’ CYTŠ{„ƒåHÔ`*®ï×4è<¨Eâ½3]}^ÊÓìf/²ãzq“Ü+³®Ä~Öµý{MÔN¯g zeÉžÚ1jÄœñ†;ùüt:•Ž£¨xn{´ÛGy›gdÅ —È"gíW=022G'ªO hwþÐõ8µûV‰åšìM l eÉfÈ';U¦²¾µË¹n®^Whåš=ŽbÏ˹{szèo k›)àIZ’6E‘z¡#â¼çMøq­XË¢¹Ö-AÓCÆZ(YZTr 1lçyÇÒ¤—áæ±.ƒ}¦RÈ}¯T‹8¸;ƒmÆî™´µ?\ÝM­½–£¨× XïAˆ±®ä9ÎyÍt>Ó.´_Ùé·w1\½¬b%’8Ê `dy«Z¶™m¬é7ZmÚ–·¹‰¢¸#µs6> ˜]i¯©ÞE㊫wà9e‹SÓ!»‰tmRóí—(ÈLªIRʇ8Ãêzdõ©n¼¨ËªkwpêV‘¦§f¶b6¶c墂;¹8cúT0øõ4ÛKIµ ;…·±K/*{?2' Nil†Ácø+øòÛV²ŸNÔcKhôø¬g¡.Ëp{ã˜<xÞÕ4©õH]îïÿ´"•mÊ„“x‚7r¹v8«RøGSþÓÓ5h58?´-–uœÉ 1¸˜‚ÛFr0@Ç5FßÀöþ³Ò¥ÜØêBþÞfŒíl9}®3þÑéíWƒ¯ŸÄvÚÍõ´öëc%”ð˜X4‹#nrî9è=),<soýosyÖz#3د–w–ÁT2ãå·Z«/€u6ÐFšš½°cªI¤6Ç–Þ&7tÎyôÅ7Zøy}«O®8Ö#Ž=SÊr ÍGŒ(lý̌㭠7Â:¥—ˆí5‰õ˜î+O²Hn~t-¸wpsÓÚ»ã/<)¬Ïâ»ýf-NÉâÈÙ$MlÌU2H$ïë“U4ßêvQxj 5KY ÐÝŠlCJ*A;¸àÕý#ÂwÚee{lš9¹k…C 3 fÜc œmÏ|g±›á¶¤ŠVß\ŒõC¨Ã$rÇ9Ùù°+M|;ß[Ëw{mp°Þ}­&koô„Ãî$ÏÝìsÛ"³îþêC-­¾¼‘ZjÿiÁµÉWݸ«ÜN•½gá«Û_^ø„êQ:]Â=¿Ùñµ8Ãnë“éUmüy§_j麄Piz…Á¹ž6„™QÛïl|àŽãŠŒxO·ÛÏw} ÌV׆ñ$’Üyèw²gîþ)¾ƒWšíåíýÝÖssºÄ]¡F ÎHSÈ^@L×oEQEQEQEQEQM’D†6’FTD™˜à:“U¬5K V'—O¼‚ê4m¬ÐÈéÅ[¢£žxm¢2Ï*Eõw` ~&¨^ZÓÖÞñ¬î­.[j+²²ÈÃÓÔñÚ­ÛZÚé¶iomp[D¸TQµTTOÌ+4¤±7*èÀƒô"¤#=h¢Š(ª°êv7rZÃy—Œ¼I ,½¹ªÕQP[Þ[]ùŸf¸Šo-Ê?–á¶°ê:žŠ(¢¢k¨á-ÞhÖi)`€ê@ïRÕ3«iË L×ö«¹Œ¹™@ :®s×Ú­‚ÈéKEQEgØëšV§s=µŽ¡ms<ëc†PÅ9Ç8éÒ´*Ÿö®Ÿý£ýŸöÛ¶ã?góüc?w¯J¹EQEQEQEQEQ\6©ãë­3Äwº3èŒd‚Ù®¢sr÷xë׊—Jñ­ö­ 7pèªÖ/hnšT¹ÜÈFÍ»ylŽ”ÍÇ“jW¢ÞïLò<Û¾‡d…˜¢žU”€Uª×†üdúþ¡¸´b’›Í†äI³ Œ0nJ¹ãÝx_EmR 4ßCýú¬» /÷ºŒõ¬¹üw-•–¡{y¦*ZÛÉæ1Çá[úÿŠãÑu;[n&šhžbe(¤w ÜôâªÏãˆÃù6º|“ÜGd··1Q†@ç«xö¨n¼Yc®Ä¶RIì>Ù*¹R3ÐAËuãÚ¹/ I¦[ø#ÀŸÚ:SÝ+^l¶”I·È™™°J÷ʺ;_jZ®¿â­:ãI–[ TX ¸I?¥/‡|I¤iÞðý¶‹¦Ì‡P¶V- Ü’X³ƒ¾}êkˆÁa Òé’Éþž4ë˜ÄªÞrÁ@>£¾EX%¼ÚÔ7ZlK¦I gt˶S)ÂÝéצk_A×¶Öì9mžÖQ«²°c´6T¯sÖªëÞ*]P·°ŠÆK»© ’à"¸@1žO~xJçǶðYh7Ñi×7šË*E"Ê; …*yìzzTÓxâÊ×H¿½º¶ž ¬®VÕퟚVÆÀ89Ü9úÖl©ñ¢úcg¬òh±¼ñÇ‚ ™O9ÀÏs]w‰õõðæ’/ZÝçf™ D^>glN©ÅgXxÒѵ›ýF²¶‘#Çt¨þbð[9vPxîåu[ 4 ¯µ\$sìŠ@û s·yÇ¡ê*m/ÇQÔl`{†-CάÏ󖌜‡RÜà‘Ö²4ÿéþÐ.‡ÃÉ¢M4×´Öó Ô+…ÆìÿwïTî¾"C¦w™<ðj7FÌí‘CÅ0$l#¿*yéU¡Õ´ýWÆ:å߇n Õd·¹[Yf“6Jûö8èjîã¹u'H¡Ðçé,d‰§MÑ: ³7¶?§­ršúiW_ è9Ç9Tð°üÛµ‚½ó_¶Ÿ"™I†'QÅÀ?)ÁÇz‘>!À|3k¨½™·7§OŽÔ>CN©Ãcîñœã¥Cÿ a‚â ‹%]N=@iñÄ$+²œ‡`>P:œv­Ÿ x­5û½KO–‚ÿMGqryˆA ­~•ÑÑEQEQEW)â?&»â Xóg»ùËÈóŽ犋MðIÒ|7­é–wͺ„“4s.A„6vôÏoZŰð¿kycuý«i Á`ÖL"Véwdõ$ŽsZš‚dÓ¼AmªÌ,Òx"hä–ÕYä·w^œuú×S«éé«h׺t‡ uÂO¦àGõ®RO;ü:²ðéº_¶ZæYÎHi‘·d÷Á<}*½÷õ pk׺„öÖú†¥b¶QˆK:F£œœœŸj'ðv¯=Ƭ\>çT´Þo.ãDÊ«´2ÚqÜÔ—> Ô†¡¥kvOa©fÒæ…-öH1´mÈõ=jçü;¬ørM^=JâÖâ+ËÇ»I"Üsã ƒÀSƒ4–ú•Ûì¶¼·™ÀÎØåV8ü Y¢¢¸¹‚Ò?2âxáLãtŽgêiÑÊ“F²Dêñ°Ê²œ‚=AªÇVÓ–FŒßÚ‡S´©™r¦3Y÷^ðþ¹zšœö°Üܦ6N²W„+fi£·‰¥šEŽ4gs€¹¥ŽD•ã`ÈÃ*Êr§R3’’j8.`¹RÐMª Ã}8©h¢Š(¢Š(¢Š+œ¾ñ}µ½íõ¥¬·²éñ‰/<¢ˆqÏVÀÎqÞ6ñ ë7¾·³±¸½Óo¥óÔ þC…Á=G^{×w£ipxgÃQÙYE<‘ÛÆÌ‘;†ry;sÓ9â¼öç]›Åÿ üGw¨iò¢'œöòJ€¡ps•Ç&ºïxžÉ`Óô¹¢šÝ¿³Vâ9%,‘¨ˆçŒ{ÔšwŽloï,bû5Ä0j…•ĘÛ9^¸ÁÈöÍOã»;{ßk1ܲªÚI"†ìʤ‚=Á¬¯k¿ñ&ÒttÓ¯Y °…žã 匦@ÎsŸlU 3ÄÚ„¼+w¨ZXj†ÌjREr²až9K`ð[îçŽ+§Ó¼[e}um,7sX³ʗ òØ`ž85›ÿ N jía~íD–ØŒ1–2q¼z ŒŽ¼ô®[â^³§k~¸k{¥k+èíÒôµdórƒœûg®ßPñ}Ž™qun`¸Ÿì0¬×’BXç–ÉÉà“Š¥sñOƒZ\z~¡q3Û}ª&† VX¿¼§=>µ&ŸñHÔfÓD1],“yv×/#yÉLç þ­oø“M𾞗ڤ­*Ä¥P±,zt¬_øsþËM2ÅmÀ¹Y¾Ô%Ø-ÀêØêÄŽ¦ékˆz·ˆþÎmcš·Ë¸Ü ŽŠ8­v$€2N­rÖ¾=ÒîîáD†ålî'kk{æP!šQ‘µNsÔ`ÕEø¢l»y­µÊà[Ý4–ø1 Ç=2k´V ¡È# ×'ñÄ×^ÐövwM4‰É©–`9Ïsž+ž×$Љ¾ÕWL/.­®ª¯šä*€œq“ߺaã­:M.Úêg’{«¦³Š×9™I §œ `äÖ–‡¯Ûë‰t©Csg1‚æ ˜ÜsÔpA Óµýném}:bDˆ ÎÄ(<OSYSøæÎÛLûTöWQÊnÖÉ`m¹iXlíÆ\⢸øeoá›­lØ]´vW&ÖîÌ…ÁÚ{àŒ‘Ð÷§ÂwŸ5·öF¥ö¸á"Ü¢îxN~qóct'>Õeüe`ðéFÆ)ogÕ#2ÛA%ŽHœ÷­ \´ñ˜·Öe‚hÝa‘Ôá”û‚*–§â¨,5)ì!´žò{hÍȈ¨ò£9Á9#'ƒÀôª÷ž9Óbû2Ù+_Iqho@‰‚„€uv$à þ!éMkm5¬SÜ4Öfý£]ªb€uw$€?­2ëâ6™G%¥½Åâ¨HcÚ @N7`žHçWoüicfÈ#·¸ºSh/XÅ·"#œ çT¢»ÑSÇ·7rAw¡ý–&i¤ÜýœÐgƒŸnÕrÛÆ6÷&Ïm•®¡Ë`I_ô£8ëò’9íTtÿˆöÑÙÌÚn¡oouxlDÒªmI²FÓ†'’11]RÕm-îôù–âf óP0žkˆø1c ¬'ò"Yæ&EQ¸0÷üå]÷‹¢T›OÓíþß5½·Ú®<¹@ p0{±ÁÀöª?o4ä²Óe¼·Ôl^îÚXä¾Ñ’»O9泊E[´ñ¾Ÿ©}}¬‹§jR½µµÌ…JLÃ#êÁÆzÖWÂë8låñ\pF‘ƺԪˆƒ( €§5è4QEQEQEÀKá­cKñˆîtè#º‡\ˆaÚPžDJòQÎxªx;ZÒŸÂVºe”Vú)ß$òN»0!°1Ӝץ°/Á#äÖ>ñdÔ<6-mÕXM;\ ²ù»~ãcõ·/…u‹í_Lk˜ ŠÒ"M>b“ä©p@Ç=*·†ü!}§&ÂëD³_ìÉAþÑ2ót(½Tž3é]w‹íoïü-c¦À“\ÝBЀò »'ÓÒ¸ï h~+ðβ’ “N¸¶Š;¨¾Ö–TP»×=ˆ"›7…iѤ·1\Ã:Æï´8GŒö5“w¦øšïÅú.°úm³GeÁÇÚ€9“(ãø@Æ{Ö§‚<@¶óÜéÖÍya«M} pn#”ËœpFF ô®ßÂÚ]Åœ—÷—:u®œ×n¤[@C 1—a÷‰ý)¾9Ò¯µ­,,m`¹2\FfŽvÚ†0rÀýqŽ=kŒ>ñ¾™:e·²’\I¦I{¸ùj¸ IØçÇð‹?°¼E¤­¥™ŠþëÏ‹…_™•lñ·o¾s[-¥x¥¼Uw«*ÓdÚX²Tc*À“œíé“Y¶¾ Öl,<-y.›åÖ—m%Õœ èÇ!Õºg qï]Ï…tÙ4Ý2Q-µ‹O;Mök~DyÇÿqÉ®{Tе½7Åz¾«¤Ú-ôZÍ¢A"4Á »¨*ž«ƒÛŸj£eà­OÂz–™y¥ÛGª*icN¹ŠYD|îݼdtÎA<¾Ö´G¬[iÖÚŸÚtácsl¬±$d6AðSuâ¨ë>ñD÷7 n–RÃ>˜-á*þTv²˜Þ”ÃàÝoTÓí×\Òm®Z+D†ÈŠ[wýÙQ¹²<1«Üë(·© –o£6{‘7ïYˆÉ|c×?3KðÞ°Óø~ø#Ž/FÂ9V`EÓìØ¤ÊŒuÍd/„|PžÓ4ñacæÙëÚ,Âèáǘ_w¯ÍºkMo[—âMÎ’ëjúJY trðÉÇ}Îp=nëÚÍj#Ò­í%i,†æf@ Žœ×áïøËÃ~ ™Ò È$Ýdã{»{gÖ¢´ð^½¡~ÿOû%ÕÕæ˜–7žd¥ºŒ ŽF ㊖ÃÁÆ­xaìä²—OÑ­šÝ¼Ça#ïÆöuè)5ßër]ø•tym¶¿óžv`Ñ:©RÞ¹ãšë|)e¦ø_N±Ô„"êÚ…¼–,¤(À9 uW-­é/Ô¼_£kÙéÉ–òâ#vÙ˜8ÛýÞ8úÔ‡ÃZõι¨x–á,ÓP’Ãì6Öi+l NK;ã“ÉíE‡†üA©<1"Y%ø·kT“Î%ø¾îAäñíXúµ½NξÒôˉ¡µŽÚ c¸hä·eóñ’:µ¼¾Ömüc-ò5¼ö7º|6wR;ë³;ˆäœÖFŸàb?EЦ†c¢^ý®;Ÿ7›€ ]¸ùNHÉö­ÏhÚÖ.´5[[xÅõëÞ#Ã>þ[i1Ö»:(¢Š(¢Š(¢Š(¢Š(¢Š*–¯¤ÙëšdÚ}ü^m´ n\x9Ђ¬{/YÚßCw6¡©Þ´ ¾$º¹.ˆÃ€vôÈ÷®–Š(ª×6—’Á-ͼr¼ ¾&uctÈ÷«4QEQEQEQEQEQEU´Ólìe¸–ÖÚ8¤¹“Í™•pdoRjÕQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙleptonica-1.70/prog/weasel4.8g.png0000444000175000017500000000200410400443670015033 0ustar dandan‰PNG  IHDRRI\lðPLTE$$$HHHmmm‘‘‘¶¶¶ÚÚÚÿÿÿ_«* pHYsb&2’IDATxœÖK—ª8àðΖ‡çô6<´·œ=B¼n»•èöžé+loOäïO ñѵÔï$©¤*¨ïù¾Ì‚'µr^ÞŽã~¿—:øcy”]ðê¡ü°g,É# ¨V…’ïÉSÄk)·6!³N¾Öªj£¬/ò-Ò²°Ã„[½ìw¬V혾®”‹Ha Y¡í½,Ó!·S€™ÙËÉú(÷ 0¶Œ gÝg$÷½„m,K¹ÿ$s €«IŸû ÉR°9[Ï'„êU¦3$P6§óNŒp©ç¾#ëöTvÄ—HÿF²º†’Eâ‘ìáÊì `ktš}ÚíÜË^9’}™¥–x4fÙ×cŒà ÷ùp‘²hW™ëEd–5ž[n­<|?°‰>öÜÈ )w”âØÄ ›‘,+Ü5 mleu)!9€›6)E]J8#)4Ä V“,îB‘8£³Ò÷ÀêBExL]mPÁ2£Ë‘Œ±<7¤m¡HÝ®–”ú ×ú~´ÇPd’'î8Aî2ï„&ÅõY—;h&O¥n\¸Xô1Ž¥‹dí;Ú™" Üöÿä¦<Q@ۆݿü\IMÃÙ…!]“w$”%œœiAã—ô¶¬Kù5›§¥OÌ/‹Ñ±<(]wg ‘CrtEnÍ~h®¸÷i»DÍšÉ}Óp;ãœ3 ½¬‘]î.–'ݼŽãÛ:yShØ-Ó7°ÔíQø ׅȧ‚¼TUÎè`öKÅÃk!´Ìƒö ¸m2$qëÙÛ€ýõ*…å µ&ÜÝ‘ã'|Óâ.†J :rîÛ$Ҙጔ…ÁšM"ÔÓše„—)W/\‡¸Ëæ8-hT¡už°L7) YóðÕ™ ¡ŒÇ¡ô9÷'ðÏ‘k-Иr0û«òÐT¿9‰Î/@/°È(õ‚ÄænÒ¾>w$Ü74ñÄ;(õX®ãMJ‚žÒ»³³ê“‰z.…¡~yìõ¹,rK½q{Ó±äŽ,ÄêEA>ý·Ap[…H7ÊY?µ7’ùR;x*ª ^N¯eaÓ ‚jË õeFëɵ|Ÿ¦´¹ì&êÓ³­NþûãZÆËx™Î¥Ø¾¨7—wÛù;\˕˖1üúùªü„ÿ¸À{>ÚÏYX¬âê×F9œþ¥oª"÷é|¼óÜt>$úv8рͮ†gôôë7l%þ\¸í—ªªË'Ñ~ýªïÆÿÇç½2Œl·IEND®B`‚leptonica-1.70/prog/blend2_reg.c0000644000175000017500000001412412240303427014622 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * blend2_reg.c * * Regression test for this function: * pixBlendWithGrayMask() */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w1, h1, w2, h2, w, h, same; BOX *box1, *box2; PIX *pixs, *pixs1, *pixs2, *pix1, *pix2; PIX *pixg, *pixg1, *pixg2, *pixc2, *pixbl, *pixd; PIXA *pixa; /* --- Set up the 8 bpp blending image --- */ pixg = pixCreate(660, 500, 8); for (i = 0; i < 500; i++) for (j = 0; j < 660; j++) pixSetPixel(pixg, j, i, (l_int32)(0.775 * j) % 256); /* --- Set up the initial color images to be blended together --- */ pixs1 = pixRead("wyom.jpg"); pixs2 = pixRead("fish24.jpg"); pixGetDimensions(pixs1, &w1, &h1, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); h = L_MIN(h1, h2); w = L_MIN(w1, w2); box1 = boxCreate(0, 0, w1, h1); box2 = boxCreate(0, 300, 660, 500); pix1 = pixClipRectangle(pixs1, box1, NULL); pix2 = pixClipRectangle(pixs2, box2, NULL); pixDestroy(&pixs1); pixDestroy(&pixs2); boxDestroy(&box1); boxDestroy(&box2); /* --- Blend 2 rgb images --- */ pixa = pixaCreate(0); pixSaveTiled(pixg, pixa, 1.0, 1, 40, 32); pixd = pixBlendWithGrayMask(pix1, pix2, pixg, 50, 50); pixSaveTiled(pix1, pixa, 1.0, 1, 40, 32); pixSaveTiled(pix2, pixa, 1.0, 0, 40, 32); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixd); /* --- Blend 2 grayscale images --- */ pixg1 = pixConvertRGBToLuminance(pix1); pixg2 = pixConvertRGBToLuminance(pix2); pixd = pixBlendWithGrayMask(pixg1, pixg2, pixg, 50, 50); pixSaveTiled(pixg1, pixa, 1.0, 1, 40, 32); pixSaveTiled(pixg2, pixa, 1.0, 0, 40, 32); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixg1); pixDestroy(&pixg2); pixDestroy(&pixd); /* --- Blend a colormap image and an rgb image --- */ pixc2 = pixFixedOctcubeQuantGenRGB(pix2, 2); pixd = pixBlendWithGrayMask(pix1, pixc2, pixg, 50, 50); pixSaveTiled(pix1, pixa, 1.0, 1, 40, 32); pixSaveTiled(pixc2, pixa, 1.0, 0, 40, 32); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixc2); pixDestroy(&pixd); /* --- Blend a colormap image and a grayscale image --- */ pixg1 = pixConvertRGBToLuminance(pix1); pixc2 = pixFixedOctcubeQuantGenRGB(pix2, 2); pixd = pixBlendWithGrayMask(pixg1, pixc2, pixg, 50, 50); pixSaveTiled(pixg1, pixa, 1.0, 1, 40, 32); pixSaveTiled(pixc2, pixa, 1.0, 0, 40, 32); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixd); pixd = pixBlendWithGrayMask(pixg1, pixc2, pixg, -100, -100); pixSaveTiled(pixg1, pixa, 1.0, 1, 40, 32); pixSaveTiled(pixc2, pixa, 1.0, 0, 40, 32); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixd); pixDestroy(&pixg1); pixDestroy(&pixc2); /* --- Test png read/write with alpha channel --- */ /* First make pixs1, using pixg as the alpha channel */ pixs = pixRead("fish24.jpg"); box1 = boxCreate(0, 300, 660, 500); pixs1 = pixClipRectangle(pixs, box1, NULL); pixSaveTiled(pixs1, pixa, 1.0, 1, 40, 32); pixSetRGBComponent(pixs1, pixg, L_ALPHA_CHANNEL); /* To see the alpha channel, blend with a black image */ pixbl = pixCreate(660, 500, 32); pixd = pixBlendWithGrayMask(pixbl, pixs1, NULL, 0, 0); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixd); /* Write out the RGBA image and read it back */ pixWrite("/tmp/junkpixs1.png", pixs1, IFF_PNG); pixs2 = pixRead("/tmp/junkpixs1.png"); /* Make sure that the alpha channel image hasn't changed */ pixg2 = pixGetRGBComponent(pixs2, L_ALPHA_CHANNEL); pixEqual(pixg, pixg2, &same); if (same) fprintf(stderr, "PNG with alpha read/write OK\n"); else fprintf(stderr, "PNG with alpha read/write failed\n"); /* Blend again with a black image */ pixd = pixBlendWithGrayMask(pixbl, pixs2, NULL, 0, 0); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixd); /* Blend with a white image */ pixSetAll(pixbl); pixd = pixBlendWithGrayMask(pixbl, pixs2, NULL, 0, 0); pixSaveTiled(pixd, pixa, 1.0, 0, 40, 32); pixDestroy(&pixd); pixDestroy(&pixbl); pixDestroy(&pixs); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixg2); boxDestroy(&box1); /* --- Display results --- */ pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/junkblend2.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixg); pixDestroy(&pix1); pixDestroy(&pix2); return 0; } leptonica-1.70/prog/numa2_reg.c0000644000175000017500000003203312240302745014477 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * numa_reg2.c * * Tests: * * numa windowed stats * * numa extraction from pix on a line * * pixel averages and variances */ #include #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" #define DO_ALL 1 int main(int argc, char **argv) { l_int32 i, j, n; l_int32 w, h, bw, bh, wpls, rval, gval, bval, same; l_uint32 pixel; l_uint32 *lines, *datas; l_float32 sum1, sum2, sum3, ave1, ave2, ave3, ave4, diff1, diff2; l_float32 var1, var2, var3; BOX *box1, *box2; NUMA *na, *na1, *na2, *na3, *na4; PIX *pix, *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pixg, *pixd; PIXA *pixa; PTA *pta; static char mainName[] = "numa2_reg"; if (argc != 1) return ERROR_INT(" Syntax: numa2_reg", mainName, 1); /* -------------------------------------------------------------------* * Numa-windowed stats * * -------------------------------------------------------------------*/ #if DO_ALL na = numaRead("lyra-5.numa"); numaWindowedStats(na, 5, &na1, &na2, &na3, &na4); gplotSimple1(na, GPLOT_PNG, "/tmp/lyraroot6", "Original"); gplotSimple1(na1, GPLOT_PNG, "/tmp/lyraroot7", "Mean"); gplotSimple1(na2, GPLOT_PNG, "/tmp/lyraroot8", "Mean Square"); gplotSimple1(na3, GPLOT_PNG, "/tmp/lyraroot9", "Variance"); gplotSimple1(na4, GPLOT_PNG, "/tmp/lyraroot10", "RMS Difference"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pixa = pixaCreate(5); pix1 = pixRead("/tmp/lyraroot6.png"); pix2 = pixRead("/tmp/lyraroot7.png"); pix3 = pixRead("/tmp/lyraroot8.png"); pix4 = pixRead("/tmp/lyraroot9.png"); pix5 = pixRead("/tmp/lyraroot10.png"); pixSaveTiled(pix1, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix2, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix3, pixa, 1.0, 0, 25, 32); pixSaveTiled(pix4, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix5, pixa, 1.0, 0, 25, 32); pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/numawindow.png", pixd, IFF_PNG); numaDestroy(&na); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pixd); #endif /* -------------------------------------------------------------------* * Extraction on a line * * -------------------------------------------------------------------*/ #if DO_ALL /* First, make a pretty image */ w = h = 200; pixs = pixCreate(w, h, 32); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < 200; i++) { lines = datas + i * wpls; for (j = 0; j < 200; j++) { rval = (l_int32)((255. * j) / w + (255. * i) / h); gval = (l_int32)((255. * 2 * j) / w + (255. * 2 * i) / h) % 255; bval = (l_int32)((255. * 4 * j) / w + (255. * 4 * i) / h) % 255; composeRGBPixel(rval, gval, bval, &pixel); lines[j] = pixel; } } pixg = pixConvertTo8(pixs, 0); /* and a grayscale version */ pixWrite("/tmp/junkpixg", pixg, IFF_PNG); pixDisplay(pixg, 450, 100); na1 = pixExtractOnLine(pixg, 20, 20, 180, 20, 1); na2 = pixExtractOnLine(pixg, 40, 30, 40, 170, 1); na3 = pixExtractOnLine(pixg, 20, 170, 180, 30, 1); na4 = pixExtractOnLine(pixg, 20, 190, 180, 10, 1); gplotSimple1(na1, GPLOT_PNG, "/tmp/extroot1", "Horizontal"); gplotSimple1(na2, GPLOT_PNG, "/tmp/extroot2", "Vertical"); gplotSimple1(na3, GPLOT_PNG, "/tmp/extroot3", "Slightly more horizontal than vertical"); gplotSimple1(na4, GPLOT_PNG, "/tmp/extroot4", "Slightly more vertical than horizontal"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pixa = pixaCreate(4); pix1 = pixRead("/tmp/extroot1.png"); pix2 = pixRead("/tmp/extroot2.png"); pix3 = pixRead("/tmp/extroot3.png"); pix4 = pixRead("/tmp/extroot4.png"); pixSaveTiled(pix1, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix2, pixa, 1.0, 0, 25, 32); pixSaveTiled(pix3, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix4, pixa, 1.0, 0, 25, 32); pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 500); pixWrite("/tmp/numaextract.png", pixd, IFF_PNG); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); #endif /* -------------------------------------------------------------------* * Row and column pixel sums * * -------------------------------------------------------------------*/ #if DO_ALL /* Sum by columns in two halves (left and right) */ pixs = pixRead("test8.jpg"); pixGetDimensions(pixs, &w, &h, NULL); box1 = boxCreate(0, 0, w / 2, h); box2 = boxCreate(w / 2, 0, w - 2 / 2, h); na1 = pixAverageByColumn(pixs, box1, L_BLACK_IS_MAX); na2 = pixAverageByColumn(pixs, box2, L_BLACK_IS_MAX); numaJoin(na1, na2, 0, -1); na3 = pixAverageByColumn(pixs, NULL, L_BLACK_IS_MAX); numaSimilar(na1, na3, 0.0, &same); if (same) fprintf(stderr, "Same for columns\n"); else fprintf(stderr, "Error for columns\n"); pta = generatePlotPtaFromNuma(na3, L_HORIZONTAL_LINE, 3, h / 2, 80, 1); pix = pixConvertTo32(pixs); pixRenderPtaArb(pix, pta, 255, 0, 0); boxDestroy(&box1); boxDestroy(&box2); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); ptaDestroy(&pta); /* Sum by rows in two halves (top and bottom) */ box1 = boxCreate(0, 0, w, h / 2); box2 = boxCreate(0, h / 2, w, h - h / 2); na1 = pixAverageByRow(pixs, box1, L_WHITE_IS_MAX); na2 = pixAverageByRow(pixs, box2, L_WHITE_IS_MAX); numaJoin(na1, na2, 0, -1); na3 = pixAverageByRow(pixs, NULL, L_WHITE_IS_MAX); numaSimilar(na1, na3, 0.0, &same); if (same) fprintf(stderr, "Same for rows\n"); else fprintf(stderr, "Error for rows\n"); pta = generatePlotPtaFromNuma(na3, L_VERTICAL_LINE, 3, w / 2, 80, 1); pixRenderPtaArb(pix, pta, 0, 255, 0); pixDisplay(pix, 500, 200); boxDestroy(&box1); boxDestroy(&box2); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); pixDestroy(&pix); ptaDestroy(&pta); /* Average left by rows; right by columns; compare totals */ box1 = boxCreate(0, 0, w / 2, h); box2 = boxCreate(w / 2, 0, w - 2 / 2, h); na1 = pixAverageByRow(pixs, box1, L_WHITE_IS_MAX); na2 = pixAverageByColumn(pixs, box2, L_WHITE_IS_MAX); numaGetSum(na1, &sum1); /* sum of averages of left box */ numaGetSum(na2, &sum2); /* sum of averages of right box */ ave1 = sum1 / h; ave2 = 2.0 * sum2 / w; ave3 = 0.5 * (ave1 + ave2); /* average over both halves */ fprintf(stderr, "ave1 = %8.4f\n", sum1 / h); fprintf(stderr, "ave2 = %8.4f\n", 2.0 * sum2 / w); pixAverageInRect(pixs, NULL, &ave4); /* entire image */ diff1 = ave4 - ave3; diff2 = w * h * ave4 - (0.5 * w * sum1 + h * sum2); if (diff1 < 0.001) fprintf(stderr, "Average diffs are correct\n"); else fprintf(stderr, "Average diffs are wrong: diff1 = %7.5f\n", diff1); if (diff2 < 20) /* float-to-integer roundoff */ fprintf(stderr, "Pixel sums are correct\n"); else fprintf(stderr, "Pixel sums are in error: diff = %7.0f\n", diff2); /* Variance left and right halves. Variance doesn't average * in a simple way, unlike pixel sums. */ pixVarianceInRect(pixs, box1, &var1); /* entire image */ pixVarianceInRect(pixs, box2, &var2); /* entire image */ pixVarianceInRect(pixs, NULL, &var3); /* entire image */ fprintf(stderr, "0.5 * (var1 + var2) = %7.3f, var3 = %7.3f\n", 0.5 * (var1 + var2), var3); boxDestroy(&box1); boxDestroy(&box2); numaDestroy(&na1); numaDestroy(&na2); #endif /* -------------------------------------------------------------------* * Row and column variances * * -------------------------------------------------------------------*/ #if DO_ALL /* Display variance by rows and columns */ box1 = boxCreate(415, 0, 130, 425); boxGetGeometry(box1, NULL, NULL, &bw, &bh); na1 = pixVarianceByRow(pixs, box1); na2 = pixVarianceByColumn(pixs, box1); pix = pixConvertTo32(pixs); pta = generatePlotPtaFromNuma(na1, L_VERTICAL_LINE, 3, 415, 100, 1); pixRenderPtaArb(pix, pta, 255, 0, 0); ptaDestroy(&pta); pta = generatePlotPtaFromNuma(na2, L_HORIZONTAL_LINE, 3, bh / 2, 100, 1); pixRenderPtaArb(pix, pta, 0, 255, 0); pixDisplay(pix, 500, 900); boxDestroy(&box1); numaDestroy(&na1); numaDestroy(&na2); ptaDestroy(&pta); pixDestroy(&pix); pixDestroy(&pixs); /* Again on a different image */ pix1 = pixRead("boxedpage.jpg"); pix2 = pixConvertTo8(pix1, 0); pixGetDimensions(pix2, &w, &h, NULL); na1 = pixVarianceByRow(pix2, NULL); pta = generatePlotPtaFromNuma(na1, L_VERTICAL_LINE, 3, 0, 70, 1); pix3 = pixConvertTo32(pix1); pixRenderPtaArb(pix3, pta, 255, 0, 0); ptaDestroy(&pta); na2 = pixVarianceByColumn(pix2, NULL); pta = generatePlotPtaFromNuma(na2, L_HORIZONTAL_LINE, 3, bh - 1, 70, 1); pixRenderPtaArb(pix3, pta, 0, 255, 0); pixDisplay(pix3, 1000, 0); numaDestroy(&na1); numaDestroy(&na2); ptaDestroy(&pta); pixDestroy(&pix3); /* Again, with an erosion */ pix3 = pixErodeGray(pix2, 3, 21); pixDisplay(pix3, 1400, 0); na1 = pixVarianceByRow(pix3, NULL); pta = generatePlotPtaFromNuma(na1, L_VERTICAL_LINE, 3, 30, 70, 1); pix4 = pixConvertTo32(pix1); pixRenderPtaArb(pix4, pta, 255, 0, 0); ptaDestroy(&pta); na2 = pixVarianceByColumn(pix3, NULL); pta = generatePlotPtaFromNuma(na2, L_HORIZONTAL_LINE, 3, bh - 1, 70, 1); pixRenderPtaArb(pix4, pta, 0, 255, 0); pixDisplay(pix4, 1000, 550); numaDestroy(&na1); numaDestroy(&na2); ptaDestroy(&pta); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); #endif /* -------------------------------------------------------------------* * Windowed variance along a line * * -------------------------------------------------------------------*/ #if DO_ALL pix1 = pixRead("boxedpage.jpg"); pix2 = pixConvertTo8(pix1, 0); pixGetDimensions(pix2, &w, &h, NULL); /* Plot along horizontal line */ pixWindowedVarianceOnLine(pix2, L_HORIZONTAL_LINE, h / 2 - 30, 0, w, 5, &na1); pta = generatePlotPtaFromNuma(na1, L_HORIZONTAL_LINE, 3, h / 2 - 30, 80, 1); pixRenderPtaArb(pix1, pta, 255, 0, 0); numaDestroy(&na1); ptaDestroy(&pta); /* Plot along vertical line */ pixWindowedVarianceOnLine(pix2, L_VERTICAL_LINE, 0.78 * w, 0, h, 5, &na1); pta = generatePlotPtaFromNuma(na1, L_VERTICAL_LINE, 3, 0.78 * w, 60, 1); pixRenderPtaArb(pix1, pta, 0, 255, 0); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); pixDestroy(&pix2); numaDestroy(&na1); ptaDestroy(&pta); #endif return 0; } leptonica-1.70/prog/pta_reg.c0000644000175000017500000001375512240302556014253 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pta_reg.c * * This tests several ptaa functions, including: * - ptaaGetBoundaryPixels() * - pixRenderRandomCmapPtaa() */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, nbox, npta, fgcount, bgcount, count, same, ok; BOXA *boxa; PIX *pixs, *pixfg, *pixbg, *pixc, *pixb, *pixd; PIXA *pixa; PTA *pta; PTAA *ptaafg, *ptaabg; ok = TRUE; pixs = pixRead("feyn-fract.tif"); boxa = pixConnComp(pixs, NULL, 8); nbox = boxaGetCount(boxa); if (nbox != 464) ok = FALSE; fprintf(stderr, "Num boxes = %d\n", nbox); /* Get fg and bg boundary pixels */ pixfg = pixMorphSequence(pixs, "e3.3", 0); pixXor(pixfg, pixfg, pixs); pixCountPixels(pixfg, &fgcount, NULL); if (fgcount == 58764) fprintf(stderr, "num fg pixels = %d\n", fgcount); else { ok = FALSE; fprintf(stderr, "Error: num fg pixels = %d\n", fgcount); } pixbg = pixMorphSequence(pixs, "d3.3", 0); pixXor(pixbg, pixbg, pixs); pixCountPixels(pixbg, &bgcount, NULL); if (bgcount == 60335) fprintf(stderr, "num bg pixels = %d\n", bgcount); else { ok = FALSE; fprintf(stderr, "Error: num bg pixels = %d\n", bgcount); } /* Get ptaa of fg pixels */ ptaafg = ptaaGetBoundaryPixels(pixs, L_BOUNDARY_FG, 8, NULL, NULL); ptaaWrite("/tmp/fg.ptaa", ptaafg, 1); npta = ptaaGetCount(ptaafg); if (npta != nbox) { ok = FALSE; fprintf(stderr, "Error: ptaa count = %d, boxa count = %d\n", npta, nbox); } count = 0; for (i = 0; i < npta; i++) { pta = ptaaGetPta(ptaafg, i, L_CLONE); count += ptaGetCount(pta); ptaDestroy(&pta); } fprintf(stderr, "num fg pts = %d\n", count); if (fgcount != count) { ok = FALSE; fprintf(stderr, "Error: npix = %d, num fg pts = %d\n", fgcount, count); } /* Get ptaa of bg pixels. Note that the number of bg pts * is, in general, larger than the number of bg boundary pixels, * because bg boundary pixels are shared by two c.c. that * are 1 pixel apart. */ ptaabg = ptaaGetBoundaryPixels(pixs, L_BOUNDARY_BG, 8, NULL, NULL); ptaaWrite("/tmp/bg.ptaa", ptaabg, 1); npta = ptaaGetCount(ptaabg); if (npta != nbox) { ok = FALSE; fprintf(stderr, "Error: ptaa count = %d, boxa count = %d\n", npta, nbox); } count = 0; for (i = 0; i < npta; i++) { pta = ptaaGetPta(ptaabg, i, L_CLONE); count += ptaGetCount(pta); ptaDestroy(&pta); } fprintf(stderr, "num bg pts = %d\n", count); if (count != 60602) { fprintf(stderr, "Error: npix = %d, num bg pts = %d\n", bgcount, count); ok = FALSE; } /* Render the fg boundary pixels on top of pixs. */ pixa = pixaCreate(4); pixc = pixRenderRandomCmapPtaa(pixs, ptaafg, 0, 0, 0); pixSaveTiled(pixc, pixa, 1.0, 1, 30, 32); pixDestroy(&pixc); /* Render the bg boundary pixels on top of pixs. */ pixc = pixRenderRandomCmapPtaa(pixs, ptaabg, 0, 0, 0); pixSaveTiled(pixc, pixa, 1.0, 0, 30, 32); pixDestroy(&pixc); pixClearAll(pixs); /* Render the fg boundary pixels alone. */ pixc = pixRenderRandomCmapPtaa(pixs, ptaafg, 0, 0, 0); pixSaveTiled(pixc, pixa, 1.0, 1, 30, 32); /* Verify that the fg pixels are the same set as we * originally started with. */ pixb = pixConvertTo1(pixc, 255); pixEqual(pixb, pixfg, &same); if (!same) { fprintf(stderr, "Fg pixel set not correct\n"); ok = FALSE; } pixDestroy(&pixc); pixDestroy(&pixb); /* Render the fg boundary pixels alone. */ pixc = pixRenderRandomCmapPtaa(pixs, ptaabg, 0, 0, 0); pixSaveTiled(pixc, pixa, 1.0, 0, 30, 32); /* Verify that the bg pixels are the same set as we * originally started with. */ pixb = pixConvertTo1(pixc, 255); pixEqual(pixb, pixbg, &same); if (!same) { fprintf(stderr, "Bg pixel set not correct\n"); ok = FALSE; } pixDestroy(&pixc); pixDestroy(&pixb); if (ok) fprintf(stderr, "OK!\n"); else fprintf(stderr, "Error!\n"); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/boundary.png", pixd, IFF_PNG); pixDisplay(pixd, 0, 0); ptaaDestroy(&ptaafg); ptaaDestroy(&ptaabg); pixDestroy(&pixs); pixDestroy(&pixfg); pixDestroy(&pixbg); pixDestroy(&pixd); pixaDestroy(&pixa); boxaDestroy(&boxa); return 0; } leptonica-1.70/prog/boxedpage.jpg0000444000175000017500000016747412133610773015140 0ustar dandanÿØÿàJFIFKKÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀæœ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?à"ÐTÜ-ÁðXà~´­ Ô—†£©2?tiö¸£·I<¼"©Ü8nqùõ«Ú®—aa „Wc׿êȯ7Ú³ÐöhâÆ™oÐy#íçúÓ›IС’ §·'ùW¤h–víº[Fª¨#$žäšÚKhŽ>]´{VˆñÔÑ!P¼?„N¥X]!ˆ1'ÐC'øW±ˆP \}*DŒ*ð9úRö¬9ã?ðÏ#a­çqÔ~áÍH<=}·åµº?H½˜àœ}qLS´€99ÅÒAÊ_ j Üé×ÜÅÏëR ê8À³¹ãÕÖ½|ç$r( ½èöŒ9Qä á]Hð-%çÔ/øÓÇ„5B~[Ysÿÿõ½½M4Œœôõ£ÚÈ9QåIàíM‡òdz²Š™|ª`æÛ9è<à?¥zy@8Ï8ëN Çüé{I*<°ø+UÝ(.=fÏô§ê]Ìyÿ®¬¥zf9ÉÆhÚ:p=èö’*<Õ<¨·â_ûhßáR‡—¤á¯cQí“^•·é@\ú~T{I*<ò?‡3·ÞÔSþ™“ÿ³TÃáÖrÿ9î±þ*»ð£>½©H 9çÜ9cØàá¼$|׬àýzwü+›1ÿ/’“ì‚»¼{Sz–s˸rDZÃÿ¾²ÉÍÔØíò¯øSÇÃý7¼÷ ïòÿ…vXÎMöúsG<»‡*ìrcÀ:Rs¾sÿÿëSôpî¦'ÞS]KgÓõ¦wÇ~hæ—qÙv9¡à½$Ë?Y[üi¿ð…é- %†Ýpk§Àç8?A<Òæ—p²0ÂÚ@;E”G¼ÔËá ÿûûö l…Èã—®;R»î;#'þý,í+en¿H—ü*a£éè0,íÁ‘ Ð=ºÐG隦4ûUQ²— ²|£E«}ŽGáHG=È銮‘Ó¡ëÅ"ÆpG"§<{IÊ8úÐ>V~lœãÖ«Oñyõ­鎕«¸ãŒg­03,-öê·k“ƒgõzÒ€çéM´ˆi\6ú”Áÿ7øÕ°Ÿ6{b’Ô ÆxÅ4Û!ä üªÛqõ¦‘ùS™±ƒ‡þQ6—hÜxŽÙ A¤À<ñ‘LFRè– åí ?öÌPþÒÜüÖ0gÔF+['8À¥#œQ¨Yá]!Ô Â=ÂÔgÁú1ñ柙Öº1ŒÒ7=;ÑwÜVG0Þ Ñü»ûèÿC'ô¿,r)ös]^:ži^=ñOš]Õv9!à)Þ˜À«…ñ—‡í´^xB~O}Ì?¥{0À<×—|L#þ;oúó_ý ëXI·¹ŠèuÖñ®Çe샌høŠÜ<w*½Gµ@jÜ7Uoþ>+CZÛTò’}«Žúú4[t¨Áæÿ*ÓE8ç>‚©ijM„dcÖ¯€½€üêÌØ ryç¥IÎ0?3zØÁ àŒô®;â£y§h¶·VR¼-Úáõnî=ª£»ݕΟS…çÓn#Yä„ùgDpÊGµ>·/‰îl`¿Ó¯|å$*€†ï¹F Ï=+šû_‹g kÎÙãå´—òÿW[B>dJG­Å&æ.I @ ?qéVÔx¼€Úø¦Vñ8ÔN»£ ¤:?‰Ü|Ú¶®AIŸýRöK«;ì{˜ c"˜'ŒÊÿ…y øwÄ mGYcþáþ²S›ÂšÃ(&çYcèBñÚ=œ˜9ßcÖÄeº¯­â2VZòEðN¦ø,Ú®IÇ&?þ8jAà;òÃrjL½Oï#û1¥ìáüÁÏ.Ç«}ª¤ï•úÝNLŠ=Ïåcáí˹& Üv :~Y§ÉðÖàÆÛ-®·]&÷ùhä‡pæ—cÓΩdœ5Ô WÆ×4Å#uý¸úÊ¿ã^coðÆñPyÐù“ÊÝ„Ül?έ±ž-÷¿íÿ~©òøsK±ß?‰tXÆãªÙß÷ëþ5 ž-ÐSík<ún§ú×>ÉÆ-¡\uÍëý¦)GÃ%m‡¨óœÿAG->áyö:é|káôr©nǯÇçP¿Ž¼::”xöÉþB¹ŸøV„¨ýÝ–}ÚSÿ³ —þ´j£+a×þyÌö¥¥Ü/S±¶ß<6?æ £ð¨â7‡à]³}!ð¬ÏøW1/Sbç‹yó’¤?-úy–Àû[êÔZ^¡`üJÐ I1ïÄF£‰ÚnHöˆqùšhøn6Ÿ2Ž-ÿ<ÔƒÀP`:¥¤?üMºÞŠZ0÷‡ÐykÿÅSájé ÒÖøœuøªµmUŽnœqŽ-àû%XOÚ‚sw1ú$Cù%¤¼2Ÿâ¾š>å…ÙúíÖ˜~,Y…Ón=\ Ú´RsytyèGò7lŸå·ËÎ@S½.ÁjÎvO‹*ßsHoÆþÆ—þ¬Œ~]Èÿ®ßýt‰à›4P$º¾ ðn_üj_øDlUFé.ˆw\9ÏëG5.ÁjÎPüP»~šãþºÿ²ÓOĽAºh.àmÿÄ×J<§¹$Érpw#ùÔ¿ð‰éª¬LO=doñ£šŸ`å©Üä‡Ä]dœ’qýïð®«Â>'“ÄÖw3=¨áp¤Ü «®hÖ~ŒïomȲFCcï®yúf³~°êñg'^??ð¡ò¸6—2•›=T• { Ž@Tò=…J ÜTS—$ôíX›ÛŸôáèж\:´xúU{\}§wý3aú¯øT·*M´  SÈ=) e uk8cžâ(ÜŒ€î#󦦱e!Ê\ÆÃ¦C\g‰t¨5}fÒÕ‘ÃÛ±Gi Cƒ€}N>µž¿/@;ìâ$vôý§[(FÚ³79_DzHÔ!`vÈ{G¹×o›€HèqÞ¼Þ_‡Zˆ……¼ ½˜ÞnðØ?2/‡zªÆ<ôÙÉòî¶ÿ4?ÎŽHÿ0¹åØô予–‡çOã–y’ø ùþ=îOû·‹ÿÄÐ|¨‚?ѯ‡¸¼Cý(äqó˱é¢h‰ÆàiC¯9¯0 Õc ¤:€Ï¥ÒSÏ…µÕáN¬>—(­‹¸s¾Ç¥y‹œñHÒ¯\Šóa k¨¯¾]d;ci)Á¢:7ˆ‘nµuDzŸýšf»‹Ú>Ç¥3xí^]ñ-ñ·µšü}éM§ˆT/uLXóýkš×ã¿è/..O(`Ë ž>kHBÏrïÐö,!Šïæn2pzpEh댆ó´«Á`U`®œ¨$gåÈÉž=kÏĺ‹L°Î‘<ÎΨ¡6nd—c’zƒŸÎº{¦·ÒZµãDþWßóu7süëš“KÒ4ûk‡}Bye÷ÛŒ¡ Ì@êOÍõ¤¬7qn<\±K{åÚÈc„dH~p$ØÜvÁ¯\Sgñ%Õ³ÊÓióyŠ`FŒÈ¸Feóôé@ðÞ›yk=Ŭ¬ÿkÉi#—!•˜3Îpztɬ™.ô—icšÆúm£jËŸ0BÙ';³yäd犴¢öD¶úš â‰î­wÉhbpð}Ùúî—Ë#8ìTýEJ|BRo6pÆ8ÅÛ0ˆ˜/Ls‘ïMŽß@U¹ˆˆ~Ê"ÚG¸È!{ärr|Щá뉮•ãHÌ&WHÅ~W3õû§Ö–‡¯r¾¡â]FÕcÚ[¶à¹2±Ä3ÇñšÜ¼¾š-{È‘|áneDå°Ûr½b]Iá1n¬E#¤QdVC»#ª¡…kÚêÚtB &d·”ÀB…@éÀ¡ô²ês‰¨S¸´+ÍmrÝ[Äzc ç›t«—íý“yÒ˜ËGg#lOõnâEPþ¸ÃgÿšÎo @ëöhâSw#E³Ël HÂŒ‘éÔU­FóJ´ºŠÚöÞÕ`Çr´[™Tº¨ryü)ß]…m7eªjÒk‘é÷Od˜%‘Fw6w—ŸUÛ5ˆµ]SOÔ­c²¸DÐÈDS/.ÈT€©­^Óµ-Q¾Í¤8¹HІh 0@ÛJ‚GbJ ×4ëÍkû1íÜÜE+…i"ùC*ƒÁ=ðr>”ºì>›˜·^$ÔÑõfI­ÂZ¤Á ˜Ù à·?ĹënÃVf‰£¾¸G•®ÚÞ>ÿ˸q“Ž3ùU­BÛe¥Ì–––íq(Q!xÁÜ3É#ØñXº^²O·Õu D‘¼óOmݹþ_™;>@Sׯ½5¢ ™ˆo§³ñ%›Ep÷ ù.3æ~õ ;6Ö<Õ_í«ë·¹QpðâXÎÑJ~ô£/N@ }Ík_ø‚ÁæG–ÊæF·‰îØ8*ªÅNOPO¦}Å:ÛÄ[“ öRG¶Ù'r0@-œ(ä’A§­¶»ŒñJ¿öçpÚ±î,{àƒŸÒ°~/UñY8Y“ôg®ÅÎðÍóFwm!ºkšø}•ñ/ˆ—þšgÿoñ¢?Ãb=õ4ÉÏÈ{Šq<÷Å2RJž¹¬MBÓaÏiÅIsͤ¸ë°ÿ*¯ÚèÝòçÇõ«ñé!ÿdÒˆ3ƒ¿pÞ1ÒË ¸‰xoy’»’î±ù×vÂ_X†GÙcaÿÖ»§AŒ“Åk>„G¨ÝäÉŠq$)騠1 ñïNb>_çRX›±ÜRî!{~4aO;±ÞµY6–Éõ¤<ÀN§Zx‘@ši‹äf‘“c‘ž´Ä:I0ØÆkÿÄ6ö7+Œ¿ÈdvΨ g߯JØ”d£9àcµqþ"KIukn"h× ÑOâ3N)7©2vGQæ+ €1ô¯-ø—·þ+n?åÍô7¯M·™.á/8V(w ƒƒ^gñ)⡵ÿ¯5ÿÐÞ®Š[ò|ÐÍêUÊÁ?µ5`JˆmÎbìzYv¼‰óÂùg÷ÂÕýAY´¨WÈ\äóÖ¹Ð[ÑÿäÃŒ$þf´ –'’1Yº,Ⱥt’;`oÆOoóšÕ€?¥Z2{ ¦®?â\{ü.È–21×;±ýk´' ÐþUÇüJ#þ˂۷Œ¨Ï}´§ñ"%ð²o¯üK²>ïî°O_õ×W’£êk‘ð+·ö^ ³q'þ¹-t“\4exëÅø˜ã±ãw+¦[Ëö†·ò®âo5z Î c¡À$óé\åþ±¨ÇsÜH<°ÜûsÛ¸¬ù|CzðiðX$²³<2M3Q‰U=½3ƒŠqºÐNÏSFYµƒ.¿%¼³¬¶Ð‚…† +n¡`wzž~•“åϦ¯µÅÛÆ±O.ù]ãdl¬x$†íÈ­ø|Q-ÂGäX¼„Ù‹‰ümʹ Ÿªc>ãðŸCÕŽ¬“‰ìVXâu·ïYpßÚ•ÚèLÈÔ!Ô.?¶'™î¦Ž-Ä6ée7,¸ê~÷Oð§\ZÞ47Ê¢êV1ß ¸å¶”úóŠŸSÕ/¿¶eB9í¬ K‚ˆ'z¶ç¦ÀãÞwâ«2õmmÑ£ŽÖYU¤b|aIÓçûz††t¶7·ˆÙ²¾ˆ›ÈäV#…6þ^AÝÙºýyï[z&›um¯êw—«1‘¶¢L\ylW ÎAÎ{cÓ­eêúÞªÖóÇad”ÀË)ò„˜ê0~÷=°8®† èbÒNÎn#E‰åáåb¹zž´›vJæ'Š4­BëQyìlã›Ì±xÙÂàïVç¯C¯j«ÿý̺¥ÌÉg fY®š$âP?{5§â˜Uô;‚ò<¥÷¡È*7(${àšÀ†îþÕõ—Q¶°-À]Ë8äqîzqm­Ò¹Óø{N›MÓZ9Ò(ä‘÷¢9EùBñ:ãwÕsÃ@½k{ב ·™šWŒ¤¬|ÂûGÍ“Ç Ž¿Åí]…á“uœ× =Üq¬Œ@Æån‡‡o¹ýN;£¯Bò¢¼Q¤^L…„¬ÎC‘Î2£p?:Qnå=‹WzÌ—rÒ2‚0ŠB› +c?wóü6ÑÌdæ£X&hPýÌ9QÕµÞš,'žà EVe«°¹µ—ÿðMþÍmR}þjÍëÜ6àÌNwãŸa[ÞIËݶš>ÎÈãM%&;#O X½íÕÃ]Ý™2a‘QN§h9§Úé1%ßžòË(6Ëk ,0øèN^OOZÛ[nH,2LÓ>ÊwÅvƒž;úQÌÅÊŒÍnÝ"ðíܨD[WTQЄ\€JëŠ1†PÀ{gÿ¯]¾¸£û*ë§0¸ÿÇMpž-ÿ –¤ µ¢1þþ5pø2øÑè«÷ˆãëK÷³ÓzQ˜öÛš¯ZÉšv±¸‚4Æç”~@ÿÙjíÆEœÄ á ý*u^NDŒòëV.ëYÀ8%N $ àeIãë@@lâãþÛ]›ßÛ=Ü–~oïÑ7TŽ;ôÏ#q\thÒ|AP9hàŽ2GÑÛ?¥I¨ÙÞKss"Av²—ùXr®d‚bY#Ùkv¯oC4ísª¶½µŸ)•Ý·m pØö¬C,Wp$‘œ«(a‘‚23ȯ>ÓôëÅX#E½Š33Ù;€î Ï2ŠUŽõe‚Oø˜¤ÄîÃïÁ#É?†häósжA=°*;‹ˆ,-dšâQKŒ³ž9ÿë×'¤ÜÏdn¤žâúqqŽU#%‚àŒ÷Ý‘øU¯ÜJ~Ì’JñÅæäʤ§c×<ñÇjž]l>m.t™-ƒóidt‚Ó|®GVcŒW·Z›KŸRžÓÅ >ŸºÝéüDÔ±Î×^îô8wF2̸ƒ”ŽüñG srÈ0UÎGznüß)ÏzóÖ¾º¶†k?´m…a`cÏÜäÙëŽ1øÔÃÄ—®#Ž+¨Q’%]»8'rÃØäñíUÈÅÎŽÿhÁÀ¼ŸâWüŒVßõæ¿ú×S¥ëZ¤Ú”1K4/Ä \ºsšäþ!Ëö­rÖHeû R}ÄŽ 8E¦iž•l˜ŽQÎJu¿v*Ýî?±¡Â‚LääUKu æ1=”Oüó«—1–ÑàCÏîÀùO¸®&tðüA´ÖW¾è+c‘ŒY^Qö9Ž ŸütV§¸­“Üq^AÍrÀ> ¼ã£GÉç:×Zp}s?ð^¢8û¨FûkZAûÈ™lÊžÈÒ”-‘Îqÿ,ÇOʶu]FÚÈÀ³C$ÒÈ~D °ÇVö#Ÿzç¾7üJ£²6&?ñáý)úänþ%³û]»ƒkˆ¢…7³«V­…ÀlçðïTÕæÐ“÷Q¡ªCe©K&˜ï"\!Žå¶ 6W’0y^•Z :Ô­ÄRË<ÆÃËŽ@K,’nýNGJ­oáÍAu[Ç'•Qb_0 FbËÉÉʶßÃ5NÛÁ·¢ÊⳆ) `º’H¸. ñÝ@çÚšK¸]ö7`ÑtÛ8-àûD¤Ynt‘æå‚0ÙÇojÊ‚ÛC¸Óí ÜÊlvѼo€ÍÈ~»Nbrzdu‰¡ÞßÝj¨#|ÐKs*C 7.ÿ—ŒnãÙ=*Y¼;|tHbžÙe"w•­¦”É凗±ÉÜÅ¿Ƙ¾FãÙhzjº«~õ,„-LCW¹ÿ´y÷¨<.¶ÐÚ›ˆ,%¶2"Fªóù¹T^A#üŠ‚ßÃrÿh<×-o,xV2£~ñÉ„FÊF>éÚ©íÅZ´³ºÓí´K#HB¨7n1´a>aþó1ýj^Ö¸Ñ Î•eñÔfVKwV2Á(„òK0Rg¾AéøTKÿõÛÝ_ÝZZ‰X#ݘÙBç ÆG¿5©¬˜–ËÈŽõ Ž#r–”õ(uÍ`K¥Ës¢ÛÛÝ4rƉ º³õ êÃq8É!ßðÙ#ˆÌ PVr£°o¦Ü}{÷­g–Âí`Õ#"Xí_+i‚>V?Q´õ5•w ºÜjmçÛAgwf!SåüÑ¥r9ÆÜW¡’Ý´ˆmµ ›y$¹SÈ6 !Aç¦h~@ŒI|[rÑÝ­Æ™ûxÄÞS30I+´ ߨ5¡ÿ 5°ºDRßÈ’Y ­—€É·ÎXTvž–+Ë[«¨^Þh|“*Ã‰Š¹²AÀ=…<è6z¥¼Ïu1lé#ld*Œ‘ŽÊ¿•7Ê/x•5åšòd°ee\(;‡<ò2½½sKªjfÓM–ù`óž4v(¼p:þB›§Aa©jBú¹e’Ì}œ²ËòÈ0ÍŽ&Ÿ©jÚQ–m2á'xÝJNÑÄÅÎXtê:tÍ.º"ºöŸ>c¥ÎÌÎèèònÆŒ¤ç,@\:±úVÕ¯ˆÆ¨–ic$H ¨•ÁòÜ)ã®9ñöªëŠoRÍþÕæÚ)}ÎÌ|ÕncüY8ö¶F5Hî¤PÏ,ˆfpy˜cǦ#?Z§gЕ¡¶&€! ϧ5­ë·vWÉq4rÁ,‡vA ‹¸=j凨¢¼»˜N³\]‘ ¿å˜TQïêjŸˆí´µ·:õ·ž°)8ÿŒdÏÒ¦6¾¥;Ø£ˆµo·˜|›Qr·7$Ãæ/á1éˬõ^Xôè µy®-îY m?wô$žjí—ü#qÃgu"[£ÜºªaŒ˜)ŒsÜ`•ÉãŸSM°Ôü=´³‹H-ã±-©P΀±`dŒ•]ÅÄ"êf‰ª€¬A'©áÒ°t¯yþ žæêÖh-d(Ñh_Ý“¹†O%AÁcëO}l-´¹ÒÎó]xxMsE4eã#Héé\€äøMnCgsiñç?îÇ^q47úbOnûâ•7!õWšøÁñÁàÚl|{쎈|2 |Q=D¿ZN„ŽM=¹=½j0>nÙƒ6ôÛfé†9ÿ¾XZšàÿ£Ì?Ù=j NÙáÀêà~´ýC"ÊàŽÑž´DÇijR9ùcXÆ9!1ÿ³Öþ¯u,\Æ?‘ðv¶@ü>¼Ö'†Ç™â]bsÊùŒ¼ú…Š·µA¦É§ÎºQm˜¹ã·õÅm/‰Çc˜Ÿ_Ôâ°Keƒ£ÆG|‚›ÁãՀϹ«ÇÄ“>c;åÁÜŒ`2íUüBœÕ•Ó|7ª‡´ŠHä‘YVRXchõöZ£Ñ'Ô®­‚KiÚL#“9Îxù‰÷àÓÑô½ÉŨ3éEŸdn 0;˜ì ããò«ë¨Û_ÙÜ]K§²µ¬ŽÑ¬˜ù™GP1U Ñ´W‘d†ñþ\*ƒ7M…GèP ³Ÿ`óN[×}ìåÔ¾Jïäé×õ¤íÐz•¿á%Ya~ÀÁä$+äRŸÅ…I£k{á‰.®-Fõ‰¼ØYx,#œþ5^ÛÃúpÓRâ=BàFev9à°=Ǫδ­ô1‹.ŸÃu+æ8ÜpF?(|¢W0ôýF×ìq.¡-çÈР†" vÄç¿ó«1êÞò MHãU儎:¯AT­´ûKib´¸ÕŒ¯ÎÇQæÁýH5j_^C ¹ŠrÏĉ€ÆOJo”Z›FÓMµ¶7ÛLjâ,FÐ;¥yW‹®m'»°’Ù‘c6c€w`ùÔú׫[ØÓo-¢ºYF9!Û¼Wx¿LžÃP´Ž}±Èö¡Êú|î?¥U2f{ ‰Ü72Â3Ž¿òͿ®¼¸Ðíˆèý¡TôÁˆP“Ž"?øãU–†cá»vqŒ»ìϦk…krO6m%êI “ŽûEkòŒ~+Û…­Â°Æ6޾ղ8ëÎ=ëDg-ƶsšæ¼s“à½Hg?"ç?ï éOCÐ×=ã@?áÔ²Gú‚•\~$CÙ˜Ÿ·.0Ï”„€Ú’»9ÎÞõûµÈü=ÇödXRÏïË]â€px§?‰„vG1âmBãHÓÒH@I%”Æ’IÊ¡ÚNHÏ}¸æ±$Ö¯–þêe’Κ;43‘ÀYÞ幓Nk¨ñKÇŸjÌÁeû\K 'äNÐX`ä çêG6£§ÁXÁgòDÐÚ¾èð„3ÆNr=*¢ôØOsšºÖu”–Ùäq1‚ÝÞ!;‹Íå±ÿtƒŸÊºÀòh³’J»<üÇ€A!‡<˜ªÍâ„Ygº6Ñ=œpÍ(‡Í"'ÛÎ@œž¼cÔÔú§‰ZÜ.Ô˜Rå 7^fUAç#ŽqŽ´;ö‚µ±·Í£ÇƒʱÉqe‘üÇhøÇÞ*ztaZz®«ªyÚÀ‚ö]ÖË)òÄ8ò‚²#Žw ÿBxÅv–šõ¥þ¯sam…mÔ3Nydà;àŽ½yôªÚÞ»fÞ¨VÐäç›Qóö9vK[Ñ ÜØ*U€Ç<}W¾Kó¬éù³Ü£¤sF%Yœ–SŒVù¿¸=ki¼Um‘¢i2¯’L(r™Q戛úìüýª×‰®µ kX>ÂòF^B¯,J¯ÊHÈ#îäsÞ‹´ö´ÄÒK Œ`,оj1™_^Nyf²µˆ'xí%µK©"i\Âê¬ÏèÊ©ç7מ)ë·²YÅ Ô {ss4o ¯È¡1 Ç^FÒ9?Z¶ž!ÔK¬_c¥šòX!ç!PÄäuâ’MFfÉiªI«È6Þï3:Þ^ßœsŒoïôªÈ·W–RÅp² Uƒa—7BùVäòJîϺæºÝS»Ô~ÐÓ[G»"º>âÌ®ÊxôùGçSC%¥ÝÃ]@bvQ峨Tž½{QÌÖŒ9neøZÆëK°•¯1•ƒÝ”á€Ã0#±ÇJ«6‰xuYdŽÛí¶“ÊEá‰FX’GÞc޼v®gUÖ÷_–Ñ’æ"ûnl³Ÿ¢‘"Urk­ÓõY-.Ö™VÂÛOŠo% %É$ƒ€9ã·z¦šÔ”ÓІ/j)¬ou‰âUG[çqeVqŒò[ßëXv^º[T¨Œ·—Fp~ê2»Ž9•öük»Ö庋Gº¸³Ìq;"œœqý+‹±œÙÆc7‘[+K¶]Qo4„ fÈ$ûqŠ#&ÐÚW44ýóNV¼{T’æ+ã·Pù!Õ0WèOz×Õô«‹¯ =©™Eáˆ!IVa‚xõ„Þ+¹‰´¨dŸ4ª$Uˆæd;¶œcŒ€§õ×[ÜE©ÅÝ®%·bÃÌÆAàûÔË™;±«lŽ^Ï÷[Ì·1Û1s$‘'Î(ÆxèsÏSŠ•¼q$Nf¼€ÌoˆÂ"Wg˜Ï†\òrç½ug9C°ÜNCtÓà…¶c 0G9üÍ.v¨Á‡Ã—)®›ö½Cºó°qåyxÎÎ)ÓøSÍ]IN§"‹·F j|§Ü #¹û¢·ü¦ó@*6ާ4’£ÈAL ~”¹ØùQCOÒWN†íá:Gü¡vo%¿“Þ³WÂÏ“·0c:Ì,HÇpÜ Ü=0+|Äz®Þœ€:œÓÄ „ä_nsG3‘“†lžà§Ú&h¾ÇöY#ÊâEËIÆA˘¨ì|o§j1\µÕÅÔiB“å‚ìVÀã…$tï[Ö±:HÄŽÝGz¶Î¹ [ŸLÑÌÅdfÏo µ’AoŽ$QTp¢¼«Á$/Ž"Ç}=G>Ê¿á^·}¹aà“^Ká#ñÝ `¹6Œ¿\gü*éü2&{£Õ@„Œžk‡ñµÌ·ö Zá™lÂ1•C¶D’ÏzõØ.í5Í2_6Ý–&&2­ß€{}kÊþ!=¿ü$Q[Aoµ-­–.½NælÿãÕTÝØ¤LÒU¼¨H^1$vê?҉Рÿsx…QÑC}ž<œ*ý>vvÞ‚®;¢ÆÇ¥ÁøèFîå¬ÕÚê­¦•r\´Ÿ¼m¨±Æ]›èª ®á’ƒ¦ Ï>JãŒqæËþ5§âmâ-5o­ÛìèYPDÌí:°©@8¶çµ\•æÉOÝFî­n5‹AÏ‚eß•ádVY'¸ªÖž¸[û¹Aº¿Ílrà ãÍõ<ö¦’î ›òxygµšÙ®äg[”"5òÖBùçÓúÒM¡XZ¢ý«T¹%îÈvd\·—µÁÀèWwÓGEÒô›Û׆ãË{¹ʳ®ÐÄG¾ß犃\Ñì5{ˆî.<àñ&À#}»”²žqèTb¹›Ÿ ^=äRE¦Çµa´ȹ —÷ÏSíÞº{Ùå‹R·Œ€–~[4ò·r¨>¤çò¤ÕÓ)y¢•«xç½–[œÒ¸óÈ 7‰Ó•ù5m?XÑ)!JI™—å‰*xϦj]BA¨é—1éÓ¤…r$ Ç)Ôrzu¬“áéï´˜#1,F"ÝŽôGæ  Ž8Í ]ÁùØÇáË+{f¹…þÊâUg˜çvÐ7za‡0EhÛXh×Çwk rGç£t'ÎA?ÏÚ²§ðÕËɪÅ±Ž˜Q`;Id*¡qì¼v®†ÊŒQÏåy„e¼¡µC“ŸzRî˜×¡Ï¶£máíZX-4Î&ÍÕĆL»°Jç®3’2:ûÔ¶͆•Ì,ˆ–V„/™¸¼¯# ìÅ@÷'#ÐöcRÒ绽l[Ú\ZM ·~vÊ™ç!»Œöüjž¡áÄ“íSM¨,z³Ì$¯’cl~i®W¹:­‹Z^¹6£¯ÞÛEkØ¡Q²UF˜€Ã$Œr§µ\Öõyt½)®Ò4;\+’ »€-×Í&—¤Å¦ÜKqöÉ%iU•ðpP»°p£éPx‚M&Ke³º¼–pdÿGR[hä“€~^A?…-ЭlV·ñEË][,¾CBÆ1•#… Žq÷²sLÿ„ÊÕ¤òÚÖvRYKˆø]®Ÿ È9÷ü*Óè¶÷&Êyµ9&’4e-µfGÆAwÀéUâÐìí&–öIæœÄd›ÈŒ®s)ŒyG­WºO¼jMkóÛ4À–…ÖXÎó×gõ§jz¼úuÕ„ÛÄÉrì™-‚˜Fnžø¨Ú+F×¢Ÿí)¾8Ú4…{1Áf>¸}3K«G¡ê?d{Ë ~ëíÜçåÙÇ^¸#ÿ¯R¼Ê~F=¿Œ5îí“ì1yR räIÓÍÈãœh·ñN©ödéÉ-Ì÷’C+'dÎsÇ_—úð*ö“¡xv쇵>cÂ"]©rX(BJƒVÓÃz:n‘mä\N×+™aú×§'z¦âº”»ŽÒµ›ëénÅšCo H²n.êì§#çX׺†¡eã ß&_6Ùm£‘àvåGÍÊ~+ÏûÕ¡oy¢éÚýΛ o5ÁÈÎÿëY#hç==1øÕ{ïhÑJnà‚9åY´“2íg%±Êà™Í$µÑ¦åH5Ýfhô’æÈ èÚb9_”$ Î×Úâõ’ãìhónÏ&èžo/wF$¯QÖ®]êþ±tɇ}”~t~\;„@•)OŽjä§kñšÑe0LɶâuïƒøSÛ[ê×9mP¹Ó,®å–í¡º“ì‘Èe&M…ÔfSžˆŒtÈ©âñ ýܺ\k™ð¯V[ÄÔ´ØîcŠHÕØádPŽÄŒw¯.ИˆšgP<»ŒØï–”6Otz¡=:cÒ™Ál’2*CŸËÖ˜£žOzÁ›Ïp¶·6¬Wpi‘·Z³t¿èòöMfêg6G®.þµ©p3nßîšq8ÿ|E¬åZAÆ?ØŽµ5Û™¬-c{HÆæîÚ™þ#sŒûVW†¹ñ®N~ðÿÐ#­}}¬Ö;g¹7„£Ê0o_LvçÖµ á+ÂI;+Y 1IµÕ €Ì ¯Ói?@{Õ{¿XJ¬¶öI1em”¹9À=AÛþ5rÂÇO¾Š;˜¦¹Ë$v AÝ¿zaàÕU4í:õmDW“ùrE*F<±Ó'æÎ8ÆN3×"ž©,z¦ˆnÍÊ«¬Œ©>Qþ,?N f‘§Ûj¶ÒêwÄÒ݇²ìsߎ}è‹Oµ}ED²šE–4Ú¤á~WØãð5µa [ZÇiæ!’•OON)7mk¹ÍÃ>‰±#Í 14NdYõ$ìÏN9á‘u¨^Ü=ÑXòžlnøI2>Fÿ{RßhW0&¥ kO³ÉûÔ’Lî}ûOlg<ûÔMáéæ –—6nèS+×Ë C~ ONâÔ¶š‘w3"L ËLG/Ì s×®{ÒÅá‹H£Šu"2ƒ€–¿¦¨tÍëMÕþÙqm.wDÜ’ÄcŒ}j]R «ÍNÚxlÌ‘¢áØ0~u=>‚•Ý÷–ØžßK‹Oº†Ù/Y²¬Qõf·YþïÌÃ¥vúfqæÚy–rG²a'˜Ì2‡jdõç8aø×'ñ[þFkOúò_ý%\¤ËcÑ4¶af¸ä¯´†®Z4w^N%uÀúUM&#öSƒ‘zrÖÕûM«¦OŒ`\²õö®&uжÛ=?ÚzØ 6IéYhºnï÷š·~¼Ö‘ØÊ{*9â¸÷xKVÚp~Ç.8ÿdÖÛp8šÇñFáÕ¹%¾Ç/~>á«[™œÂöWÓ‘Bœˆ@'ôÑÿƽËÎ … +¬G Jó/…‡¨Üs zâOþ½zƒJ¨€‘É=ªê|lQøQ®êsizwœ«v‘"Elãs0Q“Øs\˜ñUÑa©=œ`!n@13ãÆ: çíZþ2¹¶¹ûZ–‰Z?—# ‡ žŠN2}+‹‡[´Hm¢YH £xÙ÷8V“k"|¸<°8`ŠqW@ÝKÏk1cªÍLd';O–ê>_buïšén.D6,¬ÛcùT¶Nƒ“Ö°ç¹ðÒG$3[@«gÖB„ùhÄ|£ÔýÜÎO½S¶ñ”Sé·rùqÇ"6ØÕ•ö„Ü18ääã Å&¯²vÝŒÑêÙíßh…Þëjá•×bsžsÐÖ×:ž¹§ÀLÖ³G<ðg÷YEfV „gªœÄWG¥§èÖ6Ú}´MwnѬåP¢;³ÎNs‚jµÞ±'ö·Ùã‚" ’¬‚ÜÒ߸€=9÷5J÷½„öܳ¹¿Ó4ËŽñ-Ä–±ÊR8@$‰Qyõ8oǤºÖ¦­a º¸;&ÃȰäÈ¢-ƒü½—;š³ÿ )M1Ÿfˆ6ÛíÈßµeà22AÇ\f´l‡éTìõ N+󺹙‘ß÷3àf ¨ÙÈxÞšm i3GÂÖ¶úY†x¦… æ(¦;š1´:ž7db*·‰ô{««ËF[‰`Hže¶uC¸ÚO+À'ÿ×YÑëÚœÚT6öQ4hšgÚe¸ó ´lC'’vŸÏÛ›éâQ4Ø|»HÚþ[…¶bÑ’c.AÁëÓÞ•šw ¦¬fê~Ôg¸Õlf•šÚ(í›ÌUè•àõgÓƒR/…¯–ª¢Å!iÖ(üÀD ¸p=±‚9îjMGUÔg·ÕÖâî(#·¸HÀ…ÊÈ«æ''ž›X¤OÎ××cÏ„" ˆ…y‡ùe˜çôàŠ¯zÂÐbh7É«Üj-a ¤–Q"0g@` ’wg­E¡è³^k¦·µX¢¸-"†;[1 ãŽHaÏlçš±¢kÚþ³§[y¶¢?²ù·#£HIuFzŒ¯µ\ñ4÷6·zrÅs,)!œ0Eäá  ÷­+»Ø,·$ÐìgÑ-¯áhìÚè³Ë@y"–f]߉À­]:\[Gisw ·É3„ rzœv®>[ë´ñCKn³yþAŽ5ò/’dBN:ïÝÜt¬í]¶ ò[Ýß.aW•Ý0y/–èÚÛ@¡Âú±©[C«¾Ñæ¿ñ"\Cq [“ IŽZ#b9Ï}ØÇ¦}9«eá7ŠÝ£‹YY!É1ÆÆ3ýÒ:úTþµKsåFêZÚÙŠ¤!&0sœ œ“Üõ¬ÛË VKÄSXÛ^E++º4c (1»@ê჎JJû\4ÜÔ—Áª–Ú¤0ވ㾎8Ô˜òc¡zçqÓŠ±Ö›áÇ0^êŠeº™¦Ud üÇÐgŒ÷ªZlöšî›nßÚ²B,Õƒ»¾`f$?8èØÇ=½*ž½£Ý>·s$‚eŠá`xn!¥hš=À·•<ä”nìØmªF¼þKǺÔ4Ý@³Ï4s*)Ržd|uÁôǶ:•a|-go™.¥*Ãök:©Q/Ìwô国cZèºÂÜiŠÖ¬Ñ@Ë &P­31`yù˜£.zýÓëÍxü/~4y£ƒL– ®]’v!NIäÆ3ÇJ1|Žâ8ã]&â¸yãUU’ lq’GåZ9X¾#é€w*﹫ÓtÛì¼7om?ÊÈNÅr "nÊ©#‚BàqÜW˜i §âN˜ÏÍrN=|ɨ†Ò ô=dGéL#<˜Ç¤aÛÌr+œÔÏÕ&±Ç{„ÅjÊ3öHý+7Ṟ>—Qÿ:ÖpGéM8ï §üOµŒàê?ôÍ+W^Ó¥¾†ØÅj—)ƒi6½;ƒÞ²|?*Ç®jÁƒd^@Ïü²Oð«ºþ§w$6®‘+G3<¬{*d`úäƒøÕß˜Ž†2xR’ÍCÙHp̨†eÜ¢/\òb3QYé7BÐ¥µÄ ]ÐÆ–Û¾H úùÑÄ7â mBË-’ˆÙÉ9 àcúÖŽ­^]ê^IŠßìÿ9Üæ Qǹï!$Ž|ÅwÉ‹{àÉ“±9ùÏó#ëE¢ß%Êo-Öi!YsÈ;>§‘ƒZz–¯y¹1€4ZÆï$a¶®+ œIb:Ž•%·‰'M Å›o’dHÕH%r¹`Ýëïš5 Z­äW^ÔþG)¼$mÎãŒzòqøV‘-Õ…è‚Y ¼QHVIL|K *I#Žýk±R(‹’Ä{““üéãË•Y+©`GéP¥ebšÖæ‰5 «Xíe€~àÅÂîÜ{)ô=k3DÖšÞ$óY^æêåC–“€¤ÇÐ1]Eõ­µÄ™IÛÞ# …ÏlŽøªÓèZ}Ø·"”E7›ù½Gùô¦šµ˜¬ïr]^äÃe"†2/$×Ô}+Çüy¨Þj:ݼÓE°µE #˜ÿZö©,-d³ŽÙ¢Sdl^Ã+Ⱦ%Ù[ØøŠÚ;hQ¬Õˆ÷Þãú Ò•…;ž™¢[PÙçÊϯï+Jȃez‡ VéÿPk;C•NŸ1ÈîÙ>›«öa¼­Cz¨ã#ŸjâgA6ˆ»/.2 “Oýôkl;.kFcö¹vƒ¤gÓ‘Çë[jRsø ¸lgSq–CÏ8Ådø“?ð‹j¹&Î_ýÖÆx÷êk+_ùü=¨®86²u?ìšÑnAÁ|1q%´Y@»cqÇs¼sú×¥³IQZòï†6È Î`9ÿj3ýkÒåÜa€O¹éÍ]O‰Š 3õ{X/4émÙ¡Uq‚Ò uçîž qoቮm#W¼°š2%ŒËä¶\> Ø-Àöô­ßA$ž¾ù €F[b®ãœ‚˜®|Zê—rÁ ÍzmͬÒÄȬ¥²X(lÚG_Òˆh®˜=Í)|4­e¨[Çv¸‘&I²ÚFN~a•öêj„~’xïɼ†çÍf0Pf@ÏÀ÷P:ž†®ø-n®-.%–K†BÈŸ;‹ˆÔ8ìÖ²—GÔV Qa´ºˆÉvDˆË2T‚œãîn§^j“{\4ìo6…ͽý ¼’?´\ ÀU_ݰ`ÜdsÊ÷¢MÚ[É®e–eV”J¹Ì[OÓ'ŒV$ÚÌZÔ^U•ì‰Ù…”¾NvóØé€úüõ:µ²Ç¢NdîFÕSh\ž@ÎÐFG¨ôÍK~cù6ÞÓb·H"žíÄ‹ó<ÑÇ–K)õª±Õ4]'Y¸h,¯ÞP¿f&Ù£•pä õôâ¶¼1§Ik¥"Ì¥6Ï#F<£d,H%OÝêxôÅdê^ºÕ.õö‘Á»È’ 7›Ë(¿/ðýâsôüÕÝØ[M W–ú»öK‹²L“[·•œTº6 ƒÉÿý ï…໽yã¸xc˜F'‰T3Ë9^O+èqU-<¶S-ÅÒ—P rEœI¼HùÎ[€=:úðӂ̹¡6QÎÉšBä=¨,:ä‚Ç’wÏN{ ­­x–+• ´®ñ[5×*¸S‚»½kCOðý¾Ÿp· q4‡€Wg}刮OåY:…î5Ï#±OšÈÛ±Fù¹Ïz䃞i+7¨ÝìjÙjKxnÈ·}šo's8;¾Ulûê°õOL&Ôá²°Ä–!Ý:‚ f\ s†Ï\q[ºnm¥­ÆÉ®%óä?žûþ` dgéþp*¬ÞÓ.ÿ´2÷ Þ•2”‘—pQДsM8ÜìgŸËmoc§{{V’A#òЇ>ôxã׎:E‹õ'P?³¢{™¥D†%”€CCærq×·¦O^+mü?¥JÎÍ›šÛìÌw°ÊzóÉù=yªëá&(%¶äYT˜È›AëéEãØV‘_HÕïu ëÁ5¬1¤3¼ "LX±RG*}±Ídëú–¡ý´ÖV’NdHRX ‰ŠùÙb9èöÎ}ÇSe¡éš\—7–¶ÛáüÇl’Äþ=9íQjZV¬¤CQ°yd²0%YAæ„×5Á§cëYÔ£»¼´i-SȰ34‘±7ÊãåÎrC&yìjÕ¶¿ªËq¤Yù¶2IrYÞuÈYJgo<9õå-˜´.;ؤM:˜DÐÚ>ç¡õ«Ñév‹p––ëö|ù8Œ/=vúgÚ—2ìbÛ[Û&žÒTž Å7§# àμƒM!>$i]r:ÓI«Ù.m¢ŠËdHˆ›·mUÀÉ9'ñ&¼[Nb>$鹤N¿œ²ÿ]=™3èzû/^•~µ)69ÀëQ†ëŠç5)ê#‹Oúù‹ÿB¯&l;àÖN¥þ¦=ÄGÿZ×—îÉÇ<Ñg§<‘\øŽx›†nzD½ªô#´]<ý¶62²Å¸d¦îƒ=³Ÿ¥TÒmEíψ`bÈdѰÕ¯Jž 4’É+j7%äêÍã;6Ó¾kwn¦jöЕõ_Ld†C}0@Å:Êæíkk»ÁK€ŒIn~¹ÜÌw>c+kË>&Ȉíw~ƹÿ¾Þ½:;Ë{‹¹mP$*¬Üp3œsøW‰øù£oܘ0ÀíÓ“Å:q» ³Ö<4Ë6†›ÇüºÊ>˜µ¬7ºj œ*ï?Ʋ<&AÑ-:a­d\ú|ŠkfÄMDÀ¶GÉ=ٲؗJo.öUq€rpOîÿ…m§žy¬-+-¨¶àU°zö\VÞp8ÇLUCb'¸ó·ò¬ýTÑïA<_=û¾íÔg§lV~ªÇû.ó®L.=;V‹r7øh#ÄC䔟‚8ë zpûƒ8æ¼£á™'ÊëÀ¹ú"½PTg&®§ÄÅOáF3Æ>”ÎçéÒ¤“Þ€sƒÈëšÌ²bŽ%XâEHЪŠ¥T'þT’9DÊ)'=ÍÊç ´c¿Íï@ð:ž¾”¸Ç÷±éLŠgèzýïzkM!¸Ú `‚@Ï"‹”©=AüúÓFèj§Ú$gݽAÛ‚3Àç¦Â ‘FÒ2Éo¦h°Ñt&A#‘R„ߟJªÏþˆÅ¸ÀÍ(yB»—Ë*6ü¼ƒßúRHe¢ uÇ¿zcÇfÁ\ðMSyY¤]ò``1õ榲’ÁŽT”Äs—^/[[˘ãÓæšÖÖQ Ìñà˜Éç!:‘ï]%•À»´ŠåRDI0Y«~ ô¯6Õ$Ò›ûz…Í®¥<›Þa’óÊœÍvºmõÝÐÙ%Œ––‹-ï¾W$Ôm8¤¢¬Bz›˜Ï8 °\å¸OJ C1ýgyÍ*™1´ï6I'9ëYزèù€98¨ÄÊîQ_ç±UÃ>#~08Ïô±mY%ÀÇÓ4X ]%1€$ÚCeŽ:OjHáuo¾qÆ0;Sq·†óÀ¢ v«a†2pOÖ‹"DFïÉǨÞÙÆí¦:þ4ŠÌª¨9,[‘Ò¤yXH¡6°ÈÜ;€{Ðù¹òÉã­E *ë±Ïó¤pMÄ€F@ÇÞÏ_óŠthá 698ö§`'ŽÚ5—ÌóRzÓ纊Kî9,=ª´jþYUŒ.OíN(B0P n§êh°nÛ6Ä©ý+Ä-~_‰~A ^Ì?ò+ÿ{|ë‹@9l^'÷>#iÄw¿—ÿFµkKfg>‡°8õÎ}*#޼þ5,§žœýj·#“Àâ¹ÍQKVÂÙ!ô–#ÿ‘¶¦ãÍÏ©¬mdfÃôÑ ÿ¾ÅmOÀqÞœAœ_…ÙWS×Bóþ¸¸AÒ¤ñKÝͨ¶·™À,Ì!$8=‹qïíG…c¬îä‹ §ÈÇë]+YÆAÁeÈçŸlV­ÚW!-W³Owíq 攘±'æaÆ}±úV5­êéélb–ã÷’àÄ”£+B»± )÷5è’Ú†€Gæ2䃑׃š†KäB®¢EuÚwzbŽn¡c€¹Õ¯/´ÉŒ—î µ›hßó3àôàpñ®£C6phÖVâq$¾G˜20Yr9üÈ­+M. X>Ê‘(·wÍžsÔòŒé¡nä Þc @p(rO@JÇò?Uš`Æh•§žòªFw!Çü©®£í;´·¹€Gspƒ”øg•œÔÒiQm8¶‹çîr9?A=ËX\¥šEɉºaÉ<šm¦ XÈ´×®måu6‰b›ìäò@“»§QŽë¢‚1q3í Ì¡¶ŽvçÞ±¿°åC4ŽŠ`òÝðX®ÒAëÒ¬ÙY½ÄÛgÓj¢«œ…Ú1‘õ¥&º _©§oeK"žVFõÀÀý+Èþ'ÛÇŠ!;F^ÕXýw¸þ•ëé!UbyçÞ¼Ÿâ‹oñ-«mëd‡ÿzªOQLíü(çû+KRGÍôÌB·´âïÁ=ZÞÉ=+›ð›gKÑÙyÂÆ§Û÷kþÝÒ¥")”*…Ñ€'šåšÕ›GdYÓ I\±$g§Ð…ocœŒãë\î›" @0øÁÇ|­oç r1íNSp= ÁÇÖ³õ>t«¾<—þ¯¶0yªWÊ „êrCFÀñžÕkr1øb„¢ÜÏÔ×/ð¯QTÝŽ9äšó† ùPÛ•}ŒŽþ}+ÐüIm}6ƒ4zk8º%p¨Á†á• Ÿ—#<Öµ5™~é` Ÿ—æš<¼†iZä_QÖ4ki, f¿¹{ß²AÑù€Ø\a׎ïÇNiÑëÚäšåÕ’ÚYy+4ð®\çrÄIã§<ýO§+‘˜êÄùŸxnr3ߑҦ @;xä â¬üG­<0Îm쉕­J®ö,ÊG'À¡®‹NÕÄþ³Ôï-Ã"´­ÑCgg¶zRqhiÜÔÝ d*޽ÀôªÍ æEÁÀ;j=ju±Óæçë‚«#.B±ûgÃi÷W¾Òåb‡uå§Ú¤më(dS¼–9~{t4(Ýìz eË`ðÄ—Ò¢Œ³>Hùºíé\Ãêúí´ÓZ5ÕŒrAb.•;‹qÎ>ò©5­áöº¿ÒRêææ)oÞ!·<*09î9¤ÓZ3QdVû¡Ž"‡º‚97p²,˜FpOÓ‘ùךhÖkg|óZý¢d‚]·ÊÀI$aƒ–PHf3‚qqMÕ.æ¿Ó šêú†›OyRX¡ UÄ‘1@{íî;ãš¾MIæ=2@ |Šrp3è)~ÛÚßÌA;þYa»hÇ8ú‘ùׯ©5î™ÔĪB²~ì)¼_8®}¾C»Lô¬Ã=ŦŸ(µ»žße•ã#,\™lã$d|¸ïéK9A“N³¿ºI¯m-î$Œn䌜öÍMyu˜Ý3Gu.î÷þuËhz·Ø!¹’ê{Ë×–ý-à £vUº` rÇØ ³ã˜¡—EŽfgcÔ91!vPn8ç¢çµ.W{1ßK w Š­ƒƒEC-ìF*ÓþÇáÄ·¹¶¹†`ïæ‹†Ý¸îê2OüóCV@Ù|k1Mgkqk “Cpê±4hIœn àZ6ØioWPøÇRë…²ðýÝ…Ž4÷ImX¼åüÞSözVï„4§Ñ´¦@ðÝJæIÉ—~ãÓw Ï¥6’ØdW>4¶‚îh……ãù,ë½"ʰBwsÎ1Z+®[ù³’µŽæûA™q†ÏQØpO\×:<1©\K©N–Ki;Iq$-熳¨U<}Þ7gê:óVu? ]Èóýš+5¶•-@‰œ€ O’™ ÷v÷ëÀâ¢+³bÃ_±¹¾¾³i–9-~b€Ü›A.?Ùç­6ãÅz4Žò9ehŒ‘Es(†⦳§ðœ³6¨¨ÖÑÇqnRªwDæ!þç·§¥/ü#“}ºÐƶ*>ÄÐN6*Ä“½sŒå³Éç­+D.Ëöž%´¸–ÎdX.¯!ó¢·'$.22GãŸÎ¢Ohï¶Qx0óù ÷¾gÎ:vŽz`ŠÎo^£,ßnGHâUhR,3‘Dvœñ‘·ïQizÙîôë«û„óIgòÚ  æ4“¥s“NÑ ³¦»ÕàÓM¢Ü—Ýs/•Ô-ÉóŽ+,ø§JšâÙÏc0G@"n„…'Ž9ýE;^–Òþ×Lº‡R†ÝídÚ=Þk`®Ð;žOåPÛø~KYá z²yðÃÌ8Ýå9pIÏ|ãüâ––ÔzßC¦[¸ní[Ë‘\ÆJIƒÂ°ê+Æ'~"iÇ<iIÐÓc^½m§ZØÁq-¢íûS™œg?1½ºœz“^C|qñN sý¦ýOý5ãUO©3è{ƒ/»<ã)£ ŒƒNqÔsLžöë\æ¥=`ÿĵ›¶Tç?í ÙŸþZ g­bëÊ’ËÀ¨ãýá[WÄœöþ” g#á/øüÖŽÍßôÓ6ã‚9úW!áœý£Ue-ÿlp:XJê`%wŒ˜ç­k-É[_•Ò›íÍBÒ 2rO¥ ·=ý3HdûÈA¦3döÏ­2I™_i^:æ«Í,¡>@ ò;М“OÖ™¼…ÁóUÖà­º–MÜá°i Ìa¾ërqÒ€1üO«ÝéñÂÖÞPÎæ&E$vŒwÆOáT´?]\jc¼°ß< ávœ|Þ™ê*Þ¾yd«m NsÏžŒ=+.ÎËU³½ó‘-â–æÝ’J«†ù1T’q%¶™Ú ½q^Oñ4øHí¶ôûãþûzõ(ægRýþ½ëË~&:¿ˆí™Oc_ý 觸ætþ húc8O_’ºM9J´ª µÆ³ñ¬½ Ù-ìí UÂÇqŽý«^ÕB_4kÐÛÉüóúW<ÝÛfÉYXu‚íT!{‚Nsü&·ÇÜ'ÏÏÚeoÐB ûðÕÐãÓ'špØŠ›ˆzIü*м2)Î ŸåSñÛ&‘ÔˆÆx=ëDfyWÂðªìÂLí’Eäÿ°¿à?*ôÍOM³Õô—¶ºŒÍsÃcž™zu¯*øfå.„D`äÇOÝ“ý+Ø,qú Ò®“& ”š¡Œ-Ð’ñ•’_2à‚w(À<8íÞ±#Ô<·wwÄÄ¡. I) CHÉ‚Güø­u~h'ž˜à{×ÚQŠö {­JÌM.ª÷°Db$º•`ÊF}ÿNõ1wÜlµkaá«Ù.´9¢óQ6:¨ è#8^£±Ï?C[7:U´Ú}½«'ú5³«G œÙ ûƒøU]&Æ]?PÔg–X^ ›†–5 ‡BqœœóÓZ𭥫Ãö‰R1+ùqî³€{ÒmßAú˜VÞ4ÓµK=ßk(ù$‰Q‹dîix|­Èî WÓ¦ðôsÉ¢ZÀdóÉICÛ’8È'©éè?9SÂ%mã‡íÈÂ¥¸„½¸;T31B3óXÑ{§¦“©É­^j ²\›‚ Gå!8ç°ç^ïAkÔÕ“K·†&’+w™ 1¡ 7¶qÀ'‹¢ëWV ¨‰¬¡k-=?¢'Bƒ$ydœƒœƒ‘ã¨úÅ¥øŠÆ ·]DY^$a”ÇÞVÆ29úV}Ÿ†>Ì5F¡+Ez]wJ«´€7±9Q’GóÔмÆüˆ£¥éÐÏyµÁu”$àºï‘|ÂQA'lŸÇšOˆî.4ý9E¤1M5ÂFáÐ "´›”È•ç¸ÏlTöÞòU7ê7Òh§YYW†XöqÝxö⤵ð¶§Û'›.ئŽD”¸U §¶>gÿ¾©Þ"Ô’?[ÜR<ø­Õ›j‚²)*ãž„vëÍ"ø²Iu+(^Õ£´¹·YA ¸†f*à õÜ*¤ÓRÖ1m¨Ý2C"J“ÌyoaÁÇà+NßÂÚ~Ÿsi?Ú.m¢òV9$ܹܿã±<~”Ÿ(jb\ø¼½µâè¬êYàwuqnUfÄbºåˆ]i¾ÄЖØO÷ã­aËá}9­-í<둺M;ødHüº‚ºcŽÚ‰Ëj²JŽ9=é6º _©ÁÙx²ò 6Ïɱ,ÑyÁ¤¸ÎŸå•á{n\ÃéÏW£êW¾·‘˽ãeF%w+$=A5—máßKpÖcœºÆrw¸@®ÁÈ뎠p+jÞÂγéñ,qL¬2NX·=iÉÆÚO©Äß\jZ޳xÉtн´® 5êÂ…bå9È*r§;ºŽ• ñ Ü2js}¶/&+kM‘:äÄóÎÜäñÏ+±Ö4-2òH®î,-%ýä‘äã¶OùÅNm ‘„&I+–Œ€ràhæ]…fy÷öåä×Z]ÿÛ¢–ìBªÈcûÇí[^ŠØ=qê8«’xƒR}4«k ÿìnâÜ#\<çvÔì?\×f4»9ç¶žHù·v’5’s“Ç<Œýyê[ ÎãÈU$ï'hùLý{f‡5Ø9O5×5ÍZ Fý!Õ¦ & q.0ˆ’ ðÚAõ©f½¾´ÿ„Žm:áÜÆL”ù—+ =äÀöȯCXË:žAïƒúPé"ÈŽªA`wq×ÒŽo åó8“u}i*NþVMûU¸’2#‘ÂÈváÆ2‡“ÉÆj´îåT µ&ˆ­ôL²ò£ßÿ<Кï'¶ŠæÑàš’YXÜcQAa ´~U¼TY9UèxýhR oª\ÎÓÙM¨¶ ñG ¬ñˆ³·iÊÇÅÇ®y­i´½Râ·¹þÑ= Kq$…2žÅ³·8æ»q l…cN60 tâ­»’Ã)òã8=ù§Î§;áË{˜m5ä†ê$2£D&$ðbBq’‹v}ëËu9U|oi"Ÿ¹«¸Ï~$J÷YÁkfaŒm¯ ×ãò¼ckŽ?âlÇŒgÊ?Öª“»dÏcØ›íÏcH„1à ŽØ§Hr ôéI'8jæ5)ë¼é¤ç£)ÿÇ…kÎ>Wϧô¬tÿĦSè3úÖ¼ü#ƒØbˆžy“[øw\{bë1¸“çWÚ@N~™¨í5 Ô™]æ’)%É#|Ëþ­9ã ÷ÉëÅmxvÂÛP°Ô¡¹ŒI—“CÐçü(ÕôÝ ÆâÒ´`ìr7Ûå±w7#•‡Þº.¯c;müMsenb¸·šýÁc¾5€dØ€9'Ö«!ù³Á ö®}4-%ãòm.fD’0Á✻\7RzçŸÎ´Å ¾žiX¼w;Pmo•W99õ;ºzŠ™YìR¹Ÿ‰£\µøeO5– #Æ6Ò3žNFO­XƒÄeåâÛFò¬Ä²ª²’H•Roù†žî4Š;…6ÛFBàà“É$àsR[èW°êL.Ž7“å1Œ•fÜ}zo”Já.¸±j’éÒ@V‹’Ügnî}çØÔ–ú¥½Ì϶D¨M“bFp;ôª:Ý„Ïz±;[Çê%$ ´©ûÀ†8ÇJ¤ž˜Þ)uGy™Q¾BH|ô%h²h.ît)sk-ᵎUiY7dr1’:úõüªã ŠŽ„ó\&Ÿ¥Þ[\é’}•â;°¹a”sø¸þ5µâ »Ë­>âÙÌ@CH½?‘üèåWµÁIÚö7ž» Ïl×—|J]¾!µôæ¿úÖþ›ÜzžžÓEz£#–àeòâ*æ>%Ý+øž$`sª)ãý¦?ÖªÔ™;ž…áYšëJ¶™ãT-21ÛÐ}îß…m U<ù€~k–ðuØ_ ZÈü“"c=@Þ⺔w¾ÜŒ~ñxí×ü+’jÒhéNêä–›¾Ûl þMÖ·àœ…ëÛµsöÊÂúœ’qŸ§5¾IÛדè1D ©¸âG`)‡”çΗ$ôÏåÅ4‚hàw8­ !øx Z˜SÂõ”óŸùe'øW®•þGä>|k²r @ç¨ò¦í^ºŒDDàœqšÖ¯ÄL>¬…A;°®k†oÞyŸk·½š[kd˜±i8?!ÀR$7©8ï]ÑWpdòö±\}îõ^;8Òùn–Ù<ò»^\ ØôÏ¥L]Šjç «®ªãV2&¢q Äj"-ååY ÙŽ}yùÍü·| ym)¹¹X„ªCÁ¹p{¨ãµwóI&ר€¹hfã5ªÓ[#WQ¼ýÓþ¹§Î.S¶¿:/ƒ…ÍÚÞÉ&ùw÷†F#3“÷«ž%ŠKÏ ÜŹ–æX€Xœ‘Ç8¤ÊÛÈòÁÎy'éMd™±´¢á³Ï¥Mõ¹VÒÇšôM{om -”–3}¼!S哞€®F+¦ÒÖ{Q˜±1Û¥¸a#M¹Œ„Ãýsžõ¢–ò€[(NÌ·Þ”#.ߘÞŸ­7+‚ŽWÄRßkLÝhæÍ'EFY@WfV ‘×§O¡õ¨G³»ð–£6‡eµêyq$x Ä–Èv®Éc~†@ ö§Ç$[cec…ã­û ”§¤Çx5¹µ·‚Þ8PF€åÕñó—銾Ò#¹ÀÉ£)BI¯–ê¤+1·Sr‡ï@ Ú¹Qš<õ T¯±ÀïŠçüCâk]Ö9K¼¦å¢•\ã?1ûCZ:V¡³b·–­"®í®ŽeaÔÌÆ®+«ØÑI ŒP0éþ})í)PGó à㊎vÉÎN1ì)Ï óVMÏ…à.xúÔŒ‘®K2*ã¨ÜH¤–FŒŒ.GQïPy'Œ—8éór~µ/²…ݸc8»t¦´xšb 0AÁ#ô¥’LHp§#¡=êºÂ"‘¶³e±Élö ¦ü‘× ÉÍ-,ˆeÏ|ÐÒ±dd°$sÔÔÆB(}¬Àõf¬,1ïG*7&BŸ@h¸ wc°ŒžZo.ÀpÝS˜•@xUcó g¥B‚§x »«7QWIŽAãÖª?–Ülåq‚W§ãV.[“ŒvíCÓ±ò_ž1Œb¼7ÅBGQªŸø íÓ@FXŒqÍx‡ŠÎßÄÜjYçà†µ¥¹6=yç8õ¥O\zb0E ÈéÊ¹Í ºÒÒ®#ox˜.|Z†_6ØKýô ùŠ©x» `ŸÝ?þ‚iöãþ%§¿ÙÓø¢#f†na³Òo..fHbûlÙw ûÂ:Òê¶ñë76WVr[NŠ ïÜå£n1ßh&²LRÍàÛØ£1ifoÝ ÌNÿº¸'ð¬í=ç…¥—ɹD’åXư6v1'$×nà Ý.¨Îý (ü9¨¾Ÿ2›w’8äÈç r:œþ´5­:k*Ê­·´YCþULL¼1ë‚EsÖÅÍ£¥œ‘À±ÆÒ¸–#ÉT#9üvVWÆW·¶wYeh¦HþëŽG±&‡u¨+3; ‡ð•Ý“Z0³”…˜då·9À볚-D]$²M©,bH"ÂìÇ=Fwu«ª^Yê÷‘BŒ_$,ŠÀª0y=Ü8úÕûmkRšî(&Óá*ò²’ò¡HãÛ4õA¡—ârþe£<®ÁWçÚ™!ˆíœùÕuÕná¹¹·†é`V»;‘ãÆ2ãñÙúÖ¥Þ­w¦êwfxÚâ˜ÇP8‚{Ø=z{ÔxŠÂF®`„ËTˆœ‚Hß’y÷£[l.¦VŸâ ùXK%Ôª€6”ÆIu\õì «‰â÷¼v°4lBýìvnl~ub=_Ã3É -°V•‚¢˜1Ô©©SM¸¶Ò¢Ö"Óˆcc ¸S¬Tã#ÓhëíF‡¯qš~¿<x¦Ÿvçó$Ø»F²qø×›øúëí¾ ŠxíÑwZÆHu眞+ÔbÑô¼ÇøwÁfþ´“úμÓ⟯[Â%FO²!R[œn`?•\-r%s»ðÝ’ZhÑÛn ¨ÉÏl×Dè«­ÏÝ÷ \ǃ.Zo£¿ÌÛTô•…t÷ ÈóBãêOø×ïÌîu­´j’åßïVîî#8àô®r݃MrÀ†ç#ýµ­ñÑ3Œw÷¢Ô­Ó=;sMn<~4ìÓ§aM$m?7>Õ¡™ãÞQÿ %Éà2êC*F8Ù0þµìG—ÏSŠò?ž,ÔºŸø˜þ_ëAÍzÄO”êzdšÖ¯ÄD6'ŠfTä’8¨šN¼ŸçQr¸î~•š,•Ó‘Å*ºíÁ<äâ )“ó}»ÐIS»‘× ÍHÊËqìQLfU8ÆsíI´†Î§ZR„`ò8çšC0)‚H$qÇJ ('Š0¸<ãëD¼!b꤬i€àTìæ— ñÏçQÇ1©%Ors€jMƒ±QéÍ·éš p:Ò;ÆŽ3"Œð=j\¨G©ç'·}WÄo¥Üw+ÚË!RT1–Rv €yçv+¢ðÝà +$·Ñ¤·ŠxŒ³Èß WÂŒ`óÏAì=+ Y!|²:¶ÒAÛÎ¥'Úaó< pÝ~í[•Õ¬JZÜ”“‚FÑìE äc?Zie (%sÐíæ¨Oâ-.Úûìrß@·‚ùE†ìžƒϽM›|¸ zsÞ”±à¢2ç' ŽÂªßkÚf—å-íäVþgÜó€ô¤“±q‹ ó“ô§(l÷¥ ÁlEg[ë0\ß\Ù…›u¾<Ç(vpv†èN¢Ì.iv矩onëëTl5KmEf{W.±HbbT®uúf±eñµ„z¡°\ÈâO,È„Î৘g€~´ÒlM¤u,îBmr¸9#®F:SŸZǾñV›f‘ùoöƒ#…Q )瞤ùXäñòš–çÄz]œ²¤÷q«ÄŠò(çj’'ÓïΟ+ £YhÄ]Xônz ™ÜœÿSXÐë¶·šUÅí‡ïÖ ù^T–\ñÏOþ½géÞ4Óî´7Ôî]mよK²äñ×o'w£–Bº:Gº$òq^+ã Ä*ü€5H§î¡5ìPÞ[ܬžLÊûq¸)ÉR@#>œñ¯7üNå$/ŽÜyQÿ…iKrgðžÄxÆ?JLŸrzSÜôîiÏ¹Í •7äÕuö¦Âéà6@Fà"¥„ ƒ8"ªé ŸYn9&ÝN "6fø^@šSgœœt½YÖoÒÅmÝhi¿xJó´#±ß䪞eÒeRß0º”qÇr*æµk§ÜÍiczdv™ŸË Ûpvrr;=mÔŽ†t~%Ó刬g8Pñ€–$mÏ~9÷•^¼¼Ó4‹¤‘â—Íx¶æ5$*®N=»þU—g¤ÚÛkA!žMƒlÑI@Lxfn2w€sÇj½­h)s?ö„·r±ǵÕyR£qÎ=~cNÊá©Y%Юm/u%†IFXå!‰ µ9ìr?:fžº=üÐÞbyÄ.Ðãæ|sƒÆp1‘Ž*++[½6k Káq+ˆ®‘ÙH»sê OÔÔKáÛØÉh£¶BÆV`ÌÍå± Œ1äçiÉ>´h"̺=ž¥spÃPwˆ"Ü!l1³È8³TÇ„ƒÈó­óæ—FB à>™'ô¨‡ïŠÇç[¯•˜CyO÷•SðèÃõ«Z=µÎá}C6ÒÛJÀ”\òO–:~ Óôaê‚ÓÂÓ£YL.XP«’S·ú(üèñ…ì×RKöu1¢å&EÏck§“ž;f¡Óîî¿·! qyåî`c¥@|u©ÛkZ¤Sl²bIÜ*s… äv?…ÜZXH¼;ªE³…sÝŒü¨<²k‚ñ˜hõ¤V„©…n8fÒ½BÛT’ãÂsß߯ì*¹A;Tí8÷¯8ñÐtÔtáÃfÁ.¼òîp:Ò Ü‡k§ÓCŠ>AÃÌÍu÷p¨ÔQ‰*EÀëôã\W€X6Œ¬ÌyW'œg+µ¿jœž.ñÏaÖ¸ê|lê‡ÂˆOî®W ìAÆ@ÎNá]} ÅsNÛ.±´çÌl’rxæº5<n:ÔÀ*înùçÚ¢f< û yëŽ=鄃‘­hfy7†áxô6žÈhÏ‹Å:‹[[JtõV™áP¦L Hÿ}®>”éf®©Ãä¦üNÖÉpÑàüªÝ3éÐþU…âï.þ{ ,ÊÉN¿iV…¶ á·p§g¸â­ëwRè6Þ/>킳ʬPm\*àt`vÉç­dZê°ø†Hã× ·š57,UJˆÆÕufAŒzCDWÚ} !ÕµoµXéñÜZÁpÌÍ!h™ÙAÛ€犆×[Õ.¢Ð™õ«uþÐqŠßvòÎÌâûÀýOLq©7‹lbQ)Ó¯‘%|¥ ‹]ÀóÇ?‡­WÔöpÈHô–Ó®j¯ä+<öÀ.…Ã_6ømäÿH Æ1»Nf}‚h|Q¶ð]ÂËw,Ѽ» ”rT²ñÁ œôÛèx×]¹žf´µ¶c<Ó\Ï6ï-cp…€ÀîsƒéÜš§aâSû&ÁZÖ)ï®5‹$VF`O£|„ÐzR×V=6(>tÐH²Ûê¥×VTb]ˆhw¹yÎ6¿'Žj´«ß²ÛÅ,’:ÚB<¢2ãmÏlôùOå[’kšµÝ£G ½¼zˆµg‰òdÈ#qÆÞG½W>2»{{·Ž+@Ä¡µ<WlIî6Çr½;È,޳N»kÑtÆqLÐÆÌÙÞ·ýõ¸~ÉÏáÛ›ÍRò ²µ”ššË"Û•0rA?íÓž8éZÚ½©jú¤ñµ¥¼v0Ä™+!-æ2+ñê0Ç·oªê^ º‡Ä‰§E46Ê ÆVXò_tnÁÏ@ÈêOµBºz Ù—tk RÊk˜åŽo%Üò“¿,C0(GæAÏ¥bÉáë›}&–Þ«AróÛI-ÈE‰Ÿ– ¥I<’F=³Ò«è¾'Õîµ<\jÏòB¯„ y‘±Æs×)ÿ}]ñÌk%ÝŠ5Â[™hžK˜ËDÓ³tVÈ}OãI5+1]4øNðZK A¦äêvNO™,pÜv@Þõhx2híµ+u¼‰¾Óå¬2Ê¥ÝBªÉÏ}ƒ§ ÏJÍŠúêß]ûÜÜȱÜ@@b› ø±¥±ÉëÖeqªê†Ãý:ôC5Îù"e1~è0•,ÕGæ—½ÜzKg¤‰ôëÍB´ê<(çç'g?†žc¨,7‚6_õ_~ˆÃ’3׿ú~B–›¤Í/‹-ä¼°Ô$ž;«†–Wc³pu1°$ãh^¸ë€9Åixɵ(u9M¿ö€ˆØƒ·ÜTH³)9Çû?¥=“êö: 7B¶Ò仺Œ»Ü]* Ÿ<«ŒÛ<ŸÆ¼Ÿâ•ÔîQ‹3$廩dž¶¼?x÷¾mÅû@à fF aò@Áà}à=é;î5cNÓïtk’\Ïm`“B½!@×€ÎF=«SÄ÷Ó>“ƒg•;†rAèRÁHüÄ*þ5£®\5¶š#¶ %gH£äd`¹¦}*„^)±FŽ)-giNÈÉU óIzcõ§võ‹C.O^Ù‡-ûˆc›i‰áQ8  ƒÐŒóÛ®°\†Š‚¬^+JÓ4]VÕ'„NaffÍÀn{¯p 8úÔ–:½¼‚e¹Å´Q>ÈÙŸ‡¶Èë•ôß.Ùb4“õ29ý*­µõ¥òaŸhó 0€N3ž??Ê­"¡ÁI¢pÀ`õÍNÃÐAcföÚˆa“%Ô g=MyÄË(-,ì Ëœ‰$ÇN=k Fàzžkš½Ü·/µÉû`tûµÑÂv½~èíS™7'ƒM òáNÆGëI·ƒ×šÐÌò‹'Ž?êØ·ÛcùòÝA­zšÝeŽ^x¯'¶(Ÿõ—ŸµD0å¼|×­¢f<GzÖ¦èˆu![ŽN0¼Ö,šGŸ«ÝÝÍ*®Dci ±“®za½?úûâÔà’N9ï\F‹§ê â+ÐòßíåŸl•*ÅY žç;ÿ t©‰M–.|')°±´[«x¼«­d)ù™ÕFî¿ì÷­_OmSIk%•a‘&YJü¹F œg¦G­rIg©]Xéæàê„5Ü>hbáÕö2ËîƒÓ“Šé´ SuàË4¸23Ij÷“»¦*Ö·±Î\®•wu~fÕáki„ʲD›°ò*« ®zÏ>¹è3]-‚Å}¢÷k9û"@]"62Cç<θí>Éôùci­õ(å‚X£ÜÖe¿tÁs³ ’o#5´º-ëßZÆÉq bYDYEå‡Íؤ™Ï¥9z‰ÚŒ0ëZ}¸ŠêXÃ|á„`;)`†\‚}a£é7V—B+©® Ð5¤óàrz¯¥cC¡_-Í„óØ]Ž"ò<ŸuÕØ?ñwôôÍM/‡¯ÚÇWš;I‰ûNøáÞ7˜9ÀùIäûQd´¸_­)¼+k帓T» ñϽ¤e?ë@ z{f¤ºðö›({³©H¨f2:™T!Âl“ñ*9çÌV}ÿ…å’_ɰᬣ†Ò30Âp2™ÎrA犎_ ]ìE]2Ø¢ÜÝJ#Þ»B¼X\÷±ùR¿˜|™t»žtK‚ææ+¦I$U•Óî} }MCåiút¦â#urñŵvN˜›Î•°Gñtè?ZÌ>ºk]L HL²Ûÿ™(Âá+À=ÐÿõêÅ÷‡®K$6Ñ$Ú=c’9²BñÈÚzñÒ;äH—º%œöÞ,Kyn‚Wœ3C»åØ’Cr Ú^ÒãHg¾~Ïp¤3\êà6‘Èã<}}MQ—Ã:°Ô‚‰¦™e?¼xä‘_sq÷€µpøZî;o0­¡u1uæÄ´~c0ŽÌF:ryæ«Nâ×±­ce ÎñêVq«;‡¸ŽPÍ·2˜ã8ê½;~5ƒ¤ÝèׂÅ,m ³K†’ÜùiÓ!‰Ú7;WA¤i¦Ïði³Jc™ã[Œm$žFîÿÖ±ô½íâ¹µÔ!òìÅÄ“+1iœ‚ ¿(ƒÀã:k¨Â9ü/$Ìa…%’êì+Ó(.qè ã®{æ«ÜÉ¢\9) µµŽ ™$1fI ³2 „|Ã%^µr Þ,ì5T2E4r’`Î ÃåséQ¯†¦1AÍh¡µ‰%hò ‰Øò¹ä@ëNñîšú-¾š ‚ãLˆ¬oªÊodPäõ< æ¯|Gm«ß¥Ä©°”´»hŽÂïüç;_Žœ“]v™éª\»HÑ#Háq€y,ÞÙ'ö¬­gLÒà·ÔŸW¸–K;ÙS)&Ðªç ¥J®A©÷ïS¯¨Ýí¡kKÔm›T‡On×in’K$pì‰2 $œw¯zè°Ñ©MÀž}¿ÏÏË¥é²}ªI%u†êÙ`|O´AÆ>™<ç¹­How¬ „0Á²FCïPõØhÀ¼ÖõHàÔ‚h«Å ­Í + VÆvõÁëïUôMbîXD}¤7§ç’)¼…òÀ@rH!˜€=n*£ø¢×PþÔ‚ú+“ovsÑÄîH% Ù'âÎ+u¬4YÉ|ŦrfØäøHùp€c§¥­£DÞýM‹iN¡cÜpâ;„I1çži÷VÇÊ,ñîùq´ó¶²ìîtkY’æÚöì¢<Í•}«Œ 'v©­|Qcqkd÷Wv±\^1E›÷üÄ Ãéž*,ÇràÊùŠú ¢¼sâBíÔ.z`µ¹à³/øW©Øø‡KÕ®ÞÆïÌ!|m m9äW˜|K@5 “Œönýxš´ ­=I©¬OW³%´ûv9ËD§ §…9ç·S𝧶í&Ю 0¡É?ìŒU•޾kh‰02:U´Åÿ‰cúyÓcþþ5YP3ÇæA¦‚4æçþ[Mÿ£’ÜlÄðˆ`½R:^Ïÿ¡š±©k¶:d‘Ç5¼Î$ˆÈ jì0}:øÔ>ì÷Ä}>TöÚ¡ñ­š]ZIwy<-µ•|¤, ʶO+šÖË›R: «¢]ßGÙ• y3%ÂÁL7¼ý>éöË#Ôü<ú•„ ‰•eʤygäB1ž§8öªÒxjÕíþØúšµ´É,Ù@Àa¸ôÀü¨,|9qö‹+¸.RâÒB&2ˆðØùXÏ}Š?Uî‹S¦×,"¾´Ž_´Gn`H.¢ÿRzz¡&o‰,WmY¼Ð‚8BœñÜOµMr—WžÔaP+ùª‘îè:(>ä`þ5ÊÏ¥j-pÒK§rÑHŸ#ƒ×Í8íýåý(KÌÖéÍgg¹™¥1 Q#® qÓð¬I´kÛÉ‘!ÒM’máHÃüÀ‡=ê;Xf]^ Ò^„1'hƃ“Óhüé>Ѩ[kw©m3Æ—ƤȤ¨%FÈÆNü(@ÙFS’iì‘ó]Š–Ç8+Ÿ^EM§é7êv6Ÿ"$Rcv~QËú§çWŽ¡w¨xP4Ò¤²;¨/lÊî\çƒÖªhºíÅ…Œ 93<ÓüÂF%‘B®yúœâ©¶Ñ:\Öñd’ÿc6Àí‰T-œv>Õä~-µhõ8lgìêVD^-œ~9¯Vo­ÄqEöf݈fBßœ(ëê+ξ"_ŨköòZÅ,q­ª¦yûîsùUJëBgg©Ðx)TèÑãç”c=~Sþ"º½JF]:À‚-ïsÎMrþS™ lB‘+åW8ÿ?¥t—ÿò·#!ÚÛv8‡ôÅrÔÖLêŽÈšå7NÄ0ËžØÊôÐZs c…0"àgüƒ'øFÞ+zÕÂ[Á¹”P£Ž§üŠ˜„ö-¢ç;ãŽO&”àò÷êM*¯~l㚸9ü*ÌÏ'·ÃüJÖGëcão¤±ýkÔ¤3 )žÝL±±OvÁÀ?y`I?áfk‚@/ÿž‘^©5¤:…ŒÖ“nòåB¯´í8ö#¥kStDvgé:Þ¹%®¡|×o/ÙìMÃùË€¯‡È žÌ…xÇ~:ں֯ΩEk/c&éÀ ˵qŽC™éÓ¦tãð®’››ÈwgárîIpìI'=þfçÜÖV±w¥ésÝX&ž×t1‹¶–gTÁ"4Éägåñõ§tÞˆ5H»·/ÙôÛXli®d‘$I «…v$ ¹ì*¿†5+íKXºk¸¾Í”Â(6VØÃ=Ê‘ŽÙϵXƒVÑd0Ü:"Ó£FŠY›LŠïÉÆ3žþµ.‹y¤.¡}ieA*6éràg Tg…ùÎÉõÍ.›¹‘\e ’)Dr‘•³†õƒâ{·k›2Òuóî& ,AÊÉåß7ÊAÚã>´Èµí'@Òíb±µ«ð‰oyŸ™‰Ëè UïÅnú`¸ºóš(A•¡‹†”NÓíR•˜÷1ÛXÖe¸Óôä´µóó)Ë6ݱº®T“žýò{{ÔQø‡S»ƒHšÓâŠ3m‘ΩLŒúà°ÇÒ™iâxoµ;Ki´«0èÞ\rE „’2ámÆ*yõ= ÓG¶³Ãt‹ IlLq<¬Fñ€  28ÈÇj«t°¯æ[ñNŸöØìaiá‰MÚæ9dز¯9QÜœïŠÆKýCM†ÂÈNRCq°›œ9!fXög#øX6zþµ6­â[KÍItû¸ÕŠnY¥û;gxeRTô ä>Õ-Æ­¡-Û;%ì¦ÚFµœHÇ$ŽäÑž¹±¡^Öh.eîj©§ÝLÚ‚ÎDn3kû­· g'iÈJÒð¶­{}{gmw|\›/4¤ífq#) ñœ gÿ×ZWúì]ø„XÌvÆ“åW!ßn9ÇñšË½×ÑuKéí¬&Žú¸…'˜æ0Ñ bvƒžWzzš7èu$×›SÄÖ°[]ÜF’Ä…# ò;¬ƒpϺ'‘À«9µ=VK)emBãî¤Ä{|¶óÊ• ¦Öõéžµ»ÿ ²xFçT6’Gsh„ɇ?0@Àäu2œZÌÓµ}BÞÞþúúâ[…´—Èh%SÉXò`ýTõ°}óéþwR\]È—,ˆ¼où¥yÆOJè$†=ÛY›¡$éšäeñLÖ²Ú0a±¤eyFchäÀqÔg ޹¦Ëâ»øÑÉfIZB²nÇ— GÆ@'‘õúÔ¸¶4Ò3¡ßfÔíZ¢á/¾_®åhþ§þdUˆ,¦û]œº“ý¢¬s+ç nO9ǘyôÉ®ÊþþÃtðmY<—*ØÉÜG§N¸«?ßA¡’Ú'¿ %Q#á] ^i ÁÀ .8㚤ܖ‚²[Œ]&ôXYÉrº¤¯=ì‰t‘ÊT…*Ê1“Â’äöô®»ÄV©xfém£Y$‘Wä(` >ÀÖöæ¡cw¬K<_h†ÚH€pH$ €9ÿX~oaI6¹â+kë{9¾Áí¶g‹a$¬“ÈñÔM7¨]!¤ÌÂHA„iϺ< ˆ¤c'Éî¾3Óåö·á}:+Ô}Ž+iœeÖ9 œàwçⲟûBjÚÞF[ìñÊöò᳕q¹Q´…Èï“Ò£ð®£}u{§ZÁwgšéÑÌðªdwÜÑÛi\{þ Ý¡¦“ / LÊóËgoo:–x#ó÷v‘\¶pvðŠ8õ4ícÚ”7z–  ¹GùT™[zÇ€qØ2ޏ5…¨Ûùž ½]BòÒÞðJÛ ØÊªìòB`WoF뜌Ԛ¥õýÖ³Ûn¦³nÑA;Œ{¢;œ á²?QV“¹:‘hw‚÷N?fŒ¬r œ[k<¸ Ÿºv±$t_ÂItag%¼sjN–p:•ÚÂ?7ÌŒî'ƒ•ÇçUîum^9o@¿»YᵂAn!,2ê«&N sÉ=j-bÎõ!º·¸–öé£6SG ·,0‡aòœ7RAÏÒ–£7´_Üi·Kq%Ì.ž\Ê!ï”È9ÏlŸÒ¼ûâ`þ\pJ[’;f¯@Ò-uèîc7×Hl£µU1í˼¤Xž}ëø–¼”ƒÈH:y¨§ñŠ éÚI £ÙsŸÜFNGû"­äö<ý*–Žwhv,cìñõÿtUÕ$õÏ>õƒ5$NëÓŒÔ[ïûÙô3V#ŒgÔ6Kþ€z­—ÿCj•¸Îo«¶Úý‚³}>vöùÛüþ4¾$µ¹º{o³Y´²l‘ ›Âùa€ÁëÎáNð»²YÞm_½¨N öÞj/êwV–sÀT¿‘;yNÇ BŒddåšßíhgöLY`¾+:Íms¬*•Sä88ç‚@8ïI6¡y ]G%íì>OÚyP*Š«ƒ·äž>µÒÞëW©doË*~ðn n܃ƒé󝤸ˆê7Ð%Å’B“)\ÜU±O±‘âݯ`²½‡[êsAáí^<  y‚ÈQFásÆAùÕ¼E}.õŽX m²Ê«Èæ\ƒŽ‘έë:ÇÙµ'³Hà–ßËÝ4nXaÉöè„`ަ›4Ú&ù!¶³²Xñ¶=å 9·7æh^€Y¸Ô➎ábHîd[ä,ž ÇqÁªVºûG 4Û$T…ˆ…£bëÊ’ÝÈÏæ+JèériïdoaEHÛa“oÇG,À–,:ž:Š­¨;ô+ÿiøvæËȹ`#)æÈ¦2çóÎ*¿&‹§\/#3þõ[ç~B²%ðÅз\ÜFí,­pųƒsŠÞ·Žé&¹ôpˆ±.äu?Nß…Ý/3²ÒmeŠ+ˆîÁ´ä–ÚFî™?_Zâ|m †³f‘I#¤–k /×ß ÕZhÚ‘µmchÑÜWÆݤŒúœ×ã;{„Õm–å]OÙWb»|Áw6÷ëZÃ}ÌÞÇMà dÒP6N.Û§û«þ5Úê—Ò Ú9­¼wZâ¾ ÚRdÿËá¢Wutô[Fs‘ä8ã‚>éÍrÕøÙÑOáC% .#Æ[)ßçoËÛÿ¯]§6óü1Xµ8t„ç>Ø·§‚ÖžO$*#¸å±l·É÷Å*gàý 7hÆ ãëŠRzsVAä÷,cø£«3mà!#¾?v¥zÜ,p Èë^Mª°ân©‡Çü:ŸÂ½QÚO#ŽqZÔèD:i;xÁä}y®3Ä\÷ú»ÏæØ$‰‹PAó†VPÀÿ¶#±#½užXN9àtÏ­yûÚ1ñ<òNÌÓ.¤ê²¤;œ'FpH§ µkk‰'–âKv‰æ‚vŽH˜Œ"ílàò1Ïj´Ú+Éu¶æ”ÿGòÓæ¢T<úaAãúW(·Sj ÔSµô‡ìVD´‘;rù„9÷õÁ­»탪hVÒ^O´p¼’”‡‰Š° s*AÁàsÞ©¦º‰1“øFîèé‘*Ù©†ßÈžE§':àüÌ äg¹®™ä¼žßRÞï KetF»Ëzå²qèj]:þ;í5/!ŽA¤• pJç±èzc\tßl}búØMb{¹±" 6…6ã=:ƒN)k-ÃE±£g£6Ÿsg%ÅÜ t³îýÜ[€ˆ E\úsùñO¸ðòXi3K<é2Ã*M+³Ëe°''<îçÓËCcuq¥´[êS§ú$ÎŽ­¿;q!Lò¿­wÿe‘ü,lî¤Yf6¾[³Å›n@#4KN µ9m>ÛHÖõRËS˜ªË#½«G°ˆäegê ‘×¶=¹4(þÈ"ŽöXDW¦ò9'˸±+Èéó7&¹Í:ÏW}6ê6Y'¸´óÄ81씑º3žr@ãž9«:~qo¨éË60‚6¸ùc¹cÄ¡â'æä‘øÓ~ ½ ›í6ÓÄw‘_ÛßÜ$LG Ø`á#ÔuÄþÐФÔ&xÓV»3Êí· «'š›>]ĸC‚=:ÕÏè×v¶6ÎÒ½»¤Ñ“ ’îû«µˆÁ< ëíT‡‡®!’+KfDhÞŠõxA/˜GÌI>Ø8úŠÛ\ΊÏû*ãÂðÚÙÝH–÷$ÄwÌ»‡Nî¤c9àc¥gZh:-µµî›&«4Ñåcš.ð#'h\Žx\gÐTçðΧ,zr¢Âñ[¨!'}Æ 'WƒiúRZøGVÙª™!²•æUÈ2²NÒe¸à• wíøw½ F×ÃB(šþê6D·`Ì.sF̧qÁÉËm9õ4çÓô «uÕ,î^X4÷™ØE+0 [sägžA8<Ž¢ªÝøZkÉu“­œmsn‘[g DBª²€Ýã‚?*ÒÓYÒúÝnm$›Py¦¶D<8Úã<àŽqKÑÔ̱ñ%¸…Óå†Úik™LË"•”íWêx%p@éRÛZxbÖÝ –+C Þ:G¾àÎŒcƒŒr}ꮡÉåÛ< eçÁ4"HíÎø•T¹ÁÎâe-aÍ_‹Ã7Y·•æ¶xcº¹Qã$…‘ƒרaÁíïMØÈlµo  ¯(­ {¸vW ˜Ç<Ã/µ>ÿVÑaóL6°\_[…‡ËØ…Y/8àêxúÒ\A»\Á+ÛÝ$‹1ƒå1øF\ò~vïÜQ5¤Wz†±f5 ¦ŽWD„æP€eùî/ËÁäÒ÷nšcĶ"öâÝ„æX#$Éåœ9Þj·s»¿Vµñ6wªé–±[Ì..¡óÕ#@|Þœ‚=?:ŠïÂJ‹u<7ò4²ÈÍNáKH²§æIã>Ôí"Î×IÕí‘î®^çìÁ$ F#Þå7¶Þ£q¦všV‚쿬Þ5•Îyûç¸<µV-„bT–<3ǽVÓÛ:{àôžní£TÈ[^øéUôÑ‹9Ôç‹™V'úÒ[ŒÃð©…mïã—Œß̓ï¼Ô~(Õ™{iGÃ4R’f]ÁHo~’¿ˆ©|,ªçQBÃp¿˜á»üÿçó©u Á«Kšw@ÑmR1Ôò:‚ü+m9µ#[hL4Ý/\Ž98”ÚÊT ¡q??*­a£é6òC=¥Â°Œ:©3’2Sß¶ßÚµ§i—š{\™-›~"*ÒÒÝŸ£ø À¹Ð5)QÕâµY¤ÆY² »8¯ñnÚ}‡z¨÷ú!Ôg–h¯³æ"˜Ó‚ªÃ8qùŸ­fÝøfõf¸x%€‰9tg*|Òøúrj……½Õ†¿‚Ö4”’Ò[‡†<pùpwnDZ®ÖéæGo ÔóÎsCml \ãÛC¿Ži<»H÷73· ±ÊòG^ÕBìê6WŸ¼‹Ê{‹†•I†,Pqßéï]È¿‘^1*.X…Ü=)ÒO\âHyCò±^„÷”Ô˜8œä³Þ[xbЖ»ˆ¶à|Á–äcüñTìoî¦ð¦§ç]Ï+ O¼¿ "êÃt€}›å"ïþ}+ÔÐîcw\×—x¥>!ÝÎçÓä'€å“Ã¥z…»eŽüâ´©²&=@†Æ$N3Ûµr÷Zì–wúœGIc ¬bYçÔnr889ã…u² È£iÃ{W¬Ï¥Ûê·L,®¯.nbݬMòìÆ:6ÞxäïJ#oB+¯]ZÚ+&•™.di±°Ç‚yÇ ©¥uïžÀ"Ei&<ôÏcë\ù_Þ½¬"Í4R¬QË##¼l>bÜä“êyãÚµm5}$*C¡ ¸˜“vNBàü‘ùÓ’ì?2¶»¨M£Ák®ž“ùå¡EW ´„,ã´þUZ_I$¢Þ+ÑIP´˜%Ì>j‚1À Ÿ^Õbi´*[KsÌ2*9 ¼‘Ÿ”çÔ}>µÃÃq<š¬“[®æû+É¿å_—nÜgŒöíM%Õ ú‹áýVïSi ż1yk ǰ–ʺn éš±âH¯׆Ð*Έ ¶à˜¾cŒqžk&ßX±Òõ&ŠÆÂ¶AåÉr.~î<)ã“ÆGÖºï¡Õ-·Ââ{YI#z‚;GcØúRjÎöwV<ê;kü¼¢K—ÌsMo'Ú˜ºª2çœ6A*29ÀìkrûSÔ'µÕ!òmÚÒեᘶÒa›Ó§ZÕ¾Ñ4«+ ëøt‹7–Ùâ0Ñ…‚ç°öéYº^¾5k¸ Óí`šmÑߣ!2«=ÔŒc>•w¾¤í ÛíkSó5–æÝ"nV3ÊcY[9ÿkÅ:ÛXÔãmÕo­ Ỷ½³ ›ÚÄç$¿\ûVîšúV­j×ÖVI‡—ï´Kd.â22AûUVîÃC´K«ˆȶOÝF‘‚T€~èõÆ Ôߥ‡n·8ɼA¬Í¤Y\ÿkÁ »K“²4¦È÷9îôaÞ®ÛxŠþFE}N9Bº¨ˆ ö/Ôs÷—©ü&»ñAƒQºµ†ÆK/1VÝr$!bÜ_ÀC÷¯xwRœ-«,R(ŽhÊÿ('î3·üšom„·ÜȰյ W@yu£@HIHAù²„'ÝàýáÛ>™ªo¿‡NŽê9å7 ¥üì`áY¶»Evü³^$cWX•¶sŒtíýMA,*÷:Æ¥ÙoÛȆF}8¤¥ä>SÍ´ï´ÙYê©csxÛw»3FWþ[.×Q´rÊ\ð?„UÓõˆ "ÿR¹X¥³!ö8W ½_#篽w±Ùˆ®e•b¥Ü]‚Œ·aŸÂ¦Š9’.Pmþ¶áÊ,‘™á#¦]#Ž8çú=±½ÕïUâ Mu;¨•š8PãÌFaò·*üzzzD 2@§-áqQAf!šYVS#³9\Ùî}MJvW<êÃMÖZ(n.4kÖ—ív—/¾Qó0VYdü¹8'§Sfðî¢úsÙ‹#º}:$h‹‡)?<ço*O_ZõUöà‚OqœÎi&ÂÌÝòÃ*eY_›xǯjëKäåqÎ?JcÜ*"—l.v€GzJMlU®eiúMÍ–¹qsºÌYÉj‘Ç …Wnèüãž âb©šbºˆûýù+Õ†Z=ÝÈô¯*øšò?åÝ?ôcURoŸRj|'{áòO†tÌ“ÿ‘uÿpV¦HäÆ=k3øÓÑÿqtïò Ñ÷Æ{æ±{–‡nUÛœzu¨4ÿõWŠpqpߨaAô•TÓñ›î ‰ÿöE?Ö¥n3ÙS©a°EìÝ?Þ­‰f$%°NìñƒY~Rn5`pÓd?™®’Tùz9Èë[=É[Ñ\´`'™æ…É<úf,ìZ"džäwCíV8B’T}¿WxÑ@(T6y¤2Sp›ðcÉõÅ6I•–2èG^˜â£d]Ä·lLGI¶Å|è3µŠt«hª$]ÇàçÿÕLx”åÌœ6>½¸¡á;ÊícAú…5-™ ¶ÒCš`LвnØê{Ÿ­9måUR÷Çùö¬=^æïLµI->G’A˜é¹W ‘‘îp3ïQø{[¼½­®ŽâaY–DL(t>àþtùt¹<ÚØè& •\ʼ—âš*øšÔ2œýsÿ$¯^vxâañœ÷¯"ø«&ïÚ’£?c_ý%U=Å-‹_%”ªqsŸý½äcCVURÜž~ëQ\/„R%³‘¡î: œ…wò€ºDjÄÊÙ!yû¯XÕw›f±VŠ2IÞ–…üºóžŸx×M¦ŸôE%Cq\©$YÙ1!¿prWýóÅu_üy… üg‘R·¶4”dŒƒ»ÐRÇ ‚;zÓ”ŒpÖšØÏCϽY™æ>+‹oÃ’‹ºÁß×$¯oÖ½* Ôöã½y×ÛËñΞù ÍhÊ23ýñõï]å¼â=3í2ð«w s€¹ÕZ²H#Ýþ5ŽÕ¥†r—†à[n+,D—Éä9g,3×ޛ꾕áë½6gžâ?³\Æ~Îçxß)uØâªÅáËËý1ËJ–Îá”î†wBŠrÃ'_­u÷“ÛY¬*ä“s8…®X±Éü€ŸaF¬í—9Hšc·#`­·¾ tÍ.f;#™}ßYÞE͹sæFÒÆ¹ Ì"çç” m&)$P«HÙx };{Öuÿ‡æß®yVS´’Æ>Ë1Ÿ‡Ê eÆx%“¯Ò–_ Þ^®¥<¶4’ÝÄé“(Y!R¬Pã<Œ0çðêh[Þâ}¬Jþ‹Ï’æ{É$ýÓ±uÀŸ&7ç¦8æ³éZ–O8“Ïšt’8¢%Cåíù”6ЫI=Ò£¸ð¬­}sÙ|Äm3ÉŠf˜.P²&ÎO}³Uu jSÞ¦Ò­îe "´»¶¨ˆ«D8þö§4×›‘ÞÃr$*Ù ¬ƒç9äR1d™¦`C`ã€?ÏåYÆßPÑô}O·+%Ðò`’gRʪ£çcø)ÜŠÞØ²HèIaY½ ¹•kâ-ìí/öœ&=¾`mù7ÏýõÅVÿ„³M&Ö5Ô!•îg0DÑŒ‚TsߦxüE`ÛøGVM6æÂGÓ×6Ó¿xòòïVéïÓ¶;æ´—Ã×É{m>ûHãŽây’|¹/Œ0#éÏáWhŠìÑÿ„ÇDš ¿ÚVûÊFÇ€H ?ï¥üóÒ¥×5³ i‹r-Zä}¡#“iÎÕfÆ@“Ð=k·Ò[O³Ð¿Ót¶[f0òË ÷QŽyo”sÓò®‡Z´MKI{a/Ù˜IË"®pÊÁ‡Ü Z]¶çÆZ®?ÒA-oö­¢6'f ÏNã¯Ò›k®AªÛ5Å´ÂD PeqÈlå/Ίš–«M “Yý–q¹‘â9 W¦Kãor1[ºDË.qß –»i„[yåíŒt<ÐÒHÔæ/|k¬Çwt«¢¢I2D²Å!ed±ÁÜ1Œtï[W^'† ¨ífŽd”ÀZY‚±0]ÛXƒ×ñíëTÛM´›TžÊâúiæ•$t_((‰\€~`9?(¿6¦Þ-Þ¬ŸjêÀ r¨àFP¸Q˸ü…Så}Q_Æ1´I/ÙnÃDpW*¥½?xõ8õ¨OˆM¤RI-µÝË}¦ä+Hëˆ#‚³ výzÖgØmØm‘î¦Y‚¿š»þMá6–lc“|6;ÜíI†R¾3K?ï á"Žã+m#h8ÚÌ1ÏÍ]…v[ѼGq¨êbÕì–(Oœ© —$ùl£¦;†¸ï‰„™%èA9úHÆ»«+}ßR‹Ê•Vöo2â4iòØp7Æß§Wñ52Æ>Ê£ÿ"ñ¢6çV ü'gáG…4¢I?è‘vÿdV’œ¤ ËðÓáM,çìqðݨ1¸ž:Ö3ÜÑlJ¼^5SM9}@zNæ‹þeŸ€9÷ªºh"çRþz'O÷*ãèsúv£’ºÕÔ‘É"%ÞqŒ±,@~uÓišµ–­`·HÑÆr”m#r·?JåÖk‘®ÛÁšO¶#ˆÙö†Á yíÅP»ðΣOšHÕg¢~OË"Œ‚r¢.?ÙµÑdÌîÏDòRâ=É.Q†àG ‚8úÕgµ)o”°öïšâ%·½¶¹—Z…œK+ª±,@ØŽTsŸ—nÎs޼ç5Óø{V'KQw3]O±çˆNè÷¸Ç~ÀwÅ'¦M4%âÙŒ`’y>• pÉ Æü·ÌO ôV3jZxAnK%ýÈfÜ…dÉ–<õ*€þ'Š?·5+½"á¤HíB’ ˆØ0°q†ïŒÓåclNÁÂý£q¸u俦´rKèßî·>•Íé¾'Aaš„2Ë$qyµêR6Í.Cœ*¹É-׿?ãYUV›FwŠf$íÓmW!$\gÒC]f“Í© Çï5ËZ¶ëKvAœ4£õù«¨ÑÉ00Ûœ±9G-0@ “ŸN)¤áÀƒÔÓø4^ B“Ý4ë2#µŸËœ¸· Xއï{ûÕ÷ðÆ“y-œ°î’QåJpþbá¿oñªÓª¦EÞµy;^IˆerG,€­/°oCŒýzV¾y&¥¦yâ'®Ñ:¸ïV!³ŽNÝ3Þ±..´H廲û> þdF‘á'“×7Þ\g‘Î8Íki÷¶:U¬VâæÁ%ä— 8–`Km9$ÇœñŒPÖ› =Lk/^eþæÆÚ6ŠÊkªÄ*”‘—oNœTk:ÍÚÁ$bfŠ÷Ê ŽEh|ÐðGéžÕ¡¦ÿÂ,×ïe´(·6ÄÇ#3bxŸ,ÀLçŒç­ZI¼"–Ê X¼È ‡• Æ{€Wð9枉ì/™ Ó]]hÍ{F)%€KleI\Œý3\f‹uª™ùgi­¡¹Š9 º2eBº/6ÎxÁºËé³Û[­â>Ù#ÁRÛ¶’§8àF9öõ¨×Pð¥Ä÷±Ãj’Á ‰äޏ¤‚9só08¤®¯ 3k2ÙYͳ/.ž8³–mªŒyìWž…ð–k'K¾ž1j‚ÓOŠvà–/"†Üy-Ûu®¯P‹FÓìVââÊÈdRÌ\ç%@,rzUâ_ [6á÷‰¶+F$Æc.‹Ó¡P@_z7è3°ººÓ޹©[jö÷—/q ·´ÊfSóc1°Á÷®ÿPŽæÜI=ÄK:Y1’X›h³ï)ì3Kwuioá‰õM:Ò F¢ FÒW‚pãÐqX:_n$Ïö¤vÂÆ8å-q7ïJ*È>S÷rœs’Jå¨m¡ÿ ý¶Œ°AsIŽâÞßr¹òã!ëÉ,Ù<œƒZ#R›Jºñ5íÇšÃs¹xòÑdFTœÿÏ&;½¶-ïidŲÒµ8õüëîÍ#°åé’9€¨¬†ÛÛîz˜ÏèGô«0\ý*Q‹ë¿uŒãþú¨[ŒÆÐ¸ÖuÀ{\©Š ]{X¹Òµ^â‘Å´„ â_OõPy糺ñ¶­²>¤®í¹Uã¿SIˆ4FÆÔkvð½Ó¸1`¾ß”öy®„º™ßKk®HÚ<3ÜÙï–y͹‚6Ý’”óŽ˜Rj½¯‰tØ&‘%I ±"0H\åWŽ8 Ðýjhn¼;,ðÃu ª?Ú# 60wNsÓq"ªÙøTAª¬ÑÜ²ÚÆPÄ2œ¨ö#>˜ô¥§PÔ}®©áĵ*-ü“äy°ZN~nœô<Ó`°Ð/tù¥Ó$RBÐ;FH0OÝÿfˆ|;Ú¥‚+ôšâr|È ¹HŽ'×Zµ§h—šv“soçCç±%#@äÏN”ôè$aE¡[j¶O¶´e÷«ˆ ÛºdàõïüTØ4éôÝvÕc¸,dÜê)Þ7ûë­WŸD¿¸²²™,*p`*ï=9 CQXǨÃsh®—6™‘<ÀË’@$öìKUÓq|‹3h—Ðê.ñYÄPͽ$ŽLaIOÐ÷êj‚Á¨[›0Ö­#¢©F{ 9Áéòšµªëާ~‘]*,eYRXò»Bçƒï‘V$¿ºoÛÞ…‰îP[oH<óŒÑ¨hgÜËs§ª˜î.¡™¢ŒÈì‡'‡8çÞ¹O<—·úd³J²ÉöVwQ’D’u®ú_±š"-q˜+1‰B>à ×ñ T´¿× ’¤UKaÜêDÍ\/}ˆ‰¼‚ïk¾œ~uêJ‹ý›>åB|áŒúã^aà ²Cx<²t$ôìØ¯N·&—t‡VÁèCW=o0øh¿èH½™(éì1šé4`7ù¸ê1éþ5ÍÚœÂÛ°.\ÅWÿ¯].ÄÂrÙû½Gû"£¨ÞƮ㴠ž:âŽAÎ›Š¯ð’Ð s´þFgžøùc>0ðÖö#2àwçZì|:x{N øõˆgþ+‘ñØ â¿ 1$Ÿ8ò;é]F2AáÛI%|G¤lÄö9&´—‰[³Wí(³I²—A÷óøúW)w¤jxîã[Sh×PÜ9w;¬f6Æ;çò®WCŽÖD†ü‰vÌËq72Û9ÆRE8éÇ=+F=zòóN„ÿjH$ `Œkƒæ?QÏ©>£µ\­l+ܱgáÝBÒÝÑ!°VÑ¢¶ó´¼s™0FÁñ®ÆÂ%Ó`‚È"… OÊØU$“€=9ãé\΋}wöí* ¯^Dž;ÆXÇï_ Èï€Oàk¢Žâ É®„S«<幨~VÀ8sÁ¿R•ŽvçE¹óu Æ†ÞÆá¤™­äóÿ×3&Õ=x8ݟí.« K}µavÑÉbmL`“°†V\qÓ#¸¦ër­×ˆ#YîªEnË̈”*cÜìò9ùj9¦Öndx$™íÝ4±;C|ÒHÊá€8à† ÐþµFÛÃq•uI Y%²>mÇÍ壀3Ó•~Ý+2ãI¹])ZÍ58äM6H–CænYF3×ø{RM£ê1Û˜5V°{ˆ\™%Ëù~AüØ\dýAç¾`vz¾·¶ŽµÅ ~G™°ÁFÓÇáÿë®bÃEŠMKXÓ./¯.–éÜ3Ç—dPAl}ü``t÷«^Ò/,5MžÖ[h¤’]ÛÜ”—Ý(Sƃӷ¡¬»K½Õµ y­Ñ/ô7Fâ."—í$î%€n1›¯zP:kýÍݳÞ\íN"©R Næà`õäzÔÂ)® ¸S³ÃÙX WŽ[ŽOpG ¬;Mâtùdµpš‹És™”ïR²(~:u_z·÷1iEš¾bEl^!*†-¬\ž¥­æ5èkË¢Bºp´û]ÔÂxŸí,Ë’ªŸ*)°l3“ß5gL´Ðõý=eUfŒÏ—æýЪB’ã*z¢©Ká¹Qî’=>Ý­Z{y„M(*è±l(x< gž´šM…þa(‚–y p£”Â’ZCÀþÇÕE7»/´}7MÔ"º{ׂՄ Ûn,£`#$OoB9ëÖ–ïUÒ¬¯Î§%ô`Ìnƒ¶ˆË}zý\ñ”º¶– ´òŒë":™A 6¸lsÚ±bÒç¹¶‰P²Ì—e_¼d6ŽzåúRVkQ½6/¦·¢FIË[5Ôë#\ˆƒ0F88ÉëÐzZ³g¯iw—Ëcm25Ë(d=¤)½8È þ~†³ÿáš[[¨Êâ[{xÁôhŽr~nAô­/±®ª_k^,vMbXDAB”àrxäð=¨÷CS/LñvwÖïh¶r˜¾ÏCk®ýƒgcÉúRG>®êPZÇax²ÚÄÛ$XÚ4d@ÝAÜ0}㥦ƒª™ ³Õä•®f7)Aû¦,Žåä.TäûV¢ ;¹ñK\_EÖêÒÁ*…hÀb¸ÎqÚ­Ùl$r÷,Ö¡–â5š,G$ñ$fÝ›Ë1…ÀÊžCö5Ô\x®+Kócui*ELóJŽ ÆévLu8R9¢›‘§IÌ“j3\}³p‰æ™HŒHwÇû+Î1Çz‚óHѧ½Vúôn±ÅГÒXºA9<ñJéô WR}+ÆÒµµ¥Í»ÛOuq4( 7!ç‘õÇ×5ËüPpª¨9µ|œtýì5×è:vŸkhSA<‚wde“ÌòÜŒ0V<çÏ~MrSu«6H&ÚAo2ý(…¹Õ…/…ƒyðf—¸óä ×ä/Cõ5‘à¼Â¦pOîG~3[ `(ÜÖ3ø™¤vCã¿oSIJ&¹“Œ°Aÿ¡Sáä‘Ç_JHcsx’*„_/Ë#©\OãŸÊ¡nS9t±]CSñ³¼‘‡–"3‚E#žj |5$Z”2Ãx¯Ì d 6‰wœc¸¥fL~ ÖàgþŠ¥âhnäžÚ{c(–8¦Q$$½ñÁüq] »ØÍís6ã×–öOÚÛÞ/—aA ‘6ãŒô1ÏÒº»V¹‰¡µ`Æ+XãO4Ÿõ´ç@6œûûVE”ÓRŽ[™åeicód]¦1Œ¸íƒøÖ6•«\éݺÎæ(ÞBÑ€CÇ÷F¨Ž”õbºE©d¿’kù,¥ž+î“´ÝvÕÂñóAnG5;^ßAt!:ÕÑe¾Kr­GO§ñ}*âx¯kÈë`¥EÃ*˜ÜWh;°G_˜~¾”£Ä°$AZÎêGXâÜr¥ŽÐyõ×'Ž´kØZ¼K3miÒÇö¡"€ß#ì 7`çœrYÈéEÏŠî‘AûA°ü9!s‚?ï–ý*þªñϤÛjÖèìíeY[jì?9 @<|£ôªIg Ý[t"·œ+»ÆÓÑo8nA铊4¶£ë¡nÇV‡SO.{®T¸RI#ú­gA©ÚÝéóYê0Ål€@ƒ#q'°èA­éº|vº¤ip’Á´!÷ÛÉçé“YWÖ-A£¼Ô!VÜ'†tÉê;»ý(V¸;غº~}`­ÑÛË##2y¡°1Œ~ “Šà|x±ÃªÙ%´Ìðý“(Û{d5ÔÉ¡Êv¼P‰Lpܧdý85Âx¹ßY3²ì3tù›ú浆û™Èì4I :Ha1ïÌOñ}îÞØ?wº3fGŒ’à{ ó½|7“¦Ëòã(@Æ~ös]þŽIŸ!H}}…rM{ÇUô1¢ßš–ï’{åsÅtÚK Œ9ÀÀéœð¬R'»R·ÛT×<0­Í%T#ÀçRê'±³–#©Ç­46Ö9'éëHX/NüÓX€zt« áþ!3 SÃÒ'Qpz¶ßâüâºMïЬÃm?¸QÈÆ1\ÇÄi^)t7ùxº=W8åOáÒºO Ú<`+×шþ•rø+âf¢ÛÛ¤¹XÂì®ØÀ ž¸úÖ5î½kew¯•,Œ¨KÐ\/ןA] 9à û×;u¡Ã>¾/'–$YPÈ/ˆÝJã¡$7QÙzqš•kê6P圗:CO Ü—oóˆPªÎ¬W!OS†1ÍhxwÄÚ”÷ÛÙÍå[]GϸOÕOåNÓü7¥[˶×SH-Q`ÚfÞ\íÝîzg§J—GÐìôkÉxò:Z¬DK"ä"³Nx©۠•ÌÝ›Y-/!¶Ù IWÏuåJŒ€8#'æ {ú摼Eui`²^Z;HÖ²ÜW ¸#(ôÈ`kvóI²Õ¯#/y#¬CÝ% ÔŽ¹Ï½=k/Uðæ‘e¢#jW²Cm[çÏÃH€íÔ.;p3Å ­ Ieñ%Ä:é².È&™<ÑÔÄd¢°ç¡ jRêºU­óÀÑ£ÎÝÙHëß5BÊÛDÔm_WÞ"e`ò3] LˆÉóÅ~ëóÏz“Ãɦø{H°ÓΫÂÌÇÈvp„œ£Ó44­d+¶¿}­qe­»¼6é™͈  ýsÁÿ&³!ñ&¹¨Ú[<ÛÁ(kWEÞv̲ù[ºò3Æ{y­y×Á¯y&£<öŸhó<×L~öÆ÷CqßJt àÛm>âHžÍ­bXá”î2m ÉÏ'‘ÏåONÂù›y<ºDwijÆ-æ2Ù ã;F:ó\Fƒ©]Go©êrÜ]Ýý’Ñn#V¸>T›¢Ë c† ­Çlô®§Qñ&‹ ähn Ví#[#aš0Ž?à,1Xo ^ܤi¥¬W÷q<²Å!iW– äž@<ú}iE4ÐÛÔŽóÅšÜ1HÂÚÈËœÌrÅHDG]¾¹FÇ×éQßx\Š(š4°Œù—“‚c]Ëר0úóíZ:¼Ú“w§iri°-–ÉÊSp$R:€CrßJŠþïÃ1\"‹5wµ¸Â$vÙR¬8çîõÒ«NÂù›ö×qÝ âGE•6‰"È&<€pEsÅÝÕŸŒ!ò§S HCBìŽ]„ Ï'uÏ­¿ë6¬·mk‘¿îärñm2\«ßñô§k‘éñ²_\ÛÊÓC,¢eÉùTw'8 tÏ=¸…£+trš†¹>¡a}ßAi%»*ò¦5iLn²só=:š[SY[+Í×ilÖÚrÎ#Dß:ñœ|£¿éZ·Zü1Es<rËlm!FÜ4†f!CÐÉ?ïU‹ŸÃܺ]̯oåG!¹¶§ž1¼}yÇCUò'æ;ÃsK4âk¹.LWLØò•Võ®^öK³KæÝ­ÔW7‘¤‘ÁÆI ‹½߯5Üi—ßÛ:lwËjð?˜ècgm­Ó¯*y®C\»×eÕ®-b’xÑf B1±‡”Ì1;\sÛ‘J?رxš¬Í«B·:¦ä¸ $mµ`fBJ`Ä|ÃÐÞñŸ™à¹â stþLqü£2³¸8ãœòkÓÄWv²…/tò,FÕo×!а,Àp>FÎAõ·(»¿‡È¶µŠšØÉæËE'”²Œ0@~?JvbºKÐn>Ñk,‰;[K3ͺO•ÒA FûØ“q‘Ul|;.š-®­Ú)`ÒÚ·N0’æ@sƒŸ˜:ŸÃØUeñý¦‡¶O³ýµŸ2V,®¢1'Q˜îéÆ? ¹'ˆ.îoî죽ƒÌ3Mj d¨€2÷þñëíOÞ [øt‹*Yl£X"ó${e”‰ŽÂ¥HüÊ[˜ö¨¬|5©&j!¶·´™>ÑŒ²òw!Up@Æx}? |;uqqu”FÚh¬â³…ù‰u ½}²H«ZÞ­>›«éö pbGdf;7oË…`}89íÔR»½ƒK\v“á9’kK›¹#…­nZá#µ$+nTƒô#òúÖoÄ|-  y6ÓŸ÷¢?Ò¯hZ†»,Éx—WŒ·;ƒj€tãŸÈsš¥ñ%w[Eèa› {<Ñó«ƒø]¯»éd*œGŽ{|ƶñŽ˜ΰüÄø'L$óå°çÙÚ·K`ðXûŠÆ4ŽÈžÞ‡ð§$L.nœž6Æ }76»¦zc“QÂíý©t‡L1ŸÇ/ŸéP·1­¸ñV¢œüÐÆÜþ#úQ­j3Û xc•]d2+6Òq€1ÁîÃò¥Œ¬~0»$ã6‘ßqRk/¥Kugo:9vJdÛ° `ç>‡Lö­–佌ër ëÈ-e±š5¹,¨Ä‚ŽÏëŒ`Ô— Ç$Ö×v땈ÎaÊàm Ÿ½ñ5-­†–÷é}e| 6ÆI%”2‚øÁöZ¤––úÖ§-͆ª„³«#TÄIìå˜úÕiqjA§imÛI,WhÉí$Ù)ÝÁèÀu÷ã=­†‹ª-͵Œ÷‘L»$ÙÎÕÀÈÜ9jçýÞÕzÃÓ[YÝÃ<‡ž ¼yãåÁÎzó’>µ†4-Q-'ß§Ü`Yc~gž<Å$ È€ÐóN÷ê#BòÀ\iÑipG%É´h¼ÅÜeW=#·½S¸ðÅûÚD‘‹x‰·X²œ‚7d8èßR};RŠòxäKµ|B²¼NpÃ÷C#Ë&~žÕÓè÷†™k)™§šØ9.¼ œò946ÖÂZîspYÜé7ð´öÑ¢It€ÛÕ¤þŒ)þ ´uÕ"¹Eœ®Ü–U. ¯¨_N*Þ§¨µ§‰NZ&_ |²v7ÎCž>èÏáVô[ëA¦’e¶=› à”þÑw¸YlsRßK <¶T3•R0˜'¹ëÚ¹j'QÖašX¢B-‘@õäœþd× .µͶuœm„‰6 !É PÊâ¾"[Ãe®YÇmL†É\r~gþV”÷Õ#¢ÒíÒb›œÊÛŒ„äŸN~•×èåLÿyw×Ôöá\^-ª ‚ØŒªäå·œf»] >Ðú±ÐZå–çWB”‘íÔ/¾`íHÝ1ýêÕÒƒá+‚GOLŸð¬Ë¬Vÿ$ó$dô=ÿúõ¥¤1È6væi ¡´8Ï9烊^ŽA<â‘K†ÈÚšÊLÁùÈ`~áTAÃüNLÚé åoõ#ÿ­]‡Ø0+D²ŒÿM¹ÿ‰±îÑl¤;KÕã8«Vö†¡,ߟùm61ÏüµjÒ_%|L×{´a±×&¸ïÅ5׊¬]bG’øl€„HrTãÁÉéŠêä‰Ë7+ÈÀë™×ïï­5[8asRº9o/pp]TƒÇ;Ž£éS ô¶4<3iý‘¤¬W ¸c™$W/¿9Åf]ir˪j+(´y®-®£‰ž@$em…8ÿdä{ ÊkÝeì-$—Rh¥¹–eeX@)ˆØà1ÕG¯^õd_Ü-Ý”Ó\Â$•-6¶ÅÎ$'Ìއ Wg{“ucGKѦ°×ãÔÎãß6^6Ëa–08Ÿ˜7íZ¾*µ›SÑfŠ !d‰",ÏÈèsÆpzt5ÌÁ}§[ë×Ȳˆ|ÖrÌŒ²0Ul“ü8#§ß5~Þþùu­2Ùõ•1Ü@%ýÜAÖbäê§9ÿf†îl[šÂso=õÀ·³¹¸–Ýü‚û“1pH$óù §m¡Ý'ö|j6eí!,~Y'÷r ñÇ>àV‡Š¬>ß¡­µÔRÌ­uLq–e]Ü·0 ¬K;]nÒ=Y9EêEp]Å&áC±-ŒuÚ@#Ú”vÜosN=ïËò1dûÜ,‹ÑŸ0ò}G˜@úS…î–Åmþ×N {™c,¤-¿’Ãg‚qþEoÙ’&{B.ØÛ*¡žuÇ™‘œƒÜúñÖ².4Én5™Ýu}A eeÂD •P_ö³žÞôs0²"°Å¨«ËE¶º³H ˜¶²°CA-€=¿ µc¥ßCªÁ|×ѸkD†UXvîÚXŒð>cïÀ®sUÓÚÓO·¼ŽêYÖK‚`mBs$(¾[ÎNzò@ä¨í]'†åFµ¶k{¨Z+h²Ò®Ü3€{㿦Eö¸-Ë:ž…ý¥¨Y^ Äi ºK a*8—Û ¬è|8D7ºeÿO7ÈÑF¹bÛsž½k¥Ú6`8Àö CÆ©òŽ>n9©æc²1tM tB|»‰æó"Š#¼¨`À<CSkkjöÃË[Ë«4r® +#gÿ­øÖ¦ÈoÍ…$ýêi²”gPáG|óK™Þáds’x>7²T•Öõ´KrAQ÷z·N çð©$ðä1]¯Ú.¼xç|KÑ“nã;F¥m¬ˆÊ±•0oJ•„PFà…áhæc²3ôûE±²háf(]æùÎ~gbÄ`I¦Üø{IÔnÖúHäóØgŽWBëŒ8#åö«Á‘— O¢ç„XÂï`}zþ4]îë é0ZGå€2¹3»;eÊ2Np2xé×Ö¨/†­-õrM *±Ç Â2B›Kg•!› ޏçµtÒCʰÇ#ŸZC"yLîB ä–=‡­>fFŸ‡tëK'·kh%RæLÀQ‘·§=óšÑ[KQ0‘-aWo™˜ œÎ~œSmõ‹ 4ê Ä[I’U+ò‚A<㊱mqÖÉ£ÁŠEÜ›”‚Ò“¿PVk¶Š$Š"¢ ÀïÀ“i6×wBêæ7i#Uç`<€pppy«<øºÕ5ƒ`-n\1 ÖÈXusÁ gÍlŪY V’[Èc;3ª2FIú‚? -$E›6]³Kïšâ¾ F¦ÙX“Ÿ&|1Ÿ…u°êÚvñnoáyƒ¤mÈË; ¨Ç©šåþ 6-æÇîn?õÈÿ…8'ͨ¥k|Ï‚ôü’¯'ïµo±‡=+žð¼bvãýgúhÕÑ̹À⦧ÄʎȳÊ ð*(þÓœ÷0¯ó5*“€3úUh¸Õåëþ uÿxÖ}Fb_Ê–Þ(¹™ÉÚ¶*ÇäcÒ³u+)|EÆ™*6LŒ]J•%Gâ9éÐÕín7—[»Ž8Ì&šÊ©œdäñŸzçÔ4øg˜›è<¥\,jÅw£·£ëšèŠêfÍí3DšÎòüIkÃb©eÃHOÊsž¸þ•¶·Ú%½ÐšK´I,¡ýî&9 ÜßÞä^Hõ¡¯ ¹'†oµ [@–ëR‡cË!h„`È@ÇúŽ}+~&RˆÛ2TpF8úV$i¤Úè‡NµÔc.#ÄO$û™Cä)?€úU»´Û+[{k7¶X8XB¸ùøíêjeäR(뺦¢—öVÖ‚xžá\ü¬„î\¿6@ÈÏ8íN´ñ»–oiq)ka;1`6d0 #?JŽÿJ7¢j6󥤀9‰i€.[°íô©¢“F‰MŵÌýœÄÛf;|¸ÉŒó‚ÇŸzzX]HmüYsp–o‘9ûfLa¤Qòáî½0çßåü¶ ­¹ºžxàO6u ,€òÀt׊æÕ<7emj­z¦;K…XstÄ«>>SÏÝÆ8é[Zæ•ʳ_[(RU¾a€@$®ü©5Ù}ÎbÒãRÐ`F» Ñ­´ò›r/îÉÀB>îàAÛíW[W¹žæÐ\Å-ºC$í*ÛÊv’Š®ƒ?Ä¥[§©«rYiš>‘qsöyn,£ä[ýôPøW*:ã’9ïÇ4ãw ÆtÔ†XÒ"ì±"AR#üûñU{ëaXÎÿ„“Zd‘´Ë*{sq&Y2“}¬08çò©t[Ûóâ;«¶²¼§gÉQ€oAÃuê}x«šm·†õˆíîlb†T°!bؘT$ïøV~$[-BêâßI´ŠyEyž\„«(el¯Þl¡uõ§¾‰ÚÜØñ£L,ì¢ódŠÞiÊI$-´ä«äpXâ°‘5='NÒïb†ðM11É#:dÆHW˘•àƒÆî•ÔÞëšt÷ ¦ÞFÒ+DZT’,ÆPÄÓ U,µ} Î t‚Õ¢åòÄ"Ôƒ† Iàî*3êi&Òµ¤ÙžÚì:Ôv×Q­Ì·ÉïÎá˜wŒñ–Ü?A[5íõö¥©Åq«o3F°,xhÆì©côãþõªÉ¯XþæiÒV{‰ÜîH6…Uƾ™Qœþ>›¯¥î¢öðØÝ#+JL€ÆÁO|÷}i;Ûa”u‹NZÛÇy"Å(‰Ö™W"Oœÿt’~‚²#»ÕoaŽi¯î½ä1¾ÔÚcb]]ÆiÎ;Ö´0ûDk'ö\Þ~GuùÙ‹/82‘N.œÝ°éŠðÊ-És& ù¹1Ø‚?Ms.‚Ð~y=¾£$«<×L°þó†P2KŽ€ÇZÚ½¶é—6ü“,Nƒk`òãó®gÆw7±ÞAåÍ$P‹)F)—7e|§öN3•_N¦Ó{‰4‹?Ø­'‰..g3nûRÐp²DTK(†gŸ—œæœþº6SÇ¥„l׎å‰$K 0mê¾gy&§}–_L/g3ºãi6ä©Ï÷¾œ ¤ºÝÜÚD2Ç«º°û˜vùY1‘Ï<ž¼ŒQ­ô Únƒ«}®Þo*É#ŽKgp‚|¸Ê0íqý)¾?ì+œd¬ã匇úU 6[ÓªiS¥ÕÁ¸pð´žY+8IÈ*ü`|…ŽxéšÒñâìøŠŽs>vñÿ.òÑö•á/ÃüÂ`\È9ÿ®],pxôËü:lø*Ë$ä4Ÿú®§wüë*Ÿ.? %SÇÄÕ[sÿÉÇû2ûMVS=9÷ªøŸIŽöÜÿßGÿ¯Yõ™r6xÇqÉ_±tþsUµ=jM?Q³_-šIK¨ d€6ò~¤vê*ÕÓÅg‘ÖՇ׿ªšæŸcsud—d…gÌ[hÁÂã9ë–úVÊ×W%ÞÄpßiwEÕèÒÈHs)WPw–Păïœ~§´´ÐïœC‘éQ¡X³6Õr8þùü é¶ZÌfô )í ÁïЭ2ÃIòõ¯¢ž9íˆb¤J Ü0qÎÓø­:öëN´žêÒg»ùæ/4‘†Àȇ8 éÒ¢C1YÛ\ÝÜB«‰c(#Ž 'œîÎ~œU]kM¹:”·)m;Ç&Ö[ì2¡[*qÎŽ;dÕ;ëmA´ë¨$7¨ò´p©Øb%@ü¤ðqéT¼˜™¯¦éÃweæ5œžRJÛ€ùÀb °ëÏÍW×t«»ÍSε´l´j þhá†ùà ~>ÕJËP¾Pƒ0_3by²¸Ç™Æy )¶Wó$\Ç8%!EälV/áÎ Ë·>ôµ¸i`ב]Ä$´¼‚Ý ŽJ€ ñÁìx5¦¹ye`¡. ¢ÂÊŽñ—;9éØœV¼^'—Î&hc*FbŽ>™* ŒÿjÔšþÆÂöf´c)`À2\_VÍ;¾¨VE]î{ÿÞ™åWT…BydmìOó­y—İƭ\ñð-à­D®þ>µàIš[9Kc$BÄãÌçùVŸòì¶uîj÷?JåüQeȂ馳‰ý©qæy]àð°ç•Õ·àîçÎk‰ñͤыg',2(ÆX«¥Xzò¸#® ¥ˆrØd: ÚµäðËi¶á&T–fYKœüà AèO^ÜÕ›ï^O¯6¡¯cixePúqÇÖ£¸ó;ìOw:‡mÚ8ÌÔÃh•ß×Ó½g´:Êj2l»Ôʬϴˆ‰]«:ü<ŒÇð•jýÉ55Ï Þê0Ï 6[cµD*ùe‘_ƒÆJ–? Çö™6ØdŠÞ7 ¤²„rá@ r>‚›§ßjøƒPCsqw©˜›}ŸÃ…dÚz’ÊzÎÿŠ­¦¸ð¥î ™1†ÛŒ° ƒŒ Ò»ÑMË:0žãLGºù²’ä"ä($:ò@Å`A¡êKy4RýˆÅ¶éT)c“3Rr=±ôª"çV‚ÚÙmç¹ò#¶<0s$k2&Bð¹À}ßjKDÔ¬lõ¹lw¨YjˆHea!Æ8Ë|„c®0)Ú¹©gá­A`¶!íÃ-»÷ ˆãØßR>¨“Ó¥µ¼1ËffŠùçlDùˆÅø<ò@síÅQ?Ú–úÜ0.¡,Q½¯HÎÖ¸>xô¯CšÓñ.u>­¥Íln—ÌQ,<ùl@Ú[ýœŽsJîû¡­m·£Þi°ÌQNagðŒ0zqšÎd]ÄÆ£un¢8\NÏQ½ÛvW'å9ã¾sYqÚkê+o4š„pÿhÌí"~PU£Áé´ò=9®‹Äºt—z:­ºNÒÀé$kɱbùèim¥Ç¾¦‡µm"ÂÒÛM:¸rvÄæm' 3ŒppsÏj”xÊŠêYïbges­²ÇåÊç8ûÇ*¼ûW3‘tâ(â´¿¥TvI­ÿtdYY¶¶z*†#ß‚:VŒþ½ofž Ù êY•P<Ø6ݼäc#Ó ªi_q&ÆßØÙÜÛ]ëú„²Cr](Ìèà-ÕAȪÌúØÞÙ§½Ø Ã2°eÜÎÒ$Xç•cÆ=:dÖn£^Z%©0Ël‘Þ[_3vâ7‡n¿wk(ü+DihRG·’IŸT2HÂQ‡‹2aƒØ8ëφüĽEk¥I:Ç£?î^RÑ‘ˆÙ^@Åäo9àŠ–Òô^6:‹¼ò_k`¨YKò2ÏLóÖ³†ƒvú•¬“:[Û…LTI‰ zíÇ?ãNÿ„^òâKO´ØCG5ó¤ÙØU‘X sÀ#â;STèz;Ú][ÛË3âa#¸;á`w?. $z¥rº-®¨LÊ"CÜXì3Ç~{çëV´ hìšö2-d˜Îí+E.Y²ìT0þƒÓëI{ ^^êRÞG%º$†Ü”t$¯•!n£ÔqS}ucÝhM–‹¯+ji\‰”¡rNÚFé 3ɬÛ-[@“NmFKíç·T£h·:í$ #+Ôz{Vö•m§Ûé÷W5ÙFÒÀ’Ä õÀ5‰>“k£iÏq}~æ§Ycu·Ýå®âØ g#,ÜŸQI5{¾å¸ÛIÕ¯>Ëmnñ˜&i\$[˜<œ`Ÿº}qTµýz÷KÖ#°³·" ’î1d»4x8Ï9#¨äV¦“=œ:½Á‚öi’õÈCîÇ Ç ¶ß'öÏ_κÃÇþuÇ|6Ïü"WY¸æºàFü gšŠŸ.? %B6ñŒâ©ÀäkçÐÛÑ¿úõi28ªQåuøÉ?zÞAõÃ.?gÔfuþ¬º|Öï×ØÔšö—. -LmؤÒLá—r’2?ݬøñ~˜ûÖóuí÷k?Æ:…Ý¥¼¶³Ëo#t|޲MµbÑ„Z=í¯†^Ù`Øñʲ„†$PJŽç98îG½Q[­CN€$Wð,[ÁšÙSËóHÊè1èÔÕñ© ±CqoIQs’¬„È£ç#œÙ>!x¬¬n.àùå‹$8pWœqê?*½z‹B´:Ö¥¼b[{¢²9fpS4 õéßó¿{¨>‰g{nD ñ™'1.àBÃ9w#¼ÓN¥¦jš<÷ë`$ØáeM‡qe<ŸLí9ö¦[ϧjÚ\+m7Ø p|à†Êƒ·Ãd1ØÒùؼASÉ1ÖX†a´ï`€é ÇÔÓâ¹Ñ%žw¹XÊI+ªï‹ µUIü>OÇÔºn“¤\I<–—Sþåü¶Ì€ÃaÈÿ¾ëPÞxno·³\8‚O1Îõr¯þ§Ò–€®]M'Fk(.`‘#‰Ù R+¸Žü=èÔ4¨/'¶˜ê }Ø„dü†çþù¦êmÒè1ZÚù2H®w¶Õ'vxôäñ\ûhZœsîû«—LØ|¤Ãg=#ðÍ ½Áú6ú4z]ż·×ð\}õX…P0Ië•®∙¼Ml ÊlЩÏQ½ë¸ñMÕ´Z¶š.š1Fá"eHÜ2Ôgñ¼ïÇú‹]ø…dó¢dXŠ"ì"‰ýÖ ·r'Ø›Ii‹aF$áP6+Ó,›¨€=Ùsž½+ÌtƽÖ,å#Y@’<©Á?!äν7O*e¸vê;äV´’7†¨v´3©Æ6‚ZÏl5I¦±ôÎ=èÕÓ:¦Ò7ÛÓëþ4šaÄ‘ôÆT}FÚÌ£¡Ü@çz`~t0ºŒ{SUœ€NryàRž¸ù¹ö« çüp¥ü©¨ù`ñþð?Ò±~’,Ø`àÇ Éé÷1ÿ²×Câ´ó<%ªÆ»¿ãÙÏ àf¹¯Â00ÞÓÞAý+OùvÈûhôÃ_®+Äzåæ“%œvvöÒ›7&V )T,8CþNki©úTu"ÇVhMä>kB[a9w žÕœm}Jf xÂí£¹™4Äh­m£–CæcæuFÚ8ôcø¯jŽ}cU—VŠ6WµòžxbòÜ?˜[’Ì3Œ.8ÇZÜÒ 2Çö@Vh’2O( ?AH|/¦´ˆÍ”Eˆ"d€<²ÅO¿ß9ÏZ»Ç±6e|E MFytÄŠyZ/48>döp1·“ïéY7¾!Ôn~ĈÊF8”À© Ïœ"n\p9õæº6ðÖ”©¨F!`·íºàn?1üøçž*ðÎ ÈG‰åP3欟‡*? /³( ni<%{öV‚8ce†E`­ ‡)Î{cëU¯¼[u§Í4cLYßxg2òÛ1íý×üë %‚i³iË-& ½2I;ºòyVO h·%Ùí·†ùÝBžþ€~T'¨fw‹uMBÀÛ}‰š2èJy`òda ç ‘Æ*¬^&¿Ò Ô-¯n/ •ž?5† [ ˜, À# íõ®–ÿ@Òu(Ñ.íD¢4ØŒx(2:ÈéÖ£>Ѥµ[i,ÃÄɉ˜³m+’Ç“Áî• QµšîP_¤÷j,íü¨fŽÆoâ“ËÛž:䟥W›Å°žKk}¡`óCÎæ˜ÄÁ}³È>ƒÞ¶[Ã:+yå´ø¿Ç'½>˜ÀäzJžM K‘•ÞÊ&dDI[rÀ€h¼{ÌÆ×î$Ô5ÛM&Öæ1±$yÔ–[áJÚË‘Ôc=ûÕwñ&¯y§Ý˜’Þ+L3¹Éݸ«a“ž™QŽ;õâ·uMËV¹¶–ñ^AȉÈÇŽ£<úEÒÜCÏÙÙÔ Á#öêi)+ ågŸÛê3ÛÁä[¬q:Ãw"ni£yHØùŽIË’3žÆ*=GPº2YÚ-ÜpZËÄ”—$´Eñ-ó Ýp+п°tã’mü¬7·.7 ¤äô$qôã¥$ºŸsl!šÚ6Â" ne^€ŸN¿™ªçWØ\§!/‰u†]Bén-mc·µÄr ¾÷ÄàÿÌWñ­½'U¼:EåÄòµó[ÝKò"ùʃ…ñúb·dµµdqöx˜Iã`;ñÓ?¥Ih¡• $³\dž¹õ&¡É[aØó6iíìšk Ñqq 3›˜°§i\˜Üà}óÇœäúYîïÒ×*ú´¯å^ćËpÄü¦2p8Ï?Zô ;]>/³ÚD±E’vþ.Õqz`çð\úì.SÏláž]êS$æÚ(̆[˜Øl„Çœ«Œ†qŒàµtµæ­áhl®naŒ­«8Êò $­t­IIr0ÁV‚*ES¸u¤å}Gkhyãø3Qòï­à„-”ÖOöhd”£ÊåIBGUdcŠë4» ,íþÁö&Ö(¡ŽPrç%ÇàqÏ|ÖÇȤ~„œqØšNMî Xâ ðÞ |4æÓã[‘yçÞA´'›¿¶FqòÔz¼:t¾'˜-dšA"Ü­¸g¹P`#q }ÜpÇzèõ?Zild•ɦ"%ݶ5Ææ>Ã#Üö«“,bd(ÁÔ0lu¥W3ÝŠÈåô+-^ØÍzbóêh“eÆ#dÈnç§Ó§@ß K(ðS.2¾¾[Žk¬F#yëÖ¹/0{HÕd —#êZQw`Õ‘›ðãþEDá†'“¯ÖºÔ òsÔ×!ðàÿÅ(¾Ó¿CŸJìwÇ¿55>&\>9OSÏãT×nÿQ ÿÇ’®§‘UpN­lÙþ 3ÿŽÖ]Jèek9_è“/æµe‚9†E`s×Þ²uàá!ÑÏ`ÍŸÍklmr»úÖÏdB3dÒtù‰g´y$ ç%O?ŠÊªÜxnÚk8-âg‰ È»sŸ^Üþ‚· {zÈÐdwäâ‹°±ÏÇ 5¶—saÛ+²:‚S £§C÷j„Ôñ›ö`T! *€«„qêÙÇå]‹#Æ8§ÄNsÇ^i©1r£ÌcÑo>ÏsÓ‚aº8_’Å äñÓÿf©Üê0E M¡(Dˆä™OO ¯GÜIq€~´ ËÁQÇãUÎÅÊ=µ×.‘)®Ì¨'lÈ ÿ–gÿfëMƒÄ76·V’ªmGt^cnf!XžzòÜ{f»¶±µ—þX"º ¼¨ôþCòþÓ¼Ø%dLÆ…Þo”(ý Qê„âÆYøŽKËØíntÝ›×;÷”‡žõçÿ&…¼In|§ì‹Ÿ—©Þüפ[øvÖÛQK¸^bcBy„º¿^yŸÄ«9`ñBC‰-•ÇïO÷˜J¨Zú ÞÆ_‡!ƽe þ-ÃÛMzŸ0»¶‚ØóÅp>X–ú 0sò‡Èa‘Æ+Ь>Iá9qÏáYÖ•ämÚ%Wk´cÀÏŸþ½E¦’Í'ªÿè5&´¨ÉÎ2Á§CPiÅAC·'#²(éUqœóí»×8#;Œdà~ÒGþD™ÚÒîðö¢„1-k Á?ìšã~80&ÿ¨Apï&ÿëWo¨Œé·@“ Žž‡¥pòbVáV<aòý÷#Ÿ^Mkþ$zRHÿÖ£.¸á©¦T 9ëÖ€$!±œ“íŠw\dUÍÌ*Hó7»t¤ûm˜›ˆÇyìÅt\S¹3޽8ýï˜çñ¬¹5*"Dššy 2ëP7ŠtçûNÈŸögNŸ;>º6×vúæµê XƒÅZûVÓžÁÁ ø³FŒÇè'ý˜Øÿ!G+ìEi7÷¶Œšj]ZFžTÁ%!ÁRx*8''®=+zÄÝ)š;‹xã†2«WÜYvŒç\Š Þ/ÓAû÷Dã¢ÚJ’Ôø¾Àv^±ëk þ`Siµk Cy¥UÈ,G8b¹_sh¤nùeLuÇõ§ŸéäŸÝ\Ÿg ŸÍ…R¾¿·ñ K9"K„"AʬÇkÑXðpyÍ‹OQ¶™[áÐcá–ÜQˆ¸~TñÚ»§×5Æü>·¹¶Ðå·º£e¸¾¥qÀè;ýk²FÀ0üªj|LqøP§©9öQ¿ä%jNyÞ½}F¥ZrÝ0~µ]B}¦8Üãò5—RÌ_šîŠÝ¼Ò=8ÿ Ýܨ>nžÆ±5äy5Ý/ JÌÞÀ)?ÒµfÚà €qÆknˆŽä‰q’ªpÞz”Œãõª‘BË*±‚x Uµ8]§ß½!Ž,w/ÀíëOïœAÃc‚}èven*Hê*¹·yÉl|ÙŽµhåHëõ¥;ˆ ‘ŒP"8‘—vìàûÕy ™Ï–Áˆy殩úšC߯µV€*C‘€ œ“^WñHçÄÖÇ?òæ¿ú×­•Ry yÅËâ[P½’cþûz¸nLŒmêWÕ4èS'd¡#+Ó­K*@s–Ü9íÒ¹»/ j·1HÏlmÒU`Š#wÇ5»¸[p 9Ã~B¢£Mèk-s-NHU~N;dUm$ž;áÏ ÿ´jδíöx\ä€IÆzò*žžU%sÔ+žO©¨(ê lRYˆ¤ÖMö¹DyvËp*ÍóÝæ(x‹=GñVmæšò"”~ÜZ(÷5†RW&Ÿ_º”2»X sÁ®Nî÷PÒ4ôÓtk#å0&GV9üÁ>õ¥•p\´²0N݈4ÉGÙØ‰FõõèEi#*˜y¥sŸMSÄØ;l’.&ÈÿÇêQ¨x¡ß‹=IIêDòŸæMtÖÒ.@OÐÖݬ«µ~Qž§-TêyÜžgÚ‰ŽXjYîLÒÐu•ÿn§ÈÇKÖ½N#ã×­LcVeÚ yÈíSí|‡ìüÏ'¾&åN™©çÔÏ-4]x©€“ì™^ëçËþ5ë±ùz{Ó©ÀUãØÑí|ƒÙ®ç‘¿ïÇö^¤?çâ|ÿèTÓyâ\àéš ÀÿŸ‰ÿƽ‹bŽ6®OQœÒ*£€œóÉâk䋹ä+qâVÛ7S#íSÿñToñ;¡NÔFOüýNþ…^À1£ð4%*7t­ÕöDyRx¡"(Ún Xã o&ñ׿¦¼ž+>güKuOÝÿJœ€?ïºõí«ÇÓÆ0¼{š^×È=™ãá|VÒï3žÚ§çöÒ¦ŠËÁÒ¦ün¦çÿ"W®(Œ ²Œýh œüªÙöf"ŽÃÅaˆþÈ8Î>k‰xÿÈ”ÿìŸI»þ%1`ž)þ®kÖÌcŠ@J=³ì?f!mÄ솓h ŸâU8üÉ¢?x¢GÉÓ¬CZŽ?C^º=ƒÏ4»TðzÖm.ÁìÑäÖþñp`°PÀäµ¼|ûâ­¯ƒüIæ­dŠ»Œãœ×¨ÜÝ_CAAžxãÖ—µr#Ídð‡ŠfŒ#_Û&Þè g¯\/¥"ø#Ŷ¾ºê‡¡Woñ¯M0ÏlzÒ–î@ëG´r#ÍǼG$adñ ½:søýêŒ|8Õdæã\œœcqÏâZ½1ßj3*†#œÉ¥feŠ©£ÚÈ9"y¿ü*òä´š¬íŒ;G­IÂë8ؼ¹fÇ]Ê3úW¢¹Î¯Ôy}Äü»qÇ\æ“©>ãåc†ÿ…k¥Ÿ™Œ…y¸ «¶~Ò,nRå#c$g*ZG$c‘ÞºáÆ˜ä`t‚—<»•v"TعÎ03ÂÒ‚Ç€XÒî剣+ÎGæsPUÁ‡ÍÏ?SU¡‰`’0»Žçç'=JÄuÈÉô¨ä“dÖýIÞ3øñP÷C#ÅÑêRi®4ÈÕ¦8qþàW mã-SJ"ôM¯Ë²áK¯àxaùµz¼ÔdƒY÷6·‘²Oo£ÑÔ茒VhÍÅ·tÎkOñíµÈkv fÏû¼7þ;] Ÿˆ4Ëà;ØËŸàsµ¿ï“ƒúV ç€4[®cí¤îbcýx¬Ëj¨[mGÍ€r"¸€çüöªµ7¶„ûÈôe” `çñ© †¡ú×’6“âÍ,þæ7Ø­œÛÊpGO»œ~•e<_«Øá.LêBŽ. Ï?øçõ¥ìû1ó÷Gªç•ÛŒ‘Šó›?ˆR²¨’Ö)3Å\Œcð#õ­«oZÌmn÷ØUÿ@súRt䆤™Ö “Ó?…*·PsëX1x¯JwÃܘ[ÒhÙ?˜­5iðÐÜE(õG¦Íè¼>éî+È~)/üT¶¿õæ¿ú1ëÖ„ªy¼‡â©ÄÖ‡òä¿ú2JºkRdzJǺ"Iä ‘X*ѯ–H$(yŒJÞyV²’B€¤gù­r¾|°É‹˜š(IÆ@Ï‹N÷7OK¤V]:=„œûöªK¹<ÄìÅ‹ßF›>«eqhÜ!|®ÐÉ¡9‹su•‰éUêmF*R'‰v_½YOš5Ï¥TŽ\«©ëÒ¬8À'œq[Xï¿b+“…"°µº2®ìy,sšÇÔ°9Î¥&¤•µ2tûá Ím#`g(Hý+©´”d}ßʼûS&pêpAÏZéô-Dσ#nô§(ésÇž’±Ú[È õzÕ}ÉSøV5´§hÁl}*êL§#-éŒV xHŠr­9nú÷ªc|„à9ÉQ­ÄBR*« ·4®‡cQe ~ê)úPØe`  ú C´b@¬Pô*3ü©Ä¸^Q‰ö\,JNÐ8àb©8û¾çj2dî8ú­3Í©!ø"‹…‹K€OÖŒ21õÅWO0ƒû¹=zTè³c+ žø¢è,<ß• $çÒnü³|žÔó¡Ie*1Þ‹€™l|ăê)¹ÎH9§yGhõ<ñœÓLMÎN=ŠšWCîÇ'êiÜü³P–T8Þ ôÁÍHY†’>íŠwX€@ã“ëÖ“å^kÍj„¼´OLȵ êšdcçÕ¬=eQýhÔWE€rr6cñ¥-Ïo|V|ž#Ð!_ŸÄv}u?ÖªË㣠ë–ÞÄ0#ôÍ;K°]w6‹6Ö#c—$Ó°T^xêqX§ÆÞ_¿® ÿuÿJþï ÈÅbÔæ˜Î!|~¢ŽIv4{|÷?•5Æþ|w+›oø}3ûË“þì?âj»|DÐü°ß?üGþÍO’]ƒ™a$·ˆïšc>Ðsž=ë‰Z:ýÍ:èžœ²êjñ6Ð|±é÷§üI£ÙϰsǹؖPJàd œškHç€çÁ]üIx‘¤J€c¦éKAYkñ'V¹GžŸíò1þmT©M‰Î'¤=ÈÈÁlUioPÜÛ¡` H1ÏqÏô¯,¹ñ®©3ú‚¦;DŠ?P3Yo¯ÈgIšæg•UÉ$ƒøÕ}^Oq{T{À}ÊF*ôÏçÚ¼çJø˜Š+è»yªê+®°ñ6—¨°]&üò¤àÂ¥Ó”wCSLÚ]û80ô©ã=ª%•†>«R«€yƨ©(˜*ã8 Њd–ñL0ñ©ž Ÿæ)ÀóÖ™øcH¹'̰€“ß`ÏéY³ü?Ò&$ÇçBz‚’ž?šê”óê=©Aç·~(Rk¨šGŸÉðþòÑ÷Xk¯p¬¿àk> ø†&gÊãܨVüÈÏë^¢sõ5Î@üEW´‘<ˆò©Ç‰ìÔ°¹Œ ÛÌÇŽün?ʹOß^Þê=ÌWÂE„.%<ãs>^œ×½:¨^"¼£âb(ñ¶BäÙ©ÿÇÞµ…E}ˆœlwPo¾™%$,j~D÷õ>¦­_i‘ê‘,S…Æ7:ƒEƒ:˜|=icÚŠÒî9íÞ­˜±´qòŠ(­VÇ^á#XI¸$‘ëTî]Úô’xQÀ¢ŠgI!/·¨®V•Ôt¢Š¤Dö9MWw‘#ƒÈ±­õ]BÜ~æîDú(­c±ãâ>3Gþ¿$`.¯r^—þß„ ý³v>’(«å]ŒÊ÷,ñÔ-úÅëÆz©˜àÕšà&DòO 9¢Š,¬fihúÞ¯ewåZê—p+Yc™€8ôÍt'\ñ€­^Ã2ž´QPÒ)šÇˆTdk7X=GœÕ,w~!—rÿmÝŒ ñpâŠ*l‹»#]KÄ/ŸøžÞŒÓÃÿÚ:ÿ ë·ÇÿÇËÿQd!±6«w(ŽM^ñ‰8;§r?sšíýާwiöû’"â%fa¬FzÑEZ%‰õË ò_]¾;øÓÞi¦BZY>öß¾zQE!•¢&7r™‡BÆ–yŠ*€‡ÉýècŽO5iÂìÏ–:zš( ³;„©5ü‚OZ(ª í‰NlS`V·rÏ=x¢Š@NÒ¸',N*<„‘¸ÑE!‘Ë;FOÌž¼TæbÖ7çEHLišFgb>´…Ž9$þ4QLC3KEj7T€‚€‘ÐÔ*í¿x$6s‘E 74ßk:d‚$¹3 ÿ–rò?>µØè¿Ô«Å´€“•ƒéE•HG±¼§yç˜höëV¡fp=}h¢¸Ë!Y9m§éR,YBsÎ1ÖŠ*@"«Ÿ—&¢*Bäã=84Q@†22©‚y7ÄÞðÍ/MVú£Å&ü aô-TNÿþÖÙÀòìSçlU‰N{( ,HÚÏ a´-]ÇA°’Žá@$¹‰;3ÚBŸpÖ.aˆ5ñ#WN½rãѺ®y¦nGwtÙ‡–tãöà-&PSŸÑþ©=Z‰ŒÑÊ€Y³Ï:°"„ÆÍírŽÔþmøÕaþw½ À%ÿgà€–_øÃ1-}ÀÁy8ñ§ð´w€Âüñ!@.|×’“ :o ò˱Z™޶øÚ`þ¤ŽyƒÞïY5Œtgg3'ŽÃ‘h¶JžùSI–¼õ€ßK[ù#a¶Ö£ÐšÃ½ÙãPû’.ÙóÕò÷øW¬éWÇüÉÕ•Ð,¢²d÷Ðm¸¢_Så)¥ÄÒlKÕ?¡EÞéâå<éÖ7ÎLrÝÑë'?•­“M‘][‰iÐ=–4‘ ¦™?äº[Çd<&˜–6‹ýªr«ø ¢ïj4„¼œ[Iþ;JΫëyzßÍ?“õúiX'È@ xÁ$jBîõÌ÷"ÞÓ?ÜŠxø¦ŒcÕOœ£!/…ÛKCyîþÔO2ßÀ1,Ú®Þý\§›9¤mâΦ3¸ºÂ$»J#·éÏü¹®ñG|olâ2›0N©üa%¥ãAùsÂ6üá0»QɆ4p¦F –”¿§áôttö ÄHÏ4é›ù–’ÿ‘:Ÿ£‹Éô‰33Bò¢Ó´DŸÀ@¤‹Ñž¬en¯3õ fF;$OöËuæŠð‡Ø8@Š. 8-RÚœø\¢Kå -N,ÎÓw¡.ã™Fn ü9aþð´Ô¿*zIEN½Çœ¼¼øyÌ#y”q令ÚlÎ)±þñ½ðOÎ|·fU¥pä&/Ô“éá¨ùê€ü"µŠ$ÖóEfÉ2ò“gê˜˸k8€$˜ÔÁp—ƒ\XÇM¢qìèó'¼iü´e‡=ßS2ž:ñ91»8GMV;Ãü÷ Ÿÿœ}d.Å$öò:tÆ›òGñå¡ù?Š5ØhýŽâ›Bù£Xåb 6á¶ÅsxiªüøLàš°ŠpObx(ýü0)=;/ÔÓ{l²~gö2у.ƒ/J©É2iø'HÀê´$ùþJá! ®¦åhœŸK :ë÷ØfýW(yž¸Ô%í9×4¨Ñø!õ]U'iˆx)ǘýuQ¡|HŸ0¥†æ…?8xÏ‹Ü=J”?^uZÏJ¬j0n–+ûâQø½›ƒ¥Ø·ÕŠSüaUmmÖ_Tþȼ¬¯ËP=Ìè}i ’mÂQHLB i’ —ñ8öt÷éC >à ‘&hü ÝŒà‹ÿ1¸Ì+Ý9ÑÅUûGœó@Wš#Týã INå@ê5Bž¹só +MÞÛ¬¿þÔ ÄQR=kâN­,e=Ÿí¨!W>èù“9òÝ2>Ì8ŽÞÉu‹þiÁxÏCô!rüÓ‡b=µlñøåþì‰?CíÊ–¨¡Kbþˆ™j¿ÞÛ< H7`M|xÄ>-÷‘o1\>gÞäñ|qW_ˆ?¬8èî'.-Eüá†a¡]ãO>ó'Ôì#º®ç†(}¯üylÈN‚¶Xsø$­/zÎLPzÇå£XaÒ}þÔÄŸD„’Ç(‰ê‹ýâOF(\|j¶8óÅĦSÊ™?RWÊ<æÏì°Nä¢U“Qþ¼ 6âçWH½ŸZ ®¯££ÉYrpû±³<(qúó‡\áQìc‰kÛñ¾^7Ôµ(Ÿpº Iy°D&—„åÆRmt‰õ®À,YA¬Ý˜?NÃƤöë°Ýüá31Ö•ßP|b¼ËüókÖ|).¿P¬òG±ÊÅ(k üQ¬Áù«@—ê´Ï°48ÇÅ.ÃS’¿¬_ [³xàÙæ-|rª¨p¿ñý^Æ5NíNÅ{=¨¿‘~ô×ïþt¡/Ž-ôÆ[º.OêðÛ³Ø2=±è¥­Ú{§'"ä©ZÂÓ£€rù~c™­n³Pø`2á´rÈ?àŒ®}ôûè“¿?’R¿û·œ¤Ø$ƒÿ!r‘fúÃòn'½í9/ˆ?í'þ ‘K5ó¾*£“ZÐÔlþ®ã0º'ÔÏô yÓÌP¤&4zc“3SÇmfj>Hï³GkêjÀ@æ§©q—ël´_ÛZðÛž-™#¯uĘ^Xcë|¹|6ûA*s´.û¾Í³{çsÏcërWüÐ9"\’âß›ø?ÂàèWôG3ÖB Ûv—ñÇÇ$U‚«mDÈœr6ˆuÍÄñ->AôÂ.&¢‰X Ž‘I ”nsÕ?h§<Ù¦ î;úTƒ'¥êŸÔÏ&I˜ô‹«Üplˆ° ¶µà2,Ñóž-“Ø0Î=¤ÍŽø5¹BÿØHwÔq~×|þÈÖ+œ "UÐÖ-VìÌûª<ægvLíVžwxi-:ÞX*?ïñÇðŽ,ÈûµÔ¯…¢§jùÆŸ\»<ñ#þ8ñGöt –GªÌ¶ÿ<Ôå~NcÛ…ËjÔPrb#“luÂU,:)àEnk¨ÛŽžS=dC:Jœ°¹&T Ç×*?¹Õ‡R|lÃù cµ_¹ñ§³Šñ˜k!)Î? œ#±MÍ3ÅgÀ&üi‰ÞºPó•ûš4ãú\\1s ù4A”:9ô;BFßkþØWyvÏÇÂ7­3.V1pfŽÆÎàJ0ÙŒ¤—À@sÆÁXÍ_ý*0ÿ³^ÆLf«†Ù§f.Æyoz®^šÌ쮎f¤×£·GëKñæØkÌäë` ýã Y0Ñ@˜ ŒÃ#×#}C|"þ²mD¤’ƒ9Rû-”žâ3`‹[9š0ÀDlú,ü ¤—ÎüÂS†[8]ŠÏ€MTÁOS—qÌŽœžŒ`Hj;6Uf`[æ‰CÀ~Pé°/ƒ÷4%=¤ätíÅ—Â{ò‡Ô“ù>•µ¿Ì~ô— sõÑ#P\2Tÿ(ÖÀüÇG@qÉPý£X£¥x+ üQ¬òG±ÊŘÿè(.ÊŨýR¬òG±j¿k úG±Fó¹+`þí£G ¸dèRŘ~ô— óâ’¡üQ¬ù¿ …ÝìŸ:‹ˆ/–€év³Ñ(Þ[èŸ_ûCÅþ1ð°?Ü\ïož—P/¿¥Ö»Ãúñ(Þ[èŸt¸ßý¢_øƒûk~9üòaw+ÜAåÏea ý“RÎû©ë}n¶j1Y‡ÔUH÷øƒ¼1XÆåMÅÍŽ”Ñï7þ`~¹áS| ¶òŸ»ý]Îwׇ}­Ç!§³ðäŽ,æ›ëµI×»=º9\_×Ï™?yáO:°½“–W}nlÌLl„ö·ù ¦ w|ÙƒÆ=ÞI~í®ñfwã´£U3ÝÈÛj¿¨å ©­;jÕÔ—âÓb«ùÃÅ~e"áfÏzˆM² ÍZ ™òù+z=ìnÕ?bþ®oså’„9L;}ûÜxþÜ.þÏ~ϸÙó£Õá¶ñçWcÇaz´¿iDþ7­Åòç“c3þ°½ú{å81•Iüœ[âÏí.áþÐ>¯ìÒ4ÿgæÏíîŽ- òç° ÈQÙîÒ~—ˆ0‰ Ó~qŒoIÝ„ ì\ßÞìö¿è•<œ=ñi·¯3C·t$Laÿ»¶LÔ‚Ä^«ý©ñÿ¾²¡UâønIEND®B`‚leptonica-1.70/prog/threshnorm_reg.c0000644000175000017500000001003612240302361015637 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * threshnorm__reg.c * * Regression test for adaptive threshold normalization. */ #include #include "allheaders.h" static void AddTestSet(PIXA *pixa, PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh); int main(int argc, char **argv) { PIX *pixs, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("stampede2.jpg"); pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); AddTestSet(pixa, pixs, L_SOBEL_EDGE, 18, 40, 40, 0.7, -25, 280, 128); AddTestSet(pixa, pixs, L_TWO_SIDED_EDGE, 18, 40, 40, 0.7, -25, 280, 128); AddTestSet(pixa, pixs, L_SOBEL_EDGE, 10, 40, 40, 0.7, -15, 305, 128); AddTestSet(pixa, pixs, L_TWO_SIDED_EDGE, 10, 40, 40, 0.7, -15, 305, 128); AddTestSet(pixa, pixs, L_SOBEL_EDGE, 15, 40, 40, 0.6, -45, 285, 158); AddTestSet(pixa, pixs, L_TWO_SIDED_EDGE, 15, 40, 40, 0.6, -45, 285, 158); pixDestroy(&pixs); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return regTestCleanup(rp); } void AddTestSet(PIXA *pixa, PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh) { PIX *pixb, *pixd, *pixth; pixThresholdSpreadNorm(pixs, filtertype, edgethresh, smoothx, smoothy, gamma, minval, maxval, targetthresh, &pixth, NULL, &pixd); pixSaveTiled(pixth, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixb = pixThresholdToBinary(pixd, targetthresh - 20); pixSaveTiled(pixb, pixa, 1.0, 0, 20, 0); pixDestroy(&pixb); pixb = pixThresholdToBinary(pixd, targetthresh); pixSaveTiled(pixb, pixa, 1.0, 0, 20, 0); pixDestroy(&pixb); pixb = pixThresholdToBinary(pixd, targetthresh + 20); pixSaveTiled(pixb, pixa, 1.0, 0, 20, 0); pixDestroy(&pixb); pixb = pixThresholdToBinary(pixd, targetthresh + 40); pixSaveTiled(pixb, pixa, 1.0, 0, 20, 0); pixDestroy(&pixb); pixDestroy(&pixth); pixDestroy(&pixd); return; } leptonica-1.70/prog/splitcomp_reg.c0000644000175000017500000001342512240302406015465 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * splitcomp_reg.c * * Regression test for splittings of a single component and for an image * composed of several components, using different components and * parameters. Note that: * (1) All coverings must cover the fg of the mask. * (2) The first set of parameters is small and generates * a proper tiling, covering ONLY the mask fg. * (3) The tilings generated on 90 degree rotated components * are identical (rotated) to those on un-rotated components. */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w, h; l_int32 minsum[5] = { 2, 40, 50, 50, 70}; l_int32 skipdist[5] = { 5, 5, 10, 10, 30}; l_int32 delta[5] = { 2, 10, 10, 25, 40}; l_int32 maxbg[5] = {10, 15, 10, 20, 40}; BOX *box1, *box2, *box3, *box4; BOXA *boxa; PIX *pixs, *pixc, *pixt, *pixd, *pix32; PIXA *pixas, *pixad; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Generate and save 1 bpp masks */ pixas = pixaCreate(0); pixs = pixCreate(300, 250, 1); pixSetAll(pixs); box1 = boxCreate(50, 0, 140, 25); box2 = boxCreate(120, 100, 100, 25); box3 = boxCreate(75, 170, 80, 20); box4 = boxCreate(150, 80, 25, 70); pixClearInRect(pixs, box1); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); pixClearInRect(pixs, box2); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); pixClearInRect(pixs, box3); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); pixClearInRect(pixs, box4); pixaAddPix(pixas, pixs, L_COPY); pixt = pixRotateOrth(pixs, 1); pixaAddPix(pixas, pixt, L_INSERT); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); boxDestroy(&box4); pixDestroy(&pixs); /* Do 5 splittings on each of the 8 masks */ pixad = pixaCreate(0); for (j = 0; j < 8; j++) { pixt = pixaGetPix(pixas, j, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); pix32 = pixCreate(w, h, 32); pixSetAll(pix32); pixPaintThroughMask(pix32, pixt, 0, 0, 0xc0c0c000); pixSaveTiled(pix32, pixad, 1.0, 1, 30, 32); for (i = 0; i < 5; i++) { pixc = pixCopy(NULL, pix32); boxa = pixSplitComponentIntoBoxa(pixt, NULL, minsum[i], skipdist[i], delta[i], maxbg[i], 0, 1); /* boxaWriteStream(stderr, boxa); */ pixd = pixBlendBoxaRandom(pixc, boxa, 0.4); pixRenderBoxaArb(pixd, boxa, 2, 255, 0, 0); pixSaveTiled(pixd, pixad, 1.0, 0, 30, 32); pixDestroy(&pixd); pixDestroy(&pixc); boxaDestroy(&boxa); } pixDestroy(&pixt); pixDestroy(&pix32); } /* Display results */ pixd = pixaDisplay(pixad, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixad); /* Put the 8 masks all together, and split 5 ways */ pixad = pixaCreate(0); pixs = pixaDisplayOnLattice(pixas, 325, 325, NULL, NULL); pixGetDimensions(pixs, &w, &h, NULL); pix32 = pixCreate(w, h, 32); pixSetAll(pix32); pixPaintThroughMask(pix32, pixs, 0, 0, 0xc0c0c000); pixSaveTiled(pix32, pixad, 1.0, 1, 30, 32); for (i = 0; i < 5; i++) { pixc = pixCopy(NULL, pix32); boxa = pixSplitIntoBoxa(pixs, minsum[i], skipdist[i], delta[i], maxbg[i], 0, 1); /* boxaWriteStream(stderr, boxa); */ pixd = pixBlendBoxaRandom(pixc, boxa, 0.4); pixRenderBoxaArb(pixd, boxa, 2, 255, 0, 0); pixSaveTiled(pixd, pixad, 1.0, 0, 30, 32); pixDestroy(&pixd); pixDestroy(&pixc); boxaDestroy(&boxa); } pixDestroy(&pix32); pixDestroy(&pixs); /* Display results */ pixd = pixaDisplay(pixad, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 600, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixad); pixaDestroy(&pixas); return regTestCleanup(rp); } leptonica-1.70/prog/kernel_reg.c0000644000175000017500000003224312274452312014743 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * kernel_reg.c */ #include #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" static const char *kdatastr = " 20.3 50 80 50 20 " " 51.4 100 140 100 50 " " 92.5 160 200 160 90 " " 53.7 100 140 100 50 " " 24.9 50 80 50 20 "; int main(int argc, char **argv) { char *str; l_int32 i, j, same, ok; l_float32 sum, avediff, rmsdiff; L_KERNEL *kel1, *kel2, *kel3, *kel4, *kelx, *kely; BOX *box; PIX *pix, *pixs, *pixb, *pixg, *pixd, *pixp, *pixt; PIX *pixt1, *pixt2, *pixt3; PIXA *pixa; SARRAY *sa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Test creating from a string */ kel1 = kernelCreateFromString(5, 5, 2, 2, kdatastr); pixd = kernelDisplayInPix(kel1, 41, 2); pixWrite("/tmp/pixkern.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/pixkern.png"); /* 0 */ pixSaveTiled(pixd, pixa, 1.0, 1, 20, 8); pixDestroy(&pixd); kernelDestroy(&kel1); /* Test read/write for kernel. Note that both get * compared to the same golden file, which is * overwritten with a copy of /tmp/kern2.kel */ kel1 = kernelCreateFromString(5, 5, 2, 2, kdatastr); kernelWrite("/tmp/kern1.kel", kel1); regTestCheckFile(rp, "/tmp/kern1.kel"); /* 1 */ kel2 = kernelRead("/tmp/kern1.kel"); kernelWrite("/tmp/kern2.kel", kel2); regTestCheckFile(rp, "/tmp/kern2.kel"); /* 2 */ regTestCompareFiles(rp, 1, 2); /* 3 */ kernelDestroy(&kel1); kernelDestroy(&kel2); /* Test creating from a file */ sa = sarrayCreate(0); sarrayAddString(sa, (char *)"# small 3x3 kernel", L_COPY); sarrayAddString(sa, (char *)"3 5", L_COPY); sarrayAddString(sa, (char *)"1 2", L_COPY); sarrayAddString(sa, (char *)"20.5 50 80 50 20", L_COPY); sarrayAddString(sa, (char *)"82. 120 180 120 80", L_COPY); sarrayAddString(sa, (char *)"22.1 50 80 50 20", L_COPY); str = sarrayToString(sa, 1); l_binaryWrite("/tmp/kernfile.kel", "w", str, strlen(str)); kel2 = kernelCreateFromFile("/tmp/kernfile.kel"); pixd = kernelDisplayInPix(kel2, 41, 2); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixWrite("/tmp/ker1.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/ker1.png"); /* 4 */ pixDestroy(&pixd); sarrayDestroy(&sa); lept_free(str); kernelDestroy(&kel2); /* Test creating from a pix */ pixt = pixCreate(5, 3, 8); pixSetPixel(pixt, 0, 0, 20); pixSetPixel(pixt, 1, 0, 50); pixSetPixel(pixt, 2, 0, 80); pixSetPixel(pixt, 3, 0, 50); pixSetPixel(pixt, 4, 0, 20); pixSetPixel(pixt, 0, 1, 80); pixSetPixel(pixt, 1, 1, 120); pixSetPixel(pixt, 2, 1, 180); pixSetPixel(pixt, 3, 1, 120); pixSetPixel(pixt, 4, 1, 80); pixSetPixel(pixt, 0, 0, 20); pixSetPixel(pixt, 1, 2, 50); pixSetPixel(pixt, 2, 2, 80); pixSetPixel(pixt, 3, 2, 50); pixSetPixel(pixt, 4, 2, 20); kel3 = kernelCreateFromPix(pixt, 1, 2); pixd = kernelDisplayInPix(kel3, 41, 2); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/ker2.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/ker2.png"); /* 5 */ pixDestroy(&pixd); pixDestroy(&pixt); kernelDestroy(&kel3); /* Test convolution with kel1 */ pixs = pixRead("test24.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 3, COLOR_GREEN); pixSaveTiled(pixg, pixa, 1.0, 1, 20, 0); kel1 = kernelCreateFromString(5, 5, 2, 2, kdatastr); pixd = pixConvolve(pixg, kel1, 8, 1); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/ker3.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/ker3.png"); /* 6 */ pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); kernelDestroy(&kel1); /* Test convolution with flat rectangular kel; also test * block convolution with tiling. */ pixs = pixRead("test24.jpg"); pixg = pixScaleRGBToGrayFast(pixs, 3, COLOR_GREEN); kel2 = makeFlatKernel(11, 11, 5, 5); pixd = pixConvolve(pixg, kel2, 8, 1); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixWrite("/tmp/ker4.png", pixd, IFF_PNG); regTestCheckFile(rp, "/tmp/ker4.png"); /* 7 */ pixt = pixBlockconv(pixg, 5, 5); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/ker5.png", pixt, IFF_PNG); regTestCheckFile(rp, "/tmp/ker5.png"); /* 8 */ if (rp->display) pixCompareGray(pixd, pixt, L_COMPARE_ABS_DIFF, GPLOT_X11, NULL, NULL, NULL, NULL); pixt2 = pixBlockconvTiled(pixg, 5, 5, 3, 6); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/ker5a.png", pixt2, IFF_PNG); regTestCheckFile(rp, "/tmp/ker5a.png"); /* 9 */ pixDestroy(&pixt2); ok = TRUE; for (i = 1; i <= 7; i++) { for (j = 1; j <= 7; j++) { if (i == 1 && j == 1) continue; pixt2 = pixBlockconvTiled(pixg, 5, 5, j, i); pixEqual(pixt2, pixd, &same); if (!same) { fprintf(stderr," Error for nx = %d, ny = %d\n", j, i); ok = FALSE; } pixDestroy(&pixt2); } } if (ok) fprintf(stderr, "OK: Tiled results identical to pixConvolve()\n"); else fprintf(stderr, "ERROR: Tiled results not identical to pixConvolve()\n"); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixd); pixDestroy(&pixt); kernelDestroy(&kel2); /* Do another flat rectangular test; this time with white at edge. * About 1% of the pixels near the image edge differ by 1 between * the pixConvolve() and pixBlockconv(). For what it's worth, * pixConvolve() gives the more accurate result; namely, 255 for * pixels at the edge. */ pix = pixRead("pageseg1.tif"); box = boxCreate(100, 100, 2260, 3160); pixb = pixClipRectangle(pix, box, NULL); pixs = pixScaleToGray4(pixb); kel3 = makeFlatKernel(7, 7, 3, 3); startTimer(); pixt = pixConvolve(pixs, kel3, 8, 1); fprintf(stderr, "Generic convolution time: %5.3f sec\n", stopTimer()); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 0); pixWrite("/tmp/conv1.png", pixt, IFF_PNG); regTestCheckFile(rp, "/tmp/conv1.png"); /* 10 */ startTimer(); pixt2 = pixBlockconv(pixs, 3, 3); fprintf(stderr, "Flat block convolution time: %5.3f sec\n", stopTimer()); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/conv2.png", pixt2, IFF_PNG); /* ditto */ regTestCheckFile(rp, "/tmp/conv2.png"); /* 11 */ pixCompareGray(pixt, pixt2, L_COMPARE_ABS_DIFF, GPLOT_PNG, NULL, &avediff, &rmsdiff, NULL); #ifndef _WIN32 sleep(1); /* give gnuplot time to write out the file */ #else Sleep(1000); #endif /* _WIN32 */ pixp = pixRead("/tmp/grayroot0.png"); pixSaveTiled(pixp, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/conv3.png", pixp, IFF_PNG); regTestCheckFile(rp, "/tmp/conv3.png"); /* 12 */ fprintf(stderr, "Ave diff = %6.4f, RMS diff = %6.4f\n", avediff, rmsdiff); if (avediff <= 0.01) fprintf(stderr, "OK: avediff = %6.4f <= 0.01\n", avediff); else fprintf(stderr, "Bad?: avediff = %6.4f > 0.01\n", avediff); pixDestroy(&pixt); pixDestroy(&pixt2); pixDestroy(&pixs); pixDestroy(&pixp); pixDestroy(&pix); pixDestroy(&pixb); boxDestroy(&box); kernelDestroy(&kel3); /* Do yet another set of flat rectangular tests, this time * on an RGB image */ pixs = pixRead("test24.jpg"); kel4 = makeFlatKernel(7, 7, 3, 3); startTimer(); pixt1 = pixConvolveRGB(pixs, kel4); fprintf(stderr, "Time 7x7 non-separable: %7.3f sec\n", stopTimer()); pixWrite("/tmp/conv4.jpg", pixt1, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/conv4.jpg"); /* 13 */ kelx = makeFlatKernel(1, 7, 0, 3); kely = makeFlatKernel(7, 1, 3, 0); startTimer(); pixt2 = pixConvolveRGBSep(pixs, kelx, kely); fprintf(stderr, "Time 7x1,1x7 separable: %7.3f sec\n", stopTimer()); pixWrite("/tmp/conv5.jpg", pixt2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/conv5.jpg"); /* 14 */ startTimer(); pixt3 = pixBlockconv(pixs, 3, 3); fprintf(stderr, "Time 7x7 blockconv: %7.3f sec\n", stopTimer()); pixWrite("/tmp/conv6.jpg", pixt3, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/conv6.jpg"); /* 15 */ regTestComparePix(rp, pixt1, pixt2); /* 16 */ regTestCompareSimilarPix(rp, pixt2, pixt3, 15, 0.0005, 0); /* 17 */ pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); kernelDestroy(&kel4); kernelDestroy(&kelx); kernelDestroy(&kely); /* Test generation and convolution with gaussian kernel */ pixs = pixRead("test8.jpg"); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 0); kel1 = makeGaussianKernel(5, 5, 3.0, 5.0); kernelGetSum(kel1, &sum); fprintf(stderr, "Sum for gaussian kernel = %f\n", sum); kernelWrite("/tmp/gauss.kel", kel1); pixt = pixConvolve(pixs, kel1, 8, 1); pixt2 = pixConvolve(pixs, kel1, 16, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/ker6.png", pixt, IFF_PNG); regTestCheckFile(rp, "/tmp/ker6.png"); /* 18 */ pixDestroy(&pixt); pixDestroy(&pixt2); pixt = kernelDisplayInPix(kel1, 25, 2); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); kernelDestroy(&kel1); pixDestroy(&pixs); /* Test generation and convolution with separable gaussian kernel */ pixs = pixRead("test8.jpg"); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 0); makeGaussianKernelSep(5, 5, 3.0, 5.0, &kelx, &kely); kernelGetSum(kelx, &sum); fprintf(stderr, "Sum for x gaussian kernel = %f\n", sum); kernelGetSum(kely, &sum); fprintf(stderr, "Sum for y gaussian kernel = %f\n", sum); kernelWrite("/tmp/gauss.kelx", kelx); kernelWrite("/tmp/gauss.kely", kely); pixt = pixConvolveSep(pixs, kelx, kely, 8, 1); pixt2 = pixConvolveSep(pixs, kelx, kely, 16, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/ker7.png", pixt, IFF_PNG); regTestCheckFile(rp, "/tmp/ker7.png"); /* 19 */ pixDestroy(&pixt); pixDestroy(&pixt2); pixt = kernelDisplayInPix(kelx, 25, 2); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); pixt = kernelDisplayInPix(kely, 25, 2); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); kernelDestroy(&kelx); kernelDestroy(&kely); pixDestroy(&pixs); /* Test generation and convolution with diff of gaussians kernel */ /* pixt = pixRead("marge.jpg"); pixs = pixConvertRGBToLuminance(pixt); pixDestroy(&pixt); */ pixs = pixRead("test8.jpg"); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 0); kel1 = makeDoGKernel(7, 7, 1.5, 2.7); kernelGetSum(kel1, &sum); fprintf(stderr, "Sum for DoG kernel = %f\n", sum); kernelWrite("/tmp/dog.kel", kel1); pixt = pixConvolve(pixs, kel1, 8, 0); /* pixInvert(pixt, pixt); */ pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/ker8.png", pixt, IFF_PNG); regTestCheckFile(rp, "/tmp/ker8.png"); /* 20 */ pixDestroy(&pixt); pixt = kernelDisplayInPix(kel1, 20, 2); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); kernelDestroy(&kel1); pixDestroy(&pixs); pixd = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixWrite("/tmp/kernel.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.70/prog/plottest.c0000644000175000017500000001207412242265772014513 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * plottest.c * * This tests the gplot library functions that generate * the plot commands and data required for input to gnuplot. */ #include #include #include "allheaders.h" /* for GPLOT_STYLE, use one of the following set: * GPLOT_LINES * GPLOT_POINTS * GPLOT_IMPULSE * GPLOT_LINESPOINTS * GPLOT_DOTS */ #define GPLOT_STYLE GPLOT_LINES /* for GPLOT_OUTPUT use one of the following set: * GPLOT_PNG * GPLOT_PS * GPLOT_EPS * GPLOT_X11 * GPLOT_LATEX */ #define GPLOT_OUTPUT GPLOT_X11 int main(int argc, char **argv) { char *str1, *str2; l_int32 i; size_t size1, size2; l_float32 x, y1, y2, pi; GPLOT *gplot1, *gplot2, *gplot3, *gplot4, *gplot5; NUMA *nax, *nay1, *nay2; static char mainName[] = "plottest"; if (argc != 1) return ERROR_INT(" Syntax: plottest", mainName, 1); /* Generate plot data */ nax = numaCreate(0); nay1 = numaCreate(0); nay2 = numaCreate(0); pi = 3.1415926535; for (i = 0; i < 180; i++) { x = (pi / 180.) * i; y1 = (l_float32)sin(2.4 * x); y2 = (l_float32)cos(2.4 * x); numaAddNumber(nax, x); numaAddNumber(nay1, y1); numaAddNumber(nay2, y2); } /* Show the plot */ gplot1 = gplotCreate("/tmp/plotroot1", GPLOT_OUTPUT, "Example plots", "theta", "f(theta)"); gplotAddPlot(gplot1, nax, nay1, GPLOT_STYLE, "sin (2.4 * theta)"); gplotAddPlot(gplot1, nax, nay2, GPLOT_STYLE, "cos (2.4 * theta)"); gplotMakeOutput(gplot1); /* Also save the plot to png */ gplot1->outformat = GPLOT_PNG; stringReplace(&gplot1->outname, "/tmp/plotroot1.png"); gplotMakeOutput(gplot1); /* Test gplot serialization */ gplotWrite("/tmp/gplot1", gplot1); if ((gplot2 = gplotRead("/tmp/gplot1")) == NULL) return ERROR_INT("gplotRead failure!", mainName, 1); gplotWrite("/tmp/gplot2", gplot2); /* Are the two written gplot files the same? */ str1 = (char *)l_binaryRead("/tmp/gplot1", &size1); str2 = (char *)l_binaryRead("/tmp/gplot2", &size2); if (size1 != size2) fprintf(stderr, "Error: size1 = %lu, size2 = %lu\n", (unsigned long)size1, (unsigned long)size2); else fprintf(stderr, "Correct: size1 = size2 = %lu\n", (unsigned long)size1); if (strcmp(str1, str2)) fprintf(stderr, "Error: str1 != str2\n"); else fprintf(stderr, "Correct: str1 == str2\n"); lept_free(str1); lept_free(str2); /* Read from file and regenerate the plot */ gplot3 = gplotRead("/tmp/gplot2"); stringReplace(&gplot3->title , "Example plots regen"); gplot3->outformat = GPLOT_X11; gplotMakeOutput(gplot3); /* Build gplot but do not make the output formatted stuff */ gplot4 = gplotCreate("/tmp/plotroot2", GPLOT_OUTPUT, "Example plots 2", "theta", "f(theta)"); gplotAddPlot(gplot4, nax, nay1, GPLOT_STYLE, "sin (2.4 * theta)"); gplotAddPlot(gplot4, nax, nay2, GPLOT_STYLE, "cos (2.4 * theta)"); /* Write, read back, and generate the plot */ gplotWrite("/tmp/gplot4", gplot4); if ((gplot5 = gplotRead("/tmp/gplot4")) == NULL) return ERROR_INT("gplotRead failure!", mainName, 1); gplotMakeOutput(gplot5); gplotDestroy(&gplot1); gplotDestroy(&gplot2); gplotDestroy(&gplot3); gplotDestroy(&gplot4); gplotDestroy(&gplot5); numaDestroy(&nax); numaDestroy(&nay1); numaDestroy(&nay2); return 0; } leptonica-1.70/prog/pdf2png-gray0000750000175000017500000000132710244261125014675 0ustar dandan#!/bin/bash # pdf2png-gray # # Rasterizes a PDF file, saving a set of 8 bpp grayscale png images # # input: PDF # root name of output files # output: 8 bpp png files for each page scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=pnggray -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpdffile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=pnggray -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpdffile} leptonica-1.70/prog/fhmtautogen.c0000644000175000017500000000476512242266466015167 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fhmtautogen.c * * This program is used to generate the two files. * If filename is not given, the files are: * fhmtgen..c * fhmtgenlow..c * where is the input index. Otherwise they are: * ..c * low..c * These two files, when compiled, implement hit-miss dwa * operations for all sels generated by selaAddHitMiss(). * * The library files fhmtgen.1.c and fhmtgenlow.1.c * were made using index = 1. */ #include "allheaders.h" int main(int argc, char **argv) { char *filename; l_int32 index; SELA *sela; static char mainName[] = "fhmtautogen"; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: fhmtautogen index ", mainName, 1); index = atoi(argv[1]); filename = NULL; if (argc == 3) filename = argv[2]; sela = selaAddHitMiss(NULL); if (fhmtautogen(sela, index, filename)) return 1; selaDestroy(&sela); return 0; } leptonica-1.70/prog/lion-mask.00016.tif0000444000175000017500000000063211330622227015514 0ustar dandanII*ÜÿÿÿÿÿÿÿÿþB€Ì ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€ÐŒŒÔŠ’(xxleptonica-1.70/prog/pagesegtest1.c0000644000175000017500000000473312267652376015243 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pagesegtest1.c * * Use on, e.g.: feyn.tif, witten.tif, * pageseg1.tif, pageseg2.tif, pageseg3.tif, pageseg4.tif */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixhm, *pixtm, *pixtb, *pixd; PIXA *pixa; char *filein; static char mainName[] = "pagesegtest1"; if (argc != 2) return ERROR_INT(" Syntax: pagesegtest1 filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixGetRegionsBinary(pixs, &pixhm, &pixtm, &pixtb, 1); pixDestroy(&pixhm); pixDestroy(&pixtm); pixDestroy(&pixtb); pixDestroy(&pixs); /* Display intermediate images in a single image */ pixa = pixaReadFiles("/tmp", "junk_write"); pixd = pixaDisplayTiledAndScaled(pixa, 32, 400, 4, 0, 20, 3); pixWrite("/tmp/segstuff.png", pixd, IFF_PNG); pixaDestroy(&pixa); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/chars-4.tif0000444000175000017500000000264612226572724014440 0ustar dandanII*è& Mÿÿÿÿÿÿÿÿÿÿÿÿ?†çb †Ç!±È9rÇ x5Aˆ xg‚øC@ä0ær² F¾h"ŸH¡ôœ ¯@Žä‚ añT%w„qÿÑ¡éÒ®•‘ÁqJ­ GGÜ>Gá"ïN“#˜~¿ÿê•[ Õc«î‚(}.¿ü†!~:¥+ ¿|qUõ­ðË¥])Ãz_éW8>ìWî5à þ?úA4¹sJí|!`Þ‚)цҙŒKú×§Ñ}°Ê_ ã¥O·ù aÇý'ˆ¥AÁÿÿöë~–@È8ÿ¯Ö@ür}AÕ+îïÈäž´´xŽ×«iU¤–½hEl6!ºéjÁ‚ 9ÀÎ ƒV %ˆˆƒDzhDDDDGvGõãi$;ˆãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä2^È„Ž@‰ÏÄä¡¡ü†0ÜCá …Á Y=“ ñèAŽ ½1d0r ² †²Ë¸ îIÈ$r}ö‰Øeö‹¶vÃ/C/B0l4A Ðip»a—˜EÛ ¼Ñr<^†˜L&šÚ´ÔŽKÝ3÷A>ßtÿ¥ßzA½Ò î“ÿíÖžêÚédÑÈk=ïõñÇý/áÿßâ8ÿ·íÓt>@ðÎáaÒ¤"‡@ŽúIoéþ—§@Š}½/ÒúÿׄPêÃÒKÂ0Ò¤«øÿÌ>aøþ+ÿÿ}-ðJp4}ºÒºØÒÄ ˆg˜a¥¥é7/?ã—/þé{á/Šaÿÿý% „6—ëßòö^ä¯þO÷ûãðE9ïûijýº[kÆ…HçûÒÇÿ·î—·Ýw[oÿ±Q¢?ü2àA˜XebWïÖL}ÿý¼˜üî»®ßû}+zD‡Èœ‚îpl†‡h5úL<%®ÃÿöÿkØØa-´¶È8év—O^—éG `°Å'hS3†c „O °ÐÓÐi»‚lPNÑàÎô“a4‡ÿüWÿïÿÁÿ{h"Ÿnú]‘ÃÎ?á¿ü¸hÚ_ðŠÿÿý¿ÿô¿WÒÃ_×÷þÃÿÛÿûÿðØvÆ› /Ä×Kµo…ÿ·ÿî–•®Aqÿ]êï¤XÿÿSÎÊvp£àîÓÓm4Ó°±S€@2‡AÎáÁ”íS„›iýqz"8ˆˆˆˆÈá—ÇÔ†¬éÿÿµý&G ^#i/…Ø4‚a4±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€wIIß–ž(ÀÀleptonica-1.70/prog/warped_paper.jpg0000444000175000017500000024522712110235235015633 0ustar dandanÿØÿàJFIFÿþZ CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 41, Smoothing = 0 ÿÛC  0;*-#0F>JIE>DCMWo^MRiSCDa„bisw}~}K]‰’ˆy‘oz}xÿÛC99xPDPxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxÿÀ`"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?èÂý¤ª‚ÅG8¨î<ù|µ -øÕˆQUܨÇ8§0Ý,cêhŸgB¿9-õ=)mQRµ@p)nfŽ]Ý€ÀéMŠoÝ Ž&l dñ@}넊H568ôÊ©§ž÷w"(P8õ©&‡÷2‘Ø…'®)$.‰u¨n®P´HŠï™àzsý*ÄPÅ( jŽnn \r77׌Z_2v?$*3ýæ¨6ܽãfD@¨>êç©?áWUÍAMÌíÜaqëÆ­SŸ½pìONƒ?•Uµ´„®ÞcæVþ6ìqý*ñ#Ÿ—8ãµT³š%µWis¹òO«H •ªÿËý˜€sQi±ÇöˆWs zóM›T³Ž"â?»÷UÛǵEk©@-bDY™‘bsÛé@ ñ XtKŒ/ €0:tëWl—e”îÄ£o÷¸‡âKæ—Oò’ÞtYdÉ3þqZkuyå¶ ;i~èmU¿âYu´äÙsž‡ÅYŒ/FåôÅdêS_µ¾Ãknt\yÙêã¶Ú´ ûG÷mÕIþó±ëôíO6ä/ÝtdÁë“ÅZÛÏû@6:{VN¨šƒXfDùcnî=êsm¨2ôÈñŸº-½úòÔºßEÖ>MÊTŽ9ÉÆjÙUØP/µck·­hß—"'(Î\~>õlXÝÚu÷g%B ï×¥KªatÛ•V1¸U¯oëV·(Só ƒ;Ž~ídj{›_ù]:3*ä¸Ç.@*Ïöièo.÷ö_<ôü¨]YÄzeÑ'‘•ç¯ËI¥še°^Ñ&üçû½«3]±X´›‰VæåÂŒÓ3:UË}&%·L·¶ £Ïp:~”zVXáÉÎÀ2½sÓ½E§ŒYÛ…áÄH®1ŽÕN÷L·[+†qò#nÌî{}y©!ÒmQ>|þŸ^(÷Ë·œùg9Îj®Ÿó ˜Þy²`àã±ý)‡I¶o—3îÏïäÿ«§éVßeÍ>Övû²¸þ#èh\•ØçæÙÎჟªÚàÝ]õÝçazãˆ×­3û*òù—;ù#÷òcùÕ[-.NþuÈ_5ÁÄÌ~4®>ùÛ÷²7ç8ü*Žå:ºO– 99É~ÿ¤:RÁ»¼?.'j§˜_U”-åÐ)n>qÈÎî3Žz Ýùöt]ÿ^+_hšûLVˆÌìY·t#téÿºR5;À¤ð|ÁÏéXºÏöÆŸ¼šGbÌ 0ÊÜPS»æÃ`ü£wÞâ©êGuº/ÞÌÑ\“æØnÁÊjÓË2¡ÛúUKë=D”êDîBæç¾JÛÿíûÎ>oj¯¨ài—Lc;<·Ê`sïU–×SòÐèÛ§Êm‡ËÿT:œz’ØÜs(‚|’¹°;¨§ eb‰z¸_‘¶ð¼Tƒï1O_Ÿ óÇjÌ ª-³qhWÃk©4éeÕU“6öÌÜVý(&“ìØ2pÊrrNI«››=“Œ nÙëXšeÖ¢–h#ÓÄ€(ÿ—€;zcŠjwËÓfçu‘u -Ù–{‹ìHÄy»D™/ʼ~¦®37-†IÈÇ-ô®zÇVÛ%ÊɧÜìyY™-Ø•¢ߨÈÞÛÆ3Ò€2õ8ÒKH£žåYæýë0ãžù«‚ pÅ5 ~^åCÒ ¿dól†ý‘<ç,Xƒ» W˜žãœFùÅf_G|.,Õn!“t¼n‹Â}êÙ7è«û‹yôÚå¥6ä1Ô-#9w^>ïËëVòóÐr;v  ½Fêà[Ÿ6ÂPed >ð«Rˆž¨rГK¨åÛ¯8ó“hÝË÷«›?6~nƒwë@ö¡i.•$0΄±]©Œµ¯dêmaÛ"9Ú ínfø¤«XF­Þr«{½ýŸbé“m06²ð[ŠšfÕ»œ¨-ŽH-Ò­ ªÚœm e_XD‰‰î"2J£B@«bÞå7yzƒ½|Ä þ }æHˆ­*dv^sSp¡L}öÇ^*…ÏÛ–[uÿG—súÏëS5ÅÔdo±,üó—?ÏËüoµB¥ÿ{ÄyûÀ§5lƒ»Õ½Hè=+.}B/µÛù±Í +ËÇÛ*äw¶rqÄ~»w`ækûetVˆqžKŸN~´öÓmIÈ„#·M¹]¿•/ßÕ ˆN:œÕ²`O>¤Ð5µ‹5ÕÓEs" `€“»$}jæ£.׊^à2mÇåV,²ÆV<³Jß/dÇÒŸxÁ-%É#åÁ#‚Oµ0(ÙÝÏ ¤{í³Õ‘¦]jVìc·#yŠ@u*´áR"E  u U®áŽYàGQ°¾Nz±x¤I‡±ëQ[`ÜÎÝÆû¢™.›lùýØV=×øj­¥„в472"–;TóŸ­h]0îH$c§÷©Ð.Ø}k:÷í±@ß:J1»ƒS}®x” -› f€TI¬ÆpˆNßJ½5¬)ߟ²lo¡mJi)òó Ւ戕‘O´j)·&cBrÝM4Ç,—‘ð~êÔÐñý9¦,Š%—çó¦!³CÇ€£s2~µdcðþUFkØËÆ‘«I¸çå;Ô»®œð©îäаs$­ÆwcëÀ¢êHÖ3¸ŒÆ«ÙÚ±‹2ÌìI=ZíâV‹¹ÝÎi€ÿµF~æ[Ô(&ª‰šüàl"`n;q’?´@àcþj¼xû\ïŒO·Sýh‡í®[ýT~ܵW¶µœ™K·Pd#*öþ•§ŽÝÿ„Ô6§÷[½Y‰™$ÐYl"òœÊÒ¾[tÒ’ÏM´ŽÖ2`vÁ–eÎ*{÷U°—ŸùfÛOáR4±D¿3*Ž„i Ô1‹9£DT&6x«Wn?€ýjÞ§f‘m7q™z8'ï þ•kÚràý¤nï…c@x‰D’iñ•˵ÊüØíé[#Ž‹ÿãzå5=jÚkë'‹{Eïa·þ%m‚;+·cÓä=iÞ Én¹Ü¦T!³×œÿJ²3œÿ‡8ü+›¹×.¤‘6i“’Ÿîž:{æ¦þÒÕØÆ«¤‘ýÝÎZÔ¼ñìŸÀÓ&ß^2¥YçXò-vÿcõ  @+}‘>èiÓåôÆ[úUÅèïL?5r÷‰¯Éwn’ï/\`¿ýsVþÍâý:Ýñ£äý(Vñ²±/ñ4±å3ÓæÏô©÷ ƒæù0ÙëÍs³Ùë†XMB#ºQå°Q×i9éíS;Z`?âl7q¹BýÚŸÄÍ"e'ÅWh=·ð­A´DFã³NNA®SXÓõŠ/7Róâ–UEúš¼4[n²þouçÍjê_5”êxrŒ“Ž˜æ¬ƒÅzgçÎxãµswzN¢"ÈÖ$’"@lç®ìzÔ¿ØÚžmj_7’£œÖ€7¸Âƒ¼läç§z­¥çì0ûÌ ¶IÆ5‘6¨*3®µ1U~sÇZŽÓHÔšÖý¯$JȾZ úgh¢ùv¾YèrsœÕm=³þ³Ì”ž>ù¬¯ì}Tà e÷ñ½yàU{=3VkHÝu_*&ärz“@9e ä7ÉÎæ-÷j»ª\‚ØÛåª|ß{å'úÖIÓ5Ð05Uó9!ryZÞÇ\77&=E>WÛ#–î{{Ð3­ÜÛTìç¸ÏJÀ¼eoiª' Ùƒä|ÙÏ׳ñªíÔ oAÏþ;Y¶uØ•™ñbÊð¸Uæ¡9ç¡ýß7¿ùõª·£76c;¿~J¶>ïÈÕ“Ÿ«}Èãï|µNâã_ÁæÙÅÎÊGÌpAÏ>†€:Õ<`7ñ¿Ч©*ÿgíÛˆÙ*íèw ÈþÐ×Õ>—#•ÀéÇÖ«Þêú¦Â³i…ôËØàä ê¾mç›|c4ÉVüE†Üå¾ís£Ä—)Òæ ‘†Þž)gñ@Ö[ãm¤m'Ž{šnÙäYۆʋ‘óüµ7\eIÉ/%sÖÞ'±X7† ÅGËÅX_i§ió]?½˜þ÷wKSäÈÃi”ÊûŸoQ¼Õ²«°Œb#œõ9¬=/YÓVÕb’u@•R¤cæ'ü+F=ZÉÀ?k·2tÇ™@ ¶Zþõž5ó7áW?x_ñ©šÆÍËn¶‰÷IE;8ªútñ;Þ,s‚­+&ðHáÏáWËeY°v î\g}c"Éõo,@Í…Æü“ÈÅYþȶR o<(ØÛ¶W5"*ÿmI¸Âò¾SòýîµuOÌyø|Ü Á»±o¬ãŠús7,U¤°xf®‹}M[÷wñÊ1÷žùd|„¶©hŠìbfdüŽ*áÆÀY1Çîöô9  Y¿´Vú-ñ[?É!ÂnLò2jé¼¾II§’Ø8ÌGãRßÚã….°a‚Ãü*×PB9ÁÏÏœàç¥c^jM˜·Û\ÆÂ\†d ŽƒkûZÈ\Ç»ï>•-àVžØ:þïÌmÉ·;ŽÓÍY?{¦A«œq@ö»or-)#,àá[¶;×@_•ebySÁ Åaë–ÑM¨ØD»y#nln+Aô›óyZŽÜ©ý(%àRðY~fÎ?„Õ’}Aÿw®úǸ°–;«xá¹›%˜í/»¼ýjב¨£.ò98ë$_¦E&˜1½·ÆæSŽ©ò1Äýì÷ÏJÇ3_¥Ôeí¢uÚqå¹L’ÃÖ­h2’g³¹O`¡ÂþT€‘ØR sþ©°¸éÈëRÉ2ßEãï:VdZ«jNÆeEò‚³8(Iç¥i¤ÑÈ¿#+ŽUÈõ  è´ûV¿¸Ùð(nO<ñV>É<{„7ÒñÙÀj,¹»¼bCH$¶1òã¥Z‘¶BH€r[Š¥j/c¶M¸–$¹æ›yu*ÀÂ[Iw˹H`*Õ?e‡8ß°sŽƒÒ™vÔX0`÷è–ØÚîS×z•Í ‘%½FGW;!¸Z²Ø9´÷9ªˆ´·’ö\ 6í8Ͻ^aòôãÓÞ¢µÏ‘’y$’•Ö¦(¢º•â9-ôpF3€Áâ€&º1.9Ü;ciî?gËu*ÜD³[8ç9Sš™¯àÚrÅûC ´ØRI®¤uRKíéÚ}§[¼d…Ú݈¥Ñ™>ÊJ°ùœžµjs’ƒÕ¨ÀŽw/°cµ¤HŒì7s–njÛ°T$œåTÿ´-m C,Ê Æz÷¦"ÉQöˆ×8ý?­Lzu÷°Æ²gºÅ´“àmVè?ÏùW–ÝÝ„0¯9^¤S^ß‹tÏ(Ü=*+›¨bž=ò(Ú ëþ}jôÇ`÷s9À"ˆôÛAtÃËÜ»A;ŽpIÿëP —X´\ìß/rsU-µ¹dÁfϽòŽ:9­•‰;#PØç¨¬‡î ºÒ1ÿǨœÍ¬ËU ˆÐõõ¾Ÿ¨Mn¥õrå~•±rÅ-¥oâ)ѨXUs•oÓµaÝèˆ#V{©äùÕc×,ZMOM¡£f ä37^zU»Ïõ¶êz´£žÜe¿¥LÒÅüΨ½Á`6ÐuÎd¾^ÛhÕšD 1ÐjêÚ[ @°ÆûŸ'N*­åý²Ïl Ô\HNwçø_Æ•µ{¸,¦@s•Tf&®U[ū䌤LÇ þ mÜá}r>Jæ×RŽO4ȳH©–¡bùÏ¥kiJÌDzuÑoî°Uß­MrXßÚ¨#{ž¼cúÕ— ýÎwuÍb½íÔšŒL¶2ü±· *ƒË/§ÓwÏÔ™¸²‰âœãôhIÃ6¥n¹ÈÀã§ÝÖ¬žŒvñÎWz±Kê2jý¶#Áv?yÇ·û5l®¬ÏÖÍN>þÖ?‡Zuε­~>INq÷~èþµt÷ãŸN>~+hµF¿Œ¯ÙKˆß,ã—=ý«f-T¸Íݨ\ŸÉû§ÓïP÷}²Ùwp˜ó÷p¸þµcÓ'ü¼ýþ+XuSûE¾ñŒ¿ºë÷G<Õ“¢ðìçsy?sõ  úÙ >œ›¾ct…—?wÿj‚»où6¶ï½\þ¥ ÿö¦ÝFì]š6ò±ÑG'šÓj;û|}·¯”>N;P×ò&N$ó#ʆãÅNJì?7îŽrÛ¹5“uþëu7êñ4©µ¼±’y?ÐUŸ#QÀÿNO7ryco^´=ûm³œ±Ãˆœªîê1O‡ ¨#jŒ9Ý÷x¬½Bña?üLâ(ÜùC9ô©þÏ©…ÇÛâó;WÊáÇ¿4|rØQ÷Nï½ÅWÓüKí±ËùI¹wt÷ª×ê)¬·ñ0î/¹Çnj;K}Qm¢_¶Àˆª¡?u’Üt<Я1¿ä#ýfïz©eþ¶ñ±É™¿w‘ó`(þŸ­Aåk;ý¦Ø¹Ûº?+…ýj½”Z¶f+ql‘ÿxbÏ;±ëí@ü#oü ûµ-ãùùŽÜgý¿óš»rºÊÆJ5œ¸S˜ö0ßúÖ ±Ô›Äó•‚Ù®$çb PYÆÀJ‡»ÛÒªNê–«¹|Ѥ1^1•ªË.´¿ÑmK¡›{ãÚ¨Iy¨ý¶Ý›MàD@E”ç–“Û  ¶ícÑ9ß×5OQëh¤øø_,nëŽyªÇRÔ–`¯¤¹—i*a·ª7ÚÌ›âi,.Qc›sÎSÀþt èÁù»ÀÜ»¸Z©©t»•ÜJù-‰}ª ×¢]žm­ä@ýÖh¾ÿ[R×,%Ó¦‹.Ô(‰¢#i FȆ?'-؃ÀwS&±µ~Únvf.êªkzk‘¶ò/7oÊ@Ç¥>MNÁà”¥ä>YVÝóá³íHe]3J°—OžÖ&r ÊH>™â¤mJ‘WýB`muüÕ6™q °µO>=ëíU“ï|½êèpOgq½¿ÏãVNß/œ¬G°æÄZ%ÊÝ\y¬ˆ‘`;œƒœf¬ÿgkÐçËÔ•ñ÷Cæ+RÙ˜ß^ä©•[ n íÕιÚÙëóqòP3–oíäÔcÞ‘O2GòŒ (?þª²šž³‡ÍÒ÷°Àb€ò+I:ÍËÚ|¼¿^•{±IÀÏîÀ$gŽô˦¾ôÉ-¤ÑŠ¡Cs×5 ¾$±oõ‹*²ÉúÕëp[P¸f@[«s¼ýjy-¢”þò(ÜŒeÜ( ëS_[2\&Svæe*=«N;«ilWì<îsœÖtºVŸ&£b1eIlŽ´7‡töçË‘ŒªI÷:f Ë'ˆ4õxÉ1Û׿_Ò¶ùÝØÈ?Œ×&ú6Ím--î]1ó!ê*ø°Õ¡ÈÔÃ!ûžgS@Fù¯aÚÇnÆ;³œò8«†W z.:çMq/40Í"¦@ÀÂÿœTŸÛ:„Κãû̹¤3a7’t.CsÂõ©O s£ïqËñ\ü"¶;M¨ãÖ´#Ö´ù~íÊwx* Å6£p̨ÒUUÿf.Ÿk/<çx_ÓŠm…ÄSKrb•Y_•·ä·¥[nmPQº}ñ@:r¬R¼3Ëwo-UñŒ}i×ßÃo+%îõT$—Aùf­éœÙ«ÎòÌÍž‡=.£ƒk·oß`qß=MU·–úxU­Q—hÚðz{Ó&Ô—í0‰b–’̹íÐbµWýï÷›=µ@ê­}W¢±UÇCêh"¾¶“ý\¨}8?6Іžåƒnù€Ý펂¤šÖÞ`ÛãVÏSŽþ•BÏMMŽèòDÌĪ«}Ê¿xvÛ¶8ÀÕ*Œ GLúÖ]ìkÜ™˜®ÍSù—Ñ}ø£}£ªœPùÝ{לûQzGÙd%T¼*”:€2yÐH˜QÛ?.¡}–n©(Ë z@Xéð5ŒY_˜®r*94ùæ?"á׿ÌsZvÛE¼`Šhù®¾‹@n¬/®"vžógªF0«–š=¶Ý‘qÈfæ¬]:* f,0I÷¦½ì Ò_¹»±ùSûuQ$ÛWhÜn?úôûŽcÇñ3(úóT­®.¥Œ´vûrİçÒŸ%½Ì’B²\a tqŽøSC*“ÔÚª ÈæRdáp9ÏùÍJ¶pç,¥Ï}Ç9÷¢ÚÓ~ÅQó§Ø d¿ d‚fQÐ…Æ?:ŽÒKϱ KuÈAÏ׊µxÛ,ç`?²?>jT]¨©ýÑòšÍ½Ph ™aUo“å^FH©~Å;ÿ¬¾˜°ê 1ùU‹žB(ã2/Ëøç?¥MéÿŽŸñ  yô¸ê’IHfùä×™-w©fA´üø^üûÕº¸n'´|œ2ùg÷|}hÍÿ6ì3É* g¦[­Oüç㟟#jƽ]_ÊEó­X#Úû/ó}jOøžà6,³ÆbÁãž´PlY\„FÜ{Š•xP>ðü>N+P:ÒÙʯöI”‚뜌œb§ß®`Ÿ"ÏŒî]Ç2q@ØsTšmiXn±¶‘IùvÉ÷8ªúuÖ®`]š|E³–Éà’Æ€7¤o”aöðÄp+MÜÞ"Õ¤àÆ0¬0IPÃåÈÙŒúwª«“«±ãÌX0ÉÀËŸ•TþÖw7öUæÝß¼ïŽ;UXµ…þÓ}öw¨6"¨Ù–8Üyúçô¤3{+åýü!þ=Üç5Vó&úÏŒ]¶d|ß/_×õªÃ\‹9{kÀün‹É?'½U›[±këv¸dýãFxÎ8éL Ò>oï|Üp>N?ÏçTuXÃZ2ì]ìñ«±_¾7 ‹ûwK`Çí «“½J½G©éòCp0ó£(¾èuýhy¬íW¶Éùv®ÎAÍTÔ´Ûoq+ZCç¬L@qëõ«ihÍ”º·gà0óxü*FhŸJ¸Ù:˜Ìg'Ò•¡Ðt¶¶#Ê#æ“wÜ8¢OØc)±lëµÿÖ }kW#ËåN#Ëàî÷¢\…=ù1’¼/è NÑWìq9¼»E|Tll>õ`i·éþ§V—ÎnÞ»—{NâÆ }ÅßœÿwµNÚƒv»ïÐŒ:¯™wäê²y¸22ä³`úªé:ºÂæH-$\Ñ®A~zÔºiÜ·ê~yÏîø;yÆJ¼Cnã\pÅxÆzPw7ë«Ì_Oó%Ø¡|¹0ª9î~µgûYHÏcvª ÞÜ6Î*{=¿i¾*q“·†À«Œz–SÆv0w ĵÖ-Râáäy3#—«Ñjš{ìæ5î);qÇzuœkæÜ¶Ñæ›kàpI5­´ži’ÈõŒÝ¸ až)5I%W" µ²“Ò®Œö팱|V?öEŒ—Ón·ÂÆ«µýþ?çÒ¦:êîû±¡¼¼Žöàɧ³È»o•Gù5hjÐàïŽæ%ÏúLjàô cá‚)eº-;ÎÊŠŠmM”|ÖÊÊœÓlu )ƒOBpÙÝWÖxØ’£·ñ•pBP ¿‡àt‘’I#»/ÊÀ좸Ò/là–HµG¿{vFkkM윕bʼn^_'¯º“²ÙM€ í#nîƒÖ€1­—^··ˆ ‚T 1ÆE6ïU¾UnìõÜèzãž+¡BÄ;‚¨ Ä}ñj‚ç›ÛUÆX1!Aè¸ëH øŽÌ°Y’XÏ÷YzTÖÚœ÷NËp˜*¶v’}ªì¶ðJ™¸îYsº³‹c<óî…Wk66Œu  bá•e'wÞ¢²ÇÙ#?ÞäŸSX·z Ánïos2:wRÇk®["ùwÈû§øhf|´ð×vsýÞ*~ߨÎÿhêQÝ'Ú,K…AúÕ±¯ÛàùÑËï¹hýº†yØüÀ¶ õªÚ­¼RF‰´ngUÈíÍ%†£hñ'IbpN0)פ·–¨Žßœ׊°tè‚þí?Ýj­ µâM!Žãp8­SQ[r½Z€±‰®"2óÇÚ¯m§ #ÔUin¡ŽóH¡•:g®OÿZ¡º¿-nßg†WÝò«mÚ3øÓzØ~â!þÈ ÒžnÐ)Ü¿•WA{"üÆ8W¸ûÄ{ÒGfítþmÌŽUF9ÇéÇÒ˜¤•#wU>¤ã5FBÙcc¸±.Ä…RqÏZ­-‘ŒJW¾yÅ:Ò1´`( gïq@÷×Ï$+vÓåB³ äTÞn¤ê [ÓÈv$ŽzÔ÷d¶NªÓ° þ•`盿z€2'‡S’h•®£S¸•eOEÿëÔÇM‘ù–úåÔðê§>Ø«RmûdcwʺvåEO“»~X  eÑ­žöU™å*©œ÷fãò­&•`¸ZEœ|ÊÜí©bhÄó±ÂÊqòü¹þ´­{lƒ uGÝÌ£æúÒ­µ•ªÞ˲ðŠ‹ËœŸÖ¯„UÞʃ?Ç…ûÜVdz­ŒwEîS 'lœŠ8ÇãK6¹b#fYˆ°·Ë@ ðøS ÛªlV¹r8gJÖ$çý¡Ñs÷«Ðu.À'Ùn¦bÌÍåÇ•9>µ Ú¤… ]>ì©8Üv®zu  ­e¾vá Ø'=0Š*áûÀ½ÎÞ¿­aé÷פHcÓ]ÙåvæP£ïN•`Ýêm+§(N~õÇ?Ê€,Ùç}ãÿ ˜îÉ8UÒ­c ãýƒ·îñXš|º«#ì¶·¤‘²Ò>nG¬³jûXù{yÊîrOé@Ùî7÷ïœáÑOpƒüjèÇ/a»X6V2Ý4qÚi›,žRkþ'Xs²Äc¨Ã|üP»pÆîçæä2®ì}ï—?Ö¬z§'-c[.®e”âÏ_î·É…*ÐVÏúë@F77”~Ö€!ˆñ4ÿ¼?%²ŒñýìÖ®N3´ÿ¹Ç>õÎZ&¤u‹¢«llaÁC…î8Íiyz¾ì}¢×§yGžzu  åÉÔ¢]ÇýT‡w/+V¹ÏB0zqóÖ(]M¯Ècj‹”òÎ-õö«,š¶ìy¶œáÌgäýh{Ï¿l9ù¦^?»€Oô«8=3Ï6ÍXwÛ^|#mžD„”üä!äÔØ×‹ä±*qòío“Š·¨óh8Ú­" ¸õqVŠœàòüím¿v°oNµº$’+F>ba×?1Ý?J˜M­·}Š×gxÃõ  sÀv'Ë÷¸ªºXÙÖ›‡ÈUJ§Ž*”÷ZÔyßc¬Á–CLÓ.µ1k¦˜¥T3c<FhmþùÙ÷øÎ}+ŸðÞZMMÜÜ7Ì9ÿëÕ»GP—~”åK|»f ÄðÕüÑ *ÊyÝŸsmnáë@q'wÍ€ã;T7ÞªV¹þÖ¾aó‘O?wå'üýj¯öÞ!.l/„\æM£åæªÛk%íÛ<*]òGÉÂÍ: nn1óñóÕI‘þðå<§ù6grsU_Óÿå§š …hOîø¨×\ÓÚùíK‘Ör„ÏJkI3ÑÆÒàìcV~¡adÍ-¡ØÓþôíÁû§ü*eÕ´×_–òõ|6sQ^^À÷v{.!g± ²ðFÆëúP1í£é¯°=¤* /oã½gêZ‚Z¼É$‡`Ú¯÷2zÖòº±ù[~O'p;8ªš—ü{(Ÿ6 Ì@ùÆáH CÃ!›¨äÇ힕ƔðY\‡4ZÎîÙ¢”›˜¼¶‘óóóËqWËç« áuµk§X¼e¾Ë I¹²í¼ÒÿcY|Ÿ2#ÔI‡×¥ '·É¼»ÁËîù\¯ òŽ?ZŠms÷c9Üy5‰m¥±34w×PÇæ• Ô“Ç&§û.­e5–@?ÕºqŒõ¦4o›RÔåÉcæíØ;ó[$ü`ÉÙŠöÏJæ4FÔ¹’Þ¤-/Ï#dç+OûFá3鳤l~_,äîÍY³*ÍrU°†~w$ñÅY#p”óÑ1œZŰÖ-†ï;ÌI^C¹Jð•têv^\›n£,ƒÇ‚Üv Ò޲壉¿Ö¹Sýj "ÃÈ/öbü±ž_Š·hßèp ÆÔ ÷¸š)g;ùÂ1ÞGAéH Û=*xíb1_Ì“mžUTöÅG¨Ç©Ek…¹KˆK._šLž•µÅ‚ œ&Á’ U{åf{d}¥ š„]_ÄTMb®ØÈò›…UþØ€ÞÄÒ$ðƈܹ.Oô­¬Œz)Ü¡Cm;ò«mÆ?:’â$XQT|Ë´ãÜUž};OzeM5ô—qmµT(°ÏœñŽßZ²c¾b Í.>òÇ¿™©ŽMÚÕc;XþjnxǪÿZÉwr^¾ûçQ~âÁ'ü*c¥ÄÃ÷³ÜÈMÒ·<$5ħ$઩õùsÏçS1X°þ {Ò*ÛH²g•š#,„(fÎìýsWb²´‡qŠÕXòÊ9Ò¢´»µX\½ÌI™ä¸Äi[V±_›ípç¡èÖPÇ—F¢C$œã¶ìJuîÄÓçcøö1)¶³í5«· df9-…F';‰¨µMb&ÓfÇ8yas hî‚4{Q§fwqÎNqWùôçºç§½eiWnšmºýŽáÂÆ¼€ tëÉ©¥¾¸Xw}ŠnrÏÝÇÖ€%ÓãÂ"Nàç©,MYù³þÞ98ÅfiÓÞ-„*¶€í‰AÌÀvëÒŸ-Æ °‚,ãÆ2ÚOþ;@ißòˆ·Ý›Œç%³V±óÿ¶\b²4æÔÖÎ [qrÒ·#˜©·j†5ýÅ®Òx˾•K¦€meb¹WžLŒ¶jáwû\ílt¬]1µV³£[@n·ô$š°WVòËe´Ÿ»µýhÕ§ú©X/Y_#{œU‚9_—?ÝãîñXö+«U·Yò]ƒcŒµNSUØøkLs•ò›æýh°êÚ‹g£F§ß䫸WäùxÂà|µ§G©5ÕãFÖ»¼ìѶ ñÅhÕ²Ç̳ ÜùMó~´<\êSüË Ø÷jŸaù>Sœ¦:Ö5ªjj¸ÁµÀ(»|¶ãŒŽþõp.«¼óg¿{cÿO0&úÜwØtè?­Oݰ1ÏÍÇÞâ°äþÕûj~îÓˆßåùÉ«eµ1s ™<í;ŸÒ€'º=šòF:|­VyÝÿM02pqXóÉ©ý¦m­ò²dâFçä>Þõ?Ÿ¨ˆÐ(¶mÄíŸý€,_]:á²D~[äóœÔÐ ©¹Ãù@=EejWWÿc¸b ˜ˆ;gÈ÷Æ*ݽÕÞÁÿù óÈ•O?-HØÞSœ}쟻ÅbøH8Ñ×wÈ „«ËTúŽ£FÆ ñßšÎðÍø‡J ä]LÜŒ2¯Ò€:CÊò½¹Š«b7KrØË›cîðùúU툂+.Ã`~ðÛõNÃY²XæWó<ŽÅ<–9É  í«ó€~—ïñYâÒѵ=¼{(ü¡³§ÞëùRniÍÏÚT8ÎÝÊÊ?†ßU±:˨¶ºF gÇMÝ?J]:u›I¹­`iv€ÃoÍeÝèºkÝ[D‘‰üÆi¿J׊òÕª]FTc %·µW–E}ZÛø‡’çËà÷^hx{N'pÓnrŠÿõª—š ä¬wI¾U7d'¾AÝØÉ†ÚûxÕZõ€–ß²Nþ¹áJ§“s+Uºó<ÂÜŒ{f¡¼µÔ”ž^§¾Ý”cz ±'¦ko¡@Nð|ß{Žõ ÙÌ\òK )‘ò|Ýh–ÝebËI1l?7=hšMb9?ãÚÖVÚÅ]X€¾ÜÖ˜ ÛLÞê3Ò ½hÒÆrÙHv6â24“¦ß]C¦«gÈaU˺ÉÏN ¸uo,:Îî1ü?&íüU«<­¬ ß}bâ0ßxqS¸8|6O;X€Bq@ºn¯§­²¤’l˳)Ä|“Z1j’11\ÂÏÆó»ð¦iÑÆtÔÌJ×2åq¿Ž´·}‹ª‰-¢~æ8-Å;N}ÖPüà½íV8*›£à‘…ÇÝ5“e¢Øµ¤NcbîªK+°í¥:CF?s}uQûÆ-÷¸í@ôï¹#pdó_wP1¸ô«#•[åà‡ÎwV&m©­¬mòÛ-2çw^µ<Í«ÅçŽÖa׌œP|4¿ñ- ü‡”²€:zÖÉç[£üÜ/«B¸žßKÊØÈñd–‘\dý_›WŠÛ4(vô)€'°@¶ •ÜK_?þºƒS±µkIK[ŽQŒx\cŠ‹OÕ,¾Í}¦/5P¸m ÓŠ±sqÖŒ!™€È|äîé@×B³Ûûƒ,gþz¤žý*®¡§Kš¬w³ìfP‘??1=Ínžq•àã º}jž¢FÈÔ¾ÀÒ ‘óŒcž)Í^0BÏm1îÌ»vU;››åº·ûFŸò‰ ‰²]€ëô­Ò?¼ 6õϽUvÚKœnX›{rãXkQ)ÄñO cY2©Ie¨ÙÍ<ì%EWpO±Þ´Ê‚0Ã+Óiçw½g[ÙZ̳¼ÐÆîd`îW{PÉe_"F/ w0?tâ‹E k …ÛòŒ;ûÖmöl¶íä‰PãUøö&ž,o¢\E¨±ìÞb÷ö  ²œÜÄãq$ç¾:Tÿ†==«ÌÕøy‘C+*8ÛïV$ÔŒh|Û9ÓÓ94fÌ 8ʳ?Ú¦_[Å*aÑ~b›þ –§iöt 8 Œ’À©žh¥¸…RE';°A@ “L€ýÀÑœ éUt«YV[–ŠvÆü|Ü“Z®FÃßúÕ}fÕœõw$ÐW}]#px÷©Eì¨?{lãýÞjÅÇ,‹êÕ3t  ­”,+לzòiqºé=êEA“˜ãXíöÀ26)#Žáî%óg   „\c¯­P‹ä€¤žñJ†)âH´«»nsžµö±‹y7nv HÜÄÕˆãŽ4¨ ÓŽÔRæò6–D’A¿qaïRy÷,W˵9õw ŸË5$™7‘qó*±?ítÿ˜ã¦~\ú÷ô  Ä’ÞÊsxU‚ýÏÒ§6×-»}ì™ÇW?Οo“svärTà}á´X=1Ÿ—Øýßj˶°F2¼“NàÈÀþõ†qÇjœév}'ûÍ–ã>õ5Ÿú¬¼Y›Û‰¥¹a¬”) cîðM )é¶V¿b…þÏ,€œ¨ãÞ­¼qG ;j®TúñI‘Am4¨»–wWPÔ¬ÒÒp.¡ge#h“'8í@,¢H¬âUP0ŠŽ¿-Rñ.ÄÑf ›†T'Ë÷y«ÚÖ8âáItª³*Éñ¡ Ö"7ò ÀÄÃwâhzÑ|»X”)P ¼|ÜS/Ûe…ÉÀ~Z€j#o—žÍäãVÔïäk9TXÝ.õÙÈ\sÆzæ€5c"EÆ ®gïqM¹8·˜Ž~S»žœU3}såœióí'šT?A¨^_}–\éå2߯O\P¤K¶(ñ´¼ûw¤v+·€ùÿ.ÕKí7ûý6ó»7=?J‡P¹ÔÎMÖQcËl9;F>œÐÝ9véöŠý<´ÛÇ|UŽ}·€2qÆ+*õ5€°‹åP3xíÅ,·¢AŸ°Á·oÊ<ãÇJ·`öt_‘|»yÉ«öó0pÛxÅeZ˪¬(‹gdEšSÈü©Í6«äƒö+,ã æ¶•?Hæ·<£\˸c$óŠÐ#æÆƒåû¼W=¢Ë©}—÷6ÐÌí½ÜŽ­ÈéëWŒúŸ–íö6s½|Ó“ôùhÕžL÷mÆ|Ðã¯Èµc µF?wÆÑƒ‘XÖsjyýŠ´¬W2Ÿ”Ž==ªÈ¸ÔòäXC¼cwïúý8  1ÔÛîïXGÓ–ÿëTçnÆÿž|îëœÖ"^_ýµÉÓx) 'éÉ#šµöíGÌ égÌ œc  ²çí1—#s/åÿשsÉ#¯ñüÝ+MNqp´éÂì}ØpHåsÞ­NpꯦݩÏË‚¿7ù  u<»¾F(·}ì°â®§-’pq÷súÖþ¨L8k+°|Ø÷£ ‚ [ƒW‰Çü{ÝíÆC˜?•$ÕÛn—xyaä¹ÝÇËÇJ¯áÑ·D·Äe>\°Àùêž³¬[6›s&Þ2¡"¹Ïz4­bÆ-6Þ9n˜‹€ÍÂPæÕÚ»—÷.ÔÛ÷j¦˜¿èÛ¯œY‰8ãÍ3ûgMÉ+wlüå¸Ïª/Q±þÏî 3 œ÷  #‰âue_%·n$óšÌŠÂÒmRí¤¶ˆ²¼|ß/ÿ^´Vò9Yâi1÷VQŒf«Ø¸{«ý²d~þGËò-1´=5˜Ú)/Ê:'›ÿõ™ÔR̨ å³÷þjèóÇm?7Цª¿ÚLY~O).ߺrßáHE Â¿4w—q@GÜ sœÕ[.ú;«xãÕ%yIvŒ9Îä~5Ñ îþ6îN1š§1VÔ-Õ_ ¶Fó7t9­1•ž¨Œ<­WzÿxÔìâ«Ý.µÉm  f ò+y‰*Å‘°3òpwÕ[ñó[©Ác:˜þ_¹Çÿ®€(ùú²Eûw¶íTb¥O½G¨^­­À—Nu+ VPÊ çšÛ|íÚ[ I×ÓµSÕ>m2EW!P¬;óÚ€)[ëQ-ª‚ñHÑçð©fÖ4÷†Ev(Œ­º6‰jÓê¡ÓÝíiÏZ¯©)ûÁÂ4ËrW´iö8ÜÁæ¤`ó1Û½Y¹¸ŒZÎc”?ÈÇp`vñQÃcfmR! F,}ãÏ5WTÓ,þÇ4ÂÙceF(žÇŠÐ·Ú¶‰Æ'Ì6ýî)ò«Æ7(&5ÝŒñÞ³± D) ³G.2¬®À ŠîÆæ%x59|¥VÝæÜŽÔ¡§ÿÇ„;XÈ>n>CŠ[òEË Æ·|¼±ÛYÐE«Åf ýžTo”ËÉ…3Xº¾ŽÊUžÙ7È2G' ÇJ_ÒE¥Û«d «u-ùÅÁSó؇#8ö¬Í?SX´èíîÕ€$Ù»4ëíVÆkI#ó-€#d*AÏZC/-¥«[$M ~WqóU+Ý"ÊB­äåvU>YÆÎzÖŒ71IÌsFíŒ>Ù2¡¼ u`Å|Ì7Þ6“L Øëæ ë˜Bÿ­mß{Š«u«Õ²­ÚNûÎÈÙ@ÀÇÞ5¾xá.ʹÇQòÚ”!XíXÝ÷ðwr8¤_´j°2ÚC6Ñ–’6ÆG< ­ªË¨f{;ˆöÄ"Üæ·8ÂíP2‹ÓZ«k†½»ebFå²#øh5Õ¬Xö…ug]¼z “M’3kÆSÔª«v'½IrˆmÉhíRÑ«/N;ÕHt›µŒ ½O,hÍö J ùK¨c¼3ÐUžŸþ¾‚±n4ÆK˜ÖæXܶå r¨¸þu9S…O—ê²à½Zˆn½”‘ÀU^GÞ>µ%Ïü{É“ü8$v¬˜//!–á®,Ëá°Ïè1ÐT—´^ÇI"s‡^œõ  ³ÂÑ"´IÀùT¯J¡&™l׃blIù7Uد-¥dÈsïÉ4DC]JAè?Ò€(ÝÙË ¼ä@çwé€(}°5á1Á3ì@íÛŒŸö¾•1žñƒ¶DÇPò@*H±ö‰ÛPTöïŸÖ§ô9Ç×ë@–qÞº»£‹s·DÜF:“íRµ­ÆÖß(#’"ñëÒ¦±ÇØÑ¶ðä¹SœÒݶÛ9ïà;[?{Š«gd¿d‡Ì–vÜŠGï`ã=©—Úm©µ‘ŒEœ rÄî?‰­ŒŒ 1üª ïõH½Ìˆz|ãŠ@1tûÁÅ´!Oñm{R^A”©åFȘvÜ*Öà äÝI½j•Õå¶mÁ¸Œ£Jï0{ŸË¥^Çäúç5‹âWŸN—.næÇôþU}µKcºòÀ üücÚ±u-JÒmGMhî­ãmí…9_­t˜ãîäw^µWPæÝïn–1»þ8¨¶l·q#–8ù–;þœU[½ZÙÚÙU'•Y“É`W©  ¡×§ÍÝsïÖªê'6Lå•sŸV¡]UÜAvÊq¶Aߪ×z“Hˆ¿b»W2!*SŽ?Ò€62sÛÌÇ ž1UuCÿéöýÖR§×'ЇûIðØo6a°3œýj¶¡,–å …Ò±e8Û÷‡½lóÓüíëÆ ½lYÜ0è·uôíU?´¤Æ?³¯väàdΡ½Ô'kié×*çå\‘‚ó@Ê6ª)éÆÞ¾èb~l¼cvs³Υ0ÉeÙLüùÆGÐf›&¥(S¿L»>é9ã¿4º#F·/÷[ž=KÒ;½·öôÅaiWóCa G¦Ü¾ÕˆÆ1ê9«-ª2 ÎŸ{åCç>hÕ‰fvÏÈe·\ýãVOÞ±œü¸=xïXÖZ¤‚Ù?â_veÁ!Bü¤RaW'ìW¾_;˜Ç÷(ݹcyrØ\å¹éÇÿ^¬ev›ä8ÚÛºÖ%¾­Í;{¿šO”Í…š›ûv!‚Ö·`œnSù(ë:Šü£p‰¾\ÿ´?¬zá²9ù³÷k5»3xXË0O,!ˆòsÓ¥Mý¿§í,]ׯîÌg-ï@ËwܘO߯§ÏŽjÔCŒýÑ„ÇݬK­bÁî-qr­‰KîÛ ¤Z½«§¾ü]C¹q¹³·wWĸ]ä°ËíQ¿·Ž*ÆŸ #I…<­°þt(rMfø†úÖãCe·ž7É…ž¹éZ¶—0´p§ŸN#è­Áû›x{ LW&<¯µSÓtÛ/±D~Í »"ù›‡N*ìÓGöiš9 ¹·}ÓE©Å´ H\*íÁûÿ-*6‹¦IO³ N ¸<žzU+MOvžVˆ:Ù­ÞÀ•ÎqòqòUM01†SÆó4Ÿ6Þ£y eS¡[¦åŽ[„v$ÆË#|•V=*VÔæòu•ò‰ l“Á­ÖÙå7UŒçwPsUmÿãþì–ÃïWwÞù?úôOû:ü“Y‘c8òË($Õ'¶×ìCíPË(Œü¥Fþ¿Âº@Nïïsó “Š¨ŠNªØ?2¹r¿|n?á@ñ¯$»Ðå;IF=ª­Ýþ¥–Óià ”îØç,pzVþËû¥c'îí ç5^ë&þÓ¡‘K°]ÜŒQ@ίrŽ‹>™r¬~àBwVÿZ·’ܤÜ#y‰ññ5¿×![9ÏÏÇÈjަŠÑD¬ƒcNž`+Ÿ2€µ§¶1tø Î¥w //-%ÓäXîc(ËòâO˜ŸJ¸ööì"W‰ßõJW§©é¶mao‘Þ4}¸9ê(U[pŒœ   ïUu >Êàòÿ(ß·±qÅVšªˆ„‘²ã2+ŸœU{Í2HâˆC}p±¼ˆço4·¹q÷¶Æzàç5_RËXM”$²íØ0{õª«oª!uå~«D0¾õûjqZ²•‚líEà¶OAþ{к©Rs x¯ÏJËñ ãF—g(ÅpsÉù©Ëyx±Å»M`‡îªKÎzóYšö£çZy/ð¾õÜFÕïÖ )ˆb ‡¢ü˜!ªzœQ¼*$T%¥E•˜cŒö¢-_O`ÒQOñ—R¥øíEÌñI%¢Ã"È|̪,Ÿx=i $Òlm>P½\b©\i*—°%¼óDij‚áW[x$ðAnÌGOj¦JF,|«å±Ká@þÇz`ÕÊþ1C’};U!ýªº¢îŠ ¤X²½UcÏõâ·¾bÚ=¸!*¥¸SyvÄmRQà‚ÍëúÐsªO>~Ÿ:®í¥£`Ùj¯e«Zù—fh]¥Ê¬‘ñÆ9÷­¢I'׸ÎBûÕ-:(žÅ¼ÅÜ$vÞJãyÏZ.om¥³—Êž6ܤpü–ô«ªÕã¡+7QÓí¤Oõ‰• .>@OZwöLI&[ˆGL+O­Xs›è—¶Öeäš°}_OjÇŠ ñ&ËÕ}ˆ3®p}O,úŒH7ZG'R6¾1îhÕ–<œÃ32l÷¦ÝÆ’•Æågã;ª•–¦Õ<ËižwmÎãOþÒ´–î,J£nI,1jµ-…¬™/ nèXqŠ«š¥0¼‘|ß( ÂÖˆ‘|¬­ìëL¶æ,ç;˜óë@:„iå*Ü™ܬ:Ö‘–ö%ù¡WÿtÔw_>¡jŸí'Ò´OJˇR ,†hdCœtÍK.¡m"…Œ“ÐÕ«u‘ÕAug²F­õô  ‚B¡bx†¤¶ÏÙДŸç5FèÞ½³’°Ä¤a‡,G½X[9H[™¯÷NܨCî$U¸ƒs(#sN3ÇOÖš×Öƒ?¾3È\±ÏáQ-¸»ÿV íþ#œñW*ä„Z£mzHÑÅ+»1# ´>;Ñ=åЉÙ,›`ÉËÈþ•fÏÙ~o•É`sêzSu~Å?1]¬=~ŸU·]MmãUÈUå·ñIqo}$NùB7ÊÁ#vÀ­<]¹ÀtŽ6ûTW-ÂŽ½~\öÜ?ÂΟpÍóßÜ—ª£•VŸI‹ÌY¦ty9V”ñÁ9ë[#nS÷x=j´ÜÞÛŒ|Ãs>þû5WMÀmßvÏÊÌÙßI&b³ÄE¬ çç{m?ýjÑgUC¹‚®99eSšî¼Œ¢F+ºN¿w¯ë@-­ºU‚1·ý_ËӊʹHÛÅ G†3?Ë÷¸ýkAõ-=Cæò ¼îfOáXÍ©[ÂHÓµÌ^RÁ±Fh¢ ÃÇÜâ«\ŒÝÚ.2C3½„?ãUι¦ó‰·w(Œ’ÕZ]jů¢e™ö*?Ì"?/Oo­mð3ÏÇ%VºÿYh½z0½ò“UN·m’+¢ÜáDçªóë5ÌGu…ffQù>\ZÚŸ~7.~íU½ù–Ýs”i“ ž¼çúUs¬.à¿d½øu÷øª·:Â5Å¿ú-Øe“s)îü§ühs'=>~ëžÕZûØr†Dç?튪º²ƒì—»ËûõÚ¡s›+µ“re tçÿ­@ÄßíóµsÖ«j.SNºt9ÄožzUc«.Ìý’óÊ?òÓg|Õm[RY4ëˆÞÚê'hØSŒzЀÛcj­ò‹·ž¿-LÍ€ÍüXù—wJ̓TT¶Oôk½pÍåýÌ mæ¯vò†å0Æ1?wOÀÓíÆï“Ë\6jrÇ=>|“=k.×V…mãMÉeD ‚ù}úRÿnYíäÜ#‰L-޽:P»Oùx=Œ­–ÏÝíV=>cÇÓç¬[MnÉb”—îÞXˆÀ·ªíí7<Î}˜Æ~OÒ€-Eƒ}1Ùü6ñòýê°S?Ý/ÙŠÖE¶³aö«†7H9_™†7ŒU¬i†5?k‡Ë8Â÷>” }Ìq›¸”¾Y.]vrx«BÞ=¤yQãø~ZÍ“P´}JßeÔ â7ç«A.mZ)gMƒ;›OZbx–x,âu‚$”Ì¡™R´?²ôÉXÚCå¶lc&¨xšPÐØ¬e\}¡JüÝF+q[œŸ¼@Ü»¾í2o4}=-fqj«"£ªÇŸÖž4;<&Ã:ã£,Çä«zÅ„ã$þìüü~U? Û„çríë@¿Øª¬Í õìmüGÌÎþ*•–—pÖu9ã›*»3ƒšßl Œÿ8ªÚWãÊüôï@ž®²†]N7/Ýh°1øUkQ¬¯ÚÌRÚI™çlŒ6Jß^To“‚¯»9ª–)påN ϘøçœJ©öq æÂüÛe^;ËÕÔ$2iO DFf3þ&·™~aп%o U-ø¿¼n1ò üÿ¯@—V•B´ºmÚËÀp*¨¨_X´ûd%Œé«1£n¤Ž:VÊãä]ØN6ßz«Éÿ!TêÃÉû¸éóh°×4Ù“8Tä4l‡&™yym5ÅšÅqÊ%,¸nÁëúV‘…[†DiûÌœc5›yeb×vÊÖð¬N_sciÍi c`å$rw¶ï¸qPߟ’%ÁÇœœp|Á×üý*»hÖ'-öb˜ÈÙãpõª÷ZNÉ­Ö;Ë æC°–ÜŠ@l£¯îÆß»Çz«xG›n3ó×< )5[ì7ª²y:›m$ï2F:㱨îµcšÝOÙ¦ebT ÜSaxP'ÅÁÞ1Tï”m·]£ýjyK‚6ãÖª5Þ©úÍ5d~Le!8éUîµeóbÚÜ@»ó+ï·Pîï½ósÑÎï¹Åcø‡k}Ž&RCN3Ç/Çÿ^§]nÅÔ—”¦Þ62ýñTõ;„ŸTÓ– ≠dJٖنø‘ÝAòÁb²ï4»)¯!Dˆ bη;V²²²üû²~ðnùéU$ùµH·©ÀˆávçiÜ9ý(]´x•†âê?uÉù½{ÕD¶Õùü»õvXÔHοw9ÿ?ng,˸ HÝ1Çj­ÍsrNHVTÛÁÞ6ñ¤2£I«ÆæZ[Î#aŸÞ ²Ô¦K‹§šÆ}ûþ}‡r Çóâ¶ùÞzÅŒ ¹ªšwüz¶ïv_›&A“@¤ÖlD8™¥@W¤‘È1OÓ/m¾É }¢ê˜`EO©.-'l.ñÃ2𸨆—bÐD>ÌŒˆ2˜êÜw  nJ»[¦w)qÁ߯sVsŒ’FGÞn˜‰>ÞĶòK ùIá}Xû¡ýÅù|}Ä‘AãÞ€-ÛüÓÎOf ¯Nô·¤-¬»Q‚G5™m.§LÍmËæÌûqKyª:Dz{Ya$€ÍÕTP¼kˆ”t!@Ç]µQ­`–ûç‰ÄÊŒzÑ©e&œöWüiÖ“G,Ó´n¬¹!ºšŠm.ÓË%uùOÞ¨­ìn#<«Ç^9 2Ò´.Ž sß•>1¶4QØPDbüji¼G)E<1W弞4&KWǪh´ùµ †þêªçÖ­\©o¥T¶Ô ¦âÈqÝMH—PKp»$SVDk°)QÒ©‹y.Œ``v  yòB/ñ_øÍMÁ úU'Šc4*÷d‘±qÐTßdŒ’dÞùà†cŠ¡ ûD)u3<ª˜J–úóCß@©ò—` ±“Š[X#C!eÎÒ^1O»!m&l|»IÁíï@­î&[hÕ,äÊ  ”ÅGz×­iäÄB±rØäuâ´ÆFûßÃÏ_­U»ù¥µ\­7#€ó@ ò¯Øsqsʬ_¯&«ÜÚNÒ[©¿™•ß‚6á'°­Lãýìpxùª¼ÅZî O\¶;põ¤'M²Ï5Ëãï5¾n;Uc¤Úý¿fÆ+å1Érvòê~µ¬A-׿ÁÚqÀªÈ¿˜ìà" ¿VnhŸf"ÒãøJŽ}êiiý q{<¾p;–ÿëV‘ï8³9öªKuÔ&/4JB ¿»P¡â4=ÍbØGž!ÔXEòU ¯zÒ:•Ѝ&òœm>g9¬}'Pu-BY®bRî¸nÌ¥t[~nƒ~8m½½*®êDù|¹õoþµ@u7ëÁN07¡]fÇíŽßh'äPFÜòxé@ävÏ®Ž=ª´œê1|½#s·×•ªßÛ6D|«1õŒ@Üs×¥VÕ©¾/™Èà0„õ-éŠÚõçŽ~oîÕYòoíF>îöíqëU¿¶ ä k­ßóÏÈ<ûÕyu‹c¨Äÿ¿‘¸-å7ÊIÞÔ·ßùŒýʆoõ–ëÛ Ÿ½òš¨uˆ7ä]nçjùçý* µ‹´À6\ ¬K ù>Síï@üõÇÍÆS=+;^}º\~`åWwÕ‡£W·$e.Fp¼†ùÿJÍÖuH&·Š5Y‘¼Ô-DFs@8éÈwÖ«j\X\wÓåâ«mYŒÓ=$0¶:ôéUõ fÍ­$Qæ+7"7ó×¥6Pa@ä`xù¨#åÎÓŽ>L–³ÿ¶´þ?|Äg¯–pœ})µ§n?é*¬1–e#u,دú8ÀÃÇv=XÔÌ©µÏ–6s¹výê̶Ö4å´ŒIt˜Àù{ƒSÿkéåñöØ<ÌpŸÅ>ÚŒ×Ë_õ¿/ËÓä7ÙáÞO•þ7jž¥c¶áÜA|Æ-—çð«Ÿlµ;GÚbäüŸ?Z¤ö-}›h¼Ÿ(‘ò÷Ü*é±µòÏúúl s+jµÑœD»”7NM]Ü­Dœ{4ËkÚm‚^Ù$h±‰¦"B§é[ØÖ$*ù%vcæ ÷ê–¸wk:Z˜·îJñót­ÌsëýÞ>ï ÄÔ4kT´wA2Ú¢0ç wTÿØ .Ô½»óÀùd2jΣÿà’ Ç~aV~_,rD]ºæ€2ntÙãŠW‡T¸H‚±}ÿ75 –ª¶píÔ•p Ä†1ÈÇCZ÷îVÎr~ø‰È\õëp¨ämÆî>N(3Ë×ÚÊN7FÉ€•[L—Yò›eµ»ì|ÆlgæäWAëÔÕ±÷ªž˜iÐñˆÛ•P9ÐI5 èã-&”ÞAÎí’e³š­°ÑÝÜyš}Ø”¶Ug£­oäîìeÇÝÏÍWµ!šà«pd?>GÊp(Šø‚ËwïéÏ;£ÿVqQëؾ¤î.©v\oäæ¶\.×ÜŸ)ÎåÀ;øª inúŒÛඪ¾Nœ´ï·Ûñ’ºŽj±Ô‰tÙÌŠ>o-· f«mZ½ôNí,*¾gN¹#Ò-ï”üÇ®æ\Œg¥a^Afúõ¬>R,NŒHÛ·'&´áÔl% ²æ ¤ü©§=j’Heñ@o‘¶[€Å[…ÿ9  H´b‰Ñ¸ùc€‡Ö©&4wóùZ„é²5ó×qlç¥nŒpp>ñÛ’ãÕRßþ?î¶ãzíT\6í:­äêÐãeÄ„TeÚXqɪö—:”o9k•¼ÒZDqìúVçÞû­Ç÷¸=úU;þŠ­Œowd\ƒ¹4Têëcͳº…zÆ6˜â›¦êVeŠ/µ¨”®â_/û5¥;í‚Vß”î}ßp⢆Þµ‰dv0Œƒ†õ4üðËh¢'VóDJ›<毎s†>ç®=«&÷M³2Ãû„Fy6»ÆÛ6œgŠœi1äÏs9Uݸês@}íAz|±e`ŸZ²OÊH$޹ëŸjÈŠ 庡¿GUc"íô©&›UŽ6ͬ26267Üâ€/Z¨C€ ù€Æ6©=)— 4–ë÷†ü…Îw{Õ+}LCmËip˜Q·å?1ïNþÓ³–õ10–,1ÿ  òÊÂDVÏ Jõªiv²y®c ìÄ|§îUÿ6=¿+¯Ê;‚›gÿÈpyçëï@·zk* ‚ædË ¨["§1êQ)Ù,s(þðåªÔÜÍö-Ϲ,‡O   ­2âéd¹i ÞÛðJU›J0È’!$}å©tuÅ¡l}öcSÌŠòF¬ ŒÐ%弃å•:[fVÞÁù©³Y[¸ù¢Z­m§F±eD$öjÛ87Ð) =3Š•›o$€~½jœvî×2'‘Š…¹…=ím‘ <`¨[œ{sT!–÷–Âõªw3ªrAÝè*;»°ÑmXfgr«þ¯hέZÆ#µŒ„”}).±˜œ”a†8Ç8ý(¢yÝxµp¤õg¾Ùª³›ç¿„áGUfûŃ/ZÓÉëßø†zU\gQÇüó‡ål}ÜŸþµ3ʽ+ó]Åôù"û¾Üš€Ú\¾¡‡¾—)𪎠ú{V¦yàsÝ­W‹ w+g+µ@9úŸëH?³‘‡Ï=Ԉ݌¬9ªðivÍsq½]ʺÌäçå}ë[ž¸ù¿‹Ž¿J­hï›±”íãî`cúPk¥Ø(É´‹Ã(;j½­¥’\Nü®6ü~AíïZO*Ç÷œô$ õNÆh·]¹•BN[wLq@P€Ì±§ûXÝ«'ÃIŠåÑNƸm™¥_ûu¼vëºâá>@Òãwë/Ã×öéÍçÜB…äfegÁ  à BßÇÇ_¥W·HþÑ.#.Уwþ½FÚ®žlƒ?ÃógóªÐjÖ"[–k¨°_§÷†ÑÒ€5Bóœ øl}ê« ƒ}1òþ]ˆ6àqËûcN¥EáãîñUíõ{´Ü´¦K/;OÌ6ö  m§×æþþ*¨ÔŸ÷|‡ËÇv?áPÿlé¡W÷ë·Œ.ÃòÕxuM>KùÚK˜ÏÊ¡Y‡­lïë†þíV˜fþ—¢¹Ç7J®š•±™eS'ä*I<ÔgT²7ª~Õ¶Ejãž™ãýšÍÕÏüz©Qó\ -ëÔÿJ“ûZÃ-‰Ôc;—µgê:…œ×6;.¢(³nÀ?wƒ@JU†6ü¿ÜÛÓžµ »¡PpXȘl¶)²j‹:ææ Ûy$ýï¥VºÔl ÅÄ% «òîäsÖ€4Š)WùÃË·ïSe†" I°wåû¼T_Ú{€û\fÓ»ŒS%¾´0JÑÜÄ@ »æö ²µ€ZŶ÷ìMħ^(k&‹k[Eåvù9ÎiÝÄ-ac¿•Zzšœ¦¦^7«F0>•fð6ÜÁ›æç§Êj× Î9ûÔ‰}ª–3ƒy‘l?¼)†>Õ(:ÊBKAhà5$÷«zŸ6nS†Ú6cîÝjÖÔ9Ãmã—5Χ<Í>):”òåû¼wâ¡Óu Ÿ±!tÌUWwÍÔcªæµ.Š­¬í÷Sk9 Ž;RZ¶–èÿ)U] ½òÐqÖÑ#O6Òö$8Úå3»Ú¡´×¬6Je.»¤'Ë1ç¿ZÝï’ g/%SÓcCªd2>ç+÷†ó@ ]_O‘¸»€ÉÉRÜMµ»¶k‹ÖKˆü²Ãsy>QÒ¬Keg${^Þ/(Ÿîó»5B&ÆYîKeÞ$!cVíþ@lnéÏN€óñTãçU|®@‰6 ¿sï…WþÁ³yÈç%dW?%C˜Rîëɽ¸E19cÅ06Á+é¿£žƒðª›·jP(oBJ¶ìïäqU¾É©GÄzˆm¿ê’D8Çz¬­«®¦Ãó?”=–:Ûêrpq„ÇÝ5{¾ß)à²Ä»­TþÛ¨G¸É¦go4o÷¸íPê*ÞMæ[]!ùB®Ü“…è:@l ®×;x*ÙÎú­å«ß†x‡ªWîj¬Øœo˜£À’2<³Šl7öoypÂæ…]·m,yé@¥µµHf†"ÄbV+ÓŽÕ…™k.·wVò AˆÑ°_åÑy‹Æì}ÕVx¬-•µ}MþQ&ýªì8íL šÑ¶ Ô.VAŸ/qÜŠ=9¨m¡Ô–Kƒ ôL†_½"rÌ1‘ý+_åû" \rAÎú­c (ìíó<¯òä˜&€ yuHÐ4–vò碣ca瓚­i©W²B¯øÐ»\´— »æ/Œ˜ioqöW~ÿËÓ’Õf×Kc¸¤36O|;ûý)××—"}¦Ù”3*»GÏ¿ª£åëõ ô>•Uíâšì‰ ŒíLËÓ&š5KoãfŒúH‡å÷4–·–²Ï+$Ñœ>ö7@Ýi–BÙ/q±ˆ&’>XâMô£ŒÃ5rf F9ôçÓŠ2£¸$ Èb€3|½En2Ã&éŠ}ÝÝÔP1{3Ó­œ}jä5ÞÀ?Æ¡ÔäUµuÝËqîM3O¾†+(–@êqÔ­N—–òÜ®ÉTàÖ§@«l¼ÂÕi,àkÞ¤|ŽÃnG]„‚)a‰~•s§À‘’¼y醧¬J¿º¹ï Û‡%¤ ð_* S/%Dµ˜± rqøÓ-í”ÄZF’L±Ü uü©·°bÌ,¸$›‘š¡ûm°Ú«2±t¨/üª¼— ÝCåÛÎÀnb¥6ãߟ­hPÑòúc¡¨:߀Αúýüÿú¨†{¶ùRÓ ”É'óÅV‹íÒ^\8Ž*2œ·¾{zÖ§õR}úÔ0æÎØù·ò@ûß(  7íÃ^F½ÁH‡ÍíɪðÚܼ— %ô¿{kì ?„{V§zá{ó÷j½™Ê¹ÏÌd|sÛ8¤GN‡¹¹fþó•U¶Ó`6ü‰_{°eiæç¯_JÖ$m'ªwæ«ÁòÃz –Çc@}‚Î<¢Û+îqǶM7Oµ´h·­´aË6AQÓ5mÁBÌr·%xàúÕ{&Xlby\ ʸ;ºûPW6öv–2 Q²@æ¢Òí­ÛN·y!O=”ã#'“V5¢ûò#£Kå}WÓf‰lmüé¢LÎ_œúPÑom ²%ºyo–¡µŠ)<ÆHÕ&Wm­·§8ü¸§É{n²[ˆKãy•VÊúÒ V’{˜Ô31Û»‘óýhÿ—jÍåwûÃoZ†Ýc•å Wó SŽ˜u¦>©fádK˜‹qÏÿ‚ÏP´Tw’tDÜçòrhD'’¬ê›Ÿ?9Û÷ª­—‘-ÕÉH@Ã(û½öÓ?µm÷î1°còÿ²)¶Ú•’Ëpætß'Ücz&Ÿl ʼœuªD—î<°ªÑ¨+·ý£Í2JÅ­6‹˜Ž~èÏO­E¥huI O¾Å'‚(O…m±Æ ŒüØéY÷E6£hË.ÍÇSÅKý¥f»ŠÏFǦìÕwÔ-#¿ŠF¹‹qVçw8Àý(N@‘|¥cü)嘣Üŵðà9ãõ«/¥¯—¥ÝÒûŸ7OÒ§‡;Øñ晜vÅZlàtÇzå¾Ã}ÿ "ê eX4Œ£¦zZb½ µ5Vòñ2Û³PÅå·Š¤ËV óuÿÙÉêF[ºg§½0î£ÕÅÕ·ïíÝÃ9UØ@SU#Ú××lWQþ_¿×ŸÖ«Õ‘KImm*t1¡Á<õªö÷×Éysæiîónþà8  ³ÔÃ%8ÍW¶–ïù¥ûßÝùTU_íˆ@;Ẋ3œÈÑžzw¨¬õk ’ù“€Fùzäði©$q´oæ"˜ÎC‚Ÿ{Þ³cÓíe¾»2[Bî¬W ÛWÖê $Ûñ<£°nÙ¨¬J¹¹d‘§$>ìç§À¯ý‰bÒŠ6Oã2#cýÚ¥¦Cæ,íÒ¤^nÁ³¹­Ô*®w.Õq•]½ eøz3ƒyk»s’ì[P"soåÜoœnp½T³¹½†D²IcÉݵ°Ïžõ¬ì°AµòÀ)È뿊ŽÞ6†Ò%‰CJTsØ P½¼%)­%Êó·•ÚHûÓÆ»`™@쪼å×½…Zhñ³û¬ÊGÍ’ß6M9à?wÊWçt{”a(¤ïou%£ZË7™¹@<Çó«á–?–%,>öìýïjÏšÒÉ.-Ñâ‰UË7lôúS§Ò#.Í ž6nTÇ)YÆ:fF‹5쮣dªª íû£¸©æ‘`‹„& àõ¬Ë;)àûCG{&ZO”IÉfÇsOíhau‘à™6òà`a@àÚštl| »Û=)×/‰­Ô.ã»…ÝÛj¬—Åg´Ø²¯ð¬g8¦I¨BÓBÿ¼TU'æ_½šº±,›ÖEʼûÙª±Eo0•š*X‚ËÛéS[][Ê’í–<AŠ,ãu¶EQŸFÝž3Ö€+˥ijÄöÌñn=ùWß)[ˆŸO•Ïñ¦¬«q òüqHÿ7›õýq@#ûlsȾZº1å—Ê™{¨yNg_˜n=«Rу[¬‡Œþ•Rê&mJ .õÉ}¹  j¶‘<ÀÛHäƒÆjD¸}ÍÍ,ª‘Àí"©-Û\ØÄþ[¬Åž(iŠEµQw3”âPxÛ"÷¬û­=šâ7‚i¨ R,7«Hó)Àþ!@ð¶ê[ïm÷ª·w¶±É µÂlß“†û¸Ò£]P&’i= 7AéNM¢Ý&ÛtÚQ·9ôªÙ5«ãÌ210T?5UM`=Ì’Ckq*ª^xýki-ãLlDR¿tªôÛhÂË;/F~Ÿ€  Óª1c˜AwIüªGÖ$\Ç´jY¾gÎTôõ­ý£j‚Í[/ç%ÿ3šÍ1kN?ãæÚ6ôTÎ}ê+KFKuc©²#üØXùÉ5»!ÚŒ}2Øm·ˆz(¤<ºMÏ–Ìú¥Ép¼ã€ièðGæ]Ýà¨ùCýÚÙ»8µ—ýÓRŽ —A†w+=Á*¹ù˜þ”äðí“¢™„ŽÄs—éùV­áÿE“ÝqRôÏjZ-¥ž›4°+#F¹S¿95f ÔC ¼{Ù¶îñSx…‚é2Œýâ«ù°«à/–àŒP{é6{Ø‚…PF?ŽÓH³kXšXRG*3¸V„ÍPHÃj€¤ÒÛ²­¼cpû£½TþȲEÄp"¼ e®™lð+InÝã­_’hÕ—QëQZMµˆ‰Gz‹û.ÑFÔ†5OM¢ ¶Òmq#yk¸±ä€kGÍ}:†ÎhÚ ‡S–nþæ€!]&Ê?õpF¹ëòõªöú] ½‘šnÃ#§µ|Åþð¨!19—%[çþ”ÒíLŽÂ$8ÆÞ*›h–m©|Ñ‚,ãß=khlQ…ÀªqL­«L™$KüÍBúŸ#n’sÐg§éP`Ø¥ÒùQlVS¸ô­œZ#íŸá4œ4 û¨Ã¿ÞëU/¼;hѺ@K(Ú޵ÐT_u«¯ó  ”ðÍœ|E-Â{ïáQÜxv(ã–X®nUöž7 7é] Eqþ¡¾”ý‚ͯöÒŽÁN1HºÌY1j·!±ÎîEnÐzæmt­I¢v£ ,ÃîûÕ§²Ö”®ÍN6 pûµô$sÖ§:Ƭ‡÷ºCÚTœVæÕþÑ-˜EŒþ5>Ñ· å.¼@Þd>u„ñâMj²¾(´èñ\ \`•o­lÜÆ¯ukŸáf8ÿ€š• ³¹½2½(ãÄZlö»w:–+ò2tæ¯&µ§Hß-ä^f8fàb¤½Ómd‰TÛÃ’ë“° óJú6žë´ÚE³Ø`Ð%¿³{IŒWQÚÙ"NAö©í~Ë Œ*°ù¸¬»ï Øý–GŠI’¡Zá{xÿÔÏ29{#ŠÛlqÆOn>ç[Nÿ(Ûø¶‚çžüV4º ÌJðj3,~n=©-ôýj8!ò¯”  ¢7Ó§JènÂqµ·rÕ^Árå†wLä§oÎk0ÂCnmæö8ù•Eiy«Ãoìõ%˜unI ‡߯[olÕ;¤LÊØæ$6îIôçéYÿÛ’FgÓn#Q÷vÓ,üChˆÆe™YØ’»r“@Ç‘–\ú§õª¶pEågËBä±f+Ô&«G¯iïÀ¸ÚØgB7 ’Âò×ì–èn"jí_3œã½ m/O˜ öñ…'*ÆcéT,´háî"c+aRN#Á8þU¶$ “ßœU]?þöèøJmž¡i4’”–1½þU<ÔÐÍioåL|”$|ËÛ·zŠ < hö\ιQ’¬>jšìÆöç ã€AûÇÒ­}ÑÐqíÐzPJÚ]%ñ1Þ¶BrιêjI[TŠ6%`õ'¦Ú·72œýÐíëO¹ÿTF:ñøÐt7“Ç#Ú̪GEÁúæ›m©G&¢~vxÞ+\}Ú¥gÉt족…éÒ€,5Ä ¥¼ås޹©`B$ c§«^ØÛIÌKŸQIý˜¨¿ºšTÿPè¥gÂ1 |Àì%Ûv=zV|6÷©,….ýáN¹–ú8Îè‘¿Ý4ÓUf¸&;æH^îGö+sòº™2r Ž['ÓšH`‰%ŸlHáYBõ8ÿëÓ+^Û©Ûænlg¥¿•W¶¿Vˆ‚wí´ˆúò}já8ëÔto_j‚в!ìPoç§׳¬2ºÙIò÷™GoÆ™m%ð‚%ò`EØ>vž~˜©ï²-&é»aÚØ©mQ…ãû¼qï@÷­¨‹)[}º°*ôúæ¥Ho6ŒÞ®ÒÒ± ]@ÿ£*îåB|ØÞsÒ¬ç‚ï±Ïé@·¶×_eÚ×óÜ¡°ŠÉíÅMöê×—d7ûxÛO¼ñîI•vtÇ<ÕS÷†ß½@wÚzy¦âå›zŽf??5cû:ß’LÇ?x4íò~´ûÞZÝ9a¸ù0*ÎO¡ÈíýêÀ×l ŽÒŽ2ÌÓ")i ÝšÒM.ÈsödÏ9ÅSñS%„fM¡®W'?v¶3Ђ>ï?z€2u-6Átù?Ñã_—änû»U˜´Ë5UÍœfÐmâUÀ²~FÖeY>|lqJ…A»á;¾õg^éú|vŸ³D#ÚNBóš’ßOµDZÖ4&>ïíMña9ÊîÙ†º ±ÁùknäÐi4ûŸ²Ã³’ß-WÓtûF±€½´%°J½G½h\9X]—i”)!wqPi…F—×ÊùmÝ(þϲ˲Ó÷þZ©§é–-oÿñ”ÞJ7sÍj±üÇÝëUtÖÍ¢¶ybK ÙÛÍ'ömžíßf~1·µciÖ’êÚ’íýÊ¡·Ÿ”÷®°¸ìÙëXž;¯uI;™ÈÙšÐþζÜ×z+|ß­V]>íÃÍþ¬nfù?ZÓcŽ9çø¿»U¡ùµ+ƒ‚6¢ƒÇßë@ þÎ`A=ÈÆ>8óT¯¬q=«-ÍÞÓ& oÏã[=‡q…Çݪ7`¶¡f<Õ$ï+ÆÜt býŠUVU¿¸ÜÙÚß)ÇéUµ {Å·5 8e ”^yíÅjü»÷9Ï­TÔq¶$oóWËë@ ßEò”?wtT×]Qb8žÙ¥;Ldgõ«àóïüC=*9N ˜íÛÙ  í>ME¬á`ÖÎŒ¹-ÈÅXóõ 6°6:b_½úT–>ß+ÝŒ¥N÷~vœ}Úç4KÛÏ>öQbÏæOóaòJØþД>×ÓîsŒðçT|1¿É¼f*Xܶ㎵±òíá8ÛÏ9  ¨µˆìÌÖ×*ªŠbk óJ±76»mÑei0ÊŽ0j×öL …"–å3ük1ãÚ¯8¶qê1RÖ¥c*[ïKû¥@ê¥[æÏÌYû.¢œ&§¹Ýæ˜WlE4±ŒF£ÐV-ójñZH|ËY ?ÊA_Ö¬%Ϊ¹ó,b}½Ö\géH 2ª(¶‡(Æ;qTdÕ'ŠóiÓ¨#øpÔÛMZ·$ŽtdEÎbcÛÚ˜…zûÕ[KX…¤jU\umÊìÓ¯`ËŸµ ãß/ó©,n ’Ö!¨Ç`à5Aw¥Ù´“mB¸]½ª¨ðí‹D€ÄÛŠüÌ¡Åk\óm(ÿdÔ¢ÕLJ!Ž^+‰ã F7nü©¶úN©Q5¾£†Û•Fή†ìíµ•½ÿ*‘FJb9PkPØH·2E4 Øf\zôüêhµVÞ$I´ñ(¤sëÞµõÄßizt­_عcŽ[© g+uâÈ‹=¤ð’êd>˜9â¯Çâ-2Eùæet«§Þ÷­¸VK‹MÜ…rvž‡å4M§ÛKþ²Þ9ä´c¥ *ǨÚIs•ºˆO™·cåÏó«ŠêUv¶åtxÅdËáë'›ûUUv„r9æ¡ ÂŽM½ÍÄGÝÁÿ `jZßÝ?üÎ_oðàqRÎþ\Àd¢’«»¨Ç|×9g¥ê±Âk´b¨ù¥:éõø­]dòæ¸,¸$çµ : Tòí"RÛö ÜÛ~ðǵ$œ^D8Ê+¸Ú¾µŠ5«ÛpƔ˷¡P@QD^#´k­Ò,ÈŠ¤yÉ>´ÐòàŒŽ˜#;½ê„VÓBæhcbìÛÛn2sÚ“ûcO‘‹¤às¸`‘è*ÅŒŠm¢ Ë£![   zM·™“¾'g£p•7Ønc‚úOUY?Y”nº€G'ïëS±ùOøõ4‘ký§ÈÃÊKžø/N¸¾ºM«5“˜e9ü«FÓþ=Õ|·ÿZ‰FfˆzýVþÔƒ¼D{î_»F“u‹,Šê7Èx=jäÀyg#?Z«¦Ú@ö*^%%É$â€-LêÅ`rÕ6x¬Ùt¸ Ây{£ê~SN{9ãCå]?ѹ  tcêÔ“òU}Z©[B8—ý[ŠF»nIlßðh¡Üª¤’‹Ÿ»U"¼·çi.#VóVíÓúS†k¿-˜ýÄŒ[>üÒYÛÀ!Ž\’ÊÛ~íPˆn5+Uµc³S‹‡è¯Ï–ª–—%Ô` ˜üjÍÎ<¦q¯äš”c’TýÒZÌ»¹¸’ÆMŽË·Ì`9Ýßš”I¨?Ñ Vïº_¿ÇÒ§¹h\æA¸c®Ø²1•ó[ úѨ‘å ß…2®[#ä«~œý?Ú  Ëûd°•‹H«³‡ó›ŸÖ¥µ²mb_Þ+„A3bŸª1|Ýò¸##ä÷«ŒD‹»< ?­WšÒ/)Ï›0\¿œ~ZƒO±U±ˆo˜¹À”üÕrí¶ÚÊÛ3òŸ“Ö‹a¶Ú%ÝŸ—†ô šÉqþ¶|zyŸv±<9gæ­Ü¾|ÈÆv•¾õt­Ðžž¿íV/…×þ%¬Äd4Ì@ÇÝ  rر‰ÇÚ.6‘÷2*¥„Æêb/gW¶Ž?1[_Åþ×÷±Um6oº`¤!“‘Žs@ÈþÇr7mÔ%ÿk1¯?¥gÝYÞëD:ƒm(|¾A÷­ãÔg¯ðÕ2s«®Ã’±0xéŒP_gÔÃd_DÏŽΪ_E©þé~ׯ“—ÚASùÖßaóaxÃg­Tº$Ý[ûîøçŽ´þÕ\gìͷБ¿ŠŠò]Im%&Ö>è“î{ô­^ýsè»UïãÒ~?„îãïq@-f¿KX”Ùî‘P~ð8Á§M}2Dìöùx;€Á?ί U…L £Ò‰Ë,NW@§œ æü5z°Øº˜';¥fRªH5¯ý­nβ«q¸Ûåý* h±7÷‹1>œÖ¿ùúÐŽ­dnîóp]²7¸éW×S±h™ÅÄa9ܹæ›c e®‰J4Ü&Ñòð*ÃYÛ»ÐDdÇR¨ªÍ ë#8ƒ1àöÍ^¥ŽÖŽŸ»Åd &ÂKûôtl^A# “Vh¹òı“Ù%#uMpÒíâ$7÷¾SÅXãg+òàÇNkm$­ýªÇwr+ónòð*ÚØ^¬…“Rrø·Ä0EO¨nýÊŒ|ÕÇ\cuZÈ àüœå³ÐÖ-ÜZ’­¤bêS(Úì¤6y<Õ–}][& i0cÆ5<ý‘þRFॿȫ$cþøãîñX·×Zš¢$– \È ²>GPqúTÇUuÌÓî’3펇ژo[mà ïç§ËR»aEƒýñŠÇ½Ö­ÚÖdu–'ÁUFCóÕÈõ[dQsO+»œP·ÑÄlŸ|J@BUJýÓƒQ¦›dbí¡, 1Ž(¼¸‚K“¨Ë´«{â®gq÷T¾1H ­CO·ŽÈùK,{J²CóJ°Ö2 ˆï®·ÜîÛÇ|ÓµA˜âM»™¦M·!9ýz´vís¨s¸ò}©}£©Ù¨,‰Â>ôÀþµgÎÕâB^ i°q„b¤ûÔÚÊF§œÊ£g¨Þ9ý*Öìð_ûØíž”…«_Ü-Å”SY8>h“¶ýØíõ«ƒ\´Ú­"Ϻ^&梼%µ5~ïçuçœãÿ¯ZX$ŒŒ“ô!)IuK¯b uXòØçþ½h««®ä`ÃÔÊ’ÒÒãR”Ën…<°ròX¶3úS›H±i ?Cå9]yã~™%ÿ{ ©JòÓåHÝ£¿»M²2œá·vÍMpº•½¬¬/b•ÑKñcåü i[ǼgÕsLºc  âE##§5M&Õ!„k›p>YH'ô¨gÕeŽtYìgM‡,W:P¾ÅýsÖ©µŒÜJò"¾v™ǵ4kyÄŽñ0ê$–¥³¼¶œ¹ŽxÛ-Ù¨æ‰bÐÈVÚ0øùq‘м7iƒ°ÎŸî¿ZÛ”ü¿R>€9ƒ¤ßGvþF¡&UGÌàþT³ÿnÛÄä˪'Ž+¡™d?AIrªÑ`hSP¶Vm9¶ÁZrx‚ÜÜ6)#P;Šè6-Vû,RO#:«tŠ£>±c%»íœŒcš¿`ñ‹8”2ýÑÞ³õ]*Õ ÊÄŠå‡#ŠSáë`Ÿ»–XÛCP !®:ôZtç5aE¤ÞÇ+ùÍÇ÷¹¢uÖa\ŽUÏ¥o Â(ö¨×›ƒì+'ûSQ„~úÄŸu4Ø5èüÇ3C"~ÔÉ"¢.1ÉROZ­ݤvèx¾è ¥»ñQÜØZ-¬§ÉS•ÇÌw>Õv8/¹+»S•B)˨Ûª²3’à ¨NîsŽL/”•Žcýáå°ÇÓ"¤•IxTd)nƒø~SSaº÷9¤uÄó¨m$,79^˜úûÔ¾uÙ9[!ŽêÒøÔ¦<Þ¨8(¨N=óSì<üÝÎ:ÐL¯|× °' Tù¹ÝíÒ¬ÄÀ¶wÛ)Ç̸cбåÿ¦ãËÀ_Njm¿w“Çë@Uó_(71acùH‰»úóíV~ÏxNMàø±ò©ãEûdí“’ª?ZŸhùÙé@ßb¯×7²a#ùqü¹5gìS““>îä*|ߥYDO¶LØäªƒúÔÛWŽ:t Y¬Œž#HŒ³¶Èƒùr•²,þ.w{róúT›_Äw§¬hµ¯µpJø±Íõªù÷ 2ͳxùÚ«Ÿaÿ§«÷÷ʧeC¨#mü³ÏåV6®1ŠÇ½°FxËps'1ùŸ{Þ¬ÿ?W?]ÿv­LÜBJÙ8>œT»WÀÁ  MRÀý”µ\Ì£iaóóV—O!T}ªçhÆ+òþ•fñQ„[”H»}ªÆÑÏzÐ6¡c*ÙJ~Ý>võ;~on•$:|«¨¼œ&>æÕÿ »{5±VPWŽ*p£9Ç4—-•ÖÒ´%ÜÚLkÇéYÞµ¹:Z¼WEÜ–R™®‚åUmeãiÍTÑ"EÒmp1òfû5àPâìãnbçñæ©ØÁ© .\Âd2r3ç[»@ÉõªÖ1ªÀUKcÌcœûÐBšF =¹Cœ±VÈýj¡:¯ö¸É·ÊG† 8­ý¿6J«X½·’JŒgøhXK©†$Û@ý>Q/Ýý*Äú—Ûm‡ÙpÜw‰Ü=+woN~¼uªÒCºþ2v”T;W  ûUÖ>m:M¿Ä¡ŸçPj“-£ï²˜7ðt8úàÖ¶ÖëÆú­¨FZÜ +°ÝϽF/€äÁ8n7üÅV¿ÔíÅŒ ´Ñ©O–O-‡?•jí'¯ðôç­QÖ˜¦‘tå f3òúP~ƒm¼ 2©?^kOíö™ÇÚb$ýߘqPè‘¤Û £w—ÄU‰míš7ß~_;N´WJ¹‚D¸häBÞsy‡Ö¯ #(¿8òÛNîµ—§i–Oj¦Kh˜ùŒSŽ£'gû&ÉIÙ ~ö×#mIƒts—T¦zjÎ=<á±Ò±-4•û]ÙK›”*ê‰>ðÚ*ÉÓ§XˆPPõVPyÍXù ! "3ŽOÝ«<| ð3òóְ;¨5~/"yR/—r`'Ú­ƒ«&î-¦ÉìÅvÒÌù7–Ün;²Ë‘òü§š²ì~oïÔV$·z’ßÛî±åU‹mpwŽ*ÀÔ¥S‰të„N6m\ÿZ`Y¼M²ž#i‡¨;¹5g'w?û õµ.±Ú-L±K†ýⲟ”`óúÕÈõkm‚äÜgÚ€¨ ’ßg ¹×@8ù‡ù-m|ùg;²œæ«Oyk4P–3ÊŸ(ëÙ«û†þ ™@åwzÐV£¥Ù2öuIw(P‡€§ÿbÂî..cnv²ÉÂûU«®|•V8iT†ëß8ý*”•Â÷vÿzÐæ<~J¦¡7”órrwzþ•gËÖ#|­Í´Î l¸ã=jÍË·ÚPIJîÆœU±œ ÀÁÝ×ubO6ª³[¬–qHÞfCÆãçêqÍZò(Q&ŸpŠy@¼óÏ\šl5í Àæt\cÿ:±×pÝŒðìîP;6¥nÚôRÉ,ì„«Sû¶?…j®§§Ê­‹˜v•—?3•U1/‰®7Äv¤ ˜*îzÖŒ¶°JäË2H:–OáÍCm ’þåÃ+2„FÚÜÉÏëVN<¾ì€sÀ;Æ+ÛF±f’' ²|ž\„oG¿®jYô¶…­¯®ctRWqÞª¾œý)vĶO»“–ã '4—¿5¡Uc†Àçx<Zϵ¶Ôඇì÷ÉPÈ’& qÒq6«Á-¤SeÁ ôä|¼ý([ñ¸wÇðúT'›¸ÆÜ…BG=¸ÿëÕ/íGŒ3M¹N7Fª¹Ï×Èõ‹u#‚ (ûêA<œå@ŽªPî”ðß.w ¥…œ°æKx²Kdã É©–òÙÔ˜f‰Š®x?uj[n-¢ïòŒs×Þ€(M¥B/!凜a\þu)¶¼]ûÓ 95aðnO¡ÉÇ_óš˜÷çØàô  ßÚj®Ì-ä%¹+I=åÒ¼k-“rßÀÁ«Fû¡ï“QÉÍÔCÐ@6©ß$ѽ¤´Ôm$.DéËq“мàm9RÞÒÞK|¼(w~íG}2HÐF®§tƒ¡«ùâ±n4ËfÔ¡XÔÇÁ'i«2iò¢“ ä«ìÜÐè9}Z’^]½gÛǨGÛ,n?Ú}¦õnPIlýÓ@Œ8ªðÁ«NO¥Bú’ªþò)ê´û[Ûv‰~p½kÝÈ‘Ä7:®YG'Þ‘¯íàÜÅŸ@â¡}>Уö»‚lã?tq/ÿZµ· Û{Õ{wS%ÃÀ|Ê€ û]ðûÚyÿ€È*í ·Ú|ü'lÿZÖÜ8ç¯J„ow?­@5üV— ÿª÷º¤*ˆ9†é¬GÖµr*½Þ”§¼‚€"¥§y ÿ¼¤U-oRµ:MÊ¥Âod*îy­œÚ²m¬§õ©Â€sï@ UomI›™HóÍYkN3óéé&yM’“ŽõoÉ-©³îÉX¾\òdöüªÁ’·Þõ&€0N¬¢ô‹Kˆq NÞ„íäcéVÆ·bÜÉ+';v:ã#=y«*ûFV+œD«€{jã Ãw«2ƒ‘éH ].â95BQsýÝ­ê¾Õ®¬»aq˜Ào¿Å`hö67OxæÙ|ò"Vc«Dèö|ù"H8xæa°ûs@,²Ñ9ZI62ÍŒR^²‹96€2ÅårÜÕ->_°Âc¾¹Œ8 ¾lç=*;ÈuXáÛöø¥êŽY6íB‘ß Ö©™µd?½±‚až‘ÉŽ½ÍWmMÒé>Õcs>aQœž:cëúÐÖA΂y;»úT¨y§m 6à#;~Qþ&ª rɈY$h\ðVE#g¿"¤²¼¶‘I¶ùy'<*/ì­%÷[Å“’Ÿ. jgö5¢ó›rÑÈyö«s¾åEÊœº† ÷Èâ¦Ç|`õv€2³î£¹>N¡"ª/Ô6Õôý*F¬+÷ œŒ©>õr ²íŽÏ­>_¸Ø?­TŽòò(S̰sòŽc`j%ÕàûYó£š/ñ%kô @4Òœz µ;7‰Š\&qК±nËötùj ëX$„†… Ùe*þCŽŸ.9©ÏrýåÇÞ¦m­ä„ÈVÖvfv#;FîÞµa®n ¶-o|Ê2 >Óþ=Æ[‰;¾§¥O“’‹ºç·­ (ZËvÆB-6ã÷¥ãÓÒ¥Ýs´Ÿ"=‡¨ÞsŸÊŸkþ gî³>¹©[8$ãxúb€(Úý°Å°†%ˆsŸZ‹Ý§FÞé´þu-¨ÿEˆ0Ê8Çz”ƒ×ÝÛŸl·Ì®|Ø–o›a=þ´ù–ûÊr¯8?'—÷¿ZžÓþ=Ô‘NqŽœÑtJÛÈwm`§çÅaøz;¶´‘ÒX‘F;¶dƒùÖ³G}Úxþï—÷¿Z­áµ+¤DO äíükOñçûÞ”—oÿÚg&⻀'Ëû¼}jÏ•}ÇúT_+ïþ´ûo½;¶~_Z±þGû4”±ßA¿}Œ/îóõ©ÌzAs?¾cý:Ô°çí³ô ?Þ«¾ïËýÜt  ‰?´¾ÙËnHV;9æ­¨ç·9Îä©97àn„{õ`ô<|½×h6c¨yІŽ†äî??6ûì/ú<;N>MÇ+úTÒçí0ŒŽä{qSwÏâ÷  -nkÕÓ¥I­£å@2+ñÉ«pOx¶ªEˆ•ó>cLñ³B®6´ˆýô+MsÓx…3ç¼¼Dù´ö<»dé¶·×R°M•UÝóÒ¯Ü[É»ƒ“éNNãcÞ´˜F¬îDgø° ÏÒªÛjêlÛ\ù›ÉòÂu­œ÷ïýßJ¯gÌOƒÕÛçühWûjۺ͌òÆ#„¨¢Ö¬Óæ||ª2ÈF@Áùxþ!޵Z8bk‰ ‰Imùzq@ _Odéÿ àæ£¸½µ–òÑVâ&“y+†ã«¿g„¹&̘ŽÞÕw§Ù½Í¬~Db,³ns@Iq oòåVá¾oºk+ÄòÄ£bœåÐ/?{š¸t»"á¾Ì¡†p£ø«Ä–0An+$²ªg?pb€:(ˆ#89ÚQÚ™vî¶³m#~Ö!±ÅRMGq:8Ææ˜UmCNhìe)}:÷î±Ï9  ‹wÿGŒÿ ¯ÍŸ¥I¿qÏÝ÷¬˜ìõ‰âa™BªTm#Þœñê¨O—qªs–dÆÊ¹a1{PÅ~bí¹Aû¿1«[¾l{u®{M“V[5d·ÆI,[J²/oUSÌÓaÆÐ’A÷¤ëI•ÍÃò›·‘ìZÜ7mÏ'µ`iú”»çó,n »ÉeQ[½¶Ì·œŠzHÑué@¡ek©ðAÚOëSñXvÚ¥Ú.‹J¹VS–àsWÖúÖF;˜]ðJ€ôö†)/IhÕ±qïN’ÆÒO¿mÿ€Š­ˆÚ…ÑIr6¨fÝ÷5t±ëίz€3›I³ûrlŒÇò1;¯qéSÿgþ®êå?í¦ïçBÈÿÚ’) þèúõüªÏ™Ó§|çîÐkÙÞý¹vj òÆpZ5=ÅYêJ?×Û¿Ö2?­=dÍôÙSòF¸ÿk¯J³¸dZÊŽ]Ao§&Ú)0Š¿,˜õõõ/ö…Ê­Ógþ™•ëS[H5Ó'èZ  {}^ØÝ\|Ø~êâHÈÇýz¸š”ƒäº„ûoû\¸oY Ò’ê w…Úh#p?2ƒ@|:ÊörÊ?ŽwoÖ´¦ å6åGÌx¬MJ´“I·–H¿zà’ÊåO_j±{¦ì´•¡¼»Bá|ÒÃõ  !Td|zú Šê=ÒÛÇnÿº{àgúT?eÔ£ûš‚¸ô’ý¨%}Uo VŠÚlo‘Š{wúП–{à’0Ç$TJ­öÒvýÔsêúÕ ß]/úí6qîŒýj8u(¼ù̱Ï_š&ôöúÐÉ#VŒ¬‰½~ë ïªé–2Zƒ%´Yaó61ŒóÇçV­`U±w@è̓úÕ›vF62‘´t4‘6n&‰`i`;º$8<ÿ*“û:ê?õ:ŒÃ'8‘we¿Â´î*Êiì †äŒZÉ·]QUÛÌ·“.sA$qÒž÷¡Õd±Ï97Ò¯Û§îAÏ^G)ØÄ€qŽ´QµDýu½Ä~æ<ÿ*ež§fþaóÕK7Fâ´[îš­ooÛ.ø•·dò=èfš)<°’+e‡CVü¦³¦ÒìÞxÀˆ!ä’¼R\i« b¸0?¿‘@iC0Èÿß‘O72 ÷¬í:Úõ,£1Ü/#;Yiåõ¸PÑG&ðœP£t¨ a>¦ªË{2!ó-$îóE¾¡‰wîOªššâätV@yô¢K(}À>œTk{o%Â…•xe¥B¼0üèäl<ù› Rnùýh{˜cÀiã]Ò}ï­C •¾é …ƒq¸ŸŠ”ÁlªØŠ0§©¡ô¦"µ½õ˜…‰ž2Ûrƒ’y©Zþ  ìËÃ¥Kf»mãàÛ“Æ)Ó°3mùq1÷h­æÛxÀ·¸o”e|¼m§=ë…ÿ[ƒýÖÊüß­[Aµwþûâ›9ÛžÛNÙâ€)[]N ]¶r(Ý—QùsD×bþ†ÇÈ|ßnõy£0(ÏZeÉÿG—o Œ74V/D`-¬CÌxúR¼—Á?ãÞ ¿ÃóŸ—ô«¼ð8Ýü5çýB=ê§oöñlH8Q’Iù…VÕZùtÙKEŒ¯Ýå}ë^1¶4S×/µQ׋.‘rP€vá¸ë@ôU¿]6!@^Ésþ&;3‹|àÚjm9JX[«sòŒqÒ¬sÏ÷»œu  »Q©|à}œÌwàúÔßñ1ÚÇm¾9ÊàüÕbÛý@'î±Ãv¤yzŒ˜ÿ–…€8ãµV¾·Ô– ¿lGMÉ´²òü÷  >]¡Ž1÷é³0HÅ~@­¹q÷«<k,A™-Ÿ8 Ç=j;«N8¤V´‰Ü!"E~  špÛ§Û)Ám€§·ex$ð\ÿ¬ç¥cÚjÅ`…´ù„*¸fVçð©›XUÇ›ksÁÚ»3¼b´Ñþ‹€I]ìCç;þcVHR¿:ü‡&Þ†±ôýZÍm<„ýÒœFjüz›ý˘KŒn$ã4Ë8Q¥¸vŽ6ŸÌ<íþ|š}”¨Ê`cKwÎj=6hšÜí•|³+m;¹?1«¹Ï$glâ–` +«`ô©N¤Ê™’Êå#fÁaÉÝž•=¡F–胈ŒÀ ïÀÍZçp,>n…Aà{Ð5¦³js7˜ŒÒœÆS àdþUv-JÊFùnà2 nfùr=©ÚzâØ·ñnbÎWïÍK-¥³*·…±ÌJW»Ò-6DkrѲ•2»Eµùq“NÕ$hô볖ɉŽxÂñÒ¨Øé6SY#ˆ¶¼ ±‘[ýYô»§Ã™4±4ñ»åïl3nÆO4ÀÔÒn—iÙ ``ŽwT—³7ŠTyk}̚϶°»ŠÝ6jr+ª `PcµA~šªQÚ …ó@ ³\ äþT€ßó:’¬9ÇJ‡ÍC~Ãw1Eó{dÿõªÚõ8¼Û‘“–xäà¯=3ުū*ßJ^Òìb5UM»¾_Vÿ¾¨¡È¨mÿå£yÏøJÏÖžs›1É.„9àS´«ˆÙMa¹•Uú)nþôrþ(嵑]²¸äTM¤Ø7?fE>©òŸÒ’ñÈŽ ¬ÄyŠ0wŒŠ³¼¨å‡Ë÷Ž(‚én\Åus 1‰7<Ó¦‚þ(]’ø>I"ÌU˜df–]Ár Ðb–æP"ÁVùÛgJ¯j1D¡ ‚L÷\æ*3¨J·?½²v¯ð€ßÊ´ƒ©Ÿjdx2È~‚€(ͬZ˜3:6:2V-níšTž6 ÃSïUZ¤»šÎÙÇÍgþ@ek®8Zn ÛläÿtÕXôËc<¥“+PjV,‘(Žêo™€ÚÍ‘@Ð.È#_E¤Ngsè*¯“ü—¿ûËQC5ú4…àW窵_¸ÿViûhGJΞý”ªËo"äúf§¹±_÷†(°I;‰zzS.4ø›“èj[[˜¤.Ë"õ©'u)Á  HÙýÑ“†ãŽzR\ËåÁ+ ªå†z ŠßO¶6Èÿ‹æry¥¸²µ0ñóÇݦ K›h≠Äcå2ÞÝê½Þ¡iöyq2’~VßJÑH"@D‹ôZeÒ-WYAöØwa8á–"qúT7WÉöw")ùùqå}ëR ºûŠ=X:­öÃ÷VÚäŒ}í˜ü*)ï&1dÙ\»ã×ëZ• ÁûƒÕ…VûDû¶‹)öû—?Πº¹ºû3bûºœbµª ¿õ`z°þtWÍ»ÎÑfÁç2 Ön½-Ëi®³Úá €“µt5“âCþ…~t­,R^Çj–yL|ÄÉÏJWžø#î±á~î%þu¤œ(úSf8‰ÏµeZM|-¢"Ëæ#æÌ•7Ÿx2 ‰ÙÛ æ¯[Œ[Çþè§7Ý4gs{ä3‹Þ]¿Œc­YûMÎý¿b—aûÇpÍZ³ÿe>¤ŸÖ§  «{©Yç?c˜o—§ØèbœmPs·Þ¤7ÀE½­çû›:Õ¨ùº—ýÕþµ5sº¥ÔO¨X.d±ùOVšêÇs.ÓÉ+÷©×![Rµõ\Ú=eO©Z£>j…w\)#š²/mËíÆdÆGÒ¤¹Š61†E?7¥J`ˆõ*§%ݱ‚VY“bçÍKk4BÚÒ(Ê¿7^)×–V­o&è#û§øi‘éV^RfÝ8” ±æ)' ¥û®zTV„}§‚íó~5ÑìÆâ±'©V" ´Ò [R‚Iv–=$>´Ò$ ñõ÷ª`í&Ü8®Ñ»ÍKùÕ–êà2ôù³U!Óç[Û·Òüʹ$@Í^wvߟJÂÖ6>·¦!r«¹ŽsߊÑ6w¢4U½û¸ä§&²nã¼>$·Vh„d¯@áÿþõW½¯¬«Ž>íG·SXÛå¶y9ÚÛˆÇéQ]µà–û*•2eö¿^(@g<}þ7uªºŽßìٲ؈§<æ´Î2Æ`©÷v°9úóU5-Cm“ù–× Î•+ÂКdF¹`¿p´J>FÁù°v¶>íRMV×;<ÇF>cÆGáIq©Ø=”Ì&O,«¿ÄMMgmb™A†Qæå~÷$–vÎd†<'ú±jKYSÉ…7¡“gÊ¡ºŒTû—kmlŽrÙû´—g¥YI‘­Ô»Ÿ˜÷*EÑà\yrO.72¹Å[³µ‹(ÝÇßâ¥8F1ýÁøw  › C¹/gDyÅ÷Éëš±ä_¨^«IÆådõ.œÙ¶Ý‘¸’_ ÂòjÏ!xÏËßç`º–û†­ß÷Ÿë~ÿåô«h¾TŒÉd»«œƒ×š“LìªJáFh—n6rx5h66Gý4;¸^;PEŽ£"–šÎ}Æ_Þlù•8«ÚöŠ„¹•0¿yâ#xÅK¦äYnù˜nsØ™FO5-×Ëð¹Ufåáxï@´ÛË_±[Æ.aóü‰»8èjä’¡†VI†Ì6d >CíUá²³k5W‚=Œ0ìÝwp*¦¥¥X¥¬Óý™wcþ@lm°’< ‹”Ûž}j—‰[þ%þ[°Üò"¹Á$cò¥HhTyW×HÈ‘·pWª†¯ox’ÙB·feiG’ŽxXÐF8@¸,aFàK®;ÕK¥-©Ú÷Ósï)ü= ÿ*Œ ]²MßyxÏ+Þ©››¿í+mú"&x£Ž^A=wg€Ù*…ì3î#pÇz†× qvWŸÞ›ƒŸ”eJ«ý¬¡I{kØÔ¶7” †Î6Œf¡³Õ4ÿ‹¤R»³${vzšÐ¹>Î[Ê(¥£W^ŽsU-ô«²‡6ѸÚ[øœúSï/-f±”Cr‡ ¶NKz}*úäôþ„'µcÜhöëy…§Œî-¹Xð¸è*ר®"ÿS¨KÇÝY0À/¿+|×ñ b6t\ƒÇ_ά–2¤‘Ôs÷½¹  ‹UÔü§hå‚uiß_¾:gŠ.®5hÖkDlÈ ´o÷»Œf´lÆ-•½Fï»ØóŠ$ÇÚ¢^ÀO^‹ë@ÿµ çÏ´¸1 ¸)ü)Öº¥™LË-ѾZºzŸÎ’Ñ Õ[9<І[˜&x•&GËvj¹‘ŠÍ›N³–í:p1N}*SåK<_îÈhÕ·>czµW¾ù®-“ÕóPÚYÝ$ c½nyÃ.j[ÿíH”´RRÂ(hô¦A÷3êMV’âê4;í³þëSa¾Ùï‚eãû´eÆé~4écFS¹Aü*šjïq÷¶àÅX’æ+"þt6Ví|¡ÉíPÏ`›Ð#ºóýê½_)pGJk|Ó§ç@ѱ ôÓ.ÔRG.)¢Ú%R1#cûÒŸÖ«ÜZÚùðg,rÇéLEö–5ûÒ(úš«sun$…ZxÁߟ¼*U†%û°ÆÓ¥C3¶[ð»NqÇ9  þÕé*Ÿ¡ª÷7p‰!RÄ’ý”šµ“ÓŒŽ¼UyX›¸?ºsŠÚãô“þý·øUyï#ó _.n[þy7§Ò®åºg‘Ôã­U™›í°}í¤—=èSt¿óÎ_ûöj½ÍàÝù3òãþYš¹Î1ŸÇÖ«ÎÍö˜:òy_OzwÚ¿é„ß÷Ådë· æÍD¯S÷~µµÎ1ŸøgjS2ߨ¨îsòþhà¹8ÿQ/ýóPÝÞm¶ù;-[Ééž½ý*½û³7_§­:;±§î¥éýÚl×bsäËÓ²IëúTw,VÝÎz çÖ€ ´»_²Ç˜¥/÷ JovOûàÓ cäFyû£Š{giçÖ€)Y^ÄÑ3bNXõCëV~׫ß&™fÙ·V퓞=ê}߯J¥ä⟡¬ý®ùê¿ChK<ùÛ¸??•Xùzàm  ö¹·m]?z¹XÏz¾.!?òÕ:Í yÁEÇ“Àük@à ÿ–(}x Í,FX†õÎïZŸzÿxU-mšî0`NÁÅLmmöçÊÇÒŽ¼aöY9v¥O¸£Ú³ïlmÌ%1'ÍèÆ¥[‚²Ì1ßÌ4¸Ç j?øöOΪÍgˆI“¨#®sL³´-£U½»ÝE4ÍU·æêàûúS|«±ÒåOÕ*­šß,·¼-—ô#µjÖ#e¼X¿ì[ÿSZ;ïü²ˆÿÀÿúÕ‹ ×?ð“ÎÍm’±·jèêïàíäj?µH>õ¬£éƒU¦Ôí°+E*ýãÊJ@iÕ{јõe­7ûBÛ»íÿyH¨o/­XD¢xù‘‹Þ€/”SÕAü*¦¡knö’î…ʆ­,±·Ýu?CQ^öW¼P+¥Xí_ôt£ŠŠm"ÛÈ‘PËrCƒZC¥EvvÚÊ}Ðt·ÂÑÞÎ¥åè@¥’ÎýbG}ÝÙ:}1ZQñjlí¶ ÑM02l£Ô’Ö }Óo*r }MJòj*ŽÍe²óÙ>ï¡ÛcÑE,Ͷ'oE&Ú}ıÚD¦Êà guä÷aõ–'gŠávò4Gç•^´]¶°¯¢åN˜í…ÛÑI  >úÖ;HQ®bí,»øØ=*Kë›i4ùü©ã(àŒ‡çwJ¿)öh•‘NGµUÔ4û9!æÚ=ÅÔd.ÞÀ°Ô|Ü€ƒžµOUÏØ%OÊ’1O¾¤ôúÓŽ‹eÏ–’DHÁ1ÈÃúÕ+ÝÕmÖùÀIb¾- 5ت¨£*?t›ˆÈÇzËÔG›­é¨’ôg|ä˜ùJŸìš¼jU/¡“-ÏéT&þÐ:ìEí`•㈲ª>'¯4º@* Ê)\a¹ëT¢!µK¼>ƈï¿î?<Ò˜o.—‰ôË…Þ?xÑ0nqÛ«ZêÐ-ÕÌ× 4Eä ±á@xñ@æå”óü$°òsUl£I,ÍUe—æ“*Fæ'­C&§`ö²ŸµDà)Y=_гdÁmbвFªå_…\phž¥ai*Öñ¬’2£2ã÷|ÓŽj9‡Ïƒ<ŽÜ7÷ºÕ‹žf´F Ëæ`‚ÝòðƬ0wc?uÛgÓdEa:ÞÉåj3®C3ľzsÛŠ–uÕc…ȹ‚O”’Zƒ®[iîXœ6í‡ ˜Ö’ün¶Û·—!TÎ=MU·–ú"_ìô8\®Ù1®{кƒ}¬ -.UBä`oÎO^+K?©õÆZ¢‹›™[“Àô?…Eöûb2Ï÷Ð®ê³ Å¾ÅUž2@Ç )JŽ›F~YÛIþ²Ûþ@ F vÄò­I;m‰µP‡K¶óe(¬œàlr).¬dXñäÃ'cšÑˆm‰GµTƒçÕ%oî ¯£_–xßýäÅTÓä¼\9…_æÁÃP¬ç÷fœjÏžöEÚÚEÉúÔßÚcæ,Ÿï.(EŠ7•ÉE=ºTWvVíýØúS­n¡“{,‹É©&ub 0äÐBÁFÇuÿUxí®VäìŸ â­LñPÁ÷ÜûЦ;t=›*¼ŸñùÂįÜÔ_ÙÈßz{–R~éŒZ‡û2z 4®Q?ŠBwÕÑÞ¼|ÃîÝj›\F5™Pl÷™»Nþγ˜=süJ‚;_íýÄ[£A±}}Í -›ËeÚâ!Ÿ»óUFÔ-~Þ?Ò#ùïç¯Ò®ýž­û¤Úß{Š!ûE¾EÞ‘¼v þгã÷éŽßìýj›j6‡SI÷c;ŽÓóý+Sdxom?{޵YQN¤ÙQ¹å;z Oí\}òG²—ëU_R¶mF ä)ËygçúV®ÕÃaxþ.:Õ]ªuÊŒ¬/v€ûB߉0{yg嬋ÝB 5«"°‰m‡œ×C޼}xëYª·‰m×o *1Óš¹ý¡nGI0‡Ë5SPÔ­ü´]Í’Ã °àsZØçý®çRñU„+·ä21@ ý¡m¼ÃÔl95 þ£l–lK …ZU(¤ÅCqo—#yQ–ÛÎEEe{[Å™£ó 窵Aµ˜L›GÞ;ºTXÚýŽ40¡M£’)ïcjNï³Ç¼(–7:» i“å;¾õZóÿÏ÷sÒ³ltË?)Ï’§s¶Ù«Ù–¸GŒcæïP;GWñ Þ%ÎØÔg=+_=ú{z×;§iöïª^ƒ *)PÕ:dg¤Óïç ¼ñ@dzí”óò’¼}ÚµÎÚõ¬ì¿ø™–K™ÔlÃüÜŸ¥[ûŠ“ãøy=Ñ.>éaŸÎ¦ïÏ^ÃÖ²nlî±ús—Ü>]£jÈ‚ðp.Ã~fAÅ,Nq ž¼síE¸Ä€z(ù½j…ê_‹9±,]?»÷ªH…òÃ+ r1@Ž6ž>^ã^×—ÔÈqL2_ƒþ¢&|v~*­ÍØËÚ¥Û%XqÍ5sé×ø¹¬]? â òðf¯Ùùíf_LwVF“yÔïåxdRî>]™ÛŠè÷¼sþíW“wÛcíb?J`Ôm¿ç¦ՔЮº…œ—ø[…ÛåœÝóH "Aì0>õU¼†%€<(À¿x57tuÏe Ö¢™º·]Ùù‰ú|´¿a³ j€û/J‚òÂÜ¢ªù‰ó¯ÝsëWÇSëüGÖ ¸?ê}Ó"ãùÐ~ȸܷ3¨ÿüjë[Ÿ³H©|ÜŽŒ¢¯ýz÷_Oz‚ïýV:’Ê7À¨‚=E@Äð?Õþµ äš‚Ù˘!”Œ«Ÿð«ß.ßD?žj+Ãû¢ ùøAìZ€ÕÈA¾ÅÇû¬ G{¶Îmöó§ÈG)ŸåW¹èóü^žÕ Û·|pË‚=ñ@ Pµ Ë³â%ÝÔ g.Éã?!è¬n8+…/éíU/à‚X°ðFÁ™@lïPÐFуQ\ ÞRúÈ?N¥Vû¦ˆ2ßÜ%qùS&³O56]\¦ÆÉ;óŽ­hÕk£þ‘j¿ôПüuª/³Ý¹¨1=·Æ§ùbªMý¨/àPÖ²®Ã†_Aïë@™ ßâƒýÈ2MIçêJ>{8_ýÉ¿ÄVm…ôƒSÔ%’Êã$¢€>Ü è*½Ÿ)#zWý?¥W:½¢Þ™aÿ®‘2ÿJM6þÍíS1n9b»Æy9  uh$µ“Ì‚7$`£­4é~û,kž»xþU-ÛŽ0¤Ò§ó«•.“]!Iîc!ee$öõÍ<é÷I'S—€$Eoð« æìî§ó?ýj‘¸S@¶vúœqKm2–mÛÁùÆIü(¸“PÝKb¬†öŽN[ñÓ«iÿ±UÏçCóÍÞÜUk[?2fkh‹ïÛ· :þ›×í+»·ÊÕU5Í8^ÊÞîÙG;[“W¾ÃhÉ´[E³¶:† su;}ž=à×ÿ­@ü$güü ŽŸ+V\zÅ—ü$/reýɇfí§®koìV›Jµ´e_—šÌ±³¶}zó÷Š»P¿øH4Ïùù>SUç×töžYÁù¾cƒ€+Kû:ËæÿF‹ï|µZ]6ÌÝ¿gŒÊñÖ€kºaù~Ô»¯y­Ø2&Û”fÞ8¶jßö}‰mßcNx'U{"Ã1 ·@¥¾õXÆÚò.züÔËRÉ­d"ê>aÍ8èÚy`ßeLŽÕZïCÓÖÛnnÿÝ  ±_Z“÷ñô‡!¸…ѶL§ïT?áÓ™TyÛß=i’øOUv0 >è4vÂhšÔ0a‚IúóV<Äþðöö¬K Ú5¢Ò#;ƒSŸÃv£ “LzáºÐº;3^ê]Ky¸ÏáZ¥—o_’¹m3GY–l^Íd!B¶ úնЮÕSŸ|µ5Qó¨È¹ù‚ ö«YÿëûW3“¨‹Ùvj-€\õ>Õ0°×#VùXö ¿z€6n>ôC?Ä>oZ›·N?»\ÄðëË%¸ócvÝ t©Öo,­û˜Ö€6o?ãÝ¿½ü>Õ0éÿ¡W/w¬ý‰l”)nH<õ©Îµ¨ÆÈ²irgmn¿¥t:ü½­CgÿàûŸ—ñ¬Sâ)™§Î0:c¥6×Ä–ñÚÆ²C2¾9mœPD3ØúVF„­öA‰÷äoü$šqÊ—eR9 SÐõk…ËI0FyY”7ÑíBª†ª-¼O¨ÈÍŽ0=M95K'Á[˜ŽïöǽÔy8YÐnÏ^´€”éÖ„ N‹*œÚ]©½j¼`+ÚÄzV˜’6Lîjˆ±7ãî—œ ûÓìí¹Ùu:ŸàóU®m.üû}—ÌNîw(ùx­|õÁàõlô¨&ÿ¸xà?^?úô€¬#ÕœKàp̘ÝP\I©àÚ¬ëò«`Žõ®{tÿdc¥A9t>»þoo”Ó»º0{Þݶ@EAq¨þæ=Ö÷4‹†+œüÙÅjzp:ïTröüpÏÂãîði_ûRÓ;\Hƒû­ ZlÚ•›*ÿ¤G¿r7cÕ¡»$)|çÚ©Ýà u1+/˜»sÎî(ÄsDê¡&R¼ÁÝQÝsäŽÍ*áq÷qÏô¦6›fÇ-l™EûœU+.ÜK×–0ù…]‡Eë@¹Ú¤¶8¼nGnÔÆb&0x¨ÏÞãYçN»Œ?‘¨Í¼«V!²=óQ5U¿/"”¬d†tÇR8ãé@ÜrÝ˜ŽžÕLlmHpUD\ Élÿìµ[ÎÕR4/enêÍ÷QŠÙÎy¨#Ô®£»¹’}:Q…EÆÁ¶`ŸÖ€6w|­–Áèønâ³tBÆ}B]Å”Ü2cœfœÚ¼ Ÿ¿‚î1Œ’w{Õ-Q³ŽÕÌ“Ç+;ùœdJÜšS3`ìRÏÁÆ9¨`¶„ÚE¶Ð»*¨Ú@¾ÿ­G&©fªwÊPú:•þb¦µ¸áAÈß(èÔ—Dýƒm9ùOÍ#Z[H’Ú{ü¢€%Èk‘ÏE4· ¶>Õžšu£NûH›„ŠmÞŸ*ňï§ä†!¨R!¶$Š)‹ÍÉ>‹U¼Ö‰#j8:1÷  wݤglªßQR£]$`㱩§è©©»PòG­Cj†bWs9ÉÇQQ›{ͼß7ü5¨¬ín Í}/$ž˜‹Å0leäŸùjÞ¿ZÐ8¾j£f‰å±,q¸’IíéNžÂ ŸÞtÿž­þ5¾Ÿnm¶¿%¿¿Æ€4z…>­Uí¢_Þ—?Çýê”ÙÀ§þú5BÒÊ FYX“Ë ÐhÔò˜úf²´ØÂ_ÞÈOÞ`ƒVÞÆ²Ê¤qžŒÖ~—g ‹ÙråK0qâ€7ÜçwJ«¹>Ù¸3”ó‚EÂ.0ØQÏÎj…ZñÊ+`'y4oìÉÏñ/þ…PÎU®bÁ,ì2*Si ±u“ý³Tå„6¡q—AÉÜh@meṪ÷d4x\•Ï8\æ”ÛFòmß!Ç_›ô¨/]©åÊÁwÏzº¸aÔtö¨§lDÛylsšiµy@aq"ž‡§åPÞGp¶ò,7mÔP‹P¾B èqÞ–Gù€$Ž˜ PÏ$J`Ù¥Ÿí‘¦Q‘Ô›h¦”q§0+—gbqÓ9õ«ä2m%˜ŽüU 9îN’²/–Ýø]–KµÙ±"%½Z€úÉ¥?tœm©wû1ôm‡Š§f×FIŒ‘.ó€ßJo.þ÷ØÉ_@Ã4¥•¯¡ÛèÛI¸qµ¶îãª}¥ôr}šNTþ5+j[eÚÖòì º;„drÛ‡M½s…Ë{œU«¸¾Õp®ÛÊ{‘S¶£j EtP?½@‡åzÎGZ DŠ%M½6ô4Oyk-³H$MñÿµSý¢5„e;½è¼ÖöÌù¼»zíY:6›i=›‰í×,íÉêkzfXâ)’jŽ‚DúZ :œ·ëHdèZc°ýÃ|ŸÝÏ5RXÍ$øóîÂóÓŠèÙ^8‡–U¬ó$“ÉŒn|øSø]@ŠêEq÷ª%Ю–é¼­AÀ 0ù9úWQƒøœõªñdÜË•ìƒhû?\Š#²ð?û'š\ë±]&åŽgvžÝ«¢çý¿\T9Cp{.ßë@'RÖ#Iì†ÜüÄgŠI5ÛŸ´@e±eÙ“Œýî>•Òœ÷ÿwÖ uÝxƒ9!ƒŽ(¾%·ù¼Èe—å-)׬džY”r\•>˜­y-íÙ|I°çvW©ªsiÖxŠmc$FÄ(ã=(äÖ,|·)ò}Ð[¸÷¢k˜e¸¶Xî–rà ßÓ$Ðtç ÝüAËTæÐ,ZéVXÓknúþ4´Y »q³üu¨¥ÝöØ@²£¹íÅd˜Ô¬²¤¹ÈÀÆj/ì½Mo1¢[j|®Ä÷=?Jèºä+g;¿•Y6µü„¦ÔÀ+ѲÇ5ŠÐxŠ5#‚ßwjü§ßŠ€_k–ïs#Û,˜ÂÊqÓØûÐMýì‘»e ‘Ž;U{oõ·MóI·`ÇÌ6¨¬câ èYVãMqòôɈ¨í﨨"DòÕ(Î2ÃrôÏÿ®€#–âØ«*}à1»_ò*ÖüâôÈüjœ¶wOµºd~_J–[4ˆ(K³£msÍ>ÞD6ò§qcÎ:ŸZ[•ehrÌÙnx¨b†o°y‰rêwnÆ{éI0¿Iâ 4NNOθíí@· »³ÅEnß+¶ÖÁcÎÓUQï×y–œ!ÏÊß$”â%g²—içŽhy{ûp~ñ©œá¤ùIç°ªKu êI7Ì€!ÎWjyu8•¦Ç=hÐC B NyéUä³¶{…ÛOî ¶»K 6°ÉÁÿ>Ô¢\Ü2Ç·1ÍTšÑdÇ,ŠGlЖ³À‰¶á›9ÎW5rb$ˆ¾ß*FržZ¨5eJ×bd¬øa®§Q†„çÒ¬Û:ÇÆiì|Ådq†‚(Jc¶&>‚™h1mÿdU+Èo>Ë&nÔ|½£©#µ¹¨7¯Ó²-1.ÎÛiû4èFØP²*…õ¤ÆÕóy7Û¹Bìé@‘¦ÖäŒã íU®£mñ*•ÆüóL[gŽ^n›•êØª’ÚÜ5Ì%oÛ΀5·@^Xõ?ãP^«Ç´‡õ4Ñor¿vuÿ¾jü7«Ù2XtPšþê>Xojk#ÇüÙ@¼f ݨÿ–L{’MTÔ ôv3Š@SǘhÕšÿÄ¢0¸ävúÕ¶Ñ1Ç­ei¦ílaÿFÈÚ?å§ô« -ÀÉû+÷^€%ÓÎñ9=ä"§Ù C z÷¬Í2é„™ d%ÏŠ™.qî†àqï@,Š5…†?ʦÚÍSÝ¿¥eG{ Ôd9T*‘WPµ^72ÿ¼ I#ð3NjF‡æ%U7<Öl·ÖmóÀà’7WV{fû“þëP2 Fb±—1«;z ‘ôûy<¦H£â™~ñ ^~fQœç½Z ˜áˆú6(;QÓ-¤´’XÇD=ŠƒDÓ– .9$šPÅ…¸«º¾#ÒîYÒ#=µ*ÿĮٛ–òÇ&€š}Â0d¾—i䃃ùT6¶÷…¤hîÆ7îLäæ´Ê (ô«éƒkŽìÇõ¤Dz‚ÿËhþGõª¶Òêh¹ýÄO†ïã·Òµê¦ŸÉ¸oYM4]]¯ß±oø ƒU“RÅì¡í'\*»ŸZת¶üÞÝ÷Gé@kYç.]ûQ‘Q&¡§½Û¾…ÙõwExe†ÑùÖÉVmArªvÆÀý ð©62¦”ªpvw ÆŠ-RÙvÇp² ømÜ÷ÆNGµ:êMf;yWìð‘'ã©ÏÒ´¬”}‘n7eÛåûÀäÿZK°±¢ª±O™G€ugÇ©]ÀObû¶í;I~•jØ»Þк(R6žv’zÖÔEc—“ÆÜ ÍÃך­ k5Ìå²ËŸö¹'úŠ®uí> ÌÀ““”ïëÅX†òÕ‘LWò!Ÿo5æfÐ9kh·‘‚ÁpsÛÏì;a£Ïl‡å4ueA6DªîGbáS"4Y³_JçÛÃK+ìštÀ-Î)±obÚ"Ô¤)ýÖÈâ€:)ý“ Ó§ëLÁ’edÇʽëìõøOîîVEþîj(f×£’Fû8~~lqütªÛ£”Ÿ\~”±Âé a´ g½`¦­v‘H·f2O­ø‚CpœP½¹C¨H‹ƒ±Bý)·vðȲ‡N[+#OÖlD³4ŽcÜß/QÇáWŽ­`åU.W–îhòÚÛ˜CÀ rGjª4ÏßI$2º†íº¬}¢ÖA•™N}–ßaRQÈÉþ  ÷MoÕ¸gwìEO$wMå¼ocžxâœá|ÔÇRzÔ…¿C@Uîc*F­Æ:Ñ-ÑI£`qŽ*kt9\¯= ã9cï@7¼ÁRX+.ìêÄ»`qüF¬m¿þüþiˆ’ó˜”z²ÿ:ž³n’ø¼+æÃËÿpÿOå^÷¸ðÿ¯@¾?è¯ïÅL£ >•™ãFƒí+Ëà÷«"ÞëñõÿŽPïÏú3{ñS/ >•™orbQö¾¬?‡Þ¬‹{œÇÑÿ¾EKr«ä»t8ê(?p™fû£øª•ý½ÏÙ_g§÷EKµÊÄ£íG§÷E?QÄZ|ì0‡ùU.ÝܳUõÈ®SKÏNFÞ´ý&ÞétØ@¸P6ôÛ@ÍsUlúÊÛ¦˜¯Ÿß§ýóU¬b½1óã9sü4Ô5V.oe>Š)6^ÿ~#ø§oöÿ´Üsäô­Š«/ü~Ä=¦gPà üMUi/…úæÉÚpP½U½éõqQù÷í²þTïn®üëpmû5lÕ-a¶é—ùhûdÃïZKúUfüÿgH¦ÞQ»•÷  [A‹X‡û"¤ºjŒ:„b$ÌrŽ?¸idÔ­¼¶ËÇu4-г/Ôÿ:±T,/í¬½QÇz³ö¸35:Ž ôçÙEYÚ½ÀªVsÄ÷7%]OÌ_j¹½¼)NH"}I7F§{TÍglÝ`Oû昤6 yè•j™:–›hÉî‚“"ôã½YþÌ€•¥_¤†Ÿ}Ë[YEZ  zÄÇ¥NËq6û¥² M¦Ù]-„o~AÆÑÅMâ*^3œÖ®Y¶‘DVHu‰¶ÜÆÜT:wö‚ØÅòÂÃnzâ´®Ûyû&›d6ÙÂ?ØžõGÍjû¯TôÛé/g721ÊŒ÷­“ÐÕ]3þ<ú’Z`Gý©ñ¤©þôf¡³Ô­[†3*åøÝÇaZ„U;(Ñ–f(§2·j™.­äû“!ú5Cfê×WlœütTÒZ[H>x#?ðϳÓ,ßÏcÿZÀ`ô  Z¯l?Ònû@㢠:L?Á,éþ즡´±”Š^Î?xG8?εRÓ›»ÆÿmWÿãLû=ò’õ[ýø¿ÂªXÿi=ÇÙß2œç#‘Çô¦Áª¶¬íë3þ‡Ò¡7Z‚}ûo÷%ÖªYjm̱º»¶à™±4€ØíFoAU´ÁÿÛlޱ©ý*î·gö9ÆéöFÜ}*Ŧ§``Vîµ@Áp(]N8ÚÂ}è­òdSIÓØa¬áüš…ÄOgû¹Q÷:/ ž¬*öh›Ô´»DÕ4è!VˆHÌN×=¿•iÿe²cÊÔ/êáÿ˜ª÷?ŠmWþyÀÏùäVÅbÃo¨­õÇ—~ŽQUy^§¶*Ä’jÐÆÌÑZJgäfCúæ§±ù§¼Y±ù*Óõ&ÛapG]„ ¥ow} ´Júl„*”‘[µ2}Z14 5­Ô_6Nø½¥ltª²|ÚŒ+ýØÙ¿•Cý¯¦¿ p‹ìêWùÑg=œ²JÑË%¶¬:`UçUaó(?QTlìí¥¶Üöñ6öfå÷X¸E(€1…ëïR•ÿk·zΟK²3B«L·; ^ÞÕ#iŠ¿êúJOó  áBL™*~oNøöS¹~¹ëYöÖ—«cÔ–<Õ7{Y?*¤7®o¥Í´£v  SUn9º€{Ò}¸w‚Qÿª’j1B%)(“ʚ֬ýk›,zºüxT¿Ú6ã«õCVÔ-š(“Ì2¯ó f°}*9Õ|§ùGJj^[‘Ä«ùÔWwP-¬æ/OZ>ÖþËØ¿wҜֶî>hPþ[ÈžJ|ÃîÔ¥—EeÙé¶¾eÁ0¯ß«GM¶ì¬>Œitö$9ë!«T É‹OŒ_ÌVIGÊ?Ž­ý‘‡K‰1E¿7—è*Õ 2¯-®<û`—GïÿCV|»Åÿ–è~©OŸ›»qîOéVhñ—qب,«¸V„_,( ²”Tñ?Í¢zu­µû‚€2ï¯.RÊRÖo÷OB IøX#o:ü£ø*Æ£ÿR{ŒU…@=¨”š²ÆÛ‹/ĤTzmõ¨±…Lèo š½rÙä$ºj+[h~É´H~AÚ€%°ùeSøÔ:s+[ÿÇ6]:Í”“n; «a¥Û›(ˆ2)aŸ•Ȧ©éUtßø÷fõ‘Ïþ¾´ë»[Èíßf Ì1Œ¢’ ¨d™ˆj´Ê¤r¢«Ãm ;“é@ fõ¢Ôæ³b¿Ýq!óvv§7oÎ-¥ãéLCÇ7¤ú-OY‘^J×/þ‹'`9cíSsþŠü{Š{ózžÊjÅe-äæ÷þ=xù…XûLù#ìÍÇûB€%fî?`jjËûdÿjè½w ±ö©÷cìÍùŠ’ç™"íTõ•5ìÿhˆ}‘±ŸQV~×7ìÏϸ  ~"’Ù?½2Ö²pƒé\æµ|ÿk³V·q¶MÕ°/h?gf€,Oþ¥þ”[° ÿf©]_É‚Nž•$wª"SåIÓû´q¸SU¬Õ1õcL–ý”“§÷MCc¨BÖàá‡'ªšÒ5^øø”ý(p‘÷ªkȥăïPÚªTõ㢚—í|T)4MzØu$/­ZÚ§°¬íR(Ù픢ó(íZ×û©^²µÕ ÈûÿÐГo ëþUSP±¶kWJ~U#Ö¡»æPI§[yj<¼qØÓ$Ó`Úpd_£š¼:R?Ü4 ÇÓ´Å[rVy—,z7½[û  `^Køâ§²¶ZžÖV—k5ÁûY??uö«~Uòôš6ú­Miÿ-sýóV(FÔ£Ë|ß•kϽ^¶ÀÿºÕ)ÔúF˜«4Ëk×S5Í’½³®%ÝëšÜ[î>ky×þk?Xùµ5?Úc[”ÀÊÔ5~ÎÞ»™G*Gz¸/í纩¤¿PË‘œÈ¿Î¬ÐõE?… *ÝÝÀm%"hÏÊЬDëå  :zÕMJÒÝ­$Ì)œzSÿ³m01ß÷N(Äì z)¦X¶P¯¢ ¥}§F¶r”–eùOü´4ø¬'H%죸€/LvÂí覣±l ìåT/!¿ŽÎR.‘ÀSÉÍIöœq"íÀQÜŠ¿+m‰Ï ¨tõÛaÿ¦b©ÞÜÞÇg.ëA§•’Ÿ ô‘ŠöW :hÝÛlµ•½ŸÒ’ÑvÚB¾ˆ£ô¬íGTƒì3)YQ™Jё֬ǪX• .PqüGíWÙ·ÕüéÏck"öñ69QUõ ¨$´ “FÛ¤Eáþ!Zƒ@wÚ=‰¹´D€!yí‡'ü*ÉÑ¢Qû››¸¿Ý˜Ôóœê–«è’7òÖ®çŸO½]R$‹S“rÄÎÐ6Þ@Çùô«¿gÕÐ|·ÐHé¤8þF¦æÖ&?ÜæÍþpô4ÍéjjnåŽÞ wÎÛ¾}¿0ô«—š…ôvs´×A°üË*¶*O|ÚRIÿ=ßõ«:¯6.¿ßeOÍ€  ÖÚŽÑìoSj…É€‘úTrêÖm¨[î” Eb|ÄeÁà£ë[P(mUò3²?2€©X·KËûú´¶2$©#£+n‘ºN?¥>kKYTù–ñ?ûÈ+:ÏGÓ嵎G¶]Í–È$u4zÿ˜Ñ½*Ö¬Ö-Æ‘ ÜÛ¬3\G–$í”ñïV³îP~ëS¸謹ô  V¼É;z¾? (¼å¼ê?Zϳ‡SXw%Ô‰ùã÷ö¢i5Ežh-äÃdlr3ǽkÔ6ü´­êÕPß] ýî/ü•ª;]R5‹2Áp™byˆ‘Ö€/Í÷ã_öªSÒ³?µlžå?|ûÃlÞÛ2“Æ~@¼1´lYîbyJêÊÞ]Fò—$àV…«)·L0äf«§Íª“ýØè²évÛNÀÉþëIo`É ì¹•ÕÉÎ"jz F£Ú€3Äbàbà6ñ->f½D?,møÕ˜ù™Ï ¥¸?»4VÞk…‰wÀ CvÞz…Çü¯¨Â¥D¼Ü}1¯" ÉÇÖ‹kˆš<‡Ô³*”9™¼^PhC÷œãoÊ¥ÿ?Z¥ØdcåJrÇ•!º8$C/×oJbßã¿åRÿŸ­Qµºv ~Ï/Þ<`T¿h“ñï'׎(Ñós!ÇaøTßçëYÖ÷R´Òÿ£H9éÇ5`ÜIÿ>ò~œP×›–ãø*—ü泡»‘®eͼ¼cÓš±ö—çýO¥9ùºO— •™öÇ7Øò%û½qÖ­}¨ôò$Ǧڡ©üÚ½ŠìÎ ?Z×ôãðô®zîñ޽oû·ÿ lý©GXßž¿-:ëˆ[Ö¤ÛíéT/oPDWûÃ)«ò<Î~”4ßêÏ®8¨­E²`z†êúòÄ.:Ñm{ ·C¸:P²«Žƒ¼( ¶ÅÞ[Òœn¡Æ|Áùô¨¬î¢xÉYSózÐþL]6/×Z;h¾Ù#yj0éÖ¬ùÑíÎáJ‚ Q®¥†î1í@yuÙøU »x~Ûjœù›‰ž˜­-Ã'g½eÝ26·f»¸ÚäsÖ€/}{3€:üÆ«ÝÛUÄÒ˜cæ«ùüý* ÏÍõoÊòe ÄïŸJŽâ+‘l¹íÔ­\ÿ9¨.Ê‹I3÷0x  –"ûìhL©ÓºÔåïUsˆÎ}êkpDƒÛxž{þ¾ÔBÎâócïKn=¬­Ôdž¶lz‚(³ÿQøýï^jÂN¥ 3…ö5G‚@U?»Ö¬ý¾÷ƒªšd\ßË»¾¬ã“úûP Ýí¼ž ³;þTVÉ5¸·P7ITþ5‰4k'‰áVjE‘þÕlx[–‰N{m ¸’6–¼}ÿ_j³¸zÖMÕ” yn«‡ÉcŽ8«?b‡øZE_Pæ€&½æ z²Ö¬V=ý¼Š±l¸›>j€¹<ÕÁ œ ’sê´À’ÿ›G¼Tã ¬Ë÷ºŽ|ȈޠåHïS™oTÝBùéó‘š@Kͤ‹ê1SŽ••yyr± ög”¬zŸûD¨>e¥ÂãýœÐÚ‡6r/÷†*qÒ²îõKmˆ­æ!g_¼„w«K©Y·KˆÇÕ±@ ©€Ö»½"/þ<*ÃE 2)úŠ©sq¾B¬¨Ù•z7§?Ò®n½fê66’5²h¾y@8P8Á?Ò¤:U¦?v¯ýs‘—ù–ãæ»µŒÍÿŽ‘ýjÍbfÿÄØ¬w—K²çÌÜy>ÿJ²ÖWëþ«Sûiš±ÿÄÆwÿ¦h¿«Y  Hõo¶]²Ïlä2£CÏíõ©¯.5k{I]à¶uT$²HF?:»§Ž.ûó·éòÿJ‹]}š5ÑõB¿ŸCG¼¹·ÒíÔé³:á£e9ü)×Ú´gìë-µÔ#ÍV>d]‡5©§§—§Û§¤J?JeÈÝh¿Ý,ÿ¦?öj‰5½9Ž>ÒªÛ6ÎòÚ[Û§[ˆŽJªá‡<õëAÑaÕX{ŠÍ³Ó¬åY™íbmÓ62£Œqý(ýÄ-ä|ýÕ&’ÑvZBžˆéY·Ú=ŠZ¹ŠžÖaÖ¬ ,'ú»ÛÄöór?Z°ÜÞÇþÊ7ô©em±³z ÌŽÖè^ÈþCµ/ž¤ÿ…>ñ5µ“Àãn9ˆ©þtvÐmµˆ»E4ü׫þÊ®S@òmŸødeþ• wwbêV{8P>G ŠÓ”â6>ÔØ AíT.µ °‘%µÂgŽcÿ •uK<`ͳýàGó  |¨äºrÈ­…î*;»;SmqýÑIkym$’²ÏÉÀùª[™(aó0é¶‹Ä[N:©"©Úiè×w%™àpæ¶ ùj¦›Èÿ½!  ÷3ª伞ÍLa¿EùgFÿyjԼȃޤo»@–í~¥ÉŽ7ç±¢{«€U^Ù¹=Žjý¿ú¼úÒ?3  >Ü |ñ:ÿÀi¶÷Ð4ŽwcëW[¨a†6V%“é@ šê"œ8« ë´`Š©qgçµHÖQã‚Ãñ  (?ÕŒuõ§¶6ž8ôªÐÝÁä¦d^œRË{ÆÍæœñLD¶ã÷^‡'šyéÓJ©ä&ù²1Çö¼ˆ îç¹Á [õ‡¹nµ7nœzU;È^äí$ãå53]Äwsô „~òSŽsÁ©¿ÉªV·º¹ÉÁoJ›íQ{žÔÔÝ9ÇaŠŸùÕ8.ái¥ÃwÁ«â!Õ‡µf2Æ|B¤ç".âk_¿¿jÂíÄ3Ë, æ¶<èºoõÍEwz°ÍOéÚª]\EæÂ7 îû¹ëV¼ÄÏÞ?¥Ex£È~qÒH"UÚ1ޏ¨¯dAù‡øÔÊé°tÛé@ $Qì9EüºÕk+X„tKóqŽ•jV#v8¦Z‘ä.Óõ 6‘-sUm¬àóf`¸»ÐÈÛíUízÊßÄ[¥cûÎ=>jÉ’ÍN½ ùXÉ<ýÚÞÿ9ô¬´µö9ábçÞ–…«‘;çÔÕK›iüضÜnäÖµ8Çû>•¿ñóþ.h?*èmj‘ÛŠ­öå¶”†ˆ¿•j}?«¨ÿÇ¡=±þ×µCn׋lƒbž>öê•å¸ Ì€=jÊýÁÇû´Ù²#oï`àÐ"Ì¢Ý|ËwÿdÒ¬Çv¿Ç±ÏËNµÿtǧÌjuû¼;R‘kÚîFæTÈù›Ö®ýºÜŽd½j;5Ì·ËÉ|mô«n )>¸¦$SÄÞ)r]Oî€_A[‹"œíe$}êô‚ õÛµx”ŧCZ§O·é³o¦Öë@ ‘ßÛ®ü.ÒWŸ½W3ÿìÖKiñM6´ „ìßr­ 7_¹u&îìps@ y“ql£ïïÈlt«\m=”õ¬{«{ŸµZ(¹ù7\¯9«˜Ô³˜\ÿw‘@½åí׫ùœ.zгޏ<úúVMÔ·¢âÙL*Nòw+uëÅZ7n£2YÊÐy Þà¬`È7 rjÁëþØû£=«&ïRQ=±he$èTýÞjÊê–Œvù¥GPÌ1øPï97|­.wg¡ªwŠ6ûñ)SÁ]¹ük>{ûWº´Ì«µ˜üž‡M^Yâfm²ÆÎ¸ÜsÚ/,-亶SE·ß.LþµÙB€¦5(¼ƒ»9ªzçï$²„r²Ü®æÝ÷Hì(xµÝ;b©™“·ÍéBêV3jËu&¶:‘þu†þ«÷º ì<óT~Çg5ì¾e¼GåQÌ|–Éÿ ÒYce[èsQXôD?ß%ÿ2Oõ¬Ë½+Oû<ŒÖñ#mù™nÖÇj-´ˆÖÞ=²ÝBåFà“#b€4ï>e‰?½*þ‡?Ò§¬9¬nEÌFàd’¢E ´€jÇ—© ù/a“Œ/™2}84v™îý ¿§ÿ^r7FÕ—ùÖ]¬šª£·•k&Y W$qÒ5ýêIɧÎ줨^ ·ûÒ·«ÕSªlͲºL “°äi–Úµ§•ó3¡É'tgÖ€.Üó±}XT®ªËó(?Z¤u 9'Œ ˜øçïU“q !Û*£PÙÛuÅI+_ª’&ã³U¥ÿ^ÇÐRÍ÷ U†k”…w[ž1o ¸ù ‘p=+C¢ÔqŒÊæ€+Ë}¡Ý¸}E>Úêˆ|Â¥¸U(r"ÛÅå€c^”š6@aV—j˜²…®2©ÓY§lŒ(^5UŒcÇ4ÙÀŽÜS¼ÅþðϦj+‰SÊ?:ã×4ÄI¨Œc¦9¥p6*o˜œ Ë»Ó4Ù§‰brd]½Îh-@.?‘‚íöíQÁ*\ã¦i^dÇzûóÒ€ØrsR1þÍCo"y+ónzÔ¦E¨Ï§¥E€ò6>lô©vŽxúÔÒ++Ã,»¥dYCkWOÁÚZ¾Zç;F}1YšS«ê­·ànü+W#Ö€)\A\Ä»ƒœâ¬yuò×ò¨ä+ö¸Çl ±ßÞ€(j¼j¦1ó0ǵOö(v€{Ñu‚cãpÍX½;P+›8|‡å‚cûÆ‹{5XwÈ?½V.î×ÒŸ¨öë@5©Ç¾•V±¶‘UȰXòGZÑoºOù5 ®<Çð=(?&`§ñîµ™oÿÛÒêYcºVéÏü ²ì9Õ/X}Ì€O¾(oý$1ÆÃøÕYëíq‹·Õ¥þ~µÿ¾™ùzzP!†ià À~€Õ-JîU‡›wÎáŽ>íkw÷õª—ÀŒ˜7{Ð0[ÀÌRÜí4Ë›ØÝÃn ´ö«¼`zv¨oú;ü œt¤v÷›xÉ`Þ¬,¨T‘ ÿ jC”«µz}ìPÐÁå6b\wâ€+iò# °À°îoZ·¹vu PÓìáäìÆæ%@&¬›TÇ³ß x¦n’Kjú‹Ÿ¿¸ V×·þ=é\þ‡m¾êöD™ÀóH Z×kyvñ;cЊ@ ÿ! 0<}ê³éÿŽŠÎ†;¯·Í™•ˆQ·+V?Ò€oõgÔç¥5ùÕ#Ç,îçîÕ¿nxïëYFK¿íOõ  7Þ«?i~õ£ÿ³ŒqLJÞÛî%F:³Ï¶ï⬯·ãQ]ÐH¸Œù‡iý*Ïö•°ûÎWwpÆê@,Ãuíªçäu9ûÇ?Zµ€pJõþ}ÚÌ7ÖÏ©E‰”æ6Ç#x­–2•†ß>¼S¬°Æú”yD;cmä¯^”æ°³`¿èÑrƒx 0:› éc\õ×ò«'œ€zÿ÷M 2IµmC‡OÝ“”|lSíb­´øgµcé²j‚Ó)o žc4ŠÛñ³-Êÿ:5 Bá-$ó4Ù7S´‚žOµhiˆ«§[ ¥•NݼîêI£QÃZ2³ ³¢HC2GO΀)Å­"¯ï-.âå‘¶#`tªwzµ­Æ­bí#Æ‘–.ޏØ{èŽs’¤ž…r:gïV4‘Ç/ˆöÉq·ÎJ}ü÷ýhÜzžžéó]ÂAù<< ý)m§ŽI®ÜË‚;+ãoüêY¬í±’ÞT|Å“¢U ="Á‘˜Û#bFU¿‡8Ïé@u?c”ä˜Ü2p¬ãŒ0$}ÖÊýãëX÷º=¶ÈÄbq™X‡'Ì_þµXm9“$jJT|ìNr¼ô  k^üØá ¹ä|Ä®*rr­–Ûž ÷MdGk¨­Ôßñ2 Y/8§\®­ |Ûi‚˜Áÿ{¯ZÒ¶À„ÝÓ¡ÿ&šFn£À`ºŒ~ΨÄú¤q¢µœ ü<>9ÿJlz…×Ú\¾.ìm¸?7øq@¤ár¼÷Q»­$C Á#fÏ«(ˆï‚æ<ô,ý*TÕl‚üÒ‘üHFG¥Xxb’ã÷‘+¸Ë/SPÝXY¼Mºò}9¥†úÕ¤sö˜Šð8jšY‘€Ôä€pÝ(¸Ò­ˆËß*äTqiÅ.’îpûY­,Œž*8q¹Èæ€35+{±T»-Îe«hº‚F£Ì…°;Š/°ÒÀ…¿‹Ö®”B µÎ^?F¥šúáJ‡µoÀæ®C÷sêi—_N´ÔGÏ‹Ç÷i Ô mÇv9î*Ëtõ¦GlåG>ÔÙ.¡l æ¬y‰ŽU)­`yW1Ž´÷´‹ià¡  ]ŽiÒýÚ¡ok´1Y¯­:hæ;BË@ßc·Æ<µúúÔ76vì£÷J9éW7Qþ λ£:bi\׵ʹK)zt«[—Ô}=* É@ß0úúÐEgDF¸ÇZI­`òŽb_§­X ¸ž•ɹõ  ³"\ é×Ò–KH “ñõ©•—`ôÇJIXlñ•³ùÖ¦}ø  ÃeH2Í ÂüÜÕ¿³ùí _­"Þ¶{/õgüâ€2ï-f3Âá·n銵ö{Œ\g×+Ò–S›¸Ç㺬ÿ*ξŽè[6Ù—þùëS"Ý—,>î)÷Ÿê€ÿhb§­U”Ý*Ÿõd⡱{¯³c^ùùªäÄ_'åÇ&’Ûþ=Ó· DÓNýIdzVf—q)¾¼f…³»îŽ‚·¡ÿ8¬Í Ý0êe?7­ZûIç1?×*´w¨ov²¼åzÖoöj´J>×!=p6Ð!ßj‹¡8Ròö:ßç·ôÍh퀞õFîÞ).-ÔªíÜ[v) ´."=$SŸ~• ì©ögÃê}jFµ¹1/±Tµ AB|ÌÃn;SEYv/÷HéNrÂ&Æ3UŒA@V|Ž¿1¢{`-›mÄŠ1×4û}”ÙÉ$ŸJ™¾éöýk>ÆÖt±ŒyÄ}Ò*Y£¹ ĪH^”Sÿ5¼îWæbÒ¶;ÿµÞ°ô¸K'1ì`\’IÅiy—!W1 vÃõ ×k‚§åÜ>l÷«]¹ðͲž_6äµ»¬è1Çgí$Z7 ë¶ Œí)³Ë[=ªÖFÖì½ë.Þþwr®Y#©ÎjïÛ <ù«»û»©€ÕÿŒ‡ø–1…ÏQVd`|tªK^\mòüßÒ­eJÿ²{{Ò‰´‚KùàM`W©ÍHÚu®p!Pý‚’)ðó{1È2£Õ?xo”ôlþ”“^Ü4r̪Ľ¥NÚ{íÀ»œ)?tá¹ÏZš×æ–áˆàÈÜ}ÓSôÉ8Èûç¨"ÞÚô^Ý8¾×j³4]F3ëïSyzŒi¬ð8^W ‚üw«%`?å¡1Œýì*vä6óü\|§Ò€1ìäÔü‡)/¾Geo3îôéF¡yt–SyÚs,L§î°8SíZVj¦Î®€;vÿ\Ô±ÿA“8ùŠG)ä`Ûó R1@¾}ÊaBÊÁNŽÕÖ³jÏÈdB²Œ£©_ï=«hp@ÆvŒÝÕxäÕyÕZâ Ë¿igÜTÃùŠ®ºµƒÍÔg`ù‹c.0x^Æd“_¼u–&ˆŠTñ·­i=¤ @h!b>æcà/V™§i÷RÝÉä+§œD+’:”¼$ÆÁ¸Ýß÷×ýzŠÄŸ±£‚Xdã>rqTn´{4·‘¡óa*¥ƒ$¿šþ”°èÌ‘Çå^]FʹQœªzŠ»qµn­—hʱ*vpoJœ|»BÿùAc÷xëX­g|—°¬:aµ¤Ìœ÷ÏýõV6êè¿»¹¶”grîë•  v˜&V \ãw šuÐ&SüL¿xÿ׬ëYµU‹p³…þfl‰1O Q5ÝÒ¼K.˜ëµ†60?/\~”¬qÎï÷IJdD´’“ÁÜàôãÿ¯U¢ÑŒIerG'Âúðj(5kUŒ—iWæ=b?ƒ(ýÇÌ êÃÓå©6¯(àd|½+5µ[)$Œ-Â/Í“¹qÏ­[[ÛgËž3žWæêh‘ÙÚ1vò#<÷ª)t»6’0"Tÿtãñ«Vò«GÀä’0zÓ²`1ž:úÐFÒ¡÷o4gý—=}i¶ö2*|·“rr+BC„$ÒEÄKþy  ©`»7ñ(¸£, -Z•oU7ú®(‹çÔœîÎÕéV¦á S…ïV%ÌàX¡n§óþkfüjðáqíŠjríÅU’ø*Ñ:ÿÀiñ^ÄPsŠšléNØ»q´Puº‰® 83Ê›Ì*¶…§fòÇÛ‹8¶>†€,@Ëåž´3"Ô1ÙíŒ#TKm/ŸÄ§ZÛû$?Ý㿽C-Œ-</¸æ®çžÛªdûBý 1ÙaÇÜàu÷ª×–p²(ÙÕ†=ªþîzŒöª÷ ¡“'‚ÜÐ…¬C¢ò*½å¤O0yéÍ]Èã§µArà ÏqšEµŒ(çýêŽâÖ?%þöÜsÍZÈÀçŽÕËbçœPVöª° ,ÙÇ÷©·6ÃÈl;ôçæ«QàFxÇZŠñ€µ“Œ-døzÕ…†æ‘Ô39­_³¶?Ö¶}*¶„»t¸¾mÙý+Cüæ€3!·—íÒ°’:U¿&QŸÞþ”–üÉ)è3Ò¬‘@RÅpoâýꑃÆ*æÛÿy ›ãŽ¡y5cŒ{PmïÚ¶(~øÏ5guÎÕùó§\s$^»¸?ë@.¥¸X\ù98éš-f›ì±æ&ÎÞµbð£¸Î=ýjH€/\t ew¹`‡÷MÓž+?EºÅ¼»Ôæ6=ë^n#o\qTtE`–bXþ4cí‘õ?z«ÚÞB×Üg­_Ú1íëU­£]ò¹AËtÅKçǾ0?Z­,ÑÛ|°ÁÎÕ«M g‚Š•Iìà{ôÄk•_˜ÒþõÏP^«^2‘ 6—Žißbƒ°!ÞªW¶Ò@¡¤Îÿ»º€5GoÓÞ£ºl[1+Û¥Wûg“ü*-F‘e [žÜåhå¸"öŽi·eEœÄð›[uV….Ò—rÀÅG}%âÙÎJ!"3Æê`;@Ò`õçÖ´¯éY:<— ¥Â¾A?/ š¸÷Lî‚@¸9ã­ <~îSßÌ;›z¬ñýßá¬Ý>ù>Ê7£)ÜÛFÓÒ­}¶òž¹íLÙ¨2\1¹|0ôâ§0D˵‘HÄGZ©§]Bñ9$n½W<Ä8äs÷G¥ )ÅclgšÃ0c§ ±‰~îå#ïmr)öެ%mÊNó¼úTÝ1è>ï?z€3­-{pÉ<¡K|§vwqSµ½ÆÕÛtüödm:Ï%»¼ö*s€¬{¿ÇZȳŠü-ĉ<\ÊÛ‹FyÅOJ=€-»•År*Å"Ù:où™W=³S?Ýl1®ì÷ô  ‹‹ñlOÙ7‡‘›rÊ8ùºsR]jGo+Éa:¦ÓÆàúõ«–#ý Ü• 2—\Óo¿ãÎmØÎÍ’¶1‘ŽßT·Ô£Ž¼ÈgFT )17@=ªíRЭ°œ¬Ëò’FWÔæ¶9RrýÅÝÔUK¥ó/­#É»I»ƒžËúÐ’þѲî7ÇÍÊr9â›æ+ß±²ªgA»÷GøÔÏR(ÜFStyÙõ¬ÿìÝ>mFLÛE³jñ‚>l·ÿ@E—oÈFÖ9O››“ŠÏÐ =‹È~S<®å)ÏJK2Í-åuFˆ…%Œr‘°â«iZ^í6ݾÕt›Æí¨ß*ž¹Åj_åí]JàÉò®WîÇõ©þSÐcsqFXú«îÆñDjºƒ”’U !’ÿéS4:¨ß‹ËfÏÈÛ®ÓÛúШÈ{ù0ÝrCtlôý*ÁÜW¸$g<‡Ò±á“W7Må@ϲci Œýi÷W·É´Úa Gð¸l7­hÚ©ÐŒ Û.WîñÍ#dÜE° ayÇùëTƤÊ0ÚuÒƒÓäþ!ô>ÕÖ-MË3ùÈÁ~éFûÝÇé@Ùùr¹eê>o¼ 2Ì ¸dÏ{5J]^É£}· 63ƒüªÂ^ZÚ·«Øÿ¥A —̉ã Jõ¦Oag"6ø"ç©Ôªëç>]pªç §ÌߺoÈóÒ€)G¤YùkˆØg*Çò¦¦–‹+l¸Pº·¥iŽ1øt¨á ³°çÒ€(Mapˆ|»ézc Ï ·¾TâíIÇ9N•nb>Qžã¿j{}ÚÆ²‡ÚnlEÁ&¦ž{åÚÙHÿeªÖž§ÊvÝ»s“S?úÄÇ®h§Û¥QóÚÊ£ÛšHuþmÊãžëWÛîÓbQ³¥T{ø”žõcíP‘Ä‹ùÒIÛñ¦[Ãt»Žõ<Ðïì¹3Ÿ·Üm=>j®4yÇüOÀäî­Ïóô¨“ýssÚ˜ŠJemßmŸ¾j§q¤Îg‰Eôųž[ ­þÿ犬üÝ Ï}h‘Ò¦Þ¿Ÿo~j­Ö•t]¾”’Üf·ÿÎ*¼¼Ï?QþÍ»ù1¨IÇ^V½Óï¼·ÅóGÍoŸ­As÷Tz‘øPbéúŠÀÛŽïM¢ªê¶º’Û;}¯z;¾Q]ùÍgëd®™68Êâ™ZE®¨ºrùs¬jz)\Õ¶‹XT_ßD}¶Ö•ˆ"Ò ØÝ¶¦oºZ笎±çO(üܓҬ u…C˜¡<úÖú–þîãz°È qo5Q¨`Û)ù~è5iu @3o±aó+f€7õïíTµŽ4ËŒ6>O½ëU?´¯”¦í=±ß Ö©jš¬“YK–R à)=¨vÁvØB¿Ã°qSÉ­ŒoÇáXÖúìÃ1J9^I.¹dÑH¢F\ hý’¯ÙStŒæ¥‘WcLÿ³ŽµŸk«Y}š,Ê«ÏCVö xË…ÎsÚ€gk ·‰ bÌÞœÔelC,þ")¶2ÃöЏØG\÷«,üí»šÎ´Óá,Ø !äf¬}Œ…¸”cî± í©,ù¶L6s’ñéO”¨‰‰/qŠ@fYÙÜ-¡Ûtʘ¶PóÖ¦’=EI+<.à)R8«vyûb­·`çš©i£ÀROÞ\àÊ˵eûÃ8ÉúPýUöi—,Ñ–ùàç°juš*XÄ¥p¢5Gùyo—ÿ¯Y:¾Ÿ,6RH—· Çj6þC©<Ö®­ž¡Ôƒ4kŒ4\mÿ(ÍÃ/ÚáÜÀmË?$¸?ãV2W¯n>÷oïV:&¨·‘5´Þ\Gi êHäÕ‡“SHÎè ¸A’v¿úÅ=‡¨Åšå$f·JÀåGσ€J[°L%xù™QÎÜg‘Óó¬ë;›Ä´Fm5pIeqʶO\êl’ijØÜÆÊÙ8ämëë׊×Ï]Ìð± Ðû~u[šyX®Ó¹ÎqÇÿ^©fÝ?Ö¥ÄxáƒFx›¥6 ^Äç7 ïoâ\sýãùP˨c‘Âê>K¹ÇןZŠ+kí›–û©ÏÌkBL;¿SbÇ”¼þ´"êK2,2®r21RO%ôqÐÆã¾­\ëp9è3ŠŽõŠÛ¹Î(”÷Ú¦-žZ ßh­å1Þ´ ]¶è§²€hNecøP)5H‚Ë"ýV¤P¶Ø?yÛҬΠ® Š 1ÿV¿•AÜ-1Ä‹€=jYfM‡æC¹v>RÓ.l`+‘ô4n_)i7:ÔÁV0WzÔQÚJ'b.½h9â’õuJh®•x•OáOŒ]$Kò©  \Þc;cúg­W…¯Œ²e#ùéZGõõ¨aþ3ÛwJb"Íç÷cüúÕ@×ßoÿW}~íjÿ:­7RÀsï@ ÝyÓb{¶zÕW–óí‰û…+ƒÀjÔÿ" ñôÝæ€!’K±Ü©>ƪ\\] #ÿF;wsƒZücÚ«Íþ¾!ß4Ú'fÙ½€5—â ©~ÄÊÐ8Î2{küšÉר‹hÔ.s"þ<Ð2[;¦‘þæ]»z⥖è¬D˜dÎ8\u«1ÿ«^;t¤›ýSsøÐ"†x­o¯œœü¿v¬ýªo»ŽjçÚ¡Ïߨí7ÊÛW~îMNbŒº1Þ€)ý®¾ ²)`¿7=*ß8Ç®j§ÙbkðÆ5ùå«&Ú,çË e{Ùt@°ÎîÖ­†£ü+6öÂ&‰@!·gp=*Ù³‹¿=h-Y±§M†íäÔÖAEœ@}Í¢³5»U ûÇê6®{Õ¸-e[tÄí¿húP×û§×°¨lø·äž¾ÕÐ\ˆ›eÇûÄt¨ìRðZ&æN1Ö€4Îj¬ÝNváxõ¤&ðò¡ôéU-&¼W¡ ürŒP·~ÕW®¥Ç'gÍíIö™B`|w5UoOö‹†EÂð1÷©«øàzúÔ€‹<Ãå¤[¸Ë`†úméPÜÝÃö¨T0 žsé@»ÿµÚ²µñþƒ„ç‘CgëZhˆâA·×5™¯H¬–˼dÌ¿.zК›2/8ëU¯­`û4‡É\°ôéW3“ëéP_ögþïF÷ I³1"´ H'j ½ÇÈwmù~\õ¬8 ?óþ=¤õ#ýšÉ‹@ƒìñòÀ$éDº,‰½â¾™NÞ¤ç5¶£§Z†ïå¶÷~QéL X4ÝElâÞ•^)(¹Z†9ŸÏŽA³æã ­ØþXÇLàöâ ¿ÿG>Š3÷è*u¸màQ n£ùaL¹Ô5"d¸±Ú„aXs²º ÏN>íVÔ6›|Uøäò(0ë3ÆÁeÓf GÎTuúT7> …‘CÛÌŒ`ÆÜð®‹ø¹ÆñÐgµS¼^kd#+æî yÏ q@—Ä:yb¾tŠ͹—¯µ#k6ËnVå?0 >áÚzþu¢ö°I÷àOœp ·ëT%Ò¬$¾MÖèPîÂã'#Ö¥§¸l]Á±¸›ž”–s£Ý]ÊQˆ~Z¬þÓ› æ çëTàðõ´ÌUç ½‚…qó¨  ýÃn2ÎÆ2ñÇ5 ü{+c®ç-·9Vbp+o˜VG‚öehÓ ã†síIo£êqÅ“©ùw"àœÐ†´-œ$rgAûµ¢å]„‘÷£þÿýzå.mõ„¹´‹íK;3™" ÿëÖ®yž$@~H¤ç¨ÛÇ·ZÚOøû™•˜íU烞X•þTë‚c·‘—h(¹_—î¯q\ô:Ž®WþÍÛ󑱊.õ¹ü†Ž]1âÝ÷y={ö÷ ŠÅ("£‘òñšcn" 7*†uù¾ðàZÇ_[‚w[\/ñuÏ>ŸJrx†Äܳ™&U ÆSß‘@‡îó—øx¨-ቭþh”«“»)×'#ùÕ#®éÅN˕܌Ž=*kmJÇÉŒ}® Ê ¶8 Ëci-Àó-âÎ0Ø\zb™.—`êÄÛ¢žåN0jhîbiØ cÚ«Œ‡íRÌߺ?—QǽR‹H¶®Æ™N3•ñíLþÍuŸä½¸UUãœàzV§Ð}8éQDTÊå §-¥äh|»ÒxÆ{S¼­IW‹ˆOåzU¹JáFîþµ'oóùÐ\M¨ùîL1f¨µ ‹¡Y,ø$ckfµ!ä¹ÿkÒ »ÜÓ@«Ž_4‹w"§Ík*à~”Ø/W.Lr{­^cÅ2û¼ûÐW¾„ºŒ•çºÔÆò ¬Z{*´£*?*%Š6S¹ߊŽÞâ&Rw¯'Ö‰¤RTnhŠÒ/ýXæ ’Æ&1•ú¾Xc­E 9ÍC%žä•×ñ¦[Ų́JÍÔ÷  S*_á¬Ù£ºÞ 2°ÍNÆéWîƒøÐ“Ïr?gã°ÝPÚÍtU¿ÑðÙ9ù«MŠíjd%|¥÷¦"¡žãn~Ìvÿ½ÍU¶¹¹k©¶;‡û\b¶ ^j r¤;íÖ€ ûDø'ìíŽüÕXï%7l ´Ú×ã¥Cß6Fü(µIÿ<=ýªœ·ÿéq/“ _]½kcå¨ ¡¹^™€"û_¬OôÛXºõê—·PX~ôHé].­cêðÅ%í¢0ã~q@Ëiy@rzuÇZŽêö/%øfè\ýÐãÇe\â£dGñרÔMmÞ¤íÍLn"ÁÃsšm´0%¤Q…tpií Á@¡ ,g‰¢bmÜpsÖ¬ùŠ{þVÖÒÞ4l.X±88©¾Í p2߃@Dàß8Ý“·ò«YÖ¨Ec wr0,uOZ±öu'äSØ(ÉÊ›¨A?.xe™Wï0¶MfÍhÂþ&Ydb=ñVQ Èÿ¼cï·Ÿ¥ Ö‰6Šñ:‚}*ü|"n¾µ©[O%ª°í•@¾õ ¢ãj€ÊO¡R(-É$q»I Ùn›¹8íTîä»ɱU›FMÍ?ÙPÿ»žy¤ýÜ‘‚|Õ{<4»»ƒëIq<«*þá›å< «axÛdß «é·îÓPúãðª°ôÙ{¶:Qöèýwû¦«Z^Ãö‰Ã‹Ÿâ&€4ÔsÀõ^xÑ®¢Þ£ŽE*L<Ï3¿ =3Q½ÄFõvNÓøPƒ d䯹ôÅck6ñ«(„z^Z¶D«Ü•÷aŒÖV¤Åµ[s%¶Íh}–p ¯ &ªßÙ†DU‘Ö½ëA_s·Ü*ž^‚ÿz öy pøîOj­ÏÙ›l üÀ`¯Þæ´{tãÒ ºÎcQ÷÷ }3@ Åâà~éÏn£Zúk•µ“÷ AáˆzÒÈÇ_—Ö ¼åPÉqòúó@ýªUÀkYx5Rúý|¥)”™ Sîò+[¿¿÷ªµÐV{u#åizc¿&€#þѶþ&dSÔ2PÜêÌöøš2þg#w­|Ù8ÝŽ~•Nxb’æÙJ‚—›þ½L·· 29p9¨]Õïm׎UØ<ëR5³ýè#%¿Ø-Qm6Ìßîò¶ªÇ†Û‘’O¤ÛpÛºtn:š…ýºRq½QA碒ÕØc'›*‘ÉÛ+p*¬6 '¹t¼¹êáÔïùsÜ{Оpœn;FWæÿX1PÚ!X°½K3†ÛÐÎÚ‰­nTü—Òáž4 {T‘ß+R³Ãó(u àã<àЛò¿a*ãz,m#ŽÿXx p…¿½üC·éYw‡SíÿFpòª¥†G­X3êq6±“Œ³—ß‘@¿ï|CÎC$ YCgaÕåß/Ï~hñA'Þ^O^‡iôª°ÛA$Ó³"’@£oüjt¸‚A•–3ϪžGñS-Y³¸<‡§¨ïŸÂ€+]ØÙ<ýŽ0XG·ãúÒM~–©ê¿1jcºÒ0¸;¤^ýÃõªO3#åË»ÎO¥d&§»Éµ\¨8Ö›'‡`\ySΜ׭kÀÀ«¿ÄxÇéúPåK/ÊÌuSÒ€2A•ÕêW õÏ_Σ‡MÔÆâš‰ûÝÉäÖþàAù½›­G /‚Iï·œÃ{}m$@.R^ã¥=Ÿ^~h¢{VÐmÓû´JãË%A ¡h CS0Öjùô85ê³›äf³­t²­–Ìe¶öjB·¥Û'ŒJ¡&¼~ky”ý)Ðk–¢ zŸu­+€*÷y0¹ãÜ  Qjö²O…|ñRÉ©[#ÍPÞ™§Agj×;„KÐÔ:]£Êÿ¹9ÝÕhìW\:ôõ¦¤Š×xtªŸØ–…r›ÇѪ¼ZJùåÏ?¦WšØ•ÆÎ´°‘å ÆžÂáWä¼sÛ¦’ÎúAÆî;­hg3R¹â°c:šÏÆ×#Ð|·š‚ 5½tSÞªÆNÉ=†Þ´[ÞG䦑޻zU‹õMüéÈEã·Jb+½â'kãýÞµZÆþ&Œœ>K}Ý¿v´%!ÿ8¨lÕE¸ÀïÏh¦öOûتö·ð3Hw½÷qÍh2®ÞTcÒ ¶~sµwäÐö¸s÷Æ•UŽö½|H>Uù^1ÆAùF*¤vð›Çcî ÅXûL88ÁéYÓ u»HÕ×#vîz ×û}¶%nÎ ôâ´¥oš1üYþ•Iþ”‹è & tó?V¸kÖàF¥w熭-߯J†G_>%#žOÓŠ‹Ï˜7ÍnÇŽ€Š«sxCÛƒ ïûÛ{V¦W$⢑ci ±%EWûl#†WU낆 —P·k»Þ®yÝžÜVžÕù¯Z®ðF×p“‘ñé@¹€Ž%Sö‡ÍP4ŠÚŒjå³/û*ÃÙÂêÙŽ2OL¨âªeÛ5û·’<±ÀãœÐ²WiÈù ÃqÉ5 LMüäãrª)çŒdšoöl@«g²°â«Å¦²Krëqr>aŸ;¾Që@ü£i,Êó÷êC»Ì÷•ö¶>î8ÇéQ5Ð#˾”q¹âªÙA~-‹˜ˆv.D~ösØÐÛæXìåb¸M¥”cø¹<ÓáUKuRp6„rðØŠÏ¿ûy³™ìì¯ò3)`Wg#<ÔÄpÃî·çéóVT——?leÓæ}¨ÙÚU·ŽZœêNélîAy¼¬ü¿úPzhv¼Ôd‘•Á#az€½ªüîcŠGãz)ÝÉÀ^qøñXº%í´PJÁdÌÌ «ãa#Ðz ·w¨Z›fO?»ßëõ  ð/— iÿ<Ð)]ݽJ‰ ŽKÀÒD$Ø›IeS»$súPo­Nâ.#`¼ýå;Ç¥$W5ĸš7£;yù~n? ?³í$sæZÄBcqò±¸ÔVö¶í2À¡}w0<ôÇçV‹ˆwçhÂñì;SÒ'®výî‹@^Æ Œ`K2 ä)àÓŒyž\7(^¥ˆmµ7˜±Ü,g'jüÇû¼õ?•>à0¼°¹n¤Žþ´V+i_`ûIbîP~T„ß ‡—$¼¤UÈ"òöôÎÞ1M0™Œdc¨Ð.ž=ÿ¹ÈüÄqNÝ"ˆÒþPùúT³H°E·%ǽ=ýäÚÁºç¿½UYd›}«‡^8"‹»¹"A‹Iv{ ±òÕ÷0.íúÒynŽ«»rgŒúÐ |Ÿcó62Î ŸZŽÈÕ™Ã}öÇÍW.ˆ6³‘ÿר-cómÑÕTüÄóÞ€³ÂïÌ‹€ß¯Z›íªFå+LóM†(¤‘·F¿{ž)$ÓâÛ‰\s@@cf#›õ¦Ëqûõ^6†Å2xlH±éU^Åíðî9õö  2íþäÿŸÊ›‡,# €qQùGÉßæ°ÀçÛÖ¢KK…¢˜Üá¨ÄØ‘CmùÐÔÓHP¢¨5gJ·áwvç½O7Ú[c¢©Ç=zЪ۬`g­+Ÿ5Y úŠ­ÊËæ"g<s^U9éÅhÝ^@#¼^z ˜]Eõ‹ŸZŠê˜È¼‘ž*o" yk·°Å1Ü]À¶îÆEÙE­Ä^D`ºîÇ­pDaså¦ìzQ ¥ºÀª±.ÜzPqÆ>bñÔæ¡³ž6ƒ;—icŽzÓ¦µ€¡ÌKÇAPÙØÛ¬Œž¾ÔsÌ_ï Õ[i§› ÏÞÍHlàÛ÷qïžµRÎÂò¶Ò2Ü(4£¸zÖ:²·ˆˆÇ"?Ê´Mœ|üÍŸ]Ý+ÖÈ6·>%pª£?7&›ÅøI_¡ª÷J£g<$òißeÿ¦¯ŽÃ5RîÒFš· ¿w~”Ò* ÏCìj ¡±d–«”}žaÒsîMTÔ!¹6ÎøN´v-¯Ê±ÆÁó+}iåUAnOדU Ží`L²gw²ý°)¡8ê{P1ök¹ [ŒqŠŸ`Ï$³z“YÖwäѯÞ99ëVL³…æ.=$* Ô»K*÷ÁêjÇ–¿í£k6Òêsu>ø>ƒ¥[ûV:Æÿ\P[µ_íKUä6ô|IT“Øå˜ÖD—ˆÚÄ9V!ùˆëZ_lƒ¡l*KîàUÑ4g£®h9áO-ÛnæÇñÔvÖp TP¸ûÊ’êDû;üøΟ_!=00)ÙÀ°R¸ô=j ü­ÎY˜±+–ûµ~Sû¶Á±QÙãìɃÇsL[4"Iw!ª¬VMçÊÂâLq‚O5¦>éâ ‡–÷ºzR·¹Ç3nÿe‡—]z}²©`ƒ'¥tϹ¬}3ËmZù”`d `[åU–¤w;¹5Ú.´@ksÄ|Õ©ÿ¡zUhÆoeçøGÍ@ û[|Ù‚AïŒâ«=ônŒ:H !ÎWïV™Æ:qéëUñ›îÅÕ8úf€/­ÉÿX¹wïî Ú¾œP¯—íÍÇ)ü‰?üM8´I〰úVtz¥ŸŸ)Ë¡mÝŽy<ñþÕ3TÔm Â%ʆ1’¸|ÞŸJŸCEE¦X‚Ù~½y5bê%D¤†Ì ŒóÓœ~•WMžÙl­âK„'Ë;×ä8T®ÂK‹qÎçUÀùNÓÿÅP†µ‡Üˆàü¹AÀî*”ZU¡’vû,$oùA^ƒ?Ö®ŸEÀÏ(?{žµ³~蜌³±Q»9<~”VïF³òˆH6|À¬yÉ©³UW 5ÚÇË9榙˜” óùûÝÇoÒ¦ÜÜà±þ.ß•eŦ:Ë6/.vð‡8b?­Y^¢ ü°R b¯ÀíûӓÓ÷{RÍ&ŸâçŽÔR¯"•·ÝÄÄŽ¬¤sùÔQio•…sÑÙsZ¥ÿ½·Ž¼Óa`S;GS@“K~»WìˆÙ`r²g>Õ)¸¸AÍ”£×a?:¸Äc=MHÅBôÆfÛÝü„½¬üžI\ÐnÑ¥Ea2Žà†­öˆ×éMLçžBÐ+‹Ëa þðŽ3ŒŸåIgqn¶ÈØ8Éù±Vo•M»ƒŽx©´^X]ˆ@eh {¨<ÙGš€{šV‘<‘ûÃÓŸœÐ–æGo%?*I´øC@®Í€gŽ)‘cÏoëHÚ|Xãxú5C †Öb%gÞ€,NÓ‚FÚ4ø—lK´°ã±ªW6“`m¸nj_&åS (4*(ûG¾:š|ŠN CŠ¥ Þ \¦‰åºUÿUúÐØPÆÜ¯ÐÓJƒ*ç,}ù¨âUŒf&¨Òó3òŒ1í@sºù‘ŒŽ¼ Ôû‡¨÷öªØÄ×w>G}Õ?ØâÛéž´ÄŒ¹çÿ¯S)ùÓ¥P½±FEŸ9çîÔÂÌâW÷9ë@N؉¹üi¶Øû:vâª^Ùî·#Í“o÷sN‚ÎE‰?Ò¾:ÐÖ?-W³ÁW#®ã“QÍm/”ظ`;š‚ÂÚå`ŸåÏÊ1×ë@G}«MÃj÷§¸ cð«­ØRDª[1ÅdhñÞ}ªíƒ.<Ö4 誼ÜÜF;zÓqv?¹çU¯¾Ü›£B¸áAé@_óŠ­|t2IãÚ›æ\ùd õÍSÔ.n òÍß1Ï4ªŸt}:ÓfÇ’ßݪëtÁFè\z TwWÂ8X˜œ¶:c¥Y´ÿP¼}Jj­ô>BòzrØ© ô nÂûŽ´ ,ð^R?½÷ªÏéÅgX^Û´d‡3|«WEÄDðê[ë@¶îÖFpvÇòJ¿å©?tg½f[M êó”( sZ{†:ñüè…Ý´R\B¥fìæ­5¬ Ɉ}*)°obÏ>‹VÿfߨÀmØm9=9éRÇb«…–@@äî©oÔã?)<šœt¥ (ÜZ7ø¸‘Wo­%µÂZ 3üÛ~îÚ·rrþ¸ééO„ŽûzÓ.Þ©?J«mö %'aùãZ¯–}*¹ï“HšK•Qû•>˜jËÒgŸíw¬Ðd—ç¥n9ù[ŸÇÒ²´û«†Ý¸[ŸZ`\ûYæ†A±5Ìû•Ôd m­N>ƒÒ«Ûžvã%þoÊ öØ:ï÷¨`º®å *ã Îîõsb;{ÕH­`’yÙâRI Ó§À¶O9îÔPœÜËÏ#hÝëL6øáqޤwªÐéño”«Ê¹o”>”€Ñùp¾‡îНn}rļsÓå¨ZÅú­äËýCgkr«# ¦9và¨;»f€4ŽBúã þõAk–‹9䳨éÏJcÇv>íÂ’VŽ«Y­è±‡ýK‚9ëÍh>ÑHÂqŽõ§Ëg' ózqUnæ½Kk†òb8R‰}*X¦¹EZѲ««"œÐ·ꂞìª~ðÜ9©y<¶9ÝóJ¡qu kpÖÓs.sòž98àûTx£³Ì1þ¯÷'åãÚ€%eÿM‰WllÉòýߺ?Ʀùx¡9^¿{“YcQ³7ÒdÈŠuG6ìú}*ÀÔìØa®‘ ˜ïÆÓíš–Yî2B†—ïßjŒ:«®ím1ĉ˕\pv6iÖW¶Ï´Ç—‘øÜ¿/Ìp•E«²Ê–¨²®áUú|ÇÖ€-ý†Û`Sk>è p}j¡Ó4÷¾èÊ . WæÏÈÖ˜a·÷˜þë§“ííÍ@¤ýªá¤À]ªŒCtûÇÌPvÓmg2D:“8Ã{S,ôð¶Ñm»¹BTgýÖ=±øÕË·+o1°BÝ÷x850P¸Çlqǽfµœÿh…RþqÕ°ÁiÇÓÞ§[k°«‹¾~ðÝãòúÔ„n¼/! ÎßâÈçô©™‚©$p}Þþª£gâÀ‡Ïˆç.‰»þ>ô7Û¾ÑÓ(RÜ–UÈFØN9ê})ƒ\6p:g¯µWyoÑ3äBø¥ýzRC5âÄ›¬ûvuëëV§ÿTÝÇó§ãŒ{:Ðx»”ÜüÖS A×ó§O~«Ì3¯¦PÕ¨ù–B}”ýh˜çÕ¿ZuFK.?¼¤Smï yœ‰WM]=*#C½Š)Ëzu /."mŠ%_™€«žbmá…Q»·…®à_)~÷'mY{X6Ýô Á"NáÉõ¡äbÕ6PyC†Ú5±ŒÎ0ò?½@Ùð½i°9)œ÷ª“Y‘Û;Š!µ™"\NzzP©çQÇZ•›Ž•—å]}¡z§4¿jUà!  p°98ïD…N½S¶k‘Z<ý #\Kæ(15h¸¦"¡bxªÏt@ù‘©¶÷jA$¾”°H7+ô•Ÿü{¯9>µZñ.þÎáeQÇÞÅ6Ì^ TÊ ãîÐ÷û†²ô<í¹cÞVÀüjÄÍv±‘Iúô¬ß½À·“g.rÙ÷ gAüê·[¾=94ž|Árb8ª‰u/ÛØ< >_” iööª·˜ó"Ï'wö£ŸõmŸ§J§u|‚â U€ÏÞ"€5*¾IÏOZgÛbîq튂öò‡–ç°  q"y)ò¸éD‘FAÊ)=©‘\DQpã8¥’hü¶ùÀ\u e{;H<¶>Zä·ÌjCcnWXÚ‹)Û©ŒÕÃÖ€1m,`}Jç÷EUq…ýëCì(!ßwnzTwü~ÝÙ9Öã¥c›þÑ9Ü¿;¶lçþ– Ú¤Þœö_”UŸçü¨òÚûäÿH wp¸â­l¿^ÆÞøéS\¬G÷¾õOÆ=©—v÷ÂÝþDÀês÷ªÄs\ˆÓ}¿`S^«¾~QSÿ]0 {‰V˜w¥W¶½_ GQ붯ËÄ]j8@òS#·J­5ü. —o&¨è B7rÌ@5©w‘o!\o y5SD‰²¢Ü£ É  ž|$$\ÍGjèQаûÇ=jG‚#ó”°íPAg”G–bNïNilŸþµW¶Æ%nÛÎïzkÙA´ðÁ{€O5ZÖǓʮYŠüÝi¤ ÿ¨m¾ãäðÎÙ9éPY€ù/'©Áæ ‚å·R³«~ë/¿Z@i·LàŸö}j 0|Ï$–Î;éUdþÒ@ø06Ñä}ª;Y/ÒÖmã`Tù±Ï½_‚Û»c ·*1Þˆ~H”q€üýÞ*…åÕе›6FÖ+'J—íҩ짺0r?:šøfÙ”çœ \ýàH©°ry\¢òvÿùAËn[¢…Û,WŸá;Gô4æÒ¬—?»ËËm•— ëQ[iÑþø ‹ž%ÀÛ1 ÿ:Ò´ä™~o¾?ɨ­Iò7a¾ó?ùÁ'Š¡w§Kåm[ëœUÃ0mÀ‘ÍNlî°Ãíîz+nNúÜÕ™öù±+)8lçolŠ”,íÂŽ~_á  ¨àÔ ÔäÝDßu h×±÷¥¼þÒòüö§pØØÜáùÕÛm€ÌÙ Aç¢ôþ”·<„Rqó(?7Až¿¥Wó5!ŸÝ@sé)öéMŽ{Ýò7عÜ:H¼qÒ´y÷ôíǽGJ±õcŽ:@g¼œ c0ËOjC~|öÓ®?é™éøU™eêXdSØ€¼}Eg[jP|ìÛ×-ŽUºSßPµyPyàzóÒ­Ûq þ}{RcuÀÊô^´Ã}nÉ‘2úýáE¬ÑA 9æq›1¯OîÓVÒÜĹ:v€ ójh7.I«s8TnEg[YÛ5ôÅb:U››HŠcæð#@£aå¯=©ˆs3}*°E·†“þú¨¡±œ¬²}häì6SׄJ¡5¤¹P· ×½Ha¹ ÄàýEM3ŸaO”á Q¶K îw+sK;]÷^ˆÅ0s8ö¨|éÕFb57Nebca@äû´ØQv}ÑU&¼U^TÔÑ]'–(R.gÒ¦þuŸn.üÙs³¯Þ«é>‹çLBKÍÔc·­Xÿ8¬Â×oL¢ŽzU­÷?óÍ}Îh.óº0:îëéVEe]ÍqöˆƒäÝÐjߟ8Çî~´ëÈARÅ‘g®+7P¼•aâÿhúTñÞ( qéÖ€,\œ@ç¶9ªZüƒ‘Œšn¡¨µ|Å&í§ Š‡E½tø†§'(³üê´8û\ŸN´Ÿnƒnw`z‘U­/ y¥9Àéƒ@, ©2«]DaS}ª"~øÍT70µø à°óÒ€/\ýÑš«y m6®SVD¨GÞª÷r'È u<-H¶Ð„Uò×héQÜ[BblÇž:UÃÖ£œþåðyÇZ«gc Û¨ç×&¥6ˆ†`;óRÛà[§¦)î~Sú béV‹æÜ²Hê»ø­o0NÛ½ÅG¥ä¬ÌG%ê÷oëH ¨a¹û|›gÜ1ËÒ¬…¼ùÓN´ë~g˜ã ž•k¿¿jʯDðePŒýÐjßr˜r}9ù¼O§>Õcüýi›uu(TýÃ`°É«?jþôN=±N¸ûñ8Ý÷j~þôVêî$·%ƒtô¥†ê)>qÓš–óCd bm\¨àp(ž¥qö|ß¼mãž´ºK*éÐÙùG·i§JD@’1ô©lìᑘŒûжo”á¹ÇÞ¨íˆû:á"¡žÒ! }ààImk¶Þ0%|…ù¨ÛdÓuEiÿ©èFsQO ¬/¶á€ÇôÛxnÞ%óùGUéH Np„‘ÿô¦[ܧ¨Q“޵ÇÚ– ˜É É óJ­t©ùHH( @\¶Ïþé(? r`&3Œ1ÏJ¡qr-dfáŽÒCô©¾Ù6pÖStè šžã”âo¨È§àç¯#ø±ÔzVtú†Öóä¿]ºÔ¿ÚÊÈ }Ðbn(I‡ï­Õ@qdéòŸñ©HSØØxo÷«=µ6¼E3í±9žôIutg…^ÅÏSéÜ1ÿ׫öÃm¼k’À(Áãò¦Eàï± û½A=?J¯$U%ìnz|ß*œþF™o|¢/ãw'÷G“øUÙÎØœúxíJ€,aO`õ  ?ÚVÆ~K©<£iÓjv¢'ÄËœd ÷«)ÍÃäó€§šK¥Vˆ‚ ç{úP!¼¶òÔ ÐàxQ ñ<ÎDŠqÔT¦ˆæ$?ðùTÚ[6ò`O½ýÚ}Ë©‡ÌqS6õªSØÛy‘â%7ðæ¥šÚ%Œýáôc@ ÓÎç™øå¸©å ²z«¦Û¨µÎæù‰ïJÖ…®‰ä  ÌFÚdtŸSUæ·”!ÄíÓÒˆ`b¾•NÜÊ¢¤~•HGqö¾§Ÿ1¸T?tñë@ÛŸzIyuõ -:Ä3g/žˆÐæéQ¼±¨e¹*§1µ6¡å唊šuR: “ÊoÝQï#2(©þÓ÷¨Nã?ít©fÙÏrQ³''öE«atùû'š]65]>´¶©ë·‘ :A¸|ÃU»)ãû,_0Ý´P2ËF˜åG°ªÖÐÆd•¶.Siùǹªör#+•o—wç@hpFÅÁëTþÃn× ˜ÀÚ8÷­ Ã×ðª±o_œ¶?*wØ¡ÎvóüªÞŸIƒçïg¥jUyùš1Û4ϱ(¸^üõ¨/-ÀÃÏ|­/çP]DÎ(¼6÷+ þÿ/N”KØFÄ«ÓïWSî¥2ä’>\t  ­%nÖÙŽUÆãøÕÓ%Ò˜ôÒickÎM\=êh*Ê{Ÿ:mÐÛ¹ÁàU¯µ2ƒ˜\\S¬±±ñÓw_Z³õ…f›ÑöÐ'Q·û½jÇÛaÏ'§·Jp¼n™ Sm^xïH RÞ@n"ùÆ{š´³ÂØÄƒZŠXc{ˆEÂò¢¥ñnÏ–3ü©€Û¹`‡=ªPó­U¼´†MƒnáÍ)±‹±`¾©_^9ÓÈS€XïW¢D€õŠÆÖíBÅ™Ÿ{JÉ­µ•P¹m½É¦÷'?Óš‘8Eö=k>ò+¿ þüuÆÝ½jm·ƒ4dã®)-çïêGÔõ'¶0ÕŸy%à„þé –àõæ§ûEÈ#u¶[Ñ[µMuþ¥‡||¢ŸÆ8?)þ,ÖuÍó€û4ÛK›õ7ö„\oIWý’([¾DcÕ×åüj^}yN:ŠÎ›QµóáNwe˜©ä`Õ…¼¶8 4}>AœPÌ?n«Ž eðþ5)Û†ç ßxç½V7ïzª³/ÜlýEZÞ ÎyèW==踯݊ ˆÕO¶Iÿ Ã_š0ûÙ}G ýõÃd¶ÂÿµòÿõêÇñ`cpèqÐzP|² OÙâÉ•ŽJvý)—ºmŸÙe+nªY~Ld~unÓ›t#6]¹Éçó§ÎFÎ9VuÉÏ}Àb€+ :Ùp¥D<)YœséU¥±îÙEÝÊýâ{§ŽÞ­nH|†«}íDeOË>™n¿øíBl®06_\/?ĨÛOåT4{{¹ –U¼|ìyˆ6XµlÌÁas Ü€aþO¼xçéT´5A¤E¸`¸Äœrxþt˸µ‹å¸·È æ"§9Ö¥ÿ‰–-kó^j{œ3Ä®@%ðøn€"¬É$ã³|ßtsƒ@PÍ©šÞ.\.D¸ÁÀã¥-åÕ÷êl±¿åâU;Où5zÙJ£|Ìw;g§žJK•,#^Aið÷çô ÕÏýåñ‡½ê8oÝK›)À\ùËëÞ´±ž@>«ü^µ^צašC·¯QÇô  ·Wʉ±íç^@»=*oísæ¨rÓ×¥O) Ñ/P[róR·ýÇ=h6 N×s“)8Éþtéu+Fduå¿*·n£ËÎ3–>œÓ%…â<Ƨ®r£ó ûm±Yãõê8¢Úâ"Dõ³[@Pî†?ûã½2; _-qOJV–3t€2ð3×µ-쪶Îw­@š}¯Ú[ö5£aÃòï }ú½dBÚF3ü4ä`Ó·°ªë¦Æ#I(ãûÕs‘<ƒš»;a =p}+:{Ir \·^â¦k{•_–qøŠž#™Z1ù*•¼wcqÞ­Í$ÿlàaO4¢£µF¼ÊM@e¹QÌYüj8g›sˆÐÙ~é¡|±ÀªS^0ëT¢ñB ‚? Ä0ùE=àˆÿª±]ÆÓjÁ¹ûÔ§oþ¥jCúÕ{yãòSæíÖ¤3Ç´ÜS¶<ÙO¿Z°~•RÎhØ;0[V|ÅÏÞ  ê Þ“Œ¿•YÀöúÕX%F¸« ¦¬î^9ú «tˆÓD »ºzÕ“÷QíÅW•»Œg-üªÎ}è'_‰>ÂØUÉ øÕÛ{x–ÙbãhíTõâ>Ïž†EãÖ´ãâ5úPR[Űæ1ôªövq*6’ß•\—îZe¯úŸlÐ1†Ö<`úæ©ÛÙ/Úåu‘Õ~½kPôªöùó$'­7ìÎ?å«{ §5µÇÛ"Û>O|Ž•«þsUÏ7KéŠÊº‰F=qU¯Eï“Õzôõ­J¯uü«f€#v f5'Њî{•‚M°e±×Fé»h>Âú6„’w1Ò­ ؽøš,‘E°à`œ“Sã e(œP≠~*Ø™ñ¥A ¼FyXÄ»*_²ÃŒmZ@Gæ)¼0'oåVUèj€³„ݳ… ìzÕ‘j ýçÏûÔÀtç÷±ö¸©_~õNk]×1‘3Œ{ÔžD¼âvöã­ )êç2Z(\ƒ0æ´û? Æ¿Šs{f‚aÙŽ•£‹ ȮÔ☹è‹Ôîþ57ÿf³®ZóÌ·®î™©üëN`× Òºë?x¸â¦^=}k:âêA5ºµ»ãvr9ÏcíkÞ)Óåé@¸å¢®>_Nõ.>ßxã­R–ò<@–IÊžx©¾ÙÖ¦á÷Fêlˆ Ü@*ð¬Ê1ôÿ”Åò®Òy>õT][=ù :q]Þ§ÿ­V„¨ØäsÛ#z¬-àk×f2 mryý)ÆÎÛêWäêvŸŠXXîví¤+{ü¿ýz›¾7»ÇP k rfÚ›\ÈH ‘Ò–k8LË$ª»r¸•‡<Ôöñî¹<;3/=Nâh¼cö9½YH?7Ýlc€+[X…¶Vîu@$IѸ⣹´¸ÝÓÒŒ†ÚvàžžÕ©é‘ìWŽ=ê´À5ÔÊ[ïãïqŒÿãÔ·½ÿ¥çæÁ œûñU‘5µÝ7íº#óqžÇýªÕ'if=T|ÇoUç¥U³À–à¯Þcœãfþ”OR}F++†o³0òÈb»ÁÍ-œ—ðÚ¦Þ²!ÿ-Šü¾¤cÚ¯:-—/´ Ý÷”‘Ö´cù#UC½@ù~o¾(5®oEÜ(l³±ñ89 ÿŸZ˜ÝÜ*üöåçwëSšùù-²1éó'ÒŸp|¸¤nè¤çoQé@m¯Ë@…ì®pÃæýÖCRI¨FnaW†qÔ¶aaž8þu~$òáE=Q'oðÓ6âìd©¯Cÿê [R¶Û—v^>bcqý*;=FÔÂ7̨\–l±9«³°Hœ³cjóót´–ɶÞ5` sÓÞ€*BÕîSô-ÃŽ¥Y7pÉóSžš±#ݹh×îÐpi—v¶ífÞ<‘ýÁÅM *ăp̹êßGfê|Â}ï½Vw Ï6köÅ`ì8ëëV~ÏÇßJjo:ŒíàzUœÐ¹o!šØ I>g‚µRB KTucºúÑsÆüÖ¸è(Jæ9ü‚<À«r°®JçÒ¬\"=Í,?êWéÖ7ÚBœ'ùU[&¹÷(<òÞµ¢ÿpúT6ŸpñߥË(ëÇ¥U[™~Û†…ºqŠÒþu]0n_hŸjçî7¹ÅUº½@ñ®Ö Ÿ½ŠÒü8ª· ­‡ïUO´[=ß&6õÝß5kÍRßywtÔ€†n“åU8¥1DË«ƒüTÔek—Ãç 9Ï^MKéúîÐ%´·{ÉY NЏÀã­<ØÛmæù~÷É÷©ðÿ¬œ±È݆ã¯Ê*c‘Ð ŽŸJ̓M¶&]±á™É\1*Ca2²Ìª~é·Z±jrfbÀç©Üh¹}¶ò·û<ýʧic²Ö ·s”nùÆâ›ykqå*‹É~ia•Oñu­AS€6•þµ ÏúÈCsóüÇoÞI ZÞð+ÿ¤†ãt îý}Ꚁ¿ÏypÿÏ3П¯û5©‚¤ŒŽœtZ­j•“œ*ìºõ?û5D ¥~ÌÛWåqÅCd÷ |¨tŽë‰ˆÝ’ÙéÍi6ðß)9S»©ô¨lNë8có¨|äpxÊÿ:ËÕ¥ºsk·Vß8#l»³áéZh¹þ<ä둵àwj½ð2êÚz+lûòctZXÈÊ€3Ê‚½žh.É>Ñ; þRª¸EùF9}é//ÇÙÙÊåáscÁïW­†å‘€yX¯ïÿÖ¥¹É1*†“ÔŒŸé@ÿ´ábpr¹úw¨¢Õ­>Ó!ÞàÜ­Ï\ö­<ÿŠüÝO¥AmÌ—9Ìœ`Žp:PK­VÌÛ²‰òOËP{Õ…Ôl°Ú£8àå—Ÿz}â«*.Ýãzö#=*VŠ2cVÿ€ŽET·¼¶ieo>3– ÔsïRO»©Í¢B‚Ë(¯ÌkR!O¥+ýÃ@VÚ#!ne åªoì™Ã[ÙsîkJ×ýV}êjç#ÒoâO.õþn¤óVM–¤1¶ì`vÛÖ´¡æg©Íq÷öú—ö¤È®ßÂ1À­Ljê½"-ëRNwk¯¢š× g=y6ª±cÈLwÁ§Ã{¨,Cu—q†­{¿õu*”}( ]RíbbldÝúTVZðöÒõå¶×A([p*+X×È_”PpÖ¡Áߪªõ¦[kÎòHÇ`è°bŒõEüª¤¶í,¤Ä¾(±êV²6Õ•KT-}l÷h©*œu9«¦ÆØÿËüª”šU›Ý/îTqÚ€.ùñm:í=9ëTuI¢+ùƒqaš™ô{GÆPñӚοÑ-•â1îV,9Ím#(nZŠé—ìíÏê©ÑT®ÄÃþjµÞ0ä¼—Ž€µlG-}1À¥cÁþõe 2ýGË|߈¦Égª¬g`ÿÀhN×ýWây©OOóÍaÚ&®°/1²ú•¦ÕÑr`Ö€4mÿŒ÷-ǵN¸ükÚûPT;¬ËrrA«1ê“ÿËK)WéÍ_\ßð©9ôæ±"Ö•f—Ì‚AÏeÎ*íË^þbúå4.ízbîÄ?jaHåxôÅsÖ:¥¡ÔîefsZË©Y·Kˆóßæ¤Â¼|ª– ;{ÓÚÞ]­ìϧz¯ݳÜK¶eã|ÝjК3ÑÔçߥ0*}Ž»rÐ/ Ó­/öe®8B1ܽíRBêf˜ïÎÒ÷â§' ‡Ú±iÐyòmÞá¾ïçÓþVÅÔê¿òÓŸ½ÅZ„Þ¶~Rçwò© 9í¼vÏjÊ‚Æq¹¢¾“xbn˜Î?¥=íïUËÿ“ïÊ2ÇÒ®Yóì =~cIvÛme8þÿ8  6ÑjKm[ˆŽåWîqM½:—Ù_+Ö; ó–ÉÆkQoËЮ:ûÔ7‡ˆÃ}ï17vÎ¥WóµÜZÚ&(>v ~aè*¸¾ªØ®QIP$þjúØÊ žžõ\mA¶¶BÇòüÝIcÇþ;@‹é°¥lfÚ~hþqózóPÛj'ÌšÖä+Ë÷‚çÛúÕê>ñô?túUk1º ÜþñÜöùæçùPK­U¬§Ê¹F(zÅþ­±N‡R´XcR]ÐhÈGz±¨mXùd`„mêKšŸhÁÞ ò¿Ë÷ò  3¨Xɯ+³®Å‹ïÀߟþ°­/í9ºƒ“ó|Øù¸ý*(WÌÕï]…6üy«‘ÅöyšHãÈRØsŠŠÆòÙ­P›ˆ†þ_÷˜Ã­9î!’îó×w,v¿CŒìÔèì­ü¥G·‹!v·ëPý‚ѯXH°årpJ½¿wñc?í”úT6Mº À‘½™û|¼ô¨eÓl–6?fAÆ3´qïIk¦Û}–?Üír£×ïzõ  ·úDqÉqòôã‘S*ñŽGËÐVkX@oÓhu™¸oÎ¥¸³Œ@æ9&¯ï_­Y¶`Nœ/éIÇÚº•py¨’ÅU@Iç/ïOJŠ+6óå"î~1Ÿ·å@.¾N8ÇZt|F½Ž=zU »Yv’à9ÛÓ×¥Mök¿ñößŠŠ–.fÿŸ¥:àü›OséTíaºÚÍç¯,z¥GwæÆ<Ä<ä|”}ÆÕçµUÓÆD¬{µ}¥bl´xÇ\*¹ŽØp‡<õ  r¬AïR1ùj–ë“p2‹Àþõ:igT?ºÿǨÔ?sëLnfZ†9e ÄÔĸs9ÌMǵ]ái°}Î*´÷[PüùS¢º_(g4+àÈ¢¤`1UÒñéR½ÌaO4ø‘pr¦K d”RÃ2ÎE!™ ª3@6ñcîÒÅk'ýê{ÓâaÏ4oÉ—þzþ•^ò9ü“‰GåZZóîb˜†Æ—5ù—¥6ar#l«cîŠdÿêS´7BÝ2«Ÿ­J^ä¸?:š!O¥=¾é  ÛI®|ÙwEßµXóåòÈÓ­zÈ}êsÒ€9ÁtçÄ4L0¸µö¯TaøV}·Í¯L}VÎ¥3o/QB‚'Ò¬‹¨°9¤»U%QÖ¦òÓtP{›¸–;ûRÚ\DmÓæ(¼†/!òƒ¥$°ˆl(s*cï ¯dêÆS¸}ê{ÚÅ´àbªXÙ G!˜ezÒÈõªá³yøR}—ÒFªIi7Û–sŒw  j£|ssn¿íRùC¤Ãò¬û´¼þÑ·Õ½¨v¡ºûª=ÅC›Áü*­w5ÚÉòAù½hV£˜â&úU´\°Π¼¼•mÜýúPëõ ô§¿Ý5F à!LÅ ãû´³j,LHaÇ÷hͰýÈ©0*­äÝ>nÕ7Ú¡þø¤mãBd;G-éR5¼$sþU œñ4D‡±©ÚDÚ~a@Úe¼×w¬Ñ)M£Š¼ÚM“u*¯ °hî?zV­\Ð4:‹¼§Ë?{šyðýŸðù‹ôj½fs·«šœô¦ e¥)s2a°0Õ)Ñ&_õz„ãêkJÈæ&oWoçS9ÂíH +m6üFY5'‚¹ïJözÄhJß#`wZ׳æÖ3ê¹¢í¶ZÊÞŠhÖ i-£Û%¹r¡‡JmçöЕ¢·`ä¶ºÆØÔz †ìÿ©_ïJ?ÇúPOÚ5µmÆÆ&8ÇUæ¿Õ[um;”bÊgwþµÒÕg9Ô"_HØþ¢€1¿µï•~}2qóg ÿõª×\\;ØÎ¥‚˜ÿõ×QPÁ‚óô†Þ#·ßk:Bƒ¯­Gi¯Y%´qÈ’´yŸ'S[·ÁE”Ĩ?!íOЄ å&ÇÝ  ­vÆQÞÜȾoÊGÊ9ãñ«k®iü´®~éá¾ïøô«SÙÛ5ݺýž/âcòLZ{é–,m"ÿ¾h#NÔ¬’âêSryBÍÕ@5jïQ´kR¢ê6É þ°rjK±¸±2Én­¾F+žÃ8c@Eõ·üüFØùOο7½E ÌspL¨ãåŒò>oÖš|;¦ŸùbGÑVƒÃ¶#’$ÆâÍï@¯fì²üÀälQI/Ü4BÊñZ6;X|Þ•`ÝGƒKh•Ó½Jê»O€0tÛ¨ŸWºlûVßÚ"þõdé1£ßݹQ÷±ZæÏðŠT¸¸ˆÏîjßšŸÞNâÖº(*sg þÖ vê`?0©£ "óÚ³ï,¢ò° Ƭ-¦bF dòŸÝš†ÇýGÕGqnþKâSÒ¡°·mW÷´¥U ææZCÈþ5ª–‚ìK1;O=hV³¥ùµx½”ÔûîGTœ³Nu“º.‰@UZ盘½;ÏqÖ6ª3^ÄÂ1°ëÚ€5j½ïü{µkNùüª½íä^ZŒõa@ ‹ÇjŽåWÈ~Jâ,˜TwsGä7Î),1 …ÑÓÒ‡Š=§(¿•*:í_˜RJëå1Èé@í-aû8ýØç&–{8<§;{zÔ¶¤}ž>{SoÛm”Í覘:š=‡™–˜ôjÒ{<)ÄÒÆ¢ÐWn•Ó5vSˆœûR:ÆÎQj»n\d“Ò¦x.•ÛžÝÖ¬Y¶±º)n[m¼‡ÑMgXG|,Ь‘œóó }Ì—ÑÚÈZ8Žôj¹f6ÚD?ÙÍ@ÿ¡Éî1@ šñ-ã_²g :5A¨ÞÜ‹V_±Ió¹Èõ­uáEU¿äB¿Þ•žhí@ù¬nà* KuÕ¨6Ó¨ Í÷=¿úõ±UœgP‹ý˜ßù­Cý©ûÑÎ?í“Uhõ;S©HÌ̪"US×'ÿ­ZõNм¼oö•%ÿëÐý§d庯 †¡jabn#Èç–í¸Õ÷ ’J«¦Áöu¾è×” Èõæ€#¿»·km«uù!=ýXñ5=Ü¢;Id|¨[ô¬øt»/nsmÕÚÇCŒŸæ* gL±ƒLžXàÀpA>´wBQl?ÙÍZ•‡Ú!_«~Ÿýz£m£Z h²®hÎ$aÍDt¨ eœõÓÝV}ŽÊ:†êÒ!nÿ{§÷ªîj Ó‹g  ³U…w(ïUuˆ i³0–O»Ó5¨ŸqGµgxöérµúÐi¶²¥„!gaòŽ1O»Šém¤ÄãîŸá«v£m´Cý‘M½8¶~(¼1Þ¬(<ÈÎ÷j A¯–Î^#mFýÔcü¨?íH;¬£ëªëªÚ÷&BŒ•>¦µp*º«_]6ôÏõ ûRËþ~}MWÓï­HÄ`¼ÌynÝ?¥h´q‘Ê/åT´ÛhÆ6hPïËýßRM>öòc;,ñ’#la½ªkw‰`¯Ê uªz••¯ÙñîfU/«S.Äÿˬ÷Í>b­yoó—s~˜þµg#ֲޙdu‚ˆ“ƒî?úõ9Ò­1¸úHßã@°;žéÿ½1ýÒ«xˆçOX‡üµ•SõÏô¦iúd-hÌK³7Ë+ç¥VÕ4õûeŒ"yÈ’\á¤'î=è  Ux~kû†ôU_æ­CýœßÃ{t?à`ÿJ¯kc34î·Ó¯ï1Ÿ”ç{Pûãþ‹ þðÛùñSÖEåÎØ×íò6ù`¢úÕŸ²ÞÐ@ÿߥ  ¢ù¯g>Š«üéoOú+Üb¨ÚÛ^—™…ðÉ|sçëEÜ7ØMÜgsùeë@ƒ…ǵC2Ìßícô¨|»ñÿ/0ûdøªŠÕ/¶3y°|ÌO(Æ€-Üó±}XTÇ¥fÉöã4êŠç†æ¦‘¯•Ë ÿð  í¾ë7«›„U·kÕuï÷ÿúÔÕ’ôÜçÈ…ÿžŸýj¿!ÂHF!_¥R¸šðFÑ×ðzxšébèÙã³PÅójºµb»Y¶sܦslÝqÖ¥šælªý™úЀáÒ£‹™Õv½eàÂÙô¦ÛÝœ11?_Jµ(ô©6®ÌBKÕóln¾•+^Æß•>8SÎl ü©'‚-¿êÖ£µ½²9>”Muð¤àç¥N-¢Ø>JŠ;XŒ¤íýjcq>ð¦A231Ü(³ZÇ·¿çKªˆÆ©ÓJ¾µ(uØ9  Ÿe>hÄR´2Ä”ô`e©†(ÿÙleptonica-1.70/prog/adaptnorm_reg.c0000644000175000017500000001410512240303552015437 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * adaptnorm_reg.c * * Image normalization for two extreme cases: * * variable and low contrast * * good contrast but fast varying background */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 w, h; l_float32 mps; PIX *pixs, *pixt, *pixmin, *pixd; PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; PIX *pixt7, *pixt8, *pixt9, *pixt10, *pixt11, *pixt12; PIX *pixt13, *pixt14, *pixt15, *pixt16; PIXA *pixac; static char mainName[] = "adaptnorm_reg"; /* ---------------------------------------------------------- * * Normalize by adaptively expanding the dynamic range * * ---------------------------------------------------------- */ pixac = pixaCreate(0); pixs = pixRead("lighttext.jpg"); pixGetDimensions(pixs, &w, &h, NULL); pixSaveTiled(pixs, pixac, 1.0, 1, 20, 8); startTimer(); pixt1 = pixContrastNorm(NULL, pixs, 10, 10, 40, 2, 2); mps = 0.000001 * w * h / stopTimer(); fprintf(stderr, "Time: Contrast norm: %7.3f Mpix/sec\n", mps); pixSaveTiled(pixt1, pixac, 1.0, 1, 40, 8); pixWrite("/tmp/pixt1.png", pixt1, IFF_PNG); /* Apply a gamma to clean up the remaining background */ pixt2 = pixGammaTRC(NULL, pixt1, 1.5, 50, 235); pixSaveTiled(pixt2, pixac, 1.0, 0, 40, 8); pixWrite("/tmp/pixt2.png", pixt2, IFF_PNG); /* Here are two possible output display images; a dithered * 2 bpp image and a 7 level thresholded 4 bpp image */ pixt3 = pixDitherTo2bpp(pixt2, 1); pixSaveTiled(pixt3, pixac, 1.0, 0, 40, 8); pixWrite("/tmp/pixt3.png", pixt3, IFF_PNG); pixt4 = pixThresholdTo4bpp(pixt2, 7, 1); pixSaveTiled(pixt4, pixac, 1.0, 0, 40, 8); pixWrite("/tmp/pixt4.png", pixt4, IFF_PNG); /* Binary image produced from 8 bpp normalized ones, * before and after the gamma correction. */ pixt5 = pixThresholdToBinary(pixt1, 180); pixSaveTiled(pixt5, pixac, 1.0, 1, 40, 8); pixWrite("/tmp/pixt5.png", pixt5, IFF_PNG); pixt6 = pixThresholdToBinary(pixt2, 200); pixSaveTiled(pixt6, pixac, 1.0, 0, 40, 8); pixWrite("/tmp/pixt6.png", pixt6, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixd = pixaDisplay(pixac, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/norm.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixac); /* ---------------------------------------------------------- * * Normalize for rapidly varying background * * ---------------------------------------------------------- */ pixac = pixaCreate(0); pixs = pixRead("w91frag.jpg"); pixGetDimensions(pixs, &w, &h, NULL); pixSaveTiled(pixs, pixac, 1.0, 1, 20, 8); startTimer(); pixt7 = pixBackgroundNormFlex(pixs, 7, 7, 1, 1, 10); mps = 0.000001 * w * h / stopTimer(); fprintf(stderr, "Time: Flexible bg norm: %7.3f Mpix/sec\n", mps); pixSaveTiled(pixt7, pixac, 1.0, 0, 40, 8); pixWrite("/tmp/pixt7.png", pixt7, IFF_PNG); /* Now do it again in several steps */ pixt8 = pixScaleSmooth(pixs, 1./7., 1./7.); pixt = pixScale(pixt8, 7.0, 7.0); pixSaveTiled(pixt, pixac, 1.0, 1, 20, 8); pixDestroy(&pixt); pixLocalExtrema(pixt8, 0, 0, &pixmin, NULL); /* 1's at minima */ pixt9 = pixExpandBinaryReplicate(pixmin, 7); pixSaveTiled(pixt9, pixac, 1.0, 0, 20, 8); pixt10 = pixSeedfillGrayBasin(pixmin, pixt8, 10, 4); pixt11 = pixExtendByReplication(pixt10, 1, 1); pixt12 = pixGetInvBackgroundMap(pixt11, 200, 1, 1); /* smoothing incl. */ pixt13 = pixApplyInvBackgroundGrayMap(pixs, pixt12, 7, 7); pixSaveTiled(pixt13, pixac, 1.0, 0, 20, 8); /* Process the result for gray and binary output */ pixt14 = pixGammaTRCMasked(NULL, pixt7, NULL, 1.0, 100, 175); pixSaveTiled(pixt14, pixac, 1.0, 1, 20, 8); pixt15 = pixThresholdTo4bpp(pixt14, 10, 1); pixSaveTiled(pixt15, pixac, 1.0, 0, 20, 8); pixt16 = pixThresholdToBinary(pixt14, 190); pixSaveTiled(pixt16, pixac, 1.0, 0, 20, 8); pixDestroy(&pixs); pixDestroy(&pixt7); pixDestroy(&pixmin); pixDestroy(&pixt8); pixDestroy(&pixt9); pixDestroy(&pixt10); pixDestroy(&pixt11); pixDestroy(&pixt12); pixDestroy(&pixt13); pixDestroy(&pixt14); pixDestroy(&pixt15); pixDestroy(&pixt16); pixd = pixaDisplay(pixac, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/flex.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixac); return 0; } leptonica-1.70/prog/sudoku7.dat0000444000175000017500000000032611465606421014553 0ustar dandan# sudoku7.dat # 4 star sudoku (Jackson Hole daily) 7 8 6 0 0 0 5 0 3 0 0 0 0 0 8 0 6 2 0 0 0 0 5 0 0 4 0 3 4 0 0 8 0 0 0 0 0 0 5 0 0 0 4 0 0 0 0 0 0 6 0 0 3 5 0 3 0 0 1 0 0 0 0 6 9 0 8 0 0 0 0 0 8 0 4 0 0 0 1 7 9 leptonica-1.70/prog/bilinear_reg.c0000644000175000017500000001523012240303503015233 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bilinear_reg.c */ #include "allheaders.h" static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); /* Sample values. * 1: test with relatively large distortion * 2-3: invertability tests */ static const l_int32 x1[] = { 32, 32, 32}; static const l_int32 y1[] = { 150, 150, 150}; static const l_int32 x2[] = { 520, 520, 520}; static const l_int32 y2[] = { 150, 150, 150}; static const l_int32 x3[] = { 32, 32, 32}; static const l_int32 y3[] = { 612, 612, 612}; static const l_int32 x4[] = { 520, 520, 520}; static const l_int32 y4[] = { 612, 612, 612}; static const l_int32 xp1[] = { 32, 32, 32}; static const l_int32 yp1[] = { 150, 150, 150}; static const l_int32 xp2[] = { 520, 520, 520}; static const l_int32 yp2[] = { 44, 124, 140}; static const l_int32 xp3[] = { 32, 32, 32}; static const l_int32 yp3[] = { 612, 612, 612}; static const l_int32 xp4[] = { 520, 520, 520}; static const l_int32 yp4[] = { 694, 624, 622}; #define ALL 1 #define ADDED_BORDER_PIXELS 500 int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixgb, *pixt1, *pixt2, *pixt3, *pixt4, *pixg, *pixd; PIXA *pixa; PTA *ptas, *ptad; static char mainName[] = "bilinear_reg"; if (argc != 1) return ERROR_INT(" Syntax: bilinear_reg", mainName, 1); #if 1 pixs = pixRead("feyn.tif"); pixg = pixScaleToGray3(pixs); #else pixs = pixRead("marge.jpg"); pixg = pixConvertTo8(pixs, 0); #endif #if ALL /* Test non-invertability of sampling */ pixa = pixaCreate(0); for (i = 1; i < 3; i++) { pixgb = pixAddBorder(pixg, ADDED_BORDER_PIXELS, 255); MakePtas(i, &ptas, &ptad); pixt1 = pixBilinearSampledPta(pixgb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, 0.5, 1, 20, 8); pixt2 = pixBilinearSampledPta(pixt1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, 0.5, 0, 20, 0); pixd = pixRemoveBorder(pixt2, ADDED_BORDER_PIXELS); pixInvert(pixd, pixd); pixXor(pixd, pixd, pixg); pixSaveTiled(pixd, pixa, 0.5, 0, 20, 0); if (i == 0) pixWrite("/tmp/junksamp.png", pixt1, IFF_PNG); pixDestroy(&pixgb); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pixt1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/junkbilin1.png", pixt1, IFF_PNG); pixDisplay(pixt1, 100, 300); pixDestroy(&pixt1); pixaDestroy(&pixa); #endif #if ALL /* Test non-invertability of interpolation */ pixa = pixaCreate(0); for (i = 1; i < 3; i++) { pixgb = pixAddBorder(pixg, ADDED_BORDER_PIXELS, 255); MakePtas(i, &ptas, &ptad); pixt1 = pixBilinearPta(pixgb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pixt1, pixa, 0.5, 1, 20, 8); pixt2 = pixBilinearPta(pixt1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pixt2, pixa, 0.5, 0, 20, 0); pixd = pixRemoveBorder(pixt2, ADDED_BORDER_PIXELS); pixInvert(pixd, pixd); pixXor(pixd, pixd, pixg); pixSaveTiled(pixd, pixa, 0.5, 0, 20, 0); if (i == 0) pixWrite("/tmp/junkinterp.png", pixt1, IFF_PNG); pixDestroy(&pixgb); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pixt1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/junkbilin2.png", pixt1, IFF_PNG); pixDisplay(pixt1, 100, 300); pixDestroy(&pixt1); pixaDestroy(&pixa); #endif #if ALL /* test with large distortion and inversion */ MakePtas(0, &ptas, &ptad); pixa = pixaCreate(0); startTimer(); pixt1 = pixBilinearSampledPta(pixg, ptas, ptad, L_BRING_IN_WHITE); fprintf(stderr, " Time for pixBilinearSampled(): %6.2f sec\n", stopTimer()); pixSaveTiled(pixt1, pixa, 0.5, 1, 20, 8); startTimer(); pixt2 = pixBilinearPta(pixg, ptas, ptad, L_BRING_IN_WHITE); fprintf(stderr, " Time for pixBilinearInterpolated(): %6.2f sec\n", stopTimer()); pixSaveTiled(pixt2, pixa, 0.5, 0, 20, 8); pixt3 = pixBilinearSampledPta(pixt1, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pixt3, pixa, 0.5, 0, 20, 8); pixt4 = pixBilinearPta(pixt2, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pixt4, pixa, 0.5, 0, 20, 8); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/junkbilin3.png", pixt1, IFF_PNG); pixDisplay(pixt1, 100, 300); pixDestroy(&pixt1); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixg); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif return 0; } static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad) { *pptas = ptaCreate(4); ptaAddPt(*pptas, x1[i], y1[i]); ptaAddPt(*pptas, x2[i], y2[i]); ptaAddPt(*pptas, x3[i], y3[i]); ptaAddPt(*pptas, x4[i], y4[i]); *pptad = ptaCreate(4); ptaAddPt(*pptad, xp1[i], yp1[i]); ptaAddPt(*pptad, xp2[i], yp2[i]); ptaAddPt(*pptad, xp3[i], yp3[i]); ptaAddPt(*pptad, xp4[i], yp4[i]); return; } leptonica-1.70/prog/jbwords.c0000644000175000017500000001121712242266274014303 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jbwords.c * * jbwords dirin thresh weight rootname [firstpage npages] * * dirin: directory of input pages * reduction: 1 (full res) or 2 (half-res) * thresh: 0.80 is a reasonable compromise between accuracy * and number of classes, for characters * weight: 0.6 seems to work reasonably with thresh = 0.8. * rootname: used for naming the two output files (templates * and c.c. data) * firstpage: 0-based; default is 0 * npages: use 0 for all pages; default is 0 * */ #include "allheaders.h" /* Eliminate very large "words" */ static const l_int32 MAX_WORD_WIDTH = 500; static const l_int32 MAX_WORD_HEIGHT = 200; #define BUF_SIZE 512 /* select additional debug output */ #define RENDER_PAGES 1 #define RENDER_DEBUG 1 int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin, *rootname, *fname; l_int32 reduction, i, firstpage, npages, nfiles; l_float32 thresh, weight; JBDATA *data; JBCLASSER *classer; NUMA *natl; SARRAY *safiles; PIX *pix; PIXA *pixa, *pixadb; static char mainName[] = "jbwords"; if (argc != 6 && argc != 8) return ERROR_INT(" Syntax: jbwords dirin reduction thresh " "weight rootname [firstpage, npages]", mainName, 1); dirin = argv[1]; reduction = atoi(argv[2]); thresh = atof(argv[3]); weight = atof(argv[4]); rootname = argv[5]; if (argc == 6) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[6]); npages = atoi(argv[7]); } classer = jbWordsInTextlines(dirin, reduction, MAX_WORD_WIDTH, MAX_WORD_HEIGHT, thresh, weight, &natl, firstpage, npages); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite(rootname, data); #if RENDER_PAGES /* Render the pages from the classifier data, and write to file. * Use debugflag == FALSE to omit outlines of each component. */ pixa = jbDataRender(data, FALSE); npages = pixaGetCount(pixa); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixa); #endif /* RENDER_PAGES */ #if RENDER_DEBUG /* Use debugflag == TRUE to see outlines of each component. */ pixadb = jbDataRender(data, TRUE); /* Write the debug pages out */ npages = pixaGetCount(pixadb); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixadb, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.db.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixadb); #endif /* RENDER_DEBUG */ jbClasserDestroy(&classer); jbDataDestroy(&data); numaDestroy(&natl); return 0; } leptonica-1.70/prog/redcover.jpg0000444000175000017500000005227211751724474015011 0ustar dandanÿØÿàJFIF$$ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀhì"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ãywßKÔÿ¤óåÿžÒÿßf˜ÝOÔÔövW:…äv¶±4·’SŸä+éI]Ÿ&¯-üùç´¿÷٣ϗþ{Kÿ}št·SÇ ;É#E’O¥YÏÂÏ 2î¼2Gˆ•5½”÷NV™ˆ¥9Àdœž1M´•î -èˆüùç´¿÷٣ϗþ{Kÿ}šè¼9áØ5­>öâi§F„•Xb[¾ù3ü9@¿söö“ݳ¬´Œ‘´¬ePKÀ Ê5á'$ŸÃ¹n”’O¸ß>_ùí/ýöhóåÿžÒÿßfŸ=¤ÖÓK Ñ2¼NѸëµÇQ‘Å6in'Ž‘šYX")ã$œϹ­SV½ÈåbyòÿÏiï³GŸ/üö—þû5%Å”ö¬Vx™(b8‘œtÈõ¤ûÿgiÌN#WXŽä^€ÒS‹Ù‡+çËÿ=¥ÿ¾Í|¿óÚ_ûìÕ¨ô«¹¬–í?³´žXv™æôÁ9ý*™ÂîÚÛ1Ä`RS‹ê²ì;Ï—þ{Kÿ}š<ùç´¿÷Ù¦˜KnFq»#úúU©´«Ø, ½’Ý…¼ç¸ äóŽÈÎÖëèi¹Åuƒ{üùç´¿÷٣ϗþ{Kÿ}š#·žYDI³³ˆÂÉcÀ_j UÊ_ùí/ýöj­ÝÒXÛ´ÎsýÕõ>•ˆbÕuU2e„ôU8è+’¾.tz³³ ‚©ˆÕln¶¯g |Ùôü©£[¶,íÌ é—aüëÔkWÚ=sUšÒXAÞ¬¹ìÃ5ÄóvG©ý“»gj·2îYä+ê$$QçËÿ=¥ÿ¾Íq¶ÓÏe h\ªžªGÊk§²¼Kë_0 ¬8eþé®Ü>*tÙžf+:öè·çËÿ=dÿ¾Í4Þ\¡ÂÜÎ\ ¦Ôo÷«¦[‘d­ÔýMiè:ªèú½h Í0EÉqç„Öc}ãõ4”§8¸½˜£'tu±x¦Îgå[ܨ·»Y±‘÷“6¾%ǧõ >'Š+;R—D[‚¦@ÃpÊÊ¥”g†ýà=¹^µÌQX}N•¾³3kZ׬ž\k,iö™§*ÍÁÞWê0y÷«—'á‰#ŽáH³–݆ìº4@û?&~§¥s4U}Z”m¢%Wšm÷:oxŽ ÊHf·¸‘Ös<^T€+“&Ù=WæÏÖªxgY‹A¾{™mÚ}ȱmû»Ô¸çÕA‰¬J)¼=7ÍýíÁWš·–ÇS‹#ŠÚÆ'‚WòæiîT®L‡9ëÿ-1ÛÞ¨_ëƒPñ”±ºÁˆËîlv¶OãX´Tà JñC•yÉY2xž6´™.!žIn®Œ× +!xßP#ÀãQOâ6¹ÑnìåYâês;ÎNrI_—=vázzãÒ¹ê(XZiÞÞ`ñ}M‹]^+[ X¤ß\áÇC$¨ÁEl?Œ o³Çö{³Å4må¹v#ä.:tX‡ü½k¢‰aiÉÝ„kÎ*È诼D·¶:ŒDÝ.ž0¥ˆQµTnÆ2xo”är9ÈÉžßÅ6ðYi}šWk)c‘ò—Íû½É>gsÆÞ1“\µ}R•¬Ãë»gPþ'¼Ã‹·o¶Çsæ ÷BNÞçgCžÜä¬^&·ŠKfd¼˜Ãu,€¹#ïì-—ŸCósÇ-E/©Òµ‡õ™îtw^"ŠxîÔÁ+yæà†}¿òÐÄFqÿ\Î~µ&³âq© ÁÜGöˆ’1’Ð$g+ÇQócüÌQMa)&šBx‰µcS^Ô£ÕoþÔžvLj®Ó–až@Éðã98ÅeçÑQÜKä[K.q± ~•²Jœl¶D6êO^¦4ûµMQ—Ÿ"W¯çúŸå]Î…j ¬{¶+…ðë}¸ù™Á¯OÓ#òÜ`}M|®*«œÛ}OºÀP:i#zÛN*†@WЊ¯¨xVÂç‰-Àç5otl€u/óJÆð'Žo4mN 뇛K™„dHÄù$ô`OAê:~UçÂgOÚÆMù•J”=«¥(|ÎCTÒ¯4mB[èL7TòìAî­S¯uø«áèõ/Nj±ù÷ËFOÌ?¿õ¯ ®ì=ok õ81T=ŒùzŽ7–DŽ5,ìÁTäôè¼+o¡iÚ,öqFбý–vD ¾@ qÔŸ›šÅøw¦jøÖÁXf+bndã¦Ï»ÿ¯aø…¦kx/P‰W2ÄŸhOPS“¨ ?½~ZÑ_Ö¦øl?= Ëî>tRÕŠ†ä©ïí^ݪø×~¸¾ÒôÔŠæK?>Yˆ;w­ßükÄ1é_A|2¿m£n^ÕšÙóíÈÿÇH§rŠŒÓØ0 3rƒ[£çÑÈÍMil÷—ZÅ÷æ‘c_©8«šæžt­rûO# ÝýÜœ~˜­ß†ºpÔ|oe¸~îÛuÃÀGøñZêœÒ¦ærB“u<ìw^2ð—†4Þ^C¦F.•Fþcç{g®3É5Í|-ðî“âªÿjY­Ç‘åy{™†3¿=ô»ñ›QÙi¦éŠÖ;Nãýѵô&üª¿ÁCókŸöÃÿjWœœÖɽÏJQƒÆ($¬ŽCâ—e¢ø²[=> ¸‰ bpHç­vŸ¼!¡kž[ÝFÁg¸3º—2:äÇB+—ø¯ÿ#Ôÿõïò5èŸ ¿äFOúù—ùŠºó’ÃE¦g‡„^&Q¶š–dømàû•d]8+3Ä™Sÿ}Wâ¿…i°=î‹4·P ,ðI0U#ý1Ÿ­qÞ –[oêóÁ#Å*ê•xÛkÞ7B+Ö¾øÎ[K¦êRo¿·PË.0eN™>ã¿®jZ­F*¢•Ñq• òtÜlÏ Ç×ñ•ÜüPðìz'ˆÅͺl¶¾S(P0LüÀ~`þ&¸jô)MTŠ’<Ú´Ý9¸°j†·‘£ÌV~¹5|u¨o£Ú2Æ:ŒEý”­ØÓ“­û£ŸÐ%òG++0Ý÷W¸¯PÓ5Í4N©35»žžríñ®;Âj/Bò£°ääèq]ŠxBhæ7 Bðƒ*àu¯•¨Ó–§ÛÐçŒt;»9!6èÁ‡<š|òÁ³&T\z°®ÃñÿÅ8‘É&_,ŠþÙàþU‹ªxBw»ó¡¸Màä™W!—Û óQ¥ìt6Ö¶7u¥(VW8?tçšñ;›‡»ÕRY2L“sõÍzµ†‡ö{©²&éò”Œ×¢x`êÚ½íÛ.míæ|G»Û< úUÑ’„®Î|LeV) ¨¤ûÕfåU.%DûŠäsÐÕWûÕõ×¼S> «I¢Vê~¦»Ï„ò:Ÿúô“ù­pmÔýMwŸÿäu?õé'óZÏü)aScãWü~èßõÊ_æ•å8ÈÅz·Æ¯øýѿ딿Í+ʪpŸÁõÔ¼oñåýt>•ÐdïìÌøoµY—Ü•Úß®kæ×c2ªÅOàk过 ¯€ô|ÿÏ"ñâkç›Æn¸lñæ1ýMsà´œÑÕŽÖœ%×þë?´­–:ŽªÀn•żdŽÊ2ß©•w&µ¹&±—jTú^~„îªZ)á?‡Ð™— mh׎Ÿ> °üÎ+Ïþjÿ &¡g;î7±yÅwSýCøW4Ó­í*®‡U9ª*'ÔáuÍ5´}vÿMażì‹î¹ÊŸÈƒø× üÔv^êZa+0¸ÌÑÿ}gúWÖá9’J·È)®ãd=bGzìi5fpŸ´Öå¿0†ñÖQ·ËÉ9õ$ó]>»®™íd³‹j…·¤ÞÝk ÃËj­ ͳÏ]ªÃ³‘ýj-gN˜jf ÷MÌS‡Á_cþ5ò•éòUp>÷[ÚÐŒ×TzŸMÌ. n®ÁªÄ$ŽÚáJnáýÖ>•Íi–·‡NDº¹•¡ˆ¾\ˆLòwc§¡©Ùe¾-Ùm¶‰˜€3ê¼äã×§Ö°qêt©\»¯Ü,1É´àm8Ö²Œ±è¾iÑQ%N³1ÍG«—ŠÔäÞȘ8èMsz¦­qªH6ÕD]©tQ]˜ #­>nˆós<|pÐå_Ø¢zT/÷ªJþõ}3Øø´îÉ[©úšï>ÿÈêëÒOæµÁ·Sõ5Þ|#ÿ‘ÔÿפŸÍk,Oð¤m…þ4}M_ñû£×)šW•€[FXô½zÿŽ'QÔït“a§Ý]ŽPÆYÂ’WÀâ©xáµèÔáÔõÈ<ˆ`!â·r »A`:×kžhÓ ›gV"„êâZŠþ¬z ¹_ x?7ØØßï*tüëÁ¼)¦¶µâ½:͆åyÃÉþêüÍúùפ|ZñDqÙ¯‡­dyH{œ¸£§Üœ ÷¬¿ƒš_›ª_jŽ¿,ˆP‘üMÉýüë*W§BU^ìÖºU1¤¶G¤ø³F¸×|?q¦Z\%»Ï´`H 8õÆ+‹ðçà CAñ–¦5KwîK"ÄÀ²•*G>ƨüBñÖ³¥ø˜éúE÷Ù£‚>\óü@ôW'ÿ +Æôü‡ÿˆ©£B·%¢Õ™U±ky&Ú=Kâ®™öÿIp«™l¤Y—×oÝoà ŸÂ¼¢‘dC‡RHìGJú3׫âïA%Ûk˜ ‚a•cŽƒ¦ùâêÖK¹íe’ &㺜ßì¥Mô1Ì#w«©ôµñWÃÙLj ]Ú,Ñöø`?1Нãû¤Ñ>\Á|ig=Çüƒá>¢/|–äåìåxŽ}Ì?ô,~ÎügÔÁm3KSýë‡øêÿìÕÅNÛ*odÎÚ•°u:´y5zÏÁNºçý°ÿÙëÉ«Ö~ ýísþØìõèã€Ï3ütsŸÿäzŸþ½ãþF½á7üˆÉÿ_2ÿ1^wñ[þG¹¿ë„È×¢|$ÿ‘?ëâOæ+Ÿþë« þ÷/™ãž'ÿ‘³Zÿ¯ùÿôcV·Ã}=¯¼s§2¶Å§~:8ýH§k>×õê¦ÓF½e’úfIˆArA ØükÔ|àôð†™=Õì±é†é¤å‰;AôîMiZ¼cG•=Z1¡‡”«Ý­2>3^¬z…ˆ?<÷B?ÙU?Õ…xµu;ñø›Ä’\BOØá_&ßÝAå¿úb¹ o¬à}’ÜF¯èOJ× J’æÐË'Z³qW' u¬é5½>?ùl\ú"U›ÄÖÃîÃ+}p*Þ"’ÞDG Z[D׸íbóÓª09ôç­v¶»¤[J[®:u®2Ki®|%«,&$ºŸdJNr£¿æ?J±¢ßÜéw ª›—©Lõ¯ 1”jT¼©Ê!R.Yõ=ÎÅã\!à„]Õzòâ;{Qfè ýk‡Å2`ˆ­ßwNMIW:œàÎ25ä· ¯9«îz÷m:¡›PŠs3Covõäý+›÷¯d½Ò-ü1àýNêéÝ­Ý¥¾éÂÇ¥xn™¨-í° @™g¯¸¯{-’„}›ÝŸ-Ssš«¶.Ôo÷ªJþõz²ØðQ+u?S]7üCmáBòå‹Èhö œ’=H½k™o¼~¦’”à§Ôp›„”–èöóñŸB;SϺGÿÅ×9­ü_¾»‰¡Ò,–Ïñõ§…´û»+ø.¥‰åEä*¹9Ë@:æ|U©Ùk>#»Ôtø¦Š ‚¤ÊÇÍБÉçñ¬J+5F1›šÝšÊ¼¥MS{#µðŒ­¼'5轂âk{…\I 3êGcY^2×Óľ#›P‰$Ž‹I ‚ßI={×?E5F*£¨·¯'MS{vÿ|c§øHên‚ê_´ˆöy §wg9aýêâ(§RœjEÆ[ •WNJQÜè¼i¯[x—Ä’jV‘O- Y€ 9èH®§Àÿ4¯ xqtëËKé&»î…® ã«úWšQS*”ȸb' Ž¢Ýž×?Æ F~Ï¥êý„›~aò®Å5o#[6,ìOX"'/þówúp=« u¨†”ÒÔª˜ÊÕ›)kcd]1æ?ÊžÇÖ¸ÆbÌYŽIäŸZÞñ<ÙšsÑKÇÿÕXçc*sTilzø J4Tº±CV´2}gV¶ÓíÆd™ÀÏeØû“øUjô?‡P‹-'XÖUCÞ86iܳ ηŸzä;â®ìuß‚x?HƒI•d·µ`ÝL¢œÌ ç#h¢š –PQ€Éô®ÊÿÃâÃLIx÷Bð v<·ƒ†ú<9iâ)ç†ûsGi†òÁ#vOÇ8¬'ä¼ÏJ›ŒbØÝ:õKÕ´Ó­LÒê8ÔžÃÞ½[Ãþ‹Dd•„פa¤Ç ì£ú÷§ØÅo Ü-¤PÅ ´§G]­Û§õ­¶û¿Th¨»³*Õå=ǘümÕRËÁ‰`%¾P ÿ üÌ=¿|ÜSl»†AÁÅzWÆ]sûSÇRÙ£îƒNŒ@¸é¿«ŸÌøW9$œZÔá“»-Yë÷ví¶Qç þñù¿:Ó:ý”Ÿ33©îOô®g†cŽ•fÖºa‹«kœ•0tfîÕ™Ú·Sõ5ÕxB²ñ‰ ú¹ƒìï&¶œ‚1Ïâk•n§êk¼øGÿ#©ÿ¯I?š×­ˆmRm'Z)«£¿? |.AÄW`ú‰Ís> ø@Ð@óèWo3(ÏÙ®0 }`gê?Æ+‹‹ký­î%„ùr’cr§ªú·ðÃÆ—Ú­Ôº6¥!¸‘#2C;rÅA«ýsšóÓ¯~ÕJç©5†•WEÆÌñéb’)^)T¤ˆÅYHÁu™^‡ñsKŽÏÄ–÷°¨m‡.w^ üˆü«Ï+Ñ¥?i.ç•ZŸ³›‡c ðnŽšï‹,,¥@ð2L§¡E ûøÒxËG] ÅWö1&Èù¯`Œ7>™Çá]×Á­//©jιñŸüy¿öZoÆ](¬úv®ƒï«[JqÜ|ÉüÞ¹½¿ûO'MŽ¿«ÿ²sõ<¢¤† '™!‰I$`¨Š2Xž€ ޽'ᆷºÅÆ«:K ,ôó<þù×MZŠœ™ÉB“«QAþøKa ²ÜkÛ®n˜dÀ®U#ö$rÇñÅnÞü9ð”Ö²fÁmö)&X¥e)×®?1\ÏÅ_\Yˇa3D̛á€?usÛ=Oáë^IòÁ¸Ã$‘—R¬QÈÜPqÔW*5«/håkž…JÔ(¿f¡{!‚Ömv;hZI,ÞécF|hË`Žø¯Jñ¿€t- —zŒs­Äe—”°å€<}+Ìôƒÿ«úùÿBî¿?ä@¿ÿz?ý jñ”jÂ)îe†„gJ¤š>|ï]çà éž(}Mu”ýœDcòܯÞÝœúôÁ׫üÿ]­ý þo[â¤ãI´ìcƒŒeY)+£ñæ‰e xžK uaGÛqÉÏzæZî>+Èó7ý{ÇüpùÇ5Xy7N2db"•gr"aý¯(•GÓŠÌSòâŸw+Ou,­Õ˜šŽ3ÅxuæÙôt£Ë!ØÏì¿´†»´¬Ís ùT °ûQsí^;—”¹öõ¯¨¾h_ØÚhc÷(ŒqÕÇ-úšƒh.¥ÿZ—y œE¼ÀI¬ß‡/¯®ß,{a•ãŽ|¼º–öî{¹Ø´³ÈÒ;Ô““TÝC6Oj”ôÅ7Z \ ·l¹‹9ïUÀíW-—÷gžôÖ7Sõ5Þ|#ÿ‘ÔÿפŸÍkƒn§êk¼øHâ¶?õé'óZ÷±?‘ó8_ãGÔØøÕÿº7ýr—ù¥GðƒC¹mJã[td¶XŒ13 bA8õ}OµzN¶þI­ÿ·K`ù?mòÁÇÛ¿ðéRjpÝßh…4+û{Y?u7–$@?ÙçëÎ=+ËöïÙ*Vùž»Ã/nê·#É~.êqÝøŽÚÆ&ìPâLvvç–?:óºÒÖôíCJÕî-uEqxs³ïÏñÜZ]Mm__°ÓÀââuVÇ÷s–ý¯V’:K]<ŠÒ•Z͵«g¹xJðÇØg•B”¶{ÉsÇ$nÇåøS†ÁkW{g¸Ñ€ü+È´­íüÏjë›êþG€W½ü'´[Ç85ÌòJIÿe¯×4ÖѵËí9¸û<Ì‹î¿Âƒ^óðÛð€iXé¶OýÕÛŽ’t“]N ¾¬Óèx‹ïÿÅú½ÃæéÐ{ùGèaÕí[?ÛÙëö‰sõÞjvÁZ)#Ϩù¦Ûî]Ñÿä5aÿ_1ÿèB½Ûâ‡üˆÿïGÿ¡­xNÿ!«úùÿBôÆ­&„«QdÞn@Ù׌玵Ã|µ!.Ç¥€5)ÆçËYêÿ?×kH?›×Yö߇¿óÓÃß÷Ä?áZúLJey†‚tâFß7ìa®3·ñ¨¯Šsƒ+F˜l"§QK3Ç~+Èó7ý{ÇüpõÜ|Vÿ‘âoú÷ùáŽpq×µvaݨÅù~'øòõ8]Qêw;Ì8ªÑô4²“æ>z’sDwñ¯ZÉŸIh¤tþÑιâÍ>Ì.T˽óÓjüÇùb¾¨´Dµ„F§¾µáŸì@Õ5 EÇB±)ô.rôÖ½£sÜ«¾µ&ÑVDWj5-B¥UaþÎr@k£šn zãŠÎ°…cºhМŸSÀý7S¼ÒnÂã×4 ž5ÍáôUÏã^ñËUû_‰ìtô9KKmì3Ñœÿ‚νÞÞLÉt䃂Ÿaÿׯ“ü_©¶±âíRø¶UçeO÷å_Ð –Æ)ëM'$ Z(3 µoþ¯ñªµjßý_ã@[u?S]çÂ?ùOýzIüÖ¸6ê~¦»Ï„ò:Ÿúô“ù­{ØŸáHùœ/ñ£êl|jÿÝþ¹KüÒ±~ë×V'ƒL3YÞîS<+€HaèxÇã[¿-總Ѽ˜$”ˆåb–Sᯂõ%×"Ö/ídµ¶·ij)V‘È#€yÀÎr{â¹báõKOúÔíœgõËÃËò5¾3i‘6§êj L“÷*ÀŸÐƒùšÃøA¦}£ÄWZ‹®RÒŠO÷ßäó­oŒz¼,–:0iUÍÄ ÆÕüòk ø[¦ 7ÁQÜÉ€÷Ž× O/Eý誂 ¯SNHÏ~‹Rˆ^Ö®œ"¿•vß /Ç‚Ö~kk‰##Ó'pÿШø«¦ CÁïp£2Xȳ©výÖü0Ùü+‰øK®-޹>•3íŽùA=<Åè?ŸÈRÖ®MÐiK®Ò9Z5—‹õh`ý¥Ü}î¡…^½ñWÂ7WS¦¹a Ìvî£rÀŽþ‡ð¯$Š'b°ÆòRÌw`§ŽÕ߇ªªSN矉¥(Ui¢Öÿ!«úùÿBîß?ä@¿ÿz?ý k´ù X×Ìú¯uø¡ÿ"ÿûÑÿèk\دãS:°À¨|ù^¯ðSýv·ôƒù½yEz¿ÁOõÚßÒæõ¾/ø,Ãüx˜¿äy—þ½ãþF¼óV»k-:I‚Èx_©¯Cø­ÿ#Ì¿õïò5å*…ÌÊ3µIR=3Ys8áS]T#ié…åúÜ\¹Çû¸_èkÓ#ŽyÇ­RÚ÷ÂIm"K'1ʧ¹$°??•v£Sˆ¶ÐØÏ>´E]{({©Iãp^=€'ÿB5ZÝÚ;Ϙå[$sQi“™<>.Ò&~:q¼ú bÈ`»xÉÈÜÛhV^Ô¿±ü/ªßž p;vÁÇë_&‚O$ä÷>¦½ûâæ«ö_Él­‡¹‘#ëÔg'ôàñA”÷¶1I¸öZAÔSÏ‚F|Äú U·ó†íøíÒžõ=±ýÙúÐbßxýMu^×l|=âS}¨;¬gxòŠXî$cô®U¾ñúšJú)ÁN./©ò´æéÉMn}?|.úÛ£íösXׯ8¼¦E°s!àMu€Ü('?‰ä4W,p4“¾çT³ ÍZö-]^Üjw²]^ÎòÍ3n’FäÿŸjõ}[â'‡ãð„úf‘,æàZýšð•cnsÛŒšñê+j”#;_¡,Déó[¨QE±ì¶?|?sáX´ÝZ[=í~Ïq¶à»IÏ|õ¯Gh$Y!•ƒÆÙIå9±¨è¬iÐ;Û©½\Dê¥ÍÐöO |Z³’Ù-õôxgQ´Ü¢îI=ȃôúWEuñÂ0Û»F9ƒ¯)LŽÏóÍŒ°4ÛºÐÞ9…T¬õ4–{HÐµß Ýéö2N×*"£†óô¯$¢¶ž2’—cb'$¾Ðw®÷á·ŠtÏ >¦Ú‹È¿hü´-÷w“ŸÌWE]Jj¤\YªÊ”Ôã¹ÔxóZ³×üQ%ýƒ;@Тë´ägµy犎,¡²!ÿ×­±Ö¹ÏÎI‚Ü€¹þUÏˆŠ§AÅXVêbTÙÍ ËŠ¹Ê„ž•QÍZÚE§Ûµ[;SÒYU[éžkÆ=óÙþh¡x|<€¬÷›f“# Çò?u÷0#ZÈì9²b¸k™â·ˆüŠþ´u9„:TìHØÊ›V6Fµ°xC‡Þ¨Ä~©uÄÞhêFk.êæHäÓQ¿Õ¬+·ëœÓ«{2µ²0ä0ÏéH§¹âÿ5š]>Ïw ]Ø~ƒùšó>§ÖüH»ûGŠÊÄqø“ÿê®MzÐa'¨êšGzLãš ÎiðFxïUØäj[s˜óï@Óÿ}®IûTߣþë_ùúŸòÒQ_4óœ{ÿ—ð:?³0ŸÉùœßü!Ö¿óõ?ä(ÿ„:×þ~§ü…t”Qý³ÿŸðìÌ'ò~g7ÿu¯üýOù ?áµÿŸ©ÿ!]%lãÿçãüû3 üŸ™ÍÿÂkÿ?SþBøC­çêÈWIEÛ8ÿùøÿþÌÂ'æsð‡ZÿÏÔÿ£þë_ùúŸòÒQGöÎ?þ~?À?³0ŸÉùœßü!Ö¿óõ?ä(ÿ„:×þ~§ü…t”Qý³ÿŸðìÌ'ò~g7ÿu¯üýOù ?áµÿŸ©ÿ!]%lãÿçãüû3 üŸ™ÍÿÂkÿ?SþBøC­çêÈWIEÛ8ÿùøÿþÌÂ'æsð‡ZÿÏÔÿ¬Ûÿ†º~¡8–Kûµ!váBÿ…vÔTÏ6ÆÍZU¾EÓÀáéËš±çãá>˜ü„¯?%ÿ ³gðÒÆÆî˜u+Àñ0aÂÿ…vôVÚŸæü½Œ;ÙD¶@íù˜÷jšéþ׉À H'ý¿Jm¿´1ÍùìãØ–âàÜ< Ê’AïŠÛdû[6 7~*½hb?›ògÇ©ü<²Õu)¯¦¿ºY%9*¡p8Ç¥Uÿ…[¦ÿÐFóòOð®îŠÚŸæü„éAô8_øUÚv1ý£yù'øSOÂÝ4ùÞ~IþÞQKûCüß½>Çÿ «MÎN£yù/øTü$²fÌz­ÂŒth”ŸÓè´™ÅTs Mþ/È }…®ƒÂvv÷·³­Ì)(XÁÆ@æ¹úéüÿ! ¯úä?ô!YàRxˆ¦:ͨ6[…ð´w†Êìèî?vΪ܌ŽãµQÕü#…®4ÒÛ‡&Ù²zþuƒâ?ùõ?¬_ú)k{Áú«–m6S¹B–‡=@GõüëÕœèU®ðó…»?3FJ*iœv>Ól®´©$¸µŠW–\œ`V‰l–Ç^”F1ÂùËìs†Ÿ?ð*éüÿ y?ë¹þB¹°xg‹tç­‹«>jJHˆÞx1Y•§ÒÃ)*ÃrðGQX~&ºÐ¤¶²Mk6™®Gš ±Až}Bþ•„‡ïÿ×GÿÐ;58ŒlZ•5MuC…¤¹Ž“Â66·²]‹˜#”(B¡×8ë[/†%½m=þÀ.”€apHÈã9èEgxýu÷û©ýk\çÄš¨ÿ¦Ëÿ¢c­éT…j8§­ˆ’rªãsc_ðÒØD×VlÍ ýøÛ’ƒÔJ­áù´XcœêòZ&æ_/Ï g®qŸÂºLú—‡‚ÝùÝ ÎW§?¯8·böѶNJŸ^+:ñ§FP¯é.Œ¨9M8K¡é6V~Ô¡i¬ ²¸NÒÑ€@>•I®üºI6– V]ÊpGQKàùOÿ]Ïþ‚µÃ1ÿH¸ÿ¯‰ô6®š¸˜S¡¼‹S(A¹8ßb 7’K+w—ýcF¥øïŸÖ§¢Šð»¹Ü´;û];F‡B‚òîÚÕmÖIeÚ2Iªßmðoü÷ÒóþòÔš¯ü“É¿ì¿ú p€žyï^ö&¼0Ñ… ÑÇN£z“yÏ©LИÞÜÝ8f6”ÞvãÛ®þòË@Ó ^[ÙAm¡äF}+Ïàÿ˜¿ß_ç]Ž¿äiÿ_‹ÿ =c”\jTq]Ê­tã’>…¡ë†]>H—< -Ü:ƒî9ÆÞÙËaw%´ÃçCÔt#ÔV…®žß^…¾I²Ž=xÈýkCÇ1*êóIŠßE+ý ¿:б§ˆÃºÐ,âå òIÝøOO³¼°îm┬¸×8qî¼’é‰"1VRË• àΛàŸùÜÿ×oý”WpOö…ÿý~Üè×­•HPÂÂ|‰ÜŽW:\Üñæ€Ö0¦‘5“\4êA‚Û0súâá+;kÛÛ„¹‚9Ucï\ök¨ðGüÝÿ×!üëš•Xâ1P|©.ßy¬ áMêjÝ¿„ìnZÚé´èf\G*ÈÈãéY:Õï…ÿ±nÅ„úy»1‘Œ©mݱïY^#ÿ‘«Rÿz?ý•›šÛ)Êš¦´"&â¥pïM=iÔÓÖ¼ˆOaÕÓø'þ?î¿ëÿÐ…sÓø'þ?î¿ëÿÐ…tà?Þaýt2¯ü6dx‹þFÍOëþŠZ]S½fGyŸÇëIâ/ù5?¬_ú)hЗv»diAü¹­k¿7æ¿Bcü‘·ãÔm*làî–/À€ßû%hø/þ@òÿ×vþB³|~àɤŞKË&=‚ÿÙÅhø/þ@ò×vþB½K[ò0ÿ—?3“OêØoôyv=½MAwau`P]ÂÑ3´7|c?Ì~u¼|{|]öhÐÊ ^°$FqåqÒ±õnç\¸µy좶XÔlœÈX±_T\co¿ZóñTp«™©ûÝ¿¤m TvºÐÞð7úëï÷SúÕmCÃzïˆ/æH‘mæ•Ydi FŠx=AíV|þ¶ûýÔþ´_øºúË[»´öÒ[Ûº *í”VÎrGñzWMÑ– *³²¹œœ•W˹.­ª[xcD]2ÒU—ShÊÅûÀž²0죯¾®*ÖR5û¨¡GÐ W¡Ëe§ø›L7P¢¤Î8.0ìǽp ³+IRbëXæ\Ö/ÁÐÓk»üGsàùOÿ_ÿAZá›þ>.?ëâ_ý «¹ðGü‚§ÿ¯ƒÿ ­pÍÿõñ/þ†Õ8¯÷*dÓþ,‚Š(¯(ê;ëè%ºðÁm$²X*ª/RvŠä?°µ@ú ÿ÷Ívæüé~KåˆL`³Ye¶îÂŽ3ƒÊ¹ÿøO/‡üÁí¿ð9¿øÕ}.• F´­dqR”âß*¹ÎÁÅÔcŽ$ƒž‡ØøèãG´ÿ¯Åÿи»@ÂXËɸ€r[8Ïã^—ªêCMk&p<¹îV'ør¬AüÀüë ¾1p©éܪîÓ‹9o é“˨¥ëÆV °ûÌF*·Œ/Ò÷ÄqÛDÙ[Y$#§™!VÛõ ŠàUÐx¾÷S´±ŒØLÆí²i|½Î™é·<ü{WK {8É$’I$œ’IêIäšX§ %‡Ž­îÇ ÔŸ´gs࢙sžžwþÊ+—AÕžòòAa.׺ÔñÊ™ƒøƒšèüq¦Üÿ×oý”U üu{ÕÌ)£ÛºE<‘7Œ lr¹Ç–qœg©­y(Ï YÙy*²åFÞŸwbªn¡1;WqœgŠßðGüÝÿ×!üëY×®õϳ,ö1[¤Ϲ. „äcظ­ÿÇýßýrι(B”1pT×üjŽN“æV+ëº6£sâ;éá´‘ã¡VƒˆÔÔ˹Òoìá3\Ú´Qf “€?3]6±ã­;X¹±‡K†d‡hóè¡$¨n¯­aêþ(¼Öl œšlèÒFæEºg#kéåŒôÇZÛC ç99Ú]¼È¥:–I- šiëJ: CÖ¼…¹Ôö]?‚ãþëþ¹ýW1]?‚?ä!sÿ\‡þ„+§þóë¡•á³#Ä_ò6jX¿ôRÖ§ƒ¬ZmA¯w «?•oÝøcM¸Ô&¿¹2q¿ ò¨_äzÇÕ<]§éö†ÃÃâ«‘” ÝÕ˜pOû#œõÀæ½g„åÄ:õZQÜæU9 ¡Ì^­÷Š^4!£°„CŸúhä3þ@GøæºŸÈOúî¯?†/&-»™Ü’Ï#œ³±9,}É&½Áò—þ»·ò†·¶Æ¹šT-Ž?þº?þ„iõÞ¯‚´µ¸ä“÷ÇRséY$Ðlô1nmüÒæUç`F¯j¾]YsOKjË…xY"oÿ®¾ÿu?­`kŸò2ê¿õÝôLu¿à`|Ûìu?­k\ø_L’òæþäɺVI— £ òÂŽõÓN„ëà£w2sP¬Û*ø%is³¦ÊþC?­qwr,Úž¡"¡»›÷ÙÓjÞ-´¶³m?Ãæ)§Û°K Ý ¸îKŽÊ3Ï\ ä¢a‰c\íQžMcŽ”iÑ…îÑtbÜÜí¡Þx#þASÿ×ÁÿÐV¸fÿ‹úø—ÿCjî|ÿ ©ÿëàÿè+\3ÿÇÅÇý|Kÿ¡µ,Wû•1Sþ,‚Š(¯(ê;­WþIäßö_ý¸AÞ»½Tż›þÁãÿA®w¯[4øiúømÙ,ñóûëüë±ñ×üí8Ïúbñÿzã ÿ˜¿ß_ç]Ž¿äiÿ_‹ÿ =àUôoŽ%*xµÿ ÉoprÁLRò=ëÐýEpÓÃ%µÄ°L»dаíŸonõ§á½Kû?WEcˆ§ÄlsÀô?þu§ã=4¤±ê1©Ãb9±Øÿ þŸ•:ŸíXe5ñGp_»ªãÑ—|ÿ ÛŸúïÿ²Šâî?ä!ÿ_·ú5ë´ðH'L¹ÇüöÿÙEXoi,²8idy[:³=½MnðÓ¯ƒ§z‘í*ɳ€®£Áñÿwÿ\‡ó¥ñ‡l´­KÈ<Ö‘^5Û#æuSÛÐÓ| Íõ×ýrιha§CÏÔÒué6ŒŸÈש½þ‹JίE¼ðµ…õô×r™¼Éˆ-µ†8zzYÚ§…tû=&òê39x`y%T‘ÛÚµÄåÕêU”լɧ^1Š‹8ºiëJ¼¨>¼ÒµäEkc©ì:›$i*l‘Ôó‡\Šu“iÝXéöl0Ö–ç¿1/¥X€:ÐRÑMÉËq$TrÛÃ1X£r:nPqRQI6ÐÊÿa´ÿŸX?ïØ¥KKhÜ:[¬A€A©èªö’îþö$’è2H£•vËH :ç ÓìÎ3inpr”¿áVh¤§$¬˜4˜`éETŒŽH!›lQ¾:nPqNDXÔ"*¢ŽŠ«€)ÔUs;ZúQE Bö¶îåÞ™Ï%Š•MõëEܛ݆89ªµ·I‰*ã£À#ñüMMEkfAP­¥²¾ñm`wdFÏ®jnnj֯¯%ŸŸo e»Œ®ÒW*sƒü‰­)S©QòÀÒ)T—,UÙ­r–æ&–å"dŒºEhüj“ˤÇÃiÞÖûö+˜°ñ3«·Û9Œ ±®I5ÕÁ*ͺt` yµéV£¤›ûÙÇ[ *NÒDŸJiëN¦žµÏ°ê(­½+LÓ§Ò.¯õ‰¡ŽÝŽæCÀPÎ0IëZQ£*Òä†äÊJ*ìÄ¢®j­¢Æ.“5äò¼›d@ê6±ÎJà½êõ¦—c˜5MfèÁjÇlj –sÛœöZýJ«Ÿ"·ß¡.¬R»1h­ë­#N½Ò¤Ô4Yä‘"ÉxäRç‚:óPxwKƒWº–)ÞUUx13ϸ5/UMC¾ÚèÖ<®FEÐ&‹¦j¶²K¢_É4ˆ7yr‚7ØÈ}yÏššØj”~4Tf¥±=”+=ý¼Rr"«bÀVïŠô‹-&ÚÉìâ*Ó\ܳ³|»»ŸU¦ÈVÓþ»'þ„+§ñ÷üyi¿õöôS×f–¤šØÊ«|ñIœu]Ñíb¼Ö-­çÇ#ÀvªU§áßùl¿ß?ʸh$êE>èÖ ,ø¯MµÒ®¬b´Œ¢Ì’³îbÙÚP¿ï±áËT†á®£,Q” 9^?íOñçü„t¯úã?þ…\ðGü{^¾¿È×®èÓúò‡*µŽny{ßRÓxwÃèÅ\"°ê É~µÌøšÎÂÂöÆ-?fÙb•äÄ…ÎTÆs¼Õ•¨ÛÀÚ¾¢Í eÜÙ%A'÷P¤Fsh™ëµ@Ísâ±m*q¦“îiJºnGg hmþÍÄ Ò³6H‘€À•dz3¶çffõc“O¸‘%¹’TËWbÁ3¹íV´khï5‹[I`3‰älÁc€IÁàué^öPIEF”hRüJ¶ó5½ÌS¦7Dá×> æºüSoo{ i¬mƒÏ$ÐÍ6ó#K·#;FR8<Œš‡KÒôÍg^¾··’H-<©Ùä`Ha€…Ž:dóÓ…i·…tôÔ ´K 2YÇ#£ #:ÉŽ:ex®Ä¥Ðʽ\<¥ûÅ­¿3õèî43cuòKö‰.<Õ•–rÌ Æ;0ëI®x„ëhªmRßMˆÂ€Û±Ø,1Ç“D~»m2òCayö¨f‰D~KgËa&I]½2 f¶,|3a/”­ ÜþwÙ•¼§ÇÙüÈ·´­òž3Ó ëÍ I“φ¦ù’Õ3Ž­MR’ÎçhO0ÊUI/Œ Ô¸ðåŒ~mF+†y£³ŽI#Èv(aÇ*Fï¡õËÖ5i)ÅÆGB•NÄNnûǽt'­|Ôé:sp}¤‹è:·`¾ëaT±9ÀO XUÒéW³i¾Õ/­Äfh² +«Ôë]wñ¾Oò9«ü'7±÷ÈË“‘[~2jº}â+[Rê½·1Ú×Gâk>ÿYÔµYí^ùí6Û9uBÉ’xç.ßÊ´¼f¿ñ=‚qÊËh þ˱?ú­`©Â…WMßn–ê'yN<ÊÄž ”ZH),G ÷ÁâjO§‘«ÞÁ’| ñd÷Úû¥Càä-®n'ó¦ð\¢ãZÔ'vVš@}CJHý oƒþ&ÿ™þDUø¥èQð r5Ü2 ;ßç#§lçùV1nn.gŒƒ·µô)\÷kJ¤-ìÕÌo±^G¸{„l¢°ØßÇʃÇ~Þµ4:v­,¢(l¯Þ@ mX\±œÙ¸ö5ÐIãH&Ô…üºqJ²+å|œ̅ÆyùNGû¼ ¡k®Ùý…-o#» Z˜]àe[ívrztÔsN˹‡µ¯kòÖ±ê×·/¤W×(ˬ(îÀŽqÏ÷õ÷¨ ^F“9IãHØE1ý¶·§CÁô­›/@ºÎ­}unvß« ‹rí&Eq•pTôÆH÷«W+³šÓQµs¿’Y¤s&â®H)еzúœQdS©[šÞÏM?à˜éÚœÆÓZ]¢IôÝÈ9$qÐuôZHž& $l„¨`H$yìAº7ñ ÕfÔ­à¹i®#›ÌŠãcÆ®ëŒÇ*¯l VF¯¨Rü]ĹŠ2ª¡FUNà:RjÅÒ©VNÒ—r] Q¢™iî\‘øŠî<ûW¤–Œ{dU$ôa÷½«½_¸¼cŠð³þôó3 {] «öëKêÖÓ]Aó"‰äUgázr Ê¢¸ðõÝóZçŸ8ó+ï],:~·£Ãi¨]-­Õ¿Ë²0ǃÐqíšæ¨¢…dÝÕÓÝ qæFíÅþŸáë ‹M*ú;í^äl B?¼Ø'g ’qõ á «-&âO´ÜÃmÂiã'½aÀôµ»ÆÚpq£„{-oViø?P·‚ÀÙ_H«gqn7´…oRO#<ûVcù"y£‚æ”ʉapÊÞ‡ ‘Óñ¢ŠÆ¥~x(µ³Ñ—r»¢Ö™ÿ![OúìŸú®ŸÇßñå¦ÿ×ÙÿÑO\Æ™ÿ![OúìŸú®ÿ]Г\ŠÞ7¸hD2ù™UÎ~R¸ÿÇ«ÐÀSu0õ#Ùf”âÙæÕ§áßùl¿ß?ʺøA`ÿŸùïþ5ƒ €¾'’y#Éêv’¹ý+š8J´jAÍuEº±œZF—?ä#¥×ÿô(ªç‚?ãÚóýõþF©øóþB:WýqŸÿBŠ®x#þ=¯?ß_äkÑÿ™Šô9ÿåÁÉßÿÈWPÿ¯¹¿ôcT=ÿü…uúû›ÿF5A^6+øÓõ;iü(ô ÿȵÕÿ™¯7³ÿúäŸú¯Ið˜Ýḇ©qúšÌ‹ÀPCqý¾RçË úׯˆÃT¯‡¦©­ŽZu# ˘ä+ÄV­s§æ;e–E<7 îEv^ ÐbÑ-í¤IÞc4¾_Ì1”¶JÀ¹·K«y “v×;N yNœðÕRžŒí¡Ys)Äó:*Åõ«Z]:yRÇâÌ\dzÕ~Õô’”SGÓÂIÆèÛðæ•g©µë^É"Ço¸årKªóˆÜô=…hÜøRÖn¢Ýv&n$YÛh…Dr” À¼@ÏQÕx®zØêV’ÿ¢ý®r#ÌE±Æ@ã¯8¢¨ÜYÍ"ö[\ï™cÜÉž¹`8÷çÒ­5Øä©J£›”gdt’xJÄßý%º´Hå¹ä¹Àbˆ°”a~éî9ã½F|3d?µ!CtÓÛ6á¥UY&ýùØU³×nTãk Q«È°K2ß•+åB"¤cj“ÔØSRãSòŒ1Ë{åH€Vl:”qÐŒœzv§uØ…Jµ¿ŠS¢¦¹³º³*.­¦€¶vù±”Î:ã T;K|ª '¦*Nè´ÕÓ548KÞ+˜•¼„×mМñÖ°<;d<Ý®¬G̬k£#±_=ŒŸ´ªì|ö2~Ò£h}T‘ÆŽ¹kˆ£>Ž?¢‘\I7±ÎGEOäGÿ?¶ßøÿÿG‘üþÛãÿüM>WýX(©üˆ¿çöÛÿÿâhò"ÿŸÛoüÿ‰£•ÿV *"/ùý¶ÿÇÿøš<ˆ¿çöÛÿÿâhåÕ€…K+Ve`r œ}?í7õ-Kð¿˜ìÔÿ"/ùý¶ÿÇÿøš<ˆ¿çöÛÿÿâjá*ø[_?ø"qOt3í7ŸôÔÿð>oþ*£ˆ´'1I*7'x‘·äœ“»9Ï'ŸzŸÈ‹þm¿ñÿþ&"/ùý¶ÿÇÿøš%:²ø›ûÿà‚ŒVÈ̒ȲMqs;(*¦{‡“h8Î7Œà~TåšxÔ¬WWPƒÔApñç봌ԾD_óûmÿÿñ4yÏí·þ?ÿÄÐçVü×wïø!ËZÅeP€üÎıbÎ嘒rI'’y§TþD_óûmÿÿñ4yÏí·þ?ÿÄÔ5&îÿAí¢#[‹•P±ÞÞÄ£¢Ãu$kù)—í7ŸôÔÿð>oþ*ŸäEÿ?¶ßøÿÿG‘üþÛãÿüMjªÖJÊOïÿ‚O$wh‚F–fC5ÕÜûTOs$€c 1#8&ŠŸÈ‹þm¿ñÿþ&"/ùý¶ÿÇÿøš‰9ÉÞZüÿà$¶G;®é y¸E‘¥0ˆ¤rs\\ÐI ˜¥_=3Ò½[È‹þm¿ñÿþ&±õO ZÞÇ#Guj“¶?y¶B{³è+ÐÁbÝ?r{|Žü61Ó÷'±NËÆv6·̵–Xá'`B†R±"+ž¡”u&±t_>‰¥Ë«Ü›˜æ¤-µ« áXdå‡#¯î‰=œ’…!âCÁã8VqŠPTÛ,29#Ö½¨ÖŒ•âÎêtpò‹åw½ºd^-´H,PÛʦÝìÙÙrÆEˆ|ÃÈ^z{Ôð“ÛÿÂ<Úk[Ëæ-©Š†ÐQŒûØdT€¿B=ë˜ Ì …8'ëSÅeq7˜äÆTõ?Jd·b– y=‹:¾¤u;˜¥1T·ŠEXØ*È’TÎ?P)‡­xÊ÷ÔóöC¨¢Š€ 0Gj­{co†æ=ñƒ»#ŸÀÖW†l-’É/qf@#-´7ËÓ=«±å\µ%5fÚﲿÀçúúprQÙ'øÛ±ÒcuªVŸ•¾VÔ[I& ˆ$/‚=ÍRñ2y¶öIåyÛ®”y{¶ïá¸Ïoþ½rRÃF®!QŒ´n×·üÔè©ZT躲Zöþ—èncž•‘e§Ãi§Ï"Ù Ydƒ ”¿8ç?g\(oZ/Lùcÿ­iàaRvŒôæQÙu룙œ±R„o(ô¾ÿðœœR×1mu,ºæŸmt?Ò­|Ôsýá·†üE_Ó‡üO5nÜÅÿ Ñ[.t¯Í-•ÿÁ xÎ{Yníøçé Çj䢶uÔWöŒù›‹Ø§ÎâO†zUûùn`ñ>ë[o´IöLó`në“ôªž\”­ ]Y»è–7üìü‰Ž7ݼ£gt­ëò7Ç4c5‰áæwmE¤Ë‘®Ø²g;I3Þ›âdGKxLÊn1©Án³Xö¯«9|þWïú—õ¯Ü{d¿«Û±ºxë@9®{@Pu;¦¶…í­QDo ɸ‰3׺T0Ï%·…¯d‡"A+ò;Àfµž[Ë7.±_}^«æDq·‚“Àé·ÐäûRžk'OÒlmd¶¸™fhó‘/úÜŽIêŒsÝêjÂÚÈ\+:ïo4&Ï—ß­g jJQ„¾Õ[ª]YRÅ8E9Ç~Îý/ØéÍ'µexoþ@¿ð/ýÕ r(æ×mV[9.ÓÈ?»9êyã)SÁsâeC›á¾¾—óòîTñ<´U[ooÄè^5¾3õªÏ§[ÈÁÚ5,½+m§·ðΤ³FñFÅš]·N0?Ï¥oÙôlð<¤ÿÐE*øUE7 ß[~C¨ìÕ®TE²€<¥À9 ïëVc³pBŒý+—Öµÿ¶ÌÂ\5‘@‰‚wœåÇô­O¨ºÒío-Ä{_Ó à×K˪^’œ¬§Õ­¿ÌÏëê^Ó—^_ÄÚTà usVRÜx‚Ú;…ÅÌZ)náIá”°ÈúÔÿjƒt*&BgÄ3÷øÀÑ5‰æö“Nï­˜¢èòò+[±#¨tdnUéUN™jÖ1Ù>DxÚ»c‘ÍN·µÃÛ¬ˆeA¹“Õ%'V®í½møm÷„/¢Z~¦u¦‡ae8š›xÎÒÌ[n}3Ò­Eg 2Ï*)9C¸ò@ÇáIs{mfÜL‘é¸ã4Øõ 9 ’xîch£ûì…úÖ²–*¢ö·}/© 4!îÙ/¸’ÖÖ++d·JÆ9÷¤kHZñnŠŸ9¢œô¯È5++©p]E$‡¢+ŒšIµ;y|©®¢ŽLµ›f—³Ä{F¬ùŸ“¾£ç£Ë{«z¢k‹xî­ä‚Q˜Üa€8â©Úh–VW < u ÈÄcèMY’úÒ+d¸{ˆÖû®O¯øK{ûK½ßg¸Ž]¼¶Óœ}iÁâaJJå룰¥2šr³—M‚ x-åùr–2IÜOZiÓmšÒfW1BÁ9tç½,•Ì‚8náw=\O¹»·³P×3GžcCx˜Í'{·ëä¹poKlmÍø¾Ùþfà{}*ÅD—ÉnnUhp[x9M!»·[_µ[ãw™ž1Y¸Õ›I§¦Ÿð ‹‚»V×_ø$ÔÓÖ•He ¤# Žô‡­f•™¦èus·Oqâio¸[)>|{Æ7ƒÖº*ÊO0ÊD„m/ŽHôÍtaq/)I-ZhÃGÚ¤¯³¹‹­¤0Üéžj"Ù,ÇxÛ…d}itóo'‰.žÏoÙü•ñ·~{cÛ5µ$i4f9]Uai!‚+tÙ iç8E~•ÑzT}›Nö¶úZ÷¿©”°­Õ溵ï絬q*“4hmRÞiÌi+™îÿëWqí$€ gÖ˜mmÌ&~Q9)°mÏ^• KŽX”’¬Øap¾Âí»ô9Ë[ig×oÙE³B³¯˜²ÆˆÇoJ¹¨(MsG Í€;|•ª±ÆŒìˆªÎrä >¦†Ž7tvE.™ÚÄr¹ô=¨ž?šª›Z(Û𰣄僊{»þ79˸ç ¿¼µæ[Q˜ÿ碕ù‡åüª}"ñ-<7-Û}Õyßž?˜­±bF‘QD€ÎËc¦M3ì–þI‡È‹Ê'qMƒúⵞa Ò)Çn]zÙ-¿­ˆŽQ›š–÷ûßS™ÑÚkJØÏ Ñ µ)#H8y ,þU>£òx†iísö‹{t‘³rr¿ˆ®ŠHc›o›>Òw(8#¸ô¥ò£4‚5ó[‘éô¦óHº®²†­YöÒÀ¾NNm/ëæs6ÒKqáRHC’Wm òÆLÕû tR,– ÌS÷{Pnç×Þµ£†8CãT K£'¿È­-à‘¤Š‘Û«*MM\}:ŠjÍ]ÝYùZÏȺxY×Tì¬î¼ïuægØÿÈìóõÜ5ƒ-ÔÒ^¾°–ó”IÁI@ùCå#ñÍv"ƒ;ˆÔ4€ ›sëH-áX<b,c`A·˜§G0…9¹r^é/’Vy0sœTy­fßÍ»£+Vž(õ"V‘D^cìpÛZ°\Ár¥ š9@8%0’Z[Jˆ’[Äêƒ ¬€…ú RÃo¸""ˆHçò®J•©N”`“º¿kZçT)TG&ÕŸ©®Ç$ºŽ–‘y[˾<ÕܽQSj0ù¹VH–O+ç1&ÐOâµ8ÝÑÙ™>é#%~ž”IÊ…C!ê¬2 ie£JÒþº™_§¥G%¬Î^[X$sÕž%cù‘]K3‹Ÿ4¢Ò³Z[«½õ¿æbðQåO­õüŒ}¢k·xD_icpc Éí_Æ®iÍ´’4šÖY‚“!·  Žq*ëZÛ4 [ÂcOº†1´~=:"´·ƒq†Þ‹ 6ÈÂä{â°xºo©YèïÓ]M¾­%YÎêÍ[¯n‡ ¯fÞ²Š/-µãËæßÔãÚµïZñ,/|SÈû91³~yëÇCúÖ¼Vv°>ømâŒãTãê)óAÂlš$‘ºê~µ´³(J{;{Ýu\Ý»Ç5Õôé¦ýN~ÃË6Û[àZ–+oÝû§8ý+!þÖto°|…ˆ]ïÏU aï£úWp"bò–4Xñ€q¥'‘—åùI³nÍ¥F6úcÒ´§›Æœ›P½Úzë²µýH©—¹Å%+Y5÷Œ²ÿ oúäŸÈT§­(@ 0À‡­xò—4Ü»ž’\°K°¡³ØÒçëE2gëF~´QRŸ­úÑEúÑŸ­PŸ­úÑEúÑŸ­PŸ­úÑEúÑŸ­PŸ­úÑEúÑŸ­PŸ­Q@~´gëEgëF~´Q@~´gëEgëI´žGêh¢®ËcÿÙleptonica-1.70/prog/coloring_reg.c0000644000175000017500000001320712240074755015302 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * coloring_reg.c * * This tests simple coloring functions. */ #include "string.h" #include "allheaders.h" static const char *bgcolors[] = {"255 255 235", "255 245 235", "255 235 245", "235 245 255"}; l_int32 main(int argc, char **argv) { char buf[512]; l_int32 i, n, index; l_int32 rval[4], gval[4], bval[4]; l_uint32 scolor, dcolor; L_BMF *bmf; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Read in the bg colors */ for (i = 0; i < 4; i++) sscanf(bgcolors[i], "%d %d %d", &rval[i], &gval[i], &bval[i]); bmf = bmfCreate("fonts", 8); /* Get the input image (100 ppi resolution) */ pix0 = pixRead("harmoniam100-11.png"); cmap = pixGetColormap(pix0); pixa = pixaCreate(0); /* Do cmapped coloring on the white pixels only */ pixcmapGetIndex(cmap, 255, 255, 255, &index); /* index of white pixels */ for (i = 0; i < 4; i++) { pixcmapResetColor(cmap, index, rval[i], gval[i], bval[i]); snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", rval[i], gval[i], bval[i]); pix1 = pixAddSingleTextblock(pix0, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix1, L_INSERT); } /* Do cmapped background coloring on all the pixels */ for (i = 0; i < 4; i++) { scolor = 0xffffff00; /* source color */ composeRGBPixel(rval[i], gval[i], bval[i], &dcolor); /* dest color */ pix1 = pixShiftByComponent(NULL, pix0, scolor, dcolor); snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", rval[i], gval[i], bval[i]); pix2 = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); } /* Do background coloring on rgb */ pix1 = pixConvertTo32(pix0); for (i = 0; i < 4; i++) { scolor = 0xffffff00; composeRGBPixel(rval[i], gval[i], bval[i], &dcolor); pix2 = pixShiftByComponent(NULL, pix1, scolor, dcolor); snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", rval[i], gval[i], bval[i]); pix3 = pixAddSingleTextblock(pix2, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix2); } pixDestroy(&pix1); /* Compare cmapped & rgb foreground coloring */ scolor = 0x0; /* source color */ composeRGBPixel(200, 30, 150, &dcolor); /* ugly fg dest color */ pix1 = pixShiftByComponent(NULL, pix0, scolor, dcolor); /* cmapped */ snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", 200, 100, 50); pix2 = pixAddSingleTextblock(pix1, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixConvertTo32(pix0); pix4 = pixShiftByComponent(NULL, pix3, scolor, dcolor); /* rgb */ snprintf(buf, sizeof(buf), "(rval, bval, gval) = (%d, %d, %d)", 200, 100, 50); pix5 = pixAddSingleTextblock(pix4, bmf, buf, 0xff000000, L_ADD_AT_BOT, NULL); pixaAddPix(pixa, pix5, L_INSERT); regTestComparePix(rp, pix1, pix4); regTestComparePix(rp, pix2, pix5); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pix4); /* Log all the results */ n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); regTestWritePixAndCheck(rp, pix1, IFF_PNG); pixDestroy(&pix1); } /* If in testing mode, make a pdf */ if (rp->display) { pixaConvertToPdf(pixa, 100, 1.0, L_FLATE_ENCODE, 0, "Colored background", "/tmp/coloring.pdf"); } pixaDestroy(&pixa); pixDestroy(&pix0); bmfDestroy(&bmf); return regTestCleanup(rp); } leptonica-1.70/prog/greencover.jpg0000444000175000017500000005233711751724470015335 0ustar dandanÿØÿàJFIF––ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀhì"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?áè¢¬ØØ\ê7?g´ˆË.Ö}¹…ž¾Â¾‘´•ÙòI6ìŠÔU›k »¹R+{y$y(¡~ðž?iÒiב4­¥&áõs¼ï‚8¥ÏÚãä–ö*QR42¬bF‰ÄdíÜTŸLúñV!Ó/. ì·p¸bÃhòÀå¹ê(sŠWl[ÒÅJJê<;áË]_F¾¼™®À\”$ ±4ÜI¨\:×?ieq|Ò-´FFŽ&™À ae5œkÂNJÿåº2I>åz*ÔöVòË>è¥hX¨Ü7®r¹ÁéLŠÒy®a·HÈ–gÆ­òä“´rxëZsÆ×¹Œ†’­\i×vÛ¼ëw]ª®ýö]ØèHìhm:ñ yžÞDDp¸`‚A==çéëIT‹ÖáÉ.ÅZ+BßG»¹³q,I”B \F¬XöÚX|ãÉíU­À‡Î0J"Æw”;qÇ9éÜ~b…R/¨Ü$ºQS5¥ÊªcPÎ ´„újÃè÷©¦Ã¨˜¶˜…FY’K2Œ¨;†J0ŽÔÝH­Ø”$úh«Îä3©·˜`Œ •@} ¥ŸO»¶™âšÚT‘%0°ÚNzfŽx÷WØ­ÒŠ»“{,nënÀ!6₉½ò Ï ¨EÉ y‰eÞ1å½ô÷¡N/f’ìAE>Hd‹o™¦å »SÐŒõΦ©;’Õ‚—ÄñÚÀóHx^Þ§Ò°Ö=OYf‘£‡²© }­sb1P£¾çfSðìkÉ¨ÙÆÅ^á28 ÿ*û^ÇŒÌF{”oð¬‘á@âÙÊÞª>Ÿ<·Æê}ÅyÿÚSoK¯ö<Õ³¬Šh§]ÑH®=Tæ\|fkgÂÌŽ;¨àýk£Óµz…]BL½Tt#ÔWf¯•«3ÎÅ`%Es-QwbŠ3]§ž¯áíet=A®ÚÕnjª«±bDbxöR?r89µ5!ÅÆ[2¡'ÌŽ–[ÁÚL¢Û‡a(É]®œq×áMı­½¼–ò솅™dÁÃ@"%xàñšç(¬>©K±¯Ö&jëzÑÕä å4CÍžR›ò’FÐ6*õ牒éKgMÖ’@Ù“8,qÇÝ:{×7ÒŠ¯«S²VØŸm;·Üèô?E¤éÍnö¯,‰,“ÀË&ÕÜñÈqƒÏýj·†µÅðýëÜýŸÏ.«)l›ƒ0éßhcP(xjošëâÜy«y,>*òí´øšÝ¤ìÒL¬Ê®|Ì…ÝÖVÎMR¾×¡â8µIãar£yA°v†ÜØ>¤î?V5KJ8ZQwKúc•yÉY³¢_£ZL—ï,—7M5Ãyœ:3Äì:uýÐQØj)¼G%Æ}e,E¥»¸k‰&ÝÉbÈ@õÀ xõ#ÐV}V’w·˜:ó}Mk]am,a·XIxþÒÛ·uyb©ÿ€Ÿ©­3âØ¶AØÜÛÇ$DÆÒä4hѽ;ˆb®VŠ%…§'v‚5çdt7¾$–úŠ2NÏt"UfdBG$:|þÙ©lüR–º^“iöG‘¬.#œ’à+l–I8ã9>f:㎕ÌÒÑõZVå¶Ÿð,5ˆïs ºñw÷ÑyS–ŸÈò‰dPžXEÉ £²c9Ô²|UÛ~Ò-gr5O·¢¼£ ¤’TqÏQ× c#5ËQKê”­k ë:)¼H’´ÿ¸sæ T32ƒ‡¶ò  q×íïN¾ñOÛ-¤axËÙ l†P‘ˆ±É?{Ú¹ª3GÕ)hí°}b}Í=_RRûXäW†Ýbv‘ÁÞG~Œ| äóY”PΛ 5´b©ÆËc6ÜÙ‡|ͨj¿fÃשïþÙh¡Ub €1ŠátYL·»¼‡?¯5éúdA c¯–ÆUs›gÜåÔ#NšK¡ÑÙØï@1{c­:÷ÖW1‘%ºò9ÀëZn6ŒƒŠ¿;(Lb¹Ðïo[þÓ-RA¸!³Ü×™Þ[¶‰®l\ùA»õ*kÜnâVV$^MãÅu@äˆÀoQÍm†©(Í3—J¤Ó$0 ¨í[8C‘‚ –¾Â.é3àf¬Ú î~hú~µâ È5HîbKRêÐ6õü‰®W£üÿ‘¢ûþ¼Ïþ†•Ž)µJMáu¢™èsx7Á‘¸Šm2Â7a³ícôç5‰®ü"Ò.ágÒ$’ÆãTw2FÇÐç,>¹ü+™øÎñ‘ÿ.û;U/‡¾6ºÑõX4ÛÉÚM2v€ç>Cƒ=GNõà u}š« |BuhûWJpVîqúž—w£jØ_Bb¸ˆüËØŽÄàúÕ:÷?‹MCÃÿÚÑ'úU‡,@å¢'æèHoÀú׆×v·µ…úž~*‡±©ËÐ|Ésq¼+ºY\FƒÕ‰ÀýkѾ(øbßE´Ñn,âT‰"û¬«Ì£*O©?6Oµbü1Ò¿´ümj̹ŠÐ5ËçÕx_üx©ü+×~!é_ÚÞ ¿W2À¿hŽrœœ{•Ü?ç¯_–¼cÓüΜ>Ÿ9uÿ#çDmŒhlín‡Ø×ºj¾ ðî¡àÛ‹Í/J‚)æ³óíÝÎvîûôükÂE}ð¿R‡ícc¹í­ÛèWÿe§æŠŒâöbËÔe)BKt|ûžþµ5µ¼——PÛB3,Ò,h?Úcúš¹¯éßÙ> Ô,1…·¸tAþÎ~_Ó¹ð×N:Žlr¹ŽÛuÃûm/þ¥³NÓ4Å<Ë+NàÊ03õ-úU‚ñû­×8›×Ÿe†”›ÕžœÔ.0KDsŸ4»#Å‹k§Û%¼fGòÓ¦IlŸÐWWð¿Ã:.³á‰îu:™–ñãàä(D8ýM`ü_ÿ‘ÙëÒ?æÕÚ|ÿ‘Bçþ¿ßÿ@Ž®¬¥õX»ö"Œ"ñrMi©¬þ ð]˵ºé¶~jðÉÅ\~M‘\‡Š>¬P=߇¥‘™FM¤Ç;¿Üo_c×Ö¸ož9ÖNn˜‚:ƒšôo…þ5¹ÔÝôMNc5Â!{yœåGU'¹séŸJ— Ô ªFW-T¡Zn”£gÑž6ÈÈ̬ ²œ0#CM¯Hø·áèì5x5‹tÛîV`hïÿÈšózô(ÔU ¤2½'Jn VÔI]:ä¦2ãVª+„ó-OB9úR¯g+v'V7Úèå´mÑH%ÚÌ (êkÓôízÊ»Š[e î§oç\…¬Ö[ùbÈTÉPì¹ÚOJî`ðm­»´“´à…ãeO^O©çô¯”¨âÞ§ÝPŒãtìôë›y-„¨à«}Ò:±quh«óÜF‡Ñœ æü-A¦Ý¦ã"$­å1ôéüóT5Ÿ5Ôžl3…á’I*zäÉ%³7wZ›7·2ì‚häb…¯ñ-ijj÷fA–ŽB˜ô^cáÁníqráä‹;0¥ˆÿ€×e kqkÍ«F6²Ú^ÉkUsô<Õ[$_ü>Màn±²2:úÉ‚Ä~,MyçÁÍQ£×¯ì%l›¸D “ÕÐóøÄþÍ8º¼õ{p’£ìéw8MwLm]¾Ó›8·™‘sÝsòŸÄ`× üÔ¶jž˜Ç‰c[„…NÖÿЗòªt¯²øŽßREÂ^Æ>®œüt¯å\ç5ì¿és“ˆÞ_!ý0ão?‰ð®é~û #Ïî1VóüÍÏ‹ºwÙ<\—j¸[ËurÚ_”þksà¾Æ©ª2ÿrÙþ<ßÍ+Kã&œn<;g¨(ËZOµ¢8ÁÿÇ‚VÇÃëDÑ~ZM8 æ#]Ê}›ïµË*·Â¨üޏQ¶1¾›ž]ñGRþÐñ½ÌJr–‘¥ºóÆ@ÜV#ð®ƒà§ü~ë?õÎæõæ—÷’j…Íì¿ë.%i[êÇ?Ö½/à§ük?õÊæõÓZ˜n_C—>|W7vÌŸ‹ßò;/ýzGüÚ»OƒŸò(\ÿ×ûÿè×ñþGeÿ¯Hÿ›WiðoþE Ÿúÿý:·û¬~Fô?ßeó<³Æ¿ò;ë?õôÿΣð…ãXx¿H¸SŒ]¢1ÿeŽÖýÔž5ÿ‘ÛYÿ¯§þu£©}oOUåšæ ?ï±]É^•¼¿C»V¿Ÿê{Åk5¹ð-Ĥsm4R¯Ô¶Ïäæ¼¾‰ø”Á~ê¤ô"1ùÈ‚¾v®|½þí¯3§3_½OÈ(# ƒÈ=¨¤ÜõÐóÓ¶¤žF¬ÑH0ªKçצ vz·ˆI€ZE„óT¨vëÓÓð®[H{tÕcûHýÔªafWwþxüê׈ôéb¾6ÚLá·PûzŠùÝëEu1i²9Ô¬E¶‰áO¿ø×-¢X\-ˆ‚[ÂÖÊ2.#õ`kE¼éóo™kT\I#°Ûôõ'éǽs¸ØíN榱q&å?.9¬M:Xtý"}M«¹f',~èý%ôFÖÌFòù‹vóÛ°ü«”½Õno­àÈX!D^„úŸS]8<+ÄOÉnpføáiÿyìS–WšW•Î]سsL Ñ_V••‘ðÒm»°¯Hø3ÿ#E÷ýyŸý +ÍëÒ> ÿÈÑ}ÿ^gÿCJçÅÿGFøññŸþF=;þ½?öv¯7Ž'šUŠ%-#°TQüLN¯Yø© júLj,$Ӵ님ÖÛk4IóÁ=ªOü6º°ÔcÕõÄXÞšÞÔ0b³1qØzý+ UáN‚»Ôé­‡\K²Ó¹ÛjR'†¼ 6°Øyh}X&ÕüÎ?:ð¿é_Úþ/Ómf5”K'¦Ôùˆ?\ø×qñkÅQÊ«áë9q%Û)à÷Sóäý7àÆ•ºmKWuû¡m£>çæý’²§zXyMîÍk5[qÚ'¡ø³B›Äšº\7‚×Íe.æ=ùPsŒdw¹|-¹ðö¿iª&¶’–ì¤oR#;ÏcX?¼m¬Yx¶k+Q–Þ hÖ7ã çæ'‘îá\·ü'Þ*ÿ ÝÏä¿áJ• þÎÑi&:Øœ?µ¼¢ÛG¬üVÒ¿´<% Ëe"Î1×oÝoÃ?…x³#BU”åHìGC_Gxfñ‡Õ“þ߇3T½±Æ£ûøýô1Uü}u…ðöîÐñ¥œCØü¤ß;ªŸÂ]Kíž û+½”ï¾Óóý°>4jYþËÒÔÿ~æAÿޝþÏ\¦ý²§Ñ3¶¥EõkգɫÔþ Çö³ÿ\áþo^W^©ðSþ?uŸúçózô±ŸÁg•þ>oæük[ÄÞñ©ã-R[M&åâšá™$ *ë¸1^‰à//„¬æ»½–7¿™q#ƒòDƒ þ¤ûJÖ¦"1£dõhÆ–s®ÛZ\­ñP[o Ef绸UÛê«óù…üëÂuÿüN¾%ñm˜›@b€ö~~güN?+ˆŸP³¶“d×éÔŠÓ F’æÒæx¹:ÕŸ&¶,Òt¬Ù5ý9:JÒECýqUÄð ì¶ýX Ñâi-ägymlܹŠÚId¨Î+¯Ñ® ×t%K†Ì¨z÷Èï\¥¤Sj»Öd‡ÉˆÉäÆ ÎáüGú~ti—é·(aïÎ;ñ3«4â}6QF­ mO«=*ÊÂXp»Ô§L`ZW¥¥¶ÜrÜîk—‡Å6Ú°l`aªXÍÖ¥&ûƒµOW©ö¯1§Ôö“l§|'Ôæk;$ÞÁYÉÄ@'ØW'^á¤ø~-Æ[û¬$¥>lÿË$ŸÆ¾³Öb¾»¸G 4Œñ©8I$ôÎ+ÛÊæ©§ u>k;¤êµR:Ø¿Š)h¯hù±+ªð'Š-¼)«\^\ÛË:ˈ,DdÀ知r´t©œââ˧QÓ’”wG´·Æ/i)¤ÞÛ.€:æuß‹z¶£A§[¦pdWß.=Ž_Ë>õç½(®xàéEÞÇDñÕ䬨¥‹±f$±9$œ’}kÒ¼!ñIðχ Ó›N»–UfydB¸f'9ëéøW™ÐkZ”cQrËc*UçJ\Ñܳy&¡¨\ÞÍþ¶âV•þ¬I?ΫÒu¥­RIY6Û»;Ï|AƒÂšuՕݬóÇ$¢Xü¢>RF9úÖ¹Ïꖚ߈®µ+($‚+‚Ç&2Ç©ükŠÊ4a¹­Ù¬«ÎPTÞÈì|ã8¼#=ñ¹·–x.Q~XˆÈe'ž}˜þ•›ãøŠ]Ecx¡(±Å‘•P9Î?Ú,À¥¡Q‚Ÿ´ê¼Ý?fö ì<ã oÜ_Éuk5À¹DUòˆãicÎO½qÔUT¦ªG–DÓ©*ræŽçIãoAâ FÞ `ÉX¶ÈFr ç­oxâ —…4I¬.l®gw¹iƒDWQŽOû&¼÷¥-D¨BPTÞȸâjF£¨·g²Mñ¦ÁPù=Ó¿£Êª?1Ÿå\G‰¾!ë$‰­X¥¥“u‚rãý¦<Ÿ§Ú¹*a…¥t‹©Œ­QY½ š¥ßØleûùÚ¹õ5Å;4ŽYÉf'$ž¦ºÍ…‚y9sü‡õ®xt¯;>j–è[/¦£K›«Ž*K+)õ+è,íP¼ó¸DQêj3]çÃc·»Ôõ§@òZÁäZ¡þ9åÈþùWü+ŒïJîÇsâk}6ÓápÒ´Ë)ÓÚ('eR>rT±ç®rzW)_³Û]mWtº!Ót{HîcÞ.bß|d¶ò¿ž?ýU—àoÁ«ø†}&ûw•´¬ à¶È÷=« ©¶N“Q‹}„°ê71Z鶦i_?AîkÕ|9áDÑã[‹²³_c¨û±ÿ»ïïSEo†äO²Á6‡å‘#Œ(ǯ“îky›*H9ª…veZ¼¤¬¶8¯Šz²i?õ-‰n—ì± ã,üÉw¾V’0Ì {Ç}pÜk¶:$oû»H¼éTùhýú(÷Õy ’1[Rd–ºµå“lWó#Á'?—¥kÇâ;fL˪ýÀÁα !#¥7½ ÈÑ}ÿ^GÿCJóŠôƒ?ò4_בÿÐÒ½Ì_ðd|Þ øñã9ÿŠ‹Nÿ¯Oý«Sàÿ‡î`’ï\¸‰£ŽX¼‹}ÃÔÌßO•yïÍwš¾¡áÛ;ØWWŸOŠä®c7!wÏbz æ¤Ö ¼Ö´F]WKI$\¥Äj$ =3ê9æûwì•+Yw=_«%]Õ½ßcǾ,j±j.ð0e²„BÄtß’X~ê pgš½«iwº>©=Ž¡%Ìmóäçvz0=Áõ«~Ò¿¶¼Q§XÜ’L ƒý…ù›ô½J|´éi²GQÊ­gu«g·èqü5‰äP²[YµÌ€ÿÏB ‘ùœT~4·Oü:šæÉòörx¿UÜ?©ñoSûƒþȧç½cÇ}«óúøÔÿ /×Sð-¼2aÍ«=³ƒÜ?ï–¼‹IGÛùžß4\þ¯ÒÇÏõïß -¿`” ™ä”þ ³ù ¯×4ÆÑµÛí9ÿG™‘sÝsòŸÄ`×½ü7*~é;zmqøùšîÇJô“]O?.…«4ú#Ãüax×þ0ÕîXç7N€ÿ²§jþŠ+UÝT¬ß†ûÂâP~»ÍR®ÊjÑGWy¶Ë6òµÿ®Éÿ¡ ÷ÿ‰ŸòOu_ûeÿ£R¼ÃþB6¿õÙ?ô!_Oê×zt³êoY¦<Ã0Êò@üq\×Ë83ÒË×59£årG¨¯Pø+íWŸùwOý×mÿ /€ÿçïJÿ¿#ü+KFÕ|;¨M*è³Y¼ˆ Éöt @ÏàT×ÄÊtÜ\Z/„:ŠJižSñþG+ûÇÿ£$¯>ï^ƒñþG+oûÇÿ£$¯>šíÂÿ >‡/øÒõ8}m•µ{€» Z¥Z–ówÛ'.0Þcd{äÔQô¯nòlú:jÐKÈÜðÆ”ú׈,tõûDʇÙz±ü¯¬laŽÊ†0QÚ¼àÕŠÉâ©oœ ¶–ìÀú3|£ÿß^íæÉ?Ê …õ©6†ÄZ›5ûˆ8r#üÎ?­t’2B‚(ÀU@éY–0"ÝD£”3ŸÃú°©fý©S©Ï4‹qèX×üyÕ³¤#ug¹‘G ùWÿg¯`„î¾”ž‰¾døŸªSâ¢wf;b-ãö ×ÿ-A2zy摆F)OZ:Ó2ÔbŠ(´¯Hø3ÿ#E÷ýyý +ÍëÑþ ÈÑ}ÿ^gÿCJ÷1Á‘óX?ãÄÆqÿŸÿ^Ÿû;U_„ÚÝͧŠIÞÍiz¯˜Éá]T°aé‘ï‘éZ_4ëëïiæÒÊæp-pL13ó½¸àU†~Ôl5a­ê5°‰mᓇ,Èì0HÁçŸÏ•N iv;&ñ—r_Œút_fÓ50”;[±þò‘¸~DΨ|ÒüíVÿTuùm⦼Ç'àÿ}S¾2k1Oyc£ÄÁšÜ¦Áû¥€ >¸ÉüEv?4õÑ| m,ØF¸ w)<`7Cÿ|¬ÜÜp©>¦Šž1µ²)øûÁz·‹¯lÚÒêÖ+khؘ°%ØòxcZŸÀÕ<$·Ñ^ÜÛM ÁFA bU†AêPGå^ssñSÄÏs3ÛÝÇ,ìcCªO$v©´¿Š^!µ§ö…äoffA:ù>By9°æ©ÐÄ{.M,%‰Ã{_i­Ët¿²ø’ßQEÂ^Æ?í¦ÿÇJþUÚ|$½ H3Í­Ä‘‘é“¿ÿf§üWÒþßàÉ.Pf[qŽ»~ë~9ÿ€× ð“^M;^›LÂÅ~Œ“À•sø‚GÔ já|â=(ã/ÒG1ã+6±ñž¯nÃéO ú9Þ?F…^ÇñOÁ·Z„±ëšl-<¨ž]Ì1Œ±Qр¿OC^K ÝÄ­³Êè eHÉ*RqÒ»°õc:iÜàÄÑ”*µ`°ÿ¯ývOýWÐ?äŸjŸöËÿF¥|ýaÿ!oúìŸú¯ ~&É>Õ?í—þJçÅÿŸõÔéÁ§§è|í^£ð[þBú¯ý{§þ„kËÍzÁoù ê¿õîŸú­ñÁg>øñ(ücãÆVÿöÿFI^g©Ü}“NšPûCþÕzoÆ?ù­¿ìþŒ’¼‡ÄгØÇ('¾ú÷ý?ZÎ2qÂÝv5pSÆZ]ÎUݤvwbÌNI=êHÇTjÔC${W{ǵü°UѯîÛ¬·?¨Eù¹¯Y‹ W”ü Õ ¸Ñ.tÕ]³ÚÈdoöƒž¿†1^Šu8Ѷ¶TƒíA´V†½‘ÿL¸qÎØÔ vê ªåÏö€’6&7c×µA¤Ü–Òµ œýë†U>ÁT<Ò;kÍ¿ÀÄíÅ"™¡%ÚYÁuu!Â"b}¯‘.®žúòâòOõ—´­õbIþuôgÄMWû?Àº“+a¥ˆÂ§=Ûåþµó`àS2˜ÐRç©3“š_‚äú c§iÌO¥FIÏA@ÝuÿRGNJQÝìß<4‘ ÞÂþ­\î¹ñŽY¢h´Kn>ÑrC0ú ÈÏÔŸ¥yUÏ$îuK0­%kØ¥k»³5äÒ9–MÓJ~f9<Ÿs^­â/‰z%Ï….ôÍ";¤šXD‡Œ*ª)ç?ÝÎ+ȱEkR„j4ßCx‰ÓMG¨QÖK[Ágñ3A¸ð´Zn®—;Ú}žà¤Aƒ|»I=ú×)hä†S•qÁ±”Ú+T#Nü½Mêâ'VÜÝ^ðÇÅÈÝ-¼C¢eû\K¸0õeƒôÏÐWKsñGÂpÀ]oäœãˆã·“sß@Ì×Ï´•Œ°4›¾ÆðÌkF6Ü¿5ÅŸöë\ÚC$6ió#‰°Yvqø ô¿|GÐõï ^é¶kwçͳa’0‡V99ô¼––¶Íž†0ÄÎ Iu»_‡^)Óü-}> &)°ÁÇ¥GE^Äÿ;³bI¦3[ÃUTˆ©P¾Õ"^Ê–Æ´®IÉóUè£ëØçaìãØæ5ŸiÚæ¢on®¯M¡vÆÊ}TúÕøV7k½CþûOþ"»Z(úö'ùؽ”;Oü+þ5ûí?øŠ?áXhßóù¨ßiÿÄWmKG×±ÎÃØÓìpÇánŠzÞj?÷ÜüE!øW¢ÏÞ¡øºñÜâŠ>¿ˆþvÆŸ`®£Á¶–×m{ö›x¥Ú#Ûæ lgw­s«­ð'ßÔ>‘ÿìÕYzOüÿ!Wø¡4Þ[Ù,&[猅uhÂm$ìœß½QÖ|%À×níÊ7IܲzþÍë‡þ*½oþ¾SÿDE]7ƒuW>Ÿ3gbÐwËõ¯FU(Ö¬ðõ!nÌÖq‚šgœŒŽ†» iöw:7™=¤¹•†é" qÇs\ç‰,ÖÃÄăÌ«:Ðn$0ÿ¾”Ÿø®³ÁŸòÿ¶Íý+ g‹tå­®]iÞš’+_‘¶ËŽâÌ‘ùí¬Oßè·6öQé"'Ús/•nSäòß©Ú8Ý·ô®z O÷EIQ_š•>D8Qµ¥s¨ðm¥µÛÞ‹›xf o˜±Þµ±#ø`ß¾"X¥Ê¬†0‡$p9ÁÞ³| þ²ÿéþÍ\þ¾?â©Ö¬éÿ¢c®ŠU#GŽ)ëú²%*­^Æßˆ<1•»^X–ò“™"c£ÔJ¥áÛ½"ÕnNª!;Šy~d%ýsŽ;WSá©^ÿÃè·_¼tGw;—ßð8¯5¶mÖ°±l’ŠwzñÖ³Ä*t\14ã£éò/4á'±éº|z©Ëeii*#m'ìÁpz÷¨ÉªxJ)¤‰ÒÌ{¶ËF;aPa’ù¶+&O4íù}6ãð®ÿQ@Ò¡IomláG}ŠM¸9lŽ ?•pZoü…lÿëºèBºŸÿÈ?Kÿ¯ÿý£-ašöU*¸®åÖ^ôcrËèzµjf°x—°–ݲô+Óðë\U夶7rÚÌ’3ƒŽ‡Ð¨­_ \¼:ìp©;'VG¸ƒú~µgÇ1¬zµŒƒïM¾ˆÉýJŠÐ§ˆÃºñšÜpr…NFî‹Þ±´ºÒæ{‹X%a9¤Œ1jñ“S>©á(å’7K0ñ»#hN¾¢àùOÿ_ÿAZáeÿËÏúû¸ÿѯ[ûhÐÂÂ|©ÜŽNz\Þñ&£¡ÜÙÛG¥,>q¸¼«b‡nÆêvŽ3Š“ÁÖ¶÷W—+qR…Œ$@Ø9÷®rºŸÿÇõ×ýrι(ÖUñPn)Δڹ«wyá{§¶¹†Í&LnQk»ì§±ñ¬­kUðÛèwËb¶ÿk08‡Ë´!·í8ÁÛ×5“â?ù5/úèŸú*:Ì­ñ8åN¤©ò-§FéJáÞŠ(¯ê ë¼ ÷ïþ‘ÿìÕÈ×]àO¿ôÿf®ì·ýæ??ÈÆ¿ðÙÎëŸò5ë_õòŸú"*³á™ ~"´=‰e>ùSUµÏùõ¯úùOýYðÚñ ˜˜ŸÉIªþ»§óþÈÓñê¨éOëè}ùˆÿCùÖσäÿm[úV'¤RÒ"ïå\?äbû5mx7þ@_öÙ¿¥z‹þFÐæÿ—?3‘‡ÃÒ€ضB€G˜ŸãUï´ë½5£[ȼ¦”1@XÀc=¸üë]¯¬ÚøgGþÊÓæYuCX£Œ·üµ Œ“Ï\`W K1ÃvF¡>€`W£ÉŠtŸ5P+B¹ûÑ·¡öþ•猬’ÿ}/ø×kªêRiûlQ,®‚%Í´Ì«×ûÙ®kþ­K#þ%ÖŸ÷ù¿øšõq´ðòqu¥gcšŒ¦“åW0ôÆ ©Ø²U¦Œ‚r7 ë<~¬Ö`PIÙàÓkÑ"0]é°’ ŽH”‘ß ôWTlÚj°]Õ×ÙÙðæ7`5ñ¬2øFtjBúw.»jqg7á"ãí¿ož6Ž8Ôˆ÷Œb1‘í‚k3ÅZ„zˆÊDÁ¢°ŒÁ¸t21Aï¨>¹«¡ñ¥Æ©ogØ®½´„¤òF¿½øB·ðƒóqœãW iKj ¹C GêÐÝêÙT“©/hÎûÁ?ò Ÿþ¾þ‚µÍÉá­a®nœX±s3©ó•iƒ×Ð×IàŸùÏÿ_ÿAZÈ—Æú’\ÜF–V›#šHÔ³¶HW+“ùWC…a)ûgdfœ•Ir£÷K¼ÓDfò+Ì$&]Nqס­ïÇõßýrαu}nó[{ss ¼Kâ<²I$€;ý+kÀÿñýwÿ\‡ó®,Y1¸þðû§ñ~_ö¬*¨¾(îýÝKtf‡‚?ä?ý|ýk…—þ?/?ëîãÿF½w^ 8Ògÿ¯ƒÿ ­N|#¤—‘Ê˺IFýáêıýI®‰a§_ N0èB¨¡RMž{]Gÿãþïþ¹çOñ.…a¥hrÝÛ+ù«$H79# "©ý ¦xþ?®ÿë˜þuÉC <>*ŸSIÔS¦Ú2¼Iÿ#F§ÿ]ÿEGY«Ñî¼3¦Þ^Mw0Ë1°ø(_ägê~Ó-4«Ë˜’C$0<ŠCŒ…$gò­±9uj•e8ÚÌšuã¤Î"Š=(¯èuG,Ü.Ù¢ŽE :†ó©(¡;l ciŽÖaÝcÿ*Ÿ­Srop°qQMkmpÁ¦·ŠFºüêZ)&Ö¨ ßÙ¶?óåmÿ~—ü)ÑÙZDáãµteŒ?œbŠ®yw "9`†u 41È äPÀ~uXÚFû’ÖnÅcÿ*±IG3JÉ…´Q@©)­­î3A¤tÞ€ãó§¢$h5TAÑT` uîí` (¢}ŽÔKæ‹hD™ÎñÎ}sëSÑFi¶Þá` ƒÈ=j¬ía}ñ[Cc’0 OÞŠ.À*²´Ä‰k8ä2Æüê‚NÉ=…\µ³-¶GÈ!¹V^¢µ£Nu,LêÕ…5yòYCuµ¥¶Ž^v‚èÜÓÆoó±[ez~é~o§¸‘¤cj.9¬X¼Sg!BmM¦)]WlˆÒ÷Œ6B†eÎ@8`qŠôé`lµló§Ž”Ÿº‡&ƒr£Gmn„ ïXÀ*}°)³Øo‰~ÑH¥°Ô7>¸¥ÿ„žÑ®ímâ¶¹•îLžV kŽP°Üà‘ÆF2qÎ*k/[_jMd°\Fù™Qä ¶O)ö>6±#ž™5rÀEëvLq•VèÍ:m’± cnà)ÂìëÖVÿ÷éº ­RT`Vc’ØÍfÏBíò¶Àp޵çW¡V–·º;¨b!WN¤TQEr!E¿§iÚ@Ð$Õ5I&Ž8åØZ0ORª£j‚NK•µ ­.X“9¨+³ŽõwV›EÝnº;ÜÊY›Î3C"\q‚ÊZуMÓ4í2-G\žDYÎ!‚5%Ÿ##…“Žxè9=ëEƒ¨çȚトûX¨Ý˜4WE{¤é·zDšž$…"É’)׃È#¯Ò ðÖ“o«]OÁ* a±±Þ‡ƒ¨ª*}öìÖ<®F%ÑC¤húÝ‹Üh7³Hê¡„s#&àG ªyõé\çjŠØyÑ·7R¡5-‹6¤ú¬R.RI‘Xg€5½âí*ÇJ´±{;qKså¹ÞÍ•òÝ»ŸU‰¦ÈZËþ¾#ÿÐ…tÿ?ãËLÿ¯Ãÿ¢d®Ü%8Ë RM]¯ò1ªÚ©Ž6®éñ]jö°L»¢‘ðË’2? ¥ZZü‡ì¿ë þµÁA'R)÷FÓøY{źu¦—s`–pˆÖT•Ÿæc’¦0:ŸöKáM&ËSK£w˜P®ß™†3œô5/ã÷Kÿ®Sÿ8ªÇÕß}Sú×®éSúú‡*µ¶ùÜÏØÞå™tß ÛÊÑO%œR)Ã#ÞGÔ®sÄk£Áse“-³ïIQþaà Î>ñª:°ÛÚŸþ>ŸúU@:Ö¬MÍISIíéNœ´“‘ØøkCÓu 'κ¶ó$óg{?VM—ƒÔÓØ©A½äãÕ?ƒäÿm›úW[öxøt*è”èÐÃÓ›¦ý?ÈÍFSœ—5އÄÉ¡[[Ù &kWšKŽ"¸óÏ-ÏMÇ…æ°éôœ ¥†y Ö¼ªõcZw„y|¿¤tÁ8GWrÝ®ã¾DaŒ2¶kG­64XÑUs´tÍEz‚K)”™€ØOs…#œñ^Î’§ïUÕÙ? Ö4~°Ž+ˆ‰¸x¥…­ÕLˆcc’©Çà÷<JªöÚ´> Há¹¹:¤‚&ÞÛ£f‘IóµA#èj­Çˆ&¸]Ãs™|É@JǶ|.{ûsþÑ®”´Ñ¢ú3`è¡ìÞ îmͤ"ü§(1ÁÈ9éO²Ð¬l/žòÚ2“?›æ7?™'˜wqÎ 8ôVU¾«t4ý I ÕwDU/Á²›s!ú¹a¿o#<â™-óÝNòQ4ãvú,n% öhÊ…nÛæÎ?‹ƒÞž×ž×:ªŽX’u àp r 'ŠâÐʳº9°ŽåUÕ¶å20ÇlVÔ€×gYÎ «=IÖ 4ÌI#xÛ…IäéL«ú„@~ð+=Hègâ¾z½/g7Þ¡WÚAHZßhÞO‡w 3·Ûa;TdàM?¥`WQg¨\i^žîР™n‘È»€ß")ã#³êË­í]û1W¿*·sžŽÖSs RFéæ8Q¹HÎN?­jøÉ÷xš1ò[Y)Œá.ìô*„º­ö£ªØÝßÍ}”¢8¶ 3!$ò¸+CÆQñ7™–KH°}Hy3üÅ\T#‡©ìÝöò%ó9ǘ³à¹3©\Û09`Ë)èp@þLiÞO*öî"I1'–IõV þ¢£ðRÖ%~Ë êX§xaqwyr¿vu3£¹aúèÁü›îÿ"*ï/‘KáÌo¶Þ» vJÏNBñúgð¬A:]<×1ÿªžyf‹þ¹³³/þ:Etz•ÌúïtËÈæh­äEõ¼ *¾ås·= ÏÏtúW>7–8ÑZõ¹t½é9?BÞ™ÿ!k/úøÿBÔxÿþ<´Ïúü?ú&Jåô¿ù Xÿ×Äú®ŸÇÿñå¦×áÿÑ2UàÿÝ*ÿ]Wø‘8ÚÒÐ?ä?eÿ]ò5›ŠÒÐ?ä?eÿ]ò5çáÿ‹To?…šþ>ÿÝ3þ¹Oüâ«ÿW}õOýš ñïü~éõÊçOà_õwßTÿÙ«Ùò2^Ÿ¡Éÿ. NÂñõ­EÖÎá•®X«˜‚8äU `š 4RFHÈ¥sù×g{ãd´¿¹µlÒyˉEsÖ¬u­J;¯²µº¤>^ÃwÚ¹q´(§)©ûÝiNnÊÚ—ƒäÿm›úW —¨‹xó§ÝŒ(ë z}+»ðoü€¿í³JË? .”åO ™À8ü«®t©TÂÓU%ÊeIT—*¹ËÍk=¶Ñ=¼°îÎß1 çéš}à~ói¯µZ×µ¦×.í%û'ÙÖÞ9æ@Ä–({ö A§îóøU#“Ô}+ËTá BŒÑ­YIÑm«3Pt¬É5»Xµ3`ë8pé—Ë&0ì2ª[±>õ¥YshPÍ©µë]\Î’˜O/ÌA…o»»#®3Œö¯q[©á«u~Âyš8äbEÙ³$®)<ŸC´€zgŠ‹þ[n³"\H8$DHòÌ&fXð3Ü¡ý*°ðf––3ÚG%âGÁëXÙ­É·_j©8èÝ+ò¯0^úg«—ü ZÖžþÑ<-‹\Â.ä¼…’ã{4d:ãþU“Fk—]Ñ“’Wº±Û8s+jéÒóJÖô¸!ÔïÎîØI¤ 8îxç#=EsQB»¤Þ—Ot)ÛÔܽԴÝ/G¸Ó4KÕ½¾»%º…ƒ, ВÀÀ…É9 ž2iþ¿°Ò§®î`µ‡b¢\ ëÐf° Íô­Þ5ª‘”ce‘ÇÝi½Í?jöºbØê.‘ÙÏj¢C!ÚìäöãÀVlžPšT†xî#F*%W¡Èã¦>”ŸJ+•ùé¨5³ÓçиÕÝ´¿ù Y×Äú®£Çÿñå¦×áÿÑ2W1¥ó«Y×Äú¯BÖô8µ¸mã–WˆA/š ÉÚËŽÞ¯GSR1Ýÿ‘…wių̫KÃÿò²ÿ®ƒùéO­?çòûäW9¢¨OÇçÞKÉêÙsøâ¹V­ ”×ThêÆqiÞ=ÿÝ/þ¹Oüâ©ü ÷/¾©ýj¿?ã÷Kÿ®Sÿ8ªÇÕß}Súס/ù/OÐÁæ5_ùjõôÿÒªšµªÿÈ{Sÿ¯§þ•V¼Œ_ñçêÿ3ªŸÀAðoü€¿í³Jó«ø÷‹ýÁü«Ñ|·ÿm›úU8ü i*‹É𠺵ëUÃÔ¯…¦ sB¤aRW8ª’T™Y•˜Às[Þ ðô5„wÍ,¬óðÀ2 ÏOjçAÁÈ<Žâ¼š”jaæ”Ö» Q«czНg2ÉÐY™FX‘V+ܧ58©#Á© 8³ÄÓÝ[é‘=¤’FæáÞ0IsžŠÇ¬õ lÅhešùn qýÜí¸9ÕüÏ“å„<íàç¯NžMwMŠe…î‚»4ªF1\:€Ôë­fÊÊy¥yY.輨Bɂ@Ç<ÖÊöµ=-c˜–ÿXEÔŒRÞ½Ê[Ý´±4H]_ygo9\÷9ëF£¨k0Øfi®"¼Šê_:#lJ0 b'°ÆÀaÉÈ'Šè£×ôÙoÚ9Ý™Šª¸‚O,–@ê7ãnJqœóBx‡J}›o^gQ±1ÊÁPãÉLóŠw}‡wØÒVÊ‚AŒàõµFËV´Ô.§··dy¶ÒFðq–P3‚=zUîÝ3PÕ·3*ß:¬Y ЃÐÖV*ÍÜÂY>F}¸å[֫׋¨ªTº=Ì-7NšL(¢Šæ:BŠ( Š( Š( V*Á”²r œ}A¥ón?çûPÿÀÙøªm¸Ôœ~a4žâù·?óý¨àl¿üU53|·‘X’w‰~O$îÎrryëÍ-ÝYËvÁE.‚6çpòÍq+(!LÓ¼˜ÆâqœÊœU]©<ñŒäùSÅQ–&âÌOòïNµ’HtnX²$[™Ê‘ÛÍkS.Q“Œeü¿ù7{6¿EœUýVéo|#%Òãç ‡pÈü·ölÔiI¿Ûm¯·ù™}u^¢KáWõ±¶YA éÏZZåc–xõ7N¹ËIo6ROïÆWÄt®«µaŒÂ<3Ž·¾¿‰®íÓÒÖ )sI\GHQER¸Õ¬-&0Ïr‰ Á*AÈÏ#µ]:S¨íÛò&sŒäì\ 2•<ƒÁ¨íí¢´`6Dƒ ¹'ç½DÚ…œv‹t÷°7ÝsÐý*Kk»{È|Ûy–DèJöúÕû:Ñ…ìí;\žzn[«Ûð#m °6ZŸùg¹½s×9ëEÞ›i{qÜÃæ$tnaÈÔQkzd®¨—‘c’E_«œ±4dœœ¢÷ê¾dÅQ¨šŠM|жZu¦žZB#ß19ÇÔÔ“ÛCrÑ4©¸ÂâDäŒ0ïÅV—ZÓ­äx¥»]Nx?•YûTdù£|à´Cx“úSœq<ÞÒjW}]ûwô] rFÖ]4$tFÈÃ*ÃzŠ®tûF³KC`LMÇŒõÎjDº…îžÙdhÀ,À?þ±KÄ7Qù¸tÉ\QÖ³^Úšê–üŸùû¹¾ŒkÚA-ÜWo7‚òxùõïJ–°Çq5ÂF³$l“»Ž”CuòKR«¼-¶@?„ÿhûTkû/š¾~Ýþ_|zÓn·Ã®‹Ïmþî¢^ËâÓÇüÊ‹¡i‰qç­¢ dà\glÛBnÅÑLÌ`lŸ»œã:ÒÃs þo• o)ÌoþË¢ ƒU±¹¸0CuËýÐzý=jå,UK¹s;/=ù£BJÊïËrh­a‚I¤‰6´Í¹ÎIÉühžÖ¡™7ˆä'$a‡CÅ*ÜD÷[¬€ËÔv¥#ÝAÊ[4Ê'pYS¹ÿÔk?ßsß[Úþvÿ†ü ýß-´°‚Òv×b¹ŠbêúsM䋸üÌíÁ$sÓÕ‹›˜lá2ÜJ±&q–=èk$ù“v¶úÛ`^Á¦Õ¬½>bKgo<ÐÍ$@É Ìm“‘þ?OÅCmwo{™m2È à•ì}é!¼¶¸·7L­ çsöëYN5ž“OM=/иʚÖ-kø“ÑQÁáŽÙé]4"+ ¡›«Éük§ ‰t9¬·VüŒkQö¼·{;˜º¿•o«i“\(h]I#åV#ŒÿžÔimÚÞ§=¦>ÊQ²Œ+>;~¿m:,ˆQÑ]OUa‘Dq¤i²4TAÑT`VëG‘§{[}-{ÞÝÌ^û^ké{ùío¸âbK‡Ðl¡”[%•Ä›<à„ÈŸ1<žAüwÀÇ¥GäCåy^L~_÷6Œ~U%,v9b­ek6þÿÔx\/°¾·Ñ~=§ÛÏ.¯¨ºK…nH‘0ž‡µZ¾x‹H€n?નŠXª*–9b2}è(Œêå²ýÖ#‘ô¢xîz¼íiËo½XQÂÚ©ë{þ79›˜f:ö£yjI¸µòœ'gRŸ2þB¬i‹kᙯVvP}Ià~x­àˆ®Î¨¡›©“õ4ß&–afs·hÆ~•¬óT¦©Î:._¹+[úîD0R„Üã-ï÷³–Ò¼ý;R´k‹y![•1HîÀ‰’Àþ UJÚ{ÊöͶæ e–/rä¨&º'$ÀtVÁÈÜ3ƒëJ7ïÚ»ñØçZ©f—«í”lì×—õm°§ìù´½ÿ¯ž§3bòÝø{X’$e’iå}ƒ¨Èæ*æy¤IŸb&¸Ø(,§äãŽüÖÊ"&v"®ã¸íÉõ¦¬Ç!‘"]º²¨þ5qôê)§®î¬ü­g¦¨ªxIÕ¦•×ô3lùñ6¥ÿ\âþU‡u5ÅÅÔú´6ò:E2´SùB&Aô5Øyhœ"†n Éô‹i–±¢¦1´/•:9ŒiOŸ’îÊ?%¿Þ*¸78òs[Vþoo¸ÇÖ.a?Ù7%ÂÀnU÷›qœþU§m{ky»ìÓ¤»q»aÎ3R5¼-£C"ôR ô±ÅYò¢Hó×bšæ©Z”é(YÝ^ݵwÔÞªF£•Õ¯÷ WvÓ’6UvºP¥†@8î;Õ©¡x4;•˜£ÍäI½Ñ†àã¥^hÑÊ–Ub§##84¤HHÁuþ¶ý:vÒ.þºýâxtç9õ’±ÈÄ—&osöhí¤*ñËÙ…$÷5kVm¾#_ôÈ­sh?y*ç<`÷ÿ èŒQT1FUNUJŒ§¥$–ðJÁ¤†'8ÆY5Ùý«TSqÒÍin¯}WÞs}A¨r©k§~ž†>½4øni--ê'Lî«:UÄ º/·[Ý\d¶è!ÛÇaïüêÿ‘•åyQùÜÚ1ùRGoMº8"FÆ2¨®g‹¦è:6{¶¶ëmôòèmõyûURëdºÿ_yÊ ‹£jòì{§¸F›rùÈÆ?пgŸD’ü~â5+1ahÆúVâÁ>õ†5ï*€:s¢H…U”õ 2 o<ÊI¨»k}uÕ[M42Ž J-6¯§NÎú˜ÚSÅ?ˆ/§³ÚmŠ"–A…göýk Æ;¯° X³ä_î,ßÜØNïÌ]´q¤H4TQÑT` EŽ4R4UìàS§šªr“Qº|»ÿuhßõði^Vzíægø{þ@ŸîŸýÖ5cP¨ªª:‘^ez¾Ö¬ª[vßÞwQ‡³‚‡dKöiÿ猟÷Á£ìÓÿÏ ïƒE~É™‰öiÿ焟÷Á¥û4ÿóÆOûàÑEÉ3³OÿÍqÿ<$ÿ¾ Qìs1>Ï?üñ“þø4}šùã'ýðh¢dƒ™‹öiÿ猟÷Á¤û<ÿóÂOûàÑEÉ3ìÓÿÏ?ïƒA¶ŸþxÉÿ|(¥ìs0û4ÿóÆOûàÑöiÿ猟÷Á¢Š~É3ìÓÿÏ?ïƒKöiÿ猟÷Á¢Š=’fgŸþxKÿ|O³ÏÿÍ?üñ“þø4QOØÄ9˜}šùã'ýðhû4ÿóÆOûàÑE/dƒ™‡Ù§ÿž2ß³Oÿ÷ÿ5þaG (1VßÿùM>Ÿûûñúÿ¯}üÿÿ¿^k_ýGûVµü€ …ÿòš,è¿Ëd®¿–ȸ¸[–È&µˆáwÐ!ñ„Mš¸%|T+è/×Pׯþ6¿6ˆëÇÿðÿÿ³Ÿ xF¥ÿþ@R¥ïþ¹l:¾%¹H«ÐwË]HFï–¸ `k–¹Hl–¸’ _ ¯–ºq„·Òùk °þZóKk‚Ci¸å¬d ¢Ÿ†“MSÁð[à“| E¸5ðD5›¨!À¼/áµËXT5Ý®†³qf<&M߆£p@›áÒn–S9fZÅÁ¤xAt.rÖ@f¼"L† Pä™\Éð`(¤2ã(fÅ#@©| ‹r]2\BgdpBµR·Ç ˆª;8ÍrÞ©“pEɹ@h&Ëm ÎæF©¿  Âkɸ f‚!Ìɉ•’ šapφW’°.·Ës4F†VÃPîÃa‘vˆlTh3†RàMjˆ,lÔu„Óø@ÓCm-™ä5khCB…ÐDX1È-%üŠ‚’òÜ(áµC†ˆ(aEGuéß-ËUB§}”kÚ!¦®\ « |Kz[常+¶v£Sº™qöƒˆŽáûIüxA½ç~ 6ïïpÂ_¦šzé÷÷ ØD  &ØXA¦wj»ïž Â_¡«íýëÞ †ZÈKÂ#ª„ío®µ¶§DÑ5ð’!”@mÓ¯u톪¤×TA¸6@û·×d”2Ÿ A¯„@àø7UáǨ Ènáiê6ƒ¢¶ô®Õô×Ñ Âôƒmí †£‘m6Z ƒ\6—Iï¢ÒM·Aá@P&a°!A•çg€jÞÖ¤Th' ÛÈgUi4 6TÃDƒHéA£Xf\·ø@Ò ú}§m©ÎL?UjŸ ƒ¤ÛtëƒMµ #=»ÿǤôÿu¶ÛPYP{ÿÔ2:ôêÞ¿_ÖÔ=»ê»ê&ïµÜ6×ê¡ßﮓ«ëõ†úÝiý¿®“Ómö¾ïü.«úþézÿßïî×Þþïé7ë©}~Û^“¥i}ÿÅïwü?µ½«ÿuºÿõw}.›ôûþ½/þêúN¯úýÿýSöÁ2£Õéµ_ßÿ¯þÄ_ö½÷ýÚôˆwî ðÇ«÷¬ŒzîŸ_Yê»õ{ß·õýé1tÿßô¯ýiïªÖº‡×ÞEz"¿tE~2#‡ü-…ÐMvýû¯¿É„íÓ …_ÿÖ¶¿«Óá¶ãµ¶ôþßëw¿kè5oÇú²ÈE×þÿëïIý×m÷Ú^Ú§¦íýZí|?¯¾ÿN¯ûþý~ô—¶–·_[T·]øcö«_ýÛý¾¿o㿯½V½×^ý‡ÿí*ïî¶ÿ½/Ø»§ÿ_ ·Ò½%»·õûIvþÈ`Fþ—¥ûûí×¶‚J=¿ß }ÿÕÿ¿nþì »Û&ékÿ½{uûúOf Ï~Ãúÿëýÿq öÿ×é_uû}­ÂzÃwýÕÿuý‡ûp[ïû´¾Òý¿¯÷oÿî¾ÿ«u«§Þßÿÿí'" oýÈ1ͨx7ûý´¿ú@Ïߤô Þ§v ×ïöÒò\ ÿí­aÿÿ×ÿ¾þ•á¿vë½ûité'O·úï}6>úÿ_ÿaúš£aõ¿ßô½´½öû‹Ûü›’ÿýºÿîöýwßu÷û¯½÷ÿZ¶{_ßÝWk»íú{‡<ïûÿíÿß{wí×µûK_½»öÓߺ^ÿÖÞ’ïù+âɹ"ÿÝkuï·÷Þö6@ÇÝ*ÿûõè0¶êïíÎFïI:ûuã·÷ßÃMÇdÐﻯÿ»ôCZ¾ïÿûkî—íü†j~ÿý´Û¯Kí/Ûù}ß!J?_ïýoÐ_îÕu]¿Oo¯Ûÿî¯[tß×Õþý׿´õõ÷]É%¿i{÷öý¿î—MØý»ûªíÿé{þ»ÐJûÿö•¥M®¶—®ÿÓïý¿®?ÿ «ýíúù7­«k´´éj¶é¤ßÚ]‡WKý÷®ÿíí­áÉ5m[]¯b½,7Ó}þš´›­ÿ­w×VûN×Ú¶—^××T“{{ ¡„»kkúþ·×Û»«K¶“i[^þo û{k %Ø=µ_êõß |?X0—a¤õmi¿¥¾·¶›h(a.à jJƒf·K¥~°Ë„»í$>ØI°MôßP»_¬†˜«l% °`­¤ Òa:TÌ੺Täˆ4‚µK†VÒ7Ðz’°U!‚„Þ Ú ‚d e¶A†Õ­pÆÃ HkW ¦é„)7+ ¨" ÊFQôA¶©v˜i Ú „ôÂIº \ Xƒud3B(\; %àˆi ѵ!˜[X‡VÃj ˆ.ÍNç@m@ð µO°êÈjB‚í2 T[I è ›ýaö* BôÓt ¾¾Ø)€¸iªì‡KýdH 4Ô"@~[–ißðé^ºÁ¦C†ƒNSŸ ÕySG]+õ!•BcD80„„5CËu0Ö Úâ;´¼†5¦¤CC9‰È*rÝ( A§vDüƒ ¿Tá‘F”ƒx/ŠH‰bÁ5ÄBUŒÀeP0ži‘T‹$N" ‘(Bd´ƒÃN „"B2 Ї$B%¹`4rn.`É· 6Æ"Ë᳓pPì! Tÿÿ (3ÿøÿÿÿÿÿÿÿÿÿÿÿã (Lÿ÷÷‰åã (‘TÑKVl'ËS@B ñ Â ÌÔ´ëÓ°ÐÁËj>òÖ·nZÚßw_¶ÞCûD¨Èe†Ÿå¦\0Û¾›áÖ›ß÷ï ï~´º»ýÿ¼?ºüŠ;Ç{ÛþßöÿÝúo-c ÿý¿ûoý¿ûÿÛÿ·ÿ¿öÞZÕ¯úÿÃ}‘×ö÷ëûãý¿û÷þÿ·ÿÿïýÿ嬞ô¯}SׄÓ‚ •pÿA„ßè?ý¦ÿ]ÿ{¿v¯ì„tÓß Ú¡kâ-_ W÷ïß¾Áz]=¾@P#ú_ð~þaý§ýþº¦¸ÿßÿûõï~ý¿Ž¡`°Du.ÿ½ïjÔ¶°3“p—Ëed6ɱX*Ë`\É8–¹\m‘P3´à§-‚n3;$Ï£³¦˜BAÎN EËHðƒ-!§±q!#2èCNYJ¨ gk`AØ@l;d!§‹‚CYn$\®(†ƒ²Ô;¬Áï¸y6Èê[ê er`xe‰ØL4ú_BæA`A8f‘ YA¤Ká¾Áº †Ü%êái•ŽÓÑÏiÞACPmÒ驨¸{Õ6Ú¶BÕuPœ;£½ðKR%ßkÕÕm;Ò0Û!¶––Û¯é´j ¦êA© ÊØjvâÓVˆ¨©Ø(fƒÜ†ÞÆhNÁ† &“àƒÃ I «poD5¶ a¶LÃ+Pò¦ø !d5¬½‹¼º¦lL‰²ª™`qW ·I6ÛTS†ƒIáÝ$ƒa¶°¯IÚ¥Û;H ¸H6Ûêé_uܤƒm¾˜¾žØt’a°Úí´—áwoI·õuSÊîÛ}&ßöCõa~ô›o­ûÿîþí½÷ÿ×½Rnÿuhmþ÷«mÕßo÷íÓØmïÞ¿½é7~÷õï·J¶»ÿýíU»N¯ÿ·Ýëß·k×{I»ïû§ý­÷oíRný?_ýú»o všþþÖ›ÿ†µÿý.þ¿¾½_·o÷ÿïõäH~¯ÿ_µÛÛûY ÷ýÿ ƒµöë]v¿ý¥Óvßú[]Óûýûû½ÛÿýZW¿§¯þþ×ßoûû¾›_ÿÛ|‚î¿ë¬‡U{~“È#Öï÷û·oýýäµ¥þýáÖ[ý¾ÿûd5\Žuz;–Ÿ¯ÿ_†D.„Y!îì#² s´¨ƒï² ‘§iþÈ4†\9@šÀaöA¹òi“‚9*Âé‘ùG€Ÿ´È›W„d;ðÀa5˜Ü Ȱ„Dv„Dƒ/™-ƒL†¾¥³MBg‚ðÄʔ¾!h26º42f’™rM ŽvQáí–ÂÇ ßGãÈ (OÖ+_ëÿÿú×ø?‚ÓìÿþGõ­òÓS\´ÅA‚4—g®ZJAÂaÐ@†VÏ‚!œmª ˜ >ý>w¾›TÿX  'ê 5È/wv™? OOA þúM¿Iöúw×¶¸kÓïãö»Køýßýú_woʇëß½´µì5ÿ÷ëa÷ý½Òûºý»äaý¿X íÒBD<6¿Ñ ûö•ïÃ|u¿nÚö–ïû¾öšÇû¿þƒ_ü5‹–¦êã„AýkÓU/n­ï½5ÿ®˜_ÚH7WíPxXä"ŠN’ë_‡´½¦¿ÓM2‰zí²ÚѰ‡–‘Pc_ïÿÿÿ_ÿþS BôA†€.ø~”Èâr™åÇÿÿÿÿÿÿÿùmýÁz\´ÊB/-1P"Ì–GË. äÞ*Ì‚ŽYNÌàˆi2<ìÁ‘Ô2¹78gA§zS!§½Hب3´E¸ÏBÓàˆ4l˜0ˆ7a ‚ ¿c~\°‚9 ­—i¯&ðÀšC_`È4A_dņúàˆoÁÞ¾èC.‚¹¡ë[K„ì&ˆgÐ8l¿Âr^´©àáµ¼.¨ Á„ Øa²Û9 Ý—‡ÎÊ+…AÃ@l2÷Ä &ÎðIe & Âè†nPA°ØinžÃ!žlìÔ6@i°ßÑ ª´Ãm„"¬I·Ül+ ¥Ñ)6 ´‚“náÊpÊ­ë @è ûH&’a½¸6öÚô&Ût¤Þømÿé:M¶á êÞÛA‡÷ôi'oAi>öÞºô&Ûz~öðýß×X}%¤ÞÞßn«K„íë¥oíëïIÖý'_íºÿ¥¥wÖ“·}§Òz{Ò}ÿoOú^Ýéi^û|Š=5þ¶Ã×Ûú}_ýi=õ¯ûuWkÒû·WWý½ôÒ½ý%úMê5‘Gé0¿÷÷¿´•«u·×jYJGöÿô¿_DAã¥~ýÛû‘»¯÷°í-×Kþëûý_]é7ÚÿöõÿÿÕÒÿ÷ÿ ·öûÞ—{øKú÷Iz^ßÕëú¿ÿõoÿ +¯m/þÿÂ]û_ß¿ý/ëI¿,¢ëþßüW Až ¯Iÿûzý~…í¯ÿÛûô¬/¯oþÿöýöþÿïú­¥o_Ûýd17ýï_ïÛûð×´¿þÞßÕÿ"áƒuõßößý¿ÒÝ,wîß½û­ÿµÛÿ»ëKÝ'ÿMÿÿýÿwþûºßõûKÛkoÿßZO¿ÿÛß]¿ûí}½m÷×ëï±_ý¿uÛ×[ÿÝ+·]õïµï÷w]ÿ¯ií½od“zÛëî¿eNmmìw_¤é{]ÓÒÝï÷ÿ¿ö›~÷¶½õ¤ë]µt·ut¶õÿ~ÚÚûi6ªÚ×OÕßzÞý/uU½ûjÝnÚ·W×ÒïÒݽ´Õ-&Õû{k½­¯zëÝ{VëÛÛ]½-+û¶­¥‡a«imá%[Wì5a„­ÛÛA-ª «émÓ¤®ÃH6–ݤšêéÛH0ÂW¶†F…oKNÓ¤ì0V $݃ 0ÂJ館0˜OAÙ¤é† .Ã5pÁ‚ 6¥eh „CU”2tL0JÈ5ÎÅa0’•@Ó%ÃPªkF°Û±± m±A„†ÀÓ4Í@ª<‡ ¸4‡Âƒe@Á0I<&ÒÚA¸hA6@΀A§ïÁÁ‚Ol0­†„ D5Ê.º–QŠ xpÁa¸AR#b;×Õ‡ ¨ ­án"4ÂeA 6T˜paS„S° !ÃÁemlƒv€¼2vŽÆÃCçi0ñ‹¶h-Ë­²r ›f{ɸaœGs²ƒgVC>ɼC+BÉb""±–=å¶—ýãÿýd¥§ÿ½_ÿ¯¥ëKÿïïïþÿ¥þþ}¾ßp@»j¶ã¿Þüÿ¼?ÿÿ–C6Ke².Dn•ÁZf]C8dÌZpR@d9)6VC’ªb ‹FBê X‘+$RH\±xDC"{*"k"†…’Q 5‹ØCAKA—"2el‰(l4 Àr(T@‚’tÐi„É2;P8d´ ¡zv™-„ÕSˆŒ% `–XM2›)\  XTÐÑ ³ ] Áú맦v¹& x;_´Õ†Úu· Ý:êƒýxA÷ׄƒh=„ÕÞ!;L$BçTþþƒª×ÂA‡xh0¶ÃH… Á$ÒþÝo]ÿZ ¶Ã» ÃA pÈ$ØatðAîÁ„×]b_‡ÂA¹2 ‚zÛa$ wzxU†Aþ †5Ntpa2Êxi¨ Ù »é&¤ÓµTÔŒ;Øi¶d(®¼ a² §œƒ[Ÿ!…I6ÝÞ»éÝ­÷„þïOxÐM†šäRì‡NC‰¦ûÛòBíÒýõkÛ鵤®ávšßmoô½¯ÚÇÛ¼+õk¯I¿ß«´ÿÇñíßפߨïÿÝö·¤Òýÿþ•[ÿö÷Æ×NüõÿþþŸé>»Ó\”='$-o¿ýI¸š¤ÿ÷¯ÖHüSïôíëÿ ~ÿÿW…Ót½ÿý‡ý-ÿ_ÕÿNù{·úýèßü›¹!ÿ¿‘Gëÿ_Õ7¶ëß°ýô¿t¿Oé7ú¿êÚ¯mªá~ïõ¿}ÿÿÿÞ•‚v•~ÝEnÃ÷Ð]wXûúoÿ´£o_oõÛÒ»Iõ¿«ßÿ﾿o¿Û]óa?t¯û«üªûô¯B¿µÿúýÿ·ª{tý+zßÿ^ßãý~¾=»Éd'ßoCþkÖ©û¿r:WÝa:~ß¹ ;þþÿûÿm·^ß®þø7ÿ_ÿÿä-öµ]¾ú÷lŠZíþëÿîÿ鿎öþ•«ÛD[ûõÝ{KÕt­{Wivþ­¯t×í}×ÿÈ%¾÷öþ¤TUŽÝÇî-N÷~›®ßÔŠýmâôÞïþäBT÷÷ûÐMÿkÞêîíÿá4Ï-ºoú÷ÿ׺[ûߪ¾Á¯Û~ÿý_ݿޒ½ÿ"‘kк½¿Z]¤ý_ú»ûß§Ûßo]ó§oÿm-µi[OoUÓ×}+ï¯Â"ˆt½_öý¾¿v®½îÈ4½_oö­;ii-ïÚ[ÙN°—»jšªúB®öÝUô÷_¶ºZ[jnˆ`7»M$û¼5”ú^ßô·m'U»ðà ' Á: ¦›°a4A¾B ,0‘ œ]í¶’¿Á´°• ÷VÖØ0†ëh7bÁ !„[k[ƒ´“Âkƒ 6©¦ƒ´˜0‚ .¡0ƒÃª â¬`ӆõs¤X`“a ša²pv)6^›ƒIRÕà IØ$Ÿob™xMŠh/o§¶Ö·ÚzaÛJêêÓ½7ao[û†oYžcI;v+~ ÂýZ×´þ †À2ñ2äH0ÂÅ©aÚ’´-<6§Ú v0ÉC•!\4áI<‹£ „ÓáÃBfˆ±0¡†Ó¨F&ƒ@Á4K‹‰&È”ohLˆ!„§ ÖEp©¢Z ˆ‰7ÑJê@\0„D2ÓDЄ\DDDì8ˆƒÊë@ÁS !ÃÌ­vÄ4ZeÄlFÙoà…¦Ãà ’M ”Ò;†Þ}ƒl€Â0}‡ØdWáÌ&Ã!§¥àÇËp`§Áø5à –â`ÑËpCä×ñ_Çÿÿÿä×&Ê&ã2Ó@´ÁYµéôÂ"íKôîdªy6T-j™xW2("l.Êãdý]?2[vd4Å 0D’¼i*æI)T® 4='ûZ4Ô mi×ßOH'÷èíoß ªÒ÷¬"wTA~}év’D8tºôÂùU¥ >¯‘8†2¢–•‚~¡aBT´’üp©ëéÕ/íme¼%ª¥"uRñ¦²vd6´³!¦§Í3³¥×Q¤Ó_ÚM$Õzè² ­¤hGÏÉE­u挨ÉÙ<¥B*™zäSzkÎÊþ¡ „ ‰CÔëeeCÉ R*ã34dè‹Æ©Da|‚ &gC*Õ„Ngð™žha3F•(RXò[cç`L'ò\Dª`š¢Ã3vd!Ò!™á¦2x 0ƒÊ¡Öf“P ƒ!ˆ0D"y(¨MT( ÌÌ t§äàÕ5L_P² 2èY¤‘ˆŸ<ŠÄb)ôרT# ‚Òi„ÓP™˜@ša˜LðÓITügk‚ -ªi§ið¡TUL&ˆ&­šza5M)!‘È&|Î *ª„üñ ƒ4¦f::°ˆ$Á„EŸújšª¦†M4Õ5 M|à˜ Âf ôUµM4𪆪MB„ÂJª«…U‡UUU_0ƒL*a4!¨  0ƒTÈk¤ši„µUMS‹UŒ&š§i¨UMuUMi8â5UÖ× ¡ª¦ jWZ ©éªÞA¨_ëëëëkz~¸P]5¤-Upˆ£ÑÇèŠ>5 µÆˆ£õUµ×_UPšzk®¨?®«P´­W}i-T*ZÒÒ#Š#Óo!^ˆ.ä#ªÕÕ-R\r=ZY=RUõ“u¡¡uúkKÒ‘ÆCÑ+„°È鄈∑ÕGTˆÞꗪǯONˆÇéu_ZJô—¯P•yðƒ„¢‚A¯H=t‰C_TEô«ô¾BŽ»úä15Ó¢8ò:V’‘!UF”Ž(‚F«H4“Òõ†º—¤ƒ²=2 ¤š­ƒ»k!‡\ ,yvC×Dpê©^¿ý¶ZZê“)Õ:A…· ÀýÝ „:¤©uê …~8¡Z½RµT†ÈWÒN-:‡ÒKê–aЭ× î©ÃZ"¿IêG=´—þô—¢+ý!¥èRÁ„—Aï÷äÒIUzúI}t¿õú#ÚZ]kôF:ªDc­¤­iÑ ]U?é+Ð× ¤—UúI}ikÓ]uÖÒG "K¯J¿‚¥ú¤K-ÒI*[×Kªïé8áø[uÅTž’þ’¤¤ŠuúKK¥J¡V•%×¥ª’¥¥ÿµ¤—H/ZI~¶ –T–«H …%õ¤«I%Öº®¾úê’ÿê’K× ½QJ꺥]p]-$’KUIWK}%ZIj)V—¥KPAþª’ÒA.¶úª]z×ÿªUõô_].¿­}tªK^’ ¿Ký~ ¯ªªJëÿÕk¤Dþ—JºKª[¤¿Ò_ÿþ°ÿé-.–Gþ’¯­/Z×UªT’¥TT¾ßªô—ªé%­%¥ ª—Tº­-oúÖ«ôªª•õª¾© ×Ûÿªë_Ö–¿®ëérÖ©}z¤’Si*òé-K¯T¾’1ªÖ©=ÒªZëU®«Ýÿ¯Oõ﮾©kJ©/KKJMo_^©R.’J¥ê¥H$šUÿI%],½Ò‘æÜƒº®©u_Zû¾—]zJ· RÒõá¢Ò­D‚ö•=WФ{û]V£]?MK¤•zˆõÒ®ªµNµN¢>Õ/Ö ëõu­7ëTžº ÿü÷Õ}÷ õ¤R:ëK°œµÒ¥é/KˆzPzT©jªª†¸CR;Wmt—¥úõÒD;ÿ„ÿõˆµ²;õÂzꪖÈy†–‡¡_]u†a7ßT¾”‚M|jš!ÇT•—KKJ¨ë´©kZNÖBF¢¼òÈûõ¤ºŠ0?bÒŠŽ4¿U¾C¯ZI*ãŽ.Ö)kZÛÒëé}*[¤*?TB¼Þ­¯Ij•i'ô®«~ƒ]$.½úÖª«ÒÒõT¤#Öª» Ö´’Z_U]%T¼URUUI¥ p—iRëé5ÇÞ;kú¯®šuô©+ª^CC¤’J’ýƒ6´¡W]$”…º µ ª•|‡ÒHl†2¡j+¦Òí(*ä ýýUUHwU]WUIWT’UTÔ‚°µ]5TÅ5O]uUPªªªª”øb¡"ÕB¤«¦;I]Rbª©*†½¯¦˜[Ó[ Ÿ…T•=T%ªjªº¥­ íu ¦º®–«~L ÐI5]U%Tõ]U5_ô±“a5Úv©ªj©…´Â­&˜]5UU]}U5 ƒM; š . ˜]B¦º¤©¦‚ÝH‰Õm5 4ºkª¦ º¯MUS ª¨Mm4ÕU0žƒ,…[µUMu[ò¦h ˆ°„0™õP¨0©ØTÂ…jH@A„ÖPšxTaVÓµTÔ6H*®ÓM4IЋ0…„, ¦0†¨a5[ „a TІ˜N""Ó „"дÁ Wˆ´"Â`š:Aŧ¦©…L(bÕB¦Å821 „DDDD4"¡„¡„Z‚%°ˆˆŒÒL!dBКa40ÃGM4×DDDDg71OÁ0Äi„Ââ#ãb#ú‡ü þ ŸKD,?Ò9\å¦Jýo¯ žÿªVßuë1¤’ÇúÕ5JY¥ˆ'l0´Âa9¾¯Šµ,Ð)ò ÒË5]b!©fˆ!7ZQ-: Çñå›ùe*)g¬`‘\°U©Þ†  Lœ¶vàÂ'™‡Ò„•PrÈRÔN“ÖYA¾L¹>˜4dÂ)ŽÅªXAÑNr èÚ„(4û„ÿQ´StG¤œ%†­/JôAùüŒ`L4‡úª4»(¸A–ý­z7â‚ Ú´+]'¦‚ïMkRn7 šÃ%^)WN¼JÀ>õ×T³´­3» ¿ê¥bÚXN¯Jª‚z&:Ò—‘R]z„L$ÖµÖ—O§‰Êq’h—«%C'<ŽÊ¼ŠD34ŒÙò4=IkÔ3ºâ’ÄOK!Ÿ’§!æM ›§GÃôJ e Óò  Ó‹0„Ô(L&¹Ã8* Iw“L ŒÙÔDÂdBgÍ2 Í™2ðêBÁèdôÓ<Šî•Àä(éW ÐUõÕi$¤p‘'òOëÒ *]<‹ioüŽ(ŠédKÈ#éd‡¢'…¤×MoÔƒŽ”2#ÒÀé¿ëD$W —K!‡¤Ü‚㥠ˆãVHúC ©ùÔ"J—R.wInŸ ÓU‹TÂÕérᄃ"ô*ȳÓr Wt¶•$©j™õ†½ª é5Z¯D±Ké8®õºC­†”ZJ’¥I¡I*D‡á×k§—¤µÆ-]¯¦A-"7TÒ©eTZK’uõétˆÝzín¸××ÕUת§’ª®ª$E½4µ]. â—Å?UðizK餗I.’]RT—°© Ò¯^´–´½P¤••k×[UøI^ÞפºIt–•®«¤¡‚Ñ'Z J«^’T¨ÂÒZô–•%^BØ_ 'ŽW¥JµÖ¼o¤•WCIBI$µZ®F4¿ä‡KK#©t½¤•%ˆô½Ú‚Kÿ ×Ö•úªKéV’¥_IR¥¯ºIU%K¤’_I%­uÖëõô=iz†ú¯Öµÿë_×]%˜õ]*úôª•dt!=?ékIåúÖUŸt–´©*I´º]*¨z®GÕ=i/Õk֔߯–ší%÷®/J´µÂt©RúIj‡ÿKúÒª†¿I%Õitºz ^Ö…øÒT•ª»ªõÁÕkÐX?T¡éUi%J]kÁê¨?ÕBR¾’m}Zþºƒ³rWvaúJº¯¤šõ§qkê’è]ÒKÕ_­¡®•¯ìÂÒaWij¬}xMR×I 6´=Õ/Z]z°² ?ê’è!ZúI´¢í&´¢´½ãÌKq_Ö¸N¾ô´¤õê=$–Òõµ­$ºÃø¨%ªH%½RÈGI%¥Q­WkUÕS¥!uÕqÕ}Hqü…Òa¯Il…Vz_꾯ï¯IŠ_¥J4¹:d+Ýui$´’¦’ª®“ÕÕiuUUUISU„öµd#áURMUT†ÕSTÕUUh*þª’ú´ÓKÂ… ªtª•ꫤS]USõ ¸L.«ëiÖš§ëaUWì$¦:ÞSUT 4ÕSP—…];Tªa5ÕmSTÔ&ª¡SP•ª„ÕUVÒa0A‚·aR#©¦ÂiXUD0¶ƒA‚¦ „Õ50šªatÐa4D `šjƒ,.±j©„¸aCB,B;M0… ¡ÃB"â"¢" †E Â ô´Ðˆˆˆ°„v-4> „Øâ""4#ˆˆˆÐˆâB-b†_‹ Ò X-Tt íWÃ@ˆwt:¬0‘oú´ ªü0H/­dÜ ‰?üiºI*úù^ ÿÒÁ-„µÒáT› ‚%äÒ…ûuÂÒiÕ®“ + ÚAŒ'a\A–lT¸‹ÃQòÖ ÿå©eÂ!žÈå®…æl¡ËH ô“N¿Þßë² ?ý õÖª°Â[ã]0ª£ËH•õOùQ‰ß-#„Âz”ᜤ,Òa‚LÍ A¨*~CÏ5(Ƀ" ‰ éži„Ó=¢m0Až ƒ á5öN 0’ë`’„ DÞ«[OUUéuUM5 ëB4õDÝiaUS_Jº[®*ºQõ]ºÙ„½k¢7­Pz!G]" Ü*¥¹(ÖAqôÂKú"÷TC¼zD£Ð:^•R¢:,5ÒøªkKmZÒÑÚëý/Z!úI~×H.—¤’_­WJ—{ê©%Òðº­|*Z¯Åý.––«uÑ>©$ÚTµüžºíiU%J¦×K¥I%I/ÔRë_Bß×Z¯ªIzõ^º‘I%0šúÿ!ŸétâŸNÕ% ëªê_Óéi,úH4´5â®-O`•úÈqÕ(,v ÚÎ$ýêú~ð·dSÝ‘=<ŠúÖíS§HŽ;Ý!‘Ñ7"–ñýwÝ´ŸÝ[A}$ð©¶Òü+R1ý½HOé7WëWhVEçûzýëñþ×ÿÿà”‰DþêÁS#BëÓMÙsûý-ÿõkú_ýô ä\o_Ótÿýën=$4ãÞ¯Mv­\wÝÿþ}=ýjôDÿ¯¿#BÞ㮿þ×nµÿ¿¯f¯Öß莿Òwÿü©1ÿûéûV–vÿûÇDb;·_ï§ÿÿï­Ó¯ü§ýZ}N€þ»î—úþººõ¿õÿêë×ÿ^Lv‰},/ªÿÿþÿÿI¿_õ]cî·¯áQûÚèˆ?ºÿTÿþ+~ßëßu¿ÐÉC·’·$ïïU„ß]=i~þêµ÷ª÷{©ó…_°W^ÉÖ¹Þ'ÛÖÒµ_kÛ]+m¾ÿH‘d5ïé?þƒ“b ^í[ ÿa¤©«iºÞÞ¬=0½¯ÜWøÿí ƒpƒûþ»3þ“‚…´ì"OoNÂØ[ ¶žÛ ZHjšµnH†¸¸n†©ÃA^ù¥ÿ°Óí.Ä69 -Œ&”kÝPkhS[Aá±H>ãA݃áW]6}¥VGl{}ûm«a…Aº„Øiºzl4ªi­Zjé¿JƒA `•ª§pi-ïI¶[í{ž«~ýÛtÂ÷ßNÚ¿i5â¿M8§ÝIŽ¡«Úé6«M¿ôÛ Âk÷öÚÝÚ¤îZ 7ƒªÚÚ«M4ÓMl%»NÕo@ÈìÓ2êRí5ød©2,XL&\*ØM?í!Ní[ ¬"dv0šiÚ¨* "A Ì¼A²(X á„!\&…ÚµÓRëpÁS …:á„-a2 +&^Õ n-$! ‹/d$(\“Mma“(††""""."#ˆ†×!–"7QéuZX$ý&JB½ uÐJÒÃQ[ûQÿÿÿÿÿÿå©~éáÛû¶kø,´ÂÐm(Aº[´ªšîÒÝ…-xüR{Éô½u²‰Æ¶1áuÚ±Õ/a/ÒRUÑãN­§^é_Xwˆ>ƒºwDhà];¢ŽA§M ƒ–iš$D”9pd#£€±t샂 °†C¸6UªBMØvRiÔ*¤¡vƒZaT%awÔ.¸f½µ¡J˜qiÃZ¨C»é(D«Ûg–J®Pdm݄Ԋ‰H†ˆqÑÔÂH0ä!Ûq¯4ƒ‚ ÃAtGÃvû… „%b&qö>IR†]eöïÊEz¡A²:c» :s"ê©Q,¼.mýÂGIzA ƒK¶[¿XB -$’!¦8q±mÿM$MÒ¡î㾚tº Ìòy¡ºÓN©P6C¸Ã»­×ˆô@ð+±VN–ºÖ–@ðW¤7l‹ Â_äéICFUpM¶Øluþú!Š Ç>:úÒ ¯ „t PˆjÃ(xKúº E^8—âËÃ\ ‚B"Ãd|:×@” A”9 GÄWðP§ÀðÖú´ZAP˜" x xÓþ…p„… Q6 ‡pímXB@÷ÂC\á¥ðáIH `ˆdp‰È5R¶’ìÁ¦`äLÌš¨Dtl2—Ca±>¡õAB.‰È&q{Ý4‘ú8ŸÇTƒ‰ˆlÎ%ú¤! xl|P§ßXH†Ä‚£ÂýR ² Ž$‡Dy þ¨$šd XC¤F;H;ÝVŒÃEHD(ˆÃêUD5ìrœ„pßúáH†©Á¡ Ñã³³~©á #n ‡·¥¤¢Fô>¶‚NÛÕPA-$ˆHoäGU‚U ü†ß7¼ŽA/A ÈÜ%@¸äQÈÝüZyõ„áa&×oïe¸)ÐÒ š ƒPkº÷ÿ ¬‚ãÐB‚c IŽ?éD‚*!A!mƒöôE°´BÁŽ"%…¶ý¿Ž¢in;†G_cJŒ]T‚ Á!ÆýjLu°H"œ #ºTµ#„d5ö @¨Ø/®(AÑ…>COdÕBâ¦GÂ7­%aB„ Õ1áúÑ ÍÁ„uB&ÁhŽ wªTF:Dc¥JxoÒ­)Ù°' E¶ ;ªQˆJŠÃmê•"sD\V‘àÊM»ô¡G¡B°xH6øKB)$Ò iÅÖ•#²€Â„Çr ¹c¹f­hBB+ÈqÜ,h ¡†öG2à^ ©pI±õ<4I}Á¥ È;¶á(*X Ój-¶áRM ¶¤caºX*ÙØA†Ã…B*ÆEp®[ÃtªáBÛª!žI>˜[l:×­ݹg4R†ˆ Ô9[ì·ˆÆÃõ b;ÛÚ¥ ¿sŠáBI ›Š.>Ø}R@™/@ÝÝ4’D¸ Â~Þ܉ޕ"€À»Vø`ž’¬ d¡l6A‹A…ªJˆi¨Ãm¯T”{µõA#*Ý0Ãvªih eÆÃ(ºéh†Ìª †íxI@’·´·„E"àÔ˜bØþ…He!"+³½E †ë¤„‚㪳³ƒ¶Ð.©AFûÅAv ¶»D5‡H'LÒÁH5RdŸÐÒñ†޺!ÜU±Y|6{ÐD5G ÖéS ßàÖqÈ7 C5èYS[ÄV‚ z`ƒ·}È êЄ–ˆŒ&ïøÐ£´êª6oü˜å¹!ÒïPEáN ïÿID#°À…Tƒa‹ýU"Þƒëu¿b¦Â·ûé$C;¿×I(þ»‘pãwš/¤*gÉýåÔƒxNœBTa:[±†³°ß~HfÐ@Àôû½=½hRRc‚’vë$8fçBã½$”$“#•ÇÚáÎ=:¤°¢ËñÃä‡ 'úK ÄûñḘ·OÖB}¾ñ(ÐEE®Z …HݽÈlpó´¢a†éï©cØ´F=_Ú‡Uï=Ò]G¿ÙÉÓ®©" »O¦?Á»oOlŠ= D7 û$‹’¶5®Ý" Ûû!‡¦ƒÚq["¾ù§VÒi-kbƒPíÝvô¡ñÝ­º#‚Ù³wúÄR{WøîÞ/k =¥ŠÞWºý'µuꃵá$CP¿kD ºßˆúJ‚ì$ð¹ >¤Åz„2vxa]ÒBˆ'ˆMÛ‘¿†¦Ï¤Pu´¼T> rƒ½é *¢Éq X,z¦`x‹¢Û[ nR ‚:á!—ô Ñÿ\7Å1‡Â“j‰ãjç 7…ÑßÚK"¸l*‰)õIa¡í’ßIkºè†ôIìEÒPÅ#Á„Aˆm}ú†ˆ#¡°ƒ –ì†wS»DÝí”é Ua…¤!ªVØsÁ°[ {‹ª[jÑ~ÂÝÙ¯‚¶ØPÒ¢w “Ý‚ò n’ÛI$’†¡/ ¾fèƒqÕ$í…@‚W°Rq†îÞµ‚@·A%HMÂAA;ÿáIDvªÃh ‚i[¤ˆ+­·¿üt“¸$G!LøkéCðÙM{×^p mIÃJ*Âe¸¶á¦»[¬ðp˜p’†PÞ®4:áV© t„ `ëØLj»ZêØH§@ß{Ië`–ˆ¨‡Þ5®)ºÂ­´â°‚$àÙ‘ Ä˜ï®ÕRfÐOºÃ´Ö„^UƒMÃ[Èl‚íh6ÁÕºNȶBz-`]aAªŒº!¬;M" …T†F>äÇÒ„ ìŸMÛ— CªA¤’I7‹a‘ÃÂ'*zI$l6쎄ÕÝi%I";#èˆîí‹è†~¬#¸*¡ FÃO`=ÙÆ?‚ ÅHƒ  ƒaðÐ"\¸ï„Ð@‚j°‚)È0Û¦n͇ÓB 8a%ÂAÃn‚’vÆdc¬‚ª‘EÄ¡Á‚K™ ¨›A·m“l>ß`™-" ±0Ⴊ"‰¥Rãa†â¨Ð3› àÓB "’#…)Ô$"A m„ª8øH ZIƒ6m-»IêAÝá"4Ñ k¡ !ñ†Ü$­yªªT3àPˆe¤L6áS¸îD3o È0=f†”úl—ƒ $›hYQôC3šli¥Â6ÅQeR{vþä¡Õ%ˆ°a‹LjZJÈ09 ±Ú!¥ER`ö!m:è&!" á±*.‚o‚ »7k´ šDK½Ÿ9P ÕAɘ4̪ñ!´aé2Çît  @„`䇤‚pš½1Ð[o$;ô’÷ Lv“„CGN*Å~í¥ÐHÎ §Ó!®S…O§Kûk¤ Þ0áá8 Ù ¡úU¥õ‡é$›húnBPƒ…´Cf£µÈªêØDcªB’ˆ@ÖDÛØ½š0ëX… $½Ž• ‰-Øm»mØt*Z*Rˆ¶Òõ„½IVá†ÞF« 2> 8ª o6’×!U$ B¶Øo`öv8V0G˃mˆ*º¤#]–ìa*„¶A¸›dQÞpñNA‡ .Û LŲ@m‹Ñ~Þ WCÜB,ØfîÛ ii°Ê6úù·'âV­²-› %Ãa†ÈÇv–ç®»„ˆw!”áRÃ#‹ªA ˆe“ 6Ýô¸ ­5áÈkŽ•­Xž„•H+ ;·ímƒÔ‡øl‚Â@â‡VÄ%TŠø$á»m¶¨6C\l"ht½ÕHi-oaœ¤‚phxnïjÈm¨»áÒKV „H “M&Û{dŠC ÁõV$zÝ1†$&…{Ä_FöXé«JÒ@•’ÇvÈf;ÙÇË‚ÚìRUk *ÑÃ)é»» É{À`1VÅ™TcD,2Èà»@Á*A(¶Ûº „ „ ;%À¹»pv‘ÁPšIiámûKh'r÷ÖŠUPI$Ò!‡J‚¸·#ÚÜ2$:6Øuw!Ýð‘ d[ÖPDy»`¼&ñ¶Héúª 0q¤’R:o„,2=nׄì«+Ü&ßBª°…!ÒH4Þ-–?d1Û( `†Ûl†«{ÐJZIXƒ·‹ØÑ8‚wÝi·â’ë¤;MìÂl‡nú··T’­0= ²8; ÑÿL5mߤþ)kZ‰ޱ†Ce_L=¶ÅêÞä4)"ÒT”àÖA í‚ m" †™1ݱ¥}ˆX5¬-‘^E„êØ«»‚FSi6ºAH7›¶ïpûvÛL‡Bp Þ†¤1©I°È0?Îê;µî´É¶Òa¾ªêÏwó²;ò;ŒÃÞ¾›j‚6H Û ‹c?÷´8­´~®D.¹ß§q ¼iä ã…]]Ût’ÂñݠÝ/{#†ŠÛ‚·úT˜¾ýÛ]Ç[¤ƒ¾’ÂM·ïnãK–9v†wYý[Öª¡½èr~¿dpÖ­6ÒO•0½(¢1Þÿ×±C×Þ­É  ¾´“ –?ú°Õ)=¯õ¿¦zªTFé²¶GþÛ R@ð÷Iw–>ÿ 2 ƒù¹øü=…{{¾ÈíB}*ƒ@Æöâ+P°È᢮­‰m?¤™ =oý„*$G½ðÒñpAITÒ¶ßß°Wyßßúþ ÈâØm>÷¨Û|oµ ú×õ ¡ÇlY'ÖÓ¶îgþõÁoªdQùB ÓA·mÍ‹¹ ±ÈG«k‘@OÔë×H7ïÚ{ݽ]Dv²7Ãô–¤õoÿMì=Z®¾ˆWéW}*!š]¿Ò†ƒ² î-?Bu« _J’H ßÖ¡„{ÖÕùáW辑 #‚™FÛ&?ýná¸øWHV !ÿª@ˆ.âCA qÿ¢yéum%þµN ³Šßú ‚lƒkÞ©t–’K×T„Si¿èmaw®"‡]]/ý$Âm¶ÛêˆAp“ïZ|†S®·½%ÂÛ ºúÞ˧ªS:Ka&•^º›T 3ŽÛ½þAÓÇUI~‚}ãI$šÛwoô«nß×zƒ¤ _Î:UJ‹ã ÜvÛäT¼:Õ4»© hoIý.ºîB[#‚7»]“A‹ñIX]ì$­ücIr7QnÝߦ»LE´нµH?ä{ÖÚA»±ú!¡8®,Ž ‘¿¯½ûÆ“ 8¶îXÿ)ÁpƒÚkÑ‘¯ªZöúoÑ!ë `Ïîß^´ŸñúÓ{zÿX¡w»þ ˆ8ðÈu2FYôªJÌ´×ëû»ãôÂT 4xÖ–…’>®ÿP›oÌëK (¶ ÒOÛÒÿPï·tÒKd0=ý,‚%¦â¨mþ†Ûïè‰õH;ÅpÈ®“@öÈá¯Iÿè8í¿éRt•·öú¶v«­ØÐ¾ïê‹›„)ߨ֛Mƒà¯¦ˆjÅ·õâÚM¶3±¯jJ›zM[äAè ßõ^ÑØJÛïÕÐaï@Ò§bé¶îý-Ú„„Ь<0t¡C¡ß¤qwµ¯M?A¼=qÓôýÒM^1Ý}°šÉp]Ûß[¿·]+{Ô*ÙÂjíßk¤KíQ _½R¬"$Û ƒ)eV4CºVô*è+ûƒ‚~Ñ>BGXÖ#íˆ"é wúQ28g "{lC5AH¶í¸ä4=6C4|ÃúéZJ†á…;½0Û½ä áVת©´•u_ 4¨r#J°íïîŽÿ»È2ã÷Ý‚T‚Tݾÿ!ÚÕ(M© #¦äcƒaÝ'‰Æ¥ªMwoýi ƒJ¤Ç»lH| 1jºÓ¤’Ò]>ÞÃßÒ´§í gò+Ùà ˆW]¨A ‘GT©íÛ|I$ˆÏm\8»Ø0Ãm.Aë@ˆ2B¤¢w_½¿´µI[3frÇݶÛmdÞ:¿Â¸ˆdÕ$‰:[o×õJŒXµ»û·fÙä1&º~êÚA.ÒôôÛ§Ã HÏ ’A××Ú 1!Žm—«[jéÈ[ WÕ/PÞ½¯I!ëþŲpʇj‚úá=8¾æ¶ÿ0þªª¤Ž’V;‰ þØmáÕ:ŒƒwìRÿ&:vÝwéU%‚µ ðÓn!ÈAÇ·®œo㯊¯ö÷˜~Œëî+D±C µ)Ûš{„¶Oïé{· ãÿ{é*Œ4ù1í¶ë¶úÂõu¿¶ñï®cÖ‘œ˜þ’ö­»üRØ-“ÛkcBDƒlØ_U]-$´®Ó Žõ¿²XGQ‚a{Õ2 –Ûþ#Ф’¤°’ ý²à×oàB)wü0m¿ÿª¡M„‚ Äö™ ;m×jN õJ”>ßçëI% iÙ¬m‡R¸¢–QªýafÜtà ½WoþXã“wQT°ö˜m†%ÃXÓþä[!Þ¿ØDf¸dÇ\{@°n,2àA€–`BeÃ1.Å%´“Rûµ„HÁ½ÃóÝ(I°öBv,ñµ­½Ó°‚ŠdÞ´èða¶ï_צ•…m‡piùÙ-}èr¡ H?+¬"8 Dóo}-ý>‚‡­ÁÄ0F=I´ó‘À#VÃð°…,{šdp.a¶=¯Z¤"@¤P0öÌ;p Æ[‹¢ q¶=P$¢šC ÞôøøI$f ƒÓc’†•Ó/”þÞÂÂ'ˆú[¢ÚD¸a·zŠ_Eº (vŸ* »œ~šmiB*š……´¡»zt©-%„Š @ðã°bÝÆ6ˆÞnþDœ†ˆTäá€Ó Ž“ ·|RÒHh1 Ã>ç¸äQÒƒïaý$AR8MV4ÛBm¶ïë*ÈgøðÖ$0=>r FÉv…ô¥„0•E†q… öú^hX5}U²^œÈà_rÇ ƒŽC¡kM ›h&ݽ¥¤…"¤-ÚÅ\1@#,t©5 ª­É í‹dcÿTgH†Žl5ІE;  |&j”AD Û±}-* ÁÐý†ˆ0;dcÓ:™Å$-Ul&l»m¿I! `q ТRÓË…ñA0ˆ@ÚÖ©„mßÿH‚öþÄ=èâ-Ìæ˜aÒeŽ¡:[A„M»l±ÛºÇH5U†» Àð˜"ƒìxQÓ&8=!  oý%I™ÓhiÉ»o¸¥*v(Ì„|-¿T-§°…»¶-þ¡ éjwT¿d+Ô Õ]ä=Á‡¾ WÞÛ¾’Ò ÕèBCïõè6ÎÒPôÁY# î†ún÷ }”:JC!(&ªüuÛáa0TÒ {]vÝ»l¤+H4°Šw¨néw ¿°¡†÷úÖ›íšü%Ô$Õ¨j6[÷¯NûÉýÙúÎÈ ·_¿I*H@†;²cÞqé+È(î÷ñ¾ †§|Œ]·¡TŒ:Z& ý‡ü&÷]÷ CŠ;5Väßq"ŽÖ½ hÖ ”1$:tB¥ÂvÕWb@áUJX,1¶ýzZA“AHȘé Ö‡®š‹Ã¿‚HQZ÷mä(ãX …@Ò÷k†‹Û!GÃõ‚J ‘ïÕ A÷ýôˆcJïª@°n>’ @ÿmã ÓÎÊ«zI@ûéT„p<&ýîLÐ2ÃÈhÕ‚V4’;ƒhôÛn‡H˜@ˆÔƒn^¿J¶òw ½$ÒA}ô8D4Ž3™ÅÇaãT_ ´LxÝ$CÂ: ÛÚTÆ"F† ‡vûá# ,&É;é­þDÃeCkÈ8i]ï!œq¤…‚˜È7ì.Ãê ¼>š[ºA)!èƒP` öÈæßU¢ôA"81!\‚vL ¢ÕMA”îÿŠ ô@ˆ{VG{|Šô‚V„HI‰!Ù –Óc n?S„ôqmVHõÖ H?mßT’ ¶õ‹# ðûxT’o¾£·ØH†#XHA©~í¾:ˆÑ:*d0vXá´Ãý‚†‘ÇÕõ®CŽ‘u}A£F ñ¿Ò¦Iݶ-«ä8äQÒHV"ÈÞö].È2º‚3Üt -ýß© Ñè¼¾Æ^ HÇt|W¨D3ãvÜd=ž«uy¤´Ö‘H0û½\~ˆQî BìH°÷¤’ Ô;Ã@ý{ñt„½w#òçwq¶õ­ ¥8fAÐaõáB ã¦Á7n/¿Åf—A çD=ïcKOHÔ0É»Ã{Õ$‡nÞ]+Ò¡ÐH$ o˜}ÚÒIh†X1¼7ú¬väˆ)ƒ)ÙP·î«¢¸ˆ;}A×êá°Ãl˜áÓ}VB¶|5ÿK°’ æa´ß½u­"8A»bÈáÃAßU öD5S÷ÿ¢z E$„¡þÿX­1m‘ÃÿIârýýkÂB ‘)”80›ôºI*4¶ûU p°ÂÆõ’P †®°’A¶Û¸­(VæÀðq|R"nž”¬6Ýõ •® ƒä#‡ò ú¤8jƒh᜾êI$ ¡”âßuꂪˆ E“Á†GˆŽïô”bAKˆ5Tþˆx $‚@’Ã¥ŠIƒpm7WÒ¸d ]‡y ÁÃÕ$H‚ 20ýjIA¨2 Žá†wp×½ô’t@¿÷¢g}HŽõI A#X°dÝ'qô´„98†Øe;m+cøIHW„C>‰«k ¿XI"n ‚cÛ»ÅR7e»¶S¶ÒäÄ%h8 [mˆ`ÛìT…*FA$!={ù  ;m·ØdpýÇP»3 (PÛ`ÚµIR ºAh÷~•  Ûw ³Å¿‘vÛ"Ž #©0e@QÈAë ŠT’ ~ÿÒAݶÃíµÚÞC˜H"…m†öªI$’MÅßUI“câ ŽÛTðüŒp6Áˆ* Øl˜ÒTêºASßùzJ{bÛ–?Ø}BMäI ·ÝáU$’I'0ýùê$ Qí‚/;ÚùHðÛZ ÛDQâ6Ã~ðÂÕ*êC-ßûi(I}¶ÛzÕ¸WHÁ²¯½Pé*¤™80$ïëÆ…í½Ý½êº§Òm†Eþ’UP‘ ÁÜnXÿæUJˆ5;‘Ýß·ߤlìŠõéãÒJ•´›ýߨÕG ²>6Û}¬[¾ƒ<«Tß­È(}uHknýñô’AîÜ^A¿è¯X(8 Ø0Gƒi 4ôºé*K<ˆe=A;ÿzºIöí»qMƒ×l=¯BÄ9"þ—¤©'êN»Nýj’ ž7{! ¡üýê±‘ŽØo^5B«Õ‡Þÿú¡ö6ø°÷z¶FlOðº×}»ôˆQÖ’" c¾ïnµÃ Ãa²H«é*®„A„ÛumÿMAÒß¿¶Û!Gmr#Ú…®‡ 膒CÅÛßñèh „·ûܘé\4‚êßõ|‡» xe=·ÿ¥¤‚õ¶ÛmÃêÁ!\0Þ[DcªÖÃ0í}ýã¤.ó­}îµJö¼ƒÃa¸Ò¯Ç× ²‹o»ú!ß $CNË÷}²c¶ÌÁã]¸u¢M_öúô@œ›n“¾ª­Pʵ»m‚÷.Šá8‡þéj² bMßÿU‰c. Ú» ¸ümºÔ_Ð@Û)¸ûzú§0Ãm­õÂIE!»{}…ë„÷ýk¯AœÃ ·¾ê‚ª!ªL™ßúß÷íQD‡½%zg;ÛuÿB’a;÷íú„Sº}Óp«ü† †X©ÿê°„2?ݵ¿ö“…Ù¬¶ÿZÒ¾ˆ3Ãm×H„ EŽÃ ÿäÇ0÷ÕvÕºG¡Õt½hù‚a; ß,vîÞ’¤rBÃÛ¥íö£W Žé7þ¾÷—  ަG>½ ‚69ËZz!÷ǦXqr7­õëü10Ø¿öþAéÄ‚wý×dÇò(ðÄná7MØ­~ÖA£É`ƒ¿äAÒ ˆ‘8ECýú]‰è+\xzvßÿ{H 0ÛM‘ÏÆ:‰ ÈÓ[»é¸éM ²á Aÿ `‘‡ ü[ý"cМ4A‡þ¤VÝS«°·¯êÓ ‚DMQÁßÞ]z#qm„‚i®íÆFÃC Àô“› ŒSö–—ˆI"^S–9Ç®ÿT„†ž¥V#ýÂü[@Ȯے´vé½?ö‚Ib"A¸âÿÖ¤JHfÒ[ÚMí1kÕ ùeVéäAýÚB&G‹ƒ÷´¡oçáÔ­T3YªM·¶š¯â‚*m¿–ô  »t¬ˆ8ÑÑÎ{°Â WéÐa.¹ÿC”íÿðÔd üŠ&ãB®i½Óîö Ôî"ûúa¼qÁ$cý—¼6éÐûiÿµ¡¶ßö Ž’ÿ´ ê¡°èQÚµ{Ûþ9™çò÷Ç$@»ý¶Ó ƒp‚·º¿ô ÍPÁ„Ë“ÿHA•Õñ%€}N´7½¼wÚMl;íp¡6·\…5Ö™½w܃­SÖ“òîö’DŽ6!$¾Âj!ûã«§×ÄÒ#‚í¸}ú¤ Ýo´ëî·Üœóš§AœC1î×"!QÐ1 1õØ"ž¬‚¸ôE‹¨ ¹‡÷¶“÷CI™Û}âqH.?ÐAoú½‚Ò§.°”*lí:þréíP>“õвél°—„PRøÃßï}È.ë ·ly„.¨ A‡duKøh.”z­Ã²Ú$=?n+H!oé¿&ÛˆÞ´¾Ð$†ßò,ßÚZõ]{dÇ}tƒé8¥õd3'‘GQR5†÷ÿ¯tº Ú=·¯é ƒ ºë‘ïa*PTÓa‚#« }µÛB’ØïôŸ¯ûgô5â5$ìì6Kk¿Ýú¶Ýÿ®›m-5­iÓèO}þëíVdŸÿ®O¬GéziÛ<&ÛÿíýM§ÞþXú¤Þ‚WMïRG&:nÁm¼÷Ww¸^ü‚sƒ{öî+’t¼ƒPà‚ô몪†EÅ-´ã¿¶–ÛY†Æÿµé$»'ÿá&W눑~ÈgëÒ¿E8i_ã¬IºNâHz!ÇH:Òµ]¿îÞÿ¤îÿô«¡Ié+;䇪h*Hí9Ƭ3½âø"?oá¾—»ùcÒJA¢máÑþºDQÜi]Ã^¢!_и÷í7¤t¢âßåþ+I#P{oþŽõФ¤ †™z!š?·Od&^; › øýb¤4ô rp…zëÈê*tØõx-öÃX{H'ï$÷ô‚ § ¯¥õÚ" ÿ¿°ŒxxÂ!\ƒÈâßëô‘ÛiÈ.>©azîLÐF ;{µß°ÂBîHxDJCòÇo¿ñ÷¯î¨ïP`2ñ‡|qÆéû½†è<š,Œþ?H0é§Kê½ Bs93„7bŸûd4‚ ß6ÒGCíÿ­RºÄ*\ïþµ&,$DØ©EœŠì]ýªM½è Û#Ÿ‡¢tYÛ„þ•0¡"ïMõÛöÞ *#rø¡Û¾ÿôˆ/YÄŠ9pKá?á$¥å6CÐyÕ=C ÑÝì1 ocHH¼Ãÿo8ê[¥@Š€b…BA*éÿXJ+< Åo² oöè&Ú¬ƒwnùcûýj –ö¢Cg­o¹ÒHqü^ÞØßDÇuŽ˜é8¡cïˤ8éÅè†SˆJ—|WYXPC ÒîÈ`hzCZ\÷÷õáuªäGÔ%TÁ-¤CC§»ö‡“††ÿñ0¾gT“ÒÛNÒI$¯v§I/P‡#ç|¾Ã\ Ãm?åÐÇg":(·úpÒIt Äh$ª’ªm_Ã]LàÞÇãõA w]´’ImõȰCߨDU„…ÿ .> ?!ÇïJ’„J·ï· ’¤¿ *Õ$(;!h_²rÈ´ákM‘Óÿ­A4á­¢/KÝ$•,.‰Ò¿þØk Ž¡—ŸÿÖ‚ìlA)$®ýnꕦ8ø°ßH D4Q¿~µÐ„A°}ô) »ŠH×0Ð!KÈêǹ§.d ŽEuÑ@e6Üoduõ„CXãÝéUëᮊ¤vyB ÅÕ6Û´Õ†J›ß„Pý*I –91ÝŠ X­! EC@òP› ho[!²eAxZoÿúªÄE‚ Y¡Ö‚Ô#ƒ „ï†AÇ´ÛA­ÛÆ?Õ+‚ ;éR@§ªV0ídŠÚj¯ÿ¥Täv $T• “ Ö8N¶Õÿý ’VXä+®¦è…ÂA~ÝÛkaÔ-6ý~©¶\4Á¬RúÔ'iïý‡ioÿ×[pî`*OJdSt&·»ºÃjÛ~½$«aÃ,±ëk’´µÐ½ÿ°ôŒ9û}ÂÿR QA‹?Á’;&ßP¾)5TBæÎË«mý‡M µ¹ÇÖªª¯vÐ…A»Åé€!^ˆ¼¶7ºÛ>pø»ú¯Š·`rz$ÝÄ‚GêhB_ ¶ {Ï·ûø¢ú·!GäÇ„A¸êâ§ÒZòÊ$[]† ¡ÂjCóB›Ù >ÿî;b6Â÷%”’¾’²µ‹/>¬1DD ÿïäcÝbì ãŽÈàÒG 鮚‘m"¡v’ÈlI'¶ýêMõI4¯É¶Å$–¾"D†!'â5v "9†Ÿýï^² QØDGš„_Ž~¤Dpƒd8ô˜˜r,Éh! Ù 9‡÷ìEþCŽ™n4¾IõÐzH‰nïeÑpWÊA9ýdD_ŽºÿIRʃUÚ ˆ>ô^ºh5hò:‡¾Øž†B8l $œ†cÃùcãýE-tG¡ÁéDƒHë< ãÓv¢Kݰí±t„a„ {¿èP"‡HB ‘. T“!–:ézk½LÁvG°\lƒÛa›”9ã‘l…!Ýû„GZM!Ò R» ¤•ûµ A(dJÃAR –Ø9TANh¿ügËz,t‚¤†Cë×k’Ù°”ìQA؇'°ÌÑ vÂwÿýj¸Id¨÷zH¿ãÝ…‘~±i&;¹í‡#„ˆ°Ã ÿÿqФ’Lƒ Û¿KÕ!iä&z›Ø¨gck{mˆH‚ðC3Ãÿý*…DI‘×!Ý=a8¨õˆgÃ.Â,rÄ{!Xl‚lm½¿ðE=$ÄE$Ëï´¸T1² ǘ &â ‹‚ˆl7ÿÿDÇB`¨”’QÿY°E>$4?ÚlHj"Cƒo¾ÿê>„)Pç!Gc@ßõ[ eq ØåÃÈnðÁm¿_×J¡ Uà¨.½zºH·!ªñŽÁì†w[ƒ ׌6ý‘ÿê()FD J/i/q¤¡7²cºO¶Øm·ÿÖüR*`'>‹† ˆúJøëD¢T(èˆ÷­m¶ûæø)8 ˆ¥…Zx^ÝA½*ÝÛ¸ l7zû®qÿ…. 42-Ì2úUÈeAÈÁj’YƒGÐdܪ ¶ûÿò,|¤…˜ FÃÅh":‚Åë(•Aˆ`é±$; ·ßúGýþ°¦À¬6ê§3N¡$+`™¤‚Ò@ˆƒºV-¶ÿøŒ­$!6ýØTáô–´5I0¬V{ÝãJºD3L:x‹äcƒ·…âXÿØm»ÿ¨Eá-",ƒÀLH2Åj“~,*¡uJîþü~ëDDAÅ2ðŽ¡…kx\‘ º°Û~ÿÿzIPI$¤c‘Yä4`‹†ráûÝ(v/þÿ‹Òi¸©v’¤„‰!B ƒýéîÿ ßþßT’H ÚÆœkwaþ»Iƒ·ú½i H¢,Ók(â)å?M î–ðûîÇüŒ~P…" EBD8Aö¼)áøÁ¶÷¿å=ÃÕ$ˆ3m-¢ô´ì›Ìù Á÷Û„cb´£³³0<w¸ï!ëúI âŒ@4еÈ`{pö0‘ÓÓæV…¿‚#ýF‡ü$‘y^""„<'ëNº\ŠäæSÅdÇÿ]URH…‚(öCRE–LêÝÈ:P¦¨_ 58¾qÂ#£ ×ÕQY+ IÜ(@†$ºuB*Øê6”Ⱥ",ŽÝøÿõ厪CJäa[ÂÚ÷§ÝH:¼ ¢ßß!þ5úú¢rÜUh1vC* ¹ Sb~¶”ÉH4vÿþÿ}-Tƒy)¸ÏkFo÷éoüpòßþÿ©)ÿ­|%Õt+áDpb•¼ÿZ¬?½÷þÅÿ½,+áEI­ r:H+¡Sµ«÷ûz÷PD}­m$MÝ„°A× @þÃ}ZTƒÿ·&?×Çãz¨«â°ˆ1=u"»ÛÃÇWïøýüÿ¡Â2{² CèkÈ£Ž6БÅ ø;»ûÿãÿ, n8H°}~ ‡ÿÿúÿBF‚\ W}pVGúì=z™)õwïþü„z0þ½6ÿÍ¢ËwÇ×®CVàˆ_ÿÿõÒNÿŠèCÛ¿wE?]A—Çÿ«ñuõoé¤ÛÂ}_ G»ÉBº¿î¹n¤á·qûG›ìHl}¯ù ã¹þ’^ÿþõ,~”¡ôüHf?ؽZÃuä0:htGák÷GýL/ãßÚnãðïëaõ»ô°©ycúÿœü]»d0j. 984¨[Ú¾/T©Wö=º¯õ|;Ñ«Ýw¿‡áÐÚOPT«¯ÿÜ^?ýÂÚ"Ú>Ž$)è"‡P öAÜݨAŸ0ú¥–>8ÿ_å°Ê{ £WŽ®ÅÎMâÝ6¸!\ÏÿþÊ5/h¿_l2!ÇGÔ7…DX ID`Âk¸U ¥· ÜtC-î7_³ N†Ž–Èæ°ƒi @ðÜr7µ’ia¹ÇŠ/÷²< ¥ ÒÄ$n(Ša$©„”6ð‡#>m#êÚJ…S¤^4 îÈGA$“­úX4û#ý?˜ùhNëUº*bx$”ƒJ›i ¶ áª}«u×pLä9xC@ä5ÄGN4oݪ ¶x2ÿv@ÁëÙ¬ƒŽ‹žé ™‹/‚! ÈPä;Í…ˆ‘A‡O¥ÝPvG "ì¿þOµŠ­2Ç“ŽaÚ Å„ÈèÍÉ„Èb†´ HHîÅqôÝ:î:Ö(êEÁÛ ÄDD`ù t¿Ý'ž~›LT´R+ºì§6"’=qá´è%ï½,‰i±+ °üˆ:¥£.?ôB$lãáHe9ìH0êL~ëP­p®òÊ– ÈQÄ} Ý‘ÃFÄF En¾Þ®âéUa´šñÅzÏVÇT !ÔEo¥Å‘Cuª’+úì„Ó„îþˆ]÷[iN;m=÷¸y•¢N ;²†U=¸L,&ÝÒ!”>ë{ûü5x²8‹a¶Ã!G¯a!÷"ºD1e._0Ïõ¾£ü4E iX Â ö¡ÐCCÝûU­Øé‘Ž!&Ý&ÁA8H”ðûzëÁ¯aê €lØÈ›­iwÿðñ°­ƒIC>¡ n ϱOº¤ÓÕ%ïÃtÔ„†HF@çÎ9cÅÕ_¿…úïæH'dQÃCõè6ˆ&ý «ÿéùh¨2¹ ¡ì‚8 JØÑ ebÐL&­(N~M¾úmچ؈„ì‡=Wm¤C6ºDc¬Â†¦jïûp·ejMö‚I/d+»¡{¤!Ð?ïÒ¾;K±KN»é…p‚ø7äŽD¼5^ÕxL5í% ½µ 'Ŧ_¿êùh¾Aw¨kº UKƒ»ƒ)Ñ¿¾‚}Æ–ú¡Âö$’p‘ ½Ø3Ÿì*mÈ(qÂÿõ¢ CÁ–~FÀÀ!I!ìAðÒA'†‡UþÈG]¦±U *Uˆ·_Õûê‚Pd¦¤,ÐKvCk¦ A6ÉÕ*ú_n$‡i$) AÂRQ¹ Z6 Uª­µ½Vë¤KÙ„8 ¥¥ünÔ-"Ä$ˆgR"ž”ƒqÔ„îÙã¹éuhGþŸãøB9/ Ž*^í§mƒÐêFä6:dÝ/ïöÌêШJÅD·GQ°tNªB.4êÿ÷è‚´¡A+KÁÿbä{k¤°¢¿ëeo°a5~ Êuÿ·o¿¤£òßõ¤íÝCá a¸îÛ•o74‚Âꀓ¯ÿì†ÆÃ¹ )~ÞhAÜ>põÚþ±<'˜ñ@ß_VØVØßø¿Qßí28e"[m— žwKë¿ ¾Ú¯Ûdìý ˜2°éÿmSîÓKæã·a²ržp0Ònþ°íù {#‡ƒW®©+ã¶Øˆ‡ïAc¯î½“b"þ~ÿÌ;m°Ã~£d ­?kí'†\3­[¿vÃ.ýº«Ï_äžøm^Sñ»Ûa è†_[d+ƒ£Þ¶™¿¡ïa=B½ ½½ìAá4ûVGÐkw-a¼ºÞ݆ÚN‚ûЈä3Ž!¶¥eU#–é1Ð?Gݽ‡»JÂŽ>ÓÚ܇ºôŸá¶ëauÈe9¯cÖ/k $UöÛnCO›MÂKÃá %Ĭ»ã’vï¾pÛvÞA¦ŒïRtAêõrÓ Á§ÁʽÞvj<ב×Û|†^Œ0¼ÁŠé=xB>ÄXÐy âVW¹~íƒrÂ"@ºïh-¼…@‡HTRÆÝ»Ã6;b‡«kÛhHªÝ°e[²}kK‚zgšÚ %[mÄã6­§„‚t ¥ ¯|9|‡N;$­<δv#ªÅªI%Øa†T Ð9pÂÓbI³ñ)ܪ§ÈY×êK·'Å Bí'‰F)1¤\= #¾³PP@• °“tBĦñ ¨;°Õ –¶wd`¬±ÈªˆŽµq´ªÈ@Ⴤ_Û†Þ (TCIÓ èí¸6 J‡{ ÄÎ0„yÝoS­ewqA±°Ãb‘Í:?×-a¦G6Ý"@ÖîØa×i27I’RYh–Ø´JNknÃp„×CØZƒ-!™mÒI!¶Ûm‹¥I'°Šý‹g‘†ÎZÝÞ †~Ú…W'xä(WÈ=‹N’ZV,(h UÌU6>Ù&¡‰1É¿Z“…HÂÙc´AŠÖ’²X*ä¡: lJAHGi¤2t$TŸh@Âh$ªÉƒN°ˆúpì6LvýhH†~ ©[†´¥½'tAqÎ[áàœmÃmõTD°b;-ÞßUK†Èê!þ©Ãm¶ö$„$­Ør ẪJ“ˆß˜È°""ö1ÉŽÛlWIZ@ƒ—öðÁ6È0=:T*î»xAí‘ÌŽDqOô@ЬJ M×­mþä¨Tƒw‹#ˆÄ„;ê!$Bœ6Á‚m·T‚IYO™’~$môݲ8(P¬$‚]°Åû´’ݺîü¡b¢Nú‚Ð$ðÝ»È=é-?uKìvß² Vè×­°û´ÕjÊOÍ]y Aíö”‚!ªìÞLq–òúÕR[‹Õ‘U´;$¾–‹6¾žµ„ˆ}äAßBˆlVÈ߈L;k¶ˆg‡Fø»Mü.ÝþA¦”—µvê¡ÑâÞ²cøaï_·ö+î­ë¥h‹-z»l=RPܱû§I.»u-Å1Ćǵ ßi+{–‚ ¶Bv陋}í}8ݰ.–ˆlÙ¬2¿§"P†ÄHº–pÃQûHI!÷!°–ßíªù|N¾ï©¶d0”Üíý[ ‚»‡ëØ_·‡v”/a†œ=&ðí.,éÛd"l|*^páøíˆKkiY»t] ;ƒWM² Ç-Ûï qúZòæÃ†´C5È)7UlˆâÃu· ý$¼‚b8l6é u…¦ÊT6S¬»ka»õ…ÁQÑíßüo%Dl¥ž pÛÚIiɰöȹ#Í,~ &á0ÈAÜl.öBÛPˆ|áÂh1bºÂÃvÛû> ìX0Ü>¤íZ¬6Ãò Züê ûÓ¶oPÖšžo†CŽÝúztÓöÛm|˜ê¬0ÛÔæ÷ƒCt¡²3–®í>"_#0ØmÞu ~ßjPä5›ªÄUÅ«±¶ØmÑ1×’7þè-½g¢ [È;º×¾ó!Í(‘a*m)¨ùg6Û{ß}¾IÐ*jÚ!¶¡mßKÿrÇô©2.Ýž;1;N¡Ükëïqð¤[¤ìC¸±Jl6Azïû®É½¦ ‹²>–Û²80\_ó/ß´¨Øs¨ÙÜÁr9Ÿ û'Ibö/ªùÇñbë ˜M°M3ÓK ÓGi°ÿ|~ø‡Pša²e`Õm¶¶ÿtÙûݬ‚ƒm"Æ•Ã`íÿ­Y{ûH]¼ ¥œ0]¶î½ç)Òû¶4›²Î 8pÝý|^ãðÙ";Èa* »NµË§â'öèÓvBæèa‰Z0šëoŸ‚´Ã†½Aƒ þ½È ù lé! ‡jðPÛ~á[z¤Ÿ†Å„`ÛʰGx®ÝÞ¶´‚‡÷"8hmé¸Þ›·ïé$þ厘8l7ID‘ŽTAŠ;õa…„7÷Ó†vÃm¤–YÕ‰ «mÉåŽýŽA³u6ÛØ]A ·é¶©$ŽÅîCƒ@Ãa¼Eh:oÕÞ‘~Ÿ·˜mº*ˆ%BžÛ˶}|/ppø† ƒ U‘»{bÛ'$Ö±4yáµp–ØdpÔ4¯Ûõa$½ôØ;°–ÃeÃM{¸kiŽ¡dàZAÔ0r Ad6Xw¦Å¼lj’ ¤=] ݰÛp‚Ô0Çï!œ~Tš‚Œ><8¥jÁ´Ù!Ã'8'’¶ AF’ÝÊÞA,) 1ÛwÁ+¡Jˆ#±PÈ‘)A±ˆdv ˜AZˆi«#= ¬j°H˜p“ávÑ'gl0Xh›¦´C`ì$ ¨>‚µa;¶Ø¤)CJŸlpÂ!™²Ô ‘ b &"Ól=n ºöH4 êÛH‚ô´$„†ÇH'¡»a†™ðU'Z@‰N.áR2l†ƒa¶CQÆØ0A3¡ ƒI•ÃAƒ;ö Aî:ÐA…3†¡QµaXØ0‚äÒH%B’ Ö VA r ƒÃðšÒH$—|· y»Ó +IA$’bJ [pÓÁ¬‰k $‚[!šJ!iØ@ødn 4Õ ‚A$­—Î'ICX0š¡T ’ Ëp Ì ›gÍ AZlíh_µ¬"oA¶-D+N5É»Z A’ƒ°ÄU ï«j!A$’²ÝT»!DNÂ~¶– ”L·YÃ*€’t»…ÒH –Á…ßÒ¶ FA-–æ@x$³Àü?]Õo”‚I॔əjŽpˆ!›Ò‡k ! ”&3+ Õ?UtTD”0„2Ü£@©‚vÅ_¤ˆ f"1» xnoªÃZì„ P&6$a—jh† =«ê‚“JĆ+î£IRM™6Qì Õ…h$ÂI¢nÆ¡,°{DRP’‚,u;$`ò&3í„@ØOJ‘ A£M:`ƒýD&t’©²< Ã!\«qSáf‚BCŽ“AtBŽÑ Ë A‹äàÖn¤ $DäKé´ 0; BOÝ£¬» p‹……m’ê†z‰ü0ÃIúZßA:AB Ý zPä8£½÷#…µ ¡ÐOHè:CI½ ªOÁGä"Ž4«@†D0UýxÒPúLŽ ‘â0U·ü‡r#3 ½¢â$…¥ƒ¨ß´¡[·A4$‘îŽÉ­Ãpa^ÉŽxCŽÛG ¤üPD3p™hµfU©áÉ”^ B$0$ÒááŠ5ÛH@Ñ–ï¶Ò \»p¤°Ž'M¶•ÙÐmûp„Pš{ aÎì)ÙÅ 0jˆb+ðA M0Ãn¡Øó³PÐ`P‚.  ÚVÄHÜ‹iSl6¤Ü Að„" ì2:^ºAvˆÝ¶Èg¤p| â¤H&l“ƒ.A ›M»bÑ!äÜŠìh9 ÀÃaD5¿ L‚ÓßIC '•A¤HgAü†£ˆA‚!Õ†oÐ蛚Š54+R‚lð- èø5\H5 ‚ £Á” §li ƒÕ A¦ˆ5xeÂiÐ â@Õ ¨ ÙþÓmÓv’”ª vÅÈ*ý 99!Ö P‚ 4NÃ#ƒP ˆl!”î ƒ´C0tÈð†YÈP4‡Ò&8°‚6)€pAƒ@é7lƒKI¹u@ðmŒà2Ü0ˆ1ð´¨D ,¸"_VÛdË“yù B$G І± j b#x„’b#VÛdpÓØð°hhH£º°Ä7>+‘ G€=Ùom ¬ „†Îò¡{`Ãת„ZnÛ`$U6¨†°îAª°ÈjŽ.D‡ x õK.íˆM†Ãd,RÐBÃê…è‚C ]:² £¤ª[ˆˆDpÖ> aÛ…Uh!ÄH´ƒ!¨õtAbÓ±A*A¬tƒT-‡¾Á"E´A;m‚!¤=y `Éø„„‚NˆGlJ%°Ð*¢†ïd5B6Cnᣑ¹ÇMAZLBm;áW±§I³¬‚ Ã8Ø>ö AÕBؤ­†M‹Fv,a‡A( v oØaòÜãƒ*C8á‘6¡m¤ |„3P.È3gმIŸX AX„ ÉŽéá¶VÂà íË`‚„Âa·£O„"Ó´ˆ· nÌ;áaƒâ_ÂSáƒ+Pê›lDˆ>:M Â6Á´¡a†M†¡}Ó cµ¨m†IÈ/öݨt^„ˆ°ÛЬ0èp£ÐŽŸ‹†ã°­A”Ð6Ûi'ºÈ:r©² 2šÙ,7Bêœ#ŽDnsnªÜMš„z Ë`‚!G‚D‚n„‚È;¤Ób AÜ6ÂAH(GÂЩ ³‚3©7PpÕAM’¶%a† ¸DØ"ÜpšZ ¯ˆë8`¢5mÁlM¶ë Ð÷K ], Û<'ŽË¬+6l3 îUeßÝ†ÒÆˆ¦Õ¤¤AõAƒ¹ }¶‡ŠÅЇ+m¼”bÄÑ_A%R éRIRkH" #ƒTHÜ#»GÛaµƒ°Éµ%ÚQ¤Â RI —HDV 4 âG˜qÈ{Ú‰¾Ú ¨ DL •iN²È7 g¹3í±(uÛjäùUˆI+‚&’J©„óÌŽ—†ÚØl¸XúüNêV §@– RPš¡!ªò. 2÷tÛ•¶ÂÍZ[;pl‚Wd9Œ¥< ðØx*€ÔÍa²7Vfˆà¼4”þ-vL ²E¬* aB ~í°Dl7§€´hŠ.„t— 6^\Hâ‘Àða ´ƒÛaв\Ãbq]‚!›~ Ã#» †C)Ùn¶•í*T²Ça0Ü&Ùvvðø¤'3$êÂ_g™"dA^‚Û»_›-Öp‚Ïd#*i”Þ¦¬b2ŽA±ÉA‹&C\pÚ b!¤ê–ê¥[¤™C v Ñô'€ð'bÜ&Û `v­…㊠D¨QZê$!‹nˆxnáŠÒ$¡te£Íb¢‘»P„àYÜ=6Û ÜÒ<‰Rè“Þ‰ÈH²ÈAéÉ;@ôÒmÑí°Øk šaÞ–ÞöôgÞ*Ø´vy¥!%ŠÞn­3b»ˆëàïBgÓu퇂!ô ¶C¶+$0Ql›VŸÏ­ÇöýÚ x-›zm†Õ„APU‡ÿ]?¿w ¡Ú#± G†©»´Ã^›ÿW¯ ÒD080ÂÇnØQ Òá¶÷ˆõ¿Cí„^@ð+€Ø'؆ÕKÑnZ‡«­ú| šHHƒ<6¦ØOm×PõQ5ˆþ.M(<5ŽÃ l8Uú£°û¾ûA4‘AÑÀ<"Aí†`4h¢í½Ý6iH.: ˆmŽ0vا@ÕI°Î{mzL%Áa.è0ßaD†©‹r¸ú5ƬDEDZ $AÈ.B i‡v x/i%ÚHU´°EÀða¢rÙ cIä5Ý¥,}†.,6=ÆàƒS¥ƒXöaƒs£Ú„¨› ü*h2éÛdpi;H ÕY«ÓáÚ lD"’Êqg`hØC0ÏÿÖã ' ($Áq¤È,Ž©fȱUâ"2ÐT ›H ’ áÔRÿ,xd‡l^"fŒ…”&a‚Pƒ’ãbá ™†_Ä4è%‘!euœ _m c-Åüïš?äbˆbP¨4Ðí»p|I’[ÊôF²…ÜH'Pš¿m¤ýÖÝÁ”+û%ù70š h*aH(t—ÿTL»½dô{(`o°ÐAô*ƒM*®Ûi\ž6-{(‹_i…$ &"?nƒU[â"8ýÒJjAšòÇw©‘qLÂ(ˆˆñpI!a¬Á1»·ˆã($3ù¹¨]Éb¨®Z¡­"Oöâ2Ì€2Ê4ßìA!j íâÞY…€Ø"þØYf“ÆYç‘\¡K0”2›±;32 ¹f-†€ÆÑOQ¢*"úc,Ã0@âÛØŽRø0Mb$âÓˆ~Ћ٠B ðCF2 T€eŸ\V%Zx YxÈ Xü€ÁOî{ÖòÚ„?\@aª kØ”ÜÐÆ@@Rñù†‹ÿ‚ü !ir4ˆÏïLǔ٧Ç,¬;ÄÉ-Ï{GQYIÿ£ ¿²«xÈ Õr.£Ò‘Žìe66Œ†.”NÄõéKJ¤¡ÂJ–ã÷U+¬ä *‚,ĠΙ‘ DL‚ƒ–€_ jw>Â㇕PnUA„× ŽÕ émðíZ )d´OÛýCA„ˆWŽdO²špÚD'XMA?ݼ2ðÕ=RNõ¯h %¿‡þ¶žÿMy]×oÚüG Ç|R¯·]–t‹ÿ¿ýãû÷õµ3W×ÿî¿¢7ëÃøb?¯®ýƒ,äÖÒVÕv°Óëú\>˜e¡Z]iv l¶?K¸­‡Û× ZÖðÙdO™)!à’mûm™¤Šjëá±OÒø7á莒Ü!ïàâ)qM Þ÷…nŸìu#GíýË)4v“ý'Û§öÌòÈ÷Úßý ÙäTô—·d±~K-;(M~öô÷I·¯µ¿[Uli­íö«ÚV&CWW¿´­;^¡½¾Ìpᄲ˪"_A¦ƒÛXÂqнS´Â » žÓ–Dð[N ¯¦˜fUÝ5M´ÚöB—þp¸ Á dV(dM>ÞÂhF©2ÍzƒTíFJv‚ΜC>ÐKw<)DEÇ@ Ó™¡ˆ˜Â{…ÆÙA¸œ÷rR£§)°lRÁÑ;šj"ç’o¢10ù¿BT(…&ÉC#NW4Ô'BíM­c`›¢»çcl´ŠO}§ ›è¨ŠX0w<Èlöþ[«Ë!@ÓA‚¾¡2ßQ‘Ã-0šÁ8{ÚT!¯vRƒaý„»\‡†¡o»‘Ed<_;P"wîý©F‡½jô? B}ý×÷m«Â}¯¾@ÄîÖôé'ƽ9|kiä[¦MÄþRÙü‚·ëkñh=$ÆåYŸ2s†k•.wL…#²Ïñýä+È€ ƒPL(Rp’ Ñ”‚ ÈA"ÒD+´¿íò-ù÷i¡ä€\ ᦞˆ8ÕA0@Â!j À<›±ÌŠÒõê“ð¨iꦸM4ôÕ4×;*"’È\}ä@»ôÞ6CŽ\(NÓ]=ôûë*4S‡Á’¤&b;ÌŒ4È界FICý=Z‚‘ŽB<:ú#§ßÖŸi¦š &TJÂdQ¡#ÔŠ0‹åc.A„<ä: …QTA˜g†uDt|Uö4·tEº"ÆEÇOè‹tÃÂn½_U\ ÈAU3P4AÃbšBM„/H&„5(æyçõØT?OONÂè7¶n™ :Ã×mz ÓN•T&š§qj¸IPÂkè4ÌÆ¤×µý:ÓÖÈÊa'VÝ·‚[nšDW¦w÷Vƒ‘Öü/ dcнB…LðäÈC$éz_·_Ó{턟ڵ ´Ô'‘Æúz¦Ñ´ž‘8{#þ²#´KÔi Ó<"t È^†½þFêÜk×»Øñ±‹ì/Ýã¶Ú·©é7MHƒ¤‘qÑá]‚ß§ì‡zú ÖÓA¦ªŸ×Ò_¦ûä;ó}­µÛ­"'Cmo´–ÐïM«û¥ÜuO%dXë¡zª ¼]>.¾¿á_ôïßX=‡~;ÂmÝ_î½’šï}Þ£Ûö úÝ-{Oß÷ÿþÿ¿âØkm=ý¥O·ým{õ_­uÖi\‰‘Ò÷^÷ÿø/ÿ±ß·§ì8j÷Uý/øûþ0[hŠuýCAa)*wdZ Ü5½U?ï¿ ÷§&?cÛ’£þß¿¾ßé~¼…·BýŒAicUM- #¥ä±tÿéü*ÿ゙>ÛÛß´¯ûõþôÞ½H‚ºÚµÿü¾ï×ÛÑîŸ|:Ü›öØuß¿ßþ XAm÷ég·Aj¿ÝNŒ ìúµo³OJÿè=¾òBÏö·“®ÇþÚXUÿ ¿¤écÄ#©wÄÂhìCŽVC»ÖìŶß}Ôz¾ømïØúë­\/þ ·m®PäMuú· ¨Vîâã†\#/†-ï»§ÕýÞÿö+‹U·b”'éû…[«½ þ)SMÓÕ:[ü—X}k﫯¯ÑÌîí¬/š?ýèWmnÕ~éöÿŸ;ÓµðƒsS{­ÍwØIÕ­}.ô›M7†z«DXú¯þßÓwmªßi4Û·°±…NÃþžê®ï­¥ =i Õ;a„Ð]~»ý¿ð™=ØTÈŽ²¬é­6‚ :N¯ý®é§Ã 6’&!Ä8þâ4ÛŽHES<ü.ÿ[|4í0˜ ÉZh4Ò AÿÒÚnƒ†Õ†–øAÔTjƒzA¦Ÿl6’N!ªò8÷i~ihIÌ25„PÁ„A‚kjžŸujÓWN8á¬7†ŸM'ð­ 麳’qëßpÏ…ó4' ! CIÛðš¦uLRo¦Õ5!£µ_!]mµÛÐw§l3fà ·a 82 3É! Á;[ítŸü‡­CvGŠ ®š &L¼5tÈqÂ4Hgìq&àì*§-ñ""KpgõOTÓJîÓÈ¡qa Œb Cƒ ¢a5§„ë‡K„E–á0‰†a¶°k¢¶8‰¸°˜]è7iß]ˆƒ2Æ‚§qñ|E± .¤$vªúî"E(®¿ÈƒÆ¨š­¦žšá‚ZÑ*<"9±`šÁ„M2;°\ >‚q:æ¶, ©$š_N"[>—ªÚвfàÂKõøÒ_Uת·§iiaØI;[ $â®J>×kiÚ»L"J+ а„5ÌáÕ "?ÿ–A M̃FlaC3yUP„DD†Á„c†cÄD‚ ä™…&f‘ nA½“[>9 ÍøˆVÂdâ|K‰9 ›™Ä†œ,ŽËqbh"§!”Š$| ÞÊá xH#äÔ‡R<ãïB8!`‚ð"""""@‹!¯© ePĈ¸`Ž Ø¸‚¬DDŒfÏÈ â"Aä Ë1ðÁq ‘Å3>`°y’á”\R†CEü§ÊQã`ÁðV0‹†‚8 ‘·™šøØl8ÈàÚ`9°¤›ŒeÄ!ÅÆ"""""tÙ ÎL桃 œOÉŽMÈ """""""""""""tD†hÈc6  “)Pü´Ë:ÐQ–™B„«Z ·.£qòÍVPˆ"²²/`™çaB˜"1©™8%=%`B|"Ys$ÁsPg õ@Á´É0Κ­øa? zÜ&Ó§ ×RÍH –ÖšWa0WH0Òj°ša[§Ñy "+!Q ëûizH8iÒÚö‚Ãi ŸmƒÓMÕ:½UvÒ¶Ò[ÛK~HM¥¶’O¶—Ý_Þ¿m.«é;iSNÅy1øûÅ+«[ýèZÇ­¥÷Õm~ýC^ùí/­ýå›ë×þ÷¸ïUÿ÷«ÿÓõî•ÿÚ§Ûýt÷¿öµOÿZ#w‘–ˆãÚýÒoJÿõi7á&û^®Dåß[þCzVI»"Nt6°­‘i6þ”4éé¨T›M4›»P­¬'H<V×†ÚØNúnM 0×Ðw¦O¦×Å6ÓMµA„ïýðL‚ñõ†=õ1¿†5­ì…E¦˜'§v—z Di¦L 4ÓZˆ‰XÈèDC!° #–©i™ˆ'd€‚#ÿ,W×^?ÿþ[JY¥•d)fÄX("™X Ë1` § •a‚†FÅ Ì…Õ7OÄ#Œ*……M0A„ ì&ƒ*¡JêB,'§ 5 ™ȱC1 &I‚ H­)e×ÿݠɀt,ð"‚dP!"adÌ´½Wm]4“ ú  i‚a4ˆ|ÔŠþˆ~¥Ò·ÿ^ ¤šl‡ š¤žétîdGmӤﮈLxhñÓûú×t©Ý¦š`šÕ¤›M ¿§ï"ÀNôîì&¡S tDü$›}ªzv®“Pª•%I‘ƘP¸L'IÚ§‘Ð¥]Ht´’®©RAVí ª’¶ŸÇ¶½z¤ª—T‚ZHkUÒúI±¤%T¿ÕRT•.«õêø¥¨UIRô«Õ­-%³ -¿×ZXZJ¿¦×ñy˜]½~±H~––{HP’ꓤ©$•U%Z`Ÿê…{ï])'­B^—މÅIj¼:†úJ–´‚Ô ºÔ ÿ¤’j‰6ÿI-ºJÒT©}R‘q~¹›©<«Z dA¥¥õúL+ûtøO %´ºŠ^G‹_è}WOa;¥ZѵªÎ‰ ÒµZZýixì*Tµ¿KH<ù'íÒúwGJ•ui%ªþºIZD:§i/ŠJ•Wé-wZoM°’¡Õ¦‚Ò…íRþ½p’Z…:ûAa*¤ý&’JPí$­%m3ZVšµKAšpÂÐNÏ„TõVÂK„6¾µW¦švšJ0UXaSˆKš¢`5a0ºOM´éBlRtœ=¦†¿uúé'MÓnˆ¡0PÂéÚÝ*ékanF‘ÁDe «a0¨]ØU ¨0œñˆ‘¼˜°C$Zšh0ƒÔDDC!æ’)”Bˆˆˆÿÿå2£ÿÿÿÿËBÚ­ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþS@¼妩øÿÿÿÿÿÿü´Çïe6 ¸äƒ[÷Ž[nuõaGÿ 4)ŠZåH³™eR'¶UÅÃ<µŒ+,âø" d 师‹Ûe ¬Ê±LHMå‘I‰TðdƒeÄ›%2Ÿ;. …ÀÌ/&áaÍ9tp ^$Ø£ °<¦èFØòÖ1–∪p6ƒ;4Aò!i{ðÂx4ÎÇgaDkPkNÂÜ4гà\†tX%"?ˆ e•(dàL;+ƒ†w!™„'çc`\µ€äó´èŽÌIj2”£$!f‰¢9œ™‘À9†œ’‚ÂÍ6Íå@šDÙ  ˜¦aêe˜&`Ò€€m ˜ ˜‰üвŠº(%€ %€ leptonica-1.70/prog/fmorphauto_reg.c0000644000175000017500000001310312240303125015627 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fmorphauto_reg.c * * Basic regression test for erosion & dilation: rasterops & dwa. * * Tests erosion and dilation from 58 structuring elements * by comparing the full image rasterop results with the * automatically generated dwa results. * * Results must be identical for all operations. */ #include "allheaders.h" /* defined in morph.c */ LEPT_DLL extern l_int32 MORPH_BC; int main(int argc, char **argv) { l_int32 i, nsels, same, xorcount; char *filein, *selname; PIX *pixs, *pixs1, *pixt1, *pixt2, *pixt3, *pixt4; SEL *sel; SELA *sela; static char mainName[] = "fmorphauto_reg"; if (argc != 2) return ERROR_INT(" Syntax: fmorphauto_reg filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); sela = selaAddBasic(NULL); nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); /* --------- dilation ----------*/ pixt1 = pixDilate(NULL, pixs, sel); pixs1 = pixAddBorder(pixs, 32, 0); pixt2 = pixFMorphopGen_1(NULL, pixs1, L_MORPH_DILATE, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixt4 = pixXor(NULL, pixt1, pixt3); pixZero(pixt4, &same); if (same == 1) { fprintf(stderr, "dilations are identical for sel %d (%s)\n", i, selname); } else { fprintf(stderr, "dilations differ for sel %d (%s)\n", i, selname); pixCountPixels(pixt4, &xorcount, NULL); fprintf(stderr, "Number of pixels in XOR: %d\n", xorcount); } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixs1); /* --------- erosion with asymmetric b.c ----------*/ resetMorphBoundaryCondition(ASYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); if (MORPH_BC == ASYMMETRIC_MORPH_BC) pixs1 = pixAddBorder(pixs, 32, 0); /* OFF border pixels */ else pixs1 = pixAddBorder(pixs, 32, 1); /* ON border pixels */ pixt2 = pixFMorphopGen_1(NULL, pixs1, L_MORPH_ERODE, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixt4 = pixXor(NULL, pixt1, pixt3); pixZero(pixt4, &same); if (same == 1) { fprintf(stderr, "erosions are identical for sel %d (%s)\n", i, selname); } else { fprintf(stderr, "erosions differ for sel %d (%s)\n", i, selname); pixCountPixels(pixt4, &xorcount, NULL); fprintf(stderr, "Number of pixels in XOR: %d\n", xorcount); } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixs1); /* --------- erosion with symmetric b.c ----------*/ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); fprintf(stderr, "MORPH_BC = %d ... ", MORPH_BC); pixt1 = pixErode(NULL, pixs, sel); if (MORPH_BC == ASYMMETRIC_MORPH_BC) pixs1 = pixAddBorder(pixs, 32, 0); /* OFF border pixels */ else pixs1 = pixAddBorder(pixs, 32, 1); /* ON border pixels */ pixt2 = pixFMorphopGen_1(NULL, pixs1, L_MORPH_ERODE, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixt4 = pixXor(NULL, pixt1, pixt3); pixZero(pixt4, &same); if (same == 1) { fprintf(stderr, "erosions are identical for sel %d (%s)\n", i, selname); } else { fprintf(stderr, "erosions differ for sel %d (%s)\n", i, selname); pixCountPixels(pixt4, &xorcount, NULL); fprintf(stderr, "Number of pixels in XOR: %d\n", xorcount); } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixs1); } return 0; } leptonica-1.70/prog/blend-green2.png0000444000175000017500000001713211653424354015437 0ustar dandan‰PNG  IHDR?{¬$VŸPLTE %""!"434.1?;@=A@>A9>BÀ8àÇ“5™“Î+ ¼WÀÄqâÅþ8ïÌüh½Îû3íÛï#—â‡r{õ 17ü €óäëçïØ[†J’EJEØ‘Kb­ýÆ:ù¯ð×ÌvHŽ*›¢};}oYê²(~RåG þ™$@Ä̵S‰hÇ\.¬Ç×1Eiðj*ËÍÛo$â-Š4=0–Èí‹O™»9Ф%I+Ü$QÑþ'’Ë£>_ÙØÆ_E~ˆ¸4×EœVÛªvzu|üô¸ðýŒø1¥~ø\*YÁ"þ| ÃTùhìÀ†ˆAfŸ€Îâb÷è7’õã÷HrBxûÒ8Mi/h¦Š´U’˜EGóøËa%ÐKGL—*Mõ½³\€n¼©îù40V wìÐ6Š£âj³?b¯ß÷m¾¿Ülþ°ø,†çÉ9ü€Ï{ã¤#Íÿ2Nü@ƒ;F¬8,rP rg°þîèÛÍ?s[öFäd?CŒ3Z#|h±Âv3·¶‹Ê¾3éµ6v¶gÙü“,Ù±ýÏú0)ù@A±4´cУ:Úo—¿µlø™äq9\U6üL²ág½lø™dÃÏzYŸrrzg^зˆŸõr)~öÞë`<¦žTžõø¹é¯È†Ÿõr)~¼aÛüžp ©é~Ôü_ÚùìPšB·Te¼š›0-úÖlÃÏz¹?˜Ê~²‡¿‚G¦>1‚xãÁÏÉø p=x9s>ì<.dB(K^t±FGÊûˆ÷ÁÇ@>ß ?‘ ?ëeEÿg§´žTÞ°ÁL½øDýœ!Îw/*…3¸È>ˆÍ¢’ÚÄšØ+¹’r¹À§ÊøCQ[&Gê»Ë†Ÿõr9~K£á„?ôE³ÉQ±Ùk^è*í ŽÒ\wR +Œb¬YÊE¥x¯~`jÃÏz¹? >ÀÏCdmŒ&ʘ ¦È!èALÍèhoÐiýðØ-è·ÀÏïî­8•‹ùc!FAã§xŠÞrû"y±/rRBdÄ΃JŒÜ‘‘C©Ï‚ŸØbQau´ÁÝ'~RäÓ`娉ùHi¼Ž%.|ÅÇêgÄ/•}E:5-\Xÿmäâþ3‹ŒÜeì”È¥¤p&'û„—Ÿu€Ÿf‡6ÒJÍ„•˜úÀL1Y"Æs©ÖñïCdÉZ ÿ ¾5 γQSƒƒI†Å„ž8“™ºdš¹ðÉ\Ùƒr\Kg^;oz¥Çw~¹öüógž ZÀÞR k¤1¶›¥Â¥²§ˆu%yà'_‰3kå’Y=•^ª‡hr vÇ?ºä¤`§vDʸðÉÁ%¾ß”q>ãºT¯[i~”Ãs~تûèÚs!™n ˜#¹6~>eã@Îà’Äþ°†cKTL Æ~ÓÉŸMqÙ7åÃ-ºO¶;ß¡n¡^½ ªÎ)¨ù‰/@ÿN¨˜Xœ«‘Ú¾ĺI(FÑÄh]¬(£ñQŸ+˜H†ÁxkÄÊæÿšä<~^ä­H ÃÀà^Ÿ ©5\¦”fJ€"#æj²¥•ãLM>ÆŒQ§Ì se¢Ÿð³³†É·Ž9bYôL›S}(ùàt¶?@"ÃQ:ïÌØßð3ÉYüæLøÁIHFqc 5¬ÌðÖ ÷‡'ü˜?„™‹v ,U5 øa¸=cØL-âG6ßá‹ü;SŽ6üLr?´_Šv·ö‹O¸ýâ×ø½Ù X™·_Ží„.ÿâÔ¨£/%í—õ{n²xÜ„;šÄUJûÅ`dÍñÃu…Ö~ñYíøAû•ꈾ]k¿ìÖ~} ,Íÿ$é$k÷ÔS,èéDãø˜ û޼¶Ä§è,G"îEûfŸø‹:ôeàd.¨°cû“pÁ"(ã WÜ¡\Ô²(´¶E[–±®ç¾qý|õýöŸâï\á=e†¼MÞ\øÜü¡éÃãÓõé€Ùggœ ÷­›^f×có`tÂFÚEIãÜTíÁ}£?¿/]°å:y¾÷’‹ñ“,íW/ã”óO¼U'ãùDõ ¯¾«z€->u?ñ©ÆÙœQÛóø¨éâ!áuülZòùšh6poÏvYè²ÎÌÚ™ÇkÊ¥øÁ ?õXÊqÒÑ?Ÿ¬BŽg×%O5¥cŸ™”9~”fÆ”ó7<–kù¿^5ïo"n*+ø?íKöA–®ìA·Àw3[‹Ì”qv_Ö mYâΉ¹ Jh„5§R Ò$Gð;8Ë’Üå¹èâwñ‹qŸ5 tC˜TC7y¸•:<"Iåœ &ÙbrƒÜ›Ç³žo†pÁzÖͺ^.ÅOgòkæ7ÁÞÈ~#‡:gpìæø E‰×˜üówDUÐ4,¬¢€ÃeOã=}ur&‘>T•Ú³4|Í*—”ò ß,W«øAûE½´áçÚ²Öþ4~ã‡ô  ¨ÏÖªÌñ3´*-pàD­‰‘À±P˜ã'Ïñ?lZhß)#Mq(?­r0DXç?:/²áçr±ý‘lR‡?ÀO¢:¡{X—†RF™˜®EðÓj‘åñ©³8þ~ù÷nüŒ*:iŸ]+ÔÜy‚Î!%DnÖ˜--ÇX¼ÃbÂM×f\ŠŸÝQ<øÃKx æ¯zåîÔ| ÓÒå«ÅöÐ ÊE>øŸÌ 0‹£Z‹Uò¡ µn$û¿d®Nf Õ±^t’¯`R†(I=‚$5Oª­3ˆó}ƒ‰}fu‰í‘KËJ0å“ûÄâüPÆÙÆZæ7iåüTϯâçP~3Æ[åâøóð“s;^ª•èð<2•¥£þ;ˆ`YÈ[ ᣨýIR@møø>º¶§ÀÿùÉbµ×‹Ø¨×ïÛ#ÈÚÖâH¹Òå$:‡Þô /LÒâ4Ä ®”ïJA¯£º ¡A®ŽŸMDVð7¾v>…†jþpYº® ®ÆËè¡êy±ÚH£6ÂÞÖ9£¢½^u] ÃÕ¶¶ÞkºøIÕ ¨J÷ËêƒÔ¾Œ>‹w;ý ÂŒ€Õoø¹™¬ÀÏ<¦†’#ò:#N›¦|o[­Ìm¸ŸÚ˜ðÓØÚÿlŒì®—lçŽ4•vÕc3Ô$7IÊá§š7üÜNÖØŸ<ÇO-ÊnÂOZ²?Q¯[dŸÝëø‰/u²?=¶PmÑ<íOÇ’Çê‘ýyGüü‘=¢‹ñƒv€È•ŽŸ½P/¨…ë dô^ÆÀ,Qû?QÎ4YÓyƒé?RƒÓþ_9íÇ”h@L3ìÈÒnÒú?Ï?Üÿ!íd‘ìA‡~“Ú,÷fü8qGú<â}Îìi‘Êbô™`ÆgiyhòyiT/ š‚3ÌóbhÖþÂ6èF {.ÅOÙÔî$ïÁ ûˆj m˜GmèîûE>5êÆ¸›å8‚ªmü­Ò2ÆAœ_MQóø”8ù·ß'_ÓlÉþÈ‚aßäX™Þ)4&†|D3°=À†9žÍíƒZÔŒÙDxI÷™;°¡ÎV‰®aûLxÏ%àGÃv˜ƒê/ø >–·AäUùØùçu>ù·OÅ‹æ!£À_.°‚)a—ejW'{1½(Þ6CX!*ֳѭ! ƒ¬ )Z¬OcÇŒä£Ì^Ùª$«³Ð³!ºœ±À¾ÔÔo(;ûø$LÄlà2µ’‚TãÅÒù(9Ag¶ã³-å¼Ïä¿xûdôe|¡Wü§2WÈ rŒŸ½IüÞøõì6-’XìhE꣪&‰Àí[øÀØÈ4ûcÊ`lêÁ7NøqÅÁqFј°ÄÐøÚðƒ°q,)M)ìOJp†prÝ©ŸÙ¨Æ!°—¬*¬dà‡GZ}æ:n°ÐgÂÏ­å<~”°ê…>Æøi¤ŽšRÊÙj·np¯ú¦JЃ\nëæY±D É­B¢è bö‚Úi%™U«ÀÕän$æJŠ=ëIˆŽèŸFU”T©?ò@ôCÏî&k›7üLr?#ß9Ò?{ٜǴnöO¤—[¥ï¢áV¬,iņŸý?ð¢ ~H‹{VôBñ£1¸¤ÆÙH?N¹¥;Þåc'øÙÁ‰ŠöKrSñÙÀ·¿áç†r?qgÅòn^è5Ü5qÜÒ$r[—û2âÇRÆvå ?&qÃÉäóÚ+VŽ|ôwÜÚHÿ§tBæˆ%[ 7ü؆°G4’ÞYüØ\àÞRõ.wJ«Áíê3vS7áÚM؆ŸI–º—q#EçH’²Œ¸ é\RGjûqs÷4°ZÎsRŸjs#%_Eí’³ÂÎ`ÆÁº¦£|Ê$+.<‰Ç>¶’9µÆ¼„è`•hb¿9>¸dpù‰íbŽÜ¸¦äÌÕ£K]ŒŸî¥|¥{ìtËÉ£¤•#’t:d…ÌÊÝDÎOÎÎ ^<"^P<é\ix½TMOsW]ÎÿQ¿W'V,~ÿG×?ãNPŸŒ7ì>g[ËÝçF{dlþ‹õryûÕÑPd„þa™ÀûeÉéKÿ‘òèjHòÞq$û0ªÔ(Û6kŒàØnÄÊô_ßÀYãOSÙðs?²?.ÈÚÒæp”$ŽFÂJQ·ËÚë= {©ˆ*ÂgÈ2wÊœˆ}¼µÂ/UW±+sb Ýy ˆ’¥­>f¸Ú±’Ômø¹YÒ7EV67„ëZÝ÷]š3Uœ÷ýÐÝ~ŽíWW±Z_ÂjõÒ ?-ïa'„ܲn!~ÖËjüôMSjoŸ4”‚¦áGÓ·E)Š•Ö`|ý­ÿfõ¥)GØ ~ÚºUaœµ…Ë[ûu?²?0¤F¢ãG OÉ~‚öbFpÔÁ÷àu]l?Ó®ñƒàGwiÑBQ jöýðã¬ë'+ÄMÚWoiõºø!Þ*ëÛ/4V$à—à‡øbðÃÌþH2åNh²¾})B~䀄?ÃÌž5.½Š)FÅ,éáýÚ/¬ÄÒÔº†,?®lÞ†k =Kí7q„¾Q>dþ0¿²<ã²¥7‘%ü v8ÖšzãÌô»?0J®è‰ü4 ŸOÔm·jM}V«ÃMNTÍX\ã˜ÇЋ»+Û·7ÈÝÍ?ߪssÉ­¿6tÀÕè4 µ+Tr eîÑÃì±z»ÂÞØ QÿÝËL¯ÛW2ÄiRu@Úìr •ä`0»¡L0W°¤Å x«”0„Q³‡~’Yp>2ài¤l¸ŽwƒÊ¢Ü~îjÿ\x"²Ä.`ü€}!‰É³3®íâŒ]M _¸êBiŒ!ëÀÅ0 TX‰cŸÄ š‚¤ÚÊø ¦„Î8«FÃpË„†Ÿ^Vž[eD¨™˜Í V$¯“»ÃÏÊÙþ¬./Ý»ŽiSYÌdíNã#Œ®nq¤f‡DÝÒ€Á‡¾‰w†öÊuVÅ¥y?DÞPÂuü˜q+ŒÖ~ùAâ1 r*ï¼ßűlø™ä'ø1 ?؃;*x™Ø-ZcoLAX ·_d'ü}BÝž‰ ‹ìn!©h¿\‹‹¡Ñ`ªó%†\²Fñƒ"fËö~XY’ ?“\€é¸6"Ù*~LЏ CTHôJ(¤zˆ u¥«ÕJp p_‘Šö+‡ ½#>pßOI7°ˆTìå¾lƒV~ðX) ¬B ~îFNñヰ0¼7Ü ¶Ýgî 1(’æ·RHöAUQj䟉 'hà»0`ïBêAÉ|$§·i%œdõûršnÎ×Í} °ÄÂùÍÞG6üLòë³*lC|\%åÍàB>|tß²ág’+ÌÊù¸2¶ï›9É»øÑ¦GdÃÏ$÷3«ûydÃÏ$~ÖˆŸI6ü¬— ?“løY/~&YZ¿ókþönÞ^6üL²0¸–*q4ú:3¹Oò-àø ²ág’ÿ;vo?ýÒö;9"kL³;º§0·PÝù»Ü‘lø™ä?Ùè*âA!—]“±Ä‘Æ »ZdsvØ0Y’e ÷"×\10:Hù¨ž±èc@BqÂâˆJæˆðÕË!½û¶ÜˆŸINðc°è¿‰ŽQ|ÃO&Ò b}r)Û¶.¤5 ŸcóÚƒÕáÁê`4&EXz.„Î#ƒñS¼¥ÙK¬¡g8X UÄû¸WÙð3É ~BvNâ¥Ò],¢û#LŽñ@Ùl>ÔqÕ¨`u À!p½U¯ü ½hQQ1ðÄj|]ØÝþL ‹•LM.T6IFð3”jbÝ…Rm*áꈿ¡ý:-¢í×ÁàçKk<¾~“‹§oõ(àGLÃW¼Æ‡’øÔðóµáç e¾UÁŽä}A9ë+£‚‹ÿxÔÔÞ´áí@÷½åÃGüpÿ>öYÛ~5üøfQ 8"ÛV‰ñzN€„0uØ_òZ0ö?fuNÕœÌ6:IEND®B`‚leptonica-1.70/prog/compare_reg.c0000644000175000017500000001302012274450272015104 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * compare_reg.c * * This tests comparison of images that are: * * (1) translated with respect to each other * (2) only slightly different in content */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 delx, dely, etransx, etransy, w, h, area1, area2; l_int32 *stab, *ctab; l_float32 cx1, cy1, cx2, cy2, score, fract; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ------------ Test of pixBestCorrelation() --------------- */ pix0 = pixRead("harmoniam100-11.png"); pix1 = pixConvertTo1(pix0, 160); pixGetDimensions(pix1, &w, &h, NULL); /* Now make a smaller image, translated by (-32, -12) * Except for the resizing, this is equivalent to * pix2 = pixTranslate(NULL, pix1, -32, -12, L_BRING_IN_WHITE); */ pix2 = pixCreate(w - 10, h, 1); pixRasterop(pix2, 0, 0, w, h, PIX_SRC, pix1, 32, 12); /* Get the number of FG pixels and the centroid locations */ stab = makePixelSumTab8(); ctab = makePixelCentroidTab8(); pixCountPixels(pix1, &area1, stab); pixCountPixels(pix2, &area2, stab); pixCentroid(pix1, ctab, stab, &cx1, &cy1); pixCentroid(pix2, ctab, stab, &cx2, &cy2); etransx = lept_roundftoi(cx1 - cx2); etransy = lept_roundftoi(cy1 - cy2); fprintf(stderr, "delta cx = %d, delta cy = %d\n", etransx, etransy); /* Get the best correlation, searching around the translation * where the centroids coincide */ pixBestCorrelation(pix1, pix2, area1, area2, etransx, etransy, 4, stab, &delx, &dely, &score, 5); fprintf(stderr, "delx = %d, dely = %d, score = %7.4f\n", delx, dely, score); regTestCompareValues(rp, 32, delx, 0); /* 0 */ regTestCompareValues(rp, 12, dely, 0); /* 1 */ regTestCheckFile(rp, "/tmp/correl_5.png"); /* 2 */ lept_rm(NULL, "correl_5.png"); lept_free(stab); lept_free(ctab); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); /* ------------ Test of pixCompareWithTranslation() ------------ */ /* Now use the pyramid to get the result. Do a translation * to remove pixels at the bottom from pix2, so that the * centroids are initially far apart. */ pix1 = pixRead("harmoniam-11.tif"); pix2 = pixTranslate(NULL, pix1, -45, 25, L_BRING_IN_WHITE); l_pdfSetDateAndVersion(0); pixCompareWithTranslation(pix1, pix2, 160, &delx, &dely, &score, 1); pixDestroy(&pix1); pixDestroy(&pix2); fprintf(stderr, "delx = %d, dely = %d\n", delx, dely); regTestCompareValues(rp, 45, delx, 0); /* 3 */ regTestCompareValues(rp, -25, dely, 0); /* 4 */ regTestCheckFile(rp, "/tmp/cmp.pdf"); /* 5 */ regTestCheckFile(rp, "/tmp/correl.pdf"); /* 6 */ /* ------------ Test of pixGetPerceptualDiff() --------------- */ pix0 = pixRead("greencover.jpg"); pix1 = pixRead("redcover.jpg"); /* pre-scaled to the same size */ /* Apply directly to the color images */ pixGetPerceptualDiff(pix0, pix1, 1, 3, 20, &fract, &pix2, &pix3); fprintf(stderr, "Fraction of color pixels = %f\n", fract); regTestCompareValues(rp, 0.061252, fract, 0.01); /* 7 */ regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 8 */ regTestWritePixAndCheck(rp, pix3, IFF_TIFF_G4); /* 9 */ pixDestroy(&pix2); pixDestroy(&pix3); /* Apply to grayscale images */ pix2 = pixConvertTo8(pix0, 0); pix3 = pixConvertTo8(pix1, 0); pixGetPerceptualDiff(pix2, pix3, 1, 3, 20, &fract, &pix4, &pix5); fprintf(stderr, "Fraction of grayscale pixels = %f\n", fract); regTestCompareValues(rp, 0.046928, fract, 0.0002); /* 10 */ regTestWritePixAndCheck(rp, pix4, IFF_JFIF_JPEG); /* 11 */ regTestWritePixAndCheck(rp, pix5, IFF_TIFF_G4); /* 12 */ pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return regTestCleanup(rp); } leptonica-1.70/prog/heap_reg.c0000644000175000017500000000623412240303033014365 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * heap_reg.c * * Tests the heap utility. */ #include "allheaders.h" struct HeapElement { l_float32 distance; l_int32 x; l_int32 y; }; typedef struct HeapElement HEAPEL; static const l_int32 NELEM = 50; int main(int argc, char **argv) { l_int32 i; l_float32 frand, fval; HEAPEL *item; NUMA *na; L_HEAP *lh; static char mainName[] = "heap_reg"; if (argc != 1) return ERROR_INT(" Syntax: heap_reg", mainName, 1); /* make a numa of random numbers */ na = numaCreate(5); for (i = 0; i < NELEM; i++) { frand = (l_float32)rand() / (l_float32)RAND_MAX; numaAddNumber(na, frand); } /* make an array of HEAPELs with the same numbers */ lh = lheapCreate(5, L_SORT_INCREASING); for (i = 0; i < NELEM; i++) { numaGetFValue(na, i, &fval); item = (HEAPEL *)lept_calloc(1, sizeof(HEAPEL)); item->distance = fval; lheapAdd(lh, item); } lheapPrint(stderr, lh); /* switch the direction and resort into a heap */ lh->direction = L_SORT_DECREASING; lheapSort(lh); lheapPrint(stderr, lh); /* resort for strict order */ lheapSortStrictOrder(lh); lheapPrint(stderr, lh); /* switch the direction again and resort into a heap */ lh->direction = L_SORT_INCREASING; lheapSort(lh); lheapPrint(stderr, lh); /* remove the elements, one at a time */ for (i = 0; lheapGetCount(lh) > 0; i++) { item = (HEAPEL *)lheapRemove(lh); fprintf(stderr, "item %d: %f\n", i, item->distance); lept_free(item); } lheapDestroy(&lh, 1); numaDestroy(&na); return 0; } leptonica-1.70/prog/test1.bmp0000444000175000017500000007401607277671633014244 0ustar dandanBMx>(&ªÐwm m ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉp÷ÿ÷ÿºÕçÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁêþÕz­Õݧÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð­×«µ÷:kOÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðVªÞÖªÕØçÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø»]k«Uz¯GÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøvêÕ]ª·]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüûÿÿÿöÚ¿ï÷þ¶í·ÿþúõªª·ÿý¶¾ÿÿÿÛÛwÿÿÿÿÿÿÿÿÿÿÿÿÿÿø«]~º÷]+Gÿÿÿÿÿÿÿÿÿÿÿÿÿÿüóÿÿî9÷óœÿÿHUªÿÿÿÿÿÿÿÿÿÿÿÿÿÿüUû­ÕY*ÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñÿÿÈ; óõLÿ€*$KjU ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüª­v«®T‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñÿÿ†­^ýóŒ ?ÿ” DJ ƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÍû«uvjÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿüðúzêÀ~òÜÿà@¬À€‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿü d¦ÝÖ«4Hƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøéîx¬Õ`>r˜€ÿਨ R¨Cÿÿÿÿÿÿÿÿÿÿÿÿÿÿø*,Ýz©Ôl,ÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþkÈó׫V‡sPÿøPP¥P ÿÿÿÿÿÿÿÿÿÿÿÿÿÿñõ•{—^j6ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ#ãõ­]»Ãµ€(FÿþATª #ÿÿÿÿÿÿÿÿÿÿÿÿÿÿãV‚·zëTZÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ÷æÕªäù‚@!þˆP«U€ÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿŽèj­Uh¬ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿǧõªµ[¼Á€  ?ÿ€ €TN€sÿÿÿÿÿÿÿÿÿÿÿÿÿÿ5^ •öë´p ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüû—oÊ÷Û½VÀ¢Àÿ€GH€ªµ@£ÿÿÿÿÿÿÿÿÿÿÿÿÿþn»z«UT¬0ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþ/ß×Z­VªJ)À‚ÿÄ Y ÿÿÿÿÿÿÿÿÿÿÿÿÿþ[Õ"*ÝÞ¡Pÿÿÿÿÿÿÿÿÿÿÿÿÿÿüü®ßÚ­ÖëuC¯¤ƒƒÿñ"V †P ¥@#ÿÿÿÿÿÿÿÿÿÿÿÿÿùuj¤ª¥@¨ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüú®¿µz«Uª€-[UÁÿøP@„T ÿÿÿÿÿÿÿÿÿÿÿÿÿó®ÝÒêõz¢Xÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþ®ÿ›«Uj¥@!¤ÀÿþB*€ªA£ÿÿÿÿÿÿÿÿÿÿÿÿÿöÕj ×[«@hÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ½¿­Uª×~ ÿÿÀÿ`P@Sÿÿÿÿÿÿÿÿÿÿÿÿÿ櫵@.­]‚¨ÿÿÿÿÿÿÿÿÿÿÿÿÿüþ¯?Õ®µZªXº§þ€ÿ@ª€Ãÿÿÿÿÿÿÿÿÿÿÿÿÿ‹•W Uö«BÐ?ÿÿÿÿÿÿÿÿÿÿÿÿÿüþí?ªÕʵRì{^ÿþÀÿ" P U#ÿÿÿÿÿÿÿÿÿÿÿÿÿέUºªÔ€¨?ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÏÕzµÚëTŸuÿþÿÀ‘Â+3ÿÿÿÿÿÿÿÿÿÿÿÿÿ;µ}°µoDP?ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿU+µÚ­Uj$vYÿî€ÿð@”T ÿÿÿÿÿÿÿÿÿÿÿÿÿS«°_ªÕ¨ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿtþµZ­Vª•Ygÿ΀ÿø@3ÿÿÿÿÿÿÿÿÿÿÿÿþz¨ÕRªÕzƒPÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿJ­UªÕnŸöÿ~‚ÿü@*H)ÿÿÿÿÿÿÿÿÿÿÿÿþ­UnøWª¥ ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÀ5Ö¯UjµÏrýÜ€?ÿ!R ¨" !ÿÿÿÿÿÿÿÿÿÿÿÿü×h•JºÝZ HÿÿÿÿÿÿÿÿÿÿÿÿÿüÿþZ»Uj­Õ%øÿóü€?ÿª Sÿÿÿÿÿÿÿÿÿÿÿÿü®{¬µãª` ÿÿÿÿÿÿÿÿÿÿÿÿÿüþ/Uº•V«§QÿçÜ€ÿ€©ÿÿÿÿÿÿÿÿÿÿÿÿý]ë-yê¼\LÿÿÿÿÿÿÿÿÿÿÿÿÿüðÆÿTkUzµT§ÿ¿ýÿà Tqÿÿÿÿÿÿÿÿÿÿÿÿý«µ›h·@ÿÀ˜ÿÿÿÿÿÿÿÿÿÿÿÿÿüðøk•k¯ZëÐgþ÷Ü„ÿð•€ P€€IÿÿÿÿÿÿÿÿÿÿÿÿúÝ®ÙÜÿÇñ´ßÿÿÿÿÿÿÿÿÿÿÿÿüói?U{´Vª•Hûÿ]@ÿü¥‚@@!ÿÿÿÿÿÿÿÿÿÿÿÿùjéF© ùÿÃÏødÿÿÿÿÿÿÿÿÿÿÿÿüûÜ?*§[«Uz¸ëöÜÿü("* ±ÿÿÿÿÿÿÿÿÿÿÿÿûµVã]ù÷=?ÿ`ÿÿÿÿÿÿÿÿÿÿÿÿüýô¿5Z­V«%Uÿ¿ûø ÿ‘Ôÿÿÿÿÿÿÿÿÿÿÿÿùn«xùÈüÿÿ˜wÿÿÿÿÿÿÿÿÿÿÿüù|¿›ªÕªÕZ¸üÿçý ?ÿ*P©ÿÿÿÿÿÿÿÿÿÿÿÿ÷©Ýáÿüçðÿÿãç?ÿÿÿÿÿÿÿÿÿÿÿü÷¼¿ªvºÕk­Tùûïû€ÿÄ*@J$Hÿÿÿÿÿÿÿÿÿÿÿÿñ^jÀã ôÿÿÏïÿÿÿÿÿÿÿÿÿÿÿüÿ~_™«UjµUªgÿ»ÿä@…J) aÿÿÿÿÿÿÿÿÿÿÿÿ÷«µpÿ‰ð?Ìÿÿì Ï?ÿÿÿÿÿÿÿÿÿÿÿüþÿÍUª•J­V?ûïù1” ÿùP p±ÿÿÿÿÿÿÿÿÿÿÿÿóuîÇÿf¯ÿ-ÿÿép?ÿÿÿÿÿÿÿÿÿÿÿüþãÕ®µv»Uªóÿû%Aÿü$ŠTˆ1ÿÿÿÿÿÿÿÿÿÿÿÿ÷nÕþãŸü$ÿÿã0>ÿÿÿÿÿÿÿÿÿÿÿüùÝÊÕÛ©UjµŸîúM™@ÿþR PªD ÿÿÿÿÿÿÿÿÿÿÿÿòÕnýà?þÿÿîøwÿÿÿÿÿÿÿÿÿÿÿüùÜån­Vª•J>ÿûû‚ÿ@€P«U@!ÿÿÿÿÿÿÿÿÿÿÿÿåz¹ÿ³àÿÿùÿÿìœ÷ÿÿÿÿÿÿÿÿÿÿÿüóãòµÚ«Ujµ9ÿǺNª(ÿ€@)TŠ€¡ÿÿÿÿÿÿÿÿÿÿÿÿëµãýÇáÿÿøÿÿéžóÿÿÿÿÿÿÿÿÿÿÿüûóùZ«ÕªµV•ûï¾]j*ÿÀ ªT`QÿÿÿÿÿÿÿÿÿÿÿÿåV÷_ïÿÿÿÿÿççÿÿÿÿÿÿÿÿÿÿÿüó`üµÕjµV©ÿºOkÊ€ÿàU"•J(aÿÿÿÿÿÿÿÿÿÿÿÿê­?ªŸïÿÿ®ÿÿìߎçÿÿÿÿÿÿÿÿÿÿÿüþý þÜ®•k©v¿óïúßíÔÿø•j¤ ÿÿÿÿÿÿÿÿÿÿÿÿ÷V~ÿÿÿþÿÿíߎÜÿÿÿÿÿÿÿÿÿÿÿüÿý4#Uj•VŠŸ×ÿ·ÏêJ@ÿü"J„U¬ÿÿÿÿÿÿÿÿÿÿÿÿå¸ðÿ÷ÿÿÿÿÿãŸÎ_ÿÿé|}ªÀ%ÿÔÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿèÿíÿÿüÜ~ðñÿ'ÿÿÿÿÿÿÿÿüÿŸÿÏç¿ÿÿyÿïÿùöë—VÀ ˆ ÿðGÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÔÏÿìÿÿý2þÉßõ~[ÿÿÿÿÿÿÿÿüÿŸÿßà?ÿÿ§þßšà×ëôX `ˆÿüÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÖÿôÿÿüìüÍÿÁ|—ÿÿÿÿÿÿÿÿüÿŸÿ¿ïÿÿÿŸýüûo“æÿþ ˆüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ»ÿæÿÿý˜ý„ÿŠ|¿ÿÿÿÿÿÿÿÿüÿŸÿ¿ïÿÿÿŸóïûo¹çûúÚ !?þÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿþð?öÿÿü4ù2ÿùoÿÿÿÿÿÿÿÿüÿŸÿïÿÿÿÿCýoY]ïÐi€Xÿ‚ÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿëòöÿÿþäø ×úßÿÿÿÿÿÿÿÿüÿŸÿÏÿÿÿ¿ÿÿ¾û?þñ}ÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿÿÿÿôÿÿþ™øáþëø¿ÿÿÿÿÿÿÿÿüÿŸÿßÿÿÿ°‹ÿÿýóoßñw@ÿâÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿÿÿñ/Öÿÿþ3ñðü·Ñÿÿÿÿÿÿÿÿüÿßþßÿÿÿ‡ÿÿóÜÿÿÓ´€ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿñÆæÿÿþÃñÿþoâÿÿÿÿÿÿÿÿÿüÿßþÿßÿÿÿ©Gÿÿ÷ô÷{ùZ„úÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿùzVÿþ›ðÿüOæÿÿÿÿÿÿÿÿÿüÿßüÿßÿÿÿ„ÏÿÿçÑ¿ÿ½ý$(  ?ü€ÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿø?rÿþ3öùÿÿÿÿÿÿÿÿÿüÿßýÿßÿÿÿȯÿÿïýßõÿw: ÿ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿýOûÿþã÷æÝÿÿÿÿÿÿÿÿÿüÿÏýÿëÿÿÿÆÿÿÏÛŸÿ[l„ €ÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿý}úÿÿ—÷Ÿæ¿3ÿÿÿÿÿÿÿÿÿüÿïýÿæÿÿÿfÿÿÿ/ù­Z«ïP @ÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿý{ÿþ7óÿüËçÿÿÿÿÿÿÿÿÿüÿÏýÿÿÿÿÿ§ÿÿþßÛjÛ—}ê@@ÿàÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿþÿºÿþçëÿü~ïÿÿÿÿÿÿÿÿÿüÿïýúþÿÿ‡ÿÿýÿò»—V[ª!!ÿðÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿþÿãÿþãÿÿ>ßÿÿÿÿÿÿÿÿÿüÿÏûÿ¸ÿÿ×ÿ{ÿÓᮽ¶ÍHðÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿòÿþ/óÿÿ­ŸÿÿÿÿÿÿÿÿÿüÿïûÿåßÿÿkýÿÿÿÛk¾µ·ËBEüÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿ?ûÿþÏÃÿÿû¿ÿÿÿÿÿÿÿÿÿüÿÏûý_ïÿÿ+ï÷ÿóóÿf7 ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿ¿öÿþÓÿÿóÿÿÿÿÿÿÿÿÿüÿïûüÿ§ÿÿn?ÍŸÿÚßÚj¶"ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿßûÿþoÑÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÏÿüÍö?ÿ{ÿóoÿõþÛ³LŒ@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿßòÿÿÝÓÿÿæÿÿÿÿÿÿÿÿÿÿüÿïóûñ¿ÿÿûÿÿٯ꥕º€{ÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÁÿùÿÿÿÿÏû÷þ ÿÿ®ÿÿÿÿÿÿÿÿÿÿüÿï÷ûeãïÿÿÿÿÿýû>­•*dÿÿþÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿïûûÿY¨?ÿÍÿÿÿÿÿÿÿÿÿÿüÿï÷÷çïÿÿþÿÿù÷Ù¥2hÒ €¿ÿø(?ÿÿÿÿÿÿÿÿÿÿþÿüÿÿÿÿïúïþx¨ÿ›ÿÿÿÿÿÿÿÿÿÿüÿÇwöÞoÿÿÿïÿêÝvÙjI¤D=ÿÿÀX?ÿÿÿÿÿÿÿÿÿÿþüÿÿÿÿïóßÿ<,ÿ›ÿÿÿÿÿÿÿÿÿÿüÿÄ'îýoÿ~ïÿ¿ÿûÖê’Ê1HûÿÿT?ÿÿÿÿÿÿÿÿÿÿþ³?þÿÿÿïúÿþ=(3ýWÿÿÿÿÿÿÿÿÿÿüÿßÿï÷¾ÿÿÿÿÿã©»G¼… €_ÿø¶ÿÿÿÿÿÿÿÿÿÿý¥?þÿÿÿÿïûÿþyh}ÿ¯ÿÿÿÿÿÿÿÿÿÿüÿ¿ÿÝßÿßÿ{÷ÿÿÿá½U³Ó*¿ÿÀ»´ÿÿÿÿÿÿÿÿÿÿÿ¥?þÿÿÿ÷òÿþzHþÿÿÿÿÿÿÿÿÿÿÿüÿ¿ÿÝúŸÿ÷ÿÿþáUë$Ó–€_ÿÿJ¨ÿÿÿÿÿÿÿÿÿÿÿù¼?þÿÿÿÿöÿþ|Xÿ<ŸÿÿÿÿÿÿÿÿÿÿüÿÏÿÍýø?ÿ{÷ÿÿûÃÞªVˆÐÿø¨¡ÿÿÿÿÿÿÿÿÿÿÿëëÿ?ÿÿÿ÷öÿþ}Tÿ¿¿ÿÿÿÿÿÿÿÿÿÿüÿãÿÝõïŸþþïÿÿÿzJ°ÿÿÀ-W‡ÿÿÿÿÿÿÿÿÿÿÿõŽ/ÿÿÿÿÿö~ÿþx•ÿÈÿÿÿÿÿÿÿÿÿÿüÿéÿÜÿÿÏÿÿÿÿÿê}™²,¬@ ?ÿþT¨ÿÿÿÿÿÿÿÿÿÿÿëŽÿ?ÿÿÿÿöþÿù=µÿâÿÿÿÿÿÿÿÿÿÿüÿîÿÀß÷ïÿÿÿÿ¡õw“‚€×ÿø¯TÿÿÿÿÿÿÿÿÿÿÿeÌ;ÿŸÿÿÿÿöÿùž­ÿòÿÿÿÿÿÿÿÿÿÿÿüÿîÿÕóïÿÿÿÿûÝm³îÀ@ÿà)TÿÿÿÿÿÿÿÿÿÿÿýYUÿŸÿÿÿÿöÿÿôž­ÿýÿÿÿÿÿÿÿÿÿÿÿüÿîU€`ˆÿøª°?ÿÿÿÿÿÿÿÿÿÿÿ©vªÏÿÿÿýæûÿëÿÿÿÿÿÿÿÿÿÿÿÿÿüÿí}y¼»ÿÿÿG}صTÈÿÀ*U€ÿÿÿÿÿÿÿÿÿÿÿÿ^¨V[¿Ïÿÿÿÿö÷ÿù·ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿíøì®ŸþÿÿûŸÿÿ6ì˜`CÿÿUªÿÿÿÿÿÿÿÿÿÿÿüëEº-_çÿÿÿýæ÷ÿý­9ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿíó¾>~Ïþÿÿü~·ím™`f†ÿüªÐ?ÿÿÿÿÿÿÿÿÿÿÿèU ô ¯ãÿÿÿýäïÿÞlYÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÝëÿ?÷þÿÿQÿýÿ™;HÔ0?ÿ  µ@ÿÿÿÿÿÿÿÿÿÿÿÿÐ*½ZWãÿÿÿýåÏþúí]ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÎãÿ7ÿóÿÿú‡õïÛjè`ÿþ5Kÿÿÿÿÿÿÿÿÿÿÿÿ€ï¬«ñÿÿÿÿìßûùë9ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿßý;ÿóþÿþ?ÿþºÉšfˆÿðª¼ÿÿÿÿÿÿÿÿÿÿÿý¯^•ùÿÿÿÿÍßïýúyÿÿÿÿÿÿÿÿÿÿÿÿÿüÿßöÿÿûÿõÿ×½ý¤PÖÀÿÿÀ(TÀÿÿÿÿÿÿÿÿÿÿÿÿø(Uª nøÿÿÿÿíÿÿüêùÿÿÿÿÿÿÿÿÿÿÿÿÿüÿßóÿéÿóþÿGÿýï÷Í ʇÿÿ•·ÿÿÿÿÿÿÿÿÿÿÿÿâ™n¿løÿÿÿÉÿÿÿò¹ÿÿÿÿÿÿÿÿÿÿÿÿÿüÿžqÿÞÿûþþŸÿïûÞŒ0EÿøJ¨ÿÿÿÿÿÿÿÿÿÿÿÿÁáù}Z ¼ÿÿÿÛÿÿÿܹÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ¼Ÿ½ÿÿ÷þôÿþßú@v„ÿÀ*µ@ÿÿÿÿÿÿÿÿÿÿÿþ‚Ç¿Ô \?ÿÿÿÛÿÿÿtûÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ™ßgÿýçÿáÿÿýýÔ€Cëÿÿ¥Wÿÿÿÿÿÿÿÿÿÿÿÿû@û|ª¯ÿÿÿÓÿÿÿµûÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ“Ïÿÿüÿÿÿûÿq *ÿüV¨ÿÿÿÿÿÿÿÿÿÿÿÿÕ€nÞÿ|Wÿÿÿ—þÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿüÿß÷ÿüÿÿ?ÿÿûþ¢ÚD?ÿà©€ÿÿÿÿÿÿÿÿÿÿÿÿúÝÿßÜkÿÿÿµÿÿÿ‹÷ÿÿÿÿÿÿÿÿÿÿÿÿÿüþÞÿýÿÿÿÿÿÞÚlÁÿÿ­ÿÿÿÿÿÿÿÿÿÿÿÿÿ¥ƒ®×ÿî‡ÿÿÿ'ûÿÿË÷ÿÿÿÿÿÿÿÿÿÿÿÿÿüüÃýïÿáÿÿÿÿÿ¿´, µÿüJ¨ÿÿÿÿÿÿÿÿÿÿÿÿý^¯Wÿïö ÇÿÿÿkûÿÿÛçÿÿÿÿÿÿÿÿÿÿÿÿÿüù³éçÿþÿÿÿÿÿ}`@:?ÿðªàÿÿÿÿÿÿÿÿÿÿÿÿÿôê]Öÿûüaÿÿþk÷ÿÿççÿÿÿÿÿÿÿÿÿÿÿÿÿüò}ï÷ÿÿÿÿÿÿúJè@ÿÿ€©Wÿÿÿÿÿÿÿÿÿÿÿÿÿ®Õ®¿ÿÿüƒ°ÿÿþÇïÿÿçÏÿÿÿþ¿ÿÿÿÿÿÿÿÿü÷üíÿÿÿÿÿÿÿ¶õ@¸ÿüV¸ÿÿÿÿÿÿÿÿÿÿÿÿýW‚w{÷ÿþPÿÿýŸïÿÿ÷Ïÿÿÿø¿ÿÿÿÿÿÿÿÿüÿýÿÿÿ¿ÿÿÿíâNl?ÿà ª€ÿÿÿÿÿÿÿÿÿÿÿÿÿþª›½ÿÿþ,?ÿù¿ßÿÿ÷ŸÿÿÿÇŸÿÿÿÿÿÿÿÿüÿ¿~ÿÿÿÿÿÿÿߢ” ÿÿ€UÿÿÿÿÿÿÿÿÿÿÿÿÿõÕrïßïÿü?ÿóßÿÿ÷Ÿÿÿÿ?ÏÿÿÿÿÿÿÿÿüÿžýÿÿÿßÿÿÿþÀ$ƒÿüUPÿÿÿÿÿÿÿÿÿÿÿÿÿÖ³ñW¿÷ÿþ@@ÿæ¿ÿÿ÷?ÿÿüÿÏÿÿÿÿÿÿÿÿüÿïÿÿÿÿßÿÿÿ¡€Kÿð ëÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿªÏö­Wÿÿü‡ÿîÿ¿ÿÿ÷ÿÿÃÿÏÿÿÿÿÿÿÿÿüþþûÿÿÿßÿÿþ^íPÿÿÀµÿÿÿÿÿÿÿÿÿÿÿÿÿýV?ñ×ûÿÿþÃÿ™ÿÿÿòÿÿ?ÿÃÿÿÿÿÿÿÿüþûÿÿÿßÿÿõ´Þ ÿþVàÿÿÿÿÿÿÿÿÿÿÿÿÿõœÿæ¾ÿÿ÷üáþsÿÿÿøÿÿýÿÿÃÿÿùþ?ÿÿÿüöÞ÷ÿÿßÿÿï ;Nÿð:€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿºóÿ÷Wÿ¥ßþxøçþÿÿÆyÿÿÇÿÿƒÿÿçÿÿÿïüö~óÿÿ¿ÿÿþß¼ÿÀ>ÌÿÿÿÿÿÿÿÿÿÿÿÿÿÿUÿÕûÿÿÿ~<ßþÿÿ¶˜ÿÿ?ÿÿÁÿÿïþŸÿÿ¯ü÷ˆÿÿÿí¿ÿÿð½·ÿþU0?ÿÿÿÿÿÿÿÿÿÿÿÿÿýª?ÿçÿþÿÿü€@?üÿÿ½ìüÿÿÿÀÿÿßÿOÿõüóéÿÿÿæÿÿÿ>äÿø«ÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿêØÿÿåOýÿÿ¼€Àÿþÿÿÿÿ÷ÿÿÿ€ÿßþÿWÿüøÉÿÿÿ÷ÿÿþÁuzÿÿÀ+ÜÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕGÿÿïÿ÷ÿÿ^ðÿ}ÿÿ¿ÿÿÿÿÿÿÈÿßÿOý¿ÿüøÿÿþÿÿÿþíÓÿÿ\ ?ÿÿÿÿÿÿÿÿÿÿÿÿÿþªÿÿçÿûÿÿ¬ø?ÿÿÿÿÿŸ¿ÿÿÿÿßÿ'~ÿÿüñáÿÿüsÿÿ¨:ß?ÿø«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿé,ÿÿÇêÿÿýäþÿÿÏÿß¿ÿÿÿÈÿßÿ•§ÿÿüÿÍÿÿÿ{ÿûÃß¾ÿà.¼ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÕpÿÿÿåÿÿÿøÿÀyÿÿÿÿŸ¿ÿÿÿÄOÿßÿ?ÿÿüÿîÿÿÿÿÞåáÿÿUàÿÿÿÿÿÿÿÿÿÿÿÿÿÿjÓÿÿÿçÿþÿÿ|(Mÿð{ÿÿÿü¿¿ÿÿÿ€£ÿß$ƒÿþÿüÿæÿÿ?þø}~ÿü«ÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿïßÿÿþ¬ðý;ÿÿÿü¿ÿÿÿÄ!ÿÚ¨ÿ¿ÿüÿðÿÿÿ¿ÿáÿªÿð+Øÿÿÿÿÿÿÿÿÿÿÿÿÿÿ OÿÿÿÇÿÿïÿÔ@¿ÿ;ÿÿÿê¿ÿÿßÀ ÿûW‡þÿÿüÿÿÿ?¿ÿ‡ÿåÿÿ€µPÿÿÿÿÿÿÿÿÿÿÿÿÿü@ ßÿÿÿïÿÿÿÿè0 ¿ÿ›ÿÿÿê¿ÿÿÏ€€ÿŒ€“óÿÿüÿÿÿŸ?øúÏÿükÿÿÿÿÿÿÿÿÿÿÿÿÿÿâÏýÿÿÇûÿÿÿü,ÿÛÿÿÿÿý¿ÿügıVƒŸÿÿüÿÿ?ÿ‚ð?ÿÿð œÿÿÿÿÿÿÿÿÿÿÿÿÿÿ˜?ÏÿÿÿïÿÿÿÞÜ@?ÿÉÿÿÿÿüŸÿãå >ºÿÿÿüÿÿ??ØÿÓÿøÿÿ€kàÿÿÿÿÿÿÿÿÿÿÿÿÿÿ@ØÏÿÿÿçÿÿÿÿ¬_ÿËÿÿÿÿþ¿ÿ?áÄ¡_aÿÿÿüÿÿÀ?ßúÿ×ÿü]ÿÿÿÿÿÿÿÿÿÿÿÿÿÿü¢¡ÿÏÿÿÿÇýÿÿÿØ@«ÿáÿÿÿÿþ¿øÿåÃ…C¢ÁÿÿÿüÿÿÿŸßüÿÿà ¬ÿÿÿÿÿÿÿÿÿÿÿÿÿ õBÿÏÿÿïÿÿ¯úè ­ÿñÿÿÿÿþ¿çÿáÀ€ðÿÿÿüÿÿÿÏßáÿþÿÿõpÿÿÿÿÿÿÿÿÿÿÿÿÿþZ€?ÿÏÿßÇÿýÿýt 2¿ùÿÿÿÿþ¿ßÿáÀ„‡€ÿÿÿüÿÿÿÇŸÿÿÿþ_ƒÿÿÿÿÿÿÿÿÿÿÿÿÿüª@ÿÿßþßÿïÿÏÿÿxB™üïÿÿÿüžÿáÁ° ÿÿÿüÿÿÿàuå U*Ÿÿÿ?ÿùÿÿÿÿüÿý0'Ÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿùÿÿýÿ¿óÿÿÿû€ÿÿÿþÀÿÿôÃ×\ïÿŸ«ð¨@ª¼Gÿþ?ÿ÷ø÷ÿÿüÿ%BgŸÿÿüÿÿÿÿÿÿÿÿÿÿÿÿøwÿÿýÿÿûÿÿû½„ÿÿÿé?ÿÿFx˜÷ÿÏUýB]Ö ÿü?ÿ÷¯¯ÿÿÿZàgŸÿÿüÿÿÿÿÿÿÿÿÿÿÿÿó¯ÿÿýÿÿûÿÿŸî?ÿÿÿÔÿÿýEÑW*[ÿïË€~@*ªÿü?ÿñ|ßÿÿÿ?ðçŸÿÿüÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿýÿÿóÿÿï»/€ÿÿ|_ÿ¿÷òøŒ;ÿóý?®·È?ñ?ÿùÿÿÿÿÿ?ÿ¿ƒŸÿÿüÿÿÿÿÿÿÿÿÿÿÿýÿÿýÿÿûÿÿ¯Ú/Àþ÷¨ÿÿ¿ùlæeïÿù€˜€Uª¢ñ?ÿûêÿÿÿÿÿÿ‡ŸÿÿüÿÿÿÿÿÿÿÿÿþÿßÝÿÿýÿÿóÿÿþïŸðÿþÀ ¿ûü?ücœÿþÿíêÝIò?ÿùµÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿýÿýûÿÿýÿÿûÿÿ«ýøÿTÿÿãÿœ~ÿÿþu€ö@]j¤á?ÿýÛoÿÿþÿþ¿ÿÿüÿÿÿÿÿÿÿÿÿûbÿÚ¿ÿÿýÿÿóÿÿ]þü Tà_ÿÿ>?ÿœÃÿ?ÿÿ:€ýkµT ?ÿûíßÿÿþÿÿûÿÿüÿÿÿÿÿÿÿÿÿêGÿïÿÿÿýÿÿûÿÿîŸþª ÿßýÿÿÆÿÿŸÿÿ< 5Z«?ÿùÕ¿ÿÿþÿÿä?ÿÿüÿÿÿÿÿÿÿÿÿZ¿Úûÿÿýÿÿóÿÿýo‡ÿŠÔ¯ÿÿþÿæÿÿ¿ÿÿ~  *«[ ?ÿýûßÿÿþÿÿÿ?ÿÿüÿÿÿÿÿÿÿÿÿ¨_Îÿÿÿýÿÿ÷ÿÿþÕÿÅÿúÿûÿöÿ÷ÿþ8è U­¦?ÿû÷¯ÿÿ~ÿÿÿÿ?ÿÿüÿÿÿÿÿÿÿÿêô0·Ûïÿÿýÿÿûÿoï{ÿÊÿÏ×ÿþ?ÿùÿÿÿþôB®´R?ÿý¯ÿÿÿþÿÿÿÿ?ÿÿüÿÿÿÿÿÿÿýw`ð[îÿÿÿýÿÿ÷ÿÿÓ«€ûÿýÿüñÿÿþÀú2ÕZâH?ÿýõÿÿÿþÿþÿÿ?ÿÿüÿÿÿÿÿÿÿð*§ð+×ÿÿÿùÿÿ÷ÿÿ»WÀUÿøÿÿÿþÿ‡÷ü¢ÿz¥P"?ÿýûÿÿþþÿÿöÿÿüÿÿÿÿÿÿÿÌ9ðŠÿÿÿýÿÿûÿÿ×ÿÀ]¯¡¿ÿÿÿþpÿÿù€@ ? •Z?ÿý÷ÿÿÿþÿþÆ|ÿÿüÿÿÿÿÿÿþÿ°—ÿÿÿýÿÿ÷ÿÓïÃû}þ¿ÿþÿÿÿÿÿùìk© ÿýûÿÿÿ~ÿþ?Ž}ÿÿüÿÿÿÿÿÿùXþð[ÿÿÿýÿÿóÿÿõ{wßà¿ÿûÿÿ?ÿ¿ã´‹TŠ¥?ÿýëÿÿÿþþ?|ÿÿüÿÿÿÿÿÿáìûПÿÿÿýÿÿûÿÿêµ7«þ¿ÿÿÿÿ?ÿÿÿ…AÍR«e?ÿýßÿwÿ¾ÿþ\ýÿÿüÿÿÿÿÿÿÑXÿÿp[¿ÿÿýÿÿóÿïýj{_ð¿ÿúÿÿ¿ÿï¿Ü€ò³UðÍ?ÿýø×ßßþÿþ\øÿÿüÿÿÿÿÿý`#ÿÿàÿÿÿýïÿ÷ÿý­ýÿÿÿÿÿÿ¿ÿÿû?ô(ýYº¤u?ÿûÃÿÿÿþÿþ· ùÿÿüÿÿÿÿÿê ÿÿpÿÿÿùÿÿ÷ÿÿWGø¿ÿþ¿ÿÿ¿ÿÿ?ëú`¬Õ[¯?ÿù_ÿÿÿþÿþÖ ñÿÿüÿÿÿÿÿõáÿÿàýÿÿýÿÿ÷ÿýö¯~€ÿúÿÿÿßÿþø 4*ª×ÿùÿÿÿÿþÞ©Iáÿÿüÿÿÿÿô[Aÿßÿàûÿÿýÿÿ÷ÿÿ®U~¿ÿþÿÿÿßÿþÿüJ‚*]¯?ÿùÿßÿÿþ?ÏBaÁÿÿüÿÿÿÿÛ­ß¿ÿà?ÿÿÿýÿÿ÷ûóߨ€þÿÿúÿÿÿßÿ¿ÿÿþƒÍEªÕ?ÿûÿÿÿÿÿ¿ÃPƒƒÿÿüÿÿÿÿíTsÿÿÿà?ÿÿÿýÿÿ÷ÿïà?€ÿÿüÿÿÿßÿ¿ÿÿÿ]þ¢ÕKÿ÷ŸÿÿÿŸ¿å±ƒ ÿÿüÿÿÿÿW£÷ÿÿÿà?ÿÿÿýÿÿ÷ÿÿU €Àÿÿþÿÿÿßÿÿþÿÿ `Qªµ?ÿ÷Oÿÿÿw?ñV ÿÿüÿÿÿõXóÿÿà?ÿÿÿýÿÿûûýp€à?ÿþÿÿßÿßÿÿÿü˜=¨µT?ÿñýÿìÿøðÿÿüÿÿÿtÿóùÿÿàŸÿÿÿÿÿÿ÷óïtÀðÿøÿÿÏÿÏþÿö€ DZïÿùÿ¯è¿ÿüNçßÿüÿÿôƒÿ÷ÿÿÿà¿ÿÿÿûÿÿ÷VßàøÿýŸÿÿßÿ÷ÿÿÎ º•W€?ÿýÿÿÿÿÿþ,ÿŸÿüÿÿÀ€ÿãÿÿÿà¿ÿÿÿûÿÿ÷ß`µðüÿÿßÿÿÏÿûþ¿ÿ‰ÅG«€?ÿùÿÿÿþþÿÿ*Ÿÿüÿÿ ~ÿ÷ÿÿÿà?ÿÿÿýÿÿ÷û…Sè<~ÿÿÿÏÿÿÏÿùÿ¿ÿ¶þ¢×€ÿýÿÿÿÿþÿÀ<ÿüÿêÿÿçÿÿÿÈ?ÿÿÿûÿÿ÷´Ž?ÿÿóÿÿÏÿõÿÿûØzYj€?ÿýÿÿÿþþÿÿÀ| ?ÿü÷Ôÿçÿÿÿä@¿ÿÿÿýÿÿõبñ Àùÿÿóÿÿßÿçÿßýn=¬Ô€?ÿùÿÿÿÿ¾ÿÿþÀÿüó.7þû÷ÿÿÿì?ÿÿÿýÿÿòD׿ô€à/ÿÿýÿÿÏÿïÿßÿì€4[?ÿýÿÿÿÿÿÿÿþpÿÿüðÔûÿ¯çÿÿÿÈ?ÿÿÿûÿÿó>bàñ?ÿÿýÿÏÿÏÿÏÿ´AÚ-€ÿýÿÿoïþÿÿÿÿÿüð8çÿ}·ÿÿÿåÿÿÿùÿÿà)ñ6ªðø?ÿÿþ¿ÿÏÿŸÿþQPÜÆ€?ÿýÿÿÿþ¾ÿÿÿÿïÿÿüôÔóþ¾÷ÿÿÿâ ?ÿÿÿûÿú—‹upøü?ÿÿÿ_ÿßÿßîÃÿø€€ó±ÿýÿÿÿÿ¾ÿÿÿÿÿÿüôAÿçï·wÿÿÿâ ÿÿÿùÿô6üu7•¾ÿÿÿÏÿßÿßßÃÿþH€}]€?ÿýþÿÿÿþÿÿÿÿÿÿÿüðÿçÿz§ÿÿÿê?ÿÿÿûÿ€½ùvuÔÞ?€ÿÿÿóÿßÿÏÙíÿù ~ì€?ÿüÿÿÿÿîÿÿÿÿÿÿÿüðÿçú­gÿÿÿêÿÿÿùú+ß{2©çÀÿÿÿóÿßÿðßþÿü@7€ÿþ÷ÿÿÿþÿÿÿÿÿÿÿüûÿÿïõs§ÿÿÿÊÿÿÿû´=þ2ÓgÀàƒÿÿÿýÿ¿ÿÿÿþÿ戻À?ÿþÿÿÿÿüÿÿÿÿÿÿÿüÿÿÿçÿþçÿÿÿÎ ÿÿÿù@çáÿÏ7¨ÛàðAÿÿÿþÿ¿ÿÿìþÿß¡í`ÿÿÿÿÿùÿÿÿÿÿÿÿüÿÿÿïûì·ÿÿÿæÿÿÿûßÿ÷²Q@¼øøÀÿÿÿÿ¿ÿÿôþð€ö°?ÿÿÿÿÿûÿÿÿÿÿÿÿüÿþÿïþëwÿÿÿèÿÿþð|üsÿó»º>|þÿÿÿoÿÿÿï`zè?ÿÿŸÿÿÿóÿÿÿÿÿÿÿüÿÿÿïÿ÷çÿÿÿäÿÿÿÏÑyÿý™U >¾ €ÿÿÿÓÿÿÿŒÿØ ?`?ÿÿçÿÿÿÇÿÿÿÿÿÿÿüÿÿÿïÿß÷ÿÿÿŃÿÿø.ÿ,¼ÿüÝØ°?Þ€ÿÿÿèÿÿÿáÿô€ÿP?ÿÿñÿÿÿÿÿÿÿÿÿÿüÿÿÿïÿïgÿÿÿéáÿÿÁÓøôœ¿ÿ^¨>çˆÀ`ÿÿÿôÿÿÿÿÿÒ´€ÿÿø?ÿÿþÿÿøÿÿÿÿÿÿÿüÿÿßïÿû÷ÿÿÿ×ðÿôŸ‡ÿNþov(>ÿààÿÿÿþÿÿÿÿÿÿø’™@ÿÿÿàÿÿÿƒêÿÿÿÿÿÿÿÿüÿÿ¿ïÿþçÿÿÿÏøÿШþý§oùã¥P~àðÿÿÿþÿÿÿÿÿÿô&ÿÿÿÿÿÿú?ÿÿÿÿÿÿÿÿüÿÿÿïÿÿçÿÿÿÇþÿOã÷ÿÓó'ùí¨ü¸øÿÿøÿÿÿÿÿÿõAƒÿÿÿà ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿïÿÿgÿÿÿÇþø¼¿÷ÿàüüb´æü~@?ÿÿÃÿÿÿÿÿÿ÷ÿÿþ1ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿ÷ÿÿÿƒþÿƒÃøÿ÷ÿðÿÿhù¿@?ÿà?ÿÿÿÿÿýu ÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏÿÿ÷ÿÿ÷Àþ|,?ãÿ÷ÿøÿÿøèø€ Àþÿÿÿÿÿÿ<`?ÿÿôðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿ÷ÿÿê€>¡Wþwÿÿÿü?ÿ€þgÀà$ ÿÿÿÿÿÿÿÀ%ÿÿÿ€‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏÿÿ÷ÿÿõ€?ðÿïÿþ?øØÿ›à"ð‹ÿÿÿÿÿô¼?ÿÿüÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿïÿÿ÷ÿÿú€¡ÿwÿÿÿþ?À àÿüðøÿÿÿÿÿ€\ÿÿÿÀ\ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏÿÿ÷ÿÿü€Ÿøwÿïÿþz$"ÿÿø0üL¿ÿÿÿÿø;ÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿïÿÿïÿÿÿ€ÿ€wÿÿÿÿ €)ÿÿ>€ ÿÿÿÿÿðÿÿÿ€ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏÿÿ÷ÿÿÿðçÿïÿÿAýÃÿÿŸ?.ÿÿÿÿàþÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏÿÿÿÿÿÿ€@÷ÿÿÿÿ (þ£ÿÿ‡ÀÀÿÿÿüÀÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿÿÿÿÿ€ïÿÿÿÿ Š¿ûÿÿ“â)àpÿÿýúÿÿÿÿ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏÿÿÿÿÿü@âïÿïÿÿ àùÿÿÝðCð?ÿð×ÿÿÿøÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿÿÿÿÀàøïÿÿÿÿD%|ýÿÿÞxø‚ ïþú¿ÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿïÿûGøxoÿÿÿÿ ÿüÿÿ^|~[Áÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿÿÿØø<oÿÿÿÿ„%:ÿþý Ÿ"‘ðäÿÿÿôPÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿÿÿ¢ÿžÿÿÿÿ@$ÿþúÏÀ ?À.ø¿ÿÿÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿïÿþÿÿÿÿvÿÿïíçÀ‰_À‡ÿÿÿðaÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏÿÿÿàøGÀ ÿÿ @ªÿÿ¿ýóâðñÿÿýx¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿá‚ÀàÿÿÿÿI›&÷ÿŸüû»øø7ƒÿÿÿàÅÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿÿè_ÿ €ððÿÿÿÿˆªÿÏÞúb|Aüÿÿø?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿ¡ÿðq€¹xÿÿÿþ„A³ÿÿçÿYè¾A~ÿÿÿCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿüþØ€l€< ÿÿÿÿ€ˆÝ?ÿóÿøÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿßÿàùm1>@€ÿûþ„€Mÿÿù¿‹ÿgÀ€?ÿÿÿý¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÇîè€?ÿÿþ”ˆ·ÿþ_ãÿûéÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÏàOüCÎQ€€Àÿþÿ)@ÿÿÿßÿÿüðgÿÿàCÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÁãïØ€èæÿÿ)¶ÿÿÿßÿÿÿxsÿýOÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÜ7þŽ1æ©PäòÿÿÜ TÿÿÿïÿÿÿœyÿƒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÁükøçQˆñx€ÿÿð@ ¯ÿÿÿãÿð>` ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿü ÿöÀæ¬|€< ÿÿüAÿÿÿÿûÿ¾óÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿ ¿ÿ1ÚöÔˆ> P?ÿþ {ÿÿÿýÿ¼ÿÑÀÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿþÿðxôiïºÐ ?ÿðŒÃ«ÿÿýÿ¿þ¯àÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüý ¿ÿ@ˆc|ÿ¿ýÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿñïšÿV¨üD @‚f¿Àÿ_?ûøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿðwÿÿýôŸƒQùÐO€„  #Púÿ÷Áÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿ€oÿü”?ÅéþÀÈÈ ", [ÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøwÿÿþø??ÒÝää‚áUP Cÿó¿·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüðgÿþÿÿ8þÄòó®J4¿þÞëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüðgÿÿÿÿl?¿ï‚ ø€xB‰ €ÿàŠÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÎûßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüðïþÿÿþ™ÿÿÛÝ>€ @¨/ü篫ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþq¡ã§ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüðoÿÿÿþóÿÿÿ @ `ÿ€>?ÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ½âUÞ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøïþÿÿùÿÿýûáP0xè?ü WÿïçÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÏ@2ë_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþïÿ?ÿûÿÿõ¬èÌŒ UÿÀ,?ÿççÿÿÿÿÿÿÿÿÿÿÿÿÿÿþc± UßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúóÿÿöÿÿÝÂȃäà àø ÿÿç÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ—ø.wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüý/ÿÿì?ÿÿöƒ4Dó€òÿÿÿÿ÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿýç„€ ˆÅÛÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþÀïÿØÿÿÿI|€yBÿà$?ÿÿÿï÷ÿôÿÿÿÿÿÿÿÿÿÿÿÿè ·ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüó ÿûÿ~Xÿÿ® >`<üÿÿÿÿï÷ÿÿÈ¿ÿÿÿþ U#_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñÐÿÿþ~ÐÿþþPŽ8ÿ@ÿÿÿÿç÷ÿÿð=ŸÿÿÀ•@»ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøìÿÿÿ~ÿÿü”‚ àÿÿÿÿÿ÷÷ÿÿÿÏßÿàÿÿÿÿÿÿÿþ€VÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüôvÿþþÿþÿÿúIÈÇÿÿÿÿÿÿÿó÷ÿÿÿçßþÿÿÿÿÿÿÿÿÿÿ€«÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüú›ÿÿœÿ¾ÿÿèAæ ÿðÿÿÿÿÿÿýoÿÿÿùïð?ÿÿÿÿÿÿÿÿÿÿý=ûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüý\€ÿìÿÿÿjˆ€xþÿÿÿÿÿÿÿýÿÿÿÿïÃÿÿÿÿÿÿÿÿÿÿÿÿÀ}ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüö§@¿ÿøþ ÿþêA<?ÿÿÿÿÿÿÿÿçÿÿÿýÈÿÿÿÿÿÿÿÿÿÿÿÿüQÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñSÐÿüþ`ÿôª@ÿÿÿÿÿÿÿÿÿÿÿÿþ½àÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüùéà'ÿñÿ@ÿÚŒá?ø?ÿÿÿÿÿÿÿÿÿÿÿÿôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüòTtÿ‡ÿÿ~ê¤(ðýÿÿÿÿÿÿÿÿÿÿÿÿü«¡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüù:8þÿ ÿ®[L þÿÿÿÿÿÿÿÿÿÿÿÿÿ÷øÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ —ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüþ‹þ@ÿü’?€ÿÿÿÿÿÿÿÿÿÿÿÿÿöùoÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ[ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿF‡@üÀÿÜð/ÿÿÿÿÿÿÿÿÿÿÿÿÿß…ÿŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀwÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü÷Ç€€øþõÐ!ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÀ?ÿ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüùÀ©àÏù þ¼èyÿÿÿÿÿÿÿÿÿÿÿÿýûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð­ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüòðØðøÖ?úÄGÿ§ÿÿÿÿÿÿÿÿÿÿÿÿÿçÁÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýxªzüxÿþ?À$ÿÿÿÿÿÿÿÿÿÿÿÿÿüUÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü7ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüö¾E<„þÿà øÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþVÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúŸÿçþÿ€ÿÿÿÿÿÿÿÿÿÿÿÿÿý_ÿÿÿýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüõgÇ Ÿÿÿ£‹ð ÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúÑÀ£Àßÿüh~Ãÿÿÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ®ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýZaXðÿÀ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ†¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüö¥èøø²ü“ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŠÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýÔŠ<†¯@ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüò«M ¡ü¯ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÉÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüýU¯€€?€ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü÷2R€æø_ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüúÕŠpøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñ*  €ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüøÑàÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿâ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüñ~ðÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿúÿÿÿÿóïÿÿÿÿÿÀ¿yBýÝ^?ÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüú€ð'ÿÿÿÿÿÿÿÿÿÿÿÿþ¸?ÿÿÿÿÿÿýÿÿÿÿ÷ïÿÿÿÿf€?yyœ œÿÿÿÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüðþÿÿÿÿÿÿÿÿÿÿÿÿïâ?ÿÿÿÿÿÿûÿÿÿÿãïÿÿÿÿf_þr~c›åÉÛÿÿÿÿòÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüðàÿÿÿÿÿÿÿÿÿÿÿÿý*^?ÿÿÿÿÿÿõÿÿÿÿãïÿÿÿÿFŸÿc^O‹ñãßÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ|ðôÿÿÿÿÿÿÿÿÿÿÿÿ¿ÿ?ÿÿÿÿÿÿÿÿÿÿÿ÷ïÿÿÿÿVß~IGñÏŸÿÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþüò€(ÿÿÿÿÿÿÿÿÿÿÿÿð×þ?ÿÿÿÿÿÿþÿÿÿÿ÷ÏÿÿÿþZ€>Ikñï?ÿÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿý|ðÿÿÿÿÿÿÿÿÿÿÿü×ÿÿ?ÿÿÿÿÿÿþÿÿÿÿÿïÿÿÿÿZŸÿ~OcñÎÿÿÿÿó÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿúüðÿÿÿÿÿÿÿÿÿÿÿþ°ÿÿþ?ÿÿÿÿÿÿûÿÿÿÿÏÿÿÿÿ8¿þ;~æëñÜÿÿÿÿÿù¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüõ?ÿÿÿÿÿÿÿÿÿÿÿàH¿ÿÿÿ?ÿÿÿÿÿÿûÿÿÿÿÿÏÿÿÿþ8Ÿþ9~òáñÁÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷|ðÿÿÿÿÿÿÿÿÿÿÿþcÿÿÿþ?ÿÿÿÿÿÿ÷·ÿÿÿïÏÿÿÿÿ=¿ÿzþøäå×ÿÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿéüÿÿÿÿÿÿÿÿÿÿÿÿüõ?ÿÿÿþÿÿÿÿÿÿýëÿÿÿßßÿÿÿþ|€~z xæ Óßÿÿÿÿû¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿûüÿÿÿÿÿÿÿÿÿÿÿÿüWÿÿÿÿþ?ÿÿÿÿÿÿõïÿÿÿÿÏÿÿÿÿý«~ÿBÿ½Ø?ÿÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿå|ÿÿÿÿÿÿÿÿÿÿÿÿü¿ÿÿÿÿþ?ÿÿÿÿÿÿýÿÿÿÿßßÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿñÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¯üÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿõÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿúïÿÿÿÿÿÿÿÿÿÿÿÿÿÿjüÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþ?ÿÿÿÿÿÿõÿÿÿÿÿßÿÿÿÃŽÿŸÿÿÿÿÿÿÿÿÿÿù¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿV|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿÿÏÿÿÿBGœÿgóðÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿl|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿ÷ÿÿÿÿÿßÿÿþþ{y˜ùX®'ògãà¿ÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÙ|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿ¿Ïÿÿüþú|“ýûøóò`+‡ÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿø²|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿûÿ¼ÿÿ¿ßÿÿùþò|·ýø÷òéH7ÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ.|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿýÿþÿÿÿÏÿÿýþzø·ùøçù©ÈñÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿU|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿýÿÛÿÿßÿÿýþò§ýûÿñ‰šð?ÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿþà|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿõÿûîÿßÿÿùþz·ùûþ?ñºwÿÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿý üÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿõÿïý¿ÿßÿÿùþòs·ùûüÿó:wÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿû)|ÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿþÿÿÿÿÿÿõÿçûÿÿÏÿÿüúòù³ãûùÿóÌs·ÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿ×ð|ÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿþÿÿÿÿÿÿëÿÿûÿßÿÿþPús8IøÏûÌs’¿ÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿÿµA|ÿÿÿÿÿÿÿÿÿÿÿÿúÿÿÿÿþÿÿÿÿÿÿûÿÿÿßÿßÿÿÿŽöþûŒ÷Îû˜?ÿÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿn„|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿûÿÿÿïÿßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿöù|ÿÿÿÿÿÿÿÿÿÿÿÿýßÿÿÿÿþÿÿÿÿÿÿëÿÿÿþÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿï«|ÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿþÿÿÿÿÿÿûÿÿÿöÿßÿÿÿÿÿï¿|‡ÿ /ÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÝÔ`|ÿÿÿÿÿÿÿÿÿÿÿÿùïÿÿÿÿþÿÿÿÿÿÿëÿÿÿ÷ÿÏÿÿÿÿÙè ÿ?gfÿÿÿÿûÿÿÿÿÿÿÿÿÿÿÿÿÿ¶À|ÿÿÿÿÿÿÿÿÿÿÿÿþ÷ÿÿÿÿþÿÿÿÿÿÿûÿÿÿÿÿßÿÿÿÿ™ÉùÉÿÿ~Oîÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿ}ÊÀ|ÿÿÿÿÿÿÿÿÿÿÿÿýÿ?ÿÿÿþÿÿÿÿÿÿëÿÿÿúÿÏÿÿÿÿÜåÿÿϳ?ÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿïûj²|ÿÿÿÿÿÿÿÿÿÿÿÿùÿÿ¾ÿÿþÿÿÿÿÿÿóÿÿÿÿÿÏÿÿÿÿ»Êó˜ÿ>Àÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿý»h|ÿÿÿÿÿÿÿÿÿÿÿÿýÿýçÿþÿÿÿÿÿÿóÿÿÿÿÿïÿÿÿüÈ<¿ÿûÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿwî³²|ÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿ›ÿþÿÿÿÿÿÿÿûÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿ÷ï}v¤|ÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿýÿýÿÿÿÿÿÿÿ÷ÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿýúèÈ|ÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿþÿþÿÿÿÿÿÿÿóÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿ¿öʘ|ÿÿÿÿÿÿÿÿÿÿÿÿýÿÿÿÿÿüÿÿÿÿÿÿÿ÷ÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿ~w© |ÿÿÿÿÿÿÿÿÿÿÿÿùÿÿÿÿþÿÿÿÿÿÿÿçÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿííÙH`|ÿÿÿÿÿÿÿÿÿÿÿÿûÿÿÿÿÿüÿÿÿÿÿÿÿóÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿ½·vÀ|ÿ?ÿÿÿÿÿÿÿÿÿÿõÿÿÿÿÿþÿÿÿÿÿÿÿ÷ÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿÿÿÿ®è!€|ÿ?ÿÿÿÿÿÿÿÿÿÿñÿÿÿÿßþÿÿÿÿÿÿÿçÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿïÿÿÿÿÿÿÿÿÿÿþÙ B|ÿÿÿÿÿÿÿÿÿÿÿóÿÿÿÿÿúÿÿÿÿÿÿÿóÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿÿÝ»E|ÿÿ¿ÿÿÿÿÿÿÿÿûÿÿÿÿçüÿÿÿÿÿÿÿ÷ÿÿÿÿÿ÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÏÿÿÿÿÿÿÿÿÿ÷òï|ÿÿ?ÿÿÿÿÿÿÿÿñÿÿÿÿýúÿÿÿÿÿÿÿóÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿÿb­|ÿ'ÿ?ÿÿÿÿÿÿÿÿûÿÿÿÿùýÿÿÿÿÿÿÿ×ÿÿÿÿÿóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿßÿÿÿÿÿÿÿÿÿîÙZ|ÿqÿ?ÿÿÿÿÿÿÿÿóÿÿÿÿüüÿÿÿÿÿÿÿÇÿÿÿÿê±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿÿÿÿÿÿÿÿÿ·ù€|ÿ8ÿ?ÿÿÿÿÿÿÿÿóÿÿÿÿüøÿÿÿÿÿÿÿçÿÿÿÿ•ùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿÿÿÿÿÿÿÿþûþ±|þ|ÿ9ÿóÿølàwûñÿÿÿÿÿþÿÿÿÿÿÿÿ×ÿþ ®ë©ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿŸÿÿÿÿÿÿÿÿÿîÛæ|ÿ>?9ýóïû–|÷Â>eÿÿÿÿÿÿÿÿÿÿÐß÷¿´¿üÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿý¿µˆ|þ?8¼qÏûÖ­g™7$g£ÿýÿÿÿÿÿÿÿÙ- jÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿ÷uj(|þ8xÃþÄŒcƒ¶~ìâ§ÿÿÿÿÿÿÿÿÿçú¿ÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?ÿÿÿÿÿÿÿÿßß¼`|þÇ9<˜{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿçÿÿÿÿÿÿÿÿ÷öH€|þ?Ž}¢3wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿÿÿÿ¿ýÙ±|ü`fF.]ôSaŠãW›?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿîÿïÀ `|ÿÿÿÿÿøsœÔŽIö«¿ONo9¤÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿÿÿÿÿÿÿÿÿÿÿÿÿÿü?ÿÿÿÿÿÿÿþ½’@À€|ÿÿÿÿÿÿÿþÿÿþòdþAßOùÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿßoúû%|ÿÿÿÿÿÿÿÿÿÿÿýûÿ›ÿç}Oÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿáÿÿÿÿÿÿ{ÿÿï|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ“ßÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÁÿÿÿÿÿÿÿÿÿÿÿÿÿ‡ÿÿÿÿÿÿþÿ×¼L |ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÿÿÿÿÿøÿÿÿÿÿÿÝïtÈ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€Kÿú©ªÿÿÿøÿÿÿÿÿÿÞ÷½ÿñc|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ ‡ÿÿÿÿÿÿ{ß÷ö¢…|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿýªÿÿÿÿè¿ÿÿÿÿÿÿÿþÿßîÈ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþÿ»D|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿvªªªªüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüleptonica-1.70/prog/map1.jpg0000444000175000017500000034664411356212432014032 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ˸"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ïÔ€rqÛŠdyÍ9GËŽzÖ r#4€ey£‚ ÐÒƒéÒ ´œÐ9äô¥ïKÎEØTl¼žÿJx8ëži:LP16äp3Jî(š>ñô Îi3“òð)㙞x•/ç­'Œ ç­ SÉ8 ..ßz1Ç&”r)§\inç­àqNÀÇËH>” ±ž8¦ž´ÜüÙëŽÆlg9¤ þtÇ#c€sÅ €­GLуŒñÖ¶G˜ ØÖ€^ô½Ži3Î1H“Œž´/°æ—#<Ò{P0Îy8£€3IŒŽhàÐN:PI$RÒ‚àôõ rHÍþF”8£¿4àzÑ»'‘ùQ‘ž4c'§å@\EbÏÖŒç9ëC.QFõ w9Á ‚¼P:hïí@ û {Óð)2 ô¤æ‰œg94øÁ\qÅ0åˆõÃmæ“c½9Î(Æ{PI%¹ÉÍ&ry4™àQ,n>_JR8ë@û¸8&p9 Ü)'N 0( s´‚ !àry¥' `t¤ ã=è€h`‘ÇZB0¼šR:Rz^qÀçÞGÍÖœ ïÒ“ž´ÀB@Î)Ý:ô£œt¦ ù²yÅ œæšÌyÔ‡å8Ü)€À0)>SÜRžÁæ—ŽN9¤Ç$ÒHÀãÞ¤Œši ðO œÓHüjBxÀ=)‡ó¦c¯4ÒÜü½ªCî:Ôl0Ý1Å O¯Ö°8§:–Î{PTœÐlyÇëQG Ô§v0i§‘ÇTl0*FàÓIÍ0"'4‡8è)íɦ±íHš£#1^sL8ÍBA¨ÊóV G¶€!ÛNTÍ?m=V“'µ=R¤T§ìç¥fËDb.h«(£T$t cK‘Ó½/Ê}©Ä•Ôs†ÑŒÒ ¨è1NÝëøQÆE ’2iÓšl9 CAÃr)@ÉéMaµˆœ“å@ÀŒ/4Ð œuúS‰ÀÇSïHIÏ¥æŽ9¦ñÜóHWŒZ\ 2{sG$g¿zÅ'šÙ‚(ÉÚr &03L‘3“AnàS¶½© Ý†#´hƒŠ\sHGÑ÷©é÷©¢ž¸'­&ñL)ÀÔ4Zd™¢™š*,]΄©*=i„ õÍ;iÏSŸJQÓ‘[˜à‘Ö´)„e¸õ$6 #p:UkÛ¸¬müéËÜlRÇ'ØU~b úVf¾A³ˆmãíïM-I“²¹ëö`à­À ù`ÜÓÆ¿iýËžOüñjƾÝäüŽG~sN¶•ž/˜±e8;º×K ·8Ö&IØ×þܳù.ïÃ…(×lÀû—?ôÅ«8ŒHÓTâ—±E}aö4ηi·…¸Ïýpoð¦ÿnZÿ\߇ÿ Ï9ša=AÎiû‹ÛÈÒÝ¡' qÿ~ü)F·kƒ•¸ÿ¿þšI1ô¥#Å/b…íÙ¥ý·f6ÜqÿLü)¹hÀ·÷å¿Â³½jVUãæü(ö(=»ìhn˦ۃÇüðoð¤ÕŸ@'Ïýpð¬ÒÎ84€a†zÑìP{vibϲÏÿ~ü(:Õ˜þñíÿ…gchæÀ½ŠnËßÛv‡ œû˜ü)§Ä6*p|à{~áÿ¨œôíUîG C`n´§MF.ESªå$ƒâ ?€­?þ¿øSˆ4õÿ–“~0?øV œ±ä|P@Á'iμ§‹•ÏUá£c}|A`ʬ\0Î|‡ÿ qñŸÝæÇýpð®j6P†.wÆ*A’ùê=),\–à°©­Î€x‹O ròäÓÿ |zþžÀá§88$@ý*çr*Üíœ=*å²40|ã Çq†»0²•mZÐãĸÒÑ;³\ë–G¼ä×»ÿ…/öÕžF ÿ÷áÿ³3žØâŒàc<öÙìQÉíßcKûbÈ’»¦ÿ¿þ«¬Ù÷¦ÿ¿þ”r3ÇZpÈýŠîÙö5?¶¬‚Œ³ÿ\ü)?¶ìˆ ³ÿ\ü+&yÒÁs‚N$þ̳¡1œ×#Qì¾°jÿlY/G›žÞCÿ…'öÕŽGÍ7ýøð¬ð§¨ÆE*8ÉÅ/bŠUßcGûjË?znŸóÁÿƒ¬ÙmûÒß—ÿ Ï H<Γ$¨#ùÑìP{vhfËn—þü?øQýµbÊê<‡ÿ ÏëPÎêÊȯóCG±L^Ý£\ë–_ß›ú`ÿáHÚõ‚žYÿ®/þ€ñË“‚àdöëùÔðÇ·ýceÈ{Qìê?¬>ÆÚë–8åå#·î_ü)ÑëÚ~ì›õÁÿ²A9ëžÔôëÏjNŠÖ$lÿnéçøå?öÅÿ˜úå<™ÿ®þ˜0sŽô„uâ—°] úË4?¶ìOñKœÏÿ \±Úòq×÷/þ›Œ0ëÒªÞ3Ç—•AëœçŸéT¨ù’ñ-t6η`Gß”ŸúàÿáJ5Ë `¼ŸŒ/þ“ÅâVúŠxbr:Ðè¤ ûGZ°$’OûòÿáBë–wï%ãÖÿâk/Ôt g¿zŸb?¬>Æ£k– gÌ~¿óÅÿ‘µ»ÞIh_ü+0qœÓ±•3OØù‡Öc@k¶$ýù@éÌ/þã­Øô?ôÉÿ³@Ü3ÏZ=Ь>Æ‘Öì0¤Jÿ÷åÏô§mXxÇþØ¿øVfìñIœ’´{0x‡ØÒ:͇?¼qúdÿüM/ö͉àK'ýù𬼃œU{4‘å1i%E Š%âZÖÆáÖ´øúÎñ?øRwO8ýëߦÿ ç.$¬…¶‘ž=êèÈÀÉ8õ¦è.ãX–ú¿Ûšy'÷¬1ÿL›ü)\±à‰›þý·øVf9$±ÉéF õ¥ìPþ°ûM¬Ø“3ß÷mþƒXÓøÄÍxÛü+;9àSNìõ¡ÑAõ†h ^ÀñçoÝ·øRÿlØVéÏîÛü+7-‘ÏJBlÒö>aíßc@kZvqçŸÆ6ÿ ±aŽ'8ÿ®mþœr[­T¸y”Ÿ(¹xÅ5BýDñ +ØÖ:݃7úüûloð£ûbÃyà}U¿Â°£¼ß1ÚqódtúU¾½é: ķоu{¯÷Éÿ kjö8ÏŸù)ÿ ¢KãŒIÇ^i{1ýaö/^Ëó†?Ý?áLþÕ²'‰Áÿ€š¥ËsÏçL}ûOÌAö£Ø úÃì^m^Äu¸ìš«e’>Уð?áXe`Fã€9u5b%“vòx#îÓö(!¾†©Õ,Èÿ^?#QVÉå¸ÿ¾MQ%›“Müi{$?lûÆ©fO¯ýòßáH5[2ÖþHßáT1ƒPÎÒMœrsÅ5Eë´j6©hIÄÃöM*j–cþZçþ°Ï»æ$zÕ´G<ŸZ%FÝAbcdjÖóÔø…;ûZÈËoütÿ…d Ž ~U l{}){WÖcfFÖvÛ ·ÐÑYöd›”99ôV2¦“6§RêìïW³Ži¬ óɤRØÍ;Í Ö‚Æ>rÍ(Ýò·æ(cÀÁ 74|ÙÊÖn¶qgFOžŸÎµ@M™ÍdëY6‘íç÷éü꣹3øY™ Y‘—*zŒTè‘™6‚v1Ž•;~.'n¿2îü«µkîLsº.þ”¤çê(®Mƒ§?¥ \ÐN}j…üWNëöv|‘Œ+ƒž§­8«°r±{vÞ¹§ŽzUko5`UŸïŒõ9ã‚„#$˜ìž â³5¨®VÐMj?zCpAÆ 8‘Z{—i`W®0JFU–7Œò¬6·«Ú³6nê触Å< ¹¼É%w6âОýêu^°îcƒÙ»{Ö.“¥K¥-Ñ—hË'–w;‘Õ›óãÖ·$ÄnøŽ5£v–Œ˜kó$´-Â"à|øÈF ­<Ž;wÅfÛ†špAˆî8îy­Æ{˜INTï#ÃÅB1¨ÔG¼ f“ ñBçi®ñ¡ùˆü:×IÍpêÝ(ß´öëëŠg™# Æ›G«… Îç%›ß¥=…{™î–±N»¥,ÛE”XoA &¢yŠ0Tù‰ì;}iC™xŒá{·¨öªw’Ob7Ä#ò·Ä‚Xþ´Ò¹ Ø·g!ämÏú ˜ç€^Ñî× ¨ùÎÑØUØŠMÕÈ=úSa÷€5&Or=©¹ã9¤08 i¤ÍƒGÀL‚@"ëF02iz'¯LSGÝ##¨À=i nÓÞMC“3ãøüéç2‰œóÒž£n qÚ)7JRrN}i§Ûµ&=+ÎqøS2väwëNËR@Æ3w;sÁïMgæœFOAÅÁÔÉ"–ª4WžIäýiOÏ>H^M)É9Æ(7u¦±ÅKÒ£|*JD}O½#7jR{Óƒ@x=ê$ùÞB:*Vá g 5 ª ÿ&˜žâ° нiXóH¸~)ÀSÍ:¬¿ÖñE%™Ä”W=Mκ_ ßíÝÍ)dž)œSNG$uô¬ÎA r1íMêÜjw8Î3GÞÏj/zÖ^¶¥¬¢ñç'ó­P„äñšË×lâÈàLŸÎª?" 2˜‚IÇåM:ñJÃæãíI©5Üy¤q ’:Ÿ]ÃéRzc=*9F&G<òÔª9ëÏJ¸‘Óʶìð¨g`ŒäTvo,ðož?-³€µgoÊ3×4ƒŽçô°º”îÒëÍŒÀÏŽã úgõ«ˆ~cÏ5RþÞIÙDRíNp*–Þ&†Ü+6æùþ´Ý¹P–äÍɤ89ãô£¤#®MADS9‰ªbBŒ~~Õ^ÿL·Ôà_´ I@âHÏÝ?Z³4iqnÑ#=8ÅQÓ&Æwo‰±†#¥-Ý‹„¥tQŽþóFeƒP -©á.è=ëaŠÝZn·™v7ÝqÈ4ù#†h™$PèÝW®k!´9¬¥i4˧„Ÿùdü§Ò‹Xè“§[W¤¿2uµap±¸Vl–b2?ýfŸonì…l1àpÙªZ{9ûNÉ“Œ¢†+VÚúÞñ7A2É߃ÏåYºPjÌSXZD1iòØJÙÀZcùˆÈ#t¥±ßSJðzš6±ˆ­—7Vã÷§ù£vÕùÛ°?:…!c+y­¼0ÈP:|÷VÖP—¸‘"³W´¢¢¬)Ôzn?l²ƒ¸ì_E?.Ô…w:“XçZ¹»ãL²2À–A…©¢OxÅõ;Ç”uò“…úQ~Æë £üWo"K­~Ù_Ê´s0?v1ŸÖµa,𤎛†J“È>• Ð[ ŽÞ|½êfcØ{RÔΤ¡´Þ9À#  Úš§È±…ÐqKÈ?‡ZBÜrGçUª2²(ßZ@î²ÌñÆ™$rÕÄ•$ˆ†q´qŠvÝÕô<ŠÈLSoAZ§&—ó ¶ï§ZMã­HÇnïHþÝi óÓ­;=(æààg­4ÜR¶Tíìhêp;Tˆ 8¦(ÝœàS”|Þô —ªœŽ”× wâ‘òÃ8 gqLÈÝ’ P=©¸î(G-ž” zÓz¨Å9A'šHdymllcÁô5cœsÖ£‘ŠËØŽ}ªçb AKH¼3g {ÕX›–Qäãžîj?)äe3p!ÆarÇæcÁ'úSÔôç¥ 'Ô^BÇji Ø$gê3Í ŒœŠSŒçµ+ƒEo2h¤óg¸aé·nYU‘SÎAÍC-ºM°œü¸úÔK>É–ÞÖÝ™°íÐ/z«&‰M­ËŒ3÷O¼Ódgž!ëÁ⤽ƅÉ<ñJÝ:ÐÌHíJFFqŠ'’x¤#8Í9±Šaàwâ€Î@’j9³ÔÝÏ÷h•Êd.LŒ>P{{ÓaEŒ,z“Þ ‘Nô§ª¾¦ò8Í!Œn´òґБA<£ó ƒÒOJv§š~ïãÚaH ÀE(Ô¤dãÒ˜žæ»‘æ 2ìd}icVÆiÄàrFxè*¾Wd8À9C@–äü•Ï­"ŒšIdHcË7' õ>”Ô”É »!ˆû§¨ hx “ÓŠNN8¤ƒÚŒ±Ô¬Çµ7©'È43m½03µ&• .™òó’8ÏÐT,|­B)ÊíŽA†8$ŒûýkJò¹¶xI#v>ï^+$8{-Žra9 8$tÎ{÷©êR-\M1ó>b¡GÝ^§yÿ ·ebTf,BòMQÞ%·IÅ>pÝI–ÎgÜÑÈà$`ç¿^é\°›UœY×Ršt#8«ˆ„#{Ö]Ög;™!V¶›¯™Çæ*ð˜¶DHO¹àQå3æ3ÿ ñ]–9aVpøYŒn5}4í|j¯_¾Y¶×`¼s 7ÙŸû’ ô5p^[E+¡m»>÷ËýjµèÓ®ÔÇñÀýiÃ*9äÒžß=T“š^H#»šxÏ~i’7b1Î(ƒð9ï@ÜO=;QŒÆ—Ž´XcNÐ0zÒïT$`u¨¤—Ë8ê碊ÌO˜ç8ì)è!yŽ>ìGŸBh’^$—‘ÏZ°søÓA4\,5$.W·ô¥PNqÅDêbs"/ïS6prqH„ƒŽiG'àR …Áõ àœ(¤1Ì=¸ÅE4M*mÙ =W©ÿ ”à{Ò;ô4Ó®TŠæ!BÛ¼ŒäûÕ’NIã¨ò‘Tn§iņ1ÔÓ8Çâi¿ Z-D’;Ò`äsjrÊÅ0ìAÌ{Iè1çŽ0j9_ÊRO_Js°Ž=íŒb¢D,CÈ>oOJÅEa’Çs‘ÉôúS‚çõ N)›±ÖƱ²éCœEgPÌG¥7‘ƒÖž yæšsh3Ï ¤p0SN⛃Îi¥V2W†à­§–€sŽM4óƒµ?SRm9 Š5´€@.ÍŽø§çŠ Æ£©Ç4{P!SLçŠv ÒAÒH)§˜'´ÏE-Ÿ3ûQ\óz”—ºzùq€) Û×éK¸c¯4  Ô9#ß4ï”ç“LRGɧF}è 3“Yšî Œ|ÿËdÇçZXÉ*{Vf¸1eãýrcõªŽèÎ 2óœçéHÇÍ O™ŒÒcàƒ]Çœ=Î*';gŒö'iþŸ­J;FsM”G^äp}(E;œÈ‹ÁT±QßûúÕwÔ®&…Þ%‰9À@Ä™>œÖ¢"‡Àϵc¤)¡4Sª¼s¶ÐÄŒò9ëŒÔ5grù®•Í[Vf·B]dãïŽüÔÿ¿¥gi’¥{Iex\‚?¥i¸áAâ¨BðzF9Å‚äãêj&¸ýX.ÃŽ8ñ W$oʨˆmm¤.o?V5`¤ŽzûWÑ;þ4ñ…"0ÌSz™’I,îXa<1äãéV4ûd[päÌʼnnüš{ZyJY]Žß\sKbpÊIÀc‚{÷þµÃJœã^R—S²¤ã**1,‘ǯœ.8Ï­( Ž€v¤#æ$WqÈ»ÿ³ wv‘ÝËzú¶¥Y[H“oʼ}ÿÏÿ¼@Í8œ“Ç>¢›”º Ev*½¼h®è¤;œóíUVµ’VT¬Û†_æ­™·Èð„,n,JÇíí^v6¼á(Ê,ôpT)ÍJ.£¤Ã*ÊÍè;PÈà†CÐüÀqÅg­Ü©íSÅvÈ Î ®>øþ´PÇ)»OFN#8k‹£*9Á£$v eȤ°QOqíSvè-Ž ¯#ž*Ôƒä¡5eÎÅ%›åïTYŒŽ[}«›US¤Îœ>z‹°…_ç@áp>”9Œ^õó«]ô³³#‘VNÃ#¡=AúÒí;r$—=OÎjN6“šfã»âª3’¢ÉpŒ÷@·ùV=i§8ëšvÒÛ Q‚¤ ''{–)h„¶vµº6ëëW#žãv *x"©µ°)>u‘¤M™#Žq^… cŽ“Øóñ8;ûÑÜÓ …s¹I†‘xb{Õ’ñn]Ë•aèpkRÞ@ñ)WÜÁ'¯å^ Dk}l4¨Úä ã® @ì[4HöÍöòÄ`pNqŽk À—'¸¤e${Ó‡~õαŖý:ÐrÁôŽ2=©ÁíHTҰdž'å5RþšUù€9dÎ7J² ôÈǨ¦“€I4Ó°­}ÊVȶŽòMåB%ÀXTð1ýjãmÚX° Ö –Ùn.VÈ*6ãUHî¼û‘n aœ}=j¬¤Eùw/)2¸‘†}ÁýjlƒÀëMúÚ‘~èö¨fŽ„ži{œÐsž˜¦±äÓ€CÁëÅ4ãR  ¯Ðx¤#JAÆhê÷ c;žx¦JDhHëÓñ4üö÷¨²d˜·ð¨ýh± ˆ÷§g=(ÃzFáN;TŒbçqÍþ´¬áAéqAHŒ©Ò™&}ªR3Ó󨘃œE ¸Ã÷zb«Ì…ä{g&§ßòóÏ5lÊÇÓŠqG¿LÒ6J{}ÁÆ*> ]A'<-*ŠB1Ò &$úQÒšÇhÉ<})Ë‚¹9ý*b‹V?ëñE7MuûK.ãŸÐÑ\“—¼wRIÄô€[Ž{R޹4Ý­‚}isŽÝkQ†M7wÐÒ€p~oÂ÷O  ¤‘Yšù&Êùl¿Ö´ÉP:Vn¹ÍŒXòÝ?TV¨Î[3%†óOJhL9$“šp#jîgœ&ÞJ$JøùIâ›æ Ø==¨° A²ic'ù—Þ©jñ!c0 ÉüªKBÝ$‰w†”7$w©fŽYã*ï°‚¯·45qEŠksr¨îù±›š”É#‘0¿Þoðª–éa·yci ùG$€~µ 2qÏNô ŒB¬¹v/õ➘Ú@@Èê8.zQp8ÎÒšÙ ñJIšpM ‘I·Ž8µH#‚ <õ¤H,9ÁÅ!¨¿¥9‡œéLayÆj î G2ÄõçµOžËš«yëƒÈÇëÿë¬«ÉÆ›qÜÖ„ê%-ŠÎƒvåm­Ž§#@çâ„9ôúRàŽßJùÙÔ”•›>‚ã…j" VÉÐÜäŽGJ~ õ¡AÙƒùÔÞölÑé¨Åym‡™ÆÈ"´’Q,I Ï?¥T¶µŠXC±,Jà©éžõbÝ$òd•äœÿŸå^öœá·£< ]HN~â± ÐbÄ;ü d €ëÁ –âU’}2qéþOèj6Æ9È>¢¸1ê\÷[Ž^ÓƒµBô`G ’ÄúŠÈ4п?#ñ¯9þ¢#8?¥Œ.àG¦iÅH<H~`{zS¿Ú×PIVU;XcØÿ:Eܧnyþu ÃìÎ.WȽ¬†eyï‘Þž‹a'­„a¸ôäuÍ 9çjPwtïÞ€£v +i¨ýHÉ8ÏúÓ¼²~pìŒz•<šÎ:v¦4Å8È$œJ¨s6¹w&¢S…åІê70H¢æefFÕ¹Uk›k›{Fšê[ˆÑTЖ÷íÎqÏ¥]f‰C %`{áwô«®o-"²D2„±ù˜qùWµ†Œãñ³ÆÅN›IÓ‘<‚æ%hT—À§ÐÕƒ_™Îæõ=Ò±-þÓ¦ë+må4Ì΃­oÀç¥v#‰®¤apr $Ó¹r}ixâ€yý)€›‰SN8攡}¹ëNÏáHby`/ZO”sÅ8…£¸Ó¿)9tæ“oÍÏ#µuçšP~\z àñ«&àõ÷¨Ñ¶8GèxCý*MÜ â†Ee!†UºÐ‰}Ç´“øb€yȨÆ7òå=xGõö5`0íùScNãv‚à ñÏ·½8’H`ŸÖ«Ë311!ÚÝ … æo1Ê)!Aù˜åMž60²Ââ7ÇP:ûõéê‚4òÕqíNìGSCzŠ×Üηߧ@ææV’IQdÕø&Ib‡r7 ŠG…$7Ž´¡Dh4WŒ m¦…aØúR2ãÒ—y$ ¼Ðçå'*Jž¹¥lm¤ôÁúÐÝz@ ”×8#žWŒŠi'4 ŠGÙ#©à{“Im@½xäÒ¬› ü‰ÀúÓöä’¥ 8ƒÎ@¤çÒ“ t<µ 5—ÈÎi;g÷‹¢6¦I¡gŠBB¹Ýèx§fÈWu¸œ ÓG<xgéPÝ[´ÞW ˜É8?•S m•B¬¤[9çµKвûazôqÚ¡„mŒÉnj­íÔÖÐF¡|×qó’;qýH©òùU¶•:c¥““€FsMå¤ÞŽ>R§'ŽzÐrÇdh\ú-&ÒÕ†¢r "u9Õ9ÊÛ½1ŽiW¯LTÝ=PõD±ÉäÊ’Üj—Ì‘—î±éM Í5WoV|žõÊçv±¥a{wàÏ_J*=<´€>î9W$é¾mÏB”ãÊ´;àp=…7wÆ)ª{b”6ON+ppzP à®:Ò)äJs»' ‡Ô VnµÿHr?×!ÇçZ[²0x¬yöØFpI§½\5iÏáfnq×ŽÔÆxÑrÍŒpO¥@ð¼…¤ÆÕm§ôõ¤KS¸³Žç©Éæ»ì‘æÝ’y¯)ÄqåGGoð¤0o#ÌrÝñœV‚i¤Ôâ•ÂÆeÌ1ß–-§;S|Qüªü8òöÊœuê;eä>u›.ÆJ’»¹öµ^ÊBÑÇ#­€Œ¤coaÁ¡vK—T"»ÈÞ{âžÁàóéMÀÚ}ÿ:ãŠÂ®}iFrGJ 4s´jC dc>ôîž})qÀ擯Aï@Ç8 GaÇ4ÐÛHãó¥' šVÜ:}ix€i‡…àö¥ã¨ü)ØóÓƒëPÏJŸ.^yïSîù~‡¥F3“ØZM&¬Æ›Z£<‡n0sŽ´7¥Muµ6»nã§zˆ´çÞ¼ ]eSM™ôjÞÖ õê86GAŒ`ÓTüØÆi«ÜŠpÆ$W-•Ε¦ˆ–ͶLÑÁÌ€Ž½yëˈ㠙”t½j¹bYYq¹NyÍ+ÌK ñF„ào9ÅzØlRT¹[Ôñ±8Vª]+¢§”'Ød1þéçúÔ¡‹ .öþ• ¼n—uˆí€©c}üžF?*ÃêYuGNCu¤‡« ñùQ -ÈS6ýÓÆ}iæO—Ò¸CкL6uÇqëL<3N@ãpsFîÝzÑ×Pµž¢8,S‘ŽA¨mKFÏ Î§ØÕœõgŠ¡p^Lª>W]¥€ÉR:~Ó¼¬D®^'Çõ¥f ¹ZÌŠT·”+—À ݸgÔ~U¡Ý¤ì)É8« ŒÓØTŒv¨î#XdõP)­33”„wÇž±ÎÑ’Ãï7SI{­Ië£Ødq‰wãpUÇóâ¯Xö²(}üÜ:œU7áá¾}¿CŠ|ŒK[ÞS`ݽ,<ä¿xÞ爦ŸîÖÈ×VÉÎyõÆ3JTséMÕ‚°èÜóOv+Õ]Ï*Íh3ñÅ)lq“Ÿ\SInjóíŸZb Ù4ÚrQ¼sL •Èõ  H NJa@9£rçÏZ¨zлœÑž^´œìëB/ g€@$ðz Qó~©¬4¡ˆÅ6HC¡ Òy 9…öHK!û¯ÐÔÄwsÍ2VUk †à/÷©¯1?!Ò>ªÞžÔØã(„uþñõ5 A­wbêO-×`ÿ µT‘ÓÚ€@qœç&›ŒƒŠ ;²)2Ùõ cÉØËÍ 99¤ †àõ¥Ž‚ ä>zR;d`zÓÎ;k*šk.F{ûPT¸£w ¤ãð °À¨&}‘œu<ëR»„ŒÈÄ$žÂªE*Ü0™[(§ Ç~ÿáøPˆ¡cÇqJÚ0x§c8¤ÝØsHc x¤Ú@æ”uïHNNi °Ç0ÃØÏz­%ˆBÛïzÕâsƒU§¸†UwÃ?ÝÍ;ØV¹^GšÖÝÌŒIÎ{REtÎv•çw8Éãüô«[•È}¾b¸løÔ’ÜBáKZeÐŽžŸZÊ­iEZ1¹P‚{²“•#‘ÆG@?ÏéL–æjlò «™´ 0…ø#zÕ5·1LíÁ§µMº‰ó+QrìÊÇNóÌÆ}*[{[ZPbÁf,ÜÔmÑ>w1Ï'õ 3H]¢Ju)'6(M§th4fæ9Xç ÌGªhç«)8-ÔU:ìJ^-²ü‡aÇJºð¤‘”û¹î¢¼ØÖöq¾‡l©ûeÍc4œPž)ÏŠSäúÞ‘#vVe…ëë]êq”TÎ>F‹v™ý襰ùnAäw¢³žçe„î¹ÈÅ< µ vÅæÒ4¸˜ WÓ½ŸJAÎM7ºÐ!Äç§"³5ÐÂÊ2ü¶JÒƒŽ+7]'ì1Žæuþ´ãº& 2³ó­!Ú—=}é3‚+Ðg˜±É¤'9X„T>uÈŒ©“¯ ÷Ô²O\‚9Ǥ9 ò®}«Â¯©ÎÜYîÑÁÓäN[ŽI®TßÿysAÕ [Èò'1¶\ŸÄúSwÇå<öÍR¸¹XÜÇl‰%ÔŸ.Ñ‚»•,]X½XVÁÒ–©X°×³Hð®X¬Äª:é‘Wm®]·G#p2 +3O´kX€–EvÆ €9ÏZÂÞbR–8š×‰›­ÊÞ†U°ÐT›KSOž@â”wÎM40a»<‡Ö™¢eܹÆqƒ^˵ô<‚;¨ŒŽ0ç¿ÍÒ«dqæ!\ô'‘Zðp>´Ée…ccý±Åaˆ¡ «Þ7¡^Tž…6m¤ÿ’)ÉÊfq…”'qÆÒ:T@á½xxŠ“µÏsYWÖ–SØZG„`r 9Žåô4н‰ãάµêo~¤Mlb›•Ž95¡ÃËÈÆp£©<òjà  R™ SÇ"A'ú×BªÜ9Æ3£5P¾ì®˜^½ý©0ØÀ fœÀíÇOZLqŒV }”lµÐùºsŽ¦Û‡Òƒó7ÌsFÅç>Ô0I sN?pn´ŽqÀ•1¥Ùû´œôQýhµõ»²µÂ‘ŠìòÎr1Êû­Pgû2+ XÀÇç ú×Hyß! ýG úT&$vks$mƒ3ÈÏQøÖПCC[Ä·QÀù:z\–ëϽC‘Ê»#aÇðú{b§*¥e+&Ñ´vµÆm<‘’;ÓãK˜Ç¸ÎÜc·ZŠk¤‰pKÔªŒœQku—HDX¿Êq[áîæ®a]Þ›¹´ (àþµ.1Å1!CmQŽGLzT&&sE÷{®•N¼ŠN#ñ dI"º=½ çê(’=çr²c­6)ˆýÜ«µ‡ä~” .Û“¼jLíÎy  ‚ éÈç¦i pa€H¡ÁÚ1ÞŒ`ri P2w`æ“•>´dþt™Ú}h ‘]Ɠۘ˜gyÆ;­Q³Yóo‡ï98ã<Àþ&´÷“3žáÆ’á!r™-— V-B6 $ýÙ' Ÿâ럧5hº‡#wÍ×ojÊûU«Iž5VRFGs‘íìMO6™w;›Ø †mäp=‡>ùúÖ3­-KŒ%'d\fgrˆŒì?…zÔ~h#ÔŒäzb§³¹û,f9­üµ 0ãíç¾IñVˆ²½ÉÀb Æ;ô5Âó¦Õ´;>§x§s-‰æR§n쟅V¸·IKi#ò ^º•.$C2¢ d÷±P`ç yÿ?ã]´ÜªBòG$­ Y´û¶âyjv„S“Á<œœu§JòÛ ”î8l‚?Î*õ•´QÛŠ +eþl铟ÀÕ»Ï9ͳH$*vôêzg?yüõ½¯*ÙV¥ìïmJÖ×Ñä÷+ŽjÚ”R{ƒP¤ +<ŽƒvJƒíš’(#‰v u¯Sc½¸¤ŽV†Mê0T¶(Ü%[õÇ>ÈÔ´¥ &ã© ¿hÈPÙßi«PÝC+®A=ˆÅfáÙ€U$ž‚”Še2)B§85É[ JWîtB¼âY½b×@QòûÔö›?¾GZŽòX%‰Y\Œu$,Êîå@î g9Qåkb®£RýÍ¡Xo”®~`N C*Ïx›pQ‚qE*|Ê*æÍ«èvÝœbÈù³žÔ`0ã1[ FÜpE&ïQŠvA=ý(8)€Þ7g°¬Ít±FOü÷OçZ…òÃÞ²uÜ‹(ÉÇúôÀüéÇtDߺÌͼ OlÒg IéÚŒŽƒ¿<×q拟›Þ‘ÔœRœg“IÔtï@1ëš-ž´ƒ­/ “Í0(ÜÛÌþc±: u±¦ÚC,¢9p#\“‚zþ x8Ç“t$IÏâ+aá9ó½Í–"¤aÈž‚O/’Ô žHÎ T¸—ÌeÚ59=sRLJç#–þ‚ªù„JrDjÜ2¯é\u13•^HìuC GÚ4NXeyÉÇSHISÓ§qLŽD–B¨à޼ðiìrÁüx¯&¬:3×£8Ê)ÄÍ [R‘|×S¹daÇQÈ©4„ˆX)TaÈr,rzÔWÛö7“vÖOÌ@÷©4ÝÐJö3 ÌŒ¤ŸÖ®_†qøýâîþGËéO*ßåïI´ Ò•FAè~¦°MÙ3¡«êF ívMÜðäU‹>[ÂY‹©ÎOÕ®8#9õ¤‘7mb9ÁÆ+«Š•)ëª91XTV‚Ô½$¢Ë7ëÞªHâ}åàô¨ÎXüò;Ù±ùÓ†ñ×>¾•¾+ι`g†ÁFÜõaµˆ˜° Ý©øÀæ±ãiëK’G?yîNz¶v¨¨«¥aWéÒ˜T–ö4àpyϱ¤cÁÁçÐR*ïKÒ ŒZ@Ë¿‘Ó¦i€’0yü)ààŒôê)ÚÛ‡‘Z'漈ҥ+‚­[`ç=ê½Ä×ÌQ†9@ÿ8¢ÒàÍ,Wpàž¼÷Ï¥S\˘„ÞÌ“Ó VÈÉß…îOaM‘–?™‰Éè1Ö“cN¹›î‘ŽŸ-õ-½}Ñ7´ã÷c Ÿ¾ÔäEˆaAç©ÏZzœqFÜ“Ci 1Kp#pÜ2HàÒª¿×4)ääþzM®;_FG41»d¢ð~òðEDÑÜ*“«)é½rGåVˆ,zö¤JŒò)©v»Ã…æbÄäœàÔ¡{òyõæ‰;tèiËÐqCzܾTµöà³ü¤c žjü,Í4˜,WœzÕEo•²Àž*{Lƒø_ƒœ×£—ÔJ\¬ó3:z)$¬X!·ppiÀ‘Ãcu¤#œgu¡±ŽrkØ™ç¥_LìV ©=jF@x¨<Ì¿â}* 5¼ùþÐÛ”ŒŒvÿëcm+hf®ž¥¢Äwhà÷ɤüAü(y5€¼uõ¥ã>ÔŒ23G8Å0øzóQ3 ƒ‚?t?SIÌ¯å¯ üMý)Û`;PN¬~Ì´sÜÑœv¥ÎÀ1œ?=…ÈcIÁ'<p9=O'¥#.x¤HÈÉéL(¬¸a‘ÛÚ¥%qŠŒç b°ÅóaÎ~túò)ÁèÚÙ¢”e[¯ZkD¬ÛìqÜt?Z•ÚH'ÆÎ09úT~k¶a°öl|¦¥ ã<Š\in"£‘°œu±ÆñD×W-||˜#˺AϹöÿëÓ®-–ÄIsÓq1Uf`NqÞ¢†³K#-•ÚlT,ÒK6šY?º9ú}+w„÷’û+¯s/¬>[udaJ"FI,8éíI¿v~µ,‹"È»–H[©Õ]¹’Iä“ɯBOázr´hBˆÃæ@ÕNI¡7I`Jäž:Üþuhž™÷ªbÙšä²±(_w–«’x«nÊâµô-d)?Ê™·“Ï>µWeà·|8ÞPs“ŒóøÓD÷‘Í ՆѸôÉ>Ÿ¥%mÑV±z(ËÃp«óŽ*‡zŽ×XDB¶~ðê;‰Þ)#Œ.íÄœœÖ1‹Œ›èÊ”“ŠD‡$ü§t4¡K6æb[¡&¢i¶»)J°ß4ä• ²——µkdõ±dØÁÎ?J8aÓ‘Q›ˆÃæ/ÍÓšsI·?0Ò`®jX$ «oýᨢ Ó˜=ÖWû+†¥9shÏB”—.¨ïØcœÒàÅ€QÅã9«(FãœPHô4€œ÷ Òã9àó@Åà Ê׆m"ã?¾_ëZ¸@@ÍfkØûc·ž•pø‘øYŽF SØÒƒœqëNOCHzã¨5Úy‚ðyÁ#Þ‚GÐ;Ôlü¨ã·ZQ—\Mäö§÷â€À¨n‰án‡°"¦'·zd‹¾2½ )]§a«_]ŒÔ“tYžãÐÐñ£•,¸+È4’!†ç,§kðp8$ЏÎ~˜æ¾n¤*F£º>’œ©ºjÏÝWÔž¬zšxô'µD×1F»dr¬z¦Ÿ·‘ÈÇ·5œ¹›÷)òZÔÖ…{ï";Gy÷2¯?/_ üê+HdšàÜäš¼è`€ÊF=ªÙ«‘ÔðÇݲ? Ž*£5b'ÚiÆÜuÍ!*‡g>ÕNÒi–á­n4€eÿõúÕ‹©b·ˆË)ÀsêIÀ¨åjVfœÉn8žàcñéJp@ ÿŸ­gÃd/Íx$,ìJǼ€«Ø?Ï4¿Ù6ža&ÚÝÞØþu\±Ù³>iµ¢%›Q·…ön2HzGÜÕj c͵¹±ÐÆOòÍY‚ÚFØaXÁê@äÔÙÚp×sG¢¥ºÜ¤—ÒHvÚÛI!Ç%ÆÀ¿\Òª e­çîüÜ~4ûÉ.!´žK`Za×®[¤Jd¹SSÝÉ!_µÜNJªû}=\R°œ]ìÙ°nîMçjH‡*[¶GQV— Ó8ôÏ5SVÿsck)Î;‚=?´l©>zŠ–®´*»‹b“Œ`õ=([±íK˜îzÓY”ç >µ­‡Ù¿j‘U‚r`?òОƒÞ¦>lüV?SÁj˜DŠ¡BŒwÿëÓ¿.ä4›¹"òìÛÙ¿×éOUõÏÔThRñ”`H9è~•& ÁÏ^Ô;ìTuVbœçíŠQÓñ£8<z‚œ·=¹©AB`}êR0¹'šGåˆRzÐû•æ(bO$qI´–<ûÐJŽ8à¡çŸaEí°úè ׯ4Ýà?cæ+SöSq£'^êݧˆÆ ê« ä` @Fîù­îÑ“W)C$v¶ÆFv–n€_AVòí“Ò™,0Êê^ ̼«œ¯/‚{‹‘ƒòă¯õÍ=ÉÕɘ’#SƒüGû´ÒD_+çféëéKlN$õoZ^¥7}‡*„\ëJ½x£.:S†(§'·z g43ØãëM—‚3èi w`E5ƒõ£‘ØšnÀíëLW˜óJ€N)IøÅ!À=;gšC»ý)Ž”pBœóH¼riˆR ŒAìj# Ä-€€ò KÈÆÉ¤ë“œqÍʲϷ÷D‘ˆO\ÔÊ:(ì:úÔ{V|¹@WP{Ryo-cý“È4݉WµËpj)•@ék>î[è§I‚n‰„6Ú«°H%…YŠç€{õÀ¡ÆÊঞ„oQÇÂü«ŒãŽŸÏ­Y[_Ü™ggŠ02ª¸Ó%HaÁ#ÉßašRûpÏS\õc)i?ÈÖŒo}{ðŒ~ìÈÙÉ?p{ÕŸ±É‘-àfŒ’9>øÿ ¬^(ò·HçžÏ‚? šÖÚ+‹5u ‚°2}8®\EG˽’üNŠ1×U{“ÜÛ\JbmÑÛ†ñŸ\Õ&FŽB’¨W^NÞ· ùsÏ>µ©/Pe‰uÁ ôÅsàñ2rä{bhÅG™Ý€o,HôZµijÖÖÌò­ÙGnµFp L­Ñ¸Ï§oëZ)3G¦«:³UxëéšëÆJJ*ÌçÃ%­ÌÐO–¾ã&œtàýiÁEèjnsØcÖº¡ð$`÷¹’2{`g­Dñ¤Œ7ÇÊò RJÊ€sƒœŒœf’yüéÄ©‹‘†$qS9ò´˜ã«‘yq“¸ªõÝQ-¼e¤œIëRºù¥”¦äQ“Î*KH­GÈï"Jǧ%pŠ“v* =(Ós¹äŒ“OûK½·1Ž;ÖºXâë$—1= T’?*SàÝúVÄF£åF®œ¡«/YXÛÅ(š. äÑNÓdr̬û±Ð+Šjp“W= m8èwÀÁ O¸ËsŠUSø•ÖEÆ–ã4¡¸ÆiÍŒôæ›»ühƒ¯JË×1×t5ªG=G—® ØÅê&_ëU‰/…˜ä玟…*ço?…;nO^he9Èè+¿sÌ£Œ·zàÑ—9ⓜu¡€dÈéKŒœŽZFPØçš^Ô€RÉ8¤#8â‚™B*GeFöP=Í'n µÐdñ%ÄLŒxÇ\ô¬°°9Ú8d8faÆ®MqÆV7äðHíUJ%¨ÃŠó±¸˜ÇÝŽ¬ôpxw/z[vå Á* ƒžsP½©Œ‰-äd+ÑOCV‹d{JpN3^3œž²gµÊš¾Åq%ÉàÀ‡þÚRyÒ¡ËÛHulƒŠ³…öüèoºxö]_aYô+ÍoÔjÇ;ÇÜtlë‚*°HòGæÞÉ,HÛÂ2ŒäzœsR¨ò`ä¹éýÓV?Ý*»¸«"ySÓ¨å$Ð1ƒ¨ã$Sñ¸r¼Y·}Y}.ÄR1) rsÎ}iꪧ"‘Ô‘ÉíOÈzƒÇpxæ¨j÷7pX³ÀñE©2O!ÿV u¹=ªþ pyRÀÑLŠèãi¦=éÆInM´²0|/róÙ´r´×³$“H>EÏ!sÜã´Z&Ó¤A½»ÞD9Ú{þêßoK-6(í¡U§ aG¢¯¯ƬCuºCkÛ¥‰T»Ÿ|óïÓ•lÛ~ñ›Šµï¨è¯c¸@bbû¿„G×Òœ¶äÊ$”†eè@­V›O æâÐùwÎIâOPÔñ¨2`]A4ýâ2Ÿ÷×ÿZ“ï‚îþñ.HÍ!˜€8¡~eÎìƒÈ4y÷¬-«FŠÛÃî Kp±·ÞÆsëRSæãµFcf nþß?áT¶Ôêǧ|޾´lÜpx¦¯)’§pìx©ôëG ï}€àŒuÅ#œsIü} §Ç"“i1ìÄØIëB瑚çŽô‡paƒÇJ¾ŒvèÀ’¬ 9Nô (È×´Šû_? Om>ÄŠ1ÐãØR uïšG-žOÞàQ¦ì¹[qqÉ^r§KíªÂa€ÆñÊš‹…> R2†CïŸå]T13¤ôØãÄá£[V"ÀonôÇ<óéUìÎl£Èår¼úа9¾‚2¼S>zQ哈¸H-äP­æ± Ê ƒOòíÕ—ý Ø`ûÌæ¹jNW¼Q´#T¤ÍKź·4±±õSÅTº¸€Ý®™Æ M†Ù/%dkY-ü°!‡?¥Cq§D—†ÂÇN~¼W-¯kvtÖ»ò.Øçí(Gz(²#í(ü¨®šÉs ùO@S‚}è%€Àý)x©1ÁÉÁ¢ÆƒK1íJzðx§0>n”Θþ§hÏ<Öf¶Ø£#Ÿß/õ­LŒñɬ½x•´‡Ðο֪& 2º¶h9aBà9äSˆ=»u®ý0ŒôÆ(Û†¨4ìϘ=sÒ¿J2þt2;ç­&CWœpy¦»\ݘ¥hæM£³)ÝúT2Ê'˜/€8$ÔóÇŒ»ŸÞ#©PHŒ7#—þï#ë\8¥Y§Ê´;pŠ2ç`Ãcô2‡\0Îêzþ)ªÃ< ðþh÷ÓMhC)˜˜ËÐûSÎCÞ’hÛpq÷—Ÿ¯µ<2²«Á曶᳆ð9Æ=hVÀÆ9"”ÍÀ4 ` çŠ^£·FC"+ÆQ‡u=½*1ö¿lpà³>«'ƒ¸síIœŽœU)%}V„vò<ñŸ3å6iÄ´jr ¯¨Ôe ø$.=jk°!3îi´“%I%æ;ÌŒÁÆÇ^¿çŠ„jVÌì™' uÉÅT†ÝYR9åŽ>zƒüÅL–$*ªE (àËþÅW$z™ÞMjYŽî9[ÈåÝô¤gTO›?­e¼l’ÝÖ…9`tïÚ¤ŠñQÛí9,Hù±¸sIRªÒw'_Þ²ÈÝÜÿ›hzUu¼…æ’%|²N:Tä–_ë]¬ä‹VÇ< P„¨$þªÓÅ Éö¢Ö¤–ŠÒY‹ bû1œœc¯ãL´¼.¤Ë’‰Ñ‰ã¯O­]QUî¬Öí³”=ˆýj“MY’âïtZÇËœç<ÓT±Îzc¯¥‰H‘” íJ;½EIJýJ¦|\2,LȧùáMY;HëÆ2­V»±Šå’’¾08ȪP ëmš­Áùóžß†(®1õ¦õút¨^ê»û6üLvÐ>½ÿ ”ý8¤Õp:Ž)›Žü©ßw¨ç‚Ìp4°ÉX€v\žjô|Óíʈ¡ê9ù±ôíU4øÚkôšHdòÎ@ ½=ënâám­åžbJ É¯3‹•6¡M˜\2—½!Á(Ò$ ÐRasïQÛ]Çy›ùNzã±ÇcO#ð3í^,“nòÜôÕ–ˆIYÒÚ»°2ûÕ„-îÏÙFÂûw .}ë}IõÅ#@­ðø™Q½ŒëQMÌ)¢– $ª<Ssü«"ò&µqq ð§%8½ë¯–ž'ÆwÿUa0ÊüÜŸºr=?¥{\ªÝHó1xu ˆb™n"‹ƒ·$Uû;kw·ILjÒwb2Aô¬äµŽf\åà?*z³#–ŽGFöéùVøšN¬mc<<Ô¼®m4I ¨?AšÏ¼’;WQ}ÝH ÀŽj´¯<˜ó'vƒå¥A*„„’ÃK/iÞ£¹ÑS¾Â°%ÝùŒÑmlœŽ Nº¤Ñmk‹s±GÎÊsLT€N¡À'ž†ºå†¤ô±‚­4÷$—V¶hXF_ynR VvUc°,'?­X8ÆBñÆNZ58èiÒÕÔVâYMÞCî m•*1Só` æ¡bIàýy¥Gœ‘Ééµ±üª6‹‘#¨Ilÿ:¨Räê)Ï› ¹äóíÍYÓ‘ZFc̼n'Š¢ˆÊ\nã"œé•'UFûÙ^´«Òs‡,J¥8ÅÝ›ŒIàÁ9¬vËçæàg#Þ£ß0#2œrW¥.éDCÿÅráð’¥vÍ+WU-dkiÖí262z (°¹š}¢EÇš+’j§3¹ÛIѳ÷íK“³c=Í`šS¨#5ÜHÞØëŠ] gŒAÀ9g­;!”ñÍAãŠÌ×?ãÒž“¯õ­=Üã½eë„ýŠ>™ó—qÝ5î³0ýî´ƒs(óÍï`6ó]­žb »y4p9¤äbެ[§­!ÜBg„ÆY€nAµGOÛÏpÝðÀƒùV§l©'éYÚŒ,Œ.P’Ü @«‹¾†sMjPÙ 3ŸZNU’1*;iDÑ#nÉ#š›– ÏÒ¦Îö*é«™² Hȸ'‘Ç<×Îb£j®ÇÓa¦Ý(¶)ù×§J®Œ!b§î1üMÎ~÷zc e!‡Í- ­Ñ ªqžùâ–A„A9¨£•˜278ÿëÔÁŽA_ÈÐÕµ–¸#›qŸ¥ õ£ œŽÔŒ 7Þ¤î$‘Ç/Þ O\÷üê$·‰°ÜÄw‘‹có«|¸à`õÅE,‚ÜÕñŽ8ü*œÑyw"xã/"‚ª«ÀÏ©÷ÿëÓR¾ƒ§·mŒiômAonnm'µˆÝ ²ïRåF1Áϱa¶±Kl6b@¹?ÅŽõ$2‡VFtyüá:r•Nª;õç7%gÐ^ÍEë¹ ‘ù±21 0À+ÉüŠHä•e1LW$R£ƒøzԮʤá†ãÔ3Pܬ›’x”·–2çùü(Wk]z¾bÄ©èREEq‘ùTÙÛ+>ØU|Áµð0?*–HÖEÉVŽ9æžÃêA¤›‹²ì‘‘*ÊB<¶ûX¨bÙð9«0ÞË^b“Eœy‘)ÊŸ]¹çð«2ÛEpŸ¼Œ Ç<Цt͸6ò#;¥]Ô•™“„¢í¹4SG÷àé9!OJµ·<“ŸN*¢éÑTÈ1'?:§ñ¨£šêÄ·œ|ë|àÈ:¯¹þ´šRÕ§%º4FFy¦†í‚ 4Ud67!³Æ=j/à¹f#iÆXŒN•=‹çŒl—RãÜzИF ž´ÀIÎ1OÚ7nÏSǽ¶å­^¢¶r1Óè)½pGn)øëžxééL/Á\tèjUÞÅ»µd†±!ߨɮSXÕd¼•VÿEGÚÝ~j߆ üE{ö[v)iÌÒŽþ¢¾Ñ£´›û>+yNé:ŽŠ¼’së[B+w¹–"N•;­d̨æK„ÛØ£ïv­)¤i^ŸheÎ ò;lÖiÓÀ²\[Å3¢ýîËŽÄÖΈÍ<âlÊŒª¸Ç˜T-TÑ󳌤›{šwúyÿˆ†s.N «V×é6#a‰q‚£’j-JK¤P`û˜%ˆëЉa‹P…dÊÈ1¸·}}N’Zž~ªZŠ=r?(Á'¯Ò¨ÃvcÅppêq;v«û¸ã"³i›¦˜ÐA?¥ûQƒÐžhÛóu©qŒsÅ7€p0hŸZ~Ür¦qa…ǽ!=¸ö©Þ¼b˜CnÁBëOó=»¥|o ðÀàÕQuu§ÈEÊI*0ÆCg§óé[ Þ¨lÅ'°îAÊ\Ãæ¨`¹!· cT«k%ÓF˜ ¶H=vŽôF«‰¸…v'cïëÿÖ­{y<åûICãnG!{W7:jÑGNŒj=Iø À U Jt K x‰ÇÍž0}±ŸÂ´Ýî)J+€+qœW…ÌïvzÖV²9è­c¸•§²ºt8ÂÆ[ ìr{ƒøš³iyt'[{¸WÌ‘Üäº3Æ –MØ´¯c‘ºsÇB;}iÖpÝ#Ê÷,_wÊŠpÅi&š#•Ü·‚Àdv¤ žœRIuog–eSÐŒóT¤Õ#Éòãv?Þ‘:p¡RzÆ"hGv^ÀS“ùž•‡u—w"žCËôÿ9§Ës"¶Ì¨= q–ýqQ k—mÂ) ÷æ8ß…¢èOšr8ñUh¡˜§_zaB9§áˆÉvæF3ø×¬ÕÑÁ³±^i#‡†nqœzòWk»w‘`@9> cг5ºJñ’[å<`ÔÚ@²6Ô9\sþ{V‹”‰^ãN¡ù‰é´Žiåæf2ƒ§Ƥm@0)íÎ2qÖ•û™Že¿+»k|¤1Ôv&Û²Àî ¸}¸­SÁÉü©‡ŒQÎ>S0Ù\²ƒçøëS,-¡ŒÉ½Ïv«gžj6\´œ›‰E,¤P?y€ ‘fär3Ò­ö§.FO4œ˜r¢­DnĶOLžµ8Šʹ$€>¼Ò©È¨¬ï}‡k,Ô¤4S¬ÏúJqEsÍjvS^éÝ·RriÃ;Aí@a·sÚ—<¤ÜnFpOä•è=)_’?¥!_AL¹ 2:â±|H’}‚ÙYe^È=kk\Ö?ˆØÿfGÿ]WúÔMµ¢ã'fbAvþnË€ Ÿºê8üjÙëŒóY’1h‰*JžŸ^Õi%{xÂÞH çצ *‘|ýlfd¹å  íÍ8®xÎ=ª¸¼›j:ƒîqš“͉¤Ø ŽHÝÍv)Eìîq8µºFƒC¢ºq• ÓÁùˆ#ñ¤Ã*¯a3(ÜÛé÷ P6F±oÆ´Ø„«sŽÕKS€É º;¬‹ÆUrX~5œ­-ºïWƒ¸rj䓉¼]ˆaµvÜÓ© >è'¯½VQ‰ €P¿ç½kÆÀÆ*¥Â"f@U[û¥† ® E Ó´C]{KÔÙÉî?jVäœãÚ¢ûLfCù\ö#Τób¸>ökÁœ'=ÈTUx²7O˜ªwÏûCÒ•\82‘õ§cs:ÔDdhØç þJå]^蘯9ü1JÄnÀÈ=©(\³7’ÏZˆ¬“79Hý;°÷¥ËÜM«Yî+Hí.#ô,zñ§¬JŠq–õcÖ¤~@úSrYÆN1M»êoVÀ)FyÀ O,nÏjyã‘H~€:dRH¦îÝž?^ØÆ(K¸šèÀŽ3ž¦°³çHOi‹dO[võfk°°KXwÉ+rÇ ŸJº’‰Y¼·”àûëRÝøÏ5=ÕÒÛÚ»3&pvîèÍÚ±lt)å»þÕÔç-tÇ;SîªàµkÌ›÷ŽY._t¿©kåªÆF¿.ìtôâ´£a"+FC!Î{zâ©,/Ãìh؃†17Ý>øïŠÌ²…½Ý噸O+¢p¹enǽKW½º”’IðN(‘ŽHÇ¥dØ]Û¨0–)ƒŸÞ1Éãô­|þ#PýÛ3Dú \œäûbšÁsr1š7áÀíô¨n÷}–fBáI|EOmLëkoôfŸÎ’8™°B‚q§ŽÕ,ÖÓNPñÇŸ7dZ«"]ý³ìz•-Üÿ{ T"ú溽*]ÔZÉ ¤ò4Ž8‘¿Þô¨jÚÄëö¾Êõ7è\³µ‡KµŽÆÑ~`0=ýI©¤³†[f‚A¹HÉ>§Ô*’B†‘œd¶zûj™ˆ#v1Øæ³mœNožOV`IeýŽ×·³7›Ð ;`ãwâOJ­w¦6 `6¸†wdGnQAn1Šèä0ˆöÌɱ˜õ?~*4ûx'yÑ™&s#±%²sÏ·OÊ®3kRÐÉPÛvÈ70áÿúõM…­œÆáË—bpSÎÀéVnç{‹ù'¶¶Œˆ¿ç³ŸO`¦Ëuk$7(Î>ÓzíükÜ¥‹ýÕúž^# éÔålI–…`äGvü)Öê±Gå | ãuhÝÞYXÁ>@’CÌVÈ ±'žªŒ×#Ï3Ï[ät`F0)ÑÆ:®ÍXДӏÿ¨è9êj–vœÂ-e!Ss0+Ÿa\có`Epé¸[¹@9cÆ~‚·öôí¬ˆörì uÇ¥ Ï “R%½×–dò0~fçò¨w Àã#‚¯éŒVîNNÍ™Lçë\¸Ô¥EÜß íPÓã§uô€ìuÔ7Ê@ÛŸ^ÜWÍt¹í]-K*CÈǼ“ƒœ~UB]F9U–ßvæÜT¨\÷æ«ÝÈn.œ|ÞR° ‡¡=ê%,›!›<öÜšõ°ø*|Š¥SÎ«Š›“Œ i&&H£\ ŒzûÕøl!‹,ÿ½ï0þU%£ÛÆêç 1ƒøÕ½rzÖ¬\œœbôò7£B)^KQ¡Bp*6b›˜qž?ÏJ—#œ‚3ÅdÞÛÞ]Ü1"D‡ä&N§ß…sËW¡µYrFÑE'V‘ðÒøÔæƒÀÇÒµì¬ü˜YdŽ=ìIb9ÈôªW–Kn¦x‰òÇßCØ{W­OeK±æO $¹Êݲz*‚ˆËwfÏ4éUÊ)£<ñŠV¡s„nN2;ðõ®Å5~^§5›WÙUFN3éHˆ³Î‘– ½[ü*ÝŒ;æyn À´Ë8,Lл`§ úW5LTT¹/fo iL–M6 ì@uôºVdÊÑHÑ‘ó)ÇÖ´ ¾G±»}ÞzšÌvÞå˜üÌsYa^v›º/ìùU†d‘ïLlã¦iÿA“MnS×8®ó•!‰ͼFT8Rq»èiÇO¸ŽX¹êTvÿ®×‘Z\ÂäØœÁ#ñ[qO Ë"óÐúý+ÏÄשMèô:èÒ„–¦zÙÝÈÛQ·±ó¨4ß-á&7þ3ëZ²¸HØùЇ¡bz~u“¸¹$±b\õ¬ðµg6Ý¬Š¯NI"Å‹µ¨?Z*m4)¸!‡8¢´©Q©XÒŒ)Üž½ ñƒÁ¤ ç8ëKÈíZ CŒqž)Ã?xô¤oAÖdrh(9ɬ?—¦£•ÜPvúðk_%¸b±üLQtØÔ¸[„$cØÓŠm“6¹NxÛJÙÂ2«Ùî÷¨Ð2–“†ÊŽê·çZ÷\dFOA¨$ŽñäÀ²úô8úÕÕÃ'á¡…SŒ×>¤Oõ*Ë9æ²àéÚ¹1Ų)F 2çÖ´ÎåʶTþ•Zö" >×è½ëɵ£+l{2ö5cw¨ÛÖS’ÞæFÝŸ´™Ç­l}ºçÌÏÑs\ܱ-ý¿™ÇÚ"œsŠ¿c1š/´:à`zvüù®¿í Æ)5©À²øÎM§¡°² Wz¶áÈàþ”“N!6?ÝïT i“Ø““ƒÐÐïõ=jÞf¹vÔK,|ûèI-Û°)³h'ïoç•Bq©ÏžI¥d“$jÛ7Xý¥9còÛž :ã­:Õaí^Çet)MÒ[ŒB•^çqNb7uœ*Ù.u~¦/Ýi½›ûŸ3C4uR½yÏ_¢Óõ<æÖ@DÉÁlýZгg¶I• •q‚¾Ä}j ,!ûWÚ'–P0 çõ¨æ×•›êâ[Æ Š¥w#JâÍX1 vô_aÜÕÔ}ÃR¸Œ RÛ<¨WÙîÞŸ–*PI»2'¢±h®À1ÀcÒžÀ¿?8«œ`ã¦*0 -Žj[oSEª»#Ç’§Ë_—<ý*Û×GKke2ÝKÄh;z}åÒÚD1óÈç êÍZ¾ЛMGÕ.ð÷ι*O=9èjÕ–¦‘q§ûÖ_Ñtx´;6šožîLdæ$ÿª·Ìðê"mK Ž1sÎ{19ü1øÖÕ¬ŸjatT¬xÄhÑõ,ñ¬‘àŽŸwÔsœ~+kJýÎ*²u¤å#:6¹Kbör¬ñ¦@ЖxÇãéWâ™'ˆH„nFk Z¶qÚýŽ?ôXX3€ØätÜ}3þEK£Þþíc¸“ÌÛ¶ÀúޏÏQ[rÞ70Z;t­é÷3H—6®ZhÛ;OÌqóê9#¾j”Z̺€m.7ÏÞÉÐF˜õ=XÖÞ¥|m-Ub_2âfÙ ÷›×ð¬Æð¼Zƒ¿eäºi”ýãŸÐu§¹u:)ÇÙ¯j͆…„b•8ê6ú}MfxƒNtTŒ3)óÔ TV#Óð4ÆFãTkéVÉbÄíÂí,?ÃéL»»€ŽYÔYéPȲ<Ó¢N~P§"® Ŧ¶8ªòÎ÷Z—­¬l´˜<Ù¼¤ ÷òíþ}¨¹]?]±šÚæ&{e!˜6T{{Іúh¯î¾È³":2àîûǸ†*ݼöÓÌ«D~éèIúv¡r¸6Þ ”ã%´9íF+A_û)¼Ë€„‚Ç<ž{ŸéQÚøšæÆU¶¼F3ç õÇŽ? ìH‘#mŠ7à ÀÍdÿÂ?᥽0Ë3íZƵ6­%¡.”ÓÑêFš½ÌÃ͉Ëa¸0BÙC=ijIO¸ÿtm |š®Ð^x{2ǾhFæp¹Áà@01ZÖ–qÞ[%íÌÍœ!‰ùxì*©biÓwQ"¥“Vr*0s4qÈê¼î ÅIp†9*ìó9Lt?äVÒ„B¢…AŒÅcßJ^ñ“wȈâyþ¢º(âåZª²2©‡T©êÌyMâ]ùÒ7™å‚FqøçŸj•/ò1òséíõâ®°'8P9ôÆ*‘³KÞÑ7PŽýÅ{]O5¦ž…»”€±N‚vµ–Fo£ØÁç¯çY{n¬ÉÞbN['=¶£ ›C®9Áïî?ZÎ¥8Ùì\*8»—ÞææPC>Õ?ÃÇëšU¹»THþлc;~l}j1†c§9£ Û¸}+†¤—/)³«6ïq =NãëSÙÞ%´;%Žw(ݼóUÿˆœLc·kaN9ú­UjQ©Fê8K˜ÝŽe’(äŒådu§2I5“¥$(‹-¾Oªü)¶G™‰" üÄ>výx¯ x:‘“I¤14ÚÕêiîã¥4œóž”¨êñS• HAc¯JãÙØé½õîQÕY˜s´u5…s=ṏXÙ°§>õ»† 2ÜûSHîNk¢eO^[™T§ÏesêÒqs…•¤ºæ¬ê¥ŽDL¸fÏ~1š¾}Óú"`}O_éPjC¡ê¡ÆWÔö®ºx©N¤yŽYÐP§+ °,Øèú ´G#µUÓX$cœ3ä~B¬zúñô¬qnդѶ~éWPª]È¡Î̃´3YFF©æ( ’>óà¥n^ôÉ2<~5›v:ÈÏå¨è@$tía$ýš}Ï/½öXH¼ù„@žäŸAM½Cf¤³9‰¾á=GÖ’Þfˆ,àäÿŽâµYbº·Ú@dqÐ×.&¬éÔæèoBœ-ÔåZt¸¸Cö}ÅI<þq"Ó€! ¤ðç=>µií£ÓäY"·.UOÞ$w¨öÝ$Ä–JÛœ¸Û€Aìkž½uWX›Q¦éߘ§|èEVþÏ_0È$eÁÏoiÎ m^yÍ&“Ý¥%ÔÄ¿´[K£uP² àgÿÕNµ°!š(Ê£€ÍŽIôãÚ¶8ç’U ¸äU*8==cS N£»FÐÄÔ¦­f÷‡nô¡¾ò{r@«òøܠÿZH¢X”ª  õ÷®%–Fûèv<ÎRšÔÏi|¹cf-°7,£4ýÊÒ<‹³ó ´Öpʆ\öCŽj¬°;ÈËÃwñ8_ǽQRöpØ6ÓÚ½Èå¡ àž95 £ÈíìQò¦søšœÛ´'Íq»'ïç?¥ ¦@Z8Ý”dWÃÖ‹túªµ µQè+azŒ2þ•2[3ÆÎ6~èÏæj&Ç 8ì¿áVl1ä¿äŽÞ•¶ ‡¼ÕXcqá2·–ÞT²¤¾c/ZÊ¢0˼ÜÙH#+ŽHâµ4BÅTžNZpZôÞ“Ùt1•£­Ê@ÿgY•Käñ&¤[ƒºfÜ:íéøRIs£òß!ä¨"«É¬buH-̸;Y‹Â¥ÓÃÇqSiû±, T‰&!LRý’^¢E8éF…ÿ}ËìÜ`òF7B­åHËõlÈÿJã•|,¥ËÊwºˆÇ››Uб–Sµ×æéŒÕ[æxíÜÆq#|¨Aî}*vþko²IºÜDù6ò6ãÀdɪ½Úͯ–ËÂp`y zq\øŒ4`ýÇ¡µ T§IV0¬pù¸pB“ÆZ 85VË-PM £¡ä¡«;€ÁÏë\+±Ý%d#) “ÓÚœ8aÚ”ÃÞ˜„©ÁžÔºüÇØ­&Þr:Ò”óߢü'ùÕ'¦€›é°˜@{ Â}:/í[›ò›™XoŒ¨*êÁçÓ“øÖêä¼ã®+6éq~Èq±Õ7ç¸Éÿ q|®ÈΪ]L¹µë©ïá6!ZF) .^Rµ‡^=k¦å9ªÑéökxoÚ5¸#ýf9#ùsS£äséU6¥°á[V.ý½TcÚ¡»¶K”ÁÞ6°e+ÔZ™'‘À¥.xãÚ³NÚ¢šODR²i£’[YX·•‚¬Ç’§§ê*i·2Hp¾ž¦ªÍ"C¨ù®ÛQ`%Éï–ήhÚ\š”ãU¾‰Ì+ÿð×ý£W>’eRŠKš{|?£<’ _P¾?êc=#_Zè£ÅÓ‚y…O?xûÕ)nä¹²¤®=~‡Ò­Åk2¨+vÈý‚€P{c¯ëQ-ugZΤôZ§X“lÏ/”Ê~ö~÷áÞ«®¯o2° )eêM¨â¬Ck¶F’R&”ÿ/O`;Sî΄‚ìxaÆ JqêKR(J—7¨cdXa¼b?LdVv«¤$vžeº3¡ÜW«qŒcØzZÚY f8¤fà0^ ôúÕK¯3Pi­ ‘¢‹d™zƒè¾ã?­_=‰J/s#MÔαªE3¢Ç°*¥z<‡Œ¦1õÍtÇœcÕ}=?¥q3hfÄ‹y®¥ƒ'lW#[‘ÓpÇÊkj .þ ìšœ·,;‘°?9ØÞ³—ÈÁ¾ÕÚÁù‚)~Óq>cüñ?ʯêBÈÁíVå¤r6¯¹ük)¥–my>ȽˆDòÇÌœ’?k¡‚ÚeÙ ’z“EImcŽŠzØ¡6’eŽóOÃ8ϯ¥E¦Ë©G}­Êf8£¤Ï Û=zV×ÌIt ŽAîG5 Oc£—Ì@ÁF8â“ǦiNXã9¥ÇJ› sH0 c¦)Xdu˜N8íE€_cÈíX3![©G_Þ¯5»œôŸáYZµ´¸iá Tðû{cœÿJìÀTP«©Ë‹ƒ”43d½‘ ‡Èg9à(<朋‰Ø†Géš¹†ÛNq20–á7‹oaúÕ<L²ãã9ãÒ½zUeVnû#Í%N*Û²@CaHæ¡’ÊÞg,c¥HRX°d‰”0à‘OV ™ÁÇn+¦SøY“‡ó"œ‘½µ‚ÇnXüß1$/95½âªys3ùƒœ7QÇCþ{ŠÑ΂}ª7Ž92]T玕¢’¶¤¸¾„v÷0ÜîØ[å?wÿ¯ZV6¶ÓZ iO俍¢$hA *X.eµ ˆ‹"XÛH'úW2œêS~Ïs£(Â^ù –ѱ"ðzî¿9maFm±( Ô†£‚þ)NÙÊ8þ#ÁüjÈd'åuo¡È¯ j´t•ÏRÊJé áT(^:SIËt4þ‡Óð¦“ÏÞÿëÖ*öÔÙy aïQõçðª÷׿c’1´7š*ƒÉ~0?ŸåQiÛ$̪®ªNÒ{ôÿ?Z´®&Ñ, òuħOéPjJ ª³gp‘qõÎ*ìh¢5Uçjòö¨n¡´ìóíUˆ¨§QÉ”\`¢Ì{òMãäpcõª1ï—9Ï¡ü«SQLK½‰ÙŠÎa‚Ï­{X)^’<œL}öU²}Ñl$–Õf9f„amÎvãúÕÂÖ}ĨLÿž•wÌY0åO"º*AMje 8ì_†ín7aÕZ¦Ú7²RVŠu‘GO¼=EkFC*¸?)ç>Õãb¨{'îìztjó­@¢î TêG5^ùÙ` 1‚Ø$ÓíîæI€B뚯|èì#GÉ$u¬©R’¨“.¥DàM‹‘íEjLë“ÖŠôk$äeA¾S¹Â“×§® àœZLûcÞ‚7.1Àª,zæ“1ß4þŒÁ=k1’G¾•²cœ!Ä‘êÃ¥Eç¤ÊC £Ž\ÿõŽ xÕáV^÷)ìP©M.HËЭ¦ß-ÌB7#ÏP7mî}ªÜ“GYÕ[®â±'‰…Ó-» Ãg !튵e Ü–þeÅ´qË.üï›ðÇR“ƒM­Î¨URÛRi͵լñRÍž¯åúÖrÄâ(îá!Z0UÈlsÆ[ß=? ³6ŸÀÍ3leà¬cjàdã¦öImýʪÔg“ë]°£:ÑZlqJ´hÍß©NÆâ+È6º«ÌJƒØ~žõ!Sfà®M³@Œyôö¬É·YÞ™a&7ca8<õÇn+jÞïω])pq‘‚+޵7NV;éOÚFèH&†f$ÉÇÌ1ÏÖ¤ž¾ãšŽkq$‰"ü’/*êy}¦ÚO9d ÉB¸8ö¬¯mKÑjËXÜ»±’(z:‰®íãáåU'ž£?€ïQ›Øù™£šD*çG“út-8Î3ÇZ¡©mòWçÈ Aüÿ@júmdX0=äU{¨üÈÊ…Ë)Ü£ÔŽ¿§5©.Í4‡Û1Fd9r¹?ÓôÅHT©Èý*É‘J'bƒžàz¦)ÂâI†Ûtƒƒ#p£è{Ñ=îĤ¹S,«ny5Ú›Ù› É=BÑÜÂO?ÌÀÉV\ ¸ÿëÓ,á>%¸ íÓb#ÌqÖFþíN©ùSÕÝ«!šEü$Ì·—‹bõž‡ó®Õ˜ñmË…›"Ö}˜X¯î–Õ í‚8°~P¼î?÷×ãZñƱD¸ò[ÔûÕTvg#ªê{«d,q$J>éšy‘ Œ¼¬ª«ó37aL’Hâ„Ë#my$Õha’ùÄ×JVwGïèZ±wd-4DÿÚ¾t´º yS°sQËu{2þîÛÈQÉ7gØZJ1ÆÞ>=éÇþµ/[je}‰îÈkÖÀ|ˆ„€¾ýzÔ±Ä,m™# uZ´~o½Ó·­<}lŒùQÅͱYP?_ëZl$ó„†0ÎÝÅférÿhêW—ˈÊ$K¹q»$ƒÜsúUGc¢”Ÿ6ĺ´s‰íoàC+[1-êÊÃzAâ=3'Í•íÛþ›ÆSõ”‡>i Ãû1OÎq€k3Q3ɤàäæœç#¦i¸óÖ€gƒžÆ œyÌ–àà_ØU‚ê‘îc€'°¨`RTÊÊCHsƒØvÖš’Úz žÎÞè‘a¬+PǦƌ¯+<˜9ãüªöJçwzoÍUµ²‘.”$îЬzmãéY…ºÃ2ÊU@þ÷\þ•ªF1““PÝ[}¦" ÀîR{ª:‰‹MNêcí=1Èë@ÇqŠqÞ«ðÆ‡‘_M)+£Ãµ´ôö¦eŠðŒÀœ+È8ñN±€€{sб© Q™L Í•Úv•Ç^ßxW6+*6²7¡ETnåO6#÷ØÔÿM²1ï`þ†¦‰µ :*XÄ¡QT ª1×=ú~´Ey§]a&‰`UÀÉÏ¡ëé\ŸÚ é$t<û,drÜ@Ìñ»UÉlÖ´71\&èˆ=ö‘Ȭ߳°O2óã 2•á€=3UŒ¡$›••ƒd©£4êÒ£ˆ‡4tb§R¥ijkÝI ΊĶðä“éÆk6K{9Ùc·“‰Y Q‚¤ 䢴$‚;ûtgB*;®úƲ$Ñíqýžà¨€K/$ð:ŒvåÅYÙ³½ê®X:]Ì ”œd/Ý\¨b8úäžiÖ&ü´Âí1Ú#<{úTRZj‘o Ò4—æ ¼¨9'ñ5«’÷46¶3þµÉ8üx©¶•ëLä‚Egnå”ÌfH—¢|Ìj¡'=E^Ô!ØÞ~8n*£Êç5ïá9}Ÿºxø‹ûGr6@ÛrǨëTÅË('bª)ÁË`þU{¯8ɪ·vÞr|€n÷ï]i¦`öÐyäu#ƒW¬nEå–§¯qX°ÎéˆæÂœàc¥ZØe€5Ž"‚«SJ5\5.Á3ùNê¤ÿ J¹$’1ùÒv®)ñ.ùI8Íf¢ ®^³‘gJ?ésñÏJ+J(Ñ[r¨Ñ^k«ÎÛ=8RåV:…eã½8–=Iú œ(§ã@LúWuÌìB3´ñÍ)8= YUǽ!$‘EÔ¬Iïõ¬½Ù­øÿ–ëün¨ÈZÊñ²[ËÀÿÐZªÞDN6‹1àóÖŽà yyãšBxéÖ½ËmØÏ )£9ÈàzSÁÆ:R<ʃ'§aÞ–àô#’0ñ:°;H皯 ¢UÚ£ø½*cºSó©Ù{Ÿ­J(Çjw±;‘y>§©îj¤€iÀ4|Æçkoo»ô­ävíHÁOUü ŠW6²M(ueeÇFà~x¨%ŠkxW`Fç(àV¶1Ó¦)[ ŽZÆtaSâW6YÁZ,ÆÞäÚ¡\ñÎsOd&x„nòpÝ­0‘©c0:V|Å.¼Ø!ÄR2ü­œ3véÚ¹þ£ÉJÖ:~»9C’Z—$&:ä‚{t§AÁÅè <Õ}:XÌm³Ÿ,]•^œV†xàWeµ¹Å{hD‘Àüi '¯µL:F&`zŽ”õ ņ~8¨® I£e G\U¼ŸJ b€FqÓ h‚ýç÷ùÎj¸-ÌLv ’Ø­“»¢«^ºÆ]‡ÍÏÊËŽ>µj¬­#j‰Po” K åï<€»‰˜üëE–9âÎÝÊyÁõª¢úÖf˜¤JÕ¨.|Õ¾#D |Üt¢©®TMIó¾fRžÕ¡‡†WV#!ÏÿZ›BIex b¬ÞµÂƦ …[0#ߎÕã°ä‚üdû×›˜Æ0iÛsÕË¥9§w¢ Û—pïÒ›·x*Àx ÔŠ@cŸ^}éX€xü«É‹=[[DWKxââ8ÑìKß)ô'Þ4Ð¥'Y=ÁÅ[R§ØàÞO•±½Pàþ”Ib\cí3mô3WÁUϹ¤·§^zSnú¤O%ììa]XÃ¥ã\a`7£sŸ^µ¬¥W £jŽ›xâªß®°äyN>¤â‰šk«¤Ó,sæ·ß“F)»]6:TÓ“¶Äf9uËñahJÂ?×ÍØ ê“§Ú[¤QÚÁcÓ·­ZÓì-t}æÁ.·Ý¼:Ÿ­d•dvI ¾õÓnéÅS¿´ûB‡BUû§ûÞÆ»p˜·NIKc†öŠñÜÃgãéR[[Áv 3*0˜gjŸOóØS\[lèÑ‘žOÎHŽÀÅ! ¿uÇëÕŒ+BÉžm)º3Ô•l/­P‹{ƒ/9Úxàþµ…ÂÅyjžc‰cùsÈý}{VŠjS¡h–Aêœþ½[Ž[{ØØ¯7+(Èç½xu¨U¢ýäz”ê§Âõ0bµ¶¹¬.§æ1‚pXàóÇ\gô­ÎGgê)‹ah—‰x…•r:sV›©ƒ›û'BŠ{•˜0ÌxªÖÀ·™/]Îyö »4‚4vÈyöÿõÔp§— 'L(W±-]ØH'ÜÓ –Æ*À ŒRpG'‘EÇÊU*ÙéM*ô$[X³Î{ã§Òœ±…_”mÉç=éÅ{Ý(¸[¸6ïõ (==)ppr>”Ó‘÷jF(ÇJ(#ŠC“ØæŒ– zP¨ÀÏj¨ë´ri»xëÀëF0R 8Ý5™fË/ÚaBîO̹8úâ´ù-ÁéHû‰H fMÌbæ?µ*ÈG˜»nIãžõzÎê;¤x*9\çØ»2‰–íƒ<Ÿjž X­L†4UÞÅŽ;“R—p'=¶Žyô¤þóÖ—œtª†yâ—ƒƒÎ3ÞŽýM(' œàsK³==i0I©'Õeu,Œ®?Ù9¢À6Xþa$,€rOñJŠHã¹EÞYJç€zqVwuàT2)ßæ¡ÃޤÿÖôÚØ¬öo º6ç+rBxäTl ‘‘ÆIëWÑ£¸‰”ŽPzЧ$aK"ÄÇœý3\ú1œS›²G~¼¡&’»cOFãzÓ—¹4ÈÓÊ‚rzÒÛÇæMxn×´^‡ÐEÍÆÒÑ“ü©×ŒÓX–'‘Šc©êsƒ@úô¬;ÛT„y–.»‹özÔ'íLÃ8½Iù‰ü8©·àž3U/n¼”DT2ÜJp‘œš¤AÉï¡SP’Y%ŠÖ&Y/n"ª \ä“ï]Ž‹¤Ã¢Ú6é7JãtÒ‘Ôú}+'DЖÖùe¸2í´¬z+Âþ5Ъý±²r`þûÇô¬jMl¶&¥E Â'™–µ÷.BC㈚žÚei˜4’>öÚ0lÀQsng€¡8#Xv ŒRÚJ÷ˆò HA ¾„pE$ï;>bÇß^1ŒoJ¡ ‰®ldRñ·ïcB26‘È>BÔ%±/¶tÁÜnê*¾«9Óöj2!’(—Ë`‡n*¡.Æ’§$õCì4h´Ûöž9]®ÅBrzcŸ µ•³‘œž•^cs©"ƒ·(ÙúŠš4Ú8õëNM½Ä—) -'ZQ“Þ”‚½…HÈÙGNi6¨$ãŒvõ¥ÎX桺™m,帓;#RçhÉÀíWtUä‘B}nÒ9üˆÒk™PáÖÜûžª]" a³fvO4+ŒçŽG銋E·–-=Œ‘˜Ä’¼‘¦yŽFqÖ¬^jú’.WؽýÿŠ»ôFµ%.H¢ëuÎ) ÀÆi§/NÆ)Î1“RÎq$‰dR /·çÛô¬™¡ÒÖ&;͹h1ó)Ÿ¨¦MnuMræÞâY¼‹xÓbG!@Kœ‘ÏjÔµ²·±„CkÔw\œž¤žõ»´aËsœês-‘ôo•X«G•ÿž™ëõ¬} ¼‰FÉ?C)ón–á_™øü…8ÊžQ²•Žr>”–ÈÊŒìNùæ·µ+¥«ï¢,``žç€)6g‚Ã4ÌŒRvƒ×­MîU¬JŠcž¸úRH cŽri6œäã”õM ô¨%š8ž5–URçjîã'#üQR ä f²ïí.d§‡c‘E 9SœäÆz~BšzIÉÈ€Ó\sØú×1»wlqw q‚~`U¶ƒ†>‡kVÛY³¹*<ï-ðÈ6“øþ Õ8=Âè¹5º\ÂðËó# õªÓi¨ö±¤LâèOñ}jÈÎâIÉ6YV"JˆXàzJ¨T©î³:§%y#K;ð%OÔUí1TÉ;3ò¨oÃ8ÿ>µ^þÛɘ:œ‰%}ïúÓ4ËËx^á%”&9cÃ1Ò½ª³u°Þg™I*uìö6È!ïïÚ¡“;9ì)QÒáAŠEuéò°4”†ÁÁç^ „“ÕºšèÌMfÞëí>|6âW;M»•%¸üjÖ5–{xÇ<¥:sÏ\ä~µ¶Ê^p¸ÿV„ã¾I©'*¨L‡ $“ÇhŸC=7¹•ý½|R¡,8Ç@yëô«ñÞ[IJ³©EPäƒÐ_J¡wŸx„ð$ØùdÜ?—Ò²¦±‹Èš WrŽ.ÝÎ0:v­éa¥RV±Jê ÷:X¦Žâ1$NI<ôÁ©\sÖ¸åk­- Êûc3ã$üÙü?•tÚ}ÔZ–Ÿ ä Í«¹K ¤ýGjšÔ%Iß¡TêÆ¢°ë‹ˆ­”X€Ç«^]ùQ¡…w³çkv8©5L–rn8ÇB{Õ,åhÌË… ±8éÎm‡£Nqæ‘…jµ#+D¹.¨¨‘—y'cøET»xÞòB„ê=j´ª‚%#xù¸Í*¡Ø0¸ÐW¥KNš'ëJjÒÀRnÍ.ÞÄSH!@UË´~5ÐÙŠÔ7€@Í9Ç2È:¯jdöóÙMn@Gˆ%¸úþ˜+ù~bds×9ȪûKÆFî6gG ‚D`:àô¢²tÇáJ öõ¢¸¾­ÈìByÕÙè¹SÅHšb¨#šv8âºÄ+p3K…'ޔ޴àj!·JÈñ#ùv6ì2~2ëÁ­sƒÇqY:øc·÷¸Pï–ª‡Äˆ©ð³ŸkQ?Í Øç‚:ÿ:+uŠFaÈ56@8§:MzW<ŽUq…x…9G<‘Ú¹ïƒJy¤1¤äò? SÓ¥# RN(Þ@悤ò8¥rH(ìyÕëÒ”õãŠvÑ»)ÆOZÀÊŠ1ÐÒ€AäÐzPXvh#Jp9 qÉÇ„ r)i̹\ç­F3õŸ8SG¹÷§0ä‘IׯZ«w º‡` m`ØnŒG­S²¸n$Ú²‘µ¶Œgçqש­`6ŸZ«sf—C Ýò¹ê;þ5¤d¶dJ=Q:¸‘AFܧ¡Šw€qɪ-½“ùOpÍ!ÇßlíN€UÐ9ô>†¥®ÃE+©ÕÒUVÞDzä­E4±ÜˆäˆíÈÉÏQZéÖ«ÜÚ$ß¼ ‰@ëŽÕh¹ÁÅS’Œ”™Lƒ¸œ’ ?xíÖšQ†ÀíŸzr禥|Õz3¥+HúzáZÑbéÏÓUƒÀæ¤#fp2qš†êx­`iä? ýO¥fôFé7ð‘ÞÝ%¤cÏÑUz±ô­/h²DçS¿\Þ8ʧhÖ°´KˆfÖûQO—¤ z!õ"»§œNV8só3Žv/Φrå\¨š•¡éÁêPÓÐËhè¼+}¡û± xÿ>µ¬8P¨ãONUˆÞE·nÉÈÇ^ ëZ.ÎîrÁ[Ôhû¤þŸçëT¤I­çyí×r¿2DN2¼=ë@)÷nT¸ãÒ®µÕœù¸¶Ò4Éo"®nLŸ3K€ûÛÔöcŠKâºæoç#ÃæÎ™„Ÿ¼UºtÉgµO,vëux_w˜òª* Ü_ä_¼Z,¥¹Ôm®õXæŒB ÛćhVø9É•ÐÒèT+ó«K~äÇQ‹MÕN‚Õ#B«µ#Lfî;`I5­Ôs]MmóÅã22ùõªp_JöÏu}j q9v ÁèÜtïT ° ½åöé® ÊCóg,:œŸaS¥Ž¯gô×ó:àg ž•GLÔõ™”¢©G)ÃîVÇu=Ç?δ?ç½ef·9åf5FIíÖªêjJ»^3ä?oöM]ÎqŒŠ«¨ÚµÞŸ=º>Ç‘p¦˜BÊi±ºiΗhØë ~«êZTwí™"XÈd˜€p§$¤ÒîžX^bÍl|·@r:pGµ^Jã>œÓmÅÜucï´Îí÷ÚHHçCpŒN>l°ïw?•m[ÜAqx_i#ƒÈ#­:x"¸‰ã‘FñÒ³áÓbÒÌ÷P+È2V%äç¯ã“ý º–LlÑ ¯¤jÚJK[M„¹P3·õæµ·C«B8#¸ö®oLÖeË©å¤|©žÃ}{ÕÍh„—v‹.a‚U<ìaò­d›Ž»£îNËfk—Ævãš7c޽jA ŒûŠŽ_Ý¡sü=?°ÜÙ«÷rÁö¥´YOŸ1È:þµX[Ñå£`È3†tý:ÖLú}áWyQŽùw1‹–<`~C>æ¨Å(´hã˜Ë ,B¶ò3ê8뎙¯FZuJZžsÄN›mÇC­mÀž:ry¥+ÍsIò1x'šf I»!~¹©Rîö›|þo©Ø ü©¼¶§Ù’cY„z£¡RFxRœñéÅ`ýªiyRí…•7ÌtÛ›·ݹ¤òÊ–Õ”±ñ{#¡;¹à{Ò8þ¢³l5$wû4Ò†œF½ìx­B‹Á¸ªÒ•)r³²SÒ!dY7«Æ¥X`ä‡9©ª5¤ã| §å+Óñ­\=èÚ!EB“èSK©Ê_hh ö•ºÖ<^Còã>ô©"]þü•s Ý…'n ?Î´î ‹ZI"fÈ’¥vó&8?…>m&Ûh£„¯B¼ zW~½:ZIUéN®±za1 `bqMc– Žàb¬=µÄ'Ûýäù…@ÏÌ?­{TêS’÷2T柼†•Æe[ÕNéH¡Tæ2ÈIä©Á5&8ìj9dŽË2‚<š®HnÉNk`Šêè4¥n¹$qÇ¥#¹$y²<™è7g?€¤‰ P"¾3›ëRZ¼pÞn¯PÄž?XÕ„a%³HJS|­è5m®ìÏMØ*ØNܼ‹ücR]^IU-÷…áX¿Z¯5ÍÍÓTpåclçêk‰VÄKtéP¡µd7V÷¸•Ãgi=r=E-½÷ÙmÄ^L‚K0#üúR\C$ d0—k6æ;ºö ã9 žsŒú«xEV¤”ÝÌ\)Þ(Ô–{;»`¦PUº‚pZ‚[Ë8`ðê>Rª7f©:)8e£5 )`D}Â`YÿgÆ?kC_­Éô¹q€¸àÃÒ›$ ¤òjE!úf«\Köxd%w+àÜsÚ»6އ/RC¼ü¡Ic÷qTážàÈ­<¨0y óSGv¥Q²aaÈÿÖ©~ØéÛ.cS’Ê~¼W=~y/pÚŠŠ~ñKhç2ÛìB3•'æü=j VÔ°š# ^ÀÇ‘Ÿs[V×V—èUv—U†3ô©Ù Š"ÌQyl òyêS–¨ôya8èeé{EÀ@#®(©mZ o„¶Ì6ç+ÒŠô9ù•Ì!#ÑTóÉëN^™³æÐÔ„Š³aÜÍ)\ô¤\R–Š6öïXÞ ìÖà— F­ÙV?ˆ—6ÖÇ$¤/O÷Zª"§ÂÌŒäqúÒŽZhÈÉÁ9 :~uèžH«×$ÑÆ~¦—^¿•g“Hù=:Rc=hÉ í@lç½zjpŠf‚äŠw%²;Ó;`ô9 [4¤c­!Î)¹Îi3‘Óšµ*Ž~”Þs@Èë@-N$ô¨®Ý½© Ò”®ãžip0<ÐñÓÖ“¾(<žô¥³øq@ x4 GçJ¼6xÅ&A$ ­sd³¶õr’§qÁúKIf§Ì¹y –ʬxÎ>•JúÁ.‘™Dãî?qVôdµmQn)EàæŸ’OµcY^,)k-õcõ­‚@wëJQh!.b bÞr ïÇÞöªj,ÈeäƒÔV¶ÝÇñJþÙeƒ~–3”cÚ¹ñ£Z HêÃVt*'»HBÆÒ·ÜU$œñ\…ö¤·WqÉ6á?$`g>溒VKim\ûH ô9ô®Y¢(~Ë0Ûq(ÜúWÎÅrÝIVuÊ WønÆ2Ì8¦*M¦Î²ÆIþø'ï æ¼Ë:C½C«ú7_ðõ­H%(t%îxÍa8Øð5R»Ýzê?j•ä´$¹¸Þc’v®Òº;8æ†Ñá÷Êyb{Ú¸ï X4—ó]I‚ªr˜ö®äôÉã<⮫$b·;p¼Ònr<šÉÔG™BIcwÌvyè}ÿ× qÐÖV·j³C¾SHÑ6@Rzw854­Í©½kòèB_d À³g›üë^hVxÚ7`ŸCÆéX~fß.êØ¨Bw(ÎB¾0Q`Fà+fÚé.Såm²)Ã#pTý)Nñ‘5Z• ¸–òÝoT´å¢a÷ãïcûßʪGq&œ“Oª<²5Ô…cµTÝ´.z{c“Z—ÙHÒå0 ƒèx?¦i/,­¯ãXçˆRJäëÈ ô4ÛLë£VÞì¶(jUÓ­ÚÊDX•wÅüŠÄýÖã°5¯F xâÞϱBïn§¯ãT–Îæ;µu¸òl`dp pÆ>on‚Ÿ¥jÐj–áâ8p ºžÞƒ=3ŒR“¹­K¸$¶EðÇ:zÓs¹IÝÐþ½; 8Pã8¨Lç2´µ/ªjnøyʸí´(ÚSZ€qX©pâfÁÜyF;“· ò9õäþ•·“°c­TÍ««I>ènHéNÆG4„dS»})#g_ip]’åvË·j°=9ÏNkœÔ|;¯ÙõibóžÊQ+"’@:íÖ»6àÔ7P-Õ¬¶îHI©Ç\ð­iÔq~¦U)©"Du–%t# 8ÀÆj)?}rˆ1²<3zØV5ާ=m>òim£ù$Cþµ3€Tzÿ…_‚úÑ#îcV<¿˜vý ¢tÜ[êDj)¯C@ƒÏo§ZçO¶»SæÇ¹‚íWÆ¥Šâ)”¤ñùV@¼’ ÚQ•üˆªp¾‡8íß¡­Y'¸Õæ‘X.v€˜Æj9£KˆŠJ ¦0=¾žõôl<éÙÉêx•ê)|+B&Hn#-!*H`ÕÝ0B“…*)²ÈîfGc y BÎ@-œUfºKqÚ#v‘¹b?ƒ9è{t®œEmÌ(ÕönòG^ ŒIˆ#HeñÏøSþÓ 8A,eÏEÜ2kœ‚úK«]†áŠ0ÆÖÁb>½iÖ6Nu(žÝ‚y`îÊäƼiåÒ„[¨ö=Xc5Q¦·:6äóÓÖ±5»ø-£y®DmnÁJDÄ3¹ç¶:k]¤™)„ȸÆä=ýqéY:–•k«O$Â9#,̬8bWŠóéZúžŒ9%$§·RõŒÖŽ ½³ Æ™yÈÝÈ$ûÕ¼es޽bxbÊ[:H®MÙoÞ€z_ÃU½OQ’Éíâ‚:Y‰ örI84§y¤jéÅÏ–‘|pGZŒÁLQ“Ž¥EEev/¬ »E*² `§µYãàT§%³2”.í%ª)¾fßòÁA#µC5”Ûù þô…9äžGsì hŸ§N*³¶n”0Š[ß'ñ«Ujw1•*}Œ›wAåÌŽˆ[ Þ¾ƒ4É « FP€í õ9ã­ljÐIqhC&6 TœdVFáñ• Xw<Š÷px—RoSÉÄÑösÑhjG¥« ÷@–'„W­¸†5^9=sR >R†lsHªG©¯µz’mIž¥:P‚ÑÏw‘sƒÁA¬6  7+`Ÿzº"1Í4ç¿Ö´ÃâeBöØŠØxÕ9ÇÎH*C‚QQ±äsZ×¶M3™c#ÌãëYN6Jö…{1P¨—sÌ«BTØ`óßÞ ¸…g‡Ë9=GjÈ¿Þ'?ÝæÃ Çßi­g8­ÙšRèŒÕÒ‘_—8\cJ’-:3ZyÛD™ ‘œŸOj¹¸1À9>ƒ­@ònUÈŠzw¬¦Ó‹q4RÕ&FÞ?x]4rg?.x'ÐúUU²¸Ê=Ó0<×I£8SÄ­Àfïøv¤¾‡*%,~Q÷kËjŠv¬w:q”oM•tí¢TQÐŒQSið³KænùGlQ]S«ì*T¥ÊwÄzO )ÊéNBG© ª¤µù¹œëžiϿրGjÈñ Å­¨ÿ§…þMZàÇñ ÚØùøú UCâDTøY #§JwUÀ¦ê,t×¢yÎ1ÆisŒ´Œ1ÏzMÜv¡ xÏ\Ss€OJMØ=zÒê4Xc‹‚£Š7cµ7?/¥&H äŽH§nÀÏJ~zÐIÈ=x  ÏZ@@< Ò+më‚)››q#H þ.ÔgŒŠh`#ÿ×K“¹súPÿ ç­ ?JVä¶( Æý(Î1“NÛϾô¡Tz uâ“…äž½¨HI2\“œñÓò¥EomÕœ 7ñ [c|&QNûˆFy=)’"°ù”gCNAJ[$ôÀ®µë¹›4Ëo"G›qb~nè{âŸs»‰bº´K¥qãò ”¯ûýIA8XsÓ$ñùU¿ùi“üªÜŒ©Þ-¸²,1°·B ¸ÀÇ·j¥bÚ…å©-˜ Ü%°éõ5¤Ì­òõ¦zTKo–e»©ÆjSFªrR¾äžª ==óX“ÞÝG®A ºFé31|¶bŒ~&µfŠ&+6ì|Ùvzbª¤AÞYmIWÊ+ž½{UGEqF¢S¼Ñ=Ñš+ghd”sµ‰úã5Ïjð€nîÊGU©bIãú×Bnb2‹ËÆ ‘Ÿ¥sž—Íý½¬Š‚Õ§Y6³gp½¹­v`%Ió•éûI%{.§Ce+Kc¾2Gô©Fwc#šÏÑtçÒôx¬äeÜ…‰ÁÈbp=©Úµä–ZkÜEϖ˼É*Xúf¹jYÍØë§  ]ÏcÔRqÍbiºÔ÷—fÕíB:³3œýÄÀ*~§5²HÉïì*\ZÑ•R›„¹XÆã®9¨Ý×k ËèzUkMRÖúG† e°TÃÔU²¾ùçh³ŽÄN-|H‰R8þ⪺1Aäõ4,ˆÌBȬGP¤K÷³Èâ““{²yRèAqk Â*ä„pEC…¬HUbw&­7Ê@È$ö¦ŒzóG´¨•®/g¨Ë“L”>ØÞ#tÉ9ëÿ2b‰XщʵpqŒþµZî$¹ ¸SÛkHb%9.}LåAF/”¯§6Ù vÆsE6Â6†õâ ð2 ïEoQ§+¤n •ÎüŽ)B‘Í!zÓ²@虊8ÉïïGÓ¥(äóøSzP cøˆkkùøú VÎFÜšÆñ Ö×óò¿ú UÃâDTøYŽÙÈ=©»ž:T˜çpy × %sŠa\õàTž§œgŽ”§>í)^¸§Ž[©;°1@ 9ã"ƒœÓ‰£9>ôŒ‚\{S†Aäæ»h#Ö•HÉ<Ð1¸ ŒúSyÈϤ-ïI¼s‘@üŽªE“íMw|SË £µ4sì{Ò|Á³É»†ïÃdŽƒ"€ð8&Ë x¥ô d7×­G‚HÁâ•ëÁ§1‘Ç4 gœÐ}3“JGL \œ`‘AÆàz}h£%A#’y§‘× LØ&•€1Œتàyò)9òW×½Æf1«~ì}â;ý*ÀaŒmµP·!¸Ìˆ ê~é«4n‘¸ÉϽkîÃGãYÅ6M*¹8ÝÀöö¯/1§î©¤z™UW¼ÇxFsmªÃ2 {‚6}+;WðíÆ’Í=¨yl%q–éê+[Á­·ûR~[Øã¯é]Ae0=ëÄ”Úgµ‹ŒeRÒÔÂÐt»8"Žò „¥Óïg€Oõ­Í¥²¤pG Ö-Þ™qa9½Òcrs-³p’«º~±o¨nAº+ˆÿÖ@ã‡úz—k£b’÷vsaek·-¾ªK:1vÆ¥SµÖ­õ[:J$‚YäHàð韭jjPjv2YÜo0Ì0Â9 ñõãÚ¹8<249´ødi­$Ì¿3œ‡PN<ßñWMA-w0•Óò;%Šî5–ÞE’&k)ÈëÚ§ñŽ•ÇÃq/‡¦Wío$j1Ǧ=ñŽ?ÕÒÙjP_«<•ÈÁü©J6ÛbÓì\üÍÖ¡/f²«àÂá·tr??Ò´w(æšÄI•* ‘†¸ô¬ïaÉ)+7^t—IL'BE‰ m9ë×¾;æº!€ ¶G©=sïéXë¶× NÑ©c~¡‡e>þ†®=å¤×î¼§ð­\Ô’¹•8É6ÇûPvµÄ`޼ô¬ýS‹­6vÃD·1×ûÖÂF±Çåª(Lch‰qþݳ·wÛlOöÞ0ýI¢èuáïÏ©°‘Œp)Ç!r)»—¦O$fœzÎæVÔfÒqÏ>´€mçŠzÃ=¿j7òíÖŸ0¬4‚T`Ô!|˰|¸¹cê}?•K,ÞZ3ã‘òêOJX"1ÇŽ¬ycêi§mIjîÈÈÔ?Ñ5«°2fÝlèF~\z­^³Ô­uËo/˜ÉÃ"¨jÏ¿V´Œc÷0ÍpAèH]£ÿB©4ˆµi|Ãå¿ €JàtÍtÊ)ÓMœñ“U\VƹC=OçQØ‚ó©CäÇð¥Ü¹Îy®[3­ØŒ/Þe9-Þœ3厠ãÍ(e,xíš7'oΓo¨$–Â8Ã/ ô¦b6·< {6ïêiTƒØPƒÔiG#Ži6H={T†Læ“p9 r8Í3n3´‚ 5°‘»0;@Ïšvz®zt¥Î2?:/®¢ô3´¹ÒMp%ã<²ôËõ« 9±nm§´¸žx ªgx*À¡.‘©½ÂH“²‡!™€-íÅuÔÃÞ<ðg4+(Ë’F NrF>µB-An/e…] pî:÷­%pPãv­cêÖ‘F¢ê1„ä Ô’:{Öt"¤ùdiY¸®h—®ÁòŒc«½}qš‘”œ‚b*¥µßÛd‹xãÉeè?^b£Œó“YÔ„¡.VT$¦¹‘ ÅyÁ+>ÿJ[„&""”pÇ­i6õ¤-‚qD'(ê‡:q’³)›M±ˆãšU#AÏóÏ׎ਣ`2õ«EÔPi¡úúbšlRÖö*áÖrÉl€eà þX¤ó2Y^ UGv\‚?:³½BœzSw(<*¹»ƒ»w¾¦.Ÿaa§HÒC# ®Á¹Bí­7’PC¡Œîã5$‡9ÏCØóQ8‰Ô#*0ˆ¤Ýõ*RœäîcéºTÖz„óJÑ”qÀO˜ç?§Òµ ¹c‚G=ñMž;mŠÎ-åHÐÆÊ¼¸8þ©o™Ý„êJLÌ–Ê_íø®|¹ [%[€ßJÖUé8ÄÒ.=9üé nHa3ÓTJI–æåk¢^ýj–£iöˆr ù«÷H©Ú9·³;£šGG™ Ÿ*ó·eL=×tLõVdZe ‡÷¢VpËŒ7&Š’Æ)"ŒaóÛJàÑ[ó7­ÉŠQV±Ûà(àƒ'­) Ž+Ù9‡ÜÓN2Iâ—¯'›ó×4` ÄñŽ©ÿ§…ÿÐZ¶ó“ÍdxŒ³Ú×ÀÿÐZª"§ÂÌvàõ¦ÎqúÒç g¿zHÿ ôQäˆPIƒŽ”dàæƒ&:E¸ª¤žô89ȤWž¼Š]àb¨Ç҆Ϡ¦¬ƒ8Á4oݻۥ n ‘ÁíK³$cJq} qLßœ‹·¨=s@RzÒ‡'µ Z ÀñŠÉ9äv£wÍÈâÀôë@ xP¤Û“’($€OJ7ã&€ ¸Ï&•{óši|Æ ¥Ü@篭 ^àñ@ÎÒ8§d`ãšj±¸ @q“N*OA‘M$õ4»øäP€9çÚ£—2?–‡ø›²ŠlÒ”ù—n€ö÷§Æ«€}sÜÓDî*"ƸQ•)ê¤åŽ9¤ß’sÔÐ8n´\ Úw§—z²<³Û*Ÿ~Oõ­V8Î:öª$ÇsÇñŒþ]kdìvåöúÄnci:¥þC™¾w%¦‘ßïéZ—^/’îÜ[iöÒ­ãñ&õÇ–>µÀ9ù~¹ÎçOIBÈ7ð¬z“Šñœ¡Î•Ú>ŠXªn£Œã¯B¬qkÏæCªÈò¢O™IüjõŒ’k—rÚ^µÕ ]ñ\ÃÔëL`›Êárq×ð§x^ÜÜë—7#mT@ŠO99$Örƒäçeƺªäš·)«oªKg"YëFý#¹÷rzdö<Õϲ›ø%y™C"/8Uägñõ£RH. Ž  ¼¬|ÒG8`Øhi’É5—›s¤FJ­®ïrz˜SR‹gŸ9FrIhû…Þ(B_Ùæ 6—BO¿µR»Ò.,§k» Xÿ,ãÉf=‡Óü hEwk¬i³}š@Á©8Áúç¥Z´¸k›U}»X¬èÀàí‘Y&àìÆÕ´+éW­¨Zù†6B7ü@íO[Ÿ"îFdUûªÁr¸ì[-´´c“Úœd<ýoëEÄã ’ÃÄ-€2° ò=>µŒ²aà˜––‚¼;]=Á³ˆqò ¸ô#‚)»„zÆdÈI¡IõRzÿßU›Vz&\G?ýjÏÕmêÅŒd$Ñ~ö7?ÂÃú•¢.23Ò˜ÀºR`@'±ªNÆ´åi"­À»±‚è)dbM£è+Ó^‘ç–+˜pgû«‚й#ƒ×8íSØ\Ë€màˆ½Õ¨òŒc®sÁúcšÍĆD‡Uµ‚>r6·8ëê8ÜU§mÌñP¨Ñ$ÚŽ£¡=Ôu³"®ÜgË䃹sœôíÞ´m5ËkŒ4›ánwRä<~³.4ëËcÆŸ)™D›¿vpJúõô¨Ú8¯ô¹ï.aKyclŠ>fݤ§ Ï­hÒjèÉHévù÷ wc9ìXô«J\qœV‡­gµ2Ÿ=Øå”!áòxÏ÷p>µ¹½xÂŽ‡â²wæ².-%vsúž^gcµ‹`O%Àô­!'ky^7ÞIß 7àzVL×o=óŒ †ò`f8 €œóÕºqØWQl¾E²Fr«†Ž{×Um ¢rÑ÷¦äKåàžô¢,r4Ï4ÔàûLW&¶;4±ºJ#'’zq@|Ó™˜ÛŒgš–ÞÃÒÃv]„•9Å Û³ÈÎ;Ò+°ûËŸzz Ó ¡Nã“I´ƒà}E*É…äaºõ¤/Ï@y¢ìZFIé×­5¢$›ÿ3œc­$£¹ 4TOõ¬RÉÊxPy²H±ä `ÿõëYäcŒƒ­U¾ß-”Û³ã(3ƒ3ǽ]9ÊC:”ã5ª'†à·H£ÎÔïYú͹k@á 0l‚HàÿŸÆ¬G‘ŒÊ¡½ƒSÉ:*³ NsÛâæ§Ì…% C–晾ËSx¥%’Uù]ºü p}ù­â™ÀÈÀ9¬™4Ù.š9Z\DË–Àç$ç?­N·/níËåHù&#èÇÖ¶ÄITjwש–.šå{ö¸÷ªiv’\yXa¸Žy8ŠÐíÎçùP¬ɨÞÜH¡`X”n~V”¶¦³nú ã’1íMòÈÏøTòHH70þï÷±ò3ïUµ›Ëˆ-Z}âàeFì è}»SŒv@êE+—e!»0 ×'µF¤Id!”òî=kK‹éÉI°Tヂáà\UËkKtÒ$bC»ñ#úUΟ*ՙ³“ÑnÆ¡S摸UóïT.¤¿¶dÝȤðIúf¯E0K•ÞÌ2îXÎ¥-–î>•š‹Úår9-ìÎvêâ{Õ04G*r6)$z™u)–-$ ¹ëî lªN ûT+ I1™cÏñzVï­Êd¨M;óñ.¢„Ü‚¬ “å9ÅN—ÆH×È‚I$ÆJà¨_Æ®==è^sÇõÉRªžèÞœve1s=ÀTŽ&‰ÿ壺pŸOZ‘-æyŸ8t^ƒnãVý3FGjÉÈÙC»08ÚŠI(­©ë½µ)@Á9¤àŽ8Å;oÍ{gwâšI?J\~y¤Î  l+Ä_-µ©Ïü¼ý«c¹=«ÄCýÓŒæàè U‰SáfI^ؤb•óØ ]À•è£Èœ7CH ô÷§OZFÏjô¤äúQ’çéJIÏÄ&;‘íNTÏJ@N) ¶A ƒH:çÓ­&1Æ0 )mƘ]±žÔ ~îÜt4„häñ“š3ŽqþÀpOz<¾súÐÝX‘í@l/F¤žF?­/QœsMV#'­)~õ ž^ýiFr2wbš ÿõÓÁ bçƒAãhÈÈ9ç4ì$Ž”c¦j7qþóvZ$F nÔ‘,dp7ööú б²îf9fêixœ õè)ÇžJ˺·–¥»CæV ;gcr¦¤îE¸/mîeu‰Ëm–ÆÉ `÷éVvÜvïXÓ§Ÿt^Ðù7ÈÀ›¿•_´¾Y‚ÆÃd„ŒÁÆGó¥u±M;\µPÝÆÅC"npÃúÔ¹î*µäæ4–ÏLÒ¨—#æØtù¹“‰L^4`¡·är÷§0Ydi‘~Rp£ŽàTbuµa‚—À)ü'4ë± l4a€21ž¿Î¼ÅN¢ÕKÛNTª«é¸ÔqçínUº¼ ÿ\Ôþ+Ä×¶ë’’Ä$Æ:I)Sq„*€«LTz‚ÇÅN³–ñýí\X›F^ÍtG«MÒ”žòÔÑÔd»¹˜Ãò®@‹Ôûô­ëHD±Ç‚FzU…#‘äE*ÏçÖ¹¸äƦ#š V±ÅJ‹„ÜÛ»fmîŠ%¹7–R[à8‘9 þðéU4Í]¬®¤ÓõxÅ´ÒHÏõrg®ns[üóÍV¾°¶Ô­µÔ~ddýúÕ‚wÑnWܺHÎzŒž£½"€3†Ï¹†ÒïôŒ§¸Ô,”óJVHDZÝô«Ún¡,Ñ7Ù%K˜ÓþYÊÅeOcšZÕ$ÍÐC©MYP:а?7ãÒ’ãý'R¶0ÞQ2¹†0ãý*r­,W@01Ÿ&Xû©býqSi„ô;GåÇçRõ2O¡`ŒŽ¼úúÐsz{•c‘Çõ¤ÈÇ^Èþ´Ù¯‘—O‰¥hÇØy„w%ŽßÒ«jÚ®›$WòòÊ>NAúÕ(™5Jã¦f ñ€?©¥Ô´[{«gòcT™ŽíØêsTÞ¡ŒMÚË¡áDl¥Î:Äzþ¹-¬7³:NNÇ'µ'~…$j\Í—•ÈÏ/Þ'ÐVvŸaqûÝÍ#•xÀ¼›¶òZŽ×QŒý™oÔ¤ÀÉÀ“’=Ål•ÁsëFâh~BŒóŽ”uZn20骧=ñLCø~¾´Š2H4˜8¤ùƒpp(ÜííJ01H6 Í!,§µ1Ž´ŒBFÌO’})¸Î{}j ¾{«u‰N@þ÷½4‰cãÜK&qü#úÔŸtûQÛ¿ZR¼ž;PÆ1ãŠC‚¸lcJvÐ:ž”˜ ‚zR›wÁ"ÍkÜNÈÇóíúUuk[ïŸ;.Æ‚Jå³óÚ¶ˆç9泯ìvÒ۲à –ÆxïúQa§Ðm¾¤Eדs…;p§œ±rO­I¨Lî° Tm8ȪiwÌd]!'‡¡'ß5"ÄûgÚ œF02øVU¬àù¶5£'‰¡$…£šF*<ÜçÔgÓòÅ)‰Ö#awäžË©©a·iQH} 9Éc’p{T7-¾2p‘ŽG·Ò¸dÝ8§/¢;b½¬œdôD—Zƒ]Ç%œ0i#>c;á•Çlw¬¸¯¤_Ù%âü‘¿šÅ8 :Á+jˆ†9rÌ_£ þUµ”Wþ(·¶™r‘Û³^œ~¾•ÍŠåŒõÞÚž†]ySm=ÛÁâ°ì4{» Iš9‡ÙäÁbzävÇåÍoaBäsŒ×”ÒOAݽƌñÏZp`I♌ãŒSö€AäúÐîoj̿ѡ¼›Ï…¤µ»NVhºþ#¡Z¾áP+1 ¤ã'ŒeÔÆ$C+<ŽºfŽkjTfârÚ†¥ya2Ã{38 \A÷$_VÂAªÖ‡TÔ¬í¦Ûöo$n1#†ùw–Ý‘Õztç&»{%$3<’ãÍf íƒÐJ¹ðõî›y%ƃâ¸äÞኲ| O^8®‡øèzg<ÖdÖi©ßȳ¢íØ(Af$’zãž”BiKRf›ZnÊZ-Ý®·{$¿hóc²sã ;ã¸÷®˜|Ɇ?r²$šuØQ•tmÊHëÓ¿¡éZs\‹û‚ÖeûT¼ª‡†Ýù[bc)I4´f8y$œ^è×l9¦íÏq\ÄšÕý¼è’DV$r0Æà9'Ÿê*ô>$ÓæSó•l¨dn î8ç·_çX¨>†êhÙÁ =éLnÔ)s ĈÛÎæêz`SNÒy$qèjYCЬ µÜÏB€ŸSüÅLN0{¾õ©ýÀ gx/Ÿ\ò?LSè'«,‘˜ÔnI8å=épF}ñÅ#<ŽƒÖÆ•'zPP}h\ž Ž)¼úÓBr}ñM““Á¥AàÓ ÷ïM2úA‚Ç49ì;S ïŠvÁô¨Î6•l{JÙíÆiœbŒûí9+ÛÄ C¹taþ5•{-Š:Çu‘†|¢GÈzr5»=äp.îlüª½IúU/ìï¶\ý¦åLdˆÕ¹?Zé…i¥«Ðçt£'dg2°™!óa,r3潪ý„jѲÌ-ZmÀŠÈ¡>Õ šDïQ­ÈUBs€FyÍVÿ„z_5ç¢.l2 a¦ýù4à¯t¨êü© ÆF4VE…¤ñÌ® ò€êwc?…¼hF*ÊAÒ–­Œs»ŠwJL(ÁÅzf"ô941÷4£ï|Ý©™É @ ÁükÄ€zš†Þ¥µ\$aû¸Ãd þ¦­8”ã>´ðqÉûÔ ÉÕthïRG22m ¹ŸáÏ| ž=ëJ1Æˆí¹•B–?ÄG§=}és€RzšH.)8ô€€y4óp?•"ã sš`+cvGz äR•äcÖ”æ€þ×=ûZVR3P»±o.,îîÞÔÒ&àÃÍb€üƒïûû ›fÒ@Ç·¥5@U OcäLiwoJyëÏJN´¾´Ò2Iý(gPA ÐÒx怊o¼qëKŒ©<æ“–œ{P4FbæÈ7§ûœþuŸ$ÛäyüЏUÇLV‹|¤±ì3YðÃæJ å©Þç}+›Í(¨G©Ó…qNR—AZYÙaT`HÉ!sœœâ¼Žêd]‘€J…=ûA»s#ŒªåX®#ƒŠXÞw‰âÞL€-ÇŽÿgËI´äöØröªîÖîE6áu±1…Ú£< u4h·Œnþ=p§=9ýzŒF]Ošw’0:ÿõªo ²¯‰5'úÝŠSýÑ^f2jrnǹ—S”(Iß¡Ù6цƒÞšHRéJWqÁç¨ ÎGÿª¼¸“æ&xï“Ò›-Ìvð——8 É>ƒÞžA-ŒõFå ×ÐÛî"4kŒg$}ßëT)h6;y/¥K‹í¥pvC·!sëžõf X&ßJ¬9’Ðv©¶ÙTŠ˜äœÐ T€àÿ:«ws$R¤JŠ—sK#aTg§¹« qÏOz†êî`0È~Vúƪ¾£¨›Ž‡<ðZy¢ÔŽkR»aœ.IR=88ö©þÁ©écþ%ó»nö· Êö[üj¾t˳æ.s˜,ÊyíÜU­&úXî_N¸ÖDc0ã'o¿ÖÓM;­ŒhWå÷%©ZÖM"ûRÌmk{$Á"…9Ç\cµkŒM9|ñÛשïúqPjÖ6º„\Ñ+18º>Ǩõ¬È£Õ4|Ek*j0§&`&ãß­+s­ ¹bÛQ/ʾW‰a1<ø8îvAýM;Uqpc°ÜeRÒ1•A鞇=+-oíÞ#d·‹Ë˜Aå¢Ý|‡®Xã×µZû¯wsq5üpªF@€Br&EƒÓæÅ_#†¬1R»QFô(!†8pJ¯·9÷©•”‚@äV>u~Ó¥´ð* 6Xñ´ ãÓ$¯Z\Çp»”[%Cu*üzÖWwd-4-¹-“׃ޫÝZ‹¨Ô!Û$grdeyã‘Üc5.Òqš§ªÃ{%²ÇfÅ›æ|ýÕ${“Ò—*lrÚÅ &í­.EŒŠÉ „ˆÕ¿å›ŽJ}1’+yO»3ÏŠäî.¡¡K¥ P²m à#A?ΚÿÚ&ÖEÓe½/€6¤é*®pÉâ´åRÕ˜Fr†–ÐéšâÒâCjå]‡dj’%†*€*Œü£·súשk‰ $Œ§,¬Åàž‡×/Zû\ª¬ÄI€g§Oq“õ­§× Öïk< ©,Ê;ç#ñÿëÓfºŠ8ã3« ü•ÆqìkÞÂáåì9£Ë­^*§<Ò¼i"êOb+:m M¸f—ìâ9K‰ Äœ‚OãËÒ¢Óõ…LmæH«ÑÓ“ôÅk©;blôÌ„>½MyRÁ׌ù"Eb©8'#7PÑ>É Oosµ—înàŽÜ{ã#ñ««]2,AÊc Üw?þª†k†ž}ó.õ |Ç…?ÃêjU±º0³$AeðÇè;þ•ßO Jõ·8jb'Qþëb´ºÄº…åo•SÏà+ZÏRF ˳j°éô#µeA¤Üûs$Jˆ_{nbår+n}1.®Bû¼÷±YW–ü¥áã^Ü̹¹TžsLfHçò§:þ:ûR×'¯”ÄsŠ‹*z扟ʉ˜ç»‰ü晩4lL sÜ}E5Ä݈n¯­¬øv%ˆÈP9ª-©M-Ê­ºG;P$uÍU%¦>t€by Ïj·§ÂŽLÄ’êÄ/·ýzõ>ÒZ³ÎöÒ«S’%˜m d<´‡«¿‚i\9¦í}âkÊg ¬¶7~´g#&½ (Æ*Z)1F1KÞšiÃ5“F‰Ž^¢Šrõ¢º)i]ÖÇ^ž1J8äÒòsÍ '=3^ÙÊ&â3ÇZÙ¥$SrJ)äõéXž ÿ{0OçÿdjÙ$kÄdy6cþž3ÿŽ5\>$EO…™C–ÏI jC‚¼ãð¯A£È€=1M R²äu¦ãž´ãÛðsÚ˜ õ¥IÇ¥½)¤òp3Ne=;PWóŒÐ{JJŒÖ—çÞ žÔ¤ãÖGæ¸Sޏõ£n >´G¹íUînVÞ%lov;R1Ácé\(É»ôæ WuÛ»W=7õ¢ÖÌÁ#K$Œó:…,݇ ö棆Ť‘g¼&I‡Ý\ác>Ã×ÜÕñódL”µ»‚£ƒÍ*w&™ž9 drhÔ»Žn¼Òíçîõ¸õ4Œ£ŒšaAÉ“ÇNMe ÍÕë+ì‘dT».<þfµý½pNqžÆ²aÚB-äŠD¸•ÊïnUØ÷ÏÐ~•i»˜Î*â+ßÝ\1ÄŠ€¢ÈÏÁ=Èò`mš ì⦌Ÿ0–Øes“Žk^8UP c¯½ç ëZûKlJ£Ýêc °òê²]8ȧ`¤sQ}›WÓx³o­Çü±œáÀöjÞ+ŸCïë@_Vâ¥Ôos¢2p\»£*-zÎè}žå^Òv]­Ãn{pz‚çAW‘g·¸pU8Mß{Œ Òµ.lm¯£)sJ§ûËŸËÒ²ÛE»°`ÚMáXÇü»Ü|Éô¨¦œYR„g³/é±\ÁjZêGy¤bHr§çš»æ2àpHèk5¶µa«e-™Àýè£?ˆíÅkÛË ÜK,,ˆFT¡ÍL£Ô‡È®tëKÂ|è#bÄòqŒûÖCxvkyìî˜>Ð@ÆÓ‘ŸLJèŠåA#Ÿ­!ùy'ŽœóK˜—™ûÕû˜/-Ór “Îhö¶ÿ@GQ×?ZášÚ)â‰6¢d8_aÜ{é]P×=úVn®!ŽÏíRG×l…€ã }=«Juœ$®aZ‚š¾Ì͵¼ž8¤à… zg¡_óÚ“>X$Îz±=M>y [Ж®dÄà¡¿ð>˜¢dš, -¦Lô3ü«ÝÃÔ ýøèÏ*¬*¥ijFÛ\ …8ä;Ô3[¬ò‡ÜêË‚ 䌑ý:™v…Ë‚€÷`GóªcR¼˜[i>Ó9œ#È8ÚO©»'^\ÜÆ*“––XÜ[»<ŽFÐqÐ’NiöÖw·áR%þú(ɦ™i¦Ê&‚Ù£ˆE÷˜ß×<úÙ¸ž-KhÇœ˜œà ŽøúŸÂ¸*æqµ¢µ:)à%!–Ïii}4€&â°÷öÉ­x/"˜1ŽE;aç¯ùéT#M*ÿkFМFzãð¢=Ùü‰bb Sæmzœý}sÞ¼ŠÓU¥yÞç£Ê’´mbúóxäÛ=xý*BJ®î£ëL³£.Ù˱lûvý*p£ W4–§Tv¹cÜ}iñÐc'ÊNj7]Ë· õ£`ÔA‚NqøTnÁAÀïÁ©0ªN*(Þ XªHŽAè¬>´Òo[ ˆX“Q1Ï_^¢¥eÝÓ¡?…G2íŒà߯¥;_@zjdë7D´6js$®3´ôñ¢Úßíà³m„g/SÛ$Õ{MײÞ_ Û ªƒœǾ3ùÖ¼ ¦Þ=ªU ŒyÅtIòÆÇ-4äÛ1®ì)KD „0ÚªrV®ÙÂð[üÀ ‰o­^lÒ˜H$“É4牜騱Ƅc.dB͎šO©A¦ u®s]H‰R=Å¥ ô¤Ž)°C³O£í@'5›F¨>÷µ!æŠÒšÐØû·n(ù±‘Å¿C@$õ¯häŒð:Ñ·hã“CpFi¤Üæ€dšÄñÌžŸhÿÙ¶Ôp{šÄñ - š‘ÿ/¿Üj¸|HŠŸ 2I ãÒƒJGÌïÞšAèEz‡<BAÚ}évãÖ“o¤õ4¿Â4ÝÛ¸e»ö dfšX¥QÖ“fÞsÇ¥;îô4™ xâŒÓ€ÀÎ3@Xñè)Fs¸ñH 1éJ¸"€ÄÒñ€zæ“ät¦’#› çéBÔ¥Õîàv÷¨Ñòï÷û{Sc 1°Àþ?ÌÔÄe¾c’$PÀè8»¹ÉÅ!7LƒH>l\qÒ€\ç8éH}i§ u§ €æ€@ÀRpOR)F@éÁ4‡=zv©ÚÖ ž8ö¤$Ð1{fBœŒdfŒñBĆ(‹,z`UYYãš ™™_aSš±<"á$ŒsíøÕ0òÌ&1°$¨ü«:ÓTàäË£zŠ"Bä\ÄĈÉ÷Í2ä1½nÎOÊ è?ɤYp0<ŸÇ¥:ižIʦÄÈù›=½MpáäýŸ¿¥ÝÎüBŠ©îìÇ$C ¡[* þ>õc“½ž£w¥4…áUBäÜUUPHa¶]ƒ<§®;Ô¾}¤©«[?—4*2Îåî qbãykÔõ²éFTÝ+Üï¹É<~E0ÚÄņJB»?ÙÉ9þ•=…п°‚éF¨žÕ +G­ÄÀgΉ”çýžGó5å»ÇC:‘qv} ¹È'4òý¹úÑœœŽ=)pp ë׊«ŽÃ=:Ô‘Ï9¤“Ó«ÔñôÇ­ ‚ÐQÃp)NKsÅU’ì‰d"':Ÿº}­YŒ¤±¬ŠÙVÚ‡†šzSŸ^*…ÄùYƒØG”ØÎæ­\ÈÊžZ}ù>UÇëOHÄH}Õ֚ؗ«±E/žÛ÷wp”ÛÀ•ä?_OÆ›.¢$8¶†iÔ™‘xü À?­¨Ý@>Äf€Là는„ï±Rè%F>aR‹—WJŽäjŽÇP[Ø–Aµ Á7vúšÌŸO]Bé5c,ÌmÝÑaFÚ’Fx9’·.˜—’=ÜrλÔgqŒ{€ ÑZÂMš§vÑןÿU>3‚r1ŸCXzŒ÷–&Ê'¾7nàã>ÝÏÒ¬ZkVw{³.åÈ/ǰ#òÍ&‡p×g)`ÐÆ–å„Q©{þ«7†­­ãŒÙM5¤Èó"o¼}Jô© ýu¤àÁd¸_yŸÌ ~u­Õ²¹$üÃÚ¯™£ªRpŠŠ0…Ö¹§'µðƒþ²µñë·½Zµ×´û¶(²æÏú©†Öý{Ö¢†q“Æ?J§}a§ÜÄÏ{ Nd³Wèi^/¡à÷VëP[höü¥ñ»æl¾§ŠÄŠ;fU•Á[mùóY98={ ÷¬»-æöúV²»u¶‹C1.ŒÙ8rÿÝ:Õæ–â=OM*¼/lw/å×ÐSp¶‘f*›ž©èj-¬öò+((Ë™¹'ɪ¶ñÚ\h.æ#sùsTµ]vÆ}&AkrŽÒ|»s†¿¹%”¡Ýí#¦21Pïžµ_g.[e¬ÃGÔ®­Œ×7JâGy¤,!$p£#§þú«Z½ä¦“bc#Z¹óÓÚ¹Q«Îñ4Sl–69mÃ’q޵>¬K©e þ°mS¸ü‡×¯¯5jq¾¤:Ñ’²Ñ^•q ú]±·FŽ6…'•Ž~¸©î­aºFIc¼-Œ7B:þ&¹+¼ÑofÓ­\\£Ïb¸9Üy CÒºM.òæé\OFc;x'““ž¾Ø§V.멽)Þ6*ÍáØ%qäÌñÜ?Ïz¥qc©XÛ!“ÌòÆÕPÄŒáú×P8ž ý*½ÊüÐÆ2rùb¾Õ“¹sކv“q~ÀÁwÕ‰V ‚ϵj޹ìE)‡Ì:óÍ çŒ õ¥'©IY!¬Ã8qA<x¥$:÷¦œÜOjI÷Ä|KÔ®lM¡~Ñÿ²5\>$EO…™%±ü4dì?•(­'^ä '‘ëŠPøÍ&ß›4¿ÅÀÀ÷ï@8$ ã8âŒþG¡õ¥ã9"€¸=E#6M;8ëC2äŠ`ûÝM;=‡ZQŒzÒ{ž( G4£“¶¦NqJ9¥¶ ¡Îo›ýP<{šVwT÷cï0ïíRàùpaéO`ÜCÏúÑ˽)¼nëÅ•9cŒv§5@¸Pž§4®R]Frp=ÍSÔU²E“ûéQ í×?ÐÕ¹®b†–A…Q–ãµS·¦uº¹/¼R2xON=qJä½v.Ç–j¨cµUÓ—[@ÅOÐòÓš¸XSc·TM™ËBwƒßþ¿•RA±l +“‚3È?ʱµk xlçºË(„€¼ÇŽžý+d8ôã¬Í@¥þ«k§¯1ÆDÓ}ÝñªŠÔÚ”¥g±WÚDú]©ódϘ•Ç? À­åAÏ\S—…`~lsUnçtŠ4‹‰%}«ÇAÔþ”›sfu'«dí †ÞYe}¨ –oJåæÔ§ÖÈ[eÙfO.ý1œdþb¶î¬–K)DÓË3m8ÉÚ U;k8õ:ÝNUb,Œã*zCWõ9ª9µdUÄ0O¥ªMì²LWøñžj¶½$7WÞY¹’l¡Ù‚0XÐõãõ­ÛkX-b"8ðY$òIÇZ‚çH°¼œÌð;‘½zÐç+£Jq’…¯©æ^$Zôƨ¥£Â³FÙ*Ý'¯µf9»²Š9#¹/¸qƒ"»}cÁ·77&{[¥‘Üä«åO\õ®Zm'S´š(u Ww°È>ù­y®ŽJŽiûÅuÕÝ[ì;oæÒ¯[ßÁ;² bC~uFcw8÷£Ú¯'І+uºX£1«üÙ, ~>µ±zØÏÜ{ž¡2[]Û˜ä älX÷d\7c<ŽÄö®”ŽýýkˬlcŽo*=BâÙ îVS½QñÁÁ®³J¾ñØÃpñZßom­±óü¨”TÕÓ;0Ë›H3䑞 ɒíÀà"c>ç¯ãÒ²G‰b‰¶ßÙÝZ±;r镈«ºn©cyI Äm½‹mÜ3ÇÒ³å’:e v/à¿=3H’qÍÃ)Æ¿¥4“@À³QäHåÀC¸ò*0^£ïN>§¹¨nYš3kó7ì)ì Ø…¯¡.Éyˆ?v5ɦn_”µò×<N?AV•B®Õ\)K)cJw]ˆI÷1#Õd}OÈe‹ ÛX£nÉ©ø»¼uݺ8@à{¯øVUþ›wó–O3s†r‰·eléq$vIˆÙüΩ>¦ºªªj Çsš”ª9¸Ïb`qži޹#“üªaŒã½FO\ö5Ê›:¶+ÛÚ[ØÀb¶‚8#-¸¬k€MS±Ò,4ɧ–ÊNÁ¤Ã ­`Ý©»z‘Ú´æ‘-"=i„RÜ\Åm™!ìÕÕVk…D·}ŒpX‘Å\)ÎJé*‘N×,•'=«ç@7> ƒTiÆÈ£1˜öòsŸñ­÷9EG’@ÜzRR’Øz3‡ÀsŪ‹ˆ¯#ë/š##‘Îx®åF1Í4RŽ´ªNSÕ”•‰ÐóE1sºŠtÖ…6w[±À¦r3ȧ>”ª9¯TçHëŠnŸcN?Γ8☌ֈþX,¹ëqÿ²5múô¬_‚b²ÉÈóÿöF«‡ÄŒêü Êu=i¤;d~4ÇZô$@rJ«x·2 [y–"s—Æ[ð«MŒç"—' õ¦˜šº3´ûk˜ ¦c¶, fMÙo^z}+@Õ û)o LHÁŸÈzÔ‘ÞB…a ìW »ôÍ[WZ¦ZÜpiJn94™À=A÷õ$‚úÕ›LÑy U#'8§ìEcê³Ü"ªù´Qc-ÜÖ¼²KyË'îƒÉÇ¿¥_-•ÉR»±(ܹgòÐãûÍéD“G÷Ï#œñRF¡ýsHbµcÓÒœJ¨_›’qJq:JB9èíR19ü¸¤òIÍ?vš0  `œpsJdÈ<{QÁä89$t w¦’1ÀèiêFxíLÆZ‹9ÏsšV%8“ØQÆpsU/bi0†Ÿ1PàŸL~´=\û±“FNâ;Ö\WRMdÑd‰Á*îH<\qõ¦ZÞÇ–;†0a²‰3ä¨Àà“Bac_p¯4øa[ˆæ–ãýJ)àgv}p; Ô@©Çg~*ý´ßgÒž|n;²À`×.6¤©ÃMÍðñŒ§iýÝŠ]Ç•lK•˜6:}(³–â/7í?$‚w9ä÷'>Ÿã[Iu;„,<‹hòKÈ÷þ•ZX㔕óL±íù·&=±EÎIF[“V ÷[¬ï’þ&•7ƒœcõ…WÔØÛX a‹ÍŠ?½“ŸJ­smsi#}›Í0m%˜0ù{äÔöú¬EV Œ’¿$sýkyjœY—,”’9åÔõ÷òôí9âl¬œc·ü9áy G–â@ÒHwK1“íô®ŽÃO·û2I"ù…Ð6Ö óÀ­4e@Pz ðëb©Ón4Ö§´”ê¥}#ØjÆ ƒ%víù¹ÈÇzɾÐ-®Yç…V+–]¥ñÆÞ21Û ­Ê ³``g$àT_k·6"§ Þ+Îæ’w6qV±GO‚îÚ_.Y]¡Ž0 79™ÅCtfþØ‚êR ¿›åÇ“÷8 þÐUiç*áuXp æ'%Øä¯&£l¶ÖÈÝ–FÞ7ñ€óæ·¥Ïn¬çœ¤ã¯C{vsÍ7•  &#Œ»*‚ÌO`:šÍÑ!ibŸP|÷nY}}ßñ£Z¸3ÁŸƒÍ»,•9ÂõcùÖµ£òâ‰R0¨Ú{ oDlš…7æ8`øïU%\êûó-ʃëÅîI_mª+ªœ4Žp ûzÔ"i佌Ï—䤅Îr¼‚~†ˆÅ£–RVй+Go$Ýù½Mfh;ÚȹRß c!FÜþ8¨5Ö¹h±HÍ#$ƒÁbè;Ÿ¥Xܼ°ÛØ«ChÌZâ@¨ê(QmŠUYª~èö¥"¡(Fy­`Í©k–·â)­¬¾ÊQvH®~w=WÛ¦´ Õ£%â¸Å´ê~äŽGbCD¡+i¨ÕH½ô-ÿ O=sY¾%¹X´—Q€ò«‘ùš’MbßvÔg¸*9òP¿ò®SÄÚ´³ÝÆ¿f•bˆcæ9>Ô£ uÐνh¨hbKoÁA^Tä`àæ ´µ‚ÚIBH¬[.~ï^ŸJDò‚6ùJz’y?JY-Ô¢ª˜é·¨üiÞÚ6y·vМ°RNA Ï·å]ׇ!ú’²òcÏ«sýkÏíV[Ùc±PÆâfØ3Üw?€éþ|66«½† ¿AUÊùlŽœ%“æzXKÉV9e`D$ƒ\Λ§è¯£Â÷©O&\‘ÀÇ#Û'‰õ;™ô—‚òDì"ù¾ñ$Ô¶±%µºÀ˜ÂŒzþuèÐÀNQ÷ÝŽš™³§û¾¤‡Bò!iìµ[¨¢Æî[zà{~U ´úÓ¦è®-n”VQ±ºÈ:UåµÔÊXo 6áØË„ Œmöëš‘âŒCä\GsÌàžs“Œz~B¢® ¤.Òº Y„f—5‹Ûð1K­"`GxX8ÈëÒ„ñ.œÇ´°Ô¼þUÓ½‹grAžžÔnàú㊠A#Œõ¯TÀhÎ4á÷©94 ƒ@ q޵‰âDvYéöŽßî5mžIÏjÃñ|«.åã?øãUCâDTøY’r@Á÷¦¶N1N$ŒÛ€r+Ñ<‚2¼àúö§dŒvAÇ4 sŠn >†¢kTO2XãË·, ðOÓ·Ö§fÇZ¸ãúÓ¸š)—{X¼ûéU÷W¢û{ššÞán"ß±SÀÜ0iÏ m*Êц‘~îzéU¼ÙB™n]a‡?"g§Ö«FMÚe°£‚@8ý+>ò+³tZ3Äþ}¡õxM‹Í:· Ï4F¥¿xÿ}†>ƒÒ„ÚÜ$®W‚XïÈ%œrä¸r1ÇVbÖУB …¶{Ô"ëìVê—7l¬r^OáÚ›WvV/Hüx¤E*y¥ v©è:Ó›8'µABm;¿ 0qÅ!w)2yéë@\lCÇzV~½>qÚœªœ‘Hb*œœf”zâÀEqÒ˜ƒÆ{U{ß3ìçË;yˆÎìuãòþu>võ¤-éŸÎ“o~á;’ǸöíùS˜ÄñyWªÇkמ¾£§çVî´Øn$m+.:ƒ€~¿ª^lÓ2ZÝ®r»‚Ì>þ´šìZ-ÚÇqi*FÒy±>Fçn>Þ˜­-- Š9bšx¶8ûŽyëTàlìLLÌÁrs×?Aù~Uft·²¶ƒÍÌÒ¸Îcr£Ž3þq\Ø´œTSJWRæD“Ìndb ¯ àbª^Íå@ÎìS¨úÔ±’ qÏ'¯ZÎßý¡xªFP|Á[‚1üë£J0Œ+M·rÝ‹M*,O4Jå~PË÷¸î{U]A.٭岎&ìMædíø™qÜqVe“b’ä,P6Üç=;u«Ú ‘HåxUËŽÿäb¹ñSqŒ¤ŸÈÖ„y¤¢Ë0]=´$–®B  ðêÃsÿÖ§¶«`«–›ÎQ¹Æ*calÛ’²¿UYá±X&K™Ü§–w£ÎyQíž•ó-9;õ=Åx«!'¸I£W‘‘-pYC ¸`ztüéÆî`“¶ö†æÜ½8ëŽôÝ!íî#Žp’+2-n$ÜU1‘€z?JØsæPÙÜ×üóCºv®µ1ô6‘¾Öò°1™w) ´cè?δMÌk¨-™#Ì+»Ž>µŸ¢8ËÆAÔú­a2x‡3 åI¸[éöòÛH,ä1ܹVüÀzéßZ·nomâ”ÜH­/Ê®» ÝÇOÇ5:z]ØÃ$MåOÈld†>ßÌ}i’iw±#¬wk$Dr²r;`÷­ªÓ„æýï¼å„êB*ñ/iw†ö $ʱاpÈý3J6ìõÀš0¡ºüÊ~ïãŸÒªÚ3 2I•ã‚Mä1“î’1ÛéÇ¥aO4ñ«CÒ$WR½s’ÃòS\’¦Ó±º¨šæ:‹hÕ/.– ܯmÄgùV¼µ-‰I9=+Ã÷¯{¯,L’9Ï||§õR? »ªÝ5–›$‘­l$cûÌÇùÔÙÜÞœyÚ]Ê0Z­þ³uî–öx\ þ.?O´þËs>k…1¼±¦7}N•&Ÿj,¬a€דýãÔŸÄš¶»c‚yâ©Èu­)iÐQÕ8 ØqÇáTµi 5ÝʪerIà ­B’G׌V.³*Ï{ofãl!‹JÍÓ{zã#ó©WfR|¨u¨]öŽáz^w'–$}Þ`+JÆò-BÜËÚ¡¶ò0Aw;¥Žñ½ÅÃnØx`Þ>ŸmZÛhÄyc·5¬ £L©6å Ëý<]1”6&DeˆçYº‘ïT­tû…ž4»Û4JÀ8ãn9<ç$ŸÂµÁ$AÇ ÓqÇ|ü«%&–†í'¹‰ª¶’ëqAÍE h–7š\w0y’™?1ìqý+§–ÛãB¨ÀÃ8>ÕÕ‡®¨;5vk4§¶qúÍ£.£e ’치 ÎÕ=Ÿlõ5}î4«möí³*2)'ŸLöíùÕ5¾Õ®jW'æTÛ’sžçúV£ÁL(I$¨äœUÔÅNR÷™ÝW ÅF|Ö‘–O0®ãHF^:lì#¸²£HêHY:íÿŸåOŠÆÞ ‰gŽ"€“ž;uª“èìîò¤òÜ8büõÇ9íÆk'^Rvæv1ö\ªü©±%Ñcu¤žYà“Ó¯­I jQJ«1·’<òžaTšÃQ´I ›Òœ`7¯¯l`~4Iu©Ûy²¼KŸ”.Þ‡·O`Oâ*œ¥(ÚâVR½™µ"‰!häÁÎA¦*„@ª»PtQÚ²ãÖØÌÈÖØ#ŒîààOëÒ®Y^­òHÑ«|‡n{ü~uÎá%«:#R-Ù•ÈÀb‘”wçëN`{psÖ£aFN{Ô¦V‚'#<óY:j—»Õ&ÿ§¹=ðjô*3‚G"²´UÝdò‘6iëó?•\[I›BêœÍˆr€ûU í:+ÔcUæÍ^ε&7.qÞª2’wLÂWi¦s±h–Ú©´CýíÈ9öàU·Ð´×'6ª¤õÚH­C}iŽN>µ¤ëÎnìŠiÓVLÈ>ÓI8…Ô{HÆ¢ÚƒòËr£ÐJkT¦z^1RêK¹~ÒF!Уvòíí¦¥CoáÔ.Çü µÍ(Ò§ÚÈ|ì¡k¤Ío:Éöùœáj+Q=h­!6Ð9Á$ÓG4á–ã¥3i…9¯PæqÙó@ùŽ;Ñ‚2  s“À¬OŒEfqÿ-ÿöF­£‘ŽkÄ@ùVYÆ<þ‡ÄŒêü Çl³dŒ{ReNzzq\®A¨Ù8"½É•~`O¥4(Æ)qð <¶ß^”ƒ:RKõÁ§…À bät^òÞ9U¾ÓÜ޾˜© ”;‰Àîj5_´6ãÄjxު؆ÞÂ[ÆÍ€¡ŽQ1úÕ»†(+éTo¦t™#i¾Ï)&Näú(ÜMغvã~µZ{î7gåV9Ë~=©–,г9v@ÄFÌ0YÎjæÒ1ü©ì=Ð…*¨1ל$œt£7#š]µ$&¥(T3@ïÀô¦àç `BîE pØ^”›A'Ö—Î8¦ +Ï­Ï äÒ¼È˹è8ÛDs¦ækmRV·Ë,Hvc;€8<œôçõ«w“Çq§Á{â7çàú{ò1[#¹Q¹ÌGzÁhVÏQšÒG)o9Ü„tVÈÇø~UtgËRìÆ¤ƒHÒM:·¸’Ñ æCûÐ3‚G'õ?eËq6‘5´v°ÈÐŒi…-æ6àÈû¼å_¶Žîm%*cl…`zøöíZ¡BöÇL wõ¢¯»'g£:hb%5º­”7‚ÊâHÖãj’§ '§$c<möœ%²¼[FHæºåݘüààuíÀ⢽Ñ-ï70\’Ä•gÛ´=…fê}§Ë§ÛÙ¬ž]´ckb²¿ ‘Ó¹¨‚M«iE¥ÈÊPMw¦øjà“iŽF–YrJ„\3îH½µbQI„raYÓä>æ³c‘¤§ÛBÓ*7™3µ:ð§=AÁ­숦ÓÜî‰îd4øŸlrÆÒµ¯5)hq·?d£ËßRH?²åŒßBÐÈŒ ‡GÒžî÷Ñæ8"xûÓôn:ù×/ya-ŒÓ4p¬Œ€%¹›œàýÞ2?Ö¯ÀóÆG”Â;ƒ€J±$· ðG§Z–šÖælКE›èZ¾ òÌÒÁ3$Ÿ(È€œðu«Ms¥­¢¤¨ÐY.ö!¸ótì9üj¢k¦×X–;Ûi5¶ÿ;a Ä7ëÏÓš¿£é›U¹º¶ˆÜ\7œä Êç ü)ÛíHÞ4 çCZ •IQÈ놦Yá³ùÖl¶éÝ¡TXÔ; ¨ Ÿ—€ZÑ N1Q+Æ}^þãɲw‹™OËÿ´ÏéXööqƒàËs<¦f‘ù©ãôÛÅOªÈEŬ!ÂŒ–sŸº>ï?÷Ñüª¼Œqj’ £ìˆ‚5•²@àãôüETõ3“»±nÂÅ–îWºÜβ÷œî>½«c8ô¨#+/ÌŽAÎF;óƒïRp@lw©”œž¦Š†ˆvUç¿)òqíY—÷3[Ü«‚L fàHÌpO¯æ)ÖZ¢^É,r+0$8Æþ RåÐ|Öv4FÕ9ÏÒœÛx9íùÕ8¯íf˜ÃêdGhöw,¿{¸È«$–ç#o¯¥.VЏÎ;Ÿ­T¿Óì&¶–Y`FdBGcúUÂ2=ñTæ ut-¸¦Ö”žþ‚œufsµµ$Ó-c¶°†øU@3Ü÷ÏëRÜȰÀòÂŒäý JAíÚ±üI#C¢É0ß3,Kõ'ÿ×N>ôiÇT†øj/FYHî¦?OÒµ÷‡¸¨ ·ö±B£/Â¥ØF8$Ò–²I^LE;³ŠR ’;Ò‚qÓ®h9åÅ&J"žh¡‚I$"–*;×ô¨!Õ-. &’î $gWàfW\ àRóvÅ.8ÉëIŒcŒ× y"+@ëšÏSÞ†\tüiÛ@\Jb˜·jPÙ>§ÒŒñøÔ36âbNßy½)¡ˆÿé/±Oȧæ>¾Õ0áBð{SQB®À0j]À¶œÑrRî9rAô À‚£ñ¤VÁÀ§è}(I”.c¸–éUE‡yF÷öéÒ¦K¸Rt¶i•§èÊ?Ƭ£€=ÅRm>Ù'k„‘ó…ÏCT¬÷!Ýl[Nô °$ñYö:›]]4f,{CïZ 6ŒôúÔ¸´R’bu ûÓˆ#8ØÀüêî‘§/OHÃ6âIåÉ==ª}>ßìú|n"`c¦:Õ†9þª¿"•Yrr˜’¥Õ‰–ä*;îvb«’à‘€~žž‚«›+¹£†X WO&õ@ ØË{bº=£ 8ô¨ZÒÜOÆ5&J¾>îzþ|Õ'ÜË•½[_‡Éþ̲RMº¿ïž‘ïþ~•×BAÇô¬KKoí5¾¼b›÷p1þ^ÿ‰þkph–2 D˜Öº8ë…ãž¼S–¶F•}Æ£åø—u{à±Én¶æRp¤©èǧNxëøUj ›éd'–’d“9?íYÒC^®Û,ü6Y˜ô㶉­“àWoÊx#4“]L99õ1¥ÐVïNžÞK©›ÍBÀn8ãžOëSZXZ\èÐÚ°o-6¬œòÌ }zU‰,¿d¸dÛÑe%•zþ?­Omoä[¤xço$s–õ¡ËK&Tcg¢1Ž}gæ=¬ûœ‚C¹9 x'ߌTÚ”÷öðÚà 1+æÊ8‡¡îFG ­£:ÿJhS×ß‘SÏ}ËjÚ#2-nÎ}ÐÊÛK0]®¼sÈÇùïW•`æX‘ ¨ÙÓçü* Êåüƈ,™-½påVRŽ!@£Ôs&®'ÔÄo<&â ‚ìIÎæØ@8ÜAõãÓ¹ªQI©é·²Ít²´W“níÂMØÀü8¿Zé.¥öìç‚ûžŸàjŽŸs{<{%Á°ÎÍ´ŸNƒÓ¿½k¸Ý™É¥+ƒZ¶8ûDm,våNI‘ùþ55ÄSOxb*ß½ûÀächÅAui4ªWû=<Ñ“¬˜]ß§AT<>·6ww–—1Â"2ˆí夛@zV))¾s¤-„דXz¡:þ—kÕUŒÌ=…mã8>§ô¬< ¿ê˜áU…דŠTâ–§e?Šýï0nƵPÔ¦¸†ù”ï¾Ö# ÉôäþUqãÇ$psúÕ+›—í\έ0 ~Px†”,ÙÍSšKB¡¿¼µvIí˜Ä¨á×'¡5l_À¶ˆó0Œºä)äûU!¦jp±×@ïÚ¹~ÀqüêÅÖ³ÞI2É壮(çwc[Z“—¼ô9ÔªÛDWþÙ˜e֨ι#úV°”˜Ãm`ÐcÖ³“H_84’É"/ðžÿZ³wj×6Í r4a¾RGP=½)×t•?™tUd›™¶ÑO#Kæ8gˆ¦Q¸Åf¶‹ä©k{–F(.NÎh·¶Õ,DœÄß$õ¥{û¨G-¶Xð3ÜVj-;' IÆ×’±MçHeÃ:F<µŽ¹úÖµ¥´0Û,Á~fŒ~ç¹ÍR]FÂîC,q’¥çŽÔ—÷bä,VìV>²c+ÙpEv7*Ñ«Xæ‹…?Þ·vfø¶þSkä[ÊUK¢1ÁÜk ¶¸IíÕ‘Õö¨ T÷Ç5ËêQy’XZÅYç&=9?®ž Uµ‹ËP=IƒOFj)êoB¥J‹™õ!¿´7heò× œ®ìÖzÅ.òm¯#Þ Ê³c ;ÿ/ʶNÖãgŠÄš;²±1"¿–¤NxöéÁ®JrÒÌucÔh[çËÊÈFHMÜ‘n54@Þ6oÇŸjª–Ö²7É|Ñ*8LôÜß…iZÆG"ùåÎþNîžÕszSWcíæ•â 4aö¥HM \“Çãš\cŒW$š:Ò²y¥^8¥"” ›–õ^hªñLÒÜì@6!åò¢ºi§as&wdàã­0òx§c¿­ >Ç­zç0ÌäÒô=)È'´/Ýç­7’1Žý©ïjCpi¼“ÒœŒpOZBK˜ g¡>Ôð½yéQ®âqIóäЀrOlR€bš¬y•Žxç  òM(`úÒ2€»½¨”Å rOÏ_¥1›8ààS€Àé@ òÊÀþ&€Æ9 …Î; h°ùp U('˜™ËbxúÕ—mªIRÃ8u?犎ÒÁï3å2íÈÜäã¯âk:“Œ#y=¢å.T®Êîú Ò%CfêÉ0n\ŒavØ9¤6»)’7G…Håçó/ cé] z-ªm$HçÜãŸ\Tv)8¹ºŠ 3Ž\^;×Rµ '*kSЧF¬lª1Úf­æ+w‰•þâ²ò­×=º¾•¤³Âòç¿à3Z‡œqÐÈ…Eþ½$¸ÝšùiÎAs÷ˆü0)E«Üê£yŸCBÚ³‚8"HÔ(öÅPÖ­ã¸Ó¤ó`IOwÆ)$|Øö?…kã‘MeçÛÒŽmLä¹µ}Np\Z,QRdbØY~ë‚Fã‘í3Š¿§ë\”‰æ_´t œo¸Ï­^šÊÞè6r‘Ó=kXðì~X–)I\Ÿº2ÁëùÓ÷YŸ+‰Ñîo½žGù5‘|e¶ÝÒq,r)àê}:qSßZ]yñK~îÝTÆI‘³ì}—¯©¨áÖàŒR¡R£dûú莎èRWVºê€Nö,¼Èœ~µ~Þú+­Â'!€É 1ÅVŽÆÚä³Ã1U?yc vŸÄqô¨-ìn4ëÓ4ÌdÃ"ýнÿÖ¼ ‰»Y™F5 Ö·FÀ‘ŽÐ¾´æ 7c½5dÆR¬2­G;­´3¶9$Eq%vŽ–ùncê’-ýÄ6ˆÊéÉ©9\gŸÀgó­62‘¼åYVbÑpýɲI澑”…3±ØÄcj÷$ø"µ.##ìº|RÒAó6~`ª?L×]V ¹NJZÉÌk]Ou+%£ª¢ºVL†>‚£ky ´-$ˆÏö•”íxp+R8RÒFôÿ?Öª.uQƒ¸ÜÊFþÃð?\W:îtòÛVM4¾T.îpgŽÞõƒ¤]çhSj—³ây^i$Áà€xúUÿÈmô;ó¿î×Üž?Æ­ZØ$60Z ,aX׎k[¥exÒvêf Js(xã’Eº™ve~U óèzÕ™uE¶¸¸ƒäÄ©–'-“È ’:s¤sjçlMýÏöOô«iöÒn2ÛÆÌqÉñÓš‹Ææ);“W²yR5œomÀdc;qŸçV–@pÊÙ÷JçBµ¸‡b¼¨Üà—$ ç?έZZ-¤P'"%Ú­)r´4äÝÉà $úS3òŽOÒ¤ çÓ4®¹ÇµN…jA"’À“ߊͺ{´’êT„?˶.r©?kƒšcc' Šq•º(9u9Ç»ž-s`®Ãj( =óÏÖŸz¢+ÀÊ®ã麭벨²ò•Àwaø€yúU-FíeexY]'>¬zëÀ¯O ÏΤ¶<üG/+…ÌÔ·‰,mò òK¸öÆ?­uÎÐÓ€qX¶c]i +Ÿ³û¸ÆæéúU½OSŠÑà·+#ÍrÅbX—$¾ƒÞ±ÆÔö•tGm:n•(¦Q¥Ü1F‹•Ù ïn0wcŸÌTÖRC©Fí%¢ÆF:ŒÿúÅWŸûR(¡XmÎ6q“ƒÏ5vÖâSÓ^Œ‰ÁŒdçÞ¹µzD–²&Ÿj̄¡Áv¬{´‰næuÑ\ yÏ¥Nu;ͤ‘ó€{ÃéRXé¥È¹›€ÿ>ÓŒ“êkº9QNUŽ9Ê5ZTÐá#`ýŽq98~bˆ¥Œ2¶9Æ?Ò‹Ø%‘Û•9eÎÒÃØÖLë½Ñ2[…øù¾fü¥q5¶tsJ6°sQË:ÁŒ†g<ë5n#S¶Þæd¢ÃM[¦$ÒOŠcaÚ§Ù[[šª—Z#VÊ‹s8Ás£µ¶{Ä*œŽž¸¢´†ÅY#¶'çõ§cŒ()Í#šõÎq1ŠqÆÅ4çsŽ(6Ͻaø•7Áf¡¶“qÁÿ€5m•8àäÖ/ˆî,Éòñÿ²5]?‰Õø€š„~sFÀ‚¼5YïΨ$µYÜ6à§9n94Ï=!u‰ØåÉäôAŽé^“Øñ“krV˜F…AD [÷²œö?ÃIå–”ÈêTòüÍM·oëJöЭƓô£-øzÐP{ñF;v"Æ’Ø£’œK Ò‘¹@Î"·$zQ¼0ä~4»GçéK°l€BGSÔÐgŒ CœŽx§c¹F¸í\Ø©'w©­ûÚ›°ŽYt€|ÍëÚœ‘ÅÒËmy1¸ŽøéQÛ\Á2²G:Êñ»içëV>Pwóu9£&™îFÒIˆNq»œñ×­SÕHò‘PŸ\Ž?œÕâ£ãYšÀimLH…H”× Àš„¯°ç¢,Ùªy„j¦S»Çn•mOUní°—ÍD¦\ã§j’ a¸RÑJ’qò¸8üª›¸FňòFqTu;‡·ˆynf?&áòŸb{UèÇÊQíX7­çøŠ4 JD¡ˆS‘ÇÍÈúâ(s2*Ë•šö É$l­z·iZ‚B€Ãp?BÕ³¥êÊÐm»–%n±•¸É瞇pü+!VÒçS7÷‰+´3lÏ}ÑëÎ2=«n}6ÃPF ò2üŸº?wæÎ1Ó×ó­'gm4&›Z멦ŒNpË€rAÍs;N“¯K&ɰÊø‡§óý*WÓµ-9š[Y²Äìç¿cò« ms©éì×Ru`# Ûó9ÇáYÞß nìÒ¹»0iò΀6ØË.¶j¶‚#‹F·dl™šÍܳsÿÖü+&6žûL—L;LЏŒ“Ø?túzgØÖ…¾³cmîZI Ñ7ðüÆ:P㥑Ó'A³T“ŸÂØsXš~»éºçc8ßøgð>ƶ‘ÒOž6 #åç§õ¬Ülõ2M=‡àãµbxšüÚi-1É,òãnÄ-´2Ç…mä~ïs\ øÒæß[Å=˜Ó­›f& >vÓƒÚ¶¥7°{HÁûÚ=†´’è¶’•’Küœ·wÇSøUæ[K©¦€ªa׺†ùŒþuËX]JêIôÀ6éÒíQf^£œœgŸ­]Ñí§ºÖ§»w ÈZDV;˜WŒ¹÷ª”,Í#:u|Ël£‘a-™»Ô“Ö¬´ bq·«zŸéXZn«z××i¨¬p›™F žAŸ½Ó¶i²kö÷v6÷SZÝ%©qœ¦AqÈê #ò¬½œ–¡:n:"h òÞíµ‘àµeÉEä/¡ÉéŸJmýÅÓXp’ªËåHdÈ'8*r:FMjZEäÄUг¹,qÆr}=‡òª¯hÊ“5ÅÈŽ ÅßaæNxÉí€Nµ¤d¯©ËRœâ½J»['š£-0Ä£’ÎH'Ó€G·CZ–¶‰n ²†˜ÿ¬‘º’zÕ^Üê« ÉÁv>`l’GÞç¯δ.¤bRÒ‰d'º.9'ß·áQ9sJáJ<± ›‰ ¿f·\ÎTä·ð w©-á[xV$Æ?½ê{ŸçE½¬Vë¶%Æy$œ–÷9©6œžsSu±µµÔÃÖ¿Òum.ÅxS/œãÙsýkl),y?bYÿ¥ø®òcÊÚı@IÉ­Ö7š¹ôF³Ò*%{ÔÚËO—9úw¨’ðÿeÇq·sÔ©­H£pÇ©çó¬¨s6cnÝØVö*9¥B³–¦ºØ´.¥‚L]¨ OË$`ãèƦYÒbZ7F^Å[<Ô‡õIt÷ˆ±·¹x‘‰;UŒþU^ì·¿¦¥¼à{R3§Š¬ZkVÿJPñ‘þµñõÖêVhJù»€ä”RÀ~TœJS]IÃaA"£c¸çTÇê¥4¢â¡è[F§k5Íâ¤Q‚ xË}Þµ+ßCk+jU–Þ\Å9å늑±·9zöªFùä•’Î>Þ¤¾ÑøqÍ?yèŠ/Ž ŽôU8n.ZáVe‚,ÿýÍÿÖ¢ºiÆÈžkùá{æŽE8€qÒ”/=x¯T挊L§àžÔÂy¦pG5â%ù,Ïo;ÿdjÛ<ö¬_7î¬Áòß§üªáñ#:¿2púʨʂëw©;Iîh$™Ù¢p~G×°[ß|œ6xÁÈ>õ餖§vô#3Ël7Mã©ýÚ»‘ò°'‘‘š$Ã) 3UgœÀìò*pTg4nYØ) sž”„69棎hçRS!b*l…#ž)= Z«‘¨'­8 qKœd“žx œÓ4º.=èùˆÁ¨ÉàqJí" `@Ñ»¡›¶£8é×µ0Ny47Ì= !õê)FI"€9ëBûŠ Ÿ^iÁëøÐžÇÓ2űJ\c‘Å)9äPnqÚ— ÁëLÜsÁúÓ™²hÁ 4ãÀƒM8<м:˜n6r@ÆsŠPsÈ=)=9'4€†[XfÞÒ"îÆ7ã*‚yÖp‡…Úh¸ô<ã“ÛŠÓ˜R‡ÀƒƒYOowaûÈ@‘3ÂvPxéßÿ®jZó/ÃwÀ*Ž¥‡Ë‚p}‘ñ«p]5”¿ê‹‰ÝAÿ*Å”Ú\¨i@·œ098+^ÍÖÉÕ¦ŽiŠt`ÃÇçYWJTÚjæ”ÛSVv$V}Bt"U–>/ñ)çóK ‡Ë[Æzyƒ$JÝŽ8áWòÐ.ã¸û“ÿë¬]VÖka¾Ü7’ü9”úW›‡¯NrösV]ºô%óÇV.‘t ì–âN  õ§½nñóg©#¹;k³ÜDÃcecór8>¦´¥¼›Uq¨"5`]‰Á>Ù¬ñ¸Uí/‹Âb=Ë=͇;-€,}1P[ËNßzC‘žÃ°¥¹a'—8VÆrq;~$ÿ:U¹ˆÜIn&S,x}FkÌiÅé¦Ä]>ÛÎi„+æžI<ó뎔’ØE) ´¤Šrþ•eXŽsÅ8¿\*mr¹S)Ú¼ñNm¦s#^7î@êçP]X&¼¾8`ae`çÓŽÇ~[hn@ó—^Œ8 }kV¶ÔoÖ];¥Xž,ÍtxuBzzg޵TÛæ²2¨’^ðšF™õ«½È<ºã±ï_Ò¤}*îÊÖàYJIlTᛎŸS޵SÁúµ¿ö_Ìå““#÷qúùêÔ¤‰”`ëÍW<àÚè ”d¯³1¬õœ»Çt¯'ñžö­¸ŠUýÜŠÙÈÈ?§ùö¢îÞ ­ÜL@*3æmg¿ò¬X4ø…¼SA)ó2Z?0…ÜFyÿ8|°©¬t"ó¦Òz†­Y\‹¸Ê¬då˜ qÉöãùÖ·#ß_µä- ª[¨dY8ÏQÉãžü×A¡sn<»‹wzeŽ}ÏZ¯{miwÔ ´ùãß»T ã¯éMA­ÑtêÞO³Ý3–‰ÌsÆå–‡ ÁÉþgó­oí KE+©ùqoX÷#ÐcÐô5ÈÍv±Â,¦cÀ”ùÆ7`ÿõ«WB¹Òf»ÚŒ+=£8h÷ É4œy~$rÆNpèvrjÉp¥w´PÉÁeF.G·ü뚺ðäVÚ9Ó¬5˜þÊ÷)7Ù¯0™!²Wv3ÉìEwæȤ¤09 …ð¬¯höW1¢ÆæA:‘_ ¸'R…YEù\YÀ¿‡õ›CG½d,¸šÉò’>éŽÊª"ŸgâJ)ÅÂðÈŽd%e•FØÜ „äŠíÄÊ÷F!s:¦3fç#*qŽ;þU¶v—òn¾³³–äFQeb#r¤ò°<jßÛ©i8’àžÆ|:ÐNçÓ§Š=¡ÊyA„ŠÎTƒÜƒ×ÔªXêÐŪ±ÂV@±8ùqÓþµq—>ÓmgŠæÂ)áš)^Úä~ì¬k€¹è~z’k= [·Š;”£û@Û-Í´›™Ã9‘¤8ä£>´œ!?…بԔÎÎóO¸Õõø.â˜F©†'4j3õ=qïW/,‹C·.¨7ÈZRÜôß¿áXÞÖ%ƒÃˆóÌZêv23¸Üê§î w;qùÖº6£4 åB±[3e„Ÿëò<çð¬}ë2êÖu"¯½‡Aih!‰íÑ/-˜‘&@f÷ õëü«N×ì‹•¶Q_¼6m5JÁmôèæ _ÌSÑÀVäðþ&§¶¸·Õ^â ü~NßQôéU(ßc(O•%Ô¾¹'‚zýj6bˆX’Œš§+4ûD¯`’¨cú`šÉÖuç·Ò®’Häs³jʈQyãø¹¨Œ5¹´jkf[ðÚ4–^MÔ¯'áœåZ—wQÙÛKs;mŠ5ÞÍè;ýj®‘=¢XÛZõ!¾TlHHácùåÚ­«¦âU ã‚8=Å4ÕÉEã®*›ò2ä’Фn/gì$Œvgÿ×íPƒxžT.cÈ&V å§ÔÖ‘d#ÚcÈ¡s€úФ» 0nKSŸÐìq§`žXKË!9¾2Aö©¬ÅñóÀºŒF³¶Ö†b3ÜTÚ?±­ÆFyaÏ«”l‹*ó .1ß±úõý)¹]´UziÔz‘Éc›1`ÇÎWvn§æŸn••>—¨¼F(®v«N$#ãúæ¥Ôõ¹¬5M˜ j"†9ÞsϧÚë2 oocýç˜Ë².2wÞšRZšËÔS]JVͬ(¼ŒÒ);ÆAÛÓ×Ú-ֱ̻@v@=ÇL~5rkûK­> Ð$G…Bª =½ú~µFãP3ÅjÉ1w••xM¢,ñœzñUtõhç•:‘V±jÃW]Rm r: JÄà+w«Mh­óÝ?šAèN}*¬c¦\¥„2M .̉÷½rj½ýÔ °»š?0ñ ž§¦k/ŠZ")Ek©ÝÞʰ¡¸Ž3/qÚÔþ• ¶×%<§‘!‡û±súÔPÍo¦46R”I o,Fÿ^®µÄ² %[¢žôª=l‹…’vÞá9Œ`úž¦Š”u(«¤ýÝF÷;,dv£ã<Ò ÝqǽH¯dáÐ{Óqß½ 2sF¦`ŽEaø”¸©æ`^:ѰAãß=(+´ã½ùæ€Ô·¥Én3n ™ Éf×5ÝËó¬"UõUàþæ±WZ¾ÓÞT¼ÉT,J‘zãiô㿽iè·ð¦ Jë¹fhÉéó?ŸåO‘Æ7D¹§$™KPÑ­,®DÑ")Þ‘¹@íô\RgUÒ¤h%¿F?€ôýjÌM&¸æXÔ­¹RˆìxP~óSé[‡@yȧøÔ)>¥F7»2¬uÔcthX:®XWßÓ¥C.›g\BΠ©ËÀã§ç­[_²Nn­á‘VIl…:“éY—v:”S ¡˜4Kå©Dî)ÉÀõâ´ÓÐRŠh½ciyo#G+©¶EÛ‘œŸò Cf<›»»9Û!.>ð9ãò«º|óÜXÇ$èÈ-·¦¯ÿZ²ï ’M-Êä cn½r_¥mBõ$âôFZ§i-lp·ð­ÛK$‘ —ÎiaÊiØQ&}¨{0àú×]âKxîô#=¼¼—ÌuA¿ŽµÈ-¯e¤‡ AƒÓü*f­»&šrX-ÿ­Óôø¯¢†{mCt›2àÁ=:zsŒþuÓ¬i寤\ È$wú×)má[‹ eXî?z6ÿªP§€I>ÀgŠ¿öûÝ3N¹¹»Ø 6O\wÇaüg%„Ú2²³/Ühöód¢´dä‚§¹ïŽ•V ?쓽¼d\\í~U«v«Pê‰pòÃbe‡ÌûÀ€H~µbÆ8–Æ7Œcz†b7}h»KPk] Ris8Gl¬ƒƒcøçŠÇ½Óå¶Òæ[wšvË´Ž›ºʺòF0À~U‹¯È&ˆBd\&&“w@ ð?IO]…:}Ž?ÂúN­¡ê ¨j[®-nØÙØdœcŒWyôR°‰ÃÅ!ÀÛ( Ÿ§cVäxör»8R€{m¬U¸ˆ3Ã$,öM‘»‘ò¶H;NsŽ;ôúR“•FØãM£yf.#û¨$LX{ô>Ǭ›‹X»ìšÞäíVUŒ°¾1øVŠHö’,29h\â9ðÿ²¥^ù‡åÁî)¬–‚•(ËS™[‹Ë9Ý£Ý1 ½ŒˆAÇO”n©w±ý›m,aL—#r¶ 2x=ÇÐÍn·XÈѺ•×¶F=둹ŠKŸ„]‰5‚.Ç#îH9ã€qü릜£S[jM8:Rm»££ŸG·þè¬áOÔc¡÷ª¶×RYÄ žö ѱP.ÍŒñÎyú֕軵e.­sË  ôÏÓ5‰ö]^ÚÚHÈieÞ H¤0#æ$àóýÑY4ÖŒ+Ö+r=_û=³Û;¢XÛ˜dÜÀp1Ž:çð­K=[Lh"Ž)¢E/Œg­dµîß%¤e™2YƒÜ0zíüê l¬ôýr;MΤÄeŠ@AQüL¸=¸ýi8® •µG]ñL¡¢‘dLƒò°#‘G—e`‹¹Aãîjçd¼6š¸·“ <ä†Ù·9'·8©ôVçPšHfÚJ®A“XÊéèZ¯ï(²Ký.Ò;d·‚#O:å’0FHǦ0k>ãà ßË‘ç† ‚øÝ¸óߚܖóPiCŠ•è_ŸÖ­ºçyÖ”g$oÓN騿_I[˹g¶ÔZòŸÜ°ÚÑ« 8Ç©©f´ÔâÕ¦¸Y6ÛˆÙQ¼}Ñ·#=kjKxfæXQ¸ÁÜ ÕuÓ­PwIýÈämÊ¿AV§#Xâªy33K½ž!4sI-Óev…ÏÝ\ô÷ÍK¨êÑZXO<Ö×(ŠŒNcÏoj×äE è8ÅRÔ›n™tÜm7Ó¥%«¹›nSG5£ ßFK›S×78Ï=2kQEÜúDì[‹Œë•$x=5MYÚéë¸y¢´ÈÝŒç·$fµÆ£n0ÌòÇbÆv~~•R•™œõ›LÊšæê)¤Ch³`†RÈIÈàsõ­i­¼VQ¬¶éå° åžŠO'‚:äÐú­¢eƒ4ª¼³"äõª«ª\Ý.l,ZE'GùGלî(Ô”Z÷´,\Aimh¡ã G(«ÆéŠÃ·6ФhÈB¬žj¯%‰ÿ ÔK Ë™CßÜH“¥I¨¤kc(òÉùvåG#Þ6¹’–¤Î¥NVâÌ™n›QºŽæÉeV*²l<ý{T‡Fƒí‹w}~Í6àì¹URG ¢ÚkÙ H ÚQ@ãÇãVbÒ7¶nfy8è3þ5ÕU(îìeFµVï÷ztZ…ÂÎ'+ò!pr3ŸzK­%.îc—Í*#ÆUø¢H"Xã\(è3NǵyÒž‡¥Õ:±é€A¢‘x<ÑZÒÖ&RÕêvûÐâi1ÜÒ‚3ô¯lâ`ýî´ gŠjõ4¸êiˆV=«_†yÞÆ;uFc9áØ¨ûß¶¸ ûÖuî öœüöoý©§grd“Vf9Ñõ#ÑÛcþ»þ&£:^¤£ˆí›þÛþ&º¦cñÖ¢9DÏ<ûVʬ·¹‹ÃÁ­Žkû3R8\ûÎøšC¦j¸ŠÔÿÛsÿÄ×J1œíÁ¥ãp8£ÛHKÇ3ý—©äâ+oÆcÿÄÐt½O ùvÙÇüö?üMtøÛ’(a‘ÓŠ=´‡õzg,úN¦ãæ·µÀïçŸþ&›“«Æ£1Ú8?~sû溆*‹¹ˆ :“Ð}iVD’0ÈÁ”ôÚx?•ÚBXjiÜç•©·ü²µÏýv?üMÙš˜ˆm‰Çüö?üMt…ŽFcâm!ý^Žkû+UcþªØgþ›Ÿþ&iZ°çʶÇýw?üMtÊ9=E.éC­!}^Ži´ÝHJ[gÓÎ?üM#išª¦|›R?ë±ÿâk¥ žOçFpphöÒ‡ƒèsLÔÉÿUmÿÿJ4½W?ê-qÿ]Ïÿ]9^2zPäÑíd%†‚9‘¦j[ òm¹à~üÿñ4‡IÕÜÛqë9ÿâk§à/šÙnO4{iw+ØC±Ígj…r-í¿ïùÿâj¶ÙãžH.#Dt¾WÜ0sì=+­À ÉÎjX:ÅÁóÎ>?­)Õ”¥fcZŒc¢¶2U³ïN'©ÅÙ<Ó½.@5Òq†î!cœÖÀâ`óŸÂ€…;žÔ»@<) ¥+Zþ+™í„p0RÇ Ç< õéøÕKMRb™ÜìÀó “¸2}:δÆHÏ8êi¯Rrƒ*Cp1’3¯Z,ÖÔt-i2Í󂬠òÀsTm¯.m¯îoZÚAî©´1õý:ûÕMB¸îÍñpȈÁAýÞ{ã¿ý*ç‡uýžæXYNõ9á·c¯õçãéÅÁϩم›SIlt0jv·(Î’ìàðããÅa Šóˆ¼âàuã9ÇåúÕËÝ2ÙïÅ(ŠBŸx°Ú2r¿™5…"Þé—Kgr ‘<›”·'aìüEreܪN7ÜߤÔd•ìvOuPy¡€ =qU´Ë™nVidÜrç»8¬fSå)èAÚÇ8Ï ü9®ŽÖtžÒ9#]±œ qšÃB4bú¶Í0õ¥Q«èL¬r1U§½HÙÄA¤u`£€=Ïjby—á™ä1A½”$}[ŸÂ­xM¹ƒ`ò˜a”w¯=4vÚæö•ÌÚD—è!™Dy4eCvà“Ï^¿Z£ªhÂ-îeErÒ3$tfíÔôõ5c]ÒfN–Kk¢«a#RpWx=*€¾º—YŠÚîIÞÖ0Ý9' àqœ`úë¢ï’èç’÷‰¢Õ.ôË`öµHòÑŽõÏ qú] ¦¹mxÞYÂIœôÎ9ÜVEÒBª/ôÛ–ó¢Í á·¡=Áö«¶¤ë<ö2Çæ®åc£ð ×ÏÖ¡Yî‹‹¶ƒdÑ®"Y ¤Ä‡FÌ'#<ðEBo¯m]UÔ*KSòŸ»ëÀüÍZ°×m®{y¥1\ZÉåÊ®¸ÉÇ{õ­)6ÜÙ›üiÝ­)¤f\jqÏ£‰ÏîZá¶*±êsƒ×ŸjÐkhžÓì b26€;{Ön¡¦Û_Y¦ÆÚ Æ ô<{sÊ™ ¿Ù:Hº}ò‰JÉ+$gŽóM½.ŒÜ’~öÂYÎ-.$Šp6³mcŽAíǽbjŠúV·q³"Wz€>à'> ~uûvA/`·g·L¤˜ÆâØÎB÷À­=RÂËS¶7ކO."鵈:ÇÐV•jÆrO«ÜxUtéóhöÚéuh`’o#fé%rØû¿LÕ‡Òm¤0êù‘d tô®Fñ,º=£C Y!z†<¯¨µÜØë—ÊèYÀù[ƒÈÏô¬2z <­µr&{H¥…#ibpFäá†}G~ƒšÐ¶ÝäF meUÊúp8¥2ȇµ*¶ÑÁÏÖŽ{«3U|,e¶É' É]ÛŪÙj7`½—ßT9M¼òG8«Þ&½1}Ž×k¼s\*Í员ÓûÍè+ZíÚHDMoªO°þ´+­I~ó1 ÞŸ®[ù:” ±¤¡ãŽ2¹#§ ÆjäšM¥Ì(Ñ\º…Üëódpz3г6™i),bÚv¿Üãïu5FëA–D ¹ùäÜrã¹\=ª”µºeY>q ¼«Þldä n2{óž˜â™f.ö8I¸Xܬ²T ÷#9©]u‹9`Ž%Y à;m 8ãðM`×WÌÑEöyRTœ¬™ÎAôéÆ×l­—GºÙR@€r}:SU#'±¥3çO˜§ª¼kodØYa?(n23늼u8|–ˆYFÕØze€9ú óXÚî›#êöYËåæÀ£ïd·ʵ Ó쯣‚v¤\1*ÙÃÏåÒ‰An¿}¦4ý’Öö8®™žGll_ ã+N9¢‘ˆøÆv¶j+›(giY³ºHü½à=?:ŠËNOWîFÕ_›Ð‘YYZÝJ_q¸^z Ö^¡u"H–ÖüÊzŒvÅ ÖÎêmÉR“T¦¹ct×0Ÿ-˜`‡Áö®Š8i©sIõkÅÆÑe=|»û•U 6&åw¤x'U}>ÝmíWs·ÌÍýãVG"¹1ógUh¡¤æ”ñ@Æy¤'Ò¹ìtÞãÔŒâŠjõ¢ºé|$Ks±'ÆøRch”ö>µí!Áô˜#¯JP¼ÑœÔÀb¨_.otâç³è¶«û²G¥R½aöí?ÿ\ßú-¨·ˆµÒ<=~©½ Aä?Zá|¡¿Š<25}OTÔõÓ9ErÈ#çhÀ`×¢ê6Qj:uÅÀýÌñ˜ÛèF+ˆÑ¼5⯠i²iZeæ›-¦ö0És¼øþµ¼´k¥p¥Bd¯™¯:®®¬Ó=Šqƒ¤ùY› ¡¶ÉÓ"zpAíIq©\@Í;JƬY2)< †ÝжÔ·“ô5ÈøŽaµ©L¶ìtƒE¸7 6ǯjö«S„éûI#Í£)sò¦t~ñAº‡Oµ•¢f6âK›—}ŠŽÄ•AêÄs] Œ°@O5ä÷ºͤÚXéXr)YˆÉ·Ìí‘Á Ó‘RÚëúÖ“}ZyDƒ?c˜ü¿1 çÎcí^J ZÁž¼*5¹ÜxŽDÖÝÛ1ùžkŽÌûd~•…uoå\%Ìh°´«Hãä*ú_jç/¼Š¯åÓ4E0AÚ[ }÷¤Ö$I"‚8ž=²8`ëÓ<¯$~UžÛ›7{ّŦ›ëW™ßýaÂg9aœ3{8úTÓX²ŒÃo#y| (¡¹#–çý¬þu»E[xÙC Ën㯥=š8ÑšGT Ææ ž¿\T¦Öå%ddj‘³Ô"d%‘qËryöSø‘V,õ›;¦H£b²6?v㪹Õß\E2‡·¨P¹<`óÐò? |iqÜo…âYv–ûø>™ÇéWemP^Ƴ*‘ŒgŽ£ŽÔ',zç4ØÙZ0üÃ#µ9IãÁõ¬öЫ˜~#O´ "ªÞ|ã!¹ùGZ¼Àiì¿{ìOÁ¤'·üü*¬‹ö¿à.VÒÜóèÌxþFµˆ,@##¸íZIè¢\Õ —Ì_ÝÜFà Ѻò:©ç5ÉÛOq§j—v—–VÂݤ2Á½Ái§Ö·~Å!•û;s*ˆ¼?©jZö•ìW‹*唼 ¸?R ·VsN7ש`i6‘Fè>BUVÈã'¿¹"­·Ó­nÛô=I'žrs\œöÞlÏo;½¶ßQ·ÊöüÿJ¿ws¨IiktªÉ9`ˆ8ùNHÆ{àZj=ؽ¦–¶¦¬±™âk‹Õ"þçÔûW3©é"}i V±Øîç¸~ ^GøV‘× åÁ…mÝà†Cæ:w²• û°ÍZ:Õ”è†D á€Û·;sГAúU{ÐØŽU3)< ó$*FÏ9<޵¡`Ö÷—B)Lìæç6(ÈùNÜÆ*ôÑØ\›Ì‰\òfBuÇãÒ—NËBìê…ÑÚ,…ÆBñSíe³-SI• Õ¬mÒå/.(¦(HçqÛœËùVŸÚ —îÊÞìzUI4kG•cä ²qU¿áZ]®ÄÈ7‡nÑS.WÔÖ7] RC €pÃßé\ÿˆgk9á·ËóQ^Së¸p+bð˜ì„I…g+œp3ÜU ^%ŠÎÒ_´Ä¡Òºõ6¤¯Q öTÓoëcäEG“9`sßÛš©yo$7%æÀÊÑð÷üêÖ¼ìq¸$â@YG|Ž?Z¡4÷OóI# £o¶{×fSrè3-\{–le[k†ÜG/G'ïd K{¨@4ë†Ë•>A“¹¸qžqYð*I"¤ÓHŠH @àÿÀ©·º–gQaPVÆðxlúâ¶ÄÆ—´NZ3:£.è‰gj`”=¥#I xÁ‘rÇ ƒš‚ïIò¤BPƒ…“žoJe¾›3Ç2¹ã’¤W§©ErœŽ<²w64ëøx³g+2£p8#“Z!ð:z×.,@¿[•—isµ‰cz-áŒM„ ÷×9''µxXÚ*õ=l%G(z$‚x<úRŠÄ‡I»Š`æáÎ3–<ŠØyœ¶rqØW௣;#&ÕÙ2ÑUáºI_jaêWWE(û¢m3¹ÁÆ3@È>´£šA¯lã’AÒ È§c‘Íç=¨pjèÿ‰†žÿ–­ÿ 5^ÈïY÷ßñÿ§œã÷Íÿ¢Ú€/1ع'ëô¨‹äô9súVoŒÓ«#2°µr¬¬AÈÕåš$·^øQô9/ñ c¨;3”#¶íÜw8ª±/CÙwÀ ò2GÖ¹Cã8-ë›kÀ,¯ÎLFs–íƒÒ¼òÏûDÙif!yÿ Õ[íߟ/?ÅÛn)u®¾Áâ ‘NõälFåyÉ¢ž„»³Önõí:Ò;ÂÒ‰^Ê/6XcGn;Ÿð«–Wp_XAw(“ t6¶ÏNÕä÷öYk~3E·š9¦´SdP?Ìvdí#¾iö‹'ö¦‹ý¿ö¯ì†Ò&w…Y±Îqü]zûRhjç®\àp1íþ?ç5ÿ ·ü%@0L.~Ïöøvôëõ¯1ñÉ”ÜÛZ[ÞEöm:?³KtÒ?"Žz“ž•µáÙ$¼ñö›u'™!:"+Hèy|ó’GZ|¢lô±ÓŒNp)XØgßzó?Ø=çŽuTš;—¶9d°_4tÆ;ÖN•m}§Ÿj1Û_5Ä‘Î.þþç;Cú{Q`»=ˆmfÆ9î1Í)+´`ƒþïjñ}âá|E¡^,ZÇ3ÍÔb9 \çc7Sé€*…Š›¿Ú­‚\É®ÿk²€ÍˆóÏ'¾ÔXg» 9ïÍ;*¼>´ÐN[½~c’ ÔRÇ9Ï¥40'è( s·µ)@Aãš@/{ÓñÀé×â§ M¤ô4 PP·NµÍê':ÍÁóÎ?ýšºLó\Ö GöÅÈÿb?ëZÑøŒ1 px¥ÆIàR…^~´ =뵞p?*3ïÁª¹¡€ã©Ñ“œö*¼Ó¸Á÷¡x¦1ªy¥$7Jr)Fzw3RN>QšÍ¼³C”K‰F ž®*óáæXúó52éI |œVuäãM´kB*UY‘m=æ›*íg%NAÉ*{ŸÄäþU©ªëi{ ^Ç•K¥ˆ»BOe#vCßò¨08<0ÀïÖ’(íÚG{ˆUÙ€•ÜáÒ¼XJ”•_‰u=JØyÑ»‚÷J~׬uhIƒr9|+‚@ŸÆ¯[¦£a¼¬‰·p¡ ZÛÚ[źâD XùkŒrxüj¦¡9û2º˜ÎHãxþµêÕiQµú} 5U8£Ÿµ‡SÓ”\ÙÈn?:ï!Ÿj¿ÜzÔ-§ÜÂd`Ì“…O˜tÁãôN˳PF %°} §OeÉÛ,HÇ·Šù¾u³>‹êô¤îô*KðÚ$†K›+ïßÝl3È Czæ+3ì^!ðýõ‰ŽÖx§y¡÷F¨©µKãŒ%Ò·-WTÓ1ö Ã,C¬WéZö¾.ƒw“©A%¤§ç”?8Õ¨·÷‡,Ÿ»14_ˆ7 ¤êv…á sBºFÞcÜ¥tº´ÖóXÙ]ý¦æÛ÷‰ Ø¡dqŒ²0l`c9úTvÞЦ– »(cTŽaqˆ[ävŒAž*ôO”÷2Ot÷M$Žñ‰†VØù@ôTJTïtŽnYÇFh<ƒÀÇZUÚ§åNÇÿ¯\øÓ¯¬B˜.ÆÝ§œòHÉÁöþT“j×8át4ϵ¤Ý–PXã¶8SIFïB\¬O}gi¨ßEoÖ9„—€OsÒ¶K}ÞùèzfªØ}Û¬V’#"¨rçžA>椺”ZÁ$òV%'ƒíÚ‰»Ù Ú’I’=’ qýש薗0ÃÄÛטÏO›ž>„ÕÛ=V›4šAå3J3G¯×œÂ­¼jêRNŒ1éíš”Ú*I= ÇÒi·Ñ\1™eÜʽ”€zXö>¶¼Ò,¶L¤Á–ÛÓ¦ï]rƒ¼cóÍc}ž;_À¨ŒM³…à1q‘ùÕ)_ChF3ƒ‹õ(Ãáë´•BßL©ƒ¹]ŒˆÀsŒG$÷íXñŒ£¶‘ëM€UBÉŒwÈ?ʽaeäòy5˜–q\jwŸiZEÙ°‘Ÿ“~¹§ ¥ñ#–p½š<çJÕôEªÝÎ鯭ԷF̤ÛV&8‹Àþµ¬Ã-‘ëÖ°ôK«K]: bød€LìÃOzÓ·½¶º`Ê >½:Ñ8Jú¢êUƒ–Œ²@ä‘ýÚ©ö'‰¿Ñ'òÿ–l»”Z¸F ò:ÓNI=ë;´+ä¶½ µ®âŽ@ƒÿ¯\¾©ws¥kv6Ñ@íjïþ‘w•ØFÓÔzûWc<ÑÁ Ë'G¦sþ¨®w]µ–çGaó$»™CÄŒàŽƒ=û\V°kvŒª%{#j;k7‚3p´ ¸žzƒõ¥BÚE‘aJà•cÇË·§N†¹x.5½/l"ÈÃvï#Ÿ'(ÎFAùsƒÊägÖmâ‹È庖ê%Ø Œ€A@_Œ€0¾¹£ÙÎZ¦5%ÕÒhVãÊÙ!9²²ýìéÓ‘úÔúxͳ>sæHï‘îM`ÍâèŤÌö²Å˜ƒ¸å1Ϧ7/×"´ìõíííãŽíT#Ee “Çl{Î¥Âkr”¢Ù¡<ñÚÛ¼’‘³v^=NÎY6G1fÉ òEY¸.-äŽUÊ8ÚF{V5î“ikºíT¬òÔ/§oåúš¸F-YîEIM;Ä»3ÌÓ¸;P•ˆz…¿ ««•2iË’ÚÐôôÿJŠ=/Ì´K‹YÈÝWœ‚éÇó÷¬ýB×R·»ÓÁ˜8óÂŽpBþ´ã}­²R»‰vóR…¢)ùäE-·×Ó¡¨$žÂxe‰Bd—jdgq~”’]]ÀL#óÜUÂäç=Ïz|R9šf³Œ|…Á…ã¨üjâ”]‘ÄäîC2ùsI/ʲø‘üë{ !@ÇjĶ€ÝÎófIŠÛÆÞkzF/{k&´F5ü~]ë6>W’3ÍU>˜­»˜šx,€HàŸZÁ–9ÀR 2¬ãë]x êTýŸc›E©ótç2òPäz݆O:“8ÈÉ®dI*Ï3”b;SÙÝß›h‚Àvo9#ÒŒÇÏ$<nIYyÍ#(*C Àõ½S°¹žæYÐùh¹ü*ñë^‹‹Ôöc$ÑIe%¶„7ÞcœúzQO˜/ö¨#ûßž(®ÚZÄÝB6Øï—¥ F);ºqJËÒ½sËò8äÒdãÅ/|R怌jŽ¡ƒy§ Ëfÿд1»¿Z§z€^XõÍÿ 5cukõM*æÆWtŽâ32ÆA¨t­6-HµÓàgxíãòÕß–#ßÖ´ ”Àµ ž)^™ ·aNzö®oP%µ‹€Üá#þµÓžAk™Ô¿ä3>?¹ZÚÄaˆøHÎr)Ã'$ŠEç©K@®ÃÎ’8 äG´§•½&î2zÒr@=©2À`Óò¥ ñLÉÆh‘‚+1ãéW¥FÇÍ“ËçjòxëB±!UË}ãɨn‹—Uìzõ«‡#¯'ØU eS#Ø ô®|dš¢Îœ9«#&ÏU3êÛ²"§ &ü玮x­-Ûyëןÿ]`ÝøjXÚ|'XÝ™ÀÂŒöÇ#ñ¬ù.uË2‘È@y$'ûÉÎ.ONI&¾}RGî³è'QÓZD²"ÈI· îã5Bù v¨¬§/’»pÀ~uB ~ÔÛ\ÍrAh#óDQ/.8Ÿ©覊[\èDAŒ€pÙÁ}kÒ¨Õ:·½Ï2•ZüÖ²7Lq¨n c4ÿ3p½VŽY Â9Óieܸlç¥YU I<â¼w–»žÌ_N ›ËxÍ:Hc‘JH¡ÔõdSÝ‚¨€~´ß5 (]U±ž¼ž´kÐ¥.^¥5Ó´¾fu-¬¹û¨r¿•]·ñ>£hJêvžz)ÿ]êE12Ød8?6Ö§`Hgž´›¾{U-ºüIañ¤·_C"3 ;UÛûÄŸÈU››…Õ"–ŒÒCó²‚:qõô÷SXWm¥Öæx‚¿÷ÔàýkHµs*ÿeÞ\<(Çv[j°äž§©®ˆF'ji¨=O@·kK+ õ;xå’6Bå#\¶Õ$àýj{XÞþº”:Ã*nŽÝ—gœ·¡ö¬[ÛZ¢[ßÙKdPFäÙÑ[_[^Çæ[ÜÇ*Ÿî¶Ma+ÜÍЩ§#6_Û©ßlÞ^ØÄh¤’ @õëPůaµT^Nìð2<×DÀ#9< VZßܦ·5­ÂB–ì«öb¤–cßv))7¡›Z¦hƒ…ãuf^8:晎 JOÓ¬jS˜,™¢`² 8Î lsùÖ,ZÄrk—F9+rÖÑ u ÇóÀüh„z›Qi6Πá‡ËëTíÖe^› \~ÿIk{kqæd ´àóíŸåü«7Zº{)¤šS+Û²G» `AýéÖ¢Ædm®€¬íJäXŒ‹û²|·Ç ÓõÅT²ñ 2‡cÊ%›Ë8ÎåÎ3Ôæ´Y Ô- Ž] €èÇŽ„u÷#õ­qb•¤Œ‹©4«ŸìûÖo,ŸÝÊzcú~+dYÛ5ú^˜WÏD(²¡IÉë×5Rî¾Fµ¹EYñæG"œŒnÜ㊇M¼òç6WË‘GFçk{g¨q‚GªƒÍ>t[»FT•ÆC\äΚӵÄþM¤ªAó%6ì;f¥··°”“ýì÷¬¥¤ll•ö#³”Mrë”qþÐÿ‚öÐ]a‚G!À92¸Èëéȧ8ú˜sÂN 78ߟô©dº¶Žso$Ê’c~Ò{gγËVµ™Ïj¶z\–¬×‹o:°Âœ¨$cŒŽ@ÐRG·šÝYVPˆó ‘ø|Š+^úhgŽØ,‰&ë„8ÈlŒóþ}©—:\234{QÚ3ÀÈÆz}­õ"Ö¹o!›†äßð¤b +ØŽ™Í`.šþpܲË2”v*Xm 1øŒþ4·O¨ip¼ò܈ía!™G©Ç~*¹Sw¸'¦¨žÁ.,ìáò#ßEÌ`à©öõt¤¸‘gÕ4¹cû¿¼qôÛÿ׫¶*N¶ÁýÒœžÝsøÖ½X|O¬ÃdVÑÊUýA(qúÓK™³J-Æ[èt¨üzŒu¬Ûaÿë‹~Aˆ´`wõ«/}h‹¸ÜEìMU†æ3©~æ@ÉqqÈê8¬uZ£'fÌ­.çʾÙ"Éóü£ŽçŸèkz¨e åȬqëïQ\X¤Ò™QŠI³8Î8þf±î­¦±(çkåU”`‚EzTñ-;ÙØãN¦5k£}¹ ž f_ÚÉ%×™¬ù[÷«v%¤°Ÿ%±žzâ¥n˜=zŽ+šTfíº:ÜcZ 3œÔt‡UyRuPygùæ™kö¸~E˜GÉÁsÏJØÕNÛÈÈÈ;VcC#Y™‹¨S÷Tujô¨â=¥&ª3†¥gRð-Êš‚f}ñ‘‘Ò«™õXÂ(êI+BÂe’Ô'FŒ"­½rkËœù$ÓG¡sÅJ,ɵ¸–çR¶w ŸªàôU¹²5{A®xü(®šzÆèëWI#Ð):ž”u¥8î3^¡æŽ`µ0Rƒ× Ž*•éÿLÓÿë³ü†Õ ñToWý2ßùjßúP²HsQî9Îx©8¨Ücå„!wsÖšÞ´Ò¥@=èäõ¦+ŽRHëÍ+r¿JAÀ8¤9ÎE1\Ïñ`ûÑ“œ:hÁê(ÎO|P2@{RÎ)¸8<â—=È ÿ 2vŒSX¾ÜZ2Å}MÊ Îzb“Œ oÌ'ò¤IÍI’_zqe#£¶N8 rp­ $/Ó .pM #‘’7-þP€Žk—Ô÷&³9 •Ø™ÇQ×µt¦M§s\ÝûíyÉì‰Ö·£ñ˜b5^=¬ƒn!sQ˜·a•Š1êËýE0»¡Ä£åGðí]ŒóSîO‚? F®3ùP®3× Ž1C ¬xâ‹ @: â½j]ÀœK»æÈì:R  b:RF…#ùÎy8õ¦ng)*rßZ1ÔÕÖ•"RòßžTyÅܱ#œî=êME×ËLЬOŸ½íІ<°ÊCz¿•yÙŒš§dz9}$ês68‘¸ƒŸÎ©Ý¬E\\cc¬@ôÇøT×s‹yfq÷WŽç5ZÞÃ#ϹÜ\ŒíÏèkÄ£QÓ—4Ob½5WÝFRØÛ‰¥N·ùî ç¢ðü«j7·Œˆ\¹<¸fÀsíéSÆŠjFª3Ð qBdõ§Z´ª¿x)a¡I4· .U$¡–"C¥Oøt¥F‘'X¦—z²–VÆ¿\Ó®!hå1 ·F@~ð¨æ˜<0Ý'Î¨àœŽ@èsúþU)½.íw¸\ÂÆA&S`R ¹û˜êGÖ¨FˆRå„pdý§=sVlàxº¸o0œ…OáL~?ZÒ ˜}:Õó(hf©ó»ô1dŠ„+=¼™ù‹ÁíÉZµh×QN-¦Œ´J§g€Lõ.¨àiS *ŒÈBëÚ²ã×Ùc)2p¸ W%ßéÞ©78ØR‚„µeë’ÒÜGfNØÙ|ÉzÛõ|€±ÆŠ»UzÀTVvŠŠdvó%“–|uÿõJ°J*Ÿ—’sÚ³“Ñ$iÍ©Ÿr¢êî bTiôñÍFÚU²É¾ ÖnÍ `œ{w¢Êu+6 A+#aqÎTp?\ÔÍl. Ü\.À y@:œúš}N©T”ZW¸¶úî·a3[îKà‹¹²6½Oÿ ½ÍÔ¿k3Y4Áƒ¡ {0äwª:ï –iNfw;ɇOÒ¬]¸aØðT³à=8÷¥îÞÉWÙÉÚQ4 ¾Ô¼ÑÜGp­ýÆó1žÎ_Æ«éwöÂâæÏQ¶Ä#ʯÓ!°IìzÒ³#Ómä;áó-®cáü¦+øjŠòÛS•c/:]ˆˆ+æ 8Æî¸5QQ؈ЦâÔduú}Ñv´žC"áÆð>\ŸÏ±ü ªRA}¼$I3(ó°½G>=ê7ĺdòµÎŸ=»JT—_œd }:é-u­2ømyöØ[ Û¨¬¥uÐå©…µ2-mf’Ùê6‚8_`·ºŽL±8ÉSÜ`ç­]“Ds¡7t?Ä'½3Wµ%Ū\“"¾gž~™«È»ÐcÛÒ³u]Ìã‡*–Ôn”]˜‚Ä6î9Çžƒ&¨ºOp‹g4“4£æVêÉów<×s´g¦â‘Ò=ÃrúŒÖн÷&Tg3á»ÛË[I¬õd u¬­*¾Cÿ´ÞœcÚ¡ÝÛÜêZ…Ñ–0e˜G8ʨ÷úÖ–³oj-'»pÑÊ‘’$Š“ÇCŠÎÑôš%¾.§ 뽕±"å²NC~){­šÃšœ‘¸n£B‘rz@?N¾ôد¡¸WhåR±±ôôïÚ¹¹!k{Ù|Û÷Hã`màE$`|ÀãÔþ•Kû-ÿt·w ~fæVÝ–ÇŸF<ÒPO©ƒ©.ÇOyâ;+Yndi-$i¸ {Ôêzmô)p- ¢E ¬a5GOÒmMÒJî—`©ÞMàŒǧ;«m´Í5†æ²·=¹ŒR—»°×4µ!]VÒ&G+c8 ª@õÆy©µm€òý¤RŸÌV.µáHoîUᆡٱ¶§çŒtè*Ó&Œ8£r³r9Úvð =häM\mÉ=†q ôUd$a”ô=ˆ¬kÍ:g˜ÜN6´ˆy¶Aúg­Q‡E»Ônc—íw¿f*à ¯šHåXŒ6>¦­H5»yز?˜Bmú ƒÏ=èååzÛÝçÔ•â¹B¶ê®Ü˜’{ñÀ"¬Ëm{•½«§Ú’A#“øAþ¼W)¦Ã­xnââoFf´•¸VuŽ:œsÀ?ì-¯åx¼û]6B3˜¦ROÓ®IÃÌI«Y”ê°yO2Èó"¹€o˜'­Euyuug"_B²"±ˆáøAöù‡äk¥µ¼†úÜÉA2’)ô"¥ÉŒ`~Ui²ãmŒ u.¯Ð[íÊR— €1Çðþuw>â+g+2´¹BÁÎáŸÑEvÙbU¸·(²(ÁR>V‡ò•s©»x¾5û1·•aÎßV òN€V´ä®Ú4†‰¶_} ÜJÍ&X°ãœÖuþžlêV@Ý›læànRAàûzVåö— ô»ÙåFéò>®JûK¿‚Y¢Š9™y+‚NáþµeÌÎi¹Elv1N²ZÇ+€ sžÃªw6÷PˆÒEge/Î:W?§jÒ¤Kkw“ ‹‚OEj`@ШŠW Ž2:Ž£ðª¢¢¤œ™©)Á¨¡ þІÎÝ"\/ñüÙ'±ΟúŠK RD0r]ÏO ¬²ÑA+DÓ¾æS•çߟ¯ >i!Uʘˆà=²zæ»1TÒ|ÏfeBr٠ʱµc&õýê¤kÊÉüjÝ”0É#Ï6ðÃÉüy¬ûâ—²àc5͆…ꤱýÞ¢ÙI¶ê'S¸9çÞ¶”ƒùÖ5†>Ø•¡àü«_9SÌ?‰di‚ø5*ÌâuiŽ¡*(ÄÚןán**¨üîg~½xéÒ¤ ÇZo—W¨y¡€b“¶Zp@sœU îo´îzÊÀÿß W™±Àª™7úqÇü¶oý¨X¸»‚Î6y8Á³Uâ-ŸùÀ;òj§Œ ± ÿ­ÿB®~IŒtÇË_*rµŒêMÅØô'ñ6Ÿ·Âsî‘|G£¶HÔ!ã±$JóÌž„“L-×<xü+%Ž•ö2öŒõ˜ÜIš¬6©Å?vãXé¨Á¥xbÒîà9…a‰NÁ“ÎÑœ}MNšÕƒÌà\ÄQJ\pÙÆ=øü+ÐŒ¹•ìlÙ¡œ’1A#F^ÊV—)²#µä,ƒœc뚯íÙ Ä ¨Üs"ýßïuéþ5@Yvõö¤$aTSS´’âd§•"c0q·‘€s×*iãP±(öËríCæ˜ûsÏjå°ÿ-.ð;úÖ|Z¥¥ÅûZÅ*>#0ÁùŠà{ñPͯY[j±éò—G—!d#äÜ6ñžßxP5I_L曑ÎzÖï‰m¬líîLUÔ¡yWÑ•@NÐ:ýsYsCNtí0'Ì7Χ½k”ÃÈÅA¨nƒN™á?¼T$qÐú×ÎK9ÔotϨ£‡„i¨[c>KÈu8­ä%[€§³:þF¶T/\Ž˜ÆkžÐâ·–Kå|Ç?í`çõa[4^w”\o=‡ùúÖ-ÍdT%}[%r Ç…·!ȧ…] £Þ— ª;±=+3ew±JøHlØDŒÎJà)ç¬Øõ­C2†„HÅʯ*HèzÝc—;sÀÇÒªêñMi+2oeV (äg©«‹Or¹£Ë©™csl#–kYÑQæm±¹!Ï=‰ëZQ ™@‘^ÏÝAóÿgúVdPÚ@ÇÖ\òªãAìß™­ƒk(‘b¹æS©{‘«{AX¥&Ókqõªw:^œ` ·—´ÜLÕ§‚v;Û„í¼àÄSRÊ@”tÀÞ:”Ò&÷Ñ£IydÁâ¸V@~aƒ´Zµ-Âjx¸‰Ë¤„GÜà“ÔŸÈÖ“Úä/<²Lí}++;s« <Ž ºáÈ=¿Ï­hŸ6è)©'~†Äeµ¨d|Æ8äÿ.•¥3%·”™Ý)¦¯Z‘I³,ŽÍýÇ$§ÐûS/¡c#åne<#äj»4¦Óž„¿dû‚/‘‘Bý@íSAlSt“miäœtÿ?֥ݞW<ŸÊšrÝñšM²^îåy¢ÄР2¡ãpô¦µßÌ¡x·}ÐÝ ü*ÐT'= šdð¬Ñ…Cµ•ƒŽô] öÖ"´[×d™æ³®¬ôÂûg#ã9VÚGåW<™äâIþ@?åš'êsO[xãMª£n1޹úÓ»]JS’êQX/"…†§ ˆ¸ä8PÎ}¾kSN‰í,Ö9¥2¸Î_ëéV”ç¢ñQX®TÊ\w‰`Ÿo=Èáˆ9úsS\@'„ÆÀíë‘Õ}ÅL¬Lcµºõô£šìv²9msMºÕ"KC(ŽhVGFÜWÌb»Wuêr+ ñu9ØÌéçÌR+k 6ÁÔñÊÀ×{qoÊml«•uûÊ}ùé\­åæ§|®‘[Möîêã¦ð¸e`=1øšÞœÞÆ2Š(]ý¹/$¸ŸN0]™„$3cÌ9Ü1Ùþú«ºCµÎí{ui+³3¹8bÞÎ:tÍ_å¨1ÏnX# z·ÊKüwõ¨Ó\WXíç¶ó$`€# s·¡íœR•ž–RÜ®o¬H{•K˜3Ì‘¹=Ê÷ü+.ê%¿Ô/n-\1…"h\?‹?þªÒ²aqË`^%V*a”ü§ŒñÏk&ßt:Î¥4`™þä¤.x#¿¥L+5ù$l¦£‰ZPð±’Èvþ}?Z”¸’ñ¾xÈe9òÍgXjÖÛ$†mѸs¶2¤=?<ÕMfãN¶³™®!6Å„wwlçð¤ÕÞ†^ÑXž :ÖÿO‡|x*8aÁÈþ™­ 6®ÐO±RkL(µ±¹Wåeo,À°¤k¶DÜ©é‚Èãõ5<¬¢¶)êÖpÿiÌ\áå]‘ç àäѧéNÐ2,À´dí$tU¯VÚúQVCgVƒÙô¢¶¤­²Mhz ŒŸzyRÎ+ÒßÃÚAçû&×õÄ…'öŒÆ—j¯’¼~•ÔZz³?eæ2ÞÅo4ÈòÖ7TÚÀ~b³®üg5ÄóÛ»Û›µÑP:ᆠzs]2*¢€€ GaKžNjôcî«#kðð” âXîd½Y‘Jç,yôcAð…˜…%•dF ¯´dª¼ú”q]o¥7# ûzS xgËÓ/ ‚vi®cÚÙ|Æ|õsMÿ„V&—Ì7R™¸;WçÃãîãŒq]'hã"ŽØ¢ì,cCá«K{Ë+ÈšUšÒ?- IäûóÖ¥}«Ë™nHŽ0„dm§óÊö­elçƒç@!Ns@Y¶þ·‚+HË´ÑY‡,ªnGS‘ÔV…¥»Ã5Ä’1f}¸bz€?Äš´X08éõ¤pIõ¢áa¸,['¾)6ž£®iå²0¿^iAÇ Œç4JGÒžYzSC ó@©'8®wQ'ûfã·Éõ®‰˜q\õû¬N:ü©ýkJ?†#à++Œšw9Ò• žô»nyèqž¾Ôìq‘HÉŽžônùGÓš@1ÎÄ,NúšEAåí` =ˆïFD³çUþu.îzUm º•Þ6… +á{†äUcp²>é§eÝéõ©îdÉÊzõ5 © ©“Î{Šòs VžÊ'­—áoûÙn/ éQM›‘1Â0*qèÏéDص *¾Åqk9åºÔco3uµ«ËŒã>Õä%gu±ëÊmXç4]ZëNžå$±2ÄŒ|²ÎÜäõ­&×­ŠÊ^+ˆS“¹GŽrzv¨îl%°/QäiF‚=È ”9ä:÷ÍL÷ÖÒŽ],F$‡†8ãŽ8ôÒ䛨çåV³-[Nê|Ëiî0 d7ÝýjüwñÊè’+$™©÷¬ô©ìäŽÿFHåÈoè}x¨äÔoŒ¦KÝ<…Æ$1pÃßrÆ~AyÃTîuÈÊÃrõ‹´·<ðy¬]7SÓaŽY>Ü¥O8|ƒøUÆ×ôÆ#mäy'¢óXJœ¯h›Â¢Ý¢Kèî6Û+J<°£€¦jñQå’H'8¬ûû˜ÎžgóPI1ÙËv«Ã$Åé”*ôsŒúûÒq|¾ðArɤKÈØ*êÀ÷SNbrBŽÞ‡ŠcÙ[¸Ëÿy8"£k!Î&˜?ð’çúT%Ñ£sµÒò¬FF#n'ØV}Œ>m›J͉f“ÌS·;~”—“Ésk É4›ÝkQ"UÂíáxàU¿unZ´aêT—íD1C*Ÿ¼±úVV¤"òÅæC7œœm$šèr: àúŠæqÄÿ*¶`:Ô¢D#ïnAgv²– Ä©Ã(«d·*F8éԊÖ9’á™ö‰`!K¯”ƒ‚ƶ-§ŠxÁR ÆJƒÈÿRÑèK÷dÐð¾`ÛΕ"ØÝqúÓC€{óUïüß±Éäî,Hhä óúdþvÔ¶¡W’H?J]ÜmÛŽõ‡¨Öéå\A Àê[,¸úæ´£¿ˆÛ,Á\}€c’sŠ9”“Ð.·ykðÓ6Áížÿ•NÖ¤(¬‘F0yª×S>Ô†{=yŸÖ®ÈÆ;RwÝ„\[»"V»x‚/Oº3ùÔBÅc”˜ §_ºÇöâŸ,ñD I&ž6òM7íACæ9P„,›¿ˆ i2œ¢¶#HîðÎV9C1=vœTÂuŒ(h&ú&Gæ*x™„*”`“ßÞ0 HÆ*nÞƒI%©™Î@Ããª²óÆ —H²›þX(ÿixüªÄð¬Û_ý\‹Ê²çQ& ˜åù=Æ÷¦›èW´’Ñ2§ö\ц[{ûˆTŒX°?… ¯kbö°O °ÈÛ›)ƒÛ¿áZ^b±%H9ô9¥!v€Nió;]ŽSR÷¤“iâ[ËKhá¸ÒÝÄc£|“WbñŽšqç‹‹|ÿ~3ЦÇk zSdŒJ :ƒ“ÐŒÒj=‡j;¸ýÆäæ•9ýÝô$ö Ø£R»cö5¶¸@$›k²8û¸'߸s¦Y9ùàLŸl‚MÝO.ãc .H¢eB”¶mÚöØüϲ».B‘dýâ2:ði%Ôìî\Á+,èNÂU¹ÇU?ʹi ½‚[hã¿—”?8Çÿ¬ÔÛêÌe†{vn„yaCsœ;ç½kEés)á%º‘ßÙÜE{h“ Ênãs֔Ďà¬k»;WžBþ$·Ô$¼YAVSʈ€£Ư¯Š'‘Š_Y^æ Ž8÷àsÎ*].ÌËØU¶Çgå$yت3Éw®Zî+‰Ž -£g/yµ°;øÎiæ7ÝG&âÑ’3ÅTµñš–×Ù¹òå–va¹HùxiAJ7¹ª£QS“±[PŠiæx °f`­ó …L7ž{v¬ómnÒïK7ˆÍ•F#ëß‘]„:ÆÀGí°±`?X–N>Iá~{:œÕ:lŽ/ªÊ×’fMŽšÒY![.ü’ nhÆzzÕƒ¤Äe+ߨÈü«H:C©ôÁRž§õ¬¥R^…*Z†½­&…öu´­ÞÕäBWæg3X)­­úÚ†Ž(¤e>wšÜFCm“]v¿áØu»›d˜ ¶}Åvä8Îp*É> T’ù¢»P× 2Œ}ÅVÜWƒÏ5ÓÓqJ[™Ê ºÄdù·ƒXŒ‡ŒcÞ¬hѦ™bDW¶ú‚£ ñ}  ãèj´¾“ír¤×qà™vîÈÃ1Ïo¨«3xBû•I ÆÈ“®>éç·5mÁ®[“ô6SUÓšSßKo(ê¬GÝéæþǾªó)8 „gô¸õÐïµ îÞ(’5ŽyI‘Ž à1ީϦͧYG,è¡Y¸Ve°¸ÈÀ©T õORùª.‡fáõÈŠ@ñ(ÒÉ’ÃØdÑTôy"KÝ26,%û 3×ÖŠÖœ[*2²=ŒÐÒãœÓHâÒ»NÇ=O‘Åäô zPBìÿÄÃO>’9ÿǯàäš¡x?Óì ýcÿè˜ ÖW̶·Œ³g@v±ö¨?³í¹;þþ7øÔú¹ÊÚÇúBtükçÄÖv·R[ÉÖôlGÅy¸ÉMI(³« MÔ½•ËÇNµbr²ÿßçÿŽm.Ím¥`„ƒæ¿\}k?þÛ?sw×þyTköú‰’¢¸ÜѶ &r©Õº»7žQWjÆö›·û6Õ¤$“d““Ò¦ÚÏ5‡wzúv‹c2œ Ä­Èè@Ï­S>1D!žÆx£)¸î IhãÔI^ä_º1îuäÑŽ ÂÄ«<%ã°º8Ø ¹‰äöÅA/‹"û#Mog4‡Ê,¤•°@äu'¡ª‚çJT2i<±œ`ŽõÏGâTY RÃ+£¾TlùÊŽ Éå{zÒ°–k+•tO5‘Šp›U'?í!\èʺ \.9ZæÛW¹‚ÞÆrb÷3Æë•RÊ¥û“Ž0*FñMº#J`˜Ûª’ŽHPÄc¯CÔŠ7c ŒqÐRáp3ÀÅsÓø¦Ú)\}žf‰ *‘Ž®8çî}ê¬^)hî/{y J‡jV<çüÃŽ´ÄΨ‘Ó4t8ÇZÓÄ8Rw³œ#ÊÐDr÷SŒqÓ$ŸjÜÎìÅ!8¤Ø7”m+žiq’=©€†1×®zøgW¸>‹ò5Ñ ãÚ¹½AÖ'ô)ò5¥/ˆÆ»÷€èA¤+¸š— 85ÚÏ<\ ¸9æšä"=°=M+qQ ß1=“Žzf„º‰¾ÃãM‘ÎOR}i³6Ô [ýiĪ©%¶¨ç>•JI ¯¸ë\øªÊ”gN¶šˆ›S‘žy§:œž€œÐp ëPÞL"¶`xÞBƒùô÷þ¸¯š»“æ>š)F>ïBŒâMN_³Bv[§ÌÒgã¦+V8ãB„Àª Þ P…0zãúU–F=:ýi2b­ï>¤Cº"Q\t#éTot˜n‹™¤„q,}¾£éÇâk[i<£šgr$œÕ)4S6ç4ÚUÝ”bKQìÄ{ØñžXôî+VÎÈ®™^6b7»71ì=*û[$¥XtppA¦l•ç¾éºœÄEr»™²øsO¸*â"þÉëõ¨åðµ‹B@ʺŽp3ùV¼wi÷yVèAâŸó3 Ýèæšê[Q{œÌzE¥…Ôbqr±ôUnB·×¸­ËkóþyÈwíê*üù©å¹ëÀaÎ*ŠÊÐ_¤.¡”îtä? >ýi9¹½w.•=¿x2·<9ãxù—ôéVÒx]CFáóÝNpj]ÌOLUItËyʪÑÉ×|GiÍKi½M}Ç«ÜϽÌZÍ”ªÜ¹l§`OqZèÓ¯€+Å%–¯]L'‰ò±³ >õº\«cœtúUÏeb&´K Ð»ÝÐúzÓò?Ÿ­4–#¯CÛ½*'ËϨ]̬¬gÝ"ú9ÏÈ<¹O\u þtÓmöhÔ ^eꃄTj³[9 ÉçÕaÆ@Ž6cøœ ·´ gvÅfEvòj7$h~DUù³ê¨©æiGÌR5<BK}3€W°”¶\E5k½‹|’ÓUoce_:?õ±ò¤sÇu£dDfeIñ3g?ÌP×J™uIsÃaáS*r‡KíEÌ™  ‰‚<¹¾e rCw¦ÝÚÅ4LžTlH8,ƒ­S–_&é%…\(%¤„.JžäVŒP\ź˜õôü*¤š³Lq¨ý Ÿd±š1ˆ"bGÌÁ•1ô{‡iõÕ— öÈö¨2s¸Ž˜÷©˜€»‰#ëC“¹q«.æiÑàOõRÜ)ï¶B(“'ÜÔ¯vCWÙ¾L‚sëMùXFGzJL¯i$STÔ•~MZçþ“HfÖcûš‘?ï¨&­á@;»úÔep:«‰Ôo¢0¯oµ[[‘q$ñJѶ@dîãúVŒ:þ°ñnQlÀu\EPÖÇÞ9ÆŸÏ­XXJ¢MúÍ xj·gI‹Òö,ÿnjã­¥»{ƒU›Q¿ YlcÁ9h÷e[ðìiñʲ&à#ïÔSÐŒñš„ÒèW».„ºÌ÷þ#k›ˆ|¢±íTÏUíÓÑ¶Ž†ŠêDÖÇ,ÓR=p‘øÓ‚äSHË PxÍuœAŒRç¼ã4Ö»… √E‰l§ó™öDXª‰0ÅIÎpTõöªìjµ…›L’›X ±å‘¶G®8ïšI´Û) «ÙÀ꧀уŽßÒ±GŠ#ðyR<‚C|ªùd¹UÏ ô©‡ˆÓOÓÞdiž[UÙHùW Á#<·N´‡s^kK[ˆ„s[Ã"HW@@>¼Ðm-D¦cm˜P!,dCÇ5&³#inŠÐ€nWqÈóüÍV´ñR_X´ûœ¼›~Á%²}6šh6£µµXÂ-¼Jq´(z~§ó5Ó´õAØ­önÝ·ÊgÿÕߨV9ñ;¤–îmJÃ4k#!`J¡Y0=Χ¸©‡ˆüÁ"-¤‰ Fv"E!UT6x<ä0â“b¹­-¤2´Rºq —U‚py#ñ5dÿês\Øñ ŸÉ†äMÒ óXDŠ­ #“]0¸^;Óqžô0ÈÆ(íJFO& µx­sº'Wœ÷?•t{9õ®wPÕü«Z+Þ9ñï”zÒŒ÷¡q€ <9Wk<õ°É"ÔžÔÓ6Dväç½/?ª:Šï•Dàç#=qQ9òE²©AÔšK©³³d.ÐÜ÷¦&UNÒxç½w ÄqØR“€:œ×ÍWÄʳÔúl>hî»éתœŠº„ÞX+äDÁ·÷Ÿ·åÖž¹»g21«•ؼnÇ'Ò§1¨P¨qÀéí\èÝûÚ½†Á9• ‰S‡R1ƒÿש†ölíUY· 7#¬kódýðóo ßÊ›CWÙÝ'¯ZBÁFFsïKxÏ4c «c¥+€žinƒŸåM wzŽæ¤P¨ÕíùÓXÝ=¨O¨õÝ ™#s—P}ˆ¦ˆŠœÃ!dSÆHçNŽ94îM–Ä"á—‰Ñxr S¿UKˆ.ƒ€ŠpqÈ'<ùšÓQ°Øö¬­N(äm›J„ _â|€ášjÌSRµîjô9ŒzÓËsÒ˜>Ѓ8Y@î8& ºÔí¬ã-!㢠¤£wd_2ûÊó[{tlÊÒ£­l*ü€xžæ³4«bÌo9]ßÂ+TIçÿ¯W.Ãz.V8z€¥4庌}(ÚG$ð§gå÷ô¨·btÝ"– Ò$Ix3yhsÓ=êͼQÛ°F0£ß¯½R’G¼¾Hã^-å #öéÐ~uwiàƒßµ\’Z3I¤’CˆPs“î*½ò+ÙÊ¡I«jW“ZÜÀ±œ œþ#úf›qªZËm2U¶ž\pHì?:J/¡Œ¥£E»ˆ&l˜Ü®¥Az?Óa(7Õ!všrÇk¨ï‘íÚ“éMTbþÕ)Ë«§šo˜ã;ˆ9éŒð)îÎ)ápNi†Uc…Æ:œQ&æî8®Xé €*c§õ¨®eEŒ³ñžNO¥ ´ÖRÁ§.}rhÀ Õ Î/¬HççqÿŽ»ÎqTîóöûß;ÿè€dz¦BZî<}¡?­gÏ6°'"ÖÑ¢ Zc’?*ÑÕq‹^çí ýiXpMy˜í$Žœ<í} s6º›K/ûúßáJSt˜]Al‘ùls„ž‡±±Ã¨îý^‡Ú¸á/yhtN¥âÕ‘ZK˜ltg¸]Ñì‰Hb:£8ö$œóiwcy¬ä[•ÀRËûÀzàæ•¬†£ Ãnò2Š3¹z‚0ßÒ¨ÿÂ/ndÞn¦9`Óp¿>píÇ>˜¯ ‹Ñc¹|ÜiPÆ™­c‹#]Ê üGF[ͯ%±•lÌii™Š•_Ÿî{ä“Hž´U!æšOÆ¥±•O”À튋þ8w« ¹·Fq (¤(É8Äò©Êci#9#ß9«‹­ÊC)HfTÃDø‘'†aF“O·bLÆ=Ò>(PàG| ÝŽ‚Š4T@1@Õú€Š 6ª.ÞîŸ4Ȭ ˆï†Þ(ؾó±ÉéŸÊ¥”ò;Ó·8 $1€@Q·îô‡Ó“ùÔigyqCGÏʨ9ëüªucž‚”¶N6Œf€+-…²LÓ-¼+#rX = 58RÓ­! »ZRO9 bsÎ=h"‚Øãšql|½èÀm'šæoFu›¯pŸÊºl2zšæo>]bëèŸÊµ£ñWø¶qÖ›#mˆ‘ÉèrM8ç±D¤¼»²6§ë]½O5’¢ÆÜäã­U”y’61òŒ ¶HÁ בì&c“™ÀÆï¥pfiÙu=<¶’©Q¹t,”íãŽ)’‚ªYˆÜMLÈnùª· ‹u¸‡3Ð7Í|ÿ¡îÍ»l:Æ!öþ\ŸsÜþu`° ¤Ëv Ž”â8ÆZM„säDùN0wQŠe²·Ù!gË7–3O¼eû3ƒî6 zž= G©ÇNÔÕía«Þ×#™Ì´¸Ý´d(š­çúCC3Fƒ”ÎGN{Ž?:¾Ê|ȃÇQU&Óà‘F«À p)ÅÇ©¤9v,²“÷Oj¥;ž†¡´C?g9b¼ÎsS;²)>̉$®0³;ÓÉb¥?×pê5d\r9¥q-‡"|„g5Jþ4+Ä0òyaÁQŽqë×ô«c!ºçÓ³@²ÆÈàípAühº¾¡+XË›XHm¿ÖÎàí 9oCíQZió\L×ZŠ«HWåÛTl7Xkéo"‚®õÆyü+¥AöÆkFÜ¢\_ºV[d\fL~#ñ÷3Æ¿2¡N)á7(e?Z “õ©rêÌmmVä pޏθ<‘p0ÄqŸ^)ΈÌr¡‡¡–ì´d~"ž@÷“Ô­-„ßii-çX£—™2sžß¥I§Èïd|ÇÞÊÌ»S‚y©ÇÚ1óF$þ SÓ¥Š.m_å‘d݆›‘N×V6öœÑi­‹žJÈ¥Z5pF0FsY·:m¼Ó`C)Ë>UúûÖ»±Øv0NGjϲG¹¶]™Eo™Û»Qæ9¦îÑN-28íÞ;Øw³ùŒßy‰Éǵ<]ߢùR!ÛŒoáúVÔq…¶:PÀ.yÈôëÇ¥7%°*]Šð¼n` ¦yOZ°p=»Š£5«*î¶ÁÈCÆ>‡µW‡YFfŽheWCµ¸Ï#­O#esÛI3Bb¬©õvþ´íÀ¹Eãªç‘Ågi:¹‚FFsÝŒ‘×Ò©˜î%3ÍI…¹#'ž•£†„ªËx›ê€€ ’}sKµTœõ5…£ufÉñÝqž~¦µ–â?!%•–2ã8f¨q¶æªkvXrHÂóL+Áóè{ÓÕ»Œ@LÄrvzT/q;M±FÖÆB¨ÜO¿^)% œú ·pù­í®­´çéRý¢&ÈG\Žäâ³nÐLÍ»väP>ÿ•ýŒ§x`s³ƒšÓ– ÁT“èK%ëÌÆ(:‚øÆ8ÿ<ÕIb,|Ù#’@AÀ^ŒHÇ­[WWܰGœË0~\ú±þ•r+eSæ>CÁ=‡Ò›šŽ‰$§¬™F [‡ÌòâŒÂ5\óïšuôsE§Í'žÄ„?}F1ø ÐØƒŽÃ ª:©-hKº®ךÎí³¦5¬2 Ò X¡‘ n¨£$ðxæ¥9ºcƒÖ¥òC©Y#°"«Iiå©òex΄ÿNͤm6º §TC.p)$‚â5..]ÈÚøÁý*’ßÉuèmŽ:gv ]ó[FKwèFUd;”ûŠÏÓu¦vŠå6Hªã£n9ü*æn•Å¸àŽ¥»VmÝÓÚ_ÀÓ[4‚EØ +¸L÷ãšÒ:®V'R+tYkãÃy|±#G÷†IëDzŒ3N¨ ä®FG'’1‘þÉ+3™¾ö"üù¨”A¸•³™vôewÏ÷½Í JÛ9Â×ê^Ëm!†3Ôg¡ª²Äb}ЮIåצ}þ´†è¨ ÐJ¼H©Ð¡1pzÒLÊèŽ)â“*¯‡é´ðAúSŠöÉÏqDÇ*êFAéù®ñM ’û¯ý 1ÞÌŠõA¶r>ò|¨èŒÑñÆñùUÉîâò' ŒÏ_þ½gi8[‰ã\ÇQëZ+òŽòhÒuÜ=0i–˜Ê4¨ªw0t¦Úåm“#œTô)½M½oÛÏ;h¨ô5?m,Üqô¢´ŠÐ¦ç¯œÒ PG4½AÇZôÀÝÖŽ‡ƒI·Mçµ)]Àâ©Ý¯ú}€''{ÿè®®@â©^ÇýˆÞý2-Ta-OspŸÈÒƒóHéK©ýÛR>zÐÕ'ÓY¤./n—'8þUæfÞFôogbæáŽ£ŸJeÉe”瀄þ†ª1ü¾ÝÿßÏþµbcŠCö™ßÜHÀƒÁö¯>?5|ÖØní´ý"®¦XâHn©f ‹{¸xdY"|meÁüÿž†³/ôçÔ¼;¤s´.|—§‘µ•²=ø¬ø4-Rk7H‚ë+ ä³mx°=ýkèáð£…ÞçK#ª#9ÜAÉÇøQ‰p‘Íݨuoc\¨ðî¯å–à0 +Fׇ!H,[·'8é]-…³YéöÐÈÛž8•Žä Uc$4î¼æšN}qJW@Åv{曜Ž:ÑŒŒS¶Ï4ÀFf…u†\çÖƒ@è)àÃñ÷¤ gàœóHWœÐeGzV#ÇZ{FF)›00M'Lšç¯ˆ:ÅÎxÈCúWFS¦9®oQ‰›Q»ÚHm©ÀVÔ~# GÀA3C€2ÜBÇå¨_Ö«yR9g@Ü8À<çm"hþóÜs‚+¹ô<Äî$ÄŸýÒxª2Á ŸY# 01š³9ÞB!é÷ÈííML ÚÃŽ•áæu“jè{Ù]9EJ}Ìä¶»³ÏÙä|©?¡§E ŒÑN†ðH8?CW¤ûÜŒóQÌ‘ËóÐ:(ÉSé^eî{é¯x†Ø„’hÐŒ#ü«èÿ_5d‚ɵ€'Ú³m´û‹uóàŸ÷Žòä$®=©T[A²ê&†LàdeIúö¡.ÄÆÞé2(–ð¾>Hr¹=ÕÆ+ÛœUx"?fC¸Ù<99ëS…Á,Z¥“kzˆyO—ð‹•$0Æ)ÙQÐæŽ É¡¡±ÎGOjnàÀãŠU ü]éÛUzœOA[¢#\í f‚SœcùÓØí\þ›8PFqÍú±Ù\íéJÏòœö¥*  rªúƒ¬2`s òÔ´x+\¸Fí%Ôçìä¾*k¤Æ Ç¥tä™ã8íXßcÑâ&Á¶>¥Oøf´~ÙvFæAÀùHÏFéÏùÕÔWfwI´ÉUÁìsBîÜp8#©¦Ã4L¨ë’qØÔ¤Œמ1Sª õB®(cŽ@ëY“ý²)%’ A”áH]ÞÀuà}êžÂçígËò®’~ðÅ>T‘§²´orÎãœsƒÒ©\7‘~n$0J¡Ž€‚y?˜­<.:€J§Oi2"rW89ÁÍ}‚ïR-F(Re;AlFÆIè?:–Ý%·‚8‘”¨Aò•ÁzÕîmn!Œ4Û$­Ÿ•½ý=©Ñjqa•®¾të¹wÌU™{'»"ù•±—ŽDŒš¤ŠHäR‹Ç>õ ” »…>ð#µ9Þ-ÚåB:m-‘Ï.7Ñ•ìêlÅÙ#SË“—"˜Öp°EeÉPüàµg%…ûÚÆñÝäoºýÓÚ¥]Bú8¦³W ×Ê=þ•vþReMìÑbH|¤1Ç$ž*¼Ú,‰_' ¸â¤·Ö­V4I7Ã!ê««,SŒ¤¨ßCRîØ•mŒ¦´¸ù™1Û÷AÚÿ–zU{]hÚìµÊ3îO(éô®„&•úk3¡ÐØ¢rÇ­‡¢ÙtLg)·;E´-c)½O^$g‚=)qš0zŠï<ðŽi8êi@õ  (=ÅP¼'ûCO8ç{ÿè¯ }*Ö¥`=ÿô@ Ô—p¶ÿ¯…þF” ;ÒêKƒi×zÿ#Hn-ñŸ>/œqú×—˜|h裳‘’zT7GýSÛaþF”ÝÚôûL÷ðTw76ÒÚÌ©q1ŽÕpz\TïÌV&´b,­È<ùkü…L éÛúÕëñ¤ø}nðŒbO¶¸…äóëL³ñ”Ö–Ïq$pM?ÜŒ¶wr@9ÇBG¿Zú$ýÔp½¦yéÇàPÀéYv~"±ŸxšXâ`I$ü r>µ0Ö´ÖX±yï 2G9Ç9¾¸¦+¢ð$ö£%MQ²Õíïu­­™dŽ(Õ̃ܰÇè?:Òw_Ò­Hƒš\àô©JŒÒ€â‹Ž{äÒ€JôµX¼W°Š}̰˜_m+v"F`¡ˆ9=}éÄn ûúÔÄäyô¦¨<_99¹ÉÉŸKòÅGk o˜†èŸ³Ê2PõíÇj·å‚OïUoΣ{©íò.¡!{ÉÊÿõªûɶÓ"=M2æPѤi·.ÀÔ~5pß]Š•ouŒµ.˜X2ö(sŸÂ§ÜÇçY·Ö‘ExFˇ`ªÉÆãôcö¤o s‘ò°ÿ'Ýòì¥x'}Ë!¸­e­Gõ´ÿ “Ë|r²|§ðÏZ²¬K{{õ¬ìÐ8µ¹ŽÇžÔ‡9ÎîµL$’Ä~P£“M÷'ЀA9éÍU5Æ©G”€yŒsÚ´7(V,xÿ?ΨiÊÒ,—8æwÜ¿NÔ.æð\±r!nWÊhîeÓ†ÇR§¨ÿ>•“5£%öbö7yqíÆÃ‚Mtr¨ÚKàMd»Ã,FÙÇî‘Ã$8Ãä{3E°¸#ðªP7›©Ý?'nÔõþ´ÈõU\,ÐMÕsLÓî‘Òyˆ`V àôàJi;t‹eí€rÄæ˜ûvü´ c”gÌzçüiä¨P qYÛ±•Ó+Ÿ˜üÇëPH±Á€«¹%³ÇÒ¢bcõÕ`+ѱëëLº8¶˜ü?‘®7Ì®hía”ºM¼3 dÛ8ÉRgñ©ÿÂ1c”ÚÓ¬i´ybO”…%”}<~¥hØmò?å’óøTàç85ôQÖ(âvêdÇáÍ>(&ö˲݆1øñQÿÂ3c¿y{†v!¤c'2r7qÏ V×nÜúÐF21øæ­‘COÒ­ôéâyX”XÆöûª œš¿ß"py<Òñèh…#¾i?\ŒsFGNÿÊpy£ƒùÓ‡'‘M8VÍ(àšw4Üçñ¡ŽM%Ï4w¥ šç¯p5{’ØþUО„W=~?âir{å•mCI˜b>ºÊÃV«ÆYÔ qéÞ­gUF¸ž+,Î)ÒM—•ͪŽ+aBá†áùPÀ!ÈϦ=(9u^½iÄJÌßuFXóÀ¯Ǻµ!º¸k{9%íöªtWn¯pÞAw8ÜI¥;Q»í|¤ ì†B>Ÿi@¦+xÔ¦(v5{#)§)Ù­©…“.×êñ4Kqs*á[x½[Ýòá²MF1»®¥%.è?•ŒKXÌj­¾%€$šEµŠÜ‘€}jL2žŸ^j;‰6ï3tEÎ=M=ÊåMÝ•ÂùúžW”¶Ú?äUÌçž3UôûsªoÈwùß>õa‡¨ÅM¬ÞÑD3ZCp6ÌŠãÜsUÚÆ[pM­Ë…îIó/çÚ¯:îé÷©DxS’r®Lf×™žnäÒadQÿ-bùÔÕ‹i¢¹æ)•nyÏÒ§!ã8úÕiì-ç%¼¼0çrpiÝ=ËrƒÝX5+mä©ýäÎ{zþ•eJGDûª®f½…äsÇ,S,ÞX;VSƒÏ¿­Mð‡)wo$íWóÜtзu(j]Ç™WåHÁæ³®,¤·C%²³…ù¼²r?*¾’Ç(S£njb¹TÆr‰ÏV’–²ÐÇà K Dä…ÝŒe¿Î)`Báã•68Ù†÷íZ>D%ƒ²ƒƒÁô5͸egŒ*žã8 õ­\Ô•Œ9GT9nTHÉ.bqÁ zýJ°XmR1õÍg>£¶!Ñù„à‘ŸÄK«Ö·u(ßòÉÛùz*‹7¹\ë©x8<Á4g$Œ*µÃse`ŸéMóZã ½b®e)Í-…½uŠÕÎTgúñüª8­–Hжò>÷B¾˜¦VmñD€G÷^FlãØUåaÇ#ØÑtˆŒnõ"´rÑ“`á¹êj¥»³Kq0RÏ$›UG÷@ÿ±xÆÞ).cU8Œ†RqŸJf¸EîÙBG´d`äòZîl¤ÔH± 8c–9?BNqH™2ÈÜvƒSïÀÉ#’)FJÍßšÎ÷»'Ed…ÇÞàsJªXqŠ]ʼÍ(Èl€*lÊh^?ZRp>S’=©9ç¥I…æ§Ó@[]Ìœš‚éGØæÏ@¤ôöâ­1ùzUîCJb…NÓ!ùû"I¤µ$1NÎý yQøS`iîf#zŽq¸v4¦:±ØÿN”Ùcy#ýâ«r8aøP¼É½´±aclãŸ\F 늤ßkU>IÈí \ùæ– æ’2LK½O̾gõŸ)/™3"’CÐ)8ÅVÓbÙa =[,GÔÓ/б˜»¤`§ãϽ>$¸† ¬ªŠÊpGM»jhæÜ5D²*¹!‘qîW–Ò6PJ ¹Ï¥XŠd‘ŸQŽ”K–Ù¥v¶"Ë{d…J¬ãèßãUÞÞMÇý!Àëȯ°I#éÅV”œç>”&÷QZتÂàŽ$FëŒ~µ–ñ]GrÒ¤±;r=Æ2yíZR@¡Û-¸“À#¥EÌrù •ö§^#]t£MjÙÉR¥H»EhÌÉm®ÌŽâ5"E\3?*A=>µ è«hœ!8 ·3»€@èâ£sž˜ÀV2«Ìõ:áxED€NBÑJ¤ö+ŸåLkˆÿˆIÿ~Ú¬|§1îi¥ŽÓÉÏjoRs÷Àúä:Fž¦G½O’8/¨º½I­æÄ8-L@(ßÔóÉÇQ]¼*önEl"žFyÅiÖwgtöÊÃÏ'?ä ÷cð£îaÇâlM"Km!±T‰qÎ ó’qÑ ©ÅvÎà%µÃ,¼Dø9ùxäÿ¶+^]6Îe!í¡e'%YÏ_êIüh{ 9d–°°ô1ƒþzÊ©XMvÞ GŽöí’O!{#8Ü7uéÖ‹[ÀÏæÚÌ¡3» ¤n ¿Ï÷qÏNkZ; HàhVÚ%ˆŒÂúU{M¸‰ÐÚB…ã1–D‚‘‚”ô¦t¾&ÌŠ-ä ­¶HŽ29Nr ¥·×Eö©k 1É’YÆR…”ŒjÔ‹N²…BÇk<Œ ~”A§ÙÚ¾è-aŒç9TæÙhœuõ¤$Í(ëïIŽ( ‰æ â7Íš]£õ¤À9ë@dµ†¥Ú§Š ®9 50jçïHmZçìÿ*ߨ1šç®ò5[¬³ü…kGâ0¯ðfrÀ ;K¢™µ6m}ÍHë™PÐ>´Ð¸ëÖ¸sI·5·,¦•7&4Ï¥G4Kq#†éÒ¦*Tg õ¦»œœäšòîÒÐôÛqÕzŠ^ Ø$2Jœg’qþzÖâré‘W—c÷»qüÿŠuy`eû³H<Òº1ÇéüëJ8WËŒíUÀÈ«zÅ nÝÐnmøZSRlQÀãØ^£o úŒp¿^j…Ë4÷0[`”HÿAZ rN@ïøU _ͼqÌÇåö^ÕQJ×..bél“ކ—lûQÁ(ÏÒ€§©?…Kd-zmp; mäi³:BËæ{“UšîIäÛj¡±Ôõ?•4¬K•‹¤ay4+®1Ч â»4sb9WP­ˆÀb¬y†ïæç  ÆÏœŒ*M¨§¦)êr¤ž{Pî¶-'Ü£&—lÿ¼Ç'÷ãm¦˜ÉylqÉ:ô+/ó{Ë9<ñFÜ«>:;QsUQ¤e›ýƒPK?{_ÌUÈdŽa˜äG㌟ʞ%‹~ÂWq+ßRæÒÕCË"ö‚K!ÚJ¿"/ =Kª‘òç¾G& k(CnDØO]œgê:αkÖ·Y|ÿ,å\ñìsÍ\7òÀ¿¿·`;¼Gp&‡"}”e~MH›L øWG@ÉœOÒžtËVL ÷Îqʤ‚ö N@Kçõ«Š$o¹ëšM¾¦n”`µêRÓXÌA·¬mò±àÕìéùUM>28+Œ`…#¾Oô"®‰6ç€i Nö?0[ÛŸùk Ü=TsW€U;›­gî3jÍЬã¯sþEhí$œÓ“±¬ì’Ô¯tÄÂBÔ£œgùS4kžG85!f“š[j/”£žqïK€zb£Ë?néê0¹$ñƒH7$ämâ¢/JÊîiã¹'¥O‘ (9FæÌÜÊÓ+ᶃ°`zÓH¸´Þ¥Â ‡¾ W—+qž†Cõã\[ÜÂò,28‰Jò-œn«5–ÙÁ9-ŒïCVê‡*Ñܘ© Ç'šr©è2ܳÛDÌFòy§€ÀÉ砥Ѕæ‚«`|Ùãò5„-¯l#-änË0žþu¾Ã®psMIUãŠ#&šæÔ祖êᣆ_•|ÅÁÇ\úÕ£©<f&EËãËŸÇŠ–î=º¥¦0Ù‹.8$µ¡$QJ®Œ€îÎkG$Ši¨«Áw5ä·B@J£L`ç¾ê•îÙ3FQ{²üÕxîÎBôÀ¦:áyІB.̧+ÿ£;˜HÇ9â¹ {éΕ¡Æ.˜ÏsqºB,TH#µum.|‡òÁ?wnEg&—¤ææ->;ŸŸnÕ¤$’´ŒåÍrÛ®Õ'œàšå/µ‚Þ û ±„v¨[æW##=±Áí]Iw(*-”Åäÿ ¾Ðdº[âÌî]yM£ó§IÅ=B¥æ”I4íZæ}> ›¸•RQþµOž2;T—º¬ˆ»vÌæTŒ„?Þ=sRØÛ¾Ÿ¦Åi$&TŽ0›”†ÝøVV«gæÑà‘#0L¬ñc¨>ŸZ¸¨94Eçnxg¸¬íGX‹MuûD3˜Û"G¹wvkIÁ䃜ôúV^­e-êZGR©p²>OðŒÔBÜÖf²Õ]m§[¨VT¡»:àÓ.§ŠÖ&šW ˜ÔÅŽÒqϽfkqKs¤ÍHZB¿*¯$Ð’æmDt:…¥é"Úe“ÔcóKƒ©Ç!þ"ø'éI¢‰#Rö½ÁTÕ5"£°ã>cgEærG÷qE;DÀœj*á±G©ëƒ­/'éIÉÀ§r¼W p Áâ“€)ÜSHÍ&áž•JçþBVý§ÿÐjñ*…Øÿ‰•€²üv1š‘É´¼ãÿAj”© }†j-LaìóÚàè-S8-ÚåXŽ\q^^?ãFôvb)Àÿ<Ô7|YÜqÒ6þUÎø^ÓÄqjW¯¬\±·‘÷¡ÍÛðà é/ú øÿžoÓèk‘Ç–HÒújSÔoäÒô®" XyIó‚@Ü@Îç­2×Ä0›4’ê9b¸ #X˜áˆÈŽr9Çj¾b†M>8#äœm#ÏŕǙ悜JÎ’;€ÚsÓŠ÷Ò|¨ãoR)uëBÑÌŒø) 8ç§¿çD~ Ó§ÀŠGvfÚDÙoqÇN>ÔŸcÒÒ‰š%‰õe Hï‚ ¦ ;LÀ‘H³÷¤‘ÈÀíSŒdW¦‰lŽ[Cc#+£\Ù€ Å »±éÍ_ŸU´·¸H&r² Â’< ‘ÀÏj®|;¦olDÀcŒîíÎ3ŒãŒÔÓiVw7bi¡ËŒd![2:{Ó6MfÕ-m®@‘¢¸"°Bã;¹þ:ÔqøK–=é;0ù¸¶p ztέ›+V†w‹t0ãb“ÀÀÇãÅA‰a&8âm›>g'å`  d_ðÚ-ÀW,‘2–Pü (<|Œ}iòx‚ÌF|¹ b¬Œ6ãî㎵,šE”Ä´î,»IÜz`äåI`‹2ˆÙŒŠUÙܱpH<’}@¡ ‘rÚkˆ`¶q#´ªŒJ²ŒÜ‚G#*kXŒô'G—em7š±È\0+ºBBã8Àôùiî÷4ÝI´óÖœ[9“vÑ@Ä9Ï]5K¡ÏUÿÐk£ÜÍs·oÿK¯øò­¨|Fþœù]®88?)ÁBÀgÒ¥™s®z¯…F|±jáÌ黩£§,«x¸ ´‘ŽO V»À·*ÊH,îE\bG@síU¯´*Ýt9öÜ+É[ž¤ö¹[yû%Á*|ÖùÇ~€*º‚qÓЬ‘‰-æ;¾räîô ñüªS}pG,„&å+:þ5lPzdƒŽ:c4Æ%é¯z¯š\ˆm˹û«¸~´ÒÚEGû[G_nMHÜ–èn¢ÎФ q$í´zÞ­Ç ¢Ô`/®fá/Vì^­öļ³…Ý¿Žq[ÝOnŠÎEìÿZÒqi+)ÛÝf‚¨CœuïPÜÝÃnŸ9$ã'jäþU»¸¹RFȧ©?ãÚ¤µ²X›Ì—sÈôÿëÔï²!¶‚[¹ ·1íôVëW£cR@p*@̤zv¤bä6$ñI”’Z²å¾å,©“È>àÒÛÝÆð¦æUÀÚsÓ=¹¨e¾– ¶ ÄG„ :c'ׂ*~-/ì›Iöúæ®Ì§IÇX¢ð„`óšŽYa·}¯ \Œòpj§Øn¶*GtÑàcßK•Üd#·RXÓ56îÌùÛÙ}FÔñç¯<Φ…Ã.Tçøwj!ad¨È!NF>ï?™¨N‘1°Ã*€$Lœzf„[”–ŒŠ{Y<÷’ÞH¤‘F#©ª×ÒO”©pëµÀŒ:çƒl:´”FSìò•1ã )a Ú”)*ùÞTe˜÷nƒ…i «êE*iÊè€ÛZ¬i ›È`»±ÅG×Þ¬A Ê2¼× ää6sȘíO’À)m‘ Pÿ 0ì uµ¼"ã#p•Ø’$ãŽÿZè‡,åcž·4/Qô%6¶ó€Æ5“=9ª×dª [—tvÜ+@ ¤»¢«ä©ÏOj̸Žâ)`ÚJ<•9'$s¡¬êÑt¦âΜ-mNñz޵køÞw)ÃÌ9 í'S.£•$·ûkÇçLŽõÖ2| 1-ŽüqøŠ³{û«)Xr0ÏJÌ벿¼µ§ ’).•Ë:ŽƒùUÌIÅ6ÞßìÖñÆy*ä÷ÅHsg9õ5 ës9µÌì@±šF,0§oãþMJg®qL€“n¯÷³’xõ§™[œûâ“ßS(®âãv6(ÏzC–$ýjM»@Á§Bxâ‚·ÔnÌŒ¯\Tâ5¸h ©Á||¹ô©T6áŽÕVçMŽ}äÊêÃ3ëDmÔ™yÀܹNF3ÁéU.Ýv­¾íÒIžïç'Aì.cÃnüõÈm£ÿZJC†TºrÆ=¸è«Š+X­zš3ÙOµ)í“Aàô Œà×yÀ!éKÚÅÏATîþÓ°òüv¯ Rº'ûJÃýçÿÐhº‡ß³È÷ãÿAj“o?…2üÖõÜè-SÆkËÇüHÚQ›0„véQݨ6wÿË6ííSg9öàCïQÝqe>rNÆþF¸a~dlö*^i¿Ú:DP‡ G–À²nSŽpGpk ûÂW-¾H¥†I¸¤îu'<ò^¥uâ=5'˜á8'ðïU£Öm$.ÒBÈ2É4eŒ¯NÕôvGK©’¾ GP^ìy„0R‘`!!þèÏË÷ÇåWt´û¦¸2¡gWÂF…Tn Ó“ýÚÙ‚Hç&‰¾GPËêGó·iåqþ÷LzúQpÒÚìäÐchIáyZq¼t^„Æ@#šs /Qùõ ÇLÒ`˜¦6"Gw`A$žß_Ö‡qÁ_Ï¥?€:Ð1ØÓJ2xÉèÏ¥9U”ãn(Û¨¤*2:R•jc#P@äf½½¨d;}é0p9 ŒW=vûRç>«ÿ Šèp{ƒ\õêíK :|Ÿú­¨ÛœÃð2¼Šæ63Ç9ô¨ÔF‘ÃÏ\ÿX ƒì+#QÔ!†i- ý·Ê.‘ãƒØ}¨ÆÐöÑ^õ¬g„Ä{ÚE]KR۩źxc;Æ1¸ã?ˆÇ\TßÛ·q2F$Ë!8ÀÉÆGåX‡ËµVŽç ’o?3ž~POaõëZ––‘ý ½²¢ù!“nüˆÎ6çŽx­y5(ÓKš,õiÖ©-$· {Áz’ÇlCq‚~žÞõ£g§$`K1ó¥eù ì*½’o¥Ûò“”¸^éZaXð3úW$ŽšqÓÞ¶-Ê£Ž˜õªz” ¤K€@Ú9U×M§'¯­&ÌŒc>ø¢å•Í]ÜtУŸšuºIQ»qç$àÕXí/l‰É¿9 GLöëVôâÊÙ0¶²zUÝŒ¿7'å6¤üÇ8%!ª#pO¿z~ÞAÏæiͤãŠ@ ¨ÈÅF¬MwÃgšnm¸zÓ™l“ϵ4!Põ§¸^Ãd€8Û"nR#•Ë®-íð1»{gŒþEC˜Lr?šFÄsŸ¯¥gÅh“js}¢}…PüÞ§“^\lÙîÓ”›¼UÍY.b"OÞÌy¬3ùšŠââx­Ë¹¨m<ÃÖO3÷€’=¹©·mb1œóÅg¾šÑ¶ÛrªŒzF?*”XÞ±ÏÚÕG°¦J“[–ZAô9ôÅ"üêÝzñP 8»bk‚ãýßèj9,æG$¥9#æçò§e{Ü—BT^HÇœ(>µ9bSåQÅP´I^åÜm˜òQ—ýGZœË,L‘ t.­? %¸¡- ŒŸ60qNF2Iêivƒ†}½èùäBy¥¶¥2ŒI²[>S.Çÿdpi°Ä–äw cdŸZµm‰¦ŽvœŒûÔr«YÂÒFCÆ;HÉ_qZAý“(ÂÎéis,ñKp€ò³c¡-ËùrÇ.Ö*+9ÁÅgiþe¼k"ÈË»<Ÿ¥lBñÊ¡ÐäwS×ÿ­DãÊËU9Ÿ,·²ïRP®Þ¹^†šì½v‚;Šj¢ÛÊbpd9»}*F‹*{šÍ£Dݬٟ*#ç÷)uR]>Õ†Mºõ¦è3ƒTo]ícó6ïÉÆùúÓMìRr–Æq°ƒ?+ΟîÈj,Ü’úãñ ÿJž]B ‡ç Fâþ ÿH“Ã"©¹aÐðÞüUÝ¢ùªnÊmÚŸ–üsй®…p éøÐ9…ð«¶Ëy$²ÁZNpxÆ>˜oκ%S°åO{"”Ž8 c6š]¾¼Ó€õ¥ Dl=;Ô˜Í! q‚k»ÈÔî½ÊÐWJT+žº†â]RìÁoæ(eÉóÿõ­iI)jcZ.Q²+à3TL ÌžR—RUØ“øÖ¢Úêóä1ëç-14ëà»^ÙrOS*ÒÆOÝN:êF—½ï™ZÇ}j‹qfÎ1ŽsŽ? ¥.qk k}î6’Bɱ޹ç'¦º}7Q…›e%˜·;zûSšÓRûÂןyWšñœj¹7cÚ³åÕœ•¦©2j’Dd1˜EÁ/ÕÏ=‡?¥t·pßFd¶“zçµ#èWÓ]4“Y©B­ß.Tž¤Tö:%Ýœ^\VÀ ä–•I4NŒš½… ±OF)O”*i½}MYû X‘lôÕhû þrmã´‹P¨Tìií`·f]Þa½‚ࡳ`~Uwæq‚:Qs¥j0¼mg‚GËûÕàŠ–;Ia@m@`oÞ/øÓtgmhJ+R5ÆqÇj ž˜öéR?PÏüzÿäE¥:v¡×ìyÿ¶«þ4*3ìdêÁu+HŒøû£éH€Ã5Z[=G§Ø€õÑÆšlußñ꿌«IP©Ø¥V©° Ò3‘øÔÇO¿È?fO1h6wàäYûú´{ ‰u`ºáÊç8¡P7±ç¥J,uÿ.Š>³ _ìûóÖØ¤ƒühö3ìR©¬„±/¿Zkuþ"¬ ðû!?öÑÆ…±Ôz}ˆ‘×ýbÑìjtBu¡k#6àù—vñ¤ÊÃéÀþuw…Á#$dzV¦.e™ízà/ï§çVEörmúüê­7F}gZVei$ʺ£ôªRØZF‚å£ GóÈé[d¼‹úï_ñª÷~¡,~\vD«0Ý™¦zu¢4*˜º°ftÚt®Ò:”Þã ãqÓ5A®#{•/÷ÌaÉ'ã9öºÖ7ø³aô‘Æé÷ÛãqhIç.½ãTéTµ¬C•=ÑPS=8*ŽKHæ9š4p=Tf­}–üt±n½|Å¡muÜØ¿=üÅãõ©T*ïcUZ)èÌù4ø­ã2¤’DÈ xüEAç\Ç+2\$ÃnßÇå[/ew$Lfß7}Æ¢eÉbßdz¨‘pZ¸ÓšÜ"îÆbê{i~O›=ºTðê–r1tB0ß/ùíWdÓ®dØÿa| Æw¯CøÕ]á_?Oggrr]N9÷>Õ^Âú´Ÿ¼[C"IQ†ìnã< V‘#%^@¥~÷µDÞgR„Ñ󜤪0:aÐo•›ÉYùí#+cõ©ö!í#Ñ’´‘#Ò)ÇSœí¤iPî“>ÕTèúÐmd&B1þ±T÷÷÷§Ã¦ÞÞf›p¹ã‰PŒzriý]­Èu·CYev ¡ÏÌ?J‘™ŒS©ÝÆIèÕ:iWPÐX¸aÏß_ñ«gt鱬œ@ËÇëS:RºåDBJ×l¡5±0ʬP¶ûãЊ°aPÜiº“Å$kg+‚>]̹ÛŸ¥\û=ï– ÓåÈËÇOjŸc>ÅûXw*[nq#å˜ò}6ùØ&äd©SÅZŠÞú8Õ[O›=Îåÿ‚êÊþx¶-œÀRrW¦~´*5:£JS…õdfÕ|¥Á@,?­En‘ÂX0)!<†ôúÖŸÙîŽOØ¥?ð%Öšm¯ÃéÒ•ô%Oõ§ËQ«4g'M¾kêUš(Ù@ 0#ŒÕ6†âÿF”ªç”“‘øUÃi¨Æçʱ›Ê'”,§òæ¤{kßá°›ï/øÐéO¢V/®¦Y7[rc‡#ý¿þµS˜Ü±Á†6<žú~&µÚ×Pf%´ùÈÿyÆ¢{=@ :ÍÆe>Å{H§tÎrK{UKlðü¥sÛœÿ‰¨Ä0+àn û<ã×é[²i÷äŸø—NWÓåÿ©.“tßóýBW$ï±RÄy•C¤€í`~œÔG!°=Á« £^Ò'B;£*ŸÐÔ a¬ÂB¾Ÿ<«Ð6T0úóÍÆWÑûh§«#`Kú n;†«Oe©)ÉÓn¾Wüi>è(ÓçÇüüht¦ºœvL®)¬2qVZÒøl.?õ¨Ú+~k¡ÿlô¤¡.Ãçr³©‘XšÜh‘Ã?Y”Tš,%ʺã¦å#?¬±…IjzÐ࢑M8×iÏa¸Å74òÃÍê(„**ÒíM?ýé?ô¸d*•Ë©YÀÿ—ÿ^4^<¨=¨ vÀ˜¦‚8çµ;#Qq1»G ¥ÁíÒ”Ž(ÛS{BKS¨öa²ÙR#¶sŸ¥hã°ö®zÿ_‹HÖ§ŠK ‰CFŒÚܹä·¥+††ÿ$gÖƒÀ÷®sþ;Qÿ0½_8èlÚ•|ejzéš·þµs|xþtüW<<_k×û3UÿÀ6¥_[Ð3VülÚ@Ðè `=)?*À>0·èÚf«íþ†ÔÅñ«ä.ª¶lpi†çGÎ0)A9œ×;ÿ m¿ýõQÿnoM>1´Séö7£q“¾½$y-l¦1)°sžy«š~£ý¡#¡ˆ&H§9Ê’GtãÓ¹u«Ñø§N‚FhôÝEÛ,E“ ßZVîIÑߥ¯°‡‹¬ÿçËSöÿC~i?á/°–0ëi©í# ‹FæA½€Â¼šç‡‹ìóÿZ¡õæôïøL-sÿ˜öoF½A3|­*޹¬âû?ùòÔÿð Í7þ ,ãìz˜úÙ½tdzVf£©}‚îÌ;’\òüóYßð™XÌÖÚ€QÔ›G¦Éâ]6r&|Ï*^ÉŽÓØŒŠ­‚÷&O•ZаHß¼ØqŒqÉç¥oœŽá\Œ^"ÒÕÎÓ.à \©[éž¼¸ò«ð˜Xnÿ]DÿÛ›ÿ…-ÂÉ©z/8ÅsËã ãÓQÿÀ7ÿ wü%Ö?ó稟ûsð¤î7x­ Ç©üëOéÉ·u½úd€Z8þ”iÿóí¨ŸûtziÐmžhaÇJÀ>/Óú}ŸQþ¼ßü)§Ævp`ÔGÖÍÿÂho9e‰Ývî\¸à~5†¼cÞœ|a¤÷Ÿø ÿáFÛ Øu ¨=kŸÿ„ËJ$á/8ôµð¥1Ó?¹{úõð¡c>´Ö€|k¤ÿv÷ÿ$ÿ kx×Hô»éÿ>²…47X t¨%ùbgØX¨È½aŸèÙeÍØ#¯ú,œ~•ñΊAÝ`ŽÑ_ü)“tZŸZŽ; k‘m+yñ™vð6¨9?—çYÿð”CÓìrœÇç/Ì£t\üß§J¥qâ :`Ç1*¸ZÖL €8ª0x›ÂÍi][2Îá^@-_‡ÆN8éÏJ5 £¶2 ##ŒS:v®oþÿã™î2?éÖO𦟈?òÞàçì²ñ4jGDãw8éL'±®wþý‰U¸œ‘Œ³I‘Ÿø 0øë@8&æaÇ{yô£Q¦tR§ŸåQ~é5…ÿ χØózߌ.?¥8xÓíÿ1_÷£aý*lR±°A äÕIX#¶é›b`qœwªGÅÞ?wVµ?W?áQO¯x~ãË'UµÝnC烌Z,;“]êöÖlË8u*:•À?BzÓàÔmn§XМ²îoËÓ8Íb]Ýè*/öªK$»QÀº Ê­[]øvÒE–RÛ*0œÿë¥nà™Ð$`tú⊆ÆþÒø3ZÜÅ:¯Þ1°oåEE¬i¹ß½ÂF2MSŸV‰8Ü?:ç5+©ÔH¹ûÛç÷ÍZ‰‡&¹q¼TÛz8¯.·%ŽfnµrÞâby‘¨ÒcÔ½M’çuõ™ô-ü¿úÕÊYÍ!ç5¢²9¼´ùVÿÐMgM5ôvÐ d$.à¹ôÉÇõ Zå´p¬’I#2ª…ç#<~„þVT[‹7ŠQº7YOqÏø Il­ã‚Y=¯¼>àH;€ÚåÅ4Adx–ÅÙ‚¬§jo8QÇÔgÔÕÁªÅöϳìqûß+yÛ»ëÒ²¿²ì–Ü€)hÆâ ü¹ëš½eiœÓ•f‘FðYÉŽpN:S°‚[\Ïäí)“ËTÀÉ?7ôSJž ²xÌ 9 ,Ž1„fè $z]œq4‹ÌûÛŽG'ßÜþt‡N´Iáa™A8b£ Ÿ\Rc,A¬YËeárI€¬Ã©Ç?×ò¥þ×±ÀoµRÕOÛoxþ5ÿÐEZɪ¶¤›ë¼ŸâOýP"Ö1¥Òwü)Z€ w£oz^Ôå çÒ¸Áâ˜I dzÑÖ‘y§ž(€ãŠLóO^i­Á AÎGjȵ¼Y5™”@ªX,-„ÇQèwVº|Ìò4Øâgy5G,&†wli˜æ•ÉÂûªŸÐRö‚ãvƒšQÀ÷¥^¦œßw𦚎¡%‹Û„òKJáB»‘‘œVM¶´bŽg[X–Bï$‹»‚@ç-í]'‘ Í™bG(2¥—$ö£Êˆ,dFƒ-’6ŒgŽqL]EŒ÷ SÛ©ôÞôŠðxëKƒ€}é{SGÝj`djz´ö7æ/)3`OVl7x~µZÇV’7ŠÉc‡Ê–,«œò¾ÃÖñ¸%T’É8©6"ž €mã¦sšBBã‘ÏLÐ<qN qþ{PzPØÆí÷üéÚ>ñú u!íô4‡«_L†òÜð¢(,‚7sôŸÊ¬XêÍyv#Øl¬A wpå{ž*ùŽ9ç{Á”xÿë “ËHÝYU±Ô{P!Jƒœ€?:ðqüéOLÿž´‹÷M{Õ{Û§¶kp¨¬%”FĶ6硼Վ‡i$ŽF~†‹¨êkö¤…â‰Äs€„É­†lt_›ô©ôínKÛ•C ª³2Ÿ›æ çÝ=k xdÀ6­ blˆÔäzQpiÜ‘nãZ`ëÖ’6,ŠIäŠt ž{ÕY.^;ømÊe$GbùéŒéV[ÒšbIH"°éÈìAÍ`Ýê…n|ß²«´VHßp®[·$mhYjböâXü ˆ¹d!·n#‘Ž:gñ«#O² fÒœ3·îÇ$ ƒÓÔÔ‹Q,HŽÇ%•@'ëLWŽ£(ÀaÅPüùRGò­8+Žç šÞ2ï–ÉçÄR™mr(^[öµ%üµóÀ“îඃסÍkÙ]›´rèªñ¾ÆÚÛ8ƒô"­}Š×jÿ£ÇòådsüÍ6(b‚‘F¨€ôQLVÔk@¨Ž1Óš™ºTMÂæž½ÂÄ.IÇf¨%Ó5Ý寋ä…*ÌÜ0!ºñÇ"´H Ç'ŒÕY!ŠI˜¼jÅYpHç¡£P9Xµß³\5Ô–Aé™™ƒ–aÚ»xqÞµôÛó~’‡‰c18R·Ö®Éio±$ò#.Ÿ* íÔØà†ÖA$Qîû¨¸´ !v.ãò®=qMhb=cCÿ§7JPÚ›Q­mXá­¡?XÅf˘/¾Ë&›±RÁ¼„ ã­l•qÇ Vý´QêžzIµX‡é?•:(— ’~Õ.ïÝãRzX¢Ú‡’NIçÐT$Áˆ¨ ¶ZRƒÔã=;TÉ*HÉÈæŸºà`gÖ«”W*Em´ï#–éV~ÈTÄ3аˆ‡Ç³éO‘‡˜[iÜO­1HÚnØÜ`¤X1„ ÆH5j8åNNNJ È$e½¨åbŸ’JŽsïQý“|ªÙÁ\óWŠt;Ps•¾ž´r‡1 [ü»½±’)V マjr¸ÀÁÔ¸ùÂäçù~4ì.b ‰ñ÷Aùˆÿ pƒpúU  )ä“Ôûšz§¾;¢æ)›tP}iJÀÈÏ×5qÑZ&žj¯mˆ¦'ÉÙ¿÷…ÊåIp¡ ã®(1ó’ “Ö­¬Dpxc"ž°…\¶?N#æ*–\žÀR0P8~˜«f0ùöíLh—?‡Z,+m,PgƒŠB#ÀʃÎx«%FÑœtÏ)÷öÍ •¼„gÞ«‚F1úÓÄYþ!À'­Y®sÈÇ(ÛÈÇ^ù4(…Êû 2})¥qŠ¶Ñ€0½}3M‘Ë•QŽ4ì"H8%€ ýé6#¬#»×­©eÎÞ;P\„ÀáçÒ—c*¨ÎJ´¡±œ)rM7/ÍÖ›B¹SÈ^¸§˜rsº¬ÀÎx)B~ñFÞ¥`¹Q£a““íLUùO©?•\h8Ï=©öR„ñE†™WÊ$ðÇŒRÇz󌊷åü2FiÉÀq»?uqBŽ¡r«Ã‚¹Î1Ú”B~cš½åžýD±ùJÅ€9rF} ;X9в!#֔ĸ,qœŒûU³”#7jX`;´Xw*9<ç°þ´ç¶nÛ“V”t,p§¥=“8ôö¢Â¹åžx“Ù}¥## nëÁÀ­$ÆG^œF98ÆqG(\£²Çƪ@^NzS–‚1Ï5{F¦i»ï14r‚e#ñÍ4ÂA{úÕÓßœçÐRù·I¢Ãæ*¬9éúÓZ¼ }*ê/^xô¦²r=8Íb „v~hòw˜òNxïVBä`ô§2‘éž  9C˜¬P ù‡'šXà³2{ÔñGç yWßk•.Á¼ ö£”W /ÌHÏãQ˜ÔÛ>•uBnO°ЀgÖ«”.U1)%sÏ~(6ê01ô«b?“‚:Ó° 8ûØíK”.Êf®¹ïÇÿZƒnT:t«@)g$qN3ÜñG(\§öpØ=ã4’Û»H$Ú­•8Æ8¥)“·4r‡3(Gf‘&Õ^zòI§¬=…\PO;]¹n qéE‚å²òîç¯4¿g8ÆjðQœãô£f_îñK”|ÆwÙ¾cœ|ÕÙÁ#¡ÆkXÇÉ$uä{U ï+È#P"C·qîÞßJ,4Ì™à$œr±om0Ø s]\Ð,gz².âF9<ÐÒØ£“ÓÀ_0ï°Çå]=šy_jåôõ ¹AûÎçêu–1þè8\qJ{‰lXLmêHéŒgš•A-ØölóžMAbc†$àã4IÈA·¿Ò£Wž=ºR¬ƒ'é×ü(M0°G´…‰Âì MÁò]€x#ôŒ2ÄwcŠW#€Wò¼ä«‘úSÑ‹o䑞? RŒäZ^OsíO îÆ•ÈÐüç'ÐqŠ$rÀ.{T¥w¹8éùÓ]M˜Àô¦-Œ’;Q»;²Üúâ…\ sÚ€HûÀ Ž´€Œ«0 ­H£ht¥D8Ü9Ï­6á‘8™N±¸‡¶~´ 6{ŒŸ~ÔŽ0P2:zÓÒ%OÎX9 Ò;#ª½óÒ‘’ÛÈØÝp)ÊÃbç©æ‡'aÏ8Ç­F»ƒdíÛŽô®4?’A=ø4¡ðT“œsAN…±ŒsÍxÉäúcò¦î!2ÜPn§dÇ>”Ô‡<–9â¹o¥Ý¶¡lé<‚ ’#`®Ë±—‘Œzçô¡·cHGØêÔ`ã•(?(ùy_n•ËjM©h¶Ÿo7ñK଒&3“Àõ­yµ$ƒG{ã–O,8EïžÙ¥ptßMMMƒ‘·“M{‘ŸJç¿ây{¦‰£ºXfu.‘Ä€qÛ’ _ÐuÔlƒJ¸‰ÊKòíäwÇn)ÞîÀé´®iIó/CgœÕ]¥rHæ²þßzž'[)§ŒÛ9Û˜ ž@ÎzÑâ-FòÖâÎÚÍ‚´ç q¹‡ /„ñRìÊT¥t»š/0Œ¨#ƒÀ÷4ÕmÌÌ3ȯީkñ\B%MñírÄr1Ôâ¡ðíµÄZ˜% $Êd‰]{‘Ðþ4XVÒæ²¦ÙQóMO´Œd’ÜœÖ>‹©\ÜNÖ×ðÇêrx§·ZšÚ}J_˯ÛF¥¶„Á`zÙþ”ŠtÝÚfŒ°ãµ#&Ëk/P¾Ô­uX­ [p—yNÈ[u úý+Jêê;+1qrê3ÝaF„¸5o1Æ>=ÈçÜà«Àâ°oumrÔ}¥¬·fT œy$9Ç8­Øw2oq³r‚8ägR AÅ]‹î¤9ßÖ¬*„gžÆ°aÕO %Pa®àÿÄpGjèî‚;ÕDR‹®$YPrAÇ¥<ŒóœñÚš¸û gž¹§'ŒdŽ€Õ¢I%vô…#=zb¥8 8ç¶=)®xPSØ÷¢ÀB 3óÆ9§`òœÒ•ØI {ç §…'¨àÒÈ'žÔF7`äqC(Î9$9¤v ,p}ûU„­Á ‚Oµ<õÎs“éPDˆ /R¹ç¿Ö¦’ìd Å!·$sÅ<£$O^zRºHëKÊ)óéš`4§¯n)Á±ƒšb#yŒU€\ŽÙ¥dòò{{ö¥q ßÇcÞžXÎ=sMÎ1ƒ€zSYX»0Ë.1Ô~´ U%ßWÃŽI©»´F0 ¥;‡±ë@Ø÷¨&û»KxéR”eÚw’=JŠ`AÝÆqS'b‘ryù¹>õ…uµî³üCƒŽõ±tí³æ#޵„ìMÓc3šÆ.ìÕ-.sÚr±Ø1Ž>¿ÄÕÑÛäªò2H=yàW;§Ëƒ?™®‚;e™Uƒ•t`8ÇÔS{‹¡¡d‚r1´`~8©¢M¸,NXqÍ2"‚6bÜ€;w©@%ÆXŒ hÉ‹¡IHSñòíÇAÉÅ(Pä“ÈòiY—?Jb+ù`†À%³@FϾ:ŸéVY ùA ÀÀ~´ÄW€Ì<ŸSJøأ1€ÍŸ»ÀÍJw¸Îx¡W’Ìä÷Ç¥;@õ÷ªHW1ÚGj¥H®ÁÏ…<ô÷«’æBÁ[2*«*G.Fxž´­¨ÑäBHÙc)ieŸ§æ^¾‚Ã_{‹kBîY¤ò¡ÁÊfå‰üzÑQ!©b'ëJ#* ÏLVП*hÎq»Ë.F023ÜÕˆ–Þ´À­’0OqR¢’WÀô~&³±@çi\±`;Tˆƒ%ƒýEE–óˆ?08*1ÐóÍXd8ÇLzž)ˆE9\ïüiøÊ6Ö¹äö¦ôP¹½;R™›†íÞ˜ ‚<Ï#ó—b*P™êÍÓŽô¸T]¡GçÒy†bÀ‚žƒµ¸Ð2s“M| †äcîã½J]‹áPy4>O$(ÈïE‚äAÀÀ6D3FF'#Š~NT šF =è ãÉËC,„€繨íÄæ g ¿';F=ê\íeŒçŒ÷¥*Ã*H\gñ c§®É>”(Þ0Ûô •WÞ21øSƒ¸NNFqÇS@Çmݜ㧻[ü­Ç&–!‡ÉsŒzsC°ð6ž:õ§a C…Á®_Å÷1cmŸÞ D¸'o=ý}u ÷ñŒÀúPQ$‘U• Ã¥&®¬]9¨K˜çu{û]SNk ’ynUNÏ_ÃÍ[½Òf>60í‘Ò pë‚ } m**€ ô§‡TŒÄIÍ%5´µ¬aÚx‡MM®%òç@¢#-‘Á¾¶˜Auw4f/µÌeDaÈ^Ùü+]`¶yšcD·hÁæ¬A\±Jj=ÂUšK}ÎVêX5­E-§O9ÝÁd’>™ªWr¾Ÿi}pÁnæ¸óXÇœ_”`óÀþuÙ KxßzE66’ªÁ÷¦Ick4qÅ%¼L‰Ê©Q…úqIÁšF¼SZZåÜ2øzY!‘9Т0=Iþ¼Sü7 >µ]ÛŒjŠŽ„zúVŸØ­ÌB3o’œ¬aFú~4¢HâDFà…Íw3ç/*1­àMJÖäG"}ª ™<©CœÀÿZ4[«‹Ýj÷ψG,,$zóÖµmtÛK›Kxâ-ÁÚ9"®G{Ú]©æß(QêSªµF·4Pëš?™$q¨‘²Y°Gü*O@Ïeo2§›½ÂÊëêqúÖ¬š}”ååžÒ]À'z~Åòü¼/–ŸJX•UîÛ¡>¥k-“\™axU7m ØcÖ¤7ŧ›Ö#ò¼ÒÐŒãëM:“5Ȭ¡.¼ øt«7¶ÝƱÜ@$@A Û4¹XsCK…ÄsXÛézœÓA¸ÌŸ Lœä’IäòEv1²ÍûÄ‘YT†@úM„±,rYÂcî«.BŸj±o6±àDDî¯AN1°êTSK¸¸ÎTGSÖ¥L9ã'Ò‘NóÈϦií`=ªÑ‹`W9±ƒŸzcã'¾j@ÜOÍÒ£#cžAú L ¬@ì}©ÙçiËÐf ó4#ËÜÃÖ§PWø@8í@Äà}*9™*Æ3´Ì}‡oΤ] p@ɤeÞâ‹< Œõúæ–Vö8>•@$tÆy§—ÚûˆëÐ –<ÀÎÓÏjs?˜ÌFáÒ¢•óž=})ÇdƒŸzb¸ 1DòØã9§²Só€ÇŽ)¨P(cŒv¥$2rÅÑsƒÐqÇ5);c¦)ˆ«‘’1œ“ŠÇ8öA×îêiÆ<¨ã€s×­4¸Ç{mñœZŽè*´ëAÏOÖ¬³ ¤àg¥W›æl•Ç9¬æR9ûÍ‘É&ör²c_ÞJI8¿|¹Œó€+ys2ŽXŒùsYÓ^ñ¬ŸºbéÀo€ Ÿ§_ë], „ œ dþ5Ïi 3äòvŽýr¢º8@*¸nüiKqt-…ʱ sŠ™Tœ=ØÔJTƒØ`qŠ|xbÄòb©2`6&HË)ÀX`(çu¦.8ÏaÞ¤\œdŽ™ªÃ,Œzpxõ¤ä€6ŸQéS6ܶzvß/-–'r¢ 89üi £‘Ÿš•-={Ôª«;u Û¶žÔö& eƨˆÝ]€rA§o!2èwœLp]™@Û3Í0Ü‘zmÂÉ…Œ>üa:‘·>½ë<[ø¤h ¦Ý+19±ÃðN~œu©-ƒXŽôEcqÙäò‹J0²z~B·Ré`2'¼Ö gV±Ð5’òG5ìWÿd€íA$ óõï[^ µñ4Q]yÆ×ǔĩq×=;tŧ»ÉlvÉ23U6yQCHãå@XØÞ¼ÓKƒUƒJÕ5í»ÉŸMšél…F>Ý1Š“M°ñDš]ÝÆ£­Åsewb슭½·2d6€;ŒSö~dóšZo‹EÜ\Ç« ˜È»p=éøU-nûP‡H´«e“PÀò•¹‘בÎ3Šã_C²ÒuŸ Åkq<´³£oœ¶wœdUd¶{ x°[ßÝDlîœÂDì]UTaryÁÍ nLô=&ò{Í2/#Ho âdSÂ8ê*i'òœüÁ÷¿7Ý•ç^$¶–1c%ßÚeÑÒÈ “Ÿ420JËŸ› õé]‰´›-GöpÞjæÎ%–=“>?zq€9#žùõ¥ÊÝŽ¡nÃ`+îiÏr9 ¼0vÈÃùtª·YM˜¤« H›lÏÈN>ñúu¯1ѧ³ÅšmÖŸuyvD3=õÓçý *œ•Rs×÷P£tV=@ØJº—Ú¢Ô®DYÌ;†:FWŸz¶×$XÔqÎx®CDñ´Zö±”:Uìi&O›0Pž@™õë@< /|’hD Ëcqõ¨œŠû¯j`<‡rǃM嘱QúšRpX7£½G¿!¸%@â‰.呎zúsÅ@¤¬Çv=XçµXawN=iЏÆ3è:Ðn½áëoéÆà²C«©åt#óýkþ Ëg°¸mzi[NVòqn¹*@sô«Þ0ñ š•–«ºžA ?ƒÕ±ß§Yi]è½Ôp6‘yö47%¸{¬È›Âš#éðÙɧ³ÚÄÅãÎs´ã¯Þö§]è:f£§Ãe>ž’ZÀG–¬Ì œcƒœþµ%Ÿˆ´«Ëó¦Û^‰nDe—ÚÀu Äaˆö®oÇÚžžö h·ª÷v×q7—9a‘Ç2p})«·a;$nÅámePšT+å«"õÀV=ûäÔð‡èkn¶ÿÙpyHw( §¹õ­ö‘²®ÑÎãŽ:ÖxÃJ½¾û ­Ä’Êû‚2BÛoÞÃã`ÔûÝî’h郞¤Ú|fî,˜çU¿Ë(ÚVElãqœž){׸Ւ³øsIgžCcn Çúõ þ³œóøÕƒá5¬ã³6Qµ¬:EÈÝr¤Ι¦ê°jQJmàž&…¶H“ÆQ·c8çØçñ­ˆî£Häg‘FÅ,O¢ÐÜ®+-Ñšº—šöBÉ>Í)Ì©“óž9cœ“õ4Ó h°éRX>ìæ9’<¤öïÁéÒ§Ó5[=bÁol_ÎØ…b¤r=pk—A¥øŒk÷ú¹‰ì ¸6ð´¥—ÊEQÊ÷“œõ¦¯ÔÇðÞŒl-ì…‚%¬-æ")# ëœä“R h¬·-.œ¡.ŸÌ˜ÞqœžqÒc©éíñGp#û/š³#!1Á;‡L ÄÒïm5ÜKat^?ìܾâÜ1~ 7LŒS\ÛÜNÆÓxWDºdbR(PD©æ¾Ö@rù†Ny­=CL°ÖmÖÞþÎ;ˆ"pñ©È Gëîk&ßĺl— kÎFt–H]VE_¼ÈÄØÁééVô_i~ ÜšuÑ‘ÕwÁW8ÉúÒ¼·eZ;Ò[Åu±KûÈJ4dc ö¬[xr×ìÍšžd æFÛØsÜç‘ÇCW5MsOÑãYogØdÎÈÕK;ã¨rj8µÍ=´xµ3w±qº9I+ßç¾{u¢7H®k®\–Î5!g@NUW¶O_­y‡‚¤·—â6µ=„%¡‡)–,~b§ø¹àç­zI.ï‡ch’³°'pC/›À©=¸â6ÞÀÎH\sùÐÌê{c8¡Dh¦I~8õ©¿R®r¾/†3=‡šQcÂÅz+®„…6¾wF£9ÅqZþ«k© W¶Veˆ°}ÈW võϸÍtþ!Ò[Ënä}JÔ)ks¦p“§c^B¬zçÔf¹ ƒ«ªD€˜s€zCÓð­+¿Ç4­k¥Æ÷7'µ~T÷>µoEÒ……‰YtÎûäoVöö§{½_»ƒRêbxrv¶»Ô (%,;“Î>½…u  |2@ï\Ʊa¨iúÂê6¤FÉ’59çñß5,^)ÓL`ÍæÁ"™ Ï|c­•´c«7ÏG\x†“x²7Ê`|çéY¾ ó[Kpê^a)·>ƒ?­W¿šokd޶Ć’âE*8ì3[pÇ™b±£ypB™cŽ}Ï-]Áû´ù:²¾°>Óuaf 61·/=ZÍy†—ãa…†î"B®>÷ÿ¬ õx.ýI¯K‚áeeL•p$zÖ6­¢ÛÝi7 !„H¨Y†ÜÏQYÞ Õ¤ºÒ¦·™ÐKÅVÖÚ}וy¼(¶N>YåÆA%†8÷¯L†ã³Ç©¦J²HÛ·|§?(þ´sëªSÎ<é"µð…éÓ/® °…íîbŽÔ—å*`«cŒçž•Þo4‡¸O™`$[¾ÎÒv uÅXû>ÕÎIÎzž)¤,±yA¸ã#¤åvR‰ç:{êÿÚº%äš êGrÃä$I[î ¼ç ’zö¨%´Õ¡ðËhRh·]Å|®n‚’.íû³œãƒè=+Ò&…AfFx8ZTFdä™1÷³úU{^È\…]_ÍÕt[Ûu¡šXÝ8ÎN@ÏãŠætIµ6Ñ¡ÑgÑ&²xmš¸ª ;HR¾¤’ __è×É7SË$}aµ‘Ê{§½kéúžŸ¬[4–·1̉è2Ÿpy+´µC²os†š+Çðu·‡aЮ ü.›·¨ò›cd°|àîüù­(’kÍT[_ 5£A…Ø$’F@º3œ“]¢[¢ ù‡|æ¨éÓÚßÇ$ÖÍ"¢ÊÑñ•$ޤdgÓçºØ\ºœÁþÔ³“Ãú“i·, kk‹xö¼ŠJ½B“‘ÇÖ£û³M®jSéSµ®¤bEµ$¥T|Òc±ç uâ»ÈmaE] Ž§“š„Û‡.Ž3…)*ƒå0¼.ºši7jhÚfcngÀ—ÊÀÛ¼Žÿ­m»°‚I#|ͧjôÞqÀÍN¶ÈQw–Ø: ç5(dV;GN*®îRZXÇÐ>Ù&€$¿ÓVÂ_˜}ž>@ÁëÅrri·÷ÚN¼cÓ.VIïRòÞ9Ð*Ì ®TŒõ;O»—Ôí£Õíl$ó|ù•HC³¨' ­@Àù†@=+E+;ÕÏ?½†{ív°ðÌú|ìÑ4É""¶¸%<ñžHÇõe…ÝïŠg“û*úntÁle’0¡y9'æ™rI${ÔXfzé6Ò1K8T±Éf@r}y©¿³l·}’Û=ñ‘VÊ´ŽÛ”=z¥ªM=•Œ’ÛB&•)¿hÛÜýi4‹R“vLµo pG¶ã@GÎ¥€åÞ±ìumBîÊ;˜4èÌlØÚ.ï~6â®[ÞE©Z™­ö™*#s®8Áüj”•‡:r_4ŒÊ¡‰ÛÏ&™4QªîeRüïTtBîîîáeµ†( mŽÛÉ;±Ú©\]j3jm`m¢V`θ›ï&x9Ç_jžeqû9lk”fc·qÔcÊÎÖ?Þ\¥Eas!¶MlÑ2° Ü;io$•m%ke¥@HóÚ}zU'¡-; "BØH¡•3ÇLgÞœÀv—r?­TÑÞ[íþMJÞæ­`ŠU•¶y œàŸËг¨?ö}³OåÜJ¿Ç±ÇËïÍu­n¦Š)‰a‰±Ù†GáPù( $PÄ àª®?ËžúX4èdkIŠÌT,JWvN0:óZqqe¥–µg“ò·qßžœsùSº Kb)4‹,«86  |½:ÊÚÞÊ1¬(2Á@õïKgtu-8Ý^0– ‘ëÿ묓«¼P­ÝÆŸv±.àŠwdàcæãòïJëqòÔ~é§yk ìEsè_¨'>¹õ«Ñ@¤H ¤k€¹É8õªöºŒW“$YÝBì…À™6|Õ›¹­¬­dšâM‘ äã¹ãúÑu¸œd½Ó>_ éW›’&ó_ø–SúVºmØ„ §“ß~u^’"´Oû¶“åè1UçÖtÛ%6×7iˆ>dä•8Îx¡Yç›¶ö3ï|1§^]yÃ͵™ÉÉ€€ ŽøÇ¿j•<àù·×sàsæ¸ “ÿÖ«0ë:EܱÛÅy 3¸,zsÒ¶Pýž6ó ª"î2øÔèËç«‘¬hñj6QÚ4“Æ"ÆLm‚xÆ­SÑ|?›©/Ù¯nü 3äîIõ€`z NÉhMÛwe+Ò¬¥•ò9ä ãï¼9k:7’Zc’Ê}óýk¯¼UëœÖ ̼«H¡<Ûk´=z]n=SQžÌHl¾Ëp†bÿ3—=:ŽkhrØ[±nÓÅæ§[é,m®„† òá*\ìÆ±Ñ¥ø£\ծͤ:Ulp@ãòëVt¯ ëZgˆWTMZÙÚhÂ_‡œw7`8N•v‰ãôßêÍgªÞêº}¬vm:™#›sŒãfÜzçŸÒoâMjc0›I6Ú5ÌR1cVìf`3Çu§Åá«¡ý¥gu~’é7m3-¸· êd9$¿|v¬è´}m­§´Ÿ^Y#˜¢?eˆ#ŸœžçNñèeëk×:Wöƒéö×1Ím¶ŽÞC½˜ŽK“¯__ƪÅâMR]]vŠÍo´Öa¾6g‰ð¡¸ïÀâ ¼þÈ:ªälÈ /ð¾œãG¶~¹¶‹T€j*-ïãÃE¨P´)#ž˜íG»¨Ýúÿá"ñ^èñ?ök®©o”‘¹½~‚´ü5ª^_>§¢mÚæÎäÁº*c àŸz…ü%rï¤3j²+髱Ù× 1ƒ‘þèÅO¤hÙZì‰w<¿j“ÌeuPzŒ{qŠR”lNå„|BŠL’ùà /¯éLÔš+o‰l–ùYfµ”ÝíÏÌ ¤\çšž ÝE¨]ß zín®”,¬Æ Ž0;Ö†á[->&ušâ{™÷—7ïLöÔÛKQ$ö2t­gÄ:«ZßE cr_‡lNv¶wîc20+CÂ:þ©¦ÜK¨O’¥Ô‘m)Çÿ^¨Ùø`[Ü46š•òZfKv`Q¨ã$g¶kgBðìzrÅåÄÑÌæB% ò·RFëJN6v+•¦®TÖ¯õxµý7O±–Ê(®RF 23œ ï‚8ät¨ôÍwP»Ó. EiýµÓZÏ3ɈS>o'$c\þ4Ï@³ø·Ã°Åu%»¤ð‘¹p€à‚Á÷nÿ¶¿`···»žÕã›íTû¹Îs‘ÎsúJ*Jâ³lȸñ&£'„5‹ˆï k›+†‰nQ #¹àóŽã­_Ô/|CdšLO6ž³]Þ˜$)ÁRW©ö9ü:T¶Þ·k-RÞMJöXµ]¯îÉä¶qÉâ¬ÜøB{ûk(î‡?UâÑ6hDZñ.¯&— jWQX5õÂÛȈ:³'zs[ÚÍô~3¿Ó®žÖ;-t#!¾fÚ7p:Ò³¤ð4;-(ëfµœÏcMÛºÓ±$þ5r¼š½ÅõÝò]Åq†{im”©Œrƒ9êçFgÔÞÓõ½/QžH¬õ[©W'ls+Ž3€~•1à á= Åa[øgKÒËÝiöp[JA¢ ŽÃ8=*Ü0I pҀĂ8éPÙj:m·àgëQ$¨ä­=ÿ™õªW–nñ~é¶’@8úúPö‘l2À;‰ïÖªên±i—²6!aÁ㡦Éo t?.$sô¨¯­VxÌ"˘ܬ}sPïcHÙI¾ÔìmtXÅÅä(ñgxgºç§^sW|<ˆÑßÞ®V;©ÚEÝÆ×éMO é¢1 ´¤ê»²ÇùÓÞ6ŽEcÆÆŒç ¿OZ”œlk9BWåêWÑç„꺸¸ˆî—z¨q’*­ØŽóÄi¹h‘mŽ^)v6w}Ú×¶Ó4ûyá´‚&Uàªò×­T“AÒX>wbäžI9É9ëO•ÚÄûH©6…Ó'µ·´û{Ÿ9­WçcÐdžýÏ4—×¶°ØO<·ˆÕ[-œzcñëÊæ¤r]JûúÕ(ÛBe;´ÎcÃïw{q´ûTiLÈYˆÌÑHú ×I{…Óî ’G”Ù#éYw޶“Ëöd_:S½Æ=³ŸÂ´ 0jzpIÓ|r à6;ûT¥Ð¹»ÉK¡WÃn’xrÌ$¶¦ß_Z‹ÄÌSGb0š0>»Å\°Ò¬ôó'Ø­¼¤vðÄŒþ4º†‹e¨œÝG$›Fù„¾€àÐÓå°¹ãí9ºÙN3ÆHÎMbëp­ì°XÌ«&e–5`¹P09>ä~U£okö+D3µ’[eXiLú¼š¸¹ÜIRþ]¾€c¥ ;XtÚRrìZðìÛ´–·‘÷Kk!·}ï”ñœT×¶Åg|V,nÒ0êß)äþ•ŸmáÏì‹éo ¹÷ŽQÎAç<žõzòõm?e½ÙµvûÍ·;† Æ’NÖeIÇŸ™=´m:ÚéòKLè‹"±ê¤sŸÎ«ø«÷ÿÙú{>È®æØçÀÇãZz›u¥Zýš{Õ¸F"O/iQžç'#ŸÒªë:dzÔ?fÉPŒ<¹T#©÷¥gÊ55ínÞ„Z¶‹¦6%°·… K¹@ ç9¨,|R¶¾Óînâ–Y¦ …«Çr=*ðÆ©$"Ý®m|‰×›ióJg8Áãž•ººt–±YF?ÑÕHºûò(J]å­'}I´íQu[Xî ‘¦ð;qƒƒZJ0€wsñ¬Ø4Ô¶u6hI,à±9ÏqZ„•@7tŠ´›ÜÂV¿ºV•¹*0FOCÖ£  žÝ( Ò‚sž9°'<qJB‰™w“1_Ÿo Wv‘<ß½%e*ãdþ¦»}@­ó< ÀºŠÖä!BOR+8-MS¶¬©§}æãyÿÐnĪPpÝzçùV6š¡¥Âp Ÿ^MneFÕç‡QÌ{B3Ôtgš™~cò¦î9$ã\Œ99Ëí?…YNƒ.G?w®kTdÇ-GÌðõüè# w ‘Œ Ô¹rÛF;}j6?»l0Usêiê"RÉëQ·8ÂóÏøR‡CdtÀ¡[’ Á¸¦ RÌ2H·N”üÎ᎔ÈÓ,0A<•:g-Œžh"¢*ädêiL{§;zcÒœ¤n ¸s×µH£;ïÒ†‰c—b«‘œ/#?JÊšPø(=p"+âl—qø:â[;Ù`òKˆºÈ nzŽH Nòê ‹’h¦›ÌB¬=2N1Z*|Ê÷efzdkrÀ|ÀgŽ‚ ŽxÕUU”3.ìÛ¹¯;[»§ð0ñZ¥ØÔ·¶g"2ÛñåyyÆ;c©æ¶²¹ñÁmBæH$6qʪnLc;ðW9éÀâ­@NW;ÉnBÛ›“€*žÀ|íÎGlŽ¿Jâî!ŠÿZÔZ÷W6—v·@¢y˜eŒcnÜœ`÷àæ›yk¦ÜÍâÑ5Ä U–1ç²ío/9<óM@9Ú[ºNÔÈ@ÁaÞ8íùR*ê ¬`¼bhqåœù»÷}ìôÛŽ+ŠÔ –£gáNd1J Ë9˜ ‹»ÁÜhÆt‹?E%¼ðªÉ¤0WY7Á\cžNÞ}N)òØ\×ga±uIUÙN _b;T^}¿œí¾=Ѭ¡òPõÁô®GÁ©m¯%‚Geq,V¡Òþ×åFÏÀtßÞµô´ÖõØôô˜^ GÚüÜá›'•Ïlæ¢QµÆ¤ljŽñÃjaÔ­¬‹\!‘¦@D‹Ýg©È©¯.¡·„¼²¤{†Nòךå¼vÚ|VSÜIoÜ7ñIóó‘ì;Öuõæqã­N+–³–Ó×;ðUœsõ GáUÞ7 ûÇqÞ»ò1Ž3Y^»¿—ÄZý¥ÕÛ\CjЈ P”±Æ?Ÿµr–:¬ð†xv;›’ÖëÈÔ¤F9EÚ¬G!y_ˆ&´´>3´ÑwË2A ’ф˔?Bj”-tL¥vw’i:§x×ÙXÝ\®1DvtÉëVuMè¿»,TìPqÅrþ>“RŠóH¼–{¹m¶<@TUççUPƒÆM?ÆðA¶×¾Ê&—O+!ã;™#ŸÂ¥Ç[Õ=¼Š¶¦IäD  ¹ÝÓëéV"ž&E”I ‡8pyìyæ£a‡áÍç`´–åeÔ¤†!ò–”‘‚ G_ALÖWÃvz§öv¤³#jÐÌ]¥É#y\`cqÒš‰-êzR˃ã9ç¥gÉq ÞœóÚÏ ÄßuÑœuü+Ó“FOxƒI³’´žÉ [£|®ûNìs×zɰ±Ðn~Ý$µ:³Fº K*ùËÝ)¸–·=MxÔyA¼ ”¥[yÐ ‹ÍÌmØ]ÜuÇ®;× º4^=µ¾·¹²XfÓçVSæ9p1žçŽ*މi¡_x[T’(-e»…/Yq–b8ç¥ÉdS•ÝÏC‰²áXØŒñR+ªLÐïRýÕO }:לZÝiSk^™o­KCjé+ ÆPˆ†sÇ$ñV4FÓí|gkh ‚ö[§žæßQ…šÈ+(>˜ søRöbs»=˜2@7Ÿ”1ý+YÔo¤Ömô]*H­$’Ù’-ûNÐÈÉ'ò®cXIºñ^±gâñj²[ÇöV—fÓß›a`v¶áž4isé²xÕ`I…Ò\i"I¤Ü_.>R¤ðvàà ¤¬›žÖnµm!ÿµ¥µ¢GEX—E8ÜW'ä~ÐÛ&N3ÆMyÇÃÏøG^U…lãƒ[‰§Bß6J†'Ð`? ô»S´±SÁéÅ)%ÌRza>\õãÞšø8ÂçiêÛœƒÐtö¥tRëóaTt÷©hDY*IUçºæª\íw^@çŒà^1nÈÈç·µAsóS Ž8ö©z¢£¹Ní ŠAÀö§¼jP w÷§¦Ò\Œð)ŽÎ‰\úó@ `>RIàgžÕ *“À zžÕa¶õÆp8>µåT[®=(B#còäŒàUîùÙÇ<ä‘Ò®ô‹h犥zåQIQ¸ô¿µåGqÑ 0"-ÜûšPÕ#Ó ¸’™Lk‘»°<Œg5,ö‚C‘œz ÍñÁŽ+X<‰å‘¥% )ç?ÈúTÝØÒNVeû[øïŒè±K ÂÛdŽUÃzt$~µÕ`‹Q6£3s‘*®}*.i­¯®-dµ”ù­æ¥ÑR©Ž:Ž•åÜñøŽ6[;†Ž8ÌLêŸ'Ìsœ÷]Ø¥N.MšêÚÚ⺔¹8>Y*}¾½*Ý•ì+©\Ù™re˜Ù@R)·–Â}t$,› !a‡#ôÍ%'M=n.‰3ÜòǠǥ5{…¢á{—Æ«göá`d+tFT8#¯¡u(.of²ŠfóaÎñ°à~=3ÍbÞÌ×:´—Ð\4Ö1BIÏÌ?,~´ýñ,õB9!˜Ë´;1þ6_¼}‡¦{ —7qûòÜÝ1³ŒÅ{cÔè¢ò`Úœu–·?o´K£Äæ*ýG8þ”<ÞB ¸ž™æ­ë©šv ¦ ,à޽è´@¤ã È ÷¦•{” ÀŽ2T犱@àz-qì¬*—ÉõϽRƒÎ[†Y\žÍh‘™€Eäöª—ÿ¾Y#<‚¥âE¾»ryÎAx¥Ž€9ÅF%¸Ú»ÑI Œ‚FE=À.Ê«†##ùÓè$¬ËPX”HàœtQÂ’\ª|­Ó&…`'9õîiü8`T}=ýhè j5T88'Ži² ð}é ù|œ‘ÐR“€vðO?¥Có)7üƒÇ½pw—VÚ~©)™% (£gw8®úÿ·®1Šã5»{Ã$Ì–©2’6ŒŽsŸÖ•/ˆsøKšvKãÐ{ÖÕ¼eœ?­bY1@þ5ÐA´qßëÏJæ5˜ 4axëÁ«0„þ|Õ`@<¯OóŠ´ƒåéÓ&´F,P B ‘Ž´Ö r¥LcoLÐ ‘K¡¶¨=}i§7ã×ҪŒ"®ØÕU~êàp)0Q¼n|út§c«G©=é#ã,¬I'¯sL C`”Àê}éeŽI!!>Nv£ó¡$BþVì¶Çltþ•1e 7ÍÓþtjÆ—dö?ΤÎ:¨8íéH­‚NãPI**àg<äžôö9?‰W¯ƒobs¶IÊ$j2w0`Øö¨hðØÚim§X¬-,#{ye°óÏ\ÕÿëvŸgn5›˜”Ì$A0gaÛ+Ûñ¬û¿Ã-Ü‘*Ü "ŒJè°’vç·þ•¢¿%/zì¿m¡i/p·fÆÜJXHN8Ü;íéŸ|U›«M*âù%šÚÞæâ”;F¬Ñ÷J¡¦x‚Ú]&;ç¸*yˆ‰|³¸ó€ŽON•‡§Ï§Ç‹çûÏbeQ$++‘³æùx äœôëT¢Ù-¤u²éº}Π—sØ[É4_òÕ¢‡ã׊xÒôQ,× ¦Ú<’çÌs’üçž9æ©E¯YéºE”ÆÛÏ>Íi“hQÆ3Øc&'‹lEœ3%µÜ’H¬VÔ[.á‰^0õ4¹dѹ¦º}ƒØ% °¶0¿Éh@s×Å?û:Ág-ö(L "\†Ÿ\qXòxÒÒ; 2æ {¹ ÔjÓîœt9ï×zSn|im¦ÚÅ4öWqÝϺڸTtU'%‰88îiòȉÒÚØ[Znû=¬Q9o-n>ø« oÝ‚2Üuãj†“«Å«è¶ú²ËåÌ…–6ÀlûöíTlüW¡öe¶Ó¯‰¸¸–®Ñ£#GÙº ûô©åa¡¥ç@g”«£®J±6Ò:Ž?•EnÉr ª<î 3Ò¹Õ׬¬´sP´Ñfƒì—Gí1’¡ÝøÜçŸqZzÑOÛé/§˜þÓOÀ0euG'ù\ÊÇ@R9 FÉ»ÔþsR4"4b¨·'ûJç&ñ­­¼üi÷RiQMåµü{J‚Ûs¸®xÍM{âyùíl´ÙïÌ1Ç4†7U*ŽNÒòÝ3Å5EѵpÀbH“yËmP >øëU¯Q%‘b‘QÓa܃qØÕ°éÛ°-Ôpq\7ŒõEŽ}=ij%¬r9ºŠÞM³†®Ðzҵ݊Zjw$/f‘º†N8 `þ‰4ûWŽ46И”üˆb\.zà{×-¥ëš€²Ó4Ô·T½šÓMÀ@‹ýâqÏQõ5Ôß]}‚Âk¶ŠI¼eÊFæÀÏ>ÔÒkA2C K*²${ǰ3ŠXí­¡ivÇ+“æ@7žœú×+Žã2éˆú%úŨGº²½Š†Ú}úœUÛOÁ¨ZßM%¬¶FÁöܥɠۻ9Œb›‹H¥ñkmÈŽÞÝFÒ¡DCnJ™mÒfŽc%1ò¨¯§ʲ!ñEº\XÅu§ÞÚÅ~U-n%UØäò‰RGf¡Å’M¬Ýé‘èw¬Ö·%V]ª¤d9硬•ìkÙézo˜ìˆÈK!.Tž¸ãŒÕı¶¶w–ÞÎÞ9e9wHÕ }Hë\žâø®lï/¤Òoâ†Ùd’£kl nàœ{kYQ™*}Fz~‹ah²ù«iH‡pÆ»éœã"¹»¿ZÚý¦ö+KÛ» Y|›‹˜BìF{[ð*]SÆVvrC­Íô²[ ¿.ªÎ<ŸaJÌ4ØßšÖ8ØËmiHàïxãPNyçõüê[mè§ÐµW«=’NŠèeŒ>ÖÀ)‘œz‘$Œ’Û±‘Ç? ¥}Gm bR¥™¸É§Ë9‰K$p1LR1’ã­ 9tÓb[œÄ¾0ÜF­c8R¹\°þ’ïIJljfÒïOvÚ1úÔ"h—ĶM$ÅbH×w¦óŸÃ£«IöÙ–zòG°»×S»–¢ùw4´Ûè5 ¹€å_ŽWàƒÞ§e󷞃·5Íø= ÙÜHãj»ŠGwtR™åD/×òqwW9«EFm#Ë|C?‰“âMˆ¦l&TO,m·Sžç8 Zþ±ñP× ÚŽ· þœˆÀ:2¶çôà®V×UÑu߉7×÷—ÂßNh E+Èa-… ŒðGV­»KÛo ëšO†¦yÖÖ'‘f^…›' {‘Òº%t’9â®Û;uÖ4»«Ï²Ak%Ð^"IUŸŽ¼TF»£ÞÝ›K}RÒIÐí1‰A$ú Ÿå\^šž‚ =”M,…s•VÈécÇ·sCýžmPRŽgĶˆ5ÍXµ&¬z&™®iZ¥Ä–6·±IuÌ‘Æy\p#ÅhYj:uüŒ–w°\•äz¼ £øÉì¬/¤{htà ÛXÛ@0Nucê{°ªÑÙC¸ µ¾òTÔH¼ÀF ÆÆ9@-OÙè'=v=Llû³ò‚½ÅR¤Œ$‘‹däŸJóÍíîïu9¬u=–ÚNšml£–B7•@ Ì=3ÎO¨Årk¨êÍcáÖYn&ÛzâÓ20{€eý@çoçKÙÜj¢Hú6€­ïŒÕ7Œ­Ïîä%wÀp?q> ¸¹›ÄÞ!½›Uk˜w„EóILç’«ÙGݾ*÷…lg±ñ_‰¯$¿¶¸K‰ÄQI¹Ó®7/ðà~œGw¹ØH¨ñ´G$8Áüé’lÜwIÛŸóøÖ„¼[‰´Û‹Ö·û0·œÃÙR09õæ¹/ëz—‹.gðÿ…¢y•pnî’@¨G?&ïçÏ4(6ì'-.­7⾩ã_ì;FkP~׿’Êp¸û¼c9«Þ1ñ3øZÁoE£Ý«È##x@ Ž 89é\7íáЯ5½[RŠ8SKE¶m¤¾ >ÓÝŽýõRÞx†ëÆÚæ—£ÝéFÚÆâe¸PÎLƒ÷‡`Hªp\Ú-£'mw=VÂíî´ëk—‰¡ibW1±\Q^jÙ\FÊg…ÝËÖ X€ ƒÔŽ™¯>ºø•vž"ÖºlgHŽìY¼Çvæ|ãŽp1鎂»‘â¯Éxl“Tîƒùb|±oSYÊ-t)I3O >VÆÞFOz‹Íe|Ðñô©†A·ñÉíP¹yêy¨z–Šw»¹8ëšçÅäsÍÇ*Ì„0óädŸ…t7®GBsŠóuiâØl'.p¥x8?ÊŠjíŽNÈètᔉÁõþUÐ@¸,}1è+ŸÓвÆÅˆdçšßˆ(L•n™nk”Öcã*ç¿j°‰žXgéPDÃy ò;TÛ—æ6+DdÉHäÌ*0[8ÈÏnÔÀª2A<Óöž¾™ÍP†Ê~@ùAéÒ£¶¹óòR1´1õ©1Áf;FI'¯Òœ‰jªjÿÇëGPºl$g)÷ñ€ €?ýtæ“ç`žõ‡³³Œ/ïCeTÆî€Sï› 1øÔ3cÆÐ3’3Ž*@<±#º[46IRÄât‚è!F'å Äd¨¸$Šé.eòcy"…æ•W;€\ã &³´ pøƒG‹P6¦Ù]ÙB;†?+c¯áO™µ{ •-Z-^ÃzE‰Ò­„ºuÒIŸµŒH©Ÿn Ü*×Ôì5˜µ›MjÊÒÖyÚØA=¤²ã`ݸø#Ž+¨PK€ ü$ƒR¼¸°û8‚Ê[³,ëˆÜŠz¹ÏaéïG3oa¸¤.›ÜvQ-êÛ¬À’ÉoŠ@3ÉÀÀíYÖ>{?jZšÿǵÄ`Å#å•¿ÖlìJÛfÙÕ‰íéNýï$Éîk;±Ú熵{Ý;Ä–÷¶öði—–&K‚û¨X`qòƒŸzšßJ×$ñŽ£q„PÃfm$D›`$d”dñÓõ­[ï‹MfßJµµ’úúhÚ_*6U ƒ9,Ìp:Õ±®í¢í¤·w<Ã&7/^½«E'ÔMXââðÖ·‡eðÇ—g-„ŽQ/|â8™·“o,9®ø_R¿¹¶Km¡6¯·Ôì“G¨ÜŒËt8ç×]{4Öº}ÄðÛý¦xдp«mÞGA“Ó4ZÍ%Å´sIoåHцhØä£÷síUÌ÷W&Ú ÙÀí»½q÷ÚN·§øšmOH´µ½µ¼·X$‚y„f=½0yÈ9éõ®¯/[XûØmöq'Ú÷»ó˜ëÓœÕЩä™ñƒ×¶MìSØáìtxR/e…ݵңH¥Ì_glœªTvʺ½i/eÐîá´Ž)'™ aZ]‹ó3œ•—§ë7ÚµÜQE¢][Ú‘½înp §N9É÷Æ+|2Ç,c–ì¡Þâ8sá}ko…Š[Z—ÒT,àÜŸŸ åù}9ü1W›Â÷÷ÇĶ·+ j˜1J“ï+µŒ®Ñè_jзֵmJçO»²Óm¥Ñn˜©—ÎĨœâL6œtäò+¤7_—žãO²S¦ÂðËþ™ÁUw`/\qÏÔWW¥êpkZtW–¥¼©2 ¸Ã+) ©÷øU™dò˜Dî2>P9ú“MÊÎÁkœL×tý7Vðíµ¼ö7o+ÃxÓ…¬½C&2Hç§µE«x^ò_²i¶1»Ú[–ºšÏåÉ ¸ue#œ ×uö”höà†Æ~”å ‡²çœ÷ýis1ÚÆ-¥¯‰Äw‚ôÚ.Œ¨ÙP ìÜrñîµ°¶±óÊã·zE’I§9ùG‡SV¤tQÊžƒŠ7 PKãp8íQ0óHã&ƒ#ì!©>¦¢ŒvòH±ohÔ‘=H?MŽ)œw‰”¿‰¬E߬hF}Y¹úUA¶²¶7vÁü•#|[²¹èÏJ£5ýþ¡©Áyý‘6èÂ®ÍØç9"ºËkŸí=5ÍÅ£F(ÑH#ñùW:JM£Ð”¥MCËpÒn ¿°ŽT¬ :¥Y|•%@$N+ˆ“NÔô ó>Ÿºhœ*œŒz0ëÆkgKצ¹¼{{«9!VàyÚ[ŒŒcÞª3èÌjÐûQwEÈô69K%¤s™™ P^òˆBà{zž”:®Ú°….gh£Œ²øumâeº¿·—K†òKÄ‹ió 7¯ôï[zGÃÍ NÔVæ5¹žâÝ–HÚyIqÆÀ8÷ÍtV——Vñ\}˜Ú£Å$?¡â´ToE# ¯ÓŸ­/hØ8$ì4** 8Àõ?Z®Ìdß*G–väžx4†eãZ†´-—€ž ì~•Ê^h±j{&[™"—‡Ž:×Ws÷[ ÛŠç’â"¬©?)…ëÓTӽʞÂiÅŒ <ÞDÝ Ø\óêkǧÌr+~6Ÿع|t8®cYŽPATôãéOFÁ%=»Óc wûÄSÑv˜tÏ5¢1c÷–ʶx<Ó|Áçˆ[†ûàŽŒ)ø>^6Ž*D Èv©8Š­D<žÛÃ{Sc´²<Œ Ž„qŠB€98,1·hõúÓ׆ ÊBg jh3w¸ãå‚zdŠrK¼2:…Çja›}ø¦! íÉRŸAÒ˜X³… Œ’{ÓÕ©CÐzS±Hã' å> _ÝØxBáí¤di]cm£8SÁÉíNðU¼±[t|èD’ÿ÷=~¾žÕÐÞÛ[ÝZÉiw Ï‹‰c+•9÷®f/Ýi±Ïo¥øŽúÊÅŽLZ¾ÜöV<­k'^Æm4ù„ÔüÍ&ÏF·Ðïa‚Þ[ϳ0Ø$ ¸±Ç'³1EÕæ¾šŒ ½úKy£\Íq±#2ÌA3ž*Õ×lßOÓ­cÔu–ÉÌãu ÎImÌJõÉ5>­á‹=TÙ3]_Esh»ò)vÊG|œsž½*”¢+2Û5«F-n-ínâ´K‹©|¯036FqÆFIú ÈÓ59ôï évqÑvûÜ'eè;ÕO@°×Ì ç˹ީïÝÙ¾R9jJJèz˜§Q¸ñf«a­< ç‡ÊU3–’A#“×¥jø3T—Wð–Ÿwu&ë™ù®Þeb¹ý)Íá--õ9u[–¹š?%Ù®¤ÎÜc7OëÍ^Ò´[ ÜZéð²DX¾c0Éÿxš•'sšñ6–oõa¢ß$Zö›ñPñ·ð·×žj­æµw®xkBÔ­®n4ás}3¢cX© ‘Ó#¯"º KÚV©¨›˜7O´D]&tܹÎÓ´ÃëX~?]>Çúv˜¾\Pý²û4yæo›çUE§d)&µ#»›S·¶ñ>˜u{¹`´´[ˆn‰Q,d†b…€ÿgò5bénå²ðˆ‹T»·kÕ1Èñ6w`Ç#“šèbÑt›­$ÛC ‹+¢Ä,Ëç9cœ°#ÍW—š[EoÙät¶[´È<œŸáÃdz~””XÏDºÓüižú•åźi^n×#;ÕÂî8œVVúx#PÔF³¨»yW$,¸VWbgœnk¬±]^=NDv¿P\Ï'qŽ[§·­;Oð¶d÷ M‚ëp•ZWeÚܪN>Ôî‡fs‘M¨SÁÍö뀷–çíQî ®V w:äžý«¬Ö­Œº üPÊcw¶\>SÉÏÖ²Àz ›FФ6ÌÆ0·R|¡±Æwd: ß¼°]JÊKIä™bqµŒNÈqõ4]tŽGMóäð†cS6Il¾bÀ»î%GËw8ª-®ê³øHÔ×Puº{ä†g¹t2²àúqŒã­u àÝAgpÎ#²,aaw *—;³´àqÒ _h­§‹1 ÀµyË]H¶r Øô©ÝNÅ};T¿Ó4Ò"û}ÇÙn¬džX &ÀÁP03Õ³Ö¯[x?H±³»‚(gû=Ò:I\»FŽHPI9Îj”s‚ƒ±áW-Z¦±YÝN,tø n2Œˆ?y€Éÿgµz.ŸªiúxÃíkso=Ì ÆŽl$ôsž¤ç×Û½µ»¬E≄G1‚€ì>£ÐÕ;›xå¸IÙÍýÛ˜ÁeÏ\Rš—AÆ-= &U““+!WµsÚúÛè>£g>5 E_2,pÊÞ¿…t¡`qÇ>µ“©xrÃRºέæó26ÐxïYM]hoFqŒ¯#3T¿Ô5k2-9ÖÖK²ÙfoºtëZZ©ÑìÖÓY½G¼?à lì`p*ÅÖiucmbEDyoÃ.;ƒRÚxO‚É£kuºÉ,Ír¢F'×&¢Ò¹£7XЂd’Ùf²’(eoPF­Bdß½›%qÆiÊ¡R5A0=» •Ó6I$‡½Sz$®eÝ’Ž yö£Ä"ÞÐ|ˆ]úzÿZô+ÂYGjÂT·–Õ|ôR…@!À*i=X殈­"œ`8à}É­Èw'€qXÖXÀn íÇzÞ¶F1”Ç»×26˜œ ^ªI;‰èíÅ"n ÂàÁ<žj]®UÈã-ýjÉT/xýÐ4ˆª’ۜ㡤.±! µ³…É©#a°£$ý(`ny(ö¦9çvà ëéJò>"óœà¦š¥ŠʤôÇ¡ëEÁ!¦2¹#ëŒf…CÀ`–Æ}9FAÈÀ'ó§ÚËû“†è}(ÍxÇV} DšâÙCÝO"ÃÏBÜgß[GЇ†îšòÿÄÏ5ÄadK™€¤ÏUœö‘ñ^K$µÓÜͽ·¸W‰>}‡$¾™“YÞ5Ö4ÛµÔmâ†)îšÖ7Y&,Û”üÃÊ^Þ¥†?Þ÷R]L¤õÔô›BÞöM4Qº©r¯ ©ÁÇ_íåìþÒ%‰àÆD‘¶F¸ÈükŠ¼Ô´CÅ^»ao,RÚI†XÉã`lûç¬Û+õ¼ðn¹g¥)“ì׿U¶ˆµ¹cÐÜ}hTîö'ºŠèWÞ —ÄKç[Hë´nŽ˜ÝÂ0êIÁÇ ®±õ«[í!/RâÌA±wÈÒ®Šƒµ¹àçñ¬gUÒ Ö§ˆ´;íKû6Úþ¯c±rs´sƒŒV<7R]6¡¦hZ%ÕŒ7ÓL÷[4Î*B0:sô¨¼;5Íï‡"Ñ£Ñnìï-¬^qxÝǯáY:ºÁqáÁ&™áÍJ’ú ˜5«eÀ³ #ŒœgµYÜx¯^¼þÆ¿º¶¸Ò•M³ ™—$¦qÔ‚çIGMçEeâ +Q¾žÒÒþ)®!ž5=rBô¨cñ§‡@„R&La^¤3gq€3Üñ\Ö‡=Èñ6—¨Ï¤^[Ú1­Õ#±dXpm uÆäõíQη“xîÙt-@Ü>¨ÓGÙ~ìÍæÓû¼}x¡E lía×,µk‰m4Ë«k‰b\Ȫÿwž¾ãÜUoë0øoÃÍu$~tÆEŽƒcÌ‘ ŸóÒ¨¤Œ~&%ßö}úÚÉ¥‹q1´uPûÀN8ùxç¡â­xÛAº×4D ¿jµ¸K¸Tã럔çÔBV`Þ„Riþ' v5e}Ec.¶‰n‚ ØÎÎFãéœZÒÕ5‹ 6ÎÞMJé,ÞERÈFâ¿ÞÎ3…¿JÌ>7y4¹z&¦º©R‰höoþ·86ç¾zVo‰./šööÒ=Aqu¥m{¨m‹™X«f-Ù€}sŸÖŸ-Âæýÿ‰tm&{[}CS†t…ã,ß)@3»==`ɨYißno&¾Hm›JIYå˜ì$É´㽪¬÷OðŽ¥.‹¨m¡–"[R^7(¨»—® ÔñHŽõÙì/Üé¿fÜÖrgVf`§iƒÛ©éBAs¬MVÄiÃSšö$³Ù»ÎÞmõÍ7LÕtÍUž[ BÞíS¨Š@Jý}+έ¢»ðák;™£Òõ’úÝ up›˜ƒ´€X ©ãúVØõOK­ør‘¢ÓŒ>lèÑÃ,¥òàÂç§µ.D‡ÌÎûÍÝ’«ŒsÍ5Xy€9¤·Šä¼uÖ“MŽÔ'Éö=Ù-‘×qé€kuG' þ;ÒY™„Lc%˜tõN#ö(%šcò½RëVAX‘ž¹9lŠY¡KˆZPbpU³ß<*—vR²Ü“]Ôd°ŒVÖâØU]Žð3Ž{u©¦¹»þÔ« G}»8%ñóÇŠ¥¦M¥h²ÅÚ½š²mY.>a‘‘Û¯jѾ±¹}J ÛYaVDhÊʤ©SƒÆ>•—¼t¾MÖÚ™öÚ­Ô:bËqÉpó4Q¢1äóϯjlšäßd’ækIQ¡”!#vHädóŠ‘tMA¬¶½ÅºÜG?ŸnUXI9É<àƒN¾³Ôï¬fÞÙJª… õç=(´‡zw¯+^Oֱſ 2¹sŽÔÍS¹¼imQ!™<ÄtrÜôÚÜp{ñš •Újr_nˆ©·ò@\’\ôçšL±¹ƒP{©bŽ‘@1DĆ`~÷LÊšæêL¹,ìSQ`·º·gaP©œävêM —ig£ÛÎ¥s.H~[qPsÎz~UwMÓõ5‰§d·Ë Wl¨#u«ZÝä¶ÒAä ù¬%b #€8*.×4uÒþ¶+Ï|ët3dþGš°Ë;»˜ð0½H´ø`Ù≠€­$ö±ÍV¹Ó5kÉ呤·eYÖHšbNÀ;8m-õíi.$„þZÌî¹ÇÖ›z¢}Ô´} m¡dÆÍÜõ«µò“Ü Ó§híÎ$`WåòF}«JÊ+Øì"ûc!›§N½k"¼»Ö5˜!¬22$’3S+ŽNžµRmZÄSŒ]ïнq~¶ï¬RM#¡uHWsÇ?ÈT:®¥Ú ̶o$r°¿2?\7§$ö÷6Z½Å¬&âÙa4@€ëÏ 3Ö –Îô麉û1y¯¥È‰X~íHžqRܵ)F2¬KªÄ±Asƒ.·œ®ážµ«¨C$öÌ™d8-¹Ȩ.EêßÙßÃbÒD‘4OåVRHç®âµnÌÛ;¥»O!_¸˜Ÿ~”Gf•ä™… ]ý—Ñê%pí#18ÉéW­¯‘îå…2`¶ ‘‘Ð{óY‘Ãxž“Om>ádVØ…;9Ý×Ò´£ó%Öí®EÂAöo-ÀÊäƒý(»V±RŒ[m–W³òb »˜ÃÛÁÉíÍU‘­ÓX¸–Úý¼øâýì ’ª9ÇcYìn`Ó%·]Û²^o!*À¾ìæ¯Z\¼M;5Ê+Ûˆ÷4 °ÉÆqŽø¡É±*j7,iºê^@pÈ¡ ,{mÎ>üR ZÊ{y¯RåLPü¯´ä{~u™fU|94¥M$ñdY¡Ú¬Ûó×¾:þÛ'y¦Õâ’Êà5Ÿ(ßgظ zÞÙ4¹Ù^Ê:ùVZµ½å«Üy¡bEòÀmúóOŽþÎè3As²ÌÚ=qøV ’K¯ÂÆáÉã2DÊA”(ÇsÿÖ«Ë5¾¡¬Á}iû,0:É(Œƒž0¸ÆN9§ÎÈt£¨éµ:{wÙ©Gd'z°GLóZöl²iñœÜe1ç÷ýëŽG°Ô$6Þ]ÁÞ›¾ŽÑœú«RÞÿT]‹i–Ism䢱f!ƒwà‘Ǿi)k©S¢’´{›ÑJíhõ4铞OJ†%hÁ•U&Ø è9÷§Ø’Çh÷ÇéTû˜-Ìû¬:1 À?{Zânµ]:uº‰±gÌ[Þ»«ÂÌ;b¸{Ë B #dM¹ðpsœçëJ–ìsØ×±SÀھحøW*|˜‰b1€¸_—Ò¶c8‹ãw®k˜Òbö9$޵Hʃ7'&š¤0'péÇ8©K†P}:Õ£"D HrJ‘ÈÝéښ̎0 0ç'×%¶å‡?ÊœŸ¼ÈÛœzUô–6—Ê',OB88*T|Üçv F#%Û(ÜÌ¡ppsØP„ÂU ž¦š¬U9Üz8©‚»‰›Ó ¦‚dž'ޏâ›Õ¢ãr/fl5¾Urüwgòüi##cµ@$cåÆOÖ±í|O{¨^BÖzD“iM+Do€}Þ­³®AõZßÄ×kVPI¥47ë ¶žGÄ…”dîNªéš|ŒGP òò Ø(õ©" ï,Ô&Ðmï`Š{´Õz“’Á°o¨ç¿OzI1»ŒÅð¼“Éõ¨å•LLÍ#5É.©â+ gIÒõ¦¼—­pIù{r’3ŒŒÖ|Þ)ÖÓºö ñéÿjÓ¯¾©´3`žNOµ; ¼ #H®Ë€Àã‘WrŒît\×q­x’?ÛiSeº¶3Û¼~`íûÛ¹ù¸íÅmøW^¹Ö4™ÚñaK›k©m¥0ä!(~ðžF 4†Ýõ: "rdôéøÔRB –±Ï W'g«ëºü–úžŸ„Z?ÚZ!û¼é#S´Èàdçõ¨$ñ>­{¤\ë:e¤š]´®nXM:!òö_aÏNÔ¤˜ÓGQmròÝI©Ù‰ÎãVÎÝ…W%»\mÆ¿¨¾³¤Ã¤ÇfaÔíZd{–`T…œ{0ýj©ñoˆ#ÑuA¬ôßø•Ü´WC{üáHÏ–=yïM&)4vĈF[†þ5RÖá¦$Nà ÿ ÇÅbx‹UÔSVÒtë­‚êK'Ï4Œ¬ ¡nƒLb1—y9<œr;U™'bg!û¹ãšÂ¹D}|Ç+J¬ÖƒkÆÀ½Èª­sxÚJ[K9F{¦·óÃ`°ã§¥ì~Æöhê`gû2üÀœóž §™.c˜k™–ÖUÓm –úFoµ®XäzrjüÑÏi}ew38xå³XŽü¼Õs‘ì»3bY§e`ø +Tô½)¬$iMÔÒ´ÜÈ$ å½sŠÁynÎzï{(xîÙR]Ù8 ?Zéì­e¶RÏrÓ—mß>>˜íI;°”]8½E¿¼ŽÙU6)šS¶8÷c8êO°õ¨´éîîcÝÚy¯´|áƒPk/TY?á.ÓØÊvip»3ƒÇ9ÿ=*8ïoÆq0¹X¦+–O¼±ŒvýhæÔ~Ér«u: 'upªÝÆO¥Hm›ô5‹ö»˜5ϲO"J"Œ‚¼Ž¾õ]5 Jkh§C ‡œÂ!hÉ#“ß=F=)©‘ì›Ðépâ<>Ì T»Ôc´šÚÝ‘÷\H0™Éúöªky¨5Ýíªµº¡IQ¶9È<ûå–{-êeW•æBÌ>Q’§ ühsik©±ÔOw,c$@30{ÐÕÁ!<’Ö°ãÔ¯÷SC:Úį ¸ žýO6‹yy¨@óNÖŽ8Á€žu àñMO[*m+šŒÁ°y8õÝí½™€\†W˜R~cÐp8«° îü8Î_j3jv–“ÃhM§Û"ÄÆO›‡ÆvúqëJr²(s¿#wí6æúK8ÿׯŠÌ= àþ”Û«ˆmáifm‘ %œŒ ¦º£Å«jQÏn‰´+ pr]N}½ªŒZµõÜÒ­ÆžñÛùEƒ…%GË‘ÏñqKœj“5!¾†îÚ9 £qòFFj\²¾ÓÊÆ?‡Ú¹'Q¹²ÓôŹ´Ùo0XÒT|OMÀôÏãT4}J_ÜÝæãìÁݤÈWë·öT9lkìmÍvv‹–` 9ÊËÉ'žD$+ 8 Ô²¾PÀ u'µTŽx™×dG_ð¬8¥fg°ïZ·3¤±f&,£®@Ã}²æ"d¶¸F‡Œ+s_æ(§©Rv:+2~\ôíÛ5´¥vœð¬{–<’Žõ¶¸(£Ì$õ¼þÖþØÓµ4¶¾’‚í¤·$àh#iú̺ðý-.ÛQ’$Kƒyq7–¯%Äùw^9þU¤ž$¿×µ}ã[X¤QÈ—¶¡[.  »ƒî}k§Ó"¹¶ÒáŠîóí·* <åBo÷À¤Û@Šz‡‡.o_F¼«Á¨iŇÚ*C‡6S â²%ðìÚV£§·ˆ\Zê¼ò)³\‚Ç'œûJì÷±å[ ™¼¸;?­.f‚Ç9?„î¤Ö4ýIµ‡i­-Ì|… ê~öyàž:t«>Ѓär_¨îf3ñ*üÍ÷¹•Wñ«¯ÛêÛhš2Þ/”ZI%”F›‰Àž¸Á?•jhÆétèÖý•¯"ge ÞÃÓ§v3/HðmΉ9‚ß]¸]"9|èl|µùI9Û¿ïÏn=ê°ð]õ¬wÚm–¬°é®Ìðs,{ΨÙÀžÇ®¬J§qÝÊžqõ¦1© œôÈõö£˜,s2øFèkºmí­ø·‹NO*qnl +Kw­@||4McLÄR.§3M+5Ÿ*Ç–ÇÏŽÃò®ÀmB 1Î:úûSœŠA8õ4)14rW^Ô%Õ´kù5·iÈSË®JícÜd~UNãÂz Òu«/í8¥þטË#}®ÂØ Œ? عʌ±ç@¦™TmV”líÏSJ9‡dsSxUh—«m¡§#ÄÞd c‘~PÜZ‚ËÂ{ë]XÛOo5Ü—Q }èêÌI9ä1Ž1ù×ZÒ.$eDzŸëNÉU ãv Ï_zJac+Bð͇,ç¶ÓÖAÏæ7˜ûŽqµfü øFNGZRÄ©l“ƒ‚súQ†a»½œþT=wv¸rDÁU@ãÒ]AÕ¤MÌr®Ò§ŒŠ”–àÈÎM†l“Óœt¥¥¬ ësþÝ;ȉ^Ô?—³;žç¯°¥–n$v´RòäHÛ›œœžþµ©†\žsL¸šxši]R8ÆK¿­G"ÚÆžÖo©›'‡tdž($) ÷­‘ŸÆ¯ÞÚÛê6om1eSŽCàðk–—Ç^†Ónõ‰”Cc#<³ToâÍ~ ßmð̨ úœhé¸ Õ{2]VÝÛ4„âÅÜ\2ÀÄ¡Þ\Ÿ§§µ(ð­µÖ§qsu#“0ÛÀcè1üóYÒxòM:ö8µÝçLÁÛr[ÌBޜֺ˜n¡¸µˆèДߺF3œÒtìZÄK¹FïÃ6wJ§Í™ qˆ“ccjóž{ç4O¦$ÚZX<*aLòãÿZ®þ4Ð ŠàË«Zÿ£í2Ù9>˜ëøTºWŠ´}\¶¼€äãËw(ùÿtàŠ|‰t¶–× _Zͧ5“yŠ ‡óù²:rG>•5߇â¶6°y }à †ääóþ¥%ÊD¬Ó:ÇŽ]ØøŸÊ¹i¼måß—¤éZ–­E–I­¡ã==häOd?o4÷4‡ hä‰ÚfYdó p3é鯕lÚCö+!i$ 2 ¶æ"±4ï\Þ¬’\øS³)fûHuíØÿõ«OˆQ¦¥«¢ë"ßvÏ1¢!]yù‚ûåDiÙèLë9-YÔ_é)u¨E¨ ÙÒD8Ûôªpxe×O’ѵ ¶ÌáÜðFy'ó<Ÿ¥OáßAâ.%‰£-¸+ÈdSÈ ÖÚn%þ^1ÆOøÒp]JU§d®`ϥ̷éz×’3C\0W¿öÍR°Žò+ÕcRÇó̯$lŽã“ôÓ¬~d?¼»ަ²ãð½”mù÷fÉo Ëòž„c¥C‡cHÖV÷ÀYÉ{"ßZܵ¸¹€ T¨l®8úu¨SÃ÷&ÎÒÜê‡m¹ÝòFwçú×D›B•DÚ§ ¦|¤eAÎzŽ*ùÜÏÛIhŒ¯ì[忹º]IUî# òÃÊ‘÷yÏN¿I¤iWw·wׯó\`l…6¦sïZqX°ç°“š” ¨ïŽ)¨E1:ÒjÁ°¶4冬o¸ËH¸uŽs]søSÃòZý”èvKl2ÅåªÇ‚q늚÷úù„^év·&Ä&hƒ°ö£™Šºn­¦;ZhÃXŠòù­VMÙæTÆ ƒÓž½k‚Ñl ƒÃ:Ö©§Is.§c-ìVÀÜ»8;s‚vó“ÔŠíæðô÷~%ƒQ½[5²±â´·†3¹ƒ®ÓæÛÂŽ9­+LÓŒ“Xé¶–ó:mw†BÀv8ëEÒZ™Áè¶ ÛK}‰¢œÝiϰXÌŸ.KH2[~{šÃK= Á¢H¢º¹•!¹”\ÍÒIÏ œl׫Á£é,†ÛL±T›ýiŽ!±Ï}¿Ž*¡¹Ó%ðW‚¹·/íª°óÙ·;ò3ëŒýkÓ>Ëi'˜~É»žO”¼ã¹ãžqHÖÐd–µ·týÚñÿëÅ.aØó°ú:x›ÇQÜ=±F´FòK€‚cרb?:®·ð7ƒ¼¾sý—æG¢Èį ¾;dóšîâ×´k­Cì·’^bѨä€pݰJ¶m`xš‚&‰òLEÓõ ÞAc‰³‡O¶ñV³ofñ ôß2ò(ßG.qÁ)+ÎgxitHô jhbÔZo)¤ófX`OO»ùŠô[]>Ò v·ŠÎÞ+r0aHÕSß#¤]*Ä2‘gn»rÊJ8Ï€¤æ46ÕbÒ¯¼Oâ(`*O#nrqÚ·5 {}gÅ:ÅŽ«ªý‚HR3hKmÂm »9#šÖð=­ÄÚ³jtö÷^Ép’O†(ç*2>+¢¼Ñ´ËéÖ[ËKk¹#å ±+múdU9j$ŽkXñ«g¯jX·µ‚dçÊ¥rÒ‚‰ïRÜdêž&Õ,õÝA¢¶±¶‡ìj×m - 9˜œsÏJí¦ÑôëÖ†{» y¦„þ饈1OL[­'J½¹ŠâóNµ¸š>¤…Y—ñ Ф‚ÇâéíÖÚù ½½šk+XÚ<\yimòå[9Ù¸ëŸÃ5.´4Ý_Æš:Ïy(ŒYLÂh®LaˆÛÑ”ÿ½Ÿ¥vwºw;Ü]iv’\IÇ’HT±\c>Ãô¬¨ü5¢Ëb}*ÝàɆ6ˆmPOojJHv{£ÒÚkúõÖ£woš d‚vO-vçÌb>ö}MC øßû?Âv/«A¨^\ùž(·‚ nN;šë¯ü5¢ê·Kuuiþfø£.¿Ým¤d}jíµ¥­ŸÙ­¡ÀƒäDáTjm§ ¬Êúf¯§£Û^-¼Ñ,Ë®¤Wæ”"‚Ã(1ÓÔÒÛ”’~Hã$A““¼Ž­EÊCÌl®FB‚LX^"»ñ X›ÃÚLUI–+ž7r1·žOâ+a”MsäÆÌ±‡ò9>¯$Q‡}Ò@ǵ å:ÄÞêKOÛB,î¤hº{1þ´í^ÃÄúµé‡^Ó&¹Óƒ[m:åYû†.wc¯ã]gŒ´˜®tƼ·›ìz…©ouœmqœ)=vžsVü7«&»¦Ç~qò’Æ9Û á¿_çVä–©£Ñ³ŒkHl`ý߇¼W¦À÷-/ ©>¸ßü…r^Ö.Íýɱðâß^4Ť½¹S•ãMU´–êßQPFe•d|µ ·$ô篯5FÙæ“âÅ÷ö}è¬ÕgkwT.·'‡¬4ýKPøqq G¦ê^ÙŸ2A,{r³Ø­ß"“Úhž%Òu»‰í¬®Y§ˆxÝob ‘Eß‹|?i©ÿg\j1%Îà›bu°Ú²¼,ÚwÚ¤º²ðî™;¡ó§¸‡Ë$ä™'-ë‘é\ž“a¦XjW–:ö…yªÇzÓC2G+Ç*³nWàíÏ9â„›gXþ;ð¿ÙdºME%ÛË9bÇ8\c©Áâ§ø}m¦‘õ(U"uY2 ØÇ$ǃùW ÷ÖgÆÑëÖöQéSKåL¢ÞL´Š¹[›q·æÆ‹[žY|onöÒ—½·Imˆ„•‚’:‚y¡Á™—|Gi÷Ž|+:NÒÇrÆHðß(€ù¾lÊ»y!Š`<ÕVTpê8#¡®çUõ¿Éemu7ÙmdSºÚM ²*.p=TÖ¦¾3“XŽ}JæÌé«»tvÈ>c‚Á$½ª$ŠLëŠÎqŒt"Rz¢®~Q»'ñ5+gËÜÝ:ã¥Dˆ$„«‡8#5Œž—5D;•hçiÇ5æ·Ñ•Ræ‚bîrçß®sé^™>|²H8Ûß½`OW2‘nî/Ü«+à›pÓ^_Á§éó_\Ì#¶‰w»±ãÖ¼£~£âÛ¹ô\4×fuS‡lO##¯'ƒŽÞõÙkÖw¾(ø¶Vá.Ù`»[gùC•!Šþ\úSq×PV-ÚøÏL¹²¾ºuº´Km¾`º°o»·?{8àuéL1Ó¥Óµ ãâ;æ!+*dd|ž„sY÷ú¯‹õ îDУ¶¹‰£ÙÊ’ÈF~f²Lû×>!ñ«øŽ ¼?rµ`]“Ou`L{$`qÔã¦)ò¡\êÇÚRiÍ{5ž¥ ªd’Ü€æA‘P;Ÿ¥]ÓüQc©_]ØÇÚ]Û'šb–Ý¢gBp ƒÔví\¦­g¯ß|7³ÓA›í±4£)X¶ùÎ0Jâ®'öËü@]\èw ÓþÎß¾³¿æíÓñô¢ÑÜ 4ïé_…ã¹Ót»ˆ!¸¾kh­ÚbÄäàdƒßµmYêÞv…>¢ú}ärÇæ-xx v9ÇÉTO ɧÞèP]Fo¥¸xÅÒ«aË0d~0ÊHëøV¾…¿aá&ñEö ªÁçä‚x Ç®3×Ú“Qc,|oo.—.§>—}mb¶Â´H #q±yääÖn§ãhï|-®›+[˜¯màF €Á•ˆãœŽ¢³“Añ%ç…-´9ÞÎ[=¡XM½eÚw.F8Áµ¯ãñN±á«Ý>çK°‰æ‡ÊÊÝçq=[…à{sÖ«ÝL55ín4Û=CJÓkȬ ÛLQOÈ«*œäG*¬ž4¶,z«i·ž[ÞO/ \6í¹8=3Çz«<øÕ´N;+yæ¶µ{kˆ’ãjÅ~eb¼ýßJÄ»Óé_”n‚}é÷Pëö¾*‹W¶²‚æylD7v‹>ÀâAV#ãM¼_wIÕ#ӭ渆cš”"Æ‚9=pZjĶléÚ®”u½nU´¸µ¸·HšîyÆÕeÁÛ“ÐØRéþ3±½¸´/ öÖ÷ŽÉm<ГÀ7löõ¬ÖѵKÝWÄ^mŠÛV¶Å8™[aE*7/\öª=WUÑ4}2[v±–&¹¹WVM±t(A$“ÔqÍ+D¤ìt÷^,Ó¬îo¢h¯Ù¬¶ùÆ+fm€‚sÇðàuéQkšµœþ‚{}V[a¨lû4°&é\6v8îzV2¦¶ú׉Øèå“PµXí¹ŒUJsÏ|çð¨Î‡¬Å¡xjå´eºŸIF·¸°vFóQ”)eä©#óBŠÙ«áåÒÛG¼½¶Õ/®›,.§»!¥ù1Œ rxõ«º]ÝŸ‰<8Âêê;yr‹2ü².=sRé‚x´‹™¡ÐcÓ¥ùŒ6¥;x/·€I㩨m5 BÏÂÑê¦,WŠë; $%‹``ß‚yãšMu<÷EÕ¦¼Ó\_x»P‹Q7ÆÒÚ¤BÄYŽFO<×uªø£JðóYéºÆ¢ÂæH~y|¼Œc–8é“Ð â|;©¶•cwcyá}Nâé¯^ê5û8;IÁ^§Ž•³®êÒØk^Õõm&V„ÚJ’Á>fÉ\) ƒŽxþu£Wd§¡ÞiÓ$Ú|SC:Í Š'Æ2àâ­I§UaÜŒæ«Øß%í´GÅÆ­¶DÃ:ê*g¹Xcy2Ny¬t(… xãFäÈÇïÞ¥¥mfWqѱIÔW1åC}¿Æ°üMâ}C¾™r.&®ÓËöýqBÔmØæmÍ–xãê¶0€òy¬½5<4.µA?“mq©F¯ue>'qVèÀç<z%Ž×G¿³½Ð­T[:ºÝˆ¤X¡d v’X¸69ëŒÒ(ÇÕRÒ_Ú­ÕôÖ“èÒ‹fPž`2GÂîEëÛ4ÿ ëNi«j—º¬ee¸ "ý•á@ääíSËp{ð++ÄW7Ú—Ÿ¨Z\ĶÏŠil‹$oWisþ¸è žk"+({ÒÖÝŒ åÉiz¬Ñ;(È0xb»IÈ=úâ®É«2Ôì¼¥%Σ¬èð½ºü–Oƒ,eÙ÷c¦yâºm_ZÒ¼#¥Ç  Ví†Î]Ò@;W#8Ȩì`#yíMÉl‰K«;h.­olື=¼ªdSÃÈ«0¸Ù·nC œÕÉx=!Hu WV¶´¾š8¶ž6œ8öÜGáKý©â9<{6™iýœla† O¸0Fb àrÜ8V|·eÜëX!*FxäSv«±útšâ$ñíá¾%´?b­i‚§ÌeVÚÒnÈ¿=:Õ[Ÿ믈dƒû)¿³%Êǵó$AAàúûûbŸ#atz$`" þÑþU\A$ÒCÑ™bûÈ’Ãês:ˆõ†Ötk}FÛOÚÄO$&fxÊ®ü6x9•›á¿ _Zxš+Óoö-:ÔNbmûEÃJI;ö ƒÈž”Úî;æóFxæ±gñNío.¯f²+´mœ7+ Žµ®&Ù&RÙÇW,öçãU³G‚NŽØeïlþ™¢:ƒ:ë=BÊþ¸±»‚á3€b8Ï¡"²/üK¦XJ-îoc7D¶ÈwHÙ酟ʲüB–úO<=}eŠæúvµ¸H†Ñ:êØêTóšÄ¸×æ³Ô|Aw‡ô–»Óç,óO›"íÎàvžvûJ\·ÎûqËž§°ö¢1å´ œgó®bëÅfk«+&Ô¯¡óÂÜHQ#ä2O°ô©¼9âFÖ5;ý.öÀZjEDŠŽYXãþH¨pi\µ$o•˜Ï&A$ã·µ=I›,:ÓîqŽHüM.Ð#+“êk9"ÑŸ¨¼‚Îaö¤ñƒŠâWR¹ÝÚÔ;¡t}œd‚>jî/Ki*88u*OáÚ¸k.òÖw…$70íÜ 2äô÷éUJ©~‡K`ÕÝœqZç匜s¥eX ¾Y Ÿ—ŒÖ¹4|ªã+-Mg¹|£†Îzâ¥`IPsÏaëQ( c “Ø:” ò3ŽxÇ¥jŒØôŒÆ$ôÙ$؇xQÚœ£ËŒ³Ó4M¸‘…bÇëOQ ÙʈÆzóÜT¢1¹†zŸAíQÇ@8ù‡ qÖ§òþfw#$ýi«€¢@>î98Àæ–•„6JŽ­×ži9QóêOoj•aRþiŒ–ëÏj­DN)»yôŽi û¶qÀÜGµ;’È ˆ`HÃgÞõúÓ$n¤ê¶²HÅO ã€{uü+&çX²ÑÚÈÝy…¯&#¢Ë\r¾8ñ.«aâ;m9a…4ë…_ßO KüÞê»ø“Ä“øwG»)§A¡{ ª®_ËcÁö' ùŠÖ0{²;™á‹RpnâIa†@ʲ(a¸t5¥ö­øA$u+Ð×/¼Lþ.½ÒížÁ´ëU…%VÜU÷ŒÁöàUx¼I­AâM6ÒìXG 쯱÷ÍUÈf`qÎ)¨°¹ÜÏvb™X0%¾\‘Ò¨ Rîöd–67;>žÕÂjÚ·ˆnì¼SåßÚÀšd„.È fM¹ü§O­&©éš¶‡ÃE4:ÔNìžY¤(aÉ9'½ŽÁ̶=7ÍP…T| vííôª°\,ÓHŠá¶˜gŸÇÒ°üK©êVble¶µICy——aåUL‚Äœ×#á ßjWß "—ŽÍrÆ«œNrÄÓ (]\.¯cÔcFPª·Ôð)ã…K»TÌÜ=~•æV7ZÝ¿µ]Zë[’ä>5Cù_ÍÙ»vsŽøíš–+Ÿ[h·óêWh…´òÖûJHâAÏPã×?ƒR]ŽÚ{Ôk€a)'È® ã$Ô{u­ Ç…¾\ž;â¼¾óûzÇÂKâÖÈð[O$| 1Ÿ}Ù&º+}CQ°ñlúMÖ¤×pÏcö¨Ì‘„18}¸ù‡<óÅŒ9‘ÒéîÓÆP g;»sVäf–eÊ…'§ç¾Ö¯fñ.ê²ÝÇx“ùѬXY9&ïùšmö¡®'Ä÷ë²£iWmå ‰0ÈNÓ‘Óš=›½ƒ˜ìî¦ AádËŽ¤~•±² ¥zúŸÒ¼ÞîëYĺ,m{ȯ¢iZßÈTHÙP0ÛÜŒžþ•èPÜŽ=í哟–B2OÀïK• Náq ŽhJÇ»Ì8 sÒ²4­JË\»¸¸²ŸxÍ´€.0ËíéSø·T}7ÃwwèÆå“É·U“#ü«Äæ¸ß‰´_ͦ]i’YE{i¢oY2ñ¤ü½Ï'ó¦£î¶ žy¾6xÙƒ’ÆOZ,mÒ>Aóœn<’¥rwºÍÕ÷‰â¶ÕR´è£–6Áº£6ÓŸ¦3üªµ‡‰uÈo¼:onmŽ©ï#Ž»ËÝÙ9÷£•½Bç]®Æ!´Y¢ ç«Wݤք;ÚÆKΣ,së^{s­x]Ôî×E·Il-nÍ¿–Û6¸S†ff`ÃÛ­=ÿˆ’çÄvö·Ö0®”‘ÉërÀ¡BûzõÀš]Á³¾;˜áG^ ri² ($’T稴MIõ Òöx„RÏmŒŠ2eÉœî‘FÌÊJޏëM FJË#ꓲË5‚?ÈéWfšCF$ÈÃ<ÌÓ¯Ö÷V½ÿE‘#%q!Bt«ð[ùwrÈD?)#ó©±E‹-á$RÛ¹㎕$Eÿ|¬>^ªwdž*§›ä¬¤ÄÏlá®@É€H9=28’»Aò̈r£;ÔÚ¹ïÜØG£Þ‹ûØmÒHZžNw9îy®’÷‹8àíkÍü~Øø‡Âú…ôtèæd—Ìó)ÉOåUûÖ&[ÚŽ™¡ØépBVH pËI‰>™rÇè*ådžµ2çFŸT„ê7,³“+•K¼`îIʰåHçŽkKNðòø¢ÀøšÒhÿµI"h&KwX,Œt*9êsL{Øm¶Y_ÙÉkª1FÃ?ê®;yé»ôÅi§B™½gh|9ªZÞ3Ý ]EV¸îe3%FKwÊçÝkGÆÚü$»ÓÂ)¸ÀxIÀ 㦿#ñ®nkYoì$ˆÂJ`q°$ö׌ü®X±ük¡Ðµé5M1`œ:jp*éJ€Q±Ã`d Þ¾µ.ëRíÐâ4O\Ïðâx^ÚÚê÷KG*ÎT•9݃ԎF;âº+ Â~‹½3,Ê%ÝÅ÷›3Ðû\Œ4—ðÏ¡¾0A-†¤wKF’÷b Œãïsêk¥’¯fûD²>¢…¼R;mûCàþêu;Ÿ©óTû®¤Ç±ÈÞ(¿Y®‘a³ŽÜ\Ål„b aÈ,äÇAÑAõ¬O² VòÂáfX%›OK…›)2®{ã§…ý+¯Õïl4 Q‡zÜëX BNæÀ誽z¥§ÙÃ5å…õ͹Š>ÞùcÈ„m77±,èG’vWFóʳ ­6P¿Òb° soïw×rugA¶ð–œïsqoy}q+–Š)4©U#p±í#¯z>ÅnúÛmƒËšß¾És$õ–!ÿ-"=JsŽqéVŸÄºö™n÷’ÀÚ•ŠÅ¶Û|¢9É‘sòÜcµ>š \šh-|Mã;[{[{«{8c7±MB$Ãf1µ‡ ±çØW+ã}Tkþ1[4bºeƒ‹w–3òÆÌ~wüÁûVõö³uá}NîG—RÔP²°\ˆòNÏøÖ‡ôMeô`émŸ ÒýªMBõ¬„}Àò@É>äÕ-5&Zètz‡„¦µŽÇL†ìË}©\Ê’L~øµ( ç×hDç×ë]g"°t—ìÞ]„žppZwÚU×’ÕÊXxšÏNÔæþÌ[ÏkW&5žXW)wTÇÊ ;õ9í[«á{¹ Æ·â+Ÿ6é˜Ëod˜­¸@þó5ýK4¼¦M§h0 ‹‚×óÀw9#ðéøQ}áË×ñÖlõ™í7‘Ïn"WWI'îçŸÎµôù[8Õˆ;W ?RK§°XO\öiÔ˜Ç×Ù©»G¦xEZö]nËW¹ŠÚáÌÍl°‡''$!#+œÞµgRðzý“Qš{¡šˆ 4‹j¡—wŒžÇükn ›»»;)co}¯p¤à ™Ü=‰ã¯zÌñæ­yc¦Á5„ª²,è$/ð˜/³Ï|й›Ü4D‰àë³q¡Ü\—ÑФCìÊ‚6œüÝv€?ZëdVòdÁ9#¨5¸hTÆÛÆ8+\ž½¬kºG…`úqÕ<â»cÜWa8Aþ.G^æÃcjÚÖ!§îMªe;˜ƒ’O^µÉŸ kÒx£û~ÓS°‚Xã6öÊÖÌËåç?7Ì>nMtÖÊtÿÛGtÛeŠWËgæéõ©l.ã¹°ŠXŸz¾0AíÞ¥6¶Žz öEõcTþÑ¿Ž3°£„7Rçß=+$ø7W{^Ô­ ê„<› $ÇÆ>n~Zî.Qš H ó~>•V Ør°M YŠG,=úÝhr–ã²±Éjº[m*îßRŽ=SLO%gX@VL`)B}*ï„<=&™=æ§{z/u;¶ýüŠ>TÁ#òýiÝJšƒÅ™#Š7 æ¿Ê öÏjÔ‚K@±¨Úx4œÝ¬ÇÊ·+n*¡p½óÒœûЦÀ¬¹Áç¶)'UŽËÉÅ4¹¡ÎKqœ}ßóÅe-‹D¬±ZÈņЧ$ö¬a$lY€úÿœÖ†®¡4[¯0—Ä,[¯•Ì›ãiåÂdŠXÑÔŽANž×)®gcfɆ®~P+dƒä©Ë÷ô¬›,ª  3ëZä'ƒ?s"¦WHãi ŽI' Ã𫑪íe‚íè}}*Yr9qÞ¬Ž@Æ6Ö´FlQ´¦`t§¨S IÚy㩨ÀÂc#Œ“R ¬K ?{ «$À¾´<С]Ì»Žvõ9#œZqÚÐ’Ø`y;iÁDŠ®Pa~nJ!èv±ÁéÓÖ¬€ªW.‘È «¨ÎIâ¬â3µÆ@ãò§°‰ V ù@àz°x`ÅØHèØØº‚ë’½~½i e‹.ÃŽ¹êyþ”ïrlr^>ð•ljô›x,®. ›Ì]ü+ 2:Õ {Á×úœ:e½ž¬,íìf8Ö-çzލé]Û€2O@ A"Œå@cÅW4•­Ð,Ž0økWOkA­´QM+x‚™|¾8þè<þf±m~j6¿doøH™ÚåæêÄ+gvI䱩¯C“{ÄóžœS2Kd{äU*’Ø\¨ãáðEÃG¬$šôì5SûÒ-ÑyÏëÇb‘¼v×:%ÂkÒ¼šV a_™Aö#’£nNzWhከÀ8ç¥I mÃ*áŽ{SS`Ò9Ý{ ®jöˆ»žÒ{@Ëûž®§¨Ïnã>õO@ð(е6–-^ñ¬’F’+ØPHþ#Ÿ›Ø¶y4±»jñÉÅ nÖ•îqÖlì^øûË›KÔ‘E´ò s“ž¾ô[|;X´©¬\ÕÕžLˆãþ$QÓž„×hGï†vƒÖ—!T6X(íëOžAdrMðòÝü843ªêBÏÎóG Óî‚3Z³,†¯§&¡©Ë:@-Ï™pt ´†Ï=~µÓ†äpGm´˜¶K´trp9ôÇ4)0²8»/…z]‘²uÔ5’ÒBñ·›´NvØzã¯zµû!e¨Ú¶©ªIû«Ünräuço~‡è+­ÉÔƒÐhi9Þ9 1ÍÒ #œƒÁQê:}Ûj:£µ‚á pœçåç=>‚²|i Ö«â=K³Ò¦ó .[Q#jB€üÀüGÒ»µ‘YI%ŽCQy&f,Tsׯ֎kj¹‡â ¯ˆî 3êW±CÞ°ÀÁWx$†9iº‡‚¡ÔüGm­>§¨E=¾ÓDê6õ={×NªZ3³p\c#¯Z­¾Hî$TïÆH”˜ìŽwþ¤Š]bA¬j,u1¶bY·ËØqô5 øSûWX¼+¤¾`WTmÀö$Æß—é]Eœ®öàÍ'™¿¦·“ɶ`œ: )=M>f9É|±ë¯¨Ùj·|3°’æÖÿZs×=åëT¦ð =ö­p|E|ª…'@‰Ó#>ËòôèMu-ç„_´îrAQ“íV<Å ¥¸Uäâ’”¯ 4r à»›S¡ùZíãÇ¥©U‡ú̶T`tèx®¿ËI]íÓ’F3Š¥\Þ™. #‘G©&¥·•¤•íå9uî;óéI»êÃbÈŠ7A‚û=3KŒ›IȨ.g6ꊇiv$P¦AvG›•:ý)ÝrP`°zv¨Õ“qlü¸À¦ÜeÕ×+>´‘ºy9m¿/·JWhcäÚî@9ü+Å:ž¤èÏs«¤RÜ,Ìèêy­hÙ·×·¥rž7Ю5[}:HØy6W‹4À·XÁËu댊¨ï¨žÆn—­ÜÜÉ •„vÞ3fK{iôö+9 F}€üêño:•ô¶š|6ò¾Äª$[¯˜ű~PsÖª|FÔR ÚÊ›ãÏImÀ$¨,X{.O§´|I¤Þxž]¡¾[M57sLŒ2ÍÁLdqÁ'=?²oЉtÏOkÆÑ4û‹¦’8Q^ ¹guQœÛ³Xú,CÃÚ…•ÚÛE \Ë¥_-ºlŒÈù2ã¶Fÿ¼+"Ùä½ñ\º—ª>§eÐ_K4²|¢–@ìNrÛ{úúS#´×5©µæi$˜]K3[Z“E,˜I,½ÂîUêE;[p¹ÝøÏñøÃ—VjŠn‚™ 'ªÈûôük“ð/ˆ4ÙmMΩ=Ø¿´U³Dû32B€ÆÐpNIÁâ» êªèpË ÅÔL`¸\cl©ò¸Ç¦A#ë^wâ“{àoˆiªéí6Ú¢aüÀÏrFâÀß øšQW\ ÷¹Óß[5æ•©ÉáÏÉ37™säB±ÈæN»rF@ÈéÔtû(´ïÝÞ’õìbH‘ã3IÁ.…A>PG¾*«]fk…»Õ´›;ã)s¤ÎðNƒØ }~›o¯Nm'µÒnˈ˜µÅÖ©)³}ÖàlçŒñÆM!5Þ‹kp X'ƒæ†h@ ½½ºåïg•5%лYêúœ›g–Ü&â ïžÏ´ê š©bºL¶¯5òÞkW{Ižú®F=p8왩ô;ËK=7Wñc4ÿbLV1M3¶zà9$| ¡+°2<_ö?xöÇò„„â}Ü ²ƒì¼}I­)to é7S]^¤sydÚXÛÝHóÈPÄ‚w0Pà ÊðŸ=彯­yd³]ÜL펄Wq,cápÇP1ôÜÓsâÛÍJè+iÝç†æHöùSO02žUò}*›è$º–´û;¯ ø’›‹­ÎÎø–Ö0ï| «nƒŒg5kÄžú8u[­TØÝ@ÿh’iÎøà^Ѫä.y=N*¶—a¦xÀ]ÜÜO= ‹«wIC`ÆÄmØîàŒ{ÕçI¦xoO¾˜Ë2_¬37˜F²NÝSõÔv%ðV¤—–×VÍ5œóZ:Ân-N#•Jî øOb=EGñ)-Ï€õ#w"!DÝnCì>glzõé[¶Ú5­†£yl…e¾‘d”ö%WhÀü3øÔ×–÷AîÖö6ä2Æa鑞ø¡=n=lq7 ¦ŸøvIe·×\З/„˜\çÄkA¦ÃðÛPc$FÖ˜Œ¤_iP¨FkÔfÒô©ã·‚M6Ùã…ËBÂ7R@ÇÓ_JÓE¬¶ðév^T¬ ‘ù+µÎs’1õ4ù…c“²´°µñ±‹G¸FÑî´ùöç- m³Ÿ•Ž[§¥s¶­gmð˜Ü "ó𠹃0j÷çîóô¯RM;OŠÔÙÃgm»‚‰B°Æ9çñªo£h–Ñ“HÓ’ ûß6ñ…צ(æî 'â(£×|iq¦ßjðØÛ-Š=e $,NçL»‡éU?°tÙ|a¦i­{ssjÚK†hç*­†7ÊF3ƒœuÀ®þM;@Ö-­ÃXé÷–аü‰"¦;/P>•Uô- õ7º]6ÌܯW¨aÆßËc¥.aòž_mjÐø-N-Fð]ZjbÞöÆØ‰ç¹ÇNr}}+ Öl,§ñÖ±ÙÜÇHÄR>mļä*ô®°øW@xŒè–C0fŒ@¸ÝÓ8õÅMsáíöhgŸN·’[xü¨ÙÐ«Ž”:‰°Pv<¢òÎüáÛ¹$‚ú+;GšòͧØìŒÀnSýå>¾µè~·±‡Áö­¦}£ìÒ–‘EÁÔ“È8ã•vo è m«hö(›r „aOåßÒ´ã …aŠ5HÔpèLæœl‡gpòP…ÜÜŽpy£ á¹<ût¦È¬„¹äs•4E3PFñÍ;€9`¼t‘p[î¶:})r[$§ã#µPP›¹;²xàS˸]Ò'˜ª3ó G•$ŠÅmܸé€sCÆåd€Âž¸î*¿”¾FÃ7ÌI©‘G—†@CL9ù‰€4ÒÐWò ÆKÆzb¡ŸÌ*Xg©lgcç)ËÐ󊣩Ë­œ®ÿ6ÕÀ¡=…7¢**îÈç-u»¸õ¶²¼x³å¿w‘]2 ’3…ÎvŒ×ö-káønŒˆ·a˜ííÝ{úàþu×éWÉ©Y¬ñ09\?±ïJ¹¾" {Éyêõ­qdʯîxõ>Õ§ë71ê2Yê%XF¬úœÿ…ti¨cÁ—޹ѦG©¶¦˜C2O˜ß# àqþ}h’iÝEŦ¤Ž„ǹ\îRqÆOzçd›Z‹W¶²k›}Òå²±Œ“úUÍP!þÃtH7b~ö8Á÷­¹>%²,2óŒúSÝ]S„œZTžüßÚXØÏr4lîÛàwçñéPêi­iv¢äêêÛ ¦%<è¼Âw|À›CíäïX>1dE 27Ìc=0sü©Ê6MŠŒù¥$G®_YÅu¯‰£ ´Â ®GҦЮõ=÷–·ì&xdQÆÐ@#éW´¨‰Ñ,ʶ@0O9ã©«Övö÷Ëd<¤yœîÀÇò¦¢ôiŠU½Ž~Ùµ+RêÏûLâ$œ=G½ZÔ,uŸ(µ®¥™SªˆÔÇõª6wðCâ›ó&å‹, ‘yãJ׋Y´¹ÕRÒØ†6v qØzÖqµµf³æOEГOçÓíä•de•ÁS¸qÒ­ìdVŒ²zÒ\“â¶27dSþ5 ­ËK*‰l¥ˆç$¹ʶNÚ]G^ê'N·ˆ˜žMÍ·©l~++W¼¿Y¥x-¢1Crdï>œqÛ=ë¡b¤1xÆ3Y^"¼š%Ô,6(ËqJ{n]-d•Š~ÕPÓ›Ìcš6åz)äw£Äz´úmºEiyæp¡Ø|«ë“ÅSÒ¼Í+WŠÊTÂÜÄQÛŒöú»}¾Öã‹fmíàb[ý¶àÈT©{¾fîœU]vÜ¥¦\j·PMä[­²’®ë!çŽHük¤Le õg×Þ±<,ÅôùÊÊ_¨ÈÏøÖó<{Õ@úô4SÚæuì¦ÒEKR–Ñùe6”T‘Ôv®b~î}–òÒ(•œD¸rH\Œ¶p=««šeÃn\F –5Ç^Y›í.}VC"I#†DçåŒc¸æŠ’¶Åaá|[£€Ä©”´àš¨³•½eXÜÆÊ<òAäM*c>› Îùm£vzîùUµfSÇ,}ëEµÌ$¬Úì3"A´äçŒ/­A Wª°ùˆý*âîPÄ…öã½ »j³€ÙÎ2?.)½DŠñ2ÈÅGN€â¼÷ÇW:õt=6õà³–Ýf’4;2 ²¶XrF;{×§ª!@Ê~}£Y:§‡4ýjkio-üÉ­Îb•]‘מ›”çÔâÔu%«žJ–Ö~×,­ÜonìYd—Í‚h\0ùICtÇ õ³±ºÔ Ñu}bÞoéö¦âÕ¾ÒºRØU|vF;ãð«þ7}ÜözÆ¿d¶„Þ_\÷40/EF9Ã1®RûF‡R³ a¦:º’;;(w}Š6#畉IHÁ ž+Uª»"Öz“bºL2Ϫiö²D³ÅQÀ`Ûˆ( K}kŒ—Ä¡&}G–ké.'{NêÉ€wf<¤ˆè\Œž8­ Y¿¶J¶“P²·“‹ûË‹(ày“Ù‹33^˜&·üeáÝ*ÓÁ `´¶¥ªMj샂¬>R{îè}sPšOR­¦‚h'OÒõ”ME]'Uˆ4Yo¹rƒ §<î+Éï”5/Ä=5ÏÜB©¾êæÂÙçpÄdU-?Hº¾ÒuÙmb1,·æóLpVDîè¬ÃƒèMuº&¨šÞ“oz©°Ì¿¹i{fd¶¸¶ºÙ¨XËò´ˆ ˜ä*@-†œgžzV¾…§^ýŽ XlSJÒyÿZMÌ¿í1¶s×u7^øy¥ê‘™[Û9ÁÈ‘'gäÿ½“Ïp©Mlʱ=Ö¥caysuhÂ;›ð»‹ ÀVÁô`¡¾£5ÄÍãÍgÄvMir¬I i&,Žª(våÁäsV5‡wënnõ]v{ë{WWeH‚8Œpì“ómëŽrk§ðÖ‹¦h> »···èâÎàá‹*€7u=½÷{U++ŠÍ‘ZkÅÖ–æh§X•Õ&^àÜ Rw#ížÕ…4 -_Àz]̲L·¯MÔ3:Ê$gvsø+SÑšÚÃX:]ˆ–ëQH¾`PX¦ÌçØsùÖˆ¾&Ñ<'k¤Å¢D×–ðù~t·j"ë׎OÓ—-´ ê;Bñ[[è·gY˜É5…óØyˆ7=Ã…ÀÏ¡­oi³ÙßÍ#ÉØ¥K¨f,ßt.ÒCg ÁëXsø6úËÃvÐ[ y#»«¼';IGO>”ýFÏV—Ç–Z…¾œ­emnöï)Amø%‚õÀ#4¬º;HÕü=m~šv–’D—ÒË$s¬MäÍ(å±êFN8¬M&KQñü›ÖÞ+´. lñÉ౨£ƒÅw®‰y£‡’ÚyVX¾ØŠŠ Š:(ÜœÕìMjãLñ”éÿg:žé- •âc€N ÛúÓ²î+롹‰-XƒLT¹Yîbó¢-“hlƒøÆªéž7Òµ»iVêÉ-üÆ’Kˆ ®Ô8Élc9þMeXÅ­¿‰ôK×Ðç†(´ók(’hþF,¹n u¨l£ñ.™á­WOM9eŠId‚YdYËÊXa='œt8D™Ðè^$´×nî-aŠî ¡E}·1ì,ч±­åXÔ}9Ïs^y§éž$—^ÔfkkËÔ-bþVŠF„¡9ËÎ@Àè+wú.³¥\^ɪk¨µÁ]¿)1ž€œ½°8¨”Rê8É›“3¹Éo””Ø›‚qŽqO‘£8zSbËl ·½e-JûoÙ¤-È*AÏ¥ròv?g˜©$žEuWXœÀÏ=ëŸk[·¦ YC}j`™²’Z3JÄís€¾µ®‹˜Ùwœtô¬« ²žz`s[1üŠK.3À¬§¹«1Fa7è \p À98óš¯äõÎ;UWÊBï\VˆÉŠWQ¼ 本LgƒÔÈëõ¦$…ÉÚ˜¦Oj‘Jg'-‘’4!Ò!hÁga¸ŒàÓ•@ À€æ“!ÁþÙ³š‘JóÁ'‚KvªóÇ €Ã¶N9&œ>Q¹ò2šÇv턊nâ#*¬Y½Í4HýÇ•Áü*«2°‘T^:Ôü‘‚À±õ¨•›°ÏCŒÕ—BWÌÈÝ©êkœñ_U³Ò ÝŽd€©ü Oâ»-Bí,_OÚÑÇ!i1 \ñÁɪ~…®Ûηé$pTäI!bsêqÍD»´#®võ7_FÒ‘e"Ö·ðÈ8íY¾½’+Ë2ãQ•nG#‚?,é&¤µ*¬žn>Rßsv:Ÿl×.þÕdÔMã_Aåƒ/’¤zsM«4Ѥ¥FlêY•ÈÄärZÇðÔèòj„–æä¶{m=+A¢»k©$QÜœfM„©Û ÖŽ©ØÍ,‰©ÂUØ¡9lxªwºfpQä’lÐ׬Œ‡íö¹[˜ÇÝã.8#·QЧa¨E«j–2‰ãŠ\ÀÉÛϯ­n3%ÁR^ þ5‘m£µ¿íKgA«‹oSõýhåwº*¥ºØéùj ¹úõÏxÆr–V¤¹¦F@ÁëùÖòm&m±ÍsºŽ‹©\;K© q塈£ÒMU‘8~XÏšNÖ6ôéTi6ª¡0§{U ¬ï°'’éT4½:úÍ WWbxxòöG°€;UÉÒYíäŽ0KÑdÀ;OÐñT¯c)YÏs˜Ò[ÅzŒck|ÎÀŸ]Ãúæµ’Úµ™/^æ4 ›ãi’Iüªœ¿µ»{¨µEi±9‹‚O\óëUu2þí%ú//¶Øð?*Å&–¨ì›Œå¤´±¹¦jÐj¾s[ù¾\D‘°ûþ½ZÎà@}Üæ¢Ó´ø¬4è--ãÀëÏñSRF§kîÉÁÆGZÕ]-N9rÝòìH£ËgŽ}« ]µ^éÖÊ’_1ÇNO¯&µ®ÚclëmµnpB3ËžÙÏ Z“U³5©0A`Š9è=êg{ZÆÔO™½‹> iqix€þé¶1ô¡çéV´i–kf¿RÇíOæ{/Eý)5K9o´o²Îc†yË&J©ÏQž{Të¶ÚYŽÒ4g~@ü)ü»u¢ÞõÆåzj=L/°¶×/­þ`~l܃éß×O$©·$Œž98É®HézÀÔ…ê-ºM#™1¹ˆéŒ˜Î+ š+öÒ¶'Ùþܨ7ÂsÏ隘hŠ®”¤šfFºX¬Ze¶á5Ù Ûœ<žÿç5f_Ø2¨œÉÆ<Ügß§JÏ‚ËY]Lj2E μÄ»F1€>•ÑÜ®-÷ȃv2Bö>”Òæwa'È”bÌ?ܵ½ÍÆžØ,ŒpHôúúŒè&¸‚8šIeŠ$Œnvv¹{«}Z{ËkØ´À’G×l€“Ï óÜV„ú\ZôVÏuö…X†ŒðO=ýE“µ‚¥8¶¤Þû’Ùø† OR[8‘±µ›yÈ1ë×­nöO^0+:×M²·#ìö±¡ŘñÜõ­!FaŒsì+H'»9êr_ÜØvü«6ñޏ…ØÂ²DÓ(Ë¢°ÜèHì=é°@ÙrJí<@þ•äô­oBñ“xžÞYb±Æ¦âßÇ…†_LúðsZEs·cOÅ\çÄwQÛ¤’Íyai6p¸‰aú×M¥Oš^—c&¡t½õÉ,~iûÅä=ý€8È^ê×w¾ñ “@ÐjöW6·ò ÆøÚÆ:…Ú»±“Ö¯x[ÃZÖ«aæÞK–“{ xÙ#žÎÜt]ç,ÍÉ;ª¤®µzètŸ4vÔ^Îg„¢+³\@Í$Q…•œc<ýj¥¦«{ãûcsoiŽ• çÉ–àd•—ø‚ö³Ïj“Ç6v¶þ¶³„}ŸL†ê™"*G»Ÿ`ÛsSi¶7ž³²†ò}=,ÕRæeòÝX/ °Û‡^*4¶…kritïéÙ›O×bÕ†íÍi{n±³z…‘ÁúŒT~ñ …õíìvÊÖÆârÏm?Êñ\c÷‰Ï\ãpÇûUÉèR]%έ§êÚ”±®¦öp¼ó£Á`#b¬pÊX…=ÆräT×"îûV³Ö,ÙÝj‘0FÛÛbNÓê,‰UkèÁŽ|<¾#Ð.­€ÌÊ¡à>’ƒÀúHúã¼/¬ÞÝh«®.mFÒÓû%!'n ƒgãnHô5èz%Ôz½”Š]Ê£l†‡ÞR;A‹eà›mÅzŽ»$èškµ¬[ˆ˃¹ˆéÀ,Aÿhú ˜½,6µÐå|r[Hðæà­=Þ{ÛÖqSó;É'ýé~€×Q§ÜÝØC‡<5mo'Ø"T¹½¹b"GÇ*òÏßuë\V—}?ˆ|E­øÆD‚Ü¥¦˜²ãi™ÈHÏá»qú×E>|×gÂúDÒE½¡»½™l³–$ Ø»“éTï¢&=Íó§x²+±u½cs&ܽ¥Å¦Èó× U‰SšÐÑõC­ÙÊ^)momäòîm¤#1>3ø‚0Aî+Î|'iá»Nym®î-5Ìf53²H¡T 7)88pÙÈõÌ^-êøÅr5Ô+?ö» öǹd»9QÓðúС®¡~Ǫ>7pIÏ$ÿZA$hÀoÁëóšãuñE¾¯¥i‰®ÄZêÌ’‹ Ž3èGâ)"½ÖuMRûI²Ô¡¶“M†5–v€3O+.s´ðª1K—°îvÅ£òòw ó“Þ  ÅO'8®sDÖõ{Áy[Á©–%/‚E$géÞ¯xlj°i µumutÅ™d€ç)Û'>'3M£Êƒ“ßÿ×NùDES€AÒ•™˜T{Õå–ùBçó¬å±hÏ¿@Ö’gålN:×ý¾lÌkwn$eã̈p{×ov‚[wVÈFpqŒW.›y§\rÄc°4æR±’-×piª­•ÀËm…HÀ1Ø vÉ<â©2@ă…çó¡p?„àq‚EDòî‘ça;NåýiÁ‹Ä\‘€;ЀBXàŒ(äߥ4€†áGoZzŽxQÙ‡SUægÞ±…#–£a¡|¦”BÃ’ŒŽÔˆ 82¸T97¦‰¸;wI¨æBæEÜžŒ21Lè6gE(ASŽ€T!äYÕ¹$.:T>j¶DxÛ××Î^è_ÙÚ%åÜ“Í%ÀüÍÅ@çЬ®]8ÆNÍØëL‰¹€LœçZW„ËOåùÖnŸ¡ÚF-îSÍ3*+2“ÎÞr*·ˆ [[›KéeˆÊ©2‡àŽÜv¦äÒ¸(EÏ•3j(öEˆÈëÏ9 |)`Âλ‰,|zÖrÙC{â d_.ÙWr;L‡'§ÓbïC´»’kÉ¡2Må•8Ú9é­;»] –)Ù²ä‚8âå1ãælc󨧌Ãp’ ãs·jÇÑô{ý9$‹299”uëëÒ¬øºÚ5Ó¾ÖÊÌb*¨ûGRæv¹jœyù.hA}Æ Î‘­æ?ò=©£šž7.ªq¼0*}©#²…tô€ÁÙÂ}Ö¿zæô’4[d‘ƒ>é‹3ãýSg>ÇŸ3V¹*š’vÜè<Ëyn(n¤Á#׊XíTŒŸÝ°À'½S±´ŠbúU‚k(äg$ãëÅ'ˆeOKC0€]8ˆ¹8Ú:œŸÓñ¦äš¸”/5jȪïdÑN3UĶÐ"¬Œ¨Ìp ¸>Õ[ÃÓ4ˆp&1«ÇZÊ»ŠÝµûíhƒÛÌ A.x\ `žÆ”¥¥ÐãNòq} Ñ–”ínr 90¯É9¢Ýc³µTY ª  O\çO[·Yt‰ŒƒMøÎ#ŸéM½.JIÊÅ‚KÊ©8ãŽsèj&Ý …b=ë/KÓ£»ÓRu–D}͵¢‘†9ÀïŒUmHIuáÛ…¸|ÜÚI°º72@õ¨çÒæª’æå¿‘ÐJŽb_)—+Ô0ûÔÝòyx\n¬Oy4šuŽŸcd¤Os€¯žGLž:´4‰c"âÎîå®ù³Väg Ž8ªæLN·f¬Q–9îO^ôˈžE(ƒ<õÎ Â{v“Æf’áâyáÍ€ÙÇLôï]R‰pÈ>”Ó¹3%÷³ÅžMC,Sy±g( dãŸÂ¬Cô%—jç•# ÙîF3Ò†f™Æbr2Þ‚§UÇ̹ù»r*4DrëïNVŒ•@ã§@Ýi…ÁYFªr*^ kë9í§‹Ì‚T(è9:¸V2DŒíéÊ¼ßÆ>/ÕbñŒ:ªZé6ñD²Ü]Ü*d›ƒÆ8êx§ÞˆM£.(°µÛ+\Ò'¶“JûH?%Ì þ©³Ÿ¼¤m#¶ìô­Í3Ä—:E§öX¤÷:E¬is,÷+gK˜°»f±|Er—qYÜxêvW.± ˆšÚB¸D7û­‘\üÚ¬éâÝÎþÜjr!×c`o•BѸ_˜nµ­¹·&ö=Rñ›ÿfêÑ¢ø{PŽK{ƒqËØ8ôùY}2sÍ£hÞ"Ô øy.®âK+:¥º÷P;ÆÌz‘…È×Wc©iÀÃá­KÃϦ[ÜÆE´3²ÊÎÎU¼ž IÞ\D¿tŒÊ¸É:“ŽÂ£Ñe¸k -Ú˜ÚûSºÔBŽ¢"®GÐãó­8F—%ŒË§@úo†Õ„·º„û•ï0q´ùˆ= £Ö©U"’ß™-¾Ñ +|,6ƒlâI޽ÒØlçAñõÞžãÃZ&îÔöI€jóë÷¿:§ñsÄfÏCMÕL—zŸÊB“‘ Äœ|šÁÕo¬5û[K ý¸ê–ñjC<ó´€È˜ÝIäáŽqÆF+ß]¶ñ?ŽÄÔ—Vº\ E$LSÉb \°9†9íž)Æ?i“)t=!<(4¯†ë§[.ëÛeK²A?<èÂO測Ëm~ Ç·š¤ä¶•©ØÛº\.Hˆd€[ÑwdØ‘žµ%Ÿ‰l|3¯­‚kWzŽ›(î$ù-!!XHqSýàE\Ö|)6~š†’±]Àžg™¥\(!ã“Ò6'€OÌägÒ§®¥zµßìKëû+Yt{KÛ»ÀïtQ¹UA,_®9¨Šî­µ [´{{M1e–&šYG ˘ÑGÝϟʰt]?ImN)<<ÚdÒ#4‹§êa’æÑð2ªÜ•_b¤{Õ¿¾§}ªèö7^Ó ÛÉ#Y±¾.#*g *‚>éç?J-¨îMíÍ•ü—ב·’"–êéTœ£ÌáãLr#^{Þõ¡$òXI¤ºªêoçÎÎ3äÏ?ÝUÿv0äžÛ}ꎳâoìÛÉF¬ŸfŸOdx´Õ—{ÞÜ2²»ª1Àn*¶‘¢xV²—X•mnËÈâx­îOµïs¹^¼*àc4rõ`åuc¢Ñ-aÔ¬uw·óÂþñ„mnÅO”бd}„ñÔVÈðŽ›uáᢵΧýžŽŒÏÎÕû¨ Ú0^¢­hº®™wá{[í=V×OT Ï$/ð1Œf§²×,5 •lõ[‚PI¶9§¾:ÔÝÜÒÅ»[caa±¹¸»òýíÆ‘†Iä€3Ž*»/ÌXDwã=*(üE¤]ÜG ¶«fóJÍƳ‚]—“´u8ö«PêWrµ¬W¶ÏpŸz$”ë‘×½&˜Ó0®<4º¾³iªI{¨ZÝY¯îDN†5'¸+ÎG¨iþ ´¶Óõk+¹îõµ9·Ïæ>b~ðô=9öÔ=õ¬Wf–ò>@ï‰úu5Ú…¦—ûýBú d•g®}=éÞHŒ»_ %³Åuq{{}skEl÷ Ÿ¸c *€[ÎMTƒÁ6 ¥jZ}ÍåýÄwç͘JɸIÇÎ ¨çå_n+£½Õ¬4˽½½†($*Waµ‹c=þ´>§§ÙÔm‰D0ó—!ñxŽ}êo-Ç¡‚Þ ˆÉe;jú»Mf¬!wK õÏËÎxëéUï|2&ÕæÔín.ô빗˘۲0™!÷ö®ŽM^À[­ÊÞÀ`–As, «6vàúñQ%Ä7 &‚xe<º8aǸ4&ÂÈÌ‹ÂÚzøzM (Ú+Y¡ØÙ|“’ÄrÙ©¼?áË 鉧ٙ]wf•bOÐùUÛ»{åg³»‚áQ¶³Bá†{䎕iâÁ Î3×?…{ΦA‘ùô¨ã'ËÛ“€Ý©®£ï ž¾´ø×0@9æ³–Å-Êw¡~Ï.âySœv¬‹qŒÉ¿z4i´Ÿóï[xò¤Ç*T¯ÂÇuyv%d`$ƒ…Çòê(¤¯{7cª°DÜ(ÎG$u8­–ù£1ŒŒô>Õh6&B€{†5´ªLciñœŽ•Ì‹˜À¨m'$ž¢¥DE#küý3Ž•`¤•9À<÷©£Ûµ\ð3ÆÓV™›X#F-–\ëRÝÈÜGÒ”‘2Øô÷©v’“è*ö&âÆ¨ðp%SJÆå9玕;€”öêe8S“–ÏAÒ© ˆÛ¶|̓‘€½FCªòäžß.*mÇ8ùsÓ4×| ¨ÉÎGÄF ŽN@#©§l`¿{ænzôæ‚ ÷‰Å£<7NÑE€l…Îì~ñàT.­.B·É×w­NʈB®~¤Ò; ”%O@ *4[Ø1@#Ó­ekqj76&ÖÞÌÜ „*Ò,¡BóÇÚ·Uç úç¦úÕ""¬aHHÎ ;\¨Ï•ÞÆn‹öÔÒÂÞÛ,2 ¢îÜH œtÎ*ÕíŠ_é×Ä£Bp­ÿë©Uòp¯\Ñgn¶”ù¤vbÌØÀÉ5],Úóu+hÖg¥¢Üspùy=Øõúö«W/5½¤¢ÕV[‚2Ø| ”0û r@§ÂEŽ7JÚY ɹs3'Ãvz­´–×±Ãågrº79'¡'ˆ¬ï/,£²´PË+2V#äükB,IÚ¹éÞ­íØ*9â—.–-Ô~ÓŸ©ŸiÒéÊ.‘ä!ÀŒ­é’zqН¥YNš[Új0BS/–ä†RIÇ>™©lõÛ[Û¦µ&Y•™J¼|qßÚ’ÛU†æèÛ"\#¨ùƒG´©÷Ï'jjúyèºLšl—i+ fQ,Km€~™¨þÏys¬¥ÃÄ‹fˆÑª3å¹þ,~•®í´œdð9£/¹”8¹*:š§+ê;¹u0ôë[«+ë––(Å­ÃïUW!éÓçéT¯N¥wÍ’Eo4O!Ù+71B=A¹te0•ŽM¤~‚±<; \èmtéîLïææBr $à{Tò«XµS^c^Þ³X%¹.û@BÄu£¾I%Ó®py’É*ØÉ#в«!t¿yŽ1žjF˜· ëÏãM'kÍ­ÎOžþÃOŽÐi®ÓGÆK¨_Ï=)“ZÝŤI[ù÷,Í3,B’yë×Óð®…W §éQɼ†ÈçŠ\ºX×ÛkÍcêÊöîÎÊhâolÜßï9ç­Hú•ü¨#‡N¹Šw`¥äO‘:gžõ¬¢GbX(öÿUGå\É$o#€¡·Q÷‡uRÍо¿${Ò2óòGP¸¹Šáž8‹«˜äõÍUÌÔ–)•÷ ´gOJz;˲’=?•EHK»&Y¹ÛœTÈŽavØì¾´;ppѺnÉí\µàIµ/‰–zà†ÞãLtAu¤V_ºFû¦»È1NÀ\pjMÇÌfòˆǦjã&¶"I3/ xz ’h´-:)Ã#¥ºä098ª~3Ñïµ+K;½#È]SN˜O›£ðC!ö þ«¡yKaLg“ØñùÔnà¹V‡úäÑw{ƒZA/†¼yâ E‚éc·¶·ºÅo{>ì¸'…a–ÙƒŒøÖŦ…â˜ï¤–/ øn íòï•É'ò¯F’à[©šE ®YØãhþB©YëúVª²2úÞçÊ IäÈ®{ãúÕó·ÐžS<w¨Ü­ïŠõgÔV2;xü»d#W?7ãYž6Ó®ŠôMb->kí2%òn­!ˆH|ĽÆô®ïr¤9*pOu÷¨Ã T¾ l(qÉëBž£q9Ÿè’jö6søjdÓõM>66ª#Ùò8å ‘ÆqÇä4 ÄÚ®· I¢ÿfikwÕêL9šd9f\Œò{1Þ½e'`¥T ±s€©5(š&UuÌ‚Eܬ£ \ÑÎÒ±6ÔóxFãTÕ-4½DNµŠ_>{Õ lX€œcó¯NŒ´ Îå$rH¨pаœ õ'==X}¡X—üGûRnëR£¡µáMÄ_UÓa¸‘c”qÿ5Ë]ü.¶Žd¼Ñõ½WN¸‡?g-/ž‘’0pœÇZïË|Ë‘»Û4æ`¨ZB’ORæ} ±Åx[áݾ‡&¥tuMQÛ"æeÁýÑ“Žµ[ÄÚf¥á›=G_Ó¼G¨®Ùe²œ ¡rÇ“Û¥wÌÅTœäç¢öÀI0ÀÎy¦¦ïv;EµÍçÃ{÷Ô­ÔÈ®.£¶Ú1 m—D#G_­aè1G©§…5 &­-³}tmLa”Fnp7dóÆx滿}²ãÃ÷¶ú|âæhš­ @7 $öÍWðݽ݇†ì­u5Ki­¡HN$»Q@Ýœ ƒG6c•ðãi÷šüzeœqêBæê[W6ÛÖá193ÂI ÒC·c âÞXäS2åŽ0A9äžMvWZ•”:j_›”6L¡„¬Ü0=1ëžÞµÏèQ6«¯]ê¶:ãý‰æ_´X˜ È’"µ‹`ª÷Æ;ÑÍtÂÇÖxU±Ô£OøIÍÑô‡˜¾ceî{r: ÕÔ/“Mñt#ÅZsÝ[>—vû¡óPËÞ`~bõ¯E»½²±ŒÝÞÝ[ÀŠJ‰f`¸íÔÿ*Í>3ÐþÖØj´“2Ç–”¹è7Œþ4ùÛ[ŽbÿRÑlü[ü$=.m*$ÓâšØºFyÞ0pݯR^Ï£é^7³šâ²´¹Ðü¸¢’,;øB1×n8¯J³‚H Ž;ýj)Pm,Ê Ž‡©ë±\¬ñ¥ŸL‡Þ»¹Š¶šš 2™¬ìXßåÁ©/-^_é6’&ƒs5±Ä… ¨y­ã€y=k®ñ¥¦«¨]èÐéºKÝÇiw䝿¢) OÈ7½úWW&âƒ*T÷²J®{!ZçŸèv:&¯-ßü#zÍü7ˆ¤¸¹ˆ€¹yP óÛž+¦Ð´ ÞxäÕï5 %“~û£¸§°þµ«ikœmª„ç 1ÏáÖ¬·ËÇ!sŽ:æ¡Í±¤EîdÚÀy-ŠW'nãÓ’)Ò•b¬w9ÛÈéJÅNrséYÉhZz™w%Tð=+•¸Òþêæ{{¹"—på#­u· 2ça\ÌZ„2#‰‚Î’èxÎ3ϸ¥I»²§²5lT~rAè;VÖÕDAÈbGn+Ä@Väâµ—vÎsŸLW:.dnáÁ=}*hÒ5-Ÿ–™†~>èÏ8«òÈUSì*јâê’n*Ç–©’µ ’F9g'°56“vc¸"*îpuË•Ka¤¥ÛœqÅ1¦_ÊiÑæ_AŒf©Ü_츎=ªUÛ ù¾¦¦q7ÚÈŽð©lcÓŒP†Ëœ2Çpy¥Ýóæ¨xÓÁ—Üæ€ØÈn¼R3æ[b¼g Z®„“ m‹/û>âªj6úŒöq®Ÿt-ÜÊ71RI\?XÆÆsšÏ•Øè•Hó>ÆV©u%ýÙûuâÄ"Y#Hޱ8玟Zèá™å¶‰¤t2„€éœrk ô—šæâêKÉäK‘µ¡!@ÙίëV4½8iPìk‰g;^C«ÙJqRLšŽ*Ûk2fj¶š£ò™L3mÏqúÕ«x]4é–Šâ@fgî¬z~Cð©µ!Ô·˜þì2ÈÇcŸþ·ãU®Õ/ìå…šhã`¼gœwý(QÕ‹8¤ÌÍyo#2\^Nå¢^ …ÚI<‚9=)ºL÷ÝY…¼‘÷ÆÍ(‘ðtG×®*´:$,ÐØê‹ÉŒ1ŒEh6‹V1í½™Ø–ŽPeǸ4¹djç}wò$’YWXÌÓÉDí¤žªÞôD%ÿ„†ášövˆGæy-·hÉÆãc6™¬Ý\^[^\J–ófHpB£€;p3Ó5¥ºj¢ýo® Ë“å¹ùJã¡è(´‰æ…¾BZIyyÞÅ2*ÊÂW#nyÉëžµÕÕÝ­íÌ^cÌMÖá£$¶1ï×õª‡ESrí£4+É·^rpzZ·qÞÞZ^É*ïµ c“‘út›@¥ü†´—ÑêvvÆá<¶ReÛÞ#ÍJòêÃS·wºAc+`ê?wëžõ›¤Ï©j 7öœ±G·ùc={Ö”ÚtShkc-Ù!–òNAÏøÒÖÎÃN ¦ÆÉ}©E¡¥ä¯ºG•H)ÜŒž¸ïÇó­=2aqa¼«6IĉÆàÓŠ‚êݯ–7´½0<-¹JŒ‚1Œôª'L\XÃ¥$^L¥ŽßùhIÉÎ=j—2d· G±Ð2ð>fù†8íM1/‘ÓŠrÎŒûVE8éÏéUîeS§š€ž?Z£rÄd+„ó~b2ïSòŒÈ2qÅR ±[¦óòuÜ›qs"HV€ËÆi@€g ;ñêiÆ=£%°G§ØäÄ\ŽIäÀ¤óFï˜òÜM'Qà¸É#®+‘ñ‹/´Oéº\<—qÞ‚a0L¿?*äc#Œä÷®¸¿ˆp+„ñ&‡¯j¾1Ò5Kh,×Nrêe™ÕßpP¸u­TlÞ Èäøƒx¶ò·†®Zm2B—È·)¶%;ƒÇ8ñ¬‹­WVÓ®´£yvóY£G IÀïÊÌ[zpA=…j¶…®4^&‚s¦(Ö‰í•È‹å ÏÊ9ÆÔWU¡[O¦è–wiûxDlbbÉ…d dWÍì-^ç=ãë¹bð¾Ÿm<7‹›Ëxî<…Ï™†—“üDp;ÔÓkº63êI¢\¥÷ÙUî"†Ý|Ø ã8ÍOã [Y±´·Ò`³q Ìw,óNP)Œä9ÏéT¼Gaâ}i.¬ã·‰l®tð©åÞlDœ‚vsŽxZIÝ!›Ú¯Š,, ÓßÊžöâôo¶¶¶@ÒH»wnÁ# ç¯zʸִ{cÃw3iâúéäûK ‹Èb}à·\œúÕ 7ź–‡­ÚivÓÜ[ص•Í™¹xurôííÍ?WƒÄWZLJî¤Ó y¬¦k‰Ñ.•Tv©nIU “Æ{S²B»e?ßèRëWêzƬÖvî–³Cg0ŽÜõÜ7n~ uÚÆ¹i AmšÂ+[xP|ƒ$I¹Û-']Ðu}V+mËR³Ô.Þæäc1Æàà‚HÓ5ÅúV¥4úF¯§ÙÛßM`î%³—dG¤ñ‘ŒóëCµìKÄÕì´›«› ËÚ¢Ã*íò®U°7a±ß=H Vô¾$ˆMª[­…ãK¦Æ’JW÷ŠÀË–äaO\t¬ VÓ]Ôl4¦·ðÚ[ù„WM w®ÄŒò àn$œ`&¤Ôtýv {V¹±ÓVæßUÓ’ ßhXÚUq‚_¼:Q µ5¿á1·ú\–ö7³ÜêP´ðZ¢§˜ÈÕ€è}I«&Õ´¸¼=î«cs64*e€!/µ¹ädcž¼×4ÍwPðýžŸq£æçOµòìîmoU%ŠeÀÜXà=ñžë¡ñ•Ž£sàhôÇ_µêRÂ"wW ¾fÌ9íœô¥erµ/Ïâ«M.M"ÂÛO¼^@ZáŒ6;<·Aéß5o@ñ·ˆ-fž(.md¶¡ž” êã±Á#¡¹ ìuÏí? Í”¦Ÿ¤»®lº„$`s€3לԾÒµM>ëV“UX¾ºk”ò¥ó1ž ŒN´4¹E­Í‹ê•ë3JŠçMŽëìÒ\5ÈG88gT#G=òpqX¬g‰ukíNMmR 8˜$i/<´f– Îâ2s¸€zSô¯ êz-ÜÐÙêð¦%ɘ)·>hÜwÜNÜ{àšlz§¥RÓNšÓìWò; egó-ËŸ 8êG"•×F=KZæ¨××>¹Ó,þÑdò˜‘ .ò"b©‚F>ƒ$þ5 wÆ[¸µVdVVU(áIÚAã9zqYáÍ[KÕõ+½+àÔ0ì—LU­äÆ2S¸¸â©7ƒu;;Ûi†ÕâÓ$7I;²\Ÿ˜(à`ŸÒ• UÙÓCã{UÒuKÝBÊ{7Ó$ò®-Ù–FÉ® ðs)º_‹´Î¥ ö‹§½¤jâwmÑm9ç$/Lr?ZæÿáÕïmüEíͤI¨È³ÂÐ3Ž„mÈ#¡ 3ɨõ #Åšî™{k©ýˆHð¬wH¤pxã‹D.Ê~×ïÄ÷×ײÊll]îmîîþYäÝ•xÁ*`cŽEw>Õµ½bÞkÍ[KM>ÊÖ‰».ÊG;½úvÅj?‹5õ‹V¹Ó¬­u-5TÛÇk– VçxÈÙøbó^Ô-eŸ_±ŠÊ]øŠÎ@ÀÉ#'½-kŠ-õ6ÜîÚG-ŽsÐSݰŠÆhÛ‡é‚x5Ê$ s+ž[ÇVT¸a×Ï?…pW¶Û.æ[ÈÄgsyRîálñøWy2³!ÈëÏçYÅÛã¸2†s‚úÔ©=Jšº-XÝódõ­7,¶Ò2),@ÏéYÖ!±–$ñÒµKƒʃhÍsĹî"H®›€ÂöÍNŠ÷F8úš­v.ò*ßÌb…åŽ}}+Tîf*€§€jU'œœ)K>v¯'&œCd]£É9ª!Н»<Ž´ñò$m™§’9ä‚9Í<›’sÁ9¦˜‡y›ð7ü‹íÚƒ’Uƒgu5Šão»×?Z—rª/:žR]Üá@àœS‘òëÜS¥? ù{p,]ràŽÁAÎ(ºËë^’þè]ÁzÐ>ɓױÈ#Ò¹¿Å©ßÞ5¡Õ¦ˆ„%ÂÈ_¡.ãžâ½"á Œ¨a‘€G­p¾ιtÀ¤ˆ°•ÞüÝjZWGm ·JMô4çðÅìpŸ³k·(ù'9!‡§­g躮¥g|ºN§.ÝÄ*Èüã==ˆ5ÚùhÅC© u•ËøÆÞ²Et‰å¼m°:žqœzZ©.UtEžÕòMng|BñŒ¾²¶¶µ…f¼»W .챎qÜäþ•Ëé¶§ðïö­ž¸é–fŽ Ü]~ö~ïì3[¼7¨ø‡ÃºUý€ËiHð÷ueRHÏ*{Ÿˆêš,Zo‡-e¸Õï $ U·$a‹1ãºcnUÊqIZMŠì®|=¥jº¥å­›^@Y¤Ú o¯<þU~ÿ\Ò´© Šöú(e»!aˆäîÏúõ®;ÄZ6Ÿ§x@ð¥ö£ ½ËϬ‡ƒ’Y€<íÉÇâ+óV–ïž¼ñA6³½£@ÝÝ 61÷wãJ9Ôg ÍâÍ;ïìöÔ¬÷żK‰²ÈÈ lž?JžhóhŸÚcQl<Ï$\àÐŒf¹¯·hiñ^ù÷ؼÂÅ"R çÍ,ÅÇ=NÞ½ëŸWŽÓBÖoô/³ßií%Ìwúpa„]ïåÌ£± Ž=µ%;žŠÂ²ôkñgð»S–òZ5åï’ÒÊ1ù„)Ç|* ïTã}DŸC®økaqkág¹’I¥7ÁeQ+TcÉõëøŠÕÐl¯mõ NK­GíË%ÃÀ9ãûzà;b³#û<7²j–Z”­¢išl–·i †tQ·h?.qÜwÍhº¦“àý4 ‰lÿ·/d{«(€d„<’HƒêM.^k°]C‡Q·—Q¹¶‰ã’áU\Æ-³¦qõª­¬Cê“3À‚ÎÜ1åÔóË ñž1šä>Ë¥Ãâ{ìÚ|оæ \œ[Ư…BI's±úV^­ogw¬x“^ËöxOÙ–-ìEÕÉ8Æ>U8ãØQʯaÝÍ—‰à¹ÓtV•¡†ãP+² 9ë’=}+RóTÓ´Û“¡uo ¸eG$€>Ãëšóm/IŠßžÒ.aš{ûH–âáÔ’¾ò§<* É=ÉúÓâÒì|eâ+æÕµKh.eÔµØZácŒœ(ÉùTŒ’qG³[‡3±éR\}šÒòå“d{HD‘Ân zŸZ[9à½‚ÂæÓ2[ÍàS•9÷úוx£UÓ¼E¦ËszdSÿØãB‹(åˆ4´úñô¯AÕµÇѾÛÝØÅö0ðà >`ìáð?Âi8$5#JkÛHõ+%lK#¶°!I<zݹ¬›zÚò]RÜC0hnª–Àóu+Ï8ëô®sBŸDƒÇ—wP«1´Ó„‹s bó1žwc؃Ÿï £ámOÔn4ìâin"•u J÷Ìbõzn'ïÅ>EÔ\Ìô{ÿi:L±[jWÐÛ¼ßêÖFäÿ‡¦jðpX€s‚‘ŽÕå:]Ž—ã DcSŽ=NöùËÙ¤'Î v¡c¨žÃë]&¡«|K-"麟 jå™Û8<¾9úRåK@æ=ßtø'Ô$`HÊNz`ví?í-§Û›°«pc_4(ߎ\Ô‰ˆþ&ü…@Ó£@Ø8'“X• ²µµÒÌö#.Ì»DDvÛÔÿõëybXp»¸ÉÍp¾!·š×⇆™5 Ï"óÍó- äD q’QÉ?¥TUÁ³}‡îÐ[ ;†8?Zƽñ-Æ“¨éúiÑî®Zûˆ%I+0•ùˆ#V%Ôš£ÚxÎåu»ØæÒ®ÚKb¬¡@òÕ‚0#îöÅ\Öî^÷Qð%ä×ïOË–ƒÔ™5Jz‰³KLñ¾£m¨y¢Ktã›È'*1Ü pA§éšÖ¹¨K§\E¤Û"ð1‹ŒMc(̤c‘ƒžµ‘®xQ¶ð÷Šõ‹ë¨¢»¿³ÚRÑr‘Ä€áAa’NNNµ?í3ÛxG†=RN˜ŽžLB[™ 8U*FßS×éNËt7üCâ(ô 2)-f›í÷)n$R!f±>Ù {SbFi±$À4ÛÚ>g×ךåõ ××­{ã-KJ´Ö^Ò$°Kˆ¶Û#íË@ÏÐr}i8ô+ÎS ʼnÊóÅR‡SµI¥½­Îä„Mö™‡“¡¿¼=1\=†½â7Ð|5­ÏªÅ8½¼ŽÎ[clª ³”-»¨Qsjw8ÅžàŠÒºGרœ”p§%xu'ó®/ìrZéÚ•üZü³Á6žÆ’Wå‡Íægc»œdb¨XA"ËàÖƒRÕTjQ2^µ1ÈòƒEç<Ž}é(ÈôuÐddÇÝ_á4ç†D(Osï\]\Zh2Ó ¼¾#N–F‚ãí,d@X.üç® Ñg{;ø³@cs~Dör˜ä¹ýÞ·$sœúœÑÈÇzÊ^EmêXpxÀ§ù²,rGžI× àûû‘«;U–õuWåÏŸæ[ÜB[!ÔrŒ p{ö«-Íî·­êñE«mvC+³FŠ*¤œ–ÏìÇxªúŒë%œ)jLS¬¹f?Ä ãŠqÝ !›#s\߇噼gâXšþæâá€Æ%²F\30QÐ ÙŠ{[§h`ž)%€è²eÏ÷€éYÉY”˜ËJÞÊQÔñ£wÞÀqëL†úÞùd–ÊHäv¶ÖÎ ¥âMq§¹ƒqûFv䲟áõ5[L>ß{snÞ@,!6íÖ=  žzžk>mlt{%ìùŽªÙ„Ñ™#mÁ½óƒéS¤dd3ÜãœúW%¥jÚ¬÷ñ¥žiûþid$q’ ½k­·¼¶–CO:uPàšjHÎTåÇ)ÜÃ8=ýjÞ<œæ–â/.UùÜ*Ëš—`nЭL˜‘›>csݸ®fké-.® ñ–ƒr„#’2Q]Dà™›h;q\¶¹§ÝÏl­&Ñ哌c99üªi¿x©ü&ýšµ‹|€ô¯º¨‹'¹'8³í›î*Œ òMjüâ<óú Á-ÆÆ¡ò@ã§SV¹Á^G9昅‹™?tTÀ’ê«´’kTfõ$@6ƒ“È$f“jÈJ‰2p)T7?l j“´àû«Hà`*¸æšTù¤9ðiçžç8ŠM ‚Ø:lªí,ÃãùRò9²ãš6˜” ;{T™dVl¸=(@!faó‡‚w @¡åˆôëNVb»ˆÇ94åf*XlnFqMU.Ge1É« `w_a\g„“þ&—®‰,è~\nãô­ý_ÃSÞÊ·WÏjä!·2œœúƒT ðkÛŸ2RT”Œ±öãð¤îÝΪnšƒ\Û–ÞÙ;˜N=k”×Þ-^îÏHµ“2´žd¥N@8î:¼ÞÕ®—mÆ´æ2¿Á ii:%¦‘1FZCÉ–Có7·©¶å¡ä¤ù”®ú)pÃå&?v»FOT§½µÒ,e»¾»HmÐeäsÂäû{×ãOˆSxcU†Ét§¸…ʼҶ@Áþ= ëÖ§¸ñlðéM.µái£†KÈíc‰™$ŽV9ã¿AÞ¶PvLäæ»ÔìgŽNl.QÏ$cúÔoÉnÜ; Ä×âO6öm3K²Žö[e r­p"ëÑuvö¢šÕÃkVZU®Ÿ½Ä+5ãÉ0ŒÚ†éòõ'¨§g`º7îbµ·´–æí­£HÁv™ö®ßRMU†óM[\ÚÍdc›§–È9úÖ ZåÝÖŸ¯\_irØÇ¦¬¡ܬêÃr1Û¶G5Æx{NÒ/t- F¼ðÝÅÄ×­,¯tPª0Ì_7}¨Q¾ásÖÖ¶ G ^2 ‚1>•Û‰-D+/ ¡\}=+ÄÚ¼~ ð ’ÞÚiNÞÞ=ÙPq…ÜzãÆ¬iº”÷$:–¡kqc"FLñÌ l ÷˜ ýÞ3Ú¦Î×èUÕËÛ%ÚOÈ0ÜËô¤e­d·–刮F~A®ïÄz‰;m'ÓDŠnẜàOqÎ:õ»àí^çÄZ+ÜOdÖñ’;07ž Øê¼Ðã$= ÄÜ|›³ÆÑLl …Çz˜Æ2ª¶°˜¢`#SùHî=+˜¸ñŽŸˆ_HH®Ý­Sê ù²áqŽí†N~µŸÄ¶YYÜÛiÓ3Ir°\Ǽ#sí|ÌqœÔùdMÓ;7KË6у!Ì„7SëÇ­_ŠÞ4‹ˆc À|Çò®Äþ2]òê+8òKxÑ®IFã…Qw1àv¹ªØëZ®Ÿáù¦Õm™¢77 nþRF{°íÔã<ã¾)¨¾ ÚèuïwžcnÐÉ4l#™Wƒz69Î1×Ö”ZCÔ×)c\ȹó„xcìH5ÏxÚÉôYïtávÜÎî$¿“|’À|úqÞ¥ØÜjÖz]¤7w-s3D· €BÁxr<…õ‹;»¼"…íÿyiÙöBƒ Ýs‚:ûÔ²ºµ·ÏueÜÈÃÓ°®Jˆ–‹ey4Z}Ô’YÊè"àU2ò«‚:õÈõ«7Þ8ÓlßO†ínb[Ë?µ <¬„ÈÎÒ½ÛoZ\®ãºãu»›Ã/›¦<÷Ø·‘¢1¡I>Ü}MnÛÁk¡h°Aoq…Ù«à8óâ¹û?AsáûýOS†[°ºk}œ;; cwç‘ÛŸ§Ùiž¯¥ÜI©ëWWsÅý¢±]¾cífQ€¾€TÓÙŠçopE~eK+d¸™wI Pr5$zŒrÀÏ—)ÜÃz6AÁçŸjçbñÏÚ‹[ÝťŎ.Ú0É(Sƒ€ ?N9©|%ï…à›Jí­æyw#Ç‚[yÉêzžzš‹;\{d<‘£¶Pmä š’6RÛ@ßüðj8Wbª®Osן¥(»¿Õá½i]€þ€•õ$ÿJäõoèWÚúj·ItתUãdº‘BcÀZëÀ px¬MBh-/âûMÄPùŸ,hÍËbŸ5µ@•ÝŒ(<á£m~Z ¹Víɹó.¤Ì§ óósȤ»ð‡çŽÚF†ü-²…·U¼—÷#=WæàûÖúùOdò¤°²‚I8Âó““QK©[›6š;ˆØ& …là~hç}ÇÈßBZÊÛXÒ›,×b?“1WeKu ô÷¬sà&V²–;R1gÂnÛ˜ÉÎÂzãØѾ‘n-¢kmN;oÞ),®¹oöH?QVÍÜ03ZG,b`2P¾2Oÿ®…7ܧLç‚4¨´» ªj¾M¥ÇŸóÁo0—’8 Žõ5fo [~óSþÕÕÒâh&ýâ…D# /ËÆ#Þµ>×m6Ûä·FÛ ™W‚ëR›»KU•.n¡‹zî # íõúbŸ;îO#ìsøÁ´{-6 wU[X.Eź—NsÁ+ë’>¦µn<(’j÷Ú¥Þ©#\Çör‘íUä°€ à’sÁÍo< Ÿ#jVÖÍÛ‚$Îí¿<`‚Ävô©´½KÑ®ï.ì`ÙsxÛ¥vrÛ ÏAÉâ´¼ÈRÕPá9#$Ó­QW”_0v‹ìf È;ƒw9èEO3îR‡S?Wѯu NÚxõDˆïXÙ3ƒê1Ö’çGaz.­/Z)\¸7 :v쵃 ÈKŒ°ÁÆÆ€7›&ÕU3ÓëQ¡¢©;XɃÃú…³ùja4÷mÏÍ̓ÕG±õ­‹ KÒ¥k«8 r>G.HØÇáSY\CrÊ Þ¸ííWŒfFQ€1Ç"„¥Vo@Hð¥Ø©lƒØT[9ÏzºøD޾µV^7w'¯52&&lÇ%ð8æ²Wi§B£÷o€AäŒýkfà¼Àë\V¼olo~ÑÆÅ‘F#U$“Ðÿ*)k"¤ìŽ–ÐcÜ‘ZRgtXÁÎIä £b`lÎ_¥hºù‘òÀdàÒ±EKqªQŽì‚TqV!'œ©ZŒ&Ö6äãåÎ3RÌãy8ãÒ´FLz†.:žFqƦU,g·$ÔA³"¯89ÁǤ`c* Üzg5HÜ0RBç“Ò„,XîaŒðRÚÝOÉÍ@·jf1†ËÆ(nñ1¼1brzÒuÇ8çžÕ!RÍêQé@ ˜Lc¶ìf „gràcŒñQE)•ÌmÊŸuŽj@¯,έÚÞõ§¬MÀ;˜ö'ó¥f;VŠ$Ë3Ž˜è*¾†P0ä¸#ZŠ@öŒâõUsÂ;2ONkŒñÖ±|¾þÑÒ/|‡Y–4hvIçm»AçüŠÞ1¹ Ü71ÎG”Hc®8¦¼ñà¶ðNv’kœÓáÕí¼:-ä¸KU``&™¡ôÈ Èk4–¶Qê/Wj¹WÂU\õç8¡ [ž/ðÄž"ÕtY¤¸UÓ¬äig„‚ZBqŒ=±øÔž!Ñnµ_C»·¾Híì§i¤‰Ó;ÎÜrzfº Øà8Èé’yÅsÖoµû9on"…`ûK¥±€58ÉÉõïT›µû Ú™öš&³¥ø£Q¹¶—LkKÙþÒÒÊŒÓÆ1ƒéøÕøtíQ¼\u«÷±Ž"’ ³ß,lr<ÌúÛ¹­ëÝDè,Ù' Éô¨¼¥óVI„„àwÿ¯K™$`^èÞ(Ô|+ªéóêv’Iw;ˆäpURÜöàuúÒËmâá£A¥XdYªD%Ê\9tH]˜ÎëSø«Q½Ò<1bTÜ©]«:’€ëÍXÕu±¢YXÜÍcw1“jJ¶±Øq–n; ¤Û±ã]]Õÿ°íl¥‚h-eO%ÉÀ. f_âþ#[:µ´ú¯‡.tÃ8i§¶hZm eŠíÝС¢k—^ ‡P’[) µŽà¥¼›YL©Øá€9é[%âY¢X†?OzMµ V‘£xŽÄÉq‹ÞYiâÊÆÉ%Ê2ŒnfcëŠÝðns¢éÅv‘E5ÕËÜ}ž6Ün#äSß­LÆ&$`"ñއ'¥+Ë2¤Iâ‡6ÁFÇ+áÝjms[Ö8qÙôµ.]ÀžÇš‚×Â:ťƃgc%¤6Z|fi¥ró·Þ!Op:1àf½Ñ K\AúVt>JáQU '§9¤ª=‡ÊŽbÏÃzÞã+ëè`Ò¦´½¸âu/4#º¯× =*¿‰¼1®êÚ®·y Íš¬öÉmm‡ X1þI$÷8Ší"Ü8Fä/j§}¨Ca šâîs”ÍžäúzSö½B0»²2îô­]¼q£ZÌ$½h bl²£²ãŠÃ´ðç‰ìüU¢êI”v¶öžD‰1Â~Uœ¶-õ®ëO¿‚âÉnfY!,ÅJÊ`ÝHÅKvRHØaòúDfÒ޶<ïþK`Ï!´û~­|&Ô$•·,Q!Ê.?ˆ9A[Z‡õiµˆu +¿ìÝ8­š¶͹9ËÐ…?€®­ Ò6i ¹ÆM<¸‹Ëœg¹õ¡Ôc·CÏ¿áñ‡Ã¿ìHͤ×wSƒ6[bÆŒ2ÙaË1<èzU¨ô.£â7O²ÅÕ‚Ô™2wˆÀP¿Ý@w^{×Yyz ’FÅÀ0m¿+g°>µÅå¬1Ú ]÷" Î½/hÆ©»Ùܶž'O†RéÐXAòÄ–ÐÅo8cåð’p3׌ÕáàÍNïAÒ­__ºÒäµ¶X¥Oùc-’xä@ã?o\Ü-™¸”8Šù€\ýzHn¢¿±†å¥$9 ¥Ð9t¸ß ø`xjÖêµ »åž_1¤¹mÄp+¢ µYC`3ëQ¨ ¡= šUÚ¸U\ƒŸ\T·}X‰Såˆ#Ôz×9âÅTM>ãÉ:])À\¶ÞàWF+À®_ÄÚ7÷v±ZÀ¤¥Ëí$ƒÈöy©—Âm‡Ò¢l¥©E,–õÕœn±L$F2¥ÊýッÍ@¯£\éw÷j±œÚs6ö1ÀÁþž•ÕžRÌHÝÜg!}qR²¨l( ;àpiòõ,pÓßhñøzÂ+IY&‡/䑸‚ HçWÚïIoÌ÷Ka„@s¹‹u_Óò®–D F‹cÔŒ>•,ÑÆ6áç†8&—-Æë®Ìá./líô½zÆãÊŽU»,ŠÉÉC³ OqRjòé~ Ò£’[_³y —ߎß(þxÍww0Ä#fDn7:Œ¯É`]¨d†'»×­˜,BìÄ´„ZÛEacBª Êàt®o_þÏ‹ÅV7è¾C@ûÔ•b>î~•ÒDó*1Ú&Àãžþ‚›sºþl(Nü…eÉÛ5rWV2¥>I]œÜO—[Ô›Vh„rFl&À_/ ¹úÒ,-'„ìd»Dh¢¸%Dù“'?OZÒƒUÓµkûË8¾Ïu6Ÿ&É‘£ÎÂsŒdsÐôô­Ü¤*º?b¼}+?fúšêS$öpË à±‰öý(å`«Gfb;Aue¡I·çüÂX¯8Ï9䊷Ù¦», F¦ÉP)or€«÷6–VË$ö0ÈFKÆ {ÑŒw?kk(’fù¼À˜9Ç­.PöªÆ WvPÚèR„\«ìgc’£ŸNqœu¤š; ¹5¹f*Ï(E-Æ@ê=óŸå[²išDÿ7Øm‰qÌC­G.“¥43mÓáB<ßÝ›œóK–Åûhy˜º¬vž—"Ü7™xäÌ»±‘Àü뺰Ô-µ$iíe¾ÂB‘Èÿ…bhú~q2HÚM¼2Àq*>Qž9úÖÕ­œzÒy%‹0Û5èsGo=ÅÚÝÁkåJpæH—(Å‘ÛÞ±îµ ÝÜÃ-ÝÖ(Œ²Æò Œ€Od+it´#”æu=Bõ<{$šÍÃÇyäé·2¸Fxó‚ÌBýÞð:z­â>×W×ü;¡ÍªÜ¤PZ©•Ä»qFB‘ÓžqÒºûßxbào¹Ô4™#…ƒD¯*6ÆèN:ñZ6óh×·+«ÁöœG±¯U‘Š®:n:Ð¥n€ÕÌß_¾‹àË´¤iIiŽÙfv'ó5RK¸t¡ðý”ÿf·Ó¬Ä÷S©]ûy «rÌA9ǯÝÞøgYO²jÚmÊCˆžuÁaÈ gµY¸¶ðæ£uÁ4Û›§ˆÆŽJ»˜ÎFNOJI骉ƒQ½?­ÝuɆ§©^ªý¡åË,ÚO`dã½ièž'–Kí_S»Ô$k 2ÛÉŠØÿ¬›n7ÌS¨É ú×Cqáí,m­çÓí£¶±“ÍKTsøàçÞo¥hN׬¶Ö†Küý©w‚ÒçÔg8ç8§Ì’Ø,qwš†£ªø£C±ÕoâH®¥3éʪ>hзVbq‘ô«úÅÆ³¯x’æÊÃV·ÒlìçKPæR¯$¥Cª>÷œwæºx|1£Ã5œ£O¶ˆY1{r®Âp2yç äç ¤‡@Ò“\}e,^ËòµÁÉ-Û#<î(ç]‚ÌÇø‹{smáèl-¯DW7Ó¥²tÁ?1Î~^¹ÏjÍ×î/´‰´ 0k²43]˜b¥‰1Ž™ëÂŒuÍv÷…´­ræÊçP‰åûŽ=ØV'xwéUŽ‹¦]k‘j·½Š/%1Úª3Ž3׃B’°Y³šÐÄÕÆñ4¤xz Kuªj ¢€ÊBFff#8ã8ª×>Ög×5ë»+ë!±f —Î º6 TÛÆ9ïëNƒÂúÅ•¦…~o4ѪèÑ5²‚ΰM(P¬z†Îq×µt{­*ûµñ†¥¯Gs¤¬z¾Œ¡ä¶YþGB  ŽF>¼StÏÞÝêš%–©¦ý– RÜKksÀå ®>PyêsR\øgV¹¶ñÄ·VUÕáKrT·•AJàq–<“œTx[Äþž{½5“CR›™]™Ïo—ëGº-PíÄ,n¼Q4Ú‘%Â!ŽÉ<Ù§b Ú9ãôÍK¤xƒX½ñ6¡e¨Ùˆ§‚Éním£”†8ö>öp=zU$ðÇŠ˜xŠX¯´ûIõ®²BïºP@8Tuê3I¥xWÄÚ^¿5õ½îŽÍ-š$ÉåÉ‚Êç'$ä±çÚ†¢aµ[?EÔ.´H›OÔgò6­Ð/¹™‚0$u&­hþ$Ô®ukíW´[+›R­‰¼ÍêÀ•ºÁªÉávO èzm´ú›¥_ Œ¾ð$ØÄÀ÷5«o _'õ-JøZ=•ô)EfÞ…ÚÃŽ¼Ÿ¥'Ëa£™ «ñ£1ª)ÒK𣓿$ŸRiuÛhôxvæÄySß4–÷ –0Žœ“QÑõ˜|juC¨XÁ0„Û[,ÖÌé,!³’C ¿¨ý+KNÑkVÕµ$¾ÔD~L!`òã·RrvŒ““ëNë¯aÙ™qx’óV¼·Z@šÆK¢¾g“&õ Jù»ˆØA#×4°øÇZ°ð­æ¥*ÙË4Z¬–­’¸b  ç’zúV†áÝ_G½k[]Z5ÑLÆuˆÃ™É@äô'=fê¾¼•/4ãª'öuõû^yfß÷ˆK 6îyíŠ/ƒRΫâ›ûÿI¢[ÅgA:ÎÌ$˜?VŒôG·ZÜÖfº‡N”‰'Ù£2ª–À*’=¹®~ãÂ=ÅšOsðÛK„GÌB€|ªrv©<ž½j¥«j¦¯­Åg,šl‘âšâ"cŽLê˜Û¹vþ©j,…&ñ¯4^žÖÚÆÞ;÷ ‘£ +œ1*v¯NMlé:òÜøƒÌ±2ÝZȈð[IòÈÌ€‚¹àuäÔQøNþ 5¿·Î’ûе©>gð€~~>_×Ò¬¿ƒïM†¸eÕ¶>ªÂ@ÑÀTÆGw#hÁéM¸ &T±ñݰÕíuHís¦Û­ÀkYN1ØIþ!ƒéXñê>"UÒ%I’åuR÷1Bdo’PIE¢õˆ®ú–gñ½gi¬jQ›)môûæŽX\ˆÀNŽÿ1É?•kêz¦¬þ.]*Ò{T´—Nkˆ\ÂX«ƒ·'œy¦'ï.´VÆ}X„Ôî|é¼»eÊž2–é€?*½©xfóí:~¡kª›{›H ¼’–d$ºNä{ÔÞZG3qâmv?hÚƒßg¸»u¹¿ŽÜ0Š0Í”øë]—ƒ/uMGHjwv÷ldaö̤Hƒ¦vðAÈâ°l<~4Q¦Ã¯É¶?9@ku(QñWpÉsÅtþðÌÒÅ•¼òL|Æ’IdÀ,ǃÇn”§(òÙNú Ç 6:Ž=WU0>ï<çNd,A$ùb˜ˆè `dœx¬¤ô)®YS$ç=y®oYx-®`º’&9bŒTg§®’áHƒ=kýÃ4ÊŽ#¯Ò³§ñËá54åòÐÔtýêéb«:íôÅfÙ‘(ËžØïZŒÛS{g8ÀÁ¬Oq0Y¶Æ cÔííVbÉË*㡠櫦BüÛ°É# ö©Õ‰‰T1POçZ£&= Ã'’íéšp<”TÃ’Þ‚“bò»ˆ=òzÓ°@ €O;ISÔBq÷@ç4›ƒcäç'$Pì¥IÞÅsÁ™~‚MÊNrF0?•+±pUÐLŸZ™YŸptíÚ… ` =Î=h,ù›å^ç¯Ò­h ƒ%BdñÆzÕsO(`¤©çqÏaQI,dÓJíRK¡ëCwÏ-ø§¡g¥,6hM­ÄÀ\:9gÁjã²’1šâaµ±ŸÃ÷R϶x­¤µ09VòeBprÀ6Hô5ê?µ—Ð<8÷Ö± »˜‹T—h-œ¶sŽz=Nk„šÛM…çÒF›W6vˆmçH Íp¬2Xœ0$œñר®šoÜ3kR¸ðìñYÚ*Ú¶¥}äùih±²îr:ޤŒîJéWÁ·7)xcI‰Pœ†™‡VÎ2¹'åã>Õ“à¯iž­q¥j0Ír¾OÚ`óee} •?u°ÃÒ®x<;ámr--t+™‘ †ŽþUÆK ×߸¦ÛnÂÛS O ¢YËe(Ó v׸žîÊ|ãh 6æ®ÝèöFe›Ã×kXÄÓÍgz‘F d«¹PyàO^õ^]kÂë-Äw^Ö¡ÌÁ&îBÃ2 ü0}{Ó.æðuý¤ÜkšY>Ð|Ä 8ƒžÂ«Þƒï°àAö¯ ÝA!uiöi…f[!±œsÍs7'Oó®MŒ“îtuHÙraO yaùöµØÛh°ßÝhè>)µÔoþÿ—¨Œ“ÆpÀõú㊫¯j7Mqxž.ÑJÉö3 Œ+y1ËÉÈÇ^Y›%C  (FOLWyðÖ]otø”^‘å]<ŽK†_sÑ{ŒzÔÏDî4vÀï ‰3ƒŒZàµÜ¼‹Ë ü§îŠóßÊ—~"ÑUtËûÅÓ®÷Ý,V®ë徨lãùÖtõe=­âx†§{?ˆEæŸv’$'^Xî@Å]&Ñ·[y:•¬r6Cµïq€qëÅSѯ-åÔæÓ¬4 ›[ Õ縖{v‰Û TŽr3Ÿ¥Wð¾‘ue¬ÝZOû’ïžZ2 ,¤9`O ùÐÒ{‚5íu»Ë×Ó-ò6%Ð) ÔÆ ùíUîolGŒ-!mRD¾X6*Ä£ nÜÃGÖ²ô(fµñ$k§%ø±–Yä½´¼ˆì¶~pѹïÃ9ÍI}sçüE´–É!µµ’ fÎÊ®ÄmÇN=h²¸îhIã"ж¯l‰,¦ܧ,àÀA‘ÏJÕºº·Ó-¥¼½’(b~i¤8^{u¯9¹µ–ëÁ>$´‹E¿’î}Eæ³_±8ù”†qŸòk±ñ-ÉO XÜ&‡6¡'b–ÙœÃØÈPrÄz{Ðâ®̽¦k:~µhg±ž)"Š;í+°“œà÷ÌÇwoqñí~¥öÈ–ÆW’8®·ÇnUéœ/þU˜ñj÷ZO‰íá±Ô Ä×)vûí k4X@ʧ=HåúÖí…݃øÎÞú×M¼‚Ñ´Æå[@˜¤òô5U­{ ÷-iW: Šjê©~’]4q_]HrxOp9ÅjE¯i’j÷– w¹µˆ¼¨2<µ’I㯽qˆÓÿ¸¾Š-:ñfRûCÄmX'Úð¥yù}+fÒú 1Ù^y3éQ¤{í$l»ÜqÀÇ=i4·“f¦•âM'_±•tûÈæ0ƒæ8(2Fân8=*Ýž¯§êW- üGˈ¥ Ó<àmÚKß…×^•¦Üũà ý²3jc.¢O™Ccæ$øVš¾™ªø“Ã2øv†Ð»]¼I;>ãñÁÏ<Ðâ…vtVþ&Ðne–$Ö-<ÝÏQʹcïÎzS|/æ6†°¶°uu2¹ îæéøtëXþ¹ÑÖãÄÉÄMì×QÍ%³ Ы•%y$`n¼UB7BoSÒ.a:’›kàKÞ›F l:}k”ºÕõ]'Äi¢Ë¦y„ÆÒÁ?Ÿ±&EÆOCƒíÚº_i‹¥è°&¸¹¸™I§žå¤Üvÿâp+œñ¤SÝü@Р³‘"ž[[¦Là†ì{ãý(KVй³áu5ëFž(%„Ç+Å,LA(êyG½m])Û•·Ò¼ãÂzˆ±Ðïìa·û>«b²™`bK<¸ÎÿS“Š…¬¬5[kMQµÄ™ä´t»·£HJüÞa.NTŒçŒvÅ'Ø®wN­¹“ÍQÉb9 wÓÜ † )Æ;¼óÂút~#–ùÖK‹aæém#ŸÞÄìHl“—aÐ ê|p ^Õ^ILe`%v;)ÝÛ§¿nôœm$†ž—6Ë$°ÂÑî ß12)ŽÜEX›æ¶”€Õàg'ë^z4}6höÆIDW¶IrŸkqç¨<ûœvâ“LÔlí<ª[É}<6Qj“[ÃögýáRÿ*+àyôî(ö~as³Õ4Ë}KLk+È÷Á0ÚèI}=û×<Ú=¶•,O}x‘Ì‹]ÝXØ ã‘Û5muÿÚiwpÙÏ› ‡í¡Œj7l÷ädqºµtßéú†¬—ÂÊKM.+H˜‰¡ß0}ÁBØ’sœÓåiZá{³«·åQ$E@ Q}ÜúõªyDWQbvØ#ç±Î¼¥ÑàðT¤W‹øu–9œ–Dó³ÏÝ)Ͻt:´ú]·Žµ¶‹EŠ÷G@<üæa!ãÜà/åKÙô9Û›«+KV™®a†?Ö;…\r>ñâ¯Ú]C< -´ñÍœ‡ƒ? ñØntÇð‡d‚òů4è&‘¬î”PXS ¯–VF#wCŠ#¶y]ÙciFÈç«&ô)nC>í›]G™·’:f¹ cR“N¹Ý¸¸,º‚d]„ä9bO|qí\Ž¿¥Ü_É ¶›L±’ ¹ }=éRøË—Ât:~wð€áZdÊPnÁ$ôíY–äâ3¸õö­ð¡IêsX žä…NT_¦3š˜å;¹Ï'€j%P2g <œT¤*»[jŒòkS&$r21Ž@7çïÕ6H²ä÷GÏ­4æ³7B§œ¬6€7>£¦€Bñ±l¨$m#¥BX‘€ªN1ÓŒQ"†—ÅŽ~”¥ÓPrF(òêˆÌ€8 “K ïƒÖ£Œ RKƒ·'šAûÆÜ%\gîöÅUÀ\¶ÀDMÎO¥FÒ¼{W‘W€ÄãÖ¡*¡B»ðH$Ð$r¿—?ƒ5Ô¢ß&bäæô]§×?Ö¼â{«KÃv:“C*jš9X/Ð †Hî·©ãéÎjÇÅä»›VO/Uí¢ÃÍÄ‘ÈGÞÛß#œöRí¤´¿³¿‰m—JÕm'Ea—8ß’Àú“Ï~k®œm©z™°´±×|%¬Í2¬sD× ÜʾYlý dþ5Îx–H_âuÒ=´·#챪ˆËf#€wü§p ÷¸ô©ñ@[­6åDq\JÝÙyüqÏ"«é^µqom©_¶§j Æey‰Ã0NFK0{ÕGý¦Ž.·Üj…?q«oK4Æã¸‚ǹ?‡JWRÜ-a¾ °¸ð~³­±‘´]A”(Ïú¶eAõÇCŒkcÀVéeã}z¸2Cå#(ÆA sÏæ# «OnÞ5øV³K™zB8&hò8ú€:£ðŽ34ºµÌó‡RŽæ;‚€qŸnƒð5/X;Kž.癄{J…Á=9ö§¬¾b#ž¤gü*O-Tœ!ù‡=«…›ÅZÌ_ˆïD:~ý&é¡a‡ÚènzäŠÉE½‹mˆ1AŽo•‚Î}©Ñ4¥w•‰S€=1\ö©©êðÿaÚÁgbͨ %v_œF_ÆpyäÖcxƒ]†ÇU+¦i¯.Žçí[fp¬¡Ca3œg¯§Jj ‡2;¯1ĪŒîÉ Q*m3¨| “Èç5ZÞá¯4ajŠ&š:Fï’»€-Ž;rx^};D¿m:Â[=JU…V9œ?˜ùÛ“Ð9ëR Þ¡twêdbŠg-šž1£a…mröíô ­G®ZÛBÚLBã}¬»ƒ£+Fsòš­§k¾#ÔI&‹E=¬“ÆìDlQXŸ½‘ÝERƒΩgØ7äY›ùTò<¨É²EØ£îI8ÿõ׉59¬|/x¶Ö‹­*C&]·ÆNI+ê0*Íö»¯-þ¹Ž•fë¦F²«É;eÔ©cÛ®N>¦Ž]Bç\e¸VwdœçŽŸUÔ5eÒ-亿¹H­c3Iü9 3ŠçmOõ¨“S‰ï ´SA,ªŠ]U)œã?\âµ¹žóHK]cFtžþਵ·›p‘P^FU$(öÉéW¼enš\­o¡cî)Öm½3€Ä{Þ´ ÊÊZ.ÊŽOzŒxòó‘ÔT±Ì#UX8'üûÓ<¶wRX r@4q@à ¥@çÒ¹»Ï øN./¯ô½:ÏæÉspª2ǾãÐçžµÒÈÌ |ž¼•ç1]Yx—Çž —X·ûFŸ¢Z¤QÁ,,ÊKn/'–zœ Ž˜Å4‚çm¤XéV™Ñ­-!‚\Iæ[  &{äuýi—žÐïïZöçNGžUÈÊì‚eôp ?ÞÍgé¾!ðþ›k£XéÑK ¶ €X¶qÆqëÏ4\xç@·šx®näˆÙ\yÈÖÎcG#<°ž¦‹;«{¡h×·q]^éPK- C7ðÓ8Gþ½C9]Ü-éÍÆnyÇ^jÖ§®YÙ/•,Á¤xLå!¤"Õð ñY§ô-:H™îä OµFÑÄåZ2@S‘ÁÉ"–£Eɼ3 *[3éQ°³P–ã$˜€é·'޵^ðû­äÃM7 ý§%›ÎprkNÒâK½.+ˆÍ4k Sž7.{Œ÷¬‘âÝÊUµºÔãWG³„o-dþá|mØšØÇÏáOÜiXK¥'Ù-Û|H¥”£z©Ö¢‹Á^†˜—M1™ˆšB%pÀƒA zt©`~õ=Dniš~›¥Ø‹k(|¨™Ì¬2K;Ë19$ú“\þ§¢I¬øËNÔ¦µµ†ÏL1'S™îè0 œòNkSSñ‘§jbÖîå#Ÿìí0…”Ÿ7ߥE½¤\øxêÐ_Âl‘±$¡Žq×9< h45.ììõ;Il/!Iá™|¹#oâZæ-üáý"ÂâÚÚÒF†pRS<¥ð¹Èž˜öô«qx¯H&úìÝÍ6â8ä†H]Ëò‘»,zzÕ˜umgJiíÄ¢2íÉ")":õ0ëõµSDÒ4¯ +ǧÆR9XYðã’N3Pð¶}ª.¥-»IzîL'“#ÝÃ`aë\w…-ï|Ccª‹í_Qi ½’Ý åÁÖæ‡®]Z]jú^­,o6¢A8Ú¢H˜eIp0qM¦¯`ó5õ i·×£T1š¤dî0{tÜ:Lõ¬«MF†K…“J·IæÊ\)„e³ÔPzúÔ°ñ…–¢½Ê,‘Ûý¡ÒXÙCü\ŒcÜqXÇÄj©n!¸´ŸY Kwb |À0Ê=GOÎ¥ó­ÔÙ‹DÑæ9SJ²I!Ëu·PPF8êzSï´ë-RݤW1#d$±†]Þ¼çÔÖ&ŸâUºÔ³ÞÖò/¢ó$‡äÜ£,¹óõô­?íëH|Ck¡Éæ›™á3FQ>@£=OàiZA¥‰¡ÑthL>n›dZ% ›eÊÐÊšú’ñ84ë3dˆ@»XŽ„€9Å[Ô¯ Ót÷½»x₹™³€?Ÿ>•‡aâh'ÕÓM6Wö÷r+J«<; êÀçù㨣Wªa¾7ÓÄ~»6:\S¼k +$G‘œäÔð®{HÒ,šïD“ÃCQG*µì’<¢/( 2ø“€+~ïÆV6ú3jFËQd[“o&#]Èá‚á²Ý2q‘žõ¡u¯Eg¨5…µ½åõêEçÉ rˆNbÄ{¼U'$¬+"ûYÙ[ÇòZ[Ç,œ6#Q»ñèj+«KibXÌqîQò’ƒ øö¬Ùük`ºE®©¹žÖâä[â4ÄäíÃЃQZø’ F}FÕôËØï,ãÖ²ªƒ*ƒ¸ŽqíPã"“GAki§]Û[ì·²žÙrÑ”YGc´¡…_Kpª¾T{#^@À¬/ÝÚßxbÒæÂÁ,-[w—l§;b:Žù®‰‹²cw°÷©{ê6È’èA`Hü(xÐH@## ¯Öœ |Äuµ08,Ä£*†™Fä`±ã?ZÇšU Çxž•±vÇfq’Mr×yŽýö(ÿëúúýzTA®ceeczËA$néZÓã÷Ç'5ŸbŠp9ã¹ëZ!ï…ÏƳDÏqÅÛ$1’G ŽieU3¡Üyç=W¢>¿$Êd¶lY‘¸+TgbÒcnw c#=Å<;2Ÿ~*œHÒYÄ„m-@$t8«$ùc ü½…4ÄǶ®ýªAïBî‘‹ ¸«ñª©8e]À+€3Vöî\íëŒg¥ Ü6#emP=y{r3Œžôæ R ¾qÓ¥8…OæšÞâ¹Nö{ˆ“|vÍ;U`ëŠDo‘e–=®pHÜ߯¦`ÄWb‚qïM–3É Ž3“Ú‹ŒóoˆºU ’[ÄÒìdºº]‰w%ß’ñ=Ç¥pé£uàk¹næŽÞÁ. F~i1–A–^èN{VΡ"¸PW‘mâTϸdŒ–Ï8ô5™ªG5®a¦\"HÖ÷Wê §ÜH–Àë‘Îkº ÝZ˜Ëvtþ¸>'ÐÍÄ;-¬®%HÊå‚ãwÝ’9ïŠÄÔe’ÓâF¯rxtwŸ ¨­‚Ûzœ@ò+sÁúIÒÀ»°:‘ŠJNÖ…Àú徟¤ZÉ®[Ÿì«Ÿ6öOáÁüÜœoƵ¿á¿]G_º:”uH"†Üþè¨ÚßÁàŸÆ·ÞOߪéøàÒ»„Œä ó¸õ¡É°±Ê¯ƒµeáËUÕmö;‰«eö }þ8'>õ¹â­ï_ÑeÒ­.â·€²Ë,Lø\çåÁñÞ­XK!º7–QÛÆ’‘ ŠmæHÇF< ¤úUµ&HòÏùæ†Ø¬sOáíf_éZ¼Ú–ŸþƒBñÇ3xù_aUáÔ?áÖt†Õ 7—÷Mt'2¨bÁˆ#'ÓWe$’Œçßškg ü¤çvsB›´9;ÿø–þ×N¾ÚrkÚ}ÃVÎ:皎DÂídç àWŸéVº½×Œ|QpºEíµ–¥nE,ÛDeÉù³‚O•zp¢BñTíUB2‰Úeò[4î·<ÛO¶Ö~Çà{wðî§ѦdºÜ©Ž#Û‘ór¹=*—ɼԵoè¶š_š/n#‹Ï.«D —Ï‘€rkÑ·±G>aR?!øW-á¿jz7ˆõ JçW†é5&2OÀP ˜öàÐç¸Ñ‘}£ Ĉ.´ sH›O·´WHVg…âÏU=Žsš±4÷–ž2Òï#ðö –PiÏm"Á•Œ»«(àà€œtÍvòLÃpcÎzŒÔRËæn‹ÎQ‡UlÆy¥ÏÔe‰%&7U8ùHR½¸ë^Soi¨Ãðú÷Á×:%ܺ³3¬n†Mï¸Jdû£ÉÉÏ+ѧ‘â²ó|ﻀF8úU³/î†eç Í%+!ØãOÛl|u¡FÚ}üöözcÚOwD£9À†Ïû8Ï©¬)`Ô›áÆ½§ÿaê)ws©4öñý™‰eiƒœp§>ÿZõdÝLz2sÛŠ©çÊð)Þ™n‡ÓÞŸ8ŽOP¹¸Ÿâ‡¯#Ó/þˤË,ÂÙ°¦@¤)=¾ï9èMsÐi:¤þÕ#ƒE¸IáÖÿ´ÒÒx¶}¦á‚|žÃÖ½\ÉçÏšŒº9«»c’WŸÖš˜XànWKÕt™‚ø[RÓá™âH°lU”.Y¶}þµ«áiu‡ðüÍ­‰¤ž)äò‹G²ib\mfQ˜óךèšB.RX²ÜÏÌúÕ Ò4A¤›o”©¸žp2}ÏÒ¥ËK oà»‹Í OÔ¡Ô¼?¬¼ó]=Òí·­€9ÎÈ5j_ ëZއâ Jh¼‹íH£GbX6"Œ¨ÄddŒ×C7Žôˆ¼3½åÜ Ie1&!%ƒéž2Tõ®œË@4-ž£¦>¢›“ÞÀy¬ºy×<9«C¤x~óM¿žÓk½Í¸ ˜ÕÏ,1ÇÒ‰âmjïÃvº}•å´š}Äs] ­Ú/³"® î#=Úôˆf(W9Ç­A}¨[ØÛ´×sE Q‘½Ù€EÏ$ýE.{9·Ó®ÓÅ´8¯|«¹núÚxJˆ¤ò%#1éÉÆ}+jÛTÔWÄöV©§¬Ú1FK‰ØâH¤’¤gŽ@ãæ¶íü_¡·Êº•¢‚8v™Bž}I§j´{ë†èÇ–QÒuà½è”¤ü‡ÅiMâoMak*C(e–6“îïRÚ±¥}BïÅ^7úzÙ\ýžél« r Æ;qßÖ·4«Û{ÛX$ŒçiàïÏ úÏ—šþ¥â; N=Q`ŠÇyŠh‡8,[œÇ£-,Êi^èå5 øŒéZÆ“m£ ¢›Rûl-ÊÈeVÛƒÐñ[+¤kö"›_µÓ#œêV©Õ¡º ÐÈ €C ôÍvpݬ±1oÜFæ Òõi¯#˜ÝiÓÙ2\4Q«ÆEÃŒtŸÊhÚG?‚µqá˜l¬£´’ömOûBäI6ØãmûöŽ2Gg¥.‡â'ñu–;›5·X Ód2䌘ÆIWaÈ#I¥²Xô]•X@` í£Ú1[SƒÒ¼ «'…aÒ¯µK>[mÁ$Ó.ÎÙwÙ`T3Ø×O¡è¡i‹`·“Ý*Æ{™731$Ÿ ­eÞˆ«!m­ÎîI_¥\’ =9ÉÔ¥'$;YX–4fÀÉã'©ªj§yc T÷ k³üµ •œç=jÐj÷)Ýàu g ëš»€Ëwº& &H`zèîF ëÅr÷ýžýžáÕaY #ÇPA˜¬é«É›ó8«™U°^qÖ®.Õ!IfÎOaŠ­c·Œ€ÀñV°¸£×¬¢…-ÉQ1žrÇøWŒ~&¦L*ã±"£Œr2O¸ÏJx'9Âô`V¨Èz®NKžOâ†A´±“œ|¹À§)g ï$cžx¦íVÃml{Ž¿…;1ÌE\ ÊÀtàñøÕ¸‡½#ª É‹Ô÷4ªà®ïzzRJÃoAîI•cŽsC+œ…eÀè3QÁÊ庖 `â§eÏÊ@ÛÏÔÕ-I+`Áó;†ÈÏ^ô¦y†îŒõ^¿­K,[ƒ7*?§µ@¾\HFÒ@û N«B™åþ!ðjØø¦ãÄrëZZ\H»â˜îrÀObT}+Ô쯯m®‹^ùå”ß[ `Ë‚¨ Ç Ûø£§gÄÃvòÜ\±†;Bø1¹ †v%¹³æ”É!Ôa´·¿h–ӉݎÝÌz»3‚Á:Q]ð¿*fOvŽ»L•ï¼_áÕb²Ii¦J%làî8eÉ+Æ:ó“\ÕÕ¬³|TÔâ‡O‹Pº˜$Ͳ$ùT©>£¯ë­ðà½5n­ €&–í²A†2ÄìP9#§8ÇZå.µ°ø‹®\>¢–I!1‹æŒnU%W»mó¥þBgZmm4X§ÖüKu¥¬Ç‘bsçåHò9þ.µ“¬;ÅI§k¢=+Y†p–Ë?2†]ØŽyÏpjô–v…ؽÖ®ÒÎÒî{†US«!Ú¥¿‡pŠ«~<-q©Í®Mqä¬R%ѹ’b^í“¢F™û™gþ´ºùŒáÍÍî‰$ú>³Ť1¸ŠâÝîÛnÆdþú²ðpF;U-=®/[iwÿiÜHÐyiœ¸ÇZÖâ8í]n5¿ëXÖNžma„Û!w)]Í*„uÜsÇ9ÕÜéryš,3ý¶9ØÄ?Òp0ü›¦zÕMGÂz«å=þ™m9„ÙNåPx‚=ºV´6¶ÖöèZF‘¢yjЏU^鎔›ºyý½íì>&Ð%þÞ½¾Žù®<ùd";Y”FJˆãÏ|ÝýM`x²yõÏx‡P¸ÕdZÞ˜Æ2¡bEP¬1’OÞÍwñøCÂNßbN´‘íäó„&BÆ&=ð[ {tö§ê ðö©ys%Æœ-ÈQ3od dŒäuÆj”•î Ûvd œ¨Ïî3íÍN …GsëTì¬-4ëHl­"[B»cŒÓúúÕäPHùŽï©©¸˜…K/̽zœàWêÞ'Ö´MTÓím¡ªX³‰.'Gp¦L«|½Èv¯GfBœîöëŠóføma$ºŒI®Þ šô]ÆDHLr)ÏÌÄe±Øg=*“RS4¯ouöñæ‹eq§ÃlºrÜÃçDÎwÚw|Ã<ƒøV¿Œ¼Iÿæ‹â˜lîn–Ö{xÕ˱.P²¶p9>•ÓÿÂ,±x‹ûaµk‡ì–ÌTs“Ô·?f‡†/ &‡ýµ"ÚÅqö˜OÙ“(CnÜn拤QØ$' ¸³Ûù8ɯ3¸ñ®4jog§²é×òAsiº «òAÎð¯NB>Ì΀ò œuÇô®¼ sý«éòø…¶«9¹˜¥²†ÜOÍŽx úÒ/P¹sTÖ/gÖ,ôM";u»–Óí’ItͲ8² /%‰¬ßøLµ8ü?âÂÐjúí•D亞CŽý3ǵi\øJiotÍOOÕ„:­ŒfyÞ É©¥ÝY­ÒÀ&ŒÄdòüÌÃq‘“‚y©vº°|$Ö­ü7e¬j_auÔÒÚ+X FæÈz·°àzQ¨xÄZf…¬ßI¥Á²ÙöYgS‘[ƒ”É9RGqŸÒ´ÿá i¼¾¼ÕZeÙÜÇG‡f6œdîÆ:ûÖ7Œl5M?áÞ°ú¶²Ú„ Ä @±(;× ’[§z­…–Ôî,Õ¿¶SUҵŶ¼–Ñ{`ñÜmèÅr0FOò§Ì®Ï›Tñšõž—a§ØÂLK§‚âr¬¹AäÊž1Žk°¼†bÂXÖHö–ò›9<çÞ°oçÀz%ÓÞ¼é|©w?$Q]:Æ_ î œ´)G¨XäP¡GJ#Oœ»p¯4’L¬YaÇaÒ±‘q2î2äþÆëÖ8I. ÐÈÃ+Œ”9?¥vW?9ÆÑíXr\*4¥äAðIþÏCQKIKá5¬¾` Îг 2³ ýæ'=N1U¬NFw 1WÜHⳈäõ$VVvçñ«Jp$'“íUUA*I‡n€Tè {¼µÏ5¢2d‹’ù21\gŠXÔàå€SÜÐyÊ„%c‘ÞœØ*”3ýÜòi’4…nZL㎠5ÎÀ ¤Ž¬yÁè)Xlq‘ò“œb—9l•€÷4Ðj„`œôQRm*¹ã¿œÓH?ĭלBÇæm¹´öÅ‹0ÜÜvÅA&7áW•âœíœ)SŽ¿/õ¤Œß¾)å^9²šÛâ.ƒ©º pcа‘sޤg%—ò®kMÒߣ^¸‹Q¸¸]Ò$¶÷"$·*ÞXÏ9/ì;VÏŽ¼5â­WÆÂ{K)¦¶Ž%²,ƒlg©cÏ>½kVë@¿·K7…¾ÓçyÌmµ–Ï'yFÆ2Fq޵Óh¥r7e ;TÖtX.¤6vw7K3[H^G77,£+Ž <0Àô¬[ÿØ»=ÅÏ‚íæbÉ)ûGï‹p`péÞµ[J×Êk:ÄÏ,¦T:|Ã÷’¸ù’nÊ Av©,<¯éí1¶0ÛŸ-‰û=ì‘,ıOSòüÝyj¥Ê·¹‰´g¹d>‚YdÃç± và¯<Ö„(³…ç6¾´IaûÇådìùVyÑ5¸õHPÑdžxâ,„Ñ®†ÜĆݸ“Ð×Ua¥^ëfâÎ=.k-)UÙã¹¶XY°B(PI ¸“è1Dœ¦ 3.çâ‰%Ó#¼±ðäpÛHY"†1žÀ<Ûµc¢Þx¦Y'ÖµÃ=¬2¤IºyžlŸ–8Áñ#¥h__ëßL¶¾Ó5ˆot¬¬á¸Ú008g'¯¨4{?³D—1隸±Žê) »‚ß|±L©óæ3Ɍ䨪I% ·dÑÛÁmánÃbyvpEªé÷I•ÆF7…<«¸#¦O½z–s=ÛÛ´ qqmÈã’®×@¹ñ%ÔÖñE¨ý†ñÒ;ÛûÈ–Üc9X¡¨œq^¬,I1¨XPmD cQèZ)j:¥Ž•`÷·åĸ‚Ä’pɬÝ;Äöº‡Úák »)ìÕdž+•PUeNA#ŸÄ©®ÿaJ<>‹ðÃÙGËžvç€qÓ5Éx’âë_‚{1o¯b¨³µð”Äê¤mnä’NHÀñJ1ºÔ:Øuí݆±ãoÍklLøšEšHDˆ#;J1pçŒÖ†·¢éÖ:æ§ô1ÛÜ“zI%ð`¥Žì>•ßɨxroøGÂ5€•'ÿIŒ©Ìar<¼T0iõöâë,Ú¶ªÏ=³<ñ±ù‘T!Ã}ÑíÍU—õê:×á‚}¦æÊ ùä·ŽkHÉtg•€çøsØöÍmxlèÖ"¾Ò¬çÔäÕ52µûË!1†À*[ŒsÅrñèž ‡&Å´R—z‚Oeó&A)sÓ¡äŠØÑ`Ö'ø‘{ªÜhZ½Í¬p«HÑ•L|Çq {àqž´ÚV`tמ&Ót½FM6yne¹ŽrË »É…Î8 9äöéÞ›Žô)a³š)®.Ü"IögÙ€ã sØÕ·Ôm¾!C¨ 2í¬“O’ÛÍM…K–W|ÙíŽMsI¤ë’ü?›Fm"ù.¥ö‘Ìgäó·ñóãÆ=jRˆìÏBÕ¼Ae£ >Óçy‰•–Œ…#o`: ÏñŽ¿‡€ouK[ÐKcöY“’YÇÊGçšÌÕ…í§ˆ¤Ô'ðÅα§j–ІŒD­%´‰žã1ïÁ«~*7מ¹Óíô‰æîßË[x™1zr½hI&%©CÃöþ²[-ZÆ=÷ë·ó¡ŽF’v*É\eÏ|q]v‘©ÙëV ¨ióùÖìHÜÁsØ×¬‹”¹Ñõ“áû«ëXm䵺°òÖIbÝ·*ä†û¸>Ø«Ñ[øŠk8ÿá·±Ðm6,ï,pû²rçcasǦ×p:×CÛ2Ìê½X –ìX¹¨-’U·„\H’\À‘•p¥±Î=sVw|œœnÕ±²€“ÉôÍaÃw»»¶,ªã³¾‘ŸÐÖîy'wÔ ñÉ´o §Œ¼ea{EÞ¤µFËH®Èż¬óœ•àsÒ­$Á3¯Öõ R×Ç>´‚tM:ëÎÆ#™‘ ûÇ·#§¥tÓÏ“ÊeO0󷌟¸nä±Ô|µy :Œk*܇‘r¤ÃœúœsYVk£_jÚü$zËÚjvZ«Kå7–Žê1lb¥ÙJàmSøsMÇA££Ðî¯ÖOù²Çu4Wª‘!4Ï–½\`Zé"o:èH@¦€y'·5ç—  ßKã•¿–ïá»g·mø™’¡JÎw qMy^ïPðý—ŠnDË£+‰.@k’@`Cq¿n:òi¸Žç¤-ÇšUãÕ1üjWô4ÂU£Ë)%›?‘ë\͆&±àý+ûVKÛU†êÜ·Úˆó‚ŒJ‘î2:ŒšÉ—O²> ñ’y’Ký‘}1°?ioÜà1Ï<“ëIFâ»=bæâžl »c x®OH¸ñ³m§kë©E…Áv’ÊK|þìä&ïèOnkSSj>¸–åüÁ.Ÿæ–WÀݳw_÷…rö—6‚ËáÍãÜİymŽÒ›ŒånqœñBØgy ‹yH*£¡þ}k?UÑôíf+h/­ò}Æ7c´Ÿ|q\V>‹£ÙxÊ.d²ˆjžZÇe"‰va p b3Æ2yßÜhñÙ a´¶.Þ;Ï0cÊmìz“Œ‘Æ{ÑË`¹Ûé­aEœ°‹ULÆ‘±%NyLšÔG%!•991^]®™ö/]«"\]•ŠiR¬Èb9 `+wÂía¤k>-´¶›Ë´µš9|±&ð¹/´rqÅK‚ç]¸´‡ï 1ÔÔ1Teˆf‚0GL×%â-~ÚêÜ[]³è7—E/&Š®Ò0ªÇ‚£w^*¶™£Ù[x·Ä6vŒÆÌéÑ”‰ggT._ rq Ð£ Ó;¤Ú¾iÃqÐ7ó¬ë&ÕMôëwöcnNmÚ,†+Žw™Ï§jó­:{)4]ÉuÚüÿ*G3üÁvÈ[w?Þõ­+­´ÍSÆÓÿiËk2B>ÐÌt!AÏv zSä°\í–goõ„‚W; üë…Z(FŸä²|Ã&yÈéŒW)᫈ãñ†«eÓÛÂÐA"ÛÜ]‰Yä;‰nXà‘ŒSZE ø…®–º¸ì¹ÌÄùe™·mþçt©äµÐîuë#»}£¤kÀ==jynÌ`íÁÀ`u9¯'²•¢Ð¼¨GsçO~°Ìd¹r=íW8=¹Åtß#´k}Ë;#ÿi@€G&Þ ÙÆ:ʇ R V¡%ÅžÝNvºW&U ß8üêôö÷6±êày“/°c<úb¼³ûG—Ä^*°‘åvÖ±Ü$bî@¾nÆù¾÷'§^õw[x[C¸¿”^›Ë##ÙÈìY"”’¦òqÅ?gØ/sÒáñ—sa&¡o¨ÚÉk •–C*íŒSÐvëIg¬YÝÜÉi ýµÅʯ˜bIA*‡8¹ýkÍ­¯íu 'Ç äMq%äbX|«'çË 09Á }sÆkJÅ­cñƒ.­´ë˜³dÑ^N¶Ž€; EW8þòž½:ô¡ÓHIOü%Úœ“ÜÏ­Yù vnYa†>\œó[ö£g ý¬ÊÖóÆ$Ô¹HÈà×k« ñ^–¶Ú2j†eÛjå"뵃Ž„Šõê0Ýø~Ùí º‚Þ0!AsÇ*¼gœqJqI]åøã•nÞF‘úÚOÊ=Å=·NïÐf<|¹ˆƒž¾§4¬Üò®qXȸ™³’xÝóW¨Í*_ʱ¯˜²1W„÷Ç!«³¸8ÛÆ3“\Þ§¦}´‰à—ɺL¨p8 žAŸ¼i/„è¬T‘ÀÁêÆÐòI$õEW³û„#61ž™æ¦_â,XŒãŒšÍ·&ƒp g NsS3´+2ÔÔ!œ{úsS¦ìd°'9=±Z-LÙ.Á´…t#$ÒI'vO@x§`ï¦1’;Ò`m¨ØêsU~ÄŒF]Ä)| ä{ÓÒEb'žjŒòHò:À¡Y“׎¿­O•„” •ëíI6;L·ÈàqÉíJYP[ר¨ãipW‘Iýj@ ' ¹‡R1ýiˆfߘd“ÆpGZFpªYßǧҜKd’™'¯cPÜÇæCåFJ9ÏÌ:ƒT„q:÷¯,üDÚ6£›ù ƒÏ¸-7–zðO|øœV¥¶»{©xbËRÓ,Qç¸XœÅ,›B«˜äuÇ&¸ë-.k_øŠÒæò{ï3NBffØáKgSÛãŸkQü/°ºŽêã|²[+'ÚXûÀ„žñí]ŠÉ/"nÏMÄÍåYŸ“ÙGÖ¯yLPª1'ûçž1\£ Ýç¥Ò#Õõ+{wÓ–fòd£ í$dzsïOÒ5K­CÀšq¹×f¶–IšÙå<ɦÚÌ çæ pzTòÎër.ÖgÏ#w9õ©‹ÆêÊŽÀ5ÂøGYòôûÏ·ÞKå[ê2CÚ“€ûF0¥‰å³ž+³Ý椸RC¦¥ÆÃܧªjú}¤‰󪼤E$g¯ùô¨­¼E¦]\~â\0nŒd`ÖvŽC뺉]nð ÿt d{p*h®m.uÕ‚M:T»Žý¼Ç\ûúÖ|×±ÐéE]ZúÍây—ÆË£ #ä}•®|âr\‚8uî=s]¼¥7+œ6ÈÿŸÂ¹ v·ÅHÃati@ã4èk¯µ«ï^x¶-jXeŒÈËaµ<•‚„c%ˆç9æ·p½Ž{ž•w·ýé KÀÆj85 $Ôî¬d°¸ D)têrîêûw®AæÔõOiÐ[kW׺9œE ©ò›)Ó#¯Íßð«V—Z²x¿Ä6—:ºŽÒÖ)-–uXÕ +Xlf—.‚:éTɸ|í^ÿbÝxªÎÃXþÉ’ÏP–ûË2£6õJö gµdhZÍ×ü%²érj‹{m%ÚU’Ü*FâM¤+uaƒ×&®jRHŸt ~k .à„ùמ)¥mÀÛÑu[ nÐÝX»°Ñ´r.ÖÇU`zZ¾F Ÿ/@IÏÇéú5î…gªß ‹/u+ã<†Vo.=é¹±ŸLšÊ—ÄÍÏ…¡LâÐcc€‘œœäç'55ÍLj´¯øO¼×î+pÓµXËí‡Lñ‚áG(\ì•ÎÐ̸=ÛŽ+8ø’É.ÞÒ£žád "Ç Êœó‘žÕn{Ûm?N–ú餶ñZSÈÀ?y~ž‰á»˜'Ö"žÓMÌ·vùJîÃ’°?xÀç9ö¤£Ì‡}OPMJ+ëigD“lLÊÛP³qèɪV¾4м‰&K©Lq7—,k*ˆØŒJaO֥𥞥£Þêwé0¹Ed†(ÕV!Ž¥‡,Nyíé\ïƒÞîKr;h#¸·›ÄÇu¾NcLŽ‹Œ;“Æ{Т­¨7Ð펮†öâÙ£›6Ð Ý„,U”çî‘ÔñÓéYƒÅ6þ·ÕãÎêQ gÈ,ùÞP«’9‡zm®¥ª·Žu=.G¬!³Šh#à ìAÜsÎ6ŸnErºN©¢ü6Ñn4ç·A%à‚S*Ú²\2’1Žyïšj=„z¸’cÀŸ¥Y’q戕†O¡é\V­®^ê>#¹Ð4£ WV‘‰&ž}ÛKHŒm#°É?δ<¯ÂE¤Iw=±·¼·¸{iâêÓ®~´¹]®7g©Ò<œžçµ8)üß)’;R) !NèÜsœ”Ô‘,RÅb%X×$θ=!õ8¼e¬ëLëox$LeˆìØ@bpsØWrLR©\)R:gŒWã]N¾¾·‚Æi…“ºx¶¨SýÕåÈîâ©_ # )nY­íÚS€XáAbn‘JƒžÌ8¬Û/}£PšÎ-:îHâœÚËp»J$›wyÎ;gÍeën÷ž=ðþ’ñ9µŠïwÝ‘Ô_®ÒIü$µ4 }Yˆ_XZé÷qÀUc–Ñ‚•ÁØ© Ñ4g£Ø"¹ "}™cמ99¬DñF‘¦hsjöz\ñÚÉzaœEVó÷%†áߌÕÍGÄöºv§qcöKù¯R6Ë{rùRqÁïŽý…wºcì–mh¶2i5ˆ`%|°ãåéךFÓt£jl†›jm¼Àæ1” ë·Ͻa^xÖÎÛ–:õ­´×pM"Ä©ÈK;½Aîx­[=bÒ¥Õd3[À; ¸Ì-©=TóÚ‹1‹.›¦½Ìë6lVfË)ˆ~ôõ%†>oƤ¶Ó4؃:XZ(xÂ?îTeGE”ÈZ]6ɦpD‡ÈO›'œñÏAQ¾‡¤»Ã iVRCnKÇvÄÇ’@è;f³-|]Þ$¹Ò?³o÷@ê¦èÄJAbXÿ úâ–ÇÇUÞ¬¶-Á7!ÞÞPƒì8äp8ȧË4E=Mo|¨G©éÑ4)K›%9ûËØu<žç•ÚÙj6š¶ž—vSy°L›„žžÇÐJãGŒôÛÍ.æî]?Sk¶i$2ZüŒm+ÏëǦs\ÞâH|&îÆÞôéWiˆ®!1áY !7pv9îãMÆRZ¡h™ìÜ!`CŒÿǧ¥Xw "îÀçÒ¼ŸUñæ£-ݯØôÝ9e’Ü]Ú¸g8'nÖU¹é€qï]LJ/õmG@·¹×tóg~IW„)àãvÝúT¸J*ì.›4Ë,„1;›w°âœíÂÇž¸éLDЬXã¹ïêiØÀØ9 dšÅ½ å ‚#°â±"»{=³ ±Kè¶"6bû|¡Ééœv<×'â¯x’×Äk§i³ÛÚ+D$´CóvÄò„“òŸÊ·?á+òüIŠÖ³µÓ€Ï"¯îÕv’[w¦F+nYZ÷'F^ èM¨ ³gŸ°G¿æáãÏLqUäðo†þÀ–‘éÈ,¾zª;¦ gƒžŸr^$š[ïC¤jš•ÞŸ¦Mkþ‹-³”Ye<ÇÛ¦>žµÓÝêÖ~Óô½>÷Qf»xÄjæ"ÒKŽ3ž´Úi+2t¹+ø3íÖÿÙùSH%‘˜e‡~¼u®†TS ¸àÈÅqÚÏŠt;Ï ÝOöË…·R±K%±d™?wÊœŒsW/¼_¥h’[Ù^¼‰q$^dq”bH œ}â}2jydÊÐÒÔ´D¹½ûm¥Ü–— `º®äaîÒ–ÃCšE¯®/¤¹ŸfÁ•  uà É·Ö4ÿík뱩ÉçEm¹¶˜·—n¸ÎìÃSìþ øv}/íË~c æ¡FÝb@òpiry{iròÜÑ>ÓßÄ?Û2ý±ïÀpáUGð… ¹ÁÍÁz1–àý–UŠwófµY™`‘³œ”Îlö>”ÿøKt—Ôg±[µû\*Í$%YJ¨œ‘ŒT^Ô,îôQ%¦©5ìIÚ%l‘óFp2p=…V»³"Åφ4ëíb LKu͸6Šé‘UxÊ€8ÁÀȦMàí6yõÝïLÚ„-É„:p ÇrpZéÞ9Òõ=_RÔ®a·KÇŽÖXæòÄ1GŒ67r}GJëlõý:òÄOo¨C5¤KµçYA ·®Ocõ¦î€©cà« ;û-Inoå¹¶„B$–èüè9€n?Y¼!muâ5Ö›UÕäcjm¸QIåÛ÷O¥^ŕĿÎÚö.Uwã˜3…ã¹Î9fëš…ÀÔtÍ=Div$ynNÍã ªŒ±aØôÏÀút'X&çP•5xÊ\E,Ù#ÇÝïš¡áŸ*꺞‹}«ÇzÖ’Æ\Hʯ&õÎÓŒA®¡5kA#A%Ò%È$‹ØìqœãÔ;­3 ÚKeoo6­«áL¤Ü‚Û€NvðúÔÓxRÝFÎúæÿPi¬“ld\ãø²6ó»Œçð­‰ïm¬Ö#yr‘X"PÌz(ÏSSÄû‡$Ô¦¦ìg¡xzMZãÄ~}µÕ®ƒª#·¹b$,s¹ÂòTÀûU«?‡$éc­k÷º¢Db¶‰ã±g…n2Y‡ÏNkcÄ~ :(·Xãód˜œ)Î1éõë[ýRx.£¾òl¤òÉŠe`Ȥ‚9ôýiûMl_²’‡;ØMÃ÷º.šúwöä÷1Ö+fx#_³€A˜ò:úS¼5áeðååõÌzÝíм•§ž9Äa^Byq…¡ÇµYÒï$·ðí¬—Z„ò":ö ¢9'$`àz~z+ˆ/"ŽH¦Gòcƒ’:àÓmÝ™ô2âðÜÑë—:ºk·Ÿi¸‹ÊØb‹ËTËmÏÊNsžqÍf·= ßFíд·¹ûRŸ&-ÁƒoP:É®¥.#Ty7Æ]‹túúR¥Ð,€£#(*AÎG­+±#–ÔüI­ÙÞÄ—·¬w"âßÌŽFUÂÈCcޏ¬Oi¤x*ßLÓ/5Oí‰'3@lËžvl¹}¼;‰äñÅw£|’»ùlË‚A ‡á¼céÊ×¶·éuä™— ›Í 7A׿½tÚÍ•ïŠ<y§\B4ۛȊˆ„‚B„®â=p3Z’9%À”…_™¸ã§øÖ¯ˆîæÕu‹3lçû9ÆÐ I¹XàsŽ@Ï4)6;­êÚ‡ôû­?ì'Mžîg3# <µÀ ´’w{Їû?\¸>.˜éxmZÜ&AT1üÞžµÕ[\Mq ωa/&@2¤Ž‡Ç×µI¼þç,ýIè |Ì*×Ãúœ áI†”#—MR.ɹRNSgœóóTSé y<^©¥Æ©«Æ{•òÉ8Éäߥw2Ü:Þª@àm\f˜.‰ç¹ÈlÑÎ8ã¦êöxsR¶Ó­®.-,~ÃsdÒ”ÊüèÝÊ÷õ¥ñ™«ëvq/öE´Wh¬ðOîDz|ðK7)^N;ñŠì2Ò¬RÊW#æ 8?ɦ\\¨„·98 8ô£žÚ…ëA2ipÅ;,׫3Ž7>9þµæ×:_ˆî´ tGIõY•¢SuÚ¤ù»^‚Šm¥Ø¬s’¹éÆ(óYYÊ©(£çúT©Xv9iaÕÛźV 4‰<‹[&†]³§ßp ÆO@WÖu·‡5ïøF:b-ý¶¨uà–UdI'a ‘Ð÷Àȯ@iˆ€‹sÁÀV]ZHï ´k;’²îýú((F@cž3ÛŠjoaXæµ Ý_JÜxQ!„Ë71¬É :•!G'k{öú•¿‡l"Õ¤jG‰\¶I9=ÇSŒUô˜yˆ’ tr{ÒI”‘‡9'½C•Õ‹µŽR×IÖSÄÚà{;v±ÔÜfí'ÃF¢=€Ç'§¥'‡-üC£Úǧ]xvÒC`…ö)Ð (QÁ xê@®¾9vÅ–ÿ «y©½„hÉasw$“,eaLìø°ªçoA[©ÆG¤ø‘>M£I¥¯Ú]Už"òı9ãìI«ú­¾©q¢i¡³£±·»‹÷Nê¡1¹Xª Ï=@ô®¼;#Elæ¨jº”zr@)'žâO"Þ€ds“ÔôIö¤¤ï¢;¶ðV¨·àIúl¶Ð¬pN„H“7˜ÌAÁ+éȯTÐô™l´…ŽmJâúMÌí,çÇø@ìa“Yzýýúݦ©¥ /.MªDë uܤU¯õÝwIÔ0öd–¬øFká ’ÆÉÚã†@À=ýè“”‚ÊÇQ()÷~öÎ*\ÆY˜ò)Ð\Auj’ÄáÔÏÏ¡ÇzG cƒÀã°ÿ9®y—„Ã÷€’zäûVUØûGî¶¡ä¼wëü³[Íϧç\´ÚŒvW·&åÇ“æ€1ÉFÚGO ¥Kâ. ÔÙãBžz‘V•yÜ8õ8ý*¥®%q‚8ÅXß…\°Ú[&¥‰òÎv(íÔsAd‰8ý=ñJ8ßž£€*hp›g=;U™Ž…cÀuR03ó/$úÒH?vw˜ð9©žBT„sŒ:‡q'qqÜõü)’#ˆÕ£LHp9ÚOÒ•¹`8r:S>Ð^O¿Èàq×Þ•Ç HîO­v·ÜŒœ1ïÎ*kû»ÿøHô;Ë}WtŠÑâ’SbNÖrGüçë^Œ ð0ù{&šÆ9 V=zÒç²µ8µ¸¼ñα2é÷þKÛ, ï +(rFO¹= Sµµšçá]Ö•‹ í¼K4SÛ”2:¸-·»žæ+Ò+FGŒƒJ¼L+IÏRi)ƒ<ò ±7 Õ•ÿ‘.P±´>nyã¡ëíW>»[èRÛÜZÝA4WÊcšÝã%]Ù—ŽxÇJén¯-!»µµ’å’Iܪ €XŒÀÀ©Ú’t—˹=?¥ž– 1ÓïVËÂ÷ßhwS 5¦•R{YUQdbVM¸Ë»ëéUÍØo¡½³žG™™âG±tGÊB‘Ó¶3^¯pþZ ‘–.ºÒ­´ÝxL¸¾‘¦@‹n»ŠÌ“ÁçÖÚ·Š xáv%€^ ÷÷¬Ò|÷:]XûKjyEž¥¦ø2Öúd}ÈÐߌü‹ _‘d# ÉÏà:Ö¦¨žÒbðÞ££‹H´øõͲN„Æä`Øn›rÛjôyì`šÜ[Ïm°p|–ŒØéÆ)¦Ö)-›Ù[½©$LchB1šß›Sžìó(N‹4Ò񾁣xƒ¬PJ»]Vw½·ø×Wà[o&†ŸØ“ÂæHâ{£»Èb£†É8=x®™-,­£‘¡³·x å#_œc9âÂÆYyVäò:RBmMë´ d”…™ATcš±¸\àsÝN9¨`G(ò°V@T6HõÆø¦hµ]NÇÃP¬¿lœ}²;„`¢ ‡ƒþ×qŠìå“Ëù؇œc'5Ìx‡Âšoˆ®!½º{È.íÕÜÚLct\ôÏãõ§¯vQÎè¦kÛ³áân´ÍmnëTš)À2ŒcÌ^0ÁøÇ'ëÆz…Þ•§ÞOg«´&ÅâÛ[ “9eÏ$3“ŒëÍ_—ÀÚ+Åfé-ü–ÅŠ^ÃrDï»®æ9ÝŸ~©Àz$’^Ü]5ü‚ê4«]¸ P¯Áå¾QϵUãq vGü,­•é·[3ØoŸçY^‡U“NÖç:ì¯'Ú®¡ˆ5º7–Q¶†Ï§:s] ø[M“U²Õ÷ßi´ŒGk§8NùNp ÏZ¯…ôÛGÔ>Í6¡¼wi#Kƒ±þó(<ÂŽeaœä÷ºåç‡üqg«yw:ƒ'Ÿ!‰[Ìc? 00F8íZ‹q­'‹D“W%Ò<ðËj€$Êê…ñéß­\ø*Áô;+퉄‹-¬«>$ˆ†ÇLÛ½M?†-/.,¯£Õ/à»´„ÛùñN7I å”ç‘úÑÍ9¦ëº…ׄ´…žê)õfú[uyaZÆ®Ù%G_•x÷aL…5+ ï³_Çöèaâ¸H@1\©ÈÏë[ø'IƒK[G¼¼‘måûE´7Ï䜡c9> ÓOƒlä}BOíMT¶¥ÇrLÃç »»ÔæhæˆRßjéeá&·ÔI«(7eà ¼˜wÇ1ÈúTqø—PҴﮡqÔÚDë3‚ 8\еmÉàí%SM {©¦ÖŸé<§éÎJ¯‚­]V6º¾¸MP“uÒäôì@Çz9 •ï¢ñ=•Ž¥´9Fé…ŽröÍâ}fÚÏW†Ò+Xî!Sje·Iÿtäý*(5)õÍÁ:¥ÀX¼ë+™Œ*¸@€PÜg ¢Ý4]sâ.³צ@- ‚4Žð¨Ÿ†.§nÇZ뮼1mq­iúºÝ\£X&Ø-£Ú±# 1·<ñßµ6Ôtþ¶Ôá¡×¼ew½þ‰fg±–åÑVHЫFKÜ9 “Ž8¯BÔ,4ýbÌ[ê6±\AÀJ»€oQÞ¹oøWÿi’x´ývòËKžS%ÅŠ‚ÊI9`¤ž3ÏjíXDw*ƒ€0séYM¯²TO<Õ¤Ñ~*Ýé`§›*}¯Nó‰ ‡?¼EcÁôí]ÝŒÖ÷–Q][ÉæC2 ñØò3èqX~/𵯊4“ ÛÔ`›YˆÎÃèÙ8þµà Û¨tcyÇq¦¹´¸±ü aÿ#늙ÙÛ¨á~kDÇ,N}±é\ˆ-%·c}o ˜;4'  ~`Wc8V`êÊÊFA^ãÖ²QÓ|èI;d$çÞ±¢ýãYëJÍ6§$~µ4Ÿ¼}ªr‘ÛÚ ·R@ûØ•d…L¨‹ßƒR‚DË„O?JªÀ9'T?)eP¸\äã‚~¹©@ÜU°xè c¡™kaÚ7ç8É5äû@ôÏøRHᆘ/pM2,ghC´rI9¦Ù"K™&çãÅŽ¿J›ïqÆ:ƒ·¥+œüÎxé)a°‘ô^¸¡$;ï :w=Í"ÊÈY3÷º‘MY_`ǜ䚆îõm,ÚM¥ˆ8öÄ[,ùÙ²ÃÓ§¶* ¸#¸¶d“ ÝÈÀÏõ§ aÛÛ$úšF ºMœº)¦KÞÇø^ïÅ:¼º€½ÕaÚv ðÉ·˜((?½~½ê{oS_ÚYÝ\Ø\Ãso+´pFH·d+Ñÿ®JØÑ¼4›Aÿµ¯§îï26ÕVfR3€2;çÒ¢¶ð%µ¼ºd‹«jLÚyÙ.Š yÎÂò2jç°HÌð„Þ"¾¼½¸Ô/í%±ŽúxL~InL´ç}¹­êZ®˜tæÓ.,áó¯c·›ÌM͇ldñÞ­ižN¯qw­~ÖÓM$æÍñå‡~¹îyÉ/ˆ¼.Þ#[Mºœöq[ʳì†%$ȧ!·˜ªæ5ú˼Ôuçñ­¥XM`‰mf—Q´±³I# ‚IžÀt5Áú´šÿ†¬µ9£Û4ˆC<Œãß)ŸðŠÌú.µr’]Ûýœ…0¸ã’ ÍZð¶ÿÎŒ¶îk˜bbcó#UÚ ä uü}i>^[!k{™>"Ö¼AcâÍ/IÒ ÓÄW‘Êèó³d²®Hlr1‘Ó­e\xÓW _ß}žÎCM½[k´}Å0X.ä#žK½³W¼]ÅçÄ ZÚ]µ”Å.[ÍEVeùW‚§Œb§Ô<.|96•o¨4-qqö‹»‰`ógÈ`z€9Çnƒ^êJà™VçVñ&—¨ijƒJu=@DÞKHH]¹qÙXgœU‹¯x•.uØaÓtùMT»ÎØ1•-éË`ccÞ­_øSRÔeÒ'Ÿ\‡ÎÓˆ±ÿ­—‘’7p6ž”ßzåuhTë\5Ÿ ©?e89ë×ڕ㸠{ã.t=m:Ñ%¿Ö404»Up»˜³z §y¬kvòi ©i6>mÕð¶bfÞ‘ü®ƒäî1K'€5ôÍZëǨhÁ–ÞskˆÞ2Ú˸ç§\þíGúÌÖº|²êörKcsöÉKfÚÍÎ@a„‘ëG¸j#Õì¯u{[m"9ÿ³Õ“íZ@Á˜•OaÒ‹µÎ½áôN‚H58X/$Á’“,€céÜ ç´”Ôõßxšu­VH I3n\TŒ§#náÎk¤ÿ„böÛVÑgÓ^Ê+1<¨ã™œ»+­Ðc8sÍ?u[ 'n-BòÃH’óNÓåxîeª>SïL|À{‘ÞºÍ3Q·ÕtËkëW/ÌbD|mÂÿC\Rø_[Ó`ÖtÍ6[4íNY%™˜Kaø Cã·"·ZÆ×Ã~ [ÔãÓÚÙa[É@ùO¯<Nx¡¨ôiÅ~'µûTw˜K2¸``àóøWŸ[jóê8‚ÞMüÃzóCqæ•·žØ QAÚì#Ö·<'ιà(c¼,r²¨•# H$…“¤sXpø7ÄWÞ·ðþ­ý …¢íŠòÍ1Û…A)铜ӊIê+~ƒ­jz¼³4ÖÐéÈÍ+9spTãr®ÑòõäžÝë&o›{mRî]üæ\˜'+³ä ¹ôç íW¼(¾"²¶[mj[x|¸¦‚fbØà|¥@QCøVø_Äsé~*³Ù¦£kQþÒÄ&ìÉÙÏ~tY_P:‰Çkö›ýEç¸cC |“·“Æ1ïJÑŽKñT7šûhÒXÝÛN°ùñùëĈN2'úÑoã(¯ï„iš”¶rJÐ ØáÌ;‡^ùÛ‘ØÅgYoÙj¯ œ¢ÄÚI‰É|’‘òãƒÇ^jo i^!Ñ-mô{ˆlä²¶‘ü»Õ”ïxÉ,Í¿{'®hv° ñ§ˆît[=,ºµ³goµÍ©’5ÚB• Ÿâ#>³l|}©Ùh¶ÿK¼ÔïçgHL€Ï‚J·¦Üe€ÆsÒ­ëqkºo‹ŸT‡EMjÊîËì­ nŠÐrIÎîªÜf±ôë_øGZ–âßÃßÚV÷6ÿèðÛÍbIɈè™Á$O=©ò«X.z©–HI#hÝ€-”8äqíOg$2óÈÀ翵ÆÆä•|¹ ȧv:g¿Ö–E`ÞgÊ6ð+;\Eç´2G»t ã§ÐÖ"ø¯GmQ´•Ôà7ï&Áz‘Ôg¦z÷­­F+‰­.RÜ;BÂ"Àãq~µæ_õØmll<3y¥\6¯itâ@ÐnÙ’xXýÜŒþTÔo©W;›íI†ôÚ^Î;쀴£vî¸#=ÿ­HúÍ­²GíÌ×#;Ã$ QŒŸ¦N+ÎEÜ)à=SÃ:…œÍâ%•&&/<¬ä¤ªq‚:ö¶&žøzÛTˆM<[Aq+@YZR€N0~ëÆ«‘çEâEcá‹RÂâ)‹ ŠÚE`D’± ¸õÇ^=*¬ZUŽªBmjt¹û1Y¡º»%fB àŽ×<öƒáÆ£er<’êÍ-´+m&JùÊÿ(ÛÓh?…t¦¥¦[øöÎþu2Gs¥ÊŸ-»9cæ®2˜Ïb:wíØW7u»›qšÃ\ŠÅU8Â0ºøOC‘È«—ZÆŸbë×q[«¨ÓH?8ÀÉæ¼ïR†@ðÜ›,S&°.cFPZÞÛ{2sïVΩ¡[xÇ\‹Ä¶©u5Ï”tÿ28K _»7_zN7As®Žæ#«êµˆ^$€³Âƒ\ÈH9çÞ¬húΪYÅ$pÏ#(vD}Ì£8É1\}¾£¤Í㟤^L¥´ÔˆEH‚Bè8Á `Tü'â xÀð^Ãjd¹†(a¾6ÖÛd26p¬Ä àƒÞ›€ÏJfS)ª}9ü«QÖ¯lom­ÓO_ßÈ¡$2 7vÄ ÖйGT—!Q”q†?QXzÉIõ!ReGVwÏñ/Ëǯÿ^°›²6 ”¥ª-ZjÑÝÍ{‰ažEÜŽ1ëS†Û #äéTô¦‰%º¶—o-¹Ù‡úÐrøV~“ ¼H/Þì¤Ë3y‘‘‚HØ~oéK›BåI]½‘ÑIaLä±n\ôÏ~µˆ®(@r[Šå_&Î{¨îç[¸ïÌQ “!ˆ|r½ÿúÕbîÔêÚÕÛHÛ´*G´ãÎî£=és•õ~ìÞ²eH>b³ÐÜÕ[®ŸíRΊd`¸0*;ûsš¥ieoqâ+É’êDUâ8ä>A8úpçTncQáMM#gDk©#WüaG^´¹†©tô:„ib™WxbFIÎ~”õ܈ŒÍóÉŽúÕÏ]ZE§O£¤7WR¹e”´ÅŒŸ!àöì8ªsF°xÄmæM²9”d’Q€ íž?|ÞBT/×ú½Ž½¦}¬±•%qïK±Öe wv>•SG°[[_8žKˆÐÈ·Bö¬½cO’Oi°¶¡w 2G!döãhì}óCz\˜ÓN\·7T†Y[<äŒg€=*pD£vÜò}ÍrsKq‹·ÛÌqÜÞ4 x~ð×=:‚3éW¬mgÓõ¸tèï'¸í™œÌûdqœÒç¡n¥r4ëMGí¶:Š@³ù&ébT“ÌfÚHãžIÍu2!‘…HæÇ?•qfÕÛÃqº êd†¦3Wõ5KDi–w ÛÀ –I>w-ŸEçõÏvk:1nÉÛs¦¶ XV‰8¦0<žœŠÆ‡Äšvœ‰e;O$Ñád—É!Kt$~5¸¶òâŸ5ÎyBPܬê#!‹{ãµWDVId ªî@o—–?ARÊùdNw/Sšz HÀí×=jdô™bO³\”~c$ô<’+!îLw+FJ³uçüâµõ8 +lùHÁ î+ $¾µ7p¯˜ŽÜÇÝO?j)|GG»mNž 7'Þ>€cŠùr\uสÖi•czã®*ÒǶV;Afà’yÅ0‘2¶Cž ÅK’~÷ü51^¨7t슚 Ê Ú;Ö¦lw͆,[•z±§FŒ±•p°çŸÎ‚»rI@É9éÍ.̂ǦA昆3,$•Ç¡ÍF¶.ÑóÝ Ep$e"3‚~ïSš[c"D‡/ì:~57ÖÅ[K–¡Ž@ °ÈòE6dŽâŽ`Y\aR§L2÷ïN$†(×µY!RWå×·Z‚âc -"ÄÍ–3R*²”IíœU{Á'“•â9Ó-RÝm#wxb…ð#Ä\þòþ”œQ†êÖäo†upFì+G¯Òž·–¦äZ}¢?òƒøõÆsŠò¯æOªøNïÃñ¬wžAþÒ0G–#IÎ.?ƒÃ0h2ÝAq¨êïm­[ß»Ïo $i²Açnò„cŒŸÂŸ"ÜîûCð¥ö¹¡=¥¼ÚŒ²|®²ÅÓàØúWH]X~ñ‚Æ8ï^gàÈ´2·wÇ’éW÷ME1fXw0Py\1íÍv©®Úê~ŸVÓ·]D±¹)² • ò L¢ÀÍoéï­ý ¹0¿°µè@"œá9í×k£3CöKûÞ»G'µâö·‘Ú‹Çqg{©O+Iq¦ì'¦èÔgª2IìMvþ ‹DyöP@÷÷P©nâŒmí’ƒœ€¹=j¥•ΗK»Ô.u=R ·²h •D- R¹ýàè¦+Bî&žÚHûIò‘ìkÎ,`¶Hþ!ˆg4r$͹JÄO œà7éÅ0»éš¿‚5Ô.e’þ1Ò}¤´N¾Xè½Íè:Òå¸Î®ÏšNƒ;^éð:JɉÏ!Ü  ¶0?JÌÓouír M[LžÂ-3í%|©Ð–x_?Þ88G5ÒkQ­Æ‰yo¶@ ©}Å8#žzŠó/Q¹‹Á Ó¢ž;;{µ•f™™†æ\íL©džÄ)Å]\.z›]Æ’`ÿáŽÀTwöW+²ê(fBAÛ( 29ž3^kr·ºU®“áëÍqåKËæ\Œ‡…†$°$ô''š¹ªX6‹†–:åüéý·r«Üî`‚coQÀ8>´¹u;ÝJw´Òî.má[‰¢ˆºC¿`rLž•OÃ:œº÷…ìu+˜’).¢ó Drv&ÐK;ØÝÍTø}yuªø&ÚmFC$«$Н)˲!K{ð*©q ?Å}àÜ3ÆÚ}Á !R0>_BsI-u ÐFµöyW[{'¹²£Z S± ô5¦E ŒŒ€95ÀxNoëÿf×X‚+G»fžÕeÜ¢,ãË+³‡œî« Ƨ⸠ñ:ôÖ0Çvè,R5hŒJÅvžûÎÉéž”8õØ5¾É#$8V<‚Ø ß>æ¨Kâ‹ÅñhÊeßhnEË2…`“Ô÷ÇJâïu­r? jW‡Yº[«Meícp‘üñù¨˜o—œÝ;×GzŠŸ4÷ϘɣÌy<ÿ¬OO©£–ùÒä –$ò6ŒñBýDÏj¯>6©c~{Sí5ëk‹½ÁXrÞ¼’sÀÏSôÍC>­jtI.‘$+”rAVVÏ Ž¢•£b¤ê9]\EÓ,bÔÛ[£\IÛÆ}*ÃézOÙ¥µòSeÁPë‚ÇO¡ª«Û§úYfKgR1–ög?JS©ÚO¦Êá›t#÷§i%RHÆsj=ÖOï<ɦÑ4“e“['”¯½±7÷²i-¼1¤Æ.‰€L·/—’p}Žxª—z¦yó$Ël3,@©ÜyÁ>ýëBÊïíÖǽ”/‘¸[là`ƒ»~=Ç´¹¼KsJÎ ]6Õmm÷¤j>U,[Žýy®[Z¼Ó/ÒIZå<+a‘%‡›pñ|òe•ÏëÍE?†m.¸77(öÈ&Y0ì½H'½k3’à„ œúÔ 2L“°G;TmÁÎ8¤â†«O¹Z—a B+X‰‰Žþfõ$ž¤úÔ†s?–8·$ý-´s>5¸Ü& óûÿõê"2p‡8ïëPÁÊRÝÜ’‹,«°÷T²KÁÁZ‰ yx)¸ƒ~µeFò©ÏQS FmÔ²RÄo “ý+”ð¸Æ„¹<ý¢aøyŠìïGîp2Zá4uhôh'`|Ù·߯©és[s+}³1¼îaÒ¬D#V«tÏ&«Û«ˆ¶ªƒ¸ÿ“W#fÛŸ‘}*bD·&GPÎÀ·ãŸaRĘaö¨…CÀää¹'¦*e@UU˜yÇLÖ¨Í+Æ>fnËÛêiø. î tàv™ ãž3HŠ…ÜN:¶qLD ßjÍ‹°ÆOáR…^vœ’zñÿצ4˜˜.A=*D2ê̤ð¸ $’äã &ÜŒdô¥ Œ’v’NÆFòš 0Ÿ˜{gõª#QÐíç8¥gùN?Ý+DŒB`0<ñÐTSÈvd“·$w8 DGÞY‰8ÆMfê:ù‚òöÞ«¹ÖYü}:šä4¯øŸTñí‘Ñm„· ¥n>hG9<ýìŽzvªRêv6¶W^%µ{£~ÐÌï0‘ÕƒÃ+2œ öÅj©»êº=b: ®O öÇQY>#†wðýìm—Ú.®chІHÈÜŒ7ðqW·I¶2\žyÿ*ó¯øˆÚø‚ÝQ[VÒZ+#Ó–p ñØ&N=è„\˜™ÜxYn¬<5§Û^Ú5½Ä,N¥”äŒåIýkNH-$”\µ”/60%ò†ì}qšÈÕ¼@º>•¦Ñ=Ô2I'À“Ó¥T“ÆòKqsa¨µòÆ&Ž,!óc'²ÔÑi=@èE¢ElãK[[K‚›RE·_N2?n¤Á Ø›(îyî${™¤p‘Øüìè2@¬+ïYÞø5uh溵Šå HcŒyÊç#jŒã ƒÏN3Px*ãFžîé¬$Ôf¿·UŠWÔ. ä)¾B® NÎÚÔÙxkBÓµ /­4ËHne$4‰É¨™ïŠu‡‡´M&æK‹-6ÚÔ”!ŒQ :ãéžk•ø…¨Ý(i–·Ëgyr¯"?™±¶Ä»È#«øš¸÷ËâO…ò^ϵ…ΚÍ&N>p‡?“/éNÍ«“©¦4_ ”Ü,t´·»P2° Y†r‹*ÉðׇÞ!&‹aåÀ¸6Ë„ç?/§<×›Ik•L”»¶D/ž…rÀþ+úWs}ãm?M–XîÖc,SN‹˜âfÆsžã 8¤Óè7¯m¬µ{Il®aŽhAxÜg+þ—?„ôt¯ì™t›T²ó|á &ß›ûÜA®sA´K‰Þ%h£žÚÝØï<3äœd÷À®‹^ñèÚþ°ðï6‘!îÜ?GçCÑÙð_‡_AQÒ-ÚÌËæ•Ë»³nÎsz|ž ðýÆš[iê–I ‘bBÊCޏçß5å¾ñO‰¼gâsk.µ-œqEçˆà…6¬¿/®$rO5íÞ`2o ( Açò§$àìÞ¢Lç"ø}á¸/f-î²Æ#“r®å »'§'ëIqðûÃ2Ceösù6LÆ·Æìdœp8¥‹S¿²½òõÁ€^EiPIŸÊ¬ê÷Wžu©²¹H⢠nNAúžÕŸµ6ö2ºWÜ~‰áÂé´ÛUnArü à çdð=i³ø?Iºñ ì‚á¯"Ê"vTO\.@ç¸ïZ©u )û£ÓÌ8Ϲ¨®o ´&Iœ*’ÜN Whþê œç&>îæ[ÛË{«ËnWiE)¸‘œc>ôË+^]AŒÐÅž*N[‘Ó©þªŸirÝ&›Ô¢þ²3\ÛÇ}~šUܦk>6Q± 7=À"º¢iFvÒí@<*x·aŠš™à߀¨%I$dŸÂ™jó1gåöð=3TäÌìj) ²HÂñÚ›¼(žHæ¢MÌäsqI¸Ÿ˜òI?ÈQ¸‰ Âí,2FãÎEsµøJå¹]=¼†Œ@ȸ#q;³œôíŠè$–DF1 lŽƒ­Vß32(Ç9þ¿•L¢™¥9òßMÌci¨_ÜêÐ\XµµµâádóTœÓ×" Bò >ÒçO6 ¥—z°!sÂcžqÜ ÔbÁ¥*ã§$óÏÖ‘@Ûcó1ÎsÇJŽUÔÓ۷ЩcöõÕ®&¸²Xá”cwšqÈ÷⛪I2kZi†!4‚9~LíãŽsÛ¥Z»Ôa†v¶iL³í,b„n`?•n§TÔÒîÏPò¤òZ#½Tã©'¾)Y-Q»|ÒVV,-¶¥eb²Cn“ÞÍtf™PµI<)l ãóª¤jñèú•»é®Ï$¥ÑÄŠÛóÏÍÓ§­oìiü¥“ ½H“M»FÙäg±éÍ>A*ïª2µQqu¦ÚÉ6Ÿ|’¨ßû‚HœtàqƒRÜ=êè Ò[Ë%ô±Ê$“éïZR3yß#6 ã¿4‘ýÙ$ÜÁ€juÐ^×Eu³9Tšù|?glšeÁ–¶(eóƒÿê­›Rï®Ü±²¹Š7€ vi#'±Ïzn…w§‰ïìÊ5£hƒ}ÓÃg hF$•r¤`Þݲ(ä¶…JµúݳjP[iÐ6™t~Ç>%à1v äô9Í[´Íu­[ €e…„.q†6ñõ=+e®P s¶Õ`1Š«muö™e’6Ü)’¤`ƒƒG {kô2徺M>ÕâÓî¢eÁ‹s(Û‚Èâ2k63{ÿýü7WNÂa6æ88Àê@½kcLÕo®-5 µ=>K5¶‘Ð&|Ã"€qß=9íV¡¼ŽCÇVRPFïùÒäe*ét35+—ŠMV1Ü,1»™bd;“pÀãµB÷Ë­©­½Ç—s†XÉw8Æâ¸Î2{úUÕÇ& /xpÄU×Я]x·T·ñhÐF‘o-ÔŠÒÅ/Û~S'¤‚qÓùÖ€ñ,ÐêpiZÍ‹X\\mæI<Èe#ª†Øì@­×=î+£:{­J/iZ|p\ a·Z¢ BÁrwUÉàMÕfÒ5øoaÓå»ÔågGVb«¹và’¹@Åuª±ðÈážÚÅY¦ÝÊÙ¿ÈRçkT#Ï®<3âi¼k¡ÈšL³A$_¾3ºïHÙJŒ”àü¸5¦ºµYŽÚÈÛµ€µò–å·lò3‘úûWTæK¸Ê­2 (õÍC}©\ÛÏf–V&êf)3,Ê<…ÇÞÁûÜö£±œ^Öm|i§ ·ƒW±½7–ÿ¾.ŽrÇ v£ÐÂþ(–Ò)†™aksçÆ­ÎdÌ|ïl€9é[Å %Ã…vädô?L’6ÔS"䎤õ÷ù¯¸ŽIt{½KÅ·÷º¾‡o=—Ù„V‚YSrxÆ·öÀ¬½Gñ‘àÍ_E›J,Ò™~Æ‘ÜÆB¬£I$cnI÷í^Š'€Ô$ã$V½â¢Ïb£ÜÇyt–Þbʨ±3GSÜð;SçoD ™ÒüIý‘á8?ás6—ÅsÚª7Úq»†p§¾;Ö”Ž:àt£Šçöõ¿‹|HiòË ÕZv³LÄU¶†Ë^ØÎæ#¼·™’~N9ëÁ&¢SæêZS$¤³G™>|«a3Ï®kFþm F¸Š ž yõöx£X‰ir@*:ñȨ`_®®Úu¼v¿Ú± 4)Ï>¹#ƒÍ% íá¯õб©ÜÈnl,ü׊ —tL7€lçô¬›O·YO«}ŽiX·\I»jãv0{ÖÞ¬!]?ͺ¶y_9`ûY}Nì£Ô×7á›ëß^B·dÃ#‚#‰˜¬G#s ŸZ&™TeMzÖ™7Û´¸n6™# Á=Õ+ïОxpM,»M¡Bª`*N‚˜¬dà;‡Lֈ⓻m ÊÇ÷hŠ9Ç_å@DààžÜ~4Ù“vyB1°ED³‡ùpT¨Éž)‹qûaÇÉØõÚ1ü©$µ i$¡ )!œòOùÅ":…PŒB‘‚:Ô­1g*ã'¦*Z¸ÓµŽoÁñE&—rHV˜ÎK‘€XA>½èÖ,PkÚa¶TÓnŽP§“CÓÓ5jm-ïžóK¸k9œ5BnG'OJËûuþ‘v×Z…«\ç…ºI*?»ŽÃÜâ³z+3¹>y¹ÁïÐâ#·º_‡ÚуSÔ|û-]à·”Ý2¶Ðè€yãµÓÏîq8J;£‡¸ÔõKŸê/5ü­u§ê¢Ñn ö˜„Џb:ýãœvº]> »_^è²j·W6³éët†r ÷”;F0;b´î|' ^h°isÚ•²¶ùÒ4™Óžäí#'¾NM"xCRkÈ­¥[Ùâ0ùâêRåÇRØéŽ}yëCš…¢]ÝKá+i'× K%ô¶þ{®ùeQ#(XÇMÄ(ÇéXó]^ÇðëÄwK¨ßÇqgzñÃ<Çl Ÿ+‘Ó©ÖÃá -…ª[ÜyQÎ'XÚîSå¾ÊÙÉÎ4Kàÿ ÉÜdþEÔ¢Ic*³ óÃtî}OZ9âµ \ç–ÆþÚékâL[ê ;’ÁŒNGÉ‘òƒŸJÙð\×7š%Üw73É47ÓÀ'œîfUlнÿî—£oz¿i[›x„QÊ÷rƒ–ç>þƒÒ+B³Ò­n ´’é ¹b[uË–ÉÎYXœ©9ê9¥)¦†•ŽNK½N?x†á5k“w¥$FêLe‘]P ãŽãÕ¨4׋ƗVªj7øÓžC#ËÿÅØíÈúUoYið¥Þ™n’F5 ì3I+J|Å,Ø$óŽO­u–6:lZ[Ei)kr ¤‚êFIç¡Ç4Ü’ù…ŽOÃÞ}ž‘à¨ãšé!—w™ >BQÛ-ÜóŽø¨uØ®_þ,š]B÷íW»í„wD”¢8Æçc¨|cœÎ))«Ü9O@ ¼Žæþâûû%!Š=•É g1<<ŠÌ9®ÏÄwO…õFÕÌ“[Z»ÄÁsÎ8>þ´è¼;¡«Ç"XB¡6 ¶ÆÚ~RW8bBA5§$ŽÌÑ”C Sëøw¥Í°/‡4mJ+)58¼O$ö×– U·™ ”€ÛÀ|€Fcʱ¡¶K¿ø3ywŸ*ÄL2 ˜ß‘އ'ô5ØXø'Ãñ‹£‘ Ip¥\¤Ž:õÇ?/¾1Vâð¶†t”ÓŸOŽKkwß3¹ØÃ€U‰ÈëØÑíÇcZ &ŠÎ>Õ9Åå‰÷HxÆò}}ëÊ­-/›ÂÕã×uT»¸Õ…»·Ú2»^fRJž àuÏÒ½Oû>¦1¥³Gå•V#åÆ1‘ÏãÖ¨Åॴ:pÒãkÜÊ‘™\•“xsŸÖ”%mÄу£Ãy£x£Äö'[¹!°ŠáfÔß)¶þN8 ÀàzV‰q=¿Šî]~þ÷M})¯.ÞhË~væÆq×jôcáKëÛ–´--ÜÞã39Y#=ˆ'ÛÒ²lü#¡éÚü6$–êDrµÔŒHϲİàUs«;ˆfã­YÖ?°´Å¾“Ë„=¢*¸£n!‡ÔŽk§ŒÎ]˜…!>‡¶* `óÝg`¶9ÅHX*¹9<äã5“×TY „Jão$Ãõ«ñÿ«\õª^v" ^äÕ¸›!õÚÌ8%̪–üƶö‘О[w¥½ÿˆu;Ëæ×Óìš ˜’3„n †œƒUµ;¹—Ã.•u;ï2ÇQa°1Œ `ýÞO+´ŸÀÞ¾ÖN¯sa»ûÄ‚B»ì¹Á?Z5OèZ´÷—Ù¸šñ@šHœ¯BGlð9ªçˆ’9ÝR6WqÞ\]ÜË£¥œHòØ\Ÿ6Òf90ãpnNkSÄSLº÷†äŠþæžðE,q©"í-Ïrx«W?tK›ëyÙ&£Š$kxåÛ¢µŸoðÒætÓ#¸ñÔÃObbcùSåÂŽOaŽsÖ„â-Jš&±ª¦¯¬I¨jÑ6›ks:¼~Co)`á8‘œõüjy¾ò¼Aö¯Êkq3e±‹Ëôaó=¾”“ˆkbõ›û [ÂÚm¥­ˆ¶Ôâó‰·Œ©‰UC69é“^ˆ²œà¸lOLóx¼â{mwÃ÷§Y³ž=:„ÆWä'BÎTu'­uÐõ=&Þõµ-bmBk‹†”F§°?áJIn„Z¿ÖDr¥ŒjòÝH¤ˆâÇÔžÕRîéu±´¸û\_hÕAØÄ¨<­V¼³ÔíüIý¥crÅ,b'ŽGÚTç¯?AëR_Ûß%ÞŸ|-VæX÷$¨’… HàŒþU‹nîç\akL·£\ZÉÉgo,A$Ä¢EÁ-©Ï¥yoˆßèrɧ}®êà¹}í‚ ,N>öG§AZÑj×f5×,ÝÏóqáÜ„'ûZ"„qŒ†ý;Õuš _ëws,amtØ^c·;†÷9÷ (¨n¼=âûÛm%$ÔtŸ;N™&ì|I°ar=ÁlÓâðþ³y­jWwícöFÔÚH±—2*Øa‘Ô–9‡­V‹K‘©cJñuÎ¥¨Gi>‹<0Þ@Ò£²»û¯¹B‚G¡"£øWAàˆöÄúLä7÷†ò8Çl*-;LñŽk^i·"Î#¾7+ÏÆHO ޹<­Uд/øwF´°´žÀ¯ “‚ûÌ‘pp2¼r8ö¡òÚ× o¡è¡Î±³ÏŸ ¥òö¨_™¿sL³ÜZ¤·ùn˹¢'$J˜È7[µf'tìW¸Gó<´C×s1<×£øªÚû\¹Hô½\¼òÌO’©ónÁ¯|rkºŸ”Åy#¦9b{Wáý'TaâK{Í2kÕ&’d˜O”ÞpB±9&©%mAôßi:¥¶Ÿ‹”{Åf´’HñÁIåNsØã V梷0X]Mh‚IÖ608RÁx϶@®W°ê:ÙtÛÿ Coqf‚6Ô·G±ÕFÐÊGÎIqøÕ[ýSZño¯ãŠÎ!g¨y3ÛÛ͘îR6‘O£_J|š„¼Cª^Áu¨]ÜÉ}i§r‹l©äN1¯MØPk¥ô7º$š‚ÙÞ[Y•ó猣”À;•FOOäkŒ¿¶¾½ºþ×Òü/¨XAÆ·ºsíˆê » A×o¯|â»xuiïôYïE¿‚l²-¤¨«#1€[äõ=©Ê=‡sœ²Ö¼1¥ø~Æð´ÒÙÜ ¤÷Q™&˜î òFqœõíVnñ<ÖÝHÊÎÒÓd v^Ûk¿W—ìÉrc‘$(Ä@,¼}Ü×ñ¯?û.§yá¿ÀÚØ“R¸–[páA*À(ÏÍÁrsD6hMfÅ>VuŠÒUx÷™X¸ ×$óŠÕ¶ñF‘o¤µðžY"3´DŽ8倿³¥:•Ö»áÛ¸ôkµ†Ö Và»F<²ê8ÆN3Ç­d\Ùjͤêö £ÞÈÍ«‹¤’_.hÚU~2Àçè1É«²z0Øê¼YªhÖº}ŽåÁ¼M”X°gwË÷FqÉÀ«~hbðv‹#Éó‹(˜‡|•¯ãúÖ ‹RµÕu«†Òno"Õ-SÊ c-,eLoótÉÎFFMkèo¨iþ·û'eí¢Æ¶÷3*ï* rÃ!yÏ_J–´²S£LMþ­·++ƒÒ]=-ÏÙºh‡œˆäàqÆx¡IË@•5JíêimÛËžä.94Ù¤·‡ægQ±9f=½s—[¥ö².Àðí÷ö’Búœö¥Õ ¸ÀÎÚ€iK}ÌsÎþÙüÅR‘>Å]k¹¸¸–2A ÉÛŽW­KTQ2«…b¹v6öúm•œÎ-®fU¸’)³ƒ€6ç?(è¾EÊü»¶ò:r+VËþA6¯$ÙvrHÁ9ŸÖšm±NšŒS,´]‹¹\ðFzÔsÌb‰¤DgÂç 9 v¬‹ÆÔcC,WÃÊuYC&ñ‘÷¹ùzö§\ý¢çT¸¶¶òQàEy$—'$ò{zÓæ@©ìËšeúêš|WIÆäá$ ‚Fx©e—Ë囿ìÙÀäÖV‡˜t0dÉÚÙ1Î*´Ú…ïöDz§— µ,’‰6g²O^øÅ Z Ò¼ÚŽÇDU€$ ð­ÔÕ˜â=NÝÆ¹P¶¡|ËmgÇÙ¡RŒã?{Ÿ^úâ¬É=å³ÚÛÂÑÚ±„079`íÎSvp;{Òçdô:(ØûÃ:þ†–%,ÎÜ0^›F3ŸéI‹,¹A¯‡“kdnã#ùÔ¡Dkàzu5HÁèT¤ ØÉUÁ<Ö>£âOìíJÆÊc?Ú'HEuÛ1ãw9½?¿«Ï™¥Üê—b}ž&y6õ`úÕÁ7Û/Ï„µ–h#¶¿¿BaNå —±êx9øÚ ËÁÀ Ø®3^ks¨jÚ—‡<=­ÝÞDjÁ5¼q2;än ¸ŒesŒW¥}ˆ’¬]°Êϯ'4IXÍø«GÕµi´÷µ»²·ŠÎå.TLŒåsÔ9¥‡ÅO{uk¦™ywm3˜N¡fàsÆr9äñZÚÌr¦™rДGX[jK§ŽsŽzf¼ïAöÒÑnº„öðbòʬO^Û>•KT3Ò È"hàõüh„9,Ϊ9럆÷Xms\°‘íÌv6¨öì±²¼1ÎOaŽ+#GÖõ˜óKök‹]U ÞlGaläœK•°¹ÓêÚ¢è–7ZÄ34.çXcÜÀw?LU˜n乊)Ò2"‘C€Ü‘‘ø×!â½ZÿQð߈N›ÂÕ$¶æ'|·ç(GnqÏ^jö·©jzn™ºÉm!‚ 1'›xÄùŒ â4ƒ’äúÒåÐw:GnWj.HëÇ9¤ $jª±vŸoò+›“W¿›Rðú[x“Q´’GG…‹G @øÈ‡ÕRÓÄ:Çö4’´–÷ÇT{6!UàíÜAlärqŸlÒäc¹Û.ï1ƒÄXXìJáæÎ=®*ûQñ=ž,¢Þûd ² -$nÁNUY€`HïëWï^³Õtk«Ë9ä— #EnØTTܸËv=}iòvΖIKÎcÛµzÉ«Qȉ$%‹~•À?ˆ5¨¼/âæžÕ®tÛ·† ;C"mÏË“É,qÍj隆¯‹E½{Y žÍî­Ù£.ž~öhäas¨ ‘•«înœe¾µ[PÓ¬µ{i-/ÞÙÈg\¡`ùIR ê sÞ ¹×ï|û«íBÖæ=Ä*‹V%$Úlão We³ €À–-ßÚ¥û®×ÑHÇ ¥¬+mn«±bvªj”É’|/ñ•ÈÞÞk—?þȱ»³´‰tótžm¹““&Ó»æ>œþu•kâÏIáÝ3_“û9à–øZ\Z¬-™3/•¹[wò*ù[Ñè¦â6ž(¶7p =êÀº„#2nm¤Ç¥q~.×5Þ_Àš}µµŒ@ ¹mïxIUPFÌzóÏlTº¾±­/ˆ­tM>[Ë)nb{ìDŠW†ÛÛ ÛúRåmê<äUn„‚7@j¥Ö§m y.FO$ã3×é\UïŠõ–øs«ˆl¢¾´¼kIþRѶ%Jòê5.§«ë¶þ3}2 kK¸a³7›U Èæ 79%€þÕ<Œ¤Ñؘʎ>ï9cÚ–517#ê}My焼Qâ={Tµ•®´ilXÜÛG”ž÷ƒß{Œô®ûçvÏ#=sÒ¢qåÑ”›cÄåÀ鎵xª€ ävªP# ߯ª{n gñ¬žÃ¹Fõ€‹úŸjç­‰þΕyâúLþ@ÿZè5ÁÆyà×.K:écmŒ/Ø‚Gý3^Õ0~ñªW‰¯î@qÁç½X…8X°èGj©là’ÄŒb¬ÂÇf ®#žE(ŠD¦O-K ’ Àí‘R h×i ÍÙºŠ…A£žZŸçe!aäô'd dIŒŽû¤ ㎠p8á7žÙÍC°pp«Ð9©mxB8Îɦ’@õ ŒŸ)8_CH’N—Nß-—·?äÒC Ø7¬z†§²9'Aêi¢I¹aœ“ž(òÃpò cJj©V,_Œ vd-‘Œ!T!¯¡Ü„îÚâÖÙžâéAX7ñÈçŸj”Ó:jRi®St‡ Ì©×héÅ",F|‚Å Ž+Zo1¢žÙ ¾…|ÁKãJžbõl>×.›ò¼jbÙ s#·ðŒtõWFN”ÑÒX ÎæêN9ü*̲´B ÖìyÚ>ïÔw¬}_˰¼»ž&Ií˜,ù¡ŽOAž˜9­:ò{µ‘ä´6® mÃÎA^"pœSobë@ˆépQp¬| ú~u5­’@òùf,_¡ÉɬíN[é¢Iäž9$B©sÀv=¹¨lÂMFI-¤¸i"mÍ䑞yõ§×a(¾VîËöšnŸmð x‚Ëòº)-‘Žœž) Ñ´ß´A:[¼s@6¯ï1œúóU_S±³Ô$•æ*%ÂÊHýØaÐç 8ãÞ™­^1Ѥ½·¸uH£ÄÐ6gŽø¢êÃJmÚûšÒéšmíÁ¸–i ylÁˆ =4áééöB‘ÉþŽùŒ,푞yæ«GÏöZMmu"Ü*ÚøesŒò¯µFš¤wÖp]5úY<®3‚8`3ýii}PZ¢ÚZlZmÌý¬…•×úÀ%l7?¥14‹KUµØ×lmøBe$L†âÝVwKÿ8#bi\ŒçÇj’+ šJNoÄÐÒ…Ï\Ž(J,–êw+Þhö×Ï3Ïs¸À,»TãŒãè?Z¿ZÚ¤1™Y¦S–¦*¯m®-í.H¶äâOJ¥ªêïo£M¨YùR²‚W Èëš«%¨^¤ýÖY—I¶\%À·šê¯ÐŽý*9t«rÑN—+1@ŒQÁ.®{ÿõé–_jRwÔ –¯`þR©'#ôö©¬n-¤;`™dÚNU_$rI¤”wa)Mi{ޱÑâ·³¿˜ËØÉŒŽ=¿•U>B‹\¹±VÜ!dR@ÎvîëŒÖ¼WPÜÈcÕ²O*x⥌ÄK¬l®êvºî}iÚ,•9¦ÌíGN"EšÒå­d(¨Œ0aôíP]èSj‘ù-©fÙ€,Nà0psßé[fH”©b«µ{Ž1SÆ …eU#oU=häLiÄ’$1ÛÅ‚T ÉÏAÆœ„ï<îÁëŒäÔní×$±!TR£+æç¨ô§¡‘_P¶ŠêÊkiáY!• HŽ~ø äW+û$µ²5MZ+[)üë{t¸ŒàýÓ·wsÜ×YrUöíÈãTV²“K¼xõ«H¥T*ÓyªÂÜ‘Á`O'¡¦›[qà Yå¿Î£©D——"ïjN?u( ï_—9ùG\Ô°øM#ÖnµeÖuº–ÛìÙc ½†6gƒÎsõÈ­{+È…›R‚îy íª‰°9pè}¨•ŒÖÏqÅ´Æ~iPUÒŽiÊ\ü?¶}ÇI‹\Ô#·²›íse|äs´p oκ¸ZD†4iŒ®fG#,}p§ŠŽÞòÖöÜÏmqÌyÀxœ0-ß‘H÷v¸róD›8`då{séɡɽƑSU¶}BÆk1y-³H¸2ÄŠÇÀ æ¹ßøCxbkjmž9­%dMÑ2^}륒þÂÛcMu"Cû³,Š»þ™ëÿ×§4°«³…ëœqÜæ…&¶‘ÏÁỨ¯õ³¯Ü ï¡HŸ0Æ@*»C`rqïQÅ࣠–Õîi2¶ÄIÏàd~5§ªK ²ÌðÚ9+¶YPyHê8ÎjêêVßk6"Ôò·s‚p>´Û—AœåÿƒÖá5HaÔç‚×Sb÷ɰF )<‚{ŠŽóÂ&þfiµ›¢%²ûþí Ç'#—¨éŒâº·’Ý®L q¸#q‹Ì±ëJl²Goƒ9 !w; úšJr’9é|18M&VÖ.MÖšVä"fEq‚¬¸Ç@;T àÈNŸwes¨Ý„çŽêÓ^ÚÍ8ŒOŽ«æ²yªJ©ÜyéïïKš@QÐ|)‡n§š CPš YÞ;F¢Üw6œäó]5°+žc®OçPZÞ[=.ÞæÜÃŽ%2 §Óž”濎kÕ¶Šâ#1¢¸,¹Æ}ÇçRÛ{ˆÂ—ÂRÿÂQ/ˆ\½Iš·XÒ(¶¤gTôcœŸJ©€-LJaÒZÔ~Í Ð»å‹ppÛ¹;0FãœWMkªÚßIsmܼC°Ê¬ËÛœt®{Mñ¼wº½¥‚ÙH–·7ÛÃs¼ÏÞ ƒ•p~*×0¶ª|=‡[Ô5K·Öo㌠Ѫ¡å%r<•Ôñø>æ fÃX›Ä7Vp´xcÕ¾öp:“¦+f]Z›’êÛËÞ2J0¹õ9â§ù€–O0ã‹b“”¬å—áþß êÚ,ºµÌ‘ßJn†ŽRÁ‹ uËqUSÂ:Šj—7—^$¸–âêÏì²H–é1»÷pXߎO5ÙCz’ÛîŠâ7;w¬ËëÇcëYV÷rO!ýäN»ŽrppøÔ¹JÅ#Mðœ:wˆ®5û›³y*íÝå•2$êH­t‰p0~nriÒ«då1¸ñQ0TØAåjÎRæÕ–Zˆfæ6v»ÐV›|«À<Ö|q@á°xÏsšÑUùFr8úâ¥ê´%™̓ó¸ôÍsÑ·z„d•+Ã)Á¹Žº]A{†Q\ä,‘ÛjEßnu?ïÌuœ¼o{Båôhü¥Ç~3Ò¥°‰èâ¨ÃÌpÎãzUôËaC‚?/ÖˆŠD¨ ±`8×5 ‘v‚äž•.3‚I¼àT¨¥¿y»ÓÚ´!’G¹Žrvß­=™[çMÜ`gÃ1Û³å Üã­"¾âX²Î9ÿõÐ-Çùi“¹Žî¸&¤Ù1?\ ªí¿¯sŽ”õàä7=:çŠhV-9w,2˜ÎzÓ¸òÀ מJ©"nd™CLü«ÐƒëRGcè8ü*ô(+ónÏUÀëMfÜ ˆ@€Þ‡ò¦‚¡CHáqò÷¦¤eÁ>kàãånžô˜åž—­ý¶úyŠ P ÎNãÆ ?SD^»ŽÊÅŒ‘5å‹“\„+Œm<ZßWEy[æÞ”ùtÐn«R÷ŽsS¹òµÛ6cnŒ¶ÍçÜ¿tí{ÔcN™ôXä±¹Šyйr§ '' Ðtü«fM)fÖWQkÙC 1ùA]§¨õëÞ­Ãimmk0À8Ç«ŒsŸëIE»Ü©VŠK”ƸƒUómï ³ŽàÌsÛù£+ÎAñõ§47ÿÛV÷fȺ,&Tœ¹lœzã·“h‰“r…=ª…õÊZˆ"]Ó\HNÅÈ’}‡½7è‘^ò˜u˜/"·kˆ‚4LªFñžr2qŠ©§ÆTÔ®'f‰¤‘v¬˜ãäéέDW¶W¸·š"R@rT±N ÔvŒñëxïn`'r.Ó”8#¿~}é+Þè«®Vžö2õnîÉŽ[&ktº_ÝEí’>I8êIÍ\ÖìeþÀk+[I–G /ãßþºéã ¡\ìÉÆqÉüê»±j4®Æ$_à\ŸzmXJ³rV[ÑÍyöH`ŠÂçÎ1íÜTCŒr~¿^•V[7ÒaÓìU$˜¤ÂY¥X€Kž½«zÚî ëH¦„³¤ƒräžõ;ü‘’v©Æ99Å _¨½¯+Øæ­ˆƒYÔd6òy#ÚL C‘{uäU}²ÿaiA­¡·“ý&-„•ê~éëÔWT·0¥ÄLàn8 ŸÌR4¬ÈÄg'§<‘G ýµžÇ;u}½¥±¶Iö£¼dÇ @þ´šuÄšuÙhŸi¹o5V3… }1[o+•;"Pã¦óŒþ†•¥1Bã‘ÉxžÔr‹Ú+Z߉ÏÙ[Ê­©Çb-—L*ùÀ”ŽûqOÓ?³ï¢·òA3$F&‡8ÙÇÌÇ×­ta‚:?»êMGyx¶ö²;@C¹Úª¬ ’OÖ‡nWµævH崨➠*;h”\DËæíê%³íõ«še¾–5½AdŽº‘3|ØØ3ß½iè§e¼F0†5 ØpTãÜU›cm5Ó\Äи~ ÆÞÇáö¡q$B Tkyædâ&ò6íbz Þ¾•ZÝô{½#^¶]A-}pËÑE˜ã#k!aÓa*kÐ!¿µ»†fµ•&hœÆøpÛ¸8<j†=^͵OìÕ¹„^ìó ºŸœ.z‘éÍW?`±Ìi%¶Ò¼HŠK8^ù4ý§Xáb·ÒÇ-}§}tìæþÑ{p¢ß%†ÏbØÏáYiïðÂâ]åÔ¡]—‹{fò<í̧¸GOJô¸u.ØGßéÊIáÂüzÑŠe›;`xÀúÐæú <®ö·†5ÝCM¸77:–èÃ*­À €qŒðjüþOx`l°Oe*Ü|ªÉ 68$¶zõé^'ÌÀ»³…à­[È’ÄÈ<´ Cß9îj}¥ÂÇ‘ý«MÔ>øòÂÓìò$„óZÃ$[×k(ÃÁÁúÖÍ®§áûŸX]Å<gФS-¾ÊåmÈä¶°:ñ]üvë<¦;x£‘Æ×!@.¾þ¢®D’'Ê‘mÚ@ Þ•\ï°4ðÕÛh–:Í®š¶™Ó´Ï:ÒöÕ1$ƒæ+ ¡ŒéXßÚÖZA‹ÄÞÕ­õû›BÚ•¿“¹ú|Ó`Ýíî8Î1Í{ZÇ…+´~l¿SPCeg`Ž-¬ „Hxcˆ.ó)÷æ>(²ðÄ ÉÓ&´º†+ˆ'’XØìò€ÌÁO†n?Â…Òt•Ô|E¨Ø#ðÜšNɈm–òÜž3ÁÀÀÏ«zÖߊc7¶2é>Ól¥xî¡–á-æŠI€ËÇ$)5ÙnmÁ’Œà1Š@¬PžÇƒG=ìx÷úð–×SÐÞ5¹-`Õ.­˜4ÑÇÀ`Hû¸ãzšM?OÒ¼c¤'†`bÖÊk›„‚Q™ŽÝ±în››=ú‘šõS q™$J“"ìy=Ï­R·Óì´ä1XÚÁnŽrR–5'׊—WȤ®rº.¿âMWYh/|:Úm‚¡Üò¾ç/Æ=~‚º¨Àf Î{ÒLÞYf`N8È5(.S ÄgéXÉÝíbÖ„ÖñÇÅ}zzÔ9U#h Y–#ÌùܯðÖœƒpëÀëÍK"[™7ëœñÈz×6ÁFvÒcgÛr3Ÿ‘k£¿Ý´“ŒÕnô™òü|“Ï~³‡Ät'h¶Ü‰È ¸ç½L»$|ê{ ®Ÿ,\ÞÍÒ¦B¬¿¼ûäöÍH„€£QŸAÛùÔ¥· }*!òãk¶KÊ¥³Á=}+DfÀ  [$õÅ#3¤e‰%AÇÿ^”V Aä¸ä ІUöù …È! zS°ç%ƒÀBièJ•9XšcÛhçz3½¾þÞ9'Š2cœ†,T§4ÈüÖ/æ2þƒÈ÷©ç8BØã¯7çY7cUañ‰”)åTŒcކœ!gpÂF#“ƒN–6BX.tôªòJWçEmœe˜ò(zjœ¦±µ®îó©ÍçDÛ„êÑ9ßÓŽõkPq-í³OpédÖÄ©Šf òwåzà ØNÓÚîY¾Í Jç÷™PÅ«>t²Mi,L‡LKxKFé&ÀÀœ3Çõ¬ÚêvFq•—b„‘^Ãi§£]ÉÝJÞV9QŽПsSKkyi½›Ï"þ01?)<ž§ëN·3Mö«{ß2ûN…†ITn< ·@9äV´:F“,1G9Ž6Þ˜ß{ÔóÎ?J¤›Ø™MEêAiç›ýrže1„1’ùÙ”'Ò³Ö[õ²Ñ¦]FB×’a \|ÀžšÚ¼²±Q&!•§¾-ÛÌeÝúúT¢é͘™Ö-27îÏb9§ÊÙ ´¿õ±BÎêâÙõ˜¥’Iâ´ÆÆ|n$®Jö-”z¹žå%·x‰”ÜýÒ¸ÔÕ´²µµº¸•cv{‰A²¶sÛרª4XkwQ‹;¿%X˜Ì’–c=I=»Qf·”d›DZýæ©ÜDn~Kˆsj>n@ÛK ºø’Ò9æk*Í‹ù²ÍnÜÛGqk;f1nû×ÄqŒRI¥D÷¦èÜ̲tvã:t8¦â÷jÂÖ·CmRå´UÕmD*ŒàÊ’B“´sëÏëZqO1¼hÚÔ,)õ—=[ÓmgjºtVpðO2!de…˜8'd}*Ü:ziï•!„+0“‰z`ííŠÓ°IAÆëÌϸկm¦Iìé¸H‘ Ì’dà°üý*[Û©%:‚[D³¢Ã³±\’Žˆøzg’ëÊÔ^/6qp…£VØF8çéíVäÑ%74zƒ4Af_/!˜ éëIól;ÓVi•Ry-<³Û"‰#¶ 3«Çµ9õ)†›ßG½ÑTDŽV;Á=³ëÅZ:Víû2{ ä¡ŒK´Œc ª³è2K§C¾-wnâH¦ …\ ß4Úh¦÷îV“Q}3N¼¹]9#xÜ*…ùCŽ™ä™Å:ãP’ëíV3ÚÉíäò0ùSÁ ŽàâVÂå4yîáe—)„A…C¸v'¯´ Ó&™æ-9Xe@\äñž§Öv@ù-ÌÌÏÙÜÛý®I¡Ha`(Tä±[ž™¦C­´Öë{5ÒDe0³_îÁã9<][áÊ£¼Ž?¥s6:kßÚOŽ‚Ñ¯‚F9l6qž‡4ïm'ÞrFÅþ®¶NÅ-åh"‘À\úg¯áU~Ðòø™|ÒŠÛ(½”–ÆL~ÛíQºK¨ŒðºI´Å—#hÈ$Œ~5b=2êâðÉ"A |¢c’zœ—ÔÒ½ØF0Œte˜/‘b†Í£‚L•˜F»¯‘“žÂ¨iº¢ZY*0}u" ¹.};TöpkE ´ËmåÛ©Rùy0>PAøÖgöv­Œ–¦Í^t¹óY„ªARû‰Ê—3Ü¥ëÔÖÔ5{[D• K+€L‚%jôËñWíÙî!GP>ecÜ:絈õK¦¸†;GÊ•ªÝXyô÷«"ßYžÒ -îÌ¢¨6òF ¯cÈÿ ¥+™ºQåZ ˆ`òØç¾*Z"\‘ÀÈõúP\‚|¹ï޾¼ÓI>g$ö¯z³žÂM òÙå`#Q¸–àß5Çi*Õu¹¾Ñi£ÆÚYºhDítŠƒ÷ö•äc¶k£¾´‚xÞIYnêsÇã\¯‡<®èQ¥¯öܦE!‘"ò?zrs´±àß©ôÅTmgqØ“Nñš~·}w¦¥šÛ_4,‘0všO”H$–ªÙÝ\\üH–[=íd·ÒxrÊd#–==¼ªO¥jV·Zª=Õ྅ ‰± ƒƒ“Êð=úÔ–ú/ˆÄ¨\_XFí`Ö{¡GX’CO®?•W»­˜XµgâK©µÈ4ë%íÅ»ÏlÒJ aHzcä<ƒÔÖKøÖòÞÖMIô%6ð]=´¬.†õÄÈyäú޽jΛàïÙjº~¤ú¥Œ“[Û¼2âc0bâŲX•=½ C/ƒµ‡Ð.ôÙ/ôà÷7¦í¥XÜç.® é¸ô§îÕ°ñ̺üú=Ö•öiE©º…¼àÁ×vÜ6óªQøÒâ]×RMhšóì†&¸ù›û¸<ƒùV®…©·ŠŽ·%Å fû3D±·;‰ž»¿JÉÿ„/_ûzlWúy‚ÛRûtÑ÷$gÚØã«õé.@êk\M¯\é¶–̶ÓF·n6¾×æTÇ*3“Èö«º–§=ƒµµ¦™sur!k‚‚Fò7½5sáÍFç]±¾˜ÙÆÖ÷>oÚa ²´DÂWÛžäž;Sµí\Ö5w×°G§½›Cä\3-ÎrûW‡88äàb¦Ñ¾ƒÔ¿7Š"‰49b±º›ûaKC‚«´ù{œ‘ÉÇÒ«†Òõ©Æ›t—šQ"{V‘3€78Æ9ü+6ø‘dž¢‘´¦:!À’A¼(ùOðœçŽjßü"º¼óx¨\Kb#Ö"d‡c?îŽÂ‹¸c‘‚ ç®iû‹AXDñ[I¤Ùj—º=ÄLé´NÊL¬èCÂã''°éZz»¹ow öBÑH`xå]ÈãAÀܤJúðç‰&Ñtâ×}¦¥¥È²ZyÚ#µ6ùò è8­í<ëâÎâ{øôö»hñ p³ì$Õ›žIì8÷¥.^ƒ¶‡'à-7Lž/£ÚZ8þÖDfÀAŒGOjv•{‡µßiæiN•b‘Ü[ûw”[9sÓ<`j}Âþ(ðü÷ëkq¤¼¸kÒ$Œc,yAþ&®/ƒÃhZÅÝÔ¯¨‘$×›B’ÃîasÀ^Ã5nJïQ ›Å×ð BI4ù•,m…ÎÕìpÎ›Š¸p2:ÖºøšC¯iZtšyXuw¸ŽàÜ—j#n=ÇçY°é^#Ô´Û­;\¼²džÚHD¶Ñ¹f,¸ÞÙ»}k¤i¤6±ÛéSÅ3]E.ó?”>@€W”>W¹eÕñ\·zÝå„Zé[k•·žáÝc\Þ}±‚É öªZ_Ž,µz k+¡ÈÍ É*Ê@äJ“Øjͦ•­G®kO{kgýŸ«‡†rd‹l{AQœ€^+/IÓ|Ko¥.ƒ-´:|"KûI™gt.0§dÿúé5 &usîy@`:ú±j7–Þ¥xÆë”м:º%ÝíÚê:…ÃÎ1u6üÏâýU×[G’Pâk—Bµê]Œ¦WÍ\?2ç#¦jiIc*±='гä®ÁÔÓš—±s'UgÒ€-Û<Xмèò±Måf<p+oQc'ŒñïY)»û2m£þZŸý–³‡Ät}‘±#UÚ¹<î©Ð1S† ÜdñUÑt¥€§”vŒ4nÈ%HÇËžsøSA"ÒÉ´–hѱÆwgéR)Þ0ÄmôR\Õv8 D`gƒÁ©"È„¸W±«3&AåÁH¦î•FÌŹPTzàœSÉL1Üõ ÔLŠÈv už¢C¢Ç žHµ9а(ãèÎ*1(ge9ã¹¥ÚIÜxçæÍ±d»æfoÇþµXWM¸ÏQÓ©ÍS‡$ü¿tqœu©ƒs·“Ô/\{Õ¢ fv¨ëÓqëYðË›+½Ò±Ïñ0!1Ø ºÌ7*‘Ý›¨«5Œ #Íã?cÓJMºR|M~껋s“†>ØÎjÔZÕô‰o1ä?»ócÜBx¨,í.æÔ¯¤k&Š;˜Ú3pΪFQ…ÎyÆjÆö‹§ÇÕbÓ’¸'{óÇášI3Šzõ-ÜÏýœË,ÏÅÂŒÐbªÚ_X½ÍÓDÍľdˆT®®1U™nµ{8/j'µ¸9\2ÉŽÓô?:ݼLà£Æd´9á‡òÍ>ff©«4÷.sMó-%óP™×÷R:7ÌIÇOJ¡ ’­üQÕ|ÉL¤¤*ÛSw8uã±ü«4‰×FI¬®ÿÐnG˜‚~èàð9ûÙrägN!·¾ʱ‚üÙîIæ—1¢¢£¢:;û”['inFcM®O·z}•ËfÛK#…Ý iIàV=Ñ;µ8ç·/æÀLRò6û¤öÁÍV[¤K­*éã“ì ncÜÊ@€1ôèißR+ÂßÖÇ[þpSISÕŠŠiZ&É+©ÉÜFßJÂðô&McS½³`¶3²˜Á Øù˜ëMñ í„öínì3 èd”)œŒŒã®)¹ér=çÊŽ’âÚÒþ8ÖxcŸoLÀ~µÄöºV•,ÛQ ¶Œ»`pª£?ÈV&ž©‰™t§Oû7ï|¶-|ýzã5…ñCYEÒ Ðm…Á¹¾tó8ÉÛï› ç=1õ«‡¼EXòi}ü?ñþ»qªÅ©å Ol`Ÿ#€3ƒŽ~¼Ô1Yß gÇ1é^FæÞ&†V~bܬÛF{ŸJ΂ o üEÓ"¶¸»šÚ{/³Î& áæ>qÀ$~Õ¿íûXµ_ÜK<‚+˜-Ï’ÅY–2„ï0­¯¡™§á[ËO|<Òî5MCl3)—Ìœ~bNÑžq‚8ú×S¦k¶Õ·Ÿ¦]%Ä p΄¤zç5ã×¢ÓPÑü{}gs>o []Çl R9 s§¥uþÔ¼1¢5­žcye¥tb·i•œÊª òr'Ò” ·Õk$¶²³”É´ÌÁ[ëƒíRÙ_ÊöÖ€ 5y N;g“\ü×?o]kΖXÚ Â$WÛÀÎO¸ãõ¥µ˜ý£Ã϶XÊ0 ò¶#ãÄ×5õ¹ÙìŸ'+þ´¹ÔɆܬÅIbœŸCÚ ÓcŽÄ´vÆO/'&S»qÆI±¬ÛûJ{ˉÅuå¢G&8ÁóPÈ“4zÜKs òóå´œ„ù3ǨíÚž—¹*œ’q¹¼úÁm]4Ø‚K!™Ý~퇨ükÆúÖ¹ hGU±–É`‹‰VxË<ŒYB…Ásõ«pDë¥*&¢D²„&gAÚy*1nµÏ|X¿²ÁrZKq»y#)á¹€a’iI¶õ2«¯„í<=6¡.‡o&²mM䋽¼¥*ª*¸=ÀÆMMq¬Z%ù°óãóÂå0Üö5‰t9&²´¶Ô`šk„;c‚@ÌP±'t?ï°¤u,@$ç?ÃQÜMû™]ÂŒžsŠñ÷´x?_Ô¡Ô¯‹ÚjN`‘n ¶å°Î¯¥8ǘw=¡Œ¼Ÿl÷¨~Ì‹&örrrw¿…qp.™ñ--ï/ wZcÉ/ŸrÒoeuÁäðpOLW=;ð1Yu¶‘u¶¶Oô¦Ê§œks’6ŽõJŸ˜\õï9™Š vÜ•ÆY¶ÀAwÍyÞ¨Ùø¾-Búâk» ®!·‚kk¦Se0ÁÚS8*ÜqÞ´ü[¨|U£ø~îú[=:ò)%žX¥1™YzG¼`¨ïïG%ض;˜ã` míÉ'šlʘ'9 `ã©5çnÿ`Õt ÙkWŸÙ—’Oºå.I‘ŠV!'QóqÇb¼d=þµÅÛ[C§xN»}oPI5¶M›Úf“ ‘/𓞼ãÛ­dRùüâ™c¿¾†K;¹£·cp ¨‹· _’y$uÏlÓöw ž£!òöýâOqÚ±µýq´[ u³žâWt¦&Pʾ 3ô®Yí¯G‹´Í7ûoVX5>Fœ}££!R qòõíYÓ^êü1ñJÏwsrlî§¶ŠiÎ_bº¸÷?ãMCQ\éåñ]×öRß>‹¨E§I›í1¼r²©6qLÖîŸyöë.RU’9SrÉ ƒÐŠÉ³»¶Óüe}2$Ig’q€G–8ËõÅéžáÿè2M5Š_¼ÅÏ+ U%–0{g zã¥'õZsÔ'™°¶ÁÕ‰öíêiŸm··BÏ·p?1éé\,7:…–µ­h¨ÝOgo§ýªf“tÐ;Æò9õæªÄ·Kià™“ZÔÌÚŠ,W n )V~\ä‘ׯ½%L.zB]ùösMeq·îön|p¤öúÕ»hÞh`š[a ËÆ­${÷ˆØŽT‡ýk‚´KË]/Æ}¶¡z©crY&yËLªaWáÏ=sÉìjYõ;÷Ò|ÖzÒà‘NÁÆ\4,KÈ#ó¡BÂ~G¢ÇˆU‡(}:þUhHª§¥y¿ˆõmÃ^1f»šþ]"P-^ä`áˆ8'5-ÍΧ£k^¸‹W¸¼‹Q¸X.¡¹eepëÑà ¸ëÆ)82ms½¾§·š4¸’ܲ&‹—Üý+ŸÐ|=o Zµ¤÷R[Þ‰rCmbI8 d’›_ñ éÞÕõ &êêÂ>JHaø±ÓHëÅs’ NÞçÃ7ðë··0ß\$wæ?-ól¨ •éJ)ÛRã¡Ú¶0xÖD×—Q†1hßfef’àË÷Xmês’sí\n­©ê¿`ñÓ NñM™^ÒHØƒÊ ³§#&¯\Ü^§Šü< õˤºl®ð;$u † u'yëéU*mj5¹{V×ïά4}'È7ßf7 %Îï.8÷mw’Iúp X·žòK(F¡KvPy« %{dW/t—+ãÍVò=Bå~Ë¥Ã?Ùã ‡Ã9ž3·#ëóuª=äövöþ(¼×.ïRâØ²·V“s¶3…-´œ`ŒRtôФìzqÌñHÉ´K*Ú ì \Ó.¼Ûg{i­ŽÍͼ2ŸCôéX>ñ"ø€LcÓ®íXÇž˜2Ü~GŠé"C#·š¸\ðÙÍc%mÇ{—£C$ŘÇ< ¶ä( ž€S!bŽ€uäu§¹eF9©lËvdß©ù±Œõ&¹M€Ó Là›ÜŒúdÕÓ_?Ë’½2qŠÂ’Ê Ë"%÷soR ãÈšÎ?Õ’Ô"`ˆ¹RöÇf"@ôAéUŸ/k’àŒŒu« P ï½C’ d;°ÜUz’{ÔªðÀžÝH¦!8ëócû½)êwÈéÓ­hfÇ´`0ùô¥3nÒ ýãÝNOåO îzR3•;p¹Æ:Ó1à¹,+ŒÓ„gœ· qQ„ b§<¨ê~µd!<'$¼FhH]A—Cõþz’@ë[6§ÜxWÂ1Ms¶» g†B„I²N7uäÖ·öi;›zÝÛM¤è2.‘f“\D„ÁnÍ…fÏ©>ù¬}RãUÓáMoì±ÜÏ \ÛDáv'Þlœk—¼{‹Aâ½-5K—³´µPJgc,Ÿ,99Ç ïï]L¬!ø|ÆF–TM5˜¹sû¼òO­G³JÅ)ËWÜϳø1±MF_j1éîÇ7 ÁñïŽ ^¼×A}¯ØEáßí±;Ïb# ­ÜÏèã¿åYž ž~é—W{R¶Ì¤ôÚ þ‚¹m:òöÏá«ÝØLlÒ]L‹mуû§”/å’*Ó•7±ká¿Ýkï>tkË;EUhæ¸y™Îp•Ñ"¹Fgu9褕ÆZj‰¯¬%ÔòÒ;vwı°`HÀ*wÍQð´þ2Õ®mõ[»«Q¥] þH#r!_—nsŸSÞ¢P¾¨wèw’ÜImk+[B’L«òGÐjå¯VýtYvió›««‘3C³!0FA#éNñÍíý„®o´›Õ†HY e‰\í €äƒŸ­@ºž» xb÷U×®-îfÞžD6ã ¥ð¡ Ç<ž¼Ôû;õ5§W“¡×ZÎZÑbh–NDN¡JŸ ©cgT20|ôR+ƒ¶Õ½(M+M‘_gt+ˆÊ‚6l×7?‰¼C©¥é¯£Ú½ôÖÏ+yS…Æ7v“ƒíN´ñ ‹Â—:å囥սË[Kkd™CÚ9äÖ—²}‹U%Üé­41µ½û>'Ü cž¾¸f­.•§Äd  ¡G‰,ç95ÏxsÅ·š¥ÍÕÖ˜m&†$—ÌŒ±B­Û$˜U[ÿOgqª›]'íšV>×3J·IUr@ëB¦ïk Ô“[š×z~‰Ù´‰æ‚,›íài¾iÃ9=ø¨`·žhžâÚÙö|±»ª–\× ¨]C®ëÞ Ô×O¸€›¹v¬ê•ò÷ƒÁ9S€k¡¿ñMœ |VÖîélNÛ©-áRžùäGRqOÙÚÖ›{›kimo9òlÑwð]A÷Ïz…t5Q=2Ñÿ4›ûÝ:óÖ²/¼WkéËoiyxº”lðI0TÝ€ 1ªmJÎûÅ6‰6›yo©}€Ìa.<Œ©çxã4ùY&µÎ…a<’Ms§ÛLedi"R\\ŒñïAдs"I&›`ò"*¦èTàƒíX×1Òä¾·†?¶N³£=¼‘BJNüÁ[Œãý+OEÖ-uÛÔìš%@tÁRÇøf“M 3T™]¾w#½…W(þy‘¤ÂöðC!HaÜšj œ ߢŠA”çÓ`žÞ[+¨ÄÉ•d9ùÁõïÞªAám -ÞÒ-ÊdSÄt'vy­Ã;‰EõÏjç­|]i}x!±³Ô$‹¢]ÇlL.W¯Íø`zÕYôbè‘O Ô:mŠOÊ’Ç« Æ0ª²øKAšîYŸG²f–@ò»DöÎyüy¬=;Äz6‹áÕlmoÐÞ:ùeI“{> Á$œÖäZÌW:aÔBÝÁl…Ù–[fY0£$íÆi5$ˆ¼3£5ò_ 2Ñ'‹\‹ü¸3Ž3Ö¨hz^¯R±‚éT’‹(Èãÿ­Y0x¯LÔo4øRòî!}ûr`(®q»ŽFqVî¼Q¥é²ÌŒ×3›eàÁ J°)îåGN½ê­ /Má*ëMK lb6а0¢e|¢AB0Tý*¤~Òb´’É,a’ÖCºUw2yܹbK®hÔ|S`–6óE<“-Êy°ýž3#Hƒ°tä~u©i4W1[Ï9Žh„«ò•È8 œÒ÷’ ™W>ФÓ"´:u¸µŽQ2'*ªøÆ@v*øAü:ÐÎD·hç`dUR¡ˆéß¶MIâýÅçy¤¸h-›d× lï?¡pÈÏoZ¶5Í?ûItæ’QvmÊF"cº1ÜqŽý:ÓJB¾¤RøsIšþÚæK{›eÇ(-•tÎzU9|áöµ’Ñ4â!•÷ÉM"«¶'æÁ¨5è:Ž… וÔ6ó^£’ÝdüÄpð3ŒõéžkKSñ“¡I$7š‚Å!pîü°x¶çbñÔàR÷‡¡RÓÁ~²¸¾ÀdhðÑ$ÓI*ÆGL+;Õ§¬xrÃX€ÿhZ‰Ðè ÆÞªr ŸqU¼M{¦ZxzåõYå†Ñ“l’Á¸¸cåÇNã4ùܺb²ç®A8ÍA¦øCMÒõÚ9mÁXEÅÌ’‹pF@äXš7ˆl4jz Ôo$¶u„GÓÉ1[†f ¡›$6ž¸ÍvSHW)rOÞ;zS•×Rµ9½ Ãsïjº½å›Ý¢Ãö{b8‰’NÅ›p…døŽßEÐuÚÔ­ªÇ¨$Ï/±dƒ* Ú£'¶* !µ½OÇZÎ’|A¨Çagn6ùB@ìäc?¥nEªê:?Š-ô-JèÞZß@ïgs U”2rÈû@ŽAw¡ÞûŽãu?hzœ—W·ÌeºŒ,Þ\î‹(Æ` dÕik úõ'ëÚ¯é¾Ñ´¹ä¸Óôû{y\$¨œ‘ßƒŽ•BÓÅZMõïÙ-®I^,»eIc8b=EEá Í6øj/§¥ÊŸµ³Kö‡-‰ãž¥©¥©wLìà¶©ÃyÆJš5xdºÀã=¿JŠÞF$ {‘šÑˆ†%NXõëœÔjC;¢ë€¸ÉÀ>µ3 Ï o^þ†„Šû„d8ÁnôFü` €0vç¥6F)%_ üJ$‘á`Pù›†7taíNèDÄ.T)ÀÎrNsJC¯Ë»pè¹äÓ0dŒ,‚~ÿJ¢n'IeØèáNî´Ò¸ŠÉáÄqèv‰æ©YHˆaÁë“õ¢? øvúÐÚ¾d Þ_Ëò‚¨lmÈÇ|w­pó:È1ÞËo*¾^}ÅV¢èeÏá ¬?³F—Ù4žaŠ2P3c‚ØëøÓæð¾‘&„4y-_ì*Û¼¨æq·þœ÷+…´¹XÁÊ7Rl'Üœ~5{Xð…Ž¿emd×VvöøØ–ŽxÆÜŒÆ8­ÅŠE²NsžžÕ4g†%ðOsÊû…ŽjEoâ!¬SQ™ü±“#‚…û­ÆHê~¦¨Zø6ÃÃ]ê){ªÜÚ[–4Øä%瀣ïuâ»&yB nµHŽï7ÍŒçÓÛs±W£x>ëVðv¥j¦÷J·¹»i­­Ýw0ˆ…`pyažÝ+±ŸÃ_Ú^ } þö[§‘FÛ¢YNr­Ü`~UÔdžS»ŽzÍ:H ೕAÆÜqOÚ6î á!ð÷ŠâÓM£øec¶$•íðÑŃ“Áå‰Àôç½3Âþ ¿ð½Ô±Gª >s¹í ØûÀç~9®÷ ¤e¾*»$ŒFè¸8ÍÌ4Õ~k:ö¬ÿÚð˜ç˜\[¬îŒ Ú„ã ¸'¦{UÛß ø“Wð½æŸ©j¶­y)ˆÆaˆ¬q…998É'ŠïÙf ÀÎj²y˜Q´I;©ó°Ðàï<)â™aÓµõk1­Ù´Ÿ1M±²8'NyO­§‡õ­¸¤AˆÂƒ‘œäš\özl&yìÚ.½¥Gá{k>;µÒP—‘®7³ÆÊÀÈÆsŸ¥Y¼þÝ_Ç{+YÇhÖ4’Ç‚IV Œä¨#§šî°Î cÀè6ç&¡—{ãã‘Þ…6Àò mCj@N:I¦G)JüØiH0åòÄgÒ£bŒíZµ=î U’ $‰ãŠRÄaŠ r>—ĺN•‘uáÙ0ûî ePI ƒ»zús]úÆb#w*I ¿o\c­LªY¸aÇÀSOK ž]Ž»7‚5FÐnã¼Káv¶?z­7˜TÔ]›êZ•߆e¼—E¸†é¢u[%mÒ÷W=9ç8®•[Ê=J’s»E\lÝÇÚ›“b<’ÒßXƒCð¤gA¼fÓ.7Ï …U+Ü÷Üá[ÞjÔuØgÑ/oíµ Å¼Ö±ï*Çþè謪mArÞù☾[aŒ{€Ž3ëO¾‚<®m÷Jðþ—b-5©ÚÛ¼–—v+‘Îäù-ÛoN¼q]kk𕦻£i×–‘²_ÂRIÒP&T,À/÷xëï] ’b]W’GLý=«>ÛÃV0ø’}užâ[–M¨$`V€AŒã¹?…ÝÆÏ=Ôm5 áöµ¢]Ù´ðGæÉ äR©WVlüÊNì‚yàýk¡ÔÍõŸ‹ôZ->âúìÞÖQl4eаÈ8ã®koÆZ-Þ½á»:ÀÁ—D+4Ù\ƒÁ÷œz֮ޗðhÑImÍàP®`Rã§^})¹iq_$Œ_íl_E¿’òMQ§xÒ°E¸2~£V|aªêë6^¼† ›8äŽHíB¼Ùa+Ws^¦-ЮBüýAzkF‡o–¬YˆËÐÿú¨ç¿@ÐáüM%Î¥à)¡¶Ò¯ZîúÜ@–Æ "yËóÀÏâ8ª÷7Wv~/ðuÔ|ÒÌöwPµ®äGE ™<¼}zW¢‹QÔ -ßò®WWð¯ˆï|Se¬Ú^éȶ*ëRÄç‡\>ì¦Å(˸ns׺6§¦x~£°žâêó[„¶öh$XTJ®Ww…Qõ9¦ê º_o¥Õ¼3u¬YjÁ'·)j²É›˜ÙO§sÆ+Ô°Æ<¥`½ñŒzÔ–ðF&’o,‚Ý[h—8›<ÿÇKö]R]9ï!Óåßq¦Äw¶ÆM§u+šÌ×õ-<ø:ÖKßYA-ü7 ¢Çi>\ˆ]ÙW8$ zâ½RâÚ ÞlP¡“Î9Å@¤‡2Ü®Çó¡L.pÑjÿÙÿå¾{Kç²Õl-£·¹HY•\3d9þ½]À–FŸgT)3Ôžµa­byVV\ã õ¦Ïi@•þéþ•-Üw<—MñE¦“ñ7\Õ® ÔŸ{pÇ"Ú9ĉ´éÛšÒûM׊|U¸-¥³Ó´Øä†Ín#1¼’8Ã9SÑ@®îp[ƒ|¼ágK77Ìä7Óµ7?"’<™#¸Ô|!……œ±êÐÜ#4-¶ãǶj"¯Æ>éàäu©!_-O.yÈÉÀzŒ™ÉS»aÆ3×9§Œ±TàôïH0¬£ËÝ‘Û?ãN-¹#°ÍQì¬ *"ÎT“Oy(O÷¾ùÁ>õt¹‘¾e^= Í"€ìU"lޤýiÜ Z… —á³ÏlƒHÖ«"F²N«BœÖ¡FY•ÙSÓ§'Þ™::*:•äÕFàÙDÈC•d'Œñš±9-¹Ø‚~îÞ”¢Ö-»¤F*y9õ©ÄQ¤|Dà“ÆÁšz2F,NP'¡=? kÉ) ¡HÔu©„ .æçÏQK³-’6¯¦qšZ ±6áî!{u©¤´@࢖lÿzz¨0Ð SvrPýÞ˜9 LLþj§ ÆñùÒ´­¸‡ržNri]Þ–<·hÀ5<ûXùNè:gñ¦!J3¾óê£ úÒIs$)P÷Á9¦:I´a8ܾ´ÜÞÔ4Íx¡pFÓÜð¦Ç+0ù¶®{gŸÊ¥ŽÃræN};{TÄ‘aMÄœ6xÅ+Ø«”ü ·—ËÙÈ÷Ïz‘býæpHÀÉ«S’ß ÏLqØTd*¡Uå}¨¸Šþ_™)-p=¿VnÂù]Ç¥Û{3o+ƒ¸sÿ׫G¹‡<àóßëT™%YKîåHÏš!B['ÐŒŒTÍnB3~ša·PÃc{‘œÑt-褎F,ñ¾ÒÄýîãô"‰QU6€C˜9%¿”ÌøÆæÉíè3ù yQÍ&ÞÜóšÙðUrªvº‘U¤#våVfëÏA“ÿÖ«^S®ì&zÍAä·ñ9n‡½@ª"‰Øîˆä‘К‚_ÞɇRT óŠÑŽØ¨nÎp8¥û2³; q9o©¥rж±€r±…é‚•Y1¢ ²ç¾zûR2°eòá,s—¯Öž‘`…Ì€‘ÜæÄE#y’"ã8϶iþÅFáÑsúÕ¨­áVÊŽGRH¢—ä”–_÷T 拈gf ž¹£-æñÎÁÈÌ;¶2Ùþ%Àyb…ãvrN3Í ^7 îŽíOÄåˆ n¿­Xo˜ì ŒzŒÊ£Š8Ên`˜£­+ˆØÊÀG(æ•c’äå–:ð;SÌé É•áC@bqø ” .B’9ñJý†BÑùDÏ .L¤’Ü qÍ[1«qÀ÷Ç5ÁÔ8ÝÏ>Ô×q 1ü˜9lç#µ1âÿX±Ðgð¦¼\ô#xÇNñ Uyì(MŒÛbfÀÃ{{Ra£ ‰oCÔgÖ­¬GoÌwg©ß²:©Ú“ߥ;ˆ…A;·Ìè¤hâ1|Ò¤äz’=jض×a¸ã¶*6¶¢(ÜHÏ4îo*8Ú­¸Óñ©N»†}1PùF,lPztlb¥óFH1Ïj;¡b¼¥Õ[s`ôë’j´²2’¥ÿÅZi‰p=OÍíU§P™Æ¸äš.RL§#–;ƒ€UIŽTÄ€µ+nÏîy5DE& –$tõÅ+š$F–­),~Ç¥yÌÚïˆâÒuCûJm'Uò IÄ˹ =Ì}ëÓ¥Œ½»DÄî…C§TÈëøu®6Ëᥨ±Ô-/uFéofYÙ•ü²w8ÎIïŸAÅ]9E|@îö,jmu/ˆ5ÛAªÝÃi sŽA”ûœeOügêk#SÕ/ôÝ/Âòjw‹§½œBê[I³ ‚•i9ÉRq‘žk²ºð&“¨M÷fæI#´û&vË é»Ôä“Q\|4Ñ.lVŸP†5ˆEò\o È'x9 ž=;U)Å £KÁäMá«;©XJ…Ùiq¸ñƒÏ9ô­ÕŽdL˜ð:žüÔ6“m¡é6ºm‚¶·]ª:ž¹$žäœœÖ’¸U=^+'5r@¼…ƒp¹êx⥚]ñ ØqSJІÇ5JvXþERF1YÍ«CVcj±ÝIÀZƒJ$Ã:¯_3#?AO½bP±ž>‚£ÒpÂnz?ô¬i¿xè—ÀT‹ Ùã8ÝÚ­ ®íÍÏoÿUQ‰K°ÞK>2:ñíR¨q!i¦V˜#ß5¢Z„‹Á—vÞ¾ƒ ©®Ý¥ŽÓÁõ |0Û.Op¤€*}ê#m² ôŽJ£6M”Sè;Uv ­ò¡ËŸ˜¨àR*üÜçwý)6à,0½ŒÓ±$h”úç¥J‹Œg¼Â 1_¿‚OfãôïOI\®Ù=8“Jåódsߎ‚®Yϵ‹(aü$`þ"ªÆ€¾< „œÞ¥Œ2ÉÀmàòUEêL‘$Ê";]‰ÏB&…,ë¸UÎzóK)&MÛB`t©¡T#ÆÞwdç5L‘w c— Þ¤ô —ÏÊÊU»ŒƕԂ 0ŽJ®j)cp vÜ£Ä? tW|à"Çç¿:™rUË8ÀÉ5YbòÐmM9r¯Â)÷Ï&€±os$väÒ¡ fÛŽ­M #(9ÓÕY×k"íÏ=iŠÄrYÇ#eËãÚjH³:ì'ó§ü]€+þÞ1“LÁÇ™órKzzRóï5‹/bqÏÿZ´µæ=ý*Ó#’ êÛ¾e#Œ*D“ƒ¹FÞ½’Ð¥[s·ñdTX2´žqî*ÁùÐìnÀæ›’U”œt¡€©»8¯=²:rBF£ù‡ úS×;Ahé‚9¨¦“vvÉ8ÀRC¸G–#o\´ÕÜÍÌJ#é‘ßó¦´€Ø;F>ù§);w(É#‚iŒVwØÊ£J–ßz†2… Ø(þuºƒÀ-ÙOZ_ñ’§©ÏÄ&øUÿ„rHÏô§rF~E»œŠ©ÖPK`g©ÿëTÛAê ㌎jGaÒF]¹ù“û¾¾Ô À€P’:Ž?Jì ‘…ÁÀ¡ÚlST}»rØàc§ãR€øät˜\†Á®:çš2ò~R0¢â"gQã$ãµ; è ÛÁàö |Ë“¡¸íšvCd‡]§§i\b“ÀPX{ŽÿãC41”‡’äôýsBaBüÙ=ý©cTy…*sÎE‰ Äø>Ôâ«´’õ ùb™SÖ•Éœþ©ˆ`es…9“RÆ 7ð¤*w G°Æ*HÉü…!6?ƒÒ˜C;'–DAnê{ŒS™€ä°›¶¨Z®ö&ÀNNÑÓÔž´žf2:w¤vÀõ4ß0?>=MEÇ`%Jõ<ŸZŒ„ ˜'Ö‡“$Œà~Õ8%ÛÓžô2Ò"ž$uÛ"eIù¹ÿ9ªò°Ï?*ú{{Ó¼à ÆÌÀò[ŽþõHÏ7Ú$ )"óϦ;“D>cHÄ*_åQ8tÍ!-’°jkVPG'¦O?Z–ÊCÕUþW%fxç¶jä1„F1ž»˜–Î)±'…ÇÞoð« Ãypp1‚~]£}ižj§ÞϨÎFjÀÜpX¡qÇj¬T™” ôÏ÷¹©ö’ÙdŠheÂ…ÛÉÀÈó3ÇAòäÔLAÏ>Ù lU8è$µ&$XûCg7qÀàãß­)™H_—¸&ªÆrì2àv uüjqÙ²ç ã4Bí¹›…lãð©q’ ~ǵE±V‹œ©Ç½Jû,ÿæ2@Ág9M!•bÀ{zTKÀ`ÊÌsËfš Â3å–àŒ}h 2+ä«ü­Šg’œ9Éþ´Æ™TŸ›=ô©B¡p['áOóÿ ‰ˆG`¹g$qùÕ¨Ô,_($c‚Æ‘LpÈ ©É)70ue'i8ÏSõ¤R #F: %`í\v8¤Ù=EÈó-»#ñ41e@s‘ÅD6ªå‰ñׯ½ ̲m%Ypp@éíBòª’/ÝÝ“Ðþ’î«/Ê 霚ŒÏ ܤ-0Iæ q“ƒØTìw‘†/“ÜPÙ,i8ÏaRã9ÀÉûS³óµ~)~P£ Ï ¢Áq@²G°÷¥Aáy 0'!³ÐSÒ!ÉÇãL–5cQʘñéPH²}¢2#ÞŠF@ä©ìÕmÀÀ^FxÈ£GÊÍéŠૹ‰Àã¾:Òî`ÃŽù4™|Ø郚a`Ç O=€é@‰–হ {ëP;–r¿0ÀAÇÿ®š®ŒÅN9>´›)!ቌq´Òs ;’)…†~f`zuëO\‰å};RŽÅŽÜ=Fj‘¶€FßaÍHò! ‡cú «,¹n ÔúQr‘?¼ c$u œ~u†$ r½#JÙ]Ç•0rYø=xR¹BÚ¤žHèH§|Ûy-×)±¦ï¾J“Ï¿åVf sú⥔>8ئH>ƒŸ½Wb‰P7'“ŒcùUe,IL9ç×ñ©Ñݾa’O<ô\M„Ü@8ÏøPÊâEé·ø½5bË3çñNžÃ'’¤ÐHÉX|ÌFy  ÷{ô©³·Ü棑¶ðÀ“èC]Aȱè¥s–9'œJµŽ3Œsžj³¦á–ʨ÷©i#ø¸8ÇçUô‚7܃þÎ2zUDäõÈëU4Î%œ9”~#gð2¬c÷™@«j¤mÜÜÚª)Q ƒÈäÿúêÜdve°TÕ¡H³ç*¶vÇËÖžˆŠ¬ø ïÎMGÛ”®=MH`,Ç,ÄqéZ+±¯ E˜î'#'&ˆæÎK“ø¯&‚¹-·Ë|žr9üh!•†v’_J/ ‚%#sKå¿‹·°©âÙ»0ÄòMA–+‚ÊG·oëS*•ÉtÜÀ#¡¦˜‰F1œ±ý#±’Äcµ4º2|›0¿ÞóLY‰ œî=28?áO¨ `ªWæ#¾jA¹”sòŽÞ†˜¸•$vÓÎCçh϶rhBbe¹Ã3p¹+Ë*=:Šj·ù„sŒõ4¥—ì~lT!àÈSŒ ê:þ”`‚2±+s’[šf#v,OLtÍ!h-ÚÌrÙÉϵJS'k–cõ¦n'(Èî3ǰ¥\ ‘¸±t¦òYO8ëNh¸ Ø,§,Ý=êhÂÆ»X¹ã 9À¨Ig}›¶ð8øU”–$êG™¡1nMÌÊH=r£œÒ¬Í*ûŽ8#ëIÆs·/ÔBÇ–Cg×Ö‹ƒJ« ‹×«=©Ì¬f ŽìM#¥€^OQšÒ£s`ájlV¼ J0Ç®?Zr«œOñß•+¸óFrB:0²!@îOZ‘†F c¿Z@0·qœ’åOဪ©ç1RcŽ3H§sóÛ§¤`Ø,cÚ:ƒH¡pøP‚zu>¼t⇚W™PCº6/‘úÔ˜$— *úžâœ[p®j¥‡?t#µ” àqþM=‘ £¥—ƒƒÚ•ÉQ·œžÙ€¬êß#¤jÝñÞ¶RF"Ø¡rw{þ5ck/ÌÌ2aÒš«ûÆËü½qß4Y\w-¬W˜åXŒ‚2¿Ö–(£µAp©œd“üêl ¯$œõ£`b~SíŽ)ŠáB!‰ê2y4ï4í#pÈàô4Š¢\7—בÍH±. qÐÀ¦MÆ eÏÐb¤PG9É)1ûÂ8ÆM!û¼dt CDء¿b})XÊ_h ‚)v¡P¥AŒ3øÒ ”÷¥° /ÒœGž i8RIàö§Ió`ã''©ïK†!ˆI•²³•`; ŒcéQ“ž~ñëèõ#pÙ î $þU]Ò"Ø2»»3I±¢9e#$áÔŒíÛÖª™d¾È£¡ ÅMpÀ±ÀRxýz¨«£3+tç$Ò¹i áƒ7'°Ô±á±Ž=…56¯¨$g©‚>!* Üg4ºŒ|PçÌÁÏ¥H€!ÜìH=­7Ëg\Á‡O›¥$*4j0Çp^Gøq@Þùlçãš°¨ eFTwÍAr¹ÆO$Tþœ:‘Þ’ª©'oÝ\täš§ëÖ˜±Q»nàr:SþBÀ°ç”ÄJc·cFܱÚv(êzgÞ”ÆôÎÑÔô¨òÊX+z©Î)ˆ{•m'„ŠË¡]¬'§$Ôˆg<®z±äS3 `…_å@‡†nxf=XTæ/˼ž­Ö…Ü~QŸni‹¹2î›±üY ‚AݹF:ƒÖ¸ ç§ü¹¨ãžG,| ¦p?:q`Ìäf˜òØ·Þ]½0O2láz¨ÏåG˜ÍJàzñ@UÎõß“œÓ4¬!ÁY›€@þU&NNÆÃzÿZ„0 ©ÀP@ÆO?=UNÆ+ž¼Ð€ÈFÖfÝÎGz—î©ÂAî1€X§×ãúR³lî»`t?0 ®K뺉  äæ”–?yG·Cõ£ƒÁ+:(9¤"X倰èií*Ê£FFsU¾PÃåmǾx§æ)ÜØl ¤ô‰UþCÓŸâ8íPººª£q9sO6îöéçF›æ`ØæãIf’Q´á&¬#«¢Ì@ç¦)¨Æ…€õ©A^S“ê:}i%aî?#†'¨¡€îžÇ¢ËŒ‚À¨àqùRœž„çО”GaË1Î .0’8ÎjE+,dût¨ÕÜ߈Ÿjaä Hä`ñRƤ³(Ç#=yúR3ƒŽNhIQ&V';OaÇÒ„ì,qF¨TF3žqßñïNÀÜ@g¯½2òò8.c³ûç‡ñü©ê±»pÙ :ôÅ $ÃÔ J•Ï`£µ<0‰\1ç=i˜T$òséH¤,Ø,zAH ª²äž2NôÀñ´®²@ÉÉäR¬›œSŒý3R3€B6tÚ:Óªp€N=)èK¿¨P¿"’½AÝÁ5"¹fÉq€ë@¬u;×<¯õéåÉj=FÀÍÿâ¤Û ~?á@XMÿÞ#o®:ÓX–|íHX±ÁàQÍ4àƒ¼3¤ôý) ÅNv…ì{Ó˜ãæbWëQ4Ãå'Žø4#<{ô vc'óe…„Ncb8~ÀÔ‘<Ž©æmGÇÌ£š q¸ŒõÉ4ŒUP—ÉnzsŠV+¡,ÒVÜÀá­SšMñ~UéNgÌ„ìëžqÖ©ÊÁÇpö4˜Ò#ï?uIäGCQž€±ÆOjqm©å„ ž=é …\’7žs×Ò¤¡Ñï Ìq·=jMÌŠv±4‘Ç–,ØÍ<Jî;¹'\,`’YƒF9ëN\²d)¹îi –à.F{œSÑT;;6ê=Muì ¸Ï½+H °ÇC€1P>ì«ÆCšxÃ6Ö`OZW‹+ Ï®´±Å˜2:Ô1¯Ê7 qÓ=)ûöç ŽÝ(LM Ììè¤ ½Î3O,@ÜG·¸  H >BçwRÞü)ʸ†,yÅG™7‚ÀÿË@3­<«o;™sÜñùq@‡ó€sÁ4å'q;¸ëÏþµWŠB$eÆà:3J‘wî  G$ŒÅ@ùI÷4‚L)n€KÒ#3œñŽ˜¥Uq€WsœîÆ(`=J¼7Œ€Ã…¡Yw¯(@#9¡\n!È €GëJÒœnUäzPŽXAp SŽŒ|Þ¹¢Üvçæ<¥RÌXä3‚6ôüiÜCÐe˵±ÒœòAÚùãLBH$.9ä´åòñן`  D„:`Ã֎¢¼díÀì)€1 °$òzP3·!·zsMrÙ²N1Zh48*?Ï5JÎvʞܜŠÑUŒ.Ö'è+h«Žm U  ‡ì L°/$Äã¯Z¤ŽËB¨å‰(Šx®d%å\n;qɪ"ú\Ic}ª ñ뎃֟>ö(Øb*{¸®CV] g'ƒœÿ…J&(Nc?ï ÖÃÔûTçww¥L0ýÞzàqõªr…£aŸ=ºU2 ¼8ÆáÜÓD´ ¹Ø&ÕàgéøÐ[#9åN¿ã@*rW œä’(eÎÜ‘Ë}*‰ dw ~TÉ"i¢’5S‡R2[šV1’˜ÃÔsÇáB '€#‚)Ü[:‘.ƒg$Wt$”º—^WäÓŒ’J¨]Üg=j/‘ˆPŒç‚qR¢…À“EÀ^J(s׎õ Y0U@àÚ˜¸é’OROaHYPƒ’ÀôÁà{Ób%19rBõãƒLÁ »×‘ÇÒ‘äcÉ\a{¥6iÀU÷pqÉcøv÷¥ î$’1ÓžiŸ¼#”0¸¥qØÕ€l•äOLÔD³7'bwç­H<¤œŒŒ½1¶íÎO#ò¢à#nÇû8â£FTd¿Þ93R•êN8ëÓxÃ;}Ðq–n>œÐá!¨#‚G©¥dg©£A·,Ù+ž o-€$9 ëÞÉT)N  ÷©‰~ï:Uh†³Éè­YFè[n= L8f (ãß½F¡žg ØUîiùRFÜ|Ñ0ûÄ“–Å.àÙ*£uÇjI“»sØ…9TvÆj¾dîў‡­'`±`HI#uäÿZz…vd@:œâ¡,Ã!pG|ÿ*F;IÞ¹Éìh@Å“oÚ•U†Â8 Ï?Zs¹ÏÊ@8"ƒ°.â£qè3Ud'bç®1Ø™¤ÙbON03ô ̘fǸ¥).œ0ÜÒ Oz†4E:y'…eL»XÛÖµdäà'9¬Ë¬m'ß½d÷6ˆåTlQµqК•€Ú :ƒšfåçÇ'4å °Ï×I 9ãä{šWëò°#ëN$€3Ð٤܄ôçžÝ¾´¯ ¼VüF…}rsŸÌÔ¡g89?tq‘ü4ãì=Gzõ0`¹É¹ÉÈçµiÅ3rĨ p1N:m³c1sØî#‘©#··BŒœ»˜ÿZ rL±–Æâ3ŽÞ´åO›™P1P.å„eOp5.Pñån$d+Ö™ ˜Æì¢†© œþ4ªƒi=ÇîB®Õ*z “øÐ$qòf#“ÆM"l4¨ÎC6sÕ»ÓТpÝztüxÕÀÈ÷u;¹ôŠ‚ œç‘Ö©•òNôõüè1ÆÌ>O¯¥1@ÜHàŸïÍJ ¬Ž}1A"0U?0xÀSÖžÛt'Žžµb5…UAÚ¹ù±ýÚG@¤l`AôîdŒ±ÉÛÏN¥Jã A¦iU°ÙR¨@ÁÏô¤ ë°óßµÊä§ 9âš%ÌKž8'i~4åR@W¹o,¿»€qÏJwv`gÎ ÜF)$Väï\ã‚y¥1’Ã1äû7Z6í;Ê Ò—Pæ@xÇ<}h‚l‰—oO”tô¤Aæ®D[©iÇïW*:â€, “ÄSßœ¦W< riD€m8øàûf¤DÉ'ۥȧ,aòÓÉÆJ㈋!dáG¨«R¦r@Ç?áQ¹P1ŒƒÔvü¨}Áj"«®v©ÁÆy ³*àqèj8áå–RËžTû Ø`1×<`2|ÛÙNHÁšU!Ÿ úM*Ϥ¹ëGîú…ù‰õ¤†Ü  p2wi<õæš[oã$R†Ü¬¹#¶:P9"HíUlÓÿ×HÊLñŒ €Xž1N’‘·8'o9=¨B ô–þ‚³iÜÖ*Æèc¿ã53³ÜzQEt˜’Üӥã=袘º•˜aÁ4âIˆ¶y¢ŠEwŽ{T¡™c (¢æà󚉉 O÷ºÑE9rFKOcŒT霃ØQEÄ$”g$ätâž§÷Aˆ'¥U2HÒFd9Ç–)ZEpÄQECâ@çæÎÓÆj]Ìí¹˜ž3ƒÒŠ(ê!ûŠ`ŒgøÆâr‡=:QE1ã >R¹<štÇ€¡€‡Š(¤ÆN"Q* È'9æ«»p÷±EyÈ*73ÒžWp's tÁ¢Š¦!«’¬I$Šœ1¿(Î;ýh¢È¥s°`(ÉÁ¤û»›¸ïE0ˆ¶çÌG-Ž? q‘”©ÜyìOŠ*D,ŽTÀ6"K Ït¢Šldý€8?6:PãæcÜqE!ÌJ3`“Œžib;œçžMP1Y@m ’£$Ñ&s´CE/p"ˆnnzƒ€{ÓºHG'Œäžh¢©€Ã#*3ƒÍD˜)'ælä÷¢ŠŽ¥ ,~Ш09' TªY€bÄ’ íECÎV$ “×ÔÆv.rz (¦ö$„LÌvmÁ8Sшó1Œ0(¢¡Ã0s†#†n=i2Ï31ÜWq#Š( ¡ñNÒÌBŽæœrdPIÁäŠ( Cp7~iS.9'¡¢Š#’ÎO”ßH £ëõ¢Š—¸Ä)æ€ÌÍœðàsVbEF#ã9'š(¤a“³,L ñ*&éƒÏÊŠ(|•;W¥6I_j.xÁ¢Š ".Øõ¨ÒwÁüh¢’»ÊŇOOÖ–i^6}¬xéžÔQC)ó]J»\¶ãžýë6óR¸Š6(@'ÚŠ* QÆë"¿µfÈß)ûËš‹áέ}¨ø¦÷íW KFe^S½y×Wt"½›ÐçmÜÿÙleptonica-1.70/prog/chars-16.tif0000444000175000017500000000774212226572724014525 0ustar dandanII*$& 4¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈxè†HgÉ‹òÐ@ðl´Óò”+²%ä:ˆ+ð$“d6Ý" S!¶ä5hCV„ †R‚ ŽADÈcÈeL†¬ð^¬jT›ƒÂaÁ a×R¡£l:N’mRá°Pƒ ¥„ G 0ŽX@Ò ªzÙ‘ëA¦Ÿ„ ƒaõÂ9m'¤mô›OÒl4|Úá¤é7þ‚íªN’M§I-„}g†áýI7Wþ–é'¥´þœ ¸A´¬À))°Ñ]_®’úm§ºIn Ié´]tU6•þ¿¯K¤­†×®O_ékûýkþ½uaŠ'i+cíî—¥Òé_¯_õ­.ÿë_õ¤¿ÿ×ý}*l:_ïZ^–¿¿ÿÿZZêA®õÿô½.½ÿ[¤¼#7úÿÿÖë½È) U­$Ø#ê:[xú^Õ¯ù ¨ýÕ]$¼%þ’ú¯_á>ûªÒ§Ò_ª¯%õL4¿ï÷UˆKm_ÿëàªÚWþC*È—{iUn½/Õ*ô“ -z_o´•¯ÿ¤\]ý0Ð_ïò… B¬…]ÿô’ö¡V)¿ë¨ƒ % ¯ú_©—:ç†ð0õöµd¸2$Õn ÿI5áÓVkã[ B9ÈZüt¿«®ƒq0M+µõà "Ò°gÿþ”¸Ú]h|#˜l0¥¿ƒxA¤Þ?¥úˆmqn›IbþCST‚8Ý;ÿÿAºÞµH;_e—oH6·ù±2 ‰Òý-n’ ´—øt’µoý/ô›¯­UÁ…ÿ·Ótßÿþ–»ïTØÿî’ý×ê—ZN„† ŸI^º ±dKß§Vÿ xK¯ô¿õ­zÿIot¿ŸÒ×úW¬ÿÛÿïÒÞ½}ô¿m/Ò×JˆiwëõôC)ÿûm'¯ëH†˜ÿ¿^—Kô—ñþ—ô¾AC×KÒZÿÿµkïé6—¥}zäpC.?ÒK¦ßò ±Ýiu·êº¥„ÂþÚÛðR–ºWúOI7Iw~ºIul7­SÞ´ˆbz]ÕÿH/þô·V Š?ú¥~†Ú[i:I6©j½^’WL0‡ý{¥¬4®ÂMÒé·zXz[a&&Úm-t›I°Â ; 6–ÚAÕ/(à‚H1  ×ôûi̱D4Ä1 °’L4Am5àÄVL&þÖÅ|.°ÅËž""A­ `«¡HR !`„0ƒCÈwZÄDD­/mRÿªKÛI~’îÒKÅ´¨w¤¶Ò´¶ÒݬGÿÿÿÿÿÿÿ h ÜàË¡ o©@( àÚÃX‚!µ Ç Iy°i™T&C]!  „4 j À¡µ6 ‚`A !A¬2dÁ Tˆ‚`€h&T 00†* õÆ„1VA}2 æC!—ÄÁ!¬ŸƒІfÿÿ[Á80ÿúàŸixL vCi #@ò ÐBA¨ ‚ƒƒÈ™!—2s!—4|2ÌÁQÌÀÃ!›ˆøPÈ4œ‹D|(dNE:<&ˆl¡ Ð hä6fŽw_a³áÁ`ìð0™à^ vši¦¡4é6ÐA a°@Úl9ðöšjšº ^‰¤Í‚…Í“ø0íÁ°wðøtý.÷ÐA·mÛI¦·}¿\=øIh Ú0ýÐO†þ“_ú^·¤ÞÚMî“ÿý?ÚN—ôè&×m&¶ÿÒý.ûÒot›ÛKë÷û¦ÕºÒöÒ ß¥íÿ¥ÿézÞ“}¤ßÿÿiZ«Õ¤©ii:0»¥ïþ—ÿ„»˜Y„ôŸtŸt¿ÿÿm'KKÝß^ßú_þ—0«ïÓMþÿût÷ZMýc­¥úûxâ¿þ—Ý{zß­úÿþº0»~–¹ €ÊâÓïõÿ×ÿ ½×ï§õÄq÷þÕ´›¡K Hƒók}(÷ê?ú_uíëýÿukúN©aaÒ‚fîŸë¯ý/uöþÿ¿ÿÕé麴’ÂÁ­#ÍÿzKþ¿ú_uíêý+é_í×ß«Õd» ì &Òÿ »äÿKÝ}úõ¯ÿõÒÕ´­%Ó ÃT’ïKÛÿ¯ý/ºûûë½+ýê÷¦éÕ-Auï¥è*ÿÿÿKßöÿÿé‡ýî·é7Iv ÃKJ½ð’ÿúÿé}¥íêúJúPÿ×§V;J¼ ƒ $’õ¸`ÿÿé{þßú_„™Ô¾ÝÓëáA L0Òÿ§ˆë¯è/´½ÿÒü$È€lþºÝ5i%´X`ÒÕ~àÿŽ?ý?ïü%ùˆ`ÿzº}·I- ‚à .«Iç‚ÿÿÅþ—·þYÁ0ÿ½×^ô±,i~—x7ÿóÁ—ø~ßíÿ°_¸aÿ¯WVÅV! :×ÒöÿžÏÿùíþ¾ßøþÙ ¡½{û®A†—I{íÿ¾ÿþß·^ßÿíW×û[_OKa×é-ïõ¾ÿþßëÿÿ[SGïOMª6›IpƒkÿOÝÿÿÿ·í×·Ýwöþÿé/K„¯T½ýìƒz¿öÿ_oÿöÃþë¥}7×k¿Uûõþ÷ÿ·í×·¿¿¶ÿõï­ëà ú¥þ8ä3'ÿ·úû~—¥¿ýí®’O¥† žßTl3þõûÿ·í×ýýý¿î—W¤Þ–a·ÑuJŸß¯ÿý¿×Ûßÿoþÿ¾°Ã!ª&&¶ÒÐKïÿíûuíú[Ößû¥¥ªO®xA m¥¥Oï¥÷ÿíþ¾ßkÿ¥÷Ý%zDFxA[Ä"v·ÕënûþÞACí×·½o[d Å{ûéV NL%¯Vúÿÿöõÿï´»KoûÝ*ô›ÒðÂlF•þôµÛÿöÿŠ÷Û÷öô·_ؤ¯¯ xj@a„K´»ÒoKöÿý¿ßÛÝ-´¿û¦*µ}|þ† I¶•?Má.»ÿöÿ¯c´»KoK×~›ÒôÔ0 a„–õa.ú_·ÿì=-ÿm-´¶î»KÝ+Ò]h0 6Òü$à a-pÃÿöÿýØim¥·im…j©_Kü6‚à VðIƒ”ƒŸ[a­ÝöÚ­µî+a ®ì%lKô¯ ¾<-ƒ *hB hBCV *ªêÜk¦›°a% 0I[ƒ 'î­¦‡¾AˆD jAŠÂ0‚ƒP¡!Ð ‚!â‚õ4CŒ õ;ˆfˆb Ñ B Ö04ÓT 0d2Ä.Õ„Ðaz%ÁT)V¼ÿî¿øaa…¸aa…ýŽ" Áˆ3¨d†ƒPdB"."! ¦ˆ0B/ÄDt„G‚¼ˆXF€m ªè>¨ zZÒFÔÐi¤@˜ƒÒ.ÐQ¨iP5¥$3‘ ¢¡»ð‡ÿÿÿÿÿÿòáϦ¹ ‘`à¯8çd[ «d a›d5,†¥þC!Ay<6ü)ÔÈ ³ Û0–ÃÙ˜4HiàHá®… ´AH!— µ·Âu¯]4ýêÔ÷<99îM2ø†ßVþê—¤?ú÷ý¯¯ÿÿèâ×¥Ó^@Ìãÿê×ý¦¼/ÿ«þ¸…ÿô­/ÿ¯þ÷ýÿý+_ÿÿþ›ÿÿÿõ×ÿÿÿ¦ÿÿÿý]/ÿÿþ®†¥2/l™ /ÈiþCR™)Ô‚qÈf¹O!§¦C^„4àŽdhIÈeÁ. \ù§!žg‚àŽ6¹L ¿^Er+#ˆbÿý\A‚@ð@ðAá× c‚ ÁB(@Á ¬Hfp,qz¬… †±ÇÿÕ„ô„0Žhê “<ôÈA èÒÈhB A¹ „pƒ Ý ¡Î…FÇF y €f€@Á(0›‚ a/ÿ«§¦„lp‚ …&=?Ð/ žš7 Â85¨H4Úi…°Òh50_ÿVŠôl˜A tœ*µ£dÈey ²ý6Ãd z6M&ÈôlšéÂ#Ècޞݴž¿ÿÕè>‚ ¤'JåãÁ–ž!;¾–ĈN“nÂAÝR}ßõ¦þ´¿ý+Þ!6–t›Ÿ ¤ÿ¥ÓON­ÅK‰sJä ÷¶“v®“­%ÿôôÝ=kþ“Ó ºiºm'¦×§ÿÿZ´ºÒÿõ¿õt´¿ëý.«¯¿®‡ÿºýºoê·þ››ÿÛ×ßô½ßtž›_±ýÕÑ„Òt´…W² <@‡ý_ô…-ÿð—ÿÿ¥ÕÿÕÿi^•niÿVûÿÿÿè/ÿïïöצéºt’Ka i~"@ðW§¯ÿÿú_þ¿þʯþ뫤Xa ×òÕ§ëÉÄýÅÿþþ¿5g›­½6A¥ù €Ì¡»ÿ¿þÿÿÿö÷][IõI‡„’ Wáÿ•béÏ'ÿÿÿ·ÿO^ï¤Þ’@×áÿùàÛÚ_ûÿý~ þÚÚ·Wi$ýPkô¾¿öëÿoÿÿÿ ÿ×ë~•þ_¥ÿþà íÿÿÿäý¿K¥n¿V‡ÿû¿Ã¿öÿþþ¯È*Oý&öôcz¥øþ—¥ÿƒÿ·ÿýkøïëT›zKÿÿÝûåÃkþßÿ¿×ä3!ÿtµz[µKÿÿ«½ð—þßÿëíÿúûö©?¤Cÿúëëz_ûÿu¥ÿþÚÅt•·_ÿÿÓm¯¯þßÿ¿­¯×kÖÇMê’ÿý…Òí[×ÿoÿí+¦×ÿXÚÒmŠKÿûFÐM¶Œ,2úûþÝZ µí+$;h¿ki}*ÿö †“ ‡†Øa.UûÿÛJÂPÂ6¿ÚpÂ_ZM´¿ÿÅp °¬B¶5†¶º°kk­¶”4µ´˜¦+Vôý©8g0…1µ$tC=M^¹@`Öä­È%d1Y«”šÂÆ”B d3§†TÔ 3S´ AèþÂ馃Xamÿì.¿Ø…<“ âškzéÚÿü44 `ƒB!Y2`@ÂÄ Ðaâ8ãõB""!xŽ#ˆˆˆ×þAÿÿ¼$ÿ×þ“þ¿ùÆ%ÿÿþ—_Oúþ¶—ã×õü0¾¾­¥£ géWÓiê@ðj€Œ§t«ÒÛI/ f oö—öÛ %ñá†D w A¥†!12õÂÁšà¬µˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ@ ‹‹ÒÚ(ÀÀleptonica-1.70/prog/patent.png0000444000175000017500000022427611327154514014473 0ustar dandan‰PNG  IHDR  P"J—å pHYs.#.#x¥?v IDATxœìÝÏ#9~(xª£^G=l¡¢ ¬ÛpM²Œ9¼£{``§#'ÛØƒû'¸9øèjÌa²ñr“J˰¼Øqëù6£õ/xo¬1²ü:|Œ°7ÎЄ1ÚÃÃõ´pRH&¹ß/!…2¥¤2¥¬RVó[Ý©_¡ˆ"$ƒdÂä]¯ÀþG òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òF òÆþI&_ø÷ŠÀ“WöIùœIûþü‘à“ÚãÒŒdñÚ~\¾oçsŸTÓ•“±u+ˆQ DhU"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o"o¢ÇÈÈÈÈÈÈÈïyc"#©1]£8¼nà›š«Ä>FÛ/ë%¼ËDu˜(iÆ™QÌŒ4!ŠpB¸â“B’†‘Ûoàã&Ò±H“ÌFÓѤ! #ö§bf"ÉáÛ~É#'JÌxbºͺSCh"‘Hò±4mE Á·ý’ÇMd,ѰЌNLf4SfR¨.à™âmd’mûŸhdÆ…¦TØÔúÊLÇúÀÌÌÿLJ@dâ!¤P[Æ{A40Tj¤¹4Åý-31ÿÆ»‰Î]dæ€IÍ@ˆÎ ýˆÁÛ[Æã'ʱDx·wÆh›©ùeIdqÓ1Ϙ<æxN. *Ìߢ2€HPGtÄÍÀ̉šŽ( DH””D–Ç ap´["È7i¾íw<~"•D)ÿ:‚ì7™vDŠºbÛVñø‰)‰š¬?²DÜdJñAÖZmýŸÈf‰^Ú‘Æôp¿^)žiÖ‚­“[Ç{@Ô¢–ès“t%‡´ö›.l°I ímã= Ê“’¨ÛUH(Ý)”ô•M®§[Ç{@$ã’¨Ó…ì#C”Þ…âB`³’[Æ{@¤+¢ NbšÙüõXqù ˆ"Ìl–‰ÞQN"ƒ%ý¶9ßú;Þ¢vˆ# C"ièlëïx/ˆl1vb‰ ÁîAæqAĶþŽGO4|cËD ó×ð8A¢í˨c‰l•ÚÌdC¬™Õü\€h„D “¦íâñHÒ‰4ÃLs 9G8!QDñlûSÚ#'j›^a2[½/M7ƒS=䇎(C¢)$M[Æ#'ê:1©æ=ÈOw ÅgFŠ @”@J”ä„nûœ(WL˜d‚<šÓ©„4P$AšIš¶íwîM¤¯ÙQ&eI”ÓúŒ "]'JÙ]Wö®ÑÐîÑfÊ„}º(9õë7ÀP·”îM¤V‰ò›RZŸqA¤êD-¶ùwß1r)B%yá^áÚè„b›çU¶Ìx E'nK°]¢±~a÷&’׉8å%Q‹.­ðœHÖ×ä %ŽHœ¸oµ  1’(Ìæã|7Í\!›Ã |íÂîM$®áÈ¥iI´Û>÷&ʯ%¦*®Y/ûؘ•“–Dyè!‹¶È߇)¾6)jY1'‚d±eïÉ“&°ïß6†Ï=ˆ\*‡9LU\ỸðDÓ‚#XG„8“°kŒ·ÂY¿V[Á¡Ô˜S+Ïœ°Ò c‡Ä´O0YlØý+ODdÈ-ƒeÝ™(%GÄÂZðe¸oä’ˆØ? Ö™À:0Ü­ò“Q oàL)¾j.ÈÝî…“®˜6l54q£ÍÙ³XгʤËDø³"‘Þ1Ñg¸y–¨%8¬¹K€@ÅIÚbH$“ös›Rº¬c$bKÔÈèÂîJ$ËY »Jɪ*b3'²ƒ]Û Ž6øB:ÀCŸÀâtC;"xJo©­¹3‘ Ÿ¦QCBªH>-‰bK$Xš ‘ §690eDÇp:ƒ™t„•o/á|sG"‰›©H±z³(rDv…%b]鈜9€wr$R<Ý!V³RHáä¤#ømÈ¡«ulaº;TŽß¿RÎZæ´F¤`MðŒ¦b³Û#’mþ݉\Æô¬|}­Ϻ$ .» { €RaOÙRÿGCÕˆàïÚ/¾QRÁJÆòŠV ˆR?-¥–È–ìmeˆŒA"i‰âÖ}ˆìy¢š kïä­D K¤ÜÙÇÁ–Œ!>1¿®ÍvLD+")Ünw¦Oqï­µXÊ® ÍV©UD"F×ä>DvcçqX{;æ-DÄ9Ø–%âL;"n¾F"ÜzGtó ^,kóu¬ˆ˜Ý<»CQ£Ì/æ˜Ù@"šG–ˆ§œ,ˆð„dˆ$¢i|"üÑçµLX5‰Ûˆ8–ÑÜá Y±³ Ù'_Ö‰ÌVDxÈ»¡l+"^‰vþН!áÓVIDxʈ)³Ž`"J"X#ÔÙ˜È~õ¹™Ík™ð[¡”u‘Ô•Éu¢¯jDÑvDvízÜNd‹ƒ×‰ÜæäxsÀûãLwJ¢ª–I;"v‘+áWD¶°ïò½ðäpA„S,Wß,/Ë·Š=ÃUbw†D9‰ŠÎRÚ¦-‘ûirü¨:ÐÒ;±+£(:”DU-“ÍÏn%j9Žg8%Á d^åFïˆi[‡ÏV5DT•]ñ’ë2-¯ÝÚdªFÝH󙙌ñ'B"8LàÔ%/ÈBX¢èáÖ]¯wDÄ}{Ãþ€t‰H,ˆ0Kºñ¼aoìã!JQÎjDµÂ+žüîA¤ ßPLeI$k5ÌsF>‰Î>K“©t®×—D®øžWE#{qÁUŒ‚Œ#)‰ )¿­–ØG¤xÎÇ}{¦½A”Q>'ÂÜ2<Ü)$*ËÏ–H'ލu7" ™«l‚?žôG‚¶ú€¦/#G”ÇSÓÜLmK¢ÄÀ Mðhêãî‡÷ÍlAd÷õœßŸÈü ³šÒ˜‘rD“$‚]»å ‡eˆpD¬ßh¦?7™ÐÜeG’æLÑ$¹´HDS÷×å6S ¿ƒB+ž¶jD“&å[IØÎ…½ºê!2%¶)‰ÜÏXµîC4]¼£-€¤2É™dqNs"äkˆ„­‹IiŠD˜ïlWGdÛ¬‘w aù,]¿ >¢ IÓÝ€(Å ‡¯ülNä~Æ’H=»Qa‰ð'Âb¬%@ÄJ"Ù¸…HÚ´ˆ°êO‡í*[Õ6c¬RkºHy nCdÖ!HI‡‚pD§UZ„‡V´ Í2-²•‚w#â–(g7ˆ™ªIWéDîfÄm“áÉ‘Te4ûÑ}‰Fލ³‘²D:Z-jqöãû €(‘<±i)‰¢9‘&?´D+Oúxh#QÝ >®.Ŧ«.;D¨×Ù’h¶‘Ýp(-ˆTˆ¨-‰àë-Q^#2äð­››e‰ò›D£’ˆ‘|V‘òRÛýˆ G”m@d,‘HDÆeŒÜI¿q/¢ÌuÑè&ÑoÝBd«Ç—‰%±5®Ö>Zn§q7¢Mí’o'b%Q^'JDê~DGÔ)ë}r$"5¢ÖmDz™H'åO–‰øm­TîH$L(Z&j±EÄ] ¢ª‚µK÷'zj÷"³ J£µD°cß$ê^#ŠçDür;¢±%ʯåu"Zµª2¬S ¢ª¤ŸnC¤^]'Êo!böšø2Õ5"1'’·Ü°p#¢¡#j¬ u"~Hï˜H]'·aËŠ‰0/­žì Ôð‰#J*¢É¶D½9Q¾DÔ0—UeÈœˆTDÔœ1³ Ê+¢È\Ü›(¿#Q~Hq[]ås¢â–{:nDÄæD£:ü7›%ËDø_ºkXKDðéôÞDåI¿F$×ešVDt`/Œ„ã ±è°úÑ^˜³DÙ-£ˆÜ ´1íí׈fðÆ¤ªuÄJ†<—D=(žÑD3xQTD9"S'´F¤Vµ–‰Ü53(|Bðº,sD¶…“=é·n邱 ‘6s¢Ah" ȲÁ0VUa}Q…W$¢­X±d~5‰$M`)’èpC¢îœ¨uƒHG˜»N®Ÿ´[xëÄ–ß!£F‰!ŽŠõ°œŠ+ŠÑm½T6!º2gH„-–: "RHB;ÕE"$„¦K¬ yÎZ Éã:Q+CH%¹¤$zÁïG”LD‰NbIouD‡Haµ”¼¥}b‰\J™àénK¢KGYøÖQ¤lÇn˪xN°‹Ä$â "w™ÏUËääÏa&é.Ä"Ñ&¬‘¨3©ʤ°DçŽJúÇ7®eCÉ5ѱ­âÀY`‘ˆc=^æ–¨¼N›¨†Ú† šgV¬ŠHb«8ÜÚæ§¶|y‹ïM+ü9Ö‡6jD»\I4µ9LØ7¹†‡lbÊH v‰2Ê(êY"¼MÜÍËýpôP@Á*•¤'„§*vDQÙ6Ë^âÛ¢Ùcsb‰ðDɰ܃ÛI%IlkB>ŽA“N¡9ê|ˆÄV„·8¼þ‰ÙÆ50;·´/œc‹)a•Eë³$‡Ÿ±Í-à炱 6™s_ì\Jr€ÅÌ‘€ä‡ÕŠnÿê’(7“1Ä…ýò6¢éÑeuja:ƒ›DX›¦É‰ý…¢S˜V¼¢xih‰È5<Â^lC41­ö ¬Rsáfklf2²ß¤OÐO¼®h3?˜wlÚºkG¿:¶Ëb˜wtDéúÃAH Cm¥¦I_`+%XÒ3W© ËÇ+ úFrÕ0ð«Ùwát‚­ÂxI¤*"×BâE¾-‰lX¢ª £‹–»\.{×QÍ¡ls9L&¥ÍHÖªMßÀijU«C½åÒÕ"ÊæCå¤â½\=sYOx‰Ë¹qÒÇ6»š“ê{`]Uå+ì>îɦ}PüÕûõU|ûá~¢mûeÕ:,wÕÙ$ü‰l°;.vgáúøm{›eY±º]Ûúð_jÄ¿ï®w¬­Å¶K)c×Dg7˾g8œmG¨w¦¼ó­@ýÍðÏ»¤Àý83ÏT¾xX¢þÙv·†Ö×wmKÇV÷Ž3oÖëâŽKÝaœÏWb‹XÚqèg¾CC¾wó†|ÛD}ǹó©çÍAo,©ÈuS­‹o^šÇÕ]gþfmÈÈÈÈÈÈÈÈÈÈÈÈw$ºk¥æÃÆ&W¼×†­CŠªqòn¹t´9Q+1-Š×÷Z_ª†¸v5UmµÆÞHÉõ ÜêcŽé7]€\šTR\1ú7ÏÙm@6'Êc“ÛßÍ63å $õxX"Ù¸Þ­N¾b°V¶ÕF±tQÚŽ¸" W‡TÓdy”·k³m¼Š"2«P^h~ÛD*R×®» Éæã¹Ý¿ K"“‡‰¢ñnˆdÃÌÖ•µÿMä:mêù;âf›éás^¾w~Ëê˜nY9••Hß¶ò›©õDeƒÜ'rýÚæïäŽ÷­ùµÐÞ-K¨¹=‰x,Y{y ¼å¸L€ÉõM¢ò<÷ÐDî Õó¹=ÐlK“ùmzËêDÒN˜¥IÎ#ÁNo;×Ü…ˆ»E7‰Ê6ËNä†Ù™¿“¿âH„«Q5ý¸­GБۈa¾c"6«-½NT>y¢Ú€e#àùGتº$r¯Üz-êD®­vR{ÞÀq„f»!¢kˆôCã`bW-:úÖˆªÒ’Þ²¨›Dg²"šî„¨µŽH=$3L6Ü€n°ÌEË·‘mLh<-ßêDå s¢b'D©:$§âÀ¶Ô"Ý`ó±) Õ|"Í5“ 7 ÁW·×ªxNäö/lrJ!°¾Ñbêºí¸ñŒ¸}kN4Þ QÏ oÔ‰ÅÇ‘ HáJvà…Îéƒ)£˜ˆÜ€°ƒ[/ÅÈØ‘Oh”s©Wš|–¤D_ÏÐ."eòˆ¦¶Clµ/ʤÅIÊZ|¸"á(I[|Ô0ƒ lQ9Y¢¤õ Dˆ.Œä´“žXàIm$*¢d3É#Þú4N‰ZßT9eB&â©Ý䊈–DÝáþÞPôTÄ ÓÎ-¶'è ›%éƒÍŒ"7 å¼er<Å÷wZž K¹8fé‹XÐÛ‰ Uˆ¬qŽ9Ý‘"ØabÁ(ÇRmqÛ6òü!ˆ&æ°±qbQ„éF{µ%+‰`hÊsEÓÃÈC”Ç2¶)uÙ»B²’ˆí„H$b°BKDуæßÙãĨˆN—ˆRf‰R :Ù„(qD.› J¢“[VþDš|aÂéX`_žœŸ=<ѯÙ`Q„ƒÐ ¼®Ýš\ωtY³"¸#:Þ ‘!ßC¢A¿&Í$˜_@Bc’e"º ‚4»$J,Ñ­'ý:Å·rSí¦¤oZ¿c Ù³ñ‰D¶OÃ}ÅZt™D;2©Û‹Œ#jUDëcѨ$úbWDÿñ:Q4'2ÉÃeæg ò©ÝùmÑ`c"8ùVDnìAIôå׉„È­éz=QÇ2(&wJ"È`·ìàÔu"‡·ÈDvlÒ:QVý`GDyã:ŽR¹2šüôaˆô 3í9‘zÉ\µN¤?B" ðýå5¢nIôYß%þ.Dâ:ŽìRæ@ëh·?*‰˜ÈWÉ×›é׈莉äu"U#j?ÑÕQQ.6%’Íe"Í.]16ß%­›(8¢èˆfï3Ö)Kú§«ˆÒ‰Äu">Ý-‘ºA”Ήê¤ß‘$ªE«ˆN7&ªô-‘2Ån‰4‰%"¼@Óx‹DÜa9ôløˆŒ#š™,çníè".¦cØÏs×o$­ˆÝZ¹~¿è˜ÚFôœhQ1ø»ÕˆnË]§Žç‘%qY½¿+¢S$ºZ±6˜fEtýréÂM¯ñÞ "6ô”ÑzöM¢^G{"Ï\INÔÒÍøÜÉõEÈû†%*Þ•ˆà$D±¤¿Dô¿ç¬k‰Ž×–ôãŠ'rží÷——wEÔ¢ÆdQRX¢æqÔ¢ÖƒeH4v ÿ°°°ZeˆÁsHú½<±%ýçk‰pÞô¨"J%ÃÛ)ð‰Ý‘ÄB_C‘‰\­c³©½q®ŠÈƒ €(:"•è@b;\cYëˆ÷Ò"PÁ‘‹‘h}Ŭ%údAÄíPIÕìaD‚¹á}cy0ÒÆ•lh;Z2yNˆ(îalϧ‰ço$ì]ØpTÀ‰rÈéóVvòÛˆp¬·š8ä˜@"¼XÙxfD­ÄÌp=hëCBGE>!ùkƒjpP9Mò¤¹û亢wbàˆC¯“”Ú»¬áØU°¶^Å8ħ&Ã϶6¹¶DÏiDpŠÏñ:Žƒñ‚™/énˆŒëíæ*4] ç×vLËÄ6†hãíè]–¶Q,ˆÕÖ‚W×ѪÈ…ÝÙî=:Y{Ò‡œ›±Ídìh©8¸·ï§·vmö¿9ènİ_keµ4JÆ-±ïD»ÃFçڀ͛v’Ýw¢Ý ˆa£l£ymÑþØw¢Ý ˆ±26Ÿa߉v3 ÆÊØt‰}'ÚÍ€+cÓhöžèÿ<Èhà §Û{¢ ˆ±2è†Óí=ÑÃÅÙ†Ó}ƒ‰6@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä ÞWð›È÷& ˆüˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼á%ºÀ?o~EnÆþáïâ›—ÃKôÆ\3-_4LN’”ψÉ)×\“ÄX‘ƒ†‘Éc34)¡’¼")iä„Â,­7$i}FE£„Ä­Ç?½ûmÆ™ks6¾þf3üs~ãíá%êÁ¶Ogî¹Ý”謷xDF.¶Ý].ˆŒ6»"³YÛ¸EDæˆþ$5ǰõÈ0'êý©ù¯ ¦°DÊX"Ø—ˆ`¦ØŒ7$_¦èÌmÑÕµS›®6®–ÐõDw¤Ø["’p ™o—ËZ"2\&%QÎXIÔ0–h?jS]žç ˆ.ò“KÏ—ÚÈÞ6Ãä˘ØÌ4_úpžŠ˜ÅÆ üDÓ¦¯ÕR¶"šà‰ñ¦k›VE6\\#ú{¦K¢În¥L%HäùN]XñKjSA8§ªåU•êÔèõ V5"ħÕR˜Y~¢ŽÑ ¢ˆx k6FÄ%‘8àFÆ?ašK„'6à@DME45)ÅMË=ßéˆøÔéÿÕrùÃYETžH0õs5Ñ F„§4Z~¸ÑNWª€eâêÉqIԂ׿®ˆdE¤Rc‰ºÆ%ȸ ú •›AjÁÇs,z`ȧT°¢7ì˜v†ùØË¿7ž‰­›@rй4,c_1Z½b@tqÙÑÿÁ©¨ß:ayIt•Ã_P㯛Ñ6D„Í–‰Ìœ(ªˆžÁv¼>| DÜžôa7>pD²aª“~a~’X¢£ ‰Z"ø‰²‰É¾ŠŸ%±ú<Á‡Ó®ù2’Åin÷®¬Á v.DóùÇ/’’èåA,õa\4äÄ餀í+îˆN!•M>Jf#ø´yè\ïGTÀ¡rY¸Ó®#: +"UÍr :5‰Ç-• IDATÄF¾(‰·D©9˜¦#z½…õœâ!0³D½á_%/²Ùd€<îM‹â'–¨7@Þ¹3VìÙÁ÷¿e8é'I{QFòÙÌ™d DlZ¢‰4´wŠÉTª“Cûî=‰F'ÓÂ%…Ž(Z5*¢ b’F†À¹Ÿ8"E˜%:5­È4cK´Qí‚F¢ųûlD°±ÿ”üN6¸ÁãŽft\¯>úµbÅÿú໿ëˆä!ëZ¢‘˜\-ˆ9±ÍÆ¢PÇúàoCdâqˆ$s¢ÞiI… z!ØT0,6 Q¹iB‘æ:è“xó½l`#,щËþÆüV6vDÃŽbtXüê‰à£¯á!Éÿ]ýû¿íˆò“’¨ŸGÔ}SµiÞ¥Ùp2V_èÃæ-k²ÑàÍÒ^dD­›DT~œ˜¨1O‹LË–ÑžÅætªO¢ÍÓ"°™n‰.F¦[(žýŸú·‡YQà‰ë¼£8ífÿ8ã>úoHôFñßVòûh`r(Æ–Dê5wDa¡›¶úÁîE_"“©ïýý-‰Î×±´$2HtüK*_Ä&j™êŒfò‰žC®ò6Ñæg4$ÒÆ‘Hò¬£¿ÛÍFHÔC"Úýo—gK$M¢¨%™ÑuD!—#RHÔ5™þŽÑßÝŽ¨è­%â7ˆK„'¶’HΉ.•i܉L-QÚ@"D´ÛíN°øBbuÂ(8"S#:¤/D£Ft;"ø­×ÝrÎ߈¨E\•‚Ë::"°Ñ„Ô‰Nþ'ÁR’ȃˆ˜Í]È…¶DIˆ$iجãF¹kKDHt>"a:‰¢Ý3KÄ3uÌ?æmKu\⥩‹4<{Úƒ@&=¬::……@ú~¹íõ«S‹¤"R\èïþÍ Ž ê å Qf Ò£_ ÑLñ’¨¹‚h4›(,jóýŒ•Do¥YM”"' JH÷'Jà«]Iß^$‡¿JÜ"nq8ÁŸê®a7Á4‰8hhz /Ó$”<,$¥еì¶\H,éK.N’¶š UÒ¢p€@¾“Ò~ˆÔ »’(÷ÒUH¦p¤&mqLÛy!fHÄF ²dÖØ^É!ÑdIGÄò MïO4Á) W¥f/56 dšäx©1eé„Dâ¼Éy‹Ä’|ÚOÉ'˜5±—/~GNäB‰! nÙˆ¨‹‚°J ¾é€v4R!ÑÉ!£HáG"Ç)ïk6À‹3:F¢4†²«)&îš¡òÉ$ýèCò«ä"ܤ$‚S°€¶m¯£µš,W4…“l[|ØèoAT®ï[÷•µZÅ2®Ü5´KÉìK}c‚kQÌ'*ó«SÂõgYõ¾ ê™ì"«-.]-þ´¼‚ª}Ëyp¢²ZùVd÷á®Þ\ó©[™qY߬nLp-ŠùD³ú‚o.v]ø/5âß[«¿(ìuXs3 5v»DEä͆ó‰ÊêÿáÊÉÖ_!ö^°¶+â=à ÎÍ÷ÛÞRê–M+£˜/å‡îÞÊÉVÃaø›=àïÞüQJ\ûêÜmoQ&äë7­ $²í£tÙ …¯œìlíügðÏ&…ª]‡ûYn”'23ÙtægsÜ6ÙúØ  –)›ª½íàøçìú»®…‡­ßÛ,H9C­ÀÝ"4äóFhê@ä@ä@ä@ä@ä@ä@ä@ä@ä@ä½&º\USå­‰Ýuì-‘& ¼\õñÁÊMŽÉ¢6»•hÂÔ†·¶‰½%2}‰×Û*"…i§xM3/?Ï9¼6õwvûK4²ÝˆªͶzà%Ïj/¶ÁAG<øŠì;Q“@t3F&Ù„¨ª…|¸DÞx4D˜\¢åX&ø<-)jøO^x‰ˆNs™Áÿ"wF›eùÑK:îÁ¾sY¢‘”-6dO‘A"VLÆê$I†C¼|ÖµD)i¯×§á¤}x1)Ô ëöà ¼WiʺƒyZ”{´mì/QNLèŸXϘ”Ä@dÖÍæDëàí*ö—h$!wm‰°¨úcʪ½È<'Éœ¨õM.ÆŽ4œôHDáÕAèKx£Ú‹~Eö˜óEß.‰ôaÂÑõ™N¡~P±M ºH4+J"Ű7P Z$šZ¢äˆ°ê¬"¢‰ G4"Ìÿ”D_ѱ%º˜‹@d‰:FQì YÑäM ÂÀ3š#jgHô‡s"»¬ãåÀ¼ùfA¾hdóEibtüw K$r©y‹Z¢éÀ ¿ÙDD‹—G‡4É)¬çad¯€È§/ŽMʰôM²Q›íbo‰4!†}ž?}a}GG¢!ÇD}ßD°±áCB^ÌÛÃ>\ì-ÑþD òF òF òF òF òÆ;ìÂí߯x|§±YO¢Þ2Å"gð‚ä8hXÃi ŽÄcäózîîMÙ?õbÞ”ê]tu»[øû£µˆ"®ï—Z9±ÅÙ¸žb*ÂŽü°Ôàn|J½õ’0ÀKFn¦öq8.á»è0y·ð÷jl5)ꕹ}7гqDÚŽ˜aZ| DºF¤h E,Uª€mÎì€+Ķ߈‡ ÿ`Τ!e'Ë•eF7D±Y"Joi:ÂNœÝ²;p†]:©Ä¡Qèöñ°áïaÍf—‹a¢«¨µÉ\IÄn‰kD™Âñ Ù»%ánáï§Ï§—U?ýÕDvˆb³LDÇÒ,™D`?×ÑPÁa¦¨¿ÿï»ïhÚL§Õh ¢Úyh%Q‚=£¯ñe¢®tCfo4Êü»Œ Æ ).ª<Dµq*ì(Îö=6'úç›D±äçKDpäÙ!³kˆö36 nÕÚcØ!ŠE’7_5£Šèçñ8åùÉóDÇ@$רV.½›DÓ÷€xÆ9+q:W}‘D’]Ä9œÃÿ~€Ç›%ÊÚò“W,©ˆ~ArýåÁ³XN€h‚C:u$ëå@»ÖkžgÆ «?Íè] p—Ø€(K“ЍO$ËÆ½'‘4ìÉ‹#¬´CwòåÇ8vzIÔ‹“ƒƒ§±@T`;Ŷ`ì+Þ¨B|ʺ±Íàpºfôð-„¶‹MÆRSq™¦vÄÑ1‡ý‘Ôœö_¨9Q§/Ÿ}ÌxE4´DÏãh$O’öÀ6å"ƺ9Å1N;°Dm3yìD“¢]ŽÈ×™( êeŽ ;޶Žâ D¯š¶ÆÙµÆâøðyÒ¶D},ªöM9¢‰â,3Ê F<öm€IuAtÂzŽÈt3wZ³C“ß[¥&ŽÙAI„ãô›Ñ¯NæD¼Nô€[·“Ø€¨[± ¢=gxÁ¯“¹N,Q‰¾3?éÓÿ,Ž$C}yD8Ýè×Ï ™%¢^ÿý#âô r{H”eîNvˆbÓ¢— ¢¼Ndo!Ÿs<é± ½D 2Š ¢„͉ÜÈ–Hâ^DɵˆëDX?"†Ï”%úÛ:ËßC¢.Ÿ¹™í(Î#$úh~ÒÊ:‘@JÑûKK¤¿S'"ä} ÒËDU#J¹)‡( Ñ'kˆ”ošžZ"ÂÒ ¬jü} âKD_›ä²"²·³DöŒöŠÎ‰ÑŠÈTDìMw2[&’ï ѬF”šdŠD<Ë.m¯L;DqŒDMWh¨cqŒD#$:Çf’õv'$²ù"ú”Kö)nxA”›Î…Í:3w+­Ñ¡#J1· DÉoÊ|ÑSÅšž_#:v;Ó~‡¿¢°š¹,€ÀæL»Ì]g3·Ï°£8;¢xAÔ'ñ/æD¶«t¡êˆ(c™bZE}dDqhbÒˆ~Ãz™ÔG¼$ŠNˆEKDr×¶›§XÃ[e4ù"š@j:›!û¾Ïá'’¦=,Kú‘|jr:Iš°¶<Æb,ŽâL[Ÿ¾¦8ê>^$J±b)œÀd+CÙ)JŽM‹Ç¹ü¨yHÉáøxBHº;ÑÒê´¬ƒW$}I/ä¤uÌRC.O±‹£8ÇýQçω½Ô8ÂÿqJSùѱü°ñ/xëOm. cÝh5_‰§qÿëzqö*µÝ æ¼êrbu壷Ñ-/Þa¼ÁœÏV¼Wɰw2€íâÝ æ\.sßëw9˜sÙ,`“[8½Û ù¼šƒz#y#y#yc‰Îð·ë€±ÇDÜœ¯»¯Éõ˜Ib#¾•ò Ÿ1Ä:šŸº‹ç[Ç;%*óD«³ÊF›µ„”FG©Éúy~Ô„'Xþkç¯^ì Qú£‰‘‹ÑMÜ5ZbZÇÜݬCÅks`yæÌÌóDën5D‘÷~:6¤1Qλ£"?9Œ"ÈW’î¤5îˆhœÏof!ì¸T->’¬|;¶#xjBX9 ^Âçc¬Ðœ­)ÞL59!ÑfÍüVs:爰Q¢ê{’î¤5îöDšá0K ¢¾½`ʦØp¤Fdó* ²W)‡šžÐêBr¡¡ü6Ýäæ Ø•ˆéÌIjÚFR½?DŠgKDmÛP6_A4¯˜Se%K¯9ÉwÒÑoV€ÎK¢79ÿEø|_Òœ¶'’|¼DÛ£+§+ˆÎsY"*Ì’Õv™‚ä||ó.{«"gH”\UD $ú¿÷‰hR# L¯ódŠ;ÇíD ¯¯ˆ5=eºx¾ËVïa×#]&Ò Ü¯öˆˆaeÀ ¢Øž§n%¡3ܺj¹]Lö‡Q$‘ž9Þ"Z{v¹r¹wŽ©Ä6ù·UDµ@"Åp,åkzÊà­æˆm²?A¢R©Ô¶ë‘ôn[²&v@”˜–‰âFÎeðˆ°ÏÙ¯£iÎrã>÷mûý5D?_G„-·º%/‚|”%L¥|¿ˆ"“ëFÜ'æÅ dc¬œ\I?ŒÔÙöûƒ+Ø©^ØÈOLª›¤bxäçÔtVe1Ñ5½Í®½4¨o ¼D9ŸåûE¤àÀWqJô‹.æDd*è“Hñ¸oÛï®ÔT|zH;³Ô4"l*ðn.VSB¾·Ù­ñšxÃhÀ‰R3ËÙž±\²8Í)”*¢%Ñ©P,î»öûW³¶ÜÏfR2lh‰“­&‚s݈HŸÀñ éO„D`5ûE¤ E¢¾¢ö‚(ý¡l&ð6ÙöûƒÙTbÙìR*}p9lKÄ3Xq  ¤ClC¢’k&ð\¯?Œ€ˆî$¹ä–(9}3'Êÿ@6-‰lûý´a‰ºÅTÎôaÓÔˆV,õ.DÊ ÅC´d8÷Œ(sDG‡I¸ ú-ùŠAJ+p²í÷³œQ‰Œþ~I¤y¼ŽH3Í7$j˜¾xA”쑈V‰:‘m¿?¸*੊ˆ$éùœHFu"ÌBVDÿ%ŠJ"5ï§´–HmF4ÜåîŒÆ‡*Æ¡ä&óúc{¢KSAέWeǪNdÛï—DÅ}ƒD¿W‘è¢Íî‡;…ý‰DIÔÃüã^µDgXÑx“ȶßGôÓ!}b\ï›Ù¼+×r ¿wD9C"jzr“yý± ¢Á‚ˆUÅØ±Ž°5IdÑÈs:zõ'RýŠWD£µg4.7#M$øÄ@(”û%5Ln2¯?¶'šÍ‰(ÖÒ ‘ÀµŽd‰»bGˆ&LjþÕ°1e¾’ –½Q¤$b5"•0Ýzã0vA”•ù"ú¿B±N'cÓ–ÍäM™/²í÷Fh8Ð`:)ùÏšÌ]Mç½Ý®E2šmJ”Áî‹µŽ…+é?g¦¡áw’tëÃØA1‰‘(îaO['–hoçD#KtDò„II¡Œ†ƒ PÎXU1I>…]l£’~ǤP8Ž3“2©'LÓŠpðŸ]Ä.j»¹zõÅ avJE+"ǘ-ÆfEŠD8„ •šIEN S-¹äã1¥+–Û…-œ®©×¾±ä)‰tN¡€&È1‰%á0wëúÅ©ûň(Íu£Ñœp¬i’œ¾$# c+Cˆp 9(uH•æ  )iÚ…}‹uVÙ¿›Õ:>hìàŒÖâ-3ò)íÛË=8…åNó$U Â#‘Ir(î2“ˆ§ñ•á)m‹¸ù-NLštWÝÌõ¨Ý¬zÿAc·¬ëWÄ.×~2—Oº«>u×a÷ Åñn‰Ö7\\…0?[ÑUŸºë°›]j|Ðx[D+÷V=®úÔáìA£ìéï­ýhå¦Òr6¶êSǶY³‡©ï¯ýh妖W>°«ÚŠ…Ù¿{0ŒØn‰~kíGç«Þ,·_­þ”㟳­Vh'±[¢;ÞC©ÜyÖœµÎð¿ÿÚì*v›Ý1Ç_æ ¢oÀcòíMìqsÐ}‰@ä@ä@ä@ä@äý :·õí½«ØžH,zZØQ±°}þmaKtq­ªÎp9¡EÉìÌ=°­Wæ!bí‹Ê¦ŒÆ¶·Ö,o&8ž|»¬QÌ]×õ„på×ù…ÍU„=bz[¯ÌCÄÚÅójÕ’HRûâ0®uݘμ’\TæD ï£ @{P¬_» ²0–‰XT'¢®ѵït{Ñü@›™LSxs?GH¢FˆM15ÖkcÏ®5‘˜ÄP³¯C_ï‚HÒòéJ"—\k6³D ÓäëDSƒ‡Y¼µ°+b'DÕ)m%Q9›a5¢²DìQ‡YOÇûP—¿"Þ½ÂKb’à ^_'Ê@î\GûpÑlEì‚H%’¦¯iN^8<7’âû‚‘¨D­üsm„MI¤V©ÁûLY~L;-q|ľ¤FR|ö¢(ÇäZ¾¤¶÷ Þ¹b™(zÕ¹¸l›¶ùÀ˜^tT}cûCî]ì†h0Ç4NÅ‘b´g$Å÷á¤ßvD_7,šú¹fϲþ‡ñ_4ôêÈÞÝÎü£÷š¨3¢d ŽŽD‡qIôÂÝÉ©$R_hÖLÆâ³\(ˆ²_Õ,߇6+bwDI‰’yZÔLJ¢CwžŠè’ëbR“r¯°_‡3¿Ø¬1Ñ[Åó3au¢<¹F4)‰Ì7ƒ(ÎK"uÐXœôMHF%‘‘Hd‘ G¬$ þM â‚n$Å÷¯éFE$,ÑÀMì­ø‘|ï‰(ý˜f$Å÷¯™ÓŠèŸ-Ñ·K"lÆo‰†’½÷Dq[œ¼ ­E¾h™(­ˆ>F"õƒ’×À¥ä}&J,Q§#Ž›4OŒ¤X¸Lteò²¢mr=+*¢”›mzо¿DÒAäè˜JKÄn‰’HÙäzZ&׿ ¦sDú}&¢$ñúø@[¢#~H9"@–¨¨ˆ¾o%Øêä½&ÂÜ5µD‰ôkvHóŠè§u"Éÿ‹vDçåδ±›ZG zuP#RŽè4-‰ð> ‡X-5¡8bº&1?c&~ 9 䓋ׯ°s9•Ž(}Y‚M!Cáä¥äkýýn1rù"E¤æ¦c:ú„¿ÏD}SdòÙ‡¤!Žž|x8ID95égÍ9QÒ‘°ŸAŽQ==ˆ;ñò3Ó ÈPcŽ‘TØCŠo½6»¹Ô‡Ö‹ÒH›pO ä(ÄóFëåÓ¨£õ(Æð›~ÁŸ7ˆü<=$­OYçòêËX$м¯Uj‹E­_–§ ~uqè½'jÝ›¨º8ô¾Vïσ®¿-ŒçêÏôÚã~Åîˆ4[œxÚàW{Ïûz©± ½²'‡ ÏÅúÊvz3¬ˆ]­OJÎnŸµêHô¾6{˜Grï㤿·›Ùqì(¥÷žõÌ=ð]¬ÆÎ#4äóÆ~­‰sû—-Þ¨Nö­«úý1Vô#qŸ×?¹¬-vã.+{K¤ ‰©}Bo–9/÷Ö¨^wÒ¹¹á&­2XZàlþQzÖþ±ä/©}Bo.ÖˆôŠn^vbyPÿÄŽ3-«Nç­âæÈVÅþñdLí3¶xsé@›Ô´mÝÄ´þ‰;çÒòÕtž»µŠa‰LE´ˆå^Y“ù”‰®'öåÄ·-2)hïѽöÞrî»"²yóìÆHåÄï1‘±­h—c¹q[EdKxÙʦrâoÑò©¹"²g®ìÆÕˉßs¢Çñ?û%%‚µÍë“Æ•95¿m?;åF~Çð¿‡Ï£œöMž™Ç‚ÜàkŽM)^k;q D­#3µáùß),§MüŸã¶ŠƒÒÚló_Òµë±×D%Ó¡Í’¶:ùB|ʺ§ºyò46â°ÉMÑÏ^N‡JHÓ4Ý´.5ª€É̤PŸáÄG'ŸQ_qýôÆþ\¾,&ú ݤ¦È:EÞ.ôçæ+Š7™–Ç­Ï<î5QÜ!wØàï€v' }xÂM6R'OÇ㉔ú„CZbsn9…ÉÌx’¿€‰¥:þˆF·S¡¾ÐO‹),ç&g…üvm `Q°Å+²çeì5͆Ñl fê˜ãVÚ…·šœð:¡Ãb*”>d¶ì‚?ũɤ:„‰gªyTu ©Ž4-ÆØ,&¸"^À[üö¸œ®ïò8ˆŠYI4«ˆŒéc)ˆ#¯ˆ†Rñ¤;™ªc$š\UD¬ÎÔH„—9 )óâ±µ"K4š b‰&&±D´$jáÛ’X"§ÞX¢®<æ]  ÍÄÌánVœ ‚D}Gó‰= 3Q×X¢ÉåE¢.aW7ŠDØAKâÍV,QÅ$R–¨À ÍdI$€ˆO ¯@á<æˆ ©·Ù©÷€HL—‰°{Éj¢¿]&úg$ú/ŽèŸ5Ë™#ÔýóûC$/®µøj"ýe¢aꇎècÍ~E‘ŒÑÇïÑŸ]#ÊÙj"5Y"Ò˜\«?°DØ€°H‘Ž,‘>zˆ:W–Hý¹0ÿP'’Ôu®@ÄYÍêD#£0¹ÆÑÇñŒ†ÉuG˜ÿ §îŒ&qôÍóGN4sD‰0M$Žè55‰%š Ì‘ä‡Y"Å 3±D ê!ÑO-ѶD²$úˆÎG–Þãÿ/ï=n¢Á¥%Ò‰äeÖ±g‰LI4¸i°ù—u—D™RH$@‰’Ñ@ò×H4)‰û%;{ÜD}—uÔT6—r×°™$êù±T‡´Ì]OªÜµÝå-‘©dóó–s¢äïXïQå±%2Tá;ær×Ì  ŒÆòX4äoO ŒöÛìÚ|Q1SŒ}9‘D¾®½"Ë9Ãé D¯59$Ø:óqéØ$‘Eaû™nÀ¦æú€wF½8ä&ýè¨IE"#I‰!d$íÀîðQÄT½à§¹j¨§I¯ƒcrýôí‹“†jÄf0Î_¾æ}õ”N€P°ä1cEC}ÐP̈'4̙鈧ñ ÅNuƒñRøüGùÓX1l­=0ýs£XÎz“•¨?20q¬_}@€fúôðÅQL>£sóËD¼É)9xÁqàÿžIŸ}°~àçý%Ú*–ÚÞžm·¬@äoÛnYß"¾f¢ ã@ô¾nªÍâ@´j`ÿ»Ä{J„·õ­¢¿vªÍâ=%Êk×|VÞˆåñží2‘7‘7‘7‘7‘7‘7‘7‘7¼D¶ÀžßcáaÃKdu–{d.7\Ä'g$­½©¢¹ª"õ øÙÆk·á%굈NªVóg¹&\¼Æ¦,ÆLêíYs¹($վŽ[x–VàÍ»¾ší;sËíZ¼D¬Õñr·Ãe¢‰`GZåU»ÖKçt1m’ 6y’¬#ªßƒNÌ—|^>º7ðRj-ÎOÝ*¿©/Ä1œ•¯òÅÛìÖ>à>"ÍICDUõ‹»Ø´| M³ëÙï˜E§ŒØ¬"Ò ‡›[Ú‹pâ5ÝŽë$^ÍSušqk$ùr+NºxêÚ 'õb¾ýiç}k~R­ìÑ£• IDATP1Mš«×ÃG¤8›ûÕýðV]lªÍ+²t\kF¾ ’8¶ã2Q®é¼Þ®=ÿªšGR÷èv«|™HÑÅsK¤’hñŽëm4ï4Ô¬V¶'˜"‡Ü¬ /‘áÓᨪ!o¯˜âB°s|ìD*©íj5"Üý—‰2˜pq-E}/êÍç¡å7p÷··4 ­¯8F·¾{ Ìï~8Ga)ÕWj9|DR›éù¤úîhÅs¢ZŠD‹|‚HÜ$êÀ„97+âM}ëèõgÑb5àN—^šÛˆæTš}DµY¯‡h‚¿æ¤:lV]²¬Í·UÒ•D#ìî³L„–yýy¼5".™$×vÇzl@4†l‘#ÒºjÁÒ×Ñ?’ÃӞءÂàíVn«OåóÄíkˆ~ή/cx7¢1n,­¿ÄØ€HÑìzœzøˆFŽÈ¥Óú3#~?={#©Î þ³ Ž`ù1m@š¯Ó$ëŠÏŽ #`]³nš¾Æu>ÕOcõ§,0EU'¯˜¤©à?Å•ÄäöçtÅ/o½þìQ†¯hýå…¬&’F²Ë•Ý"ËØ€($G¤løA3·>kñ¯àŸ}[0qLÿ¢Ñ—JðNG|úÉÄu:yë3\çS¼³´=kÁx–©“—´È„:²Ã`ã_ÑUߜܨcRÕ_blH$èDfƒ²r`02Öf²É0D­~_ÀÇÉ@|ü{Â%ƒüµÆùTÇ‘°)96«“$*¢U]Tt£ÀÃÍOù¿Ó¶$8„øg1vü7I[½æ‚égüûµÍOÁá£l×#8¹ÿ”mRx¿[¤÷ÿ%u¢Y Ò€™9…òÀ¿ÔLÃÛp¢è–ë$>¢5ÊÌ$ïþ†u‡©ù§Ã9ÑiÑ'–¨ù§s"7.è©NÚ£9Qí\± 6wuDle/žî¯ú £?¡O¾0t:ìø´9ÅvûÃç6Ô§4ëJqt€}„¾/©=Ðl×#9™²Ô4Ù+ Ê5S=‹T‘·³b6VGL7,”M»³ÑlìˆÛu©ázØD×™9QÛôá‰øGã½N$M¨· RuD8`¸Ï“þ eèx,þø/¾7Ãn@½ö :LzÙ-|®t’X"Ûõh*a¦ ¾à° D²üñéHNå·³ñt*!+}rÂhÿ€Ãb2 ˆÈ-m@Ôƒ]ÖM%×%j’äQ"Np(^;`±ÑI¿FÔ¯f,‹½(Ö|å½T»86×4ÀÂt¦RBZÄðûOhQ`“Fœ –å’kìWß@‘H4¹#¢€ œÙp<™ÀNÅh Y‘Åx©­d9á£íˆ/‰Káôíˆx•VVD2Ú„h`‰ä‚¨£ùÊFt%ëdŽ2gS9[uX1^I4ÆÆÆ™œéC$‚¼oId²Þx2E"Ûˆ†“’ÈlIÄàTáˆÆŠæ¬µ–¨áˆRrÑ·o©•å$¶&Ëà¶" Ê i’X¢¿b£’HQ+2™:„™°sŒB¢cKdˆ§ $¢ŽÈdC¼O™%ÊÙ–Dª$Ê Iʺñ*"EÊ½Èæ®×©Ü$"«Ê5H4ÁssÛgh³ø˜Ï§˜"Ñ×l’9¢ LUÁ23m‰&˜ èª$‚Ôðk81Ïcލcoe‰äVDzA4Ô‰Šíf+‰ y='JVÁjÌŠ%"È:vf«Ûnì€èßèÑßJ“rKdŽHÿñ‚HmGÄD°E‘‚ý|D쿳7ËDéœH]'J+¢é*¢•«·¢ÞÀˆôw¤ù'æˆZ'–Hf»$*Ïh]Ÿý£Iº‚!ÑÏÙp‰èB¼æ6-2BÅfìˆ:Ž(w£îà Í%u¢É¢pÇD˜\ëß±D Ò¢¯©#Ê-Ñ´F¤·"R ¢žéœý Rë7òEô_éùÑT¾þæ‹róÙIl†._•Dü3ŽDÚugQNå«ëÔºvÀp›\›3Ú¹¢‘ùˆèÅ5"a~6'ê\UDðeÇ@d~×Í0¹N‰ä%g3ÐÛXÅ3+ Ô´{¿âÝƒdž»~Uý™%jæ<2Ô5‘8üìÏŒWE=w=ÀŸ S¬®S³ÛÎ4£é×H4¶D¿ “AEt¸ šÁfÂLðî/-ÑoY¢‰#R#Í®´#ʲŽ(Kt¡·8é€~gGÄL»ûkÖëv°O eM>A¢‰ c¹hä¼¥ckD$?¢pÄOG6_”'<œâò;ãµD’s$‚:¸"¡v!zc‰ºtZI¾8é.áX:Á™$ÿK/ˆ:£+$2Ñàjte‰úÛIsš¹‚3œ¡O;¿ ,nEò˜µxËåùr*ŸÅ Ó iAÎd”óœxztïDð™$/i9š'ÏirŠW@è`õ T¸íMŽ© <Ð>fÅæc—uìÑbT5‘HX¢~áòï@D›–¨³ äù¢9Q:Ë'¶’ª- 8Êræ*œd¬É«ƒü¸‘’ü£d|ö@#Žä|Bþ—H1ÁÒD'°¶V©½|E>þ€èX`Ý{ÊäçùÓ'‘¤ú[ò Žñ¬ ¬Âʡ̾ÄÃágéeð@óˆ$ö•1-j‰Xw,¤%R!?ãêG¶ëÑDáLGŠ¿Z Èe#¿­â‡/hÐÉ#(âc16ýÞVD6–ëä ÿì™íúü½Þzñ 7ú9  žä&Vv‚¼«-F†âÉæ´ásš¤9W‰íz$¿€™RqBô“$îãψ>áí\ÆòƒDòFÔ†‚§"–1Á²·© )¯qÑ¥7Ï—ÇßµKݽÞJ4ÀÃ~ «Ø‘J‡‡ F„ý‚Ø)ì¦ê[ò|Þ=r$¸~a»Aîù¥¥<>o6õi¿ÊHzHõss•š'¢! (ŠPØBÒØªJ­¼Ë–Þ<«ôv{ÔˆØm®‹yå J¾z¦sÏ|åN°¿ñ°±›-^1Ï#?½ú[ú¨þª>Ôʢόæ9ŸˆÛR‰í‰¤%¢æ!o@]?2Üœ{ÑPÆf´ü>^zÅꯪFØÊ´øH.Y^‹©øA‰êa·­{³‚§ûëØ´—¯õ,vì3³ŽHêÏx_s³6v@»÷ ¯›2ï¤;‰uD=ÿ¥tw¢™@tÂÍÚØÁ š‘È^¿I×CFIt#¥¶+åRvAÄÌ:¢ ¥×úë.Ç®ˆZì-]ÏÌÃÖbw…¥ 좗%3ëˆ KtKw´åÉ[&ºÞLÁÑ5D6¼…èõ-—ÑvF$ã]I*éU_ðßЫ΅ø}Éò?±'û o¤óeÒâ&ÿ“œG}ó§*Qö„ÃfšðìþA~Äþå³(7öCKjô+†—F~zï,úÌ è?™UÍwÊØ‘Þ9ѸSd}’²Çýã¬;îÙûéÑ©>Šÿ:†g]Ú¥ƒ‰ø£é`:tDÄM»FÉ“æGÇüÌ~ˆMõ~i;Ѽü8žeó>3Ž(~D&Ú5Q7âèàEÔœ !z=#!‘Î&Jñöˆz=Ö-&ê?eÅxŒ1,¦Ô {rÌ»Ì~¨Þs…Æø4‰“ñ¼Ï Þ‹çÉ-­vEtaÚ»&ê ºv€ïÎ; ¾éeôÜ`Ka$ ¢ÿ ņ#€ü},_Qì{^àøà@”`ƒHû¡f]lyÜqO‹I1ï3ÁE´²{}»!š^˜Á®‰XÖ³DÝш ™’Hê’Hs$â½¢"jΉ° .E"û¡f=$,ˆª>3–H6šHòéôˆ –hDmCb,U-ÅŠ,‘iEŽè0±#sD†Ú5£‰ìÓnaŠyŸGDž¨˜íœÖžÊ9Q geìÌ>ª*^î®f‰¨ƒç1K¤©ýˆ$¦Ùö) æ}f,QñÀD°O³ñÌd;.€,匚”ó·u¢ôx5‘þc£#G4[MôíEŸ$¤«»Ä¹ØE1VÑ®ëºËX& Å&;ú;–è„[¢üÅj" ÙB∊•Dê‹>3H”åMd•‡tÇ%ýe"SìÁ¥Ü­$’ÏVá—ÓcK4\I4+}f¨óÀD&Â!Ðâ;®Rƒ¤­Fd¢äRÇff‰4v "ýÄ%¦sU'‘hZ¢µVDöi·˜‹>3–H<8ÑÒãŽBÓËÄMèlLa3&–»ç"ÿK戮:3K¤Q–™Kåˆ(µj– ÑØ>…y‹yŸ™·BT¥A»®ÞO.º³QѹàYI¤MIô5#QçrpYÑŠHWDöCpAwÿž’Èõ™y+DUCÊ]_$ŠÆ.w 9=ÈçíŒUDª$b_ÛÜ5?ö [ÑT‚ÍæDöÃ2w=tO‘ë3c aº÷ïà°AP÷°ëK­$›ÚÈs×ã4±÷Ó±g4ŽDg†¡xÑWP Ím½01) dŠÁŽ_!Ñsj?ÔßϦ˜Å¶÷ïé£Á¼ÏŒ-Æ&¦{ºvEv@T–7è­p§HéhŒDínnÚaN¼Ÿ3í\ÖäÜ$½NO|ôŠå Þ—‡é†yÆåŸy¬?ø0‘ì4²êx4†ß’áS /_W}f€(§£Â$JT6 Ùu³(ÐôåÓø¯YzH~ ‰ÌkfÔ+£I«Iž7ˆ0æ5˹ü‘ ìÃrÂúf"™…¹<5ÏU”Gƒ®ýÐ$’â} à©|Ò òóyŸ8ñ“²týý»h<ãªñÌÍj EV4£-Ï“»Þ¥¬à¥ë“ÒÝ5Á:Û~I+ã&ÑÕÊn?Ôþ-îJä’PÍ”èòÝ$º\yP÷ìßñæœ\8Í×'¥ûßô&Ñt%‘›.Û¼““ —S|}Rú8‰V¥{åÈ¥wÍž•#ŽÝ’”>F"±ò’ŽÛ z·4Ã_îÀœÝ’”î?Ñͳ—\Ù{Ù%&ìÎËg‹™WÇÞ©›Ãmê•7 ´g }÷/8Ç?·u•Ú{¢cò½÷ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ˆ¼ñˆ‰ÎñÏÙÃϾÙ*ŽåÂ)VšÃÿgÊHV¯æÑ‹âhnë7ÊWÓ¥‡ù¨e…ò9~¿eöÈ^\Sr;غæÂKÝM¥™·êü 7BUC–æß®b_Óçbû£ Z¾ 5IŠ;Sj²N½¢[—O›@$š«‰ª (7„´D¢5÷³q±ïDv/Yn.€Å‰˜N§~ X.ª(¹™i¶|´Ò\Þ‹ ?ۿs¢y¢D™¨Ôtu½QÙ¡a©N÷¼zRWDÆ­¯T{¼DS8°âAý‚Ç7’¨¼(6'šƒP†^¨D½>YyUÅÆþeÝIKijÑ,"×Hš¦úèSój™hÜÓ¯#UÈëN‡Ø ÷¢SØ‹:Þ:*Ê[f‰Ô‘Ä[EýSC`=joècÌA©½¡Ïã&šX"XõAE4ð ˆdE”F&±gøˆFÒt»¸¥x—‹ëD‰Œ#R'%‘-à½Dß®ˆ¾]ý[E$ÚŽHá^ô··ýÛÑy¿ˆ°ßOÕÈý¸"2%шð–:ë‰~\'â/Lh0}ìD³*-‚'Žhž\Û€h DxKõDÍ%¢g¦NTd§Ÿ$Q_55…‹±½hÙú¼ ÞêèA{=P6‰õQT~žÒ²b¥ôù+[Ì 1µYkÁGÙ?QõÊD o¸SÖµ>yÒoòžDä³’ç¬Cx$ŸDö^›HÔ±7ô1ò’“×Oã-ºìÙk—g;Ùè»ÆíËÊCVõÿ³÷6?’#Ù'==UL@5ɘÎÁF…%P‡¹­JÐAÙè·lèPÇýPõöan»‘С¢ —›G9FìÅ›€­Mc- t¸‹B³BñªC¢ƒÞÄYl£ÃØæfûž‘t'=ü3Â33"3^UzøI'n4{öì}l*M[~lÑUoVä¢iû^p@µ,Øêļ}>W"]ÙÎÆä¹—Õˆ »jeÞ¿ ¢³ºu÷ªlP*EVÁœ ¬ð:Ÿù¢fÌÆ peQˆÏš¡‹wÙ•íSó°yª«+‡ùí5ÎÓÕ>ÿÜ‘ÕébèÌ!RXù4^‚ˆD˜g²Žèêúð$ÁùÖVˆŠO+ËÿvˆN¯ü›!2%QËÓ‘Nq¬æ%óÌ™.¼ÑTáº6o´«­h’c+ÚêF+àTC[!ºð/ýÕ1lÿúyXž4zµ¨ˆ‰Sª~Ì˹_¨¼Ë›pQ ªÇüd³ÕÑÆ›«ÎÌ<Î/Ôo$sµ!]±x³R6(!÷7ay:ª½‘Àžê Z]+§øé+ç™…•—ÉÜ>\XC{*"Ìhygˆæã’ˆ&se "Ê‹ÃÕ]ƒ²ÙòLútå©àÃiù=[éws¥|ùŠ\sz£r–rZHîLjhþJ;Ÿ!Êj Ãf³ã¢¤@T3›- o,§øp²åN× ýžVˆ¾@Dój¨ª*Dã¹ñn!¢ @T³Ùò­“õ¥uõqËëV‡ŒrÚg'œòY¸­ º=±>‡‰Q{HeÞMð»N ú’èYü‚„’(\rVŽÂýî!ƒîÀÒ¶ ÎíÖ0ë;f™³7s™7‘ ÁˆV":¢4„Ù$œˆN“´u‰>uóHrsÃÀö/Å3bgZ8IÝpÍ’sðF{A# “¬<À sXff9î¡uâ¶Éú2ß•ã\ÈE‰çûSD0]N2ÑÝ·Ó4Ck0‰@MþJ9Ž›k!)lê…!®5;í ÏŧˆhŸø¾'ñé(>bó˜äÞª¤ÊïJÖ‹7ˆLŸ¯º„â‚¥.õfã‘Å\+v£$/áR=l=ès› 9õƒ0+l[ifò.JF¨§Ã\† 4І¦õ¡­Œ½±+½¶l…¨çP ˆ:Ì«;Rôi‚ ¡a”¤¦ù%¢ð\爔gˆt‘6ˆØ Ñ›ºÎȈP DÌîÐ1"RVM•ˆQ¿šÁ›€Ú@‚Ô B•<Ô¢a«D´c«@$1Pˆ¼‘‹¼™l‡hСY¢°„{ma#"/„vQ  Ü´Lyç+DDÅTÁÂDWˆ’Qï:•ß´ì‘Z€èWd|f {ˆèÓ±å¾bïN¶C4Z„H·¯"zŠÙË"ƒ(ÞÇñý§›!ê³_áe;DñDçzp‘ÂÄc@4I6CÓùx÷²"^ ¢ŠÌ¦éç:(¹—A…H"qj© ^¢@UˆàáXÍ#dé™Ô©&´hݘ´ÍÕœ9­\Û/ÑH°yú•í‰1ˆþÌÔ¢¼@ä‡î$Ш9B ƒÈ×cøÃþ†\„I‰HN¥€H•ˆh…è¯W¤;®©ÅVÉ"_Pƒ`Ò0„ßZólŒ[nn`Ú%9 úäÌ™ý¦“ ƒ‹±ÂKõ&%"Z ó Ñø²Ò‹à!W¥^DÓ QÓNиÂZ“(5¬<¼4”Õ å ‚T¨cD´ùعÁÅœ“‚ßµëŽÙ3íz ®‡£$îf…vmÁ‰àØOÃvZ!ŠaC× ²¡çâG¢©ê¸QýžÖN­: ]ú£ÏÞË›™­HÕŠ2¼Ñv׊ÆÓÃ#"¸Ì4ùµHŸL›¹`Þx$@CŽmÞÊNõ'!ÌÍ D¢ ÚuÔwÂq¡ñ¶€?ù{ÐáQ«@Óº¬X@î2ºè$PØ Q™^&i¾4t.ëˆæ¬+D_”ˆð!Ü8‘ÏfˆŠ– ×Lƒ(î’>ÎfúÐ?q\+¹#ÚÐØÛãTËGûÄßJÖ¿ƒ~ î÷ váCô¡ù»Km#aç9åÐþkYĆ{8FMàb D÷b÷3ÍbÚ1iV5Z&,5êÍÒ}_A´$¯Ù¦¹h÷a0t“xº©çñ3‹ °ŸÛš†¿§‰æ/>sr/S_‰gÇêeq£=#ÕIˆµŠõR¿"¯˜Î½¯[êo´>ƒ—YÌ^µþ×fU£e²vÁšâã&ù$¯|Çÿ½x;ƒc¡Pjñ>õÂ(BDƒ+©ƒö CÓ°ˆä¾í&Q&¥z”ɯ DŽãû:Ålê”à{„±¾ˆèŽªa¥d4sU–Énz£þ#»‚hÉ'[,EAC@ÄüÀMwmÊêh⚆=‚™ÒI˜„Ù.?CCg὇Ís¬U”À{ì14!zl#"Õ—ˆÈ ÑÚ¨j´L6pžÑõütþ›™Çm. kÍM4Ö(BÓpC¤1á< ’z¿D4©#­@T¯j´L6sÁ:]Iª¬FV/¯åHDÓ[#¢~zZÇË‘Y½ED Ÿs ¡-Ø úÆrô¨@¤…ÔÒ"hw©XuDªFËäö:òµáS°™ý "#Ï3^ýfõÖ r3¬<á|°@Dqí²@ÄE1Þ¸ÌP bº†¨QÕh™Ü^wÐþjD“‘ú¼Dô«"N D¿*©Ï— jT5Z&·Ñð`%¢¤D$ÂÑÓ"\q@DO D"œGD|ƒ¨QÕh™Ü^D|o%¢¨D”—ˆÔQ ‘jDê¨@”Ï#b%¢FU£er{É DD;"÷rŠˆj¿D”Bw­#Ú´»F£ñq1¢ Á$=Ói ¼„Õ=òLò8À8Òqx9äìøÈ†±üO` õw”ÿ´ðêDdý×íÂRY|Q%;(­ûýž†“4¯Û ü>© ¡_uŸ8Y¬¾Òû&Áµ}Ë<´¸Ì"šŒ@â …W¿öWè¸Ó¯Û‰;ä6ƒ7Gï†y.(Á xè7¢ˆO„¦Ôv.1ý&ãŸk´µ»ÇBöz=êû0óÒ™PŽã•^ýš¨Õ‘aïFvЊ:Ä#aŠ%Ü Ï‘‡È…b&™b"»¸ÖLìgö;4£LR£LáwRzõK[/¯»ùîd5¬"mýçQ„ˆ°‡5¾z€ˆÁô)@äWˆhéÕÏÛkßì‘§I8l•ˆ°X¶üc!-ƒˆ[ˆ“ÇiŒÆ.ɢ«æjõ8ìÛ";A¤àŽÒ%¢˜¡~¤ˆ@ï³ÐŒûˆËOkÌB˜¡“¾êPMJDßÐÒÙn³÷Ѥ†Çí¥ˆ~_ b­ÅˆÆyé¼mÙ ¢¤†HØFËv"úe‰¨ß[ˆ({E5D8n“eˆ^•ˆâ·†È'a JDh(s.”+$=CD\7CÔ)‰ý9¯!*¼úßcD> ],‚Bèä2Dи\@ô†E?ºŒ-¹ºwMv€h·‡Â] ç> R\ÊHùé3ÇuZÊ`ò8œ[<°­gòáÇž=¤Ã'L tóï?C¯~­l2ªÙΈ֋5IY[e©bD ¡ «²Hãj…ÃmüÑe¸ÑÕ½k²D?Ö7V$~âÀ·Yÿ¦ÄcÇÃ:–ZâGp6ƒ´ á$]2:ÍÔ'—CípÍ¿„$¶ã3ôê׺¯ãÙ¹/ß…ˆ&5Ó|Õ ™ß ÓJMgÅÁq•ç " 7ZáQ¬wÓm·ý¦kD/¹ÑòÚ¦ËÌäÊfaí»Ò©Wÿ•Í„]Ý»&·ÑBÉk}újDçæ»Nõ\àC›àzÈÒïB¹ƒˆ’Eϯn}hîùÕ­Ñ@l¾Ë×óˆê¹ÓLR”¥ß…òömºj"ªŸr‚«4K¿ å­#’¹á†dÙ›#2æŒ>ÐDT(\ÏZú](7GtÕ'}¥È?ÛpÃ=¢…KHp|þÇ‚À[mÉ¿£–¥¥c_º±æ?… i,WÄúÜUW£àâ²#ÂNI=ßw.±>;·•Ã3é(TÔ†Ú" jì‘D­—x;/}µéæOìI:ÏHdáÚÄ%–CyF`úwd;áÈ~ÅBPJ«0!ým÷ɃïéöäÎöl¼Ñ,S¿HÙèûÛõ»|œÈ®“%1.íSs£=qnIôîÄä9.!ù®:aŒF&̉’y!ÿœRó®–aBzŸ=<úÔ££ñKKëõLý¢ÐÅü€z£±Èa÷4úmbÙîM"‰Þ™À¬ªx>\«w†+J¹ø©4AÈRR@„K,˜#½ Bë`Ì“'¢«:Ôtײw€  "Óht*û(ZLMwÞ$Læ ˆHˆëø¸\’Š´@T\* ¢%¢Iˆˆ2ÙÅ¥–•ˆ¢‘¾ãˆÌ“A4И7*5Õ†¦ˆ¤eUaBZ!"mY"&¯ 2®éž@o¡ÝÑM"‰Þ™ÌØÃ ¢!Ha+|Ì1e•aBZ""U ‚[¨D$®"#"Y KDw2À¡Ž(¦ËUaBú÷¸ÑdÑ¿\Eô_o "¶Eú›…R!r"Œ¯n"ê±¢*LHÿ%€ˆK1Côó+ˆÔŸ¼{Dèæ¨.f)… 9Ýò("ƒ‡í"YGT… éWˆ(2–ߢ«ÝµÌÞ6"Þ6\+v”-ô%Lfé{3ÊÌD‹…dfáÉ }xÑFDA…Hf—J‡ˆª0!ÝAD> ’_ öºѺWM!z£‘D ÊqÝ%Ž  p>]NN<ºÈ.¸FHnž0\§ 6¡²_¯±ì-³t×t ÏOo‚Ù.°Ú^)VÌùõbD—ðkýýD¡,TǨDôF#‰ ¢šÌØÌ»‡ØMsÓ€I‰H™\¢dËã’4.´kéÂQ»Ž»I©]ˆ┈pdŸ!šh¹ß!kÍi×o4’È ±%SÐsDküuü)¢µ« „D¼mF4KL¸öÄ[XmG4¦];Óu¡ÝVaBj=ÆM+‹áZCøRvŸ³O DcXÒD˜V޹ÚÅ ßh$ÑQ`™<ó¿2нW"2£ËÖˆ<_ؼGŒÒw£1f¯o‹¯q~dÑ዆‡þ3= Ò>r8;ncn1K[?†ÍEï¡=ä –¤Œˆì`,ž86ÏENΡ#ì&÷FD ï®Yø}öÏ&M|x#D1Sdøôa»ßÒú;"ÚQ #~ض^ìYÎøtHÇ:>›… iw¯“À³úG ôè:¯á3òš°²úŸÙÁIÿÅ“[V¿û\íµ¤?qJ{‘ÈšUFι›ËŽi‹Í/jˆø¤B„Öèk0,žÄ,Êx‘ðÝš/v…hHkˆÎ‘2ˆÐhŠˆ`.í!Å9é–‚N7ó_¹:šHî6ØfWˆx Q–ÖýU…hBÆg›œÝ6Ù"Ajˆbëã)"ù—¢„d‘¸õÖÈŽHRz~]Aô§h•ADáÑ­ 8[#»@¤˜>QuDºv£©?3s4@äq:Ëðpwd?fmöQáš)Œû4"2zQªþ£Aã4!Â?O˜qdˆ$Ó‘ATLcubIƒ(TŽ–Ô+ÑÓ-²,ÜÙ"Wê4RÔëó¢$aŠ+‰Äž4‚÷€H0@$i”m=yç²DƒLd×Q€ˆœ‘dbù8Ð#h¢0Öð–ÉÅmŒ8Üoòsfûˆ(3%Ù Åù’‡3û¸­X~ˆ„£SPh}8VŠq±}\ !ÒÑf1á:šÍO±×Îy£-¢«Ü'³77-p»äM!òte†<™½y DéÕý(ÍJ¿à+4“µÕ¾¯áÀج~^n°É)¼)DhÐñÍ3:{óy¦ëjd[Á•o·ªŽÁH¢‘¬­nɧï[V{‘±v£€î7…h¶æQ;‹åëæKÅ j”¾PèÞYG7’µÕxÓ)âþÃ"“ÿ;E„v0ŠO~W;‹%©æW‰¹Ñš~jÖVŠÃâ&š%hmç©q’ºù¢VôNo´¼ #¨·€íç°æ3D¬üÛ¬ÇTGÔ('3ÛŒ-BtºÙ9¼)D“ê'ªÛ··„0óø~"RUPf]UÜz°¼Dóå*D“eˆ.®"ò7;‰ÛëȇRÆ—ˆæËUˆ²Åˆ` ¼Šˆlv·×¥qDóå*DãÍmê7w{qzpç\Ùø~ç ´ÍÎ~KOFxíìæNûBþ᥈µ‡Jb[¿&ÓŠ;ÿÞ¨°¨ Ã…é ]ýƒá'‡ú·ÔVP¦~Sú°ÛJr¹jeæö" ½¬/{öd< …V>j©—’EGŸÑoY¨ãî¨@a;KŽEŸzy¤å‘|âÌ*î`­žP½ÔôæêŸÙ“TË/:r‘•©ß†üEÇÉòh´ ÃíEä‡ýÃ.V2ÉR\¾rù•d¾ÿu‡î"Ù• >FIžg¢K¼4ÕÉlwVqkõ„°K¯cª«»zä9&~ûú‡“ɤLý&ä>qò4åGlù‰Ü^D$á¥<òfè¾w$õ\E÷iˆ…Ä ¢ä«°{Q‚5 gw°VO»¨=Ó;A_”¤š­\hD—e^3! Š0+øò¹½ˆ(œø £¬‰È«™¬á  ÚADyF†h@4Q DÌñ‘®!òÒ»Š³¯)D¤u‰.¨g9€HD†$?‰ Dý¶N)w "kÁÕ¢a ý?½Øâ¬Lý†ˆÜ´ß¾«ˆL½t«JD\ö¨D˜þTvÑà{’p ˆ<ÏÃYa…ˆ¢`ˆg¥Æ€ˆŠêO^¢)3R!¢ðÌÓwѧ%¢_•ˆ~ˆzè®Cá,DÄIèW I»†(ˆQw¹›À@$Z"zZ"ú%"bpæKd{!"aˆž.D¤Z5DÉéÝG4)û"uT"ze ™þ–èÖBDªm©£…ˆt¿†hìßuD®Î« ºkrˆ:§ú—Àeh¹—5D¦âN1¢ ³–S] ”A4Ö,þs5E”¸—w´/"€ô"W%%"ˆROu ¢¿’è§›œñ +̸=ž!Š;‘DÿÌ|]"m“ùÞX})þ\NqêNî&"̾†ˆ‚Ë"æœMº"‘¡ep¡3]éE¦âN‰H°¿§'º@4¾4ˆ¸:—?¹œ"4¸¸«ˆ@¡DÃI‘íUˆ°ÀçX')"¢Þ¨®]›Š;"r°OýQŒª#ñøQ.¿˜©Ž‚î¨ê¨½”Kùe·Ç¥^$å—}ˆöŠ ƒ†“$¸XæÅ¶ÆÔÈá¬âÖê a«g1§@ÄÛ˜øÍ­Lò"õ"’,¶ï(¢ â/¥3à6vÈLwýhÏR[’X6æy ä£qË.šI´<ÐŽ;«¸ƒµzòѾ—è ¥Ä 0úrÙ²Í'eê7Þí©¹ÃW-…Ü^D 7Ûjß’D¼Õ²^töz„«·]¸îøÑôký/vŸ¶¥‰riË­YÅ~ï[=†q>ÌBÖa×òǪ¥óv™úmøä‘Óáá3²üDn/¢Í“Am!«n¨erh­Ü#Z+÷ˆÖÊ=¢µrh­ÜfDo âÅ–‰ßŒÜfD}ºóCn™øÍÈmFtKäÑZ¹G´Vî­•{DkåÑZ¹G´Vî­•{DkåÑZ¹G´Vî­•[Œh–N¥rOV…ãõé܆sÏófYp™°îhI +ÿr¶èS”[Œh?TÕ~á&8æŠ3pÞœ¾çB\uXcQt÷tuèŸè²ó¸ ˆT14ˆ™Û0mºT_AdН¢E9¦IL^Ñeçq‹Íî–ÊÅ\7™Ûp0däʆ±Fx£-²bNÍ>]v·Q- qЍøCfŸœÔ?^,LOʘª¢2( Ró“Q…æ½CT»{–#¢õŠZ‚¨,jˆäüAçäö"ªõÁK11+É%ˆ’éÇbî ór{ÕFò¥ˆŠÙ•ˆÄDeœ âs—[‹Hµ.a”~Mp­(?ðD>Õì˜ 5áTü@þÇZ|d.ÿÆ¢ HGvÉ…«‚ÑEúápëß~æœõ-xqÆY†É¹õO4•³þ Îþ¹‡)aâ§ûο=]âÖ"ÒÞ±:èbØïi˜„èîšÅqï€P‚õwò(Ä4¿n2²á£É8Kø‹Ïœ¤ÅŒÑEü}Õ‚];ºN&Ù«='5¥|þc-ŸÀ‹„Ëî“®ÉÓ­ˆ÷¥'r‹aæfKÉÐ0M194\U¯×íQâÃðV„Éþ9 J²4“û¶kÅò0ºHîJpׯöñBSm%“¤µí†~"${x”›¾ˆx£;ŠÈ$øÖX &<Ç”à¡]ÖU„$<ï¬@dŠÅñÐ+ŒaŽ‚ÑEðœb)VâJƒˆ9^X‚B¿†èõÆ,,cw±/D“"Sp'BDE ÖDÚ ÊQ”EQ"º £‹$ÛÇTíñ ¢.P0ˆp«"2EÞQD™vˆÉŽLÁDD&X|h<Òýö ŽH{DŒ.*é)"Ð!n…Ô"}÷™R2Š„1ÃøXOÈž!¢,f&I˜"rŠˆÓ ‘*áX3·2ˆœÑøý@4!!'%"Ö*qâaéň„S!šÔI¯†H–­è¿¾ˆ »BÔi ÛÃÒ‹I ÁÛÇÊI QVG”ˆ°öÎ͋ߢÜ?oZ¦ˆ"ªv…(þƒHµ=-í%ˆt G4DÕ¥uDiHî¤/2tòïMe„ŽMþ' œbù·m#SD><WˆÄƒH»—º=Cä6 –°ñ+DL{QQT šì‘Ï©>­LTåìÛ1evª]÷Xâh²Oá…5t îÀì¢Ë, ­óØöR­~ ¢¸LÌ1ºG4»zòKœ€XÔsQ/­‘ë$ß2Â^töع"Mƒ”T9ãÅDÔ¯‰Žcêˆ:0ÂôµT6p‹Þ€M)DZÚ7•…ŽÛƒ Å‚;ñ£çž¥œ Rî¸0µãg_àYq›çˆ(N5ÑE}ìÛ¶tì± ³‡ÇÐÆyŽ>³Ž /º;âÉsªéVTü]‡Hh†SÌF«³$í ‚L%á¼®P,@äéw‹è¬öm¸=»N–¤ëÈˆÊÆÝDäWOÒê8ÓÝç|ÉÒ¬v²ôDn¯#ßˆÊ šˆÈìõ?¢†­/ÌjG!z™Ü^wÐ • - D³àb·:Ît÷f-ífµ£½Ln-"eµDŒ¡@?@½îÜÖQ´ ãh[¸†pîÄäÔFiµ%L_>‰e;þ ­⣶……‡t^À#úh?§‚ö_|±oÇÅñ´•pÜŸ»If¢O_õ=Çèò°•?$#?kË< Oè/ÛB¬fì%’=—O>ÆOúŒxD«¯”ã…¦ðg·áñ ­Õ3'õ“±`þ+чmüKh,¸Mîf$QˆÅ†(ýú‡0œ†þhŒ.€ÈM&âSþ÷[#¡I˜D½má“J|_K©?, ¹‰8èô°°Š™º1>¥>ŽÊz=f ÜÍH"@¤öIv‰U®Â,3}ñƹ€ù†d^0DѸDÄH˜Á'p¹äK8aˆ¡CÃ{c×ü0á’ý‚êaWf² Å}îf$ Ò ö©ˆ(/q#µr@ä'WiDô7¬@„ee| ˆŸÓÎDw3À}l/êˆbKàHí†é¢/BGÇ >Ë…Ž˜[ìtˆ…‡ˆ,;=z`í[N‰èȺëˆ~ƒ¼ ð.))‰DD¡A„""ˆs¹Çf4† 4™!JˆNdw¿ËàH"­ßDZ…ôÖ!ú—¢![…è¯ßCDª­b-¢ŸÏÅñ"JKDê‡å{‡H÷1·Ì:D3D¹‚¨3Cô£Ÿ¿gˆè™‡ùs¢:¢±>š!Â95Žh#“Á'p¹Ê>'ÿ…ªÑ}†ˆœ‹DýwÿEÒß‘ó ;½ãˆ¾¥‘wZˆÆ%¢ÉX!"†Dtiu D 1Œh¢ÿDÃ@â-fã-uòDÿ`$é÷$"òï8¢}rêË&¢Œ+Ô‹Xd¹5DÜÔ«bpƒ1öІãË)"fâhÝóDÛ#EN³J/¢'wQÇ!^^"â%¢œDn@Žó:¢#¼\ ˆX‡„1ªŽÄôE E˜®¸‰rˆ=U÷ï¸^¤˜E½Ljí:8c+¥¢%LµÏ gdhˆž#"E*?!Lþ5uÂC,<ä¸fD3{ äÄK´EûÄ z){ÌÑ~·wG¹Xl¨ÏlÓØá1LÈ8Zôœ0’mT¸: žƒ6Pg$:¸jÙÆJCޝUK1{h Y?‰îºÏ“˜E)tH˜Û ¹Àr†‚´Ú7‰$zg¢¬>më±j·A ­~ï1†[µ9Õh>z¨ÿ‘ÈçmM«e}á<>x`õ™ƒ•†)@îµÇ¦ðÐèÔúâÉcËÆ=ãúô´J®ac=>ƒù«–Ôe7‰$ºÅ²…Ÿ—²Ú×ÿžÑMT? D—7 ù0Mî­“Iµ¨vù0 v×Â;Œh°ù¦ò&!ßw‘ÚæÔor™wÑ[“{DkåÑZ¹G´Vn¯ó¯ ›. IDATÌ­‘-³`)Sœ¾™çæY9° tŒ5vþŽe“,XÒ)ù¤eu;DÏçùŸùYÆŽB†ãoh¾/{›dÁíÒcΕÝçDÏçùŸ!êÛFG{Lƾâ6É&Y°âVéæª#zÞ/¶H:2EÔ#$H䂳`¥£²¡¸ºˆ€™CDªg¶Ä@ù<î'ç "Mƒˆ—Þù‹ R>Q¬-Qʈ=ˆ·™DÝfÙ$ Ö)/×– ª,ãJL¿~&>(D˜ëD”~ªèƒJô<">[<®ß;At%’ˆ-ܬž‚gfšBÒ~Ó+½³Úãõ#‰L¬5ˆlÝp“oÀñQ‹ç¤ÝŽÙÍ5"‰„eí±…›Õ3¸ ß5â,RA¼ò#”ëG D…³{¡áLüI#æ_m=²äS¢‘é¢w‚¨I$dç [¸ÙbDÃùÍœ*H±v& D×$2Y°&SD1#MFø¯mëa,±€v¹Éñ&Žv€¨I4‘ô[¶p³Å7š˜ßÌ_´âÕ¯I”ˆ #¨{!ñýpÜ@"Þý¨@dŽ·DõH¢‹ÅˆØ²WWéˆNêˆÈÒÙ(ÅS^6aÓKRÏ,³Ï$jé‘è:øNlq±D‡;ƒ¨ß6ˆüfwí¢R|A”½ D¯Ù•Mš1”õW!¢;Cäí6kEû–3¨_!%<¦x6;G³œ¡‚Í·ê¯6A¤v‡ˆB;*]`N{Mšˆè°B'iì!á[BÔŒ®¿Ú‘Ü"…i÷V#b¢rNíQ#’È :d¨Þ]ú5‰.¨´^êÃ#ûX’Ëwα0C»•P`FùsGœöÈ)ÿ)î¥1á‚Ö¿sz ìo0å+=Ø7ð 1Y°è*Dʲ*D“‘¿“VT‹$2ˆ^ОõųIŠ5‰¾6ˆcþâ€$yªYÏÆÂD°Mî QxÃþ²Bo¤ž“p€{Á龄>j©¯ý™-2½œáYz"eÁb"½‹i‰(¿,ŒGôõ& õH"ƒhc„tÿ°÷(ϱ&QÌQ&÷÷ ¼âG]Œú¨å'‘˜L0³µjħ ¤(F¼÷‚}G ¹”Š‚ýØ0Õà]à„§†ˆœ7IÍ+DiH±!šF}Á΃‹I3¬I„y‚´)CRŒ¢D&u: Ev‰‘G:Ž$ˆˆ$¸——ˆ‰ìQ/1I½`³ÛÙ$ Ö¥>©#J…ˆÆX[ó\¡G¢þv7ˆ¦‘D5D™ìP¸X]CDHT"Šfˆ´IºÑF>Ó„""=(•]ì®Ó›!:SuDÄ9k"šhAF¼‹ú-L| sÎ}4©íÑ4’È 2‰Ð3Õ¡ÃÖ$š!r¢~Û 2…‰p_ÁY‚Q²!†_¹A„{éb°DÜBD¡<@D¡¤dé‰l’ë\±r‚ˆlÏmh×5DV{(…£¹E‰“ìÑ4’¨@Du(ÔX“h†È;õtHˆ\!æ .eâRïc5,“7ç½€(C½( ÕsƒHÝfÁ‚YE QŸ9Z¦…ÓX@¤ÑQlQcÞß "ijÏ!šD3D®ßD¤>Ò®#úª@dL5¿Ò;G×m•3ý6¦ßÒá“#V߂ۣ`ÂPç¸ ˆ†5‹D7[é­G]A„5‰fˆÂ“&" Õª!’U Hû©Þ1"Ì‚Õ/³`I‹¡W¯æ_Öo4@Ö x{Œˆ8‘.5Þ°ÔE=’è "¬I4CÐ&¢<º_Gô§"Ú¤*»ë"*þ¬qòªg¹ÙUª¹z$Q‰ˆœˆ…5‰fˆæ^Ö¥€(þé ‘ú3D„{ÁªîZÿbGˆÊÉÎò©#ò×qS©GUˆRDԣĚD3D1s'‘[ ýè\üÄ šE2˜fì“÷‚ š"ê¢@=G½(¸ ¢ù,X‹åM!ª"‰J½È9+/±&Ñ gÁE¡:JY!’/ñ¤M´Q® "Ük†H0£:ª#£:ªèEÅüz¶&½XêˆÖlº±Ì"‰pÊ`ÙFuìÑ8ÚD5DzÔЮáo._Õ£íhÐBp¯¢ƒR»¦7Õ® 8ëòÕí,UØ,’5ƒ¨O@­¹ocM"@ôez}šÂDp߸0‹x&0 Ó^ Ý qÜ jƒHZêG€U‰ê÷ÒÙ6 Öb©!Z`©¹žÌ"‰‘ ²C†p2ü¥$ÂÆšD 4ÃÕÅðþDs‡‹®3à¹Dוø?œ€Þ 'ÂMaBÜþ3Ü .å1ˆTKÙn ¾R¨oðç‘D>>¬+©ÑŸ=]°¢w-©Eá·mþÈFV™-lE°&QÿâÀòC—ÐȆÏö÷-,L„™ ’áÚÆ^ô$&XO´ã3Ü Ë¹¡ÀzA]ý¸eAG>8¹¡½h> Ö’£ÐM¯üƲ]¶¶]d•¾sŽ|·Ñm“{DkåÑZ¹G´Vî­•xý&5Ù…ØCÔ§[l¼U´Ñ2¹sˆÞ¾Ü#Z+÷ˆÖÊ=¢µrh­Ü#Z+÷ˆÖÊ=¢µrh­Ü#Z+÷ˆÖÊ­GtquÙi¡)~R[„X`$­EÁÀ–§Ñì“SôùgóÛ×äÖ# jÙôK™,*âÇk.³ ÖÌkQ0Ž8;‚2¹ÂØÕ=¦r뵯"ÊYjˆµ²Z ×¢†H ¢å‘Vú J®Þhù¢dDõmA+ªEÁÀ–¤v£¡£ÀÝnE €ÖåE«’ÕãöHc 2÷-_ä¹G„Ï?4DªBT_f'MÈÜs@éeò"’¢º{ilBæžK¶Âsì=D4MœV %MÈÜs@t¨šP[ÿ]2¤'¯‰ñ«ÿA{¤‹Ø:f#„mëÃ.¹põO.å*}È8ÕÜùÆÁô bë×”ÿ1hèÕðû-=–íᥳ‹ºE`Ü9—Ž<ìµ–žÈ­EdBY^ŠgIÆž8ùêï©N ‹‰z©_‘¾Ç"ã/>s’ÿñq– ù YÐ$~fç‘–GB¿bOÐC}¢Õgû:=';V{Î×-ÉC{Û·óáÁ zo4 eùJ=JrEm7ÅŠ(T§i’‰OxŸî÷˜N²\È}ÛµbùGYŽÏ‰e®Ašj)…¦Ïm;Š´qÌâ¯uòLöˆó‰ÀxhEašÀŽwz’)’¤ŠÂU`]¢Ãs@ÄxŸ}¬€Ç0޹¤Yr^|>ºÏ{I„• „bÄq½3¡·§‚çB@Ê8F_áÁ1`é‰ÜvD4‰fðFDÐp„DRï¢(K ¢Dt–oÀˆ™pŠH#"Àµçu½ ÀI³‰A”É Q˜Ý Ñ;ó/‚«ÀœïÉI…ú“Q`haa@j(€Êâ:¢~C¥EH2@‡X‚ˆB/ÓŽ[G¤w‚ÈÐùËåŸÇÞ#jÏeÛDh)}”µ|¼X*ˆˆ"V!‚élÌ D\A:TSDœÖy˜Å=jI2D-aŠÈ ϲl†ÈÝ"ÚµµÂ×Q8íéLÙ<‡ÁT»ø°òQè¯,ºXѯi…h].)ýj"á4©v(¦ DATC¤>ß"ªi­ð˜•Îñ‘y®SD§¢¡IµÝ튈ž*ú‚ˆ‚ÚÑÂ.=]€H"âD"mˆ`l¯#JNKD\b< " ò!RL2Q% [$ÒÖa:“"ŠHá˧A‹±»vQˆ"¸Ì¶A¤Ž Ò-DäÍ "i7ýôgÆò„¿"„ѱtùÎÕ±:"ÒD´] ŽhØ]»ˆ(K8Ñú¸Ñ„`‚BORG4DD¡o¹—ð»=—ôŒ$pã×e'%" H ¢,½"èr˜k Q{n•é*—²¡q‚Þ‘˜"DãežŽ "ø€ý7ækW%"ɲ3.LÄLh¢/$ ŠHzèq(ò¸ö8͸A„¿Zh r#Dxçç«"‰ ,õçƒ*Ý,ÝP·–Xå—K…£|04Ú ÊJD’¾¦':¸LTwŠH ¢S3ÓO‚ }¡ž+r ˆø•iHh_Tˆ0p»@t®o„(Õá|UXHêƒH^ÑØh×Ú Š¦ˆœo÷©N’RuD©AäˆF‰ž"F8?)µkê""`ìcF»Ö¢ôæˆÆkY|ÈŽU;Àç/É` ÷` .lÞîë¶´M•˜b‹–°·Dtˆ¸ÑàÇ ]çã":TVÇb:ng]Ža–%3¢Á}é%± jçÑ™EÈKš j•ïIFaKÙ1#šÆx3¢!¢o®h t@³X´,3EôÅ÷Ø mžw L¢‰-ÆÉˆ·c˜ccÛ¡îg±h%£¥‡YˆH>Ú3ÁÛŽ;„VxÜÖAÊŸ|ÆFò±°T·ÅWˆ(NÇ9ïvˆeÃY¸Œô¢+HŸÙÄ…1înrõ˜ÚjŸIË–m9GÆ/àö [íx鉬Gô32tV#Šû‡Ýúu ŸÃÇ€h<Ç’ÄâˆY"h N8^z˜+‚¡,½#ÛúâÉÃä­a¶õÚ_ÆÄÚßc#L@!‰²ù£­ß8ÜéÿöðÉ#»ßÒj¿eIª/Ž%ë'ì;RØ‹Ô3ÕÒÇZé>µ»­þ‹ç¨¢0—y`ÅÖá#{yBÜõqú® šÅrÿePãÏz¤?Âç€hÿìq©¦àícƒhÌ{N°GpMâ•853dî‚ÈôÙ¼â"¬ªo\}ð ²=8p¿œ±tÚñDÇ >¯SDöhˆÎVÆUÖÌÅÑé³ù#\L;ØÕß(_£Uˆ,'Öˆh`ž#"Ì|d;Etº2ž´†ˆÍÍ•ÈôÙ<‡ó©¶¿úà› ÂZY«ZLVùaϘç¢vK£²/ê9áµù"R›#J§ˆV|DÙõé~‘öœzôãv⯠¹­#š3JÙG´ùI:_}ðÍ‰ë ’_4©ÏzŽübÍ·-weÈm ™[A"³hó“ñôÕƒˆxóF° ¿ö6\™;»¦nYM¾6é™M‡ áÓK_}ð7ˆhÜ@tÌ¡/__9y1É$ Á 욈ÙÕó9Õ~–Ô}õÁߢc4µn6¢½KYÈÏôd-¢£¢.rƒ~‰¨=Dƒ÷‘—Ã\v="ÒD4T€è“™^„ˆ¿Ÿˆ˜Nê|変è9h×Ðtâ. úSDÊD¿ŸˆÆ:LÝt-"˜ÆˆÄÃQëx(Û85ˆp²Ûƒ·v{òoGÖ#J¢A´b¦/l=dh i™çâcûK·‡Ï:6C "Aã'¤=|FwzòoGÖ›Ôf3YnR‹[ºO†äX¡ù¥¥åû…Í?nI'æÚéÓ¶lY —ùsã+)ñï‚ì&QØ{-»Iö^Ën…½×²›Daïµì&QØ{-»Iö6E–Á?s2¯•ž4^šGV+Ò—›ýò»Iö6E0ü3/Ë/›]CiÓLÕïê±ll´Lv“(ìmŠ`b¢ÖÜŠ6^|Œ›¸úxGˆn[¢0¼ÑÈ‚­Ã/çböllélG7Úmrõ­’“¹×Ó=潤6L…th­¼‡ˆèÜëé÷ˆÏî]‘’b˜ú  Oâž=P Åþû7‚@JÈùÅÀÔ÷5 ?Ç_Ñß~ÖâLÙøZØÕsjv;ìÂî—î~Kõ1ƒ70êHás&þD³ï(n¬Gú5Yz"·Ñ>õˆ›ÄƒÔM}x©>#÷1h¨öí¯[êÈ•+èõ::4%“qaû1uuž9¸ÆåÞÈ&^ ã´ŠQGIë='ÅGÏHÚ‡w¿í>¹‹ñh”R/Lħ^áâ;ìŒö0HÈ c.M²kPT¯Û£_whè'VÔQ4JPŸÆ"qFIÄ?'~šfF»Æ¨£(á>–=Ç‰Ðæ¼ÏìåvÕ[‹HÑ_Ð1?ðñ*q$„6ÞØçd ö0€ÈE—á”8 Ð(êânèÖ„\à–˜¾£Ž¼ y˜]Ü‹PSß§d¹uþ#R ihuC$&‘À¹@„WŠˆ¢¬@äDÁ QÍ$JRƒ£Ž|Ì6îù‘‡Nw‘#Y`i —šAhêˆÐáA’‘ö"ÝÇ*”pƒwCDöû>*¡-½"u'é¶d  €k'ø²@ä…gXËlŠ(ÀÙ‘ã;\®06îf¹™þï1b†ú3í‘"y7õ" ¢¢Oá_«@$½%ˆÔç™nÍ#:h úýÝD40ˆÒeˆrØï)›Cô*D&0àÕÝD$?.í`ɃQvR"RX !GDbÏ Š‘ *™´2‘®—Á…Q ¨w«í“àb†6TˆÐ zW±oŒv­Ûé#àÊC$D;„!"9E4œŒjÚu4gˆˆ3JƲKµ)¸‹¢v­ï."ê“(Ýw†Oªˆš@ !;fDc°ÑØäA;xŽˆ\'nÇ -ªa]Ø}èˆЋˆÛ\Øe"YˆS^06#~×ÞÝDD`–?;dCcHõ˜L ï¶ìÁ˜cœ¾æÏ˜–ÞÛ–dxÌmtìTöØD¯Ñ˜ˆâ±rÜáŸÂ;u4F·t{øä¨CTÈõÛ¹‹ÓؘŌŸÅ„3Áb´nÀ¹b ÐØ=«ÿâÀäx }ÑP?V-Þ‡0¡°§#ˆFßAlggÄ“áó¶%©üÍIuœÉÿ2~ô«,jíî=¸ƒ™g"¯ºHk›ø¿Rü«É†5äÅrg]^§€…ÑéŠûBî¢É¢X©E© ×½ŠèdízãÝ@”_E”_Ò˜GDßDé"DÛ%@A]ê ¢µ^/wÑéUDüÎ…8×›Gä¬]*ºˆôÕ@ ±v$Z,óAÞýµãA4¤®‘ ež,*˜kö¸Þ}HrsDÓú•ìÆ‡º² "ÙNü%¦¹À-=ÔÎ4¶ Êæ&ûPº¨s`^IGåèÕ‘ƒ·Y¶jE¶"03–-u ÷™Å.B_1nç‘hsËÔÙ¢¨ÁÈj¶†wÐÆí,¹¼f×q d+DžF£Á„KÕc.½ð#ÁÎušæãØB Ì:ü3LKÎp¥3 Ò<ŸLîdø‡‘-uhªÏEWuØ'Šä~ø/ìLGÉ?“˜H\µÉÐÊ~ ”d¸†s:N³\œ7ÝUï’lèéö*rNÒ׈(?ã§—ˆ:•³ÐLÏeõ´Óq8I䇅èL~¥ôÿ¡É9M% ò²Sq:AD—˜üîµ ðy’ dÑ$•gk'Ô·V¶EDà|©Ÿbqñ¥‰„îÆÃlÌØª'sˆ m?óD(Ù‡ƒuÜ ÑïѰ@” b<À’Â-þ1Žñ“ÅK—™AD ¢>.8LtŽ„¼B”‡DãdÜ Ê Doàäߎl‹£Tˆ¾GD‚ˆP7<JDi@4Î?HD˜pbb)ökD¤03ö­1ª@%¢Ð,¨[¢Ô ºf¤±›©Æ[~mÒcžžÏ@×§ç—ÅóÒNV™ËN¦Û‚œã©œn~ Û"Âe˜Ü ’º@ä¢þËàz’Q”sÎQdåÛ|ÑLL@LSítt=³B¢«`—¢Š¸e¶¶ò½òOek*lE.Žl~ Û"’ö Ñ+ƒ(LF‘ã‘WŒhtGˆšáýŽ®OøWåQ^Qµo—‰õšˆª°"S®&”W­O«d[D¥ÑDÿ Jù§:‚ÿä2D¾At c<ŠÙ­™_Èo˜“iñ©¦a•a›5þÐj[”o4²ù)l~ÖÈ Ê+DðÍ~¨o5©5ˆ¶·4£0ó8EtRþ]ˆ¿2l˜Y«.«Üâ´DTl|¡7”-ý'DäD)¨Ú¢ÈùˆÈç¥êXG¤˜AäoóESaæñN!:0Ÿ&ð×4à "‚ölQÁ®"’' × c/o”)¢ê "ªú¿r ¿hãÎq+D®êá)1ÓXß׌ ¢3ì¹Ñe…¦±nÈŒhÓØëÅh—*y…hº ²!¢j³r Ò@4¿²T¶Bª\µÔß©.£ôwŒDKB‘ 4(@¡˜é Ñ¯õ¢(̆§‘«0O&r.äy3)Í¢i,놈*Ý Œ¿j"Zž’iN¶BHEC`q€&5ö=Ül˜aZ±\1š\Tˆ„&£ô“@g0…“K¥1©m}§qzpçÃÑ9æÕB#ð¿‘ÓaQ¢×TÐd ((ÊÆ²C'a6äì5±5ÓÇl(ûÒdU%­3åxš[½®ît­}ù‚Ú4Ó±¥iŒY£%Ãlì´ÍÿR@ÿ¶òt’ó­—½B/ëËž=OB@ô°mé犦þçä{ü!^‘oÙS'÷~c)QN¢@5̸ì>ù¸wŸ8)Ib摇m +A{'¿iIèÂcud?q ù°}ê„#;uá»A$lLì[l GÂÚõyh÷áNZŠq,AÁ?BÇ( t5tIGYD÷1̉·Fä‡ýÃ. “,KÑ(>êŒhDˆGñî"ûG¶DcÞ£Ð/æh†6ž Éìã1<¸¡.õFc +c`vÌ¡5ÃÍ(ñc8F¯ÇˆòϽްDM¹Üd£Ókž$\¢”g‰0×Õ;a ‰GpÌp ¸èSÛ£ÔÓ@cŠˆ˜Âaè%²g\‘u ¢DäÅ¡0 :UÖe Ò~°¢°ÕGä_ûð4Éä £¬‰(,IMö) ‘ì ¢t "V ²Ë"¡JDR{8ŤáB´ÑÜýäºGWz>D„N®UY6 ÒÞk _¢ŽåèÆ"í¡zP âƒzÍ"\ƒHY+²_¾ékvÝÍ "øyƒÜRXÜŠàè-LøO¢ÝDu:õ‘«ˆD”D¦ ÂaŠFAÂLÑy·“†¼aD×7¤Õ}Z"ú—Ѥ@ô{@¤>_ŽHzuDu‘nÝD×OY3C$Z"úy‰()ý‰p9¢¬ŽHþeQDý£[€èú2C4©ú¢ƒQT zˆòˆÒ¢?­!’%¢øù{ÈÕy5¢u{Ô¹D>"bþ“¤9_„(ª#Rf¡s&Ú O Dл­H?t{@z‘«’Q倈D¿Diˆz˜WyˆˆˆRõ D é¶At©ž²Ñÿ·(ÝO%·‘&¹A\Ö¹ç%"I]"UÀ9ƒÙà½È3ªcj…˜q…‡‚ƒHï±}çÜY‘¡é#Õ 'uDƒ°Bä¼ÂðD¤¨½P»öjÚu¤KDGæP" ˆŒêØNmoùÄÿö"òR.å—aÜ—zQ÷yïGC=Æ ˆÕÙ£N¸ÉDÑ>A³B‰è°Bä:Éß3D>"ú$¢eF4†ˆN$ëPßµ3Ýwú7(¸óî$ˆøKé ¸ÍŸ2Ó]?|lÇd œãöÝ:Ø6‰_d¹Ä$¸â+¸•$Äò¡ˆÌ߆Çñuý`ŒaE8j9f“Ä‚c&;̡ñÂî""N3[í[0Kx9$Úê?#©#˜%Úg1=Ò.yÂx"Ž«>Æ^Ä?²úOä«ÿÅÇZãÇN̬>ÃU&_k·ÿ‚:Ðþú|Ì1i¨Ç§CÊ¿âl<“Û‹hƒüBd‹ƒÔž/ŠBZ®ä~ˆE!Ý#jØ…E!-_ù`±ÚóEQHËuÇÑïXíÅ¢(¤å«Å ¢†çÄ¢(¤“¥»ÞfDëJblSeµ1¦o…t›õéêÏk‡ÖJc~±]ÒmFtKäÑZ¹G´Vî­•{DkåÑZ¹G´Vî­•{DkåÑZ¹G´Vn="AÊ'´þîIc›©sE}Mµ01Ý|K]yw°î n=¢´œÎ5sJ™+3»­Û[ƒÆ'Õ[&â¦>¨~²î n€ˆ¿•Ðû¨ôk ª"cJ™‚¨[í ¢f ´Õýcå›Ì<¿•~åbGkoÎyrLo´z+27Z3Ü4-]¸ëïʵþ=7@tvÍø©íÄ_d1]âìrZCtb§0ª5{DtYGÔŒRZ$7@túVê]‘EoÞ.D+*[]3Äl;!‹Þ\‚ȯ!*¶˜Â¨Ú"™ìÑ:·”´Hu\ûµ}ã’`ʲœ®+nÕÚSAX£É•wôRDµ,¨åSU†D²#òy[ŸNæ6qb¯ZWÙLúÊéSE¸ ×£,&ž¸ÞCí¹‘ª!ª"?YùºbDÆ;FD‘_è=at/[îÑPcA„£´P.Ï>…ÈåHX¶²ã#ú[zòšHìs[D1?Ið[jëCÆ©2Z¶CÇ}Ø/ö¹nK0.GœÅª¥œK÷\P$2<€Í™VpìÙt' IDATë¿Ú#}³0Åb[‘»)„o: ù×DSÉPo‘.¼Dä†ãš’’ºI8²àæ™ÄO{GŸ²†ô{êMÒÑGvî7Ú‹"²f,Ä3¡¿e7 “Á¼)‚” áwÀ¯¹D¿ÎßiD,rƒq-ÜÜ £„aî|ÌKýu‡Ún ÷aèÆn£,Ÿ~}ð•Ü'¾'Ì# 1&Jú‡=ôÆÊ0¤ízyÎ?“¨@›ûz2É„z$ô>»Y˜Œ„N9%åøP!DûöÍKõÿc²ˆÙÒ¬þùöhTkð~àeÆÛ,çÒTÔ!a:ÖÆÅ5ƒŸ,Ksålà»ÂµØ…©Z RÄ 5"r+Dï…´¸yïui×åÅÔ º6›R*D-DÔÞ‘ôJDŸ"¢_­Fôi‰hR"RŸ×I»@ôû#²h ‘чKD7–aÚ :Îee¢ñ¤Bä˜0ª@„Á3ž~ 8‘0WÉŸ–ˆ’‘kˆT«@ôË"J𠥕áX>¶w‰h\ ê#"K-C”M%9¦ú)aðŒ§°»ö "o¢IÕE%¢¼ŽH÷ D¯nˆ(@/ž*¨ý”ê]"jÁ<c°aª[½^©‰¼B„u£QnF4ã«ïÆÁ”ˆئDä/P€("¸˜ø¥AÔéÜ,L&@o ÑXcܺ¢Éà*¢ §@ºS‰Hm‚YÇ€ÃÁGhaVŸ9Fm¶õcK9°£‡ÏÙ hdرx2Ü#ZÀN\ëó¶ü‘°‡¶Kn&³‘ »Aó2D„‡Óê‡sˆ¦Â§öà3’\‘¾5{,eÕÚ˜¿øíëÇ€hÅo"‚{ßÑ‘=^³çzD4ED~RõÕ2DçSãìÙBïDÌKyÛˆÂ&¢ßÙhRóíáš=×ËP+ ‹—£yˆš&µ©œM¯êt¡ý¥H<ÚH?º Ñ¢C蛄É$h¢žM@Ñ÷0µ-Ñ(Í¥bðgüÚMý(ŸûúiùG#"˜ó•ˆ†2‡'[„(š"ò]Ÿ2pÔ¦ˆ–Ù'®&3V q4íÛ˜I‚DŠÀ//`ã–# ÃSÜÎõÂE¢ÂèSˆ»hE§H‘V%J+d¢e¹ O–î±Þ¤fa0cR“Ö“‡Ð~pXµeÛüà7¹Ñ”å"‰‡YÒÂ¥F 7õ@.t´(,† »áº›­d="#+L»»’¥˜ê|¡ù“'W¥¬ °ÙJÖ›÷~åy+בõ‹DFè›>½ ¢÷–Èú¥F|\i•Û‘ÜtùûÉÚkjÙ?‘Û+ëÝðáî&Î߬wžÁ‡ëçûzd,Ýôgþàä&Ž|ˆÜz×ôw/÷ˆÖÊ=¢µrh­ÜvDLOÇS,±Â·œš:ÒËʺ5þ Øº9DzñòAû–#20aùÔYå\Ì”*£Q0®‚ÜÆÜ0ÐÍ a±¥«—É-Gd"ìò©³ÊT, TÁeÁtEî ¢I¢›ë7‘Z¾¢sË™¶–OýÍ[QšU3ï+7Ú$×ÍVTÜhË wÑI8}ŠˆN–o©Ï "|–5lö„'5 e÷uDïV»¾ˆa2–Ö­SNpç«cÑšÄe#¾RjkQÚþ“E‡Á §MDtñ𣢒žGT7æ "ZR. Ý‘ÏÛÒ™†É¸Zv <ã]{ù"8JlkAûT2‹ íÌt–6ºûR] ï§]à‚j,‰©zz—ÑùÃÀ…«&¢eÖ=ó±—TÏšˆêq1™žÒHÙ}ÝåmÑž†ÉDZ˜ Õ‘^ƒhhë±²ˆ„};ÁqV¶aÜŽ}š"tà0 :åR¥,Ÿ’ùÃÀµÉ&¢¹Èáú–Z;x½FQh"ªG£×mQéXt}D&·¦a2‘ÎŒ© ÝÕˆ^µu0Eàiˆü`}[ŸÐÄРȬ¼íÁ6Jbiµas¡çÜV3-ìÐÆÅ#ÉN1®‡Ä³öHÿÃ#àÀÿÞècy ®…%upäõ’LþQ˜¤p¡iŠÞëÝ}ûÄ\~…Mêxu€wD.™%‹Øc•Ûé!'kö Gòþ a˜Ìi•ňÎW#ÒE.AlâgŽÂ}’ÀQàE¡²P²K@„e:tã<=ô¢.ºë,Í Dz&–¿¦! ¢Ñ‡°ð ˆG¾‘à ¢ çýxíû­õrD¸G¤Á£Ai«E"?G„×_Bt&Xi'*üéBhRÑQ²ŽhŠˆ¸Aåˆð”‘Òˆ:¬ª\‘…9—ˆ’úAˆ$Žë’dÜ‚1­¢b’‰gзbG8e†ˆPðR8¡—…6õJ&X³íˆ†2¢„TýrÑO÷"úÝ i7™Ya‚…ˆ¬ƒ‰:·˜$·º1ˆ"CJ,Í)£I´ •uó£é‘Xï®g›á) DTµn†h ¿ö‘B+èºk+él'ÐÛ¡Ѷr”we‡9"ˆ¨DOwF×)œ£}¯u3¢!¢fH ¦#Á†vh£ãиÏ-Ý}ˆž‹ ¢ÇNŽ(™Š]?CDðQD”Ÿ’KæÑß3«qrSD¬ŒH/LØ{%€(¸Ä( 1ô DW]nBtVO“‡0‹±ÇS\á-§Wç´iv¼—<9…›ô8Ÿvj¢ˆÎ¦‰xtâ`RAzgˆ?ý¤éØÓ]´ÔÀ Õ┢©l¶i>°·æ;‘TeDçF†È»ôVÍat\G„. kˆÆ®Õë| Þ8V´>ª­ð‰_ÿœ†Œœ€ l_:É…²“GpMãÞ³Ö T–Vï{|Þ{ö作åTžÔ8ÏæëEÅ)axxÂ0+4¶ƒ8ÄMæJˆ¼i¬œ¨"*mrFXÈyÊ;„ÆÞ\µ€«^’å^ÊKDãj²A”Á\r2?WB¢=ÑÙ†×Na¼WÈþ*‡¸ÉÌ DCå cEêˆ?UVgg–eC³>¥±8—æ]D~ Q*Ù9 â8+݃hR^ƒ¾!û«â&s)󅜡¢ÃH#:S®F´ÅzšL7@¯¦a·MR?cÁj¸¹ÅMíCä_Ñrg—;¢_J…ˆ&):¬î-ü†ö!\ÑÒ»(9vD¿ºR> òQy\ú­ÓW6·ö{rjD—É¿…F×°/ù7çQ?w_ªKìã­t¤Ç}þÍúHŽ-bÃck|ûêsÊ¿oæ\6½‹.çÚá_tjrBvŒûoÑßAÌÔ¹F´\»–¾Q“IЇOèh!%mßEOêÏìȯÿÚR$ö ^ƒ>Ä>ÞO-ÕTèV4NÃ~$?R/ÉK†':åOI„ôêЊÿ“Z¯k‚Gú¥–Kꉓ½z\Ç×/§pýl ‘êñBRÏ5¨«Èü ÀçÃóã8š&Œà%##ìÀü¤Ýí2t+ŠRþí?I(…²)ÇÇ*Æf ½‹|ãp„/Ø#qeâWúÚE¶• F±¢QéBµË‹¤ÔÃéÌg¾{aù—QÄÁ¤z‚¹º§öSÑÑŽ6—€ˆEðIöMûQ—ºèa•#¿¾ñ¦Áìì »öƒMA7¼}D…¦˜FTꕈü%"…L0}E j©D )@$Tc‰ÈÛ†H÷àÇŽHptý 9¢’Û¶ö ’-ËD&Å ö€‚RdYºˆÚh4?2ˆEÞD±š|•õ¶ï\¿uD3D„Yä‘(]Žö Bb@dR ú:¬-…>„Eô5Dáíù Dø)8¤%¼P|8 "눒*¢d¶zí2Dôw¶Tº•‚hk¯ ÑÌ B_8Ù`~B¶"‚CÑ/ˆ~³Ñ/ï¢K£RÜϕ싴WPŽ(2ˆtŒÙ†ò¹½ÒˆÞ_ út3¢÷ "Q̱Ë ƒ¨äP¯½‚rDA„æÞê=(¨oE‡‘l/57"’ùˆv…–ªuxe•LbµWl‘K@äDÚæoáõL#ræUDloÎ̈Æ9wHeg#"aºk‰ê&"lŠÑaäÍI6"âˆ(ö±ÁhDÚ¶ùLù“) bÄA×HVBä¡[‘FeÿBQcˆÈYCÄ " ]#zõô¯_8¦hà³-ˆ¨sQB„ÊË¥˜J‡ .QM z=G·¢‘ _éNä¶Vä-ß–´µðGñê©7É!y@fÙ"ˆAdneì(ÙN÷Ä0¬Š¨Ã›Øj‚ˆ„¾r‹BÉÚ–(Ó—÷QÄTЈ.6#:¯ü¯…aC„¨[@„y@²Yn°q¦^–õh ‹Š×BÄkp¹Ãºšôüxi±T­o¬›ï=nD:ˆÈ'ÎÔWUDÎÒLáZˆ²PE*è+ïn!ÅûÕ¡•ƒÕùC²¼bK'G¤6!¢•ÿ•7^"è¯}±È2!%DÞ+#ŠLŒ2Uçˆ(ËAÉx¥^aôº(ð+’M7½k©¼Ûúza¿pØ:›OT †ö^T¼¢ Ì qˆ(üʶñÚÎW|rÓÇå}nÁ;­0”‰_"Ìâ‹"ÉÅm!Ò.`ÐùP¦0Î#ÕZ©:I%ôjœ8—Òïãj”°„Yð•ã¹ DÆHNÕ¯ºŽøé\´óèä·N¯MFêsj)–;%,…øîj¬~.ôI﫾ü”ΰµMÉ2^ ʸ“°‘xî¦.,mlßW–¬9]‹Ñ ¤ªK@5ш ½jÇá»iOtíÙtæ#¢‘5¤1ñEöë3ÈøñaçÉ‹8fñÈÒgk<²G’6ùSâ‡,w6ŠIšF[RÚãOÓ}’ÒP¾ÐEÙv“ÙCò€ŒI.2éødÄ%ÚˆÈbòT´i¿ F½k!ÂDu5d‘ƒˈ<¿÷¼ƒYcÒ%íñ=6ãߎt (÷žÒ‡?ÎP Î£H<•Ýn×q|Ñ-œ¼*à¹zÏ»ân¢Dˆj}Ñ«;[a0+EÒ¸£¤Mo3xÐzD4Û‚~R Fךíeò)ƒ? N¡‚ %åë$ <¢8Ÿþ‹ | ìÍY¤siD¹s †$…F4ÓTDn4•Ù¢®/:…9¤ 5ô'Þ%>×>I|&>©[t³< É¿)ò€Œ¥ã F!ôE‰ ˆÈæÓéýáîØ§«§• ‚*†Œ;‘ªaI¹µÓ(Mæé*"µ‘$©2¢Tˆ‘Z"Rºý¥¢EŽ>I"R7C„y@¸“FèÕW ëÑYäôG»cŸ®HOPÓ¦@/iO5¢JdÉGÒi*Úqæˆà^C ÝJˆ´ÿôþdX Õ°¶D”niDíÜÙH¹iCŘûpZ"J¬çú\7Ë£@[Q4] k¼ó~‡ô•ã_ ‘´ õÃ/Šccßä L „—æÂ’¦4¬ñ‘ãG Kˆð "òa ôÕ¿ÂÄŽ‘±^WN 5d*ÂÙ¡¯æ®F¹¢ñ¬^ Êäc@4‚ƒ–ÔGʤó>¼“Žº^+ ;l ‚+œ’çÑNà¡”çÂ%Dß. 7Gô툸SAôb‘pSî”5 "íY"¿#DÙh"i=ïäq¸yL›‚ˆ ç7ˆürþå%"ñ£Qš#?ÚˆHÔˈÄ_® JÝj,±†Òˆ´u¿Y?,Íåc«^BçE>}D¡JʇøIÄQ^àZ"š-ú¢8G4‹6"Rµ ¢·‚(vS¨QBôžA„¥×cÕ\Q°%"€±DÄÂçLž¼"¼yÉæ‘™MhD¥é@h ²¢Àõ§ª­¢¬Œý‡ÑÆÇ±\"’ÌÙWeD –ý-"JÔ9ŽÅñ͹|+¢ä9ÍWE¤rD¼(© ]X‚^4Ñ‘ ˆ$ Š*ˆÆÔÌLÀ±¤Ë–€òˆ†³*¢vŽˆˆÐˆKJB˜¨„%ÕQ9¢QÑ®QÌ#£:"L á9oþøæˆü2"Çž—ô"Ê9ý¯ˆ¨>¿."\""Ì·§ç÷pÕA‘Ãüéc?¬OzÑÀñÛ5@4 iÿ!ó°¤Í’:|˜#r¥ÕDnîl4p`ž›â W"$0”‡¥‹Æ¯®aÒh“E"BéÔâQÈ D„sçDt–iD¥,ŠzAV~‰³™dúÀXs!b\"Œ•‘ã°De%ߨq|$œ~b'OQÿEDó¡¨'l”—ú‘ÇqÑÐ_Jt®8U§¢a¬Püa”eðžÀ·)2š¢GŒç‘8¶Bý}”´‹Í®î–4@DÑTçÕˆÐÅæ š" F Úàg¢ÜtQëŠ2Gäã„J{À¥z\OåÃFT޽44VŒ|ñ]¨”*Ç Òt<Òj3"å@$QXFZØ1’4úç =qxnÖ¾#Üõm!JQ j+"²,ƒÈ3A"Œ:½@$rDVMÁ´Î9¯ *w .z JD$¿£¹9"ž#‚_3"W¹b(¡%D¨œas„‡•´@´Ë®ã]¬ :7Ӄ툴Œs}÷×Bô›Ñì DÜYA4dQÇ® jnèq‹ˆ&Ðn8ºNç3Ëa›A æØq©"¦±ŽèÓQTFä[‰:"‚g²@¨[{ȲLÒóËsP˜ˆ¤šLæQf†» Q˜÷+õŸ¡o¯ ªØ]oCTt×A‘» ‘ªáˆVBĈõÞ4¢T2ˆàr¼Ñ•šœçˆ¢"·„h^ ж!JÔ?¬#Òt‘Gœ%"ß["T µÝ?Õˆ¦Ð´¥MWðñ½Ù¾tµ® (Fn ÊMÑ\Q•™J´¶÷qF2f¢È¥l«—ˆ(ƨlš®µÑX~•’‘(â\-¡7Бäˆài¼H´Q»2ˆ@Sc2˜Eâ¦Ä ¢düÚIŠˆ°6ˆ%¥ÊÅK¬–eŸ!"'˜ ˜5¡_*…Tg"¡ÕV ì¥b´GDÓtL•´ê(ŸkÕÑ[C4˜/MÔÑøÊbˆ#¢sƒ(‘¸üGÆs@„ZC–#Šv™áÝ"›ˆÜ"¬¨Óˆ8 ­Žåœ¡:h{áGˆ¨3û3Ÿ³Ð Z¢ÕÅe\ bÅ45síš•´ë¢³lÈ+!Îü\uD±FDsDmxä}2Õ#•íZ¢×¯:ö` ’X 6¤8ÁpAƒîÕ‡VÛrF “W0î nµj0×P‚Ëø¤g©šP Í Î «a9Ót¤aɵ7y 'r4G¤3èô{L†¶ß~žhð‰oé\;ð£Ô£™ž€Àß=c`DÃÃ~Š“@|+´§Ú_ÆÅ èb“î²T¼ÍÝØÅ¦ë&óÎÊRÐ"iLnå¸\J£‹wØ3פ=ó¢fcBÛbði›žÕCg(¾G’NK§¶¬ë\; £Û ö‰~q:šf¡h5pª>ž h¾ŽWOœ0Bç˜q?¦v±y±ã¶Ž&Ü¡õ¸fÁch3³^¤ u‹°>v9Êoq{øä‘݃ö1йv Áá$Ô~í$ŽõìÞl Ø ¬RÏé@Ð_;è£×‹´‹Íë_/2"ÖÞ”² {åš $9¿W¶^îm¸‘Ò¤UÛzhïÂãk± Y¶MOZ_€õŠ7¯l½|¾áNKXºõÐÛA´l;[š‡·òZ¼yeëe¶î’ƒ\=ñ[G´4°=/ÞTs²jý¥qÍ«Z/Ë݈ÄÑ!zó"Ù†öWF”m;ôõAD6l•QÛ¡¯ "em0MZZ 3ž‡ö»Ø¼+ˆ@¯_“R¾¡Ûzh¯‹Í»‚è5Ê=¢½rh¯Ü#Ú+÷ˆöÊ=¢½ò6&üÛSØ•¼DufìÊw¡­¼Kà”hSGõâúªÈ à[—7‚ÈUM§4HÙADç1Lš4"‰Ûz+?S!áûÓ%¿yyˆ$jƒu[HïÎjllõq«ÆX,ŽsÛþ£“7ˆ£e¿‡@‚þLщR-[ÕÍ’IÈxZ¶®<;¾^Ôì7#oQLf’PÜ^ôÆ©Fô‘Aô3½át¬%39y#}™KÂði:‘‡Û}˜Œán–Ù  tRY?Ðѯ™n"zö|AeÉ×,³]¬M–ÿ½X,ïmŸð¿Dh]­;Dt}4"š`"2û|îhWa?µê²pýYñBI” •R³ýí¬•ŠÝ…Í?ÑmWÿfá?ýûƉ¢Ž’ 黩 ª‹ƒœñ5D ן O•l@$Vq²øŸtT¦û%Ývõo.ÆI—ÕrD:="2ë~ëˆà¡ «ÚÂõ'[{áA“tÃæ®‘å]UlU{tÛÕ¿)DTy¨ý¼)-&4"mh¬iCÙõ§Õû&¥÷z鱌ºÑJ¿jà‘ïˆÊ|é¤KDåoªÊ›CD‘+þGÒ+(Á«Òˆt4çHVõ“ yÇI&0=–¬Ë:ÌB "=&!"<ÂØÜ«¶b¤ô¾šäêDy“,-öHJ'=*DZqæ5>s¦iGLDd"ËG ÚÊ'—¢[ØuåM²@´-K'="DBi›"u&Ÿ)5˜D8ZDx}V®}r)z°º¢|t+-ÔÒÒIÑ,ß— ¨hkˆôõEXe©À‰úPª>¹œ÷ÑíJë,T?GSŽoÖGê‡éÀ­ÍýŸ«¡unŸ]©oЋKœÛ «òçÌ’€¼ˆžw§C:R?—hšŽÆ×X!TŸ9Ím¤Í·ƒxCˆ²üGLRN•ŸDØ*ˆ¦%gié¤CÙlØŸÔdÛÆé‰ò§œ?åè~œ&ߋԩzI^B}ñƒÖ£f[èL´›ÎúHÅSùñ‡ªIOºenªšüéP~„Ï}»ûTø‚þ¤.XÚfúö[Qœw<0l]nA”.š=ˆ£=ˆü0PȱŸrùÅq”Š?ŒdSRB)´ÌòÉw¡jœrAÝÑSÒeÍq?Gô¾Aô> ŠŽ‘t¸Õ°ÑM£îòŽh° (t#éPmå/¾Ñ|_Úä¬4z9"ˆD©/’uƒ¨YE4¦9"^ATt×YŽH¶5" ݵ ¢ÐJ,ÒCÍyÈ`"[S·š±”¶ò-­ë ¬Òå§Òó‘ÝnVB¤Î̈Öi3A/ˆ"–#ͧ@”(ÙÉÅðqöŒhØ]O•ÀîÚÓˆà{ëˆrYÍž¯•¬¯©„Â""œP¤%D“©Fã6û\BÌs§ i:Õˆ°IŽQ€ˆ¾,ùˆè%åÜ úÎâÎtÆžñÝDÄ DhO[A”æˆ:ô+ô BD0 $"zs±`:Æ¿/!Â<Q¢Ú9"“±'’o[/2²ÐéZɆ|›œÁê¾HU DÎK‡8À½:Qib´k¨Ú5¼åœ4ˈ­Q ¹€(Ó{Þ¾vmdÝìwYâ­WŒÃÔG4OêEÏC£]gÓ":íZÔjA/F©Ë%ã*å=¢)Ì=ƒ)^ÚÂêœæˆÆƒô+« ˆ´s›ÅŸC…ÇÄuÆž´È¯¼IÞ ¢lG ]¯.TÒ©ÙýiÂAýåO¨òG'zøqœ<9¥#ùбXÔqÂlÑÞ!àØãi÷Ì_ÈÇt˜t-¨ekD᳄Z‚$G hx5ñ¨ñ˜žÕý€S@Õ·\¼ADëA³%rí– ‰ÝµzÏšÜÓ)hâCnmõ¥Ã?N‹<¦#èwÀ÷`¬«+Õk=5«×ÖÁgäS5’¾zܬ)t+J"ÎÆðùÆI»Ž):OºOÕØMhèŒa½èfbBcn“¸<õÕb‚ V 7ÈÞ …ÜDW;rºnB47±7éžÓ¾Kˆæ›T‚…kˆ.õøøµB”íDä­!Š¿Žˆ6hM ¡yêk†(Ù¡³àX¸ŠÈäÄþZ!â%Ÿ–Çiõÿ‰¾§½¡Ž}ÉíO´„+ZŸÐ›šÉ>ËÒ½ ¹ˆÞ¶Ü#Ú+÷ˆöÊ=¢½rh¯Ü#Ú+÷ˆöÊ=¢½rh¯Ü#Ú+÷ˆöÊ=¢½r¼ˆâ«bK2¨¼LŠ —¸Á¶5ÑæEyÓ`á`TʬµØóØçw¼ˆÆÓ"Âò òBŠ Ü`«8x”Å) /ŒJ¦È W¤er£ÍrĈΊ D‹ei£ãÔ¶í/ôZ_:•’®H¥äF›åxÅi±.X}ÐHQÁÇmk+rK­hé`TjE…+R)¹Ñf9^D*­.²ü•º¸Û¼ý]5/!Êß\DüSÐZ]×]“{D¡ )JrD[‚ø¹ho^|¶8Q`¸xøçÝC´¸R”䈶d9qU´ŽÈ–§x÷-¼CHQ’#Úâ·îªñ:"Gs©&/ºÃˆ.SyÚpæýP]\ÚÒIœ N$Œã'dØ$¨ïùR©Ïœ!UÔ‡ªNBqœçôj¤F®êµCõ«.ÆHþ½˜÷U]ÉZ„)Ä»¯“=ÛôW?ÐÉvl-"i£_‡ûI­×Aï HtœÈ{L=±Ch?cÊʶý;U¢-›]¨êzeîÈR ´^çÉ‹>Ún:ŸÔÐÁÈýuM¾€†8ˆ0y‘hónóIG'7ʶïø-"åÃFÜ0i¢wFðvƒˆ7©rú tÝ †q÷ëæ.‚ª.qѳ( ’v—"¢&}øãŒgè`&è`ä¢_’Ò”ߎðs]ú°£“ÅÛíŽQÄ-uЦÃhì¨ÈX#¢u£TqÉ!îTÑ¿A“EtˆA Gü¨ÃGÑÁ(âè`¤“ø0=$$ rLr£`{ê¹»„È3ˆ¦hC«á1D„ ‹ ªdŸ-)ƒÔ´÷L„g(#‚îZçî!&¹ÑÝG„Ù3\’äˆ:zZ"¢©r4"íY¤Êˆ†5UE„–"jar£Þö°@wÑi‚`ò¾D$œTA? fðA*Ú"ߤ”Z"ÒI% "Ç4"Ln´u®wwý´ŒèO”ú] ‘¬WÉïWýt"Y7ˆfï"ù"ù]¥~¡u"RV÷+ˆäw "t0ª"R–A½ˆDZFô¯u ô6ˆ†•eUD"5ˆø:¢aG# Þ D³2"õGJµ‘l*(ùŽADµgQ\F4–³:é$>ç DIS#ÂäFƒíï"tUtƒ(SÿJIæˆh.>Èý¸v†ÞmV ©öžÿØ9"Z š ƒ“ ¶Gý¿KˆÜ™F);G$•A$O•‡ƒ>ù-zUM¯ DØLtž£Å ?—¢Á|<ßz!w ‘Qc5È ƒhˆ´êháFÔ¡9¢>šíZåyŽˆf DgÙ讪ŽQ2»~¦ˆèDh8Œ§.; «*‹X´®Æ u¡{‰>DI=™¢ƒ>aJ}†yŽ”úÖ¸¯UGÙ9ED˜Ü(Ünùx¼ˆú¡ ½3Dd§üIÓ±§1ܬr=\è`«~Ò¶è`œPÞ‘ Ö;©í±º Ÿ%¼kõUØî´nó'§à³ ªÕgÓKëáÓçl¤às¾ápÜ(9 O¢ë‰´zØãóÞ³'ïÕ¬^çTžÔ8 Ÿèøp€h@¤5<±×,ÎægêLAUª©ê«$>%ýs•„OÞ«K"NåcQë=;…Éɸ‡yŽÔ ¹ÀäEð¹Ç¢n’íÈŠº‘޶µuÏóíÈ$Ýäc´îõ– ß”äáÙ‹è·¶~o!C=,%€ËEÖ.£Ã¾ç:2É_7ùm½Ôù.õp—ì½t/©+¾7UPâàL9"kåÛl™¯†·º‘xùë&£­Kc—;]IvÈ^D÷&œâIŒ×šòH"¦ªÙ©o,çùë&£­â×…H2ÉÞ]®sjö×õÕ`¤wÀnÑ%Íßlò1ò¶}*Þ~h·ìC$Ø…’t¯× ×YI×Õ•?Ò|oQót£[+Éez°ëЊìEý5Ü㾳爼•b˜ÅÑí#Z|룊$¯:bìûÇ ðjïµRÍ Z-D—&ÊÞm"Zl.îó1ªˆxÕˆìû¥0¦;lTrÙ‚H8€H?·Ú]¿YÙhp(¢‘°ºNؤvrBp{“ÿ‘6„ª „…?¸¥ë} ²ÑTõLæìÝ‚ˆN:V;â4?OœtœúéXq@4:>>½¥ë} ²‘Em€h(´Ÿ¤üéûma9ãñ4Š2ƒ(a·«ªã›•}ˆ0æòtº3˜ 'g¢E0ÀÇ{Oxç±=§ã"g`¿Ã}ÑXIgœ¨Õøî«ÂI=GÔø€wˆ=D£ùב²}¾‘EDËDmšð& ŠÆ!<[¢¾ón#ûœíEô¾ÃÑ…ˆÈVýpHsD]ç“w‘ØèÄ^C:_Dш,§?´‘¥õ,˜ÿ戬÷ˆoÔ9Uý‘â4TB·"Ì\%òV$ï)NjkˆD Ü#ÊeQçk5%o†H䫿çË"³þy^®åB“¼À¼z—…'­¼7’Òj¼±èÞž`üDq|¢' th@ÄÌŸŒ”¬« Ù¯ˆ÷ÉT5FŒÎ6WÝ®pT®“¼À¼:ƒÄü7ÏA´LE”9•I§9ÛöùÈüH :;ä¢*ЋØßûìj$1“W]Å£äc{þªˆ´§P9´Œ¾íê6‚“g‡(ì‚ó×Çv>éYC»$H¾úV#Æ\ŽøaÇöúa“Ó¤Úõp6|ˆÎ”;Jþ¢Û¯4Gj­é­º~èfæ$/0¯ž_˜¦ÓÊ *­ÈPÜÊU‰ÈDÿ]œç¯›©"-%㸙ó%¢ù¢p‹ìGäPžíé'NB,Vãõ„ˆ Äû¸ÊFÐÂÈð)Ýs†Ír¥PžÓ}KjÃZâ˜%5[ÙÉÃ'‚üÊÑK§Vº§pWĸí"Ѭ„È3ÅEAñz¢ÒV РËÊ…[d?"-¯¸‘ySÁÜw¢ÿ‹ *9ùðÁå EEá6Ù¿¼_ùö7,˜[ ¼»S NyÁbð?QÉáȇ.‹Âm²“H ÝYéuˆøF-ì&Îg޶NáQÅÉÌsQ¿Âë€èÒ©>·9ý=™„€høƒ†}O÷Õ T'¤×¦jâó°MëôÕù—:#ÑyÈæ Ð¥E¹ýz²ð%í1–ÐÑM1üûª»t7I³¡`?±áA{JªÒHü€’3Nˆª‡uKJ{ß'_ÐHM9óž8Y0²_²'öH0NÐè¸õ赤ù3%Ô%ŸÔÐ5´ŸØ³X‰¶z߉B8?c¯ŽÈÀY†7sBüGO!@ä8ž§â4”}f9Êåæ"N1 `Ù€íŒyõê©°Q2[A„Æ¥M6Ž0%ÑÀ Ö0; ‰‘’7AôÖ ùüQ¼DD1Y¨FdÒ iD€s„I0‡S:û$Ö¢"Š4"ß òQWЈ:0\ÞÑ[ÿ¿mCôËÑorD3DôWD¹‚H~7¢ßÝIDÑÿq±Ñû9¢OsD ’ß}¬–ˆÄWq7¢_ÜMDŸ›ɼ»fÍQ€ˆ>ü´Œèß­ Êö zy'MOÿ|‰ˆ\ˆL:!=¢uºÔ™"ý«ÿ  ®RA/H*ÿxQ¼Žh,ˆ¨jÝIDi‡”Åjˆx¨3=·CÖ{Fõz‘z\³py®®ž°$®ƒÆfÇh]öú,åüЊd÷aÜнG´SÞaDôЊd÷áwÑÁ5ÉîÃï.¢ß\“ì>üî":Ü‚€ì9ÑÑV“m—}Á‡²#E£–»†h5ùÐvÙgë³~€{Ñ]Bô–äÑNAG±{D;% ÷ˆöÈäüѹG´W&ôѹï®÷ Ú¶Ý#Ú+÷ˆvÊ?±{D{äŸÏï"Šàç× IDAT*¹¥\¦ÔìªêæRª™°ÒÊï )Ça¡Å›í†/ÿ÷ùÝ@„ ñƒÂ²à¿V Šá,i1kÈÔðV=?Ö»¶AÕæäL¿Ç­¡£ÜŠ<š¿’üÛpªÚvÃ{t:¸"øeÅqKM[ ’†Œ·E‹¨)”ûcÅ»ö™'T ™cÖu¾篕ÍÒ ¢y)Þ\mBTîµÊyÀvû&ÜäAs”g¼$+&èKr•Po¬¢Zò½Øó]8Oƒ ôI-Täe÷‘~3§Êu‰K6^ÅMC‘¦ˆ~ ]ÎF¢$Q˜=B!¢€žéÂã›/fMúÃD¼ÔóF ê"ÑÁOQ§ §n@G-“W‡Råy:åN§|63ˆÄó”Š? @àh¸æ8Gä©"’eD0c¨Ë©r "aÍ®è¹ü°GÑc3a*U‘ŸÁD¹CG¥ã`^ ”ËSîé8©ñ ˆ¨GÔtý¼ãÆpž”_hD¾²( úã7#N1å'Ù¼ÎwS[DZdqŒ9‚$êÿýQ’#€¸êx‘(o&©A”hDûâE-‰G {Hû‚œÕûŠŸvp©p4ŽC>S¸°Á_Hâ`^ÚcÊñzg#é$OÛu ºŒ´ÈÍˆÓ ‚!O9(áÓZ~ ÆaÇøÍȇŽíxoë…ÜÑL% "jÁÅsƒÈ¬]O•—t©A”šcü°µktpi0'QVb?³Tøg¸àlý{§×²Eódó‡uÌ«ãL•zNÇç½¶Å?‚/v ½…õä‘(õk'q8ûœÀyzŠ™w`ø›ÂÙ“$÷›yܬ=§¯i½(©©qˆ“pÒ'² (NÔr„ ‹%’žq«fŽñ¹Áw^[¶'õ:Tn‚HØ*†y{¬¸-­gvbYC*ÍlöÑpZ_SCÚµ~`Õòc¯Víåí"ºrh¯Ü#Ú+7Ct×^In†(`_D{Ìl”¯…QñuÒ­Ë×ÑÍäÞîz¯ü#»G´GÐ àÑ^¹G´K$ÎÈïíùCuhà–ß=¢‚ºù=¢‚ÆP÷ˆv ½ˆè†ø­çú/Ã?·Ò”l=tðÆDÙÞºÇH’õäÆÖ˜.Ü>´|°x·n0øwk%Ê8Lì¾€»€hÝÀ„Æ0Kò ·]¹½¬ÃV?Õ\+Qï"xÐÖv•L+2Và ·} ³x»þ µØ†³¿ šZOpUFDÊGLÑ\m’WŽh§ CÖD4Ûƒ(S›äUñ»²v½Š(݃hózõ« tGM÷ ÚlWñ*ˆ¢Ù1#ú-¦=aVBÏC_äßµðy‡HG'O¡_ëî@çMQ_6ì~X•pzÏö«®úœb"5T-‡?o’ß?ÁD€um2fcÞ•Aÿ¹øƒ+õœmÙÓ÷Å1#úÔÙ.é‹çÔµ³Àw•úSɳœYŒÉS|—cŠ™6¶"7E<Ñ +¾ Ù8JDçÉ3þ”p{1Th4)yØ ™+’Y }Ù4ðLèRO£³ä}¹Ù`>GŒHÔûÉ÷©;’’AÜ( i؃,ÓÉSü”Ù`D™¼)Êø€È¥~„fWÛX Àú¨V-JF )Ï /Ò8Å3¡H§ BÉÆ«˜3"5'’ú€¨Eý r/0Uô5ĵ!†;g:³2IAàˆFD‚)"r8Tò`êíOÒ d,iägü/RhX‰Ž í£HÍSt…Øl >QnjȦ’ùÑ ]5‘ZAD£eyºn\G " 茈b¢ 4"ô‰t²žÆO¢‰:jD)\úxªõêhe+ ¢aM',˜"¢Hûsé¼)9"Eãu\GLì$Óí1ât4ÍBÑB_ìM2™ÜÑdïZ'”Õq?¡CôÌ8OìÑDÐÏ ´¢’Gj’èä)T|KåëE:oJóA-¹ëc—ÓD~KÔ‡ï?¬÷`¶1õ• Ù€YЂ"‰®Jáà™Ð?ÄúvïƒG¶µÙÕòšˆbôj­ã–Ê™RpýªÀ„›¥s²™b Ž XˆnŇ¹RC—ˆá{Z5¸˜ÒÎÎm¤Íîí¾½Ò®µy½èšˆ|[ÐT¸ñ¶ß”AÁ\²ØK£™vtLJ"EBGujÒ*Gº Dç|çá"–n¬qMD•Î8æ]]›]us؊ƪEæœA”e&ðKvèƒöÒ*¨¿Â'­´1zˆØîœÀKDrË~c@®‰(3ɦ£g¦Oÿ¿P¥¾-•“ý†y~<ÃèW7ïÔlæ¦ê|,ÿUÙÛE$F$¶ ºæ ÿ}^Ëþ<  Œ0,Ò›íò¢JF€èòKæÅþ,ÆoãìÐŒÅS›¢9"ú—å·‚h÷E”mþE¯§:ÊÑO(q ËþtñMÑ•r/a ü™ÎcŸèéÍaâúŠEÑ/K¥~û%“Ý %D·’BNøj*ɾ-¤EuhMYB÷#¢qèpñ0?©HЖãï–¥†9Ú)[´B–ÆHÒ"kà­ŽèÊW!†×ùHñV‡iƒi„Áƒ¦] ¢Q¦A$ƒÉ9èFq9+ºJ('êóE¡80ÌÑNÑšÉv)ù‡lqµ¼^_4÷Uòcþ]™*q"¾§ï@DØ]"O# cŽ„MNä÷ŸX²ŸP_…Nb«öþêoTÆä:ˆ2ЋlQ Õø)ÃÕƒ+ó8á ˆD”8"þg–8 ÓæÔvT+‚ˆè%è·";6D×›€À¬9æ™øEg2GZ´8Á"å©Nža Bä“H2(Ù¢ž¼5¹Þ ˆ|þ#ñÔ¢©|ß ŠQrQ¦°rÝDw߉F”|tÈ™‘PñQ"ºæÚµ¯|ñ#I±•䈂e„ÿî‘iD¼„ˆç “h¦.‘:²MÏ‚_ щÒóØ ¢@#".×»yœaw-?8$=iàE ÂIÚ‘!JÐŒû1Šñʼ墌I¿D’"œ€ ¨{Ú…÷ÙL(êÙL2êÅ+/ ÷(âø*€'uVA´Ù4¸ìò×p±y†î៕‰t°Z(¹'ovJ¯‡(p?%mÙê¶¥ZADÿ;pPK­$Qû»ð~šð.qÓDà²üÊ Æ ‚`6ñ/£yÑ–x¥›‚®Ð™n¬¥¯kåÐ`µd ’åc°Q.ÿ³w=Dašr}L³Ãšï,g©#i=†©D¤¢<лã'êñIWÍ÷ zÌb¯WŸŒ‚0® Ú¸¯ìò!¨Ø…è¬Z6X-¨á>Dÿç䚈„-뀈ÖÔÍ„½˜ŽK«i½§†¶§¸cbÛ…$l>˜j†{´ µê^Hr@+*»|ÀƒæîxÐV4Ž`µ$ÀÅÁ·|9˜\o“¨Èq¾ùðákh›dí¤ Dw4R­µqá-¿Ð%‰Z-1²ot¸Äk×AT,Ó͇ßEDOÈõ ØæÃ‡.VoºZ,U¢R’j­ˆòßr ÄS«%Fö!â§äzˆòQXî®u[â.U–•ÉJ­MÍï| ¤øÐu 6¹¢ü×¼Yk9Xœ¢Šß'©ÖÚˆ(_8_YŒ[×E¤å:ˆòšoÝHd-êëqŸÓR¶œª3†Î¸…¯¾¤sg(k!c#w~52¹áûêK¢ÐôÒ ÉD8‰Þ`÷C~ë‚Ì S¢®Æêç ö…x_Itî¯mYÖÛbö×5ù^#ßvѳ•§º½ï|â4¨ÍCÖpê#K5QûB'üùEs’c‚@>©õØÏÉ‚OÞsL‰J{üi%ìS' “æ'ÃM€lóžÔÐ:jDa"°ßc6ž¶ºL§h"èGg‡Ÿ12˜‰.u¢¤ÝíR…éŠSÎ<7J$µ±^XÞcö¸E|†«¿þ¥ŸqÞi2†»mhq¥@SÌDæF©èv "bhen#S@L}D\ÒÆÛ*×”(Ôõ}Žˆ|ŽöØ1*èÑæ­Æ#·Þ/)D$Oà­Š "2ŽÜq&:hKDÌ÷@äE+ˆ¢¢T´(ú€P7Ј|]ï6vcß´`ÞÜ ÁÌÇâê„(ô ÓNQ'‚ƒq‘6`ÿch!袈€C¯¡µµA$[ÔåZA´%|ò±›ƒr}í!ó#8Ûóå‘]Šv ÏE”8"àê*Dä,A7Æ\·„h-¢„–ã6-%D#"8c® šÆD¿YA$­èw9"á–5*ˆä÷7^„?¹ ˆ¸má®{QzQ ¢Ta:*¢tè9¢´Œˆ5TŽhŒŠßü }1yýˆŒ¢{~HÕ•‰MHÖ "lóDI#êjDÍDñÑËQ\Aô^(BDÙfD_M®…(à ë::cœ¡>‹—5ÑÌLóN‘z= óɂ蜒ÛTW# sPnÑ<9lŽ(ÑlÏü©j+Uªˆø$GÄ £…T9*X jQ2¸DAÑ߈RœXÅ[ý?¿"WñL´E Ç×ÕÓ›¥9(ÚòÌC' Ҙ㯭_—~÷¼ÛC~aÊ­²Q¦FœLý©l«?Á‰Ö8GGœùœˆ¶Ö‹Ø™þBƒˆFþ ]¹¢"š"·@Ô¥ü;Ј½ò· "ײRc*›q1KèjÔäÍXšƒ* ˆ‚AÇY¦ ù$=Çâ`?¢…9(Œñ%38 º8IýDrõ'¨WG’åˆ Ä["Bw!D4˜WçUD¾e"G¤/"zDõÿ™ü˜3¡ZÌÓt–æ Ð“Ùù8ˆâ43&X‘®¶ÑÂôÒ(!ÂyYˆÚæd¡]í',(4UÝUù˜ïƒœeD£È Âvì¼|L.áŽv½ÊáˆR¥m‡®ÑÓ7³0Åõ¶ÉåùØÍüY$tísz¢¥9è…,Wü,â¯ÎÏüvw;ŒâÝéi¬D’z ðt‰£G4DtªÁÔcœñ 2´…^Ô:¡ß m@%:üƒ4šaÿ=Môˆ†ß6Þ¬]Q„ú*ÿ£ÐˆÌFÄÒÖy—,ò²`Dÿp ¢¥9è…À G!gp¨ 㡨óSšø =Ød¤èÚyËêÞÁmn‰N plà|ÞpBgxDô]Oœ‘²¡D#úH$S±²ÃGMâ ÐçZ…Ïn‘/žK†ÎÌMª•ÌAA¼XE$u9zÂ`/FT˜ƒª ¢qïÅ{þÒ™*‡÷¯pQ(_/zÂzh%ÇB§n={Ú@o…N x¯ì‰8­s:õÑÁ ÷ì‰3 A{”àÖajsŒr)jüÃäáƒZˆÓœd»míáˆ|¨Ã*ouöesPzQFD…=R¿êXœ\yŸìFT˜ƒªí[Õ¤zPV}\v&«¡ëK%û–r8¢$€¨ý]%”8‘;ßSsP¥Å DœHú³Îêfƒ‘sºóæ €h[^°Ýˆª[n×Et±§‘ލ?D: ‚.Â⧬bŠß” !7ö“—×°4%Ï·Õ©üT^U׊w!BÕtÑdÏ~ãáˆ`Ü›·qu¿¯FÑ—ÌAñÛ'*X ’5½NCÜ@Ïvxiš¥åΨ,;ÍGdF’ªx·Œè{x9ÿIý×¶F´45ˆ¼"Õë¢âˆ¦˜£k׉—æ ¯Œ¨²Ó¶ jµkˆJ³žMr D)>h!NÕž³ÓS¼Î’­#"òʈÂ.eP×R¾ça_˜ƒfé¶š;­äÊÚ…ÍUDƒ=[E×Dôg±â¢Ù} ‘€9']"â-š\‘6·"ª’•+ž¢:$íK¹jv¸'½æ5ýæFj³¨2\"˜@,Éýâ@D sÐíˆ`ª»¾zO•›ûni5ûq²Çùòšˆ~$¨§Ðô"*™ƒâcNazP ºDÃsÐ`+¢·)×B LB¯ÍA‚ˆ‚²ÓL±™ZL@bÕ0ÝõaˆŒ9è]G¤0KÀ ëѧ›ej1½T–Fäg)ß=è/ÍAƒÙÝFäg*šEÐ kD8ñöÊ>Ô™dñhІ‹„qo‰HëE‡˜ƒz|ÏøûVäžDqšÍRñB5۸숋4+ˆ ,–ÔRÙú_OQ§â„êÔ}æ Ê»Ý}ߎ\Ã-gç‰Õnvº-ÚTsP¨Wƒ,žaËH:]ûCˆS‰þ—˜ƒ‚÷âÖoðær ßXJGÖC«Mkª‡~¥%sP…Û²êËåý@9yø°ÆÉýÚõ -ÌA1³êmßß-Èñšƒ¯9èÑÈñšƒ©¦°Xûª²„ù'j¥hQpŠ{ðª'Üõó¯9¨‘j ‹BQÊkizÂX5ÇÇ,΋=×-æ°+“ŽÍ>FŽ×ÔHÙŸa) Dåî]#âDU‹f)¢¬ Zñ…¨ÈÑšƒæRIa±Å¯TnEæA#j¥hQPiE^õ„»¼/×2ÄÙyô¢„è¢úEw°8"ºÐ,ΗÕóNè‘–¯'¢ „(¨~`1•Yœš]VÏÙw‘[BäV?°Xm%å zŸ_/'äÕÓÊËF¹Ûˆœ"§úÅ ·8BÑûüz!0¯žöwÑðó†óû÷­"1̯ÿÒrÔs–Ð<-Eá!mõ\֤ˆRŸ·˜P’‘úU×<Û4¡Ÿ9ðt¤l íøU ÕRkøŒŽÔç”GüÁÖ 9^DqR$¦P3ôGÍ(yF«HK‘;AðTü€ºCÕ¤¸1ß¾ocœ©¦xòLahó. œŸØø Yò#xÐ86ÐQšª&J¢Qz{úoZ(%îˆ"1…JãäûŸœf¢A<·HK‘;Ad<Nc.»˜è „]8Y HÚØ!"Ï›f©ìvÇŸfÛµ½£E$é9qÇŠ‰)T%j Cæzƒ"-Ená‰N ÉF“"´ËŠàÔá ¸D‹Ñöí·Ó.Qó å£›F›]ÞQ^;¢ÃgtÕšpÄõ‘ILˆRåjDÄ/¢åçˆbÑaŽËg²UEDrD Ús7 JƒÈÛñœ]×bVÛ̪¾2½¤U×SÛÜìÁ+,fq)2dy³Õ½u)[Ì.fá›4¢"1æ€Ai :Aø¢‰væ3íå ©ˆÃÙ×pQ€HåˆÏIËážrK#Úq™×³˜­‹L´q3¯©pavœè ›ù+,fq'Ó|Ôݳ¬ª³¥³ž#ÊSÀ·!¢é*"l`¾ÔˆRíå`9|1 Âá`&•¢¤@DaøO9Ö'ÚÂïÆˆÐbv4ê"é‚0¸hÎÐPд¢L³¨k2["Úý°•-f½eqÏ *S(õmDôÓ݈~S úvŽHÔ+ˆ~¹ ß¾%{-‹Ù‹mfÙ\td¿g,è·&X¾Ê-f/°ýç`D%‹Ùò†ÛjDEb %~ˆäw‘i)Ö}š#?Êa²*ˆÞ_"Òa;4"±}cÿZ³“4Ãø —¢Ï™FÔŠ†|®Ê-f×íÜú)[Ì–mg¢‰)Ô û"¡³-EZŠ5DEw=‹rDX †¢n{"µ=ŒäµÌAaTI•L›=@+Ê£ñ)Tôs‹Ù‰¦2(!ÚÓ--fË…£‰)T†ˆ0<ñ½"-Eî‘#J´—ƒF”¡]ûF4,PI³Û¤¢Î¢»&—WNÊÙWÑö×C”Eh3«àV6!Ê-fMÃŽhi1[ª(•AT$¦P"ÂÜ $dEZŠÜ b ˆ"ëùT=¿ž%Žh?ÈÜ€uó$wDk¢íc¢ÉQÇ}¿¤št IDATÆ~µtxQ"÷hŸ$n̬VEó'š½ÝG‹D½£ÂÏý§ý¬ŸÞ¾t³­àÜŸ|ÿj¢jbŠ¢‡f6-E}Db,–(‹~±@”ÛmÏš¨Øj5ƒG§‰ŒÿèÐ.øÃ_–Dçÿ/5bÖ 7fÖè\e%Qu€ÃS˜-_ƒÉGGùä¨ßkd»Y´i~Ö Ï%Z1;õ.¹‰)²hhß̦¥¨‚p³ÂØ­ë,ØZ$Úk¢#Gä Ÿ!òâIßîÊØí¢ŽÝTYÑ^ÇþÐÄ™u“UDãòIV®ôóÛ³³Qzttx˜¤ÛÛ÷òhÛ4¿€haÄìèøˆ"Ü¿é[¢jb û»í¢Ômùf6-E}Ä4ÏÃðýÔMuQûÙçÈm–; ;›a#pD,ѽâ=KôÀnV“ñô7V÷ÇÉùoZ\j8h9 ”›l6n—kŠu3_•O€rÄl¹9™gÚ= ÷G³D…ÝŒ9—haÄlrü·,‚°½»WøÕÄ–(½ó¾ñ²[[Í áͦ¥¨‚È>ÌoG»i«Q¼yÓ/‰Ò;ÛA£ðÓ–» Û)ÞðÚaÇnÃí¦ÙÎ Ïn»ïºÍŠá( EàwoýÉ2vcÝ¡7ucfMºSõÓèøQäˆÊá å›IyþmK”NóͬhZ¢›_ðD;1»H4Šú¬QML‘…&»ßm®å›é ¯½6›–¢>¢ðòï˜~7Ø377×MöæZ#»Ÿ‡ý|½¸ žìš›fT¬Ùߵ߽³q;²jë}÷ªÛz{;êgo®§|~þY§/5JͤYºc÷fòæÖ†[üÖk4SÅû'ˆÞ­ ²iáˆìéÁùD #f“Å £… ŸWSWœ˜–âÜï[B—$Êo¸%g¾aÿ爂E¢zÄlùÊy^üQb*"³q¢jÄìňÊÇÚ‰i)®QæŽýŒŒ;;@¹Rœ$ªFÌ–oãåæ˜è :1{.щÑkå¼ '§¥¸JDvûÚn·‡n†Ígˆê³å_<7»—!ªGÌžK´¸ SM]‘_a¢â\¢zÄlùÏMoNô¿˜¨1{.Ñ"G5uÅÉi)®‘{—îÈnÀ9¢¨Ú„^$²›zõˆÙò/n‰ÆEr4-¶3óã¬jÕ#fGîgfÑQæe“ôCK4ɂњwшÙü¥̹`—1; M±žmúy¹Š)ëÅñ2£ÙˆYwr-»WñÔíéO½Ñp’‡]Ó‰Î{¢-Ž˜]Æ2ËnÅ#fËÍ»ÉÿðLçüÐ+ЊGÌ–D.òÃ.qG^n+1[}²»S…—¸#/·˜-‰^â®`+1[í_â®`+1ëˆV¹Y÷2Zñ°÷¾‚ˆ¾0·!Ìïê_í®ìø"srcaqøÏéƒÐ«õÇ|9_>\¸Nµtˆ¿Í}ÃÁY×=ÕU&Zš…“X ×)ßZY<­@ù ÇGˆ/^÷TW˜èăeñ`Ó'¬Þk~†¨š(º®$E‹ß–ºSuÝS]a¢sE‡§öhª…ݳO´`ñ{܇“¯*-ž{jñº§º&D‹G2<3AHvöÎ{kÖAùqN4[²‰èøóƒòã+M4¢3¶øOœ1,?Ήf[¿¯Q Dg /Õs¢ääåæU òèŒ7³¢zå>'ê×ÿ½æD#óÀ/¼Ô_·;0³ƒ=²¯¬÷ÌŸ4‚=»þ.‡÷Ìç~þU·ÿñSso'psZdnù‡C÷=ÓvÚ‹r÷.»ÒaœÚoÈËws¶Ó<ú·–1böe‡Þa–‡Ãáp~°Çd’LóŸ¸ñºAy’ëh¯Ÿ¤î%7¦ù†×qsZĽ±;É[yÉÄ-éÛ÷Za2ÍÊ÷ÚÝ•’a’çö²CG”gnषŒ¨¾ìâ 'ùN8tC!ë#-Qh‰ZÑÍrQ³Ɖ›3{Zå@Qw¾Ôx0=rc3ì—Ãr`ZšY¢ÃlÛÌ®¼Ò 9Ê[Á4s§KÊ Kv‚k9ƒC§“¼î/wîfK´c?©ˆ†%Q¸H4ÃpDûS7«E2ɲ“DaMd²¼Å×’ÈX¢AÞ öÝdëƒ=z‘ÉwL^¾[|1QÛ.¶ƒÔ&=™¸ñ~Õ¥f¤–›—Ó…ŽÈ\K¢"ˆ3w"ùƒÀÌÇ ¢Š(Û®Wà¹%ŠÏ'r› AVY‚ñŒ¨“L›ºtì–E¾3z=‰Ž*"¿/Q¥AEô3¢¹ ÑOëK‹ïÖD?uC8Ö¯/QRÅå2§&ʼŠè'3¢OÏ&Jsó,‘;~¤¼4TDÅ7ÝvQãú +¢¿X$*Ö+¢­ÑGgegå³ÇÖaM”—'ìn_[¢ýŠèSã?9žñb·Z£ílGyè^·mžM”XužÎ‰úæhF4±‹kóËpzT¥›îÌô×’(â£~v8?Øãá¸$Ê-ÑïB»EY8¢Î³DîÀÊ’èÈîÞenÊKtF4pDÍp:uDOrGôøºM“ÂîŠuÏöx8­‰vÂßÏ'r/¹/ûîxT‹éQµfDŦ݌|t]‰Ü8ì±ÙÌöΉüüÀ¯ˆúÏ•ƒ!í—½rëÚX2íœ Úš9"ox-‰Ü×§¹™š®??Øcp8î9¢ÍV#l4=SÜvÇ{¸}´ßœ\£ÙïÏ?#Ï}Ošï%éZ:Û.êw’_4¬i:.w@¶ïEàZí®†Ù‡æÐŒ‚ùÁýIzk3ìoú¨Ý²¿ÿ^§?ºšt+͈¼þØm‰ç¾ßq'!OÒû…×ËÖ3û­%Ñè–£ìÖV`²üM¿ú×q7¶§¡]ì>)ßýªöøµŸ}úàfØ3åâµFöžÝ`ÚöÚ߸ñÆZûî­/­5ÚÛv露ýÆš{)- ¦žñ-?ßù&µWJË“"xí­ÍÔþüÝâ3ÊßXÆŸW¯óG¿eÅ—¾è´2èÕ$zrâ=¸×˜èüÑoOüÛkL´î¿LDTžû/“|/…¨+ûäÙq­/õ4˜§ú‚1—ããwÌê‰ö݇jÔIßœ¸e×ùG·ÿAKOüZ|ò›/ì2DëÏŽÉ»¢D'ÏrzV‹Kv1¢ê‰–<û(úC>Ñ^VD4ý›ê¿‘9“èuˆˆÒϪÿFFDçTüqõŸÈˆè¼öËå+Å":³z†ðr•&¢3K?vç›(R?Òï›b3lo»w0Û‡RžÉÔü.|wõÕEÖhGãn ÃÁž)îø=ûœ›ì²â¾‡RžÉ´u#|wõÕE–EÉ4Ë£ýýØn]ÞØn# ‡éQþ¡‡RžÉ4„IO¯y!š¤n|I¸eQÇíÊ9Ñ£êìQpþ‹š¯B!NK¢ÐõÝ0–èO‰bú!ÏÕläohêõêÞûXŸÕ ¯Y<8d5Ç,]dOè†à4üŠ(µû /ÿºÉj¢ÛÕ£>ˉ<Ê“Ü Ý×õ[v/\«ìŸ‚U܋Ŏ(,J¢ÄÉ5p÷;Ef5Dõas¢¼:b£>N=‹ªcD«¸—'ú5Ñ߯šhöøMõD«§Ÿ­E¹yöQ4Ü_Åý¸4QþÃr²o¾ºb¢ê˜†3?V,;AdÿÉÝìÃE¢Õü©.Oô­Š¨ØÑqGü¾"*Þµ>OŠN>_\‡VrתÃ>B3ÿ4‘;c¦Ù¿"D…#ú§r»hâvýýüŸ Wr×ÊÃ>J• ºàQQWƒ¨ÿÔrøŸ—D·éž$ʽ’(Ÿ^¢_e9¹5Ú|qä~EdvÑxó{ÇDc÷Ü_/‰Ž¦c“.{…ri¢>_e9¹ûÇk4S=;¢éN°@TDæ _M-ÑÇË^¡\Ý|§ˆâšhêˆÒE¢´°["IM”ší(Zî¹.DQM4,‰²V¸@´í^6š5··¢p©wäê=°DnÊŽ"|Çm]ï;¢Ž78,‰ Kôž#zÇ^ËÍk9éxå4!Y#oœœ ý…»ºD»ã4wSväv³±¸i÷Ÿí³«{·?éÝ+ýQÚòÜÄëöZv³²3ìÞ•Ó„¬k¯ Q¿}·é¦ìH½ŽÉÞE¦{Ë?üµßhG橉ºÁM7±G§}×ÍkùI0~ØÝjìlÏt–¼¼¾ºDW&a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„-›èñ‰¯.4©îUˆÊ“H.U‘7æß²xñè½ê¿õ!û£ÐÄÅúÁjŽ~zÉá£È럚ÀÏËfŸ-^W‡8õ3qÇ^/k®p ÷—ùãSDñ|.²Å‹g‡ÎUÔ¹ãh½i±š£°^vL”ž|FN´xqXO9VåáÔtÍkDtò‚³f´+ÂúÄsQ¥æqbö_¢à¢³®ušÈþïÑëBTÛS3ʧ5ÑVTn]›‡EItôª/‹RwλØÍÝ›‡3°„æI±Ÿ¤v ;ˆ§¹›ÂÏ]í©Ij¢bgFd,QçéáëEÔw¿ýã§ñ3D¹I§Ž(´[ö2·§o†%ÑQòªÝžéƒÁ4ýìßÂØüÖ™=>Š¿ÿÏvÿµãü¿GÕÙ»Šè$Q”ºùJ,QÿÉëAôÎ ™~ò¯ÄnF©yô·’ø,o½ûŽÝêŽ~º«ÑÔ5ƒŠ(¦ŽÈ®ÑzÉëAô¶#úÝŸÅz¿J~þ‰%z;É~4Cwµ"HÒ±;“W'É7£òµk7¥KœŒ¼ñ«¾]Ôu/úxvá³};܆òØø~tï¾ÝxôúY³a3¶Âïd·6wÂÆwÜxå; f”E~ê§w¢•ÿ+ ˆŠFh‰ìVbšoE%QÃÍkX.xE{õ9§FA¾9ºå÷¶£›aù>šÝà.Öy˜Ý_õï°â.÷nìc¾Ê«×åˆ^‰7 /ÛåˆÎŸ×îîrDû«¹W»Ë¬æN\í.Eô8Zѽ¸Ò]Šè§«»¦]Šh¼ª{q¥Ó@>LD˜ˆ0a"ÂD„‰[*ÑÓs¿¨[Ö‹)I¹·Ømº—¥Ž_÷MC“5Žç˜ÿê~Ð~¡C¢j ãáÂ%íF0ûtÿøÒ®7ŸO»I{|Æà¢ñ¾ç~™ùÀõÎs£â ¿í&D;>/ð 6ÅúñÀ +ð^ììÊ$ZÜ®w\šó{[-œÒx/ Ê1ÚÅ’¦zÈCwkY8:Iä^ ^O£Ù—õa§f[œmî!Qõ`Ÿ¸ä`öé‘{‡zö(ŠŽ¿±¬Ÿ‡Û’¬eÑ(°Ï«(=I仳…fÁìKovo5ÑâSá]hñ§‰ö/] *1‰Š`©D#ó7ýe'ˆŠ³‰²hR=ç»UH4ü<}Ÿù²Ñ"‘ýôѸªçë’ˆzÆ1íšÜÝÒü¯ˆòù#»^\¯žhþG:š}<{¨œ0px‚È_*Q¿&*NÌ_Yx%Ñéå]>®‰žs²"$š¯ gÏþc,öC¼@42~µ¨\Ñ^I´{Y¢õç»5$úëÙ'ÉìãÙï®.•oú D©ñ+à%uj"7St´Ö½·¤ïZ¢u·F+¼µqê¾úÖ—¼öÈ´#“ùf4²¥´Õh½õ<·†D›ükÙ»“ìÝFôf´ï7"ÓlÜIGÉÔ„ÃŽÙs³7:¢4œö̽Èùæ“æšýb×|îw·Käfá´$"¯$Z³DÍ­ 7zÓO:nó+vDë½ÝÁ^ºåï{£vkcÝÂu£á`£±sïyn ‰6Í4I>õ’Á ¸·½áÛ_rð8÷;o·7²wÄËïwË…Sâi#½ÚÅŸÝ ìÅVë†7rówµ¼Éaü#?^ÒvQ#œmµ‚ž›K{0©Þ9.‰q?múÞ¨±¬›¼aFíÈ:ñ^ö\“^áÛ&9L:ƒÉ ÏŠoÇŽhb:Þ0N~þYÞMÓr‰ž‡ûnÔ膽ïC¯ðýØ~áæçJ ûX·DÉp/k&ç†?'jú½tó¦×qãßÝdD–¨û~§—5ýÐÝÛ }7,zt¯ø~g/]Q”<<ŠÜ”dßrDmß|íÇÉýOòèíÁá4ÛuWÌà qC²ì}ßïaOóm7z¦$ÚêO’Á¸—óD+nz'ˆvoÏíýµƒŠhj‰6Q¶zöÁŒ²š¨õ<7‡CÓ³hlÐqß ³âQgh>5aüÛév}y0™NÊ+†ái¢QVØÛê“ARDK"òŸ!*ÿJ]¿z¢™N/ßð¢šÈ>æ‘çïíUÓ_6"zj7öí¶QlÿŸ¤ù×ÝAxñÐüªý_ýË4o}e8H¦‘»bÞ Ç5Q¸WÝwÃÔ²GÔšeí/‹*¢¶»nOº$Š{ùí·æD]ûÉVð–#z®Ã™‰è(‹R‹ŒL<™æßs3WúýmƒÞxš_Ýìv.K4õgDqœäŽèíñÐt’|ùDaVuí׿«3"³–ÿ»·ÌŒ(]Ÿeϵe„ÃA‘¸¤n2»¼©‰ò(è;¢ Žã4w¯¿4'*¢Þ"Ѷ¿ÓÛãýâ»+!ú´&²Â®á+¢¬WüQÃm9¢Ü5Þj¬ïeÏ5c"=Σ<Ì¢ ‹âÁ8«ˆìdÞ :É4˃ø'áø4Qcm¨ø¶½ó_N÷³Á²‰ÊMÇ›ÑÈs¯z̈Ɩ¨]møæ‰)E…o·àžëDú¦IÚÝôf`@Ã$k•³L9¢"ìôíÂ)´Õ>Ûñ-7£E¢·{'<\:‘›U®¹Q¹§P^y=Óï뻎¨i·Až˜½‘y®9 ‰è‘ݱð‹ ëÄýÌÍT&úYÆvAmŸoA½g²H”.™¯™’h²t¢î­(‰öÊ}4·F3‘Ý?±Dý9Q7zŽ›#¢áD…ùùYDAM”Ù­é’è^IôeãN¢,Ñ’¶‹LMÛ›5ÑÁ^gFä÷ŒU²»´Ž(t¯M8"¿ðÌÞãã—$/íçaôÀlü'c‰þOZ¼[}óŸÿ- ýûŸE_ æ'x+¢#7ñTµéh70ËW¶:Y´T¢Ž#Ey6#Úﯟ$ê”D[‘#ØgœÿØ{²÷·'ÎìqѨÃÑí?6Þ‹¿{?ÿ›iêéïïö¯ñ§É'Öìqù{·£ÙÖõÔ."Ž·®Ë—ô;¹#*‚eíé—Dv·yhÍuÊWˆ6#w,”#Z®Mö¾µ"»œ?жþ[Ô|÷Á§ÓüïÚ{r4Ê>ùÝŸ9¢ÍâÝÎpFä6œÑaIôÀ}ÖDqõ;‰ýë?Ç=<£Nìˆ2¿ŸmÞ®ˆâÁš}xÇåR¯\Å“’¨aŸ÷QlŸq í·ïgø£ÏˆÆ]y°ÑÜÚÙ°›±»½qnW¢y8gÛ·7ÂØîê~»š½ø’éÓl§Ø5\¶ø»iÖÚˆìÓ !ÚµÜÝži|çyîâ³õ7CzÑð³­7Ö{éV°Þ‰í&X¢‘]ÓµïFÚÈ3Y¸åvØ ºésMu D™—zï·ºy³[}»4±£Æz’å[výo7 ·Ù]^s×>ð»wnÝðL;5Þ\ïwï»ÅZ£$zX˜4iG½‡ÏsŸ-Úî~wÃцï7îÞzsíã`×-¿Ë·aol>Ê×ÚwnØ/Ÿ´£öd¿iüû•l]¿xW~ eg>@òÆs¾»Ø+Ctæ›dÅõ Ú_ù-”Id×/þ“WOt°ò[(;ó´Ù2N°r¢Çáªo¡êÌc/²³å.×ʉFѪo¡*8ëÂloK­žhÕ7Pua¾ŒÞ­œè;œý¹^ý8ý3^üG¼ê‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0šäúIDATa"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„‰&"LD˜ˆ0a"ÂD„ýgÒ “øEæIEND®B`‚leptonica-1.70/prog/fonts/0000755000175000017500000000000012256617163013616 5ustar dandanleptonica-1.70/prog/fonts/chars-12.pa0000444000175000017500000004417212256617134015464 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR /ÿ6Ò pHYsb&2IDAT™cøÿaÐ [ZâbÞòIEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR/è† pHYs¸Œ¸ŒÌö»/*IDAT™cøÃð‡áC°a x„á Þaø…=@µÐC‚>n¥)ÛàFIEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR/ûÃÆï pHYs¸Œ¸ŒÌö»/"IDAT™cøÿ‡áü†ö ì ‚ú@P ‚€ÊhjUº7”àˆIEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR/>±\~ pHYs¸Œ¸ŒÌö»/UIDAT™Î¡€0 ÐÛ #t”lÖÄ!;‚uÀUô%D(N|s'f&xÐ׋Í)A½Y‚.Ð@àI”ŠT3á ÕÏ^09Ì„{p$ƒ_ŸÿqíÀtzõ‰½IEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR/ xlÍ pHYs¸Œ¸ŒÌö»/hIDAT™UÎ1@0Åñ‡¤6nÀMz6›#iHXD¯Ðp[§¯žF„á7¾‚¼&@ãÀi»a¡–z*#yå”QsK†[Ç­‡B0)› ópÑ@u´ÓH3ulUÀªÙøìóé+ü\¼•bKIEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR&/§I…Ë pHYs¸Œ¸ŒÌö»/ŽIDAT••Ï1 1Ðé,s!r1ÑFH³èra‹”¹B$ŶÊ6YòI@¶õ¯úÌð &!2U 1eƒÓ˜|_pL‡ÜDónW•‡PkwSóÚ_Õ¢Æy‹W«Mý×0 óItþ¨š‰Ð.öÖ}˜ÝÏmçºsiÚ&ØI½Ëµ€|VǺÿýårÀƒÕÝfIEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR$/£¼Uö pHYs¸Œ¸ŒÌö»/˜IDAT••Ï1 1ЯSF;‹esO`®ä ²ba#ì•beë^`ìR„Œ3AÔÖ_<†ù0` á-E55yõÒÕÔúë>|ô¶nµ§nÔfº¶ë Ö¨–Äb²ø<5ñqeG¸%ž ç¬ÎEWB×{±:µ­Áò2ª“tN29ËvâdîH#$v DPœ>ßýç ŸŸ¥Xë%ÒIEND®B`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR /ò(f• pHYs¸Œ¸ŒÌö»/-IDAT™cø€ˆ~00|p£ 0<£ÇŽƒQÿ†ùìÁ*i‰ŸÂM§-ú‘IEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDR /ÿ6Ò pHYs¸Œ¸ŒÌö»/JIDAT™cøÿáÿ†ÿ ÿþ0ü)`øD>|`xF‡a¨†ØÁˆ7‚(€«oF2bæÇ +€hÐÒÿ@4è {òCU@&IEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDR /ÿ6Ò pHYs¸Œ¸ŒÌö»/PIDAT™cøÿ¡þƒý†ùÎ`8þáñ†>|`øD ôÇŠþ ÀýÇ ²pÅpíÓ~€ ÿ¶è1ØÆþ ò 7•§>¾vD:^IEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR/¤w´ pHYs¸Œ¸ŒÌö»/>IDAT™cøÿŸ„êþóƒÐ|~†~y6{&{† ?þ00f£‚»£ðIEND®B`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDR.#HU¾ pHYs¸Œ¸ŒÌö»/IDAT™cøÃ€ah` ¿ †LYÿ¦%ɘðBIEND®B`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDR .9tµ0 pHYs¸Œ¸ŒÌö»/ÀpøÃñ ý`$€¡¤±G}GaÕ¿IEND®B`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR.õíÛ pHYs¸Œ¸ŒÌö»/VIDAT™cøÿÿ9Ä? ñD< @±Ì@â?8`$€êþ°‰ò@â@=`ée‡`.X¬¬¬ bÀ~˜¡`ã!­[N¼sÿ@‹sxŽ×IEND®B`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR.Ú4Ø pHYs¸Œ¸ŒÌö»/IDAT™cøÿÿÿšh€ŠŠI&¯Õ•‰÷(™ÊIEND®B`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR.Ú4Ø pHYs¸Œ¸ŒÌö»/UIDAT™cøÿÿÿÒ {Á"˜ADC=x $~°ƒ”0‚ˆõ@âƒ<øÃÒÆ"8‰ @âŒËSV ÖÆ3 lhÜ"~¸å¤8@h”Æ¢ðyDIEND®B`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR. t, pHYs¸Œ¸ŒÌö»/`IDAT™uͱ € „á3àŒ‚›igé¬rÆEF#_÷¿{(…¨â@øž`G,3áü[E ´Â(ºó²É.«"["MÚÓæÑH’ï_«SÍ+Ùoóã¬Iiœ›@ûáIEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR#.Š<* pHYs¸Œ¸ŒÌö»/¥IDAT•Ͻ Â@ à'!‘.f”»Ø «dj‘(Ò‘™¢iÁ'8:#bœ‘_é÷ÔŽ±š0É(Í:‘IÚ0R©!7Œ¨*Œ š*¼L^Ýè1È>šx.€6ˆ¨›½K ¸l³ Åx]ô(Üdîâ¥2Ù>?[JKÏ£ÉoÆPŸz g±” éèç&ÕÚÊvŒ‘t75ú­lëþõ ë˜åõç¢ÔIEND®B`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR&.lVn pHYs¸Œ¸ŒÌö»/„IDAT••ÏÁ ƒP„á‘<Ú@À"ØJJH‚†`K 9؆^Èå–·™ÝEðê¾ãåªËηûØyw+îÅ,áu¤rsSOs[ú ÅüIC?%¬éª9ë‰N0жúÚ,½>ÝU £®ƒ™dÚ!«æ‰ž15l5ØÞòO¬»c !ØÌIEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR.ÄDŸ pHYs¸Œ¸ŒÌö»/cIDAT™cøÿÿÿ0ÁÀÀ"?0|àoøÀðÃþAø`#~`#ÀJÀHÇA4å?ˆ`qà¦üÀø‡‹øƒP·ãÐUö@ó00`8À u3‘DÓyˆ‡s\3IEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR .a &) pHYs¸Œ¸ŒÌö»/iIDAT™…α € …ág((QØL4®…›0%áù ÆÄF¯øŠK.÷ƒ°ÁƒŒ ÀƒÍiQ= J™"uÎbc:öófœmqDò";QfÅU£—jŒàŠ L½´öæQÿËQÞ”=§þ0IEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR$.hà†S pHYs¸Œ¸ŒÌö»/dIDAT•cø $ÔƒIù ø°`øaÿDþo“Àä‡ùÃL €È?È$‚üG" Õ‹a&Ô.„í—“Í`w]ûAþÿ† ö00ÂýE" ºî¤À?ÛIEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR.ÄDŸ pHYs¸Œ¸ŒÌö»/HIDAT™cøÿÿÿ0âÿ†öÿ €ÄlÄLâ'&ÁÀ#øâPbÿ‹Qÿ€ˆ1…ø#ÀÐw$ÂᄠǃA!fMIEND®B`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR.Ú4Ø pHYs¸Œ¸ŒÌö»/IDAT•cø ’ñ”ü ÿÿ?Ãûÿä©Aòÿÿ$†ÃIj™ŒJþg``þßÀõ²ïˆ&¾Éž¬©LDIEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR.ß]~t pHYs¸Œ¸ŒÌö»/IDAT™cøÿˆ àƒÃ;Z!€X‡ ¬;B¡“uIEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR.æ:Ï/ pHYs¸Œ¸ŒÌö»/.IDAT™cøÿ¿„00€ñö†üƒËC±}ßz¶º“ˆ™ÿ7 LH×Á³gßIEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR#.Š<* pHYs¸Œ¸ŒÌö»/ƒIDAT•ϱ Â0…á‹\¤Ì@GáÑ’ˆX)k˜ \ºˆ8üþPPââ“%ûîÞ™·“íÐ:_Ư%ú=[M>Èw”{’u–Åå ŸøÀ(oIN³¼ªs½à íבŸgª¦Úž>WÜ03½¤’jïÉÈÙáÒ¶¾™¶h×ßíþö(S§L¡¼IEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR.ÄDŸ pHYs¸Œ¸ŒÌö»/3IDAT™cøÿÿÿ0ÁÀ#>ȉöA<° ìÿ00<`‚ ápÂcÁç„ö*IEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR..š pHYs¸Œ¸ŒÌö»/‹IDAT••б Â0„áDréÌ&^…A"%ˆUœŠ5ŒX ‘,_ü…’k¾ú?P–Ѐ%}·1ÒõˆBBÔäø>êË©pd®ÌçÂ…I˜V£/øÆ„¹a_Bl˜‡6n]Éú^QF ²•ÃÊ8ìq V¼ø¤ïˆ’©CJû{wÁ¿,ÀÈÞv Zù•IEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR(.rÜfÝ pHYs¸Œ¸ŒÌö»/rIDAT•ϱ C!CQ# JFx£0l’U…HÇ—/ØiRÆÅé\\8‡¯¨>:Í=c]_XY&éd“]Ž* ½çë½]·£%â®Ï»5àÚ½©6²}Æ£ü§;Ú¾¿­?ö~ˌȉUó,A™ùÔ„žÍìxÑü8yuÇb½kÇÍl½cíN} ;;™9˜-¾;Ñ JYsIEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR!.ŽÉM pHYs¸Œ¸ŒÌö»/kIDAT•Ï1€ ÐFŽÀŒ=õfzÀØ€´˜ÀBb‡75?ÿC©GÐXTÑ]HÀ½ÈjrÝ<1ù.·„ Þ5™W£zqSw×=¬ˆúƒçà¥>š'­²UMío Ð7e\÷ÛÔšŒßNÊIEND®B`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR./äå pHYs¸Œ¸ŒÌö»/oIDAT™}Î1 ƒ@EÑ+SXÎ܈¥)¤pYŠnC™Âv¬b!¼Ú Ö}&6"TÑgVbÕ~‡É-{2ÃZ´aÃ:VìÕbH–V@ÎÞgÏlÔKã¯?}*àŠÿEÆ¥IEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR!.ŽÉM pHYs¸Œ¸ŒÌö»/IDAT••Ï¡ 1 PK3‚G ì(ã|:PØ•RÔ5"(Í1+®*µ¸X²þ7yŒPЄtõ*T ö[lسeg¡‘FèÉJ¸ØîŠÛG‡õ„í˜^a¿@ÍS†ö1ÿÔ4]à¹Ãcƒ¯ Ÿ Þ²r‡Ü#}&VŒÑÙ¢¡úHB}º¹“Ђ·èûÝ?¾›Å§»§„IEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR!.ŽÉM pHYs¸Œ¸ŒÌö»/oIDAT•­Ï± „0DÑ‘R‚Kq1”px%  %Áµ˜ÌŰ»$¤HLðÂ/ ¨(U0“@fHâ&(‰» F®‚ùœ='5˜ Œjw&ut—–]knÕ=Ìòs³³=Ôè‡Î¸Íþ‹¯½ ªøZ‚Ë¿IEND®B`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR.øóÿœ pHYs¸Œ¸ŒÌö»/qIDAT™…Î1ƒ0ƒá'`ƒ47)7+ÊÍ"N©CG2fˆâþQÆzø6Ë6IÕ¢i½¥Î>ª” òÒÓö†_Z×ÿ衎PfÈî"-Wºðêe>É–¤â á@J晳;÷ñÿ|€^އœLIEND®B`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDR .Ö¶Þ pHYs¸Œ¸ŒÌö»/IDAT™c`P`öè¨6Ó"°¬é3à¹éIEND®B`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR/Ϻó pHYs¸Œ¸ŒÌö»/YIDAT™MÃA € йA¼HÐÅ7-¯xñ¹s18}á =xâLeÁÀ‰#ÌXñÅÆêyWé£S±9pâˆ3Vnó!¦ã&ÖÇUÌæ‹O|ðFýÿ~zЂpIEND®B`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¢¢î pHYs¸Œ¸ŒÌö»/IDAT™c`€ Ðmª-?`øÿŽç3q›­NïIEND®B`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR2ùM; pHYs¸Œ¸ŒÌö»/YIDAT™Åͱ € ÐÛ€ÖŽELÜLΊ’¡(˜Ã°%…ñôcbÜÀæµ’ˆ‡jdc{1âÌ q VOôpÓäŒDìŠF!²2QT‰¨Hj„3¼:ð)äl‚œÃQŒuIIEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR2ùM; pHYs¸Œ¸ŒÌö»/IDAT™cøÿÿÃp!€°b`ø4˜áó†ì`‡“MÚ‚¢Qm:ÍIEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR2pò¶ pHYs¸Œ¸ŒÌö»/UIDAT™cøÿÿɸáÃ?††?6 þÉ0<üÇÃpø? ·ƒq;3þc€ ÿ3q3âõOÈ÷0|`àaøÁ`4›d7í#uÙ,>äIEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR2}ìfñ pHYs¸Œ¸ŒÌö»/9IDAT™cøÿŸáÿ†ÿþ70ü·aøWÏð§žáÇú€024€¦AÄÀÏÀÀβŽ0‹W•ÆË tIEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR2ùM; pHYs¸Œ¸ŒÌö»/vIDAT™¥Í± ƒ@DÑ.¤J¡-g^ÉmÑÖ5pd¶tºõ!„$/ÙÕÜݸET‚oö䆱¶Á˜üÊ«b2–ú4¶GÊ‘JÁOå]d±ˆ7IôñLk +êmFòb g>:d½¬±æsjì&ûÛ—„|Y¢4 IEND®B`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR2ˆíA pHYs¸Œ¸ŒÌö»/HIDAT™cøÿÿÿ†õ@¢D0€ˆõ01¢‰ v QÀ $„{PÁðÃþ¨?¨@4ðÿà``ZÆv8xŸ| ƒÔ¤IEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¯¼l© pHYs¸Œ¸ŒÌö»/-IDAT™cøÿƒˆ~þ`øðƒáA} ¢¡?ÀèYˆƒ0ņgYEwt­‚IEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¢¢î pHYs¸Œ¸ŒÌö»/9IDAT™cøÿ€ˆþ$0üP`øÁE â´$x@¡A¤òõÐzÀðñÃç ìç-? ëž|ÁIEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR2…  pHYs¸Œ¸ŒÌö»/bIDAT™Î± € …á—PP:‚nâ*lb¨X‹Î5pJ ï§pš/—ËÝËSィ~ê%™)Áb¼»qFãä‚8ˆ¡pWùh+o#Àå B’í%_7+úös|釫 úž.|IEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¯¼l© pHYs¸Œ¸ŒÌö»/IDAT™cøÿƒáÇ0ú@KÄÀÁ@ëˆ@b;Zƒö”~IEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR+2íÿ> pHYs¸Œ¸ŒÌö»/KIDAT•cøhHýøÀÿÀþÃöü@êsû†ýŒr Êþ@}3ª?ðDýøÿ0=(>ù l ühèw•ZVííIEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR2ˆíA pHYs¸Œ¸ŒÌö»/CIDAT™cøÿÿÿŠˆz ñ£‚ýCCó†Æ Ü€bò*~Øõ`âˆþ @Ë(s31c¥×'Öà IEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR2ùM; pHYs¸Œ¸ŒÌö»/\IDAT™¥Î» € ÐK((EL3¬…aØ€ÒÂxbBabIóºû@1=qÁçj‰&CT"ëxIDP!¢ `?´f0»ê )ÅÇ^ï–>„¸1wüÇ‘’•2>óIEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR2gІ pHYs¸Œ¸ŒÌö»/`IDAT™cøÿÿÿŠˆz ñ£‚ýCCㆆ†î ~Èÿ`øaÿHÔÿc@!þc#ÀêÀ„ŒøS"€ÆÛÿòßûy Á $ê?€´‘C4°ÿÿ]©™lqÐðIEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR2jÎö8 pHYs¸Œ¸ŒÌö»/UIDAT™cøÿÿÿʉË ÿ0ü¨ÿ7`xüÿð†ã ¢Nðã%ØQ‰f4êà?æ *œ0<`Š}`øƒ,'øÁÀÍeœ.G?öèIEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR2y¶Ì pHYs¸Œ¸ŒÌö»//IDAT™cøÿÿ9øÇ†@|€áCËq=`øðŸ<ÌÀ Ád¸™†zÏ}™R¤IEND®B`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR2–ÛÝò pHYs¸Œ¸ŒÌö»/[IDAT™•α € „áß8+0£˜PX:«X¸Æ¹%ŸP|ÝÝåC¬j»(ˆW»ž8§.¢eŽŸy“%ÏF1 RŸ<©y.ëF l;»åO'™tl Ô#IEND®B`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDR2«I¼” pHYs¸Œ¸ŒÌö»/1IDAT™cøÿ ý«cøAÿÐцÀ”‡€F1|`cøÁÆð‡Ý:lr†W×:ä¢JIEND®B`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR2gІ pHYs¸Œ¸ŒÌö»/CIDAT™cøÿÿÿJˆÿÿ}`øðÿÆÿ PâÁÿP1² õ`â°Ÿðᇜ`(``ø¶‡™2‡I3´hÝX™üIEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR2…  pHYs¸Œ¸ŒÌö»/ZIDAT™cøÿÿÿŠ þ†þ ê<`øPÿD|Ÿ0ü°0ü‘'Î?`øÇ&æMaö0¢¹H4ˆ`dÑ8ñD|¤ÌÍòè©‚XÉo+IEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR)2é Ï pHYs¸Œ¸ŒÌö»/IDAT•µÏ!ƒ@…áWWAŠ­Z®QÑd/Ö0CH*ëz²W 7 Á 6;̰ œ€÷‹O?ˆq"œÏ äs0Ò_zƤ ƘèäÇX¨£Vñoú*Áß½WŠÇ†{:%º—#åVnd1“¹ Œ‹vPK•¨½Ñ$í”ï+¯å13”fIEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR2n;& pHYs¸Œ¸ŒÌö»/bIDAT™•α €0CQG¡Ëˆ¬ÀY‰’î‚€™ØÄ¡Câ”à P¼Ê¿0Ì =älh—E"JJ¸ûíµ5TǶ¡å3S¦û(Љ½F\pÔ€Ó<¼òï?ô {ƽ#,ûIEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR2…  pHYs¸Œ¸ŒÌö»/pIDAT™¥Î¡ …0…áã¡£t´6A Ušgp07A`!yå\wÌ'ÿü(¥>—€ä2 ñ¬›à7»2 N¿(½àïGânZVªNñ¤ ¤V~‘dCÊËfìÆ¬,Æhtdòd$G’ø|l[¤¶Nû1IEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR2pò¶ pHYs¸Œ¸ŒÌö»/\IDAT™Î± €0…á¿l¸ˆàb‚HÓÊ2#˜R^qä<ȃ¯{Å™Òâ€Ïe©$ $ Ü2ceŲÿN·»èz¥ŽŠNм¡l…l…ÓEËükèy Ÿ|ÿ(5|pIEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¢¢î pHYs¸Œ¸ŒÌö»/4IDAT™cø€áÃúð€4ôŒŽ?`àÀpÌ~@¢ @´÷OÃ?†ÿàÿDUöéTÍIEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR2±u\ pHYs¸Œ¸ŒÌö»/IDAT™c` x€ ”D a+nIEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR 2¦WÌÓ pHYs¸Œ¸ŒÌö»/5IDAT™cøßÀ ßÀÐßÀÐÞÀp˜Dt°áadž? ÁlRMh#þû†ÿ Ì=ÍsU…8IEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR2ùM; pHYs¸Œ¸ŒÌö»/9IDAT™cøÿÿ‰õÿÈÿa`8Àþ£¡áaCÿÆùÌ öÿøœJÍ~£}ý—/zIEND®B`‚leptonica-1.70/prog/fonts/chars-10.tif0000444000175000017500000000545210141353566015637 0ustar dandanII*l & TÏÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿä2¡ÈƒCä ·&ùw xAÈeAï y:vAC’|†g$CJÁ5LƒHéZr^C*dà†Í49 þGd û ª¨F` Ä$AäL(A¦ª ÅÏ0Œ0õß &Ò¼ô¬‚é$b`©¦–*ÜÒoÿÑŒ¼ÿ^•´ý ¶¶º AÒoÚúKt›I'T›N’JÂ9è:6³¦¸"JÖ÷úUßÿ¯oÕ¶ ¦ë‘Ö’Õ_ÿׯôºÒl¢²—÷_K¯Iÿk×ÿÕ/c!”ëßO]zZÿÿãéuKa^«×}j¯ÿ À×´’§ ž«ãÕzB–—õût–•-¥þþ’ù»[¯ò nIïëb‡ØW¥ýR^iS /õ[ÛI*!‹ñÿõJ¸¼Þ¬U¯ûØ­I•Þ—ô@¸áW›oNŸÿØ1I?vþ¨C®t-Xm¯ûFn^=Rì5é¹ói í_ðm">IÜ_ÒécÂoFb½ü2ûÂ15oò ¥Èkþ•ÿºIi/ ª#’M¥ú_¤éo]$Økÿooòï_õÄÐ3;®ãôAJ Ǥ—¶—â—ékúI=cÿþßÿiiuÿé~C8AÄ7p 6ƒMš¦ž›Âé¤Tà:hñ†™›%á –C=‘& ØH3bP p`ƒ 0@Á @Áhà7dt ¢Ãh6AE†ÐAåÆpX`ˆ0á‚`” t:S`šåÍ„l;ðm&² ˜|:>ÿ ·ÛÒom&÷H>ûïú·MÔ*ôƒh ßè/oý'ÿÒíoH7ÚA¾ÿÿ´žöÒm-/ô›OuöÿÒÿô¿—]+Ý+Ý/ÿýiÒzÒúzn]}/o®—ÿÒåÓ^úoöÿÿ÷®ûíÈd1È:N·ûïŽ5_ú_ˮ޿¥þ#ÚÞ®“Ð¥áaêGÇ»¯¤‡ýGÿKí}¿ßÿÞ^êÒKÂÃJ‚ ú¾—ßÿú^õíýÿzWý¯WM¤ê—=Á aÖ‚bž¯¥üˆù×ÿKí}ô½$¿ÿÿ}ÕºKÕ0‚ J¿¾•oÿ_ú^õ÷ïÖúPÿzµÖ+KûÂ0Ò¤½+†/ÿÿý÷ûé~“(¯ÚõtÓj—Ö"˃ /¯xƒþ8øÿ_t½¿ð—ç›:gÞ_î’÷h °ÃKKÖæÈ?ÿþ/ïöÿÏÿ L?ïëÛb’ña¥ú׃Î8?6 ~ý×ÿù2þ þëö¿^A†—]+ïý=?ÿ7¿ëÛÿ÷!©OúµzM¥ôn½.¯»×þÈ;‘ÿ·ö¾ßýƒÿjõèÂé}?~’ÿ_ü_þß½{_[oûÖ­ªW¥ì0¿ªWÿãŽ@ŒÿØkíúúí¿ÿ×TÞ—† ›vÖ¥Ãý¿÷ý¿zÿoÛÿm+ïWëà †YpAU¶‹ð’¿ú_þßÚû}××ÿûé^¾x@…ب£E_·ÖAoÿÛÈ;ï^Þë¶–Ù úÇQ¤Þ‘ ?†„b)+ézÿÿûz\~ßuþß]Ó]~—änADAk‹J¯ÛÒý¿ÿoö½´¶ÒÛ××§I½/Ó 0‚M†’¾“ ‚ãá/Øþßÿí¥¶—Ým¥úMúýÐl ¶Â]à“apKKoÿÛþ½Øil4¶í. iõô—üãA4Є™ „ †a™”  ðƒa¡„Ýv$l0A$lWM$ÃA¡ûTLB0A„ ¡Ä ƒAáØP@ð‚áˆA ƒn! ¯ÂVø¨ˆƒDA„" ÊðÔˆˆ´"á‚`„A„ ÂkÄD~„F„D8ˆˆúZý ý"À'$\΀h+ê1¼hšö¾#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?¡¡¿< Idd ,$<² V@Ø FC.<†T&A^`ªA“ÈiA  –Þ@òÄÒ}]4ý-¿èpþÿ¦¾ÿäÁ¸ÿü¯®Ó^ ÿI7_â?ÿþ¾¿ÿúMÿÿÿý¯ÿÿúOYx@³?/ˆeŽA¸þ@¸åáʾ ´åñŒ,r Ç.2!Ç oB1ȾC;ÿûpD3'„d Ï bš ‘{M ƒ!•à©„,2S!³H.r試 ‘,ƒœºÅ_úX„ô„aÂ74NŠz` º M0TÂ0ÃM8*£ ¢pH(`‚  +A0¥Äÿûao—m::6ÖŒ]ô¢óF+£ ›t]°“Z ƒ…}÷蚤’ÿÒè7nt+l6Y°Ø!ÁÁô †!6„I°l6‚pbG«ƒ6 àýiö•×_ú·½6–®¾•×ú_õ«tÚô×þÞßM¤þ—ÿXþºôß½?étÓÓ÷ëãúZ{®ª]Qd+úMûÐÖ¿ÿú ÿÒþº¿ïåÕ&é½*Ý_õ_ÿÿ×ÿ÷Ý~f>é7üV´à Á¥ä„ñ÷_ñÿÿÿìÿ¤ÚM]$Þ’AŠðŽ?ÿ6 ]/ù´ÿÿÿöí×ûo¤Þ’A¯@¿ÿÞ¿öÿÿÿðßúé7§¤­éPúÿÿ°Â_ûÿý~ ÿ{~–Þ—ãézW}áˆ_ûÿ~·àÿºZú/½*ÿÿÿùpiÿ·ÿýuù¿÷ôÝ$Ûéÿ×§u}/ý¿ÿu÷ÿõzc+½kÿý+µ½öÿÝiZýzÇZ¼RKÿØEÖé²(í¢êÙôÿöÿýûA6¾¶w†‹«[I6éûih0‚a…a¥l0’sXí=6i„í;m(i6…A§QLUï¥t_ýŠƒ—B˜ ÅCb‚Ø@á„7  pØh(¦!a šjN¬7ÿa ƒL! !lDq‘à b¦ÐL,Cšh_ÄhqüDDEˆâ8ˆˆý„Ÿúÿ n]'ýÿÿÿ¯I´²ôÒ_Ý.®«Ò‡@±t¿ ·Ž¢;i%èVØH$0Ö„‚L&Ö""?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ¨BBd  " (ÀÀleptonica-1.70/prog/fonts/chars-6.ps0000444000175000017500000000062210141353566015416 0ustar dandan%!PS % chars-6.ps /inch {72 mul} def /Palatino-Roman 6 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-20.tif0000444000175000017500000001171610141353566015640 0ustar dandanII*& 8ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù ˲ÀeÏ!’ .C@þ@ðV²Üà¼<¡4ÒÈ Úiä¡ T¯ xi9ÃN„ Ü‚ØoMSLƒN¹‚' ©VÈ2ÚD5è‚¡Á ÐA_ ÒpAá¨0ƒH ô›‡‚ƒeað@ UJA®¤xÃÓ¤›¼ „k„ 4|ƒ÷u‚ ¤Òn’G†Â ÐiaÂ>6A¿ÿ‘†“z8Ý%d4ž´l5ð‚¤6‚oÿÑç%ëi vÓT’l*hКè-Ý?ÿ„›Õé&Ó­&Áy˜ÜoÂT­«ÿ[®’O¥ié%„¤fÀ¬)À0©Ò¿ªé/ßúWºöàºnhÂéR­ÓîïJ–ÕZK­[~— §¯é*ªu¾½×ú¥pÚI+l/}ÒôµýÿýÒú«2;ë›®½.—Kÿúÿô•[ éêëékýÿÿþ—׆=[ÿÒôºýþšõÿô’KÈkb_Ó×úëëûõ^>—ûa_ýq¤¾ª®¿ýWúí$—"Þ’ÿÿ®–½ÿn/î©i%VšcõãézC݈ÿ~éVà“ÿ~’_¥i_ô–”%êô¿ªý%n¿ûÛK´‡¸Wûþ—‘gÕ¥ûþê”UmzKúKરҿÈ „-ÞÚ[ ]«ÿÒJ¼ ê¡„µúVö *í¯Ký$¼&¤Z+ /õàðÅy ÚxßÿH/ˆxA¤Ä&ÿøÃ’Eé~ ’ZáO¯û%ÁššÖÿýÓ©y˜­$Ô0ïÿ’`P‚k¼þ”p¼'L6×ý‡£Êlt¿í.èñ5½~¨0ÒI² ñ.ÿý$paý7@ÚAÃÚ_¨o!‰¥xþ—éAÒÚtŸGa„¾—!ª ƒIßÿúׄÚA n+ÿ!´Ÿó &ÿÒý'®÷Tƒl/˜m$m+üùY€Ÿé6–õÒA°Ò^@ü£¤Þßÿþ“ÿ¶•;_øm%µoþ’ý+KëÒp`¿÷éëÿ_®µÈ£¿¤“c_úK{uý%ú¼Gûþ­þ@ðÙ‹·éký+ý<>¹éS{kø¥úZþµÖ?úûuÿú_úJëÿ¥ýÿ¥®–õÿ×ÿþÚO_Ö•×ýô½.¨†kú_m­¯þ‘Áÿÿ×Uúÿn¿I¿H-uÒõ_þ—ìWÿZN¹·¥éÿö×é~•×Ó¯édô’é߬ƒ-îº_·ô•¤–þël7ðR†ø•×M¥é^¯¥õ®’WÜ;\*éu¶“¥ZIi­_ý7úM&ÒÒ-]¥õêÝ%úúI:L4;Ö¾þ‡iv“iU¨Kþ–ÚØG‘®Òö–­¤›a&é[IÿI&ÒgV˜«_t›I5†¸a&ÂJÚA/øxKmÄ Ó×^ÚDR, Â!®NNi´©†AµìD$˜¦ƒ þ’`Á-b¶!0`’°` ¶« a!H5†!|.¨1,DHjè†0¯Å ÂCBPY ÌŒà¿˾«p2(àÇàðÇ´/Õ,DDGÞ´¿T¿n©/Ò_VúKÛI/ú¤±m%Õ-ºam¤;im¥½m5ˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ䪿ȃLÈ$ä2Aha`b²ed-ˆ!ŸÈƒ p‹ ¨$«å‡@×%¡ –©H…@0U† €\«Ê€ è ®jCP`ê D@i•a¤DÁ« "(  È¡‚ÆÀ2'!‚öCEda ÚÑ2S!°Á ®1dXˆØhœ4ô‰ÿÚÞr.AÁ„+ÿò \:æ€xi >ÂÂÿÿÞpÂAÿúá5µëL ìƒ  Eò i‹Ê D3!šA ÂfC0„h¤€Shl†œÂ' †–„B' †–„@Ñðüƒr4ù Ó2 1;GÃCªôÂ$ C3a!²™ š{4!{M4ÓH&ž›iÙ .Ð mšì ƒí4í5a¢D !)ðË×hÐwƒ ƒää[oh í4ÓM šm'h ƒ Ãan óaƒ@Ū}Öƒi7PUó‚°‚ 5ÛAÁ½ü$ÿKûÒom&÷IëëÕ´›J’ôm½ÂMa¿ôÿév·¤ÛH7¶“ïûýïOé}:7í ½¿é/ÿKûÒoÒoÒÿûKZm[Kÿt›_KÛÿIÿô»ïI÷I½¾¿÷Ûý'­/I´Þëíÿ¥ÿézͯWÝ~¿ÿuÚ·M¥¥þ“hÚý{õÿésiͮޓ{¤ÞõÿúëM¤õ¥ôôß~—¿úÿú_¯Þ¯êÿÿû×~¶½xêé?¯·Ž)ú^Ý{}_Õú¿ÿjÚíÓ¥¯é__ÿú õöõWüG›UÒn…/! n@ðÐý>ý$;úCÿ¥ï^ÿßÿõ÷M¥j—…ƒÔ†(Oí/ÿÿÿKí}½'ôŸÿítŸozKÂê ï·ª÷ëÿ¥ï^ßß]õþôÿéZUáaªA›ô¾«¯ý/µûÿÿ[þÖöÒm'UðXu ›[ï¥ÿÿô½ëÛÕõWëýý/éºKÈÈ5XH0ÒÒéÒ}/òã!žÿKí}úú¯[ÿ¯ö×I/A„Â0ô’ý/¿ÿÿKÞ½¿¿ï«þ×Iµt›Zõ°ZÇÓzU¿ýé}¯·þ—é0ÿzoê뤾Ó Á¥¥ëá¿ÿÿè/ëïWõ}(ßþÅ6’ÿ„a¥¥^Þ/ÿ×ÿKÛý¿ô¿Išgî–“ª_ái%ú\LŸÿøÿKô½ÿÒü ¤ )ÿÿI¦é/ðAÓ+Z_Ügð¸_ý}¿Ûÿ ~B”€­ûWI½¦Ò¯¦‚ :úÒx?ãÿOô½¿òÇæÕƒýêÿ¿_z,0Ò×þfÿÿñ~ß÷þ×ðL?ïÿm´’öh °ÃK¥I&ðaÿüÌÿ¥íÿÁ~Ðo÷KI´¸ÒñaƒKÿðßÿÿß·ûÿÁ~Ø7ÿ¿öÕxAa¥­{xoêff`Gÿ™ïõöÿÇöÈ)„ýµµôô¼ ƒ /ÒKßý÷ÿöýëÛÿýÈ,'ÿ®›I]|@î—þÿÿÿöþ×ïºî¶È-ÿÿͧI| Ú_ÒMïzÿßþß½{ÿØÛKKÒwKá«ÒXû~¿ò–A#ÿoí}ÿÿm¿ýöõ¾¾}þ“ßÿ÷‹ÿÛ÷¯ol?í­®’Mé|0_õÿÿÿÿÛû_oÒô·ÿë§ë×á…÷I+ûël†’?ö½{}ýý¿ÿ÷«z^a÷ªHØûëøý¿¿ïÿöÿÛIÒé&úðÁ„»rë_÷×»ÿíû¥ï½o[oÿÞÚ¥éxa„w¥ª·þ¿þßßíö½ûÿ·_ûz^d6Ê §m, «öúÿÿÛý/oëÒïÿ]/K×Ãm°“„–úõöÿü7íþÞß¿·^—¾ÚI7¥á‡„†*(žSû}d2ãÿý¼†dz_~—im˽´´½[èƒDx`ð‚°Âa*Þ·¯[þßíþÞß·[ÿÿõé~ < › ©úoK]¿ÿo^+ßt¿ï­ÕºãI½ 1&Å/Õô¿¿ÿo­ý¾ëm-½{¨ê–ô¿ x{!§a†"÷j·Ô=/Ûÿöÿ¯om-´¶úõÝÒ}/Ó 0‚ ¶•>­é~ßÿ·ûüm¥émë·µ]7×鄃 VÚKzMá/ÛÿöÿýÛKn¾Òí/¥½%ûÃJØK}& ØÒ×oÿÛ×kÞÒØimÝm…­Ò}ðÃ+a„’¼$à `—ì?ÿoÿ݆–ØKnÂ]¤íi^’þ: 0—à`Á% @z[ {ýµ]®Ü6Øiwil0—ûzAÃÂØ0‚NЄÈÁq 0Áªjž›4ô×` 0Ã$Ûƒ &ÍCMm$ÚhÐxT `ƒ Å) 5‹!±AÂŒu 0 m"87f¢D”0`‘¥ 9Б ElWX,2 j?k  Ä @Èla @¸bHëa… @Œ†8b…°Ð…µøI‡¯°’Ð`¾IÀ)N ßûûû† -Á…†;×þ4"  "D‚ÀÄDhD80B@±8ˆ0B ÕˆþAl¼†Hg™²üH ƒRâáÁ›ˆ ôHDqf UýÒÐT?KAþ’9ƒô©D.Iï¢ 7¡¥ (ƒ_QD €•ß …5á—@Âú l ÁþŽ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ6@¾ˆ5!£EG…¢0A4 a3ùÈKGA ÿêèØ¯L#ÂÂ<, ƒa$}Aza=PA½0 Õ/´ÓI†ˆ:L ÔØ¿ú°>Ž  ƒ„:M…I¬#ÄÿAzÿßÖ–¿úWõi:O_WMþ—M7MÓtétëÿÓ¦“i?¥ÿí÷º]kÿè/ÿ_m~¿ö×öÒ´ºÿÒÅë]zõzÿKªëÛ®ºëN'Å$¶Èjqïû~ßú¿ûþ—»î—¶¿¾ÜÚ­÷I~iú_ô)ÿþ_ÿ¿ý_ö½{¥ª¥º ~›ýÿÿÒÿÿô¾ýjÚM¤ô’[h^" ¿ÿõÿ¥ÿýïûûjÝ|U­ °ÃA¯É õýuÿÿÓÿõÿù¨5?Ö·M>’[hñÍy €+ëñ÷ÿÇÿûúû"§ïôêÕÒA‡„+Áÿý/ûÿÿÿØÚV½z« $ðÿò·¯ùôÿÿÿöï½7¶ô“é$ zÿó0SÚ_ûÿý~þëô›µ«ú xA}í¥ÿ·ÿÿÿ†ÿ×JôÞ’~”^—ÿûiíÿÿÿàßïMïþ•êÐÿýßì0—þßÿÿßdÓû]t“mWñô¿ÿØ…ÿ·ÿ÷Z_$GïôÞ錄ÿÒý¼0¿öÿÿÿðí+]$›µ¯ý/Ýÿ Âÿ·ÿïõûþûÕéoIÿÕßéþßÿõ«~A®?í-_Vý"GÿúúÞÿÛÿû^¿ß×ïÒ¦ÛIÿ^›½ô¿öÿýýoÿµzz½+ô¿ÿ]+mo_ý¿ÿë¦×ëûXØÒ{T«ÿµ÷µõÿÛÿûJÒ×ÿWª¥mŠ¥ÿõ´¶Œ+d6¯þÃÿöûI†½¥m£ ºW¯ÿ¶¿i7a-°½ÿíÿû¥h+_ò(öÞ´›i/ÿ†ᄘd0ì0— yûÿiZL0G?iXNK®•ô¿þ!h0‚a…b­†Xwk«¶½ÛiA‚ ŠÖÒb˜¯Þ­¤ö¬¨Š`ÁZ†Á‚Aa‚@ð¶0@Áƒ6QL,"œ 0•Tµ„˜zþÂŽmŧ@ÊCa{ AyÐ0K†‰ ‚† Áp@ç@r èÁ‚ Y €åL(:Ú Ã×ÿk Ðh0¶ ÿ°_þÄ)ôƒ âš o]m?þC@ 4 Â؈âˆHeƒ ,C ïˆãâ"@“„‚Æx‰ hìG x~ÿAÎ||ì Ÿúÿ ?ÿúOú_ä ÿÿÿ_ýëúëÒµÿÿÿǯÒzÂúÿid½*ôƒiÿ¶—¶—ê%8"àlxýzB;i%ä ©×´¿´¶ÂIz°Â %_a„‚I ë Bˆˆ ø:à ÂÈC9Ù Ã0±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿà L ss¾Æ(ÀÀleptonica-1.70/prog/fonts/chars-10.ps0000444000175000017500000000062410141353566015473 0ustar dandan%!PS % chars-10.ps /inch {72 mul} def /Palatino-Roman 10 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-14.tif0000444000175000017500000000714010141353566015637 0ustar dandanII*¢ &  3ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ!ä2˜r 9 i¼à×w+‚ƒE…ºÈ,'d Y2}D6øI²ÑiòÐAªd4æCjÈCV7&ADÈi~õÌ3K˜jƒÕ¸j0 ‚ %‚á=zðGPP›¥¤›ªFÍ‚¦ŸaA Â8AÿÕ#yx4›Tb}Y ·UA6Z@´mßÿ„n‚N’M§T“`tx³Æü%I:Mû_¥‡ÝiõtõVÐ\ Üu—`¦ŠÚMÿýzWKÒWuUÂéé´]t©*}ÿuUÿ_]°ÞªÜ.›Ký/]oÿëþº¤°Å«ÇýÒô´¾½ú­×Zì1ëûú^—þý_ýtªùˆZôºÿô½kÿ]*¬#÷¯üt½*Jë¿òÒUi%Ø E8ë·_¨ö¿â?¶«¥Jé__ê—ÒW_ýïTép¯Uú¥ò~»iZ²;ûIb½¯¯ú¯I†•ÿ]á´ª«jõýRKÓH—pÒ×ú`ðÄ%È•®?ÿI|^i1Mÿñ iWwëôˆf¸M.pžj×ý”áµ ýÂ×þ ×Aôé‡kÒì:FöBiã×é]tèL+a…ßÃjBrNÎ?×ô¤q´¶žmB76%õújÒ‚0Ã[ëúß‹pžA¶¿­—š„tßäˆ*Ô¿¤é~Ú¤kò 0ô­«ý~“kõÒ¸a%þZº¿ô¿×­÷T›ÿ¥ÕëÈF¿¤èI§ô·ú µdXÝi½¿ñ®´µÿKK~—ÛKõý/ý-þ¿Köÿé¿­ë×ÒüqÿþÒýuÒ¢ Yý}}}%öÅ=uÖ‘§úz^’ÿÿ÷×_ÒÒÈlu¾½rŽ=uK¦ßòÖ@‘éý&ÿ­WÒÓ_ëuÛ¿Aö–––ÚOI6’ZëzI_púé5ý"†]v·þ‚úïKzl É;ÿÓu¡Ú[¤é+i¿ïI&Òa„s¯ZºI« $œ0‚m$­$¿¨<%¶bƒ]kTà ËN±ƒPȦXa„ ¶¼1’ A0ƒMý4¬WÖÂbLP Xˆi¦!‚ -!ƃD!`ƒC !"/¤¢""?u_º­}Õ/ºIW¶´¸·J>”-´‡n·KÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈr? f .@ðÕ †JР: ( xf†@Y9rQÈ7r ÷äÁæA°êCQA Pd0A hƒdÑYY VCÅd„¬ƒJ4C Ü2‰Èe«!¨œ†b°@Èh õ@È=DˆøÈ128‚ô £7<…‚°Â 2àƒ h0ƒJ ÂÐ@Ã6Aá„ÐaƒI†“[®´Â{a„@ÏA£œ‚Œ=a†$ ð0D2¸"]8g· Ê€ŒÄ`ÏaˆÈfá Dp'x ˜„,@Ú*ûÌ@Óra Æ9'b2 š¦©*´¯@†àÚ < ÔÀSÁSïOÓÐmfbù´p~ ÿ„ÿè/ïA7¶‚ozëÿ]=´›ª_H8A{i>þUÿ¥ÚÞ‚ î‚ í¤ÿûuûi:Z_M¤þé{é?þ—þ“ö“úýú¤õu¥ÿM£ é{éú\ÂhÂÌ'­î·½ûj÷¶®–—‹¤ß~—ßÿÿá/ÿoI¿I¿_ÿëý&ׯ! ÇÒz¯|qKÿÒöÒöýÿÄqÿ´avéèWÂ?~ˆ{moÔ{õý/ÿoJý+ÿöÒûJÒ´’ð°é LÙ×Õoõÿ¥ö—þÿ¿ÿû׺¾—…†¸G™Ú·ªÿ¯þ—¿íëô¿WûijÞÝZIyÊ€“I £ëï ïwÿô¿KÛëú½þý-&Ò¯M0‚ 5ÒkIô«úÿÐ^ßíýëúWÿé>Ú^¾©„a¥¯÷„—ÿ×ÿKô½½_¥~˜¶“÷ÆÚI}àI%é>/ÿÿý/oöÿÒü%$¯ÿ¯iÒKü ƒ .«î?ÿøÿKô¿ÿKð“5†¿Ý-]&¯¯¦‚ƒ@a¥¯×%ÃgãÿOÛý¿ð—æC"O÷ß~é/´ÐAa‡]z¼àÿÿñ¥íÿ–à˜þ—·z^"Xa¥ª¥Þ ÿüàýû·ÿ ÷ÿm'Þ­ŠKÂAƒA}i>ßó€ùÀÿ9¿ÒöÿÇöÈkÕÿõjº^A†½{_ÿþß·ÿÿûU?î•«èÂmW„6—ªI>ÿÿÿû¥í÷÷ö ÿÿºü õõÅ÷zÿÙ íû·õõ¶ÿû¥i$Þ—ß·é{¿ÿ¿ÿ·ý{{ûûoûi{é7¥ðÁZ_údžWíûkíúö»¿ÿÕëõàÃ&÷T¦‡÷¯ÛÿíÿÿÝ}wþõkÕ7¥á†NÝÈê’_¿^ÿþß¶—·¿þßý«î©^¾2 `A;a' mýÿßÿ·ÿí÷[u·ý=i^¯¥á‡„ ب¢í/§ÒÈg}ÿý¼†‡í/o××lƒw¯[_ô›Ò!±ü0ðA6a%·­éþßïû{u·_ýÿÕ__†„b)/Ózþßÿ†ÿŠöö×µÛÿWª_Kò”˰Ã" ±kO«z_·ÿì=wÿ´·­½-ºÝ+×ôÁ a„m¥Þ“z_·ÿíÿ^ÆÚ[imÚö½R¾—ë† “m%ô˜d6>×aÿû¿»il4¿®ÂM}7¤¿ta°ÂTÞ 0ÂX ¿aÿûz]{°ÒÛKnKa„¿Jú_ððX` ;B˜0T!!I°aSM=6ÐÓtÓvA&à &Ü0’lU4êÚhI„ÓA@d1ª1 ˆ4b°ÅÏYY WÙ[‚úd%D1¦¢U†PÂ!•[ˆ4ÖÓô AÊ­}¬<&‚ôSƒ`H„ .. ?ïí{† BöþŸühDA‚ ˆ‰PÄGÄCƒ Áƒ Átâ">¢#B"@ðÕ±úÂõ„­ JŒ0~• ”àj }"°b‚ _T@Ð=!ã@Ôžøÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ>A0U¾Èd<<5 &AžCj€Åk‚Qäx ³2ƒLÔ‚ÌÈ 3!«4¶@ñxƒ^$.‚¤/B¥·½¤A›ˆ |‹¹ÎM2 ø†¿Wú«ºAÝmÝvþÒõÿÿF×ô¾¼˜f?ÿ¶¾»Mx_ý.¿Ä}ýµÿÿÿKýÿýµÿÿÿK¯ÿÿô›_ÿÿÿÿÉÔâ6ÿ¤Ü¸i\”Èjy‰ä Õ=A¢Œ‚vC. Èf ƒ\È5A)Ô¡7 ^ aÈfÁÜA w!­Ä.0ÿñ< Á`ƒÉ8 ôÁAuÈ(ôÓL0TC  `ûaÓáB8:6I­7ú Ñ·F èÁ°‚ é„lUªA ¾ûÛ‡§j’ÿÒè>Œ  ƒ ÒôŸA c7Í,‰†Òrñ&È(Ä`V‚ £'R0‚gN´ÚN–—ÿ·¼Bm&’t› ßœŸôºb›Šzn!K‰v— £=þöÖÿÿÒêè:ZN¿WWøAu]Z½6—A÷þëTºê’ÿöÝëÿ¦õzÒé§§[õè÷Vý´t¿ ¤?¥¶“®¿ÿú_ÿOM¯V?õ£ Ói] ImÌËúoükÿÿôÿ÷õ÷ý¯ZôëIn5ñ»ªÿÿþ—ÿ¯¿ð½6·LWª[ KÈd‚?økõÿÿûúû$gïéö›¤«Ñ³ %ä2y›?øû_ûÿÿÿÙÔ ýÒý}RaácðÿÈ€1zÿœOÿÿÿaÿ{i7MÝ$ßÐaz ÿç³iíÿÿÿá¿Ý/ÖÝwÒHô¾¿öKÿoÿÿ¯Áÿýn¾’¿h}/ÿö!íÿÿÿä5éýý>‹¦Þ—ãéwø`¿öÿþë[ðÝ&×I[Õ/ÿô¿½˜ oûÿý~ÿßÓzOt—ÿý;¯¥ÿ·ÿïûù ·Ý-}+uRÿýu»ÛÒÿÛÿûKJÿý}Ž)&ú¯ÿצÛ__ý¿ÿ­~½b©Õ¶ô¿þ×KÑu²>¿ûÿiZM¯hº¿×—ÿ迆‚a£¶–Ú÷ÿ·ÿíÔ4¬# éYo /ªI·IöÂ\0“ + %°Âò\ ÿØþÚP †—ÚQLU´î­Ò¥ÿ± !1LTœ4 F°È1¬Ð0u$Õ²© jm$à‡Q @a(¦!dªIÚ“†WÁ(=ÿ­Óµ†ßþÂëýˆPƒ_škzjÿü0… a ! ‡X!ÁNA!„Ða >#Câ""!ñGÿÒý„Ÿÿüøþ—þ—ÿ×ÿú¶¾=W×X'ÿ«k‚ê¿M ºn«ÔG/È㥶•}®ÚIz°Á"ƒO ë B„2 µV!ö±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ JJ™ PX(ÀÀleptonica-1.70/prog/fonts/chars-12.ps0000444000175000017500000000062410141353566015475 0ustar dandan%!PS % chars-12.ps /inch {72 mul} def /Palatino-Roman 12 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-16.ps0000444000175000017500000000062410141353566015501 0ustar dandan%!PS % chars-16.ps /inch {72 mul} def /Palatino-Roman 16 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-4.ps0000444000175000017500000000062210141353566015414 0ustar dandan%!PS % chars-4.ps /inch {72 mul} def /Palatino-Roman 4 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-20.ps0000444000175000017500000000062410141353566015474 0ustar dandan%!PS % chars-20.ps /inch {72 mul} def /Palatino-Roman 20 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-4.tif0000444000175000017500000000274410141353566015563 0ustar dandanII*&& r?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿW†8äã r AcØä69 ŽC8ä¡È1 ã_h†ÎCAˆ×¿4O¤PúNW Gr Á0‚øª;Â8ÿ×¢>CÓ¥]+#‚â•[@Ž<¹|Ž ÂEÞ&G0(þ¿ÿê•[ Õc«î‚(}.¿üD!~:¥+ ¿|qUõ­Ã.”mt|§ é¥\à`øg±_½pÅ#ÂþM.GœÄÒ»_X7 ŠtGá…ä4¦A£þµÅéô_l2‡Å—‚8éSíþCXqÿIâéPpÿý‡úߥ r?ëõWP@µJû»ò9§­-#µêÚUi%­hEl6!ºéjÁ‚ 9ÀÎ ƒV %ˆˆ0„G¡Æ„DDDDwdp_^6’C¸Ž?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ&½ä2E#7!Ÿˆ9È/BB ù a¸‡Â „ ‚ „²,{'„â ЃAzbÈ`ä>d d=–9pAÜ“H$äõ¢>Â1; ¾ÑvÃ.ØeèeèF †ƒ4 ƒAÒAl2ó»a—š#ÎG‹ÐÓ „Ó[V‚z‘ÉWº28gî‚|7¾è/ÿK¾ôƒ{¤Ý'ÿÛ­=ÕµÒòƒqÈk=ïõñÇý/áÿßâ8ÿ·íÓt;䜂î*@‚(t烙þÿépŠt§ÛÒý/¯ýxE¬=$¿Â0Ò¤«øÿÌ>aøþ+ÿÿ}-ðJp4}ºÒºØÒñ‚!ža†–—¤Ü¼ÿŽ>\¿û¥íÿ„¾)‡ÿÿô— „6—ëßòö^ä¯þO÷ûãðE9ïûijýº^Úñ¡R9þô±ÆÃÿíû¥í÷]ÖÛÿìThÿÃ.…†V%~ýdÇßÿÛÉÇþëºíÿ·Ò·¤H ¬äp˃`D4;A¯Òaá-vÿ·û^ÆÃ m¥¶AÇK´ºzô¿Ò ŽÁaŠNЦf) &Æ0ža¡§ Óv!Ø £Áœ6=é&Âh~8ˆˆˆˆˆˆˆâ""""!„""""""½R3 léˆd½Þ"#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþAZ; @ä!¤äœ†´Ò‚‚îA܆‡ fÇ!œr >Ò¤î‚îéoéÿXÈ ¡ÿÞã¯ÿÿú²8j"^x E_A{(|¨ »ÃåÕ‚‚ CU#;”ä»!‡3Åž%œr܃¹œ‚YàƒÿÿX¢<áÑ¢=Ý4!vwý.Áw³º/;0èl¡Ñ§í4ÕïM5#ËÿI‘ÁcN“¤ôÛ ˜TîøKi§ :VÓ#†´8°Ý/«IÒ¿ ÃøˆZñô?ÿâ¿ÿþûÛAûwÒìŽîqü"÷ÿ— KþOÿÿÿ·ÿþ—êúXkëûÿaÿíÿýÿø?ì;cM†—â?®—jß ÿoÿÝ-+\ƒþ»ÔßH±ÿø2žp8S³€ívž›i¦„튜”:p §jœ$ÛHøˆˆˆŒ½DDDDdpˈˆˆˆˆã© YÓÿþ£ÿ¤Èá«ÆÒ_ #°iÂib"#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ’66ÔÜ(ÀÀleptonica-1.70/prog/fonts/chars-16.tif0000444000175000017500000001005610141353566015641 0ustar dandanII*p& $ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü†IÇD2C8ä3ŽC$ ï xkÙòÐ@ðl´ÓòƒÅÙ Ë"^A³¨‚¿I6CiÒ Õ2nCV„5hA’e( ØäL†<†TÈjÏUêÁ¡5I¸< aA0\q‚=wÔ†hhÛ“¤›T‚8l ÂiaÑà #„¿X@Ò ªzÙëA¦Ÿ„ ƒaÿ\#‘vÒzFßI´ý&ÁSGÍ®ZN“þ‚íªN’M§I-„}g†áýI7WõúX¤ž–Óúp‚áÐN³¤¦ÃEu~ºé/¦×ú{¤–à´ž›E×AUSi_ï¯ëÒé+aµë…Ó×úZþþýkþ½uaŠ'i+cíî—¥Òé_úõÿZÒáþµÿZKÿÿ×ý}*l:_ïZ^–¿¿×ÿýik©»×ÿÒôºõÿ¯ñõºKÂ3¯ñ¯ýn»ßr¿ªÖ’lõ-¼}/Hj×üG÷Ut’ð•ÿúKê½÷ÝVý>’ýUy/ªa¥ÿûªÄ%¶¯ÿõð@Õm+üêÈ—{iUn½/Õ*ô“ -zöûIZñÿúA%ÅÑÓ ÿò… B¬…]ÿô’ö¡V)¿úˆ0ÂPšÿ¥úipƒ®xo Ó_Õ’àÈ“U¸/ý$ ׄMXm¯ÖÃPŽr¿/êë ÜLJí}pÃH‡ô¬Áÿ¥.6—Zæ #ioàÞi7é~¢\[¦ÒAØ…ÿÔÕ Ž7NÿÿÐn·­R×ä¥ÛÒ ­þAdLƒ"t¿K_Û¤ƒm%þ$­[ÿKý&ëëUpaíôÝ7ÿÿ¥®ûÕ6?û¤¿uú¥Ö“¡!ƒgÒW®ˆ¬‰{ôêßäëý/ýk^¿Ò[Ý/Å'ôµþ•ëÿöÿûô·¯__ý/ÛKôµÒ¢]úý}ÊþÛIëúÒ!¦?ï×¥Òý%ü¥ý/PõÒô–¿ÿíZûúM¥é_^¹ÃÇúItÛþCj;­.¶ýWT°Ÿÿ¶¶Ãü>%®•þ“ÒMÒ]úé%Õ°ÞµOzÒ!‰éwWý ¿ïKul È£ÿªWèm¥¶“¤“j–½^’WL0‡ý{¥¬4®ÂMÒé·¥‡¥¶bm¦Ò×I´k “°“im¤]/(à‚H1  ×ôûi̱D4Ä1 °’L4Amx1† „ÿµ±_ „Ä,1D2爉´$!‚®…!H0„A‚ ! C$ÜD]kþ´½µKþ©/m%ýúK»I/Ò¡Þ’ÛHvÒÛKv±ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü€ÀY\ 49Á—B ßR€PÁ´2†±2CjŽ@’ü‚ØkÌ‚ª!®†ÐBÈ5 `PƒZ‚A0 †À‚‚ ˆ Ö 2`‚*DA0 „@4ª †‚‚CzÈcB« ¾„™ó!ƒËâ 30<<2Éø0Ȩfh?ÿõ¼p`ƒƒÿ® ö— „Èm$hAºB5P`#0yó bd2æC.d2æ†Y˜*9˜d3q “‘h… ƒIȧG„Ñ ” cš€@Í<†ÌÑÀÎëûÐ@ÕŸÐ vƒg„Ïð´ÓM5 §I¶‚p@ØA ‚Ð@óaχ´ÓTÕÑôH&l/›&ðaÛƒa î áðè ÿú]ï ƒnÚ7¶“Mnû~¸z ð’ôm~è'ÃI¯ý/[Òom&÷IÿþŸí'KþÚí¤ÖßúOÿ¥ßzMî“{i}~ÿtÚ·Z_¶ný/oý/ÿKÖô›í&ÿÿûJÕ^­%KÒÒtawKßý/ÿ w0³ é>é>éÿþÚN–—î‚o¿¯oý/ÿK˜U÷鿦ÿýº{­&þ¼u´¿_oWÿÒû¯o[õ¿_ÿ×FoÒ×Èdä~Ÿ¯þ¿ýî¿}?«þ#¿ö­¤Ý ^‘æÖúQïÔô¾ëÛ×úÿþê×ôRð°éA3wOõ¿×þ—ºûßÿêôôÝZIxX5¤y¿ïI×ÿKî½½_¥}+ýºûõz¯ xX!—aXu„¤ÚOÿä|‚ïÿé{¯¿^µÿþºZ¶•¤¾L ƒ RJ?½/oþ¿ô¾ëïï®ô¯÷«Þ›§T¾ÔA‡^ú^‚¯ÿÿô½ÿoÿþ˜Þë~“t—ö ÃKJ½ð’ÿúÿé}¥íêúJúPÿ×§V;J½p‚ 4’KÖá‚ÿÿÿ¥ïûé~gPVûuÿO¯¾Dà /úx‡þºñþ‚ûKßý/ÂLˆÏë­ÓV’_M4µ_¸?ãÿOßûÿ ~b?Þ®ŸmÒKÚh °ÃKªÒyàÿÿñ¥íÿ–GðL?ïu×½/,i~—x7ÿóÁ—ø~ßíÿ°_¸aÿ¯WVÅW‚Cµô½¿çóÀÿþ{¯·þ?¶ChGï^þëáit—¾ßûïÿíûuíÿþÙ}µµôô¼ A‡_¤·¿Öûÿû¯ÿýnAM½=6¨Úm%ðƒkÿOÝÿÿÿ·í×·Ýwöþÿé/Ká«Õ$/_û Þ¯ý¿×Ûÿý°ÿºé_Mõö»õ_¿_ïû~Ý{{ûûoÿ^úÞ¿ /ê•ÿøãÌŸþßëíú^–ÿ÷¶ºI>—† žßTl3þõûÿ·í×ýýý¿î—W¤Þ—†@­ô]R§÷ëÿÿoõö÷ÿÛÿ¿ßï¯ 2¢`‚km-·÷þÿþß·^ߥ½mÿºZZ¤úøaá-¶–•?¾—ßÿ·úû}ý¯þ—ßt•éQxA[Ä"v·ÕënûþÞACí×·½o[d Å{ûéWƒ„† kÕ¾¿ÿý½ûí.ÒÛþ÷J½&ô¿ 1&Äi_ïK]¿ÿoø¯}¿oKuýŠJúüá`ƒDAT»K½&ô¿oÿÛýý½ÒÛKÿºb«W×ð˜(a‚›iSôÞë¿ÿoúö;K´¶ô½wé½/íC ¶IoVï¥ûþÃÒßöÒÛKnë´½Ò½%þƒ “m/ÂL0–× ?ÿoÿ݆–Ú[v–ØVª•ô¿\6‚à VðIƒ”ƒŸ[a­ÝöÚ­µî+a ®ì%lKô¯ ¾éÂØ0’¦„ Æ„$5`ª®­Æºi»PÕ¸0’q^êÚhXxM!1©+ Â" B„„C@‚ †dˆ R ÔÑ0ƒÔìB!š!ˆD3D0qƒXÀÓMP$Á˾ՄÐaz%ÁT)V¼ÿî¿øaa…¸aa…ý㈈0B" ê! Ôˆ‹ˆ‡H)†" † ñHDq x+Àˆˆ×XF€lκú úZô‘‚5°zD ˜= ’àlßPÒ kÒŠȇ ñè¨nÿGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ xôò"ÁÁ’ qÊÈ –AZÈÃ6ÈiÙ Kò 3Ìà©áHÌàÙ2S l<à“!© Rƒbƒ1à†\‚ÖÞë^ºiúÿV¤¸à«ÈÁÈù4Èâ [î©zCÿ¯këÿÿèâ×¥Ó^@Ì£ÿ«_öšð¿ú¿ëˆø_ý+Kÿëþ÷ýÿô­ÿÿé¿ÿÿýuÿÿÿ¦ÿÿÿõt¿ÿÿêàˆjS"ùÙÒü†—ä5)’™ 8!—ü†c‘ùòpJd5èCNæCj„œ†TâÏjrà†x! ŽàƒkT ñà‰W"¹ üCÿ«ˆ ð@Á< ` ºä ðA„(@Á aAB‚5‚‰ ÎŽ2U¡ÁÖ8ãÿêÂzaBG 4uÉžzd †tid3¡ƒ Ü„Â8An„ÐÈ…FÇF y €f€@Á(0›‚ a/þ®ž˜G ±Â6 ˜ôÿ@¼*zh ÞƒàÖ¡ Ð_i¦ÂI ÔÀaõhدFÉ„p‚I«Z6L £ôAG£†Â8lFɤÙþ“@ƒQý8Ry {ÓÛ¶“×ÿêôAÒ“¥rñàËOßKb ˆNÄ'I·@ƒa î©>ïúÓZ_úW¼Bm- é6?>iÿK¦ž[Š—æ•Èïm&í]'ZKÿ§¦éë_ôž›ýÓMÓi=6½?ÿúÕ¥Ö—þ·þ®–—ý¥Õu÷õÐÿ÷_·MýVÿMMÿíëïú^ïºOM¯ØþêèÂi:ZB«Ùž Cú¿é Zÿÿá/ÿÿK«ÿ«þÒ½*Ü Óú·ßÿÿÿAÿ{ÿ¶½7MÓ¤’[ KÄH ÔõÿÿÿKÿ×ÿÙ@5ÿÝucô‚ 4ù €jÓõäâ~¿âÿÿ_šƒ3÷W_MÖÞ‚› Òò™Cwÿýÿÿÿì“ê“ $¯øÿü¨Kþy?ÿÿý¿úz÷}&ô’¼ _ÿ<{Kÿoÿÿ¯Á¿Û[Vêí$Ÿª z__ûuÿ·ÿÿÿ†ÿëõ¿Jÿ /Kÿý†ÿÛÿÿÿÈ6û~—JÝ~­ÿÝþ…ÿ·ÿ÷õ~ARé7·£Õ/ÇÒô¿ð`¿öÿÿ­ýýj“oIÿîýòá·ÿoÿßëòÿºZ½-Ú¥ÿÿW{á/ý¿ÿ×Ûÿõ÷íRH†ÿ×_[ÒÿÛÿû­/ÿöÖ+¤­ºÿÿúmµõÿÛÿ÷õµúízØé½R_þÂév­ëÿ·ÿö•Ókÿ¬mi6Å%ÿöŒ- ›mXdôÿöÿýº´kÚVHvÑ~ÖÒúUÿ¶\4˜d8ì0–à r¬2¿ì?ÿm+ CÚÿià }i6ÒÿüW › Ä+cXkk«¶ºÛiCA1 [IŠb·õoHÿjNÌ!LmI±ÏSd®Pk òVä²Y«”šÂÆ”B dO ©©@f§hƒÐÿöM4à oÿauþÄ)ä˜_Ó[×N×ÿ††„ hC â#‹#†@,ÃXƒ !üG~„DDB6ñG¯ð‚ÿþëý'ýÈ(—ÿÿéuôþŸÿ­¥ã×õø__VÒÈ=4«é´¾ÿÔà×P±t«ÒÛI/ f Oö—öÛ %ñá†D w A¥†!12ÂÁšà¬µˆˆÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÀ@Îwwh&(ÀÀleptonica-1.70/prog/fonts/chars-8.tif0000444000175000017500000000456010141353566015565 0ustar dandanII*²& wÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù €ËRƒhä ŽAÇ! O<+" 49nä2 „†m„ÒdpÌ.¼ƒ~ aÈ(ò 8†l 2 ‚õcˆ(íÁ†rðj}ÒÝÐF&0šT¤b oýpŒd}¯TúMØéi6 š75°i6“}Õz[¤Ú®’M§IShÇ—7 µ—•.$ë}×ý/­†3¯ IéäuÒÿIÿéWýuªpÆ—cîºúZ_ßÿûýt’Únú_õ×¥ÿÿ¿øúÚIx#h¸eW|q¥üR´¿ÄH/W¶•1Cõõþµçä»ÿ fpaïKJÛW¯ëIqyù&V¿ñlUdÏXß_Ñ ƒ„—›š¦“ÿ[*_aõë„$yì6×}C‰â1Á˜ ¾:_¬ŽÚõt$_lHëþ@¿ª/4­ÿÿH[¬zµH6×ä6ª‘çKtßäSÔ¢ÿN»×JØ¥àÌ2àbê“jßä_¯ÒПÕ'ñÿ¯Ý/ÅoÒÿëzü†qýn¿­-,xý}zUúûõH‚‡ò =^—¥<$¤¿°írPA±ë­'Kut½*ïþ©´›e¯­Sí-Ýw]$Ý¿«Ò^˜a­&Òµ†» 0ÂJØI.—ˆ¤ƒ‘ÚÚØ¢±„11 b ± £(DŠ=ÐШˆˆˆˆ °hEÕhuê—ÛI*Å´¨w¡Ùb?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿäÀÉù¨mºä2AGÊ™§!•©  È:rtäC$r‚‚‚\AA¿cÈ'ó Þ„êC*„6j@Å`A9%æA<Šä_ üBÀ&A†0XL#l<3‚8Pg2 ì•Ïd¬ÂÏÁÑ6A ‘CDp@Ø0Aa†pØFØ`͘an\” eÃ8 a5†“jÌ×.Ø@†›A´ aÐ=EÁ;þ—¤ø@†Ðl"áC Ú4ï¾Ý5x6‚P«é´ƒ~éxoü%ÿéwÞ‚o´›õÿÿÖ›ÛKKÕÒ´ý/ô¿ý/X"£WÝ_tŸÿt¯ôŸUñéå×ÒûÇÿô¹täuïI¿I¿ÿ¯¿Om+IëÈd( ¯D¬ñi_ã·ê?ú õöÿþÿÇýåÕ'IÒ¼+ , ‚#«ï¤¿‘GÈ£ÿú^ßï¥~—¯ûiu}÷IyÂ9 L=R~¾«ô¿ô¿KÛÿKú¿þר§T½4Â0Ò¤«[°KÿÿÿKÛý¿~·Ò™ƒGÝ/u¦ÒÿÂ0iuûÅÿ ,0¼¥ú_á/Ïì 2¿~•ÓÝ%í4D§ 4µ]+˜7üqóaýÿoüýúÃÿßý/ƒ¾—|þ`yúó ý¥ïþ?†Á¿Ý/~ô½ ¥×I_ï¿ÿ·ïû÷ù®þûJÒEÓi~›«×{Òÿ²ûi}÷ÿ¶÷Kßþ¾Ký)'ÿÇÿÛ÷ý¿KÒÛït½&ô¼0 ‘Á½´GT–ýÿÝÿöþÒ÷ßÛöÿÞ¾ô›Òðà Ý8A °zG½,…¿ÿo!Gßöû¯¯!œ×XØ¥õ!Gð`Ä œX¤Ò½[Òý¿ÿo¾+ïm-µÛºïŽºoKò„r 0ÁC5Ûý7¥¯þßïìo_[zúM>“õújaM†’Þ“d8øKöÿý½/÷a„¶ÒÛÒØ0½4·¤¿Ðm† û  0•…°Á­÷Ûi…¶¯vJØa+¸0‚â«ÒoI}¬<&ƒ0„ Ä$!@bHäh`àJaˆD 1†„0âˆ(8a?„¡Î„?DDDCˆƒDDDDDG×þ©é$vPaŸÑPTʼhA„íãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@ñ²U²Ö@’È*ÙÇ3 ¨w aÈ|áìxL(U C5Èhp¡W¾–ÁÂ/ tÓ-¿´¾‡ÿ!’ CÿèN¾»MxOÿJÿ\Gëÿ§_ÿÿõºÿÿÿ§\ÙÙÙý›7†Áò,d6l'd Žl _ˆÜA¨r4#² Ç! ¸ä‡,rÇ “&丂îC(rc–9c]ȯÿ­‰ “Ðdù ˆEç>ËÌ«Ó Æc5È1‰ È1É„b ™è!ŒMaσÉdh~¡28Cÿ§EÛÑy„bap“a4˜ô^ µEê/t^iÕš.Ö©8MT0„X0ƒ ƒ0¥ÇÿÖÒn(:::\ŽŒÅVØpú â¬m+(6AÃ<”RztöÒ~’ÿéþ­uz±Õ…_étÂz÷¦×¯`4}}+­-/ý[®ªµ÷ü%ÿºW]t?÷Z{¥xÒ[Ñ„Qþ°»¨¯ÿÿè/ÿßuø?Ý[—Zct’­†‹Á¯ˆ<©ÿÇõÿÿÿÿ³@Ïûôµ«Öõ¦^·ÿæ3iÌ'ÿÿÿ·û×·Nô“z Cè/ÿöÒÿÛÿÿëðßú·ZÞ©Cé}]þÅíÿýúßͿۭoD}·Uøÿëë{#†gý¿ÿë¯Èlwÿ^ž–õHŒÿ^ÿ_ý¿ÿu÷ÿõŠŽ4ž5¿þ×Jí[#_ý¿ÿº´­~®Õݤ­¤«ÿt]a¤Ã-Û¿a¯$ûÿØa+&Â.½„ Ø‘×­[Ò_ýƒAÈèPb˜¨6( v0@ð@Û 0@àÁ†…¬80!4ƒkÂL6ÿñf ˆŽ""""3¯ÇÂ?õþ—úÿd¯ÿÿLúm,J½[Ké|†HiŽØJ¾+b$`ƒ¬XB#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü@ÿUUª` h (ÀÀleptonica-1.70/prog/fonts/chars-14.ps0000444000175000017500000000062410141353566015477 0ustar dandan%!PS % chars-14.ps /inch {72 mul} def /Palatino-Roman 14 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-10.pa0000444000175000017500000004176712256617134015471 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR '{äø pHYsb&2IDAT™cø€î•ÙDc¾ÄhIEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR'ïp¿u pHYs¸Œ¸ŒÌö»/&IDAT™cøÁðƒáC4Àa <†7~€aT}”‡` ñ<}»IEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR 'ñ¹Æ pHYs¸Œ¸ŒÌö»/ IDAT™cøÿ€a¾?ˆ¢ùp´„€ ¨i²;™‹PfïIEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÈÞ> pHYs¸Œ¸ŒÌö»/@IDAT™mÍ¡ !EÁ'¯¤S\[ˆôJóÅHV ˆÑCïÂ}/-ì"íØ&3Ò<®j9/ó¾I[¯Ì€£/IEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÅÀNÚ pHYs¸Œ¸ŒÌö»/aIDAT™Eͱ € „á3–Œ#hGAp•7Š¥+Ù¹ÆK\ÀHžG_uùs°]Ñ”YñAñFÁ“g\ä*îÍB3NqOÊBP`+`‰òà›Hà#ûmýò㻳î¥9éh5KlIEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR'ßü®T pHYs¸Œ¸ŒÌö»/gIDAT™…α € Ð?#È&º™”–ŒÀ6R²‚Ñ‚VCeB8"´6¯º»œÈ¤,»~²8EŒ‰Ê…ŽïX²Ú™‰%nÒXOȽ ây.Ap ß±•™+ldFR¯ýñëÈ)økä%IEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR'Û ~i pHYs¸Œ¸ŒÌö»/|IDAT™uÎ!Â@EÑ—TT~‹ë6p]‹@`YB›Šn«Ë`ÓÔ¼&“™þ’ƒ9ꊋR ñå.z'_$ÈUÌbqR׈¶t` 6ÎÛ^O›´eþ{ä6’1ªŸcIEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR'D‚ pHYs¸Œ¸ŒÌö»/8IDAT™cøÿ‡„jþÉ0ܳaè³a`«ahªaøÐÀðƒáAˆ ™gÃðϤ¨ª…|ã…?s<ÿ‰ßIEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÈÞ> pHYs¸Œ¸ŒÌö»/IDAT™cøÿÿA|ž8 Ī'`/S›iÏà§IEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDR'Ž4Å pHYs¸Œ¸ŒÌö»/!IDAT™cøÏ@:üÁð€á!>f8Ìpœ¡åìA2Ȩ#hµA§ÅIEND®B`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR 'e”¿ pHYs¸Œ¸ŒÌö»/IDAT™cøÿ<dèÿ1E­×*²IEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR'ïp¿u pHYs¸Œ¸ŒÌö»/IDAT™cøÁ@:œÁÀÁè2tñ""£ý¢IEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR'*%ä pHYs¸Œ¸ŒÌö»/JIDAT™EÃÁ À ÀíÄR´³”` iÅŸ…øÈ[ü»,ÜBnn€Ÿw‹S~¸kÕ¤¹Áô\q{|yòâ¡]«Þœ8³ÿ?’/^3ÚƒNIEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÅÀNÚ pHYs¸Œ¸ŒÌö»/JIDAT™cøÿÿ ÿa~Àðãá†Ï?0<ÿ‘ÀpüC;30ô1?ÿ#³Ãõƒ0ȼ†Ã@³ÿ|Àðá1Ð>~„ÝX0ÜpKáË7aPIEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR'.÷õÙ pHYs¸Œ¸ŒÌö»/,IDAT™cøÿŸ„æ3ü“gø Ïp@žMžaŸ<ˆK úÁÎp€j8:«Û2¸D ÕoIEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR''U£ pHYs¸Œ¸ŒÌö»/bIDAT™uͱ @PÄñ¿Jk”·•Þl`«¼D¡4‰Dý‰†D<‡Ð¹äWÞ1—=5,1Œ&xZót«»õ»£–øñÄõ¢®É,£´RI-¹qÚÕö&‹Ld äÉûýã"-Z·ÓúûIEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR'*%ä pHYs¸Œ¸ŒÌö»/`IDAT™uÍ1 €0Àˆƒ£Oj¦ààèúýˆ›kÅ¥‚RÓŠƒƒÃMIR"²Ø¡&–Šð$¦`á²h1K*ÔÝd—•¸FíÔ?–7ÒùÕ&f„Ó~ðDßêË<ß?n>fT¯0ÇÕIEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR''U£ pHYs¸Œ¸ŒÌö»/OIDAT™cøÿÿÿâ@üˆq#/bE NüÀð„r€ø'ÿâÏ@üˆŸñy(žÄ 0 170üÊÂíÆŽÓÝ`ól 8IEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR'ÅÀNÚ pHYs¸Œ¸ŒÌö»/VIDAT™uͱ €@DÑ–ávb+×™­` #'j¨px®ˆ ¢ÁK†OÎâ´`è!ú6})ÄèdL«1'È·ýͨ“ѤàD¿‰.жôfuµ¾IU´®ñÒþAm7IEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR&U­Ì pHYs¸Œ¸ŒÌö»/ˆIDAT™eÎ!Â@„áI*Ï.Â-V4á,ܢР©(‚€Ep••ëz…Mµàžê°}+˜OÎü ©¨d) QÌ«¨Ð >œ=^¤ÃDž1’ ·|ˆxö»‚ô›…vk ~_‰ðaHIpAîpGñx´ÒẾ(Ææë¨Í¿—#»´s˨A¿¾¾l¶eùèû‡¯IEND®B`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR &X¤D pHYs¸Œ¸ŒÌö»/oIDAT™}Ρ €0ÐKHFè(­dV0+@ØLIšÿ¹A`8ñÔårP*Áð/Ù}H9½$‡±6d«‘Lƒ±v&á"ñ1@€ É#‡L8¤âpªTØUoJô*«x®ýqmòx¤SýIEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR&w= pHYs¸Œ¸ŒÌö»/LIDAT™cøÿÿ30Ø1Ç?l þ7Añ!$| ˆû€xÛ1|°øÇðAI=HÍ ~€ÃÌhªçcx´«b/ ¤b[k§$+ÑIEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR&KÝ‹ pHYs¸Œ¸ŒÌö»/bIDAT™}α €0„á‹”Ž`6É*n¢`Ꭲ¸ÈsƒØ¥œï,´ù®:øARÀX+:Ð p† ¤ž•ÝØnfLö(8£ùŽÖ1bà‚ÔÈUòÐÕ ±ªÒ÷Á:Üt(Œ<‚…IEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR&ûbÏ pHYs¸Œ¸ŒÌö»/XIDAT™cøÿÿÿ0Áø€ýã†ÿj€Ä ñGHüãÿY@D œh€ð ¨ÚÀØ<°É âÈ¢ +þ0``þÃÐÀ u^+Ú}Ç«x‡IEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR&w= pHYs¸Œ¸ŒÌö»/7“$O0U¢Eƒâ’ÇŠG&ØÉ«1¹ ·Å3>¯8n‡ˆ:ÕÌ£3†‡h¤ òW”*{ja¬Uu÷ýáä³qûŸ®ó§IEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR!&bšÏz pHYs¸Œ¸ŒÌö»/8IDAT™cø ’ÿCƒü††ÿÿ³ƒÉv²Iv8I‰9HäûŒ0w"»/  ™Œe¸‘™)IEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR &Ø9G pHYs¸Œ¸ŒÌö»/IDAT™cøÿˆ€ A€áê¡ 3!†£"^øAÈÚ׬IEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR&ÜÌ—' pHYs¸Œ¸ŒÌö»/%IDAT™cøÿ‡ˆ°0ü±¡ª£? •ÿ00ÿ¥°/Ô!SDÃIEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR&U­Ì pHYs¸Œ¸ŒÌö»/jIDAT™uÎ-@P…á3#ÐnÕlC³- +°%’h flàj_¸ãú^ERžv~”s6½(X¥±±Z1GsNØ`†Æ¹;' Žy"^pÂ3”PÀ Ä7AA ´”ô0ÁGÏn«¥ó Iú®ýñ&Ž~:vìÓIEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR&ö|fˆ pHYs¸Œ¸ŒÌö»/+IDAT™cøÿÿ?3ðÿghÿÏðá?µñ þ‰‚00241Ìn,ÒBhNCägIEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR'&o„¿= pHYs¸Œ¸ŒÌö»/~IDAT™}Î1 1DáA‹í\Äì5D/PØba/àeDKï`2 !ãü Š•¯øêªŒ*LÀQÎöŒ;ÄjÇðqjé‹/Ùð&ÞeÏ“¼ò,/Å'·ÒC®:Ó™Ñ%sm¦MqiæUqn²ù±•žc\Ýè¡çÇ÷ü¯o ˆŠc½^ׂIEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR"&‰­ty pHYs¸Œ¸ŒÌö»/kIDAT™}α € „á—XPR8C8C9&,q ±Á„ðä1ZyÅwíOÜh؈6'fËg b ¯¡‚F˜`:±X±±éWVÐÃÓǼŠeë,¶é•»‰Ù÷NÃ;š§üמ™X-o1QIEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR& }ñ pHYs¸Œ¸ŒÌö»/oIDAT™uα ƒ0DÑ‹"á.l€7a4)t™É€”¬ádJ–?6qKóº;}Ix“Ñ%)¶nPC¯Øé 7­ÐèwM•¥àÔVü9¦ò+,ÿíÞåô©^òÐiS¯`ã h|i¹fœÍ}'ì¼quRºÔIEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR&w= pHYs¸Œ¸ŒÌö»/CIDAT™cøÿÿ30È10Øñ1|øß〸?À‚ArÇ€¸áÃ?9†ê>ÜÿäØíã‡Ø‹¹cJp|(IEND®B`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR& }ñ pHYs¸Œ¸ŒÌö»/vIDAT™mα Â0ᤸ#$›d´AAÇL!H´¬à0K–_üƒ šOºî”‘wv™ÔÎ#qŠA©c•Ž<¤Æ8s­,ÆL[ñq¿¼…KåÉ]º}ñRG˜ò@ìÓHr«½ìª/D#|’ÂëRØr³^~n¨-ÿ…QIEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR&KÝ‹ pHYs¸Œ¸ŒÌö»/]IDAT™uα €0 Àï(=LBFCˆ‚µeg—)ÆŽDÒ@sÍKÿUe4€ÙX'†èád'9åƒÜ92b0v«v¤±ÕƒËêå¦C©ÃŒd¨ãÚm{û©ùç‰IEND®B`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR&ì@† pHYs¸Œ¸ŒÌö»/^IDAT™mͱ €0 DÑ((“ X!d¥Œ@ÇZH,â\RD1& h(^y÷1SÚ¨D{M¬v /í¦Çà– l(BòmĬºæì“»Hn‘¹ùW-Œ¢àMñ«ÿã.»Gé0ŸÑªIEND®B`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR&ö|fˆ pHYs¸Œ¸ŒÌö»/'IDAT™cøÿÿ?À}óûèøÿáÿÔÅ@øƒÁžf7 :^åaÅ"®IEND®B`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR &X¤D pHYs¸Œ¸ŒÌö»/EIDAT™cø `‚ýÃþ?Œ êÿŸgøAs¢Ÿá‡ýÿù Bžáü?{†?Ìêþ10ÄÀ$°C†‹¨ÁwâÞê;~IEND®B`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR&ûbÏ pHYs¸Œ¸ŒÌö»/mIDAT™uν €0†á¯,³€E„,&D°p ‡±°tÅÂ6bs‘óüIaaó”//D„q€ÚR†I¤@¸ñ±| +ã ì˜Á–^¢=³iÅìJ~Ñ.«Ò J?&æ.1Y%¸ä?pZûãÐ{ª5üIEND®B`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR)&qMŽ pHYs¸Œ¸ŒÌö»/IDAT•…Ï!A ÐA­…d’¹Ù¹m˸µ®²Á ¹Â–ÍáÓNI*þ“ÿ—`'”ãˆLDq€¦(BÔã‚Q W¡;z§Ã­Àw|zpvvélì )¤ÖXŃг®õ‡**«$ô (,ÐK4¬Ì±Q0Áјj¡£Ó0Ó1_¶N‹áÿï?oH€œSòÅWIEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR&KÝ‹ pHYs¸Œ¸ŒÌö»/uIDAT™}ν Ã0„áëTji¦€Û@6HVq~Àk|& |îT_N`·ižæ…ã@Ò@öŒ™¸Ô–áÕ ­l†ž¾†=-" Æ›1ñÌUO¼žØ¨ŸÁ5‰{Iì%h¹NOÃF3¬ƒ7=#ÐãÚ~å‡u¾Œ¬2IEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR&ÿ—Æò pHYs¸Œ¸ŒÌö»/cIDAT™Î¡ €0EÑçí] º4(Æ`‚@v…:ì'˜š>~9ò悤à&-FV¬‰¥‡„2 û,(þRÜ!¨îTÌ. Ù”)6feuÊâ•^„¿H­‚NikŸŒ^ pHYs¸Œ¸ŒÌö»/IDAT™c`€ö~Z"v0b`÷ ç\a%'IEND®B`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR'*%ä pHYs¸Œ¸ŒÌö»/HIDAT™5ñ À @oÂ(°YF`V¡cŠÔˆ†Hó–?'­0sãÎ~¸x?þD¯6pæÆ/vœ8xñNþXU[ÿ^38²tšIEND®B`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR *IÒL% pHYs¸Œ¸ŒÌö»/IDAT™c`€ȨªÉdh`øE¶D1Þ¯|FIEND®B`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR*t@-C pHYs¸Œ¸ŒÌö»/BIDAT™cøÿÿ÷1;ÿcbå  !øÇ®`øøˆÿY0<áÿ ǸýC?Ëÿ?À7‹úw4o4uœÌ®IEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR*t@-C pHYs¸Œ¸ŒÌö»/IDAT™cøÿÿÃ`À0€C,xvq¥—ÔIEND®B`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR*¦' pHYs¸Œ¸ŒÌö»/%IDAT™cøÏð—áÃG†Ï 3ghBv~†z†ÿäBÙæ%Ì 6º“IEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR*y^] pHYs¸Œ¸ŒÌö»/FIDAT™cøÿÿ)øû†ÌÚ0ô?â@qnÊ3åìã@ÜÄü0ü‚Ù'<`h6xÀp €á!ñöøµi§“°IEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ÿw–@ pHYs¸Œ¸ŒÌö»/KIDAT™cøÿÿà fâ('þPÃðဠdžóX>Ôñÿ(>€·@qõÖÛ0<ùÃð„ñÃ{æ? û‰À±Pk §.±IEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR*’iæ pHYs¸Œ¸ŒÌö»/=IDAT™cøÿŸ úÇÀðƒáã†ÇŽÿahÿÃÐÿŸ±ƒQû†æÿ ÿ1<¨`øÀÈð‡¿ÉkÏEÀðûšÂIEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR*pµý~ pHYs¸Œ¸ŒÌö»/RIDAT™cøÿÿÃÿÿ| ÿ@ñ<¸™áÃ| Ÿÿð1<ÿÇÇp(ÞÄý@̳Cq;Pm3PÏÁŸ| ŠÙ~°30ü‘ÙMÂjSÒk—8>IEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR*–œ6: pHYs¸Œ¸ŒÌö»/FIDAT™cøÿÿ)øó†0<þq€áø†v îÿÃÀÀÅ ÀTÃìPÜÄÍ@|ðŸà  Œ@³Ø‰¶¯_¨Áú,ýIEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR *@9ì_ pHYs¸Œ¸ŒÌö»/4IDAT™cøÿƒáÆ >0üüÁðŒ¢¢ è‚xÐ  Ãñ!9ëH{¯&¬ôIEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ÿw–@ pHYs¸Œ¸ŒÌö»/cIDAT™•̱ …0Fá#lpG³SÈZ>²H$ l"üx½¶¯øÊs0ÿP'j†R©-Ä6õZµ°6‘.‘‹h£¸¼;]q?·3‘¨Êˆmûèm"Þ3ÉGÕ8]Ö8u2IEND®B`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR*¾¦ó pHYs¸Œ¸ŒÌö»/@IDAT™cøÿÿ?ÃG fâF ~ˆ?¨gxx@žáa?ÃC~†õì þ³åÚIÂþ730È70€ì&¢°hàAUƒIEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR *M'œ pHYs¸Œ¸ŒÌö»/-IDAT™cøÿ€ˆ?`8CÁ"pô÷Ãà Œ`ôhtàü€GÇ^­2IEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR *IÒL% pHYs¸Œ¸ŒÌö»/.IDAT™cøßÀD?>0@Ѱ¥(D@[>‚Ñã†ö«Ú.v;°ÿ›IEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR*Ÿw–@ pHYs¸Œ¸ŒÌö»/XIDAT™cøÿÿÃC f„⇄ð?†‡dþ¨axøÈ ÄÇx>ËÿaxÄù¸ˆñC þð¢¤ïÃÿ ö ÿÿïaÙOÚåk5¾øIEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR *M'œ pHYs¸Œ¸ŒÌö»/IDAT™cøÿ€ááF0zH=tà Ç‹7ïGq7@hIEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR%*³¯{ pHYs¸Œ¸ŒÌö»/AIDAT™cø?(!ÿ}¨gÿÁðáㆆ2 @rÇ H=ó‡ ù¿ý5ÈuÌ?,$€–Päf0 _°Ùå†^§IEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR*¾¦ó pHYs¸Œ¸ŒÌö»/8IDAT™cøÿÿ?±øïƒz†‡äøeøÔ³3<øÏÎðð;IøÀÿfù¢íb†ïj¹P‡IEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR*›‚F} pHYs¸Œ¸ŒÌö»/EIDAT™cøÿÿ)øó†>0<þQÀpüCû? f`àáÿ˜˜ŒÀêšÿ0⇠>T~`øÃL´½B¾`Ñì°07IEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR*pµý~ pHYs¸Œ¸ŒÌö»/JIDAT™cøÿÿ±øÏ;†äð14ÌccøPßÄðáÿ$ü ?âC@| Šû€zì>ÈÕ1|`øÇð¡ˆÿÆ öÿ5mm·E#¿IEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR*pµý~ pHYs¸Œ¸ŒÌö»/LIDAT™cøÿÿѸùÃ?>†??ø>þ‘cxþOŽá8·q?ócÁìP RÓ Ôsð‡ÃGr øä~ØÉ1üÿGþÁÜUò]3 IEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR*DÌ0ü(`@3í‰I‹¾$¥IEND®B`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR*¾¦ó pHYs¸Œ¸ŒÌö»/7IDAT™cøÿÿ?±øßÿï þ·30üaghâ@6ñ¨þÛ´3ü`lføÃÜÀðh»ÿlQ—Ð ²IEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR*pµý~ pHYs¸Œ¸ŒÌö»/FIDAT™cøÿÿ)˜Á†áàÿ>†‡`<áÛ1|¨·cøQWÆìþ1ü±b™ ÿ$˜¨—ˆ™¸ 'Ú^wØldítT0IEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR"*þo´ pHYs¸Œ¸ŒÌö»/iIDAT™cø(!ì÷p``°—o``8ø_þƇÿå?Éü@òÃ?þÏ@ò;˜l~€áG ˜¬<|N?’ŒÎ’Ê`RýÃþ ÿØ?ØI~ù£h#„”ÿƒ Éw9u©¥Ž¸\¨IEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR*›‚F} pHYs¸Œ¸ŒÌö»/ZIDAT™Í± €0Dá'–qK[wr€ƒ8”…k(¶6 ü$F\ ÅÇkŽœE­»hSOcžÓÄ…facáDÊök÷³MÄS<‡¸$öàYÄ3ª‹{jkð”_ãÜIEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR*pµý~ pHYs¸Œ¸ŒÌö»/_IDAT™•ͱ €0EÑVŽ 8Jˆ›%Š ]FÐUì,]@P7°´ÿ}Ñ,`qÊË…ªà`Ò‡ì:à|Y\žY‡;2)©`å”QK=Í´$Iõ/X©æ³Qyá­gv§·-IEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR*y^] pHYs¸Œ¸ŒÌö»/SIDAT™•Í1€0DÑßQ"s‚œÀL d)D)Sd8ÖBŠ×üb—gÄñ4#×MœüªIrÊì|‹Ó¥­²;5<.JI¦n ß< fçÅãIEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR*¦' pHYs¸Œ¸ŒÌö»/$IDAT™cøÏðƒá#Ãc<ð8Ãyy†~ OÕG†Ÿ ÿ!õâ$®UØ¢JIEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR*±2·Ò pHYs¸Œ¸ŒÌö»/IDAT™c` À[Að˜IEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR *IÒL% pHYs¸Œ¸ŒÌö»/,IDAT™cøßÀÐßÀp¼á1ÑèaÃdž? ?À â5ÛUßÀðŠ`93¯ IEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR*t@-C pHYs¸Œ¸ŒÌö»/)IDAT™cøÿÿ¥øÃÿ ä0cî`èo``Á`Os‘0WÇu ¶„~OIEND®B`‚leptonica-1.70/prog/fonts/chars-16.pa0000444000175000017500000004756712256617134015503 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR> .¦Š pHYsb&2IDAT™cøÿŸah"âB{…#÷íIEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR>>Wg– pHYs¸Œ¸ŒÌö»/2IDAT™cøÏ‚?04Àa# <‡‡‘àc$øœá=Ã8| Ô2…lÒa$4ù—0Rx.6´IEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR>Ûv· pHYs¸Œ¸ŒÌö»/5IDAT™cøÿÿ·ÿp`hþÁÀÀüˆt3nc†ö? Ç‘ðy0>ÀpþÄŒ!„ír™ëPúxªIEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR!>OŒ pHYs¸Œ¸ŒÌö»/_IDAT•б À AgF`FƒŽ’•"1 bè(Ží*!–"å‹à©F1‰†ìbQ´ìb«˜uOàÞbœ.ìzv°I4»Ô¡¹lCÝκBÎ+ë39n*—þ{Ù[Ñt—3w°IEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR>ç–9 pHYs¸Œ¸ŒÌö»/IDAT•mÐA ƒ@ Ð/# ¡ë‚à9„/æBè¢ÇèU„^dz—“&ÓÖVtóä'$am)µÉ120"õ1`¡ð¤ðX¹7Ãÿ¡½?ÜJeL…“1£bÄ’´ Ñpƒb­$ƒ¡dCvÜ?Ô_ró¦#nq¶=-£†Gsq–æí¬aôÑä˜s³Ð¾ùG;IEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR3>®DY pHYs¸Œ¸ŒÌö»/ÀIDAT•µÑ1ƒ0 P*†Œ9‚{“\…›000r„^¥#W1°uq¥È®ƒDÛ¹^žd)þ¶Rp®©8»¨%ó*¢t1ÆÀ£8'àNì ø&6ävƒØ²#Õ‰µ™ÙÄÝ×îfú§Ú’_8σUí êŒaT§Xw*^$^$'ñ¶w0i7ÕèÍ©T‘›‡é¢º‘Uð*.é0$uÀŠ“Ý—ð)Ìï(ØœT‹•J 9È’7©ìt¹úîÌâòûð d[[÷üÌIEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR/>“Ö? pHYs¸Œ¸ŒÌö»/ºIDAT•­Ð» Â0à?X ’7HV`¼%R¤d¥ ,âˆ\ZÈòq>ƒÄ£åš¯¹Ç¯Õ*øF ¹„WYƒ°DaJïè2 ã« nE§†¼m8a¦'ÜÌXϤ½ML<¤ïÉ.X³¡©àšuå\Te¤®º(Þ-Ìn¨+ÄÞt”vN€Á×}MÀ8·p>o æ:”tWN58ܙס縅ÃÏ[ÿÀºPS¾IEND®B`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR >Ø~¬Ò pHYs¸Œ¸ŒÌö»/3IDAT™cøÿƒ„þp0ü" (ú`Áð¡„ü¡‡?ƒQû†þ ò]‰Oxp3¢bIEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDR> .¦Š pHYs¸Œ¸ŒÌö»/^IDAT™Î± € „áKÀÅÑŒ±`.+Ö0qí^œÇ#P›|%¼ûA‚/hà^`#8£dY`²ââtG·u»›þiÇßq­׊¶Ìi]TÂP“jXòH¥Ú]¨ZÛN˜ÏÞIEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDR> .¦Š pHYs¸Œ¸ŒÌö»/_IDAT™Î± €0 DÑë(Á£d´(bFªÌ±eŠ(6rD‰ôJË÷Ab#„X‰LœD!.¢FÔ€Ð}VœÜâx|ìÿ¼ÇÉoã¿Í=»M4@K¢&ËË–*¼‰Ü^WGëIEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR>0ÖÍ pHYs¸Œ¸ŒÌö»/XIDAT™cøÿÿâ5 ÿÔ0¼ð‡á87?üÃÀÄ ÿ0pþÃðýÇðˆÿñö†î@‘Ã@u!êÏõýcˆYÿ#Ù180¥\¤ œ¾`3IEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR">f(ô pHYs¸Œ¸ŒÌö»/IDAT•cøhBþ“§‰ ÐÎFª† ’uø;hž¡fIEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDR >Ø~¬Ò pHYs¸Œ¸ŒÌö»/:IDAT™cøÿƒaÀІ  ˆƒáI€Ð † ôàÃà 0þÁÐþƒ¡ÿƒÅð pHYs¸Œ¸ŒÌö»/IDAT™cøÿÿÃ@à `ÌÆô´F©©ëÉ®TIEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR>>Wg– pHYs¸Œ¸ŒÌö»/IDAT™cøÏ@}x¡€lœêbó9L7L‰çIEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR>F pHYs¸Œ¸ŒÌö»/VIDAT•uÄ1 À0 À0p„B„Rd40# ¢¸]þ%½áZfzûjè\hߥx;ZÌjÊ^ÚÅDžhÕŒ)tziy–3¦LXþô‡Ö±:±TXIEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR>ÿÐ-: pHYs¸Œ¸ŒÌö»/tIDAT•­Ï!€0DÑI*Àaëz:®…+ ƒp‘rƒÊ Ë.k@’`žù`fƒ„ÙÎ!ÚX”ꄚjDeŠ(L‡²qëde1Nî/zcQ²a“ÞØ”•[ìä„’è>. ã!1a—,t^Ñ_¹=°Š%ZIEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR>ùæ~ pHYs¸Œ¸ŒÌö»/9IDAT™ÍϱDÁ§%QšÒ~I 0ÎÀŒL(ØIú51Ý¢Š"[1ý¢¶ëðfP£¤(¦IEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR>ç–9 pHYs¸Œ¸ŒÌö»/ˆIDAT••Ï1 1Ðoe#ì{‘…½ØB‹½V …¥WHn»)†Œó•…hçÀ¼öÿ3S ¤YÑqVNŠ( °¡D,¨–²•€»5"<>舄y³Íi¤0·’Lnd'“Ó½‹éêHtûU’ÉN&2;}u4:ÂO¹âë~GÿË ¡®¿x–™WIEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR>ç–9 pHYs¸Œ¸ŒÌö»/IDAT••Ï= Â@à'lr„…½È‚[ˆ7ÈrW,Òé ¶[n1d2°’€Í7Íü=¨ª`CòŽÁAP`5{Dä.Lú xkvø¬‡‘<¿¨–PÉ‘He"#é‡ÝЋm6¬yHœÍ­!MeFEÑàJÎdй%ýоqãñÔÝ œˆg¬}èY¿ÖÀ²Ù¯7yIEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR>û%ý pHYs¸Œ¸ŒÌö»/jIDAT••Ï1 €0 МL=™öÁ«tëè ¥S¡$æZŠ‹˜á‘å“|¦‘º*xn¸)¼4ªo; p‚`VØØ”jàF7Èà àHÇ ¾ÿ}€2n"‰ˆïÒ?y‰¹ÑaVïÛVIEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR>ç–9 pHYs¸Œ¸ŒÌö»/sIDAT••ϱ €@DÑ …kÀR„kÌ@°K°ÅÀ6Γ –w1PA“Í~X\¬@ñÍf“D§ ™Ò ¶Je”X}£Q‹Æ»aJzÂ7òž,”T¢?‘ ¥ÆÌ(˜¸F¶‚gxAÄãéßõ<¼ Lñ«IEND®B`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR>ÿÐ-: pHYs¸Œ¸ŒÌö»/‰IDAT••Ï1!…ág,¤Ûv;®Açµ¶báµ {Ž@I1߈k´1±ùBAfþÁ£áQŠ#‘¯~!Í’êIÑ/»rWÒ±¤]ª'å‰Mo²p^¬ b€CXÒ øJF38M8Oún/ âD ò•Ûk[ÚÆªª‘™¹Ð‹‚ý>úO„Òº÷ D]"IEND®B`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR>ç–9 pHYs¸Œ¸ŒÌö»/{IDAT•¥Î1 ƒ@„áWl„½@`/Ø‹ RXz%Á‹(¹ÀÚmñØÉ›k°vН~ òGPåºÇI/è%O£:/IÐÁ(Ž™WÙÉ—¬d"3 $•hj”Ñȃ6²“•|ÈD:£:ÁP'…äÔØFc9y£›üâZÂÛAÊÆPIEND®B`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR>ÿÐ-: pHYs¸Œ¸ŒÌö»/˜IDAT••Ï!Ã0À­bj–o˜å[AM¤‚Â~)•?rùáË×»T•Z)¤d€eﮡªÄ2èˆ6¬Dd—2£(ÄÙµÆ7Ï6­ Ûƒ2B†(]&ˆ‡…Â:z/º8vl/xE´¢Õã%X^ È6 7­ÀÝéµ>Ôà—£“,€Ž­[0e/?z§ŸOÿË ÷Ö±˜†­ÍºIEND®B`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR>ç–9 pHYs¸Œ¸ŒÌö»/IDAT••ÏM ƒ0Äñ)ÜH½@¨ x1!J/¦=IŽå[<ò:ñŠ»n~Û™?ÌLñCÈÜ(J¿*dÌr”€lâ‘L=6ÓŽ”o+îšÜy”“ù@5 3úCÆÓAðrP„Ž78dvà‰ì’w&’êñ­²TxÜJK´vÈX‹"Y8WZ’†Ê-ú_¾“^·èdŒ·hIEND®B`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDR=¸Ã8 pHYs¸Œ¸ŒÌö»/IDAT™cøÏ@>fhdhB nd8LÕÛ5$jAÎIEND®B`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDR =^êÞ| pHYs¸Œ¸ŒÌö»/FIDAT™cøÿƒ ôO‚áà b€" (Hš9þ5‚õ‚L“# úPÁðáà 0£ö ý?ä¡zÞue·Pû|"IEND®B`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR!= ‹=" pHYs¸Œ¸ŒÌö»/oIDAT•­Ð± À ÀG”ŒQ2Z<£0%"ñ?ÊP\ƒí7àõc8/èM :kj¢v»ìê‘ÖLív'ïÑ"-™â¡A)IF Y.Õ':‚6ñ×/öü•µr=ŒöH' {Xûí¿Þrâg>²öîÁ+}IEND®B`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR"=༆! pHYs¸Œ¸ŒÌö»/IDAT•cø‰ Ó¨DhúíË·^”IEND®B`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR"=༆! pHYs¸Œ¸ŒÌö»/nIDAT•­Ð± À @# —ŒÀ(d3Q’‘ø%YŠkŒ_/Ëm¯ÊY3T©Ð’` px¸„[60m`—d¤Õ»Âé˜/—|‘6Zàüúï2g2³+¬ZÇ·Ãî³»íhOM'/óúû)gKIEND®B`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR=nfÏ] pHYs¸Œ¸ŒÌö»/wIDAT™}ν ƒ0àHNMìÍ¢()R2£Ä"Áe ë^žAÄEН¸Ó»†U†'zi±D‡!ÕM„ÕUÙ_7©Å–µ`êÁ·ã|i÷,wyH'gÝÊBÁ°õ9•¾4c§MjŠ\¯ûŽùÿ>êYŽ‘m¸üIEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR0=Ãç×ô pHYs¸Œ¸ŒÌö»/ÐIDAT•¥Ð1n!пrAŽ@‰«ä$ÁÖ[æJD\šÔcÉňŸa½–¢È]h^ÃŒæpø‹,;@4:à q}1rb6.ö)‚ŽÔ€áÉáуM{h26Èd…Ì•Íþ±á‹ùÅ5^¾'Ãݼ`ë^îèDƒ—ø›e'IÐ&½E)óIEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR+=©­ë pHYs¸Œ¸ŒÌö»/‹IDAT•­Ð± C! ÐC”Œ›°Êß²£0%± Š’(]¾›WXÖY’ixÑ‘À0@5OBÍÔÞŽˆe‰fÄtDëÂðJ›¤´CVøZê*¿xlÌàƒ¯ óÄ!)í”î7NV™FYàÃÂZÜD±Ô/H˜±;[€“+ò[­7ðÏä#)ü/ ¡IEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR1=,%¼Ê pHYs¸Œ¸ŒÌö»/sIDAT•­Ð¡À Ðp$#0JGƒnÆ(ŒP‰àBS>p­kÌÉÿÔÇ$Ú}Fõb¥ž­Ø\o$²“m„%ÀËÃê`›²…ÝlÒ4}˜égÓªÞ97õ?»Ê[®¦y5ÿóì%¡'6è­¸Ñ#Q‹¡ëÿgoÕä.¼¶½‹qIEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR%=`X pHYs¸Œ¸ŒÌö»/PIDAT•cø?Ià€’Àä?öÿ$@ä9/ùù/ùH200¢‘ìÿÂeqëÅoïÿHä$òÙ&a¾n@"1C‰,ïMà.2áòØIEND®B`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR#=~í pHYs¸Œ¸ŒÌö»/GIDAT•cøIP`ø&ÿ±ÿÿ&ÿAMÀCþÄK~’ Œh$ûÿ‡pYÜzñÛK,É "ÿ0CÂNb†Y$VÆá…Uq‘PIEND®B`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR/=B ‘ pHYs¸Œ¸ŒÌö»/IDAT•­Ð±à ÐïP¸3„MÂf/’Y4 #PRè¬H²Ïg÷¦y Üçˆ 'ѨÀÂHB ʪ• ÞØfåŽÎHNÏN;(O =¨ÞXoL %/K°ÔTýŸÐAvZº¢1ï‡'GPœš| Òl%ùÀ’ƒ-HÈ—Yàg‚UÁµüIEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR5=%ΰ pHYs¸Œ¸ŒÌö»/@IDAT•cø?Ðiþÿ púóÿÿÿ0ücJ3ä4lô@»  ¿ÿÀðƒ…#zøâŠ*ÑÿL6Ô’²Z_IEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR=…Qt^ pHYs¸Œ¸ŒÌö»/#IDAT™cøÿÿ ÃÀæ ÿØ1ºäF@öjÁ~3ðIEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR=¤¤c pHYs¸Œ¸ŒÌö»/4IDAT™cøÿÿ ``ãÿ @~ãÂÍh¸Šùÿ0ÔËÿa³ÿÃÀPÄ@?2þÿß© F¤;IEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR/=B ‘ pHYs¸Œ¸ŒÌö»/›IDAT•¥Ð± à ÐCD¦ „MâÍbG^Œl”èÿÈwJ)]hž„-þ¿ƒŸÇð ½.ftß –Ü‘ˆe2 +i©Nž"Ëd2VÒ7Òœ¼Ä!Y ¹d]"èô'ôÊ®7«&4Íëš>¢¦ím­»kùª(MÁºbލ˜A¡ñ`¸ÃÎ^n¬§^YVÀÏZÿã Tb Ó_5÷IEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR&=éW&[ pHYs¸Œ¸ŒÌö»/8IDAT•cøI~8ù‡$ò}è“Àää(ùH¶0€|ÏÂðL>“˜¡D #óàÕXsIEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR==6\D pHYs¸Œ¸ŒÌö»/¸IDAT(‘­Ñ=‚@†áA±Û#ìQÖ£xK ãÒQr% ×pˆÍ>gvù ÆÎiæ)'ïâ8úe²é12\*HyOÉN@[ôgF`€NpaÔhWF €Rpc¨¾C î RŒFðXÀ[ÝÀ! _ÑGTv˜ÑF¼L7£Žèu3£ˆpªœ¡"|¦''Œ³gÀ LÈw0x8'B‡ŠhÇ}ÿxÜ¿ñÞdܤH!kIEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR5=%ΰ pHYs¸Œ¸ŒÌö»/’IDAT•­Ñ±  …á#”Ä pí,ŒÌä0nÂØ]A@ä‰h+Å}ÉU—êó1}KvN"YufªjødjKZÑãƒ'ñbE¯Þô$Æe€ÉÃì`±—V ÇeÓNb »ÉÃì`±ÍnÕ°)ØIŒwñ “˜°¨]ë°ŽM½‹ŽnÎìßø“/?íQbçãIIEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR1=,%¼Ê pHYs¸Œ¸ŒÌö»/£IDAT•­Ñ± Ä …á‡R¤d„ŒÂh8ºÅ…(] |ÏpÊ%õÍ× ÿÀæ|-a:€ÃmÀîÖ¤Á3dºñfŒÝ¬‚ÍZèa¦» %³îf³± ª¨¡å.2Ç Î‡¸ nùݹh‘K¹{Ò¼,wùþ’–Õå^•{îÛâRigee—Î>ÕÙ-ÛË-q¬žŸ¾ äÙÛóþêuË9cw‰èIEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR%=`X pHYs¸Œ¸ŒÌö»/`IDAT•½Ð!€0ÀM‡Ãö)8¾UY~ÆSúä‰K¶M  † 81b“]qðó½ *G„‰çE|TGjMÐòƾnµ-Gš•®4 Ý–šøoÔªÀtùüÒ'ÎWäNm’“IEND®B`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR1=,%¼Ê pHYs¸Œ¸ŒÌö»/ÈIDAT•¥ÑÁ ƒ0ÀµxðL ”Bi¾(!¥€´àüôÝfÏF ä$4B›Ýûeøº¥®KX9,kK¡‘ÈrÒÊÕà3YÃ~#ëÍв͆º’{˜IŸ %L†M2äI¬o¸_ÄÇnÿª~´³w™¯öÿ}Håaä•«(§+o=lÊ¿«‡¦>šzÙÕOUO®ƒKô†Ìg¸->ú<úmЛèݦѿ¯Ãv´ë–£¥¡µr´"\¿ô¿)ÒЂ}ËIEND®B`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR'=•Me pHYs¸Œ¸ŒÌö»/5IDAT•cøÿItÀÄÀÿŸñÿ#†ù@òœdÆCþ’ÿ†(É"!è;œÄ%²HkïÓõ=ÄrIEND®B`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR2=ÇÉ pHYs¸Œ¸ŒÌö»/^IDAT•åѱ À @G”ŒÀ(Œö#QR œ7(R¥L—/|…;?8ÏðÈ3/[ G2ôèu6Œ:ö›aI·ËÍ-Ë&}ɪ=B“–¼’@ˆ²¯…Iàíyp/;àªIEND®B`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR.=ú€f¯ pHYs¸Œ¸ŒÌö»/•IDAT•б Ã0ÐoT¨Ô-Ðb9UJ¯dHá5¼€Ü©øè¢/YØU¹æuw Ó/DDÕñFÁfîÍɃø@I{å“;`«¼3#°T^™˜ß0™ÕÁ’\r‚=`!Zö‚‰›(X’•½  P[a¨<—+cež®¬¶Cp¢ïÐy÷O¾ƒl0“RFsIEND®B`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDRA=Úl9R pHYs¸Œ¸ŒÌö»/ÊIDAT(‘µÑ± Â0PG.\z âaX&°SQ²R$ЬáˆLçÂòçì‹€RrÕ+îKwúëx±•i¢*ˆ:(¬ « ¼ˆEº)³ÒFŠâ$¤(ô)ZJÅ6=Þ«VQ¸ÈŽå»fT%1OHõf‰ËäV]ƒ‹ßÒÁ>ª˜È iaÙhî«Ëç®)»¬o/ÍM‰žë*¬p"]›Î(² «Ž$ÝtS%0²Ô§&Û¤»ÒFE÷«Ø”- {Úéü/z0˜ÎïË'OIEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR*=ókÆÕ pHYs¸Œ¸ŒÌö»/³IDAT•­Ð1!ÐA ìhí¸È&ÜLH,öX’lá5ÖPRÆ?ƒµ–‚WÍðùÄr ½¸*ÕËMÙ½¹j–ÙÀÃ#`€¸ ™{%µ¤TY¶G¥†ûdš¿MV¡;/ ”CÔ,ô$)y,鋸IÖq>Îe§Éâô…Åê{g¥²™pÇn°qNJVäžw|lxä õÈ ´ˆÜh)q·…öÄà&4GDfòSë?xÏ)>uø*rIEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR+=©­ë pHYs¸Œ¸ŒÌö»/‰IDAT•Åб Ã0 À7T¸ÔÊ&Z%›È]ʬäÀEÖ ‘”N… æE;@Ü0›kˆ‚Ð>‚’ DÕ ¨æ àÉB„+£QÉCМêBÕSˆ'Ó—ÈœZ$’ªK"9–^›Ã»SÂÚ©þeŒÏNÛqw;Ðcؘ¢1t [{~8¼õ/|Å/UDÈGÇIEND®B`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR*=ókÆÕ pHYs¸Œ¸ŒÌö»/ŽIDAT•¥Ð± Ã0 DÑ3\¸ÔÅÚLM£x¥“C ïØÄAº°y•¾Â8 O:|ò£˜¡á2›Ë'÷Úð2›è)ØÅ¹«ÙQ‹@|´ˆÜ«[DÎ]´CÔĺ!!IôÀ#Ä#¢ˆp €‘™ÁÙÄq¹3!þºgÔ8ü<ë¼Ó[®È¾¤IEND®B`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDR=µÝe pHYs¸Œ¸ŒÌö»/IDAT™ch`€‚††Æ?ƒ5ƒ¦8Б`C+RÛÌâ*IEND®B`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR>F pHYs¸Œ¸ŒÌö»/TIDAT•mÄ1 À0 À0p„B„Rd40# ¬8Ó¿d©7\ËLo”Ym1g{¢¥ÓQ Óš±ÅœíYŠNG)LkÆóÚþP¼è<(ó¿.É6ׄ/ô)IEND®B`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDRC„õ Î pHYs¸Œ¸ŒÌö»/&IDAT™c`€? ÿ€ˆ…á?&b ;ÂpÃ?°ó~À\ûÿ#ÓCÑžùÜÙIEND®B`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR!C:£Q“ pHYs¸Œ¸ŒÌö»/oIDAT•Ýα Ä ÑÍ)R(•¨ Ñö7‘¥«à&xñ@OÄÇÌyôæ8:³óÊfmf®¯—éºéG"ö1ÌH¬°Ì¸1ã6ÓöÄH2%Gt©UÊD“‘¥J©N„~<ÿ76Ún¡³°&IEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR!C:£Q“ pHYs¸Œ¸ŒÌö»/IDAT•cø £$%$& À4•zˆ£ÁIEND®B`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR CoÂ²Í pHYs¸Œ¸ŒÌö»/5IDAT™cøÿƒ„0üç`ø/ÁðO‚áà ª`øF~€Ð0j#Æ ü]ƒ6#yæ¾ ÒIEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDRCHl3% pHYs¸Œ¸ŒÌö»/gIDAT•µÏ1 €0 Ð_:8öõ˜Ý¬7ëQ"®ÿÔ˜ ˆ¸»²>Ä/í&øŒ¹  jðÝ(€$ƒù§§OÐÉÛÁ¬ã ¢IEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR#C>V® pHYs¸Œ¸ŒÌö»/tIDAT•µÐ1@@…á' ¥èbÝÄUœ„½+I\dÜ@¹B2Þ®Q)˜âkçσòj¼ÄM÷±R{‘Ð1-ѼÍÔ6p‰\ªrjtÆ¥{cõtnn† NÁQü¯žÆj(¶ŽZ°y"º2‹+[ýëMõü‹ÈŒIEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDRCA‡“_ pHYs¸Œ¸ŒÌö»/^IDAT•µÏ1€ DÑo,(9’GãÅð&xJ Â:¥µ"Ù¼d‹ÍÌbf1”Y$@ TáZ2äµ@2q6«/{;{˜ÿ™:[#tâú‘‘½)×)H£ VÑyúŽEÇÛS uIEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR%C3Hñé pHYs¸Œ¸ŒÌö»/nIDAT•µÐ1€ ÐO9‚GñhB¼Þo€kLH\´Ãš¦¿)«€ìªsg Z­˜!FÈ~—h*-óA³N&uí\/4Aõ·ÌŠš5=…ýl7Z`=¯‚ó@Ã(ÆéúÒÿžÃCÎ{ÝXßIEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDRC§®X pHYs¸Œ¸ŒÌö»/kIDAT•µÏ± €0…á_,,uƒ¬ ²R60âޤ›d„+SHÎ! ØæŠ¯xðàª*ôAL!ŒBžƒ\ôÈ*ž¨b¹4-/ûË ã\¤”Lÿ*[%4εbô NÙ–6–žÌPWÍ}ž~l_Öଲí^IEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDRC[»sÑ pHYs¸Œ¸ŒÌö»/GIDAT•cøÿÿÃÿ @Šáÿ ~ÄÇ0üïŠóÿ`ø'Á øüA‚á3±êÉÅ€˜‚Á~  ”gV¼Ž9IEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR"CÑ”ê pHYs¸Œ¸ŒÌö»/œIDAT•½Ð1Â0 Ð_1tìz”ôf êA¸Š{sª˜o#@Bb%Ã"ÇþœGð'mÛDÇÚè•Àªbƒº=]‡÷·×ßAKŤ*;k¹S[vzbɉ5¼E†Q³†=µTó^%½ð˜XÃ||›že0¡¹·Ù\6ìîúrþR>‚KÊÊ=öò92˜Uc—¾*óðg<õäÐà?IEND®B`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR&CØJê pHYs¸Œ¸ŒÌö»/SIDAT•cøþóƒÈ`’‰üCeò€=ˆd`’| Ì@’‡HrÔ1IÆÿ ’ùdÿ ¤ B> /ùHÚ000Ô?`€’ÐP¢ ÿÅBÄæIEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDRCRPÓ« pHYs¸Œ¸ŒÌö»/7IDAT•cøÿ¿†ÿÙ70ü‘o`øÁ„ü?ö58q?PP}ƒôþ¡!™ÝF áÈ!BúIEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRC„õ Î pHYs¸Œ¸ŒÌö»/>IDAT™cøÿ‡Šzþ³0üc€" $òzÀðŸáÓ±@Ñ? â#†?6 ô£†AáCó­±Q.6¶IEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR$CÜŠš× pHYs¸Œ¸ŒÌö»/€IDAT•µÐÁ € Ðx02+¸+¹Ü\ËÄEpƒM$*ÿãÁ”à )¥m*W9*—ƒJãËüµË#DN ³‡û5Àù+aï`7Â6@á]<#õÕ2³á/C#]X3Õúµ—c_v?Îfô™m/sJ9!Q¤,éPyvõ¯7–íþj|EáyIEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDRCRPÓ« pHYs¸Œ¸ŒÌö»/"IDAT•cøÿ¿á?à n€â?Cÿbûr º[uPOd¹IEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR9CÚ pHYs¸Œ¸ŒÌö»/kIDAT(‘Õѱ €0 ÀG)\†’ ’•)Þ„U2JFH™"Â8„–¾ºâ-Yzèˆà»8Rld¨ .“+(#PB”yw”Ø:îçR„ÒáUbõý\E$mÿ€=Ø@ =eà+ë¼âyûœASÕAIEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR&CØJê pHYs¸Œ¸ŒÌö»/NIDAT•cøèDö°ÿÃð‡Ÿý3äa`üÃðƒ£Ž(ÎøD2ÿo’ìÿÔUBÉô%I†ú P’Ž¡Eˆé¡e‚IEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR CÕa:­ pHYs¸Œ¸ŒÌö»/fIDAT•µÏ± À DÑC”ŒÀ(ŒˆÅ`“Œ@I|±J—¯³¾ êàÃ)„ø±â˜iz .‡‡bÑÉA%ËG†=´Ì¡£ 2YÑ6‰ÚˆÔZíú¥¸™ º6çé &áBðÑ'IEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR$CÜŠš× pHYs¸Œ¸ŒÌö»/{IDAT•½Î± ƒPP#Š_ò¥4(6ÈJL1külàò çŽ(¢ˆ”.\ñª³lÈ8ɲÜ+H®hÝ Øß1Á.šGXRu;1,2n¿Í_Ž{öítÈX¢Êhy0zW·Uçâ;ßl¹ ‡¤ýÿOÖz¡ør4ûpÎçÔ§IEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR#C>V® pHYs¸Œ¸ŒÌö»/gIDAT•½Î1€ …áG=‚ñ$ /†7)7`Ĥ¡¶L&,.Úᛚ¼¢GøIv—JØÔ §†ê =²Ú’¨UL–á9<&ý Ýäþ4u5uZ›Š5 ¨ŒÅÚ½ÕÚ¿Èw2Ì Ü/Óù‚£QûœIEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDRC®Eøa pHYs¸Œ¸ŒÌö»/¨‰³Ì®WO¯Ùã$öþñœ b/j’)ŽÉ¸lãÕ¡GU´¨šÙ6«…¿vyWôkÙãQlÖþþÿÙ7Yª—å,ÚPùIEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR CÕa:­ pHYs¸Œ¸ŒÌö»/yIDAT•µÏ± ! ÀE„”@)”p%Ñ·Evm ]þŒÙ¿þÎÁ–í•a,¼‚4@µ€^,CŠì|*N"švƒFápø’ñ~“y‘•BÄÙ¼·“÷œ'’{O'y´L­‹M˜æ÷°ì$;@4Å;ÿ:? â£7Þ«§IEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR#C>V® pHYs¸Œ¸ŒÌö»/”IDAT•½Ï± Â0ÐC.=ÂŒÀY…˜ÀF ÀJ–(\²Â¡,ˆÆ‘"_|_@"à¯úÒ×'mú<Ö‰v•ˆ’×x"a¡õ {¡Âz‡YhöooMgV§üQ÷Ú™Õ¼Â˾¦ÙvS1e‚çÕáfq«mìÇÊ»­xZàGø‚=Ìæfo&†æ=/åð:aIEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDRC£[ˆ& pHYs¸Œ¸ŒÌö»/pIDAT•µÏ± Ã@Pܼ€Á‹n±€¯È`7ʇÜþòŠÃŠ~ÂàæuBH6Ü‚'¾àÀ Þ¬Ž¯8i»(Ï 9Ä5Š6wê"|–D9:9Šq¢Íô?u¡Á7a‰” œ€˜ñã¶Ó_ïmâ-Ì9¿¡IEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDRC„õ Î pHYs¸Œ¸ŒÌö»/IIDAT™cøÿ‡á?Æ?6 ?€¨†á%èÃ? ÿ0þÃÀÿ‡¡ýÃA°Pœc®úvÐÿxþ?`9@d¨z<–IEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDRC“×™ pHYs¸Œ¸ŒÌö»/IDAT™cøÀ@kð0­Ñ;-°9IEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDRCk7bð pHYs¸Œ¸ŒÌö»/DIDAT™cøÿáð?†ÿ>ÔÐ ²#ý"9†r ÿÙþ`øßÆð$ò,E‰ÉçÝyðƒü?†ÿè\ôZ6Mf[KIEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR!C:£Q“ pHYs¸Œ¸ŒÌö»/KIDAT•Íα €0 Ñ“R¤ô…Ñøcb2…%V Ê¯>òM¬lX†è%8{ÍÅÓë-Ž KUÑÒíslâ\àü—ªÞŒYfIEND®B`‚leptonica-1.70/prog/fonts/chars-20.pa0000444000175000017500000005355012256617134015463 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRNù{v pHYsb&2IDAT•cøÿÿÃ(&røÕåõ#®-IEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR NÚ·i pHYs¸Œ¸ŒÌö»/8IDAT™cøßÀA?>00`À€¨'j£ƒxÑa0zŒžÃ€†à Gw Ø4¬Zð" óTý“\(IEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDRNãа2 pHYs¸Œ¸ŒÌö»/4IDAT•cøÿÿþßÆÐøŸ‰á3þcóÑqó6°Zt|üÿ9†çHfî0Å£êÓ J(´IEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR)N•ê¹ pHYs¸Œ¸ŒÌö»/iIDAT(‘µÑ± À @R¥dFa4"¥È\lB6 ¤@&ÿNK€&ÿŹpaɦ1‡é#Vì‹#®’º„'¾²@(äA2šÜä¹%’æÜ¨IìÀlcÚ‰~q¡`G'XE,"Sœ2|Õo<·>–ë®×bIEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR$N`‰ pHYs¸Œ¸ŒÌö»/¥IDAT•ÐÁ Ã0 Ð_|èÑ9öPª²AVÊvè ]%ÝÄ#è˜B±+)q 5úðÀ쯒©06K«SHŒpŒŒ oO‘Á%13RQŸ…^ÕɼïtÕrìi'ÌLoBe®ÂË¿ÐT ÍŒš½$_½¡Ó]¢)‘w.Ç>¾v¿r¿Iòæ_m‹É’K* ׳fÖöä¤C¸ƒžs£œ¿üÞ¬úê¶*IEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR@N¸- pHYs¸Œ¸ŒÌö»/áIDAT(‘½Ò½„0`¯8¤—â¶6ó"°-AD–h² ,¿›nµXÑ'‚7oFv¸>w vÆ)pÉÐÜùë(zÑW`cTTšñf¬8’bD (vÎtþ- Œ8/$Eád)©#~‘7X (*i!UgÅ -à:¯£À+K ÝýiqáƒþPœ — õ;Ö> ‚`ƒ‡7Á»Ì7Ä>aQ4CO#ZAq VJòŽk„B¦óQ‚c”.࣬m2TJ >Ê¡{1ºçMõ(øÆßÏæŸñtÉ¿T£,/IEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR;N¶±Sl pHYs¸Œ¸ŒÌö»/øIDAT(‘½ÒAN!ÐO0Á•l]˜¡b‚G™#¸taŒñ(xŽÀ’E‡² ÊŒ™Itg'¼¤¡øU4h=¿¢EqŠlÌÂ~ÀBOŠ–òB¥rrÆçÞ¯à.qòŠW V_¢â9)6 _¢¹oøŸÈ¯ñ”#¤?LÀމqc×§ýÎÐpõˆÎÇÛ[äF5å4Q(GE YJ ÞÎàža¨[ÅnÆÂÀŠÓá12dâ÷Šr›ê|‘¨‡è ‘vÈšR§xÆŒj©sÕðTꀆ¸È†Ø>;_+WoÎVæ,'y¹ežØü-ÿ†/½ÏÖL'§aIEND®B`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDRNשq. pHYs¸Œ¸ŒÌö»/@IDAT™cøÿ„>0üo`øÃFL`ÄÆðˆøÀHŽáÙ1|¨cxDÿ‚Qó?ö üÿì!† jœ`‹ï?IEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRNç 1 pHYs¸Œ¸ŒÌö»/}IDAT•б ƒ0УJ6È là•² ÈHÉ&á—.,ÿb[ ˆ*Å«,ùî>HùrËf—&О`ô·O³¹›¡ÈÝåaH…*Ê\½;ÏX~¬Íð§õâOQVÏí=b8ú¥ptÖ†ÒhÛ×vÚ¬ýæ’ß"Oõ>º—Ý­®;(¾ÁIEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRNç 1 pHYs¸Œ¸ŒÌö»/yIDAT•б €0 @K)“ ²°Dˆ‚±@Ê"a—)Áƶ¢£¸Öþh a%‘x²Lv‚,!ÔáˆÄ#œÌ!4Ö‘éa3#´bz,¼U?…ï=Ô?öÓ2pËfYgÍï¤÷º;Fé[“ô/ºEÖm¼lubü¬/ÐÎ<•IEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDRNùìP¼ pHYs¸Œ¸ŒÌö»/iIDAT•cøÿÿÿtâ=ˆàìPÖó?òÿ?€² `¢¢þCƒx Ôö‡áÃÆ q€F0‰Œ@ °‹ÿPmŒ šAÄq¡ïAÄÿü0by=¦Ó†%h$I ¢ßIEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR*N~ݹº pHYs¸Œ¸ŒÌö»/IDAT(‘cøŒz0ð` Ý9€qü'è†K±`IEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRNîÎÀu pHYs¸Œ¸ŒÌö»/EIDAT•cøÿ¿aØà ÿ170üaF(f†à?ìPÌßÀðC‚?Øq}Úsˆq3³ñ|L»Øe°ˆáæIEND®B`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDRNý€ pHYs¸Œ¸ŒÌö»/#IDAT•cøÿÿÃP$0ŒhB0Á¤AÄÀ»åLz,¢œIEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR N1€ºj pHYs¸Œ¸ŒÌö»/"IDAT™cø€aТ8040€”Ñà'Ý4j| `~IEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR$N`‰ pHYs¸Œ¸ŒÌö»/iIDAT•Í¡À Fa’nÀ Ý€•º"“e“Œ€Dp¤\.˜šO¾Tu†°ì··=PäC2F8ÙÛ lŠB>$c„3yG†½ÀV¡¨—dŒpåk²]“íš8E!É?õ¯/ŽTb ˆÖšIEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒÌö»/‹IDAT•µÐ1à …áe k6®‘k±AÔ‹Ñ›pF(®¡n£H[ßhÙ?X†pãn…3Œ¸·Y4<ˉÐçòjÙPc·D®+ ŸfY¹\LÃý+N0ýÕEMwêm«šãÇMí߉žkP«ãB ·–ŸRÆðC*ÍÜ»!ØÑО£­½oþ_º»#F«Ü*IEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDRNÅ›ø pHYs¸Œ¸ŒÌö»/FIDAT•cøÿÿÿdâ<ˆà@ÄqHüc?@Ä ÁP$˜ ~±Dü~Äö? €A`“‚ñC¤‰µ[IEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR&NdáY4 pHYs¸Œ¸ŒÌö»/¤IDAT•­Ð1 Ã0 Ð2dô¹HÀ×êˆK.–С×péÐÕ£aÕúš†vë4HZ#øbnÌ/(€Ð 2ÐPçä"&ÄYL-qS}FÜU×þÇjìqÝ©ǣ봓·z¦íÛÒ™âè`fo¦ÙŒük£ºÐÎ,Δ_{3Ífd]hgÖus0Å›ùTë`'@¤+ 8ægÛÿô ?q-þw/dPIEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR&NdáY4 pHYs¸Œ¸ŒÌö»/»IDAT•­Ð= ÂPà‘i^ ‹r±@À#x•ˆ…ÇpÁ"í›KÖÙÕàOaeŠ4ov?Ňºr í±¡@®˜•BÃ)Kü›*E‹Ô˜kÖ׸.5náÅLÇG¤ývˆë‡7·aîÎÞÁÔû˜t4E«äM(¼í &Ö—‘VDr˜Öîô/õ·kœÃŠØóU-Ÿž˜\‡-޼¥8Ds‰æÒÌl.™p!/IÍ×Ë}ÛÔ}oþOïµ.5E7ölIEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR'N‹#2 pHYs¸Œ¸ŒÌö»/}IDAT•­ÐÁ Â0 P£Àt“²Yaºܺdr ’åÿlE=Uý‡w°,Kþ”K„p†U wfr~áÇù„ ¼Á“)ƒÉ£šÄŒð |9'x„½*g“/jªf5:|™î¤¹R›:ÉØÜ*×®H?Â5ïZÛ{ûx<)OŽ|YIEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒÌö»/”IDAT•­Ð± Â0Ћ(â.m:¯‘F¢LälÀJ‘R°†³AÊ_g[4!$pñ*ýûêö&ýwËÿjøÝ)È :yÆAžÐÔ<#¬Ú˜§¶[à$ÉÙáNF—óoU œòjú¬ÛÙÃk¶:àútqÓFË®†…\ +©t1$åíì Š²MiµË Ç÷ÿɽÍ&+0Ð4AIEND®B`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒÌö»/¬IDAT•­Ð± à й°;·éXÃE$2JƠ㼣ܔÈä>¶d%Š»Pš½‚ŸjÁ¬ÿÙÑéÊ™m u¦ÅÑì©Fšúžµ;Ðmw¤µ[æÓìNu×Óä“£ÍnóË&ÏŠ26¹sK¦o:ÑlÆÃ }X¯•/'H¤ÉöìÞ-µ„y9´äx‹öëÖ~/{C°äMÀölÏ*¸èü¾ÏX"Š×#¿IEND®B`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒÌö»/ŒIDAT•µÐ± 1 P#ŠÐ¥¥Ë×e-º€(n­;±Hnƒ”.¢˜|»H$¿xe“ô0}ú+—É+9‘ºïC …î “aVugŠ"/uÕ]¦‡Í °š²Z’ªfõPwõ9é`3=¬aÈ3Á¬n2|Lž`;«ƒl¢6å)«›áÝLßÿüßZA5Žª•ÜIEND®B`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR%NÖâ7 pHYs¸Œ¸ŒÌö»/ÈIDAT•­Ð!nÄ0Ð8 Rè2_#¨¹VXôZ®z÷XùýãÕ‚J»¬XÍÿê9žxa—†YŒrhƒãJ<-³lð̺ÀWÚ“7ØNX_¹Ò—PS5Ó6Ô™Õa‰?rä·CÛ>ÃwmoxËÚ‹žçn~X‘º‘í@̤ÚlPªÜp‹T˜"Ï1¡’eÂ5pFQ|tG²½rúãÀhq>T‹ÂhQvÖ-zµÈ<•?])òÛÜ“¯=yÜVç{zóÿñþÂ@| 7\IEND®B`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR$N`‰ pHYs¸Œ¸ŒÌö»/¬IDAT•­Ð»à „áeŠÔ‚: %utF)”p!Ìù?Æqf‚/eï‡Ú¼y:ÚÌŒÍtÝ N?AßÔ™Q‹@¢VAKZ4Õv š;•åi =À}ˆŸâ¡<Ìén3#­›Öiš!@\ßMàèpöïÀb{ž¶HçN³¾:oÏÓ2]è¸éé¹ÒÎ*‘6öÑ:»:–Yo¥²ÑÊÑÃñY§‰^¾›ÿÓ+ÊÛ'§B­d¥IEND®B`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDR L— b pHYs¸Œ¸ŒÌö»/$IDAT™cøßÀ@9:ÜÀÐÐÀÀDÈ,x˜31Íd ÃL^V)?TlIEND®B`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRLLÄ @ pHYs¸Œ¸ŒÌö»/SIDAT™cøÿŸ ¨á3Ã?F†? äRdšùáØ0úà Fì ôƒŸá‡<}°¡õ þ3£æÿ íÿøÿ3Èÿg¨‡´~æa‘IEND®B`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR)LØ"£² pHYs¸Œ¸ŒÌö»/‹IDAT(‘ÅÑÁ Ä ÀE<ò¤„”’ÒâÒ(…xò@ï::]w|FðÚ›ËðGÄZ`bBtèfÍ'™¸IOªR²p’›´¤;ÈÂET»åˆ(Áõ tòþÞ½g5nzñl•ö8R•ÀVÈô'lÉŠð(âÁÄÛÐ VDKbĘû¥=˜ÁÆÏ~åì‚kg[BLKIEND®B`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR*L3± pHYs¸Œ¸ŒÌö»/IDAT(‘cø†EÒöÑ‹—£zFPÿ 8IEND®B`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR*L3± pHYs¸Œ¸ŒÌö»/‹IDAT(‘Åѱ !P# JF¸QÈfÇhŒr#PRœ¸|Û‘²ABó ô¿ÀÃ3ð'š)&œæ£ˆ™ÄÍËG#‹ ±cW÷*®,ÄÆ¡Ø^ĕėºø„“iºØ¾[ð\ö–êD7MIôX”Í’šõB6Ÿ4° ¤¨G¢¬rÛ7~ ›jÎßþÊlµ{T«›IEND®B`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDRL¹:ð pHYs¸Œ¸ŒÌö»/’IDAT••Ï1ƒ0 Ð_uH6V6®ÁƵØHÕ‘+õ"éÔ5£„ë„T*T©Ë›l¨ªàƒÐ 8AÆEAzÒb^QcÔà1i$ɣьÎö¡çx#j#µ;±7Ã-M׫±8RÒÙÒ4‘ÿÝÈ8R0‘‘<ÈëXð‹g)]` Ý‘a™žú—7eëñ°z1þIEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR:L»™Y pHYs¸Œ¸ŒÌö»/ IDAT(‘µÒ=NÄ0à¥pé#ø"HÞƒ!’h .Áa&¢€c ¢¡4¢1’•á³”¤úb)™™7†íàWÌqGv:GC.ƒ£ŽLP9# pHYs¸Œ¸ŒÌö»/µIDAT(‘½Ò1à P#¶rJ…‹U¢R+åZT¹¹AFµ]—$¤s==‰ÅüohŸ)°G _xA>à Ö+HfDìЂg‡\:@`ÕuÜ£ø ž‘CÑ’c¬pW²ƒaÌ-˜ZÑ#ªbسà !œàSެˆäM8NÄÂ#^ƒ˜©„˜¨:‚!(AETK€ ?Á wWÜŽ~Á#øy$ljòÂÄ$)IEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR.L:þ¸Ë pHYs¸Œ¸ŒÌö»/’IDAT(‘µÑ1 Ã0 P™²zB/’£ÚÞÌGÑ2zv¢ÿU°¡C;TË3¬oIš—Ɉ׃,d2)®IMm—Í©¤É ž$ßzô ÖžðéŒ~íE&PPî Ÿ9ë³¹’„;e\‹€É.ìÌ`”Ÿ™{Þ†¹Ä°8AcNM~ÀÈ_QîAù¿«ú!q8LÕ¶´«IEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR6L‡y× pHYs¸Œ¸ŒÌö»/¨IDAT(‘µÑA à Ð/)dÈ 9Š+ÔE—9TŽâ\f!Nÿ8µÄ@é*nè8#~H]5NîÐmà)ð¢îN$Ñ4²”Æ…Wiðt…ÔŽ+Š3ss0÷ÑLÍÙ¬m8»¹5½~ù4q•ÿæŸß;÷Ʊ7 ¹ÃÌ_}µ`±\0›A/FȦ…/þ? òÄ<ÀšIó9äõ°üíʃš«ð뻼¯ô §T¤Wàn1õIEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR=Lög‚ pHYs¸Œ¸ŒÌö»/šIDAT(‘ÅÒ=„ àg(´³µóv^k»åh…#PRF`~¶pµÚd§úBHȼˆ'á ¬×ÑfWŒÌŠ2y¼+ƒü,£ :A‚‚ƒ ~S,‚ãŠIAü9¦[|^_î¡ ÛÝ4…FW,CKÕr¶ä­‹] 5¥V\nʆÖä\µåúµÐ¾þàEmÌ2ïNTÖIEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR.L:þ¸Ë pHYs¸Œ¸ŒÌö»/WIDAT(‘cøP)0àA£þ@¨@Exþ©2`ê?ÉÔ©ÇDSÍ Š'õÿÿaRÍ$Á¹ Ôu„0Õ‚BBÈ T …5ªh@n:NûÈV¢çIEND®B`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒÌö»/JIDAT(‘cøP)d £þ@¨@E ÿÔ¬TA dIÔc¢©fÅÀÀŒ“úÿÿ0©f’ì\ ¨ õÐÀ¤°F („V·’wøžIEND®B`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR;Lûyòg pHYs¸Œ¸ŒÌö»/²IDAT(‘½Ò±à ÀÓ( ¤Ü ¥‰Òp'¸9#`ïßFƱ­hƒ8Þ_ÁNÑl‚B8A"@tÄ£,D]9&Ø= r îDÚˆ¡{}< Ú:à u@·ù@ ìD>g¤ol3ð;Ä Zì7!·x„¯¼CEÇ8ŽÀÏ(nƾê2CÓD×R‚!yC^ Ò¦üY“i§\€Ñ²½Û$§ômT?¿–áEÑÙioÍhIEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDRBLñ%\5 pHYs¸Œ¸ŒÌö»/JIDAT(‘cø°±€àÿÿÀ`ýa°ÿÿÿƒü† õ@õ ö@½`Ý õCŸD°Þ¥À²GŽsÌ´á€ÄŸÂˆÕåóæÿúðÐIEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDRL_J´ pHYs¸Œ¸ŒÌö»/$IDAT•cøÿÿ? #ƒ? ö ÿêþò2@ö3‰mˆ›ž Õ9]IEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDRL´$ñ· pHYs¸Œ¸ŒÌö»/CIDAT•cøÿÿÿq€Äÿv Ä~ ñ@~dö¸ˆz8ñF‡Dýq !Ï$øA„<ˆ¨ÀÀ(Bצ­9+IEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR:L»™Y pHYs¸Œ¸ŒÌö»/½IDAT(‘½Ò»à ÐÕ(P¨T ¥;»R®B g»‘íÔÒ›A÷b-Ã'Æš¯o¸‘"J2täÌSc§ïÄ}í$êEx",%ˆaî“hQá™° ^ÂNôƒ˜a´DÔL8K† E[ÐǸÅ1EvÝU7]] fØ¡œ¡*Ê¡äU©«ö • ögž_ýzXÔUSŸ]‰°óÊH„ÓAZˆrr‚¶s¸®)W`¡=ÏŸ?Éñ†¸À‰ÿ<IEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR/LÕ<Óõ pHYs¸Œ¸ŒÌö»/BIDAT(‘cøÿP) À¤þ0؃¨ õ`• ÿG) ê õB=ÂC‚Qà°ob‡6ÃÅÆð…ÂU4 dŠs;p+‰ÄIEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDRLLïìl† pHYs¸Œ¸ŒÌö»/ÜIDAT(‘ÍÒ½mÃ0ೄ.3po •¼¸ðZ2´…iY² (ßIQ‚:W}Åáð€{°”ñpL€ Kt[Fè‰cç!e*¼†8è5öT[&æ¥#~UFæç‰x« Ì+óΤÀž©™^ˆp@Ιø%‘S&~¬| ÞP ½j™Œ0t-c/Œ§–!3!m&,>sA.…Öv®ì_…c?UšJgž•º¡.ôjå‡) ç•øÐÌØÒ¦Cbö#~ “b:l 5m …?BêÅï_õü|³§uPÚ HIEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDRCLç7 pHYs¸Œ¸ŒÌö»/¿IDAT(‘½Ò± à …ásBŠÈloo3š7 #¸¤@ƒÜ{i\‡ÆŸðÄI³•äL2é§ÊX?m¦"«nfŸ¤Ê¢*AÏÕ¥+PžrÔݨ»ü´™æ ý×_EjPò”ƒŽ ÊT¨jZMýþ¦HiĤÈA1eJ#&P«I#P¤ö%Žš Lª¼LMžÔŠ3´Sé J Lªõ§l]•:ÆÄD•Œ7ß©´`š2ÕÞç³öW}×ÿçj©ßáIEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR>LP9# pHYs¸Œ¸ŒÌö»/ÒIDAT(‘½ÒA ƒ0Ð"d#xÁ‹^L0½YŽ’#d9 1ý3–´J·­n$™ óƒz~;>p'20"à\á!® ¢ µb"ÒRk DÜxÐZRÜŽÃY]þ¾jq"VÈ =1£"1FdCjè¡Xº¡{# ±]7`_ÀºK÷ñŠÒ#Nw¤#’ !7ÌÈá‚´¢øÄwˆŽ·>tÀ NþЛš…Þcì!Sd¡¢ÁežO›&ÈÝÎ2EÈ-å–ûf(Ìÿ|$éþZþ†'мÍW-úo°IEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR.L:þ¸Ë pHYs¸Œ¸ŒÌö»/qIDAT(‘ÍÑ1 €0 Ð/-¸¼@"ôb¯æQz7;”Ö&©PÑÁE0ÞBÂG¡J¸Bå% Õž"LP9# pHYs¸Œ¸ŒÌö»/þIDAT(‘µÒAŠÄ Ð dð ¹Â ‹5ľ™GñÂl\8:¿*ÆL†Þv²y V‰¿P/ã p Vá#à ׈4Ô„ˆ¶V,„ßjõáv4„”LCF´.S¥øyjHVzbET8bQ<¾c†t`éŽñ‚SDb¿ HŸ€vOã¸;â ·ü‡?ð€·7„¡cÒGx"E¾äyëKX` ³(rÅb% öÈ“cÅ(Áyž»$ÈÝ/Í”9ö”{î›"ahCÎi‘Èþ\rl׿ç8žÛØÔôÅ×Dn2Òñ[#ÑsûxŒ_ÀŒ6…kHwNæOþz+µ u–à®IEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR6L‡y× pHYs¸Œ¸ŒÌö»/¤IDAT(‘½Ñ± Ä ÐQ¤9‰X$R;)Œ–Q!%ŠÏàï‚\uÍÑLP9# pHYs¸Œ¸ŒÌö»/zIDAT(‘íÒ±€ ÐóYP2‚£0t®¥ÏEÒ‚G¼Dm”–ÎT¿ ¡¸ƒ\SðGd(|’ *"±rËö¶0+âIáš…¿QËôÀ3ȉØH6ŒL0™§S$8ºÀ•­ ð† þkÝÐÛ­¶ôÇ äÄò¿œÈ)IEND®B`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR:L»™Y pHYs¸Œ¸ŒÌö»/°IDAT(‘½Ò± Ä PG)QHWd-G)n Ø€’á³9’ DiïW¯°¾~a oîPDP3"N|‘B”!÷Ðå„TfÃÍ?8†mH‚Eà–( °ƒ CCäž*4Ñ&ˆWì3ÑKk…jÈ Ýcâ¥]L4ðèl{,.p=ÐFêá?D½HóûÀ: += L¦FØ\ÃrÒ#¶ááIþˆt}ç•9ܱIEND®B`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDRQL=¼fÞ pHYs¸Œ¸ŒÌö»/âIDAT(‘ÍÒ1à P§é ¸F7.V :åZ¸HrF„kƒ›Ð¦ÙkÉâ„ðÜÊÃÁ¦@!jD¨õé"ŽV'å!dÅ{™œÙfw~{ÜÍw²õP†/s‹ùäÄÐŒ´.Wê¸ÙaÄæàž·Ã𴸊§ëÅà̦3v8º˜¨?<±›mRbsæäè4;öÖ±7–¡˜£×͉Œ V39Ûæ@3ì}¯Îjb»ê‘ü¼ý°Þ\ØËµf£\Ìn ÇÞ ¶mbœ%vzÛ}yÜÅ4¤Ss²ØÏZq`ëŸÙþO¿±Vp„Ù¥tØIEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR5Lå°ÂÔ pHYs¸Œ¸ŒÌö»/ÜIDAT(‘µÑ1nÃ0 P”Mk†ºIÕcu“‚\LA/Â#hä ˜ýå! 2V˃!Ûä'IçzñøB¼¹ÕnšYT«Ð0ox²êkÒ#À#ä¨c) ö ’¡ìÚ‹ËæØ”Õ}˜‡•¶>¨œ†iýŒË4m._³{)ÓNú¤lîØ—ëù ¿ú÷ƒürúåu:¯zì}<º÷õ³¼#‘PÀrÄS°|É•ŒD6¬ÕæÑ‹ËHdsjÐævC¥è{è6Wtß1ç# #8¢%s I²ßÔ¦W²µ(á÷ížÿ×_eí¦¾Á›­µIEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR6L‡y× pHYs¸Œ¸ŒÌö»/¢IDAT(‘ÍÑM Â0à)-d#öB."äbB ]ô^¥Å‹Ôd™EÈóM‹Škq6ßjþ9¢ì^‹¾Ïˆµii z¯ú“Íôg‰2ÛER õFºÒÅÝ謲¡l”z ’U[D5R§6M ¼ ¦ xÏŽÃZ½e7WMv³}Ö훡sE)ꯦÝzŸ?÷9/öÕ?ÿÆkݵx2¥IEND®B`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR4L r©ê pHYs¸Œ¸ŒÌö»/©IDAT(‘µÑ± Ã0 DÑ3\¸t6ð Ù@+ey4âTº ¤wL‘ )Ãæ5— bp>5h¾{ƒ-~,,áVÇèxPC{óšd›å¹¤«_žlRI¯IEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR*TܘG pHYs¸Œ¸ŒÌö»/IDAT(‘cøF©áDá´³¼1Ê€“¤ÕÛIEND®B`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDRTuäPÓ pHYs¸Œ¸ŒÌö»/?IDAT™cøÿ„~0üÀðÿÃÿ&†ÿl ôáýcøDv Àè5ÔACû?{ˆ!C n¼”ˉú7¥IEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR$TÂY¨ô pHYs¸Œ¸ŒÌö»/yIDAT•Íб 1ÐR¸¼<ÊæÍRq”()Ð>Í¥Hê„â D†âǚЉ‘]áÀ¦°q4Å Ma7êé3Îw¥æ|ÑJÐU¢§.¬ÚF×Nç¸<âR>x–ž¢æ#”ýãN{£µebÏlñ&¨PoðmúSëR¬ðVåõIEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR+T3Róy pHYs¸Œ¸ŒÌö»/ŠIDAT(‘Íѱ ƒ0…ág((oâUƒ)‹eà’ù¸w¶E)U7_aÉòáI§qô®hwå‡ÀØ1‘„‘Dôd…#C™ÒÁŒ‘UqŠ7¢·7ôIþOšß¨)±²U/ôg,‚ö!ìA‡¬‘œ5àˆÇ@ŒD¸ª¶±¿ãVÛ€¼‹#lIEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR T˲Ž pHYs¸Œ¸ŒÌö»/sIDAT•½Ð± Ä …á¥H™…Ñ ›q›0× ñb"å¤4WÆÅWXz–mdÅ‹ j€ÊdƪÄðÖèA•ô¥FùÇgNÙŸ¸¿ð$]Ä›&Þ(›QW£9u:±2Ø–v(ÏÅ+v‚–÷¾v/¹!BËyöIEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR-T>Lƒ> pHYs¸Œ¸ŒÌö»/IDAT(‘ÍÑ1Â0 Ðeè7 7¡×bjÓ…sù(\ c†ÊÆ?¡R„¿íë[†q ¸Ÿ•ÔC‹ÌDq" ¹±*ÑÁÄÙGÛœ2Yq¶Év'/5%·0ù`í¾=Ò›å€]R«$c-(çZ7ö Ñîl 噞s ~pÅ Ìðd JJ<^õ—¼)Û‡jJ™#ŠIEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR#T …³ pHYs¸Œ¸ŒÌö»/‚IDAT•ÅбÂ0 …á?GáÒ#$›x•l³ £xà2…/‰ÔQñ*IOÈ˸ZÂÙ¢Iî}ÜŒ#i2FV5öYm¥—ЊlÁ¶°¹Ðb Uê¿äô³|>¯íÿ¬Û—%l§ó[ËÒƒžt,ôIcagë+ƒì— <…*Ùí”È›®þùœQ‹ÛÖìBIEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDRT´c pHYs¸Œ¸ŒÌö»/TIDAT•½Ð1 €0DÑ^+'Ó@.o¢7H™"dÜ X¦ÐæU餌ÑÍ©›QÑeN,/ú4'dâ`þå;šSØ­ëƒ<֯ܘóôà(‰\IEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR*TܘG pHYs¸Œ¸ŒÌö»/½IDAT(‘ÍÑ1B! àFŽÀQðfðâÅpòÆ02êßV1ÆÄY–//¡} ±œF ¡SÁwÂYq 3-¢ÌBÏ\K£[æ& 8oZáÛ/Ê›ü¢±6»‰Ï G–#¬¦’ 4gušú•«Í••”i £?±+2V1®€`xýƒÀ•Èá œ6›„‚ 44¨gø/Žüu+lÐsFÝËHº YâV™Á/g³ë«Ty£GIDAT•cøÿÿ æÿÁð‡ˆ™0ü@ >H$¡~ Äͽ HdÎ?:c*`€(÷“‡šÃ,%þIEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRTLƒáˆ pHYs¸Œ¸ŒÌö»/SIDAT•cøÿ¿â f`@Å PñÇhêqá?@ü áCÃ$üŸ¡aÖ`ÅH˜ˆ™‘0;ÐOüüG¾á‡}ÃúP10ÿoÍÚ£Igƒ>IEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR,TÑŽè pHYs¸Œ¸ŒÌö»/•IDAT(‘ÍÑ1 Ð)ñ9J®”€ãÅÈx‘t¶[R0 üµ#ÍcØ]} Cê ¾1×ÚïiØUÏ rn$kçMxÒRWR6b‘J} ¹x‚‰SÚKÊ’•ó Ê©BEe«Su¨D’fŸ«ºVó¦«gº¹áúžÄŽ1BO"ï?õ4|~ìïxT<‡§ĉhIEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDRTEhAò pHYs¸Œ¸ŒÌö»/*IDAT•cøÿÿÃÿÃ?þ0ÿ``@ þ¿a‚A~ùÀPÁ`?Ó°æ¶«»1kâIEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDRHT ‚L pHYs¸Œ¸ŒÌö»/{IDAT(‘ÝÒÁ Ã0 …á?ÕÁGàQ2Z²˜Fé†^t0Vm§…,P(Ñé³@2<„‹êÕ–ÙÀc­$§J!ÑÉ¢ÄBÊE†ä)»-N{$“Péš“mÊûÇÆÞÍóv•Ì¿>ÊîzsÙvVëÙj„3Gå¢?¸ƒßë bðv1q©IEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR/T:¹S pHYs¸Œ¸ŒÌö»/`IDAT(‘Íѱ €0 DÑpÉ0J6Æ(éh))"‡ ¨èãæU'Î?£Eö9ˆÆ!‰Ù@6ÄÑ›ARgœ}<ƒ‘Y³SSNW ò¢MSëêBª#èŒEyhã+ÿ\õÜ¥´ôÞÅxIEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR(TØeHz pHYs¸Œ¸ŒÌö»/~IDAT•Åбà DÑÏÒ)…Ò 4J¡B†ÕÉ#i:ÁKo?è|¼ì¦˜ƒh6œébQXQ-1“zbdH7½hzÚírT]î_[ýi‘Üe}ôÔ¬m·-iÙžx:¢¦- ™éÕm¹ÕX oÖo]'Ÿ½áí??uÊSˆÞŽÌàIEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR-T>Lƒ> pHYs¸Œ¸ŒÌö»/IDAT(‘ÍÐ1Â0 ПzH·®Ýrn¹V·"õbå&‘¸@FQLìT „ØÀË›l¢ÅøGn…Á”á §€²3V  êåÒhŽÕ‰¤NQéAk{§|Áøž_Xú¾“ÕH'l‘®l9we“I‰5(>o ôö)¼BG4ì=?¢tØÀôä`ºÁÚê„IEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR,TÑŽè pHYs¸Œ¸ŒÌö»/†IDAT(‘ÍÏ1 …0 ÆñO:tyà„å]ìuòZ=JÁ \:Hc’ºòpÓ,¿)ä°á•İ n àj$6fΞP{.ÂxÊ× ÑÈl¤ÓÝmð‡8žhI)X§@šä->;Nš‹úÑx`ÐW€Ÿ>èGgPo´ ÏQÔ)RŠƒ9 …%ÈÐIEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDRTV¿ pHYs¸Œ¸ŒÌö»/QIDAT•½Ð± €0 DÑnØ‚Q‰Äb)‰R¦°âØ"3¸yºæ¤Óaf<>=°»A—”…Ї±ŸWq¬cóîd¢ACz \$æL½\Í™€møIEND®B`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDRT½ˆº pHYs¸Œ¸ŒÌö»/†IDAT•½ÐÁ Ã0 …á?$K  ²ˆ ‹ÚÒÅÜM :‚Ф &§†¾òϘ ¡OœPüIEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR-T>Lƒ> pHYs¸Œ¸ŒÌö»/ŠIDAT(‘Íѱ Ã0 @ .Rj¢µÒÉ]JU¤péd¥cA I†dñ×}ó@„óौêˆòp"*yîtæÁ¸•Wxç6X˜ÙHäɱ‘)Fh‰©†o¤ €þ£\ÞB3¦—Ð · ·)°(ó}”lÄ#ÅHJýá¯üã ¼ùñAIEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDRCTñb·ý pHYs¸Œ¸ŒÌö»/ÄIDAT(‘ÝÒ; Ã0 P™²”ú>Š{3»tȘ+:dì\rgó`¬ÊR>´{¡Tô@ÆHF€køO=X4N”khìYQ!©@€Ô ҹȢ›H±Jƒ¥^%©MTÊô¼þP‡†ä1]\Y5nŠÁfKݲëLv¬9šÄ²wRí>Ø)éC‹hH+š!oÒ¹›E¦4¢3©NŒél‹,®jICUn‚ˆz÷Z„èMU!"õ&»)°êŸŠŽÕíêwýÂF|E/σí¤î#IEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR'T)n÷ pHYs¸Œ¸ŒÌö»/›IDAT•ÍÐÁ Â0 Ð*QnYÑMšU˜„ôÖµZ±HÙÀǬ˜o`ˆ”wpdû+0žŽßªÅÅdýdS:Z›!ƒÉ-ÔdG;öðÉ‹ºÒ¥dºÍ“{sk¡r©.|KK®_{T,^;êG…÷¶»Ïñɯpo£oÕ®šhî´gc ÌYlaæÂ,Ê,ØÌŽ3¸F€þÃo‡ozcNÅ* IEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR,TÑŽè pHYs¸Œ¸ŒÌö»/¢IDAT(‘ÍÑ1à PGs…+õdë˜+QeÈ5ˆ2tu7„‹©FÊêÁoò—-Kü/(­&fxfO ¯Â̼¤O‚Ü)K ë”T¬daål—ß±ÉU¢l”]’@øQÄål\³ ÉŠIì 0ÀIEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDRT£Aж pHYs¸Œ¸ŒÌö»/KIDAT™­Ï¡!CÑïVR¥PÚ *£“-‰`ȃÅ1óTL$Lá¢~Ô´´)>ÓÃ22T£Ì°“÷wE-ýóˆïSYèê‰vj¢žµ4"IEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR*TܘG pHYs¸Œ¸ŒÌö»/WIDAT(‘Ý¡€0ÅÂ!*;£ÐÉ ÉJŸMþ•\°E˜˜˜ ã÷Ú¤–h¬ºáfR…ʨ’( OøB̆+3—œÑØß<‡D4‚ä³qvqÔ˜Çk~øcIEND®B`‚leptonica-1.70/prog/fonts/chars-18.tif0000444000175000017500000001077610141353566015654 0ustar dandanII*@& *¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù —{É W!È-„ÌàÑdLÈ$<¡4ë }iÞCo IÀ©6AXu!§B ÎA²„6¨@ÞfY öATrC2„'…ÔƒF—‚„T›ƒ ƒ  acâ`‚…ýB'³¤$ÚjaPi… K  õÞ²©ÐA½t›è#Ä„A¥„ G†GÉÿøA¥i# ëd^• š~T‚  ƒ{õÒ8ÌIôƒ¤“wÕ6 ¨Ì«h-'A7Óþ–[H/Ó§J“‚3óâ¸A¿ARM¤ÿë ·ß§¥´×VÐ\ Ü'Y€'LØ7ï·õúýZKé7uUÂéé´atª’´¯÷Õ/_ô¼7ª· §IÿKK}ÿë÷ôº¤› Ñz¬}¿KÒK]ëÒÿÿ[ Q~«z^õéi}_¿×þ–©S†:ßú×Òÿÿÿÿþ©m×ý×KëKÕþµ×ý-%¬) K¥úÿõû¯ýÿÇûZÜ#1þ¿Æ’ô´µïü†ÁOzKI%°Gö:÷¥ø÷_â?Úý%á+ëý/ÒJ×÷ÿÒp“ ž½wý/éºþ»Ý.(Vêú_¤¿#šKi<[!.û¤¡{^¿­%àé0 ÿ^öׯa7×ô’^ ©öZÿ·¶’Mk_ô¾!á“ßô²†!i þÿô$» ƒVµÿb|5BH.“ýkÓçÇTé‡ôÈ@$¦½ÁkúPipA½5 6×ý†’8˜?_ÒitÑÂuvý‡„ÆcõýfÓÄt‚8ƒa„q/\HƒúMØÿ_Ô m,]&Ô ƒlWþCU>:·ýH_îž’ Â÷¥ ÆÒáµoò âõúM¥½:¤ú Ì)ƒé6“ÿR¿¤é~ÚI6Ò_á´’o¿õÿ«þ½' þý:MÿÕu¥¥‘Žþ•6?þ’ÞÝyÁ{×ôýõt¼å„%ïú·þµ~—þ–ÿ ¿J›í/Å_Ò×õ®±×õöÿëô¿úW_ý/ÛKõ×Kzõúú!—þûýu¥D5{~½ý/¶ÒëÿRÿKÒZÿ_ìU®­úWYî•é}ú_m]tëßÿ¥=E~¿OþAZ]+­éÒJÒK ëô“­°ÿ!µä 2›ô´»KÕô»ÿ^ûa½jšõ¤Ý~Ú]¤–¿ô—MÁëÒtÚè vÒ½'¤»êô¶Òa„R;õ×K[K´.Ô%ë ô’ul#Ýÿé´“[A&ÚM¤“i_ l0‚ˆMu×°Ò!›[¬0‘ H8aà + ‚ zÙ B &(4V½4¬TF¬B‰¬3Šb©Š-…¨1ƒ „zªkál&† ±!¦B kÒ !a`ƒC !’p"-¥ÐˆˆúKïU_k¯½%ýªUïZêÚIV-¥C½%Ú°¶Ò´¶ÒÚab?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù0j×¼ )ÁÀ®¢ ÛYPÔÔॡÁ‚ |<#È-ƒ$È)#!´A]Ad5 H.CP™àÈ`ÁÀ2 ƒ!€È0 †¦¤5ô!f' Ö ƒPÑ@dÆÁ€Ü†Ã.S†€\ÔFTCgÊ™(A§ˆh+“à¢Al5!¶180Dh3‘pjX ÿëx@àÂq_ÿ\5 ¯ 0ƒÃa0Á‡ 8a‚ `„,0A¸AÃ#0á†FaØa£ÁpÁLa…}×]„W¡€D PƒèA¬ä„ ‚P @ä P†efІmfQƒ@R¢pÌdð @Ù£ˆ0È5œ„ ƒYô Ñ€Í4 `² 1ÑÀoJ| ¯L"€ÝA¢Â!²ØD3Úi¦šjšººA6ÂÐM°´ƒÌ™ƒÚ§§Ü†QÒ Ô|àÚ3á°w÷Ýÿú[«naá´ƒ ¤ÿîþšA¼6•$ü Ø@´÷A>ßøIÿô»ïI½°“{×_÷_ºOézAÒoí/ ÿ¤ÿú^¾“ý?¤ý?û¯iZ_ý ƒiî—·þ—ÿ„÷¤ÞÚMíÿþéwON–—Ó¤ßëíÿ×ÿ¥ÚÌ'¤ß¤ß¥ÿ÷ú¶­Ö—«Ós õ[ÿ¯ÿ¥Ì,Úíë{­ïÿû­¯i:éxé:ߥ÷þ—ÿ¥ö—·Óý?ÿÿt÷½]é]?¯·Ž?ÿ¥ïýë~·ëŽ?ü¤ÚM¤)y €hrƒÓ­ýúCÿ¥÷^þÿ¿ãû¥­úºIxXzD1÷OÒíúÿé{¯·¥ú_ÿßï·W¥á`ë3s­ëÿ×þ—Ý{ß_î­¥Ö“¥^¤öÿú¯ÿÿKÝ}¿~•õ¿î¾Õ´­%ð°ëA:·Oëù C¯þ‚û¯½}¯ÿéö÷Òò öC6Ái$[Òöÿÿý/uöúþ½o÷K_Òm$½ƒ ÃK¨®ŸJ¿þ¿ô¾ÿ¾»êÿ¾û¦Òé/TÂk¯­áÿÿÿ¥î—·ï¤¯¤Ãýééצ×ûÂ0ëKéðA/ëªÿé}þÞ¾¿¥ý®¾Çi%þAƒI%õâ ÿÿÿKô¾ÿÒü$ÊpeÿôÞÓÒ_XAk 4º¯¹P×^?Òöÿoý/Á*oî–½Uª^í 4¾“Áÿú¥ïþüÚ0Þß«n•}`‚à .¿¹ðÿÿñ~ßíÿ“Óø Ãýë¦ýº_h0‚ 4¾’§È=?þ|?¥íÿÂý ßúëÓq¥â!!†–«­íÿ>φ?üú~ÿßûû`ß÷õj›Ix@ƒ¿éöÿÃáÿý¿ºöÿÇöÈ2 ýÒm_ô¼ ƒ—ZKíýÿû~ëíÿþä4þÿôÚü ƒiz_{ÿÿÿì?º÷î»®ÁÿzêéÞ—ÂÿI?w®ûßþ÷_oÿöÃ뫪^—¦ýb÷ÿrÿíý×ÞþþÛþß×íé|0¿ªKÿ_ýÿíû¯·ëþïÿM«t—×à ïUŽ9ªíý×·õévÿÚÿ¤Þ¾`‚nõY°oÿ_°ÿû~ëïßß·þõÖªÞ—†Ao¢ê’_¿^ÿþßßíïïí¿úêß^—†A7mú]ýÿÿþßé}ý}mÿ·M×I7¥àÁ×!wIÂI?¾—ßÿ·íþßkÚÿé~º­ÿ†VØJ!Îú¿÷ÿöò#Òö÷­ël†S×ö¾Þ“éÊ < ›bšI'Õ½,xïÿÛý¿Ûí.ëoûÞºê›Òü0ð@°Â`«ÿÒý¿ÿoø¯}¿uÛý×V65½/à B ±ï¦ôºÛÿöÿ½Òí/´»¦+Ò~¿ Ïdà0ƒ,6’O«zÿÿûz]{}ÖÝmÿ¯ZW¯éÌðÁ„ †—}7¥®ßÿ·ûûim¥·¥¶—µ¾•}¨0 [ +é0Èf¥ûþßõîÚ[imõÚµZMé/­ “a¥W„› „ì?ÿo÷÷m-´¾ÒÛK}+ÒþðÃAl0’úLIBZíÿû^¿m-´¶í. ÚWÒ_Ò°a%µ˜`¶AСS 5M4ôÛPTÝ4݆M†M¸a$ئ«JÓP¿XxXb 4!(! 0Á‚¦šzm¡§¦›†A&Á„l4I6¿VqûÐxM ÊÈgA„"…‚ Ü  ¸<‚€lR 'hƒˆ!„îÄ" @ÃA¨8„CPanà“C0û 4_!”g “ ¯Öõþá…† pÂØMUWþ)ˆ0B" ˆƒ)à DDhEÁ‚úˆÑ¨ƒøˆÐˆâ"@ðYqõÂ3hú ýaëH?­]$‘±”ã#´:&ƒ`õþ¡¤ Õè(¢¡¥¥ã@š€ðcD CnþÖÂÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüf¤ ’õ!’P@ð+€ƒ x[ xAH L +!¯d5ïÈdAËÈþã™ÁKÈ2xKaäG!­"ä<ˆRÄ<H!¶B[x{Kü%Ë¿KouR‹äF@ñÍ4ÈeyOÿîÒ4Ýë~•}!ÿ׿M/_ü jÿÎ'ú^þ¿úºÿµ^ ÿÕ׮ x_ý]Äÿê×ÿßÿIë×ÿÿÛ_ÿÿô¿ÿÿÿoÿÿÿK_ÿÿýºÿÿÿK@ˆ6S!<‚¤ÈkO!«<ƒe2,Èk¹‡ò NEò™ X"̆ÙÈk9d¨Er®EâgÈiA @ðmr ˜@ðÔÿÕ¶x `„) ®È/< a 0@ÁB5 ÖPPR‘t éÔ‚jAscÈ1YOÿ¬B „C Í@aéË9ç× \á4Èe0ƒ `á0†CaÔ.JÈ0rï¿ÿý[OA…Øá â"E0¡t šaSøØTG…TpXC ^„â(¤àÚ6̓ÀÜØ.¿ú°Ž Óð°‚AÁPA¬'ú ÓO  ƒMÕÚ¦º“µ_þ“ÐoGA‚AÒoIôpl†_1ú !—èáQÂd2ýA6@¿£ƒaU‘ žAºnöÕý/ÿnŸ@ƒh é:V@¿$ÔBw}-ˆAˆNÄ'IÝÒwFÞ¹ˆð4ÝýiºÒ¤¿ôºx§]'Iõgƒ4 ÿ¥Âa< êÜS¥Ä'Wú{Ý&ë¯ÿoºm/u¾®¯ôM7WMÓkÓ_ûk­ZZéé{ÓÓ¥ÿ¾ÿ„¿÷^žºÿ«Õ´º×ÿÛ­Iõëý.©ëÛ­|qý÷Nž›Å$¶Èia é~þ¿ÿ¿é{û¥í¯Wý¥Ì~ÒÕ/ÂöÿHkïÿýÿûý}ÿ÷é6¯T–Ú /KÿõÿÿÂ_ÿÞÿÁþÚZW½Z¤–Ú / x‘¾¿ýëÿëÿì†÷ÝbºP@°`Ñà |†@+Wëñ÷ÿÅÿþþ¿)Á£íÖ•ÓMé Á„¼;ÿõéßÿÿþÃÿ[ß}$˜zI+Â3ÿÊ@Ë·ÿÏ'ÿÿÿ°ÿ÷KJߦô¨5èÿÏ‚¾ÒÿÛÿÿÿ÷_{Ú¥ú@×¥õÿ¶—þßÿÿ_ƒëjô›Ò¾–^—ÿû ¿öÿÿÿðoöéêÖïJý¡ô¿»ýŠÿÛÿûþü‚¹ëþŒoI/Çÿ_ü0¿öÿÿ­/Áÿz´ž—~¿ô¾¿¼/ý¿ÿÿý¯Ú¤Ý¤—ÿþÛjú0 ßöÿÿú ÔïÿN“ÒM¾¿ÿéá/ý¿ÿ´µ¿ÿVÖûT®ôˆ/þ½]­éíÿÿõÿúõ珞ÿþ­¾Þ—þßÿ·ZÚýz¾ÓÒM·×ÿØ].××ÿoÿô­&×þÖ>4®)*ÿôamÃmVÈ>Ÿþßÿ·Ú ×´®Ñµªt›uÿöÒá¤Ý„¸a{ÿÛÿöÒ†“a_ì›°Â w¥zIû. ˜d,0 a…å fØþÚPÁà |4£ŠëÒ·Iö*Ì@ò‚ƒ¹΃!¢Ç bÕ+ ¡è†Œ!±Èlâðw El‚ A|!¢þ¿A„î¨QI6@‡Õ˜Pšk ¨#ãÿÑ|Òn’u¦î´›O.Ú.ÚÈᔎ*A7Aýþ’ÿ_¥Ãiv==<O¥¯¥ô¿_ZU·Ð>—ïëÿ_ÿÐ!ãë’áÒßzô…m/ñËÀ¯m*¡«‚;ÿúIyYÓ¿þ6)h¹øý~’KÅ©X¬;]¯`Æ“÷­ ƒ®GnÍ 0Û_ðÚšÑ}†\5¸õúD BâôÞy±Sø! 2>é;¤ÿÕ ƒ_¯é=oN’¶?†^º¤ßÛ/õЃÿ§Kô¿m/Å+ô¿ô·ÿ Àÿ_lWþ–‘ ä6?ëéd'ÿIaëQ4Ý'ô­,‚î“iV’]ýõM¤ÃDᥭ+í-´¶Ò´•´’ÿˆjÅ1#ɿ꘠F€ø @☤˜ –" ÕƒZCB¢""""a¡Ò¡ÖÒ×é!Ý!ÇÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò0YÌ04‡!ŽC-È4ŽDÈd7oä2܃tØA pÈh9 LœÈyII“Âd6a„ÈL!¢d3 †ÉЂ&ÔÌÏ#`爹dQÂdAÁhà C.m8eÆÁ—qÂ080@Á 0H¸g †FØa—6¶eÌ0Œ]˜80@ &ƒ[@Ú‡¹EèŽØ@ƒ~èk ÿ„ÿézÛ@ƒ{Â÷ÿõÛ¦ÐZUáÒ Ž ß¥íõð¿ý.Ö¨Òot›ÝzÇÛ®ëI×_ x¹ ·‰ÁOhOø÷Ž*?ú\OSíû·øúº«ki xXi(A7«ÕwÉ’/ý/µÿKô¿ÿz¸"ŸÒn’ò“b0úIõ}*ÿÿÿKÞ½¿}-ô¡ÿkÕìV©zxAZ_Wö¶¼¥÷ûé~|šþ½;t—´áC`a†‚úUyvÿŽ>`OÅû¯·þ ~‚ ?Û§¦×cüD „0×¥êðßòå—/Oòéý×·þ?¶@ǯút— ƒuý!ïÿd^ÿÃ~ë÷ß߸?ïV¯R?t½†—~”¸ÿëŽ8kÿoî½ý/Kmÿµêõ½/ 2»a%(z¿~½ßÿoÝ}½ýý¿Õê8ÒoR(þbVÄ!J¯÷®E¿ÿo"¿í÷]×dþ6ž¾¿ y90ÂwlI=^“z_·ÿíþþÆÚ[io¥Ú_JÞ—é¨a„°a%ð“N0—ìÿ·ý~à m®Ü0–ÃI¯I½%ö°ð°Ä$A¡AŠBC 1‚ x l4( Ü aáŠ Š ¸„Ó¥`¡øÐˆˆˆˆˆˆˆâ"""D!KwÕ]‚Ø4u h 6$ú4>#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@óÎÈCl²ðAZkÁk ¢È È7†ÇÁ¢"õU!”äuT¶ÿH8tGOƒƒÉÿAëë×ëÿí×ø¯þ–¿þÿý7D6^{!²ÈlŒ†ŒÈh̆S |œdr CËâÇ5QeA‡;c2Ü“~5~,rvAàœÆÈbŸúâyè0‹Ìxh¼Ð4_>+‚‚ë…+À¥r/0TÂ#±aSEæ… ýªt¶Œ7ÿ¤Ý7eÂNt­Rj$y‡ XlØh HóI°Ã.h6qÒu0š % ¤aT/ÿÇÛÿIÓ ŸôºiéÒn›_C÷WÕ×Zÿé7Ó¤)ý¥õ×ôéuººjÃu’Û Fþ"A›¿ô?ÿâ¿ÿþ|ý×#ú{¤¿Eö—„bÿó_ /øE?ÿÿþßî´Þ’AŠôÿûÿ·ÿÿÿƒõÕÒ~—â?úW{{. ?íÿýúWä3ŽýìoÈþéýz}~¿öÿýÒëÿõn£JØÒ&ÿýªa(f´§l·Ñ8/ÿaÿü4¡„› ÚPì/´­Ò_þÃ=Å68lPAá ð›„A„0ƒ†¨¦ ŠpƒŠx‘ÓwÂMºþ""""Ë›DDDDeÃJ""""#Cá'ýÈm_ÿà£ÿÓiw¤—«u‹ *ðHGb‚A:ÄDGÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿø€A::Áx€(ÀÀleptonica-1.70/prog/fonts/chars-18.ps0000444000175000017500000000062410141353566015503 0ustar dandan%!PS % chars-18.ps /inch {72 mul} def /Palatino-Roman 18 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-12.tif0000444000175000017500000000641610141353566015642 0ustar dandanII*P & [ ?ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù €Úr‚Æ@ðhr7ÈAÁMÈ.:ä&žA¦(†¾×ŲcÑ ¹ÒƒEr 0‹„4‡!¯d̆d𪤠Á+† %4’nL(AÊ 'L†pz»ô ›n“ÒoH#m‚¦~ѳhãë„Mª1é+ aý ØTÓK$Aÿý‹·Ý$ê­Ý-6 8Ú<Úè-'I¿ª­,4¶©=Si¥K£•æ±Luÿê—ÓÒúÝëW «§E×K¤[ëý×é' QqJãïÿIRÿû¿UÿZIv kýi:^—^—¿®¿ëú[ÌŠïßÒú×öÿÿÇêÒKlïëþ?ë¥iˆaGêºUá*J¼zKÒÿÿn«I$´¿ßÒÿJÒÿïëb‡n¯_ëKÍ5Øi_ä à•Þê•{__ªIxAÒL4µþ˜{itDÑqo_è_¥ý1 ýxƒ BI5ïëüŠ%Î7„¶Úÿ°c¦µÂÿÒƒ^6©¤ÃµúØi#ˆFã¥úHÃuÂx—7¦ÃÂÿ†ò/¤Û6 ÿ¡ ¥ÂFæÅ©‚ÜÒ·ò ¤Èmh—é?½Z ƒmVäK·¤Ú¿ý¥i}=(l4½xt’ºoýWôµËýRqÿÿm[ü‚ÔU~“Ä_½o]'²QºI}¥ø­ýkú¥®5ÿûõ¥¥ÿ¥½~A¸þ—í¥kÿ¥ÍºÿÒõOÿ¶ëôŸÔ†`õþ—ÿý%ûõÿ¥kÐé7KÒYÎ:õþÛü†”duëK¯õ«T´×úI´›aþ Zéwoí'Õé.ÿÒþÐ2Ç´ºM^´.ÒÞ­*µ }pô’z`Á ú´“[A'a&é[Iÿ„¶ÂLMÁN¬4ˆ©a„ˆfêà 0ÂJà ¶µ D$ƒ˜A­-jƒñ âLB £±!„o¡a 0„0¡d2iÄGªHDDGÝWöê—ô’¯o×ÒHwJÚC·]V#ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþ@´>@Ì AÀÂd¡ ÃL‚<¡ €Õƒqä<6a ¸¼†H,y CäK‚C:²i.L25!5 ú}H>¤%cR‡ `ä1BÈ2„C=ZJˆB&„*Õ ¤äÈ0 u„ îGÈ?ùÿÿïñ #Ä4q‡ëø'„ê.p Sù¤4¦OѰI #9 ¹‘|†‰‘øGÙ ž@ ßÈ7ò þp F‚†Ce„d L” 2&Jh>@Ž!žÁŸdÓ@›Zôm´lì ØAaOaL i¦ši¤ONÒ6  ƒl ÚO.àšiÚi\†ÎH¦Â „aÞÚO†û¤ÿú]­é7ºMî“ÿúþÝ6•%ûi6¾—‡ÿIÿô¿½&öÒomýë´›W­/KIït½¿ô«ÿKÖôŸÒÿ½µÝ&ÒÒýÒn]}}¿ô¿ý.]>]?o}½Ò¯ýÒþêý'Ç«_ÒûÇÿô¿—]½_÷úÿî'J¿!È>¤$=_ã¿Ðÿè/µ÷êþ¯ñ~ýUmm!KÂÃègËWé/õÿÒ÷¯oWõÿt¯û§Òð°ÒTruÕë÷ÿþ—ÚýýÿzWýî•î“i%ä8 ¢LR Õúÿ!_!_ÿÒ÷ý½/I/ÿÝ/t®ºý4Â0ÕWûÂK¿ú_ú_i{ÿéCÿú÷VÕ/[a¥¥Z^Uÿÿþ—¿ï量“ýú·±ZI„0ê’ýâ¿ÿá…ý/´½¿ô¿)Ô4þé7õMÒ^øAÊ&h/ú¸?ãõ÷þÿÂ_œì§ŸßÖ¯ª^Ó Xa¥¥êó„ÿÿö—·þsÿýëVûb¿,0Òô—¼„ïçÇŸœ ¿Ûÿa~á¿õë÷KÂC—ô—·ü ðƒÿó‰ý¥ïþ?¶CP?ÛÛ^“Òð‚ ¥×ï½ÿÿÿ·ïû}ýþCjé{km%ðƒu~’W߯ý`ü7ú^ßÿí‡þþ½ÿûþ—ÿ_ýÿíýÿ~—¥¶ÿ½jÝ%z_ ßÒOß÷ÝÈlÿý¿zö÷÷öÿõýi½/ 0‚omÖ¦¿Çÿ·ö¾ýýþÿ·M¥êú^dI„Ý…×ÿÒÿÿÛ÷¯oëëoÿ_oJô¼0ð‚b°‘á+öÿÛÿöAû_ouÛ]² Çý®•üƒáƒÂ à ˆK¾•édÿöõد¾ëën뽺Ž:½/à B ±i$¯ÛÒ×oÿÛÿööÒÛ®Õ~£wI½/Èp@½ƒ D4á±K~›ÒëoÿÛýýëm-úÝZªWÒý0¡†I¶’Þ“d3¥ûþßõîÚ]¥·¯i~•ëúÐa„ Û Sá&\%ûþÞ»û°ÒÛKnëa¯OMô¿á´à -¨$ʦE¦ °×_ÛPU«]†à %Ý„¶ iõô‚ÿAáaŸ0Bƒ„"dÈ/¨fƒcBB×!ŸF †àˆa‚€"Á‚D èÉÚ _FH†^ŒWÐ$Á/¢´¡á4„š A„.‚»ûu½;pÄ+ B¶Ø…l.&ïñ¡ !DA’ðeˆˆÐ‹†A‚A…øˆÐˆÐˆ< àˆˆ®¸@þ©é$ÿ¢ã5 3tˆ›Ðƒ_ (“á#D ÃR/aãÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ?A¨kŽC6fä2R,öX²†TÕ‚ÐÙ˜•A¢+7ò†É©y×r  Õ4Þ@ñòªªªiÿÞé¤AbÈñrÑd5--¿ýÒÿÿÓK×ÿ ¶ ÿÌm}-¦¼ÿ_ÿÿþ©µõþ¿õëÿÿþ›_ÿÿõÿÿý+H†où ÏÈ4~@ø xg†ÜÈfŽ@ðRžC0ràN?ÿ»É̃LÈeÓ á<¹Ë€\…ìx.d~ \Á \È5ÐÎCdÀƒÁAHA3®D¡ y „‚g ¸ý+ôÁѹ¢@h0È`E2&@‰éd3Í4 “Ma"h0†Ay…FÛD€ynë§{¿ÿîƒxA„lá8A¤O]ôÓTÐAµA„lº¤/† `“!l@ƒ ÀUÿ¥tFÝ é^“Z0ÙCfidZ0Ú0äb0ÚNCF#ÐA¢-iÔéútŸ¤¿ú}¸„WH:Mƒ6ó€ B ï ¸„„bm&Ø„ ¤ñ.ëÑnú÷Ýiiëtð.ŸôºÒêº~éÒá?ÿÖ´Ú·ëÿÓcíúé~õþ—M=jôÚøí~Þö®—UIv@Æqý~ºÛÿÂ_ûÕÿÕúÚ.´ÚZŠ^è4þ›ýE-ÿôÿ¯é|?Û¯uŠn’Am Òñƒïü0¿ÿëÿÿ¿ò€1ÿuºkT‚Xm„¼šÿñö—ü_ÿïÿ°é]{½(aáAÂ<þ ëþm?ÿÿý‡û~­¯}7ªA¯@¿þp5-¥ÿ·ÿÿÿ†ÿÒzêõJô¨^—ÿû /ý¿ÿþ¿ÿo½ûn’Ç×êïö+ÿoÿïÖü†¯ÿ¥¥i"ûÕ/Çë×ûà ÿoÿúëðÿÿú[Òÿÿ׫è¸jÛÿ÷_ü†S¿«têÆ­ßD(ÿþ¾Ûkëÿ·ÿ÷ZMÿ÷ëI6é$¿þº]íéíÿÿõ¯×«¥q¥ÿö‹­¤ÛaXd#éÿíÿûiZM…õ»EÖšu}/ÿ°—p›"; %°Â\Œÿöÿ¶• ¡„m{¬ÎØK~©¶’_ýˆS0\I†bÌ3ŒƒYCd!†A!‚ DÌ0 †”0“² i ŠŠ™Žà”‡ÿµË☦•…m§wÛWwiÛ¢˜^„'kª÷kÿÚ  alDq ˆˆˆaMá± &ƒ]èG~ÄDDB0ˆâ8ˆˆ„ÿÿÕÿ_òjëþ¿ÿÿÒÔ}/I¿ ~/÷Kî¿I¸Xº×[±ÔG´’ûKa‚ ¾+ QÁFÉ 2*†–*]¬DDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€cxxH þ  (ÀÀleptonica-1.70/prog/fonts/chars-8.ps0000444000175000017500000000062210141353566015420 0ustar dandan%!PS % chars-8.ps /inch {72 mul} def /Palatino-Roman 8 72 div inch selectfont % 25 chars in first row: 33-57 0.3 inch 2.0 inch moveto 3. 0. (!"#$%&'()*+,-./0123456789) ashow % 34 chars in second row: 58-91 0.3 inch 1.4 inch moveto 3. 0. (:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[) ashow % 34 chars in third row: 93-126 0.3 inch 0.8 inch moveto 3. 0. (]^_`abcdefghijklmnopqrstuvwxyz{|}~) ashow showpage leptonica-1.70/prog/fonts/chars-8.pa0000444000175000017500000003753112256617134015412 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRò§± pHYsb&2 IDAT™cøÏ@½ªâñ˜¬âIEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDRè›Q‹ pHYs¸Œ¸ŒÌö»/$IDAT™cøÀðaƒ2€I4à Pø A*@j> qmÁXwÌIEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR eÚ; pHYs¸Œ¸ŒÌö»/IDAT™cøßÀD2 PdÓ€@v`) T&lýŸØ©IEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR)' pHYs¸Œ¸ŒÌö»/:IDAT™cøÿ¿„ÿ|†àHøçcn```øø¼Œ?ƒðqfÊ<>ÀÏû‘ðü†ãó!æcÁœØD6>©IEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR{ª| pHYs¸Œ¸ŒÌö»/PIDAT™%̱ €0 DÑ/ð%£ELÀŒB™’"ŠÔ®¨Ð#¤§_‰GdÃhm°<ݸ&TV£/(uÓ”tQr|‚•ÿ-½Ó û*û]\ÜIEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDRÑüàÐ pHYs¸Œ¸ŒÌö»/kIDAT™mͱƒ0P âÓ`³•7ð¹dø,à€Ž’"¹KÂGŸ‚Šæ5’NPUÁÉG'A‰/A޽Àûh$R°âÉ5)-™¿¶}Û@–Y]-ÐÑxŒÄtONðS.þ×ù ªUePãõíIEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒÌö»/aIDAT™EÍ¡ €0EÑËá¯ëb$•8Vè,*Y¡ [%|>G\óªÊË)gR®U9Ìö°Þf¥D¥zL¹…É ƒD¢‹Ho’G–€Ë¦}…1Cqíï|?¿»óBÙ½ØpUIEND®B`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR¬êˆ pHYs¸Œ¸ŒÌö»/IDAT™cøÇð‹áÃ# <„çæ1Ø1ü#V¯©P„ã‘IEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRò§± pHYs¸Œ¸ŒÌö»/.IDAT™cøÏðá/ÃO†Ï ÏŽ3œgèC~y È–9Tõ?õü9±{ø|™IEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRò§± pHYs¸Œ¸ŒÌö»/,IDAT™cøÏPϰŸa>Ãy†ç >3|ÃXà¨Üg ºç@õóöOµ™µ¿ÑµIEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR   pHYs¸Œ¸ŒÌö»/1IDAT™cøÿ€ˆþQÃŒ œ`øÀÀð€Ä–|À°ãÆ¿`e$"³q3'RÅ6zIEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒÌö»/IDAT™cøÿÿ^lƒ!58ÌHMFECž^IEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRìn¶ pHYs¸Œ¸ŒÌö»/IDAT™cøÃ@,|Àp€ážaèa˜Ã`ÃPÃð˜W}9üd IEND®B`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR eÚ; pHYs¸Œ¸ŒÌö»/IDAT™cøßÀ@‚âöê+d¥mä%IEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDRè›Q‹ pHYs¸Œ¸ŒÌö»/IDAT™cøÀ@,œÀÅ[[q–¢¿IEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDRÿ¹ÁB pHYs¸Œ¸ŒÌö»/IIDAT™ÌQ @PEÑ=e"ÊÄÌÁ” )SP”ß'?ÔÉñî­õ½°pÁ>Ò’¦ÔàŽ¯‚ñŠKÜbgZÓ(fÑŠ¾žáÀ¢5B×u­IEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR{ª| pHYs¸Œ¸ŒÌö»/8IDAT™cøÿˆ~È1<îc8~Œáü#†~ zÀ Dp"~ ‚¨|ÆÐ~Žáð<†v £—·+¾?ÌÐIEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR ûL pHYs¸Œ¸ŒÌö»/)IDAT™cøÿˆþ|`øð¡áƒÄ†Š ?HE £}7Ê´dñIEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDRÆÞp pHYs¸Œ¸ŒÌö»/MIDAT™M̱ €0Áï,!£8š‚8BV XXfÁÂV°ÄׯçêGùµ%5ä‘8·ÂjÆ3N°ãé¹å’SvI0Pª«Ÿ~±/úöñ´IEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR{ª| pHYs¸Œ¸ŒÌö»/OIDAT™cøÿˆ~È1<àc8ÜÆpþÃýG ó1ìÄðÿÃÿc ÿÏ1ü–cøÁÆðûÃÿ ÿ? ý²ùÏÚûì F!!ñ¬2¸¸|×"IEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDRÆÞp pHYs¸Œ¸ŒÌö»/BIDAT™E̱ €0ÄPo±)=BÆ¡dJJJ‚ |àôÊ“‰  ‰ÄÕÈ)Uv9d“EV™d–,Ïúÿ3PàMýn>C.@„:räIEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR{ª| pHYs¸Œ¸ŒÌö»/AIDAT™cøÿˆ00`‘çÿ¡ 3| Ø71œÄpÿà ú€@öŸö?b˜ÿŒ¡¿á€Ä($‹1Žö ߪIEND®B`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR{ª| pHYs¸Œ¸ŒÌö»/MIDAT™cøÿ„Ž1üçcøSÇðãÃÇ ÿ1£þ =| l ÌM ìø0ÈÑ(âÿÀÐÿˆ¡ÿÃá>†v P£2,§êª[’IEND®B`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDRÆÞp pHYs¸Œ¸ŒÌö»/±KN‡2‡kÏgtÏ+Öø-¼³ÜòÈ%GÞ¤eÿŒ/ÁÎ4ž³IEND®B`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR{ª| pHYs¸Œ¸ŒÌö»/EIDAT™cøÿˆ>Ø1<îc8~Œ¡ÿµŸch>Çp`Ã;†| ÏØÎ71ô`À ÿ†Tï©…„ä,ªƒcó<IEND®B`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDRÿ¹ÁB pHYs¸Œ¸ŒÌö»/KIDAT™cøÿ‡ˆ>Ø0<ŸÃpþ Cÿù' òˆÿµ70P`xÀðÿaøßÃð_†á¿ ߆ÿaè…„=-'|'%óIEND®B`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDRè›Q‹ pHYs¸Œ¸ŒÌö»/IDAT™cøÀ€ '0€À¢÷ŒÑ=tÿàIEND®B`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRìn¶ pHYs¸Œ¸ŒÌö»/%IDAT™cøÃ€ Ÿ0Â'h¢€bG€ð CƆ?gÕ-b: IEND®B`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR)' pHYs¸Œ¸ŒÌö»/CIDAT™cøÿ¿/þÃÀðÿ²ÙþÈ70|¨o`hÊñ±<³ñÁÿñü@uÍ@üˆõýcÀe6\qB⢱IEND®B`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒÌö»/IDAT™cøÿÿ©HÇa O‡ƒyÁOIEND®B`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒÌö»/DIDAT™cøÿÿ>,Äí@|ˆ?Ô`øÃgâ@üÃáÿ†ÿ€ôA Ÿ(/€áP]3P=?Ûã63)Jj‹IEND®B`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR ûL pHYs¸Œ¸ŒÌö»/BIDAT™cøÿˆ040Ì`ØÏÀ`ßÀð‚@èŸß†~~`øüá;ýëúüF?a"H6Â28¨GøIEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR$k` pHYs¸Œ¸ŒÌö»/iIDAT™UÍ;@@E᳈XÃè¦ëRˆR%jQ°{ AÉTЉߣ(¾òÜ‹ÈÉ‹ÅìR2ÉL'#ƒÚ\Ñx?Òè4AÛu<6ÂÃàl™jí)ÜšÁ*–»ß¥ÇÆÁ½›ñ}ü]Œ CBx”L‡IEND®B`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR:Ë[Ó pHYs¸Œ¸ŒÌö»/ZIDAT™eͱ @@à·,"læ®SjFQH¬q¹®’àyÈE¢ùÚ$=R&dfc3'Fc2ªFÔâjKáÄÁB@œì=vvÆê‘¸Ñ#2¼€>ùŸ¼¯[‘ÈS•IEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒÌö»/FIDAT™cøÿÿ30`8øàÃã ÿ á@ñŸ>Àð¨î1HXŽáñ?4 ƒêyøðC;Ä|,QÞEM¤ wIEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR ÷»] pHYs¸Œ¸ŒÌö»/EIDAT™cøÿÿ300ü°g`øøÿÃc >Äý`üƒˆåq`~(©kâÃ@üˆ?üÿÀðG¾h®ÜT 0IÐB³ ]IEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR:Ë[Ó pHYs¸Œ¸ŒÌö»/GIDAT™cøÿÿ˜``°o`xð‡¿áãÿfñD|@Äñ/ñ£…ðDü ;ä0ÔCíÅEà¾^L2«»°IEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR-éË pHYs¸Œ¸ŒÌö»/;IDAT™cøÿÿƒÀ‡? ÿ/@ ø¨b û’8LÝÿPÜÆþ104Í…Ù†hûM‹ÿ†JøIEND®B`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDRÂ+ $ pHYs¸Œ¸ŒÌö»/2IDAT™cøÿÿƒÀ‡? ÿ#ãü?T1ýIü?vüd®<Ä|,=0J«ðyÅIEND®B`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR$k` pHYs¸Œ¸ŒÌö»/KIDAT™cøÿÿ701ü‘obøùÿÃc >Äç¸(Âò80ÿ?þÿ‡€j1´ña >Ä€ø‡ü!† | p;P1¸J–êƒ ¡IEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR>>‹î pHYs¸Œ¸ŒÌö»/1IDAT™cøÿÿÿ0Á ßÀÀðñÿ‡@âQÄ ñÿñ: Ú@Ø6„åX¶ImuYɘIEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR   pHYs¸Œ¸ŒÌö»/IDAT™cøÿ€ˆ€àãòѰ £Šh5¤—‘mIEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR ûL pHYs¸Œ¸ŒÌö»/ IDAT™cøÿˆ~| úùáóö üCš7á7C”øIEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒÌö»/YIDAT™]ͱ€0 @u)3BFÉh—Y2+¤£µ†‚C‘ Š?5– ’(+œ›ø[áÏ¿ ¿ä”Cv©„ee’&]†XÜG/úY; ƦÝïÇÏøBK³­Þ5ÝIEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDRÏ5Ðc pHYs¸Œ¸ŒÌö»/*IDAT™cøÿÿ3È`øøŸR|ˆ@ñ†ÿ00Àì@ÃgæSÞ7?ŠmIEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR7Õ+” pHYs¸Œ¸ŒÌö»/bIDAT™mͱ €0ÐïºÁ9Š‹ )-Áa,,]!1­b!æ¼ ˆÍk˜9!S0–¹ÁšL$¬Í­\„­Îœ_e¼Ð+Ý,LÊ8NYáPv#„å@€/ÿáÅUäÁ×R9IEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR>>‹î pHYs¸Œ¸ŒÌö»/XIDAT™mͱ €@ @Ñ8 ."¸˜p¥àJv®‘Â6‡1ÿ°´ø¯ýâî*•&õ¢b•œ#ôÁÕ ;Áà†2Á<]à•fØ@Á┌oùæ?¼›ãj…1ûaIEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒÌö»/NIDAT™e̱ € áÛÀXÄèh–”ŽÀ0BA)ĆÂðL~é(¾îrHÂpð®Ž*OVäRâT5Neh“Åü×CT&é¦(Ð¶ÎøÏ>UMJ†]öîIEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR-éË pHYs¸Œ¸ŒÌö»/8IDAT™cøÿÿ70<`xð#áã? f`øø ƒÅò?0|lâÿ„ñ f‡˜®dLÞ m·ìIEND®B`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒÌö»/[IDAT™UÍ¡ €0Dá·#tÖª’•H*Ì@*°45ˆ¦ÇDÄ'ï’ø0QzG–çR`WdU27®y~º&á?™`» ‹S÷ä(ÖÕbýÍÌu„*ì3¾¯E\QôíwIEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR$k` pHYs¸Œ¸ŒÌö»/KIDAT™cøÿÿ70ücøðÃŽáã?9þ„Áb@¹?u þ1|dâÃPüˆ?ñ:þ5ã?Çÿl ò 0;Ð0DàI~–&IEND®B`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDRÆÞp pHYs¸Œ¸ŒÌö»/LIDAT™M̱ € EÑk(,Qþhº+áÁšo,ž¢É©Ô½“;éziˆ±FJÀ'TÐ|X;±†Uæ ‰¯ú¹´—+î>ób–IEND®B`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDRÏ5Ðc pHYs¸Œ¸ŒÌö»/%IDAT™cøÿÿƒ€=ÿ†ýýÈøÃÿþáŒó±`ÎEJ5ØÆIEND®B`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDRÑüàÐ pHYs¸Œ¸ŒÌö»/7IDAT™cøÿÿÿ0Á`ßÀÀððÿç ©I<>ÀðB?ÀðCžH0ð`øÇ`µÚ}i,±ÂIEND®B`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDRÕ 0í pHYs¸Œ¸ŒÌö»/PIDAT™cøÿÿ?3Ô30þÿ˜ááÿç`üñÿy†Pü£~>ÿ©·gøcÁÿìêþÉÕ3ü—êçâ^ îâF > ÅÇø9Ä|,…KçdÀð›IEND®B`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR ®-ò! pHYs¸Œ¸ŒÌö»/dIDAT™mͱ € Fáß Qn4L,,a((™PÐbl0ðrZøŠ¯}„©ëk× ¾Ó(à Ue¤S¤kˆ‡` bÞ,öoQ‚#&ª"£ŠF%¦ ºŽïü‡8gaÊŽUNIEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDRËÀ^ pHYs¸Œ¸ŒÌö»/\IDAT™cøÿÿ7þ?Ä= þÛ0ü¨âº†?6þY±$P 3³q;7±"ÿ+øÃðçG à þùdžáó?†ÇÿdŽÿçaàÿÏÀ³ KH¦»!IEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR ÷»] pHYs¸Œ¸ŒÌö»/GIDAT™cøÿÿÃs fþÿ€¡ñÿ†‡ÿO0|ø?ƒá×[0ü©«`øc÷ƒáŸÍ†ÿ’@Ì ÄÍP|œ0þÃPÁ² QþN¦µ\ÈIEND®B`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR ÷»] pHYs¸Œ¸ŒÌö»/ZIDAT™]Í¡ €0Dá'qØ:ÖÀ±®²k‘tV(a€Vþ¢éÑ&`Ÿ{¹C2†¸Y¹9ÎêÈuE¶£Ò›ë»ÐÍF£n†y£øBRáê¢Ac¾ŸR@J:×¹>EIEND®B`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDRò§± pHYs¸Œ¸ŒÌö»/IDAT™ch```hgè'¶30ò%8ìqIEND®B`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDRÿ¹ÁB pHYs¸Œ¸ŒÌö»/FIDAT™%ÌA @PEÑ»e#ÊÆ,EÙŒ¡²E™~©—ç÷Ô,zÑŠ)Ö8c·¸Äú ¼U‡«±ÄŒ¼áBm­†51•÷IEND®B`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR"JC¥v pHYs¸Œ¸ŒÌö»/IDAT™c`d``øÀð‘ ø¨ó?½ÃI¶ž–µIEND®B`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒÌö»/ö3|>Ïðø8Ãóç Ç3œÿÌÐÿ‘aþOù? ö êIDb”<—ùÛÍIEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒÌö»/IDAT™cøÿ¿ž°ˆ]MR?¹gÀsIEND®B`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR"»Hþû pHYs¸Œ¸ŒÌö»/IDAT™cøÇð‹áÃ'†g Ç€°¡áiø÷?ä̪|IEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR"¨Ÿ¾ pHYs¸Œ¸ŒÌö»/6IDAT™cøÿz Çpža~ý?ÆðŸáÃác ýÇä!¨Ÿ¡Ïá`sÆ5$í# IEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR"zÏ´W pHYs¸Œ¸ŒÌö»/CIDAT™cøÿÿÃa fâǸp33`xTàÀðàÃÃ? Aø:vŠƒ0PýÏ >`xÁ~€d ³~Oñ³ÔÇ5IEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR "¬jn2 pHYs¸Œ¸ŒÌö»/2IDAT™cøÿƒúÁÁð¸áü†þ ó_0Èÿ@ ~0êÿÁÐþƒáà†xÌMÈ8g‡À¸IEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒÌö»/?IDAT™cøÿÿÃÿ@|ˆàÆ?0<ª9TÛäÏby4Ì y nð€áðŒ ,ÀvàÇØ.UoMÕsIEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR"G]Õ1 pHYs¸Œ¸ŒÌö»/6IDAT™cøÿ‡ú!Ãð¹‡áø†þ# ó0È?! ÿEü`Ôþ…áà†<8ÍùÿÁ©5ès#S#IEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR "¡tu pHYs¸Œ¸ŒÌö»/0IDAT™cøÿ€áÃ†Ï ¾?`xþ€á8:ÀÀ ÀàŽ*ˆ1<`ø5&5ò[œ1IEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒÌö»/TIDAT™…Ë¡ €0DÑO¤£°Ú9pŒÀ*M•]¡ ¢š ¨+'ëÏ\þÑ»øÓ‚x6¨rû5¨bÍâ`xTð€áá†Ç ü‡8ÌPÃÀ²ƒðS_g;IEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR "¥ÎH pHYs¸Œ¸ŒÌö»/%IDAT™cøßÀDŸ‚Ñg0‚~704ƒÑc"üoÀ…^Ý.À$~$hIEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR"JC¥v pHYs¸Œ¸ŒÌö»/&IDAT™cøÏðŸá'à üÉð ÿ2ÂDÀÏ ž3ðCÊ 3‡dIEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒÌö»/IIDAT™cøÿÿÃc n†ÒXñŸ†Ç?€ø#ýˆÏ±ü†GõØi û1?·ña ~Ä€ø‡C È£VU:ÞtžIEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR "¥ÎH pHYs¸Œ¸ŒÌö»/IDAT™cøßÀð¸¡LR‚€h9.|7±“ƒIEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR"‹ÄïÚ pHYs¸Œ¸ŒÌö»/3IDAT™cøÿÿÿb‰ßÍ043¨``*œSÁððƒÃãÿÈ!䈶D6r3l,¬IEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒÌö»/,IDAT™cøÿÿ!ü»ù3㦂 $0<á?Äa†‚æ1<–S—Ðon‹IEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒÌö»/7IDAT™cøÿŸú!Ïð¸áøc†þ‡ ýä?0Èÿ@ ~ ú oÿÌpð8Ãyœæüÿ,q81Sl IEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR"• ßi pHYs¸Œ¸ŒÌö»/AIDAT™cøÿÿ!ü»ñC3悆þc`x Âÿ‘±P „ÀøáŸ >1û ~ÜðÿÐQíë¹kIEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒÌö»/Ë£a~(É·?l`8<±áƒ!PÿG¸ÌHƒ„í½–IEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR "¬jn2 pHYs¸Œ¸ŒÌö»/(IDAT™cøÿƒúÝÁÐÌÀÐÄÀðàÃà àC 8ÍùÿìŠ<>8küðIEND®B`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR "C¨ pHYs¸Œ¸ŒÌö»/9IDAT™cøÿzPÀp^€aþùPÄü¡Á€á€Ã†ÿ ö `4A΀·9ÿ?óc1GÏâÐIEND®B`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDR "¡tu pHYs¸Œ¸ŒÌö»/-IDAT™cøÿ€Ž~?`xø€á1z ÀÐÀÀÀ €"ˆ†‚•}H`@6 k8ˆOèmáIEND®B`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR"wÑÄ pHYs¸Œ¸ŒÌö»/1IDAT™cøÿÿ!üûCó‡æ ÿ0<ªÿÀRÀðC† ù@ ±V(Ê´:ÆIEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR"zÏ´W pHYs¸Œ¸ŒÌö»/GIDAT™cøÿÿ!\÷½áÃá?ÿâŸþ>Àðñó†@üã;??Àð'ˆýXþÃ?(þoOØ| £dTçò¨Â4IEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR"†ÚŸ pHYs¸Œ¸ŒÌö»/RIDAT™cøÿÿÿb †Ÿ?€Ä†Ã?ÿ%0<þ&þ<`xü æÃÇ'µ@âL%8gý€áÇ=c 1OHìöìþØ÷‰zAŠåýfr\êLßßIEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR"‘øT pHYs¸Œ¸ŒÌö»/LIDAT™cøÿ¿~ÄÍ?n`øø¼áÃû†÷þȱ}Ã?²ÿö70ülo`ø|¨çpÃñ‡ üšıöLéáûΑIEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR"zÏ´W pHYs¸Œ¸ŒÌö»/TIDAT™cøÿÿ!¼ï{ÆÃ0<áŸñÇÏ>ñï@üüß| öbþ ÿä!ø¿=×ù0 4óïâf nÿu2Q¤Ø{l¡IEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒÌö»/@IDAT™u̱ EÁg£M©´’ÄF•ZG‚oÉÕ‡ÄO_$CiÔL ("˵lÇôL1m“aù>ÒÁ„:´óîˆÊIEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR"TЕŠpHYs¸Œ¸ŒÌö»/ IDAT™cøÃð„áCV(Ã`ÄØåz€º0üA–FE³ÿâIEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR"]a5¿ pHYs¸Œ¸ŒÌö»/IDAT™c8À@*8€oD+\ ¤IEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR"»Hþû pHYs¸Œ¸ŒÌö»/!IDAT™cøÇ0¡áVøŒáÃrÇ€ºäþ )Q þ7`IEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR"~:dj pHYs¸Œ¸ŒÌö»/IDAT™cøÿŸHtð܆}’ öÍ õDë#®T?µQþÞµIEND®B`‚leptonica-1.70/prog/fonts/chars-18.pa0000444000175000017500000005172112256617134015470 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRFéªù pHYsb&2IDAT•cøÿÿÃ(ÆÀé¿õÏ„UIEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR F6äƒ pHYs¸Œ¸ŒÌö»/]„2]‡Ô!ÓB3Q™>ªÝ›Ã–×åegöfm6B|¡µ®ÔÎS¥…‡‹UéJ¿–\;/ŸÞŸu?Хʤ5IEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR9F^< pHYs¸Œ¸ŒÌö»/ÃIDAT(‘½Ñ± à PR¹ôa‘H^,‘\¸ôJA^ÃÈ àŽqùp–‹Ô¡z ÇýÏK]¡ ,AVÉz£C,·&bĈpÄ$A[A÷¥ÁÜ@_0ÁI >qBZÔ×;¢uŠ5O½W$eÜJ Nzbi0ãm¨¾B'Ýq òŒ=_ÌŠõ‚ *,±7Ø,”œYrVâHÖOã²”hF"ÝKgYJVšà8ñçwÿwÇÆmHœéIEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR5FD+á² pHYs¸Œ¸ŒÌö»/ÈIDAT(‘µÑ1n! Ð?¢`;ŽÀ5RDškmÒäXŒö"ì (]Œp>˜)¢M»4OÆß:àÕšÌM„i_žw?•nÖåSÍãÅð×~iïç>-²liiyê±t˰Œfc™Öq?ÛDa¿yʧז~оK­o*´*¦‡æË4üÖ²›5J°*,}Ó¡8óÜžÓ>ݸ°‡™=åK ù2Iè®Q"Ìáµ€§9uS dææ0±â`÷;÷ÂNøïßÞê/?cuÞ«T)~IEND®B`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDRFÔ8˜} pHYs¸Œ¸ŒÌö»/=IDAT™cøÿ‡„0üg`øD,PôƒŒd@èƒ Ã‡zð‡áᆃÿahÿÃÀÿ‡a?Dû BÆZ}“R ]IEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRFéªù pHYs¸Œ¸ŒÌö»/pIDAT•¥Ð± €0…á KGÈ(º™H ׺à"Š ¤Lr¾ó±³øiÂûC"LÒ&’J$gÆý€ "ô005¨Á”‘)«™iWbØ%X>t?D÷~39–g‡nÊN·ª:Úö¬E›dõÎÓ›µ½Üq㾕ËÏ3lIEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRFéªù pHYs¸Œ¸ŒÌö»/lIDAT•¥Ð± €0 @K”!£ÀfQDÁ¬b”E`ƒÐ¥@„·òt×Úÿ/µª,à`†;dTÊ r¯r¹¦öÐÁ‘VPÚÌø–üðqs{üUæˆÌ61«aöË·.Ö©„Öó`çÄ °Å «–{ÆY”IEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDRFþˆiÒ pHYs¸Œ¸ŒÌö»/`IDAT•ÍÍÁ €0ÐÄAœE¤®åÍ£#¨|o¥1*¨#xx>!$ñØ$ЪËhƒ´F¸™ÀBô5aeÆî#t#•Éúæî8)Ôïd²sïÝäúù÷_Jȹ?V‰x?IEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR&Fˆ²ÛY pHYs¸Œ¸ŒÌö»/IDAT•cøhO¶Ó”Ähm/Œ¤i蘨8ˆ4^LàIEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRF;úóC pHYs¸Œ¸ŒÌö»/=IDAT™cøÿa°  ÿþÃbcøÃB?ä@èƒÇ:zðá 5ÿchÿÇÀÿa?›š|Î*IEND®B`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDRFàAYa pHYs¸Œ¸ŒÌö»/IDAT•cøÿÿÃ`ÀÀ˜Œ€xÝkðÃÇ´ <IEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR F6äƒ pHYs¸Œ¸ŒÌö»/IDAT™cøßÀ0xÐÁ††dÐ$Å]ßaE{ÈIEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR F…¬« pHYs¸Œ¸ŒÌö»/yIDAT•uб Å CÑt”ŒÀ(ŒFAÁ\ˆE`ƒ”(‰ïÓ©¾%ŸÚòq+‡Úa@… 8ðâúbQL#‰Ó¸_: ¨Ð C·ñâ2‚XFÓHâü`s‡d(^\Fˈbéå4x£Ã€ ò¦€ÿ»î?„ëôo‚fIMIEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnÀ pHYs¸Œ¸ŒÌö»/„IDAT•µÐ±à …á磠ôŒÂhˆs‘µðe²AJ ERLrvP|%§÷ƒåN6§V¨„H¾Bmc÷„–†øLìDV+s&<Ì]¾1Ë4›ÛG|­€û“t¸˜ùìûª}Z¦ws“Eéð&#ëÞ8¤@ ]kø¦e€$•`­Š»–ü/§EõÿÄ,IIEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDRFú}¹ï pHYs¸Œ¸ŒÌö»/EIDAT•cøÿÿÿ$â_=ø"€ˆ ñH| @‚$Á"äÀÕ Yâ€ý†ã ü  zOúgØ0>|d|IEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR"FY{# pHYs¸Œ¸ŒÌö»/IDAT•­Ð± Ã0 À7\¨ÔE£9€‹¬Å EJ¯ # ¨T!ˆ!ß…ãÀe¾¸î>¡ÁÉ] ffA&A¢ ï& ¦–Q°i5ßÚh¯“j®_ê•£ÛwÃa‹‡u¢É-»³›yùƒ.ôN¹¢OnKnÝÂ}Ò…]+™V2­¤ÜnÉTè ¿¹øäü–NÔkŠ…IEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR"FY{# pHYs¸Œ¸ŒÌö»/¢IDAT•­Ð1Â0 …áW1dìz”ôf-b`ä\åU =‘XÖ!ª±Ý¡…‰ ß[¿ ÑG|˜ƒ9¢Q€–È-͘ƒ*E}I=YvŠútçº>l.ífíÜh–ÁÌÞs4“5¨ö“°Ù97ê}o[{“«ØL¿íÝN%®:E\D&÷äågâæÍ“×Ò;³V%4bÚÅªîøºä|Lt ät8úÈIEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR#Fn› pHYs¸Œ¸ŒÌö»/sIDAT•­Ð!€0 Ð&‹Û5p\ ·+ÍíKvÍU,k'Ú _<ÑüT|h=Z²Î$²ÉˆAéØK¹°+YÙ²‹ˆdVF¥g­Òˆu#Ë!b3•¾ëàÊPg\7¿›h“ì¦nâ?÷%ÿð9ÝuxÜ+âIEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnÀ pHYs¸Œ¸ŒÌö»/†IDAT•­Ð± ÂP Ћ(RfFÉhß%#° (EÖøÙà—AŠþqv"ŠDC\¼Êò j ßΉE›ø¸îÿomÜ‚^Îq¿ O²Ënš=U¹OÑÖVáÞwæßÚÆž|(:¼‘ƒáJ^ÞŽdgXÕm⢞9gxó‚V.º±ýäA¾`ßžÄr˜IEND®B`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnÀ pHYs¸Œ¸ŒÌö»/“IDAT•­Ð» !ÐA„W¥Ð˜%8]c¸Sá<ƒdü“3¼v™] ž„o²;Y7™£4ºíN6/k%Êôjƒ5˜%š»nð W¸¨ýf6§ÖÉâÍTFõ/>üŸoÈã ¤yÒ€IEND®B`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR!FjnÀ pHYs¸Œ¸ŒÌö»/®IDAT•­Ð± à …ᇈDé< +eÎráµ°¼ˆGpIx¹»TN”._Ç .ÁÍÍŠ¢Y0Ò5 úÜ“ å¡^…Ñ]'¹¸» þ²ðpuÍÜÔ™:眨“Ï4fšÞØðÔÛ;‚:à%À»'»º“$ëA´ž¬¤kèìêA=‡ÕdV`sy~+7£7¯îBkÞéÍôæ2´ùš[¶Zû¥áµ”ôù“ÿñÇê ìIEND®B`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR F…¬« pHYs¸Œ¸ŒÌö»/ŽIDAT•б Ã0 À\°ÔÅ£I‚³7Ñ*UbžŽaAª°¸öÿ ãáƒIH˜Òv ŠžfD³å˜à4ÛœŠâT³òf3;ŽŸ„›Œ|äDŽ}@“VÐ)˜ˆ º±sÍ.–0üj‡™ð‡ Œø@è‡Ã;†@TÇðáà ÿ1þÇÐü¡ýƒ<Âý sާQ7IEND®B`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR&E&©÷ pHYs¸Œ¸ŒÌö»/}IDAT•µÁ € E?ñÀÅÄ\ÄÄÑd4FqŽõ·U™^HóóÚái˜ËbÌFÀʰ²2­dÇAÖ ù;*ÓNv\d êÉQ‰l¸È²¨(o¦;?iÃ"ãíuÏx^ݼI=l%¿ß{yßw†ji±Ù$¯cf×û.ï^eÆï=Å­+2ÈãXIEND®B`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR&E&©÷ pHYs¸Œ¸ŒÌö»/IDAT•cø'‰ f“©J^/(Y¸ç)IEND®B`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR%Eåô pHYs¸Œ¸ŒÌö»/vIDAT•µÐ1ÀÐõÒiÓ9J®•Ž£9JŽ Tx3û"¹Åo0;È=V•uF¨¥¢0{X,lÂ[cc˜,v‰HK^V»œK¼Þ`Ì¥šöy^ïj35”À\?;hí–ü×ÙpŒû½+®ú½“!(}þ”IEND®B`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDRE“+  pHYs¸Œ¸ŒÌö»/‡IDAT••Ͻ ƒP à{J‘’`“¬Â& UJFÈ*¥` @I¸Ü½H(ä§Hó¹°ì³A2ðÂå˜Q“ªÃ‚#Ñ g.7  æÍ~¥QhEvFg’Ñz®G±(óIL gøŒÁÜÍÕTõž~cÜÿñFév&‰Ÿ”Æ3òç–?xámÝ®¡4R3IEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR4E-}ø" pHYs¸Œ¸ŒÌö»/ôIDAT(‘µÑ±mÃ0…á'°`IM`® ‚p%•)SB -‘ad¨ñÔ—ŽAú‘ŠI5_¥;ÜO”ö ~›à›+tèª €§Ò•ÉÒ`‹:•’5íø»dMo‚dh ¶Ž#ÄWH]—ì%é’z*Ýš{le};œÓÄÝKVùP箚¾¦iä©ÍªžºSÍyfué§>iî§ÑœŽXª±ÉóKðb¿Á» ¶àïvÜÄÝí"Ø£û¼°CH—¼rÅï=âÜãîáìÐú°KQt>úÕneu,Q»ê£kdoG3mï0A5öÏwûY±V£xý•ÔIEND®B`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR8E7A¬ pHYs¸Œ¸ŒÌö»/£IDAT(‘µÑ½ à àg¹pÉxVò$•×rä"kÄò¤£@û±#ŒÒæ(¾‰Ç;TîÆûá­þb†»:ªi´ê¤ÆÉ¨Q q¸øNê–zqÏêš;ñYÔù+DÃÁTÏÚ²°™t¬+/6UZ2úD† •KÉÙ­²'WúáiGÎÔD+èiìÐ#³ iY‡tE‹0ð=C{‰púcoÿôw¼ŒªªYJ«IEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR)Eÿ-òz pHYs¸Œ¸ŒÌö»/„IDAT•µÐ± ! Ð(RÞŒÂhñh7 #PR ãO¤C×\ŠÐ¼ûÛ†Î'ر Þ‚ÓÈ‚T#j1FÔörú":ã9{ùq¥%§fçÔɘ# ‘@À/`]e³Æ„G¿À‘ŸÙ»•®‹­*G*Éo6çlmÝ ¯käÛåÿÀcáÚ»vyIEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR0E$–XX pHYs¸Œ¸ŒÌö»/“IDAT•­Ñ± à Ð(\2‚Ga4“Í< Ù€È âçûB",¥4ÍœNwú€vð£Ãd`Ø ÀØuË‘|€i#Ÿ SÛ Ým1ê ˆe5ò Ú ýÊf¤+œÁ=üg¾+­F£,3ÕÍŸÏ™ÔXÁÝ[JYEEW•§‡Ê@ÐKÒ>¢ÀOp;oCTRh¬J\­IEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR6E)ˆ( pHYs¸Œ¸ŒÌö»/IDAT(‘µÑÁ €0 …á” ^ApÁÅ;ZGé{ÆhžbU¼ÙË×[“¿$ûaº»z5n—‰‰dêT/k¦EÍÞdg Á0š±7ÓakÎMi®¾Õqþ±*}¼ß”žs·¥é¶gÄþ=ÐgŒnº†uÀùÒ¿3ÝÛýì k)Þ<•IEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR)Eÿ-òz pHYs¸Œ¸ŒÌö»/]IDAT•­ÑË €@PÌfk”¶­ØÞö@Yñ ‰sy'È=L‘-ÎÀT!ˆ¡˜œå+xf¼FÒ±fg Z6 7«ß4Û ð‘–1ÛéŒÊÔü¬Hð'+bŸÐØ2Œ)IEND®B`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR&E&©÷ pHYs¸Œ¸ŒÌö»/OIDAT•cøIdpLe~00ücþÿ¿L!šüƒ—´ÁNþC"ÿI  ÐHæÿ?0TþÃa7Nþa‘? aÅ '1C’bÊþcK³ˆ!IEND®B`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR5E¿“ pHYs¸Œ¸ŒÌö»/˜IDAT(‘µÑ± Ä Ð(¸ŽXƒ.kÑ…Ñ…()ÄÆD®¾Ð<ÉÂØâcÌSñµÓ tȦ¨ê1Š¥™º0µRq{@×d hfiź,n—Ÿá¹éöÜ¿Ž]üÛǼ„Ï2?zDÞ3{Ù÷©ó­‹«ÞmJì1:1Scò3ŠÎÿM±@qplÞr{Õ z±}Qª~IEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR;EÜv£¯ pHYs¸Œ¸ŒÌö»/KIDAT(‘cø0 Ìÿ0€”q€Aþÿ?† A*ø0üc2>È Ø'؃ą”1à‘ò‡رŠžè¦=B›7$c$¡IEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDREfÕ+Ï pHYs¸Œ¸ŒÌö»/(IDAT•cøÿÿ ÃÀ†?Œþ1- ró„?ýF€;ÙŒî ½IEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDREx| pHYs¸Œ¸ŒÌö»/?IDAT•Õб € @ÑŸ0£0ÚÙYºÆ¥ì¾‚#P¼*¿ÃKÁ£a¹º§g:%.©Uh)Rý¢»™‡_LIEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR4E-}ø" pHYs¸Œ¸ŒÌö»/¬IDAT(‘µÑ½ à à#”²+e°²Ù„^ILwJ‘ÔqóIF¼Ÿs†o?;î+âv¸u —_&Ú2­“žô t´Gj‰¶L뤧ôt]ߎH{¢–i›ô%Ÿ2Л§pú݇êÕ¯êgêßúCó@óBóíSµ_Ó¾«÷uÚÊÊ Ê­(Çz(Ç \íœ; }uxìwX;l'ðó^ö ŸfhúqÒøIEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR*EIy pHYs¸Œ¸ŒÌö»/@IDAT•cøP)f$êƒ<ˆúÖûǪ¸Ö pHYs¸Œ¸ŒÌö»/´IDAT(‘µÑ1!Ð!”XZ¹‚7ØÒc¹‰…×¢ó’‚°~àÏÆdm†—?“Ùfe9B,Ž((CD3.nÒÆ«gÀ ¿dÞáOœq¶ÄÅ(„¸*BX"…'’#²¢X¢…½Ùm¢'MxÑÙEhBDO`ĪˆAá‰äˆl‰bˆºCˆ&÷‰M±*â7Zsjs¤/¥(ªãr›â÷Þÿ† ¦:ƒs¼IEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR7EÆJC! pHYs¸Œ¸ŒÌö»/¶IDAT(‘µÑAƒ ЯÎÈNn 7‘›)^ŒÞ„#°ÌÂþÀÔê¾eÁÛ ùA©'ã«ÀV=:5pTLñ–FW’¡/úÐ*:°²¡~ÃaiX! 3RuBr4MˆÕ±)#Â~µo=üÇrMýÛ¯Ô>¹?õWÏŒð®nN:Ÿp®êŒ¨ó§É4EDsŠGG_5¹Rž¼µ±æÊYs¶ÈBÓPâ®ùã܇©û p·½ýÕ74Tu‡E8UIEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR)Eÿ-òz pHYs¸Œ¸ŒÌö»/jIDAT•Íѱ €0 À\PfFa4Ìf%#PRD1‰í"‘(((psÕË/Ò‡1Ó&Ø©’F%¹H©AL´Ø@zÇ'Ã÷ÅKD%¯Œ]é­+Q,÷JP.øuiàñ_r'z"Í!ÕsÝIEND®B`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR7EÆJC! pHYs¸Œ¸ŒÌö»/âIDAT(‘­Ò1n„0ÐHÐÁ à&øf¬W{1G{€½Âti]NaÙùc³ ‘R$^cã™?F©OÆŠ­êÑ™€£:¿Qq%N4på@ï¶‹ïÀí8'꤅†ºQY«3¢£q†TǦŽ·«=¼™.–«¬©•ûÚ9¹ÿÖÿeá]3ürF°þ”}UWˆõ¯;¢©å"Ôr’ŒÔÑKŽ>øµƒ-WËw)ZóîŠÜ,«µÍcªó¸6·Ïs~,ÑÌXÎ9ÕØöq=ìå©è}œí ú3†±Ýƒ°6Óþ¾_ÿb_ˆ& IEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR0E$–XX pHYs¸Œ¸ŒÌö»/IDAT•­Ñ± ! Ð((Qn4ÈfŒÂ”|“ˆ“R¤Í…ýðàÉ:› È'èlÃJ3d€È“Oòì:å¥h‚hÞp¤{RIq‘ŒOr EoÕ‘¶±¤kÁ‘7Q{^$kBñ'U‡h:R7'ŸMì·_'9`…6ÓªÛœÝ@ðõþÉ \)r«Â´ÆIEND®B`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR$E ÓyÊ pHYs¸Œ¸ŒÌö»/¢IDAT•­Ð± ƒ0ÐC”°+°+±H)Rf„¬B”EÈ¿t¸Üÿ9(m\<ɲuÿlPËð1a”3* †­Ú0 µœ Ös1,#MÒ}éðòcyȳŗØÝ© KwF¢×,xŸ´÷ ÕŠÚt Hh pHYs¸Œ¸ŒÌö»/BIDAT•cøP)öÿÿ @€¡…êÿÀþ?œš§êÿOÀKýQF*Õ`¦äAÔ†z…-¨I«VRcO–ë•IEND®B`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR8E7A¬ pHYs¸Œ¸ŒÌö»/pIDAT(‘íѱ €0 ÀRP2BFÉhAb±H,@Gñ¼  j:\ø$»ûëà)àY€ËŒ «Gqú®›7SµüÖÉáðظþ2ƒû:PO÷IÑÈȘ0ü?Äð¿á?Ã>†| ä@èÙ1|°cxDu `¨ˆþ1°ÿcØÑ>¨§rˆÎ/HëˆIEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR L$7ˆx pHYs¸Œ¸ŒÌö»/uIDAT•½Ð!€0 п p`q;Ê®… ÇêQJØÉ ²ò!A°Pñš4mÓÆÀ×hMP60' ‡™MÓ€Õâ‰'Ésì… "$£õH%k1í‰-ãMñ$^8“ƒÉc°†t\%HÄñ.-ÉVÿðÆrób6Ç«•IEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒÌö»/‡IDAT•½Ð± ƒ@ ÐHÀ&I&D“2+eØàÊ‹dÙñ?ŠDBJ—¸x…‹oëÃ|v§©£øpßÈO”†® 3Fè!vx¸'‹5¤°äV&%¤1-™à2çèüÕå`N³ú­†lO%›Î¼•Ÿl..7ŠÎ½bð–"&ÅS 6¹÷ùo_z @A š–IEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDRL¹:ð pHYs¸Œ¸ŒÌö»/jIDAT•½Ð1Â0DÑoQÄ-Gáh¶Dñ’Žc˜¸ÜÂò°FJ"ºÐ¼rô5H2Ǹ (;}2h×±¤uP伤'ËÆ} ìœ~¾É;É™o+åìÔɱ ™‘>ð´Oä.‘½¯óà™´±JIEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7àÈŒ pHYs¸Œ¸ŒÌö»/€IDAT•ÅÐ1 Ã0 ÐoZ2ôZÉMtŒI.4Ð¥C¡½ÁXü!v Ó³IfÃÛq#üs{0+*Á²ž¬öÔÕš¥dð*Gyò­óææî7ã׆‹§¼ôÜcèM(É¢ÎMÛrd}_8¡!2 ˜LšÇOþà Z%¦õËÌ"IEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR L$7ˆx pHYs¸Œ¸ŒÌö»/qIDAT•µÐ1 Ä …á_,,sâÑ4äb9а° D|Y’m¶Í+¾bà1à oÓ½Qɨ¡Ezì G–‡§Jž]r_Vi}(¸‡;nçL™‹)?²±§›uRƒ>4§¬hGV÷þK,ÐØö^ jMtIEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDRL_J´ pHYs¸Œ¸ŒÌö»/IIDAT•cøÿÿ0Ãÿÿ ÿÿñ(þøáÿã? ÿÿgøßÄüü ÿ!„˜>qTO%üƒè{0þô•1˜ ©x¢ÕIEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒÌö»/­IDAT•ÅÏ1à П"…-Ü Ü$Ü,4êŲõуej[©*Uê\†7€±¿1ôþ OfCQïȉ g TXíU0£ÕmŒÉ=çoj½ŒZ_Ü,IÐë Ö•›Žà²ùôTÉ”lr1Éí~Óýµ“‹¤®ÖMÕ-°@Ò¸/ö«{rž-•zè×·áËå#¯—ZI›Ù7ëÐvëvzN‘¢o‘m Ty\FﵑqIEND®B`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒÌö»/aIDAT(‘ÍÑÍ À àW,õØ¥£Õ[×rÇð I_‚º@1—ÈZTèã´èä#)?ÀQ÷1 n#ã"ÈžÊIX16mFнÙ@£•PÁC˜Ì¬Ã ñ Zs¬{çIEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDRLH1Ú} pHYs¸Œ¸ŒÌö»/;IDAT•cøÿÿ2þ'€áÿ†ì¨$öÏU-V|¨¨ö3@ñ~ˆ~z`[a€ [IÇu—¢—Nú¢ÂIEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRLšaÐ% pHYs¸Œ¸ŒÌö»/NIDAT™cøÿÚþ31üc€¢ÿ îÿc (jцÿ ?€H}Q1ñ1ü"9†?v ?êþ10þchÿšGoñ+aIEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒÌö»/‰IDAT•½Ð± Â0…áEŠ)P¼Ù„l‚€•Â&Á¥ +!ï' €‹¯8ÛwO§m?«¶§-ÑêËO¥þÒÜÛ„ËdïÔƒ]£­ƒ-7›øõÂF{ì EEJËmc{ñ^ô™G»Ð91%3±´Ll˜.’ˆTó•„Òv*aËÚÏX°vò&'ûü·oÇ!4F¤½IIEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDRLH1Ú} pHYs¸Œ¸ŒÌö»/'IDAT•cøÿÿÃÿþ ?ø00@1ˆýgˆâì@?@ØoÔÅz]˜͸¶IEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR@LõÐŒ pHYs¸Œ¸ŒÌö»/sIDAT(‘Õѱ ƒP „áQ<Š(!‹ ½•R¦‚Œæ ²‚G |â°¢H¡Oáê»+®1úgÂk¹É«ØÌ{aÂn£®°’%xЉ6TîÊZž9Ñ+Šž‰¢Åä󦜎7ÚiÑŠÂa¾øóã~ÂÄïÍת$IEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒÌö»/[IDAT(‘ÍÐÁ €0ÐojäèÅÑìh½¹cp ˜4q¸¼ŸÀåÏaÔà Œ"2˜&nÆ +8€ÎнÏ3Nb“l.Is¡MhaÅÐæÖQÄ€EÏÿy¹HmrA‡IEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR%LÂC< pHYs¸Œ¸ŒÌö»/zIDAT•ÅÐ!à Fá—‰H6.׈ãZqЛћpä †íÒ–N]dV|úý‹Ú 7Xéfv3²m–Y¨®!ˆWNJÐx’ƒ¦ƒ¬š7Ò°¬<†ò¦a½’Ÿ+ñß ²}M^åèkØ»Åi¶¶EŸÖ9©Õ6pÖþ½åžOv_Uü9(-MúTIEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7àÈŒ pHYs¸Œ¸ŒÌö»/IDAT•Åϱ Ã@ …ág®‹p£x4\d­óYÁ#¸¼Bܳt$`H“&DŇñ#0ðY…hºƒ(º`ÈÀ=–zËE`#k‚ 47± 0!]}»\,_¸}¸^|t¥«aÓ(ZŽzaàAwZCH7»#&Wýµ~û{³/O‘Ä€èUtIEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR'LÆë“ pHYs¸Œ¸ŒÌö»/{IDAT•Åб „0 Ð((³Ç$d& 9±lb6 ¤ˆ0ߦ9‰†æ„e½Ê¶¾ exAvÝÑRèTÌ H(Qç„}TIØÔwu÷ëN7ëV7¯kù×Ñ2ÌQ3ýX* ¥cžz˜ g ª¦DÓwÿïš[ÊÇ]žÆn-ÙÔÒE—IEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDRL[暉 pHYs¸Œ¸ŒÌö»/NIDAT•cøÿÿÿZç?00üã?ÀÀp€¿ˆø€øøÃQ$ÿ æ Øÿƒ‰ øéDü`î?r” K ïéq&%f;IEND®B`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDRLVøêÎ pHYs¸Œ¸ŒÌö»/zIDAT•µÐ± Â0…á?ÊdVȬ” 0ÊŒUŒXÄlp¥ +Ç;\‘>Íלü?ɸ»q6ùbì`ÔÀîÉøx1^^w°zûGÏAúqyPª0ª© ž˜ÑmÒˆhjóv`ê<½ÎÕmÑPÖFDéùÛù_"¾6ÒúÓ­IEND®B`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDRLAÚz pHYs¸Œ¸ŒÌö»/KIDAT•cøÿÿ^üˆÏÿaøÇÿ‡áÿ! `øÀÀÀÐÀ, 2Dë#³1ó†?@{þ1ð± Æÿjðût ÎÔ¬×*ÕzÎIEND®B`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR+LÜ×s pHYs¸Œ¸ŒÌö»/_IDAT(‘Íл €0PGîI FC4YãF LÅ䃀 ˆ›×¸° •úÀKÞ¨DƒQ–…—HE>•ß¹·„ÆYêêätd„u¬`jÌCfÃ@»‹…ÀžÿrõšlŽ•`rxIEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7àÈŒ pHYs¸Œ¸ŒÌö»/vIDAT•Åб €0Ð/‚–!£d´èŽà*‚…¥+¶ŠMŠó¼ÓàŸÇ/?º ¸{M©F0” w‹˜uH%EÕƒÔ‚½6tdŠkvq›8±»ÅŽ ¶¿5Vtl¬TÏ&ªlÖbûqüøË'/ÀJÔçu;IEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR=Lög‚ pHYs¸Œ¸ŒÌö»/±IDAT(‘ÕÑ1 1ÐYRlÄä vk•kY,d÷î•‚^cÅ ¤LòÍL¢¸¥•8LñøÅÀgu"ý²cÙä‘À2Bh±ž(jA¤TÓ î‘rnX5Šq)—|›àZÑ1ÁY f, Z`:˜‚ følçl+¦ŠÑúì ÖÑùq‹¡ #Ž‚/£kˆ qÿ‚ôH‚RŒK~B#¿¡Ù[üúƒßã "—¡ÅaIEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR$L-Ü( pHYs¸Œ¸ŒÌö»/’IDAT•Åб à Ð\PâLÀéX)X2R ¯…äEðWº@\þ]vH(^q:}>@y¿÷.fÍ*+j2{Ô‹ó¨§`,úÌ ÷ƒ&Š™iÝ mÛn>-­¯¦<ÜÅd_}2Ý\øN³q¯n™§Xþ!v×q›iDvÈcaŸ2ƒw¦²+}×úÓ€àþë'ÝVËDé-¸åIEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR(L7àÈŒ pHYs¸Œ¸ŒÌö»/˜IDAT•Åн Ã0à3 ¸ ÑÑ(M†.=BV¤ð6 r§Bèr? ò¹âãUÇòÁ¿š›Åb!Y¬òÏ⡌X›U„jš‰z 䀻ø&§æJF5ÌäÖ«ŽLêÝ“Y½‰×@–‹¼¶ªƒ,WÍɇ8Ÿ\N>E×­¾[B7c÷`?;»¾ØhÄQ´ìä$ó'¿5N>šÉ„“*IEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR"L ÂXE pHYs¸Œ¸ŒÌö»/uIDAT•Åб €0@#Š”QÈfd´…‚hRD o‹€/®³e=†Ÿá{ €ôv ŽÛ>ÎÑfh´D6ì µUn4«´O´Í2Ði‘ûBm•ÍZÅ&x´¥z´û6éÑ–àÑšµÿú¤¼uP0_˦€¾IEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDRLLÄ @ pHYs¸Œ¸ŒÌö»/GIDAT™cøÿŸáÿC†ÿÍ ÿÙþñƒ‘<Ãj ö ô¡žáÁöÿ ÿƒØÁ?öT0èN kÿóƒ\rÿ_° æÐ`¶£óêIEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDRLb+Ò pHYs¸Œ¸ŒÌö»/IDAT™cøÀ@OðX+¶¡Xý½IEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDRLLÄ @ pHYs¸Œ¸ŒÌö»/BIDAT™cøÿŸ¡ý?ÃÁÿ þ3|¨¡@dOôG„þñ3üggøÿDÙAª˜ÿìÚ`—ÝÏÿŸá?v g>Àö¥IEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR&L))ø? pHYs¸Œ¸ŒÌö»/OIDAT•cø†ÉþÿÿïÃûÿ- øÿó0<øÁü‡áà?† †æÿ 6 íÿ0ÔåþUóÿÿÏü‡aþ`p?õIVdXc6“IEND®B`‚leptonica-1.70/prog/fonts/chars-4.pa0000444000175000017500000003257512256617134015411 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRëMS pHYsb&2 IDAT™cøÀ€ÓŠð6XIEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDRæS#W pHYs¸Œ¸ŒÌö»/IDAT™ch`@€ <„ 1};ÞÁGóGIEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒÌö»/IDAT™cÈ`H`ÈÂØ ž¾ A†Ÿ‰EIEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/IDAT™cxË‚gN2Ü’³p2Ãf†ÿ œi °ª5&2IEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/$IDAT™cøÎpa+nghghdøÀð ·002 ¡2}ªIEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒÌö»/IDAT™cxÀpaÆ84ò7Å.q?úIEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒÌö»/IDAT™c0`ØÀpá>@‚€b6£^ ¨ý¡IEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒÌö»/IDAT™c¸ÁàÁ ÁÐÄ'~ CN Q°E.£IEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/IDAT™cøÏ‚ߡ΋͌ ³,ž“|IEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒÌö»/IDAT™cøÀ€ 0L Ëž a{VaIEND®B`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒÌö»/IDAT™cøÁ€ Px?ËŽ ‘çIEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDRæS#W pHYs¸Œ¸ŒÌö»/IDAT™c8À€ AÌœÞ Á±ŸÓºIEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR︃- pHYs¸Œ¸ŒÌö»/!IDAT™cøÁðƒáà |„w€pÆ üÄÎ áÙ‘‚IEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDRzè pHYs¸Œ¸ŒÌö»/IDAT™c8ư‰Á‚¡‚¡m¬Úþ sô‹+ɲ*IEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR︃- pHYs¸Œ¸ŒÌö»/IDAT™cøÃÐÃÃð 20üA´Ö IĈXIEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/#IDAT™cøÏÐ̰‘Á’á'~føÎðžá>C#éö •š–TIEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/#IDAT™cøÏÐ̰“a/ÃO†Ï ~0üÂJv†ÿ ´¶ —¬¸êIEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/!IDAT™cøÍð_3œf¸Í°›Ášá7>`ø‚¶ <•FIEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDRzè pHYs¸Œ¸ŒÌö»/IDAT™c8ÀÐÀ° ›v0ü† †6† ž& !`ý¢BIEND®B`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/!IDAT™cøËð™á=Ã}†ù Œ 2 v`8—á0ÃŽ ’YÙw²IEND®B`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/!IDAT™c˜ÃÐÀ`Ã`Ëð¿á{†ó ÷æ3üAšè ³·YËIEND®B`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDRzè pHYs¸Œ¸ŒÌö»/IDAT™chc0b¨B#†6†&† ´²ÿ _2ɾ'+¥IEND®B`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR︃- pHYs¸Œ¸ŒÌö»/IDAT™cèaØÂP…  ¾0¼a˜Ãðƒv 9îóéIEND®B`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDRæS#W pHYs¸Œ¸ŒÌö»/IDAT™c8Àƒ €Æ„ÞAq•¿™IEND®B`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒÌö»/IDAT™cøÀƒ€Áž„Ǿ ðvÝIEND®B`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/ IDAT™cøÏÿ~02üaøÁðœa>º' JC"Þ§IEND®B`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR︃- pHYs¸Œ¸ŒÌö»/$IDAT™cøÃÐÂÀPÀðá Æ; {€ðà üÃ𦠡cä’IEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒÌö»/4IDAT™cøÿáCÃq†ùv`0R`HK`ð"†&†ã>0•ýÿsvΘ#¢IEND®B`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒÌö»/,IDAT™cøÿ€á÷†Ÿ>‚Ñ0º—Àp á~Ã~’g`*ûÿ$Htæ­ÞIEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„c£ pHYs¸Œ¸ŒÌö»/'IDAT™cø€áÆs`tæÃ Æy(²0ü!ŠðûæÓÇïIEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒÌö»/*IDAT™cøÿ€áƒÃó†ûæ?`°GBò@"Ç0<``*ûÿË ´N–àIEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒÌö»/+IDAT™cøÿƒÁ‚á¼Ãù ç0œ€„€"7Î[04T0•ýÿØÜ$›<ÃIEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„c£ pHYs¸Œ¸ŒÌö»/)IDAT™Š 0€<­Ó:Í ê¤V!¨ ¿/“†„ÝÆ«w‚‰5þ¤IEND®B`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR ³Ø  pHYs¸Œ¸ŒÌö»/$IDAT™cøßÀçÎQk`8&ÏÃ{Ãe/ «›bjIEND®B`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒÌö»/)IDAT™cøÿáƒÃñ óèƒýb` ¥00•ýÿ¶|¤6ï"ÒIEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDRüoÃÙ pHYs¸Œ¸ŒÌö»/IDAT™cøÿ‡áü:ÀƒÂ"  ²ÿй?ÈǯVIEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒÌö»/IDAT™cøÁÀÀp d`øÁð ¹á+é„IEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR8. pHYs¸Œ¸ŒÌö»/IDAT™cøÁÀÀp¼ N 1³ÉŠãIEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒÌö»/,IDAT™cøÿ½á¼ù†3N~`8 F@ J•ýÿÜU¦".ÿ IEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„c£ pHYs¸Œ¸ŒÌö»/IDAT™cø€ýÃy\¨„€ÊþêÛ½ëtIEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDRÅr‚ pHYs¸Œ¸ŒÌö»/0IDAT™cøÿŸÿ#ÃùÇ ÇÁèòeº½™áæf†»Å wŠî}fè{ÀTöÿ?ÜEgí0ÈIEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDRüoÃÙ pHYs¸Œ¸ŒÌö»//IDAT™cøÿ‡¿áü†ão.¿a¸ FwÞ0ÜËa¸¯F= ýg€Êþÿ&Š l[IEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒÌö»/,IDAT™cøÿƒáƒÃy †ù'æ`°¢P$ÿ$x\‚áAPÙÿ¬d¼aWkîIEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„c£ pHYs¸Œ¸ŒÌö»/$IDAT™cø€ÁáÃy:çÀpâÃy$Ä~€á?mûR~8:óIEND®B`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒÌö»/,IDAT™cøÿƒáƒÃy †ù'æ`°¢P$ÿ$x~à †@e®ËþƒÇAqIEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒÌö»//IDAT™cøÿ€!áœÃyJ`8ñ€áà†“Î<`8—dg`*ûÿ”¥»åvˆIEND®B`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDRñq³ž pHYs¸Œ¸ŒÌö»/$IDAT™cøÏðáÃ>†ý@ØÌp€áÃ? ÜËÀÌðŸá?¶ï òïêuIEND®B`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„c£ pHYs¸Œ¸ŒÌö»/IDAT™cø€Š@èóìèÁ†ÿ ÅØ\µj,áIEND®B`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR XxÚ pHYs¸Œ¸ŒÌö»/IDAT™cøÿƒ½áü œèø† @eÿ ãO*)IEND®B`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR øšä pHYs¸Œ¸ŒÌö»/%IDAT™cøÿaþ†óÀÈ€áy}úB?aè?Íì.ýü°IEND®B`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDRÅr‚ pHYs¸Œ¸ŒÌö»/2IDAT™cøÿŸ¿‚a~-Ã<[†s@´“áìl:y›áña†ÇÇž?gøþž¨ìÿ·ƒÙ'IEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR õ„c£ pHYs¸Œ¸ŒÌö»/,IDAT™cø€ÁžAîÜ g0<†¡‡n‚÷`¨s`*ûÀ;ý.›¦IEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒÌö»/+IDAT™cøÿ€A¾aþ†ó Ïž=`øð€á㆟HèÁ†ÿ óª=šÈ©§IEND®B`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR F pHYs¸Œ¸ŒÌö»/1IDAT™cøÿ€¡a¿þ† 0ü|ÀðùÃs0:€aþ *ûÿÕR}¼ñ‘&IEND®B`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDRëMS pHYs¸Œ¸ŒÌö»/IDAT™c```0 ( [þ@œ¼?IEND®B`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR︃- pHYs¸Œ¸ŒÌö»/!IDAT™c¨a¨a°aØ„w€ð >aøÂðáþ›Ö ñ^¶FIEND®B`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDRÒ‘0û pHYs¸Œ¸ŒÌö»/IDAT™c```˜„°À  §¢ áž¶õÐIEND®B`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏðá9Ãa†Û sö2Ô1üG‡ú®K¹(›IEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏ€2€HñÍ«¯3IEND®B`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒÌö»/IDAT™cxÀp€a*0$0<ÀÌâ \êIEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR9¦‹ø pHYs¸Œ¸ŒÌö»/IDAT™cøÇƒm E Ÿ1X1TY0qââ ÉCÇöIEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏ`ϰ 72ô0Ìc؆{šþC Ê> Í:•®KIEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDRÖdàÆ pHYs¸Œ¸ŒÌö»/IDAT™cøÃƒ60T0Ô¡ 6ÀÄàÖ µÓõŒ!IEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏð“á/dØÉP …– - ÿ!æ iÚ¦ÍIEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏƒf2ìa``°Âù aâãé ²¹öIEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR=S[Å pHYs¸Œ¸ŒÌö»/IDAT™cøÁp€aà œÁÀ¦!P‚á‚ ñ÷›cIEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/ IDAT™cøÏƒ­  Õ@hÎÐϰŸ‘Á’¡­Ê, ›õ锯IEND®B`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR 'o»K pHYs¸Œ¸ŒÌö»/!IDAT™cøßÀ ßÀp†.60œi`¸‡Šø€Ê`%l¹jYfqIEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒÌö»/IDAT™cxÀ „ ô8d‹!”b Á“µ€IEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDRÒ‘0û pHYs¸Œ¸ŒÌö»/IDAT™cøÀp?á ¼€'æ’ Q./6ÂIEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/!IDAT™cøÏ`ϰ ÷2ìfXÎÐÄ›v2È0ü‡@Ç U¸Ø¤AIEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒÌö»/IDAT™cxÀ À° d`x«â Á”›0IEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR .„1 pHYs¸Œ¸ŒÌö»/IDAT™cøÿƒ)K0Hœ`ØûI<@VÃküLwŠyIEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR 'o»K pHYs¸Œ¸ŒÌö»/IDAT™cøßÀ€Œxî¡">d5+¬yˆð¦IEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR 'o»K pHYs¸Œ¸ŒÌö»/ IDAT™cøßÀ€Œ60Ìi`°a`°#9÷ Šò›Ãâj/IEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR 'o»K pHYs¸Œ¸ŒÌö»/IDAT™cøßÀ€Œ&40ô50Üg@ { "+µ1oð%DIEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏƒv2ÔB¡%C+Ã_çE ¹±vIEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR=S[Å pHYs¸Œ¸ŒÌö»/IDAT™cøÁƒ  ;à&Öz ‰#HIEND®B`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDRÖdàÆ pHYs¸Œ¸ŒÌö»/IDAT™cøÃƒv0ìahÒ?*X`âòÒ ÉˆÃ6IEND®B`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDRÒ‘0û pHYs¸Œ¸ŒÌö»/IDAT™cøÀ‚€p˜†ÀˆÌÏ qçŽVIEND®B`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏƒ–@¸ w2´ÀÄæ$ ›‘œ8$IEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR 'o»K pHYs¸Œ¸ŒÌö»/IDAT™cøßÀ€Œxæ50Üm`8 FÁè;Š<ÖÖž@í IEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR .„1 pHYs¸Œ¸ŒÌö»/&IDAT™cøÿƒñ>`˜D/Ne0œŠ`8.ÁðÜ‚áýd5Ç–u£IEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏƒsî2œfx„‡n2ØÀÄüâDx4rIEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR 'o»K pHYs¸Œ¸ŒÌö»/$IDAT™cøßÀ€Œxæ50Üm`8 FÁè; ½o`èo;FÜÛË¡IEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏƒ ;>3|gxÎpžaLüto¯ÿâIEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒÌö»/IDAT™cxÀp€aT@á`x¹ ᥳIEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR4¸û¿ pHYs¸Œ¸ŒÌö»/IDAT™ch`À ¢ƒ£•ÿIEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR0M+‚ pHYs¸Œ¸ŒÌö»/IDAT™cxÀ À° @á)0<®b At@.ìIEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDRÈ­Ðu pHYs¸Œ¸ŒÌö»/IDAT™cøÏ€ ç3¤1T¢ˆüíqÁŽ|IEND®B`‚leptonica-1.70/prog/fonts/chars-14.pa0000444000175000017500000004572612256617134015474 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR 6ÛïE pHYsb&2IDAT™cøÿap# °hkâM?IEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDR6ÌÍÕH pHYs¸Œ¸ŒÌö»/(IDAT™cøÃ‚PAC ØÃp Þaø‡GLhAG‚!z!µD°|]IEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR6æ}$ç pHYs¸Œ¸ŒÌö»/%IDAT™cøÿŸˆú2°?£‡PÔAÁè3Ý#ˆz:"ç¡b/ _'IEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR6ƒ¯W pHYs¸Œ¸ŒÌö»/^IDAT•Ï¡ €0…áÛ ×QºYÙ•H*:ap'Ž—Òæ.`øÅgžz$"L†\gÀƒÂü!ƒÔ8;+!E܆Á7vËeÈ 4j( "X”dáDñ÷­ܧ¤l@fÙIEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR6ñ_´. pHYs¸Œ¸ŒÌö»/~IDAT•mÏ1‚PÐù¡ änÃ1¤£ôHŽ¡ðи-v&ë¨ùAšWì&3»psbOw&^(‰¥MÄd7b°'q½¸ˆ*ÃsÊ…èZ‘‚Ø#ŠHF$¯74ÅŒ/KÎõC³QÛ¼BœlRå ¶žÀ£Rb×§ƒ·vøoÎçšnêy›rIEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR-6{p-o pHYs¸Œ¸ŒÌö»/©IDAT•¥Ð+Ã0 ÐHë5&åZeÙÐÆz„¦ °g¨Jg•8’e׎Á:¼Éò7ˆ= _8bàF8a( ¤dÒØ¤åE±A¹p»9ÙYÉ™¾Oo½XTFd€“B ¥:ù,èäil||SÖ\• ä¬ÌK¥ÏòP†±p:B2ÊÛÈ–WdqÀjêZÖaê´ß*rÂÊϱþ`ýA»¨!µIEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDR)6r› pHYs¸Œ¸ŒÌö»/ŸIDAT•Ð;Â0 PG€Èr”ÞŒ¶êбW êkq°e¨büa*^Þ௠$1Á‰–”4ŠW⢤]è'б›¡ÃúmP®£¶_l‘3ü—À%þšSj¦Ì<‘K8Vf¯ƒ°´$¬- áˆo¡…üK™©0žrTP˜©Ó0QsLî˜Ý!;¾Rõ|Оõ£ãßH/oIEND®B`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR 693^ø pHYs¸Œ¸ŒÌö»/6IDAT™cøÿ€ˆþ10|P£zð„>`8ø€áð†ãÚ0ô?`À`VOG27]غçA¡IEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDR 64-.¿ pHYs¸Œ¸ŒÌö»/TIDAT™Î±€ DÑÍ´J±4r, ‡Jì³ V8ærg^z÷"T¡ ]ЎдFTN¹‰bN—ˆí·äÖmqëùk!rFGz P0cRþ±lMœA*zàIEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDR6ß•¼ pHYs¸Œ¸ŒÌö»/YIDAT™cøÿ‡Áþƒü†þ? Çÿ0<þÃððÇ? ?€¨†á É0üƒ †ÿ@Ä‚„Zþ7Z´€ 1jE È: ¥Áx v ÐIóÿî KÆÑ2XTIEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR6 JŸä pHYs¸Œ¸ŒÌö»/LIDAT™cøÿÿâƒ@|øÃùæ í혘±ÿà þ ÁÀð‡‚?È004̇ȱÕôñ} žÿÍýÿÏ#™K è@‡a‡Þ‘IEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR6ƒ¯W pHYs¸Œ¸ŒÌö»/IDAT•cøÿÿÿŠˆh€bó Yž3Éy­%IEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDR 6ÛïE pHYs¸Œ¸ŒÌö»/6IDAT™cøÿ~ˆá €‘à *¡~`8øáð†ö ýø?0ØCuÌh^³ùm IEND®B`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR6 ¿OÙ pHYs¸Œ¸ŒÌö»/IDAT™cøÿ¿¸Œ ,Û¦q~_–©”IEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDR6#¾v pHYs¸Œ¸ŒÌö»/IDAT™cøÇ@xŽ¡‰˜Ú°«½ø0{nÈRIEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒÌö»/hIDAT•eϱ€ A: K±4Í)Š€:€Œ€ñý{G L6½9'"§Η TH!@\xØ”ËØ•iÊø Ô C ò"@›r»2ãe,4èP BZdÁ?Ó?nG:©Gº…ÁIEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒÌö»/eIDAT•­Ï¡€0CÑ8$#° ŒFî*¬D¯‚5è±@qŽ@iEq̳ɇ$¢`ê‰ q´5±«"6ÂËkÄiɘÈP¨~€ “xÖ|ÆE¬\fÑL÷Ý6Gwwàõ d™’p®îmßIEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR6ï–„ pHYs¸Œ¸ŒÌö»/5IDAT™cøÿÿ?âæ ˜?0|âF ›ˆå¸¾"GwÌøá£¸?"¦ƒg-@75IEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR6ñ_´. pHYs¸Œ¸ŒÌö»/uIDAT•ϱ„0@1@ .…Ò€ˆhE?iÁPdîO‰‡ÿžt03✠8Ð 5ÁìD«ˆÅb51ìÁVøˆ(Æ‚_¶;ˆÖÉs©ü›ˆb“ÎÝ:¹Ó>-=ÅEŸü¿õŽ/ŠD¤pIIEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR6ñ_´. pHYs¸Œ¸ŒÌö»/…IDAT•Ï1 ÂPБ–ÁkØýLˆb‘2Gð*,,=‚‘¶)!Nvø 6e’ˆv ñÀšÈX–Á¶"Fwí‰K¡q5*œÌÁ´¦3qJÏlœP™EÐÀ-ë`0Þä_ÔH…‰8nD§‘hu&zÅ»D21!Wß³þc¯Ç¢V‹¼ÔIEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR6üAÄi pHYs¸Œ¸ŒÌö»/[IDAT•cøÿÿÿdâ0ˆ`‡ÿàÄñN|ÏáÄy81Dȃ{ ñ¯Fü™÷DüŸáÄsqDœ (ÌErNâ3©†èÞ"Фˆ›ß©ÔìAIEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR6ñ_´. pHYs¸Œ¸ŒÌö»/pIDAT•Ͻ €Pàˆ…c8Š7™ØY:‚«Àž¸€?…VÆ{?`aóÁqH"n&àÆç¿¿ …ƒŒXÆ€Ä)=ePeEæ`^éÙOö/ì‚(4Ef¢ÕH4êˆ^5Ñ9½À{âŽì5ë''-l¤7yÇŽêIEND®B`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒÌö»/{IDAT•ϱ ƒP Ћ((MòG‹Š¿ˆ"kü¿K „s'Š(PšWX²ïŒˆ0üò![K–ž¸f“È¢#[OÖD–×k·ˆ*¦“Á;‚ÆðÆÃ€§341Š´;~Cç•b˜£*£*rVƒÌ.‰A+¸¼õ_©“¢”KöIEND®B`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR6ñ_´. pHYs¸Œ¸ŒÌö»/hIDAT••ϱ €0 @K À%lQQ²’%ЬʤKÅø-%ˆ’/®üדˆ0½|² ˜œ&/y‘)ÈŽÃušïÔ C\ D°¹ÓœR ¯#(78¥Ã`LßGx«@£›;pÁàIEND®B`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒÌö»/‡IDAT•Ï1‚PEÑKL´d ,…-¹x†‚Ò-A(ØÆ7l; â8ƒ…h,lnõsÞ|ÌLì¢Z<(ÄRÄÝ1Ù ëÅh7ÑþHc“¸Ä;Ù(ºú*RáJ:–bÆÑ•2ä<âòr>8¿fÁ¼‚êð$È_™¿¢]ÞãCìöÖúP‡oCÙç·þËx·½?þá¯o-$¹6ÚTçåIEND®B`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR+5ðú/† pHYs¸Œ¸ŒÌö»/‰IDAT•Ð1!„áI¶ Ü ˜p#Gc76v^ÀÃ`å5^âØŽMOࢥÓ|™ö—ÞìÂ&ø/ÈŽ83rièÊM8Ì•c%Ô@´©ø,¬…]Øø.¸Â“©a3ö˜‹på 3ºgB2¤±a™!4rˆ•àó[PìÎo¬¿xÀ&þƒ½ÌIEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR 5Ôq pHYs¸Œ¸ŒÌö»/nIDAT•Ï» À Ћ(R2+dF Q#Ê"Œ@Ip|Hù4Hqñ 䳈^tðÈ ŠÏV©¤ÍŠ é+ƪgvUNA!à[ê÷˜h†±‰l$8âxövbîB½ZrÈ<ŸØ>Â~ô“ Pއóÿ¸IEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR&5¤6 pHYs¸Œ¸ŒÌö»/ƒIDAT•Ð; Ã0Ð6¸ èE H!S Qál©Bh²+lH•LñÊÙ¨iø˜Ú€ (Ð0™AGÎè ùBó䆺šÌ‡4óèyï'Ãé/ÝW[î³r4Ën0e5«7Ûbv­Q÷gò]/*À¬ÀM¯NÓñŸ|’ ØH),zIEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDR+5ðú/† pHYs¸Œ¸ŒÌö»/mIDAT•б€ Ðx”Œ›°Š› çb¸IF ¤àŒ1¡íHóº$ÿ½ƒ0Âc™Ä2Å„ê([¡VåPRc°á…<B™Å÷|V×±çRÎþù[£T –°G °pvîÂhñ×Ò$ã±ë± L_IEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDR 5Ôq pHYs¸Œ¸ŒÌö»/‘Á±OÁžÈ— å+•Î:2·Aùâ6ˆÿ¬/,óÄzвíFvêIrÚâì³sLN‘™i·kpTv Ù{$^Ÿõo…‘ï¤ 5>¥IEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR.5Óä pHYs¸Œ¸ŒÌö»/BIDAT•cøP)†ú@âÃÿ < øÿÿ?PÃðGþÿÿhJídÀ ho-6êÄÓЀRX‹T \CüÓØc¨]IEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDR5+=w pHYs¸Œ¸ŒÌö»/%IDAT™cøÿ¿†AàCÃ~ –ø?Ä] €ìV< [OÞW/TIEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR5‹ÞíJ pHYs¸Œ¸ŒÌö»/2IDAT™cøÿÿ ```øÀÀðÈg¤˜ Ë?`øÂöêèÆÿ³"e°»j.IEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR)5ôÿ» pHYs¸Œ¸ŒÌö»/‘IDAT••Ð1B! àFß`ä( ¯…ñ"xÆäUøÿÉÄÅ| ´ˆí¨òH™®JÓÅŒ¦y‘lð6ð"Ášl4ƒQ@7ð$wÁ-kG®„{ÂÌ#0Óóœã-B*j|¶³ˆÁ’4°2NÇr+il¬'ö†*mzüÄ);Š­áçgýË~ŠØÀÅæ0IEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDR!5çØ¿O pHYs¸Œ¸ŒÌö»/5IDAT•cø È$C=<Àbÿá“òC€üÇ€NþÁ 40üú¯á‰D“wľ‰’€®¸IEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR55ÉžÝ pHYs¸Œ¸ŒÌö»/IDAT•б 1 …a£)ÓÒ¹`ˆ‘˜ ܬ*Ö8‰Bç"б%NTçÂ_÷ЏÁ^@ázªO“†¹Ì.Ìù:eí9ø£®›o5ùáK%>Ô솨Û-^eÓÍ¡º ¹é×õ¶óÒL]Û¤®kæ.ª)Ô.` ÊÙ«RÇÿëzÐ/Œ»/):q¾IEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDR.5Óä pHYs¸Œ¸ŒÌö»/‚IDAT•б !ÐL¶YØÆ-ÍR,ÁÐ@ü«ãq(\p“<ø?ÈHŬHb'(gè‰Ú“èIºI¶+ýÍ Ò45 Ñ“t“lI9Wª!MQ“°IÉoR^¤+ D>‡ìÇ= ¿$ÇyŠÃÏÍþæo}þIï*RÀIEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR+5ðú/† pHYs¸Œ¸ŒÌö»/”IDAT•б„0 ÀcºèÄ­Ð fhÌ߉¾‡<ÜŸà‡!FÉfÒ@ÃMŽNÃàD^Ë$Ûh8"{0ôD†¶’›¡Šl0-)ˉ-ø8óI±]ì€ Ú †×êv_È΂òGɪ˜*õWq'ò#"¹«ÃHªX<¢úÝÛ"ÕUø”ut¤ç³^ñp_óÆÅF–IEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDR 5Ôq pHYs¸Œ¸ŒÌö»/TIDAT•cø ê00ð3üÿÁÎðGþ?3ˆhAÄññN€í ‚Hü‘gø#4þãU‰ü`××C 4o&ˆÆžr®NIEND®B`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR+5ðú/† pHYs¸Œ¸ŒÌö»/°IDAT•б à Ð\¸d{H^…MÀJ‘µ°²ÈeJ Ë—‡¥Í+@Çýµ#øR¢Ñ 6Rr]Ȥ}\QÏIpnªAгê.h¤„Cjr$á0V§­Øw&Òÿ ü0F“2~pÒ‡ÊÍš8¹õ‹,ª·&Ofˆª&âìÈ|A/K‹Ü-{‹5Ñø3¹°xKŒmHùÙžÜÀ)zjà)WoÉyøQæŸ;ð{IEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR&5¤6 pHYs¸Œ¸ŒÌö»/}IDAT•ÐA „0 Ð/]ÌÒ ˆ¹ˆàŬÌÂkÕ›tnಋ0æWPÄ,Þ*ü|‚\FqÖ£"­B%937t¦ád¼õKWú¡‹ù«ÉRì0™®ÜÕžJCgêi°‰£¹U… ÌÑ3ÝáÞÖמïÃ8 µyëL »×<ö_¯Á£ÓºÈOIEND®B`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR5zÕ¶Ç pHYs¸Œ¸ŒÌö»/‚IDAT•ϱ Â@ ÐQ\› Xá6`¥Û A”ŒUXÄÙÀå§ûø„hh^aÉÿÛ éØ°ŽdÔ“g[Á*ìqi#Ö>v1O"w†Á#]ñ4ŒÑ;‹˜’U4ÑXØÇ/ZÆõ…®²(â9@z·UìoýÇz™ šÐóàIEND®B`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDR"5 ïL pHYs¸Œ¸ŒÌö»/1IDAT•cøIL ÿ‡ÿŸƒ= )Fþÿ#2að“?øA$C=œÄ¢Iò´ÀÊ kë(IEND®B`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDR+5ðú/† pHYs¸Œ¸ŒÌö»/`IDAT•ÕÐ!€0ƒá.äŽ0nÂцCr¥9®±D,¯t!!!($ýü¶e<bÕ%GÀ#[Fý-ûÅ*üÍœa=¹ˆŽô±%@,£˜A$ u)p ƒÅúÊ IîþªM­I0IEND®B`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDR)5ôÿ» pHYs¸Œ¸ŒÌö»/‚IDAT•б Â0Ð.=‚Gñh>ÒPf„¬bD‘5@,t.,ÿ˜³”œE ®ø¯úÅ?Â÷˜zˆjÄ+ 1-x2¥Êܸ3e Œ;ŶávPëþà†~ˆH8xa‚fñEò³à4ÙŽŠb'Á8Yd¼pé‚ÀšGã}ÆÉÏþf"ôóÙþ ¡IEND®B`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR95Ó¡~S pHYs¸Œ¸ŒÌö»/¾IDAT•­Ñ± Â0ÐC)Rz$lA†aD¥¡KË8AYÃmÒ9’ñçl‡#JN'Ýkÿ?BM Ä,ˆhÀ·+0À“¦A2pÓd#ú£¾Ñ)´š£Ê!p^ !5yËkQ2|àw`”3N3œâeN  EãBœfBmê××;ºq†IxÀºæ`z ûˆÃ&‡€ÝFHØ2€{q 8ÛOX¿@æàÞåç þ„IJ:Y®‰6IEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR%5î35 pHYs¸Œ¸ŒÌö»/¤IDAT••б ƒ0Ð\@‡2× ˆäŒE…P±–¥¬ÊNw…åŸ;S6.^aý;Ô#8,“s‡§§tH=ÓQ¹å®Ç—æWuæRíÕHo>‚ºÝÍtÌÁúåRmÌìÌÒž²Þ°¾–#s;•Íz>É:÷ê[lÖ*6wÉf_ZÕ§zª9°Hà¬NŒ‚Dƹ hTÀ‘ øý?ý¢ÔM´ê)‚IEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR%5î35 pHYs¸Œ¸ŒÌö»/IDAT•µÐ1Â0ÀEIçÖR¾Að·è,”ð¥Pñ >`º+N^îŒÒ¦àŠévW:ÐNðµ4‘I‰ì1%Öˆ2P#$PÐ@¹@;Š v|[vϧ9òe^ù0ï͉7sÎÃb9'SNÙ=¸}]{·î~Z©;þÁÖ?#,®>°ÑŠ$ÜÒCÙÕ¨IEND®B`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR$5ñt pHYs¸Œ¸ŒÌö»/€IDAT•б ƒ0„ágQPš X X)`6ó(á! ‹—»kˆ’&W|…¥_¶l¹}êÆ=Nvàx±3¢Éú¢Åi’Û[ö‘^™ú,WÚdÝhÑ]»Lôhé•åL]¶•ÖMê»L)DÕz¦H¡K¤iCfž÷ûûÎÌ3¡ßÍQIEND®B`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDR 5]{7/ pHYs¸Œ¸ŒÌö»/IDAT™c`€æ ìƒÃD E/9¿à˜‘IEND®B`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR6h- pHYs¸Œ¸ŒÌö»/eIDAT•UÏ¡À A: „”’ÒˆCR‚:‡`òù{³~ˆ<ÎCÚD(¡A…æ!(˸•׸1ü&A„T›ÓÊ2nå5.ED(¡AÝ è0 çlþçF¨ÉBÞËIEND®B`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR ;gqV_ pHYs¸Œ¸ŒÌö»/IDAT™c``€€ zq–ÃÿÈV <èýµ+IEND®B`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR;@ß×· pHYs¸Œ¸ŒÌö»/[IDAT•Íα€ Ð?¸AVpVrOÖòŽEdƒ”1 Ï l^ý "Œw'(WÇ+‡q’²Î1u"£z¥„4aÉ“,l”iP7ÄA[á ¾ƒ?òæÏÑuÜIIEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR;¯¼‰ pHYs¸Œ¸ŒÌö»/IDAT•cøÿÿÿ†‘A Rô Ý™’¢yPIEND®B`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDR ;…­M& pHYs¸Œ¸ŒÌö»/4IDAT™cøÿ€„þ)0üI`ø‘Àðá=xÀððÃA0j|ÀÐü€Œì!ê ÿg2hÓD£IEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR;¦öó pHYs¸Œ¸ŒÌö»/iIDAT•­Ï1 €0 Ð:zâÑéÅ*Ž^AðvT(?‹ƒs—I~™)z‚¨¨ƒb½ƒbkŽ‘ÝDqYòðGcÏ2©Â²LäðÁâ$'üa8øšTçao>IæEdÞF‰]ßzz©+šÂòŒIEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR;«èl´ pHYs¸Œ¸ŒÌö»/lIDAT•­Ï1 €0ÀEA;ý~ÀÒB’¯¥²ôMÁ%Ýrç…`a#6S-»,D„Á^‰ŒdÐW Ìp  hD¨µGꥰÜE¸‰olOc5Cë=;kÖÉ2+¨9´Œ=yÆõíN­§´_„†ÎIEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR;WýG~ pHYs¸Œ¸ŒÌö»/QIDAT™¥Î± €0EÑ –.à(BV‹X¸VÀE"8À/,RŸ¿Hm“âô©ÒÅáJSâÒÍÙz\eú14»Û\jr(Øœ)ŒT§¸ö\?}å•è òIEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR ;2µ pHYs¸Œ¸ŒÌö»/jIDAT•­Ï1 €0 Ð^BÈE/&ØÒÁk\=DбC1æ+¸ b o ÿ¨ lÅHÄ‘Bê'Rg8e°¼¬Y°1táÉE 3ißiS<‰ º Ò´Z‡XoATŒ€úû­Ÿ8{í¬ÖåÄ IEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR;I4wÍ pHYs¸Œ¸ŒÌö»/WIDAT™¥Î± €0DÑ/)!›¸Z”®q‘dƒ” ê0…Ö9xŇ$šÇe YžTlZñÅ¢ˆùèx3”®Ÿ¾š«IÁD›Èôœe#\Ë×Ç´â™×^²IEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR;±ÔŒ: pHYs¸Œ¸ŒÌö»/?IDAT™cøÿGáÿ†ÿ ø<Ï?Àð_þÃ?û ðœXáƒCCãVGf`„àÿÿ)™s€p ‡,bIEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR;D*Š pHYs¸Œ¸ŒÌö»/IDAT•­Ï; Ã0Ð 1¤1ä:Љ.ò!…¯%á‹È7ØRÅ ÍÈ$"¥›‡Ðgfw'ö$E¢áLÔs Xý1 {&OÄËËVâÙ¯d_ˆä3Q.J1(%·(xµY§lô½lLz µ0·Qåß>œ~ _tÊIÔ«&°ž¬,U©Ï¼*Xµ yfÍ\IEND®B`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR!;ÝÒÞ? pHYs¸Œ¸ŒÌö»/LIDAT•cø ÿìAä0É&?€É‘Œ ÒŽ¡HÚ0ØI y iøHªÿ‘üÿ@¤ü?v°.º‘ Œÿ $$hF7aÅkgpÎ=IEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR;ŒFí\ pHYs¸Œ¸ŒÌö»/+IDAT™cøÿ‚þÔ1ü°cøC?êàRÈèX–Œ~P† «-¸QŸW·˜Å£ÞIEND®B`‚ pix[74]: xres = 1200, yres = 1200 ‰PNG  IHDR ;gqV_ pHYs¸Œ¸ŒÌö»/;IDAT™cøÿ‚þ0ü`øÃF .\  0ü`8Fh‡ @è€Ñ†˜?0ð›ÓHít ö.IEND®B`‚ pix[75]: xres = 1200, yres = 1200 ‰PNG  IHDR;«èl´ pHYs¸Œ¸ŒÌö»/pIDAT•­ÏÁ @@…áAÂP7¡3T&Уƒìzÿ– .ßaö½Œyï¹Ql`pÁý—ŠîA\ÌNØ¡C%úQt4Z°À,j"á>£‘Ð`mGø¾dQÎÊØL áSÓY«…Û~á梲ל°]IEND®B`‚ pix[76]: xres = 1200, yres = 1200 ‰PNG  IHDR;ŒFí\ pHYs¸Œ¸ŒÌö»/!IDAT™cøÿáŸÃ;;†v ?èˆ èR3Q üšbIEND®B`‚ pix[77]: xres = 1200, yres = 1200 ‰PNG  IHDR2;KäÔ pHYs¸Œ¸ŒÌö»/YIDAT•Íб € EÑk((‰7°¤ a3]í» cP¾_ÜA½Í©ßCGÂû:=ÍžP¡Dv²ÀFb1×kª¯s» Íuo.Ísú#™l–{üî×áõ¬8!·LnGIEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR!;ÝÒÞ? pHYs¸Œ¸ŒÌö»/FIDAT•cø ´!ä?;†ú†6 ö  ò@ÒðÃõ? ’ÿˆ”ÿÇ$íÿÓd`üÏÀ%i@ËÑÐT½‡«ëIEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR;@ß×· pHYs¸Œ¸ŒÌö»/iIDAT•­Ï± „0DÑ. „RÜ[¢„hË'ÑÀ’m`y0G~ÉKÿ ’Œ7IÑ(´FŽaJÆ®màVy`–÷,Ê? }(ø¨ôóͤøÞ$ùÀ6z ÅÓðn­]º:ƒñÍ[=‰ÀNž‰IEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR ;2µ pHYs¸Œ¸ŒÌö»/eIDAT•­Í¡ €0Ðk•¡‚Ut5PHV‚°HÙùáø?!u(8ñÔåÔàG® âè‘1$ <¤=H 9>d.•òÆ^Y­2³MEˆ×SqBœá•i•o¯è&oA´fšË·PIEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR;«èl´ pHYs¸Œ¸ŒÌö»/fIDAT•­Ï¡ €0„áK*p`Q°Éc-LÁ,MX¤ WÑpôA‚Ä€ùÌŸ’þÄ Ø£‘ˆÁ®lʪŒÊô½b®Ùpã–.ÑÍW—V‘*ÂϸéN›°‹·y IEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR;¼Êü} pHYs¸Œ¸ŒÌö»/7IDAT™cøÿÿ%øŸ=à 6``ø¡Äì ?ø_0üÿÁðÞr 4Œ)t+8k>­\ì{IEND®B`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR;¼Êü} pHYs¸Œ¸ŒÌö»/aIDAT™¥Î¡ €0FáG*Š«­c:Öª£Ç:Hk°@å©GÈϽûs¨ 42•È-‘³%6M„nï¼5ΰÅ ‡õ—õˆ¾*h3 ³–ÏÊÔE‚m:É0Ø­ÿõëî(‡n·@yìIEND®B`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDR;µ!\ pHYs¸Œ¸ŒÌö»/5IDAT™cøÿ¿'¶o`øÄ?ˆÀ €õDa9 Y@Sÿñ?F {˜ñ¸•0#Bq“ï…IEND®B`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR!;ÝÒÞ? pHYs¸Œ¸ŒÌö»/GIDAT•cø ´#ÿÙÿ?ßÀðÀþƒý8ùÃþÉ?`òˆ”ÿ"ÙŸÉ? |ì@W1È100üg°‘h¡…Ó‰1ûÕIEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR;«èl´ pHYs¸Œ¸ŒÌö»/_IDAT•­Ï± € ПPØÉ²‰l†1.¦¸-‰ &—;… h^ÿ "ŒŽ@|x+#ÂÏ„X02ƒ H“kbðáI¨ÌvWÖÌq%öŒ?&ÑV¨°ôl½û`Ë;^AÌÙIEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDR/;ÃîŒ pHYs¸Œ¸ŒÌö»/‰IDAT•½Ð± Ã0 @.ÔYD›„ãd ˆÈYÅžÀ+(HáV‚ È‘ Oào®{<Ô#p&h@'X2 J%i„œôâÄ?å œvjÁØ ñÓ±ë¸CV–ùÛ¨ÎsÚœWvÆ”WËÍx4&,ѹÓ¥ddåoµ¡ µqÒY?s‡,ÕtòÂÆIEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR;@ß×· pHYs¸Œ¸ŒÌö»/vIDAT•­Ï± Ã0„á*í âM¢•¼’>•.â1d¼ÀsçBèr¯ðn>xpüð@Òp#…mò9¢$3X: ç´Ú°8?C_Ãä$ñÊ¢ð¢úYÓÅê»Ï ¢?£*9(šß‚â`1l¬3+¹ó#ç!‚ÇÛ£xemIEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR;«èl´ pHYs¸Œ¸ŒÌö»/IDAT•­Ï± Â0EÑß¹ƒ ð&x3>ˆ2«@•ŽŒ@¤iÒ8’åŸ÷’ hNy¥+fV䈋²òÔr^í$QËYbX¹H ø\$ûô£gònBÊ d÷J nx5äúJ±¢©bóδ3‘´¤# øxð&×@”`kÃ9Ç,‘¾9pIEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR;MÁ§ð pHYs¸Œ¸ŒÌö»/aIDAT•­Ï± À À—((QÈf„Í~¤)CIpüÙWY²,T6R…ù¸P¹¡JÊâ#Ó³<‚I7Z"5ÅO1™žŒ@z€H¤%R3QL‘ã°ÕÅæ[/éõ»,Ã_JÈIEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDR ;jo& pHYs¸Œ¸ŒÌö»/8IDAT™cø€áÆ>`xH.:|€¡ýÿy0È}L®QÀè$ Ã€ÎCE¶ù\œÕ›†IEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDR;–z Ò pHYs¸Œ¸ŒÌö»/IDAT™cxÀ@ ð?Fåá`fLXIEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR ;jo& pHYs¸Œ¸ŒÌö»/3IDAT™cø€AþCû†Ã`ô\ôáà @è˜Kž9ÁÎ8vÐaÿÑ÷$]>ÔjRIEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR;¯¼‰ pHYs¸Œ¸ŒÌö»/=IDAT•cøÿÿÿº/þÈÿÀðùÿ† õ ‡ÈI0´ÿ``èÿÇPÁ ÿÿÀ†ýâ4¬%µÝSNlPIEND®B`‚leptonica-1.70/prog/fonts/chars-6.pa0000444000175000017500000003521412256617134015404 0ustar dandan Pixa Version 2 Number of pix = 95 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRñk± pHYsb&2 IDAT™cøÃ@7N¡S‚\åIEND®B`‚ pix[1]: xres = 1200, yres = 1200 ‰PNG  IHDRBzJ pHYs¸Œ¸ŒÌö»/IDAT™cxÀð€,€BœXä Ãð nJÞIEND®B`‚ pix[2]: xres = 1200, yres = 1200 ‰PNG  IHDR©Ú0 pHYs¸Œ¸ŒÌö»/IDAT™cøÇðA‚Áwá.†ø!ºÉè«";IEND®B`‚ pix[3]: xres = 1200, yres = 1200 ‰PNG  IHDR  ‹Jù pHYs¸Œ¸ŒÌö»/'IDAT™cøÿƒˆ>Ï€¡ ß-ž[ ù tÑC¢!åOÍ`ëIEND®B`‚ pix[4]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/BIDAT™Ë1 À ÑK*£Ë÷|tÁfrÕСÃZ yã¯<¢Œ eª9åV1Hȶ\Ó[r¿ßòÖhðüåIEND®B`‚ pix[5]: xres = 1200, yres = 1200 ‰PNG  IHDR0ìû¢ pHYs¸Œ¸ŒÌö»/OIDAT™cøÿÿ?þý€aæç 6ßø9¿âó@±ûϪÙÄ ÿ‹þ¥70üyÞÀðˆñïÏ Ÿ$0|‡š…„|Ž9ïzžIEND®B`‚ pix[6]: xres = 1200, yres = 1200 ‰PNG  IHDRß.œ pHYs¸Œ¸ŒÌö»/LIDAT™cøÿÿÿ¨?ÀðÉþÃs(~ä?Š?âÇñŒÏl@¸øƒúy~ n>ÀÐÎÀÀp Àáÿ?ˆYHC0ÃO+;IEND®B`‚ pix[7]: xres = 1200, yres = 1200 ‰PNG  IHDR\ pHYs¸Œ¸ŒÌö»/IDAT™cøÁð€áà †† ;*~à‡à¿1Ó_m_IEND®B`‚ pix[8]: xres = 1200, yres = 1200 ‰PNG  IHDRñk± pHYs¸Œ¸ŒÌö»/#IDAT™cøÃðá Æ; s€P†Á ÉܪyÂð> Ýíà~5IEND®B`‚ pix[9]: xres = 1200, yres = 1200 ‰PNG  IHDRñk± pHYs¸Œ¸ŒÌö»/&IDAT™cøÃPÃ`Ã0‡á >Â@ø >‹‚dç0ìa¨Å»%*D®bIEND®B`‚ pix[10]: xres = 1200, yres = 1200 ‰PNG  IHDR pHYs¸Œ¸ŒÌö»/ IDAT™cøÏðŸá3ƒ1ƒ8à d²>3|gø «_Ó‘O ¢IEND®B`‚ pix[11]: xres = 1200, yres = 1200 ‰PNG  IHDR  ‹Jù pHYs¸Œ¸ŒÌö»/IDAT™cøÿƒ ýÅ@@€)ˆª [-ÙO}>IEND®B`‚ pix[12]: xres = 1200, yres = 1200 ‰PNG  IHDRñk± pHYs¸Œ¸ŒÌö»/IDAT™cøÃ€>`8„gæ¡ Ã'úei!BIEND®B`‚ pix[13]: xres = 1200, yres = 1200 ‰PNG  IHDR pHYs¸Œ¸ŒÌö»/IDAT™cøÏ€600bÏl7IEND®B`‚ pix[14]: xres = 1200, yres = 1200 ‰PNG  IHDRBzJ pHYs¸Œ¸ŒÌö»/IDAT™cxÀ€*001œÙ_¡$àùRIEND®B`‚ pix[15]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/=IDAT™cøÿ€áÃÿ ÿ@è_ýyB0ü|ÀðûÃg0zFçÁèþ†ùö?`°j!vÕ'‘ùFÊIEND®B`‚ pix[16]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/-IDAT™cøÿ€ˆ<`8—À0_a>ƒ=5`Aò@¤RÓ—Àp¬ ‡  ’¦ ÍIEND®B`‚ pix[17]: xres = 1200, yres = 1200 ‰PNG  IHDR ëWQ€ pHYs¸Œ¸ŒÌö»/IDAT™cø€ˆ>`8|€AÌ 500@4Ât˜&Ú9„âÖIEND®B`‚ pix[18]: xres = 1200, yres = 1200 ‰PNG  IHDR æI!Ç pHYs¸Œ¸ŒÌö»/>IDAT™cøÿˆ040Ì`ØDþCÃÿ†þ~`øùáó†çÎ`h`ˆFΩ#ÏÌ0 ­IEND®B`‚ pix[19]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/9IDAT™cøÿ€ˆ<`8À0Oa?ýW`ø—Àðçà ›áÕ70Ø+0ÌK`hëBB}ß!ƒ·šHIEND®B`‚ pix[20]: xres = 1200, yres = 1200 ‰PNG  IHDR æI!Ç pHYs¸Œ¸ŒÌö»/:IDAT™5ËÁ €0Ñ)y*J)–R‚,$ˆD–|Þñ_–¼2å‘Kn9¥Ë&‡ÔòV*Ü~¤Á!^ðt.œIEND®B`‚ pix[21]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/.IDAT™cøÿ€ˆ0€Ðýt!á€Ã=†ÿ@Ô€@ö óÀº¯Ö"<°‚5IEND®B`‚ pix[22]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/4IDAT™cøÿ€ˆþ$0ü|ÀðüÃy0šF | ò ö 4_¡/áXuÙx _øLIEND®B`‚ pix[23]: xres = 1200, yres = 1200 ‰PNG  IHDR æI!Ç pHYs¸Œ¸ŒÌö»/9IDAT™cøÿˆ@@€¡~C½C}Ã? úÀðçÃO0ú FÏ?0ÿÀpþCÿy°.$¯|%"ú?GIEND®B`‚ pix[24]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/6IDAT™cøÿ€ˆ<`èK`°W€"¹†¶ â s€\{ j#†y ÀºŠŒ>iì­ËIEND®B`‚ pix[25]: xres = 1200, yres = 1200 ‰PNG  IHDR ëWQ€ pHYs¸Œ¸ŒÌö»/:IDAT™EËÁ @@À©D+®ÀëA)ÖKjð’ˆ;$"™ïhqÛ¢S1ú TWyœqÄkÌoütdi×¾{Ê0IEND®B`‚ pix[26]: xres = 1200, yres = 1200 ‰PNG  IHDRÈÓæ pHYs¸Œ¸ŒÌö»/IDAT™cøÀ€ '001>° 1!òbIEND®B`‚ pix[27]: xres = 1200, yres = 1200 ‰PNG  IHDRë ¸Ø pHYs¸Œ¸ŒÌö»/IDAT™cøÁ€ á$þ°È † ;,çÕ©x>ÖIEND®B`‚ pix[28]: xres = 1200, yres = 1200 ‰PNG  IHDR øÝø, pHYs¸Œ¸ŒÌö»/-IDAT™cøÿƒ=`øßÀðO‚áGÃà í?äÁ$ ŠeAjZ\['6_ŸyÝIEND®B`‚ pix[29]: xres = 1200, yres = 1200 ‰PNG  IHDR øÝø, pHYs¸Œ¸ŒÌö»/IDAT™cøÿƒ¬lTœ+)DFÒçIEND®B`‚ pix[30]: xres = 1200, yres = 1200 ‰PNG  IHDR øÝø, pHYs¸Œ¸ŒÌö»/0IDAT™cøÿƒ Ùÿ`àÿÁpøÇ ,þs0ü?Àð¿Äþç«AÒ7&â5IEND®B`‚ pix[31]: xres = 1200, yres = 1200 ‰PNG  IHDR ñ6XV pHYs¸Œ¸ŒÌö»/4IDAT™Eʱ ÑÛJ¾Ó9Š¥¥bŒ±^sp˜pEH$Ȱaéšbˆ&zx§g öÔl=ÓIEND®B`‚ pix[32]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒÌö»/PIDAT™cøÿ¿„ð70||ÜÀpþgÃü ûÔ,Ú 30$ƒð9†ô>n`Pïm`Ø$ÉÀ0ãÃù? ?õ³CÌA Ð(J=«P›IEND®B`‚ pix[33]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒÌö»/KIDAT™=Ì» @P@Ñ›(Œa#Á*·S¾HJ‘WðâBqÚÃyÊ£”ãSÈVË^I ²6™{é2¢Œ“„$í"õ-ïà¿^¥K6ik fçIEND®B`‚ pix[34]: xres = 1200, yres = 1200 ‰PNG  IHDR øÝø, pHYs¸Œ¸ŒÌö»/1IDAT™cøÿƒˆ$Îw0œ?C@¶Ã  Ãù ç ¡ © ˆF0MÑ!mN\ÕIEND®B`‚ pix[35]: xres = 1200, yres = 1200 ‰PNG  IHDR*òt pHYs¸Œ¸ŒÌö»/6IDAT™cøÿŸˆ>00<üÀpþ/Ã| úÏ ÿŸÁ ɃP¼ÿ?Ãñÿ ~0ü`d€h#³¬#ÑP©ÙÎIEND®B`‚ pix[36]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒÌö»/3IDAT™cøÿ¿„ØÎ?âŸ@ü„ÎÿÃAr 5?€ø#n`hà‡˜ƒ„+Í.˜G2’ IEND®B`‚ pix[37]: xres = 1200, yres = 1200 ‰PNG  IHDRêC/ pHYs¸Œ¸ŒÌö»//IDAT™cøÿ‡ˆ€àù0úÂðüÃó7 ôø Ã($D? ¨¢Œ#é';»™}IEND®B`‚ pix[38]: xres = 1200, yres = 1200 ‰PNG  IHDR øÝø, pHYs¸Œ¸ŒÌö»/(IDAT™cøÿƒˆ€àùúÁðü=>Áð€Ê "!°.!'Q«ÓR;IEND®B`‚ pix[39]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒÌö»/;IDAT™cøÿ¿„ÿ040|üÓÀpü_Ã} ž³Ç‚å00ÈÿÊÕöƒÔñ þÁ1 fZ/'»r$oIEND®B`‚ pix[40]: xres = 1200, yres = 1200 ‰PNG  IHDR̤90 pHYs¸Œ¸ŒÌö»/&IDAT™cøÿÿ3ÑóÿXñ †Çÿ°ËÁ0H?Ì,(Ïš2lõPÄIEND®B`‚ pix[41]: xres = 1200, yres = 1200 ‰PNG  IHDRô3h pHYs¸Œ¸ŒÌö»/IDAT™cøÏðŸá9^ÈÀðº6„_®”IEND®B`‚ pix[42]: xres = 1200, yres = 1200 ‰PNG  IHDR ñ6XV pHYs¸Œ¸ŒÌö»/IDAT™cøßÀD ŸÈAßøMΛDœ .IEND®B`‚ pix[43]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒÌö»/GIDAT™cøÿÿ3ü``xþùÃóç@|ˆç±ý†gõžå€h ÿ¹<÷ñq ~ ÄøPÿ˜YP f5(cclóIEND®B`‚ pix[44]: xres = 1200, yres = 1200 ‰PNG  IHDRü(( pHYs¸Œ¸ŒÌö»/IDAT™cøÿˆþ1<'ý€¢L `¥‰*ídOIEND®B`‚ pix[45]: xres = 1200, yres = 1200 ‰PNG  IHDR'“‚3 pHYs¸Œ¸ŒÌö»/MIDAT™cøÿÿ³ÿo`8þ_Œÿ“a¸üoÃÅ?snþÃpˆïüâê9 ÷ŠØ|Ã}u æâ~ ž?‡ýÌ,(?2ôØIEND®B`‚ pix[46]: xres = 1200, yres = 1200 ‰PNG  IHDRÁºIw pHYs¸Œ¸ŒÌö»/EIDAT™cøÿÿóÿa`8þ?á0_âP|§>áž}Ã}y îâv >Äø#ÿ€`ö? @s`æ1–µ0ùä„IEND®B`‚ pix[47]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒÌö»/@IDAT™cøÿÿÿ`?Àððá†ó?0ÌÿãÀ0ÿƒ=ÿGÅò ü$ïÀÐÿïÃñ¿@}Ÿ!úafA1 Õ.fOyk*IEND®B`‚ pix[48]: xres = 1200, yres = 1200 ‰PNG  IHDRêC/ pHYs¸Œ¸ŒÌö»/,IDAT™cøÿ‡ˆxžaxþ€áùzÂðü Ã3†ç° °.C9(= ”ÒIEND®B`‚ pix[49]: xres = 1200, yres = 1200 ‰PNG  IHDR.x"I pHYs¸Œ¸ŒÌö»/KIDAT™U̱ € Fá—X8£È†ŽÀ*gé Ä(!Á;¹Òâ«^òp¡ï¢VqwQf¦ÁÿR°è™ÓÄõŠgˆ¶ KËú ÀèÌ)ôBIEND®B`‚ pix[50]: xres = 1200, yres = 1200 ‰PNG  IHDR*òt pHYs¸Œ¸ŒÌö»/8IDAT™cøÿŸˆøžfxþ˜áùgzÎðŒŸá‰=Ã3y†ç@ÔÏðü8LÍG† `Þe$ß ¼*™IEND®B`‚ pix[51]: xres = 1200, yres = 1200 ‰PNG  IHDR “ pHYs¸Œ¸ŒÌö»/;IDAT™cøÿˆ0ôO`Ø?Áˆ>€ÿ†† þ70ü?Bõ@4A΀¬ †ÛêX_šIEND®B`‚ pix[52]: xres = 1200, yres = 1200 ‰PNG  IHDRü(( pHYs¸Œ¸ŒÌö»/#IDAT™cøÿáþ? °©a°«a¨«cøGúÀÇÔC! ”³âIEND®B`‚ pix[53]: xres = 1200, yres = 1200 ‰PNG  IHDRÁºIw pHYs¸Œ¸ŒÌö»/)IDAT™cøÿÿ3ü``xþ?xü‚ÿyÀðáç†Ìs0Ž97EÑÿÔIEND®B`‚ pix[54]: xres = 1200, yres = 1200 ‰PNG  IHDRÅO™J pHYs¸Œ¸ŒÌö»/@IDAT™cøÿ¿„00ÿÓÆÿñφϿ>~†àßøyß÷@ìßÀð/ˆå!ø¿=ÿGÁ ÿ1ýv«ùœIEND®B`‚ pix[55]: xres = 1200, yres = 1200 ‰PNG  IHDR9Z²€ pHYs¸Œ¸ŒÌö»/LIDAT™cøÿÿ?3þÀpüóO†ãøáo†ç?3<> Ä7€xÆw†Ï{ÒÁø£]>ÃÇ:}†uü ?þƒ°<ÿü?Ÿfq7Öš(…IEND®B`‚ pix[56]: xres = 1200, yres = 1200 ‰PNG  IHDR*òt pHYs¸Œ¸ŒÌö»/DIDAT™5˱ € @Ñß1£8¢#Ü8” Aa‰  '1!yíÃŒl¸A*hE3-Ò„yðþ¦çúI ÔÀ•ˆŠÜ¬¸}&hg¹ÀIEND®B`‚ pix[57]: xres = 1200, yres = 1200 ‰PNG  IHDR*òt pHYs¸Œ¸ŒÌö»/9IDAT™cøÿŸáüö¿ Çÿ0<þÍðù3ÃÇç ?Þ3ü8Ïð'žáŸ<Ã?{†ÿè;P# ë÷#þ#çD7IEND®B`‚ pix[58]: xres = 1200, yres = 1200 ‰PNG  IHDR*òt pHYs¸Œ¸ŒÌö»/AIDAT™5ËÁ À Ñé$¥¤4K°¥@–ñ Và- ìª‡wlºx Q‰œñ…îm$~ÓÌ'ª("Vk<&öˆ%B0 pïIEND®B`‚ pix[59]: xres = 1200, yres = 1200 ‰PNG  IHDRë ¸Ø pHYs¸Œ¸ŒÌö»/IDAT™c` ´ AjUná[øæmIEND®B`‚ pix[60]: xres = 1200, yres = 1200 ‰PNG  IHDR •:¾ pHYs¸Œ¸ŒÌö»/?`øý€á'ý£ ôˆþ/`øßÀ4áÿ’Ù'&ê=IEND®B`‚ pix[61]: xres = 1200, yres = 1200 ‰PNG  IHDR:7b« pHYs¸Œ¸ŒÌö»/IDAT™c`a``xB$©ýÑ5Õ( YIEND®B`‚ pix[62]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/+IDAT™cøÿƒˆ~€Ñ§ †Ï Ï-ÞÏ`8?ƒaþ ²ÀQC)+éÇ7E+IEND®B`‚ pix[63]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/IDAT™cøÿƒ06q/)P=7IEND®B`‚ pix[64]: xres = 1200, yres = 1200 ‰PNG  IHDRÑÙ¨ pHYs¸Œ¸ŒÌö»/IDAT™cøÁð‚áà ††   ?AóQqù+“IEND®B`‚ pix[65]: xres = 1200, yres = 1200 ‰PNG  IHDR ÏÉé pHYs¸Œ¸ŒÌö»/-IDAT™cøÿ€=|À0çþ†`ô ¡/ÁŒl$Ú0u˜Ã$o KåZIEND®B`‚ pix[66]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/1IDAT™cøÿƒŒÎ#¡3 '8Žw0?Àpþ:ÁpþC»CCP#*}‡'G› D´IEND®B`‚ pix[67]: xres = 1200, yres = 1200 ‰PNG  IHDR Ë<9& pHYs¸Œ¸ŒÌö»/'IDAT™cøßÀ€‰>40œc`˜Fö $ßÀ0¿¡á¦.[0­.IEND®B`‚ pix[68]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/1IDAT™cøÿƒá¿Ã? †ÿ3èÇ †s óg€=’" †¾ @QÁ%!ß"Cë IEND®B`‚ pix[69]: xres = 1200, yres = 1200 ‰PNG  IHDR ÏÉé pHYs¸Œ¸ŒÌö»/*IDAT™cøÿ€}H`x®Àpža~üê£ã 0unÇ$Û‰¤ùÝIEND®B`‚ pix[70]: xres = 1200, yres = 1200 ‰PNG  IHDR$þR pHYs¸Œ¸ŒÌö»/IDAT™cøÏðƒáÃ{†óPØÈÀgà 3Ãîè B—šIEND®B`‚ pix[71]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/8IDAT™cøÿƒ=øÁp†aƒ½ñU04ü`8ÿƒáþ† :ßÁ ‚Á‚f0ô[K'è6”4IEND®B`‚ pix[72]: xres = 1200, yres = 1200 ‰PNG  IHDR)à"_ pHYs¸Œ¸ŒÌö»/(IDAT™cøÿ‡¡ÿÿ†ó¨è„ Ãá†ãgÎcCÌ€QÚ)1CÊèIEND®B`‚ pix[73]: xres = 1200, yres = 1200 ‰PNG  IHDR:7b« pHYs¸Œ¸ŒÌö»/IDAT™cøÃð‡á Þa€°xÀnÌÄހ˷â;DëúIEND®B`‚ pix[78]: xres = 1200, yres = 1200 ‰PNG  IHDR)à"_ pHYs¸Œ¸ŒÌö»/!IDAT™cøÿ‡½ÿÃÀ!Ãp¸‡áø†óØóL]Ge*±»Ù8IEND®B`‚ pix[79]: xres = 1200, yres = 1200 ‰PNG  IHDR -òb pHYs¸Œ¸ŒÌö»/*IDAT™cøÿ=(`8gÀ0_€Á¾Œ@‘ü†ùÚ @ 0tn$±ÇF-IEND®B`‚ pix[80]: xres = 1200, yres = 1200 ‰PNG  IHDR)à"_ pHYs¸Œ¸ŒÌö»/.IDAT™cøÿ‡½“aàáa8|„áø†óІóoÏa8`Ãpþ3 )µê*OšIEND®B`‚ pix[81]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/(IDAT™cøÿƒýˆ`xÏÁpÃü öHHŒú$Ì`øŽ„â# 2ƶ÷IEND®B`‚ pix[82]: xres = 1200, yres = 1200 ‰PNG  IHDR Ë<9& pHYs¸Œ¸ŒÌö»/ IDAT™cøßÀ€‰Î40p00k`8ÞÀpbÆ¢ Ü=!T’2nIEND®B`‚ pix[83]: xres = 1200, yres = 1200 ‰PNG  IHDR Ë<9& pHYs¸Œ¸ŒÌö»/-IDAT™cøßÀ€‰60Ìi`°k`°o`o``l`hh`øÀÀPF6` ]TÑ—ª÷Ö%IEND®B`‚ pix[84]: xres = 1200, yres = 1200 ‰PNG  IHDRÕõ • pHYs¸Œ¸ŒÌö»/"IDAT™cøÇ‚ïÎ1ôñ9†0€‡1üC@ñO›1ùBMIEND®B`‚ pix[85]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/ IDAT™cøÿƒ?ÁÀÏ"± †c 0u(´)À‰4IEND®B`‚ pix[86]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»//IDAT™cøÿƒ17€Ðù Ço0<ŸÁðxÃg †Ï +~ü¡?Xt N*µ2”(RIEND®B`‚ pix[87]: xres = 1200, yres = 1200 ‰PNG  IHDRl3~ pHYs¸Œ¸ŒÌö»/?IDAT™cøÿÿ.Ì|ŸùÃùþ Çû70eŸ#à8IEND®B`‚ pix[88]: xres = 1200, yres = 1200 ‰PNG  IHDR -òb pHYs¸Œ¸ŒÌö»/0IDAT™cøÿõ70°O`xnÀð¸€áÆ`ô¡€á[Ã;†ó ò ˜ºùs(FÈ'ZIEND®B`‚ pix[89]: xres = 1200, yres = 1200 ‰PNG  IHDR)à"_ pHYs¸Œ¸ŒÌö»/>IDAT™cøÿ‡5·0070?ÃpüÃó9 ÷0|¶¡5 ?€èß? ÿ0ü£ß>ÿahÿ0Â*7ÞÒ€£IEND®B`‚ pix[90]: xres = 1200, yres = 1200 ‰PNG  IHDR -òb pHYs¸Œ¸ŒÌö»/4IDAT™cøÿ`èg`˜oÀ0Ï€áOà ??0|þÀðøÃñ ý€CÙZ'éY‰EIEND®B`‚ pix[91]: xres = 1200, yres = 1200 ‰PNG  IHDRÑÙ¨ pHYs¸Œ¸ŒÌö»/IDAT™cøÁp‚a´BLÑ ~}1‘FIEND®B`‚ pix[92]: xres = 1200, yres = 1200 ‰PNG  IHDRØëyÒ pHYs¸Œ¸ŒÌö»/IDAT™ch` 4 *²:Uq™IEND®B`‚ pix[93]: xres = 1200, yres = 1200 ‰PNG  IHDR>²– pHYs¸Œ¸ŒÌö»/IDAT™cøÀ`À0BLQ††hqQæÈSÔIEND®B`‚ pix[94]: xres = 1200, yres = 1200 ‰PNG  IHDR Â×™\ pHYs¸Œ¸ŒÌö»/IDAT™cøÿƒ?:ø€aÆ ; ÊþÿÖü.’Q8H¨IEND®B`‚leptonica-1.70/prog/weasel8.149g.png0000444000175000017500000000605510400443670015217 0ustar dandan‰PNG  IHDRRI™ãñ¿PLTE  !!!###''')))+++---///111222333444555666999:::;;;===@@@AAABBBDDDEEEFFFHHHIIIJJJLLLMMMNNNPPPQQQRRRSSSTTTVVVYYYZZZ[[[^^^```aaabbbcccdddeeegggiiikkkmmmoooqqqrrrssstttuuuwwwyyyzzz{{{|||}}}€€€ƒƒƒ„„„†††ˆˆˆŠŠŠŒŒŒŽŽŽ‘‘‘’’’“““”””•••–––™™™šššœœœžžž   ¡¡¡¢¢¢¤¤¤¥¥¥§§§©©©«««­­­¯¯¯±±±³³³µµµ···¹¹¹»»»½½½¿¿¿ÁÁÁÃÃÃÆÆÆÈÈÈÊÊÊÌÌÌÎÎÎÐÐÐÒÒÒÔÔÔÖÖÖØØØÚÚÚÜÜÜÞÞÞàààäääæææçççéééëëëïïïñññóóóõõõ÷÷÷ùùùûûûýýýÿÿÿmx9 pHYsb&2 IDATxœµ˜ý_ÛÖ‡/A3±hqÓ©¨ã%©¥(¢§©!Sc–º$sI&нÌ8H‚VÔ2ˆ @,êâ4ræÎm•Fðν’m½8¿ì³ dôø{^î¹ÇBîÿÜÐÿYxçy!bø¤w,à·øyüÂNûÇ"¿ÈïD×;WN§ý*zØøÑ³—­­VËúÁzf›Öù³sËôíÜüâºóæMÉwì6\óª=ìö+x§ÝZ`ç†î“NO½×³3óÎBÛq‚ÈùÎP{åX-¶Öh=+¥è,ž™§¦aÀ X~þ‡vÔñ·Yˆvˆ5æwš:2Î Ã81 ©V«)†™çu;¤RøéíLϰç/0²„Ve‰''ÆÙI3Ç"j¡ìY^ÐZ?‘\·ÛÁGì,ÕS Ä}´¬Èò½ÑŠ¡Fe‚ºšß(•Ab )t‡þ˜J’nˆõÔUÃ8~šOe˲"+Ûh/~‰¨Ä×çvZÖô—@|vœú3 ¢]Ê]ª(˜(ׯ¡òPùkX%Èx Ñ2´ƒ§Dä?-SJÕd°©„ªéê.üº+WÙ”xŽ‘ÝÒÒu=ÎtºÝ–¡5uÓ‚Hš'¦õ,7»«Èu1‹Øi´„}†ÇåqíÌÈ/h/¢Ñq¢ÚáCBy®« íÔä¦ï}ÌÐEÑ“Ü6øŒý¿aœ@EU꺅Ea ù!tlˆšnÙ UÕTÝl²g–î­‹„Gl‹ÊA…æcŽÓØÂ@Ï4 W)4Yİ="O&*«TþäÄ„Xþø:ŒlE PU¤Lxnìk:‡2âž"ïÊ=ÁŠhÕ85âé1:®ã€Ó—¦â§C,²Î ¢"û)黽+/Q ´/b±´ &áBž{.6›Zå$½.Lé=WGÇ5?–Ẵ=¢‹{DÝs[ý^¢Ç+œÒÃ*²0"Љb Òv×§v,=d8žZãÎXeÀ ¾ÊuŠ3NNóB£åDD"Ñð³Fåw•€ÆÊWðû>wÚñT†bɵ‰wl#¨ðàP‡8645›¨nn,’ù(3•¹Æ&TªŠyPN÷Ñç$–‘ÕƒEÛ6ÔbØçƒ&q[UKÔ»4BÉÑääÔ‡Pí“™\y«çý“҇IJ"aù…¨i‡„¸¿¯î—© }$>ÙUìhuOVv•~hs¨BêÒ‰!-Ò;ȳ—k­+±’FL­@‰^Š¿YVú¹!ÈZâñXÒu»¦Z“ÈjñhžÓZCÊRô­¿Aÿ ¤9|xžQ‡ªtCW%8?Ë÷}CÉÒôòã~¶²bz‹Ü¯Ðu”«´p…cˆ5¦¥ƒÏ UdP•½N¨ò`Zr.¶z,¼ R@†aY-»eáv&qhòëÁµ{¡†±7ðýO( EBòé-«7ª<7!j)5’—ûg°‡oÕÑT´mð&î¼N‰+Kf $>?bCìfÈG9þ—.s!–ŒìvÕ<7=Í2\N̳Ùëôä×»Á>ÖW¦ìÆÀQ Išº·ÃjÒ)Dlyý^y³úd˜*Wz[O@WlŸhÛ–uR#Ìd!ŠJL°õP$‡9.Ë ¨tÃ*m¼‡µ²ÓÓÓ)ŠJ‘ëuqãþò™«‘«Å»ëõhP•™øvfc•&—͉•„ÑãhâÚZ] ”¡”?›„O›©ËJ°9ëDÒs\W·¨kÕêÚÔ8´œ[ÁÝáÉ´¡DzÒrD¥ÌÊÐÉ“ÒCÂÆQßàK¶7–`ßž¬÷®.2(U¢g]¦¿@’¦Ýcu©[dÀý V9;׿¢zƒ}B²"~r <λy´É#ÄǛƯýrœ?ö TÂ\¡~ÀÁçöû >¢HÊ&*³äõªÜ_Iž2Ü‚ù§F×óÜ hzb'°Qsw xìC¿Z‰m„v5ð}!Zê<`ðd“¶VB™mœSy»ºv“¥QJ(1Ÿïq"ëG‘¬'ò:Ã7#±<ò—ém²ÅÄÄ“Ê0—’ †+‰µ‘þ‹ò0Ù#Îl†š°üx952¯µ~ «ÔɘeûÛ¶VË~ðC3|±¢ªX9ƒÁ2á%gÖ½î¤øk~ãF]ÎÆš›¡ÃpàtÍþ,Û„*ÁFÄo rjþžYú²ê·¯ÖË —PòvÓcEt„kÝëëZªá&Œ ˜bâË^ÛÝóç¬]¹~ÿ3Ql¹‘‹tuîø¸ã¼éš½íÑŸZ´ýERÊÔZx¡o‹Eb›®¼ôx güè¨ã‹ôžÎ}¬S’J)”º»¶¶QÝÚªþumí7™º€’\åÌ»¾J¬mãô¶_(ަ*&ÒY’*AŒÀ÷±3s÷»‘k»F£i!ËGDZ|m‡G—ÃÞð¢JS³®“|áòûÍ~ºóñsïòŸõ|j”$Ûc ѯ‘ XÍÃ^‚jô¦ûí¸06_X¤øÁU¶”M°åqÆ‹¬ž®$Â0Ýlx"YqùÙ•¹•Ûé+èÔŸÊ#š«œ÷ òE¤ˆÌÁè«ù®{cvœùÔ½2¿RÈ zä)_p4•®Ù„˸nçJÈ:ôÊ·š¾È2+·Rx‡*ç˜ô¢ÚiˆÊØW©@f|ó5‚ÊY¾á sW —ÍÏݸaäoÃx¾ÒvX>’ZÙt+ˆ¾27w‘ÖÛΠë>ŠრZoÂþJrÐl¤ÄZnwA]ž åù*(ûS`X£Ó¯ÝÎÅ+…E”Fs†Æ’Z˜¨ú&IE$¹®>¶r›E•!ÄRq¨J^? â¼eè%…MÁRùô½Â•ôl2- U¹HJƇª Fn!ÑueÐ|aîb7NtØÒP•óZoICã-%Ü$¡±FI¸ðo×5GÙlá=vˆÈ.S#Èh©/êýn¥¨ß1ÃJþƒygB) AæèŽçx#2ù‹OÛ€6äDY©%¹ç͆$}Çýþáˆzïvaé±@JíŒ×e¯ƒï×R©å[#_Á÷ŽCˆ¼÷áMxʾ»²RàF_†y I9¿w<ôÈ 2"o4û%”¸w‰®,¡ŸÜ2Ä®C?rÝ7 S¸M3ã䥓²*Uòl¹~ó95Ë›P‹ïqõHéde¯úPÎL¹Î”âºÇ£M×i\`ngçÆ¸£ÕÕ;éioË Ó%=à©È7Âmã1¹K+ð½ûµÂuüÂßäð½[a߬½½«±¢Ž¥ë¶­#’õAŠZó-ç};²Ú¤Ó&7Qÿ[{ѲÛÁ ’Ü÷ndu»n×öp†ž <^‡n»ÿh¾Æ¢³1IEND®B`‚leptonica-1.70/prog/zanotti-78.jpg0000444000175000017500000045613212063772571015125 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 40, Smoothing = 0 ÿÛC 2!=,.$2I@LKG@FEPZsbPUmVEFdˆemw{‚N`—Œ}–s~|ÿÛC;!!;|SFS||||||||||||||||||||||||||||||||||||||||||||||||||ÿÀô"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ÛïF8¥£5Îl©(ê)q@ ö¥9£µ ?½Fh¥J8ÇJQîhÇPi)zÒóc\QÒŽhëÚ€ŒÑKLŽ”PzPE&hÍ ½†›Ò” Ñp@¤õ§w¦!¦–ŒPhqE”´ ç­6Œs@…¤,AàdQÒŒûR î¢QLÒÒ1@/zJ;PⓆœ:PQKÅ ¥¢é@ ß­-&iqš3Ÿ ÑÚ€(úÑGÖ€Qõ¢›@‡QIͨgŠ^ÔÚ/9éKIÞ—½QÍ ¥Š\PQE (Í @#“·ŠE!…8Ž1Ò‘bã4´êhâš%%)¤¦þ4v¤´˜ f—4PÖŠLRÐHÝ)i  ¦)sÅ'^h éEPš3E&;æ€4v¤Å/4RÒRô ƒIïE( Qš3@y¢“½/zSÒ“šRx¢€ûÑœ SIÚ€ŠAœóN Žôsº–€w4ixëIÁ8 =))i:ÐG9£PŽ”ÜóKéF9 ’–Š(¤Í-%Š(¤ïE7­-)¤ bv¢Š;R 'ju6 IN"’‡z)qE zSZ’£=jF>Š(­I :Š( ;QÚ—š(íA4QÞ A¤< Z`(é@ KIEŠ3íE/jN”u£PF(¢€)zæŠuÜœâŒÐKINÅ%¨¤´QÅ€ J^)(y¤Á4¹¤¤Š\Qš:ÓíE%€´¢Š(”£Š( aßšŽ?3{‰6íÏËJ’Š@QEÀ(úÒÒP Å(¢Œñ@ Šgzw½hžô´3@‚Š(  8ëGZ1@/†ŠZ)8¥ “ïEQKÅ'j94QÍ€ŽÔ”PŸJ\Òv u €h¢€“ Rm̲zt§m怴Z()Jq¦‘‘@éKíBŽ:Ò†Rb–@•cÆî=©à8£½- QŠ;ÑÞ˜¢“µ( ¥Q@ sð¤Úǩ⌚Q@Q@Z(¢€ Ð9¢@ IEhö Š\Ñ@&Õ8äÒæÃ8ÅŠ)hM2–ŠJ1KA4„Ñ@4v ¡¢Ž(Î((¥ ÐMïKšNôcŠJ]´”Rb— ¢ IKIŠCŽÔRö bt¢Š\RµëR‰ºÔŒô¢ƒÈ¢µQÞŠ((¢ :ph"u¥¦Fê1F1@ A¤íKÚ€”´”´”½©)q@¤*²lžÙâ¥éÒ’€hÍŒQÖ€”RⓃ@/ÖŠ\PqŠ>”qKŸZLÑGPŒÑEh< @sJi0RÒPKÚŒqEQERcMÎMŠ)´ QIEh¼RbŒRÐz\ (ÍQE‡ŠZLP0ëJzÒcš~}EF)i(P8=ih( Òr1@ øR撌К%-`u£½/j;PIKE'JP(¤½i(éEÒóš)hœæ–н¸¤4†Ž”´‚€ŠN©E…´˜ÅŽô 3ÍÐ ¢ŒPŠ9¥Í&h)qEw¤¥ÍP(éEt´èé@ ))i8 ¢ RЊ(¥((¢“¿Zw^´”´ÒÔ´v ô¤ úRRö¤÷ Í”´œQÞ–”P ;Òâ’ Þ—ŒÑIÞŠh¢ƒÖ€Š(4v¢’”ô AAéH8¥ ”QнŠ:ЃFA¢€(RwëK߃Gz'ÒƒKKøÐh¡³ÚŠCÅ(£ð¢€ N´¿…&=h4 Z:ÐïÞ’–’€ ZZJ0hã4´´bŽôv£µ:’“4PQHà²ðpiX˜æ€Î(úQÚŠZCGz(9¥ïIÒ–€ (¢€Ô©hÍw¢‘€Å-AÒŽ‡Ú€‚hïIŽ(£Rö¢€îõ4êiëKœPÒP( QKõ “4qE µ ¥íE0ƒE QE-'jéh1Í´˜ô¤ÑÚ›ÞL4¤â€ QÍ/Z) m¨oj((¥éIH¢–Ð1h4QH7Jˆõ©›½@ÝjFMHiM¡"R÷¤úÐ:Ó´´´”´s@¥ Å±G4P ¥¤Û@é@ IÖ––€ÔQúÐ(Qš)1@…fŠ(Ï4wàQE-”´””RPÑFi;Ðh¥4‡­ ŽÔf“À^Ù¤ÆE(t¤hQÖ–“½:€ŒÑJ(Ru¥Å ò;QÞÅ% (Å-%.(¸¤E-£ÄP QÞ—Òâ€izt¢“žÔ¹¤È£¸ éÍ(=èÅ&(i3KA 4QE-) q@sKŠJ(¥ÇzLÐ9 Q@ (4”´ƒŠZ( ’Žô¸ ¥¤Å-t¤¢€ )hÅf“ŒñE.i7cÒ—m 4Ph QGj1@ KF(â€ôfƒJÍ! ÒœfŒPQA£iõ <ÑJ)h§­&IëNïÍ æ€ âŒÐi(ihéE'zLö¥£o§Z(æŒc½é”S©1LRö  AIÞÞŽôè<Ò÷¤=() øZpÒb€Š\SO¥ Ú––“Š”fŠ@ ÁïEÒÐ04QE Õ u©š¡nµ#DæÐI㎴ëQ Åzæƒ@ :ÑÞ€hë@Z RŽ´AG=©{Ò@Ã9 Z;ÒÐ ¤ù‡¸§QHbgŠQHzRñLE /Ö’–€ ) æ–€4¢Š(£4Rt ëF9¢Ô¸Å!Å'4j;Rö¤íF=è{Q@£é@¥¤ÍŠêùÚAÁ¥ïH¯AŠZ^´;ÑI@…ïGz3Í )hëGj3Euæ€t¤ÁÏ{:R´”QLïKIÖŠZOŠ% ÒI¶€ 2ZŒñK@x¢–Š(SM8t €i)E{ÑE 9¢“Ò÷ ¦ŠZ9Í-ŒÒPÒ}ihÍ&M.i)h¦œÓ‰ö¢€P9¢€h(ÍbŠ2( ƒÍ%€{ÑŠ(4qE –€ir)3Iߥ-¤¥ œQ‘KIŠ( Q@- PÞŽôQÞ€ PMu RÑGðÐQJ(Ï4„ÒÒw¥ë@½)¾Ôc½¢ŽüÐÒ ^”SH’Š)€v¢ƒIÚ€ ;QI@4€ih¤1»yàÒa½iýé!Üè¥Å-7o¥:ƒM ØÒÒƨ›­JÕ ëRÆOIÞ—4‚µ$u'µéH=èÜÐ(ŒPwëKš;ÑŠ3ÖúÑG¶(¥´ƒ#­/z(÷¢”të@„¥âƒ@  ¢Žôw ÜÑKš(:RÑEQ@P(¤ Pi-!æÒšNÔ¸8¥íE é@Z;Rö¢€RÓis@ëEè €hïHh éE­"ñšwjJ)´cR´sL¢€ih”RÒMê ¤ê(ç4RbšZ(¥ äæ–ŠZ £4Pi1G4R{Rt¥â“¥0h£š(¥Å%RÓihqš(¢€ J( –Š(¢ƒÒ“¢Ð@£µ€ŠNô½hï@¢ŠJ1E€ ZtïEPÒŠ3MäШÍb€ÆŠ=¨Çw¢ŽÔb€ :ÑGÖ€ ;ÑÞŠ4QA ”ò1Ú“µ¢“ÑšNôê ¤íE-'ZZ((ïKšN¦€KøRP(iåEJ1IŠ ÷ bQ@ëÅ ƒKÖ“¥™¥Í k Ž”™*pß§ö¦2ƒHzˆõ§’GÊi†¥”OH(¥íZ’è¤ë@ã­/J(£u£½(Àí@÷ëE.(=i›õ¥â£½-¥1ih>´w¥¤þtQŠ)hQGj(´QÖ(¥¤ ¤¢ƒ@%w£­È£ÒŠ^”f’Š(¢’ƒõ¤âŠLÑL¤¥íFh¥Å!¢€ "ŠPx¤ÚŠ(Í0 )=èë@þt‡®h ÐöÍ(ÈÍ:’—4Þ´^”RfŠSEuŠ(¤9ÏlQ@ ô£Ú—­%QHA £4ŸJ\f€ LóKF¥¤£ë@QGÒ€ôcß4QÖ€ Zm -“KÆ3HzP(Í-7w4f€žhÅ6ŒÐ±ÍŸ€“½¤æ€¸¤ PÑIG4´Rb—ñ ³m‚iÀät¤Å/j@裊)€¿JLfŠ(=(S‘“Å ÐA£PRÑFxÅ.A£4”P-.(éF})(µ4òy0¼˜ûªZ¹.Öo乺£^ÔÒ®šíƒ±_;QWã‘$@ñ°e=5N}Êhö˜}ׂ+ ÚYô]SìÒ6è\ñô=騮–£iW,Ê¿SIé!!\ޏ9©J*º[kʽ S&¿¶·`²ÌŠÇ¶hÎqG4ß16o,6ã9Ï 7Öײ)‘ßгKQ³*.X€sP&£i#ìIã-éš°zÒÕ;½JÞÉ”NÄö¤—V´Š‘ä!dû¼u¢À]=©¶Œš­oÕ»M‹Ô‘UÓ]³yV4fvcŽ€-Åp³;"©©:Övµ|Ö0FéűjÑëKƒ‘éU–Wº³Y-˜#0È$Tè_hߌãš~iªy£5%Ÿ hPÃ8§f¢Ùß4+Ø47½Òv¥ ( s@y¢“´RPih)h¤rrzPš(S•Í-™çšZNô´”QøÐÒw¥¤4QFy–€ );RÐIÞŠZNôqš^ô{Ð )h€“½èé@4”êC@ E-€J(íE0E)¤€J(ïE!‰Å–“QE†u¢’ n•N*véPÒ)“MëNÆ ­Iµ(÷£<ÒšZ=¨JBq@ AëGZ;Ð÷£4™æ–€GÖŽô :›Ú—4QERÒQ@ƒ”bŒQ@ÂÖ›JŽ¢’Š(š^ÔPPOt£­¨£µ¥RP($uݰª2I®i5 g×"|°…²v"®êyŸìlb û½Hª­º³Å$q.0j’±®ÅÍ ùÕ$VÊdõ¬«;¥º¼·ùÜœGèO½hêãíÚOŒ7NEfÜËâÙÇh§ÎŽ:P¶¨+¸qÖ…ôô¢ÁU_ïbŸüU# t¥í@€.): \Óh£ëEŠ(¤@¢—ëLAHO4´P1â”⓽: Ú“éNüi(4t4¦“4 ^½i)ihÓÖ“|âš(¶¤¬' ÷¼³ŠÅðœ‹åOñnº>Å`O¥ÜØÞ½;§ïGT€Þ®[Ä?>¯nƒ®Ð?ZÒ:Ñlz|¾iþ÷JŠÃL•®šöÿn~Uþíž"P,#fÎН§ªÿl©±Vû>~:U¿,ÓÛ¬ÂòwJ¹¦´¯lx|§^0{Ñ}ÈÔ-£o@ ®77½å´FúÕ¶ÿ¬m­ïÒ­jÖ—ò»Uñºj·Ô5 Øæ†8Žï­hj–ï&–b¶S…Çʽǥeé’ZhÆD/m2 ¥OC[wñÊö޶í¶NƱ㱾ºÔ#šá%\n9ëŠÀO¬n¹¾¶²-¶7ù›êytkMˆÑ¯’Ès¸Tšžœ×^\°¿—<_uªÌ­ÜBZ(ãþ&SÖñ «ÙFHÿ–€Sõ‹x†ŒØEÄj6ûU›Ëwd /´ŒoqT^ÃQ¹‹Èžæ?'¾’)£§F‘éð¨PA‘øV.“¦¿tª Îã[Â6[.#‚ Ma¦“¨%ËÎ.Qen¤ `{×5â9× -ˆ×wÊ3É­}6Î[Xeß/™,»uS¶Ó/#¸–Y§Fi†ÏÒ… ðÔÞe‰ºÆÕ¥q2ÁÉ#asY:n“ygp$§–Oθê+ZîÙ.ax¤û¬0h`PÓ¯…Üì-ÙŒ]Õ¤Ÿ+­¦éÐØ£,e˜¹äµZ9WéÅ œÔräb•åHú¶(Á‘³Ú€%SòŠw4€qC64€)GâŒPíIÔÒÐ(À£ñ¢Š1AŒQGj(v¢€Š(ï@ ecÐлóÎ)ôb€f–Š 'JQÒŒqE'ZZAFiw¥¤êii€”½©4´´RJwzLQK@ lúÑN4˜¤Ú—µ!¥è)€”bŠ ŠJ3@!ô´†ÆöiCN¤*jQ‘M((ؾ”êJFŒvȤÚGñš@$‡Œw5ã¥?nŸÖ˜Ýx©(˜ÒQš+RE¤9üh¦€“P8 Æ)ZPsGC@9£¢–Š(¢Š=¨Å… (i1Åh `)i)hRÓ{Ó¨¦óšQE.}©){RQÒ’õ ŠFû´ÍÜS6ÛO´’C,«9êMbjá#Ö­UcP£ouæºALx£‘·2)aÜŠ¤Àt@ÀJq£eQA>‚•Wšq\Ò®„Ž)@;yëOÇÒx ¥“ÖŠZJ( ¢€ih)¿1ojuhÈ¥Å%Z1E! bÑGn(^””¹¦÷ ¢ÏZ(sÍ’—¥5ÑdB­ÐЊ@©{Qͦ÷§Rc€ZJP9æŒs@ Ç4ì \R¥7Ëô¥ÙÍ>›@ ûËÈ¥ÛN¢€›x§Q@ ÛFÑNíIÚ€»GzZZ6ÒlÅ:Š`7ÔÍ;4‡ë@íKÚŒRÒ&E8ʌԣHi{PYˆ< Ó¨ ÐE'j3ób€‡ŠQGzZJAŠVŠ(h¢–€ !¢€”½óHFx¤ƒí@ KE-%`ÑÚ€i)y£¯jJ@Tô¥=)ªÒê9=)i3ŵ%&áÐӽ途½éäñK@-7½.h<ÒRÐÒfн'JAÍ:šAÍ :sH¼“KÎqJ8 bQ@£µ ÑE! Š( bÒRÒ•,·J„õ©BÝiMIE/ZÔ4t¤¥í@éEPãŠ1KŠJ´‡­´Q@ )q@ Š(¢€ PGRçPIKÚ’€¢Š( ZJ(¥¤šS@ ÍI@ š)3K@ 9¤§Ò) LzÒzÓ¨9¦ Ãc Ñ”[¹·Ë—5›¥ê7w7²[Αâ>¯­;²i¸¬fêúË@c0œ È5nÊK•·i/Œc¸ÛØQ`-‚)G52$©½2· Ô¢£4 Z){SC)èAÇ¥ "NF½:–£ŽEoºEG Ü3K"FÙh΀'ïKLwUv =Í!•wP¾¤ÓúZŒÍPÆEÁèsAž%m¦EÝéšCzsKšŠˆæfÙØpjNô(£>•·pDûd•ú  ø¥ªïs Ï*¨<š‚ÛS‚êcl í@Ô†Kˆ¡ÿ]"§ûÆš·3ìIP¶3€{PôU?í;MŽþzíC´Ÿzž;ˆ¥‹ÍŽEhÿ½š—ð¤5GûbÇvßK§Ë»-T¼Cp¤Ámƒ–pIǫך„J»†ù…Uêh°ŒŠÍµÔ'’ãÊžÕ¡ùwœŠ¯6·&${kc$13–Åk¥¨,î’îÝ&^Žž•+€TŠ\óKŸJ®ò¥¼ #Ÿ•Me[ßjW‘5ÄƱò«uj,†«~ö V'¯µMcrn­#œ®Òã8¬É¯ã¿Ñ® ù) §±¨í//m´Ø\Z«Â‰ÙþlS°ìÁT“ÐVDZµÄ®¬¶lafÚþ4ë@M¤=ÄͽHÀþnŸu¶‰®xTÏÖ•€ØíM¬6Ö&VÛÊòälS–Zuö©sm|¶ñø:ü§ûÆ‹´(ÆM`M¨júh–EA*¾Ú¤º¾»[ W…ÓÍ•€¡&¡¼ˆ©ÇX >”†“4¹ÈÍH E š%QšC (¸ ’–’ j…ºÔÍP·Z’‰QZ’QŠ\PA¤< ^¢€ ZNÔ¿…ZCƒKIŠ(£RЊZJ(4PKE ŽÔ½i ÀéGQGZ\b¢Rô¦RÑÖ’€ÒAéERŠnõÝŒó@aëHFi$ƒKœÐ&ášJA÷¹ ,zçôWTÔo˜çïS[Äk é÷Vw’\Ùm‘dûÑ¿ÀRx§¸nâ©YÅy,sªí{Ôé½eùÛŒt©oP±>î3U56‘¬]b•b'«±Çg±ªZÅœ—¶J°‘½X6z`fé¾]¾¬‘C+:´ybOÓ£·4jìÑ:’Ëžõ/Øoþ× ÏîU•v0…>k˜5sdªÊÃæV4À¯£ªÃ©\[¬…•TàÔzNš’ÝNÆY“/¿Zµegzš³ÜÊ‘ªºá¶ššÚÖöÖöcÆa–Mʼnæ‹FRÚ–£r¦'‘bùUCíÅ:k{ˆô) ul®ÖÎOs§^Ã~÷Z{/ï>òµXX.þÁ2Ìë$î§è=¨ˆö Ú2]ùÌY Û©oìUl’ôÊæG·ÔнŸwýŒÖmå«3žÔë:êãNŠÐIÛÇžÔ\ Õ-ãÂÅFãêqV3óT6q¼P$r0fQ‚EMÞßNÐZË" ²©"°´­:ûI%¸;䑾ð<Šè]CeXeXb²HžÖFWF8Û’¬¹Å0"º·Œê–¶’gÊõ?ÅíLÕ¬ãÓÚ íÇóÆzÖÖ˜.b‰d•„±ýÙG\ÓSLg%»§1ýÐFS¸ò¿µË_Ýÿw»îæÒ?2yö|¡È½ªK“5Ö±²ÚU Á†E>©âÔ¾Ç1Y]Á•qŠ­¦ÙÀ×׈ñUo•OAMMðè—Ée` ­8¬V)e‘$“t¿{š}¶› ºÊ»Ö_¼ä.2 ´m)ÚÑùy'Þ³ ó.4I¢™ØÔ•rkKûÜEyV&<ÆŠš[5’Ñ­£cŒãµ(Ï4‘øq^#ݨÈô«VÖ–ÒÙB¥”Á½êX,R;Sm#™cÆ>oJ‚b!Vâo'9ò÷qH/)nn+O2ǧR¤³ŽOì$FUo”ä7¥K.vó‰¤O0a•OZšÒÁladWwSÙ¹Å)xzÞ1d²˜×~æ±Î*-31Üj + ü Ö…–ž–…ŒrÈPôF< …ôˆ^á¥G’2yeFÅ1ô¤ §ß$Š0daŽÔhvVÓØ¤ŽƒÌW?7~*ôTp[ËrJ<έ»š,4´±rc–VøXñ@ÕmBþ=>6PÄŒ °ßJ¯¨({V8ö\gš@:Öò;ÈVHOÊ}{Tێꡣص•¶Ù>ûÄzUý¿=&NêÍñ:[Ÿö…júS$…&‰£‘+u€0µ+˜›G…D¨XíùA©5W_?Ml›ÁÝÚ¯cXªãìëŒ÷54ÖPMÄñ+"ýÑéL zã£iTçüétm§Àc »n¥}*Úh–'÷i÷W5-­Œ6A–Ú¯4t'H¸†Þâùe‘P™IŽ(ÓfŒé×ùe?3Òµ›k,¦G·BÇ©ÅI…´JË(þðÇZÂÜŸð‹ã+ÓŽiú£¯ö ºî\»G­lµ•¶Í‚öç;qJÖVΪ¯_ºé@ fÁíc`ÁQÈ©ÂÓR5‰"… ª9¤óŽµÏøŽá<ËdÝó#îaè+ Áƨä‚6å£VoR(XºÍ±Ã©ýàÂ¥Õ§íöuáòy­6·‰—6:|´æ¶…Èf‰ {­'Ä,»­9_õ ÔzÄq[]Ú]lýÞï›­5…µÃïš%vsS}ž?(FQLc€¤S«]Ár¦(%WwS½«ŸÓ~ÂÍñÄŠÇ “ÍuYÁo“ H„õÀ¨åÓmd—Íx¿®(¸ b°‹Tû:í‹(©ù 怸\£€¯yoö›9bS‚ëY:n¢¶†Öí$8~õoŽ(1£0bªHõgjãM¼žxðeÜê¤r)öÚ­ºi*¹Ý(M»1Þ· dóÓÒ‘`zF£þL ‹x§‡äY¾FecƒïQCÚ¼8#‡æp½?ßhÕ†CB)¾Z¢üªØR¸–„!ƒìÍçŒ+ ¿Ö›¨ÝDºÅ©Ü?uþÕ»å¯P}i¢ÜIE'×\ ïmÄŒeeÍdi0Í4þUÂþî×!sÜ×C· NU =hŸ¼»e¿{ỷÏ“ËxÓü=*µŒmèIlZÛ1¡9 J±¢“µ@Ï\ `ahÇo¶%21ÚE-´©6«v±Èt §Ö¶üµÝ£ò B€ä"ƒô wMº_›kx¬˜bÊØàÔÚ`i..¯ q¸Â‚95»å+uQøŠRŠGJsºK¬ï —.OÝ©4™:<›÷ 3qŠÞØ1Ò“Ë\t¢ã0íWw‡6œ…n1Ia©A˜‘’Lª»|¼rMoøÇ”‚Oº¿\P Ŭ°xx£!ßÅ}9ª÷Ú•¼úd1G¸È ç+ÓÕ2ŒsÒ£BxòÓþù Q6³n³E4q‚‡³ñZº*ŸìèÙãØÍÉã÷«æÎ7F§2)Ä0F1Í=8¨“µH ÈæŒÒÒTŒSIøQE (¥4Rv¥¤¤Z¢=jSQ0É©(–Ž¢ŽÔt­IÔ¸¤ïAÁ íKÚš:â–€µ©)zÐÖŠLóAö £µ/niÏZ@†iÔÞ˜¥¦E!¥Ï4P!)zQE-'Ö—¥  éE (¥íH( ÑÎh=()9¥¤ï@Ã4˜]ÙÇÌj”Ú½¤žOœut¢ÏR·¼}±Éóáaƒ@‹Œ¹æ¢ª\ê–ÖÎË#’WïmRqEÎ¥ ½ªÜÍãio¥ç5FÛSŠäɰ7î×qã­U°ÖZêváp7aJŽÖ€603F*¶¤—Lˆ’n‡ï)aÔÒx&‘#“÷\Ç4tÖ©ÛêÜ]Ia·'ÞȨ`Ö£ŸÊÙ ¤9Á;x_­VŽV‡[¼) HÅW…¢ÀmŽœÑ´ÍT³¿Žé¤k$‰÷‘‡5šÔi!Û ´jûNÀО¤‘’(ÙØáPdšÏÖo¥±µd±ÆîËN‚ùÞÊI®­ÙŽF3¸P«[¨¯#ó ;—8Î*l ¡m¨[g}¨'•ÏËŠõ‡Ž13ÙȰãÿëP¦;Òõ¨¡•.aY"l« ;nÞù¤¸£h犊îäZÛ´¥öÿ Š­¤&°7iÏËži-åìJ¾~àÑsN¹¹KkVŸie?-QÔ'KÝ æQ…##?Z³r7éc¼?Ò€,ÛʳÀ’  0ÈÍHzε¸[})v—Ûàw¤·Ô¥kèíç…SÍMÊC:iS3óSûÒ´œæ—STž{k'–ÝU™yç°¬µÕ5°%ßžXûÇ<š,…Æ“mq1—çIVFÆjk]: RZ;˜äÕõ+ÈV“ fr¹Ä3V¯ïZÜà fl.{Pߊɻ¸¼ÓÊM$‹4,Øq·i5˨¯-RÙ“lÜ Ã½5ûÒÖN¥wygk£/»k€8©5+«‹Q‘²ìvÊWÖ‹Ð< ^¢²n/îîkx41®T0ûçÚ´m™Ú̪ÊüÀv45)éQ&w>}iÎ )ÁÇZ@;hÈ'µÎ[Ýêö”{…Föä­IÆ£y`î’¢4E8ûا`7ñGÒ¨Ù^K>–³ˆ÷Ë´ü¾¦ªÃ{yí´W ç¹@û”X ŒQÀ¬›û‹¸õ("†EÊ -â^E¤Íæ\ ÉÜ£P¥U²7gÍûXQó|›}*¶•ÊÙ«=É“|.Gݦé3\Ikpó?™"»ü)Ø QNÍs¶7ÝH›®Ù.üð·jè3ëH¹£R0Ü84g 3րР5˜…â¹Û«›ˆG™%à7` gåÛï@ü@÷Ç JÈ7m!{ÖÂrƒžqXþ!;¬¡¼‹œTz…»XÛ‹«I¤ œ²³˜˜Ï4£8¨mgóíã|`²‚EN:R¥â^4Ðý™ÑPÞg¸«\V. ÓŬÚ;yR7ÜÔ“\K}«5¤r´pƹb½M;·Ç­zÖ™&›©C•ä‚~>c’¦ˆ1g®ÈŽÍ²UÜ™n)¶@çj (§_Ï›Í%¸8ÆPÓ¢y¡º—Ì‘D¬Á9û£ÔT:k\bLѳ4Ùm¤õ¢ÀnûÒŠÂÒ™dž2“ʲ"þö) äúÖÞî3@4ßJBÜsYº¯˜æ4óÖsóüØcô  AІ;¨d™âGVxþð«+Dî£óâFÂ<Õ}2Â'ÔîòdýÓ¿7ó¢Àn=äÜ,/"‡nBš™¤EPÅ”RköÎ)üA:–æ©5ûuM,mDDmæ€ÚÅC ú 7 ãw>•Ÿci0‹•fó?™˜Öiòã–Õ¡y$y&ù¥9ÃPC4žT/!tg“ —²Z}°N9]Â=¿.)5k‰šöÚÊØ%ûäzQ6žlì®<‰äT)„ô  + ¡wiÀcpéImG,ÎÓ´¡ÎBŸá¬ïÀFœ®Ò»+ƒòöÕmïk¤_X’%+’yÅm¯­Uü¶ž0Þ›ªg’8Ó{ºªú“YVÖ–³hцU!£Ü[¾j¬ÜøvQ?Ì6ÓŸJÛVóS ÓæëR‚1׊å£Óà>ûD›¼Í¹S»§5=ô×é¶Q«ñ.ÕcÜÐB¬¯Œ ö4»:ƃN¹ŽþEkÃ*·Þ²Í@ iâ‘ÏVWˆ.¤·°ýÞT±Û¸v FŸÚ!ÞSÍMÞ›©åÕFY€¦²ŸjÚJü¿6ÍÞg|ã­W=߆¤irYAÁõÅ7ÄŠÝ} @—–Ïpð¬«æ'Qš£¢Ú/Ù-îIo3f:öªšu…¼ú•é‘2#“åæ2ÿŽÕ¨y-,òi™#ÀG ïV´VfÓ`.I%zšC4A4v¨¥š8|®¨¾¤Ò« å`T÷’qœRÓwñO©cÔRgœRj@%/j)(QE-ôBëKHŒõ©Z¢=jJ$¢”Òt©"ö£Åýãa½êkøc‹Q²hP,¬ø;Gjn»ûÛÝ ˜«ÐÙ¤S™YÏñ1É@bÛF·‘Mra&C•ãæ«—öñÛè2DŒ]d1>õbóG¶¹ŸÍu`ÝNӌԷ1Kl°:Ÿ,4\ZyqéÑÈŠ?ÕŽ•GGÚö÷+¸iI÷­K{d¶‹Ê6¯×4%¼ry©óS@:l«£{ç:¦p~n)úDˆ~߉ýan½«Jm:Ögód…KúÒ&Ÿoº¤*Œ7½?Ó'Ù^=Ë»Ì'è$XõÛµwP]TŒš¿Ÿonwã{RÍg®X•›ÔÐ"Mqå„åc‹ËÜÖ}ÕØ¹´Þò*í˜fã=륎4v¢*@)¿dƒæýÌ7ÞùzÐ#7\e›HFw&å9ö«isÖë"²ª|Ävâ­cò¼­‹åôÛŽ)Ú‹g”ðÅ!œç–ÓøqD?1·2­]¹Ôí§Ò ²mòûæµ¢·ŠˆãT®'Ù¢nX£Ýë´Sžƒ–úb,€†9lÕ¡Ž:Ò‘òàR`íÛžiÐ-k(õB?Jç´ÝBÞ X$“lŸ0 ]0Ô?c¶Þ[Èsu;iˆÄ·š3á–Ç Týjò]FÚòÃVÒ}ñWšÞ-»V$Ûé¶ž=»6®ßîâp]K‡UàÉ‘>SÇNj*¦¥kt«<ªT‚J÷®”"€ÖPxÅ;€On´ƒïÒ«+œ«)Ç¥sš@UÔÛm„ÿ+6TŒYp–o¼¹ ˜Û·moòâ—‡xZM"(’9 ü¿.ÞF*Kûy®EµÔ ûȾmÁ­`¼’qJšbÞ¼úœ)l–òF‘œ` ~§‘Íg,q<‹ r“[(UâZ´2]éáâFÝò¶ÃÖªÞKuu ¸û£c†ü«y†x£b€05 ÷b=›ùÜyR(þf¶lÑ㶉emÒM´´m§pÖ†b)vÒ…ç4€ÃÓ •n®fšÞL¾Jç½;NŽâÞÞá îX ކ¶ˆÍ&9  ¨`ºMŘî ûÕ?&é&µ¸ŽÌƒUùäû×EF(õne¾·’+ga Ë_¥h]Ç%ÖŸ"*í‘Ó7j²M@×–âä[”ÿ A`nRÏË–Ü#F»GÍ÷ª¶›kwoÄr*¡v,¬<šØÚ1KŽ:P ³ºšæÙçŽ8Ì?yÕ¹jÒ»‰å¶tö3.ô©öŽ)²Æ$VF$nâ‹ µÄsÜ[LþjÇч­m=@‘[iÖ䃲1Ë1©†ÙQ][*FAÙ—Ì…6ÒW®}t«ñfÐ'å}êÇ«WHTm¤ Š`dÞÚ\ÞØF™E¸Rúf›%¥ýôb ‡Š8øÜS’Õ°u£o¥8cX×bôQŠ™i»qN€ÅÔìîî5eUEŽÃnäÒÝéóÇz·¶;w‘†Fï[  Žjô7’É++Dy ( ´¹»Ô!¸ºEŠ8¾êÝÍI¬iÍz±ùlD=}ªàº…®Í¶ïÞ¨Î=ªÁQEÀ«äÉŸ•o·r®uS´ÓîaÓÞ5D›·+-kF(6 Íø»¹òÃ*m;Õòp´M4Pfu@x¤ŠX§]ѺºûP§å¬­NÆæ[øn`ØÁ?…Íi]\Ehªò;›hÚ3R¶HPV›eyku3Jchä;‰_ZtVvúŒ³C$~T­¹ÁÖªŠu03o¬&–ò;«iDn«´îâ£Õ,g¾…bYÕW6W©­ZN´F;9³ÞyC1]»€Æ*‚é7>D(n‡î[)…àVíR}C‚ &Um¬ËÐ.Žš×Ç)Iãèþµ1·žk'‚y‘Ô®ð8«ÃŸ­;J@fiv76vm’©oá#´ûm9`·š)_ͱfãÖ¯Š]¾ôÆ]˜RêU·'îJ±q§³û,.ÐÇÐàg"´yÅ 8î3(é26œ,Öã;•ê)óiiÓÒÙåùãû²Þ´Cpi"ÁI+QÉ&‹ˆ£e§ÜÛÊâíæÚ0«Ð~5 ™É$Uho–iÖ1‹¸nVeàÕÀ=h‡$梼µŽîŠUÊŸÒ«j©­Ÿ’êÇøJÒÅd&p±}œÞ7ÙÏðí癩îôæ{´¶q ã;V5ÄëM#+0_A“@ôë9,m¼¦˜ËŽœt:d°ßI” JZZoz\Ð <hÍ ­(éIGj 4ŸJZJR—Iµšo6Ef|çïš¶Š±¨QÐ ÈK¹µ NX#‘¢‚¥z±§Ås-®¦,ç‘¥I(Är)ˆ³qw#LÐÚ….«¹™º u…×Û-VR»O qYö†UŸP`¤ ŽOÅ.‘$‘iÞc*ù@ã¯ZØ¥®q&¹º€ÜF'iY¾M§å^jƼÓÇië3ÄÜPq“NÀlÆX†ßÏô§v®nIî¡kkµ9áYp+FíÞãR†×yHÂiÁojV9xµØPNæ7RÅAZ¬¥«Û¥¶»nÊìC«pÇ8«wØv;ç(>TSƒš9ùy¦Ç*Ê»£eqÓ Öu£=Ί ®Û™XuªþµŒZ­Æ_yÜ>÷»š+Gg3^Å,®á_hÜz ~šÒOkwÈç2«g(°å†zŠS\æeöËu’YåÌr| 5t}¨;ÒàUXu[™Z(fVuê*É;W=i¸¦ãš‰#ã¢ÉûÑË÷ÿ»@äæ±/£0ëö²,ŒŸxÇ.‘ÝØ‹}ç,wHÃêΪ‹&©b%\§ÍœÕ°’¤Ÿq•¾†³õ)7^ZZÿ ±g¸ª÷ðÇgwk=¨Ï&ÖUè‹èÕ5»)Ã>wRJ {{S#D»7rÜñNP;IQ›Ð5gjŒe¿´µsˆ_%¿Úö¨ï­¢ƒS±h£UËààP#`M,:ïþîy¤Kˆ¤‘£I™z¨<ŠÉš5ÄpºóÆsHß/ˆ ýŸ õ¦3FMBÒ)6<êuç¥Z åNs\æmöÛV¸Ø 7˜6ŒÖÕœk²F½T`7­!sšŽY£…wHÁG½H aëÃU² û×Þ€5⸎aû¶Éª 5;X™•œ’Ÿ{j“Šh·4“,¬ò²cœU]Ñì¤ó0dóÌÏZÔ‚â+˜·Âá×ÔT‡î×?¡äjwžIÿGÝøf·óÎ(AÇj†{È-øšECéžjVϵbiKçj—r Ê­ò†ì(VÈ.y2+íëŽÔØ/à¸Þ7ÈŒá¸äU;Xõ{àŠ¦¡Ò$XVüžH•Ž(°ÍXï ’™dZõj¬5{mÃvõV8 ÊvŸÆ±¿ö4¤—í|zV¶£$h²T¡O—ì"åÍìч‘ÆÖû¸ç5…{yƱdQY渥˜ù'K’åv«†ö5&­$R_X:2ã$ßÏ´€åAÍ N s:Û@Ò¸%W“·“UâÔ¡žÑ®c c_j¶ødÚFAë\Àime¸Ò®ú)ëE€Ö¹ÔlåÓ–[”o&NŠGZ–}FÚÎÖ`Ë—¥T×UbÒ<¼ .дÝh¯ö 㸠 °ê–ÓË$h[ä]űÆ*!«¦Õ“Êuާ¥:â?3Iqš, ¿Jǰ}9ìcK¿õŠv•$ò~”ÀܹÔ#‚Ec¼Œ7Až=jK+¸ï!ó0Á ++QXZãtS{ˆ#ʓч¥]ÑîâÁ%‘B±ÎvŽ´¡ÖŽôÔmÔ½éB]Oý%ííàiäO½ƒ€*Ž‹#K«_;¡Œœ|­Ú™aq›©ÞEuòy¹]»ÔšmÔkW…d_Þco½P ¾‚}FX#æ"üÎEDuèÈ‹¬Ñœm ɨ-gŒø†ëæR `u¦iÒFu‹ü:üÌ6ûÒ°jqÆÑF¨ï,«¹P T–wÉr$J•qE£YÝ8eÊ`•ï@ ¹¼„j©#î–]»€Ê«TMok®1W"6L8QüTýîÛìKm#*Ê [¿5ÒE‰wLÊ‹åã-@7š’[ÉùLâf7aRÞ_¥«"/3ýÔꆱ2,–k¸® øT7ïö]nÞêl˜JíÝýÚЋT"åmîà03ýû ÔwÒAöWŠOfÆsôªš¬©}uk±8}Å—øE2FÞ%·]Ëò&Ö‹£gªGu3CåÈ’/;\cŠlºŸïäŽWò¾ùfÇáT’@Þ%+õ[j¥´–Ö7·Qj)’͹X®sE€Û}IL7Q£0Áà† ÐØ&’²¿Ë1?Z’y­×H’HÀŠ6ŒíÅP´CsáÏ.&Ëì#húУ¬HѼÐÚ<§ñç©Uÿ‰H¾HIÿdšÎ‚ú(´&fØè •iÒ£/…Ðc? <}hBëRò,¢ºòÉWÁ8=3RO©,M*–A•_jÅ¿Ôm¥Ò#‚'%†ÜŒtÅ7RÚ—Ð\H¤Âñ éE€Ü±ÔÖñ䈮ɪ“š¶GqYºKÙɹ­" ÀaŽ:Ö¦3H.{Ö7‰.¶[, 6]†N8Ånb°R1,ØÎ*mbt“M ;È+ǽK¬6íVé•ù.ÓKYR=ûP|µ_YIaž]p´ÙgOìÄŸš=£ëŠ’}IáÓRî8È©=)×z›ÛZC?•»~7 ôÍRºRþA“ò Н¨Ã.‘1î-òƒ•  K½Qâ †!$…7òqRé÷w <‘™[n+RšÞUïŠhãS®~zÖÑÌí`sÞã’(èlœSº bõ§1ã5 J3Ç4R¢Š;ÐJ))hw¢Š)רZ‘ºTG­IDô)h­I JZ;P (éEzÐ8£µ-E-!£·¶i{Òw¥ –šiÔQIœš^”w¢ŠZ&;ÑøRÓyÉ bKŠ9ͤ 4‡­/z1LQE¨&(í@ëÍb\Z]XêMwg›¿})+Ǻ’úh@d\EkpŠCƒNàbX‹“ö öî>X1éœt©4„m¾Ís P~bzæµ±B¯4î$6Ú‹-ÕÙßÃSêö·W1D°¢>>öãŠÖeÍ!Á¥p1oìîîÌ$H<¬3|ÝêÍý”ó476ì±Ü ÁÉàJÒ ‘KŠÅk=FKÈn]áÌyéRMeuöÉ%ãÙ*mÝV´n'ŽÖ–c„jHÝe]>ë ŠÏÓ­.-íZ ÙJã ·Ò™¦Z]Y~åä Ç÷«MŽÕÍ"€~lsI°2ÂúÚòymÞ"“6Nþ¢kcw½ÄfEJÛƒÕ°):S¸zU„ö ci‘ÐòF9Íj·*Aé@4î r–ÖJºêý‡sGùÙ»WRGôU'j| ZbÕmFÓí¶­˜S=Å[¤  A¢Î×­ºòáz ¹¨éÿmòšQ£èqÖ´;Ðh¸ŒôÓϟ״Æ?»Æ~—:s\Ý$ÿht1ýÀùkGt£€)ÞYGvª²Üœ«¯̺WR±W¦ù»ãŠßïT/l­¶‰Þ&ÝÈòÏ4Ûý=.æŽQ#Äê1¹jKm&(.þÐ$•ßù›9£R¾–ÊÞ)c‹zœÜzV‚6äVÆ   é4[i¦i>tÝËlW¢a@‘®x¥¼PFpxª÷–ÞEåΛ€éíV©1í@í4ø­ò·z–lÔré6ÒHÒñ³ýíÕ éT…Ü×/Ù ÆÛrÝÍMmm¬a M‹S¾Ôá’¼õ¨nZT·‘¡Æõ\Ô÷m® )æ«ÜéðÏ ›-£ø‘°M.—q%Ý”sIí×eãY«gŠ@ci{U½PňÀÉ9&­K£ZM+Jc;›®ÔÖúm­´¾dQáÿ½šµÚ˜ítë{Xš4L«}íÇ9¨âÒí†ØŽ ,H«™Úi<ÕUŒ“iëV3@\ZÅs•*_J¦4K0ô÷5§A  T` RsŠu/‡éUÚÚp³ì`wRÝ}§1ýœ ù¾}Þ”÷lÎCsg á_>=àzÓfÒífHÒHþTáFM]bŠ‚ÚÖ+XÊ@»W9ÆsPµ•°›Ìé¿9ݶ®v¤ë@§³†ëh•ñБRìØ»cPèKÈÎ(÷ D»E´ •£#*¤QN¡pª~+2ÎÁeŽ ©d“Î?;|ÜÒóŽG¡ mã^àPO@)’H±®ç`£ÜИՆ1Å(EÛ´¨ÅF·Pšœôù©Þt{¶ï]Þ™ Ø1Œ|´y1íÆÅü©ZESó0SAe^¤­bŒã(§8§â–—<ÒÝ£4„S4”€LRƒN¦ži–’– E´ ))h¤Z¡'š™ª9©(žŠAœr)kRC£µ ))hé@£¥cŠ)i( íE  ó@ JiŽ´b—µ)(ëKH3ŸjZ'zQIÞ€Š( ÐN{QE NÔ¦’€éhÇ4›&¹iÍæ$z-Mg©A{•!ÇUaƒY·¾\~$¶.)NÿO2¯öô>RÞ[o#úÕ=έoo&Ö,pØb«À©®/ ¶¶YÝÿvÝïXv–°Ü$ÐÜNQ„¤‘œUÝYbGòãËG€õ  pjV×fÛsmÎh}ZÕ$hÁwdûÛ8ªúZî¶G«û½£¢ÐJ¬K…•$;³E€Ð‡RŠkY'…]•:®9¢-I&³QÆì¿ÝïT4’|›älót¨4‹ÈJ’ +¨n NçU†+4¸1»Ç'AçEö¤¶PC)…™d qü5’÷Q?‡Ö"ÃvÞ® XÖ¦‰´Xö09Û´})¡ ãM;«@ë.àçø©‰©’/2‘ÌÛQ‰çò¥[‘&šf¶mì‰ÐzⲤ¹Ýö™ß ó|½ BÿTžÎò8VßzÉ÷[=iV•n>Ï%£$„eéöÛ9Ú±8©'hÛ[·ïˆÈϽ0'Óõ .%– ˆ|©£Á<äb’Îúiïn-äTÅЃ֡Á×¥ ÿ<€üj?Øu»‡™dÙ"¥W9  1êÒ¼óâPÖÿÝ=h¶¿»–x7@žL£;‘³­Q·¸Ìú‹µ»²¿;JõºZ©m²2‹]™`Ý „⛜S&.¶îPeœzÉÑõ+‹‰å¶¼LH£=1JÀmöëI¸*“éÉ£)w+/¨  ¨uÍBI~Ʊ¤Qœn~wSì.®® ¸ó6,Ñ1QéU´Õ›Li-å‚GRÛ•Ðf§ÑÛÌ7¬27Lx=©%ì÷ZsJB,ŠHöâšš…ÃiïÊW“œÐUn-m¦´6r³e°Ã§55·™‡äâ‘$ŒäækE¦ÑÕñÉ(Ôù%Ô,⹊XWï*Œ(¾†Y´EH•‹…S·¿¯<—–^L0È®ãkn\õ¦µ Ù¡û,:ùr¸VzÔ—·RÛÜZª¶WÚÙ[TµqiÁ%•¶Ž¸Ë—šâ{W[I6£n9 D÷—æhmš5hÔ®9z¿;Ä(Úä ÃÞ²58^ãzý™ÚPu"ZÕ¶WXQd9p£u!œ¿’ÞNÝøãwJÊÐ˰¸i6ÊÅjJÛ#$Ävë'K†Sks Ñ<~c3e‡c@@÷š„ r“ù+“å¨ΤÓo^ò ¢œ6#µ±ÞªÁöÛy-M»J¿òÍÓúÕ:ÒK;idt/4œ•­0 Ÿø– ™‡ëZY¬Í;ˆ"’)à1Å”îÏ^ÔÍio|”{WÚæ|Rê¡qHIe85CG™®­i:ž*é8'oô½CSuK+‹˜¡ž «qÝŒÔÖ²j.¬÷Æ¡W„SËÏ´Šòíî¡ûc§•.3×5¾µB³dɬ­. ë{©¤šÙ;n8o»W¯!3ÛɶÆuÆïJ°²+}ÖèiÛ†ìW7áÁ,×–ßðHéšè±óf€+ê7‹ehó0Î8Ô×>–1,z¬a‰ó @v­ýJÇíöo;Xô>õ™im¬AÙ³xyÀ¡EömZþb‰vÆ7JJÿa[à £¶+ 2öÊV’ÆTt¼²zÖÔFE‰|Ý»±Î:PÀq5ÌÜÛ;ø‡ÊŽy:î8=+¥<ŠÈK+ìý®A–Ð3Î(@Sµ³¯îl~×/’«œçšÐÑ ˆ·0<…ÄRVj-í.ãÔ..Ë"UÀ鎔Ûk•‚ôHȲ\d½Tšv£‘îËÌe+|»}*Ö¼âM+ÍŽF`ASÖ© ðÙdze}M[Ôl¯.íc‚6Œ(~}hDG·V¸I$¯Ý=3U´É帒oæ©ÌÑ?§µhnÛOò÷$S€W‘U¢³¹’þ+›„Ž3ãå9-@!ª†¨’Éå,w+ gç9ÃíW‡²õ™¯mî-Ù1U~”f+4—ˆ$w‰ \äôª&Hf[Ǿ‘„Šä"î#híŠÐ³·žÆK™n%ËîãÖ³’+˸ÚtŠT¾Uœrq@É- Ùèr]ƒ'œãøŽ-ì'š+iâTHf—Ì;\²ŸûNÎXn#²“Ò’ËKº¶uSxMº„Å7_i´håd&M¤ƒKyöNŸq,;;àeÎqK«i÷wÒÇåj£ý—r4d$Lç–ÇjfÍfSDŽìÏ/˜ª¤a¸®ŠÙ™ìâg?1PMgϦÜͦÇh1¼Ø«ÖÑ˪$›ZEùzPÒ²|Ií9Ÿ{ ¤qØÖ¸Î+;W³¸¾€C "¡9bÔ!u9å¶Ò-Ò6Á*çÛø4û¡qo2yQ*ýíŒ~aïV¦ÓšëOKiÙw¨á—±Ë:î U®.Ì‘§ÝQ@Í3zUj%—L›Ìþ‘W±š­m%ݳB’lÝ÷Ž3Å 9ø´ø?° ËópHlôæ¬\Ù¢i°].ï´|§y5û-Κ,¼ÿ—×oj|Ú|’AF_‘1Ÿ—®)Ü ~!Aö8d'çsI¯m[kVîÞ£5{S°7ö¢ÛƒT¥ÑîæŽ15Ø}‡#åàPèõ̬ŽÊznl³irÛÕýÒµ™q Eq+Hò0fûØ­+xÖŠ<íAšL 2wãÒœi£®iÔ€J)(¤0 ÑE ô ( bÑIKHµDzÔQžµ%QJE%jH´œÓ©(;QGá@ µÐzQH–€;Ñ@ Š(Å/z`-!¢—½ZJSÖŽÔQ@àñAãRcæ¥þ* ù æŠ(í@£4@¨¢€FqKIÞ€9ýQb—\´ÞUцÖ­ˆ­b‚@ÐFï¼ÝÍ1ô»'—Ìhq9Í[PâÄS¸Òíg›ÌxAbrNzÔ“YÇq‰×÷c ^*Ö(=h¥¥ŒVa–ØcžNi·Vvìy÷w2+¡WPÊzƒ@¾hÌS*8$±mž•¢,턌Â÷§mM¼0œÅ¦º¸§•É >É ¾LxÚy†,cLƒm<©#¯ãU¬a’Ú&Üyß6w€,,j«ˆÔ(öÀåGš˜ æ.Cš}"o-HÊ`iå}«]E7–-ÜÉ‚sÚµî ËŽTgôšJ¨8æƒ94ÙfŽ #ªýãŠz°e ¤})›Aã 8¨žöÙX«O#¨ÝS•Èé@ ÚH }j¥–œ-e’iÌšO¼ÕxT^[ÀÛe•f4ÄLsF9ÍCsuµ»O#|€gŽõ–¥m}èÜ,§¨  åܪ̪\÷GzÏÑṃÎŰ;—5,Å¥ÄÍɆݵsüU;ß[G1‰¥Q"Äz M°îÎiØÅC Ü™bn§CqÙòäWÇ]¦µ>+/Bt‡EÜáFI&¥þÖUòÙátŠFڮؠ¾¥mòÚ6ï5½¸«œV.«…ÕìdòËcw 95vÛSŽ[Ÿ"HäŠLdÍ\¥zU(õ(äÔÌ£‡QžGRŨF÷R[”‘1»‘ÔRe¸‰ä’5`YÌ=*+BÚÑÂÊØ>Ã¥6ÚöÖá&š5ÀC󒸬û)â—M¼ža•‘Û¨ü©¯my Ó2ÀÛöõ#¥OYš?—k£E#«·sœjQy±#£¢Ë÷º±$i,m®U† P‡IhHnæH»/SŸW‰o^×Ë|¢ç§Z–ËPŠñ¤DWGï+ šÒÕ-còÐ{’z“SÖ"ë3ÿhÍ´wDÀùG#ë[yàPÚ‘x5Nõšþ[a,rç¥\ÏÍHCª…SG‘IµÎ7Ž”ëûõ±X©vsµTw5•ªÜ]M%¬SÛyjÒ©Ü?…06nn£µDis‡m£58åsT®ïR íáh™ÚVÀ=…2mE¢Ô£³ò³¼d6hCb©ÇzÍxöæ,‹æ«É«b&š8K§·Hf¥6©jío`.bO1N;ö¦Ù_ËpS6Ì‘²îÞM1\Ýy2 d•‡Ê‹ÖŸk3\A½£hÎqµºÖ^7Ú5Û¹HØ»TÕzMN%™¢iï) »U®o $S$­ÈAE¥üWa‚e]>ò7Vu«›Î̬¾\x¨VÖfž-ïDs­SϺÔÌWÚÞ#4Ägà­Gg©Ë5ëÚÏoå:®ï½šÔÅ&+>ßRiï.-ü­­㟽M¶Õ|ÃqçÇå}Ÿï|Ù  ,±¥×$†5œÀ¾Kž>›ò­hæŽh–E9V£­;µ&F){R”Úw4©ƒš)qIH<ÑÞŠZw¤Î - j6ëR5DzÔ”XÍóKIŽkR@ÑE-¤QÞŠJ;RÑŠ@ü´…€úÑÚ àžÔ£šZN”qLµ¹â“<ÒÙæ’ŠQÍ0â¥íÍ!u4QK@ GjZJ:QŠZLМQÖÚ’€ŒPE-9ËÓzÚôQ Âde6öâ®j4/hé;dTp:5EªCõ¡› wmquf9*ƒøTW:L3\ùò<»ûa±·é@ Ô£µŠÈDᣜac±ªÚ~¶æ/)DCå­Ý:;ËtÝ×aʰ<ÔPiiÊÎ&”¸lŸ½@ô¯&InÚéÊò!ý)š½¼)wa…P…¶ã«BëH´º›Ìt!ýTã4û.Þêã0ýÜ”\uXâNQp®»@úÔWá¤Ô,”¡hsŸÆ®6µXbнVBU^»{šÊ×—}´AïüÁåúÓµ 'žòÆO/vÃóŸjÓhÕ™X ,:ÚœÙÇ“@±m,qò°bG(QâH[¡1ƶQp9ª÷Z}½Ñ *ë÷YN¦EÛ¼:Óµ¼{£ O´Xåצ}ªÅc¿Þ«é1Á8™%”‘Ù›9©WM·IÌë$=['šRÓ"Cy~J®Ýûi|=·É¹Eè&l}*äZ}¼BMˆFñ†;4ë;,÷y ·w^i`Vf¿ ]2PW;¸úVV»³Šñ̤¨9àÐ#>ñ”ø}Jà\cð«×6ë}§Øgrqõ¥m·ÙÖ ™z)cN¸ž>Ýw+þè 3@¶R½ð·hÝnz­ê8º“*êÖ,v–UÝ:3/1S¾f/ŽøíTuuµ á~fù³éL o ÿkYˆ€ó0wöj-&U†þòØ šMÃ=ÅjCmh Ö/üé638 ½ozÔfÞ”Hñ!qѱÍ>MÞ[yxÝŽ3Ó4¡cªGuu$&ŠDìè­ͳ°x®$ººeiäãåèhö  My^›K­¥ã‰¾`*–§©­Å寖஬H®¡†åà ƒØÔ_e‡òc‘òÑq™Z´è/,rÿ¬Üj=~9 ’ øù1[MmË"±õ"‘Ñ$C/¡Ÿi ’iÓLÃl×·ÓÐVv›q§Gf±^ óÐC/5Ò€¶…¥ó$.?‹meë“Ŕє¸Â.*Ι4riДmÛ+{Uãó(?QIå¦Ò¡°‡¥È$ÕoÙJœž*"qmqu«‰žN3é[±ÛÃe"D÷ ŠŠæÆÚé·ËgúQp3mMâd‡˜Ö<93O²•_»Ãƒ•V´±[ X£TÔ«JÛ–4 ë·š@b£ÿgë“ËtvÇ*ü¯Ž)é$wÜ HZÙ–4‘0ê ûŠÄ°dþܸ(¬”*áp)‚+›¥±Õî|âÀI˜ d ^éyD—s=«£{xÝ·4jHîE*Cd”EëEÀç­o4ÁgÏé”m+·“[ð”6Ñ”M‹ŽÒk}þRoõÛSȤ@Ršâ– ÝóŒc½/j &á¹æ‘Bµ'>”¦ƒHAE&)hÜZ)M!Œ5u©š¡#š‘¢ÍŠ+RC½”w ÑE€ôfŽ)({QGj ¥¢ƒ@¤aϵ(Phô¥ Æ(ñ@ :QIíKÚ€"Ó±íHh3Æ)h¥€3ÚŽ”´”À^ô™¥PAíF>jZ(4˜ªÚ´V²ù;Ivçj ⥂ù'±ûLJÌ1½þ”ÄZ8Í}+& oí4©k#?2¯aW ¾Šk?µ ªIÏQв@¦ËMŽE܇¨¬É5i¹û3y-ЖçÚw©Íikò[}æÚË»îДq¤h*Ž€U95%QK3 åú?jKËæ³ò[Ëߌ9隊óÛ$ú0  ,|ÝzÐO5ww/Û’Ò×o˜Ws3tQM—6—±Áyµã—„‘F9ô4§Fkõ;Ƹ¸Kh¢a ci?3Vª34jλI(ÙíÞ—µTÔžxìžKVÔnäv¬¡{©6š·aâÚ£,1ËPB –÷PŽ8nËF!r¹3W5Cìí IòŸ½ŒíX ix¬ËK©d¸’Ìé·+!M¼Õ -¯¤¾¸Ýr6Ç&HÎ~”ØiîúÄ!Ìrdô5dVr\Ïý°ÖìWÉò÷ Žêúî:mŠÄ@P× fµ æ²u›ë«kXæ·Ú5×ú¼°³,M¸Z,÷zksY°ÜÞG~]yed©NÞÔÙo.#Öb·2/“ Î1Íjíâ­Q7s.¬¶ß!£-î*¨½Ô%šê£ŒIq“Æ(±ŠP?lLÆ%2€6=iù çµ6G£;•FM9˜çmPÖ¼ßìé|:|Ùþí: ®n9áÙä¹û­Ô ¿Î+'|èjжÇXKy8ÑVéd &ÐÇŽ´ µs|mn!‰“"S€A«™¬=StóéØ}’1ÈoÂw=Þ™$O$þ|.ÛNWSkSsÀ=ªž¥}ö;G•pÌ8ZB/ÊŽÕ‰?Û×M7&ël»wmÚ1Š~¥=ÂipM¬®vîÛß4±Ò ™§YâXÑLgï±=*ž¥<±CG&ÖÞ ûæ–æædÔmc ¾L™ÈÇ9 ¶º¹:¼ÖÓíòÕw.jÑ*§¶k"@òkŒO,ù#æÛžõ4÷ÂÒæA*È¥‘ÀÁúP3Ht¨&²¶¸}óD®Ã¹ªZ|ÒµýôRHΨÃn{f¢¶º¹Xµ˜Êж#ÏZl"ª(U\ÐSÇÒ²ì%–âE],±²|èx*Õ¥@ ES¿7QauIùÜž@¨ô«¦›í´¾jÄûU½E%­ÍÃê—0I·ËŒ¸µkuÁºÛµ<½‹5FØã]»±­6™uéQægËÜ«éL lsKŠç5 ­BÞ9n^QÇ€w —I—Q¹š9Ûìì2Û±ÏÒ‹»Š\SqƒÁ§ýiQHH¬]SýlÒOu±Q?wmƒŸzÛ$M69EÜŒ¬¾ ÖC.<;¾I[—¸°ïQh–ÿg°[ÆšVù ÙŸ–˜Ø‡ë\ý¢\jË-Ѻ–ɪœbŸ¦É4ºMÀ’v.ŒÀ>y  Ú_±-e–ù¯;‰XîÏtÍb€Ÿ&ãƒ= ¿ÇµcëOq Í¡†fXÞ@¬¢ªys¾¹=¸¹‘ceÝÇj±­«±‹qÏšîôÛÎjµü3Í­¼þKnäúŠÌ¿Iô°·0O#®àçŠ~°ÚÊUr¹‘FÜðs@Í9§HTtÉ=jU(FåÅaø–!"[žd Á«mjö–F+&!‰ûÎzRG­'|W2×7'PkK{‰%\z÷úÖÞ› ð[í¹—Ì|ç>”X ¼RgœR¾* yüæ“N=if’˜­¸š}%&Ñ»v}i{ÑíH`i(£ (Rb ÒŠ1E õ 853 ˆõ©f’”óIÞµ}h¥éIÞ€RRÒPÔ ZJ1E/j(§§´zÒŽ””bŽ¢—ë@ KIK@ Þ–—ŠCÒ€i)E%'"ži)q@&)zŽ´@ ŠJZ1@„Å—ÚŒP=uÔg¼»mªGšWæj—Axÿ²Ê#Œ£ÙíZÒZÁ$žd£?÷ŠÒ‹x•X$j»¾öZ 0t9Bñ‹¯—¸ž´ëŽmE‘ö.öéÉÅm-¼q®4ØTW°¹µu¶P$ÇÊ1EÀÂXî#6÷7*‘&Á8«úòïÒwGó…e#ñMM–útži]§äίi¶Íkf‘IɺÐ&¥©Asmn±n%dRÙSÅZÔ®£]JÅ8S–Àè lˆSû‹¥XÎp3ô  ›Èæ¶ÔÒú(ÚXÙ68^¢› —T»Ö'ŽÞ»sŒ5µ´zÒíÅ 9ËäûC“Çz²cr©Á¤×@‹ûµÝÉÇ4ý PGZûp²—ËBçiGzÌ‚+ <‡ópWmnãŠJÅÔ!—û2ÞÙÆÜÛíRÖiÚîÙ3$<ù~µ±³'“JTf‹FÎyçre¶0¨n<“Tí{MBåZÙ&“p‘z[8ç4cœÐYŽS«´¾Sü­›½úÕ #¹šÞá'·‘å•nÛ}«£ÇÜ@g0ù«æ«žh'Vón4¨Ö8$$‘•#‘Šuø’e³1Å&ÕËÐVÔ(2è;j–¥c}«ÍŽ9¨µE–-FÚé y‘ ­dÛ'!Å<ŠÄ…ä›XYÚÖT_/nXt¢Êmº½Ñ1K¶R¶ßJÛÅ&ÞôûŒ.#8r¿)÷¬mæío¥´»frw<â·ŠäuÅV¶³ŽÕ™f9fn¦QTµvo±ÉqÉ#È¥FÑš½ß¥zÐRÃ=Æ’±…d‘SnÖãµzæÜÜBщ=ÜnZ-,â´·XbQúÒLóXo¦^‰ï<¶ˆ¥ÆpÍÔVáeWô§ïL »[[¯ì—¶œF·bí9ãÝ2Úñ-­ÚF±*íVSÉ­|Rb6¶×Ú`–(R9­òYY›¥ÐÐË£Ì #5jÝÃ+@Ëm³{ |Ý*®“cqcna•‘—9iŸ¦«šöb8¶`Œîäæžú]Óéö¸eK›»èkQíEÀ¡`5富j `*ÿ:·q–HÛk2 Gw”lÛ¶ÿ²3R[L—¤±ý× G;ý—~¶K•èäÝ»wÌÕ¡«ÃwucÄ»›Îï»ZÄ Ôw$1áE(Þ[\Üi‚ü°Ì 6ãQ^ÙÞKöS 1™OLÕËKènÝãŒ:²}àËŠ·@)¤^ÚÈßd¹UŽC—VÔI±B“ž:Ô½ªswwΫ¸j.N¼_í¶ bü7¥Mo¦JoÍÕÓ«÷UGÛW{iöù ²Väa‚(vÜÝÈ  C¦_3Ý'š‚9ŽwÏÒ­­µàÓ<ƒ$blmÝÛ¦qÒ“ð F^a>ž¬’Jއ UïL¸±º]Oív² Ü¡X=kKÅ25.[™ã¹¶—ʸNç¡©#´¼k9’{Ò8Â8ZÒ¥Èé@Œˆtû™/ ¸»hÿr06ksKG4€Ç¼Ó&ûoÛ,œ$§ï+t4è4É^ð]^ȲHƒåUû¢µ³F)‚–zö±»)¯ÝÆïá«:Í¥ÍÒÀöÁKÄû°Õ¨Ôu  ™í®õŽ;”Xb/†Éjv¥cstЈ4H˜6ÖµsIJfêv2ÞÛÆ¨Ê²#ÉéL¼·¾›N1 ÌO$p1ZÜRRœ:UúOÔ&%˜pÊ:VÍœsGóÛt‡–ô«TEÀåu…–ßQùÄù‡åPyÑ[B¶ñb5ûÜÓ[N·{±s"ï“¶ãÀ«T\Õ;÷§ž”´•#QÚ”ŠLzÐA¢ƒH¢–’…w¢ÆµFzÔQ°æ¤ ¤4ï­6µw¥ç”¡hÅ-›KE£µE”bŠZJ3IN´ÑÈ¡›jÒÑ@ øSˆ¤í@¢“=©{ÐzÐKIž((h£š\P!9Îih¢=iE&9¥ @H$ŒSŠÄ€zw®yämK]{i™¼ˆ³…#Û‹b?²Fͺ3ònã5VudG?++cÐЮv5…dÂÛ\]6yˆ¼€ÔöX‡W¿U®½…_´ÝÀg$ ÆŽãmí¨I^BìÛ›­ô§j‘È·Kpð™àT*Ê¿ÃïH ‘ƒŽô¼U]4B,£òŒddn5e‰Ç š¦ú¥šNдÊzæ®gŠÀ¹µ‰¼I1®2Äzš 4ÓV²’6uJ¯ZšÚê”-ÀëYV¶ñ.¹t¢5F¤.8§éQ.ïñÂy)uµ+EŸÊi—vqz’êò 8¼Éßjÿ:À¼xšÉÑÂóI?6ìÖ–¶ªÚL¹ v¨#=¨Ô:…¼Ò˜c“,wáLMRÖI¼¥™KïM´X³’Mª ÅËíYV»ìî-­®9¡fÌ2¢˜æ–š‡¹¤7qZíó[¾èîk'΂ç_·hƒ+*Û—Óï$T×àiÎËÂÓuI1_íËr»så6q@®/`…€v,Ǫ2iEÄ[|Åò±Ëf±â u˸䕢Ü\c‘Z6öPÛÙK¿š¸’ÜÐÚµµ—™bÜwfœu[-Šþzmn•SL@ÚVÃ.Öâ«XÁÐdgE'æù±@ÂHü¿3pÙŒçKxq G“úÔ7¢FÑ-VQ–,™Ý@Öú„04Èß"ýìñŠD¿‚GXÁ!›îî\úUM`ˆô³´aw.í¾”,Óµ´¦v}¸(¥»ÒÕÖ¥oi2E32³ò8â‹-Bòâ ß»8;…gël†êÀ8ëyÍkF¨¤”Uùº‘L 8£8 ji% +ɨÅ«Èè2ÁvÓ㼆K´#/ÜkNdûmôW’˜ägÏÞÛ‘Z3µ¥–•ˆÔIÏ“ëL –Ú…½Ó”Žìg•Ç—­³”–O˜ugBܱÖ×ÌØ6Ûð«Ûš‚ûu¬·W扈Y£aÍo£¬ˆTŒƒKP[•òc®ÔÚ0=*\¶i Ýü*­;í xâ›6¥0Ç+îÙ'Ý;j-^Ûíš|±€7•úÖ^›tÚ—Ù`u [|Òg¹)¶Ò[Iq¹S67(=EEqªÛ[ÎÐÈçÌ »¨®BfÔü¡ö0þUNô©ñ¦í¸ØsE€ÒR·{O´î"<ã‘ÎiÑê´ë£Æì2»¿Š³|Cû»hYW÷i(-Š–ÕtÙ®’Häó'#ç'mM.³oȸ‘Äg ʹ ZêêydW1<‹f^îÊex¦“BâºD?»R8é@ l’¤Hd‘‚ªòM/8¬ÝyM&QÉàœP"¶£«,útÛ-¥h˜c­]Ó%Htkw…UŒg5œ×ö¯ ²+¨aÝ™ç4ÛâÏáÈLG+…ÝJÕMAdGŽDó>áaÃU+û•—X³¶![s|T–«§Ü$Gß(P\’* ßùÙeT|§žô ÒžîgUÆé_îªõ4ÄÔ”¬åá•ó.ÞµŸ+­¿ˆKƒµ^<#€Ö¤ÓÂmåe‘ ÉÍW¶Öa¹hÂG!Þq¼/Ö¥·¼†âîhQ’1ó1KAÙ.–±îçqÈSÍ:ÍãþØ»Ua÷½VÓn^Ökí¶ÒJ<ÓÊVµ¦£Ü-*’¡>ò·U¬)“7«$¡”I¦C\jIÊ8‘üG¨up#YŒ -Øà>\Sµ U,-ñ³¬‡ï ÌÓ¥ÓZÊ(æÛ怩çéKâ)–3j™_–@Ô§k©ùÂfš…"çswÕÕ”´eáxâíWcÖ™«¤hò5»ngåî*µ‰Ó.!·Ý°Í…fç4.¯ªËc<1Å}çŸaWìîæ òDжqµºÖ>¶ûu #!ÄAòI­¸$tlOB(@Üu 0õ¬ÛýV X¤Ý¹¿J¼…Z5 ðFhÌp Vsë)±¥Ž82 b¬êÏc2¦w8Å`iRiÿahï[lŠÄf#4ÓÅ*Ïȇåq‘N$j+o,[ „b<|¿JñÖ‹¯¦¼gªôÀæ´'¾X¥XQKÊÃvÑéY¶R"k÷›Ø.@uGx#‡[ßx?q"à1í@Í‹[å¸I¯Ã-R‹^Iƒùvò³+m*J±eö%ŽGµÚø˜t¬Ýh¿´¯#VS¹÷/½hßj©dñ+ÆÄHzúT–ú€™%y"x–>ì:ŠÌñ уl…†á(b=_¼ºHtö›jȸàv4Øuˆ¥¸Ž#ˆ%ÿVÇ£VjåMØmJÖi¥O-8^×KnUã¬]_i4Û8¥5Àv©)F(ņ&9¢”ÒR¤¢Š-%R DÃ&¤jŒšC,`fŒsÅ}+A ŽiÂŒP:ÐÞƒEf€z)iÔ)ü©i=€ bÒt RúÐb­©GJJ=p(éx€Aõ¥çRдpi{ÑLBcŽ”JZ^¼ÐEPEPIÞ—9Þ;Pmæ—æ]}®ÖCÝÎ2 Piç‡]$>sˆðv.+¡Åg.‚÷ím<­/¯·¥;€—:`¸»)+FØ)"Òö=Ã4Îí2í%«S £\ ô‹½†¹Àß Àzk %•n0ëµ” _éÅŠ.6ÖñÚÀ°Å÷S¥JÜU/¶O3“m¼jû‹c늼~í ©5Œv·Gw˜½jžf‘ ‘¢]îʾ´Z´’[£Ï—!¯¥0!ŠÊ4žK»{Œ6MZG »ª·Î0Ù=jßnµQ¤¹[õŒD¦Ø¯-žA  ߨ–eYv6Ö9ûÝ>•<ö\DÊƃn«´”ZÚÆ hZÔìn¡Žii¶ÐȬ¨IO»¹³·éUõÛ«›8[v a²+BÚO6Þ9VPhEžÔìþu“asvڵŽ˩XÆWµ/]ZAt¡gŒ8*ºiV±J’F…]:Æ´3G^ÔRçO·»`Ó&X n‘lá[_³*íИýÓŠ‚äû3It‚&\’í@ K#µktV·mÕévéhÖ˼FÇ‘º šúî/.m‘%ÀNyô«h—‹pŒÎ¯_˜c,v1%¨¶Ûº/F梃L†ÞUdi0¿uK ¿š?gÝi]Î$rèý CŒÓ5(’-&h×åU^=ëOÔ7Vñ]EåÌ»ÓÓ4FÂÊÞ[8ƒÚan3V.,"¸1ŒˆÀc(ØÈ©­­¢µO.!~¹©ˆ m¡Ž„q.v§e³÷jAÓúÑÐÐ]A„v#î§Ú¨éV–óéгĥ±’=þ•©,1Ü&ÉP:úl6ÐÛÿ©@ŸJŽæÊ¥U *öÍ>ÚÖ+TÙáOjYŒÛãòUJ–ùòz §=ÅÄzżÇ’êI\Pòi¶’>ö„g¿½%èX¬&UPƒË8üªé>µNåVyżÖûá+ݳé@ôÛ;wÓ o+$¨$gŒý*õŬw1yR®Wò§Ão ºâÂASÔVpÅoä`´g®ãš¯—gk0–8ÎîÙ9Åhv£P6Òî_2x··ÔÕ¨cHP$c£T˜â œÜ¬‘ ~ówa@ƒÖu§pzVlWÛ2ZÈÈÑ„Ü09bçO¶º`ó®ý,öKn hÿwÙEZ8¤ï@Šqi–±J’$xtèsI&•i,Í#¡Ë°ÝÁ5w<Ñœš21µˆíØS»š\ 1ƒš`"óÚ«[ZClò4)´ÈÛš›}yä´0ÄTË3a}½éöËt¯'Ú]?€¨Å ìákÅœ«GFÍDúMœ“´ÒE½Ï9,kC›•²ƒŽ¸¦MÚØ“ Œz✆çínSìá~VsVVŠCJ³ó|ß³®üæ­bN)Œi.(ÇŠ~}ª µ¸`ŸedS»æÝéHD?ÙV¸›hþn¼T±ÛE^Dq÷j~ø¬ç¹’=^8|̤ŠNÜt¦2h,m­œ¼*±ïL}*ÚIŒò!irÇŠº}iO"Mi™ÔzŠO°Ûy&%|¿îö©Õ•—å`~”åDI#°¢8"}é+zV(Ü) ¤ú]¤’—xq<œu«iÅÄPª;O¥  ©gÊeò“Ìþð^i%Óíæ—Ì–$võaV»ÐhĆ8£¢…_AQ¥¬ry‘ŠÿÞt¾d¾aL¼:Ö‡¦’['2Hω ‚Þ”ÀÐ’Ö)†%\´)ÉÆ»P£¦?9£4€ÆÖ­ ÐXb·/+Ë\p¢´¢¶òâ2~@jmÔ½hÖ]Øæª6Íæó^/늸iªÊxVhB…t£nix¥éÞ&Ó­¦˜Lñ)>kX¦@² p;0©·b‘œ"–v £¹ þχʀ˜ÆÑQEcm ŽFõ¬«g‘È¥-Í*Me®^HQÛÕ…IöhŒK"”Æ6㊘㽤/ì›"оBáNE\Úª ¥Í&ã·$Pl\îõ§QÔQÏ4†­q@Í/Zm%:Ò¥½¨ aIKÞŠ@4ÔMÖ¥=*#Ö¤¢ÇZQIÞŽsÓŠÔ4¸æŒQž(¤ïKAõ À¥P(””w¥é@:ÒãÒ Q@óE"ü´¢€ ?J(SQ‹ •ÛíO¢‡áHiOéA„{ÑŒ 9ô¦àâ€8¥Å'j)1J(ï@ IN=i¤ZÏÔõU±hâEó'“î®zT±Éz’´$f-¹,§îšÈ׬ç[èo S"¦7(•¥¢—ÃÉH¥”îb¸ NÀCkwy©y²ÛÉ0«mL®KSìõfŽâ9EÌGcTtÖ¸ÒüèÚI£Ý•d5”ÇöË먘4½#œS;mSPºµ’Xá‹1±Ý“ü«JÞí®tÑp‘üÌ¿w5•¤†‡O»ß ŠÌIQ´ç𹣇JÛ,n…3ËHèæFÑ¿tÁd%°Hïš­jú嫸» ñ».6ýìU¿–þÎdue`파U}:i—íQÇ‘VVÁΘE©\O¤I,{Vâ«néÅ>]JHtˆgÆé¥ }M4YÏ“2lß4Û‰ êj&³žãFŽŒÅ4XÛžäRì0Þ+Æïsæþ±Hãð¨Vîàk†ÙÝ|“ॳ¼¼¤SÚ?ÄäñPì¹ßÚ ³y[|¼îlgЧªÞµ‹ÊŸ{î¯ãWzÕMBÌ_ZIìg} 35[7þÊ3=ÌŽØ ÊO­]_"'Œe™UWñJ{}b[?³:ÆT nÏ,*ìös]éIª¤éŒÙÆ%´×+ul™ão¾ÒÁö¨Œm&½p#™¡>ZîÚÍX±mCÎDºŽ5U²œî¨.îÛX{ˆ­ÌÑ:;MMm=Ä7ígu'™•ߘÁ¦i“Ì÷W°Í+8°¤ö©a·žkß¶\ ŒÛgŸÆ©Çý–£pÑ[ £™·nÝŒP‹;›™mïðòDåQ˜zzÔ2Ï<Þ2 Œ¿9>”í5.ã†ñ¦·*Ò1eõ¦y7#@6ßg4åqýi[Íßd²_/ruëš»yz`žòwÇATîVåí¬ÕmÝŠ2³LT·öó¼–÷vé¹â<¡ã"“Á4ï<ÑáŠlÊHËŽ}*Æ£{k7—4jñ¹±Ö´ –iÙàòøùWvsU4¤šÚÒ`öÌql>j>ÚââëGy‚L†ï¥A -Û@’Ë>øŽ~B9üê}:ÚdÓ$‚Hö9ÝŒŸZMg‚¶šÝ“f~rzÐ3LäŽ*½¯ÚQ1vÈX·Ë·Ò–èÍä¸·Ûæv-Ò©i²Mz§í_z †µ‘âšTš Ú=‚zØíÍfkqK- ŽÃå†rh„ó^Äð²ÜïÜÊ¥vñÍYßuk¨B’LfI#¤¹µ¸•m"#*Ì3Þ§»†yu i0#‹–lÐ1&–â=VÚ5“Éœ®=*¶­<©¬[$ÞP‘ëV§†âMRÞUOÝD9ëšŠî ©5xnc‹½Ö˜…¶šxu%‚YüØ÷á¿„ÓÅå×ö×Ù]PBWrã­9­îWK’бªÎy5Y–S¯y¾Kùa6ndžlf¢¼»KKY&~B•%UÔ­Må”&7Æ}iˆ¬.µ±k½±/˹cÁÎ)5[Û˜t˜®a`Žv–õ¡e™tyRâ&ŽHã+»¥-å´—zEËíSŠ“P¸ž8§†@T2ã®i÷2Ü&¡hŠûa|îïŠÌ’=BK …J¸,KqW’þÑÒÇ,wzÐÈóÝê2[¤1(ÜS©5Zƃ\˜<Æfòó–êMwowo}ö«Wó$Fn´ËT½þÕk‰íÕ×o ´ó¨<÷W ²GÊJ®âÆ™}q<š3Ê¡•} ¨ü«­6òâH-ŒñÌw|§jÅôSÞi¬ž@óœ}Ýßv€3g}FßN·»ûY?wäÇcV.¤¾±¸¶™®w¤Ì£#R^[]K¥Cm8Û»æéŠ]bÞæám–8w`Ìwcð  •æ—jB‚Ã)㥠9ë´‘|Mkæ*~à^ÝkJý§óDÂåŸ?6jŒñÜÍâ%[wòáãw­OymrÚ¨”D²ÂcÛó»L ,.¤»ÒK—!þeó>ꇇ «\5̘óS<5\Òa¹†ÒKiÑP);X½QéV÷–…­¤‰<żÍÝh[ ®[R¼Ži7¤`mzÕ;{»›©äCwäβ`BFÚµeÚßÝÈðìY€ÚÙÎ1U¾Ã{u=¿Ú!Th›sLÞ  å"©êÉ3XHmÝ’EùZ¸+ ®(ƒì“hqùr¿Ú‚ß9©uµA=€K—ÚΨÃÖ™§éRÚêS3ôpKF;dÔÚ¤sÝÛ4P«G nÎî´ .ÚK­UlòD‰½¶¨ ²û7ˆ÷¬ëå7œâ¦¼±¹ûZ^Y²‰6áÑSmáÔŽ¨·¬~^ͬô g¾–çQšĦ8GHŽ >õjÙ®›M˜]n‰ùÚÝñU®4ûËmFK«-„¿yZ´Ñ%’ËmÁS#/;z Êðõ»­¨›Ï«çäíõ©tg’S}’Èê²mRO"¬i0Okf°Ü"®Ãòí=j¬V—ö—w@ˆÇ+nË”í9¥ŸOºI%sµÙU³È_Hµ{Ëx%’æQå·±§ÚÞÛYÜFÂ3#±+ÏÔš%¥Íš4SÊõMkE-Ep²4±6×*p} ch2]Gysirûö|ÙÎq@Æ›TwsyÒ˸¤Ô$¦Ê‰2\pjm{éJÛˆäŽôæ‚äé1Û}Ÿciù‡5õ¤÷šX„²ñÆ}(D±½¶’ÃÏ•³íÝÇ•̯¢ÈÍ$‚HÔÆ®Ã̶m Äj·hÚsYØjpÚMo²=­ÆI Ô^it›iüÖßòç®i’A{Ý»µÓ~ñ¶õþ•n{ ¹tûx xñœš–êÚêâKfU÷M¸üÝ芙ìuØãYdhߨsÖº?à¬{ËKÙ5îaŽ2#è u­›Êä|ØéI€«œS¾”Øþï4îõ è¢ŽÔ ;Rv¥¤lHŠJ(QGz)ÖéLàSÚ¢=jJ,Rçæ Òuæµ$^üÑÍQÞ{QLP:£<Ðâ“ ;Ðj:ÒÑ@žÔŠóÉ £¿J;Ògž(à(ã9 Qß­'z4RšNÔf–Ž”RãŠ1IœPRŽhàÒñÒ‰ŠCN¦â)¬3•“OºoÕÕG õ­Ã”ŠUfí  Q6¯Jw©M«YÄì.YzíÅN—P½¿žŽ¾^3º˜*ãéK´b©&­l~f•D}Ö¦½¹Xl¥™p¤©¤¤ž%c˜žgeÝɬí&Þæ‹–ž‘Êۇ͜S °¶–ÎÞk¢¼9“8$Ö¤×1Àª]¾ñÂZ`#Ý@“¬E·Eõ©±¸VÍÊÜk–ŠˆÊéÛ—«=äVì¨Û‹·EQ“@ºü¾ô­CoyÂ3!?!Ã"ªrÈ+íò¶Ò6ÒKÚ€NõZkèmÂoc—U$ÑäRÛ™ã$ Ïnii—Ž)•ˆ-›zàã«r^Çîbã*ª2hchÝžôí¢¡¶º†è1„ò§ QI{{ Œ^lí…Î8hr3Ö®{Óa™. Y#å\dSÁí@P&Ü´¦«\_[Z0I¥UcÑ{Ðê»hÛÍWƒP¶¹`>Á–§[^ÃqïqÒ€'¥UÅ@—ÖínÓ‰WËZ MbÙ™3æ"¿Ýf\øÐò;ÒTwÐÙ¢¼Í…cŠhÔmœI²MÞXËb\[-Äe™sýÊXmãF0¢£MBÞK_´«þï¦qQ\êÖ°[%Ábñ¹Â•À½Ž)»xÁ© fÏÍH¼ß™±Ž8§¦«h÷@—÷™À4ke8¨#š)²Ê£I!Ú«É4 ⊮/­š´‰G”?ˆTw:Œ1Ù‹”>bŒ¯z»LòÆk15›q,m$Ü:ôÛÀ«·7ÐZù~s¼à3@1ŠÔ2ÞC±Ç#mg8\޵^mZÒ †‚Yv²Œô j‘Ë%¤‘Á˜Î1×SZ«­¬i"ìePªé¬Y4O'œ0F9«6·^&ø$ £­JWåö¥Ú6õ¥ÅEqs°_9öî8¹  1ÍFî«I+QÔšXgŠtßQÅQ¹Ô­Z ‡ÌèRÛr¹  ÑH“ xÜ2·B)W½eèĺrÙÉ`+[­FÓF²,lêº.y4ö\tªfæÎMDC€×(88éO¸¿Š< ­$˜ÉT Poyoq+Ç »Ý:а+Gš9õ›ÙcS´Ž1[¹”›yÎj¤÷ö±L"’`œb¥½¸[[Y$fU!NÜúÖnœÐC¢¥ÍÒ†É21+“œÐÀÆ)sšÊÿ„ŠÏ ÀIµº¶Þ´¾Ñ‘ço_/Ýž((⑎ÞMW‚þ —) ŠÌ;U fæ/6Þ f Þ¨<âšÈÉ'*Àý ;5Ïê6êÒK2±m®à­lO}¼ 3É•no;¨gÂóŠ3žECk} à/9C† 0Eg[5ÛÁµ‚ƒ€ØïE€×ïKIØBæ€ ÖŒÅ)Çz_z'”˜ÍSŸS¶‚S}Î:ª âŸo¨Áq ’BYÂus@Ë@PÝÒª[ê1\ZµÄjåW‚1Í:+ø$µûNý±zµ1]w)\‘žõŒVjÂ<–s–fäšl:•´² Á›îî\núS¯/ãµdkI+ýÔ^¦ “R¶ŠõmŸ5úqVÊúW9s?Ú|Af­ÄéÔ7zéÚ˜ 8ãŠwjB@5AuD`α»B§NÔ€¼Jª–<Ôš©ý©dCbt%:â©øŠñc°†æR:zV}üöm‹Ä9Ào—S°VÚ¥½ÍÏÖLg ¸«ÕF ë ‹ !ei±×o8§Ï¨CþNäêUqHe¬úÓO-U–ú -Úpûc^=ª+MB‘SçþîåÆêÐö¥ÇJmRÒ†…ßçUÉ✺•¹³EŠÆ}G4oÞõ^F¥x݆T:ã5`°Ý@2y ®i7…cT£Ö-¥˜"îÃ6Õr>RhñZjŒ•Ÿ{­Aep"xä$÷–ÛZ‚âà@UâsÐ:ã4¥Š8¤R9Å#CHÅ-"œÒÔ€qIŠ -’—½€Š( aÖZ;ÑH·JŒõ©JºÔŒœàu¥ÏµæŠÔ@pJ3‘éKïIï@èíG|О(¥¤ RÒcµ-Ø^ßJLsŠ_­!€4 E¥Ç4Äø¥âŽôRt£ÑKL¢ŽôZBÀqK@Ð1i)z ^´J(¥ cvàñHiOZ(Êjì$×ãŽàŸ(mÀ=+qíãæTD󂦖ÿK¶Ô2®teëQYé m >Y ð»›T/ˆ”—÷»ˆ“=hÒ_F«˜ £µ\“E·i^Q½YúílVRÍ×ÈL¢ãiæ€0l-"“MºwX Ø>˜©^?7ÃqÙ ´#Ò+6¶YdÚí’sÍ;û-ÀÙ£¸CÆ{Ò+RLiÖ²g@Ky'“©ÙÉ1Ä;H_cVæÑÄÖÑÛ<òìO§5fk¥·X%_1¹ëL w¯ jV,®»þnAö¬û—)®7Údh•× ÊØâ¶‹f b¹ÈÁ©®ôûk «<{ñÐ÷_OŠÚ#'Ù¥2?;Ï5OMU:¥úás¾µ ²‚Ö#IµOZ‚ "ÖÞq4hCúî4€ŠiÕµ)14i÷Üôšµq½K 8úÕ©tëk‹‘4±îp:æ’6q0‰ó~÷4¢¬KyyÚHnýé%b¾"t–f‰Z0¡o£Ú[Ê%XÎñÎw}Í„Ž>Ólt9¦XZÛÛ¼Æ Gs—%³IªÍd‘F—ê ±ùx«6Ö±Z'— íj–··1 X­¼ÂÿòÐôJB.Áå¬(!Ç——•#À ¤gµŠ»W©ŽCgP“Ò¹ý!„ÚÍã\®(oJè;Õ;: ‰¼æVYñ£m4À†ÆT¼(»A ôÍG¢íF¾ÇúæÈ¤ÑØ5ýö@`MYþË´k‰%1¶æûÜði ǹÊé*WýY¸%ñéšÒÕš 4vm˵”y^Õv haxR<Æÿxt{De`„ìåU› S?R #söœ ¡gÛ—Ÿ"à*ö£D*5 ATPüW¡Ó ŽY%PÁÜaŽî´–ZTR¼—ËõËf€.ô“wuÔ#`ó.pÄü©šÖn³®4¸®¯Vá÷eWôJÆI?²/\²™ 9ùi-ç<8Dl›•H`}kNÚ V‘¡LyFx¨e#ŸÜíÏ8ŠB22Ü)]¼îüëW8â µ³†Ê/. …Îy9©˜ PT›ˆãÆ7y'8úÓ4Ù¢‡U¿I›lŒùRǨ«ÿÙ–¿hû@ç;·[6ÒíÃÏfè7I’)5‹öF$ÏZÜ5››ko{æAÖ¥h04˜u†_ìÙ÷÷N3ëPØíÿ„y|Á•òZ¹wgì^\®Á{…8ÍDÑEc§I[ËU?xæ˜4ãü#çÌÛ€­»5F_>=É W“œúv«ú%¥µÆ›4jÍ’O>õ«qmÌL¨OoJ.8tõK¥ºk†’@¸Ž•Ÿ£µ¼×7ŸiØfgÆÒµlô˜,œÉvb1ó6qQ]hv—S™™YXõÚqš.~¯ ÿO@«µ›éW5  Ž{X<¨ÙÉýÞ〕bïH·¼HÖ@Ëåp»OJtº]¼ÐG©¼E÷I<Љ¾¿2H¬åÀùiºP_ímGvÜïÍhC¦[Apf†-²ù¢M*ÒK¡qåŸ398=h¸xì*…¦¯mwxöèNåèHëZ`V¶Ÿæk?iŽQûcy FßVëHå¶0_½Ž)pU©‡&ÿ‡vï»ó@ûFÿ›=qV´ ¢Kò<ÓÒ­I§ÛÉ/œñáÿ¼*¦€U–éW÷Çåö¦2¶•s:mÏï[{pjŒLZÖËyýÊ͇úç½t'I³.Íä.æëRǧÛ%¹ƒÊ_,õZ¥¯´CO`pòöõªóMö}fÖ{žáÛ“ü&´!Ñ­"”H™—•ÜÙÅZžÞ)ÆÙ‘]} rþT“]·hnWýìðµÒ®xù²qUN•f[?gj¶Ç¡â´–³*}â„ ÀÑä±f+Æ "¶ ±<×K·Ö«¾Ÿk$¾k@…ÁÎìPgˆÂ öã‡iš›©m9p i­[­: ݾznÛÓšcé’2‹%“@ŒöU&P¸¹¤ÒŠÅ¨Þ¤ÌÅò7w¦4Ûat·_ïGFÍzmµÓ–0Xwh—¯ÿÇŠ°Éó•©4ûkI 3}¥¤—-ßéZŸcmü-|¾›jm&ÒÚO2¶·®zPdþ[x–Á~î9õ¥ñ(Ú–¿Ã“æÛWŸD´iÌΜœäµ\’Þ9âòå@éèiÍŽÞÆK¸eLòÿïÍi(>µ ¾™ijåà…U½jÊ P}èZòD†ÒI$\¨^G­byžtv.‹p™r#SÈú×C4K$m®UºƒUWI³XˆÏãB;]eI¬ä#!dɨ.ɺ¾µíó7îù{ µ®óm¶•ß‚¤Ö…µ¼4*ç½;—ý±x— ²?æ·ƒš6€(rÒ+FfV-ëÅOõ¡W)jF4÷¥Š1KŽ)”RÓ{ÐE.)(Ph¢ =*&<Ô­Ò¢nµ#,÷¥¤Å¨…£©£4”(ëKIÞ‡z;ÑÎhêhEØRR@…õ izh1@ûÔw£¡ ïKšNôPÞŠ Á£"‡zSG9 Ð £µ( ëIKE4t¤ëJ© bdRu§onhcŠNüÖ¿s}hH% ¸j6mNÁcº’äO #zã€è9¤¬½fêâÖ(e€Bà?©©^æk8...]GÜU¡Þ¡¬Pu9­…ÔsÆ™„[;}i—š…Ëé1ÞZ2¡ÏïnU[é.¢}–1&æÃg°¬×ºÔìÑnn rÂq¹Trµbþîæ;‹C/‘+F9  Aœ F]ÜçšÌ×/ç±µŽH6囚®u-F)­ÞxãX% u拳åá‹r:SñYZ•ôës ®²ó¸Ž‚¡i/íuxdœK¹Ï˃@}(ÆMd ›…×|ƒ&èZ=ÛqÒ¤Šæq¬Mn[|a7:ROÐX(É }k{«ËgŽi¥¼¡|‘Œm§ø‘ìãÛ!OÞŠb5åfXÙ£]ìBúÔv“K4 ÓÃä¿uª….,ôÇd“Ï•àZ ºÔå‡J†\¯6ýMlfŒšÁ½‚öÖÛí‰y#º]îšÔÓ®¾Ûeç‚㟭Zí0xÒ(•ãn$$ô?j͹¹ºW‚Ê zrq@à±¶·vxcÍÔŠ°1Yâ{ýFX ˜Ã ?y”rM%¥ÅÌW²Ù\K¼í݇­lqšŠáÞãŒÈê8QüU™ay?—v.eX³Û§½>{Ë»}!nG—›=…iBÌñ+:ìb2WÒ¤¬½BþH#¶ØÊži¤aÂÕ‹)._ínýÛ¯ñ ¸i»x¥=+*êòiµ5±¼°s¿zs]\G¬ÇlÅ 2) c‘Zb°…¼±x‚2V”;Kv«sß;^I6ʼnAfUÜNh.¯5Ž“ËjWrrKzT¶I5”2K‚ì µP–âYôk£:@` \n´ÔKè4覎u`‘†òöqŠlÑXך¬©¦Ãw.×ûÁªkÛë‹h¡”(Ì—¿4jöKˆâSk’MÀ})/®L¦0%‘‚¨÷5[Ušæ¶h\,o Wæ£ÕÞþѰIÓæ€q}üvrÎñ¸Hnõ¡ Ü $óZ?àÀçñª.ø†2pUa8ÇnhšöI®¥Š7dH¸%Sq&€5…(æ²cžîm&f|Å2îÁaŽ=j ¶·ŽWZÏÊG9Ï­nF(ãñ¨åÜcqøùIõ Dr]Hó-ÌJŠ­òüB­+/Fº¹¸·œÎÁ¤I ‚:U+;ÍVé.-ñI·-ü©ŒßqœbYú=ì—¶¬ó$F*qW·dñH@>ö)ß…aëóÝÛ˜Þ]Š[i÷5ÅΩk{<±¸ŸåUÛšvºÈ7îiÝý«&Êkص&¶»‘eR›Õ€¥¿ší%™üÁ¦U¸; 5±Í2H’D+"†SÔÏ772è«pŒ«6ÍÙÅWÒ®5È¡™Ý<¬ÙšÕ†Ö õªg®ÑM¹yã1ýž!&[æÉÆb¶Kâ ’;»SŽ2ôÅh^Muåš«¯”íµ¸äš`iÑÞ²/¯¥]@ZG*@6n ëÇÒ¯Ù<­kÚBù½ñH Ùwañò“Kº‚h™¢ÝÏsö„¸*ÍíEiãæ¢³êç÷Æ£žþúIgØ¡åÚ!ÆN>´Æn´vü¼šÅñ+J¶Hc—`ÜÞ¬F·vÚk–¸W.åf(Õ”—/7q¬o¸àÚ¬ƒ¸|¸5‘g<÷zJòâBç¥GáØg6^q¸b¯Ÿ”ö÷  ¾ÜÓ#†4%‘Iîdi-y³òÛj¶:TcV–+†wH²ãâõif·±’h#''#5=´²Éc»CJÈ:sXZ¥½Ìzgš÷2;™ðÖœ²Êš0’ ë3ŠÛ†W3ö«í6ò¸”˽Aí]c·4ú? qEH´€óŠCŠ(Å4ç4§šJ aKGjJ@5ª#Éâ¥=*6àÔŒ°9£½¸ úV‚H(ííLAš(ö¥ bQŒ^ôf€¿ZZ;Ò÷ Aރɣ½!<ÐŽ´˜9ëKGzæŽôw£­/zÏ ¢Ž”u¢ŒóKøPRÒRÐïM¡¸^( c¸üh P=èÅ6œi´…â¥&Ê6'4æûMý„6âÜǸ.çb1j]z;›¨…¼Q)VÁ[Ö…€•mcI£ØÊã9ªèf¼“=¼vÐÁ$„0l¨ã­Ü@Ú––Ѳ4NÃ…nÆ´{ÓxQè)‰ÝìVdk9 ê»U±òŸ|Ñ{jÖžh›ï }sZËu®R)UØvVÍUÖÒi¬("23ú”VVº¾Ó¢¶ì…ÀÄðI¨Ãqþ†–ñ3¬LŽ}*õsiË•@ ÕƒÒ€1|DKâŽvvÏ8¦êNï ŒIŒC+7ËÐVáõ4¼PN¥k?Ú­ïm×{EÃ'¨¨f™®5kñaòŽÙ­ ¼PEajvO‚°*³²û¢ªß_}ªÖH&]Iù}+§Ç­F(+TY®ÔC:««·j5îd¹µxafH›s֮܊Cé@ÓÉ­™D,±ön¦MÖ}4ÖðyñMó ÖÀXân[º{Ó™w f€*°žãNq"•Ðü¾•KCiá-fµ‘ 󞆶6ŸZ1Îh&¢‘š4‘Ñ7°(ïRí;ºÐ©·Þ€2txæ·¶—ω‘šBûj$OÞ4°H»ÜÈ£´ñ³0 Ò•Ï®i• $‘ÚȲÆÈÆB~aŠÕ^´»p=ê¹½¶Žä[™WÎn6Ð nçhKª8f"›©$òjVoÑÄrƶvÙ¦;(+8Vn€ž´È_9µõ“ÈF#Ù¸Ž*­Õô·—{àóVEÄl[åZèÑ6÷§Qq˜~eÄ:‰­_~ß,(ëõ¥ð÷Ÿ§ÙæãÙÝ»ÖÓ©=ñHcùzþ4‹,wºÔ—+nÓG*…Êö©¯Äò_Ùyp¹DmÌÝ…i¤{yf&ŸŠÃÕyÞx^ͦV¹ iXÂöö1$¹ÕpMZ+ž)žXÆÞÔ€:ŒÔs³"–D.Àp£½M°2M¨ ¹ÀQœÐ&— ä&ó|;\º÷ª†Æ´MÖnÓE fvêßJè,¯mo }šMåzÕ–PM025{yîì#(Ÿ2°b‡ùTÒO,ºd™´9DdÖ_Ê ¤F™ «£ichœ^{æ¥Ñc¸·µóÄ'F­imr)Áp:SŸo¬.î„v¾jJÛ•ÅGgcs5­Ä3ÇåHÒyŠ[ÖºLSB óÖ€0fRšÆKW·N·u«-ËiQ‹÷Å6íÍkÍ.ÑœÐ#ê©4u¶Ž!æ À·Jdö×o¢Çh°fLß7LVéQI·Ò˜×ºl×6–̘K˜0@&­Y¶ [ý)"HÀþ’k@- P"ž¢¯-Œ‘Å)Øpk/ÃrÎ'¹·y ‘Çѽërh#š&ÇÊÃSm, ³Œ¤ ´¾¦€'Í6A¹{S…ÏÒ€1tHnlüÈe„lf-¼5V¹[ÖÖäZ‘ü£‘Èõ®‹`ÍsÒ€1µˆîdŠÝ¡BÊ­™´š|rÇ{4Ÿgò£‘F1Ú¶YAF1ŠC0¡¶º:«ÜvÆÇž¢¤µ†àj—¼"‘võ­­ t¥Ås–‚ûK’Hb¶ó¢vʰ8Å_Õ£¸¸Ó¼¨âÝ$ŸxÒ´öŠïEÀÁšäGj-ÿxiù½*Åå¤òÁo,!Vâ.ÍßÚµ[¥!  K„¿¸6ìöè68bQ¨Z\­Ò]Ú r=kSí–Âä[y«çw½X‹ÏKow©ÞDÓBa†?^¦·v¶Ì C4Bq˜¾iÛS- =)”Ói)i1HƒF(4 kœsEÔP0 ñKÞÒ­Ò£=jCÒ£n H˃KÒ’´`þRŠ;Ð:ÒbMÅ1 ÚƒéKIÞ€ ;ÑJMè4w¢€ôQŒšZÉ¢–ƒÚ€ô¦’Š4½¨ Ž( Rt PÑž(£<Ð(íÍ):ÐøRu¥£½fjRií$q]¿ï² EMu}o`Ï}»¸ZËñ)»³ùy/ËcÞ§ñÓ·mk©Ï¥;n ZÎâ&9~Üu¨u¹‚C ;°e‘TàöªºÄP}ŽÞXQDÛ×Ë+Rk©’ÅÜ|âeÑ`.;ØÙOBE+ªvõ« qÎ!gQ#r÷¬Ítö;‡xæ©:GOË'?…X“V³Žw…æsH5› “í ´£öXÛIJ3"°ò·cÞ“Mµ‡ûSPýÚ•S€é@×1]Åæ@á×Ú§¬O…_¶ÄÄ[]¨j•æ«mc2G1mÍè*èV7ˆT­ß¶aMjÛZµ¸¸òdc÷w.7T×Z„®Ë3»j®N*†µÊ-<¼y¾bíÇ¥-ÍÈk«ˆ¡¤±ÇóHÿÈR}µ—ÚÁ-?„Qý£ØÅÐÝåûk6ĆðÛÉòÛ"™ ð¯†ÊùˆË#ï@u£úbL¼êÊ“\I“ | íT¯¤ðœŽvJ»¬t‰‰þíZŽXá²I$`¨¨2M6ÛP·»fX$ÉQÈÆ*•íÄé–Ë4~ný¡Wبî”ÂAhOQÕ[ˆšSȥת÷¨Íõ°›Êi“Ìþîk>R«®ïb[s–üj¤1-´ÑAuËÒîŽeëŸzèé0sJ¥VçQ¶·“ËwÌŸÝQ“O¶¼‚ê2ð¾à:ûV6ŠWûNûÏÇŸ¿ŒúT¶áWÄsˆ~á/Ž™¦‚êvn‰× v±÷¬ÍUa‡Z±¸;Tîo\Q¦Aö¾¡F¥râ¦ÔJ kOV7ò  öÚ­Ó”†L¸þÁ¨'63jïpncûª WÕ#UÔleˆbo3×½$°¨ñ*€LDššóZ·µ¼[gÏO™¿»V¤¾·Ž™å6è}k2XÕ¼J›‚ŸÝdñS_In×öðy~dè *ç =Íh%äÛ™ãpñ¨É"¨'ˆ,Xù»@=ÇZfƒ—†ëÌÛÌÍÀéT4{8µ’%m®Ur:P»k*ˆÍp»_¥^ŠU‘ã`Tô"¹ë+X‡¦m€’¬w0­=þAãýšÐÎx¨nnbµC$ïµOšÇÖ®`I­áxVY¾MÇi»g} îï/våê¬0EEsª[Ã+BCÊÊ2Ê‹œU=)™µ;âì…þQòš‹Aš%šò)™Vs!Îîâ˜ÃÃeòúH†˜mÜ×AXš í—þY2ðmç41 ´Çž4uF`ºZusS4’xœ£Êbù0‡­ :çŽEfG/_j† JÖáü¸¥Ës޵IíáÓ­n¥šW•eûõNßÚv å$Q„bŠ4ÆiÜëV¶·BÚRÊÞ¸âˆõ«9YÂ1%zuªZ¬q¾±`¤)É9ÍKä¡ñ«Ä<ŠÐ³Ô-¯wq^£Ò¬óšÆ²EOÝ.ÁÀ­ŒóÒ…â¨_êÖÖ¬snÜÞ‚¯Ö‰Ôyí…ǘ2M0,Ûë–—ˆAd-–\W®.¡·Ûæ¸RÝdkkµ·(ÍÞ»1RÝJz(ƒÜ¤yË6Ši-Ä/ž²vª©¬Y6г]¶Š¯¡®tŒ1%²*§†á‰Òä:)e“©¿u­Akx–ì³÷ˆíWöef·ÝÈëYWJ‡Äv¼.viºä›5 -í²ãpíE†jÃ} ôhHu*˃U·l¼Ù¤ §·Zuµ¤Ktg´’Ç-ž+?NŠ&ÖïÎÕm¸ÅhmØù>h—#¦æ®[\GuËnCÞ±tˆ¢/¨ŠG˜GJ›Ã|YËŽžk`zPȤêqQÍ2[ÄÒÊÛQzšm܉æ@áÖ÷ ÑHiRûP‚Çiœ° Ü {ÝCq»¶ñ´Ö‰ kwù†j+ùSû 2œ”èi€Ëé"·×íå`qåœíæµ-5.™’7ùת°Á¬û†Q®Ú“ÿ<Û\…:Ý¡ˆ|ømøô e¨î,fÕ6 ÝrªFìt­Õ‡ð’±LcËç»IˆJ;RRŽi”qøÑÞŽ)´(mæ˜ÆÑKIHbŽ´†–Ò§¥DÀ“Rž•rjFYލ­D'$ûQKMÉÅ4c4 P}:P(ïGñ{RâæŠZ`!ŃKš3HiM'zZCKHÄzÐ1iOJN½(=(zZzQÖŠ(ÍœRÐqAéÅ PsIšu7Œñ@n´‹k¹Ä²™ Á¸ª¾"ÂiÁr1¹s“Ú´/$¸ŒGöx„¥› “Œ K« {¦â ätæ˜ZØ[*Æê™ÛÊó¿J[Ý=/^3#ȾYÜ»Oz³1Û H—jŽÂ«_Ý:Ë´K“’>èõ ÝØÅuŠ|°<Õ_ìkThœy›£èwf­Y-Ê£ ·YwÊÊ1ÅY"WK€]‘¿Í=NêXtÈ!i ›¤oœÕÜqP$“}©ãhqnëLl4جC¹ßÉ sW2{ 0hÁëH½bøoØ£ÉóšÚÅWžÊÞåÕ§…\ÆiˆK[[hØê©Å,ºl2Û-»nò“¶îµxÐ)JM2ÚKT¶‘Y‘Ë–äScÒ­"ž9c‹k Àæ¯ÆŒPYtûyçYå2/FÍ:k(.%I%RYËÍXèúÐk> Ò†uݳîóJÖÍp“4y‘>ëdñVh  ŸanŒâ?ÞâÍX¨ï'û5´’ãvÑœU>=KíBk—O)×;µ4úЧs¦[\ÍæH„IŽYN3WIæ³òëûdÚÉåùE7.:Ð"ÌÖOj°:Ÿ)z(5é6²Gl¶?»ó*øÍ;ôVæÎ+˜„r®BòqI5ŒsÛ¬_`ônµk”^ÚÆ+h<”ÜPöcš |?oå´i$ª¬rîlŠNô µ¸·c [ovïSKŽ( IJ…$PÊÜk:ßB´·œJÎB±àV¯jLP)ôø§'%Ä‹÷Hn”ÛÝ.;ÇIÝ$NŒ§Rc&€3“H„Oç;É#Ûó6x§E¥Å‘¶ùËûŠÍÂÑöéÓUˆÙw+g­_ÎhÀ£¥.)1ÍQ»Ò­î¥²²H?‰ Imc¬L‚ õlòMZÛïEgÛèñ[ÜIJ™:òÝjKÝ6 ×G”¸dû¥N1W{Q@ Óâ‚_7sÉ&0FÉ¢}.&¼EåóO›Š¾FG—ôy¥Åw:ÌåÒEãr6)nt›{™c•÷‡AŒ«c"¯â–€([éP[|’ê²u©-ô˜-ã•ci1/Þù«F’€3†Ù›T–Uˆœœ7éV,mÆÜ@ŽÌªxÝU//®mõ+xB¡†fÛïZƒ‘@ Uo,-¯vùñî+ÐÕ®pq×Ò¡µ3´Y¹EI3ÑOj¯•iâhãØã¦ %Îgu?›$_?r3F³4öö5»„dääg"§°§²‚Y>ó¨' ®“ki;K •fíž*î)Ç­Cyr¶vÏ;ôA@‰yéT¯´»k×"ã£)Á¦Y¶£$©$Íë»h­hþDi–ÿckf ÈýK“QbZ¯—´8d9VÝÍiRÅ)K¦ÛM:O"æDèsR ~Ñçìýéþ,Ò\Ý´rˆaˆË&7œ`Qi|³ÊñhåAÊ5,:}¼7tSæ7V&¬w§M?z€Ò°|P­áÉëEnîR:Õ{›k¢x•Èé@ˆíìm#¤c qÎqI6™o5Çžá¼Ì`àã"­C CH×jŠ’”bÓ-â‚H£ Šýpy¦ÙiÖR™!߻ݫB@Šwzm½ã«Ê¬z2œ|ö0\[¬&ô^™5gP+]: -ÂÆî¼Ó!Òíà‘Þ5`Ï÷ŽãW‰ö£ŠS‡M·†9%eýï˜Ô––qY¡HAÚNy5g••yyum©ÛÄ<³ ­Œcš¹{RZÈ·ÇŽk7Ãv¸—k$r7îÕ½+s)(w¤Ï4§ÚŽôͼW1æMÊzŠ šŠ _(œòƵMf}®q¬ VÛåÜ8掼Òà»diOºÊpE>ÒÂ+]Ì€–n¬Ç$ÕÁH)It«UŸÍ|Ìç;^¥Æi(:õ¥£½-5¨4Ž¥»ÒïHaA¢Š@%'9¥¢…#t¥íIÚ n•<Ô†£#š‘–E)âŽi{Ö¤…‡­- äRÒ½J=èZkgRO”t¤<®)s‘Ò˜M/j(Å%-.("€Ç¥%”ÐQE¨E IÚ—¨ )¡~mÔáÒ’€”QÍ-'ò£¡'4f“@ z{ÓG¾ôP>¥yum¨Áð ”Àç4ÍZ[Èï­V öG+mÆ;Óu˜®g¿¶xmde…Á-‘ÍóIÖ2F£™ÂŸZ`8Iw¦Þ“܈gm¹aÊšl¾añ<%ñ·Ë;jËCqyynóÄ#Š›³–¨'Yψ"™mäh‘vÅ'žùšîKhÝD¡™•w1ÍK¥ÜÏ:H.#q±°¬Ë·pª×0ÜÚjFòÚ2È»]óõ­ )'–×1‰<.rqï@‰ù¬»‹©/ï ¸uÄ`mÚ=kTôⲬRäê—RËnÑÇ I#µG£Ïs3ÞE4ìþ[íSéPÛÍw>›xäù‘;q׈aÔ,oîŒË$s6àűRi–·6ö7kuMû˜sž´À«ͧ-ê_HîvÃЊ›Q¹žm"Úê&b»‚ûѧ »aHã Ë´>z ›V…mtE‰z!Pã@îá¹ÒÌw‚îIWp󻿮\¼ëªZm™„2õŒjYmnoVŸË+b§;±R]ÛÏ%ý´±ªùqg9=sH íJÙç×áO:DÝr§îÔ×ú“ZÍ”m&âé1–ü*{û[£ ݨF(¥J±ÅEªéóÉ<ÖÊ ÄXÜ„õ  ôéî$ÑÒ_'nU¥\Õ“P›R»µŠéWhÈ,½>•£c=ìÁÚê„(ùP“Yv«}³%ÛY>É~SÈùEo[,«,ì@¿3椑KFʵˆàúPô§sHF™w7—yäíæÂOà=i~Ù=––“O#<Ò¶péšf¡¤Ë.¬’Å‘£÷Ø5sW°kËEX$ƒ.{â˜Æ[Ïr/#OßI/Ì̘ j´­¨fKhîv£&å,3¶¯YO{+â{o%TrKgqöªuíƒwöCåíØpéë@jËpšR£¸‘‰Û¦jíÛÜG bÙAfÀ,ÝzÕMvFñ$i#1ucµs€)Ú‡›*ÛIO,?ÇàŸJ“N»y¥¸ŠVW16ŒÕY–I¶ÿf”Èë·h\â€.YË};ÛϽ ³¦XwÎ+DýÓŽµGFg6+ÉF6üïҬÝ4ËnílªÒò†é@†XMq4Ln¡8lž¢­f³tkùoá“Ï@’FÛNÞ•¢j­¨M<0fÚ#$„àJ«esrÚ„–Ó²8Tݹ0})5ÁtÑEöew]ÿ¼y"¢²YbÔÙ…›G¨}>´,ËŸÓȄãóªÚ“_^m¦TR»”9îõ¸äóyh¦2Û=ê[ñ$Z¬>S¼J…~A’(-Õì–‹o ²5ħÇæ’Êùå»’mà.àáp>•_X†ãí6—¶ñ´žWÞA×®ÚÝ4áØÛIQüC“@Œènu9î®­–HÃFÜ6:T·w—vú…¤[Õ’S†zTzbÎ5k™%¶•^„ô.±éwks eŒÊ½hÌ×RŨAÚc”ÜŒVkÝjo«Ím©€¹\Ž©I¦Õíeû,¨Š¤Ã֞ʺü“ŸÊ1í @YÜj·qmæÆ$‰¹}¿¥]Ñ/'»‚Csñɳ8¨ì#ž«Ùž !Ü£¹¤Ð|Åh^2Ò…6{Pç N2@íJ:T7žoÙ%ò?Öm;~´È{ÝBŽiŠ¢I.Ï$Ž@úÕ½Fòd¹·´¶!d›’Ä}Ð+ ˺–Þ{IÞxåÜîÝþ•©©Ctò[_ÚÆL‘Œ4gÒ˜][]G«Ø´³ùÑïùxÁÐ×=w=ä“ÙOö)Æ;–·Ð–U8íÒ^y«línTHºVpÔdD[©NéX`}kFõ¤[gò£21 +-4ùn4%µ•|©¦}sHe}VÎãû)¤’îFm ºž†¶tÅ an;yb±ç‹V¸ÓžÚH#8n ÉÅmX[HÖTØÁq¶˜‹9¬?þʪ|’ÃqÏ9­ÓÒ°üHÏ$1ÁR;î ò®F(mVæ{M5%¶*1´ŽÕוš¥ÔÒG$È£EK«Ú#§¢ðxïLŸí7Ö1[ fMØÞÌx’\êMöèí£,£föe\š’ÚúU‚âK•o..U™pHÅUÔmnmïâ¼³ÌÚ»=ªÖÉõ >dš/ ºáFrh[O7w—ÿäHßåØzí¨â’äø‚MªŠþ^ÎF(ÓçÔ- [CdÌ˾~Z™"¸‹\i¼–uhÂätÀ³y%çœÞ\‹ (™ÝŒ’iöSÉ{¥,¤í‘ÔüÃÖ³åŠìßÝy–Í2:þìç…«Zκp†xZ&N{Ò‡mît­rûD„2â5ÑÈÑ໳‘à–ò‹óV•Ú<–ò,M²B¸Vô  x£ñ¬OÍpZâÞy žSpýklÐHû±è£5‰k}ªp_¿P*¿ömÕÆ“òÚ9árʧ½Iq%þ¡l-~ÈÑ3pîÝ)X RêÜ=´6¿#L»Ë«T®á¸Z±Ëæ¡o—ŒRÞXÜÙËmsf¦V‰62zŠŽyo'¿³¹62…ŒôêiÑ~4Éwl`¼68§%AÆ¥!ëR#J¼¹‘®£º›ç‡Œc§½;ûBkm/í73»a1ôª÷Ö7?ÛöÙÌ1!sZ²{« `¼dZc"Šò´Â ´Èÿ÷eBÓ›þF'þxñùÓ¬n¯&ÛÖmÑó37ò¨Ð\gÍû;vy{³úÒÏ>çP¾š%òa‡†eêM2ÊòâßU672yªFUÏZW‚ïMÔežÚ:¹e^ Ôpé××Ý\2íŒwQT#x:“à ýiÝëNÐ$´»Yä¹Þçë[•,ïG4Q@%”Ò¬Ç ÒÑGJCõ¢•© þÔ”{ÑÚ =ê2qRâ£=y©j€=x ÑZˆ:µ(¢ÒšN”´”´QÓšJ)x¥í@ E)éIŒ­§€æõ ÐÚŠ;QŠ@¨íA>”v µt SühqE´Ru އš;ÑÖ€Lo–žÜSqÍ'ZÉÕíîîn 1Dž\Nq|f®Üß[Ú²¤óžŠ£&šº…¬ÖÒ¹o’>$ 0Gá@ ™fŒ0e'¡Úr3RVrÞZÛifêÝ?r>ꌜӬ5Xï†<·Fqܼ~t|Râ©.¥lÒ*åÎÕlõ©.ïà´Ú$-½º*ŒšµøQPÛ\Åu–Ê|’,q³¹Â¨É }W¾YšÖDƒo˜Ã7J¤¾ ±17°±¼ÓŸ^°wJHnA x¦¢ÛÜÚÛù„Ú¿t©§ës_Zˆ`d\Ÿ›uX¸¼‚ÖßÏ‘°±ÔÕ6Ö–-¯=´ÐÆçØq@m–T…Vm»Ç-MÞ³u=PÙ¬^TfC!ã>«åZ%ÄJŠÇ‚´€Ó´‡ƒU,5/Ãù;•üÊÑM}VÑ%òË1Ãm,åë@è5^òò++:bvç ‚ÓU·»™Òß(Ý»oxŽ”Ó"‡ØYwv\óT,õ«{ˆ‘÷ª@l¥Ô²¤¨×….1=©qU§f²ùFeÝœ~5r $(Üp©¤0Üœnõ¡%´vÌ·l7ù~´©%½¢0`€6“@1KP}²Ø•S<{›¢î©óÇJG Ô1]C4r+2õÔåAê+K…#Öoü°.0´·Ú«Þ[µÅ»F’´Dÿõ¦Íonû$“çÆv¨É©!¼‚â$N¬£©ô¦,lã±·GÏrÇ©5d{ ¢5‹-¤ó×jœU¨'Žâ,N Š@IMlÏOZ¬ÚªžgAïÚ’y­.,™¤”y>öq@¸<ŽE:©Íwm¦ÚFY±0¾¦¤û}±€Ïç/–:¶zPô<â¢{ÛhãI$•U_îŸZh-Ó{0U~žôáqå Ìþîy© * =­sÌö÷^#¶x:ª’ücŸzÖ¹’ÞB’¸óîEÝL yç¦)p3UÚúÙg04ª$q\ô§[Ý[Üîò%WÛ×oj–€1U¥Ômar¯( ¿{¾*Ìr$¨6 §E ƒJH Xžg jÀ³´/Ë×4ÀÐ Š¢ÚŊIJ…ÚÜU¨®"š69£þõ?T_[O!Ž•Ør@4“j°Î!’UY=)b’¡‚úÚéÊÁ2»/P*=ÖÓ_/ïs4cî  ®naµˆÉ3mZm¥Ü‘ù8eéY7öç[+3|‘GŒþ,Ö‡gf»QBnù¶ äþÀ¼j)&Ž2<ÇU'¦MGô3[´ñ¸(½sÆ+z]iws*³¶í¤öôÅ+£­Å5ʼn‚ŒŒØç#йjÈŒIÆUÆ ¨4yDšt?>æ7sVîÝåòÖTgþè4.(«Üß[Zº¤Ò„gè ÷Ö÷*æ)CûÞÔÀ³¶—M5KRêžgÞ8RGñ«¹ ïP\ÝCh›¦}¢¬Ï±í&[ÍZìä ¼Þëmã5ÐCqɾ)U—Ô“¤Æ EÜ«´r£ûÄ”ulð4žjÇ·t¤ÙE@f§šÛ¶j¸– ]-¤µ}Ñ…%I9æ²oa‰ô(g*í†Ü:’zÐ÷Ú`, J™nžµ8U/.ÖÞÖœ"ˆÀÚ[Ö¬Eu ¹ü’ÁÅIŽh²à×­¦¹x¶²…mªØÎkR€ 2sU ¿¶¸ Š@νEY ïE/z)襤4†–ÒŽ”†%'zZNô N”RÒvéHÔDóSQ“R2×j(ä ;V¤†1E¨ ð¥Í!8 zÒãšB;ÒÒÑŠJZ(ÇQÆ(£€;QÔQÚŠ`¨þ:йÁôKE&(;Òÿ £ QÞŽ”@ ÍÒö¢€šçhÎßÊ–Æ€¬{Rö¤Ç4¹ VÎOø©å7<H\þ•ÐL¶þTàyy+óÿõé·šmµáÝ4?÷‡’.Ú+wƒie¼Y²M;Ÿk¶O ¼â6«ztˆ4hÛ!¶Åó~Uj (-ah¢j7U¢ ;{du†Eo½Žô˜Ìk‡Óß$>``‹ü>õgTšä\ZÊ«qy*Ý š¹ý™fcØ`M¹Í:m>ÚvÌ‘d·ð C4y–ãOŽUˆG»9 Ó>µq†PƒŒREÅŽ5 £ ®ˆÊÝb˜þFÆøº);ØKmGÂìv®v3dúÖœ:U¤1µ§5¼W ²xÕ×Ñ…7ìðˆ<ùXÆÜq@z½ä3ZZ$S#Ÿ1IíOÔRKi漃˖&P³FÕ¢ºMŠ«kÏJY´»i¤guo›ï(cƒøP¶Y²„»#+¾•g¥1QUQpÀÞŒMQTë¶ù§”_øITàe`þµ~Ky'óÞ ÒvcÚ•ma-|Ücwzc3lW\Ô Û÷TàU+»…šÈ4)P<üâ<õ­Øtûh&i#ˆ+·Þ9ëU΋bÛ·@99êh=chÒe‡EÇçVôõì0ù{q原J%Ó­¦…"’=ѧÝéRÛZÅi—l\çÌÐUU¯8ëÍ*£ñÁà~ä5q4Ûx®Ê!YäüÜ~T£O€\½À{Œ1ÝÔP3?ôIá·™cžÚy7ÄÿÄZèÇJ¥›m‹"¡Ê}̱!~•s·Î×Ð>—(+œcÜÔZ´jº#‡Ú£oÖ¯^XÅzª³î*;Å2çNŠæÝ`vqö @ÌNδhd3)ó÷Ít ÷éT®t´¹!y¥Ø9ëWcb*î'hÆM:±tóÿÍC×å­¦)ãŠÏ¶Òc·¹k…–Rí÷‰n´„TÐXI-ãJŸæœƒÔ fžë·±ÃÌe‡`Õ¡q¥C<þr´‘HxcmÝRÁ§ÁmŲ‡3gæ?01ôKhY/ZHÕ€¨ÈÎK¥FÒh2,M°¶í§Ò¯C¤ÁREH«'Sº«Þ[Á¦i¤~fÂ1÷º@ mq£Eg»™w}ìqדš½¬À¿Øì ®èÀ#ØÕGµ0éªöú‹ ‹¸ ÜUè mOJ„]³«0ËcŒÐ2f?2Âßåï^}M¬ÇZ5ÂÆŠƒ «7|w«o#6nã¿aF²kiåV,Çšgj(ÀÎÄþ•+cûJÌI‚—?ÞâšÞ¢òÚyØg<µ\ŸL‚x#ŽMÇËû­žGã@Êr„!‡j|¢Kô—HŸð‘Z2¨ÜQ‹™4HhåK¹;ïëõ©¤Óc’ì\ù²‡ÅPxb—ÄÀ2t‹-èiÖФ:õ×’¡@ˆ£Ö®Ç¥Ä—¦ëÍÉîÔC¦$7mr$‘¤n'¨ FF“Úíî•î6g;ÇÖÞŸn–¶‰o½W£UIô9§2üè[ïlZ0ÆÆ±Æ¡QF Ÿ»ÍsÚm”jšƒA†«qZ¢[ùº›œÓ“ ¥½å…¯™tB¨(#­o/ ŒÖdZ œwUFàä.îiô @Ãp ò+GTTÔV5 n2îR¹#"¨Zé1Z\4É$Œï÷‹7ZÈ¿˜Kcy%´J‹¿ÌÜŸ¥\ÕU_@9Á*ŠEX“E³v•oÞrFî3N}"Ù¬ÖØïòÔçïPUÄ/†¢qnÚ§8©5‰WN]ûc,7ГG¶’Õ-‹J#NƒuI.™ÖKm(gEèIäS¬^Årn™ÝFqÈ­LÖ}†“obûÐÈíØ»g|ÔâVq`¸$!p”šºÛ¶ˆJ*m5«4 qG*îV"²ÿá¶(ÉæË°ô¸À‹V”Å¥Zp• ôÅ]·µW’;µ3€>Uã$zl)göWÝ$íœÔv:E½”¾dEÉì¸RÚ(¤×/w"¶zÓ£Eƒ\d…@G‡,£ ©eÑÃ_5ÜWDï×mY¶²ŽÝÙòÏ#}çc’h#BÚou·~6þtºl(Ðê;”27ËV$Ðc7MHl·RÇ4„gh;âùˆ]Þo´ì 7AÔÕDÒmVèܪäçïqš±rû s°ÉÇÝéKNm:Y^K=¾aûÞµ¥X:Ÿ,Ws]¼^J¶BÆzŠÞ¤À) -% JZ;ÐPix¢Ä¤ïœþ´†‡ZN)ÔÓÒj&ëREFG5#-RãŠ^Ô™âµ$)qE! ÃšZ1ÍÇRRæŠJ^Ý8¥íIõ íH)[šJ?†„9£µô ò9¥ (©h~4 : J -Rõ¤P0ô¥¤¥ 4½© ¥ J^À b´µÎ½ÝÞ§©5¼˜mПzœTÖ‹wm¬ýžK§š//pÝNÀmšMÕ‘fÒ.¹uLî ÍÒ–ÆI¾Û}•˜G›ÎpM+®)sX‘M,ö±µÉ™¥Ýæ ü£éLÖÖí+?&wŒÈvà07x¥®n;k˜µv´²•–-ÌÄóV4£=¶­qg$ï4h¡”½nP(Z)>´qšÄ»y-uëwy_È›åÛžSÄŽ··i$jUS?.à9¦3cŠÌÖî.m¢†KyB VëšÌ¶ŽòòÅ'… ›wšeÆ9銽®ït,ànY°÷  qÒ—<Ö^¥s7Ÿkili¾ó÷Úªj >’ðÜEq,‘Û"Ès@ô¸£lá±Åd5Ä÷Ú£ÛE#C JŠõlÔÏÜ67 ×e›–ñóï@íëû[#KܯJ˜lxõ¬p%ŸÃyy˜HcÜ_<Òè6¯ŒsyÒ>ôÿVÇ€i°E#2¨Ë¢°^êæ Ëm×aå–M­Ÿ”-;ÄP¼²Ù ••^M¤çLFçz\V-äÒév±@’É4Ò¾›’Kfn–ð)óš_˜ËŽÚ€5HéAàÖ ä—Ç^[h® FñîÒ’í'¸²7@yx>nÞph9£‘ \\H—\¹vŠM¡½k_4QEZSL•Š£2®æ…õ¬Ay ͱ¸‘}&Ót}i½Ú²§¿¸‡Y†Ûä0Ê?àBŸ{u+^Egnv3®æ~»Eg,7øŠ´7™òßïB£ëEfÏuq«%C(þï9©¿m™.î™™ZÚéŽsH Jk¢ÊŒŽ¡”õ¹õÕ®¤€O319¬y~µkW¿¹´[y UÛ!³ü©mt«4pËm#ž•%ÌÏoåài76Ó·øEQ]Fê+¸RêU˜á@=*kÛÙ­ïmaHÁŽfÁc@æƒY×:ƒ}±­âeMƒ.Ì3øRÚ]Ïug1,ªJ«àúÒJkW;gyªÜÙJñ¼E£c–aÖ¯[^Oy£4êU&ÚyúP§ò¥§‹¡}¬Z,ÓÎ `˜~4É5™ÝîchƒòÆT’Ô»F3QZÜ «hæ WxÎ Lh˜¢›/™å7—û~\úÖ>›©\\Z]¼ì‰$9ÇJjÜ´‰´)¾@¿*úÒY¼²[#\F#ýå¥eI}ˆnÛËó?w¢ÖŽ›+Ía’¶]Ðio‚–“­+K%ÂÞGCº3ç¥YïYBîðkBÚM‹ÒËŽ¤Sm¯.5+‰Ämâ;w’Ƙ͊1XÖ—×Bî{ʼ¨»‘ñ×ëEž¡s5…IJ¼k$DŒmû¸  Iähág °(ïK4‘+H…º¯¥e\Þ_A¤-Éù¼ã §ßjrÛ­¬i³ÌŸøß   lzÒcŠ©a5Ô‹ »E ­…eèÃÖ®”€Jö¤n5…y©ßÛ¯žè‘ÇæXØ|Ì=i½Å²yti̬A@tÙ.åF7°¬MŸ”J¹ŠÎÐn&ºÓ–YÛs8'Ò´¨)1Š\ÓO4€\Òb–Š@'Z(â–‰E˜ bÒv¥âÒ„Tg9©MFzÔŒ·Aæ—RcÞµ$(¢—¥%¼Rñë@ £µ)4ž¦€ sÖ@éGÒ ÖZ1 ŒŠ¥¥í@Äú 9£µÒÅ”R¼S”£Š;ÑøÐ0¤4½è AÞÑA 1KHzQž(c4cŠ(ï@Ì´ë«-Oív*$G?Uõ¤]jɯ¬ŠEþµNäúÒÙØùh¶vË!ϹëOMB'¾k0ÌQ“Çd昖Ú]ý›y0^(·ÝžWæoX·ºº!· Œ†fcéV’êy‹ïÚ’Òö ÝæݰàñŠS¾±žå-ç\%Ô<ž 2[[ÍJH–ê5‚ÎæPÙ,k`ô¤¦3æÒê×R7–H&YlˆN*Ë}¾{)ƒGHü*îè>µ¡ÔÑßÖ¶s®m'Ú$ØTsQÚÛß6KYhÊ›cunµ«ÐúÐ)Î¥† ±Zþæ Ö퟽ËÖŽ«kqr¶ò@¤‰÷í'­iͦ3'S³žúÎ&UÝFÛ”©¬P‘¿ÓcŽ4 Œ/RkCÐzÒ’Ðܶ¸·Gî•6ÝúÑkÄzÜò@Ádo#µj“Нm}oxî°I¸§ Å0)hÑO—&â’MëȨüE Ä–ë,ùkK ã5µŠ¯qiÙUœsŒðiÍ.I%Ó ’o¾ËÎjå4(P¦)$©h HNÖ3 oõÛ~\VGt«i/ØŸtm™Ÿ™uÈéE01õ®c¼†úÖ/1‚íxóÚ¢i.$Ö-nÎE]…qé[£$QEÀÌÖíežä¶ž'Ü´ø,â[$þ²U%ÏûF®Í,pÆd‘•u&’ã7Äêê{Š@aé²j6Q-ŸØË8Y3òSk¦YÚ4†GÚáØ¨â¶Ç<ÒSTf’öĬ2FÜH^•%ü™Ôìÿu!XÉÜÁN9­j;ó@w/.Ÿª5Èå†eù¶ kCÏilVЕ?'ñUÌQJ@súZIi¥N¯¾c1Âíëš±¥G*èÍ FÉ 0ÃÖ¶£ÀÉÒüÙ4óhðI*•,Âj–qs§DÖsYI+;YGº:1@ „±‰K¨FÇ*;SóH3K@sw63®²Ñø[Ý ÉÇõÒQ@zÒ?öcÁ Lìãh :U(·Ø"FFB‹´†pbŠ_­6¡žò lyòªgš˜2ì ÚyÍ 1KI'ˆO"QCí¼TP}£Iº™ ,¶åd oäœÐV˜u­Äš„·÷)åî]ªžÕVK)×[xS?e¸"Gü+¡ÛŒÓ±@:þó``†7rä”tª÷²Å2CÕ¤†C;•«xÑÖ€2ôçŠÃlû¾ñØ®ÚÓ¨æž;uÝ+ªV8§$ªÊ 6r2 Ÿxü±—Úvýk’š;©¬¿}m3Ü$›™Û¦=«¯ëÞ¢–â˜,’¢“ص Í@M{¢nHd8>YëVí¥k«&L‘»pãw•JÇÑ[k#öò'•“œuúTZ<².¡t^ Qg}Ê̵»Žj9eŽ2Jáw4‘z—'R}мð4{QGÝÞ£±³šãEšÎXš&Û»¡­Ø¤I£Y#`êÝïN4ÏYË«B‹fm‡Éò‰O@(níuéßììñÌ@ÝØWCÖŒPD¦c®ÂþKùJ…7cŒÔ"†X¥†úßýdgi÷­ügµ!@ÝE+—3[hͳ›†Räÿ´k)™Ú;9ÚÚrñH …»×RG¥úS·Æ¬T®FqéXšÆ¥}czŒ‘ÿ¢Œn8ë[µBúÁ¯¤E–L@¤6Õ±¡uz+â¥Í``qŠCH@Ý+Ÿ›þHœÄþZ®ÝÛxÍt‡ƒ@ÌÜu館ê¦= •ëNÒ$j—¤#.컊ÛÛ“@U8æÎv &Óµµ6’ºÊÙVQRéQÜ=µð’'¤b˸zÖót¤Çî##KûLzi·hY%E8fèMg,wßf‹6le÷31ûÕÓQÇq ’4I"—^ E+ŒÇÕ ÅÇÙB[9da#qÀ«—ï,Úcˆ rò »QZ¸æ‹— ,ÐZ yàhÊg {Ö§j(=iˆ>´ŸJZJ@QIžzÒ¥¤¥4 NôR÷¤é@ GjZ*F1…DÝjVëQœHeÊJwNÔ˜ç5©!ÚƒGj  NÜÒⓞ¨P}¨ Š?•.(Îh¤J=é(Í12h¢ŠJ1Gz(:R$ð>_Zu&9 bŠNô½èÏ4J2h<š8 Í&=è4†€iM& ÔP1x¤ÇsKõ¢g\‡í Š_”w©úU‹-F+Å}ªèÑŸ™\`ŠÉI¼TØu+åñƒÞ¬FÞf«¨F…~h€>ÔÆN5I'25­«M|Ü~”øõX¥°{¨ÕˆO¼˜äU ú+{6¶¹aç*äӱöMBå¾He,T7P‹âXºËöi÷°¼/ã[L—0$Ñœ«ŒŠç!eO :åwñÿ­}Ò­ðAù4?JÌ¿Öc±»Ž #s¿ø€éZuÏë2DÚ½‚Gù‡¥ Ö:²Ý]5»C$/Œ®ÿâ#][6¨¶å ¸UÈb½Ö¨Ï2ÂIl¡—ˆÈ8=êi$_øHb\®D&€+É3Câ)™by[ÉUkBÇP[Ï0Ú9#8dn¢¨Å:ÂK0,¿ê‚õïI¦M֯²œG=iŒ½cuku,æÚ<2;mÆêƒD\=ïýw4Ý£k›ò¤­ëK¢È¦{Õ 9˜ž´€×üj«˜¬áifl(ýjjÅñ"¸ŽÚM¤Å¡¤Ò?µ‘ yðK 9Â»Ž :ûV†Êhã‘$c ãhªÚÕÄ3éA#!ÚlÕy4ÛÄHLiÛÒOÒ€,ÙkÝ\ rC'P².3R\j>\Í0½Ä‹÷‚ S½T›[²0]rÏ·²Ña:[Þ^C! +H\n=E/Øê^#í Ã#A¨µh\ÛJ…äU=:E¹×.f„(&Òá5.•åý¶ýr§÷œP·úÌV71BcwÝË: ¸·‘mÅUúdrk:ì¯ü$a»FÇ4Íeöj6Eؤ'#p8Á F¬7QNìˆNåê¬0kÎî+=Býš7ù¤ÆI­+K{d¤Šv–B¸b_w’ê×Á˜n /Ú^Ãy™ å{úŠbjVÏ2Ä%‰Àã‚k:Ñâ‚óQœǰÆqОõ¿™>œTE ÷*ƒÏã@=SV‹M†RÌç…•bÒò+ؼÈ•ŒVv¸ªòØ©™…k"ª¯È jÝ¢³.5»k{ï²H­»Œ·aZ)–\ÿ:vj «ë{Rò-ÐTÿJ½x濜ÛGºx£Ã;7 ô¤…é†ëK™”«ÆÑ’1Yºýµ¾RI±²s‘Ç_Z~šü#‡w?#w©í"‰ô4Úcæ˜hêÊ ¶CtæYVû,IŽÜúV¿4€Šk˜mðf‘S=3KñΛâuuõ°%wŸZ›÷‹¹ÔR3RÍ šn—vñ˽ŸæÐ™Î:ÔÒÝCÏ2U_0ü¼õ®wSOO.&®ñëVµhO—`Q"Ð6òæXžU7EÍ6âþÚݶÍ(VëŠÌÕN£`˜/’ES²I®µ+Ò“dŽT–€:HfŽxĸe=©9ªUŠØÛ´k'™¹·f¯sHînbµMóÈ}ê½¶©kvå"—æôaŒÖUû+xŽÝ.[÷Ar€ôÍA®ÅÃä|· üô§`: 5 heI*¬‡ ¢;ûi!i–eòׂՋ}k©éé(ÏÄ÷©uØÒÞÊ5"iAp£­A­ÝÚ]Z퉳#0*JžžÕ´â°Xî,{œœV^¾°Ic G·;€R; —W„e±•ƒ6Wiô eén­4ûx÷¾Èñ…ïš§hΨ'MÍÐf³õø”éHØù®ÓUu+E‚ÊÙŽß0È£v9 GHòÇîw =I¤†â€|™ñׇ|ÒI¬ÚÁ¼ ¸nf¯YØ4ò\´á‹® ªàP•5ÝQ 3QÔšucø™ÝtÝ«¬à6=(_]¿³ŸN‘Cà;{ûVª'öLHíµL@g8ÇKU[fÐ?v®ÕØj{È‘´6Vä,Y}(eLvvGÞ¨¤†cœÕ*Þíù|DÑù¾^Øÿw‘šÝŠâ+„ó#‘YGR+3TÔ¬¤±ž=áÉRË‘šdömc¥ß4r´’Ió;Q‹fðëyaYD]ýhÎ……Ñí÷ÜÕ¤¾¶’AÊ¥AëXó»Gá˜veT7Ò¬6œ·ÚStvÆC"€(FkÛkgDš@ŒÝ¥†ò …f†Up¼1¥cëѤ—¶€9“=ÅI¬E–—1µŒG½†í´¥¡k$žZL…AšµXCLk¸-ØÜªªa†Õ¶ÀÅ/z1UâÔ-¥¹kt•L«ÕjÏ~”„%2IcŒ|î©õ4öéšæôØ—TÔ¯$¼`¶¢·A@Ëqçd¨q×4Ô¸Šuo.Ep¿{¥civ±ÛëѧªÓïOÐ$š€ÛÞ‘LfÌsÅ"I”u ÔÚvfMžzf¹Ã#&rc q†ÛÙkVþc¡6ˆò¦•€ØÎN{QÐÖg‡žI4¨Ì¹ÎN3éZ™ â©KªYC7“$Êu•p×9mxŽß(¸uËÞ€6m¯í®÷y‡ÇQT,ãë÷eW c¢šÞ8uËo³(Mê|Å_Jž¹p Ë%â¢ÕÖ¥khÛeôÆqVa‘fdŒîV¹ÍBt•/šÞ4~Y$cÉú ¹o¨A¦iVÍ#@ù}h°¬sITôíV Kp„0)×p«´€J) - BE(æ“m ZNÔw ÑÚŠ^´ÓÒ–“¥ŠCª#Ö¤5ñR2à4Q‘KŒÖ¤‡jNôv¢ IøÐhí@ ß©qF;ÒmÁ'“š¨:QøÐ (¥…€ó@ƒ”sEh£©ëH9 {PâMÉÍ()J(?¥QÔÒ´‡–—ð ÐÑC(¢Ž);Ru D"ÊÕ_zÁn»‚Ñ¥¼R#‰ÿ¼š“Ή›h‘wzf”Ü©é@Ik¬H‘ÛÔ­<–QJtŽ)û‡Ò™$© îw ¾¦‘ýŠÛg—äG·9ÆÞ*H`ŠÝ6ÃEëOëÏZS@‚¡{Ky|ÆÍêWš˜Ò@ ;o7Íò“ÌÎwmæ‘­`3yÆ%ó;>9©ƒuņ@'ŸJ„YÛùÞo’žg÷¶ó@³¶WܱFÔ.*]ÜñQ‹ˆŒþNõó1¹çÀdVÑXáU0ØïE½…­³ï†Fé*ÁÅ€qúÓHʞƗ­.;Ðh¬m¡}ÑA7¨¬r ¨F·Xü½ÒùÜó8­,ÒÐa"EDPª¼N¤—4Ÿy£ÛÝL%ù£—ûÈqSAc6ƺEo¼\äšµšieR3ߊÍ**yKs0€ÿË<ñVþÅÙ…·–<¯îÕ€ihÖ-VÝ O:VÝ ¥¸­‹›H¯`Ì*zT?d[ù]¯möìlGóuµx@~€3F‡Ÿ¦Y™“¦Z–ëD¶¹¸ó·I‡©FÆk@ÊŠ¬Û†sT"º½¸òåŠ(ü†n„üØõ  ¶öñÚ±Æ0«úÔ´”¸  wºu½ò9~a÷XQÃ¥Aë;—–E+9Î+BŠf\èÐÝÜ ä’]ÃîáºU×µŽ["A½1š¦ZZÊ}É®Öýî•<ºd3[¥»³ùiÐnëWO^hêi §s¦ÃuG)r‰Ðn¨ît˜.|µ•¤"1…ù«GFúå’h­ ÿ].p{(õ¦^iݪngGA…u<Ô–Z|v{˜Hò;uglÒYGvŠâîUçå*1Å[¤Mšæ…£‘C# Nü)qÅ1ÿá´ÈZR¤ð7}Ú´úrý‡ì‰+¬xÁ9É"®š)Œ£.¾ÀZ X&6îîE>ÒÅmm~ϼÈoJ¶zR~4€Ì‹C¶†bèò…'>^ï–¦¿Ò`¾ew,’/”♨êYOX•ã‘‚ç<ŠÒ4ÄUµ²ŠÖîe?{qÉ5Lhƒp_0+ÿî+ZŽüÒJßL‚ÞÍ­¾i#n¡Îj+mÚÞe‘^FÛ÷U›ZDw¥íLFmöôë+Í*²ýÜ•ií[O³ÎLŠWž¦¬EdÛhq[Ê­çJê§*…¸¬Gc4tï@ÜVhúòÉb¬ 2¶xÏ¥t”Ý¡~êôªzûié†-è[kô  Ûk1ô­—osk3C#ýጆ­ù@}isžHâÌ]XêZ‘·°`»±Ö§}MÄ’¥ÌÑùŸyU¸5_IUMVíÈ­Õ‹7ZÛ˜öz<ÖòÀY¥Iy`Õðü_q§•á"2ÜVÀ¥¤%TE@ÀžEž´§Škb¹ÝV%›^´ó†^ªq]æ³gÑmæ¹ûNù\ðÁºP€–ÛOŠ PYäa‚ÌsÅE“wfç2=KUøãØwŽæ@¡Z½Ä²8cæu\ñSÛéV°Ûy^ôÝ»çæ¯í¦ž¸ íímíTù,yë´T½è8éE4õ¥¥¤¤IKš3Hbv u½è4%-&h†–Žõ#ʈžjW¨Ï&Ë”* ãÞµ Cëš(£ë@œÒzÑJ))€bFiGµQÞŒ N©{ÑIšN†—4é{Ðü^ô¾Ô‚ÜÐt r)§­/jƒE!¤ þTêJN´ÀVäR1Ú¹4¤…4Ž”Å.2¸= 'jq¶pØã4ÉGd‡Ä3[#ȱsœzt­>Ë©Þ[FìÑ n9ÅÚ]ìZ‘»šxÙ˜À ’ÃN¼·Ôe¸ãu˜|Ûj˜Ê°yúŒW¬{äóUŒ˜ÙéN× v²³Y\™<ÅVÁàÔãK¼µ¸scp‰ ¸«.qô«Z•„—V±¬r6& wÅ. !¶k[ŽÚb™þ9;j¦›;®¯%¼s¼ÐˆÃÇ?5K}m}qaü:¸f…"¡·³Ô#Õ¾ÐÉYÇðJܪº‘±¸Žu…ñ·j´Egë2_À‹íd`Üô?ZB3ôÉ1¬yPÍ$‰äîmÇ‚ÔjVò7ˆ-ü¹Ý<Å=?†­Gc|šŒw[âÁ]’1íOšÆåõxî•£òÑví=qL,K]^Ko:IPÅ¿ç9ÁÍV];íôûåm²éW¢³º]eîœÇå²ìÀXÏ@i×ÖWn[»dÛµ•º`ZÓÒæ(¤[Æó³-Ÿ–«è80\YÜÔñ ¸ìÛÍdšsÐWÑmnlâ•.~v. ŸZ@jÖ6ªÓ'#ÝyH‹û´CÉ>õ¯¸cë ôûÃöÕ ,Ç!Û¯Ò€-]_Ëo£Å2üÓ8UÜÔ‰er<™~Ù'˜97Ý>بe²–çFòíY”|¸=Å:ÆmI¼¸çŠ5UûÎ[“@^mFþX’vŠx;:±¢æiôÛ5I%3K#í±Î)’Gwc¨I-¤K,s`²ç4ëû{«»f .Q·ªŠ-«Ý­ê©<,¿1—|òœúD´¶¨HÁ®’8к:“PÙÇv59.&‰U]vŸ›Ó¥÷ÓÝÜÜG•c„íXš°$»}F•¼™ÕOÍUšÚöÎöY,Õ^)Îâðšµz.¿³LaÓ8ÚØâ˜´‘}qåË$ä"0Çß©u ‹˜Vy¾Ð¨\kŽ~µ6ŵ©‚xÂû§vsYí§ß;ˆZ8ËÜ<·4€½¬³K¤¨#—+P]­Ön.bŸrGѲŒT×ÑÞK¦Äª€ÊI zbœës}Ã,>Lg˾€$¹žáÖ#‹ L»žC×ð£K¹šëN.íóå”>?Z«<3i•‰£Ú…‡Ê•6‘ÐÙ43(]¤€}h¦†—r¼“5É)æÊŠ­é÷7Þ^Dò‚±œ.JnŽ&·W¶’ªŒNüõÍAÏg¨],vþ`”î 0.i×sÏöµ‘Õ¼§*­ŒU[+½Jöß|MRL6GQM±i`Ó®]­ßÌ‘ÉÚ;æ¤ð÷™ Ð:Å·ô´ íçñ¦Nα1‹€ãwJx#=j½ô’%«ùQ´ŒÃhŒønîî4i.<ÅIc; ª‹{¢Þ‰·‚»Ê°Ï•e#kOå$ÚF=ê´7Mu§}Ž%Ë2íÝØ-,j3´š)ž̿ҬKtº~Ÿo¹˜*¨ªÚœ-—œ íœÊ:OÔmžãN·hÕ¼Èʰÿ·\F]¢n1‘·ñ­lñY–w7sÌÛyQŽ¬Ç¯Ò´«ª4éc+Û8GQ»8¬xŽ©6ž·‰w£vÍ¿xV΢ál''û†±´ù®ŸIñAóµ_<ïL _Ú²;W — ·§OSRÛOr5-šI!+ΘÁªóé²Åif`!æ¶9Úz7­]±žîf>}¿’{¶I4€¡4ú„ºÌ¶±\ª.Ü— ­{ç†ÙVâO2NíXH·‹®5൑£?/á] ÏP¹ºÓãlb@OÓŠ‹Nºó,Âyl¢(œ¯|VM¶¡-®žmÖ&ÜÌÜãŒSµÀØ:…ÍÆˆn¡’àŸn)š}Ƨt-æýÙ‡Ì;ýjµÀ_4YäÁL(îj÷‡¥s`°É‘´\e†3H šLSMˆ[À¬}U¹¾º&L"ýÓŽžÔ„mt¦gšy¦c-HbõëEP~´w¥&Š@%:’ŠŠ_zJ))i:P0¢‘xjZzTf¤5i ¶h¥þT•©"v¥£êh @y£¥-%RÑÒ€Â}9 šZ(SG\R~mÝ);ÒÑÞ˜8£½-'z;Òæ–‘Ž 'zu74¦…!äÒÐh){RS±@i{Ph ¥£"Ž´):RûRu “µ£½QïE!ô *‹È-¿×ʉìMA«Þ5–Ÿ$©÷ú/Ö¨èÖ1Él·WXši~l·8¦Œ7ð\·îeGÆ­dcŠçµ‹u±hïmË‘[ ¡}µ=“Z ˆ•¸6zP€âŒU7Ôz‚Z4M—\‡íQ¶¤òI"YÀfòηmô  øÕÂZÀóH¬Uz…5 ¦¡öï3ƒýb·ðÕ=GP•ôé$ŽÞA®ûzâ€4l®c¼gHVõ«Y68¾ߗ5sH]ºl#Õs@ËxŒ€šuQ¼Õ­­.wn<ð¼Pݸ‚€ž~µBÏX·¼œÂ›‘Ç@éæÔ­ ˜Å,\ ÄP‡ÚªK`ÜÒ Œ\õÓZÜY“$‹äÊ1’qšd·Vše¼hïµ:/z¹´z U¢Ôm$“ËI·¦jHo-î$hâ•]—¨€%Ú=(òÅF·PÌ *ù£øsÍXªfóO±v‹rFßy”TÖš…µá" ˆê(=F’ÒDŽ1!a¤â«èÖóAj!¸‡c/ñg9«Ïu nQŸæp3Š—rù{÷ ½wP16 ]•l‹¨yÒKu 1ñ´v«%ÓÜ[ºÊÙhÜ 9ûÔ£±A  æ™%ÔÈ#i\ôóM¼¼ŠÊšvÂŽƒ¹ D/–ÇJ‚ÆþÞù7@àœd¯qV¨3¥òêOçK@7šc^]FÓH<ˆÎBÔÖ‡•òáMHÄ*îbsPG}k#ùi†€aFÚÖ›ä¦s´géS}(  ¼m÷”7ÔS„j¥E-õ´w+J¢F穞TDÞ̪¾¤Ð~BõÀ£ËQÚœ“Å*–I€êAªÇT±ÜÀÜÇòuæ€'òÔPbR¸Ú*5¾µxÄ¢tØx5)’1òë³Ýž(<´QгUŸS³GÚæû¼Ó­¤e…žvQÉ91H 'šD;Tž¸ZJÒY<´ žõ$÷[²,ò*û¹ïHdÌØåª8§Š`LR+ッš¯­%Ž\L…S‡ç¥3M·³Ž"öx*ç–€/Rd–¥¤ ƒïKI@j)1éKÚÃ4¾Ô”´†’œi(‚Í ê@kaµ#TfËC§Z:P8Z;V¤ ïJii(ŧ¥JZNÔqF*>”v ½—ÐzŠLŒÒgšÞ¥Æ(;ÑŽ}é~í%7ø©‹­‡“AéF){RÞzRžE½¸¦!1ØS‡­6œh<Ò}iEPQÒRŠ íIÚ“94´sÒŠZoz(4PxOUµûmŒŽ§}ꦓyÚ­¬¿ºš!´«qZ§ZîÆÚíq,åBR^Ü}–ÒYvïØ½=jdcQT/ ¥C=s@Ä—I#iò¼¨ɹ‘jæ¹2¥îž_„¸µiKk E†=¹ÈiÒCñí•Àõ¢àdÉw Ö»h"mêˆÜSR[Ëø‚ëÍpŒUUAïZiJÊÂ5 oJšA#F…Çñb€1ç’(uÙ àýÛÆ6·jº“Ú-„ÒÚácç$/SW¤†7#z+}E'–›Jl]§øqÅc#ÆۧΧƒÜÓµfŽ-&Þ$dù™q“ÚµVÎ »<¤Ú9Æ({X%P%‰W¥I1OVÒ*„P¨0 c”¨H¤-ÍÞûÛ¥„E DœÈãæ5 Yo 8FÜpKc¯ZÛ’ÊÚIŒ¯ 1Œâ‹k8-Q’«E03.n-äÐÊdÿW€+CNè`çäö5–æ+úóW-­ã¶ˆGÂSHÖF®ª5 8> 5±ŠÅÖÒ9/¬RNyÊûSÚŒjÚ——06N?»Pܪ?‰¢¡¿uÐÖ´6pDÛãŒn#ªœºE»_ Ù¥ó ÎwP¬CéRa@ ‚¾Ç5»µ•¸Ú yŠ9­+»8ï"òå-·ý“ŒÔwlW •¤"/»óP€¡eÜX¬q%ùÚ*SE®@cE]Ñ6v޵rkšXå2H?»´Ð,ƒ]‹“+îtvœñøJ‚ˆrM>›ÄàqäŒûšµ{¥%ÕÊ\,ÒDê»r‡¨¦Zi_f½k‘<ŽÌ0CP.ÂÚKëíÑ«…lGJf•ii÷žb+áÜ Ž˜­{m2+w™âg_¼=êôµ‚-£–@²rNy¦<)<9çºæ`›ƒ¢¶-tÑ„%ÃaÉ;±ÓÖ‘´§:wØÖå¶ôÎÞqNâ%Ñœ¾—nÌI%;ÕÆ8ªÖígdß°`UÄ‘Š@CžGJÀÑ-×í”}~Ü[î§ ¹ÆGQT,ô•³3žF2ýìúúÓ¦‹ý™p¯–Pî0j? YÀÖbv‰L‚Cµ»ŠÓ±Ó–Î bóÕÎ㺫éÚ_Øß且ǒDg¥5EAzÛlæ'û‡ùTŠpj½õ«^@bóZ0{¯ZB24è-äðó?–Žá9êÄJ.|2<ÞtOåO¶ÒŽŒ–¾kísÉ©—MéÿcY¤òÏî)VDœèVÂ[ ¥•N /¥Tö‚éŒO$M Ç’ýˆïV$Ó¥û1[ÎCÁ÷Kw¤ÓôÖ…ÍÅÃ+Ìðái Õ¢›ÉÅ)é‘@Žb[y|NѺnB›˜Þ¦Ô˜¶«gf›D@d+t«zD²j+wþYþ,ŒÔšž”/|§”–>Ž)€û[†âY]Ól‹·b.béÚTj—É,{£ŒáFzVýœ–èÞmÃÌíÝ»TZ[ZÜÍ7Úšo½ÅgéZm¼‘],©½RF AVì!KÊ~aVlôÖ´†d[†>knÜW¥Iof¶vÌ‘’AÉüi ÃÒt»yôÇó£Ëî#wqU§’Oì¨bÞÆ?;c7¨«š5¬³ÚͶåÐY@­/ìëwµû3¯îèž³ ¥nUTdÆÂ89ªºÊùšu”³/ï2 þU|hjÛk‰eUñRjRß²o™Ñ¢¯­$ÖvÑÙͲ$]ÉÏj•ãiþŽaóžŸj5еŸÙ¤–F\`¶y¦Ùi±Ù#DŒÏ9ÚÜâô­kûFv‹È1ásœÖ©¦¤qÇÊ"¯ÐSÍ&QÚƒÀ¢€1HiÔ” :QßšNôãÚ È&—½ç§Z) LsKGz(­Qž¼Ô§ŠŒõ©f¥Š+RžÔ”ê(¤ ÒÒ¤äö¥¤Í0iOÒŠ<ÐQFhéÍ—½&zQÞ€“œQ‘šSô¤ '&ƒKI»šJ¥ãu€zûÓ©;Ñí@Ñô§zR ¥Ñš(ö µWÔ#3YJ‹+FqËÖ§íPÞ0KI˜Žˆh+ÃlEƒ3±%œã&¶w2xµÏiZdR³ƒ¼ç ¸ñMf’_ Iç1f‰ŠƒëƒLgG¹qËqAÆ+ RŒÙ[;²€sI©þîáÂËöO/nä?q½M7éÞ«YF!´‰D…Ô/ {Št7v÷˪åz€zRlÐßvІò1-œŠIiäP{4–¤ógóTòñ·Ú®ü¬£çZÂÒ“:LªêÄ2·&‹8ã“Ã9q»`b ìi¼]rê3ïH mÜ3éXï`·š%¾öÛ"FXÓ´¢—“y² Iá]›ozÓ’êeŽ9$Uy>èõ©²¥s\þ¡i׈`ŽU%Ld°Í\¿Š[xVX×þY.K=jJLóY>}éuÂ1) ­ÚµñÍ5€?z£Ÿ©Æ²Ï–}±sçs~TÍ šK 2Í´HÁry€Y¯êUšDŽ•vr&¯iîóYC$—e‘X¶¼hw$;.ÎAæ´ôk*Â&ß!Þ€áJÐã¹PBƒ“XV‰s=ä2¼„G.GÍRïûv­-¬¤ù0(Âÿ{ë@)µ¾`hÆMaí}?Z†¼‰”æ<äIk·×Ñ}ªUU="€7€÷¤Û†Îêų¼–ÛL¼g“Íhª³w©­ìšêÉg–y 컕վïá@ÔVW2^hS4’ºÉAqÔâ ho#Ó!¼KÙ>PÎÆ€:JQÖ°å[Ûiíî ÑJÀ4g ÍM<²êPØÄæ5#s²õ  ^õ Övó8ybWaÜŠÏ»2é²ÂðÊï¶ÖYqR^IvºŒ Š#p~Së@AB¨U ȵŸ{%厚Ò·ÊÛ{Rê7ÃaÄN»ð ã­5qGcŠÊ¾º»†æÕb1í”}ÖêMD—úš^ý–XbgeÜ„(kRⳬ/§’òkK¸ÔHƒvå<Zc­gj·’é𬩑Ka¹éW£;‘IȪö>ÂzȿΙqyydм«Ø)ï Ö¤h÷Vn¯{ud‰,á‹v©žòhÞÕ6£´¿{õ  ~XÚpk&çP¾MPÚC®T±ëRXêik[ôT” Ë·£P–­)\óY‘]^j¤µ+ hÅFáôë=F[˜î!eT»‡‚½X}>.EË‚dzTVw’\\ÜÂê BØwªš5ÍýÈg™‘¢ Aã‹e™µ;ô‰Äc å—4 ØlzÐý4¨'qPHïNtÖŠ3ƒKÚ’²õë›»[?:Õ”m?6Ejö¦cæ¬ µV XnÜCä»—75~ÿQ6¦…<ɦáV€±¤!²fÔ®¬dŒßG“!Û¹?„Ó®ïfŸPK;F òïy1œ þhõ‘e"'–ë¹HëZ€W?­Àñ µÄ¢LFvœcŠ¿%ô«­Çi…òÚ=Þù  "¹S<³Æk=/n­%«í1ˆ÷Œj¥®£t ±<.›L8ù”Pãü¤^¡†W‘Gj(¨Ùväô²¯®ïã{‡Œ$0¹Æ|Ê´n^ãIóãQ½ãÈ•EååÓ™lR6…[oÍÕ½kT«§§ÖG‡äèfY8 Xš|3ê¶¿i…£Œ¸…zs@f<šs&W•›y©½¼±Z©E™×s1ä->Âþ[‰f…ö·–2²@jÆ€Z]¼W=gªjw,q#<À¡¦jOqm3\ª¤±WÇN)nîI-í]âÌeÛš‡J»þгYÚ0„’:Õ&¼¿¼°’x"Pƒµ[©h¥¾†²¹ÂÌhc`¦¼;†3YÛ[R9O—µÈùe°jM_T—OòY!ßœšAcMW–æ“ÖrjWê(ç´1Ç)¶ìÒÝj/ïÙ …d}›ÎæÅib¢ž#,,ÊÜ),æk‹e’HŒLz©íOœºÄÆ0 Àõ¤v¦gT™ÝXç ëVÐÌ3X¶z½ýÒM²ÕY¢<ó£ƒTº’).m­×åæ]ÇùS°Î†ŒU¾o°-Ôq³³(!©¦ÙßN÷mpˆ®8Øi¡GzƺÔ/“Tû,Q¡ ™_ñ«ö2OöeûnÔ—88¢ÀZ QÖ’(íJ)(¢ŠJ@%/¯µÒ.îô wzm:’€éKÚŠ©Ò¡9&¦=*&ëÅ!–À£Š)j@¢ÆŒŒÑ@ô¢“Ò†4h€ëA£¥fSíFh¦ç ¦ŽhÎM)4œí@ i½é{ќКi£·4´”QK@i)I¢€¥ ÑŽ3@ HÔ½ºÒZ*+˜üëy"Ô®}*\ûQÚ€1mtË»ksmö¥òÏ¢r*Üšlm§5b«½ïV”’NF* [źyUQÓÊm¿0ëLftÚMÜðÅ×€ˆØ`ôéSÜØÜϽˆdÆàWŸÂµ;s@R±ۈ¿„.ß°ô«4X–K]ßgEÛ“Ü×@G"*Œö 8ä2MnÑÅ(›ØÍ6[ÄŽî;b­º@H qV1@Ö[Ú½´’\mRª©¢Ü­£Û}´ˆOE [²³6Ò:Ô‡¥02§Ó'’ÚÞ»(±Ÿ—ïc¥*i“ÿh ¿µs€¥Bõ©KÚ€3®ôù¥¿ŽêÞeÕv¶åÏ]éóI{Ì3ˆÙWkes‘Z sF3Û™¥ióØË>ùCÆí¹F9ÍiS©»~mԀι°µ%»‚D_“c\þTYZ\ÚEp,l–Ž„úÖŸz6©¦-¶—4z|ÖÓL¬²ä‚BjÎoskja–eû¾:VŽÑŒbªê©§À&xÙ×8ù{P-;O»µ¼šYfħ,æw§Ìo…ÝœŠ’ã p´ãd‘U}r)vÛ¨2ÓO”_5Ýܪòc ª0™giwoqu3ÏœwzØU/–´ǰ°™`º·¼ ¶RHÚ}i‘Zj–¶ÿf¡tûªçªŠÛØ¥³ŠwzÉM1¡Ò$µˆ†‘ÁÜ[¹4=µ×öDvÉùƒ Fî0+[­  ›øîd˹`Œ®Ä0ü©5-:y.c½³`³ ÁVèµÀ£€Äk[íBê»T†Žv)ÎãIÛêK©dƒý¯½[˜£ÔÀÏÕ!šïLt‰q#všÆ½mFâÊ+v±dØFXçÔÔr8ãŠÊ½i>×`þCœ¹Û´÷aý¹ùrm•Ý·ŒÖ¶;ÑÖÜŴɯÌâ962m®mRâ9 F/ˆ¤“ÊŽ¢’F,•\à nµ#Ïcn#‚VmÊØx­ÜP(¬°­í‘G ‰ÐñŠ£¢G$ƒÌœå¡Ì+øw­+˜å’=°J#o]¹¤´€ZÛ¬@çoSêh;P[ëv²lgc«éëJQïõ8æXÙ!‰ îaÄÔWæs¬Ûζ²˜â^ù­¤;”œw  ;9eÑ‹ÛM’ÆX´mÏçRiV³µÕÕõÄ~SK¯µlâ—·‰¤4ö»­e¶q‡fó?†mö˜õI¥x†^ùéŠÖò9þ´†,ö .dÙÃsö»Ñ4L±ÏѳҢ²kí5M¯ÙLË»åpx­ÄÛ•·c­;ŠÆñfÊ$`wÂŒô§ê¶Ò^ZÁ-ºî’& ñšÕÀ4Ï:-á<ÅÜ{gš£gywpØ’ÐÂrX÷ö¬Ãisuu5¡†t|É(à0®—m ÓJ¶²2…ùAõ¬­Rº¹žkkÑûØù­‰•Ú&XÛk‘ÁÇJ©§i©eæI¸É4‡.ç½^¬ùòÙy@òbŠç¯Öâm u¶—Íùr1ÓýJ‘í/¢áP>ø­êgü´ ÀÔ®_VXmmà”Á¤f\m«–·6w©{iœ6l‘;šÚ )q@Œ’òM^ †³‘#ØTŒô÷§ê1ÜC«Cy 2*m`½kRâîÞØ¨žTBÝ7ŸŒf€0 ’êma§6²F¦-«»Ö¡Kin/måŠÒKi•³3tR+¤%W–8¥ šOlSøÅ2€9y-練ñ.-ÞC&|¶-ÂÖœ‹‰!thÓnÞ¤Ö®ÐÝh 2hDäÒ$µ•2w™qÖe=íŒBÖK7'ÊŽ‡‚+d²B>v>¦œÇ 3@Ûê^Å ˜íÃ(­+;É.b‘ÚÖHp8 ÕªñPêvÐ{P=£™¡º»–æ S̹Zv— ’G¨,‘É™‰RÃß R+#d+ޏ4ÏÚ^Ïgjlî-¥iVUÈaKa ºÐZÛk$€¼¸ç9­ýªxÍ(Ó ˜Z~¢¨‘ÚÉi!™~R~´ïÈÙWk² /j×ãoãRã=©‹©]F×Ö*»ŽqàñÅC«ùO ™$Žd\Å$yù½«}•s÷E&Ñ@\­¥„?iÏ›·œÕ·;Q›ÐP8§ÇJç´Y<¸/^DuýálíQéÇËÑî£),ÃyæºB=ª £y .aÝM=¶·FÚ• œé®Yc˜¬±€®Ã­tDSJŠC9é®×û}fÊÉ”%TžjMoLº¿™$·“äÛ¤â·BKïNàRÑí§´²\¾÷ϯAW…¨íRÀ1Å'jZLКZ(€:QAæ–‰Hih<ÐhÅ/JHÄ&¢9ÍJبÏ^ !–sÍ(¤Z8­H=(ÁÇ&–€t¥íGAÅPpqÅ:IƒšP8¤'¥)úÒb€ÍzR‘Iš úR(94éiZ3G¥/Z(´ãÍ!ëJAõ ãžhíKA éIœÑÚƒÒ€œSiÜÒuvªZ¬óÛY<–ʬÀrXô«µŸ®+>“8ŒØè(®s4îQL{r¯žI©ìõ%”×SÅåˆØð=ªò§þmЧÏòÓläOì‰KDΦFÞŒ9Á?áL íoçžx·Û•ŠUܬqõ­08¬-Dz“%œ’=§—“»¢šß¤ ¯wp––ï<Ÿuj£åüñÅ2Û'”ì>\üÁ}jƱo%Ö,q}þ zâªéÚ¤Ko ’ —Sa  Úûþ&‰i仟0Ó/5)m¯£·û>õuùXw4Ù¥û~Üs¸FÀÕMFò/íÛ`Ï…ˆÜw¦ðê mk4÷QlÉ-{ž•j›Ã4b{uÈ3•?sëYú‹œÜÁºEÜ®ÉëZvš•½Þ"ÅñÊ‘´ZïUž3Gm˜a8fcŒý+NóbGÁÀ5ÌjIqmt“4¢d“ˆÕ~]¹ë]:\ZFñîÚ>aгô¥Î(Œ@AH ÏíG•f’Ö28N™±Ÿ\T–7ÒÝ@÷ ±ã(7gubÁuý®(.Ò]Ï/<õÅnÙ­½¦œ¢9C‹÷³L ¶ºÔ—1+Çi#~ókmþ±sªÇ ²F±<†5Ý!^Š*Ÿ†æF·•ù¼Öl{U[Ûï=oкÂSå æzÜ–ú(¬¾ÕÖ=¹¹¬­nöy4ÜKhÈ’ãæÝ÷~´ë”3h6Ïnw¬[\¨ï޵¯ªZÝijO™™r½Åo[®-ãŠ*LU ½N 8çfܯ€»{ÕËi’â™>댊B%ªWúœ:~ß9\†î«š»XÞ&’5°Ρ‹¯ËÞ˜–Ó‹ˆP¬€öaƒT$ñŸŒ#|§…5zÝ£–ÙJ8e+ŒƒU.í­­l$"ðªq¸gš·iuäh (zdb§¬è%ƒKÓaóÛbí_FY]*à бUnu+KIV9æUvíV«XŽÍÙí¢îväç•÷  å!†ìŒõ\j6/•çÇ¿8Æj½è{}EˆÉ3Pù6'JÈXÊlÎîù  7óβC²ò–Ç *É2Õ})´è\ïÛÔõ«p€&¦É"Å<‡ £$Ði²€Ñ²²†rz@gÙë–—’4HÌ­» ¸}ê¹5õµ³šUF=5“áØÐÛÌÅW>scÚ ¿hdŽþH#266É#éLfô÷P[ ’iô&‘®áW•Do÷I\p·y$y&¾Ç 6GlVNvý(Õœ"ÚßgšÒ “¹P´ß³íîéÕ‡s4xf3››Ú®ÉcjÚ6݈ËÎï|u  guUÜXêj²L­9\Ž™Îk æ¼ðÒ4ìÛü§=yÅR–ÖHWílƒaLÝh dޱüÎÁG©¦¬Ñº—GV_PkRy&Ôìí²»nÃt&®[Y4Fv‘ÔùƒQp!’NÌ©o´G€qɤ“T³…•$>õi§[¶“w+ gVm­éŠKËHcÐ-å<ô–ïÍ;Ö© zQQYÿÇœ#¿–¿Ê¥ E ´PÚ“=±KEQGjCÔQGñ NôQüTR‡¥FiýV£ š‘–ûÑŠ:t¤Ï½j@½š\sAÒPŠ3ÅÒŠ(üè£ë@%-v¤4´ÜPKŒÑK@ &“½)âŽÔ‡¥-Ð}è8Î(jRhaòÒ¦ŽÔ^ÔÀ(4½ºQÚ€ØQF0=è)1‘ŠwðÒd’p(ªŠ:(´¸™ÑÊ[Ë‘_vœÔwRÀ¨cžU@ö Jÿ1íO¬‚—wÑ«– –Ío玔˜9¤(=+2¢–f £©&›±ËÌn¯þé  ÎЭ5',‹ŸR)^X£8wU>æ²ü@ì‰42ºuû­ÔBMG-J#P~U •$’Ù’|¹áªTo*(ÖY¾1¸÷4vÕçBz4M¶Ä‘KÁ¹¨ç½··–8å#É÷E,w¨§_ËûûNß­2çÌh?Ñ¥TrGÌy©”íA½‡NM9Ë16Æ+½:W˜“¹¼¼ç>õ¥£iíok*ʸI²ÆyÚ+MH#¨4£®)ŒŽ8c‡ ô ÛDY˜Æ›˜`½iìè¬0é“NÜ»ºÒÔ…#@ˆŠ¨:(TmgnÊU¡ŒƒÎ6Ôáƒ}ÓšZ`S¹Óm¯bHæäCòÆ*Ìq¬1¬h¿*ŒO¬K‘5ëØÞgtUnhs𨥷†VÝ$JíêËšò(-Í5#XÐ*(UôCYÞñC«0–U Ðf Öîn­eµkyv«È—k_< Ð[í>ø)óµNF*Ì1,1$i¨À§f€xÍ 5‡©Ëc5½ÀŒ)¹ÎæÝ[tÃnݵCzâ˜Zok8„ß{` *¿ö5–ýÞBç9Æxüª÷jQ@\ FêFíHbôÅ´‘o æX·©Ý¸¨cŒý*1¢[¨™wÈo¼»¸ÍjRL Ÿ`ŒØµ›dÆ>cÍTþÈÁ䙿+Û-Ò®ê7ÚÙÉ4(gÒ2ëíÖQÜ:ìg!”®´quQùòâéÞ¯ý”›O Ë'LoïV? (VÂÉlaòRGuÏ»UÛC-ª¼Ší"ñ^æ¶yÍO4À©¥Âöú|1I÷•y«tPh:÷I‚îq3nŽN›ã5<6)³A0 Õ³ÍY”´N×OŠÖÝàRÍg!S€FѬӈÏðîàVÆ(ÍfË¥$–ÉeuŒuõ5j+tKU·?:ÛózTÍ…RÄð*+kˆ®¢ó!bS¦i•`–ztæ)&‘î]KH¯t¸â”FAõ©¯,¢¼P³î+è€jHaKh„qƒµzsL Ñáû`¨¦IX!ÈËT÷ÚM½éŸrºp¬§¯nùI Õ[]F ©^!¹%CÊ8Á YXÅb…c,w±c’jÍAysöX ¦7p½Bõ¦é÷É}›n‹Ø°ë@@ªšm½ÜÊò)YGCƒZÆ?:â€+ZXAjîñ‚dn®Ç$ÕvÐíÚçÏyfi3œî§ê·“Y,rÆŠÈ[kg­h©ÊƒíH —¶_@"›vÐsj(´¨ÑÉ,³ûªí+@SI#¥S¼ÓRõ•¦w]‡+°ã]éÑ],BF“tgåel¹·ÔÑ·ž(Η ÔÅ+9òŽU·sM‡G·Šì\†“xåºÖ˜ Hʯ÷….qEPŸH¶žäO&òëÈùºR_é1j<Ç‘U:5¡IšÍºÒçÉß<Ÿ¹Æß¯­?PÒâ¿DÞÌ’'Ý‘zŠÐÅ  6v2[«y—2Jì»rݪ+%l'’EžG2ýíÝÍjUšò%½[]¯æ2îÎ8¤6ºwÙÍgizäTVšCZÝMr'f’Qƒ‘Z”S6ÓJ6ÿhÝ)?;¸ïTÿ°&û/ÙþØv+nŒmé[Õîb…¤ÎTgjõ4NëNû]ŠÁ4‡ràï´}Žsfð=Éfn7•íV­æóàY64e¿…ºŠ}S‹OEÓÅœÇzÛŸj¢4)<¿!îä6Ùâ?þ½nQ@·úk\X [wXPpxíTeÒ®%¶[´/;}+xÖ}Åà·¼Š±”ã p(;í-oR"òš>’-Img$0º=ÃÊíüMÚ®Íé ̇IXìeµóœ‰Kwæ›.гYÇlÓɲ>•ªÉ PVЛku{>ßânµ&yÏjwÖŽ:cŠJ/)£¥'j3KH£øhíŠ;P0íIKíE ŠZJ1ºTg¯&>^j3žÕ#-g4KŒV„ŽèïL¤4PhÎ hÀÝGç@÷¤¥Å!â€ð¤4R{q ))1Hô̓š^1L¤&”ô£f€"š3APiØâ›ŽiØâ€ R㎴™;Ó»PzRÒb–€³µ¯!­•.&xÕ›¢ujÒÅPÕ4ÅÔ¢E.Q‘²­éB†š¢=jeH¼•òF×Þ›¦Ú¥ííô—ŠÃíUoáj ⽎äÝÈ쫵³üTë%žñ®-îdœaö÷¦?D°Ü߼LÖºÕ•a¤½ÓÌ.YÕú©~µªâ†?¯Í ¼´·?ê¾lô'Þ®[ØÍoz÷£cÛ寏«Wö_Â\‚§*è5‹ÛÒÜË;cqà ÎÑ¡Šþ‰®|’HÁ·µM«À°hëµÉç­Hú\‘ÜI-Ó@$9eÛ‘š[Í6[‹HíÖä€0Y™rZ€(_Åsö¥yÈ(§ÞŸ¬Â²èPÈççT‚=êÜÚ|ÒÛµ·ž0Ãæm´Í^‹BxÙòQ@Î=(@U¿Óá±¶†òÑJLŒ½ÞÍ;S·†}^ÇÍw˜§p«PؽÔpµÄí$K†UÛΦ¾ÓÚæh¦Šc‘giÆzÑp)ë6ˆ¶¶þ^TG"¨PxÆi/ã7Ô3Í̹ûÕfûOžò(£óÂl!‰Û÷ˆ§^i­pð;]Ä]ž+HíÞicb›×¡?*Ö+1†âÍ–åæ‘æÃȤí#Òµ~Ës%¬ñÜΤ]£jà-PþÉÔÞÝ<ø¿pÀ  üèuÛa%ýƒ‚Á™ö’¦¢}8C¬ÅRËåÌŒdËõ­ë+›©m%EòNã•êie±žMR+¯1F»BãµRÓí͆¿%´NÆ~Ö9溵Ž4û¯íŸ¶ù‘ì+´¯µkf XgK~ò97m1©À8Íok ÄÕ^òI"ÚãiP;P1º;47÷ÖÈÌbŒ œâ£¹»–ÞA#]+MµcSò…«ÚuÄ7wSùª|ñÐ `ö¬ã¦j"Ñ"1DLrù›³ËІ¼‚Qf›™KL9—±É¦¤wO#F¬‘³nÈ5&§msq »@͉ƒÝ)Ò[Ýßyk:¤1+`âØ nçšMA-£ó{7·—ÁúTúwÚÕ§YUü±ÌfC“Qj6÷‘ÞEwf¡È]¬„õ©jé×rªLÊv*žŸVk›è'·3Î¥å“i…@ÀZIØgjôõ9¤Ö4£qþ‘gû»•ç+Æê,§ºðà·*Rlt>¹  šœ–"ìJ¶îò¶ö¤me¤°‚XPyÒ·–ö5Z…Ôvf6r›•]Ÿw®j94û¨4»-w\DþfÚ›VŠì,&WY¢.»Â®«ÍõÅ’[µ¾Ý®á[pª÷7ÓÍ`­ö9Q÷®F=éúä3\YB𣎮9  7÷“Û›SR%#) ÷ó=ìÖð×¥îµû+Ì›ò޽?“Ä32éí–å¥þèÎ(&›}yvÎë…—æõÍ: Ë»ï9­LqÆŒUK î4Í /¥¤LŽ…Ó¸c5¥Ôš[Kmu„n-F¹Ý@´IîÞ[{• qù€è}ëKñ¬=Úg¾¸Ô'ŒÅæðª}+sÆéY¶ú—Ÿ©IkövB‹’ÍZ$àf°¬î£ŸÄ7#Ë ®(ÉÔn.®%†Â4>QÃ;ôÏ¥>ÓR’i%¶– —H»¶çƒYösÿdj7QÝ©H¥më&8©¬7^ë2ß"²Â©±½@Ë”÷v÷4hÛ·wqëI6©:ilà±çnz Í»†âßY’Aò¯1“éëZ:ÞØ´¦…U²À*…  .u?³ØÁ;FIv€ ÷4û É®'–íü¦@AÈ5NôÛ6ŸkÚ‘76S¼>Ò¸O1¥…»u"€6{T7WÙÛ¼Òœ*Š›¥eø‚¹ÒäX,>m¾´5k‰a­“y$ðwsõÅ$ú‹Å©Gmäôšv©kö(b݉…1ãœÕ{é#}rÙ[8@r@èM&¸Õg‹R6Éo¿+•ÁëN»Ô¥¶‚xÔ\Jq·<-Rº»„kð8cµ«:µªÂÞl7j†EŒÊc@ÛÍqæ3Iå¼[2:“ô¬Ù5«Ø%‰¥‰9[3÷€«QÏ–ÍöXe ˆHm¸çÒ°e2É,˜'‘‘¾méô¡ ;T`ÜÓªIkxÞXü·a’¾•7CRIE© ^Ô€Rö ïIKÞŠt¢Š@†5ºTx§šŒç4†[”?3Íj@w¥àÑGzJQKIŠ1ÍŽ”RP÷£ëGjFçŠ@wsÒŽüÓ»sIH­#8§RtEs»´ÀJN‚ƒF8æ€ ÐzPiÝŠn)OJJ:Š=È¥íGðÒät µ@†Š\ö¤þUGWÔ—L¶Y ogmª´xu¢¹ùõ=NÜÀ^(191ž½YÖu »xeŽ4Ã$Ö†kњ͵›P 3ÝĘ º5OåQZßÝ øm®Õ?}|(å}kûÖež¨÷:”ö’A嘆sœæ–kÙä¾k[5MȻߠö¬ÝÍýá¹ ³mÛÒ„F)zƒH)Æ!ýñúT:ÛàòŒ¯÷ÛÞ¡ÔµE±‘!y¤a©ØSl5ƒyqä5¬¶ÝÀ·z\µ€ÛÀ#g2mÓƒ1=*N´¸Å! }) ¯}„GVrNTd“Q麜z’1Edu8en¢—ã.hÜOðš©{ªÛXºÇ+39þ¥Žõo-$’Ðî|ã·nÎ9£v;«¦Z½­ª¬™X—sîjï^s@ Ï™>•FMZ3tm­biä_½· üiñêQµ“ÜÌ ¡!•‡4 ·º—5R×RŠêf€FñÈv×\dzÔ3k–Ý=»ï ƒ“¶Ùœô š§imªn†VŒôaƒO›R¶Žf€nye‚.q@Ë[€»–ªO¨ÛCeö–%£>‚™i¨Eq8TÜC®àvð?b-‰âiLBE.½W=*MÀU `nækRoãëW‰P2qÇ4€7 æ™muÜeàuu.©€´TrJ¡gpª:“QA{ÃmŠL¶3Š@I'*UX#ŠÄµP°Vƒìk>X·™»­[Iuo7707ô©Òî fh£‘YÓïژʚMƒÚ´ÒÊd™·^‹W'º‚ÛoŸ"Ç»¦ãR$ÑH[Ëub½pzVU¢Åª\^=¬ˆ¯å¨=±@‚Là¯CÐÓ^Pƒ$Q¾@Œº. OjvådÝ+~4„¦º¤Ñ”‘+ (Á\ñFT äq@ DXP,hG@(/ƒNGF?+ŸJq€#.)7ÚžÃÛŠkËëWêh­~h . Ž•&ÿj•”2Aî)¦D<,‹Á皎âêtÝ4е‰¨yÚÅÜpFmTî/Ùª{Èûvßp²‚NîœVÂ*„ÆjccEE(À£rž¢‘ÕÚTÛ UyqÖƒq Íå]ägm! pqLtŠVPè­´ädTÇç£ ŒÓ»±K»Š^ªºŒ shciŒ#9Ü8  ;…3rÂŒ“éDab·E-¸(q=ià¨ldfúÑÅ#È‘®çeQîi›Òdmެ÷M?ŠgñÖv‚³3—"VÕ›XR)æt¤ÞÙ ¶vÓØ¸¨Vê»l¨v}K©"îFV_Ps@YAÅ#H£š<ÈËíÜ»½3PÞÞ[ØÄsŒœë@oâH¤ Ó¢¹·`’ ¬¸Ü§¥Gen–¶¢1&õ^w²Q¸TQÜA#ìIQ›Ð5LY @ÏLй}j7ÁãŠ-€Fi¯´œ­b‚GzQ·nî( .C)Å(æ“ Ôüb€Xt<ÔB8•·,j®ÞjlJ0(&(ü2†úŠrã°Å8*ŸJFÆN(8ÝœE!uî+DiF«{ÊîˆxÜs[ØÆØËÊ‚=Å1¶¨>•+mÛHª„ç šjCÓšB@¬½nk‹x¢š ŠáYq×4€¼ ‰d."@ßÞÛÍ Q¼ü¢™yÓ[”‚_)Î>jlrQEÌɿצi8Aû£ò§mæ¢K¨%r‘ʎðj†}JÚÞu†Y» ý) ²v¯\@UÇAToÖ ÛUOå¡`Uƒu«P¼evFÙÙÅJ)zv¤½M Þ…?1¥Ç‚E€(í@èí@Àò(¢ŽÔRw¥”†5ÅDsš•ºSÍHË8£éGzZÔ€Íé ÐKÍ%) ëL™™r(,;S‰ÏCI»GãH9D ­iئ¢ªçbàSûP´iOëGö éÖý1NÈeâŠn(§cšN‚€”v£¶h=)€v¥< ƒŒq@ ÚÆ—4œU¥¤íŨhŒRâ Xþ'hOýüNùo”¯ðšÙíXþ!³º¼·ŒZàìl²⦀̵º³˜Úý®òG`ª²`õ«¾%-%¬QÅI¹ƒeW4Ù£º¿³û3ØIÀ,Ì8úVÕ¼"c‹9Ø¡së@Ìù®&¹Ò¤kXÝ&ÛŒ0Á÷ª(¡ep–³ýÒ®O\û×BG=(_Ö’,š^§%ÂC$¶ó¨Ý°d©•É}zy|‰KÛ¹}=ky˜(ž´02tKÛË©.ÒáU¾_—ö­Ž‚š¼ 7†n9Å ±|ÒûFò1š¥lÞv§s'h€™«¤œœU& -íÜÎ1,²3·ãLé7·7rÜ ˆö*6ã©L 3Æ)Û¹¤"®£wœAÞ6‘¿…UsÍVÑâ o%Â:™'bÍ·ø}ªÍåçÙ^0ÐÉ"6rÈ»±UôXeCq+Çå¤ÒnXÏa@ÌùÙ­ï.Ví£,ø*ÍÆjæ˜V{Ù¦€bŠ™˜V¬Ç(DWÿxP¨PA@\zŽzÒž˜¦®sNë@ŽkD•,µÈ.ˆŽF}Á›¸­RúíQ•Reyó÷Aõ«³YÛÜg‰ŽäQ%¥¼^%1ÿwÀÅ´f}zVóÑÜFÛÐJh]þ*ùÕFØò+f-:Ò9VXàTu )?³í¾Ðg/›œîïEÆgÚ…ÿ„’ïo» 4FT»¾Ip'2ƒÔŠÓ†ÆÞZXãFêÝê9ôËk©D²'Î8Ü­ƒ@ ÕgI¸ÆÍ»=)ºÏì¸à¼â¬Iam5ºÀè c Í-­œhVÝÖ4í£W¿ ¸û½iÌñ¤lÓ0TÇ$Ô6ö[O$±^X“œÓu&UµehpÜl^ô†:Åm±Ùå“üµak;E±{Wó>V‘·lÎvÖŒ{º¶(…âwuŽÝÄm'ÍW!°-uÃÝ—(>UÀrîÖ+È)×rš«c¢Áe ‘^Ga÷w6qLes'‰•‘B–„–Ç~i-1ý½}À-^]65¼ûVùLžíÛÒ«ÜéKxnibvûÛ ôäVÔ5Ö`1øStWHl¯$~ì¬vj³g¥-—šašBdîÇ8¥Óôãb²)™¥WmÄ0Ç4[Lµ‚úÍ®nI$ÙÉnÔË[uC¸ ¾0jÇØÍe6· ·–FìjM2/´è»ãÌ ŸÆ€+Û'…÷mÊŒÀ†ÁÍAyu*év1¹ÏžrN*tÒõ²kEž!à|¼‘V®t¶½ÓÞvQ2ôu WK¨ï-dŒGJpËEmã—e§ÝE25ÍãJ¨0ªãZ˜¤!²>Ø™±»8®Cu&¹ží|ÇÝŒ7;k¡ö¬¿ì© »yìgò„Ÿ}Yr)ž ®¯=ŒlLw…þíC§ØÛÏ{y³™_›¥i[X}˜Ë ¼òýéJ‚ÃL¹µ»’w¸V¸ ŒÐ2V“V³UÚÊT‚¬{RÜÀºmí¤–¥‘%}î XÔ4é缆êÞa‘ a†E9,f’á'¼•]£ûŠ«€­U••ÐéXš~Ÿ}k¨I,ÒFÑ¿Þ#«VÑ#iˆÂ¿º–}^;\Æq¶ï?Z±aoui%Ä’ª¤r±‡ÝƒMÔô§ºž;«Y|©Ó£†­ØÛ݈ŸíÓ¬¥¸Ú£Pf™nÚ¬2]ÜÍ fb+c`«òùzj)%±"søÓ-ôëý=Ý,¤ˆÀí$êµ.±gyym0ùg¡fcŽE.£]YO¬…HèzÖv¯l²ØDä–up™&µní./4ô„²Å'»Ž*ޱ—¥-óoPJýh@Gs§Ç¦ý’h2³UljMFÚ)µ¨Q‘It95~-?- Ï3MåòŠÞ¾´_é‚òhæYž€Ë@u¸cX­~P1 Eö›6³k`Z¼­^i¦é!Spê±`ƒ×'Ö¦m6ÚF4(òcïÖ€ :O>Ñ%ÞX?<ŒU¡œûR"*(E]ª:N ëN¦Ž´¸¤QF(ï@¢ŠFPTƒÐÐ1h¨¢F‰¶–ܳڥ¤19âÏê:ÐqL<Ó ÔjŠ);Ö¤‡z9¥Í'~h=x þt{P1@¤EÚ¸É#Þ—Ž´f€ (ë@¤ÐQÛš(#"˜ Úô§Å! 8à i{QŠ1IKÒ›üTìÐzQA t¦àÒŽ”£ŠJ^ÔiEµ-@æšHE,Ç :“NïX^,2=<¶!wüø¦Šê’2íN=êI® ·ÛçJ¨O÷RÓ µ¸ÒíG–¬ ïTÉ ³ÞÐÉ2Eµ‹•x f´³Å &guã;ªԬʣyéûÏ»“Ö©GÍáµWRÿ¹Î? ¡-ŒÃqÊ#ö«n=y4Ü7¶’\ÈeÏÝÍ[nGZçµKX!Bd(,:‘ï]jG )ÎÁ¬o :Çg6öÇïŽ7Ü»\î“g ð^4чýóc=¨ êþ´¡•¾ééX– $ДK;B¿wvyëRXªÇ«˜áVDòCq¸ç­G`žN¹{–;@Só7­m¡VÁ5“¼7Å眊à*ð~”ËôÛ¨!lÂ"óIÎÓé@[—vÝÃ>™§ps\啬׺rH­’C¸ÌIÜ+GPTan“NÀ¼‹œÉ@,äqM ¬~R:ÖNƒ#Ëksó0_5‚gªŠf‰aqnÒK4Ï’çäõ÷4†mÒ‘ÇúÕ}NYa°šHdU$P"ÍË>ÿìe¼[ÉMËü}O¦+Jò ÐäQ<žb®íäóL lÑ·ŸZËÒ­ç+ ËÝ3«F3j†þk¸¥k¥OÞŽ!Ü{ÒµŠÉÖî®->ÎÐJi•ÛÖ¥Ôîg_³ÛÀÛvÛ»û£½gêÖmö-çÈêfPUÎyõ¦B¹Ú)hŠN¤zRê¤Ídk—×vm ¶uFÙ‚¹æ€66Š0*+q"À‚fÞøåºT¹ï@jŽ«xÖ6¦Xã2>vªŠ»HÝEaèºÜ×—MmuI:Œ Uë»éäAkš@2ÜàƘ 71Nò$m–Œá½ª´ot%…ÛÜ÷[ŸÆ¥ÓìÖÆÜFsYsH '‡Îˆ¦öL÷ZŠÊÉl¡ò’Feí»µ-ýĶÐo†9³÷G¥K ´£È›ŽWÒ€%Í'jLþuRÿP[=ˆ«¾isŠ¹ÖŒzV}ž¢óܽ¼È‹"®á±² A­;ÜO ¶ëD¥†æûÔ­Š9ªzeô×±$€Â¿Ãóg5pó@ïnE¥¬“•.ger.­c›nÍëœzU}dgI¹ì§my5¦™o"Û…PnmÜþTÀÕ¹- ydÎÔ8¥·•.`YS;XdnëUuElíÞSJ­ØS¦¾X"„ùe¤—îÆ´€»ET²¼û_™û·‰£m¬­V³Í0,«m#œ*Žj¤7²ÍpÚÈ‘‘¹d5KÄ—-£„l€Û¡sw•º»‚ÄáUGs@Éâ“JÏPû\²Äbh¤‹¨'5R]bXõ)-Õ˜…ÊàýêÙíKYÚv¤×,RÄa–>ªM2mQ€•­Ñb$1vÆ~”§ŠZ¯av—Ö‰<}·¥XÍ “7ZÉÕu+›kØ!‚‡o¼‹Ú¬K{4v/p`!Ôå–¦ãU’ò6¼{]®rGVÇR¸¼h›ì¥auÉ“=ê[;ß´Ý\Fa1ù\dõ4z—ƒÒ²¤Õ¤e–Kh<È¡8fÝ®)!ÖU¬d»š&Ž1÷Ú¤®wt¥ÏµŒ/õ²ý¬[Äc?6Íß6Ú•õ˜Æ›öÈ‘z;SNœ:Öº÷— S}’O%ñ—ì+BïPŠÒ4fžNV4o©æŽ+;ûQ¢•î Èp­»#4Ëýal¯#·hYƒŒî«ÚŒV4^ F™¡6Ó$€eT¯-Séú²^Ë,MÃ,}U¨Kb¨I©ªÌñEJÑýò½£»Õ‚iŸk·C'·§Ö€4ø¥ÅfiÚ›Ý[y’[º2®z}ï¥WOE"1X&$6Òô  ›Ø-dŽ9ŸkJp£j²îom¾Ûo —•ùBW¥My¨¥¬‰Ö’gû¨½h馔Z© $2‰b’-»¥Aµ’B¦)&8ÏC@Daxâ€x¥?w4‹‚({RUOSMD2#6óŽ(µÔRáä\ˆˆ»·²àí@ æ³ï¬P_-ätPs…ïI­΃ËdIIXÜÿUÖ5ìZ‚=ÛÛ©þT Ò$ÚZÿÅâjHdócWÚɸgkuŸs¨Ü[éëpö¿>~eÝ÷i÷º‰·‚©ºi°i 3ƒŸÂ–±'¾¾ÓäŽK±9ÁØ1¶¶îáЊw4¢š6piG^”€\sKIGz):^ôR;QIº”P1®ÆiÝ(¢‡4˜æ”QH54ç‘o4òHZUóGÌªØ ZƒK@ÊPé±ÁdÖ«$…Œ–ä céq=˜³/'”¿íUìJV€3î´¨îD;å±·¿­_åTf—éA C%VxÙQ¶15fYirYÇ:­Éo7œíè}kTóHsÅ1×HaeöO´nVÛÒ¬&Ÿ2Þ%Á¹$íÚãoÞ«›“ÎÙ¸n⦦siò‹Ù.`ŸaÊˑŚZBÒ¼ŽÒÉ/ÞcZ4 cC¢Íjû`½t€¶vb§ºÓe–ò+˜gØè¥pÃ{7™Z`ñ»Q·œÔz}½õ´¯НrÞfîk[ñªö×q^ <†o‘¶¶F9  ¶öªº¬ŸgÓ¦8F ò“ëWëUïìcÔ-Œ’óòРžÞÁg›OW+ónÝÎ=qZW~f¡¤¢ºe{Œ OìF±­íÆÎŒ¥³‘Z0ÂD±' ƒ•´è¦ŠÍ"œ*²®ÐTç5—öï²<~Jy‹.ðìܰÍt=©õ¤#:îÒk»x$Šæ#¸}}*Ü:•ÃÛ´Gû©7=nâ”{Š`bëww¶Ín-çæÂæµÐ1PXòGJvÞiÊc)ìkZ·¼¸šÜAõ‰ÃîÜá[§ò¥â€)Í,±Ø¼¡˜¨[iõªúÕÍõ‘’åv¶î8ÆEiž½©ÛÀÅ c5[QºV­3!|tP;Õ³IŒö kD¹Y/ÚY"ÜN~c· ‚´g•ì.¥šHÞHå#nÅÉZÒÆ:šB2Fi—aæÝê/xch¡Ù±Ç&µÇ` Z@fk“X"KdyùÎzU¸$YíÒeÈVPj¾£a-û¢4û-ÿ‰ûÕycEE\*Œ `4ÇŸâë\ö¹ [ê–÷’¡–Ü ¬1œWKô¦¤a€#Þ€3l&°™žKHöí_™‚b²ïVIeI<Ÿ³¯ Ž[ÿ­]2¢ªá ì(Ø }Õ  ½oµC¸ÈÌéò•Æ­@¦‘US; ú vxâ€3uÙ=:UgÃ8ÂZÏ»xÿ°ÃÛBí®•[¨Q±è?*ÂÕåC¼Á† òúÓïþÏq¬o1…¶ïŽ@x²ðÆãk"=E#[Ã"…xÑ”th¢M5Í¡iŽâ¨ïZÒ*IëJб€¨¸Qè1Jh‡â"© ܬm?T½h>̨ŽS̬2Þµ$†)#V=·.i^Ync1†,BŒ*q],VñG‰UzZkXÛTò#Ú¼¶‹Œ/dlƒÈ¦…—ÌS¸m7  v™ FŠ]~ªÌ7yƒŠ½-ÂŦ´ñ Xø½M=µË‰'…]€ÆXT‰ qE±Uº Ì—I$ú|Ï2‘»%Up¬ëØW³wÿV³eŽ:VÏÙáU å&Þ¸ÛB…`C(#Þ‹«Ëçél-Õ¤ó1‚¢ Ô¢›Ê³»‰¼Ÿ¼½ñ[Šª=©qHzîoíU†Ú¥Ù¸wR1D°ëK#G /—Ÿ”ät®ƒn;QŠ.D"îûØç´îôf“©¤óEè‚ކ–’9÷¢ŽôP1ih¢€ (ëFi o­FzÔ‡ša¤2ÏQGj Á£ñ­ Pr)àR2ii=¨¢Ž”P(¤?1◵Ť>Ôê‹ÍaL6}qHÒö¢Š`hþTgµ&3@€rzñIÍ;§zJên)ݨ‡§Ö“>Ô½4 PÜqIÚ…Ç4JïKž( k3^’ê&žÚaϼ1Ö´óYºâÍ5“ÛÃIæŒniš×š‚éßyɰ”+÷¿½©4WöèÛUÜ_np*¥Å½ÉÐãµ[rd``Óµ(.KKè#2îãÉ«ÿJB2ïo§mJ; B¨Åw¼„gÚž&¹±ŠæKÙHf6Õ}JÚ{mR=BÚ30+²DjÅÊ>§¦Í…¡Ü>]ýI¦2¬7š¬öŸlA—÷„xä­IsªÊt•½´[ûÁ»TZŸÙ,>Ë<ý¢5ÚWïTrA-¯†š&F3Kü*3ŒÓg¿ž›[·ƒåuÛ×–Í_Žþu¿[[˜ FcelÖv¤íôÜ+n ¼m=;ÕÛæQ«ØcvFìñÓ4€mæ§{¦¶Û£†\¦[­Ma©Ë-Ì–×y3 ÝÁÈ"«êN–úÕœì¬Wk´gFûYûD@ù1ÆW~1¸š`NÚÁ1<Ñ,fÉ3üÍARjZ§Øìé#Þ¯ìk+LšÖÍ$´¾ˆyÈçoÉÕkÄr¡ÒмÅH_AH –·Ò̲<–¯¨Ü¹þ!EŽ¡ÖOtSÉ@Ç9ö§Û]BÖ >ï/$ö¬‹`×Þ¹Š ›™±øæŽ­*§ŸöW6ýwÎ=qZ¶ÓÇq KnWVL:•¯öFç`®‰±£ïœc7‡`’ - ‚ÌX)ì(H«Þ—u¬Y5á­ö9!*»¶‡÷­“íLA#,h]ÈUI¬åÖ-Ñ$hƒmóü´ílI&•p±ýí½*¾‡qnÚT*цRz¹s¨Enë $¯÷Q:â‹køç•¢ehåùn0k,:Úø–G¸l,±ŸJ’íÄÚí¢Û¶^0L„zPíËA<Ñû¢ëòõúS†·fbóÙ¹ÁP¼Š­iÂAvÊB¯4hñ©ŸQl.Ó) Õ†ê+ˆxÛ1žsU¶ìv3`ÛÒ«xyösîû¾c*šÆêO,e¤~O¥4ŸU²Œ!3®îÔ÷pZÄ%™Â¡îkÚ$o »H‹¸«â¬jI¿Ã‡ÌûÞZþt Ñ{ËxàYžUXÛ{ÛthÕå@Ò}Ñžµ“¨yká¥Wü‰QêÖ±ÊtÒW«*žq@©qŽU%FaÔ¦\\Ã_:ELôɬÙ- µÖ,ͼa7Ý·éUÑd¸×ns"£(Ú—v7–XÚ?0:”þöx¦}ªßb·ÓÐîëU¡²XË ¿˜­¸œ u¬»m2ÙôMó(gU,¤”Ðy±ä.õÉéÏZ’¹«Ë(¡ÑRç'Ï@¤>k~Ù‹[ÆÇ©PMKY;_êÒZa +–Úq“Z¤ƒ•ÍbhñyZ¾ ³ã±æ€5­à[H{ØÝÛ&¥lûW<¢m^k© «FŒcEf+~)nšîËO¶´–_žY6–ø~´v?:ô<ëtÑáˆT\`cÖ¦Ò¯úÓ|€V*بÿ³a¶ŠO!¤M냆ê}j† Õ¦ó$Éb6çŠkÅ ‹u,­;28â>ËS™>VeКƷi,âÔäÒbWqö¦é¶]iÞ}ÏÏ4¹fbyJoi>_Zçì¤k&êefòX…u<‘Lû}g7«¢–_ŸŠé3I¸„ÃÔ®'m>Écnf+»œgŠšÚÊê+Ô”,qB ªäî v5D‰¸®á»Ó4¹SÎF+˜zÍâ)âydØSsa¿JŸMµs}dÒHÐÆFß›š,#¢þ(Åcè2Žâ‘˜E)U,yÅkgŒæ€¥Z:jLÒw⌯\ŠÆ×.fûE­”R¼óó8ëŠeÖœ-'µ’ ¥+†bCS° Œõ¦dj²ë–,ŒÃq;†})ÓeuëpŽÀ2±až ldg­W=ªºGÔ¾{É(ÆÍ¹Äu¹jÍ%¬LÜ’ ÐœVkÉöëù­C²ÇÛ cZDdc8¬ Lz–¢¥ÙðÓ@6Ðýž¥i6ÿu©«œ¶’ãQ¹¼`ªá[j†rŠØÓ!¸·´Ý8wóžÔn«Ü5ןÙü¿/wï7z{UŠÉ¼šê-jÖ5”yçåÇ¥kçÖšg¬msí?jµû<íöÚqüꥪÝYëéo$òJ޹;¨ #:† Xn=­8ô®Q·kz<»'å=*[養k;wmã,ÙÁ`=è bŽ+6Ùn£»”­¾Þ|óY¯ö¹5¹`2 xóôúRë»…µ¶’g苚¡gÝÂÁv×,þf‹b ×#š=oœ[n7>ýKqztíe¶ªŠ`kçÞ“$ô¬xäºûD5‘ï —ÔÈ®%Ôµ;ˆgŠ8ù8$Ò¶–³DW6¶“/Úör'ðŠ«gu·R†Ý'iTÄw±9¨iÈîi£ŠçµÕjÖf9Üy·ô§ù2Xëvê—ºLåvÍ07hÕ•ÕY¾è'­?­sº¥¢Í¯[+;âE9Ãc»mÁ ĬÄ(êÇ&cà(éUïô¨î.Vq$‘IŒCÖ¤ÑïäÔ ‘åEFG+…«“6qœzPt²Ùµ¼nË»øÉɨWL+¦›4œàñ»o8«VWKw ‘ctÁ# 0jÁ‚æmÞš÷zÚ$ÛT +œâ®@­²ÅF 5.) ±ÁØlqšÍÓln­ïg¸˜ÇûKڴÊáÉ= I¶€0§Ó¯"º•´éÕVË©*Ýæ–·–iŽ|Ää?û^µq>W#jlzÐE¦™t¯ºîìÌU+L¸ÓüÄ3«ÄrUv÷­n”v  ëM9ãûOžâO<äàUì«ËMÐZΞKž7VºÕ”»÷ôÌá¦<iµµp¥¾ó°Îj 4ۯ쵲Ic-зµn…â¡SµÈnô—.’÷:dVï.ÙbÆ×*k [øßuåȨ­01Hr(&ÞÂåuW¼f\:í*zŠ}•„ö×WS³£¹ÀìkPsF3@:vŸ-£JÓ:¿šÛ˜Zn¿k,ÖyŠ*8þfç­j¼`Õ=J_³†¼-å)ÉœP\ è;Ò:†XcL =VòÚçDmެe"޹¨µUhôK1/ßV@sZé¦ÚDþb[ƭꣾÓm¯™ZpÍ·€Qq…ôhºmÁUséÇj« 1MáôóUqäç8éÅh­´Kkö|ݸ'5N=ÙË 1‡9ò̇mP›÷¾ç`£ñ©uøÕ´ˆÐpÉŒÖÍ„Vë ‰ûµûª§Ù´ø§±[WݰciÝÈ D6VÉhªH†0Á™WþÕ‡of.õ+«uf3»cº=«vãI[‹Eç””mÊäò WŸAI%[‰c”pÏž^–áÿBƒ÷²ƒ kÃ{T¶W±_Dd‰•†j)m!K#›¼ ¼šÌðÄ/—N„ ß»,:ÐEY^!¸–$H˜¡•–…jTWv©ynÑM÷[Óµ0µ: m>9bÜ$FQ»?{5>®¡5 6@pÆM§šV·š×OE–äË‘B‚ƒ=}kCRÓÿ´"„¤…$‰·+c½1•¯wâ MÊ$ݸgƒUµw0­ÄÍtÍ2#XÉ9ïV[K¾’îÞâkÅf‹ýŒSgÒ®^;¨’tÌÛþeç4€—S¼žÞÎÙÕ™Èó$;EXÒÚR²3\­Ì$þí»þ4Ï.ù-á$ì ‰ 4š=”–qÌÒü¦Y7P–k¸‚v×¾Ìo%ò䌷 ÷}«¡<ŽiÄ6曚>nô’ÌϧêBÎIšheBè_ªš–ÇSPǪ~è-&’øÞ]m «µN@Ë;[”¿ºžPв§Ò•ï®n­÷O$êæ*¤KÎF{ÕrââßLi­œ#2}«=´ûõ´’/&7“ÌÞ%-ËsWuˆîn4Ÿ*8 HøÜª~íW–óQ·‚©^#m€næ†éHW4ˉ|˜B mdÐ#žÑ~Øm®~Êb]³6KóšÐ¶Ô$¸ÒþÓån•AÊŽ2ETÑH,®LJ ràlëš4§k}Q:HŒ¥¾R¾½(©¥]µíšÎè±< ¸y¬Ï²ÿfƘ!—;Ç5¦}hGXºžÎÁå70OðûÔ:EåäÖáï"Ufá.ï½øTšê–Òg ²: ¯m4w3Åo¸ºC´½ñ@ÿm/”gŸ³†Û¿?®*[ÝZ …dV>oÝ#¥di’ii7q*ΧiV“Sø…-œYëGà(¥o©A=ÁŒVþËßJ.oÖ+…·<ÙˆÎÜãªß¶/ôõB>ÿôª-·ˆ¤kÏõ2  Ç  ,k&¨k4¾[oƒ‡Œrjªkêö«8´•—øŠŽ¤Y4øì®%¶Ú±°!˜t'WK‘ÃOóºÃšÐ¾Ôž›ö¸PȬÍ'Q–ùÉlñ¹ßü'éU›á_—æÄ=ªÞ<c qH¬Êƒ*"C¥5Ñ_¨¦\J-àyHÈEÍPÒ5ˆõ5òÝÝÍ4ꛈí`ifmªµ(¬Ã,Úwî†v0fÒUy)E¤‚lëøâ¤¼Õc·˜Äåu]Ì}ÑIa¨ZIkI8 ·¾k2îøOuy´vÂ5*X®ZJl¦¡–_j ˆöîç­fjZ©›J‘…´¢9 &8¨b‡Ïð°H›s*äÇ5$ú¬Ú$n«'—·Ë=s@6×QZé0Ë!Ú‚5¥‡SY.VŠHÙÆWpëXºÆ‹dÈKF¥wcéZÖRéÓê/SWsžÕÎj¹´×í®çRmñ·w÷h^ Ö’Wí¤•wsÎišmä3C !VÃd`“SÅyo3mŠUs·wÊsTtiRK­@«õ¼PŸ\.f‡d…¢6õúU‰µ t´Iå,ªÿuqó³a’3â™~dÇ•Æoêº|²¨ ƒè 05c¼¦Xvº³.á¹{T¬ZG)Bíò¶ÒÁIP~µoÍimÊØ\ñé\ÅåÂÍ¥I%ºÇ /(Êçæ<õ¤X9ö4sšŠÙ• M¬ŒŠ”h=jŒÚ­œlÊÎÍ·ïRBýM]~TóÛ­sš_™o 寓ç’ç ¼ƒŸZÚƒP¶¸ŠGŽMʃæ8ª©¬XHªV| Øüj}:Ûì¶ ¸k;AŠûbFÄǨ  K­BÞÔª»Äd*ŒœT±]C5¸™ÈÎêǹ¸ŽK넆4Yb #še˜ó<0ëYŠ7€'Ô58^Âb‘HÑ•*oËV|>1£Ûñü5V;ËfЊ£¨Û “È8©tû¸­t§<¬qóŠjÐ}ª¦™¨&¥mçÆ¥9Á­žE2ïõËkÄRfï·økBVh’HÛ*à Ö6¹qh¨m˜Æ%—ï3º=jþ–ð5’%³ïŽ1·4q©J1Iü4€Á¸.ž% ‰½Œ<W,o¤–ækyáòÞ?˜sœŠ nc>(_Ÿå ´ý}*KkˆÛÄ3ml/oãšc/Z_ ‹‹˜ÄEƒŸâªj×—ácµdM¥±Icu jzƒnþïnÀTZEÄ~uü­¸+¾á•ê(êjÃû-®äk.T¯½Eçê­ SƱ¾ó“:­T‚µè—ÂÌó `ýsS[j³,Q@-%i€ ß.ç@ÍÀr#œt£µ&NGj\ÔˆJ:ÒRŠCÖŒÑE ’ŽôèRÒ5/µ('šCxÃÅ<õ¦3H #¥£4V„‹Š1IÍ QŠ3Å F)h÷ ¥bŒs@ Ò’–ŠJ÷¢–€ð¢ƒÚŽ´Ö;FãN¦ºîzÓ±@v Ñ@:RãŠLqJ  âŽhÅsERýhæŠZÎÖÄíg¶ ’OÌìØãÚ€/R7U¹ýRš¼G4’Ãå†ËœüÞÕ%ÊÝny1Ý:¬Ñ’¿ìý)Øf¦¥-ÌV»­"É‘òŸJ7Ô°ù±Èô¬U¯,tø^;€ÅX,ŒËËf§ÕožÒ3ûɘ(lgôÑ t—e5ÏÛŒ'Î’ ¹ó$M¸j§ Ô\ºE¸]©·åa‘¶€±¯5Ì‘ÞC@Î’g.:-X†³¤¼¸V†Ûjù2);»œTO©\ÉusªÄÞA+}æúP›˜gš•@íÛI'µL1ŸznÞjŽ«|úu°b.ì6N1Z8¬):Cœôe?­Oye©o˜ò"ðÀ)©â;(¢GgrÌd“Yòß]ÙYÃ<«·!W ÃŽ´éµxã’Ù#ˆÈ³cg@äQÞ²oõ–³½†³³,˜ù½~•5¦ªg½û,ÖÒ@ûw.îâ€41KTßR_¶hci¤A—+Ñj[;±w-ã!¶²°ïH ­c½´÷:”w±M$Y@£Ò¶²+"Ä·êH£jî^ŸJ`h}ªíñæ"îe@¦Y_AzŽÐ1*´äb °º´¹–o fDf+ƒYú]êZ ¼Å#ƒ;å®@¤B^Èg¶3ÄÛ ñÖ©E¯ÚJ”Hrûq·¥05³Å!æ«Ë}mm–UCïÚ•o­žU‰fRíÐzÒ|zRí¦ž¡sQAuåÖì;[½0&Çj¥Ç5×Û®é¥X×ÜÐéjºÞÛ4M(ž2‹Õ³Ò•/-Ì^pž?(œnÝÆhqôÅ1ûTsß[ÛÆ¯,ȪýzÓ>Ûlò*,èXÿîhÐv¤ïQGwo+˜ã™ÇU ÍMšM¼sFTíP>”îÕV(o%•§gFGÙhË '™ä¨“ûÅy¢k[yÛ÷Ñ+ŸqN ;=3R)㚀ØÛ´«)‰|ÅèÔù­¢q*+F¬výÓšmÄRHŠ#”ÆÁ'½)}ž!”"_/û¸âZÁåù~Zìþî*oÆŒS‰ K–¨¡?ºÈm-íòa‰ž»F*féQ…ÈûÜМþí¾]ÇwÖ³4½=἞òuXÚ^kÑEj…Àùª%a©8¤nAÏ Ö,ãT¼Yei#^jÞ šab±¶I|Ć5P´ãgnÒ™.{•ëQÛÃr·S<³‰¾âcîÔé,n̨á™x v ŽÞ(Wlh¨¾‚¡}:Õ÷n‚<·S¶¬CóÒš„ZÂ-ü-|¬cn8¤·²¶¶Ï‘¦zàUô£At{mÂÝœæ®Hr0yëO³Óíì•–ÀcÏ5OSººµ¾´òœå}Œ˜­j¦ÚM“;9·MÍ׊”Y@¶æÝbQ ©óŠ3@Û[EkŽ£°©2fnÒŒíäÐYl­d“Ì’ÙÏrµbHÓj*¨ôªËË^+¤ª!æLu«`ð3@=ip1MvURÎÀ(ïLŠTš!$.OB)žL[·ykž¹Å"*‚HP? ‘zsH&€ˆ§;T~¡@þE0ÜEæù^bïþîy cö€D&‡ÍòüÄó?»»šYçŠÝ Lê‹êƹÒöÓøŽÝàe ä±_Zé©Zh9éNþtù¢õ¥ïH4w¥¤=h¢ŽôÝËHc¨éEIÞ—µÆ‘Í0žjVâ£4†YÅæ—µëC1ZJ^)h4¤ñGÒŽ½h9Å-P £½æ€Æ‚1GåK@ E4v ¿ZéE‘í@ Ö”ÑÐQ@(¢€;P@¢ŒÐKšJ(i?Š—ÑŠN••¯érê1Gä:«Æs†<ÕïUï¯Ê6D‘×ý…ÍfçߥüwO49*@·µ2êÒþM^;¨¢d@¨ËýáZ¶·QÞZ¤ñä+ŒóQM©ZÃjnLÇ»nTgšc ÖážêÄE [ØÇæÆ1QêVSßYÛÉ츄† Æ´á.-ÒXÈã#Šn(¸Š7Ó7úM¨…@ë»$š¬{]jâ_"I#˜( ½«\çS‡7>iÖ-XBÆ4R±ëTuZâá¼»i#¼|² ùJú“]/U d.Û#,Af8ë+KÖ$ŸR{k˜<¶a”ê l¸5Ÿk¦È/ÞöíÕæ#j… ¦#S'·5“â&vÓ^(âiN>QœV¥âö¤Ï6‹j‹»²¹Oõ§j±ÅØ0Bæ àp½nŠqëŠsúÔ‘[OË‘¾oAVf™ˆ­Õ\q)Ç­kòúŠ<µß«Ÿ¥00í¦M?Y»[²g;‘ÏC[6×]#4 ½Tã8â–Hc˜m‘ÇûC4ôEEÚªz ;¶kÁ³«j?7©­†ªÐiÖÖîÏAY¸cž´§l}fûk)4ý` uñ¹glçµiCi-º8QÕV˜Úm£ÈÒqêG  B(žúHø¤ù}=ÍC᳉òŸßµmxŒƒËÆ6Ž*½¶›ii/™!¦A  ícÉŽÚõ åeÝ.OÝ©4ˆ-~Çi,’( ¸ýÓíVeÑí%»k‡Ffo¼ pi-´[;yüØãmÀäÜ ½+*#;¶ÕQ’Oj¯§­›#Ie°«±OZ–òo&ÙØÄÒñ÷g5Ÿ ÙIj³K*ù~kebþè  ŽÕÍᮼPcº$k˜Ôô®Ž©ÞiÑ]ºÈÅ’Dû®‡€{i ÙÝ2F ¼gv;ñYz\hÍuKèÖF!UJî9³ÞæKk»_ô³5Ä’í“keqVâÒï¼ëÃ4¨|øöî^9ª­¥j~M®Ôƒu³|¼ýïs@OjcýÓŠH<Ï%<í¾f>m½)ؤ#’˜_]j²Zý¤‘·wJ·õÖ—<–×­ç.ÜÆØæ’ú2¢Í~ö¨Ì¢%Ë2®âI§é×Ü™Ráymò±\nVîÞêËUkÛhLé*€Ê5vÕ¯&Vy¡XN~UÎM[‘!fw0/­c-õí¼ö¿i‘ NûL@}ÏÆ´õ%ì%[_õ¥~Zçü›µKI³ß|óäòÔÄ‹úò4—Zz#-/QÚ’÷í:KÇ:ÜÉ4%‚È’sSj¶÷3ý–{hÁ’ÜU6k{ÍQ£KˆE¼Û˜nÉb(¬å±¬‹ùnÒY§Öñ®PŒæ¶1µ@ͽñ»½F· AÙ#· =©¼³Ü]è‚`Û$1–Ü*¶‹ÝÕ¼/vÛT‘³Ô{Ô–Ë~š1·û2‰lP[·­?@‚òÒ·ºˆ*¯*Á³šCþ’ž!Ùç3FcÝ´ô <ú…õÚ˜üÁmPd*Þ­Çkzu“w"Æ"ÚSóŠŽãJ¼†ùîté–?7ï«Pî ™t #»œ«uô¨tËt²Ò~Ú…¼Ï(¶ qùV„–’ɦ½´²ï•Ô‚ø¨,,®–É­nÚ?/fÅÙÖ€3mÒòîÕ.fi·oà~U¹b'¥02Î+ßNÖ,×ìÐK‘»†=@­èÔªàœ·sC'`±9-°ûÞ•Ê8…VÝ ó´ã7 1žzWSun.­ä„œoR3Xká¹|Þ7ÊÙ@: _•—^´Šcû°¥€= ¨.£Œx†ˆ mÜØãÖ´.´t»µ†9$o2! ëUWÃkæ‡k¹Oó  ¨s°v'½1bªŽ€bœMHNN(¥ü)(>¢ƒE†“ŠLsÈ RûÐE%-&3KAâŽÔ†#TGƒR´ÓïÅ -QIKÒ´ CÇ^Ô¢GhÍRŠoÒŽ@æ—½ÀQE{S~4gŽ´ Z1HhÍ-%Š(íG4cÞƒÒ€ ZJ\ÐQF2(ï@P=¨ïG|P¹ç4t ªjüiw<ã÷f­óTõ‰b‹MŸÍ#iR'©¦ME‡AŠGåUI8ôɧŽïB¹šQ+m\b™ \Åý‡´¸Pmàž•^ÙÔxNl0<7áÍ,Øê‘[iöé4R¢ æùjýÖ£mj±ùÎ@—î3Tüûsáá½×i‡hç¾*•úÐlV¼2 m[ê×^`†MÞWÞ>”°j×2lŠ@ÍŒýj BKkM>Y Q€V Æêηfmj×r¤h %Np(Mõ[H®ZÝå "õÍ*ê¶f&•nc(¼Y×6‘IâXK¨`ÑAqN³´‡ûnñ|¤ØŠ¸\q“E€ÕŠâ”@áÔ÷`~‡¢F"–ù…í[ƒÞ¦Ôm!›Ê–tI:àž”ø.!¸ •\²sXº…¤-â;]Ñ+,ŠKÜŠž(b´×•m×jÉ,«Ó4 Ðûm¨gSSé‘YÚ-™uu!še1ÍÙ¾÷Ö€:Z(  Z¢¢»µ¼‚ .ß•KÞŠæ4éµk»9nTœòÃ$ûU„¾Ô$ÒÒø: Ÿ}1÷±@þôžµ™¨jßd°ŠeL¼¸ =),ïå’íb;¤—%¼²»Mjâ£Ú(]Õ ²Œ…Me^_ÞC«­ªÊJ‡Ëϯ½Iuy}c¥´ÒÇ’©ù°xÖ€4¡s$J쥆JžÕFûQ{[È!0nŽVÚ=é·Z“à ²Æ¡î.1´v¬ýM¯SP°ûI£2pTw  Ë‹¡D¥Œ·åÅOÚ¨Ï}$W¶öâ"D¿Çž•Åüójc²Øé‡J@jö¤ÀïYÖ÷ÓÇ~,ïneÜŽ¿ÅUÿ·$Ó[G,ŸuW«SjŠ¥§j‹|$6ŠHލªÿÛ±ýõ…Ìü³'¿Ò®.áµÚf}»Ž½K4«-#ýÕ5¯€tÂÚ^±{x¶6bWFuàaEX†Už%‘3†§Ö©]ê)kGai%û‘¯z…µImdŒ_[ùI!º¶à½59ïF*Œú´÷BÞ@ûŠîšÎñoa2F®˜m¸qŠYª·wËlÊI‰×`¶5‹§Ü}«Y¼œ† „Žh{OÔbÔ™”©ÚC UÊ¥k}ÄS½¼mû²w ¸$Õ /\šòvFµ}…ö†^‹õ¦ॢ­ ï@"€sL™ÒÚI*/,M 6ñ=çœbÌŠ8sV«!üCl«¿Ê›ÉΛ85bóTŠÖÖ;‚®ñÉŒ÷¦ãšNõRïPŽÍcyÊÈ@ÈíO¹¾†ÙÕ_%Ød*ŒœR²Z\ÿký©ü±M˜šÐÝŒT"ö&³ûTyxñž:ÖL~&…Ñ¥ò§£8@oÒÖ3øŠ‰&X&hW ÂÖ¤3%Ä ,gåq•¤”qKÚ©ê:„:tBY÷NÑšÏk;Ó®‹Ï%|°6ýþÕ¹Y+â+ ŠÌ졆FV¦Y´’áa ÙoºÅp _"’¢¸ºŠÖ=ó8Eé“KÄW)¾½(^ôŒuª­©Ù©|Ο!ÃsÒ™¨j¶ÚzÆf$ù6úzÐÓÀö¡H#+‚=ª³ÜÚÜZ3™WÉa´¶ìR@Ö¶– Ñȸ Z€-Òw¨m¯ º äH¯Ž¸5=žÔ´1HiÜSM GJ€Ø"”)h¤¨8Å8b“ni@¤1ZbŸ˜Ô†£_¼iˆ}%/zCÞÃŒP(¦ÓM"ÓÍIŠ@)=é´{QŠ@{QIÐP1GP(ï@£éE¥!¥íHb¾ÕëO4Â9¤ºJ(íÅhH¿Z ©3é@…¥¤9£4€J“­(4ÀZ(¤ï@ E'Z("–Ž´PcÞ—µ†€õ¢€(ÏåKIÚ”PbŠ)h(éE53“švx£Œõ¥¦äf€™,qÊ»eEuôašwzÒ€ kXLf3l=Wo˜–VˆBŠ÷”µhôéI@"Ñì!`ÉätÏ8§]é–׎¯p…öôùŽ*ç^)q@ʧÀÖFÔ©1ʍ#ÐìãxäE`ñô;5§Æ){Qq³àk¿µÆ\`|Ý)b°†e• ‡—†;«2}fîÞñmžË÷÷yÔU¨õ ¡q SÙY7‡ÝŠc&¶Óâ³wh™Éå·6y«Ã¥Aq Š=䣭N9\Ð#WÍÖìSs&C|Êy­(,ã‚W›s<Œ1¹E>•m5и3ÌÃ)5[ç°HvFHá94 hëñ¼ïcó0jKÍ";¹«#Ç*ôe5{¨÷¨ÚìG$QˆÝ·¹QÂýi ¨ºVgK‹»†ã(#TSiS5ã]Ú\]º‚2 kÊ>^)W ¦"Œºk\Ø5½Ü»Ù¹ßކ£°Ó®íä_>ñ¥~êã¯Öµ(  ‹6åoæÆq“ï« ­%…å”÷É$n²üÝ9&¶:S[åRh3M·ºŠæigòÊÎw§¡¦éÖ7–Wss[Ë!rOÞ­ƒç<=ªp)sÖßÛkfÚñ÷¤¹aÎq] ëU Ó¡†ñî²ï+ÿƒÐSí2RV6*»›Zwz\ó@æ“ Ý½ÔonèîÌʽJ°Ï…öc[+´{ÖÓ¡ÜvªÒj±Ì"–xÕÿ»žiCQÓ§¸Ò`Tž 0µbÂöîy9¬šÌÍëZT´À篮µØ%Ki!ʱ WuÉIÒäDÝ¥ µ1F¥`_Ã(‚ÆòÞ&f·)ŽqPßß}®âÆU·V9>mÉ]7¨e^”\ Ûù”êV@nù–ã¦EC2ɧjïwå³ÛÎb£%Mn”¥h ˜±;_ê‰p"+ B³ MAmuø†á÷ ¢<üë  ˜aN~EçÚ€¹avÿlÔ¦ˆ+§ÞÏ®Ršø]ÙÂóO†ó†bEáFk¨Ž‹*ªƒ×•,íÑ c z´ ÇÕïwéÅþVˆºì÷k[G˜fEG­X¹Ó­îŠù‘‡Uè: ³¢*P|¹í@Œ-W|Ri×ȥ዇ǡ£X¼‹QH­,Ï#ºœ¯ðW@UJíÀÇ¥6+x¢ÿW§û£\ ]I‘55]”lÎâ~•³»Ÿ—5 Úm¤ò™%ÏsR… µ0«ÅIØæ°t»…mcQîÒÃõ­üdUD³‚7.–ñ†=NÚÏÐß{jXß“Qxbâ5I¢wQ+LØSÖ·!·ŠùQªg®ÑŠjÚ[¤¾h…ŸÞÛÍJÌ=«3L× Ô'’%]Œ½­CÐÖ=žœçT’ñâHP.ÔEê}Íjçw+Y>&>’Á8a»•¬>AíB®àwc@ó¼xmü­¥<}j-]BøzÜtÁJ~¹cgo§Lñĉ#tÅiÛGÆŸ¸Yc("€2u»Ëy¬-Ö)‘ÛÌ^SÍv¯y,P¤bHâÉ•ý=ªèÒì‚öhðGù4ûYe<*\ f€(h[±†æź¨hÞRè×9aÕ·dÖõ¾Ÿmn’$Q…Y>ðõ¦¥¬A£HQ¾òã­00”ªxC¨åOó­ì«l ™ôûVƒÉhËÎv㊖xíã¡v%fkê¤ÜnÇÝâµ1P^ZEynb™w)¤?4Kÿœ\.v¯?XÖ`Ólö®YdLb¯.™hmÅ·”Æ59ÚXÔ³ØÁ1ˆÈ„˜¾ï=)ORž>Ú'‹Í˜Ñ®p¹¦èE¾Ñ¼*·ÊŽ*Åö™o{,rJ2p ¶)öºU½¤¯,•œcïfÌ« “Äñ¼a‡P OâÓyAÄ¡ ž (/ ÊÍ1œ¶[­[¾±Šú%ŽmÜÊW‚ +k6ñ6:ìPw=j‰‡í:¬1:‡Â•ÝшíZsiâK³yÒãûŹ5Ó!û6Í$Ÿ¹åXÐ4y–ifY XnS ûzJ¹y¨ÛØ¢µÃ`1ÀÀÍ61ÙÆÛK39Ë3“Q^éö·ê«p¤í9Sò²º«©È#"–›,qªG¨À½é´GãE1œ«cm¦ÈG½?µ1Ûž”åÅ7w4õR;ÒÒÒP7¥3fvzÓÛ§J(âýiq‘Iõ ÷âŠUÁb…ó×¥&2(\ÇQMvÛÉéœRžjFQE0Gz$R@”QE¨¤Æ(¤1›ÒœÔÒy¤Ÿ¡¢“¢´ uâ’ŽÔ´( "°c–§ñE.)RRÑLŠN)hï@R}(qKIIÒ€Ò~´”Rö¤§Ph¥Í&hzRRpÔ½è1ß4b–žhéEh>‚€Óii:ƒ@(ÛGZ?†€¥i9íK“@æ®Y|CdÑüíºN+F+‹¶ÔÒ9£ –Çå9äV}ý½äúÄ7pÚ6!àî`7V”—7žXò¬˜HxË0ÂÕ1•5»‹«wSòý‘І8éÏ5nÂk™§‘̈Ö#;pMA©¼óO«Z»Û·úÇÝ%§·¹’×ìÒ-¨'ËfíHFÁø¬®`¶ g Ç­kçƒXþ 2·H¢’B%vŽÂ„yskSˆÚ)ÉoQO–ö[}R+_³.nD›ª¦¨í%Þžé¤#îc· 5.£*ÿjY¬v¸…8 d·:”‹w%µ¬+#Ä››scðzÍŒ¶Èæ3a’§µ`êÍ’Ìâ9b¼‹&Lüõ¿jd6ñyœI´núÐ"V Vk—úKhìYÙzaºÖÙÁ<ÖM>'mçjù!½§ê«t$Ybh%ˆ|èݪ¸Õç¹I$µ²i`Oâ-ßJ‰ãkëëÇ·'Ùü°ßÞj4›ø,ôÑÑòe‹!•ºŸ¥\MF6ÓÍÜ[ž4ûÈ£‘M¶× ºxV8åýçÛÀªzJy:mìò‘ÌÌÈ­Ç?†dFÒÑ”œŽãšš}n8.ä·he,‹»§ÞúTϪA¤wn_3î¦>b~•˜óF|T½6ù;sžôýk÷:„ò©RAô€±u5hŒéÑË?ÝóÖsÞ$–)ííâ•çiM¦·a ° s– 3@ s:ÛÀò; ½ë#B·†ïNó®"Wy$,KzÒÔcŽK„ŠvÏÒ±mL‘xP´ µáš`m‹Ës(‰f]Ç€*Wt7HÁWÔœV-ŸÛ4ûWk¶ 6¶Õ¨¤ñd¹±‚CˆOš‰©ÙÈûæ6n˜ÝS›ˆVaH¢CÑsÍcëFÖMJ¬&UùGjuò/öþžø*Üþuš&“bÈ¥‡Uš¤ Oí'[†v+´Ç»U¥U_ÂB˜I$w¨ì¡Hµ»õQ…!Oç@qjÒÎð$ª]>ðÍH·0´ÍʆAÕsȬ=:ÆÚM^û1.—hô©|SU÷ñÞ€6dv*®¬GP H#¨¬ˆ£U×'Ø»CB3ŠÎÓ´÷¹’òu2$Rñµ¨ =-5ÔUÎp1“J‡ŠfÖ_»Š~p9"–²|F€érIÈdåH8ÅjÓ%š8@2H¨ ÆI¬‹–øG£”;ù‹Á»ñPx†´ Y¾iõõ ‹9¥=*µªÙÃå+»Œç.Ù5b Ò“ŠÇñ ä¶ñÛÁìyßnïAV¢Ó£†D•$2ýï˜Ô ½šn8¬M7tzõì[ØÆÓãHú”)+€¸Ús÷xí@•bY/N .dU®84ÂÇJqECk'k‡«(56iŽH£‚è¬G÷…<«…J絸ç‹S´x®¤Q3íÛž:Hî´«ÈíO4¶Ö†Ø½%Ìé¬Åo¸y.…¶ãž+J²®üOmÖ&ʨ½Çœ6ζð,ÍÆâÒïLã}PÒç–ûJ#áØܿβ4ÛK‹¨gV¾™JÈpTÐSAúÖœÑè\ÊwÊ„¨'¿jm¼·Í´¨³»»nrøÛƒé@Xß%F3ŽikœñSɨY"\2 á>µ~a}of‘Å*Ë6ïšFãÖ€5(aòœu¬m.úi5+‹G˜O(`õ³@ PBŒÓê)ƶ×ÇÖV‰{uyor&uÞµ[mlbŠÅ†úæëIºpê'‰™CcŽ)º ÞýŽ9®fF·*O?xPí€Ú̳DÓ۸’1%¿µ©ÞÝG¤­ÔQö†uaÐP§JM«éYšt÷× åòü—$¹¨b¾½Ô%›ìB8≶†~wÚ¤ÅdX]ÝÞÛÝÇ9X嶆NÕ‡usu§Ü¦%ÑŠ«‘@”gÒ¹á¬O‰çÈá¦y )Å6Úòú;ÛuVžh\þóÌhX,t{A¤Å š‚ëÎïö`¾n>\ôÍ&žn~Ê¿lÛçwÛTõƸŠÁå¶›ËdäñÔSe’ëþõ•%ÄÞPbÆ€5¨Ç5ÉÊÚ‹èñÞ›²¡í£©®’ÂfžÎ[« &“1ÀªE.ÿ´C¬‹ö]¿w¾jë+#:ø ’vxü½Á{ @HáíNΠ…Ü=æªÍ«ÞÅæ03§(7J&Ô­mîÒÞY]†yè)oÖ“ö<‹³vF;Ó~o@  0?ZD9æ‡`ˆÌzsL:ÖIø•”ìò‚1Ú~õ&ŸÖa’æåŸ-'ɵˆÚn «…ÈÍ**¨ùF)¯o ¹ãF#¹\Ó‹¨ žÙ¥ÝÇÙ ŠhöHŠëèGØm ·$Ã&î»F)K±`¸ëMD¸ûc1‘M¾ÞƒHΛfdó ´{³œâ§–æM’ªºžÌ2)ç§Z‚ñnÜ‹FE—=_¥2 6ÎÞO2Q[Ö­ö¦¢°EÜFìsïOǵ0 »¶0˜™ÙõÚqšŠÓOŠÖÜÂ…š3Æ×9Å[s´f™¿žTë@ðèvL²&ðî ¸íÍ\º´†ò.dܿʬ•ž÷ÒǪEjÑ/—*’¯»Ò€(Þ[-µÕŠ¥|ËÀfÈ¡{§Gzco1ã’?ºèpE>çN·º‘%•X²}ߘŒU ®=(94…Kä»ûDÏ"¿1ëJš‘{%È™ØË÷”ã¡Öšÿv€)&åß5Ô3:y„o^ ÒÞi‰ur—"Y"•2‡µ^_º)q@°i­m<· <’HëŒHx¨ô»Ë[‰žg‰–fÜÛsÁ­b)8ÙS|N •ÜÏ¥`ø~9íµ «c7 s»°5­¨]Çm««1íU^¦›¦˜öxŒK¸†V\ÐÚ§©Z}ºÊH/Þ¬3ØÇ4ü€¹4ˆÚmü–e’x¶€Ú½…XÔl.. ¶1º,Ð0nzÑC‘œ`SúP!´óü•ûVÏ3¾Î•1lu¢˜~ÿ=(ST°R·ØNÉ”qØÓlãÔª]4,‹üKÔÕп95&(‹.›y«%ݤ‘âP+ƒÅ>ÞÊîµÈÍÉ7LqÍkÒP1ll.íô‰-[`‘³´çÖ’[;ÆÑšG“IÝÅmž(År½’4VÇ •@8«Wk¨×ÙüÁçc;jqƒ@ž#æX´xÞ&ÝSËgq}4t8á;¶«gq¦jÖW׳Æ"¢`êXœ“Z‰|¥ó¶‡ï·¥f]ÁtúżñƦÔ©ù±Ö¢»³»mJIÑ#š7MŠýÊÛÅ/•¤CuohÐO&ß¹ƒÖ¢°²»²ŽdÄLÎK)ÏzÙÀ5óÁnËçJ‰ž›Ž( ”!ÒÝ´‡³¹*Y³†ZŽÂ=Vß˶‘bòcãÌÏ8­•ee ‡ ÷´ÌbÖy'´¹·A#@ÛŠg¦j°Ý]Ejé 8lÉìf¶qíAÀiowm¬<¢Ñ)€  ß,1MÞ¾´¼`æ€w çl>צOsØä•]Ë+ èƒÐÒã½`éVóÿf^E$ ÊXÞõ6½ôï±Ío$E©fÕšx ]ÒȨ¾¬qNR¬¹Sz@\ÀÓM֘ͭUÜJH½ [×äs§4Á$(ÇÊ:V¶ÚnáÓ4ÀÎÑ ¶™RDñ2.Òc5SOó4™¦¶š)|n‹ŸÎ·‡JŠF!‚ïÀè)™£âAzÁJï˜õÕ->=FÆ)íÅ pÌÄ6ì ÐÑcš4›ÏˆÆ^Bã'Ö´YÕÀnàdÐ4šMÍÆäI•4RLŸ½Zz}Æ£#ÇŪĊ>g-Öµ1AP 1Lv\â¢ûThy‹æã;;âu˜..m uS¿‚Xô¨åŠäh¿gò³/—³ Õ¦Ì3Š\qLf#Z]­ ‡÷»vãuiéÑ<60Å"€è  XȵÜ%ü‰Ê6;P†±â²»:Á¼F©·fç´i‡ï{Ò&K;É5ˆî‡–#EÛÔäŠ[ËK¹µ8'O,ELõ>µ«ÖŽ´—¥}¦u¹‚O.`1Ó ýj;]‹Ãww/7ð〵¯Iס¢àjQE% ¥ïŠB~lR£ÚŒfŠ@(ëEƒH(í@w£4†!9¦ÒÒƒIfƒžÔ´ G~é§v¥ÇžÔPhéÒŠ;ÒÑÚ“ë@ ÖŠAK@ IE%/Z)3Jh¢Š3Åv¢“õ ¥¤¥ ¦õ¥4´8£½w ¥&ii2s@ Xž( XÆF y¢¶ûU;6ÒæO6x··¹4G]\éðJ2Dr#zU{ÝFÚãPÓÌRUsŸlÖêª*m£È‹ ùiÇ#Šc9­zú9cšÖÝGÊÀÈ{çÚ¯éWZpòc·Á¸uù¸Éw5¨,íüÆ—ÉMì0ÍŽ´Ë{ [gi Q›©—&¹ý[÷zõœ³ÿ©Æ=3[ýª)àŠâ3ñ«©õ  mx«Mcä‘ö4mÛ×ozšHѼD•[u¹ÏçWmôë[yã‹æÆœS$Òí×Ú™¤áÍPñh¦Å|½ÉætUU"SdíòÉæ¨]½jÝíœ7±(œåH8ÅØB²$¯ºGA….ÙÅU¹HƹhøÃ²8úÔðKâŽH•·Ã¹‰ïZa—‹vZO1>ïÍÀ¦^i«up“¤ÒC* »“¸ emb8R"]³¶"±Ä=}k/Jµ¹Ô,â‘¥ ±¿ßÏÍÚµït—»ºŽe¹hö¦ÆÀû«Eáà í[Ù¹91ŽôÀÜP1Q_D³ZH’ ·’§¦UTW‘É-»G*;q¸ŒÒ…¤LÖ¾–TÎT±Ô¶v—7ÖóÂ"VÈs.ã¸úŠ¿§iidö³ºËg\uëL²Òf´p©xÿgVÈ֘ʺհ}^À–uó V*ÔŸaX5•¶Ži|©a,˼æ´îì^æîÞu—or¯Z_°Éýª/ ‹µS`]´® $˜uK»o1Ú5hcœTºt—+¬^C4æTE}³S[ØÍ«5Û22ʸÚ;Smm.ãÕf¹‘còå\­ÈÇJA`%ÕyæšD]åcTlmÅ;WûM®™[–¬0þ.iÉg{§Í'ؼ¹!îÛ!ÆÓRj6wW–1ŘüÍÁ˜úcÒ€$ÕZxôÇ– <¹wg­A¥5ôñAs%´EyM½}ê}KíMxãƒÍ’EÚUOJCK˜ì ˜ E'­V†â÷Si¥‚aQ¾Ø×nwcÖ—V½»¶ŽÐïTg`®»r °Ýé2Kvææ ²•8+N× º¹ÓaòâUp̫ڀ&Ônî-%µò™Lr¸FR¼ýh½ñ9Óøìÿʳ¯¦¼¼{LXJ‚9¹}$«Ù²Á)H³¹‚ñÍ0$¹½žmGì6D!QºIÎÚ`½¸²Ô¢µ»e–9¾ä€cŸzmսͮª/í£2Æë¶Di ƧªÛÎÐ46ðr7ðXÐèÅQÕ²iáEr¤d7¥^¨®bY­ä‡ ¤Rœ÷s¥¥¼‘,nò•g×Ò™u¨:Þ­¬n‰„ÜîFqU4(îü«”Äv„ªüFx’Øë?mXšheM®’´ ·e¨´Ö÷ ˼ÂÄeïSmµu»ypKµÛ±Âýjx/KVšXÌ þߪ~š7²dW]âF%TÔ¯Pë«+Ÿ%~Q·«V©Ôá‹j0c)]ådTîeQâ[dÜ¿êçQ_^·Ï”Í ¡—E ›K*ËïNðäÑ=bV_1Y·/qÍ0,iú—ÛVà,, m*OSBj±µŒ—/ ‰Š²õ´©o}itZH¦;b7­©ÛJ±¬W ºO»ÇZ©¢ÂðYMm:‚ÉŸÄn… RiÖ5óžHô f¿¶¶+Ôè²ãš·æ ÌÜ6c;½«”Ôî,Ûí oùNC;7J½¨–Ãpì.ÔÝôï@¬&¿gs¦:£†c÷2§ô­m3+§[†ëå­PÕ~Ï&‚Ï¡@ƒf;V…¬Š–0»°U2MYü‡iˆ-:9HÃÆÁÔô Ñ´u 帆<é3ýãMܬÆÙ^¹íYWmo&¤û縎>Sª*MMúZ×$cñ¦ÕÔ- îã;sžõ ø³šâçqçnÝçšÌÑ-àšóPâVU“€GJ·©¢.©§ÛÈü1H ‹¸­ö¬­ó7ÝQÉ?…4_@ð<¨ÙýáŽGáX÷˜>%E’Fˆ°Œ hÅi ºÜI—g}Íš¯a®A/–•òvñÚ¤¶¹±ºÔ\Ä™¸pX®8ªþT:{—y‘‰õ£O(Úõû¼"ŠO.­mòFVGòÏÎʹ ZhÁÕYz0Ír·m§ûuœ»–IvÉ w溤`QxÇ(b#¸™-ây$ûª2xªVWö²ZMqkmRw\5vb¢6Ü@ïXš ¦Ý(#‰¥!š–úŒwFéöŒü¤sÅg\ë‘E/šGŒ £¡ªÚmõ¼: ˆó¨ùIæŸeqgŠm­¼aÇ÷›Ò€¼š£a_³HË:î]¸ù~µ©«Íg{ @__aYÚ]ÒØ^"HCGq÷9ÉOAô«Ú³¤Z­„’¨ Ç   SêF x :SµbïšM+Rkך7‹ÊxŽg5SWÔ<©­Ñ_dRrÒœj£ Þ$wÓÂÂIgùXÔÑmê¾”u¢“ùÒþ*A÷‰¥ïIŠ@ 1Í ëHaÞŠ)3@ Fi;Òãˆi{RRÒ˜zÓÚ˜ikô½¤íKZ-%/n´P"—ëIÛŠ@¥túS{QFsE!£ð¢–€Þ”Qß4¢€ŠZJRPý(t :P=è4œâ€Ö“¥-'JZ(&ŽŸZJ¥«Ü5®›4±à8UÓX~*Š6°ó[võ8\?`2ÏKûM½­×Ú%I°›vwVîp9üëåJi.®êsðØXÕÿãîÌLOÙKþ™íšj««taJzõ¬->dÖîýÌj6ãî†ïLû;?ˆ®bóåñî8=(¡\+MíF¡HÓ%¹Ê–<ôéO²·–þÈ]Ks*Í'Ì»}(µÆsMþ,V5­õÅÖpÛ‚\C¹K}(ÒMíÔP]Ip6 ¦:ûҰ͇PÑXVË&¡—ˆ›ål ¯Ze½íåΉq(›DÇ ·¨Ät8ô¢¹Ù/58t¸oL±•Âå6òsSI{iujÓ´m ÃmØ«ÊÑ`7J?2O4¬B©' æ¬+këýXÍ%£Ç (Ø]ËÕbÇPžâ …xÀ»·Ê•ìÔÀÖ4Ö?.qœv¬; _P¼ ÂÑJ 6ÈCt«CSšæîh,¢VpÎíŸJ}†¦·×EåAPX[ ¼ß"?3®qV¹ªó‹ƒ4FU@~pGQíV»PSB“¡ŽUܧ¨¦[ÙÁla‰P7\µ69 š@S:MŽæo³G–ëòÓ¾Ãm°GäG±z.Úšã"Á íê+Ã×%«yò³Èd n¦3Wìvù äG8;Gù"ŽP¢¸ÞüñMÇ»fõÝéš@ØQH^€Ž”,1+™5 ýìsN,wQ¥Ä31XäF=Àj—¦`ƒšw~”@'zNô½ è))OZ) )(éI@ Fi= ){Ò Å ¦{Tg¯LÒå¥Z9­ ñE—œš?•. %.(¢ŠJZ)3ϵRÑžhE€óïE uQ@ë@-'Š)(ÍèéIŠsE´QŠ*†©`úŒ"!7–ŸÅòç5Š ¦cénöpÛ†òã çhÉÇJƒRó¦Ôa·µ¹òÝT³ƒ÷kdsíU.ôè.äY2ȽN !” ¸º²¼‚Ú飓ÏÎÒ‹ŒT¿auV½Gµ“fÜv«iðÃ/˜7¼;dеL ë; cžíç(ËqÔ-E•ýŒR[ÛÔ¼b c-–“$¯,™ÜsŒ“ÞŸ¡Åsoj¶÷ya »;«S¶)ZC0~Í}gtð@’Çprìb“N´¾M6ò)!TiØ3ÜÖójr}Úb0/-îÿ° ·H H6î\ôÅ;XLl¼»iËuvÀéíZ³ÞÚÛ¾Ù§еL0FG9¤;‚ôb™).­L®3N|ãQ °èA4ç¬%¹ÑL¶Ó[I*3nFŒf¬é­$&öúî7ŒJs·âµü¦ÞµHÌr>”'r™‰áy†Éà*êL…×+Æ)ÐÈÚF£t³A'‘;nWAº·€ £É0´«ØåÕï0ަR î\tû •µ»âO\gÚ¶‚Œ“õ¦É*x vÆâ|Ms2È»v`g¿J“MÛ=æp¦¶­ª©+`‘ޤ··ŽÄh©ÇaL.sÚt–Úy‚4d‚šµâ Óá?wç]ŸJÙkx÷4jO©Éí`¸M¸^€Ò ™Zº!“MBªs(¥½U_iì U5¦öVòyeâÅ÷=ª9´Ëi®y™äÔËliÞ’_º=(r»:ó@~'û%ýw.?:‹R ømAb¨éZ·Ñ][ùS®å5Ÿÿõ¯—°É3r>~”» o§Û»¼:j“^g6öшä•Uþ•bïJK¸â‰¦•R>€µfkT¸·òeË-eëv°-œ%#Ee‘UH2j¢¬Ú|…~윟j“U·û:Z¯#©F«GQ°ŽþßËv+ŽC¢šJûoö®šÁFæ-ó{b«X‰.õ-@<ª’Û†]ß-\EO´C;ÜLïMƤ½Ñ`º›ÏV’OVŒã4&—fl-ÌF_4n$J¿Uí-RÎÝbqQÝŽI«‰pqXZVÔ Íq¾5C¶ÎsøVÐQ¸“Ö±ÛI¹]J[›k…U—†Ü¹#é@Ð}¾EðëN lÀïŽÔŸÙ°K¢nrÏ!Ìó7sžµ=®šñXÉkq"ȸÅW‹I¿ŽÕíþÚ¢2¸Û¶˜ôA&Ûýʽ֩iVÓÚZ¬3º¾Þ¨íW© ‘L®Ñ2ÄÛŽÒ±líî¬õ¥‹íROFZ]ÝnI¸«yx Ž õ¬8ôíLLTÞ&ÖmÎÀ|ÔÆoPN)Ž´Œ2sHÎrþ›Nk/ìdÑÕTà‚ÀNkBàJð:Á·Ì#7J§£ØÜiöÏ­Œ–]¹ i¯#ÙKçËæ:³.ï¥SÑí]5Y.e·6Ð:jý…¼ðÇ2Êņßz­aý³ÁåÇ&ùgwcë@ɬ®%º±™ñ4e‘™}}k?BKËËq#Þ8JF1ßZ™-o-¬æXнĬI à ›AŠæÖ7†âƒ;ƒÎhÝNêúÞ)¦SqÄÃh<ïi×W×sE(ÿv\¾åƵU¼¶¿¼¹º…àÌmÄR1ájM,êèÐÛIG \3úŠ`onÅ`g4qHF¾÷ÝÛ4%G ·ÐÓd7ºeÜ2MsçÁ+mˤÓüK»e>ø˜m'¦jkˆ'¿{uš!#o›;±éLdZ½Åä:•¢[ÊMòí>µ%ÅÕΗdLò,ó;íŒT¼W’ê6²Áj]-Ûvwš­j¶’ߨ#F»'BU½}(;ƒ¨Y[}©§ù¤Œ®=ªnîi4ëyí¥ò㑆ìuæqs{}eöd³t‘Æ×fû£Ö—S±’=`O0ÂÊHÔ ž[ÉôÝ6Ineq÷6ŒU¶^ hüÙƒ‘½LxP=IwjúKª£¤ŸÂcšm…Þ Dp=ŽÅ^FnÔ·u}kymäH¾TŒo½J·z¾§o ËDñÏœmw±Ì÷Ö¾\énf5ï.«fɆ8‰ÜØõ¤óÝ\Oª+wª&ç“?J§ rÇâlNþc¾VéÅKs ÕŽ¦×–Йã•BÈ ò*8d¸“]YÞÒDVo=¨}ï']]-J¨…°nõCS–ûûjÖyv# ëšµ;H5ÈXDæ1RÀq“Uõ4:¥­ÐŠIc@ÊÛ8 dšÅíÝ’ÛÚ…ñBÛ¾R¾••ª´òjV¤Ò-»eˆ^¿JÝFó#VÚË‘÷OQHn¤sÁ>”)Î2¤P^‹ƒ=óòîåW?¢´¾•¢mHg¶n%ŠVܾƵñòÐÆd]“]µ{yOŸtȤծ®àÔ-#‚E )Æ=én­/fÕ¡Db(óMÕ-îfÔmeŠéÉ;¨ÐÜÞZêñÛ\N³G*ä|¸Åmµ‰4Wrk0N-¿s˶ÇZŽõl=«•Òà†[ywo¼J$WSt²4."Û¿néY:mͽ¼ñ»ÆÎÿu½(WžúUðü.¯ó¹Ù¼v榽Ó`‹Ji"h—p—<’*Ì:Jÿe-”Í?‰}sUÛH¼’m-Ø6àö_˜J§5ËÞ¦›Ò0Y†dÁûÕ«m¤Û[Ü-Ä`£(Æâ«ê::Ü$K1´_q‡j’ÃN»Žt–îí¤Ù÷Tt¤3QI§P8£½õ QÞ’zÑÆhïGz“½ /Z@‚éEҵ)ëHÓÒÖ›H ””œÓ…h@ :šLP(XàqLVÊŽ)ôÜRii)i€RKH4¸Å%.3H:ÓU"’î;Dû(b aöõÅ0Âú寞ÒèG»ËœcÚ¤·¿šMR{9#P#PÁ¬½4É«›9Q^=™o_SS<æÇ_šI’C±¨VUÍ4c¾yí!¾€}ê§£êW— ™­Ç—¸þð˜íŠn“2Ky~Ád]푸u§hv²Xå¼à_#iâ€-Q6<‘Æï 4€ŒSoµˆ,ÚáœMÈ+éY\––°Ii©¨£¢¬ë ºÒÕ6„Âûq@¢ñ¤’22ÊŒ@eåªÕŽ©o|]a,>ò²àÖ|‚6ñ4xÆD<ÑfÊÓ׃ޒ;XOˆ§]‹´B§n89¦3ZÞâ+˜üÈ$W_QL´Š’i!˜É½²À¶vÖv Eq¨@ŸqeàU{/ô[PÁœ¬Œô¤麀>Ã,{³Œn˨|Éao=£ØÙÚ§ïýk?JÓífÒaÞ¡ËüìÝ÷}h½·_íë&îÚÄŒúP#\0ìŒ{W=5¢Üø‚HŒ’"´9p§¯4º„m ¶d2ºDçæmß6)РƒÒ¨  ÆDš]†2¬…²½gxv5’Æär#c'µ 55I&ŠÊYmÙUÔnù¹â¥³‘¥µ†GûÌ€šÇÓ¤yt ƒ#–+¼ej–úñìô[v·ûòE>™µÓ¡£¥`ßÙKg§›˜n&3Æ71g$7¯§¦ÝËga‚ëÈ E¾¢«K(Šæ8‚d¸«¤£8$u¬6âo2õ/'>t }Ö€7Ç¥/½` ¹ì4cu3´“LFÐݳҥ¶¹º0¨YäGÿXdh_¥±³škȨŒì~U&²o.ï#ÕÒÚÉ#%CzÒêOvšÞ`C6Ó»iãÔ¤Ú£Á8†7¶-јîÇ­l`*íôéTôÆ1é0RÄG£½S›P¼…§‰1&rƒï%m&1L¸Ã Ȩ\¨ÈQÔÖ¯q}ZyY r}êü÷öº\“:Äó¯81@X¹er×V«+DГÕZ¬U]>áîlaš@:äV{P!iUBŒVUæ­$7o¿˜Qw;€*Iµ–/-!ó7mcŽ;Ð;¶È ÅJ9®hë·3X}¡¬7ÄÌÛ¸xjòF±HöŒ¶Ï€$ÝÓ>ÔÂÅKTM=ãY"‘üÀTqW·d+Ä|ÚÛ²®ÿß/9Õ Æ—vÏ ¿ &A  :aë9ª×Z‚[Ê¢4³8Ê¢úTQj£íbÖê&‚V&âjB4›ëNÅ  ×7QZíÝ’îpª¼“Eâ^#2£¦ÖÚC®+&;¡uâm¸m±D@Ü;ÖŠß¡ÔM–ÆWÛ»=ˆ eÚ¥V[ØÚñípÞb®ï¨ª‘kvòùØŽ\ÄÛvíäÐ#I—p¥M½ECÜW6þl'r÷¬ûi.g(`‘rûU€Èü})Œ×Å-!=¨Î!;‡#VQñŽçPdb¿ÝZ¹i}ä^l•sÔP=^ÆæóÊy{c`ÿ5_ŽÍë†î3UΩçç1îÆý¿/çN¾¾‚ÉRIÛj±Àâ–‡^œÒã5R JÚâäÁ ›¤8®/½ÇG5åÜVp´³¶Ô꽆«m¨(ò_çÆJž¢Ddp­òÒ•*8¦ÉuM¶I‘Xö-DóÇ ,„Q’h˜,¸)f©ØjV·q~êA‘œ©ëS[ÞÛ\«´3+ª}ì”6)j½·4ÞjykÕ·p*1©YíVûL`?ÝËu  GÜTiò»g½7íyž_š›ÿ»º¤Ù– úPñžj ~sOïŠFP[vhÝj9dHTÉ#QÔ“PË©ÚBíI–_½´Š&x®ìdd+$l§Þ€&ŠXæA$L®§¸©:Ö‡} ®™Ë¿©%‚œ}k^{¸’Í®©@¹€)^دږê ÖÃn<0ô5¢½+D.´Æ–èó\±-V›U·qv‰6ü´†[ò¿Ú5(\U+ÝNÞÁc3îÃô RC«A7å‡+î'oQíLEµM®Í’}³Òž=j•¾§Å›Ý"?–™ê94á©Ãö%º`È÷AšC-ÔÆjkèªèÑŸ™X`Õ× kçƒdŸ)Æà¹æ€4d¹Š9£‰‰ß'Ý©ª„Ú„i¨EjbbïѱÀ¨æÔ'’êH,¡Y/¾ÌاÃQY–±žéí'„Ã2 ã<ÒÎM)hïGzAÁ¤=iqÍ'z;Òw ži!ŠhÍž´dPhïAéHaÚŠJJ@›ŠSIô¤2Ù QEhfé RŠ:šqMfÚ>´ún*ôŽp3O^”(£ `RŠAIëN¤â€ œq@K@è¾´QG½!¦Gz©ÌÓ¾”œÒõ Š:Ò^hö¤ïK@ Cr1GÓ­Auyof Üʱîèz˜ VçµU]FÎFEYãÜã*7rji'†&T’EFº ë@ )p3œb˜fŒ8‹zùvçšiž-ÅL©¸uéLxbvÜȬGBEA §÷‘«‘Ý—4¢XönÞ¸õÏì‚2Ô´·óüãùŸÞÇ4Øl-¡¸iÒ0%n­žµdRâ€ô5‘-Ä-î ܧ¤cMË&X`ç lôû{e·RªÝFìÔØöbs7•ógv8ÏÒ¯qU/®ÚØF¨›ÞFÚ£8 ¹±‚âT•Ôù‘•#Øì"Žå®A5†î¨í¯žK©-g"†Êô ÕÝÃ(µ½‚[4­ɺ_¼Xæ™c¥­Ÿœ<וf9`ÕswÖÛq@Ðèÿgr°]Ì“Ÿ(*y´ö’þ+³91…LUÀÙdPci÷‡Tû`ž1òíÛ·øj]KO{Ö‰£q±6å|f´£x .S³Žø1ûl‘Æ ëT"Ó/­ždµºa‘‹Ë’3[E©7 Æ·Óï-t™íG–îùÆ=ês§½Ö’–· $Š£OB:VžáÔQ¸P$öº­Í§Øä0ªôiCrGÒµìíÖÖÖ8¢.*MÔ»‡­)5‡©i2ÜjQÍ˃lÇwjÛÈÇZMàûÐ-VÃí¶"!YH+øTvj È—ÈŠ£ û¹o´KPÅ`_5×öôWÙÊñ»r\ÕýmØé’"ÆîÒ®Ðf´)8Ï4´\ ˜çû¬ºÜ${@eÁϵPÛ3Gk9ó²<“]0£Ìmb96YºDÒ¤‚ŒœTÚ•Á—I“Ë‚RÒ©P»yZÒQÅ.( ”´“:Qª…!†9«¦Œ Q×¶(ËÜÝy÷÷\¼‘*ŒF‘¯/V¬nxmÀݺ8ʰÇzÜØ¤îÚ»½hڸƠw9ÈJ¯„Y[ •#ïš³},Qè)<€ ÚÚ¸ä R2£pÊí@ôжvÒQeVÃ;.Ÿ¬Ç<ëû©#ÙævSPêäj•œ6„;#og^Ãë[òF’¦ÙYOb)°ÛÅÄQ*º¸§p%^Py¤#ŸIQ¼Vÿ0â=½{ÓîfŠ×Ä‘Ë;lV‡JÔ[d˜Ì°F$';¶óOšÞñçDŽ›—4ÆcÚÝÃqâZ9”C€Gzv,O©0#`9ÏjÔ[H#s"BŠÇø‚óBÙÛ)}F»Æ ŒÐ @ñ]méç¶)4TÅp .ÿ=¾_Æ´a¶ŠÜ†%@zíű¶IüõŸÞ€,ñA⓵/jB0¬„qø‚ñ>@YTLEΡª rv˜ú/÷©!Ž üGvŽ@AÏz݆Ú(¬h«žN;Óƒ¦¥¥Ö–‘Ï3.ߕɊ“ÄÊ«¤ÁÚËŠÓ:e›Kæýž=ùÎìw¦_iö×Ûé¼/Nh@Id±4ɦvEYªÖVPY!KtÚ¤äóViG\T:UÎàÔ$dwªzjˆ<>³Cù¾I É­yâIâh¤\£ŒUltè¬U–7‘ÿ 6@  z4\iBI•dyr\·&¡ÒX´…³1’˜ªÏ•$šKÂïö+™!ŠCó çÚ¯éö1ÙÛyH½~ó­EÆVÐR?ì¨X(É'õ_A ·š’€1æÖ•¥ŒVe¼¦}­ü%²U}ݯá$–6s–Øí"ŽK L8RžcíUÒÆÜxef1+HWpnùÍj&‰VÓA²7Þ;¹§c§ØÏϗ˯•1™Ú­šA¥A&Ð&B¿?zèbÿV¹ô¬û½+íV©o%Ä›Põî~µ¡ì‰PœíÍ c…Gw¸[Éåýý§/zCׄsþhÚÊ]Ø3o>fî´škµêK ýÀû¾™«óh¶rLePñ3}ï-Šî«6öpZÃäÂPõ´À££´cFÌeÚnÏÔÔV!±. \Ç—1†ÃÚ­¦“gvEÆs·qÁü*ÍÅ´w¦ÊÆF^(‹d¼.Ë,Uº}jÑ&ó„$þö(?Ä…MUãï®ÚÓ·òä·R›J²ŽEGs§[^kˆ÷•éÍOmVñˆá@Š;P7’ « p%|£z)ëZZ­ÄVqÛBcF,ÁSE÷­kºœÝÞÔ—6p^·«…äf€2t©Cjwªó#³mÁ^‡éKdªšåèà|«ZQéöJ$ŠG˜ö05מÑ7zÊ7ó*k6K¹AÃgñ¨­îMÔ.–ìY›rÉØÖÁ‚)yE-ýâ9§º+`2ƒõ G6êòîêþÍJ°b,:úÕ½)uµn½#ÊÁÈâ¶ÀÇÅ'zwí'z3Í.}i””´† üTwéG9½@Àô¤¥¦`ö w¢Í†”½¹¤÷¤OÒ–›@Ë€qš)Ò‚qT@´QڌӴÞ)MƒŽô´cš3H–›ži{ÐÒsKH:Ó 3Å:šÝžô´R€1IKL¢—¥% µ/µ”QAëGz é:Òš=è=)8&ƒÔ QÁ¬Ÿ„þʺ`FÓéÍktª:Ž— Êfy06«`h w·‚?ÛOå¨l`Øç9«Zò– Ýç­[—H†K8í™åòã醩/4øï-҆Õu<ƒEÆTÔ6®¯§ü£q-ó~]ôøfñë"e ä{ÔçAS•5¶Ÿ-¨¹eŸsÌÛ·èhÑ´étø¤I%WÞÛ†)£Tõ…ìÙš9Z6UÜ õ«¤U=R î,d† »Ÿå;½(… ݶˆ—Ÿl‘Y:/lg½X›P–X­­a‘VY›:vúT‚Âõ4Af3 n»¸ÆsK6“$ö°ÉXnâ ûqLbj >±\Ãs$‘† "Ès‘ëR^³ËªX6á䜲×8ïL¹³Ô5?&+¥HaS™6¶wSïÒáu+GŽÙ¤†ÕqHá’ñµùG—¨a»µM¬\ÝAuj°:ˆåm¤{ÒGçÁ­Ï#[»E0P®½©šÊÝÉwlÐZ³Ç îÈ#š¹ÞÚÚ;\q.ï”F:ÒZ_M&¡%¥Â e@௿jXžäXFð$‹–`_¼¨i³*kŒÂÚtIcKÖ/5+¸5Qiº8uÌg=~´·ZÕŒSÍn™öºîéTî¯#ÿ„Ž)0þ\JQˆSÖ®øŠ6›KÜŠÇk+aGj`Y¾Ô ’ÀÞVõ•‚dA5ZëZ6Ú—ÙM«7ËW’ßJÎÔõ[k¿±Ço–UfùzUɤCâh9ž´øµØäóPZOçGÿ,±Í[Óo¢¿Š##)ÁVê*•“«ëšƒ)]¡Tf€ÊÚ†£µfF?Þ L•–(ÚFRBŒœsRv¤#ä4„béºçÛ®6¶‘rÛTÀúÕùo¢YÚ%WvA—عÛõ¬ß 2¬wJÌ¡Ìíò÷ªÚiˆß_Åy)‰Ì„ýý¹ ×¹Ôííl–ç $MШ¨c×töhÓqûíàQ{ ´: ÉN÷œÕ-B(LJ­ví ”æšRRÊâçÈG;ûdu¥¹¾´¶œA3ív\þWSUŠm8¢ ‰@àvÅ3]Xþ×§¼€cÍÚÇÚ4û›)§"ÞrÌ[ŽöÞK‡·IšŸyk3UH£¿ÓÚ 1“(þô¦V±ÒA&‡y ŽÎ ,›óÉÇJ‰tÕŸHKÁ<‚ácܬŽÔ¬õäsÉnËm ŽCш§¦b|é*攎ˆã-@POZÀñ"8šÎXådc&Þ+KMÓ”’·Ÿ$‚NÎzPÒ¿íQ³¾êq¤4„fÜÝ»ê)elm»Ý±œÕrÚ9’³È$qÕ€ÆkÎ9Åù²yåçv1ÅXkÙnu ˜Qed„ ç֘͒§ÖŒu¬Äûcé3­Áh¥ÃmlóŽÕ“êDûoÛ¤BzŒÐ:ÓmV_4@žfs¸ µXsMu÷Í9ÚÛCÅÛšˆ¤º†Ñn-§1„#rÖ5œk ëûB¾m2Œ#+Æ=ª{ÍEžî"Þ«${ÉEÉü)°§9 f³tÉ®dyÒt“bŸÝ´‹‚k69õI¯¯,ÒåC§!±Óé@nÏ“æ¨ìVt´Œ]°i±óSÒ¿1ãŠ^j뤱´’w:zÖ:kùQNYyæ%S•Þ€7ö·jL5dk7×ö{&·U0¼HÎÚ}­íÝåïú;Æö€ ÏŽþ‚€59Í"–&Ÿõ þ”û4ƒueêz¿Ùncµh‘ú³tQNÓu $¹–"UEÜ$UÆ}¨O&ŽsX·½å¸ûCÀ‰™³k}ãï[€‚ J…ÃçåÅ63RgšÌ×>Ж/-¼ÞS'Ì}Å_;³K’1šçÕuOìÔ¿[ÍÌw–W‚*ãÜÜÞ[ZÉRA™ºÐ3MƒgH7÷¬ý"æ{«k…’]æ7(¯Š¥¦Bí§Sy*nxÎênïÚB³Ç =éG˜O;Esú•»Í¯['žêI‡cR¸šÕml¢’G’C†|üÄP3s½¬=:=B-K-¢Õ†•÷kv &±¦gÔ59-Ù"‰2ÅN &µ¤«q‘ùW?£ÆãSÔU¥f`o¦€ÔÓ-$²·1Ë;MÎA=ªxo-æfXåV*ÛO=ë3J/5•ÒÍ3È|Æ\çš§áÍ: U®Ÿw™¤/4X–“½.p3Q$ÑË»Ëub:àô¤€úÓºšhéŠ^(=i;ÐzÒš@!¤î(4{ÐíIA£éHaÞ“”§ñ£¥~vÍ4ÿ:\Ó$Š@+éþßuŠ®± uÚ95Qõˈ.+ˆ «¹>nŸZÛÇ}*ž™y-ä òÀb!°=zŠº:u¤cÞ”VVµªK¦ylyˆÝ[wCQ'ˆ?{Ëi,k(ùY»Ó°X¤^¬ûMX\]5´I˜ÜŽ¢6«¼­W’E™Qs´zÐþÔ™ªÒj6ñÙ ¶cäžA– ë{¾\™,»€ö  i ˆ!e z.k.ß_¶¸¹hpÈwmRGSRK-”š¤k×h0< Ò£h©:óŠPß6Ú]£ÐSŠJ‚KÛhŸË’xÕý UMvðÚéÌÑ6ÈU"ü¨ó‹Ÿ¥'“>òŠ\wÅbÌ‹c¨X˜]—Íâ@ÍÕº¤0È9 deˆeEþ÷hŠÞNbŸî®)û¹Æ(Ü1Ï¥ëHûÙâŒäP cl³ùë ?½Žj;2ÎêMóÛ£¿©bâd·åº‹“YÍsµ•Âî.Ð9\ô  ÒZA-¸âS轩§Ú¼KB¦4û«éVsI¼P2´†IGL²co=++ÄY«€s0>•¶9¬­}V;QsåDæ6|P¸4ûxdYUIp0›8Ô˽*Þêq;™@1”lqS–d´Ýa˜&U=imd–kuyâò¤?ysœP(t+H^fÏš»XíR[iPÛN&Ý$²(Ú¬í¢¯ÓFsë@ð e\1ÔuXàN`¶;ä=‹vª£­6(cƒw–Š»ŽNS@4³NÍÀ FD\é«5óÜîÏvöô§]é 5÷Ú๒ ÚvŒäVžxæŒæ™ÖY³»šàܼ¦^»…gé0Ï$÷þMÇ—ûæ »søŠè…AÚOqÚ¨iši±–V "ÊÛ™Y{Ó’XÇg£\B¤¾Q™˜÷5KL²¹¸Ñ£‰.a‘yùyÒ¶/íÞêÙ¡I<­ÜŒñQivrXÛˆZq*¯ÝùqІÿL–]>;;VDUÇÞö§_ØÍy¥ýÙR^98­"p9ª «Dòª$r:»mùs@ [Iî´ç¶¿)–sV±±Ôí^8Zæ3mã˜JÙü)G¿J@cjúmåüÑ´RıÄw(aÎkVØL QrTÉܯJ—RSi¤ñKKÞVÖ÷­Iy-¸DeÙ÷³øÔ³ØÝA¨5åŽÂdxÞµŽ1šÊ¸ñœ.ËûÉN‘xÀ¶éq%„‰!O9”ôéYíax4±,iæciù¸ÅlA2O ËnG¤€Ç¼¶ºŸN··X†Wnÿ›¦)Þ!Sý‰7°ε±YšÜ7Vom·˜>f-ŒPic¾Ô4ø­ŒJŠào“vFÚ5+˜nmî¬T;D»JÔV†š.Ñ#¸‰Q‘BŒ6sV9À§a-ô‰#ÝÀ±uäšÈ³ûlÌ÷Oc.ÉxíÅt½éhJ\`ÒÒ“H ZÍ£ßiòCß?v²ôÛÛ»xb´“O‘¤O—v0¸úÖûÈŠ›™€QÔšŠ Ûk—+é#¡MfëW³.-aµ‘Õøv ÀÕSO–m7Pkh­æk6Ïäy*"'qUàf¤µ³‚Í ÁÅ=³šB2´@¦ûQÎ3çqD»?á(‹D'5}´«Ctn|¼HNr ÒK¤Ú½ÇÚ°›9ÜÓuJŠæ_. dAó*’*t§ëLÚÞn6/ÒÌhöÒj63þú0Ò1ÞÌ›š¬kÖ‹m¤Ú†ýä±² sWÃÐ ÚXfšç,¨ÜT÷úLwéI,бôU?­03u{hdÔ´õu9•¾˜Öõ´ÛD"‰pƒ¶sT.ôh4òù}Ù3Í_¶‹È…cÞÏ·ø˜äš@Ç)ÛœÖ&­O}žé¼ ?Ô&w7å[Ä Ç¼Ò&“S¶×6+´†\Ó@G¢¥i$›™7²€ÇµE â]u‘˜€íÎîjþ•§Mb’Ç$âXݲÜrj¾‘}j³CÔB$ò™<Ð-+Íá6w“Óqî7TڂϳOº*îP Žø¢].ñt?°ÆÑ»îç·Í>òÖþh,åHKd¦î ,jÉ?ö<Œgd–5ݺ>3U4îeŠÉnË©]¦2*î¡åΚbŽ(Ä’ ¬ºS4{[›{³\¬k´aJœÐ"…ååͶù¤ºüбħ#n{Õý/¢Íë€ZË:> ,Þ‘>Ù<ÀÛ¹zÒÔ⼺ÒD ùÒpÃw @É/f¸‹HÚ²‡HÃö* J{}€WÌ}¡›.{Ó®Vè袳–™—Ë!XqïC‹ˆôÛeÞfÜ,±pI¤út×JÆIcš ¤Š;ÕÉY–6hÆX´zšËЭ%·’æFŒÃ”Œö«÷Í:ÚHÖ¡L ewP"=.kÉ`c}Ç&îô«µ• ßɨZ³Ì H´ã¡­Z!¬½kXpHãO2y>êÖ©é\ïˆlg{«{ÈÌòˆÜ€s×4ÐǾ£©Ú¼+wE'`¹S÷jÅÖ¥5¾¥knˆ¦9¸ÝÞ©êw‰xúzF¬ ”1VÆ*=IÚûur°œ³( v5noÚF+WŒyr‚CçÒ£þÒo´Iœ ?—÷È8Ö}ܱêZ•¾Ã,h€ÁqÍ?Gž-=®-nßËpåƒ?…jØjQ_† ¬’!ÃFÝE\Ïi,o5»‹ÈAàmÜk¢ëHFv¹wöM:Cµ·2•”Ý(¤:$/&D{‰¤ñªé« —óªÏx¶¾†Pªÿ"®ÓÒ˜,õH§‘cÙ"3‚ɸ}áQjzÄVr‹wY70Îà8Ÿo*¶·jÆâ9”q·€¥K«*˭ئõSÎh ì5{{ÉZÞ¯Œ…qŒÓ®5AÃA/3 ÜÛqòÕfXLjá ÷„'ùÖl"Újõ59ÜŒÌE:+ èµ<Ø³× §±«­QÒã³HØÝ3uç“W©ÏÖo¥„“¹”…ÀïXºUÕ½®—åÝÃ#«’Ìve:ÜÖÂÿe\oþáÅa’ ³ 74˜êzsÒ˜7·ÐØi«:Æv`lUâ¦Ó5(¯Ðùaƒ(ƒ ÍÖþ)ÅÇuOéZöA~Í1ÂÅ ,ÒU}Bú->Ù§›;GaÞ‹+ȯ­–xÊÝj±Úª^ê6Ön‹rû7tâ­šÀñiÿB‹þ°PÄ·pA³Ì.ÿ»žõV÷Yµ±¹Ž˜î~§û¿Z©­•6Vx*z˜¦jQ$šõ€dR[9i¹Äw¬°¸dnOnœÓ#‰"Œ$jG@½)Øâz¤É>¥gd*ÌZEúU¨lôû{ãènßJ¡=´qøžÝ‘ye,ÞôÙ!òüC+CâbÉ_\Ó¡³RqŠ‚ù*6íÀû´ò#+w¤;háŽêât¹/»ï)l…«Þ[ÎŒðÊŽ«÷ˆ=+B…"¼Ô‘GÈn¥?ê¨×ÊÇš*va¯m–1™<±ÆìñP ZÉäTK˜É#ûÕ‘esiZ‡Ë•29 éU´û+il$/Íåd¶:yÍ+ÒÝ_ÛY¢µÄ¡t÷¨cÖ¬e˜D—Xô¬)™®|0u,ÑýÖ#Þ¬êV–¿Ø+(DIT«/\Ó[R†áUžcîÎCb¡ÔuHtÈ£2nrÜ+7S„˦éï"“.Puõ©¼Gÿ¶àùj¢€5 ¾†{o=[lcïÅ15Ky&HÎôó>ã2à5PñeÒÇ”>]Ãv=)ÐÃcs¬­rÌrÉßéHe‹íVÚÖq’áúã&Ÿ{ ô&H‰ÂœŒV6··ûrIJƒ“Î{ó]Q¤iò*®y8ÀGÞ[Ž•'DÉôæšsÚ›<‚+gw*©&Ši­Û8Y<°Û<Ì|¹¦ëZ£é°+EöcŒž‚±æ¸YôÔ’?&ÌÀˆÇ^½M_ñ+é±°!ȼJXþÖìén^ÞDd_ºÃ­Tѵ9/çg–'Þ+Båã—K›ìì®d §=«'Ãi£Iæ©r¿sºŠ}ŸûyžIbŠÎG–6Æßj·w©I†8`2M"îÚN6­fé·P zóç\I€¿í—T¿òõ¶w0ų%ÔrO¥GK¿:…±¦ÆV*ÃÞ­šæô{Óq¼o$èÅöãÞ§ÓõNâå#š×dÄÛH¥`7E:𴹿~hêhèi^)QE#®îüÐ0Ï Q@¤E&y⊣4J@ LÍ8ÓM!—x¢’–´3 ( ÐKŠ % Gz2( ÑNàSrsš^ôw¤¥ Žôw£½PMRÒqIšZN§9£4´Rrhç<Ñ@:ÑFhëL½-%-¬]G§“çl‘ˆÊ/Þ#5±\˪§Š™îBª²þí›§Jšy­-í!º±`¿8gïàŠÐºšÖk'óå_!¸f Tõè ]%Þ4O¾r~jÅÔÿزªF<½ÀßÖ–c’ÚÖÖ,Ê©BÍÖž÷VèÊ­2ÃåºÖmݯÛ<>ª.±«¯Ô ‚ÖHµylÆÅ"ß'ûÝ FëË`ou\ôɧäžÕÌë nÒ^0Y.&HÀÇðÅïZú6ã¥[o9;Z¼Jz6åH®vÁWOÖ. žFÚSte›ŒPõÂ<:Äá$+ò·¡ªºa¸¼w,Ѷïõ¬ï&_øGæ—ΗsfEùº´´Žtè±$ 94ÀºEdÜ\O{}%¤Æ%rÎrOAZä+DYXÔD½aÅl[Ç"Û"\?™ 3tÍL£h¬{Y§ÿ„†êÝåfˆF)íœS¬&Ÿí÷ð4­*ŃþÙíH Š;W;ö»»kûHäºÉ3‘$cTWD(ZúY`µyaUr£8cŽ*[™–ÞÞI[¢)jÅ ¨êSÎ%<Å8o~´Äié—ŸÚIq³nìäU¼sXÚ$ëkáô–NùÓaÖ™¥‡w”Ë3æ\úÒ·Y¶š›O-¤°ž1‘Îr)²_ÜÜjidˆ<¡™$“ùU=/í ¯Ý=Ò*Iåòô¦AG§j2]Ïu ƪÐ6܃֒ßTßkq=Ä~PŠ·9Î(NŠË‹Qº‘b—ìMäÈÃ7Ì©ùµ-·†Ú¼ÆEÜä¶Ð´…cFŠÎVŠM9îÑ‚d2/$už©ãF#Š@wn#¦hÿµ%gK«ª ]!gŠ#‡pGéWmæKˆhÎQÆEHEék.ó\µ²ºò'õÛÅ04±ÍVÔ-^êßËŽW‹'’¾•^-rÆ]ûe#`ÉÊÕ«KØ/Pµ¼›ÀàÒÍ>Î;(<˜‡©îM[ªrê¶óùrΪý1S\ÞAi™q Eõ45 úUxµ Yäòã™YöîÛß¾­iqpð$£zsü_J£©Ç4Úµ›G˜ál»cŠÙ¦wm懒8þû*ýM2[˜ ‹Ì–EHÿ¼MI´sÅE5¤yñ#ã¦åÍ(½¶`¤MÍ÷~n´á”Y¬mš×ìÆ!äÿv–ÎÊ $+n›Cuæ¬RŽ”SRÖ¬¯nn3ÑïU´ ,,ÊKÃ;nÛýßjÔÅ!é@<Õ[ë8¯`ò§]ÊMYA¦½fÂ=dQP‰ÞF^§¾Ò¢½ò™šHÞ/ºÊy«Â@[B-àXƒ³ãø˜äš”Ñͨ›.’²_‹³<¡Ç@œ4µ[ówçɼñŽ1J¾k?W¿–Â8Þ8|ÅfÚNzP2ú.Þ§4Ž «v±})PåAõ¢€3¬4¡e,²yÏ#KËf þÁ„O$‰4ѬŸyU°+b“é@‘i±iöW 1 ;Ž{U-M[«ä’I<¹>ô{¸5µun·P˜¤,õÚqM²±ŠÊ=îÛèÍœP2Ž»Ç£Lˆ¨Püj; &Ú[;ws#.ÐÛ | Ö•íŒ7ɲpÅG£bkk¤^\[¶û¶h¾¡`okç4aFÑÞ¤¸³Šê Âï^ÿZµI@ŠÑYA¿ÙÕ3êæ¡·Ñì­fób‹Ûž•.¢×)6h¯&îéPj·W6–i4A7ÃP1·Z¥Üæi|ÍçѪì­¼+gjŒ Õ]Vò{]?í"³ nÝéR—žm<<[Vf@W=3@‹8éHT2yµCgönŸje3^•=RM*ÉÔ[G‡ëÅNm¡hD&51Ž6‘ÅM‘š^ô†C ¼P¡Ž(ÕöQPÇeo ¬c…°ÁÀëVÍ0š˜%•´L-ãVQOhcg襇BEHNi‚Ä€)‰ q³2"©n¤´êhš2û®óü9§7Z(èhÏ™Á µ.)„î§Ò†ƒAëHM!Í(¢“¿µÖ–ŽôPRt¥¤íR[ïbŒã­8ÓO½-š3íKÚŠ³0íIœœÒâšwpGNôìšBM.(4 nsŽ)y ){ÒEÑÞ€ (4Sh¤ïK@)i ¦y  Rg=)i”¸¤§ ÐHÍ–“¦G¥õ ÒÇ4´”´T76°].ÙâWî*jÂ×Ä–÷V³G<«¾ER€ü´ÀÓû dû7”<’1·4ÄÓmRÕ­‘–zÆ­š­qöÏ´Cö/ÊÏï7u¤2[hÞŠ1…^'5^ËNOiž³JÛŽ{UÓƒÅ-2gÐÒY¦qq*,ÿ}zµ¥Ø½…·”ó´Øû¹ì=*ᣚ`¬­cH:Œ°HŒ¡ÃU­jAL wö²MbÖÖ쉸m;½)tØ%µµXfdbƒ¯¥[æš1»€yéXÚu­Ü:¥ÌòB©çûÝ+d x  ‹«;ØuSyf#‘dP¬®qŠ«¦ ·í2¨7ü­w®Š›Œ6iË‹ME¾É,vq©€ãnp[ë]23×Ì>>`)Û—~ÑÖ† œ{Ò ‘ÝB·V²BÿuÔ­bXÉ©XÃö'³i‚ð’)ùq]!—奦…¼óh“ÙÏ E'ÍŒŽ¹æ*ä¬pÚËc"̃ib¼c×5º)´€ç®&}Y–vFx.G;GCO°»ûF½,‚' $J#§Ö¶ö‚Ķ¥ òTS ÚìXê÷©,2þõ²¥W9¨íc{Í/QDGVyY”3]&(Æ;P]ޝ‘GI†Ç·¡¬¿2ÞÇ[»‚~îo™Y—"ºmŠvoZ4~ñ¾£4˜d³]&i UŠVÆFÝÆ¢}CÎÂ?½5¬"¬±#ªò*+[H¡,Ñ&ÍÝUzRÓ[OŽ) Ô¸™çvy®žÑb[xÖÛ>QíQý’ÞIÙÚÙÇñ«>ÊZçõ¥I5½=[æ9­þõ^k+Y¦Ë ´‹ÑZÏxWþ8ÎÐN=jK5Xu[СB0VÀõ«ÿeƒÏ󼱿ÿz› œ0É#¢á¤ûÜÓ œõÔ‘M§ÝImîÞPÙ¹'5­­"`À±ñõ hÖ½]¶C’7TÓiOj–îdòÓ°n´†E¤ÚÛýŠÚt…CùcæÇ5GD´€Þß1‰IŠoãîÖ½¤vQypîÛèÍœTiKã\E4‰½·2òµ1Ðù·š¥ò‘d!Ud\àT÷ö~^,3í–Sï´:óí6× o#pÅЧ¹ÓÚk³4òcøœòZÌK2Þ?C:'ïÎÒ<äš±©XEkœÑ³ 3ç“WdÒ¼ëµ2Œ‚n”]é’ÞyJ×,,»÷­;ª>è¥úR/ŠB9‰´Ô“Äf#$‚7yªå¼o¥ß=ºHÏ ÆdUc¤S/Vñ$>DÉêFsZ1X·Ú^âáÃÊË´Ð c3ô«eÔ­êí™ä‘ˆûÄmúSídy-ïlev&@py"–ÚÂþÉ¥KYbò‰U૚oÙ-f]ûæ—%ÜúÐw‡­6+xd“wÌJîùM%¤·wö²Nc#1ÊáU ½¤[][ÛýžàFb€Tòj¼:Œ­£Äm™·eº¨ xfþÇ _awïU}]gU°HÝw¨Q·¡ÇZ¹­ÚÞ]Ú,6Ê­“–,qQj67×Ö’"§Ÿn)»ƒ@Ö«2BâE’AüJ1š›µCh× n¦é$îäSÔ±8¤I“¨LuXì`,ƒnçd5=”—2És«*Æ?ÕÈã«jvI¨¥ýVe\2Ö¯ØKw4L÷1,DýÕÏó f+\]ØÜÍkuu+´‹û†æµV¨ô©âážb¤î«:k]Fé. ݪ¼ŸòÄ«ci­+5¼—Nho$ÛvîÎsL ÞŠe°G’bêù!Ojª—ŒÚÕ¬w‚à­ -.m-|‰àˆpÊÙÝYÖqÞ®µ-ÓÙº¤¼rÊjN÷«äÆ…ÞÊ{Rh÷Ò_A#I´”¦áÞ©ê1]6«òâ×o½éþŽâÜMÖÍÞ[qéô FßZÉñÍÝ¥˜šÕ•BŸœžµ­Yž @ú=ǰÍg½Þ¯ ª_3Bñm È8«ZÄË>Œ“)ùY‘‡çU#žâçEŽÖ;Y² ü8õ©5T{}"H£’WGʹé@Í+ÉçŠþ͘îqžËïPé·ÒÏuum1WhHÃ(ÆsT5;‹Ç[S ˜2 àý(Ñ–x5;€öoJE DŸÚ‹jÓZ*ÅÂåsÐZµ§Þ\Í5ŵÐE–,|ÉÐÕKtœx†iÞ l»CcŠ—LIÛV¼šH™" »¨ý&òæ{›È'eo%°¤ RCyw<¨¬‚Xª¶8ª‘½?V¼"ÒI–vܬ´š|·1G|dµ“tŒX?Jlº¬Úc],±þï9ylSæÔ5%±‹P//´xæ’Ð\¦ƒ-¿Ù%óNT uÏzKÕœh1Û%¼¾k(R6ôÅtJ'%ÁÔ6=)õSOfû 9VB¬9«=iÈ×n.íÖ9 ”"n ÃÔšóĤ“ê¿Î™®[Ý]¢Eo`¬±l~š¼wwjE¶ç|nù¾í$Öÿä /û¢rÒ®ŽÚO-–0Aü* aæ:: Ë"€UFqRž}bǰ‡ã­$ë£E2LÉ"…$©ëK¨É*éË̲ §p?zym=Æ—öUAæ…¯Uimu[‹‚HâX¥œÍê}ªYc¶1ü­?{Þ¶4õd³ˆ4¾qÛ÷ýjÍ­äë$HвJ ßÀ}ªý•¹´³ŠÛ¶.3@ýk;X½û £ÈŸ¢ýkF¨ê)}nð±Ú[¡ô4œ–72Ø‹¯¶Kö‚»ø?/Ó^þF¾ðú\ÈH‘8ã¾*Ü0ê±Úý“lXÆÑ.îßJ’ëJšM>;8%DŒœã“LNÓ- XoŸÌòÁ%ÛÚ¯ Ëv`«2=j…lM4Ú]M¿»”b«Zhös¤ªîΧ¹âÝEè1AëÅ bŽý)hïHcHiM! aHx£šZC½­éq@ £!µÆ‰™·ËU ëZz]Œ6Vê°©€-Ïz`_¦íÇJ•FXõ§;RÔU\â”¶;ÒšÁmÚŽ½5¼®ÞD >@q“Ld–Ï<~ šÝ§wˆÇ¿ ÛšÙïXvVIiâ lÅL9ùŽqÍ#]Íw¨ÜÆ«#$ ±¶Üš¿¬Ë<|’Û2«/'#µOe#Éi ÈrÌ€“Y·i>œ].% AúRGäZdSÅtÅ’0ÛF)°¿|ÓÍaÜjòm¾Ï2Ü.FvúñK§]ß óÂY eÈ’Höi·@¬‰ïnàq$¢4ˆÌ#T=HõÍ7Ä—6öí¤¤áÂ,3MÆjž™öß+ý4Æß(ÚS¯ãW©€ÆàRƒXú•äé©GfY|©øëéS}ª[]J6@Ñʧkg‘Š@jtªóÝ,Å+“)Ú ŒãëY"ûQ:Ìð¢#¢õ{±ëWî5 ý½±…›ü}¨#¥Ìu/¶}¨îÛÛÒ´ùǽR¼Ôã¶™-Ñiß‘ÔvÚ±–÷ì’ÛI »wsÈ  J;Oz§¤“jYùl¯ÎãÐÒÁ©C4óEµ‘ å÷ñL 1ƒŠ}fÿm@\¤¢m¢M¿-iFE¢K˜$™âŽEiï/¥H͵sY–öwWW %eAó¶ÜH Bi`ž+#þ;VWÛÌPà€*ý¶¡Õ§ÚcoÝŽ¹í@ ºÔmm[lÓj³ @Õ# Ö6€ËsÕÄ¿?™!ÎyàV…¦¡mso$°åÅò‘¶€.cwªë‘Ùý¨¹1îÛÀïQ¦½`Å{ÝñÅ4Í1úU5ÖlZä@&ùÉÀ㊺ÜÓ¢—ŠNƒ=*ŒZ½œ×-J7¯äiVfº“Ë`Ð[ÂÒ´œ•mï-Ò_)¦@àdŒÒýª Íæ§—ýìñ@´¤–¢ž2ŒŠç5b9biLhê\W<Ó ¹†à ŠøëŽÕ‡hÐÚø†ù–5&˜NØ“;O(ëQÃq Êî†Ez©ÍE6¡kbY‘Xuç¥ ,ñœRã —PF‹$’ª£}Ö'­:;¨efXäVeûØ=(Jˆ™ jvŠû î3Û?Z¶0Ã4Äæ›'ÞT½*½Ýí½ âE@Ý3Þ€%ÆpzQžØ¨d¾¶ŠšI¾ëRO}¾Ó$ŸПJ¡‚îˆÙâ}ÁzûU1®Ø2·ï°¶œŠ»4‹%Î ’j­®¡ou!Ž&%Ç8ÅR׮ⷷG¾q?»Wf»´³–$“î6©Û@†Ãt>õ(éš«%üܤnü/ËÁ¦ÜjQA+G¶IFæ¹Ú(l*†'Ó»ÔPL³Ä’§Ýq‘Rô4€Næ£ÏÎGzΗ[XïšÔ[ÈX{u¨t»ÿ;Pº†U(ùÜ¡©µEf>¬«'»BË2vͶ¦ÚrÆëp͆>”€ÓÇ4•Ÿa}wupâkS XʱïZô:ÒñE! 4ÓKÞ‘±Hbæ žê8Brç¦ÛëHFzŠ(&Žô¦€:Ó³MïJi %èïH¦Ó© .QÇjLæ—>•faŠ(ïJzPphÍ£µRÒc½-!¢Žô}ii)h?ZJ:ÐÒÒPzPEPE´ÀJZ))RihéLÃnëÅ:’Š(¥¬ŸÜ]ÛÙµ*«Ñ›ø¿ Ô¢³-.®!ÓÚ{ý›U ½OÖ–T´°¬Ñ*‰Îkî#ë@CŠd]ë/g¨ý”Û3†\©SËRC¯ <Èͤþt}c&€6)²x˜FÛ3Š‚Âö;è<ز0pÀõ­RÓlÅd%Ì’ÊÛÏsWU¼Ô-¬J­Ä›K}Þ)ËhÒ´Bâ2ã’7PšËÖüˆ¬fv‰LŽ¥TíÉ&¯Awou¸A*É·®ÓOr‡†*>´SM–)tøUNT ^EZû<ËL~í!DAŸ”/©4àA{õ ÞÒÞI7¼1³c©^iÉm P˜£‰V3ü8â ¶Šén'i§Y!cûµÃK¨‰>Ç!ŠV•Kä°µHš5‚0÷€^ §ÚIÄð!NB㊃N–k­*9 âGO¼}j[(îR·R«ÉêO[GåÀtQRô¦Ô˜z¯¨iÐj(‹8o”åJœCiÐIeöIž<çó«1¥æ€)Xé0Ù>ô–WÀÂïlM]&5Ô ç›'˜{gŒzUÉ㉚8÷°/­UÓoe½‰¤x‚`0h-tµ¶»’äO#´Ÿx60jìP³Èð]M ÈrȦµ9Í JÐ2¥ý‚ÞX}›Ìdé†êx§Ø[ÍmÉîLç±#©’MêÏ>´îh/ÄvÂæÇsOä¬gwûÞÔÿI,šL^vw €OqVî­a»UYãäS(Ú¨À~OáYúmÁ¾[Ë U%#k«t"µ‹RÍeÁg|º¢ÝNñ01ímµÖ7¶ºŒ—VYY‡Î®x­œÒn  70]O¤Ë ²5ééÀ¨!ûy°[W€,›vy›†1Z¹‚Às@útÛZÉfKiÈø½iÚ}Ρy/™<"Þ%mÇ,kWp”Ð6ñ\ù¦¶•æIw³·¦{UÍ~9n´…ò£fmÊÅqÎ+\š7 ­§]}ª ùRE·åýàÆjçjnñFî(^IbÔ,îÒ&tŒüÛzÒ=Ù»Öld[iÑ7,¾µ½¸^)…ÌUZëó¼ÊÀJª¨Bç4jW1fÅ7r¬w{dq[$­!ØÇ$ Ÿac¯‹™×ÍÑ'e50š)õøÚ'WÛÉ_­j8I zÇ·‘Ä P~ìE´¸ b$ÐZø‚é®G¾5Ú[U[©µƒo(s" ¸ï[ÓZÛÜ3C…zÅ$VvйxaDfêTP#Ïû*ãM…n¥!—†Bç¯Òºhª*¯ÝÇTi¶B;ìñùŸÞÅ[â€¾éæ°´‡ŒëzˆB­»cõ­Ç”޹íëQEkmnÆHáŽ3ŽX P^’cMCR¶«y™Ú})Ú2/~cÇÙÌŸ(ÇÇ5[LK[­Vý¦¹.6ç¿Ò·~Ïa ±ÆŠÉðßüyNüöl Aš(¡¼Üè‡În ­[M>ÞÇw¥wuËg5 h¶+HÐ)f9<Ð3"×lžºû¤îcúÓï`<7mò¨oþ5­“g/B<¹>òç­$ú]¤–ëÆ|´û£qâ‹™¯¬~E›Fp”t®„ýÑYrhV³¬jæL'Ýù«QT*ì8¥q0` í<Šç´[X©¨~é~IÑ»]œšD1^5ÌRÊŒçs(n€(jÐIâ+UhÁ!Üzµ¨Çgm2OÝÆ§µ>ãEŽ{¯´›‰Äƒîá¾íM{¦Ã|ˆ³îÜŸu”àÓ†–XëWÛ©ڼIkrøŽôº«a¨«°höÖ÷Bâ=Ûöã–ëM‡IŽÖºÊdo½óphVÇ÷Z¦¦±ŒªŽ*…¢^i²<×Í‘‰‘~^µ·k¦Çmq,êò;I÷·«sáÛ9æ ÑüÙeSÁ¢àSÕc…|?Äþj#¯Z m¦™$–±ÅÎ:ž)׺LWpÇ÷Š8ú*t«6¶ëo„;H÷úÐmöމ%ÛF¼ïQ޹®† *¶à«€}k5ü9bó™v°’€ñZ¡UQFp=¨`-gëVBúÉÓpO­hÓO=içtëí+{kVëÌ£ÝéM¹mÞ$É)…vab¶-4èlæšḨ'Ú‹í6Úü/ž™+ÑÁ§qŒ²´ŠÖK‡IÌ'/¸Ž+'FHdÕµêŒ aAúšØ‡L¶··xcRƒ sɨ­´K+Y‘¡Þ Z€)ø…Q^Ä…‰†ô£Ä8ÉÏA0Íh^ip^ʲL\”è`T—p\À!w õ  ÝJd’þÁÔ‘&ãƒQ_â9î/-' 4_,±·F«ñhöQˉVîjil-f—Ì’fõ"Z7™km ¹AÛéS€ ¦ N)Àó@7$>&O0ã1àΜê²ë¦h†DIó°ïQÝ\@Þ#‹çR»6· <ÖÒÆ‹Â¨úSŸº¼[‹8äó•Gš3wžõ/‰&¬" wpÀâ¶þÏò“ž¼S¼¨Î>E㎔€¢o´¯>É<ÇÛò©_KºÕ&¸l€$8ëŒV¾Ð£hP÷Í'z(ïH¦°Ü=é{Ðz怵¨¡¨ÚZâŠC ;Ñ‘AëHïIKI@&)sHy4†[û´f—½&*È)4vâŠO®(ŨÍv¢Ž´RÒvâŽzPâŽÔ”´”QFx KHh4¢K@ ÞŠ:Rf˜ ÏzZJZOzLRâŠ( Š¯Æóir,j]©æ´1IŠÈùµHV)#pp댑MÒïm¥ò`kf[…PcézÙ—h³§¤…çoBG,ë'‰þ^‹Îè·Þ©.¢­©5‰÷É|qW fÚë\j/haxå\à°ëHF¥¤ÅS•©G–Wè‰×ûKè+#ÇÃ+ŒXZ†Ø|NtJÂé…làV¬_aµŠâæß÷˜\ÈCnÍHš¥£Íå‡<¶ÐÄ|¤úf¬Ï<6Ñï™ÕÔ×;¿Ï†Å¢H¡çÜO#ëSøƒCOóãßv=(äz­¬Ò¨ŽOÞHØPÃpÞ[Çt¶Í&%oº¾µCT ΜUF|á‚=)—û·ì70+P§Ú`7G˜¾n3¶£—P³…öI:+÷•F|7ˆ¡ÇUëT4»f¾²¹S>Âò0mÐJ¡XnS¸†¶«iöÿd³Žþ`A÷ªÕG#Ç o••ÔœSRâ 6í•ÿ»Ï_¥G©B·Fêm$gÖ³t vÓíçh•rCÔ¬òµÝTúNX¼ZçtÛw¾{ævÌ2˦ì ÚÓ-^ÊÍ`y|ݽ(ÞÞ+#_º{kx£…¶4¯·pì+]³Ú¹ïÛÇ%Õ›’ÅšP¤nã,G¥I ÜAvûGúÅvÎêÙÀÅ`Oj¶ºÕˆˆÉµ·d'µJ.®$×%‰9X“„-€}èh 8ÍPH®šÒá.k1% @¬ Ök»ešK©G—)ƒ×ë@Ž·_mŒÆÉö||êzæ§hÕ 85¾á°ÒÞM#HGÌÅ dÐÁÎ+2ãP¸Ëµ¼!¡‹ï¹l~Të{Û‹2IV1ç.G<ïYi$ëá–!7ïݹ³÷E06¬f–ê/5ÕU[îÖ­í5¢ÉrÖ‘¬ñ* A±•³»ëZF€ Z`Y‡nÕ'J3H|Ù¦ep½séNŸÌhb`ŽGÊǵaè÷WWRÝ,òñ|¶ô4¸sÖ¢ÞÞh@¤ŒrÝ«:ÖòæâÎñw¯²+cÒ ðÿÛd‰e’à4,NPŒšm°nÔa¾´ïá¥í@Œ}BêòëxâxÂJp2µ§ózŒÖ^°ßéÌzy¸«7í>äX¤XŸÞ1<ãÚ–Æê@Ù 2;U-*gž •¥.RB¡ûâ³tKY£vÍ<„G&:ýï­l´w&î7YTB̘äÔÛÔJ#Þ7¹æ³Nºþß=š&Œ¶Î«Éj’xŒ«;óî¥l}ž-û¼¤Ü{íæ¤`kRymõ;ã–@ŽÛXg­X¸wW¶UwÙ(mËž8  ËûµùØ~5™f]µÛ¬HÍAÆr3D ·š­×Ÿó°ª§ ¦[F–wZ‡¸€…ü(©5ÜçLˆÚjrH’¨d`ËØƒXº%´7–2Mp«4’±Ü[’*¾€í ýÕ´{šÎ=¹¢Â:Z;Ӝө¿…!<ÒƒëIÞ…'ZS×4”z) †¥=h¤=hõ¤¥ëIHšO¥/jJC.ô (íVfc€Ž”¤f€ qEv £µ!æ˜){R”€;POv¥ íGZ\úÒu ¤¢—  ç4 QGS@n(Ç4 ^i€”v¥¤ ç4RÑ@j(¥ ¨/o`±‹Ì¸}ªN«­QÖ‚.ãv߸q»Ö€5‹åÿ¤(2 ¨52ßÚ´þJÏ“û¡«ZÛ·…ÑÝp ß9«wZt-ƒÅFâEË¥³$‹.ÁG¹¥»wn}sÅf_ùßF®­4Ê…„]¾¦£ÒãYôI#•r¤¸ÛéÍ5–DaÊAéÍ1.ayÚ%‘L‰÷”• ZÁ-¼ï¸È™ÛÏNj;m:×nÔï6¸!»šc6[ío]¾_ÙvüßÞÍXÏ?Ö³·Lºÿ–ec‡pNÚ¢ó\Iy£3˜d–P2Ëçh©m.¢¼‹Í…²3‚= 0'Å&9¥ªZž§™y¹fûª:š@\"’ µ¾·¼ˆÉ ”}ïjXï-¦—ds#¿ 4> UÎp)8‹XðÍœqZ7Úm½þß<0dû¬§RÝ[ÚǺîX”º ÛZ閭<ð‡©Ãr¢€4{h.x÷‡Q¼MEq ÚÍ9”4‘–9eFÀjÔF”ðFE:˜\Ž8Ö–4UñA¢^[½Ì LÑnêÊ* 7OþόƳ<‹Ù[µ^£š`d]h‚K¦¸·¸–ÝäûÛ;Ö…¸µb ÏŽ¬Ç“S÷ õ ²õ6{˘dIÖ4ˆîUÛžkRŠ@fÜióM¨[Üùˈ‡o_ZmÞ1»û]”«¤m`à Š}Þ¢ÐÈñÛÛµÃF»ŸiûµbÂì_Z¬Á7 S*õl|ԒỰŠ­¢XÞièÑLÑ4dîÊ“œÖ½.(Ú_h^lŒÆ`]ÜãÖ¶ih¤Xzž}y} ¨ÐˆámÉœæ·1F(æÎò}RÚãl~\íu¤¼±»‡RÖ\²í’68Ílš(2æÎæÿN’³Hü¨^‹PØK¨Áv²ÙîÙòù›¸Å^¸Ô ·vÞXí6ÕÎÚ²Œ² e?+ ŠÅºÓo ÔÚúÀÆÆA†G«ÃíŸÙÒyè¯pÀü±ÕÙ"Bò0UI¢9d+)èGCL ´¼_›?³Ÿ38ûæsV/´ùo´¸T/—õЊ©öÛw¼6Þ`ó»Š`VÓa¹‚iÖTcvÜ ÔVv·¶wó•HÚÞgÜ[<ŠÖÞŠá (cÑsNíÅcÍov5dºÄb%]½y"‰-.›Rû]«GÊì!Åk0Ü0y¡T(ô:ÜfN¯cspöÓ[í2BÙÃMû.£=í´óyH"êÖÁ<ÑUq—zl¯wö›Iü™ÃñÔûm:H.e•çóD nqO¼ÔÎxcxÝŒ­€@â¬\\%´~l™ÀãšÌ+Á#ý’íáŠO¼€gò«V|Z|EbÉ,rÌÝM\0 3‚(¢à §P)i”™æŽ´P0ëÍ! þTv ô ÒâŠ@Žô†!ëHii½è¤¥¤¤2æqI@÷¥íV@½¨ t£¥Š(ê(Ev¢˜ Ú—µ@{Òö¢€€(£4w¦Ecš@QK@£½&izÓ;ÒE ½%-%-‚Š\Õ{Ë8o¢òî²ç8Î*À£œÐÒ­žÌZía9Úq§Cp±+´Ÿºû¸j¹ŠJϹҢ¸¼[Ÿ6XäÛ´ì8È¥‹L[I3ÈŠý÷jùâªÝ\Ï ð$6æTvðþMÓ³Æ'y#ì¬é³.¢×v×<ÌR¹È¥YÇP™5…³’%XÝK#ƒÏ÷´¸:ªÝÊ ³oz©u¦Þ\¯òDaoYwž•µš3@S.£óíeŒOéK@^6š±¿ aéZRœFØã¥Sy‹PûU»ìþµ;7¿Ö¯ıYcÐî"–'À~6ã­X´€^hIªT˜öàŒjÌ÷ö°H±Ë:£К´˜+s@ÌM§¸m×*A¶_)Iî}j§î4ýZëûF"ñLw#•È®›qІCz`UÓM¹¶ÝkŠ6=6ã5r“µ„røKmzèj,ÉÜ£î VÎ’–IŸ`mÑîùŽIæ¬ÍmÒ¸…\Ì*H㎠„QÙGÀ}bxª0Új¹ ‘"ó[>½xïQ]ZÅy†uÜï@º¤I‰1·@™UÎÑŠm¶žn"³›íK¶=¬¡P´a±Šf·ùž3ƳÅWµÑ­meíûªÍÀü) ÏÕmbmzÐ0ùf>;â®jA¢O kò*—POCO¼ÑÖêín ̨é÷vã婯ìä¼µòs<3mÎêb)èÖPImgyµ¼åLg?…PÖ¦hL’Åxí1U?*JÙÓt÷±¶04æUþ®6Ölº%ÛÙµ·Ú#Ú$ÞŸ/'êh~2LI»ïcšnRÆxÍGj²Çn‹;™…JzqÖZõ5´3ÝiFÚæ$„ ¿6sŽô–Sj(ÑÛÍh6§ÊÒïã¯w£k¨]²sƒü_Zv«wyk¬¨Ê›˜$‹Œõ¤Õ„‘êV7;㌶íƒ8Í?\†k«(^Þ6r²+Ð☉u»‹im| …%pŒæ«ê×ÖÚœ0ñ㘪GsQÝÉsvöl,¥UŽ@Íš5#sý¯k,V²IÉ®h§§Æ…ú¢É»ž•o4ÄmÈr3ƒX×:­Ý®¯2ĬŒ[iÜÏ5üp»¢G ;ԔɘG3*ŒšÄÐ&sõԈŞ^Trx«¿Ú´Ö¼Še\ü¹æ³t„6WB`Éó³ò½E[м¹´Ÿ/ °`}é;ê…4èï<Áñò†çš}Ρä¼Q,eæd&q­béQM%×ö|£0ÚH_w¯ §êâ85¸®.н³G´ú Ö±ÔVîya*RH¾òç5~²ô©4ù$‘¬!ÛÆÂàÓç9¤·‘XÀe›§@RjªjÀK \@ÐùÇwùÕ_A$Ö(ñ®áî`=(³“Iºx h­7©¦åE<Ë-#çjŒœT”ŽUQ‰#ô€Æðë áºùó&'ŸJ¸Úš ÞT2Ëp̃ŠÎÑs.—v‘·Ì]ñŠ—G½·M3dŒ©$9+piŒ¾óC}§»!)¨4GX´XØUÉ'µQÑw}‚úR¥avf@})‡tžRÿ }hYu[vdz+œ+²áZ®ö®nÚ-6êÊßκ|Œ|†OâúWF¿t cÜgI¾[„-öiÛl‹ýÖõ­x¬Ïàé2âb¡~¹«ÈÞ]¸gþæ€%¤™§ë0j(ÕÐ¨È üB´Å-PÖ.¥„²+aöá~µ{µaø¦k”Xh@6Þ{{i¤i#—ï3g–5º£ `kÊ¥œ™`C¨ë[ë÷VŽªz†£Ÿ¼äáŽjçjÉñ júTÅ‚åFW4„)׬ÌËÿìš™5k9',Ãy<{Ö]ÔŸ@YTpœÔÚ¼1„±ÆÕÛ*Šc5.®â¶Uó[–8PI¦ÃyûÂ1ÜŸyHÁ©ºõ±™ÊDP…pqƒZV–¶ÑO$ÑLÒHˆ,Ù¤#_²Úß3’§oÝæuu`ÒÛÇq‡w ƪ:;Eý­¨'Ëó7ËïV5eíšy‚%ëíL ×7°Ú²£ä»ýÕ^I¬´¥ÏˆaÚŽ…† ¸5,“Goâ×'j¼@FÍÓ4Ù¤Fñ,Yp#<ÐÏ6Î]KfÝ×1.sŽ‚™&¦ÍpðZ[´îŸ|îÀÒWû0Z§¦Îš}íÜWl#ir»taH ; InŒˆÑ´sE÷£=jœ~ IZUKiK§ð“PØ·Ú5›‹¸Î EÛ»Ö£Ñ&ˆÞjo\È>Ô장ì2«.Î[¨¨¢Ö<Éa ,s±TlõÅPÓ.<½:úhÆùÙ±ëP}ª6»°çi>c¸á ¥`5u¯ùtÏü÷Z›T¿û q·”ζû ¥â;„T·\üâ@øö©5ÙU´èÈùƒº1ï@ɵB[w‚(UL’œýI§Íu"H.ãTel¿ÅYÚ̾ŞeÙ˜ä@r­hIršxûNíʼnPÝqG@4Á¥ê) Rõ¤ÒbŠ #g(=( ´‡¥!†j  £½ CÖ”õ¦ž´´œÑIHeîµÒˆP1ÅIM 0 ŒÕ8®húÒt(çZNƒŠZJ\ÐE&1KÚ˜j9£¨£Š@ ( ­Z)€ -%!†(4u¥Ä £½))bŽô )€w£<ÑÒŠQGzNsGJZ¡­jÙÖ-*€\«ŸZ¿TõKÔ,Ú8=U½ 01ÈÔ[HûwÛŸÌÛ¿nÜTúåÌZ-µÔR‘!Û»½š¯p5 =[Y`Y#TÛæ+Ò­]ÚÍwáØb·P_bM©ÞOi´±°ùU”޹¥¼»¹‡Uµ…Jyõ㜊¡xº•Í¥º¦)ýðsг|—rjVr­³4q³èÍåÜë{¾ÐòÌÍÎÕª'_[ý¡ÕÇ–ÛF8÷«¤71ÞA}hžkF ´~«U^{©5[[™,eE Wæë@nõSïÙ!òƒ*îf•°£Ú•5I%Ò亊 òFH*V}àn´×sÂ^ÚeÆà¹ÚkKíp¶—,â&Š"¤W¯á@SÄR5¢Ü=œ…s†eû¢¬¶¿4e­æɲ‘Á¬ËyxJEÏÍ’üjmVX¿á¶]Ë“³‡ZèÁÈÍGs:ÛÀòHp¥‡J`ä`sIq´ÛÉ»ÚzÒ‰¦Ãmq¤4·ÁJÉ#;3qÞ´æ½¶±³ŽBØ‹.;ÖNž±Éáyᶇ?J“Ròφbb3…Lʘ͛k˜n“t+×iéSUkbŠ0Ɖ¹A;GZ|—pG*Ã$¨²7E&‰é(¥ I"D»¤eQêÇ‹•6àNÁ¹~µÏ}ÃÉzüåÁ ¿€3LÇp'­-s÷Vÿe’Îò9d$в Ü6jþ¦gÝK…·‡’ퟘý)£PZM,ÈÆh $1œZ¥£ÝMua#3îufUvïèMFš•Ä:D÷7AZHÜ®§\ Ù4•Š‹¨>ž/>ÕûÒ¾g—´mÇ¥,šœ³èfòÔªH£æ 3Ó­06©1Y:eÆ£pñK´ªrOµ0 £ªiÃR„DehÔ£­_¦Ÿ½H «Íîíá…î›ó£“ZP£G«¶æ–õ§óøROë@ÎG*½Í¤Wqùs¦ôÏLÕ¨Ï/ö+a,p¶Ü–Æï¥j#nE$`‘È  ­¦Ú½°·h¿tBäÓ¥Óí¦h̉»Ë^zUœÑ@®l`ºˆG4aÔtÏjm¶ŸmkE [U¾÷=jÉeèÄdÑ@ÊQiPȲGnªÊr >}>ÚâQ,ÑeèIéVsÍ´Í•½Üag‰\žÕèÖ)*ʰÉÐæ¯q¶‚{š®líÌÞw”¾g÷»Ó¥·†ly‘+ã¦ášzH²Qƒœ\Z4UÚôÅF–°G»dHë…ëQ^Çq4j-ç°l’GQVG½F Š<ˆãUÝ×­)† î׎zSÉ˸BêöÍ9£FÆUI÷2©Æ@âš²#Ô‘Û5Ìñ*my–"zi6íA¤m\ûÒž” hëN´ RJ- Å  ô BÒQÚŽÔ CÒ“µ/jNÔ€Nôê) ¡¤4­ÔS[š)½héÒHeâi1J)1V@ Z( Š)¥=(u¢“µ€µ¨è(Ï´¨¢€½)i  bÒn¢–˜ ‘N¦õ4´„/Z)(¦ö¦óºIŠ@èþ*(ïL¤£µê¥s©ÛÚÜ$îV|;xçÞ®V7ˆŽ ‹z\ ³¬C5Å‹E ƸfJ±eÃir•fU+Ò™5´6ÿéx1±êino!²Ž=ᾕFI  4U{[ȯŒ[†Ãµƒ.5aE'~(¥£`‚2( b«M¨ZÁ2Ã,è²7ð“NK«wÜhÛoÞù‡/–„mÚ»}1M{xdP¯2Ž€­:)#‘7Fêëê§5 Q:\Êæá[¤gøhªª…Q€8Å$вFQÔ2·]Ês†{Ð(¨Óm‰`Uú¨ïN66íiöS0ôÛV2:dgÒ@ZYÇg—í¹þ&ÍaxŠÚ)n“Èó ëczbºOjM«»vÑ»×XP9ù‚ŒÔœR~4 ¯jo-Z+G»«-Pm¿²¾À·'ûÅ{zV¹¤¦mÖ›%Ìñ™öù%Xáz‘L¾°º“Q†ê‚.Ò²gÞµh¤33H´º³3$æ6BÅ”¯ri#°’k«k… æ»2sÖµĉ5H- —®@Ú³nÀÅ$¶RÙhMi M<®m½nÑ@ºÌ,Rà’&ˆËiÓiÔ^öui,-Îõ#ñ¬Ý ;¢™½B¦%òÓ=Ç­mSO€2DÊ|CŒŸõ;3Ž3œâ£³uÒ®îaœ0ŽWÞ’c®khÎqA½fYL—2ß,+Ç+ŽÕ›¦Éko –ºŒCÎÏÞ\îÍtFIŸZCe·RÞ¤S—®µ,Z2Ã9’+‰Q nòÃ|¹©®ôå¹¹ŽàHñË—Ò€*h*BÞ+&Åóˆ ýÚ¥¤XZͨ_,‘ò¤ù=«^ÇM2JÉ+¸î*Þµé>UóÜÁq$bC¹ã 4²ö¨â¸†}ÞTˆûzí9Å9Ô20=®kG²û>·'Ù$g·Uñî}(¦=ih¢$„I¥HÛ˜ä Õ[ådÐ-da´'ã5¥ªØ>¡&òÔýî3šŠãK–kíEÇÜÇÌW®:SSÄ!öY´nÁŒ€c<må·Øu9¡šMÒ˵Ã6A«š–q{ “ªyD7+ÔÒ_é·7“@ëÏnÎcwì.M 2¼;&Í2y$8Čƭ.¨Ïf·(¥³ÀM¹ïU´8ٴ٭¦†H™‹}åÇZ4÷¿²m$´2"¶EaŒS`Ü—K-«[ÜÖW W 2w½Ò®b–K£q ¯µ•—¥Iâ2ËonP þpÛš–[k«æg#Ž6ß6wj¥©Ã<Úíº-Ë a¹p>í[¿¼šÊ+ke“|Ò¥öäýqI©[] BÞòÖ!/– •Î(Õ¬®.’Þââ»nJ}‹Ü¼òÆí+E·åyiÍeØÛ^ÏwyÛ¤QÁn¤ÖÅ”×ÒçíëþöI5WMµ¼‚êîibUó¾`7Pk;kÛËI|û¹SËbOÖ­Ú<·:ó$e“k Ýø¢ÆÖòÚÖá]Èí¹~jšÂÎh´¶¶œä0O­PðÝžm’çÏ“«~ï?-F¶ís®ÝÛ<ò,ew|­W´«KË(Ìyf%ÎÖj(tûõÔšðÉ-Á=(=vŽ;_*W8Lg­O{4“jPX£²#.çeê}ª}NÂ{Ï/Ê‘FÁ°ËÔÓ/´éf–›y.cÉèièÚuÔ ²4r>ÆF9ªzœ þ µ0ó̓WÖÎîæâ)oYbåQ;·­-Ƙój uö†>êíéLeH-¢µñH>Uh‰aœÔz˜‚W»tVžE]§?v:¿ý˜ßÚ"óí N1·½)‡DVžv3ÈnJ©Ç4×Ô¢Ó-m£•]Ù£vŸ¦ê‹¨4»U×ièÕ:éñ}š8n@ŸgFaSÃo ²Õý‘K@$¤bM/z@%—¡¤UÝæƒÈ5škÊæVIbÈÞ¼nÛVSMžx­®v@Ý—%~”·V2¦—ö; ‡pÚÆCúÐ} ¹Þíï£dÁŒŠÚ³ôxn­mD1 ÊzÕ›ôšK9RÙöLWåjNÁ±Á£µdxvæâh&Šé·¼/·vsšØ¤f¯ªqGæO)ÂÕ^kÝJÒk=axå`‡h#i§kÖ3LÐ][ ÒÀÙÛëP_Ý›—±S±·œ¥·.)Œµ>¥,ZÜ6aTÇ"äžâ§þÕMTÞ¬ QÕÙõ[;¶š$V Ê:TV׋qâ"DáLX–€/Ë«ÝÏæ$FÒ{ÒêÚ§öjG!¤W8,JÇ»¼k‹I ï"È“ŒÆ«À\õ«ž#š94Ø6œ«È¤}(íèVTI-çÝ,¿z¬Yêð]\5¾É"” íuÇKRhÚóLUe?¼Ï”Û—Aâ‹^F|²§žô½HÌw1ÀM2†R¤dƒHDPÝA:³E*:¯R§¥GwäÜZ:¼á#n7«caZJºMÕõ›¨¾h‡÷³Ú¯j‘Ãá÷‰.<÷©©H A¿rª™ZÉÖ¥†Uâ˜y«*µ¿:]Mñ¤ZäŒÑ‡ÿvbÚÝÒ5ÊÊJö f¾åUË6riRDq”`ÃØÖ>³æ½íŒAÀ‰ØîR2 íšµgg5½Ä’4‘ìaþ®4Ú>´€¼]AÆáŸLÐ͵29®oìiq¯]@ÎÂ2¡ˆ Þ­_—[«;ÜÑ•ù¾lnÇ©¦Ø#EufeV—®;V}…´ö÷ä*[¾6 mØ5CFµÿ‰•ëùò~îLc?{ë@ë9.—ÄRB²»Ã·qSÐU‹igmRî)hÕA]Ãî“@AEsº|šÐ™éwC6ÒY~õtKœ ÐÓOZER ‘“Ò–jÉŸP»–y㱉ÈûÛ¿ˆú Ò¸i0…2cå X~yRÂò]¡¦2œ‚i±a4·Áî 0ÉÝMYªZUãÞÙ¬Ò(VbxZ¹š„ÜbèAå9ܹߖ¤DTáíYë¨Ký°lÞ ±ì,=i‰}s{s4v>Z¤GkHàœŸjÖ¤ïY–×ÓÍçÛº¢]Ä?à'Þ¡°Ô§¸Óîg™£Y"$`˜õ¤•íÇÙmÚo)¤Ûü+Ö¤‚_:—iMË­ÔV\Ú…å¾”—2BŽç–€¢§ŸPò~ÌžVù§û«œv¦…ÕZÎðÝ,›¢hž6ÚÊÕg4€(&²æÖV9§Xàyõœb¦»ÔV ?íj¥×nà)v—½féú²ß[3¬l$EÜÉåQéz«ê0{f]¬@aÐ}hZ“µgK¬AãZ²Iæ(Ï ×éR6¥Û¬Î7¡JüÄÒèéH̱Œ³=ê½­äw>`PÊÑœ2°äVmÖ¡j×ëæ‘40NÜ…ozl¬Šã(Àý(.ª~fëXÏu®¯•"¤n‡ÌP~P{¹xÖr¼ܺ‡Ü5ÝÔÐú:U[›èmYQÉ,ßuTdšm®¥Ô­Iø`Ð"áô¢õ棸ž;x÷ÊáG½IQI´wÒ‘¨ Ðöņ‚x –“4f€E£­)h bQÅcÐPjjê/ÚÒæ# Ë6c÷ªåÌæE‰¥Ûü+Ö±5‹F¿Õ£…_c,;”ûæ¬iz„›•é pœˆSî¨ B#"Å$j?½Þ® 0Ífiå¡ÒÓ—{N¦‘uÿ±îÄ2mÜW¶)«A¬ÛWìú\W`àdÙ¥²ùñG$¢Ë’7Bh¢(ÕÍEm¦Ž¥šOºªiö—<’E-»Âñã9ä¡  tÉcÆÑ’Ãw)Á§æªßßGaË0m¥±À ÚZEg—íO¹©ê¬—ðGn“9eGû¹SNšöJ«³naª¤ŸÊ–¬J©ïmLP³$/¸¶áÍhÇu™QÁEê}*¼Zµ”»vN¿;mõ EÌÖ—hÏAPO{onÁ&™Uj’¢¸]кºú© 1£dR\Š4`*:)ÍÀõ¤RJüà i‚&ÚLk‘ÓŽ•Y[<âsAÎüsSV<0?C@uÎ Švy¢ŒÑ@Šw:l7pܸ>d}=ê[«T»…¡“pF늞“½W6q= µ`^=»~cÎ*§ö4e<¿´O´W-Ó6©w-•«O bM¿{'¥Y¶Ír•Áu Šc!»°ŽîÝb‘ß+ÈpyÍ%•œ–ªÞeÃÌÇ€[µZ–D†&’F¨ɪ°]M,ªÕ’&¸*@RJ¼MGíjÉàå;U½FÄÝùo¾TÑ«WAâŽ1L ¶0ÝŸÝÜ Ià\U¬ìî­u ‡7‚vÜI<ŠÔŠ@cÝÛÞë »8Ò@鱃S­!»ŠòêæhЗQµPõ"µyÍÀÄÑa¼·ºŸÏ¶Ø“1|îVÞi:ri°ÍÀ´N®Á"îËÛM~2c*Ìç€z¥tÕ]lá[†Ÿndoâ'8« dÌR&eVbp½Mahþ}µ¥ÚËm0båÔmëšè4‡d­ 3<<’G§ùsDѺ1ûéP›ˆRQÊ‚CÑKsSP.Z]|H±È#”,Tš†ÉŸEºšâw†gܲ*çó­ã÷¹¥àÓ¸ö 5Æ­-óFÑ÷b†-ïT®4醲ÑG»ì÷;ã§½t¸æŽô\ ½q¶éFìÏ€¡W5¤Ö¯ötºß ïŽQÆÓé[˜¦¼jã ¡‡¸  íiæ°Ý9,w¬z°­Ôà00;R~4€ån¯ÍÔWñLí®BF‹÷‡½hLÁ¼0|³!µü˜ËØ»â ölPŸÝíLE-`ÒáÁŽÎyªžž5Iàgo5ŽÓÔÖ­µ¤»„*nëŠx‚“̨süX昳Íñ ¹Õ•<÷«ZÔPÜZÄégnú'½Z66¾fï³Ç»9ÎÚ|ö°](YâY6ôÜ)•kóÉ©ˆ¤+ïòÔ: ÕœV/ ì‰ c¼IÆkn;H!“ÌŽ$FÆ2E.—e4¾l–èÏœçi—q$ ­ÚÃËxò8àõ«ªEö»eù¼á†«“éö·K%>í,ÖpÉ,rº³4wøR"9–Mö®7¦"-I©º¾¿eöõÊ~}¾žõ±u§ÛÞ(ÆqIk§[Y¹0G†=Xœš`ZÍsúô›uK1ŠCž£Öº:U{Ë8/#òçMëü¨´VQ ¡9¹i_fÜ1*–”#Ý©¨UØ$?-h[iV¶jþR¶[‚ÌrqM‹Hµ…dy¼7Ìy  »}Òxb_#ïÜ/Ö“OdÖyòŸ1p ?{é[VvY£$…n œÐºmšËæˆ#ø  Ÿ²¬Ö8Q&I­¸¦IT4l®¾«Í6âÖ ¤ 2Ùè*ÕÍòYA e,d!T ¡ªÇöm;O™Üí.zjMNº³·žÙK´LgBhÜZ‚›µ·;[z’ vÇ­W“[Tºš³¹’>ÿz¥±¿[·[HŒÌ̸©C5±ñ®]HuÞ  ój- öñ÷ý lb§{°—‘ÛùlÌãváÐUMv$²ó!ÿY óáK¥Èn”ßH…ZE ª{@—VŠ9d]’2ÄB»Â“Kªßý‚Ìο`+úóíZ}Éa"Nc ó7=kC[e“@wO™J©YµÔâÏÏ–6ˆËÊ‹ ¬–ɧµÂC’Ìz}im$†[$dee€yéÅdG›Ã$CÇ8ÿz€4×Yˆ¯›äËägnÞ*ÅÍôÖââGýÙèG5FÚæÔéÝ—å‹c.}½*œHò,ç T7§jÖ]bÉÚ4Œ¿J’ö{X‘RéÔ+žïY1¢øf#…*}óVu §LØU­A­¬1ê6¾où›Úµà¾¶¸}‘J¬Þë7Uaöý5X<ÎsNÖ"U{YbgóT:‘Þ€/K}n“ ‹æÿs½>;¨d•¢I>òç‘X×°E'ˆaÝŽcäzõ§aGˆ_æ ~O¥jý¶ÜÍå £ó3÷wsSæ¹{X>Ë{oÜhѳ–ŠTêÇÞºrÀ)-Àèý¨íUíomî÷}žU}§œUÇÒ&î)r1Xž$¸–!Ž'Ø%}¬ÃÒ˜u‘IÆáùÓ‹¨à‘\ö£¥Áo§ " ²&>pß{žõ.³ó,Xgw˜«×­6£‘dPËÐô§ñÞ²5 ©X23!ÞAõ¤T5Ä’]1dLÇÖtV]Ä×'DY`ɘ¢ž:ÒiR,Ì^+‡uÛ†ŽO¼­@¹â€qIL›–Þ^ãå-ÒMÜ“Í4V¡KEÁféŸJ³ Iå)•@“0^•• ¤ŠoZV Æb .™4Ó5âK.ï.Bªp8¦3Svhâ±£–êëN¹}²£²¬Š; ©oôúr]¥ô†M¹ ØÐHzÑ\õæ¡tÚDp8³‡ëZ6ë|ŠòM2H2¨4€Ð¤®y¯o-îm¼Ë„w–M¯ã +¡˜¢ŠdŠdŒŠ@.õÇQFF9®[G³7myÒ˵_±«w.ój«f4qG¥¶î?Zvx6Fj(îb™˜Fêåz£§ZÏW qŸ‘U²V³¼;g&%üĨù¸ ‹ržL˜y‘2+‘÷—¨¬]5DzíôY;vôÍ?K_/P¾IؤaIé@hR;YÉæHÎVF\µY¶ŠHgžI.7£•»TôEÍ­Àä3b¢Ñ"o¢f.¾a\µ4Åõ·_>3Ž>ðâŸö¸oï£ùº|ÝkÒ´ûy¤½G¹Qö¨ÏJ—N±…ô™å•C7Í´·lQa Ê‘®ç`«êM1®aUWiP+t$õ¬©ÑdðæçùñA5 ÊŸðŒ)* òÆ=¨uç‰P3H¡OBM6)’TÝ+Œãå5‡s †+9£gXcùâ'Û­ii Ø„–êU$%°{C.Ð+:ÿX†ÂTÕ›Ó°«èë*ŒåXdQNÍ0Sº@'z ÅHß΀AéI¶—µp(íGR=(£ ¢rNh"–Ðw¤>⎔Heú(¢´3Ô”b–€´™ ô ŒfŒÑ@¢Š3@ii¥ô¤1´„g­æ˜ E'CK@G4½èïGZ1A¤"ƒÅ-7œûRA ïKAâƒ@¢“zRОkUÕ¯¬o–1m·Ëަ·úŠåõ©ã—[µ6"eßÇi ,&µx·­o-–%+”PzÕ½'T–òy ¹‡Ê–.JН4Ñ[òxŒ®qÞ›ib;׆ò ‡)€°ÇJÍwKíf[y~x`Œ|§¦êšÞÊ5¾[ƒvÓH? §fŠú¡—hÈ  :ü—)»åI˜*ç ­®"˜°IöõÁéY>†"YU1•‡ÐS4p£WÔ•Wp  ³4k“zí^§=*8îà‘7¤ÈÊ{î¬24™õHñû£!¬ëm:Ýô ®[zî*sÓ‹× 8Ü3éšurWV‹—m|'òå·êc;£R{Šx÷¬Jöíl-ŸËiæ“À­ŽÕÍKnòx  ¹‘XG¸0ÇÔ¥aü7RGs – |Þ´CqžEeiòOý£u²´‰Ý¥ª…¬ój×eo$O*AŸö¨¤#š;ÑKÚE-’€ šî'ŠlI/ÝëQK¨,WÑÚ¼OºOºÝª)µ†§£@ÆFå\¯ÍCþBºxÿi¿•0,ÜßGoq RÝ)Âàp*çÖ²µdÝu§‘ÔMSÞj+jñˆÒÏ'ÝŒPÞ”ë:[ý1mnàky[•ÉÈoÆ´{çQZvj¬×ö°ÉåÉ2ô¤Š: Ô+wÀÓ$ªÑ¯Þe=(P=¿œ%_,ÿx  ¨ò×9Ú¹úTˆ§¶;¥Ù¾­Ö¦ÊÅ%¾Uy)Áà÷¡QB  £°¬}Ne’âÎKy>hVÚݾ•±œh3d“±yëòõ§Ñ£(È»ÆÜqN ¬7nSVTpJº884Õµ!1$J±žªöÐÛ©HcT_ARê(  §K²3Mºn>Õ%ͤ1š5uMMiYT°ôë@6›jÐ,& cN‹ž)g°·¸DISr§ÝÅXÎE(P;Í:ÞõfVùÊAÁè´øcur^G_º]³Š°~´´NûK·¾uy7«¯ñ#`Ô1èv°ÌÒƒ!f]§-ÔV Z`gA£Åѹ’Y<¿¸¬Ü-_+DÊÿtŽiçµ#RžÑ,Äz­Ä–ÊëjÐ[øt]¹¤ãP 0 ­eý¹Š^AA«4”çõ(n­lR9.¼Ôó@+ƒ×¹­JÁ¯ ËÇ$lZ¦-ù_2iW«ëWv¨\çdÒ•ý›v×M-àsÎ<ºdšEÏ›wåÜ Žç*ڣÀËŠÎò=>(„è&‰†8 v§ÙXËì×3˜ÃHÚ+@Š)µÌË2)v…éôP>…Ô-p. dóx$Še½¾¡cysåB’Ç3– [­£KÁ¦E„3ÚØ\‹¥T,Y¸>µ”o$Ò8Ò<0!_wAô­KäžKvŽ…›ƒ¿¥A¤ÚÜYÚˆg(U~îÚ©©XÍý¬%ñŒ¶qVÙnn4¹#(aœ®Ñ“WÍV›P¶·a–@²?AH #§j&R¶Ñ+ÀÙûÜ·ÖºH·ykæâô¨æ–;xZINu4À”}ìÔ7"C ‰?„·J†ÓQK©Z5ŽT`3ó®*ßz@béÚmõÛÌÓDË+fEÇò©oô¹fº[«Y¼©”c‘ÁvX¤yƒ 0ƒ°©éÜ –pO7Úgó¤cé€*­……͕ăÍF·f-¿5jô4”€Ç›K¸„—V·+™ÔÍ:ÏK¸¶’âSrI‡]½ýjkíQ,î"‰¢‘¼ÂaÒ¯S.ÃLšÍe_´‡ó9û½­;OÓ¥³óÁ¸æó÷pCzÖ—z) γҬs(¹‘¼Þ§Ž¾´èt±“Z¬òmcœ÷­Óƒ­1~ÃØ>ǹŒ{vç½gÿÂ?˜|–¼”ÇÙ{ ÚïJqEÀÎm%J¨[‰S¶ÿ«Vöéon±F0ª8©Ž(¤3_µ7RÇÅå=dÇV­ŒÚÒ8Kn(1š±øRÅ dÓ»Ð(9¤ß&šÝiÝ©´¼RÑ@ bœQE;QÚŽÔ€ozZJ !‰ïHii æ­v¢´ 3Fh¢©1Gj-‚—4QÚŽÔPgÚŠ3IÚ M©;RÓïKÀ¢Š@%.i(À(Í”¢“'4¢‚h{RqšJ(4¹¤ö£½é†4c’«Ÿ\SûRv ”V íÕ´·Y¼Õ…ƒø‚óS⊧ý™gçI)KÉ÷³Þ•´ûFahË_º¸«Gš)VM6ÒUDxª (ô¦Üiv—L­4[Š£žÕr–nt«K­¾t{Š «ÏANŸO‚{/²>|°0¹<Š·KÅféú=¾žYÑ™ä#š¢³ÐÖÖí®>Ó#3u¿ÖµèÅ02ì´†²¼i¢¼¦ÏîÏJŽçEi/Úæ ©!ß÷ÂÖÍ‘§èòÙ-‹¢Â_n‡Ö™ýpšcYEr»Yº•í[] ÎhóK½—N†ÕdˆìûÝ³Ž•±u‰¸ó6üØéšyíGZ^õ€-u!«É{åFr6»øk{<Ñœô  m.´Ône¹‡`›œƒÀÅ2Òû-Nv[u’äÜ_wA[‡ÚŽhMsë¨ß[ëb ¬y36{v­úÍ‹Jÿí“Êfp~@z-iä 8£ŒÒRþê#®Ù ‘~BÁ½³LÕ®¢W²%î‰/ÐÖ{[w}æËÿx¯5)[ªƒNàdkWqGqd ò% G õ¨¯¤Zä7²Ð<{7c…­§·†N^$cî´­ rGåº+'÷Hâ€9íVxõ-FÊ+6ós2öÒT0YÛÚÿ¨…#Ï÷EM@ !!o\V†•$Žá¤\ÏæaËu­óTŸL¶óÚáwFçïb¹  úl wñ  ­éÅC¥í ˆÊ07ä~u.„É$wENAºúSÿ°í×ÍÙ$ª$ÎT7€*„ßá˜Ãvþµ&®Û¦Óâs¶›ÐÔí£¡±û"Í(vz楸ӣº²[yݘ¯Gî VÔc†;ËDPæ]¹µ3UšVÕ-m—nƾn„ÓFƒ.#Íì…£9R{UOJ7É$Æ9¢èôëIá’c)ŒFýÀ¬/MŠq|ŽòmIJ®³ag=¼oçÜ´Ò7ñÕ^ÏL¹´ŠåDèZS¸½ 3í,LÚCO$òù‘îòðÿwµ¥JóéÐI#eÊò}j¤:mÕ¾˜ö©'ÌPJ¡š8Û,\:²Çµ§·–(›£°â©ëþY’ÆR»‡™ü#’)Úž£k6’Á]]¤\*¹ª·…­í´‘;mØà¶i 5¢Õ¡i–#–~Ì\TõÛ¬Ïkl3—•K pE.·,SC1°y™Ô S“LÖäU¹ÓÕˆK’h@jÍu¾Ðܳœ*ަ™úÍ3ÂQ’U¶·¥dëEaÔl§—˜>é5zÍ´ï=ÞÔ©p¿3dž>´öÖéfHíey"8Ú*iõV‚êÚb||ÙÆ+;K¼„kwy”ü§ûÕoÄQ3Y­Ä|< ‹q¯Xj"ÛÊ$Ý»=*ÕKH̰7’ËÞ{Ÿ¥E¥HÓ[Ë"~ñúè+%õµÀYÌICÕ~U\ÑašzùmÖ{wïÇ­K.§-£¯Û-öDçÕ·`ûÕmjáQlg($ øQ©^E¨@-­$„tþÒ¹¹’2‰{Ëó¸ô¡kÉåÓx‘D«Ÿ”ž8ª×3´W)jæ]ž_XûÍLÓdhô©ãxä ›¸ÛëH`Ôõ)´ö¹DŒ„''Ö¤}RüZGz°Çäœnæ ±fÃóD!—Ì9vôùK/‡b‡É» »vž9§d#CTÔ%´³ŽâV FC{Ò_ßÜZà é2¶ÐÙëÍE«A$š2¬i¹—i*:â¨ß_µÕœ1¥¬Ãk.I_JijòÃq ´iæŒïqÀ«vMpГpxc½Ç­Q¿>rªÉfÓDñåJŽU¿¥[Ò –ÞÂ8æ9aú{R×ó£5®Ý]ÚªIlvÆ>ù«zeѼ´I˜aº­\Ï4¤æš:ÓJCƒH(4ZAE ¥%½©½©ÔÑÊÔ€½© £µ¤§SIÁ¤QZˆ¹šPi)hQEQIEäÒÓ]w)ª0¼žhëA¢Š8¢Š(£½f€ ;Ñš(sM¥¤&€F ëGQKÒ€j(í@äP)3J(¤æ†¦Œí v£µ-   ;Ñ@ Š94w¢€Æ™¸ƒ¦¸“Í)?5)àgŠã8Å;9ÔäУƒLšuRRÒg4¼RP)~´Ž>SŠa@¥¤ ¢ŒÐh¢“¯Z()Ý©)h1E©{PÚýÞ(¥ pisH´´QŠk.O&Ž”îÔÐI c4œÒö£é@9¤#­- ëL.üánßg^N€ŠÍÑ-ï,Á†hFbÛÃt­®ôPcŠLqNíFiÞÔ¢”t¤ ‡!O­--bÚiW/©}²úEvO¸«Ú¶zv¤¥¦KM¢u)-mâi¥KÛ“š«áÙ‘ìüœ"’XëZûAê3õ§mQÐL ÆÊÛq>D|õùzÑ5Œ[˜5òÏaÚ¬v¢™pèvñL²’AÝWlZJSE! Þ’DWR¬Vì{Ó¨ë@ãÒìâpéoaÐã¥IsgÚ…ž5p:f¬J`T·Ómm[|0*·÷ºÓgÓm.œ¼ÑnoZ»@V[ y­–ÞDÝã4°XÛÛÄÑÅUn£Ö¬šAHeXôË8Ü2[ `rÚ±$k"•u ­ÁFh4#AjW€jh·‰rióuùzÔ¼æðh’E‹µÑY}¤H£Œ~í>ƒüÒÐg“šrÕy¯ ÂI*«7@M^Á1‘b•X§Þö  QíU§o»Ž Û¿oËŸ­6çT¶´b™ˆgç8â€/u4ÅgE¬ÙË#"ÉÈåH©m5+kÉ8_s'PF(çcµš:ÐN±¦Ü_ɤª°¼*íºZÛ¬IÊ­XnsLUÚ0(x ñIïGZC â–Š%&híK@Ä¢Š("“µv¤Òu£µ%!ˆx¤4Í.höyéK×µ): ²QH:RPÑš(úPE¥é@ Î)¨ÌG#šuQô¤âŠ(óGj3@ HhæƒÍ¹Í  PA¢ŠZLÑEâ’ŒñJh¢óKͨæE¨Í¥À ŒÑš!㽨4) |ÅÅ9½E:“µ0ÏÇѧq§ãšZ@Œç¥-€šhéK@ Fi@¦ž¹¦³ÚŠAK@ ÐSzš^ÔPE'Ð:Ò£"Š@1ž§ë@ y ÑŸZÈ‥Rr€ ?•£'4u47sŠ3ÍÍRšJQIŽhf˜)h¢€Š(?J@6–ŒÑš`½©¦”t w£R4éh ëE`%)h4™¥ü)¹íK@ IGZ@0}hiZQAâ:ÒšOÆ–€éE(¢ŒÑÚ˜%- Å RŠCÅ4J)(h¤£9½)Š3@¦ÐhæëM4ãIÚ€PÄQÞ‚ƒŸzæüEf[y61›QW¯íÒßJ­Ñc%~m£“E抷· ,“ºÿtÕnÒÏɵò%Ì9å½)ˆÌ°[K›{ƒžÏ3¿ÒŸ¬,m¨XFÀ¿ô«èVp\,ªr¶à3ÅX¹Óm®æÊ­½F ŠÏºÿÂAjª£„9¦Ä|NÛ8Êsõ«òiVò\ þ4ón iËr.á&íß{­1š„ñIFx©ô‡Ú–R£=Í:Žô™ aÞŠ(  ÑIß4P(¢€ 褚J^Ô© n1KA¢€43Iž(­d;¥7£µ—4” 7PM.)(¹¢“½ÍQ@hÏh¥Í4ÒÐg4ìâ›K@ Iš)({æ‚qIE(æ”ð)½¥êh{S¤ë@èyíFh¦Ð¨¤è))€£­­%- ÓpÛÁÏìÒàP0ïKMqKÍÑÚŽ´S´‚ƒŠ(ͨ¤š3Ť  g4”´È#`§«dgŠFUnµ “`ô4 ŸŠZL ǰ æ—½%/U¤ ^ÔPFi9¢€jpéIIžhÜf’–›š”ôâóGjqÍP(ïJM'z€Gj9Å ÍãšMØ4qÖ€i3ëE#i \äõ¥È4Ò¤¨çŠ\Ó8¥÷¦!Ô”Q@5ºRÑ@4¹æŽ”œPÑIKš)¸ç­-%(¥Í'j@h¢OÞìöÎiýé=èêiáI‘ž´™£Š`éx¤¢€’ŠJ\ÑÚ™&ì|„êiÄÐ1h¤¤šBIE LóKšJ;Ð =híA4P1E%( AŽhï@æ“Ð1OZ3Å”´”¦Ð©N(ëI@zQA4f€=©hf€ ZJJZ)3GjQMîh P(4 3Í'z)=èÍ.(¤Íâ ÞQMM;µ%w aHzQE E¨âËÙ¤Í ¥+BEÏfŒE!Ô”´QšN”ô \æŽhÎ(àÐO¥%-!Qž´´¦“4RÐt´ÓE:ŠN´~4P(¢€ÑÞ’–€ (¤ï@ š;ÑÅ%ésE6€ÐÑIGj`-’Š\óIÞE ZLÒ½Lêix¤¢ š3IE-ŠJbRg4¹¤í@ E%´}))zóH— ÒRSsFh¤ÍHh¤í@ GjJ(E)3Í KøÑ@õ†@…Í‚Žô´Rw£½ Ò”*c‘Ú=ŒU²Þâ¥íLbö¢“µ2(qEhÑéKÞ€9¢Žôw <Ði( bÑŠLÑšZ3ïIIŠ@;4™âP9 âŽô”~4´¦›E0ŠozS×€JZNhÅÑGµ¦º—4Þ­E.}iIâ›GzSÒPh ”RQHñJi( Ñšku¥â€Àu£4˜¤&€ô¥â“ŒsE¨)JZO¥-% Žô(¢ŠJ3E™æ€ôw¢Žô†’–šSÒ›AëE-'Qš(¤4´™¢ŠJ@'JJSHi ¹š3ȦƒKV!ùSsFhÔQÚ“½­-&h íH(£¥)¤Í‚q@©3E--%fŒÒbŒPæŠJZ3KÞ’ŽhàQŠ8¢€ )3Š\ÐE&iI ŠJ3@ ÞŠN†ŠZhl’9¥4´QIžih£ŒQGj(¢ŠF¥¢’€ŽÔu S£4…»QH´”f€ i4Râ€4”QLâ¥%  –’ŒÐ“GjLÑšZQÒšzQHé@¤Í.i€w¢Ñ@‡RgŠ)  ^Ô”Q@ E é@ ¤£Š(ïKÞ›ŸzZ3Í-'z =¨¤£¥)ÜRft¤ÒRæ’˜Ö–’“8¤ÒÓy šQÚŠ`gŠJZ(&“ó¢qÅ- äæ–€ CJi§­-.}i)(M™¥ –’’€Gz( 4„ÒRâ€Í/AŠJZ1Å™=¨ë@ ŠP9£½´Þô¥©3@ HMPIKMçuŠ=é “'¸¥cHiRûÒE¥RPÒQE™¤&ŠCi¹§57ñÅ!–”Ó¨U©Áª‰%Í.j0Ô ’Ž´ÑK@ Œ)Ýi´SáGjAE-!4™¢€’ŽÔPô¥ÎE4Ñ@ Ú”ShÏê8¦ÑÒ€ÞŽ”Þôw ïE&qFhMé(¦ÑM¥Ï¹RƒÞ›Š9¤÷¢’Š`-¤¢QKIE;µ¦RÐæŠJ …€4QŽi€ ÑIE( RbŽô€\ÒQš:ÓÍÒQÅ;ëE&x¢€Šm¤ƒGzJCL¥Í4šZSFi( êhïMç4sš^sFyö¢“¤©? ;QL€1E%8PE74P‡w¦æŒæ€ŠNôg¶({Òæ˜x"”ô M£µv¢Š@IGzwzNô™æŠ`.h¦Ñ“HQIGJJ\Ògš>´Qš¢€Fh¤ Í©:PhOQ‘I@ Æ(Šâ€’ŒÒf€Ž)8 ýi(è(éA ô bÑIš;P Ï Bx£wêNô™¤ c‰£µ'zBy RRQ@hÍ%¦ŠJ ­¤4Ú@>ô£œRu íE&h 4RQ@Ť¢’¦ÒšJC$©µ–.*DŸžµVQ^œ¨$Ùju’€-†§ªèüÔ Ð"@ÔêŒvx¦!Ù4fšf€A4”v &–’Š:RÒgšJ-éhh¦çšQLŠ)±HÍ!<д¹¤4”PÐi( QM¢˜ š(¤¤ÒóMÝKÚ€ Ô âš( f’ŽÔf˜ Ú’’—4G9¤âHÏ4fŠCÖ˜ ÎhÏ4è ¥éII@ i(âšu¤£4€3E”¹¢›Þ—4¦ŠNÔSLÍâ’ŒÒsëGz@hé@¤£4†€v(¤âŒÐæÙ¤¢€>”RQLϵ%&ihïJO4™ u ð¥Í!"ƒÒ Ú’ŽÔgŠ`.F)3éMçu:&hâ’€4ŒhâŠ\Ѻ’ŒÐçŠ)3ÅŠ)i¦”\ÑIži(xÒæ™š^”w ûRRæ… š(v¥íIš š?•'z3@ IHN(ÎhM{ÒQ@¢›Gj;QEw¢’Žô¹ Ð~””½©(Ï4„Ð據)3é@ E7šZ fŽÔRR'Ž´œÑGZ3Å©;Q@(¦ÑÒ‹IE% ›š=¨À¤3ÜjDcëE¨‹0¹õ«±14QRƉœÕ„4QH §fŠ)’¥ Eê(¢€Ñš(  yuv transforms. All rgb * values transform to a valid value of yuv, so when transforming * back we get the same rgb values that we started with. */ pixa = pixaCreate(0); bmf = bmfCreate("fonts", 6); for (gval = 0; gval <= 255; gval += 20) AddTransformsRGB(pixa, bmf, gval); pixd = pixaDisplayTiledAndScaled(pixa, 32, 755, 1, 0, 20, 2); pixDisplay(pixd, 100, 0); pixWrite("/tmp/yuv1.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); /* Now start with all "valid" yuv values, not all of which are * related to a valid rgb value. Our yuv --> rgb transform * clips the rgb components to [0 ... 255], so when transforming * back we get different values whenever the initial yuv * value is out of the rgb gamut. */ pixa = pixaCreate(0); for (yval = 16; yval <= 235; yval += 16) AddTransformsYUV(pixa, bmf, yval); pixd = pixaDisplayTiledAndScaled(pixa, 32, 755, 1, 0, 20, 2); pixDisplay(pixd, 600, 0); pixWrite("/tmp/yuv2.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); bmfDestroy(&bmf); /* --------- Try out a special case by hand, and show that --------- * * ------- the transform matrices we are using are inverses ---------*/ /* First, use our functions for the transform */ fprintf(stderr, "Start with: yval = 143, uval = 79, vval = 103\n"); convertYUVToRGB(143, 79, 103, &rval, &gval, &bval); fprintf(stderr, " ==> rval = %d, gval = %d, bval = %d\n", rval, gval, bval); convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); fprintf(stderr, " ==> yval = %d, uval = %d, vval = %d\n", yval, uval, vval); /* Next, convert yuv --> rbg by solving for rgb --> yuv transform. * [ a00 a01 a02 ] r = b0 (y - 16) * [ a10 a11 a12 ] * g = b1 (u - 128) * [ a20 a21 a22 ] b = b2 (v - 128) */ b[0] = 143.0 - 16.0; /* y - 16 */ b[1] = 79.0 - 128.0; /* u - 128 */ b[2] = 103.0 - 128.0; /* v - 128 */ for (i = 0; i < 3; i++) a[i] = (l_float32 *)lept_calloc(3, sizeof(l_float32)); a[0][0] = 65.738 / 256.0; a[0][1] = 129.057 / 256.0; a[0][2] = 25.064 / 256.0; a[1][0] = -37.945 / 256.0; a[1][1] = -74.494 / 256.0; a[1][2] = 112.439 / 256.0; a[2][0] = 112.439 / 256.0; a[2][1] = -94.154 / 256.0; a[2][2] = -18.285 / 256.0; fprintf(stderr, "Here's the original matrix: yuv --> rgb:\n"); for (i = 0; i < 3; i++) fprintf(stderr, " %7.3f %7.3f %7.3f\n", 256.0 * a[i][0], 256.0 * a[i][1], 256.0 * a[i][2]); gaussjordan(a, b, 3); fprintf(stderr, "\nInput (yuv) = (143,79,103); solve for rgb:\n" "rval = %7.3f, gval = %7.3f, bval = %7.3f\n", b[0], b[1], b[2]); fprintf(stderr, "Here's the inverse matrix: rgb --> yuv:\n"); for (i = 0; i < 3; i++) fprintf(stderr, " %7.3f %7.3f %7.3f\n", 256.0 * a[i][0], 256.0 * a[i][1], 256.0 * a[i][2]); /* Now, convert back: rgb --> yuv; * Do this by solving for yuv --> rgb transform. * Use the b[] found previously (the rgb values), and * the a[][] which now holds the rgb --> yuv transform. */ gaussjordan(a, b, 3); fprintf(stderr, "\nInput rgb; solve for yuv:\n" "yval = %7.3f, uval = %7.3f, vval = %7.3f\n", b[0] + 16.0, b[1] + 128.0, b[2] + 128.0); fprintf(stderr, "Inverting the matrix again: yuv --> rgb:\n"); for (i = 0; i < 3; i++) fprintf(stderr, " %7.3f %7.3f %7.3f\n", 256.0 * a[i][0], 256.0 * a[i][1], 256.0 * a[i][2]); for (i = 0; i < 3; i++) lept_free(a[i]); return 0; } void AddTransformsRGB(PIXA *pixa, L_BMF *bmf, l_int32 gval) { char textbuf[256]; l_int32 i, j, wpls; l_uint32 *datas, *lines; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixat; pixs = pixCreate(255, 255, 32); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < 255; i++) { /* r */ lines = datas + i * wpls; for (j = 0; j < 255; j++) /* b */ composeRGBPixel(i, gval, j, lines + j); } pixat = pixaCreate(3); pixaAddPix(pixat, pixs, L_INSERT); pixt1 = pixConvertRGBToYUV(NULL, pixs); pixaAddPix(pixat, pixt1, L_INSERT); pixt2 = pixConvertYUVToRGB(NULL, pixt1); pixaAddPix(pixat, pixt2, L_INSERT); pixt3 = pixaDisplayTiledAndScaled(pixat, 32, 255, 3, 0, 20, 2); snprintf(textbuf, sizeof(textbuf), "gval = %d", gval); pixt4 = pixAddSingleTextblock(pixt3, bmf, textbuf, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixa, pixt4, L_INSERT); pixDestroy(&pixt3); pixaDestroy(&pixat); return; } void AddTransformsYUV(PIXA *pixa, L_BMF *bmf, l_int32 yval) { char textbuf[256]; l_int32 i, j, wpls; l_uint32 *datas, *lines; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixat; pixs = pixCreate(225, 225, 32); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < 225; i++) { /* v */ lines = datas + i * wpls; for (j = 0; j < 225; j++) /* u */ composeRGBPixel(yval + 16, j + 16, i + 16, lines + j); } pixat = pixaCreate(3); pixaAddPix(pixat, pixs, L_INSERT); pixt1 = pixConvertYUVToRGB(NULL, pixs); pixaAddPix(pixat, pixt1, L_INSERT); pixt2 = pixConvertRGBToYUV(NULL, pixt1); pixaAddPix(pixat, pixt2, L_INSERT); pixt3 = pixaDisplayTiledAndScaled(pixat, 32, 225, 3, 0, 20, 2); snprintf(textbuf, sizeof(textbuf), "yval = %d", yval); pixt4 = pixAddSingleTextblock(pixt3, bmf, textbuf, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixa, pixt4, L_INSERT); pixDestroy(&pixt3); pixaDestroy(&pixat); return; } leptonica-1.70/prog/pagesegtest2.c0000644000175000017500000001103712242266042015217 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pagesegtest2.c * * Demonstrates morphological approach to segmenting images. * * pagesegtest2 filein fileout * * where: * filein: 1, 8 or 32 bpp page image * fileout: photomask for image regions at full resolution * * This example shows how to use the morphseq specification of * a sequence of morphological and reduction/expansion operations. * * This is much simpler than generating the structuring elements * for the morph operations, specifying each of the function * calls, keeping track of the intermediate images, and removing * them at the end. * * The specific sequences below tend to work ok for images scanned at * about 600 ppi. */ #include "allheaders.h" /* Mask at 4x reduction */ static const char *mask_sequence = "r11"; /* Seed at 4x reduction, formed by doing a 16x reduction, * an opening, and finally a 4x replicative expansion. */ static const char *seed_sequence = "r1143 + o5.5+ x4"; /* Simple dilation */ static const char *dilation_sequence = "d3.3"; #define DFLAG 1 int main(int argc, char **argv) { char *filein, *fileout; l_int32 thresh; PIX *pixs, *pixg, *pixb; PIX *pixmask4, *pixseed4, *pixsf4, *pixd4, *pixd; static char mainName[] = "pagesegtest2"; if (argc != 4) return ERROR_INT(" Syntax: pagesegtest2 filein thresh fileout", mainName, 1); filein = argv[1]; thresh = atoi(argv[2]); fileout = argv[3]; /* Get a 1 bpp version of the page */ if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); if (pixGetDepth(pixs) == 32) pixg = pixConvertRGBToGrayFast(pixs); else pixg = pixClone(pixs); if (pixGetDepth(pixg) == 8) pixb = pixThresholdToBinary(pixg, thresh); else pixb = pixClone(pixg); /* Make seed and mask, and fill seed into mask */ pixseed4 = pixMorphSequence(pixb, seed_sequence, 0); pixmask4 = pixMorphSequence(pixb, mask_sequence, 0); pixsf4 = pixSeedfillBinary(NULL, pixseed4, pixmask4, 8); pixd4 = pixMorphSequence(pixsf4, dilation_sequence, 0); /* Mask at full resolution */ pixd = pixExpandBinaryPower2(pixd4, 4); pixWrite(fileout, pixd, IFF_TIFF_G4); /* Extract non-image parts (e.g., text) at full resolution */ pixSubtract(pixb, pixb, pixd); pixDisplayWithTitle(pixseed4, 400, 100, "halftone seed", DFLAG); pixDisplayWithTitle(pixmask4, 100, 100, "halftone seed mask", DFLAG); pixDisplayWithTitle(pixd4, 700, 100, "halftone mask", DFLAG); pixDisplayWithTitle(pixb, 1000, 100, "non-halftone", DFLAG); #if 1 pixWrite("junkseed", pixseed4, IFF_TIFF_G4); pixWrite("junkmask", pixmask4, IFF_TIFF_G4); pixWrite("junkfill", pixd4, IFF_TIFF_G4); pixWrite("junktext", pixb, IFF_TIFF_G4); #endif pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixseed4); pixDestroy(&pixmask4); pixDestroy(&pixsf4); pixDestroy(&pixd4); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/graymorphtest.c0000640000175000017500000000646712242266327015547 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * graymorphtest.c * * Implements basic grayscale morphology; tests speed * */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 wsize, hsize, w, h, d; PIX *pixs, *pixd; static char mainName[] = "graymorphtest"; if (argc != 5) return ERROR_INT(" Syntax: graymorphtest filein wsize hsize fileout", mainName, 1); filein = argv[1]; wsize = atoi(argv[2]); hsize = atoi(argv[3]); fileout = argv[4]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return ERROR_INT("pix not 8 bpp", mainName, 1); /* ---------- Choose an operation ---------- */ #if 1 pixd = pixDilateGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixErodeGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixOpenGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixCloseGray(pixs, wsize, hsize); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixTophat(pixs, wsize, hsize, TOPHAT_WHITE); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #elif 0 pixd = pixTophat(pixs, wsize, hsize, TOPHAT_BLACK); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); #endif /* ---------- Speed ---------- */ #if 0 startTimer(); pixd = pixCloseGray(pixs, wsize, hsize); fprintf(stderr, " Speed is %6.2f MPix/sec\n", (l_float32)(4 * w * h) / (1000000. * stopTimer())); pixWrite(fileout, pixd, IFF_PNG); #endif pixDestroy(&pixs); return 0; } leptonica-1.70/prog/brothers.150.jpg0000444000175000017500000023663610646052226015333 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀœM"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ác ˜ ‰8ÅN:W9¸˜9ö§c"—  fjQô¥‘GÍLÈRŽ”œRö ô÷  RšCÔScšR8£š_á b Ígœb—Nâ—Ô½H  µ v¥#÷hwš9¥#4¤b€n3AíN B8 £-îÒÖ€¿…€3ÎhÆx¥·µ.>j3øPyã£4)@ÁãŠ1Å"óN:v¤^þô þ´wçšrŒšN@ Ž 7œ qæŽ(†‚21ü©À ü=E ^iGS@88¥ãu(â“çÒƒŠN£é@8Å #úÒãu!àŒf€šL{t¥ŽƒÖ#ð¤QÅ?nAâŒ`P#¿/zP¿‰¤NsÀ¡GÒœG­"©õǽ094£½'¿8 sÁ oñFzfœjqߊN;Üp8¥ž¦ ÖŒiJâ˜Ó4”à:Rvæ é×½S¸#Þ›Î)€`P<ÒŠQÔñ@ #Ò ëN4‡¥#aGzyãÒ“ôéHBtïH$šqÎŒPYsŽÔ {ÒôéJ´“ N£¡ˆw©V‘CºŠîœÐiW¥1 >î{оôvÅ s“@ ½éqHF{ÒƒÅ1 8¤n´´§ë@ï@4˜ uã¥'V§úS3ÏãO â—½ÅúPâ“S³ëH@æ€ ` \òi/ Rž¦“µèGÒ—š)?‹­(“€hé’j$¸ŠRÈ’)uê  ‰ÉàQœSWŒÐämë@ô¥ãô¦E5çŠÌŽª=I  qF9÷ïUÍõ² w·|Ó¢¼·p̲¡©ÝE‚åž 7‹":†R„RŒÐ⎔u ñß4àx¦ý)ÀñHÆ A9f—“ëLD;™¹Ó˜í'áúQH °4ãÀô ÷æ—Åð5r4îÔ‡°¤ù³ÇJLàŠqô¤ÆGáÏZJf=ºS³Çcåõ4¸ ý(ÏZw^39¾”`‘KÖŽÇ9 éIÀ¸Å 3@f{â—ƒI×4¸êO4‹“ÞÛ¤ÔRƒÒ”w¥ b€œ·µ8 @4˜£ÓŽ?ýTŠ=h¬xÏjL{Ò㊠Ç ã#šN‡§~˜'¥M!îý¨è(¸äzÒ€1ÞÊ—4”*AÚ£QÁ©BáqRP´(£=3J½iˆëšPxôô¤ÇZQÁ¦!hïÒ—ŒQÛ P”áÈãµ'n”ù^´˜ô¥4†(;þ4þOåIž´ ä{S#¸àf“==éØÂÒ5# ƒBàSˆ¦c;Ó±ÇjiàƒÞžyu BE(<Ó~o­.9 =iéA9"œAÏ\Ps¹Kw|@'Íøho®fn¸þfºIÃw pvšät{{»‰.#‚o)?‰€äšhLì· qÍf[é5)ÌÊVÜ}Ê£¦=ë›ËF›/ÝsÎ)¶7—³Yß+HZXþïX/s£RFrk+UÒ>Ý}¯»$ŸJÊÒä>t%.Ÿí ÿ¼G<]Vq=4l=Î3VÑ›N…$YK«ö«vþy¬ÒO´î7cµZñJ±´‰òpíZúp'M€±ç`§} °ëXµ´q Û“R«#gkŽ85ÎøŠ)~Óo²fU‘¶à‡Ö¬e\ZiÓGm1i%Á,Ǭ;›QKä««cÐÔ”÷¸‹–×U·Œ\©,ß0VÈúÓX¦O6Üo#>¢‹Έ:T0Èíšr÷5̤SGâvŽ6b¸,r}E%ÔÚÒ¬ÒnX£ˆäïQ`¹ÒM#ÅlîªY€$Þ¸»ûíRhÚw$LÜ mÍkÜÝj?ØQݬ‹Æ_ŽqUuU’m+Ov;É#-ß&š@ÙÒi‰$zuºÈİA’jËw÷®gUº¿7PÙZ’£h?!äÕ½%51,âå¤òöáwã­&3PÝ@’ùm2oô'š—?8Çqœ×%¤‡Rxnœ£¹áÛÖ»{5E·AÏ­ “îãQüés2)ªÌÌr0)õ&úô£Ûh æ®(#Þ” ù4vãõ¦¶p)ÔP‘H¬®2§#ÚÔhÀSÆ(c'­# Rç¡ õ4€L€zæ—¯ ã&˜Çç@â‚NhãÖ'ÖõâÉ÷¥È½!8ǽ7ÙíN#4­½'zwAøÒw¤uPx¸Å/µ&›Œ¥<âã=(%2V¦SQ à R1qÅ âŒö¤'&˜ Fæ”QÞ8¦!ã§Ò”sÅ47 óLÚŠ3ƒFFüP¸Hy¢€ ÒñBô c€ã·\RLÓ2qÇZTjsO#™‘OÈÀ jEÉ=¥=(&„¨Àæ—µž(ÇjhPH9ç4þ¿Ji8Ǩ§g=( Æ’;YL)¾M§ ë\þÕ´÷ $.pF2k¨##€sÅ4ÂÇ3§½Ü7·—RÚI‡ ~”Ý=o¶_4P¼lÿ2ó]HàâpH¦˜¬r¦ÖòòælÌ«òôº¥ JwÝÀâ“­é÷ú„‹[|…äd÷­K(¤µÓ¢Ž_žEâ­þ4£Í-BÇ7âš[»h"›kÈ¥_ÖÅÁÒ[ÈvìuÇzÔã=©xn)°±ÄZÛ\ùÖ— fʈÀÇ^zšÕ¿Šî v;¸-ÚU+‚t{@ã¾Ôî+ô0ß7ˆŒï Xö`‘Ð V[ÝÉ,·QɲܒBÊ>•ÛqÒš"Œ9p«¸õ8¢ác˜–âæo¤ÚVŒqÓÔ—PêØXÅ£/  ê°AHN(ŽsV±¿’kkëd"UQ¹GPkCL}JâšéDdŒ"ãúÖ°( JW ÈÒu •×j…CgÎÎXJŸZšêÎ(Ö*˜H$úß›c w ¶.Ö±´ƒçÚ7}qOÇ¥’)G T€¨ÅÔtè(J;tëA<þ4ãÒ€f“8§Æ Æ(Ï8¤9Èô¥Ïz Ïj'8¥8ÈÍ!<Ðy “KQ@ëK@ÆisÚ“u£¸ô "N&üPô™ ŒŠ=(õ ŒsNëô¦öõ óõ¥ü©(ãš)8<ÒôÍœsøPƒïNüi3“A$(½3“ô£íFx£4†f Æ*N”ÄáÚ¤ #SHäPX“Ò‚pÕDŽ4ƒÞœóKŸNôüt¥ɦnÀ§´À^ÔtÒO”µês@9┑Å{Óà ~¨ÉË “Ž=(3†¹æ“¶Iæ€2hrwR‘žôÑÔÓ½¨°ÁsAü)£<“N^zГž”dG§4ÒOa@ ’Mè1GaKÔÑ`8nE8´ÓIëKÇМƒNÏö¤ÇÍÛŠSŒâ€9#7#ÅF ç§jx‡QšU´½­8tÒãÞàæßšLq@sNþTœ‘@ eveÚÁ@<ñÖ¥aœ hãž´ìŽh1Æ(šO~Ôüäæ˜ Œ”¤sHN})sÇJ@gñ Œv¥î)ŒÐädzÒ¡O=(éÒ€(žô:Ò俀#ò‡šdÉÎ1ŒÓÛ§gšN}(¡pÜR28ëKÔñJG84ЏÑŽ ô ö4ã¥'l{ÒäSüè…sô»rÅ.Ü./q@ òàÓ”Öœœ \ó@†²’}©vt4¹íÍ&~lP4 µ ¤jv}:ÐyÅ3iœñNQÉ9Í©Í.Üw œn?ΘÏNE8|ÍJ0èÃ(Æiyé@ã¯jLAÁ$R÷¤Æ{Q° ‚Z”žy£§j,i7„Œf—¾hïŒPy`iÜÿú©¹Àö§ך@f-; Í"RpiV½¾ŠÊ2N‡€SX°ßêZ„Œm•U­W×§i¯Ä?€+£±¶[{HãP8ýjöZõv0î%ÕìÍw ¤òÎ*ö—¬­áò¤eíèkJDWB¬Žk’¼‡û3S#Æw-5®€ô:ÙËØöÖ*ɨê0ù¶òˆÐ=3WoŸI‘ÁÁd¤Ò¶.ŸR@ÉÁ¤†Çéâå!ÛtÁœwk½;nsÍyô V5Ö£s&¢Öv»CmûÍØÖÏC\ά“Øj‹|ƒåjheäÖ,âó¤£<€:V»´²iÌñŒLÉ=ê?QƒP‹åáÇU5jiⶈ¼®GzRÑMé†O¶g9ùsÖ´ÉÍS]FØÙ­ÈoÝ“ÔÓ?¶,vóÔ`ãšåå9n})ä TKÊ,±¶å=ÅNGJŠYV(Ë·@ ®}¼G4²0‚Ô°íëZºº¸Óå*!j¶…qi-°ŽÚê>lŽh3%×u%V’ ŠGÝ#­*þê÷™mö&2w¬½aÞ± °aÛi‚®þ¦·!ž…&)C×iÍ$ËÕ5+û9cH`ÞðØÏáZñ–eVq†#‘éU¦Ô­-åHd•|Æ8 Ö¦¹¹ŠÖ/6IWÔÐ2qÎM wLZ­gkz‚er:Ö­mÉ祸„s@?5+g ’¤™%eUI4 씎x¤Æ?©kªÙÞËåC0f8¨õ]^5FNéDxc¯¥+°ñU´-ÅŸÚ|Å)·=J­§ë¶·ƒ¼·Ý€§½sWnN(Üp*œÚ½•¹*ó*qƒRZß[ß)kyÔÐ2aœœö§ œzÖ]ƽco#Dò|ëÔR[ëV7"N¡@x W4>¿ÎŽKÞ³×[±7 LÔãž•mçŽ8üâãg®h ’…çŠ0䚤šÅ“#¿Ú*œdžõ<7pÜ'™ ‹"ú© DÿzŒÿ*¹ñ$ßG®äγҴ羷‚<’CКrÎNêNsÁéUlµ;[Ö"wÛ½Yç‘@\R&°~թɬü¶Ke'$ŽúÖé`ªKzÕ8µ;[‹Ï³ÄûÜ ½(\SÆZk1óǵR]VÒ+Ÿ!åÍUM~ÉîR%sÉÆqÅsk=sHM!íèiqÖÆç‘éJ Éæ¸#š^ôƒž:Q‚)úóAäõ¤téÖ“<óNè=éã=èâ”r('!Èé@±œ¯ÒœI"š1N<jJ8ÍHÕßw÷®Â&ÌJsÆakÖ " ˜×æ_¼=EI¤êÑe†g ëÀÏz½Ñ3oƒœ×/â­¨Fïmæ¶/58ma 9=šÇ·õ]LÏ"ˆÖšVk^š'Î ù⛥iÐÅw Ì—‘ž)5¡ ÓÌqFF@ô©´©¼ËD]¬»áŠÐÏ­8p*#ÐsOŽ) vAäÔEa½”íuÎ +|ÈÀ œW?¦Kycpþdä;rqÒšûK“L•nl‹í·µi_mºÐL²›``O­>êðÎolŽîünƨµš-0ZÇHì¡rD‡Ãj̆ 4ºn›ib²I³È8ÅHÖ—ø}íÊîp¼õ§hRN± y dØ8cÀ¦¢Y@°Ç«ëÖ¬´ÜóA'#†:DY« ÀðAª+go¦Å4ñ&ÒA&®¡Ë{V‰ìD¾Q>Ip()h+%æ­%ÔŸ6Ìž}ëªùÃdŠç|+2l–§~w] ’mF=1M’ŽÄ—¤·µÇqQÞ“S°T±k‰•Âv_j‚ÞOµêó^Î †N@㊞{“®ÜC1:¹ن)-ÕÌߨö¶êGŸpñéV­ôë=8Û–Rf'³É5ªñY^YÎÈJ *1Úª[\Üj:ƒÞa*vSL¯å•#*°;Öf¹8ƒN`Uظ mÝè •ü57AŽHà çpnô¶PÅkâ â‰v#FPxüª –³©Ü¶pFË,ž#y–7…+¹—𣨈u+H¿á&¶ ¸.C7=išâI±—(ÒZ p:{Õ‹ñ9ñ¼«…PX*ÝÅÜ©¨ýžîÜ5«¯ÊÁs@ Ðm,£¸šâÚmŸF ŠÝ,95Ìè–š­ÅÌa–ܪ#5Ñ÷éLcÉàV«¦Ýj7ѫȩf¼žy÷­ò?‹½rÌÒq`íÆs‚) bµœ6^#µK7àýà8©uûHî5»DÁloçµW¿˜Ùê\ÚÚ•]½ õ©õ‰n"½³Ô ' £+ט‰u½&M¾Î6…pÍ’NjmK´ŠÂ+›¥Ú[qìiÚ„Óê: È‘2ÛßÍTYàK·m\Çt&ÒÆïT–{‘N —'¥nh:UÆœf3•ú*œÖmµôúÄ–òÛ»BÎYHë[º~ ÷ÅÛìïc¡n§ð¡ÏÙiðOâ;˜¥ýäk“†ïI­i6ÖÚ…¬vÿºœj±eů‰åy#b²nÃÅSÖ/¤—UÌ,« ñ•ëÍhë:5œ:KM"óg¯Ö®XÀ'ðÒFù ÆzÔ:ÝÌséÀ>_TÉ«vŒÖÚi³ÄyÁíÅ!˜º6…m}je™ÜÄm§Ñ­›OÖ®,Ä›£)šMW¶µ²+3•%ÉcHÝy¬\_¬L##j1ïLFu¶› ljn"u>R’Ø©¼RŽ’Û|„Û(ä %ºŸMñ’ɤãåE[Ôõ¡i|Ëkg@NG<Ð4DÓf¾ûU³ùo·i„ö÷®hê1\^›wè–É] O˜ÿ…vL6ÑŸéI€æUte`#5Íhvñ¦·z©Œ/ íÍt7}žÖIŠ– 3…5Èh—Ûu©ÆÄLOA÷y¡ —äÒü$Èê‡Ê?9'¡5Š-!‚8ev2¼T³]²ø›póZ5]¬  ƒÄóI3Cn±±æÎ?Jb:-=‹ið%ŽÁ“øU† §¥;I¦Ã¾3 ‚¤sÅ\ê=jJBñ@Æ)1Ï4½úPcò¥ã‘HN:þ”t&€Ô€óŠC’xç…e©XiÀ8ïJ}ª"I8Ç€(0{SÏJbûÓ±ÅIC.ȬûÒ|¾Â¬»Åi‘ØRÀëš«‰™–úM½± »z·j¾)@ØSÅ!jb_ ”‘Åâ€ðzf’úSv䃟ÀSÈÉ QϵHq·¥ àS°iŒhÁ^”墠¹º†Î2SµER_Ø0$»b(§´©â•G=+;û{O#>wéWl„K e:P"RrN; ¤È/JqéHhhã4¼à®G½gêÄ:|«#37#¤½c¨Í0"ŠÞ(]š8ÕKuÀ©~Rµ+2¨%ˆÔš^½9 Q¢‚‚0¸­8* ù öœ †9¥* ïš‘¼I jǨ¥XÖ4Û…€SÏN{Rñšjç8€;SÀxý)ûØïJŸ*â€08£-Ð~5Mõk$¹Ç™¸µtšEP¼ð)®ŠÇ%ǵ=QK6’MAi{ê»@Û•N Çzœd¨íHsÁëNzÑÚ€{w €zŒz?‹µ;Ï¥""Ž‹ì)rjp ⃑€(88 €Ô¾ÄRý(£Ž)TuÍfϬZÁ|¶¤³J[QÒ´ûf€  S4o˜ b:dSŽA¤ÎO~( ©PJƒõ¥1£ðÀ­;gËFGn( (ÇzSv"œ…ûT„uæ›Ôs@ eFpYAúÒ¨Á"”rzð( –'Ò€W,O¡ÑåA#¦E8/99¡6(»AŒ£î*;¶E²›pv¿Jœ¯OLU[û3yhÐ,†2ßÄ(+ÃB9¬è”ír#­o€…P â±t}ãM¹b÷¡ÁÂŽæ·6ò(bC]œ•úT°]ó¢WÇLŒÕ‚™9ͼphY"Š$T€T­½)ÛFA=ir0(ÔÁæ£X"ò‘"ç© ]£µ NrM0…Ü­1Â4€°úTÅyö¦Ërx  F2;R“ŠN=iF) i3AãƒHZ_­!8£'#ŠNÔ¹ÃRgÛ Ò“Å&y‡úÑ´ BhÎ 3“§4ãÏJbô”àr:Ô”4œæ—<`Ò äf˜„ #½&zœf€0Z”–¨BƒòÑ»ŒMè¹Í;P»4ðMDÀö©WîÐ -Øu¥žÔÝ¿194ª;šEukä&9W+X:Þ•okf²AR Ít€÷¬JƒN*O,F4"¦‡§Z^i妈3–#9­‹e´ÓWì©( Ç!XóYþ?è2óüuZò-¾#…ˆëL]î ö<¨¬N0O4÷¸†‡•AÆpMsúÔH5 7P73`Ÿ^jYaŽãÄ(’¦äòúO’+YWïÆG¥l­Ü ¶5D›GÊkÄc˵ƒn0`zRh·Iq{/ÚûAÆßL{R¶Ô¿©ÅËÇ—"<°m ò}ªä—¶¶aRY•p8ɬ=J#¶nFò çÒª^Âú޹4>b¨^oJêí®áºMðÈzdS¤™"]ÎáTu$Õ"Á4øMåŽXúvª–ÒØ0¸m±äA d‘j¶W2„Žufô©d»·YÖ&‘C‘œ\„±ÛÁygäÇ"‚Ù,ÝXf´n£ŽO§Y~o~)ŠæôWÖÓÌcŽdv§Owo<éQ3Ó&¹»‹h´ÿÛýŸå É_Jm£Gsâ9ç$”ÚÀþ! defãÖº»‹˜íbó%8QXWÐÈlÊ*‚zŽ•««ù_Ù²¬N>´z½òI>Im=Mgø~â+;+‰&p‹æw¨¼5moäKràT3ÛŠ4(c¸kÁ(Þ7}ÓÈ †Þò ¨¼è\2 ¨†«ffò|ôÞ{f¹¯9­týB \KŽ; [}î-¢š+„ä“Ú‹ÖË"†G8QÔÕ{]^Òõ™bn<QjâM!¢‘ÉÚG| ÎðÅŒ&ÕçeBHÐRÍq«Ø LhMÀíÆ{Óîµ;[BÒª’:V—¦[ÿi]¬Ñ‡18(3øÕyí[TñÄO o ‘ØzSÕÅwÄ>tr+Gê F5K=Á~ÑãÀ«[UÑ´KœÈÒzcld†}ÎM 6[R³IŒ-pÇPMY ¬ žâ¸'Kžý&q$xa‚[“š×½Ô¥Ñ!·¶Ùæá9n‚‹Ñg=(Åai:ó_Ýù-nPsÒ¶ýhñMÏÍ֚ܞ´Š1!'¦)ýÃ$w¥éP°ùü)ê )ÓÀu"Œö¨ö²ºáÎ;Š^|ÃHƒ­.y¨Ô¶["£Á2˜ç®=i9äÒsœÐzÒƒÛ½!4ÜþæÆqÚši ‹ÜdÒsœv¤çƒKšBH`;\ãôx¡€Ò >ÔñÀâšE(Ž´€ÎáÞ‘i@ã5% +Ï|R´bŸéIÅ1 Ž´Ì:÷§óŸjkš¡ Pç¥.ÜñÍ(”s@h7fG4ñÓœR3cRƒŠÆç¾iÉ‚2 ç¥;Pc ŒÖ=ç‡ÅÝÉÜ0SÎÞ¸úVÊŒ qÀ4Ðú~˜,JìAUµ=[¹ãš B2ñóV¹ëO΀9Óáû‰’è±N¤öúV¯öjÿhGwæ6UvãÖ¯…ô£ŒÐ#VÑç¿Y' þ;Ôh$ðKo*« ñ]c­.Å1®tyîoÒå®Ù«Ž”Ëï ™ÍÄSänMm,Ñ´…‚ÝÆiÍ@ô3SMk}2Xf20$ÉïXÚu´Ú•…Ť’ÁW<ó]XÆ9¤DHÁÚ¡A<àP#<6îˆf»bé÷p8­>Šíª¥ßŸ÷1Á•£öÛe“Ë3&òqÜÔÙÈ 42/tgºÔâº.=*KÍ ©ÅÂÈñJ;­\šþÖ Ò $Vèµg¨â€1›Ay Ã\H̘'w|V¥Õº\@Ñ?F©ºh#žÔ°ðóÙÌ[íLc?À;ýjæ—£<ÊDÌÛûzV˜â”p:Ð3(hP,S£3?œrÄÕ  Í»Zñ¼€s±IмѡÃÈ öɧÆsF¢ žÍ.-šb†:Öv—¢>;°¹fCÑ1Çã[)ƒÖ˜Ä!Ë© f}––Ö—sÌf/æœò:TWú^\‹ˆçx¤îEk´ˆˆd,`gu6Úæ¸¼È:gQ4¤þÍ{IŸp9f<Ö]§‡ï¬å& ݱž¸k¥8Í/h} ®5$¼ûC€`éQÜhRO¨Çuö†ù!qŸÖ·sò@Ò‹C Sð÷ÛnEÄS¤ÆjtÒ=.KCrìÏÕÍkƒÍ˜Œ­;Lk+6·’S*ÇÅSžÒBÖo¼¤fºô¤#*ÓEŽ yQœ¼²ýùÕðÌ´‚+Ù ~uуóN  t'O{Svÿ1È c’ÛÃò-äw7>o—ÐcúÖþÞ{УÅ NÖk»'‚ÍÔŸJ‹OÓM¶žmg4{qŠÒÆ .:qÚ€9a᫸§cmuåFß\ý+~4†Ú8¥Ä¥78É5lôéAéEÄB±Æ¤UAO=E.)@ð c\|ÀŽÔ‡¨ÇZž)ßj@G’ð¥Lí4ìsNÀ…rÍšPÙŒTƒ¿ÖœÒ3Ôú¯½ÒeKpjá+Ðc>”Ü d `'V ~´«‘ž:ÒñŠoQÍ3¿5'jn9Í °ô  Òã9‘Gn½(!öëAÇOçK“M @Çc#ŠLb”}x¥âÀqA$-PO¥ICCÐÃÍ×­!ϨBò@GAH Ï)ˆw´ËFÖO6`¢NV¹›ë›Këë9Ž×?0Ï =*M]"¼Ô DBE 6Oè(¢‹S´“pYЕ<ô§.§m*¡Že>aÂûšç4{kk£pÆ6ª4ºªM7š@@ͳžæ€:­ÙéCé´’>†’9¢˜b9ŠðBœâž~´†64òÓ'êsNÏËÒŽi8'€BØ8¥Ý…'ÚšO^ôõDz9¦‚sNxúQëL±¤ Jû÷¥o»Å"P¿æÀ¤WÉÇJQËFŒzܑޑœ!Æ'¹=i2€þôÿ¥'|Rž´iëF9Î8£!¹¡¥íHõÜäSñ…¢€N!ç½/SJG±@Äç8¥Ç4c½/$piœsšz)3…©jŽÜÒÏJ ž´vÍ&'µàqL@§&”ŒÒɧ¯¯j¯OJSÖ›ž”ãž(/ZB»†r:ÒƒŒÓAä xfq‚)Ã¥(È Ž}©;ÒûP1p {õ¬Ó¢Yy/Çl–Ï5¡¸ç¼@Š’i6“[¥»Gò'ÝæŸ.—k-²@ÑþíN@UœñšpSÒ‰a¹[¯ÉÓïìËR³!ˆm”îz¼M!þt Ľ{U·V›<ç;Pô÷5z 6,°ÃÁ'ÖŸkm3Ï@JÄ’ÝêÈ'ŠÅ 7H‡Mó<¶f/Ô“Zr9¥Î4™È #ŠhÎãN#Ö“u WŒ P8¥<ûRçÀ¼ŸzàžiØÀô¡¨­ÂóÒ„ù»wÞ p)€Ðœõ⼚vì(Æh6PxÎ1Qº†‘F #jbxþ”Ðrzb€ ŠNž¦”qŠA¸8£Ú¿äÒ“Œ´„!íIÔR÷¥#&€ƒŠ\”¸ãŽ LsJ1Ž”„àõ¥"jiXâšœS‡"¤c{u¥Ð xëÞ¨ôåõæ˜n™¸¡†F£ñÞ€Ó€iPôàŠ9ÙŒóK‚ ç³KŒƒHË•Çzz¯„á»â€Zéè(J帤=¨9ÝÅ/SHÇÍN Þœi9&˜ Ž 7Ó½ºÒŠV¤^ ¤a³H:šRyâšG˜¦ vÈ.w·ýóXr0ÕncŒ(Œóœb¦·0ÚM±È’Å—€}ª¬MÍu×,Oü´#ê*Oí»cΕe «Q™&³]„ü…Wµ5®´™Ÿ²·‚‹®ºÝ†OïÇâ*A¬XuûB×,ZÙ§f[ghñÀb®[›eµÝ&žÎwc8  Ó«Øãþ>£þܰòØ~°šïLdÙúÔо›3K Xú ,ÚkV¤ ûŠwöÕ€8ûB×/¨Ç¸ÛmnQÁ u5kLû4ÎÐ][ dRÛ±‚h°\迵¬ˆÿ˜ÿ:–ÞúÚ䕊Uv@5ÉDÖ÷È‹l¢û}êõ” câ?*2v0é@$’ÇÜì=ɪO®éë!S0ã¸Su˜|ûTV"ËdãŠÃÕmm,mâ0¨}ýœÒ@΂fÆrvΣÞâ¬Û\Åp…á:ƒ‚Erº^‘ Ò9fTR8Zê-m"²ƒË…vŠa¸ÛÍRÞÅ£YIËœ ¢®C‡šããº{½qcš4uV : žïZ½žIÉ0‘“¸’Eubù›K Äp3Jα®Y€¤×-¥Ms©j‘ܲ#RÇCUüGw3ß>e: ýêé¯u[{C+Ÿ¦jkK¸ï`DÙCßÉ^<óh15Äd2¸Hç¢VîÂÒÙcˆ¬=K0ûÆ€¹Úöâ…`×;â%ŠÙ™Aäp*ΉªË žrÑã‘Þ•˜Û6øÆ&yæ¹HuÛÙ/gˆ&câ³ý¥7´c ƒN¹Ô稥f¥‰Àõ5ÁoP[‡¸B¹Æ**汪\O¥Úõ_4ÄwÅ z¸t ¬=Å;91\]¶§}g¥2„Ø©¬G­Y¼Ö/×N³~Pÿx㩨°i OÇjÝêÏnÑÈn>ñ©l5‹è<ùo•Ì@de{úQ`¹Ög'9¥ýq‘ëúŒ—i"¨13mTÅtÖ¦tëp¤Èü(ô4©ÀZÅ¿ñ-µœæV•‡ Ž‚° Õu;9.7›‘¿ßҩ—2ê,)™KA#Ÿz,;ûiþÓiáJïö©IÀÉíPÂaX …àw¬ o^ˆCqis'Ý.:ZC½K­{O´“Ë’`[¾ÞqVm/`¾|\àãµyÜq¡XžUv NBõ®…n×GÑKx9&<çñ§a\ë}sIߊâ­õÍNÒê#vY¢“ ;{Sõ zþMHÊ@¼)X¾I#‰ ’0UKUe’0èr¤pGz䔤ô4cÚÊyæœà˜Î:ÓVœOËøRË[<°O{2¹?Ʀµž=CRW¹\Ÿ(íšuÍ~Š ç4â°¼(À”)ÚãÔv5¡ÌYÞ‡²X‰íæSn³}Ù@=ªÅ†Ÿ=ÍÂ\>CóŸj¹ªÁq<) UY'JÀþL/û´b¡{}jÝ£•® ‹ËU :Ôzâ¤Ñ¬Cí¹¸;?"ŸçDÌe‹Pa÷w1@¶Â7‰Q@ažSÖîE¥ØB»ð*ÝŸüxÅŽ>AXÞ&Ç—'M )hËl¬óÝ`€p 3Wç»– äkm)!U;-ƒK ë¹|àö­3mmax—’K «õ5LFtZ¬‘(‹ÊËo,äŽ@ÍB"žóTÛ±\Œ–ZFN[×zV²¯ô {³¼f9Vè¸Ú(iWÖ–’\þñV"ß/¸­«øõ]£F §žõ“…bY–fe€ÅoÁvÑ¢Pª\Häl<¸|E(r9fªÍ4–7W ‹‡È89âº|=Þ5ÊHC£Ö³`ðì·ËænŠelÝ‹€xbíÒ魉ʰÈö5‰œgžþ5½¥hÑi¨YˆyVÇJf« ¦¥*È$(ãƒÆr)_P¶†v·sΉÃa€8úU-JxßE±Œ:—QÈ« ÿ„~Õ´ï²d‚âýóXƒDyoŤqºÃù¥a÷©ŠÅ #º·Èȹö»+f4v¥[`¶ý*•ï‡"º”ÆP霊ÓÓì"Óí„óýæ=I¢ã±Ïé/öÕá çñ¬»{¶‚öîDPĆê8®¡4xïšåKå³òƒÇ4CáÛHa–c(#'°ö¢ác“eFÒDžq/æsaVï&™òÍö°­vð¬"Í£YO˜NC‘Ò¦“Ãq¶˜–«!­»yîh¸X¥«ÝE&FÁŽW8íÅgß]Dú” Ùe$‘é]·Mkf;‹ò_Þ«'…!ÒFòæF9W ¢à‘©Ü$–Z|‰€UpqÛ¥¨jj4 ÃÊ ¸ã­] [>Ÿ¶ö ‡!êí–—mchmÕw+}âÝè¸Xæ¼;wilvË–™ØÎ+GÅüÚÛóüÒ®ÚøvÎÚûí)¸œåTôvûOƒP‹Ëœ3Á‘EÆr:½Ê͆×RÊ:©Ïu÷£Jœ'‰³1+“ô­Û? ÚÚÜù¬Í.>ê·ARÚ¶¢.Á`wn(:EÅc`7¬ zÖÚ *âHâ îFX§5¿—¥r7ÐëzŒò[4[`-Çõ  ÿåµkunGÍÁúV·Œ7`ˆ]Ý1Å3MÐolõXöãÉ, t—Öú„Té¸uÔ0±Åj·qÝC`±8bŠØÕvê oìáü‘(óµ·eá›;;8–º ¬¹­-õMV[iax.7y{Ñp!ñ °\Ae<'÷\¨8ô«Z­Ý½æ€L/••IÇSZ×:µÎŸ™Ê¬u‡Z–=Ñ4ÿ±Ìg“ž¤úÒ¸XäµKèfÓ­"iØ8<Ž)ú•Ìͧ2¨< Ãñé[§Â¶BŒË6wg‘íOo X»FpÃ`ìzÓ¸XÉÕgþ 4eÇÖ«LV?È„q¹ù‹z]Ú´×évK¸ù{Rj¶Ô%±d“£ïEÇbÖŸ5´¶¿è¿êÔíôª>(è®IÁÜ1Zv¶‰gAÂ(Æ}i/ì"ÔmL’¨ Ò’YwxIÓp%däwÖ—‡§·j+J†Qœ)=*õžmii5»fE—ïL³ðå¤í ÜùJwŽsL¾Ž riebw–QSFž£remŠùúæº|1e ÙŸæaœª‚sá› —ó6´g<í=h¸Ôx:ëg¬ÃÖ‹™!oÚ®SÎ ÐuÅuÏ¢Ù½‡ØÄ{cÎxëŸZ§…¬¡¹åÝGDcÆh¸X篒!` 6&ÿj¸Ò!ñlap@㟥lÞørÚòñ',SÜ£Tmá¨?´EÒ;*ƒ¾ô\,gY·üU³äƒÁ¬¸åŽ-rvÂǽ·3Æ{W]…Z‘¼WmÇ9^£š§{á[{™Ì©#FXå€\,iØÉm=¢=¾ß/¶*Ör*ìí–†jaR4ïõ£‚1ÞœQšoC@Ã}iªÁËŸ–œ~ñ u ç¥ÉÉ ®MR3Û4gÞŠ Á¤@…$ŸêÎ:âÐæ›!Ûojrö2¼޼íÆ©Î&Oœï\òAÍX‚TV¼/Ѳ:õ¦½ù:oÙ~e=O¥h@°^\Cn‘<-’G&˜5Ôì2;F3ש«ÖöÝZy’îl( ŠÌhöJa*ÙÓÚ˜µ-}¢æ(¡-7—ò£«F²ø~R çqõ5«]$…"Oùf«¶ž_ü#³|·%…!›soÓáõÚ+#įòD¸èkKGÀÓaúV‰ˆòcgu.¡Ð¯§ÜC‹0”°õªku4W0¼Û‚«óÕ%¬Fm-ˆÁòä Gµjj0E`²ÄÊJŽ1T"6ÔZöwŽÞäCŽ8µWQÕî%Š[YcU'Œ©§ÚÚîÓK@~ÒƒŒTOgxÖÒMr§åqɤ1òi·JK‡—€¿sÚ¬Y?›y§6Wò©æÔ-âÒ!Gå(0žõOLtkû0¤úšb:Yîc´·yd8U棱Ԣ¾…¤L€;5gø‰CX¹ëTô›M’ïÌl²0+Ú§¡F¼7Í%Ô² ã6È1×58Õ--)™v)Á"¹$1]N䀈@àñI§ÛEs¥Ý´ŒsÊóÞ˜Ž¡uK?(Lg@§¡ÍN.#1y¡N¹ÏÆÃb³i\<¿p£Ò–YæA…L#±Q`¹×Ãy û„r+× ŸY³¶ŸÊ–]¬:ÖF¦4,nƒåL|`÷¬0#–kƒrÎdä®;š,;;mZ«Ö‚.p»·†­Í”†t÷—ŸfŠVIEÝϹˆïõMJG¹ŽeŠ(¾ðÏWM©FN{”5ÊiP#hºƒ± Ž´ÒYê- yæxŨ,™ê{Õ™µ;8„lÓ ÷Nz×!ör|1æ‚@äûö¦ÝY¬z µÃiY°9è=(°\íd½†ÖWuzñM‹S³¶Åq?Zä®f-c¦Ú’ 6 üé×ZtQëvöë–²cpV÷ ±õ+X®’ÝæQ)覞/íšàÛ¬ªf r´)ÿ $1'p–hV/ıä œj·c©ÞÍâ¶iCB¬ÝaZwší¥œëÎsßhÈ‹§l·ñ]ÄJ¸FÜ>ë3Qn/.þÏ‘U÷;@¼z¬¶Þz̦02NzT+¨éÏ,DOù8R:šätëS>‰|ÁÊ•ÁÇcŽiú/ÿ~Ò”8ã{Ñ`¹Ýš¡u¬ØÛ:£N»˜ãœ}jã¦èYA#ƒÍp–«&©5¬ˆdrÅWØç­×ê:¼ЄYÕe|‡Z’MbÒÆ(EÌÁÝÀû½ýëšñ%¬P]YÃàì ~™¨µË%]JÖÈÞŠ¿Ò€:mkVû€šÙ‘‰`Nj[ R‹H%–DY$w5‡¬ipéú@YÈ|†=³YMe·DKÂX¹|ž .w²O CÌ’@«ŽçІKûXàóŒñìèz×4ßhº·ŠæIV žsÛ­^¹Ñ…¾‡4ì[!÷ '¢Ñ`:”Ô­$•"ǽù5m¾Qœ€&¹?höóÇóHûÕËž3]<똟®6šL Vú͵Ôò$R‚# Ž~´äÖlÝA*ùqðÇÒ¹Ÿ[¤×W¡HÈüèÑíâ{ GÍRáÇ=ÆiÙÁq ÔBXd‡¸4æ #@ú×=ᛇû}=8­ËˆÖX 6pr !œ¶™­]ÿl4ζIè1]Tp]G¾U—§¸ [8¦ÖZÙ‹y{ˆÈëR@òØ]ÞÇ¥UïÖ‰;}l&ò<ôó?»žj9u[(ÝÒK„ £$f¸í+J}IÄÂr¬æ=ÅV–ÅŽ´lË’L›K,;õµÜ7‘ùHsÔT å¹«;HÒÓLŠDI|Ííž+HRqIN£ƒÒÆœH;™ $v¤ÏzRF)ªx4€O~ôzÓ|SU@æ€2E@B1Æ)8¡¾á=ñHg' ;u6oùf²óùÕýSL7f~~…}j+(¼óz¬~lñZb__[ÅJ¶âTníZGÍõœ ñÛŽ•Çs%ÂÌ#mé~™­oí™7ªÊŠžAúU»Ór¯»`€½¨¯§®Ï>i•²rBÔšzbÚûo)´€}j]*Éd™¢Ÿ.Aö­‹¸¢·ÓeXÕQvž‚€C4oŸM‹8â¨ø˜".9ÝÖ­èlœœó“Px—Í£Rê>†fœ¦K?%X¯™&Öa銘Y_ióºD†XœsŠMØÝØÏ¹V oCN»ºÔôæd˜8=0)±!–óÞZ»ˆ,Ø+uR æ§‘u‹èÊX£={Uصè^0Bç?J¡uª4–“lo-Ü©P>ô5žkf‚K‰I*¾€â¨èÅN¸…W'Ò¡‚帆ÞiWpÛsúÖ„I‰YaT1ô¦#CÄP—Ó‰@KàU-íRXI ‹8$}ã] òÅlòu&¨Á¬YOp-á,Iž…ð® ©ûÒ\XÞÜhV©ä9tr6ޏõÅv›†9â—+Œâ‹ˆâ.´[Ëk;i„{XÓ½-åÓËyg¨2ìÆ'®a]N§j÷ÖmR˜˜÷¬¨ü94G ÍÖèÓ¢ªÿZ.3µÛk…Ôã¾·X óU®-59u8æh™d—Hè+¹H–(Õ|ª¤ ÈZ.8èlµ$ñvŒÇ—ÆF1PÃg¨Ù^ÞE%Õ•b8#µvÀ¨~£4㌚.¢Ù^6Ÿ~‚6Ð…c&¢Ñm5¼H”IQ¾çÈÀÿë×as}me<Š™éš0èrÈ#½pÞ[l 68Íq±Øë:¡™"òž_k´ŒÐOp)&+âK Éî-§Š2ä(ocPkº€{ü’ÒªŒíù³]ˆ!¸ÈÈ¥8êN09½VBëBQ4{¦-¹•GAX\Éý”¶.„:È^ä}+Ð'š8!y¤lF£$ûV]¥®™¨]Fæ8<ƒÑOÒ‹ÎÝéWÖñZݬeÙe@ÎÜV¬£SÔ´)XU]°Uq‚Et˜\{R61À¢ácÑ,utŽ`ñ[ÄÛ°xÉ®ª`ͪõ*@§™ÜÊ é“Šxù¹Å 9 OÔlï¦Fˆª:,J“OÓoílõš,åç©®·i Ñp9Ÿ X]Û4ÒL¬‘°ÀVî}k XÆžj\àJ@¢ã83c©Yê*Ä7Nü|¸õ©´­:ká{1ÃR¡s]må¢ÞBbveS×iÆ}ªKx"¶…b‰Eè)ÜV8í5;;ãn–åUÎYx«ë67qk,qIó¶Q”gšî"¸†gq*pØíOÞ­éEÂÆ^…esonïtù’FÜFzV§BN(GWRPƒƒŽ)pi…:šiëÅ¡ã½;RSIëJIâ“‚:ѨyúÒNíIÔ@&x4Rœ Ö€2jI0"<ö¡M#ÊE!˜º! =Ðï»5ä~DÞ[’mÉAíK§ÉöYn˜©![½jû½¾§ò|ÁÓ<WÖäy/¡ŠúÝ.-ðÍÞ8¤•-Þš(ä0iÑ\\ØHVæ(‰ ½‚Úv–Ý ýøÏ¦´IËjRrr¼f¶µÝe(ÿd×0Òçûe¸`¡³È­˜õ8ﬥçlV†º ÿ‰tSQx‰Ðï¸SôÆÄz8¦ø‡&áÆáK¨xhâ ‰2]Vöy¥šÕqg‘Rh÷ǧýŸþZ¾àúU.x’;¸¥m»”â‹kT½’÷L·¸@@Vù‡¡ ë—é í,í>øªH§Dš3¸lŒt5 iQ¨r\?+šb5å×Ü$x´'#¯­ˆgŽñV•8'#­dÔé+îCç· '¶ÝB¨$ŠÙ³ÖîäÕR9SlRtVŠŸPפŽíá´ÌdûÄŠ§(kŸ@ª8P9•M$d×åUqy ±>” Û_ÒÛE‰7m ؚʟVÕ²‹òL>QŽ+SW´·“KP³G)Êú\ìÉp¶ÑN× ÁNÉZtæk/BW|< dƒÏZÃ]{RY~ÒÄ´Lq´—éZš´ÓMáØåÈÃ(ÝX²J¢EºîF%—½jjºÅÚ%¼°¯–wnÖ¶—~Ú†—æ²îeX3XZœåt{H/Ì€ôæµt9`‚ÚÜïe]ÌØÀÉ¡ì3–[{‰ïäXc%ÃG\s] þ«wi(йO¿ÎIÅPÓçþ#—q32ûf£¾2\j7k9\Æ9À„j_ksÿe[ÝBž[3`ƒÍ2ó[¿ŠÚÒãË ®9ÏñVL­ÿ p9ħ'Ò­k7QI¦XDŽªçƒÒ˜zŽ·7“ ½ºí¹™AÎ~îjµŽ³¨Cs%¥Â‰)#<`ýk?R”}¦Êàq˜Ô’=©ÑÏöÍ|H€ ƒôâ¢]sV¹•2ç üêΧ«_]\½¥©Ùå ±S‚Äu¨<7u¹•—‘€ Žj ø¡þÚ”Gt¨¬rÌLö  š#ꎣ ó34p‚ zûWbN:W ¢LÖšÓûáÁú ëtûá}h&S’0}©0G3âÆ™®àWPøO­\MNòÒêÖ cU¶t ¸äž*°ó-A÷$ÕmFý.®ìÑË´`g¿ dúeþ¡6³YcØ íSi’Y›m¶xhׂGsTüF£û"fÆOΗP2´­Zæ->iäûÂÌjÅÖ±ë3HÀÍ÷Ttúb¤Óf²mhevIX‘úURðI§ êCp‡åR}ê€ê´K›KYå†é[x™­SšÉðôòÜi ÎI*p ô­|T°ÏAÖ—8¤ÏÍœñG­!ŠNGÍ&iWÖØCHaJ{Ów`àqHÀ¸¤<ÒöÏ N”ˆ:ZVÏéH;R¹!¿†`iòÍü…w`ò* c„²]ZK±‹ §¥O£2kµoâ$Y³Û온ÎQŽáíVAÐ.§‘‰‡ïGÉ4Ø!±ÔÑÉ·ØÊpF0j7·ÈѸ Å&#hÊHÀt Šv Hî´1 ¶v#©CÞ²¤_)|è\ŒŒ2‘Òº››Û{`<× };šætšîEY A!ù²(@·@B4Å'<’iuг$ÀÏ šŽVÆ–“9¯«ØN­ I•aŽEs–RNzr}zÖµ±}QÃí0Ú¨ÂÕ«"ê(­®q ¢D>‡ô®’Ã[µ$;LD`GÀ²‘Øé(¿u=IªÚ½Ù™#·ÇïrKÚ›®Æíåoš5l0öªñéÿf¾[…r` Oû´€§¥Ío`ó\Kó:|¨;“Vt)~ѬO+ ¥`+Dó%šEÉMÜ{ÖÆˆ‚-eãø1Ïj`t—V±^Û42Œ£UtXb´{PÌÈç,Mi»\œ*”z­£ÎbYÔ·N´€ŽÃD¶±g —cÆ[°ª“øjÚI‹G#Æ É~}VÒÞa’€Çô©f½·‘¤•B¿Ý$ÒÔ4"MÓì‚Ûa)ÔóÉ5DxZÝgÜec÷?úõ§.©i Š:†nœÔ‹lòyk2ôCC* ÛÅqæ3—N¡ X½ðü²+†1°àã¡yï-á`$•TžÄÔQkO)gRã­†‚Ç¥C äw*ìP.ßZ«{áÛ{»Ÿ83#–½]‚þÚéØE*¾Þ¸íLŸX³‚ábi—qëŽqOPЧ©irÖɃ g ™Çµ^·ó·™£Îvõëiî HÕÚEz1:S³ £ W†#¬*Ý$žFÀ©°t5¹¥iqi°C¸¹ÉcÅ>ÞöÒöFX¤GdíPksÍo§;à I?þªlžµkáv vÐx&®*ÒYšgˆa‰ô¬}XÛbd½¹³áwu­Ùnâ†ØLò(Ýš,E94+C§5¢‚¨[vsÎjªøVÓìþS3Ýýþ•£©isIË´uϪÑëö2NbópGC@ô&—D²žÚ;w>ZíVî)l4;=?&4,ç‚ÍÉ©'Õm-<³, û§ÔSaÕmg¹hu.;RÔD'@±¿iäŸáíŸZž×I´³I’(ø—ïR\ßÚÚcΙTúXÞ Ô/-L3[L‚ã¹£Qšš£<±!ÞsËâ³aðªË¢äí¹(ê{}*m7Ä«<‹Ôf)[€{Üžâ"ó%*œ“OQ]Ö­»¢åÆ ÿ ¿mk¤+ C£Š£c®ÙÞ\£rœÍ=µ»šHLß:g…iqe«/ºGZdÞ±•áb„y@ Ç­]…¡¸‰ãó?»¸S/µKK¢yB’xMB |=c5âܺá _xc’3€PŒc¶+Öµ«˜&·{9Tà È8ÎkrÖúØF%V™@, ô¦"ðÖž.<ÑãøAâ¬Ýèöw¢?:?¹Âí8⦻¾¶³BÓ̉èSKiw ä"X:ÿ*C*¾‹i-äw, ;qÒ¥½Ò­oáÌ>éVháBÒ8Py8ª6ºõ…åÁ‚90ݲ0ÒCBÕ¥œ6Ë \ õ¥šn h¤PÈýEs>%Ôä7‹d’˜ããyšÖÒ$·µÓwý¨Ëçç~ÔXEy¼3ÄÙÊ‚Aes”øbÅäLP¼;ûU›oé÷7©Ï†­•UŽX(ÔzŽ4Š%DPª£”ìÒ#E.9ņž´ŠR8  ÀfÄÁÆiØÈ©::R)ÉçŠ I€{Ò‘´ž Š@#„±û¢×Šilq@£š$áJj^½) ål/’Îöc( 1=½OyuepÆXܬ‡¨#†­—Ó­ZC!‰KéGöu§_!?*»Ü›ÄZœðÄñ¹ŒvJšKbE&q$|ýá]öm¡?êò¦.оBàûS¸Y™“k–Ž»¾Í¾Oö€¨ì䵺—ͺ’4 ~XÇµŽ‹bË$¡¨›A²þaøÑp3o®-ónåXBõy&–Âm4ÄEÀ\‚väsŠÕ±+Ÿ]ÔXãî·çEÅcö[(îâž×c"ýäÅj[êZ[åR3ß+RXäpüÿµJÞ²8ù\~4]Ì¡«ê°\Æ-á9Œ·aY÷7åHà²2&ºDÐlUB˜‹ÎIæ—ûÇÜ~¦‹…ŽrÁ h¶ÜÌ5mÛ{±«ú+‰õÙ¥Œ|˜8­_ì;p9÷«v¶6öKˆc ž¦‹ŠÆˆg1X²mfãëOÓѬþÛæâE$ô¿¬Ø›Ë&XÔG"±4›kÉàhöF ’Xw4-”¡·[«K™Ý˜œçÖ£žo7O·Rùdb1íVVÒþÉä¶û9o4`qÇÖ¤¼Ñî-ì`-ÎI/´gÔÄAsŠ 3ÆâÝýªÍÄi¯lbÆ S‘Þ‹ëkãšvÂ(<Õ«ý>å.ìä‚xÎ|ÐMQ<ÝyQ€*ÅGZa´ût[ªá3Œg­\¾³º}v)´•ät÷¥[;¯øI7ùfî½±B"±UƒT»ŽÊ… sÒ«iö‘ÝAtòré÷yæ¶­´Ùíõk’÷r)ÚÿZÂ’ÒòÆvá-¼ñކÜy­£@ÙÊ«y©5+$·±³œ2IŒ’jܺUÔ: "!i ›ÙGZ5;kû½6Èvܼ£‘é@.Tìں!íêzÓu{C³†$,¬~µ5Þ—¨ mb,Ê«È9æ¤Õ!—QÕa·ŒæT@$=”Ðév‚ßÄ&8wÑy'éZþ †9tÉ©%FAô«–tvQ¶ÒYÛï9êM7V¶žçO–+|o#¹ê) …¼PyJo˜8çîŠK¹Ýôû(¤vÛÉ?LÕy-î-cd”˜É8òûµk_h÷’éöo{™ ½éˆ¹5®„ì¶8 œóžÕÏË9%[vS»i“<é#²¿¼Ð ¼Ë¶_àŽ­e¾‰ª‹(¦Q_!ëïHa¬GÓ4éCJm<ö¦Þ[Ggye$“yäÓukK›+8f`@ã¸5sNÒïõ) {¬¤PýÒG'½1 –õÏ ¬Äc ƒÓŠEã ËÖ´«÷ÔD±D]F•1Z¶™wwaT 8#¿J`s÷Jªmf[ab ûÕýfHMþe¼ /ȃ§ÃáÝR{x˰Ê›‘]¾‹ByI8Pˆ¥p±_ÃAäL‘<­†Î\Vñíëõ¨ã†8P,hª?Ù <Ò¹KA ÉÆ1ëGn)OŠNØ©¸ïIœö§ïL y¡€âOJLgØP($Å Æi„ ô§”ž´ˆí3Býi“¿•È?„fÇÍ(8×9k¬]?š6ùÔqÒ¯Zê»ìyTn‚z» æ°?7µ/õ®mu«´Hñ%Z5=B:!`¤1ÞšB¹¿qy ¤aålqO†t‘¶T÷®wSy¥Óbi¢ÚÛ¹ö¢FæÎÖºX÷ GN§Š\ðMdÝk hü´Ý,ƒU—W»{ [ÊÛ"IR°ôÍ/%‡8®I5«ùÞ0ƒyÚ½k¨ËáBzÓrpqGãYZÕÝÅœHð‚px¬s©jv’+MÊ?¯Jë Å)uA–aSXZ¶©<Á $¬Ö¼Ô§‘lå\±<ñÍ`v9â”áG󨔉Aì¿Ò¹;Í^õîZXØÇmÿ챑“@9Îq\Ûëw_Øë:(Þ[k6:Uq­êç<µá˜¼h°nE.sÛšæ.µÛ¬[4(ñ’:äúR¦³{mz‘Ý"ªHxò(°\é”{S†Ü“Þ¹‹Írí§x­"ÈO¼qš½-åÛhë(M“0úb‹06ò) ©mÄf¹+=OP³¼H.˜²0ês×ÐÕsR¼µ½#ùc##Äh°:ôCèk²mÄzP’ÆF]wõ<Ôêv¶÷)m$d~ƒÆÆuuöØßé!SÀcXYá×mÚOÞ7Ë´æ€:]CIƒRòüâÀ'#i«q˜à1Û+¾s§RÔ-u…‚åÆÉGvÍ7LÔ¯ŸX’ ;‰ô ¨N})¢hÚS¸.:®yÊ\jšŒÒÜ=œÉäÂzdÕŸ ‹«››‹éøõ¢Àte¶dž­G Ô7E–Šœ0›x†KGQ€J‘Ï­qZeÍõ¥ä¶våDIìGzë( Œv¤¥r6zö¡;½žPÍÈz ÑÑu[‹‘qo9Vš!ÆÞôX.o £šâ¸{¹õ9C_ÂÛ5|cð«3ë:‡öSw»d X.vœ`TeˆÜ Ìkæã»×&úÞ¦¶v× ;XŸâ5fßY»¸ÕšÜJ¡YH@CŒÑ`¹Ô1ϳQý¦?µ nw•ÝÓŠçt{ý@ê“ÙÜÈ$ØàjMîöY¯^Wó3€}}¨¤àR‘ߥq¶º¶­|n!ˆ®ñÈ=6Š›NׯVÂîIñ'’ M Y;Sºk‰mW[6Âô:ˆ à`bº-*îòúØÉqˆºGqëJÀhÍ,PFÒJÁu$â²—ÄšsɰÈFz1¡ã $p¨?!~}ø¬‹ÐæÎÁÄ*‘ªÞc©ô¦‚çv0ѧ‚)۱ǥ`›ëã¦`¢C!;U@;ÃÓõMB×RH$Ȳ>ÒŸÊ€;†‘°XzzÓ€ä× ~u ŸÔ‘"·È3À¹¨jwznŸº«]?Êyã>´¬øÆ}é®H Ö‡¨ßÜ]Ëow îÇzÔ¼¹û-¤“ƒv(ÁcœÕ-WV‡Mƒ|™gnGS\ªjZ½×›}˜Ž3ó'aøRksMyggs 0#ƒÞ˜\è4­fmBrhñ®2µmgžkÃV×0Ú³Îìwãh'è‘֋…Œ]vd»Ó¢–Ý> 3S‹˜®4XäÉŽ?œgœÖ°ÓmVËì¢1嵞‘keˆ ²ÉÃnô¥p±Íéwvñè×vòJÛ8¿±á5#Mö.qOo X›€áX(<¦x5±ÛB#‰B¨ì9ÏÜÁÏÏ…gê·J4íŒ0dúWQ©iêp„”•*rv¦6ƒböÑBé‘FÏ4î+Þ§(·Ö­æÎün+³V,ÁRmÎyb•âÉqÓŠÐ\ÇJ.8«;Ŷñ$Ï0 3éRêóÅEnÎà*•<ö®ŠM&ÎKÑtÑ ïÚ‹Ý2ÖñÒIcðhþhî ûcã#¨#¨ª‘è j4eÕNrOz.0u›æm2Ý!gòXÄ®3ÅW2Ù¥ýœ±I•L9ÍuóéÖ×0ˆd‰LKŒ ¯ýƒaö˜¤…ÙЇëEÂÆÍÌkâÔ•Ü\dôÇÿÓYÌ­Á [wz¥Ýعu!‡$V®´û[»qñ‚ƒ§·Ò‹GD»µ˜´P‘‚†w#©«:ÃĶät5-†Ÿm§![tÀnXžµaâIQ‘Ô2ž=)uÁé·ºEì&EVaÀ=ê;™Ðíco¿¸²ý+©>Ó¼ï3cýÐÜTך •äj¬›6Œ)^0(¸¬I£Ü,úl% huj­…œv"û«Üõ5k¡¡ŒL1šk 0§½h=GzC àæ—ëÒ‚}qGõ nÛƒïšsÊ“¡Ïj@#‚¾i8`? s}©4ˆ:ŠSÖŒÓNp}é ÌÕ5Cg„@ Ÿ^Õ›ý¯0’2.w÷¾^•Z}ñ_ÈÓÆd¹Ï¥6I-·KSƒØžµh‹%¾©kpv >o~3WÖ4,O¸ÂÑLàG‰±ÆkgN¹{>d”çb‘øS°V÷†O2f•<ЃÓëS ÛvÛ‰“æéÏZÀ·…[Cœ‚zæ Òtñy—2•(ÜZë !9¬/3UšY0° Vê ب/ KIYW$  {{ÝVôºDч j฾†Æv¸Âº•‡z§á·-4àŽ¼ÖŽ¸û=Ûã¯ã@tÙ$šÂ'™ƒ3 æ­·jægó­í즎VŒñWï.æšú+(¤1åw3´°:dsH¹É&°Õ®4ÝJ(Œ¯,Sâ9"ª‹‹‰îï7Ë œ*šéÏŒT™ùkŽ…®.4Ùå{™q€ké÷£ûI4‡åÈÝžh°\×l‚sOUUN0+’·Ô$/t!–I7&zÕýc3“%ĆR>hÛúPâ™­bâ}¤·>õ-ž­Ú@×R¨yZ©âuF†Ü§Õ—q Ú@™œBØOsQÔãŒy+7•#•±ž*ÝÅüvV"W`ü sËW/©’[59ÉP ©uEßÀ®$’P¢Ã6­uÛ{·Ž4$;m=ªŸˆ/îmäˆC!@sÓ½TÐÞµvY (\~ïwj—Å6àô‡ >•«‹$jÈÀ«r®ÒÊÞÿÄ3@Äùd±íí-–ÖÙ!RHQ€I¡‚+^j6r,w ªîx¦nÈ_ A'Ïëڹߡ:­¿0ÆMR×í¢*ü®§Z\è!ñ •Åéµþn€ž„Òê:åžœá$bÎ…yÇÖ¹É-¡·ñ\1ƪ©qÚ­G¡M>§w5È#»iëšÜmjÄYý«Í=ºçÒ«§‰tö103Û§Ö¹{8a•oá,ÅK'ÔUíI¶¼Ó¤žAûÔc´“Àâ€:×töI\®#ëGöµœ–Op’«"Ž}k”Ñlb¸–ðJ„Sž¦¥Ãö^ Åw˜ÏJßÓuH͵ÅÜ×A“wÝÆ6­nÇÊG3¨YËšæNœás, ćÞàŒt¨e²„xb; ?y¿“NÁs®¸Õ-mU|ÙÆdc¸ªø—N•Ê™ c»Œ\q2N¶¡±°0QϽiköǨÚÃjÔghëÍ+ÎÊÞâ+˜Ä°t=Á©{óÒ«ØÛEenD¸P;ÕŒ CÊ—c·­Æ8ì)Þô¹¥éC3‘H8nix¦ã¿z@8ò9¦)äÓ‡áF98  5ëLšAN碌Óú úRH«$L¯ÐŒC9÷Ô.o‹‹{`ËÓ8ÍQ’KÛwF–´†aéeíÉwTà Ï5§¨ZµÝ¤¡žrzT·WÐÙÅæJئ;ÒÚÝÅy–"Jž9¦#2m.æk!Ü›£ š–ûL™¦†æ 4`ž†´žE ±À“J²‰p<ÔÐt}Ä·«wy"’œ"¯AM‹IžùçYT¤€ñŽkGÍD‹€¾¤ÔŠÁ›¨ÅcÛhóÃes ™I›§ UЋiélòà«dã¡­“€hë@XÅ´Ð^ÎêIPP©cš[=2ìê"æå‘vŒ|¿Å[[Á qNR›®YKya²—8õ¬»{„³´µ|‰ýÏåšì'µW6¶ïuö–LÈ£‚OJhG?©é7ŽmD*[j8ìj;ˆ57œD¬\ÀÖº(5Kk‹—·F>búбæÄ'Û•G¤P?§é÷×wñÝÞ ‚?lVüCaqwrB2c9*:šÚ_”Òä ç½޹ûmüöÖlTʃ¿Ãõ§_éú…òÝÆ ‡Œ0í]4V–¶­$ñƹË5QŸÄÖ‘ÌcDyqÁ*(:ËIÔ$ß;ˆ¤pNJ£¦5ùYííP:¹ÃŸJí£‘n­UðU$^0 eY&™§\¼qÏû×8 œÐwðó¦ˆÖêÛ§-¿Ž„úTVßézeÌ“©Ø‡œ{Öü…µÃ”ŠEf^ïRON†)aȤ3‹…utS,q™ã©ÆìÕï²>‘£I¾o.yNxíí]DEmŽ5 ƒ ¢H£›Ð69§qX­£™ßL…§bd#$žµâ 6ú}F)íÓz€1ŽÇ=ë§§¥!$š@sš–™~÷6÷–ê¦dQ¿´°ØÝ>¥|Éåà"ûWJ1Ò›*£DÊØÚF4ÂÇ4›Ù9bù–âSÓë]å´ ´Q³neP ¬ý+ŽSe#:îÁô5«»PÂÇ'©éš’k&êÓ'yá‡nÜÒk-ì¾D¨L¬ªzçÖºãÍ#ª²=ÅqE=Þµ%ÄíÛ²Ô—:>§i©´–›ˆðëÛ>µÓØé¶Ú~ã {KI95lòG9÷¢àAgnÖöQÄÌYÀäúšÁñ—}{:< 4;ƒ]/VÆj…öµmatJsòR‹©è÷÷FÍ@V* 9m¥Ôô+ÑsÝ¡ "žyÏ­t77±YƲ¸b€6ŒõªÍ¯X¥á¶g"Lӌӕ¬Gu=µ¶œ[}ÌŸ3ÜVu…•ì7Ú^G(µ/ÈìOo»Ao\}¤¨2㽪RÆà?. ý™¨Zk.-cp²cŒí £UŸs‚Ozá³ÓÚ—Œ{Ò Xå¡lÑ#2ôíÍ3S²ÔdÖmÝ#,ŠkÀõÍuäÎÏjäot+»qeÆ"làýÜVž¬Ú°Ac’´®!?‡&Jˆ¡Q:Í“ŒVuå¥üVñÝÜH ‚¡-“]–«§JÛÉ´]ò;Ö%¯‡<À>×rÆ8Øáz  z=Ô—º\SIä`ãÚ¯ÇJ†Ù!ŠÝc·Ëµ0éÿ× bhÎHÎqO<i9íH`ÙÇEž´ƒ’•šR8âŒñÏZ.pF1KÀ4ƒ§©Ãš@`‘Æ=i²±HX…Ü@è*Z†å™ ‘—¨SHg4××Ï!‘[nÃÊ —Pº{Í1$+› UmJóÉ3œ…'ƒN–á_JTÈzЩ5Í¥‰!B‰8 Þ®iÚÌ6ïæ#2Æ£¾‘H·ÚA=µJ²G.†c²è¹aCXu;é¤ÉStÅS:½ç›"¤à t«ºEÌrX˜7œõ—­¾©ºfÆÒsš`tút’Ïd­0*þõ‰®ÜÎn– qŽõÐ[L'dLí=21X>!;o!=‚ÿZž¡Ðmã^¶”Ì@*‘†ïŠdWVÚJIÊŠÿ7¹­FHî´_26(Õ È<7´·™Ðv¦·Ú•Ô–ö²'Ë¿¨ÍO«N‘GlªIdç¦k>d‘4ë'~"ÝÛ¨©õso,:K´•ãõ EXEôÌlÔ–óß×B¾LjX(ÈFE­ÔÆö-ó®ÕAê}(cG#&§¨5ô±£Ä• Ž•nMZúÆÖ%š0e|à·Z¨òLjžIxU~MYñ VÖá>냊jjš„°O*çp¥‚öùôI¤£}ã×ig·¹Ò%òÜ4«̬»{¸“Bž ß½fàcµ,¦·wš¤•.ÇhcÔSmõ ë¤IϘ’àò}}+9¹Óc#oAõ«ºƒ ¾Ãä°r ¹¦Ë›þNУàzU)ö}uÒ912±ƒÀ©­ä0ø‡k63òþ8¨£¸û»$³pONh²·,¬Ç2mˆõ¬j2[·ˆò½é[Ò¡IJ•,3ƒÚ¹oºœ<ô\þµ=FÇi·wv÷ÂÊì–Ixùò¬ÔŽq«¼Vˉ •v­–+ÍjÐÂŶ¨ GlTzcFž&l¾Fæš ;8P¤¬rB€k™Ô‘ ñ%«`ÕÔñ¹ ZXÛÄPR9éSÔŽH"k¶eÚ%'çÓÞ´o5Qk7”±4®s=*[{+hŸÏ†0Yùß×5†—1Ùø‚å¯#8“„b3Å4ŒšôCNŽèD͹¶íïš±§jÑ^ÚÈá 4yOj¡¬\›+h–ÖÕJ7Ìo Yºr]Ém¨®Hè8ëF€‹}}e˜*ÛLÑ–Àp8©ŸYV¸hm ’iSï0RÑ5šÉlö•œ1·¿­VÓ®[JÔî–ñ[÷œ‡ÇZ`oZjpÜÃ,¬ f3‡ ü5:§ÚÛlvóÛ KŽ aí¼»·Ôg…A'*ëô­]#S·’Í-Ô–4ù1H ½;QþÏ3GFViˆÀ­©5F·µI±‰ùcÎI®bɥ޿køÐ¿—&Jã¨5T™®à‚øBÞ\n jÕÒõØõ–‡ËhÜ €k_¯$Ö.yi7›u©j圮3Z6W±_Àd„äƒí@#7_Ô.­-”[Œo8/é\í½þ£ir. ‰êÙµ|ZÏäÛà°BH#Ö¹éäZ·WlúûSBg¤D “Éë\‰£vÖ-÷0Øús]>Ÿp.-¢”—85Ìø®U•°ÏÜ#ñ©ê2]V[È5{H¡™Š•ZÎבÓ]$…RvEKªßÆúµÔdí ¤ŸÆ›âI]V')EäzS_Ãú•ô÷Á0"íT®u-Nêöæ¦XÖOdT´«¿°ëA!%¡í#Ö–ˆ!ñírˆ±È=Í1v—-ÄÖ½ÂâB¼ñŠÈñåü«FÆ8÷`²žµ½«=¸‘ ÊÃñTÑ®˜±¶K³e ž£{2\ê¦ÊÞýå>R¯=Mkê³_ÝA Û¿•ż·r}+ õ—A‚ÄóCòíV®.šÓV³K’|ˆã_—ÓŠ¡躥în-Y÷²¡)»“š«m©ëWWGg1·Ì¸½ê]£ ¸òÁØCmÒ¢Ðïa´Õ'2îùÉUu9¡ñ½»×LEÈŸvžt²Ú^H&r÷zƒ\ÝÝȶñO°íGÎ;šëþÕçiipa ›ˆ=E&4qúSê_¾†ÒB¾X,F+NÃ[Ô/`xUÑeI.GZÎүᵺ»i"§MUÓ¯¾ÆóœÞ)"˜Ž–^úm ɤ“!*Äv÷¬I.5(_­ÑmýpßwØŠ’Éç‡Ã÷R"ŸñŸAëU™ìΊ§ ö­üžßtwš½Åž…o;(ûD€ ‘Ò¹·ŸQfXþÐä\t¸9­i®ìï|;ÜÈQÓ’H¬+$[DÑÜ3Ê*GÝ g iV¦ÇOŠå€É>õs•QѤ’]&Ýå1Aœõ«Þ•,¡N()O°Í'†ÔÑÐõ4à3͘¥ÛÍ“9<Òp â€:’y£ò  ^Ô×”†äJ:ûS$pˆÎÄ4†g¦‘l‹ æN3éKýkö_#®wwÍ궬Ìœ/ZR»&ÀMo6zŽõz’9ô˜ZÌ[«Îïzµic¼%F õªúmÓKd$•†{“JšÍ£LbߎÙÇ‹0º%‹Mµ‚s,i†úÔSè¶÷7qÊœäÞŸwyH«çgû¦³õ)omdIÒPc`Áü(Ð",hFZóN‚ÿnA^„U ;[YÏ—>CÐúÖÁeD,ìï“NÁr4³-~Ìñ‚+&m"Vqk…¶-¹Ÿ¿Ò´ãÔm¤¤s)aÚ˜š¥«y€Kþ¯­-FLú|Z­³®cP1T¦ÑcšñY•|›qÜ}*Ýž¡ èc ?/\ŒQ¥j÷&5wƒŒfž¢Ð†ÓAµµ”K˶~]Ý«LU_íc+Æ&]Ëך[kØ.·eV#µÆisr'u;³’ëV®,¡¸ƒÈtOj£ªê+iÐû$s…8Î)F­on°Ç$ûÝ”sŠbÇJ·±…ÕíýKwö¦Å£YDò2Æñ‚¥:VÞw1G0,;U?\ˤoÅw@zÒlèÖ"ÛÈò\ç=óL´Ð­-&ó”37ðîíUìuˆÖÖ¹˜y®*{­V(¥Ž;c±=F(³ ¢Ïöm™ºûIˆy€ç4÷Ó­e¹ ´ƒ¹ªÚ†§„aœ‚OEMR‹Äbæxb‚"› Ò˜@Æ*­Í…µétJä zÔç×µf\ëÖv—"ÅŽy+ÚË6šM¥ƒ3D˜cÜóU·j5»MÁÝ´t&¡Õµµ·µW·Ä…úÐTv>!€Y£]KûÏâÀ§fGEØUÑìd•¤{ufc’ME&»c#4À†éštšå”P,ÆPU¸ëJÌ.EŽ=ˆªŒ;R"åÑXŽ„ŠËoØ+ªùßxgÀ«×7ko§½Îr¡r(Áà)Æ= 9Bíð®*ÝdÔí.¯..¤WCòàñùUï ]­½¤òÜÏ…,.ÜSÒ-¼(þbÄŠç¸Ô†4c’ ûâ±uMf(c˘péÛÞ¥­­…”§2nœ“ïKPº5ÕB¨>•‚%bˆ=Hj•¾¹e=Á¶Y~~œô5p*M†¢aŠpXäB0¥On¢¸ÏÜÉý¨!ó]bdZÖú­–•§Æ†?.î§Þ˜©bÄ ‘"dŒ#Õ}#O66î­îÛ˜ƒÚššÝ¤–¾z¹ÙßÛëL±×í/® –Î2:ÒÔ ×vp^EåÏuôÅU—C°˜DwU×F =¹ÍsgÅj5//oú(à¶2Iõ¦;ØéPÅXÁUÎ* ­2Òõƒ\B¬GCÞ¸­_PYu…ž)]£\ÛJê4ïÚßN Uer27w¢Â¹j}Æà x„û¸ã·šU¥ìkÑ¡øÔ7ší•“„’B[¸QœUÈ.¡ž4N¸¥a•âÑ좒9 áIíKq¤XÝL%–\çÖªÞø‚ÖÎä@ÊìçÇlÔ'Äví¨%ªeƒoì atn,jªF0+'Ä:t—Ú~ÈP4ŠÙÚŸ»g-ã[‡ù—¹èqLºñ-´Â-ÆBO%F@¢Ì.ŠÚŒ°Û nm‚ÎVô­y´û[©–IáFtèMRÕ5”³Óðí'{}kœšæúÊoPÜÓŒ”'¥1Šiö±\5ÂB¢VÜWC±ŽìܬCÌ<óЛM»[«ÜJ²8Q¼¯­E©jöºs™Èb8fÉdÓ­f”Hð#:ô$Tï2ì c1Y©â+2DÒà°8àSõ=rÒÁpX¼‡¨yÅatxM—“n ž¥x¨äðÞ#)òˆÛèzÔÖ:Õ¥ì%ÒM¬£,­ÔTkâ9•ˆŸîœr(³ —œ möqcET:žmšÝa玹¬Ý[ÄËlÞMº†sƒ¸ô´ôR=NÝA0#½‰jAwáëI †8”(Œþc½2/ ØGp%ÚÄà'"¤¸ñµ×ÙÙ˜‘Õ”d ¯®j¢=69lç]ÎÃzQ¨«±EÀ`Nþ.œW%áƒ%ÅôÒÍ4¬è;¶TæºÜþt1‡CC þqGÒ ÛÞœzR÷)#¥vžiàÒã &1<÷¤ÜqKM'Ð(Êæ¡»ˆMlñäò*aÏZŽpÍ„8lC9;;d{‰c“ ñëK°¸œ!àR[y"Ä¡ä9Ö°Ò¥‡N•î’A’+B^cC!ɲfHGò¶\õ­k}:y4׊U Àå3Q\i÷`vd©Á 9 Ô¶»Z;iÚÐ+-°t(â}§Ý5½±U%”`Ú¤¼Ò®æŠÜÑy^ôKQUŽæŒÀè;Öž¹+fÆ9ˆÍW†ÂöúXÍÂÒ.øäÖž«b×v[ï/#Þ†F`%_´äåONÆ—I‰P¹W48¯cß©²%õME—{£!\¤'-íL –gʵ¿1¶zã5>‰eÚpw£d°«6zÑ­Ò¹PHSš]ÖþÒw…Ð{“Jâ±FÚÞ'×&ŠLìËqžµ.…®­> §‚Âî-rIJ,’wv¥Ò´û˜õyg‘J&O>´Çb°i¡@:g‘TÊ$š­²ƒ¸ ÖÆ»¦OtñÉn¹#‚?­U}õ.-e@ 7JIƒÔÍ:{xõ¥coå«ðƒ=*mMnîµi䀀ˆâ“LÐîå¹I®cn‡©¤„ur1džŸ§[jPYÞB–Çæà–ãò¦Ø¼í`úZÂ|é’„{Ó;–ß Ùn˜9=qRëö© –r´2€Vµ®ôÆÒ(wÂrIèk/ÅI"Ëm½ÁùqëJáb VÖ;]JØ[®ÀÁO¾k¶L,*23Šåô"âúHç¾'d@lø©¾#K‹KاŽs³€¨¥ˆõÈãþß„7¶îüêK»d›Ä°BÄöƒééRjzMíüÖ÷qr‹•èA£Sѵ{Í·, ƒ‚ ­ìb“X½±bV"2íPiV˜ñOî¡c–«ri÷VPË©\Jì»JSÅV²Ñu´Ä< †gF☓a‘ÆÅqZ%½¼ºô©"+(Ý´k¶òþR¹íŒ×)káë赂Á¶D“ =G¥$)kð¢êñ®ÔUl—ëVà·H¼GÛ„ETߊ³®h2O(¹I•p0Û¸Àõª¾±óuG”1tˆcyî}©ˆ©l©uªÝÂbÞÒ«Ÿáç­vVÚY¤`¨êsœžõËÜè:•¶¤e´$«±ÃƒÐZê¬->Éd‘,Òǹ4˜ÑÉx®(ãÔbug^OãQÞÅo%ýŠÛù‚†ÙëšÐ×ô[ëÛõš½0ýÚ­.¡ À‹Žåè§¾h¸I ùpª€©ÈñQxv¤Ô.üèÕƒÁÇ5 ú-ãkÂè°òÏ$ƒíÒ¨®‡«YÞ¼–¬¸b~mÝAõ§p Ô.EÞ‹»|¹ÈLS5EѬ1ÞGßž•©w \akË¿ÌaÓš«q£ê·}ª4k˜øÚOsJâ:]"Î ;Ä)´º†nzœV'Œ-PC Ç>`;zñŠÝÓ-¦µ±TžMò÷ôÕ…âÁpm!w`«»GèiuC.þÒÝ4+9âLJçæ9äÓîení#†%Ç–Ãt9iZ]î¥K#h‡+ŸéWõMê}N9­@UÀ³Œc½UÂÅ-.݆»5¼Ñ„ÜŒ ¯jf…amsªÏ«¹S;A>õ~ÛEÔbÖþÑ)Ü«É|ýî*½¦‘ªÃª»Ãû°ÄæCÓ¢â±WÄQ*êÊ  »@àWam6¶bPÁœ}+[Ðo/gIáerªއëZÚUŒÖÚ—q!iÄœâ“Ø}N[FµŠòkï5CaIëžjŒÒ ±XFì«ô5ªºN«aq)´Úë&TŸj/<=všta¼ŠK0y¢ácÃðÀšLO(f_œŽ¤Ö¯zÃðťŋ‹…+¹²ö­Þ“Ü€iOëIÁ⎜R éF=ø¥Èüh#"€ pi;òi{R(Ü`á¦}E8ýi1ê)…ž)“J±DÎßtiG v¨/•ͤžX±ÞÊZYËpòü8ìkgp¹],Ê¢sÃÎïJ¸ÚÃi¾bczœWbQ± é2–$ŽjMÀdœ×5†úŒñiñœ,‡ƒÒªF×í)„IŸ0s“E„uJá—ràŽÄRƒ“PZÆaµHÉÉ­bê…Ìz𯄄ÂúÐ3£ßƒŒR“œW,×÷ñê%\Ç¢v6Ÿywý£åË&åêÀö¦#¥ÜGåËcHÃu®oTŽöÏ@]×%ŽáÊŒqéU&Ô/í´wóÛt¬~nàzPj~” u5ÄM{«[­­ËÌvÉ÷TwúÓµ^ýo# ϨSE‚çlzqFpkŒ¶Õu(µ˜c¸˜²ÈFS¶ v<㎴ìò{ ©}ao©B"Ÿ•<Æñ5Õä $ž\/Ã×5‘¢]ÝÁªCn·£s’3E P;+ ´ës EŠç<œâ¬àõ®GR¾ÔïuilìÜ¢ÇØp~´i–­5ïÙ™–XãlHHä­­$tãš^⸻翻Ôf_´ù-ÊGœqOWÔ¦Ò§%ÕJ nèqE€êlïñ\¢:„b¿0ÆjÁúWe¨_EáÙn÷ØRÝTzÔ/ªëMŽàHjØ/ݾ´X®êö Œ“°QÛ=OÒ³íüMe4›µOK–y´è¤¹B³ÈÆ*Þ=)ãŠN§4áŒÓG\š@(ëÅ>Ô™÷¸õ æžii^) 3’(Á ž:RÇ4‚9¨®e´è¦¤\b‚© ®i å,q’å?*±þÉcÏß­{&7Sö}¨XüÇü*Ôz| iä2‚½êîA$¶Óiq™ƒ¯AAS6ðx9®‰ôˆãã¨ÆßZ[}"Ö¼ÅB}íNã±vßs[G¸àí®{Q!5xÆìàŒ×N=*¬ºm´÷"i,)“tжµÖùŽ4ð#·×DyÎõÁ>æ´äÒíe¸YÙNñéÒ¤{ínX ê(¸Ž~ÊdÓõi„¤ªdŽ•>·1‘­¦ä' b¶f°³¸I*)n¹ÏZšHm§UY0SÅ;Î듃ujéó zéa--ª6’½*),­d’9”è}*Ò°=Årw¬¶ºê<€ì\dRÚFo5i¤ˆ†B‡œ`s]Õ½Úíš0Þæ¤··ŠÚ‘ UÇ1£K¥ä±LH«Ž™§Üì¼B²K÷“íšßk cv.<¥2†³Ÿms2O$A>é¨àÑìài]"½áéŠ.9­6Uÿ„zùGÞ½VF/áÇ@òÊk¯‹H´† aŽ<$¿{š ´6kÇ ;ÕA;$Ñq´q×—és¦Z@£æ‹;«GT•¯4;Y¡$¢÷N*­½ÔÀL‰¥©i2>áâº/éÒZiì·+†‘³°óM’†YÞ}·B*¾äŒ†,:œV7‡/–ÜËnT™$#hÅvAcJ¨U*¬:U”Fâ8€÷¥r¬rZ‚Xê·O >áÓ§4Øb–MúT!}Eu×:%…ÔÆI!ÏR*ÔvvñÚ‹t|¢1·\\§ >£çh±Z¬l gæ=ªÕåÔmáûX¦FYÜ5ÕÁ¥Y[ÆÑ¤ÎH#9ª÷ú*^\[J»Ub8(FA\,q×OfÖðc!œpÄ×y¦ù£MƒÍÉ}ƒ9ª‘h|W"e‡-œ…'ZÃØqŠE.L@ÉÚx®JœÛÍ~Bóå·ó®ø`ñÞª:Ñ^V 2 ?EÒݲõüe2>ÃÍÞF±’ äW[k¤ÙZ+ùP¨Þ0Ùç5b+xb‹ÊŽ5Tþè\,y÷Û™ôƒf#$«n-è*ѽ’OF€6b—¯µvi¦Ù¢È«n€I÷†Þ´èìí¢‡ÉXFz®8¢ác›Ôõïü9¹åYCdw¬û¹Ö Úªƒû¹6·µv¿c¶Æ)<³Õ@â˜4û1möu‚?$œí¢ác‘Õnã’ËOHÉ.€GJµâwV±³Î<Þ¾ý+¤—L´”&輿¹ÇJÃÕ´ÛÖÕ#ºŽqž”®J³–úò-Bá<±E#¯½tݪ½™­PÜF©!ê«Ú¬@Î#Åo'öœjàùaFóªðÈë=¼EíÀÇ\×s=•½ÈS4Håy)>Åoç,¢Þ£±È¢öŽjHüMwæ8BW‚j â85;˜·‚òd)ìj׉­ä{ÈŒVlàòÒ äûU[=.âóRŠâ+fµŽðÇZ\ÁcK¸°$„óŽ&•åSá…ø"L2×_“c- Û§–ýF:Ó_F²kQmä9âÁ£“Ô®¶ÒÙr¥S­Xׯ6_ÙÌ’¨Šé®ô«+¸#ŠH†Ôû¸ãš-ŒÞQxAò×jóÚ‹‚Dºmá¾±IÌf=Ý[èi4TPާš‘‹×½'Nœ O¥â€¦”’M A鎵…e:Üå2@ãÚ™ÿĶf `0«±äÐÁkæÉp\1ã4¯¬ÛFP»yíÚ³eHßCF+Êô#Ö«K :#Ã3}ãL.oVÙ.|·|^Õ¢…XSk޼…#x•AÉ$×MÌ6ðÆ’8 ÷¡p’ˆëXF{‹ëƒ—ˉd"·AÜ2+2þÑb±¸’4å†N(>ê;vµi-®\˜º–5^ÛO¸¸•cw&þ¦˜¨HvBAWÅZÒZEÔa/Àd“éLFÙ§°Òä#JÇߥfi:‡Ùî]®$m›x×E~Û-’@ö¬=–kÙc’5` •ÈäR¹k¨Awnf_•G]ݪ­ÚK8…“Ó=cÅ­ó Sü+Ûš±§i–w6Ë8 võç’h Kòk–±ÊÑ$§SÚ­Yê÷ÊZ#½Aë\…Ê[èU¼¬äƒÖ¶ü=nÊg˜)¹Â縠.iZÑf•üÑŒœTÚ–÷º}ÃFć#¸¬X¡…ôí> º­ä8ÊìaŠ½á‰žH® ’3#54ž$¶Žr†7)œoÇKÃR"‹¤bµGäùúUÏ”Šñ«¤žGÒ€4uj$ÓƒÁ¹Œ¹Ž1E†§ki¥ÄòI! Ø%†I=ëî//Ãðnë¿"§»X‡‡m {zÓ ›+¯Øùâ?1°ÃƒŽ+PW:ÚÇðvç¥C©ªÇ ¨…àŽõ. ëý§dè0¤c½+¿>»ie:Û±bã‘ÐS­µë[›³dîìHá«™Ö-%ŽûÍ”$lžµjÒÑ[]ŒÛ'È€3àð8£@6u­d骋†‘ùç 5®· Úa»q°/ =ý«Å(ÙÙ—$~ýz8áÐíÖ% ¤ƒò޼P-ÛøšÖyÄn?Fn•ŸöÙßÄÊ‘Ü3F[Æ>•GP·HtÛ9A$=O­MͯZ9P›üS¢/®SY’Þ Ò]Ã!HáO¥hišßÛ®ÚXü¹“9`ÙJ§Å%ÙB ž;*Í›ñtøÊC!×îYuÈÂÈË·nìÙ^„êd(Aè÷8¬ìþØ·b7c¿4j†'ÖíŒIƒžÙ LÒ]f µbª%Ý*è ±ˆmÞäÚù‹ª÷5‰¦Ko«róOCLÒdŠ+Ëð$ýÙC‚iØf¢x®¶y"®½Ö´ô½Z-NÜÉ•*pÀö®?O޲¿gÛ¼/Ë»úV¿„Š-µÁÏ͸f“ijºÒi¶û”n•¸U5¯ˆV}2YÀd\²ž™ª*Ex`”àÄ zUÛ{kx4'0¢+¼9cëÅÔÊÓµÙ#»šòí™ ½¿ è&×-㳎ë–úc­sš\06‰+ã~çµCÄKáý¯wü‡= 1\ܳñL7>Tј8R{Ó5_=÷‘A‚ãq=뜓"úÞI‚®H,jõð‚oÇÞ7+œô¤Y¥ê‰©ÛyÊ…ppTúÓµB=:ÔÏ!Ïe¦¥´ŽáŸ@™þ™¬Ï*¾#2¤šC*é¾"[ȤŠá‚JÙÚ@à Vn‡ª‹)îLò»¦>Q×'5{ÃVvϧ4ï™rW-éTôb:Øu_”¤ö樊Ï\³¼…äWØïãËoXÜÜýY²NÁ®Aa e{!n[ñ­ÏYÁ-¡¡@Îi; Eäñ-³]M W0N}qWtÍZßSF1 œnµËÙÁ>'xا%C}+GÃvŒ·w 1TÏ~h°.çeמý–L$å9õõ­þÇ9®[ÄöÑÿhY¶Ð †>¼ÐÂköMxöå¶•îÃш,e¼û:± ~é#ƒ\ç‰aŽ;Ûe@Pdþ5cY‚8¯tÖV À ,槯[i§aI?¸µ%¾µiqb÷JøT8=EaÛ[‹\™v°Eè{ñPÛB‘ϫë´á}¨i|Edömr ìVÚF9¦jZ‚]è3\YÊèàŠÀÒâOì+ù à\U;aðµØÈœÐÁÛÍyyá£'Ú|©¾û£ëTíüC¨Ù"ù鿯z3wüjáqš­ ·ilo…Ã}ì=*;WitÉáPr¿0À¢+´þÊ{M§Ì-ÇÄ>æòá®-Ýe›Žƒ5+Kwk©¯ïš@Ã'éQ\Æa{%•þunX¼Ív4T;BóÍ"77Z­Ì‘,Æ8ÐÅEÅü—$—0¡ËçÒ™i$VºÄr‚¨ùPjmÖÞþkwyƒ ‘Ö„¦âöúòV·“`‰€ ž¼Ô:åàÕBE)Î =iú{ÿgjS$±É‡8\ ÷£Y?gÖ¡˜ä/ÚMµâ[Ê—Ý9ÍaÚÅ5¶µ5¬RÝ‘»Úº«YÖæ™3´ôÍr÷wkoâšE;ÆÒ€gqt†î×Î-±†ÍCÝ˦K/ÚDgžµ6˜×÷òʧšŽÔƒ Ý(ݽ['éLCn/g}*-ò†$•Áâ‹‹hm-ín¡“÷„Ëša¶i4T˜DÄ«c võ§›±wkoo•åÉ  [ëëË›˜,í_Ë.‹~¤Ú¶•Ÿ6I‚AäŽÕªÏeªÁ9F"äŽ3íWuÉÖóDŽâ5 ž¢ô˜µ9îb»yIˆõËuJ“Å›öÛäŒdÓ4 Ùæò­?‘2Yÿ•?ÅJDvçi''æu…[«‹ûí'󈣎€TRËu.¶›d*ÎT€ÝFì_[ØÄˆÙQ‚HêzqJ`kzdb^½é.µ}ssyö-ÁQ;g©¤Ñ­ZöùR{É Ê¦î¦™ª›Q¬±p졆ý¿Ê`"›ÄË|þ´5üM{-µ¼pÂJ™ o þ•¦Ïu$¤†Qµsž}i¾¶ò 1ã•äQéRK§x€ÚÆ&8ÚONâ¡ÕZxg) @A'׎Õ.œæÿÄ«q·”9$j@iøªåá´…P ;a²3Y·ví`öš…®¤À+Û8«Þ1'ì°aIÓœt¬yu5Kkk8áùàœgÚ„ ³-Åäþ$ŒE1Ïãæ›<_Ú~$h'P>QŽÕ ¦ø†"Qˆ üT~–^%šæDp¼€1í@|6ím«\Úy„Æ3€{àÕ­VãQûi€N †QÇséT´ûf³=ÎÖ É¦Ÿ­Ìc×-Ÿ;£\ cޒ階¡yͶôvp$=ë'JûhbÓh™³Ó•¡¢Ë"kˆWÔœÅRÓõì êNŒ\€@æ€-i^j:,‰´¼‘° @ê*õíüºnƒoå®ÙB䎕‘dÒÙh÷R4r/˜FÓÓñ©µkáw¢Z’Û¹8î1 os{§ÝÚÉ%Ñ‘gÁ*[µkßëóÚÎcŽÎFÛÔ‘Á¬+û¸î¡ÓÖ;Ä£v5­¦j7­•º (ÂŒR`2òKëA4±ylOÝ«dàU *Ê[%†I¼ÆÎséWÍ!‰ùRÐE¤0íHytZBsÅ'F$Rçæ—·½7†4§4RQœw¤ à B@“À ô¨.ö›Y7“·iÍ!ŠöðNAdFÇJyD)°¨ÛéXz<â(ç‘Øì^™«ÍªÛ q.sÎ0*õ&åˆ- ·fh)=MZ(0pAëšÊ¼Õc†Ù^"› ¥ÓµAuY8e'µb/Ço jÊ‘¨Vê1Öž±D#òÂ.Ï@+:=bÝî<®yà7jf˜ò=ýÁó O˜3N+;h›rDªþ T¥Ô«A g fßíÈÛŸ›µOe¨A|Ì#'#±¥`'†Î e"(ÕCu¤[ c(—É@㸗—±ÙÛ™žÀzÕ+[Êè¥YKJÖ’(Ÿ‘X©È$t ˜—v†éšÍ»×-í¥ò¶—=ñÚ°õ;ÿ>xÌ@ª3@z„·fä²WE9 Œæ›moy}©¥ÜñR>Ý3Kk«Ekk ¾÷y9>Õr}f(çbçÚ˜®j3F¸/·'¦i’Ú[^m3F®W¦ErgÕ/ÝLÌÉ_JÜ]^ -Ìĺ€¯4æÚ*¢P` ‚êÆÞìm–5oz’7F*à ×9}¯MþÈÕÆpÙþ*tP[Çb8Ð*0)VÚF[ï:ÖlÚäQéñÜ!Ÿî¡êiÚ~µìžV IýÓÞ–¢¹¨‘Å~Z¨U€WCeûÊY{ŒÒÝ’¶²H Ê)#Ÿjä4§ŽkøÌ¡ÚMû‹gµ4;i-á¸R%@ãÜR²@!òSËé´ô¬gñ$1\l;EÐÉŽ+?_¹Žam$,ÃvO¦EtðEml‰=Þ•$ÐCqÉQ]Ob+’Ö[ÏÊ–O7`Î3ÍmˬC§YÄ%ËJPaGS@\ŠR[‰yq«G´ÞžE‘£RëѱȬÛMnÞùBË Øk.ËÄ.“L·Eˆ •~”YŒØ]Ûí¼€8˜ä«‡Ú­Yi¶Ö!¼ˆ‚–ê{þu’¾$¶š&rYOÝêM\Óu¨u(ŠÊëü-JÌW4%µ‚x¶I²÷Ȥ†cƒÈHÔF?‡T„ŸÂ¹KÄSÛ_˜`UÚ­†$u¦3qtÛ§,®;W q¹VeRW¡"¹ {Ryá¶’&d #85£gâ;xÖÚÙÃTý³E„n}–¸YZ$2â#šwÙâ|µó?½Žj†¡«Ûé¥LŒKнjkJ I7ÀÙÇPzŠ,%[T¸3¬($=X HtûX%’T…Uß©¬î±µÛرïÈÝ^ßZV§oeoj®!ˆ(s“Öƒaj`1y ±ŽJã­R‹^¶};írŠ6úŸj†ßÄÖ—R•9<:Ñf#RK+i-Ä ‡EÇœm`; ‰>A…8éYÿÛv‹pð1`ë÷†)e×l–Í®#“ÌUàÖ‹0¹£,\FRDVSØÔiVÑlØb²Åvec*ŽYŽ úV4ïq¬kR[‹†UØS¬‚Â(®d¹Éi$9銱öh6lòSns¢°Æ­o£C ¤ò´Ó Ãç£s¬Ú[Ù­Ë>RAòã©¡jk;{…U–$d^@#¥5¬mÞD•áBé÷N:W<|Z$‚E²JAG<×Ac4³XE$ë¶B¹aŠ,ÝÚÁu I¢§±¶Ö°ÛF•Ð tÓ¥¼,§ƒ$×:<\Ÿl ÂE·@ïå@+¢J0êô5Z>ÖÞV’(Qõ uª·ºí½¥œ7;K¬¿t …üIiÔpØp2݆iY¤övÒȲI3¯Ý$r(šÂÚç‰aþ¢¹eîÓYO²^U?Ä2^¥Ü!d<)…Ά;x ]±F¨¾Š1M{H$ ¼jÄŒŒâ’æêh·ÊûG½d¯Šlšpÿ'ÝÿoéH u·‚.U›‚qÖ¡}.ÎYDÏ3g â²5-V×RÑd’'*èxàƒSøj῱ÚI¥,–=ZKx匣 d=AÃajm¾Î`O/Ÿ—Vt^&²{¿#æ8G ×|@Ö‹{p ˜É$dE˜\½o Ø[\ ã‹ç9È}ãÉþ›§ë\Ùù²8B¼>ïZ¯ÿ 5“Í$Y* |¯ØÑfFÒ¶X®ÓÇzqëXúÌ×VÓ<¯æ(ìcÜVÀëš8 (4œÒ==i1Í(8¥<µ'JCÏJ Ï „Æ:Ò)ÇëH>€Ò £œ!øÏ¤'ŠŽd2Âè Í!œÅ³³](^1R"¨Ñ°2[­\µÑ¥‹ÌÝ Ã0;Ô+¤]d‰œÎUsÔÕÜ’´Ñƒ¥ÆáH õ«ì‚ tHå©ÃJ”é¾AaæššÚÂ_°<ɸ·Lv§q"ŽgÄE>éÈ9ëV¬_˽¹ˆ.:w£MÓ'´œ³ËˆÇðƒÖ¦‚ÁàÔ¤ºi¨#TÕP:¬ÝV¦“o³Q¸‘îÇÔ4ÔõF‘¤ pMt"@#\ØQp)ë*›&W$r¥gx~%GiQKI­Ë»µZû†ê{Qp±®HÁÏ¥q7Ë x‰6.z“žç5Û9Îq\þ¯¡\^j qnÊ8çŒb„ ©â¦…Œ ‹ón1QëA#±ÓQC`Íjêz^YÄ«(óby¿Š±ÚKËûkXßÎh€8<zP¢½ßüL5‚«¸ÂŒö8®·JÓ£Óa*ŒKœ>µŸ©xzY'Vrm“—§?ZÕÓ,¤´· 4†I\îv>´7 [Rã0rqަ¸{¦Ž_~ó]Ù@ÊT€AÍj~k‹Á5»ªûÀö¡!ñp­µ²Â ”Œ'JMbáÔ4ö6îÆvñš½sá±%œQC1OÍÜÔÚõÍÒI¨Í”ˆ|›O4Šß)×®_q®"©ÄÖá5Sò°ùr+fOκotÊŽ~sßø]¢7Θ¤/΋…Œÿ[Ùγ5Â)*Ãö©l™Wų€¹8íNÒ|=w÷úOËœßÅYŸÃ³¾µö•”Kn8ê=¨¸jVÓb·ºñ êÈ¢E$ã#бâ;.ÎÝàAåÀ~î{S®<=p5ask(XÙ²üã´ÍvÒêêþÞÎ6aŒçœgÞ€)\O%ºY^Ég ÅÐ/õ®Æ)kd‘>ë¨"¹ü9©ÜHÜÊ ГŸÊº»{s a…_¥ õ)ã¶Ó%’H÷ ^WÖ¸ÙQ¤Ð|åòÄ"S„ÛÈük·»µ[Ë)-Üà8ÆkO Κtð ÌÄ^ÜP”µ) “A± €ëRø†$EÓ¶'$:ô©[Ãw#MŽ9|Å}ÞßJ»{¡O|–açºsŽ´\,f]mÿ„¢Õ‰* ¯_¥,Û[ÆŽ€Û¯Uðã]J'·˜¬Šù½©t½X/îî2eéŠ.6.íãž,H ýkÑma:ôÐIePÀ3Šìn£y!e¶·cé\š]ÿn¹ŽÚhng;aUOÞ‹…Œû‹X#ÐmæòÂÌHþu_VM^ÝeÀP5kE¡ßù‹÷"KPAõ§kšÅåÜrÛl9àÑqXv·b?³vÚB„)„Ïݘ¥³†U·d#ï9ãq­‹è®ôûK{hXæS‡’y5—6›«;%›FÌŠ~RlêôIb—K„¡W#Þ´k+IÒ……ºnbe AçŽkPsÞ“à Š^”™ãéH'½çš\àSh'$Òö£¦E'LP4&~´Í/ƒš@`»FpzRvÅ2na|uÁ¤2(¯`–fŠ7‡¥U]L5é·1AÀ5§DÒênÛ‚I«&9?¶]Q€'¿ ­,EÎ…OZO5wm3éšÆ³žh丈>æPpXÖc™‰iÌÿ¼Ï4€êå–(”´®zš’?.HROzåo^y--ÌŽJµlé0M M&å#å¦é§ZÇp$Œõ¦Ýêéir"hØç¡spÆ8Î;×7¬<ŸÚHHR6{ÒtâFuVÁç!l0ɹˆ¯n£Ôcóf7UK3Ýjz„‰»<¿º3L›’ ¿Ë‘ÍsÚÅÔÛÚ—ÄŒ>f©ô˜¯–åƒË¾0I=èfG!{dõ“o­<·ßf’-œ‘œô­YÔ˜øÆ}ë09Õ¤‹Ìù‰#q¡Ù‡ ÅGÄo!E‘K¯ðæ¹Ý*IÒ[«U—-´í'±¬Ïš0óyäLõ –ÿ[63$fÙ'5zÃS‚ý?vØ~êz×=©Hí¥Zï`YþöZ‚tþϼ¶–´t4ÛtJú×^ÖïË0RØÈ<ÖÔL0ÙÎFk‘ÖǪÆß7/§ëBufã÷aÎc<štw ,[£*ݸ5ÉëNC*ïp‡¨ÏzB|jaC¶À¤þ”X.u1ÞÈÒÊžI"5ÎàzŸJ«kâ+I¥1ÈÏñÖv„K_ÞK½ˆPxÏ^k6+S¨Éw;ç)–È¢Â;tH»Ô‚½ˆ§Œ=z×=áY¤’ £f%TŒdô®ˆ ŸzE߀8¥fÁæ0 r1YºÜ³ÇhL,g¾x?…_[¸o-eRêy\óPj:¢éí(_ÌlpzW çÊa47$¾yìs]§ÿ í:yHixÓËš¦¼,$1!n¼ô­h&BŽF q\nº¤ßà @¡±È=Mhê×7âÖÊ(eÆXu GFÎ0AÆ*¬Îëj#Ô…ÆsXvwv–Sy×ÍÁÊ’q‘XAÌ$–ó¸ry'Š,;kø„YÍå^[:´:Vµõµì{à8}Eqúœ¯w{gÌv¹MKm±×Lvîê› Ú{ñNÀv%ÕAù†}Í wsšâ-Œº”Wr\\ʾHÊ€jÆ„ú„ìçí-ä ;ƒzR°\ë–æ?4Ǹd Ó¼Ô 2Úâ-Ù²»š)°ŠNA9&«@oî-–vòãËdžsE‚ç¡ä’F=ér§½qój2·…ÒFb\¶ÍÄóT.¾Ûeko8¼‰Fq“Å¾È œÒ3RíÐ šÉКñôí×g%ŽT÷ÅhÜÀ. 1îec"Èìu/ãg…¸VÁÍZùqœƒï\…´é«Ëeà $‚ËKi-û^6š.]T± sN¹߆R2üꜼÎB ˜áƒg5ÇÃý¡­ô 1Ùy'¨ö¥Ðä¾]>éãv(㞆‹ÎͤR­°«2Ž@=ëK×Úöýí%„#Œò¥Rðé¾’ygfÝ î>õ™akq6¯r‘Lcu,Kwë@Žì…cΠ¶Î[Šå<;{rumd”º.qŸ\×Q"–\sŠ (\ë–ñ^Gh€Ë+œ§îýkM\Ž3\Gˆ,…ìSÂä<‡$ç½Es6£§j1JfffPG<éE„w„€IÎ*œ:eœMt‘(ä“\ɹÕ.µg¶ó¶’¹À<(«šÕÓ^ÞZË1“`àŸ^”X []nÒòðÛF[Ìê8â´³ùWŸÁ,Öú¥Þ$Øo›²ŸjßÒn¯.t‰^g„|óøÑ`FÌ7"[‰bß»þ#ÐÔíŒdšãô+‹˜ì¯¤óY¶ƒŒóÏ­6 ¯î´XôóÈ¥k+@¹’ëJ¤mÌ R}kT|¢ÇãÞ™ ;¢ˆcŽØŠz qMÃæÊ´5é¡-ÉkªRw¼Ôv«*M©&1¿Hg5i²}¶xÃ+€@ëMÀú+HÑ*67z×Mcg¥°~y'ÔÔÿgŒÆc1®ÃÕqÅ;ŠÇ-sÒhVòl$#qÚ£f:”–éon\oô®ËËP&ÐGQ/îÑW>‚‹…‚(ü¸ÕOaŠåµðbÔã`ŽG\žçÚº²ÇJVŠ9v—Eb9Å 8½RÖA4‘–U¨ö¥³²±ùl„¥{ŠìÙTŽ@Ïn)‹m/寙Óv9§p±Ìi-4Å´hX6àsÚ«Z^6š×PËfPGNõØE¤`ŠOÞjS¼ádeGç!ˆ\,bøfÒXb’Y¨ü úQªÞßÙ_!}˜ z×@Œ¸ pGJ£q¥%Õò\M#Lb>Ùõ¤ ‰hSƒØÖ?Š#s§ƒ€ÃulÍ<6é™dT^ÛŽ*%ž Õ*Œ’§Cƒš`qQ´pÞI²c~:ÖüîúŒ!±“ÏJéÚÎØÃäùIåõÛŽ*co ŒFcM‹ÑHâ‹…Ž7[; ³›É(Ì»˜â’ûí •ø×rk³–(d$EaØšqŽ6@¥¨èâ‹…Ž[X–MKFŠå!u¾`b8&Êc;Ë«Ñv B¥Wn:cŠh‚ÝÕG–„/+ÇJ.«Å<ZLÈǹb;ÔÚ[Ü_êâáw²…!ØŽœt®ÊHcš"’*² ŠK{h-bòáEEô\,pv· c5ÜR+©”_éWü78·¸šÚPUå.{ûU­a5íD–+E’(ù^3Ÿ­}•íæª·÷q¬AzÞ‹…Œë—‚-F)¹RO±ªö“JºdàD­’ t95Ýù†v¯Ì>n:ÓŸja1ˆPFÇ•ƒEÂÇå¼;ƒ¼Ü©¤Ô/cºÓ¬âŒ6øA1]Ô‘lÊÁœ/ÊrÞV©²h¿³cÌÙÔô\Fî‡r—z\Esò ¬=êü®V"UI8àV~…¦6›c±Û.ÇsÐV§ÇJW(à-ïÞ×]{«”*rAt¨­ïš HÞ¼Dïbk¿–ÊÖbL#“×#­G.›g,"'·`è1ÒÅc“‚Yæµ¾œZ“€ÃÖ“E¹gÓ®íQ[~ÂÁ…v±ÁQ‘ ÛŽ*,í­Ky1"nëÖ‹…Œ? LM”°r¬McÚ^>«Ü»Æå›pzíQmíÛjBy `TWº|W°È¸Uw\o‘EÀåü3º]RyŠ‘Á'滂£“TôÝ. 6y$Ÿ™z»Œ`W¸#‘ñk>Â6Tdš¥wr5i­E´r4Š 2â»§Š9sæ"°ÇqU­të[MÆÂä‘Nörþi‡ÄèÆ'^~)ÚÊöÞ*Eô¡¹_œö™q,buÚ]”gÕ¨u­Ñ7î‹H?jœnÑjS]ÀäTz_7Sv;MYضÔâš‘†Òƒj¯öÙi”´$FNg­Q·_ôK¢xýzšUWÑ#`~e=(BóYŽÚ@Š»‰ÆO¥A© k›E»2“éëTïc̳aY€w4·iö}:8Žw0‰s{b‘³1hŸ±5­q«GkxBYÔ Ͼe“E· Œ‚¢œÝY‰tÀÏ¥1¯«Fl–bJ6yZ©ý½ pL$GÛÞ§Õl¤¸‡÷J¸^Hõ¬ù>Ô,¢‘–?."01Í:§‘¬<çPŽTœVzÅõ°c"^Ùí[AÚëMóÁhûv⹫»¡·K‰d $<@^r÷6‰,Š›°¬ÿÉt¡ˆ„ðÀTš»Ãi½åÜ.zU½\nÓfÎ8\ŒÒê ˆõǂְ|€mjÓþ؉|†ÁÙ/CéX 6Šò nÝ‚3SÙA•±wÇ©íLF²kHo¾Ï$,¹8R{ÒjZäv,"Dß/R=fH øŠ Ùâ4’&ß “Oñ}(¡6¸£OŽUŒ‰dáV“MÖå–ámî¡*ç£c¬ýU¢ÖåX˜Áǹ«W§ÊÕì˜1(@çÖ’Ñ×vÞÏBÄ 8ÛÉ5·ˆ·Ç10üé÷Twªçë7lŠwìÈâ“EU0ßNÃæÁæ€&–é5=âfB®«}úYxyf”–ÆBZ¡¥ímùCØ'mMcn·^ul„=(SâX–Í$òÿzN ç ­ëK¨îíRd?+ óÈÔÝ6åήëG¶kM6(Ÿ®2}‰¡ FÚSÄ^DŒâ!Æ3Ó– ¤Ñu&µˆ4‰»æ'­<6ß¹$(ÿëT׊ƒÄöÿ"àŒŸz2Ö®‹Ëã‘Ûøj;ï¬Æ$ŒÉœ3Z¦è$ñ^ qè·Z4DŽkÛ«yUZ=ÙçëL k­v8R1fG‘w*Ž¿W“Ä/œ·Q ¿iSëY³H¶þ'P# ªB€O¦ñ<‰ˆQT “ŽüRS­M©XÝ!Ê+wJ¥£j«co4“JîI ©œþ5²Ò@ú D˜Â ×®O¶‰ô«Ù¤%~éô¦#©¹×!ƒLŽíõ~÷¨4í|ßJèÐùnp¸®^k•m.Þ v9'= u0¥š[-ÊŽñ=8¤2ñ4f2ÝÊd‡eíRiœ·÷²B-Up¹ëÚ;Ôµ¹·DO-²Þaç?JÒðþª‰a*ÜmAp:ŠtcŽ™5‘¯ë/¦ÃB É'sÚµ`™&Œ:« ƒ\ï‹@‘e9/÷¨CbG®Ü]è׌¬¨£,8Î{ÕM;ÄSZY*´ÇwsÈ®äCá€bÁ(sŠÅ"ÿ„vycg.~½(ÐÂCn¶ñÌù㌠œÓl¼Iouv *Ñ’~RÝë4…|7ÒD ãÓ`…£Ô4é^PÞ`ãQ`6µÝxØL°B¿9嘎ƒÚ­éÚŒZšù±8 ×7âZˆ–$1‚:sÒº»42–êŠÞ ë@Éšo-KàW#yâ[µÕO•þ©nÌu®¾Ub¸\f¸›%OøIœJ¨@vÎê1Þ!‘侂a¹  ÈÏJÙ²ñ¨‘-›~p1Y~%®­B äøÔ:¡„jV^PØ Þô-„t—õ¤WY‡]«Ò³õ}uc¸Ž×Ë,íbÀàŸ¥G¥¼2k7@e‰ ‚j¦¼¨Þ!¤.}¹¦†nM¯Û[]­»+}Ü–ÏN3Riš’j0Jèm$s\î®#o@§k.T;Šëm-­`Wèª ù‚úÒ`Ž3N¸XµÙ$2ɰ<µÓØë¶w«!åX7¥söPDÞ*™`f vV8Õ®u#“…V#Zb7Š->Õ°FæãÌíV¯õË[ãl—/Ð/§­`Z¤OáIÉQ½[­&¥ÊfIÓßX ÈüKc%ÊŹ‚Ÿâ#й«ÚXe“$ôUäšæuxbLÓ„j¡˜ )b'ñ ŠTó({R°”™¾)ç<8Ž ©_QŠU Ž”ô Ê}$Œ˜&d'®{Ôo¢•òÌRía÷Ï­h­Ô;ö™˜ÍKæ.>ðü굑z|)jÐã õ=ÍAŒ‘1Ý#4dçaéW·¨'gÆk15­— “ǵsÁ2úîïL&O-Ñ@@z±k£¨´1Oó;rXv«^]½ÉYö«8èjÞìȧp2!ÐJD²–ˆ…f÷GŽè«Fæ7A€GJ¶óÈ€ÏsNIЕÔƒÓšZŒÎ¼³˜AºÉ!áØu5WûçÏØfÌçšßg@ÁK Ç 4ðÀž?Jb ¸‰>è¬VÓ¤¸ŽKIC,î€ã¹½S‚À~4DÝ€_s@t»cn±fn¤ö«WÉu E&vŸJd×qEœ]JàÔVZœWªvz¦@ÌO ‘qƒ>`ÎqÜÖ¤ÚU¼‚ eD'åÅL×P¤Â#*‡=‰§µÂF…Ë £½-G¡N]&9ïÒéœå1òúÔ:–ˆo.x¥ØýÒ´^á!]Ì@ÏLž´øÚ ò¤Œœ”î+÷½Å¼Qïe1ŒÍEg eW¸œÈPüƒ°­t–99GzƒKæ¡' 8ëÍ-G¡R].9®ÍÎö P®UÓôjò³ÎY\*;ƒ[:ºeH#Ú¡’òf<¨¬Ç€M1hS±ÑÖ„Oœ1œtQíNƒ¤ÜÆGãé[?i@²6x’j­¦¡¨’ ™ŒÝè… Òà û„—;wó¶ºxâ«A´ û„Tõ*O‹!ê 1æÐú—ÚŒäÙaYzڰבB¤íÁ=u~`ÝÀ{TrAi4åAÈ$s@ʺf¶Îng“θa÷½*¿ü#hºÚvTݸ¨ë[ºã†}A§$¡‰*AÔj#/PÐ ¿˜Lddp0qÞŸw¡Ãsd–àá 9êjÊý¡kbP¼zšÖ°Ô ¿t/Èê½ÅSÓ4O±ÚÊ&ùÏ`+ìeÒm.VyAY~Tz±õ®Çpõæ«K¼ò$“"±Cò“Ú@Ç´Ð} "›));Áî*K}KM6ecæÎT„çô­ãÂöÅ5¦U™€QÔ“@ÎV ÞùjétcfûÊsÅhEáͳtB%•ú³ ׊43¢<ü¬Z‘§Ž5Ë:®zdѨ´in¶–‘Â9 fªk:Wö­ª¢¾×SMhàr0{Ô÷OifóE˜ƒ÷E *[hÉ’öo#1qËÿ…r·š]ŤâÉ7Ë¿•Æp9®³OÖ¡¼ˆùƒÊqÕZ´†ÇÆÓÇZa¡“„¢%‹±SŒ’;­…UR~èçŸé[Fö—Ë2(osM½¾KV¸—;>푬h_N²E8QèEiiZpÓí¶n.ìrÌ{š§¥ê7··„ÉËb CÞ´ïîM­œ³ªî(¤ãÖ€&+óVxeN¬n„ÇË-¸¯|Õ½X:¤nZ=ŒœuàÖ£ºÆ bõ&BèÄÕt$RÇ1BœsY£N“PÖ£Ú¯äÀicv+§´žY¡-,a>bœZœ²ÐOJ5“Ó&©ö‹{‘±Ëއߺ·‡e¾¾I£”*à+g¯ÐïÆE.O4‡¡Ëj~žIb’ÑÀdPãƒÇzÛÓlM˜Ü¼‡ævõ5h¸ç#Ž™¨ ¹ŠrâUÊâ˜ÍÞŽÖ²],ï°†n?Jn¢Ï5µÃÊLk2ás×ëZ¶:ÏÛu ,¥‹c©8ô8­°\ cÚEtr‘xnú-Öâå~ÎÿxSÕ¬¬¢Ø1AŒÕ®iIÈëGR1H`G½#u£ÓXŽ ׌уGNhÈ<Ð~ðâœi¸Å.zŠùx €qIéšBH¤>8¦Ì?pøm¼u§ECp­%´ˆ:‘@ÎcÊŒ¬§Ì&E9t5,ÂO°ÀwœŒf£Š+˜ã™Dd/|ŠŸÊ´øO–H ÓdŸ1.ã !,p ÍI³ÌÔ™fäx©. qy,DÁ4딚×QûA„²f€¦»A$\…#¥;QžI¯c·ȤsŠ—M¶–k÷»d(ЋX‚X¯Òà!eàçÞŽ GyglòA«:Œ}£Ä%ñǵT»ieÓì§¾#8ééBX†Ò{+ó!ÌN§ïƒM´¸žîâÝåe@ý§9«öºƒj71"[¶Åb{¯¤Ï,Z¥ÚÛç ~˜ ct{™­Rõã°zVj´w^d—3“¨=sWô¹ BòâxÉ‹ç¹ÏJ¢.SÌÉjÈ>P¼b˜Ž›C‚4ÆA)“~CÁ¶³xõ™,D¬¨r ^â¶¼7m=½œ"•W9U¬i/%µÖä¼’qùM.£è6Æ9dÔZÀÎë$¸«:uÄ–7°,„ìS·<ò*ŒwÁöólf,28«¶V—²Þ]ˆÊ««mÏriˆeµíáûZÜŸ0?Ì äZKÈæŸZòRà’ø½±RhwS[Nö‹nYäa’GANÔšm7\ó’ C”v4ì×0%ŒW;ƒ’?•mhV6ŠYæ ®BúÅÕtû& $î`KíŽõ· ]ÏwnË,[UU c4=/EØxò0½±PÛî²ñ3¤8T$åAàŒRëÐ\A¬ ¤‰öeiºm¼×º¡¹H#ÁÉ>¸¤‰êZŒ³\E9@€ õ¤»’óQÔVÍ\Æ@áIÇ>´Í6éôÛ©íä…Ë9ÛÇcJ󶙯ù²+0÷ëƒL Ie»Òôè`¸”´²>œ —QT]]®ÄAª¾!iî,mgòH_¼qÛÒ‰¦šÿ@w‰]0\}ïZ@R ,~i<Édü©·‘»hv³4ä°'å'µ=%¾¾Ð¤ŒG”„Œœrj²Éuu¥y)R‚Àri¥¨ÜÜ5ŒI3FdP –·Zn‘tZè·Ë•,zV%ÌWï§[]îs$RmrAŠ»g £Ã÷ÏövÚí•ã“LF—†,åHEËÌY]pªOJÑÖ’Y4ù–' Å{úU Jï§íe !À'¥hjlñØ\2!”ü½i ät‹{‰¬îš)š5Œnù{š¹s}=ç† Ìß:È> Um&üÚé×ì•$ùR¼³ÍეùV_½ŒqLD×Fâ Z²Løc’sÏÒ™©‰¡±ÓîRW2…á©·³µÇ‡mr@FÚÐRj²»iúnQÃÉÈ ¿û|7¸pÓ`€®Ú,ˆÑY²BŒŸZä5¹^XM´²íi±u«Kg}mB<™@³Îiý|̺típ9õÅsþ¶¿wi­ä ;[=ë¤Ö‰þʹ dl¬ ^-­A,M aõ(Z%×öõÄhø˜îý=ëWBžñ…ì2ÊÎ#ÈVcÐýk2Úá­üG4­–àŽ•&˜óÝÅ©VéaƒÞ˜Š’$¤½ßÚØÏÉçßµikWRÜéVr4›C˜gï͆åbÑæ„[Ÿ4œ4˜ã­XºuþDzi‘É\ý( Ð º·´g ()ê+ý&_©‰Áv`TúWO¥]¥ÝŠº)£5Ìê3y>&Y @F0:ñK¨Ëv7W–ºóZK9‘$çéY·—×·ÒÊë97¢ñžjͼ¿hñ#ʱ±;Ž*½•ì6:…ËËní!cå©})ˆë´¿?û:´eÇ9«cÇZŠÒc=¬r(Ì2Tö©»Ô”ôÈ ŒŒcŠ\PÇLR\í¥&iÏ"”þ´ ñÞ›Ðçµ(éKÆ8Å„<ãS9§w¤+ÏZC9ñÅ/npjÐÆÊ@¹ÎÞÔ ‘Y$ÎͤwÅ<` W;c},Ò"E¹—š¶5‚ð+${¤x‚ªÄÜÖR¥²GçO 7QŸ¨¬‰µ{2d6z ­o¬Î³…•2 ìÄtHr½1Ž”¨ÏÖ±®5†ŽCQ’‹MVk™’5 Ÿ›éE€Ð»µK‰¡.à9Ç­YHâY7Pþ¸¬yäYP«ìjhu B’FÅ@Þh°Wšu½ã†еopD5 aO«]yÏ ¹çÚ¥°Õ¥žÞc"$kœôX ¶U, ãš`¸‚S³z1=‰®wLÔ.å¼rQàú-WŠSk¬³ùlpÇ E‚çaŒqŠT\¬;S{©¤·š=’qTµç»‚D!ȃ Ö€:EUÉ<`Ô‡8"¹á® ƒ÷ÄÀ äÕ™õ¯&ö8V"ÈÊG^h°\ÖØ¤í cÓm]»p1éY:Ô“ß4@Tsƒéõ¨nuÿ.ñÒŒŠ§ }(qQµU2{qš“@=ñ\Ρª—’Ùd¡!ðz“Vä×¼‹£’ÌU{uÏ¥bkXg¡er6;x¡Ž1ƒŒŒÖ}ƹ6 9FWnˆzÕsâ66 0·"E`¸=(¡TSEƒ"°=ˆ¬9üBée éwœ6{UCT’.¸@Ë‘÷¨°oñ‘Já"¦Ä€ÀÍ\øŠt‚ Ç$ô52x˜¢O!„O¸úûQ`5î.-,ÜÉ+Gç©§E%½ìbHÊÊ ðz×%sGÄžT›ŠÛjÐKÄÑo ŒQ3!ù‰=IíŠ,O€WPª«Ð+Ÿ±ñ–ìÛÜBc~ßýzeljÂÜí·¤‰N¨°\év†úÒTÀô¬KÏ%ºF°ÄÏ3€BT5jàé Þ°}… )‚)”Ä…ÇFÇ4Ë‹KI Isd©àµfxnúk»cªÇËŠ£ÖuÚ”Z{A¾2A'<æ€:ˆê€W1B$h›T/ „úòÛßµ¦Üˆ×Žç)ºgˆûPkybòó÷úôX.nyqF§…Tê}) []§Èàœ¸Á5¢BØÎX¾Yà}+‘ÑoZƉÕF 䪕Á†£…áÛˆvì|¾µ‰/ˆ$—D7QCóîØÀôš~§žŽ.%ˆÄ üGÚ‹ÍãNáÌjXt$g ô+•›Å3bKVBãä$ó[VwÅ¥¬×`ùrÜs@\¸öñJHx•†sÈ©6¢®Ð£Æ+”—År­Ád·Í·LžµoS×Z*àRo»»°¢Ás}"Ž1ˆÕTz”àÈ8®zÏÄ &—,Ï…y=š«hþ"¸¸™£š&–È*: æÕöo|¡IعÉÉ÷«QZÁ²Û¬kå¤VM߉-à”Â#‘ÙOÍÒ‹¯Ão»Æ…ľ¼`R³ ÜÙD‘ìAŽ)^Ü È§ÕÏ…Ô&#ä·ÍMmâ!6¦m œ+S°\Ù{x˜‚褎™*¤Ú\7Éu#3”ûŠOÊ+2ãÅ1ÅzöþQ(™³ÎjίÃ}ƒiYP´÷¢Ì.rªÀ©ƒÁ£†ÊÚ×q†BÝv޵ÉYë÷rk²³DÇo–?‡Þ¶õ=z;&òc¥œº;R°ï¬>ÕŽFà¾ÞqOÓôè4ë_&.sËÜ×:ž$¹¼xmíá))q¸Žxï]Pnøüi´OgnÈPÄ›IÉëD–°Í”ñ« þ8©‰9¬-GÄ‘YÈbŠ33)ùaH6 ‚(" AÐQ\YÁ:’Ñ®ð0®Hª–ZÜ–\`Æ#ûÀöªðø’Òh¤s¸2»ÜÑf,iºDi’Måú³U™,-efhQ¤«É ö‰çGqå§Þ×Ú°íµûë;hw!h¿¼Ãï­sµáZ”wõªÖ—©wRG˜»‡µY?{ ô¤$öéA<ÑÀ†"Œ(¥=¨í׊LrhAëH1@ö£¨úÐÇh9£½ 8'4†sØÉÍ+T%¸RÚ›" ô#ÎzØ+ËrUÀãžµEÀ`rGZÑ}2ÙÙ=h—FS"˜Üªãæµw&Æt/ÓdVãæàâ›-¨…`‘\¶ò9ô­Ó¦[µ¿“Œ-$z\(ˆ„–sÍ;ˆÊ–+›kô‘6»¿4ë)f¶ÕvM·t‡œSäÒîno&%ʑʓޭØhÞL‚k‡Þã¦;Qp+x‚¥%ÏÊxÅW¹,ö¶„²ž€ è®-b¼‹ËdUK]&ÞÌ_tÔ\ ‚¦-T®åËtéVì!òïî€`~NHéZš<o¼’ê Y²Óá´ˆ¢rOÞcÞ‹• 0"áÏ¡æMmƒ8ãžz׳ÒmìîUÉfèjeÞ— ¹»PæAÎÕ?xÑÔv*i;Y¹lüÀ`{Ôþ# ,H#åÈ9§iC,—S¯'DôzúÎ=BÜG&@ŒP#š»d:¢©ƒU†*Ú­Šç °gò«–Þ†9K#:ƒÂš¹q£A=â\d˜àwÇJ.F|¿4k)Ë3éÅ.ŒÑŨÜÅ&3ÏÌÞÕªºM¸¿7ybääÙªóø}&¾ûBIµ Ë.(ŒÝHcW·"AÎOAÍXSäø… ¬¿8CZ7º7²Ç&ò›F0;Šmî…Ü‘ºHQ”Hî(¸XËñÍÔü p*î°b:/î‚evîÛVõ=o-#[kÇ÷I¦Á¢ªik$…™ù-éB`d_0ÿ„rÓ8Ü[µY¾"O BAm©Ï†ÇØŒFv-œ‚z ´tXŸJK?0åNw{Ñp0u8Ö=*À.FsVõ'Òƒm ´dUÛω­àŠ)™LC<椽Ð~Ô–ÀM%B’{Š.2ï¤þ$IC ü©×S/ü$¶ò1žÕ©u []\$¥™HÀlw¬VÖ!®WrFp zP }Â=ljBÙô#ž1SxqÂ]ϘžÍÔœÖö—£Á§¡e%äqËš£/†SûI.#“îÜÉß>Ô\,PÔäÅ“´*•ëÀÅMâIâ–Í<·VĘ8>Õ£ªè ¨Ì²¬†7ß4ÛŸÃ.˜–Ѱœ‡#©÷¢ábÎ…,ri±l ( ÈԤNj Î8 ÖÎ¥fZ²³n‘ÎI_QÐEíìWK.Â1¸c®(ê Ëp&ñ\¿"œdøUk9Ú?³Æé +xhA5U½IÊŒå—j+ù:»Þ4¡“qeç&‹…kšÒ^3òšãt›ˆmío ¹>€­wÉCц r†‡Ÿ°ydóN:2¤;‡†îH?+J8«ºðÄ;dáo™kbÇEó4²ÜeYþn:J©q¢Ce§­¹ÈòÈ3"»EÂÆló^,w®#„Q×ñ®ª{íºA»îÇn•ί…¯ÂÆò#9ÝŸé]Y±C§ý—øvlÉ6 >ZMâmè7I÷1Ð{U›Ù–_ Úà‚ÊûO­_Å´«ç娾‚§ nÒVÕehmû»Qp±0D_ @0öªžh’ÆRHÞ_ñéZ6ºC¦ˆöM–`FáÚ¡Ò|>º{»Ë'˜Ç…ÀàPÀÆÒ›]¹ÎÒ¥ŽíÞ™§ø—ËûM¢Fßn˜Í^»ð·rÓCrc rÃjÿÃñÝÛB‹)VˆaN(¸XÇÕ _í{6°Qõ§Ü”‡Åä…ô«røfIo"˜\©Ž£ž*̾Ž]SírÈJ€_qEÂÆ%ù·´ñ8‘”yc†;‘I`ø†b£hÚÄôªúͲÿn´*ä#æcœ].“¡Ga <¬fßííLV2<4Ñ¥åÇ™ž„žzÔZå½ÈÖÏ–Øó°çšÐ´ðÃÃ~gyEbʪRèÚ…ýäò´…$Fùwpö4´š<’éúÙ¶¸YøÜ­u)yo4­s+2žTÆÒ¼;,W+uy.é ˆ4â¾!3[ÄÑÀŸxŸâ4]Ìè|œ×𮧬Í ‘ÉlŸ½ŠíÝÁïÅs³xjC¨´ÐOå#d:Š.-Ìí![j09 m<éI¢ÂŸÙ÷³8*•¿JѲðܰùûî9u* ÿ:ŽÛC¿†ÖâØÌ‚9:qÖ‹…Šêè|$À2’{sEÏ”<' 2HÁô9­(|<Žm%“ç'yaëY±ø{Qw6Ï1Êx9àþ]¦Ç†Ø¾qH­âÍW°²KD !SVN1ÚÀœçG~´Ò}:ÐiÁÅ àf”þ´ÞAàÒžé:N$b#Þ‘[9È¥Á ´h<¾´Éåò"iÎj@#ªÊ¥XpEHÌÛ M®^C!TUè*w‰Ï\×=¾o¦€}Óœâ£ÞâÖhrv«V– é~ÓÐ|Åç§5™©_Km*¬2rÕžöÅtøæ.zñRjHm›'æ\س–uƒÌ¹•ìsW¢•d\ÜW;wÄÐY†o,üÇÜÓmÃÛên@a…É¢Â:12 <±"—î3ÍAs¨Ãm:Å#`šçàŽXõdPÅŸw&Ÿ¨¡¹ÖLyÆHJtñÏPCŒœõ§™R6 În‚¹]Bßì¾Lj_ƒ÷‰©ïdg¾µ8#'½£ûL>qÌQ äŒÓ£»†\ˆäV#¨¹ÉbA®”bpWœuéN±†8învHSŽE ¹µ+h$É2†=©óê6ÐAæ´ŠF8ÚsšãîU¿–^RLžÕ(Dm.çz¾TQa\ëm/ỉ^6ê:¢¥3¡û²&s‚3X¶ÑÇg¡4ñŒHÑòsÞ³ì4§¾nb~&q/ž>ਔU\ç ˜sÀô¤2†¥xm¡Ê:ìõ©¬§o³!HÞ‡ŠæüL ^Ç×$T:„-–ž[·Ì£Ó;‘IÚwzgšUïšã'Šâ×Wˆ4åÈ;¹Ù®Œž¢†ܹìk3V»–ÂÄË·Íh(Ï ¬¿@’iŒåˆ1œØÒúV¨nlÖ[—ErØã5vþé­í‰Œ§šÄ qšä¡³hþ~ö,¯…QëVõ€~Ç`$ݼŒUa7œ"·Y%*¹>•RãQ±ÈLr»Y Ý¥”!–G&³ ! G3N71¥aÜï`˜Mr/Ýa‘NÝÏJŽÖ(#8P¸ZHU‘[|›\ž) Iïíí£Ìò*væ–’U SÜäïáŠ]ZUžv‘X¡JýE;Bó"ŠõÑÈURžÔɹÖ=Ü­"ôÝÍV}bÚ;¸íY¾wôè+’ÓôéµYv˜å_œ÷¨Í£Üë­nƒ¼üÞ”X.v··m„¡™Ê¬ØÍX7ƃÍuCß&¸Ýb&:í¼"FȹÍYºE¾ñØæfòÂ``ûQaÜêÄŠà:°Ùê ¼¶ 9•6Ùã5ÉÁ;A£`dm±‚PçÒªÁdÒèSÜ™˜nt&‹Þ5Ä)˜Ò˜ûÙâ«>­eäÊé2É匕SÍr,κ ²´­²I~o@*9 ±þÑŽ8nH…€ÜÔX.w6w)wn“ ;XdzÕ‚xëÍV·‚;{tŽ!„QÆ*Uuf h\ŸZzœJCŒ j°çÿJC çŽÞ"ò8UIªPk׊æ ØZ©â;v›K•ƒœ µá½7ÏIn„¥J‚ ~É5´}zKëÙ!•QA!…nyŠë•`G¨®F²7:„ð™ ¨qSך±e=Åž™zÉ)!jŒôç­0¹Ú,Šz0Ϧi¢Tge»—¨Ï5ÈéZmÕÒÅx—l¶]IíTã†èëó[™Ê;’‡¥+ÚIik;yÍnãø±SŽõÉøq¦‹P¸µ2–Eõ=ó]NNáHhYgH ydm¨ƒ$Ö~›­Á©O$q#Aǽ\¹ˆ\ÛÉ «® Î+•ÔÞÖd$•b=) g¡<бï$mRÓSµ½gÈ N¼b¹KI®®¡oæ»׌žœÓ¼?¦=½לȣ# ߊ4 |ÜLñ£S©*V‘TÌ>µÅèÖ2ÌÓ:\É–ý½MhÒjZ¤ÑÜÌÙˆüœãhμQŸJ¥¨Þ›VS~ÞÙ®g^k¨µˆÕ%`YWnáS^[ßÁ¢ºÉ qųÎ=(:/P:…˜œÆcÉÆ=jápW*¯r<(mòmÎâ:ãÚ²ÌׇGYMËl€çñ4ßgŽ˜¤¬íi.4¸$‘²ØÁ'½iŠC#g!‡Tžž”‡ÖåH8¤íJiÞÅ!ëŸJRZ^œ (‚dúÒ”wri¹¤N)$ÈBTdãŠ^ÔÉdXb29áFM!œà[ÛK·›É$±=ªu²¹û ®Sæs¾•©o¨Aw‡ŸCVK€¼ô«»&ɘRÅ;éžSe[¥6ö ÒÎÔ²’W­mÍw 0ùŽÃõ¨!Ô­®H€$ýÓOQÚ„W ð],E”(ãÒ¥´Gšå¯¤b¢ô÷­YæXÑT t½G˜o ’ ÜF sÐÜηÆâ4Ë;2*ÍìsÅ©Å0Œ³àÁ5¥¦i²Z32ÇJ×Xdõ÷\,súݼòEû #–µC"^^Ii0„€¸Ó6ó‚*¬z¡œ@®7ç@39í®S^I¼²ÈqÈéOŠÚçûnáŒgÊ`A8ã¥n€=)¦HÄ,7‚šYÝÄ÷0¬Gn -Š’ÚÒwÑ.â#kœsï]YÀÏJj:å†G©Ü,céÑKs¡4˜8!r1T4¶¿³¸6‹†I+ªR:t¦¬±HÌ+Ãcµâ«·Šë ÝötŸhÏÖ”Æ(%FW¡ÇJd³GLŽª8êh* Ö~»²é’$(Y‰äJ½ÑÈ3¸5&{@qHÏ„ñ2²7˜1Û5{Sµº›M²Û;¨ù±×5¹.›o5Èš@Y—¢çøUР;…¬s:ÅԆΠF·Ý9@ÄuÅb°šöxÕ!!— W€+¸–Ò îg\” RGÒ“¯æ†8Ïé@ë“H=y¤ÆM“H'ŠSœ&Fq͵'~:Põ?Ja#=iÝ©I¤3 Ôw' 26ò*@i—X$'¦ÓHg+3K%¾Sg Z3_L4ØÝPN5NÂdFKíÜ*bÌÚbƒ…ùúšÐ‚½Ìžd°îBöõ¤— ØvGµ> G™m‡Ȥ»ø>pqŽEYŸQ&ìÄÑ€ª¼r*…„þEÛËË`­\sÚ»)!~] žæ¨,öçŠ7†Fiˆé4íInáfeÚS­gÉâ Áòâ qI¤ÜÖ®£xz¥§}œ]9¸ (9 êi ê ›í‹.ÜnÁ®\ÊÃZWòöÿtWW Û‘À®bTk¨ À ÍÆ­¦©ruµ¸ˆ)##ªµõÅÆ© “æD'þ)<øäñubÀŒ })4¶Sª\©qóäb€>±y<’=¢~ê>½ê}Ü^]½Ô‹±J㡬ϳ,wÅâ¬dö=}ª÷‡'´KmÊ£"˜zµÓÙÛrÝì+ ÓV–eŸË‰ì8'Þ·5ˆÏØ&bØP½+žµ?ñ&¸\©ç§qI.I­Ý¨YÑ2‡ïdT:ž¥tÂ2®U\À=)Ó©M#‚FyäÕ{Ð ÙJTydúÓÐÚ_¼Z@¹ºB¥F9êj·ˆ^æí ÚŒx5&¹:>‘û’ ‚Çj~›ö{66Dˆ¤`u¤2üBípëkõA’}j&¾]WN¥‹fÁ’WÖ¡Ñ-ÕÚíØŒ.GZŠÖ¶7e_;rp§ùÐK9ï,”]BXÆ=+~çÄBX%H·<«È=«Þ7}"á¼ÀO)O»E‘n“íLF«ëóGq`ÄRyëVlµ©¥Õ ¬ðì ÷}k:ëÞØóÐÙíR\H‹â¸™Ÿ €ü(cTñZ^4D¯Rj ½~ê(àtƒadî¬û¨ÒßÄ,$l&üîoJ³¬Ê$6™pÈNA_LÒ×öåÔw¤ÐlŠLc=j–±©Ý>ªR2ê# êMb_øšYƒƒU#Å2ý”xš7,r§'µ1 â -í£–h±+õ}?Í}föâwI¸«ÁSÚ¬øä%Ôm”½zšÎ3ÞÁqéÛÉ` ­šK¤BV&P£vio&’;s"Ǹ’+>ëZk{»hš¶L|Ù­9ù‡IÈè*FsIâÉü§B™ùqžžõvï^eÓíÝc>|½u‘£4ës™v¬`7 Sësƺ••Ô@ö‚;w¦"¶±ªKyj‘¼/+`ƒÞŸ¤_‹ óAµ6ap¼±©Òî[mjY’7'-òÍoø}_ûOPXþY¬«yc$¸%7rØ Ð†méšàº‚f¸AGÕsL‡Ä+sx±Ãní8/ï\õˆûEíä‹•]¬qZÞ"X6¶Õ±Ú;“M‰54˜ía22>AÀ©­5ÔŸMší£+åuQY°K=Ö¯t‰2Æ=Ôš*+é÷èØn ú) •|]T&Ü[æíW.Њ@#¨·Š¼Au €7eTzSÕÚÞEyÍ Êµbj^%ò.Z+x|͇ƶ-a†ÖÛË„ ˆ+•¶¸–òöõÇ IsšC:(uˆ&ÓMæHE0AôªIâXd¶iR) )ÆßëTtͲxvñp3óf«Øíóȹ ““Š,#uüAk”w ¸à/|Ôâ‹4òÎ×!Ç<}ÚÉûw>Šo4Œ3c×Ú«J!—E¶‚øàsŠ4¶‚â;¨D±œ« Š˜ž9ª:e¨¶³‰Hù‚€j÷ zqH¡G4qÚuÀ£#8¤Î=hÆ)x9¦“Í)8ëFsô£¨&Œ`P1”SN9 æcc¬¡”©” ‚©bx&™Òiv’8;ãÒ§žÊ+ˆ$aGLUK}F+‰tèIëQ.¡0¿1HË厸ª³…™´ˆ&…dM—E…ÄAX®Î¾õi.à0´‹ (½MW³Ôc4²:ˆÔñF¤Ý].Ýî„įlñL—FŠ[¯9$*s’XŽîÝ“wšn™4ñoNÔïµÛÊI×#Þ¦_õ`«ïJÀOŒcŠÎ¾ÒíîÎÊKp?ŠŸ¨^­œJìÃýÞæªPÝéò4N#‘FHö WKÓ™®ÚêTØ:"z ¶ÚL1Ë,ÑdJàã'€MPÒuLDíu?FÀÍm‰â1yÞ`Øsšl1bðè’Ü’lòsšÖÓ´Øl"ÂŒ¹êǽ6JÚv)ªÍéT®õÕ¶ºíÝÏÌsÒ‹0º6'‰n"h¤V5Ÿm¡A3 bÞ`ÆOj»«4i"6Aô¢k¨mT4ÎZ@TEˆéËk+ÎG­š476‘À‡g—÷MLú­¤R…i”g§5+]ÂWÍL·Aš5 ÓJtÿ±°Ü¸äž¹ªÚ~†¶»™w†Â¥–ø›µ‚)#Ÿ™Xö«qÆ{5+Á YÛYÏŒX?,Ç‚b@š`‚æ{'”:!ã'ֵƴÿÛ­`ê¾W@ ¿ý›¦Lùò!,:à asÂ1Î äO¯µljºRêpì.PŽGÖ®¯“Ô¢Ð)­}n‡kL€ú@+:W‡c²I|Ù7»‚¹`U |# ¸ýÕÇîOPz×OÄS)xYsÔÓ–x¤,«"’§ÒhW´³ŽÖÕ Œ«Ç=ëRÐÞI/a26OúµêI®£éëYz¶®t°ŒbóŽ=)Ÿ¡h¯ ´¯r6™†6z –ÏÃki{ç‰X 9 +bÒán­c” ¡ÆpjGe\’Àz5 ¼:«¨Ép&`“´qÉ©ôÍXÃ: yÜ}hMs1‡wQž™=iÊãËVl Ž™¥¨ô9»_ É ÙgŸ÷ äÏ4ë¯ Í5ñ¸†}…Žs].T´çñ¤$',@ôj"h ½ºÂNì {Ö4^ sq „‘H éšè·‚íIžM0¬¼>mìgæ$Ë×oAPÃáÉc´–ÜÝ9Ï+¡óXð)C¡•¾h•Õ`m3JŠÑÛ àU ÊÁ2ÑJ'”N:Vô‘EqÙQ]=f£†X>X÷Ú)ˆ™ÒŒÔG¸Å!‹œŠoSŸJ:fŒç¥ xç½%(>Ô„öÅâ—ÒšOåN´ LzR´ãMäóH P8¦\&ø}TÓûqM—&2R) æ´«T’ñ÷çä=©'…N¬ÑôLóVtËk¸o\•*„üÄÓ¦¶¸TiŠƒO@+B:£PÒ]D™òÂô¨Uö[àó»$UÛ^dºuÏÌØîÿ³Jùdaºc¨  ÷R!VÉÏoASË+KäE¸ãŒóRIavÖê qÇz³wa:[[ʰÈ>lS^þÖ8/#Š,®à2k¦¶ˆÃqƒ»hÁ&¹«¹d•£»1•ÙÏs]5”ÿh¶I1Âú™%@V'Ï<ŠK =#Ó$¸9bèx« ¶’Xcò°œTšlwSi«³åÚœsG@êcYY¤ö³ÈË÷Aäô4rÐYöøôŠ.l,î!‘«ðr}ªUÓn%Ñ£Ú‡x}Û}E0**ÇÝ·îÞ=ØÎãÖ=¬rëb¬ÜÓîmu ¤·2FsÑ@wëKuo{¨²E3ðAÅgQkk¤ `íµât_*7,wŒv­»E“ìÑùç2c欿C<¶ˆ"MÈæÀ槨úíÌJ-`“'{zÔú…ªÛ¥³«±‘À-“S_Áqýf 9Àæ¥Õa¸“ìn±7ÜïT!±¬sk‘`FÐN|Sã‰/õK•‰E®¤[;¨µxäùVQœÕy]3U–F¶&7$phú¹“P”‡o.<àg­W‚Ý_Vž PNpqÅYÒn¾É©˜š‚o^¢§Ii«ÜI"€²UñÀ  –e>Á8…Í?úlwNn$c˜Ø`Sè6É4wRyy$ô4Ý/b¼hDebÝ—$P:åI-¤FèPô®oÃî°ÇxàáÕ2+©¸šØ¿>ÓŒ×%¥Awìд-ó© HéI ‘ÛÙ‹½:æöFc2AÏZk]<ÖvÈfûO2¸íB;x<Ÿy0¹(§¹«6–ñ^ê—‰xÛÙ2LŠÞá|Q÷ÞÉ8ãZàϧjÓÉ, UÉÆOñ   š…ÌaŽÁÑsïZºó¼v¼LU€ê gx_O•g’îD(Œ0 ÷­MfÖI´éÄJ]Ø`(©ê>‡(¶!´¶‡o47­Gzâá-ÈÎÅv¶ï­,r^Çnúy…þcÂíä—RÓn­`µ%Y€^p:ôª×i6QÙX*DI ó{“\ï‰cfÔíÁÎ@Æzs].–òͦÂò)FÀÈ5Ïø©$Kûy6€võÍ.£èPÕ­›ûR+q!åT ž•Õé6RÙiëÒlç>•Ìj’2ê–· (¤/sZÚÛ¤Ó…ÃMä]Ûs×ÐPÁW£63d°ùN®+A±KÝE–G`SæïÍuV-öŠ…ò¬ñàÿszWPë%3ÆD™û›c'Š1“qaÔqN·ß¦ë³À’’»OÞ9Ï©/¾Ókâap gp8#ß"KÿÜTp§9íÅ1ÙØ\k1Ésö§«ãñŠ‹X²’V(¼ì³ªüDZéV4w¼Ó/žÑ­™¼ÆñÓÞŸâu™58'ò‰EQ‚¡ Éks¡i‘(-#íFa*ê)2JÄ̼ðXö¢ôßêº:Ê`#£ºÓô;û™LVÑÁ²4Ϙǹ¤P )é\§Šâ8†Mǃ‚;WT;sÇzÁñ=´óÙ †2à6H³"ïívúeÇÚ\g(àJ’ìÝêsyfrUQHTïžõ\Mq©YÁaä•hÞ>žõfâÞëMÔ`º´ˆ·Øb˜¬í›ÚiÖŠÒ³•8¦ê’^Ák`‚FPwïïW|E4·:U»¤ ¶HÇݪZœÒ=¦Ÿ$¸Uê( ëN¾·q;<²c)ž)·Üj:³ÛÍ,‘ ÏÊ;Tº„®u+CÈÁ€8ǽEuvö:ì“4m´ö"iÂþ{Ók Ë„²r{]°hç·5Åé7«o­³2“’#×¥v‹÷})1£Äsœæ6sóÁÅcF.Nöq"ˆäàÖ·uíÃL”*–ÝÇ¥aÃ)ÿ„jXÈ#~t eë»ë¨ôlÊCÌp[¾+:î+æ #¹fÞ3É©¯ÙßD³ùN½C«] óeå), t¦#´¶böèç©PMMŒŠ‚ÍX[FÇÊ*~I©(AïAäqÞ”š& Î9ëHIÍ/Nô?'ZQ‚1œP(÷ lSŠfí¾´§¥ϵ 1N)zŠ`àšeĆ(Õr@ȆJO¥AqÝ'–Ä…ïƒ\òê—Œ\ïçÐÕµÖÚçÍÎ9éWbnlÆ©oU*Š©6·i±èp:Uõ„fŠàƒ¸pÕRÊ(æ{4nùKS¸šÕ™ oÆ}ªkÆYì¤ 0LŒîô¬ ‰`švˆ>ߺ Mníqcvå9aëÀ ƒM’ñ‚›¥xÐóƒ[»£Óí”>Z/ã\õÔÖ–$Qnù˜ôgRÔ¥1Û´-…q’)ØFŒšÔ1:¬¨ÊdÒŽPñ†^„dW~y;ÇÌy&´¯ï§´ŽÕ!l£#Ö÷[I"Ë6 CÆOh2…®KWšy'‰I hõ©f½¿µ¶]ö°àzâ‹çOÉ"oRõ*‘éÍs“j³[ÙÛ…Tód •cK¿¼–ìÛÜ 8ÝéE‚æÖì0õ§õªóÊ-âiJä(ÏÎrúILñ§îTôÅt—ÐZÓ ôÆiö—ßF^"x8äW+¬Nnå†eèê0=ë¥Ñ¢–+Y€yÀ  ÜëY½åÔèÐH/ Z5}Y­&[ku +w=ª”ZõÜ7>MÔ žøê(°-´‰Úæ;›É4c…ZÕš(®áhåS´õ¬fêIš Tdš³g­3é³Ë*âHFõ  x"ŠÞ ‘ T€¨[T±†sLªýÅa®³~‚+‰c_³9ÇËÚ«k‘A%ä&*ò€KœÑ`;‘\¤{ÒàxÍrV2ÞéšœV’˹‘ƒ]rzв69* ™(ÁÅV–O%M¤ª‚xëXx‚ñnߤàŽôÒàvÅ9¶‚+™½ñý’)-â+½ˆ;…2Mvê9ag„¬`e»Ñ`¹Ðý²ØÜ˜Ä±ùƒ‚3ÍLñG.7*°Ïqšáµ(£m[îᜃ“Øš½¥ê7¶ššÙ]¹e'Ña\ëÀ  v8õö¨Üá23XšŽ½ö9|˜£2IÔúP3hª™7õÅ9”7=ëÃ_[ÙÒ,§¯ ­Ö8LŠ_”(éíMtö‰>9ät®^ÿÄ’¥É‚Ö Á$óV.YËR¾˜â²,õé.¬î%6Ä4]‡z¡¥x‚áï]n>usÁì´X.tÆž!F»}⣋N³·Ç +ø¬›_E-ÓE4eâjôÚÍ‚("áyãƒE‚抨SAå…2YbYƒ+ ‚)ù¤t”ŽsTÜ·HÌ*æ®#’ÂÀÉ8ù…k\iö·1ÆŽ>Tû¸4ùl-æ´[}¿»9¢às:ŠÆÐÚ̇‚ º6îÒ`±BA}ƒqÅHÚe«Ú-»'Ê:zŠ’ÇM‚ÁÊ'©=h¸Xn«ú§yP¹í:hF•u ’Ç$ߊëRt1¸HÁ³eðý‹‘…eú@s²&-lÙ› ±ãÓší Ç–¸ÇAŠ¥&•iÈäWÎ =M.—Ó­I …ù¶œg5¯aá˜-®ŒÍ'šùGLTóxvÖ[ãpÌã=W<.;ä†î“9"AÇ¥M~ñ ÙmÆàØ­Åðå²YMlŒÃÌ9ÝéQ·…âm5m¼Â[vüw¢â±‰¨ÝÅ&—j@]OÝ¥Ewv§T‚hÊQCgŒv5Ð7…mÚ(ÌmÑýãýê’ÿÃv·h6~éÀá€ëEÄYÓ#°wÙJ—À.VŸ©ÜýšÂy)d\àŠ4Í2-:ÓË^Xýæõ«2ÛG4-ƒ!Æ +Œàîfó´´f˜Ü~AÒ­Þ¢·†m‚èØ×>²10I¸ô$ô§Iá¸ZÁ-D¬ Û©Ü,cjžPÒtíÙW#¯µ6òHƯdáò»W“[—~Š{kx¼ÖHÆzæ–ãÃV·"îdt]ªÂ‹…Œ­Nè7ˆ­LlFG5Öcdc&±´ßCe –Wód^ž‚¶ŠƒÅ!œw˜ø±Ë¶zr*ωYöR.1œãñ«ú‡!¾»óÕÊ1Æïz~£áø¯Ö"%dh×h>´Åc/Rp5û&N QœStR¹zý€oçWôÿµµÒÍq?šÉ÷G¥XµÐÒ×R’ìHv¾p´\ M*çêJPXTžŽÓî Ä·t­ˆ4H ûKI›9ÏlÔN„tùe’I7nzQp±ÏX¸óºÆäm?ÒžÆÙ´ÉYÏ]ùÅjÇá¶‹Sû@—ܿҺA·Ê‹…ˆ´öÍ„$§—ò—Ò¬¥"Œ(§f&(4‡4†!>”f“š\(%±Š Ð1¸âŽœ21A#4˜«JN=1Mi$]вžâ”¿´íD„oèpjË_[¤K+8{×9mkæM0à„ÎMLP$œeU¸ª±ßö¨a™Tg¥>kÈ¢‹Íg;{×35³­¤S60x«·êŸaµ“Ž;¦uî-ÙåNÁ«:;Û©d’elwE!Ù}˜Êçi5jTÔeŒ©ù»Ô–—7+©$&RËž™âºI&KhL²ª+–‰|½lR0ý+oY’%°^¤ü zÐÁ ·m;”$§¡5CTÔ¥7_gŽb±ô&©]$‹äLЬa±ÈïR]¡mN2@mà” äi%ÃLÐGtÛFNs[Ö7ñCn‘Op¦P9æ± ?µdˆŒpp%½’¾®a`Jƒ’)ÔA{o6ï.@Ûy$•[ûrÈÌœ)Çë*Â}^æ‘`Uk->;‹éábÛPb2ß[FžkÊ “Ö¬ ˜¤Më +Œç5ÉIkܤNï*ãW¨¢Ê':„+º&Ò0hÐw:%ÖlÞðêÜp\ÇæÇ *:ŸJätë?7íYÃÔõ©b&=fU+ºLp{Q`»:•šÒì” „vàÓOÙUö!‰déÆ3XÚm’ÛéÍzŒÆFŒñPé6 yœåüÅ“;³@ž°+d/<Ó"¿·¹Fh%V>•âa$L x<õª³F-oíÌ1´aÔesÖ„s©Þ\]°3ù`ÙÚ‡q soZã4»8nõ6ŠbW {æ»tP¨t ‘“®Oo½·9b:ÕM?Ä¡‚Çv6ž›ÇCVþ8½sÚu¸Óuá’÷úšéœ˜çð¤åì5«ÿíE²™F3‚1È­éµk[RVâ@‡Þ¹ˆQ"ñPTf=[®qV/¡³¸Õ¤Šc,®Ëøhb:d¼­ÍÂÈ­È5Î\xŠêS,–ƒo Z¨é*ë¥ÜTFp¦›h¾¹R6ìl;æÜZÄ· ·QªÇ,|c¨©t}Y¯lÌ·;i#Ž+ ÃOÝ¢ÍrÓ0FV;dw§éÖ¿mÐ$‰k‡'4Ö}ºÛÈó„éåŽ7gŠš9DܬOzà-!it«ÅiHXˆ!sÞº¯FÃFˆ±<äŒÒhh·¨j–Új˜Ÿ›€z¯©j¦-'í–»_§^Õâ[vûT òîqô«—ÚrYøvUIYÃs@z^¬/,{‚‘’Ûzã5¡$Ëïf}k]¸ö gC¥jË©Æì#)´àŒÖ®WAv´°–páíR´¶¿Ôo¢žå6,]8Æk~Îò Ø|È[p{T㓞˜¢àrQX_E®å²åó¸tÅv#…´£ÓLŠ«ó0÷  ½rÎk˨fÜ3Ú°>Í4)§›R 6Cír6ñAeU,Øw4!œ–©aslläDÞQð3Ȧ$Ë®G3[üÌFp8é]5Íýµ´"I[åõ4ëد£2Dr¹ÇJ.Å¡ÎÚZ^C©\¡ƒ>`o˜Ž)úE…ÊÅzÏ +2•\ñ“]_§JGiÆE+ÃÂ×0Ç6œmÜ´¼QWlb7úÖJ?'b=;Uû|—je¸Éô­=#LûÈîûå”å;…Œ½ ¯Nl%ƒ.w1ÅeÉņ»'“ gÜvŒz×{•^p=j6¸Ú § ,b¾uu-¢Éq$’ûúVû®P l})Ùç¥à·QHö+å×Ò»ålg>õhÚj6ºÚ8C+°ÎìqÍv)làf”cÒÂǦÛ^«Ö1:‚Œ:c&™mk/ü#·h±0”IÈ"»0LÕuK+{Ÿ"IU$î1ëBlkKûcèwq$LP”c’OZM .m–âICGnªKnÉ®²;Û1!%xþh½µŽöÑíÉÚu¨adr:&•%üòHå’Øž{næ»4‰a…cŒE©iºgØ|’ cð*üÓG eä`ª:“EÂÇ3â›I`’(Ù‚“£54Éwqá­e |¸ÁÀ­Xõ;)Îâ3ÏLÕ¹%Ž$ÌŒª:h 'íW  ˜%ˆ…ݵKw©µ;+ƒ¥Ù4P±Ø¹lv­ûˆ,n¯ã2Ê EÈ‹<~UmnížSÊ…Çs͆†F—w-”’Ý ŽãÀ$c&±ô«+«ä™Ék#å¯Òº»û!{e%¾í‡vªºm͉U–é^%\ ÖÐ%­ºÅ¨Æ)·Žcµf *ÇŠGBÈÊ28&ÎÃS[-Byš6>fFÞã5§¥ÊtÝ2êíÑ‘¾@GZ±§øuà¾yîJ:óŒæ´µm9¯¬„p°B¤0ãŠwŽwIÔ.f¶H¼ŒYØŽiÜÝXCqhö®L„ã¦k©±´ò#G™PÏŒ3¨ëVØ&ì(¸Xä5=>xô[LFIRKÛ5aíîï¼5ó¡Þ¼€G$ é™T¯J06àc\,sZ÷Nš !`±¡Úq×Ú³ô·qe{‚$*N=«µ ¨§ïU!šÊâFHZ6q÷‚′9Ý=ݬ–RCû¬“æzUÖðÄJÃ2í=G­o$QĤ"Ôæ© b(V0xQšv~j1F1Ï ^”½¨'ëšJ@'j9Å)šùyÍCx>ÔA>”*FÁ^(sÏJ3ÉɤRæ€R“€}©&‡ccÒÌ«k»««¶D§©Iª,J¡ <·­I¥Hé$G¡&£ÔWXVn#&­nGBÅ»Ék©‹_0ºÞ´¯âi­]ˆ8¬ˆOŸ­‡Œå}kvD3ÀèsvS[Ã4qÞu«K«Ìtç=$ª #^ÜeÀ R‡û>ä Áõ¦bê·¢0àä¤ÕOQ¸khqò$†â'IBÜHÇi—² ,-3Àéš½o©]-ƒË$|*ü¤÷¬øõ;è›ÏÜJ1èzVøA¡ŒÀäVcÿ±Bîfüã½0:›9¾Ój’Ã8¬Ï+›tÚ¹Py>•¡¦®4Øݪ^!À±s»ŒRêR\^Ac ‘±«~ucP¿šG¶‘(ཉªí } ·*ØaI#ŽÈÊ@3úÓzÿW¹‚æ8cP œŽ¹ªÒj7ðßÙÁ'øqÅ;U’&Ômä‚ Ó¡žÞmw{ãhõ¤#T¹–ñ­®0¥oîÂçÒ¹{)£ÿ„‰°V$ ê@H#­9ÍjúèE±SdoÕ½j e»muu&” dðø’ñ.$Žt Ù!@ìjÖ›¯Ü=ãAxª 0+Ÿº ]¾l…~¦­ ëH¸e(sŽ˜"˜‹-®ê/<—6êMºFEiÜxŠTÓm®bˆ~ñ°ÙíŠÊÒfˆiwñHÊ ŒŒžµå:%º¿Ýõ=1@ºž¹sdÐbåÊ ç<æ±5PçT·iíp§sU¿Ü@íhŠw’:b«ëWPÏyfÈÀ U'zHÝBÚ9õdKBÊÒ|ÛóÁ­#P»µÔÿ³îÜ8è =?­sz–þ †Ï( Ð SãŸÅHêC)`r>”Àì‰ ×+âIæ“S‚ÜäDqÆ~÷5Ô±ù‡µr#¸WÕàÜÆ:CdZȆÚö†Ø¦ÌdcïUOVšY,Ñ Äg ±º“Òjâ/í[I3•UŠn¯4­ŒÊøŒÎ:s@1o Ûü€·¯~*6p¹·K„°äœõOE1ýºêY6…žiõ·§k‹si$×CÞÅ@þ*‡Ï s?z±"Ûý|êNÒ÷½]Ò ³{?:í–`'¥0GXŽ0á§•8X€_»Ž*NØ©(NwŠLá½éÇž:R<ŠA’((Çh˜¤< vÓzšAÐf€zÐØÏ|Ð)01;¯Jjšpã­!ŒX#Y o\S.m ¹‘A>½êž§¨5¨ Ï_jÌŽö_´ÆÂá›qù†*Òd¶töpÚ®#\Þ§ :•nAíTÿ´mò̘CV7€›N¹ .R—C·yДõÅhÅo1lUE@×°!d Þ€ÓgÕmí¶«žOaÎ(Ô4=Œ3DzLòsQÜé0On‘'B*{{¨îÆô9§` ’Iâ€+&Ÿ²Ì7¨õ¨BµID˜$v“Å#ëV±1‰çU¨oíî!.’ OµŠèº»UtÌ1]@R@MWþе0‡óWi8ÍTÔåY«ÛNç$ç­6](Jb·…v[ƒ¹Žy&´fÓm¦‰#‘xV%¦³s +Ïxsâ¶.¯vX ˆ¾`GYŒ.4›kƒ0 ¦ÇzQ¤Z}¬\ù‡aÒ³tÝbId•îYV5èqÐÖÜwÉš¬ c9ìÅt@šM²_}©Wçôì+C±VÞê)îØ0¢kÈmÜ e ÍÐHbßXÃ}É8äÚ’ 8a´û2))ŽsÞš5fº, ÉŽ”—­¤Á%“ éLW3ît2vÁk›s»Ò´®4Ëyìãµ~ê*ÌÇ:SÜW9ªß\E­¬i9 ‘;R­.‡m1€±lD0zÒÞè–×Ó,¹JŽqÞ¤–ú&Q<ÀnO7öûù«´÷Ï màH!XcUFA¨éðê0„—§!‡QLmBÞ5Ytçå9ëS¼ê#yŠŒîÏìSN¶[²lÌxéXWz†híí¢Ä9ÜÎMnA©ZÎXG2½y©%ºŠ Í ëš5ÈßJ¶–É-^1±F¨ªú…³Ùh¯ ’ÛO=jÇö¸·y«åŸâÍ6ßY³„k(.Ý­…/G E…·urÎëÔÖà`ÄŒôª¯y†™–5Ý€M jíµ&RÇ[*dóŠÉ¼ðõÛ´œÆçœ­\¸ÔmáÊ´ÊÓ<Ö¡âYVS ª¨ÇVaE˜]…-M±V‘̤ç}_°Ðí,á|Ça‚ÍYº³w{rÑL¨Ü;VÃjv¢FC2½yéIÜ.Šák'œ¾\rT*ôúE¬ö+hlc¦;T†þÝciZUØÞÍGk«Ú]±ò¥¨³„^³¸‚ù_/€W©úÓ.ü7itÑœ²l|½Å:ãU} ½´ñõýà=qZks’«"’£J5 £:ëÃÖWQ¢•*È0zÓì4K;4Ý'?;u«âeaÃޏ5MõkHÉE™ ÷sF¡rèQ‘ÇÖ²u]FErÅ$n“ÿ ý”ä\Â’CŠÝ±Õíµ7€åOQE„g\xb)L$Jß' žw ·} ZÞ¤K“ˆ`mïW®®â´Ì–@ zÓ!¿·žÕ¦ŽPÊzѨô(Ëá»9^7Üà¦:¸¬ÝSMVÖaò௘tª¿Ûwsß|·H\u®“RÔâÓ­ÖYç?uGSNÌW-Ä»cP:V^¥¡%í×ÚRVŽn>•Ƶ»G7V®¢EÁe<â§Ò5OµX¬×O±b4µ ¢H4X“PnÅä ??ZŠïÃö·w^~I9 w­IgŠÌ’:ª×5^-JÎHžD /,sÒèUÔt(u_›dˆ =*†£¤Ãe¢Hª\rNzšÝK¨d‹ÎYT¡èÙ↚ ?vÌ­‘3ÔQf®‡¥›¸Œ’;ya°cìkbÿA·¼@AòäQ€G¥_yí­P³2"ÀS¾Õ ÀÒÆÁÔ ü¦ž¢Ð¯¦i˧[ù`îcÉoZ’öÉ/í8¸íT4Ýv;ùdFQ^FOQZÍ ˆZ9€=A¥`º2ôÝ -åŽ÷UL}Ü×Dd]¡ƒ ù¦ý¢MâE* Ïj= 7BUÓ^ òZ^XÕR ywyywD@ÇZéƒ ncÚ¡™6yŠ_=3Í‹AëÔÚ)Ù§g"™žq@ÃŽ´¤÷õ¤Æ­/lRïI‚hÉ4 SÚ’‚iÒ€0i+éNî9¤îE 5©*%?5=ßbô©Ìê÷ u$Œ¤©=j8g0²ùVà¹üjÔ··wåã‰>\ôQݤžaF}Eh™×™£dxBL9$ µ=ÄŸØÑ¯?7STá¸{›‰ ‹t’ v­™¬\éJ¼ ÐÁjfG§È‚9ã%†2jFòÛLÑÀ]‡V=K¥›©7Ã(*ˆ1‚*¼qßD“Å|ƒ9Èë@tRÝÉÖ¼„¬DŒ+Ÿ³ŠA¦Ê%sÎA­}9ÌúzäîÈÆ}h`s^OŸxÁ²‚IÅX´€ù7qŒƒ·¦h0^Ú^IJIl‘ÅK¥ÛÜ–ºSŒŸZà ²Y4y&9ܤ‘è(iS•9µI wQi712ƒÓbËOšm£+¹ÈÜ;P*cÃGròEOj¾~/¸"©}—Tqö»?ÅÛ½¡†ÄA», i3ÂÆ3m4’6åÁÂŽÔËwè·*¬v£Œ})VËT¶vŽ4%dàž¢¯I¥M“$QÊÇsÞY–4XA¶Iz1ã¥fk¨ ú²9.~R=+OB’é¡òåˆ*F095S\µï#–‰\ÑÔ:\@–º¥®×Àf4Ëh×QÖåêsÞ¥Õ,®¥Ô-ð¬K(äv¦GL¸yà*8È犚nîá߀*ŽªŠì…õ§¤eµ,ø7je¼pÞý—aWvÁÍ\¼²žioðÇzw]:Ñb× q3…AÏ=ê½­”wô¶Ó3m,Ý _Ó"ºƒÄr¦ÒÀçq>•Jùn,5÷xÆÛå8õ¢à-äV+ ¸vT|½jµŠ¬z”6` dŠ¿«é7ù*™Kœ¶z®-n Ö-üÈJï àh ,!ŠÊØÀ°ç¨t»bú½ÌrHÁ6ì£4û›+¸uí°«…“ø4ý*Þê×Yš&‰ØAb(¸Z<‘Å~`™NœöÍ7IÒ£ NdùÕúôÛ [›«ë¸S(6ãý)ú\šñ´D#-ó?ZW{X#fê}©€—7“\Ak ÌÁêOQW$Ò|›k™‘˜E³*¹ëN¹Ñî¦Óí5ÜBàAN´¶¿¹¶¹‘R#òÂôÎ(º+xo ÊÁÈØû±šŸAÓ¤šH®ÞVÂ4Í&Þò[ »rŒ#*q‘üTýß$ë)Ž$bX‘×Ú“ÕÁ¹ÖRÍœ¬Dކ:6Óõãf¬Ll9½3Wë"î8Y•H ã#бh'Ôu„¼XZ4QÎh@C%¬qø‰ ‰pޤ°íȦi>|W—ñȤ¹î*[•¾´Õä°SÇËÏ6÷¶W#Qòw,„å¡  6Ìú]ÚFY$Rw{Ȳµó´;—w`‰õ·‰“L¹/ïu›§yߨwhmÛ¾8äÑqYî­ü2\‚ÍŒ“ÈZ=6âI­¥†GÜãs9=*ëÚÜÉᕌFC†ÎÞäU=6óR`– I#·½0:Øb¤žI4ðrIô¢=ÞRïÆìsŠSÇj‘`¸òiAçÚšàmö¥åi¢ž¸Óž†žxÞù ` æ“=iÄàuüè84¼ŸJLdf“ê)00ÅJT4d˜¨”T™àR^ÞÚ;mËÆNI©Ê«Œ0SrwzœjÇo RHÔÜ œ–™iÊzP!UFivŒP:Òàó@î­#º@œg8©â`‰Q :b“ ÷§(ÊS‡`»4p:RöФ1ç9õ¤1øðE=@Mõ¥SÞ€Û40? ééKœŽ(¥&rE*ž´¸Àé@ hP Í&x¥¨ !àJö¤Î/Š`’8§mÁÁ4˜ô¤ÁÈúÐè’¬úŠz¢… RµÇzQÛé@j ô¬ÝVÖêê!´A?7®+Lþ¢›ÎáL,rÑø{PxÄO0ç¦k¥²´KK$¶Îà9ïVç4¼Ö‹€*@ª ¥ÆqH¤JqÒÀ1Æ2^)c¨Ò€~`G­9{šgÙãiD…°ïŠ‘£BT²‚GBGJšq#¯½0bnÝ´nõ¦µ´2•2F¬GBGJy8ªN) Ì¢ÚÙä™6Œíj;+„¾€La(sÀqÈ«,;v£Ž€w¦œÜÒ 3ëM–ã§J]À @1"Ev* ÔÖå¦ýÛFáßÒã­&O8ýh5a†PÀž†— ¥4qÏÐYC©  ýE4$P¨ €z(§‘îi¬Àb˜ ´'¾)A ¥(4p3Žô€R0+>ãKŠêæ9¦ÉÙÑGJ›P¼û›ÎT¶ÑÒ°á×ï®ídh-ƒH¤téŠ`tÀ*á@˜¦”3\ôÞ!”iâxáÄŠû\ÆŸ¨k7pXÛ\¤ [wj,#q#Xó´uëCÄŽ¤c“Ís÷ºõŤöø„‘ß4ïí˸¬ešâثŒS°¢5@éBª©à W6Þ#¸6ÑΖ¹Aþ°ö«ÒëH,až5Üòð‰ïJÁsRXÕÀÍR}JÂ>Îó.ãÆ*¥ž¯<¯-­Ü^\áI_zÃÑìP¼˜ÊÄ;ºûÓ°‰ [@àÒˆÔ&O¥c¾¹¶b¶ð4±Fq#Ôš¾´Öa#s#ŒóÚ•‚æËÚ@Ó hÛ•BŸP:×'%ö£zéj鉹8âºäÈA»“@ 1ŒRcôÆ`ô©ÈÍFŸy³ÚX‘0sB‘…ÏÒ…± SX`ƒÇ€%è{Ñžž”¹È⃎ÔÀÄ~&?Zk@^O4‡š &8ëJ½`8—4ƒšE?5ŸZo@{æœA¤8ÚXQÍ&yü(Î3ÍÐ; H<âšy=($ó@éͰÀ p'¥ç94¤We>Ë/Ns\߇.PGw 1ÉS] ìk-œÈãp*x®'L¶2ݘ‰t'!Hõô5Beß½ ÜùŒAŽ}MM¨ÝÃ6mýÒ`u=1[¥Á&™öM¡A½}j”-Þ9X¹cÃc¥C±—ªº2i“nÊí5½s5µÞ•>ÇR¡qžÙÅEu A6Ÿª¹_,åXóEå„VÚ*nØ™üi\,Ì¥h×ÃòÛù€Î{u¨Al,d“r“å#Fi4;E¾gY¶©å;]Þ•oqq´'ÝÛÐS¸Œ»Ë˜Ž¹k4n¬Œ»N9ªúUÌ0ëHQ&BÖ¦› Åe#»°“?w#¥0x~(õ5º‰ÈPs³è¸X¡ \,W·îë†bF{š›ÄD'Š=cpæ¬FÚºY ÛŠûÕKÍ2[½u’u%†U‡AGQØ¢äÛjOߘ\Ì:VäÚô6÷Énàq–ª;/Eo.ù[Ì åET¾±šóWTì‰H;Âõ V:Mà㣌œTj˜u!j‘Øç¥â“4ÜÛ4 y»RqšPp9hÜ=zÒhÏ'4Ó×½+Œ^´½i3Šâ€0ÔñOaO½ œb—4ß⣽0iÝóMšpæ .G½4ÒôÍìM(8^i¹À¡cEÀŽGÒœ1L#8¡i€üÒƒÏJnsÒÆ€$Všwpj,ñNVù@¤ÉÈ u»{{SF2E80$Š\ñGzAÁÍ<ÐÀî;PA¦¡Ú:Ó»QpÓšP}é îÈ¥ã4ÀxàzæŒà Ñž ÈãšrãœñAéžæ“¢ÐOOZW`8žÔåçŠoR3O­0ôåÇ$cšoLóŠP9ÅAÁô¥Îy¤{¥)ôéEÀw€G¥4ûP½½¨ÐdsIïBàA­sÁ Ñü4„â€dœRS@aŠAÎ3@ Œžô‡)K2)¿\Ú1ƒÈ IÇãJ­©¥=)'&†`pHö¥pÒ“ƒJi:qLÚ˜±D¤•Eó)ÇùQ@ O8¤æ“·½Ž{Ñp óƒC˵€ õ™ÉúR±Í ã†([Æ«ôò2AéŠ2h=E,sô£display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.70/prog/sheartest.c0000644000175000017500000001350212242265625014631 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sheartest.c * * sheartest filein angle fileout * * where angle is expressed in degrees */ #include "allheaders.h" #define NTIMES 10 int main(int argc, char **argv) { char *filein, *fileout; l_int32 i, w, h, liney, linex, same; l_float32 angle, deg2rad; PIX *pixt1, *pixt2, *pixs, *pixd; static char mainName[] = "sheartest"; if (argc != 4) return ERROR_INT(" Syntax: sheartest filein angle fileout", mainName, 1); /* Compare in-place H shear with H shear to a new pix */ pixt1 = pixRead("marge.jpg"); pixGetDimensions(pixt1, &w, &h, NULL); pixt2 = pixHShear(NULL, pixt1, (l_int32)(0.3 * h), 0.17, L_BRING_IN_WHITE); pixHShearIP(pixt1, (l_int32)(0.3 * h), 0.17, L_BRING_IN_WHITE); pixEqual(pixt1, pixt2, &same); if (same) fprintf(stderr, "Correct for H shear\n"); else fprintf(stderr, "Error for H shear\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Compare in-place V shear with V shear to a new pix */ pixt1 = pixRead("marge.jpg"); pixGetDimensions(pixt1, &w, &h, NULL); pixt2 = pixVShear(NULL, pixt1, (l_int32)(0.3 * w), 0.17, L_BRING_IN_WHITE); pixVShearIP(pixt1, (l_int32)(0.3 * w), 0.17, L_BRING_IN_WHITE); pixEqual(pixt1, pixt2, &same); if (same) fprintf(stderr, "Correct for V shear\n"); else fprintf(stderr, "Error for V shear\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); filein = argv[1]; angle = atof(argv[2]); fileout = argv[3]; deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); pixGetDimensions(pixs, &w, &h, NULL); #if 0 /* Select an operation from this list ... * ------------------------------------------ pixd = pixHShear(NULL, pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixVShear(NULL, pixs, linex, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixHShearCorner(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixVShearCorner(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixHShearCenter(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixVShearCenter(NULL, pixs, deg2rad * angle, L_BRING_IN_WHITE); pixHShearIP(pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixs; pixVShearIP(pixs, linex, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixs; pixRasteropHip(pixs, 0, h/3, -50, L_BRING_IN_WHITE); pixd = pixs; pixRasteropVip(pixs, 0, w/3, -50, L_BRING_IN_WHITE); pixd = pixs; * ------------------------------------------ * ... and use it in the following: */ pixd = pixHShear(NULL, pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixWrite(fileout, pixd, IFF_PNG); pixDisplay(pixd, 50, 50); pixDestroy(&pixd); #endif #if 0 /* Do a horizontal shear about a line */ for (i = 0; i < NTIMES; i++) { liney = i * h / (NTIMES - 1); if (liney >= h) liney = h - 1; pixd = pixHShear(NULL, pixs, liney, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif #if 0 /* Do a vertical shear about a line */ for (i = 0; i < NTIMES; i++) { linex = i * w / (NTIMES - 1); if (linex >= w) linex = w - 1; pixd = pixVShear(NULL, pixs, linex, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif #if 0 /* Do a horizontal in-place shear about a line */ pixSetPadBits(pixs, 0); for (i = 0; i < NTIMES; i++) { pixd = pixCopy(NULL, pixs); liney = i * h / (NTIMES - 1); if (liney >= h) liney = h - 1; pixHShearIP(pixd, liney, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif #if 0 /* Do a vertical in-place shear about a line */ for (i = 0; i < NTIMES; i++) { pixd = pixCopy(NULL, pixs); linex = i * w / (NTIMES - 1); if (linex >= w) linex = w - 1; pixVShearIP(pixd, linex, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 50 + 10 * i, 50 + 10 * i); pixDestroy(&pixd); } #endif pixDestroy(&pixs); return 0; } leptonica-1.70/prog/webpio_reg.c0000644000175000017500000001160312240302334014734 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * webpio_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the Leptonica regression test for lossy read/write * I/O in webp format. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in webp format. * http://code.google.com/speed/webp/index.html * * webp supports 32 bpp rgb and rgba. * Lossy writing is slow; reading is fast, comparable to reading jpeg files. * Lossless writing is extremely slow. */ #include #include "allheaders.h" /* Needed for HAVE_LIBWEBP */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ void DoWebpTest1(L_REGPARAMS *rp, const char *fname); void DoWebpTest2(L_REGPARAMS *rp, const char *fname, l_int32 quality, l_int32 lossless, l_float32 expected, l_float32 delta); int main(int argc, char **argv) { L_REGPARAMS *rp; #if !HAVE_LIBWEBP fprintf(stderr, "webpio is not enabled\n" "libwebp is required for webpio_reg\n" "See environ.h: #define HAVE_LIBWEBP\n" "See prog/Makefile: link in -lwebp\n\n"); return 0; #endif /* abort */ /* This test uses libjpeg */ #if !HAVE_LIBJPEG fprintf(stderr, "libjpeg is required for webpio_reg\n\n"); return 0; #endif /* abort */ if (regTestSetup(argc, argv, &rp)) return 1; DoWebpTest1(rp, "weasel2.4c.png"); DoWebpTest1(rp, "weasel8.240c.png"); DoWebpTest1(rp, "karen8.jpg"); DoWebpTest1(rp, "test24.jpg"); DoWebpTest2(rp, "test24.jpg", 50, 0, 43.217, 0.1); DoWebpTest2(rp, "test24.jpg", 75, 0, 45.759, 0.1); DoWebpTest2(rp, "test24.jpg", 90, 0, 52.066, 0.1); DoWebpTest2(rp, "test24.jpg", 100, 0, 57.879, 0.1); DoWebpTest2(rp, "test24.jpg", 0, 1, 1000.0, 0.1); regTestCleanup(rp); return 0; } void DoWebpTest1(L_REGPARAMS *rp, const char *fname) { char buf[256]; PIX *pixs, *pix1; startTimer(); pixs = pixRead(fname); fprintf(stderr, "Time to read jpg: %7.3f\n", stopTimer()); startTimer(); snprintf(buf, sizeof(buf), "/tmp/webpio.%d.webp", rp->index + 1); pixWrite(buf, pixs, IFF_WEBP); fprintf(stderr, "Time to write webp: %7.3f\n", stopTimer()); regTestCheckFile(rp, buf); startTimer(); pix1 = pixRead(buf); fprintf(stderr, "Time to read webp: %7.3f\n", stopTimer()); pixDisplayWithTitle(pix1, 100, 100, "pix1", 1); pixDestroy(&pixs); pixDestroy(&pix1); return; } void DoWebpTest2(L_REGPARAMS *rp, const char *fname, l_int32 quality, l_int32 lossless, l_float32 expected, l_float32 delta) { char buf[256]; l_float32 psnr; PIX *pixs, *pix1; pixs = pixRead(fname); snprintf(buf, sizeof(buf), "/tmp/webpio.%d.webp", rp->index + 1); if (lossless) startTimer(); pixWriteWebP("/tmp/junk.webp", pixs, quality, lossless); if (lossless) fprintf(stderr, "Lossless write: %7.3f sec\n", stopTimer()); pix1 = pixRead("/tmp/junk.webp"); pixGetPSNR(pixs, pix1, 4, &psnr); if (lossless) fprintf(stderr, "lossless; psnr should be 1000: psnr = %7.3f\n", psnr); else fprintf(stderr, "qual = %d, psnr = %7.3f\n", quality, psnr); regTestCompareValues(rp, expected, psnr, delta); pixDestroy(&pixs); pixDestroy(&pix1); return; } leptonica-1.70/prog/lion-page.00012.png0000444000175000017500000000664111330622127015500 0ustar dandan‰PNG  IHDRÌp3å¡'PLTE***UUUªªªÔÔÔÿÿÿa¼ pHYsb&2 2IDATxœí݉Vã8@akóû?òè—lÇLЦJ·îí3ìÅpò!y‹Å¶¦í§û甘 Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1¿Z«í§„_%æ—ûí-Å$%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ ø˜í§€ÿ®Õ0¿AóWÿɺú«a~ù±þ.IËå›ÿòç[ ³ÕRj}#õÀh9}Ã¥¦ô­ìwh1Ìš¶´m[þÿ¯=0êv`þb”¶vÿš’îï-5ç®…Ù-Kke{7xj=ÞhûÄlåöå­ìø¢œë»1ŽsJãÝYIíü÷kQ®†ÙÇe<¾µ„Yh´v¼ŠáÕjÿ¯ÅÜ'ãø|ʵôÇH>k)„k×ëß©¿SÝsŒöæ–sÿéÌ%¥úê§øm[ ódé£)Õ.Ó_•ª}SWb Î¥c…ÄÖ_o¹«…\»Í¢ÁÖ?º÷Á®i‹±\ƒ7Æq—.[k·_‚%Z s;·‚1öÿÕm¼ŠídŸ/sÌÁ²ƒµáÕw€â oûA­oHkÇž£3\óÎå1;æì¿$ÛZs1Ì1GÆ(Ëýçn[ ÌxÈûƒßG_.!¸ÍíeŸ%kÿÂnüØüµ™¬#3&ßþâØG#3~I¶åRÖÂÌs×§¶<kŠ¡:1ÖfÓl*Ñ᪀ ­c‡g?¦ÙšJSs-cØŽi÷˜TsLß)¾Ñ¶ØþÏb˜±7cªöÍ]ì¤Ö9*É2¦Ù=6teî¸Ä›iìàä6>å9¸û î[Ó[Ü9Zû÷Jƒ»ÄÎm|åzœkav¦~”Ù‡N8Är‹½Ò¶Ï˜Ò÷Bû'Jëæ[ õ{¸ýuÛ÷ë˜ó<ðxì©¶<¦ÚíyVmiµ¹æ8è˜Çøã幋R&Äñð×TkyÞ{©ùqø9¾M`Ÿ_¿Í_…vÿ¹,¶+»¯‡9º­™4åyÅf¯>#¶çaVîG+{~:4¾¼Ï‹íÊî‹b^;-%=¢Ö'ßòÆâ+óg[n’]³Õ§©ñý×þâs â}lmÌ×½`iŸ>°ûÔª˜_·ø»£v¡ÖÂ|õ úX{ñª}þÚÏßk\Dy·­ýÝ[ ³Åñ|*yD¼’­¥öÍÕÎwÅ ùVV;¹~o)̼•šÒí¨ããîOó ŽþŸaÛy½l¾×n;QißÄáe+eɉw-Ì>$ã$[©ãá®ãºf©åñD‘Vqâ§Ï–¥(¶<ÎÛö¯lóºJÿ5(ãô{‰/mi«{:Î.ıIØ%¾õŒ“o)ÌCóŒig×=âýÇÉžëy"qÒv<hÛZ€ÆU²þqÚ}ÏóÌQpõAÜΓùü.mž´_pÛ¹ftœþÎ)FPÐ作OðÊf×*m|63´ýñáù/ö8S[示µër÷ãW¢Þ/jYÌ­Öq©¤?ê×Õ²§hۖdž5·ãé=ó,î8?æ×crmÛu"ðäk¡Úâ²ÌrÛÍe1ûÌŠýE½<æóÃ2^Ôv)Ž öxºûç‹ZÇ«û¹ ÷'„Ök5Ì×½b{ójÌ/°ý#`Ú™˜ Ä%&(1A‰ JLPb‚s.;q«ŽJ) ^vþZX̸ì^z´ðóïއŌ,j{êü öÄ-óLLPb‚”˜ þ`LÞNíŒÉKLP(Ì¿4q¶_Þ´Ü<¼f+q“^»½_çG÷ýúèóÂ=õ±ò])):ýSÓëE›V^û`ÌX:ßþy—Ï\Žôz6{º?ò× \Ãýv ç9 دW ¾­]먋`Ž[³êý¾ëåõ(?¯ât® ;î¶|¬'û¸—s~ä»ù±ÛX[hÜe7,ÄB¶+Ü}» æ–ÇR±çÙòã¡2njŸ‹ãÕ4oS‹?×’¯…ãeÐÅÝ·e‹»Çâ®é¸K(¦æX#±æÛ­µu,j7i÷o±•–rXVXIoÌXÍ  N±âhŒÑ¸(né+ÎæñЧ1êr,vY®-â±ÀAÜD”K‰Õ†ûDÛÆº¸Ô«wçz»EhÜÑ7îÌcíï’ãnû%_[³õ-f7mmsmçCç¼]½¦±Âs‰…+:@m¹µsVœ«êµ¸>Þˆe¢s'AÝß äõayu¸Ï¥¢Ç2ni¬X±Ä5Ð50ó±=ì{5u®ÜÒ¼‘=æÊX;ó.0ÖcÏe¿nÀ«C÷ 3o܃̹„ÿ6ÿÊ»íñ7Ò±æA ŸËÙÖ5îÔ\³ž‹óôa·ÁöqÒçÍXë0Æãðé¾±nÌX¨Û^«…Œ%Ùc Ë-6¢¹ïǤc3u+b §!ZÏkë\!ÅRÑñmÆÖ´­°÷³¯Ùb)çñÆxŒsPUöKü9…–ÆmÎñ7òüC%Apݛ牤³±ˆwŽ7êØýpã–ÚvaËÀ—ñÇSʼ4¯°÷³/ÙJJÇЈQYÎõ~Æ[¡’užÒ‡‘ñt‘ÛýЗZ{y àÓ_Xˆn€u‘¹fìÝÔöt4øy‘Ê¿YýÀõôwÄò[Ì50 z;iu…Ã’HÌ—­±ü˜˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&¨/`¶öïÿöO$&(§YPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%æÛÖúÃb¾«­õg@Ä|—˜¤–²“”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚”˜ Ä%&(1A‰ JLPb‚ú̱/üm§žIEND®B`‚leptonica-1.70/prog/tetons.jpg0000444000175000017500000007273611265225474014517 0ustar dandanÿØÿàJFIF,,ÿÛC   %# , #&')*)-0-(0%()(ÿÛC   (((((((((((((((((((((((((((((((((((((((((((((((((((ÿÀå2ÿÄÿÄF!1A"Qa2q#‘¡BR±$ÁÑð3báñr%C‚’¢ÂDuƒ²ÒâÿÄÿÄ9!1AQa"q‘¡ð2B±ÁÑáñR¢#’3brÂÒÿÚ ?Ñ[cg„u°€[aÖ¶ÃÖÀ[l;N lÜí€Ô[ § §÷ÀiÀ[m°ÖÀ[¶;N mðÖÀ[lØâ·ÁcØu°–À[ lu°–À€# l%¾¸3N §lØ[`ÚpÖÀ3‚à­€G[Rýð [`­€¶:Øí8B0Úpí8u¶ílYåY-FcU*V‘@òÞÁT…&Ã~HÚ÷Û™ºÌx¶åúcéå=øAÔ>y++©¤ŽYômÑ‚ˆÞ]W¸Ô Åì.=8àËþRI¯ #ªkÚe D σ̦ØõqeŽX)džp䃄œXÍ6Æ„‰§l®;NN§bi¶„+€+lvœÀiÀiÁ`!ÓW§ß ´áÁpºp€í8í8[`ÚpX§lvœéÁ`vœiöÀiÁ`u°ÚpÖÀ[œ&œiÞØ¹ðm*VgÅ&¤i~$‹ŒeÔ¤†ß•ÛîG 8òºÞ±¥áãïË;z~}ù|E¢É!†¾®ºµ„•5RkÓvd@¶•¿µÉØ\“*S´£Ú•nÃäž  HE<1<‹)a$žß›ø…Ùæ~7¢’›4åxÜÊ„–OPÇcïb=ñìÿ‹—þ9GÖþ'ŸÖ/iHÏiǨr §ÖÀ#­€b€¶ lu°–À€Ó€Ó€+¾N +€ÓôÀÖĨŶ ­‚Àë`°NÚpX §ŒP—6’x\àl1• A"àm½pXPšpÚpX§ÚpX §€ºpX §€šp¡/°áXŠjÌ¢ª_ƒÉ"igi?‰ÜGëc~-~/¶øçê3B1jO±Ó‡­HÜøJ²Z2”ÒfX'LE=5C “«±ç`@x3wºG¢ƒ|s›x‡$Ê"©JšJ‰%•‘ú1º…F ¹³FÞ›ö8צÇÉê#$œjŒå-O‰sмª—4Ìa¥¨YÕ®º -Ôµ€Úuj\XssX¢›Š´øýþB‹“«49í KPÒ5}44õZŸ®ð*Ç Ä‹j±ó_‚5n7;ã ÞêÒ+&5’4̦½ñôÇŽ&œ!\iÁ`q\°S<í"ǤºFe*XVöÛÔïÇ~ØË&xciMÕ—ršn+‚8ÖÈN lu°K`°N‰l[ˆB=H]°¥%rt4œ¶[X”F*EÁc…âCÍ|PôKÉü´à±§ÄfT*¶fv¾”EÔÆÛ› g“,1-StT1Ë#¨ƒE]­HÿâWRî“«HSîH$ZþöÇ?Û¡ø“F綾f¤ƒcÈØã­IIZàæi§LB·vy‹ÉG”ÕWˆz‘Á _@,ìAcÀ¹¹=€'Ë$`éòÿb¡. oáä"«6­®Ÿ?¤ø½5,tä°Cæ“Ì,ãkê Û|xýnidQ‹T×?™èàÇ[F³5 ‚…ié*²éƒXÃtªcÚŒA…›HÜZÛzŒr✱½pt×Öæ³ŠšÓ#=SÀ‚¤==jyf‚`±ßÏþe·#æàãØÁÖ,³Ðÿ/ãßúœz} Ð6œvÙÌvœ&¸Á`vœvœ!M;à¯Äµë–dÓK¬,ò©Š}ÙÈíôo¶+* Ýx8¢Ša$3¿Qä×q}ôÆJ÷[–í¿Û'TÛ“òUýž¦5KÔÝfµ¹ENCP)® ÈÑLó• åÔ«"ëÔl ß¹[q½±ÏŽ.2Wõä9=6©ñ&iŸæ‘Ð͘͢YŠY˜B“mEKskÞ×Ü‹‹ãÓŽ8aƒ•';nr£U˜I-bSQÏOPÔúê3 SNÑÆä2•ˆµ•[ôiú߉GÙÕ5W²7½év4¹NuYW 2G;-<À®©ä&$é °7]7[pmmûã’Jž–iꇷ†ÝéÌßMÀž¤S(§QY8;‹q|z˜Ȥ”r.;ÿGN•¶ÜYIQ”óÉ ÈÉ,lU”ò=8dŒâ¥iœR‹‹¦DT^Û\þø¡ÕÍ$&j—Xã-Û¹< )IE[bäéy"å²ç)C›=D"RÑ$ª?/­­UWX¸7¾Ü Žwóz޲máúÛö;1ôñüaY§„3Oø±³_Æ*©ªT±,€Ô*ùn-%à± Ʊé|rK¨Y¡Yy:# Øà*? ×f9=5zÐ*É™é%m%$0›X‘u>„_×týsÅ-dzò1ËÓjZ¢©™ÆB `lA ú|{)ÞçÝ7ý0M8`4®  þ˜@vŸ[RM€ÀØUƒA"ÕŠfI%¦£ŠügH%^̪?®Á¾›ãÎê:ä£X·Çf.™ÝÌÑe^ys4¹…3>]*Š˜–Húw ZÂí¬¡ÜGnHógžS‚ƒã·æu¨(ÉÉM_ŸVêƒk/HÈÚ,1kíå 4ý,-éŽõ‚ñ1ÖÏK+bA#±Ç§gœSgYìYu\TpRÍ_^ëÕ4ð°R‘æbxï·ßŒDòF äèÒÜø†»0ž¥¥% Æ”¤³‹jþfØ‘µøÇ—ÔäŽY'^Ÿ¹Ý‡Ç+üOQ™åïAðsGDµŽ)¤ü½hä8!ˆ%–Û°÷ÂÀ¡5-Jër¦Úª|–YeuN^òRfŒ$'C¼cÊÄ“¥€µ·ãÜXi8pÍ,oV.o®§´XÞÄí¶=”c<"2梔ÅH5ê·¸ý1,ui½ÊðåZ«aÌ4ßQ îÆÀbÉäóŠÿWWf’Å@årߊQ ‚ ëSä!ÏônZÜ·¶Ã ÒN2¡ÑŠÓ7¿ÃNÔõ””1A:@¢ªcÑ$–Õ ²Øù, Ü‹[kß/S‡FòîwBz¶F²ªJ¹³Á›ÁQõ4‡à&‰c ÔW*C¹¨;,Àn.1ÕQ¢»Ù‹›Á“‰¤ “eNÚÚ0ºÞ`m鎟´7ÃdiF6»ÅÖR1Ëêkò¨Ë*‰a@K`àß},O<í[pŽ›³ŽQRz¨“ÃÙ‹&a6s›2š¸‹E)m(ª„µ¸bm`yïëŽ^ªòû1íõð7Ä”–þ͘QÒʉ"GxDLo$o¿ÍÜ÷¥Ìb[¥[‚eê#%8k#Ê>k–²_Ë}ñqN7åõþ„÷4Ÿ][AM*V^emN’ªÏ 0Z•7$yöØŽøçr[²4É›2Ž#4¥‚´ÒŵÈêØ9$±õí¹µöÁÔ¼r«³<¸–EVW×eõ?‰@M㑤qì{ñìáÏ ÊàÏ>x¥Ôm¬Á`4Ør@°炛<ñQêÞY¶´Jl~ç¶´ø-c}Ï6ϳzŒâ¡f« ù",cÚýÏsßݳU±°ð%*eñVŬ´±õ%™ üÂ×6aÚÊmÁqäõSnN†vbI$Ѿ¤ñ\¾ð¢ CK=uHV§ŽÖ] $Œk‘oRÞ—Ç.÷·²¬t±öù˜Ö¯¼> ®(|C%j׉)>™~“ ÿMÀÚn ±>›_›4§ -nV8(»° 9¥¯ÏÞjÊ%©Ê2¸¥ª™!KËT”yK¶¦µ€{cL˜\ ¢Ÿµ'^ﮌíßdz^CŸTIžRšŠƒ<òÒ4R°¦šv'Uöo“ÉÁÛŽ)Um·¡· 6zi³É*~0Z9'ˆ¢NÞµQ4õu¶°ÀpARÄâT©­¬*Çä”Õ!Ë*²i¦Î)”¤ÑK *%R>Y?¢ö`y³ Žã QJ[0Ocϳ\ž’|Ë0Ê_¥C›åóKHª±ÖFW¨½[X,€5or-ŽÕ7¥Ê/q“VÚÈs<Û/¦ŽŽ“7šŠn p‘Â$Y[5ì6 絜Ô[r«ß'ÃsgQÌ“ÍWC4’¹¥Š²2iºà€&"ÈŽÎÁSTȶ+ÇмÿRtYAy§ƒsئª¢’ŠªâÉSxå¶çIùdõò›®Æãôæ]‚¸2“6Î!Ì3ãT´ðÑ@áÛ§L̪ ÷mÁ½”XÞÛñјSÜÎRÞÑeQâi«êòéeÍfò¥y)e>y5¹[~O·Ûí…, )¨®y›|šïáfeš ªy¨Se´0¼1%mHi* bíÜé½€ß˰µÎ9:¬Kð«~9ùšxç$J“M5 ÔU¢I‘GV0EÇQ±$ ‚ …ƒa`†l{§Kë·pÉ¢|«<ˆTe1TÈ™l***²æ5«nûÅIP.w½÷¾= 7NOs¸Fà ˢÌe4Ù¥h‰D ^+Ó¼›’6±Úߥ¯ÏÔu3•iØèÇŠ1äÅþ‹Ã^¤©Ëfi?ÄH^9 ÑÓn$*ZÄÚP+y·7:tùyKZì²-@žª¬ÈgjújµøÊ¦]r€J:öAÀòH7¾ý°º—âm[!ãZMnIžÕ7ˆž¿4t§‘–ikH‹W!€6¶üó¾9'ÖÆ‰›Í¡,ux–kTú7Æ˜Ï ÌrjØ)ªrÜÆh£ÍÚn­^¶ Ó,{[“b>[Üñ{Ç‚Z–÷ÁƱ¶èމiÂE™èî4Å1G²H·¸#ßÔ\zñls¾£Vðç¹²Ç[2|¶¼Ófu3ÕVÇFÃI§)-˜¸`ÜmoMö=ð§ŠQV îìÓ§‹sŒ´Í5]c ¯y‰&­ü¨n7ÔÝ€¸ãl`±F[2œš+süžðjøƒÃR•ÓÖ©ª ›KIJIÓó¯Ì…ÅÀ GÛ›Èᓚä™*Šqà¯ñL¹—†êcSI™rÙbUÓ4Ä‚.I¹`ª4ó²…Û’kÓ•i\‹&ñß±[MAO’¬ÕtÕÒf!¥ŽDDGäñta©Zýûs|“”=–à’KÔÓÓ5zdP|.pbšC¦`•G–ÄKm¬ÀöÔmß¶9“Jnã±¥6¶e¿†óšÅªI³e€×€cE1ÄE2+m#3 …, 7¾£k´æŒ^Ðû¿¯×¨Fûòz &mø^WUŸg†ž¢'–8Å]r¨ZÄ•}ÑA;}É¿®0Ó©è‰wJÙxs\¢²‰åVŠX'!K¼WWò‚ ¿ jQ~6æãOÙE˜¥5^Õ9m|3e`Øåõ/®6'#²ÛP!Gµ†-7kf„Ò’¦RRÒÅU[ðŒÉÒ`’)5SÌVÚ‚»‹›_µþ ì;#×Í-Òg3ébøt™d©—¨uÁÁ*éâ nAûchu³É÷bKéãYåþ'ñuL¦:z BÅCÇêsîÃr;ÿ|m½·l*–ÈÄU&¤¥y€†hõ9Ù¬oqÜ÷÷Æû"9 üÔä"¶—ªõ=aHZ̧k‹ØÜ}Á–8ÁfÓ“D¸4p¸Ú/¼ŸÖdóÕ¤BÆS,ŒbY;¬¥ˆ £ÈM¹ºœ1•äjÍ1ͯdö/Êdް×<á!s Âi§± ÈW„^Q>m½†8iöÚÍoÌÉg¾!˳Šöƒ,¥.:–fŽ^š¸P@a»0 ´k·$‹ï£BÜVnò¬†Ž³)G…d§vn‘DÑG!RweošûrM¬ ïŽ}[—Egü*¡1%nOQS•V%ß@Q"¨< Ò/Á#¹¶5]Dª¥º'Bå TeÔæ’ž¦jVê ‘5 ²ØÚåEË÷µ¾]§fí¡ð ø’ÍKY <]*¹¥p¬އWÕÈÜmˆ½°“o‘3%WWþ>¤Ó¢”ÒÔÑ!]Z(<\ÞÞ°M]!ÅÒð•^iÓQ¤Qï*—‘Ë:¨CÀE݉ î6Æ=VhâÆï’ñAÊWØ÷J?áÌ’C4uµéL×´qÂLˆ¡·Ü5¹7Û¿¯lxêo“®‘Kœx#/«Ë#Ëà ­Ž)™´æ2UO”.ኘËocfµ­s1u2Ç-WdÊ J*–¢lšGœE-tñ“w [È=üÁlwéYÃtbÞ•¹èyW‰ ¬ðeEtqäÓfô’¥5 ­FV”÷%þm,Ûœ¡ 7Ç£“L“¯CMV¶{ÙZðý,µù•7FFê¥j$q‹“#5ËC°UæÜXl1ëçš„ÛWú9q§&½ç¨TÔ¦yÉ—TTJ”É1–™g©ˆmV7a¨ß‚„¨•¾× ãË„e m¿åç¹ÒÚ’1­•Åm+V$3Ò´‹KO FÔT±:˜(@Ò¼ÛŸn­m&¢÷å™Ò½ËüÚ:zü¦¦†–8æž 3j(ß«¡51?,†ëc{1¾Ö8Ü'ª^¿Ÿú*JÕ"¶’¦¿'£Ï²×N„µ9|”o ÁJ¡wß’¢'sq|lÔg(Íy“ºMÞ<ª¡­Ì¾‚ii«#pЈt*2ª#07 Ü“Á¶û€A¿GJœcOvŒò»f‡Ã±Ïâè)2¬èV¼´fJv¤hA§[geqyÊ‚àßr;ã“#Xexû³Tµ­Áh2\ßËUY u‘tNšÌØÄî‹æŒ1VŸMö#yaT¸ú°QaÔµPÓÁXµÔbxœ¼4ÝáÖ[nI¶Þ½¢›’q~¥v£U|6AKO[˜øŠ •&Oqa* †WF »¸‘pv8Í·‘ÒCàŸ7§Êó,‚©¨*ä–ha¦‚8©|¦9#MäÖX¶ÊNûJP’¿_˜Rk`: z˜Ýã­Ëæ*ßž0 ½¯©/æ E· ~–ÄNŸ š ¤’³#† ¥š²U•–'7‹m”žI_{ÞøÂô–üR¦¤ü=³–ÅQGÓj[ªÊäܱ·;ò/ôÇgK$¶LË*äãxôñÔæK›ª-55*ÆŠ=Ôd-[}8÷¸ÓGb,§|ò¬æu ÍžR5CçÊb¦Îë’†ò§ÀU3DtÚC\±ÒÀc±Á­éV¸k>rhégŽN¬2IT*¯,·Ô“{ù¸ú›ãEXÓ’ï±/Ú¤j¤Ïk'ªÕ0B¤`•T­\q3”/³obw°°'•AE$¾¬ÒÛhjÓeôÃLKaÝìatÔu €Föù±ªq“Ý“ºE¬þ Zª@ñ´ôÙ´dg†]&Tþ‰7»iù­`o½óX´½øšKõUTå!!&M#H.¬A 8±ó\z0·¶²“¢ã7ñdTTÿ‡ÓÔÕF.¢9ÀTu¿^¯¸7ãßbÁ«k&S£Ë¼WU_ÔRP!?ò¡³„µìCi «~Ö¾;ðâXÌ%=F8’zM—)’F²õZÄ’y¶Üß“öë›2eÕKE×0’ÔÄXskù­\ЛܤéRVTM–U;ºiŒ¯…œ–:l»[vì1”¡$‘JM£Ñ¼=A[šW ¶i".®"U`AÓ¬y›ä=ÀØŽA8ó2IGw¹Ò•–9ð›'Îse‚ª†y‘ƒ¼ çU*U’;µ‰(,· ±1Z’ÔítCâü–Zjü«=ʧy¾-ª%S1•ÓC±¶ë«Î„n5?šÃLY..3&QÞÐÊø™ZS(\Ø"~dU”©,k 7Ô4¶– À'Üobå»ù ‘œÍj)#ÌÒ§  Ÿ.YM²,‚›!;è+Ù­b{ l“q©»òd>v/² Ã/õRRÕWDÒJʲ´zK]lúºd…ßP¸ô¾×Æ3Œ´­E&¯cA™d¯]S4µ5R<ÓÉfgµ˜ÖÝ€Û}±š•-†ÐÌÇ)š–¶gÉêª0Xã3J¥µFêWPb9·û_q‰Ö’Zø)+{¡iY/†iê¤Ëä©–hôÍgpx&ÝÁöõÆxêOš­#ÅüWKWRæ¹k|%lc¥)v†Kì¡ccÛ¸ûcÓƒOg¹ÌÌŽiáðÔ)U§@“*Å6¨MÍÉ Ö{ » n§Ø‚†—)¨«’ñc_+o¤zžß¡Å¹¤*±ièay–LSÕ °r¯~{a½Ï%=*ØÔlÐÔåôí ÂÏ^+Àñ«¨¶Ê  ¤Ø¹ýxži·í=´EpjãñõÞ ü2½æxdÒzh!hÞhU]C¢$PcfŸ=…¯Žu¸íõú—÷•3¼Kât‡$Ë–,£-ËòjØÚ8ZÖZ É§[É[ ;Ÿ1¸&ÆÃm¿5ðQéÿú‰sáêȳ-Tr‰#ˆUÂth]-ê»¶Âäp-ŽYÅÆM2ÓMZ/èkš‰'‚–ª±É˜jR6$ËaímÅ®-‰C++ëè*T’²8@Æ«.®Jìnw m@’.-cÆøtûÊgþ ¥¬®ëem=|ôí R‘Ô¢+‚.X€{v7¸åqJ/8ßvŸ%Ïâ§Š9ü93LŠȹ€ß÷Å7íHJüŒ=eu?Ä©ŠÃìŠ+`/u;ll6þÖÇtS£&Õ•~5Š9é¨*"øˆåéI2 ±Ü+/Î7py¸ãôÒ¦Ó#"´˜F_¦\œË<ݧRýcp=–Ë}šÍm…ÛÚÃËiÒÞÿb×Ís ù9d¾xi¦iT’ Eu±D¸Öwa¸ÞæÇ1ÔµùýXJ[Q_ ЈRLʧ©9C‚œXR×]€:®yüœSrâ*•w;1Î’jŒŒü °:d³Ç%¾k›‚ ¿$›°cǪÔ÷ J¾è¹‰óm«â#¦Œ²G0 ‹"ê±`7±6·8SÁ.B3eŠx’¦zKT”ƒ¨ó¬+tK6¢‹Í–ü{ZÞ˜ÍâIqe)Yè ‚‹ÄysQÈ=‰:B&uŠ7Ú×@F×Ûq}öÚøå˪Iñɤi­‡.QšÑÕÔÁ™ÁP.¢¢_:” pß)³M¶Rœi4Í7…|)cáÙÒ¡¥Ž±¥ïv*ŸHqk²ûq“Ëb’Ø¥­ð씵… Ö…šHd†&» §@xÑnøÆË%¥dQoàå\Ã/®€ "ó>ÜÞê×ÛËnAúáI¸´¼Ã”œø‹$Ë2ôžZå©YThP¤ªµ®H¿ÛcÇ9±JI¬ç=†²ž8b¢Jus¬P$aêÞŠ:á‰ÅݘÊI˜ìÁ¨©"êTõÌ„òÇ›øéŒ[!³ ]9¨¨bÌýÆÀãd©Y,h•–½‰'ÖÜ}/û`®àmü1âd ©ŽH¨êR@c*¥ôîmcª×½¿8àËÓ¹/3xäKа¡«¯Îkâ9Á†I‹t!©I54ªÎÛ±ùNÌ,H¹\íŒ2Æ8×°\[—%V³Òœ¯3’ ÚH]jÇMºz ÈÊEÁ$‚¥±ÏJ{IQmµÆå‡Šs?dóÒM•åSÔ´qÏX²—_„‘YHœ’÷JÞà€l-zÇ ™6÷àMÅ1*꿆}6š9ó i+4Êë2H m¹=ù'r1J9ø}„ÜLo=Ò?†ž²(’À ÃJ»Ùl6:H±:»ûŽ”Û…Lχ±{'‰þ.)¦¯x2ébDX"¤#¦ìwc)bÌ.†#QïŒ<7£¹z“ä¸Ê³¬Ž¾:i%ñ@£•# /Ä+CÑc±³ æÖí¹Ûl)FKeMy—Íe¹P§†´UäÓ3*22Ê¿·)pAÓqßßZNër»æp5uêÞiiúi0’5 4± rX‹k‚wà¡’SzVÄ8¥»0uÙ즚˜Ô£9…oÜÅ·8ìŽ&»™j+GŠé²ípCE‚ª97¶4ð\…­ Œò ™YÙ^)¥/ܨà{sÛÃa©j©Û%†iÀnªHLÚôãm$ƒµ¸=¿\yóoÄi¥ìîCâY2Ï΢•ÄcKÉk2k_vµÁ°äï|i, OÚpVå-—Q'K6ÈälÄ¢˜æ¬–@¬¤ Fºo±[¶]‡|\íïmèJÛ”Aãd™¥JåyÊJ‰hU‘Uàé!°DÖ£J,’G7*X!$›@¦Óä´?ÄxªóŸ1ÊâEŸOÅ-†U rt>×ãØØ¸c.‘ײËY|Í~Yãl¦ ­tô¯M M"I9J8Ø; ¨Üî.‡Øç–¥ikLÜåÕy:fÏ ¨§L…dÑ1*@>U@<ºEõ[æBÞ†ÇÊä¸JÚvPR»,*EÇR_5½÷ç°>wœWÇPÚå§”ô1euãKÖ¹ýöôtèŠÓù˜Ý·fo7•³ˆ™ :ÓDÚÔî5Éò‹ùç鎘{k»2—´À+ëœVS”ž­¡¦)–v¿Ht§Ê—$›ZûÜßìЛÜž uº†8ßY!Ä›êÜû~ØÚ1f–š=eúFéæÝ/Ûþ®Ö8iIì´€zë1nš>äy¯kŸKcU+r.Ã"ª‘‚±†—Òû}±”¢¬´Éïb4QˆqTUr–É{”apö>ø‡Ù±ðߊ+rêOý›VñÌ#Vè,BMu(dü¢áÛ̇{n±„ñ&÷__^f‘—‘oÿâ?ˆZ8é*³J:†5:D¯Ò·&ÇËcm͉=†éãÊA­ðE/Œsy)¤Ë+*§Z.¨b²iM‘$a¨‚ ¿ï¾éaŠÞ½L­îÀY¹±¿­­I(Û[úVö)æ­„ïQU*Ó@Uc†£°†ÀéPƒk=n}IÛÃÓ²_Ù{°ø$š“/޲y @È®äÔ úîG6¶/µIÀRT¬Êµq›1Zº¤ÞáÉÃn=ýqÔÖÔŒ»‚JË=D²JI™Ž¦°µ›Øo Ã{p!±[¨²”$­Ç'½íͽð>¹;–o-ï¸$-l'¹©¦Ï¡¦ËtÈ Éi† ?—r,ÂÞ ¶Øã–),”‰²ŸTQStþŸ P—Ž+ĆÆÀ²€VÞkmnûîq:H·³r´g§Îf¨‰è¾oˆb'%‹>£~Ü“cØc¦8T^¿/àÍÍ¿d·®Žš:XÞ’B‹ÒIžöO6Ûbr ñÍ'-Í]VÅs¾¥vyz®Bܱþk‚y#Ð÷öÅÖ䊖v[ ‰Æ%ì¢Ia‘v7]Õå[í|4†Q^ùQ359h¦C MÒ, ²îwŸcˆœ5íe'E—ˆü]YžÖSÓÕBñG¬q#°òì]¬»o~×>¸xq¬Q¾E7©™ŒÖ¯¡!E`³"•[éÕqÉ·}qÙ –èÆVŠp$ïpƒS_|i°…#` Å…ÇëÎ&Ó¶&ÊsòúµššwW°RË`FàžFü~à $–è#*.¥Ï•ÊWSè,mª…¯o{_éŒ'åó4×êQRµtõ RÑըƌ“r߲Ж“or¨ê–viY^arH7í÷Àšj—Óiäy&»3’I'¾ÝðéVÂ÷“¬Á†—c¶ÁØœKC°Jð¬?1Ü‚GLiŒ™ F ,€ƒpÀƒ°–ÿ<[ôõ j‰zŽ„'ËÍ®w7ÆT¹*ÄW·›@ma¶C²u7š÷½ûâZì;$JJéù ×—éé‰q ²Õ3·zHéª!Ždµ‡[#±ÚÚ˜5ˆïëˆðéÚ/Wf»¿í‡B±b‘PêéÆÞVò¸$ÿ˜ä{àjÀE”î¬u ×í‰qî‚Æ’Ì bF铨 þÞ˜«îÀ‰„¦srÏ~ä’}mŠÚ…¸XÌ °Ç£R :5©Aäw±ô;z[£K´=W³Ìb„0hJ„^Y¬×úî=ñ®9º¦L—ú<°ÎÉ,Z¤.  ¯em½¾òµ³‡p®‰JhT`®Äƒ¡®Àmo¸õÆz­º*ƒ¤¥Ë!¤•>ªž¨00¬Àõ-a»_ˤïÇ ïˆY&åv¨zb‘I˜-F[;Ò3!?’@ÖÕkC뎘8äZŒåqt[ÒÊÙ­t19cL®!¥f¾‚m©É$yNöµÍñÏ8øo_ŸsDõlSSHLòÁ1åRÒlÃnm¾6œvMÊ&Í7á¦XÒH‹·•šÀö¿ùヌ5º RI*&¤ZM”ÆæÃkßl&’CNÇy¿}ÿñ‰Ez¹DtðM"®²ëæ%TÚÄÛ醴­ØoÁyOO:OM%<°¶‚ú–È{‘½È¿kÛIªjE¯@¼ð“N¯U"" BVêlIq¥yØíÎOÙ*{­Ê<âªï-)ëHÍ©š©[eÕëÏ;XwÇ^<·ÎÆ2‘^)´iê¶§^wüûãK&Šú±ioÂZ᯳cDC#%ÜWJ-·=°Àqa¥‡©@:›OÄ'P>€|Úã鉛¤5ÈQ‘çÖB{€·Ó~7Æ’Ü»²Q(Š JM¸°qcÏùb\½F ׈°nWaÛío\_"=›“͈ûq…@:íåЦݗ ¼Æ+;2ùlvùXmÿb0Uƒ\(_1$±°àÿlY%›E4  ukË<ܦ1RL±Š«C3²jò)I£•|ðžAÜqî4Õ­Sçõi~…ŽW˜E5¢Y§C*…‰b(ÁHо6à‹¹ÆY Ó*-4$µ½|ÌæB”0WyDu ¯èT±R¾–û[œg{TjþW™U™(³ 4f”’Ä–Ž˜…C½‚‹›[oßÇVž>d:¾B`CÌõEÁŒü;ƶó¿#¹ïsßkŒKj[W¼® EéS¬ëRH× }îIØ‹Ü}†:>ýQ—TÕ|LŠt*F£HŒl6ÅÆDådë?H±•Ѭ ¯¿¦!¹_R'lEÄÓXî<ƒø‹ÈzDËšÝP[K‚<¶6`}­òS¢b$ ×Íd2È*N­;“qlh$;–áì”2´LÍ2ô°½ôß¹÷˜'%| º"xeÄ’®“p¤Ÿ6¸ÿÎ I삟,&zIÍN råKÂĹÿ¨ÿÒll}F!I'CiÕ‚7^²<(Û†e°`= Û ¿-Ä)úæ(éå‘’ïvº¢ú“µ±:«y¯‚F¦1@ÌC]N¨À=H÷·¶#Uºc¯"IhÖ–dž5*ëtÁØöÛ{Xa)¹=ª[‚³´q£. ép ã{b©7í ¶ÀÊV 3ùIÒ4±[{ýq£öv;’%-K¤l"‡ùM¯{r}}L'(§C¦F’0¹‹^÷ãB²d˜€]µª©uíõĸöC±ï‘ƒ.’÷¸6äá)Öâچ¾zjsR5E9m:÷MþaïÛN NÖ̸ɮK¹2ÔÌ ™²úé ºQ|ºû‚E¬û‰ýn1’ÈàêH·ᘚ‰ ^šhdŠU%\7o ·¦;×™Ìù h i%^¡Ò;Ÿ Æ·Hš´¯QÕHT[ôöÍðИ1fO1¸ãÐ"¥ª2ëV «Ia)®åÓ ¥p§¤b‘4LIÒØc9§ÍUK5 Œ°Ú l»\ïo¥¹ç댔Z–üjе¦i"y¦´³¤Ü“éêï\éÑcè²ùja.’F‘¯íå>þ¼ž0K"‹¡¨¶¬–³-’“B½D #®°€@õßüì}±1È¥Øn4W-É,;r;ãBN6‘öm.ŽØwAÈø'’ð«8^Ô¯[ Å=Á>ÖF©Iß{Ü’>ç ¡’QÔEO"—„HåÁqkê[ò½ƒs±8m9*°N .[M˜C°1Ž•—iaPŽhÆÌI°íõÇ<§(:|š$žè²–‰2ºzJÊÜΪ£tÒF6³Ek1r.1š“›qKëÞ:­Û(3ZjÈjÅ%kÈÕ%Œ‹4w:ÔðÀíÎÖÚÇFI­K‚$Ÿ ÎæñºIe‘¦„›¤ŒOœzïÛXšfR¥VjˆÓU;âåÁ1äµ›LRôþ2¾¦bÁ¾¢Ö¾9Öêì׿K%@P€`-oí‚¢+c©äÐÏaå•€±6½íý±¬·• p@Ó0Œm!rIãnÃéí‹«b°w2; gÙMÅÎÿl^ÈÂÔµSM,ÌÅ@cu±7Óº$W6Ùje€SÀ%Fu °  ,IQÀ>½­lsïlÓbÒ)/•Š:Xá1F‹#FóêÐÇ“fü-úã+–§Ü®ÔŠ™š4*ÿ–‡ä\^ûvýq»¤B.ríu ÖÌ7+qUPG¡°ßûoŽyºìR·Ü¨Îåg­F[½ˆÖúƒ}vý1щ-.É“ÜèÝXÂÖ6¹àwÿgÕ nFñ¹s, 2ï©Ä{ŒR’âB®è|²ÆÐÊMË:„WQ°?ì`I¦’Ã*<&ÇÍœ-Æä ¶"I§c[ìEñ´Ô«"¥eÝG‘¦qÛõ¸‡87»+L«ï™dÁE|1ÈŒ4 ³Ííßâ.íK ‡Ä9KSK]E<òh"3Ú '‚NÛó¿;ýÄëí!éuÀÊ û/†»ROÓ¦»D©]HÃåå½mÍðç(5Z•‚M>óÒ–³1šg-¸O9[@yÃŽlpŠZ„á); •C1ÓT÷:/ð’ùµôóí‹}fòÁ?# Vgbhë¥{é +¨¶ßÔÃÔmÎøÎ_äp¥³)tÓÍrÍÒ\ªa %JI* ÛÜúßÿòxW™k£ÈòÈ3*ÂÎ!¥¥4õåšI¦–ÚÖ÷µ¶ÛÒ繿ËãÆ®HÛøü™D’Æž¶–ZAQL´Ò$ªõ­{£µ¹¸#qÁÛ¸'«¥ê–vÛ«ôâ½?tcŸÄ«°EUj%p‹Ôªêä¡0ÿOÓŸµF[QÁ"BÚ%1¨bU&ÛmŠœÓ{¡%°cJ%ˆ+2Ê [J­?QŒ©§ä>F$p”Ž-M¤’Ú·møöýpÛ{¾b¾¡‘%:Q£· ÆöÞÜý{cxÝ ÄkyÀX]¯k_Ûë„ް× òù¸ô±ßž˜¹à•Ù¢¨èÏhÏp{¯âyV‡{Ó ¦.•ð”Yج|·ìN!ÓŽå.C)äz\ÁYãªø£~¼A…±¾¤ÒvÚæâÿß ­Q®ÃºcóÞº 6WLC¡ê‰õ,¢ÄëÐÖÒ}­b;z¨µR`÷à’¯2žATÄKÅk] ¸½® ÞÖˆÁv“îVRÇ WLÊóît)`Û^Æ÷6ÆòoJ!%cü:k…*²ìÀ½•íq{_ëA÷YUWPe™Ø^ä_cÆü}-¢©ݲ5(Tdqs‚˜Z$•õ,)Ø^×àÉÆ•Ë&ÆHú‚†ÂÃcþý°%@ØL4f¦ŠZn! îE‰&ÿåõÂsÓ%2”mXüúyŠÆvŽV›‹‚ØY•Âü‚:4ri£Ê꣊8ÂÙbQ2’À“kÚÖÇ%9I6löT€OR†Hb†²)&‘5º‰^À’@ÜÿçÓVÖÄñ²dN‹›H,» »ýqI'.tޤŒµ:êp¬Ú-rv¾&nžÃìAø|À›€#eUf m z[âÄšŒšydH¬I]¿Ý±¤–¤© mÈt—:ŒUÁ·¯¥¹ÆFˆwB)£}ÄL[ù~R{v'·æaYnR3Fžžª–9"QyŒ‹äAÙµqëaÎ0êsG57·ëéEãÇ)ºF ü5c”$1®ˆÒí«HD¸7k}1ór¹;g®©-ŠÊÚÙ䥲5*êò¤q³2› ȹ±6>÷Û /AZZÄŽR;,dA €\ƒ¹$܃sÉ· ãM4žÁ2W§V*‡Šm*6…j‘mÐt‹ÞâÆàÚü‡§j'S»2§DòÃ:'ä}E÷K_Ê-ÜÜ÷>¢¼5bÖÈ%šYz“:$b5)—›@;ìEÍÍö¾®Ý‚ÒIç†8]_ùK#‚Ûo}=¯ôÛœRK¸ö ÉrÕ«mn43d•”+rZ×±·qr1ÏžcmþF¸±O,© ,?6¢PŠ f†cd^ ]Ï$s¿§‘Ï<”¥ÅþÌõ!£Ó³+âL½Þ¾ž¢‚sm")moçk+.÷~{ãlvt½D°¶ßÝVsçÃñ¯Ä¾¨èó¹sTøJ”JlÆ”‘Sv+qüãr ŸQÅý,qõÝxeV¹|zÿ~‡Îõe‰Ó\}}2Ë/]–G×{-Ûœm‘ÛÜÁlXT¼U12µ#ÔÄt°=Ïþ}1œn/’ÛO±U—u¼Úu”G±2X_ëm‰ÆÙ(ÍY,ËLZcT‘é  no÷·¥ñ1rÛHöîWCaQ{k‹tö<ßË‚PÆEJÇѵïaÿŒ4î;‡rdÑ"¢Ô8ü¢4ÝI-ìlNëuÜugEPÔªÍOxÙ…”Ÿì{`qmZ`žûšé(„Z’x'§¨u”4ϦX]F×ïßr¼úc r¿TiH©Z—Ž& R°‚Œ..ƒVö<Û¸±ïí|lâ›Ûb,Ž–¹37qR§Rª$q«L;î}‡¯úaχº–®KªXã§$£(±’F-Áþ£¿{ûc 6ֿЗ2ÅR’5F_)%[Ac±=¬OÊ=0­§³ Ÿc%Z‘Ç8òA¹?•!p zc²-´bÒD« Ô3qéˆr^C¡3\0r6 µ¾¸Ùä#Hé¨6Ð~kï§ß 9nìzB" ÿ ì"BHœö·¹âø—•ß²=;nG&š¡t²§ÎÛ©<ñ÷ß¶“R©‡ÉT·Ä;7œiF$y¶oýGqúúã=r³Eó¸=QFžV„]‹,Ú¶wÛ‹_¿lRT©‰úÊ dD'Ž]åk(eõß¶Ûm‰Ê¹¦¢Â­›3‘"Y«X ·Àl;ã½ß%=žÀ4”Â[K©\ØZÜÛ¸õãES­‰à‘j‰yFEåxÈc(HóE˜, còªWEƒ}¯µö>ÎØ,ÉŸÐÆ&Ò×ê;©v]ïvÜ“ëbH½q^}Åâ 9|cÄu~YI·ÏP‚ýîÖC~8ãÀõèÿ²†\®> bz†@B߀…þ¾˜~ âÃÅ~DSøÁæevËâ3È6¾×õÁà¯1x¯È¸ðÖq.{]Y-2SÙªfd’[¬h5?-a¨({[õ81¹Þü/{6À¥Ÿ"‡Õ9êšš¿,M QY«¬€ LJ<ªRžüþ‡±9¬ZaK` w-G˜H@«N.¼»®ß`ßÛµ[{ÎtÛvvahós4vò½ÖËapÒ_aúç +I1ê§h®ÎòåÌšŠhÓÖ!*Py¢k) ú¦üê>øx3˦n¸òúîi“z˜«çÏë°ß æõSåûôÖhÜÓUBuÜ5»wãÐÚÜcëðeYâõr·¿4Ï›ÍÃ{}4h ]BݤPëo-®¿s÷ÅÒ{#L¬YÜÈeº0ówý¯ëÚUhy^’$#iµ‚ØÛûžøp½«0ZpaU .6 ÇûÛËÚ±3Ž»+Ú왬9ûñöÄ/gaÖãl×s V‰<}0ív–4%$+¸Ô¯mÁìO·´»@Õ¡ÔñÌZ€<¬WRmo~ã N/x‚¾å´-A%0Ц‘¦ù‘Ý]OõlwçÜ“´ËÛ¸-e2ÑÐÊ•p:®<Ê=¯×öÆ‘–¿A5AÒE"™%„£”‚MÇúö±Æz›ä¡²¼s<ºVn–±ÔQ}†ãIì6õÍÍ;Mµ F:fÎêT³[ŸC‹ÄÝr)W$T²4Hº‡uw7þا%|0Iù“¼,WDNÉå± Þä`RWlš#¥PŽDÅË\¶¶0nx¿¾*NøàÕ’MQ:ÈáIkü¨Qþ˜$Ð;" –Påt§NÖ×Íù°jµL(*$’9£z¨£‰ͬìXÞÊÈ"ø†ÖÍ!®)i¤º‚ \ìT›ïélT¦™)2Z¨ê)ãÖÏÒ1ît6 Tú‘ß¶&.-ÒÜnÑ´’È…$™ˆ`6æÖ?l¢·@>¢"‚»Bn\\_ýöÂŒ¯v $–¥ºm/I€¹¶Ö'œ[J;¥aÈØÂ‘Ø©ˆ7•Nú­¶×Àü€ÊøÒµg­†@N€»†§?ÍqnßÜ㇩nÔ,èͳ6ÃΪ' «·S÷æØæÒib”:w¶° ÎæÞäߨuitU›‚v#×·þ0ö=+b’×I$‹übmð×`u;kŒ!Œg‡üıj<×H.Z3¡ ïsnØØ=À´‰O•ËY"u¹d@ô•$þò-íÿ@î1åõÒrjUõð=Ž:—™£™LÕùq ’ÑD ûOþ£õÇ$ic—בÑ-æ„óik!‘”Ù.—ÊK ,;ÜØ¦Ø–†¹9g¬¬R¶u”• Û³›~§ ~ùŒRÂJº† çe;XýøY#³ rj[G&]âê…D”E¡ °FJ‘õ²±ÿâ¸ö¿Ãõ ¨ÅöÙþ{¯ä°´Û]÷_–Ïù-H-«y…î[¦>ŠÏ“º•!À( ~¦Û_\*z†ãå’à³Dúù:FÛlwûáEvLdqè4u”)°'qï|S“îɽW[/ó÷?÷ÂRò„h[¥&—×~-±ã I6*9c•Oå)[-ƒ_r7rqÒÜGŠM!uùl;[âY4(¦&F)R ØþíÍ×#¢>ÍÔÛå¹çÛX¨Ð-ÏIÈ Ç÷¾Øµ?QzeWK*‘`HØ}ñ:¯{²8$tÄŠ{©ãí‡b¡} O°_÷Á~aD¨òeê{a0#ž˜Íf‘׃ϨåqàlÐhÚ!%ýCn?×x×È´×Ìúº¤kÞ×ý8ôÄëˆSÅ0SikÞÊÇ÷õ>ø5G°Saœ“æï¦ø­HTËàúØù܆¹ãßNÔzÖŽw’WoÜ`¡p9£‘· ßÌTm„Ò|‡#>)õY,Ö<Ü òÃÒ‚‡Š‰V$Ì3+ 2/}îoû`Ü%ô«+9b06 <Æ"Ñt˜Kp7k~û³†’adr|GLÉ"IwµØéûžø™ÎæH¸ÂRá º˜Æï1cF*O¥Èç—W¶æ«¦›ç` ß-Ì3Š'¡éM U¤Ðšœ¨7³n·®2—Y¶ÈÖ=5nÙL¿ÃéŠ/V¥—Q;º÷äé±?ïëŒþ×/#EÇü9§+=C?AB}ÀÒ}1/«“ò+Àˆm?ð¾POÖEqrp¨?LKê§_ÐÖØrÿ ²ˆõ3³4ŠºÊ©${‹îIÞø´ä+Á€ú_dye~Y5=’̵1Ê¢A$EU×UÔì×%P X—ãÓ—,™ãŒVÈ}Gƒ2QU zJ–”—.ˆÏ)$ÞËÈQ~xļóºL¥†5mù²½ÖŽ‚±ìŒuIPVämk{ž8°b_TãËùºk4t7…©cÇŒÍïN"ë7R8™„LRä†ç{-ÅÀæø&xãpqŽí»þv “)¥§f0FñôšÑȲ¹<ßQ;MǾ2ž¦þé´WâŸ)BuKUH¬%2€jzZXïÁV$mµ½pÔ´ó8©pÈé2i&KÒÔe®Ò.«EÏ^v–Hð8ãS“æ ÙþS6©"ëµ¹½¿aƒØ—g·¿ø8Úóúóü6¹¢Ó|< 6¥"OU Í­kž–>öB]‚3J ߪ"«¦eDFëFU éîOWVÀžß®3ŒqêNÝš75«o̬Ê(+rP‰ái`¨I”Ò#:"¹^'Òn‹pvÇ«®„6ɵùžnNŽSoFõõý­t©©êª 5Štˆj×áœt{~ÄÞãðÏŽjàþ½çú|~Òf1é5 q¶á˜h¿ëŽ„¯u¹‹Û“£¬P6¨ˆ(àë`k° iƒ;–2Úoå Ÿ§ï†–À0 …ŠtÅÆ¢®ÿç‡Q|†ã™_‡ho§UįûaR[  [ˤFU˜qqöî1q—˜ô›Y5 ¨î·ïýðõ/1¬R°Ä–5WtÕf³1P@µÍŠ›Û‹ŒN¸Ý7¸éÕˆ N’V-}€o®ÇÌ #ލÞÑ»5‡”+oØíí·ê1.Q Çj½p«Ã<WÐ,l‰{.ÄXp~øNpJÆ“{ˆêȿöþ¨Óqó$Ô¦HT U@Ú×ÖNý±Âó!î)É^À=}8t¨ÔHRy6#Û¾޼‡Lã‘%³ c¤ÛrxäŒ/y3ŽFXÙ¤ c}&Û÷ûáxëÈ(žŸÃ²Õñ©2ÛçXX.Ü›ñǾ%õ1E(J\!ÃËÝê]’û„„G½È{â[ÈÕtÓ|ìtJÈÖX% î,Ä ­ÎÛ¡ýqœºÉ>ªé¢¾ó øCh*}@†!ôÛÚüÛÞ÷÷ÆË9í&kq‡’ ¾ƒ¨'4èUŽŸ0%¤Û{–:¶õ±Çª-¶6z4¸4æŽÈmWkö¬¾A«CÅ0¨ÒñÀáÉXk “c`?O¹Â…Gð¤HÔÑÂP MdsÁ 7l@=ÀÀÁiàÒCü50A{° ö÷ô¿ÔŽoIpó¬º2þf¬g, ,Msar¤›ÞìÖô™RåÑJ2|#?UâÅü±K–SÆY\¯UÏÊ;…]¶¶ûúŒD²-èÒ8Ÿplëâsf9¥WS©L΢t~š±é1‰!ÀÞRw'TbæÇI,±‚ï_®ÿÇÄ'Ž>¥äTÆ+ªj:É[$QËN%§ J§¨Á´Y;qp9±[ñ®w nãoÞü¾‘ž- ¥_’ ¥É%Wʪ?•ÞH‹%(èTê;ïs¨¦çŒ`òGÚ†»wfúeIøà‚(òÜÂeÔñWæ¥eµ*uÀ‰eBTX‹Ù ±\ÞØêY€ÚŠTø8œo*M¾ šR˜"2É U+ÒDT†G>»7úm5¦Ý(þ¿Áè&—âúøŒiéԇđüƆT¸ô­ÛÅ8þõùâ'ø¾¾$rBµr±‚ªJ€WK òÿ9±»òÅ4Ò­)}{…6þ÷ÏûJIéŸLyu-“…0¬e?êm±œ““ßôþm/÷ýŒøçÒÊÔÃGq¡…»ßFã÷ÃÓ¥û?_!Zk¯™_˜wý àÖ©W¡±ñ§ÆQguðꊦN€Äɯª­ƒ³ [`}M…±ËÒûÙýlk™¬ZúÜóÊl¤G%\™tu4r,I$F’]¶Q©ÝyÜíúcµuya[ߟûäÇìØ¦žß^àÊLç?¥Ÿƒ®†à¢ÖИ© H‚ÆÄ‘{ßqëÿåúÙÇ“üt_Ýþ?¯‘dƒ$~¿à2—ÅÙUPÿ QH&"48ûÜ_ëf§’tùÜ@VŽö-`7°µÍ½G녯͙è›Äˆ!cˆïm¬ Òomíúý)KÍ‹MrL¹ÝC1°UK\L{ÚßÛõÂ×0ÓÜŽ³7x+(¤(džEX¶k$e€'Ô:ñu àÔŸ±…ªa'5- E«³Zöh&ý,Âñ&z˜ ea9¦]?â´êÑGRTjC5Äw zV6¶ûý/‡ªÑj)'¹UšÎ™¦o Uæ-Ï!xÒ ÈsÜÛ2ÏrÚlÏ7̦†Z”B“ÄzcQÜ•jô؃½Á½±–ljÜ’ãÐÓå)¤ÏJñ.[•ÓåÅ2úèå\¾ÝfZ¨% ?L°kD Ø/›½¹¸>eÊI\y㓺 &Þ®©<1–½TÉ%fdãV̩̿û½ÉÕì-¶0É‘Eéqù·I€$4ÍOž×£Í*òÚB‚B d-Ãh[!ÿ0`1¾”œir“1sm5êÐO‰#‡%ð&k“Öçtk‘ËR´mÑ4•2¢ÅД ÛÊ.;ááöòÆj=ùßý4£¦ûz6M’ÓRVR«ËZHHüSÔ+FÖ ùHÿ<<ú”­ 8ÑiM’ôª(RTk¬ªõÇ}Z¬ƒpM¶Æçûðk£ë`ZqIŠå–šz<¸Àá5„Žó1°ë. u3s¶âÄ÷Ѷ°;ó3Kÿ.Þ_\Y쟋ør¾!Ê*!ÌÆÁƒÆI@nGl;ã8©5%˳9’SfÙD¹‚gÒfTšÄEg UŠÍ{5¶'×sLVyFQoþËÃËíñò,"ÌhÈ@*£«P„ôä‰ #“cq«ûûã5Çíü;|þÿÈìªJH2ئ–hSKüj“=–PÅC)“W†ÖöeÇ$Û–Õîþ ±Î2­=ýåfmC˜ÔÕŠÌ®—\º ­ êBj5–ÒA7Žû µÅ5¥©W†y#M=ùõ-ë+bZZ¥›%§*ñ0 $ÒVàq±·þý7Ç CA¼TÏÑ5C”.þ ^Æ×ÿ¿&<’”·¯‡©×8Æ1tݯ‘GI•R¾‚£2…3<(òSɤZC p/mÀ}v>Œ&žM8ßwò<þ¢2ð­ú<‚Ö”ISâ%P_§ ¢…ÙA²¨¾ÃcÉ7$œi‘M]-‘æ890Zìí¨¼E._1ª ©è T™ƒ³ÞÛ€Eïsů‚”±ê­ì<*Û¸.y[!̲šIeÍ(àš Á+£4,À¡>R ¹½Æ5Å´e)PÖ'ª™_-DÕÊG/Åõ Vy#dm(LÊM¯°Ê»m±ÆÍ$Ÿ×aÅS°LŸ9®ø÷S%CªÍ˜1 ®ê|¡—ÊùX\ú}Æ | Ò™$Þ#ëf96`LazUF$"ÞgD[ ·òòom·à›/ (½ŠÒ–Å]Fk1‹/¥¸pµ50lÃPy®ž› Üý»é¡$߸K“f$@+ƒŽ˜öüÁý‡Ðc‚Z­ÒýLÞ=£¬šK 8µ—Xv·­»vÇ€ü>; ГK0Œ™ºúM†‚›plîx¹6Ƹ! “J·øãkZ~¤³CW/Bp×tªI˜)ÞçR^Ü€¡þ–Rq?iĤôµÃþ~eEÅËâ<´’`αp½NÚl9·£jýmlv5â…R¿UùAV‘çÿÅg™sl¾9¥IS·™÷sµí¿–ô8õ¿ÅÁã„“ó_¡œÕ:1º¥Ò¿ýßÿÎ=K~DŒ/>åRc·f¿ÿn°µQKda餑ÿñÄÛ!厨 ûtÿÓrò¥^þq¤†¤Ø~©‚äIUn›ŽöéþÜ6Úú@\x>­ãñ^PðÖCM*T)ŠIZ À:C$O–äXj¹µ®9ú—x¤Ÿìk‡ï£Øž½«`ñõ\q´‘×MXŒM#‰:˜“¡PlI<ظòªZñ¯%¹è{:fWäÙµ2¼±þ!4DKQwmÏq>#¿»óÈÜ\ü—ðY;åæªM§Hiie% —NÇkßU+P_F—Ħÿ$ƒ#¨¨¨¹ŠúF‰U½ž;[ï„ò5^Ä~cðâÿ¾_É#Ô× & )0: ¡s~>`>üïôÃYšßJù‰áƒÛSùžZÚÓ?†z©Ö¦<ÆÒKyi™µyîÃQkyÈÝŽÇÒØéê'‘‹Ý&»4½=|IÁÉ*{÷WüŽÎ²Ôž™ê JVY%]4LÀormŽ­…û\c ×v¯/äÚYÞ™-·÷“ÕÒÍWáZ<ºOÄŒ4°S$i,+0‹B°W6Œúé ö¹¾¸”á™ÍÛçë“ ò‹ÅJ¯Ò¿Ü­“%j‰#ys9i VÓüåUÉØ0úc®Y[æ¾' ©š­ðMOˆjç™Mô¬é$P©u,Û€Ò‹1y˜j½Ï Æ¸B«æÿq(¤Iã<’‡*†*üº¦šj¤Ì¡™b¦¤TX“UÚÌbÔ›‹ {Ü,rµ(z1Å(É{Ëìò†¶Ÿ2™[*ÍšŠwa4îÒFt±!Δ(¤ß`Ä›ZÂûâqÎR[Ò ¦‚χ(ìõ5y ¢¡Ø“3QN ?˜FÞÄûoÁũʹH¿(ðõ-KÅáV’ª*wRz˜¤`„«’q¸ ‹úa©ÊÕ‰¤Az6¦Òž¬¬†Ɇ5ËÄÅC!#]ÚÍ©¯Îþ¬Àa©[ÿbøÛŸáþj¤ï¤d4¢ÞÖÕ¶4Õÿܾb˜xÓäÌj&’¡ÀÐHB ZûOöÛ)ö¯$“—Æ×葃~`ŸñŽQ244Š®ñ«iT>·nÝí{Üí‹xÞ©I‰’æž"†AI&VN§*ì^Žvô\›Ž1œ?ÆhÕ«ŽÝ¾!nj3‰©ªâS9©¥V’®Y©ª¼aœy^Üym`AÛ›€qÐúXèÞ+²¯D»zîÆÛ\˜¯âëYS˜«M}éÈÖÕ"]#[¤*(Ccò®=΂¡…ÚQWûwoŸxÛ¾Y—0:FÎh [—7 ö=ñÛâBé5ñ‹²#0¦cIÒHñæ„]6„é`öd³_‚„}¹ß¥Ã¥$K3F¢äK[·Íû`OW_1…ÓAS,Ë‘~YB•¹'‹ _¿¨Æy3,M)wúóHjj6˜ƒë]¿FÛÜûÞ «˜xš„ÔË®”HzßœÀ*EÉF½ í½íÏçêå/ÞÆ˜ZSVmkb«L³?W–sJšå4‚DËÔiJ;¼`Íf¾m+yä pBXå8é|/ØßÅ»îÙß…Í<•se¹eº®©#ææ FÖ±™VâÜ/Ç åÇu7^ôâ%š):_™Q’Pš9cÌcHÈÔÙ5ÂÖऎ=mô¾#&kw«ÿÊH¼yq%»ùD¬Í©òÊZiÖ ¼î NŒ†ZêHþ@²‹Xob¶ö"øßi:~ÎÞOú2É<†ß‹OCOUy˜ÔVQ£Å4z¨¤‘™ ÿ"$—CÍšäIÓlNikiÇÉ¢ðÍS÷žŒòäJ,ËWLî¡—],ñ…×Î7öf¸ôãjPî—ÄÞYñ¯½/ख¶( ¥¬¨—,††¶¢¡a•¡­¨UWk³7ONåÉRŠ»¥Élu¥³Iñ^¿.þŸ3+M§çe­%H’‰'®ðºMýkâ:’ly°‘•OÜc'–O‡ÿR”cÏÿ²/U"šª((„5e•:Bše¶Ü’ün;ÜãKn¿õ‘ª®üPó– )[U bH·RÔ«JYMˆ®PîNã|8Ê-ì—þ¬%©wû}ü-êO>_”áçøi©¬£êFÔ.4ž ½Øw°Øã£2^Ò{îcŽ\S¦obËd¥Ži) «ÐYU¿9$„\ªÊ¬A$ð<¤ýNÜúa“ï|ïõþÍ^IB«åüH‰³<¨$Ô¹õ6a—TH-L’C Hù$O-ï²– úÛ.‹þýzº¦þ÷éýš*<§)¨é7[,”´hPÌUõ(ÙJ±òž8¶Ç,ðdÞF˨O‡ú‡Tey_ø‰2:}GN©£†;¶û,|G†ÞÛÌùmüJZLç#“8O–E«RüK„H˜Ý@¯®­V'ݨ/4cö¨·VeòOšøš§+F̺ÂÌé´6J²ù¬ZÀ 5¬Ö3Ç×;5·¿ëbVÔ¥5üËâ3zŠoÆù}føe‘‹FÌF‚4éºÜ°&÷¶æÛo cŒ—;}y.¥Û½¬I¼G” <³$”eÙ•%Zu=}ÖDBºC”—g /·¡Ö*:õU„òÆKFÆs$ϲö©ŽŸ/¥–©]zŠÒæ¢K-©dò¨Ûæ¶ÇKc]J.œNXÊ7E'Œ³ ¯‰©ó ü²†zú…’бãŽO0¬H'Ì ±Üã®” ÒEJI!ñŽ]â|¦|ª%4Ÿ ")Oœ+« ^ç^Þ_þ3n穼tßË-ö-„ôù¥U;/M劘4ô%™IKH¨VU\‘ªÄß|c*MBûòFSmÕæÔy-XK0…PS¹Öçr ±$˜éÕÆ×cW:·|rSœQQšx¦ž¶ž²®!Ó<¨ÈÒªßkn„O<‚M½Þ<¶ÒDë‹2uþ#àË¡OQÂ]ãøÚ§1Ǩ¡RL–S6êof'bpç)+hÎYài²8ex¾%ò1_4µ¤íëjœRÎÚº!x‘,Ÿ'ËÞäÒQˆåtôÀ$íÍí{ôÇöœ½åó1ÔÈáðª‡â“*¥XÕÔjÜ@±;ìAïÛǨ˧fÇm“E—ÉJ“Ѥ+F²«0Hôú0¸±·×Øb>Ñ8¯kyJM&ˆ~ cšIcdY¥ºÊ^1¨¡0=­sr/k‹á)ÎiF®¾__Ùâ:è$Ž“UÔ´² –+M¸×Ú׿#ß×|(4åSMþao”QÌȵÔT8G#¥$+î.'k[÷öÆ“QV”~ëê‡[bIJ eR¢9[PÛ•ãWïaͱ”½Ü}Xí¢y#]VƒQS6£dÛƒmÈ']°¼6·‰§µV6aEK¤¨ŠbïV’ Yõ:²ï©• ºì6;Ÿ¦4ŽiÅ¥çé_>þ£§Ý*Óïø~VÐÉS&­RêBK@UΑfµÇ y^››Ýx²K`߯3D‰>°³ˆÃARê±ÒÖ€cq~ Å­}Æ2SnÕ‘âK‹#¦Í³:5‚)k š`yXµ÷fkóÎÜɹ#KV¿x–´¶c ñk–@ðÅ&d’J,pTÜÛÌê,ã}ÇŽq+TÝ©××'. ’¢ ÿò††7ëHÚ@£3j½Én.=-‹sº“vû­¤œÓ¢ÂÅ®ötdÕ¨w¹½í{óö°¡’›mÐ-H&‚Jê6è ÒÍæŽÍ§M½,6$m¿ùçâÓm¾B2”wL™ëkKÔ¨ž9_KHÉ(BH_°í³}oŒüY&Ý­ÁJ\ äñf(„*ÕP*’ɤFGo[âŸU—þD¹I–æu‹FCñ ßâXÈHí·Ûï„úœ‘¬“á  éº¬§á)¢#VñBû÷·¶!ÉKzBm¾Q8¥XHƒ ”XÜêÔSuÑ}½}}1NONžÞá©ËKŠá…QOSC¡i«kÀ¶â:¦EmïÀ°>Û\Î3Ê ¢ RÎcYtU;ÉX4°žbŒÞSå;­¬=âØrÍ)óú ÉÝ€æ~"Šª¥¥­†‚ª®(š5è_Fl-Çn8<\¹"“{òyÆ`¿]b¤‰¤“¨`‰C7%·›‹Ÿ\Cê²ß/b\÷¨Ëéepò),@ ÄŠ»ZãäQ~O#®ªRî˜BåЩ´ à\{›mm½6ç×¾%ɽ†£@4YžQ SSÔeº9"O‡ÿšJ–׿ a¸Üqluã‹Ñ©ÊßéèÉ~h'2 ¥¥¢©š™¤ÝÔ$mÅ¸Þæÿ®9Ôæò-öÀ™n_<ÅMã`‡HÓ¤ØÆÄÛmÆüÜàÍÔdáȲÀÒÇ-EZÊ/åöçë¼6I;±Zt3Xêbœ{¾q Ë„ƒò#¡Ìë)'ˆ¢KoˆèÁî  ·õ(àûrA8ôV”»Ð$>«Ä¬õQÉ: é@Crûƒ«·b¶Ønõ~jÚÜu¹kMŸÕµ* RN3±ŠÝKó¹ÚňØ^Ö>£§}¸*¨aË2Êó[Y– #¯*j¤¶¦Xˆ:šÀü¥ÁÆÇlL§7l7+D®ëÇp«k^±Éíòì=¡¯I9f(ŠáÈQæ'›ÜílV‰´dòYßB>ebæ×6$à–,Š 4·\©©¥”<hV—º¦µ½îɱ<ú⥋ñ|ÁEÕÙ¢Á³µ*Cq¨£ùWµ€±úý1®Dâ¹±î”ÍuëÀÒ`#»7±µ¾Ø;r¾a¦>dùuµ‘™a'§{ƒÐ7½ô›mÎÆÿCÆ/ÂÛýEy†6QVbgb¾P]µ£l8ô߬y¶„×qé^e{RÓ5=êêiU„z$R¦ö¹²ì,M†ûL%ŽW°´Ç»ªËÖ®nÊŠË*ú¸± -ÁPpiW¸ê'WQÉFÐ+‰f‘Ô1«]~^wÛv·Ô}.OŠó²ë²z†™kË ¦ÕtÛuS±úÿ|(Ç$7Ý̉S\Œ"5¹{\©7÷élO‰í$ÞãT‘L”è¶TBÊ¥P“¡v7Qklöç|';»aßu@5¶«†U=Åì7ØÜúáoø¸)FÞäs|AG1ÃÕ¯’;€Mû^Þ¶ÅE+ÜY §òTH0ªÅm¦àÞÖ÷ )OHSó,áËjÄÊ«)†E, î4‹ê¿§ 8í…Ú¶+”TÕC"S;F&"ÄYEÅ»Úû׌·B§T K ”4夨–A¤’Å.Ö¿ÿlk)^ñBŒ_`¿ˆXcghÿ/k0÷±ý.q¥uEÜ’TMÖhãƒXWéŸ °$Zã׎Ç'ÈÔߟ:24f×åH±úO¦N¾·'Z%ø©28ôÝ=‚بïê/¸ûd:9kfŒ­KÝ®cc¶«ZÚ¶ï¶ AÞÌvß'?Æ5R£jhÙˆÖÇ)ôýM½1*6·ì÷£ÓG XH2×à…ãõïèF´¶ˆ‡ÍC#ÒêT ÄiØ\í¿ŽÛó†ã+°ka–=-ú€öþÖýpÖ;ä4¦@ÒÍWP:›F‘e[Û’O¶+ÃÚì–ëtUšŒÆQ¥ÞcO-Ô–¿ ‹é¸mî1¼£n¹2Ü~]_QP¬ÓÆg‰,]•@e··µ¶î ñžLJ iÚ,#”ÈBÓy­d&Àµ¸µ¶·¾¥³Fªc¤YÙEQ7 þ¸—^dêfÔµ?Â=@´6WyVìÀém¶7 Û~;þ¾'²%²»;Éëj«Ža—ȦI,Tž˜;Xj¸>¢öÞÆ×ÚÅE׳!µM£-&Y™f±V$‘ÉOÑ‘OBQie*â6¶‘{½¼¶`}ìF3–6ž¥É ÖäqdÙt±&¹&+ÿæ.¤€«iR,o½Ž­½ÈÆ×*«+ÅU™lÛ7OÒÓÖT«kU¬X“fvãé¾ØÇ§„³OOÉ2z|õ”9·øx¡x:pþDŒ–taó/¥ïkŽÛÛ¶ ›ÅS“f²ÔÒÏÒ¥¥šæ)ùI`äk${‘¶ãƒ~q¯‚±E'ØŸRU–‚†yéV¤Ò yºŠ¡IÑk y¬Ò÷µ­‡5n>ñê¥HÑQ3S0‚¡OOTÂE'S‚úXŸæ»ÿÔ8§Ø §5ôÑTÅ jMQÔXÓR®­%€ on6ý­}Íñ-&ÀÅø«ÄÙ5eZÙŒO$qÆ‘E:ƒ»,tÚäžv,7øÒ8g11ùfwJÕB‡áºeeék$ª;]G{ŽÄ>¶RÇ¡X‰¿â=tkZ°K"ˆW[„:bn× ÷Q{ïo›‚0(viˆÄ‘"æ4ÿ XuÄòʤÙCFæ×­ï¿>˜™D|I’å2ÇÔî40#Y+€Tn·sûœsK oPÊÚÜ’ªŒÔAK“À¦1¡»ÇuÔUÏ,vÅÆ)¥¦’ª*ü-â\¸SH+R654ŒÉ´cVûȸ]ípIŽ5ÉŽJ)2u6šfùnU•Ã,i™ˆ‘)´I!*T ȶÿËbA½È'“i†)[ò̲øÿE%TRÑÂJ¹–-Qˆ\( {l ߨs¾7}$Z¤-FΓÄCAWX fžjgª@­ÁÜhãc½¾»{ã•êr¥îá &wK-^[;|A™ ´5Ôlm¨éksÛ±¾0”jÖà¤V­*× Ûllúwwc²:úI)f艵"ÍÁ±æûmkã-K`4ý2¡e‘ˆRî¡|¤Úûïm¾ø•°­èêM2u\+ü×VµŽûñ·>äï9¦cd -:ÊJÚö `-¤ž,W÷úá$žË°I Èb’DyU ];µÇÐs¿®ŠäzއH¹U%Ë,$’£nÄl¶/a]—¹&_OQ=ªgYnªÚ#f@ÖÕÇ•#·ùïWíHVseg6¥YrùZ:ÈÃÊ‘ÈTu”›‚âÀ ­¶ãœ“a}ÊS­¿Âëßæcïòã–ÐC%-o^¡èaW){-ö²-ÿQköÛ¶=éÐÑkXÐæ‹—…ž&ŽO#2–#Y w¸ú@Â’ßWód_ˆÉ=EcʈætJ }Z»Úà{~ø™B†Õ‚w–²X|ª Ž@HQv­ö;sîqI{# «=#©Dämôê*6ú·ß *³Iî“÷€V¨ðé™Dáî ‘¥ÂÛ~Ä7í†þóC”v@þ q[—|C¢†-#¸$°c¬±äí{µ€Ó°Æy}—±•ç9Y[@õÒFJ¤|¨¾ÇG6ØÚûós|f”»:&ŒOª ñ$ÔèÍQMJ£G LZ‡š×°bM¸àcXbIió\þbÔËL•`ü6š®£â¥ª­„–“âÒ¤>ÀZßû½ýo‡“˰ٟðömY™W=UTº¤ø´S¤i½‚Ç¡$‹z÷Ç[ŠŒ)yOVüNH뀑HØh(vÛF¡ûŒyÚÜkÞW©‹Í«šŸ:Y) dŠ¡ƒ×6_ôô·Z²82~"Ë#©É«?2DŽZ‡ªd«I úÛžxôÇnòN߸¿ ¯ìœÂ*L½Qâe/ ,ÃC¹[ÞÆÿÚÚo–7/2m³Gá<Ò¶L·'Íu@±M+ˆ\yGóß}…··~ožh*hfÄy57ˆ2üºžs$PO]Ò:[S1;s¶Íò,EÁÆ0Ë¡·õØFJ†¹’Ÿ;Žé|.v”o¥¥ ꀑÀØ m’-;¾Ö4o²ÌÂXk•H w¦oKêïëÏLrIiÈ|XP•í@ ˆÙ©THuy œŸAüž÷¾= K]j%·FžƒÃÑÄ™=md«W ¨Açˆ Ì æÜÛ}DR/{oŒòé¸ÅQ\EájyeÏŇcmøÇ RJy;ÿVT¸64t…%}:M#%-4ˆTè°]7Üj.ny°ZØæ”Ü–§ê:دñl"’\ü3´ˆÌ`{¬ê¤8»[Ô®ÜYmÞãL.¤¡äÿQé ð·ˆ&«)dI4RSˆOóì»Þ÷QÏ^ñià‚ÂÙ^}—ÃÔÕL¯¸Õb¨Û^ÛÜîE¹78Ò0Uîä†4©ðý4‚8£‘%©„Aü·Üúý;ÓåZW²;t‘B­J*êhg¥êBÑ%\£XØ~mç8ç‚öWÉ-”9=k”˜‰c BÈËåê½À=+]íslwÎNïë¤_W2-#I,}IAT { µÇÀ‘éŽl°Mj+M -5@ø}LARÁ¬y6#m·ßß¾0ŒStSJ¬êY#” Q ­Ï;-þÛþØ©E! ˜Ê”Š%1ëêêP·N…vïþï…‰kI°*+s~„‘§B¯UÒµíbùû ¸ç×Ç´Õñ¿Ì—¹¢ ’œPÔÕÏJ²Ì‘£¡Õ¤-Ü’-ö·Ðœ,P´ìM–m–RÓæTïºÇ8HV5}"0êãÜöØ[Ž:üG¢üƒ‘ä‘ f§žhžÜ1 ³± âü|–‹ønwÊ(µ“Âò³³ó4Ü“´€Ð Zš®£ÿÙleptonica-1.70/prog/chars-8.tif0000444000175000017500000000444412226572724014442 0ustar dandanII*f& v¿ÿÿÿÿÿÿÿÿÿÿþ@ðXRƒhä ŽAÇ! OUrn[¹ ¨!!›a4™3 †@o ߈r <‚Ž!› ˆ ½Dâ ;_fËÁ¨E÷KwA˜TÂiPJ‘ˆ4]¿\#kÕ>“d6:ZM‚¦Íl ZM¤ß~–é6«¤“iÒTÚ1åÍÂmeÁ¥K„I:ß__ô¾¶Ì>¼-'§‘×Ký'úUÿ]jœ1¥Øû®¾–—÷ÿïõÒKjA»é×^—ÿÿøúÚIx#h¸eW|q¥üR´¿Ègr Uí¥LPý}­yù.ÿé0fpaïKJÛW¯ëIqyù&V¿ü[Y3Ö7×ôC`á%ææ©¤Åµ[*_aõë„$yì6×qÔ0èž#€Ûã¥úÈí¯WAÒEöÄŽ¿ä ú¢óJßÿô…ºÇ«Tƒm~CZ©t·MþAµ9 J/ôë½t­Š^ Ã..©6­þA•úý- ð1ÝRúýÒüVý/þ·¯Èg×öëúÒÒÈ××¥_¯¸ÿWôˆ( ÃÕézYH!ÿÒ_Øv¹ ¨ ØõÖ“¥ºº^•vŸýSi6Ê_Z§ÚZ:ºîºIº Õé/L0¿Ö“iZà ]„˜a%l$—M/I(1#´ÿµ±D6!bbbÄ Ab"$e‘Gº º­½Rûi%X¶•ô;#ƒ¬GÿÿÿÿÿÿÿÿÿÿÿÿÿÿòPGÈdÇÊ™§!•©  È:rtäC$r‚‚‚\AA¿cÈ'ó Þ„êC*„6j@Å`A9%æA<Šä_ üBÀ&A†a0°ðÎ6áAœ È7²VC=’°G C<CDÙ6D  Á`Ám†Ãaaƒ6a„a¹r6P`— à„ÖZM«0˶ a¦ÐmhtAÑpNÿ¥é> a´¸Pè6‚ ;ï·M^  ƒÔ*é´ƒ~éxoü%ÿéwÞ‚o´›õÿÿÖ›ÛKKWJÓô½ÿÒÿô½`Š_u}ÒýÒ¿Ò}Wž]}/¼q¯ÿK—NG^ô›ô›ÿúûôöÒ´ž²†œW"Vx´¯ñÛõýúûÿˆãþòꓤé XVXAGWßI"‘Gÿô½¿ßJý/_öÒêûî’ȸA0õIúú­ÿÒÿÒý/oý/êÿû_bRÓ ÃJ’­nÁ/ÿÿý/oöýúßJf t½Ö›Kð‚ ]~ñà /é~—ßøKóû( ¯ß¥t÷Iméà -WJæ ÿ|Ø_Ä?Ûÿ?~0ÿ÷ÿcKA0ëéwÁ¿æ˜ ÿ0ŸÚ^ÿãølýÒ÷ïK@ƒiuÒWßûïÿíûþßýþA«¿¾Ò´‘tÚ^›«×{Òÿ²ûi}÷ÿ¶÷Kßþ¸a/ô¤pŸÿpkÿoßöý/Kmÿ½Òô›Òà ™ÛDuIoßýßÿoí/}ý¿oýëïI½,0È7NCl‘ÇßïK!GïÿÛÈQ÷ý¾ëëÈgõÖ6)}HQð`Ä œX¤Ò½[Òý¿ÿo¾+ïm-µÛºïŽºoKÈ*9 `‚!šíŠ ~›Ò׿ÿo÷ö7¯­½}&ŸIúôÔ0› %½&Èqð—íÿûz_îà m¥·¥°azioI~ƒh,0`—ØH0`©„¬-† o¾ÛL-µ{°ÂVà ]Á„^“zKµ‡„Ðb Á„„„ C è B  ‚#  <2 L1ƒt!ІQ 'ð”2ЇˆˆˆˆˆˆŽ"""!ÄA„"""""#®-õH=$‚.ÊÌ 4@Ô2ñ¡Ðãÿÿÿÿÿÿÿÿÿÿÿÿÿÿä<†?[ x9[ d ì‚¥«ÝjÿU„{Ø{~¯Mî?øA7ÿßþß­q—ÚíúÇ][{öÓ¯ÿeïØ%&ǯ½¿þ¥øc¯Š¡Ißûþ½Ûwĸ_ºUO¿é7"âµAsd$jÿØIµ¯aïïí¥È(øn W_ºõðm‚*xaPï©ï]ÒJ°ý®—Çȵï‘ÎþÚºøê¿ 6(xÇÿ"×Ï~‚H7í{ÿ]xmþžª¯­+£²-§]}¿¤°’ »þþà ÿo Èíwý»½òƒÖ×ùØ0_ ßäGñZzH/Öû:d0GªèìQñþ™¯²8sI?þîy‡~[­l7÷¥ýwf¡×Âzÿ¡ÿ¹¬õ_wþvk„øµÔè}=µI*Ih$ßVGÖåñVÚ{¸"=ßÒz­þÃû×`÷_¿ëûa…è^ŸBÝÿ.ƒ¿;ì*Wÿïðí¥¾ïµËŸwUÿô’D8é/KßZy‡ç,bªÊ{ÿþûÓï_6úïú÷¥,tú_{ô“qZîK¾ëôÿâ»þ¾þëîF[î½ïè!ý• ª¿Ûý>’êÓÿ÷¶¯]¿×î|þ³w¿·‘¯×ºÐA*_­¤¿÷¤÷Ó¯{¾­ýñ÷ßÝi~¯µo^ô’Iî½…÷úÿmm/×OÕ×ý.¿X]éÖ¿¶½i%µM ¿ÿߤÝwûíÛïÿßjê¿Â¥íô—÷Þ•¤¬)LÅÿþ›Û®Ò½¿÷_á×UéÒ®¶Ú„觤tYÝnìì×SmL ‚ ¿ëjÚM¥põzíCÿÝ-êÕRO"%Þ“†hŶÌÃ9°Pê†aÚ˜z±M}ÿ ˜aY —òÇa$é_ˆaÏ‘ãß¾Ô‘n²àÐÓÃBÌ[ ˆaÁ¡nÄ)ÝÜqhG«L-¯§­¤Å1IÐu< fº»ÚÏgKVÂQ Žã¦428`è6‘-ÙÔ_˜ƒ^µ¶Ö@Á2*#Ðeã`à™p!… 'ö);]§p„ZËæÚ!ŠÃ.$[[Q "ÛiЦMî¡„T²-• ‘8îšd2Ó²2ˆŒ›s@d0Û )ý4Ô‡„È=Ùpb•Å¡aö A,'åÃL¿5–*šh¤B""" Ì(„b5.8Ý„ ˆpÓ/Áˆ³!×íB=…°A• L†œÐ‰éNæÄDDDDRìˆ9\ƒ9W#ÙRˆˆY'7YNhÉQ2!ÒЈˆˆ¨“c1l‹D"""v HDB"""" TDR”- š“pâ<ÓCBÅ®&Wí>å°1l´öƒíú´#&ÁjŒ…e.éÕ¿MB ïcÿâ@]ë[Êêfb;N3ÔG„SEâp„Uš2âgf¦G‹‘žJ‘¼ü`#…*óÄxˆâ˜‚¢;É8À„r#ƒ›G3Ä\ìŽ Hàx`Kh|ä`ÈR< ‡`HŠÄp< Ã9 Ã\Àd3̸d„.!à¥ÃTØRì!–Й˜É+<‹†‘ÆGc ÎvSÆñ‘ÀðÍ9”.†œDDDDDFY l¹R!Ç0çÂ(Ñ!Éá Þ"@ˆˆˆˆˆˆ‰hf–s0Ê9’ 8-ë–™|Ž sy+GÈŽd|Àe"àxkp&¹ s`x76¤c4Èa‚­dK™|Ã/È«#‘eJˆÂr.…:†@*4I3±ÁœŽçÙx؆i€È ³c.‚òùÔ‹Š`7™ælØÌf#q.ù 4‰°m0dvG2&r¬ØA»“Pasm!¬½H2q qÎs®¶p ÈlÈU„v R¶‡‘5HÀÍ @hæã.Äxà ¹I!Ë‚Xo)Èqö´GÆÙL©)n sh& x!hùÏŠ¬Ch¹‘ÁT”Š`ˆàhŽ ç‘ €¤p͘RÈŽDrÈŸ"ˆˆˆâ""""""@Ì3|âæÂË$AȲ ­„Â…ÌÜqÈ*ñÊHÜ㓃íA,:cä S”9g x4ŽrÓìlò$ x> ²  †M­š †EÌàdƒr8 HŽ2„"TÌÁˆ‰\FaˆˆÄD”!›:æÑ˜6‘Å=’ ×eñPˆˆˆ¼còÓ«,Å%°\"n$’Šmq‰jÔ¤×+•éïOå”·­Oÿªãÿ“Uÿÿÿÿúõÿÿíú,‚s–â¦v¶ÿçS!çÈ’ ‚Πðúac5™Â%ÙU‚ ¼Í±Pe™2ÊiáÏX¬‚¡U A˜EÀ„ 0§AÊÓ2,Ê ÈÒ7Ô ŸÁÕDxMB!ñ!YÔB¬Bôf ‡d D3ÎB â:ƒÅ$sà̇¹ “†>•h4G0ÖH/Q CÐ4Ñtäb5 ¸“E D2‰ŸíCtr°Ò:`Ã#È4X#HLDGLãé¶A{ ždH:®uiÂS„ðƒÙ óF"€²-'pÖd3—"Ìl‰áˆ.SÇ@B@@axTï»vê¡Ãi<íP9ÐFXà‚A¦çÌð¡A¶øA­ H šôÙ¡÷¤R¦Ð¤ƒ¥M†¼ ƒUµ~û®—õw#¥ï¶ ýöÛ õn¾íô–éfª_ÃýÕû}:W[®ß¼Î×ö×_,ªLó. Ÿoýý?õºý: :_·íßIS©Ø `‘.$0Íûx­+^‰=¾ý8{õ¯ïû·ÿ„Cgµ²ÏÏ×ô÷ïzmuòÇV±÷Ã÷»I$üv[‚”eq¸›àpR"R'\ãäêûë¶ vxý=,˜ýwâ¸c„Aá…-ÀÈØ"!š9pSÁC‚âä3?â[ëOþÝò —¡uÅÞ5µ¶¹;z_iPˆš ®Ù;DÐ4 ep1è40ƒôE|ÿ“J­è‚¨5¥«X«~­ÒÈlÙ-WP&8:h7< þíc[ÓrJòW`ñëÇíþÝd mN‚>EB…†ˆ#Â~Ç$ÿßÿÇ× @·mzï`ôƒ¦ «ó;”2s¤fÑÿ¿ýý¿Ap~o¨mêô›Lx­îXìC„D Ô•ÐAßVý¾ûÿ÷yðž»úì}&‚tøÞÂ[¤ðŽ=Ã÷ŽE|pÚ†ý}Ö ¿»ì¸Fé>ôWäAú¥³ˆ"?Ç]ü‡uýÃcÿo…ï‡ãj<=+™DQ"ß¡j&."%LxVû’qñò܃úºñûàþ¤Þ®eXÁzDGµ$>Lzr9I­E|ˆý}•‡õߣ1zª~BQˇàßà¥@/º¿q«ÜAøýúõ½‘ÿ`‹¯aÕ’kØíÛU jÕ̦ „ªIôŒðß!c&=ÖÒ Î;I —è±ìAÓ_PÅûð¾ûÇi°Ï^’ÓOÿñEý"t’÷!Á½ÚßÛÝ~¯Ñœd¤.·ÓÚ¡»Åkt·éG¡¬;’;êËBϵP½Áï}Ú‘G]=%&>–÷¯Eé ö!CõÆRÉ¡þ·ªûÉ¢‘bá…q{]­7÷È£ÒÞ¶î-T‡:hMÔ‡“Ün¸3v;Õ†“ÃÈG°¤Ç‘Ó†.õ—3a'~ÈæN‚"Âÿá± ¨¾¸=—~Öÿü:"ðÇa­âBT둇a‚jIëB<§ô„Hª`ˆý¢nx­ÅÛ"[ ßðñ}ïÿJîƒübá;BgMZâþõ‹ÐnKŽ?v&vò¢?sAû×Ö·~ø»)ô®°u á1ŒŠý ÂŽF:ÿê"?t\a¦Ëv“bâªîO?GÝrûê5¿Èl¾ Žcq¸Ž¯zÞÈ?õ¸¶ÎÄlC/¦­ë×_º® ÚòrÇë"C–åÅUW$)];w¸p“%þãßÿt©úääOȱ¬È ãøþùq‘ Ü‚ã)21ïÖõuïëéëßúëÖ2okï2/’â}÷·îÁ„ÖE2ãņCìcÿªºÿ÷ßß¿‡ºÇ!GæN ƒ¨jf´WB‘‘_¢ ÿŽÕ¤6—Ø­Ã}üü¸½¿ÛJ¿®ÃB¾F㣰±UiœeÆCŽˆEArãI>¦qþÞ]!Êé±Mšž3è%Ásõ`Ç„ a6Xéa§áLM™tPdàÜ qÛÈŽÖÕwØ^”›²”Án?!„ÿïÿºïuêÒ䂆€‚4"ƒNôŠL^6‰NÝ4¡‡zaBŽ>7û¸9Ù¨g;*ê¾MWßMïºû뽯ÈÒA¸Ó[I>5Á<'«ÕUˆsXaãH0Ñ7Ò ä­wFž‘¿lzLƒaïÿïíûë×ì ¶EZõ¡Ð\!¢) :rOIÒÙÝt¢<2ÝJnÂvùÀÊ[×üîaNÁEäÇeÃgî–ý}6½¶ªý„¸Â!àîÂ!G3ƒd â“Ã=Ñ$tŠ8ÐMƒªzÝqÈÇî²:; ˆxZ„"GŒ{©¢|ïâÃ@ê„¥÷ûú¹È¬…7i…®]Ù ±ÉÐ!  „ðVlB1"V|"½ ú%μ6Fî4”õI¤‘v´ô›wÑ!Çqa¾J8cŠBBpc¯ú­~öòA­«™†r87þ–‹H6l_h2C('½~ ŠBäÞŸ 5z^¾;#…¡‡#ã·Ò· ‚—^êÿuB6>?h0‹]&ÓXÒ ‘ù1õhŠ=$ÈyÄzÉ zR$dAôÇ‘oý’,܆‡nßAv¦¹Ñ]³˜­W}èC²£é4¯õc.¤DS§fŽ*¢íÚš<[\qÓ¾ÁGúNtLCUýáHzà !ÙvÆ` 8]öAÇ[’„ì$Ǫkvÿrcöâ;¸´½ޏëÒQá,mí7!GÈ™÷ÊzFøªÝß“; åÀ„,ßh+4Dp.êÊüîÍÄ3¹va>;L¨!Gß­ÈÇþ×uÛ¢ î8®F:ùQ}üúQn;·Œ"&•Òm<ì»î:Hhœ£ö)Ùèâ"Ðk ñ’}ƿƗ‡ÿ¨§¨úþ¤áG!ßáÇ‘ Êqéˆ~tÂdÆá¦HtÖ"ÐiÈÞª¿zAãþ[‹¯â½eÇ‘ŽäÇÇ#|ŠÿAÔ×á³°D]lŠ;i ïh„ò†DrC“*M0†E 0B Ðhv"õÕ¿ûª¯oîºä+äcê*þ4£þIÎ?½ÓBgÍAÔk}¶®š¼DDI"!‚/ÿÿ¯èŒ®½©!ß­oñÛ²Çîä›â=EKkìí;I;KI˜}ˆáÿ¹?ÿÇü|qòcבÔ{¡ŒrŸû[ñÄ·¦“ d£i6±ž!¨?×ÿê¯l~D{_!UÇ#Ývµ¥§k\WÝé1 éÒµó±°i}8]ÿïÜS V;î4¯ý´@‡ü„uìoÿmC®ÂM¥“U·w¯ÿÿíoÈ£”?é¹CŽ[©÷aAÇ"éó£ °uÞ²cû v®^;ëÛÇöÛìŒsäQÒá‚þÿ¨Ðãà "VËŠÇ!öb@º¾ ’ú·ØK“°Òa‚Lx1ú#{ý/ïµÉ¿ùúÿ$: TVÈAÇoG ð(7Ð""Ëõ.Á„«a„ƒ Ðøm_’m½~žœ|ü[÷N×Oªþ=Xi=0a&!0«–ƒGZï·r-ý©žñÿûo†$>Eˆâ8#²N½×jžXb/ªC¿§¶XÿÚ‘GûÈÿwþDˆ0¢¥ÿÄEØä4:S î ÁÚÄ4Fƒˆóµ€Î‰¿þ>AAOwÇß_ý~ ±ÂÑ=Áíˆg³DD,þƒ ¡Ú±ºàêõòß²aøkâþM쌽Hƒï‡íñã@„"""“UƒûIè7¯ïµÞ=ïŽMëGˆ†~ñMM oˆ£ø¹ A]‘¾=d+ÿøùù]xü:«ÚÇÁËù+WþÈ£Ñcÿü: öÚ_oÇí¡¯…íã ­‘Gÿ!ÇA>EŽþŽÓŸò1ïÔ†#\ƒhŠƒW":ÿ½§KãÖÿ®%” ÷¹ðžD¦ÓâÜ„’ý¼mýÿ¬˜ýW§÷QƇ²ObBC‘Gñ¢ éð««ÿ_ýÇÒÿûx”:qoA¨ÖD¡÷¶—²(þ¹{´± % d;ö›Œ1üŒvQ¨üWáÒøÙ;Ö9'ßô¤î…$ˆÞôNé.üòë;Ãi?¥ûýwéµuŠÔ¨ ʤ ‚J¤Ÿ$9OßÚŽ*¯n»§÷½ñJÖ¸xý'ÒI4¤($DlŠï¸äc©û­äÇ­dƒ:†ŽE~·ÇþS‚„*I|r7ßí»È#zòORLKŽ[Õ-dQÔýôG!ÒÕ¡ $’¤’÷¶›þñïü§®ý‘Í_Ô —Wîþ¯Ý?þï\oè“Ý‹Ž¶BEÕ" ê©Çÿ¶ë(y#ïÖ5ýGï~.î0¨„tÿíY!é=6¶›ßlž}cc_ã®H!GQÅiâ÷}Þ÷yïHÈ£½v¹ÿ®>4†·¯¦²Çþÿ÷Lw¶±©æüŒ}U^¯ò1á'§§ý5Óúõ¿wÇi§T‡ÚÖ™¬½ÿ¥IsJºQ­%úÝû)Ùù´=3ˆÛ f8þÏW¼iBKŠþ–—úýþv\ÂÇ'Y„!‘̸44Cf—ˆ=ë„ÁBt¾šÈÞ·J”„zZ¯ÅÛ÷&h« Ýßça–ð“ Ú\›ƒ}¤ý<-kJ¯ô9>Žvm²®A¡ñi—Žj1É»;¦q&—‚ \\(0zím ˜×^µY~•fûzib»!\‹v"q†„ÈP8¸† 0‚  ®/ ]õ¥QžI,%OCdIž¯'„EêÈຸ@ƒf °Â öÒm[ Ø*„àÒR::$:j¶Q,•r>Îc þPê$Dz îA,ŒyØ@B8hH11Uä 4˜ACiED#ÀÕh(‘llƒé¬DDMYñˆ‹"ŽC8ãd$ ʈD˜A@ZäÝI™ æ ™åϦ +duMÂwä‡a"phVmø¨X‹c‹2YÉ€Î|ŽÆÃ’2pà…’iö$Å­¥MtfðJèi„È£xO)ðBRÇÐÊ€å`¡"%ðÄ&„l# ˜L…|ETA„ !ô¡••˜6ƒ}Òð E!ǰ˜¦AâÐ>|T2Q  {úVšPêP–ƒLAš˜&F¸0I½kL4¤D»²ÊÄâF Ðh„Ba²àþãÁ¶ºB ‚"’»!©žÂ®ª•êŸÉ´)Pá5öŸUZsºÚÝâ(“˜oe(3÷^µZ;ÐM6Žø&ZBê‡r¸PCytGˆà¸N¯´¹%ëÒ¬VËHH‚_!¡të§^•ÿ­xkíƒ+¨ÚÃ_ êºkm'Êê€A@;ö”t‡M¤©jµè4 ?Cî¶?ïë»}zZn•#3Fš^»×íkXª,≰’\„¯á¾gRE §™ Tù9®«ûæzõ·qz‚j˜D1+‚*³#%¡ý$ú&QÂ5 ”³&F¶UˆA£T R†á§âªü›¿¯‘´t‚¨ eÏ8D!üèÍ!¶0A… T×O¦ ÿô¹GÞ`a0¡m ‹`˜@ÂVƒ(f"§UûvòV£ñ•eL8ƒ U†ÎPVÓý.ˆ¶ÚºÒT¿„0 švhØ~ÕtÕ°ºòú ëñÅÖÂFA °ºª"^בm˜úd%¤éVØhvÒÞN5ÕBkK‘¨¢'+@œ<&ÚÚAÑ’¿Mv•„’I>«ß‡I…¤ì†ÁôÓinûÝ$¯W†•E¿r-†F<Ðà©ë „=vÕÝÿ:ß\6•[ k„°ƒI¸d5»‹zý*h*áûõèð?­¶>Ã#ÿéטZ¶ÓJ?_ýoí®×Pë ‚[ïZIöŸ¯õ].ºÛ®ëûÆ•÷b¿ûÒ_ÿú}ßzïýû·ð_ý¤«I.ô«¯IRKÝm+õëV†µþ=¥ý%úÿþ¿×¯JFK‡òÓSþB¯ÿZþ¶ºÖ¿]~¿á^¯°È.Ð&éëÒJ«ÿì0’Z¥éQ*ŸÕkþüÌÛñõJXúõZI*®ÅW]%JŸ¥ý~¿aÒöXâ¸ôFúýUTtŸuþ½ý#Å׫Ýi—$º­$ºÒÒK!Æaô©RIj´"‰Ž•VÝ-­º#d½/ª­/¤Y„‚ÕRNg·ë­iS„› NúÆ B(dLC³ˆü/ëé*JkJ»~ÿ]i¨X‡ûø@‚ ¤ `Á¨Cfh0A‡ál$•%K®ˆ.ž¶ ´ÅÚZÚþ…˜!ëeÍvÁE°Ða…„A…¦p†¾ÒµÑä$â,iZ Ádê …Ç°Ö?’B D_ mÂh‹?B˜î®%z|ÜSÿVCŠ_aØA ÖRœ,†oNÃb¡ªíºÜƒ½&\,*÷ªØKJÝRª·k êýKé´ÕT†ímS_ÉE 4›í/š+¯þÔ‚_dñ«°ƒ[´Ò%0˜T `™ z f­4üSh˜ý%î!jÈÇû!nÒ»L'fá‚ 5†a0Mƒ ­‚eÂdQU{;U[­}YÀi¦© da$&3¸B!‚CM„D~à }W¤¶_hˆÿévÇnÕØ/]$Â(~õ߬y]hîâ#ÚЫÇäHÈAí«Sûÿ½‘b (ú÷ì|ƒáì“ü~ßÿr èA„2ÇýK2ò;.FýcÿrÈñ’|àišàÁtF»¯ÿù\Èì&^+ø4âà`ŒŒs3.#ÿ»þC#ÆhŽÊâ#‡*3.†æÑÀ<0\2ˆàf ¿L9Çnÿ¼!,Íl#±¯|wÿâ"$ €V9 ÁÈÇ^ÿòQÿ m:B A{5*Èg…Ô“ÿïwÂÈd†¢B†Uj‰dܱRÜ” P@€"r•¥Ó×ü†AÙá ÝЊ9Èÿùß^öB9„rc{!«Å3˜û^AÑõÝb""#öó;}È4뺿Ç®ž×ÿÞëýo¯ÉÅúuuéÿNé:Oí¡ëÇnºM׫ÿ¶“¤õº{Úm¶m']°‰»ü®Z ,†‚„j@Ša°ÁÛaŒ0Á(h$-Š#?‡ 1§¥ÓîWTD0 Á ‘ÙVa þ""’/†ƒDD_ˆ‰õ[gÁ RÓTÎc+« ¨ƒîZsóÂÝrÊ”W“¢Ê)D#’ì¨!€dìíØX!\ÍE(†tä3ÙXAs„,¬&¸š–è~™Ü›&Ctâ—oúƒVIÐ2cú©ÿûÙn ‡ ^Ìm¢½5øy]J~§x +fÂ(èGºãC ¯Ú×÷×2Wí/ùoªMùßT•ËòÌK;M„ª¿uwZöþ)ëôߪA}zIXMã¿äcëúI¤´½½$L|l“ÿáÒW»ê?øº}m}É>¿V?[koûÿ¯,Ã[úHRJâ’ß‘_îíµßnÞ>YI°º·¯»K¥ï&êã³VhŠb%‚ S0KïK‘î«÷©”ÙÜÆl+=‘Ìá †JÀ RA!g‚„Ö Z Ý,“¾¡éúr e/< 0à¨0¡L% •ä ö•¦†EAIíœu÷¥_ô$›Bݧ¥uZ«A;"Cjá’Ú+§v¿»¥ò(ÿ‡ˆK¾Ü;@ôõî¶žÞÛ@— ¦¼˜ý¿I¨HWëÚpõ¶§zõIºw®žéî:Øý׈ó´úe˰´NïOþï_~µ[ëÿÏD—¿yEÜŒyëÊ€„0Ó-ÌæF6Zqo÷®þùâŸÞ¼¨üÃýJ /íJúD*o „Š0Î{$&EN{ØO B ðB,§ ˆ4DzZßîPë§U˜xy‡ÿÕÿ£3f‘ÆÝï.d.9P{#à„#>4A Þ"?Cf´×0„3.éuù‡ÿÿÓï÷’7ý÷‹ûÝ"º¾ùWÉÍ0¤˜1‚!@ýÔ'„ ¯¢9ƒ}Î:š!~…Š!wÝÞþq?¾—k¿Þ¿ézßÕ×ݧ2+ é¸BÂCA·",Ãfœ¬†ˆ^‚lÖ3@Aa€›D¨¿Î=%iSûA}W­­Z¥÷•·zìœ-}IHB`5²æÆú &4EÊÛÂ0Ä:h rQô­ç‹t­ ƒÿ ïŽ«iD+ýƒöýê+ïR6 4þïîÉðA‚©„n˜DŽ"9°ŽË†­úMµh'ìŽdqÿ[¨JÒ$?¥¸ìtÛî]ÿÕ¼)mkúñþ- ƒ‹Ï´F9^ÈÇÑNz¶‚Qoì$¼“ÑßMlÎ#Nþïî¸ÿß½ò7ékëMS’­:æš÷þ“o‚"Í MšÃ¨Al§áiktûwo¥ºOĈ=7ÇÕm'þO’­7·¿ÿ’?{¾û¯‘é&Ò~Ô6×rOIÕ½½ÖÕä‡Ò¶…Ó÷¤n[î½îýÿÜÚaÁï[êëüßõd³Âúý/oIººGºPä‡ýEZÚzµßµ|˜ë–8~÷ÿê©öþÌèß{kôïýþ_5_ÒuZœ·ÿbí*µúÿõCÖï«[ÛR{kþ»ûÕþLôhø˜×þýjÿ…ºúû^n×xwé­Çð¿Oõß½ëW®5“еýüZ3êï÷OF‡ô|ÿVÿ]oÕ?õÙ!í+kã­Þõ×#û÷¤ŸÕÿýVÚ_½ÿÛûÿŽ´íõO×m/êÓu½ÿ¨ë»áÒõþ¼kn¶Ó¢OûÚÚ¿{è4ê½ë_×îëkêðm„½4TÓ_§õ·E¿Wú¿ýmü|4êk½õ ºîêúÛz¤º§þÂÐz 0œaça0š !௧ö꽯¯ý2oýî¸R1ÜkOMHA¤ÞTã'!‚~ª½Ú„¦×á=7§ÓM‚ „=“ ¬iRx ÓÒøï»þãí®A»aG3¿¼R/ ]úQ†‚ú‚ $š a 6—i÷qª#g!J $ÉYì®B",àÔ=û¿×µ÷ÿäkQtž—Æ@ÅAÔì~>ä ×ñá0žâË´#ą̂ÄDDY¤©y1Ðþýý0¿ô½ö»@ˆËúþöéʱôÚK|0š^N"ÔЈŽ#Ó&;Âïá¥ÿø²à¡®zßü=mBòZ¹þ"jGTmˆúŇúñVý} …ç䢿#·ñ‚w|ñd,8øˆ¸]C_¯Õò .…yutþŸ×øDLÐzö¿õª(˜þ¿y'òC®aKi ñümÉäÇ„?jÆØOúß"ˆ>?êÓ¯‰"½ÔŒzU&?Þ9!ñ ’ú’ß™üHàØûdÇòOãð¯|oíñëÿtDuɳ£-3µL‹µÍƒ?‚`)?úwÿ‘D…Ëñýÿm҆ؾWS ƒ;¡dYš šfZ„E¾Ö†ñOòOBGMõ_‡ú _;ÒwùG`dÄv6! k•0=Nôþaú"ÓúÝ|-‡wÿýˆ¼‚‚ÿ:‡ ¦mž$£A¦ý¤þÓ_ Þî•_ú¿J’a²HyS:“~¹'kKYÈ„GØM=§jè Ða„îÇåƒ0õ<ð—ËÿƹH ÔãÂLwYW”ñk×õä$˜‡¬›%ðÓ0¨43±ìCî/¢ÄRŽÒû߯Ù7¤å.+•²QÓûT·i×óIË} ìPõô!Ý«­Ò÷*YÈ·]zë{˜ê¯],„¾ÃÞ©õ%¯{âXÿý}U2¨)¢A„Ôì'ú\vTHÐóÙÛó¾Èùƒ5þr(229Œ f‚0úÛKûßûk½i«¥ÿÿ_$;¯ÿÁLì!¦‰`Âÿ’IþN O ò#‘›.32.Í‘ ‹ æbBJb˜SÅ¡ljô#›¸´ë«úýqõ~Ç_ýùŸÉ;Ò}êë\&šjNÞ¦›ä¬Â¶’i¯¡hZØOý›Dž¸M Kwb)8džEÅ=[܃—úß}Õkù8õþW­Ó_ߺ#±­ ƒßOë>ÉâpÅîº' ‡Ô“†Ý4‰Ãÿ“†‰Ý’‡'Ž›ònäãAÝÙÝi=m¦×}ô§všwtNÛý·Oòcþ—¥ïûíwÿî£bg¶ ›·m[«K i4XîŸ÷Oúa“´ ÷õ×ÒWN¯þ°×ûøiß_qñ÷Zm®½·«‹vÿûÒû­/Ý.ý+®MJÕµÐO±¤ë¹ß‡¼:'owÿ >Õ¥¿­ÿŽ—¿Ý~¿ýik«íëêÕxK§KS—ºRQv›Kµý$°m—* „­(­Wî–¿»»O1ßÚ^»kø÷X^±ìПß4 ûß·Æ–§>ë}‘ŽºVÐkjé}}v•©X‘ͪ¢á˜ö '׿¯ï¿ß¯þë ñúIÆÿ” ~ù˜OúÚáþŸTö•–>Õo“i1^Ú† (jÆ…Ä6*ì3aa„šª~E»”ýû¯Ô~½üÐ.ßêì· ßN‚ú÷'¿TNÿÛßí¥a5§¨«­Û H.9PÕ°¿†ÂQ 4«·I¬1P`“_Ñ$L ëÑ úcÿÿx­^h^¾ª‡}…ûܼÞõH/¯ákúêžéDÖ+a¤ì0‘­'†ÐLKqV“a&šiй7§„ª`ˆê\ îÑÖ–Ò¾¿Áþlûþ¿µ¤ïþ—÷ÞÞ¾ëÿýH72g7 =Yôë`Á „†w=²ô0Jšƒ0Н )Ý4Ó"V¥P  "bpÂ4 ½õv¬uà Çÿÿ®êö­·éûOêû¥×«<ûõúÿ}ÒòXÔ«‚ªÂÚÕ ÇHè! u¦š“Pa†PŽƒvDD0„-Á‚»KqÿþÞî¿÷ý'æs×ö{ÿué6ÏúôïNÿ¤$Z $Õ(a—lS \xa4Ó@Â…òHħÄ0„DD.ÿQûõïúuzvmðÛõTÛUîÕ°œ5´ôî÷ 8°ƒPšjÁ¦šêßø¦š bˆ8h@Ðd 0„DëºýëÿÿÓÕ;dnkié ã ¸@ظ« šqa|j›¦ÃM;pÚi6¡|„sáÉA„ÓÃ@Âh0C,¤„š@»R}}¯úaáIÜiªÒYØj+vEv©»OLŸ&„0ŒÐ´A¡Š÷e%ÂNêÄGƒÒ¿è4Óµ §ai&Föœ4÷ÓÂêY; kB!‚ VN  çA‚)!@‰(¯vœ&ƒA¦`?Å›D Ê ¡!Â""8ˆˆ‹†0±LpwF©B ÀcT ÚÃhDDDDt„~ ÊAB^%Ì""@\…gc³àÜ(ˆƒÑ2V…¾ÃA™Á3P9870d„`$™{% dAŸd*"«ÈG &ˆøÓd˜´ÒCÂLB(*-0¾ðˆü07¦C4×'ïH6‡ œ{â/½ ›«' ˆý¸a$Õ+d€•zR̨µ‰!Ú¶•†g¥}PÓêÛ‹o©7Kgf2SÙç²*^ħּi7µKë÷^WX"XgzH2YPæ´ ¯øµ´•Wÿtû‡™0A“,Ø#Ú§áïðÚ·ÿ{io­å@RU’ ØDšh†{†Ø[»áü6ºú_÷ýÌé¿ÓOMz%t˜O† øwðÈ1ýûí`ûÔð­‘Ó ƒj{ÄÛK¿ ÝÖµ}>Û© -ÚZûRƒNÑ*^–“w}~?ƒïɼ.ü_ùû†„'Ò»]v¹(3d{SqRŸGFt—ÊØao¾?Xx¿ý¯¼`¶´æ’ä¹FÌyAš#†údŠ“Â2qP Â“@Ÿ˜û¦Ýjÿ¦§2qœ" „)Ч] „ ÂiÞ„ÿšÚh~ýÑ …Œ[|‚?%`¿­yŸJ §—EㆃD‡ £åˆAú±}Åý!Ó։Ò{¦¾ÿ­ ÷•/ÞJÿø¸´áU‡Z.Û'tIè»þ[ÓÉåÚî‹ê%%3þ¾ÚA‹¼oÓ_µi¦šdo­Sá?¤ô¤ìž?i»·Tßï÷ ý_ÿاu'÷uJž7ÚØAöÕ“V¿öý'«w¿ ÕõõkõõÿÌý§ößKõý[û§ß ‹{ZWëþë×úWÿî×ýnñ÷{Dkëÿ«©rEÂT‚T’TI¶µÿýÿÿÕ}ãW÷UßhŒO¦hÿ÷ÕP¶ƒ½¯­„‚ Fõ÷ûÓÿ¯öúÿ_]?½éͧÖu/¯ªý§iÑËzýˆ[eô©*H¢Aµ¯ÞHÿÁ¿ß¿“ÿ]w¢Çj™ÍíÝU;«³~S½‚Å[K¼¡+ïþ’I$’I$’Z¶õë¿Uÿ}ö»þtÿ_÷…Òðpoé[œÿ¿þµþ¡$’Iwjþ¿½ÖZå×ïÿû·Úß®¿çÉoK~´sð›d‹Iõ´ªïõ~«ÂT…’¤A+O¿úÒt·IºýÖ×öÂúªÚ…k iÄ4*¶‘ÇzwÚºmÖšV}-˜MçŸKÞÃT©×ûWíUÒŠí&Öï®+m, Ó<Á ˜Mm‰Pƒ cO)ŠA„aS:"@Þ; ¦`÷†m(†³A$»Òzp•Ýol+í(6Ši0ƒ îðí4O˜a Bam…ak"» BB§Ä=v—Šbã C׆­¤ÃpÛ ÕC ' XwF€D,BÄD„І0š 6JÉhˆ‹R-›Ó0i¦E}b"!¢X„É?®ÂM„˜¤!†B8Pž)† o³ŽÚ a‚q !ñ'b"N„\DžÅåÀ0¬B [U,t­¦ãdB˜Ã#Š!1qõŠ ¥¹1ÎðÐâ ƒll!+ê<} Â!ÈÖ Í½¥A8`˜†¼X!QÆWY‡Êͧ%9É¡T Æy“Üó eãO c5Vˆ(lÓ!i™Cõ®éˆ¤ÒTm¥$ÿzAÚN—í˜Ú; «©hGÒuhInvHƒNîv= ]R„‘h°s ®$)ƒ#½z~`Š:3ƒ'00ˆ8ÝÍG³38³Z43f|;’ƒ)ÌÁ=J5WrÊh  b/®F !²èéBÂfà  }¦nC‚"Î\C$ÍÅ †Ì`¡efeÈùQð‡„9("EpDvƒõªl›âGÍm¶ÄðÑ8aÙ!Þ©¶¸ƒmÛDáatÐi°aBÂ#70D/¶ò┋¨r  µýˆq»F¼ŸéÃ/t»@ñÉädï'œ2íSq`íMÙ¹4‰¼:$øNÑ'a–, ôa™` l\%WW¦]ÃMUu{ýø}*è=¿<¾‡a+v Ê A¶NÚl; à Jè»xACeo¢¹Wú´ðïc®þÿü¸ï×Þþ»õ¬¶Õ4=´Â}‚„á&ôƒhwà˜ ªÿV°ýãýÞ®þ¿ÛK[¸¦ 7ü.÷uÒé0ûUN‚QîÿÿÿýÿüU[iI¹A¾?Ì÷‘±5|9pšßÕ÷àßÓ¦–LWé¹»ÿÿÚ½Ž„—_´NÓ¨%_u1xI¿úä¿´ßýß üwþï×EëªÃ}o¥±A¿®˜ër1ÿüý¿oÕÿ_¿ëÿ…O¹Õ?}ôú ókºõºy}5 ¢OþÁÿ¯ïú_ûÿÓ÷³ú®ºm?þߥqò‡ý=ù´«‡ÿßÿÿÿK^CÏÕ„Ó[/°Î;½µþÖÌ+Vç–úXûâ/MÓ×§ùÉ×ývÏ4Öí[M5[[U»ÝŠcŽTVœzªpaLYn3Bå¿äcÜ4WÀÏKÿûö×Ó†©¦¡4ÓN8¸;ÓIªØ¤Ûö-ãm6*ñV!¯KÖÖÿí6!&šlUðÕþé‘}„ï VÂvFöJç#ŽÓA„Uu½x²È[N;µ†Oi;Úe§¤ÉZgCç„ÂaH¿¶¥Eˆ´B""šA¡ ¡8ˆ2‹ÕgxŽ!ÂUA±[ ®˜A„$&Ì!„XB#OM.ñ;Ž«² éûWÊ\Êâ(PÅW#ý h0†ƒ“¡Òkäï"¾<‰Ù{Êã„2J(ˆˆŒ{ A«£ÐDh0@ÁÈ/àˆ1"L0A ÁqqDÄá 2™„!á 0AÆFPaþD@ôDY°DL "’„ÂøD%ÁHê?ž á H&@ƒaH Q°A¢Cð6‚l"¡á9d,Gb™T39ùý;4•¤ÚM²Ç¡a9±zMÐl f Ùùɰ“;+à€ƒ2XDn[¸‚WIBX‡Ð@þ‚a®¨“jMÖw©®|ï„v[ñÛ<`Ÿ¥µMXz44˜¬$úÓt¶¦BKïiÓi„_Å鎪¢o¾µKi(zMëjv¤d$u iÝÚk×u䜑ÈP=þ·úÚ¡«t·¨&»RLJißÿ#ulP0×Ö>©GMßA~ªž4?´ïïàèV­Ók¯\z­õ ¹f:ªrÇÿßîtʶ{D"X×û‘h„D›× ÖÒg Ð?¿Þïãc_ßõ„GXè}}§^Ó3Ó4aé§i§zÛ»Ü_¿Ô{jêÔˆûŠi~âÿíUEtœìì¥#É¡4ÐvˆAåÃ팻÷¢òýK»%m“ãþíz“{_­¿þA‘Ñ›{ô$ 3†x‚!K“HÂ#9êš Ó_õÛ6êöö>÷Òm§¢ù'×ðËv¿qþMù±Nˆ„Pƒvª«Á3æReêò(IÚ!rhXAÓú¢wawÿ½=»ÿÿ² þ¾g÷xi_D3¹8x'cêÜ(DnÐ@‚ n‘ bô‰—tIÁèöŸtN+a~ôí_÷ÿß»¿Äzÿé&?Ãýwp‰s$R¦ êÌÃú‰ØI¢pÙ0‚¡»M ›hi¶O('kiªmvºÿÝ[WäàÑûþÿø“tÜ&9ȃ"ãý’v 9¨a±r¤„…"8a;A´ON×' úpðÚzmÃûÂIÕ¿õß¿þ‡÷ÿûÛþùw?öñ´Ò»!bC£5Rc½[¾ž}Ðwµ‘Fý þº×þãÿÿúê–`_ÞEPUöh½^üÃýw¥´œAÅZ3Ÿ*Ã]¼j › |/¶šÿ¨NŸÿ­ïµÿ¯ý~I×ûÿWÕ×аïÈ€ñQ§éo¾Ñ PÙK© Eúdv½Íýüæ'Ꙝ/íïˆî½xÿÝWv´ƒþ¼üAá-oVõMMyÃ3úâ„}„Âg\äfXXÐi¡e‚ XhZI0ƒböJ½°A±Aƒ8# IÐ[mM¥ì{I7õÝsÜÃìÎMSD 0Âa5D$ÚhgÄ[M\'¦É “¶‰¿Iwa“Ž aCD3Š•Q1È ` B Aƒ068!”ªû·ûõ¿îܨéÕ;í; ­:$;¿U“º.á·'”4NíU:MÙqh<»¾ìQ APÚ 0ƒ¬R÷^©‘îqÔ‡è+JFî¤ââf(Mn.¯½Ñ8Û ¶ïPÛTÞ[«iÖ›zúxªt›ÃYe4ÿE8!D B(+AªÝ{I °—†MúMÓ½§íZ»NïO'pÕnþïRó.!×§ßäî—éuÃ[®…KEˆmH.ä ²@“](í¤í…[I¦éÛV)…ÓDݶ‹~íKÊîûýz¾õÞÒ½ž¯Zû§ÿÿ—7ÿâ"""=ûa$H|u¡°Òh{ ä"m§­ûö¿wj­÷ x׎ÿ¯éþ 6¯ *ôélS´ïšàÒ¶ß»¿ÿŠ­Ÿé¨¿÷ý‘ĆGÿÿ«KzT?Û>+°š3ú£Úk¿† 'þŸÿÇÿê¿a¯ÅE«ß ÷ä?lVÐ;,pL¨(sEÆ©¬ïûпv—ûò}?àßäó'¯ßÿè~öþÈÃMˆˆ²C‚ZÕ3I%O®þó¨_wð‡ýÿC[ûÿÿÿù]΄NˆGú·ü$’IÄ©$Kûn—Ý¿ÿÿ×öýý|D»íÿè ûÕ¢Ç*?áÆ^}Cþ¿Óÿÿÿ^ß)ëÿþ¯_ÅÒÒ´T’I‚I.ßþ¿þ·Û~¿íßþúþïýw÷öþ³öf—ûîËÿŸx^›=/¥Ó÷ëO6¶ÖßÛ7~cþµï=¾špÂØ*„Ò PAÒTM†Œ ޶ ~¿~¿k¦›®›§jé?v›a4é´±Æžß (AÄ%J! &+ð—0´­nµ4ì aA„ê6*+mÕÅÚȯØA«á„oí0LB„‹P®±°Á)6¬_i„M4Ðoié‹M‘GÇ´!¦š,4uÃB!„-0‡Á…ئ)ŠºÚ\2ƒB Ím Ö Íh;4Õˆ²+ÄZ†ÐaOkd±ˆeìiˆˆˆ“Á aý„"O†DDDG¸ˆõýòÈ[?\·["°Ü©ûÉnwþ›J«5„.!p]_¾»¦ÚývƒMUL÷ÌYÂ5ïÃM0ƒOŽì¬gÚ pÈâš2&Gáú²Lã8YYÙCÊxó.<2YDq„â8´BPÖKšÚ_£$æjg afDc:¬5"Ã"C6@ƒÏM ‘= Î ¶NÈïh˜í4ýç}ç@ÎMAŸ ƒ P4Âk„õö“N9!Ú/vK;Æký©@ÌÌä „Äl•’¼œÅ¡ËÒ&íùvýÙ>pH´_Y' ›Û~Únƒl•¶šz¶¸Aá>-4vJÉ[ªn¶JèœR<äi„“xw}áu´××ïí;NÚíëÕÙÑ'íµOM{nŸ¿Ý÷Ý÷uoO¥ëZÇÞÿÞ¨ž]á…¥ïþÿi?á­×ý{]Sý÷ÿ¿Þ¿£ë¹8îëýWø½~¯ûýÅGãßûžu¿[m;´î×õÿïûû×î—ÿü„HŽŸÿ~ëŠ_Žô='Òÿ¯F†¿ÿ‘P·ÿÿËкÿ_ÞŒýÝý—W…ý¬_ýý¯¾×ÿ¿ý×~ÿU=^רØÈa>ÿ¿þÂ'ÿôNï_ëþ¯ëÿÿÿð¿ÿ_ÿN¿¿ITWÝî¯}iémoj‘;ÿÿÞ¾“þ½u×ÿïv~ìúÒ´ÓµÿÿÒOô»úöšêûí­öî’vªš—ØfÂí„Ø55â¡®¿÷a}÷v’ú­·¯kiì0N!¦›()Šö [¦-4ÿø¯þ{µµNÓíUĈ†» +¿iú ! ÂdpÓë着h7 ±IßLÃØ+´xi6GhC#p™Â Á,„Cbu\˜—þH Âi¬S š„""áÞ™;A„umš`„DDG?Õ,­8hDD4"""""+_Ý‘Ú41 !¾" ˆ«_ÊÙ?ïɰÌì°ŒˆÊ©ü®2$‘-gÅ •lÖV ¦; þ%,) ÓLÕNï¼´É»’¶J¢–F÷×½<Ãû|³xÉfHÎÄp˜иP˜C˜w» „ß *O–aflÌLÞv`Ì`9fU†G0ïUzpÓBï¾?å˜Èãý/KÓç½²VÕ‹L8mÃÉ;—nÚm«ÿÿëïÎoke¸öBè"'„ù‚ °ƒŽm“ˆaEû˰¤cî™+hžQxÃ&û‰¿y8í»ÓtÔI½§ÛöÿKÿé?è Ð<«iÓ¸všÓD݆¥ãwi; õPOTÓ×[Mc†Úá?÷î=?û·{Ì?íÿúïñn³³ÇhêÞ ‰Å“¸aÆpÑ;i6õxòy÷ÞÚúÖñëõzu×_ëÿ|÷Åü>¯ýï¿K*QÒ¼íæTî°›,$O2ò 4ûëý<˜ÿº¼}_øaßû#‰ÿßõn­'ò¯ÿõßhZÉ@iµŽî¯Öé;p×ïßÑEÿÿ÷ìõÿñOý‘Âz¯ØßÝé].µÝ£3ý¯«ê¾Á½1í/ÿöëè†uüxa¯®D…ÞN¯ß_ÿSø=}Ûkwµ´´E”}ßÈÚ÷^þóƒq¯ÿýñ_™…·ù< ²*‹‰õ‚û]ýÑžh^«A½[þqÐãßPNû¿¹¦Ÿ’hì®îÿã"çGÂ×½Uëÿ¢o×èpt?Ý}ô"ßÚöÖÛs¿Ûäq¤é§~Èªï š2ã²ãÌÄ lŽèf†]ü˜æ9umþïëEÚV­ ßë©<’º¤ÿ÷Ú]wÚ»}7ZñÓM~ù/ôPf†>/ú^Ø û'%ÿw¡Mò¡÷­_¿Béõîßöè/ïÿ0­kþ6šù~Ç·¯_¿Öÿ›hJ¡0„ý^MÂùvÛ´L{gý{mîÿö¿Ý§ÿý§G*îý/ÕÎ?]³5Û×Â}ðÜqõºçÿá;½õ.“ËÏöq¤v×ÿÿ×m$ãýBlЇjÚi ØÛ8Óõõ ¦ª‡ËúÃùwýÓðí?ín›þ1w›/-5‡÷§§÷iÌí÷——¯ÖÏö­žfì"ßÃÁ4ä?0œ8Âa64ÛÓV-Œ'°“;bºoÿ÷Ï`ýتJüÍN!%o×ÉÓÿí}«_¤ö³ m† ÃJ4ÕŠv•ƒN¡ÞÛ#A–ö¶qÓÄ4öØm4LÃøj×¶é?æ÷};þ÷ÿ›=þï_Tûÿùøø º Â±Q´Ã¼0„[]žÐ£sÂÁ´á’xg†Nd®!¡j„2Ä{û­ïüÿoïëÛ—Ú»ÿõÿúúéà ‡{TÂh4!‚D^„DDZ„wvõñ]ýÝÿÿý¯Û÷ï÷¯³0ž¿þ)÷ á 6"#ô":ïT¯íÛ½Wï®ÿÈã_ÙÕ¯ý…î‘qI¯!AQ„Dn—2?}­÷ÿ{½ÿý û÷ ×ñ ôµôIÿãÒolW^¯ÃÿÓ{ þšCÿh'ÿG¯éèÿƒlRª×]ûú½70Sé3 uå¬ÿn»ýkÿÞÿï&ÂËÕúÒ†á;J°MNCB!êÖ—õ¥úk§WëýåuŒñ‰"2&ŠË+ÙMßá$„p¦pMä4:÷êïÿôÁ4Ù =ú÷oöž¦JyXAS>È8&a2Y„Ó„„jõ0â¾öš  5¯¹ŸÞ¯­ 4áÃPAÝ­Ý&ši·äM&šzdè*¨uBœ ½ÙƒA„ÖU©DD‚¯NÜ&nÚMZ ?«]X7°›˜Åˆiò(ó±Å êÓëm8}þAKòÃ1dÌ„4"#’AUc ÊJ ¹ÃŒ<; œr¨œ˜ÙÚ«Ó‡ ] ÖZ+ ²öº þmS´­4¹¤""""4Ð`ûãŽõr·Ž.hb?Û2µA£òˆ°—hDo3õÒ쌡éç3¡‚e ^ûh0š !ºñø´EÙ}|•,ò:™)53£8DŒ’3ñ¼§Ž<4 ü`Âd¥žf “I…ˆˆêÈ£¯YHZ!,—Ï´Éq!¥Æ ¡iœL!  Ñ„6Zi§.T/‡b´KI;.0MuÂal“âÐa´MÜ\˜îذƒ T]ìŽI>ßµ ÆgœÎƒP˜D(¸´Ñw`Ÿ{å»F‹râÉ»AÙ+%tƒ´ÉÃD‡ÉÝäò“m:M»'ž¶†a40hº nÁ:=Dònƒ^ÓO[»ÁéöŸÜ0½éö±§¨ž0Ë+'š~ýÃN·=oÿý½:é¿àÂè¼R8róOÓ÷ÿ÷‡_xéý‹Þßü?²âÿ¦Úh ©%J´ƒÿü,?A‘ÄЪõÖ¿ÿŠùc…ÿׯ×ô’JÒI%ø¦â¹' ¬œMî+äDhE^»ûÿøoøI$‰×ù5-xZùÿÚš¿þøý^¿ü7ÿôI$JH%Dßü½?ÿ¿þ¿×ÿÃÿká×ûúÜ­5¯§{kßåëß¿ÿ1¾7}·ûué$•$’1„’I%8ùneq?_«ÿ½[Ù~¯þß\ýmœ½~ÿµVÎ4Ø«ÿ+3xM;]ÿÿi&±ßûg 5´á¨'š~šýž›Ni±¦Ð$K+«%«+v'’N÷ÿ¥ªn±è0…l¿qV<1¦ÒjœXMƒŽ!µ¤Òl$ÓOÈ—‰S;,Õ0u*]ï†fµuoÓ¸¦©ti´ÆžÖ]·MSi‘‹A”(A”Zª„.ÊM9}ÚýlÞqH„jì&…¦éCL¡Â…„""i²V™ÄZ !ôN> Óø[Å&ˆm. !'Ú|~ÚOÃíê’¼4šxhéS@· ãS:V×*ÂÈØ‰Úx(kl2Ù€÷êS²)$;šD1 ÔÐMŒ¦ƒ4ˆlÛT¨‹CûDù³ä˜OaŠ"û‡¢ÇlY9ó^Â"M§”E÷mGjÄ"(eù)ƒA§„ËðÓN PØeÅ \0‘1ÃÂYàÜ´"«’wÚ =:pó[BÙ‚áËÆÓÓàÚîÖ\_k“qxŒA0šd•ë3µj]°Ðj•äÝA¤ôï»ï/-ŽÐw}·Â„k„ý´@Ú'wA7OTÛˆoÖüI¸=¯ßçgÎÖGvõwßýޫnJDª§ÿëaãcó©&vVÓL¥Äªúi¦¼7ºW¯ÝoGµþ þß^ßÖïýÃíRqÜþ»Ý ¨¯ækðÞQµn’æ¡…î>êY¥n(D­™ Ù?ÚâqÖï_ÿž}r/aØ?†„4T•khí[º³±Jó"êÎɳ²£J’I!TJ¬‘¹÷_K÷Èü±Ê†õ¿¤×6fŒ”ëeÌÕdh!âD21—,åºy’‰Èié‘cAæ©ÿ¨IBªí^üÚëþ®ói!5?çiW’4ÌÙã8ˆùÄ@££:aBe8†3"- L¿'dÜ´MQøÙ¡ i¢Ç{ ÌÃå”ÏOðûé©IïÿÿøI$’T«[Õ>ûõõ·²êù©‘¸…x'‚ªÄ0ƒ( ™Ã0Baúa0A¦¨A fÌ&NHv`éÃL˜ç¢C×, ÈÍ“ žv-ê—ÖÒ0õp{¿ý¿·v×>¬$©Ò¨T•BÚýçþ.ùq„Ï4Ï£†Hké† Ý‹0h>-(H6¼a¥“w&íÝ‘»a!¤ðÑpäßB„Tɰ¦v¥*§’¢Ó¥ÿQV·u½öï3ö­{[ ¶±§ 4ÛâaA}^-óÁ,a0š&=}$\7h;&;ä¯.Ð4‰Ã nóåè îí8aMîÂôƒûþ“¢}Ð`›þ¯åGâŒÛ Œž5 „Ýs°ÌÍ‘1V‡ÿXig¾ÂÙu²(ëˆLlSÂbwt²(à騾“ BK#vþñh›‡¡ŠH6Ó{A¦Jîá÷zv·µû÷ »†Ÿ«ÛëÿN¼­³±&VtVß¿ïÒð@Í2[˜Ñ 0i¦DLa|.tξžr*±|'dq„ò£'g"-რC]0ƒcb5iª M‘ÆFæ›ªŠ !ÂmùîÓ%˜Añn½6¿¦ÿKÒ{¯n©[ÿÜzÿUÿˉô©J,'»µA ù+d „ ün3Bé»Â"zw“Š ªv ” !h8†x"% 6azƒeõÍ¢>H"6ö¢˜¦)6‡ ³Ø&ƒ0B" ­ÁV„qÓÛVî¼ÕýâÖþ÷î¿ÃůëUÿ²8ûÔUo¾Ú´î*>K™£LøÓõÕ0MX#LÝQ8º/'vhmE ô\Y1ë_a6Âa4-šq¡·‰ü0˜B"ÿáéqÃa÷ <¿÷ݰ¿~ûÿô÷­åúõ±Ú›kßtšUŠ6Yq¦÷õÖëHº ½=µL»rñ:žh¼î®íîý:O/²úЇ³¶‰FþÄG^ô¬ôa»Ñ:©­éÅ>¿àßïÿLzÖ߯Wz1œ#˜Fm_$ÈÃ$#6QŸf&KYÕ)Q‘SÄ™©á4›'^=þ›ÒéÕúñÿü}'Iýé¼wýÇoz½­éÐO/i¥ŠôÞuòÄA¿k_ý~`?úàýÿý×ßÿ‡þg’L.…‘™O§©>Gv¦ØDp &šd€ä™š y2ãA¾ÂåÜ'­ósª®Ç×ÿìjî¬kõÿÿׇýc§ý~ý{uûí5õ ûøpÿzÚÿ~—u›Wíß^»¿¿·]Ô35ýZM<'@Ï0 vap˜LŽA‹BÖÞÂ@ƒ‹lCOl0ƒ¤œ»èÙd³']Å.Çî–ß—ƒV†¿××ðï^ è/×ûiÿþï}°ºø7k»˜šüÏë_v—ÔÂ}0ªšfæ›9:ë~­&³ýØI4ÓA„ÛOVØM4Á2wm4á! =]–öEvy»žh$Ù(áÑyÚÝ/z¸_÷ÃòBú.,‹L|·^)‹¶•=¸:M=¦ƒ&D&ª«m4Ј´Â 2}Â=}¸5´ÓÐa`ÊÔ ÁB"8†I^ Â:¡ƒA„q†"+wÃ#Þöî­ã~ÿßÿµÿù¨&ÃýeÕΓúý¸~÷moUßÿßÿ¥õþ¿BhÁÕ• ‘¾(ÒTB8ˆˆÓˆˆˆ‰ö½iý¡ý}Öà—ÿíÕÿ^®ÿ÷¹·êÙïÏöCŸ0¬ãR‰ó× Ýv’û‘YïÍÏiýÿÿ}ü¿a C ô0Ó/`™§ô[·Ò[ò€¿ö¥ ÿôýûì"ó‡ÿ3V¾ƒ‹VÓläµ­CT Ž!ùûó >Ï÷m›i§öžazÿÿÙýý|²,qjÖ„V›÷ Ë.›WÅX_«ýŠ*×ßÿôçÕ:‡ºÞéì'¸C ÜT[ w@íX¥iì¾Ã ÃiØNLRiÞÅê¯ZmÕæØ[ýòºš%RaEŠkVó×MЛ_¯Ë¢ûÿù#Eæÿ¿­ó °ª¹>©«aQc¦ú`ˆêÚj6˜ ÓBeÔ8¦/´Ø¨ÚuŠd¡FƒŠM; ítØâï­0ž¬˜à…Öÿ¶õþý¥û_üRÿßuÚŽØ¿ÕmucÞaÓ䈈a0šh0BÂE Â‘Žši„ !0Bê°¬PXí7o¾ÎËæZ$Éòtâ%¹ÑÜÈ•Zÿ­÷ï˜_¿¯uÞþíV›JÁzƒ{AñÅZmSGQejˆˆ0„DD!%‹ ˜4HÚ Ó ’ŒŠ;òPÓOWòÈ0ÎÀ…A¦EDÂh5TÕMVÖ/ïÕ;U ¦D9}ØM†v0A… ›ƵE°B>""""",!ÌZpþšçc~äÜаä¢%!žÓDR¦NÂa4é;³Ì lŒvA…ÿaÅ Óbâ˜]-Y+I†¦ƒÔ„RÄF˜G´´Èrd¶—OÎÊ‘•&µ¯-èÙöÓ9òSC¶¨7OcO„,¶Ô´ƒ¨A„"""HǬEj§zºxú®FØ&NØI²íSØw ¡á‚eŽ Ý¡ˆˆF’À„Df¦´;ÃÝ*ÖmB'G ?šãÈ©g£Æm…Âwè±á¬2éP|DDDD0‡qv«%fvft¸¥Ñ%Î5*ðˆ ‘Q ÓM0§Úa3ÙöMS‡sµµM5»÷Mã´]Nʘ IånìêA”bKµO9ŸdÓA¦xÁOL&œ[%6®˜A§îï᫱´ûºò‹b“Ü?K„Ô¤gb"ŒŽgt… @Á†6`ƒN‚6AM’¤QpæÇ'×»­S× ÷RÊEý¹ŒÑÂ"'­ÏŠ´v.ÇÁ‚ai`á2f0˜BÍ3¡tõ‡é Ðué²y 'Dᆴ´¶Ýíûí;ZT‚+9S‚‚" ²e…—9EÉ“%GôsÎG á…4ÉÃÅ/ ¹7¢ [TðÓ¨A…°ˆžÐ`¦¤H-ŒpšÎ»l'zDí»°ÛéjÿÓíU~ï¥å*h\•’²|D °™ñrròAúÓ“¥oÿWÿ{_ƒöõˉ×ëßkÿºmöŸ`¤ò;sfO/M´Ûï¿ÖôáÛÝ«þŸÿõÑ¡ÿôÓH$N!X¼=¬Ã ¤ƒl¼aÐi„Øã»»Míôð†4 á„è‰ëJ÷zÒnÿ¿Šþ¶½yuÿ÷mnê×zz|kz~ÿ¥ªï~­i¿uí9pŸ_Vêûöº¦æìž$© °©’T(R.òx ÃÕ"pè=‚/ðˆøEÛCÇ¿û¿ÿi.YNÛñþëþÿõŠa¶?µÿî¿÷ýc¿þ;ß_z7i×î«{ë÷ôûÓ׿ÿ¼œWi§AU šJˆAiOB ™'I‚&׿‘_ºxoý°–ÈÌ=òÑ–Ýÿ¯ô:ÿÒâ?÷Ðìým0‰pËäÀcúÿ®ý.ð’T–zÂIP± Ab’ ~‚ÕŠa×ÿÕõWÿø]Øßʃtj;m´¿Šÿ®ýWãòLO4 ÿþÿÁ°öõúñƒýûäGÿûi_Ûgš×g+NÈÿŒ(XÞÓØ´ $’ ‚ÿ'á6ë¯ÿÐÿßè¼OþÕëkñ÷³]·RAþ÷_O…õþ«Î‚¦‘@†þ¿WÈÛÿ"Pÿû $;´âœÇ»M8Ð6*© Ó šaH¯gí4^¯Ð‡¿ÿýw×ï«Õ§Jë¯Øm}¶bÊ+͵ÎÊ7òpQú'Dïÿ¾û¼(8oÿÝwÿÿ½84oÓM0O†B,! b"Óÿ‡UÝoëÜúþ¾–“û×]½U=Üm­¤ŸDDOs%—¹âúJï…{ýô‹Ïíƒè¼†Ã¿oÿ¾fÿ}ÿëhé6ÓA‚¡p ˆˆŠB“ðýéÒ¥ß!U†m-{]~´½#F¶yØKi;NB«!Þ5cw°¤‚3 fyÝŸ™ ŒÐÓï÷úë_ßÿÿ¶),öädÿÿÿßÿë߈´"-‰^%Þ­ÿzÚ®œ6;^×^ÓMí ˆBãM0ša ðš|†‘Å *… áåp³|Ê2rA¡öÿÿöaf;_ºÛë·ý.õ¿&”/¦þ‰ ÿÿŠé§g¢!þ‚Q ÐiÛQIªqP×]k ®j˜A„TƒX„A¯Ñ1ÝI»wA¾v\‰ Â C$ï~üÍßúv·]ê·ûß}íÿ»Ö×¥Öón'¾þùÚlv©§±RÝ&º† ;j˜eÌXI0©¯j™PF]Ä0„WA¹ƒ »ò±›gŸ˜2x—‚í†ÿ´»a5»µM»Ž6TÓû[·­?µ´¶Ó[ø5·ú™ÇÚþZݨ¤Ú öœ2Žƒ3N Ê ŒÐA¡<±i–¡Š8Öõù\Õ#:%šh0žUìC œa_EÞžšßNã´‚9vô¤ÕoM5ûíc½ ;°©ÍÒ¿[Ú^´±âa4CqÄE&ÄqAЈÓÖêÝ]9ŽÁQ®(a´IŒ;‹Ì›3çöš'mªI½ñýÓjÕÃÞá馽`ï[ÞqTÅØ´B`¤0õb›X§´g„BãÛøaˆÚ½qÿæÌ˜#5²`Ba„E˜8²L¨Ba<á¢ã'ÛEçv½÷ëaØa5DŒ0…„"#m‡Úa{ƒ´Ë©’†¬$ìZÚbŸŠ m¬W¹tšE¿ÉŸ/p™˜Dóh3í7a3f–í“xNÑŸ.Ûµpô÷v©¿n«qhDEª Ј†Q€“tÛ šwpx¦º±ƒiRÿ×CMñh˜ôkq¤úÉ»PÞè» '‡I¿äîÉÆlm~®×ý®¢""""""Ð4! Áa„"ÓôÚ´#ÿ%NÕÂÖä­»µÂ[M$놷÷¦ÜUÿüvÖËŠgkˆˆÐ´Ââ"#ýOšá>ûÉßðîôîÒVþ=†¬kß߯·üŠ ø‚þ".MÍT®²Œ4õý¿Ý®Æƒk÷Xû^>“¼?ý¯ÿÞ0¬UBw½9•H¡ÆX&eQ{i‹ÿ‡x~×íjë¯þßþ¯äv¾«-Î,F÷Òú+‚%&Â26îvj2¤apiÕ§íýõ»#ˆ ŠzºÝYOþ¿ýFÿô(¾÷û™Q‚fSÎËÅzü®¢#…ú¯ƒ%·ßÅêÃô)ãò¬&±Gåÿm}{ù…?þÓgýSÎÍ4ôÂ`›™Jƒ[îô0šjXëÃ3ÿ¼þG7òôL§^éUþðmÿõõ¯³­ý§ÃAöçc7\ì‚Îÿ³\ýïâÐý \K>.âç.¾ÐÃýb?/-ú_ø¯ý{×OOb¢ïW¶÷W;¤Ý¾ãÚûÌŒ™8†fOõ(ƒwÿ¥ÇÓÿ”‰õOÿ}~Ï]„W^ý;‡}ïzñ¿”·“EE …£ìã38Lé¨ÙžE:(™™""qjJ ¸ë3k«¯Âsý·ÿ­WëMúݙ魫j±íJÐõ®.î­>?ìÞNy)#†yÊ3‘ 8 ÏtGŠ„Ó4Á>!øúA„G@i„ÓTE‚œÙ”û½9ÚŒãóFAQó5eh,—Ë£HÜu<ƒ³†¡\Ñß„ &jœD։Úփ†G›ÓO¢íî4i6ÛÍa5in–õMu†Ï.îø`è;^ÕŠþ( ln‘»iÁ„$Ç*3ìÕ”òy‚4Ñiá4Ž3^h3æs*2F|ÌÅÍÆ‘³4Nwq«Ê–øôsL É´ÏæiÉÃ(M8! 0†i«á=’¾!ËTNm;Tø† ]¸Ù<#†‰Û“Ë´¤ž¼lUÙ}ÓÒŠc†­¬T0¬pÁ4Ö ¶˜ÙÃV)bšaL:ØB-l'%5Aƒ'ûLò#’ ‹4 Ð~š}„ÐiÉA: ¨\ аˆ§##y¶hh‹@ÌÙ¶|ò&4Ìf\²HË¥A“æhá³C=] D/´Â 9c¸*iuÉ~ôü Û'”O4Û'vݯÚIÝØO^ïM0»k¨i?ðLm4ض¢š R &ïL&šq%DN!“ÊMm ƒ½ÉÃ÷Òwn'§ü^«²ãOï[ÿâ¶Á¿ø°˜U°ƒš: 5àÂ!`ˆè ÄDCBµÅ¢pÛö¼íÆÕž{²PÛt^6šÑ8ï6+0N;Âé¢ošÝ¶²âÅçO y˜J4Ðvƒ šqkôòcëh:' ¤ôÞ¤õ¢xÚ¨IU ‚T’_þûûépþé¯qÞõºŒÌ]†/OˆˆŒÝ6Ä0B"Fõ­’²W Ûº'l5¿ÉókÒ¶ƒ»¤ïAá6ío‡z mC¼»h&Ò ¶Ò$ôl»îÖ©ÙWÎpÈá ›Ž|Ë˲Xȑւú½éÒÿ{¾ô÷í_íþ’ÿÿ¿xV^?¯Ý?@¸m=qÒ…´Ó¥ï_];þÿ·×ÚZ_ãOM+Ó¢1ûI=~ï>ôÝ­Ødq¦8h»mAåå†!økmÚwÿïwõìm}ûë×ÿý$‚I$’T•BA#@íÿë¯ß|½Iƃ‚þ»A¯ÜRo\zúÿè{ÿû¾ñõ¸ ø×ëâ“­þþá£Ô_Mí^Ý;MXÖîÛ¿Oõƒõõ`¬8þ½ßßÙKü‘oÿÿƒÒNI%üø_n±¤îA…ßèGÿuÿµÿã¯Ì ékü:øÿýW_ÿ¿OXdážjûºOOC{ÿúÿãþ1ÁÂý[÷Kéÿ{ÿû·¢y ÿI$Dá$“lŽoòx:'}i¡½í?ÌÂòì¨_Ç·ìñÇ^™qTÿýº¿è?ÿ¿ßÿÿ÷ÿù7:”á½ÿþ™iÓïZÿýë  ÿ_é~’I ’I$«üj¿øö°^¿ÄWäÇ þ¿¿ú__×ÿ×û÷Ì$ÿî×`þëïý¬ Ѓp¿ønµêÆý}¾½¸¥»}þþ¿v›ÖíB $’¾÷֤ʿ'~ÿÿ¡´»_ ÿ-Í2~·ëßúÿÿ~"«þ=¿ÿßüsßûƒÑ<®ý°ÿúÿÞÚÿZ§ö¿õ¯ömÃM8ûô¿þë¾ÿûÿ×ׇÿ¦Xw_~¿´¿ÿ—ÿ'|7úyW‡ÿþÏ_çMõ¿{õïÓC¿Ýïm8i[Ö¶½éÓLqa4µM=?ÿÿÿ³5ÿýw_ë×ýÿþ½ÿÔ!Áÿ}7÷û=jþÝ™öôµ½}m4Ü&š Ò½°›i{OÕS vš 7è2x¡q»NÿÕ½üƺ¯æÕ«a=.ÌÓ[úfçÿþïÿ[þÚõÿÿÿ$'ÿ¯UµÕ=îû9A­ûM=†›´˜Mƒ³Œ&šìjƒŠ5öFö&ÅIÇÕa‚´Ÿ,Áy¯¾“³?]têÇzm„ßéÿÖØm¿[g­/ú_úÿ__MÕ{Zí?L'§ªa6ÕŽÂâÐ`›ý7ðÆÂ„EJM6E€šÓi Áá¨b0™!z“ #´#§¦šn[›&5 CJØé;X`¥ Aç+8þìãµoÛWJþ«ªþÿû[UõÓXh4BC†ÚkÔw«v¶ˆ†„DC Ú !¡`ކ")ö¡„9h;'jšáŠA±Òý¦h6œ ØØãŠMŽÔ ØØâv†WïµõÌÿ»VÏÿ}á&Â}±m2‘I‹i¦š¨dùh[+""")¤¸åQ“r¹5)[]3º¥Å…A”\ÞzhDfµ°½…#tÔî¨;LA¦ÓMÇa?¤ÿö¦š¡Vä-í:¢Ìв7B0ƒ)ᆎˆ†â"#NM©'ÐI*ÊDDDTDEžh0„aa0›v˜A…A“„MØAÕ„Ó¿Øá§tÆÔ"}*©Ä„B"ÐhDFá¯24I¢#KÊßù±DDFY;BtB"""ÿéÚiÛ ®x Hb#‹DF® Á>Õõ½Áj؈‰•Fä±gpƒwvB"!‚ ØÉº¨ÄH:³¿òS†/M{ú©¶žƒ¿ +èDVW)¼“DË"È’†pDG5 Â\ìž.¯øAØA§iEb"7Y.a0ƒ “ ïPC²ðCý1–]_ÎÆ<Û\ê‰Ü8´^sµŒíešâ|R³›?AȾkdÎ*aÌõ‡ªA’É“;>Ú%múZú¹¸‚ç™;\&PFhº>ṃDvêJ;x&˜&˜C+YìÙ…­à˜M0¶‰t?«AµDâg+h îåºIÚS¤SÇ®f¨ÐSB¢ÓBÕß õz“Ý»"$Ћ³!ŒèÊÙ5}=îïNHÛI¯LŒ„–3fH˜FÒOLV3ì&¦b³¤¨„ágŒ&vÚRq˜pß]úó²½½ÃZºçbÚ…¾ïËî“øiWðúÝ7œÉóåXE¸jJx†™¢#°BÌÅß0E™´á—Õ˜ Á Ñ1ñ¢c·tNÂÜ2À‹ÇµüŠ=,:Ó½‡’‚pŸÝÒ»´®µø×­:_O‚ ÔæD70ZAÓ#ä!„N!LzuÚaÂj›¢ï¼ÑOeÑo;MSú·¶øw¯âžßðÓ» ›ïpÕ]ÆŸòyÈ-«äÁ¯Jk 4Ý^/x3 qzN…û/:%' ã'ÞNÚ i&Ù8ºM"pÕ÷eÝ&þž½ÿ­ëùaÒø¿»ëoßö—pAäB:0›˜2tU„üð§4)Ÿ0˜A§xÉ=öšwî ´—ún›Q—‹—ΛiªÒßv‡± è¾þã÷þý¿÷Wë©ÑæßõîF5_ÿŒ:jgÍM=4D¯é'÷‡h6 á}ÝŠ'ŸéÞµëº}Ü_¯ÿººõ´ÿÿÿþ³¬n4#R:Ç£r”ʈNvyléþùƒLÒ6k©Ê<"ŒÙÑ6Œ¯×Ê gÙ‚õMøMb- O]QnÞ˜{#š'v¿½÷«§}[ÿ°E=­‡]câôéÇÛ~¿ÿû¥¯õûþžfb[ ?™˜L'H±Ü^>&m‚ _ôÐi È˜¨…yƒA„ÍÆ' A¦ž™\qÉq憡œ]°Z ¿Ù»'\9¯ÙhKi„éæÍ^ÿþë¿Ö¿ñðv`®¸Ô„/ƒ‘Gÿÿûïÿû¥ßgêõLú¸ºÂ"Ä ðÁPnJ;§h~0ÈãDÜ6Ãh>g¶˜AÚa 0ƒìŠÙÙ&gpž†3LÛ[aµíîí4ôûÓME-¿°o´½?õ¿Rþÿü›œe´/óMuî]]´+ö¿þëÿ|Wí„ÕÛEãDâ˜m“vÕî‹Æww„ÞÜÏ´\5 zmâo ™Bn/}Pi¶pÁÈeFS³µO;.Èþ˜zzË¡o%™ÝÝÚv÷û¾ÛMÆ›þÿUö»\Þ„‡-ɺõ ù!½×x7/_ÿþŠOúû÷׊·÷«Whª U>ßi òwIå÷ÛI÷ Û_' mßEÞ^=Ñ8xM4ðÿïE瓊A¼;NÁßÿÿNïòêNú‡õÓÿ÷ü_ÿýÂåCî“é{þ ê=ûÿ~ÚþcÒì¿a6½ª¿J×ðíwcûû†©ºo~¿ßÿ ôÞ^vÒ÷ß#&ßV©µv»zONËá‡õÿØðúïܾ×_ÿÿ®ÿÖÐ,;·ôÿãû¾h³ioµÓ”iþº¦¯†X¨Nšú½xþ˜ÿ¥ÿßÓß{kí$õ×ôÿ™nøÓïëéÕ½ýAµ×ÿõöEHõûÁ½ã¶¿ÿÿÿÕÛòÕ/Oš¶Ïþrí°®·ÓkM´®â¢šw˜Qñ¯û¬l5!‹_pëL/¿P}cºõë^ýÿû¯Išf¤UQ±_Úÿ~?ƒý_þywÿø…C÷¿ÿþþùŸY˳ªµÿõlõ›VS½³×z ÕÚÄ¡ÝôÇÞ©¡‘Oþëa¸+ßLñþÜ _Ö/âþ“Xím9Ø„C‚ŸaŒ2± K¤ò²KC놽ÁÞýz_} 6ÿ¥äÇzËÑuÿ­û·þ­…ÿsðA·Ýúßk{­­…m8ü'ÓÝ LŽ;<#éGåèåëÿåáHz/+^Ãù1ÍN¿ jTŠ ¯Ö¼q^ºçs—ÎÇɄӸ³@Dpyˆ×¡ëøÿÊ´·ßÿõÞßõMÿõs§¯ÿjÃíSAǬ5µì%§iÃ½Š¤ÅFÐa †œQ¾!‚pÓB0×÷ÿÛ§}.ÿí¿ã¸//ß˯܋yzò'.¹¶AYr2†OÞq¹š4eDri´Ez ˆM—Ad'Vùp ý7·!ßßÿ¢QéÿÿïÕ…¾×séw¿ÐvÕÜT{ *wAÃmé„Â:­§hY@œDGëkÿ¶<7˜ÿ_ÿÿ¿DóÓÿü½„=§˜[6H°ˆ°Ó4å»›,'a—M†\_DÇhôÿýû­¥¾ýZTç]«Þ¯ú÷¿t»‹í;ïƒÂ½5¾Ä%vFýÝ„â"hé“´ÐV—Žßy¦ÌÓÿÚW·®ùíý¿­ÌiwëÿÚ'}8¸™êG­6YÆ»Ä2ãAÕ·¶º®Ðòz„Ý=ÿýTƒ ¯ªöVš¹ðºþcµû?ÙÇeú†&­…µÓPpœXˆa2(öw „ÓA¡h8ˆpÁ4"":Ç~z³Òïa>×NUÎOö~½ªÃ½/½¾Ÿo{ú|0¤ÞCl„è¼~òpö©“Éé.¿õûúßok÷úv±°ÂLköšÇö¶›i&¬>×/§ 'jÄ.¤XVÅkŽÈ®…„DÖÁˆˆ°`­{{`¸N;¦ BQÅÅ Ó¾ö¶ƒ´D˜i¹ƒL&šê·ðÏ~¶ß¯°¨6:j÷lózO»ßÿ¯ÿïMÕl÷Úß­Ú¼B á„Õ4éÂq»Å&œqQ ØÃOA¦A„!ƒ í0„DF!Wf©ŠM7Þ)i‘ÃeBÂv© Øâè©݆4Óî)4V'û8ìÛL.»îžïM/ý½}¯½þ÷¤º¿ ¦Úmœ¬ ì'¨4ÁAÅÕ4Ï ˆtصÓË{0˜A `„JvtñÐím4 õá…A Ða ü^)v#{É:h -ÙÝX¨ ›ØØí{úæ·_­^ÿZ{Öéwßkö4ÛO «°¨4DŒIÉb e Å!a„B8ˆ¸â0ƒE¦z¢""%EM0ƒB"",ˆ8v¾gA„Û´Ó´ÅéúOþïû·U»"8SV×í®ÓµL[ƒ„"Ê´""""""#XhDIüDDDCFaÔ›‚¦0ÉØA„B,ßï¶þµÞÿÿ/MR{k׿‹ /°…ŸÂ b#∈ˆˆˆ´ÿ]4Zýv¿×ßÐÿéËñ ggJúˆúúÿ§õûׯâßß½ñÿÝ;ûßø¬W½Ùš³ ýýoõ¹…Õ¾¿~ýöy¶ Ü2ƒn“o[nå˜[ûBMŠoMmïÛ­ó 3¶·ØØÝ˜PƒcAÁÛvrŽW×&ã¢7¦¸Ù_AñߦšéVÕSõTÚi£7Ð&‡H;bÙÔgfD¤0šé+ä`ËÅ$N‰ld²yÙ•¯« ݦ¬Rh68aW†°Â DBÂ:"ûNíÌ“š‚ Â­ÿ–`~Ó°šz¸'öÝžüa§W§[´"(Ljˆˆ°†J ›õí&žºïáÓè0Ü(a†vš `°ÐŒ"\¬Àôþª.YtfA_¢8~HNøwñŒD3”mi„Éfßw¤‰±lv ÂkðAÚÓpîüÃö…EŠè›ïÿu*Fž»ÓCïÿOµl,· Ò è)˜ˆ2(ÏFË+“ˆÇ•yTXurYûå\•Guƒ8YXD©Ž‘#6_¨¸Áއ¾KKR6¨Íç‘Ñ¢3Œ ̳m4Ó …çtŽÐ5ÓMßR ŒÌ üM˜A“ ƒ\gˆ¡˜3cM0žQ"Š´@Á;0Y†iŒË"yè£:d-úµÒòB$F jžÏ²è9‚‚x"'†N4ÓM ¦‹·4X_éù>×»«˜0ƒ‡ Ã š ± Ð´â2s:ÓOjâa4Aé¦4 ¦‘¶ȵ{R\nB#R>¦b!¡¢pä‡ !´Ã;_ „Í‘qÝ‘Å`“·IºAÙ+}$‹º/™P‰ó4Ûá·p˜h=’z'Æ+#†CMƉ»z«Ah}¨A Ðjš„ 4ØA‚"xôõKbÔ0ƒh»|½†›ùÆÒ/¾øûO¯ã¯Ñ¢3e›"Ö_˜ÿÿÕ=?}°ž¾Ã ü?´÷]³ÖõÝÚ^o‡úÛújÞ•§éÜ0špõí8õmUªvÇf¦´ÅXi¦“ïëß¾äêÚÿá·äÜ!Êv§K¡úá¢Oø¯'Û—…+½þcÕ†mÁ§ÚQK"÷ý6ýl&5û[ 4qú›g»Óµ³Þ· +þ›¸}|#<õm$ë8Û쎂¦›¡ˆv›銊NÝU6˜í·´Ô!Á Ÿ¿ÿëoÿÃ~Ðíç»úõp?µ}¾/vÖõN0ŸÇI¼vƒM 0šiýÚl[¦š†\Î{i Øá„â6.ÒƒÕßu²°y³>Âi„Aâ‚v ±ÞÈí9+v›#tÓA„ÓBG @Ý4 ‹B!„"#þ¾—×ÓØo¯'ŸMó µóõßþíÜ6ÂÞÇ­WÔ·IïØM_éÃA•­‹¶˜¾˜BÖí0‹n˜¦‚²(ö0O˜{¿ n\Š3ñ‚:ö4ÓT 0­Ši§N؈‹‹´ ! £BnÄ83h¸÷ïýì>¿?‡µýÿ~ÿ¾µµi³uvìm§®ÂfÓ³ÂHe *v¨DdžÈÞÂ%(Û„Øi„Ó‡a4פÿ7³dœ] Ó†h,^í˜ ¢S¦T g ˆˆˆˆhDDUÌ+ý÷ûêûìÿÚVà ~{ÓŠOµa§ÆŽÎOTÅÓA‚kÄE¡44B"""‘ÂehÓ8ç…¸™¿$Dk'2CôO`­4^bÐrvôáäâ"""/ïZ¶A„ìã²þÚ¯a+MAÅFÚi„ôö ‹¦l5𠜠Њøˆˆƒ"""#šãÌáb&øA™ÇŒÂ[¸j^B ÒnK(»tÿN‚©¦ÇšÃ Å&ppÁ(ØÂuµ±ÃÚª‰Od­8a0˜üa­ ÇA§Ÿiá?4×Mdí´ÓÓÂ}Ý­¿«ÿ¸jÕ4í1í5 7ŽXé­ÄZ 4 ¢œ°Â ˆ‹MÖ›þEÄ9±ú.ßU5´Mû¿¯õ½ÓÓõée˜s §‡¦A¡šÚ:í;T &è„aŠ DNÅ¡jÁ…»M%O®½;»Âzi·¯ÿýoÿ+„2$)Ù¬v5üe<¤[ â""!7¨â#ˆˆÅâv¨ŽãZê¶êý_èt¿µß†Gëÿ_í’ì(D+#ðÂdXÎÁ“ˆè=¡O²Z“)Ñ&Às²\j-ß¼_ÿÝéý/úãÿ²8žÕ¿¨"Ü –ÄBJ¹0¬íXÂzº‡[I7Éqd6PD‡v¹SiÕ„Ô Nd•÷tÕêïÕþ}-uü°?ôÏkî—kRX“âs» ¤Ü'D°pTÐ~81Ó  Âz†‚\".Òî eJNÿ5ï_ÓÐÿÝ-z¿ñ÷ïDþ™;ÝÒhGahic»^‹Ê£CDݦ» ­¤Á°á7îRaÿÿzKÿÿÿë¯ôñ xmÔCòŸ‘·›¼4eV.Ín÷÷žÛO'út»o!»ÿwäÜôþÿúÿúöý F¬î»®Š¸©ä¤U ûÌ<Áy'Aê#®ýúMëã«~|wÃæƒÿÿëC÷Öc¾úÿ^õ¾Á0ªK„³@‘†heÆÒVp`”‚œg 4ϲqLܨ£ÄÎ9'Ž…£CBÊÐûÿZJýWÉÏÏ ‚¦æ±›3ã'ˆ;Òõ%B«ºHoëý»ªo÷þÛ=6«¶»ƒ ¦ÂÚ!|‰„ÂX†ƒB×*Âp˜M0ƒTàÂa4B¥ü!{g=QpîO&ŸÿÓïèÎÂeÕ`ˆœh20³Ã új„¡nÈ1åO›d™‘¾ÊˆÛ†R>㣪ë÷PØïôª+XaX­; žÆÇ"N!0aÛÍd†Fð‰GM†¡åÞ\QvÑ7‡Eó`4[ÊÊ¿mþäí¥†O¾‰»wk¦¼}zv/pŸV\Âx*'öw.X'„?Ða²PNdY‰Úi™Æ'·I“}õÿìÏûKÂi±TƒV;Ùª3˜VCÌ,"wš€¨ ƒ æÓÂ>‰[IßJèH7NôØa—Ÿá“Wôôïm:A°ë–`Rñÿílµ—ww´ö·|=Bm[y8zï§Ö¨:†]ÉÃB/¿NþÒµm^›mcÚvA¯h4!„ (`×§ ×cT5 $’S@­=7éU¥½˜jžÇu¶Û®>4ý¿Z‚}é—¿þcÜ;Ó¢Nø[Öí+´òqI½RfÍmÝÑpÃè; þŸí-ŠMŠÞ*.¨0„X!…„"#*ê›]äZ½ðâ’Fƾ0tûªz…oºõzÂÿãýýñþ›Øýÿ…ì&±KëkpÕ?/>ªtƒÓXòVƒý1q¢'$‚µÓLŠùà%ƒxÿᇹHŒÿ„±T’PÒ $)"u%B þ¿òpžÿÛå”Ò}@òoúÿêþžŸA¿ãt?Ó»Z·uí»µ´×½m&аƒ ª ƒˆ™Üë‡×ü0ýý°Ñ˜Yu÷þºÖN°jÝwÅ8Dßëæa;r‰±c%1ØI3µ¥ÿ†ÿÐatYãýkékiC#‹]^¿þûÖ¸û¾";BËpB""")¥Mÿ´ð}Q(ïþ‹Ž½ƒwß@éCTI$ ÕÿARò] fA˜M0OMðÉŒÓÿÇîí~¢ÉT°ŒÅøÏË” þê¾G–×ÿ$ÿŠß¿öÐAýµaé?ö¦öÌ×¶t_U烙¨ –‹äõ…}Ô…áÃ^jÒÿÞˆáßšÿÅÁmBmŒº‡ßÿþ½ë­õöïüöþë®›fåIÛ3ÞÜã çmsþÅ´mxL;úwK§ »Â¦ •$‚I$îÒ¸äVÎ Ÿ¿ÿÍGú¶ ¥ú ÒàôXå;ÿý맯ý9Qÿa]~¿MSôÓ¶-ˆõ‘G„Ó­‚PÁP6Ðl¤W›4ݘ ðÄ6:“]S êçcÂãå-&gfÌð×ýÿ¥þ‹ËÇóØh.®…¯¿ÿå§~ÿãïV8iYË\ÂË馺w¦‡a¦ÆƒV£bƒZllR‚ W ¸`¼CpÁ4ÐV“'2)•Ê®JŒñ¢[ 4ï𳨿WþßépëûèG×Á×ÿß¼/þŸúÆÆÚLq¦Å&›߆H éņ ¡ &a4"Ö"ƒí¯fÄgŽ$bóOA‰ƒ:É„ ù›fØDs"±êe“¢Ï'•0ˆI’ ¸§AB\[‡Ú§ ioº½~cÿßÕ³9r%½Ÿÿûû!ïoß÷é¦+馚Ј‹%ˆDHÞ ÊØ@˜EIáC&ÃÑ Íhœ…ÄYâY@R4)‚ .@úžeÆ3Äp0fÈç„CvN&; ' Úßæq§k~¦Ú ÿOÞ¶Ï­´í2醻ۭ¾×÷ÿ1ö¿½˜pšz¡Ç E¦ÂIÃ$:’·²Q §¦(ljÓuÒ„s&ðwÒ ´íj¸h?l%}„A±”áÁÈÇû ÚcA…ئÓAºú¶ìó«ÒÕ>û^"jA‚h0}Ëê/›µ´¦^0íÑ7ƒM#~ÑxÝù+'— žT6Ô Ú%J·ñýºáƒJÅ1LRÞÿeͧØÂvìŽBö˜°ƒŠ6 ÛTÓcÕ¾4ؽ~""õ}¸»SôðƒÓ °×.õõÓ»´íµá?X¤’ $›m_„4Âi¦xa3Ž œ4m«Û ÍU‡›˜M&Û{XA±Ta“†ƒ §ÇOzq: ÿß\wúj¿±ÿ§ýwð”B ˆ†ˆˆˆˆ¸0B4-4šˆˆ†Ò »M>Ó[M4ž¶Y®×ÞB‚¿¿¯wÆgécÿúäãX׿ ¡ÿÄF„n„DCDDÔƒ4# §jrÐÿ]¥ÿýµldêk­÷ÿÑðü°úøU]w°“ˆˆˆˆŽònƒ)ÚÿâEt_{½÷Šd~‚ûÒ¿ÿh¯Õ¯Eâþé­¡³µ¬ìI¼·"J§d"ÿôÒÖ¿ø^“·ß¯þ‚ÿô¼Çm¬Œë2ÈŠá;æE#½ü&ט_ÿúþ-6gÿzïÝ¿Ÿó ÛÂh}Úh8† ¹NGz‡.œ3-v%#ºÖv·¿Ã½8Wý¯4[¯úÚŸÞÂÚ­œli÷ëéÆÃ0va N)6EÑŠ©4«U%b8PƒÉs*fMع™½]£!?"\8}ÃUçaV†;a4ìpÐiö©ÈBÅpjÇaši„Ó ± ئ!È@ÛGFa ÕÑc aN& © ÖÓ §È)“ÆÙ£ÊMîøŒÏÎê3ÑÂ" ®çšv 5M5NÝ…Ò™+|5M8{" ÂhE a0„b¶„4Ðîòñ¬$\9­¹)Ãíi'™B b}œÎÆR>)ã7 4Í…ÐÞ¿æC‰3†š½„^Å5"½Zÿjè4h6Bg!;BÎ:Á4"""Ö¤ ¥Y›_“&ôØvV©´œ0®ƒNYd’ $o;"¨Õ; ¦šH;A§n‹¿%š#^ù¼ÐólÑ•8ô}˜ó¤V#ÍÁL&+h¸¤fð× ¡'ÄX!²&”B4 ˆˆˆˆŽ™ó0`ˆ¾\°üü@Áæ  S8Á ÔgUEª*þ'V–$¢qÍaj32>hD.A$ÆHÎ333ä|ÎAž5FŒ»±nè¼¢î´_7}½ ÌŠHޱ ‚"œ¦GŽèg 31a0œ‚Jˆ&¨Z..íSt/âÂEóM!ÑâÂ&8qz-A Ð†ƒ²äˆ#>³HŽ~’fW75Êw¨S„˜AŶ… Ó8µ $qéÂK— „‚ARMàÝn×üËòsÁ „Âh4,&¶›iǯՄÓþFô›v¿wë§O¸A’}Ù8"Û×dú‰>-m´^X‹A„4Üx‡]gAÅ„Bx’9 "¸ž‚GIŠN.pj\¹¯/ºa—Œ3¼ÉÀqlžCîotÇwwk×ßñêw–™<˜M¦šz4SC‹w’vêîÐwDÝÓO Òv¶štƇ®<0NÕÜxû Aäò“l¿tÛ$ä[¢wDî‹Êè˜ï½Û ž;Pƒ5iÄ4 ƒ½‹4QJö¥ãÝé½¶NîÛMB­ÃM(Úý*I $’IB ¾Fªvž·-òíá ï.í;[Tö«í½Gƒúö‡ê¯z¿§IývƒMÓÓ¤Ø"¥ ¥N Ç/šqaÙ¹²‰Ã“ºÉãOn­Ú§w¿a=ßv¿­=ZQ¿š’ú”ñèó>8лӎN&>›ßÑvÑúvžŸ§·÷Ûw­ÿéX|0Zýåáãý½ní75Mtú§‹}7µ[Ö‹ÆS²æí:º á>ôÜöø8Ý%MÇúîÖ=†|&ÞÚȃ¥äê’þ*i­ß5ôž_ÿx'¦úÿ_ë»_þòp’‹za¿ø¿õÿ¯[Øÿ;’Oû_ûÝ&è5Mºöý¨}ƒ—ã¯òbûýÖE…ƒaðRõ[T‹¿éÝ'3¶Dî­¢ïWW]{U¥ý¯ÿuÿ®ÿ·¨Pจú×õÿÿë|´Ÿ'Öú¾÷ÿÿ\N˜Z×c†èÎu“sS¥¸!Õ~ß5pn íÐ!ïô¿Ú­мï^þ¾ÿÿýúýþ«ÓïRî/ûÿõÿÿ÷×_–%Ìï¯ï_cÿbxþÛ‡Õõ„N?ý¥å:ý&ïÝ×þímÓ»nÖôõÿcÚÿïÿmÿ©W½ûðؤî‚×ÿÿÿ¿ÿÐOßÒþöÿ,Æ÷©0ÿÔááíŠÿ6­h?¯õm ë]ä<ÙùvÇÝÝïÿx¯¿ÓJ«ýöÿöþÿoÕ÷vGZŸM×ïÿëþ¿×WúOîI‰ÿÿÿ×ú0¢ÿÁ´ut뻿×ýv;8Óƒ Âu0ƒ¶("ØA‚awÚïºÓ]5ûVÿ÷_Þÿx†°õ~“±¥¦ê{ßÝuýuoÿÖÏ]ÿögÙ§zN¿kæ?¿ÿ¿¼7ðÕIØf 0±„ݧh4Lh‰Âí¬ ÚÛ·ºi ÃßãÇHøFãÿö®¨_áïý'Ö¿ºÿÿî¾ê¿®¶¨·j®›Az¯vÙûþBùu»=ûxwãwbjöÃbÂi Õ=„œ™:Õ#R!Á˜ÀB"úXÂúZy1ëý¯»wïîØôûÿïå¡ëû¥_½4Ø0¶¥iFŸ~ÃV:c@ì+k¦œRkkݧìäØOAÆnqà Pa2Ë£L7iÓ)" ÂÍRqÞP aÕraùzim¡¯X¯PÛÚ¯ÿwÿÚVžž©°Õ4ÓA‚ 4ÓbPᦛÖ pض´wAX¨¦‚iïi±¦ „Nö8 ƒN¯ÄDDDH”gˆ‹ˆŒS#åÁóè(nþ¿í,7ûÓÕááÅ}·¯ûO^òËÆA?@ÐlBM6 ÓOa4þÖ+öÈ£¶¢ƒJi¥iœ¶‚üÝvŸ©Eb#L…–­Å!. ßïÿÖr}õëö÷þÛ¯QqÝámÌ£Ó ÓNÕ4Ј‡Є„ÁÁ§i Â ' !`ƒN#B,Ë*iøi„OŠŸ[´EüPœ?¯i[Ùÿ[[ûûóÛOþtDu¾¶»²(ýnµÄCB"""8ˆˆˆˆ°„DA„&XèDE_YN Do҇׆q·mœvza‚pÓ¾íp“¦ïë¶Î4/ÓV+ÚhN¾ù-Íž*""7T¢?û8ÆI66 Ž6*.76v*“L&šø ÕŽß¾hDDC9ؼvëÙ0a4œs[ôí„äA1HL[MdíGLlC¯ ÂŠi¦Ð:z ÂÕ_Õú Ѝ|;L[m4#¤a†0„DDA‘¼ŠÆ•‹B-ƒˆ~žn ˆü~4‹ælÄf,0›gÅ`š;ªâ,@§©öpÔDEÔ”ý•¯íM4-;M9v÷²ºLKxB#ÄS)­Zï)ÿLé-è˜þÑoi-ï³"‚ Æ Vv/ð¯^/™f¥„Ôº¼ߦÝéáoù«&™¤Ÿ’NÓ; 2´d1å’§Aƒ)Й$Gùý)ØŒìD™ý<ñqŧTÒ ÿvªÿMWuV[LÑì› Ö ˆAØOIòe*•SLÌ´í‚“‡oý¿×ÿúï0ýÝÝ4MÚ#8zw)1;R [š³³!T;ä`Ô S†h)œg; Éò9©-4Eœø3l"%ÞÕÕ>ë·¯¿ÿ_îþÿ‡¤^:mŸ”¼'‚ ìÔÂedÎæÎălì€]ÃX ä[6á„ÓA„ÓO0F™†lŽA¡jU„ „æŠjƒMö-=ú§—oýÿW·ÿ¯wu}ô[¼ì´È‘ÄejÕ´ÈË!_táú%A§h“ÝEÝ EÃBÓÂhÑD ˆMŠN‰Ûcš>ËŠ'wý-úíÚ¿ÿü]H¦¯ýw¢íÐ}tëwdñ+ÌÌìQ¸=o´ìmÊ÷ jƒaÞƒV®ísgwEÝ/zvFîƒNûPŸznž›¿üaÿû«™ gdgHŒ^C‰Ú~q’8¼¤õúu÷D—ÿ‘¤r'w|F·mÃM¥§»´4¶•ºOö,ÝÜ2âÓI7ˆf }ºnÅ.uÇþ¿÷ÿØoßãæJ$ÍE i“¤ÉÿAª§„ÂjdèäNd7æã2>šûïv×%(ŠkápšawS²‰_uåFw”d^Øj»"÷îÖ½¥_˜°õûkÕy‰Êœ`Í$Í 4h;T-T&ši¦Ÿ¢ÝïéÆžšhq~â—ÿþºà„ 4! `ƒí´nóFPFÈ.`0A¡iè„Á ÐKIù X’Þ7«A‚vsA¼Œ kÿï°ü R{`ØÏˆÃÕi‘?¾G×û–:]×Áý5gÚ &¹ÓM;4íoo´îHxEÃ} ÃýIÛ–û^Ú}¿ü«J¨„Ái´›Iîëd@Ô ×4«¢pÃ-KiØI† 'Dݦlýy;ˈeñ<µØDݲWÁ½jýzàÝgÂí«.·°åŽdCýmúÐÓý¶â߇ÿ¼Ci‘Ö`‚.õßEÃÞL}踠žŸþ·mªÒnNîè¸rí¬ž^¬%¿îtTÍ™<}šPRvÑy "xØRíîסH›‡¸]‚EÃdÞ‚w žQ8lUÞ®ƒry²ä÷á§IöŸô›h>“ôëëöèÝú ẉäè÷ðo_Þÿï¥'Ã{zkíÓ›'mû}Òwt wIºÕ½å¿Vÿ¯zo÷K—7¥ÿ‘c(ÌãFHN2‚áé«a­Sîð¶·ñ§Z°× NíPw}½¦›¦ê¶ÿm¦Ãöëß½÷wô•~µm.Žnü-n°ÞÖ{w¯%ÿÖ«·^eëI0žÛ'”M ¢íÓ»¢í´Ó¤Þûnÿß·¤ýÚkt¿w§Ý^›ô/ÿÊ|öƒ Ðz =;]¸pIßz¿¿ÿÑ!û»¢óVë{Uÿï7¿þŸÙ;vé÷÷ãÿjæ×{ Ým®¨;MRV˜«!ÍeB{ôë_#KÓîÞE€Ólýö@íub­v·„ô‰ÛI½¼ißýû}öþŸ}úoÿýn®ŸÞ[ÿí4û ¢ßèuŸ½5I¿ÿ½‹¿ðƒ¯ÿM%ô>«Ò_q¿ÿÓ÷Mšÿ÷^öàíSl$ÆqL0N!ÒéÚíœw¨AöqéÆÚÝœÐ{¶q¦ÖÁ‚îÅ'SMjû^ý¯}'Òë÷iÇëïkÿõö÷Úÿïßþ¼·}K~EÓxjƒ{°^ý÷¯úNÓÿ÷×§úúî·]ûïÇ­ÝÿšßlóŒ"‚Ÿ (˜vЧlXD@ìqR*pÕŽ!´Å*i¡è8Â{Aœ‹Ð5%M÷ÿ¯õißî«?«_ŠO¯ÿkÞ?îùPbÿýôû¤ß~ô¯÷Õ¯ìú×ýÇ_þÓ ×ÿruT¬ÿÿ»è¼¿ýáâ!¦ƒ@ÌT»#ŠtÂiئ™ a0¡ªm2D ÔˆˆaˆˆŽÿ]‘įëÿa¬x®ÿÿüØ"Ÿ—¿ºvÿ÷×kÛý/úzßÇý²yþÿ×ãÿþLt½='×ÿ×_îþ‚{Ïî""""$ðˆ¹Á–¤èÃ+ÑI†O4‚õÝWãþE ­{´Ñ7/ÿ_¿ïôëÇÿîÿû·M·_¿½ÿÿãõ…ÿ÷ÿúëëþ‡ÞÕ{õýýÿÓM?ô""""#?Óü°?Á=zéÛÐþ¿ÿ×. º [—?Ûù©oÿýuõjßãÿý/}?þ$í]Ý.ù:¿õÿÅõëö®}zkkß~¾øaëÔWëG³Òÿ_ÿëãüžˆítÿÿuw÷{ÿÿÿ4_ÿZ_“á[ÿ¯ÿÿõ­/ÿOì'ªÛTÓöµóØÿßïv–šwÛn¾«×ÿkµõñI'ýþ×w­ßÿÿ§ÿßÿߦ‰¿â¿u×ÿûsJ¿_ÓÓÓŠTÓ¡{Õ{ ÓAÃýÌí+lã¥m&[÷?çÿö\Ú»ÿ»þš Â_^6G¾­~?û(ÿÿý¥¾{Úß·oûÿÏÕººéÖ¤àííÚ 0môê:a4ä(I…iÁ‚q@źllCôàÂll0–ÃMØPªÚ¶yÚ¯™«õtÒÿþÅkÿþ|/ýæÿêßõWÿ¼ÂÕ°°Âéé]~ªô5L a´k %AƘMŠ­…A0‘Âc0Å4Ä @؆qJƘN8«lãl'§ *š~®¦îš ¡ïɹà#ç\½?ógßï³éïÿîÁ/õ¯æ;M´®û¼ó6ìliªð„CCDGk5ŒðîÁM€„BÁˆ5´Â 0ß !­‚ PA±ÆÄ8ªö)ë¤ÿn¨E/¯ý/ÿ{tÓc½ëÚèm ØÂ-m†꽦¶¼DUqSFÂ: Ë°B!„""L• ÂnPë‰í5iZÿõI?ÿýõkü5½‡všmo´ØÏ´Ý†› «â™‡NM84B6›^ÃqLDDDA‚5&JÁ Ã?¨a:A±U÷Ö·ÿ­yµÕ‘ôÓcØ…ÁÚ´ Y{äQéªu  !q„D0B"=¶ AˆˆŠ DCM5öö×lõúýæ-[J4Õ¦šÝñ!í¶™ƒB" ·ø1AС  :lwM„î '#ÊÁ­¥SÕ0O´àÐÃ.âDñˆˆˆ49h;0e@Ìd³l•ì¶£B0ÅSŦÓ Âm°ã ÓB"""1„rËglP¨_šò:90˜–à„"S¥°Ó´ÉZeƒÉBt˜ ÑþœG¹gz„Õ"SáSЈüñ$v¬fBbžxƒ"""",!‡iýv­ù}ýÃÚdQ9S7OYJÌÀR nW©†3µ–F³ˆ…­¦š¯H=rvNm°Ö¡ ˜;öÉ>w£2³2¨9HAùÚ“$à™$±mJ°{Úk궉>¨kuNürn)­‚êºnƒa4 ¹ÃVùR÷÷DÇÿÿ´h0ƒƒúÎÖc9 ÓLŠFˆ¢4 ¾Pg̓Lû6Ï$Y¡dƒ;HÜ&må@§f È()ôG=\9Ô*˜ žûµ»`ÐiÝ¿Ü;]/ýH’ñL']^A³LŒÊ¬©Áìaˆí Ó| ÛM ÁÝ¢nÁ á„ –‘vt †lf`êa”#WC=™W‰q æ{µïpûCM.oÿºv·vš|:íù ÉÚ„Œ½eÛkÌ0šfðA‘¦l{­ÈÝ„ÛU–ítØ•Õ7ÓöI… žf º ˆg3ƒv@¦†Kœ» ¡xi„Ó‡Òu÷ïÜÏ#äU} »ù+ô²'ùïÒÑ>ÑwKa|XNÕ5õÑqv{i….Mü›è>ÂwÛDž‹· ]´-‘ v¡åÜ2Þš ÈÃ3'˜á„Ö]±œ”·7äðÂiÚÜ'«½ÿèYC8g‡OÿÕû5Á>û[Fw2¶GûÛþíôþ©éÞ´]·¤žŸÐM½Õ;ü tœ5á…pƒËëá÷—nljá½ àä¤çÚvƒ!Œ aÝ­ýr(d¬RvS ©‚$EפƒÓCÎÀâ%‰sgêH”¡›?ψ© q¢ï-Ý(7±]oòá¢îØmŽÕwÿ¤ýV¿Ó×ø×ýµM†\ZVÿi&Õïs³Xùçm»÷f*ÙÄ0™× ¢íôùT3l‡*0ET ó‹?ÏÂÿ "ð7«Ês#‘£!™VÓTÂD’ÂÛø"dÇ?¤ÂdèŽüSÞ÷½&éÚ§Ø5÷ÿMý6û_þد]k¯ê×_¯ï·ôÿÐÓí»¶OÌgÚ 6ÁN‡ïïþNdî‰Ã6xP`’ ýW*Œ†<Š a0áôÂyüÙ¨M=‚µÒMW²8$Wm4‹åqa3Òl]Å‚N´/“Û#Š…í¢pÝØ&^;]ÓM-íÿjtºôõïµßþß_~Ÿþ:ÿý¯ÿv¿^0„EÄ@ÌÑÌ0¾ÛåŽöÚi¸O ÚûJO’ì& ¨ZQi‡ ¨¸¢pÝ0ÔžQ8j’'mÚâ–Ø[ò1á5Sé’Š»$ì0H”S½Q±ªtÛœhpé¿j½úñëÃ{_fa>¿ÅwÔjýwé‘Ä×ÿëøÿÇãþÖ£ŽûA¦›%d±Ë°î?öÂß÷I°ÉÅ4>Ÿàš ¢C¶Iè()+¢vøºAÜózéâ©Ýªäìㇶë]4Ò' &åô;@ÛPƒríÿ·6P=ëä-»O½ëaaÿ‘1TW×ÿ¿ÿá‘°Ÿ`Š{xÇ\Wþt òÿT¿„¾µt\98Ím¦¿Eãú÷Å¿¿‡n§ë¤I1ØP‰Ü"ñ$U4Ü¿ûtØtÑôÞ¿oõï'®E´íÐDá†ÐOô7u}ézþÿÿãý}?¯µ÷þEíÛ¿ý߿à ºý/ÿý0ZhX?ÿãî<$’I%Iwÿ§â’ $’I ’I(B©¡‹s¤F‚þE ¯ÿ·Ä·Õ7ߣk­k–Sz§ ÂýÛÞ»üÚÿûõ_ýRû·õë×õ×öG?ÿ}–UlÿÔïðKÿ^+Ûÿõÿn»ý÷KUã¯õÿêB:Ž:<7 *9$ÒI$’T”D’´—»~µ´û_öñ¬æþÁïÿO0¿ÿÿ÷ûüÑ*¥ak†´¿à¯uk¯}õØ_¾þÿù ¿ÿ'W :_þXžåÌ/#gÿéZI$’. :I$KúöÌQ|7¤jòÿÆ©²Dú¤’A,.’’I ’I(puëá[ÌÕŸéÛÿïíöÏûözµ¹>g¶›ý…Æ+×ü×ÿßí¿äð_ßð¿ûõ¨?õþþ.’õé]oýýÒA/é&«ë×ï×Õoì÷ôõpÂLqM{ïéPT• PTŒð–. (I#òA$ë[´îì/¥¶¯ÝÜ>× ¿Rç“ïëзæ’õ×ÝŸöö­°‡¿¢y÷_ÿ{ׯ×íúó5«j÷ëßÿé$’J’VÿÕ=ûW1þìwÙ~Ò„*ƒ_§Ã6kg›ì>Ö-›j°ØkAì28ÐiÅ!AcP’)$ÐHT`© l0°ÂMuCÿåfÿÿÎZ« yŸÂ?ýz¿3«ûìÂÚoÈý}—ÓÛþÒšV˜A Èá!­C ýúÿ¿êþ‘I$I-ýt°ŸØ_â£b–ƒA„Y4l0]«n0ȯÚSciB)v©=‹p›WaZz¥BRII$’I$’F¸%úu[­Ý¬}¦¬½oÃþ½kÝúzx¹ù>ݵî=;8Õ¶ÄÙ>ê"‚ A S±÷«®¾a^Ý4Ùëû´Â¨KA&”\Rkínò¦™V„GOM…Å> Û3„ !kÚ !M„ÓÓ†eêFé…3©+ÔÝ4šiÿÿ½$ŠH$’ *$˜I(AT !œsÒúëÖö×OUMµŠ³E *}„›JÓíXÂ!l6 é8¬-Rk:dcôÛ?Ùë«´Ó¿ï³á…¿°§öˆR+„’IB`¡"#²ÉØ@Ðan-‹L¥ @Á‹B Â…0çˆ0•Z!ÀЊAÄ4O­ßÛé_ÖéZZû=`“ciÞëÿwkI˜Ž“ŠM×M+Né†A–­4¢8AÃ#“`¬0AÄ0˜L ØÕ8ßb­sj=X¸0“L&B""8ˆˆ2™Âñ×Ϧýmzý0›{Å;ˆŽÕ°©öºPi1H±Ý†Fíý¡@Ú´ &d‰¬DDOK«« Œt¯ím{QZl—!iâƒE¤„qëL%g«NÎIݲ(û=z§„âºvµŠL íXØÚÝ‘»hC  Â`¬DDDDZM,XA„Јˆ´Ð‹ Ú EˆežßgPØØVÕ†L*qL~°õp bÁXA‡¶A¡A„""%^1ä§ !DGhE(&66*ú'¤ °•ì˜aã@Ê8¹¡Јµˆµ–…œNÔ}5TÓ(ša[tn"±:#‹rl¯%‚«gf² ŠIâ Áˆ0‚éD}Iq ^TI‘`E$˜P¤`Î ž""пRÊK#¾{„Âa:ð•Ý»â“TÂ"l¯H=pÈöè#8M4ö¢Kj ®¥„-;ù½ëA¯kíIó²\&dkA eDˆÇ´ý¤æ“Ì=}~´¾Šª'‚ga˜&Ó@ŒÍ·ýÿs´¼ö}“OȾlŠ2¡kþR#DpŽD¡¹naÔ‹±(Â`ž´š§ÓÖõý($Cd®9š"<˜M2´""”H6M2è¢ ÑÁSȃÉß“Œf §²M.HZÄ( §öþ‰úÒ}ÿò4üœ`‚ 4B išga< ~„4v¨70HúðÌ œ""@É«u¦¾¬kõù­Ÿgón»Ò³âÍŠ Âh8Ódn- — Ý8fÎãúBÓ‘ÑÞŸM=ª ˜ ÓiI£)Ô`œ4â\Å«ÜÁ&¡54l×ÒÑ1ÃZ DÝ„Ñw‘DîÐdòªá–WDâÑod‡ì0¹žJd\?EÛ ÕgdV8a3ì ƒŽ*vŸªsºTö›ÜXNÂydW»àÁi èœ=¦KÐy8Ðl4ôõ\ѧ­'õÚ~KÊA½&ý'}öNø}Rt\5î,)¤°Óÿòh!(D¡›#HÐÔèÍx&«•LÙ"¢1{L“µÉ²Æ·¡û×Á5è'^…ýßk÷zvºj^Ú¿OW[ßî—‡¦éºÈÂ3g#1}°D/m¹yd¡†Î;_!cM3Œá´,@Ï„<`šˆ… Ï œÏ3m4×’îÓRíÉÃÌ®;D™-;}¾´¾µõ§ýˆû°¯Åñ×ý¿~¶ïK¦Þ÷õÔ‚£+G³3ÌAÚaH³iå½ é[AôóÈ›e™—ðÐi¦ï´š‰¸aTPjšh\ÑJ=xzÐN¥9‰ ©éïËÂá¯},}¨½l.¤4+õÅ]vºÝþëý~ëú‘F ò9XÛ8D90œ]†ô[ëè:»Ó¿úÍ3¡ØA¦¸yòÄ^Éc5°ÂEÜ2o ØdË(œ=½’½>®þ*¿…$¤ŸéÞù\fG¼Cxÿk~,±Öt ûJ¯Ó>/Ÿ0½×Çÿÿtÿ×ý:¦˜@ÌØNM4„z.ûÐwëv ¿Þ¶• Øb4Nwb˲;aÚwÁÚÃn¥IÝÃNC_ûÓﴪ™PLæ[û×Ç“„èm 0“þ ZËwï":ÿ×¹O_Û_ÿF{ƒMmâÂl”o'Ž›ý×ñk×T¶þ‰»E½dí¤Û­øiÝÿß·ÝÝÚ®ÇõÕkðïNýóµ3¿Ü«]†oÿîÿy i®n|ÌSBA¦±®ž›½„ûý:ÚO{}wgŸý§o§¦ÿjƒí=¿û?­ÿjÖŸ}ÿª^«ß_ßÿÃýµÿþþ:_úý‡úûWåÕþÁü¾ÿõÌÑVô`‰Ä? |Ã#YÈ4B+"B Ì!ÓôÁ¿scdcÑyÑpÞ·jì}Wõ÷ÿ?ºî©§ßI› ­­ª ;c½†„‡ª·ú§¢¿vÚúÖ][éRç­Rû‘‡aþýÿý±Âì/ÔÌ'áº^«ÁÿýÑ'÷á¶É·îÛߢdÝ“‡n!¨O+A„ ¦fQh›°C#MÑ£»µ/«°ŸnOêÝpëô¿³‹·öÓc@á§_ŒâÛ 4ÓO†›l Â½Úl?øÐ‘øŠ¿ý¯ù«†ïPo÷_èNôF?è?ÿNßïú wÜ=¦ëi§g»Ï_-`´N}ê.-l2Òá$;§ ?t]¿jºw¯i~¬Ž—Ø}ö`"ûh5mm8ébþíY*Ûé‹ïi4Úv*´õi„ïü;ü¸Xn¿…¿×‡¯<ƒÿÿü/þ'ß>ŸÖ¯SÛý_Ù"§UÔݺ§qhªzorq ¿—Úáè7'’¶“o´‹·oMpÖÿÖñ¬Xïô!4ã´E±m²8ˆ‹Bì†!Háƒ(r¢Ï Úý¡ xiÚ5ï_¾Hlxý/Ë×ÿáûTÿ»ISíh¾ÿð¯ôý÷¦ù³ÿivµ¾½ðÁ+VE§§iôÛ‡—t¯}ßw¯Æ¯~‘}EÛÔkÿóö¶ù1þÃÚá+G'\+%vƒ Á0ƒBB  ƒB"",ûÔ!á‚F›þ²yëm±ß¯þÌÖQ}¯æ5MŠ §¯¯ÿ×ÖÖýUSµûM¿l%{]Ý«ŸAªt×}þÒ¿»¾ôÝ>ß '¬uéøk¾—ÚUWP™Ç Ãþ,èA¦Ž—ÚhDE”ለˆ¤ÿç*ý¶àÚ®ô–Òa„Ó¿‹‡öƒV›ööªÝ×úi„P_M4qÆÆ±A ÅaB 4ÂqA„á‚©„þï_ý½êßÿûû}jûeÅ¿øLä4^-\\DDDDDFÿµ^ûú´öÌ×w´¶G Š´ªbš¤ðŸyëTÓ´Ó ›ªh4µµM(h&Ói¯†Dªb-t?ÿÿúî÷~Ãۼ߷n)í{Åq—[Jü¨MÞ`ö+¿ýSlöۭ݄Ӵéî2%b-F"# è6Õƒ[X{†Ck¸ˆšMÁ„á„Éý¡e@B?ªõþµ½¥ÿ¾ßùÀÿ—\7_±þƒ}+ÚÐnºH4éúz±ßš ‚$0ÒâÕ6¹{VÓ#xˆ´B"""" â""¾P'_õþÅë†ýôNýø6í¿¿¿Mÿ¶»–bÚ#ž›­BiìW¦µ¸0„"=5„"Ðv¥Ž„DI„GÄDj¬ð'¯ï÷³ë÷üþù:áûb½³ûÙÖ·†nøi1 Q]ŠÙž!Ú}„"<Јã„èQcòw{oIÔÿoïûÚÎOmþÚjÃ0i¶{¦8a8Ý÷š#‹Zƒ4¨â8ߤÿçýÕµÿþ²cÖ¿îöÏû¦›"Lw v“¦ˆió±+aˆˆk¿U¯ªm—Öõ¥<Í¥]]suÒk­­„í[ ü4ÚL5±Y¬éÄk â5¥O]{N4Õµ†bOºí„£µµŠ†­§™¥Ž7® ƒíˆùØ5©d,{jÁݦ¬[Õ¬T] õX®6Ò˜uâÛ Âj¼pÁ vúÐbí²1Úi¾ Ð`ˆé‘Â[Nöš¨¡ &JÛÆ$ì=…GWwäÓÅÚv™; ÄDDEq°Áˆ†ˆh2bHE/÷‘QŠxhDD^œDDC—µ–æÖç@¡`ÎãWŠY ›gPÊ{Î55Åtd¨ÂkïTü,qh0˜@ÏÈ5Âze~' Óû׆º Q6UŽÀÙ2‰Äh±ÚˆLáSEÛ^Ð8âÈÍ–¦tÉAÒÞ¬ãôaà³[KÌ‹[˜"A«Êt/B[³°ÓŒðJ\4é§I¶_C5xhȺ¥ö‘Ù®xÎ/ϳ Ï3ƒ‹òWrPÈ›8Í<›ª2žUÕÕ-ÚûÿÅ÷­H“$A®š  Ä4Ñ'i»õ9•pSäh0˜TDh(er¨“E¦öûƒÓÿýYIœ‰š=žj ëú;²Âh?¦ÓMbUè:/Œß³ïƒ0@†5ÝGeôÓ¿t¿~ÿéÿ÷MH#DrL&“™£6j@ŸþõŦÓÕ˜·7Y<·OÿU öš­4è»Þ»N׿¿÷W~ývt;°ƒÓ>*h ÓDN!T{õÙ}EåÚ¦ƒM÷TýÓÿbùwi¯oÝßsšyÿÿÿûväÇmÚl”ÞØ¶ "݆L_ÓÓu}ÿ¤îÿýn°û&ùyÛÚ÷ÖŸÉRï ‡Ñ8h8Á¿êÿÿ÷lô‚vÞÚ 6‹†Éä=m÷®ßOzÕv%Ó¨_®×ž’ºÛ_ëôóq“µN-=´ýÿ_½û÷t^?è6ï·½»ÿºvîÿQ«ÿßþ¿^íT‹~v“9dm…ÂdŸ;jÌ'ØRò+÷ïÿçþ–íWþõmoÿ S[ã¶ë{”ÿ³Tÿÿ½oê e\™25Æb•1‘¯(³A“ ã• [Úÿ›·^íµÝ³ë¾;NïÞú5Jãÿß|t¼k«qzw®ÿüRoõþ¯üœ_þÐÿñ;Ã9Ѧ#ëÿÿéWßJ«ûý­‚j«Lk×ëÒï¶tÿë‡íþ©ëÃ{¤=+§wþˉþ _ôÊO¾""ûïÞÿë¯é;¶·Zj¬Ri©8ÚÓïþýÐyƺõ¶í~ûf× Ž/ìë!G a‘ÿU´¾+ýŽ¿ãû0Èÿyÿµ´Øk÷ý¥¤5 Åzkµ{M0ƒpƒ]4ä?4éC}ÿßêú|W»n“×þÇòëÿÿÿãúa6§g$Âa Å}˜M¤šm«ªµMSúaˆŒ'ªašpØ· &ª©ÿa¿ÿ·\ºú†÷ªyì±Âúÿ_|ǯv–MÁl&Ʊpïc0Aác@ÁÅB`§tD"""7vmÞÈÞ"Âé~Úýÿ×á쎯ùŠ/b?~aiëÿ{gð±TM„3±Ý•Šåq¢íö•¦ƒ»_a*´B"#(N3t0B"¿øÿþÿűN¿çÿÿMtôíPa8`šÖv¶Êèµ]Ba?tа„D¡šbÓ@Îé–8B1ƒßÐ=Û¯}ÿ|öõÙšï]3z{gõŽî,&±]±T²J"ê™Úž©â" ‹B"#­ú]M÷¯éiW­éÿa?ýˆ=l-ü'µhFaá@¿ôßÄv¿ï­ZÈ®lm­¯¶zõÕéŸÓTíScB!–hDX"+µqÞƒO–RŠÓ^Ò¾60›i4œi±pÂîÒl0ši…M¢~°Ðˆˆð@Þë¾9Wá…ðÁ*h;a¥A¤„H;Šªa¶>Kèˆ`„i[Üì]xS#\ÖÓL…£©ã“`È“‰“±¶­8é Õ·ZÓ†NÐa>"Ð4,£„ãtë‘feÌ„Fóã4"ã†AÄ|§XLºsuŠ¿0ff|"d|Ќك#BdvQž`ƒ3hJ`ˆè=ÒäkÚâi†ƒDDhH 0„DDC,Óé6OçK0Ðza =èÍ ÁBíg™¶œCµŒM3m4,  Ó½MBÓO>ò$̆m§xÜDt1ºÁ4Á Âm‘ÉnŸAÅ„à£á¦Â¾h†  ²æ¡4ÕÓa—&h9;DáÃÖó²Ô˜5¯ïÚû@Âc¸´MîhËÈjžNÛ'”]Á…/¸nØËëàõ†ÃMrï0åC¦‘ypv¢vÙ>Âm >ÎÊ êŸÃiÄ®œµåäƒrq¦ö’kíëwm&Ýtƒ»^Ö.—»¥j-»Tõ½S»{¢wä“OÇÉ”QžF6A –þéa‚ Ýéñßû¦¿§ºê÷û¾ŸëÞ–é´ÚîµéßifT^KuÉ#@ÓA„û‰n°•¬4½itصê­ß_»Tõ÷õݶ¶ºíSüuþ©{è<è³ÆNhv¿.FHEK:a4NÖ¿ëßØíø½~–éøþÃ×ý¬ÿïÿ_[øùØ&FEIÇšh3âá0ƒd±»oËsÂi„v²’ýk_kƒø5Þ—uÿcKí¿ýF­d‡1þŸû6—Éì§—ˆ¿2üìŒ D^' Ô*wh›ƒÕ6›ßè4îÖÓ§H Èýtµuü:ᙄÛÈD\OÿÒÿ ÿý3B~ýkþþx' 2A°œŠ4×6È$m™Š˜Nì!ØlãaW°Hœ?nŸ„gj×Ì;¥Ú*É4/÷×—U°®é!3ÿíVO^¸×nÄzÿýÿE»¸i®‹¶ ØA’i Ñ7¢í»«»µ†úA>ûý›–=ÐiZ¨LÄA¢ößïÖ]ä¬pO¯ï×ÕÿÛ¯úÿþÉÛk¶\Ù‰§ ›¤`¶Ú.Ü'§v¥åêýê]t=*zÜF„©æÈE”ÓEØaæÏ®Õéþ ¤ý/ï_¿ùïÌoKï›^®•Ÿÿ'zoN“aý[hv]´Ýé×ÛÅ'¯Ç´—ï嘅}^•ígoë*i‚ Ó897Ólß}ê×þò®j«ÿÌ/þôÚûW\ýuž¾Óú¾ÓµÇÇéºj¿ N‰ÝÚIýýþ8úù7Zi™W^W«âF£ìé ‘2| Â›a3K>ax„ñhŒvƒƒDâÈD&×ÜvÿëÜÍ*mkúþ–¿zªz뤽«ž†š§·Ú±÷ð÷_¯kxOôÕoÿå zÿ¥ w¡š HvV"œCdGE<™ŒØvff± Dz>D Ä»…‘ôI°¨,)VaBa—“D%´4,& ši²y„蛺A6Á×OÃÛJìÆý¥ 'w÷»kì5cM<õôãŠm$ "‡±V¨¤~mXJ*˜jžÃ®ÿ·úûíqÿKC–;fÿ “A‚ 0†TÁ„âE9 ê‚ôl„ ÂeƇzE6f†u‰ãfr<%Á™£Ñ9’š„CÁ !Áº¤Èß»¢o“Žõ † pÃþöE« &ÎzÚÅ1 ÛØ8o°Ða0œVƒ°Æ¦šmqKÚb¶}FÅ$LCOaþÿ÷~ºÁÿ¯ÿ¢c”>ƒ}¯gbf‰ÀgÁƒ0`Ì:´‰ÆDpéƒd$ô­º%v-wô Ì"¦›za8 Aû ’€Ãi75¬º¨OM4“Ó×ûmU·M/°ø0¬\lU4b›б)ÝÛTÕRm ”:h4-Ðki‚¶¥ÀBëMý*úþ¶¼¿Wþ¿z}¿ü•² „Cƒp‚Aè6Ó"¸a ÛAªn’ȹFúyIaÜ&‰ŽÃ\é¤N¶‰ÃD⋇N¡8pé~Ó]tïá$’I‚ ‡ÇðÞÅ;A…3 ÂLÃDx&4 †6Ö B#@ÁPƒ=ª¶ÿÿëøúÿÿ§îí%ä™ klŠí‘ 6ƒmnîí6í´Ò¶ÒNÐ}ýwaK·@â›j¡v·§§_ßnÞcÓÿýU7ûV_H*I2W÷à ª ˆˆˆˆˆˆˆ´6"8?ÿ×®òÄÿ}ùû»T°Ù=Å[AÚpíºOÛï·Õºæ‚6\Ís»I?fj¶ß·z}Õ¾ý¯ñÐý~ãþ1í$’I’1„o5aõÿ¿ÿ«úÿï¤õ¶Š)²,6Òt›Þƒuéÿº÷¤×ÛÌïM‹'x~;Ö¢;ªøŽÿÿ]îÃáÿ÷^)}Éü—ÿó9ñzÿ˜úÿÿ=:Ûj©„ãmnã–ëééÒû·¿v«ßï_ß|i݇ž;[©ïýýVÃØ{ÓïÖj¾œ é»õ¯¿½½×í¯ÿmž¡ö’w 4׆š¦Õ0ˆft ÷i÷ïÿ¾‡_û¼a¯Ó³E&ïn_"B|V é`¶¿þöÿ„H{ýïݯ~Y!ŽÚ Ómxì%æ«™ý…cb‚q§²Ð›.ÝÃXý'Ké¯:ª‚K¯ÿ´º< ûÕö¥Ýÿa¢qh´¥×!…ŽÚ~¾ïoøK®Þ?»u}öroÌ+\· ÑÙdRìì3ⵆ’LR"(§iÚaÓ["½”8B-qÂ_Û_¾©··÷^—V—ÖÕ¬vý ]7· ž‰ÝÿZÆêÿÔ7AÞmwÿWùþïJÕµb£b³!H¨qv“I2Gò–~ lRn  XÐa¦ƒCDDGéfñûî¿'ßô½Ûÿã¦Á«xþÿÃtNý=ï¢û+[ÿþca¾½ïoÖÛ[Ì&Ò†”tõ¦­§®JºT—gt! Ñ !ÚsÛM0„E¯U¨ý„ü1ξ¸¯×_ÒrPíkOïﯭŽÿ^ÒýÞ­òN~ÿ×=.ƒ ÆÁ—~ÇA…Žv,Iïý(uZÄDDGaŽÒ×øÿÛÏ…Ù)×úþãlˆèzïªítýôÿÛ[kö·Þ÷\‡çié¶ïÚccja †·Ü>èϘ~ÞÑV*×ù(¿{!?{tÉ[ûÿä¢'¿4 ë¯Ùš×Ö¬õ÷!&Õ´®Õ6Kó ô¦& ãbØ"èh5†ƒB;£GÿÒkz-ÖmGþßûÛ »ïØ«¯$[‡JiµDãMÕVõ»{õƒ³o°’ 5IŽÂQƽ6žÂdp„DèÚü_ý|WNòPäcýw_ü5ÿÿ®äA2 9z¯A|~ìvšÅìPNÂ{±MÝ0ƒLn֋舃ˆhB#¿’R(=^ÌÌé)YÿRb$::dlÏ™+©jÜ'ïë}÷á×í:«ø›ÌN#»¥ðŸV]Èá4ÂA±)é´Ða˜0B" 9C8ˆå:0GU‘c\ÜO›3âÂän4ËÈ<Á’jpÓ8"!‡¦\ψ¨….Bp<a4Σ'‚y6P#Ý»|‘=W»ÿßÖôÿ®oõFÕôÓ%jOhÁ0DtiÉÛ@Âpšœ0ƒ3<Û( ƒD HA ÕSŒœš`… év÷ié­¶‹„B^Ñn º`ƒzÕt½õ÷ÕÕwþëm/óo¿Âu™ª:¼DDDDRqâ^µ3;A‚ 7‹ív‹¶‰Ä ïZ»L'wš!–LnêdÔêÞš'žû+ó;,ØCó Z_ú{ë÷zM:ý}é¯mݧa>ÒøŠµvÈæãÑ;l´„í¸tnž´Ã·6 `¬óDíÖ¤ƒ¼œ_¦Ã ¬>ü»txH›°ÉÇ;?í¿Ûû.´¿×Jø=-ƒ &áu¶°ƒS†r(ìÌÙáÜU‚LˆÜÓ»‡—mmŽ›ª »U«¤¶íoý>øÛ]ßwí¦žè=nè'j¿W2Wö—IÒãéS{Ô%a]A*b8i*áuCÜ4Úö(®ž¤óM×þ?§ôûV$k÷¯÷/þÄ}oï¦ñ¥~ŠÊ$Œ36:Q§¶­¤›éZnÚaI„„)ØPؤÂÁ¥î ÂPa+Éddßïñ]ZoÿïµÁ~Ÿ'ŸûþøþÃý;¶ëÿü×”3Æ3^z00ƒˆaŠ4õVÒbt… =‰¢‚:.ÝA) 8j*6ƒ0é—±Rò."™"ÿÛ÷ôÿ{Ž=õØk×eĵØ?õødõÔhz¯Úëfp@ÂxAžh4í4hï:U†i]Œ:ƒMPˆÓBâAÌ#Xyá4"( |Èmá,§®×._`±ýUKåñìÿðÿ³ °ÂÔ…;¨öˆÌÙ2¶D³63Å’øD ;ù­Ú±„\h5>Cþ0Æ"#aH›´"-ˆ†þƒ; 4ÿµX¨µãŽ¿æÒ?í†P“îXðßø.àÚ&>å¯ÈQׄ!‚"M¯áI̹` –B½¦’m·“ç†Ôv¹-¢pÃDDD^» ¹óW $açeléçÅ<›žŠ¹zWÿùuCcõþý"yÔ< oÝÒ—_m4h»í"p ")çÙ³´Ø,9éý÷~¼xƒB íCÉr×|w;W›4ÍóW¡–$ú¯ÿÖ°ÿÿ†óõ~c#0þÿ{û'¶vÚ¦ÛX´l ;åÜ5í½.ïºðÐwai¿»âE²(0ƒM4Lw¾–õÿn½¶ÿ’z6½ûÊ>Õÿ¯»}÷ãûié»}Ü_ »Rã/ªÛ»[÷öã_l6ùf|F“[[å)gfqò`i„"Pk÷ý×^³•÷iúgým:ûþ÷«õ[?0Í·³?öëÇóØ¿ÓïNïU¿î”Ȱ¡°u,åEŽ…]Ó"Ùÿ;HÌÈù„Â`¡6;  }·}§ß¥}¦» 6Âwýö·Ú¦ƒOâ­0ƒ¾ím`ûa…Ž­÷`öív†Çÿñÿ…þ!¶ùg©„÷ÝçDOœF¶ AžÎy¸†3HٜΙ¡&ƒ Dáƒ/.4ÿUÃVÏvyZÙêÎ>4ãŠ`Ó³ub•64 Pp»ƒ‹„ñQ± ØÚv0ˆ‰ÿÛÉÇÿÛý¿Kõ·Ë¯òÄ0o“qC\&É”C3HÛ?•räš !ƒŒ¦è4NÐ3⥦É?aBoz¾ÖÚ]„ÁX¸¦64ê ¦˜ØÐ8ªµ|ûâªÝ‘]¦ôÈÇðƒ[¯þÃÂzy¡{¿·jE¿íðpÝËt2ˆè3<“<ìl‰-®øR)žŒA„ª" Ï6H<Ü=Ü:Töí8´MÝnƒÚEÛïJõíþ/÷ìo´ÂY‡X0A‚5£ ª¦¸L!a #„Pš Lé aö°a0ƒL'ýpÛíƒÒJ›¿ÛÁw¿¯üêêWNµ ¯‚»‡ôBy‰ØhZi¾¶ƒO &¨»±8ô]Ûݦ͜›ÐNíhœ6š§§ÿõÿ$ ¿FœZ Lé„! &« ÊQÿ þâ{ø|"wÿa¿í§˜»ˆ‚#U‡VÝÓÚkà;µ†q˶ ¨h·‡…~Ü&öì¹û½öýªvýñ~¯äXýŸ éjØ`‚ Âýðû<+ƒ§ ÛûßÓëÛæ}ž¡÷§ ¨pîîÐiÇz D·a·dòÚZaè?%äâ‹¶étõ»]íáÒÝé-Ö¿ý}uÂ.ñ×B"=þc|E‡¯`ûÚ»t—˜ïö_¶±V'¢Ç³Ðiû(yÃ#HóÞÝß§Qßkjƒ¤þîÿ‹_ÿÿ¿¦aÿþ_¯­ýÂúõz˜÷üï«÷cúýÜza6+Šjû_cGoûæÞÔê0ƒ;ßqªÿ±÷믫[ê“zéií5ûJ#×ÿÇú¦­ŠúmëþßúnÝcMÚPàïpÓC|ÓÍ¿)BÚ ññM—4Óþò7oß~¿×ï_¿ýeÅø_ÿõÿàÁjÑ\;1qOV“jü0GÝþÚîÖ¨‹ÌÐ`„tûæ¼áæòDpÏÆÙ˜{ •±¹ƒ#kN4ôÃv˜dpüu®ö\W_Û zõÿ·ÆÝK«ýúÛX•Ö"X3‹4þ8âºb, õ5ŠêD% Ø!ß§;(ç13p 'zhXAE„ͦPDâ*rw ròƉ݄ÿþ¨‹ ÿòÝñë÷þØz—_¯þ¶ïOüÈÀ¦2“MJ«Îæ)æp˜UU²qâµøw ˆŒ†2x¨—9ÈêÂa« l]¯òvæ†ì º'zm»I座ýIË®ßí~#ûìÎ ÿûWÇm+þû[íYwY×`ž¡ðÃt-É'ãBÐ3‰XB{Fa0™Æy„@ì  ñ¦‰»ý'dó'oÉÝ:º&;Ï4åÛë߯§Jÿp¿^ ß]ýoKˆúÿþßÙ=îºl3iÞë¦EYÔÈ.ŸìªÉýånõ¡i¡¡´"ÓBè6É¥µ“Îý{¿Oøz¼»i>¿ÿãõøD£þøw}u¾ÿ3_õý]íYýSÖÒ ¦Åí4×Õ…MQ(»NÂ}¦ô¿ñ†Jí;%d£¢òé;ÇNûnükûÒý&÷ú¯ÿ„ÿ÷º¯˜_ÿè…Woìú÷Ûó?l,;4Ø­„ÐhDCUµýž-5¥¾“×ÝݽÜ6ËǶqíÿëýÿ§l{ýêúkû]}}û=Y¥÷éûfkm.áÜŠípšiØKØiµMÖ ¡aáÃé;C¿ÖDy5Ð2È;ÓîÕ{ïµü±û«ÿ{÷µÿþ?ÿÉiûkîö4ëñý„í°ª­«ÚîÔ1ûÔ’@Ø`˜-÷ZòŒîŠÍÙW“$÷©9Š|d8fË0a3Æ\·ÌOõÿûÓéãýÿw½w×aí}ÿýp­ðºê©´œH í:NÛ R„Ó@Ú}==§xBBâ":¿¤ù«3C#ȉdÊ‹âà_sãZSoÂi í?M>ö´Ó8×!2lHþõ«ÿa/ü?ú¯ïa/oßÿú}ÿÐlíš{;j›Ãج4\ßq¦TûBT!„5Y^Ÿ“ùóL ÐÓÉ»ñ ¢oÓm=+ÕZûM‹±Ž]ì܈C&Ū߯ëüu¿yÏ_ýýŠðßéÿß÷Úô¿°ƒ)@!ÈIð­„""“B"!ÄD]¹³A«•„ sÂi§5»šø'Ç¥-Ü'`‘xÛ»ImywkjÎ4O&;¹xÒnÓòÜïÞÿÜœÿñ_ýÿ穦 êÝ÷þ»‹'pe7Õb5é§“š§Ð„÷utlT}µVöš­ÃÅ$Ý=>ío]lˆëo ±ºi?ÿøCzÿïý~—·û÷îÿ¶šÙîïHL”]Ú.øCM®N÷ÞÚt]°ïqïbû{]>7¿×^ìîïæIy^ù.uÿþ·ÿß×MZÉ$ïö¿ÙÉSø»bÓ ìdÙ"N¬ã¦þMá‚÷Ýêìlzoûiï_åçí±½~ÿaÖ»»ö4g¯›a?ÿûK®—ÿýVE#¯z¾õ¶°Ó „ ö“ö‰³´H ôôëèè6û¿·Wë—¶ ޼h7ì¯ñø7ÿZŸò5cyK´ÓA§ïÿµ{mtÖÕ{²:JÛ!ù­ör¿ín5ï £Ch4ÖMŽ‹pŽÛýéúú~—†Ãÿ^œvˆÿ^ý/Z°ÞÿzAýsfˆ¾-ÿª½ýŸþ”°š 0œG;Nãc´í&(&pÕKƒG½l.ê·|Çn—_cþðwß¿ÑÍ[äÜäÛm»þO^ÿë[®C=SDá׿õÕu°]46-;æ‹j4Õ|m&`„DG&‘‘gõXúÚî?‚éûa»ûtÎ~….ü87ƒÒõyƒªïgcfhβ%ßäCPAšgñ+²‰ô]®šm…M;B£6‚dojƒ!…%‰“A<ˆ´ÐhZi¡ìW2I‘F¾í6¤Z6ÐþRÈ@Ÿ¨8o“sBÿA¿ÿÁ°ûcïÒo¯ø5‘‘ ÍÁš©`™A„ö°ƒM4ÓL5ƒ„ïVÛÓXôöƒI†œ­"ìâ ˆÁB0ƒ§L!açs“*ˆíA¦BaoÃflÕ?ÿÁwÿpýÿÒ/'0ÿûîÛïïöþ‡ SO¦-0ÈN#ˆiðƒßûwŠûÿ¦F>g„¡ÄG´Õ;4÷Ô5‘|§õPƒ‹ëýWΊO=to ›ßÿýïÌmÿæç1=ÕmŸ_¿ô÷¦ÌÍmÚ ¢Ý­&PûDÝ´­‡‹Çu§uþ„!„â,!hGK&IZMþÛk3É>h*v‘Þ¿ýžÓ¯ßV“÷ÿëû[9]ö—_¿ØN»UÝ“ví„;Ôž:åÛ Ôièž8A·®ú¿Ñ³õ¾""0jêíPv´œW!çV šè=å»i¿ïúÔÇk_v·ÿfk\NÂëk• Û[Xjý¦ÆÛuñ[˜ôé5vŧW¯›ét·µÿ«l?÷{ô>+åIšfqâ3n0…Z.:.á§H=wíœköØK[ô­cOMm4#´â½ƒv*8ý*v¨0›J«ïº'o¶ë_WVŸïz×þþÛ LWüÈHd8)ÐX0˜A¨AØA ºmÞ›~“¸öþÝXa+M4A6F< Ði5´M§jª¿ ab¼4 ÕãOa^ž×ú´_~ÿõ#ßµá¿ûɸDMˆ—$²êžV …IÍ&m„"Ѱ–ž¬¸‡ÞïÿûUi[[X¦)‹L&i®+¦šdq3Me 2œ­NéÚ|ÈZ,~®+Okúþ?^!Óþ\Pÿ{n)êBã<N4 ©g&žhA0¥A› šh5BrÝ´ûAËÆ“}Së¿é¦ÂNÓn5"W &qÐ’LÛ B""""""3à!­/÷ý!ìŽ&ÿ,rÑþb•Þ¡ÿ«É¹.UÅY+¢Ý¤í;ÔoKý½¯u÷ꄃbàÈ冚 >"" !ªÚÍa4Áeˆ/Oÿô>ýßàÊ*m-Ëu’3ÎÊÉ4ÓLþi¦ƒÓvF=‹FƒDá¿A…¦ 6Þ“á§m Ú^ïJï¾ü?÷øˆìáhDDDuð¸a¿ý ÿÿþ´)ö…|Ë­4×#Eöë&;‹`´N.Ñëm„žûµ\±ß»%mޮƟO¿¶—‡e÷눙¡Ñ;ôÌ55íÿßÿî¿ÿzjÇçC4`®žúúúA¶JØi齦ëÐuîÓé~-=4¯ÿ÷ÿ—ëo?|zü[WÕïþÖÿÛ3VGþí}…á4ʵ½"ǽýßÚ}ÿÿÑ;﾿ý>+çý¯×."Å6¸>ˆßÿíiZ½žÖï³×ßûg®Òì&ƃ ÜPq  ü+‘¿}¬\Wú~©ûiúqÿßø>ÿ`ïË‹C[üιprmð_õÝÿ킬5JÕ³—gÓö•ªlvÇKM´"0vº¸Ðþ¹ÄCþé¿þ>—þÿìÿuï½õB/CX}/ßõ&â±Üã%¯´Ó³>5XØíY´ý c „6šhd  W*Ÿ¹„G5\ h<ÕGÿïÿívÿðÛü£Ó«ÿG®r~¼Çz ÂäÙ.TÉ4A vl;AÚ°‚–:iŽ£´é„á‚V‹ýH\y ¢ÍøÙ);Í~w¨Ê hš¯ÿþ|&ù0ûè ïöøß·_ÿúÚI®uŠáhë§zi­{m… á„Mm6¬«A„"C…êgšR„JÔ a4DDAèIàšQœ`ˆUrä=y( ÌÐ`™˜ˆ·vûh»"%ÿÿ]L ÿÃ9L?÷Aïÿ‡{š+í{N4⪵2*$å^þ©¸}Ü£cE„ÐaF""< Ñ l"$ÊÂT !¦cDÇh3˜&Ö§Qà™žIL íSM ðP³î›Âï¿û¢qú—×Ç ëù¿ÿíþNBøptpwP¡ìíCÓq÷{_»¸ˆµˆ‹zÑpí0… ×Dà0ËzLvš®Ée)qEÛ Ü1a p‰»åÃDá£Gà ¯­ ‚ÿôø¤ÿÿÿþú·g¿Û=v¶±Û Žn ÂOm[™þé°¶IûN $Xåäpäî‹ÈiÞ«HÈdÝ"yÓ¢íBt›¦^^MêïM‡K§ÃU½ôëªý­ÿþuóÛß¾šÝg÷VGo† „Ø«Ù#¦¡Ýݯtšñ_hlZý‹Xƒn{¾ø¯]7Aªðîzi©wj’o^Ÿq{ÓtÂÞ¿î½k½›N®§_é_« &à ¦Ó›S]•hel_î8zóëȤFÚç®'¯2ô:í}­-/þÈâUvãë]h1§é¿wª~šÓÇÿŽ’ÿ0»=v¿d{Muµû>­mt­†±QQQµíKvÂAÄGw|Ij4°ž ’ ˜"Duiš ûL𦀇‡x@ÁRæL~4’A÷ïawJ¾!XÖµ¿üŠ“Úþ®ÝŠºY8ßÞ¶ØT㻳=á§qÈð6Â|8â‚ ŠkÓB!‚ ¤_ü“Gá<ž@ÐdÁ*v4 &y¦ª Ú¦A v©ÅŸÿAè!I$„Iku,:ú¿í„˜z×ÿÚ¯õ{Ú¨N4â“…¬'"ŽÓ·ÕIªº¦„ ϵ½yJè«ÊÑä6iØLº9œŠM0A¥Å¦žƒÚTÂvè›´\$MÝE¢CÙ1ÚhVFEH-l öh ¹z%JI%Iÿÿõþ¾¹z°‰_Ýý‹A§¤ÓSBpÓQN&´Ð`©ÄÒš2áq¿Ì@Íyì'šäÓG‚4XöPãM4Ø‹N¹;¢våÝÛ#›6`¥ÛôÞ á‚“¶‚m§OÖ÷AµÇêûý÷I* —awúÿ¿ÿ@Ü/­o ž6¡„!ÄDZ²œ´" ,pÂcâÂgÚh;lÁ§a4²O ãG^‹¶ÉÙ,ÉÛh5O^îv·i'Ú§¯ÞžŸåŽÝ_8þþßî®ûûú TIPA%öÿûéhßþgâÐˆŠ°„DE¬v$;šÝÛ¡7TÑ7…E»kÝ¡†û{¾â×Óÿµx¾ø¯ûû×´nŸ¢Hz»u¿³5kº¬2äÃÒïí3‘Ök¥U먧®÷[×6©ÛñLih3K]Vï“ǼلßAÝúß§v·úÖûñïî·ö×Þ4ôûµ0¶íÙïØ`œ0ƒÌ(a @بdst¸´ÂiÈ|jÅB¨ $ƒT•¡ ªmÙ¶bI0N;M0› cb=jØwwdụjòò“xã´Òõí~/ü_­Øÿ¡ÿôýkýw»øw>ß}è<Ƈ n-%æl‹ŒÐ" z¿ú´úÿÊoý~»ýÌf'ïÛ3YÊ—1ßgõÿjÿëÛ™cn'a銾Dã­•c Bæ5™‚4Lv.öêë_¯·ý=öëÿÌ%ìýÿÿézqýúm…¼Ï×÷÷õy@§e#"hge&PdLÎÌ™’©ž:É“:d„ª´JQ‘­“‘<0ƒ¤Âf‚…I$("q&¡%­ºÿ÷w­™®ý[ï[N=añÚíÒpÁXvž¶œ5AÚÝ÷ûý÷tá¸" »TÈ™š3TLš ȃÊA—G8sG"ð¤ƒ&yã9 ÉÞfÌÄEHG3quxK ŽðƒBÐÂ4[DÜ4\=‚ ›ÐO·†’ P‚ÿ­³Ï=^à ÝÐ'ëvÜh5jjñH‹ƒ±4í6M†ÿÿàø9,´ƒ… 4Tn „Øh8{P†˜AG -‚JÅ84Âiœá4 *h3„·ˆz' ‘Å} $¥ðNÖì*ÇL&Å ˜H% ŽÓŒ qHM5dQßXi‹^°˜k K†È¯k¦Å1ÿú»Çu˜^èœáÅ\;N›ºêš4^]Ã%~Ò.Ù œiõ†\ËÆ­#bEåïNÉãÒpÂt ìXI7ýc¦>P^á ¦œPA±L(¸A„BPRÓN¡Ì`•ÆšaSDˆ$¤A¦š ­S#ÿòãSAª‚Ñ̤)b¸q +óZåå ÁÑ} $á Øh4?vz·É:w«Ú÷ÞÖ´šÂÔQ8éÄX%ÇVÁ ‘GƒDPPL¥ …„!„"""#؈ˆˆ††ÖTwÿC ò#„‡%2 àœ"8Ïh&ù‚>f ÙŸ‚šfÌØÊ'›Žu¬àÎÄ7§§±þžúm´ƒ¸¾×úÚ·í5ûãk¯"Ñ÷ŒY9ò(àþ"2¸! ˆˆˆŽâ?é¥ú¿Dí¡;Úº.-0šC Ð°š!`„qx:Ä0\Ï(<"Éðª'à>¯ì=ÿU_¬2á+m®/ò9ÿZmWëaÿò²õ.ûXˆÅ«ÿßKhaRvÃBÍBy[¤nscÐf2â=„Èg¢Pçš´»ÁS1#ŠÂ8 O (MµøäJ&ÂüWëÐæ5ü{[!UõJþäâa·ëšßÒO «ÿþø½Smtø¤ÚM­Ðk eð ôö2xÐL<6…„ÚpÂ’†é!‚—’~º$9Ä/fÓþúêü0å?þ¿ _ƒÒÿd7Ý~=ýz§ÝÕ‡¤÷ûÚÚþg ØÝ;Z·µ.è•°Ó ¦ŸÆI6лì!ž·ÿ¾®;Ú.þ«¿ºß¢óíуߺ¶=ž“Mš¢º«;4É!–ü’  ¬>Ðm›¹ Io×jÒŽ)ëéý/dADõîi§VÂtÛ#¶D¯]®][m>ý[]éàí¿§öµ¥ªn¦¥g XذƒÓ2ugvÉÈ'gb¦Rˆ/§„iÐAF%P¡¿ÿjäÃ,³¿²:>0ÿ~·ëâÃßílÏ1a9øvm;0ž¶Ø?/ÿg/?kþ·ú¦„4½µ;R,_Êš$ãÍ2¦œ’ 5*ôõT/&éÅHãF{ô^A¿ßMxUÿƒïä3_Ýv‰ºå4[°}¥}‹bÐjpÓ âl0·gýÇXtÆÃ &·i² õ´a0Ä8ØØ¦©Ó #ÚM0ºeJ×MZ§L"8¤žÎ`„Dú¹Ä˜úÿ{ïþûø'ÿ÷¦|;t¡xlÿL28 ¦+M¡h27»¶6“ØdqBaa)‹\PMˆ.#tÖ ˆˆã«Ö®š8»Ìéñ»§ ôí½¸gì‡j¹Èõú¤§¯[×}ŒVݳÓ÷«ˆh"†33ª„I†„Z¡>a‚ÈÝØd°)íP0B""ÂöªîÐâ»Ð›O Úv½>M Âh3 † à ši„íó÷j‡Ûi}è'|ǧ¬4]¥j";B"ˆˆˆƒDFÄDhèG Á¨ºyÓU7ú”ìÁœ"AQ(#›Égido +6-Š È®ì Ø¶)ƒ.* 0„|jšlAÐA…dQÿ 6•¨ôÂh60›…©H$¸¶ã»í3ÞkÏ!<Œ31SÂtYá‚|h„²v"AÑ˜Š Î Ì>pR¬CÁRs™°A g™Ë!£´|* 4Dc ab!Æ+ÃA¦G1FáŠ@ÁÅÃ>˜µV‚D/-ÃPe¹¡Ã†ÓLÙ˜vG&žƒ „òq~Ð5 éŠnÞw…NúAņÌÌá˜,²(ÊEÄDA„–‚DO›DDDD¶n: H°„DZ !ÄL–ŠÝðr`Øjœ[¸f97 ….ØK8Â{†\Øaƒ'X¢í¢cÚÒoÒ/dÌD"wd±†'±ynÎù§|DDDDNˆÚ Ÿ#šˆˆŽt3!VdhŒ‰R`ßní;¼”7è ᤠ÷†š›` aðè iö¼l›Õ–‘6×·OÐmÙÞTÂÄ0kºOOÔ&2%†lŒÌÑålS¸ wkúpï6ï×TÙ'v‹çÝØ}ýÒ»¤’vñÝ÷Þö­Ø'ÐÛú»I„ nÓ@×zO^ñ}þÓ.¯]ý/­ô¬Žªö¢åúÓQ¨^;ïÛ[á>Ö!Ñcíõ‡šwþ¿Ú¿XŠ¿ÿ_âÿý™9#ê->_Èjºùx^s!Tõ§›80¬­å)ô3ÅÅ&±rV²$ÍŒøÍÿþºü±eÿäpŸË™þ„6í¤“÷_ðC¯êši?;Ìëh; ËqЭ!™è„aK™¡—Leü˜ÎÁÆþƒ Ó(ñ—Èù;ÍÄ‚!…'#„ðƒCûÒû­_Þ—èq_íȰa÷ô\;_ýQcïõîÌ×)¬Žóòs%BYq“Œú(GÌ0C ³ŽW­Ã&Y%ÈìñvàBdH•P290AÞƒ3^\g`e>qœ"“ˆ„’9‘8…šF¼£Ï°ˆX,‚aœsVBðqÁ>!„ (@Úv‘xÑ(ê©Ù}_Ìmö¶Ÿw÷˜_í™áøî¶›þÈz _1¤zÿ¯B ˆ öG"C>g™Æ O(A™’hh·%aá¡åóªa0…§V‹^ìC.pè¼ v‹‡î†ƒ0‰¸r á‚Ðm3‰oMàÂx+‹¶7„ÖÑ;hžB/µ ¸ ø Ðaö¶¶¬3g˜Û\¼ªÝ'ngö©¦œLûZûoÛiûi}ïui¢nÕgéÚ jR £Û4l²vÐNÿ.è”}ÿ½82;d±a¦ÙeåCm‡«H7@òpݦ%E°ÒZ.(¼†e¢nOÜ3šƒ 'j¦ö‹µ/=6“‡}m}—3:j“N*!ÇlB°¶qØA„B``›ƒA¦Çjû $E£†Ã &à  íc¿üq“Ê/¶‰Åz/‡lãa ‚âp0›V÷i&á:t´’*ZAÝ¢W°ƒpÎʬJL>ìu´øîÓ·T ½_ ôîíÐ4“x`¨:'l>îÒ/œÜ´›ÅzÚÿoOCï AÓ"a à £E Œ v¬UèeB mSN‚Ä(‡ðÂé§­:M°ƒ ºz·j°×.ýµ=ý;ZUÓÿÝ^(I%IzäßøüˆûÊ$’¤TN¦©$’AÒH"ù$I(:mÓñÿ¡Mú¥øl„•gþáÕÿùÙ_®ß” ŸEI°™ý0D$ÝݸXé¿ùñBû‚pß°vëI> ßÖw¿ý ÞÝn¿·½RI›;HŒ%ã &s4gðϳ"\Âû„½ÿÞu0¸oÃÿÛºÙ~ÖEˆùži&P)òDR[þþƒ'‹ÊªšÝ§hœ7˜Nßÿ¤5ýg¶õ{¯pÛפÿ»˜ëûTឌO¯v ÚîÆÅ¾; Ž¢Ð\*ê W˜8 ÎÍkôÛ3ïlúõýðá¹éï)÷»mXtÙš»4äL M3ŒÁÂ4˜Ïƒà g ÃO0D‚ý5_4-IÅÿ—#Ž7½?ÿéêÞ©÷×íö¹¹íný¿NÕ[3FÛI†)ÇnšqlCbŸ ÉÂÁ’WD)ÒÐpwd1‚IHàé4ll°Á6Ï}Z§æ2ï[N÷Ðtšm¥»a6-¤×Ò' ­ E¢cÐw ÞÐj…„ôÕw5×I5°ŸÛi6àð¿‚õ¿ÿû9ºO¯g'íom+ôó>ØÓƒ úÔ6£´äGa“¶Õˆá§)ÃOM8MøiC©T  D„,¹X$† (I0—„ã°”…ƬSÓá„Ðݪmö‚ ŽÚEÛd­òo ±ai¿H&è<„PY!ó\=¶í¿íÒ^ßÿá‘ÏOo½øÿM†i§iE +› * Ó¨lpÒ « *Ø h0…„!ó¢Á´¡"É:Óî"@Î9džbƒȯX‡Å aB A4#U&d S¾Éæ^XOôÛA½Ý2ñÔ¾¢ñ¿¤ö: ƒ{N‰Ýßi^¿ÿûX¿²:†½Ý%¦š±Ã~ØÃ]ġ۴Ða°Lb"$ŒDDGÁg*£ÒüôAE'h3ãŠÍ3­óšµB"", ËÔ¥ ¢vÙˆD4#B#lV÷§WõÒÞúwÜ_Mܨÿ –Lv½ ;~п½wÿ¦·†Çv¿ÚpãT­4hDDD‡T\NwÓ”3Q«ž.áœÉÌÛ0a<¬‡5Sž0ƒ†ÅÁ2$#Œ"¦Ù xˆˆ‰V„Gïþû»‚««ëõ‡wý^¡‚ÃxGêáõþ>¯ÿòpRzi­Ã ¶ÖñÍÝ馄ÌÄDD|"ñÄ6 ÷\ a¡m‘ÃBÑ;´Ò¢pð‚-4Ø8†Bî ÂeC0I¿Õúýÿõ­5¾ê)ƒöÓ ÁãþÛÿþ‡^÷hZìL%˜M“u}ôöÉ8}øDœ4÷÷iÃî‘8 ›Ò'l2vÑ|Áà¤!ÉÝ] ;—œ2ä„?éïí¥[6›þ½ôøþÕžÎCûŠaëùÐ"úýÿb0‘}3¨DIºÕåõ„ßÚm¾þû šá«~öÞOO¶áƒ«H6qjtŲ,7;;%K÷_UíWÿùbë’뉨ïäê( ^ßÿö…'ònKÃÍ=¿§ÛúÚ^tú»â=ÒûßÞþ Ë!áë¡ZÖÙ8†zL(A™ ‘°oÿ± Õ}ûÿ¿aØzö‰sÂ_¢ûÒµÿëNš“p<ÒN¯û¿ûñÿÿt³¨ÿºÙ'«x7êß»µ^é‡}3³>úJµ¿UU¿×ÖÒd9ÿÛÂ'ïºM/ló·XɲvL’a}ׯÿßüþü꿎+ëÁêßýÿì0°áúV›[_<õ†lõM{?.¿Û[Ÿí{¼êƒ]?éúõltMoÕ?·ïëþë(kN/÷]´ÇþÓ5]ü©AúýÿýTRéÈDë¦)ˆvœ‚+Ça+ Ø`¡Sýoá„ítÞЭ¯iõÚK›PÓ­‚`‹qT]ä95ýëη×þð‡ÛW¿uh'i¿Úþþû×ÿ}ýÈ´™_\íQD9?&_ ’± „ ¦b ƒb‚51„rØâ”ÆF†Á—v¹…ö˜@ìM;.˜ßM0˜a8’¦(D§ûnÿïÿË¿ßû×§š>ÛIÿ×þÛ¯6¾ÿò …$qŸ4Ba M—#LŒÔ%‘ ‰®`Š! —f‚Ÿ0ƒ°ƒÌè±[jÙì! &h ˜rˆL§þL+öØãÖÂ-6&zh8¶†:hs[;„™ZçVvVd¨&m‡nþ¬ž1iýÿ]ßÿí&ÚÚU úí¿†¿þº¿»áN!Þ‰;x´BÓgÄ4"ƒk`ˆ<ÆbÙ:0Ç ¤"(Ô¨Ž""&hÿA‘Œ&:hDXÄZ¨âÞ˜A aV *ÓMâÓ»¶EÓûNâV%Uþûÿ}_ï}»ûM×a„ûb¸0·¶•ÆšpëUÂp™ƒ=näáÉ× •Ñ7hÎÕ5NJØÑ8»¢vÙ7†¦æË}>´ñ„DhJ7 ”&Oˆ‹BÒ¿@ÖLö’æ¡„ftî£á4 Wÿïÿöïÿ® ·v-ŠØì+W“MŒ |4ØÖÐ|»m0NÝú ´… ÚM¨<ÝEóDó „'H;½m¯A«i&ÙXB"" -÷a•ØMµ¶>®¤n4–ÁBw÷ÿÿ<{[~ÿvŒÒµxi6{ ¥jšÃ†‘ÃOKÓ§ <>Ú|lk„ì*Öé§pÓ÷§c¦*ˆî»WÜIDïä{Á¦›º¿Uk÷ýþöšk¦î®ÉÚa'°¨BDD[˜Iá• Z¦×ZñØ=ÆØpïÜ5Ý„·ñþ*¬&0Ÿ×ýóAë¯G¯‰ÌñûÞþÖÚ±V«Û§÷êMoM¦·a® ! «"/A£;ß' Áµìý8éúéK«,³£‘Âm‘Å'²#3F†¤†u³eá3ñvSæ¸Á¡?V•wsÏjÇŠi;M0ƒÂpi±liÖìD÷X݈î(‰Gú$ÿÏ… ùàŒ0×£ûëüù¿}Ë+§âÏ ††)Â#¹ò4ˆN©&„3ì&l—OèÙ§wí½ Ö¸M}‹iña¾CÓÿôXï¯@ŸôFì†iáA°Ýj¿ßá÷w•Õ†s²Q›ŠÔRÆfC2Hø} J&;ô´mª/²q‹ÛDíg ÿýÿØ;g CURh´‡U×´ƒÿ×üÜŸYy ƒßýÛí¯ý¬íf%‡d¨ÂªmhŸ0í5:7aÆN]Ù¦^eßfp‰wUtÛ&þO´èSýïþ¾Ã¡_éÿ§ÿ¿sûý;F÷mûöÇëÃa˜5â/&¨w«ÚpÓ]{Ó½"ùÓ]6—ˆõàîá§~¸Ãõúõ ãB7÷kÿ§{u¦s{ìå~±¶¶ž˜DC¶)ã3pÈïH;†²¿»Kûý×ñׯ/5/šøõë.¯°ÿýüÚlS×§Ýúk`¿}ÓØO0­Zc‹bÓvÂÓ´ÐMt*RgDcÿoßÂkÚ÷#GuÆ›¤©ÿKØë¯F{¥WÈ^v™TüÿúW~÷ÃJ*îXê%ûá ’‹%‰’¸a”/{´ýifFµ” ƒM Ìfb›'{ÿéZC•ê)ƒÿ–;î]_݆ÝvÿÿójüÕ‰Ú«#£6 „ò‚{}úÛ—Lß·Ç,tÈßí4ÛiˆàÂ"ÂpÓ®é:ììÓ32q`Âî¡ý»i]ö:½òÜ­Cÿ ßázÖ ¿òÿßû[ð™Þ¨·&8µÓî;Ó´õã·[jm$ÖÛLã Âv£ÆÁ4Ðîë¹Í<"O##èö M=7åæÃ×ìUvÿ·T ûïß·'Wú3d ××Â4)Ò; ŽÀÙZe@ÉA¿WýI÷Ú¡|C¬Zh OëÿÒôˆd<£M0ƒ“ÿAÛ#›®2nÙ!ðƒM%m»'o~JÚnÕt=~¯ßáx¯l)$4†­0Ùƒ¶†0vƒ@ÓNØ&¡ ƒÓSHŸ7g';ÖßÐ’‡”2G‘Œ¾q„!’ŒÍdÃLì4DçúbIA¸ dáý'õÛwý&Ú‡}Ýè>ÝÑ;ô½ê©xýTWºQQ]1Öí0‰ñ !pÓÎ=žePÔˆŠB"š¡a2‡L.¼MˆˆˆˆïðÛÁ;³B>Í™à4ÔÙ‚XiÔ hE„ƒT=[50š§‘„h4ý32(?NŠæQ©šEÙ?‘pè?.3]Ò÷âšëá{}ÿ‹¶¿ôÝÿ ¨¯ÍÇØ":èA¡h4!¡`µ^C‡´ÂpÓ]°˜A½ ‚!q²7"ÛODáÍy®ÉõnkÚ/&Z¢pÜ55 !ån%f§¡Úôƒi7ÓjïNûпðºø}[ûÛî¿R ö×álížÔDDF)ðÛˆEóEóT]°áç˲8©°ÒI¤NØh4èøN¡©yzm'H4‹æ´íHt‹Æ“«îŸ‰é&›a[ê–õêÿøë[Ž—ý÷¯úÿ¿.¶²ëú##i5úý<¼i6áÔ4@£ô¾±Dä '§ª}-Å'¤þžÆ¹}[ÃAéÚ~í¤NÚ%&wÁ ‚n Þu¯ÿþü°í}†ÿÿ¿Ùq[\D6ÿðM¾¸2FÓÖûz¤ýâÃßûºþ°×¦°}lZÛ =-/ÇÇêÓµhªuï8å×ÿ·OtÒî ¶Ÿûk¿¿ÿÌø¬~þ³KŠ·ã²âoÁÿ"½Ù"MìuŽ +àÿäL`µÿ¦\T½ºÒü"èÏß]^…iU¯¥·^&h+¤¯»‡½ÿö‡Ã}ïum'×ß!+“û÷,i6ß!]~h#ɹÈ}a»¯  ¿üQ˜š°ÓPú÷qUÿ¿ª¯ßúøCôJÞ»kÿÿô/Vºßïð‰°„búYz!‘ ßÒæÓo.¯‚í ¨Ûìú o·Ò—WÃ"—ÿ]Óái¥ÿö½¢ïÜ'å»ÁÿõÝ^ïÓó Ï[";ÿÚ&Ø!ïë.¨zß·AÞÿ¢ûØo¼?ÞKð‰æœMÍý_ÈÞzRF‹OY}+¤¿ìBÒKô¾›ïÊ?0ŸïÿݦÏþöÚ oÚ‰\N Žîµ×ýÃÿoßßùžbÿ6Þ×S Øwºÿ]ç+¡ë5æÙÂ:¢Fq¤l&¡ƒ&æ{ b&8ÐȨ<ùÕ¨T’H½ ©$´×mÉê·§uõúùÑöøØï¸h:k2+4Èž0ˆë×õ(Ü÷~Ùþ•ý³×ßí…ºmvû Ý^ç½;I=†z¯Xo¾Ð! &h ÂõȄóA4Ða0a„ Q1ÃKJƒj—tú¾;ëé’ûO®ëÛ Úëþf½ŽÖ˜TÓŽ¢Sñs!%ûƒ@Я_™¦÷×O0µÓú^Úvé qÆÆƒŠŠcca„Øi±„C—lpa0ƒƒ¦ÌÕ§±3°›drà©Ú §ÓÍ™¨]´^4O)6Di"µ†äî—[_Î%³ß¨"‡i¥™ØAa ƒµŽ)8¤§i­5´""Ðhܼ=×kì$¶zm>³>½u^Ò¿«cNø;L=27 Zf€ƒ ˜Ø†M m1(všll›Odð òwh5Ás ÃH¼m=c¤'¯ÒUßÒí$Ø[M0›4á…a…ŠT!BaÐ@©¦š±·µM0L!õÝíÿC@ílNÕoÿãÒÔ®¡[«Ê€šÏäö!„uà ‘ÁO ¸`„3ÄžŽ!í5tî:WMi;zß_i;^E 'ªžµmB(vÝH%‡Š;@Ý’µ„Ó°Å5½4æ…APA%„‘öˆŠu«õ×Ì8JÆÇ{Ú\Riµ«¥m0B-¦´ !hGÁFëßcïz¿¨=n«ÇÃH/ÇÅE±Ûa Ð>"#×A¡ÂËÒ#ˆ‹N ‡_õ;Ó;”L(wH~ªÂb´¨0„DDEDFý¯ëUÿ¦ÿò'û¤QþƒM=X†„DEʬ"8’µúûgb}䈑š ƒÄD4Âí=U<a4OÓ³0œÎï«]°Úƒ_Ñ%ô)ñ!âDú.8ÔTGk)*OZ6Ζá˜&f*0BQ´Ðˆ† ÿÂ% ?on¿ÿp.F˜U>—â#;§X|“ˆT_(Âas™B?“²xû!ë˜$aõ[L'ˆˆˆÿðŸÛýý¸¢ÞÿNŸBÌå¥oÒH°B™¨éÄYáÑé& 3‚¡R´ÓÕ€ýùqÚÿK¾Ï_÷L>ÞÌ+«ÛTŸšÛJÖÕ&[u¥féšiÝ„jÂŒ0¡TÞôÕÄí^d®ÿÓøwy´š ýÛWVÒmXÛTÈö|. 1±J%ºk£E†A6º°îòí‡}äñµ'NøA%T•— EÅ5ga¥ýïÛT°×jÆÅ1AäQÛ 0”1 !&ÃX'†O¨æÅ†©åÚDÝÐáÝÒ}è=}7W÷ûþ˜LÌ!9•¯þªŸÃ⟊pÓ “Ј‰¨7È[I;ºnºÛ ý;ÖÛýïïNÌ};øû–áfO•-Q8ØL&¾š¯ ×Yþ8è5O&: &ƒ!•8Êö3ì·J0A„Ó;¢öí±ë¦ÿƵú¯¯Õ×øyH«"ŸP]i¾gkÒ…[‘GÊíPµB"ÁˆˆˆŒç¦[𕦖›¯cÇöÿÿù…ÿü8A„ŽŽÕ9ž—Ih¸jþôáÄB.,!’b½*¼&—ÿ†Áíö¿ÿî¿üCõýØrÍ“Â$=AHÄ_&7þ½éý¦P0š®ûÐîîæ’°Û3 ¥¿ÿÃKÿ–è5¿~ßÂoM <wÌ©ÓýWÿˆŽCv…ÚÖ² ú‚l6ûY!ÕþÅô#ïê ú^qO: •ãí/n¹¼•§|ª[¶Œò ”Fó¨6‹ëÿÙZÿÿºðïikV1ýïé•)IÑ)iïízç ƒ[[yÚÅ‘ˆáRd„väwÌÙ›Z0ÿ#X a O „ÿ—Ûû0ÿñÿ{ïüæù¢=}ÿMòßäžz¢HÏ Í3‘áa @Âa2>ãeÞ?!27û¹ÙD§<Ò4Á <),g˜LúBfbeFÑQÓÖfø¡7@âÑ8 ³ÛFöûþÿ=}ÿ¯Ú§pÂiý*õÌBe×4ÂjE„ì&šv†šhi!¤‚ +i§dÝg:ž¿;A36˜BÂwi&FÎÓN ÁŸ-2rL íÂ#¾þݶ˼)y„µôÞê”òï÷­a˜í9)¶‚ µ×Ø×õ¦—¯; D9fgKÁ¦ˆ@1ú.&:M?NËÍl•‰;¢lZÎŒÑÔÐ?ÞÍÇFEHÁ Ó—Þ»f Mè·ûË·i¦+%™nÐÓ‹ý×D¢‚ݠ§[â­mS jˆ õ˜Iè; wiÞŸf 'lT]Ô/ÅøÓUÙ*£0@ˆ¾ÒL'è8íví"áßO ¤]ÑvÃ,]Ë;RîR•ÐŽÂòTP³Y*ÿ‹Zh›Ò¿ß‚|=í$Û»ømQ8vÓ¿ôÿx×zý§qPØípš Ž.íZ4ØäÇLÿi¸ Â¯KUðšÚjè0Ÿ¢c¶NÛ$6§ îë¨zÒ|‰†(7tôõyO‚ ©W.à˜_ý«#‰Å/mÝ»µïNïüœQvÚwÞNôòá‡iz÷ïÿ`ºQt ’-1ô­27[Ó]4""Âd­4AªÒódsû‹M醟 ƒîÖÛußïêÞî®òq_uzL$I¾Ñq¾øË¨pôÝtîôþþÛ¿ûûýïO·‡~Û{­ÿþ+fNNÑ;—Œ0ƒB"kA¡FœDX! ! !:†>!åÜCxHÙ+¢w ¹7·Níz«âûÿÞÌ9‰ºnµþù‡ºH$©…¶ózœh·ªý¯ûüwëÆ›ü}ÿvë×ßþXJˆŠ8ˆˆ¸ˆú÷4;J›pôÛcZ û¯ÿz×ëüCCúõÿjú®ðM$•BH”Dñ‚õÓx¯_ØÓ¿ºÛwV§ÿÿöÿ~¿ÿÿײœ“¯—™1Þì~ÕÓ°ktß®þ>±k¿^é"ê¿ýZÝ×"ˆ ÂK÷ÿÕÕÿ_ø?â+¿ð^ð»õ·Y;_û÷ïs³C#Œ²bÐÅïA¶žÇý_¯û./õ}Q¨Wê½ÿ¯ãßwýÿûUgÝÿú×¥ÿøn¼˜æùq}ÌÂu§ïñºÿÿúÃ/…Šº{ïqnÿß0/ı×yü¹ò@xiKußgô¿“þ8äS>Õß×é­EÜóÿÝÙ_ÿúl$öãB?ú¯âý¥¾ïû?í1E¹‡ß¾xÉhÿ|cö^Ÿû¬yw‚AP­dU-®©ÿ¡ÎÊÑ|ÐCOÉsMUGÔ{¿úúñ_ÿüP7†ÿѳõ¼o¬'ßÿ´ðÂ;PÄ®“³!_܃/÷§%!~X‡Èˆôÿ Û¯IÔm¿dúþ‚ÿ|‹d ŒÆhB"Š‘ŸšÂw¾úúVï뎥†¿×}'ýkÝ^½ÿÿîÛWLªÚù¨X/ïíÕèºÿúMØ¿]úè5zwW6ÔÚÿ)ãÌ) i¦œ¸Ìô 2(0w´×V»ÿôK×ß÷ëÂÛ·¿ëýß¿ÿÚVæ«Ó;ý÷"q²Ó4÷üÝú ûx~ï›ýîþ™ßÍÿÂî·æž ¦ƒM;M' é¢ï¢nâ/ïz„ºÿÿBµë×ý—wÕÿ÷ÿ]_ö¨;NíòJ3Mv4õuÍ£[ˆz4èäô¿œU¯«¶ÿ™¯¿û6û¹ 0Õº\5¥j‡v½Ø]¦-vÛÍo÷Eã«jƒwNþE%.ýûþ×÷þšnÝÙýÒÿµ¤Ý=vÒXï ¡myÙ—áÌ9:ƒ§z®Aÿ¹ž¬>õm5õ÷bîÓ†Çjˆ€@Á¦6Â_±îÉem:OÝŽêÿËïun„z_÷ÿÿïßû†m¸[ÓÓmm[?þƒÂ|=Ž©„#KøùZ"œ3dˆ‰u‰Ãa{Ð+kÚé_ëöªƒlçg¥ãL'<4ƒ`ÃvÓpj£öa6¶Úÿ¶Ý{o¾ÚööÌ9' Ãÿï¶îÎO^ž©±_³Òªzßié:í3‚EeåÝÊäþ™×L É ޱɎPïz (qO¥KkŦƒc^-Œ Ói8m6¦ŽÚF» ©q a0™ì¤Cû öÒõǃúÕ…×ÿˆh}½W¯÷g’¶`ØjÅ' &š SP]¦‚(}…´ê-»ŽýS‡ØBÂÒ}ܯS4íh?iì}ûÁÄ×´áŠb˜­‘½4˜P‰Ó×a¡4Ü0„DDF†ƒB"#ÓB_û]‘íXv^÷l§ÿÕßÿÚjØ@Ócct0¶+ÚˆlS´Ï2(ø{Q[0áíX»ùØ6Î"S”dhí`ãM¸i‡v¿·ñtÓM0š `ÊRD0ƒXB"6F„Gÿ#>7[_¯ßûýÿ§Í`šlaZ 8ëdnšEÍ™²:¦”C ˆa ‡aO DCSÞŸò]Qé¢=JAñ‚Û·´Û8æ¾Óîî툉Ñ1ЈˆÈä—ÿù=IÄ>#êEBÿÿù­kÿÔ4í4 ϱ¤â"",! Å(4¡__%7„ Î8qfˆa4ÐnÙ³‚eæ]½Õ·¿±÷qd$–W×íS†ý]¿®EúÒm/²eDÝPˆÒkuífã¡m”D¡fð˜M4ðÈ£”=mÿNÒONý=ôßßùdYcÿúYíûu§¿_Ìa ŸèÑû÷üD\(ôÇã„Âi™æÏMHæfÂAá8Ü4-Ëwn‹†îÿ¯ßÿÞfÿÇÿî´Þõtÿ¯Á…»ývÁ+X‚Hp­¾ÓL&œjÚg ª.É]éÒÓÓÿ¿]kok ½Ö¾Éº†vRŽÀ…ûß³ë][=~¿ýÿ4 î¸v¤Ó`šµUW‹º.ñwOÚwtDí´Ý~ÛÒ·¯¯ÿaoð¿ås‚ 3´¢:þÏ«l'w + [¯ú´­8ó0€Ÿé˜JÔZ+Ö“àåæ›IÙ8ró·Z.^Ÿ÷Òþ¿úí~*×oø&ÿ;ZŠÓA¼C2ƒ(5M¯þØMŽEÅFÅ"(N±±|Öì{ˆ„ž¬=µûpûûÕ=ýuÿ¾?]þ —Èà'è?ýiêM7è6áðA„AƧ 0šh,\Pi’´î&zî¤Ü;U„ªDl×mó_ý6—^ÒýÖ¿ÿý¯ÿÿ°‡•6ºÒwæ½~ÓAÃuðïÖØh0@Áˆa dqi‚’ˆŽÂ‘®v()s;›&™q›L.8oÿ÷ìiêµí×ëð·Uþ?ZV/ÿéþø-Únv3wÄpÁˆˆ0„¡ˆŠŒÒ$w0¦„ Âa r°{~ þããÿñÛô<¸«×ÿÌ5ÿÚþ.É÷ÿÓ]wu— y7lÛy©“¢ˆ†36%Ññ—Ñ mx{A£²¨:á¯&Eñd~LsÀDuï…lò_yÁGú÷éþûM߯z¿µ‰)ZOÚ Èžjq³!‘è˜[Ȱ Âv¨CþžÂa0Ge0(h&ûNžåè„Fÿ3 ­¯³h\ÿÿ_ÿßÿiÝÐÒ+)×Óö™ÍLôÓLÐRq$g2 G÷M;mr‹¾A£½4Â47z\8¹Ø¸àò¥¿þþÿ Óû‹÷ÿÿæ·ýwW|7$Ùµ’I1Ú¬¨L‹M5PƒMm`ôœœ7‰Žmz 5»·ï[©ÒÏ÷AÅé4Û¬!þéÄb ‘ ©A™ÆÉ4Ðþ*…P¬0¬U¬0M´tÚM¥v» ¬;[E"½šÂ °šhjØíé'kÇ]œiö©…ðB›JÓbÓ‡ø  ¤ÓMŠãM6ÂzZ["aû†åK3FÈͦO„¤tC4ÓtNܼTÐ0¦…‚ QLiªV8¨ãVFé¡`š}ÄXMÞ !Ž©‘«ûþ©·ª¨L lwh=&)ްÃlRÓMíu»m2QÄÈÉ Éa;M`ƒP„Dæ¡6%=¤½ðÐã4/i©á0šFZi„‹øaˆˆˆªB"-ßÔ~ „§µN›P˜Zˆi ìÛ5ÂwD˜t"#»™e%³:k ")‹Ã#ŽÃds ¢c´Nß&öƒmWWˆˆ0C°ƒ*ì·@Ða0I1Ò‘^¾ö)Sö}bñ 2x¥ôE¡Ú¼¬ùÚvPdSâ! ›Î0ša‚{¹ÆxÜ:&íôè¾Â ×íú¦¢"-PˆˆêÖÛÆ é ÓµˆˆŠˆŠ ÄDDr®"–DÌá„É; hã3fã†h LÌ@¨¸h›¼'wh&Ð÷¯Úá®®´½üÀ»ºðÌ °k±—Q‡å¸²ˆ†ƒM‚þù©Áãf>"Ý©ñ¢- ˜MSÓ §3Òn›ïpypC¿¾Å_ÿ}ÿò¦•ˆLPÝê§ú×<tLwõ Â|[ië&î[Ô>ýÛ»†é½&ÿ÷ÿ{_†GÓ“rìvaÂ; ßOÝi†l·t[ß ÞûA·.Èá¶\Þ]ÐOOOW»»î—ÿÿ~šŠ¼]/t/çI¡Wt¾¶¬B&àÞÃþîÕi7´Ý5þÚOŠõþþÿý_]‘Åä$ü½þ¤V$CÿåÅ4M€â]Þþ׫¿Õ=?Nîé]{Wâô×µ]ÿÿåŽ&ÿõí4ö˜v°v×'Ô•ÿøûûé÷ÿãí{bÁÿ[ÿÿ]ÝôßþæŠýôÚ©nÂj6’_¯oÛîì/ú]_ÿÞEçÚûýÿÿ¿ÿÚvŸþ¬&×hÈ´f•å-û¯ü?û]ÿßñƒw¯az_þ·ý[ü°¬4ý©ÞeÖ´ÂaDì_ g`cU÷ßö” ´ßÿýÿ/VÃÕ{þÅwëÿ_fyë½X¨üWU5XˆÌ†Æy¤a$™.Ö÷ÿþPCùO¯ÿ¯è6 î‚uþai…ïûkÙýÏí…mmtãi‘Ç¢¡cVµ*Ú@! $eŒ‘­Â %Çü—¿oÂ#ØÛÿý÷á°}iûô}ßIÚÝÇÆšnŸͰâñÔ­†!ªwötO-.6aü?Á>ö“ÿÿöþï÷ÓO\,jà ӵô";i„Ï<ŠU\ Ùz&>]ûÚzôºxM?Pþ—Ûïú^ÞåEõ«ÿv•¤ÁÝõ±±M2P˜Nh‡‹MBfˆŽ3ì&®[ŠSwl<8F„¡ÒÃOôØ‹éæ ‡þ÷ÿuÿÿçÓgóí­ë÷!À†ÚáðÖîÓA„""<œ4]íP»\#³B ’ˆ' Pdpðêôýý'O’z.ÿžOÿ¿®»Úzß}×z¦¶ÓÐaá‚`ƒ=:¶í\v$\gcÖE¦ÿa[i>ê»ä8Ÿ<™E¹—æ¹jÛ`©º¿Óo]o««ïí[ à ÷±R(ôÂÚîÐŽ"/]nòpÙ8ä,3¨3Ü=z´’I$¡c ©Ëú¸ h0A„Ñ ¡FãŒÓ8ÉÆh* Ù'°°w§Wõÿíw}´“ÂH4kM7~LCêÿN‚ww¶Ãá«Üîž½úWÄÐTÒS3CÍ¿N-8vM všwîwúûNûNøg/µ´¡Å&´ÂŠ„v¶S¢t3N)ÿÿ½4Má`ÉsÆ¿…ÌÐÿÿ ‹w  šA ‹º<"c«‡Zwûµ¿]û„˜2æÃoZâ˜×é ÓDh¡ŠOÿâžÐWµ*FPŒDèáÓ´Á=t«¹nÒ ‡mæÙ€›²vÐ7‹†ï¿.' 4íiÿù{äWqîíøi¡Eº„F´ Ãû¯×½ßÎĵò†F‘ŠÐ0› ƒ qi­kŒOÛ Pk Æ“Ó]\‡˜MUB…AH-(OﯮîMSBhê±é}/˲ãÿÉR4Ž2$,™²èüy Ó4³„ ³’f­ïl§Á‚’Œ˜ýlØ:ÒzkÆÃýþ»´õýmÚ $’_wÄDE¡A;Tµñùwëdœ0žƒÁ3­’hÆ„5¿SÓÓšé©›´­¸·jh&ôVÁ¯ýéû.Ÿ÷Ü0ÿéwõ¿ªI$C±EqF¿ÿ.¯ùÌÛ@úTô !§h˜ýðûÅócßzºé÷ê´öGöþ·øO^ú¡¾êÕö¿ÿÿ_;)±;2‘÷ÿö¾“°E[÷CE»U 'ݧîO¯Ná¥mv¿í:Ürü<¦¯ý‡ZÿZ±ƒá/õi2âÛÿöš¦[¬µÿýÿÇÕtûº%}¿tÿÞ¾®ÇÚëþ×ɸtÞ ãëì?ïõåÂŽÞ—™Ó½¿Iö©¿¯™§ÞˆköÝ[j¸]:/¿býõïýúû_ÿ°Z4=ðúÛÿ_ý”4Qu&×å…íýìÿˆr¸3ð}ó·KöšöÚ{œI;×mu«ßþ?ë°oþ+ÿ½wÝÃëþÿÿЦõûÿטÿ1éá\BI5î$B7Ö×Üþ«ÄnÒ»¯õ¥µ·õõodq!ú˜5?þ´=ý•;·ÿ ÿ½uÝÿ×öãÿÚÚ±çb#³OqI-2 zvÇwj¿Xýú½û‹ÁýÿõA¿ý.¿þÿv߯ç·ÿ¿÷ûÛ¯ûõUŠAõF¶EtÉ}·I$g ˜Oµh&64òàï_Áÿ°~ùEÿ‹~ÐÚÿþ¾ü‘~õýÿ®½ðÏ«þ=¼Ñ6Úq¦U•Bj¹ØÞßåV:<üH *„F:J  µ«ú½~áù0¶ïð—þÿ]ÿíÔå©Éµ9ÚVr¿7÷kÒ ÚIªØMµlÿëž› ›½RMv„0_¾v¿ú‘M]0’v‹‡Þ"((P’_þÿª x*"ÿA»}¿lýª¨I6ÒNÕµcµ²úÚK`˜MŠM;cL-‚„è'¬0’´Ð´#¾ù4W«Yƒ3<Ò0“$Ø@Âhz»ÓÓØˆ°BÂý÷ïÜ}-ºÿ»×"Xó5ýôÓ°ª•‚à 'aXÚŠ8ÓAòQ u†¢˜¤MŠb—¡`„~ºM'ԘȶpÏ=;ÕÚÑ!ܘþN.êßt#ßÕ¥¿þä&ÿ®»¿óDÚÝþ ¬`™,1ìUXéëaZb"A`¥ŽšvÚvšÆ—üç£Æiœ³¦ éÅú[R|'Gëpšoÿÿøÿßû»üÂïß?}æ6vßO¨L$)¦AÃA„Ôð`„Zq ´ Á‹'è¥z”*\îlñ©>g&Pšd gÑrÁOùw~¼2ú“i¿øþa/ýïßwþÖ©ßíªl5µþÆÃÓV„XP„DMhZi𹶘A‘©WÕ0šw§ Âa6ðš.;µ»û»·^ïþ§¡þµº~¿uw±ÈÞ†›RÆÆÓ‡Á¨ˆˆˆdq’ Ñ“‡Â ˆPè˜gXEÏt×¶%CbTQã‡ÑqÝú§üÿÿ´*\_ÿýížÛ½m&Fí=î¶©:a0B"5‹5A1a…0ô 64ÛߦÔ>ë¾Ó½w÷«ßÿô.6’«{„ì'am;ãÞªÞx´Â nš Ë3Å#¾ÓÖ^ZHNÚ—L-SIÛpÂwjºö·t›Ç¿þúì-{kUøIRAb£`Èåè5\;bÁ0B- ³ŠHd‡ËÊ' æÍ?m|oA¹8{ûÿõãß]¾—ë ~šþÒÿ„ Ч‘Å„‚§nS¡„FœƒxõÐ×Ûœ0]Ÿ+{¯§ÞÇý‡kõì?ñÿaw™þ•4âBH„4ÁPˆÊæQÚDw☎ҞiÉÝ¿zÝ'ÿ­uqÿ_á¯`°ôqýu†ÿ¯à‡í:Ø&a€„DE¨R)•!J@ÎXLû×ýÛkßÿïýþýX?T›Åé?ßÿé{=ÚøˆŒÈžhÓ!NCF­u /ƒ¿Ý‚×õ°È®ÿÿÿû¶g{BN|4ŸÜ­nþíÕŠúªw•P 6‰MÇu}þ>Òü0ÂüQWþ¿†ÂO¸vãÿ=¿ùù×D<ñµÿ–?vNá—<'v¨v²ö¥ÁH±_¶'ÿÉŽc]üþÈ}›áý¿{é0ÖFôØpÃLßjƒJô¶¾)þm‚éÐõøt ÿ¡®ÿÿ÷¯Óá»ú z"„kza„+ñÅ}Þ¶Ü©2RŽ™¢FðƒMkôz¾g·Oét—ÿ[þBN«v}Òi‚a;^)„Þˇ-oU;Õ/ÿÓEHè«3¤¦¤Ggàši¾7¢pÿúïMÿîïôó§ëwÿzm׺jõÐhêŒb!Çäm‹aJ†fͰD_"yÈèû]DgL ‰|ÍF™ã6IšF‹vXÎO§ÚÝ×ßïì]­úi¦êí8ã·Ú„"Ð`ˆê]‚5©’¬RS¡"('Ya“9ì¾!&ã4 >Oá0ƒ0A‚ÈäÖ-ü–CUJÝ7ëg«>ÓƒÞFÖa}Ÿï‘Çi¯ñ°ÝZ§ôÜ‹¥ ’Îi„ãÁN[†Ò„ذ‰Ã`•ÓAý¥Ýˇh±í‘Í\2y—nûî»_§¶u]´ Óö4Ó°›=6ÛMƒôî ÂÙþϙگi­4]´âÓ»WjåÃd¯M´Â°Ú$û¨­·Pòï@ÛòâîÝ8wjÿü+í±I¦ ÛŽ›V)ÚZh0„DE¡­‡ Õ}©‡åqòU“\Rt^6Fí¶>á ÒAÚm'ÃJ ¸¥Ã½?¤í:Aÿÿý7kEØC<؈ˆzið„DDEPm s1ML†]?¦µ4#8Û2A'I÷Ûa ûTöõ»¾ôý¾Õi}Ûîûÿÿßɹ„Dh8¸ˆƒ $ÄÙ7  ˜$ø‡oßQQÎÉ3ù̉çMBi¦šwõuí÷ˆëÿ÷ïü9tÆÂ¿øÿ_ÿ·ÿC­àÊØ·-ðˆ±F‘¢ ù< 9pG×õ:¢=œ3†TÚi¦}XA„!&Ä=7¦¿}ðºú·¿§ú{.o~£V©ë×Ûª÷_ïá¨h…´ƒ³bÙ8„v‰]&Ñ¿ù ½ÎÆôÈE”O&‹í4숷ÚvšË·'lãEÃñób/Kt wõÿÕÆ“}ü·Xßïþ¿ï÷í²# oc$ ›«Hi÷½nb®D2B90‰‘ØLûDê #„\5W¤ÛíÔæó—¦ ïô¿ôë×ÿµõ$5w{èõþ*×_þè8–QBz`ÎEô4ÛA½-'ßßo ÚihM5[µTÑ8jÒM¶íT×vŸïIê÷ë×½ýåÕžkÿûÓ¶þçMïÿßÙܤŸ1þÙé0h²5®Eˆjƒ´i¾Þûý`ƒ Ú 'w5é¶¹óUhœ>·÷VßpþÛ÷ÿ÷÷°¿ë¯úþ—ý9XSwÿÿè!ÿß"]† ‰Ù|®JÓ¦ßöýÒÒÿû}‹— Þ\0]þ¿}§¯Çÿuÿ_¿ïoÿ~ö×ͯÿTÛTÍ+¶ÿÿÓôÓAÚªiÅdm&W*”8w3kkkÚIÿ¸c_ ]´Ë½wݧüzt½/­ý¯é)=~E¯×ë~·ßßګ홤Ò6já„—Û8û^þÓáza8Ø#xa4 ߻愫§ö=Ýi?Ã÷`ý¾+Ú±®žñÿí§¯·ê¿Šìãl+«ÕŸ_r.=-6ÂAkðÂ` ¹€Ù†!b›fÛi&ØM4·ƒV ‡Á¡Û÷¢/d¡Y ÌØL!¢nïø}ªÝþÈZ£ WµÆ÷°÷ªÿ³ô¿k/T¼½UŠ´­XÐq Âm‘ÆšlR 4Øâ¸M4êìla6-4Öì8ˆ4")¸>9¯9Ë&@ iß ö¾•¦±ûààëûµØÁä9q×^—²Eí/í4Æ…: ‘Æaн„ké´I‚;%e!Âi¦"¶0§ö)Vœr«M',§ai¦ß/;_ì?õø{r—ßCØ3Ao ¿öÚ‘VºH›ß¨OÿØDˆ5°ƒ@Јh0„DZ 0BaâÓjA‚ 8ù6ƒ:É’À‡Vd;6mÚi¡¦¨¸h¸sspé]Žš\­¿û{wÿLº¡°¾°‚ýú ß Ÿè}ˆŒØDDDDDDDFûÊ[%óÌÔÎD+9AbIœhðŠgI4 ¤¢÷EãDí«zA´]Þš‡Ä-¾Ûû½öÙÝ~—Xtn®©ÿ­­ý/µ¿Û·¬Ô0d“Š}„Cö5MšBç«4oA¢á²;l¾nî‹v‹€æ‹Nè¼n4Ù7ÂNÃ'šot]µú ã÷®ãj¿ý·Uæ±îøaB_7ƒäø:Úëýÿöÿ¹ÿt­«TÝÝ´ží: L„…Ò g šl4ûnî“ÐqiÚ¤·Ñ;hÜ:ÿ¾ÿôÛ´Ó_"°¿Çwáï¼ôú¾Ôé&ý»ÿ{fúæ;µï°œ7vœi…°ÁB,"@n×Øï¶¯Mþ?«œÅÞ»Æ[½}z»½oÇè›—õÿ!¿¾ÃûÛ¶·î·JÚ_Èǧi1V©¡ Øâ¥:&Ô¸Lüž1‘–ä¹\I ýï_ÿß¿pûÿV×óýûß²ÿÿòñKÓÕ ¿ïîþïôôýþÚL•»c@â¤oŠV“d‡m4 "t›†„E¡@ž¤š33(gpfE)ddL3 Ãì?µý·zö¾}`¿Õ- Dth'öëñv½ô5ßþþss‹¿ýßßoºNþ)Ó Â“t &…åZ ;B"W%Æ©íL…äL2¥§{ðoÇ®ïC">½žû#Þ=„H}ßÚ^˵õýý[{uÚÝ þûõ¶ÖÒl%ípÕ8h3l!Zú ݧkUpêÓ^ôD¡=}]k'PwGºÿÑ»Uô=ÐÛ[ßöß[NJôŸû·ðØX«Jä üDDF<¨w vŸi§ðn¶mýýÜuÚ¡õÿz_Ü»?þÚÙÊÒ¶.?Ná¤wºlPj9gÅm9qxw×µâçc™.ާáÿïº_Áí½Ó}ß»½¶îÖÙ—cnøØãdc§ôôà¦væ{3BžŒÐ°B:ÿ3³=5|ÔfǮ䈜E$0ˆè=þßK×o:§n+÷ìýù…úG?mØv@ØÞ 0Ó†¨0„_-ÎÝ9‡ʲnÅ`ÁˆaâW:¯’Háš2C1‘¿Âa0ƒ#Ê™Ay‚OÍheå;0³ÑÓP@ÓA4-s­ÝÝŸZV–»fi>ÞÏÿg5`Âë¯ì]§g«Ðöa1„ ¦E¬ZNƒB""ÓB9¤v[±J3*Ù@Ñ :”"ýd¤`š`ƒCÿâÓ>ͳ0ƒ3ø‡Õ„?|RȨKƒ0œ·öȯ—žªÙ·a8á…†­›v ßÓœ3ÍîŦšÓVWv„Õâ#숆çbÙ ì«ÈÉ4Añ–žžª‡y±:ÛNûpóE†š§ ÑûMi†IÝ Î3` =Õ¼'h;:OÃT펢ÆÅFÖÔ %A°™+TƒAª"ŽÚ+åZ:Š+ˆ¨&@Å85 §ËŽ¡Qpô[ÓOýØD75ÚéúvÜ“°ÂEãC“ÆírvÚpË›M8¹³ºÓj"íзMÐ !´­ Á`Å81XaM8†¼Dï¨OšÈ¸ºûîw@ˆ÷MËBDíý4ôû¿ï´m¨N¯Ý×§Ão/.Ó'käó[mýxˆƒ1ˆ³…„tG\DD0ƒ""4Ð0NЊèCv­ÞƒôáÕà®ߨAþ÷ª±¦ŸÅ^^iïÃ]?[‡w±ú{äb¦¿ïŽDDuÙvœ]»^ñÞõÕ°¿¬ø~4úîû¥ú¶ã]ÿÆÃ õtî+Á£3Ú~½òK{ݵÚü VµÃÿíq×K^ÿÿ_Ø{ü&ÐA{ýÁ†FlïïÝbæòÌãÆÿ˘ñü/ªÁÿ}Þ¤ê=ÿóA5ìŽ'ðßî]o׿ñ2pä»÷¿ÌÙfÏ*óŒ†}áƒMr6ÏŠGõâÿ¡÷“ˆÃûÔ0üè:ÿb°¿õûë éÿâF°U_r*ŒÇzäm<ú#Šh46âÑ7ní÷ÉÏ÷œ}u¯Ãu…YzWºÑ8ÿCø7ÿƒ{û~&@‚™f_¾‰Æ|ï°B˜½ nÖB ¼p›ÚÑvÁ–+~~fo/—źEÜúð÷¢qÿÒôõÿ‡ÿ·ÿÓS"‚’%ÙÙ¨†RRe!'k/ù’¼ÅÖMtNûIKËRpÜãD¢Ý'~’ß¼_ÐK´íÆ“‡ï¬ç~“ÿûU믮ïÌókì_išVKÞÒ²!ÊŒY¥i;™M„>ô‘võOQóf›ðîðœ7^÷û~ß’þî¼þÛëé‡ú­ÿÿûßò5jºØTÒo´ß;5+ý7i¬:ío”#Fp…[;¸É:*ó"¸È*W“nÖÞºÿa®®œ‹–ë½é?q߯M·ýì/¥þa[}¥ßþakëÿ±Çiªl¯;9>« 4Ðvéñ%r…•BŽÚ¢næËEPf;;;A¦Ÿý5Ü›š÷¿ãî¸oûu¯ðËÒ ©$©jAજC‘GNc]8¶Î?Šh.ƒOÖÏ_Þ˜M†jƒ‡ì!a6Ö;¿¼'UlA~mÌёƙ˜µ‡ß/´íïäïM¸Ð¿ÿÿ»}ý¶¿âæÿm¦šwÔq$ „E!@¨0š IÐJƒ‘vœqÞ¶’¦Åµ@Ó†á÷zÿòLÓ4G ÓP˜@ÐŽ» ñäã×Õ}7öµûÖùDºêLO×àí´žaáÆƒXoLŽ0•é’­4ħ¸i‹žôIB¨$©„ƒ ! 5#r¥÷KÞô<‰Öqš „ƒJBMÜZl•“Æ›ÖÓÈÆhôGk}Ó~çPŸ½…üú{¿¿¾Ý‹þg/ý’Ä› ¼DIá(tÐaehV±† š_„""’J‘«L/y eÎôx•m=œ.4˜h'“·.-;rwwQÛº¦"¹ÚTýÿaÿö=t'¿ýýõp÷õÜE•ˆDDDDDfXB"Q3®Q%¾F…ó<&m„Σ.’ ’@ ©%I$h"a$‚Aö¶JÜ»°þ ßè'ÓÕ‡ïå>v©îb!‘ôPfdUCÑätgVjˆ¡{jíáÿæ-ÖŸ_ÿ½·ÿ×^""â9N!œzÐkªh^`ï¥EŽûºÓbê¨; TIh$ªI ’I%ZAߎmgÌ)Zô}˜$ɪPza"Û2`(Hû(3ìÁX aÏ0ƒ jŽ÷Xi?Þ‚÷û»õuûîút¸k ¡dç¢qÐQÛ ÕÓ×EÛ„­tMì›ö¾ïÓƒ{_]ûáCI*f‚†{6i”“3q²  !˜RdãPƒ‚Dݵ¦‰»DÜ D/и´Âqh3†„BWþ-·×µôïmX}ðÒÚÒÐlllŒÔy8á &ìÁ2âí4x¿Z}¿þ›v´ªÿõ"ÃÅ/_¬Ž#·H»†öŒvš¦„=í0žŒþEvf ‚aé„[Š ª"ú“H*”7nNÚ.òí²XÑxí4ÿ¾›UM0¶`Õ;}nqI¦Å5¶ ÓM};'Í~=ªwÞJ/;ºWIýÿzJÿÿüÒWªOðp®[°w·wc|ØMÉÀIÍoÉÍŸmÿ§§ª©;H*AaÂIàÐEâH$¸Iâ"(‚âí4v˜bçŽá„-1V!œp¡_·äîäÇñ„Þ—Õúÿÿ²8¿[tL'þ[˜û¼3 8õ={AÔ>ìž~™(¾ï·N‰ÅCx¾ôÓ¿ØÿOÓtë×Z»N•àˆ| ŠDtI¤N–ki(RËAˆƒB"#,¥ü^¸N<"wúÝwº®¿é+ ô8¯øÓñëÆ××z{éµxAÝìzêë®㯯‹ûÿÿþÞûíƒB@Њb.""#$ÑÚÌd²gf¬;¡šçýw½áÿÛ_ï·¸¤¼º¿×ÿ_»Òðü7ïí?þ=ïúO»ƒÌÒ]FUº¯Õ2÷ýÿâ!‚4ÍÂ"HÈ=3°RMl‰ši©?ò4êî¿`×b±ÿ^Ç ÷_óоþÿºi´ãPn±ñW«ZØõÿ°û4>ù70Õ†‘@¿÷ÿQâoÂI•÷V¬ÓÊp»Ó„÷^mºÿ¼Ñ|¸úZýëñtÑ Dåÿû×ÃÖ›÷[}†©„­º¡DÇÅïý¡ëþB:â¡¥{…vƒîÒ’Ú.ÿŠÿþßOþêz«ó _µ³nû=j¹ûÙLåPþfÖ¿ÿ ïzãáöß@¿Ð@è½ ¿þ¿¿~Y>¢¸jí(ËPÐwiJ¤pÎ ôŸìÑUÿj ÿúÚýûûv~ïùIŠUl*ªl/@Áöþ‡×Ýxn×´¿ð­Ð_Õôÿ¿ÿöÉ,d—¸ô?ã„ÕLÌј4õõÓýWs›Ÿê¿é:Òï¶Ö;Ó¸ªµŠ^˜¦„ôIþ»¿î—ï·×ǯ¥~ú¿í×{ˆ”ùÙ©œGÙÀŒ¤h>¾wHÙyÿ_ ƒUDÇ{û명ûýûÝé´°¯ÿ¶Ç„ksÀA Â#êhD0‡ÿ…ÿׇ®‚(p‡z7·™î¶¾Ùê»#—ÿ}ž›=}¯¶f³#X¾I²¡¦»ƒ×åO¦fÉò!•‘rVÊš#¡œ3ÌÛ6a0™8ÂdH!œ`e $’0gØI-Ó½×_»CTãNÕwãbpðMÕ‡L%éÆ""" kª_ûêrúïÖýÕá…´â÷ðÕ†¶švÿ¶ÎÑ!"Ðô…´Iî —1ØS]„8„ =£†ƒ 33 “ˆ˜@ÂèAªi§qhjÂdá"ï3Ô$/pôÞ˜M4Û¶E wK %¯†šAü8†ìCÿþûþõÿéRS ý[ Ll_ªzhTlR§½…³\Ah±ë¶èwaÚC ©™0˜L! ôCÛ°¨¸ á¢ã ÝÛÝ‘ÞMÒ'm¿A§ ½w¤’JITPP©‚´‹½„ÐÆƒº *#hCȯeUûI?ý%¥ím5²åg½o~è&œ^Â{‹M0œÎ˜(W‡L&Åv½ûCO¸q¬·j;ûa<±Î=ïI°É‹—›Ñ;íí<&©Ù/¿vmÀÏ‚ªA¹¢±nÉe§¡mÏ9³»KîôÞûí{]»Ð|óÛ§úiúï²8˜¸‹%DDEŠ+ßÂ`ˆÿG%§ÂµU|q°¶9jNhDDDDF› Á~ûùœdŽ`‰Ä$åu>Ïfq¦GÌÌ'—ðjMØdÞí7¶¾ûÕõÓ}7øÿãú^ítþ£¦ª·T¢"ÁÉ)‹Aù¡ ½+`„DúMØCFЏˆˆ‹_î¹:M4ïMìá›$ÿNJWD²+º½n4í4ûþÛøï«ÿþúß×î¸×~Ý¿dq|q;$È5xˆŽ)Ј¢çaŽ–=úfq«³„…’5¸´›ÿwþ\> ¶ ôëj¾>¿ÿkôÒÿÿ¿é×ýÿÜŒ^è}Ë)nv(0ƒ%“_kN,R­îÅ™öž¬Ž ‡léÝ÷ÝߦŸw±°tý÷õ­Ãÿ×ÿøy ýúõðݱÿþ±V­dÄo\Ù mÒ­îÓ Lˆ@O¾ÓKîÐzKÿ¢|]ÿ°ÿÿþÿØ×ÿÏ„îöîýòÝ:;W‘¿j‚I$´¡Êy4 Kú„ì0žúM˼­¿¿õßÿù>·ïþôÃþßÿ¯úEçýô]î¼6Ý¿z †ƒ¯ìXDÝoÂlC´NNïoõ†þ¿¥]Òá÷^„7ÿ_†õÿßõüê’÷z]&ÿÁ÷¾Í¼ª³°Ù*Ûø¤æÏq wdá²tg8`ýªÿݺýí¿»­¸ÿÿpíÿýÿëŸÇÿ_Kÿ³cÓA¦@òPù''—úO Þ"$Ï+©²–áïAßt› ;ñ®¿$Åÿ¾¿ý‡ÿÛì?úæ×ýƒö’õ¯ÿÿþ¾mö4[íÚo ÝýÈÈŸ6hf2*dR-üˆÜAQ? ¿ûÿ¶¿¯Ö@ÏÿÿßîºÿçMÛîûöéTç·[Ÿÿ}ÓûNE¯÷¾¶¾›ôÒa­ wÜk÷HדÅ9Þƒ › †ºw`¡NÖ taï½=W¨7ÿý¤ÿû¯ú ÿû§ öŸÿÚ í}=°’m…m+µ†œ0šiÈq1I§k­¬PM½qiÇðÒOý‹¢YzgÚa|Ó5nÓjž\=líb;ƒ§Iï»_ëê\PzþÔ§ßþÛô»\?ÿ†c†¹ý4ð”i½&¬R!ÆÅiE„iÕ´šl_ÅÌ:¸qBË$¶ãçd?ó™,ÌÙ ÌÌ8ÏŒœÓ<4‚ AÅ¡‡lãj&ùžToíjŒ:J’ÿ¿ÄÕ·¯þÅ_þý~þýþz±o &ƒ ¸$ÖÓMŠ -ß l•¦™ÜŒœ0É’ ”4aºiúÓ¢$#Lá“¿ûA ˜S†ƒUTj‡n‹†Èï'Ûÿí®ô[­'_"¹">Ê"V¿ÿi7¿ÿ™Â¿í(qZKžßt´î+4ÓuM4! ÐâžD„0ƒB"(ˆˆ`× Üˆ´Êu’¥™O"#ñ²Aš‚i„ÐÝÚ‹ñnú&;üeÇ ´é?_é~+¥ô*Ož2X>¯R„]š0™¶ Ô’I$’ïký?«tí`•ºÞ¶’ÚÄDa˜â!‚Pâ!¡Ôg ˆ.2qLÚi“½4×@óšz!Q’¦Û²WiÞƒ»¢y¶©Úº®»/®F]k^tˆf˜M2Ni“!sH0« ;âìã0Eÿþ’JH%ý¯jšqö ‘«µA± ×†ã´:pk¦ƒBÑ1ØCâÚDÇØ@åÙ+h·\ Ú&îœ8oëwwqÿíÿ~"¨j¹%Î3ÆN<“f áJa8=Íša˜@¦ń¡Ã»ƒ#¶éÚ_ÿmÞúJD †‡´í! ‡„iµ´ñØ2?ÿ3âaè“Ù' ›WdòÔ èZ6îø?¼ Ûôíÿÿéß×ÿòÓD@o0GI˜M2qQ´@Ívqâq¦¡˜Ó`íSFºvÒ¦+¶í´û._ÿÙɆ°h5MÜ8… `H);&?MDa2l>Ä' x è&Ý÷’{»m+rOWÚz»§ÿïé¯[^×®•oÛú`ݪ.ÚvƉÃ3iáh0‡H›¹ya4î4‹¶àԼˋ_µ¿²y§ûOµcT 'ƒHW*ˆˆˆˆ‰ž#A‹®µ’ÛiñîÅ+@ŸßöƒuoßµûöÞ>×{UßÿßÚMÓÃ#Š›ƒ­ÓhÑ ´„zú&=¼0PŸï ýñKk«A7µãý;Ótša6Âiµ=„ÐoÄE9PÄÇl!+Š&õºõþ»þ®ŸõÛÿ^ÿ_þ‡ýßÍ¥ÛÕ곺 TÞž·Ø$y¿JÝ_~Ò[ 'Õ]­G®šëü&›pú °„C)h!#°¨*þ÷¾X]úÓß{ÿ¯ÿÿ|Ð'ïÿþÿùõû}:Aº­.Çý§ßªoúÅÿÇàû®µ¿ý;îÕhzäLÈ1•³:™CwŸ°m~¿Æ¿kÿÿÛt‰ÿï~ýoµm>¯þ¿½ïüw~ÿëÿßi{úeï$_^ÿøˆýeC5¥dTCÃ2·Ø\!]ÿÿ—WÝ/ñÿ|POÿÿëúÚéÿß÷ÿwÿâév¯¦Gû_Ö6þ×ô+ÿÿÒâªwQ¢ý;=§÷½¿—_ÿÿÛK~_úü>¿þõµM;cv˜¯ÿïÿØçËÕb¿è!_¼±ÿðÊ ¿ÿ¨­£µ‹íÂi†0‚M'ì‘õá»ßûß÷ýGÿÿm&ûKVÎIÛÓµ¡÷ÿïI{¸":þ…¿ýÿ½}/e¸Xdöœžrj§A2^ݦ½üøC§fàÿÝ¿O½ö—ú¿ÚM^»iæ‹F¶œ7÷hÿŽþÝÿ ÷—§Ýÿí¿ÿõÿÿ9\œ'X‹¾Ðoõ_7é„0%êrw_Ï÷kùýÍ;öÎŒ”„.­lÍZv·Ú„8Õ?paˆ¯ýrÄÿxoý'êýµ×γÝzï÷÷þ¹Øš%¤¡7ò¤¿NåFgž@³ÑæHó‘×pè“Ï W÷­Ã=m„Ýo[W_†ši§!ùŦ„ض+Ø´ÙÃÚ &ƒB?]ÿ‡k§¯ÛïÜÂïlÍuþaZÙû´ÓµM:Ðe첬jœ&žƒþÈÖNÉѧæŒ © ¡ ì g˜Aœz„"!1}âhì.Âÿl0TÂà „ ØKV)4ûé¶ØÙÒiÙäžCBЈŽëÙ„¿ÿA×ÿööÿ3_§j¶«®ëݪp„ &ÚiÄ<§·w˜}A=Âf á‘)ðч“ŒÐP `žáK4ÂkJ‹L _97m?Mð¶.I¬PL5L]¯†*<0NÒ3¼Z4M43XBÓDDïõ¿ýósæ>ÖþÛ³5öØMîøÒÆš°Â lNý¬4ÚiÃÓl8w§zÞHMl‚gÙspPŸÓ„¦Æ¸DÝ»¥ÉÚעnÝ™00M‚´H}Û_ã²+¶6†B-`…„T!£3hDCˆˆ¼4“uÕ³ÿ}‚Úújœ;ûl&Ã@øänâ›»M… Õ¦Å;4"" _í´ï¨è#[Éû„º¦‡ªþ‰;‹¶ýÐmÝtõïè'dìi„ä*…/0ƒ~£¯˜ÈcØMˆˆˆ`„Fxpâ>¤B(§a0š¦Å_h4ÛOáÅE¢&'všØLðTM DF§9½ÿýáPxDN$_—i¦šEÛ{i„ö«A°ønM÷ÖíÐkÛÞ>ÝIö]¹nÙ#Òé·]¨ÂxˆˆÝZÕUÛíFþí¶0»²7TL ÓBªD0¦ÐˆŠ ݧÍKòLãoI¬„NôÛ»I6É[“»µþÿ[A÷_ªo®Æ?ûIÒ †ºëüÐ% ü0P•É"ÐvPé¢OÂ:¦¨DIÓ_°„DB"""qøç3«Î”Aé„ÓOIy®Ÿý¯¶Ðw­éØMjÛ‹]?맦¿ÛÿNÿ ÷áŠS%6ÄDCDI0B-ƒ(ÝQ¥g`ü  œµ¼ ÐÒDíÇè¼zAæçýS¯úÛû¬S_UÇõ`åŸÝïWOýÙOÑ;øe(ƒÉZ;Õ”"Á_Yø·i¡»ö¡á6ÉÆÖ›ñWoÖÚÇÿ®úÅÿo¿mrpŒ=×§[."ÿÔW­w.â © Ã‡ìržL*vDÝí¾‹¼¸¿»ÙþÛïÚ¿ÿÛÒºæß®’Óì%„½^+¿îLOº_MäÜZù‡oXaa4Ñ1è»áè:'wî›H>»ôßðÿ±[Ò/]w¢1×úæïV+Eóÿï,oÿ´šUûÞdìÈ6v/¦]ò$ò̈~kÂWºWOO¯¿¾;v¼ý‚ßÿªE÷þÕkÇIO§÷ÿ®¿÷í´Üÿ·•ª“ëOæqó,‹Ëxz}ׯëú®¯ïÛaÿ)ûö¿ÿ]ªmu3_¦ÿi}ù¿ïI8‡jàžv¯}]ý¬‡™.°ž‰Žó$ˆ·+‚pÿ¶±¯ý»ÿÿn]Iÿ“ëÛö“¯þÝ.—ú~©¤·ý¯¥Úûfj0ƒj0é÷_þ%^àšfÈàMú™ í\v7'gc]ÿ aõñÿñõÿ·Y ÿ¢ €êöºtžì$š`“A(¹ 7w*¶’kÙýþ)0±il½V:,tø®çbÑŸ„ÈLŽ‚Ó÷WutÁ3ºMÚ‡ƒƒQÿÿ‘]ý{~ïø{² Ъ„^¨eXl 2+¸0›õ!ܘM6­+Ó¶¦„"!馩|¥å&˜Aèj­rqݦ¿¾ýðÛ•‡í†ókæ×ÿíÞ{9×NšM­‘Ç &ÐM0í á¢ŽXü0 ƒ¦ÆÚHaQ¦B#â'hJwD‘©ó’!ò¨Âdð"ÿJɽfÆíSïm|žvµè5⟆ÛÿWÿÿo»ý?="kEàÂJDñešq ¥@EÓ1Â1Ik0fÆN)ös52dƒ‹òq ƒá—3d<ÉwÚiÃRù§Œ Þ/ëÿ®õWáz"3Ìa(Z§ðƒ%‘ƒ4³ÑC&rC30š ‰cAÃBïA¡zha&7ˆhŽþztÞÏwm˜}±{ Ð`ˆ\aº aš N¸0„X}Ã&þŸðÖýíáÞŸöº|v¾nôÝÿ÷§ÝZ“‰üÝk5 * &¦ßÝØ!i¦ “£ÂˆBäI‡¯¼{  ZmÒè6^7d¬ZÚ·ØM5‘Gnl{\Ö„0†ÔDI´g$—ïMøØ¥Tö5c׸ýõíÒðßоÿõ“}…ö˜³BOôÑ]ºi±†»nÉ[vNáÙ'Ë‹† Æ‹ì»îí2c¹;Þœ5´˜«ÃNÛ$;PÂdp„Y¥j@™Êê¤RÌìLÊü+߆Žý‘Åïixwÿ}¯ëö¬?§þ¯ºEç×újltÛ8ÍÔ +aÝÑ8pîkrj ¾HvËmm;Óðƒ¤Ü»UW_»õAêü ⢚ Ð`„4Ð2ƒ<4Â"® žøû_°xû°ÿèÌJýäG\Sýý½ô’¿ý7i_p˺´öïZh¸¤ô‚´ ÝÚkwÿ}ºw{§^›ÿ Þýï æëo‡Û…ça/Ô•yuXuíì?ë ÿßɹZ=¯íû[A´ëí=?òáþ×Z'zi]þŸjÇ÷ÿ­|t×ëÿñZÄDaÄ8h»þNë¬û4<7ýá¿¯ËЇýLzúç÷ýŽEwàŠxûZé=7޽7ýé}㮿þûü~5¯ÿåS¾Akó0…!VáÏýáþƒ¨?ïÓÿ¯¸o_[û¶N­0ÈãA÷¬&Úã¿Mûû×Zù@›ýÿ²Ç[êÿán“ÑOŸnJ„xŒòqLÈ‹g}2!2ŸÏkávhŽAÒÿìÿf¸7z˜¯?û½i|Âÿó¥V·’l[±jЈíÖâp/¯û×U|=ýÔ¸žÿ¯õú$ÄÿóïòlTÈ'äÃSf|\Šààƒl`¡F…A›3è¼C"¦CDC‘~`!á ÉKˆdⓌª" —eá ´Ù±„­'všlZÝYíêß1ߪßë˜_§gõâ@Úb“vi’´{õ TWýaúoc"—þ6×¢ïÿëßÿáýé5Ù’¼ï4ÐmíÃÂè†üÙM¦“a Úa´‹ @Å„A™„>!à]0„Yà»îÆ‹î;Ó ¦i8ض %¥aJ°ˆ4Ы¸oé¦Ùæ6NVGi¦q¢vDD{tNëýÖºý¯ô:¤ÿýú_÷áÿý'ðL•4ÝüžC²cÑ(Éä2Ⓡ”B'Áƒ»I"na—Ía¢OØ$OdÞܼ¢NÑ8i‚$íØ&C;Ñ;~-\*dQØAû†é¦6Ž£ˆV¯Pm„ÚŽÓc¦*(0…”ºúë®Liõó'ÿ_ÿÓûê¦=Ö¿ÿ§ó´"1÷nÙ[ßMô„§¡iºmºý¨#_ݼ<-Æ›paK< ôkTÛ'Ða7Wñ FxˆˆqaG„FhCGªhXF†"¾~J¬¢í:û®ÁÛÿóëý­×ÿg«ÿÖ÷Tú ïïKZ½uíY-·U{ÓÓÝÓÙÂдûucãN÷í[]æ?ÄDDDqˆ`ƒ)¸•¨kÞšîú^Þ×vöý;¤Öÿ[JÛVØ_Õ4×÷Ê¥ÂÞ¯Ó³×w Ú_­7‹¶êŸúôÙþNË˹ØÜq‘hÛ"ðž`Í0ƒ…'tëûõÔæ†ãý]ûÝ7½¯Ú É;ÿÞ×N×´ÂyÙi‰-\¢!a°…nçV¢"hDZšÂ5!iŠŠhXL ÏaˆŒ(B3lha†ƒIéo‘o LÒ4eÑÄu% ¦™Ëv†­¦xjœ'×WSÑVf%m-Sáž}¿ö°·g´Ûlü¥é÷á¸OªfÅúêÇÅ®§sÎÁûZ¨‹ œ0˜B#B¢""!>«ÊxÐ!0YA„a “ qq®¨¼qåÃÅÕ°¨8ƒA±L\Sm½ÝZÆÅ6qá0š 4í$Õ†\•3u[½0ß} jÈâ›w‘‘òs»0s-UÃËÂò¯±B¡¾?îìÁ„Ô!‚ Ë{¢pÃ'vO Žéåæ›Dîîþ“ôÚ 4í4›M6 PnaÓÆ­´>=Å1PÓ §„Ó ˆˆ `Ë ~áú¨z§¼ˆÂ Çþ-ÑwÓDãPƒè'¦ÝÎ?§öƒ½tôó© âdœ0òú"ÉàE â1L ɇÐa†Aª80™b˜½ÚtÓi‘^- 'úkÕáÌ ñl7¾Ô“·§Eö]ºß½ëvµkûõ¸ˆ¸i""a(J""3X!>˜A–P ¡p£˜7"˜LŸEó¯iÅÍa¸“cØã;ØÖ“¥·mÓÿV?v\Mô¯¿Š§B"ž""-(D(Ât=’(…(8J8‰‘(‰‰˜f´H²Açs‰4ëÍŒØÏ‹B ñ>0Á"8¤NÎdÙW«ÛW޾ݯõíÿÙqéEȘ/— L!!„ÄŸ³AO aPƒ4†\ͳC CBpa3d8~‰»j¸ ØPžÞȃLù“LŠåYH3%1’C%wõÁþ¸«"ÿï÷>Ò½eBˆa pfö‰@o/¨´]îkh6.kÈÝ„NvEw²,A4Ñ8¢pâØ áðî‰ãEç—më‹Â`ÝØ& ¢0f¡2Sìç§M:×áú—{ׯôN>þãÖÐŒE‚anA[/ôßã/M¢ñ²yÅ‚|8f´@ø5h“´N5h á“ÆÓ´ÓétúN¯Èƒ¦¦ô’wa î¤kÛ÷g'Ãu×þ‚}-x>×’˜ÉP„NÆleTýëH0ºé7OtíxÕû  Ý:Mvîý޾¯Ów\Ê) Ìé=ÚµùŸÿ¾H/¡!¿ÿúß¿|Â_­½„õºn¿п{ƒ\{zkéïÉÅã÷ÿS¡ÑS–rÓA í‹ß›Wë‡ÿß×ÿÖîÏN¾°Óºgç2FE¦úÿìÐFÈGQ¥L’ªí×CRng ÿ<2;Ù‡ÿµ}™§„˜gÑe¥[(<(D+’OME܈Ú4'œÍY*ÉÈú3ϲ3ÄxU"²¥úv§'ÖïöþÏ]¯ØV*i5Õœ­„ÙŒÈJÜ59}ë¦û‚ƒ¶m ¹ÏÁ¿>k«R$'t#ûè÷êºöÃ=0œCgŒàaód ‚š š"8ÓÁ0”ÀgF``¡ù ¤ Ârn pðƒÁ Þm” ýw¶›™örûé5O^lCcŠÚ…ŽÓgQï¾ßÿZú'è|}Ï÷3oßÿ¯Û[û1ÚlV œËæ‰ÛöÑ;˸dÿr)‘q¡Tÿ6âà™„h›¶"Pì"w§D­é†ƒ4zvÅEÃM9¤a…L'ÃM8aÙÃÓBÔ]\>ô¤lG_¾ö}j‚În[ùI:õ÷í$÷ߪ¯v_lþùã%ñ Âa¥ %ÂmÐìž:zœ82Б³‰[݆šM’¶‹È5žsc ›ÐA¹+@Ý6…O¢ñ¼(´^rJ“#á4™áŠiPì1 `¶ CB",¨ a]èäHTÎîrLÌ34u3C0Jä4f ‡‘P òý¾¸MºÃõa›W}µ}*ÃH Ú¥³“ Ûa˜=v.Âq±qj­¤Ö!½ƒMVŸi§áûU¸Ô'õmÝ…´ûû¤í·i­-è}'ª—Ô›Âw £LA¡g>¸ˆˆ‰ù!áÉLg£ÐjfÎ"r>`ƒ%BŸ ƒâÁf +y¶4ìØ@è¸`ËãMƒ Zi„Óa§SpÌhh0N qLÚucc4ÙX”= Óg(!8ãûïØ=þáýþîªëMí0Ÿ„Áxa˜^Ö5MŠMŠÜDsµžÓA„ÓMÓO﻽÷Ù;²áS¿Z^?Ä×þ"(AR ÑvÓ¸ \s=Zÿÿî«Õ®ÿÿ1ûz¤î—¯Ú !ý¤Ø$šQé¦Ð@í$ÓVÓOÖÓcî˜ôÕ„þ92¯8fŒŽÂj¦­ßû¢ã»ÿW.4Þÿÿé¥è·8¶²*F¬ù¤@¢¡.í¥A¨»ÓïN‹½ 7YNËþ›ßýoú{ÛÚ UVÏ6Ö­ÛA¡¿Ð{ð☦6ºÃìR{îÓkAºd­ ¢Ú¦¡etu(0šh{všiÚ°Duv˜?·¶Û×½?ÿýýäKOÚþ‡5³ x2’ÙÃC‡— úÿ}ÿÿÿÿMþüÚдã3'¦·ahý']'Û 1(*¢& ‰h4CD(‡Ü9ïNy±B}žþ»M4 6CöÓbãcOa4´È£‡Tî (â")Úh¾b!„"""6¢+ˆ‰»báŸÙ+h¼»øm'ýµwýÞß~ïwßu¿ÿ_DâÉ9Ú{ Áø7V*™…_Ýþ›#RtAy(ÆdóSEÚ—• {ìm¤˜A i ÕíØ†ƒd®Ó ¦„C ¡ ™0[ƒJ"/-˰ŽÄÝV–“²}W¦ªººÿ¦Û×kÿÿïÿÿ÷ÿmú¿dãM´×.Û´îï5…¥ýÿ]ÐÐó{ÐDâpšy>'”^$¨2Âa%H.‡PÓ pÇ ;?ˆh0A“t"!¢D""""&å )ܼEU¦ëÇúuÝýÿ¯ßkÚì}ÿí®ßüÏÕýúzw÷ÛwutÌ I“ÿþÿ½[þõA·méÒv¶¬Zþ_¦ªÃ  „DDDE ÅC-/ïÿ­Gÿ/ãXö;ï{®ú¿þ}]·Ç»þ׿õþ^oë×ë«Wó¡/¯ÿU÷÷ }äZ~ ! æá¨0¨·qûÿ°þŸµúõ¾#ÿáÿ_Å[ùmÛk¥ÿÿÿ]ûóŽFöéÿöÿïïÁ:íßû./{"ÑþÃéý¡§aYغhÈ 3¿jºàõ×L¿Cê_Í0Oóä¬?îþ¿¥Õ¿µ¾×ÿ¿¿ÿïzhC¿ÿÿÿÒÝ{ö _û¥ûü7û}Œ•!;3»Œƒˆ†'°˜&½ºßõÐÿɹ…ZT ¿Ò [ÿþU1ýì0»¦Ç^ÿûïoÿ‹·ÿÿÿÿá…÷UÿýáµüöÒÎÌãµ.)ã³2´Âgt4Í0¨3³ËÌÿ_Áµÿ¯Ö†+IëÐN×KU×þÒŽâª\*ñ¿ö¿ÿýûûÿï÷üSþÿ|õ7‡ïФ ò¯L=…UÔ¬‡Çß\ýß}ú¾áþŸôÓ¸íbšA´Â¡w¸ûÆö·Ý½ïï~ÿý/þ÷ÿÿý_×WýíÎÄÿØL;º3ÛkáSþŸûûëõW_­)íúí-6­jÂtÂØA…ŠòÇûÿÿÿÿþÿïïÿ×ëýë›éÚVªÚ¾j«¾û‡ +°©o@÷ºóu:¯Ùž¤‡öÛÙů§ëê›#ØXµWbæ„-ïÐ2óA.ýû_ÿýýïÿ¿ïÿÿüÇ{íÿýobJ÷ï}¥YO³~«ßa;^ÂØ]R³Î˜ƒí4Nûá„8¨ö˜* ®¨õáï‡æ«½ýÿÿÞ÷ßa¹¢ÿüÿïßki'ßçc‘á’=^FѾ¼™„âI²c1é4ã‹TÓc=ƒ´ìt4냻 …(a27¨ˆˆ5§ÿè“ëÿ`’Õ¿ÿÖÿÿïþÕÿöÖÿÕƒ~;l/ä 9Ÿ2‚"Îi "uGÿ¼é8ãÐÎGã4¹OŽW¶EãÅêš'a†¨8b“Zdv¢V¿jÅ(i´ÄÓ~*ƒ(ÔŽ{ë„ÿë „«Ÿ¿ÿßÿo¿~ÿµ·ôîÕ?¾ÞaÓ[Ÿä &ˆå¦i„ÓA„ãû_Ö¡z}¦˜OÍši ó~äi ÓmåÀlÑ„ý†ŽƒB&˜ˆˆƒ5IÁ¦ƒ@¤„2v‡j|RúüÍz¥ëõª¯¿ö¿÷_×~¯}ªw{iZÚ±Ou÷¹Å^F‘©Ó>=‹N[†‹‡{'Ù±è_ûA¦MHß÷}§añþƒï¸ˆˆ‹B"ƒÄDDGTÇ[ ÿKÖ¿h±È—¤¿þèäêÿ¿l5oÛXwûn=§ÜA‚#ï§êB$Ñ)ôù(g é8a;¿úͲ\Ô&ûê½­=Þ>ä»ôÝýÞ1AŠ£³Æ·úëÚÈŠÓ]Ñíµï¯ûT8®ôÓMz|5NÓT…‚kû(Wï½§}ëiêÿçc²ˆÎÐópPŸ¬Z× Ã»‡¿dòßþÿðƒBzÒ`˜]SMa0ƒƒåBÒµOúuVý'V(&ílRµø;B/DDDoÈIA4í=¹o÷Û¯þD3ÎÊu•<&Z\&"íþ´×íoï-ÿ´ýýŠ÷†„•–…öÂþ-5TiŠb–!k¥ÅGiV ‰Ó»C2†Âqü¤ÿ~›þûûÿy Âi¹r2sÁA뮚u¿L•Âþ“ÿMýÞÞþ!=¯!¦Ž­mM3лt 4í1Q^ÓaB",žÖVºWv‰ŽíÕÿ}ÿÿûÔCPæEÛkäâ…¨i/z×zÿö÷ÿ_Ánÿ-Ár2ˆÖÐw¡dñˆˆ ƒB";Pšv „B#‹zvAßû{ÿýýnﺶœ›ºo~ƒÉæl}o×.ïÿýÖ¿QW_ééš9wñwÓ „hiè:&íÛJö»÷þýý¾îÔ¼·.f ®þ—M«ýïZOõûþº®ÿ­ëçb½Þ öý“£ÇÃzÅõzwýůÿ\¸¿Ýý·IðÞûvÿ»Ó~õþíë­MÿɹÎÿÿÛæ{?6*ò$RX_¤ÿO‹ÿØ-ÿí¥t×ÿiÿû÷îÖÿþ½}þ¼ªþ†þ²¶—}ßiÈ$AÆÈ)™3‚õºƒ•!þ¯~Õw™ô7üVú§ÿðÖÛößöG^ÿ]zÿÿ¯^ºþE`Ÿ÷O‰1 ÌÙPÓ<*vÅ û¬È“býR¤¿èG¯Ç߯ãûýþÏoýÝÛ·ÿ×ÿÿýzªõ‰T^t‚ôD4m¢í²Q_v±-ÍÙ®"kÒ_Xì†ýû‡Kÿÿ÷ÿ¡Þï½ÁÇÿþëýl‘†õMß ¸Dh>n 8Õ-íƒÖäáûc™É$i¼ìTÕ=Ö?¬/éÿùšÛ~ýúÿÿÿìÿodmïýu¦÷A×Ò"é5OÍ-W— »{o»Û½†É4ÍŠ'k«_iHC®]J]é.«õÓ·þû×®¾ÿûßÿ1ßôŸ¯ýÙËÛZw¬ì…“ä=5_Omåä‡Ízuÿo}·íÂkî “ŠNö·I¨©zê´Ÿþó?ûþeÊm‡ýë߯jšW¶—þ¯­¯n¾íÿa45Š`ž±RTÈ8&/*‚릴z'¯z¿¯ßûpú-à „ˆkÓþ¿]³Óa?°¶éW½ìôÚÚÛílã ±V©¦ÚÝ'zwm%}¦š˜x¦¦ùYÌ„dd¥òŸÓ]8z ÖÓ¿õê—ÿÿÇüÇþÓø} Ä…ù¬P™=š÷ÿ×ON+_A„ÿý¦›œz°ÕŠ‹6ÃÆŠ!„ÚtáV¡˜NÖ(&¸°šòR@Í™­™å9”GŒ˜gŒ gŒ'ª¦šªOªv¨»¡Ò¾é{ÿ×ú_ø{±p~äÝUçklù”3Ì‹D°Í A’¸ùæ 4 ""ÂAýÃ=&GI Á5Ob˜Q„ëEö»ÃÓŠNئ™öK4pÂÃL&!»NÖŸi±´Ýâ$‹5‰¹C%Ê4σÃ6Ð`šŸâM‹íS[ÕëDãfÞè”'ôº|uõ«_ûKu»wm„;yØB€áO6A3qæf @вL"abÑcôÏ™‚NAùž•XÂÅÛ_Za0^B‚nÜ>î¡6‰ 4""`„YDYÄDE„"}²A…³Jªy‚Âl•´;M7tG-Ü•·vPðïVý]uh/Jþ»õ_Â૱þ¤<Œˆ~û¶`ÉŒù¨T݆œZ…VFÿpƒA—2Ꮁ¦j¤X@â""-«C ´Ã`„"ÁޱL8pÄ«²;nè'¬"C¶IÈé°áÚ|C»þénÚõ×ÿßåÅôšÂÿÿfÏ0ÓþÍ­ô˜€ƒ³âË· ]ÛbÃ&?›3[a»»Ëç‹Xmº“PšDDt¢B""#Éã“ÍmªÃ°·¦Ý¨AÜ“»Þþ/î“uÖº×Z÷ÔuÕ(Kë%–HÍ¥êšÿ¯}úo®òï¶ìݾï®.Éç@`„EŠO@Þ“¿îÝ:»µAÚ{_÷Ûéÿý2ã§×ÿaë. pµÆ‘'þid™Éé…†ºkÿþG?°{íÛ}öí¯ÝÅßm‡}i«ˆ0Œ”ŸÃêÝô߸öÚíõÝÿ¿Šý¿ÿ¥‡„¨Gýô¯àšièiÓÇÿüZûÉÃzEÇ÷߽ݶ÷þ!¯éÒ"OÕÞ¿ûÝ=ö¿Çßþt‚ÿþ?ÿ~Ýô—ÒzǬ²CïéýéÚéºÿýñï·Ø~Û·`ƒÝÏŠî\!nà†^vF õÿÿºÇîÉâû½ð¯ûû_ï÷†Äu¯þ‘vÙ(óE¥èßÿºý~¿þ¾¿`ïÞß¶ñúxÂ:k‚õ×ëýýAÕü!úÿIÿþûÛîŸ9‡¿³ëÓU¯¦é½'zÝÿÿ_úý^©qÿûºÔ0ßðÞ‹ïÛ»VÖHåì0ƒ/HûåÕulf«ÿý?ß»ßé}÷šæÏWlÜ>ì.K®·¤ºÿZêl}Výõª®¾Ý?¿ø?ÿ³QÓS!Iéïßþ÷~Ö·Oÿ×ïýŸŸ·Ý[Nùá„ÓMŒ âÐm×_Çïzõ¯×÷¯ß ~¿µíÿý~ùß“á·Èlμ•£¦@°½ÿý}7æ}ö_þí~Ö톿µa‚Qv¶Å+A¦™A„)ôÞû÷¦«ýwú®°½UJAtŒÂý¿êm?½óBrªa0nÜôDÑìˆ^i›0˜LÐCîODs`Þ¿m÷okÚ÷~à šqw¦›§wÒ¦Å1h6)ŠdW±VÁñ!¡I~ÿ‡Æ×ú¶£ýcþãÁt–¿WU߯¿Ö¶‡éöÔó3ÎI ÉÚ~;bS´Ó[j­WÚ^~M5NÂ…m'³NØÓMÂi„áŲ;l4¬+0 0ƒBfs|DF?þöäQßmw±õùBKKhœuDï­V þëúé}⮂߻Nî_t h»a÷Ýû»I;M>î)c¦4ûa[M_ƒÉâi6*˜ `•I¶‡ÿ°Ãyèï·w:¢;ïðC¿fp]BKë÷ꊥÒüÇõývÛß½íÞὺw$£ÜŠ; ÂRÝÃXJȈˆˆeˆˆ«L.ÿpúMÿø»ÿ„F?ªJ‚C_ªÑõþ¿¯¥ëë¿“£wîßgš·îÛ¾ÞÜs³Wôœ}4ÌWÊt!„""""ç ü1ýÿæ7¼Ý÷¥÷õ§3ôíõÖÖÖÿߢc=™Ú }ßoÿïwßr šz ba B"Æv(¾—ß½ÿûø{úüU÷Þšê©ö0ºV*8«Uý/L) q×ïMõ»nÿw©ÅFeŸf~u3„q„ÂÙr±aåK;¡¤Úú™ß§m×ÿÿ÷Ûæ}܇ƃOL'wÆšß•lZak󮚦šþÿ_ÿîþÒbÂhY•BáEÐØ‘F™Á®ÅZ`œ>(aS4Â!-Õ-Ñí?é´ÙݱiÁ„á„ØÚÝ‘¾gE „É=}vªi'¦ª¿×ÿÿý×k$? Znìô^mS&é%~ö‚ 88­0œ H a +a'¦Õ8iØ"‡» :l•¡ËÝ0„i hCDZþžw“£ŸÝÝ¢áÍ }ÒúÿKÐàœ;'+n4Þ^n7Ó[ÖÂ(‰ð}„íuµ³ê8â¯iˆ†ñ@Т‚„D©±ÒÂh=[Ãg:OÒø¯þ¾»[áÛ ÛNï‹ôÛY6SÕI™´î%6""O†ˆˆ4 ,FG '_M?z jûë_þ½kãêõ½7ׯؖçE'º~ãxˆaˆ‹ºïî·ÝëÇÿ¯õþ«šÿ×þí¥¾WYV©ûMyOžd3 ¨‹L‡6‡ßný}j¾—¥ªÿ­/îq¯ö±_¬³´0šþî>fÓ „7‡ÓïïV>ü;‡ÿõ×õ~¸§öïúóÕòXÌã3°”µª,ä)Í_…Bá,5ö¾>ëÁ´Áþ—ïõý_ÿßÚZªù)Xý¥Ü¤Ï0M_tNÖd[ãÛ×¹G˨7ûûýu×3_¿_ÿßžŸwMß½ª¯<Ž–k`šè4=Ù(uâ×ÛùX🃦ÿíOzÝiXUÖ×ÿþCÿO}÷żq\ ÂW‰£\N¤"%&v0~ž¾~ó¦3ƒïOb¶8ªi ¡\H°˜TqhkZõq*y$še!”FÌÌ@ƒ?jTó0ˆçwaÚwnÿ¯”é5 ¨&v ðA¢á§ïøÿ|3Õ¸!L“¸v˜ià XëÓ‚ià N¨¾ëYÐÍÇÙí:\k— B¦hŽDñ¶pÓ2€ál[M0„4BY:h4 Á¡“ƉÛVž¿]uß×U[ ¦²vþhæD]}_öÃ[Òl:|0XaPâH èܨRÇ•2fÐÁ Â‹…ͦ–„0ƒMbÂA7¤N/º¦Æ‰ŽÃGêºm]¯Þ¿wµïÞž]ç¶õí¤öv·hÖߺ7j˜M6;VM"ãWÇݧ öpæÊ/‰ÝÜ2yAK¶…Z[%Œ3NÍ“Ím [×#{Ý?û¿¶ºXwÚIÕçZýäœm‘dBvƒ³NÌó‘G•_» ^š~(¡Nîݧz—ÐÉÒêÞïAÇzy¹¤á´«Û ^[§Û¯ÓM{×ÿ×â· oýî?êáJ SDIšÜD¨­„Ó<#‚x@ÐcNÛ°B-CAâ·v¿wß¿ÁÝÅÿz¶)ZÌ ¿ûõýqÓ·ûÿ¨¾ºZ¿ä&\Ð0ƒ»M4ä­:¿¦«~"%[ ˜ 0µIîºkÿÇúャb’þ×ÿ’×ýÿ}jï̦ˆ~Vm-~ºP·îšÞí5ÓÛˇÓB",î†)÷ÿ·ö ê©÷~±¾Í®ûþ·¿ØB>òŸ_ÿî~8œgÙð›©Ñ(ÖË¢ ›gù‚ .JZ"+¿“ûC[áà‘vðêïýÓ¾“àÂÜÆJŽ­5_þè[ fh¸Ÿí¥"jݯý÷u×ÿ±nºßûN$릫YNÑ äU!Ä; ¦º›e Dú|𸮪áªoé·ÖߦñÉt>ò‡×úKô“¡]U±RË»Nÿþÿ{»}¶ý®ški°¹vüðÓ`ˆøA Ñ±Ü:&8xM9¢âÖž’ÿ¯ÿÕ¸kôÓr$DÏø¿ÿõÐܼ÷ÑÃ}õýý˜þÏ/¿½´ƒMoŸoWÃC.òóA¦^3Ý'‹—tžÇš(KêÞŸ×ǯñü®ì7¯ƒb¿ÿuöú¼[5mçž›óëýzV›w¾0 âNƒA•BçjŸ{Ý…Ónövߦ䣷†®¶ä0mÿþŸú¯Ë‰­nû_˜ÿîÏéÒ_özÏÁ8m¤Ãµ×º´kq ÕÛ »ô›"ŽštÛÅk¯IÇŪÿÚovă¤%qvqá·Çýûÿ¿Ð¬ì+;ÖÅ­«¯_J¹ì,‚M릚r 0U¸Ø¨Øí°’a0ƈ@—‚# ÔCñ@ÂÒ×Ww­~ Òéǃ&Ï! Ð7ÿÝ?ÿýK˜ë;,\ÿát×L+„i„ 4Öâ¼4ÕR Žê‚°„DC´Ðˆl¸y˜[ÛK|¨[ÿÿì0ÒÁ‡‹~A„ÿûÿ½q×µAjƪÂÕ‘ŽÕ6˜VÂhX!š$Âaaf•@¿DŸ]ÿ`†ÿ\|¤¶’ツ$?ÿÿ¿Þ·ÚʃÕPI¦˜T,­ _Ŧ§ÐÃEŽÃ#B"""6úöÿè±Ì<7ÿþ C>4rsUÞ‚ ý.ÿþ»f¥”™ªâd@§Aa<•æq¦^ÍBA8ˆŠÒ›?6ºî¢¿¡poÝ÷]øø¡§ZÕyþ뿾ôšo–#l˜vÓ'=[ qÒIV™6­ú¯ý¾m]^ÓïÒsý‘“ú¢Ç“õ¿ùŽ×´ºiݯgôïÝÂišfÚh·Õ#cC]®-¤’A_ŽïÖµuîþÕ´í«ôè ÔÛ=}2-õµ»´“=ÒAÚáˆKa=«5²`îNÓ§Ñ7ö»¯c®ïºpÛM7ŽûNÒMn-†o¾Óµš¬8§ Ä(‡±I¥aŠA†¡a Øßß$dÂ=¹ºÎAç ¾ltíÐm'ÿì‰(™>×ÐM†Ú &ÖÅ1q¦·cM6!Åo±Vp#Ó"½¦„Zk0šÓÉ!`™Ò48K;8ÓMÝÝ'±ÒDó_ÄÈŪ°„0½Õ Â œhB,ž¸i²(ö¤xh4&„D\DEÖqÞD>lР64âÅ¢íí»÷~ëuòmV›i³v"ÂÃ2†Â#0ƒBÐ0„DDRKIóa;Y­¦àÜÖ‘'´o§ßa¿á>žÞY„–d ÎÄ¥Ã.¬ìš! M$HDDDDEBêÜZ ·—Ô›Eã§ÃÂÓ«ßþuý<ì"ýݱ¢'¦8A8¼$•4ÿ% —i/é½ñww¯¶aõ矒°·+¥D\Îe 0[…å@ý3³ÿ¿©ÕÁœ¼¬PO ºmÇum‡^¹#B ÷¸Þ‰Åeb)òù‘Ä#µ)Ì!gÁ|™ÇaåÊyLßÙ¸$Xö_6©%÷mÙÙC´Ýïâ¿¡¦‚ˆØoëo]³þöÞÛ~¬tG”µ[ …¢]åõC´Ãxh88d¾¬-ê‡:iæD­x ÓMB¤Ó»I{ÿ_“zðš¤J½ôiþjÿŽ>C}ý{Jì°’l[#s]XwT·N¶¤þêîýÛ»´î9ª""#ßÛõýFxüÝóÃM26óBTš8èÖz‰˜{sô¼oÞ‹Ì êËLj“ЃmSaªm„š«_ݪñk}^\ßë¿¿ûZáJLüFÑ3f ›dâ |Y ÌÆ ánÂQÛnlU=44"¤’I$’IHâ~¶DAéqa¡¦ƒO<4ýw÷ßzÝßlóIÝöŸw'—«}{§«i¯î‡ývÿÿÿñüäO3Z#ÊhÏ4 HD@uðMÉ›°ƒ­P`ƒŠ¨l! ÂeZºŠê½zbªÔ$H$”– Aê‹Ç~µk&¿»Øi®ÿ¿ÿI$I‚I*E9$•$’_µòÁ.º„/×ÿ×§zi„ó¡ŸÁ9p” ™Š†ƒC@Ïg M5„GV›§~ËåÍzkêÿ^–""v6Âd.ÿ"Õ¨¶Ý'ÿuñÞ¥¿ÿÿÞ»ïx`§Úù /þá$•$’AJ’I! $ÿÿ¦qÚl0_Ô&‚†šrݢǵӻ<*3»ès†ËŠ./-;í¨ovÜwkúý¿-ÁÊ"ŸÝ~øjÃ’ÿ(Ê:¿ÿkö´êÿþ«a/Ú !^‹½¿ûõh§§× ’J–’JÁ$!T$’)Å¢nÒ´ƒÏp‹Œ÷`¾“PpáÁðûÐz¿ÝþÇSËÇÿþ²Ü„žú¿!®¾´G¤yÏàæðwBþòâõÇýoëÿ~Ã.—ZüB'Iñÿÿöéìoó=» «—¬SN×hGvO)4­IÙ,A ‚¤’ R  •RP¨"q¦ßýÇÿþû_ÿÓNüÈɧ´éuuo~èŸiÿ|7ÄÇÕOGñT¼¿ vüMÿÿþ ûP¿ÿÿmTÇ®y¤›?_pÈ躳ò„l‰Ôž„w­E[pï·êû¥{×Õa$’¤’I$•$’I$’I(j’úÿÅ?‰k¸¾¾Óýý;hÞÞ½‡ÃéøÓ.·Þ/õßûWû×ÿëýuuûÖ·l5ý†Sâ ì(*{N"ÐÓ»Ý=W]oØý½$õ}~°ü/ÿ"·ZI#9%I$‘1Í(A$Ú «úÒ×n±¾Õ»vÿÔô¾þÝ}6?ú§¥iëúýÿwæÑí×Ê—V±¦±M¦ìhAݱR º:`΄5þÃïý5ÇaÙH~«Wô?Ôqÿô,<öÕ¿½¡+;.º )ÝH ÉÞUÆÍHðAÃun¿ý'ûûÕS“[Ö¿~áê릅‹ !þ¾ªæk»ôíBv•鯯Òxj/aIúí¡ÂïöǵÁÆÁïu¿ÿòÇR#ÿùu·tµÿúô÷ò¶Éðƒ ¦GGŒ¤N0T4–Òm/MWÛT"‡wÚØI U»[õ³ÿ¾·öœBdq¸vƒÂkÃà °@â{L'í4`˜&Ga 1^Cký´ßù$MnB;ÿÿëéšeŠð{Òõ1ý¿ÿ›Ž„B0šz!è5AÚ†XUub­S°\+ "oãañHp¬ Âi¦Ã9[h6M}G j5; a Ø_vÅ1û#„ÖÕ=ƒ""CB#AÇÿoÿ˜mÆæ¦õûÿïõéí¯ýõ¿÷Ó &…Þ‹¼÷t4[Û8骱M8H a 0¬BÚv*’´Öãã´D61 1 ! MÌG¦ƒ/a2“„-ƒpÂIÄì!ƒÿߢWðoÁ¿ÿUëý~ΛÝuï­­ï‹•±i²8nn½zA·ßíÒ¡‡hD0ކ-P†sÚÙÃ5jœDRˆ’ˆˆˆˆ¤Ÿøoþ·…ŸÞΛíé/þcþß1ÿçõß[ÕKñWÙʵ$™/fÌ S<Ù¿. ·ë·z¯á„- &èÔÂЈƒ)C¥ͱ[J,eq"k¾Êuû³?ûw3Ó|Ú†Æëÿúv}Yçéö›a;þÓ‹¥l.¹›4ÂfÙ°ša4Ú—m'wß{k¯n»ø2‚Âv0éÙqX~½?¯ÛM†q}öý^½ÒÝm0¸&ÅG N8Ú«M‘ńз¦|¦Hk§Å§¦ôôÞøÕÃoÿøŠi2Z'biÛíS¾ý4ì% '§a(í(þøtœR UŠj•ZÃT"uÃ9ÓA¡ 0Žuqã#Dƒ[°…5òQ›,OîìÝ{ÿ¿y‘U–RäR¤KfŸاH ÓM‹¨ý§IŠ@ÿpÓMJPb"""šçCA© ‚tîy ¶š„êí?ÿí(Iíøûö´#’èí[2«; gbÉ4Óþ˜ívjéªiöPÖÐŽÐ2›˜iq ÂwywwjºzúÔ÷i‡ý~ü›Á…‚d L­¢-¦™)Ià©ïÉÌ£œh&¨4$ñÃ'hD£jž(F´!„"DzvÎ4æÆÓÝÓøÿuÿ¥¿BÚ¯5_þ&C§‚ U¤ð}mÉËÄDA‚ Œ-ÃN_ëöóßÃ#¿¿ñÕpßÿúwȯê.î©8j›;-%Mq_½oÿé­q‡ÿÿÓÿÌfå1òÝl„®DO©jžÓ_¿[†ü•>_(f ô+õïO÷_þj¿îµçMë[ÿOU•Á 26EcÎ w_n¸Kuþ™Ñeu:W& ЃZ|±ÿÿÇÿtáºïÿ÷]³Ò~ÿö¼T3°„›©S—˧úèW#"õ—3æTͧÈg„ÎþuSMÑ|ô<³–_܈úýØ«zZýLkÙúéc½;V¹ƒŠô©¨wâÜ>®ÖK¢ æÑ¯:B0¤6t³ƒd@ÉÙƒ38‡„"!@Ï0„4ÿýÙ;†N?[åU§ÿC.¯è'ƒ¿÷[¶[ ˆ”±¦Å±®ÓµW˜{‡îÒøæ¡$22´ aš!-„Á…X4Ô ïÓL4‹‡¢ñƒ.7Øi…WWMméyV™’ÇÿËÓþŽ*ûfkâ”&ÅE(`ˆmÙöšÓ´0økÝ÷UõîîÕûµ¥ëú?® úßß½¯×÷lÿ­ªq$“¦¯i´":ȧD¶6Ï2XAB"q/>¥N$Åš ÐWüÍ ™VH„/¼ Óbÿ =m5ƒÓjßc×ú ÷ÆŸ¿ÇTE‡ÖöG/͉¬”qûøm­÷~—ÿ³õ§A­þÂd½´+SPÌÄF?DíÐt8¾‘;¦‰ÇÑì2o Û¾ÚNøý} îñß·ÄQ8ãl¨_Ê€¾#^¿Z°½Fÿ[O5²6A™É—Iåf Ê žv І!¢'‘i>f-4Âi§Údh@ƒMqvƒ`ƒ¾]ÕÝ«Áié†É¾ž©§`›‚‰â§Û[û¢o¦ýÖš÷éêÿÿÛKäGRé×¹1ÎÃ`¼Š®úë]ÿýâöë´­‹Õ%@ÏsÂh]¨@â,"'””BdÄj ÀÂpÂi Ðq 2C‰VÂ/wVFz/ î&_Réß ¾ÒPà [Ôžéé/ý®^díµUtÿ_xú§ÿïßßKËÒ8ýDcå¼6‰Ç–ÿDó¿ôý¿M„ûØjv“‹öÂlŒr$QnœBbiÐ0D& NÐRnÚMÍÚ<ßmÏ0aaðè›°øÚEu†ÿ{»è›¶õ¦ñÕp·×½>˜é=;ÐénÿO‹ûúÿÿ°ÿiûw‚z ƒ Ÿ}6«Í«íîÏ÷w\m¨" öLÝ©¢É¼ùaÙ‘Ñ'l a7Aذ† m¦w//.è ᚆí[/žïß¾øj;.;ÿÿ[è?z­YOºÿþ)wîúñúÂÿ¯ÿükÿW¶~ëûïÓý6þÓ°š ƒé4Ó#5a0‡~°mÜ'ïK úÕ¹!é×hØAÒw§§}ýݯ§wþÇ}§ #.°ükýô›µá‘ÄX“ÿ¤|.´ïDhiRú¿õ÷´¿¶¶ÞKýV¿¯f}„µþía˜Å'±á‚iÚßUúOÿ«¯ðÓÍé÷§ïÿÖìŽÿÿ¿ëa÷C‰ÚšVºÿÿîô…<±7þ¿×'©!éyHA>‘ ½|Õõ×»=¿Ùõg–ŸÝýݯiØN* ;«AÅ1„¶ÖÍZQ ‡ÿèeÃ]}é½¥uWk¯0+_ëdq"?OÿïØ5íNÁNÛþÿk†ÆN­}5×ÿH^»iNø"C¯—\"wÿýûÕ´ê ,&Ã;ºµlÚõ¸¨|1q±´Òxd팥¸wP~“nÿ_ÿã_ãúºýÅKíúÿ°ÿÎÊGûý~;zÿíîô·þ*Ÿ@Ÿõ…ùïël'lU!±± qÇÁÝÝCµ©í27m2W a;Ј¦–áê?ûëÿëþMÁv—òìª!ýÿÃNUÞÕd§Uþ\`8oÞݯw®­ýïé.“ÿ­f;ÕuMx°´óÂi‚# ›Töî"áðÁš“ „öùp¿ÿ©oÿô.ß(ÚŠú¡þ¿§÷Î wþÉÐç²I A…ý÷ü_¾Ïÿûúÿßôÿýíÿñ§ÙÆšÙ¦ƒƒ2`HA Ðh4"" ˆŒVßÐø"‡ïÿÕ. }ò°/û_~ú×Ó~¿pâvÁQ3d4*;uÖë÷½†Mƒ}VØi¶¬3a~Ö½½SMÏ×ÜtªÆš¹Ö¡4¢"""5Þ7Úúoßü²¿¢Cõô‡ÿýw×Ì%Ó¯ÖÃæDÈÆJól wg‚¡h4Mìž9ÊÒ´õÿsÒli·L0ša6-‹Ž-µµ{NÎZi ã;Nš¬Vðž×mý¹6¿îé}ô7ù¢ï\ÆÙžÃ9wëa+½muµ½_*‘$2IäõA ìõ'É;E㄰±P×H í­6pÛÄû^ÃLŽ1 4¶.Õ‹}¥`Ãn!Ã>7C½·×߯š.·]ó×ì0žˆiÚÃN;Pƒ ¦Æ˜N4q¶¹$ò†t36a „Ð÷FÇÜ ítêý¦%>4ÜûpÓJB!„ÓA É‰—0@ІãÙ+±È݈°…¦„G¸¯ìã¾ÿþÓM;½îôÿøí‡iÆÆé„îö­_ê)>è!„ 㚸|¼Ø6­úîë{ö‚hftÁA‚ˆ°„DDDDDC5ÚHE Ðad#´Âýµ»Mè6TÓM†¾~oTm ÿè4žÑý”":áQ¢a=hÏÎE5JšrWWPÛ¥ï]>ßæ4»j";,Pˆ”†gP0B#ˆû±H<&›±H6+ö(C¶¼5‡i¦Òâ-Ô¶„DDDDA‚žÂ pÂroEÝm¦÷ééýÿˆÿâBšµA ­œo×ÓB-DuìŠ;¦…¤z60B"?qkè ôé>ø†ÿÃ#‹ÿ¼¸=+ðÁGâ!„Hãi¡hA„ízqZ÷“Š/¿«uû ëÙQúõ¡ôê5â-ˆ  _¥t­·§ÿö_þ„~ÿ·ú%¹5íˆÚéÝ{í/¬28¾Ù8Oý¯uÿý™ ‘Ø<›¤‹Ø.úxüqÖÓÿÿÿÞ׉Ø$¡2°ÊáhÔ2’b¯†ØV¾º“Ó‡A?ÿ¯Ö°ÎM ÖC÷TÎÃ0ƒïXæ‡ñVü½†ëí~ôÛ]&8”=a»ápøh;ˆÒÕ/òê÷þB®¿ïa˜pû E4ÐqøwwÝ þkÎd¢6Â#9ƒ0Í‘Âÿúïw»ÞïmVØÉgLTΘB0ý8‡w÷ÂÎ “A¦›Ÿ½_ÿöóݾ» «V„C áo;ñÕržÛL&ÄNð‰Ãv«×ûÛ[>­?NÁÚÉFÝ„?" ÕàÎâ5h„9ŽWÄcϬâ)hó ¾FšeÌÚ{%ÐrxÐm–÷­~×3\0›aÅ ×°é°B=ÌLð!ÆC$Ô&fA´4Bñ9“‚hðÎsA“‚dfv\g\†dÉÈñÐ0OÁWjGt^]Þ¼;µéÞ­„Õ‹c}Sh0„DSé¢à8†aÚDÜ5 Aê›"Æ-5Tâ .A$ ÁgN."?ûO´ûÿûN¾ ÅG²VÂ'F›D„´› ž4LpÃL(AæËH»a“…/²Qk“¶‰ÝÚ+˼C@ à¤}4i¨M‘»aSø}iúºÛVñoÝ;¦1ɸA‚qö‚n¥óA¸Óx½hRÁ¦Ã°©Ý°ÓNÓm=¢Ý§äî‹v‹·¬¼l pÕ?½{WÿÿmdFc*YQ=—Zž DG:¤‚I$©B…T’ýÇz§zzuvnÐ776MÞé=aѦÞÜ5~ßûÆïÿ®Éh©‚ DD0B96GÿÿM¸àÕ I$ ÿ¦Õ~Õ[Ý^ƒc«­?ÿâþýÿ"—ýÛ­O‹ ž)õIÿ}¯.'&90Þº³áé$’4¡uÝ*¤®ßOµÓ¡ô™ÿ¯ùu®>h ÑvÒ—ohÉnÿÿ¾“t"ÞÍWÖëP¼$’ ! *CŠi¢V&.=õÞh7îÕõëöõ~}´MÂA;ÿÿO¡aá¾»TJÓè¼ôï°K³Y|FH'ÿòêú~ÅSý¯ë´Ov; û_kÿÿàÚßÔ/ô·ýÅתxEòI$‚A$’I'ÚuM¿µM´¯O´žŸɱª õþöÈió½ßt¿QK©êýý/÷Ý|Úªö­5M†m¦ Å+_±ý}?õ·úíZ{kŸÕ°ž®Oß§é܇)­ßêÝž—ïí;Ò $H D •B„?Ãò5ÿ¾jkÑäj³™ S28f¬Ùûa$׳÷ ŽFà „ÚzNÓi4ÂÚ­ÙÿîóÖ½¬3 0œTvtÔ'H4""¿) uýupƒAŸŒ3?0šæ!ÚljžÇAتcL5Ò§l[¦¼8i0Ì6Á}‹†ŽØ†Æƒ·liö""wÍ-µ´!¶—îe8ËÙ² ¶˜#Å \»m>Á4Ã[ ØX4Ði„Ì,\-Ú %hh2„b˜ãNÙXè&á¦`˜Aš¦U¥CÈFúO»ç`¬Ìv®š‡jÛ$8iÉÇw ì¾Óˆˆa0ˆ»Q7«ˆˆˆ£NÊ„ *b!„&ƒ'ˆ3DS­­¿§š?é•XòL&Ýðpƒ¨m aœt÷§ØˆŠi é­ÄA‚QÒb"""šU²*Ä‘æ©ý]!èõçbíI0ag4Ëv禠ëÝý¯¥kô",v&Il·¨Â„}ÿÞ¾wYh4Â…„Úi ýáªû¯Üv×[A¦! éÚ3fF¸L§RP“¥k!(Õ?6È«'ŒAÛn›%ùyv©º}ë²ÿÕ×ëÜ4Á´U ÞvC2+;UÞg\R‚ ‹†Å~ƒ(eƒC·inƒm=6õÿÿÿù˜Kþ"8!û[ô–C6=¦)“Šp¡z‚Ú.í¶Ò ¶›zûUÿ[åÿô\]¯–D-‘çié º³ƒue4ŽƒM #2EÅj¥éì0ƒbÂh\XM4Õ A¢íµî‹¶ EÜ·îƒ ¼½:NÕUÐÿç`ÁOñZþ\þØ¿Ùz׆]®ºlŠ;¦¾ïU»ºJ“Ó^¬­Bn¡¦›'Û%y4í¹î<ÍšÃh0’måãEãH6$N4ï_ö—ú¨©GÙ7¨!ViÒI’I$CÿWûgý?«M‹NûNƒ´åFõW‘F}ÿ’Ë«§ÆÓ'ϺÇÙ‚í¢ñ´áÚm óczzm&ÿÚª~ºêþþÃÿûò@¾¿DÌ;*i„Êê¤Âm¿³á7ý ’_ûÕ¦šoÝÐkUèZBfhÕF½Ý—"q!×™¦lÍüÙ” p3tÈa'w§Õ¦Ne>ƒOSª7·²iéþÚm+v¬]ÿk¶ÕµÕÕ½Û¥oøÞòu‚ÿ´ìw‡Lì) ÓÿH»¶¿ÐI ‚IOU|TA™Ó[B"3 pDJ0¡Ë ší!v½˜ L  0ƒ\l&ˆ†f"®Œ÷W>0ƒ ƒ>Ða?[/!ÛWÿÒÿ|P}Æ£úÇטÕ_¯ƒþ¾X>øá÷y‡‚îù,»tŸî›?ß·Ã[c¦!J„DDF¡4âEðÔ>6‰ŽÚi®“cM«‹Dá² ŽÐkÝuBh6¡Ú°škˆw¦ ëkÿÿ|ò ëé½ý¡×QÞ¡½ÿ_Wúö]- ¤?ù=úi_ëißiEÖ !iª N(›«MEYw„éÞ‘1ì›Ñ7c¢w§d­rq—}ü4¨öJ”]íÁ„õÜ×èË‹ÿþ\EaµÍ¯{¦Ÿè2–òûpoÿþ¿M;«&H|§ðˆŠÝé¿ $ÆÅàÛb¥¸N˽; æz.ܼôêÛ»Ó ·zÓÓm?OMzâè Øk¦Ã»»Z6=½ÊSÒ—§ÿöT* õÞ¿ï¸ö“/_‡µ|ß×ëki®ù^ÑÔ“4ͳ6Q DT’q¦láÑ™  ‰C(‹èšÚqI¡æsMPˆéýE Õ:_½o[uûUû¯_Ýÿ«á®ýݯW¡¯ÿÔG#ûigY#k÷c¯S‰ÿµí³Íl aƒ ùÏ)Qâ'Í™±š<ÐC6`ÊÞj2>g3fDÄ80šaž"ôaß­é×Můš(‡,u4 ˆˆÿ«÷Wßûíoÿ¿ÿÝ®þ¯kû·Òëò ÿþ½Snëyë1ÜU™¤ô×»3Uûk{a%›ÄãÝ„ !­sæOd¸EƒBÓ]ÞKÆÙ˜Â!(-fÓAÏwEÓÂWè ½´N³£²V¨qø¼;ýÿzúýWýÿ½õÇùý¾Ø·oÿíä„÷Ùéµý¦/®y¶{3JœU¬P":OjÚ íi„Â5ö&騴ÓA¢nÑ¢ƒ»“¶¡Ø&ßôú‹[½ªþì,G¿ë »_ëB¯uáõ`»ÿþÈ _ø×¿ÿþûþÖÕ5鵎Õ>=®ØãÛÐiÔPal!B7j(» ù;îòv6ÿ²ãztû¢í¹çNîîÕ7O}ûOmbºâeˆèdÉõ Á°q¥¯²ì¢*Ý­üV¿þg‘Åo¾²¬[äïÓ¥ý=«göÏZÝ­¥éñQME^ÓÕ¦Ó ¨®S8A…B#ÇV}ñéÝúw:/;xÐwþÇÅoý‡}ëjä1ßâ…¶‘˜vá×Ýô,WðCË-ÿý¡†øï¾‡Øú9ùÿ¾Âv œ0šh8Øf †š÷ 'k¦hZ¼>M=ïþ= ½7÷ÞãÃúúø?éÞ³@°}‰ÛäDdM߉væÓÿÕÊ}WõÿèÃíz׿NfôéSXaX¦)<'ó:= !hZ†5ëÄSdt¥þ¾><=×áõÿíÿ÷è¼°~§áÃÒ„!˜ßþŵÿÿþø]¢óýú­'Åm8´&v &„txˆß­äoXþNòâl?Ô‰Û }ÿÃjB^žÚI¥¿&v#}W|Ú-Í ÞÞ¥íÞ*ÿ÷_ÒÎO·¹JûmmßëþgA„B#ˆ38B8“bWï¾L ûþ8§Æ{˜~ø.ÿÿûÿŠë:?µ}Sȃ5¥&û0ZóÞ­_¦¿™ª÷ÿî¿×ÿµý?é·WÒúdêq_ôNáþ¿I뚦útîÿ|>¿[÷¾mwí'3¼Á ñ„ γ1BhYFlÿÛÛ~½÷iýgí³òÚê«_Ókü6 Ã쎟Ұ–øˆÚoúè,?§ü/ôœ?úYì;úÿ™ÛFÕ~¿©þüÝMn&N"!R.-;pƒ¤Â' ’¶ÛõÿüÏõõa…Þ¡ªv ˆ¦Ã &©ßªzm„›NÝŽØÕ½&)&µAÿ×ä¼ÿëÿégÓúç-¾¯é¯}§¤«z;­SÝsµXÁ§I<ùº:.Ý6ÓÐh5ý^¾Õ´ìû÷8¥Ob½Xw ±Å„ ZAôÓM5 Ü›§÷ÿ¿¿~Óûôû_îí$í‡I¦šqQ±LCA´¡’Škúy¸Ñ“Å@¦ÌÌf‚§h“°ËÜ mmÚDò“¤û¾6îÐjžÚÇ­í~Õ´ÓÓPƒ\7¤ô E~ÓL#ë…Wa \oOÖÿý5ÕS»@Õ³»Ý+M6î4Dpá„“µSV¢#)ß#2öDÙã6Ha2ëÂh? ï½?ã]]u½á°mÇjÆÈ£ßh0’}„í !ˆ´Ö-40˜B%ZM!%–)ÿÁ2þ«h; ¶šh4„Ö²(î)µ „݆¶SÐchED4!“°„ŸÓ ¬!vaͼ+½ ¢pÑ8¸õÿZײòë}C‡iŠh0ƒL! §‹°…„" 4"P„E5·''§‰Íš űIö*׆Ð8­ö*öšhž5B""kj"=¢ß6© ag˜yîÓPžÜ0½ øý츱îœ\žÁˆ ñ­_T‰š#M$ò¦+H7 ˆˆˆá„ÓDóA„8ˆŒitXívïûzní/Þ#éüÐx ]Šš ~áõˆˆÅ}´þKQö” yXD †„E„!œSUãGí=ïkM‹än^\þâ;ói·1õ¦³¯îçz­M4[µ—|DDDR¡ït›¾¿ØbÚÙÚX_…~zí¥ SL-2ºFF“^$Ï9 ΄jÓ'-µ7¤Áp÷öí}øn×¹á4éw¾¿ûqÁ“f%Ô*ïó i‚g [ ×/)~;ûý~÷ At¼ÚVõ³û·Ûgþî£ë땨 â!§iÖ<‡Û¦¿¿ý¿×¥ãÚ¾ýãõY]"A®»þ¶úïÛÓg.îwäÝD2PƒDGH¸´`’a†©B#½†4û_$¸äþ¤("ɽvº']»6ùwj«¯Þ¿ü/rÉÊŒï\&§h7ß:ÿÞþªºïÚhiØB""# – ÐiJˆÐ„Œž¡¯þùÙi$z% 4»dç0ùpè7Nïº^Û¥¾¿ô¿·ù˜Zë ’´OšwþLZþÔRjâÔ^"5 Ó}'¹a<ÛMÖá¡aO ò¯#QIž4˜™´ôíÓIè>õ»×ôþýö^ý`ÿDß÷­¨UÎù¾+÷¦®“ý¥ÅLÐe7 ¨þC‰Â }3lÁ °ƒ@ÈÚW)HèGØPøâù œ0¤¡BiÚh˜á±)߆Ð{­»{mû×ÿwþ¿µôÞºM¦¶ý'¿ìUÛu[AÁ¡È4¡˜€B4gæ¶ê ÿŪ 54#ÄGœölόР"'†ˆ%Rd‹V@Ä)ôÈoÖÂf€û˼œ0Ù’Ó“Ÿ yc¼>ÿ¾ÿÿûùq~ö‡ûJºî³5׿âå~D6GHF]iÆ4"$"#á7ÿÂØO†N î5ÕÑùÒ º»o@á鄿n^0Ó`š' ÷iá4â˜L|EëDïëÛˆò.?ÞDþ>ÿæh7ßö±ýnv&0ˆ”„o‹T\XwDÝßÄ^ì+ßQc2>ëÐþðûúUïéö‡»]~ðÂpÉã–ôñwjÝh<¼Ö»_ëÝ?ÿ˳ºÁäêÿÿÒo§a8oäU'‘x§ˆÒ$FãÌÐSAšYE ñŸ‰ˆ&š„í=å¾G ’†î‚ôì’ºNèŒw‡k‚;*iïUÜžzºÓƒæ£öé¯__U‡MGø»M$ïP{½ª½5ºM߯ل‰ÕÉXO§²8F¿B8DßÿV—ÞækìÂÿNö7¯!™œ™Ù¢3í2^A…UM4B„MQ#OÕ߇Öh7Aö»OM7ÝL8O½bžä§|AöÝïÆÃöþ+úÿè¸F2nÿï÷!4þÈâ7°šëýá…ciz…õÖ´š gúÞ‚ïìoëiß­ÿl»†Nh5 'zi÷¢oU£fŸ§H¸¢ñ矻U»»vÕo_î÷‹õ帖èÃǯç=µ´¡ýþëþ¼ Ãè auðmÿ¦a¦ßÿõÅzú/½ø†þÿûÿ{?Z{¶;ÓAø;B: Úÿ„Eçðí·êïÓ—¤[¶N/ONï`ÝU=ŽÝTãë{u™£½mö•í>šq±Ëîíyêõ¿þ ߯„Fþþ¼7ƒŽëÿÿ9RlÍW’}ÿ{‘IÛJ$Þ½œ¿lýL0Pš§§°ÂWáÄv‘1Û0¿NöÞß}Ñy“îïNþãÿ¾£ÿÒÓýõÂdgRšßÇø|ÂÝïníµýíÿø-kþƒ·õ¿Kÿý<&šáªÿ›I­ôÅ!Pf-ÓbÓTì¸ö+„˜`“N£ ˆí ƒõíèÝ »œnýupžïv«÷íÞëúÿÿS1;Ûò& ëå HÚÍ™!¦mž=_5¶¼é='þ™Åêa¶H~tÞÛþŸõüþ¯÷ÿÒj¨:cn k =l(A„áœha„Ê€˜Âql$h6)¦„C:¼Ã h0…¶¶Ùoßyïï´ßºûýƒþûwÿþ¿ÿßô«ÖŸ¯á3¤g`ˆœÂaïÛÕ}7}úWÄ¿ð×»vÏ+=~c0×}ým:ÛöÏðî¾éA;AÈ Ú`˜7M·¤Ûâƒ0Æ Ða6G`ƒÔ§A„Ñ„DDk®ŸýCí´ÿµ×Û{‡ûU|x<À¿VêIõ¿ú.õ/ GK"oK›Á5<Ô"X´]·ÿª»ùÿâµM6í6Óº»a¥¶zµ°›|wwÞº¿¦Ã ›¶§¯M­âÓCƒ0@¢ÜX¢ˆeÃÕqóÖ?ŽÞ:µ®5µo^ý¸Kÿáÿþ¿¥ø÷븠èÒ{oòóMîÕoÓݰœ0¸!¦÷a šlR Ž66­:¶-vÕSAÇZ ŠMè&›¥ˆhT¨„DD[ 0B5Çý·weÅOÿï±ï»Ý½ÿvé'ÿþëúÿb½ëTü`û¶vdû­»ð›¿±QN‚ôo°ªc» M8a4›[h0ƒ»µÚ|&a~´ÅX¢çSe²–>\Žÿ°qû÷ÈJõuÂøoþõýw·ÿù´ÿÞe ôÚ»¿†¼ªoôÕ4Ô&†œi¦˜Døaa„Q†ˆpÐi’Š{†ˆ†ƒA›PVÖºx¡ü}kV «þóVŸk}Wƒ}Ý©ô÷÷úûõ¬0Ÿ‘a¢ MŸH¸¾?]mýØ/ö„YjW !ÅÄZ"""..#ZÑd*[ýÞíµÿ^Þé?Xø~ïÚßïßM¿¿îïõÎèÎÆNkä5‚l aRi?í[Ãÿí(‹‹ˆŽŽ""âìSDØÍ?Úæ6¿ý~ó¦é;ç—ý¯ÿýÒßÿq¹ÿ¯È+NðƒÓ ¿uñmX?ÿâ6µì!2ŒµAµÝ›7ÕuH³÷¶r³òmýq_§Ùûý­mmSµVûûM§Tßò'0¿k»§Hœ>½.—‡ÃúöûZ²§’£O:–æEã[P@ØÁB¬tÎbÁ„ÂÒiØV ý}ÛU†¬TïIàøãÚj86ø5×M³ "/?ôMÛý®ÿßÿzÓÛq°œsT9ÙÞ_2âãO„M´ a ˆA8 @ÁÆÅi}§PÍ»8¦)BÁ¤.ƒ¦°×iÜ=ÃM1„ë]4÷vžŸ}Ÿ¿×öðßëðÁ§cîÜ?‘v3Bqâ.Ö¼ˆp™1ÕU0L"rO‹iŒ jÐa\g3›eÎh {A‚6:ÂÎ.îî[Þé+wÑ뿼uÞÃD­;NPY„GA4‹ÆqÄDD4"3XB"0‚aC&ž &„DEMDqQS§ `ÚM¾ýo[[ÿÎ: áïöïºè±â;¢)íï%¼DfbŸÎA†šIö±ÄaD0B#uØÚÓÐt›m®ú¿üïýò“oþþ×Ðhì®RQ£Ì3ƽ¢àŒ2èƒ0AÚ.a0œÙzúÃÔDXÐ4ãþýöÿéÿßß(ßÝþ»‚Øþ$mh‘™ÆÍ ËŽÁ;‡ö1'Äv –; è·li7ø.Âm&Ÿ÷¯ÒïþE„ÿÕójëïùÚA§®n!ùÓ!á2C&ƒMOÍŒ;¹AìÎå»Úº?o@ìž?µúa„0_¼UÕ¶¿÷ëÿé÷÷º¦Úï ýè0Ù @˜4ÓìŽI;T®î¡Ï<8v‘|öû[wW~^oˆ‰TFŒª¡ýd! vÅÿý=ýÚw{k +¶)ÿѪ?®œ0¨˜öø‹vƒsc÷ïkWzm¯þFÿ«í¿rß"µ™T̬͊) ÍFoUæ)¶ÿ_Ò|Ǧ›g @ô †*;Úú.VLÙ÷¢ÇkA·Ù;#»ïO½Sï¢wñúï¸dw`Ž;÷îºr*"d|ÁÊ£NöïMS­ªé»ëß×ïA…†ÙçhB ªÐéÿ»|áÓï´ïN»ÿxÝ?´ß¯Ë Eoþíä`©Äy)—4T·ôû¯´¬&ºŸ´í&G ˜¡(6„Dk…Ý‹kuÝÝßþ÷ÒÿýµÖÁ~¥¹ýоÓ̆ò² -ý¤Ã §h0µ÷mœ7Úc;M8¸èD4#$3Ìáí{²výé·ük÷ß´õÿ?‚ß²­Þöq®nNBöO6ûŽ:´*¾Èâ*ƒ[L–4Ø»dQÛB0PH)¼¼u¨}ÚÛúÿ¿õÿ­iªûúl-ûpKA´µt½M²B„Wï ,0”DB," Â¿A`ˆJ’ÒõÏÿ¶­5ÿª3¦Fk½æÍr >!&I„Âa™£M4ïâÝ‚ < ÓÄPª-ÔÚjN6m~ßþ¼'×]¿ÿïñÿ°¶þ¸L/ìŠÄ¹šFÌ"ÁŸaùA nD&LNÓ¸0ƒˆ´BM4×ÉÝÚf|h»}/Æï'ÿÿ Öoûïç$Øÿ½~í×tÚ뫈ÿ—0SfU“wïðA§ºv7aà¥ä2vK±Û»O½>øÍôŸa¶™Ì{m~¿_H?ÿmß¿÷§žxV;_¡úBí4íÒÑ1ÛvÁz-Û ^X(dqQvðð›h5M»ONíµ[ÿÕâõ¦Ý ÿö·ûÿý[·[ßûÚmP"â´Æša­¯bÕÞ¸@îq¾H8an£Î›Å'Úúúÿß¿þd­_û¢tœ?‹ÿÿzÿÿà—´5¼Ï[ÓØ¦œ0M ñÇšØd£.Ûõ¯OLVß[ï½ÿ}ÿm6ÿ~ÿ}È®óTUMu¶Âkéý×í?ýôÅ*ÚiÃV-Ú†5®ôô÷¯Wú[þ¾–ÃûìŽ'í{ÿÿñÚdLÓµ;"1ƒ8F‘ÿ¥ 7ÉÞ’I$cUSëõ½=4ÿ}Ú«²OÃB"= tëíoýÜõéÙ„°ïô%¿øw®ÿßß-Í îü­Aph3A¦ƒ ¡tP{±“» µïUl špj¶Níö†Ø¼8†ƒB:ý÷ßõ}ÿüFßë._¶í´µÿûÐŽï;óµMJ”h˜ï†v`SmðE¸8NýVãL'qAAABI%#z„"F¹î":[ÿXÁþí_ÿ¥íÐþ#öÃñÿüÚþ÷´¤è‚ ˆ¾È‘'h ïH˜öƒNËç¡{õ~¬Ía¦Õ4 l”C[l ÁÓˆ†˜,›Uõï`·Á{Ý7ÿÿ-?ÿðöúÖŸ[ÿ‰)ŒÕ‚fhÒ6Ì È°Ó°A¶yîíP6ítü¼z¥Ïí¶ª}Z°„C4Ê!Äh·Ié?uþÿÿü7ÖÿVÿþÿ1þgþ™&0ƒ@Í@ì ÂiÝ„&í¤N½Xm­ÿ÷§ýª~©øƒA¡ƒ¬·›'Óõ'ïñü»þïýÿÿ<ƒ÷ÿö—ü4üÁùt ¶žÛvªh †·~ö _ÿoîí:éŠ5ÄXª+­’…OÒN¿ÿ×ÿ6¯s¦÷ö·ÛïéÚñßiÇöiz‹Š&í¼0Nîáß /Óün>ÿßÄXã¯Ëp.Œ‚6Ò¤ªG’IuÓoù¢ûÿ´ß´Ý³ýæ6ÏoÚmúw ;6ºµk´ÖöXDôÏMnîõŽö×·"ݵ×þË‹k´ †±¯ïâž©$ÿ~æ0ŸõÿïŸßµ»ì&Ÿ¾Öšjšû 'mq8ý½þ¯ßw¯Zæ/$ýÿ˜@‰#Ët¬¯qXßúó]ýê’G¥=¤’I*ïÿÖ­­ñ¦ÆÇ¦×ÞhÜ5µôÂàŸ[þ×ÿ‡‚ÿö‰þïèc•ç¦e¬š»A¥Pé/ÏöÃVvœy*V¶G­8ÖàøÝ=ÓZµÚ:b!„"-ƒ Û§ú¥ÿþՇ̉EÇí‡@ŸÝ}ùÚx쌎Âk~Ö9¥„µa…@ØØ¤ÓªŠÂ )B ”)Á4ìFˆchDDÿÿÿ÷«¡ÓÊtÝ?{kßb×Ýs²ïR PƒýŠŠi¤ý鎚j“vÃP!gt>ÿy?¾_]ÿì[õ³é[××Jï3ÝÃT><ÎLñ'&ïÚ L:jšša4 ÉŽšÄZ 9B‚zÇðˆ™¯ÿ.ƒýý5þû†7?ý¶œtóxMô]´ŸÄvŸsDDÍ „""?ßüž¿ýŒ7j¿°Â­Þ©¬RÚ÷ió%˜¬é“ŠBÒD¹“‡xiëßñòûZûÿ~Ì/Ö4ûAÚó: G÷ó´™D| fhƒ36h0¤Áœ0°œ] ôëµþ’IšI$‚¤’J—ܶ~{þ߸294Ðj˜BÕ§÷;R9Œ! Ó9Z%„ü;Mu´ØRá ÙÚW¿Õ¸Mýiö½?0¨.è5{_ïÃ'4 â#‹Tü‘šƒ# õ0È4LFÌ}è4ÓE»»NÈâ°‘¯¶G>l†ƒÿþÒ¿eœ"ýoÆÞ¯»¤I*QJU¢4ÁÐá…üÌE³dOtÏ‘ÅÚ‡´N=ÕµH»nq†°áÚ<úuwé¿·Q4ç¶YkŽÉRúÿ³ÿêë÷jˆLa„"6<§0Ê$ SwÓCˆkÆ¡Ê&íÒ ï]?cïÿ}ÿþ!þ"WJŽÍ4Í;ïõöÎMª|U¦ƒÝ†¬&Ä/  Âhh»m;Scåç¦NóÝ{ûµJïí¿ýýÿ Oå½0Mß÷¯Ù¡ÚÇiì\: E´Õõî[´H}?´“£wmÚ ÖMjÛµ÷ÕÿwþöÕWKó±>DÉ6ȦvêwM¿T اµä£¨´"ýŸ9æ¡á’wë¼=m5½×ŠWÿ" kõ×î·÷ÿÁžAî AÛé…µA¦-4ôÓ†: Žû¤ßß®¾ïÕk¯ÉÅ×./í×ÿCïû˜ûû÷ý²/+¥ÕÓ»GE)а„ERÒ~×ýúÙO[nµs0›ýN‡JÊp’ð÷ÿ_ë¾}i„÷yžýiêNÉTŒí|E’„"""7îüzý¶×“ÿúý"OÿÅúü¯ÿÖÒ×öÂw w~·u\ƒŠ£"q­œi‚f }^nÄb»¿¿ïÐÿ·[Úÿ¾»ÞhŸú6¿÷®íSŠ`Úg-Þ„¬¬þ©æÈÈg ¬'ŒdâÛ M¼<ÌàAÀ›S0Ÿöí~üzõþ·tÿ›I¿ö«v´£´PA´B#’˜ò½2‚(“>ŽG™ÐÉãmH¶qü×4B+M@ÅLà¡ìºtnxx´èhD^ßhœÛ±{úk½­·«ë_õC‡ám&“Z Âˆ‹æÌ&‰õ0ši„Ði…O0Dã  Ðóz­‡ÙOM4]º¤Ã&ðîí.ˆ¦ >Mèœ{Á½ÐMºÝ]Ûö¿ú~¯ ÃŽÏIÜpÒ¿­68Á‚ ÌB øJîMÛèE„ú í?A«²cf;—”°Û†‘y¦¿­°ž4 Â~È CGáþªÿvf»ÿÿØi+¶0EÓA» aLèDGVOÇÉŽõ¤Ûr;—ý¢á±rq´¸wí&æ½mtÛµïU†LkN¯É²± ¢ùÄ&©ßôý×Û ¶°Òjí6/¦*íª §†DXahØ„ ¤ö•ÝÙ+ Òl>çÚ¸e½ñm¿ýi?o_Žíþ×ô¹qS­ÿݰa/Ž)ÓMC'0“ЋBA¡Q÷¯¯÷é¨*Ò÷¶þšù;÷ôýÛëkýzØO¿}­¦ÃM¦ƒMÎý|G‹ˆˆþ={Ýcãÿt+M>5ÓuZý—Õ±òâú¶–÷üV÷†M8i±°C°AšÐƒ „Í Qâ#‡û\?ÿïë_ÿˆï~ëÿÿùpqì~Ù†ÉÄDDEE=3²¡ì?qêò@Ÿñ_ýuÿü±Ë…oÝ$?ÇkÿðÂhZ ™;ýÎÔ|ë^ë‘Cù ‹ÿý°ñu®ºÿúúˆˆë)¢Ýá¿Ï•W¢óÿ2…ÿõÿÃOûõÿùYFq…îš-ÎÉrM'Ãþ‚ÒÿÿÑ'ÿÿýX}ºÿ1×ùµ÷ä&NÎA¡~Ä®”4k†ÿ…ÿû üÍ_ùŽõÌò­î;?»„»Uó:ˆˆ¿›2qUuídtVŸÛíæ­û×ÿÿÿëÛÂu_®_[m4݆aê°¨@⚊õµl.¼&ƒÞ‘¯Äì“â-ì2_¿ö÷ÿ½éÿÃ9ëh;µµŽ=b®¢7b‚iá ÖÆœ8­cDâõïÌ‚fy‘h®÷†ƒ¿m}ýôž»"ÍÚlhнm‹þÖ©›V¯µM4nÁ¤Ú 8j漞4m;  ÊPÌ<9þ¿¼k†¡iÃNì"È®Ó4º„Xl8oà 1nÕƒ 0eŽDmD0Јeˆáª½o•;lÝýZï"YöCe>yœ:׊ªMOi Õ4a-¦ÃmÙ0ñ²Qh„Zq©ûX}?PÖíPçšY¯9Ó<Û3a0ž4 m°™(…±i”öš(CÎè0„Dï˜Å3ìK¿µØ~Õ¤Nk¯ôðAÈYÂ{öŸê–"ÂJ„ZOb,!áö¾ôøjôŸÎo‘$™œv9ïߺ»»T°V""¢;ýÛ ß¿„äJ:3Fsòƒ$ ƒLœfqƒ3Ì þMܘîÝúÝß¡/Ua‡þÛ¨?h¬²tÊrC3aÎíG@Âv¡0š ÚØT èów}Ý÷¤¯a4þØÜÝÈÌ¿’æi ƒM͘ ñZn‰Žýl'&í„èœ7ôøkv¼zKÅ0}º4Ý:‚Hy³wQa¡99vÃ&; û'„ð’Š»/½}ãâ½é¯,‚ìÈÆJ²óVÿ§ý<À]ÚNÓíûÂt½Õ°àÝ;¼Ñ¿ëP»¥H? ƒ[׿]Økú eÛ ¸ ƒvÔ¼ËÍ$ï­í~‹Ž­ÿý÷¼~þfôõù’„V™O Wÿz¦Þõé¦E|ž4½ëiééþë¯÷úëß÷…ÿ£_±¥\ç’ˆ& ¬&÷xk X¯„ý=„®›Ú\WÖúþ+ÿ9í…¡ÿõ]ñ—¯¿§ØawÓÍF[ÓLôïü}´"jCñ¯ÿÿ\ TÂïæ­zý ¿ßßÖÿýom0]/ü4ÿÕöÂÛ»N«Ç×qõ.¸'^>É‘ûÿÿïïþ¶Ö÷w}ÑVv%‘|ÿ‘ VÄGÁ¯ñ×ýu&9‘ºÐ_¯ ýÿõ_}ŠÝÝ÷kÊžR3 dâŸ48‚!<„›ˆ‹ì7µäpžL«òÀáª}ÿÿÿßýŸ´•Óa‚w´Âj÷ïü¤³£!º2CB-÷AOÐgÉ>“¤¾Á ×þ×ú×ëùšÍ¯¯Òøl0°Öâ∎þn QûR@Ô&a `ƒy1õO§.즿lé$’I$’T´’I%H$—kí§®ÿõàƒŠž Ù&J×Zy3#hÐÈ(º  j›“µÎ#¤UD3M9Ŧºl“æ‚ ¿V놰mþY‹oÿíš–m{Þë°Î?Ò Ã@IO4‚J ¡K‚ABP…vB,¦¾\ðAÚ#†ž˜NïC°¢(S „CÝ6O&î\eÝ޽/v°zÕpwÒ~ÖÏáz}Ÿµ†zÓŠA¶ž&ÃV*)6*Ób“M™Î\ ЈˆTHZGà©$\lD‡túŧ4Q8lŒà¥ãw„鮽úÞÒÝÿö¹(Žàˆ‡e™3GwC;)˲=5½;a›jÇÆ¼0V°ÁPi†¸8a* S½ºi°¯Šï—mݤ$Ð@ž¡$8RCÂ&ôHMSÖ­ïŽß×wþ?NëÑÉXDؤ&ša AîWXXÐ6V Pa‚lW0BáÔC†˜Ml.`ƒ<‰¥—Ý ïUû×ý„A÷]ÒIRI’JƒJIj`i$I$’ûøw`õÞá|qI« 8h˜&$džˆˆ³ÚÌÜL/oßüoô½þÆ›ÿûëa÷ý«wîN&’T‚JœŠ2á{ÝëV š  ÂqÁˆ‹_õ¿Pë¯×º~àÿ´?Û_øCƒý…þþ|Ì•…n] Ј´#÷ÿÿüCáýõò#¯ ÿ_Ýz'·K¾ïŠ¿™QýÿëÝ0ÿÿéx‡õË×ËÓ†ÿ¿`â½æ×Çÿs½-20öqèï3g™Ò9AddC:Ó,å¤×þê­ÿÿ_ËpƒúÿýÞ¿oý;¦ž¿œGãC3#„xh'”z·Z©Ã Úaœðƒ4h¦µÿÊ~îµÿèAÿ_ûÈ-ëýŸßþï÷ùF²_aªƒBÓ%¬º)ã=ž/_ãvÓɽ L· ȼE¢e™ŸßûjÝý=ÿ·þÿëmuëazýb­deÍ ö4LvÓH·Ìøaj¨%Ù+aM;5ïÝÃ&ðÚN…L6Ñý2Ü ðNï;(S>ÿø¨È,ÿþ½ºä—}.³?óóiýªam}X·†ixAö«N‚mÚH7AÃ-û·}´ûz.kzýÞž\-Þ©Ù<ÁÚ;$ddB4ÕU]hH˜öõµ¿k·ýߘì.†Ðq¶’v´Õ&œŽ5ý=Þ]õdßOôø´(»Nï_¢ypôïµm¯îÕ ]ãÓ¤ø×ªkáúÖÓí.ÕôûNÖ ;M:sõïWkM667ЍTB6¡‚a5<%~6ô“à ᥷¥¸~;ºßÓíoµ_ÿŽ6ëùÜ¿a­Úó°’•VK 4N߃a¥» 'ŦÄ; 5°¡ck†Ó$êwAÄDaˆ‹ŸÿÞôìUö¿w¾÷×ø¥Ûÿþ¿Ó×ùâqi>ï´*Ð'™Æ™øÛ6ÐiÁïÌébŸkh4ÉZ ³ÍÚ¾ý¡ÿÂTYÒc“`hÂ(#ȹ—".Øb‘òï×­¿þ´“|ĺMÚúÛØûý¯÷Þúû›Ì__Ríº,wža·§PÖÿÚ'—hó½Ò¼bÿë¯EÛɸV@³‘Ø9BYnœÈ,„5B-a´¡éª„•$’ ¶×¾ÿ"Û¾öëðÛÞÛL&Ÿ|?¸½k‹ü4ïNé÷uwïéúÿþE„½'ÿ¥JMË i’w¶v•™8‰…é‘m‘aÕ=rQ&`&¶Þ˜KAVI¤½÷i¦šo{g~œ ÓƒºoMX?ù‡õ[ÖÿUðßýýåÕ»ïþ›ôý7ó´™ “("hD¾ØvŸiõzk·ñ &œSLS• ¨4OX0šl[áÐA¸k ¶øi¿dãÿA¿Û¶¿¯ñÂÃ_ãÝ÷þÈâ?õOþªå@¦#"ÍWñZhd Ô6Òm¾Ûíûü´‚ ‘^ÞІÐÒ°©…A$#h-Óð 4'8ˆ¿Þ/ßëúÒüpÿåºÿöº¯wÿ½ïÂ3úkÉÃÙ1ȱ£°`¬;[u¶ÓýïÅŠpЈˆ°’ŠPá‹' ": –ŠDDB DÛÿúüwäÜÔ}zúÿŽÿÚÛ¤‚è”W©¡º“Š.¹8½4á m¥oM¿¿øcöl‚1Aûkûíÿ}}oëª×ÿûÌ}ÿk±;í¤*'u,#ª#¢@§ øˆqf£#¢rÚ§„ûM÷~ßßÙMÄC‹û Û•ÿýn®Õí~³ëfÑû_¶¢ ¢kI×r!Èy©h.< Â]×DÇrAaï~îþ ¼ï ··¬.¨ÒIRUIÿÿçµêÿÿOö#Öý5ŠÄzsµSR‘gïã°Í2ú™°˜@ÑbAŸa‚ SÑojƒ²nÑ'iém*¾Úi]¯ö“¶¦å¸‡ö•U—WýÛÿyšÿ¸¯lÿµa4jMie[ŽFÙ£.I’ û6h„-2†F™£ ž°¡aM4ÐzkéÍ=; ] x\»ÿÕzÚ*ÛoÛoïlóµvz¥I%¶}jßåöÂmÿꦬSBqpˆ“/ŒrT44ÐhCL°ƒØ°ƒ'":yÈÐEdÝxbqö(rÇn‰Ûä‡xtüZ¯uéµýñUUÈjúrFÝwø<”ÜÈtý^ôÞëûé(*„”(¤)B„ôôÓcAˆì“ÄGQEŽÂà ¦±lLôã &J ežï¡ 4^7Á;7.í:@ÿôûâííZ_J#éVÚ·¯·­Ü”pÛò0ŽÅH·VesX‚]™ËKûÕ­¶rMScŠc@騰¡°›ØVªAý;.Ù!ì‚tNìžXMyoDáÍwpÉ»¹oÛvŸv›§÷iꃶ7Úõÿûu¯ÝmñõÓy¬·©UdX;24É\u"$ÎÈ4ÁNè~ŸÕ«ᦛv°š œvƒ7 ¢BýÚ¤]ÚÚ§ºmß®Ò ÓïnÓH¸MWÿõãØðàø<è?Ú÷°—®ÆŸ¾‚ûÏaþO9t ìM'§„ÂÛ®ž®¬SÓ´_´ÃCB"!šÐ‡ !÷é·z~žº¿¯ûëö©÷ß¾·þ¿Øl=‡`¿Œˆ?ô˜_{P}¿¥ýúðøvnWÈMÚri¾6ÒbšlZ&˜L â""#z·Òû_Z­õÿOUcøýŠßÿ_ŽN.Rl=¼/é ýšö­×ÿêëÕÃ"…"Vg‡»´ínÓïÌ8LPh0B"""Yj0’DRÞ«Çÿ×ÿÓQí¯øÿF™à¸[†ô_fIÿ'è>óO¿ß¯ÿÃNÐ>î.C¾"ÂýzP’I$’I%Åõ‚ð×T8uJ¿hè¼è“Ãa¼þÿÕ_éiÞÝ~³mòúÿþIJûõßÇÿ ‘c„’I$’H$xšjÃúØõÒ$ÿ¾·A9ì8|æômw÷ÿý_«ïÖðwjšÓ'%óPÔà¡?6ͳâŸ#c3º"2>wH¿ÈÆky8ÍÂõ µá­[©:ûýÇÿñB´‚¼“”‡Zèÿ¯×nb~ý~þü†¿þþÓ|$«„… §AÚh<"ƒ_í4à“Ëf !ffÆ|‚" œ™¡fž¤)g–[‡„ÂÂÑèmzó²Ï+&=µÕòëÿßßûAx7ÐJZI$’I$’×ÿ_Úë½L.Ùɳׄò‡ê¶®¶› Â¦›¬SimC§„Hv¡¦½½‡´BÙ\Z&í;@ÐÓ5CˆrCÔ0Aª£E Ñ'~ƒ°L y6á#ãmNÖ]=¿×ÿ¿ÿÝÂpÿàÞ—ýÿ¶yzê¶·­„©>ÖÂúv›}]Û„ÓAà„$î™h*qÐØN ÍžƒÉä;J®ᦑ;}^ Ò,v¨œ4ÛTaßpÉGAXi„ËO2Ì”Õ黣ÎÅYãAßÞÚþÿßæ?ô³ûÿnÿwúIL*I*Tš‚J ЮG665¿Õ5[OlšdìŠ<0L!aà µzÝ'Kwªnk† ^:Úi n_a:'v¥æXíZDáÉÅ÷ ß»´ )w—›2V?ÿhì4ƒoø¯þÕÏߦ÷éö©ä9í`ôôØjšn6F;ãb¢… „"´Âs°)tCæÂ¶ ¾Ê\ïûv×O|WÛ~ôzvëzuzÝ'HóEô§A;ص{[Õn•å;"mH÷dU>׉ÝÁì–>°éÛ?ݧwpÕ;ŠL&› ÃÿaÞÙïØ¤Â!¦¼;IŠ áÂlŽ&†ÐˆŒÇË.¢Bâ 0t>F@!ÿ®:ï×ÿ]â­ÕÿþûN“tü=ñìj›ü&†­¦ûÕFki»û`­…Ø0š &4ÕŸwǧ (29 l0«]BØA°á¡¡M&ÓB""©$A;'B5û¯î¤àá×µøzêž™q㦿µ­öÿI¿­?¤Oþ.J2‡œI•™‚±Ã½Ú}Œ1[ŸÑ>A®aˆv.6¶*(4"""ЈˆÐ‹¸i—®n"#þ+!à¾ýý{¾fÖ+ü°Uÿü0š{î<8z}µS¿°žn50MKÚ"+'6GïðáÃÿ†Cºšh4ЈŒˆ°™ÃB$óXˆáœÜ.÷–5Sa~Æ¿zûü"Om);(—§Þÿ¿àßá×ÉŽËÐsµX†34y„ôÊÁÂÃÐg0šWØA¡ÕjÛ»¯†Ihˆ„Ct”~¿¢qø?o¿Ûú„îô?þ¸¿ÿíÿO~ð‡ò$Ïè%”‘Ã"ÑÆff ÂaA·åÈ0ŸÜCôëÚ É+»Uíoâ"#ëN¾ÕýGá½m.××ïþý>Ÿ¯¶ÿ÷ÈÂTìÛ\œPTÏ™›0h0ƒˆ´âÚà ,&›‡ mº'omØ$NØ}ÚwÇÿþþ¾µú½æÐ}úâ›oïÿÿý>ÿëÖû" 0aoiÓA=Ášl[ ½¹º;a…a«MmÞÝé¿Æ›iî‡úòΩ{/ªÙŸÿvõ¾Ó¤¡óª¿íçÖÿ~ý¯o­ª¿íøAÄ4\îߌ»tÒa“Ë'‰öÚvŸ—Î]¼6îÕÚ¬k1×Þ«éÞZ4G`Æ›û´ìÒíµï°—}¿ýôÙêÖÍ»Oµo_«´Ðua$ÞüÇùçðӇÒmáKÆË‹»[¯º~ý6“ë÷Škéï¿” ýe‘Ñ|¥H2Zˆó}â“MŒÔ ,ˆx aÅ4ØJ×TÓlãbØÛU†läÚö®· pwQh4دDï'•{ëë~›Æ­ ûýk}ïׯg­ýݶ¡ô;N,;×}„¬[#}èj*Õ &¬L;ÝÚc6.X»b¢ÛŽ[„NsëÚúzn¯ñÊÚý{¿`µú«Ù_×÷„ á¿÷iŸïl‚뻵v‹ ™;A„&õqUA„veÔM2V˜Ù`Údp„Ó¡ÂzMS …ÿÿÿ"]ß×õ¥£?ÿøŠÿíùz„ÿû¶)z¦Þö·ehE„ЈˆšÐˆ`„D0ƒBíŽ)íÿߺö’ý¾)ý&®ýwIðßðî¼'iäD[…o¸¿Än„DYÔ­¨ÿ_¿õßÉŽZ?ÿÝ/õÿÿé÷ÖÝëiïzê>3ŒlDB+Éœ{ÿ]µïT+ïîýç¬Çÿëÿfkû¿û°@ي׾vPŽ­Ìãèðš¦NFò¬}Ókìÿþºm_ÿõó.¾î·æ;Kl&ÚiÃu]âñ|Éo*dm©Éã™ a“…A„þ4Âa>Ó°^¡ÿîïÅÿgŸê·×Ý¥`¬0ªÇ» ˆUi¦GhUNÊ‘#3gÄ3j§u³|dãϳ†53h `¨Z¯qNÉã—|D„ö·Z÷éwhuÆšm›m«qH‰DÉZjا¡òA‘£5 Ma„á €•æ ÆCÈdƒ'#H³… ×[¹ &ÚnÜœ7}v*Dïs! ª"ÈV}i}?iÛk{N~ÓM4ÓÓ Ò[ÚqÅHãL¨[4"! Í p˜ ÂgƒŸ±i„|A‚4 ›hCtLw¢á†¹±Å¼•Ð]o//ûÿty„ÊçØhì¤×µû[X°› Ø­®Ã ƒL&švM: m7´Â !ahDCx4NNÓEÛÝ“z'yv¥Ý:vRc¶-Ù'H 輸t¶:NËëm7ûéÕïÂÓL¨ðƒÛÓ1-§ ,Vƒ \WšïA„-4×µA„Ð4"#† ¢í†NòãM»´õtè&öƒ.&í¶ÂAò|Új›§ëïzv«Okß«û¾¤£*½µ‚ÝÅ%h;"ƒBÖA‚§Ü´{]Ótéjÿ^ÿýÕ ƒíuˇ[Š¿ïU¾õûâÿ_ûù7¨œîÒ‡W¼4þÁ¹ Ø!B !ÂH›úN¿ÿ‹_ë®õmÓNõý~7×þŸÿß°Á<.[• -Ã_¿þRhDF”?ÿïMVþ?¡õªxúþ߯¯ÿ¯×±PA‘¥éñÝZ×µÿþÈ÷ýzêjµ¦×x§ïô—¯Ûë¿þÿìèÑ'únv6¥ZIÚ_Õr^Ì2«8¿®ñxýø,T±6—ž Éëÿïïÿúûþÿ¦ ;Ê×üNÈü3lý<ͰDZRpmÏå>qœ‰ÅS3.Ï™~i˜××.0ƒ3#dè34Gˆlù„YVçîO?Ý~‰=…Årô#Ö¿«ú·ýµý}ùž+íkØ@¯Â P‹D/ˆ2…ù‚4ÓM!„ÈÒ/3)ƒ5-’èAÅ wª„$s 8yd%ó ßýPßý.cPOÿ[ÿÿÚùêýÏ^›w¦œ'hªÇdÓçVq§•³TÛzoN͈`i<\z»f! Pƒ3 CӲ惃NF>h}Y‚’ÕNï+Ó+–„üŸ:½ÿÿNg¶Fÿ¯}ÿ«õsÖc_¿ô᦭ö&©ßzh2&ŽÁR¹†ªÝ˜dæF“¦{tkpÉY>rqdÇn¸ØwšÓ.„ìŽ)¨L&é#^¢.Û°  í4ÐvƒnÒA¼Ë\‰4È6›Nø@Ðÿ_ý~úó÷ÚÿëÚÿë­ºªi„L&Åän؇ì) Cë õ#Y31B}°÷§°ƒQÛ¯÷´û»œ6šåå—Wwh:']äâ‰ÃdÞ‰ßhZðA­¿wßoi_[\4Üì^#q¡´šù„ûoë÷!fÂÈYÿÌ+=v©·L[ cŠMŠM7Tö Ý’ˆˆ£ódp¿'Õ2D} Ê³7Ñ¡¥xmØOºi¥õŠß¬_píjøøûW½4—»Aª|jNᦫVÝ|5½/´¾ýôÍ;M5E»“޽¥ûfݤń 0œ8îÛ=i¦­¦¶@Ø«ƒ.miµ  aUЏhW*c A¦ƒ=»M]/Ý*Þl½®5þÿÝ®¾Ûëéñ®Ÿ¸o ÚÿïºñÝ{¤ÌIÝ߬ìtP3@C-5ÒÐOn¶dQÍt«{†“Aà ÁÃcŠN)Ú »»´Â$LôˆˆˆáÅóù³EŽô[»¤Úwѱý{zßi\‹Ÿ~µ¿úWõPãÃö¾¸~ã÷µ¯¯ë`•µÕ5äUÑ·Þm¶a0KvÙs„µu¼lTh0¬Pi“ÀBÈã76¼†Ø«M h·B"ÐhFˆ¿úv“z ºiþín:¿·õÞÃÇñþ|+[þÃÿØ{CþÃMû‚ uYôG«¨ð„¸ÑÙ+6d24YN"gÏÍN.ôh˺A·t ]^¨4 SMˆˆA8 N-˜M0|DDY?·¿í{{Xÿévÿê_ïÕ7µëì0ÿp°j+îßäâZëCcèFß-E¦ }4 Î<Á¢Ç~‡G†ƒ³Am´ƒ{ïµ_ú´$Q† uq7ûaëûßÚSë÷¦ÅSkolò·ú¢Q×§û èÌ(na; o¬*ÿߢCõ÷ª'g'9"…žÈ¬uÊ#”Zv§ †¡Û×êHvÚúÿä ëñm+K&Ãü}~—__[Ûû ížPÂkžïðŸã¿­þíÛ…ôÃtú/;õ·ðî¿"¦dâaBfË ‚ ~ „ øD 2XæëßôÛº#uÓ–íßüzùn‡ö)ж¿u»½ÿÐ[ÿ¿äVa65c×ÿ´Ù#ÿ=>bý,Ñ}ýþÒõí¾ÿÇôŠxž0a‰þ…éöœÐØ·u½ûýÚEÿ m&èVý}ñ÷aA¿üôÞ?ïëÿ¶{@ئmSïºw°^þþ¯_>ŸõÔåæ×_æ¶}:þÛú@…´é÷¸tIÛ`Ú.Ú»%÷iÚÞ¼{ÝþŸË‰¨%ëë‰RNW¿Èô?ÿ­öjEŠØM°ÐˆaBi®©ôÚÚ¦ö©¯Z}žþÛM>ÓO[Ì-4í†tÂvyúI·¢í׆°Ô¼o ÷õnŸëê½®¾ÝkÛôi¯ýõ;*È=ú«ÿÿ}¶±TÓìQÄiöŦv4ÓA â£TÓ´ïuÓ¸ì%¦ÚéÇjÅ4¶Á¦ñ]ª/½=?í$ýjéoÕ×ÿU{÷[ÿŽ©‡ýÿ&éM3Äš¯N½?î­—pnÚlï<¶…ÚL£ Û§²p¾úhÖM c½ìU*ÅÆÓ@Á…‚h1xkŽÚK­Çõ¯ö½ýv×óAWëýWúWÿ4VžeñDtj#ºL”öšþŸ÷g?³ši±»¶m Ä4 ÁDE—h^„.Bi´"}1*-SÁ ÉÔšnÙZhDIFIî\˜ÿÇ¿´Î'ýþšÿýµð·þ—Û^#^ü0­ ð±k”Ê»Z4/þö.ì± Ô4DÊ"&ÒˆˆˆˆhIðÓ†„E„!¡’ÍDDz ¥}‘Â-¾µûMZˆ/û÷µº5úíŽ××íXâSû¶Ý‹~Ðv±;ÅýÁÜ6™Œ5ˆ' â"""(4–›¿Š<°úþ?BÿþI¿_úó<åÚ¶›M0[áôëÅÇ:4΋ì+µÂ¦˜!a‚iíc~깪$ûmë¿]¹³_ûþ½_¿_iÈjˆ”ÂÝÝæ¨) ‚›a3ÂaW •Âvjiø…^Ýß OÝ‹ëþ·ÿjÛößÕ®±W²QÕi>¹'‘¼ h3ñ³!ôXìÐCâb"'bÚ§†¦¾ÿýíÿwúþÓm+‡þ¶»Å6a«l84B=õ”‘É}çÙ˜C23a:EÛMQnŸH:…ÓîÈ·ýÖÛÃþý³ßúiÇö¬4U›iµ.á¡òæ¶JNŽ"-xšDìÁ¦H š¦ªš„˜aS¶ÚN×¶‹Œ×s$´M#GäBF…rf#‘ÕK1êÛzÛ=Zw껞ÓôíSµØ[§vì…ÉA1²ÇB‚•™0‰BͰˆK8dâpjB0„×4a4Úa>Ø[¼ÏXÌÓK¸kµ½=:IÚ´)‘¦E¬[(eÇv™ý9” djލË\æwfí¿á…´ßᦃa‚}±Qi„Úyé5 „2p¡P´"—šóÐAœ#fƒ!3…a> ?уˆf‚]„ÍM7ÚPÞ×½H°Ëˆ""oþâ´6ÕߟŽg, {¥í¶¼ì‡fˆù„”ì°“O"®Á8v’ ‰C¶Ú}UŠA­28·ˆŽ ˆˆ‰õA‚°–˜A¯¦ŸÅÍwCiÓDã$í6›iÃEãl;¢í‡wƽÖÒ}ëǼs[20©ÜÏ!™œºièö÷J ö’ºm&³½uMðî:tA±„ „Óˆ‡a ¦š &ƒB"š‹Ý¢í¾è±îòxéôF÷©¯\&;i­:­¾©½ª}Eßïz‡z¯´™Çýía'‡{í}pëAíiöƒNœvêÕd¦"!”ÝU혶Î4žŸ îõx¼½S¥î‚»Í–•ºkü_øÓÿ·YÐF ‡÷”çßÞÓ¾×Ñ(ßñuá§™ï¥,~ÿïâ!„""Æ7»öýSï½év¶?½=z·_Ž–’Ã×ýþטûƒÚ;¦CŒãmsl&߸|âkw¥n¿þ†:‹†ºÕïuÆ÷ïÕïûðö—ï¯ÿûÿödq6ÅzØ­¶ü…gH ÁÁݧÚ,wïo¦ž6?ݺZò`º lÖÏ?^ÿ žD<Áó? "TÿäQ÷Ô?ö¯¨<}?þúÿ#‰þ­Ó,øÔÕkÃfÄò5›ižpíCí½‡ Ýÿ÷ÿñ¸ýÏ™r3AšdtBGŒð¥‚)Ù›6Âx õ"#fP2!&O”W%ÍÊfOFØAá_T¬'ë²;ÓXíû··ÖÇï—ÿÃ:?¸7õA~òœ•;»JÛëÒßêöÈÿ·ú' Æ¡4$øžš iÅ‘}4 ù„ "``ˆ}y‚ •!O³mÂA¦ža8²qþYH7O÷—_¦ëý¤ß–æ?^g^ÿCþ¡ý‡ÚÚëŸNq:ö†ÝÁ·W ïÿÿì_Áÿçÿ{ráÚwOj4]¶IȰÑ!ßv‰¿]0ƒtšf¡›3zv˜u™Ã³f…Ëw'l ôó°Td•š2 •X'çayÑÿö†õµýŠ ·ÝÝÿÿþswÃ~•Y¹{OOzÑÛ¶ÿ_õûÿíÿúNýœ¬¸I:.è±Û»S]»'¤Û@Ðzá“Ímà kË»$3 ÛEØzÉYc¶ßD¢¡·y;¤ž[¼ x&LŽí5wÎʰƒîÚAú÷ípÿþ×îó û{3X}†·á°îûÇè6ïõ÷ûÝ­ÿåÝ×»d/;×½6¾pÜ;Jôá ï¿îÞîý»µ´“a ÂÛIßt·~¤ûÓÓuj §í’ y)È Âp××¶0óþÑ'yô_÷¿ïÆšö¶Êp@ؤì á½…Öézÿÿ×é¯ÿk­;½6+Šõ¤ûÕ>ýÓ»÷íµ¸øÓ{Uû»I;¿¾ÛW·ÿê×¾Ó~ú¦qÉßݳü:þÒÕ¿·l'íž–÷í$ÑÆž°ÓŠc4ü4ƒÁÃMEEw¿¿ÿî¾7ýfçͯmUR—˜^?¿×M/ößǯÇû_÷ÛiëñëÿÞ ö›ýßW²`Íí—"A»' -²WIým_*îÓ†²'; ֱû[M;=[a$q„é0š{Ww8Ýqj—µÿÿÿ­ÿïNö*E†@ƒˆa^¨m{TÁ?×õ_Öµø?»®Öô·ÿßý ñÿv–×;Cи†i˜i„HÍhÚzû¶.»Ø|S¦ÅñMa6?ãV*Ùc ÓM6„Ͱ†èE'k'úÿþ·ÿ%Ÿ­ß¦Š˜Xˆù"4 üuÿ¯à¿¹ð°ÿþ Þõ¿[þŸe¹ÑzÕJ´Q›'ó™ÐˆŠHY'¢nÛM4N'!îíïa4Ø]1PÛ™ÓVÈ£ÍÊá„;0…¦‚Ј†DDF*ÿZÿýO_mœ“¤Ð~Ð0Úa&àÂ:¯µ ¡Þ ‡ßÿÉp¯øD‡ôßõòÏÿýÿïèu3 þB÷*±Õ“æÙñ3ŒO ái„ˆí>iá<'ì-éí®¿«Ã ÝÚhA¡ !Ô˜‹E¬FhLVÿÿí¥zk|a7[i„-¦¢,1„’Oï«¿ëðDï Oá¿ïñ·_ûûÿ÷ ùÚHˆc3 dfÐ`˜M4á6.ïM9q@­·þêÛ»[úc¯ïB" ÂèDÍ«W¯úݰª{d·Ä4"#¶é÷¯ÿïOi/TŸÃoëþÝ?ß½z­ü¼þS‘ „ 4ðšÐq¢q}¶Éßa¶Ü»¥{×ßWO´íuS¿ñ¡aÁi˜½4ý8ªÝ„B-•Ã÷T”%¤H$©$’UÛßþfƒßÿ¶ÿ_ÿᄅ_ážEÃDáòáÈ£´^0Ë7½nøf<óIºªo}‡µþ8þ¶R úî#¡Røi Á°B"+Û8ì÷|Vf›ýÒ_IkÒ×Óô¼Úöøzþ¶«§ÙÇ_h›¹8è»i7†ô˜a z÷ýÒnŸ÷­}Úøn¿úºøDcÿ|0¶ŸhDDG$ìímZ„V›g+vM´Õ8a$Âh;Á<*„•RR<´ÚîºÙɇ·®ÞÚJœ0”a5×ꜞ¦ý¿kéÚomÄ_ÿ÷ÿÚì~ßýr@–•ª ýÕGÁµía6˜¦;☰D-ƒcïm… â˜°œvBÀ‰$ »i&œCµ´ãk¾Óý°ˆ@ŸIëkûß_ÿý}\66×øDßTýÞMÒx‰Ù;[$‹h0¶‚m™' Ü0ƒB!†µ¦Jè1L$â—`©$!Á0É<1 áLá ðvš}j?ýký…׿ïëÿ<ÿýyœ)b{ûW&ËyNÂfDÎŒŠtÃD")äÜÄH`ƒÄX a„3Ú´fššÐhYz£C*íA…¸i‚  ÂÊS‡ ž/5ûüBÿúç@žíÿû0ŸÂ$? éÿ¯~´Ø¼í:$àŸ•4Üì|PgôÊNšz PFõÛ_ÿñå)èÂi–æ†TƒœÍš•“íCÃ@Á6ÕŠa¶±QM;NÓA„#MaÃ"" *Cà„;A ð·lZnÒ Ã%ƒAÞ`wvº4C3ÑyeÁôì¸ÓõímuûU¥ö·§wQ]ÇÿaýŽíqïÿïD#œ´är^µ$ ìTRñÚSÈ*ºw‡`Èãj)¦¼<·A‚J„Db•$\$í=Û ¬•»EØmR'vƒO,{Á;µœaýÝ'Û ÓÓ~Û†ºÒÜq_«¿UÚ¦Ìb×ÿ§ðÞ¿ŽÖ·ÿêLk„Ö¬BпpdizvÍØi¡aCD4 èB"-žô› JЏ?Nɧڦÿ£Í“ÈiÚkmü=aëÚ×ÚñÿÕ?±Ý}ß^ïïÙ½¶cÿv÷ÿº¯÷=Ã1i¢o]ü40¬‹ <œ\4øho=êÿáR4$I,$ª’é*ÿÝýÞ¿ìoÿ÷Køö ÷®¿ÿdÿØo߃õþÓkweÕÛÇ­$!ìCK'ÐÐ;Ó6zk\~­A߯èWµI$’Itÿ}?°ø>÷ãÈbÿü?HœVþ¿°Xkÿ·ìUwþç×g;/» }ŽöN[÷[÷–éýnÿÅ&Mòü_zÿëêÈâ}ÉZI$°A$—Áì?×–:Áoù«°×ÂÚ÷ÿúðo÷µµa¥kl[Ä%¼D4:ÉýIyÔé} Nïÿþ ÊäˆìFD6½*ÿý'÷oÿx"8Ÿÿé%¤šI%ÛtIïÿ‡ý,W]Ý?ÿƒôéÖç*Šb“jø`±š Ø‚"LŽm6A> &k{š²vt2‹Ê‹÷Ì _Á‚„GFU˜Aûl|œM}ý*\3£ÿÿ†ðßZI*HßþÛpmý/ïü?Úù»öœ¿|bM ‚Ò¦¦ƒƒO‡—z)@ÌÙ¶ž0˜@ Hææ¦ÌøL.FhÌ3Gâ´èª|$ýÓ%GëþÿßûÿÖ=ø7ýáðþô’A$’I+I$½Öûø½¿®•¥Æ®F*‹† ¢oEÃ`˜'FŒ];è âÂi¦tsÓ°ƒcŒZ&îÐhXOÄ'IÚtÈ38Óô]¿ÿõýoû¿öúúÃyŒ=ÿ柪}öR{M0©oÚ~ÙÈÅi±H;Ž:} ÁIØ&OM´Óá«\:'v m’N‰åŽ]´ì'¶Çܼ ƒ|±Ý¡å¼-‘q¿‹š…>IÅú ÿÿuýŠ¿ï¬AÁÿg7òŸ½{íÓî×½P}…I-% !H0” š&÷´"!„M>Øi“Z»µØËÏôàÒM¸mC.5{issÝ—¿Oþy²N‘;ê¡ ú^@Ý’¿þÿÿýõŸ—[üÆnÿ}ö©´ôŸ¶ᦦV4«ÓÅÖÛQo8üCZMDì^éxaÿí»{Ú~ß[µãõúû½: ë¾úÚwmÔŸši8¡ò+ü]“¨ˆˆ¡ì_îÝi?­Ö‡¥ÚøÙ@•k­4_Zÿ¬¸š¾—“µ¿ Ö y¹6: µßúíÚ¦ƒN0AØKcv­aÇÓ¦¡0œSQújH%vaЈ†Z U¨hNÊz;AZþöñïûùwÿþ¼i®:ïïý÷’.÷ò3ñÃdùT`Êhz÷Þh.š'uuÿÕ¸iÜ5 ÚÕ[L!ÐttÛZj¬0š !a3ê OìSiò+µDduFq ûä\¿ýƒù§ß­ë®L}ÕÇÿûÿ0¯ý]÷S»¼e ÏÁ4˜L ši«w]]oûèØMˆ{ œ¹  ᦃ8P/i¡§ ”!$؈ˆÚ]!ÚÄîžb žhŸ õ$÷ÿðotŸ¿öÜ5ÐÂƒŽ u®ëúú}ÿW;/(Ó;øû šFÑö~œTÐŽ-45úÃè˜ï}õa?_´Ð;MˆŠB ÂÄDF<~ÅIs3ÎD[a“½ƒí´\¦÷Ö»Wÿëµï´#ïkíÞ¿¾«•²#ŒÌŒL".¤ÆÈþ@ÓßÃM;#·$ôNØd‡îþß »}ºõÉt""v±J²ݦŠs3ÌPgNÐi=¶m°ý:þïëûýºÿõ}ÿÿÿÿ¯¯ë‘‚Ä4Ž Ï4Ðjí#BÛFæ‰;šÛM<&éÚ~î½×ÛPE?üDukÜTó"<ºèÖ¾*ö ÓîýúO~ÿç þ·ÿûÿÿÿÿ¶Õºÿ‘14äW¤píLøÂ' ÃA‚Çs×ï¤ú}÷ß]ú÷ì$hþè\×ùÊ£4Œ3ˆÜgú Õ¶jøné?_ÿÛûÛüÚsªvÚÛ~ݽú¯çÿVÂÇý¯ÚÃ@Ý6ûJ ²ãNÞøÿþ¿í{ÒÐûÕ~Õ*±H“¯ôD²[r‰8õ™‘ ©”H4ð­½][¿ÖöŸÿõÚÙ·ukkߪh4Û¿K³•ž¬÷gÿõmS ÆKƒv×´í‚»FçN­»ôÛ½~°Þ¯ì¸µÿÿíÿ¨ù±‚ýô„›'Žóü&n9œ“OA”>Ñ 7ouõÚ÷ßäu¬+ú¾Úö“acB‚Öí5¶/mS†XØÛ ØL  ­Ý¨D?0µé m§µž~÷úëí}{"‰ÿãÅÿ‡÷þÒæi/×rl”È”vLAºg£ö`ÌÆöªï£c6³kKë꽡ß_Øxéì§_ã±IÌãiŠÚØ¥L4!†4 ¦£b“bÐaXû¼4Lfbßõ¿¯Ò²:ñZý¿ýë‘/þ]Wa·¯úO~¶ž'a ·M4ôõTí§þ¾>Ûwakô:ÿá½üG÷m Zi¦šFž"¬$ØVÈwN ˜L×do ãÕ‘¿*‚e-&aÓ% ¿ÿû¾!þ?·þ–;5_ÿ»½ÿ½Q›A¦«fJJúø}§» £]õÝô®é1WÄ}ü‡zÿƒ®ÕWñà„ Á Pˆˆƒ< Áˆ°‚4ÂЈhDCDG놿îë&â¿ó«_ÿÿ÷Ýï÷þØm‚ &¾kÎÓÅ=d©ªeS½ðÒ¾îîõ{ ¿þûÿõÁ½þ`„DDDDãÿݦ¥ïÛÿIÿî×ýõ[>¿øí´š`˜uûªyâ5ý~¯Ž?û"öE„²{ïº÷×È—OÛiݰÈåÿ–UïÛóEÿ­Ý™¯ílõ¶ÖƒL'iüŠíá ÐÝù%ßÝõȹÿëzÿûÞÃht½wTÿ¯A­é²&Wb¾ï_íßõé¿ölúÏößà wÒi6ÚÚn'éÁ÷þ‡È¢6ξ˜ ÜÒ#²wû_kÿø> ÿ¿ç“í˜JÚªll2=ÛÝ0ƒ_ûéûnûÖÌ/×.$[jÁ…P©ñ mí4!ؤÓh~ŸuÅÔŠKäCT'™’ Ða6Î4\? *£]ûúóëþõœéƒ/¦öÚ»ZaDg€ƒ2F[’ÁAdœ¼Çí„ã USŠ;á; D3ÀL ÁˆˆÐ†Gºr d\¬ÃÐa8f ÛÐaz‹ˆ`•¶Èâ°Z&ï‹EÛÞ› 8këzþÿµp·ï¦©ª±i톈ˆˆÐ3±µ™x¤J;™“1›É–žý]{,tÓ´M¦šhDDD0„L•¯6Â`ƒ´òÓ“Š-ØmmÚA„Ýû„í+´~ tË·Oé>øiï6¿W<¸ãAÅivk+ªöÓðƒ&]‚NÝÞã´Ú Â5Â!…A„""%Lö =‹ÁÂEã ôí»T‹ÆìáÛ^ßïýJë»ë¿«  m2O¶œ(6Ò’˜nhÌÍ Ð:î¾îþša…ˆˆŠè\»¢väáê[¥íáÝÚßwz{Ü{þEÑ(˜ÆÝÅ1MM&„4""e8ªÞŸi殉ûl4ÿM;C–„›úM×AôMßO¿í]÷Žÿÿȃþ>Ôàÿi·žB""&Ti©Wûͳ ДNî5¿Ò 8îJ>ÄGMù}¯êøOÿߎÚݰÿvõÿ$ý¯þÑw¶ÿ "BaUSùPˆ8çëB Öf™ E+&N<N&¿OW¦i’)' _ÛöŸ~›Öþ?ë.$?öCüÌ/òõ·6¤ø7øˆ•ÊÛºi›µDgßd‡i˜3a„È|i„Ï„òO¸'›gM'>fÊ׿qN0¡(GÓû-Àã»2&Œ–7ýó 1þ×ÿÑ7ÿÞÃÿ|/Þ‰ßúצ·Ãþv‘”ñO\ÖÅIÝßÁëxpè¼oI¢âÕ¢O ŽÛ%˶žNÂhX x¦™ÁJÈ™ôBœ$åDÇ„ kÑoPÓ*ëÂkÿÄR­Öžÿ¼Èö´g·¯@ÞwKôÿí§y¿\öÿÂÓOÊy†2)+@ÿi}¨\:NÓHº$|Ðm§w§D£N‹ÆÅ½„ÒlŽH0žlT×ôIÚ.Ú.IZ%‹Gih¥þ¤DÞ%Mû\°Kï`–¿ÐëÕoýôŸ¿¯ûÿípƒÓ»Kö7E}©&ï¤{o¸µç=†šÚm§Û¦ðÁ$îŽ^f·ƒNœ¸t´&¾›§H7‹¶Éå~0L…ÄÒR²0ÿþ¥^O›#@Ÿô º¡ÿÿ·áúó{úÿÿjÙõ}Ÿþ8µé½È˜éÜ…ÄmDmÚéÖšß¶Ò¾íë…îõM°û·U =¿l¸]6¯ã7PMòi-=aßëÇvàƒêä]*K¸kÝüŸ &š&ïÓô^e–z~þ+~ïWÌ*î³ ×ëM4Ø5ÂÓ"½6 Xi{d$a —GS 9îÖôÛàúøípòc?kðw w®1_úé‡û{ì&’ü_¥X;­|8tÛ¬;‹áª  ˜L&÷·úû½uºÚ¶÷²S?ëk¯÷¯iªaXõŒ Ðxi œS¨±ÞtÏgǘ2%Y½0’\6 §WýÿûZ`Ú_ר> ÿ—Z'ÿþÁrpé®7þ®±°di5Õ{þšµëâRˆÒ&LÁ Ðk.Ûg?ý™¤»_Û«6Õzlõ¾·QÇv˜N0N,'\&“v‹L& ¦³òaeîüóaÛÍ^þ½þ˜_û÷(½ÖýépôauüDÿ÷B¿CŠËÏþg‘åt©²L?ß»×ßfy!ŸU%™Â ¦y%´MÛN“Ûï÷VÖÒ»²?a&.5WŽÖ.6¸6ívÙîaá¡ÓB",,—±ÓVÄUî×né6¸þëÿ£ºÿ¡í{'÷ñß àÚ/?já»­ì±& mK¨]Õº¡¥,CEºÿúV®ÉÂažm„”°šh=O4í¼8a=]m«èh<ϑ CAÓÆÈÞ‹`ƒ¸iœ0¡4Ê,A„#šÄ]ß8½ñÒÿÿßüGÿî¼7JÔÓ[Í øtžþ­'^ÿø[\ÚÛm“¸áÒúü˜?ü Â øÿB­bÒl>n½Ã°Ø=?«øÿ +L4+ . îÐaS´Â !Ñþî£÷ÕãôÒÿïþûœ]7¤>“k7“áô•+\Ï¥¯ÿíé}ÕÐYù²ÿ÷çs"(ÍÆÂy‚(†£A™Ý:bØ!Þi^îîÿþúüS †G)AøÚ„D|7{ý×ý|O/÷ÿý¿jïNšÚÖ©Ý­ý¶±Ã ÷·^mkvŸwM¶=ÿyúß~ÿ:™vhFd`a7iÄ5í0ƒ ›Â' !ïG¤^CAÿmÝ߰׿~hæt, ÓM°„tƒ¿ðÔ7Õÿÿ³ŸÞaYÅ~÷p@ÕˆTÃJ*5Xh8ªcµö­ªwg¦êÞÏ]·¦ƒÖA8Xa`Óö׋4†“º'n^6“6hœ7 $è“ÿö÷¯÷¦«ÿ°ˆÇø†DD0¿§]ƒöýøC¯ÿ˜ûl'þ¬kAƒm]SLSÔS <Î¥¸A„Å„B('i°ÁX`¡Ã6ØÓo … °îØâœ(M8½´HvÓTÛ¿ ´šAÐO\ ÿÝÿøîh%ÿðOâ.¿¾ÛØ7¯×÷›]œÎ;ãh0„4ÐqlÜ0š  ƒ …CB!“¾ƒ aµÂcbÝ¥ƒµ—BÇ0eÎFì0‰4°›xfÌ Û´“ý{õuôþõ×úý~q÷­Òü³’Kßø6¸ouß3KöªÇƸiWi„"#3¼D‘‘´'TЈaBZ@Á0DzÚa 5ˆÛ(4; ºJÛKOïÝ~þÈâwð×ÿwõý'ÿÿo ïëàþT ××gÓj÷Ç µz д1TÄDD¤J±¼~ü¸†bñë׿¸J¿×ûõK¯]tÓË!š$ÌÑd_ÿ8‡ÓîÂpÁ`í‘â Ál! h1´µÖáònQ÷¯/y—§ðkÿÿÿ¯6®ÒM8°AäÝdÉ‘(M×ë_OípGv–ÆÆá¦hEƱ[ÈSú]øC}ß_¯™¡»Í¯í%õôíU4Ù~æSfAU­Ûþ»ªvbOcŽƒ „  r¾†ËNëI×úk÷_Mú¶“¡ýÜ\h6ÓA¡R£LìI&îýºÓA§” i¡É,FGd#ý×ûzþÝÛꬄÿjšh0ÅDZh0›"½¥ !s´údÓÜ6ûýéßš Â'Bá„#i¬Ð0tŒýñ}|üÚæÕö~A¶mÚ„ 4 â‚h5aLv‡a°„tÎĦ¯]ÝÇ)õv* ÄDDG?ó>š"ùi ß“ªd•Ù#;IÆw¦Ã³Ï†ƒd‡lCµTá‚„ãl m«Õ¥3ÄDq}WÉ^LGˆÇ9Q³DJHyÒ/í•­ª‡MS´ÈAS°˜OW<ö*EvœBdn£L+†˜±h*â,&vãyn—ÔÎ6ü¬M3æ`ÂA„ âÓ@Â"Ì^"Wæ8š¬JŒéY?‡ÕýóN“+„í4a A Øa %kÄv‡ÌÒMM3‚)g ÌdXÈc>f¥æt¡ûjƒDE¡'B#tMŠýIãl„ͰéšDÄ@í·L h3í4 `žž›¡„í}vîÖÉ>lÉÛÝ‚Ni¹Wšg}šðž™™Ÿa2® ª·O»†Úi¡üV±aˆ°ÁI°¶¸"fÂÔá^Êvšttº'm i¤Hvš'Ø|;Ë65íB ‡w¦Ÿn¬4‹çµEO>õ²¥›‚"¢ß‚í[ZuŽv=¸úÑ©èX¢Üíwa;Ûá°V.‹Ê$ì0M;[„Iì´Ôt^i¶ÚV©#Í&öši|n¥zqßðöžKQÞóÓA Â.{\»nM»ÿ8³Gº}Fz;Z’Üž0I¦N!ó ¯“tæ¸á§tFí—‚T6ôÝ;^-p­§v—ÛÞšw­ÿÛJŸuÇO×ø1MI.gôøf|;0é¶Ÿt­Ý|¦ègãÌãάñžfÙ˜&q ó$ÅL&lÎdV0fȠί)"C(GÂ3ކhÔÏ=ž @Ó‡x@§v\ŠÄÈIz´ØÁ6ízý§ïýµî±ñí{µÿ²â÷K™‰ÆÃ¬S(fm2è3†šfjÖÚ·Míû÷»ïñP„òäši¦‚ÁD!wö™¶°… `ƒ;Þ4c·¿´÷Õ¤Þý>îÓOÞý÷×[M´:C´er—Í‘ò=œ2tMõëÿ×赘Zïí·×­¾Á¹Ÿ½ÙêÖï1æˆÝúnûï}ÃyO¥ßµðiµÿédSYo÷¯nÿþÿÏ'o®º]¯¥Þ¿ßÿÖ¾Öºÿ÷$‹\íŒÉœ ƒ…HEò¸Ž„Lô!…@›÷¯ï¿Íúk]öÝ™¦Ö½Û[?/ðÂiÒ±ÅEêØNÒÒz߯Md_Á‘¿ÿ^¿m ý'ûÚ]ý?}ÿÿ[îÕ}‡ò+ö±}_ÿé?þ?á¿ýv\E³³=0Aß›d)›hŠr'¸½8´Û ‡dpÑv [ÿÿóÙïTפÓÏö_í°VÏMÚh:m6*kìPAÒôÈã‡Xïýôf˜jÕ÷ÿ1$¬õ¦ØH" 0mêç­ûk]ûßð¯µWïßÿµûÿ½R|ì©‚h A=2ª Õ ‘ÛX­¶‰ÃpûO½~·¤—ê˜Nâ£N ;a8Ö¢ãˆhmE±A0˜»T¸0D3´Ó_õ¸ƒÙÒKwï?ÚM¥oÃAÚA; T˜ðîþŸ¿Óÿk«üã×Ûù8ù8•ÿÿÿͯÿýÆÎ›dQŸÉP4„±¬>Ðvšh›ºpÓÒ·%˜ONõ×þš ºµ´*Ócˆ>Šw Ü0šdoQRX ÊwTjÍhDE¦éýþD[úÝ®^UbãŠhD;°„""·÷õ÷Šö÷±Ã_ûúõýoÁ¿ûGÐÏš ÙŸÁj™ébÜ0—V «eÎnÂuz}'a:_õÿúa‚H0šm5>CGLŽ-4!„ÓOA˜ DˆñC¿ûÛ'Ÿ=fíïliíK Á4!„"=$’_íµø[‘jöÒá½ûÑy¿ý}ÿþ—ÿÿD 8´ÿx¹ß#¶îH5okt^0ïºýÿ¿~ÿÿþÁÓ±M6›B" ¢€B""P„DER­³Û¥ÿdzBE&ÈüRl¦¦ÓCT""wLÐH$’A’¬õvþ¾·¾û}ëÿæ{ý_÷’ì TZ.Û%bS¶«m“ í? ëÚW®šúÿÿÞÁû_¼DZDDSP×kÚ§|aãœuaÄ0JÃ`„G;4“ûïô’J•$•UdF÷úÕ/­ÿÿÿýûkѵù¢Á4Ðl”i¶˜A¶š÷wô÷ÿß½¬¸¿þºÿ»¥õˆŒc±Vœ4ÖÚThDDr­™³‘ÛÉýoß÷ÿÈsõúI¿·ëûþý÷˜ÿlÿiÙuéÚ§j»a=5FëOûïûOcWè»u÷ZÞ ¸óÿøÿú_{ Ú ZÂhDDZh)p2ªÓ܈魯ßZò~öÿô’H ’ÎI$©$¨$µ_õïa…M8»[ Rí80•¢q—m+§Vßî¿{ÿIûÿ²ézK¡ÿ¿¯üFéÇxˆˆÔ·nžØ´Â÷ßÃïõ}=¾Õ†n×mvÎZá$×°›zjœ{µƒaTiì|&ëýºýÝØ?ú»ëøŠÜ}ÿ­õÿ?ºÞZìDËèTÓNâI¥3‚‚¶L'abÑnÓ°¬Ukwh;VI;\(I$!*¬!IB4U¥ïþ¾ßýÃÿÿ¾ù78ß½{uÒ¿þá¤ÖWŽÊÑPŠˆ®A'Gj¤zN¶÷sñèÁÉöO TVpÚqR ím4ØÚ•OW§½ÓM{Tƒ*´$"µúï_uúÿ ûúõít?ßåÿ½ÞÓÖÈäÆ:aµý<ÈÕÖ`ÉÛÕ§zˆˆˆˆe: Á 4íT"“i´Ú–è4Ó´á§i§i¡ƒ"""•%ÿßlÃúñÿû÷¶{þî¾ÏJ©Ú!°³#TNdÌvv“³B»)>³[}ÎÃDJOl Û¼6í0ÄDUÄDDZZ !މDDDVEI$’I$’I$]%ûýæ4J®·þÙÊÓM8§JÕša¶9ÚY-½Òôš4GÝ¢,„˜ˆ¡3pgwî÷vó¾ñDD^?ÿÿRÜ«Ãßý ט׽³ŽÖ)4øâ©jÿPî¯}xôwªÄƒI“¢†} ÑnÛÓö½Òᯠ‹!w˧ýÿúô‚KI ’I*ÂI:éç±±´´Ðjƒ0„E„(ÓéÛÖ3:h|—ͳ™¶xÊu‰Kͳ‚™º?a2;‰aœƒÛIÝѱøõ}¾¿·ðè:¡¿û¯úþýn+´®)4Øj6¨ aMVÍSó:žõB.v!ˆ˜MNÓM4!äIFša4•R.ÒmõmÃþÒ[YÇô½þö?Œ¿ëßý¯ûÛTýŠA¤©!$Á0B#ˆ­j8ùÔv¥H\¨3lf‚Af`ƒ!È4C¾ø´Ñ7æ¸á `›»¤ú Þ]4îíxÞ<ˆIûß¿ ßÍHèÈ„"M‚×þ«ý'ê´G]Ík¨A„Ó<µ¶ò¼ÛSfLdˆä™›R„N)æžši¢c´Âwœv­Ý‰Xá?vÚ3‡.5¥ºõ»­ê?·ýßþßÉ é„ÈLŒ•Ø;gÍÿk}Õ¦ž¦pTí*…hD0„*½Hf r3"Ck ¶¥@‰„Ð5LMWb: Ÿxi¢c²Nõ'‹ßݵí5ÿãÿÿÈáÜ ÿÅýVÌAì¸BôÍ'h3$ìÈaâT(P‘ÁH¤¹îA NÁ ©Û­º­a¡µPÁ$IÄ‚+cTEðí4 ^a:qµö›¢vðÉáï^#ÿM}Sù'|®÷ÿÖÅÓNˆâúødQÙØ¢Lì£#Aœ'Ó¸OlÝa8aPi±ZI$I ”ðCbug,ÖÂh38áœÈé0ªŸèvpÝÑ8a“{îÔ»ÿ»NîÓûµMûC_kÓÿÿ‰ïÖý×ésw}äRîõÞ?ÚÃÐÓö44؆Å!rhE¥¬Dô@©ñh4Õ M©9—iè"â :H$Ÿv¶›K}úúéýÝ'õéØ7þü¡ÿë÷þ—Þ·˜i¦¬„HÝWÄhi=ww|5†K­8»‡Úa4""n¡ÆØE»ÂTòV¤‚' $¨"ó ]$‚n^}½Ý¦¿ÿkÿÿýׇÿ‚á/ý/õýw<® * m´éÄDjßüU§Úö°g¨­5t %äï²ó½>“ú]:I ©*H ‚ ‚‚AAA„A_ÿV^Oï½½ÿÿû½~šq±ºX°BÁ4#K˲EäÆO([gÆhj»»Ñ©ÈT~_Äb´ÄÉK[“tÿ½;´ýÿÝn¿·ßý¤EI$’I …$’A$’ÿZÿ¶{×ýSbÐnÉÜX&„GC`žNJp‹˜"%ˆi‹à…‚™³Ù¨êÊÚ9Ÿ4ûȃ!‚"ø²Lf  ýmPa&÷M;ßi_¥_þ?ÿÕÿÕh_I$’ $ÊIBt’I$‚I%ARH$’©„¸ ‚K% ƒB"&@ˆû)ï'a‡ÂlBzNƒ4Gä|\æmœ3ñã „ E £ZËŒ0†š×»ù‚' ‰Ý™Ú»Óÿ_¿[þ öG¿ò`'¯w„F?ü"wÿºÒI&ß÷è;NØk ¶4ãÚ *Ò^Ó¿†Mè¼a—ÙŸaY8¢ù´ØAÅÈNvša4Ћ¬]ª-òîôïèCöûÿ9 oô÷×þÎF[¡ûV'?¯KÿKýjþ¯ýmB¬RÉÂdÜ©…E¡­ÿoÓÐ÷]Š WvM°¶NɃ´„Ó ƒµ¥õ'Iª»ÿåå ÞºpÜ…N­4ßøM5ÿõÿÇ¡ÿÒwÿïïÿÿÜÏÖýow¾Ý„B"";Iÿÿ²8¶Ë‹´ûß°†ŸI«}ë}½þÿw÷§Ê|ÍÁ:/+oß Ñ;»÷ßÿÿ½{˜_ßõ­ÿwýÚhÚv íRƒD˲Qzq³OýûñIð~í­‚~»ÿ¿‹¬Þë®´6EwI}6·ª“&éwû'D<ªˆ|K ” Ï"Në”=w¶þÿ¿ú׿Ü÷éÚëªí§Ã 4Ö׊j„hLÓTÉ”Qgiÿïî]]ƒ{—Á?õ÷áo¿õ´}¥ký‚ûý4þu‰Þ@ˆ&‚@dƒ œXA©³60AãÂé:Ýÿ§ýûí½Õ}~õÛûUaÚiÃÓb¯á ÓC‰—_¤JÌü •IßÿÃï‹|›”Fßÿÿ"Iûý–1¸{ö?Ýóy<ñ„ÁU¼œ`Ÿ¶sE/¸qŸï÷úÛc¯V¹šu´©»¾“½¾îý>wm‡AµÊp„DGOÜì|ŠönRÁ —iÕÿÿü_Zûýþð˜}[×ßpmÝ~¾eò^)üÁØåSžž±¡Ý¢Ç`á‰Ú'‡‚zt‘¹ùpþµ/ú÷L8wÝÙËl'v‡öœi鯆úpÓõXaŠ{âJ©„Î ö\Ðvš"k¸=V×ßêÿøoø§ûû½´¿¿û쇼6+þ¼'á(!ÞgŸkJî6ž‰Ã„á¦kòíãÿO „  ›ÿÐý;KwJÂ!0h8؇K"»AéÁ¦û¾Ó(BаA…š¥ÚÜ…£f›¯Fw‡E»{t\4›mÒ½ÝrEÿ®ýÿÛ®þûÿõ|Æï÷êÙôžÞ©ßú ÌÑnO‡„Lvï`áÚDîím¢vøN—ã¥Ú]i§OïÿŸ´L1MqAÚ 6•`ŒíÞš«ØFwAˆˆˆzmfüž*MCØzotáØ$¿¯õý«û^õìú{Þúׯ«Jëw{¤ÝÃØ}º„ •ì¦>ƒhœeõƒX@ÝVáÚIñ®Ÿßÿ®Eøßþßøý5á Ì<V„uA‚ °¦“A„""!„")¿•D@݉!fýpƒ[¹8o¯tõé_ízíëþµŸÕUÂkaZÕuëïï¾0ÝÃcbØâš¦XØf)õÂz·OXd-+½véW¥œ-õè5ÿL=z­â¿üDDDDDDEŒDA¯h•a3q:A¦z>*݆nÝÎTûÿÿõþ¿ü0O_´ím¤4ÙË[¦ÂÚz¦©÷Iê­27A„Ó¸ˆÔ‡Eãöëða¿½WûׄŸ?â¿—¯äWIð„›wxy¥z›‚ "nýïöúwíÛ¡îÿ§ÿïü1V4Øa4­®›»iǃX¿áßM4á„Â$!²0]ïMÙ#¯²R=&Û¯ºÿî?ÿP}¯þbÛ<ðÊdUîA3ŒÜƒ»mÕêØ]:ßëÿÓÿÇÿÿÚk´á…<'kkö—dQý4Û´ƒ°„DDèµõßðo÷q¯ðÔ¸ ›Wû†ÿvÿ:?´Øñ³gXO»Û×¾½¯õX{_ÿïßn ³§A“´!„#DŒŠ}…MBpÖ0œa4ЈŽÿeõjßüOû /nû¼¡P×ÿ‘i§3ÿ¯î­4ÚÊë97;Ó¼Üh}Ãwßô¿ï}ýõñ|ÿÿüDDDDDB-4ÓB":ï¡ý÷í¿ìWÁ¿½vçýVϤÙ‚L' åëgåH•ƒÚ°´ï» wÛßo÷­ªÓïÿÿÿ»µóˆhD¼2­u¯}ýûïkÚ¶f¶ì'"Û aǃMŒ'w —¦ç`±,<íKçf¹Kú§¢Þíᆵ~üW¾ûÿÜ?w^þ߸þ¸Ž¿ýûÓ§m0Ðpئ 9ÁèA¦v¬&˜c $™·r¤3æn$ ¾Ú´/íÓw½Õâ+µ~×þûÿä„ÿæÖëðþ=ÿU¯MžûÒÿµâÓv4ÃL&Œàv„E”&Õ¦¤=‚h„¶iöÖ¾'g«ô¾µÿÅüNWþ/ÿéöyvݶs´¶Øÿõý­úëam†h&žÈÞ5pƒA„CÄD0„CLo½ùÚhZY’„wXO§î¿üÿêÿÿýÙå{úôÇìœ'i©g »ý28w[[X¥ŠúÃA‚ ˆˆŽÐa4ªêî>™Ø&tÌ‚góìÁ Lã(5ÿ_þ´ßõõo÷kl]‚éÜll&„0„De¡C;¤>^·`‡i1¯H6–§ÕM4ö÷†2{TÊLñQ˜Â"MÅ„ÓA“‡Dí¡¡ÿa¯ÿ×ÿ^ïÓOé7i Ô.©¡ÚÄw¡é™°šzÿæzLUu3¥hýˆ™Þ÷V«0d¦6Gˆ `š"œ¡¢haH!ˆˆL Á Óƒ0I„ÉÑ'&‹¶8{Jž×úÞÒOÜå˜öÎZ á—0šiá àƒC …*¤™Øäg;&o»“ƒÂ¶Ài¡i Â“u ÒÒ&âÏo¤Û.0ž™8 …±m„" a•¶\°iòÇm§ Û‡¦a ·»NìŸQ8O²}Dóÿx*Ðqƃc`ݤØÝ ÁPˆˆ÷Dr;éé‡Ý×xk†˜B""(i䨦¾íLÜm¦ÈGa“{RÞƒNƒ¡¢CÑ7†\ÂÜ80š ÓËÆ·O_NÕÓC¿ ûI³ÞškÕ0ds >ÓA¢L!î?Û· 'vöÓB5‰‘óµVV]­ýtÚ’‡žiƒi§H7.Ú/ Ê˦n›i]ÝÝ„ýhÑG´­þ?ÓôëñØUM5hE§`Ž˜h0B"#gf™Êzï'vƒí%¾"!…°ò7„ï¿{§  á­æÇøÿAéݦ\wKëõq¡WèzÇÿò4¿æF•TDDG;©ŸHŒe?Ôœ}§š?øµZïßo¾Ûû»þ×{®â>Õ¯fט6>f/õª-úþ"B#fB° ¬ éÞ@‘:ê©ßÓúÁ§¬=k’ïåFŸþµÿÜoîíWßv׎áø/ûj‚üS?«´ì!yÃ6ÁA›3Ézú÷Ξv†fðˆD…Ù<'eÓ¹ña¬±Ýê´­ÿÿÚ÷þ\Oü†ûÕ— 6ÑyÿŠI÷ý„žF¬ÿQôC²ö,&Å„ÈdfË‘²Ì fˆäf2‚®ßÈ<ŽŽ4ªŠ¤['ÐÓAª„×_ÍÁËtìIv—ñ\òO¯¯Op½ÿ¾ë÷_^Á†Iâ]uÊ\6û©|ñ„Aœ_vÑ7lC4-8†™²Múó'yã>Á‹vxg S[‡·×ëÚ <¯h’µ"þ¯ýàš¸úëZC×ÿþ‰Ý÷öÌ'ÜÛÿÖÉ5ÚÓ~Ÿ ó^_ ¢áþÛ¾ôwH7'd±§h»mé­[Å Â SV/WµDà=4“zÂvžø¹qÊæ¥šn¯¸öžš%ºË­oÿÿßÿ…Þcµû{³<öšwg ƒ Šï»^ˆ=£$"9éæ[÷ýýFÞË…WO¢òÉá,róNï6eäqÓæ»'Ûj©¶‘7~ï.êÓÓ_¢PÒ¼ílím÷ü“Í::åG.ë×_õ÷}Vc×Ïþõj­vÆÕ;a&,&h0² ÐilAâ™­Ñ™‘¬„Ï‘¢6ÉÌé·°»JÚ¯ýûïC»´þítêÛºM¤ü¼¢xÑ8µ´ïÓ‡jÒ}½¤ƒV.ÞýSÓêî—¿Í“<Â`¥f3FÉ…'zøÿÿÿüúï¿ÿ[[]ŠÕŽûØÙ_znÄ|2OÈÚ%:fÆÎ H4 &aáö°Þî×Bò9ßéÿMÿ¾¸þý=iŸ|}¥¿Úñû½/zÿvšýW Ù¤q›3ðAà˜A¹˜M°šêMªm[ßÿÿ×í<ÿªÞ½¶±ÅPïT «ü0ƒDDpЈ0‡ à@Êq‚n×A·97hØí°‹¶?û׎×êÃþ…~ŸOý‘Ä×ÿ믾õúǪ¶ÿöÖ÷qõ¢i'›0ƒMSM44ûwCFÈt/ýzÿû¥Mµut²þ½„Pû N„:¬0¬%BN?0àÂ&í´ØA¡·tÞ›1t¿íÿkøõûŠâ¿KµþåcþÒ_°ô×Óû#‰¾ºæÌ ‰Ù;¦ÛP˒ˆ¨·×òYéãúÚ6¿1ûg­Pa=mmBR±°Ø§§hå†jŠÅ]ó®êr…|Öé¸cÛu¯#ÓþžD¿ÿ'?óUúÚ‘Hÿú•ìáoÕDÌOÃm½zï×é¹³MÓM ð¦‰ݧh:&á%ôÞòó¾Ó¿ÿö¶¾ƒ kƒÃÇð}5@ÓMj"Ó8ázOcV»¤þoƒß¿}Ø=ïÏ~·ÿƒ¯ÿäõ¯òêËÓÿ]mþ‹»ûÐD‡þÃõÐù"$Eò{%±³N-i Ò˜í…f »¾è'éë}'†?ÿ.kwT4êûMŽgH±ÑD 4ÖÖÓ°šЬ#k]ï_ÝÞßû÷áÍ÷þ¯¯ÿ˜‡ÿýv¿×ÿ³ |7úOèý=±^·ùß³l«BÂNYF' <ÑxåÚ ì,:M½m}%ªëýý¯¸ïÛã@ía„"0MZ""šB­þ×{½~­«àÚo¿ý—›»ÓM6ËÖŸmÿÿ®ý×ÁÿªaþÚ_yì;úùÐfòA“ˆšiá5 ‡þ—l5½tÖïOøÿûÿÿ¯ÿ ÓN,& b˜ù>?]àÝûýx?ù„Ýöë·|=¡Mï¦~ý¿ý½üÿÿÞy?úúÿúßmkÿ…’àÑ1Üh¸è¼Ï”IÚý;TïëúéÝ{_ë[ëÿk B+†ÿøìo×Õíæ!ûÛ¸Á÷Áˆ†©¶*ýïkŸÞÛTëîÒÓí/On¿U´Ó¯L צÏû館dâ—ÕíBm–š 5Jïÿì/ødqïÇßü7ý}Ÿñ£%Ÿoþ¼ë¿ÿÿ½î·aÚF6*Ó ÙëÓµ† ÙǦšßg÷µ¿Ó†¯i-œ»M†›aZÂAëapv‘wÝú½^Å.Û¯õÿñÿý×ÿókôô Gÿío¯k„°•ÃӭŦÜ4ÝÛ„Ö)Œ&ÆÅäDÓl&ÚÝðÂH8¶˜ÂéH£´ ‰ÇÅ=bˆÆ…1[UM׊Ò×½ï[ºþãm}®N #õïÿ†ûôþÂZáßÿïé]-&PéÚˆÄ3„ ÚL-Ph m2+ØRÍ8¨†œTRa“Í¡ÆáÚaC5·Ó‹ÖïÜ=Wÿþ\ÀÍëⶸkÿü?_êljo¯¿û~«„®:¦)”ö…„&CqWDD0„â#¡(1à ˆg{¸i‘ÂÚšÐ(‹‡žúJ«ãû?Ý/ÿªDÇ_µ×ÿÝžÿí+L5“`ze/θºYÿö¬Çê›X´""v[”g|ÕHŽ"#DA¡fB#ˆžXa|f‚ú®Ü½=ÛÿýóÔ»ÿ³ÚÚV—§KÜh5kÎÕJÂzwÚ¬29Èéi ¦¨,S7¦{!rúÄDU:ð_ýÜõíRók¬ÏÓÓ=:ambÛ[PNÕñ·•{ÙÚ±¦Å4mP†¶ƒ9ØŽÓµOÚc»Rõ$ÿÞ›¯¿Ì—½Ìûý{l0܇P)66âvš‡+×Z’¢o£±¿v*¡šAãb*¿ÿMt=±¤ÿæÐvþØýa9•µ¾4Ÿm2g ’ví3ަä ë¨v»"칓‰‘hB#¹ß ·¾„~×ầú½úÚwI¬TiÅ Ô5Õ´!‚aZÊ3±kÿ%ˆŠÚ™üͼDiÃFwîôùN‰b ãÿ^ÏZ}öoõŽÓ4ÞâýY5²úL!È-ó\ï•q¸d™…R—î[Û „;#ûBƒ ‡zß¼ÎA—3íK×8È´!3¸‰ÖïûaU´­a…´÷:½®‹Ë'v"‚qȉÔ'¹i²RŽ@ãŸffB  ÐdâÄ>.JNÃM4/·K¸þáÝ5‡iuLŠdJD"+ŠçÏÁÕœv˜@ؤÆÄ7­§!é8ˆŠþùI¦¤KOSF  Ó¢0ÓBM ÁxE„íVŸoÑ8kä³½ò"+Ç1ß»ƒâÿ΃;ÒÕ{ѯ;8² ~z1'j®Øu‚#¯mÿßö•×÷Ui÷¥hC'e…Ð`ˆª>IÒ ðË9qí,0I†IàÕ:.ß è6‰;z =}«~Wæbãøß¹-Œ2q¦ƒM?ï‚úºh}ý¿þEÿßmöÕæ~⛉Ù$G wÚ“`L¾d¶Óø;M0šsÝ¡ÛS ݯú—–ºÞƒ{ÿOÿ¿‡¦¿­…°•YKõÈÆ¶µƒEÛDQ•vÛKÝ×ý~÷örÝpwÿÎß"ÑÉl©d Í —#3°ƒM43‡wB'd’wüNôÑ8h»Ó½:¤"ÿÓ{WëãúOÿ^»¯‘Â/ÁøDãÅA侩æ'aå»w¤® ö½ëß_÷]}þ`ò¬Í#†žA·}_ÜÆ3YÆmÙ ¦iæ ˜@ &ÅŸk&;a0ˆœÓÛ+‚ ›»ì<Ù§¦íþßÒý|U·×ªZÿÿoëöõA7ÍPyÕÃøi¸a ›Ý‚­®½ëõþ¿¿üœúži‘ÖL&ž\a^E½<Ã40‡8¶Y E§.z»%'aZl]4ƒë;T½ªÕ½w†/ìÊúÐÿT«dq2¬_ýõþ‡ðoêºo§ª·Ÿ/¤ôÖ¯ãÿÿÿÓVÿáüœQ7èAª.âÓÖ Ža„NA­²#°›%l3„ÛDãAåôÛw«w— ’Ž'}˜;!(iòb;vÿºë[µÿÎ>¿þ°]ëÿþ^¶¿ð{…¯`ô¼' ëjÿßúÿ´õûÿµè77¡¢í²W ‰Žé&0¤­ËÆÓ¼¼{/µ®îîõ×zAºèX@îüƒI‘f~= ÒßûÚöïÿD‡þÿ]‰Gïÿ¿ÿýI}ô»ì„÷w¯ïO¿ÿ?÷Ûzú÷›ûú¿í´íKÊ> 0¤Ç¢á²a»aðûN–ïîîëí÷¾þû×^Sˆq9,ö¼—³Ì£aóA¨Nh”uøñ݃ÿô »ÿïô ×ÿõý=¿{í(i®gÕÿ«ÿýz^ÿø{¾Èöš­¬?ï—”Ÿ~ž›þºÐ`·}Úý¿ýþž¿¿íGöÞó h :bWÖ£ˆ£=žc$$‚ %hXOã‚oþ¿oëúþþÿÿúßÿNÏW®ôG Ži°Â›½ô¿ÿõK^úU9¦ª®{M¥_¸Ý'°^Ÿwï×°o§Vÿo±Wëôÿïÿÿÿÿí‘a»¬Ï; Ì“ˆ3Æ`Πa¡ i„Ô¸NDÇnìŸWÿ–“áêýoýßÿõý{?¦šÚ¦Ì+¦ƒ¬j–jõÿúÿWþµþBô/Á…ø{Zh=$…{÷ßݧ†ÿýëïß×ëúÅ«ÿÿÝA§{ñ; „ÊÆfÌÅ?c„šqÆœCDî›°¨8} ï_ÿÕé7ÿ˜ÿ³–a:þ¶f½;·»¾Ü¸©Ø[];ÓŸ ˆ0l+ ¯ÿéëöÞšk|lxˆˆˆ?—g: $’I$’I& ßo^¿°~¿ÿÿÿÿÿÿ»š?óºG˜ ÉÉ|¹„ 0šf Yž‰Ãdní’ÍŽNòãÂ_}ýýÿïósÙ„Úú§i¶ºwÚöO´L'j4 >qÕSTÿã@Âc×ÿïoº16–·xV.¶ç‚žÐ‹A—²ÏÇÿÿá I$‚÷»þ¾ô¿ÿÿÿïÿþùÏ'I© ™ÎNÓ oä‡o{IÂm É^]¶ž› û¥zOõ[ÿ_˜×ÌÓžÝv´Øa?b9Û¤˜D'´ãØî˜ƒéR¦•¡ !¦(„ñ¯ìòÖé[ì,Û}²C¡h$."?ÿõ­zÍ/t’ $—á¿õw­ÿÛ÷ÿ{ÿÿõsÃ!Š„—3fìh›‚PÛ‡@ƒmïNÖîºwiwm®¾¿þõÿÝ=;«V)ˆ¯Úh5LPA¦Û´ƒdq?‹³ˆL£±pÁâŸ_›^á<%„qAŠí¦šß÷ÿ]îþþÿÒI é%J’I/ÿõþºÿ~¾çѪ6~(· 4¢nÝb,;/?†«Ü8w†+u¾øÿ޵¯ýï÷ÿÜ+ XkËmˆašÄCA„ƒNˆâ-A÷yŽÖî:„Æ.Á B#jI·ÿþß÷÷ÿáÿé?I/÷õé}³’—Ÿ÷ó~ˆ“K{MPpí²ðž_zvžêŸiêÿ¿eÕ®»Å¶ÿÿûTÕŠŠŠ„Њ Ž„Z$!ÄwííµcTà Ân²Xºmœ¶¿—¿ëÌ}ïžß×];Ö‚I)éB@©$©„Ц=ÒUU±E»‹Žƒhؘ'J÷Ý¿ûíqöýÿëlàLx¯ÿß>¶*ƒM4B! ‹\0Ôm[A…ˆ”B!ÈÒ^¬}®–œzÙçµúù…÷xM;n“AÁ§zh6±I„ö-5t‹ëkh7°©6ÉÅ=èCõíëÖÿ{jÃßþùn‡Ñ!üÐæ«úýè? aƒX‹MŠ™NO\í#§m Óaª =4Øa$ì$é.Ú_¦šv•ªl~Òiªi±M5ÜŠ;ÙŽ 8„$’•T)¢=þøµ¿þ¶¸wðúÿþ/ ›|7_þýÞÂV'Dr£5kúd!#èþr;TÂÛA±KÒjÅ Š4ÛI2ê4ÂiÆ ÂÚa6 g !Û4ûïŽÂIB_ÿôí©Vúºo¯ÿþžû_«õbüDDÈÝ{é©;>Ó½šb Âg´ÆÂfB ":ö¶Zlh[î•“â&hTD¨ÄAñkŽÒ‰ÌÒäZRI$’„’¥Å.—¾ÿïþ«öì¹÷ºw þÚ[â;1«GjM5ÈC57qr²ŽGÉxh‹˜HÐÛ»ÿq„DDF?ÈaÐJßÿý^5lV žúߪÙç~›g+‡hâ!ì®HAA§f‹Ò5OùÙÑæs3èøÉ<ÄAþFî–Ûí»Ib×êî°ƒƒÿWÿé}ž¾’P‚I$•$“‚ ½B¯m27S\ì—!y 2“o[EºÛÛÎÍLÑ;• Ãÿ´­Ððÿ~Î ëÿÙOþ3Áuî]_ÿáÿû6¿b˜´ØwM4ÕˆŠPí>è<-¶g‹¶‰Ûm]“ˆa¦ + :'•o:.ØdÆ”Ñ;uîÑ(Ð|ìUŒ5 ¹÷Çk'ÎM4×±¯X5÷T‚ÿõûÿô‰¾ö?ÿ õ߃y¿²=ÞšøaI©²ï¡¿_'žþ§H=<¼ÓnÖì&ozëpÖI¶ƒÓtémnðžÃçj&™žw¢ðØu¢K‘ÚgOÜðÓØÑ(_·ßMÿYyÿÿ¡ÿåê¶•tþææïóÕ©íxÓÂq´"ЈŽä&kŽÇ>ëôíR]^¿Ý;^;Ðaÿ¤Ý[Žïý_=Ž@´Õ6ý©‡jI²vÐ0AŸfS8)ÁëNÉ[…áx?ðßô5ÿÿþï½êôA§{'x–ûnÑáº3¶ÝÊ„Õ{«¿Õ¾ºúÿþ=CÔDY[)DFhA¦‰œ•¡DDDDv÷û¤¯Ó(uív×ÿOú«ªuvØ^ÝÕÂiéì NÒïu)?ö+[¯ÿ«ëúöýûÝ·øŽ""šˆáúõøÕÿÿ“ õ÷fšëé ãŒ ïPí[ …/ø•ÇEi*{ïõÙw¾ÿiõ÷][¾;ßÿÿx"¡Ö=ÿïV_þ½wÿaA=A ÂkM4œTA§†„Rk-ù&B†UIU¯|~k\?iw¦“ÿ¦û«{æÒý­ÂÖtÃ×½Wÿû„ iªiÇMmhÌÚa2³½”uäÖZ§ïׯ"Ü-|?ö¿i…ÿïÿ®¾ÈBãn MûÿÿóýöP¨5V¶’‚a0„DDYC‚–:8÷ÝfºïõïûÿC÷Ž¿÷ß§½ñéÓ¸6?ÿþÿûgÒöžgòÇÃÓØD³avÐyn±ó24ªø†å‡òýÞß ¾¾pËÝ´˜@Ìñ2û^µ«N½2?k &ò;kj"% ¦`€†ƒ½=¤ƒ*Ç„ž}þ¿!wU¥ÿþ±õÓA¦):hDFƒ%dE%ÊàðLègaC2>+»îE¶÷ !qLR{´Æ""Ðô/”2/ž3¹Ö‚ Ãa?¯oó½œ÷oµ³ÊF;µmÃЈˆ°A‚ª|†É œQ„A‹Ÿ}í&›i'§Lnîƒq…•ôϲ6ó¾‹ä÷h&ƒ3©…iò톟r‹Ïj6¿f§l{L!hA„"=ÁÃ#ˆAš¢QªwÊsA«ƒi‚Pz Ói„9_ ƒ( ƒÍä6FB  ”iš´Õ —Îï]¥vn¾TÓcqŠ´ØÕXM0„Da í« œ5‡;2Ê„øôІž±C7jždùžrÓ°ƒN‚PI¦š ÐØHœ;dìJÊ-è¼´ÂIºëáxJli«ˆ0AÕ„ †„Êøµ¸t¡ð«â ÂÒ+™ar¡ÆVYC „Ðl28§hœ;L âù­"á¨j›všzM¿^âîý3m†Z ˆ¢2æu¢†¶÷™ûÓ©œ©"’(Í™Ò «XÅG½xA„Ó@× våÝç d²ôé<§weÇü~¿6"Zښ̸©§5³eû•l¤ÎG‹*5³’ à¦FÙ!è•Až0ƒ  ÂªmËh!o„Ô&Ÿ²OÝÒo\<œ7ûmÖ>Ò¾Ú¿î¾h#ÑÀjÔJ÷wóƃLœvxÎ;ó‹<ŽAN(A„eUV¹¸†.á4„ ÂN4ʱ†šô\®=„WKŒ†‰½¬&ÄïF¶í4õÿ^ÒOOßö½ðýRÿÂÝoeq•´Ó© ôذEõL&‘ «x! 4â-q› @ÓAᦪiw†dpÐh»ny¤éŧ‰«;¨ÓN4Þ‰Û Ú¶ûµ¿ý{_¼‘þ¼‘/__ëú'wY ˜ Z;ÈÙ'Œ±È_`§vG¿ÐÐntÓdv›i Â!F‰;ÅÃ=$Û&î¥Ü;g 'á¢7h¼®Pg‚Y¦žFÐp“×M¿OÞ?áp×û#üývÿ³£ ¸Á”Uu¦í^zÌøavtNÞî©Æóc—“À‡$îF:aHÝÓ{Óµ¸sÍÝÚwíýðOO“8ìmET*J¤PÑÔ=?×O¿ÿÚJ=ÿ·'Ñ7ýaïþ½~‡PóÄg™9äfãläbïÚH6Ýþ½Þ_eß ¸î–ÓMSÈá V‚zw½öÚ}ÞŸõao^™¦©ÐiôéÓ^›=•y š¿¯ÿøþµï_ ÿx6ë÷ë_I4欃4iœh?׫·Æoß[­×H7,~_´›a>ï¿Wëcã}ýîý}§‘V¿ƒ4?ºíVˆ“.($Ÿõ×µõ×Y˜OPÞ/õÿ¿þ­®›ï”éÄñŸf¬‰£–`ÂgÛ £ßv¶Ûá¬7þº«úoè>6ºÿ¥÷½¯{ÿ_×ÿtÿ­jîÒ‡V“Rh!œlµ44NÛ÷÷ïzþÿó›õÛ¥a8¿Ó7y†5ïìæí‡JÜ7_øüŽuoëãÿX_¨ãþ:}ÿã¾ì–{!ýÿ±]pŸ#U¿[¸ Ï’dƒ5a4dåòqdXhœQ8Óÿÿÿ¯¥¢óîy=ߪ÷÷Ú¢*6 XÙë"O#dOvƒL"Þݧ^ªW}ÿk¿aý~÷kþ?áWÿéÿ×^©V¿×a'òÔZõôÏç Ñ„Bya7 „ð’w³…­8a=6‚oÿÿÿ^ìþß_éíê­ÿ§­¨MئJ, ÑÉpA©ÊÁ?ÛEA½Ñ­Ø÷omV«ÿ#õ·ÿÿ_î·¹z¯äôÿ}rƾÁ„J?è¸õûãߨ¦©þƒ …ÑfEÔ ‰@tŸM´Wi¿ýÚþ—o׿sÕ…Õ[ìäÝ¢%ƒTÓMb˜„ûMŠú·µýl*¶ô¾éÿµÿ­‡àßÿÿë©bŸªþ¿ú~²t5פÿÿ™ÿù24Èw˜/‹l2èÊ-¤k/.>ï/=;N–?ÿ¯é§q±¯Ý§qL0œ0ƒØ´Öö…¡K›;}>õ´¯MwZ®¿ÿíø>ëúîÿûïÿúÿï³ ßþ«ÿItÿ|†3R(NàÁÔ‡öÉ]§Eà ì=Ûi'§Ò~¼WÊ*Ý«T UZi¶ša0ƒØ¦<3¹NÔ4#0†=zwˆ{Oÿ‘ÏÞÿãëø?=¯ÿ{ú·ÿýïÿ]öÙCýÓUûµ¥öëMê+vó„a> “{Á}¦ßá†}ãÿvB ¾»‚iiÚÅ„Ø&C ¦Óc^˜M2QÑ#޽ßÐßþ¡‡ë¯ÿ¹›ü«_¤¨<ýþ­®Ùé³ÿÝ™¯oóížv’qMk­¶Tkj§ë 'úÌ=Á Á"íøm>¿öÔ‰ ¿­«ÿ„/χ}‡°Ô ÓbžHt""O‡‘ÄDD눈Ðÿ[²(ßÒëðjþºÿÿüÞ=á[.ƒa, Ða8aU´ÛAÙÆŒ ÂiØNÓÒ¿ÓŠdK ñvÓA„â8} Ø¯¼ÂA¦ÅmS¤õTýï[þ‰\;d9xØdhÿÝÑÿDïª íŠÜ4ÉÈl!¿ßÿ(þÿ÷_0µµ¿Òcb>˜ ƒˆqli„§±…¸aV)4݈[AØ¿m· .B3O§íSÓïö·ï×þøN à‡ÉƒA?ýøAï§¾º !`„oÌõl7î>«†ÿÿìÅ­§‡TᧈÐÃpÊMᑽʸƘa†…„ØMŠD =á‚ aG=’‹C'a¡O"6íx½õþºþ½ôI­ /ÿX_ûúŸñ°^ÍFµÛtùëûTÓ¶/¸Ú;ÓC,ŽŒ2|‚DD0B ÂÆÐ`„H«šˆˆˆˆ¯]¯_úëû{ÒgžÕôŸÞ¾ýµÿ¥µ½<³# ¾ØwúþÏ,Ò^Ÿ¦„DDF""""""B7LI­÷`×ÿû¿¥üܧÜ6ºï°ÖÓûÛAÄ4ø‡ú[gÿáÛª¶aªk œ4ÂÐŒb¢ö–Ãûýû¯ÿµÓüÇ`îŸë %Úa8†ÆÈ£ü²¿÷½ùrsÒN6K8ЈˆÚ ½(o¯Õzÿ6¯î¢•]lôcx>Óµb˜´ÓÙ;´ì®|ì¥[ì4Ý:Šªc Å6ÖÓ¥çd§ !í\7¹Ž¿ý¿ýoá…ÛÐì-ðÛ4íL”ZvG„E§2ÖLì!zaÛì*aDDDtÈ­ÅãPÿ{tæÕ­Ú6»âª!Ó¨põ±a“¨!DB#Ù,í5wÃC'ÅB"9»yg?»œšÓÿ»ûl0˜N˜ý„Ó$=¦Pˆ‹#xˆŽvŸ[ûrÜÖìDmZßæSf™Q™gvŒ«0 –•×}ÅY~Ö;MÍôáÛR6b' ÐaP0ƒI¾Ò,|ìÈCÈÃ$àˆ”™£;BŠüCôðš &eªR°Èh†€JtÒÚ Þ6Òi4ì&Õ°…a""HÄ{ÔhiÎÄѲ(NDe&¡ Šì"'<&Ú#q(‰¤'½‰+Œãmë“ú|<=¿áüníF!bÇÇñ lÏ&³Šaæ4Í 4Á3ƒ“€Ów¹xÕo5Bšv©¹FlûO42$‰i­õ_÷Gaó?iZ'L&ƒ4"Jn¤!šFF­2Ÿ5 ¦špôÂrì8†ƒ‹—t[ ÓH×KÝôÚÚ™$Õf"<Ða_2Dm„È퇃g¥ƒûîRŒÌŸa½ ‹B"",0‡£¼Yó4Ó i—A;´BšlrnÖÙQy ›Òø;°°ûoµ»´úg ;†ûMmßFÊè'«ëÜ0¶·wiÜ>UbúЈäS"IȲ<ÌÍAh¦ÆˆO†›º&í‘Ælrá¢xÐOíÛwí§Ç\kÝ÷’Ò ‘5§ðm&Ü5Jï¥aÞŸIäJǽ½~Ž2C(!wæ¸Á œaüäHa0¨M‚¤^9>¢á°™:mÞÂt'®›iÚnžŸÆÛo¿ÿÌÌ«Šˆã0aIÑ„üÙ™åÌ `‹³õ÷í'w_þÍ¡{ëùölÁ5}f¿;!˜Zvmœ"w„ª@Æ ¥ÁÐka0ˆOÏ”ÝéßIÚzmëz÷®ŸÇþñÓV°ù¥éš#’j¶‚7„×F°Ðv®šW´ï¿xᆵ|4¿èCLáüÚ'#dPóì)PÉx3ª\Å¹Æ äÈÕ\-ÓÂvœÏ™é÷ÜûA± m‘½ðÔ”Zmn®›§KÆéþ×ûÿ_Š3Ö÷ï ô[°Ÿí‡I6Ò×°êÚ.7ÿÿãßð|ÿ¹qcX hXD)á4 á„!a2q‘Ñ(aè@÷_6!òØCkwUåÅ ô’uƒ%l]·.òOömìZúÿßÿ†=¯Ó¬gÄ÷Þ\pßL?ý?I¿¦Ü7_Ý[·]?½ÿúÿ"s 2ÿ{#ŠNê›h”=ÓT ˆç`ƒN-~ý Ñ7‡¾ï&íÏÉ7µ´m¯iÞ¥p^·‡ ÿ_츻ø«Ð_õÄa8mŠ ë¿KÓnÝSþõïN´ºÞ»ïcý?†ðÚ·ïÃAÒm—¢‹·#½{†NtN3f› ¦Á"wO·}¤A¼6ˆÇV‚þÅ1]þ¿ºéÚÿaÿýÿì?ÿåè]ÿî’pw¿öXëÖïïö¿µ~ûOëïß'x?÷­*Iôm‹¿µb“†»¶—ÿÿ¿þmÈKqL”ZV´ o„'’°þ²q^8dMú—I$…$’KÆ@‚WßÿÔ´ðmÿÛô^9ð¼Âî¾ëÛÓtûIƒM;a…bâ¡„¡ò7q[i8·ßãÿõoᅫF;Š|4Ј`šhDGøíÿ…}ù=X!ª­|Ÿ…¥¤‹z'fß×ÿø6ïÿúýSU}+M¾ÖÍ´ôÂlqÃMŽö( ’vª°™%_¿öÎ-¾Ì_fö†ÚPm44 i¡ÿ†ÿÑwÿhDŸÐßÐÿTð„"vI$’IÛ¹ú¿þû××µÕÆMƒI‘xiÃU¶ôA—Šh „""rR'ˆv“ºéà ­¦Æ©†6)ˆ[L!׃ýéømûUþ½÷Óÿá% $¤Ž•*WÿýžŸþôØÛ‡«[±¦­lSÁDHÅ•¡Æ¢"C“¡öF?í<1JÆÖ®ÐhDLŒÿ··ÿOëÙ =?þúZíÝZ¾¶~N¯H$—ªÛ­›jžšaAÝ83¬&\"B`„†ÄD0„tâ6+§hCA©"húÙË'žëÿÿAú÷˜þõ½[Ó[õP•„ì÷ìqÅ7¨K é±±ÚlÚôÂÁ¦ˆ0„D`…mö‰¸ˆˆˆ™0ž±i߯vš~avzëüÍj˜\ü •„îÛ?êM´B˜ì-¦ÓUiA¾©» _}ž‡&ˆˆD&ÿ ´gâ˜H«i& Ó;TÛ k "‡¦ÚqÚm…!F©ÃÛ»N0“% ŽÃÂ'l§AˆMôÐaM;M4"#°‡2O¾ƒ ŠcMX×cA±ÆÄZ/·LŠ;½Š†Û YX Õ4"""!ñ ÌèD0„›ƒÇ;‚oŽkEØ]2v„5Ó „ÉÛb˜M4Ô˜@Fj´FðaƒDD0C¦""6™Y^KçzU™ö¤ƒDDZ3ÃDƒD0B"""">Y£²&óSÕÌ…QWg#‰]3ÁžeÌ"Ü<—eÏÔDDDD|›‚«™ªßÎÕÇ‘´uޤ\Ðkªo ó8´›ð톚ÐA6¥[_ZÓÈÌÎ6Ï™͵ ÃVìÿi/íí"áɾ›ýõ–p6Rì›´ÿwì4äìû.ˆú›Âa5ý³‰ÝµÒÚw­VÓKí|\³Õ— ÈÛ8Â"Ì•c²F ¯íkæh¤f»=7qh4—h·nízm8~÷zéúß–u/,‚ˆ­Š^úT—ÙNIš#®™9 Œ!~ï ‚jÕ§¯Ük´Å`ÿ¿_Þ¶¿É{êÞ wÄÚD!q ’Ø!nŸ»Úå¼â`‰¼Ž!°\œE´ Âôàƒ´œ&ÁÚ§zwÿ^Õ÷Ç%2JfÔÃAà™Æ',|ïƒ]÷J¾‡õõü"‡»’=‡ÿëþ8÷^ýßíézõpáÝ,¯L"$ÄZ j£IZj‘6EŽïpÓTûnÖþÒùßo£0Š*5ÍÄæf*ç=”@˜Z (P‚ ‚}éîÿ»ÿ¥·¥¡î® ÷Óõú Ýu^ ”í8w4 /. îàð³±´c:åF{034r<0‡NÛ°W6|4ÓÓ´ßÖûõ~ÿ®£K”³#ŠhŽ?'Ñ+"ŠƒDAª Pðƒ¤MÜh»oÆ‚ºw¦_ªk_ýWÿÒ¼ÿmø?ß þ7»†·wÃM4=>п¿¡œ:0Bä;‹\À¨•Úd}dwjÐ:U_Mïm×»¿›Ç_éUBT`‰ ¦|³vœZavºo&ý>žN>ìœkîõºI$•$’J{I$’úEís‰¯ë[Uä/NVëpá¯}ßگ߿;»¹ß•! OAª" S#ÌCH;  ôÝV¿·t·÷ 6¸"=Òô’N“äùAiðÂGðƒÂEÃdÜK“a…aÞ Îô¯»ë¯cØÿëúµú_÷úO¿w­±¦5Û_oÎÇùÞH®éJLá/eÈÍhåîKLЂ  •zYömëU#þ“AÚkm'mú}Ó»ÿølر¥ý*CZa0¦qÆ“Ðq¦Ó»IÅô `žž êûÝ?}ï_}ûVÝ~¿ý$’I$I$UT¡Û†½“Ö"ç<ðó;5äè¤ížÿÍ#„]Ù9©@¡0~8´:‹è4û­oM4ìŽßýk¥MúwªWÕ¾×ÿéV—Dà4Ði„ <¼Ë»NÑy‘Žô¯iéë~¿Å÷¯ëÃ{ÿCý}æ×ûžþÛµö+„"-0AÃB>ÚU pÌ7&pŽƒ æüÍ7Ô'h„¶œxÞ·iéªè›°Èݯk·½4ÿþÿ¶“ês~µ¨nïýö²øë}­¥MBØ]\p‚mS¤ÞÞÖÜ}¾ÿ«ëÓußÿPöýzµí;ím;7\ní½áX@ЈÐõ;Ö!Ú¡t¡ßÅÝû#ðÑ1Ød£ÉÝðÛ§êvƒ¢yÿeÇÞýþÍïûþ=j‘ûÎ;ªôoÚ¿úB+´él•°Â—uþ4ûú¯ÿ]ºýˆ—ÿÿaýº"¨×h?cö;möˆˆ0„~”¼¼]îj?]½wiÑ­0PƒÓôîîÒ'xßþžŸzݯ×tg×ÿªî½:|;ñýâ­øúÞŸÝé·wH=þ·WÇúÿí„·Â$?õÿ÷ÃÝë„“a—5]=¦ƒ""v­%Ý’ÍÓ²o ì»vßÉ¿½Úˆum¦÷w^ïí[ÿã½ù¼a_u½+ÿ»Tß_†áò7wÓ»uÿ´ý_ÿÿÿU×ßÔ Ÿï×ÞÁ¼çIýÕ0ƒB*¨ôÝäòí4ýþ·iµ_oªÿÿÒëúöÿÿ­v±Ö×Ü{ZM†"ö«Èâoªuÿÿýÿ²8Ÿÿòõûÿò½_¿ûzî¦iÓö´TÞ"!„"&EýÕ®¯¼o§ßè5Ïûöÿÿúßß_ÿý´ë_ÒA|rPä¡°Ð6;êÁ¶×v*ók¿÷ýoô™…¾ÿÿýWê?¥ÚZ_竨~_LSÄEZÄÈR YH‚wšÿý?î¿ÿ‹ý>ðïÿÿé¯ü‚‹ëö¿úßß^OÉ?o †ÞvÏ¢ƒ ~qx­fÿÿÿ÷qý~·ÿÿÓÿúºµØaXaïïÂi¡ýÎ/ûÿõþ+úõöÿÿüðWÿb­­=ÞD‡#ëOÛ¹¯ÿûwÝkMmHÑÿÿÿÿ__ÝÿßòÿtíX¦œSØJ9 ›‡PÎÔDƒs"X§ÿ_üRþ½í×íÿú÷ÿþ‹÷ÿò¡ûK|ÓÞHÿîÁÞž»MÛÅ¿_ÿÿ½{]ÿó÷ö¿Û~œ4SÃmi—¨ª¦¨0Å×vBAéõý}¯ßߊýµ_ïý«ÿÒoý÷ßÛwÞJ¿ncÛÛßûÚ÷׺ÿõþ©{3íµØk}ÚZi„5M ¹L= í`š à×¾9C‡Ÿ‰Èó0[ÿýÿëãÿ÷úΉïUÿóEOÿÖ½ÿÿíÿã}·ývûzÒa%c_í×ûN);KÓŽÓA±Hˆªh4÷ Ba4"""¸¿„Y1ž g Ãì'ÿoÿßÉÿÿøiô½Óÿ¿ÿ ®·®ÿ°âº7£cÄßÿk×Fßôßl;¤AÌ5Â}L-ë÷ó¦Ç3 ºÅ ÃL š°•ys/ï†DDRè‹"W‹”™™šLÎÂiÚ-ëÓh×°ýuÞíÿvúk\æýëv’¯ÿþžº¶¿ýÖ+@ÿëÛëÚ÷í;¤Ÿ *Ãk¶«bÐqþa]Z¦­P`Š­„,dj¡Ä!¬N™!¦TG$ó2LÚ9'h4ÛUÝRô›vúØ]Õd-9ÇÒ{ý÷æ?MØTÓÓ»=Úv½ÚiÄ4ðƒ‡ÿ«¿þúë÷wûz|zʘ@×A6­8ÛXÄC¢-J´""";ˆçzçš !§yÆyáwH ½Úº[²òõuïßÁ ‹ ý„­SµÔ< Â(¦ši­ì4­6E_l&š¦ƒ"ÓL8Aá4÷ïÕ×Û­UStÓ¿Ø®¦tt—ké h&Ø„ÐØ0B7äm™ §hÑëÃnÙ¹Ý'ÿzÚKÚévž ;A„TCƒ´v¯¡~žŽ6+iŠi‚nâ“°šîÐv+Bò­Sõëëë­ºA 2â§H4ä8ëV™Z!„ÌZq‹hE„í5V!ŠÊ|Þ¦#í;w¬/kKIÆ›ýÚºýqú²80D /iª—ÍWhE…7v jƒB!„"ÉZša4fƃB""Јýj¶šw…á°Â¬oI3Šv˜B""8ˆˆŒd‡X[Mµºw}§zuüßî)cKïÝëþ¼DDD†XNÆE¦„DLðЈaaˆâ?¦¨=LjÓ¶)‚# â""â /;,goß{nãÿê=}Ã}+µÿ×_¾"¸´"""¿¡¦`8V¤žÐŒ­˜#†a>—ß7ïn½þ¡d^Wôqÿ¯ÿÿÜ/[ôÖ‘ ÙC„^Pm ÂÇõh‡¯÷ÿ¤ßø ·ÿ÷öÒÔçcüE–:5ä}‚-çý¯yþôáÿÄ7ýoÿýœîÿî —´""9\ÕÍîõ‰åôÃþ†ÛÿÒ]Üòl.a÷¡i-ÆåÿA­¨oÚVïü=û}ß÷°Âlm®Ã—år2\±³´¸ûöš8Q@„§õ~ÊèŠ'ûW(¾®í6Ö®ÆÔm±]50ÎàÂjVÓ ¶ª¹³ÂjR \ú…Öÿl…¾û^´´¹ bØÖñ ! &¡à “0Ø´ ¯‘Z¦td¦­°™"´Ó“vxŽnéûy½«ÖßM‡±éma©+A˜M0„DFoáÚ÷ÿ%°ƒ"ìÙœgB'Dvña³:~Öà wö+k*m¦¶Ý‚ÄDDDLQú9ûNé=OÔ‚g#ÆH"´*i á¦ƒ ¡Ú–ðžDcöÚvžØ¦Á·#šhBâ!¡ÂiÜ6ᓤwñQòR„jfà¡4Ó3Ž4¸l[dqÚ àˆè0¨ý{Á7Xvž¶› »ˆŽÐ¥™Qúîhéß×0a˜R9¦¦ƒM0ª®ÉÝÁ³†‹‡†…þ]½÷éë 'Is#^Îán×°¤ì~ùƒ]$4“Ãq-ˆ™è“¸¹8];ÐmÍ¥ôž¾ûíqI<ì nFõ|{ aO>³AIÂyñšã.vƒ42tfÜà§…ò]“™Ã(Dùü‹D –ÓX ‰ÂdÝIà*@ºA% ªª©*A=ÿWø*¾þ"¤ŸŠ}/ç¿¢põz sx„Õ Œ" ;P¡5Ði¨".0ƒµ`¬ãEãé·j«­’XûÕ¤’I$’I$…¡%A$v½ôÜÞNÈúi¹Ì d ª…o„´Mþš&ïdcåãDÞ¾¦ éÂm¦àË)TÝ>ÿþ»M+ýþ©Ú÷ñ_5EÅé×$°* *"¨eóI=”4馗ý]ÞNMÍŸW}¼7%weͽvÓË‹ŽÃµúø¾?zxôh/÷Ç—ÿý'ø¯Læ)¤˜"&5@Ò]*…K„kAI#‹ÿ½>®£Ó~ÕuÓ}cð›zI¸Aÿ¯¿ªÞ*± ÿÉŽ[ª~«“-ýwOú”¬©jÍŒãb¢c»mZÃkµíÕ«½þ›úö¿­ñúwô¾¯õÓÿìõRc–ŽwõúÇþ¾×~´ÑŸd„uh3qž^>Î0ƒ»MÔ Û»îÓÓ[¯ü?¯ëX÷-ã­n)u­ÿÝ%¯ò#¬œ—þ‡T}ój÷üÿÜþ)‚y§¶°Û·§·X%÷v½¯ÿ÷Ø}{ïûN—ý×÷¶¶§ûÿSPÿýëÿÞÔÂÕ}VÓ×ÿPžîÚAöÃm;†ééßׯÿûûõÝraît¾ŒÂ/Áå˜ ¸þ"¿¿×EŽwýïýþý¿i÷l5c½©pÝÞö÷÷ßþ¿õïö¿ÿð× ð¯ê~Ã圜Bš|ФÇ.}÷è_þûµ~×ÏÙŸñÚmž¡¦Ç#‡U‡MªÝméÿým?¿=ÿøéàÿþ!a¸7Š/)þ‹¿Ílm5y†>…­ÿïþû³Þç«L'¦©°Õ†øú 4ßíú^××_¯·¿ýzoÿûõ¿äô °ú_Þ“}öÛ“qlìL{Tt_ýf5¶Ï]ëêÅð±(vƒMm8¦:i‚¡ ÅÓšiV×®?÷ÿýÿ¥ëûôsét¼¤ë³“ë×_¶|›“ZtÂ#/¸zë}…¦§ 6“bš 4­ØM8a B"7Ûýÿïÿþ+_ßÿÿ}ÝA&EÚ§ÿÿèëvæMŽ“æ¦šÞÙÿû0›Û„ÓúaB#6È H€„ŠiùTWÿÿÿï¿›OúÙ}ý³–«S!èôî“Âi ëL"‡ü;¤è®§þAQŸž\0‹·¶n{ ­ ê½…±)ûDpИˆŒVŸøÿ¯ÿéß®¹…÷éæìl5øA«†qÅ!ÈAÌêhXMœ~e=üH´a7 Ð]…W±ìR«{B!‚h¶»ÝkÒoýÿd JûãM6Ûb£÷lŽÄœ7 ¨"ƒ2qnÙi6GœCŰÕziJª(¨kΈ¢6á Ð2qŸ3 šiÞÒ·¾Ô0¡¡a‹Mp›ßïëü¿†Å0Ûv‡ÚÄ0„b"!…7Z4A¡fÀ¡Íá0ƒ&ˆFÈ(ŠUÿŽB™£SAMˆ™á˜4áœhœ0Ok|0šaMˆé:{~­ë§ªsE§m aˆ°EЈÅDDDDDiºMùZ²+ Î"6 A†›o'7.-è×Þž>»o²ü29§Ô4­4êïA°…¡ØpÕu‘<ë¦Ò3FÌ ap„Ðu.Û»U¤Û¾¯ÖÿÓ½:†“PƒA„Ða+ˆívÃ^9AÁh0˜BíI«oHÙ¤Ÿ}Þ·|}§—ßm¢È0Ê©iÃOa0\!üWzttEPni¦‚®FîUåÛÁöÞ•·}Å|oÆÒÿÉ·£¿•|5B#‹˜cj¼‘ i„E¡Bª±)òâÓ´ 7Iì=]Wÿ¯"r„»¯JW„JŒî²Ob#b§j9Ú ¹¡áTDâc†3 oEóa6“†š¥ëÿz]G]xÕºÂ_®˜S¹éáÃÒ‰3m8¯xA† „;¦­¿{¿ï_~Â}muÒvü"Cï£jüÕ=3M÷ßÎÖ±; i÷öô^Z„­¾ÿO½?ï¦ â·þP'üºàÚzúêéi¦Käì:ƒµ~w4˜UÈÄÑ&qÿ¦÷ݰãý×kÿ±~¯Xá:¯ðÝu×Ûkù:M=~‡ðƒÞgA£4˜‘HöLŒ‡1 þÞ»õßûuÿÍ ³á5«›ÿOëüTWéÞ;®v¯43ÆiçŒágCßßO*¡*#? Ù‡w,v“‡÷ïÐj¿øþ¿F»ué6Ÿïeß÷õÿ‡ÿ(Eâi 5—DJäËw!Ió94æq¦šI¦ªi'ÿ¿Úÿ‰Hk_ìwÿ«Ç÷Ýž}ÖºA«aRB.²%l.†y™VI§Zv‘1Ú•/}=mž¥Úí$ç¤ôÿcÿýÿøÿ÷º[¶zíp˜L,0©ª¦œ[jÐâ“NTÙ”ºAá4k!:“q§lm0‘xú¨A¹8úùÄNÎN‘F‘¶i*{P[œ·8…ú~üW¿ïþ•ÿçüÚþÿ{¦×´ÂöÅ„GLŠø†9”r6@ƒ4Ì ,Zz \2ÏWi ì¾¾“ïï ì§ÒNóâÚa#ôÚe#†šk^Âiߥ‡ð‡‡´ºWÿý*úÖÍ«WïlÚ#µ[Ob‚ ´ÄX&¡´"-žŠƒA™´ÌåA¦½‚Dã¢áÿÖû_×ÛÒV“Ò&;0Pz} “Û¯m¶ëi÷ëùÝÇ‘@žÿ~—õ÷Ú÷f:všlGk :ðá¦kB"JÖC(´á¦f&¨¼ÛÕ?@îÿ»×WÕ­ÿ ›—¹¡Ó{~Ñí­·¶ÿþû ò¬<+í§}Lýý'wTÕZ ¦Ä§¸a3·×a·½péom“æï·÷_µ»_Nµÿÿ«¶Ó I÷K§k½ëþÿá7m®×}ÿö××a…Mn·ÚkAÄFÃLÝpÁ=7ÿ»Ö׫¿â¶—ýw·Qþ•ÿÝXÕ]~¯ÿ¾"úX?þû¨ûJشدDòÓ9Dê™Í”ï¿M掠´ö£ÿõ’û_})p—÷ýÏ%¹GÿÿóÈÛÝï¾›Ú¸@â‚èA„0œ4"#ÿÿߊÿÿïïµýë®úèÕ÷ð¾Á­zÿþ™xÓïÍÂÙ¾ÁõÁኤàl–,Gq¯ý¦¾š'Kwàšÿþ‹»×÷W¬úþâ¿¥áɆÿ¿ùO‰þîØ¸¶×Ý„&lE¯ÿüwQ“öÓh\4"+Zº%poÿê öõ××í‡Vž¨]Õ7b·cdn½†“§eûî*‹ŠŽG“i«†âvKJå@‡a2i› Ó™ N¬Ž‰dÙ# Û´wZú×1Úþû«öA á¬[M‘¿MèCM4 ¶7n8Óvšh3l5M3lµ-Ó fˆˆauI_â]©jíyJÉÍ÷ÿúÚÜ;PƒŽ%=CÈßÐ48vÚù;î‰ÞŸWÄEi?ö±O#'Ìãу ÷B}?D'ƒL ð·a8q SÑ1ØDá†]æ“a²9MuÑwݦ±í§úÜ^à¡„W·Ê}Ú³[\Ü?µ¿iݦ•ùDùA˜„hK½8{wÐ@Ý6ÿ[O=äõqºë~§CwóºG¢+ž„—Fcaé¦ß¶Úßlqá0¦æÓ] ¶ËêvšvÜ4Õ_ûþö·»°™„ _[N¦¯‰\dLÆ¡§×+Y¹lÛ4ÌÍ4ͳ‘ Ó=hÖÐ6·5¿öÜæ-cßDà4­³Òº¿OM;õá§þˆ¹7’ ¤I§Û„ÛõMѲšipšÃÓß»÷íÈÁõ÷O]¿/ýÓÝðÜ~¹ndYÿàßèÝÂ^þ¿Ed0v&0ƒÁábµôOwé´Xì>ýþÛ·¶ÒÖ©ûZò9ºs ƒéi;þtžî½X0™¢_ñÃø}õô^o÷Û<ÐxMUÜNÄ#®Qà™!¼üyìè·iµ¿Âo}§}+Áׯï*Ózî›XÛûÿ§öö¿íÝKäx/õƒ¿ê{ÿI¿¾Ò† DyO™3LÞHЉma0’ ¨$ž›ÅÿW¦±Åý¿~ÿKo¿ ÚÝgþŸÞ^«®Ãû‡èQ'ÿ{~Ÿß§ééºÅ1[hpó ålÍ«:¢VDá³8f hA‚ƒO†G$?o} $ÒJ¤’CNm¯÷ý ÿ[’'ÜÐÿôúûÿøèÿgü‹ï¥÷zjœ4Âì ÐpÐi0‡IÎÄT‘@¦€€™v~%L¡›25æÌ3@„ãÏ„ˆwiÉÆ|‡h­é«¯¶ïWÚH4’_ÿßýï°ÿš¿ß¯þôöÿÛm×›^Ø'¦Ói0ÕšjÇ Ø¶~ZNM#lðš"XkÂ`ƒLò#³@KA„ÓC¹1Û"Ž÷EÜ2â‰ÃIíÞž]­ßÿàþõ ½0þI$’I$’I —õ7ùtÿûêm7ö÷ aÇö¶›¬nšµìឬ‹Ä}¢3Î@¡ Aºrî'†! ÷Bá‘ÅDá¢wårH„Ø;'Ô¿„k±þƒ[Õÿ‚A¿ûFwmÿÿ×¶›¤¿ØÚÝCKö¾ëgôïNûËÖ<‚[N4†M¦-– !Ѓ+ÂO¡4… ÞMö>¶yxO/ ¤Ù'Ñú{¢ú˜×OMMxð÷Þíë_Ä¿×ÛÉßþëúç$ôÒI%DN ‰ÐÁýë¸ãL'«¸'iûŵ´ ª@ÂkB"#Ó» ›è>Ó^5Ý;Ô¼a¦¿ÚtžÚ÷¿¦±U Ãýµ{¯ÛÃwÝ?xnî¾êÛ»m4Ý”=¡AnÕ4éÓVÓé:M7 i‘Å„"&¼DE?—l2xÑyiëñýÝ^ê¼}lWv zÿÇŒðFþ¶×Ìv¶Fª{Â]êo}µ÷TŽÓ@áÝ¡ȃŸ*xiÏl[‹4gЈˆ‹îS¤žºoÿ¯ûoVúã4¬,•ÿý—¡yþ xö?lÛ¾F>ª†›Ý­± ìwØA¡ƒìm]0„G5êP%?ý~HúwõµþÜ6 ÿßÕ`ÿ¢œ!ÚßâšCcz  ÂTÙÁˆÂî(B!“‰e5IúÚÓÚçQé7gÿþÞ×Û]ÿ“p\É$w¨R”ïv÷×ïñ±úÿü5û·ÿûmÉ0ra–ãp,\_¿ø"B SM5ÿVÃo^Ý7þ¯â“ÃþÓM¢¦¯µu·Ó×V¤]?ÿ÷øÿ†ÿîà¤@"§í-ÙÞY¼‘“³HÛ“„OæÇ~¿ÿúþÝâ¿°ø©7óµMëªÿ nl3—ß~r¿þöÔžþ×·áUûħY&K”ì'ÉsÓN¦­ºì”Ïuïµ]{ï½uðÉ3Vÿ¢Ü ×Ý¥tÿëШ6¿ÿ¤û_é{ý¿}pˆ5Nû^ªH“M:'”“%õAßO.àáÞžÿÚèUÿëü¢W÷-»ü¯/JÂt÷ÿ_ì‰Uþ¦Öºæ4Ì}°Ì=&èÞ)Ùr>‚ÕÚ¢Œx&޼–Éè;OÁTÚ–íÃô“µý´Õïãû_ßÛèƒtá¿ó+E,_ÈN¾ë|Úß*÷_ouÞøÛTÕÃI=ŠQŠh0„aÓ¸h4!¬‰$4Ð{µý¢CëH;ö?â¿þºøÿû¶Dão‡K×l'ƒK)EšFÏÌ@¾cµµ³sk"»<®ÅÓM´íVØm¼U;M ¦ ¡ Õ4õY¨Ëàšºv¤Iðƒ¿îÿk×ÿu¯ï×ÛŠþþ{~×!ÊÈ„$2fé3Âv›h4Ý{fØãi‡¬[A„-4")ˆˆÒwÞáhkÒ.ûÕý7¿U­]ÿïæÿº[ÖÓ[pÓæLÃ(²†¥ðžª‹Ÿvöm£c¶>Øè4ÓN-†S•hJÁˆIé/Hî—3ùS½6íû¿¥ß»Œ?ÿÿýÿ÷¿«[îü'«_çu>l§ Â…4)ßAæ¶®z˜é÷ØAÒaˆƒ"""'~ªê«àˆEÖiuÿÿz¯ÿ¾ïýÿ¸­'ýu××ÿõµÃ°[¿’dFÍÿ~›‹¶ïÓI?ßÝxЈ–øiÒUôLzKî÷Òõûûûúì8ÿÿÝwÿþú¾í»X¸¦rßå\lóAPa¦îØ6 S»¿ÿ_T­âvdŽÊäÏzýãZ|{ß÷ººauÚR1ûrß÷ÿï^ßõ鬈î)‘Çò¶²‚M2-zahØÜã}·w¦þö»¿ÿÍ¥ÂyØéBm*­UZiW àþ={ñýô+èuÿÿûÏ/oUÝ·ƒ}éëóT}Aé±iÃÖ ´\vöÝè>êú^<5_ÿˆª;f§ ætŒ:"XÑ<™1R2*¿ë`öÞáé1?å×þ¿ÿþƒýSOẴôhÑù³¡Lëi²ó‡æººV—ÿÿ_¿ÃµÿùngY×QZ4™žxÐ4òoáëJ¬5lREÕëc ÷^PŸ÷ÿÿOa­Û´ÖíÓâ">r2CDFxûõô\=öýëýþ¿ÿûö“ÿô#i·GÓ™YA‘¦¸‘¾Óïi6égzê¿Ö¢ßúi¾ê›ßé~®èj›N#M4ÍZ „DYƒ>Ðw§½è˜úþ‡º¯§_þÿýºÿÿó½ôOǦ"ñV%æ‚­í¸;½|‚D@§âJq 0„3 Õ/Ã÷Uô=¥ö¹÷|4­4Ó ƒ‹¶“ØB"";Ý¢níU/wv¨^ºûW]ÿøÿðÿ¿ÿÑݭȺ&L&iþ“ îíízv÷¾J·Ô  ØÁ:Š“‘s'Èlؾˆ±R9¨UÉ óÕÙ~ÏIÜ2:Ý%Õ«?ñLV†(&ša¦É^Ž›F˜úª[ûØ7¿×WïðþšÿÿùoÿÃÿÞä¥gVBg£;Íå']?Ú®®ž•÷|~†ÓC3àôØ"ç€Á¬3ð“Haƒ ¬S~Ö6, ÁƒkØa±„4…» jñgÔ!ã›_¿‡÷}ÿÇî¼ÿþ‡ÿwÿ6–úÂvl®kk Óo~hníkïT—ÿVßõMm";Jƒ‚Lt•B`ƒOa­ÇµA:°ƒbé¤Ä0±^5ýÞš÷ÿÿýƒÿ¿ÿ×ÿÏïš#wú¾Ùï%ÞfGH'Ö®ûw}ì'I·þŸ×íZþ¬ÿTEå%Ô¢$Û³t“ ¤‘¨ˆ>¸Â „Ó‹„ËÖÄãÙ4è0B"MÔ¯é½ë{ñK²ÿß¿ýÿù¯^ÂvŸÞšØN·}ïO×X>î?¿_jÿCëÃ_é>êÈΰxézÈDLWNAR8dWí& Â3J ‰d ŠÓÿ}]wÿéþEnýÿÿëÿûJüj±öÅ*.L=ßµãÿ]ÿv?Ø_µÿV×Õ%ßOÛªI80ƒ ƒé-%Ó¸ã/b¡¨Š¯ý« ¿ÿþã@üâ½6¿üÑ{kß°Òí4ÚZiÒõsx¥tþï]Žþ»ëÅ5õÿu_)ÿ«þºôŸëkÖ•¶¡cY ŸýqŽôëõûËÖõöÿÿ×ÿO_Mck§hC ï«ÿnŸÿÿ wü°þ?ûÿLÀô½¯_ô’]j×¥I†7Ñ6‚V—ý/^¿ëëÒ}__ÿO_NÖ;I¦¨Zzê¿¿ñõëïÙϯ鿽«¾‡ý~«ýR\Sö : "¸Â;PvI²cæíxB|-Ókéþ¿ž’÷wû¯ÿí_« ÝS‹L-}{þïïÈOüx{ïž¿û¿IR‡­rÇÖ¾¿ZQ ‡Ø“KPpžÐ\&¿¢Q~+ÿºõ‡_}Õžõ´ïA¦œCcª'Ùr*ÿì>ûuí.÷ßëýßw®Ûõ×}|zU¯¯Pë25$Г;¹ ûÐ’¤RÚêèiUzúmŸ—]{Û ØMŠL&Å.›´ÓD 3ÄGÚþÕ¯{ý~ÿ}¾ÎkúP}æñi®ëo_¯Òúë‚“v¹É0‡Åƒ U÷w¤(!¸ÙD#Láœ4ù(µö®)í-SmcL&Ó¨NJ)Š /BÖ;M4"#ãÖøìß^½Ö}=}Fݶ]†7ñLFík¶ÿ®©t¿è ïáJ¢Y Š_ö¡gŒÞ~<Á(𫆠÷Ã#Wi4¢Ä6ªž ÐlPa4&pˆDDGýÛ{÷ÿ÷í~ÛIßcab>õÕ¶ÂIÿKüˆa§XPƒ¤kh âçeÒo”æƒLŽŒÊk·h0š“»M=]„lUÃkÐ6Fè0„Z BhCDð~·ïïêÛ_`â˜BÓB?þ›ŠÖXé*ëé*ªc]åÅŸK¤ùSfa4Ó#Švj<'Z†xh2xÞÝ‘b‰Â¦«ÿè0™¾¦p™"ˆ¤Êd3¿jþ÷íÿëÐi„#vúðÝ|zÿ¯ùßÁÒo[ÜÑ™£8)³Ê ͘3gh0‡ ‹(2 AèZ¢q ŧîMÓo†¼DD(ÿïÿïwnîh‹ßüÎzëÒÕWé­Cÿ½WX rn[4,vŸ£.aKÈA¦‹ÇróÓn‹ì=½§Þ¶þþñýž÷£{·nîŸ÷ÖÁˆû¯Óy µ×ÿz¯!ÖßÿïŠl\ÎÝ 6Ì7h7M5NDáÓzNôõNÈž«¯îÒþ±º×mq˜ë^︊ÞפÝN—&ô¿­zmSkÿ²ïÖlÉ[ÃN²í¿¿¿èž8_¾ø÷i†ÓývÒpÿÿh¡Kb“b·£ˆi¡oÅëºòÞ¶êþ½iWÚ{ÿÚÝ+m=>‰æÚzþkoýxÈÿö+b«þ“%Ø[B« ¾"Ј‰YGj#½Sõ®Óôít,-ª®Œ=¯¯ÿÿ¯tǧKÇÿ_×kÿÍòËÿçM·o1]ì#!ÌŠVÈOÄDb…4×°ï» \‚ééXB¬'\0…ôÅ? 륚ÿ­ÿÿÿ÷Þ?þ‹¿‘?ïíÆXá®6麇ü„ký¯Ä?¸a(؃íˆ:áZWý8oï}Øz_ÿ¶¿àŠÿúOo}¥Þ¦hÔª‚!-wüÃýª&hNÔZÛä=ᆠæ&-Õ{új*÷úoþþò1ëüV½¡ÿý¿ö·ýÜ…âi:´4Y‘ª urlw®K¼•áSµi½Ó¬qÜRmH/ í­è4þÞ?¿ûoñÿûô~ô·^·³ÔTRwiÃÝÚaö.Љ#¤BElˆyÔÈqRù Êç ¦üu"¾Bš 'mú¤4òò  Ði¯m7ÿßoù~¿ç°½ñÿ¿M5.´ê‚‘Ð&ªžì!NËPéJ^l‰‹BÉ[#h› ƒ `§‡á›ÛM´vUdfæ0šæ¡Ÿg$á#g†ñ­„Ô&¯_†RÝ^Ç×ýa½úþ‡Ö¿ûõ‹`Õ©£õâ>w¢8Î0ƒ ¦J‡%„¬4 Ñc¾‚i„ÓM6G ¢ñÐhr•ŸÏ!'ŒÑ/DlÂižÐjRmæÚGjµJß*Ë“L  Ê<0š µ´ÕVÕ¡e¿o¾¯þÿÓÌ/»>¯¸iðÓj(0X³E¦‰ýò¯R4ÓEÝ ûØ”;MÇAݦÑxåÛ—n]¹<†ƒhá2óMÙª8ÜÕ·0ÉO ƒ43ð Ð2æœa›n‰½Ca¬{A6û ëâ,•e “bBBÂkšØB@×cFÚÝd>ÿ<Ÿÿ¿‘Ó´öÓm$Ø»bqÞÐâ"# ¬ÔAfͲx–æȱ„M½é¹7¢íƒ&,ƒ°È¾mm†ƒ´ žiÕëA= áS÷Ý›y·‚;‡Ú}nÇz-Û¶F Î3˦ v¡áÒwq×â"tn'n„CÁ0B/_ûk¯¦÷wš%»NB 5³ô0¬PNpšv½¯BíA32>hAaÁÅØpî¯Aè;NïÖÓØõAµÚuûµ¿í~–îÕöåÃM6mºom-ßNïr/ú·úÒ§ˆˆù¥þ§-}nõulÓ4áÒîЬ1¨hD0¯Uï´Ð´®ÈÝ¢ïïWN·¿÷cÛkì28¢» Ë‹ïÿ¡^íaºJ÷¦ÜvÕô·^ûœþÃÿ»û¸PA-ÚõÕÚ¶—v;NP„>ö†6ƒD3ì8ëm°þ±lAé·kõÿNþ(ÓVE£êé¢qã¤Aÿ-]¼wµk}Øßwý{þÚKjDþß¿ÅzÖ·« $ÆšÅ,[²,0× A¡Úsºxdîú.Ú.(í“Í4þÿ¾ÞÕWÁ·¯¡<¡ ÿûîßµªmü|Ž ¯ˆ¾àßû°÷Kµ«­n»Zµ¸i–8B)B!ØTRÌé÷Þž6Ó¿ÿÿÿËÔ.ãn­Ÿ—ŸûûõþÚ¿®XQ÷ÿ÷Ûí× ƒ¬'î”{MUQ!2VšðÂöÜ=>ÿÿÿþ½k§ÒX;_Ó½Mÿÿ»mýþâßͦ¿}êÿ1ûÓÜ2>Ç28‚ééE4ì0ƒB""^%q)ÃmïmŽÿjø/ÿúÿþ{ß[>?¾ï1öÃ6Öû¿ÐaÚýýÿjl/wr';t½„Ï h7Ó „Â5+ˆÕßõU¾ÿ­9‡ÿ¿«ß÷­ï­ž¿NÏNÚØM¿×cÞÿ¾Û<ŽMºVy+ Å~{³—i» 5Š&+ا¦„CR­4""ÂwѤ_ëxáÚÿ{B?ÿÿ×õ}¯°×êÁ;Ní6ÖM¯ý6Ë´Õ†OÕ‹M4ÃŽ2½´,Ša‚ˆ´µè_ü„ hWõÿûÿþÙþûßIŽÓ‹.Ò¦ ŽQ®/ÓOcö=¬ZpÐal ЈV„Dx•'DÇòu9{[ÿêÕÿ^í;¿á­A¶Õa§eša4a ïá Â !îM‰b*N'eÐ~ý Ü¾·í«}Ò} Â Š`ÛŠX"8§ 0šv¨D44"­ ˆí‰Œ•^Ìfbü/×Ãïúm„¡ Û Ø`ºµ†ëh'eq;Ä&vxªyd+²ÜtÿÿÿÙ ;õ˜×lä˜MŠbãV'‡°ƒBÑËÄDGôìïW6„„dg™$d|À˲8§@d!†s_LՌʈѦӤvŒ‡×ïíû¥³Ü7ûÖÒ†á;SEÚ]qÊ´KSS>Ê„—î@ñ[•€"Žinr(äǪƒTïÈ^|SC ›‚"{ß„ÿcëº}YÿúÈãb¹bE`B"Ciué¨âD³0™èÁš\DDDDDtù§î‘ØEÓ?š¼‹L&ªƒ  $IRI0’‚§i]¶î:¦‰Ðˆ‹•<Ú=œë²%yVÓð ; öúa¥¥;Èñ„4È H`‚‹—mÛN{¤ÞŸáñ+¥kÓ†iÂi„Ók!êišvDk°¶Ü­ö†‡É.C"Æl’q ðˆAfÅ¡†IÖîç@ŸÿØ}p¢¡$¤„X+ûM3<Üšd†íÑ{FõÓ»¥’Ìò#£`xsD|Èà†°È’`#Œ‹q‘Ѭ3ú•VEcŒ†ÈÌ'œÊAš°ï§ œA 2òÉݸi¦þ˜¥øþšÁaoLbÌ胎ÂdÖí™ äÎ3n#»Tœ·AZiÛñ"á°¾q°Àˆˆ‹öi#fC¦aƒzb6¡S¾¿9”j ­ç;!Ý«víµ·¶úïí×wëÿÄ4ß‹DÝ6A· µ`Ú†÷Åß­z{ýA ¯aõá'ôõ†š__öƒ Û úm6÷´›÷Òwþë¯û}¯ÿ`’¶“Nõ»¾émp×µÿØ2¯þ‹ïü¯Òa¥ðÌ–g¤«÷EÀ{¢Ý¾Â÷pÚîïÿ¯VÕïûô?ú#{´í={íõ¤þþÑ]\`ÂPF†3ãR4G#dH:ôÜ-ªiµ´¯÷íuúàßõÿÿÚÛtINa;ƒuáû÷ß±_ÿþ¹äÿý5M5M†já÷WiÄ{Ú¡#FlÍ‘›!¤HeòXËŠ„0˜ âÒ¾a ÝÓ.t]²µTßýºXÿöÿ6·­zMj™~&ðßÿû”¥ôµñºÓû š¦ëi1pÖ:‹B>¸’U<2DhYÉ8žèœ9+µ»®øiÝÞƒg¿ÿ­WÝû_¯}æßÚÛa-7á»BЈ_ÿKÛüÇîfµ¾E)馜4ãd­¦JˆÛJé‘CÚi !H5Ù,Ð4Ý Á<žeç¬zS‡Ý%ÿÝÛßœÇÛþòéŠNØÓcZ š–«µókôîõ»»Xa;8¯ö–-¡!þŽ2ÈœlÈf ƒÞ·A"ï5Á îÿþÚí=?Áÿ¬={./½¿ÿi÷zz±º­0™C¦B#÷ß^îÕ6ôâ»cwq=‘Â(ÄÂzdãSd`šh44Á–*¾ž^iº uÓXûõúZìÜTzZ_¬…»#s—Òw§Åw°˜]4"2µûûíU‹Mb‚xA¦Ó#¸h4"""šÞ¡Úßë6Zo¯­.Çÿ×WW_ßoê]aàýš¦ÓA‹iÛvF]+ ¦„DDFí]¤ƒb‚wÝím>Á"4A~ƒh“ºzÃ=€JÿãþðïõÌÂ{u¿õ†ÿ íÚ]-´ šØˆa‹£N.†õí i„Óˆ‰6[Í1"‰<·§všy|éêþÿí8û…øÖ¿¼=Á±Ýˆˆˆˆ•Ä_™×¸e˜H±nR4ÓþŸwéþ¿¼:’ý‚L?ÿDóýkꯘKÙÓp›ÖgÑn.ÎÒå">»²œ¤!'×ð׿×ë­ôm¥ÿëUõkÞùïÓ½³Õ÷ì0ºd\É)šIÿÄB"¸wÿñõ¯õ§§Ôì-¯þ¯·ÿì&Ÿ á…Ö©Øó\ï§B™üöq?¢È+¿äõ«ßÿßìTÄ*!ÿëÿnéÅÃ]4Øâé­LŽš {·Š ÂapÄü)nddlÕÅ<æ?ìò#ËkþÚ_°úÇ5'ÒûÕ5N‚éØMØ­4…N"b:d[×7Øw5Æ#GÛ¶¥Ø¢¸¤OÚ•¯í°„ߺç—î‚þÚ\Ï´þÕ5NÂi­&ƒM‰Ý²v:iÅ7#Z¦VÑ>m“úxL¼ûTh;íSðaÖp»ü“ÈI»ÿ ±oïý­Õs÷¦¨;T˜ð×=4ÕˆˆŠ^¤š*ãñ¹S¤EvöEÃwðw8ºi¦6DgfröèÏì…ùöA­]7va}=Å~é~Ãd?ŽÔ ï¦C'ˆDÞ¢#B“OšFà™òNáæŒ‡~öÚ[àôß»mð÷}M3µ¡öïÒ•9Hq„©©Ð# ^WôÿÛÏ×ÝðÞÚŠ¨B""é˜f„š§¦Níá;½ô›põ×û×#úÜ‹úoÓ¾8@ìÌ!›M‡`Ž8Mo_ýþ÷òN¨ˆ,špÖÔ![¶Âw¾¡…mÛi[¬þ/ÿÿúîü?°Ãí î/ä!Æ<¤ÓDÇw{¶m¨wû¿«í?þ¢!„(ÞÄ£bª›™õõ‡ÞöÌbû[ëÿûé.öÁ¼\4ÿælÛ4-B ¹¢ÝµAý{m>ýx.Ǧöú¦v¦¸¤ãKé7U×¥þ¯|1ÿ¿ö¯ûÊøþ@‘s3d"Ó´Â,pÕ2<¶;[¶ðŸõ{î>“àï¤ïL0„wk¯w¼RÿÖ¸>E××ê-ÿX|Ú·5'|©Þ`ÉNðƒ#’föôsGÃoW^í$ßVïïîÓoõµ.ã¤&Bsî«¿¯ÿjÃI²-ëýû‘oÿÍï~Òoñœ3èÃ3,û=3 R¦Ìík¤´Ö°ønƒM4ïýxÿõÿ/–Јh5´Á ƒ°Â™¤ÎÌëÛÛãõ‡ƒkÿÿÿýØëöu2ùÓ7i„Û}8†DPEL!Æ‹‡ûa²å&=Úk»iWÿï_Hqv(>eW×ý-Ãt?܃àëÿ×ûýß±õ—º?i„4­»ò1ØP‰ÃbÖOé§ è þ*÷ãÕuúú·êZßÿCÝÿø>ô¾ÿöm®©ê»Bgü2NûE»i­ßÐ<¼á¶_Ñ;´ý¾>ÚOõÃù†P'÷ö—þá!µÎË÷½·ÿ’çìçÚv©±§_i„T}Ü=»µûÓÖÖ÷Oì&»_ß÷`ï–ž!ÿþǘý³žÅo¦×ûæÕûg5W1ÚmاÚi°Ðpk°¨v„GîÛ´¶ê?ïÛÖ½~+y>ŸÿPÃ×Ñ»ÿ󋆃ÃÈ_wñ$­}+>»~‰‹´ã³·V´Å¡Τ†äÜéñûUï]èmýû4¿Kÿÿ({¶«÷þ–©¦ÇŠ»ùEœ³¢ïl-¥»îÓ¸»B"""v H Î"HY ‘DUC™)FóÀAØ<3°CÿþŠZßÕ/_Âþ‚Ûÿ»w®ÏY…ÿê» 7ïu;HðƒM4Ó4ÇÓ ¦ Ðâ0˜L† фѲƒ'FòS™‚#‘°rDfghÀˆ„yp ЈÞCL‘„ËçKþ·@¿¥¶‹ÿð‚þŸWýóf=Ž;@öMƒNB'rºµUäŠÌ:gÌóNôÐh>h´Ö ÁÂhÈiÐ͇L¸½²{h!$äO¡ 0…¢VT ®C¨À$A‘Í?~Œ×¢ïÿÅ"ã×ý}kÿö’îìZ"ÌJpÓ»†ÐŽŸyâ8i’0˜NÐkh¸zoˆa4"4vªº#ÊÕ°¶Ã"ãa;nÈ—dG U-„ÐiÃ";üL'“~£¤“¿ùÑŸÿêÿ÷µ¸6 a…ua4ÉBPÐa 569ØOÊVBg©F ò­4Ð`ˆ€l'Û²1Û¾©qÄDH,ƒôì'pÒ¶í°ƒM°šÓo7è6anvšè4ÁS-ÿ®Ók_¯Š_ÿÿvƒU´Â b¢£ ‹B!ÄDQ§ÕH¬©š0š`¦š!Úé=‡'v°ƒî–I6¥q]=é;M6öÉgmè;ÓïÓ­·þÛ ¥}ªpwÿâ½S<êëöÕWÓàÜ-±i´Ó šIß;R¬dæP D&Рذ›~ ÂDá¢Q ôí>ïíûçbÒoçbyÆDFwi¶¿jö›}û÷ßñßjÿ÷¯ûí>û´BûÕoNÃM4i»N¸´?šã‘öh”¥dùˆBl ÓÓ Ù'h¸l·ÉÛ½á=áuí×_ëU÷ç÷r‰KO>4Ó —½Úÿ}þûÕþquÿ¿¾A®ë³ÓV4ÓM8}Úa6÷V ¦Ó'a‹ ¸ºh0špò(Fdˆì2æ4ùvÑ8h†\ÍuEæÒ ÓNß¶ý?ïÿÿ­ùIïên#rd}65_WßÓÜÚ¯{ôµÿ^÷ë6aSá…V^' ¦šw†-;‹pÉÚ„""1EnN"îϘ@ xƒM — .iªyy§iÿ×^—û÷_úõÿï¦IÄ„bÈ¥Ùš/KkîvLÿgÐ~Ÿ÷êÆºAîßÞ—ÎïñíÓO‚#б¸a»».d¢ò8™ìd툰? É[wD%ÓvmnÇÒoìwïOñ¯ïÿÿ唿õ3Ž<ÜäÂ÷MƒîŽ'úîŸúåRoýpoÿX>ÿ_~ŸÓ±‹O¦“aˆˆŒvšËC"ݵÓ´òÞ—Œ;Lè:ï¾ðÖö\_ }ÿú¿ÿÿÿe ­F2£4ÏÚj·{Ûj Û_·c¾5H?‹zÿþß­¤“žßk„—[ÿ—t^}¡‰6‡N¿}ÒpÕmŒ'ÿÿØ=ƒÒCù1Ád4G¸¯ÿ_ë}þ³«7´F3qî`™Ž™S1‚˜ÓO­ï_M¯¯ÚÅþÚO3ÛÖÓ„·ÿk”6¾£ˆZÿ´w5ï·ãzA0Ý~ÿÓëÞë~¸öÃØv²zú žÞúÿ_÷j¶~ÿBϲt]„ÌEݪ®ƒS]îÐIß´îï¿­ö)ú¯ÿß¾/óM·Ža¯òQ‘¾=þÉ^HDxŽÈåÓ×ñK“õû_ö?°ûއý¼6Å5õÁ?µ˜]]÷ÿÚ°ÂÓ®0±«}¤ì$^5ö ÿÝ÷ÿká¿»ðvÞ^ÿ ?Oÿ÷¥‘½¿ÒÚ§ôýPˆ‹×¿M¦ŠêH:zæå×öøßëÿ†äÈûz¿n»ùë[ f®Ä8«/¶–Ë„Œ;VîÒ]WW^î—¿B>È¿o÷`Ý÷ë”±¡ÕûéÚÉ^›¥ýÈúšþ•~¡ú ™²²Â§ Ýáÿòôÿ†ðãþh¯×ôíXaXa$ÓŒ ÐaÈâÔqVâ>Õn*ß¶Óý5ÿÿë°ÿûozºwï#Ó ë4·cwÛûX÷OäêCùìã¯â?Ó·ólpvš}~|±ëû£{æÑÉ…fkì'nšh>6 +®ß½ Ð0TÖ©^ã×ëŠþ>/ëßàÿí¸nÿúþy¿ýz~»ÿÉþýôDGùo°Ï°"—¿…;´@Ø+6~·Õÿæ6ÏOÛë|3“ &šl`ƒ°ƒPšM1M4DêŒÙüDD4 UjÿÿûuÿïÖi;‘_þáš§»Û÷W]÷Äßæ¤ík_Â>?þ¼q »Ñ”ýNí„Z$í­ëÃ~ºìÿÝö¿jšQla4ÚØÝ£}4A‚Ûׄg÷ûå^íÿýëã«öæiýïû÷îîÒÿõói0íתþ“þ¿ÕgpNâJ#¾ÉÌ'ÁŸ2P=> ·­õú>¼Ú³TÞ­™ø[I‘Ž¡…Ž;a4Âa2 &NЊxˆû‹Bž¯ß… ¿ÿß¾™&ÎkÚ¾ƒàÈí7zªÞ¿þ¼:þ·ôúßûz×ßyد§êIZ"^ðè„ù>k§·ýúo«g¥oá…l,{ÓA6ˆˆˆ¨Kõþ׺ӓ}ÚÝ—ß[Oc´Û­¦Úh1ÛÚýºw°zI®Ÿý÷¶´«Áê½Ö«û«îD£Êˆ¤tJ°ƒ]ø$Mòá¶pééÿÓÕ´ÿ[U» 1±»4`˜SR1ªè:ÿÁØ~Ù¹î㋸2õ6A°Å>Â#Â,ÄÛ¬*xP«i„AU_ œ}6–…+þ®•¥}¶zý<ì L ŒäÑÌÑœhH˜L&‹{µ¼'IÝÿþ´ÓX»ãcM8DqL&„è„Gwý¸îÛMˆM·v›ÛL„BÂÂØPMÓ §¡ 8xL¸‰µjǪ ØL á‘Æ˜S™ÚpжW¦“Á;M<[T“å» õõôß÷ûÿ äqŠÚhvÂt¥·+§ »¸;¶-Ý·:F‹iÄDDDFÂb¶šf!Ð0ƒ<ðÓt;âƒTI­¤ ì+Ðl¡ÃM8¯|NñšF=Õø‰O‹ï— ÞƒÓ_ûïÿÿv"!¦;L˜ÜDdWŽÓ×i ÂdܧÐ0„q0˜B"$FB"PÃBkXS:)sB"P4ƉÝ13šÃYˆZ3a<ºÉ.m‚ ÚÒ ²yîyÓ‡Ò{ûÿý×ÄXL!Øñ qÉR; ¢""""ЈˆˆB!œ(S™³4ff5´$bÄ$Ù šh9µwÞ©¹xÝôŸ~ïþÓ¿ÿâ;"›•±øI§t); ?a] h=ѺÐ=Šþï¶ÿ«ŠðÿØuÿ_þ˜×Ž÷TMÕè»m4ÓËvÏDÇm¾îðð×__OdqÛwê¿æè=Ò&D}&vJì+ îôØwß<ÕÙb¡;ºÝ[þþ¯\T?é‡ÿ­ª¯íâ:R|‹YدšÊ5»´¿u×Û÷ûy8ýÿ…Yc?槯ÿÇ­ vêE—ýÜÒ( DL˜a;þ4ïþÿ¥U^á¼-ÿþÅxoUͧé{ :NƒOÝ:MS'3;*ãI0ƒGÏh»rÌ5/ÿµ_ë÷÷ðoEÝ}Ñ`œêžÿSÿÅEWÞÓ º#È—FäìÐκ„ÒÉq.Ñ¢íï·MÍy ™ ئdŒò;ÎÅ]?mÛ¯÷ñï½ôŸþ¿…ºo…í{ÖÓ¦©”G"–wZ>f2{4E Ï8ÊŒ»M¶¨";W»kÍot›õ:ð&jq ʸ"ڰɈ¡„M<'°Ò×°ÿ÷ýþ¦ï¯ï_³õñ ŽÕ†’a9áˆëDAR œ0¹øó1f4Ð`Žá ÕCw«ÂtfÓ½uk»ï[wÕ“Œ” ‚I jpÕðI/¿_ÿ×ý×ú÷®²^Ø,OÔSm޶kàÏFØD^}=&µ­øPmÃi[þõê5·û}xò9¯Ö[µ äòYx’…I*L'~Ûÿÿ]+^Ó´ÕÒ»AÃN*)’°ET kð®Ìïý-ÖëkíÛV÷i¿Iï×ÚñTÕ‡ÿ¤g¢ÝÍt‚Óí$Ça(HB $•4Œ$’H$’I=ZÅ qi¦±Ak`ƒ 0„DA‚ Ž÷í&Ýûþ·÷Kßö‡^íƒì*¸¥ía¿òÛ aPt›TŸhUÇÚ¿­«uú„„Ñæ H£¤’PI$‚%i ÌÝ÷pÿmUWô;ûÿâ•zÈ™ÑÝânpoÿü{õW>üÞ’I9!ÆW5"ÉVlªBÓÿvÚíž6*Xèoaa Ìé‚QÎ{)Á kwK¡}_ÿýòOÞðÂo¡%ëé,î¯â¯á2:3f 0š †^K Ÿ6n'Ä „ËŠuÎÁ峄< Óá ÛKý; ì*l*iDDD0„RÄr26Í™öC÷þ+ÿÿ¯~ þúMmù/¿ü†¿âÐ3’ûW &gfgçÙæl‚ &ºÄdâ£flÌÄ#b8ÎF &Ñ!ÚH8¾Ðq»M5†( ج5‹¤W&ŠWh^ˆOz×ûä?ÿúõÿýVÿÓï_è®$\S0÷ÛlÁ¢c´„<&šiÅÃEÛdì›´XìUM; RARá-“ë£eà ÃZ +aC»&žï,vª’I$’Dò_xIýÿþ¾²Œvïÿíït«ò¾í$ÞƒÄ;µt¶ûvù®É=‘½86¡¸·Dí¤7¾ÕròÕRJ ˆaˆˆ°…6˜Ge:û&÷§F皪üuÒ ’I$’I$’P’I*JaRI$r ¿l‰bõÆ¿¢Ý÷«[·uøul;H¼îóH6Ó²{÷Ü2oÛݰöímîý*A‹vP2&Óø~õþºßÿ_zþû³u¶]1Ú¤©T“¡I7mZýÚ[œîÕ;Óïþí6/NôîÓӻ᭧ÅW}nÛ¤ÅòQ‡­¡ì~«ÿUþÏ~«×ßÝÁº±ÜtÆÛ†š !÷‹ûþûø·B¾þ·ˆoý®‡ cXâ¶yE%ïìŠ>|ŒõÛýµm;]°•Û˜íµUp’Ýâ…²ÊíŽØïÿÿþµ÷×ð¹,¡¯Çñ÷÷Y74÷þ¡w_9Èï¾kv»›®-c†ñ§a+X¬4-4I‡ÿhØOÿÿ_þ¼ŽÏü.ª ûýÿ—ùHŽ3Ç„_ì4»ÓÙ;A“w´haˆ4""75ÿ¯õßùðÿï~ÂÈš‰¿ó@›š#AWÛ¯ÿÄÈ®)3 É*\‡ ÐaÇMõ†åϸjì4"""!„"!¡îHïõÿÝÿ´N?¿øéº ¯Âö/úÿþd ÓNÌ‘y†ia4ŒÂ\N>JW«t8ŽÂ2¹§ ÿð×ÿôÿÿýõþ‹ïHžeçÕ¶×üêw¨|Ò$ N^¡=ˆ0ƒ ] IPvÔD®·©‰ÓKú¼wÿÒºKÿÿßïÿúÒzÏ߯ÙÚÑí;™8pA¦‡ÞÚÒwiëAþ{¤Ž¾ºóŽ©×ÔÇköQ7ÿíë´íö¾ë¥øúÿ°Á]~÷mÅÊ“$PFb “EÛäí»†Ûú»ÛÙí72#²Ìû}¿Òÿ¾Þé{ka4ïU×Óì÷wIªv›¯ž—ý6˜«NívŸÓ(ʼÎr i ÑoFÆ“h¼Óo׿ïÁöƒ†-„ÓÌ¡9Vší4Ñ*f™¼¨)8MmÖêҎ׶ÂŦ¬5¸iª}¶  ÓX†á;»´îí5ÓÚbÂh?÷%+%AÍ´› „ÏfË$ÌÙ&½R­ï¿ûá­/í¼ a;ÎõÉÒoo[J7¡Áš éÅT5l+AŠUƒ 2(ý6.؃ ªa6(&Å2,CA¥‘Gh4àá± Ði¸`¤W¦ÐöwR|×é¹ÄK‚á4É}¦ï/ûÖ¯·ýÿšîÁ°ˆé«)õOté*†išfãÌ&œ4Ê2'‘1ݶ‹·e¸ ÂÅ1Xi¤íŠ !fÊlíÃUj¦t ˆ°œ:m6’¹£±hC0‡ÎÎÐf™ïÌM\[nLváØ°ƒZÚ—úþëýÓÉ oý¼8ša„-wëäë?wyÁPh4û Ùy0U4mÞž".ÓL! B"æh4!§%ˆaƒC6ÅÑDqœ*m Ý“½ ƒo²ú†íin[úÿÿß3/ÿ1¾"#ö™²ƒ†ffžA£ 0ˆÎ]!U=´\ì0l;ºG[ XFwOºßa ZLÅ@„DDDDGÍM=[c(?ÞkÞîû{î»Õ>:º÷þÿî—ÿVúI“ʨ„oAª§tŒ8j_×ß§pwûůz ûûÒ ïJòvÐìáûËÏã_ü¼Mþ½‘ĺßý_ý»[ú "Þ‚„Ú¤FˆA%Aë  “áS¸:Wþúc®¿i zÞ]êšýÕÝ÷KuÕÿ´›î¢ý‚#¦Âõïÿæ5­þÒ†½Õä›`˜S^Ú¤µÔ] éxõŽýOÿûßI·w t輯þÿÿÿ½õÐŒW®ºÿëñÇî‹Ç¿¥v4¯ºI%¤’I$©$’IkÈçîúÿ÷nè]ôš§_}´¿þ·½eÕçÒ·^¿ôûÓ´ÒkÚö¿ûõ®õÿ/[ªÝzH$ÃÚ‰Cúo÷Õú¯÷û­q_ÿû‡ªõºÖôÚÝ îÓM&xC×Mþȹ×Ù¿CÿÿÿN’I#I%K ÌÊl²ηþ@ÚÿÞö’ó8[þý.ÚÞÞêßwà 1q¬àÐhGï×Ô/é{þî¯éè7ëÚú Cìîƒ2eyÇX…I=w¨Wýëãú»êþãû=H_ua&/C‘GÖíkäGþ&gÐûÿ´Ýõÿý˜ŸýºA°Ö´¯©Pgeó±`DÜ'~î¨_ÿá„ö¿_}»m6ì,8¦=庠ӈ`‡ÿ_ðÿ©1[þî¶éµ½·jbtJáÃàÚz¶Ÿþß_ÿáŸßk®ÿ}„ÐlvÐaJ4ÇB"?úþå¶Ýïþ·éßvš§¶7iÈPm„Ó º>û@ŽðÈÓ§ßÕ¿_¿ïO©ïÝ=]zb‚ ©8ƒF¤"â#ûÖù»ó ~¶Ò³Ë¶ÐjékÖâb¦Â´"#ôŸu× 3¥[«†¶µ÷ßwaJ-4ï}¬0Hqóúv¶GÛ0áö­˜pÓì0Ûl iºÝ¡Q ¹·Oçbj¼H$y¹Ú2¥i ¿íÝ5½}9ôÛ¸äQé„ì'í3ÀCN½ÕÖî8ØÙǶb·q…Âiyä^6DþNÎí„‘_ÈNaä‘™™š ˜ îC33< õ~ÓM½5NÐjÒtÂh0–¢4"6µñV“ ÝØDéÃAŸh´Ó4Bಇ½/2P3†h…¶P333Å’ ÍŽÌãf…§šÌ-„›Œ Âzh67 ÃKÜ4 §h0©Â¾‚@â !Á ˆÅ ”×» 4aˆˆˆª«á÷èh0š„Ñž¦††f(MB ˜AÈÜJΞÒw¡h˜íÂ5†É¿mЬD˜°Ða 0ç¸`‡¡eâi<´)#(Œ! Ù:ÍáÝ'±jÚI÷zjžžº]³ë½Û§úkõ¦~œ2VHg2ã‰!ì/]Ð ÞÓGe-÷˜yØ6]½ÿ¯¥õ÷«xïNín*ÿû§ª×õïþÅ ][ß Ï£„`BàÂ6c“„ Ö²8´­†ÝJÑÙÙ|?âDÑÈãTÃ5U^ûëµý6ÿ¯]ö»JÈâ?ÿÚï¸0ŽÁ£-e\–yn¤ ÓhmHAÃH6¯Úºwi&Û®ÈÞäoì‹n¤Œ‡fÊ3q輚wM¿¿‘Â;º¯ÚQ°~`],{_ÿýø¯þßoüNÓ‘ÝRnv%tKŒûAåq¬"hMÓM÷kÝõkõ»÷õ^ûA©ÖÓµ»°Ú»g?Øé[K© :úþõÿö¤‹ê]̕¶ÿÎþ[0H6ü¯ù˜™†œ„ŽàÂv½úõ×ÝÒïpûú©A™ÙÍé„ ¾Þ“Ømëÿyî+媵˜Cå×óåß×ý}ÿßêj2VÈ#L×Jœî¢RÎ4 ‡ ôÓmó#(Ê3a- 6»Õ·o÷ýýûrŸ~žnDQ3œŽÁ’u¦š¥m"ï^Ô7z¶Ÿ}ÿñþúŠÁúßKŠ»×÷]ÖÒþ­u×uºoc‘,ñ ~\‹˜TØg‚Uº/ú|ïïW»ûþÿ×þ-ùõÓ>&@ö a òÔ' Ú¤¥xÓêûØûæðö»m«:N¿è-ëÿ¿úï­zÿ×ÛýNÈŽ…’™„iÅûáÑpÃYé-ë’ˆ:kx[^õ­Cÿç‡ïýµa<Ì"èý¶‹‡GÓnA=Úšÿ¿æX×Ö¿¦šwd÷ºß¦ïktÂÿ}Wýгÿ}ö¿¤¸ww| gf¦ƒ< â-ŽÙ;„B Ý£ŒÛko|xM2áo´¾ºõR8øþ7ïè»i¡ UðþÐî×-ê:¶“ÿí=ÕwîF¿â“ ™ áU«ìãi†{µÌmŸî×V¾ëM5]]SÖé°—·H‰^·ªÍ¦H¬Ò%Gv‰¿M’‚YEó¦Ý§iuõÿvš§ïîý½‡å Çüúoý‹A=}?[½7o_þñµ¿ûÕÿíÁ9è=ˆloÇ &a¦šmZà í8`©»Aà 1LP'±õínvHð˜L œN žØ6•è»m;×첆©{]×tû÷_¥îºWþ›ÿíÿ²ò–þתO×ä_^½÷×ÿø`ˆi°MŠ÷jˆ[l^žƒ@ت !"€Ý:kŠ 0œ mpvò_•8ñ5TCvÓÓé=5ý=?Æ-_î»›ßGwHvñ º_ÿþ=„îÿ~?þ°|~ßÓÓþ¿á„" R »A„¡„Pé¡ »Û¨Z !aƒ(¸B#†¶¤jÎ ƒß1dâšF›0š»¢nô^0ÖõõvÞídǯòêþ¸ôñ_ôoýzêßÿë_û Ã壆ÿöþÿuüC6ô."#ˆ†e”Z¨©!ÌÄ'P˜Aöƒ°ƒPƒˆ´Nû ƒûï­zÿÞü!>'ÿþþºÝ_ò7`ûúýïÿZùëÈÿ@ýy¯ìúÛ÷ý[µÅ ;iˆ‰¹GZí>‘vШ”8k.)6ÉÙ,Ó»ÕéíwýKƒŸ®õ…ýò…Žÿ§ï%å÷úlÿ›ýéoÿÚ½¯ô!¿ò¾§táSõm+[·× _I¹8{ ƒ­é Ý駯ÿï_?èwí•û3NøÇ×ü7þ¬`ÿ}7íûæ¯ÿþ¾¿pûv«]¶°×»¸Õ<4-ÕÓ ¾Ú'šo­w}_¯ÿÿDv¾ý{ÒÿÓ_ýôÓÛÒÿ¶ÿ×ÿW×ÿÌùû0¬žÌ+8ŸÆÕ½Šê°°ÐˆÃ+jWµþ? wÕöõëøýþþÿaÕŸÿ1ë õ‘÷|G¿úyµ;ßÞ÷­¿ÿß¿¿ïÕÓ§V-»v)Ä0„v‚ˆ`˜Cxÿ—÷Kýý{–9‹5õ_ÿfký¨0´®¶›WúÓDñû¯ö¿¡ú ý´­û¿uì&Çh9ŠÈøÇL7DDb$ØÈþ¨ci~×ëÿõ¡õÿý{ ªÿw𰩝KÄßðŸ[…¯×eÓa{á¶Aý Õ;ºÝa‡w‹pÂØ"#戄D)šGj¤B¢(ˆFI3H'äíyc¹zëßûÿÌ/ýÏݯ±ÃN§Þ“i„#¿ëõêÝ~÷¦|b‚aQÍŠWØeÝ«ƒB,ؘL!hZ¸$u¡ 38 ÔíV ¦d X‘íIøWè7_oÿÿÿÚw÷Ã]³Žì&ÒwiÖÄ¡ü! ëú¥~à i|„íZ% à.4 !Äw ½®¶v#÷ZpÃEÇÐ.û¿ë¿ZÿÒ³ôoêli±„Â{T}Åm Âý~õIˆN¨:™Å,µh4 ì‰ Yr×xˆ™TÊÛ¾i=ÁðÂy?­/Ûõ×ÒºÕ[];^ÒMÚÞ‰EÄDuÿÒ[´ƒQ¦ÓL)‡8(B""9n ưÂÃÒ4A„á õýmÿ[{é÷ ,[ °'L Áa„÷ËÞõ_L! ‚j˜B"#’³³7wNïQ×ovÊDKçŒÝ}ßyë†Ã0ßµõµTÓ6؃Ú:ÓM0L* ,! ÷«¾IQ‹Â©ÙBUÎôÈË*ÇÿŸÍ°D^'aªeÇu„ímBw¬R Ša¤û#‹%P&æCAÕ44>E™ÒÁnîöHò3 ÞaêSÆ„™Î2ŒÏ8a=<Á’±M‘ÁSF’ ʘ36`¼ ÓNë‹b´â°˜µ ´Åt &0„GƒA¬)c„Š"tJ?%_,½Ù²lÄÛÒŸaN2ˆÑ›2@ÈñÂsÄPˆøA Á0ƒ ¦Aè„j¨·lXCDݲ ƒˆi§ÖèÖë 2Cº<.í5Mlöš ЈâMÊ/äV„tÕÈ¢ÍhÓÌõ é vmõ‹L&4Ó{JC‹âÍv7iCl›ÓA8|"íñ};¨wvš<é\Y;A¡dáˆ0„C ¢nÓÌ… ޾H‰ì~7Ÿ3<Ã"Ë0ANZë]ü¼{h»´ôÞ·—tLxNí]Ý0É=ÙUÂjO$⇪ÝäÇÓrÄ»ÉÛ žl$íU»bî°”DDµˆê™;:HA„ô\4ÓA«iÚû¾—êq ^õcïðdãAº ¢âáååðè»t »AÑ8 vÁ«M¦·Ã ¥ÚöéÚnHÉ‘ˆ [8*ØM¡‡A×…}º_÷„ÊVÿi?äeOÿÒäÆÿÕ¯ýöé*Q´øJžï×úókÿýl ÿÛ¾«î¿úÿªm¤újÚÓ.#Œn4 spBüD««µm=ݽ¯zË!­«þ¿îÞþ½éØ÷{i§iÝô “B4Ї¹õ~»kØ_ûÿý2úkÕÞÚÃK­µíS´“bŸ´í-ª‘<Â$3ñ¶ƒH&‡h4Lv–i—É¿Ü?N=¯ðÂå¾­:ÿõû(ï0›6ÛONÛ7]Æ›iXv˜Ü;CCDiÄ79¿ö˜MŽÛTÕSOÖÈûüh;MŠPáºLRiÚa 0ЈkbV-mÊžvUÅ8™¶gi a4ÓCDáËn]þ¿kûkÿ¿-òÍ-¯jÅem÷lÃM(㎠Ž{äL«BЋˆˆŒaâ¥i±  ­¤ši¦¨…PÖ/O}‘ŽéˆmD6)«TÕ,pA„&˜a û#qÈ ÌÙö`ȱÆà„“‹NÕ·oD‡ÓirpÝÒ|?øõº^Q«t¿8; ´!sq×Ím4‰ û=G9ìlS†™1ÁÃ8i ÑȈöŽŠ ¦÷ +ŠZ¥iƒöšÞÏ:hE’ˆ´Ð`š BaBÿ0ÌãÍ8i§pÓTÂ3¶.{ÃoÃnáá§ÛÃuí÷Tÿïø*ºÿNd÷Ä”W Á¢nã U`§Ú'T"""!½8ˆ†IÓNÏ B"HØ@–; Ci„"ňˆÐˆˆŽþ §eÆöNí íáäîÛuµºOõÓµþÿ¸_×´õ®T^'3uçXr½ œZ¤Ü¼p#}´DDÉjN"ÂIÁšâ4ž8ínÙspwpÚ..[fçÕÚi§ñï_Ü}ûÿ>Ý^–ǽÈPx?Ì“™>³(‰ †U$;–ï®vî׈„ÎÝ*Š‹QW‹†ÚwpÝ6õ¾ö?´?úù˜¿±_ ŸØþŸ´íýé|…#³VP4,&©¥œ4áBA6»÷@ï»æC¢>W«{~E5[ô×þ¾5{pÿýëß _ÿOõÕôša8u'eÝÇ|‹0A”";A£]6ôN/ Ž(k|;¾—Oô8BÎÔGc¢uEÁO÷ãý7ÿü=ó¢þ¹0ßë_¯výéëtÖù™Ÿ§ !œœ?vÏTáÜãÿñ÷ï³²$ÓÕðˆø¸&L«<â!„[‚ŒùÿýÿþþÃCûÚõÑy×rŽÿí{ðMÕ¡F›ë|íK.Â!9ém‡´^4Ÿ ;ôî××wÿÿåI.êªHè”Å™°‹>ÂÃÄ®¢;C´ÊKßÿü5¯í÷¢1û_ûõþé¿zi«¦›@Áúþv(ÂÞàÚ0åc®¼zo÷ÿü¡¯ÿöœÐº*©$ C39HDa $c} î_5ŒævZÉ#!²Q™+ ç™[y5h'ÿ¯þ;¯ƒ OÞ»úößÒ¦±wtêÉZÿÇ9Y¤m¯=½ÞÝñÕ°× ý×Iÿ Kßúô–&ÑÌͦå9AÝš4Eºk§-Ú w§Û«ÂØæf0™¨ŠÁ&¡ mÝý}þÿÿý÷}ÿißi¦´Å¡jÂîøA„i™µVƒOô»~;ûIþQ]ºïþSçšóѸÜmá4ÂCÏ4óm2]·ÐA“¸HÖêè6‚¾ÿÛÕð¥hÕ(!¤Mdw¦ínïÿÿÿûz_ÿ¶zµêÓbÓwÖ™(B4"Åoö››Íëÿ÷0³E°kðÕÿüé×ü&ƒ>àÍÁ4îáÝÚ-Ù¹4ÚNÑ¡îí#=Ý'J¶·Kõµÿ“ﺆš < z—É„?ïÿ__uy¿_×VN)0±lŠ=kh¢߮t\6Mè·~6/_ÿ@†ßìBÿûéo¿ûn SÛ»tÝÒm‡iÃi?½$Øýý}}uפ22è4‰Ï‡xH*ªIÇßõ×½ouÒN¡¤Ÿh0±  ÜTŠðÓ†M¨ãáºvšI¾îÿßäWHð忳 ûþÂý÷»¦ÁnîáÚz«m¶ÿö¿Üßë· 5ÇÿÿIÃJ);»»_h*üˆ?õÓXjçÃ_µÄ4Ó‘^ ·gA„ÒzÓ«x¤û ƒûÿÑz‚wKý{lö§Ýa4÷©­ÓûUuÓþëcúZô¼‚ Ø`‘;øj¤cÓ´ Ý0^ÁÓ»»¾Óÿ‹þýº 4ÿÿ¡SÓÛæ>Ým´˜¦Fö©„(Ôˆ°ƒ7ÿ¯ýÿæ×ç»îÈý¦,•‹`ÓÅŒ29¬DD_ûÓ¾Ý"ÿ/¾»}b­Z¸a¿MuxÝ;¯õÇ Ô·,ßûÿýl&šjÆÓ0„0C˜T#ÿý½°Ó»`ا0á—¶¬¼-hÖ“ûÕ{íµµyµ¥ê 1ÿªïþꩆda…|‰ÇÿûµµŒ' ÁÆš#îó·ö­‚WwÜSaßc Ph3ˆÖ¯ý}iëñÿ ÷Æýïûÿó+‰ØÖvÔˆŽÅ×¶}™Ž]>Û>­³4 ÅEQšÄ0BÖ­›µnáªÃmŠ»PÖ­4Ða B"7ü†¿uo½0µ„ºúÏ ù ©û†ÿþÄ.iªoEZ:i'Ÿ‚)ÈOw OÖ©¡e²Û…v8áÝbB+´@“A„ ¦ã]ÖŸÿi'ÇçÄ_þX‘ÃAó@—õõûÿ©ª3É>‘pØM¤†š±H6*9íˆâí‚+Ï)ýþŸÞñ¿'Áx^å»þ­ÑyýšÂ.ïkÿy3aÅuÎÜÊq™ä—;Âm¬$žŸ•g (&gÐ! ЊiÿézµkÚDïôßÕÚ¥þ—épï¾Õ³þk—ÜìCè—#HÛLá á˜3Œ»z½…Mþ""ÀÂ,…‹+­¼úíþ¿¹÷ÿA}mû÷Ö¿_ï¾iü0Ÿí.vj3@‹›0ƒBëMÝ6ìo«ãÿˆ“{;ï_“Íç?ÛS:ÒýnëûÜÏý³÷Úëêšu¾š¦˜IŠ­ò”×"Lá›0ƒDÇ­¦›¾‹ëw´ïµ»F×÷“rR#.×;(d :‹ ÒnUea„ô”óéû ÚÛW·¯ÿi• K ð–½­Ú§¦f¨Úµr¹A)SkzkrÇioÜÙ’víUÛMVÞ?iÇú˜ ›ê·ê>s*âù¶š±N©­œ0˜a=ƒ‚Õ óÕ®ši¦šªi±QÅ„ÕbÐk"i¦2c+—2>J£ˆìÖ05È›$ö³îÒÞÎ5m¦Ÿúiê¾®91×ñì$9÷"Û។¨g´ôAõh1Wd¸(Ž=ŠQbØab˜wj·p¼0šdpßyxaCð!¤D1‘¦fhffffÉ`ˆ ‰¦‡ôïiÓÖío½;µi~-û×Ü!ü®¶É¢“{N)œxÈÞCˆþŸ÷’œ&™ÇfyǦíôûá‘uMu²7NsaL3èF銫xL-ª#cDCd‡ˆöfx  ƒjj?ûM‰‡Ë¿MoÒV?Wk‹ðÈâúþº.ú”¡ÐeãÝHlÌÆˆGvqœÏ@ƒ.©ÝÔìvKùñš F†úiÿXm'ßÙ5F“"f'¬0†ˆfЈˆŽ‚—âÑq[N|¢âîÂnPí‹6“»´þy·ö ÿ—+¥ûÿ÷oüì2tÚӿ馧ì Õ9c¿ ­#zF‰"MY(FÙóµ=a ì#ŽÒ ¾×´ï½‹ø‹B"˜¦ƒ;"\±É» Ûn‹Æ¢“nþ!éë§Ýþ¢ŒÐ_úþï_ý7‘¦šoÿ‰M36=3ïA† ñ±,| ùQ´SƆmÝ ÉÞÉ} q´ kÛûiZƒk{Öãÿ~¿7JÝ×v©úoªwýýÓ_iüdõ÷¡Ý'ÛK½ºO³Ò¯ýLÿól< Ô(&ˆTŠðòòþÉ»‚}¥5 ¶a„DÏ[`ƒÒTô°íêJ’I ’ $‚Imßÿƒü+å–>ë§®…v÷µ÷×ý†á ƒõûkñ]zöØT~i•T»ÓEdõ{4ýÚ®ï_í=]‹«é¢á¿[¢ÝéjÛû»ÓÞÖ½>ô‚Vÿöô…oþýúpu¾¾=k»ªëþ—ÿÇ®é')wõuñ Ⱥ#ç³fu{NÃ.H¼i{Jÿí5Ãö³Õ7íSÐëÿ·¯Ç¯ÿ½%I$’t’­4$Ü—ï츼l=ÿò+×þõþÛwZß}YÆ®šÜj­ÒÅÕÿÿÿï®ùïº°ßø?ÙPÊîÎÑ;[?ÿèzwÝép‰Çþ˪ïøvqè<ÂöÁP6˜¤VЈë“çDk2+š3‡i¡…¢pÁö_'tŸ~ÿÓ‹è~þÛä_þÛ~˜.ºå^½1_«þ·[ßûÞêVb[³P™S¼ëÿëûiöÝz þøÝl}ñÃÜ-ìPZa'ÌèG5ÅäϳÍBf„|“`¶ÐlŸÃïúÖ«×O`°ýðÞÃÿßãüˆ¼$õÖ¿ýÖ»oæ?VÓs¯•Qªe]ePð†çaáôׯý­aãõþ§Ýh8þ¦'|i¦Öá‚$!• BÌöO'„ ‹±Ãm¬ý$;v¼^·û#‰ÿ|³×ü>~­¿–ýô»·ë÷·ûÌqÚa(ÃW]wM„®®;º¯~t÷·³Òú²(í^‚Õý0˜ aR´HÄDM4„tk»^x%òí²xÐA¶Nÿ£k¤¿õ“0~Þ«BEb:Þž¿ÿný÷T½uýoóÉÎAŠo×÷]Y;]Ãþø¢æßõ0¿ìýÙþþ«ôý4âýv‚i¾"-Š œ5º-í: Ý÷§¿üßúÿÿ³Ÿç½ZÿÿþïÌ«é'wdsŒ0˜o»0˜B"=ìÏðéüìx¤ÉÛÝõi6 ­„íuÜ-öši¶þÁ4á1ÒÓîêkúu}×»o!ý~¿úÒìóÖÕ~÷5'ý·ßÖ׿­-ÝŒ4ÂŪ®úŠîJ%òs4½NGˆ  á›DLN*ÖÁX ƒcŠû ñiçRö„CUØ¿ÿº·õï—•Í~¿¶««ögü0X¨µNí-¾Ý;ÚpË´Ø{ãaÿ\! DG^®¹»54ë9œ#ù²'ÔÌÉPa3y£#ÁHu˜e @é§„ ˜jìTSP馽½ÙÓ@ÁÂe.*Œ¯àÿÚ¯_úé(¥EÇÿ÷÷ÖÛ „DJ wƒA§¬}&“»V­÷7xˆ™á;#ŠP5(d`è¦ØA”ÍÁ;MBg‰40›„BÓCA ¶š—wm†ÖÔð˜&ƒ ÓBìÓ´"8‹ï™™Ùïý¯_]évqªMÿÿgŸéüAU„Ó'£öÒi†ˆ`…¦ˆa†„E?N‚¸ ÓÁ…XA禾.]¶íeÃ~xÃ9!Ú.»NõO·¾N„ì!-ÿWÛÿÿþ—íÇßÿ´Øa'J;MŽ !™ÇEEá†DcÎÉÕtN)é£E‚ ¸aKÆ„GÊMÂÅÃÉ[WpòïAÛ ¨v ^: Ý;¿¶àôøˆˆé.õá‡þ¿ûþýûÒÝùÆT¤D›XئFôÓat""8ˆ°…2A’£¨2èƒh˜‡†ƒ ¶€Ò¼»qo:»´ïnô+v°Ðt¾ý}õ]ÚÓKO|wÿ<õÕÿͯ¾ôÕ4ø¾ši¡¨!HFR3—“í+UáìzoþžIÛ®ï[Öð—ý¬}º}¿ïÁ?HNÍ3±óÌ‚ïþBKꋎ÷¿uö«¹ž¶ƒ ÷Øh0„DDs½#ºW¦ÓÝ9ÁUk½'ö´›hÿïÅÔw°¸ÃÿÒŠ}qLd|MXDtôF<ê¿ü?õÿ§é¬0©°eÎÐÐŽIô™3I½âïäDŸoÈ0;}þö›õÿZý‡×èwïË×1\›„v…¦ø‚OìÂô¿}mÖímŽ„G®›»Y,EÛ™æÞã½×ü+¿ÿû~½9 ì±Álÿ&çá.ëðF–ê­tgÌ=¬ì^5+Ñn±ýý­õæv’a;¤Ó¡„¡zZÿr7›àÓ=$úmêÛaël¿Y˜poÿù “ìW÷„F;þ‡ ÿÜ!…oþÎó.Ew‚n×íjO’¬¤ˆùé2jÒqý8«#Ï­é±W±IÓaUîvS˜g¼¢$õL6÷îþoít:'ˆ?Ö¿,OìãwÚÑ}ÿÁ¾íûmw¿ï¡ëŽ8ä ¨)øÙa L&úþ)7c»¸ðÕ3ŽLˆªkr4iåÌ¢>ÌPG àÓµ[¤¿Ð]¯þþêô{æ×ÿÿúé/­áþ¿Å_þjms?ÖÉÆh„†ša žÄ¨rÝþïƒX":iØ·Âa dŒì ëyã0ƒ¾Âí;¤h ½/¯ýý­oæ4Ónõ·×íÓ¯óód‹[_[¶ÏYDôÒnþÎ>Õ=0hí_í9 /Ó Ðv4!aè6[\DE©&‰d i÷£[­ÂnÒúMî´sjÄ}Ç¿êšp×NJ6Òì&aœi¤š!ɰ©…Ó´í‹‹ }õkCûh1A;ÛOÚUÄ¥ šó‘à Ȫ²á† Ù;Öié¿ÿ&ƹÚQ«ýn ¤ÛJkÿÒôÕ]ÿ¿«Kí‘ââ¶PˆU¯c¼' 0a&!ÃM‘]„ à Dñì0¡Š`Èç °¢î/ -NÒkÚy¶OOô]´únlãßÿøA¤5™þï¿þÚM»·>;Ñ|ñþÿ'æ#hLàÚ ‘G´Ó­µÕ±LŽa0ƒ Ã'ˆ0Dƒ«b ÅXˆ0MÃ'œlÏ4ÍÎŽñ”aØ@ÏÇ$NÝ„ïÑvæOAºoÿnë¿ù64Õt±Ä}Õê«ñ}}vET _ÿý'ƒNˆLЈ°„A–‘ ß ˆˆˆˆˆ°ÃMR/â-ô &t<†FŒó( „.Q!Úa=âöôßïÿþþ?ÿ ¢Ç¸}ÉZ5¯þï»ÿÿ¦Á×þÿ_ˆˆ‰è8ƒFƒCLã0;~% ðƒA¦M°Âѹ¶ïÉCÚý{/ÿý0w¢N¯ÿ+¬#æR¢§îø™ädŠpÉVl¿ê•ÿöÿðl¬õïÿ«j£t8éÅí‡h6š¢c¿ ¢ñ²|Ü:îØðƒn×ÿþ‡û··ð‡ÿÎÒäÛíéü–½4“A„ ¤i§ÿÿã¶ÿø4ÿ}¿ alßñL…Ú\4Èíôí:7>6`‹©vëi½­½­ü|ÇßÝcÿ¨7»ûuä ‚d©’ý¬Mä`ϵ:À­ËŠ&; öÿÿ}}¿ºnr%0÷·“ î6:a‚ û³™]„ÿî­ëmˆ×·ÿ^ÑÿhWô5ín÷ú§ÝªáôŸ'¡ä囂 58A`ÓºK }‰âº÷ÿíÿù¾Ó¸zÚ¦>Eó412 ÿÿßáƒV”À«úî%XUþ‡þÿê‰=õëa„—ßÿ]5 š² ðƒÂ =ض¹¶õÓaàŸÒs÷«ém饰íØAŽño4L‘Ùñ§÷_ÿãuýýO?ÿÿ›Zv¢žÚÙêÕŠƒÃ‡ [ë®jXOsì&n0H;DáÅÍÐÐvIá¥w]¯ÿoý\ç¾Ú¦ØM¢9vf€¨g`b”‘‘©‘FF¸{ÿÿ“ƒ$ɹ´} ×Oõÿÿ»™Ú¯§|SaPvÑÒ÷_õ(&h­îáÚûÉÛWö·í¡__½xv±_~Å+!‚qû0áÚü„}ÿCЧ¿¯Ûÿf‰þÏÐac ¦Ÿ v0˜L0‡õ}<ÁA¦Á¢c¼m·l¸†ßWO[þµ®6G¯íX®Úú‡§¡Ã¾Ÿ¯ïÎáþ¹z½5^Û[MŠ«L' åÅM ¦œ½Bm§¢íµ@÷M+¾ {O·Úî׿ÓG_[M4 Á¡|E¡#<Î38i\;3§Ër½õÿµÛ½ÝýûµâíS64B! L&7jʳ¡ ½ŠM~`Ψ–çKAæÌœó …A0©ØKøí4Õ>?ï~?þ#ˆˆˆ‰’Äš¦Zgb鮇ÉÑT² ™ff`Ìƃ) ¯ wŸ›aœa7sÓfÝ¥Å["¾)aè0„DEãc„Bà†ôNˆèá‚u¢bÃËÆm%t÷ߎ÷„Púÿ×ûÿ¿¾Ôè(DN.ÍC²†f„AL‘œ3Âj¤w‹Q+%dìC$+,¨FÌ‹ˆZpÛ4 û¼$Å Óa„ÝSa…cŠÂ0AªÃ>¡ˆæŒ Öh²1ØA¢P-Bh[&ê-:t´ÿqü¡ÿù8–þÿëOÿ•ÃÏåEm5;¬&šÁOÆ‚ÃL Î 4΃Ì2C$²ÁuAœ.Õ°¤PŒ &` ÓTݧp˜E»Â¦ S#‹JÅ[IÜS4&°ÒˆÏaŒ6‚Òè¼nÓÚ‡;rw ¼ØýúÚ@¿ëÿúÿÛ3ÿs½4ÓN±ÇT^X4н0Ë a>‘!Ú¨0¦zÞƒšÚó[Þv_4 ªDÝ»£eË„´MÚ‡L&šl  ¶F“Aœ8‹(h!elÑXÓí»´‹ì¾Õ=m~¯þ¡ï…ýŸ¿¿½ìõ¯zšÉ¨‹­eÞ­“ß.Û¢íËÆÓPƒaâÒL¹‡p`’ úNÓM~‹Îí$Ûµ6нU=7¶ÌéžPÄD3DKq‚ ߥïUuW»WïÕëÙ8NÒÓ¯÷×þÿ[V{ú‚~Þd34É8§Œâùó÷¾<²YÒz§Kw§ ¸²ñÖÓ[K¿¶öþû†ši§Å?[«®¯ÇdZuU÷ü{Òïþ‘8ë«ß¿ûk¯möÇ Ó{ûáÉR ˆ ˆÞvr7 á¬i*Ú¥­µ¶Ó§ÞÛ×Ó[»_ßï½éu¿ÚCì0»«¤Õ—@ɸڰÃ_vî³ÿY@«÷"ÿ@½í?ï÷®¯öÂH6šM5ÃJÓ>D#¡µ´aÛÙE[ßÿµ_þ¯ö«ã[Cÿ¿û§ýêßû¿ñB ²mj­µÿøeSþ|dwþ“ oµ½X¿_°¶Ž!ØD& M ÂOiEÄ—G£gþb4ý§ÜÖÉuöÿœ§_§ßÿÿüÇ×ñþ?ÿëo¯u­¦¤â875{¥å‰¡´Ôí#hÿéÇÿEåû©bïK1ýÁ²;ªvš± a2(ðá„àÊR†RIN5 §™²¡œÜi›¿†·´‡IÕðíúMùÌ{ÚÔkÿo²8¯aíêMÍ óª¿ÿú³ÿûàô ‡öë·³°H¯¾vŒ)~Èp~ß½~ÿI¬Çeþßa…Õ†šØŠi¦¡d‡xa0CˆˆˆÚ ðB0îú×´ß÷ûHØÜ:Ýîþï}kÖÿ×ÑõTõV´#ù ½þ¿ý×ð¶ôNêøf¥„i­04™ß‚ ûwé6ûì¿ú5¹GG 4íb OaމÇuiÚ½÷ß[ýÿÛ®Úër0—þÿïü|÷ÿÂõÿïÝóªb¡>K&¯ÂD-&ár'2U#†‹‡OÚI¦ßw äÚqÚ}Ú´ªçÛ@Á4Ð5$oR®V[ïkxá¿ßqñþ½‘oÿûßýÿõëÝ¢Cÿ×V¿¤Á¿þÙé<+g¶Î;ÜSi̪É6D‘( pi뇷ãMXa_cbôlCŒ0‰ñŒ0„0B#Ó¨kw÷ƒÝ¯ßïþݽ¯_ÃÞô¿ÿßOúÝk½}ÿ÷}j·ØT «µcÿ|ì„Jà™C™‘ãÁ7l<Á6C3ªv»†<'aD-¦™Ã_#„ЋGìZ}Öàüý½ÿÛqÿmJõ÷¯ßõîÇþºÿ½;ª¬…-ëÚàìmkmä.QFÌÙ Ìg\Ü2pCj†Œ= ØaD9»´âïTöäB n Âh2ŠÐ0º‘“öÞ Ãô¾³–ê?å%×þoÿuÿÿoZÏßýÿj½¯¦šp߻颈E¦¾kˆ—å<›„ 'nÄÚa^ÎhÑëé“zWcw¸«t"""""YÞk¶öÛåBóß÷Kl7{u#1¿uó­ßg»§ývÏV_³ûil0]×â“ ¶éiúØ7Ú Éa e>J3©4`Ó8͘@Û"lŽ;0Ÿ oØ5{H1-0ž®öï&/ ßýWÿWöûí&þºl0«ö–ØV9~®Å&¿v@Ð6“تÁ„0Iõá¡}]ŒãÍþ鄤vAë¦~æÆü*úôî×n6"½v¬~f6F"n”ˆ¯hÎïLëü¤ƒÿÿ}¼3v­¥¹ݨot+JìTBL*ØTØðÆÅm Ó¸jÄôÂa…BBâ2úíƒCZ¡=4ƒÞíÚèwáÿ÷ßw¦?x惃 ·ümîQ(¶™6Neiš2q]WnžýØþúDZ®ÅP1º²G‹CB$á¾îâ“aSM4¶¶a4ÁJ„"#N"#èÏ^ï{8êÎ9víwéÚoÕî×ñþ»á²!@ýåˆo·Á9È>™)‚O|{ÌU Å¦CˆÚl;M4í’‹A¦ì4!…B !´-ögA Âp ˆ4 4 4"#N>¶›8ë÷wß§píýý_ûý·Õ2¡0mË¿Ý7ÝÂÖöŒ«3²Ö"ÃE¸pæ½d öÃz§BÇ í4""""#a5A¬0„Dè„DDG_wë±§ý'ûýêþíëëj"“ÿgM­†Æ¼YfòµÚn©;)%[›¹#äEâ@†ƒ%Dˆ8ˆ4,!¸'qQ0/µOÿõþ¯ë«ûÓúñ[†Áºó ®üÎ~ᱨ!eTa߸ÿM<‚»MlÏŠf0ƒ8xˆ„àÖÄ.Çþÿ¯ÿÝ7þß×ý.CNoõïVÏWÙOvEy™\œIgí8=_z©¤»vš |ÑDí„IÝdܼCea<\›–¼ÿÿ¾ ¿þ·ïS§Ú íÿ[ì,q¿M8`´u 9Øͯ¹±?ÒE½ :Ãn´ ð›„ÛY¯+'i¿&é•íÑ =‡þÃÿäG_¯Z†Çêî¿ÿî´“AÇjÇ]¾"=>ù[ÏÆ`‚œÊHÛ3!ëÞ¡ÔDâÕðÒ/ŸØ¯OXNÚ~šWäÞxD{)/bâ ¤ žÃúÃÿÜÃ?÷ýöã×j¼3ëyɋЦšj©¯Él §iÞd⦚küÐñUÛHnÆ›iá꿸mNêBÙI y¼êº’ƒE»4iíþ¡¿úÿ÷r%÷¯Ô„=ˆïCNE„Õ0„qirc6dƒR(a»ÏQa=´IܼÿA¾”tµñõDæGoò%ºe–ŠpÁC³ùÐ4·ÓJÓEŽå¿ ¿áÿþ½õÿÕû¥Ö ãkiù‡B?bfø©äñ„Âa-Ý—›dÝ˶t ´Ÿñõ¥ö?ŒûPÃÃ_ï’¸‹fÙÃ#o qã?&'I»g˜3úA(o°[¢Ý–õ¯{Ûš„Ú½þsuÿ¿ZÝ«öëÓ[b°˜iªÄE Òú ÓÒn/d­»ïÐm'v««ý½,©‰è½!)ÉC÷æeÑÍÈ3‚¡iœ2¾îíaÐMØE¿é”-ù‡î­­®ç]½w·û÷4Kéë¡®»´A½†ŠtQ ˆû\f}êÛ%^Z}ÿ§ïýþÐJ ÿ螀œÿì6qœhZÛ£;†¶¾¨mÚM¤^5Omßëi7µ«÷ |÷ö¿}÷í××ÿ[°žÚ]õA6+Ò]„‰ÜDZKƒ­ m‚ý ôÿý{×Ùq~ÿÒÑx½ßt³ÛýW·wO°’ ²wz¼5êî3ct¯Ò÷¾½ñº¼,­ …ʪ»ýõÕ÷ï÷ß§ý¥Zún¶ª„#?\5¿zÿõ¯ÿãÿÍßG½&þì÷õßgío{Ý‚ñöŸ ;Ž õioô×Ú²S¯‚ûÿr’u&—ÛU{íÿÿÿÞ—§jƬ4“Xj0š±W¡Ø4´·ëô¿ÿþˋ˃Óþ¾?í«g« ¶yëkµ·IÞšoNÿ÷{×|w]‡ïÞÁ¤ž¼>=$)%ûÿtÿ°Â§é䘥üA…ºBWx«ðßï[ÿþÿÿ³ºÒÿ£ßäë^ì+Eá…bSƒ_{׬òÛð·×Úëá‡ÿÿra›ŸiR ' ~E?IRI~û½8ÿö¶´Õ Ú•Ék½½ûñ_^Ÿÿúßý/O4Âè6ö ØÚB"? Âûû¼;èÏ{Ðþÿ¸>þ¹µü†HAë‘3ST¢îFÌ¡2|–ŸŸ,38&ÿÞ’I(I TI’¤ƒI4 !ÜRþT¿ÿÿï_ûöý,*Á·i‚vA¢v‹½ûn¿­‡ê‡ïVÝi›Ã]«ö©ì3| mš Ùr  ¨Z!\ŒpÏ uÔ¨ŒÙÃ\„Á 8!â62ãfƒ&#Œá™‘›0y€2: …MýÿoŽ/ë)C¦ !²H_àÿöP/ÿïÿêê¡]m°Ði„-„DGÿÞþî¶½vÜú·[l%ÝŽü…¶ÆöòpÃ'm q h6ØLah D:r í3öÐM^” a0š„iô†‹‡x×Öÿ_šb""#J“‰ÙÙdÿ¿þ ïÿõºZæ}¤¥ý{X0„Dþüÿÿéµ '"ÃI‘Õß¿ö¿Æùξ5®_ýnšºMòO¾ÿÿÛ]8»OŠb• aе°¡1n-}Ã+–s Jÿøö¿ýqîÿÿÛýawï¢ßªª¿ÿ ü‰é0¡RI$’HöÚþ«Ý¦Ÿ´$ãjŠJW±]¦„U8_ë~Bޱß~Èa?ÖûÝ-¾X«¿ì?ñÒ×ÔHÞŸê>õå¿<÷W^»ý6Öƒ%Fi+±†d+4qî3Miá2 fÍ4Ü>ïïwýÿïûÿÃÿÝ¿îþßÿÿO”Ëh{½î®bûKuƒoïÍæ¶f¨ û]ˆn©»Mæšv„D%‘Œ=Ä‘–y‚$ Ði5¢P÷×›=ö×Õÿïýïïü?ßßÿõüÇýýßÿ›Þû¿°W¿ÖÒ†† áZbívEtÖá–¸Où—3ˆA¦|ÍšFaD0›/­»m4 ·yúí$Þû[Xÿ÷_øý¿û¿ýÛÿÿú½ü+ª­§ÕÕ¥an(C¶DÆîvG»Žö6˜ Âl ÚÊ [ºDk6g\ž6d Êi¨AØ@â DQè¼tûT᪥ëÄ5øô/ÿÿÿÿUþÓîá¿¿·9êõ{†ÚÚïÍUØVÒ¾*Þ!±OÜi¦á„-ˆgŠˆ GõMh"i¦bÃA— 6NÙÇËê_x­¶—¿ÛÒëæaVŸ—ÿÿþ ßÿ‡ÿÿ¿ÿüZõU_žD8½Å1ÆÓš Þ¨0<4 ÁŒÔZl29"pÑ7l¼a Ó†‘xè;ôõkø-¯Wì’F”#0Ÿá…ëõûµéßÞÿöÛûæ?µ}öüv†$B¼q;Éi4ðA¡mmf´,'q &ˆÂ-È¿i“Æ‹ÆÐt ïøÓoWý—·AuÝuõ/Rw_ÐO_¶¿é÷æ?« XkÛ_4ß¿õbvšøäO„‚GiÙ¶pa&P¡.\&B"""-ƒDÈ´ž¸´Ÿaz¾ýëÿþ£þ-þ½¶ØÒ ézï÷ªÝjÿ]o6ì{éí1½[ûi‘סI|¬¬Ù‚š Èë!²xû?žÐh4Ó‹X´]Õ ÂVÈ=?{íoïÿ§ÿú_´¶ýHnýÊú‚ kŠÐn•…a¬l0š±Ã/&­w÷w†ƒ ^i›0A„!™OÙ9Úiú4ÓM6#—vO¬)<ÓKB?4Vש˜Ÿ‚(~“Çú÷ÿ¿õ»ç7vÏZi¦§õ×¾*6„Æ 'KÆL!i á„" ÐÂÓLó6A2>'A5<-6݃Þ퓲-Òß oí&YÔ!Pÿ‚¢n×Á ¬e¸_ÿ~ÿw­Ý(~Ó¿a‚ØM>Âi²+Å4MÔXLˆŒÆêÚv¨ašm¢Çɾ^=Ù7A“9cßop×·ýv6¤Ûò-[Ì: -˜ja¤”ªI%¡Û¡¯4ÿ¯ÿlϵ ³Ðv“{LlZ ý¦°ÂuM“Ä5¸¹*»è7AºÚv…Ò îïÕ×ÿ¿ášå}ÇÎÐÂR"~) $’T’HÆI$’I ’"ÚIM”W„ÃÈßá„xŠ àЈƒL!®×¤ìŸ0jžË“ÛáÕïÞŸë÷_÷áÕ®­i —#27œ0A§¿ãº¶¿}þ®º 6!#XCF°B"(!5ý‘|‚™ ˆlãí{oëjÐÓnõû»ÿý×ü;"+ÓO!¼ù‚da‚vš/¶µ}™«m³Öœ}„B{I4ÓtÕ¬DDH9B„ÂI¨ÒUïi—AkºèE¯úßJÿj©wßøj.î9!Ù¤g›< Âz}ô‰Ã­¸":ö’´¬'f ‹A Úi±IðˆÒ !ˆ’NÒ­tÈ®áÝê¼Gëî½ýýÿãÿÿïîçj~ÓNûOªÝé÷Ò5Øí¥a4,1i„"#­^û½WêMÊ"ÿäH"×Ö¿ëöÿÿ’ Í{ùÚ¼ã á4 U7i=ݪª×T¥Žš¦˜B"JP0BÓBÂ&Š´žK³ n?ºÿ_ÿëëÿëÿ Ò~åHˆI4Ðî†`Ý….Þõ¿Þ¾à×M0…“ˆˆö%˜¨<ô]¬0ƒÆÿûÿ.ïõ÷ýÿ[ÿûß›ˆcò3„еEÛa>Þ¿WõÖõ±\C"YM-†tàÓ­[é/éí~´U®¶¾Ÿÿúþ¹Çþa?PšþN4îí~·ÿk¬0X¿<Íø“b¬ävb("RA>B}ÑvØ^í†ëÿgÿ[ðŸ}úåíý{µ´­;/éÚFÞ%½ÇüÃûÊ>Ý’¶ì–4ÿïôûu}C©ÇRÇ×M‚â8.™2iž“;W¾Ã®›~½ëªÛk^é-…a„›¨‡­é^ªšl0A…œiår³ fÓLÛ¢qÐ{í;µú¿ÿÿïñT#MÝ]¡½ÿ0ôß%Æ®ºxúï´q¯v¿hS“±¨m(;´Âi±ðþ˜]‰fÌÜSÄБN¾ ÁºoMwÝ÷§ÓÿôË‹½vÔ½;ãI•Òùƒ¼ÏÒz}ºßÕ¯ªÛ§hÛvÊ‹ÉF qVé‡ ƒ£(M‹VkÍH f4ÂhŠ€ÈL×a2q¢ß½+iÓסþßÿdq~¿×¾Ãÿ·•\Úrpƒ»µµâV%ÈçTýg.¿í4ÂL'Ó¸q &j‚¤oh4Dæ""""vd1Ÿ‚ â'vD%¢à0‹pé骧š>¯Ë»_ýüþÐìo¤ï݆ٟÕ?CŠÙª3ö`Âó=0ößÿßÜD0U ¢Šš ˆˆ”B!«WM2“°­mpû§I÷wv´šú]'¿ÿù:¿ÿý¯gý¼BwOÿ„Pó6š}§nŸÞû§{|DDDDDk³g†•éÃÓtîÒ¾ÚM6˜Žãö\^¾¿éz^ÿ÷mŽîÕ;_ïκj†ºw>Z7]µÏö®cîõÓ´ûO iÚ­_w %cç?øõÿÿÿÿû«óóaSößÚso<Ó6aU»¹7m†°¥çoÕµzÿý¾?¼>ÿñññv¼,˯¿¾µ÷ÿùŽÿíb­<ë&ý …ο{»¤ ]WºØ-ìTvÃ}ÛþûÿÇñÔ;ÒpÿÿûÿÖŸçí®£uéU®ÿ²FkAÚw«iÿn‚LSµ¸°…±ÿ·ýòC•iy7>LÅ 7 º'i‡_ÿõÿ¶zÓÓOÛTíS×þK³F`Ïuƒ™‹îwmªß½=„ÖèD~¸oþ˜B$¸^„B`ÜcMƒß™¯Uõ{»Xì Ði§…]öƒ8/|ì$fÞmðƒMQoè0¡·wü{ÿ^ˉ‹MŽ¿÷¾‰ßtlƒ·¬í°AûºÚIá8º¦¬*cÒÚ !\ªodJ‹ÎøƒN-?{“Î÷ÿÿï­bÁoðýWè/´œõœë¼æé¦ÆŸvŒC°š¶ÚÚ„&?hv—;gìÌÉdO<ÓµôÙ!Ô±÷èëÇþ¿ß÷eü—ÞûüÑ/ækü&íißk 7X‡3¨»Ã%DX!`ƒ0†‹áBt¦¤!‚j±¿'ƒÐ}n®Ÿ¯ßïÿ¡ú×kªéØOöÂj¶¿Ø-ª¸av û  ÂC×&y™ «è±ß¯¢ñ†]ê ߦ·éÿÿþ½ëþ¯I§nÖ0¶šÖÄˆƒLlžÄE¥:øÙÍÇC$Ø&ƒ?Ô;¾ï_õWµcÕzýßÿÿÿ¯Ðì$¡4â´ÓŽ-þ ÔP‹B; TÓ\ Á8´\4‡éÝÚk_kIz½×ýÿï¶M:cõâ¿X´#A“ c»vÈLÚzMË»¿Þö6ãhðÿµÿ÷^¿s÷ÓL&Ó4P©„ød¦GžhH«÷sÌ0¬õ.ØeÚ­'ý¯ÿâìŽ/ü{­þ¾cû_÷bB"Á2ñB!SvÝØ] ­Çn¿Æ»´—ø¤îד­uý¯¯ü":ˆ´")5ÿï¿"uüœ_ME¾]Pn¯¯ÿþ¿ýZøˆ]õÿ×à¶Ûþ´ÝP7}î¿ý¶¨0šzIÛ^„®¢ÿý2÷ËË oÑ;îŸöïs«ßvˆ¿/‚8¥º5a{_J¿ñèb¿«¯m»'2šÙúí „âÛI¦˜A­¦qU,äŒá÷ßÿCó×úÕ¶ÿ»³Õ§K§¶‹ U Ò„yd*ŽÁŠj"ù* |D@ƒ.¿ÿö–¿÷ ´®á± Øk³à@Áb™'b"•Ê‘]D_#³¨0NÏ §‚ Ì3Ÿ DB·nµ uëþÝé§knì0¡VÚX¦„Fƒ@ÁY+Pˆ›K0dfB$S‘^`)€Ð\"NÙvJ=µ.ã™Dm™¡ÿýüú´a;‹Aû¨0¨0ƒˆ`„rolìvš ̧bù†lÉÛI‘ó†lf²(擈ˆžä#º>é¤B=èhºw nýëúúÙùlº Ük#t ˆˆd¦<ˆ°E´Û’“%¢!jp_p^ BC£¨@í¦ƒ{†šh„•»µNº¯Èº/÷2(Ge-FÐ'wy…í®Äw"ŽÚÆÉ².gP– —$Ò¢¨Š}r+àÒ“r+ØH”0á§ »†š„“}ßÿè_¹Ù †q3a0¹ŒÅ4Ó¼&¨=SN)6“aˆˆçe‚$Ñ„p0EˆÚ% —‹'¼g´“a·Á„4Õ²,:ypG§v’ †½ýµ»«ý†û¿~aÒöv! 0…„BOjB4Ñnî'v}4ø×z¥¼p˜aŸ‡!žÈ.fÃBgKƒá4|Ki[o²$‰»vŸïmS¿ï¤íûyźÿßÌ=ó|§þ9ÙfùSg£„÷5ÑoEÛlôÚM»>Ö4Ì„4ЊÑá[è2>¦‹¤èŽÚ´Â„Âj·jÓ¤k§z÷éÝöý}_\âý§õÝ­ýJÔu‰Æ<ó£ÈÍÌÙ¦š¢nÑn骷¶Óo»÷¿ZÌf¾­§¬2,цGíT{mZ…«wßIÛï·ýuú°oúQ¿L~ÝFë·ÆûPˆI‘ÌöM;6h0šqûg=ìqÿwkö»„[KVÃMnÓ{»§O¾úµÒßí[Ó÷® ¿õïÿÿMüe ¿5è74~è»h›‡ÔC»ºZZv?µˆk~˜xÅÊ“»[ïo¿m?8û¯×œÞ¯üÞ?ôaÿoý¯_¥±F}õ·U„D: Ô' ²æí½7Aö ¶ÓOWûl8oþ?ðxa'ÿãéŽÔ«vúi7û¤ÿ÷ÿƒ¯§}¯Îvÿkkü•N'{µrZÕ8m=>îõ½7ÁP{§ëýƒ`Éôšî~¾Þ6[‹½mºÍý0ó‹]†=Uº¿öíþ—õîé±ßn±×ß~Iþþßýï±ÙN >úNÓMÿwêտ ¶}þ ë†òÜoF[¤4ÌÑ/š®qþ¿¬(÷! ¯ýÓ~Ã÷a¿]&ñKÿ¿ðýWõ[_«xWÛ×ñúLŽ$ë÷Køâ †Ð'ÿï`Þžåp£¼":ÙÃAñÿ_Pþ¸x^Û¯¿Nú@’KT”TAÿþ­ºüoß4ÿÿs{µ¾×Þ¿ñPc÷_½\JÖû¯óÈ>dìËMq;,ޱ|ž4Γ ÓNú¯K]+Õ{ŠÿOÿoÅ}ô•R]ÿì±ÿýXû¨g/ö ¶ÞË  ý÷÷rï_î¿zy‹!Œ¬½_5"´Ì™°A¡dãMÚN:}{ít›¿¶á]±_þ¤o“¶Ò ÿÿô­¯ú¯B=uÁ×½%Œ±ÿ W[áæçÿÿ½?L”míeŸD|æš„ÓÐv™›Ô±Î;dâí&ÞõèUëíÈÓ‘qì}aò^ö4û`Þ…*I*T’Y¥X›õëÿ÷Ô§Iýþ¿Mßíßukk˜×TÂiÅ^þ¢Jrq”"*q ìŽi¢vÑž‰ÃdwMzïI ¾õÿÓá·uÁº Ü:×ÿãïïÙÙ¬ÈáýÖúI+ëí­ízþH°‡ßíŽôß¿öyg¸­nÓNÖXAöínëªÇ’“¡„„¤]¶0Ó¢ñî Õ8iѹBO®ÞÖ¿·[É[ñ¾?×þÿ{`ÿíùç÷öÿI’I$’H$’ ënšzÿÞß¿¿và °Ó¨Øm«Æ›"¾ Š&ÑÙI ¤ùã;àˆí “rOw®½Òz÷Pëwþ-í~»í‡§Eýúÿ_Kú÷X›ûþ›úÿõ¿öê×¥‚© UiŸ0½¸yþï½/TÝbš­ÌöÚ Óˆˆ¾æÌÌÎ"”0ƒtàÁ4-Ý ¢îݧÇv¼jþÆÇõ† õõâÛ™äæ¯V'-ÿÿé?ªÿ¯Ûu¾’júá&ÒAÛ¦†› i(AWJÙÿ½´ÛTîÒÂv¬SBCÄD¡Pˆù9=8¾KÈ‚¡„NlŽ(}¶žº®­ÇTÇaÿpáûu%ßþ™:«·±§°ÿoþÚ[÷ß×íõµÿtÒC«Ñ =´‚ =:Ü3ŽÿÒT”$*BÃŽ°ìц‹]‚ LAh»„Ñ8Óç›2yõ¼muì4¸?ö ‡ÿÁV•ûéÿæŸÿ·Wkô›ý%ÿlÞ¿î’x! tT-ФÚÄDYp¿UÕ;*U´"">‰Å´ÉÝù¯]7û´Ýù[úþ‚úaÃ}ŠÇcÛJ¿íû[¿TÿTÃ?mÖÒ…¸ì†šh‡öÚH7A2¸‹ƒBЈ‹[xD'ÚOvêÚŒán…ûlj >øi/}ûª~ø?ºèB%ß®ØoÝ÷õ¿õÓºUMÂú ŠAò,“ÐÓJ3Á€˜LaUÙ–² ŽÐÁ”Tðïi¦šT›gw'ôì¾ÉÞª÷Çuëûë Ê0{íúƒûá ÝýõOT Š²$5ÒTï‚4¸a0ªM>!¶k„ÛLð­u“¬B 4!¡âÙ4‡u;ýúÒþ]ÿ]®â!¿ÿð÷øƒoMYþëb´#^ÒP¨5°—ΡLöƒFìWˆ†„úe ‹DvFñ__ºÛߨxõÿ÷á¾ëÛóÓõÙÌ•Ïk¸]í…Õµ‡ÂŽDØÀ„F-4ЈˆŽD ÓfDã%>ÒKÿ÷_ö{ÿ÷ðû¯Ùë[VÕ4áûÓD z’ù‚¶ÏÄg´# !GUaÖá$’–¿ÿoêû¿ÖΛ›}Ò¢,ÆÅà ÃI°ï„!®¬hD£ !:8jñNêkæa)RK×Ã÷ÿíŸJê›CµjEvÅ1N¸ a2ÔûB#Ä©'ü©#Ìô;ð‰Çý$’I ÒJ’ $Œ^ÿ"í[@Úˆ7 &všwLq–…¨•ŒârÜ1BêNŽ‘B7nšvŸº þºý_Ò¾’_°›®àÓBB""öå”Ò*ƒZ•ÊØBÈ.æBVh2xâó8Í+軵ÿ÷ÿyËlöúíÕ‚Á—6¨DD~M˲¨Îô0D æó ´G¬£±¾Ñ|¼í(ÊÏ4ôîÕé„é7ý/ë›ÿ_»°’iÆ…iÃ55ɱtACa*Õ0† @ƒŽô½×;/A„Ó½´^;6ýûݪ­õÿoÕ4àûئ)µ¤Ó hDqæÅ0!NÒ ì±¨@š«¶ˆâÛ¤éëºÒ’Û%ˆ gÈ&©°í®®¯oÝû¯þõÝn»m» Ð4CMs:a× ªáO ‹ÿ AÚéÿ^ƒä‚4͘Aæ)ƒt‘8h·<Ýÿ½ûý?¸iýÛNñM‹DR&ä4­0ƒDÂtü}Ý ï®|V»!zö&ƒ4FÉ84]Ä ˆ4ѯÕp½¿WݯޟìŽÓbÐi²1Ý4"hDJéQŒ/ a+SÞŸô¿§EÃ#YßRMØ)©C"h¡öƒ4äÇsC°d¯¶žé6ô—ßý[âëÿ× ÚdÃøwnbš¶üÙÝíSm²¡«OO«×Ó»xÆÅ(Åz×®ëÿn¯ÓÃáßaPÿÉå:"XyøÚ!Yôq‚ ó6È}¦æ?N´ˆÇhœ6NØAþ¤Néãmƒ×þï»ôÓþ.‰Ü7îßkÕö¿Nòêýýh¯uv7ä߭ݧª„BL0DZŒ1é gÈœŒ&8hYñO‡ 4â¡6ÃPAÒ}Ðÿªyvúõú·ÿ½»ðœL¼|ü2:ùbZ^ÿ¥üT;lãÌfWZÉž™S›q¿½¬˜áÃLüšh5ô0ÁöÁ4,5&îlêö¯ÞžNþô“Ó´R±ÿÿþñýr,Qü„¦ßâÃûýîcí¿wx«Jò¹lM¿õ ÆŸ¿H;ši¢yè6©Ù+a¡ ¸Rí²vJú:·þ=cü'^Òô»Û^—ßþ ðܱ˧åëÿš¾Ã»ÿú×í7­¨îŠåBª¿ç™öaúÖíK¶Û׺'wvšuß}Ãÿ\¸Õ×ëëÿúøDŸ©ó_‘Gý…ö û’iè÷ÿóDfŸ>›?¶–»a$¶A Úé§{ï®vc!æ34o8ô ûϧ•‘† üîúÞÝ-ýÝÚýÆ›i¯é×ÿ!5®¿z×0.?¡î•ûí¹?þßßïòDØM6 ' .  ŽÂqiÖí Mgah–A åO}Z=”¬Ù‚hXCX´ÿt^33M®Þô½_}Ó¾÷Wûµ{ïë¿Èï_øéñºúDï¬ÓzF¥¨oIÿTÿ­õúôíAaÅ1ªTíS²8´ Д¤šúçqRá2A¡h0¿o¸a>á<7ú^5é» ñÛ×ÿÿ¯Bq×ÿøAUº{í_ä?þî“øôt•'ÿ¾ÌÖ¹…gšzv·{©»TÂaˆƒDLô…tÖ¯õsnBp´§>$L{Éå÷Þ­v!½tj_?ëÿ]r`Qw×á]+¿úø]ÿuO³˜ë_Ý,-®œR„ÖYƃØ[†`¨DSÒúÿÎ# Ìãæ|P:°ƒ’¶‹¶®Á麷uú×,¡öÏàÿÒh±æJ¿ç²‹ƒ!ÊéÚk~.)bÓ´A4h8¥T  ÐˆˆˆˆŒP㪊eNWªm¯¦ßõ~ÿÿØa÷£xwõ÷×° ÷OkBoO0gþìöÃ=óßg»÷Òí #ŽÐ@Ã'ÑnûMkÚö)ðMÿÇÒÿû"¿üBýnúûÌOv—iôƒc8½P>ôÉøã&qÌ’fߺœÏËÚº›Õ;¯öûÄE ÁXˆ†JB"""-m ^½Ãïúõ×þ7ÿ¯üõë6¿µµ¿Ö)Ã6“ÛKý0G;ʈâ´Í£™ôjIý¶¯½6·mÿcÓKÄDDE3±dM¢ÇÉšÊ#¢ë<BÿêOKÿê—ëùŸa&Òµ†¡Jjø`­car‡ú†ßTý;Lþ§÷ÞºZª×«wÿOâdªíZÂf–È•}Öúú_ÿuöoîÖÓ`¡±QQ\ð«ÚŒ]ZI»ÿ¤®íozݧÿµßëUÿ–rWDINûòM)ÀšhÎöéu“Ö¿ª_¯ºëj±§±³Bi¦„DDE ÂÒmÚý¦ãïþ?+ÿúÿ†õ¥Ë ¥ÑXgz Ä ¹Üð_ò“9fq­Óyƒ34 0‚E»ä߇קÚüÇ¿i§z}„­m5¦°³é„%0‡ÿßWÿý?_üñß~²t˜C½6Ýõ$iÚ!& ÕÐ}áðúÞÿë_÷˜W] Ây}Sb¢Pîï ! ,DGïý¯ôŸÿÏ}/Ðãÿª÷ÊᲆeÁ%»Lt'µ¨vß%±ök$Âw|ôШ½Ò}ý¿õ½Í¯ôµ°¬Zl#:; Âi¤zDDz_½«#i5Åí¯ý[»¿÷»õ”fJ¡¡JF„4ž®‘órJ·ªÎÓÄíÈ̼Q&ˆC†šm»Ð:/ÉÝëêÿ·í/µlü·a&GEq ­.Ÿßâ©´ëãÿ¥]jÝÿßï ÉZ»R)7Oã;(ë éÿ)l„ ¨,Á! è˜í†ÂEÛÝ÷­M½SµëãÇㆷ}1A‚Ú : {ÿ¥«ÚF׿ÿõfûýÙjÃZj v¯Kžë¥xD'Œ¯ò¶ˆœ4´\7º Ö§i®ÚVèû¯õËÛrc¦Ã|iÓA a1‰‘Kéÿÿý?ûtÝ:.L]þ›†ƒ»a¬ÃÔ0A¶šI ÞúÓÙ˜’Þ¤¹‚yÙVuÜ” ‚)Ù… $=mý÷Ý/Vñì~½»«þãaíi¦˜T""ìØ¤•ù…ýösöÒ¿JÚÕ0ˆè2.Wh0„E¡¤ûXÿ’§z“åå4‰Æ}˜Žœ'—asg•Dl²ÌüTØA„‚„ô=t]¶'IðtÚkûÿ¸¯÷^ .„7X‹´!q*̤~·öÈKÃnØat¡­Ãêa´„DA¯ãûûšdæ`aLÌÒ6v(v¦iþ‰ÛW§A»W<Ó §¦Â! :a 4N®íSíU¯¶ý½{kì/÷¶$ÿzˆŽš¾žÅÛucÂLB§aˆ‹]{5#–§TQ›/Ó‚ 4äB†râÛøú/.þSL'w£CW™Ú›˜ž‹ù}í+n?þ?ãà¾Ã‘ŸÿZP¿: nú2Nˆ[~µ„""53·,Ld¶ É;Ì&Π©“Šká7z»ØmSl'I·úx·ígNûsÎÔÃÐ~ØO7kKëÿôÁk­s¤«T>‚}v*¥í Ý$vÿЈa ˆ•Òø"œÈèä œ Lù#ƒë‹Ða4AÅô‰À{M"vÜ;׆ž›w÷Ø·ð¼ß~®Ç }jé^ú»éX/‚áµðýïZÿŸ½ìJ—îÖÄm;ˆµÔ ysþÙ+~¬$N%oXNî4Û¸oiÿëί­mÝvîÓî»iˆ»ßívÿß²~¿>E½ºüäÿêÿw ¸==Ú#[šòH‰8©Ä®4È=·¥ä6çÍ¥† ¾[©²§iìÀªÛ¦yVì"4+Žúÿ“„Õ‡¥ú¯cÿÚÃnÿ½ÿûÖNÊ=Çôlø?¿Û¹¢¾ö¤/µMŽüÈQÓvó/#Fž¨ŒçÂðˆ"ì&ž}ª|>ôÜ·ƒ¾EÛݨ­¯¡Úöߊ¯µ_oÖ·ÿ̓±þŸ÷÷Ç_øÿï} þêú»æ+3Vö ¾š\8°µ‹èCÙIš¢JgÆ´šaW;ŽÇcjÒýí×]Ãïb“»}{õcÓû÷ñáò€›u÷†®lõÜ?þLxm†@Ëÿÿû§ûú½û=^ØMÕŠ´U["¿ ud‘Ów; Έý”£Âg3ùçiܱݷp“Žhyïè{Þ²ÍçX†ë¾×ÞØiöaŸÒ¿Õ毸:ÖLMªë¯á§A8}÷ªaÿô!Ûþëû«mÕíÿ}Úv8Ó¸ðÅþq$p´Ó[q;(0A¦žP`…± ÓªÒ ¿Â—“Ð}<Šû»¾þr0ÁÃ? Áïþ?"÷?ø¶ÿÿ¶™«Þ៿{úÏyÎûƒÃ ÿÜ ×ú·ýðãÌþÍ¢<Ùî×T…bª£ã '™ÑëFœDG÷˜~dPâЬ znëáÚ îÓH*m û^ë·ŸåÏ$Fî×ö‹»wa[ÿûyWïÛaßÿíãûëõú¿¯D?U¼ŸÛÿóªptŸÿn¾Ï§xjlG…XvMˆmSB,! Ö„0•-íéö³ºãdtÍÄ¢#éÉ]ª'™ov\jŸ×Ç^ö¬wï5çTúÚi]þm}[ÐtÛÁ÷¿~­ÆT×^gl?ëþ?oéýýÏV«ðé·¯ á×þÓÛ¯õ»Óö4Lv¬[²Q &„DF?ß|sq fh—ãBÍ(BÞžN:/6“¾ôÓõ_k~7ä¡jzMÌð™È Éßþ=nõ¦:Né]vé>º÷ Ëý=îÿÝÿ}…Ì›Wuª¶éÁÛ«µy ÿ«g«ÌOô­­œ›ToNþÉZŽ<A¦žiÝÆ»Ú ê¿Û\]/ûÖÔ/ç2? ïS"ôûl"‡ýþßÇïÇ}ÿ믨?/?¶¾ÿ§w?v•«amSNíBr+ÃRpØkõÛ´ª¼0ºé^ƒAÆØV(+oÐ`„ŒL!v¼—"|ƺ”-6ÓEÇd²‹€‘òÿþÚXkÿ»_öãØ?LÍ]½?}{»¨6ûVëïý߯×ößýýóûîù„ÿ{kì5AÇq„Rk†=ÜQébšh5wV© ÂÅEFn‹MXq´ÂdnЈ`ƒ0W˜0L!y òŒÂ¼דº/½;µÓíUoê¾;½Ó­~Órÿ·Sv˜7ô´â×ûïã×ãŸ÷¦û_ûj¿Þ{wKÕ=u³×ö–©±[Æžì:VºvBÚx!­b>ÚªÛöØ@ÂhDGˆh¸jØAØBȾ‰Î0ƒ¦éé¬}÷±ÿ.&äâ÷þ­ÐáûWJüqÿ[oJÿïéþýí/T×3µðD9Óîë[I4Ái¡kË„ÐiÝ„ ! ¨ñá”8B"!«kˆšàÐâM’]Ðnkéë M뿽iôëõá-^¬?ÖÛ·‘–®ë½µœý¯×ýwÿ~úþ6( Ça;¶)SL*wlRi¤B! Âqa…rœ™!qÍ.O*û´‹·£CºvÞµöáÿðoÝ¥xê;w°ÕÜ[¼¡?¯þÖJ~ÿÿ?ÿÿ÷ÿûui©ÓÁ§ì&íí5AÃ(Ø@‚#¬4C‰]dõéþÇIü_ÿ«û{Þ+ÛëÝŽv¿z§›{ÕžÒ‡ÿøjõ½ÿ¼kîÿÁ(†;#ˆa0ƒ‡hDDA„hL!l¡"¿õÕßþ×»¿ïíþêßò“ÿ§ú{éBh6Ï­Vöû¶ÚJá¿ÿÅ¿¯ÿ?¹Êö Ј†DDDoÿØ}{c÷ÿ†ìPo½?]_m†"4ÅÜ5è7ÿ¾¶Nò1ÿïÿÿꦪÒXâ­68а‹q¦çyïÿÃ츼?þÿwï:0o¯Û?CO´ìVCH6+°oõ»}ÅÿÿȪ®ÓÛKV§—I[S:I¦³­7Ñkçy?ûÒàÿúÿ ýŸBE ×i²–Õ‹´ÓNŸ ý>íí¶ž§˜éòƒî ŽöÒOÝ:ˆ‚  ÁJÉVŸùR3Lð«þðÊ"ÃúûS˜~»½4Ó‡6G EwTÕP•„"Öt«~¿m´ûOíolÃM6•¡ØÓpе³ì´lí$e9¯*£L§}ž#f½ ÿð$ÿë÷Ý茫ީ¦Â !a„LÒˆŠðû¶ÿ»}&)‡Pm®Ç´"$þ@Â7)@Az‡¦˜ça ä^@Ôù¦}—}]»µ#ÿyýC{kß}þ©¦ÈQP× !F†PeŽˆ ÿa§ &ªƒBлì!ŠxŒÓ&ÀD\:h4ð·¢Uî@µ%ÑZ‚a3´Mð÷I»êªEóýûïV˜M°“¬IšÜb9£QØ%°ØÓˆˆƒB!‚ñ+Œ©„-Ã";w -ìC·a)ØU“A‘q.ÐöéØNë½»ï^÷Ú ìÂlÿž´Û_¸¨¶:hQpÚë¬YTDDi£·ŽIÓÃðaá;øs´"vha3ÈŽÊ3‘æšÚvpäáî–ïïÓÓÚö¶›`°ÒŽ[´¡±\&QHá0„PA±÷G_ER“ÄöÝÜêvU/™ÓZgL©„èCM4ïimÝïû^×ï¶¿é¦ÅE;ÞJp±hGøår!)Ñ® ßfF»ß;*«j»3<ì¹êfÐy˜¦‘³5ñ³4s*%"QÎ< Í#‰(pšªŠ@Ç1â%pySû!´ÓÝÎêÕãûþá(³Èï 2ƒWC šÂD]ª ÎDIž ÝOç™Ã „&†“¢òî‰Ãmöš¯~¨kÿÛ[ºë0BÎéÝ:2TEj Žï#´R?éȬ4Dõ¿ÿy¶C=Óˆ‚DI‹xdíòv#ÉG5"9¦D‚ñ)Ã0šò"F ÞŰH¾l·iµO¥Ní5ôÓ÷þ¾N/ûƒøe ˆˆˆ†5L§aÖö½¯*d9S4dys KÆè0OÑxÓí4'•Z{whèA¢!‚qé‰o—o}ßvO5W¾=¿Mã÷Ž¿‘7ÿ‚$=v+m,vT–uDî½0v/‰O韌4ó•œvNÝ+öÒŸ NÎe¤Esfp‰3gRuí4ÿÑ7}K.îòw¿ë§¯DáôþÁ:N¡¦X’v½ÿÚ¿ºÿõ_\/ NýAÇâV#µDï ƒÖöÑXŽÔ/5GàO6Ó[ûõ@ôo‡à„ލ”Š ‚¤†˜&¥Ík8åÛúxO°¡«Nôøþ¾“l±¿µ^Û‹ÿµzÛ´Á Èâë"¿öJ‚aÿÒ÷þòlT÷kÃy´ÍL'æåU»i¿·wtÝ]«Òòº4F·¦†8­¦?¤ÿëá…´ÿi=__þ‚zß§‡·¥õÚâæ|Åõ}yš¯ÿww?åq<'áñܤ‚d³öóèäq‚ìá©füÜÙë¶iVôï÷ú.?~ß- i¢CÕ¹®ˆA¢xO4v‚' §«úÌcbÕWýy ZëÞß׃ÿ®ï¥n‡©vR>Ô¼öÿ¶sk_÷`©°ž™ÙÌ„»Qñ=4D†HÊÆœ  Ði¸?VÃM½WoØ[o†®¿zo®ßîz'xO[C»¾ïÓ¤’I$’J•5­þºáýíWÿoÇݺ¡ïs9*ý[M}0«C±YÙ©¦h“ßófS‘w„¬0„ÓOÞh}Ø:.ßnÖô¿ªÿÅ÷ÿÿÿðÉR¦ûVÓe‹*êö©½-]!BÿøEçÿüÿÃmW_¬=þ·¾ý´ðœTSâÂ{A­H«t×u;ÕÙ¦@ŒœKLùè6¢î":;‹ïW·zß}«­¯ëÖ«ëÿ_õ¯ðÖ&¾ýþ+ÿ¾· ‹ ’ $©*I/ï×ÈZÿÁþSëÿÈ–ûÿ˜êû°œlCkÙ7ZVʽ~g¥ÙÓ8f£4ŒñTÙ„ H‚ =µbàÃMS´2ÞÙÃ=u»ÿ½ŽãÚO^ßÿ~ýa}ÿû¿õÃÿײâÿ' ­^Xí°¿ÿØA/ÿê‹Ïûï~ß¿ý¾~vÖí~-5dWÈáTÈáš'Ãô£‡[kë¤x ÂgŒ&ÐvŸ„ 9qÁöNÛ!Q¬mÝ¿qßÿ÷õýßÚÿ_þ…uïûzøîÿþ¹{úþƒ†Â%ÝúI$’¤II/Ú›OǯV}v¬28ö Ę ã§÷ &ƒ"ÓDDUwÜUE76»‹‹oWN„åÛ§Ûí°þýÞ—×ÿ´½ýwÖí¡ïÿO_nU¾ÿá¿ý§¡ôŸöÁà¿ÿ]×ì*¿þ’IPH-m?ß„ÖÖ=M¥Ã%DDDbŸÚ;Î/ è»'’»¼Ù³Œ4òâ–“^ôØaû[¯ÿÿ¡øo˜Ÿÿ¥¿ûIýß\ÂûÃÿÚƒuïëÿÒÚIøu×}4ÓNõM°Ÿ­WÿÕªI ’H$¥ö4â˜MRµG½ Ð×ùS£ìèa0ƒ6jPÈÖ°â@ûÝ ÛN­»¾“ÓØïîL iAÿîþnÿoöÉõ÷ý¿Mÿía÷vÃJ?á¿ÿwõÿý³>ÂVs×gïÓNÔ ÓMX´Å÷úw…NZצƒN8A(RBH0„0“\ZÉ[:úä¹CA„]¨A•b[i¤í7¾?Wé/l?ü;{Cïßÿÿí6ÿÛþÙ ÞíâžÜÂa—86+i§SëßüÞëþ½.Õ°¤41V8wªvœC Õ 'nÔ2V6— 0¦šlTvø_vƒ”B"(U>kÍ Â |Á&ÄXM“~ȘNƒRîŸúûþö°z냽?$åÏút®¿·ïÿþ«ß°úeBmãbš hEëúÛ×ÿ·[ŸÓMS ÓÚp ƒ#Dái‚g,zÃ#¨½Ã{MAûM0TÁÂA¦Âƒd1y7´ÓAš†Š% § è¼v¡õ÷åÇÿµ`aÿå?pÄZ¿ZWþÌI­v•ݺý’V"".ЈôÒïsþ©ù½nþí<íÁÓÚa 4h6aˆÁˆŽÅ-’Ä„ g"Õˆa:'m³ŽIì+EÛ—‰´oiÿ„úúV„wõ¸e¿ŠBÿµÞØ>ýë˜Ò»OÓcݯ«m¦ø—ÃB!„"0œØXa+[îÕ‘Ž‚lVÐhXB!e !Á¬DDDZKwt Ú—ôžšëÆüŸþž_¿ïHwý oûïÍ/ÿÕ Â}ª¸a½v…¶ƒA« Ú¶Òcb¢©}îßg7ˆˆaš×ÒIš[þÿÿ]÷ªßþ°ûÿtÕí—ßþ©‰ÞÂZ¤’ˆˆˆñ4PlSA‚a^"!¡`ƒB¢vk" 7µô’I ’H*I-—øýåå[ëûüÇw/û«^×JÏ^¸ƒ""7UÇh0„b„EÓÂdQ(ÿ¿ø"‡ü$’I$¯«ÿÚÿµÿÿ³ÿéÞ .*64ÐkŒ1±&™’¯p`…òn Âè»õÿè¤?¶’I$’â+v½-žÕu[m8xA„ÖÒŠ¦ƒ÷»Ö@’d,D0E^ËuB¹ÇÍe¬È ”ù}ÿôÎM{þú³ ¤TA(IX ·m›˜¨®‚Å3ÂÄ4Xi…‰Ci§Ä²A=;OW¡³·2Yúÿþ+ÿàÿëú q±„XXL¡ÛM‡šÐ‰éD!ʆ±ÝI*5¢WÓ–@lfÿ;Ò<[ãîRgã1‚ÑÌ ÓAÁè¼þ¿ßÿæŠÿõÛ4IòÇUA‚!ý ª)5˜…A©•=ÚÊ|§J4Õ»–éqJ”!~uˆ! ÎÊr·î—’ ‘›ŸÂ 4 4Åz'Òßÿûû3_¦í¥qßiÛ(„ÂEÀB"",![¥ ߉ÝYæ)M²s:a:í…+ ¦Ó;%}T§Ê='Ü—2|Ù¨@Ó1?Öºrv6Õúnýþ½„ÓOÿÚU²ŒF„a´)%%•<ög‘M2îûA0é Aª61¯›ØÍˆd( ÿTÑ?¹Uõtõ×r5© ÊF§0šk"àqªÛM"ó_¨k­®•w_W?.›A„ôÂ(|0’iX¡öiq% Í ˜è")“MOFfWo Öohþoª{ˆ·¦{ Ÿ%‰5pÿªÓEFi ÍÈ'„NÛ…6dâ¾ÝSoíXˆ¿®šl0½Û Ó¶¾ ˆ¦+hE¤ìz3Gãqö‹m3uÜ• IJ'UœOêë«fЭß÷¢NNtšqÄ'Èh"úµéØš µ  í‹— Úa+mU>ÿ‹ãÃoâwr;jÅÝ„ÂÙQ °¡®k<&¸A£>—iÁÆúßE¼5 “©°Ò§L¡üŠ¥àÐi­ßì©ä?ß3 h#B)Óúçz#3µ5¢q°ƒ’†EŽí ´Ÿ}×Þ³´Á’±ØmÐl4ÛáÚ 0„t‹p·×·h·jÛI_‹N7´“fŽÁÿÁéh4é²Të½0·u¢ š/†p•Be;$G§Â&îVeÄ Î@Íßùd Á0­„;ø9péÞM‘Ä8åÞŸÿÆ¿XŒÍ¯ +áÄDE¡+•Ÿ¥oôõÿ÷î5Á¬øa÷°l8Bè-.ﯹ‚ 3c 8†4 ñÌA Ê Ô|:cNžèd ùr2a¯.¨#8xpÓ“»t·GÛÐoñëþ¯DÜÈ „J:ˆ“~dÆv·ea}{ÒZý>&'¾þ ŠøoüÒlÈÆ¿}W7¹Ã6däU³í3ÄpfÈð¶ƒM§A¸dñèÐ㈰“¿÷öåãw{ÍÄŒ»C® _JéÒm]¦½ïw¯ûõÿÝ*Ãhé¦Óõ鯾ëöàÿÐ~„œÁݪ_§©Uá’÷t°ƒ4$Õ>•8Ñ;‡¤]û† C 2qdì–S5Ü0¸}%¾þˆ¿a«/›ÓXm¦•ñØ{{k¯ûÙqõøô]Ô?Jö»[¿_¥Ž¿þ¡ Úá¿ðû†šÊ.öËûÔÐTÉgfÌ&¨Á ýãÚh?iÝÑ1Ü»îí%{ÛîîÓº/(~<7ªwáljEóy|×wªý'» ëþŸõõÿÿé>O¹Çù„¤ÝAÝ´…¥_ý¶ÓÛÄ¡Ösýµ±1 ›µvãý Ð0A Óý{á‚»¢o ´á§ª„Ãm}nëôÞ;WMÉÇ5ê¬;^ÿå÷÷믾ÝïØy)8Úß_סûÿV›ß¿ïO&Å„­;äU~ºãý`ûí»úÿtîOlq[_½¶Ò»TiøÃÏ4 ÉÅßÝ¥k¾­iõÿþ|œ#ša¶îë«ß¯û¿U·ŽD¹c¯Üþýÿûüýÿ®¿“nÕ\z ØS‹(_ÿî¸=†ÿ$ߦÅ“"[7m2œ!®ðÁK‹»»[»SÇlk¯ý¿éÇu¿ÿßõ×ëD‡ƒð½ßü_Š~¨*ønˆ†ýGÿýë_i†¶ºk±<ía§o3Ôíf6~`a´ 0žÿ÷þi¾÷zÔ6Ü*í4za·ªw ØvŸëv¨<¸°þ¿þ»ð·QOÿ¯ö\ZðÖÐÚ ×ëWü›–4Û\u–éÿ[¾ëënÚ\lCAÇía=_hîvL"tLÂ&Ÿi„[¶-^ïßÛ¤í_O³u¤í 'hX!æÓxúOã½c»v ÿ÷Ø/™„Õ€¿ÿþ?Ú×uº|4ßz¿àýþ¹ŽÿÖë¶ÕǵÛXdíyÙ^ŸAñ çâì†lš$;nÍ ‰‡¤ ²ã ý{³›r<¡O­1´“B"#µÒýwº[Tí!«þúJº¢Cß¡ßýÿ—¯oüö×÷…¿÷ã·ó¢ìÇöf­}þïDKžÕŸ††µ«ÿâˆÚ#¤;‡Æ·AÜóB ƒá§ÛáÛ"ý„-SBÐqÇŠñ}º“„t ñ77&oöö‡Ð'¿×Û×ÿÿûÙ ¶ÿEßÿàêýÓw[JÂqQÈ&nì%¦§ÑI(‰ìDGݯL í Ò‡zJþIßÓ¿^kÃA a1ˆˆ–ç^ÍA:öè-ì?M®¿úÝ-Š~ÿÿ§¿ý4ÖÝnÿIýM­lÍ;¹ëÌv~¿V±ÕL&šÂeºh!C¼NëA2áAí¢wÝåŦŸô é¯QüDD0B"%¼ ¦^O]¸¢wcaøOÿÛï_«×úë»ûÓ‡qJßÿÿëúž_Õ°¶Ž)© &ƒIüà`„DjÒ£³Ä>ÉäÍÇ‘’™Cà‘'nôý»»ì/ëÓ÷óââW~¹»×Ú èên’5»w\ÚØ¯ôêÏ÷a=µÆÿØaB ·ir±Åm[kj» /±Q±±QÔΘ,CLÃ…A¡a ­ÙÛáh55NOÍaœ®a ‚oéÝý®‡§ÿïôó%$v^M·¾¿ì;ý½5»?÷êžÙæšvƒØ`¦¡L Èé†A¦›g« A¡ì/×Õ´¦Æô×´ÕhXˆˆeB%¨Œ•Ï™Ã#D§¼VÚj­†¦Æ½~¸Æ×õÿÒõÎær •WƒÜì 6¿×˜ýßVŠIªí…³ú§kuaS¶7b¶n-ñ݆ ˆøá‚ ½ âé»iª)Ý4ÂÐŽYÑ‚gÅ'Ë€h=}³‡.Ûè»ONêí$òï«¶×ïD¦_ÿ÷úÂfÚëºy2G™ä\ÂpÿZûÚ¸M³¨lVacv)ºd¢Ó œM Ét-E†oíbPí’„Ómˆ†¨E1Ó´ÂiÚu¾}öÒÚw}þÒÒ_ðZú®ºýòž0}ùŸ»®qY<-½æÏ÷i­›iû ºÿm…"»hA¦4""",ˆ`ƒˆa‘ˆ­4 ˆÁí¼·h“¹c†ÆݧÞöžíé«ÿÿ>ÛTÿÿþ:wÿoæÙͻ’ýA·þïÅ1„vÛá„™ƒ10˜M0B"Éì\VSÔB"4W;¼‚XiÐAá=²ù¿×ã[_ør(ÿÿôNÿz ÿï×÷éÚuÈ‹¶ÌÈÐÓM«a„ûk}½…hY=« ¬b"ÂÄDJô§û]ÒÓ{ûׯ­ÿ¯œUÿý?± wïû_6¾›ŒÔ»Îµš„ ûhÐÝÅ.ëˆ8aˆ›¨4974ÈÈî’i“¾ÎÂoŽû¯_Úîæ=°¿rôÿî¿þß®ÃH õ¿lyügš PyƒÛ »£CF‹¿ºMûÞ/QÓLî+EÃ××ÕV­ÿßל~+¥û¯þîëÕûM[M4Ø«ù¦fiœ´ÐvÃýµzê÷Û߯ÿéL{§&×ÒºuQÿûu~‚kíÿµÛ¶Ó´êD„ÖÐh5az_›~—o`­ÿÿuÿ{µýq忊Ÿ´­¯N×ð\·eÿükÿÇÚ­Ì+¾Þ®DØA Úiݶ- Ê´?¨oÖÝúÝ­_ékÿýß«ïE¹C;ó³åe¬}\wí7 ± ä¥Ù|½;à÷ëóÿi÷¦Ùííc6š`Ãyš#Ø0ƒE‘ºÂï÷W§ßû¿O×ÿ_·÷x„ÎÄôkA2*)y3¹Ì7ûÒurŒà˜@ófÙ¢ýü_÷××NÿÔ]§ 0X‹´"*"">•;ïÿ¿_ûÛì/ýÅßþåq&v‘´J4ÔìOPD(T!n˜dýÒ{_£¾Á8´MÞ4Í}ÌŸÿÿW÷wȨaváÆì0œú¡#Rø­þþxEþ‡¯í½knlÊ Ë´ÌòFv5ºî®ÛËëÓƒz1æ`ÌÈ~ÕþJ'‹[94­¾þÿ›[úv ²1܇˜Ðp}0QˆÝ~ÿ¿ýú5ß×ïn­[¡a®Õú|ˆd«VšIÜ}ȶmÙ™¨½ |;A×¥ÓÓªrò“v?éÙúÏ«Nì*xM4Ø™ôäc‡n„tÙ>Çæ¦·ÿß÷«ßuÿ¾á%¿™t‰e¥ÿV³l"ÉÙÓ³ç²É;ûfÙã!µ6Éã ;‚ Ÿ28¨[§»¢cµ×÷v×Þ»Û_†Âmœ°œRm] „ÓC60ÓPƒMˆ×¤íÿuç×ï^¾÷Ü5ìçᦷÉÙ8è ãªä»_ ÙJ=4ÛLÌ ÿÿuSa­¾Ô· ÝôÎ7}¶’þºzû`×ôÆÆƒWÖmàMˆ^—¿á;̦üU˜voM[nضšhm4$Ÿ¯0`¦]'›`ƒrïv’}g-¬œddD£Dq¾üqnðƒvq»TÕ~¿ÿǯ°Â¦¶š‰ECa„d5_¥¿{×v”zÚ°ù1±ÓŒ-¡Òý8P™ ÈfA„Hv…§h4Ó°m[wEÂDíù ÁŽ™á¦˜L'øy+lµ}õßǻƬ»Aÿ_Ó}ö Áa"ÛÇOßïLG¼'ûcw Â}’/¯™™¦ud Ó@ tG{ÐzÖÑ8rރÓ}¦8¶ôlþÛÝ÷zv­ÇÞžk®ßQßòvVžž„Dm)nV·áðôïjNЈˆˆÿ$"§˜DlÍ%ðƒ@Èæ™¢8ΰziíYçXe¬,ó é_†º­ðŽàÑ7ró­µ[ƒj¾ÓÖ5ë}ßü28¶ûßýp„?¯Ú¨¨3±»kØ6öš„E¡+ŠÄNþ`Ð3Ìé›0„3èÙ˜;#É4œZ i¦á‚dèN2î}Á¯«ê±¬z_Ô®ƒéÃNûÿþÿí»¿û<ÿ¿Î»oû/fINÓˇØ'i¡×í^‘vA¨MSµpØ3fÄ[Ðzm&úÅýßÒkÉÅÿõn¾Ø?úÿþ×ëø?^YI»âÿïwwV·´&KºŽ""W<ìÏw*øâÛjÜs] Fƹ"ZM²wy<'ôºýÿô×Û[ }i}–ÚÖÿÿç ü7îú}çßç¿s?VëÄ·ÐmU&iæCi4ÕÅ>zÙ+xvJÞÛ¸k§§wvßÿ·óA5^Òýa*ý¯ÿÿÿûôŸïðm}z·¤ë¶¿jšÇeq•ã© šš`¤‡‰gF›¯š»ÿ¶ÓâÓi{Z¯_ÿ]vu ÿCü'د÷ÇÈ¡tÿÒ ×¯ßÿ:ÚZëöœZðÁb˜IÑ”ÚgkZ¹"jgÚ ì Ï™y®M|‹§!HÔ“Ï´=wña{Þÿµ¾ÿÕVŸeÅŽ½¿_®£ÿëoÞéoéz×ÿÝyÄÿÛgôýŠPMšo &Å4Â|¬a=Iì4FŒf¬Š³fh5‘9Űƒ„§û¦é›a2‘™ÆõÖýúºÿ_ëñ D[ú ÿûú÷:ÞH×üƒOüëÿô¼‹ÓôÓAØNõÞ]á0^Â(„,þÈSHN²z6`ƒ'ÐÌÎÐeÑ;vÂEØrWvåÅ‘Ã÷r5YYB\â!÷¤k‚ [«ëÝ®þ°ïýýÿú'¡fŸô¯÷ûò³4½.»÷þî¿Z¿i]ßk÷ Õ4ئ˜¦ …-àìîDZÂòtíj¦D ƒE»MPa|‰n0—m0©ÚoÒ Â}Åí ¹ñà6ú7œDuw½;M>ÿÈd¾Ã÷ÿ¯ëï­ª÷IlÇ^ùýý=bÂv·¿õôO¥j¶šØL ݆L,W«´ìˆˆˆˆÛØr¡ æ¦}É<ƒ®ÒvÄ]ÒmvO˜DÜ*ßWß÷ww×1Ã!3™æggåNýÞé\z5Ûm­º¾ÿ¡Óƒm?û}ÿÿz¾×ýž­UdWa8ƒb¿ÿûÕéÓý3ÅÚÅ1ì&*úq  -ö“;Ôgq&¦’a DáºÎ4°ï·º6]úï]zõWþaLã/Ÿ3ǧpgãi íuÑpáaµwký[ÞëÌíÿª.þÿó¢¿ÿÿ»þÓµÌ%á…p©¦îû¿ÿjŸ]¥Zz‚"MYÝ2yj™±wOÈU£Ì&NeŒ¤ ÓÑ;p¶½ÿj›kÚÜ{x`õÝääšW ·Ãi·Ûmï]6Õ½7jõ¿¦â ûÿIü:¯a=~ÿìǘݳÖN-ÓÓcb¶ƒB¶Z®–{µµ@Øß ¦p˜CCB""—ö¦¼",Éó ¦a Dݰƒ¶þ»‡{ªÅv¼zÿø­ÿÿÛ ’éöÞ¸]Õ°¶Þ›Wÿÿ_ÿþÿÿÿžß^µ1¶•¥ßÿ­¬3n.ÈêöJÓQ¦˜i‚hDfË0Ô*ÝC «´“ªu&å®J²5="]£â¨S6 Ü\»§&? µ[Óþÿµê<7ÿ%ÏÖ^¿½ÿÝîÇÝwÝé§wµÿ]zÇÿ{kþ©$’II ‚ÂIRà–T‚¥xAÅE1MFÐhF©º}š\!°Õz 0¼0M3·VŠê–S‹~¦Œ ÎiúåÛvJé7.Úôí;´ý?ÓãÅl?ÝPKßÿôÝÚÿ÷ßKþëßqñÿaüð8D'>ÖÖû ƒÖ)ŠMtÂAV’©h!…<”Z݈L!A¡"èïÍ<'n¨„Ïèœ:—­»OZOµÿB>)ÿð•ƒþÖŸÿͯ[ÿ«±ÿÿúϯñÿÿý¯ê¬jŽ6)b˜MRtº†d!(B"4H§Ø βr’â¤ÜÓ?¤Mí;†¾ô» ~¾¯êñÿÿþ]FË~í¤ºï~¿úú|Нû·\'ÿûÖÿû§ø% ²à™á§u@Â$<@Âа a ,‡ˆˆ¡$MÌDvu4÷~Ÿöá§ßªiªúLŽ/Þ¾uÿ½ÒÁ¿Ú…ïßß½yý¯öÎ?¿ó—¯Ó~õý·ßÞ×§DA ÂšÎ) !¿&×$’Nú_ôï‹ ÚÄâalð·¯ÿáÿïÌ+9|kkÚâKÿõÿoîîî ¾ç¶ÍÚȱí=¨‹ˆ‰¶;L š¾é$’I$I$’¡IºþÍ¥#ð`ºèýÿ?-®ÿŸÿ0XÕè6ÒÕÁëÿÿÌ}ÿ훳¶aØbàÖ5¶œæ-4!ª·°‡dpP÷|ì×ëÚýH†ÒI$’AJÒv’I $’F4’Û_?éžß´î;N6k â‚ÿÜ÷ϯõÿûm8¶×ØÄè⃠ÚhS´Y&Š¥‰6G´!ñï8—Åüê&º_ûˆm'þ»8õô” –ÁUB¤(*""½IA$ƒÂéïò’û]4íwõûƒ¸;j*©„ Áˆð˜–ô‚ ‚ å¹x‚vôýT¸@óÑ¿_ÿÂߤÿÞuAëÌuz¶¾©¦Å â˜aí ƒO@4ÓB" Á2œÁ$INi”l(T@’èRA “»†Fâ"7†[I’Ì‚Ÿ“vY•™CN×wÈÄqç"tgÁ|<]&ëÿôNû_ÿgÕÛªþcïb˜­­ƒ Û¦™ÇbЈˆÒvà ¹sŽ˜­ÃN۵툈Ôì£2[ÎËË뺩$Ó ¦×h–¼âÌüü ¶&š–4ÿÿú_}/í„í?í]SƒV¨+B!„DQž=+4ÉâpÂDL!#j$k$Œã •H U ®Ð5é‚;ðóiÖÈ6hh>ðá8‡ýÑ7Rxëß_ׯÿÖØ«9>ÝÅFƒ³a5b# Ó/iЈ‰\¾œ”²’ £80©Úi…V°ãþ»ºXä­Õ rã4…ê1»%!ß¼'¯{¿ÿÿ^îí:a­¥ Úª !!:Äh'tÓûrJt &;ñó±c×÷hìoÈL RŸ2@Ïša¦‰»d±ú,{Â;·.*ôûùþÿ6¿×îÓU ²1AÜ4ЈÈähó´µýC‡Z ÐAÜ:nMFˆI‘ × ž3fpÏ °±µ †Y¶P E! ƒA Ûµ…½ îö¹Ã¦ö¨ìvÖïÖÕ>ÓËá7ðDt,&„Dabw†Þg‹ˆ~Ü:’F<2sšL!éúöw[MBvƒE»IÐíÞ^0Ô'ö¸Ò¿ÿ_aö‘^¶·h86ö:ƒB",©Bv-Ñ3yÜŠ£ñŸœâ.ø¸|‹2|Ʀbæ œ@šh¸'Í&‘1Úîú'šfÍ3§z"7›Ë‚Á»ÓbÒnžJî}¤ªv¿ýo÷ýƒ¦6‡b˜0û´4""*[¥—ïgs²#Âi„Œ=8I$‰i¹GßÂa OL&ÛîøÐy1àÓ[T5¢Ÿ:éÃD'‘'Ôù‘äÓBÝÃhœeå'ݦž›v»ü—ú¯þÒûv‹´Â²¸ÒUýHžO™™}5LÄ9¥·WîTfÙýIóã00´U’ ¯{¨inÛ“vûotÚ§z§Ó7 Øx$÷ º½Ù'»ÝuýŽö¯§Þ½9Åÿþ»áµB#•Óšd¹¿¹v} J†˜ um·á0˜L—Úª»yñA4ͲD<3dN#ç2ñÃBÃ]„4¡$Iæ¿MàÜ ý{M¯O÷÷Ä9vü8a"ã[Knáß®µ}Ø=ÿìŽ'åÿOßÿù´ä<Ç20©¨È‘(þ~3‰2DT½3øM+kíÃtß÷„¦|Á!a?bÓ„Þš٣òWî÷¤WÝ|Eî¿ívL»ßA¿éû÷õÿ/,:^¿­sõþýýÿú íöŽÔÚ‡Ý×%99¹¹cƒMR6ÆÒ ¢OWjk¿´.Û«ßkUÑ8‡~¶Ñ(~ô áªI´†œ?ÿØé$• •ì8ý^ëÓ§Û}õíooªñþÈówö½î Óøÿ÷÷þŸV$Uš—¾×äL' ÖÁßI4“EÅ£øî;cïO®×é¶Úyvƒ²}§úwpØ«¡õoïöû{wæ¦IÐI*Ûû[½~ÞæÅ#¢æ\­ÿú¯ÿþ¿IÿÛÿºýþûõ\;µäÈÂd(Í•š´ôhvõôïÚõcµÖsj×úÿƒüO‹Óï¿ïZ†Jw}†Û‡ýqáäÃ×M$•b?þµÄEÿÿ÷øoÿïÿý~õµÓ¶Ðiß“gOÓãdËÏfÑÑŽA5†‰Xa4,Û÷z×ÿ]x;ù·æïAõ¾ÿ×ÿ÷ûïxÕÿÃþß÷Mh'Ï'ßîýóR_ï?y ‘ãŒÂýé×rµým„ó ]4Ó ˜ i Ó´Seh‚™C=¯ŽDÏ?˜dâ¦hqi¢Ý²Wj]·÷×þú¦©¯aÁêÝ=úýx;ÿ÷«õ÷¯äù~º”÷àÞþ·{éïwFöá½^øÞ""’I$’I$ª©Yýu}þÚ î.ì!±kƒSBd­:5" ¤î,'ù>g›"uÞ@ˆæ¨4ZɸžÜ í7I7¿"ÿ¦«Y>8ü6y`ÞÃÒþÿÇ»ÿßÿ” ÷ÿCÿúø|ǯí}¿ÿ¯¢qÿýoÿüõÚ„°•ªm¬¦È¯¦¨2o3ÄZ Žãú¾TÂeÏCázM4ÉÇlóPýoµ†ß{þ½W®ÁÿÒ¬_{’è¢×7[˜íÏ}ÿvÚm¶ìv·§á_×H¬}.©úÚfl'îëa(Âíg´õ°ƒ¯ÿØONÛJÕ" ƒÝ¯a´Ì8M‹¥¾wÌ̈lAQ7a§Û 0ŸÞô«Lk­}ÿ‘G_¿ôj@ÿ~¹.ŸûÉ_û­j6ØÆÓˆa4ÖÕtPÏïïØNîÿM;I¨NZb£kpìà@™!@„Gõ´h‰Ã‡ "šÅ¯ˆh0ƒ+xˆŒ$ª¼­Œ(S@š8o†›'”Ú}ÝþÛ†­ZÿÍWþþÇW¶ûAÓ¦Ûmœ“(×n㊠ƒŽqú÷þºÕë ‘G.úh5 º¯ñƒL)á0¥B"=°Á4¶Ò{QLŠý¦vCN’JqîƒN:VÓµTÜÜýñÿÛõÿÿýï ›zmÜq°eû/Ç!-¥l7aQƒ6æ„l0’!-ÈJm;0ƒ½ ­±¾Ü&Å1Å„ ÁˆŽÃ‹ œÂa4"Âa0„G A…¤.(»T¢®í{õÿ¯¾ßŸÿÿòuÿñ±öÃw Å1´fâ¡LF¥ Á„A‚qh0­ÓhD+M¦Zh\GvJ昈’ˆ‰6Å鍊µAöÙq¶I-u­úækÿ 7Áÿÿ1„ÿúzèD¨ƒ0À¡ŒFì²eìŽ+%hÏ"„"&¥ˆ‹â""ñ·ëNÃzI$’I$’KDŸþ]ßûûíµïˆˆ‰Þªâ"‹š)ÒB-‰6#«~_8[­; ñƒ[ºïÌ ôA$’K‡ëþÿÛ8îãú_MÌó#%§5~§dÙaš£a÷ÛêÌ WløVÿþ¿à¿H${¥I’Ik÷ajÛì&ê)­øÄI¸›¼&Rƒ9Øÿû}©§í®ë×Þ¯·÷ºÝß`šaB •0£N”ìÇçbqI†MµE"·W+Üm/é—ת?ø:/»õëÚö¶—jbõPÓˆ`¸L£ Ó|ÿ½š@–ƒEºˆíe›ŽMIì>vYVfÏ;DZ¿Å‘Û)xÜþÓo¶ 8ÐÙ;¹¡¡G"pÐPŠ•ä¥W1D0ÂV"w‘’Œ†3áIA©ÙòFù\ ­»ºy¸¬¢\Œå@Õ8ýù2Å Ÿ"ÛÖüÇÝÝ÷¦¬_S:Úi„""êV7²}4Êdè¼@œsãªr¨Žû"¤Hdž;I *Ö¯«çiå˜~þ¸A” &|Âh4ÏG vOý}w}÷ÓVÏὃm2-›ÄE„ ŽœÏó#Hôr"4Â"c´Ða;¦•ºW‘RØ(M]BiÂí?úzþöjŒâFqé ‚Ðié»…ÕÝéÖ×Ý¿ítÝítá…L4píˆ×B›‘‘ŒÌæKæËÇT½¦‚»éU¤jÒ_[îžæ‡61Ðê´r÷¡¯7æÌ&¦¾N)ô‹Ë‡½Cÿÿnh¸f´øØ¿cØLrFñ²B\Ü2’‡„Ï ;4dvœ4úÝÒ¶ŸA*I$—] äYøÒAþ¼•´Ö ÑŠ#ï*›ÿöÒè8Ù:'Eõ¯¿j¬_þÓ¦#‡vd×B- afÍצŒí ÝiߦGi·º¯j¯×I%óBUí,„<¤Ì8¦µää|Œi¢@´$|ÂfÏ#5ÜïóLáÙ Ÿ¨í"ݲVÿ«ê›ÇïûÊšS Û]Ønƒ¡pÂcrº‚iµm«jÛ´ÒoÏ&®©÷àê·§ÿ#Wô*D#l¨AN×ó‚¡€¸Aœ28ób›< ý³Â§ËÊ'yW ®wH•yͳ4a Ði h›‡þôn¶©þÚ_oƒÿx‹ø¬2c§z&Ý÷67ýéë±ÛÜÆ5þ.§/_ƒþÿüðÍ eå?¦3d4ÎDg!ƺjÜ“âõ½†í8M„ɘºMÓMê™ÒÉ%fÍœ$F!„Ømá¸$Ÿí]÷§ÿÝrâ?Mÿ¾M¢$""$Ý,“é_zß}Ý'Å®<¼o{¸þø@âÂùr…<"BÛ0  ÷DÜü±Ú.ØdñÁ6ÉÇa5ÐmÞ ¶ WNîËu„Î3í<–¨g¦!®òoWwÖÿî—û}¦\]b·Øêʲ¡]äØÎ*«ïîšþí½ƒþEÛ¯á»ø_ú'OVA„üNá‘ÆaÜ÷ ïð¼;AÒÝ­…éoõÿÓ¿A­†~a´o üž]Ñ;}>þÞÕýµƒë_öù79¿_ŠêJ÷ßýûnÁ-‡§·{oþk¿^­Õ[wDîžì”pÌšxN‘æv”?ö>×ßC‹ÿ§´ýþ¿I6Výí§Ý§Wýc_ïÇõô=PíÐüb‹p!ÞëþýxýóºÃé°ßƒïÖN‡¾B{W¼4õÓ¢Wsì0Mã}5íØ~Ÿúz¾ã|ÇýúC^¿¯Ü%z_ÆüuýÎ+åÂîýÛ]c"ˆ?þÂ-üSb®MÿKïtôÝàø®Cmàê·Ú{Ô1JGr: G¯zuÇÍ%¿ÓáŠ÷¯®×¢X“cÿ°oO_ÿþžÇúëz¯5ëþP}û§Õ ÿî—ºo¯ì+éà L‡œg2/þýÛÿÞN‡Ý¦ÔÞ7º_º¶,b WÕõZ»þÚ°õÿ__„5{^ý÷ïþµÖµÞþÏÊø!ÓêOøìUý¾ÌøïímPw‰\ç´Ó´óM8eÙü Ð~êŸ]Úþ}3Úg=²>Ø]«#ðÒ•ñhgÄõµóð_×ôšaÿþa¿®üÿø8b'ÿþ½þådP*ÿè~»××ê¯uW¦„݆`Ñ5 ,Zar¸¦v+ᦞ²/œzMÞª4ÿº|ÆžÙ¹´›lÝog–¶¦xØ„"ÆÅ Œ"ãï!kCÿþ„0÷úû[úôƒû OºÛ×å_ª$ÿ¯ÑyÕ·K¯ªl÷§ Xªb•âœ|¯Y ¥ÞÓ×fA”[ìEÕöꮬqTÇyÛaÝ„„ZHCBÐÕßÞ Ú,r£N¯û—ï½WÛö~÷Óéî½Li„Û[[MÂ/ºí%ÿºéz­¦˜]°˜A§ÓL* 2‡TA–W b¨0M5Púä¯)Ñ>¸ o„){'ÚÐ; q­†ƒBí Q¹ÌDDEkÿ„Iÿ‹ßþí·˜í"Òµi&ÚL0©ðýµ­V;V*, ëÿï­oú¥ýSÕ>MÞ)5hD4àÁ¤#EM4MÚ5¿·èœˆÄ2Ù³K—Ï5Ûw©>»[Q šq Âá­þtÿ}Ì%[NÉÚøMµŠŠbqH;a„ ئšÓº ´êÖÓÿî·¯­ý°Ó ƒMÖ„êL¹)ëa„¯_úy— í1UoyxûÅÚúÄMˆ™Žô¾ªßÿÚ¬iØ_=CXÙëŠjƒs $ÈAl&­±{B&MIªak} a4ÂÓníÃ_ S\ =_xW»T]»‰ž‰ì5¿¤ÿþÚâ%u¬ï$ïÕ­®¿kr*½¦ÚlqT§ fUˆŽü!„ÉZr2/XJ8† Å®ÃX‡m2V©‚Å;Õu^Ñ»ú·8Vâi×þ‡_þO÷j› >ÓVÂa0 ÃL „DTDDEPÃýHÞh„@ÂpeÆ„DF»ò^tE'àÛOVöŸ·´\<ÿûuÎÔôݪ°àà ػ4ÓbS¿ !`„Fúh0ƒ'ˆˆ²Ó„"ÖžHŽÍM͘LÒ6kä\ð`¬'gU?ÿ]?¿èÔíù$¢Ǹ‰ØîhJÇ´ ;DSpЈˆˆó? hDa™Æ'i¦—„BÐÂ7oݧ¿ý¬ÿß^¢´îŸ; 3ñ‚) ȉ Ã%q†¢Y…Y{¦ð‚/fÆ4"í°Û |¸¸D£ékõ„°ÇLJÿÝì‚§Ç=eÑôDD<¢L÷iꈰBÖYã±¶ô=¤Ù+%™xá;µÖ“ð›²ê?þ‡áøE÷ºëõ¤ë;ö%@Ë£’i›[¨6áÒâ$.+”Ù6f§zˆs™ëÞ“mTÜÚ®ohŠ¿Iÿëc¯ÿ݇õõj¬;µÚ4{«›ÉœNDzc"E“½~­$Ó}wKpßÕ\·U‚wÌõÿwÝé.š×÷ïßë[Þÿÿ ={{ô 3ÛWçFƒ»!ÄÁ‚N̤ˆÉ†ƒ[…î­ó‰ª¿«“uK ^§oú2´û 2±öúíÿï~«ýÿòá+é{½A½a¦©°Ó†m4ëÔñ¦û ø‰‘víïÓEæ½UìP^øÞ¯ÞôýÝ7·O¡RYœd4FDñƒƒ_uÝÕ?úñ²&ß­5ÿ˜«MöªÙƶèqa›Ð3¶ªûØm…ºiuû»£[«k÷¨ðàÿëåu 7O\ËDíjå(DÐ2†i$ÐaÛÈ÷±ýÕ½ô«¾sú̱]ìi©" ‚†JBÉDDa ÁþáþåÛAkm?kã×p}?"wÿå¬A£FCK3ÝÓ}Êv¹³$,w"ÛÐâS´aÃm¡µµ«Õûëè?oÓý ÒkL a¤Ÿ'çYD$—µþ—ôïâb§ÛÿÛÇØ6÷ÿåæGìisÌ‘`™§›óÍJª'fv5Á$=„êyÍÎO™1Û.·ÿ}zZWÖÚ[ëõƒ(u´"#ˆôÿÿûKÿ#Çþ@—ù;ý°ÿý¯‚“2®ðÖ©áO}z\Ù›.òs"BZj…§M´Ò' ôþ»Z½{ÞØ¿Þ­Ÿ÷J?«¤6ÏÂ""1´?ÿíbýû°½ê¿(d÷ÿÖÂ{¤'tÔ“Î3®HDš$úvŸK‘l–VD#<Ù§`ƒ'5´÷p„HvÄ«µ'”_=÷®šýöÿÿ·Û³5ß $Æ¢GO m„êà d$B¿û㮫ƒÿÿæ÷vÒöê 7}Ü&¥š Ðjy’=ÚF€vü/ h&z:˜RèÏ6j}‚wÛi„;{ôÐ ÛM‡§¬}vñî¯ÿï7a‚(u¶MaÅ:‚˜4¨Dbƒÿ×NûU”ëë_[‡ú›“OKØ«‡jxùØR*Bf™ϲóflív1Áà ¦›µáÝúr*3§¡h0ššwðÝÁ¹v×§Ñ;ÿ×úþ¯ëýýÓ[õ< Á4"¡a ‘ÿ§¿­Úšbní‘y›áÝݱ]†®#´¹Ù8ÛÍq<`„  ˜àÐa7tÝ;Ã}¢o›/m$Þýi„ÂNÂ-ÜÖîëöý&äîÓÓtõÿä OêÿûßdɘtЈˆˆ•bWRÎÇ5ÿ‘߆m¶ÚVNͶ)6F;`ÃL>ÆÁ‘ÛB&x†‡Øù‚'F242va¦¨ @šrÞ8o †ðÛ "í¸|;g «w½idvä°0ÝÒ|ãkw¯úuÿK[ûûp«Ëªß×﯈ˆˆ•ÿ ¦ž˜TÝSc`È𥇶ìPhCDDZˆŽÌãg«Úa©÷-Ú-í‘ʃ œÒ²YÛܧ{¯zéÞÍû¨ÿƒ«XtŸ½Ýúþ´ºÿëÿ¯kÿ÷÷ÿK“r³5Óï«0˜¡ !„!„"#ÖÈVPFlÙœ2¬U»nåÃmÛt«nkown½ÛöÝÇwß[u÷´Õ¼7'žm'{÷Çÿïý×ýIÿ¿þ½µ|/xqÅ¡©VÌäÓ[°ƒD@•-ÚNîímÓ»Xïï´ÿë×ÿVÝû÷Ýø[ÿýõæýÿË‹þÿ[ûë¾þ›¥åq¸Ï5çt2wh|B÷h4Õ?y7ínwÝ]ÝÆÝV=Óö«”ÔbŸ¯êÛ{ß¿ÿÝ:ÿÿkÿÿß1ßöº¦;Ì„ÐM4 4ÁÝó4fÉZ!<·3ŽÂ_a¿ÿªn»÷¿Xö7·ßúÿpÚð_åÁÀÛcû·_«¯ÿÿÿÐÿÿúýªÿž}„Ý+¤Óhà]’;a¿ùÚØÉe„g³lã<Á(’æw í’J™ôØ?è¸ný;_Ó¿µðÿýá¢o÷Å¿ý½¿÷í[ÿÿÕ÷×ÿ¯ÿ3ï[VÕšllVÐf?l>áÿÎÎŽFÈáa0ƒÞ“OMBXO)L&Ò“5Úêž›]¯ý¯û­‡ÿn}ý®Õè'ûöïöï÷ÿëÿÿ÷ÿ_ýó­…bч»AªhE¬–nÝÚϼÁ`ƒAýˆf4<>ö眻êV—ÞÑ)G¡²ÉKoîú¾õ¿÷ãýþßÿ¤ý?úûïwúw‚Ö¿ÿÖëÿÞ¿¶¶Úªõw#wtÓA¡„Óöb@óëLó3ÓÊJwkK ¢wöÝÝÒk˜ÊêÓ¹¬gàƒ´Ó8õr­oõÿßÿÿæríÿþýýûWþûu÷ššûÿÿßë»ÿi]„ó5ÕÛiµAºh0„DuwÉR ¢\TˆiBm‘ÅÂd  6ïOVƒ§÷ÿý¹Ì®@™Š2AžfŠY¶7 6²+'}.sM-~—}ê—ÿeÅ_¦ÿõÿþ¿}ûjšw¤þÿuÜÚý4Û8ïŒ Ø¶Âl0©…ý„4";ºçcÙ/xM¿yvèñè˜ìˆ‰Ú}¯yº“¿ïµ”3F\ÓÂaƒo6Éßg¼ a›dÛh'®“„Ö-7oßßÐÝ:ÿéPE OÆNï÷ÿþïoûg·=otŸ^é÷_ßk®¶·jÆÝÒlŽlWM@Âü©ùè òTŽ0ž™æR¾ï¾ýчÂmÅ×Úïÿ~õ´Ð4ö­¹®E»l 7ÂJ£[ ƒâ­Ómâïn=Sû§‘ +_ÿB‰¿}ï×^¿ýÿþ¶¾ÚÛ}ûu¿zºûîÐkÔ\ΉZ °„]è«ÎOL'’m4ªîÓ]ÿ^úO@é=ߨ¤ÿú¾)-„hnõ‡K·m+Ýtºwàýwº§Õ‡ßÛ¥—]ÿÿ ÿªÊ.ýÿÿ¼ö½ö·ÆÓLT±ÂþíS»V5¸Ùv®Ði‘GˆhE‚ó±(ÙäƒM4éc Â't¯aÿõÿ¿íý'_µõ¿^¶”6Ó¿}ßïb“î½m»ÿûm’*a¯÷WvÛ¯þÞ¿µý­m?ÓO¼º`Âi„îÖØÝÅ„#×ýÞ›a*M6¶Ý¡ 4"¹ÙrMa;M%yôLw½»†Þ©ÿ~¼kïû#‹ÿ¤Ÿj÷òé6½zݧáƒëÛoûKªñ­Ü7­W¿Ul÷ª¦¬4•tíS´ãо ÓM¦„0¾í6Ó]X Ó½;ˆˆ‰7Z{’ù0œzlp·EöƒÁ=o÷µÿõÙuÝ‚ýo@ÂÿÿüzýnÚ†¿Ýmx7Vý·íºîðƒA„vzoµVËè0›fÏM0@Øa;A q±A¢jňL&îí4/°˜!íSN%ûw ,Z 0E“KÍQÃ6J`‚"œ´G{%EÛeõ/ýßÞýÔÕûÓ[ýÿÇÝÿÿOÁ÷Ö‚_ÐãíßïwÝ¥g{Pšîlm<0’d~=„â†)‹M„h&? Âd‹¦aDXB !ÿÚÁ[B"#{¦½Ü4Dæ ôý7Ý?þÖ—ÿKù˜OÕÃLÊFÒî¿ÿä>¿õüR~èÚòN ~¶æ—~ݦí«2ÒL4Ó@Å!m ž цY¸Ví馋K%kv°Ú,r‡j‰;Ú{ýßýöûßöòÛ´Mÿ´#îÖ×UNÿ÷樂ï»n©¤üÇ» ¸>1hC""#˜ˆˆˆá‡ˆ´#n;»áÒŸ0Obþ·éoV?ý=øW¿A>¾î¶ÍÏöž­öÿþ“¿wïg°ýº}½Ú ± (ˆˆø4+ßïÓ{«°éëÿ¿®ÿën«ú§¿È«}ø¼ÏbØ”=;Mÿÿ]³Ÿßïl3§{"_ú·› ´"ȱÄB""+;ùØMCI†“:GUøÍ†ÈVæBiL]Ú¦ãï¿ÝäÝû~þÞú÷÷úzÖÞ¾¢xhC (N8–âÌì‹êvBk±ÄïQŸ‹¢\CÝ¢ÇgýÊæDäN‹Î6‰ÃPx»0h»oõ§¿¯ƒä ÷ýûm~탴í\DDZÌ…ÑÝXUà;Ì–u ¡#Ad,=\(mÿAÔ‚y¸ì+8ÏŠš„È>üãzºy,ÓÓߥïûøwO³×všÅý®–?‚ÎÁù0ýÝ_ $v,ŽŒâ7’†‰…LØF¬,ò,FhÛ*Ù¶|TkÉÂòv^}ÕÖ©ÉÑRA“æÌqe&m’‘a0‰ŽÛm†˜6Á}¤öí>ë{Oßm¥÷ß½êÞŸöÉ;m¤ÕÚa‰69æ¹mr#=þÿŠê3âÉa,'ÄÇiÉe0ƒ@ω‚hi„ðíÓEÅ’iÜ™<¤Ï½ ~¥ÉMÃ34Ñ74ƒnð›Wzw®Ç¾ë¡éöÑ´÷}¥m„µmºw±áŠz½¶éídN4VG3Aé"Šs ˜%4A‘ÑÆpŽ3 ÐP@Âi„7î4NÛ;ÂqxW¶ß—oEãIÚësR(#VÌâì ÓýÙqئÄ= “²Y l'¶vN;ÓKu×ê÷½ë÷^ýùúÖ4~Ðh0…¦Š|I²½ÈIÛv·ñ3E‡šÆi˜=°œ¨ªÞB Q…U 0šq®„0›'^]Ü2ß dì Ú-Û/¬ÙpÐ8pÒOuÓûýæØA„ðЬ=¦—1\\.Û'l0I6îûͶ«v^>:ëöÁÿØ/íoßz»kk,u´Â""â˜~ò)m¥„GÎÈÚ79ƒL#ða¸nhÔÖˆ†?DÜ‹4ª©*-’|›°ËŠ éöšÃJÝ>mÜ5BöøÓp{þ× è›´k˾ïC¼0Ìrù²éºpÖô×V­á¢  ô#èUû§Ui~>é¦ÚWÆÅSSˆ§Þþ$<­#ï=›¬ ðmÝní87oN“s‚òVO)¯º´Ròƒ 'Úi =0XI*TCA/éÿ¿Vê‡}ÞtÕ:¶íVÛød?_nêÿÿÄÀ5® ²nRNöï‡ÞøCïÓN¬TPh“èDKs%ÿÝžðÏ3‘øôlÂ`¤nÓõ†·êÖ·ï}ývïMú¼twßzªñµß÷C÷ÿ´~†ø¯ýÒ{všt’VúpÝ‚î¶ÿï«©À™ /B'ëýÕwÿ´#@û)–âÉÓþs7R ŠF×ww}ë¯ÛÍn©·|{WI÷ÿ¢qÞ¾]¿Þíù³ÿö+öG÷ùi$‚’H%j‚I)t §ËÓª¿zuŠ·ªº~ «ñÿî¹Î œtNþ>m©¼6ß÷þ#>€†Ó'—ÿ¶é&î¡·nöêKOJô¾ÕïÿûþŸ¦©ý§¿Õ¿ý~ õ¾ úïaÿ¢Á¤’jÿûØk®©©:úþÖâ0½ïú~·§ZûgõM³þ"ƒ-Ë­m¯ûÏ%¯÷mÝÛzkÿ¯üX?ù¾ÿjþ¿ŽÁÿÿ§ï‚íõ¯û5]Á¿]ÉÕ$’1¤©%Ô” t‚ö¼§Ãú_ÿ^—×ÙÃÖÕ>ÛJÕ5Tã„Àì. ny>Üé½éß¾Ÿ÷ÿ}‡û]ãûiê¿ïÿÿÿ_ÿÿþ÷ûÛ«³ßíz^’>DsŠAt¿zÿf‹ýu½;MÇ ã†a8ââµÓ%¸ç¹Ù’;£ÿüZ«ÿßÿõîÿÛ¯´ÿÚxw÷¯·¯¯«_ãÛÿ÷ÿøûµ†¶zp¯ëA¿@¦†•$»Ûºì&½Á…aŸõN„˜¶Ú & è0„k ¶v¨¬{œ¿ïÿ¿ÿÿþ›ü–»ûê÷ŽÃÕSò¬Ô7Ö«úê¿ëßyÿûüýúížLTqÁ…b£ðný:(ˆ^’I%9$K.JB¬&ƒ‹MŽƒÉE„'Ѓ(Öˆƒ“ Ȉ†íõa—‰˜SÆNÁ4<&fŒïÿ_ßÿkÿMoÿ»ß÷Pûô Âõÿúÿõ­µõÌÖù…éÝðÂmSLSUßÙÑ>Ÿº…?ÝwÚ±ØJG‚¯Ñœƒ ôÉZaˆâ:–AAQn… ‰š²FG`ƒI4gĵ‹A§ãÞ¯õÿïùíüȾÿ×\òœ úh}w§è~¿þÏ÷ýí… Ûa4Óû¥]b‡ Ó „¾¶zM¦z}¡mÔ‹m80µ@ÐhD ÂAE•!>ö ­ Áš³†Y,2æ0„4åÚbôXô]´_dÝ­ÿãþÿýzýÿã÷œºé‹¨w5ég¶ÿ×ók÷íuµXqêªkª§a6¬A”Kïl-«û¦±@šhDD0B"¹O¿‡2SšXa4AÖj4-4N(¾i<ŽíB ºè?ùíX?ößÿÿ¿×¿s› _ƒZ¢vƒíúí+¦ªú®¶«f}±±Å¦aiìV¼mu0±Ö튆“ºNÓTÓL«q ƒ†ˆX¥"%¦l‘œ ¦(IƋǜÉ=7[[Nø­+îÛ^žßþ«ûÿï·_ð±êÎâšÂsÓwßíÚY…ºwÚð ƒjEÖM ÁVÕPšb"¹NÇLl‚d¡üƒ…„""­X$I’dl“<†x"w‚¯µ»'ΟÜ;Ik«oµ÷kôÛµôáíû÷þÎîag¿ïí¥J j«jÛöÖº§wv±Å Ø¤Ú 'd®"""B-‘Ä0±a zˆØ…×6‹£³P†‚~ž‹‡&;‹^š £eßÿÖ cõ_ /ðqþî—®Cêÿ«KµD(ŸÓÕ¥ytGW°˜N"#ïïlõöœTWyæbé‘ÂØL‘L]ÚhCt©2Ýeún†J£Ma’„AR Ý!ú'o½·Õ6»ÕCWŠ^Ø9ÿßß›†Ëíßi*Iü6Ó†Üo±M Z»k÷_ *avÖÓ †'0‚ !Æ”˜ÃB1Õþƒ»>ˆâ„.\4[Ã, n§w¤ƒ ôÛ×݆m.Duø¿MͧÕëMÐvŰ„­oä݆¸v˜&! ´#ôãö0ƒÝÅ¡ gFœÊ¼É;߬óBíCÐ4þã¦<ر¤L$4’I‚IP…½rÃúù ÷OØömÝ ÐB¡±G¤4"!¡ìÓíMh4Є÷W|KØdò×Ö˜ZŃõ‡_ÏVþ­Ò=÷aÛ¾úÄDCqÄn„D˜¶âÓ†\¨ÂÉ*ÎÁݹyi±vïlš¾Ó­¿ÿH% !Ii$‚!f’HôðͶ!ÚOŠïFE£; Ó†„DE„[Õâdž*ö—*±,a<Ó._ÒMî°{÷Q­†àùñ¤ ÿßvG=½³þ{†•új”TŠêI¬íI»B%j_ˆ•ÌÃf[öšm&wžFÙ‚ †Èrú‡ÿÿ>îð¼ÛI' ú˜N]kÄÃX`¬[ƒA„ÓŠ Â!%§2DNÈfY‡‡ÊY%kOÇ+Zg™ ¹ä…®h"$}6þ¼Oð‰: þÃáx=Ç =µúÇêÚzÅ4SSÖÐ0„Š"‰»<-(;bú{;!›d[§‘oú%HäUOÛª»õÿÄW °oû¿Ý†ÕwÚl`éß$ømÃA„)b"gˆ {´äÓ z"ùŽgCòÔ“5,™a0¸4hóG„ö³![!ši§è¸é£=°Ü›´Mÿ»úÜœŸ…ƒæ?w=~Qoü5ƒA´)ô©Lûz‹­‰Ý§N¡$n"#Xˆ±Mm’è§3ÆpÌ@ìÆtFl¹æƒÄù; ôÞ&vÛõ«i¶»»RÎÄe8„­F w÷÷WL—#ù-jZhw0âV?IðÛVêÝñßÿ«ÿ×iŽ vz`ì4"6‘ ‹t<3¨ÌÚ„ÇÃ3-0ƒÂ0îÛw}§wi…„½¤P¸L˜D)éådÂ"Õæ¯ÿähä]êE¥æzz/‹ûþÚ‡ÿý}wßûºµ´˜A°ïM88±šž"vžÈFjÒ5ÆNÚ†l·Ò/oHßißn…ÇiÝ×W~®–&‰û™gêînsH¡'˜~æãFNóm­öf8½ è¼a…W×ÿö4õ×þhŒ~m«ú±„ˆâN™‡B",.Œ†ÐAí¢óB·×º6h4ÕvšÚÞ>+·ŽÿZùáû`ÜiÃÐkÈüBþ!4¶'çgGÃ5fˆ«‰âSxAÚ‘ì&‹´­¾rn¿K¥÷ûªøjµù:.0BýU>êµ¥—¡̆)þ›zn·¯ñÕê¿ÿ÷Öºûn¢­>øtŸ#Bå&Pò·-ç/´÷ä@Ͳ'&š`ƒ†lÂjlˆ†¾ô¯´ŸßDÝÓ¾?ÓÒ¿¨ÖÁü{_„Á¯µµlÿo³‚žî$“°×ºíþÿ¥ÞñU_›D}.dY×ÿW÷+ß~ëZºiÒ~ê¶¾ka‚n eG®ƒ‹á*NÉ[Šë¦Á—Ú «NÕ}¤è l2á+o«¢í˸ÿ²Vðnº÷kuÝ÷ÝÿÞº·ÿßáí¯íûßݯâ8°ºC./ï¿L?ÿÿûÒïÓ¶ªû]†›±OIÚ E ûôLv<{ ÷iÐé§Ý­ÇÓÐé÷¦©ë®Ý_ßÚ}Õ½Ò½ýý+ÿZõ¯ð­¥®íãþÿþkß[wûñÚ‹}üв|‹®ÿßÿîÛKlßöÁ·X¼Œw톅ƭõ/&ÿ§AëÇjëìwÅÿúÓÇï}[§ýß}wý?õï¯ñûS0¯ÙO$·ëþ}}ýYë?á5ïVÙN ÿຠŽY z¾—œ®ï¦ï/Úìm šhC)ÊPeHpÖ"#û}è6­ý?¹µòû­idlNMÎsi´Á-^ºðTÇ÷¯ïâ¿×Xé÷÷ÿýؤN7[º è$"'‡îÞð×_¤&67A[ˆˆˆ¦µý=ÿ¶ï…êôŸ*y˜L"qèÇ~ÿŠÿÿ®¹~üåBïþÓ¥×ö ñT#ç“}¿ûvÚ¯ñÇ{ÛO†5èSç‘×$I„åßVÕ?mµØöØMU0˜BÐ’ü1€€ T € €7Z88(%€ %€ leptonica-1.70/prog/jbcorrelation.c0000644000175000017500000001555412242266304015470 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jbcorrelation.c * * jbcorrelation dirin thresh weight rootname [firstpage npages] * * dirin: directory of input pages * thresh: 0.80 - 0.85 is a reasonable compromise between accuracy * and number of classes, for characters * weight: 0.6 seems to work reasonably with thresh = 0.8. * rootname: used for naming the two output files (templates * and c.c. data) * * Note: all components larger than a default size are not saved. * The default size is given in jbclass.c. */ #include "allheaders.h" /* Choose one of these */ #define COMPONENTS JB_CONN_COMPS /* #define COMPONENTS JB_CHARACTERS */ /* #define COMPONENTS JB_WORDS */ #define BUF_SIZE 512 /* select additional debug output */ #define DEBUG_TEST_DATA_IO 0 #define RENDER_DEBUG 1 #define DISPLAY_DIFFERENCE 0 #define DISPLAY_ALL_INSTANCES 0 /* for display output of all instances, sorted by class */ #define X_SPACING 10 #define Y_SPACING 15 #define MAX_OUTPUT_WIDTH 400 int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin, *rootname, *fname; l_int32 i, firstpage, npages, nfiles; l_float32 thresh, weight; JBDATA *data; JBCLASSER *classer; SARRAY *safiles; PIX *pix, *pixt; PIXA *pixa, *pixadb; static char mainName[] = "jbcorrelation"; if (argc != 5 && argc != 7) return ERROR_INT(" Syntax: jbcorrelation dirin thresh weight " "rootname [firstpage, npages]", mainName, 1); dirin = argv[1]; thresh = atof(argv[2]); weight = atof(argv[3]); rootname = argv[4]; if (argc == 5) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[5]); npages = atoi(argv[6]); } #if 0 /*--------------------------------------------------------------*/ jbCorrelation(dirin, thresh, weight, COMPONENTS, rootname, firstpage, npages, 1); /*--------------------------------------------------------------*/ #else /*--------------------------------------------------------------*/ safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); sarrayWriteStream(stderr, safiles); /* Classify components on requested pages */ startTimer(); classer = jbCorrelationInit(COMPONENTS, 0, 0, thresh, weight); jbAddPages(classer, safiles); fprintf(stderr, "Time to generate classes: %6.3f sec\n", stopTimer()); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite(rootname, data); fprintf(stderr, "Number of classes: %d\n", classer->nclass); /* Render the pages from the classifier data. * Use debugflag == FALSE to omit outlines of each component. */ pixa = jbDataRender(data, FALSE); /* Write the pages out */ npages = pixaGetCount(pixa); if (npages != nfiles) fprintf(stderr, "npages = %d, nfiles = %d, not equal!\n", npages, nfiles); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } #if DISPLAY_DIFFERENCE fname = sarrayGetString(safiles, 0, 0); pixt = pixRead(fname); pix = pixaGetPix(pixa, 0, L_CLONE); pixXor(pixt, pixt, pix); pixWrite("junk_output_diff", pixt, IFF_PNG); pixDestroy(&pix); pixDestroy(&pixt); #endif /* DISPLAY_DIFFERENCE */ #if DEBUG_TEST_DATA_IO { JBDATA *newdata; PIX *newpix; PIXA *newpixa; l_int32 same, iofail; /* Read the data back in and render the pages */ newdata = jbDataRead(rootname); newpixa = jbDataRender(newdata, FALSE); iofail = FALSE; for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); newpix = pixaGetPix(newpixa, i, L_CLONE); pixEqual(pix, newpix, &same); if (!same) { iofail = TRUE; fprintf(stderr, "pix on page %d are unequal!\n", i); } pixDestroy(&pix); pixDestroy(&newpix); } if (iofail) fprintf(stderr, "read/write for jbdata fails\n"); else fprintf(stderr, "read/write for jbdata succeeds\n"); jbDataDestroy(&newdata); pixaDestroy(&newpixa); } #endif /* DEBUG_TEST_DATA_IO */ #if RENDER_DEBUG /* Use debugflag == TRUE to see outlines of each component. */ pixadb = jbDataRender(data, TRUE); /* Write the debug pages out */ npages = pixaGetCount(pixadb); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixadb, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.db.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixadb); #endif /* RENDER_DEBUG */ #if DISPLAY_ALL_INSTANCES /* display all instances, organized by template */ pix = pixaaDisplayByPixa(classer->pixaa, X_SPACING, Y_SPACING, MAX_OUTPUT_WIDTH); pixWrite("output_instances", pix, IFF_PNG); pixDestroy(&pix); #endif /* DISPLAY_ALL_INSTANCES */ pixaDestroy(&pixa); sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); /*--------------------------------------------------------------*/ #endif return 0; } leptonica-1.70/prog/lion-page.00011.png0000444000175000017500000004343211330622077015502 0ustar dandan‰PNG  IHDRÌp3å¡'PLTE***UUUªªªÔÔÔÿÿÿa¼ pHYsb&2 IDATxœí]‹‚«ªHüÿO>¬•€hµíÌiÕÍ{Ïž>-Ë„$ä1̓º¡éêô9`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ÑóË$é¼k 0¿LÏ»ÖóÛ¤ç]j€ùkR‘z‡¾¦>ùúÖQw g·§qšâ½îÿ[`ÆÃš'Á—Mñÿiš™CR’o±HƒãOz¸‚L™ä+×ý-} LÍ?4D&"qBð.dÊß#S~õ?´ àbÆóã|ž–ñÃlÌ8=Ph_φ7_üŽã…$A•H<§3¨øïØÃ böâKé`ª=µdÄÌš6!òJT8óœ„ø?ÀT»BϘôó&/s°bdis/,¿Ä™À©®2ʉ.53R²wøü·`¦-vì öy¸Ÿ0=¦¯€)ë‰Z0A™0?¿óK»_˜ô?&¸¤é0ó@ñ× ì-·i€ù0³2Ò®2`šÇ2üÒPÓÝΟ1ûŠ+«l½f–g³¿s—1±PÌøçÁÜИþùoÖÌ}Æ„­ð…I`nè̢ͪʃ¹¯4cö‡3sáù%áz6)¾y÷Æç`®F³½VLøÕ’M´s—ƒI 1d˳ñØŠ9â>«¥—Þ§iÊÿ•Aó“}4™lOÙüMðò[wj±c0q—Ë*aWÀM§âÑMÀpNÅr¾æi`îüÂB¯ Úð*D!¢»–#©]ˆv¬Ø_¯èVŒ~+ÆÝ“-î6ÝÞ×y>Schçdºþb %î÷ 1œԨËÁäOä2èGÔóµ§ í(Ç-ÁÍæÀHáøâöÇwvª±waÜcE8îß» °wÉr­°<#x˜þúMºÌ2ºÌÌbü˾8}!´b£#;ojù$-®ëx¢Àô±b=(êÃÇb§êæÂ_¤+ÁŒ V˜4ÿÙ¡~¸?ÓS™%«kÙó".mɘþe3½*ÇÃ)-jËz`þw ¬Í}âïOõÕœY^§&}¬ÜDŒëÕsάOE6• *®h……(}ðxÌ4Ç`ª©ë‡²¹•wT §$¼Æ»•3_BûpÔå3øTh‰z%(9ËÇRX^7ËÈß“Rö ­ÂÝÀøÌ4IëK­6øæ–YR8ŽyΙ¼ Ù\²âÖF‰½ÔmcúÁcÄ8³¦1ûº³Ñ„³èÄMâ¥aÆGA(¹U­"\ô/+jÂX¡ŠÙ<€½ëLWáÝ€u(µõ' &nÇVž@fbÂlÀ4ÞTf{œîÊXÂ'p¤˜¥Â$Y§Bl$1»*]X‹Š†R±`³ÉÀr‡ÉVkÞ¢«>¼õ¼jÄ¿¦¤¦tgž×‰ÚDù6QK¥"ŒPYéæ©Us¢ÃÖ c¢– ¦‚ä5-;T™üL·¢æÒ¨(PjòÅ)HKF;™2s!´Xz$`9NYÍ5E*0ƒØj[`<üþ’`±óÀ,âU¬º¶ÆUú­•’@;Õ~d²Ceb´ËG°vt÷)¦~•ºKŽ­/†ˆX‰oš!þy¸‚Ú:LV”;f6ÌÌeâ9ß8q/âÙ»¬NÃFLP¾0ß0Þ ÿ°Jøwé<0KY}«z¯Åò¯_—o½þárìjëNn6K^w]KZ¼.Ùñk_ÎÞ¸íºëùѵÿ¶¹Ä Ä®Ùû¿¿[w ~CP.ÉïÚ^è­ ¾sC4ᧀ èDÎüä`ÛžŸûù…÷ú¢Þ…:Úœ4À수ÑóÓtáŠ:À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#êLd Äô²XWÔ-˜ÈVˆº«öüŒú“™–jyЄº3!òÏ@Ù=˜l©hygWßÎ Ô5˜Á’=Cý‹g×`"«9Yû¶¿€eß`²ª©öÕÁí€:“eœæðGìÍŽÁd•/VDH×Ì:ú“åE¬¼­þ‰³g0•¥¹Ìcð¿ <ÿÔ/˜ ¥Û–”ø,ý05ýÆü`ê¶–W¿Ô?˜,ú7è€ùwh€Ù 0;¢fG4À수ѳ#êÌ?ËEêL”èþÛ%Ní²PF=ÄLßb îöÆ¥š_[®]Bñï0§òáJ÷æô‚éíy„Mž¾´¬ÂÊÚ6­(ËþX¬}96~f#SÑ[åøÓ`óDú°˜-=¹ô‹=´é÷´_¬½ÒÇ¢fÅ*³k|z¹÷è{ÃçÁôWñ{ÑÇ-ׇ§ÍÇ,½Ôoz­.c<¼ø4}ÌP»U|M÷{`îÎг&Õ?¢ â“^«/.U±È§nê¾f¾óçŠÇÿû5í„6â|gЭ™óÒ+;­š›¦Tjö“™> f°UJ–††Kj@MPt§mÛÚ¢³ÅrPýü(¥à̹4³­oj“êU?œæuÓ7ëÄKÜ*bÖ·nºìd­ÚÚáªD¶&ª·–DÂ~¸ /CS%ônŒá+êá§Á4Á&öð±MV´‡:ÿ,6¢´°¹„¦–Þb‰½œ¢·…B¿[o÷«c÷"qLÚ)E–ek"ÅÒ’+Ovžâ„<š3>.Ú {Ÿ'N1N8ægA›b Ã4Zƒâdq€Á:îæñË¢ŽnºÞwµ‚™Ø›ìŸ3òNË$Òr°ÖlЇJ_ik¿^1YX‡5&¶¹âËØ2øö"ÀŸ453ÓÒÃ/QùLÆ™Ê&ïl¼–ÜÅfålÛVÛȳU5ûñíþ.¶*øê9ï¢ÆRJ|R Æä:½}m="¥ôLÇmÐÿ/}š3ÑI'ýG³KpRæ}TKÁ§ÂU8&Ä{'ÎʘáL﹨l«©!xË0»PZ®C”£õ›ío´«s™øGRÚ™µÐH[oè9{¨¶Ÿ—æ½):»KÁ0}Àº9 ÏƒÉY,k|ô¤è`©ÕR(ñϺu­¹ZâìMGw/²'f«º™¬›¥«+AëMàªx ÐrO…ÄG#÷Îr0ÓeÍLÖ‚Õo½‚Ê#[0“u¯7í <³‡—ø} ÌTÞ7š›lÀ´©(zâæw²©åþEZ¥§¼®ºŽX'ï”´|bßwµœb7Ã{x¦÷C.Ž_ÇÁ\Ÿû|¥œUé*ÿŽ˜Í?Ë@_ÁT6(öß^8ìÚö*n=6²tÃÜP˙ɽ²ÌUX ‰ä¼Ÿü À~â[0gïËzf˜V+ž_ Üoã*q0Ó¼‘ÙRòeúÚæÆçMWQý}yKµ¼+\À·‹'/–-|*î–5gÖu¸®eLåܲ'ñ\5¥™ ~u­£™¤Ô¶i¿éL}Ó®[T‡¹>KZ¿/ÐçŬ¬ß—9ˆóü¸fºTñoL®3û­*wÁ,™^œÎµ:ÉÅ«-ª “6ÍC¯%·hµ nÉpYîÐ|ú fCË™8˜Ú.ÿ)?óßY3§h,ìÌðX98ýö§&;¯%ÁbÅW{`Ò¹®õõÚ±b  SYÚç9ä¿Ø9t2GÔ‘vÜ Ý.è âGÁì™Gâ+<}K‡ù_t;0¿@UîÇé&µ¾tÌj ¨|&¾ë¶Ô5˜ŽaµÝÃ×â’îA]ƒid»ŒY9þ^øçMè€ –`<ŽÉì„þ˜¤Þý0ÿ 0;¢fG4À수ѳ#º ˜[Ã! ÛÎ`Œ›“$y(óòQkTjÙælGòHhmX.¹Ÿ”>˜Ìòº˜Ì2rçÿMOî Îü•8—ô¤äñðËÔ®‚jxG;LtßBzõ v~7Ô¡Œ‚dºSþí=ÀôÛ Å¾®.÷õÀR%„ñÑ –pM±Ú$4‹Ñi–¹a~xle˼@¶Ac ÿ» ÝLM–ˆ@öDˆ¹*Èg›Ð¹Í*ÒZ£[, ÏÃãŒó2´sJ’F¦•”lÌCfæ«á»šî‘¹š#ù«,m‘@”òq–>¿àFÜ‚Í76*ïè¬9z‡nf›–T k³mRBŽ@D! QÅóÞöìc%Q)ÿA §1–xÔœúš˜ÏÎ’A$’ts‚ÀŒyíÌâZ³€Çùù>pÕˆãR¦š$‚ÌÇ·­zq 0c´@q$IEÊ?¨2A$€².‘]¤j9Ç^Û „<æéwˆXïY£žü¤ØQY‹²2hLWÊ0 JôÛC9FA± ÀÍÄ ühÉmöwbM L1Ö)!¯ÈÄŒ­Ò›-L•MI¦Cä‡`¢$›´ú=¥1‚ñ9”Ô¬™Ñî!_:mî2:F“à88ˆç*š ˆbEø"–=ÿ/?° =A$0·Ž XFó›Ë¹ÌòÁÒµ(`\úSBàr~Í'Hx#{’á&t=˜ž–Þä­žü%t³üÙcŒ&¶§œ°Ï?úðî¼:>êîàÌßЧgíãécOn æé·ˆÈktýU0K÷òlh€ùsº-žÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vD×yŸPâ_ÜÉAŽÑÅt:˜Ö9]fûgwJ3ƒOÌ‘>TŸyc)ýÞ8¥ùý>Wé`¿Òógt2˜ªl§Ùâ9™Z*éÄUyÄÎ'ìòb’,§:´ï6¤Ýž˜)Ôž$;`>ïe/èz³êu¥G­ŠN¥ó9“}²¬Û%‘k³®Žò†CºæfâžæÙÙE¬ÐEÚë¡OûŽˆ7)ZÝšì$tŸM篙ìÿc]žê”a6MÄ0Qìºs%–µ¼?˜B¯@‘æcbéöãÚ!¥ƒQ*Õ…XöfzÌã=›Î“8²óšcPÚ'ÕZ[õ¾Ø³0­ ¯qÒ¢®Õå{-Ù×ö§äíO—1H±tõ²AVº½‚Jà µ®FÖÿ[kc£E[ù EPr-…Òwš ½Eh³X] ø ^ÞY¶ÂR­ÀDX² $¨+Á XWQj)N(x l:Încø6OcÂBËò,@P`Îǘ@¡Ÿº@FtÑMÖ© ýŽýÀógº°bøÄU€%PaéM¾ôLÌ·É®Ž͈وϻ_C€™ç-Ï:0)â) ,ªjUµÃŠÖ¡ðÿA‘5e—;´ÑB™'õB…=r‚x“jÖ# è_’9FcQ¢U,d Œz‘]¤…kf¾v^Q8HPÊ$Ml5žø¤-ý]ÇÊ—p9à‘Ó|iŧ ÀÌóffõò‚W¨£úZ±>ß©Tàá×ì·Îj0“IA–"¤¬Ô1•«í¤¥¡øìÃà›dµ}üã*f!W­/¢õ9…¼`› ¶t³Z—/ã¼·e™MÑKÍ k>]i¡\á4`wÃÒ‰³}ÍÜ‚YÖL<íhœ·l}MrÅúeªÆDŸä5—¥¬3Ķ™ñaÍLÖ<• ޳qb´ð£ø8¹A»‰íöògyµ!p.»sž2‰{t˜ÖèÝ­¿ÌÔ‚9m6E3Q 0A~LÌz~Mδ&ÃÆ‘)‡æÉÎkc‘†V—åÜZåÄë E51«Æa” ™3•Å÷¬r%-L‡ÅuRQ%*¡Š‘•|ÒZó*ºB̲´Z)å dQ.‹hµù„?qÁDEè¨ÔAéÇbÍË¢*PVæÀ‡%ðòçù”Ú¢=ˆŽm[ïÓj¾ƒ€ŽŒÄÅŒHtÓQà ¨é$-Mo­ +±€ÖºÂF¯I­ìÛut‰oÖ+3áMC53ÖÁ*­lÅJ‚²šW~g…·¨´ [ÓªUäÒHVì$®bhrªM+UQ÷¼µÍ/Q®$ì«jÔz¥Ök׬|ÛxЬ±)ôm¥{6IZ—¢¾€n¶k¢›¿oñöÁñ7…_žù–¶ï/vÐÞ Ì¯Òwºv/”®öÏþÛ`þhîâÏw?£p­úó¯ƒù#úº ”«+±ý!0û§fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽè"0Q°ãÊòG}ÒE`Ê4Y‰ÐA¤«8sŠzbÖøõ¥`O¡«ÀÌHNÓÕiã½ÑU Pšg8£ÒŸyd®EGQk包Sªœz¿t­i¢aûe8QÞKvΤWÛ™™A¿§ xð«Âý=ÐÅ`Z¡nÀùežAõèÞój0¸v~YÒÝ6 }Ñ-À$w†o¯_-·¦,y±ä&`š°ý®f[ûá|xØŒ#ªôÓ§u-óßL+ÉËVNßZÙäã^ ÔvG#ôgªr£Þl!ý2wþ¢!Í1)jÃÁŒšÑ(ð² ô´ëÔ×éV`ºfû›¿ïÑçì´v U©óÄŒg«k”Þ Ìb¨|kðÏT÷Å*‰Êáøýé»ýaåŃ7ôM8?`ž …î &¦îÃÜ SP`ë¿y<ׯ尭ªH›Þ3:HI¼¼=Ñ}Á¬¤ÈÓ.”w»vé•pßÅ$¶=’¬·Û¤ ¹o|?0y€3|Š;Á”h ýν¦@™ª.‹&)AbLØ8ÛoåÝÀ„¹ƒš.¡_ÿRžÐGmFìL^È–Ä|)Ý6ÆB(SÚîÁ¡9ÔW0%ÿ wpÇ®èjm6ϧRäqޱ¨!úü¶ô‰±p8\ù^§çH(Ù‰+tž6F¢’ÛäACMPsaaÒ}”‡’=êZºLóÅPA v¨DO]c˜~(!PdòC䕤UÈH¤*ÑôˆÐX“mƒÈfK™ÝiuÕpéñð˜|­œï&aI׃9Û  ZÐS±MmQF©*™ò5DóiY4+ua@5KÓEøêZÅV¥ìHÃ"®JMí~P^¦q¥áèÒÖ·ÕSŠBs˜4gqÊêB ¿ @>=<Eª+‡¾•Y=ÞLJ€òõ:¤Ö`ÑÍßëèj0Iˆ$¶­z8Á_øØ6ï ‰§5¥Mƒà€²SVC°$z*O´8’zH³!­¦ÿ<.§·¡«³À¨S"âÇ¢0~¾Û•Bûg²p„ÃH$ÆÂÊ 1üI°•—l)>öFa›àóIÜD)||?ºLî0%p¥ygBøY„¿Rd‚R¡;—€Úé />ÏB:΃¬—ÎT”x?`åù¡€_o½Xga#ÑgE‘j÷ IDATŒ¡¾Àý]ì›Å²ák,õ&OÌô\ÿiÉùÊÞyòªj›É™Õ&KÒÄôÛ)@‡ EÜ못$qµ$ªí?NUÜv¢:Lu-ѦJö(N®_]B—s& ½!÷L“™œ?£âÌÝ77¡ &eX$:A¤o"1à Ðp…;O¥nC·üGvÕ²zr#“Ò{Õ°[áæ…R~B–Ýè­ª—¯™˜˜wJ„ëŸý4Æ_§˺£C`R”/.;Åž‰BùGÍÀË碶.Pðö¸o‚Çü'U ÷¥@¢SH‘>$pë^UãjmÖ$%Ó©’§‚üX[¬nµG•–ñV`«´lÆ`¥#%”T[apºlÇÒ¸œk¨*²Þ@ÁGÌ`ÜD‹Çv2ÖŠþ€OÑÕ`’èÏ ÜøÕŸs&LSS~v{h¿2÷®êG™)a/ÂȘôX~çÍÜ^K¦ôˆ³f3¤¹ „U‚[¬&´‘E„—”3°•ÌÍúf¨UKÕ$;ª0 3']¯±:o ªŠ˜G/çÄ=÷”¨Ž"MÍí˜J§÷;gƒ’£sňby0‘ŸE¯(ˆŸ\uŸ´“ÜÉ=é¼c­4L‰Þ@á+ϪcRãH¥76íŦ(]G\y¡UMNÊ4‹œ¸Ì©p0#ümj"ïÇT΂j³B”¹¯)P¡Ðyfó÷Ä™ ÔquµfÈÁaÔˆr_“Þ M^Í båÖkS§o¦ÕøˆJU6#ðq/¾/j|«ì‡ê@H- ¹8ÉyÁ| ~(µØhŠ,Ùy ”²ÜSÚ#¶2³mÿ®Ó ¡†›z÷Ÿîù0²ðꤾnÀôÍŒe—ÃwJü3]O46i¼ ´˜žÇ3ÊÔ‚tRxÛÕS`dfÊ)¤‘lû9zTdÕcaíëÔ¬ÈÂø ¦Pƒ“Îû@RaŠ\¢Û#¶[T×af×P?`"OoGÖâÈÓ¸l)Cïñ½fl4›N3&®¢GWÐäÁ\›vÈ5„: ¿lؽöÙÔ˜°KvW-î³)å©/‰ž,¸âY¨Âž,{JïÝèÜÚ¤ yÛXÍ+©#0gà±⎭Fq:×qAÐH_±ÔSvèÈ=R9+MŸE\¶LA’Ogwÿšº³n_í[YHñ¼&è¡ByÃe°WÝÕc4‘ já@°h"+Æi–ã+©0’}¯0·€l‡p†l˜b§Ã-Ia¦sWñ!¬àéãÞ(w¿˜ïp:Ó,ÿÇH"É=/Ô"Ð]ñè%ñ,d^nOT“¢¯–(4Âèƒ#ïáEt˜_M{:I"C±wU\v£µ=ÀâÜÍ›hC]q½'šû'2ÚçágߥkSú¾9vŠKÔæâ¸E:þ['hÓO ɵÞÕ0ð¤‹ç%¨I‰AE\+ïåu‡Òÿˆ ×½MÆÃ4>è¶Hþ Z®]wräó±:1L!Sf1¿écE>H×€‰ ­Sø7“!7)½3•:Åu9& ÎRÇÁv-ãôâ©ÌP\aÅ0˜ˆ +­ÎtºLΦ’=§ŸOJ²œÊ—稵Rm³/é‡5i›^øP¬V~£ñ¬ˆöG‹Ã‹Œ½¿kÿ¢KÀ,Ñ”P,.¬,bçåyÊ LØö5l‰xѼy|Êæ³Gâ5Ÿs FX¼"ìl®Ýˆ.SÛRéiúqŸ.n KÃmGÇ!– ®–¾nÇ2Es¯ ‰ZଖèÊ[ ?ÕÒñÇ·z2¦Lmì?<œK†¤¾•Õ³4è!\z× eÄàJq¿Mù¡X^ðÎÂayPÙª·bîWÆ„Çê{Òù`*±3ɇ2tÚÆ´Îé‰N¤%+ZR»XUfc'3›s]¶2`Œ¬~½ÙоÈÅ ^Àqkѱ\6•a²bÙIvž’ÛÒù`&™Zi\’eõ8 ‹††m{DK ¨nü3XGÄk¤ÕXd^£ W‡™‘m6¹ ³&ÿ°TeÔJߘ€ïÑé`*¥"Ü£2×ÌÚ&‚çpþÄŠ,ÙÞ¤X-Ÿ]:˜ e.j–C+‹ÕM`apsùÑ ¤·ªìó3:̈®yªY” ¬–µöããvÏ+Ì,IaÛ;@ÇÍʛ١rê²ÄÚø*@¡ÌmèT[c4E ¸-òÒ©`‚-&VÊš"y³ºÛ¼âaäÍ<[Òi>\h-Ð5z"ISl‹×aj}B"&ÕÙÙ 0úJÔ‚$ó3PÃ\«hÐÁ™ïR2¹ÆZ©©öãÙtŸ‰–^Ç*Ô¶K–•ÇïüÑ*?žpië(×V³üšX<#‚3ïkg¾G*ÎÂlžjnVwNV1¢©È½ð2ãǪa¦›=åN!î‹èô,.j»J§ÿ&†?[ðO9öúV3¿§s930}f‘4ºÚM)¶¥ZæíA¦èýaàªarΦÜYS€[Å Öj¹,tì*ÁƒkH<,h©ò-¥x—þKF‰Ñ¹`‚!ÌÄ2ÇH /ÿbÓÆ «£²–ÕT€dè¬DbíWA0­aEãlb‰¥’K=*1æ@0™ò 넎ަÂó»t.˜¦Šð¥'nQï´²vt¡½³bž‚šíZ†æ¿TR½œ¡çŽÔ‹¯ªa¾LîZ×LW² 2YGÅô«OŸJ'›&Hªó0ó’&§Â©( R}âÇcTü¸-µøá¥´¸l~!Ï ò>Â<Åt Ò±D£cjµ;QÓ"ºoèæ.ÙJgƒ¨ý„P8B‰¯-›jB^ÑX!»u% ²©4 »³ÌÙhÑtRŸ²¦“…z­¨ÄRÃ$²jA³Uv:Ÿ3©[¨Lž«Ë/³ÀT­—‰}Ú¦Ôs7 ‰àH©Üm%).£#ÿL)½ƒèÛc­vòHÐéœY$ÝdbÜÀZÜâoõìH¾_¤¾>SšYA¢^nZ­q•X'…€1(¶¦¤  sŠñWÒé`Õè±Þ:Âb[‹ù¨ÔV!+3©ràGUkÝå&+aYLdOê*ö7)éä9‘ñ Ô|™]¤o¨ÜƒÎö͆bÑ¡òK´34¼‰¯š_z}Š,‡Eá¶W«±òš9ÑÿãŽÁ,ô…wàÕ ýÞŠ½Ãk¨ö¯(§ƒY«ÉªÅ§‡ºÏ/¶§Í.A­¦'£cu ·WË3åˆJ¬Jtµw…{fŠÊçÇ;¼+f¬6¡m/o;Âjr–Gy…ºƒã´”“Ö-šRª®º›¡%¥¦%ǦZ˺"òÏ,gƒ¹ 4çNÖºŒ7 IühÀÝ™.tÕø’ ¥WÞwÿDí»¡¶M½ŒPÛ€!ÉÚvSp_WÐéû™«^‡4¦uR¤n‹>ŸÂ£¨×ê»o<~¢µx4} ~G%^ÁºƒU±±¬·1¾whù‚ÎÖf56‘:Â4åuŽ,¬&îH’ÚŸ Å¿þ6 dn.éë3T­„Z£½ì²jYœ¢žÜg>äÌëeEñÞ¤“}³ajZ§Õ’‡´-Õ½zX¥ÚÒHO“õÙCò £ØÕ©^Ž7o»(c¼æb¤Š»2ùÞƒ"ÿÍé0}²çWèdÎd½¤"G5T¤ð)w”ËtúçÈëx6žmhêN ˜ƒ)k0í9Á¨²¬ÞRê[96«‹‘ë万O~Û~ü$:}Í„ã4)}ªM§Ä~#Ü.¾7;:=­XZ6Ytž·Íž÷`Q&ÍçÑË´9ñÐhêÓ û¶Ç€œMi–ç6ÒýèüPËR`ÆŽ´)wpšÂÔ/<âÌg(m}»5×øšçy Šz1Š€ÇÄ7?y,Ëõhžü<ô[m©îD„ZNŒÿa#@Ei’Z e íÅî`í›jm¥ÿfÑ\T#“êÊ÷2–D:˜Yºv¿¸Áé|ÎÌz> 4F¡ÅÊo³Èká9‚)é ñjQ”´ÖúUeíy£„úÂÇíéÆ+LgBL^Œ;­âô»ßz2æ ²"d¶š‚lR;ÅIŠVjnQ„ ‘޶9ëzšâÒëÛ¿rŽÞa¯ÒÎd1ÿ“mjÛ…%ÊCºØ½é1ëÍØê®>Ks©zòÜëÂ̦2ûƒ(ΛN$µž°g­Os®­.“ˆ NL§F—L’ý—díù`š×nrÓi­‹ ÷…ãÒe-¹ 7RN¦·Fß}œòj«úve+lÝ&Z%ì&õâ–l+Ôb7Q'èß Ò» ¬tïrg;S2R®lv”“)m-Åa#L‹„ݸx Ón=s•ÁË3`qy%´©ñËíÞ«<Ì3º Ù61›g?X$œzSXŠ}Ä¥}ƒŽe˼îN¶™² C¶`Í·*ðÙi=«ÊNw÷âUºŒ3Ý „ÐŒhJ½Wz€ª÷àÃy—ŠåSÆYÙ¡%ÞÁ²°ù­‰Eÿ#\ ºLþY‚ ¬„À,™XXËá¶fõô:«oÓÆ(%Ü€NKêeXÓÒR),üoЙÓ.JËî1ÂGØm«>¯Hè30ŸÒz#-®ë“°¸W€öD„5öÑÂTÞêh}ºL_¯P ›Ý ¤éÚÝ´·50#ë?þ¼³š'UqzÜB³ö^øæßAó‚.fáÏ£C;Y{ìS‹Þ°@ Õѧ¦É3ZÇîéL3rËBù¨ skÅ_\Ûßâtgšl›XYû±N¦Àö¥’YòÎì®úþœÖ)HíT{Üî¬ëÒ“ìŸIº¢5=´Î•aÙ°¤­iÕš-3D‹&û,ï‚IsÇ®d]Äw¨t{+éDÿ]Q¡ mCŤmJSüÊNëþþO¼Ó_Nçj+tüž¸QÎýSÝé‰[¢wÍÓn]—k¡+À$›¹ìÒ­Å/5 Ý)m{ùW½ t%W×Á¨I«Í»öñK:|íxôþ4/áLÌÌa7âmÆ9óWµ•¥¹Ñ¢¡›÷;í¢åh¶¥f!…_ÜÀÙt¤,¦u¨ð7Ñ\Z ßM¥¶ÏË&|'z~W`þïöQ©±}(e©Ünýì“+jç!Ñê˜×´Î¯2A¨®™?fΘ›ç¡øúÌ¢Ý]•Ùb“ï}oº`?3S½¶¸ÑÚÇ @Yùqœc±¹õ;ÄbéÞžHV£ÿ_)Ar6˜xÅý| OFq´$Þ`Öù™ï`æFP7öÐŽ-¸Ý zÁàý'°<Ìô"?Nç’*Ïèv¨ŒHö°4öm-®b©ÛËš§¢¾{´b—ÒêAÅj¦ÜšNO¶}ÖÇ×­‚Œ½³ÁV[Œfeµ÷u¡C…Y×[(s\Õˆh58 ‚Þb²å ÓØèd0åYLM ,<BX cJÝ¨Ï ²mèPiÙ‚É0ÚuïÔ"giƒz*ç~=ŒÑé`Oís.b³ÙˆT“x?Ø;S¶K¨º÷Ä‘Ô\xÊÛÆV/Œ›îìt?ÌgKfIŽÌœ™X‚dç¼Í‡<,[0Y´tò>â¨V›²<·”v~î¿Õ#Gî=èt0çBJ¨N‰íF÷0SijîÏ磦{8ïi­uyU81¯“é=Z¥Úåu¿mÜ=è> Úv B»(ìvë5±$mÜ{"Òô0ò! ÇmˆØC5 ÝX£„V÷n çéEŽ6³8q\db_Ù—’ãØ[ Óúzx©´‰fG·âãCÕ£µÅ8é ŽlºiõÙvæ¡dÅzè4ˆtƦ'LŒ Û RqÞÎð1˜òàÝu½Z*šy¬XÊ?†ÉôŸ×•§.¡Ó=@ÓÃ4hiSáÌÁ¶†Ðª£èï£\Yg͇šÒc/¾ƒN7ê÷am1P¤fÌß²6ÐÙ%Jç­—“†£§?û¾IB‘»3ºÜÐJÙ$þl9Q”­÷¹Šb5…T2Æ– î[–“¹ ¥o­¦jé?RÔ+Õ\¾ÜCÓWǥĄ»Í„×mö'»YLŽ@&§Ÿ¼Êé¼· sk´3ùq½Þ”É)‘?’šÒ»œ C”8®ž‹¶à,l?‰Z€Ò3s÷Æ/]Ó!îè :Ìȶ™²RFK­å†œªvrüè#¿Ó+Y,>:Û|³? 3&®3O°‰òË€ÁïÒÉ`–?lÁŒQ=rvNµËád©­´`àUJȶ^é¾–ò£ðxsc 1ÖýŽÖɹb–ÿ¬çÁ[³ÉìAÏ!•’#ϳ–QÁySÊåÁẫ=HÙ'ÞV/èÿ€-rs/º$ k'ÇæO deåå¢ÝÈS(g3bR\o¬lNy4ƒÑg6cY,wEê³»TT†L¶ÓeëçËÙ²d‘Ï0]On?Œ {"0“—°¹©ûnK׃i3Å:à4Eaha_ —gª÷“)ïek›øß¿G&{¢—¢8‘keÿÝÌÀ%Ù2Ñ#omZû¨¦sɆǖ6‹•vŒÌ#0ùŒÙªyÇr‡nfæIèúê[VØ~ ìE2¿¶j_ KúüúØðæ!e%9æ?R ú`ÂåIiiú œ PŠŠch¯¿¬âɲ,õ^c<²:Áíæåž÷§B¾òÙªGçñãgK7¢€YµRÖ¬@ï>õÆOŒ>ë’„P˜u.`–þ¨Èp^Šù4dÚ°Ù…b:½½ª?Z–rdš Î|›&ú°5ÃÆ89äUzŸ=újÓl%I¶XU6«½Ú·–f²RÝ˧{…C¸Ò2ñ—ýÃÄš:¸ãAÿLGÍ{€‰’Âè̶.´NÔ¶NÊ6ñëÏÂ9´…h+E!³Óü Ó˜’Ù{ûÆ6rG§úÝL¶î’0!YmŒ;=0ÌŠÎJÍeq¾rà#˜Ê`ôŒeõ4K’ßÐ2Âñ.÷Ýè`±}ˆõ|óî1ø´î†Í”…i]±Ô§¹õ;ÅÚfò ×´–СµxþeöF`*r¨¹`%ÆhìùL-?¡‘¾.w+ïôÆé‹ŽÈR¨íc³ª ôË$üóé>`¢ }´ÐgtU߮ގë›P–º*H÷ ³5Û‘›7ß X®­¡{ÝÒ{€‰˜g$à²^-…cö‹¡Û’wJ3ªZ ϵ^Á€“L½ªâš•žììÝX¯?èºL”`I0FŒÖÜ"ºÈ"ˆEð^‹U5©=Gv$¢ÆWÞ8Ë…gHA+kí»iõ‰>Û1»š.Ó’ø˜t`ùɬ“NŸ+[·»ÏNÉ"…T0µ„/ì-o2=µ-ܵà¥0Ö»,)¯ñ¶n÷ëÁ¡-«ŠDxh#—EraÚã*V— W¾vQ¯ƒwàhMÏT˜b‡º?ÉÄ~áuàËñËm¢{€É˜–j×41]§¶ÏK;Á6,|StYÏJšƒRñI[‹à0Ryò]øö‚%k/÷XÝzw­òt0éB…'¯yì=~„åµçVÌZù l®ø±1=UgçÙºö¯—^·³ÕÂð”¯Ô”Q _ªºõö³š.§Û€9Úf˜9Ù­Eü\ª4š&6¿¬øl\œÕÙ²¨ûW“¸[ç"Üy÷P]­”0ƒUñ«t#0ÑÙDÄöL|šâ£\£¡É¶Ð·O–J4{¶‰}q˜z[öb¿™‚¤ËSâ7„ôˆÛU»¼˜V¢]<Ú<íÑS᫾·ÜóZKÍ’¨{Ômê6ójYû‘«]&sEÌ_GwÓ`ôí olâ©`ZØÅÊI5ïÓ¶Í®Vmñ}¥·ÐÒýœ õ¾)jJuï»ÕG¼˜©VaÖ>O±´îJI‚q +ÞWØyréd{|…ò•ëïùï~ýYîŽqmE„i¾ã­$í=ÀTšpüCQ[Ü¢t¿N¶Mì8Æ >ÇrÙSÓGÚÓ9ªìäŠÐ8f[…(žGMÊ®¡{€9/ج@a;CÎOÉË´AÿŒØbi2Æ|Re“Ö¶©ãŽ­ÇoìþÙ3ÃØú-T%éV{wÓsνÛóšLsAa I”PØÅaêe µó°§Œ6jÓ.Û>D;CÀ ŒM€T[-¯& 3óædE„?„5Œ5s>Ü©XÑÊ–±øiŒ_¸TÆÂ”I×ÌLÆ¡ËJõ¯>Ã~vš,ù)*C¬¤Å¥z¬ÑÀ¤‘ðrûaq‡f½s¢·Ý-7/¹T¿º4Üqù˜oœ6-3µå'ïj2t&µÒÛZéÓ„àmD3]„êÅ`rZرïudIŠÍVÅ„2øæË3­¥DHzlfÓ¸h‡ã%Zº™`åUãâ÷fÈS¦Ó¼Ü´1“¬ ÑÙ—.«Ì-˜(Ž$V{éuü¢Ç>ÂïÃðssõ$ë_ºšºõ æB¸SfqÃãåÃM¯‡3c©Œ¤5ªØ–¹š¤yoÀÓµ`Æ…Ÿã7 JYÙ$•Ó%m¨jÒ³qbË.a5ÅæÛw\ÜÇhû&&ô¢ò]ׂ‰ªön0¾.`*M–sÜ“+{Œ£ ˜¥‘µ×Öùi)-±~%Ÿ*&’J´ >–?….³I–{ÑÁc,îrŠž7\äÖ¦–ZÂÌäˆô¬[£-ºr°ýcª:y¸(ÕúJ0{ý˜ÜÖÔ˜ÌMjö ›É˜¾–-`ª^=«G€œ^63úŸ?¤P‰–˜. ¼Lm»¶zZ(.!8¦ò´®ò¸ª‹&¶Ÿu¼M]îÀ!J]¡ëC Ñ~hÀÒu`®ŸÝ7Š@†š£U_36`ں矘å˜^Ö¼‹Ÿ-¦Æ¼"ä ÿE;sµIÿŠ‹² FðsI¯%gÖ/Õ-Ê]KŽ{é ·MïÏÍ}ÌH†§€_¥;x€Héù:£–º€"‰^ò©$Oû÷†H …f?¯=Њä!òãÿ‘¦K“7of^AŸÄ/+k^$fiÙð_1”+1e„(º¶üöÉšñ}ÌŽx^îøût0¡Úì.6ö‘[2·§ùo6 ´Ò 0­lÞ‹kZ°ÀÝö˜M÷“±Ãd:º[½±¿^ƒ¹Ñ§ÞÓPÕ·A:¡;yàÃ>#_¸£=ÍCûdu’7LÙ9óc–Éåt/0¹ß°U[²ø]1!+‹è‹Š¾¯ê8™3þ7wzKº˜yÝdAÄmá§öì‘•Çô–RËÒ{õ¶ògè^`29¡ðÄK«â0»I7ÓŠíuù½Ù–©¤7ôA÷Óü;§ØÞ.¿»Aó~`ú5 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù]æcÞ²ž“7Ý]fJ µ`ÐÃÿ°˜K˜Þ/g÷ºíÂß¡ËÁ´æ¢(µ–bŒa6éͲب¿ÆF3_Åe¦Ñ­úþÍÕ`z37™&+§?±4á[‰ù­ôì7ÛVj~ÜÐgý£n^Ìâj0“Õ5/`zE¼ðg¢¾ŒC¨ö |…²°(å¥ÃtóÂl—ƒ½c¥O”ÕûMoÎHü½žÞkôÉR)L¥'jÿn³èj0]}Ñ©<õÖÙéõ¬e^n|YïݦBÛÓVºX`¾C2µ"Ìú‚´jjÁ|ù$®ÎØ)•§:×^äšÿ ˜Y~·WY7³¹ßòyW0%–Þ£¦´nûkeVÞéì‡&ÐÞe*Ëí,"‹&eÚ2z YgãRšÍm¬Öûãã²s•¦ßÐý ¼!˜¬1‰…*ÃaÜ$D5­5\LóÃ(ècš™ @åg!ÿÅŠgßL°€2˜‘bÓÿÌ„›×Q{X6íUtÚ³xѵêªv_Oé>`¶ÍNm ƒqEœÐ\¦i ævšÅí|¡6 xAEåXöysˆÑÌ™q¹dØŒ¸cñæ¡”¥qÿçoþ<ÝÌÍšI;2ÙWYÈâÿ+·3Íìw˜¢ágS®®%ká0‚©S·hë“£ãCw|Q©2{ÚJå«é&`êLÎmPcɇI[iªVû~Ê|“IDATZ‰v~&+V0§LëðÄ÷•‰ÑC«œG1[¸,~ùc¿F7¹¡-˜œâÊ™{gÄ•˜¥¹ºú$Ú€̰p&Ÿò¾ZŠnl¢sÍ™hÉP÷Ñ}]I7¹!ݬ™Î™¶ìí6¤^ f(.ëÉ™ìéçãóO³4El¼ }}©ë1|]»åqѾšnæV²ÖÑ„kórÌŠ5‰ÍjÁ¥msř̅óúîÃUB{q0®ºZæ»/;TI·SŠ˜µV]æOßöCežÕ&Öµ*æ%Hv²–Þ–b'›C¡Q_îåڻѸìÚ.WÑ-ÀÛ+S)¦º¡©l—ÃC#Ì|˜"èU<±)J²Æ‡ì™Ê­Ñ"nmçÓz©¦©:ø+€i—ŠE)ÖÕÁŸ±ñw,¤ëè`ÂqkZkÀÇmD1k›–F:=Chíž¼›…Â`ïZ“ƒñü[vµ´fQ8)?.ìOCøËpÓ®ÈTl°¡Ãu‘ Ô„1ƒtpæ[¤¯Û…ñ ÍM”g®„$x“?ß›Ô%RA§Ü «nÇè½ê~ß[E¸Ü̽óøÿ„Ev<±oôc½9ý+`Îßïgølßíßh™ñï€yDŸšb 7˜¿£Ì‘ÞÐqþS`¥p#­ô·4À$­==ÿ* 0I¾{{ 0:Àr€iԔ̮h€Ù 0;¢^Áìcü!] æ—æ\ÒN£ÓÁ\&Y™@ðíŽöôããⶌϣsÁDð€g{aãx !ÈÛ³Žmåàq:HË}bæëó’T‚}¹˜SòõÔ«ÅŸû²êóüÚæ„8 ‹dáÝ.¯Þ¤6¿öéiÌ3H§°Ä»É{¥ ZJW¼p¥†æ ”Åc–•5±ü§§—|Iy‘ƒ58ó ’€ä_+—Lä]­vmŒÛµvslèÕ~~Jçs&ÙËùËu!MájA—‚p8$Å2®9ÿ˜Õ0¦"¶@+‚x½ù@ c3½¯+Ü®êæ9[½ÕÍS¤Ï ¦ïÓù`*õ‹+%¬\<ªØ²`¡ç&}H°-":¤¦@„¨L(±ˆg¤Îâ àL„Õþ_0%®"kE5ZÒÚ@J¡¨w×Ðù …•3Ð<•LG&É2ÞßSB öŠ ¤c›1`ãyØú”,XYú‘bOaóÎçmÁkYò³S“Ä® ó9Óóyð£­nŒòqG6m*æ¾' íD±×ÁF›Jʈ'êÅr•ùõ#³Ú€é)0‰Ûf‰fÓWµ˜u½ SÍtôÌWþ›aDþÖ´—÷Å£0eY3-/w³ªñ`b5í \+mi‡3Sõ/mËd\}{2˜Ú,eUF%«½äîV/׎ÔÂUÑŸ_ ÎãLK¾ÝÕ6µ½lнý M¹E¯p°fÎ,t¡¥yòͶ2kºɉµa楈ËqÍYi´ÙY¬â‹ó 4bêå´ghN;Ugð„ì3UóPy1¡´,”k0lÞ#?ƒN“ó0-IEÃÁúV¶ØKÑRÐà‘xèò¼ æ<âèÆ‹ðdxè#‡½èõ°W¾ÉwÝbõ0e뉕ŽýV•–6‡NáJ¯ðÙbv“[þkf¾cyð„3¿¶uÓiM·UÔ¯¯lTydM‰;ÒWö÷G™¾]ÀT^l^Š**=†Õ ¥ty§Tî·è¾é/>à{CëÛùŸK¾Øƒ¯ñhð“è¾`~‚¾2±«j§E¶Ü‚úó ¤rß|±æéε½˜?"½eÙBÌQѱo³L®h€Ù 0H÷äI£fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4À수ѳ#`vDÌŽh€Ù 0;¢fG4Àìˆþ[á2¤ÿ ©²IEND®B`‚leptonica-1.70/prog/dewarptest4.c0000644000175000017500000001056512266633351015104 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarptest4.c * * testing serialization */ #include "allheaders.h" l_int32 main(int argc, char **argv) { L_DEWARP *dew1, *dew2, *dew3; L_DEWARPA *dewa1, *dewa2, *dewa3; PIX *pixs, *pixn, *pixg, *pixb, *pixd; PIX *pixs2, *pixn2, *pixg2, *pixb2, *pixd2; PIX *pixd3, *pixc1, *pixc2; /* pixs = pixRead("1555-7.jpg"); */ pixs = pixRead("cat-35.jpg"); dewa1 = dewarpaCreate(40, 30, 1, 15, 10); dewarpaUseBothArrays(dewa1, 1); /* Normalize for varying background and binarize */ pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); /* Run the basic functions */ dew1 = dewarpCreate(pixb, 35); dewarpaInsertDewarp(dewa1, dew1); dewarpBuildPageModel(dew1, "/tmp/dewarp_junk35.pdf"); /* debug output */ dewarpPopulateFullRes(dew1, pixg, 0, 0); dewarpaApplyDisparity(dewa1, 35, pixg, 200, 0, 0, &pixd, "/tmp/dewarp_debug_35.pdf"); /* Normalize another image. */ /* pixs2 = pixRead("1555-3.jpg"); */ pixs2 = pixRead("cat-7.jpg"); pixn2 = pixBackgroundNormSimple(pixs2, NULL, NULL); pixg2 = pixConvertRGBToGray(pixn2, 0.5, 0.3, 0.2); pixb2 = pixThresholdToBinary(pixg2, 130); /* Run the basic functions */ dew2 = dewarpCreate(pixb2, 7); dewarpaInsertDewarp(dewa1, dew2); dewarpBuildPageModel(dew2, "/tmp/dewarp_junk7.pdf"); dewarpaApplyDisparity(dewa1, 7, pixg, 200, 0, 0, &pixd2, "/tmp/dewarp_debug_7.pdf"); /* Serialize and deserialize dewarpa */ dewarpaWrite("/tmp/dewarpa1.dewa", dewa1); dewa2 = dewarpaRead("/tmp/dewarpa1.dewa"); dewarpaWrite("/tmp/dewarpa2.dewa", dewa2); dewa3 = dewarpaRead("/tmp/dewarpa2.dewa"); dewarpDebug(dewa3->dewarp[35], "dew1", 35); dewarpaWrite("/tmp/dewarpa3.dewa", dewa3); /* Repopulate and show the vertical disparity arrays */ dewarpPopulateFullRes(dew1, NULL, 0, 0); pixc1 = fpixRenderContours(dew1->fullvdispar, 2.0, 0.2); pixDisplay(pixc1, 1400, 900); dew3 = dewarpaGetDewarp(dewa2, 35); dewarpPopulateFullRes(dew3, pixs, 0, 0); pixc2 = fpixRenderContours(dew3->fullvdispar, 2.0, 0.2); pixDisplay(pixc2, 1400, 900); dewarpaApplyDisparity(dewa2, 35, pixb, 200, 0, 0, &pixd3, "/tmp/dewarp_debug_35b.pdf"); pixDisplay(pixd, 0, 1000); pixDisplay(pixd2, 600, 1000); pixDisplay(pixd3, 1200, 1000); pixDestroy(&pixd3); dewarpaDestroy(&dewa1); dewarpaDestroy(&dewa2); dewarpaDestroy(&dewa3); pixDestroy(&pixs); pixDestroy(&pixn); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixd); pixDestroy(&pixs2); pixDestroy(&pixn2); pixDestroy(&pixg2); pixDestroy(&pixb2); pixDestroy(&pixd2); pixDestroy(&pixc1); pixDestroy(&pixc2); return 0; } leptonica-1.70/prog/psioseg_reg.c0000644000175000017500000001415212265246470015141 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * psioseg_reg.c * * This tests the PostScript output for images with mixed * text and images, coming from source of different depths, * with and without colormaps. * * Both convertFilesFittedToPS() and convertSegmentedPagesToPS() * generate a compressed PostScript file from a subset of images in * a directory. However, the latter function can also accept 1 bpp * masks that delineate image (as opposed to text) regions in * the corresponding page image file. Then, for page images that * are not 1 bpp, it generates mixed raster PostScript with * g4 encoding for the text and jpeg ("DCT") encoding for the * maining image parts. * * Although not required for 'success' on the regression test, * this program uses ps2pdf to generate the pdf output. */ #include "allheaders.h" int main(int argc, char **argv) { char buf[512]; char *psname, *pdfname; l_int32 w, h, wc, hc, ret, ret2; l_float32 scalefactor; PIX *pixs, *pixc, *pixht, *pixtxt, *pixmfull; PIX *pix4c, *pix8c, *pix8g, *pix32, *pixcs, *pixcs2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Source for generating images */ pixs = pixRead("pageseg2.tif"); /* 1 bpp */ pixc = pixRead("tetons.jpg"); /* 32 bpp */ /* Get a halftone segmentation mask for pixs */ pixGetRegionsBinary(pixs, &pixht, NULL, NULL, 0); pixtxt = pixSubtract(NULL, pixs, pixht); /* Construct a 32 bpp image in full page size, along with * a mask that can be used to render it. */ pixGetDimensions(pixs, &w, &h, NULL); pixGetDimensions(pixc, &wc, NULL, NULL); scalefactor = (l_float32)w / (l_float32)wc; pixcs = pixScale(pixc, scalefactor, scalefactor); pixGetDimensions(pixcs, &wc, &hc, NULL); pixcs2 = pixCreate(w, h, 32); pixRasterop(pixcs2, 0, 0, w, hc, PIX_SRC, pixcs, 0, 0); pixRasterop(pixcs2, 0, hc, w, hc, PIX_SRC, pixcs, 0, 0); regTestWritePixAndCheck(rp, pixcs2, IFF_JFIF_JPEG); /* 0 */ pixmfull = pixCreate(w, h, 1); pixSetAll(pixmfull); /* use as mask to render the color image */ /* Now make a 32 bpp input image, taking text parts from the * page image and image parts from pixcs2. */ pix32 = pixConvertTo32(pixtxt); pixCombineMasked(pix32, pixcs2, pixht); regTestWritePixAndCheck(rp, pix32, IFF_JFIF_JPEG); /* 1 */ /* Make an 8 bpp gray version */ pix8g = pixConvertRGBToLuminance(pix32); regTestWritePixAndCheck(rp, pix8g, IFF_JFIF_JPEG); /* 2 */ /* Make an 8 bpp colormapped version */ pix8c = pixOctreeColorQuant(pix32, 240, 0); regTestWritePixAndCheck(rp, pix8c, IFF_PNG); /* 3 */ /* Make a 4 bpp colormapped version */ pix4c = pixOctreeQuantNumColors(pix32, 16, 4); regTestWritePixAndCheck(rp, pix4c, IFF_PNG); /* 4 */ /* Write out the files to be imaged */ lept_mkdir("imagedir"); lept_mkdir("maskdir"); pixWrite("/tmp/imagedir/001.tif", pixs, IFF_TIFF_G4); pixWrite("/tmp/imagedir/002.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/imagedir/003.tif", pixtxt, IFF_TIFF_G4); pixWrite("/tmp/imagedir/004.jpg", pixcs2, IFF_JFIF_JPEG); pixWrite("/tmp/maskdir/004.tif", pixmfull, IFF_TIFF_G4); pixWrite("/tmp/imagedir/005.jpg", pix32, IFF_JFIF_JPEG); pixWrite("/tmp/maskdir/005.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/imagedir/006.jpg", pix8g, IFF_JFIF_JPEG); pixWrite("/tmp/maskdir/006.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/imagedir/007.png", pix8c, IFF_PNG); pixWrite("/tmp/maskdir/007.tif", pixht, IFF_TIFF_G4); pixWrite("/tmp/imagedir/008.png", pix4c, IFF_PNG); pixWrite("/tmp/maskdir/008.tif", pixht, IFF_TIFF_G4); pixDestroy(&pixs); pixDestroy(&pixc); pixDestroy(&pixht); pixDestroy(&pixtxt); pixDestroy(&pixcs); pixDestroy(&pixcs2); pixDestroy(&pixmfull); pixDestroy(&pix32); pixDestroy(&pix8g); pixDestroy(&pix8c); pixDestroy(&pix4c); /* Generate the 8 page ps and pdf files */ convertSegmentedPagesToPS("/tmp/imagedir", NULL, "/tmp/maskdir", NULL, 0, 0, 10, 2.0, 0.15, 190, "/tmp/junkseg.ps"); regTestCheckFile(rp, "/tmp/junkseg.ps"); /* 5 */ fprintf(stderr, "ps file made: /tmp/junkseg.ps\n"); psname = genPathname("/tmp", "junkseg.ps"); pdfname = genPathname("/tmp", "junkseg.pdf"); snprintf(buf, sizeof(buf), "ps2pdf %s %s", psname, pdfname); ret = system(buf); lept_free(psname); lept_free(pdfname); if (!ret) fprintf(stderr, "pdf file made: /tmp/junkseg.pdf\n"); ret2 = regTestCleanup(rp); return ret2; } leptonica-1.70/prog/pixa2_reg.c0000644000175000017500000001013012240302704014465 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixa2_reg.c * * Tests various replacement functions on pixa. */ #include "allheaders.h" int main(int argc, char **argv) { const char *name; l_int32 i, n; BOX *box; PIX *pix0, *pix1, *pixd; PIXA *pixa; SARRAY *sa1, *sa2, *sa3, *sa4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ---------------- Find all the jpg and tif images --------------- */ sa1 = getSortedPathnamesInDirectory(".", ".jpg", 0, 0); sa2 = getSortedPathnamesInDirectory(".", ".tif", 0, 0); sa3 = sarraySelectByRange(sa1, 0, 9); sa4 = sarraySelectByRange(sa2, 0, 9); sarrayConcatenate(sa3, sa4); n =sarrayGetCount(sa3); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa4); /* ---------------- Use replace to fill up a pixa -------------------*/ pixa = pixaCreate(1); pixaExtendArrayToSize(pixa, n); if ((pix0 = pixRead("marge.jpg")) == NULL) rp->success = FALSE; pix1 = pixScaleToSize(pix0, 144, 108); /* scale 0.25 */ pixDestroy(&pix0); pixaInitFull(pixa, pix1, NULL); /* fill it up */ pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixWrite("/tmp/pix1.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pix1); pixDestroy(&pixd); /* ---------------- And again with jpgs and tifs -------------------*/ for (i = 0; i < n; i++) { name = sarrayGetString(sa3, i, L_NOCOPY); if ((pix0 = pixRead(name)) == NULL) rp->success = FALSE; pix1 = pixScaleToSize(pix0, 144, 108); pixaReplacePix(pixa, i, pix1, NULL); pixDestroy(&pix0); } pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2); pixDisplayWithTitle(pixd, 400, 100, NULL, rp->display); pixWrite("/tmp/pix2.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); /* ---------------- And again, reversing the order ------------------*/ box = boxCreate(0, 0, 0, 0); pixaInitFull(pixa, NULL, box); boxDestroy(&box); for (i = 0; i < n; i++) { name = sarrayGetString(sa3, i, L_NOCOPY); if ((pix0 = pixRead(name)) == NULL) rp->success = FALSE; pix1 = pixScaleToSize(pix0, 144, 108); pixaReplacePix(pixa, n - 1 - i, pix1, NULL); pixDestroy(&pix0); } pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 25, 2); pixDisplayWithTitle(pixd, 700, 100, NULL, rp->display); pixWrite("/tmp/pix3.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); sarrayDestroy(&sa3); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.70/prog/numaranktest.c0000644000175000017500000000606612242266070015345 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * numaranktest.c * * test on 8 bpp grayscale (e.g., w91frag.jpg) */ #include "allheaders.h" static const l_int32 BIN_SIZE = 1; int main(int argc, char **argv) { char *filein; l_int32 i, j, w, h, d, sampling; l_float32 rank, rval; l_uint32 val; NUMA *na, *nah, *nar, *nav; PIX *pix; static char mainName[] = "numaranktest"; if (argc != 3) return ERROR_INT(" Syntax: numaranktest filein sampling", mainName, 1); filein = argv[1]; sampling = atoi(argv[2]); if ((pix = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 8) return ERROR_INT("d != 8 bpp", mainName, 1); na = numaCreate(0); for (i = 0; i < h; i += sampling) { for (j = 0; j < w; j += sampling) { pixGetPixel(pix, j, i, &val); numaAddNumber(na, val); } } nah = numaMakeHistogramClipped(na, BIN_SIZE, 255); nar = numaCreate(0); for (rval = 0.0; rval < 256.0; rval += 2.56) { numaHistogramGetRankFromVal(nah, rval, &rank); numaAddNumber(nar, rank); } gplotSimple1(nar, GPLOT_X11, "/tmp/junkroot1", "rank vs val"); nav = numaCreate(0); for (rank = 0.0; rank <= 1.0; rank += 0.01) { numaHistogramGetValFromRank(nah, rank, &rval); numaAddNumber(nav, rval); } gplotSimple1(nav, GPLOT_X11, "/tmp/junkroot2", "val vs rank"); pixDestroy(&pix); numaDestroy(&na); numaDestroy(&nah); numaDestroy(&nar); numaDestroy(&nav); return 0; } leptonica-1.70/prog/wyom.jpg0000444000175000017500000035773211230774702014173 0ustar dandanÿØÿàJFIFZZÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀG "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?èpA©B×'‹*MµÕÂdq‰˜ô¦…Ö­[hÕN;yцSøŒ~µì}e­ÑÀèvgb”Œ/Ãs\Êj>#€|ÖöW#ý–d'ô5`x‚à]C úlªï€68*NG®=)¼LR×B}ŒË[}²I++«1èÒàzzV…½³Ï D\šÂƒÅz:\ïdžÜwÝþ}+¦Ó6æš±“Rª/µ]ŽåŒaAÞ”±5]1Ù…L£-Y8¤hǯâr*#(¤Ýžôr…ÉwäR£n5S'=x§¤ƒ=zRqf’ayÍL“zV[\àS~ÒP¬&Êç±£5Á­:)÷EÎ1sR%Ú*õªt]„ª+šà€sJÓ `V3jc ûÓPÎr)}^CöÑ6|wªòÝg¡ª~cȹÖÈëN4’bslš9~s»¿J$müTJŒ@8ëVbŒp S²ÔKRàç"¯D»i¢0)Á†p g)s•‰%D‘FM$#Ï™^YÈm«Ç½BM«Úܳ1Ü1Y““OZ›.Ý 5 £h;Ô—ÎA­©ÆÆrw"»&H¶¸ÖI·pq´šÖL“ŒSdv×D%Ë¢2œyµ2¥·xðJðj"µ±)Ib9Yds[ÂwÜÆqKb-´…jR)1Wr¶Òmö©qI¶˜bµ&)1EÀŒ­&Ú“b‹ˆ›jLRP1IŠ}&(¸¦‘Rb“ÀˆjMµ.)¤%i¥*b)¤Pi›G­L™ŠÊû+Äw[8_T?tÿ…KÂ9òæ_-Ïn‡èi'¶ûŸ½Œ GÐÔèö÷hTŒú«Ey'¤(·’mØÿ<ÛîÿõªhçŠGT•Lrƒ•Ýëìj¸Ž{nao2?ùæÇ‘ô5*Í Ò˜ÙFüsði=¬F+™ÜȰ̬K,Avì°¥Zeú4^J¤‡ª0ÃõèòæŒl‹&rœŽ£54dÔA8“ᇸ¬ã§º†d?‡RÍ÷ ™Sûöò2°üÅhÙA¨ W±ñ ÙQÕƒ¡ÈÈ«?é–}sq÷ùÇøÒí¯[ÌÌs¯]¿+¨ª²&ñ'Š´évÉ%¤Ñçƒ,xÏü…j[xëXˆs ‰G­¼ÃŸÏE§šÙy›üôAüÇøSRÝBùº|à)ꇕ?‡jVA¡Ñ7Ä}6 {iylqÉò÷øŠµoãŸ^q©?Ýì?­ro<2â;ؼ—ìÇîþ Ú¡›K„ó%¼W1û¸CBV꞉ýµÈÝ ñHB® N 5å¡X\G¶Ï÷¿À¹\~¥E:…‹lþÕ¿µôo3|¨8ªæbå=Bi±ç&«î%³Ø×·~#µ·ßìW¼ç2F:ÀqQjxûe«»9Cù0­hÇtC„™è6à¯ñzTÒ`‚q^{?ÄëhâýÅ‹É.;¾~™®sPñƽ«nŽ >Ïu·?ÞëúÖr®¯t† ö=:îÌ=yª¹¯#´Õ52óí0Ýnòé¿xqþׯóÕè'‰¬õ•XóäÝw…_÷Oç]x|Lf¬Þ¦h¸»›ˆéAfn3ššf•±ÐV•¶Ÿ_3|Íï[N¤c¹„¤eLJË.:Dæ´î•Tp¬É95šŸ6¥¸(èD@LÁ« 7AVáÓ¤|1SŠnIn -ìf…'µ8ªŽµ­%±Ü81îj­íŒ°¯šTöíJ3M„ Ò¹Kåpi´«ÁÍkc>ap)á*|q‰Ê9pià¨,Çè+7$·4Qoc?rŽœšxqMž!¥T’4+b®Ê×"îö¸“KŽôŠž´ìsKA«ŒÍ.¥äp*ͽ„“ƒ·´œ’@¢Ù˜x Ô›K•|›±ÜU3g #åëIN/fSƒD4à YKFܪTäšÔ:9`6õïS*‘ŽåF ™Æ[±§´ Hâ¶#Ó“‚–HG—Ÿ¶Wпfí©‘9ê*o$Ž‚¯lPr#KÚ\9,fÈ›O5MÇWÝ&˜'Jµ"\JªEgÌø>Ôòj$4õbÑHÿ1ì*ÇÖ–BOZn8ÍmdbÝÅI œƒR™Ù¸ÍWÆ -SHWe‘.qëNyÈ ¬95 _“‘R↤ɑÝÏ|TþQEÈëDaR>Õ jÊO±¬Wr 3Œ(rB…ÏžÞ¢«ÈXškQ=¹eÅ Gn§D£©«‘Ór¶ÂQ¾å5·`~n)<¬±À«o*õÅ0•‘@aB“Š´@ª8=¾e;ÏOJ…zv#Lc\ ìŠ]ÙyME,ȇhäÕF»&ÓÖ’Ú#pùbv޵Ÿ³¶²+žú"s<Î2¤íÏ$ ±(ˆLÜzzŠœUÚÅC*/áQÌž–.ÍjLó$¸ _ÖŸ$6Ñb¬ùÆj’|§Š¹æ@ ÅCVؤîJ—Ö¢1„ç¦1Ò«^MªÀ˜œŽ;T«m<¨«)i`XgëPœ"îU¤ô0 eìi i8'Úºf¶‰Æ *?±Ä‡(€U¬D{ì™Ì42EvB©8SÈà×]sËFÙ¬)t½¯…bF:û×Méï¡JMld‘M"¬KÊžÔ‘De•PpIë]\Ú\æ¶¶ Å&ßjêSOˆ@b‘ëQ:(ä #‚ÅDÛêìæÌl;Ê‘ãdûÊF}k¨xŒÈ÷ª7#!Ï”㈻Ø#ÓR”Ëí^jV³aîs[ó%¹Š‹{)1NÇ4˜ª$LRRÑLÅ&)h ¤"–Ð!„SH©¦‘@MÅJE7i¤3;“Ùr»gþþ<–‰6aÑׂ+> U/7@cSpw•»<}}jØI-˜›gÜ£¬Lxü=+ÇU¼ÏE[ õš{c‰ÐÉ÷Ôr>¢¦’ {è7#qòºÿ ¢Èç;“º7_þ½Rib/q-“š‡ ¶:ƒD—p3týRXoä´ydº*ù-€¹«.›m— rÞT®NÒI1žOá€åT'¿f&]6(–êG%š%È*8 ÉçŠMG욌6‚ ±#ºÂþZ˜ÊÜç¨>•Ííe«¥Šy£‰eŠAwlÃ*êA8ú÷§­¯þxÛl«Ý~VZÁð¶«sšmî´×·†Ý¼µ!NG~Aëõ¼ëgr¾lraÕKN¸®†ÒC6îÔbtóâþú˜}Gzh†Þç÷Ö’ùrw)üˆÿ­k¬¡bÇt`í.FÖ_¨=jΫa<†åÞMß»h“fÑé’yýjTöØv5šáã/¡ ŸóÑGâ;P–Ì‹æØN g„åOøW5sâù0Æ„ã™sŸóô¬§Ôõ;´m®É~mŸ*þ=¨s 3²ŸR±D&ñ–PôVçÛÇ“qâè㉣†39þ˜cP:×1å+¼ÞczF7ϧó«PÙO&<›P™þ9>cúñúVR®–ìÒ4¤Ç¾­©]+¬¢ˆœ²Â6¨úŸñª~@f̳î>‘üçóéúÖºh2ÎC\\–Ûü9à}; ¸³ôÄ ícø˜Ž:å–)-Žˆáû™i³Iƒ °ûòœÿ€þum´‡XÁ¸˜¿?uzàü©³ø®Ú'ÞŸ9?*ŸÏŸÒ³çñ ßjÑÂÒyK3)HámÜxžØî=kžujHÚ4ák¥Òápª±ÝxÞæâÆl(*Ùæ'ä7ùü뾎&38jáÜQ›ÅÒECJº…QWñ⤃Åzô‹‰í›þ›[ºÏ®GñÔA¹d“§Ù®[“þã÷úkF8müÜ[?Ù¦?òír¹VúõŽkº5%ќΚ;M?SÐæUòµ+Gvä0ùÚC±•‡ªšòËí>Æàí¿³û,½¤ ¾3þçQC¢ÇbV@n.«=”Í·ñPÆ¡ó7«)$\Êíõª·xš3÷†+ÍþÑâ pfÓµ©n î¤,˜úƒÏëVì¼Gâ"°°¼Ú9EFŽOÄ•ºwª:8ô¹~ã´¯Ž´öÒŠÇœøü+/ˆ‰<»½ pã‚!‘XþG´GŽt‡„´Z“ÚhHþY­þ³#/cNÝQ(pàÒÉ!óÏjÊ‹\Òo\µ®«fÎßÁæ€*²d`Øbû@ä´ã'{’ß.„%ÀrOZEùÛÐSˆFlÕëkч#ït­œ”UÙ 7دˆN=jAg—#ò­¸-¶ ~5‹ûݸÚ:f¹ý½Ý‘·²²Ô©&Ø)ÍiF‘…•²Š’IÅ[HQ +“O©¤cap¸`9ª©n«&ìgëV LÇzÍ7ЧaÛx%FjÂô¦ª†Šj‚ 犗¨Ç9 }j¾Å”ín•;Œ¯Z‰x9¦„È%´ 8nj/ “ƒW&”`ThU”zç½h¥+Ò¹“0ÚÇŽ*»?5¥yåî*ãž*µ²#œ°é]1—»sG[•c„ª÷KëŒÖêˆÔ ¥VºòÝ~l:S]v©èaÆs@lVqÇJiÖŽPfÜsIF)EP‡§5=6“–8ö¨4´šˈWëK¼œÓbj‚zÒÊT+-.iª@n*/3Ú­[Øyê¶íVSMŒ8àñïRçBr3s"Œí })¢F95¹:,j(*j”ɨU\(¥©ô©µÔ£æ9©al¶*'M®GjḭtkC-SÔ²de|b“2;p¤‘Î1V-ǘÁ@Ö´6Ë@$Öª¡ÐÞ4ܺ˜ikq4~bFY}E_±·‘"%=+CË ˜Å0€Ö2¬ä¬iJ.àT–<ÕY1ž)Ò¹=ê»9Í(ÅŽLx<ÔÈõT?5*š¦‰L¿ -Wã\ šÌ…ùÅ_YH\µ7‹'Üj$çŒþöl.j¬’`ÔF%69dɪrùŸuæõ5gÍ@£w9šÕ;õ3IKÎå˜ÓRÎ;YNÞsëÚµLŒz€*9cV»ÖŠ´žìgƒcÜZI$Ü €JS9ü*¼²4™Àâ… °r²&i¸Èý~¿ZMÒÖÉÉ29•Æ>b6Ÿ§­C«\]3Z\ØÂÍ,LDÑÁØGQØÒèòZÞÙ°ërvÊÛœe…xqiNéŽû›’Áou$Œâé|Ö|ElÇ!QLKœ0óölV}ô×@I4 Ú~mPsßóÿžátë;8 ¹™nn ÜÊCa—''§jR–½mÌëm2á.o51}2Ú øE==ªi©§x˜LŒ"Óœ‡1’W•Úä×íö%kxä)“¦[ŽGõúÖVµ{w2Fe•¤U ¸pN3ž8¬XFÜ«T'dv—^#Óà^e21þ¿ã\í׉˜î‘ùA»Œgëœf°,¢ŽyIe˜#`0 ¼õÉþ™®€i~]¬ÑG~`fó‰nû¸='µ9WV÷™qVÜÍŽâövwù‚räàg|Æ£žÈ[˜Þi„¦E?7Qœzu÷­Xï uý§oÍÔŒ¢ßsnlóžx=ÇvÚÒÉ®!]FV!ˆ³t>ßsÀãõÏêZÖ£«É‹[y òÛo.¡?Ò²•IÍÙ4ýŸC¥ e§&óåÆv#ùÖ}ωmÑŠÛ#L}q…ý¸yõ„bH4ÞCþ5JKû‰G3l‰Å ŒŸÄËuWC©¾ñ%ÞNû”·û±õÿÄþØStŽªdmÀ—›‘׿\ŠËTCÎw}iÄc ­cN1!¶Í-\]¬QJ ò­\’#H#¿`E[ÑlØê0ÎeYcWE`[vcþ=©‹­^?‡­´©&c§­Ædñ ŸçùTÞB¯îúìb™Ç¡Åü­l(§rýjõïΙƒ¡+„8éW ̶¶‰Ú”Ãz›¥T|£} gê5å´–²Iðf¸Ãøu}kbè.‹i:Ü$'í1 Ee8=+9EF*ÕN»’[ê7zLí ¬’Ûùg/£¯¶c­Û–Œ†#¨èËõÀ>§<’,ÒI$“cîÛ·Þü?*ÙÑn¬æ–f•æŠèDÞAˆàïíŸQíQ*]v5ŒìµÔÓ¹Óç¶g,¤ðýÇÖ·,â€)½§š¢D|ÿ©¼L¯üÿÏÒ ŸI¶Y·#Ma1ÿ¦Œ¨~Œ¤~µ ­»÷QM»þ®Ç?ÿõÓCI‰]­Oüñ¸¢?CÛô D¥õšu;¸˜ýÓ9Çø1ήCâ_ÙI¹–Îx3÷Ú̧¥Eÿü2Éi»û£Ì…¿ßçšNb]àÕ¿å­¿Ï}Wÿ×I¤÷ Xíìªy¯¥Ô[ •dðy(ÜNV.Í6áQA“%Cö‘ŒP’äæ¶Q²±»5•À¦îɪ±±~õ)qæ±å±¥É 8 Uw«`Òý¥qïMÜ’𤭹-ßb%Í4MµzÓ.*’ Q23ð½k¢0M¹Y’lÊhY6M²IIù³ÍA=±‹%NWµZq؆žâµÁ W–bÊy¦á˜ñíP¶îùÅk#9IŒ¤4ज’jïöM×–(-FßK’Aen²5ÄeÌŠæBÇŽNzòrzW)%¼–öÌ׈©(]æ6l?=?ýU^êòe²I–4É]¨ÀUzýþµó*¤Ó²;ìÍ-GÅ71D–ÒY•@ » Ç8Á5FÎþ÷Ï '#…ØB•éß9÷éT!Š-Iþ|ƒœ™X¨ï:ÓL­ev fœ3ÅS•Õžæ–{u;[Iînà‘Ãç¨o1P@9Ry÷Á¦Ú黿ešUŒƒ„æ«xzêf+ óјy@ä+çŒLg?…G¨,ökY­òB%h8çÓç\“‹ÒÂVVÒæì¯mg5Ïïv¦" ì œzõ¨›QŠóã\ ¼pF?Õà`ÿN™¬æ»+‰.¢»Ã¾0¿Æ9 ŒdŒôÎ;V+ÞÛÝIö¸¡–2 üÃ=ªy[v¶…ûI^롹oÓßEá†Ü3í¾Ib Î?ˆ~§{ky iÚ#“~ñ •סaÛ=½«&ÎK­þ+¦™6Ë)ò¥-¹ëÖ³¤¼{Ë»‹¢6¼¤ÉÉ-ŽMZÕZ;Þœ½ÓFÊHš×í“ܨ+.É `UÞGx–æ&,° Ž*´6`žãëW$‘‰2|²HÜXqŽ´(¥.fξX¨Ùu0^Í×OK¯1 É#F˜m I#Óæ‘ªÀWa²Ö+O&Ïš¤••†zã¾µ‰¢C&­zLmp•FH?tó]M¥¤ÚpL¬ÛX·Ÿö}ErÞT¥î¿‘ÐàªGÞ-éž&ÚÛYŒÝ[ôYÇ2/øþ<×_jÍ5¿™¦ÝÅ}kÞ)#Û=Gã\ÖBí|ûr7“ŽCU.n´Û Ñ;Á(=À?C]ôqJZ=Δ6Øô•ò§È–M:äžc“î1þGùÒ\ ® õ±ÇK›|ñøGášÇÓ`3õªªFiÆCÚŽ^ˆwî[Yáx#H…0V©+dR4„ý*y.>bìH>ìc>¢¤–Þ6M¬¿\U(¦(àŠ´&Üy5RL¨´Ðë{[xg4>˜Õü09*¬$;€HsVÔ’TKÈP* ˜iª×Ñ tí«)ˆÕ{S· t¤‘ýê=Õ[’ 'j äqFC;¶­=º U˜¢gè3M‚-–#éWUx³œí¢.}HÙ„Q•ÇÍTÌÛO*ìɹIêÆªG#$þ ãÔrO¡L r yœãÍ3ÅÕ³Î+KÄ‹H„6âz\OSGÙˆ¡`$òqI´Æ“6×íTÚ OVÌ6HÜ“ŸjŽ{TA…b”j¤ì‡*mêfÕFM.õ_á¢r"b WiäÝ+™6‘1˜g§Šª[&˜O¥RåŸ4 ‰åÍE“HMW*'™‡˜E1˜±§u ©Z©>´c5(AOH~o›§µÈY[m«n˜ùsQýœÿ‘KÈÏ^æK™Úye2Hÿx–äÕ©± ½µÂ˜á“;_Ì„•À¡ ž{v¬¦ò­Äo$ ¾{ú{}i·wPÜ<Ò‚ÅÙò¼äéÏZù•ǬÜ[Ñm­æ›3<¼Ãq(ØÓB<•çÔ‚8ÏÔ7ºF‡Þ*…;¢L¡ÎîÜåG§|ÖfŸ$cšxîÄJåcƒƒ¸ƒ‘ž»˜âŸ˜ÙUòH?±¦î™ƒº‘sH´—±¤€ +yyùA `öšÒÕuH/ü©EùhÄ[Z'$ЩëŒ^™íU¢¸1Y›ÿ&5gUgŒ•bôh'JÁÔoî® ÿ•%!¶ŒAèz¡Ün®z’AzL÷K+œƒcÎ>¿•^Òm§ÔçHàhÕ™€ýë'«\p§úV•ÝãI"«ˆâ Êãø3œùï4;-îÚâ!­Ç—¾(]ð8îrOçRÒŽ¥IF:³‘ÔîtæÖm]-nb·‰G˜ ˜AÐTr½ÕåíÄZ®Ýûv û  ?]¯b‘\GÛbA_xä’zúí+U'´–ÆP-¦™Y6“I#éSÏ éÎÚ-Çézb\i¢âi‰ r?Î*¬ºÂر³€Ë’á×8,hÁ}z¶øP¤D¤Fª9.Nw×Ú°^Ùî5VYÈ &~`Aùˆà~xâ¢?¼•¤vÎËF=5 sÿ-ó©ã¹‰Ç?:©$Ö7)i*Aw#¹ÒmïÏš5‘¥Œ) ¿Â3Éü½=k`ê—–6Öæ4XÖæ3} x÷õô®SÃÚœ‚ú;A+$N]ËJ¹?˜^õzõ.a¶Š8ÏžÆBaıÎI8ÏQŽÞõœ“Øá­''rµ·_>Ü*²¹Æ8~TšO•§ùëg/* Ú{|øÁ5›5ÌÂíÀÛntQ¼ÄäqžÙ¥jF|¤·7y)o$ý7Î9žp¦”–†¶&º¶-ý¬šÛ›”,Ñ)±/¯‘_åYº¸—R†ÞÌdå£^ÿœV­¥ø¼Øå0A(ÚD ËþÐô÷ª:¦·dvÛÃ":!88'oОÝ))ÊöHˆ8Ýha`>Y#?^*ìË•(@ÄœZÞ±‘µ+”µ³VšwÎØã]Äàdð=…G+à Œ&pII´ç—S³‘ Ò¯?±$œO ùÿt)$þ4ËÝY¯UÐ 6㊻qc& ^îÊÖF·%±ÏN+àbVšŠ“æêj¤ùRfΕ©\Y>-Üì€ãšS¤Þ¨J¤v:«¬Üðd±Ejé¾!òöG|­4Jp³¡Ä‘þ=ÿ}ë>ßZݶ;ãòÿÏuãÜUË­&)Ghã 2ä0«§ˆ”4™•J–±Üí ¼k‹a"4z©ïÑ×ÿ¯õ§B¨Iþκ1?So(Çè¥qÖ!²Ô>ÇÚ†¡$žVÕUh>ç>µÚÍ5¼Ÿ&¥ja~ÒÆ2¿_QúשÍάì6c}²¶”tš<ãôäTŒ³¬@ʉ{nz:ãv>½ .˸£ ‰{lzrqìýuB“6“½Áëðÿ#L‘`Á;lnyïm8þ‡úRf8å%„–Ÿã^Q¾¿ýqEÇn£iÿm¢®?¤O´w[Ì—¶ÿÜs’=³×ó cfGâK˜7Ž«smÁúñý)éãµ±F¾ÕšæíÅ4ݦ85•¸úÒ†õ4{Õš-{òñš®×,j ùâ¬E|håŒwg"-Ï#aFML-.>\gÖ´"Ž8“å>´ÿ3­f꿲5Ô ¶n¯Œä÷£Êu~Gâ*È|ƒóR™±G;ê« û~\L1Æ*¬lªÛO"®#È5Ï=ÍbFñ¶îj&VO½Å]’k6Y 1Ç­»¬‰éÍ([‘Q¤Œ§ŒûÒ4™$µU™7!ðBO kʬzñL3 Z(’Øá!GÈlcž 6i̬Iû¾•™É4ÅÜÇMZŠÜ‹ô!»>f:U#Z’[’œ‚*‹Ã·$Vôä­c‘w¹&)ûh`kK™ØŽŒÐh4Än§Å3¿4 MÛOjŒ`+!Ý ÙäÒî>¦¢ÜzQ“ëEƒ˜ù¥‰•~éàûÔEºŠ<ð?‚œ³+‚@õ†ÙŸµE9}Ñ™@ }^}}+[Ão©ë÷7ÌËÞc{–ºwÏ‚³’ºÜ‰¥¼MI$Ô5]..‚GíˆæÙ… Ç^1Ͻ­¥­œQ‘8º¾i –8ÇÉåÁ8ç'¿?ãRÉ0ŽÝÚF%¤c…Švžž„ ŸQY{‹I¥Emð‚–p>^p1Øb²QÖÝ µŽ ¨—&+yŒ© ¶F…›¯°>Ã8î+6;25«v™­Ìê#cŒŽ¥kÁus#4²FкîªzƒÓÓ ~U Is¤êpÜ^ìG—‰p.„û{UÒÑ*³“º)ê:-¬ ‚ÊYEh÷‘¸ç=qÓ§¥Ao¦È—© À«È¤ÚXÆ3÷±Á5cûRK™ŸPºPe’BbŒýñíú~tã$÷¢c:‰_ìÈ\z ;É"=¥E£(G¦>áy¨»’7VÀgþÿUhxwBŽ÷PaÁ·|Ù#¶]Ò:ÿ³øãóªRË}yul6w‹½u:ÓØ_!oÝȼ\ç$Aöàpi)IjÊ•W¯Qm´­>+éo´t¸ò$V[O?œü¬1ÜO>õ9‚<‘•©A'ÿ×R5åíÕô׌‚”†\Œdôù=ŽêH¬!Š9Ê4r.ò½H?ÝÇlgõ¬gihÌç'"õ×…nõ-ûD%¼Q(·l„e qòž§±Ç9­K›¦øVݧŽ;ªí¸VÝÉÉPF:rEq¿nš-Énïr¨ßç“Áì}hÔî]ôø"‚úv#æ1Ÿ”+c‘øçVÛÙhew³jRi:}Òì Ê$p€Œc¦<ž+—HlžÊF,ër1Ù :F8­k9žæ{k;ùfg˜‰pñǸäó×sü«sFGÓú°Gÿ¾N3ZPK"¶›¨[ÝDFD,áøüò+Å È>ñ'깤ßꑟø*ÕR\í›­üÝÄÉapˆŸþ?ãOX(ûu¨•:‰àëõÇøW‹G{4CÉ*Ÿ»™‡õ«Öþ$Õ­°!Ô¯”€MêÐñMTbå=u ²F|‰c¿€uŽO¾¿QøÓatVòí§kw=m®FTûß•ygü%Ú®àÆñ<ÁÑÌX~+Š×ÿ…‡{4{.ìôûŒdnBš~ÐV;¶ ¤È²ØLzº|Ñ·×ÿ®)d\m–hsýÛ«Cý?Ãò®*ßâ°áE0äf#8‘qí­ñ¶ŒÉ z…‹ž¿» §ê3ÏåOŽ”ƒp»ñê/;ãù%O¯ùÑ‹‘Ynqÿ,¦%Cßõ¬(eн€6N1V–qŠÂ:šwÚYiJÁU±´ÓƒÆqUÛØŠË7LOZO´·­5E uni—òÁ%²M@Óæ¨›‚z“Ló Z§Ü—P½¼1«ìÈàf²„RÇpTäÑ(>€¦j¶Æí@tA‘Yÿl㊮˜Ô*M•ír[Ùª’ɹp*rzšizÖ4ìfê\E3¥‰¦“Z£&ÃñIILAš(¤ ¢Š\P!(¥âŽ(òèÏŒäTök—qPFs"ýj͙Ĭ=kÀ–ǯOâE¥_”ЇmcÌ{ÃdwéUŠ‘X#¥“é—ÒiZµµô<´.QÜ~YÙêK§éÿn·O(Å>ÉmJ¯1«aüWõ®œž¾•Ù,Q]xjÂô¨œÚ1¶˜}ÝËÊO<’ö§-baUirÅÆ„¦ÖÆõ¯`•î™aXV<(-Ó$ãŒg<i/´££O-²„óØ`®ï•ƒgæPz`žpÝž`ak¢6¿ rF?,õþF´´Ø¦‘Ú'!Þ>0Þœã$t¨¼­c•è«=[LKgÄSÙHwy§–ž8ë¯|×>¶ó£ o‘¤Ý˨ôõ­gB.ùO1DXùKzþ*+*Qä!yvüÊ:ŸOþ½L—p¾—uw=¤1–;Ápdg‘‹|¸:œš–C°LÈC·|͸²îõÃ:ý¦[]Å7ÍÒ(òò«"¹Î;÷äÓô‹¸,´È§hén‚´¬~WãóükH«+£XT¼omLÛ; õÍBÒÒÜ/Ÿ1òÑXí åÐÔñè³Ùx™ôÛ‰”Ç$Êÿ)\g9÷­hÝÅ;j–/$ ;Þ˱X>Ý›ˆ#zœô­‡Òì!Au3¶¬—"I¼¯õKžœ ‚ü}*[fŽ¥Ö…ïÞ Isk 1Ê2ä`öú𽩷*²°.I]!ëõ ZŸû"]GZHÄ-${ùXRbÉ ûçšÄ¼…,5 m ¸–H•‡ÙÌÇ$¡ú~•ÌåÐÑþЖaö¨QJí,\ØzûþÛ»i®4׸x¼›»wùÇ–:d“Œð=ê;IÚ,ªm—Ê€áWûÙÇQ×§<õ©¦¸K…—•c˜É&¹&NžªqÅg]]´´qÄ!Œ/$㜓ëR-Á–H炎‡aÁõÀ½8«kM qаÒvŠ(ös&øŽ>\cë×=ù♥ aqtg>`eÃì?ô,ý)—÷q\,1.$ »fÑ“œó뚆 „XÒ+˜ÂH3îR7(?øBO©¬`Þ¬ŽúW‘d¸Ž(‚;p©·—%Œq2p‚˜áwãüiÒËq¨Ml³¡ €ˆ²ƒsÛ¦G¯\YçHŠo´DíÐÆ3¸c¯µKÚÆ´%[Ì‹V: °Áörë"FrŒKVôü+ž¸¹ºÙžB7Þ8§°<–7 uåùÊXñä°|ÿŸ|V®·cs§^›kbÊÛ|ÖëóIêxýkUK&÷´Šz»œüw71ɉ3–‡îs·éQ\³\Ü<òžFÜØã“íKçcøàiË(g SïqÖ´äiÞÃN ¯å`änÈ¥1·÷åW E2Ç8…–rHúŠ.ÞÅ´–å1 ã¨<Óš9s>µ;ÙÁY;Š˜=?:`’(tSùÒ™$\}ñô«rdc¯­(@Tu¥p·™P]̽ÿ”j¤¸†ª>qùp’AÓpüh¼»‹–=‹¾ï1ç4Ò_¡U?ð ®.f\üí×½<ÝËŽX«šBäƒ%WØr# }Tjâk7Ѯս½Uô’?*Îûcåv§5rÅöú+r›L·pçùŸTK„{š°ø¿W‚%Ž=BO-FI¸ÇãÍOoã]RÞPêöÎYLl¡¾ W=+Û}®XbÜêŒ@p8oz‘ôé”—K‚y#øÏ>´FWvècÍÍsA¥Ñ7Ì‘X•P§МõçUë {¶½¿Ú!¼w–ó~V9QŽG©çέkwëo«ËäÁ¶’Ý3.x8=ºråíU…ÅÄŽî‹·x ì0¹Ž};f•ô±Ívôa>§uco&’C»ÌNpÄAàŒÿ…Vid“ËŽê!æ$…&Üz¶F?•T†yìošvfêy ôÜ´¿³¾Ô¬×’´RñHz1ä“ëלP•» ‡Ãþr,­$%°Ø@À÷êGô¨m¯/ôèþÍ ;̳‰6c‰ôÀ¦\yr-³¡IcR„O-X߯¾*Y¡ó-àv˜Ç /¡¹8#°Áú*´ßV(·mΚz@¼_ÙÜN±p1»‘×zò+/šÌ¤–È‚âÞ=Î3æÐõç§5JëθÒÃ3Eqäeé sž¹? ¯§Û¼“G$‘sûÇáØw\szÏ•êVÉ…¤WãS{é%–Ú!•Jž<qŽ¾Õª¯nåZåfó¦Ö^%Nœž9Ç8éžµÝä÷0ÆÓ´8%Z7__ëÅ7bîyLˆÑˆÆüð  äþ‚n’{¼ºƒÍBcr£e@QÇnzŠV¸q¸Ï#âRl“ŽÑÔgš–Ú³–aé,I!c€C€H㯃øÖH’+AdFÜ ÅwuÈ'µ(Åmrz’ÞßnÃonÈÑ )* ¸ïÓÓ­J–v÷ew+\†9;°ç*G¯CIý­uµYíÝ”Æì¹àwõ9ãÛÒ­‰á··„À6°‰U'ÔœŽ¹ééøÑ²ÐÒ7ؤ±%ÊG(2Ü@1c$Ÿ_§¯ZŽÛL¸½íê;Dϸ±<¿NyëÖ¯ÛKoªÜ<ˆ¦L4Å7”P8Ï žxéùÔí {›[;V–8@‘˜oúã§?˵+¿™~ÒD—SÍk œ LcqbyŽÝ1Ó§&²µ‰\ÚåQ—æÛŽÃü+r(§ºE¸šB^$ù^¸=³lf£¶Ý&ûC~ä‘•QžAÎ[Óüæ¢NœcM¥º9«;yáýü²qÈnãè>”·Ú€ß„w•:í—¦~ƒŠ×{©æ{™mÒ{4ûêvôúõíÔñõ¬ûß _}õ("gµX–gÜ0QXœwä`ŸzîçMݘheÝ\Û™m—lN«æÝùqM’Ï $K$ ªI^Iª{K8AÔœs]&¹á¹|9«ZY=Ì7NѤ¥ 99ãô¡Ùir£º!uý×>†¬eÄFH$Ö70Û¬“Eå«‚WqÇ;ˆì2FçûÈÙXY-Q¦'£E6Ò킃=iiPMnŽY#5©ga}©ÈÑXÛK;㋜}OoƤ¶¶—M´”ÞÛ‘€a(ÃæV Éöû¤gÞºeÊž§:l¯§øsN¸Ší®og‰ãtA" ûœñÚ±­¬Û&Y%)åÆYi>aÈöã'>ÕÐÿjnµ–ßìñøÚTr¸ô&°-/&´ÕœÄW`à ÷®jÑ’M¤\ºšÖA!ˆ²Ç#óY]¯ñøŠ´¿, ûÿJ±æÚ¯N2…Ùu¦ã#$Åtލ$ûPRäu€þF´¹ˆç±©Ä€VŸWƒ#ÚÈÃ’VŒ|ñ‘íR´rúg.²Á„dßÔTÀ~éAþírÕ‚Œ¬ŽŠRrNæ{2²ð¥<<}Î>¢´8Éû‹ùT/ y¨6Œæº[sˆe_Ýäßz6«taùÕÃmì:¥<;/aQБYÔÃ8+܏׿v°Ù"UÜ“0<ŠØd. _·¹µƒMxš6ÀîÝøÖ0k©¥D÷F ª¹Œ©ãÔß=º´±±W pGnÕ^4ds&̓$þøÖkÒrvÇè)Ø”ô³C d…¼‡°­¸íu H"Oû‹tGóúÕ3KŽDÃhlü¤ŒÿžkNacz3É=Oè)7ÕTŸC«ð<–ºtl\*•Ú„žù­z בhϲâ-¿1f F=ë×!‘&‰dŒåXdô0U+‹9fº’qHh£Ú@RЗ4îR`Ô™qéMÍJc°Í¦´ðhÍ;ŠÈn(Å.hÅ .)GÒ”Ñp°Ò)1NÅQp°Ý´m§’)¥¨» !6â—¥&i(Ù÷4ÓFi( ‰Š1KE1”õ\ýi´ âË  V·.Ðgn>´¾aë7ËŒÒ/ ži<ÕÛTYÉêi»½èöcö…·‘OQö–ã¥!cMÍiØÎR¸¼QŠLÑš¢E£"›ÍìJLŠJ9 BñIŤÅ.y¦æƒILÍ%PfŒÓ¶7÷MŒƒÍ+…˜ÜÑS}»S|‰=çG2+•Ÿ,Ùþêõ7–M¬ =æº+äÓ¥šÞm2=§aYÔüÙÈ8÷çÛŠç¦{‹™üéÝ¥~ælœVΊ+q¨'R~W¯ zFìïNÍ69PäƒÁ©e´‰ã´ÆC4„¬ÛðX·ËƒéƒÍjÛ:[Î×'˜âBÞT‘ïÝzþyϨ›u+4$Iå³(,zuzç½ö7ué¡>Ÿ8{±awn²É¹`ˆñ„mà'¾#>õ­,Áyr÷ %¹‰J3…UQÓk.OêSYPkrDªð[Ýl-´}ìzž¼š_¶I/™*œ¹å~làwÿê¤ôÙòošÛz”nÖ·–-ʦädäŒÓ98?_J#òiÍÐh¡Â—ò¹8cŽ{ÕDx"²y®ÚcrèÌ€SÛ<äu犨ÒJ¬àDdäØG¨==ùªÖæ}K¢ñ—S¹1yaå±Éê?„sþx¨¥ºmA-¼é[Ž€ €ã8íéT´»y’è³H|”98n]±ÀÁÏ9öÇzмb"YLi´ü§zY±ÜޤûÑ'kjÝw+ŠÒk`JyÅFFC(ÆãÏëéZßosKYDVï'Ž œ={ƒÇVfŸ R$ÏlȤ²ÊCî¸Àãó«±Za+ÂdÆû2@$“œgí `ç·­SB[ØI¤Kh¥Yyi\º’©ÏãPÛy ’W#p]ã$'8ü…Iç[5¼V‚0n$frŸ(=Ôã5VIäÿDÂ2d†õ÷ÇÒ¡êKº$";;´T¸[Èä<’3Ó^júê˧Ü;8 [´{CdÊqœç¾:{óXÉbO*»|ÉË“ŽOCÏQW,®%›J¸’EˆÅÕ ÃÄãòëùRµõMw‹¤‘Žûi÷Á¶7Q¡*~•š$‰´ñ•cq¿©‘ë@3ÍæyŠ‹ó# ‚ÃÚ¯i–ÚlÐ\ÇxÏæ®8Éî§¿­+ìÕȦ‚ÚÚÕdó¥’O8,* žç?¥>Þ'òq–ÜwÅ;ìw+ „‚yþÎí#…Ï¿Ÿó«–¶ &ˆºœ·NdyAaÛ“íÁ¥2Ó[„6òÉØZ·œfuo1I!'ƒèzÖ»ZÜÇ¥K`€©µÈÊΠí$ãŽü`ûÖnœòYëýˆù¢cŸ1†2 9ÏøýjÞ¥¨¿’äŽlªy›r¤ªŽ½ãXÉßBZìAÞ¤òµ¤13÷·»íÍE6ªï}±í Ms±ÊÜsœò8õ«:œŸÚÅg‰0äÚà® Î:Ž;UK™ †yït÷¸Úld+éƒäG¥TcÒÔ—®¦‚i²Á6º¼w2O4ÆÓ‘ÏàvçÖªj–÷×SéòNm¢v’6Á… Gläy¤ÓM¤W/6¡g-©–3²V'Ó¨½këPÇ ÑŒbyüc¿j¹^RÑØ/2» ¤ûÞfB9õïŒq×ò«Pjm¨jMu±ã$ùҘϳ×oŒ‘Ú©xRæ ?Xû]ÄÌ#™Dtµmí/W^–âp&s"¨ ó#HÆFjÚQÕß±ªml%î¡utŒf ¤r žž¦ªxvúÒ/·-ä <ÒGäÛ.ܪ3d3ŸuŠÖÔ 7¥æ³"ç*"ÃŒúöǾkŸ€î“ì‘Ã%¢Ê w™ûYÇL¯ZÎŽ‘vÐÒvqZXêü?«Ëá»K´û`s!`Ž6¦3·ŸÇµfßø®íì®bG»Þ9–01l¶[¸#?§¥E­é–¶Y³î-æf;­¬|õž:sé\ŒìCþùUÂÒslÅ$õ4ÞöHd1ãzÓ >f£zƒü«1 Ü2y­.o¡úå[ÎM§sH+IRËy&š·°%[ uÅ3Q?è’zÄIÞ0B¶ŠT*8ÆÅb#yFæ"êÁ†9©æ7èÕ‡|’sÛúÒ­ÛÇ N9ÎkuY˜òšž hjà»îf²$œÍl¡ºŽõ±Ï”1ýÏé\Õ¥v™ÓAhЄáºFåiaeÁŸåUÙ\Œäz†)Ù%Sœ¯^k¶UÇÊl®±¬ËŸ›S·ÿy^†á&‰€P8Ï­gÈÙÔ ÇiTÖiÂåRø‹ê£æ®i ‚ t©vcu&Ó¼«ž¥´(\ û:ýÏéLÓ‚ˆÆN3б:j£Ñ?¥OáÔO)Ù±œ(­býÖsÖ—#L×2…E*  sÛ~SeeiN>lqVF<¡Žy rxéÖ¨Ü[OGM¬ˆ€ž ÔÓŒo¡Âliq–¼Q0ß.ÓÍzͺ$pF‘«U~•ç¾Ӿé,b╳uùpzc·C^… ‹*åN@ã¦+ÒÂÃ’÷3–¤”¹¢Šë&Ãm§…-ÍD:ÔÂ@1ŠOÈÃFjBU½©¸\ñEÂÂqŽ´ÜÐzÒS¹¥ÝIE(j\Óihi1ÅŠbÒRÒf€°bŠ( ¤4QšJ(Í ”RRÐAÅPJu!¢áa1F)sIšw„Å¥ª·—ÑÙy>aHûrNëü¿:/mBÅœQ\M׌äþÔ¶à WÆíØÉùˆü21]†»kzoeFŽ; õedþÌV+.[Á£ZŠv>]Ý€Îk*]zÊ 'IßÊhdwqœ2=«G4•Ør³Kbªéz¾¯h·ÌJ“‚PkGÉã$ЪE«¦¬®E©pi•W†â¤ŒªòG4ÊJ ´,yàC05^Š\ˆ®fN'Ú8£í'>Ôr¡s3廘MµÌîI nT²©ÁÆAô«–„‹å ‘ÁäTqiÒËm%ÁdHÓ9ÞO4ûoøýèkÆn飾 svñ3˹_ž0yúÒÝÅÜH“É·k`01ã§õúÔpNö÷ "0p U¸v–w‘Ûs3d“ë\Èéj\úì]¾’ÚäžcFø»¨Së‚G{ý;Å¥ÛÍu#¨ YSrã®ç´Û9ã…eÉ Ì…NáÃÒ®¼¸•¼™¶>ÕUÙéƒÓúÓVFÑÑ"×Ùö¤ë.Ò¬›¼§¯OL}iÓ`Y½¤o/›µ¤Û· FIúçSØÃövŽêôÅ0™™Xg–P rO§ð‚Û3ÝÝ$QÜÄ’n/ gŽÓÎ99ãš[í»ï¡–."ŠÚ‹rÞr7̼#œûƒš·=ì*ñÏp6y¥Ð¤!™Æ8ñÎêj²ØI$ËßÝÆŽØl¼àôôãñ¦[M 4/X爫D[”|uGùíNÉ…“¸Ù¬o"s4êÑÄêA®ìÛGOçVt«…Žy"–U+&wJ:«Æ?ÇÚ®] ‹Ë¹no&ó"pYZ&* ÃÓŽ?Ƴ"… ÌÉ#$LFSnvëŸJ\ÚY“±W|±^»ÄÑÝž€gÿ зû4—[n¥òY؆*¸ÏüºU8Ò;Ùž•-£ä— 0ÈÇ=?Z¿žó‹$±ÈÌl?¿>‡“ùv×A·r]ÊI&ÅË6äàdžºLâÖR¬4˜ûíùÖt~Jÿ±ä$‡ýŸëPÕe&¬™cÂÔFy=Gä+SÌêOÐVúœÀ1ÿ<ÿ¥`#—‰³è;WDª>ʤwúV5z:œØvÜjaБœQ pãäOʦóTä``JØåcà”+9ÉqŠX\Éqg?¼Ϋ‰-û¿çSZd· `y£Æ†î¬8­N‰— ƒÎM4¯ËR¿jimy÷=4Q™ÑTûJ­¦:ˆö1<€3W&Z/ÓúT4q˜ŒŽ +€?Ïá]ߺÎLQ»i,q¦@cŸ™² #ÈËvBmHäµ×øNéUÖÙU€ãÔôê3Çù÷®èNÒZÑÙîáÈéQƒƒN2Jê~D¦) éI“NñÒ™œÓMõ°áKÐTo"F»™ÕG©8ª­©Ú«…?ì‚iˆ»š*·Ûí³3U"¬uæ•ÀZJzò) †ŠÚZw¼QÅ”o4´”sKMgXг°UKMÄÄ•î˜aÍ'$·aaô))ˆ(Í”´fS°1ɦf—&V^³­Ç¤}œ:nó_œ`¦“’Jì,jVf±¬Á¤ÛošVÈDÏ¿µ@Úà›GžòÈ)!žqïúŠãïî óHÒD’BÞ§×=LBQ÷z”£sJ?_4Ä¡ vǵu:F¤º®ž·|•u8"¼Æwòàqòçó?ÒºO^H·“Zò²<ô ãú×%*ÓSWwEJ*ÇsŽõÈxÞR-ãq³' dq׸9ëšëË`W¯"ß0[‰#XffgVá†2 àûIî8â½)»EܘîyüSI+¢o!”ü§=9é[ÚBM”÷*éÂRÜWªŽÈéì P‹öùU6‚u!Oêjk{™­ãXÌ›Fã&Ç'ãÓÔÿž•äròÊûž•m­Áká‹A,›žA°ã–Úw|Øúyô¯;Õ/%º’w•ØH›²:dʲdµ]L—$]y„¼jŸ(ëŒöÏÌqþ½s’܉&ùŽíùç?\ê>D‘ÝøGZ‡Jû<Ìvº|3ºí 8P?Þ$ÿõÏ™ÔW€C|ÑN’,«¸à `cëü½«Ö4_Gqµ­Ä¾eÔ˜É\wÉÿÌSÃÖ´¹^ĵc¤nFPc=)Yɦ’kÓFm¦5— 4Ó‹fšj“!¡))h§q E-…cçíE¥¼† háŽ;xX!ÚwÜ÷ÈÉéQÜiË´ž8ÊåˆÎr®8Æ>œþu¡©ÏŸ ½¬¨ñFä´²mmÌy?Ì~B¦±†}BÕ”:21,ŽI;G,UF=Çà6Þ¨ëM­Q’ß+ŒÔ)ó:FkhÙý•%kØ7‚¸ðs×þª§rÑÒV)Kd  ŽÜ`u¬–çzª§±VúÒ;fQâcœªà)ô¿Z–Â;”“ °3®å ŸóšˆÄ|üβmcƒóV§“nÚâþõÎÞ%3”`ãå>ƒš­Îy»ÆÒÜ´·óSzI"$aŽsÀüòªöZ”V¯ ÚEæ;m}èHIÍM{>Ö+o•“’½÷.zƒš«zågÙ+'šØRr§ôíš‹½ WÏ<°ý¢‡Ï–ÎŒíl~={J© ¥¥é†¥&ã~0A#¯Ôw%¹bÈ€¿É.å 03óõàšŠ4¹¦f[O%š €0rséœV±wEZêæÍÍÃ[éÓØ¼h—î(„–µqm[M‘f•ÆÆ`Æ4Îc_ñªÚ¦¶ºþªn®S*Ì'1øb¢÷{‘i4èdÞíƒÁ÷©w†—hì+NxíeÝ$kä¦>UÎOªØØ(&êîO*ÜýÐ9y?Ýžç¯JI©6ÏF„¢©ÙoÔì,bÊÅó3±Àèp©>• Ô-¤“ʳmåéÎä¶}3Ðg׎+FêâÒåàݺ+Xä¶=1ßæÏsŠÈ¾²”NZ‰Èu*w=}‡Öº)ÉlsÖ~øÓscö'Šò9 Òn }ñÓZÍšv’DÉEÚr+¬Õ¼*·ÓõkkØf»˜ùsBd³Ï>ý9úŠäeFŽå‘Ô«#‘UW±’°×c·½I ù"?í ³·¥>>#O÷«AÄèGzå¦Î÷uKÐ×+8&wë÷aG©ÕˆèFjYFYOû"£ Ú¥}ß÷Ens¡!†EjXÿÇå¹÷¬¬’ãëZv?ñõmþõ)lÊŽèÑÔ”ýŽ_¥sÀò®—PæÆ^½+š¬èü&•þ!ÑýÙ?ݨ~cž*Äc‡Ï÷MBOaZ˜–¡ÿRÃý‘]*ô8ÿëŸô®jõMô®–0 œG¾ÏéXVÙ}ÙÊô}jʱú¬ÀyžõÞLQþ¦«}®æa»í WØí–ß"ôГ#®¤®´2nÛšR»—?SS*…(Ø=«0]IÔ‘Rý¥äOLÒq`š4÷©fé¿ïYY˜ŒÇû¦¥ÞÆߟN•%sËpWî±J—ò d‚= c‹‰ÆÌŠF¼‘¼múš—jW1ÒÅ} ƒæÊš°[”`G±®zÝÚEÝ”ÛìsVã—oBxêEJŸb­rÕίgi#FîZEê«LmbÌX½Ø|¢pWøºã¥y«ß5ÕÔ’ò 1,3yÍ=n¤–)"-´d½2yçC\QMö)Ýßx–ÎÞÑe‰·»Œ¨?\Ÿ¨®n÷Äwk‰Já¸8ëÒ¹õ¼Üí ’G¨#ü‘þE[µx-®–æämÍO-r à’O½fêN¦’cI:Þ¶òYZÚJH®é±ýìôü+"9n£Æäx|öëùÓ5„d–Ñ̤8arH Ç'ééYö÷¦WŽ „…ÏL–O§Z*Fï{…OÐ/×PÓ‡.Ñ-‰îpõ­3\„¯àµK¸Y’8•†Üž§yïÚºxï­æVe•@SÜâ»hOÝQd4X¢£ócÎ7®~´Õ¹…ähÖhÙת†…ts"I¨¤ÎEÀ\×âÙº². Gµÿ¾³úãð®ß"¼çX¸Ý©]ÌWpÜÀwPqÓ?e]ûŽÃŽä¶o‹9“À¹,IÁ¯ÿ\S®ž Ë‹(K´¤o €vŒŸÇ¯Z¯vÐ鶬J³Þ0 q€z`uúÖ&›¬nƒDK6àøÜsÈöé^lª:M¨Ý\"¹YìòªHqÓ=qþ{Vž‰¨K¦Ï#ÛÄ…6ãàdéYÚÜæëZi-SËI" SƒÌO瓌z è48ìL+<Ñy³¿–ŒÃœ p3[ºJS÷^„¹+ju÷ ƒF[͹‘ãʧ«c$~?•yíä°Ïc+¼Í §rª‘‘òœ¨ÈèyÅhø†òí¡†¶TLm2PôÏÔî ú×==«É “2¡Ôà7BãÛ§^†´«9FÐÜ •®UŠ5‹P(fT ÊZd9!¶dðO'>ø©ç¹·[ €B³M!ÁoëŒÕ;å–›yKHÒgy,¼©ëŸ|õ¡¢#FÜäó󸟩ã¹5Îågî£OR½If”rˆØ€œð;UfÙ,©€wuâ®<ŽÓ³Ç#ÄUB€@1úäf«\ÊIiv,NHÇ>µ‹Hd.’$Ê>\('¶+¼ð6›-ÅâßL;t Ç‘#ÀLvúW IÏ$_6=Eoé×7bk7žY£†ÞÆvUÇ3N¦Ñ2½ŽãÅ~!6Vr[Û¹žÃ'|û×?áN÷Ÿf¼œ½±ÿ–’¹ë\Ù5‹ôòãHÞ1µOÊÿçó®}.ÎeH•NO#¶O§9®Šõ\šä{£¡ôB°t §!†EÉxs\¹žÙ~ÐñãóÈÝȃü⺶>~è®úRçŠf-¤]¤ªŸmÇTü(¼Sü&´³ ¢Õ%U7¬:GIöáÞ3Ÿ­at|ù¨Nò$P4aåŒÞXÊòIÏãŸåWl/ ¥–èÝ¢™>_/%H݃{ýÒ;vëQ@ÑG êŽß7V`7{güjä?liÒQk«nÂFMÃ1óyÇáÞ¼µ™×åb(óŸøúu yÁ«kª¼¶çå# ãýŸAþqSFn/4èáÞ-Ü…x݃Œäõ¹H$mJ$,K3ª0aW'OÐÝÛ³ÞM Áå\©GÎNãëÚ©­ýì6“XÝ”¹”„þ#Ç?†\%¦†ey]䳇O–Hî–T, 7ÝǸë[šö>•«½Æ­f—+5¼m´fRêú½q÷‹$î†3îå~†¥µ‘žð<ÒLKáY‰Éãëô¯³v½È³°kÒ„“Èû‡èX`ì<¯VZªïWMurëÄÍ)¿TDXŒœ)WaÇ^Ôû_ ´wRÜÝXÜg!fÜ ”øT°úŠºI?vámPgŸjæ'¿­u÷Íkì¶äì*¤n ‘Æ{W8ÖÝ›çäô¦œ\dÓ:ë;¥b€ÈŠt¿ÁÏðÕ³`=dü©Mˆ|¬àc¥lsÙ™¿Æ+RË‹‹o÷Å0iÃ?òÓò©â·x§„„rªà’EKب§sJø Mô®kÞºk²ÖDçæ²³óÚOʳ£ðš×^ö… þ騫Qtý¹À“‘Ž”ßìÁé'åZéÜÂϱ^õOþítœÙÅþàþUŒ,„G$Œr+b&+gwmÁö¬+lŽœ>ÜåÛ_ƦŒä‘ìy«gM ÙÛ.séR%N‘Éÿ|ÖêÝÎgئŠ<ƱN´Æ"ÿ®ƒùÕ±dA$$¹>ÔÅ´x™QÎE&Õ·ŧ±Ð•Æ ‘R84ÞÃÖ¼ãÕ[\î²SŒpE7ÃÂ/"v¯È”É<ô©d³ÿ>õ…gu$lÑÄÁåö÷àÄWU nŽ;“ŠN ,”Aóß­Z$“‰d\Ä„6Õ$ŸÿUvS¥û±(krµÕÚÆC¨å9üpÆý ÈÀ±9` üã­W»´mJé ‚C î’I½ÉúÔ6vó©ó9“rzwãéÞ±…7v;ðÞgb¹㎜Ÿÿ_éSǶgتÜwYW2Xìs1Áãó›’ê8­ÕÈydsÈÿëÔÅ=[z‘%cb=AßÍ9'?…\KÔÍ!£n™=+"‚ÊEËó씓ž¤tíKyö§ðâIIE:töü«HJN:ìB£­ÙЋëQjÒî*ç®BÿRwdšfÉáp½ñÿ멤ÞGÙK~ñ÷v{ÈðjÄv1Ûª,‘™fc•"<‘ŒtÍ^•r[cGC˜Á1Ø’@ÆÿZ¿ªx†-6æÞ6Pë'Þ à¨íú×?W pdÑìÈ`9§éQÝZK·eÄr¼€ƒUÎ1Ï=G5„$ãXvfdÏok}!‰Ý•ÁÁa‚Iç×ëíVt¸ á”–*±ÁàdOÒ¡—GÔ.®¤–h¥ýà;rŒ~cœdãŽjK >êÊOš)9R²lŒ’wÁÇjM6îÂÌËŽéÅòG ê6íl~9Ïmåóã% –ÈÛžƒðöæ } âköþrȸb²Å‚ªzÍ]³ðÞ£5âå&Q'|xSœŒƒž ‡{…Š«vŸnؘ ñéKbï]ªàÈAŒöü+Roȳ#ýµùS»+•¶iãÃ×ÁX,‹"žÄ÷£–H,EoÛ‰U°Q dÏ;²r?—5µ¢_ªLc•È,ÁvõÇꦕ6LW2yxÔò}9Å%¾™3ÈE¿˜êN_+ŒNNìVv-é—ò^k®Í!òäÜTx竽ëÙݳ!ËdöïÒo¦½ƒªÛ±[‚>i0p£À¢úÆY/„‰ÀÌ3»gȸõçÓùÕɶš)ÔM|-¬EÁ™°T£¯5jÊŸ1Ê’9öÆs\Œ§S‚ý[k1 (RŒPÀŽŸ]ûmÁ†á¾Á0Π쌶ÞÇ’zq[,MD’±‹êoÉ«À¨Ÿ,˽Mp¥Äd²³Êî[vålMtWS]Ȉ£O¸Hä‚›Ó'9ü±Xú­ýåטւ8ðTeÔàÒiTVc(­neê÷ò’ˆ­ü c#úÖ}´Á%Ý6óØàãÔžÇÞµ`Òæ½dY¼Ý˜-½a$Ÿ©$TCÃ7ëp‘ÂN2?ÖÛž2;‘‘ú×4 ÙIΤ©<¾Ye_³‘¸óæz沬î>R¨¿2í;ˆÎÖŸ‡ò­È¼9¨}cy[Ø`ê=Ïõ«š ÂWc¿¨N1øàÕÅË—•’âR¿¹’îÎäÊY%“«&c ƒíŽk2©FT«¾Ê$Æ:æ»ý/íØ½´Úz:ªíIY”8üpsPZhsÙÊg·I!R0ã€:m¹-XrÛC†¹ó$g‘Š#¦wüÿHe³Ÿœº‘ÀèXþ]+§ºÐõ+Êöï3±9TDA×ÔïÚšl¦i:31ÛÙ—pãHÒ†¬ô*Ý&òîO9—Ë# žÕÞ¾1órÞÞŸ•t·zUìÈX˹XœíãPÅáK¶ ‹YÌßx—'¿ÍSÊžàŒ»iˆ"[gàç<nÕrÕ§†×í£GÎׂ~¦®ÿÂ)sl<—µº Û *sø ÿ:Ñ·´—ì¦Ö[mBUÙå°_”Ÿ©Ï56’vè&Ž"{¿Þ¹ò@w?7ûC¸±'ICM¼ŒÎ#[x/R,å ¨»ÊT?Tgðýì@,¬Ê¤ÿp“ÇnµN‡coIñ ØÌ%WYY†Ü‘ÔgÔôÀô®ø¡Ÿ•­rðè¡,âxì¯ µŽÑÇLÀæ¯I£O $‘L€Œ´¦E:n¤tLÎPW½{~y­#X[÷„秪Çü$!-Á(|̓œ÷Ír¦…B%[€ÞPŸûê”ÃrБ%½ÁŒa:ãñ«öÕZ“ìήçÅ,@B¿>mݽj—ü%²ùdŸ‘ÿÂþÏžx‘‡›µ(¡"šÚMàb9ñÒ›ÄMý¢•$aÚ”µ›ÌP“ÓG¥$¬À<ð; 6’ç§€A=úÒo=ÔþUvÊ8å‘ÌØXI”‘ü'ƒ~k=OF¥(Æ-¢s5ž\¨šÊér¬FBòG¿TŸoâ”Y8Ù¼¼ÀŒüÜcž:Š’â v°–]2 ~Ã*°•Æà[=;žŸ­P‰ ‘²²H¸pSƒëס£šûœQ‹“²4E‰coµ+»å9Ý€;¸É«©Õ×úò­¸vŒ$€#dòWw=sÜõíY*#y2ѨçåaüÏð­KÞ<¬†[á:¨#9ïÀü¥£7pqÜ·á»;RÞsÚÛÇûÈÆZEÎ9àôî+'P°@ÑÚÞ&ÈŸåŽv 7Øô<IÅИ®6ZÝ(êX‡#~2@ã¯øÖ\w)–7f”–M˜Â“œ‚oðqmêMTã/"áÓocû; û=ø‡Ê¨>¼T¬/tyæÑ$i.›9ÒnÖ£*³ÎÓÆžR1ž8éŸÂ¥¿9¹ßrîVG,—’§£cõâ¡–ÚaÊ© †Us¸Æ2ó“ßÚ_Ý\Ü6«qr†xr+r¸\Ø` :Ç9.·”mffù@úý*9RB'qþ®M Þâ§•‰¾g¡³g=ÁV»g–(ðnÉ Üƒô'ŽõJc,úÓ=ºÉ$l›BuÎF?É«zeñK4±¹[bܦ9äñïÞ ¼€Û̶¶×)¾4F2{dàö'òª²°Ôµ»è6ãL·Íö¥+€I#‘ëÇ` gÍn‘¢lÝóò ÇNâ®=›Çc’Ù}ÁÇEgŒþ£D͹Œ ŸGù/ZNësXÔ¾TB˜,q¸s] ZìòifÄ\ºÅ(!£êôöÍP²‘æ+lâ-ãr’XŽƒŽÉ£QÔîÂý¦/.xC6äŸC’;sV íÎÍ*SŠ÷bÊ—aáÃR§ ïP…EÈÎ+Të-4Iöƒ Œb®3ŒŽ:ýjäšìöZhºÓÝ®­ƒâ_1Æc'Èü*Ü®ìi±æQg5åî'ˆõÅ=aäg"¶£ñÕó¶Ñn«Æs»?ÒŸÿ Íü|µ²È§¸`?¥Kœ¿—ò:TSÖæ0·\ç?…J°¨z´ŸâÎ2lp=ÜéJ<~û“6 TžrËþ¯'Óò’êf×>Ôá@ÏÕ±ÿ l®Ù:lAO¨Sý*|Z>dþη ýï)Oô¤›of6¬¯s4Ä?½A‰òjËø‘¤ál-Aë“üMG&¾\|–6‰Ç?¸“ÿ|ÕXžo"5‰=jFEƒÍEý¶åH6vÄ‘×Éÿ‰§Û_<ü{p«ÿLSü)8‡7›TwÁï@Œ«f’uŒÇ!ØàT±¨Ú8íQsK ;G¨ÄdrÔ²¯Ïñ ~làrh¸XBTŒnÉÏJâ™À¸lzëV"ŠIÛlq³¶ ÂŒž(Õ½b»YË5¥¸‰w´„à($ŽHçÒ»Ï ´³Bª|—eËc£AÿÐsX–>UŠm-§€2z·øÿýi¬ïÌV¯8a;Kô#Üp?:öpØ[Fï©Á^\ÎÇU~c’Í|°}8Î}?Ï¥cCr‹˜]Ëåñ’;qîr*´÷+ö)$ÚÅÖMÄõãæþ¿ÎóAv³¢²…ƒqpïסü+xÓQ\­œö Ö…´ºˆŽÔ…ÔðàŒóüéU‹ ±…Ü* àoñþUKP„¼>|Yg2FHÀê>¼f­[OæØÊr JQÎGNÿìàýk]¢’»ix“Z@vÇÊÌ£©#ðª—'o1r ¸*ÍžÜúûgü*5SM>LªHÀí÷vŽÿP{úS/E« å¸ÉÇ<öç­cœ´ÉŽ¥ ’Q°ÄÇó ÆsÛ?Ö “Ky$k»ÍeʦHzsXÆb¤HNÓ•# rNãÖµ­¦À̪yÜ I¯?Oþµ\­sD/£óQ‘Ùî9Ã*Ž@àr;vâ kuop©þ¨‚3´ªñßÔ~•ƒq)“U€I½¥ò¾qÇ®×O=©`Œ°P0@ööæ¦SN)Ø/¥ÈµIÞkˆ[K³áW’~sßbÒâ1y4—!Y¦R@ ¹ ÐúUS"Ì`g, cnÜõœû“ÍE6ø¤.vƒ»H9Sϯõ¢3N)0LÞ³’»BÈ[æÚq‚­ÇnÔçÔZßPt‹Sr•,ÍøÏJÈ·I£¼¶@¿t«°`;c?©÷Ы—mš„†3’X–ûÄmçé×ô¤ä¥­‚å´ÕF¡ ÔE݆.íÍ·ô-LšÜSDÛ]„¥ö"âö¬(® [²Æ…Bç®y8#¯Ò©ÛÁ4“o‹«‚0ëϱŸ¥[§NÚ©Ö\ßÏ Í¬p–14jÎ'®sÎ>Ÿ—jlÚŠÚê ßrÀ°bO?—ZÂ[ñ†GH”pA˶¯¯åš‡Uu©+ÄIŽ8ƒ0 ŒdzŽ;çšÏÙ«ù ›nxçÓ.æ“ç–Y}H'8ü3úVž¡¨Éoi#!Qzžç8þµÃÅ,’ÄʨÒd8Æ{WA©êWqÜ©(òòŒrN{þY©äRi +—íõ §²óœ¦UŠ…cÓ’?¥Noö̱+!¹(xíü«ŒÍ+¾ü’Få8ÏQWôÛ“ö‘ )lº¶qýÜgü:©a㮣åG^× ‘ EÙœ@éU§º’ê6kiÀC‚æ²îoJÝâ`ËŸµƒ2£®= Ó°6w|PÆørpÔæ°tÚŠbq!—Qž¡P<ÇbCúg"­E5Óے̱²¸ÈnàÕ ë”ŠYÐn`1»À?Kk Ô-¤r¡@#¨ÁïQÈírmÔÐYe÷Á@î¦Ƥ*í°õ5Š—3Fà3‘°}?ýU.Ÿ?Ÿ󳨑¡úzЖ¦×GnN}iÓvi©šŒ—»@VD W$ŽùÔ·Œ\>Ò›¶– :â£Þ¾ƒÐ‘î–*ð!^Ç©Å?í)5²¹FÇLPꀞ8#½U”¢awœ‘À¡É¦,¬QùC÷c#ÐÔos"»vúþýzŽ ´`Tžq‚)Â}ªWj—$“šjW Þ(À3ôœÕÅ ,)}>‚«£F™$cžÃ½#KÙ 6•lç¹”ÐXy¶½(Ì™Ï!O§JlÌÑ&æOޓΡ xUœ¡#‚MLðfØ ›yQÏÿZ“¿A †hÎíá=4²Çæ1Èc®*¬£ì­+1¶rÝÁ§AwÐÈÃn3YÞIêÇfK²ÜžRIO¡=*QoLàzóÍe›ÆV-#¤üª;Uˆ¦Î$ó>SÑj¹X° r¨Ë}ëëU¦±’ÎQÀüiÎÑŽÕùÈÈ=C¿z«a¿!EÓ ³€F¢5Œ÷aŽôË‹ZËn¯ðäâ§&@dÃÖ¥W‹n <š.‡©•ž­<µ€ž€Sÿ²çvÎïñ­2y™òרâÁO Rì3Í&µµIc„Îó%ê9éŒUKˆàóÝ#˜ù=ŸÓéëWnme·µIÇ#Hê¡JŽ ÏsU♬ĩqs´®Þ=k™­u:âÓº‹l­ Ê‘² ƒ±¾ôaxcÓ­K) Ëä1šmõͼlÌ©ã÷¤néÏJ€Ìª mã¸Î(}ØàÕš€à1Çã¡ÏjK*QÎèI?»'ŒwúTÂ6O'<£Ë1Ϙ¦ÂXZÌ«äîʆ,ràg ³Ç4Y§¡/As"ÜpÛM$€dr«¸G=?Pz¥„WQÆ%¯¸.Ðw+s—©<­j5cŠÍè"M®a$¹îAú•›3™n^h÷Ã49ó:’[=IOÓÞŸ]TôE$Ö·o “C„sÖSµqÜÍ]–îÒÒÙž;mÏ»`¸ps÷@Ç׿ãPëÁ©-üåš%’ß0ùrÃ'¿ÿZ¨5Ä·öäM†òNàqÉúþŸ•hµF¾ŒI0©‘ À¿M üÜqƃ$R/—Èä.ü\ý8sSÍu ÔDÖȪ‘ê>µj§s½²m«c#°#óŒçµWB3ÂM ÓÀdË“»zj†îñ–ëÌá¶1Žãžzjà¸YC˜Ý£¼ÆÈÁQ†ìT“ÐôÅgÞfo2âI$›¤›ÎHÇNi .¤qH2ÅÒlü»yÝžö­øD1Çw•{Œ31Œ×8÷úVv—ÁsçÄžcǨç|d Æyö§Ï³[æk°.YŒžY LÛýiµr‹c«¯Ú@¤ígà·~Z°QŠ˜¬ÀUù‚ýãô¬ø­§š†UT™ˆù';9'ÐóW…ÔÖèÂ9¤‹pÛˆû¨Ç9ü c- 9.­}Çy7É!Žà†‰Pm.Aræ0ã-Œœþõ«“\¬’[¤Óä‹áö¨èóÖ£[“ušè-¶ k_µ…KŸš,ÔóÀãõª±i/Ò1Vh¹ÙÇ pO éïÚ¶5,4Ä‚?žYž=ÅØv'¿ãÎ\ÕKÛèÌsZÊ“$ʰc·9ÏÌPyéVçt(Í©]ä‰m¼¹%“??ÝIÀçÜv÷5\„²2$ÂFÉÂI¸`Œ‘ŽãRZÝÝ]Nï…E€’ŒÄårr'žŸ­VºcxÛÒ ¸Ž *^sÒ¯–J:ìTo&Û4­eU1¤²4)$„$A£È=¸#þõR7´Žéà–Fn@ùvŸóŠˆÝ\LRÜËPºF7cv=¹ãŠHá´žöõãºÜÁ·`qß¹â³k]ÉqoF¬iÙ]ý–ÜÇíîw3žNGL{rj=r[>w·š5'…–2CaÈç¹çš“LP`/##À‹¸×§= µs¥ÿo ¹Gù ‡nOÖ¦rQѽ h®yk¹ÇÜ8yŒ8ÆÔ\ š-¤ ‘ÈZ=ÁÊ0+nïÂwä²Aåºÿ\L“èT àW,¯'޼ö§ÏhÎÏg}!Òmâ7/,ðŶ@ E¸Ž<}1Ï­S¼‰#½š8×ljÄ(.ê:×C§hº¤_¾ŒÆ ‹…*®3Ø÷úVf¥¤jñê2Km¦‰`c•ÙlüQ[Î*TbÅÉ&e4œzŠ[9-ÛcŒg¶b[,è(G«A'ô4çš¡ó<=vÿU6ô*Å+h[•õ1 ¹{vï(ê§úUû«uŽ8.@é:—ùU†Óœ`äuã¶G½YÓ¼?{«_E¶ko1À,èÊÔî8õé]GŠ"‚{eKTÅ­’¬0/ûŒŸry4›Qvê«£•ÒôëHˬ{¶(gbB…Àäýj[öÖÖK‰QB ËaÁ8úf©%ì1Þ¬!ü ŸçW¢žiá/ë È$9þÚ´±•ÝÌÂP ï]e‡†GØÒS©Ùác†$ãØb¹VÄ.ÐÈ“F)ç&Ö+ô«VdnVKûûÄDÆÈážxüªm}NVÖ'M/‡ìòamfÝd9JŽOýõS C¨‡Sˆ2Y”qÿúV$Ú\z£Í{g©G³Èv¬ÈÙ^œt Ú_GC«Äáx]Ç™ÛG-7¢=E«7fÐôxÊ×¢fÏE…±Ÿ¨Í\ÿ„gOŽq Åì«!«Ï\g;ƒùWk¶;¨¤–I$ÀíÏ^kЦÔüݲʇ~Ý¥##88ôÁú“ZÇͱ—µ›wF5Öck]­ÃKal‘†Ç<>£½_‚-;tòã(Ê7ob ã#掞ŸÎ²d…§°¸·–I^rÊCäíܤàwà•,N‘ÈÑùD« ÊqÓÐð?*飇Šw)ucu˜4ÛeŒ[£¤&3´nO'ßÓéYx£‹a#p,ÿ7†nœV™>׉س¶I`tìÎj‹@lîæQèqÏÐ÷õük­ISjz–¼¸Ú3¸‘„3νêñXÂ$ŽW~8ÇÌ#ŸéTFe¡-µ½=2\þŸÒ¦‰šM=¸\‚F0AÏõ®zÕ´º!ȯ.õ…×qù~l0<ƒÇç½"™­£‚Œd''£[§·Z†Øƒlé!rC2‚9鎸úçð«…/'µË? Ç?(è:tëD+Nqæ[‰6ÕÉä’H¢.ñf—vŸÏOéP^ÜD°”ÕÌi¹ÏÓüN)ñ¸¹TK»08ß¿N+UZ²{‘ÜŠh_Êä#ÆS<ä`ÿê©t×–KDŽX˜G&í­œ``œã<òV¼¿¹[ÿ>£HfÏf<àïŸÿWŠc‚s¬JRrIÉ#×’:ÔóÊ7‹î=UÑFþ(þÔ¥Ù„Ñ¡Pç¡#újKd[¥´’òIÁRNy 3ƒÔúzÕ{×wÖ¶èJ+ä'qÿ=sP$²[_AlÑådVÁ;ñÏ ­¥~ktº¥›§Ìª711‚€*ç<“ÉãÒ¬\¶õ²1#6®@Mimoºu2ØÙ\ŒœpOBj¼ þI‘[tŽp=r~ƒ“ZNIî½ f³n¶U‘<³¾äÄ žÆI?RòªqÆÈï$²2–NOýúúÕ§•U-ƒ#™V,ôÀÁǹÿ‚Ùî6h×sN …ϧoOç\ôd¬Ü‰‹Ô¬…S1Œ¶Þ Ãyéô÷© yY-Ô…XÉc•8;ˆü{ÔbÝâ•e”ªç÷dà²ñÏæ:cjí¤B./5|Éw19ÚpyãØžõÓ96¹¢]ÊWP,‘̰à°’:>¼ã'µX¶Ûwl±ÆÒ ®»Û$6Ñ·pôúwäúUm@Û3Žã*N9ϯ|òÏ4iGË·yOÍ"ŽBÈÈÏJÑéN÷Ô.K¨ÇŸZìH˜~ð±%· Ç“ŸÃ¦8õ©u(ä`W;Ž2dNÓÜf³,ebÒ«°vi@ܶO¾z“ÅhO*¬“,Ûe(¹çœŸÐÿœÕû>[Ù%fC¦¬v×>c§‡m¹sŸ^Ÿ¥W¶yáÔÖ[x|Â’eXàõãñëW+)S#9ÕòHÀ=úõü9ëŠÎº’hÍ®HÃõÚ0 p>¸¡hµêIg¹f‰]]݉r¨ Ý?*’ÂìIØ<Í䔟AÓ’?ɪi",¦5hÈWêÈA9`Oòúþ#Ìá–—!•°ç§¾;úqMÊï”]Hõ RSpñm›ŽàÊ2Äû÷5­¢ÝÅ‹JÀ¬n‡€¼d?¯éXºŽÏ´†ÎåSü\wçëSý®[]*H*¨tÈ{g?ù•ã5Ê‚è¹|Æ[)®cœKƒŽ¤dàåW,|¿ô˜Øü¦2C9éëêMbYß4P²~ñŽ>Rr9íŸåýjÂjAcupÁÎOÍ×=8=‡J¯g4‚ÝN‚Ýcò 2J±M`‚@èqýk'Ï’=e%v #Œò†}ê¢8’1æ(»8þ&ì:ûTöIö}GÌœ38?w ã¿óõ©•%ÚÜêf¿›j¥ÅNáýÓŠy¼sæÅ. ö8=y®oP»m›ËcIçÿ×ëÖ§‚ýÖùwÈJ ês…ÁÏÓ³xouwRfœ êQ,gaf9ã§ÿ^µâpe+ƒœX1ûZ´?*Çpà’ Àúòjâ^æâ%Rx÷}ë C¢–¥ß:ap3"„bxÏ@:åEñf¶ÝsœqÇzκ•í·I»#¯Óô­aFFáÁ×ÔV zhJ’±˜hð’g<Î+FC,,»™ˆm§íVÄñ_5Cœúê¤×*n6ð °ÆFH9#õ¤§¦¢º¹£"ïIG²¯sQG§Å æ …zž¹'ÿ×R´Ž0¤OLÕ9šY$ga\Õ·W;Z";Ý.X—rJ…±Æ{ŸÂ£µ†s3:–\pÄòzñÿ׫¿ÚÁbD (ì 3ε–Þ7q‡q“·±$ó¨æŽÉ”§} q— ÄõÁä~51û°?J‚9p¦pzŸAT–é£À ¯P ìiÂÉ\Rf„rÇ#ã>^¡=±V‘—€¬ z ÂpHäH»ˆr=Îjâ…ÁØÊå‚ÌðpÀ‚yÆ8>µ2´2©wcF9-d‚(×7/òncÆ ãß§µW¹Ó§6×L"hb·*6Ó’p>¿ýz©<¶Ï¶Iž§súÖž±åé²i×ÌrÒ¾[hÆ1NҡܨÁÙÉÖM+ä-r‘3gc‘Ô q׃ÓÖ¥‰â¶Ó¥ çPvóÇ9 ûäñïUÅÕ­¸TŒ›— ŽÁÆÂ#¯¥>˜[%¼Ób9CmÂõlqƒëœUj²ÔŽê xµªÌaÚž.„‘þsô­+»Í|)´%/Ï,ÁpņxϦqÇlzÖåÜ’f6M›\n98ÈéþzÒ–‹ì?h†R’£…e€rOÀ«]f#É"ÈïrÝ0ÈaüG#ŸçSËjú®Û‹dÝ30IâQÑÉÀ`=è~¢³ÍÔѰdrJµ½9­!Þ [ÛȲ²åÆTÅŸœuþèoÒ¯¡Jö ‹{[Éüé#c¹S ~£¨ÎjõµÆ­02ÜËed‹™<¥=ö1ëÔÖ=¶ aŽHö†FÆàÀnô=»×C{–Êk²m s¹y8ÏzÊOïmlP»vŒÞ$J yÕÜþž/X†iOÈü¯ áý*î£jÑÅ“:pÊ žIÏSÁÁ¬ÛÈÔ`Ÿ¼WÒº‚vз$Ͷ¸Vr! º‚p#òÈ©îfó¥¸hICø H °¿Ò³#·¿òD·”DRꇎ„öÏZчLÔaƒÏHƒE Á98ÁëéïM¥pm^ì|°Ý/>ߺEgCn\³GŽ2}±Ò«Kw*< e,c@7’$î0zSgI%,’¤r'TÇ-Çl v¦Á)Å*Ä[c‚21Å&µ4‚‹Ü¾~Õ¯—(&N6JûsR,ÆF‡b¤2 §)לøT°Ü]Ï©ÍxamášvUSòòNOUõ…ÖéÈ*ë¼`“’Ä~_•fö±7mù•Öò K⨫*”ÚÌS‘Ø{zþ•PG(ÝP4aÀ$ŒOÿª›w„&pY”7#¥mxNžhÊJ<¨æeeóŠ7^p=«EÜÚÞãe»k»kA 1ͨ`­Æ0yÆ?Ò¡ºi-GfQm´´MÇ?Cךšît±Šæ6MÓ«‚ç9ä/ú ýk9¼Öð³Ë±U—sfwþ‘Φqæ~Fwl¬5Ë¡û”–Sl7ûsž¿¥ZºÕõd ÈØ`§snàyÇ<ñYzT˜½, þí³œvÿVåŒi=´6èæs'î‘€ ÉÈ HÆÚ[û¾õ££ ´tûNU¡mu ±Šng²ØÉÊŸ‘Oû$¯¹ù±Ú²oüIªGy*EzL`ÿp…k…‹Òmýü“HLÂý^kžÖb[Y6ËûKd'8N8SþÑê}:zÖÕ#eX˜TièÍêþVMÐlôùGøRÜk×JYò#å…de’ACs1ùA`?tPè÷0i³Ý^ÂÑ#`Üw^8«"Â8`Ì8Àþ½*k–I,¤“ä"%Ϙ¼ç“ÁõTWù’At6á0¯€œöª¶— 7šª¿u6ç ô>¼}:w¬15e$­º9ªKBäÙHG%J7 däç?_¨lS“§£€# );_î÷ë×§åTÍÌLÏvÊÂ7ò ¶yã¾}èžëÊÛ5Äl¤7È7äÔƒô®_hÛ»2æmìZÕî %$dŸ•“Ï®?1š£133C*á RÊFO¡ýECq8’‚EÁ‰)¸àŒc ê),wÜùf@È_÷~þ™ü±ùfº)MFNÛÅÚäÖò[Mn±Ir±JiÎÏ\ý*Y^}*0°L¯ü—Øp™Éçóvõ¢ãÃÒÜYZO*²£©*ÛÎqŒ‡ZÉ»µÔ­D‰öYÈÀ‡ùc'øsÇ<ò¿JÆkšM¶fõ{›Ð\5åŠÆÄ=±.‡hû ÎG>§¯cZ·qÚ´‘F»ÀP¹ÝŽGEüºŸòy›EþÏV¶,™IÂtnxï‘Ïzž;‰%H¢t rê¥v>Lð1ØpkJssšò.2»56¼¶Å·²²1´Ù÷>ŸÖ£{xå!á˜+(Më°AÎ0zþ8´¶²£Í%¸‘R2%-¥‰ã9éÐôíô¦äý¹²ol3Ÿc=ú~•¯¶RƒqMû·%™ƒ\l1¨9Éì@=Oÿ¯ÒŸo A•iVbX(ÈÇõúÔçd³Ä +Œã$y>ù&£“"üH/!,UOLOê)F§»~£¸¶×9º‘„l@Ü3ŒíÚ§ƒÿ}Ê™q+AM”TÞ…êÜqߎškùmš1N>aÀÈàò3€3YÂî;¸ÌR`¸b •9#¯o÷kJT¹aÏpŒm©6°µU]࣠ƒ'Ž?:| þæ5¸.¤–Ý» ¼ãŽ˜èOµ•¬1Ü%ÄŒeù”mˆlΦr|Uyã’;™†­õøôÇ5d[ý¦Þ×6û2Èå°~M¼Ž>¼Ts¶õ%òÈæ­ô¹¢¿¹µžíR4*Šäààcžõ©m Km,`m(2^W¿Ó#ò­›{hao˜´óHòЧ úÒßX-ÖÌ‹êv¬ Æ7û§æ òôÆx­\´)E#—šÕ ™£'猔8‘bÒEqsbæyÜ™H¹Â+’z n9'·mocö¹ŽžâBp¢ÝâÈo\dúŒõ¬Ô“4rQ’0¢µûE¼®®ë䏊£0ÿ>”—‹û±f‡{å À`Ž+§¶O¶°—È`Ì$PβåFG å@Ç×ëQêÙZ{ÙG阧˜éôþ?JÒ22}ÎBæ ÚW–Mç~['©÷'ßšShÐA)‘É¿o–üœÿŸzìåÒíî4Øu)¦ò×`uU\¯m£×Ž•wáù‚fB%S"3°*ç®:ñÔóOlÉ9ß+rã$s‚+¡Õ­›OÓ, …ռȾÐÊ­–Ë`ùPèZj^ë–“a"cºB@P ù ÑÖ¾Ëy­DÖžY£qxÇ`0?ƪRµ[B­Îšu £¼†6åD$Vÿ–´+xäÕ›XäŽú+_µ$S3’%*ÄàwçòÅOor%¹ŒBÅB¨åq“ØÀÏz}Äw/jó݈üÛ ™˜òU—8ÀÇðƒô¬›¿¡-ò¡‘Ç<×d+bæ7®NH<Žx#ߥ6çO¶¼*²'Ùnwù'*$}âÞùþu ·š<>h"Ò˜j1²³”g`pË1ÏCØg¸¬Û²ÌîÚ«,¡AvYmÍшÇ'Å‚ldžl³Y^DF ¢’TzÆAèk‚df™%FsЂ¼ã NzŠÐ²’8e‚âK‡û£Ç*©¼1íÎ} `]ÞO}8rñ³cn mùGœ ŒPµbi[RÙ¶_E=À›yÂ11.Àq™ˆÆqÎ1W²u++UšÚÙ™+Â`Σ7^GÓØ÷¦XYNÏ5§îÝTy²E1ãh^»½psDs¾—|$L*ªŸ(—¡ê6°ã¡>”91ÅébÒ]jKd³ùÉmjÑLä†ä‚9äã8¨aç™lìã–iA;ž<8=1é•Î:ÔWi_É5ÄÒÔGÎsל9íZ–ú•¼IgbrñÀåí;²¹ uhIŸ }«VŠKƒFŒæ=¸ÎGCž}jÍÑXaGŒÿ£‚ÉÏÌ­œžÿx¡­¥’Êþ '¸h’]¤î`K㎸ä}=k õ¡»Ô`xòö¬ú±ž‡>£#µLSrô6“\¶B[iv×p n.b¶R3µ¶÷sÎ1WŸDÓO‚ÆK¹Þæ«@ÜO 9ãùÖ¥®› åï—,QJ­ùAÇÝíøŠdú]²JÍödÞ¤òª¼mÆ@àmüèrkPVµÌHü=¤„o ê`8yáÚ»zžª; šI †+‡Ù"ìc¸ˆ©É ‚HàŽ1þÕKº=´,¥"WŒ:,„£Œ8œc¥>ò Ê–0 ðqÛ·S×kxOž×¤¤Ä±òÞÑm`²’hí×ÍRH ¼ç$Ÿ¯lò=+/Äwz–s[í÷œNc+&:Œ‚·=ù®²yb&óa`›|²-Ûã=¥A¥\^Ê$Š-$ïŠ\Z’yï»<ÔºœÒò.:³Æ)ãÀ÷¯GDú7#M¶µ’XÈpA )üsÀçô«Ñi\_¥´Ú^ŽÊ%0—Fààí}ªäÌf½?)XP©R•è1øS”“ØÒöês——vº}Í ¾ž5çj°bØúqR¯‰4s9=ê8C 0¿ÅZsxjÛRŠ)%±¿™¹ýí»FgœÇ=zUCðõ¥b!ŠêìgeÿÙA¦­Ô3C†¿¢´þr_Ï7‡ ‘ô5b]GAºÙ"êh²ÿhœlµE~݆ėöê=²ž*Ô ‰ûú ü!ÏþÍOÝ 3JÞçJ]­¡hwŒHM¿úý*¶µ¦Åg'Ùe´’QûÈÌwŸ˜˜ ß‘D í×ïßHÿî¨Oñ«°ü;Ó|ï4‡Þ|%©q‹-9#‚&1$ñ¸ 9í[–×;mR\É*‘ò|„…=ÇõÕZø7J·M‘Ú¶3Ÿõέ[µðÞŸd1 ¼È3œ,¬yüÍgY»šN¥Ö‡$Ï}%²Gocu$­´–òÈQÓ#8ÅAw§j3ȪÖÒGV.ïÁs××èñ$Q©Æð?ÚRk?Yi ›µ¬‘yÑüÊ¥7döùxïïü«GÎy««g5°±K›_³Kå¦QÁ~<ƒíПΩé÷ÄfXÈYJƇ‘‚¯$ŸÈS¼Gg~nc-r­p"T¦Ð»ÆI/÷NNäöªÖvöŸeÛ{$±ym”@G9$€>cÏ^LRNPøYË&ã¢.îyd뵘GÏHÁ8ëÛúÖEÉ_µÊ‚&Û€;Nx}FE\{™ -x‘ä kÅr'°ã©÷÷¨ôÉa>uõÄë¹›knc»Æ õ9ôÎ*ujìÍ·»2m上åA˜;*ï"gÊ)'' ž¨çšf©)Wˆ¬ÞjŒ0$1ŒpÓòÅ?Pº†â\:¸S¹Õw“ž¼/Rxç89¨¯ì&·y ëû´uL#7ùIÝÁæµI·LÚÑ´×fDK¢#•„¿.w.x#Û>¼}MQ¨ÛÎ'ºyYbá™Û!A<`}Gê*K;ͱWšâ=ûJ¢«‚Ü? Ž£¹9­&No.4¼ß%׌c•>Ù==½+7>VKmj>Þðy«ä»,L (m¤ `œ™éÎ=ýj¶¦ÇS¹¶´‚èM~}øVã–*0@ã·ïHúŒ—7PÉÛÃJÕù{qÇŸ\SHaxéqF1ƒ`` `Æ 8ïR›dêµ6>Ûg¤X=…‚¢´?ÌÃ=2;{wª kæAð<‘HNá‹ÀQžtêIëÜVF©¥²³O,‚Š[$œã?×Ú­[›¤Óžá[挹ÜÍ’8Îáa‘ÏzÖ ^åG½Íb·c&â’ƒ²EcüL ¾ý½ê[{¤G2¼xÅ·±ÉŽqƒ‘ß¿c\Ôn–q—ŸÜÍÈ þöô­…I”Z´û^×$¹-’Fp;õÆýuQMA¢’´N†¸±Â˜ÁÈÀäù‚i·¦+X’à·˜c%FÑÀÊž¾¼Š±踺k“H¬pcŒž7sÛ’Hã¥g$¯(t’0ÁÏó´°ÇÊyã¯çùZ\®òzš+! Ó\[D11†n¹9Ïðªv Iáwf×,Nn8'ô­(àDš‰F×*PÙëï‘ÈJ™,ÜÝ,ª[äù€˜òA]¾¼tútë]Ueuîõ*Zìdù TØCçr±P >ÅRxÊã>ÙÈÏ®hÒ™Þñ¼çQðÈÇå vñÁÛíW¯,‹$N¨‘ªÆXÄûNsžŸŸN*ÜÓ©¯R[×RUH°‹ÃFCaŸœÜ·#è>µŸk)abC>1…äýÑVåÄwv¦fUxUˆ‰~cÎpxà’}ûýjk©Ì’´1•pêÈ\F¸êG-×Þ°PæšwЛ&îQîœ7åû˜øõëêjÝ«n- « qRëŒú{uª°ÆgI¸\—|ÆÑ÷³×ÔÖ¼€[Å Y.ç+Sœã=¹uì0+yOݰÓ!F‚Ò960p˜Mª2F}Æ?—LTsJï ø'Œ01ʧŠÀ®qu3n§ºÜ);S ö‚Uµ›}¡‰#nä …ã ç1ü…gíwaqÚi¶»ŸìöûTÊ6° rå‹(UçÐóÏãZšòÉgöXäÈ6ð¾ÜóÓ Ôð¯¡ÛÈf»»,L£;qà `ü¿.ãOÖo Ë7Þ î­è«»<ãè¼çñª œ·C‹Ð‹T±²´Ò¬þΙ» ¤ qg§ËcÓšÄI~ÑE˜**’à SúÊ´§œ\Ë4á¥I«g€I9ÏÓ©ëš>Åo9²?ϗ߸à;çø~ƒœûÖµdáepnì™u¶·›qFv\‚NCúŒçüŠ­megÜS/˜#ƒ8CœÈ¬¹ñÜk9å–’7mˆ®H Û¹kSíašÝª´ `003×>½*g¥%%¸¥-›RHȲÊsØ ÒÄN0ŠH%†Ê9#2I7 Û€è9ŸÔUÉ|ôtÃî„üþª’È‚òÝ#ܨc«1ëÐ{öíZ7í ”†Q÷rxÇãŠäĦÔcÔÅhï ¾› ‡p7̤ô뎣­\¶šhîæg{b…v†ê;g¯¯ÿ^©ÂÑ!·†U.|¯¾ÙùºqŽ€~vãt–±/k°Â®6ôÉÏëQìù¬ØÕ÷'¸açPK1ù0$ô¬¾ÔwÜXžz˜Î•o¤DÛ!¼FO9æ”Û@NLNIê|˜8Éüë&í&3='Š#ý£åŒ“÷³Ïq‘Èç9éPßb†´iÃ"‘¼m+‘œôažjƒÊVxŒŽ°¤$ÿ6ç9ãŽH?áíRAooojó3˜äg +Œ`¯@sО1Ú¹o¡š–†…Ÿ›md¸“ËBÌJ)èäœþƒò«“]ۮ沒P+ÈÙl‘§œþ5JØO6º;ˆžA…UaÕ˜ä¨í×=p+:KkõžòxKKe4Ë _4ÇÔàëE›wÞæä³\=¼–ñ Ì3,hHAŽIÇáÍrN¿mÖ ™¢2ˆäTÚ>ñ<“ú)«×š¥í“mnËgdMÙ$`‚<‘ódf²’77Rùm uuðÙ$.O>øükhy ͳ¨¹·¸iÒòíˆ$‰ –ÀO8î>µi- Éo$R¨6ñ"ùlÙŠ’ý=¶ž•{ì“GC+`#¸òÈ#î–ÛÎzçš«4–Ñ™cŠãçšL‡Tùã?*€N{ã¦= åÓp•F•š(é«n°h¬è¦á¹^psøç#ó¬ém“ûFòÆavBñ0^T0åG°9­;?"-$• &`ÒG®Aöýz¡q ¶¥`þTk1's)$m(N*V•‡6TÒ¯ukh ae "efFW!°r+À##š“Ä6VcR’x.«(’0¤ðWPzg¨«‘Xˆ\#„#ÇæLYÆY·‘ í׎٨ïï#kå¶K:Ù”¨hÀW @,úU¹s «{¦šËepòpäÀèÝŠ–ùO¸&–Âú="çrÂÒ³).T¯åõ«ÄÍlPoiåeXÝYqÀëÛŒcò«Í¦Î-šð\IJºn̹]Øìjskq7Ђ÷ZK›IL§Ì½oùe$ùj îG¡üÍføzÑu ›—šôAò"“јðIÿeC­YižmÌïªîY|ß-Àà«`þ}¹úzÔ°ÌöÖi§ÅÏ™IYÇ#ñŒwïÜúRVZGq&–äZ–©kSZXÚ²Áæ†ûB°%ˆã>çß>ýêÄ©¨;1™äbK9qëøRMk´RÞãx³¶<q,ŸÅžøPy?OZÎKO>XÔ€¥Ž6'-×?ƪ1Э^§Ao¨Ä,Ru‘\BÊcbJ¹#¯r}r;qT5˜rÀñÜBáîò@LÎHÇ|þ85sRƒì0,PB¼‚HÚMÀàðßoÒ¡¶³³Û<· 9hP6n2ÞÓ§½%kÜŠ¢á&Ø^áÕ›(B¨áq×߯åR ™,í.,á{{›bZ5‘£ŠÉò2OéNÓ ¶²ÕbšöѦµ— ´âP23Žü§¯¾–º½äú…µ½•Œ! ÇæAfÁ#¸ãèSi´1ç°[X£!eVeC®ÝÊzÜ{ŠìtÍ.÷R´{kDo-â}Æ` "tÈsçùg^Ü5ÕÄbw¸7> «€‡ùëPi:ì–2]É ãÁ¹XF®æEÁço·µg&ä¬.>Òîx­R2 i¶FdlˆÛûÁ¸ÇCϧүÚ*M«Iö© Ë1’«œ¼n¼dU(bK¸¥¹º KñÝXžF*k–µóØXà Œ·^¤÷¬¹œ}E{Dw¶Ÿl-i˜ã–â4ÜI.~nùOãô¨¤×R°u 4e•‰€G|äòxÿõÖD,’+Ë!ŒÓ~’8è:óßñ檵ÌÑO%]œ±pàcãëYÞR%ͽ +{ÜO*…t0.rž˜ìIçü+BÎx¦º7vÏ ¹Þ9ÇuÏ8Èçñ¬w‡l¶ú…är© ÝüÊIû£'އ§øUËK´¶yEcv+¿#™;ç¿<òÂ´Ž”îTtFͦ÷†=îƒvK€IcƒÇNõaïddHåwU·mÆ-¤nÇP=Àj¬pÝA§yÂÝÿzB¶â>QF\çô©ï³m °–Pïµ!Ç#8=I•ÚZŠ)¬2ÞɾÞ6iîÉÛ'ùçÖ¬_¬Ö–&ÞRžvLŒ®ÿ+dñœk7¯ Hâ„mEù²IÉÇÔ~XéNàG‘Ù îÁç·O¡­Uf—/r”™ÓLÓ-íÑ•çnÀRXŸ\“êGÿª¶žH–"Ï,+ާÍÛŠò¼Í¤Ò31rI\)eã<“Y¾}ÎæP̓÷†Þ£­uI¤‘ÓV‡®VÍ~Q¨Bp ÂÜ)8¨¤×tÐ9»B}JîþB¼ˆËr’ŒêO R;ÝH@ß1öÔÜvg©ÉâM5AÿI}?¨ªã-9+#Çîçÿ¯7[;‰H ­ƒÔ±ÿ–M&hØDç®is™ÜÉã»HX`w˜èjŒ¿FÃåB Ž›œ¶ +tƒïQNM2W8V,Oe\ÑÌ7äø‡ÈXãQÛh9Ïâk>çÆW÷Rí¸“ËVÂÃÎyÏqU¡ðÅôÙýÍÀà˜Hó¨¥ð®³&zlŽ‘à •r2zæ‹ÜÎw¶†-ÅÔ—Žy¥v%#Só6Ò8÷ÇHÆFã 0M›|Œ’xõéïVáðÆ ²t‹Ô(OÞ9ÉÆÐdäsZ>OÙL²Mosß‘Uó½‡Rp@ÏÿXQ7c™£"6¸hK»G•Ü1òžFâO ¹È•!Dg6„'<ðyé_ί^<²$¤6x!œq¼ïøqþ•ùjä¨ÜÃõ#°ªŠêÄ“ÜÝÑRßíqA}kjñ™<É#Ï^xžJ»¬}–Xr»E…†$\î`1Á!¸ãÒ²´›ˆèEt’<1›s©Ù¸ ç<ñïøÖíÅ仨˜ÞC–ùþVfÁ¡ÉœŽõm1=îsúE¾åÏjeŠ'*ÌÇnƒ×8ÝÇNEjê7ñÝB! m«©Ú¹ ð; ãžýé®î¶rK$RÝ‚ª½~¾¸ÿõÖEœ‘Ïx±Ü»,BϹ±Žzš5–¢ÝÜÔ´cökˆc €Œ¤¥BœàŒ½rqéE¼×—”ê6>dTèI÷8ýsEõäw¢kKÌ…<Íü´.Jã{ÿ¯W¬šXßì­ ãAG_ǯlV7µÛBKA­n¢î1æ–8!CÛFÇ##¹Æ{U™6‰¢gcÊ…8Æ6ŒûǦ Ahê²1\6wíq×q߯åÍOq4¨²InüÈz{g½G3æ± }Lø´{Xn|á’î éÈãõâ­ÜÅ,VÆëäVÇÈBdÉãŽF3SY¥…´“ÜMœ¯&ÂìH9ùÍK`ôÜ.\nÊžÃp}Æ8õ­ޮ垥{k«–³‰Tþ÷ËÀ`}qœgõ¤±”$ÅÞ6sÿ`Ž2Gjf¥ØîŒ–Å⌠ç·~}§½2Öödº’ÞB&þ 6qÃñüióKâ“5Òм^|r©Û!a\n§õ¥3yÈ$fe•,{u×õüêÐAyÒÇ™UÚU°AÆL õªWF-•LÊ…Hß¼Œ•ÉÀëÏÞoJƒ7M+ )3Èû¼»••Xòà çž½½:qSÝ.éY™I;™•ŽI8óÇôªÒ`iÒò‘Ê2®@Ü @üNÜŠš9·,`,Ù-» Ó z~YUµÝ„õ¹˜%ßïÑù'sõünü?Rž5·0ùPÆ ²#nõž©y´™ÌO%ÙÏÁ vçûÝ)º¶æ ‘,™Æ2¸ 1Ôã¿_òj©X•ªÔ³»«Æ]w–Ë?ôû¹ëÏÎ*”Ú8E“î¶àpq_~Çô«‘F< îêù]˜»˜ü$`ôïT¯­$Ž}Ánc×7<öx÷èj)×÷ßc>ox˜C}§ÀRhþR…ƒG†W\àŒôïÓ¨§Ä²\Z$‘À¡ ©\ž0}øÇßšd—»qÿ,Oï°ñìäçpP3Ç¿°«ú|ñY,qÂáÇؤ’<ç¯n?J­Y8%ؽÓ&ô¸Ç4è®àŠÕÖH£v?:Œ•}Þ}@ý*®àÒe§gfgjíZ‚B‰ÁÏ 6àd§«Â!AòmS" nÎN? ⳤ•丒fŽ&;œ·^}sž¼UØõ$¢±Ý;ÀaÉ>Õ­Zš]lHdÎÂv}糎1ŽÿŽyªò£"¤_,ŠÃtcaÇ5¢ÆdÌ60zrzsÜuª‘αHÎZ6U]£9ÇšÈy¤šö4x#°r{ûVdÜÂîçB‘ýªâ&iR5H‰MŠr03Àè:úWmî>Ícm†8läœõÅb=ÌÒ",QäˆÊ®qÆ89üÍOo¿íQ¹dÚNÁ ÈØçEI$Ô{ ÎÚ¢r¶,Ò,„d‡%yšÏ3ÈNGŸŽØýj­s~鉨,vì9$ž?*Èi±_1ø8ï\Òo™´O3gEyóI ViŽ›ÚLaO®b\jµ0YKkÁ’EÍYü›ŽWh=9lWÈGW¹º’»·uÀãÓŸÒ¡Y$yֿϵ²W¸ô¬Ñ¢nU†HÐ\³ˆÄQå¾Hó¹êËž¸ÝÎ}é º¹¶·½€C‰¤1…•yОù ¥Oin“¤+›xV`H9bä1úÒZ̳Jf}Êè€@Áè=óÅê;½TFO´Ãµ\¯’3Ъ$qÈùAªÒZ‰ž%¹Q ŽyœŸ$žü`Ô6p#YKpdµDì"@ê.ì¾¼ôãšµ-Å©–;Mìä„ýûœ“Áï“Tî+4×xZW[„o-ÜFAÎðT¡ëÔdæ²ïšI_$l¢hå™0>`ÜéŒ~¾õ\ÝΦxã&Ø;3®Mä¨Èþ”š—˜·ŒóJÖÒà1;•AÏ×·çB¾~†¬Þu”RÜ»ÎáIç×°ÿ>µrÍý©_˜»çÐqÿêⱟ*"I"Æ™r±Éæ]¡š=äì\©`Æ>¦¦ºEkÄ»I#ò$pÅCnò¹ä×{óT>Ï,R´¡c´0#·¿=*ÃE"Æ¢Øì»wõüxàþu”­¼EÐØ¶x¯XÚ¤Æ8¶‚Øï9£¿z³ýÊ,—±•F¶o”Œnl·lõ\þ5E¬á‘yBÊF<¿ðN½ÛâŠV$ÒÈÛV¥N9î09÷ç¯ã“–£ÑÐöÛ)¥¾Y!ERÐêì~eôùzŒãVîtë {‡Yã7 µ@c÷‰?îûÕV{§½¶ä—å€.pgÜqVu=SP³–&Ür3G‰#$çõÚïFBÓMyR™MµNÝÀ…;Y°tê}OJ¾t;yô×kYå–ô“¹˜íqÀ Œ‘ÏSß=)t=fÎ{;xZÝÖp¹k§*ùÈ#œs‚:v¥}KN’úa4Ó™ZSi0‚p1´çðÆ\NåFÅxô‰˜ÁjBÀþQpJðõÇROè­6ßÃ÷×›È(HRH?¥\Òg¾Òoï´èí®.“å’ÛÄ`ul/sÍN÷ðßÞ[ÎÏ$QË‹r™\óÔuûõ­/ÜÚ3¶Å_øDYNéï‘@õP?™©CÑ×]@d‘úõ‡uo­\%ÍüȈ¥7ì<ã‘YßeÕ&àÈãþùV—]•ßS«û†ãë4“L·ôKuáÛP µcþÿ?ú®@è÷.?xàû3–§G¡ äºþÊRæ+•3x§Aƒ˜mmÃB þ€Ô/ã¸w pn¥c  92§õÒI);yËNv%ĵ/.‚ÚAéµþmT&ñƤÝ#?Œ€%5xijÅB[£’2\š±ý‘4j[9£AÁ)'òªƒsvB±ŒúŽ»sµîdr…KÛ–ÆJäÆ{VeݽìW—Ïs‹Xþ`Á:ƒÓƒÉëøWCt¬f ´’BÙ(NUNpæ,Ó,tùµ{YgUe•÷bM˜ïŸ—ñgùW}j0+¥ØÎkCAÓ%·¶/$ϬF±'B:Ž?ZÈլŵä­5³DòdÆw ¾ø÷õ®Æk¶€EæÍ¡1—áŽqŒ{ŠÍÖ-m ² ææQ´<’Ù®1ÎsÔÒ;BþLœt8Ë[ĭâ9cR‡§œªÇÇŸÌVÆ›o`-ÍxˆèwuËnÿçé–E¤™¥k ¬c`ÇÊl‡,ê^>žõ™<~DÏ/.HAŽßŸò®Wïis7®‡E1Óî"‹ÉfiŠï*_,À¨luÆp~¼éYQGÔ,ÑÁ´G-±·K€N=}¸¦kA*CH-ÐàîùÎWnpæMkN²:8–9d£6ñ€§’§b¸Î~ídÓˆr´fX»AzÏûÁo… Hã¿cýkr(ü™€Ëø1ÜöãßΙ¦iq­Ø–hò ¶Ô'aÏ'ƒ“ùV¤q<„³Ûˆ#‰îãš2™÷{~¢³©$ö!³2C}r±±‘š"„ùe@T9Æâr=ñéD“ÜDÞT3áŽLãÓš³mw‰%¼¸6°gó2¡ FN 㞸ª ,w)åI˜þPÛ¯Ò¡y ±a¬îo [YF~Ñ9 z Ï_¦ h^yškÀ—Jd…Ðp2€Gÿέh‰6œÑÝ€“[ËÅebxÏÝ>œÍUÔõï-eòã’IC™0Üc=ùÊãž}Z#g 4Ó!Ö¯¬ÞÁ¼™&‘¤?ÄÞ=8žýëÊÞiž¹SŽ7¨Ç§ô­ >kíéíåÀÁ¶ŽHÎ{sŒã¯¯Ö®i“Zèw±ˆÛ³Âbe–L¾8lž^•¢\ªÃåå^¤w2§ð‚¯»©'ƒß¥FâifˆÃ/°¢°Pw7mÙ€AVe™o¶%,MÀ†±ëÓ¯3À9s½2ÞXNAy8Çášè„ÿvÒ.úX«j†51ÈŒÊÊQ×8 äŽþÙç5QuF·ÿG…dV!‹–ärÜ`Ÿ.çW~ÒòÌÍ2Ÿ€Çœ`ô'ëŸÖ©Ï×o®À3¬8î8êGZ'$ÕÉm­M;;p÷Pé3 ¡•Žy‰ÇÝ%O$gÜŸÂôÍ1JÌà+0 p1ØdÎ2r9ÍZq¦‚×ó"ÌðÄœ‰$À¨ã?…XÓßPµŸÌ†b¬3ŠwôÆC qÿë®x¶¶ØÏ˜³¢¤RgÝÝ(´7Læ&6±B¸-Œ ãÚ¢p.$¸‚WÜÀí}÷yÉÀäö¯cY·q]2Û/œ²[Û(xNyEŸÔç?•gi§ûuà–ðÀÎ$£çÁ íÉô>µ. ÞÚ0Q¹¡uCv²²c1åŽJ?¨g ü ô§Ú] Ž8Ðï8ÝÛµ³Áöû¤~5ÕÌó'•p/b•Úå0$äc  õqïM¶YlÒeO)Ñð1üÄgøO\òyÔž±åcjÚ2ÌÚ‡•k! Ä"Ÿ,+ô!†[§ÔT÷@öpO,6ó |6àQ×ùzqIí]î.îÔ9„®K }íÜ çAϽþtÅ‚JȲ!pÊ3ü þ'?JK¥ˆ¹3Þ¼6ÛÕÒ4IAU+žgèqÆ=~¹×(ϨNöÑ6Ô‰yÈ=\‘ë’¼{ÔÍ’VyÉqî;çúS®5·…âWtc—®å^>£8HïùTdÖËìjÜ$ÏñÃ&J´Ž~gnöÈÉ«[HšmÌv.DVk€Üò@Ç99Ç>¦ª¦„·‰0Žm·ª`•JŒgælçœõüýªKò––4sï[‰dŸ%A'-·'“Ü~5Ië íb˜¶¸15ËÄc„…™±Ž'‚HätéšcM0"=íåá¸ù¹éß‚?Jm½ô1ªZÌìÖÎÀáþèf_ÓƒÉÿõÔ·w)<åÖ% ¸oldžÙü…uB¢çRÓ³¹ÅØ2ÈÒ1võ™ÏOz‹J1HK¬Ä0É.W¦9Ç׊ƒQž3q:ò„ƒ´CœqS[ˆ4b9ÜG$óúÓ©QÍ݃:±7‘ IoÄ"âGó r eU㯓úæÚ.VYdY îÎA9íùΧ°*—fˆ$0£âb;gëVnï¬n¯cŠ+Hyq*œðsÜòz“Y¶ïØMè$RH2j]œ0Àù°X bœê²mÜs¯SÛІÕ$X#‰‰‹õÜ3ùdT–ê"G`›ÙbP 7 @Ëu÷ϵJNK• W û°ö¶ÈÈô.˜#®0zö==³ëPÚ²4¿h™“(UÝc-óá<ŽßOδ&G–&0 ²• cxëŒçh8ZÁ[F·¸1ÈÒ!wØģ;q“Ðæª®¯B¥fÆ0fÃÀílîÇ_¯½hCĬ%x72…ʯ~G©ÍAE±…"óå9ÜûÉ9ÇÊ;ãëÍGc$÷ PÏ‚J„.FÆ=}ê'ªÜ–™«v¯–Œ>|’á# ¤tcíÓŽj†)tåb¸”€Gð†ÇnqÜþ•}tùaÓá²ýàR‘Ôygž:gž§ðæ²JH“w“¼ù᳞œž+§g;¾…Å“»3Û[ùQþú8Xƒ#·OÓžƒš®±‹É7•B—ÞˆFyã*qý:Ñå)µRYpá“å~˜ÿ#½hÙ[¥a·ó ìç:s‘ž=kgRôôêUî‡Û^Ak[ˆö¾àSä?—¯½=MZ’@ ª”àç#?þ¿Î£E´ºh¤1)Ôn,ž¸#8ç¿\~\WB±M",1J¤…p À ò3ø‚&ØÆìg_—ŽýsùqVw +†b=¾\òGçŸÌÒMnÂÒÚ‘Êb$7rzƒò9ëN÷¹^âê! Dc‡Î(‡,™ã§LÞ³ÜÄÓ~åT8„UÉ9ÇOóÅLºy€³™·\à˜Ê“éž½*õ84ÍB)BážA¿jpÃßÛùÖ‘WѨžpŠ[…hYL™E%¿ˆ–ÔóUã2\]/‘;88›·_^™¥»¸ŽPÌPï(Ç©$‚ýóüª[¡3·ÆÝ¢;שÏl}qþz µ{ ©e.mîåa4-À7   ãŽ1É=øô§ea0Ã(X‚rAÁù¸ÇN:L‚×—i i;U:óÉüI¡¡X&º6³Í,GnCLJ 8äœr{ó\òi» =.léWY×-§frÈ0HÚÊA펆©kŸbµñµHX„ò<½­¸ŸSÔäÔºlSJ»•lS€z×­Y×ôKË ËQ¤Šc,DcmÅX¤ë†'ÓŠÞ-éäm{«˜£Q{™DW+ÚC) ÅÆIÏR=MfÍ<倆gh# ʧ'o9À>™±Z²ÞZM åQËn;x`sÉÇò÷¬ÈEŽAÚ'²ì$€0¦zÕ)7º1z2ñŠRt"F‰eÁùK0'®?OcQÝÙ$žHðÌ ³îÇ#æÀéëšqÔ"±K¦yCȱùQ)ù›‚߀ñoj°$-áè瘖&Ë)9ÀÞHÏ×h¤îµ]Qœ³Ûµ‡`]ƒÍÞƒ;‡£cŒsÓ©Ï­\Ó'Ì‘—V(Øà°Ç×'?ŽzW?&¨e¥LfV ÜŒ('¥[´ÔZ{q Ž6º“bÄ¡rIçŒÇáS:mj-z–µ´ÔöO[É Ìáˆ+ŒGØõ>•ÏTdŽI\[;<²*ñ»p°ÏzåRk‹GòâDo39_,3©éßð­8ãvÓ‰%Yf,]tÆ?žúSi%d=Š>"•F¡" ?/ gå'ïŽü±§Á²òÆÊÑ™ÖR†T È$c$õÂôç®*+˜^Xõ™'P†UPŸŽáž=5Ì$Xbb§äPy-ÓŸÄÖ°I«–†‡ˆ-¤—S‡N€|°ªž;¸þU;8Ç«.7Æ ?¾eêÔ|Œ}jÜÓ‹¯ÏxåÂZ³Ï3)Û§åQé“…üsS[J³yšŒÒoiþw ÛO90qô]¨¡n K…žIÕ›a A*àuÆ2LÓ ðò£26ä$‡L_ç[·7BS q[ǽ¬%ݶþð–MÜÿ‘ƒøŠ£¢]ÞZ›1eº·Rγ4%HNrHè#Ÿ¥`’oR\nGg{-ÂI”(=» z_Z‘ãQºäDæA!á˜ã#˜ü+:Púl1© EÜW*Ç—‘õêÍ­Ìqr[{)À ó9é×§êk9G¬I4aóÆ|¬ă³y$Ç8ÅG;É•‰‹Ìãs=° œÖ–)!;I™ø%Î[s§çÍAöãr¿gD“©G8É'ÿ¬*5c4!G•œÁjÎ+1lw€zçŽþø©ô–V½’öQ=Û@ª¸8‡æ gž8ÝøÖZNöѸœ@İ;Ú@ùˆÉàŽ*Äw7Ky5ù½¸`ñ€ !F¦y«Š²ºe®çI¨ê6š¶Œ·QÈé¸B7 dÈêyñ¨ôT“VbK”³¶'Ì?+JJ‚8^ýøïX÷W^C[µ“[#˜Ê+@ìvÿfÎ98ëííZv—­á†ÆÊ;XÖ2fºóm\g‚rG'>çŠ:݃Kšá+#j—Qè¢PW Òx^<Ö•–Ÿ$7kŽc¸Fù2¹û¿˜Àéùæ³F¤Ë~í$“”ˆÜ¨ÃÈz7¯§n2}+­°»SH¯ÐíêÛB bzýîqÉÿÖ»ÜÑ4&¥n—PÅjXGy¼FÌŶM…ÏaŒñúu¨að„’ª´—h¹ì¨OóÅhi@HZI#Iª‘¢a€ç%9ÿëWA tžb16Œƒ·¯ëX«›FVG3ƒí¼Ü=ËíÇUÆsôÅHþÓâ¼ÉÜzgüui§LÀáÿ{ÿ­Q>Ÿ,Q1žî4$ðÊ„ãéÅ[§ä_?™ÍÇ¢é‘#O•N }Ý:—ìÖ±ÛFûA8DóšÝK;Upcp8.œÔù`¨Ø»\ÁŽ °[ã'°ãY>%´+¥¸Žà u$C˼|×l·.¤`ÇÇûŸ­Aý©§M®xÜV,+IŽväúÖ”å$ÅÊÏÝwö‹eKy$Ú2Ao|ç¯ç]o…áô¨ËB±ßJ6˜Áä)±Îy'&¹ VÎãOñSƱ´{6ÉöxåÁ‰J«Sé’Gå]ï‡u»;ýNUŸGX®¤Uc")mß(äñžL×uY7OEÐ.sZÕŽž½ss3ŃÕÒ%ÎpF88ÏÓ¯zÔÑt›+ûíBòdû,†=²@½œ8¹õô¥ñÅLjäm;LHãŽÙüùHÆàW®xç’3ÓÚ™àȧ"¼K™¡pð†2¾k®9 íÉ©“æ¤ýÊåëÏYÝÛ4B{ˆ›ø]8+ïþ}MsW bu(š³,XŒgô?Jõ--Ê—ŽÝ”ƒó|Ç?<÷§º°‰W>…±ý+ÏO”^Î=äQü(º<£}±ñÁ—×¾{ŽÝjUøq©Ù£l¾Q‘åíÁ²ÇôʪÎÚ‹!HnäÈìÜ}þ5NÌ\‹±æ?ð†ë¢MÐC,O‘–´0éÐU{Ÿ ø² ;0yA ‡Üc¿ÿ^½i6îÚò°`9ùÖ‚–ò ¤©ö5ŠV'Ø£Âï´mjmK{é‘Û*¨XãCŒ3Ó¿^jT‚)­L?f[s̲»?Q‘‚p\äpkØæ´³2*4—,Œ¤üqU¥ÒôKÍÊút’äFq‘Û#p㊆›Ø—G±çÚ¶³¤o#Îò3üÿýF A渶º@ë…ópÇûËŽûô®¯Sð……ÑÄ:lHWh>pPª3è¿õÉjÚúT!ló„XÔŽ3î1ÉÇÒŸ²¾Ær¢ÐZÞZÙj“Ú>%Žê$d!Fþ¡† sǬ¦†9íƒ4÷ÁuL‰#“Ô~<~5>“¦í·»šïo—‚¥‹d,1|dþgÄÖ±ÚÀ¶ò´ÍµÌÁ‡CÎ1œtúw4y\›inÄ:“™4×fhÞcq¼L Ú§:äãŽ=©¶¯%Ü%ŠÉo qÔtèqƒôâ±d»›û>Hcv>TðC2ú€{޵Õܵ•¢ÁQ q&Ê:yêxü8Þ:VZ™×"Êf£6òØÞ0sË¥U¸Wó\£¶×BÑwÚŽ˜é“øT²Ü,c/ÉÇÜp#òã¦+V;Û8m-­<•’ñ?}æ’«³<á‰ëÇo×Ôm¼Ì;+Yc±óüá#`:òAþu+‰gµ(ŽU†’8Ø•<¼¾˜#‘ǵ[u‡ìòNJÙ#‹”Ûóu9ë“ÇZ­¤´zŽª0Æ1—$Û€¸$ôÀ4·»@®Ù4·Â=BIš0È…òG–{„?dÎ:¨•qµ”7‘“ÀÏ®+±·¹±“@šÒ+Böó)’Y¤l”ÆpTuzµÉë°­¿±FÛ’²H1ÁonÃn3õ¥NIú‚Eáq×÷Õ­•Uú098ïÇçëW­RÞâÕÐJ±¸ˆ•fSËp ôñíÍQƒOðõ€’Ú)ÂJÛ0J–{@ãõ¬´¾õö©PsåýÐ9ã§ç½)FúŠh±%ð,`yçUÜä•Ààúc¶1ØÓ.îuDÜ™\esŽÇןάEÆ«zҦńvrÁD gרœöϽOsç\^@¤Ä¥·f?ÑÆ;÷9ï§KÌ— e™³˜¶ydŽ9=I¿­Dbº¶A+`wùw î}@ÀäTÓ[²1c¹™‚ð:€¬ÏPK0ú-ßXã¿h'ÛŒŒŽ?AÉô«]†t> …-®u™­¦•dp±axÈn0z”VeÖ•–¿n’ö)ä¶„AEp0Àÿ8c߆jü²,š]Ë¥`¶Xˆè|ÀÉŒœv( ®oQ•¯í¬çXÜÊ€¥ËöbÁÀúÓƒ(Ϧ÷U•! ÈwtÀ8$žÃ§#G5Ã}ž?ÜÈÂ1’rN ÈÉàŽ*M%U@CæÊØÇ®z~9¨.-MµüÑ7•‘M€w”“Áã¶?¥]îì+ßAdÓ|ˆV[¥d¸¸‘™bÈùWÔ©úU9-Ý ÎÎA$*äÏ~øý3Z÷~tk™ä1RʈBêN2sÐí>µÏ¼Þqc+ʲ}tïŽj¢¼ÇÔÙÇ<1\5Ó²4›Hf#kÜÓüzօ;*쵸¹Ý‚;€êíØ Ëœ â³´+K-ÆŸs<28òÔð8=qúS'‹ìZšùFF·.<ÏR¹ýxÅ.º¯›<˱FàÜmVôïÀýj©,±JÍt žˆ>ž@:ŒõÍ%œ†vUlÇj£kªŽpàÆO>æ™o*Nò0Fnèù?,c<ö<®O­n.èZ–ÒdXá–_2Þ9Ø£íœÓ¯4h¡µóÍæmð%*²)› ï€8ã·?Z¯¨L†ÖážPعÈö<}Þ) Úý’6õ,¸6)‡‘þMZÝ‚W*Ø9I~XäÚù]äg®?ñ:ÜC4D1;NIØ2[$w>ÀõüëGLŠÂ;(¦ ZêÚuÜåAè/ln}i’Ý­Þ¨RÞeRìweFßn¼Žxç¯^•*×mì=ÍÔ¡»šîÑYÌ?ºÁÈóp±ßåû×1l÷$1ÊDÛv’Fq“ëÿ׫qG/ÛdFmINœrI#Ú›h|›å*Ëc€›óøzä~½ë¶Q§Î™vІ$XÊU[7<‘޼ŸÒ®Y˜B!ÉÆw(ÀävüûUIÕáFðY•‡8ï׿JÓ±–¦ì’ÂÈùº¨àŸbOá\Îü–Dn;tŒi¢;„0Ç\“Øœtý;Öº¥«$-½,ËÜdðzÿœU›Ë­ÖÒ,m$j±†hß»÷T“’2Nk7N%§…$$ÆN äç½i…K™ß±Hv§NÁ²±Â©ò¦yUê9ú犹m,¶–qˆ‡™¹H½Îp:œñU®–Wº—÷˜Va•Ç^9«ÁÖ9dÌØ B¹Àq\½RlM"ºÚÄ:r<Ìü§9ôèX6™8±‰‡bÑ r­¶# œÍ‚OÓéZjoB€&ŽUOô­d’v½ÇhÛS ðL­,3 óc&ÎA¹ô©"Y<³¼•–F^8þ~½ETóvÙÁ#e³Ôã?ÅœÌUë´’kW‹;aÞÙ›¸ÿ'ò®FŒ†DQc"4.–9äñ÷÷«w¶ÒÛLEй@ȾoÌÀö'œj”1Mof|±¹°ÆB®IÀ}ãNZ™ï§—ɆÝZ1›£Á#’qœ÷Æi$µEFÝJ÷³K&rˆ£{q…矧ÔóYWL$ÆÒ¾äbÑÁÏýz·s4R$ƉÉÃsÔŒŸÔTpG$Ì’ Y òç©üA?\.•ÂöW,iGL6Wr_ÚI<ÛBFCãËùp;óU¤žâv‰v¬xHÑVÎ3ÓÓô«Nhˆiãe…Fc @y'è?ýTç^˜?~²F ’¶”ãã¦sžœÓ™0nûŽR‘:Ëm˜Rc¸2s“ŒpñL¿¸’Yd`ÄY°åÚÆOaü¹¦Iç²nÃ*Jò$=3ü¿:s7ÙlÕ C|žrÀ‘‚}²?JÉ¤ÝØEô/i÷ ko#Dò2È€¶ürz¾Ü§4ÛEXôûáç<’Hê¬N@É=}2GáU ø”œ*Fε1>ö–5ˆƒœ*ƒÉãéŸÀÓeœZÜê/i+y¤0ÆÓ™Àê3ZArüÇÐMF >Åz‘•QqzÎI8,7²"Ä9ü+aô©ôXWNš+}Ë&IVûÜs–ç¡còªú…½Ö¤ÑJÒ7Í·FOׂ׸Òn4í;Íñ42Õƒ8ÚN>€ÔTã ¯t0ܬÑ_0I&æÙÛ¾lñž1€ZI#¼·Ó3sC0™¢r£så¶àzƒÒ¢´Ûö9Šà»¾Õ'7 Ÿ§j‚{¶ n…0ò°Üù›’>÷sÇ¥d¹¶BDWv’,g‚yåË GåAª¶pÌO^ù©¬4ë‰cîÀ´HÕö;Ë#‚>^;g¿|b“]×D›"·!•§2.@àà€GaøV—Ûu[-6+uˆKk2o(®rps‚rqíZt/CBjút:|»Í¿˜ÒÇNHéÎOäSüí&Ï{½¤$·*Ï(gˆê¹Ž>¢±~ÜLRÞ‡esl0ϧ?ç>õšãT½¶³¸’HÑåòÙò8Î0InCÅ×Ô®î>ÇK¹™SŽÞG±@Uÿ)¤*ÈÏ\zJ~™§A}©F×w¡m#o>HæGÁc9Æ}µ6õ.­$6’Ï‘2oMÛƒ´”ãjžã²—v–…”¦òó‡ù€ëÇ@sJúh= »­.ÒèĺlRY„^k¾çuÆÜm€Ü:àQq¢êÜyñG4jX‰D^Y*F0Üž‡wÕŸ¦j]˜’(ä…‹ $¹ÀÆtç®=óWîïfŒ4Ëvϸ¤áØnÃv# ƒøÖ2~EÚ6¸šlðêm>øö°X¶²(ó9RžyÎ?¥uW_èi¡uŒªíE…0£æ““Ó·À]ݹ–  ·Œ&Ũ~läcÐàŽ:ñÈ­5két¶´äû «Êv™­"Õ„ž¶;KÛö6¤‰€˜ío('Ül;ç¯@zžõ§¤ùvÐ"CqrÒÉÉûâwc§ ôÕÇi:ÙDŽyTH„·šXüùè2:•×hË5õäÓaAgÂï'h?ttôü+z}Í¢tö²Á,bA+ŒýàïÖ­#£²°ªpË+F²*ídRäMJòJØÃø èæEYܙⵔ`Ǹ}+>æÞÚ5ÜÂýÂE:MF(–ϽÏd<þB«JóLÃä+žB“œÔ¹'Ðj-Á2) 3Gž™`[ëéMKB fâåÉ=Û§åVȆ=ŸB*MêGÞ:vyŸŠte›ÆVq‹IYnD~d¢L€á¸Æ:~ƒÖ¬øRÊâ=FåÕaY&Y¡VÜ̸ƒÛî…üñV¼kªÜiZ•¥Ü7;bˆb^²œ’û|œû}j–‚±}ªÖâÛNŠGŠV·™å›0POM§$ã­tFO’Ïbå¿Ã5¦·kv·’ÈÒ~è[¤Y*Œbq×§… Ïkoâ-2Cgwín!3b®ØØ0=”zöé]Žn$‹PÓÎx­f&)(c¸í 1‡${V>œ×ͪý·M¾FÙw#%¼²"6‘ˆÁ †nÏ¥i r«özôqÉ;X±çzç?Žsùæ¥Î_{»€ÀeäÓ2d|ŠãûÆžáâ*¾XçÐ\zXr¬aÙÔÍÔã“JBö ‘®â+pÌH3àry©׿ß#á»ìýzÑdÃ`(7¥ƒœñQÅF™˜)lœ²’£òÎ)á'+‚±0çùQ†Ï%àM-€F’Ëݳçû„œSž×NvYD’)€qúS@“<²‘þî?­.Üôfý(æAf5ã·ó㘙iÆŠärF>µVú=ú9ïO™‘œuÁàÕ¦„°È•ƒ~ût¤ŽÛ9–MÀò€EÂå9MwE±»°·±´ŽéÔ>e;ryLy®'Vø{©J?tŒø'˜ ãŒrÙênþÕì3C 9IU×=~µNSÍÃHŒ2Ãr°’#ñþt—÷Iöq[ž'„5+dh7ÚÆó÷@èädžyé·ëZ–žÔ-Õ†°Æ Ûˆ9ÄÉ8Ÿ^ù¯Kñ>“¨ÜÆÆÄ];-6ë’3ú×oa­i³È÷6ò[ZL˜•“4¸÷çi9ïŽý*œ[Z‘(ÅœóÇ ÖÙ (ˆÛA¸à‚_è:޵Ú6´ÐÇ œ•QGÍœð¼žG`{gÓšÓ“O’êåÚ0¥‰ 9b¨ îÏÈþüúÔk¤\[\ýžØ™Ô,å‚ç9'ÿ€óþ5“iuÔ繕¨Ht{˜¢µY7ã/áòÎÖǯéÛŠ’ê ¡#XG"ÈIb7q‚½ñŸóÞ‰"†ÿP/1)vŽ>vèÀpÃרÏ×>µ±rÚÛ਒I6;÷Á‚O·óëJnÚ­Ç{·º±µs§Ãmy¥¹‘°wqŽÆ1žõÄÏ9ãª6ö^K({òJ¬"jHNݦnFÝÊ8àt?¥u·vŸé<òÌDS·æàdväsø×5IÆódµuts[}‚{³# L€#ädO<õ¦4hÓ»]ö£lm§#§süªMeL‚Ì‘’È¡qÏ\ÒÜ<é9[ÉÈc¸në³°ÿë×Rq”D×Q—–×6\i ½Ä+$.üdžH œJX`·ªîÞÕ 4ü{c¯½Euuqpª“æ$K³Ôg=xÿõÓ"´›P’¢–5'ï³–TL1;˜ÇÞÇøÔØI]èBcvTyXà‚’ûNÝ}Wºš@9K*;ñœc¨ÀÿõT²K„h‚çå`ª\sÁ>ã'ò¦Ckq32ªF@Ú $ ÄôòšVÕ‰#gTº2øCN¶I7ÈÇ{âÈ9õá—ðÅCult‰âˆ»²‹d`|ÆlAôéõµ4}!áÕ4ÝÊw[¯šÉS!P2{ã÷Gº}Wˆ¥—ûviÎÛ›6¸vSîuŽÇúõ¥¦¼Š²dj·²DxäbþnÉ.Êñ“ùñì*(ííî5£’–ÑÄ׌†Ü‹ï€ëô¬«ç3LX²G$&0GCÈüMW¿’C9ž9O.Tôã}:þu¤aÐQµ©5ŠêsÂ$’RÒï†ä9ÂÆÊ dŽücÞ«Z[+@YÙ$e˜]Ùþözzÿ“U­çK§7R¤ª¢yj¥™ö?!“šµdµŽ%gDLˆÂ.ÜŽ¦­!4ö-[ÛÅïºHð#e#pûÇvsŽ:cÿ×Z8‰n£º¼™2ÁFÎC.=»Gÿ^©gÇ.ž¡®­,…™òÉÔ6Bå‡$u8"º{)tø´æÒn ¶òÚÝJ»†P>BÀgæ î3œk)½†ÕŒI?³&¶¸šÆIm§Ý›'#pÉzàŽ¿Êim ý¸P¸”«ˆóÁmÃ=}Î{b4PYˆ,b,È$Œ±)ópÎÃ9àòÃŽi×:DðÅ$ã2áÁd{ö>Ýhº{¦Á#ŽÝ‘²ñ«)8í»¨úU w\îõù¶¨û£Õ¿Ïô­»›T:TŒ®©8e ÝsÈÝùägéïP42}ËŽ-’‰ºž™Ï¿jjJÁ©’iPXán§ùÊ»ŸªÚèæd† £o0ÊÅÉ'°¼Öî~∮¬LÓ]e ˆ«9¯áëZ²œiÁ¡¸ órQGLzw¬di!P.Y·ž (ÈþuÑéïigE3¦â6,wry#ð¬îÓ¸’³!µ’êêÖY +½@ëäð{j–¶ n]„bÜŒdûb·b6SG(¶»Š܈„r12H} `q“Ž•Z( Æ6#lɳÏêjãU«¾ãWÔ ¨–<©ÝÀ>Ç­h@¦ÖíVHÄ…]IVùÛÐj}¨C+¨òäPT)r:w ¦1ÌUW+³Ë X ~_Zç4¶—,›ˆâgA%€ÜíVòFlæ¡iàF*gƒ‚<ÕΠ„Àß»˜)Û¸’I럧jÕŠõVh<(xÓ nsÉ#]¤GñÎ(ùªÓêr\$®°*œ„ò@àœ‘úUû{QqŸ%Äh÷ ŠK“‘ܶàu•g=»¿³ÌÞaRB¹Pñ¯¯¿9;%`¾†EżCPw]”]±¾O=1ý8ïZ—·—2hVñM)d¶Œ”R1òpZm­ŒfÞYšV‘Ë“$n£d…Ú3’9'Þ¨ëou;-³(Žv#}Õãýps\í·eqlĄ̃"”– +Œ®pcéœTwŒâõMõ +IˆçÜŠºîkšdxZ2v¢}г6LüŸ‘ª×zµÂh?cwxÔ¹Osœž‡$}qW¯6ƒ/i:}¢is]êv´³üö“¤¿,-Ç-RƒS^\-ÎR0<ÙT3„$`žÍœp2O=kLO8F Ÿ.DÀLñÓôàÖƒ;mÂeÝK+¦ 8àŒäqDå­‚ïbÞŸo YJò[Ë,*¤ƒЬ¥HùýÇ^)dÔ_Ô0ˆ×DEP, ûÙ’}ñPC{)¶ŸÉ/ N»¼°¹L’Û?…D°Æ¶/42ê%̉,o…*FOA÷¸ãÍkMAé-º¥ }-tË;S ]#1«~êA’wuëÈüý¹©¤Ý¥Ö§$º…¤’Ú²¹ŠÞ&ÉV9ÉÈä@ûËÕ×î´øgQ8€»\“îƒY&àuù*šÞÈFAŽ™˜Í)çÎqŸF4¹¢>V]þË'þ^8ÿsÿ¯Tï4™¢O6;§m§æMƒ§µB~Ñü7~,h&è£4‡<}óÒp=âª8¹b=ÕœÀÿ\OÔéUÞ22 dýiF Ò§”«–¦I^±Hû6=úS•dUóƒ:ŽC(Éþ_S9-Õªx®L!BÀŽ¡iÙul¹¥(dŒð*»Ì°ÊÊÁWv u=? ¨Òé$¸–Ëæ¼€ýåÀÁüQ›LoíK‘s)†Ï–ÌN3ÓŸLãŠÉèUÝ2~ÌâÇ, Ü~ŸQ\}þ©öÛ£c¨ÁvkxåfçOÍ·ó» ĩ˰Á óX:•¦›$gt¨f`|¹Ìsß3íTªY8ö<öhc7SnÑ¡‘F?$xÎwsž¹â•Çj„§ _8ÛÈÁþ•.¯5ÌÓ°ˆ£U¸EÚÇjõ9ëoÎÊ“<†#º6wr;vÿëW=GÖÇF-õƒ,oz#1É0Ú9AVxÈêqž¤õè*ÅŽÔwÊÒ0fù‰$ç<9­Y彞ÓÉK’’FK!fùPã8Çà{w¨Ä«,)’6¸W ÒªmÉ<€@ìNzQÏ nS–ØDDQ`†%s‚X}B_Æ­™MÍ©SÉ+`åþwüñK¸ùn#òžHÎâ0pGCïÈÅT{Ù'’KWÅÊyŒ ǰóYÊ<ÎýƒÈžkí›(¤+±¤b_²Ž=Žj¬¶‹ ÚK$‰ @!™8/»ƒéן^E]ÔbŠ+xÞ%ªIÉ@Hà|ʼnã®ÜjŠiåºY£¼¶%V7ççi#,OAëì*š{ÞÈ6FF£lš}ä²ïŽ}’ù™Þvaì@ãž?*±jBX8¤ÂLD’’†ažüŸÆ‘¾Û¦Í4q"&"û<¹>`ÆãÀÇûÀ~S­.&Yá•-‹¨T©©çjŒ}1ØÖɦ‘:'©J#iý§åËåÍ |‡'…ÁÎyíߨ¥†‰ìk8žyw1p /Ï#‚Aô÷ª²iì××´Ë2–qÁ$}8ü3Va–òÇTKøšõ™('îÏ­6•Ä÷Ð[­cSº·’u•Ñd¶‰\Gò€ÌÄç×cíVC@&‰dŠñÄͺ@­Á‘z­=j8<Õy¡Lqƒ’ͱpÐî9÷œð<Öí ½ŸhÎKÀÿ¾‰ú-T^–EÄlVÓÏo²îyKpXòã®yúÖ³¤hLímªÝA9çÖº®ÛÉfË…U1‡Fýœõëõ¬Û]+t†Id·D\Ò±Áÿgæ'×òªŒ­«c0[:°Œ)Ÿ˜ã%½€©~ÊïÙ •Q–( Û“üG±­{Íì|Ì]#ö³ª‚ ܃ӜÆc?”n–('Í—iaŒœûgÞ››ÝÙsÃú\×%£éñ´É¸¨|‡,£‘íŒr?:ÖÕt;Ý?ìðܼS[¤ŽbÞ0øÜISÐãæÈ#ûÝ8ý9"“A¶¸µÚ†%/*Ç33î9¨Æ~½¸5ZHnõ»Cr5 ñ,ª 1,уé‚>˜íX]Þï`KK•þË$Rí§šX`(ÎBðÀ\žæ®k^ÞÂÖ“HDi$äƒ×è8úVŒ§KšÒ/²_Än%Vfg ŒU†r8 €:ô¨InIIò‹JëÓ÷ϯ'½½® \†Ñ`ò.¦”Nð¶Xžç¹ì:sVž{sgpa…Ú1…ˆ R¨q߆ê9ÈÎsU®lY-ͼ¿Î2F¹óþ¾}€ëLÓ,ái§ˆÍ*´{йç'<Œ/§¢›bk±VÊØý²6,ÌÑß{ /¡üñе¦}šÂìÿiHí1pUÈ$\¼ ¸üÍIkn¦I÷ˆ"aœÏËØôTz¤s]N`ŽÒA!ÏUÏ·B>¿ö­_Q't0Ëbo¦q´’¦_bîTcÀlxÏè=j¶ý⤗J&R[Ìlà Ž:žOäj kY­·Ï,è¥[Ë ²‘دZPˆ_@. ”&Æ$òryÿ?R{}:YïÊ%ÀO1€Çúûñ[?`ÅÃL<È‚áÊ6Ò‘Æy8Ï5WEÌìKI Ëckt÷$ôãñ­ ®BÛÏp|ÖfqÆê Ãã°ÁÍg&Ç »¹†Ù¦snÌÌ›w‚1³è2sÛ¸¥Äò'd8Ä{² #?0öÏz½a!Ò­.6‡I¶³ù—h9üꀽ¶´¹—‡Vpq´óÀÒ•ÛjÅÝGÞ8Z-å’€g¯\ôþF¨I9‚sp‚ÃpNÌc¨î:~Uµ©Ý_y–ó¬Q=¶A•“ŸÃƒ×ŸÒœ,ÞÄ´¯‡•[®=iÝ\9Ô´F\´2Ot ÈK~í¿º§óçü*eÚÊ /’3ÁãPAgsg1cµ Éêr}¿çOÜwZ¦sÏËÿÖ§vÞ„Úû’ØÄ²Áû饉P„-''ÏóßJSöhn˜HÎþ\l°¯HÚ7ñÎ9éÜŽišt s§_Û.6í@HPN@ÎO±nþµ˜Öî8Ô†!† È »ëœYJѶ¨&*ÒÄ£ 'Œq€OЊfõ-L²4Žýp{€VŒºq³½[Dž’b¼yI†¬vöor‹43ÅdÍÑ“× ㌟¦*œÂ i糄ËJ컘gLœ¾1üé‰=ÚHÖ÷RH’ ó@qƒîH=¹¦‘,óÇÍ1À/1å€G9Ààw>•jX¬mÙÛ™t©ž³Á ÃΣvæ\|‡Ó€@# Õ½>öÂÃON™D‘Ȥ ™Ó;7 ™<AäVJÝ(UŽì+ÛFÛU—´r~€qŒŠ¯âBÆòXŽ–‹ cåfBÌ ÏS9úzÕEY])$î}GJŽ×Ë’ÎCum!:¦Ñ¸g xç5VîÐ\@"óC»(ÈÛ‚ž£ÜUm>ÚædD’í<™Á,1ORNk~Å´Ë×íé Ï)ܾS·˜¬¼`‘ùûæ³IJZ‡>ŇQ†ÖÖÑät—r6lèp?ÎM-Ö§41$/ä. 1! F§Œgׯ֣ÔõAq©»¡>C±N3:íƒéT®uÓ¤Œ „X1ù7`qŽ~½ê_3ÐiØŽîÆþM2Kõ·”Y–e3óŽ˜síz¯|Ú¢Ãòá‘U˜ã889Žøõê=j­æ­w>øZS ¹–L˜ÎGN{Õë´ëňêž|á¢Â«>6¶{¶};Øô­ã­bl›Ðmµ¶¢÷(±ÅæÈc*Æã1Œû½ãVtky<7+BÖæD¸“;cpÊzaÆ{V©†mHïÚæÔýŒ¥œ`g¨Î{ ¥béW±Eqëk!³wbÉ€ÝGnp}éõ°ì“³-=¹†îâÙŒE £sœ€ÀðG~@SëN]Émfr6ÌÀoE#ä}M$05ýüï§$·6Âré½Fà£ã¿o×Ò¡á‚â5Y2ÉX¸Îw–ç§_éYZÛ™Ù¤][KÛ;Á|¨ÒA,s¸¹-Èã=QÓõ¬é"žëQw1)C(‰^@Á=Ç=´òMY¥(·‚á±·>RûB²¬¤–çXX#gòRàLD€pK ãÓÏ(¦î3BâGßåFÙqo¸¾í»rç>8¬›yšX†â#Û±˜ÙŠñßæÇ?¥mÉ©lUn@-+ èðWÓÎ~••ªM"ÀªŠï5ܤåŽvç ÛœòiÓºu5-­ÚÎÙÞ6ˆ(ÉÜ7g;v¯©äœLÔ0D<†–fbØTä7¶ô}êÛ¼ñ${PG(„½‚?–6K¹–Š8ó÷{€í“ŸÓùÕF-7~£EÛ­eàE¼QMçlž€céÓ‘íUÆ ÖÂYRA•ÊÄ ªžwzžÕÛ`LžØY‰§šoÝ˼‚ƒÿ_¦*Û ‹ mˆA¼¯<Ãõ­å’);w„Zk´iu%ÆT~`OëÖ–=Q'‡ÊB¨Ë·[h-œp0;þGiW6ñë ¡Z’*æFR1ò‘Ïôö¡w ÛéwæÇQF1´žbË‚Bòž¿) €Fp}«9F;²ùz˜3ê†KB’‰|ÅG}ßÂ?2>¼ÕE²t·-qy»~òdSÊ›@^}¹éÚÙa´¹ ÆNÒB°Œr9''žzsTt«–Ú ¿gA/æËÑTIϸãÓõ¨D“d=ìGe%°cç*G÷\á†Fw`žÿúÕNâgy˜nŠ8ð3|¹ùŽHü¿ÏùV ïdŸÊÚø#XÎ9<’03žzwõ*¤ó³IS7™‡Qž«VNìKsFnélü—!Æï+s8ã ž½:c©®ÏÂúSOg4wÒ<$¸.'ù†:gžF3Ó§zÁðÏ…¼ÛÉ&yÑØTîÛ8ÇVQžãüš­~JI$ qÀü©Àg·J.º¤=¬•`äàšÇÃ@ÛýVLÓyèqQËÂ`&zSRDâå Æ×&§S‘° c¿Oþ½gG¬Ì<œ€x,Hþ•kcw\ìVLËñV­<6°5»GžnÅy“r6å#iNx¯6ûx¼Õ¡¬³6à±´¶ET„Q¸dcûÊ9ÇAÞ¶ã¥t -Å徕²E ?Ï3G’€c>à u)¸®`±~Ò9 ‰–WCž¿~sš•˜Îsõ©6'¯ëLq B¯°Žàô¬Ö…Xˆ¦à{1õá@_”£7óÎçFËvnp8úD´Œ¿ÊÒ!<嘟ñªZ±=0Ä]KŒ²©ÉÈ©NÒãGqÁ¦›]ØÛ4„çž?•XOõ¤7©Çòª±&BXÇ ÅÌÒEim8É òŒŽøÎ*ÚÁl%uH“@ùW×4\«ùsb/4U<÷ÈÇð¨¤Ô൹t™%¸>YÇLÖn*ú 2½õ÷ØÕ=ÅæF9l© ù×?ªX•½Šæk1°wC žBÿõ«kU{[ëx\þ]Êt=>n„ú™õ"®ýª'¶˜E™a@U_á*?©ü©8§£%ë¹æ×ÖâK™üØÚAÏ €HÈzîþUŸgmöB ‡;T…dP3×?Ðþ&ºýz8ÞVŽÆíʲ,KÐ?® ÊkgPÒ],˜``»‚õ•e(£’Wæ²)¬;Lò:§–¬\'ò¨ÞîÒfTdš9WÉ;ˆ;‰ü«yõ%{”Wû@I[p*¼¯Í‚là }j²[Áu«Kö•¸ŠÕ2áÂp {úçßÒœ©òÇAµ¥‘ÏG¦(¡·VžXñòm-´sŸëÏ>”«h¹ˆÒ îsÊõ}\ý*Í”ÓY,²Czð»’ª#c»v>½êE‘ÆøöFÊppH=A÷X½¬÷3–Ä’X3ƒh«ºÏ9ÜNsÏáýj½½è³‹Ë–,KÖÈ®Òú·Ò­–‘ܰ‘p×=?>§¨ì–æ<'Èå‰SÉäþ¼Ivb[Þ}¢äM<òEóHfm¤Ù°G%{à~8õ[Ë»²‚´p;Iä°õàŸÎµ¢@Rq´!¹"N3ŒVN¦·4 òîc,X¾@ä‘Ç^œýHï[A¶Êwd¨‰m¥!å T•9Ëm;xú–Ã5ÄÚE½ŒeÖ6F,¨3¹>•¶ú5¥–‹$ˆ’´²[¬ŽÐ7²nÆß` üêe¶†Ú +å‰×*Î>nG̾j›KP¹{§ÐÑË F#_1³´6ÑOsœãØsRÙ[•ÓâXÀgFãœv‚Çr¸­¶¸‰í¢€F®¹g#í!x_|óøâB±àF6¡sŒœäóùÔÆZY•±-– Æ5xþãsó䌑۵\ƒL´†{y伋ÎyÕH§ËL}º íÆ{~´ë‹î<²îCÆqœp2O¯¹¨5dl ÆÓƒ€Ç°÷?犧g¥Á;jEg „W—6ÀË%½Ê2>[pSÔ09$äÃÞ£KKy£xfóRé;HX:œpäŒÿUIco;ÅÙÈ.ªÝŒvÇÖ´<°°˜×Fþ÷l“þx¡»uå{›HRÑ`³`ÓÉäœc®z{‘ÆG¡©,m·Zµ£È F˱å_œ7G=ºc­JÐ *´[7”ŸÞ#qœsõ«vÐK¼rÊYÜ1ÜI8ÈàsŒuǨ¢ïb­r¥”6vú¶nnO9ö˜Ü•Ï|~Üf¬MÙ\r# ÁÆ{`ŸJÎKó®q'–Í¿(Ù!²Éö8­-ÌÌ윳’<–ÇQJLn6†k”hîá‹t#n?ŸãƒMt>t#*ˆ™Â68P{}q“ôïSMfÑ–(™#)¹Ù‘zçŒ~Fþá–HÞ9·‚ûS€Ï úcÐñJ,Omï´{“+(•H ŠAhÃç‚úc8=*õóI©>ÉâŠG0>á û¸Ýýî:túUO²Â°Ö}Á#Hçùÿ:}½šYGŽb&WnF8ÎÏøþµ\ÒZ¢,‘Iü+¬Ër‘ǧ0ŽFÂJ\…Ï©ïÐtëíCiO¤¤‘ÝlÞÎAˆœ’Fàq[¿Ú7º7s(I$Ëd¦G  `g'$wæ¨]Þ¶·jÓf3äË´ºƒœÓØqŸÏñ§w±¤1¼>>Ñl‹<~l`£<`•.äŒcëz×¶ilb3¼¥ZÙ€ Ã9bpáÓ×®ZÀ·Ó¯%Ö“MRã峨=¹'ô&¬ÞJ^k«6™\‰Êdà8\ãôâ¡%-ØÚšêw—F=Ñ@ddó‰‰y#޼ÌžôÍil¡Š8ã•d¹‘U‹F€„=ÍR²ž {"]27ÌD``NrOLqWu-&¾)k,ŒËi¶{ò3Š…)ûW¦†î0TÕž¬£d$[Ѹýõ!݃ßrÿS·Š9YѦÛ!WÈg™‘¨-mg™ÂĬÌT/_súÕHmXDMD[£eÉì¦9úUõ¹ž‘ÑQ-“]+ŒØ$ž‡Ò¥Ìãžy²lïÒÒêßÈܓȓÀNO¸ÇOSZ‹¥é¬ŠËupŒ€³>1íÍKk©7îg%£D¿ UŒïw ƒƒéUltyõ‰ZÍ$si7)ÛÀ<ÏS“Vo;£•UIP¼^¼±=#š®²ÜK[CoïuV’®F@ ôÁõãò*Z™¤,¶'ž©äŠò6Ú#a¸m ½ž¹ÀÆ;j{4žFXØýªC.öW]ªù Æ?àU<ºMî”A¿·‘ú·,Ìõçæ8«6W6‘êH—Ð+ˆ63Î1‘߃šM6ìÊÖå[ë‹©Ö=Ίc#Œ÷}Ñë铸šeà‚ð,/l½¹XÃ@Oðä$ú’*Ô¼Ó4ÿ°C:\»Ê§îƒæ[#$ÇsǵW“HžÞÚ[é¤) ²™÷Žùž*=lº ÞåG0H+¹‰h ùˆ,1Ž9 Õ[]_ì-šÚ6‰$-´œî^ cóäûw¨n%Ž{ŶŒ…iY#¿iVÌìT8# ä}sY1ê‘Û¼×m›½÷"3ç®0OQU i;¡Ùu7¤ðÜPx† {½NÚÞ;˜ÚQµ0UOa·@~•£§é/z.¤wˆY[³$W’‚‰1]ÀtïÇ?Ö¹}*Ýu?´†Ë;Däü¹Á޼ŒcùdÖæƒi¦Ü\ZiÓëŽÑ23=´ƒÊX®$çò­Z»±JÏ¡”c¸šõ„V~aD KK€= ç8ÏëŠÓ·’ÐKn×Z| ¸ýìR¾cÓÚ…¶ ÌÉ6 ¶×b  @:ý?*›÷dP¾—OYWÊ•mlÒ&Vû@ÜC#Œx_çTl-$ƒ_Ô.'œKaßdmÎíÇžœü½ë[TÓí/ô»h`h5äù'ÎB0C–ãõ^…{UŽåFɦgvEçÊ>™ ùÔ¦­¡“·B(mc–àGœÈ'O0[¾wm!@ù›ùëÐVh3¤Þmı¢n…†nr¯^Õ¿ ‰‘ü÷‘æ•P !9àŽœzƒY¶ök8i_tq0 =NöíùÔ]^ä¶™VæÊÒÚØÝ‰Ø”Ü ÊŒ’së’WùÖL7î°CÄÇSJÜÕ!Y’mòª†‡Ú ¯°ôÇ•€¾SFdS´ª|ƒ¿PzõéZÓÕ:¢‹{›q´ÀÞR¶X¼z𻤲\H¦íü¸¶™X1X3Ü(=Ž~¹¬9.fÞvG,zšÒŠe[hÂòm;ÕÆy<ôúWCM-Kµ‹KU‡R»†Îavm°K‚ªÊªÄ±ôê1]Ýì3Ù´·Í<÷1(ŽØÅÿ- è’rO†8¬¤:ls[´9·c.ï€ U?Þ椴·šîCwæ+Û*1MãhÁla‘žÕÍ)k~…'w¡n++û¿69-XJ˜/nÅ·"®=zqƒøŠ­>Í:ÁZrÅqæ‹h“ïòyÆ—¤uö‰|¹˜4þY…g9$.6ޱœÖ¡Ðà°¾óL“y,¸³çnáÑ[0ãƒS¹|(\«¡‹.›w{sâÃ^kˆ_#np: c¨ü1[ZW…d3´ˆÑƒü³or>è<*Œ‚¯w®Š_jÏo ‹Z¶À\±ú`àqÇ¥gámF !Hµr£ÈÌìăŒg¿ηŒ^Ò-Sîli6öºe¦Øî’}«€P/O×­kÃ32‚#läŒÈÕK}6K{8ã†U‹³ -ž=ÍhAŽÕ±À ¸«·c¡Yh1KmþIî)èäŒ'?Z¡Üû·6ÞëŒP±È1’§¹Î¶ãÜw•;²™%*½Ñ?Ç­ZŒ$` G“vâêÊ{éô4ð_jåFqÎÓÞ†;<Å¥Þ¾ÕYGfϽP½Õa´»µµ•Ò6¹ #váw qŸSž)\Læ¼oå6³mÇ—""̲c˸dz;}+‘¼’ÜIiÀöòÈ Lé°2†@ÀàŸ^ õ®ŸÅpêÞ+–ÉeM‡,29À{×- x,G4bŽ0pJãp_P>ž•q9ç¹ÔèrGồilÑÇ‚êa?s$Œ€} “ùå'mæyçaq­¾WÚìQÏûăÏqZ:%ýÖ›o-¼Æ6±0ˆƒå·!sîÙZÊ"c†7ò” ƒÔãô®.âm}Zi„WeO™3æFœ²à: ü}…uú%暺E¤pÊ&¹È?7^¼äÓ¨ýÛÛúûÆ­!Íguçr êðü¬?à'·Ðþ6mcb7#Éž›~aõ,WÖ·´Vó,¬ª•9ÍXhãuL0F{Ê/¨2¼7¡a±•Tž$P?^x«‚HØd¸ý®*g)…9˜?Ι<·À¡‡–²x`¨4¹¬.!Pá2ÍV¾Õa³³Ã,p¼‚<õ+ŒÔUkèYmÝþë¨ààžœãߥr%K˜'Ši¯7 K!`߉àò3C•Ìç'¡×Úk6šŒìIÎð@þölOþ<çSßjv6·1-ı¯šDy,0'Ÿåø×Žhº¤¶Áîdfj0!Ü:BÙ«z–ª×P´õÊÞ„7¡±q§ÝO Í$Rb9•Üþ¼ýx ¬ X™ðÅÕ|æz㟦jݔ˧Ã*«´‹*ì' 1ŸåþxæÛ K<Ī*6KaN៻ÆøV|Üú"’OcR2°œ²¹ŒÉÈ+Ðuý*2-£¹•žeA ¾0¡xöúV¼vÑ]ÛBèÌ%,$.ƒ÷Jpç>˜¥S–ÖÊÚwHî%ž]¡•Î6“œà{wÍkµr¹ZÔ[„Z8’M pvཾ‡óöªðF ͘$°Päm-¿®0{Þ½GZVÍÄ(ªFAÜØoF$côôãk¸Œa¤%ØìQœŽÜP»–£¢·„I/4Ù…ÞA<àz— ªÎø''9úŸz$Úm9ã–T¶AžaÛíË«c >RÀϸ•õ+K0)–›fæm±©ž0>ù©#hðZXb.êQçOn¹ãó¡T+¼„îPÁTó“Ž1ïÍ#ª+HªI<Œw Œ Óê5ܯngHùðqÈÁ?ï~„ÒÇ4†y. gËË.×Qɘü8ö«0ÛÛÚÂípe‘É nÞ3ß<õãÞ’IK[ÊŒјÔè\úò)ÜÒÖ+­ÅÍävñ³EÆ›ßoÊžK{sRArÍñn;‘ÔFeP89ÏN¸9<Ô{ÚH<»q¹v2’=Å5R‹µ@YIb9ààþ¿¡íW ž÷ »‘ˆÚ˜ÉÏ-О?Î*;fºsݵæ2>öNOòüêyR)ª¦åsŸ_ñÅI‚É ¡P%GÞ<õüê^ÂjäæK—¶šW1¸pvÐtè C<0Éhó@Xóv0#§¿§cMeu”'îü³ÇÊ;žj1„Uàõ^ž´ŠÅ© Z2Ä21Æ;nç<ô㿵J® ˜äòÐí'Í+“‚ÀüÏX­ÁUÇfÀ«ÎzòLbfGˆ;í †ç éÒ«dO.£á¶Û/ÙI%EGm¹©ã·óÍ06(mWnKåmaƒœúõØUôA§¬òàfyU‰#ÐTÚ…ä2ùs$")W*9ØsüYà~•¶W)quu<\· ±dÝŽù#‘ŸN?Z nŒ×¥À #phÀz`eËmP6g¾;Œç ýj [!5Á;†rWÿœÕ­µŠÈ^;–èbfà÷AéŠÓs«F]ØÈpÎ̃'Ÿá=J®ÐüÙ%Š2¿ÝÁ=?3WÝnËù¹WtXŒàÓô?• ®bV…ëB<Å:”bìåà·qƒƒÛ9Åh®µ¦E‚hñÏ2¼…w±ÆãÜŸÀÖM7.w¹‹wØ»x^O³<×K$…8îAžñïëUg¶—ûE˳¬ ¸R£al€ sëÇSZšN¢-äÇ=Ë Î>̨LgžFrdéNÞ ŠF½¾[A Wè 0êzã9$qWNh_K£VÃM6û®/nž;Ê®ÐAE+•Žzî8=zÔBæ?{îñG(XÝÀÎÈÆN2rZ§¸½·6†QºòÆõáHb0}¹ÏáF¨ñ½™xàòD‘à9;¤ÀèP¿§­'4ÒŠ_>¤óÚõäZ„ä;1™Ø3±ˆäyíüërÛBk-ÇR2Å ••%l’Hàã¸ϵr·±O2¢G((@+°¬{ç½tz]×Ú.-íµÏ8Y˜-ÊG´ÊcW F0=)Æ>íŠVdºÝšiבjbí$ÛU6ùg8Æ ïý:VDFÞ‘QŒ1œ1sóuçÖºß^XG ¤¶"íù6§Ï‚\sžœÿ‘Êhì9{˜®$¶! @\ôçñõíYòÝ´9¤Þ†Ï…ôí(ØÞꬮ±ïa !¶±Q‚ó³î<É/àºìÑ&71gÎPß.@÷¡§è÷Þ+šàZË ­‚Ý}ç'å\gÞâ´ÁZ­¤sÉi}A~î`ÀRàë‘TÓÞÁ«Z#:K Jü’פ,<åJ dtG­2÷IÖ,¤Q‚Îfq˜²F7*€1Ï^€ «Ú3iöÚ†«/Ö°¹‰a“å€AÏL?®)`ñü‹s>"dŠgfUUv{ñÔÓŒn÷.);kfs^«¨\kpß}±btc‰áWŒ~TZö“>Ÿª—–úÖü\³;}œðŽy?)Åvþ'Ðn.4ÛIì4ä†ÞXÕ_aD/»oœýqÅaiqhš=½Üú”¯.§ …~É8Þ€v\äç¿OçZ'º _CÂâûIl q³oÜkdäu#ô÷©´»Ë"»MFÙÄS©eš-»Áúñׯ5×Ûø/U¿&xç³µ´Ÿtße’BÂÝ\pp ¡áýÑ4=ZêH® Ö’IÆ«ºTs–ÇL“ߎ´Ÿ[ƒRNÇ"²bx 0Má2ÉIõÎ=«¤WxÖâÖè=ÊOå˜e_:Œç·ýqéYRY^Eem«XiÓÙ¢³$·g8Œäs‘Ÿ¥XST×`}júKkINÙgFÉp²N 81I¤ìJ²d·ú°¹Òn4“j%ºóŒ)^c A;OaÁãÐÔV—³M*Ìs¹$Ž™ÝÔuÕjšž‹e§Ie¤ù¦iVB `— @Ù‘ÎÓøÇ5¯ÜÍ>¹ä )ü’¤p•s–#Ý=}ª_BçÞæåäú¥»ZÛEkmùr,LHl•!ˆÇ 8õ+YI)»‚ \2³ð Øü[ó#Þ·“Æú‚Í Ç›tèb˜ ä‘üa]G%ôlЦ) ¡NŽÇhàô8Q‘êy¬ä»É'¨“êÆ*A¹¶ùœ&J·9ú |q«^…EÊÙšO›EÀçžžõGRÓçÓõùm/c”îR^@@R¿.þió¼ñ‘ L~ÌÀ4Æ!ó6v¾Ô­¡.6ÑžòÑlÖàAkç6XÇ ó •¡•ÝΦîѵɒ<FËÏÍ´p0¼Òê‰ ï¼Eá|Ò Œwíý Ý]/JÑÌ©qi-Ô’Ä^Þ6”‚¹o#½öª’éÓ\iÑê5ªn˜ªÙ,›d\ÎÀ0Æ8­œ¹¶5åÌ»–;‘$–ÙßhÊ#pwc'¨ízÙ¶‚kèËéw#|Œ°ÊY°SwAž›y#Ž+&cw©%°vA!ãoÌ+‘œõ¿ã]Å•Œ:-ß‘$imìÃh9oLþ«?g{\#É4¿‡“¥Ú^Ýj»nï,‡qú‚}«¡Ó¼1h.¾Ôš”—œ11© Þ¬qÉür8枺ݴI¹ì–4º2Åw9nqƒÇ½kÛêv÷Õ$ÜF@ÜGçZëÐÝF#mô%¤—“ɹ‰n`ÊP9­dû=”p!j¨ >9| dZ€Ü‚’ØxœÌf¬Å,lª:·|)^EY Œ\¢ L Œž„wïÖ§.ª,~Mù}BãûÄà §uz4qüóË+mU‰NÑõ#8\,]Œ2ê:RàzÓa·m»™FãÔÇÿ^§ÏJW)"Qœ~œt¢æ ´«›4l±DeIU¹îèEkB§#´žâŒ¬ÇK4S‰'`âX£s¸ŒÇ8öi#xßæ r9?6FG|qŽOök˜ïš5†G‘~C!ÂòF?Ïõ¯Jð@¼û:µÝ±ƒËBóžù,O9ëÀô®znú2è)]¦Pм?¬I({’ö±€3Έ±Ï'ÒºOìkÀ¼p8ç9?ζY‹z~ÑÔŠÒ1PVÜì„9‘Î͵iw0IæA)ÃHFvõ'#è8÷ªÂÿSŽU¿7j“fÌciSÈ$y,~•ÔÈÃŽOašäu‰¢»µ¸¸…§BÄ:€ªØVB?ˆä’:þ´ï¨§}îXOj7{"¼KXÖEóu8P2lzP\øª¥û(¶…•c ^68,{`äú~uâ ìãÒÞî·Î"-pŒ¥J’¤œrOÁyé\ô&%*ɉß¹{>BçòíNUÐæu\]­VkMLL'±A-¼¤Àc; ¡'qÓv?Ú®~úØÃ6Àw;…\ç?xÔ} Ó ýÆdšwUÂ6TSh?N)Vê{ÆQ YÁE Æ2Çùô®w&a9ó=J~|2È"˵ÙIByÓ?Q3ÜË.ÐØ‰ÉQÐ…úY¸–g¹+q(–è¨ÆB«À*01ÓŒÿ’Xnhõ92PÃ|ÝB†BÃðíM/x†¬Éä‘ÖäÜŸ-IMŠÁú¼åÓÚ´mnî ÝYW Œ°ãv{ßßµ`HÒ]Å Å“) ¼‘ÁCŸèTUëyÅ.жÇïI8؄؜¯ëTŠæw»-Ùµ”w¢+:YcÚ63€¥GN1÷xÆkæÞIµš-žSI&ÜœƒÁ+ïŒúõf¦øbó/p#qSØ}Oéõ«a­lYt Ä|üpO þ§Þ“l\ú”† ¼³#‘¡è:|¤ý}*ÕŠÅw¨Haž“æ±Ø»¸#½[˜¤ÚCM…ŽH¤9rAeH9ëÒ³Ã}¦à[ªÆaoÞy\zvÛYµÔ/bÄ7 âaµöáU¿ºr'™ü*Û_É=Ì2[Â3;ß)ÑA9fýOÖ²üøçŠf0çhܼ*ŽsÁ>¾™¨w»»Fv)T1—#(Ä0CSËï\³6属c‡xQd‰™\7,01Éç'¨ÇÆ¢Òä lÂM¢L¢¡cód`dþXüj“êÊP¥Ë©Æ>sÏÝ#Ó§>½é^s,‘Àå¥`HPH€8ÏÌV¦ô-É-‹±Ýî’ë=Là“òî<þ5fÀfóñ»€§Œg 8¬a©[¬†ÞEo,Œ•7Íò‘ïÒµÁ‰w¤!ætUÁåH'ÿ‹\TI6샚ú”o.Û 6[k!þžµ¡o+íîÉ##ÔçŸÊ¨yÞ]´qM“,€pN:Ÿ®*òÄÐ+Dß*„(û@êZn×°®ÐZ¨TcŽR`Ê}>÷?Ö£¶ß1TP|Òr¨$‘ÓúÔ‘–â@Ì0[zò?´ËÆD¾Ýläd–ù~èõÇ·4n™jZ\løxeŒÁ!vÈ8nqØ~_SíT-…Œªs€ÌÝèp8ì@®7Ü4V¶ÑÈ×R¦å1ðTžO㜚„!ŠßÉw&|ÁÏî3BÙsõ(Dï‚…IŠTÇ ŒtñÓ85£§ý†í9}±’"D8ó1Žý8ýj¸DŽ,”e$=‡J„†?;ÌPë“ߨ«¾–&ïrb±´¯±|¸Ÿs*g;A< ûS¥Œì]¾v$ýOÿª‘'u 3fq’zƒßšs4d+@A»nsÍMõ3Ø’C*¨è¼`ÿ?Ë·µ2ãÌH™žDwRPG´) ëÛ9öÎ3Ú¢DYcêY¹úzÓ[+z©),ƒ9ç¡ïƒMJÅ' ˆ¨²,ŠŸ»U-´°ÿœô« ªëä܃$t-ßñÇõ¦5¼·ÍöcäÆˆÏ$ƒ¯RJ–FÞNC6ìãÜZ ØdóeÍ®Yã2£•Î{UköYH6Áä ö©š ²‚—Sþ4’§ÉçíP¤óž¸õ§Ì˜Q­‚ÂBØÀ´æ`°îÜHë»×¶M¶‚zêÈÙcxqœt uéÇçUà•န•–H¸pwIè?úâ¤iɈ{ñP?$q§l ã¥Kò®YÜ:"¨ é0w½ÎAþtE·jÆhe}Û¶( Ž3ÏãÖ«I$rÎÍ+«ŒO(þ#ž‚«Ëså‘€rcebüýs‘ÔûP®ô‹E¹Ð«““æ6Cd”rqRý®.ðŒ÷Ëõª„7þ\@È®Ê9cœÓùÖÂÌ&‘F:g¥*.Ç9~ðý¤“͇®Ôãx9Û“ê:ãŠAqj<« ‹8ó¿‘Ǩ;¿Î*X¯N¹rn ½½¬.>Íó\ ã#€yÆH¦ßÜCoµŒ$´¨ A$xÙÛ’zñþy©ÛÝ{™4eÞ¹[{tE"ÎNy'¿à¹«Ú.Ÿy}jÞLq3F0ÌyÉþ~¼Óõ“3Ø´ÒÆÙlI”Çc§°©tKÙt¹dY$>`Âð;œçŒþ•²ÛQ;lÍ -äŠK‰ o[ÍÒ£)þ.àÏóúÖlú‚Ç*dmP»NîrO?áV¥yæµ§a–Ýžr}³ÇÕNçJKM"Þ÷Ïk‹ƒ+§ 2wgÐ+d¤® †ÚËFµþÒ¿·ŠO8mµ-ÆrHíÓ÷æ°µ»™¼AªÅw »ÚEn!ä^z÷ ʲíäž+a(ÃrB}ÐF?Öº;ok7Ö“lkH,ã@¥À>Ù·XÌP§šÞc*m@Ù“ô8ÉëG„ášçĶ÷úl ¨\™¦[…ù ŽÃ=1‘œsUÙÜ{Ù|šÕŽ‚E¦­kÜ2GDë&äÚã'šá5+= _Íi¥’ÖTˤRèIõÇ<ç]mß®/nüÏ2ÞßP¼vŸÉ2b(ÐBŒg#+Û½T7–÷~.Ñìtý6ÒÊòÍž'”²í…À-‘Î0O¯8½RZù›5u¨Ë/jI†$ÿI ÊpJœãw]ÄŽ¢¥Öõ™õ d°ÑÿÑæŒrZFØgVïÀ^ß^²µ—Yñú·{ˆå>jçäR^½Á9Hö¬»¿Ão>Ÿ–“l³ZO–™€Ý(HÏ~yôšmîEä—¼f_hºþo-–¢“Gi ó— Š3ÁpF{zŠÐµÑœè°Ãy ¿ö\nÒ¥ÜYؑ“œãÛØ{Uí[ÅKm{&¡×Ú7…ó,˜‹€Cžs“Ÿn•[V»»¿µ½Ô/T²•SÉ)òÐ…Á\Œþ9✤ƒæ³bGámR[ëk›+G³"¼M"F0Hî9=ù¬¿k:¼ÚÂ6·n#¹ˆ,/…ÇÊ 8}ûóQé7“ «Kye•`EaåÄåryÀ÷äûÖÔzk$2j-·BiµÌÙ!6FÒIà3ßÚ•ÒÑ“£ØÑ³¶6¾!´’Æâ öûT•ˆsÉÈ$pF§Z|VÖMtÓË,ïªÃ)w‘1ïæêzg9ëOñ,zž¥shÒZ´·ÌmÊ ‚wÈíÁÏzã/5U´Õ±¡+ó+«dGׯ֓Wv-´­Øé¬µ{[[Œê‰iå[ýìñ†ópªHõÏ|ôéX®§Å7Wz¥·Ø¬‚˵lË*¶À¼•åëÏ_ZË—RÔžc:LòÃædX÷)>§= ëüªä6ÖÒÅ—uä¹U·–2I#$cž}}ií¹ú†•%¤w×fúWŠTSöscr;žý†øVÅþcö‚ÎHaWdíóçê9÷•cwkgo$GNóõi°É"g+Ï+Á$dûzäV¢^JmÞ8^‘÷l6åƒç>„ö4Ú)+-X´ß¶F‘,ûg–"&¶•Nâ å@9>£®1Š×Óü7kqgoÁl>ÎÙS»vÒs•Ç·®yÇãYzŒó‹è®ÂDXPƒ‰9ÈQúzÖÝ“É{oÂ1±Çk Ç#œç¿)úâ¹])s½L%x€iñɪ²îD…Îö;À~cÎ? ì l)ÎC ƒéWV [Ï ¼w‰Byeó““úÖ\“Ê“¶>T1Ü:ž¸ÿ­è÷Ó8™gEȦ~`qϦ1V•ÂÂhðÏm¨£ˆÄ¨ÒKœ €nÇâãÞ®M&;¶¸‘R;ri# ´’h'ß{'¶Ç#ºKmò6b* 9 )?§åš¤Ðý¦ CbÑ2=¹3HÄÄõç“îJ˜êîÆ¬Œ{‹‹‹­BQ¨*˜T^Bœ sšl6¦K9äg}ê<àܸÈääƒÇ_Z»«@šd%'m‘›cTò~aŸ÷sÉüh¶]蘔I’8ì‡9ïÍTžšüíª¶÷&'"9fE' e—?_Ò¹Ë[“ %ÀáÝ”…ª¢îúœ²¯ýòkf8$¸2€x…  ÇsŸO›ô"³ ‚0×&FLCaŒ¶ !T“Ð׿©¬+\¯e1D÷„‘\nÏÝïí?­\†I®e¢ÜŤt¯‰üªŠ–¬Z&0®rsÊŒgÿ)AùûÔñMekµ£‰6ÛŽ§^¥ËÌÁÚãH‰þÐ>͵"P qÓœÄsÅWò‹0‰etDÙ…'!ÁŒúðqÿê©Òê7$'*ÊTòp?‡4A$‘¾Ê’'ÎÃj€ ÁöÏolPýнʫ  Ûûé0ù;ÿ¿žœV¾õ£X”»Çù o€\´cÐü¿fÍ{$I#ÅóP)-ÁŽ û…]µm·Ó8 B"1’põìN¢‰ÁÝ6]˜–WE.£óÝícƒÃnùÍjoQjW>œ[nÐ+ö-ê1ŽžµOSŽKIa Ú€l@0ÅÜ’3Çoð´Ûyí¦šw‘™š@6.xr?3NjQ~ò%®Wf[kŸô·E\oc£r·g®_΢€Å³LÍ+b* îbØëéÅ-ú"Z•‰Õ¦;A= ỚcCjâ9&¹‘Ê奌U9ûçÛ QÝ“]Ë(²·’0Ç2ùa„ tè9ƒÏJ¯«’K-Êœ3QNøÇ8ôþuu³¹“Èy~Ês"Ç+ äppxÇþbKh£·W’E1Ê䈜`sxÈl~-ìV­éÐ…'󬑑üÌ á@'ƒÔ÷è}ùÅVA'ÙÚ7”6Ö8ìwé×<“Oº¶³ŠYвEæ¨2H‚9ôÇÐûÕ§ŠÕcF‰X-·nwÏ<{þ”ÚÔ7Ý•‡ÚÎ'‡z±;ÔȹNJr6ÓÖ᥶àPÄ‘žÉþŸ•_·µ°6›mîoPä‘*acNIàíÓœ «5œ.èbTŽMÀ'lOÞ䔄ն#’á¡É?–è7;t?áV"‘•$b£ì±Ì ã³QWËdE܇Ÿ›©c¿ãK<Ï Áœ¾lî@ÿž?Æwv+™†ëË–FD.¬wv>þÇëV•÷ 'i#œúðëÅRIYäßGÌ=XZ´Y!RŒÀg<±ëÚ›zØ<Æ’¥Ù·|½G¨æv¹‡cä*3ß÷úŠtq)‚ICnUç ŒàžßçŠmÔX·aTgï3NúÜ.˜Ønã6ë1ÈHGlðGojžb†!…'“•Ý^ÿ\TykÙ£d„óe±×¾•bß .ǯ<ŸÎ‰5r“CòËlld tù¦Ã®]ZßS2˜cŽà}£É_žmäç§Nè8íÉ«šÝõޝ{ý¡g¸7™¶Xœp-¸ž¼8Å6½Û”㣗S&3D¹ÑÚîçQ•uåã¶ €1ƒÆNyäZ÷ºí–¨t>ëNû=¥”ˆv¬„h#Ÿªëš&—í²ÛkHó(KÀX—pÇCÏSïÅ>÷ÃP[î•on$ÓB.Û´‹åßÓärxôÇZm»¼´±¹©e©j–>²·K=1÷BCí 3÷ÎNk™ñdñm,5 F[2ÊAòpXôÈ 8Àª6;î$¸7ÆÖê $Œw?wçúóŠ‚æÔ„lBÛm–nAe€^¿Z9’iÊû‘jÚŽ’º¤ƒD‚cg$`È'˜?~{Ž}Mu¾šûCÒ//!³™’1ûÕìdç’xîZâtô‰]n©1ÆAG\à?Ï­v~ñ¥¥ÜI 6©sÆ]£;àdvÆ}zS“W²j÷"×fÓïM¥îƒ ø`».dg/€HÆ989ú mÕ•µÆ«l|Ío›zc¡òxê? š/_ýŠÛDžE;Ô3Á ’OÔ “X¶“È]”LÉ0@ŠW'>½ø55­€ˆÍtfäÈÇg#¯óã¾ ;%¸£§câ ;C‚ÑeÓ¤¾Y–4eÌ›ƒÎHÈìžHëÒªÁs}¦éÂÆæUŽÁ×pl“‘Ù8î §¥cÝÝÁöxåß!;ƒ9(àp3ú}jÎsºßìæo´Ã&K…$¦{õ?J•4T},>Ç_¹LÃ’²HŒ9|îRps“éŸÊ²ì´»ÝnîvµŠ9doÞí*àgëÏÓ¯á]f•àxîž[ßíÄP‚¥d±È9ÈÏC“þÖèž–(–çK»³ ìYIp<þU¢‚ZG¹Ìé¾ Ôt›)¥¼¸H„à†ŠDr ƒ‘Ð`ã¶s]5…4ø#Ž9¡’Y¦@¤[ÈJ¨È$œŸRk°ŠÉ!”JÎ^]»I €}N=êh¡Š7gH•XðX. Z‡ÝÙ¢‚2mÔÀÅ—X³†4“÷ÛYsŸ)ãÀ⥌âV$$d©ãëZ¾dc @öPZÀyq’yçS6}JÒ,à2=ê6Ölc 4Ï“ÐÛ=3éZ¥a™ y1:çÈ®g^]$3Á+âW!D`¹ÏLç¥' ®^]fŲÞð†ämàôäÕvñ²†QTu,àà}j•¬ñ¾6âUÉ6ÑÇn§ðü)—+hD«¥³DÃçòð$íü=ût5<Å[CVÚúÎäb9ƒ©ïÍeøªöÁ|7©ÃÛî~ÎÇb°%—Ž=pGã\f­qg è›H¸x˜ñ-¹3ì==« _ÔgÔlY ¬’¢ynû°q’sîyÅKª–Œæn]$ž6+F·DGƒ«ÁŽ<ß™pôTþ5[Wñ\ºžÏ²HbCd°ÍÌ~ÌYvº|6Måô®²2Dq‚[úŸÂ²à’8ãÛ$‰ î䃖V=‡CÓƒéQ)¶½ÒY?AuI¦’ø‰ ¬‘ü˜BŒtè=G?lZoøGX2y“Í*¬h«Ä+(×c^=«ëP[K„¿TÜ»‰uÊmÇüAãÚ¤µ½¹‹z\¨Ý;‰öºãiÉ>œgúÖr‹i1;¦-¡YtÉ#*á— €âÏ\}3ùÕËYeƒOû$ªQcfÎVÏ9ÇëôëU]äÑ‚Q¹Ê–QÇÔƒú~8×ÒîíüµVùf’èÚ„oœ@Ãà÷Ü×&”®–€ÓhHÙC»H9<íÇ­Y·ûB’ðÀq hÈraŒãž™; Õ»_.X^æHñÌ£ m `¤ñŒò¯k&›c`²Mo3B²FÀ“´•Êçq#'§Nµ)Ý 4ìùÏ@WIKÀ¤ÆèZI *3ë’pGCÀéW¥šÈÄòmpeØÁÇ|ŸçÚ¹õÖ_m±… 1À]¡UÛ½ƒ0\ $U>•©¯Om ´fØ¡KÌm\`§?+qÐ3ŸéZ+$uóZ%+[µmCϸ²xVG+ò¹ 9=2ÊF=GzÎÔÚçL–Ö7˜KçÊK2de3Ž{·56›ÅÆ‘nn$IæiU vêv‚8ÆY=3Þ¡™âµ‰,Cn“c¿˜xܤ©Á<ãq*8îGjÍ»é 7èQ×./&Ónb‰˜Ø‰6Èç²'æ%°{ƒYžÆØ3‡g,¥ÏVæ$~,¸=ÿuÔ¥õ‚3±^FŽ%w%Gp:’2ÏuÇ5Ä‘ØB–ð°eŒ é…ÜFãøþU-Y$g.æMÄmϘ%Àqå• qœghõïÍ$lŠ2TÇ!ç=2 û5Iuh“…ž!%Üq)"°E^Y»Œ~nÅEሥ“QÊÈaTi¶ƒžHùsø¶y«[\Ž].Éíæ–/³—ÎOï÷à°ÝÓùñW,æK©mìá?½g(ŽI,1úœÕh¼ÌÇ“<²˜ÊìHf.yÏùéIio¾íf„ºbA*¸ê ³cóÇþ;š9­¸¬Ž†îÍ`vW‰áw:±ÁÉù‚ý2*­x²YÚ£ÄD‡„ tGääjÝα-Ö‡%…Í´W’2î¼s‡¶A:¨­]#K+ƒ*(È'>ǧåQ&“¾àì¶*5•ÝÌ–±I$L—,#&U rÉ‚­Ae•˜+2‹§‚G÷¶ªœzö§5ÂÍ2Jû°)‘O~•  $@1+8VÉ'ÿ¬?*ŽgÔ\Źí¶Ò Y¶ÌgÚÎIÀ.¸ý1ú{Ö2ŽÖòrÙÀDUs‚«Ï¨€ýqZú\‘ÛM<2ǰ(Ns»i'¯®JîÙai!¸ÜÑM.ýÀ`r@ãôú÷ëUͦ¥·Ô¯a¡bíD;À~ÇïgßiÒ¡²²Í`yd19ì@Êÿ…[vŽÊ6óÁ[y®æî^Øã×ùUئ±D1C1xÛaa‡\qëÏéùRzh$a½œŒÉæ[È€¯%CÏO¦JÓ³„,-[þú)‚' ?^ã‘Wõ+¸ŸL¸r¨`à Ü‘ÀçŒÕcz·6ʪ òâY7°Á##qFF?Zwî;Y”í¡,Ó•Gë\õížã×ëSê–vñ_ÜM<äáw$j§©çð~#Ú—N†{sp $gØ@ã°çÜŽ¾ÔÛ»ýöì$å~òŒ–yô®šTýµ[_CN[ȳ œw©‘]Ä^2$1·H<{óÿ]d$¨²È@~U'Áürj峬rÏ7Aê@Ï^Ÿ¥Mo§ ¸šTd‰mÀVÚ3ÎrAÏn”cTíåÞäOVB×1Ëw4r.![€#óœ÷ÿëÔ’k€^$`“JÑç¹Qƒ÷ÏåUL²3Kx™÷–ÆvŒ/_^ßç5y-àTTŠl õÈÉe9?÷Ïë\¶] ÕnV_*õá¶2B åùÌŠW'=¸ÝŽ=:þúél~ʰ[†|Ò(ÁÈbÀø ‰Ê%àÎUÀ` uéOŽÎúê篚À± :sß#ó4$Ô®“é¹BÕÚlVeR3û… ¶ÉäqŸ~+Jy¢nCco88äàþ<Õx-ÌPÍ"J6¼Æ'j„ ;Ø=:óQ:íÓ ¬Ù\’Ãi9ß®éT÷¸4Z±»MB ¡Úб°çXç'¯qÇjµk#Ás< yd¿—猣Ӓ½;Õ}L6𱺗ì¨f.Òùf@3À'F;ÕÛ‡x¬Œ#Ë‘ÚRé18éŒqòç‘Se{­‡kjW•”^‰Žqž=ɧZ;ï{¸£J‹»1)o-yð}ûÔ3ùI(x$gŒNñ‚Hê;ÿžÔ‘I2M,VÏÃ1@ÁÈ%yãã¿­f¢ïv5¹—D“ïf|È· ƒÀž >ÒòK›XÔB— ;%“*¹ÏÝ#=ý=émlÚêñ![¥IC6FÊ…ä¶=ZÒÔ´­)ântð¥ƒ[8Æ?‹pÁ>þÞÕ­¯°$Þ¥®£š5¶dD.ãxW!9àÔR^E¶”|ÅÎÍÝppqúЍî²È²BÇÈrOïÉ8ûzûU—–(-üéÜ4D+m9ëƒÇÓ#ñ¤“¸[°Ø#ˆÅ—P.r š~QÀÁœþµ¯,v³GO“kÙ‰$Ý»àçÒªEâ%·²ðÙÆcrv àúôÈëÚ©%”ÚÃoÞæ(^{qüê¢Rµ…¹šh|˜‰¡%e €}FHÉÍY¹gY½ˆ‰¹ãß³CòŒõúâ±ÔI*K#ÄZ$ù¶žžœŒ*ÑÕlÁk}BÆÇ˳–5XÜ( [¾qÇcúVŠ7Mö ½ÉÀª‘Íò89Á'ØÕY"Bîà6þœäb­ˆá‚ÒÚæx@WrY¼ï¼{}9«×7–/6‹ç°$É/ÌÑ矧N;VPŒ¤†›µÌ†oÝ*lRÇ ¸õÿœ¡?©ªŠ[:œÏ›ö8DGúD ¬]Ø€A!sž˜ŒŸÿ]fjZTöS„’H&IÉ>bpsýÑž½â*¬7÷RÇol`ÛIQ’zuãùTúž±.°#YYÆøjå¹ëÜ85J-1(«\’;{.)mBCÈ¥¹aéZ­y$–ŠXEÅŒ ç:“ëÅaÚ$ö×{¯¤gÜ¥ã»/áÛÛqmÖy‡xÙFYIçÜùTÉ_vHè!>tàHŒÃ ‘¤  ¤þxç­Y’HÞÞ++Y?Ò”ñ&üÜgÿREc,«›c7 Ž@8ëÞ¬½ÍÀ¼Iÿ­8á6.Fпýo­W+¹¢šuÕœ¶Á {Ù†À›òCnÈ>€€qו[ºÒu[«ÛM:;qD)¹SbÉóÇwñz÷®} ²†äAr.!”ŒÇ"g¡éÁíï]yña»ÑÎûxºO–ÚUÀ sާ‚{¥ +vižåÀW>EÕ–£ òJŠs¸·L ÏçZºæ»§x´+ý5LŽD•!‰RÙ 6žÇ¸x/otë¹d¶ó†ª8Îwz¯Óør÷PÖµëw“RQv‘´‚kŽUF0@õëÓZÓ[Yšè%έ}7‡ít«5#·³d3:ÆAÀ<óü$ŒäÔ~.ñ¶»wfÐY¤VÐÆÑ&U㩘üj-O[Ôf½¾¶³¸S=ÍÇ•(‰±àmÈõÏý~µy|?Þ0£²êð’ËmoÈ]N2\ãž™àqQºÔM6¬Œ8­f6 !XƒÊÀà¤÷=ÿJØÍ±I‡K·’9öí•CîóÎãŽKqÒ ¶[Ø-í¤m!žÉ6¼›%9 ”lð¹ëƒW/o-_Y‚{;o!Ø#"#ccgõéÛ¦k¾¡Ê–‡K¢Ùë1ÄšV­‹K$€ÈHIÈPÀc<Ÿ~µ—e¥Þ_é‘Åö˜öCw‡óå'Xœ#-ÏN:ûV¤÷z­Ž¡{oÄR:ù)#‚Á@G`yüëžšùc¾’ô‡\LXGî Ó8çÛ··N•£•¬kt•ˆ|Co§Øê·ö÷³G¨muhb‹(ñäg…ç§à;t¤±ñlZ „éðÃû˜4x »=sÀç8àÔú,S]ß\I«M{)ýäò`mô㓎9¥ihÿ £žáÛR¹›Íç*°œ}Cž+HFÛm¡æ6ZF£®ÞËöxKÍ+³ìŒmQžN?» øòbZæ×kÄÜÇ&Sqí–=?^±¢ørÓF…Q#ÝQWǹï[!OµhåÑsÌäøyehVîK5o/iòÒF}Ç99È9ôéÒ¶ŸÃ2]K±YÛ[F©Á,ÁÔ㎜ì*ì»ô¥5:•dsš~ƒ46¡.ã´º›n ̹ã¥]Š;ët+¥¨Œ}ÕG(áŠØÅ $;šc2c¹ÔpÖ9ÇqúŠ‘g¹ÉjÃýÇ jÛ^À8Bd>ˆ3P¬—W -´YÇÌ2äzã §`¹jŸ¯Ê»@üja<ÿˆ[¿ñ«ö¶–‘£<·áÞ-…ý?§{‘ö¬gf3†ç5N žcžš[ûÃåiÐÐõ¹™8E<žÜÖÆ“ AŠ{½×wQ’VY9+ÎÏÿZ´¡pŠ#XÔaÖž·¨¬G’uªQe›Æsõ¦µ¹ €ÛN8 t¦­ôméƒß52ɽU”eOpiØD+¼ÛÒ†*dž*r{ãÓÞÈ„‰ÙHÎ: wšÆÒ“ŽF}@¤Œ‚zçŽ(Y—8*=¸¤ Eæ(›sÆ{TsÉoi–âP«žýÏ õ®~kÙ¯æ*¶ï±ÆÕ*?3ÎsøcëOA77êÈ~ÊJ1嘯'ÛÚ²>Ø.&;¥W-ò\úúgô«©¤ŠŸj>Â\e™qœqžµ ¢¬2$òÓhé’y9§´q8Ã"‘M6ËÊ Ÿ½¼ÿBðÊ÷ä3QÊÙ|ɦ·¥kVIçÙJ×¥¤,ê¨#uFä÷®/Qžíe/:¬33a–X°Ê>`:zþC×LÔo¯-4ù^"d•W$eŠœuÀ5çµþ©â„]Ú0–ß º@C=sùV#mÙÏVz‘kDÇ¥½ †4– R`Ý$U+‘Ðã©Ïlb¹©ä½Õo¯o Í*âVE Ú7ô=ñ“ëéÎ+®×ÝõÌ—°²Ì€l¸hš2ù8ÚËœuÇ#Ð×9kl©…¥Ê)ÀÇ?Rxÿ&•ùv1’kС¤"Gq# ™X×{ž\ ŸÂ¤Ô®4³k§¶›o cm›“$›ŠH_L¼p>÷<ÕKMÛò11ï ÜŒdôÍSòc~w”¦ Ê€ƒÑˆÏSÛØûóZE¦7tŠwWÆîxÇÊ…íçøŽø~y=ëQ IŠÜ.rv²ªõf$ŸçŸÒ³dÒv1d“ ÇRǹóÍgÉqÄß»V†ÕöêøxÿÀxüky-¢‚0ñ”1–ù”Cd}ºøTE5¸-¬tºn¡=‚Ûâȣɵ>vÉDr9^ØmÜðz™®ŽRëTµ&híÖå×å UŽåõéëÖ¹I¥ŽßËIT¤‰Ë#¡$“è=[󴬙Z uÑݨcûÌrØäþ5•ÛV4ækDhj7­o­§ÌóE‘?zÌFîž„ ã=…R¾Pù.#{˜Ü»4çpHT9냴7âz™'šy¤¹’u›ËœÇnÁ@\Ä^½ýëÖêÒ çŽâÖk™.pPáCg€¸ä(ù@ë÷}é[^P”¬Ë§½½·ÛRÚT“¨Q’2\e}:\Ω,ðÞì‹(ŠUÀÙÆGãÞ·’×V²¸ŒÍ4É$ãv$3äí·žƳü›·±’}¤.äì'ivç×±ö§ ›±ZêA2,BVÉI" 6™@<å±É# +¢¶Òt[HšuÌòÈÑð6§'æõ<Ö°¥¶7víhа$–XÉã‘•É<ôæ¶¼9¢µìˆd¾[HÕÜã'îãnϵIÝX[è…ºÓâ·ÕE»©YZ0à©Fxúdþtáj;ˆàKxã·”1óðüÿµ[V¶60Ù3›½×qO'ï.Cgƒ×ó\Ô©žYa|$ÒnUÎ1Ç"°nÏTL•. 3½ÀM±¨`1ÔuF.a;—c£Œ¸çnqÁ>¾ÞõÜŒöޱ©rHQ¿SÚ´<;¡É­CrÖ×qÀT€á߉$ãŒÿ“UÝÜ•ôU¤.Å™ñß~Ãß×ëPÀPyNÈë67í ‚NÀ?ŸåSèÓ¥­ÜƒPºû(häFu@̤œƒ#<ÿRÔšÞ-RT²wšäU‰†OËÉã¯éŠ«iqÚÊæ¶,Vº”·7%ÊÆ.1ƒýÜý9À«7·VU·†Þâ;„˜ƒƒ À=r3œ}?:¯kŬqÊNd>kb78Ðþ?…3KM*ÞîA|'k¥Œyr#°œd<â}*Ýšµ‹Ýj¤S[\=nÅÔråãà/nãŒ~U­kjb‚m!¦x¼Í¢YSeãŒuíìkfëV°’Þ4°ˆÛ^CØ'pY%BAä“òüÃ9êr}j•Σ=ŃY0’¾WØ„RÙ<\¶xª²LrQÔçc%´‚I3pÄ4c$0?Ó£•\Ë T6ÖòG[#lL¬¬ß†sÍOc“þëhX³8ç`÷«°iûUŠÜìYYHPØ\£¿cj–×QlÐ庞rˆäßI »ò Ö=àØÊp†V €TcŽ™úVê[ÚÉrÿjÚ ,ÌÅI;XžÄ²Ö ôÏË’B²³–Äž¼çžyÇlzŠíÀ4§'äZÞâÙ‰$/—!X¯Ì>Rô­a,öÒüÄç,Jäg*08ì1žqɬÝ;Ì”2ùxWXg$çø³š»$ªmÊ¥ÛÌ$}ÓÐZÏ&ëkäC•˜Í2úÞÒQoåÆÖÅ·”nz1ôõfA…ò¡ b§çÈÀuGSïYÖv?i™"TTy[g$9=ý:V„úúZâKëyв¤nK7<öíXI] Þq3Íœå>Ñ+´£iºÌ~eäý1׸«(6$WHžnrÃ8ã¯ýèE"Òd„ã ª¡N~èÉüO¥Tk8a²ó£¸ÇÊÖÎä±Ü,¤aþzÍîõwºcf¸kUºã~ãöpY€ úgƒïWu;ÈaƒO¾µU ±sÏ=HaÆ85•Ødócšh]”Fß7 2ßQÐuõ«¦«…Ü ÏÚ&CÄ2OQžsùÕ;½ŠMúŸÛ4%ÞoîäB…Cñ€9Î8=G8ëõ¤Ò·_ÆbtI9A-,›X’vy`zdõã½bÜ’äÄÉ<û•NXï@è}>eçסýuo£na§ÊɉðAÝ’q×ÿ.Õ6OD } Ùµô·c„EXo.G?§Ö©Ã§^ÞOö‹[=è‘Â,ü§“žyýjõ¡OIe Ý»v Ïp©P:¨ã'¨÷­¢·Ó¾ÓowrÖ·1ü¨YKnÆF{`r1ø{ÑË}ŠKS. mìËÜNŒUœe$4`“œvÉã¯Ö­4¶ðYÙyɘXLL€ïã®ëøŠ·qL‘F’DûØ sÄõàñß×µQºÒnlum—!Ärm@;l-ÆuùsœU&ÒÐW’ZB»î¡µoÞHPíè{çéšv¥ Gcmqr !Ü_Œ’FN=óZ Ä~×/¨Û4‡Ë'»¹Éþb«j(ÓEkùWË ò±ã'ùÔõ¸;¤SŽ…a‰pÀ€XŒn㜟ZÌÔe–9R(Ø+‚UÁ8äÁÇ×ô­ ¯-æø#ʧÊy%H?ýjkÝK-Ë[ªþñÉFö?1M>R/bt7Ò´’ÚÛJñCþKÈêúô¥’MBKgY%• ݵ6ðœv=ëïUí#¨‡ŒäáŽþ1šØb‹O›æ—ÎÆP¡{ 7áš{ìhå̬‚ÒkTAbFbóáÙFÜñߓҧ?cÓuyâ½´ @dÞ`\ä¨ Öѵ ]/Df{ñ½˜Û§Ë’x9ïý*¼šåìKi,)4n„ì‘C§Ó<ô5QZ¶Wdúl+y{.¡-”VZ|C0‹”ò ×ß½m,:l¨² {7oÜFì÷é\¾ ÔnldµYÊ P›”ð¼íÞƒ§¥c­¤ŒŠ|øyÿ”ÖÒè%S—¡ËÜZçT6ðÚƒ=ÿ•tFÚAp°• †CîHüÿýuë:§…£³O¢Ol„Œ®Øc8Çûdƒ\±žx£TÌðæyYe¿7ò©® – Cå¹IrƒyÈäúôÍvRBnìÀŠiƒMÒE@\3’:ƒÅd^ÚËåÙX5½Â´ŠÁãN\HÎ1ÅdÛr÷vf÷G ÒZ¥¨ù$ÞÇ!uÏ=ø?犒7¼¼’Úß qÇîŽG>½Hÿ ÓJ[,SÛI0fܾX×êpp;€?Jè¼1¡[$å¯!»±à!U¹îsÎÐ×JŠ¥Øá¦¿¼[¦º "‚¡U™sÆ1ßÛ=œÒ;Ü^ÜÇ/–øEÚ2NþßÖ½jè7RåÌë•!ÆÕ=yè9ü¾”Ëÿ‡Ö3²=¶"d9Ébwzƒè>”8id>Kf/Œ¿i€íŽYƒÔ€9=°1N»¸‚{¹$$€‡ Çä÷S×Öº‹ß½Æ¦esö83óÈÅ|´ìwgó¬MCEÒ´åš(µ”ºv\bIÏãœ~#?J‡K¨¬ÊÖ:Ä6pà ¢4¹1To|ÞÜñô§Ûk°Ì’Ü\´„e@ÜÄtžžÕ““¼‡te#EÜ2¹é@³’I×ÊF“†ÛÔwè*y#qêwV±<~™nu))O˜Œ¼™3ۀǮOjΆåc‰Ä &íèvœàƒÁç É¦Øé’½¿él4M;I‰åHäã;ebÃhTãú޵§§éÉy7vöæ¯÷‹€\{¸ü«hFÛ—bkˆ¢…¢º´´iº¼aBàT>¤Öý¨g/“UÚO¡Ç?™©VÒ5›ÍXö¾0pHê:²7£5WìZDÐIÇžáæ˜. rªà â­†¥0M;P1Û¸¤Éíü©ïƒÇzzS°®0‰;øÕi£’BVXË¡#å UÞM)Ç­ P:ă Qßv1úqWRÑž=ï„qÎj»˜ãýá°ùÆyñÞ§Ká7,ƒ÷R õíÇåV¬É'ÑÆ¡ßowž•(MÛHà~yªþr¹ ÂÛ÷ñŠG¹Sv77(jÝî[0ü¼vè1I儎FEWKÈ‹ùe±Ü§ŸJ•gòVUÇÔE„=§ÊŒ¡qŒ`â´"±"Ç 1éUtS‰=¹é_%yùEÞÜãæçÞ “ÎBpŠWûÄÿJEIô#ÜñK$ä£ËÊ¿0gzæ—(îGæMÛÇ÷sš©w¬EeÜù—D ±/R}ýej##[éƒb¡+%à (8üOÿªªi±E+,‡7ÌNK{{qÿë©l¤‹) ÷ø¸Ô—nû»<x?­^*ãzqÚŸž:qNR¸ÉéY;²ÕôdUàõÁ#4Çó‚*¶&çHÕœ©Á8àJi,ã.Ò†˜îVi¤Ùç˜ád/Þ'ëÚq¸ARI$ýMI°ÜÓ&š8T³¸íÔþT¬Çq³1?–¾>]ý3Û5…«Ýê6k\ÝŒ)þ·ì–ûÝW¹ù›õãð­ÈÙØ|ØÆ>ö?¥r^4Òí$‰.žO%Ñ yÖå£p>€÷ííRÛ[“-Qç׈.a½d·]XÈ“%¼ÏÆä`1ÁèÈxªío%͵²°¦`¥dØy^?>=©eÓ,ͼÓ[Ë.C3ˆä¨\Œ{6;`ÒZGqso xâf%®FNWxãžSŸñ¤åͱÇ~fl [ŦÃ#j!AÃDcBèÙ6Of¶9ã¿ÈÞ¿•`Á‹ó ¸úqÁëý*ì³\iw2°’EÌe$T=O¯¡çëT:¥«²(1õP>öFxô?áI$µ.IX«exípÈ‚H¤6ÜûàV…¬ë,ÆrÉs »ø[Óó¬¨mBÙ5ñ»E‘1<?*·æ)XŠ¡˜È…FpÜèkIE–¥û¹¯%[TZ8”¬j:°ÿ *æ ¦¡%Âê1³¤!dfˆúgå#ºü¢³u»ÔO*#/Ê9 ŒóÐ÷àãêMZµ²†k'›y"ʧ'Ì™ þµ -DZ->¦Î´ºw“nmÜÆÄ<îœúc­_Òl$mFÙÕ‘‚IçÜ9äí]¬sÓÏ|ûWc§ÞÏr–†ƒóå{àã?C]v‡8}Åî ‘bdùŒ’„qN•…KÇKŠ-ÆÈÍÓo/¼Ö³,"‰Y‹†J${ã<÷4­6«`æ$`‘tûçrð­éÔãØúTöZ`ŸQ™TCoÁ 4¼y‡®Iϯ{}M3Wi­£]>IVT†O˜'Ýs¸O§N9óS~gqy“Ëyg›–ÞA3,A±ØäçýÒ?z­e;bâg/c Êç“êIíŸÿUNÐËgmÍo+E!WYJ`¨ IçàÐÓ͒ݱ—1;à\²œ«N z{Òo¹l­˜»¸V…0K)Ú0sŽ}xéZúMŽ¥´{þÏ$«rA6{óÚ¨[+Z¬ñ•–5ªÀ!rÙãüÍu:DÚ˜,ÖçÌŽ’'Qÿ-#J “î~´X¨FƧ},¯qws夎ƒýXÛó*ÍŽØ‘ì´ïøEÒùïößä²9ëÎ1ëœsøUM|[C©‹b³3aƒ126; ü«ŸÇЧ}i-bÎ œ)$gåºv~t(ÛIj×Q°]\éº}ô))f¬«Ž c?‡ó©ô™X!F)»2:óï!Š’}:~U´›VD-òïœ6p àçó¶`Ñãû,“äùqÄ©îWþµ2—º$ÚR¿†øC§HØóŒìA†÷9=G_~2ÿ³­F©0S\[æ&åÃ1Ø~SÛ®øVžŸgf×0]^HäDçtD¬VÚèqSjãF±¾‘¤nŠ-…aó õÂûbµæ÷A»«‘¨ù Û³,‚C `ô$Œ’=zcñ=*Y%³[#kúýÞhrFOùíZ+øŠo³Z,V®ÊQµH'$ûãúVn¥aw¦ÝÙ¥Ò®dÉITär?ž84[K†© •…ú:„U1 AŒ.y#îyëTH>Ì8’xÕò98rO?‘íÖ¤ûT k5Ä;ÒêûYÈ(Ý: v ~b³ÞúfU j!’Â7Láò0Sý(·PÒÅ«ývúçN‚&¸PÑ*üá@|íSó62éL°{ˆüÙ.çe€+´àq»?‘Zìl<=aám*K»Ø¢Õc‡Ǖˆ‚px ä|ÞÝ+˜fY,¯em²ê_‡SÍ9'd\Ö×e«íCÉ[Mñ« w1 ã‚O?Ò³nTÞÉpí8aShr€?@}:Uƒ$w+¼FEòÃ*ç É#ô9üꚊyíÚ —'–‘Np@#Ó>Õ¦\­ú ?>‹¨Ùé·×v¾p999×Þ¦½’ŒÈT´ó0,‡-€=úþ••çÆÒ[WÍw!Ur@‘‘ùjÅò³ÝùÌÂ8S’øÏoP@ýh­n}ÛØu…œ8»Y’Þ8„çn¤dçrzUÙìÑfP—;ç‘Ù¤ÉåW$±v7ZËŽKFÒ}Þb[9Pˆ¤¤d6=òWŠ¿<ÞEåÑš6Ø @,N\ãÓ’ËŸjÊ÷Ó©WVµ‹?ºÑÖõbo³à•sÈ-ŽGâ ®fÚãˇ̑DÊßwq?)Çn;ÖÔîu)|ÈdŒüÎÌØèv³xŽ}*¹†ËÍKu‘¥*‰”LìHÞGzóÏ¥RIFĸé¡—¶âàËp¿¼‰wí ò97OªZ•ôº™°…ÚP¶îÂ(±ò*åIþ_ʵݜši{«q—C$ù[r1ëëß4±X½Íè’%Û·ZŒù ç'ðÇò¡IG[Q%—ˆ.lóOsÙ®ç.Å×”, ägқܫg;Ë^Y­nFÒ3"¨`Çÿ‚¥Å\fŸÚ­"$­¸ÎrÄ&2~µx\ PYH¸äW¨Š‚9&sÑPu  ï!·]ÓL‘Ž¿3b³¥Ô/'‰ © (ýÜÎÃð¢=9î¦-||æY\èk^ÞÝ-aÅœ{’1 ³±[fó¤c$ì¥Kž¸Îqþ@«D…9ö¨ÙŠŒšœ¶IÍ \°éfÈÁUu”H@ÚTŸPzSþgà –8‚O&¯aP@ŽEWšàE2A{ä|eGeÈäÿLúT¬Ò¤Qï~™ì¾æž¶Ñ©` Ç,Ç«T+Üd‘@Œ ‘ê¯,jo”¬;äqQÆQWoåÅHYqZ¤C*˜÷Gäj…ýšÞ K.Å í߀Äz÷ýjÌ’€Àd}1QI.Xç: g[iÖðœÀY‡÷AZS `äªäñœ~Tñinß+D¬=È¥ÍÐ,.ÿJÁñ4ö1YÄú…¤%|ümSÇ?‘5¶ÐYË‹ #¨ïÏô®ÄB×W´’ÂÒåÂ;|ë&v9Î}ˆõùÖu4Vb”¬Œk[(5ûyæI †Ò&,±¨Py$°l~á\¼I¤ªóOB@L†ìŽsÐ^õV{éÎM2Ú%{s9a,Š*ã{dÎju…½Üæ-olårp>„ŠžT¢sNvDWÉ7öªÝí%Îì…Ú@éÇltúU«-y5 »›=’Ù¡’)Îð6•RO@qZv1[è%£2 AÂ+0Þ¤ŒÉÇ`3ýk¶Ó§‰$Dgw”*#\àðAõ©Œ“NìˆK«!ÊÛ^´ûVÛ¸ÒDiÕÁUg‘Ç=;÷þ}/Н4NÚØéViÚË™dŽ0¿.8sïX†š÷Vјc&X˜– 1Æ:gð&®Æ³GöfR‚9Ÿ-Ç‚qǦ~µ§2¶ƒæèŠ;¯Þ%‘~BÌÑîrª¤ã<àöòzÛe„w7»¤á‡’‘Œ«+[$tGÐýyÆjþ§RÂc‡tPÛ¢ºÛ¸ûì[‰ôäð=ëŸYdÊ?0$Ä •Oò3ô¢÷Ù„¤}>ion$»…6´·-%Ü2±‘e¥*Ãv‘éÈéX-'úYµXr›sÎrNáÆ?Æ®êÚÚèl-þ¢Â;i®äòÉêËÀ#ŸÀ~•‡ÉVßb€¤ƒ‘øóø ³¤Yn¹¸·ûJì[c#l?Ë…ÀãÕ¡5ýŒPKZÆ©f¡÷äîç’ÙÎ Íó=A&ÕÛ2n¦2Y-ÄQ˜ –qØŽ˜ôÿœÕ;KÈ®þKr|ÐHçîœqϧçU.å“û:àl•ÌQUºàñƒô~U Œ~L:ƒýÆ @©õ9'ëÀ5¬=ȱ¦Ó5´ËWÕ#’âoÝÆ$_,¢·ŒgÛ Š¿¨DÛËfÀ݃ÆsòöôéTìîÚÐ[A.âß{#%‰è ¿t•d¸‰°²í"N3÷²íÃôö¬¦Ü¥Ì ÞeXtû¨ôvœ@òÅor^ ŠYˆ+“ÜŒŽÞ•£ª# qa`ƪÍÏL“&?!º‹iöD³‹æXá›älýÔ :tè>½*¬º¶–ÚtñÏb¦æLªÎÌGõãŽ*œm£eÊ=.r‚‹‹“’º$3"àœŒ“Ï>üóïP³µí»#4—_l¶~¢­IŒZYšHäd c=¹P0~¤ýFkc†ï#?½‹å?*¶{zãùã­4îgÔ¯ª^Hn-m¤*÷{¦N8ëŒV¥“Ëo&ü³o|Fø8ÁëÏýò~µÏêK·Y)ÔÆT}xùšÚòå‚;Îìí,Çê¤þcp•]Ed‡%a/g¸O.5uÛ¹Ç\óõ'𩜠{Ddˆ¾æUØ]ç‘Á>Ÿç£¢¦«"H™·Ž4#ÏÝm£8=€äûZ†ú&¼šÍZ "ƒ€6푟l*mÜi%©®#hícYÌ@ .UX0õ äb¨—‹nšáŠ¡?(wíݰj7\$Qðœ çñý*¦®‹©ÞGwû8˜,&œtê:õþt£a-LÃ},vQD©$+É;·SéÆ?*¾58¡†ÙâfYÌ£îóןZŽ;{ùÄqË†ÊÆ òrH¾ý>µ%ö®!ÂF‚Ø¡bÆpg½Vú ®¤3Þ#É3¬æXʃ½ó»vyò«ÁƒEÆCç$ eG&³âh¬ä¢ââ@"ÎFÜœûòÀ~½%ÔúªÇ<æFtM¥Øc88ãÖ¥Ûrlg!¸\+F9Èþ•Rf q$á¤}ÀÄ„ýÜpqíŠÒ’ .D‰éØcŒ›Ó¶?Æ©´ á)…O˜zSæÐl¤TH¤6ä!W¿ýjž_*e‘«nùJƒ“šmÄ2™âEÞ!‡äŠt‹£ZDXž>œóÆ…¢¹:·r9§XârD1ž{Œž@9úÊ‰çŠØ5´q»2ÝAúcÚ¥-.’¹UÃÛ#ŸÿZ–)X_ùl¡c=¶Œu}iù±¦l5µ=2#R&)æ.HUlséŸÊ±³®GÜàtÂ9¥M4^U̬&Þ…ƒ¨lä.=}?•0ÝÓ›"}Ä®3úÕ¨«X¹;³Ðc³žÑv‰OÚ Ú¦%U_÷Iþ§5ut¹­Dá Ž~hÕ}{ðzóéU´ˆe{¨¤ ‹eõ«‘È gžõ¡ys<_jÜKHO—à‘‘ÿêþ\×bZ]M•ši¥¸[8ÕP¿¼…'èsÀäv4¥%kémÙ} =ÛŽqÍWšBÁn.¥1:€Ø“1ÍZYöH|ö‰C bÒ6d|vŸoÖ›Z\aËÉÇ„’<šUßœúJ®Î‘M;¤I>T*C2r1ØUúyI†öE·sûµáÏ·= 2÷H:^³oq TrC:ܱnÁÁæ–ƒêtK–VÈѨXÔ´°yö¬û«ˆ­‹‰3†!³òy'ß57ÚþNç)£nAã¿¥Ù2‡VUe# d•lØâ‹X#ò™ÛxSçw|ƒÛ°ë×½"Ìnu*ÒHFì£àñ¥²K oYYF4‡¹ôªÒÊÈØŠÖ4À îP1ôÿëSk°“(‰G›öxa`d 4ŒC'¯'¿#Z¹wªÙYÀÑ„’3œyQžëùTÁB~ì Æ73çó=éÍ3•gæÎ¨_þ½]‚Å4š "…î¢hVF•€ÝÿÖ æÈI*!Œ31“v=O¦3ZF;KxþfóIl?.1OŠæ9¢6ê‘ùjOʽHúÿJ_ ±Ëܶ”[Fe_—8òÁè?úàTÖºAº®-%¹ y98ù}yïÅkÉ E¨HM¸-¢ÉÇQÏNzZ·{gäme€qϘ@Qs.¥¸õõŸ”6²>9ägõƒ¬H¬Céóä6ß‘óùŠçÅÛɬ=¬º[‚èPÚ¼çž äu9«ÿ`¶ŽH¥1ÆwþíNKqÜz÷Å:h5#j+õ™~kyÔÿu”wtÍ'ýŽâ6Î0à¯ó¬¨l‹Ë¶Ùç‚W$e¥~ݹÎi“Z<—N™+"ô²Üw#´$&Õ΋j¢r@¦¢i“Ί`^Làöw¬¸Ä f$›iU]ÌÎ2r¿×¯5MuPòï”!Á,ȃӠÛÉúã¥.FØù’:‹xظ‚bORzŸrjYà’Õ”HFO<•ÎÚÞË$Ï.’T"6"r#®0~Ÿ•Ku¨}š%íȶõÞyíùÕìNæÚv Ç9$ wš=«ÏTkèݔÀp2ûI½M\[Ä£ŽT3ô+óýJ.4ZEî5 Íä‘'uEíÜ“èz͹ԔHñZ#M2dAUSõïøU mšhÄ—/#ÌI s€ÐÓ?ç4®‚Å‹ëÛ«ÕòmÇ`“"²´‹ÜÔ;Ôð 0„U]€T9ã¿ãéP@ѳþô»œ`ç·#ð«‡v’qØ/”¥sEÀª" ãô«R‡©2'c…nk>BR1æë€O úf›ö—,¦49l ¤ãò¨L«xf#9=é¦Ò wÀ`¸8ôúRÛ¯Ú"_.A¸ä†8üé¨Ò#Ϥ‡ŒŒ+.Ÿz³žG™©Ç$²ÆèdCÌmç¿·àx­°µ¸ïî'Ž+h¥ ÇβpØçv繨–ÄÉh`É-ÔÖ—³Ê"Rr ¬pÃÜœŸzÊÔåŒhs‹íNCò~è" üŸR~`:Aí]®—¤^E¿m»ó"™GîÇ^­Æzóýj¾¹£Å$*ÚÇ4ûJ¢%¸9ôÏ#§®k>]WQrhxUǘ³ª¼Ñ’ÀTî}ñϾ+¥±ÒVå"’ËUŠEL»|½£Ó5…¢´˜„¨ŒççÆJŽàçüEi^*ÙØ«KmWH†9X‚ǹüzpJ©ê’‹9[V5“Ë‚Úåo¥+ÕK˜ãøJö'8þu˨{‰n.ã·ga|¿”ôô=øІ;Ûû%óO–Ñÿ«„\óïÓ>Õ±i -›Ë•+GÖÃ9þ#89÷ëÅ%KÈJ6+‰¯bµŒÉǾVW¡ã ˜¦Ål>׳nerH pÙÏUõþ!RÜ g·˜AòÈUŽ7ùQŒõéëQÁ8·O6äÎ8LÉ–Æ>éüˆÍ4K×RXíZãÏŽ{È¡ I]Ï›üjÕ¶™j&û=Îû}蹑ç ϱšÏ¹œ=ˆWŽ8æsˆK çžàCòwí¦*‹æCæH«ûÀÝ€nØ8ïE™+ÌÑÕm¥ÑÔÍ~÷*íq€ ŽrsÇÐç=©ÆòØî®’òÞƒhòX|φ ÆxèxõǵºU®­§1½½ q¸¢G·s?Ëž‡žsôúW?sm5¢$q«nfË0È Üà{dåR£îËmZäñjrT%<–ó„‰ÕS„ëÇ÷»wÔÒêSJe…¤WàÎØ9¦IíéE†¥ö{Vûeº¡ÂĤcÏ>ÞŸ•B×±¡&™É!˜yx>¤u?­6¼ˆØž{›»e2¡V‘Ì_—£ `ã×Ú©.­{4/§¼Û  ~L¸“Ó'Üç¯zK‹—¹óU`V_”ÆG¡úÕ­;LþÑÒ®/ä–ÝLLÛ n m‰ã¡Àõ¤¢» ]—ìlgùÞ4†3+©l`c׎ƒùÕëI,%[K•+"ɶpl)Î}òjMP½“^K{[±iö‰v©bB€GCüª­ÑÔ—S¸µæë{ùjÈÅÖF8ÀÏ~¸§Ë¥Êz£SOÕe²ŠKˆÖãtƒ‡ÂsÆ@õÈíL†áo#Pð¨,ØpÄ€_¡ÍUL(ŽhY”6]pÜçç€O^Ô]n´ö›Ë78.{)ÇSŸR§ô©•ä¬+·¡ÞèvÏŸ¦/-Ù¾Äv+.àª6œGà³eY|¨äb9ǨöÆ+_Xñ7-ÊA}öøÝreØÊª¸ù¸<ƒÂ°—RyñfÉöƒÌî¤Äõ©jQVDNËD-âî°Ù$eÝ\±ÁÉÈ^ ûŠ©ijZÅíÀ/39 …ûä)çðÏ_juÅìÎvK; @p?CϽnÈéå7— l,s芧õÝúÕ+µfLQ£l"³xHX3¯Žþúâ ½žûÏ!‘¤‘9Üxp 'ß9ü½ªæ‹·±$PB÷Ë·ßòéîjÆŸe{ªêÒÇio÷œLpƒßÔ‚Oä(WW±I6a™Y%-<̲À9,N={€3ÆkvêWò ‘™ö#žX”õÜ}ºsïBøj{ÝJxî¯a°–ÙÊFλ²rF?ÝæŸltûd_¶@Ó I$yŒÞ#¿N=sÍ5®W)^Ilnn„]ï·)»Ì+Œa‡'°ÍAg£Í­ÞÜXXÍBÑ…ŽM»|ƒ†÷ϧ¯nÖ´ØõFf°³(s+R9ÇÿXg“YÒ ü?+K' a3„u¢)^ÂNÏÞøZþ]^[¹l. o'— D-æddޏü…\´Ó®u[Ù#d0nKò…$Ž£×’1[V'Ôa‚[[{†1Áx^ª\ ËÔ|Ey© õ)Ñ „òÕ”}à3Ô{1ÎkF“ÖåÉC›r؈‚æ0¦95Œ·'ê@ {S2[Ço}öwO³°*pIfl~ÇåW´ù,®Ý~Óq)VÙ$˜¨Hþúãð¡©ßÛ=”XÜ<Ê&Þ® ºà}xÅMX,š½ÌËË[È$[Ɉ¶âzŽ{`çð¬ÍFêi!™-¦4 @ùI7Ê1þMtà{Ë;K{išâ$?0Dä+($ñž:óPègDŠ ˆµHØLß8RO(1‚;g?BVhN6g/`dŠöÖä:´²çsŸð¨d -®.e ÅBÿ{ëø{Ö«Û•žh¢ —TYÃÜJtöÆðZ:f@ '¢ôϯ°£šÁÞå3ç…GŽE?f‹n3È}Ä“î2OåZ6†Ah˸î“;žçÒ³^ÎIç”lÚ­–eVH§êjóJÉ2EG·pœ äpÏz¶ˆ”µEøášeˆ\8-ȯÞÈÀÏâMV|´ #)°™1üjçö¥Á€AtaYƒ c  vÞõ]ÛnY<)ʘÎàAô"³C•˜‘²æIYÀEä§éœ{Ôor-“dq¨w‡ Èþ£š–5ÚY@*ßÂy“$Ûª³ ç8Çÿ¨Õ©Y{"œ+1¿%› ´d·'<çF~• ™- ̼þó ç©8üúU¸—igu%±Üàž˜ëObd'q ªÌ3N„Ñ 2¸PóÊþ`sò‡r8þ;ì¬Ãrê7j§lRÇrKäËsäÆÊ9RÛF:ŸRx ZÝ( -ÆD‰ŠÒ÷-&öG¦Ã*‹Èâ$$k€$/˓Ԟ1Í*H…&Håû]ê/ú¢@ŒzsLw¤Hìâ·IJ6µFŒúöäõ£Ê‚ÚÕLó½HïŸñÏå^‚‘Öбà ݴ·2"1;‹ 8#žžœœb¥û<I!µ”æAÌ®§szžª–ÄË ›†rØ ãèp=zU¸™ïleYàŒgÇ\⇸")of†Ú Œv¤[Á=þ÷òÿ"” ’Mò\£L¯Ï›ÂäzŸåR¹‘§i–0~R©ê8 ŸOCP*+¹&-+naÔõüi&;಼·ß"3¤düÄð0;ã®*7‘fV’ ÙNЬ ×ú}*mBúææÁí-¥¼‰´» ÅsÁǽCoÙâT2UB–Ð÷°+…›FYG–‚¹>þƒð«1Aç7•nƒÙrT|£œž´Â©8#r퟼94«²Ò9!–9gÏ6&D~i<Ä9^pÊÇáRner“æb088Ç~ÕsF_£û ã#5sÇ+ºÆÂŒe§Üô³Ü4²öEŽ…ˆ'=³I\¬Èâ^zciõîM’#óm¡rpWi¤öûRYF‘Å™mwdVùõã`žOµ[–Òîo´ƒv³€>Mƒä‹${ž™?ʪÚI«$™Œ˜Ä’Fxè?ýz“CkQ-ìÃGˆe0D®HÊÍüDÒýìÊC H@ÚŠq*àr{sÅ æ–åÛ"üù3gq8aÉü*¥„ÒÝÞCuå\[Å£ožBŒ0þ]‡^O¥¸7ës`[ì[àÇÌTy˜#¶=¥V–ÚÖEŽKhÞÔ-"nhÎ8…[æÆÓ‘‚¡Cž¸e%‰"Þü€lܸPÄœöþ×éF£¹@Ü]‰‹­šÏŒ¹Š]§×`1V[Ä0Y¬bâÎ[rFNðX~k‘Wâ{†@Œ \îycHüsƒÚ¨ÜIN"‚IBB0Uz°7úõ¬ùz–¥­ˆ.|MhÌaÆÙ0™ºâŸöØ#ò®Q²§ƒ¼ýÐG¯N¸ç'¥MoanÞsÏmªWz©çœõçúÕß ØOÄ{` ó,Fzð;zvïSËä.dkÛ™ÏÖ¤}ÈߥÙOÞ& ¯aŽ•Cº{ [œýý„ºÔ1E§´EOšWåÏ·3\þ»áXm" tgÔ.$b~W"g Ïò+Ñ(Ù†Ås¼‘ü»×1u­Oa48¶VÇsdäñÙN=éF7`ÒØç,ü q©­²µ‰Š= Ë3qŒíüÀAÏjÕ²ðMË[^³¤‘^™Ë#n ‚{céõ5ÞÚ_î·Cò+œ!Àü*èe‘HÜyàšèö1jÆ2tyOü"דyñ«LäȬdÿµéÁÇNÕ©è)ñ‰BLb$ Áõ1ùW®Ë ÛʬævaŒ¼„޹ÏéTì¼.¶³4±ÜÆÃÑí#9ƒYº-lO-Ï ¸±ŠÎîÞaoœvÆU8Î@÷?犢ñÜ!…¡ŠYCÈÎãoRzÿ»Ûê+Ô<_g¥Ù¼p2y ÈxX”>UuÅrri1E-ɘÆB1òŠœ<ªÊ}8÷äñYÊ2™“§¹7 q$ïrÞRlv±99è0zcœTŒÑ”©d ’XúвmÞHÁ$eX„dŒr>ƒùúÕ½d»&ÝUI8I_‡f ÷p{R3ål§uníÅÁh\ R¥wFzäpxíÏ4E§]˜¼”¦ŽFf3Â8ú÷ÔÖ2Kyw9{G;RCÉÝÆ}úÔñý© ’Ú7)x™ÚëÁ`Z¦„ûÁ¹’Haóù{„q–ÆÎyßýjÙ·ŽÁ-<ëÒ¾÷SŒ0aÇ#¾0xãëXâ8Ä?jŒÃ;å¥;H$Œ{÷ëëíRÍu$â9n ¾ä å@‚{úÃð"¢Jû $Mh†ÖöiÒãc›fÕû߇~h7¯bË|È” ‡ägüª'Òåû'šÍgòª»²äg¯äM1m£[xž9Dðœ§^¸ß?Bi­Í#b·štw“]–‘Ç(\±ùÿ3V­"ÒWSµ†òâæÞÝ— }À8àZçî&dTTù_’;¹ÏONœý3SÊÒ”{˜-æÀoï cØú!CR½ moL\Io¦ Ò$ån;sÓ¯ðúzŸBòô³e%ð& ÞóâfÊ| mùG í™®~ û›{i ·‘Ûí ¤ˆƒŽ˜Èô>ÿ…tšÛË¥½äÑÅöuiR2û|É#žÀp~¢¬8½U‰¼Ow§\,pháã2.qì ÷ã$g¸ZÉÓ¯V×J•R=×¾[¡%¹BI#ÛP}ý±LÔ#Ó×Yº¶´™§·R&Ý‚[<ýIæ›§iâMLÛ^ÈË!-–‰ÀçÞ‡£ÐM»Œ‡X×f)º’òIB£+ àà sÐË’:×Ka8’Õt¹b)7s´ÆÁÝí’}½3XZ”Öš¤vPÌþl@;JÊïLíÜ=1×Þºm×IÔ4é„Îí2ÄhûJ  «`ûÓñní•ïn£áÓo¬ä–;ùr6GÊL˜ÁÃsœž9¬öКM;ÍÓîÒÊmÙ'Lž;~™Ï8¬ë´½Ò5vŽyQæLn’#®ð=0kJÐ-õ£$S?Úwcådbp9í‚GR:~yÉ]¤D½çh£ž¿ó಑nb÷Ѐvâe\î$‡ Ÿp¾ÕCO»K"gš)6es$]F@ÁçŽç ÷®¯_†÷PÔâŠöÈÁwiÇ ±`ŽœÞ´´ÍZÞiaðìVPEjð¼Gã°òw6zyãœÕ­¬Æ’z3ŒŽòÒC²7d»†Ð3Ó’xǽu·&×Xðä¶VvI·]ÆVR$p:Œcæ'·5‹qk%Œ7«DЮ<û¡ »>î?®FIªoŽBl¦o"dO/yää޹ÿ?ZJÉÜQ’…ÑsHׯ\BY Ê»ƒÐ.0+RëY½º½7@.X ¯Cœg¯¹5‰¨C6qOåª(,Jàƒ’zŸCÿë«[<+n³³™Di,–È¿9\‚1êpGÐŒúQÌí ù¤×Ûøe¾»¶7‚P—o“3©]Å}©ÉÏÐUÙ´Ç6¶÷ÓÉþŽ¡¼Ï-B¼`à®{œzô5c^ºÓ|W ) 2Z%¬ŽeN#$ç0yŸÌúUQì´ä0$Óˆ-×¼¸G' Bç;c¡¦Ö¥{±wܽgygöÈîQšÚÍNÜ@Á@~Û¾¿®+[Ä6©sgý£¸¼•ЪKaÁðyÇÓñÁè÷2É,öw»™HÆs×ëZz~¿ªhö† ÑyÌx|3c¹éÇCùÑʶ’·,ŠOk}(YcÌ cqôã¯õ­Öö=(K­$dlÛ÷SŒçè 4Ý[} R{«„YRdÊ3&îÇçš-•îõKùíqÚËð£!@^ž‡ŸÏœRjÊâqÓšú»ÝÙ .ï0í÷ý9,:[p­¤$ˆ›|ÀÏ‘ÆÍÍ‚qô ùSî.bËæ™¶?ŒÎ?_~´É§XÆOÜ™öžØE9ÿÙš³Š{³6l5†±¶ic&6x‘ÉèøYчžùå‘—&= v›9¨ìàSö9]æ#“ÆÝÇÓØÕ«Ë›m1n «‘ã‘àŽßÌñíUº°ï-º,´9%‰ÄSAÀYV&“æ•³É >™Ï½Cƒyo,·w°GRcr„$ ã=Y†îY`ÆvÂü`0 G¿ÿ^sªÉ-ŸÙ•Gym#ÈH*½XŽ™ÆÑR¬ÊVks2Þ)g¿˜Ûª˜ão#qþªd°¹ºBîea¹[ ïÎ~•¡m44ió Á™Ô`“ëõ㊖{¨®Š¢ŒF­–•—÷„ì}ìKî +\͑☮ôÁ‰8ÊHɵ‘¤Ö(Âæ #1åUdëž~´ùm¸KE©,¨ÊÃi/$çïT7)‘°0>Y É)`ºóc\rdÃÎ|}1š–YÒ4rp#©Çqê?¥g'®¦mhUi9 äÂ0õÿõð+M¯bM:kI&f  òÎõ €î˜ê?õKåvÄïVÏ<ç§Z‚ãÌ‘’¬ãžzV‘•‚öØŽM÷O*¦ž¼à 7oʯFÞ1°îÊñÆ1üª¥¥¼‘F I»æ`8ë’?L-†?ãÈ›šmw B{«¶·óŸ0³1p¥~p¸gÐóÒ„Ôêâib€I2ñ’HQÛoƒ·njÓڥ̉-ÄÑ•*6(' Ÿ_ñ¤2Å´± dŒìà‚Ù9ýq׎ý¨”Ç+‘!!—†çž{P³GÆ $®¬HsЃôíÍ=]n¶MåÂtdO”6}¿_¥Ð]6Ý%v€¹d ‘»)2´»6I·Ÿ¼#~2sœƒýiÉ<ÎCJQ‘‡ý*{hmåŒù…aFê Ó iÊyqÈò4Œ~O›œ{qÍ :ße–O-K`$ í_JŠK# ªå] †q×ЗžAHÖvWeˆÎp ž~µ7¸}šx'ýÿ— â9@<÷¥IœÒ¼—PÝÅp‘¾Ñ‘òô÷8ÏáZº”Oh¿*…¶g8œž{sL[¹š7Å£Æ"Î@1÷ÀU_ ­bœÏq-°—í ¸• g·òÿ©åíÌI ‹ Í÷\ùdŽÇóéU¢yî¯ÌEt±†.æh¶“ì9¿ÆÜ3îó_Ùœ”$ñþ½$í°n%Õ¸·´v/<Ó¢îù à qŒúæª=›e-ܬC¬¸Y›q;uÇ\{zUÉ¥"ÚYå…¤•@—`'®=;ûUåÛseãæÜGÌq‚3ØóÛÒŸMÔdž&†/5QfÈÈ ³qé· ü*oô‰]ü»dpì,q·¿¤w¤ÔõHͼ !9ŸæaüG‘Ž{çÔvªåÐF%Ù¿³ºhVñí¦}‰·Ì¬Ç°ÿõö­( 5i̲» ýò¿~äá†:•Föæ9u#kfŽà)4Œ8lpOOÓ5›y©Ku'Øô¸¢…Ãn’K‰ \tÇúzR×f3vê᥉dr |°Q†ã¾;šl—1\ÇöXÉÙ´Ž?••r:úuúóÒ±Þø¬%†I‡› "5…À8þð=ÁôÀ85•Ì:Eä;8  x ŽçΛ´´Dš·×rZÛGge ¤…^7mR $“Á<õ篵M%»@ðBn ³€Â&´zý3™u%ž¡v³Ír¹Ù¼í—)Ç`3N¾µµÖËé#‘ÕÐHDE œsÀwa×ëQ©Béö¶÷q_7Ùqå¹e,wHyRsǯûÕ¤³Ynºˆïo•ã*Tž§ß3éíWlTYfóTH÷,À#žÎjŽ¡ÜEt±@æV|yjÀ1<ão=>”04­>ÂÆ'cy(DÀÅò¶y8#¶sõô¦M¯Eª\ùOpðÏ€–Öà þóÓþµi4SPQ n<0WщÉ÷ÿ={*A#Àc »Ž€u=¯~ÕwBi—¬R;ÛG™lÕcMÈ’\¬ØëÏPOn¢m”O*å6xÃ<‘ÁÏCòþCñ«ˆë`«3¸lOÞô>‚›h°XNö±/Úq¸9fõëþy¨rI G©—–Ïjð™b oµ^;Šä zût©$»´²|mÜ6‚àŒvÇäx®|Ã$¾eú’o– p0G@z*ÂÕut»x|£ålH„‘Êž3À÷ÏZçu.ö%É­BEk©úgY„d±àžyÇ\sLhïæ&!Eɇ/=:œšÉ²ÕJY»Û,ò‡bRcz¯lp0=ÏçWl¯žêÚ7†Ð;¯&xNp7sÈý{WJm!Ù=˯D’­&ÂÁÎI'Þ5B÷I‹TƒìÏ·k(týá ·N0jѽûTeT.i‡¡<óÇ\u¨%š+$œZ•H‚’F wéëߊϔ¢K-6xm.,Ú"¡ÚgÏb …÷=‡ZHìô翞ß|jù¾Ú[`À#w9ÎsÏáU­u)/-<ÄÚèf.¢FDAœöü*Ô¥¥Ž´–5ša†fŒ²—œ•?(œUÛ¸½o<3¦ –fÛ£óDÅHÏ¢ŸÀÖN§g-­Â+Qºà.làõ3[ ·0Û™'…®¦eÎ\nÏ Œdÿ…Cy*BÖï‘*¢ñµ˜ àóӌ¥E}‘óÉ’ßxžÞ3ow§ùèƒs€¤6=N:~UŸŠ PLÐÉéÂ2Æ­ŒvÏ_jíìuIöG’呿c AéíÇo­dOkipò¬ÖÏ!ûé ry$q×L£4»—̚إiâ[V%÷Ã)$/•êsÎèj[­bo0}‚mÑãœc®y÷ôýkÚØ·™orÅæ±IÎìgŽ£‡T³Ðå»ÔL‘Î@ÉXß,¸ã‘î{Vp­ijŒîÞ‡eм‚ñž0AÆïÀ×CmªÛÎ>YñÎ+…ºÒï >DûBõ*ÊeŽÞøíŠŽÚLcn\ÇÇÊe¸î=ÅuFjBjÄÞ)‡íºÔ¬ÆE–8Ô·!A=TÜ:é×Ãöw*dxbÇU>Räûò'­y¾¡ªOcª"BYÚëBœxôó®ò×ÄWe_µÛ§”È`?ß”cÍ'rVæ·ö%°¶ 1)ë»`Sú\–³áYPM! IûÔevf/ŒFF1Œ1ÓŠí­ukk¥Xç‚1ÔUÀÉ'CÖœ¨¢·Ðð«ï ÜÁFb±ˆ¤›v»r}À9Ët¬{‹y·«•V|(V÷ÿõWÐóéö÷6í Ȭ÷»È=YRxWM2‡Š9p×ñÏ=kc8ìe*w^xã¯ÿ^¡:eÅ«Å"ÜT\:¸Îlò©íÀ>•ëWÞ…äfÊ9Úÿâ(°ðÍêÛ½½Ê[­¶ yb ['?6sÈ9>• nÌ|­«3Éc‰$¸0Û³aL5q†nøÎ{óÛšŠöÛÈž;uÈhÙFßVÁ*G¶Iç5ê×~µ‚WŠ=šId˜7(Ä0>ƒµrø*îä’kwË‚ çq8ŒÔ6ã+0•;+ŒKöi%Šêl1%äà£tôã?©¦6Dfê]¬ÄSžøíŽœÿ…táAî|˜"ßq€Ê®¸ycøu=êiü=ugeÍ«‘Ä~vÜÔ’Uo@@>‚«›¨)4sÐ@··qˆ‹ÆÌÁØ‘òÆ_ “×ùhÁªË¥_¼±›Iò€â 0Wƒ€@Éü«R[1¦Ùv„Å,Ê¥•<ð¾Û‰çýž}k5ôË+%{«±%Ì’«\Îö ûØù©‹M’£±î —×K2¢#¬ÁTU Áú/ó­­CKÑo"ÓSKâs´»1ùÙ—€{Ï#ÿ¯\„¶L°‰!ÌnG˜›IËqÀàõžõNÁ•ÛTÑD71$o»0H ^7ì=óÚ³å7Zuð»·”[(‹j‚ùqÇ@zÕiçžY¢ÈòâU`pr̤õ-ߟþ½T¾gžDo1B[ÆùyËóŒàŸJ¤»2%ñhÆkÂånâÜ<Žrd`zHÉõãô©t_Km+Ën^)ˆù™¤È'·éV-<9q¬é’4s“kí¤y…r@^Ç=³T/ »ÓåKsgöi<Å.TÀ×ñªÑ«1ô54mäÔe:Ÿ›<’eƒÉ\þçéZâ‹‘!¸¶Q)Æ× ãæ÷ú­eZ^…wFD3FbKÿĽ±Ô×¥6ïEéÖ×ÐÞGròÆ$¸EäÅžqï×Ò¡Å7v‚É»–®5 ÍLO„yq©`©ê2yõ­á+kYÒf¾½H~ĸDd,\ãvñÓ5›áXâžêëý'ì“ye£±åŽ9 ×9ëPËiö;a¢äJ2„ýá׿O¡çñ¡ÇºÐQl\ê:¼—P¯ Þ\|ếAÉÉþu¢Ú¼±]¥øY]<æÛ+¦HùOÊ}»ý3éN„O}Íf‚ÖvÒcžHúg#<~´íFÞÚ])MµÂ¬îÀ¼^YA“Á*sÏÏñ¨Nò%=Hn/¥¸¾mJÞQk0Ã9ëÏSõ³«]éºï‡"Y-ȘÇ#”’AÃÓžzŸNâ¹Ûë[{3 ´¹7R#ª‚““õ*:zVŽ«¶‘§Kej ÿJÊ6ó’Xwc‘Žwʪí=JRß]Ìø¤·ÓËÄWs Ê>Â¥H$ç¾{ûñQÉs5²¤Ëµþb+œÿ´;ö÷®«Zð—övƒÄ×VøUÝ3FŲݺõþ•ËéÑ]^[ß3@ÍSÎ@>d?7<œôíJÖWdò´ý⌚­ÇØþË÷ž6ÞŒcn=9ü8­ûceµP¹‚¦C0Œçb)hôŸütÏ‚Ýmïb‡nÝD3å/ò°ìç©­_½±‰í–xÞ8ç™ÙeŠ2 ƒÎqƒÇ@GãJM]£ØÐÖ-,!ÔãM+s0Øì°çÐ`c×5æšf±•¡’1> ;rTœñëÀþJ×Ä’%°Ð!ù’GÀg žGëøÕÛ§åKR\‡ò¹îvŽƒ éøþU2²wå)ØÜÉô6Jcòed`¬@É8îíŒʵ/¯%CsÎLQÉTîü÷Sžk™ž´ê3©m›"ùß<õúš³¦4W-=ßœˆDªB±à¸€>ƒ?%q}›P›‹¬ˆYIU!?w¸ÇÔÍZ(°$fH¤Ït'†GêG~ÕÃZˆ··¹GŠ Y¥ÃFä&ðÌAÏ<äcª'¼Iõa)‰^;)-‘ߦ}ë;]\RޤM4VJ"·ÌU›Ìù³Èùsô´gµŽ#hdp$Óäc‘¹öÉJ«â­å–Þ[X]caó)¡<úúv¦Í®] [X£k­ûmÄN:8ëÁ'AéT’½¤Ró3®5 «Ë(Ṻ‘âY !I=Gæjî«}%Õ¬ˆ&–áU˜Ÿ8rG¨Ç|ýj­¿‡5+}0^ÝDmŠeäIóc téÜtª÷,‚ÕNüçO\€8ýj“’WèL¤É´Í2}D¬v¡N_,ØàŽMiÇ¥[ÙÁ$ë"_*Œ>ì•lç#œ}Ò>¹ª¶+k î8$(cÜ/SõÿëÔæÞæîBGn08A?LTFKt‚+K™²O$Ò38ÙŽqîýUºú¨ñÛq¡ŸOIëM•]É),»€8ì;™Ï½g;JŒw.²:õô4Ñ2‡G/—$Ï€Tþ@ñþóªÍuv…H ƒÁßÚ­4RÅf³˜˜DÏ’åxÚ2þcðª§NXâíñžÂ“×r™èúmד<‰%Í̤ÊpWç·ñøõëZßgš Rxbe(JDdœbØŽr¼sÀúÖkP=ä÷Z( íÚ¸S'<ç?ãW%Ô®Þæ¢³E‰¦2'§¯n2 Å{6Øî/j0\Ú’©p²E0o6U;‹éžéÓÓP ¤¶YLDG¸¶AœrÌ~÷>œô¨µ+Yg––ÑÖ$Mâ/3pbO³ßÖªÉw'œ¾M¤Ò"2m°^½XŒg׿ZH |­JåÚòK– AýÞýMhÙ\Û†VGÄ’F+€]}I>þÃ¥Ew¾a%¼¤_6é7Iç¯j˜Noz[¬P«lI€çhíÈö¡í uÔ¯^t2$-åÛ„ÄŒ23ëÜõö«°[/—$qï‘H$ð8ùúÕx#žk–%Ž<Æà(ÓëN‘¦i¤·|òù@íŽõ:B¼ÚY‘””V ÷ÏøT.A‘";@vTí×ô4–Í’ˆä˜+Ìs¹ˆÈÁè ~5$–ó;0qoýÛʰ9=:õ4¬ –5I,švv”äcnç·N¤sUí"k˜a¸†çæl©Ú1ïùÕ«»›x‘±iäÇå´Ÿ9ÎNyÈë’{ÔR^0µÜJÄ<¥ÈëéIé¨j&¥-ʬq2ùønVVƒëŠbÜ™b&’I!f ÏÊ^?­^·…î,œ²KE« r?dN¢A? ʨõ§~€>8`YH^~íҳͣÚjÓºç6чAžýqߊ´ZaqŸÝm4›Éè;:ûTè2ì'6ä°ÊmaÀÏ®1šiöFdW—ÌB%Éå½îzgüâÕÄ—w[äµX¢x€!#®qÕŽ9ü¨–ÈOÜa °;BÇ'nrO?§>•m'µ‰‚Áº%XÕOËÉ'“Œ{R½Ê±lm:ãÏžS ù€Œ¼ý;óU¬ »»`"¸c(/µPŽ û§jeìˆlÓeÑ€7Ì¥°­Ï¿QÁÿ8©K.œ­oy±^@ÄÆà1À=pqÔQte]Faê5ÍÈ,*瑌ã¼xÉ=3Ú¬-²EyÌÇvpNÞr0N¼úÔV–b9åS »÷vÝƒŽ£×êinvÈ30“wÜÚþ-ôÇ+ô³¦Çs"¶'óF(º‘GQŸÊŸgŸÅó$NIó³ôëõÇZuºÙGÑGX*TŠ 9ƒÉÏçÍgÉâ§Í¹¡ŽtdéÈûmgÀèX“Óœcž”›Hi¬¦lÅ”‰°v€C2ŸúRéðK ,¶ñ32Hs€GëšÏµÌï Û´‘î÷”÷'ÔŒð:}kA5×°·Š0ß»äù“)÷äúšlIjTÔmf½ºy/IGuU†Ü/]¼u÷çÖ Œ °ÀŠÈ£Ÿš@ 21Ž¿:Õ¼Õ’âH­®àBïPAÏ>‡ŒUI|»Ée÷PÛ£ÊqaŒ¯æ O+Ú“e?>B çÌ?0ü~•Qg–â(Íý٠Ęݺ•9?ÐUeD†I­Lï6Ù>è8Êž[¾?®M=´øå½[ÙcšYäY\~ìg¢Ž€tç¾}ø4.åîu lZ-d@T,²6æQÔp03Ӛûðþ¡¨Üy3à †i"(‹óAçq$úc¯N+¥0Ø1µ6챸òÀ€<ÀOËïÀëZQ"â0ò…Û:äŽ2IÏùâ¦QLFÊÖk2ÚÖ 5ÄK±ßËÚd8Îæ#““ïW-"–ª ;df†Ö8'¡#·NÔöó¼Å„—š7 Ú:޼ôç×4Û‰ËÏ;!bb1»ŽH#ó÷¦#Ÿý4H¡2dH¬6ð^xïëR"yÄ›€¨ª—ñçžýª;x&,Àùo ¤¸’wíÀO‚#EOððÊUNÒNñÀÏžÝ}=èÑ 5œ7 ¶ŒþJ•ýÖÐ9õì8éÆ{Pr¶Â˜C2¥B»Ž¹ÿ<Žô_Ç$‘’›c‰¼¯Ý'$ä:zUS,&ü:Î_ÌRÙ…xíÒ’@ZžÞYl(ÙþÒ©òî#©àôë‘üë2ÏLÀGŽVаËãp€9Ï\ƒÒ¬ÿj.Ûås,¬BeÔ`ߎ¿Ÿ5:_º-Œ720̰Û²OQíÅU¤º…âö&ûfŸ†7\¨Ul£g%¿*W¶µ7 説aÛ–’}=Mcêvר[´b ?vNõÚ Éë×8íÇÖ£Ò¥ 0t72©ùš0Š ÆKäžØÇøÒ²JávËš“ùRE:Hr„¬s$9'ŒcðÇCÅ[&;e3˶Km*›¶Ï^™íUn¯®-®æ1ÛFí©Ø_žœwèß—jŠI®e¾pn#œ“#zç¯bûw4‘$zþc,q^Z[‚óŒÿgpÏnçð­Ï@ºV©±È$tdg= e}yÀüª8-Ùl$‘$K“zÄ ÄJçØ>ŸJ Ýõ%­Jöמj:¯”Ž~euB3VaÕ%¶™Wwøãlïƒ×ëQM3œI Û $$ ìzp};UWBñIY­œŒ¤¼àƒÓ#•<õ­Ô¬MަÏ\œ®°ÌÀ}Ò6±þŸ¥hA®Å0Q*XœqÀükˆhV(LÐù̪Øvw-³Ðn=}}iñ݉àÙ)ET†9zO™è‰"ÈÅ®;éP\NÑ•"R¸àìŒ0õÏjáѯ#”5…é+¸·‘3mç¶àÕñâÉ­Wf£dUs†,¸˜ÈÅK\ÊÉ;Æú'•Ê´¾Z‚w&pÝÏN€d~uw¬[ÜÌöñ3Hÿ)hÄ{ÉèOnqý*Õ®©¦^ÄdŠeWb>W;½ð0zý+*ñn-a¹kYfóeˆÆÑŒç9χҹ9ÃSe(²Ä@Ó†i–¿„„Óœútâ´¥…¥Ï™q*âXÞ=»½òOU´¦šäÏbñÆ$òјÈ§þ5,ÆàHíç$œ»TíÛ<þµKS°' -¢»5œrNHÚÊ¥‚àcï`€xúÖ5Öý­£\.›>\¥c›Í©]¼eFqžÎ:è"Ñ̈³»˜Ù¾o›ï/¸àÐ-§ƒtP»Ì É/&988ÇNœÖ~Ê[Ø%ÈÏ2“÷V:Ç› ¶‡*°¬`09èxÉü³Xp)cxó™¡b‹0`½³Ô;g½zί¤ÏÆ–ð¤ÎʨÌÄùKÜ€3ùq\Ôþ¹¶ÑÚæXd[™J¤à*¶Ð7ücÕI>Ý*œYÌéûÇ|öö÷WvÚ)[xŽy[*ÊØÁ :}zÖL×RÜ-ÁŠÑ<˜&áÛ:ñè@ü?*î5/jwÚ¤®"‰•7GÝŸåÊõéƒ×Ö ðΗsl1+H¢WÃga'î¯äyëJ-%qNºöZÞ¡jVêÐ,sÀ‚)K †C’LޤqÖ¯êZþ±jV¨âßr¬Ê¤Œ¡;8èqÔŒ‚>•³£^Df†ÛO˜² ­"c" œõ+ëÔôÅ<O·y¾ÎfG$£’¤t÷Ï^þ•NI+“JÌͶ™-¯í’÷OûE´nB$Œþ02ÙÏé[º–§bÞ‚Æ ÄÂF+"†$òz0zŠçu(æT–=·,ÙèÝqŒU¨%†æá­¤ŠÆP‚[§¨äûÓ}Æ›Š:=ÇH‚ÒòmFâvß°À$ ¸¹ÉâªÝ›»›Ëk ÒIvYÑã`ãîŒö$qY‘ɦÞ"“þŽèŒß.p¾ZŒçÛ¬Úµ¨2v=Ö6µÀ`êÇ’N9 öÎ9¬÷W@’z²ïö\Ú5±—RW´óStk*q÷ƒøqïÆkKRÕmχþÁsmÄbÞ02~VÈaß®kPkÿZ'•C&Â&8Æw¨ïßóúVM¼ÿºê’4¿fÌŠT¤çŽùãò¦’OA6 ïMVÚ ˆãHÄq]\2¡EÂc8íþñª?f‹Lf…§Yš"q°—V\pêqÏùíLÒïÚI÷@"0’#y Î þGž2j[÷Ôu}­ŽùùaTÛ³¨ÂŒœ‘‚9æ½Ö™2ÛBî oo­%hîÄöASh|++îA䜎¿{ó„^6Ÿg“ª—ÁWÚrN:Ÿ\õ¤šîîÅÊ`é$c戜¾ÛÎh·‚ ©Òg¹/!\ÛŒ÷çßZZÔNî×4ml¤¾Ò®µ’×í <¼nùÙ“øúçëLÑô;»é%o>$DPŠKu“'æÏü ¿1Tf7z5ÜR ãHÎO ¸`’ týjµu=œm¶ÒÉ”fVÚû‰,>¸4žåé“Cá†85¸$É‘ˆg,Ø'*§NqùU8âahÜ«3wç8löüˆ­ ."Ô\2µ³ÆþT‹ åìqÿüñT -ôá b®¤Çu©Pjâk]ˆ$1¥œó•"y‰ HÀÇ ÄóùS´»o#Jµ™ ¬l#¡êî€'ðQùÕ{¹#½HlÂ’Ÿy½0$ŸaƒùVŽ‹¨Gomoq,!ÑQ‚.Ü 1súþt;¨Š*åx|dž™_‰»žK?:ÐŽd2>4>\cøÎ8ük Õô!5i0vp8ëõ©¯|/¨*™â6`¬h{~8¬¦"]6ïÌòö Bçq òþ~|×Ýn6ÚVe«­Ròõš9®[æL´YùH u5gHÔ¡±Ôü때jLfnUãzàžµÎ­êÜJ×B1ÃŒÿŸ­3Zµw–;„pB Î9àŽ•q]›×S©ÕµH¦ºó ˆwW1Ž ã¿õæ® :;UýÜ‘7™€Ç-‚01Ó€QUü7odtA>¤²³I…\08P;zõŸñ¬}LÛ^å-ŸtAŒjÝ äHíI-yŠZ{ÇS¥7ˆa’3væ‘bÃŒeG ä÷ÇóÕSR±Hl ›rl'%£;·^½zÖ5œª–­,L3Œ…<;Ÿ þUµgj.mÜyHÆo»‰vŒ1ú~µ-ó2“Œ·Y!—O–hî¼®Y0H#Û9¨ãŠÜÄ…îʶÑTpjí¥Ýö‡zþb#»„R(eažÇ<}Ð3Ú°¼Éòq'ô¦¡Í¹3Iž›ok—y%ÛEb#IŒl«œ’F ëùÕ»Û™’Ôù1 fºbì$Rp=€ü:ÖtV‚i_3#ÊО ã'¡À§­¤LÌþa”ü«»'$ä+Óèt>Ãi'6±†%Á*Ó²Š9Îx<ñùո͊Áû¤,\e£ãŒã:v¨ÚyaŠUóìOÝ-Þ›¤P–*³”~C™2¹€xïÔbˆÉ0i¢ ”k¾?1“ÙÑ8Á9Ç~}qßš³cj ûL>L²"…uc“ǧLžj6+˜Úg#ƒ½ÀävÀâ¬\N³Ü,p\—ŒÇÎÌŸ `zд]–Y³#ÀÏ;Ž3Èô¨'‰§Ü’Þ$¿HA/(à~}iRÎ!˜0ëqÏ—ºL–õlÓëQ%¬ tÉ~Ò—#à×’z: <€4°‘Úùv¨2[lŸ}»Œ‘ÐçŠ[ë¸Zhà d%¿‡×޳4íp™ˆÈÚÁ‹Øþ_­)+9,±JÄ€N8ôöüésCf•Úéäe²¾×\Œ÷ǘ%bežáÙ!ˆS#d©ç·"–‹pÕ–/#x­®fÜóËŒˆ•9Æ=þ™8¬¦žxmYÌÐùÒ´(ÙØ1Ó'Óüç5ÐÅ!ia¹–PRXÀØÝvã ëXW‘%ÅÖæÄ,§•-µcžOvÉü¨`®:ÚkèbŽw…ÖB›CJpH9ÆÐOöúT¨G%Üù»å1Už~lþž¸«×PÇyö|]¤“ã,™Æ3žœtÅeǦºÝ-¯œ#PÁvcæP:`çБøÑª{rWÔÏTyÎë.\«ŒpÇœð;VxŽiç}¡šBÅ’5n;þý}kRñ6ÈÿjˆÐ6ÕUÆ2ÇŒž8Æ}jÂ^@ð {4–vlù€üÀz`ö9Ç´r½ÉèI¥É6'|‚MÑÊñàr㹪 alöÒN¢(Óx@Î>bHˆüøÿëæ¤û6&kqpˆP3 §9'AëTâ†);6ð6ÒrÁ±:ý3È¢×ÜW¾†­½Å…®Ÿ&g™Ø TŠ0AN{`Z!¹ÜÈû Ê‹åy‡'zŒãž˜ã=ºÕ[2æгÇå\ÎYÉ$`ô#ëÓŠ·-¬ÖñA,Nägvl•çåÏ@§9ç¾)ß±Wµ‰¡¼2Û4r+És(`‚>ˆNžõ6¥q`OŠÖS;ü¥äfep~¿ž}êÔ ¼1‘V3µ¹ÎAã ~\Ñê3ZÁΡ¦›kÖ)„D®÷ÉŒü8èsëøÕ?'VÓ¥ý匒À exwÀ?‰éÚ¥¸º†ÁíäxL-ºÌØÆÞ¿Óžô·W7w—QɉE²«7Èı8ן…0°kšN™†¸—Ëà“œÆ à õÎ*;E°µ°´ñ¸’ÞQ$mYCs¸ÿ矩Æ(š+9<°¿l»‘áó¤WRPtϰ=1Ö¥[ÕÔâ• Çnc +/ñgª±Ç÷Ô”.î'd[Ôu‹!M!uÞpÜúgéTâû—‹m{þ ͧ”‘Ï^8Á¨§nÌeѶ¤J7GòeÇ^FF8ôãù^M"K‹+{˜X¥Ëmfw—8Œ’ÜrqŽ¢‡gÐfuΗ`—èÖ/<‘²¬{UÙü!²zðƨý²Ê{Û›d‘&Ìj]Œ8ϯ"´¤Ôcµx¢ŸsÊeTgHY¿sÏJ¾öé2£‰î'qºDÀ8Ï|ò03Ç^¸¤à¯¢ÏÏ4ñ[;CÓ: Æ#9 v Óÿ¯×¥KmÎ¥·ãæl!·ËÇ#ó5«¦7›*‡YÊI$€‚@èsN?D°H³™Þ5é²d¶¹õ§^ÿBÕ»”ô9¯\jRAopìŽñψŒ$d ê}—?…Aá[»›ÿ9ä1ÛªŒÄ‡N„NxéÜUϵ®« ÆmUmæÜ2>B >äœþµjÞ7K·±ƒHyÙ\•’M…÷Œ÷#§¶8«òbÕ3Béæ´‡H’ …R­ÜƒÇ?Lö¬Ë»Í5gb¨ßh—ªF>öP;ž=*wðü²ê¯ ÍøVuócˆ/–Ì28;²OôÇømËgl6ù°©!Jç½*Uºj äE­ÝÉYíb“É+‘.ã–õŒ{ûÕ™,ËÛ‰žÙâÜ7¾O`Gã×ó®‘ö,)Q¢²ÈärŸOÃ5%ä¬Tì’=âP§g¨Ï~ÿL¥%¸ÒLæ’…¹i8 ѸÁéØã ôö§$²¥²Ì€( Î=G5»˜.®N¦1!ùV1ò¯×ŽüVtú|ÚtÏ ÀØ7ƒµ³ééôªR[ ¢[y WcóæF6’}N)ѽÄZ”KÒ¢–Æc¸ûàš°#€«ásƒ¸ê9ïM¶”‰ÁF(ä€nÆH޽9ÇøPïÐ Mnú›“ˆ Øe!€ü?¨«â[PŒdŠP›¶†À ÿœW+s'ö\‚b䣌&î9V€Ž)-<œ†VÁË7ê=ýª“}Bæä:ÄWW1¥«­Én™lËÿ­]”Eºoˆ3OøW™Á¶ÆàN¬Îc=#99®¢ÃÄW;IíYqŸÌz1!¶Iƒ$âçUôÈâåHÀ0!•‰e?ª'İÆäO ¨é¹H UÈï¬ïGîn†OTŸ~ôrVö²ïfºI mÁUàg öàóøVMþ‘$—{¢»Ž<€ª¬vcÎàç<ö­õ@n“dR¸TÊä°ÀϯCøœñZbƒØŠOR3XÆ ÖEÉêsþUÔL¡ÖÞpÊ.xǾÈÇëš×4+‹‰ÛXE b2gF+×áFÁï^”ºà‚@õÇR±6À7€LÓtÓV#sÊ.üwza[«ÙÌhÙû5¢€½1€p}sŸjä.ôOØ !Kgr¬v‰_.œ÷ïÏNÙõ¯uÕ­g»ÒåŠÝUfuË•ý3\Í夺IKË ó*%”6ÇÞ :ýjº¬Ø™ãú…Ž¡¨¢?Ù¤ÈDØg¡@q¸ƒdñÍfÀòYI!{f$pyÀëÜôÿ"½S¾zºé–ð•·Ü†2á‹*²ƒÇ~ùèkšºÑî®.dµKt™Ô±ó È9Æ=ñ“üë=´{£Ñ´Z}ÖÄò¥à4IÓ ¯¾zûVu±¶ºeqpQ¹8dàÛ­ú^¡ ‰LÑÛÄ¥]—IìN¦³«ÂòI1YŽÔùÊœb­£’i ž›õòZG;E 2ºÌ¼ŽŠ9ÁÆ_›ÚµU1¨²®ÑX¬‡å.W¿¦ïÄûÔ:¸Ú}Š\ˆJܺàŽCtþï½gß_µÅä—®†ÞÚa’ƒ݇?ŸZÎͽD¢Þ…‚ïq,ãR¸&}ʱ» ’p9ü¹ö¤XñrwÛª…]‰)$¨ã8ôžê!sa-¸Š$t–XFöÝÐò;þªm*5’4±‘”Ë(e.Ä•bsÆ{R—vN£o–I'Y7Ú²Ôd>ö3ÇP†b­òÛåiÄ??Ò·á¼µÓL÷¡~Ç&2Öbpv7±çüšÅxÚâ_20ÁË•éÛ‚:Rº°­ÔÓµi"(ûV·°Áqó0õ ·éO¹œ7ìÝ$ÅT/÷@SúU$»K‹´`OÉ ÷pn}Éý).nm ˆ“L–þQù\åƒrOëœÊ¦P}'عig Œñ “#ÉÎ='ëj³¬½¯Ù#M=&g*èTb2Ç^¸ÿ ƒN‘&YaŠHñ&p`œŸ×­m—G‘/Fù-¾ÜÈõÚN9ÈéYÆíêL•ÑÏOs}s,M ù–ñ„‚ Ø'p ëÓ“úÖ³øpßKföú’¤ˆw>œ3`dôéƒß¦+ CÖ_K–TIJ+œ`.IÀÆìúô<ß]]uMrÞ¸”BØ$@CfAŒ9ôÏ®+[k¯A¥¾äZ•Ö©á«eŽ[€Ò\mêzp~‡žÕ‰¤\%å¼¶ÒÅÁWq,¹+’y_Ç5³wu6© 2D‚X/ÊÛ·äg<;ö­¨¼3qŽoÊ$jг±„Ë‘‘ŸnrqDÖÈ™&Ý—C™™ã3¬0/îÏñù9#ò«WV·Ö·¤Ãb^7‡q€rñÓ¯¯½6Ñ!“.9\Ÿ¾ ¨Æ:ó]YÕ-u3|±¤W@‘2(\Œq‘Öí¡)_sžk–¶• ¼†#¨p0H=½3ŸÂ6¸¸vþòYŒcn3óvïíR 2á›Íh%’·„#9Á§^zTVîmåi4S¾ÄäüÇyú.ãõÅ&ï k±Õ#K“MKt76·+ ËpË1É'_˜ví\ÜZ¬qjK²ym>ŸÉ<Ÿ0)_Èø{ÕÝ*ô^ÀÂX×&1#œà1B3ØñŸÎ™a³]²Œ“*°y#™ñ½‘YXäœç<ÕÙ´’º »ÔZîãìéò(q“´7=¥CöWÏú×ücùÕ)%ó5ÖVQ&ù{‚€‘Ÿoo¨®¥t_:+KóˤH9ïüTµD+=Ï@h£¶ÒR##ïA¹£lÏŒý߯cYbí'1Çn¬²ÁÝcÉSÐ{~5N?6G dŒyŸ.ØùÜqß׃ëRÚiÍo¹ZýŠ–ÎÅàØÈäý3ŠîWlêo] 0ÜF-’5†bþ`àýâOr=G¿ãV®ä›ìÒE‘,®ä` dç‘׎ÔëxP̈ínX€8·MÙ=Vû=À1Ím*î-æ& rŽ_Ò«DN¢Aù^Úùås€V2ãåîHÇ•¦µŠ dI:ªà©ïךdz\6pyóÜr»¼®¥˜Žœöü+:(–[Å·1¬w #ÇpõÜÏëBWz•{îY­ç’çÌ]ÅBœ8%OR)ÂC{e7ÚºÞ…r¥þ_ÃÒ y¾‘`¸þ ÷Tq€@Ï8äЖ~]Äfî# xÝÉàž´1&‰'Ž&·†UF0ÍÇ@F8Fâx•Õ‹6à#«0ïøv«w7oqtÇž¸Ì…ÇOáÓÞ©Go=ÅãKt›aæ@hWý3ÓšLeø®ÙnåMÀÁ*O®yÉíÚž–×¼Oq/˜¥”ÛÄ‹’ÇóÏëQˆí–Þ' (WaòƤœñ×óÑp.mœH’3“—8 ?‹§ ü([ë  y5Ïïëtòð™ó9ôüª­úS…»d0P˜i1£òIëÞ¶,JÇlïäÅæ)%fo¼ç×`Sc‚Ò=’þèÜÛ’]˜ú–„gAö'ºòÖÔC¼‚ÞJ€zà‘ïôëQ‹8äÔ!‘Ô?ÉìÇÐÀV„ÓE$Ê<°£#=Opª±Ä5/Øe1Þ+s’N3‘ÎxÇ ¥n¡°§U°]±]ªÀ’Lú€j{#§JÓ9·Û((åFJôÏosYŸØ±ÄážO˜ó.J.ö<äúwãŠÕ‚go´¼Œ¦_•W=?‹ó<þ•_! ¹‰”Ið‘) ÊnyêI÷ªÖ±±¹‘HÀ‰Fæ’<•Ï®2}qOÔ®ÞHaiŸv2rÏV'ÜõõÅWžÖMAc+7`ÈImă·àµ)w_ÙiÚ†¥î|çÜ& Jr`—8å½{~šÚ€¶¸D„…ŽDP¡×¤~€‘øqQ› gÓáí%eÉS#œüv9#š†y-"¶H òÍž É'©4·ÐOB¥ü‹#º:Í…\m)´?Lßdþõ¤r`R!³™e$n(1ÆNGâÞ™©RæÞ2 ߹ВÀõ>:~õ m ­äNœï$°$NÒAè(L[½î}R YŠíBIM¸Û×?^zôíÍ-ÍöËÞ8ÄCäDÆrê:úŠ„ùRi÷1‰C]I("}¥•rFT…Ço«ÛHó($!´s€ŠÃ.A§ný=*žÖ1–á&¹Ùá',’á¶' éó}Mfj𥯤Yc„Èù!ò yp üXî:v®»[°µ¹‘ͺK¢¼-Éàr@㊯þ§Ú 2 ¶!gs½¸Âƒ’XöÀ¬¹[VŽcB³Õî.…²ÙM`ªÄ¼¢% ¶ŸÐÓšï#_ È~Ï$× ¯ƒ’É8ÆG¥VµšäYËp6Ijƒ÷HÌc ²©·®OëEâGÃn`ò·°Úa“ýcK3’3ÎsÅiËdÓ"ºIäŠà»9ª•L®áÎC×Ò¥:KÿeÉæNDŸx4¡‰ˆÈU#¿=1ɬó£,Z|ñ¤K¯²K•;23×#’A'õíSi°(+iu%Ã)f–BUAÆãÁ'Ü`gõ½öb¿CRÚú+D 2Ån„´¯<³e¶ÐîëÛüŠ `‡qi¥yŒøÛ<ˆIla†éQ¤“Çyu<ÛH«©*¥²J~ Ï`+^ñm.LÚbL—'× ýje¨âfÝ\ÎÍþ…"†l&%Š Øçà+~u.™¨Oem½á‰Ì‡–irO_¯Ö•Ë/ÛmÒ6@"è~sózŒ±¨5ÑÓ¢&ÝKüa±ä±1ÓéøRMì'¶×F¡4uŠéø’°ÚF~ð;ç'¨Õ׳•/V;}RiŒ04‹‡n?tp>¸çÖ©EaÕÓßj2Xµ”RU‘SÆÜž éúÕÉ.®ca -HãøG·øSW¶ ü‹ÑMgz–wÅ4÷BÌ›v…8,GŽÕKPŸKR—}«ÊY6;Â\sŒ.:œûb¬Gs’#{C¾3œàŽÇ#׎k"ú /f†ãeÄr¨m–êqŒð8è:ÿê¥uXҾś„¼•Ë‚ÁÚ>yÀÀuçjiõx-#Š5"fùL’—' =ÿZ¿´ãºG„#6Û†=øÎsÏSéÒ³o4ù!µþÒiÏš°É· fç§CÓƒõéJëíèlÃÅ•´ðË*˜K·@Wq÷ëŒ{U{»›8­îÖ|Hpc+œ1Àž¼óÖ¨JI·Eml&µXƒîrx˜Ïôô©onØi«i™Z\—fb(#wAŸAÇ­$õÑteëüIVö¯- +Çlyd§<¨8#ŽÇð­MjãS‚X¶Mhö’,wg!cœƒñ«sY¥…ŶËi'Œ¸c¹›ž9$’:Õ†º³Ñ´‚ÓÈ<©˜ºÁ¸1Ryä’;jîÛ]Šs´¶Ò´ÖRDÉ™Ÿqù29 tÇ\ÿ>•Ïë7:ƒj«k™C˜NQ†7íãqÏ çךm¾Â²)é·“Þëú•»2¼(CBGed}r n*¾gQÒ¸­6àh¯qzðIµÐ$°*xÀË(úgñ®ªÆí$±squæ—så4+•+ŽFqÔõÀéYG™«±"å¨t¨$ò+cU¤ 9dOjæt¹RÚâi,.–á÷íppY=¿>õu5én¡‘dŽ9„Š4|ŽA=8?Ϩ«‹ŠÑ•fÊWV1\‰%1D%',ä`¶=ÇÓ½Wž’?5…!þQOç×&§Qº´r ™ö¨#/¶qž=* ÝzÃI·{™šÞBÁƒ—=9PhsVÑ)E¡ym—ÎEm¤†R2Ç9¨Ïô¬#{+†h~ë´J7¨×§¦3é[Q¼mao*^2ÏÈ’¹'ŒôÀÇZHôäÔZBøãrؘ{ôϧ­;…´)¼É,€Å,r1à#eùTÑ™6yc1*>väš»o¡G%»\ßÊ»°Ù‘ÛèsT^)#”Co²Ç’¯Ç q‚xç=(oPKB/-ÝǘB«¨ì¤¦qôéP4²ÛÄ0 à4y*}0{S$ó³lºQºBcùHÇB3úÒ;]ÇdF5¸EÚU#·Ê{Sº VºÅÕ–0%òÈÀRïžJдñp6ã³Äzþ¹À‘G E‘|Á¸•ÈÎAäû÷¡¯7Ì`*®2Lc€§çDdìsm¯YÏœŽâ´"¸Žà~íÃëÖ¼áœKToï”çúÔÖÚÔOåý¡öÁþ˜?áUqNHrSéNÚ‹È_íqö~&ž'U–0ñÿ³Ö¶muür3Œò3Ú©Jé\¬\Ôte†6ºº• »ù¦)—>iUäsœÁõ«6÷KgÄ—©+(LÇs(W$$„ ã<â ÔõßµÅ[>ȦgerÃÐóŽsõ¨ôhWÖREÍ.8!sŽ ëŒô8ý¢4½–¦‡‰c²Óì"ž-)-žYBŠBÃnFTŽ™ÆHªzUÄ–¶Kr͹Î×N:rHµ“¨jIsmq>ôç~M¸$ãiúv­]NÊé<0‘É©+‰K9Lž§ ï\ì¦'Á¤hÝÎv®0ÓùÔ½§}ØÍ:[û[60HàBªyR[{¨ñj-F[‹É'–PQ|ãÐæ5Ú¿( ,Iǰ梎mšeËFØ39HƒNqòøsÓ"­E5µÓ)žQ³hF˜. †=F d¹;$]{ 9­Úá`–mo81eÊä)•Æy¬= ò]¹ÿf¤¸¼–{ˆ-ÒM¶n¥ cåàuö'¿ÓÚ¬¥­©I2äœF§ÿf­ÀÜz£ma(&i™Ù?tàXóžOz³w£ wX£ ‚Òð 9õú ûfŠ+µís¥² ›i§4òÜÈУq–¹ÇJ§&aï+|¹Ú $úph¢¦íî]·ß´vþ~ ¥rÐpIç·ô©aþдº’Ie‰v6ÖT$ðpsœwàô¢Š«ëbæ…ÖÅÙp6+É7 ιÆqØuã­M,—W±IÌc-&Àƒœqž}I…T¹;Ø«jÌ.å¯QÍš¢Æ²ù| ‘×'òé[ d—±¶}².ÓžA¿Ÿä(¢ª:«ˆv #†Æ# …YE¸»ƒÛò5Vê«“½¾b“Ž=xõ¢Š§pL‰æó!•"̘ àóõÍW³’ÕžRU#xTêWiç=G4QRŠQL“Q·³‚_³æ ¼‚êùo»’=2 Agwaý¦ÖQÛ<%r®ˆFæ>¥»œ{ÿõŠ)ÃU©2Ñ’^OmåÅ$+·wÌŒ®>ªH&²¸¼ŽÓl³dÅ‘ Œ±ö8ÅV• “ÐPobÍëE¤é³ß»ÊËysÚXg§&²tÛ·¤³-ÉDožEu.H<àztëžÔQQq½ H,£¸‚[—•¶v‰"UÆÜ‘èy"¡KŒ<¹šä G¯å~¾´QQ=,OR”wÓ]\Ol¦4û Mæ¼*+ Ç9ÁÛÇp®–ûH†×G3Çs)œ!žC–lã®? j(¢öà¶¹‹zËi`%Vq§Ì¤ÉÎ\ðO¶psõ5{Qms qGè3Ä>ñP»F9ïÈ?‰¢Š§¤Òó‹_Ü̯$Ê­³` @ÉËuã°n1øô¤»ºx­Jl$þñ[©ëŒ?ŸJ(¡½.5ÐvŽ¢õd pòCæ# —£¡]Ù#pslUæÒšÊÞòòxÌ‘F]‚³‚È«Ô'äx'¿Z(¨¬Üet\uÐeƦ-&·ƒtÂÞè¢nG#k1ÀÏCÏÒ“R²ŸÃ:aºº™o#›.AÏîûîóŽœ~4QNâê[ÔìîþÙÍ©Wt!LRª{ã<öüj޳k$ªH¹VI …baR팘Vü½è¢ºj{±¸-E’Í/,ü««§‡ýj<˜ùûŽ;v'ëõ«µµÑío£!mí¢y1®/ðz(¨I=JjÈÆ›CÒ&µw§B¤@0W¯¦=y©¬5+t3YGn²I5'”i# ÄŒädu¢ŠÒœ#$ÛD7Ëkf¹kÙã†FŽGß±ãR$ǹtëéùÒ¾»#[¬Ïl¨1¦Ð£àŒÇ?Z(¬äùd’-;î^¹·ºÓì亶Ug™eŒ6 pÜ÷{~ÔQ\ü©Ë^¡ Y@xuõ[(šØÄ±Ìžl»0 ’psÎLóX ¤Lš„Ž³ “'›s• å@ÏÓ=(¢¸g¥ìe$Bº±ŸhûØGgžc¹ eó"îsǦ3ÅUÙ^ÈÎM­~ÞÞçQ„4×;IG a³Æ0HÀÈÇoZç/±dË»ùm!MØÇ@¼\ET•ïqE¶õ‹|Ú{ÜA0açÅÆPFâp§š¼ÀÉo ËÊܾâÞX?qCmÇГӶ(¢‰nŠo`¸;Y&3Hn ƒŒ®OSïÓÖ«}¢ {9#‰ŸÌ%$Ž6*€Ìp}yQNœnõ®P,¯ FØŒ¾áAéߥhŸ0’UcÁé•?üUUI èÿÙleptonica-1.70/prog/locminmax_reg.c0000644000175000017500000000746212240303007015444 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * locminmax_reg.c * * Note: you can remove all minima that are touching the border, using: * pix3 = pixRemoveBorderConnComps(pix1, 8); * pixPaintThroughMask(pixd, pix3, 0, 0, redval); */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j; l_float32 f; l_uint32 redval, greenval; PIX *pixs, *pixd, *pix0, *pix1, *pix2; static char mainName[] = "locminmax_reg"; if (argc != 1) return ERROR_INT("syntax: locminmax_reg", mainName, 1); pixs = pixCreate(500, 500, 8); for (i = 0; i < 500; i++) { for (j = 0; j < 500; j++) { f = 128.0 + 26.3 * sin(0.0438 * (l_float32)i); f += 33.4 * cos(0.0712 * (l_float32)i); f += 18.6 * sin(0.0561 * (l_float32)j); f += 23.6 * cos(0.0327 * (l_float32)j); pixSetPixel(pixs, j, i, (l_int32)f); } } pixDisplay(pixs, 0, 0); pixWrite("/tmp/junkpattern.png", pixs, IFF_PNG); startTimer(); /* pixSelectedLocalExtrema(pixs, 1, &pix1, &pix2); */ pixLocalExtrema(pixs, 0, 0, &pix1, &pix2); fprintf(stderr, "Time for extrema: %7.3f\n", stopTimer()); composeRGBPixel(255, 0, 0, &redval); composeRGBPixel(0, 255, 0, &greenval); pixd = pixConvertTo32(pixs); pixPaintThroughMask(pixd, pix2, 0, 0, greenval); pixPaintThroughMask(pixd, pix1, 0, 0, redval); pixDisplay(pixd, 510, 0); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixs); pixDestroy(&pixd); pix0 = pixRead("karen8.jpg"); pixs = pixBlockconv(pix0, 10, 10); pixDisplay(pixs, 0, 400); pixWrite("/tmp/junkconv.png", pixs, IFF_PNG); startTimer(); /* pixSelectedLocalExtrema(pixs, 1, &pix1, &pix2); */ pixLocalExtrema(pixs, 50, 100, &pix1, &pix2); fprintf(stderr, "Time for extrema: %7.3f\n", stopTimer()); composeRGBPixel(255, 0, 0, &redval); composeRGBPixel(0, 255, 0, &greenval); pixd = pixConvertTo32(pixs); pixPaintThroughMask(pixd, pix2, 0, 0, greenval); pixPaintThroughMask(pixd, pix1, 0, 0, redval); pixDisplay(pixd, 350, 400); pixWrite("/tmp/junkpixd2.png", pixd, IFF_PNG); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/enhance_reg.c0000644000175000017500000002062712240303175015062 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * enhance_reg.c * * This tests the following global "enhancement" functions: * * TRC transforms with variation of gamma and black point * * HSV transforms with variation of hue, saturation and intensity * * Contrast variation * * Sharpening * * Color mapping to lighten background with constant hue * * Linear color transform without mixing (diagonal) */ #include "allheaders.h" static const char *filein = "test24.jpg"; static const l_int32 WIDTH = 150; int main(int argc, char **argv) { char textstr[256]; l_int32 w, h, d, i; l_uint32 srcval, dstval; l_float32 scalefact, sat, fract; L_BMF *bmf8; L_KERNEL *kel; NUMA *na; PIX *pix, *pixs, *pixs1, *pixs2, *pixd; PIX *pixt0, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa, *pixaf; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pix = pixRead(filein); pixGetDimensions(pix, &w, &h, &d); if (d != 32) return ERROR_INT("file not 32 bpp", argv[0], 1); scalefact = (l_float32)WIDTH / (l_float32)w; pixs = pixScale(pix, scalefact, scalefact); w = pixGetWidth(pixs); pixaf = pixaCreate(5); /* TRC: vary gamma */ pixa = pixaCreate(20); for (i = 0; i < 20; i++) { pixt0 = pixGammaTRC(NULL, pixs, 0.3 + 0.15 * i, 0, 255); pixaAddPix(pixa, pixt0, L_INSERT); } pixt1 = pixaDisplayTiledAndScaled(pixa, 32, w, 5, 0, 10, 2); pixSaveTiled(pixt1, pixaf, 1.0, 1, 20, 32); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixt1, 0, 100, "TRC Gamma", rp->display); pixDestroy(&pixt1); pixaDestroy(&pixa); /* TRC: vary black point */ pixa = pixaCreate(20); for (i = 0; i < 20; i++) { pixt0 = pixGammaTRC(NULL, pixs, 1.0, 5 * i, 255); pixaAddPix(pixa, pixt0, L_INSERT); } pixt1 = pixaDisplayTiledAndScaled(pixa, 32, w, 5, 0, 10, 2); pixSaveTiled(pixt1, pixaf, 1.0, 1, 20, 0); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixt1, 300, 100, "TRC", rp->display); pixDestroy(&pixt1); pixaDestroy(&pixa); /* Vary hue */ pixa = pixaCreate(20); for (i = 0; i < 20; i++) { pixt0 = pixModifyHue(NULL, pixs, 0.01 + 0.05 * i); pixaAddPix(pixa, pixt0, L_INSERT); } pixt1 = pixaDisplayTiledAndScaled(pixa, 32, w, 5, 0, 10, 2); pixSaveTiled(pixt1, pixaf, 1.0, 1, 20, 0); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixt1, 600, 100, "Hue", rp->display); pixDestroy(&pixt1); pixaDestroy(&pixa); /* Vary saturation */ pixa = pixaCreate(20); na = numaCreate(20); for (i = 0; i < 20; i++) { pixt0 = pixModifySaturation(NULL, pixs, -0.9 + 0.1 * i); pixMeasureSaturation(pixt0, 1, &sat); pixaAddPix(pixa, pixt0, L_INSERT); numaAddNumber(na, sat); } pixt1 = pixaDisplayTiledAndScaled(pixa, 32, w, 5, 0, 10, 2); pixSaveTiled(pixt1, pixaf, 1.0, 1, 20, 0); gplotSimple1(na, GPLOT_PNG, "/tmp/enhance.7", "Average Saturation"); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixt1, 900, 100, "Saturation", rp->display); numaDestroy(&na); pixDestroy(&pixt1); pixaDestroy(&pixa); /* Vary contrast */ pixa = pixaCreate(20); for (i = 0; i < 20; i++) { pixt0 = pixContrastTRC(NULL, pixs, 0.1 * i); pixaAddPix(pixa, pixt0, L_INSERT); } pixt1 = pixaDisplayTiledAndScaled(pixa, 32, w, 5, 0, 10, 2); pixSaveTiled(pixt1, pixaf, 1.0, 1, 20, 0); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixt1, 0, 400, "Contrast", rp->display); pixDestroy(&pixt1); pixaDestroy(&pixa); /* Vary sharpening */ pixa = pixaCreate(20); for (i = 0; i < 20; i++) { pixt0 = pixUnsharpMasking(pixs, 3, 0.01 + 0.15 * i); pixaAddPix(pixa, pixt0, L_INSERT); } pixt1 = pixaDisplayTiledAndScaled(pixa, 32, w, 5, 0, 10, 2); pixSaveTiled(pixt1, pixaf, 1.0, 1, 20, 0); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixt1, 300, 400, "Sharp", rp->display); pixDestroy(&pixt1); pixaDestroy(&pixa); /* Hue constant mapping to lighter background */ pixa = pixaCreate(11); bmf8 = bmfCreate("fonts", 8); pixt0 = pixRead("candelabrum-11.jpg"); composeRGBPixel(230, 185, 144, &srcval); /* select typical bg pixel */ for (i = 0; i <= 10; i++) { fract = 0.10 * i; pixelFractionalShift(230, 185, 144, fract, &dstval); pixt1 = pixLinearMapToTargetColor(NULL, pixt0, srcval, dstval); snprintf(textstr, 50, "Fract = %5.1f", fract); pixt2 = pixAddSingleTextblock(pixt1, bmf8, textstr, 0xff000000, L_ADD_BELOW, NULL); pixSaveTiledOutline(pixt2, pixa, 1.0, (i % 4 == 0) ? 1 : 0, 30, 2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); } pixDestroy(&pixt0); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 6 */ pixDisplayWithTitle(pixd, 600, 400, "Constant hue", rp->display); bmfDestroy(&bmf8); pixaDestroy(&pixa); pixDestroy(&pixd); /* Delayed testing of saturation plot */ regTestCheckFile(rp, "/tmp/enhance.7.png"); /* 7 */ /* Display results */ pixd = pixaDisplay(pixaf, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 8 */ pixDisplayWithTitle(pixd, 100, 100, "All", rp->display); pixDestroy(&pixd); pixaDestroy(&pixaf); pixDestroy(&pix); pixDestroy(&pixs); /* -----------------------------------------------* * Test global color transforms * * -----------------------------------------------*/ /* Make identical cmap and rgb images */ pix = pixRead("wet-day.jpg"); pixs1 = pixOctreeColorQuant(pix, 200, 0); pixs2 = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); regTestComparePix(rp, pixs1, pixs2); /* 9 */ /* Make a diagonal color transform matrix */ kel = kernelCreate(3, 3); kernelSetElement(kel, 0, 0, 0.7); kernelSetElement(kel, 1, 1, 0.4); kernelSetElement(kel, 2, 2, 1.3); /* Apply to both cmap and rgb images. */ pixt1 = pixMultMatrixColor(pixs1, kel); pixt2 = pixMultMatrixColor(pixs2, kel); regTestComparePix(rp, pixt1, pixt2); /* 10 */ kernelDestroy(&kel); /* Apply the same transform in the simpler interface */ pixt3 = pixMultConstantColor(pixs1, 0.7, 0.4, 1.3); pixt4 = pixMultConstantColor(pixs2, 0.7, 0.4, 1.3); regTestComparePix(rp, pixt3, pixt4); /* 11 */ regTestComparePix(rp, pixt1, pixt3); /* 12 */ regTestWritePixAndCheck(rp, pixt1, IFF_JFIF_JPEG); /* 13 */ pixDestroy(&pix); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); return regTestCleanup(rp); } leptonica-1.70/prog/fish24.jpg0000444000175000017500000031241711270663572014274 0ustar dandanÿØÿàJFIFÿþ“Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÏ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?öHÀÎ{Õ˜¸ªËÀã­XSH ¸ÅT›⦒m‚©K>yJ æ@‡frÀÃÇZ¬]¿Ò‡”ì÷ 9‘ ÄÙéŠÝFë\ÚJD„Ö¤R7—דCv'˜eî ù«Ö¸òëá$$Ÿ”V¥›åÒ„îTeq×Ã0U{fÙVîp`pk)f9# i„¥cIîïÚ³î.wŒ~u²—ã§4¾^SÞ¡³'&5d(äŽ1QÜÊÒ§'éøTާgéPHr¸ö¤ÝÉnæfù#“9÷ÅmXj¹ù_‚+.uÃôíK(AíYÞKa&ÖÇO-Â:}EV‹çrzÐÖx”ƒÓ¥Z€œ*µ;š)šÍœJ¥+æL÷Å9¤Àã¿Z¨™½ªÓÙ« ÊåT5Éõ«väb™7Î ƒÔÎHÆ=jô7­ Èj·Côâ˜FIúÔ‘± Ó¤¿0æ§…rsÚ²¢”Ç&{¢¶áÇ–ïUtk\~1M&œMDÍù ¢Å'ÝÜúÓ &œ½hýhÆh_zpÜS©´â}(¸íGӱŀŠN( š)€sO(#½ÞôãMö  8ühÓÞ€Ž”SE:€Òá¥ê3Lö c¥ïGðÑš(úÒÒ½í@GåIÖœi Ð)ô ( Q@qAÉ éÅ%4úQŠuQGù4*)i1@ÔÜúS‡4Š?ŠŠ3@)¤ uÓN¦Ó¨¤S¿†ƒMçš3ƒŽôê:}EQŠSE&(Åÿ×G8 øhÿõQGñPF)sIÎhþozpéMö  h†›ŒtÅUà}j¿žÅÿSRÙEâÆ@û£½A"ãŽôøŸcCO½I;Œ‡~õþÔª>~j– :Ó^,ï>µ«ÿŽù4žfI4Ààg= A%ÂFä/Íô¤ä–âzøëÛ½Tº#¯J†I¤œ½°*³|ïÉÿëT{A9 üœÁ=ª8'y_i8Ç' Òªr½:SXÆ~÷¯O¥.næfº™fOAÆ}©’jB¤|ǰ£vr:ž•RX‡œŒ>ï©2¯bX.öd‘ƒš¸³,›={VWo¥F²¼ReN¸«LJlèTdŸjrð9¨¬fÓÔñøŠšEã;¨|g×½6eù­(RqK7Ü÷ ft£®}(œ:šX³Ó¥G7àúÐI6Ü&ãéÍWn\{UÙGÉŽäUU=aqxHöª1Ê{V™7¨íTî¾ùoÒ³jÚˆožßtO°©žAö↘&±u@|×Yûa‘ÏSÖ³LÙ8JÒ³ ã€Å½é2ÜŒm ÀÅ8\Ý[Ï™˜•h'Œב™©£Ð7a2:“JH#§Jæìuï0ùWckv­q} ›vH§?íRÕ&™b@±G¸ð£©5™y}V»“æbFÞ¡Õï–T[uê§$þ#18Ïq3”º¶~"¸‚`v~tÚnµo¨Œ+âLò‡­ppT}M>ÌKÞl;²½qÖ¯`…F™êqH2:m¸ãé^zºôÂOÝHÝ9¶,ué0ãÔSfʲz¯¨¨ dÈn´[\ÇsåïÛ¾ju´‹ÜII “Ôt¨zàŽMZG“øUX{ƒ@˜æeLVTÒ´¤€:žÕ}—{yÅUuqùW+rŸ’Щ aÇ­E‡”ˆÌ}[˜+ºwÜ{WEåG*(Ú8¨¥EI‚1ÎXé2K óŽÑÔ¨ä×Oimºa=ë>²àþ•e¯T|‘°ê}+¦R…%vk¤?R ‹'–=Q²/!/üz $‰®dËr,jh°·•)J³ç{i wJ>è§“Åu Çä¨bÜÀõ¬ëýnÞ=AtøOvýcŸ,z±ì+RÜcÊ]2ÏAŽÔÒx4þÕ§zÐ1éàsLŒÔ™ÂdŠ6ç¥4Òš%SŒJIì…5J‹í+ælO™»ãµ<ô¥©lïNÌñïO^•@5‡CÒœõ¶F))94É>å=E6N˜íHtPO"“8¥â€ S€£üh¦üé~”œRŠ¢ŠCLäc)sARßÃGÒŒPM0 Z)„Ðñ¥(d犦bÇw$sV– ÉÏçRÛ’³#™²ý•Å·ÎϺaž{`Óî5èùœú Æ”0踽@‘|üÕ)(«!©ÉliiI<œH Êұ…¤›jwûÇÒ¹yˆŒŒvþu»áÍQ„†ÞQ¸¶HaÖ±•hù¤ô*5.ìΣX¡Ú:¦ªûÁʧ¹¸DÆwb«%ÂdŸNõÒªÓŽ‰”g¹{_º¼»“EÑ ùÀ~þèýÈGøÔþ!×e‚acÿ“Ž´kÝrÑëú$?f<ùXî 9iXÿAC«±”ç­Ž«BÐí´ˆtìó8̲·-#zšÓ—ZÓ¬ qFGPO5ÆAeâa®$]>ÔòT}ò+¤Ò¼¥ØbYck©WœîçéZ&ØE»{¨Ó³×-/Î-RâEÔàlŠ (â‹ vhïÅïëLqKKILR=:£?z¦špéL&€ìh#Ú…ŠqçŠm4ýêq¦÷ ñ¾¤ê3÷ù©JA×4@<Ó1>í>£è~”ìçð  ;TdwïOZ%û™ïLÆ*AQ/#ùÔ¹Ç4Ž2A¦T‡îÔFuë›nѶ¼©p.¡B:«°#òlŒÔ¯qªÿhê ö$óÕs—å 3ÎqÉ<ñZšöŽÚŒe»¬7ˆ¥B£ §ªŸnÿZĶkén¥[íQ,îä‹Éhe„.Fx*s†úŠæ’q•nŒáR›–—ë{ß§nš[Ü<š=±Ô5p‹$qGæQ×ŸÆ¡Ö I¦j©zú̶ÞXò Œªœ.Nî=zæ·.¬î,!¶0x,l-â ÈÑ+ç÷75ZñF®%µ±Ôo/̃œ0[uûÌ£Ÿ 9©qÒݯ3ZucΪ-¯{릷Õò¥˜ý>hõ?Ú˜—>ÅU÷^@?+ªµŸ¤iQiBÞ2Xõwn¬ÝÍh/Ýö®ŠqåZžF*¤g?se¢þ½n?½%'QKÖ¬æJ)JZNÿZ(éJ=è¤þ*Ri)€§ô úR÷Í0ŒÐ±ëERËJ”É÷«–þ¢›*ƒúÒD|´Úæ±ÊhŸ©þTŒ¿ýz†6#éÚ§Ü Z,n£‘ÇOâ>ÕÎç÷Å}«­k´n…¾éïX†™5”û¾òžwm§9'¸Èq€OAÚ¥?9>ƒœUHݰ§×ymçŒe“jŸZÒä¥vþ•\íV&Mùúb«7­$ÀA¹ñàÕøcùÕÞbüY­yER>aŒšmØHI }i œ·Z˜Åòü¼’zþ4‡ÇZ¤1‹Ô1Mšm‡œƒúR7 OµW’LüÇð¤Ý€©/}Ínxlÿ£ÉþÿéŠÅh÷oð®’ʶ·WÓ,}Mc=ŠŽæ‰êséL+Æhóóž˜ëA`ýÖ²ÐÐUñ«ç«oQÐÓãaÐþ”ôb&—3Þ©vV ®Â¤õj#Ê ôê T ²…ÉP…˜àw5™®AaªDåÛh8bcTõÒ_e¸<±Ï¾Ÿ m2¦O­äô‰;ž»¥Þ€¢uñûÅÛRÜKmi“…F aÛøvÆöÉòÜú1"¨ßøvæÒä,Iû”˜Ð¹Q¸wúІä¾%s«žVØÎ–CYžCjRŸß\ȸÎ?…}…t:‡,´Ï™SÌœòÒÉË~•þ$Õ¢ZϦ(š1Ðerz}§Š¯ÝÈ])Üÿ³ž´*ƒ×rcÊÙÜÆ€Ú¦ÈwZ—•ÒeAÇIþtÖÔõƒòýŠóq=˜CÄ;û°oî5çG\Æ™ëúW,—:³œ¾xTœǃZaçâX/àoöŸ#óÕZì~#RLØÆ_XÙÆ“;O¿8©"±T3O“þÙ¨Í÷’.§üÅæ{Âÿ1 QðGåVՔ޵ž,ßxj”޽¨—Oº•øÔ" Q¸þ4sÔ_gñ@hMîF_ó¬Ýiµî«"9ŸAŸÛzÅûæÛKÚ½Œ™Çô©ü$Ò¾ Áô?ãVá× Î&aÇQÈ­5 [‡&\÷Ϫ²ûoòWêcýƒ]p|Û¶aè§]íî ®ð€>cæñŠër§…*GµC‚È=ªž=˜ù ]&ÎÊî9¼2´‡ƒZ¢Îˆ)êiðøÛ*¯\Iž+hSQ^e%`´ÕÀëÅ)#ð­.0Ï4´ŸZ  ž1LÍ!<â”s@ GÒqº†àR¨ãÞ€$ž´½©;ÓÅ'ñS©;Ò29¥ ýê;PÍ<ò)ƒÖ”Byô¥^”ÇÆO·4àqÅH)[‘MÏ4áLG'P?:† 9iüSæ¤ÃŒÐɦKo ÊysF’/÷X*J\Æ‚“kTfÉáÝßsi–¤XÁ£1ÃŽ$Š0ª >—µ%¶EN¬æ­)7óÞàúÒ¸¥™˜ïòh¦½Nþ*){}i)Ev¢Ž´ŸÃGJ( íIýh¥í@jgzwµ'ñPŸºgî÷¨ÙGNõeþ)Œ¹ úuü+róŒzT»°½FÃøQr=úR$Õ·A€{šŽä{Ò[Mòzô¨oîÖÞFæ?u{Ñbº'šÞ؅‡làëŠÏžy'˹Î;v¨äß$ÆfåûúS™Nÿ<ÕXÉ»ì40#=ªcßÓ¥MxMÇ¿jI2îô-ÛD+ãQÏ\w«Ð1uÏpzû ¨TðM1š™¸Å^£ò4N=ÿSó'𩙉Œ“Ó¨¬é$i$ÁnªUiIZ Ë»’ÜtÓò1ÓÖ£Á sÓòž¿•ji¶<½p ©)87¬¤“Ûhñ§ï[©+ØT²Â±£p$Õæ‘bŒ³2€I5©jiÊD6ÅüGÖ’ÃBNíåb¬úƒÈä@ì‘ôSëN±™¾×‡%XU%B‡qägíZšU¹ûW›•3ƒØ“[K IGc596kˆ¯ÓéOã¾ 8œ“ÀïT§ÔÁq°ó×øEr<=.Ƽ̰Ðïw¨îZ+k1Îè=i¨$#sHÛÏ>¡¸°k—Všv`?‡n8ªú¼-¤EÌÌëxžòᮜ|ª~\Ô³‡Ö´UD>èFãïãÞµXemD¹F“ªK¤@mÂŒc¾$ÕÐ!š/–xe ¤Τ³‚(ôòíR£$þ—$PË?ýݽÍyõ刡S•JéiÞ%k‰[Ähem°4_ss[^Ô “6¯²˜øeé»Åqé$šF£%¼…¶çF^ƶ›M–P.U?T‘zÒŽ"¥)óJ7ówÕù %W'{çµrvZµÚ7‘+²È½èElÁªaÇø…uÓÌ©IÚZê¼TЏªÐÞÛ˯S‰Pžkºa-bÀôªÍ÷¿X$b«Á«¸Þ>†Ÿ84Š0z÷¨®r#Þ½EL¥ep&¬Í[JQ€ñóö«¶ó‰F?ˆu«"£Ý«!5}æ--Æ‘9‰‚¼$üÈËò·øè4É-oã-aröÒ½mÀ~•£­hñÞ#2…Üy*{ÿõ뇞ÎëN¸,›×iá‡ÞZâq•'ªº2iÅùt–3MŪÌY àþUØ-–Vé¶A†¢Ò¥6QøVÎjÇó­•$÷wQƒN4nöãÚ›æ/Z»Æ:¦˜Ä~44‹Ž*<óTš{rMI äS…0 dæž);f€i€´P)x¤QE†Š Þôv§Rc"€!n¦ŒàSØTZ“5KT×tÝÓí:ìV±t )ÆHôIúUÕá?/fþÒÓ-þaÂΧ±bØ?Ê€=ƒBñv‰âƒ1Ñï–çÈÇš2•Îq÷€ô­Äûµâÿ¯mމ©Zyh·I0‘Ûø™Hã>Àƒ^ά:w  ³Q¶++]ñ>“á«D¹Õî–Ú)b6Æl¶3Øf‘â]Äp´F µ_¾#o™sê#ò f¸_=QÿÏcYºF³>žÿb˜°LásØæº !k+RÒ¾×—A‰@üÅfèµ±“n÷GD|›øBΊ–Eìj[{XeAɶP2[†µ‹áëÄr-.×+nÕÔµŠ‚íÇ Ž5§*ŸS7ƒºº3åÒ1>}*ô¸¸ëõ­ß¸€’;úÔRc¨§,¾X;d-äùÃF߆jÔw?ñz½ޏëSyHG(¦šÂTÃ?À ±ÊîFjvÞS-5¬b~Få>¢¡’c?$™ö«µ‡Ä¯èÆS% ›iàƒEh[]‰‡þuŸyæ‘ó&Hî=*¼7jH Á÷®EYR—â#jcU´WJŠÃ=é«rŽÚ«pšôá8ÔW@gMám2˜FÈ眫QEeu£ñ+ÁÔ…®€TLÀäÜR£ÖŒžUº*Û_ÅqÀ8nêjI9¨¦¶†WÉoï cßj²ÛOöXÚ%<UúÑÎà½ð½–¦©x£ËÊU@êÇŠ®Ú³Î|­>6™¿ç¡áER·Ò®.\K¨ÌÏénô­ØaŽ$ UGaKÞŸ’üCVKñï9l|ÇÞ¥ÑNºE —î®2jiÎF£4"ÓÀÇÖQ@ Ú’á zPZ ÀÍÔ†€GñP(  ÑGjJZ( \7Ä_Ýø*ÖÒêH. šCY— Œöõë]ÙªWö6š…¤¶×ÐEqm ÃÅ*†R=ó@áŠúo‰/E…ÜÙ÷oþ«t’O`xÁúÕ>¯‡bÕâ f°'~9ýÛuüŽ gø‹àŒrÜG'†nÖÚÏÁ,±‚z¡ëcù×£Yø~+O G Ï3ÜĶÞCÉ'Þ`GZ`xÁÝTé~<ŠÝøKÈÚþ÷Qü«ã]þ»§xŠÒ[{ë¨,äˆyB)0ûÝ1Íp¥ðß!—îÉcv|¸?+…{ÆÛY/¼iwoÈ‘N®Î%U”óžÂŽ yXñ?ˆáòõ[¨5m.ã9†âe’H˜ïCèzVo…|I}áC¨é£t‡ähŽH•Ièk¸øOá¿ êð\M®@w €F³Ü…I²pN=ó^•eð¯ÃV~+_Z£©S¾;e#ÉW?Ä8ý3ŠÚð‡ôZƒe:­Ú¦fµfùãÿï]`éXúNƒ¤èòLúvŸoj÷t­,sÜÖ°ý)ìRŸ»@¤=(‰ñGà øªá®o-Z¶ûÓÛ¾Ço¯P^Qâƒ:·†µKMG×Éq<¥¸!7Ï?tŒ÷⾈ëLš%–ˆôqÛ­;áY|C&”£Äv–ö×i…DÞfàSÆöÖþi‘©úë\¯ŽòŽâ»pô¡J<¨ÎMÉÜŠÆå%¸0·”õé[öSÞÛ>Sç^¸<×3k ‰uö€™rÃë],«¤e­¶bEÛu$AÌm ƒÛr1Xñó©"’²!` ^>Rjþ§,W s‰G ÃÐÔúŒâá®ÔŒ`(÷¥(¯‰¯'cBÑÐt« cytÅÛVKã=F+“‘›ò³<œ!¬+Ù‹Ýýš#ÉÆOÖº{‹R‰ÏNõÌi©ÛdšâEU˜“êMcQZÉõ™+¡;}RÏÚfÚîò}M?SÔÑóª6‘¿ø±PYè—÷hýÜ}@'“Ý¡¨¹[.}ºÖ߆‘sè9§Eq%Ìlm%™¸ä®­m3–‘a§ýãŽÝ¶o;kQml=B®8ªp©kËBÕ4µf%ž—}æ6D…½«m¢©!§™¦cIć59‘¸Ã·J˜áéËYÝú²ÓH­.‘jJŠ£ã­hA¤aTmŒTóÉçµYˆä`WbI+![[¨Êüµ!äÒ☥Zj€zÔ®;ÔYÁö Í•Þ™Ž~IOÝqÓ>õ¯aìtnø¨çSÛÆ{ÑRn ˜è-D¸¦ª¶ó«ðxjµž+HMI]„âªHÙ~)ÓKLU/Ïæj€tc5ZëKŽ@]Ðw­@:N²©F5,ÃÁƒ·{)¬A=Õ··'nõ¡=²\xoïµDÆð6ÖüµyU0²¢ïo@.®«ûØØ{Š«s~±È. “#þZFx$\€G$`§=3Yº¾‹Ź"G‡fXãšÝ,W"wOð`ö­À-Á¶uyœarAªZ€ËHYùi$åù®vkI­$ƒà°Ü¬µ©oy¬” ’;¨ë•ÍOÖ9¥ûÄÑ•îõ:ì¯Èê ø q²ÔPe/²}k*CU8Q´ŸB˜«±Í­9ˉGrV¶Jrøoø•tn[,‘«4›Üu`¸«"±‘ubß4Ñ(úV” (<Û²]p“}Iޏè)#çþ”™Åh1ô0´gš¢›šp怃֒ƒÖ€½%74f€š=©¹£4ìÑM"@ >õã?þ,-¥Åöƒ¦ÆÁã&)®wàäu Ë&½˜óXÞðõíì—wZ-„÷2¼²@¬ÇŽôÆyv™ñÒÒÚÆn4§gE Ls¯ q[üqðô‘îšÊö6î£kÏ"»ðG…ˆÚ|=¦àÿÓ²ÿ…:ø^Ý÷ài¨ÝˆM>dñ–©e¬ø’ûQÓ‘– ‡(—ƒ3Ó=ëÅž04дÆ9Íü[RPÜ,®T.‚sÏs]Ư ZÙ]Xj66‘[Å(hdÆn‚qÇJóHJ@E#Ø;A §óoŒþ!øÏÄZ”ºE•­ÖÊPZÛ#yíŽÌßÀq_JãŠçüQâ­ÁÖ?mÕ&ØdÈŠ4MÏ+Ðõø¦1ð¯Âzö…a%÷ˆ5+©nn‘BZK38G®‹éÒ³>*èÚM÷‹|3>²’µœÂ[gTr¤¶\Ç?Xð_Å}GÆëZAáiÅ€l5ÔRnòAþþ@—5sã—Ú|+gr³i¨C)p3µrA'Ð õ4Å®ƒð¬@·:}Ò mß./db’êÀãŸOzÖÔu†úŽƒ¶Ÿ>Ÿewm\Á>¤zšæçðO„uÉnõC¨\XÛ X°…•‘†~úätíõ«OÂßÉâ‚]Vk«µYb&eFÜN19 Pð‡Œ4ÝNÚ;!< 4yJü©&ÓŽ;gé×µy·Çä¾—\Ðc´ó^F†B±C’ù 9À­«èÚ¾±sᔬì2&‰Ûl N¿f'¯?ZÖøðãPðö·>¯®êŸÚ7‹‘jÅÙ¼´=O=ûP‡ÂkOZx:?øHæ¦y @—2Å`ÄœûÚ»ÑÒ˜8”v óšݤ¥Í0ýêwðÓ[Öœh~õ™p¹|޽Ei¿zȾ¸XÁaóc ´’&v¶¥ˆ&ò°ƒQ]J\œt=ê„RK+†sÔñWDeÏ=éÙ#¶ö3%9öª’€×µ^¹ýÑ$ÖT›å$×+ãîCâcŒ:±öÃÌpOâkjÞ "úV]¸}h}¥-Ðç=u£KÙGÍîLÉXqÒ – fú ʿԮö/îÔö^¿%†¦c“ʸv)ÀY8ú×JL›¡÷iKrHïÀ>µ¹¡¬¤}EG0]áBã…oi`å0oaÌ›‰ÆJêt5QÈÀÍdÍhe‘¡ý+_L­ˆQÐÿ*§ð—JüÇG]P1Xí¨En€[øPrMV¹Ö•tÓìOùçßǹ®*˜ˆÅò­_õ¹Ût·,ê÷qÄ @3HÝ<®2Iî-§ÙåAþ?ýjÚÿ„I·…Ÿy猚Ìÿ„Š É™ †VW ŒñœW%gι¤þKüÌäâú‰b¯hï4Z{ooº @«ÿÚVà¼ÖL3Ô—R}NX‰ýÎÉLœ•ÍeÍ+Êùwgç5¾ŒšæØÎUtGYmâ4–@‹k+6?‡žFú¸šFÒ€qÔzUo @džY±…Dòð}M]¸Èž@Ê:Vµ`×PR”£vWóNÿ¸ÃëI6©mhBÍ'Í×häã—¨ê¾T›-ö—ÎAX’n’BÄäïÉcß50‡rí±ÕA¬Ásp"]Ë»îkfÅpä]l ¾¹®æ bç®9ïW%b¡;îZ'¨¦õþtÍÙ¥ ”Çz–Ëý@càÕŽ´ÂFpERw%¢¸:ÝŒRôê( AÏz:9=*®-ŽŽ0ý2቎ýfé÷¢<£¾µh4™*šRVgDeÌŒòJ‚*e¾lmnW×½HЉzõìj¹·xø#è{WŸ(NŒ¯Š-.$Á+WpfÀLg+Ó¸­—a]t«©ï¸*È?Z•JãyÀZÜùê©íLÜÏÉàSD œãŸ {ߓӚ’nÉ`î…NágÔô#ñ¥e<ŽÔ‘NÅ­Å‹^ÕÓçŒîCëëùÖ†ŠÑJ6–eGqZWö?iŒHŸë§½`§™ÿh‹†Cóóë^tâéO]Œ¶gDÖо7F§Þ™ö0Ÿê¤uöÎEKÉsn²¯C×ØÔ½«³ÙS—½cTU r#|ƒR äN^ý–¥èiòƒµ?dÖҘȅÌDýü{)唌‚¸õ§4i"a‚Ÿ¯5^Kw_¹·=pqRý²ÚÏðÿ0×Ö±4è?àUÕìäÝ'ýõUo4˜’9•A$0ÏJÀ°»€Îþ}¤L­¤•Ïñ®³ãMFþækH­´˜cTŒ.I2ýã׊ϸøáë½r[énïÌ2H]­Œƒ'çÆqþs^“¦é–š]ŒVvVéomÂÆƒ )Ë|LÒ?µüv n’'Aî½L×’ü:°ƒ\‡^ðíÉÚ/-ƒ#UYO ødWÐz•¿Ÿcqï—¡È5óçÃ{yâP±DCmôë^ÑŠ1Ò‹Íx;Á¶ÒžÒÑÞiemóÜÍ÷æo§a]­<ÓO\R(§ShàÒÓ)ÀБŠ^? Ze09Z÷ìÐaÖ? +§(h Ð »ªƒ%Ø$åTqõªðÇϵ+Øå©&ݺÛ¯i¤H£%¸¨—g ›ypg“j¹1X…N7ëИÆì¯w#\IÏcÅ*ÃÁQ×ÖœTB€ÆLà㚺-€1Ãw¬°Øi/ÞKv•ôE(׫y†K¹7Ê3è+U¢AžsY•ä‘×€[œûWRV܉lA?3{UfPÁüjÓÏ|TjÓ$»¥ëÁ<‰ÿÔõ Ô‚k¡FÊr ýkˆlôëZzN¦ÖçÉ~c$mÏcD¤–¡Ðì …C†%qÔæž÷xÊÀT/C#tü+:ßÓ«ž±úÖ>µª™OÙ­Î# ÿÿZ²çUe¤ø©¨“\øª ) ÛîžLüòÅPÉ{2yöɳ•ëX“@ tj(óælîs[Fœ-Ê‘›¨ÛÔé$û$òFJ~ë9ÀnNk¡Ûm§YGp¡ßî(ÿ=«›Ð¬<ÐgÀê>™­MR$‹ÊÚíÆp7TýZæ'dÙVYZGÉ,Xõ'“L$z´à¹#ûÇšÝÒ´€fY®xî î=kh¢Rrf߇¬šÚÄVÝ!ÜAì1U|V~Éh%WÃÉòÖü2 kžñ”Ö烙ûÒ¡ù0zf¢ZrIBÈá·(ùäÓ›§j¯/ÉéZÚ~˜×`3ñ=;°¬î–¬åJâiVfæt˜î'Cýã]lsJ€Mª0 `cÒ­!"±rmšÅYŠSÛÖ›žô)È÷¦Ùcëž´½@œ{UE<óM'Š{ŒþžXÆ}*É)ÊOnÕµ¥Îg·Ã}å8¬¹’5µmÙá ß½TK¤µ. àT  b ³VUÄòÔ‹CV•ÈÜYKa?ŒyÊ=tšeỀnâA÷«žŒ­.I­B/£4?†šE;?¥-v–FzR qS3Ú€(4-Ö¥ ŒÐDÒc §ÐSÂü¢ O NÇB¹®[ÿôßk—úºšæåÎÂÝ!Bs´~=ë¬ú`E ¨ˆýjÁ¨OZC#þ/åRÖ™‚MHSRu§ƒ@zUI,íåœLÐDÒ¯Ýr€°üjãTxæ€1NxÓ‹Þœ(Ù¥¤¥ ½Q@ F)i(´ïéMÅ:€åE'AKü4Ààæ‹(=iŠ¡ëV[ç$~UVV#;~‚³“êÎ2µåÞÅ<ž´iÖâyNª“b,¼§§'éT"×<‰ÃÄŒ0yÜØÍsPÃÊ¥OkS䄿–†Ì -ïîwÁ\Õ§ùÎQ´?hžK¬cwµ¡ÉÍuNJöB[#ÊsߌW90kC$-ÎÒ}º×K4ñD0ãíXz²™ã3lee}Esmµ´j_t…±Uä=ªIOîê¹äý+A ’ž2Ž2§¨ª©fö bÜÑîhªÔà`b³%=z‰¡2¾Ÿ¥H9¨ãËá~ïaéR¥RºÅB>ÿÖ¦n•9ªôQE (¢€ )Ã¥– Í!§½34 zSê*2hö¨ÈÉ¥Í N4I“íNašhJ}8SE8R)ž¾ÔóL=(¸È¥(æüè½þ´ìñLïOhh”´”´RPM§Syï@µ;øi¸§gŒÓ„-‚j' gœ3Ÿ¥:pQÎxÍBáeÐô#•Ž&`_N×nqÂ/ÝÖ³Ù¤W¶s[òi²t»}{â¤0GmH†e=ûÒ©Z4ãÌö3Qm’A¶ÚÝTŸ”}ÍN-ÇåJl[ÎeëéWHØ0=¿*óŸ=wyiÄÙZ;F¨‡qÜÖ.§vnÝ‘?ÕƒùÔ·s¼“¼Jp€àŸz¢ß|úWU:qŠ´QœÅ‚@Ú'!ßâ¡lèp*[hò†FüéËß|Ÿy+B·ÍúŸÒ£Ýæ1üš™†ùúp)ÖVos2¢£žHôï[h‘{J²ûMÆöû°àýÞ¤ÖÜÛÉÚ~½jQpF"DÀ`RƦI3Ž+Š\·ºÐÙ++°r@©£`~éÏÒ‰×ÐRyjøÈüj©ó½V¤» çúÔÃǵ4DÝVFüy¢O4q³øUº²[ÅþaÊIœf¢“×¥2YY0ZãšæüKâ ´¸ã6Ó[î~<©TïúŠP©¾[ê6¬®t›± ÏCifž!ÌÓ"(êY€¯1ojW®eÇ÷bPƒŸÖm{d\5Ý­íÉ^~øï]^ËÌžs¿oéÉ ŠâN›`B߯Jž ÝFäî[·ˆÿÏócè+Ÿ±ñ>mX´»ˆwTµ ñn˜ãæûBw9„ÿLÖR§Ù Jû³[lÀeçù³ÿ,ÀãSÞá‰bz}êÏW°Ÿ˜®ç‘œçW!™HÊ•aê9¨³[•§Bêqî•H§Ÿ¥A'>µmWä½"‰bõ=ªO¿õ¢Öw$Œ(<Õô…FHÖ‘Í#ÈVÙ@ëM?!ã¥\ôýjÒB£©â­è´5JÅY/Ìå'ÝO­@Åä8ˆ¡m$ë¥j(·Ž åMqÊ“¼Ý…fÊ[™=kV1ÀªPÜF\€waZ3¿l ÒŸ³_£JÄØšHÅ)sɨۡÅtkØd7„Ï¥r%·k‹(P²‚#]=ÛgU¸µ’&Úê)KfLÕÕ‹Z}ÌfÝ!û²"€Ñ·qW¹ë¹¬®íâåþÒŠ<\:‘PGy®E'‡tóÙF_ëþ‡Öa´u~@›KS¡Ä.$rê8³Æ1š¯s«ÙFà™7ç ¥»VzivZ¦.EÛÍ*ôcØèjUšæÈl™ …z,Ë(~¸û´'Z]’ûØ›)¾­÷ÿi1ü± ±r ÔÕ…×`'k](#ªÅ1þU|®¨@òä³`yÉVÖ‘bÔ¸ó>Æ}»R¤ïyI†£ Õa» ã{˜Zµ!›ÍòÝsýåÅVˆKÿ- ÿuMZZÙ"Õû ÈÍDcÁÊœT™¦šÜc2ÀóϽqéÒF:SJÀ7ýdu5:ä;ŽÇš<¿Ÿ>´ÀP0*JhéN AKÞ’ŠVéQsš—µG@ (ÅÓÍá¦Ó6€ Ðh ô 4œTLǧz=hj)Øâšh¢Ž”PE PzPÑMïJ(§€)1@ ¢ƒÅ”´”f€š3MíF(ù£4ÌQ@‡ÒSy¢€GlShÍrÐI^£‘Y°ÂÄçÓµmÎ2ÄÖvpù鎵QW0©U™!TûÜóØ ŠÞÝÒO9Îç«'—oÒ¬DµÏZ’”“} “ ¼d~4ɱå—ì5cc֪˓ ‹ž<þ@9ÂG™#uÜIV`z^*Ã(ö¨d¾ïÒ¥Íß–;‘nä ryüNŒ  òqôª³1óÕ4 ÔŸÄÖЇ*± ܈ Fï]6bÖÑ™_‚øÛô¬Ë4ùÒü±ƒÞµ.u«XóñŒ(ÍM芖¬²ÜÉíV`\!=k6Êþ ³ˆË•<V´_êÆ+dތכ±ñä‘éÞˆµM7Å·­tÆ**ÈÍê<SÐPÑ„'<š’ÜæBO§0äŒu¨©tZEfŒ`þŸZËÔ4[Oä¾µŠpÊYrTû¢¶pÿËð¦mßózÖiµ¨Ú8‹¿ rúuܰ6xIxŸãLö‡ÿö+wj¸Ì°z?ÌWY5(ˆç§ÖFnJ]™Îi:ö“ª€°H«!Å' ŸäkmmÒA…NG¥PÔ<#§jï¹ ògvh~VÏò?W±²ñ/†&ù£þ×Ó‡R¿ë£_§֫җ¬Ræêm6p€Æ7îž´ØlÞBGÝaÕ;×A§j6Z¥—hùÀùã<:ŸB;T²IŸ™Y~ëµ.›‡Ã÷*qz‰k¦ä‚ÇJÔŽÆ$Œâ ³”¦o•ÏÝ#£ Ñ­ ã-‹PH€€œÀ¦fŸ ¦²Åý*á¹R<2¬‚#µQ݇«¶riM£—©h.ÕVç$ã €GZXI¬[íR;a,@ì9ÅqVoEÙQ²Wf[7ÉóuPùÀçÖµ¾Íâ$¸Îy⥇L¶ŽBÂ>s‘žÕ¬  ¬fõ2­­YÉòùaÔÕïì ¼ÎÛø&¶à ã·Õ ÉV‰‡)FêoôuNÐÙÜ}½+u%öŽjܸˆ9ÝÛ§Z­¨X˜!ó•÷+¡¢%™Ê^7¥•×î‘ZÖž!™#Ešm¸Ë‚k*3ò§| `tïZr§¸”š:+mj ù 2?enâ´â¸,–òC‡B9®»OÔå’LFÓчn*eµwÜÕ…¾¯Jzç°ª)pO¥MöèãûÍžc7ÍbË Ïìi#’;u«–òCšvJÞaküEËm>ÚL*¸ã;y©å³R7ÄvIŽ£½InÊà0lƒÐúÕ¼gµk4ª/{SD’Øòßùéâx[vo^4;@9úóZK­x.г#ûª3 ëµ­"-cMšÊ^‘ºíaÐþæãÃGCÔÒ b=ÖÒð—}Üþ=)|+ÞÔÂQqwGeaâï ¦SE÷„¯ô®Š _N½À·½‚CýÐã5ÊÛø3FœäI/8ÊR\|;°õËA8<þ”á8É^¯hºÀñÓµIlÙÁÜè~"Ñ?ãÃPiâ^Dg‘ùÑÓµíR'Ù¥»c«À§§Óÿ¯Ut5S¤•Žåy¦ÈŠy#‘ÐÕ[FÚì ŽÊç’ù¼zSE§}ŽÄ^»þÔ}JÀy‚@<è·c‘Ü{Õ½"òþ(ÄWpKåôË!Ü+¬aÁ¨Ç>µ“§­Ó±>Í't2„Nô««Èª«ÇãV£­±cÅ¥ŒâƒÀ5@P¹´Ší ÍH¾Œ¹®rã‘Å!¸°‘í¦#æÊ×V<JsŽFjáRPÙ“*q–ç9 ýå¦Q…±ÓÍ^A­x$Ihß+ê*ibW¯‚*ˆÓ9<ëWhº¸ ŒµÙŠÒŽ›š1ŽyëSÕ {¶ßäÝ'“0éýÖú¾>íCMnRw陿žMEH¡ôðsLt4ó÷hbœA šCÈ¡þí $phÔQEQEQEQEH:QQƒO4) )4ÌÐ1¥ ÒPFhéÅ!ãê)2)hÔÓ÷¨¢€ (¢€ÔPÔª8 Ÿž)´P § m:…&9Å;4Êss8@äœÞ°¯Èû»ú ½}+d¨éüë;¾ãÚ‰hŽz“¸‘)$àÕ¹å&8â“üª%ÄiæŽ8÷¥Üøß±‹Æx¯34ß"ëùÔÅ»³’)Ù”1F<ÏZmµ„’MÑ‘GRÜÔ?h/ÕƤ†ÖIg$ÌØö§ÒÚ1d¸ 1¬hx PË(Ø0jií£òXŸvª@mÆHæ·µ}ÞK²[=xî* ƒ½•ç‘VhzÊ ž$ù0*ÿz»~$è-©"r¤õ9;ðr£‘B˜ß…þíZFcÉE«N·K~"´FFÈæ*i"drë–¡ÕÛ…É¢0»ñ…È¢Õû¯Ä~èíчÆzÓ¤‘7õê:T²"`p¹Å ó0BãŒåWºüJI20éžO¡šõA1&ìž½«ObÆ6áyªwòɿɖãžsÅd•F÷_qMXÁšYüÔ¸à•éN„Ò 4ÌÀ l~•~[rä ËÜ`š[-&7|l‚lô‚æ(–ov$ÈìÊàùìZÐɦœfsÛ ¸¥ðžd7Vý·Fû–†ðÓ”gÔ¯ûJ¹'‡Šzîl¹—CZÞâÄ Tx”Ý:RÈTä¡R?Þ¬I4[èœþúúäUgŠæ.£ŸöMR‹è‡ÎÖèßmA­Žð:泯/ÍÌ™þàVf.¤~7œv#5n y£pΙ>ù®˜N4×¼C”¥¢ØšÞÙ¤pHÅmÛÄ"ØàûÕhF #/¹éV™×fïšÊ­w2á‡dʪOþ•0cž{ ”(pJç5 °¸06ÖÿVC[Ѱq\ü‘c w«º}ÁÝä1ÿv»0µ¬ù%ò6TSo,`½·’ ˆÕãq‚ J)õè”q‘´þ¸K]E|ý1Ž!ºÇ1g³{WL7 ÊTŒ®~`i× ñ´R¢º7 ¬2¬_°_hç~›ºæÓ?=¤‡æQþÁþ†¡Ó‹wÙ’¯B[Ùæt ŒýåäRÛÝÀHËàžÇŠ_í [ô>Cüêpñ0Úê}Á©!U'§¿Ý¬ýUðËï_äUÓ4¢h¤%Ó¡©ûqPG Dݯ·ãk謿î’*¯UtOçÿvÇ«¿JlÖ“Œ˜®œ{75NO·Ç×dƒò5“¯(üP-@¸§šµâ² ãÆ?{ :‘Ò¡ÿ„§KÊKsµÇ5qÄS“µõint ÷,Ÿv¹ïøLtrNÙœý#5ž-ÓÉý©Aî!5¯2'ž=Íæˆ9É-JŽùõƒ¹m;…ˆÏŸCVµ¼†B>ö=Æ)§r”“زh ƒ‘A¥¦1²ÁÄe%Eeô5T´Ö{tÖã£QW¥ÅR—FKTF²¬¨ ²ž„RóÖuͥœµÅ‡ òк~žôë=VÞðíl£ïDÜ0ÅSƒ·4v%O[HÑžEF%fh2‚iÏM ¦=©T碖EÏ=é7Àë@QEQO#ŠOá ÑEQEà8¦ÑN€N¥"™@¤Å-vÍ!¥b€;ÒZ=éh¢ŠJZ(¢€QÚ–€ (¢€ vi´vÍbE1EÀÞÝj£ Èè*ÜÇ‚{úÕpGo­*‡wZ<€Ï€¿Îž×‘÷úqHÍúTmëúW²•Û¾þ_ðGÌjw¯­[¶ 9 ç²÷ò3÷sйn¨äñ‚Fxâ•§w »—\çXSÜ:Hsϧҵî"“y*ù†²g†T<¦qé]tªÙ{ÈÊK±b+åœSÁcøV1•‘óœzнm(p9ù†sZ7¯r{3j%CŽž•!%oä{TP:ˆG§­L(sÈÏJªnå2´ØÙïž½*2¿9ÁÀ<Ò\Fwíô#ŸzvÌFAç#§p)Ni Hz¶ý‡°ÁÔÕæéŸAY©Ÿ0¬‰ öàW äkÁa¸Lf$óÓÓÚsùÔRËóä~téê6C(_3¢´4¨“qƒÀªQ(‘À?lÙ§–ñ‘üU×rVçGn¼Š'³IP*¿¯­I*¶¡¨}˜`îî(íMÓU=ÖŽÇ%vsúÌïo?Áw`VtQ4§‘Áë] ¶Š›ÍÍ÷ïîŸ$ç3I6žˆI‹åõ¥a:N’µ=LùÙVÚÕPZ²Ñàãþª–y@Î3î)fVÚv¦dQÒ¼é©7ï#D¬W#`ÍWÜ$.v`ŒúÒÃÓæYK0nƒ¢Šž7<1ÀéÅZ£'² ÈTø“Øu­ {Ÿ¨Uó«VöÉùG=Ïz»1ÅtC¾Ðìf¾–ç§þ;TÅ‹Å8ç$r? èJΙyšÛê´ú‹vìJ ®¥JǃY·:¦™w:C«7_§­rW¿g»œÛhZSÝpíŸä+² ÍhLªF;³±2|ù«1`ŠóÔŸÇ7d1†ÂÔ¹aüë^ÆËÆDþ÷Q°UëŸ$·øUº6ÞHJ§dÍZÆ €Žé‰åd_•Çâ* H®"2ÌŸí 6>£ƒùReë$u­+•9)²¨#ñÍ]··&=ÅòGN+&’ÙÜ¥®¶±v.•0ªñ0éÞ¬•% j¥3'5y‡BæÞ´_ÎZ¥{ YêryÒ£$¸ûëßµr8[9Ç~˜ š‡%fE›Ñœ´V?Ù»MÖçîΊ>_­kÜibæÑÐO¾)ƒí[M¢ óóO—ƒ@ 9§M^ I@ IÒœj3÷¨¢Š RšZp¥¦S³@ i‡ÐSé‡ïP!ÔÚu mfŒPE:ŒPi(4@ @£ïâ Ch Ñ@ŠJZ(¢Šê:Ñ@ŽáÏÝOZHÖ'$š˜ç‰;œÏ9ìj æ)%»R´è 2“€1šÊiZæ|t¥fЛ%ˆ´¤“ëÖ¶­ÂÅÇ\rk:uôý+B_“È<šÉ”…Eó2Ç­U•¹ô`wáiWkäzV°l™jaÜÛ©'#¯j©F7ÄzžÕµ<^dá{åM0¨\Ó öª”bÝÞäꈭîL!ùGpkVÜð8Íc,k“‘‘ý+JØI{‡ÎÇp+9Jt¾-Wuú¡¥räÈ ã¿Z‰—$úúT¨Âw §9íéR¼ qÏÿ^¹jU¾©šò”¢Ç©)’}üôÀÉ5nuØI5MÉ(p9Îäå¡V±(~2;TMó¹ô¢Hç5hD3ìkz+R£ ]Œ oÙ¯›2:ƒY^Iê:Ö”7KeçÝ•äù¯JœX-Í+ëõ²jüÓ0Â(ëšnŸdÐf{ƒºáúŸ@j¦“ \Hu+®]¾à=UÛÛÀ˜±ÆqéUV¢¦¬Ÿ©Ñ}çò-Îj¤’&3Ïz¬.å9çŒçÔS%ÐüÍs©§±\ýhG©©!‡ÊÞÌw3–ö¦Äˇï±€J®TÝÊÜ¡wÓ#·J­ÃÚ¦žæ g0£î‘~ðªÈ#ô¦3IO$^•Z&© ÄqFÎΪª2I튠,•Áx—ÆqÚLÖHûUñ;w(ܪޞæ£×|Oy¬ÝB ûÏ•¥õÇ ÷­ øFÏCE™‡™|Sæ”ô쾂ºcS\Õ7è¿ÌÅÉÍÚy…¤ø>ÿUœ_ø–y[rÜ·?Ž8ØWm ­µ…ªCm CŒ*ªãdÕI¤ÏJ²©¹¤`¡±ŒÉíZ± F+:ÉÍhŒ„‘C$`=Î*8T§˜¯!õæŠL~ð˜Tu"šJ­?ú³VJÆS^/J¸*"«jcRû8:k •NJÈ2bª*îÂnÊæDsX0x–[`Y²–Õ†•T²ð­{}BÎÿ&Öâ)°2|¶ÕN”¡«BŒâödÙù±QÈ‘õéúšu8 4ÑE7oÏšx8íIKÓPfŠ9á1M²7OJãµ?¼w_nÑ.šÖps³$ÏÓØ×jÇ)QÖ”êÊ "PŒ·9;ŲÛÝ&¯Û5½ÏÝ…ù×Sä£Èx<är*;»+mBÜÃuH‡¨+\nµá­ON+{ ]ÝS“üàLõÕiB«ÓÝ-Ê ]3»¥®+þ0k¹–ËRF‚ï¦ãÂ1þ†»@sQR”©»H¨MM]êh8ëN¬Ë#8'ž¸ö£4q×½2€~íFqC1ëFß“‡­W1 yúÕšB¼æ€(ªµÈæØœ‘Þ?þµhÆAƒyS@æ¡PlßÍ»tÿ¦gü*þ/R>å! QPQÒ½ûÓ›¥40TƒÒ“ÒÐih¢€A”´R´´QEêi¢šM;4™â’†ûƒÞ œÒŒîÍ5zS‡ñE–€#?zŸÚ™ÞŸÚŒ¤´‚€šiÔ†€ âŠOóšQÞW+y›Èê§Tä rð­°ÿµUf‡çÇqI´ôG ‰›‘9µª¬ÖñüDgéTd_.E—°85jy1ïŸZM[rDža,NZ®ÛÉåï>‚³€)6G¦GÖ´#í=Ÿ’*[]€b2‹¿ãV !Я¥Tˆœ:Q »%njQfƒ  ŸJ¬ÊCƒþpjhä}84’ œŽyþ•¬DÊ×°f<廂 óŸ…iHÊ:újÊÔÕb)·¹ëZ©-™]Mx%_/¯'šlÒ’x5BÞC±{qS†É®9I9¶0õhn¤¾ª»ÃŒ`v5›,™6O-Òºƒ€øô5•¨C [gE1Kʽz*A=BäVRÜ"dY<Š¿~Hù®†ËT€&à§·zä¼}$²‹] NOô‹—ñׇõ­ð˜IÔš{!Tv‰ÄF¯¨]ypîwôœW¡h¾kxÃÊv¶8šµ¢hPhv1Z¨S(’AÁf5ÑC.½ ÍKÝ[N’ޝq¶vQ@8oSW»Ua"§>´x â²ŒTU‘­Ò+ßpj8\ž•ÝØ'žõ-«©#`¤™¬ŸvLCÅ<ž)”D~õ‡¥‚8¤0´RÅ-w¢€E R‘ƒI@1ÉLÓ½:‚21@z߆íusæãËœ}ÙúÕ]/RºÒ§~¯¸ âƒÈ#Ð×N£ ¨o,`½·h'MÈߘ­ãWÝäž«ò1•=y££,ði¹ W?gw>‡v¶ïºÙø‚sÛý“[ù¬çä\$¤RKPXÒ9Í8t¢“µ-Q@)zŒu‚@ˆ”y)9ŒŸ—Ú¥4q¶š8íØÓÜã÷M4ãð¤0S‘Ji£ŠwZ@{RšÁ ô Š)@ iÔÓN 4´Ö<ÒŠ3ób‘…ÇJFh&†ÒŠqf)ôRÐE úP;ÓéƒïT”צúûSÍ&(´”´PP;ÒúŠJáŒGÕZkLò+i­ð*” '^•)ks GCò0‘‘ŒãŸÆª,†sƒÖ¶.íC#ò¾8ªÑYGŒr;ŠŠ’±ÏÊî2+rø8ú}iÊ`Öµš¢qTï>Iøk8ÉÈn6=Áªá¹?¥9xÎq޵óqÓ­j®I§$ v«'>*³`Ÿ~3W€Èꆊ‡>aîqÁªwñ„ç·J¹+ys`޼UK’J>¦¢R¶ ÕʰLA Z8ã>£­fù³ŒUØ&<¾þµË^W*ÖDJwÎ~¿ÊV»±tn?ºÃ±£ù—rj}ºWRdZËŨ­µ×ÊC}1Ÿå]ìZ ¾°%»bÑÉœE,m†þuÁImöÉÎ&?_é^‡á{öŽ1¦] ’ǃ×5VJ-5£4¤õ³KPÑäj±´Ðê>xÿhWGmqÄK,2+¡èÊr(’ùV Tއ¥sZ…­Îp.l $'Óª“î?­sÊS£®ëñGWÂuŒ7¡µËHäNê¡¶Œ‚ßJ’jæI!k˜ÞÞ. eù‘¿ÙŠK{˜צiÆ­:¯G¯â sùR_pån /¾a€:-lù1§ÝE¨ùi’/þ•·!*ž¦6N]}ñŠÐ¶¶ Ãè*´QbbÍ×$Š¿€ –Þæ‘d—QÚZÉ<§ –o¹_ ÚIªêW> º —vXö?AÅGâûÉn^ÓGµÞÝ8/êëì-ã²±ŠÚ!„B¯á^šýÝ/9~F_ü—æCr>M@' `qR_’_Ž„sT7|ÕÌÇ)ZR{ÔFC×Ú‘[µ1ñšÉÞä®)î YÒ‰yÂ犪ÃŽÇš¿¤ ûC· Èª‹w¼•â–u¥­qZlRÒÆ}(¥¦†ÏAÇ­(`N-j¶së@ xéQSÖzTDàûT’Tl2 IŠDÎÀQN iÔ) P"µõ”…«ÛÜ&äoÌÅÓofÓ®ÓHÔq?ñí1é"áúŠè+;XÓ¢Ôì^xnªãª·­i }™mù(¿Š;—Ç#ùÒƒúV‰©Ì<Í>øæòÜrÝ¥^Í[òdÔÎ..Ìq—2¹1Ï¥¤^˜¥©(@A´:P(ÂIŠZ-4ÒÒ@“ÚÒ7Znîp~´ v{SCóLß@?N9¥¦+v¥'Ò€§R/ó§â€iE H # šQG_„û´Í( }ê;ÐÅ´† @¦ô P~õï ;ŠOâÍ->˜)ôQA¢€Fh¤ cé” ö¢2ã­fνjë·Z®üóI ™žaó6ô4Í‘M¸Ê\%\ò‰ÏUÒZ•`“¾œj©yÍÀ==*ÛBbžÇ­V¾Q„`xÏ5tâe"º†;Âõç?Jxˆ¤e—ïg¯Ö”¿SV¢ÁªnÎÂB@@é׊оL~@ǰävíVm›IíÆ)JvE$Er}ŸJ£#ävíSÞ6I?äÖzn'šóq5#U99üé$%õìE*Œ!í‘Ö†àp;чŸ6¢š%„ï;ˆãµA{ÐûŽK íþ1Qι“F8¯J*úé‘z±#Ø×]˜Ô"¯‰×…“¸Çô¬> MÍvºp‚Ü€6«7çEHÝ­t7¥Ö¥‹iäxvN›gNzûÓn Û/*Õ=ç—°9ûãî‘Ö¨yðÈ0û¾SNM- ïmàÆŸ8†m¤?&y jÍÍÞ#ËsÐÆÛNjYm£¹·(z0ùHìk"8.$½ò®Jî^¤ÿJçpKÝ’º{yyºØÐ×ÑÜÝov̿֔Þ\D1shàz?˜Uä;Ö¤7²I{‹¨ P2R7ƪ\hqÛN’êÐyñ¯Ê.b$¶;ýk/Åš^§hr][Í.%QsIÿëUSö’’®bÜ’mð¼£Uñ=öªÜÃò¡'üúWyæƒü«„ðþ‚ Ñ-‹£‰y„«í#?ýjèà…âà\ÏÙˆ5ÓV¯<Ú¶Ú Æ%Ë‚= ±Žy5žÇÔ³ÈÅðNqU˜°?β ;êYRhþP©&LgÀ«~@1ŠV]£$JÐÒWIô¨’.1øÕÛ|¹ö"œQpZ—8ÝKHG úRÕ›Žb˜xÎ)àfªêÐi–’\Ü>Ø£f  Y—g,Ã>”Ô:¯/¿øÕo î4ý÷P·GØóÄÐßÝú×C¤øö-b Óé—ºnFCM´~j%Rø†“gg“éMU ä×wnÚ™-cã+ÛWÇÝHò¨á²ñ­†Ï³kn«þ”dr?Þ^?Jjq–̱ۃNŽ•»Hð+L›$ n\ç¥â¨C‰Í6›¹_*J2Cã±´ð¤Ó@©4pi´ö¨ÏJ3Í&24¸ç>Ôt  -_M’â5¸¶;nà寷ãSiw©j²¯Êãåtî­ÜV£.GÏÞÂúEÿö”#6Ò·ý ·¾¹ý eî¾c£Šy¨¢pè‚2èA©sÅ`j2ž”c4 -©8 Ð1sIšm8ð(3ú÷ªòçoË÷»T’6jÏÒ0‰Ä‘†ˆï‘R­WȈïþá½­Y\àSaä(ÓÈ¥½ ;S¨}h¤g{S¨þ*hâŠÞ¢€)½éê)Z-!8£4Ó@€žh¤´á÷½©§ƒN)§Ö€Nõ¦Šu-Š(‡ïQE€ qN¦{P7(ïUä<ÕÙ׌Öl§ç¤•®cß"°õ«þYƒŽ†˜Š“õ«RíŽÌp¾ôJ H枌ȹ`½R¹_’5n‡­NÅe˜àôéMž2H'éM+2GOJ|3eÈôéU· œEM`äõÍ`䨉%ÀõʤoÝÀHûÌyúS„ ½GAJd?:ç«S¡¢EkŒ1úÔXz{ñzSbùÿ¥pT‡1iØnr»{RÇÇÒ“=zSÐïÀ;â¶ÃFÄÍÜDÆ}óH™¹©¦P0G¥:Øo{u¯Ržš™XѱbŒÊÛv¨ã×4èn%–`îyØT˜Ê$+Ðsš|`ð¼ó\Õfå.TtBéBw”NHâ’@:Ô |²)L ‚jÑ« ÓóEÈÁ&}îÜRÝZJI*Ï­:ÂØFžiûì?J¸Ê­9y£ï­ufuÚÏ ?Ä{ƒWÖ ­§^Çwú·;eZÙˆä:u¢œÛ¼^èiô&`®„0È=A¯-ñM´sø¦×I€»ÙÆÞl°¯;Iäãð¯O–d··’iN³Ø\oƒ¬ÞöúÿÄæ¹vXsýÜò¥uÒVN§m½YUÌÔM•’µ­Ê˜ñòØ fîøQymöyŒÖË…oõ‘v>ãÞ’Ì€÷zŠÃV¹œŸÊøÇ¥_‚Ñer°=¾´hñIŒdt¤ŽW¹IbdÚçqVÀÎ6ô¨pÇå_··ÃóÒ˜Ô[%¶ƒ=jÖ݆•pƒŸ´‘ÏZiXÙ+‘Å- àÐH{Ó(F“˯øÇ¯Ý]É‹¦º,¥Ìå]ƒÊœqÏ&»ÿø¦×ÃZI2îk©Añ® -ëôà&{ƒ4·24·3±yd'«é\ØŠþÍi¹ìåYgÖåyéO§kž Ó¬¤ ea™Ô„!™˜ä“ïM}__”9’ö/˜`íLb«yç¿nJ­¼ÔW–ê;ÞÈúe‘áWG÷•ã¿×„û¢ÔX’0Y—5µ½â8 Bšš†N3åõ¬f!+Ô¼·è£ÓueØO%Ã>Ÿ‰©¤üIñV…«I=À[ý? æA’ Ù3Ð׫øsâw‡f­Ò|³VdàÒæ‚)„Õ4Rg‘A8 Ñ×4Râ€8¦Ë K ‰ÆU ¡©E#t¦„õ9í>WÓ¯_L˜±Œ|Öî{¯§á[Êk3X±k»MÑ6ÛˆŽøÛÜK¥Þ}®Ö9O F}u¬ýåξfp÷_)¤:ÓïRä¼U[JÎûÛ˜—‹ ÖI7±m¥¹8=*@y¬IÁí!ܾÇ4ÑÈúÖcx‚Äsæ7ýði#×ìK໌ôùiûöµ‡s[hpTŒ†ê(€”%+ÊŸU¨ Ô-e#d铨œžeóSryCïSki"®ž¨²´óUíæYá8<†ÁdTµmKUqƒïS»ûÐi”€x¤'œR B>” jŽ)Ô¢šô´†€h¢’…/õ¤ïKþµ>í! zPh¢ž)J(h ôÍ%4Ó¨¢€Gzu6€0åÖ<ä‰1é[Rƒ\þ©p°Hyùû-K’Š»zý²+týéëÑGSY·÷’\ŒÁE¬å˜21ËZ”ÿ¨-ëýkÔrØæœ®%¼ÄI:Ñsæ ËÈê3XÊØàWJ° -Ò^‹€ V´åº3³f3[Iõäšž6É+Ž@«q*ÜÈÂ!¹GSÚžÖ,Ž1ÔÔÊуh|¬®$Ì`žôÎ@ó¥ò›E †Y äaFrkÏ›E•·åGëN·8_aÜÕ¹lãˆù‰4‹nƒˆ.a2Ÿ,zzU«xÀëSĹ>Þµ40ò{ èTÚÔE+• [‰rzqšµq}jý…žÄç¸Çá]Wˆ’Ô¯sÏZ¿xªR!¶¸*{U¸˜×é\ÐYÇPG¦iú|FY·°ù3ǹ©þÇ%ÇÝN9» ²mÆ>ê¯zÚ1¾¬¨Ç©}[UýjO‘y'÷GAõ¨n.Ý÷ÁmäpEQ·Ñdž@×U3ó(ä‘NSoH—&ö‰|Gý·`ÃF2pBj-é63q,Y=À­˜Qb@Š0‹ÀÕ®Yùx¾€íp~r?eYJªºoè;[R?ÎÃB{hN&»uì“Wì­“OÓ¡µO» aGà+–[鵿XC.Ñ„m3ã¡cÀ®¦iNÏ›¾=k±Í{(Ûg©1w“‘ͽøîjÝ´sŽMgAw“ϵ‡Un mA°à†Sô¬£R2Ù—¹*¢ŽÔÉQHÁéRÔ.sŸj±™þQŠLÐð}[€qì:T~j?É/±©7¤` 9  ”Ô€æ«yª^ž´Ó{ u™â*\’Ü L3ÍV–HÐáç?JV½ŒÀíï Œ€¼æ²®µ#o£ÝßÝGå¤Q³ã§ÊOµ‹’Š)nxÏüGi­øšîH¡ic…DP;e@aŒŸzä¥ÉEûØïA,ZG'%œ·=y9§ÉóÆqÚ¼š³çÏÒrü2ÃÐP"ÏØ©ãÓØÕlôö¥^þõ“GrÜ|ë»±©a!¢ñÇçQ·Î1ŠKvÆTöéGÙ¬ËóamCzuªQ¾y=jù–Ûhê:Š­ØNjVÃkBIÑ$NwTŽ#¸=z§Âÿ^ÝÝI¤j—K#Ç3/ÌØ÷ïÇ­y;8'Žƒ¥[Óõ+½þFÕñ4$`¯q]*¸Ife†"“ÓSêÜf™æ|ÕáÍ~hPßÄ»KpË× :Ö’žOå^Äd¤®ÏjS•98KtYã­G»|f‚Ì(EëLëÒ¤ô¦¨¤–E‰Ù°ª2~‚\œTNê’q޹®rëÆ6ˆ6ÁÉ!ìx«Ám©k=ìÍ »rpOù÷­ý„’¼ô2öÉéM{­nÚ!œÿÝNZç’]Z=Stý– ÃÇ™Ð0ÿê,´»[5ýÌj÷&¬jBöÉáèÿyчJ¨T„]’ÓÏü‰”'%vÌa ÝÜœÝê}TdŽjX¼/§Gáä=~g«šUë]ÚâN."ù%_FqÍL«TO•»pjö3‹¦cbˆŠrèÚj‹(3þîjÏz”sÉúV~Ò}Ëäb Ò¬@È´‹þù iv@`ZÅùUáü¨"—<»‡*ìR½­¢ôû‚ž,m½¾AVväSöÑÌû•ͤÙÉÖôàÕa¢O–²½tôFåkoéàU*³]ItâúÓ]jUЖæÛ|…y"éŸ\V½¶§ksÂIótðjÔÑ$±”nU† eE½Ç™ks™£à7Ý,½hÜf®Ö¤%(=¬OÜñYfÎöСOç ÿ–Rú}jK}R)dò& ýã“úVnc©jzÙèhòý)W“íQ“š|_ʳ,šÐi„гMÎ~”‡ùÐ(i¹ùéÔÁÖ€NÅ6œ(þ*i§wÅ4Ð…- ¢€ýÚOᢊ`-%-€J)½Mv¦;w8ŠÙP{f¹kóÈï)É=êé–K‡Ý+î=³ÐU+—Ëí^zóg7Q˜ÊW2äϘ1Ó5z\ù{{ ŒCóäýYp~*‘ŸËàt#œÕØšI|¸»òªöªê§0ç< è4;{ad*ïüOîkEm „nÍ=.Á`‡§Ìyjµ ŽzU»týh½LÁõ­§vÈÞJÈå§]ŽqÅÜŸ¯5fê3Oýjºôôó^d¢îd˜ÖS#óÑzR(ÁtV=z†Ì3ºSl˜‚1ÐÖÀ9t¾±û·¶æàà1Bð)ã­t8 V^½§Ï¨Y·“cÈε©’·Q“‹º&JêÌäto -„¯-ÈG“ø?‹mt±ŠfNsRÇ÷iΤ¦ï!F *È•G ¤vœ* 0uPÚ]üz”C÷ò\éÙ¿ Ñ,a FA©¯!K‹y ”e û×3¡Ü¼O.•p}hHR‰;~U«\ð¿Uù¯vVèÿ3w¾ ” Ô@ŒT«ÏáY@¥ë@ t§QJRÒÒPÌÔâdÙwÌ‘}áê½ë@šiç#®zÕEÙÜRWV"¶™'„:}Ò2)—–p^ Y‘Xý} P‚Oìûÿ²û™>hóÛ=«[=)É8;¡&¤¬ÌI#Ô4¡˜·]Úá'çQýjþ™©Û^¡òdù»¡á†*êú~U›¤Ar|Ô>EÀådŽ}ꔣ/‹~äòÊ?ÜjŸ¥&{V$:ÞŸ ‡Rä,ëÈ?Z׊T‘7¡VSÈ#œÔÎ;ìTf¤IŽ=èï@¥¨()Å-8t úÑNÇÓ@¦Ÿ½N)½èÅÓ©¤óŠwðÑMÅ:€R3Gò ‘º ZOâ 8lN>µM¤Ì…} /˜J1õéQE÷ò{×›k­Ý—bŒÑ.\…õïíS…ù¨ˆùÜž³U&ŠÄòŽƒÖ¶ü>T#&qÎ@ü+ ˆóë[Z_´8ë[A{Æç_ù*Ç–= C)V”q]GQ©Ù¨Î:ž†±H`@Æ3‘]^§0ç½by;úóÖ²tSw9çF<¼½éa€ùœUèí$þu~+0€qéZÆŒ¬f}›$~µ*ÄØùz޵¦-‰>ƒi$ˆEŒ:€NjôØÖ4ú²¾“¿a•ÎX’qíšÙŠÌ·ÄhN95bk.ÝÀ5›vÕ›EYõMH@LP¦÷î{ ÊŠúc6âŠ=¹âžAv÷ïJ±y_¥pª³“!ɲÛ]Èè|‚*$rIÅFNµ4KŽ•hüÉlè‹=p+>âBr: dLñÀðIÍ+`ºº)Êå} žõâ?ô‹­>Ôr²\?E®„‘œö¬€²xªØeO“lÍrqZSÑߵ̧ª±£ JNJŠòØJANã¾*Îs÷zŽ”øÈó¨5Í:jjÌc´Éü͈~òðEt]V*Zi…ê÷רְutNAät\—»-Ñ´€sœÓzœÓȤ"·4žÝé_z·"“û÷¤!ó•ëI/AM'ÐPűŒdúŠŒ“¥03uK¸ì,'¸•ö¤Q³³À ù£TÕ5K-VâmJ ßhc0=äÖ½ëDzè†È}뙣€þÓéUõÝ MÕ4Ù ºØÊ«ô c×Ò¼œ~6eTÓ;ð5*QŸ´§+3Ãa¹KX©äUœUytó¢jrY1Ê6æ‰êL•Ü:ÖS‚ZÇf}Öõš~ö’Z2TÿYŽÇ­Cœ¹úÓ×ÍD5ï{’Ž"'ߨùŸžÂžú9¦£‡ýaúQу{–ùÉiyL{UU>;æ¤Î*$PÅ“žsQßÌb‡.W ë“V-PÖÔý‹pHÖ´¦¹¦“8qÕ:”{¿¼»2Ý]ñ?ÞÈÈ OƽgÃa4/Üé(-.£ûM´cî«•Ô~†¼÷Á·Ói^ŠkHÕ¤1d‚OÒ¸m ÅÚ¾—­Ú»]¼ÉgpJ$‡ $0À9®Ì,ç*Órz#àq¿+î}qÈ` ŒÅR²•.,¡ž/»"ˆ«Y8¯EMYØ`pW•³ô©¸¨$<Ð!IüªX…1G¥L£@‰GݧRRŠkýÚá¼I¿J×-5tVØO—7¦ ÿ îZ°õ˨iÓÛž¬>Sèµ£%«ì÷"¤[Ž…˜:S•# ÕÔÈxKRilM”Û„ö§c׫¯ššp“‹$¥Ñ(Ü✠5ºÔ8sN‘{S©€M&‚zÔyÎ)‡®i .i½yõë@ºÕ›ÝØÆw©x§éw¢öÉ_øÇ=Uî sÌÇF×ý-.qôÿ­à¹âãÕle'É.nN— Í'^}i ÊBúV¡$I*tVSØóY‚Æm1ËØîxO- =>•¬:®3qÓ¡.)êV¶¹Žæ=ÈyÏÌ;ƒSñU'²ÞL°?“7]ã¡úúÒÃvDžEÈÙ7oî·ÐÐâž±ÚÑ–©ÔÚp¨(ZCKïE ¦½E9(œÓ{v{Ð ÇÐiÀÓhïçMïN´†—Ùoz`yoHýÏD‡!{“OŒôíV•BGçÞ¼ÝÎk"÷#=â©Üºòà \oõïMjy†$/E´¼ÌqVÔÛ‚`¸« yý»×5Ïnn»}E:&1Ü~µ£™~Ñš÷ò‚p;ÔÄ Š©йsõ­(jÒý.¤‡¬ œõpF zÖF£«A§‚Î~`2RiÃß$Ú7.P-'=DœS±¨ÝqUçAåàaƒƒ“÷OSPÉÌ‘Œú“BÕ”È c5Ÿs#oÁ<þ¥1ÅfKÍÒŸ­gU^,RØU@>´íéO,ªÓ¾„b¢dØŒÀ¾=¿Z³egæŸ5¸AÛÖ¡±ƒí3s¸ åm‘ǵ8°­#»²£êgÝŸœzT[°=»ÕøàóO<óœUk‹FL‘Ð*ÙŠQêT2cÞ°ôµøŸS~»:ÖŸ·Ýªþ¶ûDš…Þ÷×$ì0+H|2fVm¤j4aqÚ‹x?xY»óZÂÕBdÕV]ŽG@:Vv7Œ;–W½8¬}I£»šÙŽcL‘ìsW¥¸C$§øFj=&›‡ûóß…sÔMÕº~E³Xr(Ìÿ…(5ÔP:òüi:SÉÍ0Œý(iŠZF;œg8 *ø¯&‹¨ØÈÖ²ÜÅ É⋉òý-Ö¼öÓ↯®k¢ÚèÛÛZ±c²$9Ç¡'­vÖzšë~8¿mEÐÂ#–8â#i`¸ü@®>A£x¢îæiKÜÐ6à'Ò¼lEL<ªÊ5#ªZÀ;)S¨šåØÅñÞ¥kr®¬ ¸qÞ«[¸`£Œ{UêþøÄ£ Âg®M§¦ÝÓR-¦}.G7*Õ-¶…‰Z€u©å;Üúv¨ÈÇ5Š>šJ웊¡ŒâOÒ§Ä~•Xpù¥¥TѦZçÏ\w§•›‹~4C‚0wcÚ”ò0>•ö/ª;ˆüÈzäqš»´ÇN*2¸“ˆ»3 Ñç‹‹êZðMèògÓœ®A%qš£ÿ½§öåÎó€2êÝü Sž7Ò¯£Ô ûªFåcYñTw–Nn§!#Gùâºé©ûNhm-Ï‹¯MRNE¬v>˜ÐNt ÿLW§Ò´køwâµMÞѾ[«hº¸ÙW©šº^½}ªaHIÚ€–›KšG1À÷Q¹àÔ·2ªgs`^+*m^ÂK]'ƒdÕ(·°œ’ÝœÝþt/År£×\?¦Oÿ^»›vf¸ê:~£¦ašhÎõù©ôÏ©ÓmÿÑ¥Ž@×R”çÊÚìs¤a&¯¡ÜäSZ¹øKfïd¤¿N0çæ²`\8¬¾­S±~ÞŸs®CN< æ-üaj\ `•sÁ¯m«[ßÿǹÝëó ŠÎT§Ñq©lËdÒSIɧÛ½fY<ÓÏLSÉ÷©H ¨ª:Õ€¿±`dO™~¢´@àQÞªq|ÈRŠ’³14+ÿ¶ZyOþº/•½ÇjÙ^k˜ÔámXŽúo"CóÐg¯ø×Mo"Ë‘NU°TzÖ´Uùã³3¥'nWº%¤ÀúS±Å¨€S&Š9Sk¦EHx¦1éŠiØ »¥´ÈrÒCÙÿ‰~¾£Þ­)drJéL "û£å<•úÓnâJÄ´´ÀF;øªFREÐM5ºâœ)¤rh½éßÅE€úRö ö PÇùT}³ßÖ”òÿACvç 2ž˜§ƒÀíA*6ljà0&‘Ëì RÛBeT}Ð~cU V–`Š>fýtVÖKx;z·­ió1F<ÌŽãÆÿ…VIIypßi# –÷jç+; OSUFg“Î1UEÆ?_Z“ÌÎj9Ä,ùwgåṫSk+~èe½OAT.ôϵT‚Õîæ±¼ÔùÛÒ%&öD7‘ÝjŽâ#¾WàþzWKáÍ*[(c7'÷¨1Ï>µgL±ŠÑ>Däýæ=Mj'µmi©p¦“» «qwB]”⪪¬O°ˆÔ(&´+>n$b;š·t-©¿>*D²óÈ9Áè'•]„yb³æOF;\­&›Ž¯ÇoZçµ"‘Oå#³`|Þ™®¹˜8®KP¶x/_w~Aö5Ë‹“ŒW'RQW¢(j½ ‘ÇVÉ?Þª‘Œâº >Ýp:W(ÊrJãHšÆ)Ñ2篭M8$Njrp*±;ëÙ…5k”eÎEµ¬ÎFJ!oÈ<+ ƒCµ 0î›Ø{·5_IJyz5Æ>óâ/ň£§º è€ô¾Ôý¯Ô‹{æ¯j©q­ZSŸÂ™*äTaê˜Bvgý3Z¶øòÀ*´é‚M>ÞP^Ý«5yÈe¶àçÖšM<ò?•5SV4--”Zæ<}¬Áº…Â]5½ËÇå@ñŒ·˜zbºzñïë«­kÎÞvû”žK.ÞrNãïÅEI¨FìèÂáå^¢„O3ð׈ ž·4Ú„Žca´È}}é|Iâö¿™à¶Ü¶ýÈîi†Òy ó’[1Xé¦H.dhàýÞIÞßtW T§SÚ5©éTÂbi/dº‘ÛÄÓ8Ü>ñ}m"ùkî:S!‹ËÆN}êÀ¾•ÍV§;>³+ÀýV•žïq‡î繦òÔ§Ðõ¦cƒY¦z{’GÌ&¡ÇÍV-— Ša${ÒOVTµŠùðj@0MB ;TÓK寛<ZV»ÐÊurÙbÈB{㊇÷ÎiËœä{E:ƒÀ¢ÄÅ©ê‰g.NÆ9¬ìŠôL7ì= iÅ#Å9bs»úÕÙ/ÓùU¤¢´8ëá)U’”Ö¨—DÖoi›qîIɨÛC°—­²çבZ˜ãš’5æ§ÚK£+’=ŒI|'a$,8$>jÆð¾•l#¹†âc»W>†»±\å°úåõ¸TI‘ß&·…Y¸I\ÊT⤴Ë8ÏËm=3ŽÔó¥YIÃ[EõÚMÍX^µ‡<·¹¯*ÚÆL¾ÓœcÈÛþé"©OáhºÚÎñ°éšé¨‰ªU¦¶dºP}`K¬i8ûT>¥³ÇׯçZ–zÕµè d§ª7¡€k:÷C¶»;Õ|¹{2úÕs³îO,£ð»š#î‚:ԵφÔô€£í6ý2:ŠÒ³Ôí¯ øqÕƒQ*m+­Qq¨›³ÐТŒŠZ‚Êz’ßÙIuaòŸF¬^Ÿ1®_¬AnÍ£+———µ òÿ ç›T#8ëQ›ë‰SØâ¹ç§}51¿ç€îuÒ²µY`–<®âüÛŠ¢²t?7 «cLšDÜÿ*û×<«N¿¹Ž÷(@>u¥uV±á¶3Yö‘Å8îù­Õ9Õ†Ã8>i cçïRÉüûÕP%9.;0ô®Ò’¹âœ·!Â¥MÕkQ`u1î#¨ýj‘ŠlìI8¨£b±ˆÏ7èiþ[Gó?ô®&µ>%k±’® ¥·u.ê~ðäQHÌ[€r*&„HÀžÜæšµ¬É¨æ¢¥ IÙrùô¦·qŠXw=ÍKå«õ,3€¦§gb£;Æáf{ŽÄTmŸ9”ý(‰18ç<ûÓÈ2ç§áG[I½(­f]j·søWÊù¤éUÞÄ tzÒ›IÜáÆÆS\½nÙO’¹vU•Å‘\çTV ÇSVt»ÖÓõ‹;Õ8òeV?îçšÖŒ­4΢¢Y–xcš#”pU"¥¯püá«8 m8P!Œ8ã¥BzñVX|¸ªÄ`Ð!ÀÖ¥_^Õ úÕ„ Ö òù^#·lq4D¨­êÊÕ¢ýý”ãoÉ.ÓëÈ­)ïb'µË1þµYJ¥\f®¥fX§îÔ9©[¥Gß4 SñMŸŠr+"ÿH‚àîAäÊ9 ¼s[ §ª2qwDÊ*Z3+ë½8ì¿ãÎÚٷ¸Žâ0ñ:²ŸJc(’2¬ƒÕMT“Lxa'’ÝÓøM]ã?'øïG͵^òÝníd·nŽ1øÔê`H!ºO"NÙû¦®I?­K‹‹-IIhdèåà§Ìrñt>ƵÇÕØLwݧQò¿¸«ex=)Ô|Ï›¸¡t¹_AXóJ¢˜¢¥^:ÖenE íßÞ–À AM47AÆ€9©¦ PQšy5ë@ )â˜3ƒOzAGµ'Q@¦cç÷§ Oâ |޵Ra°ƒÛ½[éY÷÷‘²#¹ñŽ: †ÒÕ‰» >¥°<1}þíØV[ï–<:E¾§ÔÓ«’Rrzœòm‡h¢œŠ’F– :ŠrÜäfõ¨ûÈ{v5JbRÒ`£-‚k9±¡—ºƒÜ¿”‡÷iÎGsTÎï/=ª(FùU;mº¢ýâp­Z½¬ˆÝ™Pƒ,ŒU2ÙàWa§Ú´VáHùÌÙç“Oм7‰.20ÈUè+³K("lkÿ|Ñ**­ô7§NÚœ›Z?'cy«0A,Ÿ(·»[w%P…`~5 m²oçI`ÝšX†"S÷¶Ö´!ÒâAónoÒ­ÆÁÅH?Z膔z\v(cQGÑh˜qŠtª÷ÌgfÐøùsÓ5Ò¢–ˆfq;'ÏåRO¬YØC¾êê “+…⹟xwSÕØmÖ§³8ä[åTþµÍ7Â[[ÂPÖ¯ç“ø¹ãëšcEíã>‹§O²ÉP^íÈïuçz—Æ/]ÜËý“º w9°ÞÃèp+sÄ -4ÅíŒmsoÑüÁ¹£÷'Ò¹y<¨‡Ê›ô®*ØŽGËcérì¯ÛSU#%÷_úg?ý·â9ïMÒÜ\Ç9Ïï¶zÔ¶»uþ¾öwÿzv5´JµÇ8SïÞ’D·=ëŸëRŽ‘V=e’Ñ©wVNOäsˤÝ;e¦Lþ&¦]›ïÜìj÷Ïj`Œâ”±5SzY6GñfhÒí±óocê^‘­áŠ@±Â£ÜòM]<“yëRªIîÍ烥îE'èMÅõkù ˜Â´UqÀŬž§lRKbì:Ô?»ŠåÕ`ÄU±â/ÙEåÚjó…?u\“úõ¬`y©£v•hÃ$°ZS¨æîņÃG ”eÉŒr*ü›g±Ú>òÆ¢û< ïpÜwü)°¸Â°Èn¢³nûŠ×±Z""Iáº{˜ªu-ú ³-¡Qº.ƒ½ñP­¸$7qÚªéêe.h¯u‹œpx¥>yD»Èc´çŽÕEІ46<`Óoa}(˜Xn0ÛøÓ­âsȆ$ÎCmàU¿ìË»™Œ÷Ó1*˜E<óUhÇVÏ>®&²j1ë×ó3R96žŠsšY I$oŸ Õoz¹<G'›,{—2…þuÂQ"†<±íÐb…ꎇŒJMH†æŠ6“É'ÞŸ5³7¨Àõp*[{)àŒä±Ç@Gj™K›O#œuéJRܺOžÒFió Ï÷sŒúV€ÜÙz°Ï=Æj¯š—h þ%9'°"–Ü´#ð{ÔË¡¤S—2ìH¡ÂtÆFGÒŸÖ¥¼‡Êλ“QH^7ÚC={IÛBùºñḯ<)§º»~î1¼+{µy—«æIï´çvÚàKž€Žô¯N¯rŒùà™ùö>‹£ˆ”<ÿ0áÖ™šQZœcÏݨ[‘R‘L`{ 2<ô5:T#­N¢€T5A›W8ÉRWê•ÙßòöæšvwW#¯Ö­©ù*š}áVã™FI4ìÒçŠe gšny¤<Ñ@¾¡0ŠÁna ÞaÏÝíVµdº|œàÔÅQóH眮šT íJÜ úQŸÖ ‘i›~rÞ½©ôP"´Ò8#ߊ>áÏ«Mó“Ú—b³”.34éc~"|'§ZÝÒíííã.çäïnNk?Î# þUbÚà¾i¤úYˆýêœ°ÚØŠ_ùlxÖ$—¶ÐqÅJ¶“;Ää«;Ö´ŒœKS} ¨Y§ŒJû°1Œõ9ïIdÍ6 ±$d1ù³Q™üg¡®Ø´Ö†±ØÙ¸­)ÉÍgÙH®@'éZXªìÔRŸÒŸM+“Ö•fÕY;‘ŽsÚ¯OÇá\'Œõ‹ëh^ÛJæ¹e>aŒ¯¸ç2vW5£9¨®§ñWÓìg[kV–IæíŠå˜g=× ¯?‚;‹€e¸8ÏDøÖ—Ø3;\ÝMçÜ¿Þcü©ÁP “ž3^UY¦Û‰÷x*5)Á*EÓüÿ«ã„‹ƒÇaNlýjØ(ŽÄûcòªó7'hÀ5Î÷=Jnëï!+MÈëR*’yéÞ˜éÞ…æ[±9¡zÓöÞ›¹EY›’Z¶;­7ˆ ×óùÒÜÈ?…ºo øÄå­þËmœ3°ù«XQœº5ó\5-®sj€°ÉÀõ=*Á§jí/ÇŠö/øS:ugžweäðMy׋48ôJ+ T7¹œðò‹W8¡R­réb¨€9ù‹…¸À&­ˆ ¸‰®ÖûÀ֜у‹*ÀÍŽ¹¤6ÎðŸ,ÙwvÅp©jtÕ®Ü9‘Zêå†h#8xø*z×-.DøèGjî<˜­ žïP’-Ò …V;X[y?m¯·jqòØ0˜ÅÕWg¿ÈKk<Yö³ð¾õʼnÁ¾ï½^·»Gh ;ŠÑ"9mv¿(ÊçžqQ&âõ.X‡nu³0lí& ógÃéW6ë/|ª: سŠ? ÍÛ¹Nà?½Ò¨+Â÷Â*N6‘èݪâù¯c'ŠŒãvWˆ'u<¼£µhZO0€*@Ó£}Ï›æªÄ–ðîþês)º}ÜÖïìd|ÃqÆA¤›”v¹•YÂPÞÌ­{eqçšEÃŽTàV^!Špg“ËÛÔæ·n.¤½xŬ,`_¿+.ÐG·­:B‘…f£'ЏÊQV‘„”o÷™è²_–û£¶ïäǧ§óª’ZyÆŠìˆN/WMlêöèVL¯U#W5…®Ïomp­,ȬHÈö1¨ÜùR5¢Ô¼ÊBÙbº1€£$Ón!18=½i¿mÍ”Fh²ñ“ííSù«ye휽Hª’}OJH»5³#ØÇ•¡”ÆAåÇOzX%)!VÚGséšz€ù>‡¥!Jé›þÕ²µ˜nR²|ŸC^Û‰,)*£ ©Á¯› Ü–s WŒh^8¯nðn³i¨è‹ä\¬29*Ojôð5V>_>¢”Õ^çFO8§ÆE1Fôȧí®óç…ÎhÏáIƒÒƒœP:óR©¨XŠlr€qÞ€,1Àªš–âò(“÷²";T±&¨Ë:žASŽâ€&ñ«(}*‚È3ÉëüêʸÀæÇ85 ¨‘.hP±/À§Î)pI WbAÅ'ZšX·sŒP"´'_ARæ˜Í/lŸÆ€Æi3MÍ) C³To,Îó=¿ž{0÷«™¦“œ{ÕFN; ¤Ì½:à’؆WŒð­×iÿ ÖS”¬ÝBß%.aùn#ãwªúT¶×«,x?,«÷ÕO_you—Aî)ÕF9ÚYö§Ý“W«ÍKbšŒ·ÍKT1sŠCœdPz5$pP“ŠuPHhÞ(àÐij0pøõ©(¦·QN¦·#ñ UÇ8ÆOJŠ­K‚¥C·==+Î9Yµ4üƒ§J{ ‚£n”Är”þø¡GÈ1Oˆ¦šB@ÿ{ Í!u|I±2i>Grïš|£3ü ç¦M2XÎáƒëW¤Œ!Œ֣”|Øüiòˆ†ønvòƵLÑAje'jÔ·Jçä»ɽúƒŠÌ½Ôå¹sp˜ÀQÓq§Ì%>SZ÷Äv@âÚi;rTþµÏËâ‹“}¢DBÃa•ŽO­V™U3ô<ÕXáó#Fa†9onkºŒ#9U“=Â^$[ÉÚåg'(ëœþ5Þ‚Íxf<š}õ½ÄGvÅ{5•äw0Fñœ†Œq‘ET¢ô:hO™Y—¨ t¦æ³:æýj¤|Ñí‚5]Ä–=É>§½Z‘¹ÿ=iTw4 wˆü'¦^ÛË3F¶ò -çDè;ŽõáQG$—ÒJí•B|‘è?ƽçâè³ðÜÐÁîO–½GùúWˆdFOû"¼ìSŠvŠÔû ŽjRö•%x§¢!ƒ©'vì““SH¹Ò¢^\‘ŸŒñÛ5jk)¢(.fŠl`gsŸÀs\Ñ£9½êÖÇР¿y+>ÝJûÕðçýê†WË•P:æ¶!ð†¿¨Á$ºn›(‡MqòÙ^µÞøcàõ´P¥Ö¿;\ܶÄ8Uö®¨á?˜ñk牦éìy¦¡êZçüƒ,e¸ǘrº[ƒÚåüÑÿhL¶ÐƒóÁ8¯rÓôÛ].Ñ-¬¡Xb^Š¢¬JÛ=ëª4!¶i^¥îô0ü9á #Ãâ+ e‘‡•¹f­I¦)òÄ9¨MÄ›þ÷­:Ýw͸óZìp^î쑉¶±‘Øå€$“ë^⛦ŸVVy7æO”zdâ½ËVbšUË¢2kçÝhyþ"¶ƒ9,Ëœuë^~+ø‘]g^^Û¶ÜeÜõØBþUá–KIýö2=qPÜÝ­–©"OòÅ87mÀSì`k›³wµ„[6&xÈõ¯61²æ{Hê©.N»|Šéw—±…½™Öû‘îÉÍ^]-ÞÞ;v ªÎÁòÒü«Oo•tŠvípHúŠ[Û˜,ì$3O £‰ªöÒ“²1tiSWoÕþ‡=-‰3íGQ°ðÝ«F2%¹‘v ÏBc¿©ª:bÜ#ù·ÄƒràÕÖŽMRO³Ä1l2JWƒŽÂ”ÓZ7§s¢­XÊÑZ¾„—vEá-otñ¤Ä3mïNƒK·s­±Þd<œŽõbX¤€yQF®‰€vÿ>Ïs=»+#ApîÌ ôõ¬ãVÊÜÇ3Pä½µfrfô‡Ù°2±ôv>õa¼´æ#Qœ·AM–ÜÏq›WTx†Õ;r¤ÄzUk›9e’1¨H²)`«*BçO­iuÞÆ×taÊÕÙf ë{™ÊE&á€Tò?úÔÛ‹u¿[˜G20è}ªý¥¥´±ù2§ÝãL»1éÓùä2…5Ö.VŽåK™.Y‘›$bÑ"é°•ÇãT/ôëQ Eï“Ôæ¬Åy绥¯ïœŸ¿ÈU« ÇÞýÉîhŠ’ÜÒ <÷ŠùœtÁ€û2nY‰Á=vŽõzU··UŒð¼É4ºœK‡ˆ|À|øêi ¸]ƒÑ¿­k},z‹—¾V”%ÇGPéÀÛKm6 x'€{*›b‘ç¶9%××5TÜCÙÁä59Gªb…n{Âj̵u',ðn•µð³Y·Òµ™ôû¿•¯ˆ¥,q¸göçÖ¹I%w䟥FÛ¤ŒDܘÎP÷¯ц©Èõêræ¸^’QÝRÛLD`u«!ò+Í>x¼ê¶Ÿd¹v70›?Ä£¸ïõ¯C†Uq•2ñ5ƈl,4Ø<ýFö]«€ÅP}æÇééVfix‡Ä0èðÄ<—º½¸%-­"l<­õèª;“X™ñÁó®õT´DP©ػ䟨¥°Ó^+Éõ;÷ó5ÀRs•…çš{g©îk3Æ.²ð¦™ö‹æ\Ë‘º¶ ‡Ôú(õ¯˜Äfõñ¾¯€ÚÝÿ_›:£F15FaxÖ×Nµ¶:櫨ß,ðÿǸiÃøà*úWœÚ|Uñ, #3ZÌpq#Æw úà€kÕµËýrôßêS3»“±Ê ÏE^ƒëYã9䞦½ì% ”¡j³rÖÇ<ä›ÑXõ ?:ÜEVêÊ …–ˆ”$þµÑYüt²¯Û4Û¤âí` ðøIHéŠ]ä¾~jê úƒJø³áFúÞÊçó&ÀS$ET1ìO­w‚péùF+âee ÐŽ z‚~#j^"Ú}׺c´\Œž¥O¥&†}6&>ú«T ñëô®Hñ¦‹âQ5êg;Z)ÇV=ˆ5ÕX³ô©é@™ Ÿ ¦‘в£žµ]úý()FqÇãMíKœq@…æœG­5q>QR~´ÜVf£~ðb9Ï®*õÌâÏðŒÖ6“¸žKÙy9“\Õf¾Å™žk{y_tª„“Ç\V•q6©7“3í–/»"ðJûÖÆ£.ÿÜÿz°t•6zÌDðw”9ô5ÏR·ïÓ©2Ým‹Ïãl«ÉôaëZk2þkh¡Ye™c‘R}=MOcz×q’ahÙx+' }ñé^ŠpÚ?qIôe¯-OjvÜt§ ^ Û‘ÏJ0¥:›@ÃŒv§SsšB¨)) þ”\ æ–Š(QNÅ4žÖ€8sØåwF=)ÑþÕC{É9wo˜òMZŠOœgò¯2é½fI0Ç¥Vj¶ã<öÅC·9•h‘ý`_QOݱϧ¯Ö£èsѪL\ôÎ*ƒò€9=)WïçßbŽ3ÐT¾ozÑ ä&YŽ­dßjqÆåSk™ ÅC©êfT) ùÞ±Èàúãj=Ì܈åšIäËœ‘ÓÓ) ˆXõÇJbã>†–WÆOp9®ŠJæl‰‚‘’:sІ\#¨1´NiÃêzTXó§jè± ê8k»ð ℒЕüë–äž•À³2¡, Ïn+ ð¤¢=~ÔlÎIž„Š%ĺRåš=p3QÔS·qLÆN;šæ=æ§ ŠpjLPF»¦Új:dÐ]ÂÒDFv®wdt#ëÈ¿á¶ó¦T†Yø#?;;íÀ{Döܹ7,ŠO“„€ëøÔooP”Ž5@GE¨tã&›GU,ezPp§6“<çOðE×–¾|‰eɇÿÀðÑéÒt ½’ ;Ë'Îäÿ¼y­ù íPÅþ³g;“z²äHîhsMŒdS@›-E0⦴¡¯ÿ {¿úäßʼ8RníæÇ¦+ÜÞµáÊnIÅäÛVlQ…¯ï¤Ê Ãï42Øf{‡k‰Ð”o3¬?Ïz}“Hg”M³{ÄŽçÿ­ÅN!oµà‘cnˆW*Àtüj•I(ò'c5A7Í%v >K#'®jI¢Ö\mÎÒéÚªG{æI´œ‘Ϩ54÷‘Ç&Áó:¦ò6õ\â¦|×:jµoRYcx‘&)¼F 8Jÿõª–¡ªÁ=¤‚ÙÕœ¨£®O¯¦*[ɤžØìPÍî*sóù¸Ï©¬éÆÞô·@¨é{†Ÿ $+(ù‰êsÖ¤kpgíVè‹»¦©¢Úi„lÐF®‡æ1´ƒžÕå¼Ú¢G Z48!„¬ãåúÞµ“»»vFuª½í¯bÒù©&`Ù†ëædbØ´¥®eyq…Uû¡sÒ¨ÙÞI!žÚ²G#`w*jÊ\­¸ËqÁÿhÎÓOMÍTT¢ªIµ YvœôµIx¤ÇÆî1ïQ@nòcS»æ(Nݤõ«í$Ûç-×ol×Mõ¸Õ_yäþLé´íWBU—Ö-¼oÚ}Õ|(éÀ«kVÓÞYžQ#ÂT •ldµL"Ù¤~Hc2yÎkm9ntáåSžÅhåÀØÇZÏÔ,þÑó)ÚýCгx§—Nýj yòpÝ)&Ó¹èN’’¹’c+(Úã õ©”p:±¨Ù¤­•ÜPGPk> Z9„RðÝf­¬šºÍ«)ýåØ/.´«Øï¬äd’3»åö¯uðŠmüG¦‰†Õ¹A‰c¾£Ø×†à8«=ìÚF«Õ»²m9`?Ïç]8lG/»-8Ê}µëÑ^÷UÜúKpü«’ÔÕãñV‘«à =¼¬o+p\7銿¢ki«éÑÜ ¡ñó¨?¯Ð×—ü^ñ–«§^.…l—‰e't™$œð;ôšæGÆìÍßü@Óü=ZY•ºÔ¤,`±d}ç#ù ð-Fææêå®onšæåÛç2Iü}US‡9úÓ²çXù›ò®z÷V¸½¿itèA †`:ÿ*ÝÒ< ˆâmJo3õQä ŸSÞ·î´¨$H¢DXÄgå £V+QÁÿLM6Œ}/CÔO´\O˜ò$eóŸ¯Jè¤È‹/˜¯p½X ¡—Ò¦ó£‹bóñSO$cÐWu(Æ›´JåeŒ2÷§f©Ê~É1™Õ9ùÇ¡õ«$ädVÍu[ 1sAõ¤Ži3“Hc³Iš( ÆESèÅ0~”´`QÛ4ê<Ó³Î*3÷óL7^ ?•9XïÉíLÏ~õîIëËŒNvj¤›ãþTHg¿j¯Ÿ¹ÏqQ^jQÛÎâGv­’èK îRw”àg­bKâ9wæ`Ç ÔÕIåšáÎéŽHËqš­åŒqÀ5ÑN”z™¹v.ÇâK<ùè­ÎqŠž]UîäÊœ(á@÷®~u ''”ûfØFz3ZJÝÌÙ°%oâÚqM~=ÍD—ïý*WÜnEe{0+¨“ç9Æ:Qq¸§Üô©oã®i&_Ó#Šé¢úƒË$‘Tîíî<µOå¶ü±Ø¬±~f£¸‹÷#¯9k9“‚xÖÿƒíæŸ]…âMË.O@9¬ÈìÞGù˜ñŒ.kÒt & .Ù6ÞàcÔš%4£cZPr•ÎqÀäÓÕpsQÆÃ‚)Û€'½s\ï,-)5W0¿E?<°# ä{RS‹Ù€¤ÕWÏ—×8îjG&jŒóœ`w§pnÃ÷>*(ŠïªæFÁÏni±yüé9™ó›•8æ¦Î+n xçš¹oz$ùOZ“)M2㉆qN&¢féTX¼n@ëJXÓ0MGñS{M ¶rpÄß&¼¿Á²?Ùe›zL{p+ºø³qäh‹y[à‘Óô®GÂvÅ48Ì‹0#¾My™‡ÂzùT/RçY £'*Fr*#·yœnò®àûxVéƒY²Mwg(³®8eÎáõ>‰x\˱º«åÑ$Ç õ¯ ÒkU±êÔjéõ.Ëovù`ÀsÏ_­dZ?Ú f‘ÁY ”.N1ùVÝØp$l!è§+:[sâU}²t,ŠÚ²w7‚oÞe;Ûy#¾ûE›ùlGÌŒ7#õêe³¹.nfGG±V5ÀU&¬¬Ø|„Ê“†ÛÏ"‘®"‚%-åqµÆN¿zÑ©ò¥beó)t_p›N!ŠdGa•ŽNAçÅ1´çyâšwP‘¬qg½I5ZÉ~߬Mt›Ö8ÐG¥q“Vݯv$MƒÃ†#?‡4œ\tFp—5ßK‘ضËÛ„S„߀Ǒœg}å&<)烻üôªËbñi·9(ÓKûÆ;qÈ¥V·k‹ˆck{• áeMå}³ÆqïYF wòfÛå’ó5¦±µ¿·µB½ËG͵‚ޤŸJeî™’Ü["—ûÈCgÏ¥YÒV ¥žFóeÜ òp?ÙÅž²G”¨P™'ŒdVII;'¢0„o)_£*Ãv“Çö‚Wf2ÍÓ§ØjO=Œ×eR¨§Œ(éYÿ`µ»Ï1² ŠHsÆEkXùF3oòå8)èt¸ÅBÈÕsJÒ–Æ.µk-Ìä˹ åAüDúÖX*:ËÀ^¾Ø®›Y™žh­-B³º_öTv®vâÝ®å”//»ø±ZÁ¶•Μ-H¦Ôw3¾Ð¦I!o¾§ŒúU'ˆù™__ÖŸ¬ÀèEÔEƒ§óªö7«p6ž$»V®sDô(â-QÓž§™$ÎD ê1ƒT'fˆøÔ¿z0œwªp”?,ŒÊ¾¾” tÉ.]QµÃ‡òfáûQWÀßÈê;Õ[Ë#íudqϸ4¶·åÎ0ã¡ìÃÚªJú¢¡''ª{3»ðN®b›ìŒvËÖ6-€}Wñ®[ãdÐO­iS")·usìËšH² :2AÕ‰ñ&êïPÔlonª=²„烂Aüs]ø*­û¡ò|A€9}bžÏSŽSŸ¡íHÝót?¡¤Fü)¤çú× |É"JÈR}ig“|‹žžžõqЊyˆžqštl¨sQÊ9ùz{)ÀÁìEYÓ3á†Hh>¢“Ð q†Ü08©FkQÙJH a±ÈéȬ¶?>s‘Þ„ÀUäÜ9 óŽÕ§¥kSéŸiòdP³Äb7 ƒT  ¸à÷©)´ g­Š’³è{c¤ê¿ £´Œ,Å v”(ܬ½ÀõÏKÀ6›K{Oë±ÎÌ3§^Î¥w)û¨ùèjâ|;â-Oš²ÞÙEy¢Ýe‘^qÓ<Ö‡‰|i¢x—ID¸¶–'ˆï†H¥âaÐãŒþäaåZ„)Fñ»³]<¬m>Y+­Ïz'$úV~§!ç¶N+–øqã4ñF„‘\; Bظ ÁltÇù×U©®mÇnFkº»ýÔŒYNÁ‚H™8*ËÖüQ,“5–™ËaÈü?Æ¢hç×${+¶ÿ[6Þ>‚£þ×NZÏüô<ƒ^t%8S´vîfäú-¬áçj.÷oÙ7ä©ï[px‚;<$6(ˆ8_/ «Zf“ap14Žeî„……]>²îUö?δ¥J£WƒRèT.ã˜Y~€gü$)pã™J÷¦ŸÂàyn¤õó#¥TÂ1 „7,áv¨ÙžkGF¼¤Çï—eÕ Û¿Ø¬¥yS ­»<ŠÕÓ¯.ï#Iå…!…—*KÕè#TŒ*®ÅgY³ÝÏbx |ÈÿÝ?àk¶•)(ÚûTýM´¡d£ÚªÄLy s«?Ò§cMx„±•ÇÒ¤Œ wÍTDtQ7™ÔŠ]§4YÆD#·1JÜé[ì ŒTÇ{Ôfžcñq–- ,•d¨6ç€?ýzæô%øvÑŽÐ6Þ‡æ5ÚüX±ŽçÁWS›íJÊŒsÁ 8üEpZ k[*žWrà}Myøõî¯SÚÊu¡³m,{VÁù¶ö5v[;an¥ãVŽÔ¹¨,,À ±e> jÍÕ©°ž;µ c$£¹bp¤ÿJñ&“’³±éâ[·/B9Dvó !¶ÿ–üé#’AÈ#­O0!âe  R»¶ŽâAm e—ï3ÇÀŒVѳܮ~HèS±bn¯v”I/^§š»ÁºÉôg¯äyÍua]ª&ög‘Â3ÃJ+u¯Ëõ<ógÚ•FG½9À( öëMS‚+Ö>LyíOI6pzÔ›¿w€y'?D6¶2)€²gq#Š’ äÕר<ûŠŒ“ØgZ™_ä ”5Åú˦Ò~÷qRiúLº‹É¶eB°fû¸§µEc w %*99ãŠÝ»¼Ž(E½ª*¨8fñüë9;h·µ®ò8Sµ@êIsV/4[˜+È£¼|ÿ]hh{Æçs”b>„ŠÔ¸™Q™”*ó÷r+'VJEXç¼;¯%•ÔšuòyúeÏÉq 8Çûkè§›Â÷š¡‹M)%«¶"rü…'ŒÑ{ Zþº²XÂLêˆÀp¥€ÁoÆ»?ÒµHâ•P 9Éýß®+ õ9/:¶WÑ‘éùð~³iun]E®!¸Cÿ-Sßq^¿{æk¶ÖÉi"ýŽPäSóÛZòýLÓVºGS€eSžFG­Tøaã ´¸aÓ5ÇOšm‘\g˜\ö>ÇŠ)TUéò¿$Å8žõ¦ØCenâ/aëV¥‰\`ŽQØÓm¤;0Ü7ó§Hk±AZÖ&ÆöŽà™m=BT6úµÎžLWcÌã…ÈÜ nÜÅ$‘•Šo(çïmÏE4+PwÊÏ3g?3q\’¡(Êô´ü‰k]YêÆõÈû,¨¸áÏ+ÅK’òT²•ŽAY:Öø<­B/½ ùǪžµ¬8¨nbÁ$G£¡_ÌVôß,®Lã̬6Vâ4u9V…NrþºxæŸJœþòY=×5ÕŽôêÃ’\¢„¹£r¼ÃÊL>ïݧ­Yv¨q´ô=E2#³1Êô÷¢¶%¤4f™R1ßÅKÚ™š3Þ€ž ¨ûûÒûRcŸzwZJP84cšó9äX£,vçµc¼­$›‰äñŠ¿zÞn"G9cTÖ1ž§5ɶqMêMmÂI0íéP^‡Š°d¯z§s(9Œu­›²² Ïr7ý)Ò9 )èzÔd‚x84/)‘ÁÏz@G0ùùéü5C%ÄTd“Ž9©YI#Ó½oèvëå—)óg‚j\¬ \«ö7‚V è=鋲>Ð1Ç$­tw8ôà«ïp{µ—1|¨Ï‹O–qómô4·zÆøc¸zÙ‰~5SPS”ÇLÑÛ $QGTùq€(‰°XþUViDXõ=z–ͤ“ÊWBŽÕp¦äô%³Ð|1¤=½¯ŸtªÏ.Tõq]}+•Ò“×@ÊűÉþUË^µ´ŽæM“Í©JP¨*7æ©E©»ë‹ßÖ¢F2Ì ê:S,á/©]9 ^žõFÞ½ äö:# ço–TàƒMꮂ7Œ¹eÔ×¶”‡Še8ÚAã±Û|K±¸Ô|o(>S~« có"¹_ˆŽ»ÚcYc”fÀã¿á^³ªi¿Ú5îšûZ)¢"&=Cvýk·®›gÍçõ9gÇu}}z*K§½´ÒÚÏ b%]Jò¤TŽ;ÕíwþOèöW¾gÙ¯ S¿&LŒ8ä¥pZ·Ã½rÒ&¹K_‘IʆÉüºþU­Y»=µ>^TÚÕlrmmÝ>=Aõª³ÂÑóŽ{Õ‰c’ÙÂÍדŒò1RYPŠíNæEǘpzôÍK3I2Fƒ-Ù}i!ˆ‰GË‘ü롲µþÈÔ™.H eduéJRåKIðjOt<ùš)&!ÈÄúÒM£Yés“~ò»+¶#ìpkrÖwóÁù‡ÝíZ·0-änfE ÀnÜ3†ÅyÓ­5/yèh¢ŽP]Ë{uYZí‹…UÇg©­›9·#sŒv©B‹t(C+ò…àq];]i±xìÜ{êmç½WŸä+0þz©© éAÆ0yö®tl.î3úÒu5 DÝ£§ûµ*÷¡ AïE/j1ÿë¤çKŽ)Øâ–€õîÔ”äl#™Ó¦×9¬é®ÿ}„à/SP_^»ÝJÇïüª!ùõ¬ÎËæV în½+6öçûsSM!žÕ…¨\páJ’99«„.K·Ä¿õ­8fîzW3 É?Cóz×CcÄPç,9ôª©Jdÿ1äsÀ®ƒBÔWŒ›dQ{šÀcò¸í?Ìû\múÀÀ/¥dàœKNÌìîùoçI׃O˜qõ¦CŒø ä5óþ—¨Þ$`/Vô«wO²7oAÓÞ¹ë†i#ųÎ{ÖZ“&Sæw.Üœãð­H?Ô¡nÜ ¥müÍtšf‘qƒyEë!áEuÒÑÜÎÍè‰4äŸP…q‘N{^—ÍsÚV‚tâfg̤cåéŠÛ‚N1Nnì룩%Ä“X²´Žrr½«fì1€ŸÉkŸ¸œ¯à~•Ë^vEM”\9ëQ¾HÇAVp;R²+à~•Àµd4PQ³Þ¯éÈ$Ôo™GËøí …NO§J¹áHUã¾”óºldû(¯C %ýu!+´‹‘ÀÜÕjÞß‘žÜb®mPŸD‡c[ØÝS°KÌàUPpüzÖœ£)YRü’`w4Ë4á|Šž³íäæ®,ªOZ{jÇ9a޵ lô 66{Wü@¶kOéÚ‚ü±1Høé“ÀþuëÎ;v®?ÆúYÔ4yá‹™ oLÿyy…{{7sjmÆI®‡Ã¬¼0<Ò´´U;årø ÛŒ­){Í&ÓPQÃF»ñ×=ê*S8þÎÜ»VLa€ã¥xÕXúúu=­$×RmZòX fÁèÝ«.w3ÃEÎç !ƒßêji2P7Pc½Ke´¦>R­Í:qä[éEC”lóÌ“ÅäÁæEϘ‡¡´æhØàú²â¦X@º*;yDZ«‘ƒÐô¥&¢LŸ+ºfÕNæK-F9¥žêÞKœ)1>ãëúVU%¾U¹Ë‰¯¥ÑÒËw´k?9裓õúT ¨o«?AY’"‚CùÏßbIcõ5ž&aB縅<2åw2§BñncõKÓ=ý´îwŒ³8çJÓ¤¶/b˜,’ ÈaÉ«žrùþV2v–Ï ¬ñvnÒ]›±¼¯ÞçƒZÓÙ$¶7£o„!…Çž‘*ŽK‚I5dZ˜ÊœuöÍ\Š `E<õªpén2ß•9T}Ïeʵ3.Ký‰Â¦èó†#±ÉÜÆÞsmõã×Õê·Å¤EG`åndÄÎçî÷­©®«c»š»}J¬ždg!‰ê=«"YLsáŽOSô­ÈƲ5K"³™Ôõç¦ïSÐ¥+NÏaMÀ1õ¬ð±ÜM‚û3üdgŸz¾Oz0ˆæ©>§C‚OAväFzÔ«aÎrýFÃ8lüøæŸðƒvà­œÇÇ%ª%²·Œ6Ùü¤×¯økSmON¸#rg扇o¡ìkÇÚ1TsØú×kàûè§ci+ 6FË€$ê}3ZП,íÜósl:«‡æê+nÏÚ–»ô›-b™eQŒ°/Ûó®†Úò×U·ÛÍñ0ÈÚÁ¸?ʸˆ"çJ¼¼¸Ku¹“P´ Ù»k«@#¨×3ðÚ[ûoClÐ]“æu!”;æ¹±Yo4gQ»5þGê–—(|OðÔz}齂=°Ê>P:n=Ey¼,Ùùy+Üþ.¨«¼Ï·?U5áñ)Jý9ú×§•T•L4\÷0ª’“Hèt>Væì.ÈŽv07Ö·µ¦±Õn¢‘ù$à°\‘ŽßRk2ÏL–æhÍÌÿº?ÃnÜÜX[ZİÀ–ʃnìü̓ßÖ®¤¯4ú‰mc&k뛩hè眯Ì­- P•î¦U™— cr2zÖY™ç‚I‘ÛëLððš)ç˜ó ~nsZ8®Fš M‹»‹ùn NÈÁÆcÒ±µÖš‰‡(S#ó©ïå¼ 9Ývc¥7V½ma!O'cCò!äÒ³JÒNÚ@´»·þÍÚ_Ël6G'“Kkã ÛoM£ XÑœ“"õe9Èö­ÅÒ¡²ÖÚ•®c1œHìÕ/Š|/¤èú5ÝŒ2¼“KóI,¡°8Æ1ÍsºÔœ£+ÝéÚår»6aézÄ‘éfÒÖÛÌžG.ÒuñŠÜÑíÐßj{n ¥¹o‘[±?JšçO–ËdIØÈhè jaì|¨-M¿~BÃ=i´ªE¸-lõ;5¡w¥%íÁTa õ,sÓÓkÁ~)K}pi÷s®Ý@â zùª½àCõåºmÍþ·w7·‡äA´ì\õ'ÜÔÚ•†#· É`ÜñÜ}:Ö¸zPÃ'¬RnGÓ°8ª³IŸé^5¡ü\Ô4¨ÒßÄ05ÜìûdÜûCŽÜתéú¥–«oÍ•ÌW¾ ¼nWr Ö·5Z¨baj˜b˜‰¥ SÓ²çm”éÞ$šb‘¹~µÐëYÜ{!ŽéFdóïƒZRz¸÷3¨´R] lö£9 vªÖó ãGSÀάªÖmXÐŽU ‡^«Ô{•z lccmôéô£ Å-”R£½ÒPÓsÍ)¤^¦€>{»ÏœÜc5%›rÕ‹»ßJ1Œ?:©m™#åêkÏ;©böQ.O¡¬X­„öûÈù˜çžõvõÅÆÕ9sô©¼-{ÿ:Ö.ÀÊZ`‡#óVÊ‘€:÷4å#ôïõ©cFžDEê}zTÊM°HP2˜q=«sB²khÚfûÒtäTÚeŠZ@KŒÉ߸«˜Tu5„êßCH¢àÐçðö¨IØøêPÀsÀ¨Ê“ÈûÕ•ÑDS©ÙÈë×éYÛÄ_Ágµ\iÙn%ÞøÇ'ŠÐðº*i×#Òæ@MÒí …g“…¨îM'†§ÿA¸$ä›™ûÕèP©Éúi#B)¥{«ˆX(DÆÒ:œÒ¿ W™¹N3U$hÝH%ºç­$ìkÌj<É™qÇ»S’x 'çbÞíP¼é9æšaÌ…ƒÌsÉãÚ¬#ëS[Û¦Êtð‚(°X—ÓÇéQ)⟻å4Ê@yþ‚ª^B$žƒ®}*ÞEC6¥D’j̵£¹æË`öGQÓˆÝo»ãÆ0¹ª ñ$-¸ƒÈ÷­Íjå ñQµ Áî,Æá·ƒ‚qüª¥¼,dÛØóøWƒY(U’>—/ªÕF%¶Ä®CöGŽBÐÉ·<í+•ÿëVÑ€lã§jƒÊRå}zVQªžÇK©Í¹l“¾FûîF:tüªØøøõÊæàcZ–+«st¶£p•nÓÞ¹§7ÐÂ¥D‘kM´HÑÆ3“’ORMgx¦×ÌÓPDÉæ®ÐG$“[XíÂî8-À"°5Iî^pÀÿ«$ªñŒ×%9WUÉì¥UÙlU³YÒib—lÛp nüi/­šxÔÜÈlrÃÿ×¥²¼ˆM!ÚægyAìÕ¡d^ê;‹Ó°¯1G»åSïêkÑöœº³z“ÂÊPŨÊù”ýé·‚ÿ=ª{[D]ÅGS[ D€r{É5VÒ¡yX`°W<(Ö¹^#~„Bªƒ±ª5ÌRBmWs&K ç"ªE{-ÝÁ ¢/'pÇ9­/—Ê™$'qÝÑ-¹I¤~ ãó®˜Mr«îoM.g+ÿØš™Ãùq8õ5‘pŸs…­LÇ&ø×–äw¬Y\íï[ÅݶX¢ŸœS¯QÁÅN|»ˆùäcñ¨eƒ?:ýâ? Tž6©#µÅKTP¹µ1¾ô?'¥W›äpEl)''ð¬Û«FUûž”˧?²È³œgƒRÛÍåÇ4,ŠÈîg¬l;Ê! *øSŒ¼f^¾•JåÊ×IŽl§vâ¯i7Á} ³nnÊœ2㸪ʂDÚN8=¨a%iúRO©SJIÅž‘ã MgðÏöÍŒm;é×I#<\¼j:¶=1úVä*Ðu=-J-FÌFñîrdU*qÈ ò1é\ïº\Béº ÖrkÆ¢½9SúÝísóÌ}…Ä8GTiüDñŸü%¬vÚ{¹±·ùbíæ1êØýr0«G!^ qŠ[5ŽÙÙÛæp>SØEc$å‡~¢º©R((GdyͶîÍ8§»ùTM.G)5¹‡%ÊG,ï÷Ìç$ŠÉÓæÌN2q€ÞõÔO{V@9ÁÀ9?Jš²å·*Õj$ºž–ñ´/9EýŸ®,Vz< §ÇåEüXäþ5&“?™ùãoŸ%WÚvHÆ•/š"ä_ïWß:MÜ®ƒt/½Å¥ÌB'.>T(1€0ksH·Ó¿²îÜÚÄ·Jà#Ÿ˜•~_…pþD¹Õ0_å*@Aï]^·¡ë:$ö“´ÍÞ>§F¯Ö£FåNÍŽ2{šW&xܶ݊s' HÿëW¯xˆ^Ïmh…žÎØ“¼tlÿ…G=¾½¨…ŠåØ äçÏÑjÄúd:v4=e—t%µ:taº±96]¾ñ\zÄð›‡xa@¢TÆà%ÌϪˆì´kV·µ µ¥“©úÿ…U‡O„¤^t(\¸àÅtSÜÉþo³zF0@PõíD¢ Ôi­¾ïø#M½É,¦µÓ¬!´s¤@ûFæ$þ¼Öˆ¯å}VΨTüá€Û’OzÒºŠKsuvé¸ç¯o@+!’öÿûB`ê€bn¸õ¢8ÝÏú¸6ö1®-š %…SÏ¡¡ªºuæ«á­N=CM˜Å*•íp;2ô Ö®§<"íuvL£ÝMywŒsŽ7O¥z0“i\ÌõoücÓ5¶º²®x'11>‡ªþ5êÖó$ 2*FA ‘ŠøöïKIáòžªÃÖº |BñƒäŽ/3íV+À¶•ŽÜgøOQVÕ9¨IÉ®c¾>Ñ|[j Œû.íäáÔÿ_º"ß5 […U¹Q,nцãS³džÕDe?ìŽôК*èj !c–‰Šã¾+d V[±ë1€Gp¸ÏûBµjê-o܈mnÁM>¾”ìÒ̰&ŒÓLzQ@4Pi§¥i¥Öè(É.tðé, ãŒ‘X·ƒËŒñ‡'Ú,CËÁzæ±µK(¤;ˆÁÎN+‘NÇ ¢r±Ý•IùiyM" #3ü=…[ƒK„ãïsþÕlÅDÚéWÎO)…i¤³–i†;¨«ëqœ UÇAWÀëÅR¹9a׿áUñÈVÔ?“Ðpj{YDŸ7ñw®?T.€°fy«š=ûcï·<­9áýÞd%7s¯$lÁö¥MÒ?Z¯m¾ïç< êt½'` 0ã¨Z挢œ¶ ±ÓàŽ•_ÅoÙ4¸Gñ4Û‰ ÓŠìíâH“j…Ò²¼S›c “ŸÊ»°ÔÒše΃!±_.Ö<ñ…ü©'½ ©úšŽyH²†%ëµr ©å6 yø¬Cæp‰ªØ‹Í/#Ý)“'’{Óç²,²œdýfYÜ;Ìq;@õ¬éaÛWf3•™·\ÜŸZ—`>”ؤ=éÌàWLb–ÀC>zÔ¶–++ï—¦xQHI'ž•fÝŠGïœÖ‘Zê ×ÔÔY–$Àà \߆î<Èn±Ñf~=ËÐkŒ’éÖ°ü)(6—MŸ˜Ü¿Ë]\Ö¥'è&ï$n¼¤ÈüÔ27'ÚšÄƒŽ†˜Àã>µÀæÞÅË#XXà ýÓÖ¡lgŽ•*ýòzq“!›p$i<Š·/Î1ùÖŒ¤L•¶Üï]1wFôÝÑ\®3ïH©HÏò¨ØU »µG6Lgž¤zÓÏZ³²‘GâÿN•"ÆÉ!¶—ŽNÆ çIç$d•pr;Ô^*Çã}€‘NX³´U|°šDaò·"¼b½oëÌörØó&[¸´4ÉºÙøfÛ÷}êsy²ö$LƒåÈñßQT.˜<Ôu©ôß ƒ4w"íã¶I†¹Œ¹#si£g^%({È}ýÁ´u™G˜pw 8ÊÿR+;IÔ{¹nSpG!Æ@ëúÖŽ·$wû`ߺ C÷sγ!Ü“‡õëW*J ÏVmJŸ4TŸ^†Ì“™'-½°Ü=)Öð%ÅĈxq‡P{®* |™¹ïZwV-<6óÛH°\EÀcÓ†¸ªµ %¡†"N r]Κ`Œ(Rîêƒ=NOøU F틔ϣ½†cv'¸&¨±©UP~´ù£Þû±WJšVoVi‡‚ø¤·/iS.Á€ ÿ=åÃUvçë>ż¢{R]¶dw¬jQN¥ÌåK÷†\%¾×ö™_,Õ ¶g¸íN9lqŽ•†ÄüÃÞ¤ŠBHSü5Öá{3­ÒZ3"êFóÎ:Ž3Y’«rÝ íZWÅ…Ã9ONr3PÉ'¯Ó¡éÃÝW2žS†Ö§]’ ÒÜļÀ»U×äÆOÔ&t&¤†ÏB ÷ëQO òÄG§zšy“‘ÔsëTv™ã÷O§}K„n®È ùGäû¹È52¾d9ëŒ`Ò:ùgiå[¡¦àƒÏ~õi—=R'¶qŒuƒK1ùá_ˆÛø±Èª»ÈƒÁö«Ê¢NüßÖ‘OkÇ‚ÌqÍ''@0IL§øH=Çjçþ7香®À™ŒfÞfïƒÊçñÍMá‰Yµ%Œº Ç1»äŽ?ŸÞjZ}¿Š|9w§Ü…Û0*AäÆã¡üù¯O?vÇÆç´«Î|¿%ÉÇzепv'rë“òŒpjý¶‡y£xŠ]?R‡d–ää“ò°ìAýk¥–ŒÆÇvÃéÈ#ü+¢¥ed|úG5odÒÎËåŠñÆkY´Ëswæìl@f;kDË|‰³‚4²È‰hÏ,Ê5$Œâ¹åZM•ÊKî}O_wqüÌOºK—óI”\rß7s„£?yè$ÓC`ÒìãÄ×O-ÔÀÓ>à°¥½„m ‹Ç^:Uiõ8ü½ªw²óè3Yö:»ßÞýždTÃŽœzÖð„þ&&ÖÆ^­d¤I6sócÖ«À®l…Ì'%IV>ã×ë[ÚÉTÓ¤>ƒÖ&‘ ˜&U<6úgÞº£-.C—*xtÁëM*ŽpBºtô¤º„‡# ¬åT–fÜGÝ^Æ·B$†Âî Æ#+Åóðøp}½ õ/|]aåØxˆóÂ-Ø\ß_ã^cÏ »å9ë[Ö6Ö#&Ú÷twç+ˆÀ&N:0ã?΀>†â;ˆQâ‘]£+db´bé_=hηàKë{{—i4Ýç 9BR¹è}«ÜôfÓW´ŽæÒexŸî°ïþ}) ›V‡}§š¿~"O~*܉àIGFÒɉ¯b0ÍÒY‘f¶n±>èk_І[OÔ׆Edh4ô§Pz ?†¤Ç<ÓÍ6€þ”ÚyÃ@6yÝÒ¨_=©•Ž?hDâ >§é\,ã+AȧӚ¹Ó ðÄ:4pÜ-³ ˈñq&òpG#ŠìŒ“…˜éÂò:-'BK(Æ÷óƒ·Vú&*8Täg¦?±è+$’;b’VC×ô¬ÏŒØ¯ýtÊ´”óTuµßbz0­)»IWàfDQ™ =€«[äÝ{Ô¶Ðÿ¢Ç‘Ú­${9Åy¤åU¶Tv(ÝB0W¦F+‹òZËXÙ/1ŒÇ“Çß\GÆ}«òÊ+ÂÇCEzVº±H_P·9õ+ ŽzŽ”Á$`Œ©ô4†& óÉíYr³6FdÁÇ\ö©”çõ=©‹sr}J|ïZ¨¡$ÆH0’9èý+¯*f;ÐWCzØ&Ç?»oå\ç…3c31¥t¥û™|‰:B£ïu5§ŒS‹¿…BIθš.äxÌžÝsRªò *Çóæ¬Ä}hJÂe½>,Mk«gÄu«DWDU‘ÑMY‘Á¦õ©H¦EË""¡”á LÙ®_Ç#_ xnæøm7 n‡»žŸ—ZEoã-MõŠ6šu¼œAÆäv,A#ùW[-º ŸÛzç×ãzPžM\]Jí5Ôò‚îz–&½¦ÆD¿žçdF„t$Zð3 ¯i̶>–yá¨C›Í¿Šjì’qÈ<â¶í¥g²`CÆáL]'$®}³Ò­´ca\cÐW™V¤dÕŒëV„šHÈh³tÄŽ¼ …¬¤;`õ\‘UeíܹAÁ¥¶™£r¬7ó­ AÀÎG'­;jjÛ‡¡›ÔèÁtòŠ8uã'œÔ–ò=µÄNÖBlzS[ŽWIØÛ¶ðö«æG4vÏ;•Á‚9DZ®ßEÕ仄ÿ˜€I#À_óÞ´49E刕“k>  èö5KTÓ¥‚ãíÖˆ¯*òØÚ¾g¯§Qé^Œ)û4¥’Äc&Nd“[?‰íšýÞøð¼*ªÔW=sæô‚§Q]Šõ(Ϋ™Åö_26 ó 6opkÕ–ëäžÆL²ýå9¤¢¹ÝŸœy[Fõ–…e¯ÛÉ*Yfå Šäžý«*] Â2R[_˜pC;Ó<=­ê¶wÀ¤)µÝ¹}–·5McR¿ÊK2*ggbùúq\íÖ§W—xúìë^g'1€5£ª\;ŒÇËVt(î#Ý9mÒã‚y<ç'½\Ñ´ëIuM·©æO!$™¾PÀôÇLv¦­•Ýíö§p“4!'Ù¾<ÀÆ1Ó·um2mcBä‰`c+回¾•ÄꚈÍ&c)9QäVž¡fÉ5ö¡;&6¿.áU¼)m†á–vy­)Â0\Û‰¾ƒôùu”´òb+#8 µ±åN]þþM×ÓáGðƒÏø Øš²»Y¢ùˆ;±×#Ò¥½Õ ÄÖ°A mÊÒ¡å¹"¥Õ•ï¸X}¾šÚu¬³aE Ç<ž™úúÖ>©qæBT¿ï¦p /Ö»]{Åo>Žtû 9wOû 8Úª{ýk³Ðf´¸Y¯dW‘rB˜nϯ­U&–²Üè‰$Ó.%‰¢zÜrÇÞ¦´ÐΟ8žY7À À¤»”—8=²}ª Íu’ha‡kªíWn¤’ióM†„>$™Œ0[/;Ž}Î:Uý3K6ö 33|̯ÿZ´äÒ–WFØ¥—~eÍWº¾ŽÎ6UÝ#¨ùˆà …WrÀ-Õ˜z‚¯Ÿ"ã§§¨®~æÜ‡Êuêtñm0‰@É<Ÿ|Õ ëM“p0¤¾â»`í¡&`ä#pÝûU¨Y£ãøG wË»Pàã‚*(.6H"¸ùIþ1éZõ/kPkXÓõTYЋpË’¸<éùõ®†ÃK½ð…øšÆG¹°˜þúÐàpz:oÏÖ¼ÿÖs<‹ä•Üã*sÃ{W­xzi •Éó¢\wFqÓži ìm/#¹%‰Õã=ÅT-öMtàœ~¢¨‹{‹ ¯>Ï}ì.r?Úõ>â¬ÜÌ—6‘ÜÄ>dn‡¨5tÞ¶îg5¥û€ô§T8’0øÍKY–;4SsÎ(4ê)¤óŠ_å@zS <ÔmØPœEÈüqNŸ×cõ§Æ£>ÔËŒùäô®KwVýß^j Ä‘è;ÓÜ9 zô¨°‹ òz“YåKÏžžÕ~0_úTÖú{I&qÉïV»!Zæ:é^NŽ9=…wÖ*#EAÐ s׊­QZ[€ñÔ÷5¹òÏ9Ù+-M¡h#£…†à{bžç€GzæÅü˜ëÇVÝ”ââzàcñª½Í#4ô,¯J­ªôE®*Ù5“¬ÏåÃìÒsùV´•æ‚«÷Y§m6±öA¤Æ?­Kfseû”Ž0õ‹ŠŒ‹Âˆ$û†²ä\HkYºV]ÁÆâ(@ÊÁžsÓµNËX×¢A1†!¾aÔö©þs€Ç¨àúVS©îs¶®^fÁ祜0è+6kÙ8RÄU¨.“ËMÛ”ž£TÆ´[ }ë Üç ‰éYLhdcþZ½iêsÂ4«¶óýSt`O"ªxB?3ñŸúhãõ®Ø´è;wD?=;Ò•;þ•gìÄ9ô¥1aó\ÍÅp>|zUØ#Ëçô¨"€—æ´mÕGÖš‰¤b[…v.*CLVùh‚Já¾S‚MY¸ãÏÒšzP[9ô¨$”I";™V(Ë1Ú d“ÀWÏ^?ñbø³_Kk7c§X“µºyŽzšê¾)xð$ðþ”ûç›äžU<(î£ëÞ¼ÎÊÕmàÚ;wõ5Ɉ®£#ßʲÉTª§Qhµÿ"Ü•‘¶²ýÖA¯Eø|’Êdv "‡åVõcɯ<.=Oo\×­À„ü+ÅÒmŠ»ÌHK’ÄrkÈ«Nu)K”öóšð¥IG¬Ž£OOJ­;ˆÓyÚ8©DÉ%¨š#½C©¬»™Ì|tä^E(93çiAÉù[ê p$•ÏsT4Íniá`´žxâ8òË$~ÜõjÊØÅ p>R9«öúu¼”º‚†ÊTåN Çqb"”ý Þíä×Q´bâc"FÌ GzÑ`'°« qŠ£s:Ÿ:(™Lˆu@5„¤ç;™ÓZ¤U¸¸ç¿¥f4s8”„´—oêàqSAo ƒ€2ÿÒ»¹8ÜôZ8Ü|–0\-÷G{Q ÖycØûU‰a&>OëÞ²/ÍÆ 2¶#ÞÜf¦›s\¼ÄÂrj×Жí£ÉšÝÚˆê0Aã½cÅlßkšîYänÀZ|ûxåÇߌzqT§ùÇ”…€`yAö®ˆEÃDo qºhžÁ„¥÷n䑸Vv¡Ùç©$銻áä³È³Î’2nú~­l$CÅ¿‡ÐšÖRQ—)ÑJ²u.¶g;!c!uá‡_¡c»Ã'ÌzûU¥Q“ zu¦Lª#8ùXr¸ªLõKB„Ö˜#¯¯¥>ÎBd"n«ÔçS#«ž¿¥+B"ž&!Xäewc#Ò†úŠSû2*Ï;'Í·Z‡gÚ lt@ˆõÀ°ö­­zÛlð ЪmYR:í'ÔVJ—Ža4C÷‹ëЩê±­"¬µ7¥>zjHl…eTõ+±Ð-¬u½5í®àCu6¹à°öþµÊÍäË#OnŒü̘ÿWš·ap`ž7Î1÷\õSëÿÖ­iÉF]Î|])U¥h»5±éZNš4äKpîÐôV$t?Ãëî+f[(gM®™z«¤Üý¾ÂŸivP\/ÝÉô­ö¯^ ré±ðµå/hܾ$y/Ä]:+/°Må à£cŒ«/ëÒ¼Ýä¼Ñ.䄯Ò@IÇ÷Húö5êÿdO°ÁvXúò¸ÞO§Æ‰ÐäòN srû9ò÷2œ¹ýç¹›o~×Ѹ¶•c$nbØ­MGUþÊI £Ÿ0~é—ÙþDVm…ù¿HÄ©×dV™×d¸xíµ«„aDhØ;v㯾}jjE¹+­ MXÎ·Õ­Š X¹—0ÛÜW£è iaàkio£V£; ¹vf$þuÃË éqeÐOŒä |ŒzVÕæ¹$º†XÿsnC)x 1\˜º^וFû—kÜäµÝjmvd…lšÖÚ3ÐOQËÔ×aáé×¶Òë|( –Û†Éõ÷®J b-^O)Q£ÏLóœÖ¾ŸÚ\rÅnï|å•ùRGZÞ½9*^Ε“­ÙØêþ—O°’}:µÜ©#+Î çÓ8®ûòÓU’ãUEI@Þy“ýkØøöÿL·’×Q…®Jð³‡Á?ŸZÉñ‹WYbŠŒ¯ßvl±ŸJà ONN3Wó*N-]ííÿ´Æ`u(ÜdQ©¦¥hûmáY páéÛÖº_h¶Ñi‘ÜMµ®$ýàŒä§·{¢A=ôªŒ˜NìcœTOUq膠ÜO¼½¼žw;©< Enx_Â÷z…Ôs\Á*Z/Í’¿{èë¦ÛÙNžz.áÃ]Äfº4ŽÅ,$• 'Y5¬ñŽ^ìW/›%S¶§«I F¼pXþx®FæÉ¢&7 ûÇ©æ»-^Çí·°Ã§É)UIq4M…ڿ§¡'¸íUõH–;RÁ?rIÚ;ƒÓéJhÆ)D%çd"t§·—d}t¨õÅE"êSe’zKÆgÃÃé+ó‘ФB’ô<÷VâÌASÞ¬1Êž‡¨¥‚ãcì—•<+WAß êé¥jQZ߯ÒY9ÚHþž¾ß…{l6É wvo؃÷ åˆôï ðÏ!e!R5ÖøkT¾ðôŸ)vƒø€>èc=sLÕVy "Ã>xˆ¿Þ¨{Õéì–HekBªìGbG¯½s1¶™â›%òJÃq÷Õ:r;©ÿ ·§ê—š]ìV:Ñûçl7c¡èþþô'gq5}‡H¸Ù*ž%\†SÇCZ=«6ÖŽI£`¹fÞ¸?ʯ)aÃr?½N°¡¶¤¨íGZ*Js@>´j8>´¦˜{Ÿzu3œÐŸz¢r9霚””J¼`w®S‰”Hàâ…#GÚˆc$€xô¦IzÆøâ¶Œ‰ork6KtܽiZc!ÎsV´)4‘$²—Èÿ9¨$b@QÁÎiçÔÔ9¶zÿJ¨ïq6"ü™ÏàkoK½›_¹â°Ksާµ[²,ξkÄ¥g¡ÖyÒ°õ¼f]C†8_ZÔˆâ1X:óq ?k`~5µÕ~áÕØcì0ÿ¸)_“T4k™%²ˆ¼3íW¦#î:VS^ó4„¯Wcü«W­­&•FYT+e²OZæ!ócJÓ…Xá@˃וKµcHnTÕe”¼.H­/ƃN–îÈY«­X¼Z=Äîÿ:€Tv­ŸðÅpGïe,Y¾„ׯ…£8P»êÂß¼6¤·1QqÎjóUsÔ֦ܨ¨c œ~T€áêÌ‹þ}ª³©ÎÎ((™$éúTŒÃŠ¥œsþy¤i¹÷ ¤‰å” ó/øèÆ%Ò´ÉÀ qp½UÆ¥ñ¿ŽÜI¤i³¥'™[ˆ‡÷Gû_ʼžý™¬Ý«3ø×'¯³ôùNV”>µY^Û.þlÏ´V¹¹–íû©Z˜À ?„t¦[Â!·TÂ1øÔÄìCÜö®Ë™è}%^Ê–ý}w&Ñ¢K½r×ΑR˜K+z*óù×¼[C³¢?Ÿ 4`á%%HãžÕã>ÑŸT×a„ŸÝîÞÿ.AQ_AC $aTa@è+С¢Ññ¹½~y¯ë©Àx:îHí.ôK­ßjÒå0õ)Ÿ‘¾„Vø´ 6á÷IÎ=ë;ÅöJ¿¶ñ5°ùaà?Šx8îTóô­ˆ\I`rÈ>µàf4¯4~~g% ¯–ÃÖ ˆÿ"¥UÀ¨•»þU`F?#^Lµw4m½ÊR\-»ùSª~䇅?ýzŠÛÞËpɶ>ö3úUù1ÈíYóß$s»‘Å4¹’"äô!¸ÓVKß4F¤Ç8ÅMm VЈ° ÀsWã $A¾nG5Ÿsgöܬùsà pÜ6;B+§Ÿš<²f³©xÙ‹qŒ£b°e·yg•ð:?vÁô­9¥»Œ=®XN6“øàŠÌ³‰þ×u<΢i,6p£¡üjèÉÝÉþ£&´B°T1ªð:cڳ岟í­æØU+¸íé[öËqÞ¥´‹Í@û9lãð®—W•\î”ãk,,^Ý,Ĺ,Þ¤õ5&µ K.0éÛÑ}š8-Ôó7z«w\Bêã(ÝsY×|•6û¿™ÉO¹ÓKDyÄáÜoæ9ÈTx1»ïzVÉŠ yÝâá}qþ"³/dˆ¹l0s÷¾•שôJ¥Õ’ ·²3¡²`Û»ªX­d/– Ùû¤t uõ”ûi<¹#d“nC1[–Ðý¢ îm\»»nžÙr7Õ×ÐѹT²ØÊUew±„%c&Ù·4/…u'‚CõRþÑìîÜæÂOË2ô?ýzظgC<¡8Üÿö©ô¶¼y>Ë sŸ+ÂàÃúW_-ôfʯ*æŠõ[â<‘äÃü_y:‚(Ûå¾Ñó'Pk¤½ð…Ý´¡­‘Œ-зUöoLzÖ¼þûfލɋ˜F‡ËŸsëU3wLΦaF)I;§ýjgxkZ6SG—òFwuÀÏôï^ˆ²¬€09R2ïšò( Α|^v¿U>â»ëèà°,ƒl.€¶zuÇ=«¯ ?²Ï9ÃÆê¬:œ_݇QÒÕfVrò²1þêùV‹lãÕ`[:‹¤HÝ0ÜŽERñF 5mrÖ nÈ I-Æ¡²¹c©G„ÎâǵtÔ‚k›ª>}v1ô›9´Ëí×°J‘¸Ã>Âv‘Þ»Ág¢ë:h·7Öï.NÌ0 3éÐÕ©€Þ£“òžõ‡q ñÊcLƒÁsõ¯2ruýäì×cE¦ƒ$е' kt“Äz,êrmXxvòæÆà>ÅIk§;Xÿ:•gFIê2ÄÒ\øâÛD¢D[©‰À@p÷5…I×’J 줢·9ÛŸ†æ à¶Úš[ÈÇp‰²NߨúzUë/ › åß#M+eZC÷E]Óm¯ÍÛk:“·ÚnB”N‚4=½¾•sV&ÐËe"ÇqÞC.C{·ˆªÚ‹•ÅÊ» ¤ÙYš”ŠH§R¯‰»8è:¥yáM#Lº’Sjƒ$c,vrxÀ5…βïîôû‰”£EŒqÇ8ì+¯„ë>-º³ó´Ç±Òáu•ÞSóÊGLVU}¥9ósi×QÆÍZÄ3j ¥âFYÂÆ«–ü©þñKÝê²\]ÂЫàýÒvª© ‘×’XŸJèï´+c›!RØÜ˜\¦¥c.™¹®wZ•oŽüH>ö…o¥Izsóž3Ú±ï. Iž»³·Ö¶£‡Š’q¤ífgñçFrNÒ}E=žwy<S^Eò(cqÊzl¾}¼{‡Ìºk½>Æg9(–+†IGÝ84¡•þSÈÇ5~üG,ˆÿ0f©ëU Cª÷8ÅuAóE2Y=ƒ4— >9ù\ð;zô]8þñRg[IØa<Õù%鞟y­¤2K2E 31<(ëšö­äÓcÓ5r’FÀ"ÈTðßÝ>‡Þ›Tiw6w¢kpÐN¼˜·|îZëôÝB fÔÙjpâF"N ÿT®4›Í:2¸ûvš1²3İöOp+NÃO†öxfYD|+íéôe4†iXXÍ¥È"35Å O3—ˆzg¸ýkhr8éØÕ[etŒDü2Ž:àãÓÚ­(G~Ô1Ž”O£ùÐ1” \QŠAéQ¶yõ!ôüh‚9<Š”ÿ«Ïz®­óûTÄçŠæ±ÆV“äô¨ÖCÀñR\tõÍWÊzfµQ3l¾%ýÛçê)b“ûSHÄyÇ&ˆÇó4X6âyúTE°‡}*ݽœÓÆÞWº:Q5„–Ày©ÉÁ8çšpõOrŒ;¤|ãÿ×Z¶‘þù@ôçëL¶±y9QžhÁ`c›{OÆ·K•mÜž[onÌßÂ?Zå/®šK„ÞrÇ­kêó.ìsø ç/ý/ß´¢µykc­Ò®·M§`ûÖʳºnfäöö®[LŸ÷kíÖµ´Sa±ÇOL×=i¨jÍ)H5;ó¢?9'Ò¹Éq"ä¿$žzVÄ™w,~õU’‘`­^kž!Î|ÏcYÝ¢†óÓÞ¦ŸÂ£ÀMì£< Õ´Ò¥•>s±r95½?}û¦6e[x̲(EËWGel-ÆæmÎ{ö6QX!Û¸±þ#VV`#$œ×5ÛNŒbùžæ‘Ð¥âW  \œã 1Rø>q‡-rzîþf¨xªQ/†æÛÓ+ÏãKáÆÇ‡l†s˜óúšïrÿgºîEß´ùY»\àŸ­.õ|Ö±·Z|3´r:w®e#UQÜÖ`p=EE*ñ‘ô©†íLoËW7E=µÃ|BñIдï&ÚL^ܱžê½Úº­V·Ðô»›û“µ#\ݘô‰¯œµ+û¿ê²]ÝHÌò@=°¬+ÕåV=\·í§í%²üX–{î±ÜFrIä±=êãÅæHÓ“DAbN:t«)Êzšò$îî}å%Ë 29c?MDÞ‡Ÿ™ŽÏ iÓçÚ¬é¶3êö¶éº[‰6(ôäÖ”!Í4pæUýŽM=^‡¥ü+ÓãM*âì¦%–]»÷Gjôuâ±ôM-4 ÚÑv“ùÛÕSZm( šöRVGÀT¨ç.ißÁÝ»[JÒ@U”ô*{W¢´Ú]ÜÚÛæKaºÕÏüµ„ž>¥zí“’Õ•â %¯cŠêßjÞÛðÈz{©ö#ƒ^vgET¡wÐ)JÒžâ§Vä~µRÒu¹&PËœ†CÕX~†¬Aȯ’i§fv„ÌHr½@Ȭ‹›f¹•±ŽC¢®ÝyÞC˜âAÊnÚÜá=Uðý¼¶Ú41LŒŽ §¯$õ­c%s-îi Ž.Å«{ß³Àá?ðíBU¶)ú|m × K3™ vb6ؘü©ò…0:Ø#œu¢2RvîNò»0ï¯|Ô‘1ßšÈä!å¼ÏánàS畤šKD¼æ$ù¿Ã·<þ5<6‡pÜ2;â»9#M¢Pвè-‹3ï 뻡=ë~Ú2ˆGË<|û3Àö5BÎáÊ ½ù¥4ÓFŸ%«Ìç…ÚÀÇ=+9ÔÕJ;œUê©hˆÍÄöë6Íì $ˆ¼e”ã#5“sw2<ãÈŠ3¹"È,ÍŽ­ÛÕ~ÚÛìöQ#2`³ãûÄäþ´Ó @Kt4±Uy«7éù#ššÑv¯hÉzUKß0'Ö¨ùvÒ@Wcyêpá—¨ú×_ªÚCyn¾ £ å00pÁû¬½®ª5¹£d{øzÞÒ v'µÒ’ta,l‡ƒ"úΧ²³¼¶xå€1SÑ£Îìg¿¥j謷à#Fü’ äÀôü+£‚3Ã"àw¯GK9=F6tdâÕü†i¶p²±šÖ ï÷ÝmúŸzÕ†ÆÚýÔ/Ѧ[•ÉÆÞ½jÚœŠõã¥iI·q‘‚3Q éÚ¬šB*¬evrZ÷‡`¼·}©µÁÜ(ëþÃjš•Ö‡§}’ìbV£¸`:sØçô¯]Ÿz ð‰Ú©ÔuÓcP‘Ÿ-Häç¾}+/dœ¹‘Ô±“ö.”µ_‘ÊÛN×Ü^±l¹ ¹îÆ´4¦gÕmBœfAœþ•Ic[¢/ÝQŽj]ê;Mn™B´q’Ûväƒ[I]4Ž#Ô|E Ése!µvÝ2r0Ã¥pKwqa$vºÂ4 ŸrVY5ëþ¼MoD†õ6•tÎ8=Ú.¨À`ºµŠD<à¯èkæž)àÿwV?3§“ŸXž5©é„¨n⾉í¤9W3(À<ãx­Í/Â6‘YGrŽ÷sI÷e òŒÃük°ƒÀŠ}âшÊÅ?*Þ¸ò졉"UT| (Ûò©žgí- :þ©[Y¶ÿÚv\†I£Êgf0;}j…Λs")’ÙÕ¸ª:‡ŠµGȶU3ò¶ÂÈ4ÈeÕu[«6i匬 ¨^ ƒÎ}«j˜IÓ|Ñ’åëäÅΟCÃV«ö«i“æI!‡b+zÞ4³„ ?»T9>˜ª’Ü9šy¬œ–i`÷°õ?Ëq¶öì<„  õÂòs^t©ÎµGÉ·sDÔV¥›hÛÇÕ‰Y­çË,råο¡ËëO}®'úRA‘Y,ÞŸâ·Õ¿áµýÆÃ £'#=ψ3 1$àûî£N÷£º"M½tK&»ŽHh¢Ë£oÿZº¨.`Ž?*¿bŒaå# !ô__­O¤ÙÇö%óሑ÷I@xük3Å2¬~Bƒ…½+–¥gˆ­ìÞÅ(òÆç=ªË$X·läín¹ËhýþèSt1f“û¸~µ«©Ü,§•àng<Lz“V|/¤Ëiák»Ò^îQÉë´‰¯Z(^]tF-]˜M"¤Û nR vÅBØ‘>a€zwéW§ˆÇ3ÄÉûÈøÎ;ñªè A’] uë])ÛBL]R!—ør+8dØÖî AµàgIö¬IŒäÊÃò®ÊNñ"[—,˜A?œ‰—cКììn<ÔóÆáœc„úW%áù_F]ÑQ³—‘w(þuÝZi³Û¿Ú,¶§÷–¥·)ú/qZÖ隬ÖqÆi-Ž0QÇjèÖ(.Ýom$Ù8^ãчzÁ‚É$·ضxKvçÿ*žÊCÆKrÈÃåx±‚Ò5­Á—1Nž\Ëü=A£Ú®Š ¥.#R~÷PGPjÄr7 '^Ì:þ½OFi™â—?:Š)¹æ€L=iùýj7ê(Î ÁãµH²dóÐT,àúÓ—…µŠZœ-‹)ÎIè(¶Q#äô)“‚õäàƬÄQ…¥Èß?‘šš°9ëM‰8­ L—®23“ô¤ÊKSrÂÌElåˆÈ5a ŽAó ŒÔƒ p)3TŽÕkùI 1QÉŒqSu¨¤S¬szÑQ4c7'>ÕËÜ˾ì¥uš–•%ÅÔ“ùøÈT¯Jå§³•5 ‡h-ùWE®pÖ‹½Í«=ÿgùzìäÓ­Ëg ¨üMK¾H<¨Næ# Ç­AïÁîIâc«sKÝèkÛFO,¡2?ˆô¨f>E«•8 p­M€FOÓéM»·ß§LøÇþ¢¸éÁÉY"äZÓôðäM?$r¢µ_¥AǵJͽjTãN6@V¼™PòpÏ5•i;j2nékÂÿ-wúTzįwqª¡þg>‹ÿ׫VàED©Âðö¬*VsÑlOR¯‰X å}?­v%û˜ýMúÐî}™ÇÐÔ>&MÓ'#™®úWúªO¹›þ!Ñ©ãß½òc׊|kOµš„b®jÆ FµA4&§Ü6}+ñÞ¸t}fˆ¨žPR2[ÈëøU7es²œ\šŠêyŸÄÿ.±tºm«n·…³¸zÿ:æl­„váÏ^ÕNÆÜÜ݆mÅ~ðÏp?úõ±7È<¡^Uz·>ß/Áªi.ˆªx=êä@ù9=*¬Xžëhä)ÁÅ_œ/\W5µ=‹é¡B^#'»ƽá–æ´º«‘O“=I,¥yË1’ùbTgÇEÛ°¯ <;¦¦•¡ØÚ†Š[=Ù¹jô0¶§ÊgØŽkS] iÛ÷gŸJ…2Pgò©Ï'ò£Šî>aŽA“V|°ãrjŽ%iE&“щf« _†V ö÷ÈÝ¢›+}¡÷Åi•#ŒuèkC[Òmõ.âÆä~îTÛ¸uÔ{ƒÍahFïË“O¿ù¯,ÈF“ •qòÈ>£õ¯›ÆåÎ/šë§W£'|ÇÎÆÁëO#­O BõÀª*<¹ö‡$­xÕi¸ÉÅîÓÙŠçO2lëß‚iÃç±?­G-ÒÇÎýu1OdRM»#ø™\\áXíBÞžµ©$ðÛIÜ•U#äsÓŠ¡=ùûQÙ×z´-À’Ö5r¯žNy®ª÷´[:ª©r]†û]ÒKã 9ùÇÝf>ž¸¢sN!*cû¸éÅViÖrÎpŠ:“\Ó—6džñ#ÌR•W^xÜ+"óUC~¢'Ü‘+yŒ+“Ð}kjxcœlxÕÇ]¬ Šç.ìñq$[6ÂãBñ[á#;Èé¡MMÙô#–îi8_ºGÒmaý¡Ú!ä;Á›’%¶‘0ýÓ]3Åé€>½k ³Š8†ÕUbºêN0V‰ÑR»‡Á¡”,e³–3ó£ðP>^½ÿƺ«IžXñ4{%^¿Ý5$¤±‚ã’ úU¡ òŒJú<->Zqk±åbq>×I-ˆ¡\&RI« ö¨ãŽ=)øçØq2@ݽiduN§ð¨AæŸ×žôÉÖ®Mµ…ÅÛ†1Á?–:¶|ãpßlÔ®®Nâ 8¨$æ½·âeÇ•áÏ+~ ²ßµxµºÿ®?(ýá–)FYOïFrQLŽ=ˆð})—ý:Dìpß•®c²b§‡Zõ/„z’ˆ.ô–›pÿˆ=•˜†®¾ú÷ì° Èsa^]àÑö . VýíW—Z%\~ ô½NßíÅqÜÝ@ìÀ×Ïæñ„çΊ-¤Ê#Uº7îásÈ Éâµ5HΓ!‹.ÜŠÌ·°\ ïòà#ŸÎ™=ÅÍ…Þõv’rÑŽ›}¾•çEFŠØÒîÚ™!1´÷<ÓŠØðð"öBån§®ÓëQKg3¹6±£ñ¾3æqבүh:[Ù™®e“2Üã(ÕP3ǯçZÖÄ'Iê(ÇÞ4µEilLJps“ϹÿìB»|‚ÝJèï¦ò##1ôUÜȬ™/ìÈßö¨ÆX3ß—Z(Ö«~èJ*ú›‘Øvp)¦ÖÖ"eòÔ1ê}s\M•ýíιçÛ™RÑ3×ß_ð®Þá^K]Ñ|Ä ‚;ñ\Õ(Î2Jû”¤š .¢Aü]2+Q†×TgûJÇåä3îãÞœ× ÊñܲDläþY¬‹½"÷XÔb>D¶ÚzXIÃJ~‡ÖŠtfÚ•­Ô%+­‰-¼/£;¥êí¹ˆÊrJ–Ý+vY€ƒhDòñ§¥>ê1¬(« l`UI1åàž1J•Vœåpi-Ž{[¼QnA‚4p$Uɹ ×{œ ÷®§\‹(¸ä’ǧã\Ø •nHû¬: ÷èA$š9äîT J|§ÝµÉí\õä/g?’Ý;7¨í]<»x8Éî;V&²2àÿ±ÎkЦýã6Ca3@û€Ê¹ÃGØé^¥á£*'µvžÐœ`<,{7¨¯$±¹Xî#.xdö5èšAžÁÅýƒ·žgˆãc)>Çò­ÄzÕ´QÉo›Içå8ëßÚœ¶êçf_»2®¨è—Öú­—›Ù*ž ù1Ÿê=+b#¿¶«ƒ‘Žþô€tPãïßít56=hR ? úÒÑI@ š))3@ M1»S³ùÓ  >¸ú“PޏôíSÎÁäÈéþØ”åˆôÍ`å©Å$G6 ˆu!ªÎI óŠdPäîëëWmá =ê\šbRÔWG¤ZO9‡Ì~éö¬ë+6DãÒºDPˆF ¥\õ5¥ nÄnõ<ãò©d¨ÀêkS gjŠSÅHNj¤òtô¦"½Ì«e˜à¦¹+©EÆ¢#(QsW5}S͟ɇæUäã¡5š»Þãžþ•ÇRs”¹c±…I¦_1ïÄž€TlÌžS ”)ǾjèV0¢¨Î{Ö„úP“G’æR»ƒ´9®xáÜ–» ŠØg-ÏlT—p“c(øÇãMÒ¦76Q³œpàÿxVƒ.aqØŠë„"¡îpH¶'=qÖªÜÌ|ýÄûÞç°©îeØ€/ß<-S• ÕWæv¥7ÌùÊ+lS2ËÌîw?· ©Õ‡ÉŽ{þ4é2ïô‘€_» š1\Í¢Y[U„Ï¥Ý)ïýVð¢ì;lu‡âÕ­NåRlƒ|Ò¡Ûìê}ª¯„Cc¨=D®?ZE®Í}´tÎÃiöÍž ¯1ô§ÛëYÄèƒÔ¼Òcñ¯ø«jø¤ØÄù†ØymŽ…º·ëÅ{,óˆ#gnˆ  ¯·ÍVæì³~òWnzòÕÏ‹Ÿ,-Üú,Ž‚«^ï¡jÊ’vU £¸¤™×÷·ÂF¥Î}þ¦±ŒHƒ¬“ôKZ&•º·ï.]W@k̽4®¨Ý:’ßR]&òVGûÏó“îjÅÌâ<¹þš‘È…Tp:dV~¤IAysKâ‘Rj•/Dlx2ËíúÌ3ºg÷Ȫ7r!^ûçæ= y_Ã=?÷Í6>HS¸ûíÿÖ¯WOº+ÕïvçÄæÒýê‡U¿«·æ£oÍR(§mÍtžH‘.ÔUQ2ðê¼Ó”ü‚¤€@3Éè=qUŲ<‘Êx‘z7|ßJ6´ú‹±û‘ P?Ú<ŸÓoS’°&R¿‹ä:¯ò¬wå±Üƒ[×dY9íX œçñ¯“Íé*xŽuö‘ÛBMÆÃK§?•gÜ[y®6ŒuÏ5tçyÇ~iø¼ÈÍÅÝTçÊîŠ+b†O,p;â­¯—˜Ú/»ƒSÆ™|öª¬°)˜]rrB±ÔJ£–ì%QËv_p’õÆTõUm¢‚1G#ø‰$óõ©˜À̦WùŒ}Oê!v¬F„ä|…ÿÎ*œÑÄÿ¼%H<æ•îVíÇr·úÉp£ük:õ¥I¶ˆ€À¶+®…6ýMhÅÉèÉe¾HÃ$]F0j­WìMÝ鼘žM½2@¬è¤\Jï·1ä·ÍÚZÒ[ÿÞ+ ²Í7{ùWc§dû—_’²Üì¼/}6§áû ùÑR[ˆRFQÐ;{VÉéŠÏÒ ò4ÛXâ8‘ࢴAÎ+ë"ÓŽ‡ŠÞ «… Š_ò)MY$ApÿZJ\ ~•ZþYb²–H|ª„¢úšMÙ\;â@Y<>ãåʰaëÁí^6wæ®~ñÝŸ¨¯Už+­sÚ‚Lï<àî]ßÞ+Ën2qÆJšUH©!'sføÓIëÏZ.ËQÎT>•#De‘±ÉS»JÔÑmËê#È:­h3§øuÜ[¼-óC5³#¯¦MuÞ•¥Ñ¤Ó§|Üió5³7rü§òÅs‰tïIe†+‡ O÷O5Ñ®4¯ˆsDda¥j%PznCŽ? òs*Ðs[¯ÐÚ”¬ìÍco$7+r1ïH,Œ¿ëNÅSœzÖ»`À dÜ_Âóù*rÀuí^*íÉ6¯cw w,'Yí<ÖŒr麵,/὇ÍCƒÝOPj«$~¿Ö²^Î[k¡5²1ÎÑZN0Ä6Ú³%7’hDè0pýV—D¶žO6âÚ'¼y5ZëS–ÞöG¾FCTaÖ'¶ÖáK¢ÄÌ› í Û ^0çRùuœ[³FÂiД¦ÕŽ+R±Â"(¢÷õ©G5çÏR.隨¡ªŠ$$µ4€lSG­8_ äÔÓrœ¬·cvH… I#*{ŒÈk #ž@¡Šcö­Æå‰õéIŒÐÖê|¨ìCZjq:Å»##r>õÉß[(}õk/õêóZFï½·nôÍrÚÆ„¡ÞUSýÞÕìàñkH³ Àà¶ÿ ã<ÖV© }‡¿ {â·ïah¤'?Ž?•dß2˜Bž¹ç>˜¯j›Õ3‡5$)ógvîÄzƒ]‡|D-ÂÛÝ>ÖSˆæfãÝ?ãX³õÈúf«ùYû½ø9®’`²»m>â-FÁÙGE+Æ^Qÿë¯I·ž-BÒ±´z©Å|ùá62ZÜó ùC–è§·ÓùW§ÙßM`mî-Ìþ_/Œuéþ•!øó>®£ïc¨«‚2;Õ[+¸ïmc¸ˆådgбìôÈü(èM;(Å6“ò9£{ÐTÓéSâ¡aÀúП²âC•©#ƒïж֦L°© €¢eº÷Ç'ÊîÎnVWXðæ¯À Êš¿j™Íc*—Ø¥ vxÁ÷ÁükV°’uœžEiÚ\‰áÉëÐŠ× -âÍSèLôÌð}©ìN3Uem€·é]ˆbM Nk™Õu&“1Bp¿Ä®_Îòd&à=ûÖA„J¹ãÊ´Œ{œÕj7¢)ÛÄ9'’8§¬L'Áþ,`V­½ª¸¯"©Ü7úXƒÒ¦•¤î`Þ†ÌI¾5væµ­ÿÔZ¥b¾`Aß½^ùg1M®‡U5ÔÉkìí`ñþ‹treþ½h” r{sUoõ=.KwŠâöãûàA®GWñ¤†É­íx|ly‘ýÑÛ>µƒ‹…ß@rŒM‹ínÖÀ‹‹™nÊÄÎ:šoöœwq¤¶î­wç½yß$Áœ³ÈÞ¹5Óx|ˆƒ4ÅDió785‹¡/g£ÔÅU¼ŽÚ<°ÍéYßM=Á·ÓÌ4¿Âµ$0]ë$-od:/F’·¬ôô´ŒE j«è:š¨EÚÑØÑ¦ÌÍ?K‰#Êþũçòj·†b1[Ü þ †®¨Y3CYz‘KE1ÂÜœ~ WT#jr^„ò¾dX13°8õ©’/éÞ¯y@ zS%jR±Ñõ9ï\5¾‰{/u…ùÿ€šð(ƒ¶M{æµgöÍ6êÜÿËXÔƒ_?éù·[¸~h¥ØG¹ÃWHú®’S’,¹ßq‘ÐZ‚ýúÍŒg•†3# šØo¸ÝëøQúF«<»0¯Ó®iv}-t¤ã?ËRó|ÿ/·êj¡·YïbVíÎ}…[Œ~ñÇ\UeŠâï_µ²·\³g+Ü’qD"ÛМTã¥.­ÇàûHmô^…—/Çü+§ˆžµNÖ··Ž «tàUÄëÅ{p,R?;ÄTö•e>í—g&)"ûµ#Õ½&cÖž?Jl„9è9 ­ÆGîÒ1©Y‡J¯b5ñœzl’Ò–â[ ˜‡B§‘ŽEp¾Ôå{GE½?éštÅTž²DyFü¸®Ødƒ\oŒ4ײ½¶ñM”ln,¾K¨×þZÀzþ#­pc°Êµ7eªØÖœÚ‘´ÀÓüšvyô¢)c½µŽâWŠEŒ9Aû£5ñò‹Lî$…†ÏÍéU$•…ù„§Ë凟|U¯!'Œn,û¬§TÓÊ’G2<ŽØ›tšJ×·,ÇQÍ4sÀ§€ ëÀ ªLÃÓ©AjË(#¡cò¬ëåC ©#%G¥XhgŽO:LÈt“88î=é‹nP;JÛå¼ýÐz ÞäwL¥6¶*çZOå³ÀŒË³ â¬_À§M¸ˆp nÓi©a*œt¨5yvh—Òç•…ð~¢®.R’Ô™jΆÀ﵉º|ƒù ¶s¡ª–<[ÄM£úU¬ñ_mOH«žl·$þt½@¨òiÛ°Ÿ­X…'ŒTr•HË·E'ØTqL³ÆO +;Äw&ÛF”ƒ†ˆóõÿëTNj0rÊ>´Ø]ÌGËs+àtùMyŠ|#>—40üо6<¿ýjö&“lƒ´c§½WÕlá¼LJŠN ·žh¡ZiØð}3ÃWéWsGþ1á‡8'Ž}+©ðf‡ÅÖ¥mp¬¤(Œ`Æ»½2Åb²û3ª•\®=E:ßJŽË[–ú-«ñívÜ9Íj3•¸Ñ'Ò£iíÐJštýáK3²FJõ©~ýCq™_Q^t*)Nò5kB¸=Iù»U5 ½GÄf¶¹e·µù§ÀûÇû¿J±ý“pIS;Ƈ¡8úgšÐÓt˜4Ëw[tûÇ,Ç–'Þ½:tÝ᫱“»Ü¾~à÷¦ÿ^Ô¼àöø¦LX!*2GoZæ‚or›+\^¢9AËcò®W\ñÍ…—Ú-mZäòßùxëVµMNÞ1üåó1þ¨ýýàÇZ¥gk?ö0…¸š@\âÉ5ìR§Å9# 7s™k¸5xL°˜rè~ökŸÕ “d{S89ÅušÏ„/-ã‹QÓ~K¡ËÇŒ,Œ{~>µ„1jöòBcòuHKo†FÀ?NüW±†© Žðz#&·<üüŽR`ÜõÏjP…?¡ö®Á´ª‰º*ÝEò´gïç¿ëK­2ì[_@èîI°ãšî3)Ám³¢¹Ù»#qçšô? E}i’R ,Û†8#ªÿžkÛÂw÷<3r¾b•Ü=«´ÐôŒX¤òï¢þÜH;þ4 ÛÒ®WKÙ*6û' Håˆòò~÷ç×ó®¹qœŽ†¹[ .-Þ „Ç=×îŸö‡zØÓç’#öi‚„rIã·½ 5ºÑLÍ>€ Z)¹ =é§­<÷¨¤Çë@ü çN»#øAUäºHçænÊ*#4’ÍצA\ëE.^¤ŽZ{MQ‘š­y)H[ÏM]Ø™;"¥ÍûÊô\Óµ¨cœ;ÈÁ@!ÅsòÈH$·^µ™%ÃE6À#ÓËíóûÔ­p’ǹAW›ùÀŒV¶™ªM‰ü¡àgÒ¶tla‰»³7¦]ïíš<±Ðv52¡tÏ\ô5nMê8ɨZ“l¥‚ˆGcÒ²æ‚GÔ£Ú2>•ÖǦó?OîÕ[ÈV9¡ 1ÍTgf?dÚ»#°V‹æ~aY+Öm-á’šS3ÆÊ#‡Üw¦ê¾"·ÓíK®æ•ò#¹#Œý+Í&¤rÌX±9$úšpƒz°©QArÄxêëíHÀ»ä·Ê*HWHú †Vø6:ŠÊ´¹çËÑëEr[4ct޽sÁíÅvßf³Õ ¼R"_DÕ ò :«áí.=BÓyEVn8#×ê*e±]:F‚þHž î æìÚOäjciûÖÔÖ1k^ŒØ´Öíà"¢«t¿/•–,}±ë[_]εӛݦp˜ü95™`ºmü& G/2¤Õû#uevçt°…™T“øâ“ƒ}ln›[ì^[m^qûÛØ-‡¤1îoÍ«;KÓ ®¢òÝ\Hé2•Ëà¯p0 t»°2WŠËˆc[¿ø„Múpг4i]úН'BMXî}ê¥Ëa1ëHÕ/ÈáGJðmrÈi¾2Õ-ï-¤YWµ…}/›­Ú@>ìA¥ä*é«¿AMèi>u^Fóê}iÿÒšTƒ¸ †Xò¼qøÓed…•‚²°!”ô ÔáwG5&Üö©hD´}Q›BmÆ×{=vó'üþ•± ùÈíWõ½7í6ñÏÅͳù°Ÿö€éô#ŠÉŽán!Žu܇¨=Çàx¯”Í(û:·[3¶Œ¯ä\%8€zõ¨ã<éJn967Ë»î“Ðû}ķ «²µìRœZ²OÙ¼LØág‹?ˆ®oÄ: ¿ÖíÒ/• Ï#©9®òµèfÝ¢wñ ìüªœüÒÛÉ!±ˆÊs&Á¸ÕkËÈmÔy¯‚~êŽXŸ¥vs%½ ¸ôPw¯Z‹X…dÑn”Ÿàê:õÈ¥¼×d+ DüÍ'.GÓµ[Ôâó4©È_ýV”¤œ‘2øY£X…=0)eQ³¥J˜AŠkò Lµ-hy·Ž´Ùm¤¶ñˆÿKÓÛ,ü´„ýåü+¢Ó±†é>äŠ~„V½Ì+$eX)V{Šó+äð–£w§Ììm 5Tóû‡<2û©á‡¥xxüäæOÉç©ÞË2G÷Ž1YskB õƒËÊžø¦Í.f,yF ÔsT5HܧeÔŽ}…y4°éÉ_©´¦Ë—rI*Ÿ“ÀíŠÉ±¿¼Ó®– Ÿt$Iô5j+¦s·?Vã53yr‚ ^àM‡ƒîzb¶qŒ}Ù¢UÞ¨èà  >½)fãæ5 ”McÍ9‘¾g#¦ãR\N+Æ©NÒÐÝl0Ê%¾µênP)#=¨–61j¬°8òòqÐñÍwàçMJ[™Í7¡‰gª=ßã.0Û»#¹®´“Y¶p]›Ù™Øa@袴3‡"´ÇVI^ž„Ó–¥k‹(®H,‹¼tm£8©¢·D(äqšq+æm%s×#xréGÞÄäuÀS×ó®ü¦n8¤º3*ªñ2&‚MNb+c¯Û(Þ½Øÿè´=NÓ_…´ÍVÙEäcG 5³­ø~ Ñbñ´|Å4g {úŠÁ“JþØ"è5–»j ŽUʬ t#Ô{WÖœ…¡§ÝéÑ_ÏÓÜþå%'÷gÐ?olÖÄ6QÏ |:H§ƒ· øûûÕ}&ýï#:NµÛݸ`W 0õ_zÚ€4@A)fî9ê@õ÷ ZÙrŸ¡aüCÞ¤d]…ÇÕgÊ#·j6g¯>ô,à”å×øºVC«,%ÀÁÃUªU<{÷  £<Ô`Ó‰üèsŠŒ‘JzT|æ€8FóŸÄÕÈO>µZ8ºçš³a^ Q ü¸FúM¹ïЏHD&¹ýFùd&1×?7á]” å$eVJ(Ï’SϯqTg_œά™ ?ÅM”g­{´Õ™ç²›LSíV¡‘¤Ãƒ×5Rò&/òúuúSì7c‘Ó­u4š$ô QŽâŒ˜eàŸ¥uc8ïë^Wc9‚q·¡=;ôM&çÏ„då‡\zW X[S¿W›FmÅeêD‘ÀÎkL+ÄWÚZ$ÓuU#ïdŠÊ+S¢nѹç5R)a,wG‚vüœ+“$ý óõ®¶ûLÔu;Kn€•—œ¨ëšÁ¿Ò¥Óî£/"HÑ—#ô5Òä£Ï•äï`PÒGò®9÷¨æP ü]…/ž¼óøzÑfG{öö®j0¿¼úŠO¡bÛT¾·µû<7Rªª²îY¥Ÿ{³1=I9«rDÉÈU Y\‚N1ùWbV!½,t~ÔäÓ®÷ÄT6²·Fê:}ìrA¼Û?RýY#ùWŠBN8#ž+RÛP¹´ŽH¡™ãY>ò«™Á=MiÔqÐõû›ïì»6Sæ[÷Æ7/×Ö²!ñœuC*]Db‘?ºC}kÏ?µ®EŒ–þ{ˆsÊnÈÍWÐmdÔüAn€eGÎùé´Yò$›fžÙ¶’=°È g+“T'mïSÅòòE5‡Á×5ÎÄÈ•:Ö/‹ôÖÔ<;s&é‹ß ÿ…t ?ZyPELãÍuaêº5×CÁ¬bÄéà’ë^Ÿªxa5»+­ö¤±(U#úV&«á†²ñ76á¾Í$¡ýpÛºW£Ùª„"Ø â¡CâŒÏ Ì³+ºUh½wý,ÎÄšGÙäðž–ˆ¡ùYÔd借ç^…åˆÐÜ–?gê:gÚõí&à¦VÔÉ&Ú*þu¨ü îJÊÈù¹ÍÎNRÝ”&äÒ³ü¼¹­_Ÿ5Yyzv2jä–ñ`ÕðF*²à`žýk?V×m´¸ ”æ@@Ç‚ÜÒ%ÙjÍ—~µÍØKöwPŸ²í‰ Ö]Ž"”Ê/‘a |Œ¹9ü*®â=6Ù$3ÌÂIe,FÆ8´$”$ÌÜã&Žò1œTâ:ÍÒµ[MN2ö’oU8n þ5¬£ŠËsdÓÕD¬´žÝùjÈ£úŠœs×ÒÅaÁõ®R{ ˆ/fdŒíáo_ƺ—?%E2)ûÀθqx8âRMÚ×4§7ŸŽBGèiÓAÜ)†å?â©D­Ï nNkB3‘_ ›ƒ·c·tPÓtK},Èñ’YN^IXоÝ~õ<°Æ S¹–X²Y7ÅýåûÃÝÿ ¹ÍÎW{‚VØ·æIáFsUZ(Ýòv’Ý9íIa4·I^Ž2~E“†Ûê~µ*ÛÃÅÖx,8ªI§¨Ô­ª+U'úô«ðœUBÊ$#ÓŒôäÓ%¹[wF?ÅÅ>W&ZNl_ [¶Ÿ{¬éäb1p."ôÚãüEt­ëúÖEœéöØærPÆÿN¢¶$õ8 þÖ’Ou£8+Sp•™©^½–©`Íÿï¹úŠÔ'#5ST±]BÆH ÃuFôaT´k縀ÛÏÅÄ?+ƒ×ŠêO–v{3žöv#×#Ä–—ªÉ°Ÿc\:©:ÆîpHØô f?K“Wæ…rz]’ßÙ]\oÚ|Ï‘Ï`pâ`åQ%êD–¦Íž¥syk½’|ÈË+r«OSWb³‚Ë3;îýùenkG¹š4’ÖÖ<ä;p£üjk›i%˜#;ÜÏžIû£è:Uµ ¤õ`ž—/I­ÛFqyÏb«QɨßÞÄÉ €ã…Ë7Z³e¡ŽsÏ÷GJÞŠã@ŠWÐqÒ´Š­7y;fÖ¦|pê’'Í:Æ=;Õ˜-®#}ÒÝ4½¶íÀ©îomíf‘Tž‹ÜŸ¥ò€ãìzÖ°§÷mú”’¹ ¢¸Ÿi"îÁ¯btŽêÖ9 3}ÖR¿27±­vr°Çé^5ñ;ÅM/¥YOòF¤ÌTõcÆ8­\T•˜ö"Ò¾ (ŽÂÕíHJ“Jx!±€îu1jöWV ÇZòËk¨làŽÔÜì9n²cùV……Ä¿jÂúŒÞõæTÀÁ7m TÙê¶1Ùj±Êñ2ºÇ#DÌ:†kjÆ,@ö® áýÇ•¬kZoÍ·Ì.}Ç5ޡ副žÆÅÓ¨á}ªnêãÃlcÀëU佇=[¸õ¤¹§·t^¦²¥±¼0¼Q")aÄŒxÏK‘üNÅJèÔ¶Ô-¯r ™XÆpø«¾õƒ¡xz=Þ3»òǧ5®ó¬YÝõª«N>Ó÷nèQnÚ–™± ?­`É|ò]²qš’ká(b8ôúV$wÑDÂû½ðµÛF„½›mkc9KRü°Ë=Ü,®ççÃxÚkªŒãA\Ž—~—:ë˜cc Ç嬛¸$Oç]ÛâC´|ÍÜ çÄÆ£qV*6Eõ&²o­„ž-ÐX&|¿9Øã§ËëUou¹­ Ü»Wœg©¡c*Þßé׸\ý™ÆïBX…zyfƲœÑY^6FûœñTntø®Ðnûñ¾cq÷£>Õe›ç©"åÍ}ÊP{8µ±©–<GÞt`{U˜!•!Ù<‹6Óò¾0Ä{ûý*ÓC— 8aÞ›ƒŽW¢¨sŒΞhéÇz(ëIŠk}x§»@ ÅÓÅ u4ÚŠié@n:ÓÁÆ) ô¨%›g×¥x´ÕÈ“°^N7>Õ˳'foâæ¯ßÜ’þWn¹¬âHãÖ½|=>HÜá«.f9@Å#sØÿJ‘G‡Ò²ñ·Ø×t69Ê¥CœžÜ xO,–B)áO>¾´ð½j˜ S†vÅuÚ%鈡ž„{WÃŒõ­« ¶:ƒ‘DÒ{— 8»£Ò`•eŒ2ž*¦©o ØŠ)‘]wgžÆ³4[ì„à7Sô­ ¹A1ã¦êãqå•AMN(Oböó¤öÜÃÆ8 ?úÕÉxÖ]‘K–YNpžõÛß^Aik$÷Dh2Ùï^E®jR_ÞË0cÏÉçjŠÆ¢sJ+©Z‰^?±‹¡º61?ÞSÕ~†¶§Ñ&´ù×÷–çîȾ‡Ö¹ß%ñ¸Ž:ó]´ZäZ_†à•‘gg5w÷ÏÒ»_»k°JW¹Î\\ÅhAhÕ—£/­a^Î//^h H#Îzz³q/Ú&‘ÈQ»$(è š£ó›ƒZ¢è]¶\€wíV˜ìwaÁ¨ab‰»æÿg5ÄÀàÀgîõâ“^="þ[T¹†x¤Î6ó]§†4!¥<2¿ü|J¬zt8¨ü*>…‚Å×;”õšédÚ—V½·»\ò“zP¤’R6bQ°TW1÷ü*­æµc¥Á¾îå L7AÞ¹;ÏŠ:ZB 6—1l2œ'Ëëž*Á&t¹¨îο±ýiý«ƒƒâv˜ù7wPòÁÒ»+[ȯí"¹€æ9P2ŸcM¦‡Åì%‰xažM\²à öª|¹f¦Åó;X½ïQÈj@r*­Ì«ÜN뚊— ª­çšŠóUµBU¤P@ÝíŠæoõé$&Èá{¾Þ —Q$g)¤ojzý¶ž6ýù±•ŒW ¨]ͨ^És0]íØgN‘NK©õ¨eeù½ˆÈ5—´r9ªMÈÏxÎsÐv5l²üÃÓfæOÜ’8þ•ZÏ"Üg“Ûñ­o¢2:ßÞµ¾±öà™9ùyȯOSÿׯÓ/[OÔ!¹N¨F{ñßô¯^±¼KÛ®b A‘ž t»bæj9NÌ·AÞªßjY@esÏð¨êMeéw÷ºÃ¼¼[¨èßZÊu£ª}Y¹´dÈôÔr$Á{Š…Hå8äRîÂkQÜÊÖà1Ü €ù[’j+vߌtõ­Û…Šî‹©ÆA®rØì 9Àõ¯–Í0¾Î·:ÙtgxغÖØÔ¡AàÒ{÷þ´ƒ‚1\1Š4l@¸C×Ú’RF󩛈Z¯?Ž•µ„ŒÉ¾K­ó:ú*Ž?ãXº…ãy›äTö«º”¤@Îõ¬ø’äâTÎAä]”iìÙêaiÛSJ¾óáGo¸ÝôÍvñcÈ<kÏ,ŠÇUázØW[¡êËkörëæÇÁ^ø®Ü Q¬×sŸ0¢ù9—CPŸÒ²¯¬™.þÛýjýõþòÕ«Ë‘n ÆI8ZK[ƒ<9o¼8¯Nsƒ—³{ž#F~¡|a"¯&X›íÁ¬Ï ZEý”<ѹ¼ÃÁä ·­Û {…p²(Ñ Ç¥Úº£1a‡±'Šææn½§Ñ×Rô–ËÜw 6ŽøÔëö{BKº þ&fÆMgÞÍ;å^x SÕFY±U`´Óä“uÍÌóVMS¨£'a7mI|Elœ[£ÌÇ¡ …¤ó5@‚6ÚCôù¹«ÖOLyP`?Ö®K(ÅêÌ +hFU5rÓÈvîÊVz,ÏçJZyûÉ'8«R·©]ª¤Í[F *Ȥ¬qþ>ñRxD”!cu,lSÂ:d׆²ìI®®äÄyh=K ±>ÕÑ|E¿‡ˆö‰²S&î‰?™®Rúçxp†Þ{(íZ žâ!vŸè̳Jp»OÌ}q]‡ìn#ÛÇúÈö’'±<5i™†¢ç²ˆãr7œÿ*è¼9;I¨Ì,-™Ç¯ µHs+ …:Û|C*O»~î>`kÑ ð{W›Í´xãJC(rÊǼË?Jô´ùã#ÔWÊætš¨“ìuÒ–…9n!ƒ×Ò©]ê†C#®sƒ»§[Py"ºfmÁSè;UKˆMÊ^AÇ õ¬iá ¬ä9LßÒõÔ`-¬‡¿×ñ¨µ1($ ]¾¾õ—áÐj7)†1à)“øIÓKšŒ¿­T£54ØæG1ƒ±¸ÈolÕì3s}ƒÕw]µÕ®ž¨>]¤õ=±VVÙ"]Àd÷5Ò±j+Ý#’å{=>;8"}ÑÆ¦j„²G$,O½Oñ¹klÜÄ4Ù܉÷°i.ô{;ôýìx|ç|gkf°§Q'yõ)­49ÍG`Ód™þ⌟sŠÚðÜfŽ8üëÈÊ{Í6/Á‹çOqp‘¤r¾åéSé™}oSsÐã‚çú×§‚«ÏUEy™TZ\ØaRB{þz–1^Ú0,õ¥Å1~è§Ó„Rc¥IŠB(´çîþé?J”zúÑ"o—±¨íÛ}¼gÛŸÂŽ‚êIÜÑÚŒàÑŽ? éAë@4Ü÷ 4t?ʳïXй“Œ÷Bì3䎕äÑZ˜Ôz’1yä=})Æiï—1¡9úf¢s‰:u¯^ž|‹K‚GëJÑPÁ.ücµYq‘»ó®¤ˆo§~ôÐÀ!ÏZ\ôǯ¡2qùа '¸ö­ s³ :wªRE·°©­Ûä*{~]Þ·›Ë¤` h8G~ÔáÁÀn;Ö·3±8bŽž€ãÕ ¹Ç÷ðAý*ÁaÃwª—+æCæ}‡Zö:­ÅÖúu¬¥³´®~ùl:qíZú·LIeöo*k”É”P¸àכ΋ÔUÔ‹÷c×·Ò£‘nhª´¬‹—·òîgy¤$ó#ŒžÞ•U~|Œþâ¤t§BÉù}…O!Mî5°ƒcY\÷øó '©éWÓŒW?áÍV_KŠæ'Ë‹ÝXu­À@â¹e¦‡ Ö„í:ÁcÐs\毫yé±Q@=4ºÅóö|pqɬbIÎ\Uª»ò£9ÍìPšÝœåŽsQp‘­&`fjr˜-Y”ò03õ5‚f µòìŽ:žúÕ+éVG}«RjRoû2ŽŒwʪj”‰}O€­S%îA8ÿEçû¼Ó`lÆ9õË–&OéN³( tíËrK*NÁ]Ç…uám¡K ϾX¤Äqÿ²Gò®'»w®ÛºLfÀ\͵·’UzŽ=k)Ôr÷ioߢ6£Ì\ŽÞó[¸\nHGÝ8ã°®š(RBDŠª:QC€8ü*ÈûµTh*w{·»:ˆ¤\|Õ °Çi‡sT‰ñÜ•³cÙÚ9óÛ¡¬7ž(üG{`»²ÝG鵸l}ùÖø‹¿§SZnÌܦj0x8¢®r+éŠSÃý:×ÎìuIØ÷éQJN{Ô­Ì|uëTI—ídË´&Ì"ƒžµ¢Ø/fe_Ã!@úÅš2äž1îkªž<ç=ëžšA r§îõé[S«Ðô°µuI‘ÛŸ.<7zûb¥k÷Ó絺M¼J¨äôŽ?,â³å¸A"Â2Ê@ÙÜzþíVS•xÞCÜb&ýÔ}[é]QNé5]âÑÞÞF.#M®¬Ýr#5^ÞF‚L㎌+ÁZªjšTR‰2ÍµŠž Žº›‹o0oQózz×}HJ¤UXî|Õj|’h¡¯Î¿Ø’É—£×&¢´¶}9#CÌEÏáý*ùiuk¶ÐûØnã­ur,ió¹SþÎqJ/Û7=š·üŸvT‡F¶”w’‹u,ÞŒ²F_b¹¥³Ô Ì-'È>ë•­ež)@)"·Ñ«xFE¶£²g2úÔ|Æêßð,SìíïâÕa‰îSjÆÎPå±’t k(|Hàö¶üZ¶¥…‚nJäµkÏÔ%1ÛÊèC­]‘«W$ÙJ'» VÈÐùË[®µi{¬–ýä]"“Ti1PY)½ýªB)1Íp¸ùG,@ŽjFlš©5ÈLn8åS‹oC ´dßDÑÉ» ÌfóWïî §Ž¾¿JÃ}¿9Ïû¾•Q‹GÊõqÒŒ¹omõ5æ³.]Íö»ƒ(H! Ñ8ýMP uïŸZƒÍýæÒ99ù¦3pˆ[¶EtF,–îY2dðÍI-Äq&7¯5H.sì)ó[›{4™ù_e«¾¢CÚt‘ÀW\ž¢§AÉ?ÅòûóXSÜõüëbÊa<$ôtÆ}ëT‰dj¦) D.QWÎ1ÛI4ÀþðÍ@d!ÆzçùQdIx¨t|uÅQ,A8àÿJ·m'™’xÏTRÇÎWÔÖOA‘ zÿZ§*ÝjæÓŒv¨ÊäÒ×|;Ö­ôù.l®¤XüÒ7n„ÈÏò®á¼Udùoƒ€ã…?x³>£·^k©Ó•’ÕN›«ž½’¹Ñ ­G•T÷fåòÇ$þ”Ã&Z«nʉɥfôÅy2Z•qòKïJÊÕåeÇ«-[rG~+'U|ˆWý¬þ”ì è%Áùí³þzT7 É$C¾Iü*Y†|¯ö\u÷©™t#’æ©ÉE]“¹ŸÑD8>M9IE]šÎqYT{Ô³0tp#4‘ƒåäu+»Ô¸ÉÕx¨ï#‚xÚ`¬’¬§¦Ò)Ï0H÷zýÚdù€³óžŸZš²¼½šW0´È$³„iò–v¶;QÏSÎÓõ i|§úÕ›ÛLIÂõPTU5N3’UºšùìEN«‹:àî®*¶2;U+—Ù–ì§©ô¨nïÿ³œ¤°ÊëÒ3ÝžÞÆª­ÄÐBÓj/´ÍÊÆ«‘쾤ûÔ*n×,¹$ƒ`¬ù†f+D;ò†L–3ÔzŠV;Ã׊¯fÎÊQêŠ/2G=Túf‘~t~̵ju%3œ€ûÖEåúY–ó†É0@SÑŽ?‡Öºb¤ô;¹ôÔ½á ¸lüU±cT³¿ˆº“ò"œ=ø¯FØCGÒ¼ÍXž(>o6Þ1"ëüCò¯Pðö£«¤ÄñM½ãù_=r+ÖÂÎëòs  Mõ±F÷Ä×rªdE?+¨´KÇä‚qU´­=¬Äï.ß2YYò9àž*k„1H'N£ï ˆR•5í;î-+®´Hä|Äì‡Ó¨ªßØR‚?ÒTwû¦¶–U‘àô¦1Ít}Z”µ°r¢„V³Åÿ/nqÛ¨ªÖòâ+ÂNvBƒõ­) cimæjº›ÿÓ@ƒð×Fš„enÄKâF¹ýU¡n<Ìã¿ZÕhÛ9©çL&\sQÛ0ûµ3à~f“e#>q„÷þ•KÏ0F²œ“Vn[’µ™q“ œþÓ%^Ü=ÌnI凘ª&#£8ëV7oO”wéWš$KpýXŒçÚ³©«Qî8÷2™p ö5JoÝ ÇåWîÁ»Òª¸óœd•¢…s?arI¥6}Oz¶#ù½T¹R‹‘׸ô§b“8¾L7Ý튖ös$ ™`ÍßSí'Ë ¯ÍÛæ¨–f/¼Ç*µ^HùÃ?•Xµb—êŠp6sïŠd¿ÀõÜ}ªÆŸnæw¹pÁq…÷­Ó¹/ce1×ÔUK”zp«*BtíM¸"HÖ‹’W‰¶IíüêÓ(äŽýªŠæL„u­‘zv5‹c#òCý*]„ñÁãšÑ c¥@ËÉÏ9¥{ §;äÖºx6„þUˆ#7žO)¸–_”£¡õ¬jÅÈhÙ[òmÎTv÷«žhé\™aí]ÃG¾+nÎ`ð#“Šâ­MCÞ5ƒoBô­ùÿJÈÔ˜b3לUÒZSíý*)àWÚNÝ üÙô®%UÉÚÑ®åS· N»8ã¾jÅÃIi3L…‡EÙUO“?e™÷ÆÓiß`¸xÌÓH¬GD+Þ©S»¼µ1Fn/ÝšRž^r^¦µtkË&(Xí‰ðqøÓll¯®fh¡d=~W§Ö»})4¸Ý_Nº.Ç—P¬?JéQMŽ»Ô·a`–PÆ‹6¥jc·¦ ŠÔ[{П¹ÕAÛ̉Xþ˜¥MF<|Ö×IÛ˜[ùoìü·o1A7)SŸÆ­Ú*÷:UŒÛ›Ûè’ÐÄíмDÐÿ:ÍL² –ÜO;ºÒ*‰àÛ³ß9­{;o,naóÐW|DõÙL¤ Z™AJ¡' ÇSÀ®ÉÉBwe®eŸhè8ª«°cµV´‡Ëçø¸®~†žÎov0 žõÎ]N\*³ªœ•P[œt®†FÀÍpü?w¨éÖºž›#­Ý„†tŒtŒgñâ±Æa•[K±µ9r»3OŸzŽVó#ààÖ.•ª®«¥[^£( $uÁî?Sœw¯#Ù;ž¬)sE4>âlOLãñªæLŽ‘Î)n˜” ׿ØXéíZ¨èo[R̪ }xaY“B·q€è¬È{®pµG^ÕRÒ+¢Ç)ù‡ûT“4ƒVk±Åk‹-¾¥½KéÁ÷ô«žñ9ðþ­crÏþ‡rþDã'ž‡ð®ƒZÓÄr(žWê+Îo¬ÞâÞæÈ£)꛸Þ+· 4¥©¦9}c ¥ã¡ôªÈt*Êà ŽAÍC$ƒ5Âü+ñjkúÒ®>KûØãw,zìäÈrjõ–jÃòoð?Ýö51>µ]ü)ÊCÖ¢+—E°„>†²´ ß0èn[ô­r¸½5Ÿáè±§—îò»®k¦?ù¿~]TXº™½6‚7V†Ú«“qsŸ»¼Ǧ+3C„Ö´Æ—ÅWñ4y†êÊ6ÝÔ‚ ^?W—jVFÒíâaÊœ_DÏe·ÎGΓ?ìŸÿUy§Ä Ç8Ôbåo’_÷»~tÀÀ|ÈF9ëš©8&^ÀÔèM¼ÛOÜ”à{7ÿ^$DÈãxv¦]ð¦X„š¦”ßò×lèpFÖþ•Öë~`"Ìðè:’§ü+Í<#zÚg‰­.@m¡ÊMþãp.µïè¡ÿ¥K?E¸š\Mü`Àö®cÇ: Ì[ø£FEþѲæhÆž.ùõ"»kD°%T(œí¹5<ëGoJÎqRVcNÇ9 ëvÚî•Ý«æ9CÕ[ºŸqNžÎ4‘úsÛ5Íêvø;]:½Š1ÑîØ ØUsä±ÿ–€zz×S<â[ëÈãc_7W,=^U³:”¹•Ì N½Íª&ïÁf‚·4É­ãHí¡à"`/ 6@éÏ·NÐ]¦¬ß6ôãÖ®¥(Úû KS¸$“Òž“Æ_nõÍP¸[”·"!çyw`ƒíþÿ \A ³Æïò™eà/¿ÍrQ¢§».NÇ`ÅK•WVÛ× Ð×?o‹OMáníýYÉ…miÚ\Ze‚Å’Ë“–y$’95Ïø¤›+Ý3W]ص¸Ìw`yR|§?C´×|#õ|M£³ØÉûÑ:}Ø, I5Y\H3Víœöôi«£™—JkR±À¨‰ïTüBŽÔà)1@ =1XZ”†ßYµ”p¬BŸÇŠÞ"°üEî¡›?uñ[P·=ŸS*×åº7#<ʤþ‚¾4aÑ€ýjzÈÔm4‘Ç¥8Ôl:zRÅP&OáëÖ´cbÏJª±à“ß×Þ®+iE¶yd2¶AÀïÉöª,œ}Z¼Ñ’Ž~µWø²Gµ 11íZVÿ»AþÕf†_0Ú®Ç (þ¬4D²Ü2„rǧJ¶²ä1íéX²\ùdž¹<ŠšÒàyœž:`úUrÂå¿yŒõ¬û‚Ò Uã5§,`®ð9ªþX@Nãõ©”ÔU仲2£ŒŽ½_¥^¸d‚>ïøT«lÒ„ÉôJô*vlç8íYBMÊòÝöDWÑùˆ¤}Ð2@ª{pª…]—ËÉçQdÝŠŠ»°º~‹¨ØG ·½PCÉ* Àî+V Z7ÚE8ÏXŸiüh,gý'Ž|Óý)Ñàk©Á'¡Ó«‹QbŸeuîJn¥O$ÐÜÇå$ŠI?tðZ–ÐÕ Œ‘YÎJ×/S6+(Ro¸»‡ñ ]€yÏÖ¡•BM‘À« r8Â1VHceÿRsÚªA –LŸº*ûG˜ÎjX 0+š¬oQ_aŽÜ~€SË ­$ÃÏ(:w¥ë[R•Ó]€l’æBÀóÍmÂ<21ÅUfÆ¢ãæÉ‰O·SOVhÜ0ê5»H¹æv¶ï¡øŠÿK™­ø$Îp’uíÍG¨ÄâXf¢8úÔ©4ô„ü™åº6¼Þñ害†û,çeȇ¯ø×Ò¿º¹Œ\A"˜ÜÔù·_ÒšX䡨zG‡Cø×kð{ÅMwc&…vÿé6€”òPq½Ì=U8#ÃÌ0¾Ê«¶Ç¯¨è}jP¿>=:TP°8©ÇÞ®“Î!º&+)Ÿ¸CÊ¢Òa1ivêFÌ‘õæ—U$i²Ál(Ϲ«Q(DUb®þá÷ÇõªðD©qp@l¹“ô«X¤(rÃø±ŸÂ ±<¾1Yú¶Ÿý”°0á†3ךժïÎhÀ5mki.bhÜć—ÛŒx?cÂ\º«­Œíaëžÿ}©iV—°¸¸[‚9ô5åž"ðlúWúm¹i£ Ç;OcB``è!`ñ%¢ÍþªYB8ön?­{~…,Ÿaû<ç÷öÌ`cýà:Ä`׈ÜA-¼ö·!08um§½®Í¿Òá»ý]ä+¿ýà2?B*Øoœc¥C!'¯ù4ð~JºñR{‹d¸ŽHeEhÝ ºž„çô«Ñ®?²%-%¹í]¹%ðuýEu‹M+qnW£©ÜÝXt"¹ñ#Z¬¨K•ÜŹÓ#r~UÎX |0FƒV²èN9ã¦jqÆêù*®¤féÏtv«5tNŒöèE.ќ㚡c©ý®îháu² ½™»ô«²ºÅË:…'‚jÒ²VZõÿ?ëa"—äØO«Ä[ý”Ûß&ë[œÄç²çÖ}­[Ú@\:¹<*ƒÞ¹-W[žæÊd•ÙÃÿð1]´©Ô©Ë̶ü¿à¶–ÇKáÙ炦ÝIæOlYç¬gî·×±÷®²ØŒq^¤x†ãJ×"Yæi"ß·ær6©ÿ^Õer²FŒŽ¬¬2¤t9¯~‚q+ès=]Í _Z<Ô˜ÐH”Ú½0Ðyþ•™­¦ý6L • ŠÑ&«Ýƒ%¤ÉÜ¡Ç×tåi&LÕâÈô‰|Ý6è›OÔqZ‡áÙ‹ÚJ‡ªHZÚÍ:ªÓhTÝâ˜S$Êœ{ÓóŠŽCÎ=ë3CÊÞ„ä`ŽÕ,QäøU»øJLXµWO’?zë<¶†2 Žyüªœ„Àÿ<ÕîKæ”Û âX V%£ .ùõj(zV…«oà‡ ¯_þµ1®î2ƒïÂã¯\ÈCõxbÖc8lȶ~ï=?ZÆKQ¥{÷F'‰,ÂÝ…Èû’a¸ö5ç÷7Wñ%¦±jv²°ÝŽäuüÅ{%ì)ä·?# sÚ¼ã[Ò Çi0PÇ•|½«£ [’V{Õ¢ñX~Xïuðþ±k­é_Zɺ9T0õµ¼Lwæ¼?àv¬ÃR¼Ð.äÃÄ¥à^™9ù‡áÖ½´“c°é^Í7+{ÇËÕŠRÐeÒy¢%þô«‘ôæ­Q˜Éš6ì¹?‰©ÅjÞ‰¥« )i !¨\wüéÄÓ ùOÒ€!”1ŒÔ&4xʸRPW"¤cQž¸ï@¾¥áxgÓe´€®d±Êž¸þ•± ©“D·‰·‹2rr+Câ’Þ"wÛ·kŒãýªœÔy©¶üÜSÕ(:g­L€)M+ÈÖ­šxsùs ¿¸õö5ˆìn!RÊHdaœ05Óܨt*kU€ÅÛ`‹Æ˜‹Õ”Q^fa‚Uá͉mþFÔêrèöÈÀE ¨Soáû]ŒÖøR\»ºçP¬êc œ‚2lPú…ºC–™Nêùª2œgÌ·_ÕŽ™-,yÁšÚF·”²È¤‡Œ·|Ób¾áÕø=ÚºÛÇwoí¤{î”ኌ‚¢¸s/§ÿZúšRU)©/¸äjÎÅVÌ8ób ¨Åjø'ÅgK¿ {3‹iF ¸í#¦=g¥ÀtÛœ®: Ë»·h§óP7GjÞ-’Ñôf—¨Zê0mgI¥•²2*ñ5á^ñ|¾¾Q>ç±è:¯ÿª½¢ÏP·Ô-"ºµ‘^'R+e5{ ÅÒi‡Òšdçô§ °Ž´ÖzŠ“‡ùÐ=áüÇ{{ê0Hú]x¬;"ñÜ!0 ‘ß&¶Åm_YÜÊŽ‘°Lþ,S‰ þµ‰©Ê_Y`ÊzçLNU»t®ì¢È…OC\¶·dð7=ö®ˆK˜â­NÚ£0ñŠ·1Ú²ÂÃ<ÅMéN1œb¬æLÔp•«§Æùv •÷÷­“h7-’-…Sæ<U¯!TBHëé[QÄ Ï5©˜¢BÒ¾3Ñ{š9ÒÕŽÇ1qnÝŽAQ4,@rŠÖ…eÔd${Punø®ÆËÂútö7»9ç±X˜·¦Æ¤äyÎÇ势oáÍWQ‡}­«4yæF¯éºg…ô«$²Éâ— y­+ëë{D¢op0{VuqQ‚»v6Žù3Ó|sö¸þÞP@¼°RI'Ó¶>µÙØ®™£!KÌ=JòMkk»¼´ÏäÇÝ\V¥…œñ‚£ŸïMrJµjß²îÿÈè8Çcæþé!˜Iò‡™¶§ tÄê.RG;÷79'½u>!¼ß{so nĉ*+‡Õ%À9<óŠÞ–º÷ŸvrT›Øtƒ'rME;&ä9 ÍeEvƒåÏA«!¶`ç9ë]q§gsîN@Ó úUv—=ù"£i8úоQZ~„uìj$€OùÍDŒJO#µHÙxÆIëE’ÜÅ—n v~ Ô-­/¥yÓ{ˆWýªã#†L“†µ¡¦I=–¥mss°{â¹jΤÕÍi¦¤™êËáÇÕä7·ÍäÈܢƸÅjC6¡§ ð­ÌJ8–z¯øUfñ PF ÆÌÄtÝYwZõцØÔzrkÉxªþwäwÙ-5ë;{FydU%ØìèÝOjȽ×%Ô ù =p[ëþ“eo-â$®®ç'nyîkfWûÛUsõ¬ªâëVmSŽ„+ÛS8™nð§îôT+^ÇM|òŒ¿eô­ k­;e»±¬Ís\ŽÁÌ–äöì¾æˆáýågv6Ñ¡-å½”;î$TQÜõªpjÓêi ,C†šOoAYvZ5Ƨ ½ÔŽzg‚G· ®–8£Š±U^Wto-´Djõ œã`ÎO©ïKžéPK&ùä*Ìq€æ”}¤Š5àºÊ{f¤ˆð}ë4v­FµèGcHJå[òEÕ‘óЂ> ÕÞÕWR6­ÜL¿­ZǬ¾TwdY"h˜üûןøÒËì.[”Ä7ðáÛwÊd_þµz .qí\Ä"hVWãîÛN¥øçàóô®Zñ¼Û„¨áQ4yµ…Ï‘|ḟ§ZêàŸ$ã®Ù£Ÿ ¸O^„ÚÒîZPGF^ÕæTª§/mO™î[ØÂl”tÏó«L²FGqH@–Ѓ÷ºŠ£»&#ðÍe­ŠQæ…»–@r¿•aøŠi"’œŒ°ö«?—6AÿõU{–î…“Ÿ¡3Ž¥aáËUy—†¶·6Ry…VB˃߯øÖ'ˆ1 ‚à@ØÃð¦ËÄ”öçèjÃçéÙ'˜È8ö¥dµ:iÑ9'ç*/o<9â mzÈí•eÉxÏ¿±ô®ƒ®[øƒF´Ö ?-ÀÐsµ‡Q_>Þ@·É”aƒCW¾x–óÃ&EÔØ±¸`9û¡F^•ëP«x_±ó¦ ÒÄ>ÌúIzf¤¨‘^E8ìGˆÇæ£cÍ)8â¢fïEÄ zÔ,Ôòj÷…0 Ð<Ð9© /ÿ^¦UïB¯åSŠjŠx¥¢€šÇ¤Ô.ÔÆªÎyèjry¨ä‚OQR{i&vmPâÚ|½¾OÝaË'Ó¸®^îðÆ |Àõz&«f/ìžícó#÷VàkÏuH›>t¡VBLr(ìã¯áÞ¼|FS­Î¶—çÿÚ2n63 Ö$·y"”þîDÈÇ8lVÚáÃøŠ±sǹÞ©,»þV9'¨>ÕÙI(ìCw#ŠfŠàcŒÖ¦Râ¨Î8aÞ²J‘ׯZXo>Ï6æù¾=Elã}‰LšHăÊ5^ÓüE©h5µËˆs–ª°úTr˜î!aØÕ2?åŒÝÝ=±Dgph÷ŸëÖÞ Ó–ößrŒÈÝA¾>诜ô=V÷ÃÚ’ÝÛÇŸž2~Y¡¯}Ñuk}gI·¿¶?$ƒz©î nÄhÓ(Í5˜S,nÄdÿ§_CŠÕϱ®~MrÕúîÈ?‘­\ž•¥M“ò3§Õy†ñMf Š\S癡“ö‚Qõ¬]Zäù8'§j·3”çÒ°µÉBo#ך֞ç%gd`ù‹çœt=>†­…'E'=«^Ýw¸Œ…­’8Ò¹BñN1üG ¤X3 Ï~•.Ã$…›§øÒÌû®+†’uê{Yl¶4vв1%-æ8n½ké×?.ÆûÇ ZÉ ™Œ¾§šÐ±Ró#€ÛWšôú­ üª„°™IÏáíZƒ‘ÏJcpëžkZ^û.1l£³ ýÞ*Y¡û›¶äã¥K"ËåüŸ)<i°ÀòI—*¯5ËKË­86S‡vW’NÂq“ÅmYªGÁÆ*€¶W›—är½>Eo¹âOÞ#×ÚœñuÒø-ê„WQnõe· ¾@~ðåEd­»^Î]äRGÞ-Z0éퟜãý‘Ö¯¦ƒ ÙŒxÐä–Մ利«‰¢Šz!4Ëx L©Qëêq[m}c Lê’+|ßýzåf·–ÒâH­®|ôŠ‹eØÉkWÛÓ#­D±UdœŸ3Uh3x‚q…b¢#Á•x$};U˜u]>&ùvœõ”°®<ÝU_rqózTëkæäÃ"î=»Ê’¬ß;ߟ@u<ÍÆÕ£ “6I'Ýé©®<ˆPH©ãy<Ÿa\ä…’m·!—žXt4·7 ¢*Ã=ºVþÛ=Iæ·R®©zÂêàDaqÇ^‚¹]UåžMŸÂxõ­'•f`Ì uª•ÙØ7ÌWt+VŠIÀÅ¤Þædq:6sÚ™ »³žkD:lñUe™#c÷½k¡UªþÁB¤rÊl±ö9dë´~´–WŠ>R9ëWã¹ÀNOÒ¢U1/áŠAh.¤Vö ѾlrOj¶"‘Û®*pû:sšŒM#åsׯjÁá«Ôw›/š+bÀDÎv÷5³¤X‰$Š{„hàncv+õ«à$‹Þ½ºÒÎÚ}Ú&<³â<` ùVUðK–ÜÆÔ}ë³ =3Í9ó”¯b¼ŒTŸØËÌ>|rN™ª×]æ‘t_N™ž"2bÕ»Mr)ÃCpm0C•“€kšžŒ4hѾŒ4×ÈDûÏÈxïÚ¶Vu´1]é±y£¦J‘ÁÓê²ÿ¥Ãèxq]s¼dÓ&:"Í̳È"ÛÿžÉüøÖU¶mž{Ÿ>Bwony«°j¶³’Œ|™ü³”m9¨®V2K)doU¬¦×Ÿ÷.‰WqÅV¸¸$m]ØïЧlìùÝøY ¶­´Ç”‚Çh?sJµJžìj7(ÚD ,玸«M2'Ö§öL`…Tm1Pœ¾qÒ´¥ÑV°Ü ë087Öµ-KKX`Ô[F„w«Ñ ~uÙ+{̨«õ1‹h›û²§_­]ÆEUÔ³öqŽÒ)?Y'ŒÖÏáC[±¤V_‰,Sð¥ý«£c$*õÈ©õ=V :ÎrçîÆ:±¦h·7w#ϹED“…ˆv_Sõ®yN.^Ï©´'Ë$û 曋(Xòê ?ËÝx«z]ÀKˆÇBp jøÒØYøÓQ´HÒ4‘æ5\ÈÃV-åœt ‚¡®ñ¶¥Ëj¦íѵ¼á £sÆWéTe]“œt'"¡ó‡î¦êçñ«W ýåçv qÅêzÐ#õ)LrùüiÚ¸C‘€n6óî #)wþµ4±´ú\ƒœ‚ü*ä®7¤¢û3H$±üR°¼w6Ž0SŒz©jKùrDÿyr0}kP-e}o©E÷P)B*O•›b¤é.e²zú3VÌw[páTµÝ-§ƒÎ€7Ú!ùÔÕG'ñjñlά§*Ø#ükD|à/ëE*Ž œv8šk˜õ‡*Äþ…Óí°è9ñ®ÄœW̺¦ÞñżûÙ,§Æví'úWÒQÜÅs sC"¼l2¬§ ×±I¦¬„ÄPtågèýIYŽ)„Ó  g<ö­ls sšˆõ÷©pzÒç4ÀsRªô¡WÓ½J4ª1RÅRÐ!('„ÓÐ1ª2hcÅ3>½©Xލ¤&•­3ªÑ` ‘y"¹?i¬›î‘2’mY1ÙùOã÷k²hÎ2:Ó&´ŽæÝ •2’)V Öuiª‘å`™â7‡@ÀeZ¹»Ñ%¼Á‡QÏÁ®ÓZ°“GÕ%±¹l¡bñIýå5ÎêpûIéÏË Áò²Þ¨ÍKÑ(Ãm½EI2 ã :åY²†eá—•>¢­ZN~Wì~òúêóDZÌÐHmÛy_J° 9E?tò§ÐÒM΃<7ðH˜ìÚÿ{¨¨•ž£-ÆC¦`ó-jx[Ä/á}l\±w²lš5n žQXðŽÄò½µ rã¡î)ÆV`}Ê\@’ÄêÊÀ2°î /'úW•|8×¾ÉptYøó¼ É$ã¥zÌ`u¾â(\Ãþ—løä>+IcÿõÕ{Áƒ œH?Zº\¶D-Ù^ô¼ÔäqQ·QPQÉH†F"¹íeO˜ŠO8î+©+Œžã¥sWÄË&æçÕǹË_kÄD‡:ãë[vqb2¬8ëùÕÔ ýt6H»z/"›g*FDÖl8AÔæ«ObçïQë] ÎÐü ÅdʯrN>Tõ¬'^4­«¾‰É}ÌCk ÍÍZ·W2£° i­( ÉîjÂØHFÜqõ¡B½UïË•y˜{«d*À,ùõž#Ž9ÔÇlÒÄò8?ΦòÂÒœ/OsZC N.ö»óÔ—6Êó®ô8ëŒf«í Ã5²$‹È$ñÏZæ•FEtY!Zå5„;廞•r‰ÎÕÅfÏm4R Ó2¯¥Wóæ‰6‚ÀgæÏz­Jtõ–ÿˆãkBËæÛ½€ëQ<÷?ºˆ²B™Gñõª u/Eî0~_zÔ²•dM¸PØè:b¹y+bçîÇ·SKÆ:-Ä··zŸZ²sƒØÔ #ã¸ãëQ¢åóØšì…8Ó\°V!¶÷*Ol¯ÁIç“ïPÅb‘ò¶EjMuЃiÿ&›„^è ó(s¸ç‚­È¬}RÆ8à-e`3ÓŠèÊ|èNãÏáYw°ï2!þ.ßZ™R‹ ´pûœLAç=qïM½ F¶r¬4FÞõ8äʪÌ|Ýǰç5²‹ŠÓRä}2:ÕNeÂî=ªä´ˆÅá»R5™pI‘@ê{й—ÂŒAã.ybqŸlUø3ž)¶ÑU/§z²FÅæùPê­žgИÙå2Õ ¬Žx®ŸKÒ.u;%†kpW„œ4ÆðÆ¡’ÂØÿg­fë¨îËT¤õH‡ÂºÖuA3#H2ú3‹þ5ëãb±¸¬OÃ%… ·ʈ¿wjm®†$Èäuìk–U}³¼]ŽÚP䉛<‰(ÁFÝØÖuìv³ÚH·îÀêx#Zé ´OÕ?£kZJC6vœ 柷Žöh©FèætÅ»²´‰à“Ï€ŒùL~aô­!ªG!Ûµ‘û¬œe­š›HÊŒ°º›Ç–ÒcבXO.f’"0v*\¢Üñ,jàv+U¡Ó¦ˆ]‚á“%ƺ8mDýFOò¥”A)Šºtý£¼™|ˆm’¤ =O”O²<ãÀýjÔ¤jOxe/çƒý)¾nÇOMýÛµjö&)L˸ g©20áóƒHÖi<2ÚË÷v÷éùV®±n·6>x‘ *ÚãUmg·VÀ5žÚ£e>xY˜úc”€ÛN¹–Ù¶0õ^ߥlÀêé» =Edêˆm/¢ºèòMþéè ÒþÙKFßÊœ÷æît³}?.†Wˆl¾×i”’<²Zô„ž/:†žÚ=Ôéö‹aò)\4‹ž¾ø®Neó#B:žŸZçÝ®<9®Ûk¶¤G vNÞãèk¿ =9Yó™¾ÓæKÌúz3“SJÊÑuK}WM¶¾·;¢š0ëížß…k(ÏßsæX¤RªÓ€ãµ8Š`sŠ @)í‘þí)¦“@ cÅDÇŠq5 [Œ ¦“ɤÈïIŽri€¤síJ«úPJ¢#ϱÆ3는ôãÎhÂüDðÜÚ­„wvC7v¹ yHä}kÉ¡Ÿí`ñ"|¥OlWÑw{Ld„`ŠùÃ^°“ÃÞ&¹·Ã$FBñ–èP“ð¬ªSæZn4ìf^¦Ã휃P[íóü.p}‰­‹ˆ–æßÍM¹<¨¬ž9ôÎ<šˆ=5kÛ)“0·USëW-á‚]ðÜ >I9XwªVy"6;”ƒÔzV…Ìıð=}k);éq™ŠÆ) ?*ÐÛ&YyÇ$zŠl°Ó~0z¢%’'$n :}}ê’¾«p5cy-¤ŠöÖf†âš9ô>õí×ãÖôèå¨lg¨$~ ú׎x~æÖ]JÜ_ÀÆ8e»}Ew‘Asè»ÓŠ¥ÌC"1÷$_oP}*Ô$úØW=ãi„ÙÔãñ«=«ÓT‹SÑÍÂ+,Š@’#÷£`G®oÌ×OÙD-ØLaȧše"Ž~PnJñŽk˜œ©’Eè1ú×MsÌn¡ºŽõÈ_6&à1äÑÐå¬Póq2}­tvó4qŒdsXð4÷añû´üksp1àu£™ÉX‚æI¤tU´Û†x£/Lvõ«*ÀGŒsPIƒÉì8÷¨…4¦ê=ÙM»X¢~y«¶×ÓFO*Ë‚#¹ª³K°qÁ¤‚T ýz î¬fÝž†¼3‰>q“éÅC3^¢™k.=U‡&¤ožg'å¢Rã"ß°‘÷AÉ«Iu@YÊñÂŽæ©´›!*Þæ?…pWÄ;û:zËò5‚¶¬[‰ÞòpHàtZcG½Ç ëVde”FKŽó¥C >y»ÈR•ôFxVŽ|~µ4ð àúvª²ÚrO#¦:UÍ=U$ NIèk¶÷FkCJAÆÐ)±( T‡2ÉÅiÙYù@\ñÉ¥²¹¬S“²(2¥¿UJê3è=륹ÓÀDnk6[anø4¹‘¢¤ú‹ ŠIoŒuÆk>ûH†)#w“j>F}ëFãPŽÊÔW~>U®n÷T{²2[ Ðv¢1oPªác™Ötûs¨Ÿ#vÆäa¹²þÎ"Ì{/;›®kvä8`9oÖ¢ûx&_½Ö¶jÇ+wfdê2-­”{߯@À­?øAumáD–ød’ǃéWìdkL¬Ww9ÛÎ+A/§ßìG½&ßBâáÕ>ðu¾™0–ëeÔ¤áOµtóiúS„Gµµ*…(¼5r–ú”éÑù>¹ëJÓJNã#g9ük7 êÙ²­¬‘¹}“¦Fl­ÆãÎt^Ê[Y9‡j‚zV+ÈòŒ9ÝïQÀZ9ÁºûÒö1ù‚¯©ÛÆLöÆjÄ2¬ŸwšÃ†ûÏ ¹Ç÷«ZÔÁ©¬ÜltF§1kŽõw“Ã0'i¯“Š˜à@çý“ü« Òç²¹£Ø¡e¦¤vñoù°£ŽÕtí@”ªqîåQ““ì:Qqƒ|¨ka§'&«N»ÿ¥Y?Ö¢˜d}*À«FkVȬwâ¬Å´;§‘Q}I¤ÚJì S÷MsÚ¦¥meÌò*ãøz“øVv­â¹+å©ãÍo¼~‚¹ˆtùï&2ÎXrY¹s\óGHjK—Dj¶¹¨OäXFÈL ζtÿ 'Ú5'i¥ë³q#ñ=êþ‡§‹K|„Tª…äýMkt&®'Sß«¯—O¸j=YJõU,Š¨Â‚ ¾â¬c«jd¥‹ê¿ÌU¼ü€JïjÑ@¾&6¡aóàþ>1Ó§jk('=êJ2uËÔt{›g8.G¸¯ì¼È­æÓ¥¾±ƒ×iÕÖiQêïa Ü?¼WeVÉVŽ ƒÇèÊ´â“åº> N¬£n¬ô#2§©íJ§=°=ë•¶×¼–ê9aqÁ'æ¯5»m©ÁpÙƒÐއÿ¯ìiÒÄF§SÍ4§Ô1‘Š”WX¨Éæ)Æ­Gž1I€Ç=êjG9¨M1‡~™©æ˜95: ФA@ð(Àb†àf”TSFhÄ€“ùs^}ñAþÕÑÔﺶù—±ÛüCÞ»™I/׊i·Yc*ÃrAÐÐζ³˜Ð/͵±Ÿj†òI¿IÁúú×Eâm èzä°ø÷–‹ØzV!;¢q”ê3Ú¢PÖèišzÇ=‘GLË Ãg$zV­“$›[¨÷Dü\Oç\Þ“~-µ(îa|’¯û?ýnµß\é_iCœ:¨h\p=? á«¥fiŽbkg°ÔL/Ì,~F#†SÞ¢Ô4¿œ•Iê3ØWJ¶ßÛ:SÛ8Qy|±Ó‘ÔRiÖ«¨éG'7Vß+§ñc·áÿê­(¾mVëre¡ÍiAm§û5Ðco.2ýJ·÷«Ôt˜ZâßÈ”ÿ¤Äß9¤‹êqø×ÚDÎv„o3`e_¯§Öº¯ Í7“L"çŽæ3íÜWbÕnÜ[Ëoæ^Û·1€.¢ÝòÊ£¿×¸5Ò[ÏÍ´sDw#€AªŒ‰sdÓª°|Aëem-¥ô‚!þ‡2ïþy¿CÖŸBzšGîšCOþaí@ÎVâ|œz÷®gUQçm¿J»=Ó¹ãå4³ ç°Ï½rýe^ÈÊjäºt&0>^:U‰bž;Ô‘…Ê÷— éP¤îbÕŠÍ AïŠÏy{´éfÁö¬ù¥i$ù}y®šWfRa#$Îx5(Æ:RCoÌÔÏ8⻌¬Me0  ê_å#,Ãÿ×X™"ºVQžq\Öé_7 ~êò~µÏˆ“Œ}ÝÞÅÁ\ÍIB9š]§æ«\߬„{Z—Ò²§±W|~µç:XŠNñw4º{–íîÔ&661ÈúÔ¦ö ÿqø¬ñfñ&FõõÆi§ÎG8;‡NkŒ«f5\’öBå”TÒ%Ê ²)ç!ºÖ<³ì8o”ûò)Š7ûý+¢ž>®î7%Át7D¸eíZ:N«å_˜íºë\\%¥‡Ñ©ò\N„þù½³Íj³(=%Æ..éž³3Pö<ŠÁ×§û5„Ó¼½?\}·‰õ[H Dþ‘3LÖ|Gwyd`–€r9RAâˆãhÝjtJw‹¶åo¶Irù'ŒóìjÔX#±¬î o|sZ1^EÜ8ôùk±b¨¿´p¸H’Uâ!ßšIç'×ùÒIw ¼lKuþéÍ {l\âLçÕkG‰¤íi åc–,ÿxjäptý*;9áùh§Ò´Â8*qÜSSŒ¶afCã>Ý*^H÷ÂP¹æœyÇÓj˜š D’}jxáÁ¢ǵI¹Pdž¾µ.Z Ë~+F—A×5‹%Ì{Î]F=H©S¶ŒdÌ™ôÖR©»4Wèn›éAÈëÞ¬¶ª¤Î2§õ®TëÖÃ;C»c \V}Ö¹$¸Xp1Œ“YKB/VZ”J†U–Ö&^›ò¤fTNJS^nšÖ¨è"û[*vXÀÆŠþäóçÈ; þuÃ,j”­N- ¥–§{qªØÛŸÞÝD£Óx5•uâ›B 9ÿg\¹ÒfmrŠ01ß­M•ü3³ŸnrTÇÕO•FÌ®fö,Oâ ëÓ²Þ5‡?ÝùÚ›g¥^\>ë‡`{ù¹«BÚÔ£mˆa{Õ­´qüÛzq\òœª|m°µ÷3¢Ó`‹æ$rI¥‰$߯žÎz^• Àÿ:ÅhùŠFõ›»”\·©ü+H²ÖŽ –àùÃæ?Ä*iõ´é 3{žzx|M8BòË:¯:tØ8ã9üjÔ'0!î@éô¬»›Û› „h¸*{qZ#Ë&• Lè[háGW}*ñ« Å=û¾#Dö¦µ'o¥&kBÊò.FkÉ~3iît{MNûÛ)ÃÝ?ý|W¬Ý‰Œ¸(#;—#nyý+›ñ~˜º§‡oìÊ+"` ÿ{~µ•eîóvÔ¸;KCÇxîá†â!ÌŠóÿ §~Ç•ê¤ÀÕO ÊòØ5±ûöòç¨SÈþµ³qn’ìFÚ ðIéÖ¼¹®WËØûœ¹ãÏÒKñê7O”‡FŒ{×Sáí-íÜVŒO)1,{ÕÁR'š¥ª¦xžFjÜ í–1]ºÉlðÜ Äm‰ÇJUaªšØëÁWiK=úyœ½ºÜhò¾›¨$±Æÿ4 Ë×?ÐÖ•Â’bcÁ®Ó]ðÊx’Ôwt«æÁžƒÉJäE«% •¡hî c鎄t?CÒ²”ï~ýÏæe¬½§°–§§o‘ÛxZGŠ;kˆBîü¹Žì|„ðOÓ¥w–q?X–ÞfUôYù‡â9üëÏü,fŽ^VEÃŒ<ýkÓ…·™j‘·úØH(ýOâ8¯K +ÁuECßrY­â¸M³F®¾…sX7>–Þc>šûsÖèGùõ®Œôô¬ù®ÚOÝE¸rib½•¯=úwUO`ÝAúÖJ•¥ÏÔwè]¸ÓY"¹·Ns¹[¯^£èCöìµï—p³º!e^†6ÏÊÞØ5/†îädÒ/ÝEݱڠñ¹Lz×DöÑI£ £ƒ½OC[ˆ¶1¨§¨ÀÅW·O.…˜íóR‡ù±@‰)Ô|´§‘HÝ?ó‰°H# © k„ù¼•À«VjÄ)òc­xÜœÏ{³<ÝȶÅÉ8Ç5×ïŒùkƒÚ´Ú5Éiõ›{gäùqéÒ«ÙVû2¹“hǸŸÌ~FÒ§‰D‡*x¤–'22¦´àŽ•kR–HÏ‘=Q4KƒŠ‘ÆOÓµTYš2¡Ç©dRXr:­zqšÐÍÁµ·ÙóÊ9€{U§>ZÕ›¯ãV¤‹#Ž•‘ƒ°Ÿáéõ­ZN\Ìi2O= RS¾p*ì˜|ƒPCGÞ{ñùÕ¤K-&<°~ T•`à…ÔqK4àpÒ³ä˜ùŸSÍS¥ «I\Žf¶*ÞÀ¨ü=ê¤QùjÑŸ÷‡j¾Ý€µsK-¤õƒå~E*¯©=¼ÎŒlt= O!†D郞ëU#”`µ1Û ýEgõ|U>ªkÌ®x¿!¦‰}j«[$ŽGÍíRÉ‚JôìÊ!óS$öç‘Íg)Ò‹µjVùWð°†ÄAéVM’˶G^*1v 3ÔŠš;ˆä82(=¿ Ö4ðsÕX–æŒÙþKˆÓæ ǯ֬-š¹ÊîÅE¨f‰‡8¥CùGÌÌ•³¾ÁhçüÚäj@ :‘õ­¯5>ê ûÒ;E'ƒI?¼9Œ˜í¯œe¶ÿßf¤6ÈNBãÛÒµ6ãõ©TZÍà)½Û›9õÒçß’çÞ¦]"|äìëZÿ¬ÜO«/'Æìê>cçf:é#xÌß\/jY´Ø#„“¹ˆ=Í^i9íÞ«\ÈLg=:ŠÚž„Zj$ºŽÅûx¡Ž¶5R?ˆ/29å»ÚµçÚGUÈéU¢#iÓÂÒŠkr¬sW1ys²1ä·kcö„È‘A?ÂV´n"ŠI72)8ÆvÓÒÁ|¿‘öžÂ¸å€p•Ö«° *ÝEi"ÖDzqÚ«øqŒšPÊà© þu{)«mq‚2:ÕöIP»d?JõpÖTš×¦ä?â#cøsL$g>´óÓÚ¢Éçڮƀ܃úÖ]èÊëZIˆø=xª©~=i4š³>ykc¤|EÔ´ýŽ#¸vØ:r~aüÍl˜7Ü$/×;XûÖÅ=(Ùk^µþ1Ÿ¡Èý3U®ÁŠxærH$Žy5äUÝ?—Ý¡õ™5kÒtï·êsYOi{–¡­eóCßü u¾k}@\ØOÌn…pz`èj-nÌYø‚Âúhso}Ù¤-Óq/?•eieôsìórˆÜ9 µucut*o™¸>·G°øñî<8l.úE‹Y=Àû§ñ‡ª­5ÒgÿU&Ç8>¾Þµ>—4š_ŠQË£jm'?òÙñw]ÓÍÌm:n/÷‡8ÁTŸ2izžm¨×p–ÏCñ߇Ìö {çšÞ)Ûóm‘î:Õ_ çSÓžÓ¬‰‡Œñ§¯é^‡¥@/t¸Vq¹Ðàzˆ®F]&o øž+…Eû;ÈW÷k€Cøgò®§ã䯫¸TßXþ‡I¤FçN†[6Å•£QðôfYo­~U¸Œ¥Úv•1Ôï Þ´ˆÇ7(]$8b{g?ί,>_Ëü åkªÆRR뱎'yóÇÔò¬nG½†zÂ’+#ä9Ù‘Ï÷Oøô«&$ŠS÷SXu§¦j;OCÎ’&èåŒÆxãšjøzïûGB·vûÛ66?¼¼S¯l â:¡õÖªørÞM=îl%9ÚÛЖê:…t8ç=è’¹±šs ô!F¥fv¾‰ý]+¡…„£¨êÁê3OžÜ™’â.$Q†˜UbZÎç?òí)àþ­½ý\™Ôó×µIHW½ˆŒyÎiyÏô G0ö¤ `>´ÑÂ`v­I—ïéÜV1“®ÓåwFS’Ïÿ\Õ9”È}?­Z“‡äUlŸ0®ÖÝ9ät¨¢ÈNNÖǽ\?sŽ£úÓ’>3Þµ8Î6h”ìfµ¾ÀTÿtŠj÷!Æ;VÁÆñ¬Û˜ Ɉñ“ò×™[ :nðÔÕ4÷4¢Ô!0€åU±ÎzUckŽ_ï1êkx³Æ0}*Œ¬Ñ>IÊŽ™õ­°øËûµI”m±©>­*îÈÈ>ب´ç zV<í‘$¤.æÁo ´¹,ýIé^¼%¯sJïsnYN}sÒ¡bïœZ¡%äg?2Œ`úTkª$’ £ùŒV±w%£\¨¯QÆi%_Ýäònô‘:ʈéÈ<Ñ3`sßšÚ(’®ÂHÔñW`œ Нæ*`÷Ï5·¢Û½äáG8J§ÜqWvlsn›G#óÍT9Ï<ó]üzeºF§ÌÞ¬;ßuhqÔêMr9ų©Ð’Z¤Ñ!ó0˜éƒUd¶@AÈ#§B+«>¹6ù`›³Ç=ª€Ñ%m׊橅£S¥½£5ÐæçWŽHŽñƒëZv—‰·8ÏA'w]··´›OîÚ۟ЊFÒ–}¬ÁìzW$ð•è%*nëîä7Ë{2êܨŒ+£#9äS¥]ér¥gµ•Ý· ¸¨çæÁz57þô}?*ºxç*ië§õøáØÒ…FEKœ8©[\“Ý\z¯_Ê­Fë$„¯_OJï…XÏbylIþµ ’OÒ”€)Ù§ÓéZÜ› 1û‡Lsõ¨¦' vÅX·cÚ¡uÇS@òqžEA:#П皳´þ4愘ÏËŸZáañ/øTÞN;v©b„"g8ÏJpޣЗ%vR‹dXQ 8æ«Cbדïqû•<ûšØ†Ò9pÏ"…êGµ^e‰#›vŽ˜¨uã´^¦Ð¢Û¼¶&´À„ÀоŸv²-åÆC;ÑKˆÂ}þ}« N+vu“:©…?ZÌž ŽLE”úv«RÝ.Ï”f¨µÆúÆr¥-À…e˜rãrç­_Šê,ÓÓ58ÇN½©.-ãÀ#ƒíYÚ¢Ö›¿¨ËêÊG"±ôL%Ýô@ð$ÎÓÚ¤Xe1¿þ=ŠÎ°šæßY¾F mOÔd§Œä½è1¨dàTkrÄsZ%™q’zq« lÍ[’iV M=W${ÔÁqZÂ|MÒ¡áI™™-ÜL=@Ð×%4kyáKK”EÞa±×+ÿê¯a¾´K»)`”nI©ž¯6ÐôKˆ¼?u§¯-Ì‘m'+´àþ|וŠ÷d×£ÿ3ÔËk(UWz= “Äþ%ðÙÛ™ž6²Œ©þ•ªéæ[-`F¢EÚ&Œ0ê?:ØðÔŽ“\éïÑ\í_ö—üEt¶Údw–÷V„1·›.¤vnÿŸZÕ+Ó;+Ôä«îèB!ûO†ãº¶e3DVxtuÒ·Q;c;w <®q‘Uô=-ôû!Ü¢–Ž àÕ¨"1>Ò~ïè+ å©äpâ*s{ÝJz/evl¦\|Ž:c¯ëZ:îžš†•2¦E]Èvòæ¬|®Bÿ3ùUÈò@Ý×ã¥z°‡.‡-jÞÖ\ö³0´ ·½Ñáœs$gcó×Ñ`8 ;Š©§é¶ú|s%¸`²Èd#°'ÓÚ­Ä1•Îqü©ÚÆr—2ÔUæždAÔàÑŠ0(’dÌA:ù¦¶ ý*AíHã9Çz„¥mX×ö›ÓzQK¦Üå Lyþ¹œã?eÏnmî'ÜoÐ׉‹¥Qb!óØÕ<š ‚0z 2 „¨={ÔÄW¥ )ÅIuƒglö«IQJÐû×1ªéϦ]mÆ#Ê··øŠívùZ¡?Âãõ§ßØEna˜dÜãžž|HŽ[£EayhLS4I÷™z0õ#¡­Ôo,ÿãêÛÌŒu–xúW.î<9©2J™)ÑzSý+¯Òµ›MA¤É¼š2Ãp&«>ekÚHQ}:šk6WQÀÙÜ `È„‡ë×k¿ Œ§WM™”鸊‘ù² n+½ðÕºÇÍ î^Žrz\ #ƒé^ƒ§À°Z(O$ŽõÑZ~ípÐ÷®\‘úTƒœÒHÀc'éU乎2A<ú ám-YÞK3bVDÜÉÇ>õfkÄ~lT‘È9æ…VÄõ8¿ÜoÏeÕx7xØÚ½n{3\Ftü+6áDrV”ô5KR¿lþÓì!kÎL©lwÝÍ/n#_ïëZ‹ÍgiñŸ³®ï¼ß1úšÑ<jèfkbU4¤óžÝê7iÁÁÉ4†Xõ¤&™æ L‚:ЀŽ(8æ¡Þ=iÁ¸æ€Aë×ùÐè$B§¥”ÁëFï›Þ³åÝ=€ª­¤ü†«¹Ï#‘ØÔM‚¸<Žâ’51¤å{•7F\«á€1.2FñÅKšI9LqÒ›ž?A] YˆÀñFš—–â\a“Ýðk†[ymäad?à èq^£t‚[Y"oâZå౎þÞkG2üÈ}¸1[©xî̧EÐõ­FW09‚Gåó2¥±]Z„èžÊQž­p Í„ù]Ûã„Væ8ÅgjdGZÖ2wvì‰\—pè=T8éÎ)öä¼Ù=sÍ[0£¹È÷®«…9Jƒúb³os‘ósž¦ºcO,ŠJ«,*c…'=êVç8krÒÙãÎ~ •ö-¼CŒ"ñÞ­t$W¸¡¤ô ŠÌ ¡¿Z®ÊO·½]–0ÚxïG“ò}FkŽ®÷¡£4F·$Óî¼¢WWm¨K°bMÀôÅqbybÉ 8SŒúW ëÖ¢ù*êámâvR]¼¸gÕ~µÏG©0q¿p÷¢—¬@#‘RçêÍT»—¶~½*d‹Š¢·é¿æFúŠÒ‚î'°Àj¸(w-;œ/Œ•­äófܪã }q[Þ&ãÃö¦nCŒ¨=—¯~¦ª´Îª 8Á(¹©'·HÏ£^ ÅÈáºsV&¹WOâÍs{h÷7Q]„‡§åPÝéé(܇cw© `y,ŒqõïV¥ÕŠjÌÁŸMœ÷SŽ•œcš90Q³]<Œ rúÅÛOŸ ²äåˆã­)ÖäWhÊTbµEØ"2à„È?•2o Å9Þä“ÁdV•¢ˆã >èÆ*vbÙ¾êòqQV«}iM¤j:wÏc>õë´qúRËâ>Ë,ÖÌ„‚ /ø»gs.£9”.ټƯê6Ð]Ú8š5c´à•ç¥qƋތ¬»=‡Òèn—qex0'V?ÝÎ ^šÊ™D®dø|ìo' nÚÜ~µKûNúÂCŸ/Ëü%ƒ ÁMP÷jÓùšÛkF6m…&Hb¹Ø|X†M“@ÅuÀ«§ÄPÈ…ñøWlqTZч2/»d8¨á›cc5—&½ ÿ–/ϸ¨Æ« œùn3ÎxªXŠo¨s#©K€jÌsޤàWsânJBŒdsÐUhuyäqæ~ñØ¡¾èü*'Š‚vZ‰Íô³«¡*r=«[Ô µ®Sýk«žÞõ“7ˆ.@0‰7I»€ÀJ¨°¬³Ÿ´ÈÏpÒ Øg¾j'ˆºåŽâr¾Æ×‡¬Ârÿ4œ1çëRêwg¿;y‘âÚž¹5rÙ¢a@ÂUf‰]Žvä¬XP{è§ |±ÞÂkDI§Ú-…»¼ßëXe ©á-$‚Y¸ÇÝNÃÿ¯U5;ÿ³•78ûªzf©-¾£xC=Ï’§¦?¥`¦¢ù"¯böÑBÉVÔñü« O´û7t²çûÍšØC‘]Qm­KBÊüVuÄ™>â®N}«>AÍMHsÁǸӳ1éúÒÇ×ñþ´QK ßÇÒ}MeêŸñð”Q\“øŒeÔšÛøþƒùU±ÔÑEZ$˜v¬ýGýA¢Š¸üHrÙœ¥§úÃõ«Ë÷ÍWqÄ=¿ÕÕfû‹õ4QL m»Ô­üAE÷áR¸?Ü¢Šb"þõWþ1EãæŸdè¢Xn¿…jÁþ¥(¢¸pýMØîõ¡oþ¨QE\ʉ…ãùÛ×Cÿ šg…ä?ß4Q]ÿó ½Hÿ—§Goý*Û}Ê(®cbK_¹ùÔÒýÁøÑEzÙ «\çüIø*(¬±GÕ>‡MݦÞǤßCE¬þ ¥áïøó“þºä+fçþ=OÐÿ*(¬ðÿA|"Aþ¯þ\n«ÿò}MWc²¶1×þ>×ëZcýGãEÃ2/î}*h»}(¢µ‰H£yÿ²~ÈTö¿ññÔQEZø‘›ÜWÿÖÿ®‚´?æ,?ë¨ÿÐh¢µ_¨ÑÒA÷‡ÖšÿòýÃEêSÜÒ[#7[ÿ¤ü+RÛý\J(®:?ÅÖì»Z¿Ý4Q]†ˆŠâ¨É÷¨¢•%êÕ‘á_õs×FþtQ\ý¯ê>çJ)ƒþ>ýÕþtQ]q3eþÕ}óøÑEIdMH½h¢‚GGÐT‰÷MPŸ¹CýïΊ(u¨äíEwñ~(ëEÓÓð¤ïE'Þ¨åÿV¿U¢Š™ìÀš?¹þ}jÿÕ5Qö@«ú¹ÜÿK?õýTÇâ^Ÿ¨‘v.ôÿãQZ píOíøÑE6/ñÓ×øh¢ ¿wó¨åÿVÔQ@ÙX}ßÄÔ£îQEJ_âQ@ÐîÿçÖšÝOÖŠ(ÿÙleptonica-1.70/prog/nearline_reg.c0000644000175000017500000001650712266543170015271 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * nearline_reg.c * * Regression test for finding min or max values (and averages) * near a specified line. */ #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 ret, i, n, similar, x1, y1, val1, val2, val3, val4; l_float32 minave, minave2, maxave, fract; NUMA *na1, *na2, *na3, *na4, *na5, *na6; NUMAA *naa; PIX *pixs, *pix1, *pix2, *pix3, *pix4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn.tif"); pix1 = pixScaleToGray6(pixs); pixDisplayWithTitle(pix1, 100, 600, NULL, rp->display); /* Find averages of min and max along about 120 horizontal lines */ fprintf(stderr, "Ignore the following 12 error messages:\n"); na1 = numaCreate(0); na3 = numaCreate(0); for (y1 = 40; y1 < 575; y1 += 5) { ret = pixMinMaxNearLine(pix1, 20, y1, 400, y1, 5, L_SCAN_BOTH, NULL, NULL, &minave, &maxave); if (!ret) { numaAddNumber(na1, (l_int32)minave); numaAddNumber(na3, (l_int32)maxave); if (rp->display) fprintf(stderr, "y = %d: minave = %d, maxave = %d\n", y1, (l_int32)minave, (l_int32)maxave); } } /* Find averages along about 120 vertical lines. We've rotated * the image by 90 degrees, so the results should be nearly * identical to the first set. Also generate a single-sided * scan (L_SCAN_NEGATIVE) for comparison with the double-sided scans. */ pix2 = pixRotateOrth(pix1, 3); pixDisplayWithTitle(pix2, 600, 600, NULL, rp->display); na2 = numaCreate(0); na4 = numaCreate(0); na5 = numaCreate(0); for (x1 = 40; x1 < 575; x1 += 5) { ret = pixMinMaxNearLine(pix2, x1, 20, x1, 400, 5, L_SCAN_BOTH, NULL, NULL, &minave, &maxave); pixMinMaxNearLine(pix2, x1, 20, x1, 400, 5, L_SCAN_NEGATIVE, NULL, NULL, &minave2, NULL); if (!ret) { numaAddNumber(na2, (l_int32)minave); numaAddNumber(na4, (l_int32)maxave); numaAddNumber(na5, (l_int32)minave2); if (rp->display) fprintf(stderr, "x = %d: minave = %d, minave2 = %d, maxave = %d\n", x1, (l_int32)minave, (l_int32)minave2, (l_int32)maxave); } } numaSimilar(na1, na2, 3.0, &similar); /* should be TRUE */ regTestCompareValues(rp, similar, 1, 0); /* 0 */ numaSimilar(na3, na4, 1.0, &similar); /* should be TRUE */ regTestCompareValues(rp, similar, 1, 0); /* 1 */ numaWrite("/tmp/na1.na", na1); numaWrite("/tmp/na2.na", na2); numaWrite("/tmp/na3.na", na3); numaWrite("/tmp/na4.na", na4); numaWrite("/tmp/na5.na", na5); regTestCheckFile(rp, "/tmp/na1.na"); /* 2 */ regTestCheckFile(rp, "/tmp/na2.na"); /* 3 */ regTestCheckFile(rp, "/tmp/na3.na"); /* 4 */ regTestCheckFile(rp, "/tmp/na4.na"); /* 5 */ regTestCheckFile(rp, "/tmp/na5.na"); /* 6 */ /* Plot the average minimums for the 3 cases */ naa = numaaCreate(3); numaaAddNuma(naa, na1, L_INSERT); /* portrait, double-sided */ numaaAddNuma(naa, na2, L_INSERT); /* landscape, double-sided */ numaaAddNuma(naa, na5, L_INSERT); /* landscape, single-sided */ gplotSimpleN(naa, GPLOT_PNG, "/tmp/nearline", "Average minimums along lines"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pix3 = pixRead("/tmp/nearline.png"); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix3, 100, 100, NULL, rp->display); if (rp->display) { n = numaGetCount(na3); for (i = 0; i < n; i++) { numaGetIValue(na1, i, &val1); numaGetIValue(na2, i, &val2); numaGetIValue(na3, i, &val3); numaGetIValue(na4, i, &val4); fprintf(stderr, "val1 = %d, val2 = %d, diff = %d; " "val3 = %d, val4 = %d, diff = %d\n", val1, val2, L_ABS(val1 - val2), val3, val4, L_ABS(val3 - val4)); } } numaaDestroy(&naa); numaDestroy(&na3); numaDestroy(&na4); /* Plot minima along a single line, with different distances */ pixMinMaxNearLine(pix1, 20, 200, 400, 200, 2, L_SCAN_BOTH, &na1, NULL, NULL, NULL); pixMinMaxNearLine(pix1, 20, 200, 400, 200, 5, L_SCAN_BOTH, &na2, NULL, NULL, NULL); pixMinMaxNearLine(pix1, 20, 200, 400, 200, 15, L_SCAN_BOTH, &na3, NULL, NULL, NULL); numaWrite("/tmp/na6.na", na1); regTestCheckFile(rp, "/tmp/na6.na"); /* 8 */ n = numaGetCount(na1); fract = 100.0 / n; na4 = numaTransform(na1, 0.0, fract); na5 = numaTransform(na2, 0.0, fract); na6 = numaTransform(na3, 0.0, fract); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); na1 = numaUniformSampling(na4, 100); na2 = numaUniformSampling(na5, 100); na3 = numaUniformSampling(na6, 100); naa = numaaCreate(3); numaaAddNuma(naa, na1, L_INSERT); numaaAddNuma(naa, na2, L_INSERT); numaaAddNuma(naa, na3, L_INSERT); gplotSimpleN(naa, GPLOT_PNG, "/tmp/nearline2", "Min along line"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pix4 = pixRead("/tmp/nearline2.png"); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix4, 800, 100, NULL, rp->display); numaaDestroy(&naa); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.70/prog/copernicus.png0000444000175000017500000014744307543242414015354 0ustar dandan‰PNG  IHDR¶'>*– IDATxœì½Oo&9·ØÇêê¨Ú¸‚j²Ó±wÉ.Zª¾ˆ÷÷da÷D†ƒ@U)ºpoŒ´oO>‚wÉ"È[r/O>A†1<»¼5'/'SSžC²Š«êyôtÏ`xßÛ£§þ¿"ÿ²ñÿ—¡g¿5Á~áwî/~çþ²áwî/~çþ²áwî/~çþ²áwî/~çþ²áwî/~çþ²áwî/~çþ²áwî/~çþ²áwî/~çþ²á7äþiËCCM_ÿ ¹Å–‡zž¸þE¸?RÛjÛ=ÿÑþùÁ»þE¸¿¡.n䞊å½wýpÜ)QÜ‚oˆT–­ýóɽ~@î¾NÞú@]Õbt?㿲|¶r/±ÃqË:y«¤.®pk°®|´>wW'o‘Ü,ý¼ Bc~î6É1PÜ"Óÿýž~‡éwî½}(îoDZ©S7_ë˜æy|OQ3sYpË=Šûk÷Gi2H_'Â)²þÓ²"¾§®Z!ÜËá¸ÝÂï)î±$·ÐÚ0ßSPÌF.¸-_Øöçö ¿S?šð ɘÎ,‚»Ñé2FÕÎ~.QYîþ@Ü^< ÓÚð i³Mòèí/©©Â—Ô…Þ‰øúàÜ. è’ˆ{|üÚ°ðè–¾3Ĺ´¢íƒÇ=5`ûs{0Ш¥í;ïÑ•Ðú:³}°"ƒ‘L6ʸAYÅùM>º>/÷û ó™zPNIn ÏÝ ÷T_÷â–÷ÅPJ7$76þ˜äÆðOîÞãž©½¸Åe!ÊN%ðü*Ý&Ü¢'îOkñ‚.1jz0—ؤF@Õ¾»ee[7šÄ*ã‘û‘|´-·Qñç•6O¡ 2Ü݃VýLÅn,¬JÝ|wÃxSˆüqÀ¸›bT ?kî°Gf¹û×…Dî9ªX^©fs(:£²cüÕp‹+f¹6qË—q«æ›-Ëz¦R‘*iÒŒÐ\æ{4¶ÔmÕ® Vÿ8TRµ4mÜ…j/è‹6ëËO’ƒ1Õ÷¿®ÆöÀ>¬+;6B$дu/ãîòáHqç’Ýä*íÀØøâ9E÷~°©ÿ„ÜÊR³°Üp5—yËàŽÀœ‘fÊØÜ@é´×YW vŸ+ƒî¨x·,ä9pwo•Ò"·*̼㘢ësè¸5¬©4å”ÅnÔÿgB ÃsS¡Üý-ù¨[Æ.”MõÀØ+ÖÞÔJ¦Î2Á[v§îU­úÖö…Ü¥¼V‰åª0Ux Ü=«³ö\•i ”—ÙøMwÂX[³¿Ó¼¬½(ǧöž¡!Èþ3¸þÊ`c®ßãÿ{T5C²Ó¬åM{ƒÜ*êÆµûrw÷yS䄎9|pŸ•í ˜S¼U…Û³w€ù6áw#{­Ñ2v«¸ñEê¡VÖ¾Á› 6*¿!{³ÇÅ_Eš·p7ªbÌvùžÜâ>gü‰u9Cu=äíYÑ(}Ý©KJŠð›òöÔÚçw‘ |M©¡Gxšý*‹/Y¦ DÕuŒ5ÏÕç¶pí4Δü(îS«µ÷âî¹PÂÿ±ªì ZвlÛÈšLq“ú@EÃŽQ±µ×Œ½a·Jr”B†Jm¸Ÿð±qÈÚ;Ö€ìõe#Jõ"˜àÍúNV¼R×»ªÁÜxQ~+îvËÿ.Sº«½`Ð{m”@tǪX ÷£–ýб+Ì!( kÖ©\—\õy[%çôL.nŽ;oû¼-›¯ É¡4b ûˆBtrT4YW± È…©ÞïÅ]©;ÎTl*ŸrhX²æžÝ+Õð@NîŠ¼ÍØ)ª†«zTí}¡ô›¸fí]5²J¨:ÜìFµ0¬òG¥Æy{WʪiÕ×W†Šæø¸ÌžÔ·Hà¶ÖÊ~ܵjt»Î[°¯ä9è2àf—cwÄä‰*g¨_J_ЬªÇ²±QÒ"Në‘Õ²h•½!‹Q)Ó>kê¾PMO[©§¤Ržg…B±áò.ÎÃ’§À­Š“u× ^Æî:“çP³º#Å-2äVi®„xÈa¸‡}©JÌ en\¨ï(ze˘š»‚Fµ©F0v±³ÚVê)Y«¹xDs ¨D•v¹xY¿á×{y§RQúDÕ­êéÇñ{—êp’©ö’?B?,E¡Ìѯÿ6ôi$/ºqêvý 6¼±;`ªÚ´ P-= ê—ìöeÜ~2æØ–Šûàŧ®Û¡J)\åÝ5«2à†ÖùOÎ`r[Iþá—(Fì ªËJ®ÄӯʎUYÕ[Õy™u/“°«Æ´"´—øø<”*纡T…­¸kDr„¼'Çø¿wÿ4£¤ŠðLÕh¥A‹>?÷ R9#óߌ未nlÌÀÒ ‡c㬎Ã4­3°ëlü®«Y9pì«a8wM_Ï”qËÈáØía`ºÃ-ü<5ðy¹¿Sܹ®t{‡>#Fµ>3÷8~-©qâ]‚,bÌö0Ü顪QÆiî:Õ—Šç+>;÷‹ƒjŸˆ±ý?îvšëq×斛žrǺõxPøÄA¸É¡*2ØÜWKOÍcߪ>èçÓ'Ùú#&LÜ|é©nèŒÐŒÑ‡„»'çòFœ ‚äìÕã<.õØ—ÿ{ÖÁ‡„;¥£‡øºä\æžÇè‚À;Ÿƒ»‹ë;bžx÷<^ÜtfRîsp»sI•ùÞÜÓ°nsk:9’{†»žã«œë2æžÆ?–¹§ArÅmæÃ¹÷ÀA¸»Ô+NB~¦ñeîij¢¹5oHî=°79#¢3"ýþ+JOlF=j¯ÓEnoPD…¡¹­õ’{í7ß@×Ãéá4e¨¦q†âÓsÞ’)רœ¹íEvvÂ~ó;´¾~šxn&îà ‘»œžóâq×ÿÜí¸ /ç–çÂŒGÍbö³Öêøœ¯ß5÷{Ÿ[·SŠþÜ&„ô¹AÌ裲÷£®NÖÕýî©‹¬¹aNèpÜÁÜÙ`Qz“ÝT?%ÕÌ­…Åv5wáGÜaÐ¥Úû;ü7°gîÒÆMpw÷ ·ŠoßUãTÀ“•zÑpË9¾ýÆÙ4X`FE/¸‡¢/̆»ÁÿêO)[Büånašj®åûÍbäC Uœ¢7]¸Üú‹rQëÑ¢BÙNRs#¿ëÙÌý¿ š:@ÓcoÀ ø/äÖk-BëUFÜ··d,úºh*ä–0I, –ý¤¢éq|ˆñ‡\b½. v¶ì®Vù-p~ªjÿfìNË©iÞo¾Rþ)lª#n!Ü0wyq]4JYSˆ|Ä©+¥*%LMÜà$`w$êž•`¸70÷Êj%)↕ Å=ï'û}îá褿~ÎãO°.5¢/'ÊÀj…S`Ê£y{^(УV~5†»ã8‡Ü·Š›=˜úœ+ÜkÅ]îºíyÿ’y©þú¸JRÎþæy”\ÏÊ#²ýê>ì²ñGÐàðÿf û25ÿZ²âo ÷ ×ÿ}g§^oïYk,Ä;õ¬á.à=Yu/™—’×§ ¸{0êE9°{>æŠûû±-ÀZ‚öí¤€¹…O*ß?)Éôüõk˜VÍóŽ•G™Êg(…r”G0ŸÐXîk27À¬ßû›ÿ î¨dìŠÉzêÀíÅ}SìVÜmëûL¾*žUùç¬y¯aºq|V­ Ì‚õzÎà …ø(kÙë“–ÀÅz(òVIB¦§ŒoΑ»W×XûŽ]*]"Nûí<Œ±w§ªRŸ«‚­A0ÇçåSi˜ø>ÂL«aJºhn Å-q};‡ î;˜ó¾dŠ[– ÌaWý‰úDÞâ$.co¹áf"TJ¸ÏÏá]§ºìÃý£4"YpõX¨S™`9V.N«ñL‹ÜB•=r×#ËÚ2/Zœ×mÙ+S¹Ø¥*z¥[aæÃ€û JèŠ5ØCWÜÇ…²•`5 «`UH[ Þäªhn¨yÓ¸•bi/˜Ãº·_%Òo`ZòIœí¬\ž ä¼U +žg¡ç¡€ÅLæ]æ†ûëcÅ Q6µ¼*•<)îBÕ¡$]¯.»Kæ»ï3˜8ç/ä[ ß7âêu‘5÷GLÁ0=ýÅþ¾JøHIP«uÛ¥zAÜÜòea¸ÙÍÍ»{þ¸Un?hnÉÁ4ÑܵâΆ*¼”mìK•'ù7¸&ëOrÃBSÒy\²Zsgâ ô‹¼.žÛ+U÷4÷,ÿPÍŠ¨¾Áž%æ÷²î¨|Äyߎv¹Å£j[ËÇîÂY¼/wŸ±{Å]¼o{_Y*m šî¢PZåm 6¬jàŽP¸[àþÔÝ—ß‹U÷äy®ê™º&¯”öÿYïø•êü÷ÊXëx•™½²la¾yÌ`ÒS?¼P¾¡ÑêógÉUïýý÷À]¨Ö10=Ïx¦ªé)r«þ¥’¦W¹*õÖ/ªR€Í{U a†"¹/ÆL7¾«µn.rnF $ÿå# ¹å`•ÞDá>Ü¿Âp7H§’⯡†2®þ.T~+Uw]|«ª‘²*6¶\)޲hµå¨—`~?ʇò½²ÀtÓÐpÿì%¡÷´À#Èí÷°_0~¢òº½ý h²jüZœJ•™ýænƶÊ[É‹xãßwæ¿0ùctwG†èÁro£½/àj3ÃÇn*Xò(êêë~”L*ÃMåwýíŸúЧ#Jm=2ó«ÆØŠæ0ãßÁxU£“ן¢ªÿ)#²ra×Zzþ°ó~ °‡'ØE¶wÐ!þîìƒ1ƒoS£qnHÏ{ºa(ãy˜ýÆÙüŸïAMÅáꢄӒ¤CÏŸâk{qû=ËR‰×B»‘;×Û«¿Ã¼ˆ‹(^j î;"¢M©Ëê0ÜÂçî«.Š—Ú,âÒ›¼¢ «ÃÌ›…dÏ+² ÒW.’ÁNøÚü·«ÂÝ{³º:sIn0M}%,ÈM^sàSáVVš÷ûÑ|¼/èáiPt¾+p)©…ìˆùÄ=¸Eí«ÓOñŽº·-ÝþßÄ‹.· ó‰{p?íÎÇp p£•`£æ¶c7E-ÎëO»ë1Ÿ¸÷û ¹÷’GÏÜäöÒÜqT*£ˆÉü=¸¿öw²+¶ !6ELr;±µƒäNäGbñÄ^í¥'½ÑxP³“}9Ûf2jž‰P_GØf/çîÑš‘Üý_Ø¿“ú\¡['‡á&j ‘mnã”Ó{¼Ý…'N ®íÅíE¤zQ†¬pƒø Ú‡uõ`ÜþNß2^îCróéOÅhâ[â*YW÷âþÚ‹¶î#nÉã—œüî‹ÐV°¡™;Êÿbª6DdY!wçîˆÊ sÄP °šåSwò¡`wîª Ã!¸»mÜü[;ÖО+©º®> ’a|(AV` +“…Þ=ÿGœ™õ}‘‚» žÅ=¯wv¯=‰‰Û½ñs“÷Œ—=»zxøŠ÷yS☠lÄ`¸{þ£ókç!¸qŽËk²;{ji9lJÂÏó´4æ,;*!‹/JûÆì\ÏYñˆ3Ѭã!¸q2Ý“•Y|ÍÂ¥`¢¤ÖÏZQ‡v°×Cþ¬l.ìp®Þâ†Üor™Î£éÜï=n˜Aë 'èÿ£ÿY¥Úkî' °Ü¸e vžà¤Ê­ €4ã¸Ìn„É£µZáum¹Ÿ ÞãÖ­_pGoŸ¿u“ à®@JÙ(9a„¨Í hX 3P¯q÷¥úÕ0ÙyÃ^åzÔBUõ½æ]K¿  7øÁzU÷y'îU¾ãVKØÓÊîò¼øHÀ)G—õ§YS@UPš[œåbÚ[Œá¢ý½Æ!Š¡¼!¦‰B°ñ<ƒ­.Z\KdíT.ÂæK-«¸Ÿ ÛÉÆî¬Èº f@[Ã+0”Ÿ5§çJ(šL\ä¢h ÷aÖQKØt(”Ä}ßÞ0Øôßfò(Óv›ÄTp¢à•SÇr–·†[ܨñ«¬}ËNà%œ'd°ß•7÷™à Zƒ!÷ç…(p^+kOOªCp‹¬Q™yqŠÜO*”Š››Îô—°“Wyc¸ŸîÐT—¹å†P5÷yÇ3:•òºT܃}º—ñ°Öžã> z_éÔT"ÅcûŠÝ™ÒäQÅ]î%þVe-lÔŠ^XÑ9.ŸpïSQݱ¦n¡Ìþ ì/?*C·+ÅIÖ^æ­Œenp³ðQë,àîÊü•*г¿|VZ$ë.÷Ø4S…*Xw|^ .ËÒù ;·»ìAJÕ(=*îëìs€é¸8/Ú;˜=ç‡à~füé›&“–û䤀 »ÓKÔÚâ–?š-¶ØÐeÝÙ±øª@î¼ETu1ðg‘Ë¢­Ÿd)*³BW‰¶d~ì#o:{qÓTÅ{Üw7JNNNOp¢ñŽá*$y0Ùó¸U%c\éÞÂÌû«QÜÁí5;*Œq#Šö´IØvÆç”~T ®¬~8ÌøÉø]S—…ÌûŒÝÈÈovvžc#­´sÙâÞSw–3q Æq!ÌÚ¯ŠºÑê;””]¡~Þ™R†¸aÿ¢»¸iÔÊ•ûÍ7 ¯ó^ý_ó©5p_]åhZ(nþŒ»3ßwW÷°ÇñŒïÌ<þÜ´ƒ¢k4¿WÜÕ„=¹îGË}y•gZÊJi~ýsÏ„ž¼ªõ²X› Ûû£¼ûý<® ó%fÖõã–°w®¸ï‹¾xúô ¶§ž+aUܯ`‰Ë¼?§¯ÞÈ­˜ãýÛá¤ãp<õÕ—tfWöæ†n-p¿ÿjŽâ¾T6]wK\œPk£ÙŸP…EvŠûºüqtJ!íJïÀÜG¬/a²JWžƒ&Ée•EãxÄx軽j‡Ù}ŸØ¾ã'…,팢äÐF*†by3Ñ¢Â/Ä .+ûKòB^–ªcöÝòæ­9DÜ‚zj1ìÅÍGw/†ääΑ…ð[å÷¼_ÐÛ–'õïGãrKã÷$¯ Ÿ†šb b!Dc>KÜ´büM¸#-“æîÈQ̓qwË3zAØ[|FîZµÎ©Œdˆ*152¯ƒx küa¸©±ûtˆ‡ìÓ_ÝÞ6n1ÎŽË6…¸öÜ-ì"‹PB<ÍDLÓÚÈÉ™ªƒp?Ãn¢êEQü&ܪ“óBnºmÐHN^? wõBn/x=³Gj(}<w>öK>´w8¿ó«ùñ˜È‘—sãäÁ¶…iÂOfÑXZ`r~&î'Û±}Q,NøÞpà øãé³pÃXF|Hn\¦€{¼8ŒÃTäs/ã¶ÿx0îFtŠ.!€»HHà ¹­Ñ³/7±7Yᾨ†+îD—ù…rbÿؽÂaˆâé1LÄÒÜô›‡ñDZe-l~ÑjôN.pB6ê9úåƒp †h:<£ÝðªžIÆ%ýÀ¬›ÂaüˆTûpƒc¼”ã”î°nnÉ7ŽŽ¹Æ„’ö«hõ6¡Ãr‡¹›°!–Ã’c« ¹/*e±%JäëÖ×N¡ÃÂǬUÜí[ÍÝUÄÉH‡à{q;/…ËÚzänn5wK-GÝoyþSr•ÀEE?·æÍf\öÓÐd ”ÍMÕܰ‘°;s+ÑK¹Am1š{ÀÙ^žä®õØ8/pÿ¸¬æÏ¿<ÂµŽ—atA|’ fÔ_ÉñRnðëÉÞRÜÓ¢€ÄЊ¨þ|˜Gk¨¥‚¡åOÊNë²Ç¶×ÜÇ™^Có“†$än§'ÁÃr ‹¬ò†Ý)n¡nåàüÜ3ÓÅŠû- ×â!WÜï4õ¿¿¸ŒÝ\Ãjð)Ê‹¦òöòöŽeÏ kËçöÝA¸ÏÁQ=‰‹Mj÷¶œXÿ‹aHƒ+nuõø5Ë{Í-î`G,xâÕw7N´¸h,Ïûq_œ3½ù6ÿËÌkLn¿š.4¼öcÑÜgǯ`›ý˜eM+Ï‹æ-r×årëBE÷à¸ø_¾”[rVÊ£‚±w­âömddü;Ä—•W÷Ñå¬IPê0ož;Å-û¡Ìq ê‘æ~SºVï^딲ž7¥<+s¯¹¼}«¸Ëç§I©W(ò(oª¢­öÕíõK÷ýwy_ Å­r¥ýÍr"ÜÖ‹‡J E".ªÕŸd=¨,ÿ0Êžßà‚ˆ¸UÍø^qßTÒss´w!+Quw*Òö^ÙlÙÜ»t°-=·>¨I§¢… Xû;y¤åÎF\áÙÖ°À?@l?:ÃÍÁÅ4œÚÍBY_¸݈  ÁŽø_ÿlÄY.‰Üúјa/»úÇ1ZqÚz’ÁN+Õð5U|×pW#àºäÏvŸ!±»p¯õƒeì6tÉôäu®¶i¹+‘»¦S€á]ÕJŒÙë¸vBÆ Kúä"I´ŠàëlªŽÂý.äN¤ÜZ†Ra?nz˜§%„ö¬rÜ¿ºU¸SÃEPË¿½¸_‘]qIÚÒã6)<itî}îÄÊZí€ÛrN,¬W¸ë%†ý¸c>íŒ P}8'‰a.Ðê©a.ä^dØ‹›ìw5‘tãyS7•·…`ÞS Ü©ù¿õi—½¸9u,¶àÒ¨}0¸ÜÓ™˜ØB¦†¬>wE\lÑc™¾†ÔÁ,îiTm’p<Šw˜‡VÅÝé>•ë¾ó'4U‡¶Æ1øIö­ß`¸”“U†½¸k"%UüО›Ìü~ä-l×s¡ú¢àÂ;¯Ì“ƽ:ìKÉÉúôŸ(}6Z—Œ2?PàvIï#â2ºÈ~šÔéÀ‡æ†ì†9&s2«È䑿VGôGã´ðêy˜,KHѬN¼ìeÆÜÐ~ƒAÜpRƒfÊ6/àæpSå>ŒÍa’;Üê~ î1ô¤ŽC8P r"ë6ëØ5\SâgxqðrUY#RØŽO’û‰òðÝ!¸ý‰t¬Y$ËñcW?eBsËÖC\¾ç,M‡Ç§¶§J¤ðâö”æ¾ÜáVôZO¡ÊÕ!#tôkö®†5¿â,ïʬ+xâÒúP$磦s¿ü`àö>{À8ܪ1䮀»½WÜy[vXQQ ö Ãâ·îWùöø¾Ü_»ð¬?¬w²¼z`l8b¹RÛï8(”É¢ãã{wQZŠÕu{.w§Ó¨ÁÍßR`ãŸå­ÒÃ1r·È«nW_Öå­¬‡KL?µ-z®>V(ôµ¼×~©à7œojv«.3p¿QÜ5xƒƒs¹÷5ø†,Añ·ˆÜ¬-8t¸õôÏ«úÜÞ¦ÂA“T†û ÏTÌ›‡L©èöAµ9<üU‚?Iý4Ÿ:ûSðÕj_»Üä©ûpòqëq)ÝÐÜ0äÓŒpÒX«2K*ý§>Mð j˜ÕAßÈçVÑ;Üäí^û¼|ûØuBÕ\œÞ‚ê.^j`ÕXÝŒß4µ8Ï!­¾ÂÇ=WJ½ã0 ý¤q×f'WlîÇí.f™üˆÀèkǾRMüyÖð«î#š|àˆ³R‚³yz­¡t¥ã…uó‡êNè3‹Í rby?n·¶O{·[üqÁT÷3k+­È2ôÛçºíŸvEœ”cÑŸâI™`Ä·Ç5Ä ;vëDÇ~?n·¦´–— ±;eš€£CmBçè½îöÞãv—Ì(…ÔçJ›žÃ¹‹¶¯p·î'Ø¡BvÚöáΆrÞL¤ÄÄôÊaø²c2SšüƒÐ†è ¹9ŽÒk¥=;‘ŸSn—zJDq×Ðp8رNÜõÿ^‚¦fÞ±Âæw†w¦G#5w]è×ý4¶z?šäìD­Rfö!ƒËVäÆÓ€o e¨•úöåvÕËjîH5–û[àns™;>c†¢Ÿƒ<%èøI…v³ \)ýSûüs(…÷w_Ú¹•æ^ý[º}ä¤r¸AU£f(rìÅ”}ᜦ28}|;VP·ãϨgü¹fŸ¿Šä+p›}ñæ¤4··'ßyÝ^óÜ]5™=;)õ8C¦—*¥Sÿ.yð®¨íâ½yzl€³Û¹a!Ärß1ö¹å)»çÔã‡ïÆÝ°{ô~ÉJ¬uJûV>w¼+j{¿›mVþ­*7q¢¹Û‹£“¬}+KvvŽÜ—°?{tÏÛ;·Üƒ2F€[j/ ØFxz+ân±G¬“žšp¯¸ÏrŸœçíß—¼¹Dîþ¸Á‰Ä,*{q‹Ì¾¥ú“†»žvÝzƒÑ\J3¶Ö†m&cê#+ÅÚí£¸=9/ÚçNq_ZnT‘NKéK@ IDAT»'·m0[<ÒwüQ2mšFÜQxœí1ûSÜoT§ÿXeÉ÷\˜×}ù¾£Q‹7Œ=Iö°:×N‡ö2oJs¦—õ5îªkÅÝûËåöåF·ľÜO‡–ŒÃ˜ó@6[,âöòg_îFÏ“wjq×JP­LÆÚ¸Â0/€qr0ðù¸'7®"PýìÄÞ³-Aõ–X…*Ôði)ÍßuKa¨ÿ¼½'·v*Ü{J :zljäv58¹ä»}®ïÉ“}1°ã½¹G¨×¸…ÀYë0nˆd—½'w‹[.ÊžÝ|íÙtÈF†¶å,àÝ%êA×Á¥=¹õÒEÅÝ¿¢Ú²1ÃEó¹»â”Š®‹ a?n}¯äý áÚu{Ȇ »³·±×§|Œ…Y¯ˆðaìÇ­÷¨âChí·8ûñÃñ%'nèQñòv§Õ ¸Ã±½Â4‚`•M;ÃÎ.J¬ôþý!Máôº÷ãÖ  c…ˆÏøØ%ÀÂ6\ädw²Âиês²W×|^/ñ¶§s÷â6îw•åÿB?JNØÍ­óP'ÐJ6z†¶“vGw||–ì¹½y8z1·Ô/uŒ½ÐoUÓðõ$à°º2;Øá´i³]—œ¸-èžóiŸ½0¿÷.7-Owýõ‰×Ùó´]¹O_ºÐ³tîWL¢ç!Óòt`7øDÏŸì_ÌõSöRnÛ.S'4íÈ §ªã¦®ÌrWŠûÏr(^6Ü/”“éøxØn×0(nè¦Óªc 8Λîò5®kÁ]ÅLÀLÚiæ‹íµÎtj–ÁkŒ cFnÕ¡hïŽY™UcsU>±L ;÷¼{¡>™¿;µOks2`öEàÞEÜÊ3v*ñþ¤Ì4÷eáž—³w3ÉÙž]'fw¦µ’:¿yþŒ3ÄÀÍNòǮ̚ö®/Ëïa6¥v‡%‚^X«+fór¬.>önTÜçE.ÊüñåÜó+ ûQ·=Úe*fÆ•‰“ÚŠûºTÜÅÇVòeõª‡ªÛË’®¹­nkÌ%Áñi`<ïxùÃs_Š—éA¨–†»Þ›wJ¿4»¦›°ì=]ò4ÖÀšø“¿S`î†Û!ÆýؼÐ™Æ >ÛVgÙ]¸µ;7VKÓ„_©]Ã4œ 7›vçFcp/UT˜<ùõ»uœvçFu0îùhÆÝ&[vçÆ>š]øò0ÉZT1ÃîÜz™?ßõµÕÐî4‚´3÷`½U:ÈHvæÖÑ/9áÛ3ìV1wæÖÆä&î³.zcØ©bîÌ­‡Näº0²)lŒyKÅœ þ¹u®{˜Ü ˜¶U†µY~Ÿæéwå6âˆh/0?lÜ_k1ÁJÜ›ÛÔúa9†…aCÔk(ýK¸íï"wkiÿrø§Ûs|XÚíÝ5ûr·F—^ÓØ¢ß,ã+×:Û…m»r[eµðšÞˆã&ˆà|5îv¹bJC¶'÷4ÜÝ$AÊ¿ð.i¯xõZäþN—héô®¦ƒ väžãôZ‚†а–#Çq@wgÞ‘{ÒUIî–‰-"îWÌhIØrSõÞ‘{ÁT j!%¦Ãeè|ð·.·^Ùñî©Ê§¸›”<ô$Å©˜…ÃmÚ:è×îË=•dbí†LçjÇ(K^˜ûƽÃýÿ˜÷š¿·7÷lk&ºÄKlíjë3WLÕÆXîÉÖË™d•Ž˜-ÜÀŠŸ³¥›¹•€ýGúß›;5ÈaÃrÝëV%|v&6sKû±šÛ4<»q¯´hÝJ†6k>U{¥;&îÚÆ®âÎ~6c{»q7‹XÚ÷kL&xÃcý­ä{È„$܉{ÅbëVF»òÄÔÒ³’à†)«¶Ýƒ{åáu=¬<2Õ{Å-îì¿n¾ÅË=¹šÝÖG2L ¥nØìîT(Õõ»Î3|»÷r°Ý°fiX±Rì—w\õ›šc¿ ^ô°mú:·›’wâ^íé7d7fÚb \ÿ·ã]Þ³‡Rf¿Žcþ©ç…dâ’çv­ùNÜ‹ZnÝ÷No9S¢¹d÷…`ïê\±Ãîâ[p˜ñº0ñlC†°¼Fƚζúi#7LÁŽËt¼É:Ú˜¯7}T<òøxwîÅVÞ÷ cÍó_Dxér†[œŽƒ»~'pÛ^¶øwŠûlwîEuâ{ìõu­þûŒ»I½UtÍ‚ 3)øaj2ØÏ4q ö ÞÒNw—ï%uÒûõ- a 1œíàÍÊÅšiÔ\w•3öŸ* û©XË^CÎns¢ß.ÜKã—‹°Ã¯ËºžçÚ€÷⢠…§d³ê‰åì{ôaxbS¶×,73»p/¥ç+AôÂÁZy’ã–m_.*ãÌC€7޼|†×pº:zž0‹îwà^R'½Ï¢·(fÝk½×Ä/¨Åe+F¡À‰éìAqgOàëòæ\Œptع3÷Ò£Þž]õ ’E‹›FJïèÈ¥}J&ñ ¸¡Bwþ,îsV4Ìšæ;s/¨? ¯Q8*¡€ñÄž•œ‰mƒ\S¨¢Fî#\¬”¢/•tß·%,¨éÖÊá,מásÎЫ`Ù|Vä°d\éz‡ ´ãÿ+Á*ÞTÞå;p/X'­[+å±ÞØÜXîîϘ׋AÑ©ˆñÿÌÄÈê¾°‹[ÿ±¸ÓÁm+Ÿ:ÃÝæøIR7%L?Ì­Ï’ èRJ:~›qæÂvî…ÎŽ{œîÀÄq†ÚOu¢YÙkn<¹¯¦õ­ ‚¢Š@éøA5‰Jµ{áIGL†{öÎŒ~+¦ÕÜ·¼±-ŠNÆÎ? '‰’ÙÎM{¡Æ0‹É7ö,˜õO›Ãæœö]Ù1vÃ'IëÓ‚¢½…Ûa¥þ$¡ ¶s§ÇNmòÔùÜìn™v9Äç\nÒ‚Ò¸wú£DÁlçN8{²*TçŠ[0pš¤¸[p^R:ÎíÓ6ƒ7õº§Üƒ;­Nš)p+üÎNCuÌæ÷EѼ}­Lþ™»O³Þ²ú¤2ØÎT'C_¶™8ÍÙ­–*ùÿøë)2q+\gØ´Ò¹_”œ´ßÌžöïæ/’•2Þ.s†ž*wó4?É"k¯2vyæœ:‘̯þ÷)e°™;ÝI›·Ë®V~Wâ‚’LÞÈò©½Ï›»Ó™;}‚º¿Í2%N›¹»¤:™K–ûí]ñ-Îz=ƒE„ͬ¾}T–‘¼äó™âiMèlÒ™Êfî¤UeÆya—ªæ–¥^îö8sƒb繼ࣴ Ñvè)L­Óèx+ Ãfî¤U¥½ €‡þVub‹VånY…#¢Üq²*B÷ÆÐ»EÔ$O<´™;©pÍþw•Bw܈Âà ÷k[)n=¥E¥ksÞIîûØÊì¤Ù ¦ºfàmj(¦y™BY̓Ï]·É褷wM΋¹“ÏY-Øñ¸K;?­ûÚ«W Ò0æTy/ÆI9º/¹w+wÒª²cºó\dM=g0šÛž_°pÄìÜ,%yÞ9,u"Ù­Ü)58‰iwœµŠ;ØËçíáG§ªÙdš$C¸qS<[¹SjpÚʧz¶UÞmÏ¿ h™nöÞ‘Ô„Ž"Lú¯ÙÊ«²;Ë€»Í£b¦g»²UZƒL ŠX³a+w* »:ôÉ3ñÆêˆ¤&Ô–ÕòFÃÜI5ZšJÕ¨4Mê°x'ž‰ÚxÞ¥|@A0Û雦·‘;õ¶z*ûB 7ÛàáBTŒY¿f]"3´"L¨ÉݸSjëV[“»¼9É¡Ÿr_¨XÖOceœ|Fn¢Ÿ²wJ ¢x«ú¯ÔDÑò ‹f÷´Ÿ…v 1…’0ˆLMßÈê\²RgPÜ¢únCDŒw“œ$J³ZµR ñmäN¨AÔÞ Žmñ¿–ë•rGý¬nK½¦}›pÜðÒe8Mñ²qˆD%Añ†bÿÛüoËMî[þ4ÀAázÚª¹J8ˆdàs!U±¶q§Ô Š7¬£<ÎÿÉÆ•ìŠ[TÆkpT„=;åéFuwê)LWY°ÃYñÏ7sÚO&ŽgÑÉiEÈTÛ#˜¤ÙÄ(-mœ(õ=œå›¹Y!N¸œD¦‰gà_e «/kaàçÈ÷Ù6î„ÔÉ‚ÿëì|뎃á`*îTg ËCu³ñvóîî.Õ»r'¬A=d¨ôHɶsW0Õݸ&Q1Q+»KqãBÏæyªòiþ|w¢ ÐÚQ)‡^i†­Ü?â½2¾Áì#]û˜1ÂåÙø¯[¯gçÝÖ#Óm®¼ÓÜÕFlxá8‡áÐÒ‚®8Ú’…aFX%¬]h«>õc¶ä7q'FÍ–Êœþn—Í7â* wbôN×§FqéqÈ}㌌µ“m³!¡ÄC&³Zeq¼ÛmÙgÛqÆšp­84£nØi¡:Ó75pg»p'Ô NgÑG«Ìã+`®[Oº‘®¡â®Áÿüe¡ZVíä"{zÜ;¡M^)µ¶aÓ§Ç}ëÚø31‹a|o2ξkÚKptŸë•Ávžj7­m㯲ár7oP’ÿ¨FÿI>¡-Ù+¥IÊGñÀ››·¥æ>ÊõÁ&nZ ZéQÑ]mU‚–[œåz…@¢Êã&oeó–Œ?ý#û+UN;pÓjpZÃÅØõnÛ•|+n]F´i…ŠluÝ.4™86‡DìR/é<™lò}AIÞ^f«Ý#Á±MQÿ˪áè˜+»P²áÛA'¬Ø™v÷ÝÆŠÛL%ÐU-YèeK½SHæÃÉ.Üô3ÎÕÝ÷ÿ·§…´NkÈÈák #¢½‰³ $=?±£6pÓêÛQŽ{p³Rr¢M«ÁÇb¸òI–Cýu¥¯lá¦Õ·£ÉC݃P9¨&&º®¾hzÇ<`ØÂM«oGÉìîvF™v>˜¨˜î$uîînR}ce5À»»QÂ-LŦ¥ÐŸíÞÏ©¾±æèE8ïwkuLh,Ð&¡ïDn?nR=£Ðëµ »»Ñ†ðü53¢Éè½ÙnÝßÀM«oQÚ;É5 Ë¡)ÙBÅô6ŒïÇMÏ‘ƒðXîz52³à”4 ½ ÌûqÓÏÌÓÄû¹bm®7Œ„Ó-¦7K_E·7p“ê aGŸ%~h´#‹D,ý¸Iõò¹îÞ%|ß3v“ÃX8Y1]§âÄÁñ¸Iõ­O+~K¥¸5àSȲbê:kž¬ ¥øà¿¼?©¾ñ¢¼­¨{p—ÐZ’êÎÒ«®BŒ(oà&‹/J±c‡Á ‡‘¨2Q1]ÄÝwí°ÎMª9ýšìvì …1ë¥y$C }a©l °È'Œ÷½îâ…ÜàóŽîcú(†Ý¹IW'F$å~Mü”6Ó3d bþ£;s“êÛ˜kéE;[B_4—Ú[UjÞºMÕ+’;r“µÝð¾H+ó´ÑM=5•ó£«væ¦Ô·íFíæ) µÙmOF3+ða/nJø¬ÉòR·JÍ\·Iª¬Y÷¼Å©t÷î:7%ÂÖ:&ÎÞ!4gz;e ÏyÒ2õ;«Üd^Ø2\;ãm-´²ÀêGÉâ¤Ç`;ÌîÜä^¯õ%¡+›4½›°ö1>~€]àmØY[ç¦á©7(n|!M|=Yw wç3·Ù!¹ÊM5;ÉUÂ;Á!)Ì$fÞÝ(óëÅýiü7…Uë«ÜTnð¶1ˆ*Cªòë1p–‹ÆÛvìO`8öÁð®rS‹´¨oÙ/´9rSÊÛäVɶâ~nÀ*8wáúæ*·7³pm¿ÐÞ—zn˜ÈTZÀýŽñG6¢¿£ ¶•›RS'Šû5P-=6Jw·LhîcØÒ½u~‡RS'c{§J¡è#)Tg-99Û{ îNŒÂxz!“2è^±Ë\ð'¦¹/¶rSŒ‡S'ã/Š;ûa$ öä»+Ï%'×vgиÎMàáÔɨýV´B´žg²ì*¥uäë3öË·ryë¼4tz©©P@Cõ{É»1o*yÆ.Þ°ãrBåíáÔ‰©¹©tL“.«q(.¯XwÌN7rSùp8u2êQ”‘–ÇyšNqWrPSYëv›hb¨N ¶‡«(…âôx`Sô÷ÕÔ›Xã&dâ€êJ]% …2÷JôD ´m]ïCÈÄ!Õ ( 5DÁÎ=žx¢d…›*¾ÃY':˜óÄÎì®-Jr…›’åCªš€(ÅyÈjgnJ–ªNÆiR•Hiâ–<¼µ;÷aÕÉhLJ)‰œ†¬âûn¢ô«Næ@ã4dµ37Q[«Næ@T›‰;Þ¦¶ÂMèŽ-»kö ÄÊt®E¼$~…›Ê]:H ÆO§¡¶Ý¹£¨K D½™ž6ºµæâ.ºBÕûƒBOM Oäo…›€<¸\HkjxˆOZä& ?ƒG~´Æ¶úo°¥i™›9âLÇ¢Â8¥þenBWïÒIkû·?M(XSp'pȼÂGåM»,¾k©÷£øáK ±=+Fqs17ÅKÜt,KÁÁ”¸¡Þw’Э ‘S•é…cÛ^²©<—¸éR[®KòŽX¾è`#ˆ%“›³’7»œÝݸ×&i„ô†²ä`ibM/ènpŸY‚%î(w׬X7;IYýʹ*qØ`¾ÆjËîËÿe‹œD·VÔ·çöøò‘&Õš&“,ôå jt˜Wv.pÇ­ÀŠúnWòÀ ~EüŽ~œ§•¸ãVwE}ûB€þðúé§Om–«ÈR•B“Ê~Øw$Ëê;ÈKœ+ýá™Ý\í² Ä)8|-Ö+ãw,Ëê;@’€0÷³ŒU•t&§C\¢Žäx[ÖÒÜ‹qÁ%$ØU™?¥3ü”S6ˆ¼šÓÜÊÍ#²¥$]wðY[·•½6˜¡±Øô²9Å0º÷¸£]ñËêÛñ,óŽ?ë3*aWa´f¥àbÓ'á,žÙÈIó²úv4…dmõÜ«TÏÎliŒCˆÅX"œ¹Ô7s×Á…Eõ=‰É¯h§Ôd”è*v Þœ¨ÒŽz!DUÈYôã&¿ÀE±¨¾'·ª¹‡ ºþÏÝ•²àXæ¹^Ô„q!O´[¹£;‹ê»µK´h†ôÈýÔU­õ†4%¿ØdFiìÌW‘%õ­Äöýô¬ZŠ˽ Q vgC•ó”o»T½£2¥ÚÛE¿ÀÕŸ¥Á“žYa—À]¶µ¸| Âø ›rO‰!ªCsöm䎵ÇRz‚=”s:ªGýø?sU²¬jïXÙÞ°ûlêú$õ&R¸·ÉIüå‹C[ÚËá(Ð_6‚;mÕÖTî¬Ï?ÕÉ‚€ÇÒ9 oÌïh/ÔÒò~Aàî¡Ð±6`W±we¦,’¶SܳZMz¢†Ý›ÞÛÈ5óK «TÙë5PîÜíU>c~·'¹Êï¦Ë‡|V«‹iß©ÙöNKsGiia•²ÑyËÏâ7z3ÞÀ2â\œR„¢òvQF­í„g;|~ia¸·ƒ…¸3ܰY¿W…8f™(½‘^ðèdcóBš;úð…±oð Ü?µï. Íý„rÓÞóöš‚{Ü /x4&½ç0ÍÝ„šô_Ãñtì+ˆPžVzÍß'ÕAà1oŒmi›l„I[EiîèÆB¯l%X»õؘÕó•³Vq`\Tþ)u <:i‚>zbBsÛE¸Ç¯š^¬Dís/xÔðÐÖs’;nÒB‰ž[\n™™ûQÝ“™›Ð‚€GéÒ½•$wô™±½âDR÷/ îqü£’RW¦—<ò¹+›dŠ%’³47Žl( kËþ}©qùkq{<¶ÁžN²t pT<1p_Š{c½Æ ½i×-lhB;d&\CŒz†[–t[©-߀‰!É ½ìê6u>)±6â›®˜‘ÐI‹ÛÓ¼avD:ÅVHÆšH¢Ê¼éúÐV““T…‰DT©è.‹&³Ù—âNT"X“´«|’0ÃPÛ]Ú7)©2-¢Ÿ¤äJÊL´[¹ÓÍŽ-ï›Àý>~™Ž1ø­ ”?)‹^”b¥•h²·3Õ¯n>vv!4­Ú'|ü,©PÂ+³ƒÊMÉm²‰wë/UªÓQr>æw!¨zy§ñdÅ ólV0ó2œ­ÜIOUX-x‚·‰G|¦F›‚OŽ…*—ʳw$c)n4bqœ‡ÿœxÄK¯6KÞ:žR3” BcnåN5—ØoAî­¾Ú>Ȳ=å ìRz3Êßhh8É™'Éá#åìšcw%äaÊ„tî°j¤7Ì3yÌwà–À yÚý‰'B&BHÜ[ª´N¢’+¶wW‚ §Ï0 8‰µˆ)n<–еzNS‚b#œÐÓAg¢ìÊ… Ñ0 e–àŽš¬Dfê,û|3wÿ ŽíAÊ0S'¦¦Ü‘‰¿©c´£ ;pôf¥NIÄ6rDê)î:àK¤`T‚Ü‘;3‡ï$J1¬]2N=ÁÕŒŠNÁ¨àþõ.Ü0A¯mÂDmµQ»RÜÁoruñ8-‘èÏxòäD*öRë§ÔŒȹ;Œ0ÑÌO»—ø.ܺ¡J´ôakMhaš{K‹å%#°Û¹' N(”0ùíÜ჉–ìÊ­4F5¦çÂä¶ú‡¹SÍå¤vån+4ÃR %,Þ¸¸iî¨b¤öœqóÇÎÜ5j¨Ô`iXæ5?o-ÉÆ—jæ§zµ;7ŠvJ¡„òc¿£œ&äÜ¡â§Ës60€ûý"i‚Ÿœ²PÂæÂ¨á¡è–¹Ã+Ñ\ÎÙkˆžÈgèÐjΩîH˜žþÙí 7_þm/O¢‹{vÉo‘7u=&J”oø˜ìËfyÿNhØ$šùYìÌ]4÷Õ˜T(¡\ê|“w¥ÝƘâ8ÍålÏ÷‡eT¤n”)ÆSkÍB= ¿£»+³_í$wÈ™‰š›»]¹ØÊ&yJÁ†í…á¾)gy›¸Íüü.A¿ 7nÁSҘ跆—uþ VÎÛ$Iî3ö…ïαïÌ ›_aä|Û0ŸáÎJçL ¯%Ìg  Äî»5V7(îk½HXVAÆi¹iY9­Á¦¹C{Œ®=/ñŒ×ƒfžìª…z·Xä¦Å+ /ñŒ7äzh"ŽP¯[î©ÓÜdu^|· ¹–U¨ˆQnZƧ$¹Cí$9ù‹<㇠E6к}Qõ‹õ2”‹D3ÿ"sÕy E6ôØ€Çñ#ÉÊEb)ó‹mŒ£­±m|Ò6(SÃBr‡_K÷æ_æo`f9u7,q›s“ÍIssÿ7mž¼Ì3ÞéýtåËÒrO¶Éšƒt3Ÿ^˜·% •Äôׇ-rhJsOÑÍüªD7VÿIòv‡K®ÒT×H3lâ¦ëüŠŒ‹³¤Öú2ºvYon¡¸yNŒB,¬‡ÐXßl)µ#*häŠ0Íh{ 7Ý̯8pœÊ¥:í5'›„ãÕÑÔkáÇ’ÜËê[¸ÞðhÅÓèuiq ‹|nÚÌÜ8­ZÀ6ìÙózb·(ÕðÝZôÐóû;l¨nºÙ=1ï5w÷†²i½h§Ä.ýßnæ¦ò"ÑW)=inaF½‡òþºöž!Þ$¸CûÂÿIpS†XèfòòQæàU† =p?¹ð&h'ëPÀ±+7%Êdo]'<*ê‹6r÷ŠûÈ·§ý+º6È0Ÿ#æåŠ*X²·£½ü(î.osQâPfÏrqŽÃŶ·FÎõå¨g¡­s“º•ìíàRäΚ¢+›Û ¢/Å=k·mZªjõ%ÐkþgÜÅÒO*PT{£=~ð”¥Ò{í}&Þ“$ˆÐ™SïÄêû­Üš¬½ÌFÑ÷ã/ k”@{ULrMúW ¹ƒvÛÿŒunJôÈö µt{•w¹¢«ž»ÿ|„ɾǾhîËÉ 1Ýò•ßp›²g‚@g{:ÍÆ§öu.«fdÿI–LýoÂ%]WQc·Ÿý«Ü”Š"›K]á„êq?5'¹ä?îo»óL³©*““jx¤Ÿ²¯ãcî”䦒Ö:Z¼î¹Mȇ¼SêÐ&KVLjL,ÌÀݸ©¦Œ”ãåç5ŸpÏÉB(uhÉ6­xÁõ¸âX¨~]È2Ð)8þcÍ=ù•eËø, TÅÜPªÒ{d•›’<ª¹4ÅÜGŒnאָZv=Û„TŤ´VÐrø…¼7Õ\µÒ-ঢ‹¹Q à)î{Y§U´fµ¡P¨†ÞOȦåekÜ”mW}ìº0 ý‘¶/–­ä=¡P¨3hJ8ÔhcûGÜÁû„ØMÖ–~7{›R(”ðw¶KÁ¦¯µÆMÔA¢™×ÎÎss"^" ¼e7ø2¡P¨ž±Ÿi_Òö¯×¸ µJä ]Íóth ]ÄbfÊ ð+—V‹I9©½Ÿ”ÉY…W4FÿÕêÁÆ.—Œ!ÕÐSÜ)}â×kªùk¾.öµÃ-ÄÇŠ4êëè‰ä9×A爊-º¢×TÓK`ýW+füYððÕÐûe,]ªÝ ʆàŽUcgZï…-äZOQQÎcW%¹í¨hÄ ëRKƒ¿êsJû^inI¬ª&4n p†°;Ö=aˆ“Ô•m(Bî!Üð£9\¼#ªÑÂÜvtÄíG(y!ˆZ®‡2ÐEz¯”wɬ»oV§×‰ÔÍ~]ÄØUY\U­6®|Wü­Ùæ¿Ü>dPÚñPaÁIîýQH­+V¹c‘ŸZ?ïth‹,¾kTé˜-u;&Õ¼ˆ;ùi‘˜Ë-Û›KV©Ї¢×¹A’Rþ ) /6$ÈYo$±¤€›•hüŽŒâ a–¸Ã>FEç 9Œot¾¤À^£JfDÃ@¨® ðf#7QÉc%M ãlšø“ÌÛÏÃTïYµSñ#ÑTì‹Tâ" †ñ…³t£w·Ãјt"N™þCc)nWá ÄŸëâÁÛ - €ºkë0øÜ ¡¹‰Æ7â&[u¾‰åJøWÈ ÀãB" ?yà¶EÜ|·¸Fr8|Úd¤‡Â½½;EWÁGÅ•‚È#¿¸]rZŽàŽûG<ïáy¯ÿãÖÌ¢©án¬„ˆºäsKç•ݹ£K±*SSc¸Ý½;Œ=0ò-‚Û7Œ¥Ãr&¯âKqÎÍG0[8§f2†vA¼“h+>+w$©ÎËÝÎj‘ez”(’7‚;X»áÑ27å5*ßH3à=biûY/6…®ñ‚†*¼Ò,p]Ѹ ‹›ãx&²2гè4•îÖEMƒäQbÁÚ '—¹ ›!Š=>HeÂkröQÙQ¶¨3Åj‰¸‰¨ªàB|n*½€ÛÝÓœ@"‘C®—þ°ÀÖ˜&DÉEê[o x"¯bÐÚ|ljùMo9’ABymçöU<ËP}ë= 5-õú/ÍbÜýfîØ BÔª…ê÷Œô•Mãk{½™M"äŽÍbÃÿn™›h "ë'TßÈ×W6Å)Ç|˜õ[b ŠÀI;äŽ{Aˆ¸ÃªH³ÜsÊÓÙ¨}¦­¬••øv=` ÜÁƒÄ€_$·A.i¼‰{–âIÀátwøoÔÎÆ†U€JÃˆ× ÷ZL1·‡žkÞŽ¶›7y±¯pérµÊ=Æ8f1EȽÖ-Žtõë9¦øÃ“3„5Ÿª+fdGRs »¦b‰"î^F–V¸ëQË€áþøèHÚ”(Bõ=ñ ²1·/òðaŒæ^ë^FZº™ÐÜyÁ°ÄÌ"‰Ù'3úŒBëú§¸‡Mܱf’<¸”¶™áCî’ºlVhÚ…šŠûJ]ŠŽ˜Ró¸ ’;ݰ¦¸ƒÚeæpcÓ‰å6;þ­€+î;u=>u[ÈÀÉzé¿J uGyîBà÷pÂJ;L_3mø ÿ K“0¬üªª¸íN¯€ÛÇ",†H} Ô+~†èû¡deƒÄF(§-C†ÓKaó‰»$õ÷*w¤«‚ù‰L?ÜeÃí¡cºÍ± 7ÎyqQÙä="¹jvÈŪ~vnà‡ñ¸å})¸ñõcö§O3Ç®Zد/8÷`d;tèˆÁïpü¶DJq_vš»×½9mª3ÜQdmµä“µp§;Ð&„-Q €P‚eŽÜ—À :¤å¨e=MöØÅŒêøšú‚ÄèùyŸ›è‡-‘ÿˆ®–¢WŠ6µ0V¢š~0¯TÞY“£ºŒ¢›9ŸòÑ,( ¹ëô[BÝåç™®–ŒwÇ<,}«ó »êÑiZ1Q‡hž#nûçŽÜaQú¤Äö{PwâÍyÞ±Ls«&ßR²1mÀêäsûÅ9¿°È QKäë…ö–¿¶ì,‡ãÆ@ßBû“™›vVèqd{sGíjȽœEM¥úñÊÒl€;nY7jÔ5v¦ÓtÕB¡‹ ÙCqGEëëV«¨[Ø ó&ûŸr©ì§Ìyn;³,sT(w”žŸOiî`€¿Ž¸Cà/ÊÎà%'Šû¬€Nƒ;ë«©¦e2Ç:6˜«åëÎo-pÇå艨Rz’+n vV¾ÿ L•±?z£¹ëi^_’ &a€ç‰_·¯‰âz¢°|n/?T¢«”95œ¿aìÚBõìGÖ O¬ê«Õ`†±Ž;r§çå¿êCˆz(›ûó3gF§g—h†{³ dƒ¹Ê=KeÀíׂ»òû))éU¢U·gWÎDàÀî&îi^Ëc©#ìŠÇį€Ûÿ<ë7„°dýƒuÔ5.Õ¸r¨^³UÁ~Ns=ûJ™abƒp/î¸Ý kª—ÿ0”b¸‡ÌyW5ÌBÙn]×·„!{ îPxùÈ}͆üƒs—S™³QøÄ]ÄÇÅÜmâ—ÏD޽Çï};p‹ëÌ?Ü«w+æ r›0d÷â&&°—~C^"÷ì,qÃ2[…­BipåAØ`‚¹;Õ<¥¸½„@vApºóhin«Â0q_+ÑiîÚKaúµÄ½ZM‚ ]Ãw]Iq“ž`—E,vñ¸žÏ=ÿò¹û5î `=¹Â‘YÍ:i…çÌ'[›]džê‰h0öá^]Äê}ŽLƒ§³®ˆÒ?½j!»-ãæ`­¡KrûænÄ*ïy´=`ò²sͯšO´ŠAKKWA"¦_>w°×;æ$Ç{Up“Nç¤Ùšn“`ðëÜþL䡸½ç1'Á_ˆ ht’f9E4Y¢séª1{qGé‡_⥣%W÷qâ 2½EkV„kñi"a.Ÿ€›§á• ¯^1›t¾†Úõ¦Vâ"”°üª1)¢Ãq› *bjCg¹"Däè®(E¿Dæû>·_Oâñÿ0^×<1 ¤Œ8ôp„·¼þp1Jq/n7⾯oIqúj|Û›X Ú_b¶Ï=ý ¸«ô/ꊛ¬±ô’ÜÖSµ7‘4ìk¬Op£feܾ¹ÅlòÑÙ`<¼ñ\Ê™5³žvHb-ÿÜq+^q«•‘[‡[ïo˜^Ä:ˆ ÂÏÆ½©©£óÆÑ685H˜e²^!IÄ–sÂÒ ¸ëô/Dñzf˜Õ©ÔÛmÜFw«¹ÝCQŒ¹½+)n¿û[g!·SŒúžcžöeØÀ'!ÄïfGÈOô„;˜Ü‰ÒÌÏÙOeö™¿/C|¥×8‰¸1@ˆ;<Û¸Çô/"Z7U#3Ó%•Ý_Ág»c{¡¹+ç-'"ðÊܾîÆ£[ʦIè+/›{À®¹EnW‡ {-«Ü~3°Rh~Ι¦èñç4@8ÑB¶Pñ}!îÚù»òn5óúLikfÞÆ |!Fü/Ù;Êšþ{t÷¾#(ß6ï¸hoeÓŽÜ’Ï(–J5ñŸ³»˜WÛ? ÜJâryÏplâöëÝ*·›¨ÿê|ÉÀg繨aâÒ +Â$¢S܉;?u¹½‡Ý-ÒµYÈ®Âûö²Þ/?F‚»vm᎜Pk9¬Á„‰¿p:¡Å-n¸%Ó Ú&;Ñ8M±k×Üu¶ÞÃÓ ÆÊ²šð±;FM‚Š(ù„ƒpû±ºøŸ4‰IóÇñ§iÑßø$®JÿÙ@0‚¢hîa7n7½ܼ¡„±_ fYÿð_·Ð°{ïyXD‡gî8Ž€ÛyÀkv`:ö”&ÉÞCZv¥Ï#t÷]n™Ž’ä®IîD炎Ã+o¯Ùoð¨¿ú×,{n»[¯^øÜkeYŪ4në|n›ä·Œ¸ƒY@WlÜô`Q#oGvÃ.OoÎŽôbÓ­Àïs†¬Ö¹ý™tš;1¨5qû?ì÷{ö…ÒE-l¾`âêu>›rI}ð:7}Ž»ßxÄ#”·»¶Û}SU˾hqãÖ=¼ÑÃÞ¦En·b Ñ”éîܱrÓoâнâþJqçâA·Av½b>²±Íîpý,TË.o» Øñ/îM›o*¦ÞýàHU+}ÉÀíèWbUó¡ËÚÛ[ö¹™½ŠøÕ2wÔÁÜÄÍÝgâ¾G–üéjȶÊžµ·7â ½òkÉ6ŽyÛm0ƒ¡»½¸ƒáïˆ;]÷] ÉT'R)“Û¹mOÓøÀûˆ$¾xŒ>c ·pÇ}TŸÛÍ5GÔUÓ¨4œ_Ó±¿Óö¯0кsßN¢!÷r¢“$ïžìàä„Ûr3(©FqË3–µ}ÑÔØÊ7œ||Ñ‹}ÄÝoácÚ6·v9¯Y%Þ²;äþÜh~Ûµ±ßžX…ÇHíÅíűÊ=k¯¢P¹»{uwV<ýÔ—Àͧ2#,rzÉ}n‚×ÑܾUíÐÕ)ÍÝ– /;vÏîª÷cÍ´´kc?ø ÖÛŠòÝ;Ø5§è~‘’‰'h|îMË~Ÿé~²uªùÇÑÈ€;6.Îí$îf½ÂƒÜÕ^ F½2 ‡œE)Îìâ©÷@s×É(î™ÃI Ä!G|»fZ½ÅÞñÑuªé|窟]o®`ªb»pq:ÜnÖçØTnáPžS,Hذ²GÜ^±ÓÜ~¿`ÛùJ÷ 9«ßãD <¤=Î9'‘;CÉi%u0î´kYçO¥N47NüéY)‰ç\XGÿøÙ 7í'Ç玺éƒeœ?U³ˆgíwCý jP¿Nó®åø§'Õ´"Äéž4w4qn/7A=¹æÖ€-þÛc¶£"ìRseìåÜþàÿÜó£ÐoGnëz«…¡5©ÅEÏJ KÜcÄí[ZëÜk_>’ê”rOxxÚ pã Ò*¹'rù×*/UkeíÂä ©ƒ!O;äž&añ·ì3f!ƒ,uTê*wåþ²…¼?·“ÉŽÒîaž„Œïsf—à¹Üõè†he·o¬q;ÍßÌ :£»ç®§-˜%^3Ó?¹g Ú5ní>·äÓŸËÀí8¬PÚNb§monkeyÜþ¦­¨ðWq8÷]îQs»ûIffNt7¸6ßy™äö-ò}¸ý({*Ë´ ³‹Êq5“ó ì? Iîhïß–ùþÜN|³VÃ|”¬vÝUáìÿ¡·µåÄ™£,ר·òrn¸Êå®§‹r'Ÿƒçø"Ýð`Ö;Ü~:ûpÓ]~ú¶+wsë§É2í£e°)‰žÐŸÐ VÑ9Ùðt‰0U¿<(îà$$ïùeî9UŽÜzÔØé V`ô9þ€¼v,1_oE?þw­sËnG?ÍZcz”~þr† ]^gÓãûrÛÛáž+¬Y¢¡_çÛB57y_™žCíŠÖgç&¼Ðš0W2“8ØýaNQÀá©ùPëÏÂýIóÛAv„Ü˹“3¿g¾'Ê©^‚†Á@ZŒ`„Ó1“Ÿ'wAÀM¼gÕ2š°…» ·þYSÃSxx¾%s{É’ÜþÚ—î–¸19ŪákÉTsÚ¯ƒ»ÉÚa%»(î~™;Ù@ÌïÙE›íÀmWAÂè„8¯´9…Î|Cv'n+þûs?7Œ™§‡Œ3Yv¼×éÀàò7Í)œâ„¾E"ù2wõRî9›f“‹Æ{ œzw¯§‹ó±½œ6æ*#Ýíj,s»r×!·£Ã=Ý0Z§D€[uŠ/™I†]”¦ƒeõù¸£ ˆqæžeÕpck ÜÍ´ü›ÕÍ]ª .óœÒ÷-’ó‚ä&5eŠ{V_³DéVP¨ ì®xTàoñNS=‚òÆ;]Àí%ôÙ¹çèæ6D7—zFd`E®¸õF Õ_†ÆL\Ýæ¼îs/›¡Âå–+Ü•÷“Ê0-;YIðU^°ìYs+RÂÁ™5gÈÅ‹÷7áÖÍ¥ g,;b¹á–¹ÞÆ[Ùf›&ð™q{íéîðý¤O®Y!è¬1"ªJ_Ï:e“ç6¼âTëT¼&xíÒ:÷¿Ú{˜Ô³áf÷Å'ݬ 3rV=³î—㋹£Ž^²<çEÂ:M%p÷å´r°††qNbŽÞ¢˜ð™¹{Нi% K X¦¸ ‡*U){‚;Ð|ËÜöaÛ‹ æ®×¸uhªøYŽÜ¥>ñUõ;›GôhÉGuí²`‹§»f|ž%؉ûùeÜ}‚Û®EiĦZÿ?*Ú˲5ܼ­œ~cîjœ¥Ý,´ÒAõ1!mõOW zI„à ·—ðK¹yôrsp`îÃM¥'0,’üòDÂÜýµÊí=]˜Iû—nQtªþ)v-×ë!‹‰{úµ3w{xîzNÕ?$R”Âp÷Õd†9-À 75Íçr“W;r›_¾«á®°Þb[VÚTRÜ‘a´÷„CsÏ·§¿ÐB5¿üSìdÞn¶÷°ÆíÉÉ F^˜M­4voÕ!¼‡{}Ƀ/VÛ­sVïùÛÎÜËùp[ÚÙ Î/ÈnÈtÚ¯`õµÞþl¸Ÿ`§›3cïŒ:|)îŠþpk`¯Ù™~êa}‰;=Ôß&¿-¢Çí¿k²NQ w™äŽ:ˆkÜ^[ácŽ ùm¹ñ³•]Ï‹ SØ~¾ržYáö.NNj÷umèÛ¨—,Xá=aENvãö0Çtïuâxš£ þÙuœêÁíår~›×·s§<ÍûÜÏ4w‰£‹0’œûå³3wsûò½ÂmSŸ¹ó&ôË.K½š­nX9}ñÁòû€ÜÜ·×;5DÍXõ™¹W†»n/=míEÇPå’ÕýØ=¸ã=³®ôGÖÌøbOpçä˃âæJD®²¶ž¾®ùM¸'{Ãáý²™¼|Ü¥¨%ß‘{<¤œÌ£À·QÜÑM&¯VIQ­rG_ ¿M™f ±ýfÜËìÆžä“núcez+ä¶RÿŒÁCþDw´c›\ ž¸0ÏMý=§ YÆV(䦚úM›¹ý¾êÎÜõ2wïpÇk…Ðm•:´Üá²ñß’ÛôacîLïž÷$·?Aÿ…¸-£ËU-Q Û—‚Íãk_ˆÛ×m;s·ÈݲjøÂÜ«ù͸» Lpà._ÈÝíʽšßÀ-áb±«À´í‹–ÓÍ?nDÆ(n-i_ü2¼”{UN<Ìñ…Ü’ƒ×ßîüö0Ç4·M‘ñbŽä°¤ÊmRÝV¸½ FöåŽ DÆ(î²ÓÜ}=ÆÜ~ó)J~?7“M‚ܲÜ{-¿}»Ê÷rWÓŸ^PÜ9r‹bæ®âÈ ì̽_~Û·¹KrãÈ=îqØ™ûóÈÉ6îGÄ ð/ògœßÕ„AoJÏÁÕ’}aæöõÉâþgÛ¸±yÏa¡fœßÂ{ö³rÏYäeŸŽ5v’ S$ð,$g¹¡:ïÙhøoÌ]óòû7á®Üù ¹EéWˆ?nýÐôî¼e.7›ŠEFpûúäÏ€{^¦¹³á-«§†jâ~Y~‡çn§&8dzl²ž±êÉ}áÜ”oûh3ÅŽ›ÆGépï™ßuÈ}ˆüÖoM2V4Oé]uÝ˹«ûpùmrQYn”™ÏÂíçw44™âöÔ±ð¹ i)3tŠò8°ËƒË÷gà.nØûò8Š«ƒë²ÿùBîžç–{@î~ÞHòç+'½â6·q)Í£‹ñëï­Üí—á>t~Ï»‹¿t~'"'ÚK‚;ëÄ-#î5ý½;·Ò'çfHâQ~¶üþ ÜEg¹©üæ¹½Ð籫|ûd`íÕwµ‘û³è“Èï©%dìžîϧOhë¸Q6‰ºÊ0ù?[n·Ÿ6°Jä÷óa¸ëqÇã'wÏ*YZ¸éöã^©—÷q¸ñ4‡»}¨~{9ÙÀ[l…íÑ÷5r¿w_ø3äÆÅ`3wÃ.îÊýEŒ#GÜõ8ØU2J[2v«Ÿ]×üí¸%7/ˆÒ–pw¿ ·w!Å]9Ü\µ5æ-gË:Âo:ζ»e#s¸Û<É}Ðü®F?lâvçI»Îs“•À]‰/ÂíaF6Ìïvöÿµ÷.¿‘$[c_dg›IÁ³µ -øøxSŸE3ÐÖ€—´Ð–Z¹̬†¹14[- ·ÿ/´ñBÀd€Ú+·µÓBÀ5ÜÚÝl àãÉÉtœˆ|ÄãD>‹=s‰{§Y••ñËxœxs"zÌ;îl*÷‘׿}ûóm¬eÏÝ8æ ô±É¼2ª}QÈí&áÑöÓ†ëÉ4nÚs×ä"‰òÆ.&.Iü—ÂÍ®hÔ˜½Š‰~÷ÜÍV6»ºì¹Å¼øPýž¸;=%ÚþÓi‡íHÜ{Éc!_rc\ÇÓgs¸óŒÚX6p ‡sOã6²÷pÛzJyÀ»ÃÈ€û Sªz¿-w—¨—›…<¨?5S¸ðàឥ7ó*ÜUç. Xûm)5RÜíÅ…Ü鑹õJ ›Ö¯öÃüÞà>šž’©Ç1•»­œ:wf'-o/ËßwÛBõcÕíšÈ©gpU¯·K´Ëï¨OÃÑ£V7qZëÜݯÇÌïévÍß¿TîZã¶íš Ïir›=äo­Òp¸§bû[nýÚ†csSý›69LõèU¢¶L“´6%ªýܦsá671 ¯È=;¿ÁÝTKñ±Êâ»}Òê!˜æÙ՘΄[¦®Dƒ­°ÙØÙÉ[y{/E¾!7b©s[н\ã6ícÒoÍ-W…oÛ6õ數â21 ˆ]´äVRÑæîíFí÷DHgÛyÍâî¾uÜ-ZC¤Öš®Ö¦r[vuêÏz? ·Ne ›~è %¬g“IºÎNwįï¾™r­©w3^ÑjRýqkþ8’6Fø§É}k`ÕÌŽµ–[/ænÒ_ÏÝ~RÒ"‘Ÿµæ!4‰Èz܉‘ßwóÍìè[ï3&wßçø+@¸J9âhŒÛti¢sw¹Óq¯õk±’[V‘æ.ÓßLã5GñuÜÝ-³ü¶Œæ÷lJ:·éß§qViß¿·ëÅIq7ˆæ»]L†Û7Zè'á6fá#þð¼þ¢ßÜt—å1¸‘úûï®ýù]¡ÜÍY6MÄꋪQ·Ãëp{Z½ÉÝbeT»TÖÛ*—Ûç±ýy6·ÏO¥å°©Ø¹öxëôL6ëvl¤‚¾w#æ˜vw¬â~¥ü®MF(š l}?ªEÂ6^D’"ßŽÍøa5ü‚r-ÞÖ÷ãïŒÛlÍHP÷gÚÖõÜ à_ÿIÞ`|«mîvCt2·wVÚéLë¹î]ÉædOÛ’DÆ·z wªýîÚÚúf¯Æ¥Î_o—|Õ¾ÂÞ€ìg¨Ý%Ed|s.4í^ç65&sw%ùí´­7é’ \»û$o7¾ÕÇæîGý{ãoRéýQíXEFÐMGû•£µþz÷·éçMLªæ!ÜæŽÀ|ÿÈ ¹» Œ!/:ë]³TÜ]"ýJô+s›«xý¤.7>tö)4 ê^ÛYîÚ{¾uÜòùÞ¬¿‘àE+ÉU 2ïVwéŽp7e1w¿º×-ˆ¨çÛ犦~¶Yªô{î.‚ߊ»}L•w{›:g^tø¦^R7©ê¹ÍtG6hºÚ§qc7ŒswÙeÉ3ƒšûè»XúÞÙäž~ìó¥úd­ówº^7ošòPëæ{ª¥‹˜]wÁÀšÏmnkÕ³}ŒÓ¯–ÈêÀ#ãyŒÛÄLk3Œr›7Ìçn]ûµRÜ´½OÖ~eHß„»‹¾?ÏK©ßu ò´è~AB~êg©=·Y‹Ú 3¹5§Qn%ºû½48¡“&í©pÝw¤ÃU+înÜÓp÷mNúVÙ÷ƒé^^Íá®F¹5U«v7[çêëL›=4'yu7÷·™9´€›j7 Ü)›•…öžTTýá]Ó¹õtpûºµ~F§¬=)3ö.j2·‘î+r[{;ÝãIÿ¯ñ”Õ3›ÕÑN;¯ŽÓéÏk7£ç¤ºA]î"ùí¹k›;±Ÿ”AíMu/µôüËQî9Š»ÜX1ÑtA%Ôå†ö¼9CùvÜæ…³ò"T͵«ü}bÕîãÆöû`q÷7÷Ü’…;3JD¶¢²ÛÝ/@Õ§tîjV~cܪ¦ë{;Ý/êž~Œ‹— a&TOávÖ»¼ãˆ¾â7Úì¬ í‰Ý/·Ó¨ÌÝ‹'M(«Xsj§Ýnu÷5¨Ì.·©&ÝD=Àí$îãî“jõ2´›­nm+²6­¼¥2¸Ñ;ú`r÷ÉõïÛä|ᔦ©¢ºæÎõá:ÊßчqîæwF(8Aϳ¸dWs›¹¨oh}rJ³e¬­eõ±›Â1ÍË=.zÙд!G 4»°ÚY}ìæg$Ù6Õn§¢™#5»—TœË­gÛè»KMZ™Níd¿wÓ2«a¶©hgÿbOC¿(·!)]noÆh[*ÚÂêé[Ówó¿ nm Ÿ6±¦ú­Ý–qß]¢­ZF›X©Nà6ÀF:\½ikáêb¿Y¬B»éÐgŒ&ü¼Í½á˜Ëí p,¥Ià´ýÔ ºÌl*Mök›—™Ž3ìGÕ¿Wpkå¡­)·*IFÏÓêFhå^øUcÜèìq·Ù±iñik!MŽrC‚·¹¯-tôIÛXåîç´ûØÔàŠhO—ÝQôØZ¦Õþå¦ ÜfEp¹SÏïZm_=ÓdS§Y mjpã« ÜΠÎâF³¬•ÐúÎN÷½ø®Ð—–Ú©š¿»ï>õ5 DýíÕ ê²Û2î„ðJæ28¿·¯>‡Ûj2hÓjGNé"f½æOw›VB&×"n³Œ\îÄøªIŸþÖn9kiÅ4Ïi žZá[äw‘ß©~‹³Pgqk)ô¯Ð-"wЬÛêÖ˜5n8·Ön³;1ø¹{Úu‰e³Å]ö[Ýë©Æ¹ßÛ”æpsj|Õj•ö ]|¹T᥈6áåö¶ö6ÕDÿv îþn­‚u2£$Mèjµ¶a¥=;Æm–ÎmÜâlqj|ÅÓî‘[îÄýÉxÀLdDLÈo§e[=›^ÖÚGÚýnéû´k?VÜV2N/kiÜ>×Zí½^nm‡\«Ä™™Ýú¾O†~„àrP8w¢ßâr[#·þnNû}þJE¥þ5ô}6íÌf„ŒæRý['SýÜîHÁŒS‡íé*c@¥Ï{ô}MíŽÏm<àÆ©Áêo„î¦Éø´—Ã_¡Æf‡S¸©ÿÚá.qt7 ‚¶JëçvgãøàÃàæT¿Ååö&¡ÿ‚,"« ‰“ åãÆ{s¸í"ÕRÔ*5º›VwKÉ6Ím @˜Íí¬ pk Û•²SÒ²2øU¸­>XÔ„0¶+%£Ón×¢¶¸Mwo%fp›¯ImkÄ¢Wê´Ú#Pt‹5­/±\ޏG%à œ»œÇ­}ÕG6†é¥v™j·§ÝGN»\n|qd€Ûбvºd-FýíEä&èK†ZÙ[®iF2kwîýª§Žmsû˜,PgÙÇlTî‘ 5?·^K9Ú0«~nWøܽ5¡Î=¶hEª}Õ߸D¦±”¯}öÇéÞ;érÍHµ25J Ù.mC‹MOÇæv|îžÏdHìÚ%p³–Ž¿î5a ÷È݆´¯zíµwwT:iÿEo –lu¸­ÍàcpsÚÖEdTpcÇGÐâv&µV››ÀŠk|Õ“×G¯%¦¡G­KMKø8‹Ya6þn«3Ó Ä¨úz]n/é…§÷®Vr¹Í>¥}r·Écpk(fæ6É¿§}"cÜÖØ£%0¹ÍBs¸­¯¿˜Ñ]3§‚›U^k væ¸o<Ÿ{$#¯Œaw÷縴dlhcÜmÄ&·YJnþD %d{ûÒº ¿ï@67PýÛ2n;V=ߌ›3KJ”FK-çpsýɾ•¾ŠW#KŒv¬ÚkZ‡àX%7RÑ‹ÍÄ:÷ˆ,5o7÷öí}n¼Ó«.;![ÿæá6{Y‡Û®9úíæ+›…\(Ô¸=kQCÜNŸksë¹ÇÂLymªGè²ÞªÙ.ÄmÕx=Qsíœë5£"f3Õ_Ñ2öáÔNÒZkmo·¸XÜ1¥Usô8µÍš! ¶¨‚^¥¬4¸Kí]Û6¹ÍRsÇðV èÜ–õK®mÐKºè¹oMµÝi±g/aÛøf<¦§Úgk±¶ÏpfUCd” q$n-më—n?Š«šwZOqwÅcq¹ÜÖ½±v¬ÙÙMó—Á§œ$ͬòp›¯ë®eXÑýÕµËMõÇê­ôR²{²1î®Z rß+ælØJ’µû€¶Ò©ÞíØ#5W„½·‘ǶõKÕbÛ]‰^íþqŒ»KÐâ¦ú7n|s·fñ‰ù4H,»NÂNÂZ˜W<Üf4v¤îcï.·˜þ Ї¬_Ǹ»Š¹Ž[/DÄ|‘»Ë ’]ñ–ryæîY8Õ1Õ~óìØÁhÌvårã0§êÓ¸’·¯èÉâæ‹n0Dˆ-÷rxÔsÄ­QÌÞ Wë=VK~¸ÓßÒÈJnª}±†H¾` ­g\nŸ÷@‹ÛsWwÅ*G£^yìÏí`ÜfµÃ1îr!·]ÿ nkî FÛzù#%ìãöútô¥£ßÛŸ;Ao¾ƒå§îðÔÜ!n¤uÛåªßa5ð`<°oø+ü'·ˆá‰}ò‚H¸lw¸­ni,ˆ’ß$^#¸mé½ìAžH¸={ ·“À<3 "VYU*(ê—yéÄÜÛÞv²_ˆ O,ƒÉÝ\r¸ÇÜ‹¢ h‚ž•Š[³­`N–6Ó\nó^d°ƒpOPÀ3Ò’‘Õ*n²@y¹­{n¤ƒÀá@@@:]«ì‡¹­½ÑÔ‰ ŽLÒDÖƒ[@Ø`Áš¦AºS¹]ÕG,…¹ÙÇgÖ 7ƒÜ~çŸ]p¹}>ð|¹ž˜…=‹™8 -h® DÊ; ÑZŒ‡;&sS7:¤åèù؃˜õ)d/äå¶hR$ºÔ½„Ü6vŒ O°1õdn,’) C‘÷H7oϽ$ws›«`6Œ›¿Ï(“æ÷Î\WGãÆàH‘ŽkôŽÝT>ûä=Y7 ³pPnlÝIÖ0q4v{-‡j_\n+$ LdÍ(Øx)û=‰Qn¤GÁº¶YÑ2ĺy{5Ñs¸­Š† d1î &}@ […°OÑŸåÆê6š!P°Æ€uóÖPÉs¹-AŠ d±º8G `Ê‘X›áÔ$IÓ³¹SûÜ`q†@ÁÊëæí)Œž‚ËmÝ Àñw¡î5OÀ”±nÞÊA£ÆŽs'ö xß6¨ðhì±dVqcp¤£Gz&뱬°ŠÚh.·í šºb…:½a¢wbMƪŽë¹‘ýŒžÕµFÄ­½Äj¨ËmOFô¤všÐ5þ.3¹±,êêd‚1`ƒƒ•ÆmðƸM(l@ˆ¦2¹abƒæ„50@\îjœµðwGŃ}æ¡zKÅšyÍãÆ²h+By`Ÿ1©.bug¨¡!BÉŠ×u¶àñL0±a¢z‘¨d]Ç d='ÌOë1QEk¬'³OH€¯e÷£ËmUŒK¦f“­pÅv,#ì?H“§Í·qnl ‹ºhá“*8náƒUŽjºðWCû«ã „ÛrèÀ wåƒW=x¬MÐèçëzn4ƒ&TpñZ|Ö¸4PÍà;õáu9_{*ä„ n;boö6öx:”9Ú^]Èw<>¬>qŸírÑ6Ø eªíNÂ=z¤BíëxDOÑëmpµ×UlØëÚ}EÀMÛÙÉnl`åqA46DÉ=¡Eêr$*üÜŽ…–.9PÓýg¼z¡µŽSók,õ³YÓ‹NàÆV>_lù $Ä-M<­Üîþ÷a€Û€#[ô^Í û3äž_Q©jöC%÷~7–˜g_¤Ë¢µ§Û±‡wTêR†¬M‰&5¾rŠÅê‘Ô>4•–ç¥ÐJgO(,œ‹ŠÒÆ5ú§H¬>66PQrŸ´Áõ=Í‹ý‚›4Ë ·UBèÀʧqÂ*ŠGuÓ£MaOs;Ýñ¼S¸1¯Æ‰^ÉgQŠÆeuwýEÜé6£ÜÔøŠ¬¼'ÞÊ ~ñ´ ¼ìì^$•Üm»Â¸íÅ#|žâbƒÑ¤ä}ÍÛ.¿zõ8ê‰Ü>Õ;ÌæĘ¤ù+›8yyõ5kwuXù7¶sOË̼ƒ\4*»UÁKóþF”Ûz[}õ{Cæ¸çþ‹yÀÝ*#×8÷øáµoæWùÎüC.ô…ìY—õ4Êm݃¬<3‡Z ·ûª}í[Zl ÷øáõ Ê –ᙀÇdÕC» ÜVDèÀjÀyiîVå5†Qß#º j!qŠEì@q7õj>Ô±IVâ›·Ú=3™¦]™˜áCË#p£«!/Îܲ5â#ž&"Š^5¿:®!1nëÜ‘ºW€×Ò&M{jÉÀ¼ïy­ÎÎnc8wj|ÅtŸ†¸2òê‰Ïfªý9Ůړ\+”{üôzH€×µ2§kîóXÖµYŽÉâIÜèeð<u†Íþ}k4•úoÅÅ·=x¶w™pnj~G¹‡u¾us@Ÿ­— ¸ø¶Û”-½Pn»ñ¢”M0¦a.áâ{lLŠrÛa[cÆ/U=¼Ø‰‹oNÍ1¥­QÕÒ²Å>¼ÍÍЉP*v,I«èÐÊè¹MŽmjâý®•UŽ(žÆM±¨¡ ÿßû‘:R{›·ÕOãvŽ;¡XÔSfžñ°Õ¤œ.WŸ³éø®ÈL£0n1…:©'vÇî9Òm|D8|“=KðÊnHÌ ÎhG4i6íéèçšCOÁº<•ÛéØqîù~!ìà1sV¡`9ۤݛ<ÜöЉ§Ã\+P|6?N5…ï?–÷ýkúÆ¿Ôúîá^9²òÙX9óøþE8O·ûÎnlÜ…ßkÛâ¬ý>ZO†Ï¥ëÃLÿ VðÚÚÕq—‚sŸïÖ‡±ƒ™†ƒOœ8ãÉÜÎJ§Ã\'P|o=áü=·}§§Ãœë°Å >gÎæðdn§^à3úYfÜnðµê Ra*·§Ãœç_Á>U,»—C¤°Û®Ïžs•@ñŠ“ çïMæöé<‡-ŽW'.±§“ӵ볯Üç°ÅÂñ••3ª£Î->ng_ÙW'›q»ÁëâÀ.lÌ5áDn_‡¹¦§÷Õã³Ä¹eêØ×aÎñ¯`ÿÑHNç‘j_”ɫ۩Ï>îå=½×ÚéfŒz£L^'s{:úÉfÜnðMܶd0²&Ù‰Ïú:Ìå=½·† •uѨ‡Læöu˜Ca ïƒvÛÒek”¦%½æò†é• ¶¸Öë{«ŒííïìÊçÝ÷VÓ‘ào¶ØÓ˾5´™Ìí]{]ÚÓû­zmM½¾·}¬7U[~x—Jª…=¦¿~ÙIcc ?wj~÷v˜K¦ß-ƒSE©{—Û‘{Þj¼°az‹É=@ ¹ÓËíÈ=_dz°aú›¥S#…ÖQ]iH~nj]ðêÃ.ë1ÎãCº¼Š–A}¦UH/·S©¼ú°Ë¦¿vaÇÕ–´ ÷ºÊ“—ÛiÄ~}؉ŽO¦>äã&ä©¿æç¶ãõv˜Ÿ˜a œ–À»°Œ„ÏýÔ\ór;ßLmš_; 8K±+$Èvîœ\¶µËËíjy Öt¤? ”Ösä·ßž»¹ÛŽØßñøŽô‡Ÿ#6ÈÅ  £ŒÜœŒq»ýÌ€!ÆüžÇÿªN†AK“ÐqF®ßŽr;ýŒ·ã™àÂUËév a1@¿?çNÇ.ô1Ï®àMd9¹ 'çdGF¹Šßc~ÏãqÁßÀÍÏÉõB³ûqîÑQµ0»çÐöuör„SrMãv»õK¹=Ï?'{ à¹@޲$+ph›Ls¹¥Å=p¿S¡] nçiVs»ª~îr¦¨Þˆ<€èӟꬊìÐUpϲšé·| =8@p¡L>W)¨iÐÏꢟ{ü@T- û³p¢¨Þn? Z„OÝU?·›½þŽg¦ªÞN·ƒó·“½€ó*øPé8ÕoV«÷€ଠ>èÝÅ‘¶¸àvª…æ0¯‚ó¡ÂqÄ7Þm q§“bh~›QÁ‡|v¸…ŠçÖ·Ú㜠ž •“*>¼àvuŇêð˜ë*=ÉAŸ4ö¼U p;4¨ï=æºJ‹whôè**xt渒*ßÁÆf‚̳ÆÄ¥ï·;àâ¥&JBäTfljţ ãçvþŸ, ‡ Æmû>ÏdÞ(ÜvÈ„{¸ÚjÁçΉÅ~)Ÿ*ô@.9o:h¹8â㬠Cž¢¬ñ±!nç§a=õA±ÜÇ1l9µÓâv:úaµR6©¢øýÉàÈwú¢þâ¶ã6ØAÎjÇÀKÅßF/ ²E“˜?W| ׄa$¼N¬TpÅ·QᣎaˆÛƒ|RE©&®ù”1Ú eÚ, qO:‰[ *J5èºk…f7ßùävÄÞ òqÖ§;üj®¿)Xë!cˆ9Ñzx ÂÆý°ŽT%7cL¾||ý{#†FåXËôû:k‚£ l‰°nÊ1{Ì.€ŒeçX p^Ë>‹¬-Ð!näìï‘ÉÁXõ{/W|ûrjP›Áým¤xÊ©PŒÖ#'_|5sÛ×Ã\î ü:ê,Âß‹ôD]q=,À½ÇÉì{Ü#ÁHý¹½ÐÄ0“{D€g鈗ß2ÁŠ\G.};Ìäv)ý›¯í#þ /ÆZ%fï&³NˆÏ(ú,FÀßMáv+×èÁ¹•?SÉø¸Ëµ/‘ JÔ¾“pžwp»ÕmÜôÜñqÖE6ìžH·¬$^ñž€÷-YÆ=nz^züù º–kïqŸ”WØŽHfB>LâF„þ˜ ”Žžj0î1ßêMréën27òþc‚Pf8RSø„ìFÊWå\&½añÉÜH­„2g‘ŽvBíFÄ zBîEíã'„°iÜn­s¢Tצ_6¢ ÂÄ/w )ß îË0XÌ=Åd>wÀ³IÙT¦» øÙ›°¸Žön·Ñ ×Êv[•: SÁmª²ˆ_D»ŽCvEŽy«GÓ Ò”7¼þ‘„q«Œc߯»§1Û6DÃÜHm„µª)mç£ñÚ€”¥ši±£´à´.Z—½ÃÜHm„ˆ&-"Öám.÷uÝæUr»éM„µ’)Z˜¶‡‚”®÷Áan¤ä&B|>6Öšr#ÏŽÛûfc#£A¿ôÑ–wî;„¼ŸæÈ¯ n“ÒYœÕgDBnŸNßÿFÄ ßÃ7"=& Â%aVcáF¤Ç4A¸ B×k4´€{š \§$þ<áF ê^ÙЀ8ñ×Én¤ì¦ ÂÙqº0°¹:Ì´•㸧tfñëOj„ƒ\ ¥>% Ã@q#?Å=¥ú×—¶“ä˜uRx«(áiï]ë*û§1n¤EOYÍ ˆu—R{*IƸ úJñ4Ñuó¹1“û×(HìºK×Aó7R)Ö{eÃk·wéö÷cÜØºÃj¯lhBH)v{—®ÏQn¤2¿ÊÈ sѱÍçÆ*óQüÝNˆ´ïvæscÕîUFVˆ8é»WoÔª©Ì¯"P°5Ü.r—aŒéÕ_C `ƧJ–®ún¬¾‚@Áĉê;ÀsŸ«1?ÊMo^a„‚‰%µp76y‚ùžiöëEÜXdzÎ+q¢ÆtÐuK:Ê-½‚@ÁÖ™%š¬øûzšŸx-`sŽ5N”<© 1ª”ey‡ÝÂU{Û¸W ì†U^Ù°€‰UÒœŠB~”±s>;u¯] `-Fµ,1„ýT…E×`á5IßGl:ù·Çîé1q¢wX†°½yï87&À>åÁĉ’¶,I¢"díšô î9ÞG–¬Á¨ÊÈn’˜…Ï-÷_M&ÀFÇ((…ª ìšÆyø–‹™ùÖ‰#¯¡ Î»TÞ°-ßdoßÉíyrA›ǹÑNf¥ÿU;`Þ›Q'Û]^ÆYT’{K[ªñšŠÝ±ÊÍ£°lhò‹íÎ/cý‹  ³ó¸S÷Ú:ÿ«nIBYä²û·ÛKB.ƒ*ÌòÛ»öÆ ÜX]>®@A›y#ò{²{GÈMXEûŒuªÝÐÎñ¨==ê°²‘¿ùƒTôIÂ*ƒCׯNàF7F°Žbq@ÇÅMvIî0{+…_æp£ë˜Gm˜¨Ãʦzæ5)Ht¨ÂšÒ§>٠ܨªÌR¯lh@ ¯©ó‚»$ñÒ$ãs=§~£›ÍÇl˜¨ÃÊvÑ “PŽýN~ã3ÒG—ŽÙӣͲ¯äõ#öÌ”|CØ0Ñ:×–r^ϵçî:ñ:P7;|=7*À—û_uZt­{YÎ p¯sãÙ÷#Û&z¨æÚÏwà~¯µsî—®]ß[Áë:N4oxWÐnä=ögxéa 7¾Ìs´†‰FÔÉÙGwïR2MàÆ×Öc¢~.;®'wÐø}( ðh=&ÚPºÙaÔk þ<7uT äX ïyÛÙxÝÏ…öû$n|m±ƒa3àõ­]ýÈ)ë¯i¿Oâöœœž¦íëò¤§Õw§&qãšGj˜¸Êo[ļ>ô×Òþ÷IÜ>W5)vyfð4“>îçîì›|ퟷçÈò£4LÜ3ž&z?uŸ º¶;k“¸=úBGi˜øøLË©Ä?ÊO cZÜiR¯Gâ®ô¬Å=õ¢Aumj7¾¸Ä©ða޹˜Ú@$ÉgÌçkßþÂ?¦vð83%o3fæ„dÓ×cÝhº°À©ïMµÌ„¼þ…ÇŒB¶qJÂp.·oƒxåÐÊç:ªi­`ü“ßFÍ£’çoHxh‰Läöݶ®‚û\uµb6å3ò†$û‹óósÁ=z>‰<’zçžêÝŠAB‚ŒœÁ¦ü9;'Ѿus8•Û#×IpŸÏ¶V’gd»Û⿳³X3v›ÊíÓ8Y%Á}>"Û]R6Ü—â¿r¾€Û§Â¶fîàõD×n“’fäZÀûµä÷oŸNìš îõDØ.ˆ¶•ûòA¾#§'„œÏäöml¯©à^O„m^ìùY̶ø*7ø¸?;7È ÞûVTp¯+€öú^¶‹³÷À¼:β˙ÜÞý³yž¨õàu‹ÖÅL0çIÆ#çBŽÓOyµOLÅW¦óÏhCá«Þ]ç,¸Ó} Ù^ î‘R§À>™Û'«év¸vŒ¾7î6³7,û7e‚»]H©gp{uy§;굂×^:o•¿ž”·°°$eRíèwÚ=“¹½º¼CNȇ‚ßÝp×7TîŸÂéç»Á«á3äô}(øý¶ZQEÎÁ’3¸ýÆSõÚy‘´Rr΀ÆnHǓ̂SU$·zÛ%»’Û«2è¯t†èÆëtn¯Êà2I˜yå¾-¹ÊuÜ~ͤ%’°òûû±ç~+¹ý:ÈK$ဇE»Ú¡ÝÓ¹ýF sO'à÷#댄8vçtîͤɞB´ÈüÇÚDèF÷ŒÝjÿjØ¥7¸ÿUÎ5v­gqû†O@ãòW-§ý£Î-fp¨:Nq¦‡!ÿ¡Î=P`÷€•Ôà XT-Â)V”p÷€•Ôˆu'dǾÙY`Ô÷Ö}Õî2Ћ`aÈݰ³{nôóç;õ îôˆ[o+°jâˆC9`÷€Šæˆu+ ¹=sZ×SíÚèî!³ËlF_χ¼Ì +h/â2»wý­%>Ô¿¯¨/â2Æuý݇jÐ;Þ°D]T¿í¸Çñ¶¡ò:¢Œ³ˆ{0/Æ\k± Ý9²Óµ¨ž ê|Ð…ÁVÙ­KWøÏ­ºÏ<îÁ¶>0T²îõ6³Aßó2îA;î¡1‡ÊaŸ•M‘f¢.aó³N)o÷ uW5­e²ÁúÔŒNÀ]dŠùì^–ßÃÆC½·Å`ûí4’D#ÀN[Æ=,\ù” gÃ75z_`–cÜYûa÷pgÆÆûžjÄke#Nć„˜yÂBîáÁÃH“ƒÜÒˆ“?â pÿÉú½£Ç=¢›ex5æÞ¹¯D¹Ÿ-›£j!÷HoVŒex>â%T›ì€.„“OýBø<î1UÞl즑ìÖâ—ÜŒpZÿãZZÅ|á„ò™za]‘¿ çg6æ”UËß †AÎÔ«f'ôP˜-åÓ7Ɇã¾âµ]ó}F’Rù)Håh|­ÏÕÃÃ"ö¢y÷«™Äì¹àŽî¸óíùbîQûÜß~÷8¬UCØs-i®¸‹+P-à›·Ý{Íäw«C|bAFÅ»®(üX‘¸”'"ÉL£~±YšßãŠ`ÌS‰Ë žu1ûTË®HÜðÒÛ.æ·J« þ•x ¢º¶Ö“hã;8ø ÊÈŽ,­'¬Ò ‚´Mù6£9Ý$æ;ѵÈã+*.îó+ˆ \Î=A¿'wÁ%öÛÑ'M)[ ²;ЀÈÈu *ж±1—{І¦,Ó¿ç\}ÎÖÁ!ÉãÿÎx*¹¢¬í ÎærO1ÚiœÛ'Í×_eL›ÛqÃâkñ+|î…ÂÙV}S&c­ø "ÿÍ[Ë1Ï@ðÛyd¤þÞÜW›Í=I/É:N`¼£”Áßv\¥¢ÙÜÓï {ÒCƒGòÏæžhMWÌÎíÁÙ«ãXn6÷TkºJæ«c^Ï=]a°Éò·SﱎˆùVÂG2suÃPËqO†œÍ}$3W74’ªJߎÀ}T-zh* ¦þàv=Ÿû8f®X¼‰üË©ûÛ1¸×á¡í-¹ýGWÅjõþ+5ÌvðÍ/Së—*n¸¿ö×p¿RÃlÅMjýRÆÊ½æ'¦]›Ï}3W7´Õ¯¸N­_·,âÇ\»6âf®±ºÜU¬–ðÃL¿}v ¯Ó0»Þ²¸vŒ•l 5Ö%^5Ž`æê†nN\ÜØ?‰v™ÂŸ7Zϱ„ûUf—®oõFa³‚™}ë1l ÷k4̾òy¹Kàn—K¸_£aö潿“6tÜa ë"¯1¯Ð0û2,œß4î¬]SZÄý ³o3Ìù­¢òâžkO¢‡#ØŸÛ¡_äîn[ĽÞþÜZŸàå®âpá>7’Ê‘B—,äîÂ2oN‹mv|¡³5È’çǶžÄóíþ­pôž§sA’ƒæÕQ…ãq»ç©Úe8Q?©…”~”ßrŸ¯æ^n”†‡®'«Îèá c×\iˆQ­÷çþ‰%éT 4ì‡BgiP^Ò}ÆÞmh?ý¡âÿr¾SÒhé~q ËBoâÆ }Cé…?‡ÁßÕ5 ¡‚;Û]F½áúBî%&$þÐÒnB‚\qW„Ü^…yËM#Ò —z\hL‡‡Þ “ÜréùÜHôø$¸ÅÌ2»»%‘67.å^nVŒ„>˜2îWÜr;+ŠÄì¸ÉÔ™´¹q)÷1+¸VéwðE=ylŽQ?‰+ú((¡®yBÛgV§µ:hyP\€K… T[+ÀMÎcNA»œì.EÅGÛô&vÄ ® ÕJTb”oåÞ S.ÃL ólwfÝîâbnG¡%ÁèĪð±ø¹Ü8 À+Ä58A €{uÓ´åÜKÍ¡Ý` è§2,iвO ZpÜPiЍ/óüá!a¾m—/¸M<ª’4½Øgœ€z>LÏ>ó¤þ¥³±[îv¾ '¸cÈ‘ŸàÃó^Œ¤¡óÏcô‡üXÅ£é%ùTÿ;’rûŽÜ~û÷y±¿ŸP—s«‚»Õ5NGœü¼2·ßrN@ª7jxî<¶"ÅctõˆÉé+s§‚#NpÏðÖ=+ÒžoÆ¥ø¡Sž[žæ\ë\,`½Âí4Õ5Ü~W Ó&”îî\ß“æÂš::ÇXÔ°WG¸[¼ò}óÛ*îõ’­jw‰ŠTNš{Öp¯—„ äô!~èî‹`S³XÅí÷Ñ35Ž*ŸDêQuÜ}kpjXÊ®ãžg~î½À~mIuÄhR«…׾¨0Megw±Rê ä+¨§*¼ºÊöªVgò>èHQÖqϰ†Fƒ.^€»ýÚ e»¯›¸ý~hS^™p²âiÃ=Ã^÷¨` QÊ븿M]YÇÍVU½š=‚ÜâæÛ#sø™´f]šY¶®Å®»q¦ßD_4Î z5±ÌØ95îdý÷#q¯©(º3 Ÿ{Ï2œw¾´¶¯Å±¸×TÝr='a©éYpZ„Êuÿ€»Šëìa¦?S_˜lîýÑŒä¡ç.bÊÍ5ÜQvy†07D¹|\Ë=ÙÜß FQÁ’ñý)U_¾î,`d ÞfÒš×A£“-W å-«¹'šû#Áxã@Ü|×wïÅ(¥ˆÈ!—u$úT¤-÷ÝÅõ±¸‡\:M° Å×»-U~‚ÏŒiJÃnÃ(¿ [îëM“M‹¹¿´ò…Å(¨¸oï÷Mð$ÄÔYRçŒÄÙuXH¿·ä¶3_ÌÝçS,£¾ ÊQq•–ƒçhI(äâþ…Ðl´ 'Avàmbë¹'ú…°ƒé JŠ Ëa+è;Á}FÁG|Z?þHr±¤ çá>ï,jsê>å‹f=¦7‰’<„a×i[Ç®/a¹>­Ã'!Bnc–²ÛË0:÷S÷‰/á¦å—ↈö|ÜÛkò¸IL!xXÍŠË“(#'ÇãtGå –Ë°Š<È–]LùL[/ÈUÃMÅ$”‰úpN³Ù~´  ¶ ¢ØÏ¸EÕydüDp‹LßIî7"³ûÀê4É‹¹~´‡¸‡=ö ñÜ"ÒÇCq)ê‰à¾£‚;{C"vE¿Ö`$ðÒ­é/å6ö¦ õñÜâ]>=I²{BŠ$“â%,Ф™Uþù¸Üùì–‰XR¶ÓÎ?ÿI´•ឃjì¶bž*ïϛƧ3[¦Ç5M·pòôµ¢µ<@RÔšøÕ¸ëlæàjìþÏýG`FsNù³«Ê¾\ÿÄLx¢Ekæ´`>"·å‹Í…Õù6;ˆGӥܖ«¶rN†ÏzIXŸÊÝË‹õ¨üÓù;ʦ³Œù‚2Ãëpw£”bzÙ3¬ÿ仯ËGäæ*é¾–“ÉN°‰Æî% g«èò$‘haj ghÉÜK*@Ο»ÕD{óŠ BÐ1Øno§ø‹ëIb_aÓšžÝÈ Z8÷'—{Z†—xv«œ|ç^ZÆ]†ý©Ù]`hƒ³BŽg÷U“`™Æ]MpQàÙý­¸YÄwîÕ|Tz_mŠê†ùÀ2;˜¨¸KþE¨†L¹¯*¹Ü?c·i,â~|*H’ÅõÓgã2iš¥·&wõWú×lÊŠj §"à&ñÇð©ì‡)³ IDAT6ȇ†ÈòÀ‚á¼9¤G½Ú÷a™}Z Ügq,¸­ƒ†‡„øÿæ+`Î&p/ñ߇І¹¼ÉÃî¦eÜ$b×À}âJ‡—þÎEp[ƒ@ª´¦,M,¬³Ë(‰\PÚ·‰4J°cͱ‹:wR4.\r6\‘4Kêω2Fâ|¥ W x[<ÕVŒ^%žÕ¥¹Y…OOᆞŸ²e–$%Bl‰Œ‚âÚ¯å>Üç'[¨ÔùµuÖ¼Ó¿l¾º"æf |¨Â–[©Dä5? þ_ +È<ÊáÌ7o¢Ç«UÜ%XAÉõ ly"'Xpo|9ÔE šj'qv›ˆOd'„À•h£ÇЄ©CâÿU£Æå¶àÞD'>çÛŽ{3Wuй{YŸÑ0ÜܑÝaäúƒÈ”Çÿáݵä‚DOB:Vñsvg´÷§kì2VsóÓ· Ow,¸8÷¶åù&΄È+ƒü.à$ùZEù=Ùÿ>¸~Aâ"Ñ#¸7¡(ABy Û­ W%j¾èö‹PÍÇb WÕ'Ý} ÷Jì:ÃZPÉ 'p‹¹°ŠeÒ,’Õ"’c–ï^À'Þ¿î*ä÷$Ê=÷¢;Ojß{}ÛùrTk»Ô«¹W虂%.œlPÒú× ¾œõK1ú)¨>Ï_é×B†އh¸É–¢à{·‚˃"á¹¼‚›É ›ØFÒïßV!j—V ç«‹=3qJÐm0ºÅ#•£rÊ4“­Hå¾Ú1!Tc—h%wµ’»îÜàxKöû î—#q¯!穵°¢úɤ^`_±á^ ÖØ…ÇÔ‡Ü^R½ÒBnˆêGÉ->À ]·…Öß.äö ç*î. ŽÄn·†Ö_í¶#r÷Q¨Êé:lÙ.¨ë¿é†vV=°Bfïr«÷]Žo¹]?\ØàåWí³fÅî=°\ý*¸‰yA=?Ó 7û`ÿ„që[Útò(¯_LÆ•zÔ:îÜÑXÀ¶gôŠªÙ¹zvD[‡ú'áysfÞ*î Œ÷ÞQ @T/Œ ÁF¹ÚÓswµVÿ»–»Æ!÷pcÛú¢•f~îÙ9ëÝtèg¢´`•]tÈBNáS8…Û8'¿ë¾x¸{ÿ ºÀ)Ö®B‚aþÌi­,k,FÌlXçÎú$¢­o¸­°_1¬ópÿ,;»ÒáîΖÖdŸÆýKMznÏ|¯¿[G\Ç]¾Ç³ðQp3*Öþ^yÝrkW¸^¥G¹µ3¸›Ç–úMq„áSN³—rKõjQ¤ù;틽֋֩æiÅD¯›¾ÛÜ}Vô‘WQ[©–ú©„EÇðoÞD%ù8U,j¬òH"Ñ©´°yŸ¬–ß$eø2+¨Æ­Áj§ÖÎb· Ûò[Ãeä¯`A=•^žä’ý‘æ`y{a•ò»´Å#‚;a„üãšÅšSÍâUÝ’n:W®\?áo€;&dsAåN‘û0à—”ÞßHnY9¤PúŠ[à† ã·{ `•fq+C?Õ´è3Y<Ü’ƒÙT|îòäâ¾WÜ"“w'`¸¢¸IGO˜ä.îª{ròÈB&ÛTNSq±]üHÔNIé¾¢šHd´l+…È£,„»bñ¹†íSç‘à>“²–€kr{†B"ú Ö„w&*.(9ÔŒÁfM˜‡9 ëø{¨ä/ì:Êïâ¶kÞÀOò’pYÕÅïß•éwŒòÖk_ÕY Œ¯\×,ÏÏc™³WwqZ“›Fä¸oÉ`b1ŒG2ºÏsØtx|×ÉÉ%•»ŽóÛø<ÈÉyåöÅöœÜQ¨ÉaN"væ43rIkéÔ@dCT YǽV°žþ¸£J<€‚;|—‚;1#aHˆ¸E°èúv9¶Ïw~~*ÏcIAàÕÈí%QûBaþ.È(¸}”‡àˆ¸ãìî<~Ìz? ¹o.Shmù;ñßÕ6®Áýe$AÊääò$ÈÏ j‘Åoá¢âêËi(3ð">d⽯Î`+êC³uÑrÆÎMØn{2rM3r&÷¬è:î4¦”mÄÅ.®7¹Q[q–_“›·PÍ%÷ÛsB*r¿¡ÒÝ'QÜDp‹Ê³S霯 ©ÚœDr›AþÜ\pCUƒeòd· ûº¸¡ÐÊiå[‘â>d%TšLn~‰ô6oƒŠðwAÇBz9¹ `Û—Ø…èk™|!YW1²iNaÜQ‘ÿ*Éý¸p·t9·fÞÐÆ‘ vOÊœ–ôËs¨Ó¥¨l»×g¡èçÑ.á¤Â ~K÷`zô,^7 _˜hg²8Äóa)E+´Ò¨†à"»¿•èLäÅ1Ö¿õ"ŸhÜIý¥~RܱÌïjÕb†!ÚÀM LÂ~ɶ ¡E„„Ø‘(8ü'Â.6¢ª…ß¿”[R\ÁÙ¢|`êâBp/>Ðþ\?–ÉwpŠy _Ûü®É6¨ï…€6¸ë¼ `§ûùÀl(ŠâJHô+@eTˆÌm¹¿½ï."Ù—ä=Ù¾#šv±¸k¹ ܹ¬È‡»Pr‹á‰˜ƒŠ¡VöÍÊ«ˆow!¸·´ ²ôpxú£ÒZ{„íÌ$U*ʿʹ¾Wañaùöµ¸Óöd¡†ôº4¥Z5·•ˆ×rõÕ¦ÂÀ³ç.3¸Šêímųeܽµ;à6 î?Õx@Žz<&·zÊt@ÉÈR¦1,ûÝÃÝTà®Ù‰jÀö˜`™= 9´p«ùåŸÑß|Ü…Z›Ó/)9$è?éWÚy‘ú&7þ5e´ÒºKÍÓðjís«PÜSÛ Œâ.¬‘ìB;/òO rwUÜöþ©Ò›ò9"ÀÌ~ Æ][#Ù¥ÜANr-£®‰Ùúª)!¾‹ëˆ¢ý>¬ç.>îpÿ"2‡_ZO„zÏ âV5¥yù}p[ pËKOúÕeÜ ¸Ÿ‰9ùt¨âÿ êk–t*r®æáó\ ÜŽô€v˸ÿ! ó0uEŒÿÃìöDJ€Œðˤ¹˜Õ&jФ=- ­øˆÜ,*"vr&ÍjBµ1SýڦûÓÏÍ7’»ÙêNäŸ!õLœÑè\ÄG ÔÆ/ïPÁFÔ©,mü•žªjŸÀÊø^ˆÊTúFÔbî¸Ú‹{N@¢a™<}]ÉpÊHÀ7Š;Ê2À¼¿Êf+L.„gî&Ä¡€Ý”Ü[¢ ~BÆhÞ!B{Èhªªxï~s/z¸z(NÂ쟵JÀ˸ÿš'¬ ‹ ÜWgñ£äæ×¡ÚºŠå–ÅVq_·Ü%L*ÿ,{Yñº9¹ëâ,úT„ÿ‰ÌvÉ#ûYŽ$$˜ˆwÏÞß&Ð`#¸Š›ý}ž¾ÔÑçb Üwú$¹ÙCXn„L|OYÞeïîÈ- ²;òŽl ñòTäîK}K.bïÁFô:’&s€›QqwªMïbò·u˜ß} ð"Lî¯â•#£b›ò$+®“zsÑ*£òúävð$wæÅ{ÜwŠ[*ư3®ŽŒõ^vOÿÇiýHné^XíчäCJmñ" ]´Ž» Å.­Òç_ø …JIÂ2*·gç ? åö"ýâÈölZ'ð̸áŠJu«ŒÀžCΉT9Cè'©7$¸Ã'µùMh¸ßèöì/Wr·“ÔfÈ•ÑA•q¹;;Y=‹÷¹ÈÊ(ÈÿyV¼×(7ˆz“ßR©¾Y4Àr ;]ZG²!S!Wd¿º!l$ƒƒj0ÙÍZA¹l¾“baïÜ]l`ûpgÉ߈ZÊÅx@4®«FBjÿÈ7 ‰Èr&¸[…ˆ¸™âNb¢¥o"0õ-bò–ˆŠ·Ž YRR¾Û^‡pEê¿U²L·h\’ûÇúÿ—Í;£¥äìÓ0ÈÀ€;"yà R? EÁ ^›à>ªhŸŸ;Îïï#¾y ±r8æTxó*OÒ‚ñG8û åŽ…laA t‡‚»®EO ¸oH”]A¬•“›°Š:_çGä–Eùký‘?ÜÈ­wÑÇ\€ýÏ‚û¹8Õ®Op(U¦¸ádbÐ(É…˜ØÒˆ<çr–€¡kþ ^ïÚx*²¸iöÖ¯Ç-ãTc|Ñ\óÿV^Cº?ñM$‡u‚{Ÿ<Ãic_ƒYüî&ä2Ñ8ò{1Dc›K’WÅ]†õÓkpë3„ºO0ß™x™|/…zNÒ§À½:ð3|*iʇ1n!Œ„LØî^4 !ÖC(¼/¢¸žº6^‰{¥ËÎòô»د.mrˆ’©Þùœ€aççѳ˜à±ÑYÇ8)nP‹M¼«äØÜã.ÖÔzJ»Ëã¨HÕºk$úÃôc XBa…ªHE#üé+XÑG­ìÎPT%wÞpOò÷U wÒ]*Û½äåõD&/¹‹]Ë-»ônÕÓåæ­§a„ÛݲÏE½—ö§ýþ1[ÉÝŽ©åÓÅ]ýCÙœZ-'-Qn4K¢·»± mPqwÝq›k¹ÿï¸Sà.Àï›èªùMüSõ–ÂÞë÷÷Ÿä¶wçia÷¾ç¦u‹›¬ä.Áüb£MÑ(ó] +ÀÈQ~ía¯)OªèO?5Ó‹¸ÓîydR‡r«÷ëO–«ZÜÅÜliàX.åÀMÀSc¼ÏHͯÀˆ%~Ω(ÕDÀS!K´U“»RoÖüÔ óŽ»?»³ª_ÆU¤h¸£"„w¹ËKÄA]\Á>Sô˜Ã•Ì4£ìžnmSÕä–/ÔYÜw?=v÷å$Ur|=7ÙJîk°¼dÀ-­… ù'b ø†°0‚Ýû\ª]Â.`MõÕäVœj5žuܡƨ×YÇ]÷UÜU˜ð=_5G­Ëìvïs°8ݼÝ ,‘ŽIU jg«lÔî¸4|i^ $Æw·*¢=¡Êô­3-X¶/Üï;¨Â0„ä8”9%grkàVnƒ…²êˆÅރߓkr">¼{GˆKîâA‰N!Î\ÎÚÊ Rtº>ì1 £{Í”c!7FÒ¸)ŠrØÀ~.£l£:ÀŶ¨lmà ­Àð]·å‰!Y  C.^¦¤bJMÅh&ʤ\‚ÃÍèÏbœ,¹Ÿ Ë™z4í”róHð,*LeÒ{{±ëS z t .À ÃiÔ¾F( áê\ir0)±;#×1‹ŠË4,""2£ŽóHj´‘:;‰êïŠ8ÔÇ‚HãÝdu~Ç\æwTžG$„A‹òZ´Di+m¡•ÆlD!»¾Ú^¹åÛðÖøõ¾åÅ7 lzò ØÈ«¸Ár³ËdÈånÖq¸e~óËó·ÒSȲR:M8TA&Ó¹!°ÿÃFw”çüêýŒÁš>‘=I÷¢™d¿¸ëbY£ˆ̃VÁ;Ñ.¤§à–Æ»½Ž[T˜ŸÉú]\’M ܸÃ$wø#‡üJ`à_çl{ívõžÇ¢FŸš_eQq§¼¿“ë S‡^‚×iÉ ÷Åùuœ)nÙx®Šuܱøß½êw®E •܉üIrG°ò$¸Cè:@Y#5m(¸+Peº¾9UÜLTœ(:ä"8%ÿ(î»@>È nè"þŽüóìy·ª]Öf}´Qé¹§0j&?B7÷=ȹìö&„%{FÀQЉ»àÿ 9ìLŠj}<„ŽÁÆ|t`ä¹ ,ß]I›g'$—Ü‘ä®.#!Lkp½~µ*¿ëvFXkNa©²_è€í8Gâ.%é¶*f¹½prÜU°gÛðšr.݃”u?ãÛ˜@3,΃| #Ìîc’îbÔ¤8#ï×r·OÇõ—Zý„Jr‹œ/S=‰Èú¢“ÏàÎRQûE/rí%7 Æ"©Å±á»8§)Ð"¶à.‚€¤¤ÕõÛ\lqÑp²–;mkv¿‰UP徜|K%N&†%ÙÒ<},#0ŽT~'ì-œú+ï㜜†ì\LBî£L•[aÜnÆ Ñ(î~€×së'Ðòô Ü?8ÒÜÿ€¿aŒùЬÿ§…ã1Ø)cpà ²÷ê=‘JJ¢÷©Bvw4nZ·›Iw1F¹k9ø{©Â1?‡Nœf»‚޽‹¹è‹–FÅiZÿX%BòÝ Qx%½¯‹ê(†D1þˆÜ¶?màFbP*rG‹KÉ-†dé÷9-Êä3OŠÛ𥎠5DüŽ ©~Je ú!*´ôGvLn1úÖ½×ÊþñH”uqKîèІ%Ъþ¹ˆ~nu8y*fÀÊáùKudn}ß±¥äA­ïµšš•‰TÃêʋ÷ÎõÃÃ_¾"UŠî9¬ãæ ·¾ïUnèd­oŽ\ê…¾§ÿºyÏæmÇà6÷ë8pOYŽÂƒ=Ó÷½÷–®á®>šßmôöòzîÜåž}ÜßìpîƒÉ]\Qgkêøá8Üú¾nq÷ÀÔ7dþìãg‡#pïõ.3•/áiLG K¹•94yÔ¸árþjÜ¿ô—ú9S¤²ßxÖô`óv3_§žôæ ¹Åà-•OÃ?Ÿ,ý‹lœÛom:è[ÛìYÊmš‘ÜDpSõÑÔdëCáä¾êÚp¦»Ð/¨å<Õx X¤ê£©ÉÖh2Ë5Dïo赹͉èí¾dbÓYÜýnsVûÃznfå·‘œ•ª›V?J·&ëûÛ!îúÜfüÆ· "Tç67“ŽÎmìêUÑ&QÚ§š›Ö­:Ž5ä>‚<É©YAgró¤wˆ–™GjùáºÑYÏ˜ÜÆ´l ž4Ò™kÍÃáîd§{¢–ÌBîK“[‰ã¦–Âæêü¹F ÙbT ¤ãÎ\׫¹³†ûÇf[=”‰‘ä3|ͨ×uOS,mËÄ9Î1kk5GÎ >w(ÝÜÔYo§çZnT•,6cÕêMó1ïÚ€s†MW¿9¦½Érî"­ØN¨hIÂ'°^ÜŸö’[-ÞÀ‚‹\và™Íí {£dˆ£júµØ„õû¤„ڒ߇œò˜?²‰`0ŒžÙöö:Ì"NKp£|‘tÏÙÜÜË„t îŠlvga{Â/óÇv›7’; ò\ ØTªÈ–Ær ôkÏÝJ4GÁÛqo {XË-²0,Éé»4£„ÅÞ°£äÒ$+ÊHþUr3p^’bPQ&Ÿòªãî6ãmn§AÃ@¿U’=wqvJ®c¹«-ížâúÀ¶-wð,‹Áît°Æ}7-÷CKà(x;B†È¬Ùœ_ÏM`#ÜG’[ÒúoZnàn8b¶å&pÀt-]Wä?Õ"±V@{îfL/¹oÕåµÜå–„ìFpŠ›ÉýíCv-¹agWTldÅ&nÞrŸ’ M²q‡ý p?vY‚UÓãÌ©4Ö"èS£7#W7~ZÁÍw~¾øaý4UÁ{õ€ˆ®áìmFhŸ‡‚;zÜ%lè)'Óï(´¼ÆvP—·7Agmä>DnwAS~Ê‚ÃãÏõ¡Š¿ïÆà˸w"‹†;ü Sé=Ü?Á¸"ßRvsí‹ëXr9Í`ßš|ÀRe¦ß‹¤ùûë@ *Ëø„ü³:òªmžÖÕéFäò¾ºH+Њ”<Äq§È±ÌGù&|ÉCÒhœ‘à Ö¥wôø½äÞQöpï‹›låx ¨oœJÿÝ¡L´ŠEµÏïÞæ»RÏ•–š€jPž%ÊK¹C\n;Êv/Ä@\sº‚›•1xÏßËÑòc»˜þ•T1ŒS2úÂi^nhXÜPà.¯gä"€ù™Üf¿È°éz+¹A&Õå[òî!’†Ñàˆ_Kn~—–ÑÈñ ²¹Œ?¯²o`è/Ä{©0òØ !Z\ä:ÄKy<7ÉÀ 'Î6!Kùyôü"YÞ$òthñ ¹½—­ `ç´.v²ëºMË“óÚÐåæ’>­ã¥-dÂþÿ„ÊöÜ-ÓŒRaß$þ±]qc褊û1¿ŽÚ6˜§¢É>åR÷ pS‘»ÊÕz¾¡5»?%{FÀÃA.n6ïh«Ì´Œ[4ô°ˆ’Gi\ݯ‘4ƒŽ¢æÍØ_ÎëØ}Ü ó¤¸8‰;ÌÄè…Eä/I¤´à¾N@±OHª½…W 7$ÂÃ9×Üä-ã–>I2j\n¸A+>!’æƒ þ¹ê¦g,áoãLˆušm0ê—ÜxQrIÏ‚{ŸH"$"9Sܧ븛!7_åËç>nËü.î+¸™ËÈ?ng“.·¾±cúûáq_Èý¥Y—¨Àme­³QÙ©å®sûÿ(´#l(Oö 7c/{fà¥Hþ“Îmû&êC[ e|K¸Õ"¹ÃX†¤á–®_mn/ pÛ#`:ÜjnU\&7'A FÕù»PÊe%´Ò÷HTÊÏwôéÄÒõAû¯ÚØö¦nÓ/åM˜m!¯ãº>àš¶Ê’â&²=àwܸLJ;9 7b‰“˜×õ¿ˆÔ>æmz€± {ZÊ*tæ°öù³Ôl‚ÕÀܽnûjî};£à¶ü6bd~›ªew¥R¢4K€ÂÞÀ¦r¤uÕOÒ‘òp`q3ÍýQ¸ y-m\¿†àƘ¼»{Ë׬ñû ËbüšÖâ+Ûž7$h}+]ŸƒÏ¡é/»vØHc^¬þ~n!¼Ë˜Ä=wÄÈòLˆòÌ ýÖÅÍYµܹ<—9P2ÿ+W–ÈDr=7§-·šI)Tu#GóĤ%Ü™TÖàç'à~4WÜ1 XAòÝ9iÇ|–óDý¸¹€5Uòpvr’[”È)ìD‘‡´ `“J ýBŠuÜÍé<+ü«æ}ò‡¤k ˸/(p¿ÜT:Ø$÷A ƒ?p9zY¼m¸I Ü»k°N¤Sx&v›{ۘɯu”• ÁÒrƒH eî$ƒL¦ã§<ø7Çá¸ðH°áj§ë•¶÷ý;"üJr‹Høô{‘|-Ê{1ðÎIðÝ­’$Èï.Áº¸EcG/¸CÁÍ¢ÿ1õ*jWˆ–q«ãØ­}n|r”w§âæ=Ë”Š[N<>Ši¥à¾ƒN†ìÎÂŒm°Êw ÍÏBYÁ؃ýg1‹s1¢)´‚;¿+娹Ïíá®ù=ø&c>ÉÝ ëD÷"Zbñ_Õ9-/£½T‡ë¹7à3^p_Ñ‹Ž9Ošžy7§ÒXD– !@Qú}_ƒ#‚ÀxJp¢ëÞ×eš>;² 7l_Óg8ACpƒŽà¦Ð-ÑUÜØÑ•Üukp\&ÖH;äa;äø"†~Qg¹äö*…F-ÒeP¿d‰˜wˆüNºu óYÜž‰Î¿Ÿ\>×pÿRï–‡n Ì_+)‚uš_hj¿GÛOóp/îÓD’:Ë ¹†]Ìä^ä'½9‘ßNÝ”0׊Yª¯)·ÜJdõ¼ /펙»…Q±`µYMí bkfuÇã¶J¶a•¥1øÈé¹õpDמù[g x¦&û6æ¹Sì²Î=ä| ®åbŠ£ˆp4nÏÎÝÝB'Æù··³—ô›pǘƒäY9z“‹@Ίá·änËZHžÂ>0à®äÚ—³œ»Ž[Óˆ@¹+ªKÇn !š`ÃV7ÎOÕÚ„³ÓµŽ[“µ(7õ¥l{\…¬†åp¦£¸íß^—;8¤ª† Ý@€Oå¾ZnG­ãF*¯™r³QCÓ¹'©¾}‚ơ΋þhÿ¶Ž›ö1n1Å‚ÑG¡FÍ]åáD•=É-O®¡öOG“'w©öYm½ÅnÙû*nøú×nÔ 9m 2Œ[Ù"6’úý7L%Òºñ”óàë¿r~_±Hõowq |­ûÕn‚PMàæ9ô6*•Gûhì5ûÜTÿ†rÃi^U»aÐOl&pËÈ;îê$µY³_Lõo7ƒá¤ „úÝ&2Î-xË]žÑêrçp”4¤¸^ÀMn~qDîVõE…à+r‡Ìï–»ßÏÆgrq”Ó†»¸ Ç«'ª½µ{vû·wù bG¦Ù鲇qnøGvZÒMÝErlîìL.VÓ¶O›&˜7µG•±–ßãܲ„ŠŽû,µ¦Ý˸™ºš@‘S9Jó‡Ë†»LšµœÖ®µ´¸ó‡hÌãRÏ-=b{Oy™= ÝWñ÷rÔQ¾Q»•,Ì·¤;¡Q(ÉSƒ»K9¿‰›ñâ‡&wxî2ù„ÄÉ·;QÜ9xÄŒåbMVÄyË­èÄ€ä‹Î˜_ÇM‰4øÆðZz§–?ƒ.…ä΃£p³n_˜¼;“Ëòµ\­¦ùNŒ+È­ôU+Þ!ß©Ää³TJ”Z)ÛÈ)ª´)¹ Ý.:Â5UB\¼—äÎȱ¹Á &8“Ÿå™×çDºE%•Æ÷# ÿ#Ì\Àeð#ÌÐØ%ò’—Ò«w(çb¼Ñ /R(,ÊZõ©ˆDY• ÉSàþ®^wN“Üý"ïøÎB®¤å›´z [§µ²#NjÐò`r뻊³ð‹j §ôù9%„ŸËmP"Æy"à«KB6Áþå¹PËaÜü2ÈãJZDvn˸ï`7àVq—À]öÜŒà¥ìë©¥:Š8=„àßÈJ%Êá®—ÜyÈï™:¥Ô=2r §J–aeáSñ6ÌáxÆ2âƒeëȹ‰2U[‚2î7äøJnU§Ú¯\‹û^p_Fù[©“R¸ƒb£Œt•soñ‹ŒR~‰@DdΓ´‹° Ÿÿ]Tt§v/³,ÞÝG{Øã¾:ËPj-€õئ¡¤éZ®êêõD½,Ϡ¼…15IÀÈ>`g ·4½‰·Ô¨83‹3˜ƒå$âÁ¿†bÉ×퓈üæñ#{ÙÝ%yˆ·ˆç wj&R¤5ûU îSPû8k¸åëA—U¶Ü‘j8g²•„ò-š#¹ {“N‰fÙ~Zîâ&bÅMˈêeW=7­å舑7°mÜ$\Å [P¤=}Õ6Œ ´H¡Î«÷é[õ-’òêê Y·O’1Q§Ãâ!>ëa99¨÷‹ÙUÔ±Džæ›|© 3r^CE{%ï¢\¼Å…‘¹ D¯*l¸^’äí9xQÙÛ PqÙ °a÷]X$Qñ@Ÿ‹*PZ‘\YÊÙÙ]ÜnKîòûrY”óöBr?›tß¶âÆ {w~œÅˆ•‰ÚwFÒ=#çg z"ZÐV¶QÞ¶œUܹèêEs¬HÒE%¼ÝYA[³¢¢áŽ@ß…+iŸH+ò@syDz%G„¿ã‚Tp_*néæþ>,î«SÐ-8]Çý"’hÃS÷IŒ+_¾ò\47— È´ˆ\Gªq+k¨à.·<’¾‚¼¦Aq'º]/{ iÈ..á>r±wa.ú+~Â(Û¬³/Ö— ~è¹)L»e?×ê ‹IEAc’Rh¨\ô!Ù½äÞ î$ÊïáônÁ :TEq›€«Å¶ƒ_`¡ EÄh€ÝmÄP,»^É‘¹ß5£ÕvG„ÃÊÒQ+…òÈã\m<×ä:‰™ÜF(£§ €e–ºY!È—ަ2pì±ôñ1ç7Q½7¢E v­i»Ú,†åÉ­>{v~T R0`ŠDuk?‰Wª¢¯ÅeðQrsý\z|æU$†Ç¯ÁØø•ú,ßPon¦uo¡ÑÞû(æ© (ÌŸÃRöYøKrz¨^ƒ±©ôÛµº{kÝ”H‘ÀG )«-…¨C5“xnŒyoÐ'‚;ÑôòÆÔøwÉ­–W· shgy­ãË×Ö+ðZNs› ¯ÌÍé²ÈXúiø†×Ö‡X¸=?ZNÇãÆ)&šÙá[r'ÇŠ©žà£ó˜öóG pÛð—Ê=jpü÷QÃè¾ìÜG pÛ0:¬ùƒû˜aü|“ß'÷¸†áï”{4üÁýmÃÜß6üÁýmÃÜß6üÁýmÃÜß6üÁýmÃ_,÷ÿ16ÍdTg±CIEND®B`‚leptonica-1.70/prog/pixcomp_reg.c0000644000175000017500000001733212265245701015146 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixcomp_reg.c * * Regression test for compressed pix and compressed pix arrays * in memory. * * Most of the functions tested here require the ability to write * a pix to a compressed string in memory, and conversely to * read a compressed image string from memory to generate a pix. * The gnu runtime provides fmemopen() and open_memstream(). If * these are not available, we work around this by writing data * to a temp file. */ #include #include "allheaders.h" LEPT_DLL extern const char *ImageFileFormatExtensions[]; static void get_format_data(l_int32 i, l_uint8 *data, size_t size); #define DO_PNG 1 /* set to 0 for valgrind to remove most png errors */ int main(int argc, char **argv) { l_int32 i, n; BOX *box; PIX *pix, *pixs, *pixd, *pixd2; PIXA *pixad, *pixa1, *pixa2, *pixa3; PIXC *pixc; PIXAC *pixac, *pixac1, *pixac2; static char mainName[] = "pixcomp_reg"; pixad = pixaCreate(0); /* --- Read in the images --- */ pixac = pixacompCreate(1); pixs = pixRead("marge.jpg"); pixc = pixcompCreateFromPix(pixs, IFF_JFIF_JPEG); pixd = pixCreateFromPixcomp(pixc); pixSaveTiledOutline(pixd, pixad, 1, 1, 30, 2, 32); pixDestroy(&pixd); pixcompDestroy(&pixc); pixacompAddPix(pixac, pixs, IFF_DEFAULT); pixDestroy(&pixs); pix = pixRead("feyn.tif"); pixs = pixScaleToGray6(pix); pixc = pixcompCreateFromPix(pixs, IFF_JFIF_JPEG); pixd = pixCreateFromPixcomp(pixc); pixSaveTiledOutline(pixd, pixad, 1.0, 0, 30, 2, 32); pixDestroy(&pixd); pixcompDestroy(&pixc); pixacompAddPix(pixac, pixs, IFF_DEFAULT); pixDestroy(&pixs); box = boxCreate(1144, 611, 690, 180); pixs = pixClipRectangle(pix, box, NULL); pixc = pixcompCreateFromPix(pixs, IFF_TIFF_G4); pixd = pixCreateFromPixcomp(pixc); pixSaveTiledOutline(pixd, pixad, 1.0, 0, 30, 2, 32); pixDestroy(&pixd); pixcompDestroy(&pixc); pixacompAddPix(pixac, pixs, IFF_DEFAULT); pixDestroy(&pixs); boxDestroy(&box); pixDestroy(&pix); #if DO_PNG pixs = pixRead("weasel4.11c.png"); pixc = pixcompCreateFromPix(pixs, IFF_PNG); pixd = pixCreateFromPixcomp(pixc); pixSaveTiledOutline(pixd, pixad, 1.0, 0, 30, 2, 32); pixDestroy(&pixd); pixcompDestroy(&pixc); pixacompAddPix(pixac, pixs, IFF_DEFAULT); pixDestroy(&pixs); #endif /* --- Retrieve to pix --- */ n = pixacompGetCount(pixac); for (i = 0; i < n; i++) { pixs = pixacompGetPix(pixac, i); pixSaveTiledOutline(pixs, pixad, 1.0, i == 0 ? 1 : 0, 30, 2, 32); pixDestroy(&pixs); } /* --- Retrieve to pixa --- */ pixa1 = pixaCreateFromPixacomp(pixac, L_CLONE); for (i = 0; i < n; i++) { pixs = pixaGetPix(pixa1, i, L_CLONE); pixSaveTiledOutline(pixs, pixad, 1.0, i == 0 ? 1 : 0, 30, 2, 32); pixDestroy(&pixs); } /* --- Do (pixa <==> pixac) conversions --- */ pixaWrite("/tmp/junkpixa1.pa", pixa1); pixac1 = pixacompCreateFromPixa(pixa1, IFF_DEFAULT, L_CLONE); pixa2 = pixaCreateFromPixacomp(pixac1, L_CLONE); pixaWrite("/tmp/junkpixa2.pa", pixa2); pixac2 = pixacompCreateFromPixa(pixa2, IFF_DEFAULT, L_CLONE); pixa3 = pixaCreateFromPixacomp(pixac2, L_CLONE); pixaWrite("/tmp/junkpixa3.pa", pixa3); /* --- Extract formatting info from compressed strings --- */ for (i = 0; i < n; i++) { pixc = pixacompGetPixcomp(pixac1, i); get_format_data(i, pixc->data, pixc->size); } /* --- Display results --- */ pixd = pixaDisplay(pixad, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/junkcomp.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixad); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixacompDestroy(&pixac); pixacompDestroy(&pixac1); pixacompDestroy(&pixac2); /* --- Read all the 'weasel' files and display results --- */ pixac = pixacompCreateFromFiles(".", "weasel", IFF_DEFAULT); fprintf(stderr, "found %d weasel files\n", pixacompGetCount(pixac)); pixcompWriteStreamInfo(stderr, pixac->pixc[7], NULL); pixd = pixacompDisplayTiledAndScaled(pixac, 32, 100, 8, 0, 15, 2); pixWrite("/tmp/junkweasel.jpg", pixd, IFF_JFIF_JPEG); pixDisplay(pixd, 100, 100); pixacompDestroy(&pixac); pixDestroy(&pixd); /* --- Use serialized I/O on the pixacomp --- */ pixac = pixacompCreateFromFiles(".", "hardlight", IFF_DEFAULT); fprintf(stderr, "found %d jpg files\n", pixacompGetCount(pixac)); pixd = pixacompDisplayTiledAndScaled(pixac, 32, 200, 6, 0, 15, 2); pixWrite("/tmp/junkhardlight.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 300); pixacompWrite("/tmp/junkpixac1.pa", pixac); pixac2 = pixacompRead("/tmp/junkpixac1.pa"); pixacompWrite("/tmp/junkpixac2.pa", pixac2); pixd2 = pixacompDisplayTiledAndScaled(pixac2, 32, 1200, 4, 0, 30, 2); pixDisplay(pixd2, 500, 300); pixacompWriteStreamInfo(stderr, pixac2, NULL); pixacompDestroy(&pixac); pixacompDestroy(&pixac2); pixDestroy(&pixd); pixDestroy(&pixd2); /* --- Read all the 'tif' files and display results --- */ pixac = pixacompCreateFromFiles(".", ".tif", IFF_DEFAULT); fprintf(stderr, "found %d tiff files\n", pixacompGetCount(pixac)); pixcompWriteStreamInfo(stderr, pixac->pixc[0], NULL); pixd = pixacompDisplayTiledAndScaled(pixac, 32, 200, 6, 0, 15, 2); pixWrite("/tmp/junktiffs.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 500); pixacompDestroy(&pixac); pixDestroy(&pixd); return 0; } static void get_format_data(l_int32 i, l_uint8 *data, size_t size) { l_int32 ret, format, w, h, d, bps, spp, iscmap; ret = pixReadHeaderMem(data, size, &format, &w, &h, &bps, &spp, &iscmap); d = bps * spp; if (d == 24) d = 32; if (ret) fprintf(stderr, "Error: couldn't read data: size = %d\n", (l_int32)size); else fprintf(stderr, "Format data for image %d:\n" " format: %s, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", i, ImageFileFormatExtensions[format], w, h, d, bps, spp, iscmap); return; } leptonica-1.70/prog/recog/0000755000175000017500000000000012254515413013555 5ustar dandanleptonica-1.70/prog/recog/sets/0000755000175000017500000000000012266537064014544 5ustar dandanleptonica-1.70/prog/recog/sets/test06.pa0000444000175000017500000024135112266536775016227 0ustar dandan Pixa Version 2 Number of pix = 202 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment9Ö/VIDAT™=ͱ €0 DÑ벆GËô¬•T¬áˆ‚# c'‚âI¿9Ìa¿ëÉXdHš‘äC¿YÐUïÆ!‚NSw‡ŒÍ·Õe”‡Qmháè/î> r%}ÄIEND®B`‚ pix[1]: xres = 300, yres = 300 ‰PNG  IHDR'LñéX pHYs.#.#x¥?v tEXtComment17EˆQIDAT™eËÁ €0 @Ã5º £ÑN†…xæÅ4¨‘ú9Y– +¤Aë@û4¬P»›[}iþß3¹»–Ôc(Égòžì=·!ŒLRì/¨gj\z‘IEND®B`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR*¹bè pHYs.#.#x¥?v tEXtComment20ðAèƒIDAT™5ϱ 1P¢À#x”ËdñuWf„¬‚äÂkØòDi®ˆ ¬Ð¼ŠÏ‡Ì‡Év“ N›OP­50, ÐRR²0½œ;mòpèæ‹è¯Ã=¨#°ºh‹S³€设®E“cz9‡i‚7î{Ð&ÓTô¤›õ¶õƒÙUøýPyMK‹{IEND®B`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR'9HS pHYs.#.#x¥?v tEXtComment22OeĆIDAT™EÄM ‚P†Ñ×él'µ±èÞ jØZJZƒ–Ñß ©&„Ðí{ :ƒ#ÀLí+t?à.°Ò¶Rüvxí†ãf¾ñŠšYê¥ai©º"éVc‰X`™X ‘&bLo²)­)8:ÓÛà©×÷‡ºW{Ø«’)‘VþÇAÙW³`24}¹IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment61ã*ñz_IDATH‰cø40ÐHÖŸì?ÚÉÊS ËO¾ìŸQYâeÙñÉþÀ«—v²´ó/%é ŠýOIj§™,~WÅ›»iX^ÊÙý¤ šÉþ«§ÀGxõÒ°‚²ãG¯#¿.jê1IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment59ÆÜ*‹_IDATH‰cø40ÐHÖŸì?ÚÉÊS ËO¾ìŸQYâeÙñÉþÀ«—v²´ó/%é ŠýOIj§™,~WÅ›»iX^ÊÙý¤ šÉþ«§ÀGxõÒ°‚²ãG¯#¿.jê1IEND®B`‚ pix[6]: xres = 300, yres = 300 ‰PNG  IHDR( HÖ­ pHYs.#.#x¥?v tEXtComment62z# ÀIDAT™ÎÁ Ã0 Ðotð1#d“j•ŽÐ âкJC& YÀ&„UÙ:<þáó¬,XIh°ï EZ'È‹§ˆR˜3jy¤ŒÓÝq”Å\mž³iÒr75¡Å<íMX%µˆMX§áŒ¬,@“Q¾ ø¯çXC1Ÿ ·¦×†%_°ã†Ag^·ûè)=­©xÈ©îUV¦:ª”#8újìšZüÍ®5IEND®B`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR=|}øy pHYs.#.#x¥?v tEXtComment1151ÍøIDAT•Ï!„0 п ¶®×¨Øƒ¡€c!q\£Ü ¸ˆNþR:ƒÛ¨7™äOzf’+’gš ‡Åá…¥`„xÆ™A¾Á7Ò }:jú 6£“3díëVñ?D LSC͉ êìÂ#ÈpA6Ã)c¢ã!ˆ¸>Ý´’Ò§r³îùIEND®B`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR< f“&? pHYs.#.#x¥?v tEXtComment116¨ÄÞB‰IDAT•}нà `yw)YÁd•Œ@™r™ Á&°Ü©àxáGváÜEÕ×¼'cv¦â`)9,mä;êsUÈJìðBi‡ù—­#cOä "҉϶ Ñx˜=±A›CÛ;è‚ôšâ‰0.ä;¼“oàMyX¢›xS¦ù÷ðdyÄÒXŽ IEND®B`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR:! Ñ…Ý pHYs.#.#x¥?v tEXtComment1198{ÃÓˆIDAT•}Ð1 B1 à€CáQê±Þd†7¼Ñ+õáÐk¼â".¤¿MDPì’$”$„ñ‰#ihûÆ ·¬x\Т䫢,’h–ÔÃ@øòž/ˆaÈ8{© ÌÉ2m²QÿÀæY߸w°¡ïµÃÚ7¥(ÄŽX\Q8ÑëÕÑÏò]öÊãA…úÓIEND®B`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDR<“¿“G pHYs.#.#x¥?v tEXtComment125àÜ;ŸIDAT•EлÂ0 `å\¸‹3^!x¥”)rÀHŒÀ¬à ¸T!$ô'øPõ¬×™ìŒݳYÑq"ʦYi$þ¤`@¨%ÈA  )¨rB²ŒQbÇб.(¾$Y}`1OÊpù(íf@¶jvföŽw‡ýÁõ hyÕ íJ©nîqøŠ–ØÁ3ÕàØy¡ç TZmt|‡$µ/’€š|Ó-IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment131–)cWIDATH‰íÓ±JÄ@à‡\§`-CDæ•´S,V°Ðî!/"Üui„}„R¤3‰)’à¸ãl6{ÙÜÁ*C&ù˜ÛÿvsýROÁß4T‚øâÚÌÍEÀ •§ðLj=Qþ°ŠªÖmM¸jªYe´Cái)â^‰*ž¦$+Óeä랢ÚtùŒn «;OohÈ25ÕƒÍ2«w8n•8Ö®ÆÕœrÖö¢¢c­ó­~O•Až—ʆ¦©ê*.Y›!´§kÖ·[OwïZÓn<…ר¬+ø,S)Zy©Ôù*¶™c?óçZZ•ýêÛPÚ-Šf¤Ý+pU uÃCá¨ÒªßèèÕQôÕÙI4ë¢0/¾)FVc5#øHɨ|˜Ñ—þØñÊ]W‡D’-È33{MIá*Ï'ûpù› ïí“wJEÿÍ·̨_‹.ºè¢ÿª?â·2pˆ’IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment129VWIDATH‰íÓ±JÄ@à‡\§`-CDæ•´S,V°Ðî!/"Üui„}„R¤3‰)’à¸ãl6{ÙÜÁ*C&ù˜ÛÿvsýROÁß4T‚øâÚÌÍEÀ •§ðLj=Qþ°ŠªÖmM¸jªYe´Cái)â^‰*ž¦$+Óeä랢ÚtùŒn «;OohÈ25ÕƒÍ2«w8n•8Ö®ÆÕœrÖö¢¢c­ó­~O•Až—ʆ¦©ê*.Y›!´§kÖ·[OwïZÓn<…ר¬+ø,S)Zy©Ôù*¶™c?óçZZ•ýêÛPÚ-Šf¤Ý+pU uÃCá¨ÒªßèèÕQôÕÙI4ë¢0/¾)FVc5#øHɨ|˜Ñ—þØñÊ]W‡D’-È33{MIá*Ï'ûpù› ïí“wJEÿÍ·̨_‹.ºè¢ÿª?â·2pˆ’IEND®B`‚ pix[19]: xres = 300, yres = 300 ‰PNG  IHDR: kVx pHYs.#.#x¥?v tEXtComment131–)c’IDAT•EÏÁ Ã0PªrôŒâNÖ$Ê!ct¬’dƒJ½p°ü ±rá „¾ lð*ŒOÄWH ŒCˆ C¹9Êxϼ8”sX0 eÃüGr[À«kGhÐØ Ɔ [êWö©¡…÷ž~ThCp¤Šó\ƒÆ7Ä0ä¸`²wèÉèá  Ö&q¶ <ÊR~•§3Xlú!IEND®B`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDR;qcˆ> pHYs.#.#x¥?v tEXtComment137íõŒV“IDAT•]ϱ Ã0 @)Tjf®’I¢*²– d)¢BàG4¥Æ_]óÒ¡Ù\¡Ž¬(®…pYÁb˜Y¢Ïîê W ¿‹BÈå¦`ÿ“6Ø–ªPÈ@eìæ8@xx|¬õÄjH+’a9¡ò‚‹aHÑ@9´/´õ˜$…›ÐÞo¨Ð{°ý¹Þ¦A’¾ øIEND®B`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR<“¿“G pHYs.#.#x¥?v tEXtComment151RÌŽå‹IDAT•eб 1 PŸ((3‚W`oF"¥¸’…EÖqi¤ÈÆ—‹AW¯ù–¿ÁŽaP²¶Zc`²r¶ÊP‰O àÀî¸;HB¶™9:íéê/ZàF)M` ¯‘ªg`ÀýCq¢ãŒËÇfu%§ýTÁžQ†GÒ+y=(‹©í¿xÙå p<­/ÚßEIEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment153¼ÂïɧIDATH‰íÑ» 1 `GW¤ÌYÉk!%c°J¤+®A0'±T\qŠqRÿ¡¦°ÛO~“üˆL¦¦¦¦¦¦ÿ¢—·Tƺ:!’×4Pªª…žm¹¹¡VJ«¿9<¥kØA㦙wÕ:ÐÒU &)±ëy ag ²`½zÕVg¤Qn“æz·Ruªn¤wR¥øÁºä¦àªºJ>qk9°~0ý'" Ýk—›IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment147¢´‘§IDATH‰íÑ» 1 `GW¤ÌYÉk!%c°J¤+®A0'±T\qŠqRÿ¡¦°ÛO~“üˆL¦¦¦¦¦¦ÿ¢—·Tƺ:!’×4Pªª…žm¹¹¡VJ«¿9<¥kØA㦙wÕ:ÐÒU &)±ëy ag ²`½zÕVg¤Qn“æz·Ruªn¤wR¥øÁºä¦àªºJ>qk9°~0ý'" Ýk—›IEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment154"¦zjµIDATH‰U•ÁnÛF†—fáU#DOu7›¢‡\S 1¥¹õªÂ‡(€í¥àƒR´€¯=У˜ºå ´YÕ¥@ÖQ®Ð%ÿÎ %*åA‚öÓìþóïÌP)M²óV©o~Rf 1s‰K¦^ ¡U¦ˆB½ƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%àOL ×@ ² î™97å¿àÐÄaÓÓ[^$­qWåÑGºµ ¶ôLÙò…öé ц豵~öBÕ¹Ž<6ˆá|¸ g#¦­fztJ4{Ü5Jë94èL¨[Ï‘9TÁÙŠè è뎞úï ’`6Þ§vOb¡Q{l¦4¼Of@½£QG›òd^cý)½ƒíRº#Æ!Aí“yºAƒkXNxHF¿«*Œ} Œ’âšb}@ÑQ¯T2®fKô"AÄô™E»£z|7G…)pÎô˜ÐJÅÙ]AFM(Gѳi™¶)Ñ3–5œ"0]2®+²Wt¨zLtAT]ÒÚª„&º Yço J‚èŠnž€é_BuŽ‚þvÂ)VDô€é+ýn3§ƒ‰ê˜6”Ö¢ºÖc·¢{ù HjÌࢪ©kLµŒ‰Æ_6Td’W‘xÝ3rrõGl`JîçZÒþh”:¤ø—”;YײQ9¶ÕÝq°DÙj8þ Vÿ£ {#Ô ì¤:Pñͪ}Þ¦6œPžuZð}Õ7u{:J­{ù®Ø‹Ž*eˆR7¡Ô´ÖPI¢NLdgª6¦)ÁL¬¸ÁXT 8É–B'È þ¢øL‰+ãmP÷IÏÛŽf±7ž7]ÛŠÝïtÕïyçø­ŠÜËRñBó7QË­G_KÍ2zõ¦¤*ªQ»£%c(6SAmªŽŽìzÚe̱‰L•ù% ß ¢NzY.‹(ÏœT”OeW~>ô”ê?Wܳµíã˜läËŽ’I«TrqN˜^"ÚdŠ¥Ö· I ]p—Oxç+“ÝÏcþµ=ô%EÏv±WI®ßë¡é‚«Ãv4ª[ ]ÐÂÂ[*SsKê¤'h6cƒ-ås/4ŒŠç5ÃÍV_´Ð‘Î4X3Ù´špkÎÛwt¨U"”v]ÎdK¿ß™è‘;ó—Z>Ù½–ã¥êˆ>`óçæ·ì•ÛÇ&5Іª)ˆÖ´ÙS’4Ð!ÅÁwÞÓêXó¯Mn¢Å'4N]èãFènÑÓ)2‹qÍÓª £ô7¢~º£ÔLç<¯¿nG$þáÛ%×R\Ϲý¾ÃPsFíž.ÚCÝWŒ7»§æ}{Ë šŠgý¹&¿:ŠûØ`£),¢ ÑÔÓ’¼0Â=ïÌ‚®+ï葲'ÖÓ¿Å‚öÞÚô^E4ÇÝö%„÷Öá{:`Áî’ç7ßq$ë×;zl„þz†Çýú¬§éŒŒm|3Ã0•aW^häl4õ§´ïL¬èž"øK¡eªNF‘Ððe?6|+ôóò@hÃg…zç©ïÎ}îœöt ›­ª7îÑ™ºˆüO¤¢‰ŽÊ¥Bìvj%’kë_¦Ï¸fƒvøäiøÆ¨.³ÿ³™æ´áOÄIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1482 µIDATH‰U•ÁnÛF†—fáU#DOu7›¢‡\S 1¥¹õªÂ‡(€í¥àƒR´€¯=У˜ºå ´YÕ¥@ÖQ®Ð%ÿÎ %*åA‚öÓìþóïÌP)M²óV©o~Rf 1s‰K¦^ ¡U¦ˆB½ƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%àOL ×@ ² î™97å¿àÐÄaÓÓ[^$­qWåÑGºµ ¶ôLÙò…öé ц豵~öBÕ¹Ž<6ˆá|¸ g#¦­fztJ4{Ü5Jë94èL¨[Ï‘9TÁÙŠè è뎞úï ’`6Þ§vOb¡Q{l¦4¼Of@½£QG›òd^cý)½ƒíRº#Æ!Aí“yºAƒkXNxHF¿«*Œ} Œ’âšb}@ÑQ¯T2®fKô"AÄô™E»£z|7G…)pÎô˜ÐJÅÙ]AFM(Gѳi™¶)Ñ3–5œ"0]2®+²Wt¨zLtAT]ÒÚª„&º Yço J‚èŠnž€é_BuŽ‚þvÂ)VDô€é+ýn3§ƒ‰ê˜6”Ö¢ºÖc·¢{ù HjÌࢪ©kLµŒ‰Æ_6Td’W‘xÝ3rrõGl`JîçZÒþh”:¤ø—”;YײQ9¶ÕÝq°DÙj8þ Vÿ£ {#Ô ì¤:Pñͪ}Þ¦6œPžuZð}Õ7u{:J­{ù®Ø‹Ž*eˆR7¡Ô´ÖPI¢NLdgª6¦)ÁL¬¸ÁXT 8É–B'È þ¢øL‰+ãmP÷IÏÛŽf±7ž7]ÛŠÝïtÕïyçø­ŠÜËRñBó7QË­G_KÍ2zõ¦¤*ªQ»£%c(6SAmªŽŽìzÚe̱‰L•ù% ß ¢NzY.‹(ÏœT”OeW~>ô”ê?Wܳµíã˜läËŽ’I«TrqN˜^"ÚdŠ¥Ö· I ]p—Oxç+“ÝÏcþµ=ô%EÏv±WI®ßë¡é‚«Ãv4ª[ ]ÐÂÂ[*SsKê¤'h6cƒ-ås/4ŒŠç5ÃÍV_´Ð‘Î4X3Ù´špkÎÛwt¨U"”v]ÎdK¿ß™è‘;ó—Z>Ù½–ã¥êˆ>`óçæ·ì•ÛÇ&5Іª)ˆÖ´ÙS’4Ð!ÅÁwÞÓêXó¯Mn¢Å'4N]èãFènÑÓ)2‹qÍÓª £ô7¢~º£ÔLç<¯¿nG$þáÛ%×R\Ϲý¾ÃPsFíž.ÚCÝWŒ7»§æ}{Ë šŠgý¹&¿:ŠûØ`£),¢ ÑÔÓ’¼0Â=ïÌ‚®+ï葲'ÖÓ¿Å‚öÞÚô^E4ÇÝö%„÷Öá{:`Áî’ç7ßq$ë×;zl„þz†Çýú¬§éŒŒm|3Ã0•aW^häl4õ§´ïL¬èž"øK¡eªNF‘Ððe?6|+ôóò@hÃg…zç©ïÎ}îœöt ›­ª7îÑ™ºˆüO¤¢‰ŽÊ¥Bìvj%’kë_¦Ï¸fƒvøäiøÆ¨.³ÿ³™æ´áOÄIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment155U¡Jü IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment149E 7– IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment156̨F(IDATH‰]Õ½nãFॄ p6[²ÖÁnêRZäM¤H Å5‚—ÁB€ |$|”£¡B½@r¤À‚eVQÁ°ÚÉÌ,tGÀ?âçágf×BQÇ) €ÜWÐÁ¶Vgˆbÿ¢ÝìQµ×¨@_A7/ [趆¼Ð†‹õÛæ Í$tFç ýžå<¨„¿v>-qe«~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzs¡ ™ä^:…Úu¬1À‰}™$9¨^¶xÏß×)¯{ÊD-„Š“¨.%ý;®%§‘u“àG/éÉô¼Èð+{T‹Ú¬1SŽÉ¢# úoFå˜2 •ò·™˜£nòBMÁ)Vñ«“¬"Þê,«÷A5ëCœç¬†´…—© ¨?Æë\UÝ®áØÍØ"ÒÈ>$ë\° ±û î NˆyÂj%)ål9qíœFQ%×Å© $«£vÜ%SX iç{ýÎA«Ô_Ó$9ú†Ž•:hQÁΰˆ{VÐGXÁj¥X½Ð…¶%FÔ3ZÞh˜+Dv‘Úgj:¸`f»çK508ÅNÔ¢¦W¼eÓ§Õ…rŒªÀ¤£þq¡¼SRu€ ¸è?S•½"ý,nà»Ðñu9ÆQâEM‡<×`“ó ÔýH\ÿ÷º‰ð}i_GîNNT^û¸ød}XçÃ-¢¼¥uo}|œÕ¶è/+I}"¡O›*(.Wœ•+Ô_©&І 'v »Ìy)}Ä?÷ùB#·L%%Œ/Åú!rS"§®°¹p0ØŽ%þÕï©{;è6ðJÒkâD’j¬·S¬™ å(g õª?‘z­gBù˜Õ?Ýr9Ž£~YöJ™êˆ«A¿ÀØ7«¸OóšÇ ~†ÉP{ÒfÒ6q†«U| ÷ sô ë9£©«B®øv›Q_-Uv7ÿ™µ¥Ä!…çIc™e˜œwPk¯zÔÕœ,Ýô÷Í…ϧpá4ìaR¼_Ržp…½Ú*4 —…Ϙž‚mPƒ‘?³EÅS±ê5õ¯ä¨Fµ'ÀóxXõf¬ÜÉöÀ'j¯*ñ =TÇ ÙÎtœº¾’ÉŸ m²ø¥³¦r¹þÿÝÚ¨Bu\(É/»;YTÄŒŽî=Tª9¥¯ N©e87ÖjŠfBVqéSÚ|Ãñ©Âf9Lº¦ó„Õ? %CáXo¢A[Néý…Ö•¸¥ƒÎ?ž¢?¡Æ&êèÐ+FWC µø<±QÛß™¶7Ÿ¢]6©‹.£Âõš×ͱÅysî·¶ô«Iñ™ÛObïƒ.ÄLõ__¨¢³=.ñ\‰ûØýÇá™Hjq÷$dȪþTS#´eíHõÇjÅ£öƒªIq¥ìÈ 3–kY«IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment150%˾s(IDATH‰]Õ½nãFॄ p6[²ÖÁnêRZäM¤H Å5‚—ÁB€ |$|”£¡B½@r¤À‚eVQÁ°ÚÉÌ,tGÀ?âçágf×BQÇ) €ÜWÐÁ¶Vgˆbÿ¢ÝìQµ×¨@_A7/ [趆¼Ð†‹õÛæ Í$tFç ýžå<¨„¿v>-qe«~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzs¡ ™ä^:…Úu¬1À‰}™$9¨^¶xÏß×)¯{ÊD-„Š“¨.%ý;®%§‘u“àG/éÉô¼Èð+{T‹Ú¬1SŽÉ¢# úoFå˜2 •ò·™˜£nòBMÁ)Vñ«“¬"Þê,«÷A5ëCœç¬†´…—© ¨?Æë\UÝ®áØÍØ"ÒÈ>$ë\° ±û î NˆyÂj%)ål9qíœFQ%×Å© $«£vÜ%SX iç{ýÎA«Ô_Ó$9ú†Ž•:hQÁΰˆ{VÐGXÁj¥X½Ð…¶%FÔ3ZÞh˜+Dv‘Úgj:¸`f»çK508ÅNÔ¢¦W¼eÓ§Õ…rŒªÀ¤£þq¡¼SRu€ ¸è?S•½"ý,nà»Ðñu9ÆQâEM‡<×`“ó ÔýH\ÿ÷º‰ð}i_GîNNT^û¸ød}XçÃ-¢¼¥uo}|œÕ¶è/+I}"¡O›*(.Wœ•+Ô_©&І 'v »Ìy)}Ä?÷ùB#·L%%Œ/Åú!rS"§®°¹p0ØŽ%þÕï©{;è6ðJÒkâD’j¬·S¬™ å(g õª?‘z­gBù˜Õ?Ýr9Ž£~YöJ™êˆ«A¿ÀØ7«¸OóšÇ ~†ÉP{ÒfÒ6q†«U| ÷ sô ë9£©«B®øv›Q_-Uv7ÿ™µ¥Ä!…çIc™e˜œwPk¯zÔÕœ,Ýô÷Í…ϧpá4ìaR¼_Ržp…½Ú*4 —…Ϙž‚mPƒ‘?³EÅS±ê5õ¯ä¨Fµ'ÀóxXõf¬ÜÉöÀ'j¯*ñ =TÇ ÙÎtœº¾’ÉŸ m²ø¥³¦r¹þÿÝÚ¨Bu\(É/»;YTÄŒŽî=Tª9¥¯ N©e87ÖjŠfBVqéSÚ|Ãñ©Âf9Lº¦ó„Õ? %CáXo¢A[Néý…Ö•¸¥ƒÎ?ž¢?¡Æ&êèÐ+FWC µø<±QÛß™¶7Ÿ¢]6©‹.£Âõš×ͱÅysî·¶ô«Iñ™ÛObïƒ.ÄLõ__¨¢³=.ñ\‰ûØýÇá™Hjq÷$dȪþTS#´eíHõÇjÅ£öƒªIq¥ìÈ 3–kY«IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment157»¯+Ð IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment151RÌŽå IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment158+6A IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment152ËÅß_ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#x¥?v tEXtComment153¼ÂïɨIDAT•eÐ1 Ã0 PA p`ÐELBïeC {„\Å!èQ ]4«² ]ªé ú!$A9Ž  J>ñÕCj 8(Z:M#5ÿ^ Yå´ŠƒÁ Å†× Ù°ÝlgÛ«ïñ½.ç‘À ©ƒ:0ÓÚÀn/óÖ‡á(ÖÃø,¢Ç;žUïK\ˆG ÒMÒªGƒ}Eñ(B °ÉX+€IEND®B`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR>—JCz pHYs.#.#x¥?v tEXtComment154"¦zj IDAT•UÐ1Â0 P•² ²²ù"Há`M•ƒpÂÄÈ‚¸@Ç Ü|Ü4*yx’õ-}€ç Y¨0¼ÁÔÓT‘zò »DÅ€(”#î€ßã¶td޶\6%U83+Ä•!|+€ðÛñ“êA„GêVÄD q ™ê*³Á[j*;Ûpµˆý‚³éÈ[9¹…äé7´äB¤öP,uIEND®B`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR=!B ž¤ pHYs.#.#x¥?v tEXtComment155U¡Jü±IDAT•mÐ!ƒP à.pÏâz Ä»Ò$ba/A0Ǹ /ˆÉ]aGxs/íZØÉjú¥ùÓ4Ù‹`ïå%>*x¡,¥! E  @†Æ&‹ç‚€ÂnÃSØdÔ5Œ?œ6h:Ã:sÝƉϵa…+Ã<|!«¦ˆÿA†ÜoÀH­]L­e²Ro 3éºcL¹ÖLöe"…cïèÒA(Äc‚p’ùf7¿oú¨7«ä‘[(IEND®B`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDR<Xã@â pHYs.#.#x¥?v tEXtComment157»¯+ЗIDAT•eÏÁ B1Ð <Æ„mÁ LKv%‡-ÁF °+0âÁ|X2fó£ˆò0$§›Ì‰ˆ±¶™:Ò/8ÑŒ²ÃÑ+„ÜËbÄcÄOY)ÐÁÈ ±"‘8l-RÃ.v® ø`ƒóáEqÂA‘9Ã4¸¨HœýTw°xÖ†LY:=&ƒ½ÓÏuÃP“^ i˜P1ÿ’†IEND®B`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#x¥?v tEXtComment158+6A®IDAT•MÐ1 Ã0 PA YL½vø"\«C¨ -ä=LBJ§B¯àÜ Ù<ÿÚrSªé!}„¡4Æ #S¸–V5äj>)á‹’‘ 8ä0ð‡ÛVÀ]èT†7Á4OŽmÆ{`ê%š’vȵb(ôöÔÕÞTP«&Ð1_C§¶Ä/­/ìÔX£û1•hÝvê€FÕB—h³é<íkiT8tj)¡Mû*V†ª“©Q3ÓÙPÕk¶TÁß:›ê-C‹&Ôç¨ S¡F¡["¬aÉÔð±Î¦vX³ –>MÝjዪ w£ y<w&Òg§ÖȨ¸~=oq~¦oü=ôÐÖ’½Ÿ‚œXSÚ´' énpE1°5Q ’´d ¶åƒW3¶Èô'¶Šµ^ÍÃptø;QIp ÊfåLQ­¹­³ÌÔIEND®B`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDR<Xã@â pHYs.#.#x¥?v tEXtComment173ŽôK›IDAT•Eϱ ƒ@ Ð1Ù€Øà”Ø¢L†((³'Š´Fi®pø±ï é^aC{ò¹_)쨊Z†èêmi Vi±CLWHЦq$[çòG[ð9AÉPƒˆ~ËqÏHTtŽÚåáH-‘ÔàXÉ><ñ}"ž FŽzà¡^Õ0¥³ œÅ¬<Њ _äM¾_°ª6Xy•FIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment175g—(~ªIDATH‰íÑ1à PG Œ\ 7)«D·^‹N\ƒÞ€lŽŠòëˆ1¦c&›v“ÖÒâã÷üü}?àƒ•CÇk¦³.tà¿+Ô¤Ÿ°ÿC}N”kÂ}÷w½Õd@$gŽDàà[ÐÔ6$¥çeøÁ=|—AKïsÓÐ=1Dá; Å¿à/ùÑkvøÒDû¶D«ÛŠ6÷¨ ¸¥c…&WÚºøù9ÝC÷™¡…î ’æŽvH!®LŸb”Zœ•réjJÁw»ä+A‚SFðòbYÖt Ð1î/Ü9ûµ¿£GÃEü­<‡yU¨Y²éZÀäK<Ïç÷,#ås’çñ|êsߺG»DßÐ&>¯àt©ÉÚw0%*Þ€èð3£BL&š r?)/I«ÇS ›¨ÎÚEMEô-IÉöã)Ž¿ }Þäa#&yÔþlú;QŠ~kN}N&ñ%’³Š(هñî,hU‚m£$%& r!¢¨Fš‡;3 ˜´½¨$Qò$ª:\€ C·`G¸X˜¡N9’„F' u8ÛãUÉPUò²ÎPŸa¼{éÉ„l‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Ð(7C¯si½Í tMêZçšáÎ ¥.s¼OÉx˶s7’–­~ 4Æ)u]ïÒµ'ÒÂÊè’LKibáêÌ ¨V.Wµg I²/‡$ë•˾9Æ|!%*<«F¥WnpR~L Lx¥Œƒ§&ª†)y”aB ~OMð²Ò5ͨÝ\˜TÙ˜2}¦Ý ¡!ÆDOÓ ±±Õ 0~Üoh:ˆiluyÄf\žÙB«Ÿ×iœ3¢#‡¸Ô³•SºÀ†B¤íN’·°RZi+P(¿p4D“û”4kÃé$Á<̓í‹dçY¤lÖæå©Âɘj§ToÑFJÝ6§¡ñJ”•ª ‹S¢%F+¦‡Ð¥<(œ­ðQ‡7X}Õ4Jp€^.’w§kÜ`•áêŽÒÎ/Ñ,=ÈóÉë-–®ˆírX4ŸLÌÒfòyAŽg»¿ <6a(.žÃÒdêÏ@Ïv•B¼£l+¸¼v ‹Ý§ÿ`QÓ“HYð”ÅõSÄeMGTYŒîX1#oîÖ›Õ·«ý*ªJŽÓY%lME†ËUYDšPE[ef#QJK1íÞ K¶µgIÃÚ)û0‘¯‹xãoÉ žcÈQ7n›8¹e o„]Ô”ê¬Ó™éä¾OžÑhI›f ²•þ:Ré{–ãN?”7½'HC‰×&Œ}ùGžqô¯Fr¹ªi ¯,]¬‚^îi ½V¸>RªÇ] ¤U¯ð|áÊäHe3·¤V5ì)/ö^à&ÐÍÒëÇÇ~Þ> º'¸Ù)³’†MÇòSº1Ñ%¸[GÊ]B{¾o¨&ºß¡­©Eai–=<]âE¥Ã›i°H\#l¨:ö¥;Ä,΂-³Xvf>¹ÄÛzô5åÈ#ý‹],(⢦ü–^äZ\³ ª›@Ã*ƒV”c=u=%ºÃn±Æ¨ÿ ñ-œ…ÜIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment172ùó½ÝÉIDATH‰m•Ï7ÇŸq„9иG*Ñ̤9ôJOå°Åÿ U¹ŽÔC¦Ý1Z)›CþHû§Ô[¤ì¡U÷ÚC¼‹T®&HŴü>›v“ÖÒâã÷üü}?àƒ•CÇk¦³.tà¿+Ô¤Ÿ°ÿC}N”kÂ}÷w½Õd@$gŽDàà[ÐÔ6$¥çeøÁ=|—AKïsÓÐ=1Dá; Å¿à/ùÑkvøÒDû¶D«ÛŠ6÷¨ ¸¥c…&WÚºøù9ÝC÷™¡…î ’æŽvH!®LŸb”Zœ•réjJÁw»ä+A‚SFðòbYÖt Ð1î/Ü9ûµ¿£GÃEü­<‡yU¨Y²éZÀäK<Ïç÷,#ås’çñ|êsߺG»DßÐ&>¯àt©ÉÚw0%*Þ€èð3£BL&š r?)/I«ÇS ›¨ÎÚEMEô-IÉöã)Ž¿ }Þäa#&yÔþlú;QŠ~kN}N&ñ%’³Š(هñî,hU‚m£$%& r!¢¨Fš‡;3 ˜´½¨$Qò$ª:\€ C·`G¸X˜¡N9’„F' u8ÛãUÉPUò²ÎPŸa¼{éÉ„l‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Ð(7C¯si½Í tMêZçšáÎ ¥.s¼OÉx˶s7’–­~ 4Æ)u]ïÒµ'ÒÂÊè’LKibáêÌ ¨V.Wµg I²/‡$ë•˾9Æ|!%*<«F¥WnpR~L Lx¥Œƒ§&ª†)y”aB ~OMð²Ò5ͨÝ\˜TÙ˜2}¦Ý ¡!ÆDOÓ ±±Õ 0~Üoh:ˆiluyÄf\žÙB«Ÿ×iœ3¢#‡¸Ô³•SºÀ†B¤íN’·°RZi+P(¿p4D“û”4kÃé$Á<̓í‹dçY¤lÖæå©Âɘj§ToÑFJÝ6§¡ñJ”•ª ‹S¢%F+¦‡Ð¥<(œ­ðQ‡7X}Õ4Jp€^.’w§kÜ`•áêŽÒÎ/Ñ,=ÈóÉë-–®ˆírX4ŸLÌÒfòyAŽg»¿ <6a(.žÃÒdêÏ@Ïv•B¼£l+¸¼v ‹Ý§ÿ`QÓ“HYð”ÅõSÄeMGTYŒîX1#oîÖ›Õ·«ý*ªJŽÓY%lME†ËUYDšPE[ef#QJK1íÞ K¶µgIÃÚ)û0‘¯‹xãoÉ žcÈQ7n›8¹e o„]Ô”ê¬Ó™éä¾OžÑhI›f ²•þ:Ré{–ãN?”7½'HC‰×&Œ}ùGžqô¯Fr¹ªi ¯,]¬‚^îi ½V¸>RªÇ] ¤U¯ð|áÊäHe3·¤V5ì)/ö^à&ÐÍÒëÇÇ~Þ> º'¸Ù)³’†MÇòSº1Ñ%¸[GÊ]B{¾o¨&ºß¡­©Eai–=<]âE¥Ã›i°H\#l¨:ö¥;Ä,΂-³Xvf>¹ÄÛzô5åÈ#ý‹],(⢦ü–^äZ\³ ª›@Ã*ƒV”c=u=%ºÃn±Æ¨ÿ ñ-œ…ÜIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment179n!dUIDATH‰ÕÔ=nƒ0p$†Ž¨'ðQ8W'gËV.P5çèD¶Ž9‰2d+â(Ưøùl'ÊP†ðãÙp‰¶Êð ÞRÊãzø@åÔ³uKáŽz-µ®QWŸ;[[Új©Å ºvY²ë”’Nª;#‘ÝMgbùê­è,³Ø U 1 ½ÑÊQ5+½1kGa¢ßcíNiáúÕÚ`"ž·zÙ~ÄVgVµ½)j|ÅšR†½¼dR53¥…“y¢õžV!U16ŒÀLksBXÞ…j±‰’“uBA¼D•—ø Ä”ÊþQÀ·+®œ„´ÖG¬uÿÈļwô·díL©sÞ¥kcÏê¿é?ÖÖQá*ö•£î^$õè鬶s¦zÀ³Hæ#ÆŠ­¨Å/&º^áÕ ëá7w”z©ˆÈ½Z«'Ù½‚§cÃíèk¦º¼¯„2÷öÖ°öúɇ×ËpW5:ÝœÏxÃwC,P9r™ÔtíÃÚ/Ðç¥zPÅÓtI*£$zºáH™IEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment173ŽôKIDATH‰ÕÔ=nƒ0p$†Ž¨'ðQ8W'gËV.P5çèD¶Ž9‰2d+â(Ưøùl'ÊP†ðãÙp‰¶Êð ÞRÊãzø@åÔ³uKáŽz-µ®QWŸ;[[Új©Å ºvY²ë”’Nª;#‘ÝMgbùê­è,³Ø U 1 ½ÑÊQ5+½1kGa¢ßcíNiáúÕÚ`"ž·zÙ~ÄVgVµ½)j|ÅšR†½¼dR53¥…“y¢õžV!U16ŒÀLksBXÞ…j±‰’“uBA¼D•—ø Ä”ÊþQÀ·+®œ„´ÖG¬uÿÈļwô·díL©sÞ¥kcÏê¿é?ÖÖQá*ö•£î^$õè鬶s¦zÀ³Hæ#ÆŠ­¨Å/&º^áÕ ëá7w”z©ˆÈ½Z«'Ù½‚§cÃíèk¦º¼¯„2÷öÖ°öúɇ×ËpW5:ÝœÏxÃwC,P9r™ÔtíÃÚ/Ðç¥zPÅÓtI*£$zºáH™IEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment180eÀ> IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment174è IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[54]: xres = 300, yres = 300 ‰PNG  IHDR< f“&? pHYs.#.#x¥?v tEXtComment177‰™IRƒIDAT•eÎÁ 1ЀciÁ,m[˜¶±vðŃBÆÿ?ºî²s™w<Ó"èI«ȉ9TñEGíªØ hŽéöàÑ@>uÇñÚ€3ª£Ÿ(?Üm‹£Œ™A†5¦ Ê5² ‰œ†qmð*ПoûüÑ/³ÿV#äIEND®B`‚ pix[55]: xres = 300, yres = 300 ‰PNG  IHDR= ‰QM pHYs.#.#x¥?v tEXtComment178&TÃIDAT•mΡÂ@Ðiœ«­»ß¨ á—§¸Jþ ?Òݺ%Yn»½- F=1™ JT 3¤U4J=¨-h>ÔaXñæv³ qGÁ~*%ëø:;®tè ªGBr0xE1$‡ v$ ºl>UP&†c*c¾ë†Ç\Ï/&µÏ­aÖÎAÒc€S`ËbÇn- Ck^¼ ßØ ßYIEND®B`‚ pix[56]: xres = 300, yres = 300 ‰PNG  IHDR@!AºŒ pHYs.#.#x¥?v tEXtComment190‰~ñ¤IDAT•]б Â0ÐQ¸¼¼ y%ˆD"ŠŒÁ*‰Rd‹"­;\X÷qWœ^q§Ó}°ÔLäɾ`tÄ j9ˆÂ!XÊ.µKl¥`Ž­ÉHnjÐí8!Ùä&ÏLl~`3ð µ}…TÐ|°Ô¾ü¾NxðZðÈÈGEeõ©À¬!š†kEIEND®B`‚ pix[57]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#x¥?v tEXtComment205*àÃIDAT•5Ï1jÃ@Ð 1¸YP›€a/b¼×J±H6 ¸Ü#ä*.|ºÀw÷!MþÊÉT¯$5‘ÙS"Ëê+ÇŽØa¼°\‰€keùl(•Ý8â[ú8Ñ13šãkÛy—cÚ‡0Î’“ o—úÑpÀTµ!àgl8prä~÷‡Á±wô°v­CGÔ¶ X²'”7<³¦†õ‰ÙÖ¸hò`·ˆã –›ô¡á~—5àRÔÀ‹WÍà–úÙ~Énž|Õ†Ý"IEND®B`‚ pix[58]: xres = 300, yres = 300 ‰PNG  IHDR> bfö pHYs.#.#x¥?v tEXtComment2114æõ¸ŒIDAT•eб 1 Ð #d”,†È!`¥œX$·AN4)¬|œ‹]Ñ=Y–¿õA²GR 0°™›à³s ,ŠBÄÁ»2Çv"Õ9i©EfA¨Q¡Ë‹Xk2ÃV8Áìx:^Ž‹¡ß  ÍQqt»|ˆ!ÃCaËk?+ ¸O®Àr£Ñ~3K´òlž–IEND®B`‚ pix[59]: xres = 300, yres = 300 ‰PNG  IHDR?³Ôûá pHYs.#.#x¥?v tEXtComment219:=}Š£IDAT•Mν Â0à!QÆàMâͰ•"tŒÀ, )YÁR0 ëçü ®¹O¯¸{ȆÙ3â‰É±íðštÌ‘Ñ×â*üL>ùìغþУInŽä‡W„X¢>- ŽV1)Äöà­ö9)Öbób+Ø£¸Ü‘Žð½+vÀR4)æŽ;†ôI¶Å*f#æºpI¾ÿKŸ^¶ëäÙIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment222†Â÷ÁïIDATH‰íÓ1nÃ0 @4ò üF‡ úRÇE•ÀƒG)…Ð/¸ðd(¨b-g%U c`. %’mÄ MaÓOUôµÓÜÌ’<9zI"›õWºIœ/¶@Z8™šA3NM•Tµ÷4ö›’­ÔóŽ2žùàªày>`øŸRÇÏÔPyõõ=(GO5SÈ UWõCÝÌL:54é°j´õK•FW§ïB£7A®9Žƒ§¸ä´îF2µ„I§ë^AÇ@‹…µÏþÒxu”7½™ Uå%eó®/Šõ,žÞclªs«]wÝõAõqÞÞ›þw»ðIEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment218M:MïIDATH‰íÓ1nÃ0 @4ò üF‡ úRÇE•ÀƒG)…Ð/¸ðd(¨b-g%U c`. %’mÄ MaÓOUôµÓÜÌ’<9zI"›õWºIœ/¶@Z8™šA3NM•Tµ÷4ö›’­ÔóŽ2žùàªày>`øŸRÇÏÔPyõõ=(GO5SÈ UWõCÝÌL:54é°j´õK•FW§ïB£7A®9Žƒ§¸ä´îF2µ„I§ë^AÇ@‹…µÏþÒxu”7½™ Uå%eó®/Šõ,žÞclªs«]wÝõAõqÞÞ›þw»ðIEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment223ñÅÇWÎIDATH‰íÓ1!Ð1trç"›ìÍÄÕÂÒ#¹ K¯ 'pìØHø®Ö~*›%„æ…ágAeläÇZbMM±‰8íD‹#ºu¥Qcª»¼W¦m—@µ´ÃÏÎÍqxƒj?NÆÔ÷¦ŽVv½…š¦@+×¥%MõÖUø®4;v¿™ë7)W‹T³Â@5µ¸fNŸgÃöÚˆ×[‚r=?ŠÞ©î¹½P•EÚ«"®¢YœMº¨¨f‰æwÕ÷jrüýïžuÖYgý¾;ñj¨d¨ÝIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment219:=}ŠÎIDATH‰íÓ1!Ð1trç"›ìÍÄÕÂÒ#¹ K¯ 'pìØHø®Ö~*›%„æ…ágAeläÇZbMM±‰8íD‹#ºu¥Qcª»¼W¦m—@µ´ÃÏÎÍqxƒj?NÆÔ÷¦ŽVv½…š¦@+×¥%MõÖUø®4;v¿™ë7)W‹T³Â@5µ¸fNŸgÃöÚˆ×[‚r=?ŠÞ©î¹½P•EÚ«"®¢YœMº¨¨f‰æwÕ÷jrüýïžuÖYgý¾;ñj¨d¨ÝIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment221˦{|IDATH‰íÒ½ € €Q¬,ÜÀµ,Lp7 ×Ð ¤ƒˆ  ÀG¢¡0áÚ—»Ëýˆ1‹‚º’:È~´W Ö  Ú‘_t’ sCFj£ž¨ ©Ô×Uöµ# íkÕ¨[1ÝM”QÜ•Å߸LãÒ´U­Zµêô-C8q“Ñ3zIEND®B`‚ pix[65]: xres = 300, yres = 300 ‰PNG  IHDR?xˆ(D pHYs.#.#x¥?v tEXtComment223ñÅÇWÀIDAT•MÐÁmÃ0 …áˆnõÎ&ÖfV“ñÍ+x”ÚõÙ ©‘\ôUõW².å…ßÀ#)JE…Cîjômø°¨wÆ*6µ® ï&¸gÝVè‚Ý s°½z—pØo˜2† ÒðÑ·f‚‚×X0­˜3¾Õ×ÂÐ16bCŸBÓ@Å-EtÄ´ÒI »ÁŒŠ.å‡ øÄÛQüòá×ïÞ´üÒÏÞ4îГ碗]” ô±­7TùöòŒ)þµ¯?⥧‘IEND®B`‚ pix[66]: xres = 300, yres = 300 ‰PNG  IHDR?xˆ(D pHYs.#.#x¥?v tEXtComment229.I½IDAT•MÏ1N1Ðo¬àr/€²Ye®EÖ+…®äˆ‹q§saÍg̦H÷~1úÐ IEñÌ¢¢ÈŽiî†k&B—Ol%C“g|Ôuö¡žd«òdXâyÀÕeúêâ Ü‘ÊiGΫwÍð›cpí0Q}18ö vDÏ>1%h`›É‹UÚK$ßa+®7Ã*ß·>]P^ãöÓ'ûn aݼÁïè†Ã@3Àà¬TñÅŽÀ³þUL{›Û’#IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment247 ò¤È¿IDATH‰íÑ=Â0 à †Ž9BoÒ\©#)b`ì•ÊÄÈÒd ’eã 1 úŠÌÒMÏ®ÛÖuQ%¤ë3Ôoë\‚j[©Ò÷¨½™:•P =™:ƺŒA¼pÜÖ”ªÐWŠªt–š3ÖKÕŒô*ú]¨D/ (÷4xY±:• zZÎ:¨™kÎH“«Y!]L\dÀgÉ0Pµ“Ö9äoè_P¥šÑë¸BÊeðx <ˆF)½~©Ž,›Àá~ôH>>’ÄÌ9Qê)JiL¯iNKöÈßf¼äˆ:Í¡sw­æ”° oÁüÔ¨‚º9ýuZIVSJÌÙ‰ç”"6Gìß3è„„™Ÿ¸w#§h‘Ó—Ÿ©ëÉÏ¥¹KN²Õ±ñóèlLþz§&R‡¿xÔµFti¤J¡âFI=ñtXyì(jUj©s¨|¯¤ùIh†>˜±UMt©åï}u^…‚¹Â?ž[UÉÜ=~p+I“€Y˜¾ãŠ )F$mRO»éøqZÚµ†l5ÿŠÆA0Ú|ò‘8i#„A<ëV‰&ÓÉ(üŒÔÈe("=Æ'øöYÐTkÐOèõn[Dùµ9± Ç@ØžÇÚ‹ûZ6U±Ï¥r ‘W/ª)!$Gï8±ê7TÕ›éÄñÝó”ùAð®5º\ëg肃oxÕS·ù•·ÝV„E?0ßî+†û™ t•ÌÙPO݇’‘ÔÒYs¿=Ú‘Ýä*yõTC«ÏÈÎÊÑy±ëgNê|¡>yøùœþØE©:ŸFó+òës«Z´Ý6Z¡¦XRÉÚÙÓ¸­U…ʳ…@ËðßúFtzñÊã«WaÕiêw*ñ#ç­ò?ë¥aS#7’/9"íú lE­©KvÈ^Û•ж+é°µÚÔ­<¦k«EyLÔ©c7ÇFÆ&UvÞ§eÓ• ”ê5ßÝ7]I_¿g}=¶ºx:¢¬ò± §hJ·7onﯰŠ?óÞ²ÿkçNüËWçèQ=ݰ¬¯É?|õ=ÛV¸tV35³óοݛÒêŸÐUaprªùåÁfÜB“µ!ÁùÜmºz§vÑÔ]s:³šu¯ãr:Å­—ûùÖZTx-ò©ÿ„'­«¢a M¼‚#××rmð@n_B·ö?ÿZèS‰ïÍ›VM»“,rYkˆómºØ²ÕJ¤³SÏ×Ó$îBzU€†¿z˜ñ!>8Y¨¾ˆÂH¼Õ¼ŒÃr°Í«å´äEšÅÈx0ñ-²//Z±§e«í›½kØš {¥&Ì¿ uSÏk¯'Öó ÉaìwxVöLÝr8¼ ’o„ÕŒíF™}ý‚hæ;Y}î”èÕÌ£U·MåP}ãQfƒ²n5}•|o3 9î…©žÖ«]/5ÀÙܾb1H:Þ)Ñ)íº¨=ÇN««£ÚQânÞæ•Ì»[Õ^­ªVQ‚8Ü;ú–³‰8ŒIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment250'*×IDATH‰mÔ¿oã6ð§Ó AÙ1ƒ)½¡«oK&üWÒ©«Û¥>ÀgÉ0Pµ“Ö9äoè_P¥šÑë¸BÊeðx <ˆF)½~©Ž,›Àá~ôH>>’ÄÌ9Qê)JiL¯iNKöÈßf¼äˆ:Í¡sw­æ”° oÁüÔ¨‚º9ýuZIVSJÌÙ‰ç”"6Gìß3è„„™Ÿ¸w#§h‘Ó—Ÿ©ëÉÏ¥¹KN²Õ±ñóèlLþz§&R‡¿xÔµFti¤J¡âFI=ñtXyì(jUj©s¨|¯¤ùIh†>˜±UMt©åï}u^…‚¹Â?ž[UÉÜ=~p+I“€Y˜¾ãŠ )F$mRO»éøqZÚµ†l5ÿŠÆA0Ú|ò‘8i#„A<ëV‰&ÓÉ(üŒÔÈe("=Æ'øöYÐTkÐOèõn[Dùµ9± Ç@ØžÇÚ‹ûZ6U±Ï¥r ‘W/ª)!$Gï8±ê7TÕ›éÄñÝó”ùAð®5º\ëg肃oxÕS·ù•·ÝV„E?0ßî+†û™ t•ÌÙPO݇’‘ÔÒYs¿=Ú‘Ýä*yõTC«ÏÈÎÊÑy±ëgNê|¡>yøùœþØE©:ŸFó+òës«Z´Ý6Z¡¦XRÉÚÙÓ¸­U…ʳ…@ËðßúFtzñÊã«WaÕiêw*ñ#ç­ò?ë¥aS#7’/9"íú lE­©KvÈ^Û•ж+é°µÚÔ­<¦k«EyLÔ©c7ÇFÆ&UvÞ§eÓ• ”ê5ßÝ7]I_¿g}=¶ºx:¢¬ò± §hJ·7onﯰŠ?óÞ²ÿkçNüËWçèQ=ݰ¬¯É?|õ=ÛV¸tV35³óοݛÒêŸÐUaprªùåÁfÜB“µ!ÁùÜmºz§vÑÔ]s:³šu¯ãr:Å­—ûùÖZTx-ò©ÿ„'­«¢a M¼‚#××rmð@n_B·ö?ÿZèS‰ïÍ›VM»“,rYkˆómºØ²ÕJ¤³SÏ×Ó$îBzU€†¿z˜ñ!>8Y¨¾ˆÂH¼Õ¼ŒÃr°Í«å´äEšÅÈx0ñ-²//Z±§e«í›½kØš {¥&Ì¿ uSÏk¯'Öó ÉaìwxVöLÝr8¼ ’o„ÕŒíF™}ý‚hæ;Y}î”èÕÌ£U·MåP}ãQfƒ²n5}•|o3 9î…©žÖ«]/5ÀÙܾb1H:Þ)Ñ)íº¨=ÇN««£ÚQânÞæ•Ì»[Õ^­ªVQ‚8Ü;ú–³‰8ŒIEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment255Wçô¥IDATH‰]•±nG†ç²Œ®Á£‘FŽ nAê„àÊp‘Î~\¤´‚44LøV 6AèÞåGH&Ì#h€"o°Ú¸Æð.£Gp³“Ù=Q¢½AñÃÎÎ?ÿÌf³þŵ™cÉLŠ®.Mºˆ‘è?`Þ<œÉÞ-ŒÐD̵È~˜“N¤ ’°îÞš ´Dêïî3s?ötêétYÞf³iÑöû'̨ Me À–|þ~FÑÛè\/žÚÚ>|å²PÞ4Q¥ŽÞ>%œ6"÷f?’,‡>ÀôHŽâxêRiÓÍÓ»k÷¦g,—GuHg†cöDÈR¬ ØHèjçOIQb)ðÀ$8°ÂtÒè5Q”LÂ.å¥0¶™XI ·¡¢yXrä†«ÔÆ ®dî\S,ù†ç#åár 7å÷^.ø›qîr‹ìi´†Ã ÂÃ@£@ÏÅ«ñm·Tب„k!ßzúgEŸ™]ª;ˆKˆV8iØ?D‡xô ÿ›½{ £sht` Ž+Ÿ¡=Á&aŠhyÒèË`K{hïûnˆêÇL²²·'v(eoÕ›ýkY‹ÑJ.ÜôôIú²ó`̸Mô cÅ<ƒøè5àDánaz÷^°‘m#ÅÐÓ×äÀ™§I16bkÛ-&TlžË6÷‚W›ãÌš”%ºLpd„âù ÷/égÎ =â,…L¼KÁÁ@'348 r'¾Eæ}üNg.6£™08¤ Ê J+*ÊqŽ“ _ã‚(·¾‘ˆŽTÙÍ)xûÒHç©â®L.)ÎeJÉÚ wý [iN_ž OcÔÓfvªÑN•4!ºÁ¬Ù†J¶ixh©q;`kÌ ûCØ¢[±*Ì‚‰q*{DEï-uÃÑNYÊN þîb{×UBái t®¹²¢QrŠ9ÔRSµàVmGAÜI| D¾×øJ†muEÉÝ÷ž6Ad{m¨Àn%Ññõ@Ì÷EwZÕŒí:¸¢Zñh²PÉX ñŠêkš,Ä0OTzаÿ9-²ämwo5R4m²õyä"ãžÔ‘¨©!`Y­¤@ÿ€öáoÇôW½¢Óe K\(®.œþ•<ÃKW˜\„ÆòT¨|¡ŸÓ*ºÞêõ>ñu^àóÐ,ÍOªá—ÿÊ+g®sµœã&Êp>ú(x›æûšnðlU,JOíyú?€ÿ^yT­IEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment251PŠ0¼IDATH‰]•±nG†ç²Œ®Á£‘FŽ nAê„àÊp‘Î~\¤´‚44LøV 6AèÞåGH&Ì#h€"o°Ú¸Æð.£Gp³“Ù=Q¢½AñÃÎÎ?ÿÌf³þŵ™cÉLŠ®.Mºˆ‘è?`Þ<œÉÞ-ŒÐD̵È~˜“N¤ ’°îÞš ´Dêïî3s?ötêétYÞf³iÑöû'̨ Me À–|þ~FÑÛè\/žÚÚ>|å²PÞ4Q¥ŽÞ>%œ6"÷f?’,‡>ÀôHŽâxêRiÓÍÓ»k÷¦g,—GuHg†cöDÈR¬ ØHèjçOIQb)ðÀ$8°ÂtÒè5Q”LÂ.å¥0¶™XI ·¡¢yXrä†«ÔÆ ®dî\S,ù†ç#åár 7å÷^.ø›qîr‹ìi´†Ã ÂÃ@£@ÏÅ«ñm·Tب„k!ßzúgEŸ™]ª;ˆKˆV8iØ?D‡xô ÿ›½{ £sht` Ž+Ÿ¡=Á&aŠhyÒèË`K{hïûnˆêÇL²²·'v(eoÕ›ýkY‹ÑJ.ÜôôIú²ó`̸Mô cÅ<ƒøè5àDánaz÷^°‘m#ÅÐÓ×äÀ™§I16bkÛ-&TlžË6÷‚W›ãÌš”%ºLpd„âù ÷/égÎ =â,…L¼KÁÁ@'348 r'¾Eæ}üNg.6£™08¤ Ê J+*ÊqŽ“ _ã‚(·¾‘ˆŽTÙÍ)xûÒHç©â®L.)ÎeJÉÚ wý [iN_ž OcÔÓfvªÑN•4!ºÁ¬Ù†J¶ixh©q;`kÌ ûCØ¢[±*Ì‚‰q*{DEï-uÃÑNYÊN þîb{×UBái t®¹²¢QrŠ9ÔRSµàVmGAÜI| D¾×øJ†muEÉÝ÷ž6Ad{m¨Àn%Ññõ@Ì÷EwZÕŒí:¸¢Zñh²PÉX ñŠêkš,Ä0OTzаÿ9-²ämwo5R4m²õyä"ãžÔ‘¨©!`Y­¤@ÿ€öáoÇôW½¢Óe K\(®.œþ•<ÃKW˜\„ÆòT¨|¡ŸÓ*ºÞêõ>ñu^àóÐ,ÍOªá—ÿÊ+g®sµœã&Êp>ú(x›æûšnðlU,JOíyú?€ÿ^yT­IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment256Îî¥$IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊ/[?@öŽÊŽ`Y>œQEeh;'IEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment252Ƀa$IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊ/[?@öŽÊŽ`Y>œQEeh;'IEND®B`‚ pix[76]: xres = 300, yres = 300 ‰PNG  IHDR?³Ôûá pHYs.#.#x¥?v tEXtComment253¾„QÃIDAT•-Î1ŠÃ0ÐqЏ³n`]$äß,Þ"å! DÆEšB‹‹-WàF MdíþêÁ‡™Û½ 踮ôgðÉЗÓ~Uèù&£—†hU`vßTÛ@ªì/ùC—ä‡Å @’àXøä¼£ŽÉ]ŸL#–H³0Ô®™v&†·™}Íù #5¹ßÁ ´ÿ(®!@ëâ¨ðKš†ÅÄ,›3'™°únB@‘%óß¹fŽöSë°ŠQô>‚=™/oÛT£9vP¼\IEND®B`‚ pix[77]: xres = 300, yres = 300 ‰PNG  IHDR>\ß pHYs.#.#x¥?v tEXtComment254 àÄ3¦IDAT•Mα Ã@ P™.o„[#EÀk¥0ØÂ¥GÈ*w¸H™td )bƒÑt±ÁªÒa„ÖÚnàæ !î`CVd°û£ãܾؠëá€þ€Ü Wpkœ ƒ!<'¹êV’Ì% ;ƒÓƒxÅÛÐ(R&Z5™ˆÀ±6èqÉ>|‰ÔŠ–‰‹†¾7ÙHáUðãÜõa=¾þú‹­g‚ЉIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment261{§c÷IDATH‰í’Í Ã …zàH'hF¡£t“d´t“lP¤^r@P61=WU|IÌ—÷ €ÿR œô¤?KŸcj!”Ð=R5 ®¥æ<×ÔÎé{êVö޶l%ìkR‡ÎVö蟺š»]Þ±I2•r=ЂQe‰¬¨´·LMEóà# V  ÙÚzm’l‹h¼C¹ (%gú”nÉô©ßõaÒR×îQ#›d˜qj‚ôâ_¶¢~ˆ´H5. vº¨‰ŽŠ6P§|œÓãRªÉZFîpUÇ´*¡‹kÁ˜f†ß- ¬O)ìÅcŒhš}Ò¿¦®–®=ŸIEND®B`‚ pix[79]: xres = 300, yres = 300 ‰PNG  IHDR@ ŠæC) pHYs.#.#x¥?v tEXtComment265|ʧfÅIDAT•-Ï1Š1 Ð?Ö¥à‹,Ñ•RN5ö0Å4\É!E®¡TÛ¶ñÂàÅ›_=|I Å“?hŽ}â¶¡N$‡R“á¦é G–”ö&š²àÚâ]¹óíÉ+qiq'‘çhÅHÈç8`ƒ€r8~yLŒ¿ºLÚã –îjÃjH48úøŒ>8¢øºHF“èëV´åƒzÈ> H:ÇÍÞIwm¶+#Ýžíä$uí;XýaZèp$óPä‹mrIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment274Ö¦±ÆIDATH‰íÒ1Â0 Ð0uÌr”­Ar ®RÔp@ Œ S[‘ÆÄ­Ä䟉)™,=ÙŽl+*<§þRC•†Ú[ÖªlXïHuT«9º’_spF¹a}ÓPÐe×£¬A”ˆ²ÎºcfP£n šlC TJº¤Ñð‚ ¶%™F¤[âéÄCö½‘uduN:­¬×‰t;ÉJ›¢¾öÉú5Y_P>W\yÞµ—5dÍ·ã,PØÆ$•üj«V­Zõ×úÛD"»¹Te­IEND®B`‚ pix[81]: xres = 300, yres = 300 ‰PNG  IHDR@ÊöQ pHYs.#.#x¥?v tEXtComment275eÑ–'ºIDAT•%Ï1Â0 Ð_u`#GðMð•Ù’ªcУ‰¡#WhÅÀZ¶ ¢|œàÅO‰lëƒV‘˵ÃÇ©g€ì0Ïè+Ë®ãFx\“N_›À”t®+0g嫽4DÅpQ.´…{ଜ(Âîé¨Þk;pc1ؽ'‹4Œ 83ÿ!†"в}Ù·,IF¤¢W¼wo_ê°¢AN ‹Y´XœPÓÛ„[ýl¾ŸÔ½ùiIEND®B`‚ pix[82]: xres = 300, yres = 300 ‰PNG  IHDR@ ŠæC) pHYs.#.#x¥?v tEXtComment279lgÚ ®IDAT•]Ρ Ã0ÐzâÑl) °#dG¡q ›2Ë¿w¨Ô“NzúàîƒäV˜hÁèñpxí‚f-ÞãP0®ÕO` 3K‡§ìòþ:nŠXgE:ÕÉ›ƒt» Y€ ›£Ll^ €WVϼCr=™!ù‰‰B…Íø(š 7…y"!×̪¨‚ QÁñÒá9Z)¿îÒ‡L<'|ô³©IR'´EIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment298…ãÇÙIDATH‰íÓ½ Â0`##Aç¼ -A.R2£@”"%+QЂ(ˆEâ‡M•_(¡ðé$ŸNçóÀDâwºÅ}BK´€Ë‰ÖØh®´WMôè²ÓÖëŠiŸ•“Z_Q9*é;êŠèì¥ó¾µê¢çíÕT}¶îDNöìÕ8AúÂ8mP°yË -S…EnATÜl/ãnödAtðK}…‰« zczÿ¦;®g ÕÜÐĵ˜¹ ‡¸ éÔá±n¢NHxíIíR…÷¸'ŠðB2e‘4iÒ¤¤OÖ› ÒñÌÏ·IEND®B`‚ pix[84]: xres = 300, yres = 300 ‰PNG  IHDRC”ýMR pHYs.#.#x¥?v tEXtComment299òä÷‚ÐIDAT•=ÏÁiÃP `•rôyŒ¯›4Ð%z¼€>v„¬âಂBéEñþJvéE|é×O£¡ö û€vBö] !Õz7Ì‹ÐÝÊluP¡GÈëhGº9Ï^ö›†TO_Þ Î{ïi÷/:l¢§Œèü»<†¦Ož‡j¹†”™Ë³„zbI]á¶—ИO{ÜC·¾jê)fôIy½,­|§p‘V&?’FÕV'šÞŠ©3­úY¥!lªžªÖÁÞ…n¨ù´¿aZBIEND®B`‚ pix[85]: xres = 300, yres = 300 ‰PNG  IHDR?xˆ(D pHYs.#.#x¥?v tEXtComment304\UZA·IDAT•5Ð=‚0ð'&t³7°×pŽ$0008r%H®QÂàZâ` ß«:4ù¥/ï“~;ù\‰X“›Ñk„‚† £‚/È:t6ÁC' Œé‹Ý,pŒ5Ÿ° ú‚ h/‡ðÆ—ò3 8=(÷ æ¿þ°ýÁUÎzF.XUµ DtˆQ32Æ]{„3£ÖN¶8†FMŘeæG@;Âh\`;ô9Ù΀rr¼xÃ×øÅ>¥pµ‘þ8IEND®B`‚ pix[86]: xres = 300, yres = 300 ‰PNG  IHDR=|}øy pHYs.#.#x¥?v tEXtComment305+Rj×½IDAT•MÏ1nƒPÐA. ³KºŸ#¤¤°øWré"¬”ÁW1ú…¯ò¶\)èOvM‘lõмÓO¡JÏ©ÆRp D…´ò>9¾…a$COÇMº8(ùŠÉë³au¼äºƒ¢qá˰:,ÌY §ùàhkHáÈCˆ8üèçþá´#mµO·7¬Ufÿ¡ç˜´JmCÒ®B)}Õ¶Æ…aÒ­~?T,%1\!Gæ>CBâš.ÅôIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment312¬-Î5ÉIDATH‰íÓ1 !ÐY„XzâÍâ†\lSå{ƒ ¤1 þ(KHã·Jp*Ù‡îøUÁ VùO½ uA±T³ Y(Ñ$P‹5Ž”­œ$¨n}Õ“k]mdîÙ¡ÎÝ:?®ú*ª@¬Z„h‰u@47¦ëÚÒ;ަ{x¦G Q;Ô£ÌHk$Dïµçâ™^ë~K¿Ú­vFÞ T‡ºƒ^õín°›ƒ¦Êr.¾˜þ“iSÈÂrÖ˜Ëù‰ì 4gZS§Núc}! î‹ñ%[IEND®B`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDR@ ŠæC) pHYs.#.#x¥?v tEXtComment314ENk‘IDAT•Mб ! Ð((3£x4Ø £d®ÊŒ`) ¤‡tTË[€®‹74pä‰vá\½4¡MÈFSQ¡ ê&ÞïµÜèas\ñÆ80p7ÿVܤ僗­¡O˜f\Šˆº€‘w%¬xOˆ –‘öªï^6|1Gw„‰A¿Ö„ý•:(ª@ã n"IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment3152I[–­IDAT•eÎ1Â0 Ð:$[×n=k¤\…c05 †^•›€:pôF )Љ•…?=éÛ²äô 2½ô„FØ't˜or,xAÁ¹bÀ)øà¬ /ÂZUÌ+ä‡%#åa™v@2Š]n2âhAE²xÖ-àE¾BØý¡¯˜V4 ö §{+FÀPE«¥S>á(fÜ%l?<`iòKP›öF®ùÕ’7w³«‡;(ÍIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR;º?[› pHYsb&2 tEXtComment321 ÌLŸIDAT•UÏ» ƒ@ `Ÿ\\™nVÉ$9kXä"ˆQG"÷ÇæQÄÕ'ë—¤ i°Z;hÂXh)¨Œ©Ð,áBç˜v<´X$£‚¾E1¬à38ød°Ã:`¶°jÜ;’ë bm¶t¡q¼4iö {Mò=ñþ8‚]|Â~ð¬ÍNÐŽ¨™Ø·ò0°:î$Œ-B‰áU~B±®‡Éä€IEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment3359ÈIDAT•5Î1jÅ0Ð1ßD) Ê ºˆ‰/f,Œ.ÿrir™_¤Ýt*M$‘?Õ[˜…:–|Cn ŽöÒp7D‹cç½â ´+Ña_Ðc‘ÙÄ„%Îæâ§fø *ŽèíYð#d3¾J™rãk|Ò¥÷ÑäÑä»:jÉAxž¿âyãÈë‰P¡ÿXu´A}‹FâR{Üâà.™;˜8¹CR‡M¦ñí±†ä¶ì _¬¾)Äpw©É?×Üõ\†£LkxRIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment338~ÎE©»IDAT•=ÏM ƒ0à Ù^@HRôbE…\z„^Å`Ák¤'h\u!¯“¶¸ûæç HË1"ÃgHA©j°;Þ¯©¯°yÖkd…Iá"K\“ê« _P¡SŠMlîä,º™o&qÉ·br…ÔsОéˆ Ô)ŸNåñPzé3:Å0fÌ>pÄ&Q,˜¤Íð(¤­ÿèاð’Õ`7LOÚ) ýtΟz£A¨ÁB—áâ䨂É¥bIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR?³Ôûá pHYsb&2 tEXtComment340?T[\°IDAT•5Î=‚@à!4.`Ø›°žÌ]( ó ^ECá5H,,]b³Å8ÏÙ«ù2™ŸGx¾£P@ --¤®¥yQ°­év5õ Ñ ÑD(¢"` 9ìxlÀ 6 <á ¶$ƒ«ŒñI_¤Î7ì@tØmX—úh“ÐkÉ/ 6^1&lÁJV\¨Ôõœ¹JŶ4EÍ#¶£ÇŠØàx¦¥LðB¡\ùö¹ ëS…| IEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment350&Oj²IDAT•EÏ= ƒ@à'¶½€d/"z1É[±Èµ"–¹ÂJ.ðÀf'ëO’îk†™!,  øÒ’ÐW‘wì/ ’^ÂÞ /i/Ö&ÛÁñM súǰ!À¯'àÍŽ7Æ~Ç„i”½à9ìH€y„áåˆÑœÐì^­ñÂŽº)%z5sˆè´>j3(g4ÊÍŽÛæØlïk]R¼™(+gA-­±áô@°¥“,85IEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment358(”â/ÈIDAT•UÎ1nÃ0 PºàÅ€.`D1â‹‘=F¯"AÙ{„0èÐUA ‚~¿Œ.åô~òK3øú¿JÆ&«è€05™%z¢^fI 5ÕdW§[‘Ðÿƒ;éÀ6 ˜ÚÊy<§ÊËHø|?0⑚,R<"ø+ @œäÅxl­«AËíÙyÂ~hFïr6ÏŽˆJ e11XMêój÷‚;q!Ü]&½Ù©²áîñf{0Ào`±<²ÂUªEŸú +I HÁcèIEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment367“¬}àIDATH‰íÔ1nÃ0 P4ú¾Bn ½HNR9èà±Gªs¼ÒðPÌÊmG}M2¨ PË(ˆ¤Œf¢6ÿC_sŠœÊAõQ¹HëÔjxX мœ vì…2êæ¨6­­¸wzÊèH«¾¤•Äõ¬HgvýUÙ7ñ¬€Ò¦+ÒZ7u@Z«¨o ¨|tE§âÓºHe)^ÔÊÊhrBTO@?B™Ñ.«çP6ìÛ+µºühù[}Þºµùš ¤oìGR: 1¡JܲQÑk|ÇtÓî/ëÏÙu×]﨟Wweß µ¶IEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRJ"Ð rë pHYsb&2 tEXtComment372úwi³ÒIDAT•mÐ1NÄ@ PGS¤#@;ר.k‹#”‚cp•DK[к´ÆÛA ÓÌ“eÉß&›°¿•z‰ Ê) àe F³ó•AEÕ¹É#•~ž’g§MsðDc·’ÕÞ?­èN i€vzQ_.7êàì÷c$ó$ÐcLž£¼JP"z5g„„ÖÞÀ=™ mZ}ôòá|ÒÊ ÓÛ?´úì\úÌMãÓiÜzÒïÀM’\œœ”ÑWªæ¾<Ú‹>ÐÏuñ‡¶~w„òWç f:IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment379m¥°;ªIDAT•5ÏÁ Ã0 Ðoh¡é,bªU:HÁ1Y¬¥‹¸¨7„U)Iuz !}ANj•t Š ï’– ç /vÄaCWozv•z<™T9õÞÚñÙ(ëâ†ì¸µsD´OßS£jø25Øp…ÚŽšt1ˆCíÖYfÞª¡Ñ™‡ã‹É$—+o˜ü/GDÉj×ìSËc !Q%é*?y’—r,ÆIEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment383 èEêIDATH‰íÑ=NÃ0àu’9ßÀ; ù*pX< Ø¨H{¥T| G¹Àƒ.,;IÛ4 ŽLöâŸï=?ÿ@¸Ò4dÍš5kÖ¬ÿ£Ž…MÑU­ïD“6C\±ÐZ¤º“²_ŠIqTÜ—ÝØ}ÎU4 ÕÚµŸrçuq©Ûá5n”I“òoazBqh­“qŸÍT*C€7kåƒÐne•Ž÷ñÅ Œ™.Å•ÔK@…EPAW0êÎtñ\uÔwŽkÙZ§ü­˜tkš¨´¢¾âüñ•ÈKå9Žu1ê>ø*)rN–üZ9qÖø^}DÈCp‚tÓ/ÚQŸ.ô%êöõkP=¨êÕ97)Fõí³¥ï“þƒ^ÈK¶Z¹9IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment369t¾zIDATH‰íÑ=NÃ0àu’9ßÀ; ù*pX< Ø¨H{¥T| G¹Àƒ.,;IÛ4 ŽLöâŸï=?ÿ@¸Ò4dÍš5kÖ¬ÿ£Ž…MÑU­ïD“6C\±ÐZ¤º“²_ŠIqTÜ—ÝØ}ÎU4 ÕÚµŸrçuq©Ûá5n”I“òoazBqh­“qŸÍT*C€7kåƒÐne•Ž÷ñÅ Œ™.Å•ÔK@…EPAW0êÎtñ\uÔwŽkÙZ§ü­˜tkš¨´¢¾âüñ•ÈKå9Žu1ê>ø*)rN–üZ9qÖø^}DÈCp‚tÓ/ÚQŸ.ô%êöõkP=¨êÕ97)Fõí³¥ï“þƒ^ÈK¶Z¹9IEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment384”ŒÐIûIDATH‰]–?o7À߉©©‚™­Wà**ȱ²h¸ûI :6A{Pu”op ¸Ñš¯@E@íÍk‡¦, {­€ˆÎ÷úHJqR¤¨ŸÞÿ÷„Å@—Î,ÑJÓ¹í¯þ·-4@Z¨þ‚r ¹§-°îG’z¨{àe“I½Å#ó4˜‡ýDÛÊ&êOãí`g#ÎßÌ º ÃÏ(ì(­NØó°wwÎîoí‚òïÝÊ·añsúQ4² v‘§ð 0£ÒìËϼ=n˜ùe˜ï¤éèšXe–™ŸÝÒÞŽÂa¤3Ãôªí\ó”2Ó¹Ÿ,\ ÎëQ¾ ЯC²—²EËâ•ßQ¢brÈ-ïzkŒ×ù8Rò…Îáù´ ÇÎúÞm^g-¼»£ƒóS¢–½–Y?å\gøµýŒòÓ¼—–)‰yGéîQˆo@þv˜9äÐ¥ÌÛž8õXbé·‡‡ð ‰ ”/©="MtGا:ÁÁ W-”gäøÅ¶¬L˜§úa«˜aeþè°û Jj £g-¨6ë2lîè K& #yÕ€ú˜uv´ÃºLu»6¥§üš”#jض û¥á7ë òê¼»#õŽSÀPÎõ¼–XU± Ëír(€œk•ÌsÉ;¨WA3ˆK^½§ÏæÇW‰›@ Ä|Ÿ^Ò® š4b8Åó-}K>%3%0PŽéòwä1U0ÃÈO³‰¦d3tÔ³xê˜ Tâ„ÒÉVD¥)/"Ý;Œ£ÀN(H&fK£ÞÍ)£IîÃJZN,Ÿz 1¦>$XgÙ$KÒQj&ÌÑ@Åg‰ºâ16ɦTš(ë™±T·â˜× ÿÑ€žî¢ 6Ô6å19ˆh¢BïÅö(èøßu ZÇbïèkœ·J9xn[èVÖç,ÃU+)>l‘ò@;”ÈA£,[ã4ÔWlµ 8‰ŽSÞ¼ÓT¤@ý¬Ñ sÍj(_-/=Í$õxcš[Ò,AãÒ }•KŸ/z eW,EC1ÓìºDÊŒH ê>ü(§*Â¥-[?WT ¢…š\uÙA•o,Õ‰ÒÃ2P¾zðx2¹J÷ÀÓ+ |‰õ’ì@hM/Ó­½`}uuj†¸AÒjˆv3Oófãä•ú#5G¼ ”ëãðpžädH±?•[¡§m c WÈtž-؉¢ßz½ /;­|“&ºa²ÍSY¤þŽêbL¿þªWFÊk„Ìzª‰ª†BN\ÕDWzÔÅ› .=}Eý¡h<–ÔîßâÍ%J\yzyÒÉ@o«ö ¹»æ‘¾„~ÙP¶âï†ú©©|q0nT…T¶‡)È–/[jE¢~µž®5 7>þ6Y×ûÔ¯UéS§Aö)Í*dlSÕ oO¤O”ë3¬©¾Ï›@×Ö¸ZDû’„]ö(ȾhµãùlfâkÜœôûDëTEÍþEë‹¥IjïÎrh3,}@ô^_ltb¤/®ÅOÛ-ªÓž 33¾pF¢ð:vôHŽß›%½JDµ¤ Á[<ÞÒçZÑÝ¥ÂyYëeÝ–>3êtI´N*¬èoÚñ€ÜúD¥°Òb›Ì7 ÿ%º®±ª ÍÑ1[^“‰7¤ÆaéT±þ‰Ì…œIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment370yŸûIDATH‰]–?o7À߉©©‚™­Wà**ȱ²h¸ûI :6A{Pu”op ¸Ñš¯@E@íÍk‡¦, {­€ˆÎ÷úHJqR¤¨ŸÞÿ÷„Å@—Î,ÑJÓ¹í¯þ·-4@Z¨þ‚r ¹§-°îG’z¨{àe“I½Å#ó4˜‡ýDÛÊ&êOãí`g#ÎßÌ º ÃÏ(ì(­NØó°wwÎîoí‚òïÝÊ·añsúQ4² v‘§ð 0£ÒìËϼ=n˜ùe˜ï¤éèšXe–™ŸÝÒÞŽÂa¤3Ãôªí\ó”2Ó¹Ÿ,\ ÎëQ¾ ЯC²—²EËâ•ßQ¢brÈ-ïzkŒ×ù8Rò…Îáù´ ÇÎúÞm^g-¼»£ƒóS¢–½–Y?å\gøµýŒòÓ¼—–)‰yGéîQˆo@þv˜9äÐ¥ÌÛž8õXbé·‡‡ð ‰ ”/©="MtGا:ÁÁ W-”gäøÅ¶¬L˜§úa«˜aeþè°û Jj £g-¨6ë2lîè K& #yÕ€ú˜uv´ÃºLu»6¥§üš”#jض û¥á7ë òê¼»#õŽSÀPÎõ¼–XU± Ëír(€œk•ÌsÉ;¨WA3ˆK^½§ÏæÇW‰›@ Ä|Ÿ^Ò® š4b8Åó-}K>%3%0PŽéòwä1U0ÃÈO³‰¦d3tÔ³xê˜ Tâ„ÒÉVD¥)/"Ý;Œ£ÀN(H&fK£ÞÍ)£IîÃJZN,Ÿz 1¦>$XgÙ$KÒQj&ÌÑ@Åg‰ºâ16ɦTš(ë™±T·â˜× ÿÑ€žî¢ 6Ô6å19ˆh¢BïÅö(èøßu ZÇbïèkœ·J9xn[èVÖç,ÃU+)>l‘ò@;”ÈA£,[ã4ÔWlµ 8‰ŽSÞ¼ÓT¤@ý¬Ñ sÍj(_-/=Í$õxcš[Ò,AãÒ }•KŸ/z eW,EC1ÓìºDÊŒH ê>ü(§*Â¥-[?WT ¢…š\uÙA•o,Õ‰ÒÃ2P¾zðx2¹J÷ÀÓ+ |‰õ’ì@hM/Ó­½`}uuj†¸AÒjˆv3Oófãä•ú#5G¼ ”ëãðpžädH±?•[¡§m c WÈtž-؉¢ßz½ /;­|“&ºa²ÍSY¤þŽêbL¿þªWFÊk„Ìzª‰ª†BN\ÕDWzÔÅ› .=}Eý¡h<–ÔîßâÍ%J\yzyÒÉ@o«ö ¹»æ‘¾„~ÙP¶âï†ú©©|q0nT…T¶‡)È–/[jE¢~µž®5 7>þ6Y×ûÔ¯UéS§Aö)Í*dlSÕ oO¤O”ë3¬©¾Ï›@×Ö¸ZDû’„]ö(ȾhµãùlfâkÜœôûDëTEÍþEë‹¥IjïÎrh3,}@ô^_ltb¤/®ÅOÛ-ªÓž 33¾pF¢ð:vôHŽß›%½JDµ¤ Á[<ÞÒçZÑÝ¥ÂyYëeÝ–>3êtI´N*¬èoÚñ€ÜúD¥°Òb›Ì7 ÿ%º®±ª ÍÑ1[^“‰7¤ÆaéT±þ‰Ì…œIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment385ã‹àß IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment371c~8 IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment386z‚±e IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment372úwi³ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment387 …óêIDATH‰íÓ±mÃ0P".Xrƒ0ƒ¸µR…6T¸ô^…‚ •!²€Ô‚?'×úA"iÄ‚ÍɻçÃ7ëäþ^Ds´­9¢'•©?Ô–9mj‹é¤DÃYq)LýOTˆöš¸Ú»)܉âÖésS\ôI@ª²ÃÕ ¶µÅfš‰–«#7gê ©jìV}ÛúÞ·£G%ŠIßLÑ2[nQ1í¢-– C!Zê™ë‚‘©>´'5k̦é·Æ~Æu¨²­2(nŸ,926‘¥$2«+œèD?,kCÿò÷wÝu×]¥_Ѻùª2m9IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment373pY%êIDATH‰íÓ±mÃ0P".Xrƒ0ƒ¸µR…6T¸ô^…‚ •!²€Ô‚?'×úA"iÄ‚ÍɻçÃ7ëäþ^Ds´­9¢'•©?Ô–9mj‹é¤DÃYq)LýOTˆöš¸Ú»)܉âÖésS\ôI@ª²ÃÕ ¶µÅfš‰–«#7gê ©jìV}ÛúÞ·£G%ŠIßLÑ2[nQ1í¢-– C!Zê™ë‚‘©>´'5k̦é·Æ~Æu¨²­2(nŸ,926‘¥$2«+œèD?,kCÿò÷wÝu×]¥_Ѻùª2m9IEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment388:œb»IDATH‰uÕÁnã6à‘¸0{؆è­@ѽnO^ 0ó}{è5·æ`˜ô¦@Žy÷MVn=æÖcÍ¢/ 6B²fÿ¡dË–·lú4ÔpÈ¡‰N¯Ìã+/ˆ*¢’†WRbº=×/öÚÐúÛ™î‡àê‚~ê½ZÿóÙ{»Kqtþ½ÿT¼cúö3ú Ÿ\1×´üŒŽ$vÃi€³½ê-s5 K7rÑÊiSFI-T Õ„tOÕ§ÁPd‚›&Psªcº¤ã Kùýå0¯Kªríñ³Èø¥9×HÊço‚ê[š’ä¿Q!ãçN:Õí‘´ó':ŸÙVƒ!hÑk†«Tp8R•t"ÕÌu°9ÔžŽì~Iµ©`U±+8MÙÝcrºPe£W‘nºûº”ï‡"δú“²Fó‰f%Ý\AƒÖLZ4»&UÒ-!«ôÐP±¯’ (EáUÔþ]×fÃUݧÅÊx]#ŠUm7¼å“";‰mÈ}ä%žà޽åQ¦±Y{—Tªq½OK,¼ÃœÖÞBŸù¸VßpÀŒ,t鋽¾J„öû*©ÃŒ—%tÓÅš²mN UÊ‚YbKÖæïVm§¶Ñ¤b̺B©t«ªF^¯E9—}^1;hZðVéÂDy]7ú±Ï9醊æ5jô1G*g õ—èÜÿ,¡žwÕTT:·íí{•¾¼ÂNÄ\8.ì£ØÇµÂÄs0dœZ†f;/QãƒNuÀÁܨÚËe‡¤A §DKó€FˆJVœbõ±Xq|M~Ü9-¬*¡O¼áø}´Òeiç¡gÑóWPb^aùª,ºÃÞ0Ò‰Pdå­­eécùLé:ÚXœé]{šÐ,Ú:©Ýòý^õŽ™Ýst5ʵŠ^4Jú> é1®úàe…œøA•©Ž”¢X]\/’6‹¥,¦šÙmyÕ¢¶2Æì¿s±¨:èÔ­EŸDÝë\3v¶ncŸ’+) ŽZüÌåK6Œ¨OšVƉ½MoW¦wßyêÒ “½b2O­Þ”~í´‘:–IŸ’–©&y* j•Z—·Ý‹­lœFØ`Zj;ÊfEœ¡‰Ö½:N'ðU?²¡V½Ö]ì¼}w.÷Êb¦¹«¤¹IŸ:ÓEý' 6ì@ƒ**E~íÔ'#“©Znª¥H›”ðn_hÑðø{jÇ…Æ#•ý^x,(—œÂÐfýÈ)¾ü]»ŒªN÷ǰ ïäXvÜçü sà@à \lIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment374̆»IDATH‰uÕÁnã6à‘¸0{؆è­@ѽnO^ 0ó}{è5·æ`˜ô¦@Žy÷MVn=æÖcÍ¢/ 6B²fÿ¡dË–·lú4ÔpÈ¡‰N¯Ìã+/ˆ*¢’†WRbº=×/öÚÐúÛ™î‡àê‚~ê½ZÿóÙ{»Kqtþ½ÿT¼cúö3ú Ÿ\1×´üŒŽ$vÃi€³½ê-s5 K7rÑÊiSFI-T Õ„tOÕ§ÁPd‚›&Psªcº¤ã Kùýå0¯Kªríñ³Èø¥9×HÊço‚ê[š’ä¿Q!ãçN:Õí‘´ó':ŸÙVƒ!hÑk†«Tp8R•t"ÕÌu°9ÔžŽì~Iµ©`U±+8MÙÝcrºPe£W‘nºûº”ï‡"δú“²Fó‰f%Ý\AƒÖLZ4»&UÒ-!«ôÐP±¯’ (EáUÔþ]×fÃUݧÅÊx]#ŠUm7¼å“";‰mÈ}ä%žà޽åQ¦±Y{—Tªq½OK,¼ÃœÖÞBŸù¸VßpÀŒ,t鋽¾J„öû*©ÃŒ—%tÓÅš²mN UÊ‚YbKÖæïVm§¶Ñ¤b̺B©t«ªF^¯E9—}^1;hZðVéÂDy]7ú±Ï9醊æ5jô1G*g õ—èÜÿ,¡žwÕTT:·íí{•¾¼ÂNÄ\8.ì£ØÇµÂÄs0dœZ†f;/QãƒNuÀÁܨÚËe‡¤A §DKó€FˆJVœbõ±Xq|M~Ü9-¬*¡O¼áø}´Òeiç¡gÑóWPb^aùª,ºÃÞ0Ò‰Pdå­­eécùLé:ÚXœé]{šÐ,Ú:©Ýòý^õŽ™Ýst5ʵŠ^4Jú> é1®úàe…œøA•©Ž”¢X]\/’6‹¥,¦šÙmyÕ¢¶2Æì¿s±¨:èÔ­EŸDÝë\3v¶ncŸ’+) ŽZüÌåK6Œ¨OšVƉ½MoW¦wßyêÒ “½b2O­Þ”~í´‘:–IŸ’–©&y* j•Z—·Ý‹­lœFØ`Zj;ÊfEœ¡‰Ö½:N'ðU?²¡V½Ö]ì¼}w.÷Êb¦¹«¤¹IŸ:ÓEý' 6ì@ƒ**E~íÔ'#“©Znª¥H›”ðn_hÑðø{jÇ…Æ#•ý^x,(—œÂÐfýÈ)¾ü]»ŒªN÷ǰ ïäXvÜçü sà@à \lIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment389ê=¬ô IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment375dü IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment390Šú%BIDATH‰•Kn9†‹aj¡™že†æ^zA¼Ê¹€wñÂPÓÐ"K_ H®BÁ‹C ¼ð¶,ÜÚ¬üÅ~¨%ËÂÔ¢üšõøYdý»8|-©‘Ë+t¡Z¢åëΚ³¶üïäp ·Ù}<U "§v’ÂægCž1ßßO'5Ы³>^RÌ› ÏŽ!Š¡ËW’AKSŸ ·Tñä¸r-q-üKZd*YÙ8ä¸7» Ãw™ª ýkB»Ä¦ôšôfÈÖ 5èËH=©fp càë@UGûdèJ¨æ‰gé3×ǽÄM&1×tÃÓ‚*ŽN‚wnWäï9œ¤ŠÛ¿)PÍ­ÏÔpcHmGú†è)Y/éh-Gíuà¾z‡jšÞG=S’Oì * øqOóžZ¡°dų•쌢¦u[„ªâXÉÊö5cYVøÆH¢ÕÒz¡¾×VyP”kóB\­]¼±|»§:ÒÔÉëÅÚÕ76ÉÚ EºTÑ:Yâ˵k’óA«‰Øq•i™\ËŽ Èj@²œ7N +[·cöÅ1½èiuÇ-ý)Aú“g.íüÁ%<¾ü™›Lq.åÓen%=‡$g»-SÕt2.@ô4–sÞ&¡ ɳDûï©©Ë?xÛöT êwÛhfÐÐ6ÏMgÕ4ÿ{Ç?ôÖr9=+Öaº½c®A«ö`nM6Þ‚F´Ù@ßÊÓ"SuÇ¿¨`æ4Ê$Ã-™nžk|óe»ÅÞÓLÿ4AïèµÝ Žneƒ|l½æŠÍ[Ám2 ŸÄÿ„Ê›¥I:!@p¬îGŠ]'¿…7¥f“Ü=¶~xçªÑ¢›KÆ+Pæï?¦žkKæûuÁ–9ÓÇ)E·a¤)’cÞríø1ö4Ì$2èSkÚ)Ó'¡aðŒ9üÀóž¼Õ2ðØSLÅ$f„{âTqg ù°.2MEcÞÓîç²B·qkdì~J»ƒ~‘iÖo;Ò½’™*æo¬é¬Ë+V ÀmGwFЄ…ß”é·CêzÊIÌE û ¥…𣏅—*’ë¦Q,:ŠÅQj¤å<ó±õõ¢ÅEÞcÞ׫QGÛÉÿó…ÏïGŽ{ú%e΄ˆ„–IEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment376ý­ªBIDATH‰•Kn9†‹aj¡™že†æ^zA¼Ê¹€wñÂPÓÐ"K_ H®BÁ‹C ¼ð¶,ÜÚ¬üÅ~¨%ËÂÔ¢üšõøYdý»8|-©‘Ë+t¡Z¢åëΚ³¶üïäp ·Ù}<U "§v’ÂægCž1ßßO'5Ы³>^RÌ› ÏŽ!Š¡ËW’AKSŸ ·Tñä¸r-q-üKZd*YÙ8ä¸7» Ãw™ª ýkB»Ä¦ôšôfÈÖ 5èËH=©fp càë@UGûdèJ¨æ‰gé3×ǽÄM&1×tÃÓ‚*ŽN‚wnWäï9œ¤ŠÛ¿)PÍ­ÏÔpcHmGú†è)Y/éh-Gíuà¾z‡jšÞG=S’Oì * øqOóžZ¡°dų•쌢¦u[„ªâXÉÊö5cYVøÆH¢ÕÒz¡¾×VyP”kóB\­]¼±|»§:ÒÔÉëÅÚÕ76ÉÚ EºTÑ:Yâ˵k’óA«‰Øq•i™\ËŽ Èj@²œ7N +[·cöÅ1½èiuÇ-ý)Aú“g.íüÁ%<¾ü™›Lq.åÓen%=‡$g»-SÕt2.@ô4–sÞ&¡ ɳDûï©©Ë?xÛöT êwÛhfÐÐ6ÏMgÕ4ÿ{Ç?ôÖr9=+Öaº½c®A«ö`nM6Þ‚F´Ù@ßÊÓ"SuÇ¿¨`æ4Ê$Ã-™nžk|óe»ÅÞÓLÿ4AïèµÝ Žneƒ|l½æŠÍ[Ám2 ŸÄÿ„Ê›¥I:!@p¬îGŠ]'¿…7¥f“Ü=¶~xçªÑ¢›KÆ+Pæï?¦žkKæûuÁ–9ÓÇ)E·a¤)’cÞríø1ö4Ì$2èSkÚ)Ó'¡aðŒ9üÀóž¼Õ2ðØSLÅ$f„{âTqg ù°.2MEcÞÓîç²B·qkdì~J»ƒ~‘iÖo;Ò½’™*æo¬é¬Ë+V ÀmGwFЄ…ß”é·CêzÊIÌE û ¥…𣏅—*’ë¦Q,:ŠÅQj¤å<ó±õõ¢ÅEÞcÞ׫QGÛÉÿó…ÏïGŽ{ú%e΄ˆ„–IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment391ýý‡éIDATH‰íÔ1ND!`Ô‚NŽ0×ØÂ„+­½YžyÅ+½Ò¾Plé„ÐÉ&~y±åw[Š/™aÀà‡1™¿¢IúÔ ÑÉ^™ÞÛ¤ÂXeÖàJõCmîUÃÂu­XÊ Q{KUlj©~¬U”(¢>:˜EM@ D]3g¢U`¤¢ÉÂ85äÜ8oú$c½¬í`›:UÖ“íå&šjxàZŽ˜¯D›¤#b9Uݦ‰ë3â™ìܵÜО3QÉ—¬2Vßûê-³žôQ½Ëe¬½Ðý~+{)xÇÚSàó{ùM?î»îúô :€ó‹hÖFIEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment377Š<éIDATH‰íÔ1ND!`Ô‚NŽ0×ØÂ„+­½YžyÅ+½Ò¾Plé„ÐÉ&~y±åw[Š/™aÀà‡1™¿¢IúÔ ÑÉ^™ÞÛ¤ÂXeÖàJõCmîUÃÂu­XÊ Q{KUlj©~¬U”(¢>:˜EM@ D]3g¢U`¤¢ÉÂ85äÜ8oú$c½¬í`›:UÖ“íå&šjxàZŽ˜¯D›¤#b9Uݦ‰ë3â™ìܵÜО3QÉ—¬2Vßûê-³žôQ½Ëe¬½Ðý~+{)xÇÚSàó{ùM?î»îúô :€ó‹hÖFIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment392dôD= IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment378¢€­ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment393ót«êIDATH‰íÔ1nÄ P" wᙋ¬ÌUrÈöj‹-÷{"¾VŠ´Xi¦@þ1[ó6QL1O€˜a0؃ù+ª®ÄÐ×5Ù¯k|Â}ZÔu 1·D/±“™kêü¬­«ëù¡/»*\å=³ÇÔ¹+QÄÕ^¹ÎØR‘Éð‰ÁA=Ñ¡Á@ÖªE°0äÜôZô¹©ë¶2Eêå X¢ÚJØŠÁôä#Õ©höD/zê“2µEÓž.?hO´ÑÎ/ $n{9ÊêëdÒ7©ëmÁÕeÖ)øBµéÐÜ?¦ßô3zè¡ÿ@¿þññ›ZX»IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment379m¥°;êIDATH‰íÔ1nÄ P" wᙋ¬ÌUrÈöj‹-÷{"¾VŠ´Xi¦@þ1[ó6QL1O€˜a0؃ù+ª®ÄÐ×5Ù¯k|Â}ZÔu 1·D/±“™kêü¬­«ëù¡/»*\å=³ÇÔ¹+QÄÕ^¹ÎØR‘Éð‰ÁA=Ñ¡Á@ÖªE°0äÜôZô¹©ë¶2Eêå X¢ÚJØŠÁôä#Õ©höD/zê“2µEÓž.?hO´ÑÎ/ $n{9ÊêëdÒ7©ëmÁÕeÖ)øBµéÐÜ?¦ßô3zè¡ÿ@¿þññ›ZX»IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment394—á IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment380“áP IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment395úÑžìIDATH‰íÓ!nÄ0PK¾@%_£ ª¯U°ª³*Ì•Ö È5¼Z°°^f0š_G¥þ©TÐ’˜<ÏHã™1Ø9£ù{½-n» Ñ‹f1±¯Ó~’ú:$ S¢.KXê‰Åf‰Ky÷}µ[lyÝÓÊtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ò®¦„Ñê“ëë=ãÅB‰¢hh:0=…skÓ·˜„éÐôZB_õ'}Ž·wb©Ê·¢_¯º"ñö ¿¡¾MÝú`Ý÷Iý\Ù´cÁèé¦à—ОüÏîz衇þJ¿'ó#' %ÙIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment381äæ$ÆìIDATH‰íÓ!nÄ0PK¾@%_£ ª¯U°ª³*Ì•Ö È5¼Z°°^f0š_G¥þ©TÐ’˜<ÏHã™1Ø9£ù{½-n» Ñ‹f1±¯Ó~’ú:$ S¢.KXê‰Åf‰Ky÷}µ[lyÝÓÊtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ò®¦„Ñê“ëë=ãÅB‰¢hh:0=…skÓ·˜„éÐôZB_õ'}Ž·wb©Ê·¢_¯º"ñö ¿¡¾MÝú`Ý÷Iý\Ù´cÁèé¦à—ОüÏîz衇þJ¿'ó#' %ÙIEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment396c™€$ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment382}ïu| IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment385ã‹àßÏIDAT•-Ð1j1…á +ØfAX¢‹t1ƒ61$e®k¤ò)s…5)Ü¢ÅEd,ôg¤xª=ÞHØQd‰=Åñù-K–'#ûNLF>83 òòQ¶¿2=T¸•÷Üp®9‡ˆm Ò5y<ñ¶L3 =³+÷ƒ¤ŽÙo$Þ±t%Y#©+}Ð&"$Ïþ†Ý¦Š°Vl“÷—ŠN7—nHA®Q“ûM¶¨Äê×TyÕ´ß\Æv²6ÝHvõ7žµs›Ÿü-‰´ ›)¾÷IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment386z‚±e\IDATH‰íÔ±nÂ0ÐCýõ/ôücˆkÕÁc>© é'8bȈ#†ÂòõÄvˆÔ©œ"%ÒËY¾s.ÀÄ<ŠÆSu} 0Óìoºw‡Ø§\@¯RnxE>3·)yƒÞ$¥•áÀì’:3j 3¥¬>jX¨ŸèZ²Ò\wyW¤ %ш»¢à‰FÓE®³ÆR9YõNÛ>);œ¨"³u£J ŠíT/tÁvŸYÔ'ý`®rE¼,õÅ`ÕO”hÔµ–cYú¬V4UÄúÇ™%JU‰bÒQÌÚc Ýzbe£©§êGõlë¹w?(Úšg+_t à°¾Óv¢JŽ ÉÚ]ôtSV;Æ&×{Q”}ù@uyŸ;ùÕJŸÑ]µº“Q8&}ïI;=¨|íç`Žg–k 8zuU’^‡O.ø[æH”2¡’exÒX=Îã©O}ê¿Ð_”ȳ’Ë IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment387 …ó3IDATH‰íÓ1nà `wòÈ^Ð1C%®ÔnªâNÞÊ|NM*9BmyðX¢,X"¼>츒1î–ÍHˆá?ïHðŸ‘'7Ð~]€±ª2EÇuÂã M@TW¹®Êz¥dQ¦.WåQ5(ÏVD:Š$ã¾2¢\U¬,ì×UÚ;ÕDܰ‹ªÒ\5Z@Ò3)á-Ô0Ì[Ÿ\–÷Y ]9ÃοȇÅÑ MŠ•WÑÆ¹QZªÁ)>±¼Ð:Ô“!“^…ltØ/i…Txb–ꀴ»*ûªe§~Rz¯f±wÒ„¥¶=þ ºsP)3åí…–”ôÅñB}Úá¤Vê‘Í¢ùqÒ× e½›ë8¼ºgduS_]Ó"úý÷ËDDoô÷7ÝtÓMo¡¿׿¬ÌKIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment388:œbÈIDAT•5Ð1‚@ÐI(°1ÛÒq +÷J–F4x;¯a‰¡ ô  J—Ø|âúÇõW/ÓÌäƒá,ÆdÊ$àJÝfh*²T¿BÙ’õ› Ǽ{qB~8ˆÚn ¨]€ôަMÀ‘ÑCl†Ð°·²”©‡ÀVF‘A ÛX±‚SºˆH0¸\#n „YÞÏȯ¢_ÜFÖù0phÂóŽÕßä9ðˆXvvF)´ýÈJÇóÍó‚ºf•ê:´Çl-§aéôB>Ú»«¢ëÛè§IEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment390Šú%^IDATH‰íÔ=nà pª låUéºû¦È– ‘±”!ÇèЋehŽ©K¶7 (4|ØnÒ9ªÂ„ü³dÞûóLü«#×¢ŽzûvÚJ’²Z"Ì]ÕFÄgôŒ"!îÜÂã¤~ Ë/ÛÎýQ• x:!ØpDØ›¢ Tn,lP\P¦ÝeåAùÊ–’ï©…_º­êDTjyÕ]UïFúÁ¶}åCýd;Xë¬cEèdVô‘Y–õTvY WC¥ê)ë=éjfš¨i‡Š=õŒZNõµ *Š.Ý@ÝPCÉc-)ˆ±Ê¤6¨¨ôŒš6)ô2ªÚü(Å‹jÚ ¢è:ªN*B7ú7ç]G•I3­ØcF¿)ºEõúXt¢ W"©]ÄΘ—Œ–ì “<(Nc¾Ÿ{“bÉLQÉTÜ… =ø+…y3©3ËÓü¾úóëzþ*7½éMÿ‰~ëÈ’äÄØÂëIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment393ót«HIDATH‰íÓ1NÄ0P¯V"tîiæ 1W¢Ü"b² RèÒrЬ\ä ”‰öF¸y°(â$K…h2e=Yžù–•\¨BýîÅg«ê•¸ÝŠÄЬ¢Eõ Üú•XÆ“]Ñ{mçê0ëü¨° ð›Šî.êûÚ½ƒŠ£Ee¬£Úú…™$ê9ª…¾›©õZʨMb^,k§¢šºx¢¤-r¹v·¡+ªêç»D àíâD¢ÛCªWÚk- …òÐ>¸D!ªƒbkS•JdTÆùÙ0ŒÀé[­MÕü¨£ª·Sc4Lp\Q '‡£¾‘IâTC<Ɖ^H›ž!Q‹Rú&40QlЉY½æXšD©4äÌ9V‰:ʘäÜõ×2WíQx^Ðï¤þœvÅù°…øË2™UCãºü?ä’ʦ›nºéè½ {…¯IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment398„!­#ÒIDAT•=ÎAJÄ@Ð?L ›`_ k¸äZ.Ât$Bo/àaÒDð.:¸˜¥5»ÊþV"øWª¨úà@Ë·"×,eD:ñÃñ¾GŒ|q¥o±&º ¾AïVeƒY.nýá3åÒÅ̧[f…UFƒ-_E»”‡$>T`â¦ãÚ €jN˜µÛ±üáf8Ûèó@Â?®™opÙ×_Ù:;aMå+Âf(¾EœH+&Žï䤰{{ôƒÛªÓùx´‡IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment399ó&µ¨IDATH‰íÔ1Â0 ÐJAbìr”\«j*1ô\N¬Î$7&Ð ñÿÐ¥K¼¾Á¶ôíÎHMÝaú¤:1-c´T}ÎX£O‘fëS T=ÖóÂU‰Î‹öHתy§ZíËÔ%Ü·DªÁe¬æ]¾b½Íza3Û‰ªíMü>-©úš«@T¢A†ˆ5ŠþǯÚc…Z'?ûÞMÀPÛ…¢Àùš6mÚôWßd€õ…ÈÆ–IEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR=·!+Ü pHYsb&2 tEXtComment402°yéñ¯IDAT•5Ð1 ƒP à:ÔÍÕ©ïNuè¥:=€Gð*Šƒ£W°88VqhÀÇû› ZIGÃEÔ>ÿB²äبè~«ƒ¡P:fR4C®Od%  ƒ¦8Uð\ÕËš ¯fÜŠ¿“®<®RC†,<.ªrÓ‹¡CìLÿ*º2½õ¢æ*ýæSÓ…¼¨–"¿;ʲ¦–£¦ÎÌ6õš>¯ìWEë¬lÝŠ¡us¦íFÝÉ ©ET 4¢€M¯!˜zY‹ƒÒs•l­‡DüÝýîºë®»þ…¾Ò? }´IEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR@´–%ô pHYsb&2 tEXtComment409'«0y­IDAT•UÏA Â0Є.sç"bÎâ=¤U\dÙ+EºÈÒ+4dá²)ÝD(ùN¢".|øü!IcÉžÂ#ônß 7vÊg¨˜92Ƕ`#8±¬odAÚóøÃzØRò< ´²´üã:ÒT1xê+àÉXiÖ´¥–c' Ú©Š3µ*B-+ÃÐ<Êx5áÑL%2üu†s‰ô¨`*R‡Wª kh`FQIEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRB{?&l pHYsb&2 tEXtComment410Gl¹œ—IDAT•Eл Â@ `w”Á£8›%T)³Ò¡ î„DË! ‚dñ=qõé/ü-%³ƒªÈ¦—&Ôš‚zÔíè½(¢R0ÝT05%J›„³®UÓÈšNŽ»4¥{×iâ¢ïÈÞCŸ¡gP©:†V×µIž–…&òø’‘¯;SßYHÿ*·m«iÑxÑ=ÿf“'YOv?‰X¾æ‘§üRIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment418I·1®£IDAT•eб Â0Ð’6ˆG¹µ¨“ À¬BD Öp­K#YþÜE˜WO¶ïßÙà¶BÓH߃ £C"­aq…è¹é Q² “äqúª68Í9 É«¶ø¡X ÑVìðÚàÇÊ,<)fE€n¯HvÖÜ’âÀ%‰|ê úйBsäýtG^ ñHöV;¦ö½óÚú®ø%‡B¡IEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment419>°8•IDAT•]ÐM Â@ à'‚Kçæ&æh¶]Œ®<‚Wqô$/PWŠ-yÎÕ,ÂI X²fÜ8e›Äd^Ôd0¨é lùª˜tÒn†Å?ì¦ ¦ VŒiœŒsƒ{CÅûŠ)h <˜KâË>æüwUwÌN±y78:ÃÚ;âíK>ɾ|#½åY®³¢¼n$IEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRA[TNÊ pHYsb&2 tEXtComment420lAê_ªIDAT•=Ð1 Æñ×8tôoâ5Œ}MÁU Ž^á5:âÖ¡áóA±L?Bï¡-&|w ñ±›œSyèÆ=7%˜GÓ`¢ŠU7þ²³ŠÓµiT SÞµªäRuB¥h¼ýbQ*ïVͪIO‰‚ê^5©ŽõÆ(ȶŠÉM}Sd ¬¦L†]š˜Í«¶I‡:½Àw­h`•Vf6|´<û3÷å_~ĸÌObIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR=·!+Ü pHYsb&2 tEXtComment421FÚÉIDAT•Mα Â0Ðo¹0]FÈTd´ÄÊ ¬‹"k±€FJ|ùÿÛ@®z:]q„;$‰[,ŠÉaR\G…Gw«èƒÂ‹Ž¿ÈXÅj² P~½à0{ÄDXif†“†‘ct¢vEA³AÆ l‚÷|êù?žƒQ {À™qaDbôäN;_!¶2é?IEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR@ÊöQ pHYsb&2 tEXtComment424k,.F¥IDAT•MÏ1Â0 ÐuèFŽà£ôh1p Ž‚ÔD ,H\¡ ÝŠúqL…êé)þrlðWŽ,äbÈžE[_ñ8ÚK`Ÿ ög…#7È‚å°1mnð̉.ò.ȉ§Ä³`JÔ™ÁSa]mÅMaûh’RtËžƒSx² –Fˆ^SwÖðÇVUL+‚[LèÐÔ9 ;ETDVñ`¥´sÊ/ IEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment449CÇõ}¿IDATH‰íÓ1 Â@Ði„¹@Hnbn–([¤37гˆ Çˆ"X§Üb™ïšzÿ66 ™rª?‚ÌìdUà Œ\Ï€ÂZª¦f Ñ}ÔÐiF=Õ¡ô}ÉUsê£iµ¬†¬úóúR¿%:;\50}8¸žŽjÑ›C­‰‹N.­ê,*†¤ZÔMIU¤é³Ú5iËú£#oNiT/QCsÊfYÛ­‰š`«ˆziïÒ³Ë&MÔé×~ÕUWý }^}éÅ­¥i IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR@´–%ô pHYsb&2 tEXtComment454$m¸¤IDAT•UÏ1Â0 PGSŽPŽÁP©âV •ZÔ‘3uâHuèêŠQ?všJ%/‘ã|fH@x ( Á°(°ÛP ®ð p Q8|ð‡%KŠÎj2Òs9á sÀÄxü`4´U¸mJº+¤ÖâëÑi<©d8ê¦7½œíÜ¡çæ@¾à6ú9ónƒO¿ë¬·â-êsÒµ-Ù¨—ªko>¼IEND®B`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment458-Ûôª×IDATH‰íÓ1Â0 Р l; ¾7H¸YÁU/Š%HQÉœß ‰¡^<<ÉŠÛéF$÷C-ª«FÍ$ e@3¯Ž“ßÐnXî@%Z&¤£éJÓ–¤©)ªÜÔ#uQ'u¨_S‰Ìj½~5­¦™GP¹æ¦¬•¾›öw$¹¥iH}2kÂwžkµ$H½Ö3å¾fç_õÄ@­Ù¥ž¹@Šiÿͦs¹TÒi*^Eá^ÉÑ~ÿùjG2«¢K² op#vÝu×]ÿH?àúÀ6-•+IEND®B`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment464@ëBÏIDATH‰íÓ± àk:tkW^£C“{%GÓÖ¸øVšø"8¹²‰ ¹Œ#?›ƒ 7‘|Ž -ÔJ¿Ua½a FOPå€Õk(¨[|ÔkÀjÙ‰¤Wv±±¢¤kQÏ|aݰ“ÊÈv\ îÙø 4DÍ$é£.0gïÙ*T—t€ºë¬ —&¯–š¨=1ÖžhÈwEíGMVÕ§ûU°rÒÙè1ß•z“ÞRgüdœHm&F*ÔÊV%ûŸ’61H¤ßÚ·PU«V­ú7újðö—<³¢IEND®B`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment465xGÛÔ¸IDAT•UÏ;Â0 `Wš-S'r•¸ Ç`J‡ {®‚Ô¡c@*Fº‘!ò“ $&¶,?O࣠\ƒš Ì_L –  bÆâ1Gb…q ìÈH­4{tíîò@>ZvnèíYÍ€¦—çZæ-žÍ#ã:$³fX©èŠmˆ"gÃÖKT¼CNµ!¸kpúã’,­0>¶ØR" S<_ä¡þV§ü—n` ÒI’˜ÛŸø»¹DíIEND®B`‚ pix[153]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment468ö§iÙIDATH‰íÓ± ƒ@ P" J6ˆË X%›˜tÙ‚5R¥ d„¢H{(..ç=ߢI‡Û'ßYòw¦FÕÙ®u6u4õóï™FX=Pa•ª{ZÚ@=¡f°”TIê:žîM¹Dÿ¶<©hæzÑëèÓ«u ô¾h‹TxmsCÙØ ­t5uöMéÕZÚ8Z ñH~]UÎVwÉ ÙÉÐ*[}$C%Pƒ’³hÕ£l…Àݨ§hì(-Þ«À;"5¢lµë®»nÒF„~{»IEND®B`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment4706¡IDAT•eÐ;Â0Љ\¸¤¥@ÊMðͲ‰r0@\ÃT´–hŒ0žìƸzÚ4kðÎõ²Û06LÄC§ÈÒö. Þ@o¨6™‡bˆ_°Cqгâ5“'Ã[ Ï™U1â1³(&Üþà'æ@ÈWôIá¬ÒÀ‘Q¢8‹%mЦoÈÇ4~C¤P=²®‡Š€¢Ñ¥B A³Ø¹íS®\j!©¯$ÉÄ´IEND®B`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDR: kVx pHYsb&2 tEXtComment471f1.Œ˜IDAT•UÐÁ Â0 Ð1@Fè(-‰ #t‰€8´'®•¸äPåc')_üß²eðM­®Ú× zA*0‚Ð1¸™Ž«àDq1ex14Pñ4Å‘I€ÂY±‚±ÄŽ5‘ƒâ¦Òà§}Tœ½È`óîvsf˜<WÿèØá2F[Å~@^!+">™K¦ D¾wIEND®B`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment472ÿ86¢IDATH‰íÑ1„ ÐI¶ØÒ#pŽ‹-½’Gá”ÄlVÑÿ­6L1 y™0|DIyyJßLƒ¸h Îb<Ö &: KUxopL}Q‹Uyѧ¶d™tÜÎH¿7tª æ<чڲ^ë2è©~šÛ šÚ/hô<¼ÛŠÎ^Õ“-PïJ$ÇÅwYI +#U)³Q^äÞg·šéÎÚµk×®ÿ¨+áÆF¯‡ø?IEND®B`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment474[ÚšIDATH‰íÔÁŠ1Њr,Á‹‡fê7æ°lü”ý„=z23ÌÂÜôü½ ìo˜Áƒ×/9)Ó£°lo`/jAÒtIŠ¢h'¶ðw+=®ÀvÕôN¶ÛŽ2ÆÐSö¥JS«‰æ¿Piô}幯FÃS´Îj ñWÎiIËÍ™$ã”ßTØFÇÀŽ/¬Žžß n4º¸1 7«VÅèíq„>Çñå‹Fœîw&fÄÀ]ÛAÝþ½c¡7Ïh_«áqÒä+$[«MAÐ}D~ë’«;ÇŠ—õ¤×ÁmHjðòUpiA‰¤¨ÍX©¸IC™~*5šˆ&ŠWÙñÅ¢¨ÉÇ7¹ôŸPU«4iøZôtÖu£¼¾_’¿=IéìViÒãY)ª •–v8Øï¿•ÓU.*ȯS@&ÇìG•Í bfö pHYsb&2 tEXtComment477R‹¹–IDAT•mÍ1 Â@ÐXîr‘€[L¬l„\@ð*ÙÞ;+Û€…[ŒóÝMDÁßÌ+fæƒN ¼qD÷P°K-è;IØó`«õ‚&ãLò²âV¼NЊ)-4¤©-^+ø iñ,ð¸gÄ ÝröÅú]l 6†é ¹ 0ºð`OÉP8͘ᘯbí¬Ô>³DÞμæƒò¹öIEND®B`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDR=!B ž¤ pHYsb&2 tEXtComment491ø²¡IDAT•MÏ1Â0 …ao9B¯Á–…#0fKQ®•ª×p&Öt RÔ‡íª”H–¾ÉþC6™FXQƒzPÌ M‘ &ótLpk§«¡"¨Úþk í@?m„cE½!˜±dE‘ŒQ±ð]! ½ˆâaÇD>^cL…üâC>‘~xƒ5Õç 2I˜gY×È·¨Àþø 5÷¹9Æ IEND®B`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment495ÿßÇ‹IDATH‰Å•ÍŠÛ0€GS_Œ²‚ÝGHo.5±a¡}…¾D!VHÙcÛcŸ¦Qéué3¸ìa/ qÈ¡†5VGvK±7Ð¥¥C‚e}iFóc€ÿ!éYzuÏ® €=Ù¥9z’VOFgi§Ëÿø¸¿ úÅêÍ`ÞÝö¡Ý1=ª ;¡hâ+úóvèéÔ9î.Ú§½_•Ft¸;@±Yàê õSVǺe zft4²Zo}OŽ£!Ú]sÁÍ ]ØÍ…p'õ$¼G`GÙµN½sƒq³+\WÃ;ÛB$^9{¤Pìoy‚åüðfBoµÌc¯ˆ‡i¸ZŠIÈ£áCÆrÒð‡ØKˆU&©äÍò e¿j=BJeéx¨¤}¢Õè9µEO¯$”•Of“.ëÑ ÑÚW)îÓé´ õ£}vj"¢®OIXEF5R&€µå¿ç¬u7¦Ìc¨$ɱp6Ša¾×Š6µ`ô™xSx’Ë18*g^h?ƒ¢þ,¦íŒNo9Ä3º£·˜/úçîx*{Þ=¢ìÞ¤[˜‡ÅàÒWû4)(~,PôòÆüD”0•ªuØG€©F%OÔ!ú)²žÊ©ã g–ŠüD£¶TÙ0Š.òô¤ÕW`×dëˆòüÄßÊÃ\{ óL®ô6×Z•­mÉ«LŠ#=Ô¨,iç×@”÷>DIB˜e?Õ»i•¬É£’œœeI¯ õB†Š¦™r^4o¨MzI£ûÆ B~’b’Ü®sÕS[ºÙqH6éºSÛJZ¶·žËÍ–yC)Zû–ºo²ßåÝv Õ÷WIÆ©®+åíÃŽ“Eg¦*à$NK‰æÞê,'{IEND®B`‚ pix[161]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment491ø²‹IDATH‰Å•ÍŠÛ0€GS_Œ²‚ÝGHo.5±a¡}…¾D!VHÙcÛcŸ¦Qéué3¸ìa/ qÈ¡†5VGvK±7Ð¥¥C‚e}iFóc€ÿ!éYzuÏ® €=Ù¥9z’VOFgi§Ëÿø¸¿ úÅêÍ`ÞÝö¡Ý1=ª ;¡hâ+úóvèéÔ9î.Ú§½_•Ft¸;@±Yàê õSVǺe zft4²Zo}OŽ£!Ú]sÁÍ ]ØÍ…p'õ$¼G`GÙµN½sƒq³+\WÃ;ÛB$^9{¤Pìoy‚åüðfBoµÌc¯ˆ‡i¸ZŠIÈ£áCÆrÒð‡ØKˆU&©äÍò e¿j=BJeéx¨¤}¢Õè9µEO¯$”•Of“.ëÑ ÑÚW)îÓé´ õ£}vj"¢®OIXEF5R&€µå¿ç¬u7¦Ìc¨$ɱp6Ša¾×Š6µ`ô™xSx’Ë18*g^h?ƒ¢þ,¦íŒNo9Ä3º£·˜/úçîx*{Þ=¢ìÞ¤[˜‡ÅàÒWû4)(~,PôòÆüD”0•ªuØG€©F%OÔ!ú)²žÊ©ã g–ŠüD£¶TÙ0Š.òô¤ÕW`×dëˆòüÄßÊÃ\{ óL®ô6×Z•­mÉ«LŠ#=Ô¨,iç×@”÷>DIB˜e?Õ»i•¬É£’œœeI¯ õB†Š¦™r^4o¨MzI£ûÆ B~’b’Ü®sÕS[ºÙqH6éºSÛJZ¶·žËÍ–yC)Zû–ºo²ßåÝv Õ÷WIÆ©®+åíÃŽ“Eg¦*à$NK‰æÞê,'{IEND®B`‚ pix[162]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment496fÖ–¡LIDATH‰­Õ1sÛ6ð±œ;ÖìÈAt—¡«¶jPçòr×ECb§»zÉ]>BúQ Ëà±ý¹©¯Ìi0НÿGº6Iq,’æOð`¢ÿõ:—›Ÿýxj+Êäá Û]˜”\óZêvcð¬Üˆ¾½‚*ç’qK[rZù8¢Äf£º¤¦-:Q³ óE^­ËÞž¶%¿ÍÊ3Q³¾*ŽYœåTøùf ³V¥-ôj øõâÛïY Ñ´èz9Í‚'b6¢Ë…†zÅžz𥒭òdc? ‰k5›R⣪(ÚâZSæ ækì«~Ò¿´7wDgô½[é`8tƒ…V•³RDºªÊæEÔ“®T_£BÔÔÅ/ŒùÖ?ë„T Î't~cäã¶”EÑGýŠ1|ÓnÈ ;”„¦¤¤B>DÓÑ«dL ØßѪpϺmbLu©KY?³]´;ãçr{)¹*Â@›Ñ^Ö[ZXѪ«ø -­h =P+Ó_n¶9"¬ksª´yƒ4íJ¾aÝïÙS.ú«W»È7–ûš£XÒõò§Fw¦¯ëå’æ¢÷om‘˜ S]þpøÊx¨:ÊB¼à‡‚ŸtñŸ–déü ²|ÚVÒ3=ãÇ«£3ò„Ä4Í*mo­#PzUðËÿØÎNYIÕµ­ý<·wEOé‚,4×Ѩ÷–ïŸÆE1.ñÈ{/Bÿ Ë'1Ëö¸ÃÁ`ü¨Vt¶¯²È{ÕcZC½{wßÕ¦´÷œã›h}NêdÐÖË­øTAùÈ»¾ªVïj™Ø‘÷=U×AîlÐüg_?GyÖhñùïg½hzV´i&zà¬7ßvg©ÒJÖd²]]µ—k ?QèbáɯÎs}ªò/êU3#’!ëþ:ãÌMÕˆG.z3J_»öP*\¿y7ÈÑäµTŽºâŽëË¡&hVfÈÞ-—Cűƒ¥Š¢;®×CÒªQ˜Ò±£ÍS¯4 Q–««’»sÒ(9TìÄ ö‚ÌdNúškzÔCG娲¤÷ÌıÕÁ¸eûº@<Íbª~Ìì1Ù—±©å‡X fdBÄŒQ嵫ÎìKtŠŠU›”È^lЦÕºHDB³—aIEND®B`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment492a»R¸LIDATH‰­Õ1sÛ6ð±œ;ÖìÈAt—¡«¶jPçòr×ECb§»zÉ]>BúQ Ëà±ý¹©¯Ìi0НÿGº6Iq,’æOð`¢ÿõ:—›Ÿýxj+Êäá Û]˜”\óZêvcð¬Üˆ¾½‚*ç’qK[rZù8¢Äf£º¤¦-:Q³ óE^­ËÞž¶%¿ÍÊ3Q³¾*ŽYœåTøùf ³V¥-ôj øõâÛïY Ñ´èz9Í‚'b6¢Ë…†zÅžz𥒭òdc? ‰k5›R⣪(ÚâZSæ ækì«~Ò¿´7wDgô½[é`8tƒ…V•³RDºªÊæEÔ“®T_£BÔÔÅ/ŒùÖ?ë„T Î't~cäã¶”EÑGýŠ1|ÓnÈ ;”„¦¤¤B>DÓÑ«dL ØßѪpϺmbLu©KY?³]´;ãçr{)¹*Â@›Ñ^Ö[ZXѪ«ø -­h =P+Ó_n¶9"¬ksª´yƒ4íJ¾aÝïÙS.ú«W»È7–ûš£XÒõò§Fw¦¯ëå’æ¢÷om‘˜ S]þpøÊx¨:ÊB¼à‡‚ŸtñŸ–déü ²|ÚVÒ3=ãÇ«£3ò„Ä4Í*mo­#PzUðËÿØÎNYIÕµ­ý<·wEOé‚,4×Ѩ÷–ïŸÆE1.ñÈ{/Bÿ Ë'1Ëö¸ÃÁ`ü¨Vt¶¯²È{ÕcZC½{wßÕ¦´÷œã›h}NêdÐÖË­øTAùÈ»¾ªVïj™Ø‘÷=U×AîlÐüg_?GyÖhñùïg½hzV´i&zà¬7ßvg©ÒJÖd²]]µ—k ?QèbáɯÎs}ªò/êU3#’!ëþ:ãÌMÕˆG.z3J_»öP*\¿y7ÈÑäµTŽºâŽëË¡&hVfÈÞ-—Cűƒ¥Š¢;®×CÒªQ˜Ò±£ÍS¯4 Q–««’»sÒ(9TìÄ ö‚ÌdNúškzÔCG娲¤÷ÌıÕÁ¸eûº@<Íbª~Ìì1Ù—±©å‡X fdBÄŒQ嵫ÎìKtŠŠU›”È^lЦÕºHDB³—aIEND®B`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment497Ѧ7ÐIDATH‰]–Ïj#GÆk¶…;£VØ‹`Úà%— <¾å–gäãê(XáiEM^ Î;䲵Ђ/=BÆñÁ—·ñ¥†©|Õ#yíƒ%ô›®?_}]˜¨{²îCÕDûd½|2÷D Yÿ9•?Ê„ºòsúUGqvÜ£ãú3š“–ØÚÓ„èõs:H‘•„ë2fÏ#çEúŸ*?N_OŸá“íçôèÍÐ_‘ÑíéHÕ?4”ôŸÞÏËVúè«H†IÒèOqŠ’©Wº>R슗Íì;DÝ':UÝÙç4'Ž:äøz¨Û”÷yÉ2­Z톤©ÕúÅqÝfìu]ªÎë®›íS2ÊQ\PyéEÎ'­ÒÏõ~ êàÙˆTwv)¯1dV¢©’¹[^{Š\ƒfuž¨¥˜¨|õk—5¼¢ŠtMÇB«¥Ä%ó25&„¾Íø¦‹·¯Üû¿õt„‚S¡åMW[Y£¦éщ§,*Ò¯öáœø<óHÉŒìµPGÔMh2:;åÌA4U/ùHü2€Žéýa„’#ôÚt‚h ´ú…Æ ³z‹Å@^ÊÍ,ÐñB "ý©°O[=c&tÊÉѽ£FhCMoj9ÐknÈDR.ËB¶Önhª›’ñ37³ñ:îhÑkK àuhÇjÖ¤î{0—•–¦¢xSºÜÖUmÛ€{Öß›ÒÑè{” ¬Ú–Îʺò%œí— “Qj˜ 5çZµ•ç h4§h;Úhh«šêŽÛŠùÊ¡í/hZþöV1«Pf±b¡¼¹Ù{T$‡|íuBåÙ\…´U¬´â/ƒ­' -¨/É@|äFÁröqÞцù>ê£U¼qš\À–—¾@Ô6òOY£©wØ#ýk¢=:³6ëú…ÏØÛ{,”µ\?˜˜«ºUOýÚPSy jëñÔÜÖüDyıÛ”lïy³¥Õ/ÜwÌÁ *è*ô´£¸‰å†ï–°j«!X&¾R¼\Ü í'z›Œ,Úßño²ËÅR¨¬ ¾¸MÈ@«9óìwâùÂmiÁT ýPAÎÙ›ŸAO·ä:Ñ Œj±âe9sê2m´ÐÍù’±ÚAørÅ5Ýl©™Ïa*%”Ù^Š2È{˜œ5æŽÿ³©°Xˆ¼ö&„­Vócq€®ã°„¿®u»£›«+ж2|Ñ®¤…'ýŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­ÛÚŒ;OÂ:j{ÃþôÄÚ™H¥›|K£iEfW reM2‰‰þÍmÐë5è¶ lü× a•!'·c}ÕJŒ`ã;¾ìgœ =¡ÿ†àHP¡F:IEND®B`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment493¼b.ÐIDATH‰]–Ïj#GÆk¶…;£VØ‹`Úà%— <¾å–gäãê(XáiEM^ Î;䲵Ђ/=BÆñÁ—·ñ¥†©|Õ#yíƒ%ô›®?_}]˜¨{²îCÕDûd½|2÷D Yÿ9•?Ê„ºòsúUGqvÜ£ãú3š“–ØÚÓ„èõs:H‘•„ë2fÏ#çEúŸ*?N_OŸá“íçôèÍÐ_‘ÑíéHÕ?4”ôŸÞÏËVúè«H†IÒèOqŠ’©Wº>R슗Íì;DÝ':UÝÙç4'Ž:äøz¨Û”÷yÉ2­Z톤©ÕúÅqÝfìu]ªÎë®›íS2ÊQ\PyéEÎ'­ÒÏõ~ êàÙˆTwv)¯1dV¢©’¹[^{Š\ƒfuž¨¥˜¨|õk—5¼¢ŠtMÇB«¥Ä%ó25&„¾Íø¦‹·¯Üû¿õt„‚S¡åMW[Y£¦éщ§,*Ò¯öáœø<óHÉŒìµPGÔMh2:;åÌA4U/ùHü2€Žéýa„’#ôÚt‚h ´ú…Æ ³z‹Å@^ÊÍ,ÐñB "ý©°O[=c&tÊÉѽ£FhCMoj9ÐknÈDR.ËB¶Önhª›’ñ37³ñ:îhÑkK àuhÇjÖ¤î{0—•–¦¢xSºÜÖUmÛ€{Öß›ÒÑè{” ¬Ú–Îʺò%œí— “Qj˜ 5çZµ•ç h4§h;Úhh«šêŽÛŠùÊ¡í/hZþöV1«Pf±b¡¼¹Ù{T$‡|íuBåÙ\…´U¬´â/ƒ­' -¨/É@|äFÁröqÞцù>ê£U¼qš\À–—¾@Ô6òOY£©wØ#ýk¢=:³6ëú…ÏØÛ{,”µ\?˜˜«ºUOýÚPSy jëñÔÜÖüDyıÛ”lïy³¥Õ/ÜwÌÁ *è*ô´£¸‰å†ï–°j«!X&¾R¼\Ü í'z›Œ,Úßño²ËÅR¨¬ ¾¸MÈ@«9óìwâùÂmiÁT ýPAÎÙ›ŸAO·ä:Ñ Œj±âe9sê2m´ÐÍù’±ÚAørÅ5Ýl©™Ïa*%”Ù^Š2È{˜œ5æŽÿ³©°Xˆ¼ö&„­Vócq€®ã°„¿®u»£›«+ж2|Ñ®¤…'ýŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­ÛÚŒ;OÂ:j{ÃþôÄÚ™H¥›|K£iEfW reM2‰‰þÍmÐë5è¶ lü× a•!'·c}ÕJŒ`ã;¾ìgœ =¡ÿ†àHP¡F:IEND®B`‚ pix[166]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment498n»¦ƒIDATH‰¥Õ½nÛ0`4jí¦ºvk‡4|”ö š±šREz?G§¨Èø *2VFSÉëÝ‘%Kjö ÿˆŸx:R¤,À £,€­Qî ~Wø*¸•Qàu‹o­•“ø]]k X¯È ZÈ h('h,Ô¦êXo2¸Â.Ͼ¥ãš» ­¸Î@|: †3Rñ¾/û„UÌ2¯![×Ú—ª;¸n‹šßƒæ6ãPõ@kÒ è[:ÔNnFº+ªÃ½V|¹Iæ09ÏHºAC-x çT†ž3ª“NÂ뎕m9ì«2°GR5Vãõʲ¶A]RjÁµ0Òw^(e´p& ‰ÝµWegûjQ_-ï;¾_ôñëRlº4³MÜæoÃu¿oúuÁÑŠÇ+7?ºœè<§uüq쵊cõ)¨Áûý³ÆOŸÙЦò‘Êé«2¶‰µÈ©âÕHÕXªpÅ‚ZðîØQßXDÔ–žW©Ä-5u0ƒÚf&º‹zêu—žP3}+tãwus©áÞW0 Ô:¨.æ4.G3ÝJ¨ý¬nç« ±ƒÁ¶šò5Óifþ¯šœç¨v®ÝDm/à<ÒZÍ© J[g2«¾ï &aX÷¤Ý’ê)ÄäK#‚Xóõø}-ýñ6S²q]}]XÐ<ÏN-eþ ·’¢pã 7sIEND®B`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment494ˆØ÷ƒIDATH‰¥Õ½nÛ0`4jí¦ºvk‡4|”ö š±šREz?G§¨Èø *2VFSÉëÝ‘%Kjö ÿˆŸx:R¤,À £,€­Qî ~Wø*¸•Qàu‹o­•“ø]]k X¯È ZÈ h('h,Ô¦êXo2¸Â.Ͼ¥ãš» ­¸Î@|: †3Rñ¾/û„UÌ2¯![×Ú—ª;¸n‹šßƒæ6ãPõ@kÒ è[:ÔNnFº+ªÃ½V|¹Iæ09ÏHºAC-x çT†ž3ª“NÂ뎕m9ì«2°GR5Vãõʲ¶A]RjÁµ0Òw^(e´p& ‰ÝµWegûjQ_-ï;¾_ôñëRlº4³MÜæoÃu¿oúuÁÑŠÇ+7?ºœè<§uüq쵊cõ)¨Áûý³ÆOŸÙЦò‘Êé«2¶‰µÈ©âÕHÕXªpÅ‚ZðîØQßXDÔ–žW©Ä-5u0ƒÚf&º‹zêu—žP3}+tãwus©áÞW0 Ô:¨.æ4.G3ÝJ¨ý¬nç« ±ƒÁ¶šò5Óifþ¯šœç¨v®ÝDm/à<ÒZÍ© J[g2«¾ï &aX÷¤Ý’ê)ÄäK#‚Xóõø}-ýñ6S²q]}]XÐ<ÏN-eþ ·’¢pã 7sIEND®B`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDR<“¿“G pHYsb&2 tEXtComment502±»ƒÆ¿IDAT•UÐ!n1Ð,Ln°W0 ¨â+-Ü¢Ûä*k,Ë奠–gTdÐcÿÿ¾Óî¡(;Þ„:9®‘-@÷=.lGèàè†ØâÆ|³I~ÁƒUR9et¼ƒ:²ãä{eª§#²ú°V–€¯:;&°N†¤Y™A·,+.êˆ+ö:KîñóMM¶f‡ÒâEa¸[yÇ!q¼,££ø”›<òi_°òÇñ ad¦zªeŽIEND®B`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment513ß§‚ªIDAT•EÏA à Ð/ d“#„ä"R¯Òƒ”Œ‹%«^Ã’ Ø qú5ºñΟ¤U‹è‘!I¶bw¡ÞeK"=FÄ®¡G\46|µbnHד#òÊÏ¡eD0yBxV$‹O"Xœ,vÊ^'‹ÙtDMeà±0SýïäX'[ƒó0ñ†4ð"€®A€!pÔ(=¶Cw—8áÑÝ †(xÕ½xLþVö”tY^ª3IEND®B`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDR<"+[‡4 pHYsb&2 tEXtComment527óçË®IDAT•5б Â@ …a£) n&€•ØÀ ײ£ ”"eVH”‚2/WœÎœÄÕ×üÒ“IÖwd)x(ž—HD¨„=u:¼H0”* t¢ïpâæ§ðÑ5¯¥Ú°¼“4 ÉÕŠnÈ è>;…€³—Ѽ´†È ÒCO"5¨φJå/ÃÙ÷†1“3LiC»áÖh%‘W¬_ ;ú3þòq¾ÃS¨`„IEND®B`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDR>!©:%§ pHYsb&2 tEXtComment533í‘à“ÒIDAT•=Ð1jÃ@Ðo$P Á^`É–¹B EºØT¨Ì‘â ÂeŽ-*ÜŽ» Œõ³’M¦^õ?|ð~†íZa¸‘³3Dè•¢€®Pï!ºaG‘!Ï5´bñµƒü’㤭ßð=YãqÍÉ-çtä5ã…tœ#®Bs7õ}S_7U½-ß"ˆ«Êáá|« 5guy¬T8=ë·MµôjÖþhmiR’dšd¢rREö´Ôä:¨µù³öhèžýà²æY aÚïP³?àN&I•—eë€5Sô±TÂ9¯¥‡T Ô…èÕTøVUƒ©g}Ò© ²]ËÊIð¤mˆìeRòkʥ͚Þ¤>gÍEÜQ7(êÊú x&kê‚*àyÞDy=™µæ¼ZhËÚz^Q *¯C¦X»Ql×ÔRôE]œ¡¸£"¨å;rÏú«Ïqü5¦@î Î{à~Á8þ.ê¨ÅK"ì¯ÅÁJÀ{Ê{%èn°nÄ®»îºë¿ê/w ¯ÜápöIEND®B`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment536û IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment530t˜±) IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[175]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment537êü$Š(IDATH‰íÒ±nà `"騡Ñ%C%^+SŽÑG±«Œ~, Ê‚%ä+à¥Ç[§ší÷‡Íq>‚;K¿S{Êv•ÚìÁ´«*W™k«ºÿΞæ:­ kž›Måkûâ˩ʅc³¥ý„ž¡«ü)fù¨®†®r©§ô–kÓ£&Ðqs‰°Bo=* 3Z—Ž/”5Ø´8ÎñºÀr »[ƒwTQð\¡]¸ÁÕWˆv)ÙÂmh¾”!Ê= AýFÔþí‰Æ·4!¥º S« yÏ5ÔŸ(Šm*ºPÐAë§Úðuøí|K¹€³WVù e¯×³åpC‘|¼\NºêÒ¼éRÅ•øÚPæmÈf6è®Jw,æ±Ôu衇ú/ô­\öymÜûIEND®B`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment531Ÿ¿(IDATH‰íÒ±nà `"騡Ñ%C%^+SŽÑG±«Œ~, Ê‚%ä+à¥Ç[§ší÷‡Íq>‚;K¿S{Êv•ÚìÁ´«*W™k«ºÿΞæ:­ kž›Måkûâ˩ʅc³¥ý„ž¡«ü)fù¨®†®r©§ô–kÓ£&Ðqs‰°Bo=* 3Z—Ž/”5Ø´8ÎñºÀr »[ƒwTQð\¡]¸ÁÕWˆv)ÙÂmh¾”!Ê= AýFÔþí‰Æ·4!¥º S« yÏ5ÔŸ(Šm*ºPÐAë§Úðuøí|K¹€³WVù e¯×³åpC‘|¼\NºêÒ¼éRÅ•øÚPæmÈf6è®Jw,æ±Ôu衇ú/ô­\öymÜûIEND®B`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment538zC9 IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment532š–Ð IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[179]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment539 D 2IDATH‰íÒ=nƒ0`G ÞJÉ×èÕçêR“‰‘#p”&b`ä1dŒQ†º’å·6”Á†²t,zy„ýù‡`£2òç-eÙ–¦Cð¡ßÔ:Ôâ( µÔ¤«*¦¬›P›©>å!Ö›Û­Š…“˜ƒÏyéê 2Ñ£¦‘-$¦Þ|f‘–-j)t_ãô,T^ PÐ{5"ÖLáÚ羽W6«(-w¢®\T6R|X7k…Üïp·PnDçŽ&Kï€4¯¡ÚYyë”XµÓ8U$‰U9¥îi}Ób©WKmŠr\R¬q¶Ô;_ÕL¸³N+·T¦¹f>ßb êh~×°vÝu×]ÿ…~Lãõ@;@¥IEND®B`‚ pix[180]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment533í‘à“2IDATH‰íÒ=nƒ0`G ÞJÉ×èÕçêR“‰‘#p”&b`ä1dŒQ†º’å·6”Á†²t,zy„ýù‡`£2òç-eÙ–¦Cð¡ßÔ:Ôâ( µÔ¤«*¦¬›P›©>å!Ö›Û­Š…“˜ƒÏyéê 2Ñ£¦‘-$¦Þ|f‘–-j)t_ãô,T^ PÐ{5"ÖLáÚ羽W6«(-w¢®\T6R|X7k…Üïp·PnDçŽ&Kï€4¯¡ÚYyë”XµÓ8U$‰U9¥îi}Ób©WKmŠr\R¬q¶Ô;_ÕL¸³N+·T¦¹f>ßb êh~×°vÝu×]ÿ…~Lãõ@;@¥IEND®B`‚ pix[181]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment536ûÅIDAT•MÎ1ªÂ@ày¤Ø-„mS{ ‹`®e!YAx)=‚WIH¡·pƒ˜r„uÿ7›(¼¿úøf†°ä-_HCMñé ïÈ*RkòFQ%oò–(:Ejˆf|ðDV­6€“N‡Û‚ › ๠‚´ ¡iD\ñëXvtc\ §š®=gKà€‰»#ú£_ÐQñÁOŒÑfE{^0§ÐK°dÆ.©àœ;—÷5ƒ»ÏMM'‡!Àî–ŸAHOižòê´a6IEND®B`‚ pix[182]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment537êü$ŠõIDATH‰íÒ-nÃ0`3³¹°h¾BPÉWÙ6>å¹ ˆŠ {”¥ ÜÒX~}NÕ‚ê=³i$~ÒûWX ¯þC[YÛ߬dõ&m]Ec´²Ú* áÛˆÚchd=“Ê™ëzD¬uE*Ï{ø©©í1Ê›$À+s½r꺬(³NaÊ{êY{O¹ìªUŠÕ³öª‹nªºûd,˾í¾Mv @úþÁ%Nvš‹º™«m·(ðêîŠVÁÌÙ,ÊøSGdúØrß¶üÁkäÆÅ@ìYŦ@×·šÕ%h^ÍÕ}(œù™î*ɪ«®ºêè µ°øŒìÿ ÞIEND®B`‚ pix[183]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment540;Ù'îÓIDATH‰íÓ1Â0 ÐH2ö¹@ GBb'•:tä= zRqt+’©1{¾GÄ/ždÙ±mX‰Îü©&ËÄt:YÞB^‘¶¢KF™gÑPVò¢óTâ«j ½®ä Nªv¡AúÙKmYÇ÷3Öû¼ç+TެéòÎ83//U×,ýB}&kŽ“±üÕî4¥6¦“í7¤³LÍ—\¯ì¹A4f ~àä—Ê5ûV–6/Fú=:6ÍÖí‚èn&y,@•¨ZµjÕŸêÖnù½QÏ×"IEND®B`‚ pix[184]: xres = 0, yres = 0 ‰PNG  IHDR;qcˆ> pHYsb&2 tEXtComment541LÞx›IDAT•mÐ= 1àYR¤ÌâM<‹·Ø"¨ÂKY,Xx R¤tÊ€‹ÏÉÏ ‚S}ÊIzvà3Je\çÅö´ÚMÉØfÍeRï´j %bÇ!‹±?JΚäØ0ª‹£^à_‡:ó¯ÂIEND®B`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment549BŸJàIDATH‰íÓAŠÃ `]æÃËM¼Ê`Žú.r­”¤–9ÀØÉßçÀìü³,]Dpã§>Ñ_‡6¹ë¯õÂtê‘43uUïTQ×Ç®f¦ŠÅTÛú‰ª…¨ØL}[}ÕÀ´«¥Cnëfƒ!K[?Ä&¬L¥ß¬‰¨?•A¹ÎyÐS;ï© „5S½E”‘ÜÂOT°»B¸p->,¢YLO /˜þ4R-9±´““¤f’ªïëZ’Øt–Í£ÇâÑât›äAtël‚€ý”«í®TÿÛ¡‡zèéƆûYëqRIEND®B`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment550"¯´IDAT•mб Â0Г"áooB6KPH™X%‘‹”X)h(Œh‚dü¹s@àê5þ÷ïë‹ô柡S‚)!” aG^¡3ˆ ƒ©1§»|^°¥”â±YqûâH‹Áµr¨É7[s‡ž13¬àâqžœ7*¸ûÔÐøR;IV ëxz&jŠÚzn¨\0v±hät²@Êœ0&ò^¥4¯¼^åésŸ%Ì«ëg{IEND®B`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDR< f“&? pHYsb&2 tEXtComment551UÅ&9­IDAT•MÐ1Â0 P£ {„\ÀÅ*R)·h¯Ò(#G XÍD$ª~ì”Hdzú±;„z>LØü ÈLÜûl00e¬¤@6E UÙjÂÙiÍ{C±÷™%ix6$€b°˜mÅ)(ˆpK5!Ü£"²,ŠP<*®åŒ¬˜ÐþÐÍ SNö‡ÞÆýªïâÞçâê[‰7tæ¸ÀY G’}G·Ê4,ãyMVù ðĆ»{‡µ)IEND®B`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment555R¨â IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[190]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment556Ë¡³š9"{ú×(IEND®B`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment557¼¦ƒ 0IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊ’,û¿¬=>Ù4sÕ “µ©{‡,|´O}§œm}IEND®B`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment558,žFIDATH‰cø`ÿ'h`À/û¿l=²”ØK;W ”¬=²´sÕà”µÇ'K µóã•eÇk/^YÜr£²£²£²£²£²Êa¥>ryÜIEND®B`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment559[® bIDATH‰íÓ=À €QˆCG/Ô£9ô&=‹·r0P“î_—`}!üqˆKþמPÕ3êuÕhÅÜ/…®†ú–z“6œˆµ£ïj•λþ"5êY ü‚É©¤ôÐÐÐÐôàË*¨öœ¾…IEND®B`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment560 ïElwIDATH‰cø40P$û/¯,ûŸúvܲÌì™qÛ‹_¶¯lû¼²ì›ñÈb—hÙxeTàóï |²ðÊ gÜñ;`²ìÃMöó;ܱð‡ù€ Ž| Ö{€·ìÿÿì?à‘Å FeGeGeGeé* ˜Í/¢® ‹IEND®B`‚ pix[195]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment561~èuú€IDATH‰íÒ1 €0 ЊCÇÜÀ^ÓIôfŠ©7èX¡$ê*þ VD¡Y$!?F”êÍ#°›‘& ‰&¤L>Ñp[™à\¡ÀîÌ´Š(zÆ×4t5ÖÁ7ŠöºU•;ç(Î(·óu¹}t|{…4Ú±µ)Ó®‚ô¢Š-Zô7ºŠ£ Κ3syIEND®B`‚ pix[196]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment562çá$@šIDATH‰íÓ;ƒ0 `CÆ!AäheàX 10öåéÖÕM`åÿ+µªÚ!^?Ù²ü(„D_|O׎i°3Ñ»q¨gjª£næGÊ»jë J¨M*°©#WcµŽ:é¼0Ì]úBõJTVóJ‡‘Uö–©ë˜Nïjì ýCºØ¨ç˜>E; XU/7¨"Ž*ެY³fý#}›?n«IEND®B`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment563æÖxIDATH‰íÔ± €0Ð/–!£ÄÍ XXºR¬,]!Á´KüNð¯0  ÿÚÇUG âém=¡Æ šþ§¥õNÖLdŸjéh¾LD›M‚º#V¤#ÔjØÆªEzThv²öPÉåAÖ† PæÂ_<ƒªªªª¨7³À5QãH‰Á–Ñ)éó…ÂÐá”è!’î"Õ°•Ó kºvó b¡€b˜ÏDv 9b~µ§­šÏ.ž²…P1µYDÓšS}QwVRü™'9ífÔÚíý~ÊSu†óì­Ñ®_’7ÞTæk¡>&nÀÌ,•Ó‹¾Ðî¤Þ}5E­¿·õJåWñ3º>„êÒí·í$_;£zé>%tÒJ3Ò¼è-2ÃkëkibŸ´Ê8Ȥ½[Ó€U8" ™£CXus¢T?<Ó³ë jè‘6%Ç’Ãû¿ØÚèÛAͨ$M)”ÉHw¤`¶5™SN™Œ•‡±Ê(×9Žr>ô7]¦#m}½«k\A~ŸS&¿îõkÏh|تSµ›BNÅ^žžuF; ž(X]Š=Džê(}4QËEè¸U°ÈÎk½¢#êŒÖ8“gTRÇ¡²aÑAÕë¿7¡g=B Y{”érn%ý{sÚyùbW±¯ník]èÍG­ÿý ‹gÎÕV¤IEND®B`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment566àŒàY…IDATH‰]ÕAoÛ6à's0] {rÐLûîÍŒ0?Åûvq/TÚî€a¾ö0ÔEA¹ í5‡ma—½2ë!4@éí=ÊJ”è`ÁúDò‘||àk < ¡ˆ¢¨´»ÖÐ^“)+€¿à{‰´wZì5 |[œJþÞâóýK0ž~…;«€ô}ûpÖ)ˆŸ¹—‘нÎ÷¦@ GG#uÓê¶ì«DÒƒw#õ™u&°„þeHŸ]åŠ{žÎ³¾Ò¬Ž)®ìjNêèÕ,’ŠýÅ ¾âûÛcå^(ì-ÏNT­Z”iÕÞšµõ+áí.ôý©iC‹fW“:ÄØÓI«›æÛ]ðÇjø(æÿd/v¾Ð2©|¢Õ‰Ø¹ç*ªE«“» äûV×®ËQÒb!.Ü*Ï*ö˜•p”Ô8¹qb«\¼»× -^R§“¢ú¼y"Z‡^J'ñ â—G:Ò¿Av½Z{…a4ï«[—æo€à—ºRˆá Û#V|Ú¼6´\ ÌrjÚ¬ú;˜Ýtz”/©é úúÝy«ÿñvåæñ¸“V_•òµù@:$u‚²éÙ?Ðꔢ¡ÍQ.èXz”Oe…ARNdݤ`éÍñË?:¥„>áoø<© ieš—5…PÒÑ‚™Oc‹¤±Êw_(æ ImbjÄš5Íišµm§ww÷™3ο“¥vQZR‹þÒt:%o ¬D¹¢F'R?¬)õ.q#ª@K†O”zWIiÚ+<êk€Ñ`×¢\êKœiý°ƒasRÙja£Á{Í‚Ód¤€¥ 0µ}Pð«ñaîL#ŨPXN%ÚþI c©œ ò^+¬f”ì7uO «“¹Ü`uÊx öj×ү耾£ãçVϪ«V+é V)tRwÆqÑ Ö*ƒª9°nZ=a¥m.¬·Ë”‚Ž…|“b¶ŽÒ£ÒÍØf”¦{÷m”:«EÁÅb¯Ÿ#«×S»S-"kÖêõL¥–Ž©ãa¥e]*h5Fš´M(Ç£/Ǫ¦"5„ Â^9à!+–³±ÚQ[.vÊQ NÑŠÔ×^UÊ/ËžjQÒ‰uó|¼ÀJý+›Y§|™§©3ÎiµD3;GTÚTX3Z*„æh‡¼–­ò‹´f»4]3j¾©z¦†Tô¡0Û (dJ§jꌒÖn½ é’ôn¯\aÎuS©P¸AnzÊ=ÄjXý"@n¶Iuɇ;íçmˆfS*ÿ}„\'ªY¥Xµÿ¡ñ#å¶ô?ÚmiümÚnñ¬ÕAÒ¨Ò éËJ«¢qyuªí•Wtn¼-›Wüÿ Y;_•´’Q’þâYñÚÙuÒm깑CëôÂïÛÒ2@A÷hY]Ím®ßÑéœkͤæ°ÎÎSp[e§+þ/l¤qÏÏwœJ6ªÕÈm4e£º@Õå$ÉSþ„jo.Ï‘ÎÐ¥ôVâu—“œT¼ARC•ÅÑæF•¶Ÿöah°¢ïMP¢Ò×hËÿcž\âhIEND®B`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment570ôt-LIDATH‰ÝÕ;rƒ0PORPú*Rä:W*1“"¥£Ä>†CR¸4Šˆ1bƒ ín>ž4Q<¼ÙÈ+€3» °‘¯N ‹šÔwеå5¯ŒºhJ³~n ½Qn¦ºÊg}þ®™ôvïfÿ¼%Q·®¡Še1ËjªdUE¯éRˆëÆiÛ5§ñ`U"=ÏUä¸VAÀô«î2ßazŽHÒ^5ÛUåßz¸æyí7õƒü:v®«À}‹?éê·j1}IbϬöCQu7a¥DŸ}N\Éíë?‹«Gµn‰/Cýq4£wÜ-uÊ\:MÊå{ÖNÓÖ•_+míÜ9x¢õÀ©<4°'5ÏŒz"u+FßTû°!õ£;=qÞ üåoÞçÿ«ê •è}Ëj)9-¸ºíý hh³fUÚub$§¥ï&ÿqó$Ãbø5IEND®B`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment571góD»»IDATH‰åÔ1Â0 ÐH Gà0å(ŽWac¤ŽZlH$®ä/”P©²¼ú;m“õÇ­@/ Š“‘¦}Ž%t"¤¼Xßuêj÷{?ÔýûÍZù¾Ú¤õô.$H#VœÊ\§cƒêßêu5«¨Ó7Éõ7¿vPÉÓ|=Kô”)?áª"Í–ÝäÒ;¯´WT†:eèæArNF¶8˜ZÙ•™îȰÕ÷N{5.ú å0Ii>IEND®B`‚leptonica-1.70/prog/recog/sets/train03.pa0000444000175000017500000007416512233320514016341 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÏþáㆠ>$0<üaƇ0þÁíPp331;£Ê @0H?Íû`ÀðàCÐÚ´ïû«'3Þc$@IEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ó½ªJIDAT™cø?ÿÃæ ?0|`ᆇ~P`8üC¡ŒÀ˜ˆÙÿ`Á? ¸ Cô@Ì8übæÃ;@víðã1¨é¹ˆIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÏþáã0LøÀððCÃÁ ‡¸ŒØAø 3àÆPµíP Öÿh|PÀð€„öíû´÷ÿŸÿ-&3„º(IEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ó½ªJIDAT™cøÇþ€áó†Ž>~xÀððCÃã ‡(0ÿ£ÀÐþ‡+fGÂq8>ÔøĬ‡@s?Ú´hÌ*4 r»ä*IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªQIDAT™cøÏþáㆠ€°€á'0ø Àpà‡Cㆆ Í ü‡f‡±aêúÍ9øÁ€áÁ°ÙÀh'óÐB,.1):OIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment0¯ó½ªCIDAT™cøÃü€áã0|ÀpðCÃa nþ¡Æí?À˜„ÿ á¸0H7ÿ€˜uðÄ|=?€öýãÄD.s­ÀIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment0¯ó½ªCIDAT™cøÇþ€áó†Œ@|àÃà ‡ÁX¡„00´C1;QXŒÁzAæ`øÀð€áÁ†ÇPãæ í?À˜DÜÖ«ÀpüȬ†‡€l`øÀ±h7Né1t?ñèIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÇþáó†ŒÀðAÃà ‡À°C3·ÿa``ǃ™‘p3Cõôþ 6óÁ° »@vþçÿÉ 2šÝ‚.IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ó½ªUIDAT™cøÿþÃ?æ 0€à‡ øð –`8üG‚¡s0´C1;3 af ©iêa°@³~â @¶0BìûÇÿ< 7}NóZIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ó½ªAIDAT™cøÁü€áã0üð€áà‡†Ã?š¡˜ŒˆÂí`¬ÆÍñÁ Íf„Øó‡ý ,mx$WÎIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment0¯ó½ªXIDAT™]ͱ €0@#Š”dFË)Uˆ²Èàò‹ˆð²®´¾m&t"<‚‘„ÂE#ªÙ\Ã'áO]D¼Wmça›r¾´/ ĵýà -M7¡rÏ#IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment1Øô<.IDAT™cøß€áû†@Ü€„ñvˆ¥ø3ІL `£ñÇ ÌdIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<+IDAT™cø'ßÀðˆð700ÈCp€ŠSÿšÝÀ4 üoh±¯)á®`IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cø#ßÀðˆøQñ~ˆøj`YŒ@s‘Àó'$ªÀkúIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<-IDAT™cø/ßÀð‡¿á7 á?Hø.†ŒÿàÀØ`Äú€ÝN*eÕÚ´§IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR Ü0®_ pHYsb&2 tEXtComment1Øô<9IDAT™cøÿ¿á¿|Ãþ†@ÌÄ @ü"Âÿäñã?Ä`¹ì@ó€4|Äÿ6Dú/6Sœ˜OIEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment2Aý܆[IDAT™-ËÁ €@ DÑ/`JÙlÉT<ØVìdí Ç=ˆq$<fmú9 î…#Œ³u0Ê È¦ÎåÖžQȺä.cðNÁ3m5"*׫Œíǯçlå#.*-¡8èIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment2Aý܆hIDAT™-Ì» ƒP …áQÐzV¸d%6‰‚FJ”E.­KWqQd}’uü õÎ]•‰'…w-lnì²¬Ò ²„±8¼4»$µ›u"æ*ƒÓƃx1ƒ§q~àlè·î±þî>(_†Ü/•å{u‰IEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆]IDAT™E̱ €0„á?Xh—²‰«d KWR\ä¹AÊâó,ă¯88ŽÚ%Fæ°ÌRk…(™>qm\[ß ŸEW4ju€âpÊ~ÃÖÁÈ+ñ'©çíÌ+gS¯“ìIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆XIDAT™e˱ €0á –ÁŒö&‘H ¸Èoe›ÒBŸ`gñ5G¢Q£T#*}`n0¹ÐÁ[q§ŒQ_bln}÷"®Õhwâp»+þeüØ:H*FÀ ,IEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆WIDAT™M̱ € „áŸXX2‚£Èh ×zÆE0.@IAÀ‹6¼ËW\.yTog$L ìŽ>ÿ&qƒM.í=º=Êd´Ù¨K¤®ÜòÈY@/?ã©¿ŽÙ'ˆMôëõIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆WIDAT™M̱ € …áŸXX:‚›&3 ×:7aJ >…wùŠ—¼;òb$gô½ÍóDØÒ°Ê"nº¦W=MýŒ¦ûª?e7òé„XÕë †ÿ(¤…'[à ~©IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆XIDAT™]˱ € EÑk((Qü“ˆ‹}ã®ðG ¤ (ÄÆ˜—“[=ŠSlQæö$…`í­ûñ&\¦Ü:äaü»WZTꪔM°.ÃÙ„\˜øò]·'Áu=ÖéIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆WIDAT™eɱ €0CÑQ¤Ì…Û ¤¬uˆEÂ)S ‰[O.Ì•”ÙC…T!5È.ºÅ…oËä¿UÁT±Ó—”‘•¾ }ƒ6àv—+vþ1äÔK(ÎPNIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆[IDAT™]̱ €0EÑ+),]!›¸J6Ñàbù`aûï¬,Nu6u0 F.‰Í"S}Á(AÉŸ]íÒÆ-áÅð,Áèúés¢-‘Ú#·œrH!²þtqO¤Á1$¦Ó‰ÄIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment2Aý܆UIDAT™mÌ» €0 EÑQ¤ƒ ˜%“¡ 3b‘Œà2Jx ¶Nóü¡FÃ1:§ÄQ Ê"“¿ÂÇ.—f}°DÏF×}ÓŸ:ƒ¯P6ipÞÚ¯ù/åsÜ$ጧIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment2Aý܆]IDAT™e̱ €0 ÑC)R2ž„Y%‹…MŒX %E”ðé°ô[>ÆâÜÁñÉ)l$Ù݈õA¦¬}ÖýòQ$9C¿]6÷jÔnœކº¨ûŽý$ì°(ö%Vƒ-IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆VIDAT™Uñ €0EÑ+),Á?Z&!…¥+).òÜ v!ñW¢e9ubC,[d•1d£Ï|÷k$ß½h»O¾ue2îj\þôG™/{ÏÄcJ+öö°IEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆VIDAT™M̱ € „áßPX:‚ŒÆ$F*׸È@IAÀ‡6¼ËW\ry'F˜<—Ir³B–>S=¦x©eáöÔakvœ¸ñàB2•¥ó7è6k?6+»_uU)Ý-”BIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìYIDAT™5Ñ €0 O:€+t´®"ýp-ƒ‹d„~öCˆ/E G É埪aÞ8F¥8¦X½bâÖH¤I=L?;7Ínª?Ô÷€ýU.¯–§ŠIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úìVIDAT™-ͱ €0 DÑ(X#£eP Ö Ê"¦¢MéŠp)ž,Ù>ÇèdnK´e:.iòôÄ–»ñ.¢Ü¨³?÷Šÿ¹¨«œAó¦ÛU?,~Ev³H^3jd#ðIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment36úìWIDAT™M± À ±£1J‹ewi]R RDÖÉ/¿_Á§‘)’¨Ê¢ü8[ÓüÙ2Ãþ‡å|¯›ùÎåÙá#ê¦ `!¡Ö×M=Q^Á1‘Ɉ<IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìVIDAT™MŒ± À /rÁXa´H”Yé7È ’ŽüÁðˆŸñy žßÂ7ø8€ƒá?åþ7C1H?ƒÃ 8 ÿ_Äÿ-¥÷<¨ŽøºüIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³NIDAT™UÌ1 €@CÑx<‹…­W²òba»`±#ˆã_A‹(JV¬˜‘>ºæÆÇ™šcÈÚ°ÓŒª^FVaÓÿÏøbw¶W¸B=/¸‚IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment4¨žy³RIDAT™=Ì!€0CÑÔõØåXW‡ã $¸L—_ÚA<“L"ßL>!¡C¨r8aŸ§±ÙtcÇc#ÅFêS”“ýʯ]ô•Tžá Ë ñ[BtË·ÜÕIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment4¨žy³RIDAT™-̱@@„á½L ׎ζ¤Fd/0žŸ{;óe»+ßM>…‚©z k1›.aÁŠ‘Ò&©Ñ—^rýâ¦ü;éÜàÍ >h?Âñ”ƒ1IEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment4¨žy³MIDAT™cøøÃÿƒ@ÜÄŒüŠÿñ(þÅ€ø1Píqn~ÀÐÄü@1T0¿á?PŽAf3$0|Ê=býÿz3Ò,²r‰IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³MIDAT™cøÿùÃÿ‡@|ˆ¡˜ñÃ?$üˆñÇ òø0Ÿêéâù@ÌÀ À€l¸YÍP(öŒÀøÿ­W9­_õ:ãIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿüÃÿÃ@ÜÅŒ@Ìüáÿâ@ü±ùÃc ~Ä縈ç±<#ƒ ™ñ¿Š™!æ~`ã X5:ê—IEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment4¨žy³TIDAT™M˱ €0 DÑ£c„¬ÃV”éX‹T”¬bè®@˜Ÿˆ‚âÙ–ÏVìVl˜«Q‘+f}:ëÁ ÖY¬ ¬˜¸—zej¦õ/Ê[+µ¬å‘^<Ž=R0ú­7IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žy³8IDAT™cøð7B1#ÿâ?Püˆ?@ñC šÃPÜÅè ˆÿ7 ™ Ä?€b0ä¯1ý„9ìOIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žy³DIDAT™cøßø€Œøÿa~Àðˆ?@ñ ~Üü€á8·q?óƒ0Püâÿ@q 4¤ „?€ä0`ö2å\Õž~IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³RIDAT™cøÿýÃÿÃ@|ˆ˜ÿñfüÀðˆ?åñãæ Çø<÷ƒ0PŒ½A€ f5C1ˆÍ`Àð(÷Š?0\ä7–è˜tIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment4¨žy³2IDAT™cøÿýÃÿÃPÜ ÄÌü ƒÅ›qcþøÏ€)ÿƒ„>€ä)»w: –öB«IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³OIDAT™cøÿýÃÿƒ@ÜÅŒþ!á?Püƒ‚?ñC ºÇ@|¼ùC?Ù|    Àð†b ÿŠ}Ê<€bûÿm—5ZÞ;qIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%VIDAT™cxÀÀpŽ0`bù ÇÿCp;7ð1P®¨¦ù@Cû†~ žÿá?þÁÀÐ ¤™‘1P ó ù Pó0?`ø#ÿKß/û9B-IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment5ß™I%ZIDAT™cøÿÀáƒÃ8.â ?0þÿá8>À©i~PÀÐþÁ€áü†ÿHøù†Ã@ÜÅŒ úC󆆄€v|Jþ`þ¾b7hýÌ÷IEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%VIDAT™U̱€ Ðp®Á&: £èQXºw¬‘~iå7@eñš$¸e uÈBÔ(+Ñüoä½ß2 NK¸Ä ðgº¥HhSѦï}þ3ïÂÊ4øÓ‘sIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR Ü0®_ pHYsb&2 tEXtComment5ß™I%LIDAT™cøÿ°2700ð70´ÿo`àGÂ<ò@qv Ê33Åä40ìÐÀðÿó1;æ?QÏÀ1ÿМì Çô&1‰ËÛqIEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ß™I%\IDAT™cøøÁ€áƒƒØ ?04°`8$ÿáøÿ íÿ!ü8±Cûîc``øÄ€¸ 9Œ@X€¨Ž±Á(X6dÇöA$]/ò çIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment5ß™I%WIDAT™MÌ¡ €0„ák*Œ@G{£T Yé%HFàFh‚Á•£©@|î¿Ãýƒw„GYˆÒˆã§ÌÄDM¦a« {.iÃ)Y»¤>õÍ·u}Ô‰/¤2s}$¢pIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment5ß™I%WIDAT™-̱ À0 DÑ .Tf¦Q +¹JJƒ,  œ‹pñ@ˆãã áè‰è&;qOb,ÿ}éwѦ‘8éx¢b&¤!m)©ÂÔ7m[Ww#¨F?û³5?" بIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ß™I%RIDAT™MÌÁ À0 @• ÒQšÝúÈZ‚<òôõ}æç(¤-ElG?J’¨A4±×±nU?æ× Ä_ŠœêéQ&®}Ÿ6¢k+ŒŸÆ6Km%špIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ß™I%YIDAT™MÍ1 €0ƒá_:tô =šG:x­Šƒ£G0›kÝ:Y¡„o !ÔGÜšHüDòb­b7Gg­s"Îb±Í‘§© ÍU æëDb íC–<ˆâõ—89´yÝÊ9IEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%NIDAT™]̱ €@ CQ£)³RF %#°ŠGÉt‡((ž”Âù õ"ʈ}çO9M´q&B®NŒÆç[ækk³­ªßjÝÁEŸ*œó(øIEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%WIDAT™E̱ € DÑo((eFc5®…–®ÀWÒ!hÔâU?wT2ôÉŠmGýí£˜MÓú’1{VyN9jW¸ÅÆtz9LvØäÛöù× ŠÕ02ÑlÇ|IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%IIDAT™c8ÀàÀÁPÈÄòÚÿ£â x#Õ4780´p`˜ÿ€á?€àv fFÆ@9v fªm€ÚñhÆæÍó+ÆR6½IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ß™I%ZIDAT™Mͱ €0ዌaFË(‘YK°Ð.+¼ Li!Æ_T°øºƒ£B„—˜:ãÄÜÄòSŠX{­%’¹z¶ í¶?f“L_?g²<)¦÷QíqºA,9Ã0y!IEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment5ß™I%aIDAT™MÍ; €0Ð ),½BŽ–£RXz¥ K¯0mJ‹@œ Y,ûÅè‘aHå°™Øqüœb‘X´Q,£2cm ›Œ†×uUЧZTŸ÷]¦]·ÆÁÌ9)Ý–ŒIEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%KIDAT™MÌ» À EÑ‹\P2BVñhf‚¬ôº¬ÁÙ€!$§z„YÑDŸâN¢jg gU¸ÌäyÁŽq8UNYßü{júd &R§×]7IEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸSIDAT™]̱ €0CQG)²Ö†tEÆ`#96¸2˜ ŠW}Ù8A Ò G`ÚÃ&OÂ/¢K] 4©¢MQ¯ùQúéâñÚÓâAD!R£ñ)+»—±¼IEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸXIDAT™uÍ» €0 „ᥠe„Œ–Q@)X+ˆEŽ RRD ç(>Ù’Ç<Å@¼úV2]‚ÛµöB¢N‘Bò`1ß â6“zà×á½eš3‚"Ï?ƪS-ÓsÁ>IEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸGIDAT™c°aH`°```(â ~ÄpƆ›2Ì *@* ÔFløPï>2K¨S¨<nDj`(ÃjIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸOIDAT™uͱ €0CÑ¥`-Â( [ìØäFH™ÑQ…êFÚꉤ7)#Å>y!;[û±n,½[´,þÏbš,\15ýIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸRIDAT™mͱ €0 DÑRdŒ¬âÝRd-K,b6p™‚¥¥xWùÎ܇3qãŠí”þIc,g0ÌÄ?0ü?ÅÍPÜÄìü ÿÁƒÿñõÈ×9nöÈÉ.IEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( 9IDAT™ch`@ ì0ȃðC¶?|€á?·C1;ó`øÅð4ü ËÉõÚøD2xSAÔIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( @IDAT™cøÏÀÐÀÀ€Ø$0ðá ò!xþÁ ÿq3·1;ÿC°af(†òÿñ?–95E*]+.IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment71—( `øˆ›¡˜‚ÿ!á?üPÌŽÀ?Ð1H^¨þÿ×`45R (IEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( BIDAT™cøÃÀÀÐÀ€ `Äøð{n>ÀPß~€á?;ó`ø‡„ÿÈ#ð4ü #‹ÿ±? @0= J ÓIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment71—( GIDAT™cxÀßÀp€¡+00üP``ÿ‘ÀÀÿ„0ð?â‡ä>`øÂÍPÌ Áÿ øü³Cð~ ùs÷6»*Q…'IEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( GIDAT™cøÿ¡€áƒÃ†8`hâþ@\Äø|`˜ÿðÃÿƒPÜ Ą̈ø;*þÃÌHl(Éÿçÿ)»9ÙW'IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ?IDAT™c8ÀÀÀÐÀ€Ø80È?8À`ÿˆCðÿf nbv æ?ÀðŠÿ cù ?Ðð$ ·?z/ •K6IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ÅÍ@ÜÄìü„ùøøŸ3PaÐ|M˜à¡$‰” «IEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜WIDAT™E‹1 €0GR¤ÌüJž&XXú¥ ¿‘'œÝ)¼`@–a›zžD[Ä%q[åôÊáÿvÛ„§é74N«ƒâA‡µ?È£·h‡%½Ïœ.åèË@IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment8¡(5˜dIDAT™E˱ € Ðo(dư¤t,J;W‚¸#PR\Äcñr¹»ÿ!¦£ATxäÝ£t‡‹’ü"÷¸ñÏ\f¾¾{žÓñFÑ"5 #ë=‰î‹ö+}ÙÙë†:i¨ã Õ1‰yXñkIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment8¡(5˜`IDAT™%± À ¥ d„¬(k½”"k0%B1PœÞzeúaTg «‘·E¾Y7wrš\rÜfú…(À’œ2;àEP'ŒW>ô»«<ù¶:{³i{œö `/£u¼}IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8¡(5˜QIDAT™U± À0/•ˬÄhŽ\d-¤,”.RøQÒ¸8é{ÁlNNàxÏ4îÉÆWBÞï‡æ%9Z ¹ç»S»¡[÷Ï-ª«¿ VG)J Ò„IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment8¡(5˜RIDAT™E± €0/ú‚52£ ¥`-ØÄ#¤ü"N¢8Éoõô"ÄÎenUZÂ9`31*‘•£›åh1}QgMö»Éw÷¾‹{ø÷ò¿ =Ùä$A‰GIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜TIDAT™E‹Á À R@,ÅÒ, Ic¦K¸ç=ÍŠ° ,Ë,)…^2ÝOˆÁO@ÓÖ®LCŽÜ建“ÔѶ½*ÿ^L8æ×E]ò÷ß§½x^-áøDÒIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜_IDAT™-̱ €0 ÀG)(Y1Ç£Q0«XJ‘5^bè\D€“ ëôÍûñD „¸Up^3’ËÖíÅyn&X]\Ví¤Iê=Ö.0•ßÓsôà‘EÿµÀ2 Nf´IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜YIDAT™MÍÍ €0 †áW<ôèv´ŒÒâ¡kU\$#ôØC?¬„'FpÚâ¼aœ¹z¤ü’š‘̨šªÌy'ª†¬T¶.c ²ª—u7aßn“¡¿÷îßo0þ·~SIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜RIDAT™cxÀø€0$04P`hþ ÀÀþ7qCACP]#H-HG`Ê10€1H± ÿa``bæ@úDLH¥lÅ -ÅHµ!IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜ZIDAT™M» € EqGÑØÅ‚Ò•H,,]áŽ@IA¢—`aq^ñîgm5IœU\-q÷Äñ‘Íî_±V†/LÅY’o$Ë´ÈÚüˆîš;Š;˜yo¾l5­€íœIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™Uͱ À DÑ/QPf„¬ÂhD¬uÙÄ#¤¤#‡R Ovq>3IÈÚ%ºDŽ¥lÏ‚÷Íq* ÃfüõøzÒê»=›²¨þ§S/á‚*ƒ©á”kIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment9Ö/PIDAT™cøÃßÀð½ásÃAƆæ í@Ìþ'nâæ ‡00)† ÿ? âã f5?âƒ@ 4¿hÏ }츧+-ìˆ/IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/NIDAT™cøÀ~€á󆃘€°ófÀŽ@0P91™ ? þõÀp;H?ȬÌTÜÀx€áÈ.þ ?ìN)´ÂÑ”IEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/GIDAT™cøÀ~€á󆌚@0û4Ì€‚Ê€ÈdxÀàÀðÿ·?8ÆÌ¡¨¡„v?Î@'`F< IEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/UIDAT™EÍÁ €0DÑlÀRì@KÊÑ«•™t;˜cbƒ"˃]fi»¨ƒx¦‘Éu²‘í:¼ÿ²Àq´€O®šsŸÃz¬¸3¹;ø‡³n˜ý5“1¬!4IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/WIDAT™%ͱ €0CÑ((a2ZF!b± ñב ÑéU¶u´YÄ(¾«UeöÈŒ‘ºö¡ œuE¸W‰°{I<î_vz_~b.bóŸ:‰¶êº".,lºÈ)IEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment9Ö/GIDAT™uͱ À0 Ñ*3’Wû"kÉx€¬ ¼A"ƒ!UŠÇ•Ç[fV1™SeÔÙ~ðR„;¸ Þ‚cV6–>.;Oì$ExþÊÍ»nãä++ÈôµIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™m» À D_Dá52ŠGQd­Å#PÒ']tzÒ÷aš‡Øjrz8eðb™VɤežpsÅ·ÓCån&ëó“aZCg(þØá¼IEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment9Ö/RIDAT™mͱ À0 DÑo\¤ôJÍÁ‹dàÒE 9ƒ!M„ÐqÌ"" %óœ=DuãWü‹àŸxÆçr¶Ç¦Jj¢­ŽÕu¸Ó¦ÝE/âé/"Ç_áIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/PIDAT™mͱ €0CÑ¥`Œd ÆÉ(d³H¬á®¤Ä-Å“|…}ÜUD‹48’:%¯úc&án‚OvkWtN›1¼óaÉÛ–¿6¡¦!I&üU”_ÉIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/OIDAT™eÍ¡€0ƒáŸ«` :£À½ÅÚM2B%‚òÄ'"’pÌb¡I4D×JŒT)~ºp·À‘“Êe·*a»·^-‰-?Lù¹è­,¼Ltí˜IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/MIDAT™uÁ ! G,À,ÍRbg–¸ò¼Ÿ·9ßËìÕÉ[ÂLï”$ ^Èl:˜!™ðŠ­g+{䟞ñƒe·(ÚÑ^4ÿ§&zxx‹öIEND®B`‚leptonica-1.70/prog/recog/sets/test03.pa0000444000175000017500000002666512233320520016202 0ustar dandan Pixa Version 2 Number of pix = 28 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1Øô<lIDATH‰íÕ1n1`Å[ =Š9E´¾ GHI­g•" RZ DnBQÐÁŒ¸€‘Œÿ{ödgW  MfW³²?×c??+ÊöUå µq%U|é'e¥ jwšÕ+¡¢ëSúîz¶Ð«¾¦òêÝBÃsÖêE•%z9BÏŸ4]ñguÖ³=ŸŸ4M\ÕÕ³®•¡üZuUP ¬èªkšu£ï pÖO ÍJÙh¼Þèäg ]UóƒhËéÉlÖ©« .›ÚYß . µ¼U¿t½FÝ÷{)Cßꮚë¾]îë»±«Ýî뇿ê­ZêÇa_oP+zÂuAèÔÕ‰^ ½Ó ç7º=¢ñ^QÒñ@Ó¬ŸQ2È®M™«›<+â¢Ú4k[…bm‹åDÛ šÒ†Ôm‘ûIÇÀ¹ÇUÓ 9e›ÈËÏS‘Ö1E¤çxæÔOÏQ'ÙuYN3Ië¬WKf•y/ªï£°BQsjÜ3Ÿ»]¶¸’#׃ë¿éo%º¡š4ˆIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment2Aý܆IDATH‰íÔ±ŽÓ0à?¤j:TñÀ’ÁJ@¼·©ª©x 8ñ7f¨..HdAê#Ü›px[70‰ÅÁæw{msNï$t D‰õ'Ÿ~;Éoì‡ÿúwõ§5l ²m ­!Õ@vÚEm)9äæ©<¿V…ÚežŠ’ì_áˆÚ‹}|›~sg5ZOWÖD‚¬¨ey4Ð.!¯a!BH†ªA˜ë”úã®l{ö¼®?JDcê¯Ó…Tëwê‰Ó¡Êb![R©†ÄƒÜÚJ}*Û¬R"‹ãÖ–kÕn” UZ(”jY¤8ê3¿Fæi¡®´Óyœ†àÕwYœÈ«®Œ'ièÏÄ<”/u N²ríÏ«K{)_0¨*{tÖI`»þz§~džª6úÅÏU‡ð_[e÷¢ì¸ŠÒµ&óUÎîÔÜA{‹ê™¬Ýèk¶ÏýseÅVãU›ž~ÌPÉ æÎJË‹ÝÌÑùŒ¢._pé ˜”rO‹ ¥ÓüæŽf{Åþ.ÞÇM5ާ4 ¥é´D œÆ4?Å߯:ÏÀiˆŠë:#X?wNwسòZŸ8¥=å} ?0Ó^ϸ“Aátìô=*ô´FÕ'Mˆš$ÁÛ:Ûhò0ácŽ_”ì´MXcqyáæc îgØu·S ]³.6·ÛzìªðËê¨WºVߨ õ|%=Õ§멱ž;îMif¶°Ô IEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment36úìžIDATH‰íÔ=NÃ0àg:¤†­CUs„ŒŽÂ:v¨W9×`tÔ‘+¸ê0›Ë÷œ&²ÄC-9±óÙÎs^ÀLÑpÖ³žõ×5V9 Yõ?PWçÔâ÷µÍê.«ÏYÅ/©È©¥Ù‘Fðˆ‡7¼§‡ ŠwæÊ Ô4ne¡ÍüµIWбާ67¤0§Õ\r<6©qIm¼$-á–t6B¾€h ˆ mœI=- ÑÓ¢Ó±j-'† 3é&e ½X‹NƒÚZWQUË:/ë¦Å³¾°6ÖÉAW¥”bñUc|Ñé”tY$å¨âQëÖO¥]®FÍ–TuêªF‡¤úi¤¢Ñ‘4ð##ÝiIÇ´g·F/ _P¤I (Ý«qE€¥êu–æš+Æ"˜Ne§v¼`­íh÷………ŒGõ5FΠGki&P¢!¥˜y×q”’í¨¶Ç6z9¼9éÈoi^*Až¼W¬Û¾³šŸԉúŽ?Uþ†š¾Ã9ÿ ª÷ƒÖŸ| ¯ÃÊøþu¥ï±Toz·éÚIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR(½ú²Õ pHYsb&2 tEXtComment29‰¼L„IDAT™]Î1Â0DÑoY¡a[Vr Š(¹Šlq1ÅGpI±l€Šæ5;ššÓ:QÑ,d6°à¡Î¦o)8Bâð}Œë˜ôaú7š¥]M­³Þë}Y£:5w¯|†sµøh'ÚrY u§BÞ“<àžóótìI|•϶Õ\Ñ7lz.Và-ʯIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR( HÖ­ pHYsb&2 tEXtComment64“@õŠIDAT™5ͱ Ã0…á'\¤ ØeŠÀ­2…A«d—.B$‘ÅäM4‚Ê+DžO‚4_q÷à'6ACWÌŠ 3ÊæUPª¯‚<<4³ÑLdþû%£ :^ïÝÏjnëÛÔç.pºì³ù°ŸS —áÍL*VLÚ‹ÇЊvÉ/Ÿ/(¶) Y]·MŒÀÏ“zÏöJÛd½IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment126ƒéÐIDATH‰íÔA ƒ0БÓUçz.D/VˆÒE¯ñ"ñY¦PœNéJêtQèÂY=†„™$$™ô´ë®»îú;]ë]¢‘d …Äh/£4’Ü‚úm $:Tk9v¨îkcËH½˜X±‡Z¨ÎmVÝúF‡ØœÔ)\ˆ¡Š*š‚ªOæŠuHvÄjc]lÊôêÁªirçŒFÉé¼45Öqi2µÃKᙉðÝ ’¨bÚÖ@šã¨§w² Þ‚j[To뤫“UþãßøÐ'c¦âCBH¾IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment140<Ð2 IDATH‰íÕÁŽÓ0ÐY%ŠY©²9rˆâ_ØãVõoíaµ6T*—ýn| ®8ì_ÀˆÀœp‘É0“¤»[G\p¥Tòë¤Ï8Ä$ ¤pýô3i:RñDñ y.–5Í>Õý‰~|Ѐ‘ÔÛ é9~£¹/½FüÞßZRgëúŒ¬çˆZB®À°êW¬°°ˆÀê[ФwZÐß…|i±¯õ3º®­@‘nµ"ý”n ¢ìZƒ}+T¥¶²fuÝ£*9¨VÝHÉêªYi)صë@*YÃKJ+W~=é¶ô «Yõ RȃöªÓ£†+õvÐFÔ”oh¯i^²fV#> ÎX/8Ó®c]‹`7w u¬íïk[E†Šóž4®Çt–tÅú‚né`§WÐÐOÐÓ‡T’úË!vê)¼ŸjŠ©S¸Çp=é/#µ‡&˜ÓL¥ûSEîqIñ¿þžîKšø{]Ðh1 õ†”úeVu«¿åæžÓÈšUQé1’5ÌkÕVEçHí¼Ò¤Jm¿¨²ð‹ZŽM‹}¯JEûÕã»— ö3îBHßûÇw©Þû‡wÃŒ¾ö6é¢:PÑ,¨i)vWÒHkÖ›r,=ÌD,Æ"í$]ËÚÀ‚f(hzN]wÅž¬À_h½ }Õ—ÎÑQeO3:ÿLóa¼7Á·IEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment141K׿¤ŸIDATH‰íÕ±N„0ð49r‡“ „ú7:4°ø(>€ã  a¸ÑWâÂàè+ts­[‡ÚϯpšùX‰M 4¿–þiS èwÃiLAPGð E8€@/Ïcõª*ËT(!}cBì5SÄ0„8½xÃ;ÁÀt+õ!’/Ð^ƒûƒBÃ}ÇÑ}Ù §¥¹!Ny& vO*ð8hסgÃì|CZjav¬;dÃ'o¨Hä <[†±ñKNÂX?Ä+ìn†E±É©IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment144;½K+šIDAT•]ν Â@ †á/Õ¥ËHf CèŠÔ0«\*JVmèŒtòÇÉÇOD÷H¶å<‘g>HᬘM8)˜…i¨Âè;³Š89l$öA®D׎•hrôòpX/·ŠƒÜËSëò^.ÝʵMDë@*àÈ›föÑ»ðcEçñ`êÛr·‹%ë üplȑ־2³S&öœIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment204]—0v°IDAT•eν Â@ à]qeˆâ‚5N:Faè("’0…GñWºˆ06× áê“ä‡#™’i &£µÆÊÙ¤`Cå€Ôç`\ZÍ{ +üíè<ŠmƒÎ$_Öé?,—‚½’»ÿ²À5 É­-0>HN]IR 9< Þ9àuЋäìÐ:õN['bsŠÍ̯ر6ÌžYÔÐÞqÚòÑÁ£vuT]}ô!)s‡!p(IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment224o¡Rô°IDAT•mα Â0Ðo¹0RRFÅŒ‘…µR ÄVa#1ÝV;.hèž¾îë’‘°3¢4BŒ€Fâ‡ûQK˜ ã0î0Ô-J\A[¡©µ^0AQÛøí®H;ºFq…Õ|a¬ñ:j Œ¼½™O,Ô¼Kâ…í+cÑB·5Îæ Ù“ãµ§‚8[S±õ†Ê‡ÏÔ›(¹îp†ª ¦|µãPÁÀ_$èŒ/Öp–Œc…IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment2449ûõr°IDAT•=б 1 Ð(®ôˆ,r"7DÜ ƒ–qÂ&¹ LçŠIB„«'˲¾ Ù›=M Ëd<"b’¥W“†½TÄ;!n@à \"CGþ!6¬âo¤ûé9Àx>’pAº‰+b>ѧbÕ mƒz§€LLÔ½ÐJüá×áÙÉ` ÌÕð1w,èœþ1Ô+ âNÛ&·Ô eØGäŠò3ÅÙ4€kFü˜›IEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment245NüÅäÅIDAT•eÐËÂ@ à%’/ˆi ÊPÂ1¥Ð€6a‘·miè‚ãУ½ø`q²ÜÖ§OòC¶QÉ<´ÃìGС`4bGÞ§?œ9VÇ€‹D%ÞèGÅF‚Ðl Hà(4_VäP ˜$~;Ü9^Cùì`œvTd +cžêȵ§_mag=-h|„U †oÀÞ!É»¾É^WÆPiAÆŠö i19š;o°_ÙykÈøð}V 8y*f|ùÒú—ã zÿ vœIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment250'*IDATH‰íÕ±nÜ0 P”£ÖlìgtâÏéšN:ÜàÏŠ ÙÚ_PÐࢊ¥8wÀ™Šv  öƒEY4mâK£èŸK'2ÖnáBÖ3‘ß%\4ÍÚ/šo°_j¹íð¬¾Ñ»œÂY¿Q#:¾+Í*ÈáBýx¡¥_”o©z|Óáª"Ǽ胪‡Yú£*„ñC÷T<#Ó¤=NJƒ.}Ö²ïx³×ë”ü´*Ÿw‹¶ŽÝ Fž5Ó¬ìM(šFãUN2)V|×ëÈ¡—Gãª>ËÓ<þfé·ü†ò¦è6´BØÐ%>õSÿ&ÒŽ+d¨¾Å%d\×N8$·®úñÐÞC»ÃÔ¹y]‹jojš” ¥$QÈRŸì{qV+¯Oí« ©C»g=¯?ÔûÆ^µp(,ÑPwâw†6|Õ*XZý‹*XJ¿6´(¡Oa]ùw糡Ã)ÁbCû“ä½­E¸uÅPdU2´iyT™«þBòÞohºsV}{¥ZÁY5*°«ÐeKÝùx­×ñõøÍr°`"MPIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment246×õ”^IDATH‰íÕ±nÜ0 P”£ÖlìgtâÏéšN:ÜàÏŠ ÙÚ_PÐࢊ¥8wÀ™Šv  öƒEY4mâK£èŸK'2ÖnáBÖ3‘ß%\4ÍÚ/šo°_j¹íð¬¾Ñ»œÂY¿Q#:¾+Í*ÈáBýx¡¥_”o©z|Óáª"Ǽ胪‡Yú£*„ñC÷T<#Ó¤=NJƒ.}Ö²ïx³×ë”ü´*Ÿw‹¶ŽÝ Fž5Ó¬ìM(šFãUN2)V|×ëÈ¡—Gãª>ËÓ<þfé·ü†ò¦è6´BØÐ%>õSÿ&ÒŽ+d¨¾Å%d\×N8$·®úñÐÞC»ÃÔ¹y]‹jojš” ¥$QÈRŸì{qV+¯Oí« ©C»g=¯?ÔûÆ^µp(,ÑPwâw†6|Õ*XZý‹*XJ¿6´(¡Oa]ùw糡Ã)ÁbCû“ä½­E¸uÅPdU2´iyT™«þBòÞohºsV}{¥ZÁY5*°«ÐeKÝùx­×ñõøÍr°`"MPIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment251PŠ0¼ñIDATH‰íÕ½ªÛ0àc<ØP¨é–Á ±k C3„« ºö ÷V”ÎzŠÏTÑ–UŸû†ÅZíýÛvk‹oA»œUùZ}À5$­Þ´¹…ÜŨ/\ÉZ®–IŸ×«»ö€Íö}yæYÃle@'¿êzlNØbTËûZ³z1ªP.rV†Óñ¬†x³I gµŸwQך;EÝGõ£ƒ-.u=jP.ë:ÖŽ—ªµMŠ£.õë|¡7&i3t-ÚiŒÙ´¬³ÅMZÑ}Ùd6³·ïñ{ZïÂp¦N»a3 À½DžÑ%—PEÝ`Žp˪ܨÇU3*õ®p¯%í…"ª«Gý³¸Šµ{Ìï5ýý'ª&UO)™I¥ÿúj5¥ñ»¡(Ôf”A÷ÀêÀ\×5¾Bô£ÕNYéÄVÈÚy%*ªVÒ|JC†Ê² ·,C=­_dåy?ɺC3¡dÍ’×+jXó^IÚz¯%ݱºFÒÊñF-å¿ ä$E僌¤,8nPˆ:ðàJÔŽLP'¯¯kX;éälÞÏjÍ*Ií*kIÔ}ÎBÖg(Ý£m¬xÅ×õIùKõ'|XU[ 9IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment247 ò¤ÈñIDATH‰íÕ½ªÛ0àc<ØP¨é–Á ±k C3„« ºö ÷V”ÎzŠÏTÑ–UŸû†ÅZíýÛvk‹oA»œUùZ}À5$­Þ´¹…ÜŨ/\ÉZ®–IŸ×«»ö€Íö}yæYÃle@'¿êzlNØbTËûZ³z1ªP.rV†Óñ¬†x³I gµŸwQך;EÝGõ£ƒ-.u=jP.ë:ÖŽ—ªµMŠ£.õë|¡7&i3t-ÚiŒÙ´¬³ÅMZÑ}Ùd6³·ïñ{ZïÂp¦N»a3 À½DžÑ%—PEÝ`Žp˪ܨÇU3*õ®p¯%í…"ª«Gý³¸Šµ{Ìï5ýý'ª&UO)™I¥ÿúj5¥ñ»¡(Ôf”A÷ÀêÀ\×5¾Bô£ÕNYéÄVÈÚy%*ªVÒ|JC†Ê² ·,C=­_dåy?ɺC3¡dÍ’×+jXó^IÚz¯%ݱºFÒÊñF-å¿ ä$E僌¤,8nPˆ:ðàJÔŽLP'¯¯kX;éälÞÏjÍ*Ií*kIÔ}ÎBÖg(Ý£m¬xÅ×õIùKõ'|XU[ 9IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR="Ä™ì pHYsb&2 tEXtComment287 GëÄÃIDAT•MÐ1ŠÃ0Ðo‘‹€ZƺÆV«+¥LµRð5¶Ø£H¤H™+ÌÞ`Ê)Œg¥ÈýÕãÃÀð±Gm°QQý™¡Ù3P“¥Š['Ó`xqkƒåÅÂ+çðK—CÃ}›€ðå! îþ+À³]Ÿ|EâVYP賂J_r„Ñ\qÓfÇ E°Ûí\kÁæ¾}j`?ÒA@qìÈúFDà†„)ðÞᩘ]9€¡céð°!95õêµÏZßxå)—ŒW}´”IEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR>!©:%§ pHYsb&2 tEXtComment304\UZA¾IDAT•5Ð=!àGØ„’ ñ Æ5ñ"A; "˜M<ÆÂkŒ7 ¤ ;θJõ˜Ÿ<4Ïz:Èr¹wÃä¹F”œŠSL”î–IPG?q‰°uç Óy1"nm¾˜ê¯]¬ˆõ@—cÄlš@:7ÅIÁ™ôÏ%Ð~U–:X;žŠ À¶U "0èÍ[Wµm2GW]à¾ËË“¡Ñ9ÞGd¤ìºTpñ ¡…ÄRÓ,à%žá{D‘´&WYÚIEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment343¦] æ~IDATH‰íÕ1nÃ0 @*¼Õ‚è 3Ñ—:f(,òŒ~Ň~Ƈ®ÌT‚XÚIÓ5 tëBƒ “II€,ˆŽ»¸µ,qHÖ9­¤‹Ëœ W­F7j _zÕÛŽ‹¥g¦•Å—A-wä¿5u+º Ë5¹¼͆±X<\tÔ†Ëg[eÄÄ•ÁuRWj!H”Ày‰ÂÆ‚4ªwtÑòɶ¢мJ†G ..$si†™˜[bûÆ—ÒIÒò×0†Éó5ºkOòÎÄ]ïz×?+圼\Ñim G¹ÔŠ[ÑS¦µÁ@®¿¹Ê?ôpV7­yrÝŒ¢ï¢¢ûYmÈ·ºö¢ÿÐê2†äYÛ£œ$£¦Ý¨AÑFþ‰Üò´¦lPÔô4§ŒqX³V—v¢Q[3íë'¹vºV´ î]U)é›h§5“#öÇYU¿=O®!MÑG×£¢U0ï[eÍ5pm45Òü´ÊsMžÁ)McÎ=Oë¯ø§ú Ó‡‘ÊÏK‰IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment34489ŸE»IDAT•=ÐA Â0Ð_Zp9ë1\Hsಋ@S .=‚g‰ô"nã.ÂÐq’ª³zdfàO ¥ÞŒ´!‰² aÅ= Lâ-¦hþH$΢N&T°“ ´¬ðs4â½…ÄáJ|bH¥ eWÀÕÒÑK‘2¹ø‹Øw4{E: ž¹¦ª´Eí ZÍì¬]Ã×±€9|~ FÕçÖ-zE¨Åäß>7ˆ€o%º¯ÃIEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR<“¿“G pHYsb&2 tEXtComment350&OjµIDAT•=С Ã0ÐoÚ°Ì+dKY¥#Du«,–( °+$<`õzçT=ôÀÿ$Hz‹'û TGØQ„uŸø:b¦ …¸Wä$‡sQDÀƒØÑ©ê…#z¸IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment358(”â/äIDATH‰íÔ=nÄ àgY %[ºZ®) d®’#ä+`å‹‘›p„)),³¤KÁ£ÝÆÓ¡oÒü€:ˆˆK/½ôÒ7ê^³ëë‰p¢&ÓW+Q÷5ô(¦:c£º6µs_“U VtÕO¢ÛŸÎDó¦žKùŠD½Žµ8¢åÐQ Óz˜8Kˆ¡¯Åĉk+#€ŸÀÞmw¿?©ÂõÔCU(T³W“ܘ&¯v¹±Z%?ï² uuÑÖA±T½ú{§“£S~0Í‹Nðlb&£‚ìB“©FÓ×õP5…¾¶8ÍÿÓÛþMÝÄzä¯ÅBIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment359_“Ò¹áIDATH‰íÔ±ŽÜ ÐA¤ãÒmq ¿p©âbµ(t¥ ´¶å‚ß²C±e~U~€tH!&cìÝK”Š4Q¤P z<ÌȆìuÆ%’¾ßBÙ—¸‡¼íD<ÃÇ5øË~Ü5îªÇë\·½Û5m'¡ú¢éWU7 9/ݼéŒaèÜs ªOï3÷|’Qy0Ðí:æ%$XªðòÓª]¹Q7f;'0‡À&ë¬xcåEX‹àœKGÓF>_œ“=æÞtœ³«¶ÏñƒsvÓfWë“¶î êSÛÝõØíŠ.¦…ø¢æ¦Ñ :TzÙôØÞsM9Ù´Ý=÷±iÚ½ü¬¢‡wMó´•%¼Ñ΢­ÀûÂlº@õÕú¶1¯‡aSч¢ 8¶VúØž¸W ›ºê3ì9â°¿¯¤î³‹ gô6ïóeõëøêº?×Hà¦äú¯ÿž.šÔ rÙ:ñ<‰E: øÀÄ §<ÐÊ}'Oj8‹!Ñz’c®äªš•I‹R÷½øTÑìÓ£¦ÿ ’Ô…'¤FEU±tUU Q mÕLêÚ+ZyMŽu•5=ÉšàÂ}M™? žQ3@îAÊr¿{ùºö,OÒSŠŸ˜× uòoë¯éÉÎ#À«±fÍIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRC",Y! pHYsb&2 tEXtComment4110k‰ IDAT•mϱ ! Ð(®Ì7J²\•µœ*k0ÂIi\ û18‰ª’ÿÇ`%_ä³€{⃌]Ш]˜¥)‘â*Á.§l¶ºK®×)5m®þ¶»ÊmJJÊâB—âõŽ iè.³—žÇÜTÛ_°ª­…¦¥`ËPDq\>j Ë9„sK;Š7"ʹK’è"IEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR–᪠pHYsb&2 tEXtComment418I·1®7IDAT™cøÿŸ‚þþgøPÏðÁLþgøCê؃Pê‡=Ã{†@Ržá?ˆ„k#uK)uƒi?ƒIEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment419>°8qIDATH‰íÔ¡ €0…ákHº+ ëX‰ aVb¤“¤HHôÎaà~û©gÑUg#½¯•©©éï4¨šUªö«¦Ó «KÄÊ¢ÍqùÍü©˜ Ô:s[T,ÙSDÈHQR4¹UÊÔôSºÆA´“ò:IEND®B`‚leptonica-1.70/prog/recog/sets/train04.pa0000444000175000017500000012165712233323050016337 0ustar dandan Pixa Version 2 Number of pix = 196 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[1]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªUIDAT™cøÿÿ5 f ñ‡Hü`¨o`øÀ`ßÀð€AHT‰øþÿØšÿ£ìÿ›I$Ð  6lØJ°å`g€vÈ‘þ}Ï4œûÌIEND®B`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªUIDAT™cøÿÿ5 f ñ‡Hü`¨o`øÀ`ßÀð€AHT‰øþÿØšÿ£ìÿ›I$Ð  6lØJ°å`g€vÈ‘þ}Ï4œûÌIEND®B`‚ pix[5]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªUIDAT™cøÿÿ5 f ñ‡Hü`¨o`øÀ`ßÀð€AHT‰øþÿØšÿ£ìÿ›I$Ð  6lØJ°å`g€vÈ‘þ}Ï4œûÌIEND®B`‚ pix[6]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[7]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªUIDAT™cøÿÿ5 f ñ‡Hü`¨o`øÀ`ßÀð€AHT‰øþÿØšÿ£ìÿ›I$Ð  6lØJ°å`g€vÈ‘þ}Ï4œûÌIEND®B`‚ pix[8]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[12]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªUIDAT™cøÿÿ5 f ñ‡Hü`¨o`øÀ`ßÀð€AHT‰øþÿØšÿ£ìÿ›I$Ð  6lØJ°å`g€vÈ‘þ}Ï4œûÌIEND®B`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøÿÿ5‰F ñ¡¾áƒ}Ãù† ü@ÂH<¨cÿÄÿÌ ÿ7#Íÿ’H 6l<Ø"°•`ËÁÎ;ì4#™]ˆ+®Ù1/IEND®B`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªUIDAT™cøÿÿ5 f ñ‡Hü`¨o`øÀ`ßÀð€AHT‰øþÿØšÿ£ìÿ›I$Ð  6lØJ°å`g€vÈ‘þ}Ï4œûÌIEND®B`‚ pix[17]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment0¯ó½ªUIDAT™cøÿÿ5 f ñ‡Hü`¨o`øÀ`ßÀð€AHT‰øþÿØšÿ£ìÿ›I$Ð  6lØJ°å`g€vÈ‘þ}Ï4œûÌIEND®B`‚ pix[18]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[19]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰ƒC„”µ¦/^ŸÍIEND®B`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[22]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[23]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[24]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[25]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[26]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[27]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[28]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[29]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[30]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰ƒC„”µ¦/^ŸÍIEND®B`‚ pix[31]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰ƒC„”µ¦/^ŸÍIEND®B`‚ pix[32]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[33]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰ƒC„”µ¦/^ŸÍIEND®B`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰ƒC„”µ¦/^ŸÍIEND®B`‚ pix[39]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[40]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰ƒC„”µ¦/^ŸÍIEND®B`‚ pix[42]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰ƒC„”µ¦/^ŸÍIEND®B`‚ pix[43]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøÿÿ5‰æ!BÔ~óÀQTÕIEND®B`‚ pix[44]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment2Aý܆eIDAT™­Î±€0 @§¢Ì%£á»”ŒÀ*aFH™"#ù £¤ùÊ–$f¦ò#c-€*«ŠJ~(-©ì#âØ™_¤—áà׺ƒÔ‰ ‚ˆ Œ ‚•€ØA*Xµ€ð¯ bIEND®B`‚ pix[80]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[81]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[82]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³NIDAT™cøÿÿU yñDü?@ÄñN ‚Hüã2@â ø">Ô‰ ‚ˆ Œ ‚•€ØA*Xµ€ð¯ bIEND®B`‚ pix[83]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[84]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[85]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³NIDAT™cøÿÿU yñDü?@ÄñN ‚Hüã2@â ø">Ô‰ ‚ˆ Œ ‚•€ØA*Xµ€ð¯ bIEND®B`‚ pix[86]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[87]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³NIDAT™cøÿÿU yñDü?@ÄñN ‚Hüã2@â ø">Ô‰ ‚ˆ Œ ‚•€ØA*Xµ€ð¯ bIEND®B`‚ pix[89]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³NIDAT™cøÿÿU yñDü?@ÄñN ‚Hüã2@â ø">Ô‰ ‚ˆ Œ ‚•€ØA*Xµ€ð¯ bIEND®B`‚ pix[90]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³NIDAT™cøÿÿU yñDü?@ÄñN ‚Hüã2@â ø">Ô‰ ‚ˆ Œ ‚•€ØA*Xµ€ð¯ bIEND®B`‚ pix[91]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[92]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[93]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[94]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[95]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[96]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[97]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[98]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment4¨žy³MIDAT™cøÿÿU‰~8Á$þˆ? âˆø'€ˆ ¢ D°> ñOHü?ì€Ä‡:2åCÃÑ€J@ì • Ô‚C ´trIEND®B`‚ pix[99]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment5ß™I%LIDAT™cøÿÿ‰ ò8°,;Ø0aÕûýøÿ‡Hüì Û°` ’ý Åý m `ÂDÔ70`šühøÞ‰v©H<IEND®B`‚ pix[100]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment5ß™I%LIDAT™cøÿÿ‰ ò8°,;Ø0aÕûýøÿ‡Hüì Û°` ’ý Åý m `ÂDÔ70`šühøÞ‰v©H<IEND®B`‚ pix[101]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment5ß™I%MIDAT™cøÿÿ‰ ü8ˆúÿÄÌ`SêA„KNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[177]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/mIDAT™­Î± €@ @£/¾dFa1A¬›0%zc¿„Ä4×$q ’?Iâ†8Ñt¦ lƒØK,¬¬fù23io4H>KNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[178]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/mIDAT™­Î± €@ @£/¾dFa1A¬›0%zc¿„Ä4×$q ’?Iâ†8Ñt¦ lƒØK,¬¬fù23io4H>KNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[179]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/mIDAT™­Î± €@ @£/¾dFa1A¬›0%zc¿„Ä4×$q ’?Iâ†8Ñt¦ lƒØK,¬¬fù23io4H>KNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[180]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/nIDAT™­Î± €0 ÀRPf6!£áˆÁHÄ"!%âñH @srá·$ Rœ«áÄlHb2ôE07qˆö¥²øJ‚bAWKNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[182]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/mIDAT™­Î± €@ @£/¾dFa1A¬›0%zc¿„Ä4×$q ’?Iâ†8Ñt¦ lƒØK,¬¬fù23io4H>KNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[183]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/nIDAT™­Î± €0 ÀRPf6!£áˆÁHÄ"!%âñH @srá·$ Rœ«áÄlHb2ôE07qˆö¥²øJ‚bAWKNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[185]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/mIDAT™­Î± €@ @£/¾dFa1A¬›0%zc¿„Ä4×$q ’?Iâ†8Ñt¦ lƒØK,¬¬fù23io4H>KNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[186]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/nIDAT™­Î± €0 ÀRPf6!£áˆÁHÄ"!%âñH @srá·$ Rœ«áÄlHb2ôE07qˆö¥²øJ‚bAWKNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[188]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/nIDAT™­Î± €0 ÀRPf6!£áˆÁHÄ"!%âñH @srá·$ Rœ«áÄlHb2ôE07qˆö¥²øJ‚bAWKNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[191]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/mIDAT™­Î± €@ @£/¾dFa1A¬›0%zc¿„Ä4×$q ’?Iâ†8Ñt¦ lƒØK,¬¬fù23io4H>KNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[192]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/nIDAT™­Î± €0 ÀRPf6!£áˆÁHÄ"!%âñH @srá·$ Rœ«áÄlHb2ôE07qˆö¥²øJ‚bAWKNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚ pix[194]: xres = 300, yres = 300 ‰PNG  IHDR2ùM; pHYs.#.#x¥?v tEXtComment9Ö/nIDAT™­Î± €0 ÀRPf6!£áˆÁHÄ"!%âñH @srá·$ Rœ«áÄlHb2ôE07qˆö¥²øJ‚bAWKNÑòeJ,Eñ6W÷rêIl&Ü¥q—Z(‹ÒšÞƒ‰ñ¤.„Z’Êr}IEND®B`‚leptonica-1.70/prog/recog/sets/train01.pa0000444000175000017500000001603712233312605016333 0ustar dandan Pixa Version 2 Number of pix = 32 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR(ȃ×Å pHYsb&2 tEXtComment0¯ó½ª`IDAT™mλ €0 „á³((ÙF ›áÑn”Œ@IÉøD„Ñ|•?&âÀHì¢bHf#XÄæï¬ðàÜX/j?ø—Üð-¯ð"¿Õµ˜úL¥Ù×TX’œFDðY¯Rvwu IEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR )|‘ pHYsb&2 tEXtComment0¯ó½ªiIDAT™eα Â0Dág¹ Ã  d¯Âl`–M’R¦ˆ8þs „8é}õ!Š8Éâ ‰ô›y”Ô ·eP/¸ØþÑ—e6“y˜»É† ÿÐÕLŒ%“y™Ýæ„[ïÅhÕØP>±sSIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR)ß` pHYsb&2 tEXtComment0¯ó½ª_IDAT™•Ρ€0ƒáÃ{l@G)›µ£…M:Å‘» °˜O&?n¬Ä…Ù™ˆƒEKpªÈu3EµÓðý‚/Ú J ¨#3;›·,^Õû¢4ša(âÐŒ™ñ¯P~(òrIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR)èè¿c pHYsb&2 tEXtComment0¯ó½ªgIDAT™}Î1 €0 …á'޽€Ð£ôh}Þ,àEº¹V\„úBApÐå[B’‰hÄ…‘8;Q#D"Q’‰l€åò¢ þ@ ³?N£¦ŸlÔùÕYü¹ZÊìAžV{ßä¹Áã°,´{äQ[å ‹G IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR(#´lÆ pHYsb&2 tEXtComment0¯ó½ª]IDAT™•Ρ €@DÑA é!¡3nèìJ¡ä ²  óÜL>Æ :±ÓŠÆéuJN^DÉr¬½¾HÀ„ÿ)Ny(G0GÁ\UAÒz7OÂblf:µLkíðKôIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR(=}\u pHYsb&2 tEXtComment1Øô<6IDAT™cøÿðÃÿÆ ÿ1âf@à@üŸ†ø CÐ& FûÀ6†ÿÿÿ×kF'3ÙÁ2IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR)*Ô] pHYsb&2 tEXtComment1Øô< fb€ þ€‰áÿÿ{´CÜýY‰IEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR(=}\u pHYsb&2 tEXtComment1Øô<EIDAT™}ÌÑ À ÐÐŽ}¤›Ý(ŽàÅŠ?öàABà P ¹ý5qíÌ­-φ?üŸÓ àÂ8Z:«šZ6PJ‹R:õIEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR'#é…ž pHYsb&2 tEXtComment1Øô<5IDAT™cøÿ †áC ƆHøÃ†@ü¿LÌ@71:hN`aøÿGFó×3S+IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment1Øô<4IDAT™cøÏü‡á71#7ñ ÿ?)˜‘nDà î1È0 ƒæ, ÿÿÿŒçB?·.Ý5IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR'Ì+î  pHYsb&2 tEXtComment1Øô<:IDAT™Ç± ÁÕÀ²åK³K06øóA#ÁƒáXd•A¥‡v¾ãÈø6%&÷ŒŒ¼ ù D}ÜèÊ‘IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR)ß` pHYsb&2 tEXtComment1Øô<IIDAT™cøÿàÿ†ÿ@Cý† ¢•‹ýÿ@Ä’‰ü„=œÀûÀÀrÈ- HÄ(q€áûÿó@ÅÿÿmGd–u~…ÙIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR('A¼û pHYsb&2 tEXtComment2Aý܆uIDAT™uÎÁ …0„á?(x´„g'¶b'Iiû:ÙrT¬Áƒ{ø›e&8;lԎẦ­Êj¿á÷¦ï,ëäP  ÈM¹%qbŸœ¨³0]GÉÑRgŠBTï“°QPšÚ>f鯛*ÿʋ𠕸@g¬gýIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR%tÄ pHYsb&2 tEXtComment2Aý܆oIDAT™Uλ Ã0 EÑkKàQ”ͬ.kq R…@æQE€< ðCpÎiÌdp=3«£=aÿì^ÝŒ¤e7ÝE8F¬VżÄ(¢Wahš#9…_b‡YŒ[ô:À^í‡JÝÐ_gÕNê%LãIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment2Aý܆tIDAT™MÎË Ä0 Ð1>䘶”¸3«4•¢{ñÁd2N Dˆý0±9Õ(‡Ò»°n FoCô•¶ðµÑð?5ÁySÚÇ¡ÍÌ]Ä!4‚޳ˆYÅØDîÈßâH_X5O´°õ.I¿ÔVKåçĵçIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR)ìo^ pHYsb&2 tEXtComment36úì{IDAT™=ÎÁ Ã0 …áWrè1Ç\ ñ&Yśأ :Hß^VŸâ¤`>¬ƒ~ÇLx+‚xz6‹å?I0ÁZ4î.¼SóÅ µ•½†)(„¾Ây’ï5¥Þñ«nNJ'Ý(Z‹zöRÏâRösņQ=,uþ¯Z0ð„ídIEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR('A¼û pHYsb&2 tEXtComment36úìvIDAT™MÎ1Â0ÀE”´©À?ñWò“ÜÓî)Ç"ÑP /»$ 4cÉ>ï^¸ gs*$tæÝôœÚFõjXAê £aNb8`8êCw6åáï_ñdibø#w¢‡zohÞjVXÝñöÎW…>èdÖRU^±âNÊIEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment4¨žy³\IDAT™]ͱ € „á3X8‚£X8–…£½Q’‚ð¼‹D¯øÊûá ÞàMj‘…‰4é“&êJÊ&v’b·h$]¼çNüæET¨F÷ -’p·SnOO$ŠIEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR&¾ ¶ pHYsb&2 tEXtComment4¨žy³WIDAT™Uα €@PŒÅ•ç®áh–¸£0å‘oÑòŠ_äsgòQÐB ”Ü`cG`g¢Ø'Å5z`)òò c\>艬¸¶úƒÎNÃG^1â½IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR)á pHYsb&2 tEXtComment4¨žy³bIDAT™UΡ À0 @W -ëÍУvŒŽhÕõ[i¤œþ¥&ë—’éJ ²ó¨È„òàt ArÚùóÀN Ô‘¶)ù1(+LRvür$Œè 0Ð`g¦ÈXúJ³IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR'ÒâÞ pHYsb&2 tEXtComment5ß™I%`IDAT™uα €PÐ3–Žà"FG7ÓÊ1ü‰ 8€ ÞQühaóB Žd}ш–ØA"~À,zÑÕ5ø( ¬9†MœÁV|ÙÅ"Xₘ2ªþ"Š®]·ƒo<˜I>‹vŽNIEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment5ß™I%hIDAT™mÍÁ € …ág<¸„‰£ÈH`nV6ѸGNÖW †ƒ—/ihAœטíÕ«àü!¡°pÄdŒÄ ‚˜yr)+·­HÏa #(ÂÎTØ•š_^¸ÁÏ•™ÚTXNP9IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR'4ËW pHYsb&2 tEXtComment5ß™I%pIDAT™m͹Ã0 DÑïQàP¬@l°%u –†Rà2Ð< 8yŽ]Þи¡$ü0s6wmÌêözò4Œ-áˉª]vIÁ\ ¾ ˆ£W"W0zlñ1êhA¤HæI&+Utg¥SsûªªL¦[^3IEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR('A¼û pHYsb&2 tEXtComment6FŸoIDAT™]ͱÃ0 CQäT¤ôÒÞ@«hs4Ž‚\ºð…&Ø$¯âá#؈0$À¸ÅÕlà|û7_`'á3~±bï šxyÅØrS,ð}™‰ë¹`7ÅsŠÚ;µ|©q«…g<"øh2F]j=IEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR('A¼û pHYsb&2 tEXtComment6FŸsIDAT™eα ƒP Ћ((3Âg“Ï( é{4³É2Â9›‰æI–ìó!|&/⊠Gò›Å·%Ý6°ïGžXñb} L2™‚ ¸h¶Ý5Œ‚ì†V,—½ù"t˪Q…2ù¸šVgý ï"‚ Eqh½ÒIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR'9Õe pHYsb&2 tEXtComment71—( ZIDAT™u˱ € „á#”Žà(²8+Ý(Œ@iAÞó¡b4Ñ+¾â’È Â–ž„‹˜§ 1¨ëÈ@xñF5Ö:ºÝ”©“ç¢‘ÞØ{"Ô?ĵL•;;[X·w½IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR*ˆU‰ pHYsb&2 tEXtComment8¡(5˜zIDAT™EÎÁ Ä Àò¸ß‘hh)Ä¥¹Jð“Gn7 „F›µ1ìx°:¶@€'’hÕÉÕŠ8&®«W'ÙXH À)ôw[)/·Þºª }ûðÙXur±´èT ’52±¯­€²ö›3vÍàöÃ2còõ¯Ob³ÿ¢fIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR)ß` pHYsb&2 tEXtComment8¡(5˜pIDAT™Mα Ã0 DÑo$pÊ,`@£X›I£]6ñ.S`Žra5O€HŽà%~<ÄÉ"0+•nš*½‰™ÝPºy{ÕuœeÀ91þrv³å»'-ÂQK3ÜŒ•â³þL2OWI×ý^Å‹ˆc"Bž;q@ÂIEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR(ȃ×Å pHYsb&2 tEXtComment9Ö/iIDAT™Uα €0@GÐ1‹Pd2ò£y”Œ@‰ây‡4)ri^¶ñ`%.ÌDÅDp{"¬@o0Ô‘¸èXPÄO?ØÉќ“ŠrÅß‚âï=D›†Vi$5·bÓæB¼):=b>dÙHò¹ÃþRIEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR('A¼û pHYsb&2 tEXtComment9Ö/wIDAT™Uα …0 EÑ‹((ÙØ„U2$3âRR Ì3Í)Ž'¶7«s2;ÉqF± ŽíMTѪZÂ6á_:u$»-*éù¦E:7‡¾ýTˆø£Q/WÕŽs}nEP²7ó ™tL”ô ¹)Ô÷·JPÿ»–W°IEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR(ȃ×Å pHYsb&2 tEXtComment9Ö/oIDAT™eÎ;„0 ЉRб-7Yr³ 7›£ø”[ ˜1¿š§±%˃#±àsbè~3Q["à"y½áƒò¦Bg¸P Mc²à¹eew+‚;«ÙÑTWLDƒÇ™s§ŒOCYÀ„ IEND®B`‚leptonica-1.70/prog/recog/sets/samples06.png0000444000175000017500000004153312240072333017051 0ustar dandan‰PNG  IHDR£³²ëJÜ pHYsb&2½tEXtComment Boxa Version 2 Number of boxes = 9 Box[0]: x = 27, y = 27, w = 306, h = 304 Box[1]: x = 362, y = 27, w = 305, h = 304 Box[2]: x = 696, y = 27, w = 306, h = 304 Box[3]: x = 1031, y = 27, w = 308, h = 303 Box[4]: x = 1368, y = 27, w = 304, h = 303 Box[5]: x = 27, y = 360, w = 305, h = 304 Box[6]: x = 361, y = 360, w = 302, h = 303 Box[7]: x = 692, y = 360, w = 304, h = 304 Box[8]: x = 1025, y = 360, w = 306, h = 304 ï"˜f IDATxœíÝÏãÊ øàcuE56Qƒ9L-¬V”á|çà ÐX£(oãcÿ ùözoÖƒ–H™Æã,`XìŇƫãþ >4ú‘¦×Ú®>ÎaÐ/Ø&÷4Ú\Ì‹êŠbì÷ÔJ¢”ʬT½R®|J%EÆGAF|ƒ ‰ý“$ßt‘NªãI'Õñ¤“êxÒIu<é¤:žtRO:©Ž'TÇ“NªãI'Õñ¤“êxÒ¬ É>Ƀ%÷ZPkÍ~K2kõ}¯S|Ъç{ë+ø'öZò r°ß®ò¢\í½®SœT'ÕIuX½ié¹êõ=æàÖªÉ ‹±¢Ò¤|o[ʪÉ5.l[°`·Siÿ†e ÷}ÏÖ™n_nl-³Šmª4ßò‰Ø†Á\•MᇠêdÖø÷ªâðmߨ27Еì;UDÌU‘²ÛU„)ï–*±k‚°ÂÏ×m]R“@'ösoE•âÞ§ù–ÐâœÏUþ *uKÕ–5•Éh‘kKªlë’êRLU0"+ª¨;UœÍTÃ|lUñ\÷¨zmx¦ƒeY]m]rªy®®¨ ßÛ÷†‚š…ÊpÌǶ¼øjÅíT;¸6|lÅo.ÿ‰æ™ hRU7¨´ˆg*-v $€]ùUWªôª+Í2%¨¬ª CÕ¶d@ÍTj§Ê·Y©Ú] ”éë›Û««‚u`öP½tª8¯ª4‡vfkªªd°+ÃÜF†WUrû²ã|/U¶Ÿ*éÁ’bt •®ªvÖÅb_Um‹w³JvöU…-i•¤Xª”¸I5œ©’*:W©ÙBÉ– ´Bû¨Ú,Qv¡BØ–C%|âTãªJÎTÒ~Uó UQ¥ _¾€F¿&A£¹VVÛT*±‰_ªŒM‚]*o®zãÖªãÚ%“',ƒåF+ªÀ°˜FÑšFRÍç*a:çŒZMXJd3Õ,£ÛöÀ© ºA•îIðõ–PH6˜ôç*Ùír“Më㋤ÅQÅÖTç”-é¸ók)_Q©öÙ¹oHÿl3Ì/š<Õly ˜ ߢš€Š9•"¢)&_¿˜jqˆ˜fqàßµþŠëèº^%{<5¼X‰Pß+H»N•A+ìÍT‘U=ræëvÿÁf©ÁòªJ_oWÅSÉMÁ§[š-Óãw/Tÿ’çѤ^¥!¶‚&;]QY}–Ǧ٠Ÿl~"¦†ÍU>¨†>ÕýK7ƒ2#¨R+ª-(›É`Tö¯þËÙ6$˜©þskÀ'Q^\A'açOÖTßJH×tÎHÍ‘0¢ÅùŠZ9þ·L™רª.+ªmá"|QÒÎT vª 7¢ø³,7f¸¾$v±{Ni?‡NYÁ¡ab5eå/UVÁá²E¥‹@—gNS,«ãõ*ª‚çU•²YÒUN.Ej4Û3¨úíAUM~¦)¨â Uf¡Š'¿53U¥f×XVyE…¯µ€æfµ¬ž¸VÛ«|”Çiü*Sp»yÛ@XÍÞlbv¡f£ì9sïF¾á«8kAc†ªþ" » b °t¦Âe ª ¶•:ðçsŽ‹@q£|%9„¨Ò?³†éF‹x =”ªß$äŸ@%…Ï“ŽÑmá%O¡IŽÃV§sîk¡ZKÕÅ%M¸§|AÕaC¥Ì`m¡º40*§ †¼ó&4ÊBè‹$ž[ƈ=y°èö ó†º:„‡Bv|I BuÖ[ð¾Ÿ0³œï6|L¨ìxƒóÀE·½Z`§CC¨ßqóî;U¸š¡)Pà ©b‰_Æ„è¥AÏ@ñC©zAüRºoÕMëàæùHÍ$OÔiÃH~ß~{©j7™x83Ô\=®RU|ä‡í¥j¶ ýï-6QÐOvó@9ö,³‚Ñ"8d_ºþÝjÒåý»³3EsÕsk¿\_sZÞgþS÷{°ª Ö—/U«9¸9Ý^5©Ÿ³¤’į‰Ô¨Äò|Î!U/Ëw$q*,ϽRõâݪìõFnNï™J¬ÿUÛ ¬Äú_ßÕ8®Ÿ ¨’ÄU›ó-j¾<›zК}sç_KâÎ*¹1QA–oRUžRÝ•Ä=ªl¥u<èyömãIÜYúzªLAy™pRí·¤8©Nª“ê¤Ú+‰·PmÉp«ÜZµû1%®«*ÍvÆX«ªyL+ʩ⩼åÂS±¦¢Û§S·ë*²¾heÔ{¥2tþÚ´©º®þ¹2 êpª¯ÝùŸÕd–1©;§!VUÅ-ʪ@Õ´úg§šTr°Oº­êª¦Ï¸|¼Ë gkµ»…ê‰]S¹“1ß„jùÖÕÎõ®ªðóï‰j‘íÑI5Kïƒj¼sd÷¢Zi‰³Åªâ;«¾Ú²^Ü|g>âΰ78NíËåŸß‰ŠºâËwß)Ÿ¿XS%e½ÌÜ€$lN%ÏãB¬†}¸ù§bõðsòR„ƒ‡¾ºðk(m6² 4ʼn8  Ú“&ùªåe‹‡AÒss™rÍàXЃŽ_4EEEÄggIŸ07Î@âKæÎçH¡¸¡p áæIûiŸ|Dp6xI89àá`„§OpRT"B~P•=§æ"°²ÛbM>c¸9.©¼„,Ÿ‘žè𫾀Ìà™ì_Ǭú–%Ô©pT…ö“ËÀ©žô;ä,a˜nsÂâ¡&†°ážäE‡~λ²±îƒJ·;M®úns<Ë$ òˆ (­¨Îy‚±S©^€‡ ³È ‘lj¯ò„pÜüÙã‚û–(¸ð!Ž"¾°ªÉÓ©Ì38ìóµË”íéö€ƒ*ÀË¡|Çkú©Òܴë4ª˜xÆGôK8ÛTÁ¡'B'NeK•»ô?ŽÓ‰ÒM§j| ª|®šØxb3Uª86":¼ ¶×ë êÏUTR@XQ}ÑÄg²ÎTÒuÌÎéóò‰ª¯ižáÀ.Ü<Ÿ,ž«ªŠæª‚R5~*Ü^ fúf®€Ê®ªž?fîò1ì r—“ÏýçY¤pðshi’.TyU•¡Š+‚ª8S T:ÈqÐV8Ãí™l“Çb¹7Ô…`9ªÆÕš}¦Ò UHxR& 9ñ¢å“7ÖUÙ¦*<Ø5|P}…pýÒšïûö׬ø4ž$€ ¢j²]Å&²ïT—BúeÍÎ*ªµ²º•Àî |N•ý§Ã«\¨À|Ëš âÐHBµ‹ªÌ²/DUõ°¢*‘PiÖ,Û+ÿUZÔ¨ú¥Š+ˆ¸–*qø²‚8 To>ÔlPV1ªâ1¨ªeµÅt¡rïÁ'¼DÙŸã¹_Qú*[¨”ÓTªø¤T3Öì¿ãð«å顪J€*6FA¸úÊò‘U…évWîeŠ_üwqçE 2PרÆñ^‹:ê¶íŽÇIqàÊÎ4+ÿøy©²Ne©Aß ŠÃ>‰õ©¨u`®¥ÊÒßyøU± .U°ß ¿,Ýâ“ñšÍÚ+ƒ*~Õi66*þ[Žã¾Qbšgøë1|ÁñkPµ-ª¢åS½¾høû¾›ix+UøUñ$žæz¶RÓxIžÆø7$}ws‰n²HBu›}ÁoÞJ•ü-ÔwܪáAç—ÅÝeÕÇhuX¤ÄBE|Œ}µ'›8.+˜©ÈSÜqÄœœ·WøøSÜÄìU ¹€·@uÆIR@kÀòƒªÚ„¸a¾üEñTö#f •~=j½VÊjU…›»ÖÐd=Å—Þ8ô•'nÔ#|² ä)¨¼‚úŠKyáãí@:!Ï :JÞòs8桘=¨•F  ±5V,iAÎmØóýÊÓò¢Ìî×k´×¯lrÙs­0s=âo^=˜ô†°~V¾Sžz;œj#¹Gå¸Ìƒ {âËÚâyý&µ›f¬b†Õª*‹Õß ºy|()ϑߨZK;U+¿}#*Z>áHßãõ«o^…íf™ñ©Œ(U¯îSTû&U÷yuõ²Ã7´Î^‰ãQù7ªØüqxâÞTÉÊÉìoBeOQ’*™_Â÷¦’ß¼j‘Äû0Þâ¤Ú+‰“ê¤:©ôñò&µD(²]xl*\­!ä ù-Î0qÕêì0â}P­”ÏÛ©„}i×Uˆt\ûÙw¡z¶Ÿªpܘ2ûii¼—ÙºªX…[›ojâ¿GªòAÊ‹|fvŠ*EÜ|UÕue€ßÚs±Õºê+»6Þl%}ýv*?¬SÑÕ‹ùØ„¸œÏLªÖTù6UÌ,KÕh§êúíjvZ«Z;®Ü‹çó¾ÇŽŠSPÜ­ªªIe†£•YŒ@ekT[g¥ºí|Lë*¶Êù_Î{uÖCq‡¤æÃQ G¾lU­äøÖªÉÛ©Ä­UF@iQ<±ì†9½—ªÕªhŠÏU¸(6MãuU¾Mµ¸)i©‚nŸÍÞr†•»«æj5æ‘âHÕ+¤TUiEµ’ãM•èš-fp\7~+•GëP¥J°ãp §ògªiE5ZU…x9ÍUéÒf8yN[œê+UoЇîR IÀ˜"̵xÖ ¯¨ŠÞFå³í*É57g¾ñlŒÃ üÙlK•­ªð8!<ÎÊAê¡ÈBóÈc ÞÐB±Ü&Áw3[^kÔ8/B€S$6¡ Rž~BqšC|íÏÉí® ¯©èÕht­‹3Z+(€hÖ Oð›g¥ªr]8ve5Œ 7Ô‚p ]‚é>i7ý„)?Á!rÄ©˜Òý^Ÿ ¡yÞ$¾"T* ?†ø–§ºy0¿†{7Û¡bñ•ÂÁ1½ Æ¡84Ì+U¶F…ñT tÓæðÙ&“Ýžê7Z@Rõ?$ ÜU¹\÷úüø°àl˜ïôŸP7ža(a{äáÛ•Us‡ŠÇÊŽP5¾Â fʩƥ궨tU‚Iý±îµÛ ¢q¬5@èLezƒ€ãa9ø8Ëô€Ç7Ù‰Â9¸â·;®;UñB…ŒKÕ§»`ö‹²[QeNÅÜd_¹ùXëAãQ‡ó(U_IJ'fªVg®¢Q^ðQ¦s§ÒÝ^Åñ[E·Í]ªÑ\å6ȦŸsWïíPáÈ-æ¦Z‚¬÷Õ ñ¤ªÒ¥jbÚ´l¯4$¨ÎwËW ÕèíTÏv©2TMt7Ë`¤týEàZÞ)M¬Ù×U/AEª3Õn4çUº'¢¹*3m2SP™R5VÿwÝSÁؾª»SEèHƒª  ¢n Ê ö+U´F5†ò˜©&¦á)Òö\ŒýMUÀ¿„å%a•ïTAÕ‹;«Îà—]eeÊ< bÜà«"økh¡eV ÕZm‘]aYñ™ªMJU }ÝW Êª¨ªÄËr'ÜÝ´t1Ô†?ÕíæcZQõéìTáq¥[AŒÃ®‹ào°2v*†½Ž7TcŸôb¦úéÚ¶°a¬©,ÅLõb¦ê@XRªº½OA5º³ªAnPÍêÀïÇ]ƒ64¯Æî­Jºà‡6Ëz½UUK—ªd®‚ö ¾JJ•~+•¯oP}]ªôÇã)Nu1hèÕ\¹Nqj4«->Ö®¬lœ´VTÐ^sÕêÀ&ÅöŠŽÝ™o©úçîu{‡ê Tq¤ô÷œ*$U?+U¦N•¾ÀÚÛµW T¦Àq•X¶~ªx®šêÞ@àH¨ì—|KPåÊ~Œ§"ÕU?Šï¬²xGÃ6•ë52¨Ñli’¦— ˆ}âãF0L{˪3¬òÿ!$ǰz«*á¹´É3Õf!^/%Ä@hœ ÖÂåc•äbÄSq\O„ õzAz :È?'}_btûÔz$ÑÞ+,×ñ OE¼Äã‚¿ßQ%lñºŒÐ¶ïØU‡ûtª›<ü#uã±lyâPáÀ‘ZW¨ÒA±yà~{ PEA’•8]yŸˆ@Ë*ÏDÅCès³ÿŠ­pH!Þ‚÷ö*VSvëPÕùÙµ± èàÎúëxö™¿Ùrõ`‚ñüÄFæ/-ÎÕ‡o%ÁÕõBµ5Å_âthög¤©»,Bö¸z°K…‰ßû5‘ʼn[«„+)Rž½±[…yZÌÑ´~>ðæt8•;FÖUù‹à•­ª‚÷Få-Pµ*{³jqk£±ï‹ª@.ð®z•·j4ûïú5‘›ÓT¯ «ƒÙ–s_«'>ßC5¿Ž8±ï‹J¹Â`s•­I5•g=窄׮g~¶yãZãé&U±˜ìvª©«ÿ¸¼˜••X-+¶¢ yízæ×çÆö¾UæŽ*厨'²;S­u†ÏWT;ò†é+ûž¨ôŸ:U‹¨™êIê3‹÷bd‚玣ž7W­¥ÆqªÊÌã4ï ‘å¡Dñòp+ÃNx´*,& Á¿ôsØÿ5ÞaB“6Ö½¤}¬*z *_SéO °>",Ž T©gG«b£Ð“~È~ã_AYùx{?¨Ú°zP„G«bÐᤄ=öÿ?¬ÄCFý:áç¨òËFùUMF¨a¤Ù¥Ê©Îü#=¨'|œ_âHUP/Ðäœt6ѰqîCÕ×m¸á?rS5ݵÊuU9ØI[ž„¸Kµ:ûè­UM 4I» )i4áé¶¶©äŽ5ëU*ÐëOn,¯ƒïR­Nw[U U'-¡²¸`¤Õ8‡é"oCUìTyÛTf]E­j@ ûä¢çBÀ.¨ ¢h ÿçe¿«ª2ÛTW;UÅ†ÊØt§Š¿ªwvõ]·ëΚu;ä¢ÅHTPþÞ¯Qm9®ÜXŠ|ëqµþ”ÍØUuÏž5É“Ë.iAøt@..˜ìä'ÐZÉÙpÁÕ–T¯Z¤g‡š ß­Zýõ¶ªÇß‚º‚‡-§òÜ©48®ÂjŠgôhUNà¾×&ŸÍO`¸0ÞqȺJo[Ù ª‘WÆîV­½}‡˜½þ<4™w…¢Ò»UëÁßAÕ+3ÿlCÅ÷W×U«îv*µ[µþ0Œ»«.7TÍŠJº mm­âu•ö Ï ‰Óð9™Í£‹ë*®ði‡?¶…§zÂòçº7ð ¢}eWø¤ÃìypUyFzÖäVS»¢"}ˆ>lB‡vX0êÎ(hþ>2ÐøØ$O5UUøØÏ¾/‰4 BßxæB›c¼0ÄBš§NEU“)BáÝîS®ÏYBÚðI¨€ƒ„%Ïðã ·WÑò<“ÝTõªª6‰C‘дx4xàã…F‹Ó6ð3Èvdñ‘§¢’—ªÕñÕG<’àÌ×—†p…ܬ"œ†T’™ê^‚ê¢û”©F¤ÕÕÝKPÅÔM„ý¡[ª}ÎaÇÑýŽ—¾Â3žãqr)š<ËPuÎù(­ª”ê _?äQªÜתϘ”8õ”T=PAØéFgù‹Õf•îµY.) /tOõ¹ X¤š°sÊ\÷îRVrËq%’ŠjÀcʪQþªœÙKw ÁâTÊgšœW÷ÀTu ᳺ@%"¥ûl”Éi© bÈžS}T82M™~‡eê!Ožê®6çq#ÖR©õ]T³Ì?ÝP‘Š*` bÊN5dvú ·Á2ó3§ÊuÁVTCy‰ÓæpFSÝø D*œöF©v+;söË"ÓsÕ9O>Ñ}7wLZª”6wPÍ/Šl¨U•eñÈ©pNž©vªÜü À°t*ønù¤¢Š”, ¿b¦Â‘‚£h®²c¨âÊkø^ÁǦ ï6pü쬙Ôm§?¿¯ IDAT*ÇáåR·o_zÕ³uXU5²_ jjÙxª¨J j:”eNÕa¢VÅ𱑠;8š"WÂên ÇÙLg*˳¢@V*è3ÌT8OJMî *0j*Ur· ïLŸæNå5{У ”]ᨬ©ì\eŠ j U¨>ÞPÙ¹ JNBÝ;WqüÃ]TÄ̾u•·¡ú¿™zªxŠíUñÀ·xacMvª9£Ø:ÕCT¯«ª'N…Ç•å±t¯{s•º›ŠÌ¾§k ñ⟅êùB…×`p15ˆU¢Ø¥Ê!´‹ãò9ßýªêKžÙGÖN Ô)¬œåö5¼^¨¤|rÇ1Ò.4z*W›,ž‘ò~®‚Úâu޳N_ËUn²3T›ªb®zåTÅÀ©ŠB TMgªïü-¨ mž*Pɉ%,/>ƒ×ýùq•J’Üò€z©ò¤òÿú[-÷ÎcèûÇI«%’ÏB§ ø¨ß•«_cWTª^•ª?®Ô©‘Ð`8Õ§âqf6Uª† ‚Ö%?¶D€Ê´Û š8Ôú–ª÷†‰'Åc AÂ}®Ý>óò¤ ¶“íþÏ’i©”ªëR5Å ‹Økˆy·« ¶ˆ fÄÛòHPéÜà„f´¢"p4¡ Ú«6‹mñ/¬*º¦Ýèa+ÔOÐ aš¨Ö€(1u!~>nÝ2¶¸˜FQ†]šh໲j2:” Ò틎ŸÀ^¹PO³¤ýx@ÈETé8InÓ°Cø(K•ÆG‡Šà÷UŽ!PõÉO\;ÇcèLám.¨zzQN¼…cÒ`[އ"Ö“ø|KT%pŒß6fÏ£2®X¨hž`¥ÑêµÏ™Ÿ(ò'úâ)”!ûO¥ Ǻyö¼½âÛrŠr=‘z"bɇUTÐÙó¡“YøŠÙç2q7’(êNwòÖ7P$Nu1°®'}=´t”à@:øÜB†‚€Î¨l=¾m{å¥4KüPrøJ' ~½n«ÁàÂT—tým\ížwgËSáS«ÄëСķ–ªºÒù ÷úsË1gó!¥jýSÿ>¼eßÏhú©l‚ÊñZw·ÛmœSh=Ù%P+ž¿‹ÙæÃk¨kO"ÜR³ÉÒäÜOÎ)Á¦JIÕjP/qgÑ$%çþ;¸Ò3W z¯s;}ÈÎI–…ç~Ø|èT¹”­6õÊC=¼êå\ÅŠvP{ë–ªóf“DYxFIã"]ˆ0ò" ¬Ûìá£ó³Ã«²ùí™÷£zEÏðúUö Â>jük§J³¤Õ£ TP¥'5˜|rpÕb(ƒ=°öòÄíTñª‹„ž·¾çTQ„eÅüREZPˆ¯-ªHõyíÍз¬-T T^‹<¼hyä©þ¾E>âëL¾ •˜½‘Y¿ÔåÒm{"O›äÌ»¬v“2ˆ_ΟppNÃì|6¬½„|§þv$Uk>6ðèUòÃQ…„<,ó¾rM¤[Ó~„ªeúÞªªõa¨ªÇÕ3IzíCõ´rˆªõa¨–É›&8ZæíTòæüÖªLÝçîCE®Ãj•xoªÕ!YQÍ®òK¡]·$9€ D®ªâ[ªž×©‚íªh®R¨reуÍÞ¶1fÇÖ¾XªF5Ï‚UÁ‹Êo2XQ•G´øG§r_Àr?±Å~ªÊw?{tÀmTjVVÏÝoY©2§ï-„vªÅú¿!Õì–Ž¥ŠÕ¨ôâ´Kù[Ueçª|—ªºãJW UwMÅuPó Vy=/+¾ªÊÞ¥ªn z93¥VëªÕáÀ³Ä÷PÙ…jùżK•Ý®*ØmU¦¢2÷§zvŸ*³·ª˜½§+*=S-–ý¦ÊêͪJÓ \ƒêË¡g/]ÍuG(Š÷&âÅ›n ©òs¨)ñdK"äe g3‚/ÿTúÊ3ÔÊDD‚CÑ>k˜*œ"éÙU^_ÇgRK®Q•ájDº©j,~5/+§òtÑü!Îí1|Ø«¨šRÕ–^:˜ú öÀ?qªK‘‡«-,+¼È©RTi>rý¥l´P}-×UU|¦²N…[¦Ÿ¯¨Ü7A5³ŠªÉ *•9¨ÊÅsÂÆ T¿,U_fÏ*»®Šô¼f f‘Ïʪ`¨Š*÷ÀMTÉÔÌŽ«Ô¼T©Ãªb‡‚Šk{Þœ©òŠªºžµ84ÓB *¨Ùó±S¹áY—ª§Eã»Ú©Z™BUêTPËr‚T€é!UQÁ^cÍ€‚¶çRõ\rT¹Ú⺪"=74#¦!´Â£8O!«Ÿ¸V˜€j\žÕ'¥êãLåF—ª X´éTTú-T—7©,».U ðøS‰Jø¢¢R \…M< ÂÜ03P‘.:;'Ý6„S嘳¹DUh¼DÉ®b8í–ñT£ùˆ¨¿°8Nô­â@¹SEmfÙãˆàÚ«Á·Ç¯ìñB@䂞ŠÊÛ®'bCß|Ä%K<%ˆ{4ÞpC囫\¬ïÃ8nWèI¼Ò„Se‚êÖ1»oöUáp7lq ‡±4ú<»VAìNÜsUå¼|ækws“o?§ba|¾µºAg$QÄW3U@¤“Zú{_ûŠ¡ª€XZx)Nyâ­ûW^%ó»÷@ýÞ+AÒùÑvÃÏ'Ї®+A¸\WURlÝ-@ËL8¤g-/Ï[ }OVyVô³'894Š?Øy *¬lxCMúÔW?’< Ü †£*_Ί¸®µ9x×Dv«ðó,ý Ì-`œ*q½Æë-Wz¾QÕî=p壕ìî¯ç¿‰÷Nµ=QkÍÍKaš«Â½–.ëÃûÍûPU‡H’ܼÌñ¥“êxÒIu<é¤:žtRO:©Ž'TÇ“NªãI'Õñ¤“êxÒIu<é¤:žtROºÅ¹[¯Æí•¼?õ~WY{Wèªç{-z]y.ô΄K½¸q©[­Ò^ݼH%T¼êå–e27ïSp¤ªÚƒ·…oõû¤ÚrÕt–Tÿ¿Qe¸ÙT}¹e•îýC«jîéY$†ÏüIø~ªdMU{5Ñ_°Óëøöe(ÝY5 ¬nÃ7÷À¢Ö¯pâßÐû&Ëê¥oylÏWT¼nÍ­ïæ¾ nV©oZ5<*x¼’…-ªhCU»J\6ô¿Q•,Dfx´’…ºy˜àûߨٷ©`L¯š ¤Ù˜R$¨ÊV²×,X§²µ3Ë$®¶/TÅú†Ìû¸ç“·k¯êTC§7«¤Xªþn±ä>ªû œT“»ÿ&›²·RÕÝå9T Ò"eïúºV•Ԫ꾨Щ^ÌT|SeçQº.2ývªº»<‡8­í\¥Ü}ܲ †ëy­¨þ¯[¨X* ÊÙƒnndÞNUWgj@ã™JÈ€ˆ8Nú_­-ø~;Õh¦¢k·‘»|Ùò;s÷E±âNªÅ(´úÖ¥ |®JçÂ÷ÿÀI§µ–—öšªl©#8²Fkk,+Vª TÜ­bµªü-TJàM@vÔòÁµ±…Ünf{`cÐiÿIÙÏwªp(¿{lqáAɬÏEUU p²ÝUZn`f裸Ü× V<¼ðoš|m™Ô†Üða©êƒê²@°Ñ^S¥ŠÎTB‘[Ù'¶¼‘°ºä%ªàÿ»Tå< ùk§ÝEõ‡sO=bæòÂןomYéL5h÷‚æåe/ˆ‹æºÊ¬–Õã©…#°xlž®®Ð”*áT};Ü¥ÂônªT~¬U‡OÕk¶Vb N‹RÕouƒÆå3mGE£|ve¹~U%~Ùa\Nÿ> E +IËªŠ ±MØ¢rû¡o_ÜMõÉ×4ƹæ§úz]¥< Ù˜ç²Ðí é)ËLk°¶_é^UeÎTþ›–Ôkª©S™™Š—S§UTéRèTgŸnZb1Ñv]yྠ]Yõ.UñgéTúi°V¨ž¿<®Ò¢Ñ¨pÝÕßY]òºTK•Ø­âwR…<-Íu‚ˆ Õ5`‡6wu`ÏÏ 8Z¦ "v­¬ñ–ª¬hõQ-¸úD¯-9‘¶ (œÊߢJ¦â(Z8jÛTIŒeÚˆXë*«Ûx“‹Suin@4E§á.•¹ÐSרòÍZý“É`©Ðúö* “¢?pá dòN*‘T8o6N‡½šLªè™J€*²éæJ¨õÞtƒª±öP핾Y[cþ%ìj·ŠÊgý~Ç••"Á]TJDnn|P)à­.òÒ4ðAQ.fïÚÊÓf¿l¨@ªµS8ºÒ^Õ_¨€A{eT kG`BèRœÓšÞ,˜zÚýWì&²¿­ê‹'c‹XiãÝ«‹DºLís§úÌä: 6ûë¶²—Õ=ÁáR¨b¦×k]I*eÔÔ¨ |¾€J©Œ"ï¦jp mh¬”) V’¯qªT6SMKUK™Ï^Õ©ŠŠ zŒ¹þ7 Ô4ë[ **ÃêT°ß}6«’»DL_49ë9Õõ(¯U]tìTz E`³æ?Sú³éš Ž+baos}a…÷Hf6ûÍÏÒWy¾6¬«Ù*®ëU°ßS÷}Eï¢âü¼×ÿAœƒ*3ƒµMÌT/œJ)T¿ëxº«ü5Uâ+ÂNuaÜ]úÙo>˦i¾6¹ÖŠJª®¶pªØ©xq'•çÝþ¿çêj”éþVWáëŽøz¦êåÚôé Ž£kªTl¦úcWë™j2L6Tf©‚R½Üè­ª¬UG<êöý™bÝÿöêÁMu ®,ûªl… ƒ¯YB÷Êl½„ª.(®‡*¨QAõéäz’­…D î­sÕÔµt5*;W1Ý%¶8 ˆ2ôe¦Ù˜ë[íºÇP±yg¨üR_át$[×éz=eCÛ)[~>ÆG…­,A(„&³V8˜¼¾Y•Ý)b²C¨ ¿àR@3¼ZVqnÇ¡ë·vòn½»ªJô§àfп¢ öÔÕ=Ðf±E0~]<ÝøŠîCåÎ.<{üO˜ïÕ†\úx7Ù-Nõ;ÄV ß‘‚=5©_Ò­rt]Tô®*—Ƶ‹(ZÉÂ>ëtq`åWa·Ìa\®vúšþÇR¼¨âÛñ½«V²°Ï:owUgØÞRV¨ÂSÚÞÝú³_¾UU|#_xŸ€†‘1y+Õî¬HÕ#ÔÊö z\Ux|dp—8ðy™öüÆ,û¬óöª Ñ¡–Ä[퀴AÕ b÷n´žVTâÆ,û¬ó¶*¶YV¥Ê’U¶C‚;«Ì¹¸1 Á>뼿køCp¹9åî~¥ÇœïÚÀ76Šä¹ûy÷ãêÑÛg¡\Q𾌷ÀÌlcwÌÂ{¥Z?vç,¼_ªûÊÂIuRíŸNª“ê¤Ú'T'ÕIuRíµÊ“ÊžT'ÕIµ×*O*{RT'Õ^«<©ìIuRT{­ò¤²'ÕIuRíµÊ“ÊžT'ÕqªvoãøTåuw`.Óñ©<7”o}Ôýj:>qªº»ð—éøT¹LZ7cÂ2Ÿjj„­¹o~%Tï‰Ê=XØÑ¶¦“ê}RÍŸÇ[ŸŽNÕû¬‰ùøPªãUÍïÛ;¨ª{Qˆ°O|ׂwQ…bù³š=fŒ7æTõI^ˆF›|ׂ÷­2‡Vý…,D³C‚Ï×¹‹ª¼SdãÎ wJqhÕdÑéì£ZÎErÓ*ËËZusV·¡èÐ*UtÚÍG7«6ïAß¶ÊÀ½*=[TÙáUmÒäõs²-²ܳj|p•iq0ÕFÔ\6!ñ;(+a¡r?¿)•Õ—û¨‚}WY.¸Eåž!‰3^…{à®>þjö@¹¹ÎÔm}Si ˪ñÐ*h¯Ú¼Ã‹ûT›6W#Fê©ê<ÕáÿïCó1* kþ>ôùÎw*í“…OÓl¶qnœ ÞRõß<ÝáêSÍG’¨ËÞg²É¥°šF Á–©™Dv§ÛƤÅHë~UWC͹üDq6þãÓ®Õ¸U—ƒ‡¾†`C’‚É™Dv§Ûª?¦aÏ7|×Y¦[ªÆ©e\~¦‹Óß=þLÿ—&ÿ¨TÿÙ§J6M >9?¨ª/ú,µWåóº·%§ª›Ž´v•Á8CÕôÿåŒehäÚ4Å9·¹ê‘,GU^ðì°ª |¹G_xsš¹m«Œ3Ûä˜wÎ"(mÚ¥J*BÕÙ÷öÊâ<J5–Á¾«¤YáTÍ&‹a'Ц%|a3¥£qª83"i¼ ÕîtKËŠ†È&E§Éçª"ÚüU㣸)ªzï‡ê{`©ÊL§)@5Vú"qdzqÉ—3Õ_í•Åy:˜jzãb³UØøoÚbœ™vGœ÷‚ñTw?Uœ[Æ¢| aŒþ8i½'ª½W9`q»ÿÓqlú¥*×—ÿó¨Ò¯Ø#šŽ ëÏÈ“cSV•Úy>øhU|גǪ2;—zÎÿTf"(AgùäúU6OA¥Ô‹Ï;Ío,ÿmeUP‚*§ÙäèT©²qœ£JZÖo|{T@E˜õDøîŸÇyvutª U yñ,3D©Šñùn÷KÎòqýCÍ·¦÷@åv4r*Šª€Î…Š­ŠMÔ>ó”›dÁÔÆ#Tá~©)›Œ¯Žó¯øYæTDü›¾1¬? "±ÿHY¡*{Þ|”É1¨~uzÁõOòÌ©°³UïÉXÎýWgͦ7‘/ðéÌÍvÐçú:ÁÁ¤@Ö,cã£U%#›¿&Íþ  5`ÎùŸâ»ÑšGqt|ª1iw¼ D|Ó i½¾ÐäÜ•X;M˜ÍF1 O%»}áË'Ñ(±ÄÍ•à‘N¡ÜâVò„§ÇW³ãcGºXÃÆ™ >–2ÜÔ º ±—";>Õ¶?®Œ:¾¾ð–´2vüƒQ­Œk:©ÞgU¾rVðCQÉSµr™îƒQñêoŒjåŠj5T'ÕIuRíµÊ“ÊžT'ÕíUøhúùÇEÍ’G©*¸%óuãbk³Õ™gŽSÅ–q_9N´t†•àÆ¥ì]U‹¦fªræ³ÙSÇÕR%ðgTGË©jc6°—«ª£<®ìæg¦ÊT~?bÕÚߪ*ýÁ¨ªew„ªòl¦y ¯i™™øé¹*ƒª^ßøÀlT.Ÿ†åd©†(úIAuIŽ3*ÿÀsgû,xÛk±i·øDâà))BBÔD$hÉcTÑL÷Û|¬7æ•Ö"Q-á›A“Kg<Ë¥8F•iòx¦ÒÚˆTõEdœ©§Aq*u|±ÅªJõ+*Ý Î¢üG¨Æ‘2‚ÇnÐük—*s*[œ³øUc_Ö©4ÔÚCU! ºí0ݳÅ‹'G¨Ê}¨úœÊ@ÏQ#²R%¶Y¿€úïÛ«4š«ôÅŠ*t*rœª(º˜©Tï§öuØçh ¢Nõð[G©¢¥ÊÕe§j®ðoá„?Œ§êçV¸VX¢J—ªZáGx¬5 }s”ªÖ@0§Âò2sU®ò_£Šô;†q TÌ©RÕƒ=°Ý$¥*{¥~zt*eIÏW@Ô…=Í ºCÝ8ÇG™I'Š]Ä^<åëˆðÏS4!—Ò='žÄ›*®Aù‡RAýÀæOrXytö[ªžïŸ…}¼¥J3ˤxD™an$q¹‘¯Q¥ú¸>q„*郊ç7TT{I xø ÖâÄY „*¦èÑ©’!ªÆpä‘ö¤HhH„µ¤*I8ñ*ïª\šÂqÄV^f©aJ¼ˆ°¦É‡_â?Ä‹Æ/⣻~•J¬-˜•2Ë nÄ(SmQ.›àˆý8ñâìÅøíT_Þ…}Öy7Õd®â¹êà ý¹*¥ÙøêíTÏ·,g¯Ê§“´T¹)΂QæTiFÓôøTÒ©ü,·×ÃYY9UŒ*çÖO“¿<:•z *íJ{ ê”e¥æªÔ/aoW>߲ܣ[u *EmnÕK•ZªPyù–íߺäÁTRrP1PåùLUTT¹¥VùG§Jª,ÿb¡šÕx\1kü·;®øÖ%«š²¯×Ul¡ºŽ£{T­ûaUzª¤ÙÄÖwME¯ÃìíFüðêß‘*iRåG/T5\lчآÃj”Ûxr„ª„4|MŠ,éxšÇ±$â@1ÄÚ‚'6‡÷y\½#Õÿß5K8IWø| ñ!fà¾PI–УSIwÚ çPèï+ñŸÆ–Ú"÷~ZŻǚýݨv-0» «xË'ðêßÕÛöðyõ'U%Ý£jq¦úƒR}˜eõaª”¨ËÊé=W-.öœTï½êº6+7¦÷\UŸ•ÓIõ!ªÞ|ª³¬Nª“j¯U£J/¶:«¤¬ÉÊéýPÍ…‡?× „—ÀPUìV!úU‹­ÝÏu=rUê~®üSÇ©ZnõÃT•Ï:XSMãQ•¯gåÆôž©Êy´NªÚ´T}å~Ÿ­¿|êÅ»Q)Vðìë‚CMøfâæ:‹¿¿šÇõ¬Ü˜–ªò âåÛe]ônTyVð0Õ>4K‰¯ð"ÏÏ}CíPw„-ü‘æ’ã0§Û¤¥ªlúxùvâ~® r8ܵÆÌò„¨\fvTªÂ\ûÅcýgLð% yÂïz­ñ›Så–ËË|šç–Eº ù*55ý—ÄKi"âÑ=–Õ;º. *u9Q¹²<5MÈA¤rmúAF¼q&-‹ï:6Æu檲.zwe¥º™JÔ¦)àWŸèžéàE|ùÃ8›Z]ÍžæW¯28°@U”ªê®N•Ñ|Z¡JzPV6!RTN¥z}§Ê¯hzÕ\r8Õ'PV6ôô3PÙsøp¬Ÿ]tKUjýa^<ºóè¬ò âåÛ¯ÝO·ªùå¾ÃLÀ=zVúö@{fQå5pƒcr¨ó‚ÜMeÄj+\‰-æÆ¦Êœ*² j‹Ô>°¨ú¡UÖ–eE|)¯j",IDATøûÝb MH¥f'Äõ´qU ™Ï›~0UäT™•N…“Ï£j:WQ{?ª¢¢ ß*)U©ú#ìØÇUj»¶¨¨¾>BU‡É µ©ü#œ ZaÓµ™êÔøWwSõHyž‡[§òÝ/¨ ÉlɃ©†a‹I!§©dlèâêa.µtXêTSˆ-î¨ê‹elQðQy;ÍKˆ8^Îo":˜*$-špé%ϘOÜÓí> 1t‹rлELÚTjöBÌ®\¢êÅü66§ÚëF-r;UÒE•ò%á! œÊ‡ªôpE$ý‡w#½ß]eþmTÉ=¯ò=‘pß,ìŸÞÕ—NªãI'Õñ¤“êxÒIu<é¤:žtRO:©Ž'TÇ“NªãI'Õñ¤“êxÒIu ÿ­WÚ÷ôÛf“]êv þÝÛÜÿštx@mWïbÝþ­ôþp¡â>ößúÚ}g莇7º?3³„;ÄËwcIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1335b8ïçRIDATH‰cø40à8ÀÀÌpþ†ÿ“ÐPüÁ÷ÂÃ0?þ'߀*dÿÿÿïÏ?QB¤ð ‚<®p~OF,ŒÊŽÊŽÊŽÊŽÊŽÊŽÊàóOeè€^IEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR\&a-ÁR pHYsb&2 tEXtComment1331eU+þ}IDAT•Ï1€ ÐGŽàQ8nãˆ'ð Ý\ë$&FEjj x!ðáú†à£Æ ÑgÑ”Á(ì:tÍb+l-ƒ£†x'è"$¨"8¡æóà}F耗ÀúÉ ü 6)Ô§+4 £å:³ÈbÒXlÙ¦¸Oe£¶´…ŽgIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRp*CŽâw pHYsb&2 tEXtComment1330Rh%IDAT(‘Ñ=NÃ0ðu(C€„¨‰käH¹Uà•-©‰2tìê¨#îG¸þã´¶Ónx°ôÓ³ý>L¸Xô_ÊK Ͳ3V*¹ÆBR ™b"FꉙV”xÊ)ÅË…r‘R’U>¯æ”¼{®â…¡Œ-³‡óUvAì=µ¡m¨Yš§k™8¶:w Vè|‰ØQÏ&*/F¦” ŽâÈjFiÍÑ)3É"4%:GÅ ìüèÄl`˜¤H_í`ãþëѦ¾ÿösþxÛàî:ðÛkø…O{ÖR;¶[è« êÄm·Ô ú9jËØßøƒÀµI˜¥}:u™h‡•åÜG›Óù»5‡Ð¨ÀoÆ¡vŇM…èc/ð:Óª¸ØIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR`K§ˆ¿` pHYsb&2 tEXtComment1329r•’\IDAT(‘íб À DQ[.3BFñh¬JÅŸ‚2.,½æN¶4ŒllüŒ‹(NP•'Nâ@(!™ð:ŒH ´2A‰/nÀuFZBøA_uB&Þ‹nëëZêi·Œ#IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1327•-¿ŠÚIDATH‰íÕÍ ‚0ÀñG0éÅ„L…ÑÚ dW)8‚%8{Rcí³Êg%FùHÓ4Ф.°bI9F`4(€Z·Ñ@©rB‡&N£r±ôFÆž.€W*Ò5s×âQÖCÌi1ØD©MøÌ„È;Ú”6G bJi±pDwÍ@Ç#ÚjÑEýw5ü}ýÞ]µS^•³uOƒb\[2¼Ok+ûq÷èïÇs÷ãë…ºzòÔn„f z:èZíƒצBûôsoαg¦£Y_ù|ͽzöê°úá.,þ~þ IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRp4zRœ pHYsb&2 tEXtComment1326â*4IDAT(‘Ò;n!àQÐDÂ¥‹Hø>@®â#¤Lai9ÚH¹G ¤y2$ë-šÝ]˜@ã#ÈQº×—dHB:‰(Ê¥`kð:»¡!>€Tát6ˆý u0€ü\ì ÷®B7ý%¡›²\Œw0Ý>úÉT·º‘Œ$94g|É3çX-FŸòå®t‹%MÍ‚ á«ó¢vĘVùIÚ3³T§Œëç,J,?L¢H4Y-\Rä³h…ÙxÓ4ºcÈNvÝ-jE‰]óŒAŠ=²Óª‘&[`G©íìÐ…ÏDÖ:hÒüq]}&œ<™.£ü†“¯ƒŒó™öJhñn'.Ò^'y4VXà<šæ­+x3Rœ¬¶nû½“ÍÿóÆ7'{Jp“Š}IEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1324 $î0LIDATH‰íÔ±Q!àE2iÀñÚxóhÅ2Ì ³ K‘ ,Á¡Ì˜]î^ sË͘!°üÉAKtê©§þMßÕi·ÂvªÍJ¥(ÙkÊd%SÂ_;íP"ßɈMZ =9êêÊФÌuž]&ìŒvÊC«Í Þ«h79¤Ð­7Íeâ¡KÓÕ¬t»}¹êúºiÑU¶=ç™Ú§Ú.¶ …¤©—‚ëcŠ4Sz˸DE3-ØO´@›íwŠ–¡ƒšÓµyŒXš×ud…\&Š@§8WÜ’”G]ßÙàEä-9¾ûÓú°õ½6÷iªGnqlMÙà@P¯hµ#9UÓ†W2’U­dQb“☽[èމ¡íÏÛ‰.CðŽE(žhmQˤðõ¦Z®Öµï¡¢Õj=ÖõHñS@¨’RÉŸ Ìæþjÿ¨ß­FA‹TG¼IEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1323’@{“cIDATH‰íÔ1R!àŸ¡ÀJ,-2â<\Å#¤´r¹‰Gq‚7ÀŽ‚v³f^ÒÙ…Lf–|ayÀ{ ]i7½éMOõkíû–ܨŵ¢[…nAš]‹hª£Î–Ï>˜Î5Ãr‹Àðça9ÈÎÀ3ÿ$« èí¢z@1„A]4|€Žƒ¦«Ú¨*.j]ÕEµE§ëº¼ÙŽ1S«ÉT켨 \‡øÏ k4ßey·¤ý; ;ÉõÝäY5ጺΔ•¨óªI7áô7¦Iór‘3ç]ÈÈÊ„äÔ²¦7Nêû²%eÀµw“¬Eñ3IÊõr£².w>KZ™ÑÉ0±E©Ñ^Ò`*f—`dÕÕ`ĨЕ•`¢õ~¯óR'FÚ lªÃ ,ܰ6IU8¨PGØakî\ËŸ>H™ÓÂëªïRæ´ÈÂ~B¿U„©ýðyb¯C>¹ ;˜¼¨õø³ cûGýL¯÷*$EIEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1322åGKÈIDATH‰µÖ1nc!Ð!?Zºp„¹Bn09JŽm•R¥Ìr³•˽«mR"¥X ô'ó¿íØßÌg£(ArÏ|˜?6p§øzý½®Ïÿӯؕ4¿®=—'?~~ÝÓÞˇçŽÓ~ÖŸü}ZºÊ‰·PWQ%¿W×ÓQWÚïÊvu;÷FÒu—€ç[§E¼8̯'_8jâ(½Ó,Zª$XääE¹pÊà8¸Å¶ÂÐ(Ö!a¼ ˜V“hqÕä÷ü>Uª¶8ÃÜšZÃ!Qœf£kÜi³®- AcÀûs8ÚòcV@j•7{ ¸Q”³Ýk³î¬ÎŒ³n%þÜPå°5õÒç ‘›Š´SÎ& Ä;õˆÃÀªNsåc¹*ç§Ìñ,·_tM×’=’|‡Á¥rÆiܾͤìY^©iÍh[ “Ú"JÖ‰_l¶Ç€–š¨Øä$ Ö4b±_‹QDåéOÖÕÿʶÕ$*¹’«ÍYI˜. ›H‡Wy¡7¥¼™@¹Q¿qóÏPR­¯Í®dì~]˜ò>½Q†!wT#!]‹öâöoA²|ôªnù'ìÊ^RªŠç|Ö¾ã_A£ØÓQÓ7=8ñŒ”PIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1321|N¿TIDATH‰íÕ;NÄ0àßrန+P¦X‘+Qn¯ö†Â(× ÈŠ`*R˜ ã¬6,±Ç-Ú©ŠÇ¯q´¸ƒúð°í~GG@SÓYŒ‹øÍbÓÒ:|ÏíñaàïsqTÚeñ¤}Q…¸èEÿ©¾uOôÆ•§óª( &ÇåèRõŠ‹ºâBoɦ Åel& ž°Ò׬*Ö¯’¨àÃÊw×NÔ{<¯úužWEmYÇTô¸è°î™ kg£Ž‰ÒþG“ùòO<#’”XQ½¤œ~k“SÎËC4NTžé«­ ˜w± O™<©¦+´½EWÐgE…1ó™””@C•Õy­lçŠjk¹gÞÿNÒ>ž,êµä6Šôœ#U°ê)«Ü†Î5:Èjåu•+%dFE1¯ÝJúÉÒ— 7U€Iu‰ º TV_Ô%þL¿×<›Î(_±IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1320 I*)cIDATH‰íÔ1RÃ0Я3¢Š¸sÊ|Ž2Ò ¸’:J®`n R…FÊ® Ì€Vî¨Èθˆ_䕵»FÝ ›Þô?êû®ê=-Š~º¨P5ÂÖ $ͤ+LjV&Ò]€%ÂIê¡20­X$0IyñÀjëêï‡JOÇH#0Nõ†r_Œ¤¦=9# ´Ð®’)%­Ñì¨ v¬Þùe¤¯\a'j44Iþ‰3 Uh7ýL—T£h¨è˜©»Æz¢¤ºïÔnR³fI¹UÁQs_u=I:ƒÊO¡’¤\ïTêf¡i‹¢¤–ÚôØ)®‡ö4Ýè'”‡>ðìbòýts¬<÷XBÿeØÖ»Zƒ[û¯J‹·Ï VQ·(zO¿ãõ ʼ+"º¼>IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1319Y¸ÁNÍIDATH‰ÅÕAN#1Ðjya±2707–ì|nÀ`¤öM¸ŠG,8–æ˜=®©²ÒIWŠ‘Â˼¸ÝUõ*+‚®÷ŸÐsòGÕU#. í­çõQÝ‹釽úý«êËÿiSÏÕU\¯ªÖ ªÓtQµyµ“ê¹xæ«×4Ú#}îï°Ä<#LÛ½Åc†Ó|ˆÓJWàf j8Õ…\‚¹øS­àé‘6BP”žšm””4wÉ%Q§Lú#ùìÆg°~«:CçtU+9xQsWä½EÒÅTÀ(é#õŠ”÷F_¬ MUtۆÒè°l„½¯;-`ßõð{EïšÁѣϤɼkš†:ŽNš¶ÊÓ4*ÖRFŸË‘¦½ÂÐÊ£ŠÆ“sW|ÛkÛiªˆ“Ó+ªÓ®Þ§¡åç4R·¢BN¬ ¡G€" Â|IŸí¥/ óMañ æ®^ÐêPŸ›Ï’Ûµ:Ay4 k±Û<¥z=Å6lÕeJÎY¸ƒÔÔ[S¨y@œ½2y‚®xª´é²ß2¨Â/éu¿¡°Ð¤½¡ö“¶ýVJ‰øE—>µÑÌ}âØXþƒÜÔ‹#‡ëu¬Íjzº¾Mÿùdö8#úÛºIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1318.¿ñØ^IDATH‰íÔAJ1Ðß!1s1Wñ.]•×ð&’½—¨#ô²…&åOfg*ƒwhòH“ª_ÓÐ +ãªW½êßtúîU¿mÏŸ¤’ë ^¨9pƒnðµ"mÀ ¿¡t]kçv’ð±õD)†JW®”ïð0Þ*lÈÔ5§<¨æ ‹œÎ-Aœ¸L]‹¡q£J;;Õƒ Íq÷â*5ä¡"êJW7ÖK­±øjwC[ Æbô¹ié*FFM3Â\+3:æg™þÑœé'V™Ü*wUÔoµæ6|†J«hªÚú¬¸ŸèÆŒÉÔºîÔönK÷xV5óݾÌU¨µ©C‹ßÝY‡³…ÿ!~³1“Kñ››*ŠoóüÄz“¡Ï®ÜF M úÒuÉF¾Ü{n©Å˜ î½ñ`,ƒr˜ùUy¤îüúŒJg#Á’£©ìïÇáõKM¬ÔØûìî$'ƒIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1317¾ìIIDATH‰íÔ½qÅ ` º0£h4˜ +d”0ŠrY€î‘;‚"ìKì{ü4)^ «âüH6ð"\zé¥ÿ_³_iÂ…~äÏ©F@j¥]îC ÈïLf{àzu 2‚N 0‹†MýýÊeÓg™Z‚ûó¦…FLO !;«þÑ./̆–štVtªÚ¯úb“©ªêªFÊoÔÔT=TÞµL4ZYÕ3ÖàD_óX4ål‡*—Ô4¹‰ú2S)pSÂ^a6c¥]Ûî*³VJ®)ôZ¿8YÑÛùÃ:4ïZÇJ^TKÿõÚwUKÕ½¾H«"Ù¬9÷Z厃5µ7M¦S©€‰˜±Œõˆ¿è¹q÷'ü%䃭€N#IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1316ÉÜßšIDATH‰íÕKNÃ0à±²0+ÂÂA|ŽÑEU›׊Ăe@$€+ayø'm¥*žx…XQµnä/~Ä3މOŸÉçó%沘@çšä£[(‘ª\)sZšm9\jñ\ñ²æWÔ·´4µÕó»û5}“â©©/kúÙ·=«mèGSÇ–ü·¦#ᆞùUUd}"ËŒïè—Š-Ñ:.P4ÉðÔq–êž¡Í~І[ʨh‚´ÈÊóG[Ñ› ¢a»¦;Ñ¢¨áÑ-“®“>Y\ÔsFåÓQ÷•féµÅÌ ¹STÚbE"Ô¨šiV"§«9j£Y›H’ ¡õóf »m(ŒÛ'º«WR‘€š¬+# }êÚZhE]ÖôYÔ©ŠJsT«j–܉<·[ŠÌúÍÚ¸X¿{b‰]ÖõšväEëÕ€öØ I¡¤©Å©7¡1¥*FÈD ÓCýrE=6ß„S6(™ÃÑMÔM8eU…“…º±~oÇv‡¹ ¯)?Êä}º¨QÞ¢¶©ü'ú‚4<ÔX¯÷IEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1314' ½ó8IDATH‰íÔKj!àj\ô&`Ækd1Äke§Gó¹BÁ섈æ×žEˆUCÈnúAX¥…%uåŠ$ÒÇTüЇާÕkZœªV¬Ž•òž![Xõ¿÷ßa"•0ç‘xÍ¾Ç HhVM¾…J¼’¯¸#^]!º`x/’Ú¡™×-M=x5ÇEÍ&ï šDíÐÈ­‘UÝO%V«ªÝeÛé« Ú(JÍèM¢bl#-‚&òzyÒ4¿(òUÒ‘÷Õ*š µêéyã«1+Çà;jª[tÔªªÚ6Y«ƒÆx-¶ÅÔ=§û©eéå¡yèèf½PS¦fIMC1×SË€eC´ñJïè¼f“¯úJt*×)t µœ¾¡HySà4Ì“a {Sì FNÅc=~ªxý£~XŸ?g‡YÌ„IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1313¹m(PEIDATH‰íÔ;NÄ0à?Š„©ð 67ÁW¢¤@²¹ÈžÅÜÄGðŠ&…ñ0v€%xlh¶Ø))_<ÉŒ ]d³ÝXøê@baJÁŽ´ÆHßþ1öªW½ }•5YZÑ ?4­FC~&z¦ Ýj00QÄÜè “ëAS£&EÑh¨º°xN!è:»‘ª Yù•Fù»‘Õý,ø[EŽ5êÜQÏ™ÿ ÞˆštÐyêi^ª•Ë*JYýR4wÔÍ·m7Šzž§‰’ÐÉ¢îCÛÜÔVmg˼©êhÉ,®+ÖˆZ‘“•âÖ ê¨é:Ô4÷5Ùª^Öu©ê¬¨Q4èõ7ÅyƒþÔ¨’¬ÜÅ ƒrP’òî ÊßsG&ܱzY0yáŸYŸ€{Ö@­òŽ/'g> zâÓ†—›ûZ6ûzËxM»¸œ3v§ïœ8U[±ì IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1310 dyêeIDATH‰íÔ1nà à½ÁªzÍ…kd*=J‘¡ ªC¯Á<:ªåׇSW‰y¦c;„ÁFþ ؈ÿ™Ç–ß"w\´¹ -¿—ô£–?Ö•j³®µ»Þõߪ’“+Ò·<’®Á îôJð 'ÈK®Ðß‹F¸VÓÛ¾C«i|Àî¶njà€Í3h¡w¢mØC¦ß.U~"kÜ›žðdnuĤ6îÌ@8-´£¼³zÜjjf%Ec›µsYü´¿ÑóåÃ8ìhD¡<롦XWÏÀ¡©éQÔè*ÃúššIÝ/êÔuÍ÷Ì¥ÂKÿXQއµ¯Êš¶Uݬ빪ÉW”£›TÝgy˜u¨+'ç²n°ét Yã#õMXžºéNÁ9íM8• ˜h!IiëQÆÉ ¤¬EÊfõëzI·MJ~9R/*•AË>ç$R®*Zݘ†; 9JÍÉíSŠñÕVý}Öõ !€óV¤PlIEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment13087¤À™hIDATH‰íÔAjÃ0Ðïâ,J½Í"à+ä!ºROP©«^knÐ+èZªÔx:²KÕ]…RCHä'ŃG_È€Kî]Ù`ê“§hªÉéÇ¢+׿þAõwYÕ¯ôsUãù×Qñ;0Ôü„Vc£ ]¥>£Q6é§ÚíØ'6‰h´´ZœÃU}LeƒÐÛª=Žˆ=´ÖX4›Ô5Dµ¨ìÛ¼akohðq]›¨ŠNvÝØZáµFŸ]0m°¥k'¦ì]YUöY´îBQàÙT¸N‹FÒ_ÓH³ÒµßÊú{Ñ@:x~®µ·”Ïj>¬¨×Tfá* ¾l¢SËʬ†Z¥ôðª¦ÒÿE¥V¹[ÚfþÏ6dkй|¦mÚX˜˜Êöé‘ëö°¸°•7µ¤Œ«¥ÛYBéžTÍKº…í«YËÉÙ™£:–3öå™*zMöÌW¥NÝexç3Ñ/jÁ£cK€IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1307§ÝŽIDATH‰íÕAN!àG0ÁÝ\ ‘k¸0Á£x’Æx%’D\¹w$â<:ÔŽí£SÝȪô+Û7üSâå ¢ñk’1;ÔõøÚ&åPãÅåz¿Øè÷Oj9©|ZýoëÃôõlUýëêÀ¥¯ÅpÖ]Má9¸©Eq©… rL²9j&¹ÈÈjœ¡N„ÇŠ ±PIZª&Š‚NU³NFTÎТ£õwBUUÔùÛ!ØŽçÉÅcMMÑIÔ³r8êdÕÇ¢½ н (´hl eQ³Þ–¤dMÆ]õ´ÕI‹Š&U-=µ[5+;´ÂfYÙªiõÆT²¾CÜQ‹^©ª¡£8Yìüx;êú¾SôÈÎê÷ú¼×24u_úÆ›ÖsW=U}jûn>–:úY}Ó{fx®Z”o:Ñní\2Â7+×€)e“q®hjÿ¤ËûE>®u™ìéJEVJR\y…³IT$þj«ZR°#r©UP D¨ÐÐÓ¬pŸ–Û·Ò›ºïëâwçÓOõ"äÈO¸IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1306Ðíž IDATH‰ÝÕ±nÛ0àcY„›éуöë¸ë ×èuoÜL£JÆ|QEŒ[ËXVÂíhïÅXÑ5ƢĊî)Œ×ûÄ‘Â_J«À¹‘ú >Þû¹\¸Ž¡¶Ðuœ›½íÐŽš’æÀ¨¾ÐÏï¹¾(äø~žTþGú áÒ¶~V㦽IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1305I¼$ÂIDATH‰µÕÍnÛ0 ` * K½@Píz졨÷(y"òN{¬ê ú vØ•A/*˜¥\gM#Z—,‚þ ›” ð50ò¸¤nÎn`ã8¬†óÉ66‹2F˜óÀø’ÔÈ[öøsVš/”ȯ|Œ2°¯ÿ¢o¬Åó¢XÕ¿]=\ ¯쪯/èp5½ÊýþGýÝÕ]5=-¢×4ÎÖ” #xÎaMå,1Z]­ärêÌšÔÚžEîÍ$zRÔ/º7`àD£É6íë¡×ÆFCWtŒ@~E' ¤jvükZ´Ý•(ÏzksTµèöß¼gšMõº–í(M±£nŒ«ëø:öóvU5ŠJ×,z^Á·YyçD·p|ÓžédG®¥ª¦ªOgzøPÅ­G¯ ¨­ùÉÕ†Ãs[_ò¥jÄE_ì´¦òœªŽº"¸b ¤˜”uåõd‹T?ÝU¬ôú0î%QCU¿{Uá›ÃèIév¤Íi#Š­ÊçPÚœÀ`óœyÈ`ÑAS‚˜eò¦¾ËÒFV÷¹éÏ€P´7ÃIŽšÒ“'›³=ÍCOO§¹ž¾ª_JËœ´IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1304>Œ²‰IDATH‰íÕÁN!Ð!$âIü#~‚Ð?«0ü-=ú üxã@‡]wÛÊPã¥sXÚ}¥ËÎ2³lH€ SéÃöàäÝ<ØWôz€Ò¾‹ªlž‹£[ìÚÁîZ,J~ ¦As¶ê ÎzÖ?Ó·“ªNi•ëôÒk˜Ûà“û®TiÁb0ˆ±ÓLÀ §ËFè ’WIª ýý—V·h¡Š…{RØk1ëšéVeå¡×LZdÖtÑV™LpuQêG*’‰¶,z˜+…OUDû“f^ß›&3P,²ih–ÁѺš& ¼fP'4ÍêGJyLZø_hžôJòZ{µGÙ ½Q{­fQÝö4é¥( RÐÐkšÕ&z?h~.Ì*Wµû¹ªÓõŽ’¦:ƒÛ›‡Ñ2ë5«ªP­ÐÎÙ°ÿ ¢B4Á"(FoW5Ò"RK£ô ‰L‰JŒRÕÓròÔt¯mËLõ™UaqôP©›€ia ­¼`Ú^œâK×Q•ÓO 6ù· P¨IEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1303 v‰IDATH‰íÕANC!ÐA’²1r¹† S<ŠÇè¢ÉçhÜÀ+Œqáã†&ߎØÚ–ùlgóóûÈ´3 ડb{>_£}¡L4{zÝ% çøAçÑXaËGrìý®¬\Ð_CÝ uœù_ÿšN#å©hv4«EŽ"¿/iǯžÀªN¸=€ßƒ¡Ã”wê2è™ ÊÛŠNÔ`X3/ºÔ™U¡Á°¡¢¬’AYGÝ)²2xØUg¦°ÑéWß: úvTª7FVÊ(nO•N4]ÛŸF_*VO²~[U¬—÷× jh„NVõM»]hºVU½ü½÷E¸(áª(ö³Ñzu£K½AüU”›¢XOUq2ÏZV[õa’Ô';ór=¹×è’iêzý¬<9O®ÏÌ-¨:‰Êÿ/‰*¬e-c^µïFQ&Þ*´QÒ->žšdúÝǦZ:¡Üãr3$0Y8ÝD®\ ¸0õÊÙ5gðÒ­rˆÀ3`õtáµô¼{ ~êIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1302×q)‡XIDATH‰ÝÕ1Ž!Ð?!2[D¡ÝÊ(7p™Â2Wɶtá,HYiKab¶Ú2ˆ¢ ¬Ò‰ÌÏÿÌx=6ØEŠA¶xÃøüa´ïðP~8Àôô)åãWêÿœVò)tH=:¤Q×ôU÷¤W c¨%#@•R’¾‘‹òÏ ¾üƒÜ’¾ÑË0ޱ wñEÀ;Ôû+Z:r¨Ë=Þ-w{帇éY£u °»gå‹êÅG|=óükâ ß{Ð%œU´¯ŽI#ýã¯ÌÁå × D›^¨”÷“z„åõ´¹€¿,ÚM[3¸áÃ݈‰O^Œ4‡¾O°4ª(Õ‚t3à rôæ%ÏF”^}¬KѤƒÆOçôlùÿõ±­Ù`¤eq–æµÖh0Rê¡ëj †ê”ýšž@{ª±d¾I úa-kõ&‚LàZšEPa%“¢å¬T'R?ïèuª‰5J§;¯c¥èI©;Ñ!þPÆ‚qN%9Q3j–Iu´µ—ñ‚ræmDÅfÝõoI?èú~‹:R¿¶®©椴VÕLNµ^£AWƒÚ ÚR­qåÜÊM«È1›$šZfƒò£‘“¬©è!5Nôë!­Ž•wkomiÖ¬ÎNž‰&NetÞÇ[ZÆ®ÊJ)ÙdîXUßÖD 7*ŸSŠ)¨u¥‘“- wËÛ¥^Š2·d­r#”W¥ôWk놺=ˆ3zKÝ¡¨n¨¥‡žžî–¦üŽë´oøÆÎPÆ+ÚsL€F^íÛö¨u¢¿ñ’â¿Ò?ÇÒÎø”½½UIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment13009H«´IDATH‰íÕMj1ð¿¢Ríª.»Ó²ë"xr”ÁK/Jg Û@à£D9A¯ “ (d£‚ª×§ñ£™gCC ›ŒmýxþÞ_-® Ž<ê`Q‰ “õÎ;À ×ägº£dÃ}îˆ(=ú!ìw·W¢bùAÇ1tûçümã KÒpý%*ôÌx×w}=EsV½£ ÝýæÔXŽÊR9T yª_h6ÐeV [h0ü‘.AÀÍ5Ãp‘@Q~¡iT,¾ë`-¸ÕÁ eÚw~c’™k®šª~”ªêÆ «V³¼leGA÷ý¦ÄÌú°¨¡ÓP0%uÖ?çUCæ'-mvùDƒ)æTLòªÊ.O&:^ÝF“´Ç[m]휆$úÚÄ+­æ0z—ÍÁ-löÕªK²VkÆÝ¸û|.‹çí¥Áø#½Zëã5\{»Zd·§ëxFý Và=û–IEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1297w vWIDATH‰íÔANÅ àŸ°À… .ßâE<Æ[˜ÇÅŒ%q¯W"ñ"a–$’ŽÓê‹I;à¸RÒMù L‡ð %l{^†ú4Ô4ԾʊÀº MÔn$—#kS´צ$å|]'LGïÒ'k¶…FeM.J—ÇÔç;V#×CúîÓí›6,!Þ¸XÌá$ëJ‹¢]¨ËÙ`ÍgâW6æjèî ukm×à¡Pã!¿V^qÆZ`9AX+7‡ƒ“:æy¯ºóºd&Ý¿ÙнLJ]…²5´Œÿ«îé„Îñõ…Ð<ÀFô…IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1294î]ÌbIDATH‰íÔKN!àB{'7<Â,]ÉU<‚ËY˜ÀœÄ«”'‘# .$¤,ڌΣ@“YÙt‡¯( 4Р8ìñ'èGÛŒõy¤ýHÓ0û4ÔÍPé;}=!û¯Q‹iîj“lEMž¢æ‡ /D`æwI¨€&Î ºfUÀIZ%€;–ðXƒâLXM±«¯LâÊDEK“ûÁæ‰àX£¢Ð´LUPbu?Ð"i œUçÖžFM“¤À? °ä‘Ó¥˜å/V¦èxÛÓlrW«ÊSÔ(~SuÐ뎶­:šyûÊg pa5:B8QÑSºîj[ríêºéÔS=+%¡*l`©˜Vú¶½}i1ÕÜï+Ñãväb«ÑÙîëç¼Ù• ÅŠZT›Ôó-[À«ÒŠÀÍ ¾ Ylˉª¯vØ«hG¡)šžž4{Q#ªhÖ‡´ÕvVô úÛ ]¯áLî$IEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1293pvÈo˜IDATH‰íÕ1jÃ0à_xðV¯JÔƒt•¡c‡©7{¥C®¡ÒT!‹ Âê“íÙ–L—B‡BÀŸý~Òs6†ÁMoú+í6ÕëMU•j¥fS!7µ F­®_®Z¾a9ÎWßàEAÑB‚ή»gEÖkGÕxŽùè\ sD&Y¯’^Jª ”݃ê9t“j{/ÜB[=Ó*¯ˆZµy QV:¦ê@Úí6UÖËT£z5ÔU½Ú¼Úš´•2µú2\$R$)WÉ«$e¤ÉíÏ5ÊÞUM/ɺ\ Ìõœ¨Ž5=9qîGp½VOŽ´‹“C£6Á³ú>¾}•¯€Thù‰:®ˆô}\WqˆQ}RÛ$–•çyèOxI:Ñ7žð¬åìñh[•ê“´!î¨úº®°Úä b©VÛk8{Õ×çŠJ £r>Ä–Mê,h'¬œÎF—-v7¡J4Q-j×,;e®….c‚tÅl‹ÝÍ{7Q•”…·Êø-28©Ë…ú/ÿ8Ký4Nr p~&IEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1292qøùÂIDATH‰íÔËmÜ0àŸúÆëÐ%¤ÁL))$0™ R‚[‘‘\‚é“aN!‚ÌŒ¤}H%€}õ\vv¿•øš!²{icÝæHvú¬@;…:&Ù¶ê9 ýQÝœˆZ¼ É·U\ê¯5.tïú®¯Öûªyƒ~Ÿ²ûV©Í¾QK˜K¢š–uoAmµ˜á2,µ¥Oî¨OS’4å6ÁÀu~º:BgПVšGít‰Õo”T*êpšô…•UèM”•&t‡/‚ÖYip“ôYÍqE“Q³ÎªBí+X˜¸Ö'Ò‚2ëzV?YÕž¶Q3ë$­køä‚”VÅ+êýŽÆ+ÚÞÉ:|`åú4XÚ羜K|¡p8PõuÅÛ¸l´¨•ÏNªXÒÌ;7XQSÇ+vÁm•fùñàÏ Z*îN½³ÔÁ=Ó_»¦% ~µŠŠÆJ‡µ£!z$S$¥ÍÀàðy«T±Â­ŠÔlk¥,ÜGj4BÇÃ]¶§×£ê hš”êUÔk7©Ý¼ù#ÛÑÅÂG¼™³C¾4èˆO¸¾Ek·øÊú£íÅÿõ¡=RögG£=Kú»¸LûBIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1291žx©C?IDATH‰íÔÍM!à—pàæ^½Ñ†7¾R,Äd7±K°1` ”0ƃ{ ŒÃú™Ý/jâdÀÃÏ,É–(˜y‰³Y°5í%²=볦ŵÿú'´„¡úï+wgõû5OÌ“®kàd™Œ®É×n’z|=j/@ˆüY°|üO2a¯éCåKŠFøµ*Í2OS²Ñ?lgh;“[ÝÖ<î,+’#4—Ñjµ««ÜÆWô~¨FÕ¸ee%—š§¸é£ªµoåI]Æ:ë ØÜÕ‚+C½ÀÍ&”$§¾&Ç#dÄô´NðO=]Sàžb¾«­¤jA[c; Ù Õ–é¶£KXÍ%°Nª"H¥ÉiZk¡êIÕE–UEOO›†ŽJ\´ÏÌA}ç#pÝœyÈ´{Û}á7æ®*ñcúßm_õãL ¦IEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1290é™Õ¡IDATH‰íÕ±N^!ð?ň/`ÄWèÖ¡‘>’£I0Ž>BEœ}„Ò'(MÂñpýbŒ¾è`Ò¡'$7¹¿àŸ ì-¢ Ÿ5U•‰ÈÓËŠ¬•®hªÑ·‚²"ºŸðdhWTXéçÜ••îˆnøñCÖ?óˆ[©1«e=ìÔËü&]Ô‡kù'gõ_߯ÝS³Ô87IÐêFhF2àg-Žß„ŒÐa'mp—à*̤®6ÂhI`¸eY«N‡8eU¢šr ªÎ'³V¸b*tÓÉÍÚ_(æõæMMÓÑEákØM»‚‹a©@Xháϴб¢M)‰jóN½ Ý§=Êû~4fµÔcÝÖ¿êºV4ä¥vÕ·K]V>{´~¹Ôb) ¢fn‡Oú[Ї¥Æð@Ë] KºæUÉêI“¡®ãÐÛY™«¡1t7i÷]+>u|6ºÆmg_4.L úÚú ç&ypÔ_'%áÇ0«qø_ëy:Õa)e¼ëŸÓ'ÔKùeýžšáËAÔŠð«óÍ@ÒͰû¹ðs}®”µþ¥}J¬äi·l¦H,IEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1289‰¸0†IDATH‰åÔ=J1ðH1B¶Üb0Ár 1e`i!&žÄ«ä(`ÄÂ!ñewQÜ|ŠXøº™ßL>ß{ȃ0ø¶ÞUŽ4ý@£ªiëp¿c}ýÉI~­ÏC}úµyÿ¹ÝU£³™rM <{ÖT4þ¬Ì“ºVž-˜.èƒJ#§'ž²ÒÀ2n@1¢RZ)4°Âš¹ZKÈÀr¹â¾£¦è¦JoI©ê‹–&žÊ¼k »ÊŠòZwkf8íi*ûm+Ïw`ÓчPÔu4øŽ–WžÀ‹°Õ—J9éÕä·úx¨n¢‘Ï&×Ù ºßh«Q–β§È¥ã2²äFS)yhl ÔwT”g(GM»©žJA{á—¦:ŠæFnPBXåGª-©”¾©¦¨›E#ciÞ’Ú­§:ÛÓÌbQen塯¹”•®5±Ò-„Fu‡Rù“æêß¡tjuWIz{ua×vªýR Ê¦Ý¯öáÕHßãÏô æð÷(iIEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1288þ¿ ¦uIDATH‰íÔKN!àŸX³cëÂL_a`ì+¹t%ÜL0Wà¸#§,æ¡v(Æ…‰ã$ºû MQTøÌ/àô哹Û‰ê_ÿ°>†­®ù0X]sõ\E“W5g#ä* '¹‹N‹yÈÝÌAÕx`ª Ó“ç7-œÑ ÛÏœ®‘\Ò4pšâ¥Í%¸NáãœVT(lt¨vÐ5ÃÕ #‹ 甿¢iJ+S¬EÕö»Â­“tjZ}¼fUåz-yÆZËFûË)ÌA˳iìÏh5,ßÏw¡…¤<Ú¦UMRp#“ÞæLÁjQíšúLÉ@© Q9õì¤ôJŸ+QÙP’•mUµÐ>jR*G4Ëó}­«š\9hú²h«ºÊ6"Â@[‚$e ´×¬EÕT¶i—É£n€µåîë>ê]«+~PÔ‰Þ·ÏæNçvÕúÆ¢m|PæGŽfÑNÙ8¾.»E3ë»èŸSþú %a$bÌ)IEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1287n=7:IDATH‰µÕ±nÛ0à#”ŠhíTõ1ºÉ’ÇèPTgdð˜µ[_Ey„ÐÈЕ…‡²¡ëOÚ2ú$d)'6?J<‘Ç}¤ÒÞÓ|{ç„W³êÄûÕÝŒ6?E‚u÷©ÃIi¥òÅþÓ(5»‡ðÖºúz¥ÜtA•]=–@kw¦ÁR­š½¤™ÌÏ¡ýE—h§ê±¢§¹Ndùúûf*Ì»œi¶£®/ßÙŒZ¶ñ2V£nÇSPO$*:1¢i”}«DrxŒšr` d(þ¨™š‘)x5‘Có¤ËšÛŸ kV²êDzUl‚¤l¸«3U«J6Ikf›»º<Æ*¢ï®UÒ¥¢¢¤É·¾ô]Ç{-h_¢I8#,Ʀwˆd ñŠ‹f»×†µ3ªÔtˆÆ®8ß©·©µŸ~°q® IK»@0k5ë~ùø$Žœ‘q—gQÙ®ªe$‹Ñˆ®¨Ú´Šƒ‹¾h|»ŽÅ•†…O”j˜ëªÎ“~ð0Sl§Òƒ5·@ý ´l¿á?«WÙ¼+èÛöb©‚âÅñ©¿µ¤±wDBš‰¢¯‰¯²æ¨|ˆÅe^¬Ê®Ãº­¹>×?G¹ìwVn¨ÅoÏ"#¯IEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1285€\²IDATH‰íÕ;nÜ0à˜[…)]æEóZé¨ Å–¾ƒÀW`—v ¡…㟒_²†\¹É@´úVà,9;$úÄ8Ó¸Þ ÓÝ9])D–÷êox$#2Aãöm¼áNÐL®àô6DRðò§¬ú [–§ø»èÈÃJÞ*â^ä®â:û[œ– e÷o?|}¯›(‡Zð_?®ÿµ*Ç#ÍQØ‹]§(É“ÔÑì4S$Q,¸¼W<žQ DU•b§8ŸÅ€ìóµ)­’•¬„_ÙY×$9ðèj_ËiÑý¸«RÓoV÷Y£6W’}¡–•t”Ét•C> ]­1Ä>銼¯ÑDº:E¬ÖCWB?ЉBGeQ§j5«ªs…6#˸ûÊiZ\m9We f“ì/Ñ5ÇâØþ^Ü+ÑalM´#ûjÛ·4µÐögHQÑÙÉ:: µ õµøÚô¬+C1îÐÓ™|½ EqÓšý¢ûß‹½ÛÁ¥¿ôu4ìH™glHPÔ•#e¦åÝ€cú®¬oõPÔ•¨µ!­wH6mÏRu Öjò%êë#­‹þeÕV´+냌ÚAj* N-PQùО—‰š¦μšT{Tz¨N ÊnP;Ñb¯]ª-D¨Å›Œ–Q›6¯·Œv(cùKÅÆ¬pÆEª6*¼¦™Œã†£…Óv<‘Q £vÌUFíÙþd´¤u¤:«>#+>fÊH—‰S½ ‚r}µ -­P¾ç–²xñÄ=PUôáGÅ(MÊÀN‡þ\iÓ¶EPÁj¼ ¹Èö¬iÛdÇVpƒZ§1Û¸7.Ñh_Ãs¥ŒûªéRíÆšd²1½îÕ21Zp:lׂŠÍ1=Q ?•ÆëZ0 èÝŠ³b1E36^ßN4ÅâÃy<¡±W"+êÊ)Ò¸T$LjRºX× ÚÆ"^öù WÈ/Ýö•³ÿ_©:Rjã¾8y)ᣭ_–òɶÓgÿÅsVv•cTY«Š"øNùõ góþOçð”IEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1282jɸ®IDATH‰ÕÕAnã àç²p•¼Åh¸HU®ÕÌÍ8 »Y»RÉ‚>ìtì„iU‘’(|ÆÀÏs‚2hço«9±·ªïÖüïÎï—+ΛîYÕÖþ× úV’é+çÑ#ÍC-%Â4À Ôÿ‡;ZÕ¥}kMv¤q¬f¤Á\§ùZ½)a.y5ñP0ñÔË‘ªCyÜ+`ëÉyÝ(»`tÆ"T`I˜% ÀOjàô·©‹{f/h†ñuX˜ÐhqÆë•Õvt¦>KjŽUñ"벫íh÷jÝÖÜÕ ={b5:Ê×Pñ‹uF”ÛÈÜ*ôïµ§–‡ø7 ûeWBáØú!iœrÕØž`Õ03 Ö ê˜ &Ù‰Z\†B–‹¬‘ú„ ”4õ˜~‘4Ñî5ô¨w#™L{ÍÈ8d[(É:’Ö‡'AÔ`°¦ÅLUŸ5åª> 1/êƒÏ‚Æ>t Ÿ¥Ñ°™Ð¯Ó´Ð¼ü’¨“i_¬(cSHgEߊ©s¤(ö¨| ª¾3›õ¨8Ø„ÑRÕU•G£.ït¢AÑ =¨Z:Î~tŠæº%FM[°ªF÷¥*²}ˆü蔫Ê_„µÀ” ÒHF[ó&ã‘"ë„lG²ÞWÅÑ€Äü©˜ØÖ 4/À¥¦ù ;ÖTªbWQývØ‘²•»¿yåOžø\V->ó¾üþþ,ê77R+Û°q,IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1280ðd¨”ºIDATH‰íÕ1nà à‡â¥ ;T¡GȘ¡*Wé2vˆ‚;õZÜ =G`d ~ý1‘*ðP©KU¤H„Ï€÷0Ñzy^Cé×”¹RÓWω£$8ÿ »oRÎ0CQ‚eô7ÞŒnæÐvÑOüƽuEõÉŽ†!fíŒìUXéët}W¾«ˆV…ÀäÖ>ãŒ1sêõMX†6ψ#Ô×¼\ÓV4yHGéêŒGÔm¨uÓœ)ˆº J³"f饥ùu©Î… ár\é––¯æãœûU†^ÔÎ÷†®TuùÎ1•Ê1;çÌnÜfƒ–÷ÔB»åõ ´ñPþ:”AªIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1279 ÿ„IDATH‰íÕANÅ àAYö\ã-^äbÆ’¼x%v^O ‰ÈøCõ%ï14&ÆèÂY4¥_è40C‰þL,ýº¾°':áμ¥³ÝX>‡'ö‘VæÒÉù•ùB?¢±åËèúÌ“ø‚†oÌÝ×iüëéë®Òž–]õ´V+èc»DTyÔ‚ 8@Z g²¾|+þ+-†™MÝ Ù ©ÞÔJIt=…åZ Ô“jÉqÐ ¥CkCž)Úðãd­TI±ªnTäÅ7-vTÞTW]lÖƒfh%]LU75Å[$m_µä¹"sÓ¬e•‰Ó’YŸðx®œ 6›8QÍYƒ¬{ì°Ø²bcƒ«3õvO±ó8cEU½K ^ž[U×tV’Ëör÷¨íŽb+ñLã’0\òX9Hl<W-(溦¡žûÜÕi-j¬ö®D÷h}º oösõdèSÝ ÛOÊ$œ ¾kiªF]ÛZy3jmˆ&CuÙQ9ß⿼Z‚Jñkú¾9"Ò“IEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1278y'Œ­ÿú›tž–µ’Õ·Uáq›¦ÙÕYaE5ºQ“«Lž ¤Mä0ÝAI ÊP¢èÑ ‘\¡> Ó¨v^ô^Öü©~ü®M*5eMPIeußµ¶ØLzVì]ͬ·X®ÜÕfWu‚&ÃVØ™{V6Y6’º¬y¶¬ÆóB‘ÂÄB5p«ÅE‰…Jö;oêÓžs¨¶†IT†¶°«Év•NTgšJ»K’ªQ³B8ÞYI“Fx ·²²íꂨ¡oŽZQýë¢kìË…Ò“jgZõt®-_$ö¥;´ C½ ÷[4úzaQ´õª. Ú¨«ð&¹wXÓ(Ü¢zQ¿¯Ò«ÛÔ Ç?CêY™djþ*¥>ãÏ`³Å0ƒnã 5õ»*ŒÔë `¾ç@IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1277é˜!ø‘IDATH‰ÕÕ]JÄ0ð ˜7s!GðB<˜øäµò¶×ˆ'Øød`kÆI»»nÍǃ"â@¡ôGKf:™€(k¢ ‰ˆ¯`2pKôÌh‰E·ÈÐ{2m%EP»­ªO}ÛA=-wgÕ[ut;ho/u{§®rj/=ÅÐÃPãPƒý¾FÓÒ|ÖÐÐtübÔÎÖº¾;˘J×D£ÆðhÝý׿¥oÇKKÙÖú4ŽP2µþØ,ÁÆì½,ÔA'Ñ ke¨Ðä•\?Ï5‚¸Pt€ªj~"\² ¥¸ØÐ4‹ö“¾Î•OÁŽ­„+ÕT`ƒA{ða® <‰.ìQt5WE4²ÝÖ39Õ’?(¢uÍ+lP„ ¬¨×¤Xm[a‹Ê‹Ýã¤ï®tékÏY*¿•Ë¢ª©™WQ€¦&µ¥CÇ™J¢»¥Q-ª}îm3 =E“ºÒVoNZ³wF­žJnaK ϺJb¼]Ó¤³õ6¯(¿«ÙP“ lVmv0Ó ·”[dÇŠëz=‡uTj­ÑÔ@û¶ÎËQùäjU\Ĺ㟯RW¦ÿ2Ëe±‘I®õ¢Òo¶¡4ý ‹q®r¸§óñ“{¬û¾~†Þ?¹IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1275–@Ô}IDATH‰íÕ±nà à³2¾¬ù¢9ùàôÚ[1)´k)>^1²±ÎYD =\ƒÞ«.¢¦Î½Îƒž5xK§!ëÛz¼×š8ÿA*îº ¥5µ±þ¦eè³­K§'᜖bº,niè4,Ëi¬”ç«’¥ ÉŒ÷O/Æ[ÈIAEŸJ?jì² yì"ƱÌ]†Ë’r'™ƒþpáºèÌœ\U<6¹·z†úéÔRŒ‹¬Ý´lf$õåýŸÎç~ÔLSÖ}œôIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1274p‘pBIDATH‰íÕ±mD! P# J²+ÜŒUnƒ”Á‚”E<%Â1äŸôuØtWåÜP<û#ƒÑøgAy«Ñ·znuDÚê5IÕ™ðÖ·¾V»Wµ:jnUˆ¼|Ø‘°jh®Á^ Z*¢VÛÀq! š§úê) Š[-SkRkCñªF Š6[-aì²vÏfMé{èÑçIÕÌíPᇦ@†Šª‘?…£³Þä}›!Ö|—kù0šÕÕ MÊ—K—xx$Å8Êy¶IÓqj”è§èj諸Çh?k·dq£}(ÿVÍž_ÂÔbÖŽ’«nªÐ/ÀýTé-ÜN•¦ýT¾|Ƈz\îç²oè]ú¸ªn/Õ_ MûZ¨IEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1273îõåá­IDATH‰ÝÕ?®Ô0ð/JáæI¾Â%W Ë•è_ÌI8 ~%GÀˆ‚ÖÅ3’ñðÙÙ÷gãIh@XZi׿õ8™'mÜÝ¿K¯äjDëqù¾"}¼Öð¤ñ-äóNM×/œŽ+d7´©É{ãt½·ßGよf" Ãn_+ü™Ú?WùpªòèSýù›Èu9TÓ:UÕ¸J†³”uT. ¸&ñnÐ Ãß/©vÐSj†4´1%n=ªÍ›Fn=F~ÐpiÆçšá—ñŽ4•à✚úXÔdã݉Zê2ªmj“®ÑFÞªÎ/‡ê¢ šn‘iñVÕd" ´° Ê5ÛbYE¿JQÔÛþ¡¤EÓªe’Zá*˜qMué:V°)/§L‡Êž¤–M\81¾®q–½fÃvPvZþÑt•«ñï¼®ôßúðnX6©IEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1272™òÕw¿IDATH‰ÕÔ=nà ðg1x‰ÊØ¥ 7)Wéz€*PõbH2ö D=@\uA*âõN`Yª X2þx†÷Bt—MhföÒiÞó›¥aïÀ|³žVuÔ¢^UuûX6«ºÕýé÷ªv«J7h4Uý>¯§ªê¹ïKö:ߌÕá'#Q›ðBé/Û&@#‰ËTW%“ˆ:hW”GêÈ`à+ÔS3SK_ Žh¦DÆ—ºi-n9˜©öU%)«ÓSµÒÝrUM׵ʑ°[zƒÒX}¯Ú=c Å4ž9å™/ªûmíFQ»ƒ>òGUMQñËu¥”uºP‡¨ºëž¨WV¤†)VµÃ7AßCUqé(øúj*Ê™šFœ±ÈÛÆ5 Ä¡E"ÌO?k×p­dNVßöÚVÕIî­%cçŠ#÷YuUñÃÓµ´Æù\&Í‚²†k{›$m,¨Š†6Ê\‚ *ÃCVÕ×ðir‚2l Nù¢Ÿ£ ÕAú¬Hù¢‡m‹ÌJgÎ윀>‘DÏOß¹\øÛõ¾Aý*R±¦ìÔ¯¶EÍLùXT/(ò o–Qá/GÅ-‰ö³¯ê¬ý›þ«³Fø…¹IEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1271û„ÍoIDATH‰íÕ±nÄ PSÆ|‚?…OÃR?ä>¥l7ö:t妢^„kBR]uévN/’Ø9`‰·bïÉ%À시ÀD°d™ xoÎàs¨.SS€J” ‡éžV½îu æƒD_‡Êxáæ:ž»9>Ñ~ÉSŸúýêe§~ZªúWg\ÇQ„¹>jÙ~Qàä*À´S߇3&[ßtK A&RÓxÜ3A‰ (@È]gjê*™Ó´( Tv±µµ\rÔÜ4iZ»b±rSŸp´.oê‹®!zÖTnU^†¢>&V4ÂFã='–Wo4½UðUÕVÕž(ϺÃÅ©ší™&w¦9ëJž³”³kKŽšÎfI^µŒºWQ–V4Oó‰&TunµQ4•j' „±RkÐTþÛt•ζÒ&^”¶OÇN¡km ~Ìürª-sXÔîh’]I+ u‰Où¢èº®q\÷!ÞOcÿ¨?ã4õ}IEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1270wü´[VIDATH‰íÔ±qC! `q”Œð2B&«d„Lã ²¹Yƒ.e()8”Çg?].U¾ïÐ!AüÉjDâï¥.â®wýGõ+ín¥Õq£ƒ¢ Ù‰Z¡™|¦Ûõ;dQPÕDhq“ŽÿÒ MfÞsvÚI÷õ¹ž¨™Nˆ§ýÆ.ê›á¡¯ûíÖ”#ÒoŠ¨ÍšZ>VWõ¿j ^ÐŽ=»n‹¢¶‘o0Añé­¼UT.)VZ|öÕÍŠcdËyË›¢É­%LAÓŽòGUQ,ŽQQúЦ C ²Ž†R™³Ç¯±¯"®»Ñõ°RâfeMÖ¡YPÌzÒÔ“Nw”ÈVÓLÑsB }$²ãÃܱЇ³nºŽN“æ«ú}&rÐâ„üz/g•&Qðª8¼Ât¨ã¨ªGÿïÆ%:QWŽó‹´‹Vz“çïô…;º´ÅIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1269;=¾‘IDATH‰íÔMN!ð?Ž‘MS.`Ê\ºhÊ•\ºh2$¤Wá^ãp%&Sð½qb?€Yhb7ÎjÈxÀ{€<óYü­î.÷_/¨³fÕõ3êÐg¯í÷µ¤èí×úÔ~šÚ/çÆSø·ó™=`"Ìéªx£ûìGÕ:âX÷ã?Mé´ƒ Óð㙩vPª< V¿¤ƒlª—vÚv© $ ªJ!»xƒûšf‹nXb‹–ʼBªª7¼ÜDÚW4ör—D®*§‚·4‘Šª¦I±mid]·4ܶÔS°•±:ÕT:\«ô×b¨júJBU>êpEë®iìX»†9§^%è@•ShÚYŠüRdk«/5vÎÀxV^û¹Š 8Ú«ñ`ÎkFº u‡Þ)§¹: åµâ¡³+QêI—ÀFÄò¦8M¨:Ö•[6V$õØ¢vCùQ¢Ôr‡ªæLJ•]W*IjšƒÉSŠ/°yF½œÓ¡ŸÓï?ÖçßÍü ù1-“Ø#œIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1268`< (¿IDATH‰íÔ=²Û à%¼ºËî"Àá`_§M»î*¯µÿ°ïSŸúcWåžfÒÁ³‚Ä4èΦ…4‚Á¨·4€B/1ÛNùÉî›D<¡SúÏeY–  ?[Ì¢ˆ @¦…šªE HŸà ¡;(w…¨á,œ­„`ÜI…¥òÈŠÔë:ªN+x{‹& ”žüÎ~ÄáZÒÂán(§ªë{ÊDTa¨Èª£h'ºüÕ‚h •4e­xWÞœ³ƒ·µúÏÄi•çúÁºWÒ\P;¯…é™+M§™Òqhšj`ɲ~ð7I˜àÄOn©ö†õ6k-Ó‘5üEǯk/MƒfýÊ'*éô Þ°BËFQ5}N¤ÑÙÌúÒT/ΫéyVÓúêºÊƬ¶¯QE=éªöõ@N©šj…×Jåù°£_¨|uùP¹¸@U²±ëöXUR.œíïBjêA8ã;-g Ë@$ô÷ÃqÖ¹¯–JÅEI £¾âáIͦM¯¬¸~3<  èn)¿¹ÔŽ¢·{ºÿMÁ}õ³öƒÚ›IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1267ðƒ¹kIDATH‰íÕMnà àg¹ ›JÜ Ü¤\%GÈ2«ÀÑ8 ½UõÂbúp~äØàMU©‹Ì"Žøl4ž üYˆH€É0-E ÕJ¯9Þe+¾ª÷xéK¥YoéHU¼ÉUuÐ2ÀIT¹«hÔ\ÃF|?z©#·‹ÊèðïBy”SC¹øà±ª:ãT¦=Tt,:viWU»ÜE]t•³$=tÁøƒ Mµ!ºhêí%J[YK ¶¢Ì ¬ô§øº²RGwN°Ö\*ÅFÈ|9›K p“ó¬²tËÿWÒ™V?̰Ý!U&·×Í;Ìr*ªŠiÔ\¼¢Ýˆ©±$ÛŠëpš†OM<ÒMÙwªÉ¬ÜwMYÑT¦§TÄKm'+¿•/ߺÍH+•Í~­p ^×Û`u­TÓ tpjŽ*”NÅ@šz^/•ÇÉ“ƒ¦ÝM½ UÕÆñ F¥G\PãT,´¤µFÉrI¼)]9uϳ"MKìVîZ¨†Z-°”y’ñ´Ã_Š6õÖ,ôŠ­/×¶U1•øós®Çµp›+q¯8pä*|·J÷Ù¥9,L›ƆÐŒª’SçWµ™<Æ=ÓwKé+Ó¾ˆ_ÓžW9™"®„IEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1265q•YIDATH‰íÔAn„ àŸ¸`3)0Å#ôMíQæ³t1©Þ„]·,YPèã™&<']6éhŒŸ">~@½Ñîzפš/Ê j» [“5«aªÇú!蓪š.VÐC{…¢÷T^-)HýÈ\»à Œ²,X†c-¸ þ@3*Î:Œâ¨HWœM|–þ(±¾Útíkù­T˼ï÷7ZšŽú@+Þ¨*Ëß­Žêäîw7}ÏM©Q++ÍÑ,jRŽÕŠÇ3(ÕŠToÚ×¹©7Îø“4GMu6œtsS÷©e-¨n¶Ë4+ÕÔô‰gzÓÜk$5¤VÖ`)´¬~Ž°ÇºVaT¤nõ0þH)9SÓ(¤s3 TeQ[»Ð1ø:‰+…ÛDqíc $Ò±ʳ”+nª¶e,d’ÃHõ²´A¬¶ú$îÒw éç>ù¹Ç¿º{. õ‚W“s©IEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1264iŠAhIDATH‰íÕ1N!à)°0b¹… 7qö(Þ°Gð*ÜD [¬v ÂóÁT.©ÜD_2É$_˜ax? èÑû©zú^DöüJt~£Ëj:¯ý­Ëž–«iO¯[¿ Ÿ»šv5xJŽèEÔ_¡¨`¡â ð+@ŽV+i|„¥,j–Àšfê#)Ï*ÚMã¨>¸p$*5w* M·zÝQhþXLÕT'+ñ{yÆíl“4ºíD­MùÀlp’æ…µ5CT¾¸Ü\€Í-xæuN]Ám2q¢YíiÒ‰»&M2Yã(+\2½(jÅÒTÍÔ'Ëcåu.Šú“[£.UѪ+ºªAy`6eSŒÊ=â—Î5q&ºr÷m|ÐYTŽÿKºåyTŽ:¨¶Æ/B¯Gðþï'³¤Oœ*ãZmºtÕ‚Þ ïîEÒ ÛâÊ›\Ò~Ëómá•>8Jƒ)~$Áo‚aaÄ£+,›»´…R_²± ¬zˆ¾^ι»mayü«¤/‹êÇßÒýb^iýaÕKZÕ’¦%­P´ÝŒÒÝ §¿ÔLIà )ÇúiÏÝh‚>ÒGÒ¨;mYWTdÀ’4$å7ç7?SʺÓþgýU«)vgÂ`gtkYÍŒÂÆEå§uû,k*(«$¨iŠjqíæ”ZA‰‹NZÔDªª~’5‚agbøÈÒ™YoÀEö²bÅZ¥Zšº œwR)Y¡³š©XÕIšipB÷ëÚÐ&õ½ÒpÐÔÏUÙ™æí++ÿ.5Z Œ“¦î̉š3´àe0…Þ?úÛ–»ZФ¯@º–uMí#ÝŽ½rkI©[×OÎQã AÐtT¦.NyTtÂl´Lá*CËJí½-&ÙÐUãÀ¶Á&#tÿt9澿§Ë7~!Ú…ž­‚aA+„oÎ÷ fIò÷ô£ÀÐÿ<(IEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1262€éä6MIDATH‰åÔ1nÛ0àÇ2¨2fÇx…ŽÓGÉz€"$]r¥QÑKt(P²rjU€àëÿ(˶l:Y ”ƒDñÉ'ê‘DÿY±_Âê‹vç”qÑýø°hqyq N´ š—¸·W¤ÉÎË*ÐòÒ°¼å"ÙÐb?©°n—†7„7zr3Ý,Ôç~e6®Å0‰fº@L1›L+ÍÌÔ„ÒZÊbn)Ñ5æ,sÛ}w=,hE·vÒ»¸SÄ qóz/-‡ä¶Š×•|±DÌ|!UŽÌÛȘS(¤/ÿ§¸EõÕÔ—¿ûQî<õ­—V±àgUÉ’LO®\“Ÿžƒ™ôÍãbDÃy¬}u“¢2N«k»ÑwŠNÈ)™-Ð8 ?îçÅ2w„ !–Dœõ•|2¨7ø]y§Ùh–#¤Ðöo!¼™®‹ªPÓ¤Õ7ô¾é›cD“ê\H&6ÇQe2ƒÎÐ.ÛSå¾hð?1NUU¦Pf©+‹æÊ¼£*ÑæŒfE76Õ5iIû&™¾¦Yc{’J¦3‡ú0jÙÚ’gÁVúʱPΠàêúr<¡|U;9”|>Μ­,䲪+Ž\ÒUÍÈßÙý2Ï4©¢}]£F@Ý/ÆLÑIúîc¦è$Jþ±¦Áþ‚¶äïj Â])Ö• ou>£!¸ðF§SíL–¼ráŽ'šÊSˆø†è$7Æí¥ð‡ûŠ¢íúI•¤Šü¼¤»Ýþ=VälSSDõZ†$s¤ƒ—/ZÓ­4GßÏO•¢õò¬ÎËìÝgô/ÛêÒ²EçIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1261ൌ¼IDATH‰ÍÕ±nÛ0ÐS„ãeìP„ý„Ž‚òWü ;& û ù• ò#üB ‚®GI–í˜Ç ”ƒdê‘GšG‰ÿkéCK1èM6.ìâÚ• \àÁ•˜T§K>×™ïfËøyÑ S›Š„\u¡Üǡ糲è¯Uí¹æçUî²z©OÜÒu&ä?ïOÝ7Ô®úž¦Lh®Æ=•7îÉ«*K]C9ÙÛ57uhŽÛøG©ŸUÒ–ûjÑ '¸ÊÞ¢zÙv~ìª*»\nn¨«ìë²C]éö|E}ØõÒ¤®ÁÓOUeÚ`rŠ‚§o˜}TõŽœu´µ’¯›Ô‡íÔ4xØÊ„}EÁ+*)”¥Ö² 1cùiÚSC³EMF*[«h´du%G6-²$¸¡²=t•Ç •÷ ©#èšp˜´þ¢Í€I[+r ôµ"ïMÔúÊé±1¾ªN¾àÙú[VÎ¥G· °¢ŸD÷ ’|êê乞ôÙS×PŽFQÉ~y<ÖÇ]’mi¥üCý p;¢IK9ÛIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1260nç…¢IDATH‰íÕ1n!àMAŠH¤L Áe Ë\e‘ H)Ræ{ŽB” àŽñò3^E^ÓYqáWŒvø–Ñ þ7{=$¬ËJ>P/GsM;À×*óràãó›Ï׿e_€Ý¯Ñ”>¿ÿ¬€“§ ~¿B~U˜Ÿò(¤BÉUQù ËŒ†m¢ÿªè#•ó¡Ê»¾y5GÚ4óÁ®ÑRý¨U³ÛŒÕÿðRÛ­–-€„mÐB Ø\LPÌ÷÷=ô½_i…nd¶è†·¢*A²á›NƒrÔ\¢ÚA‹®Ôè~“§Ê¥'Ùd³R/Ù–…‚šæÚÐîÜBEQ¡Wú£PÕJ¥¨$·7ú¨y£žVš4¿>73Í ]±R~ú\X«…+e&»Ú¹r“àÓT9T¶#åô¹¶®É¬Ôwµ9Lµv.ÁMµ/²OtñÓ¸G­+ØI.ÞšÉæžöp²ÔIê2sÅÍ5áë$±l ;jÞ0K;ÏÑ]yºLúèrÊòhi*¬uk“}Rf¶7ù |«/à™íeüºMôr>KeöÔ Ï3~‘†úoúžhâIë–IEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1259<n}>IDATH‰íÔ±j„@à_öȦÒ6Õík¤ç+]yÅBŠ”y%ÅG˜r q@àfRAñÃÕýwf¡OŽϾøx»ƒ£YWô 0ˆ£KÒŠ\~rT’ÎHÔ2>ꂤSøÊ—¨ÇH¯H³BM?šÇù®›ž_qMNS^¡£­ž.›öZó3•¿ëúóÝXqNÑÈÚPÑEú©¸p!e$FébzñÓP.?s~T’´xsVá®S™­2¼º¢ŽýlU(ëq˜#eXUcmx•C ,ijöê™ZyRÅŸ‘”Š^²×eÔ¹”P§Á´û”Ó)sä<²“ÊÔz9ó‡-‡n<:ʶ^M[œàjKdŽ''+¶¦E(Û޾àÞÝêv¨ÜX{z°-dQ9; v`ñ êíH¿o¯Ûu×]ÿ‰ÞçU„›ÊIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1258K^ëmIDATH‰íÕ;NÄ0à?D"T˜’ _’aŽÂ(·@²Wd¯bN‚%.`i–‡ñ>¤Õzl*$ ,%Qòi’ÉŒã€NÆoŸfs8Û Æ¿þk_硾u{~Ávž[L£X(¤%eöVŸæ¼©¨%]SÕ¤S£õÎMSÒY5)†ªëhHÔ\ÕGÛèþ]~RµÍªÌ¬®ªrά¯œÂN?…ærít{®K–ê̺ά37ÂJJ©Öª¯µÎb«Æ%pà!«Fƒ O@[«ª^ëÁí’Ô™`ýCOA‘ÂíâE-ʳ¤5œT5-;ÕYÔ¨ÒKÕ"jàþØ®zaºê8ÐtŸëÈÃx(AÓDà"jw¯RS îªên5I¯Ÿ¯°ê̳钕û›…rìë~æèŽ&^bÄo¿ÞyÚ}ä§KÅq݈dÉiž]‚Êã7µØ‘f3ŒÕ#½ªê ©¿úÇùÔp>N–[ºƒIEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1257Û®Cz IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1256¬©sìdIDATH‰íÔ¿MÄ0ðÏ‘Ò#x3 #0¾ŠòVrEË ¾ "Ѹˆòøœøù(B ,¹û)Éûç@N¬„_£‡/è÷Eõ¯UgJóÔkåM“ß¶×%ƒ{˜^s $Øèq£‹[6E3µ~¢­Ì³én/éRéBnùN 1é]¨!³,¦Ò…–HSnD][¨AÕÔúËg4âÚ0.]!†#³×t5ÒæFÕ Õ g®µCS–ða¬Û¿i¨a¨LƒÝIJªFIro%åPÔ|M;BÔ¬éJ2‚.–lEñš†……2‹áÈGE+n¨¶žõý­ð3¸f[•Ù(à<¡Ê\eà ˜¸Wô3™ÛcÁ™t’ú¯ÊQ]Æs¹5õõ}¼¯Q×rËëýG|ùš=vðVëÇô ƒD<‡YâIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment12555 "V«IDATH‰íÖ½nÛ0ð?ÁÙ0ÀáxªÊg~EOª´ï}cýÁ?\‹²Yê ·›):Ð-UÑ=I³âFV ¸–4(~ à˜BqŒuÓ婪nN*yÖŒéMq üúYw:ïwibu἟Õb¦¥jd-’r5ÐÕqîú”†µ¥òʼnêgd Ÿ^ÒP¸]œ¤÷…ë¬X­¤¿s½#’*ÉQÖ©ÝïRy. U/UŸ J&Y¿2IÖhSWvÐâʾ_èà&Í\¬Á¥UŸg§ÜÕ_ªë$C{ý ì>Gª-Þ´•’gÝbv*ž“Ý^ƒ£»g§›Ïú»×G?ÓÔ ° fÔô"_VÃÑåe¾¼o¬#´¬Á†¦R­êÇ”¯'|ÕB3j¡£ÐeÐ<õø&öQc—ÙC-£^Eè²I7­ Ú×G®Ûý8Ø·ûîÿP44˜¥ŠãõÜÑ ø²IýIEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1254B§À†IDATH‰ÝÔ±NÃ0à‹,áNxí€ðkt"<öÆÈ#ð*·õ1‰‘H x°|ü& hrލ„8eHûÕgû|.ÉJDúúÐÆ}¤C[ÍjfûW÷ûË:®êÖ”=üDA eÉD½DE÷"d‘ü`¡whªMŒÔUÍŠ#´×4a¢›†F#ñªjP´4ÄQµ’¸ó˜£¥ÜÖB·ÐQYÕ¤uì èíyGNÕ<Åôš¬ ;Â~Y×xKPßVÔÊÇkU_rUG¬*jˆ3²{]»ä†³–Ž&ùD†]ýŽoƒ­J8.ÄR}ÂÙ*²ÈŒ7îKíY"Uk#ëŠÓ­OÐ3ƒ0¾ÈþHAxzþ¬qÐ4ùй~·™²iª}•¦âïï±­ˆÓéÓª>¯ê"N¨oÁ¿ +êzVIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1252«Ä·õ•IDATH‰ÕÖAN!àŸ’È’…à(ãQ<‚Kà <‚G‘Ç#àŽDþ”FÛ™˜c|™¤ _‡×÷È l„ÅšõâøÖoýOúÇÖgöýÊPÉX }âGÏŒ­ u24¯ym à¹2k]#™×Š8)œ4`¥f„sœWUAõ–Þu¥Vf|®Êç=á¡Y'ÒàQ¤›G4tÿPÿ”ˆÚγ\IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1248R oª—IDATH‰íÕANÄ0 Ð_"‘e8¹+r-#b¸Gà*AbÏ‚8‘Ø©ª±§ƒ—-›‰4£6OMÛM€ÿjgÀÅŸzeõgÜËÿ9°*p-7W /Õ?•ÈïÏÚÊÀ<éåø»o7ÂxÒ“þnsÝÖ–¡Wy¢IwM|¯e¹-±ÁõJy–/€ItètFž€$Z %䈢åÜT‘(Ûh¯2Ck,aF‚¡rYb “­Mµ©Z#Ï‹ŽH%÷ÊGMýœUC ¹„-•@eÙCLeÑ>’ª‰RA6s$ÑÐ@miÖß>¶Êš‰$‘Ö{EЦÙz/OnvEÓlÅŠG7û½&íxX©$ÁSn»EÃJk=¥Æ¶–$£úO šv<®”´´œŽaÍJ7o]¬©³cl«ìíªo¦æQ*RôÕ~V– ù-rdPª‡­ó{­öš)­õ®ÈùÓêeŸ™ŽžNÞ¨ºy9ßDQu¿´«œƒê¦Ñú]å¨~B4t€ÅMà;^«ÌÙ~,¾ý›~¿`<ø›p…IEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1247µr;:IDATH‰íÓAnÄ ÐX¤;ŽÀQÜ›‘£!õ•ç,YPègF™EâdQU]Tc)R’ÛŒ‹XñÒ?Ò¯ßøs½TM£ÇSÍi¨?ÕUøXÅÒ é€Œ"jè iSUø¥ˆ#Ë $C‹Cx¨ëjÈÉYªH9h®SKèÔ·£Ž§º£wm©KwgZ ¡{K5ê]Ûbi:k­¦¶”,å3k-–ΚÙFAüv$p,¦6×ÝÔdjYº§®¶*1u•·YêTØÊvyvÃÙŠQ€ç픯ðÛí´qß·mÑN+熺µy§s2¨[#wª±.ïðšŽú¹Ís´NKÉóAnGe>ŽG$¶í”)Å‚`ë ÎÕr®bëx¬{¦ê™s:ÑÍ ;«gt«"+^úÏõåäKh0O¢IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1246µ²B­{IDATH‰íÓ;N1à1+±tÛRá‹ ùfØ©¸GpÇ5&¢ ÄE\X;ù½ynvÖ bšXùÛ™Ñüý0"²yór.ët‹3å¦F/lE²ª‰¼„Ÿ^ÓH~¬Ïc/ÑjZˆ¦ ¨Ó4S=›Œ¦‰ÈA³¢ µÁÊ´iùȳ‹UYÓe;BŸT–‡B>º¦ú°¦™`›5EBI>”7#ƒl™Äœ÷Ï”m´‘ÆMŽ\UVUFrÆšÏÝT®õû¢Þh­Û“’®j§j6ã¤FÕÔ•÷>jDØË®É1=ñ‡uæÝ¾ÈÎ’ÉŽ€'7fdSáùó×dE³¡…ðäë'îK² ߘùågñÌß™ KhŸev׿®ad×ù>ÌqتÑí1Ò´¸©ú™ö0Ó·ø¯ÿŠþšj–ŸTÑ•"ÃÈQ««‚ØUÛ¹& ±BVLŠ\Ï Ä²«RÏ¢ÙÊZ¤Kõ)0âšúù¾)ȼ®yÓ.š”uD‘v%]}ñm¢ÙWQÌ´ãü$E“h¹Ð‘³dØtÍ!Ç­ªl3•o—q¥q¢ l(æ ­¦[â+-¶9âô¬kvC)_h¨Œ ¥¥8D£ê8@ ï‹IªvH¾x/Må^¯Úìh$#îµnê*—­ÒÀ¶ˆ÷UµÅGE¥nüvöíQå $[B‡¿ÑÃ}GRp$ O¯v¹¢í°ªõ¼g+U·ôs=ïºdHâ§nuhj”¬­Š~“n+ås‰³j¾õÉ8¿'uri7ǶFo\UFôúõ’NƒºTU®zÕ«þcýLBÿèÛ®IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1242²ß†´½IDATH‰åÕ±NÃ0гŒd&¼2Täø€JáSøŒ"!lÔß²ÄÀo˜‰ÕŒ;'”¶>*6¸ Nòd;qÎ9»FºÀµ‹ùrÍWiÆÅ°¯ 7¶±ÕÛÕ¬ÏMóõ9¬àb$ͪTG3˜6ªB,ªwE|Ý`¡ÆƒÊ¶©F¬¿â½©iq³“òªEš7ŸÜ9&IªäÇ(¬•Á‡¢XùÕ¥ï^š¢&O©ñ£¬6/X¨qH¬Bæ4ÓÒl‰‡ê]¼5í¬_+äÀj{åÐV Ó *MHì1Ž¢Îe‚•Ôãc¯–&äÊ3(\wJÃÆ1_‘jAé-£K.í-i Ϻš**åk«0½R¹rIÉʀʜ¤õîX=,ÍSݤ[—ŸÅk_á‡:zÂ¥4ÂÍÛ´Ì»J+|vP-wŸÙtÅð/ýc¬iŠëT@¿ÂIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1241+Ö×+IDATH‰íÔMJ1à×´ÍÀ\@ìk¸ìk¹HvË€ð /Y)+=àbR•Ù¨zÑÔGå× > ¢…»Ð×þõg賩iÏü°=:®¹Î½VÇ®)ZglYÑä8¡5V(*³L\T­MÉR*dQCëÄŸ¨O3k»ÊNæ…³,Ý+4è·ñ%…­Í¼iÊ T[ŸÊ4P.t¦+[³+»îóµ­iÉ[㚎¶ï]K˜ªàxkªg‹–®¥«¥{°š–2RŸ}‚½nnÒ÷,5Èu=“R“i}VU¾€*ÊQâõ\ ¸i$\XÝí*h?ˆNñ¡îÛ½¢3GEù1Þmå¡?ïùøú6Ô× z/ÙÕ¯×wXyKãîžµ.IEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1240\Ñ瘹IDATH‰ÕÕ=NÃ0ð¿1"*ÂÈ„¯€ÄޝÂ1±ÄÀÈ•rŽ€Œ8–XŒdÙ¼—4m Ï#<µ±ãŸœ:þxUV‚T×µ‹hW:Gœ®={ …3àx¬o?ß×6¿yÜÿu¨^âv(·úejjß¡ÜX-¡ 7mÉMÏ-])Ù|8h?*E,†®¼’vlxF›öº‹Ùý÷»!¿Ý¹Zþ“¾­jO[ÊëÌâA©t }gºI#ŸUSšÑÀ³Š.)Q=¯º°‹8iÕ.º¦2SZy›¹°‹7b5Î$P‹Y(•Îö††A©Ù?j»Ð4¨¦#4 Í“fÄš6Y%-kßz$]QK^Uoa¢Î¢† V%iaU¢òº%ܯj&m*UZÑ âIEé5‚§uí¯Â¶®®óuv<¤40Ò’•z IHÖÐÄõí¨IÔÞ„! VÔÒiÀ¦4jÞ96a+(-Ná$˜p×ÄÅÞ Œh8ÒžÔ¢ž°:Üëån?èµò’zQ¹o~~qÊHùo’¯t‹§*/¡‘N÷.¬”¦øœe)‹ÆÃDJ9öiUËÐ/:U‚®§zIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1239jLÉûÓIDATH‰íÕAnÝ àAHaɸFV¡GéA¢B”E7‘z„\©ûöAêÊ’búCìöÅÌó&ªÔEG~ö3ŸøÁŒ!“ˆÌC¼Q\i†â6¯¶@¹[æHÑh"Z53ÈázáNMÍØ¡_×P§2wýc¨uiWôÆíöUyžŸsVüeSŒµéŒo§Çí&Ò¸{a9âåï5§ªÿš~>Õ<Ñçwè{Æý¯{u¦™EŠã69N#ËjP¾#K_³ü­vƒ²3™†Ú[´ ¨ jWg»(ºL¤3JÜÔEç€÷*9b[ÍQQõxd•| ÏMTÅq(*ýŠ~ðÙ Š§ê›zA«éÄñ£OÞ Ú¦Ÿî,+i6ˆ©†EýEÛ'Ûߨû­h¦ûƒî=?¢¹C›¨ã6j¦Ê:z‡Y«í¤eY‹ƒöñ~>*rƒ1ÇWyÅXŸïDý‰{\°†7‚"ðÉ®:YõTVa{0.–…™Ênº®/¢º–ÃU-¾ôëš“#²/Cõ ™|¶j­…)$¨£rÔ±òØÆ†.58%†Œ…ú£Î‰€:òq©ý]q„´¼U¦b?ÅÁE/:ÆÅ†Ý¶µiÃ{ß…º}Fœ Rü£ú E“"rÝIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1238Kùm4IDATH‰íÕ±nÛ0Ðc˜KPvôXù «ŸÒOÈè†I£C‹F†Œýƒ‚A‡¬,:”AY^ï$»±EÊ@·%l˺'Ry¤Ž¥A×ÿ™ô‡á¤èƒj <ˆ_qz¢,ÀêF‚‰ 0.ºøáÅj¾©Æ¸äèõí¡ò޳~ ¿Z o»ðíIû˜ßžÕBQLV}Tûa>“•:ËÕHÞ­aaFô9­#lÆñ%‰Œ£Šéìl¨ø_ÿVwÝÓiCùŒ‰ÒµÐfZ.Nb W(P%ôñ Îô;}P‚A¦L³ÓR)f°¡å`“,Z&õÆn¤ke®¨@gÜB…F"%æŠú…Šoë·sµ-kªjú£²¢¹W{ÅR[¿$yDݪ‰ø‰Ò¶-Zv´™h»$Ë3¥›yrVg?*M’AßXÚ¬h*ªêÇ3XUšªÖ÷*†Ê#ÂÊ-Ï¡PEã¸WaQÔ¼ SŸh+Ï‹¡Åkà7³m†ê ]±žG2Ç ãL&Žæá8wio$B1 Ô«.ŸÒµêÚ(4©KJ´¦”¯êc“æmºªê>‡6ŽêSö&Λ4‘hKýIsîÆ”Ï`ÞÄI-뎤š>’Þk¯aQ®2Ä´ñß+×çU¡ô„5½ˆ]mgÀGÒœ9m½W‚vsìTe¿²âôê¡úæ’žßéŸÔß'¼ÞQµÅTIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1237ôäüIDATH‰íÒ±n! àÿt*ѱyŒ•x¥ŽÝ@ê‹QuèkXê 02PsJr¹œ/{¥ó‚à“Ÿ#†è †>Ûë–jó!SÕ¥®¬*'—ž-I®×5¾:’\UÉÇ7O/œ‚®ðR@:X+ø¯!peMYôWÒ¡k…ì=º–ß¶t mÔ5™®uC£í÷–Ê2MÝèYÆ-wZ¬²$·¨|ysð4 ¹|Û•<ìYëØ˜³%s›{ÕbêÑgCöFÛ¬¶Àes)v×sv®˜ä×úÞДÖÒ&åµc„(™/UtMæGÕGçyÖjàtí•ß¡kœºúŸ£)WK@•¿¡jφÅ~©rýðHsx¤ËØu×]wý7zÔ†N—KaIEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1236úóÔj IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1235cú…жIDATH‰ÕÕMN$!ð?Ö¹€‘kÌJ®2'0½pé&ñ"³À¸p醹KKž®¶Ûi•If£$Tø¥xh8 €Ó¹_ÇǃnS?ýQÃ^$½ß©#Ї¹ãQÓêæsÔkvï3·'J*ùõît]»ì{¿OÕÐ`ìT5øUµ´¢°ô´úîp<¯êØ$õÿñî—Ò—UMDY•K:L”eLxn+Šð ªÓ7pñИ)7ì5Wƒ¤>O¸Ì@“I—ø®£¸®O6oT5ÁǦEáDtT)ÁG“7Ó<Ý õb¬Éä«Uµ÷E4Ûd©è¨D-.Zjçu’òÏQâHš‘æg-kK.çHˆkÔ!Î;U¬.Y ×ÜMíóÛ”kr†Ý4ñAgóL²¶{xÖËö{m™m·Wp’¶ø×i¤ ¶NO²ò’S•¨i Qá‹©çšÛ… i6ó^»U¸ìÔ÷ÊYMË~H}¤X/§|†o½b¯ICÈ/NY¹CÅ>ZÞ½†\W¼nZn†$ÔäãŸí²u¾_\§ïÇVT?ü­ŒOªo”‘ú2i\IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1234ýµFHIDATH‰íÔ;nÄ à‰.äË’ Ø‹bRåZ('¡Û) ‘FL{‹H [¥Had‹Ç'ß)§žzê*mÜüÑüµ®\ ó—4ݨ%pÂFØ˜í  Azk‘ªÚ‡á4Í ð –IU²ÕÅÅp(¹¸‰Žk®Õ’…hQ"Š¡¸& Uó®‘#gU«=4M5‰FUÉõH1SO2nªrHÛT¹x&Óf*7l{˜hZ Žïêe¢QrÃ×e¢`y¶L´'Ùü¦kߌffZ{>#-cnpYûÕ‡€UÓ¼IDƒ¦‰¯×]½¦ïüiçj9N/Yys^%\˜}¿6EɶCÍQ $3Ê·çª(LìšF•#ö XHæDeÞ]]|í:îUßA¸~B5Mxº_M .ûÙ÷ý÷1èQj—ï1¢ÛÒí¯Î?ø‹júª¾W¥îˆ~îIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1233Š™ åuIDATH‰íÔ1NÄ0ÐoŒH·æH¾’¯E”PQr$|Á ËÃwIJ‡‚‚\DVž7šÌŸ,Ê,õàG:Æouÿõ/i›÷´„=M»Š;Én¤ÍXƒóX+ FZ4„ ¸¾½ø¢KÈS<ð@StN.Q§«k¾¤F˜ÙF@Õ‰Z̲£Õ,‡cS¶O¾èê5ê•Y5l»!Ù§iÕEÓ¢{*&õ·¼á¤Ø4^²-¢këIXi##&©Êq_!Ô]³¡2A¥“Ü'KõEˈûè%ê˧yeJW%}#¹WÝHûËÔÚïV+e[U£ºv¨²y£ÆB“¯ð«žw£±‘êªy昜ií_ 3p•5i:q»ÙÌÕ{ж]åþ¨™ª¤»^ÛÓ”|¿]Üpàe¼À=pÅ‹¦¬ìà'¬ÌF_< ÍÆqqâ–±®£¥ä{Rœò¯rR\ØÑõkú®+?*“IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1232ýžssIDATH‰íÔ=ND!ð?RPbiad²²GØr “7×"ñ^#ÐIAÎÝÄ,ó¶°1&ÒðÈÇ×  ß(„ý×?©ñ–¶Ð›ÛÔâ{™'¹hò=!v,šxþô¡ç0i†_Wà:YM`,wÚR‚áj¹Vž·šbT ^keµUô„kíä‹i¢^ÙïÐ'ÍšEyP|rºš¡yK)²M«©&Eì6Ô›U Íe[VVeÞzäÅ6œ´5³öäê=NAÙ¯(q|Ñ¢vV¬E§ë*j¤Ò´a©C£¦Õp ­tÒ´ˆH®©ì“›yÎ:ѱO,Éë†RД×úþÖiAüP´AžÑg¥ÐLçÓÞôé¬>)T#×€öv4É)>°âäÚ¤ËêÛ_¢œnÎÖp'ªÜ…‹¾Ê› ¼(š†:Œ®µ¤1$éÚå #$Rn÷¹dy6µÊïJæœ ·ò·æ¯¿Þ?Ñ/zaT~×—IEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1229sWøºhIDATH‰íÕANÃ0Ðo)¬ðP}€ðU8B—] l© ŽÁU,q,qÌ /,ã”V¥w³ˆ¿L$ÏLÐ>Œ_N^K‡Ó ûF?ãHé“NãXûø×ý“ú¾³%Ò‚n‰`(N”• Lm!¢×ÌIP¸×©Ÿ8IUÀzØNù©Ñ¢ÌÁ`m$ ίuZ©¬E¥poòÕ\z-‹‚U×¹ÓÊ»q‘õBRÚ+4ß8PÍJ 7guc†*lºÔ¤$ý¨¨6^”*_…Û¡òr¸“´m²ð²œë@¹H¾JJ,­9ªNEÖdˆk¬¢¬Ñ¶t@Öà(n£¬ü×H–ÇK¨ä¼l9¶tQ[×Ãwaz-†Üv¨Ù;Ó3ɳ‘lá"/{4º|kª~ijú$Ìs› 7&éIÐ6ÏÀXM\¯å—ÏíÔ(Q5€Èê¹½Î;å÷×I¹~§QúndícuIúæ¢Ò9¥ß®_õHZdJŸ™VIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1228PÈ,}IDATH‰íÕKNÃ0à1^˜ÂÛ,P}…‘›á‘8WòŽk˜D‰,Ü ¿1Móp*±@Õªm¾ÄöŒÇ.É™ÆôÕŸÕöÛÆý×?¤¼­O’ÈU5µÒ^&ÿxœé³H0ÈGÒù¢)Ë@ _]ÀÇRÑeO$D–‹ÎÆå< ݾ£ ½%6è ¦ª;½¥ŽÝ+Z¤#k mhL¢š¾fE¨uÅ`Áõëq¡ü©»mŬ*Ùøè9FÐ%Ï_QÆœùÆÄ‹ žv.˜PÖ·´fìïVØÆé³—~Ô!+&>™óÕT=ÇbœÔzN*w¦êgŠÇ™æãQ;“oà}]£•^ ʧ­hÂÕÎæ„×Õ£>†¼ÐUE‰´/(¡ª" öAm¨‹µ¨*Ko‹€¶Ô¦kT#šžô€LU5º\ŠÚu6ÞòÆÍMs³Î$*"­‘÷‘µ¶Óº•ŠšžìM‹ÿ½2«<îžpX=ÈJ±ôˆè ëöCNॾÇ¿-+sLIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1227”ïÕ½CIDATH‰íÔAN! àŸÔd–\Àbä*ï$BâÅpå1ä,YjÁÙQƸÓäÍf&ù€R¦|ñDÜõ®ÿ[Ý•6{¥År5;-°œ8zM³h„ë †[Ðæ¶ÂÀ)Ú#OµŠ6S(YÑ.J•⳪œE›‰7]+uÑø¤iùVNpëžOM¢!ùU]8-§ñƒf׎F‰£á¸þ£ìº=Õh*«Ó;ƒvš93î´QË Ü]“ãf¶*…!ÕS­®¦i7scÅ©Úh†VÕs9fhùÒæJB#ôF“ ×¢0®4_ÕÏ„dq¤¨$ô1³VUzK¾¨‡R %@»eNªŽbȯŠ&\ ’‚Ô¢rýÐu½a>×ÚÔ]j4–;•ž<5z¯+x‘¤vʳtºì“Ç¥~þ¥îý ýÿ‚QyØó3IEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1226ãèå+hIDATH‰íÓAnà ÐO©Â&*ˆâ‹TqV¢.²Ìzz‚^Þ€îJ™Nì*QÌ8ËfSdK†§ÁϺ2<þõôõFïý×›è(:Q“¡¤xѶ‰ (ÀU˜V=/ÃytºÑW€°™·˜ª‡ËÀ0IPÞ5Y¿ÖÙÄG16vaiЉÛ¬:P«œJèÒRWíé¥ÍhÐ{Ö½Kù›º*u^ºÔÄŠkZæ5 ')gdM¾:Is,åäñÝQbmk4(zŠª0ª£° jå™ßàYÖÂ[b õ+kªŠ+䇄ó$–{²è“&w©ÇtÍY'±ÓíNú=Q¾âY§ßÌ“ØÏª¢C ­šŒ§7ÈZL5;ÚÍhîªÙÓÎ$M6›}UÞ‰2qÝ=tØŠ>þꪭ/wêQ¹1¢P}>ÚXÚvëÓ¨Yèº1vÅ›¡cYãpö-IÝUÚOŸÔª0n¦?9Ä=¹‘vÕIEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1224 æ„5IDATH‰íÓ±nÄ à1°œÊz¯pc‡Jécu85ôÍÜ7á<2 \“ëP]Ì •ª.aI¢Ï€c0äÁÈ8ôÐCÿ@ëº×O‘¥8^öú¡ï^H?‹¡°XJN*ð$Ká„ëP2µÏžâD)âJlkʈljJˆ5öÊNòM»¡}h™©Ü4ÔÐ(‡j+͵o9Ÿc lÏå%¿$Š­‚uÛÜT=BÕ…¦ª]èÕÈJŸM#°fãŒ4gi~¹‰V/ÕM•ã˜iI¡;JfÎ:©¤DSóЛé,‹ç•gê%eí[[èQOy¢56UL”S{ò¢fä U>¹Äø_-p9ãè}ÞkêÙêл_ðßÚà uyÓø[½ÌU÷}ÓÞïšö½’¶Ð"ÝWÃÿ¦_UT5ÛêÉïIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1223“‚¤†IDATH‰ÝÓ±NÃ0гŒêa6Øò |¿ń¯b`ì/1t„?Àˆ¡#fª+Ç9m¥ÛAjÀJ¤ÄOçœ; ‰p ¾OêÛ±«#²úï'5XŠº©Î’Ô‹º‚á7ÀR*ÕƒéŒ‡Žøú®Lbu "èšF‰‚ò k”×ÒUÔsF:ÌD¢PBÖ²x ¥ºAë ïªT¿UÛT8P9ç¬ÎV³Š]Þ‘¯k2áŒõ“ªÊ·¾‘Ô7; µ„ŠRõ$)uªü…¬¹l°kiâi° ¿>UÎh£‹BƒÎ‹÷ƒ–+{3,ëßuÃâDÛq޹#²âf&ì+ÇxÝÒ^’rÝzs0” q¬I“Â×ÇùN÷c£î•X8AhŠœs=§™\ðT©Üü‰|€º^p§ÀƒÊªãþp™@þ •Šé]KÏYñ²¬«t+8«+åjJK®žKý˜ÔcbWPדJ¿A¿éü;”,wGIEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1222ä…!2YIDATH‰íÔAN1 Ð?DÂ,ª¦'h®ÁnnF‚zŽDXqH\ Ë,¢'©êxfÓ ¼ÌSl'ã x#~»æmõ7è ]ýë_Õ²©2Qe^Õä9®“¬ø¥Â3À¾Á.4õeøˆ9ƒá+0Ø£i¡àŠ˜4Í6‘) ªË{ªžà¯UzN.侮¢A´ì¨é}²CÊ>lªd¦Í£+ zÝ2§£]Ñà›îµÐ[[ÞÆ(f.ôQ×Ôs¶ãk*“ã²üF]{ÁØ“ë:õÖ{rM«¤ Ü“kZdÓ4’k*›Æv¯êWG—ãBÏÇm“®²œfnFWÃ/r Jª6ËåA¹¢(WÑg~OsVÕ5:ñI†Ä+Z\µF”í/%ï§fB¿ë+°Ø&`99SDålœõÜ銈ªÆï½÷š¦¡C•©!¿yþÊÔéñCõÙŽQ º}·¶IEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1221}Œpˆ0IDATH‰íÓ1R! à v´Îpgð(Á8Âͤó»Ìþ†}V’¼ÊÂâ1[ñM²$•Ué¦7½éëO`–]„I8(ƒó®œ0(1Œ´khy´]™¢l„NŽi×Añ çÐÈuCÝðíÝÒé§o MyéáD_EûÑú¦é8µ£¥"Q¥–nÆ^Ó麥iUÔA†"ðRЇžM=œËé¼ÅyEØ›ÿmy%·´–•\Í,)Òd½Wë¼g¸®3œáFfùub…d{…k*™¥…3š±µ|qâb¨\ÏHœS9´ž‡¡Rnm¥«:ä¥d×|Õt¶0‰\%ur˜è颯òÀ}¥¥eÓAtÑaª?ZæÇu»â®g¢XÉËdíú{ýSýÓ¥b‹%#“IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1220 ‹@qIDATH‰íÔ1NÄ0Ðo\˜)[R¬0GØ’É…#pâŽ+p#Š-¹‚¹)L†q­–xZÖŠ’(O™Œ=〆ÇQúOõeAŸi» š¶¡©ŠFXʲBQ‚!o$Y#t¹$#j€ JT$ ÷è‰>+Å 7€ãCÊ ÷@C£A€ÅŸ*Í;u~­|­§ßÖ:võwy®= 禡œ•+“jõ{íæú@ô4#Ð,多(iòcɹґuÐô”‹òíwyݳ¦¬RI{®¯“ÒP:à¶Òi­øÛŠr[£f¢ò£ÐÑÀ‰5”‹“´¨ƒáŒEÓÒŒ¼¥ ‚yÌÄ Œdù8»€Òú:"„KÖýòu¾\@ Ãá_ÿõé⾄n‰Ô\Ÿ¾%òÔ”`gz¿_óI^Si‚™én¿öD(Ž gúö¹¦ Fò<›Œ@H,î|hÔƒˆmÑÔ*/°fUY‰j\UÕoü cîj0IÖÀjªœœ‘;AÓjõÆŸ¤ÒƒÁ¦¾¤k‡k¾®åEî)¥‘p-jÞªª”¿õPÔÉš.Æ¢mõëw¥‹†¯àÚŒMѨE-GҳȡõÜ‘ª%å6Ùô”wQó[=Ó£¤Q'Í}´#)_;éXÔåŽN{ºÌYî”3ÞEwc}EÑK wne彯 íѪƒòK _:zjÄÊw¾LT=µ:R*è¡B¿F/ÔŒ_ü÷îëðþXÏ9 q„IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1218/}›ï[IDATH‰íÔ±NÃ0àßd0’׿#R^¥Ñ)æÉ0OÀ+¤««xˆl~§ªÜ –F,}²îÎw6ê_ÀU¯zÕßéÄõñ¸¦#6õ°Wuò\£îuÍ®‚u¶4  6¬iÁŽ„DBó3‰]F}•}˜•[©Á‡ÍIK¿Œ{ Æ‡¦‰ZªÉ#ŠWÔE—°ŒTô'åîî/|2°šF‡>™ pUäŒ~š² ¶V©<ç!u­ƒƒ¦™j›zMÙœ4÷× TsÖ^Ñ/MvRã†>m-5›QÍ*1^Ó¼,) 0XKÌfÖÔ©:P“®¾p@f "çG}£Z¶ZÑlŠË³V©–÷À²RÕM'5B'tÁ榦tBL;þ±M³ÚF¸kÿ"ã¦qÖ[àf]yS:ùÀ\êǪ>É‘»Ð˜šËœ_î—Ss®·ø¸öàýûû©ê7GÝ»ÝIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1217¿Â†~1IDATH‰íÔ1nÃ0 Ðohðèµ›zêÉj½˜‚½†r ±ŸFÜ&% C§†ðb>@&aRND<ô¡ÿU?»ú.rjjuRáe ¦–A F)~ÂQ+Ép’¦qÐ•š€‚†:f1-†V*žðÚÑ7P,•HÕliqŸ7½ëHÖMçè³OMM!ÏÙÖù¢³¡‚ª’ú*–F~9…³DSO+•½¦òŠvÓÐeP­-u›º{-ÌåQu e.Oª¥¡Ño:54¨. ÅÜQm…šmÕbU½©z$5Ùšý©£)D-›¥œªŽr®”ðk]8u@CI\\n™¯†*1\[.鞯ÕUÿ ó.a¯êy9ȵVÿ]ö˜ü™×Ç–ß«šnÚæëGG/±«ïª¨_XèLŒc.IEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1216ÈŶè\IDATH‰íÕ1jÄ0ÐoÐ!j·Xð5¶²öX)ÂJ7ȕԥÌÔ¥Œ ±“/;$!» !°ÂfÀÏhfd¿9ŽKèä2G' " ãªWý÷ú¦ëäEžùȶšD¢á…¾Õà…©ôR~j†çó¡—IÑ_€UÑ(¿ËÀšWuOMU“ ;j[ UÓ]Ußj„C²S/AÔÅ!ÛRUª]×@MU±­'¯Ïg…Ó4 aѦ‚¯U†Ò³M_¨“‡›µYoý–³/ÚæŠZμ©7ðŠNgHU§ëC7«§é}¿¡—l6T’­Ú­ht[Ê–f&U%1GëÊ9çúªJ±ë:™Ë‡¶¹ >›2÷•×2ér?wN[Íp‰]qd·+;%  Àír6ºœ“;À$eÿ~ž§&+†…öÔ fEÔÒv,ccmf¥Û# _àB¿è{6Ôñgú‡·’‹?"IEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1215QÌçR:IDATH‰cø40ŒÊŽÊŽÊŽDY†Á(ûo€dÿ JÙƒRöÍdÐLöÀÉ6 JY†Á(û,×2ñßmßIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1214&Ë×ćIDATH‰ÅÔËmÄ à±â£K †TàVRI ƒmÉ© -¥K¹ A†—×Éüø²‡x¥e­Ïcv"R©^‘굦~Y:~¦­iBÚC'¨N„žÔÒ·„4Ô@“F9í];*¨¶©FêÎ i]‘F _—:¾þM$-à3Xâq’IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1213¸¯BgÑIDATH‰µÕMJÅ0à ëBÈÖ…P¯à^ȵļ‡W1ðbÄ…; ¸°bÌ8iš¾þLƒ(Ú÷È×üt2iþµÂñ…l•G£^7ˆ;Š£Ë* O&éy }ÆUIÝ]ÐkËúi@ñzö7UáD»ÕóðËá¨EåËßô²¬ÍﵓLµ¾4°šÛ&UÐPT_ÒpYÐO,é~ÇÕ3ífvßß÷ê4: Ìíô™½”~(ÐèaTP@rl蔳ô¨¢æ6v1´ÈJ©Ûœ’´©nöFÔÎ'ÕËYE­iÓôªµÒD=eÕH•¦¶RÚIFºÚQ[F1©ßÐögj¶ÔJh5«ôF¤ÊVl£"¯^AãAûI?Ó¸Š4n—Wfª}—ÚÇõÝ·˜*5ìUð*¶•²®B_Ѹ }O³ruT¿÷-©•Qq¹úIu«z¥uXGã&Ʒ뵡Ûë"VHÿ½Èú°Œ¤@I×MüQW…¸¾¢¤x¥ÌèU·+¥J[»-m)'8¥Í(Òù"A£C©áz•9{­˜]6W½­†Éœ4¥“^«OgêÎ pC³²PÍuv úñ›“µ™èäƒÆ)þD¿²ògäÏÁo_¦lŸ7@¿IEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1212ϨrñŸIDATH‰íÕ;N1àYŒä.>ÅÜ_…#P"!áE€+qäŽÖ¥‘,¿lÈÆ³Q!Ä‘œO~wÈGÎêŘh–_i\Õ*[.Žeã‚3Ñ]íû¡Â)åd1ùæ¨K¬¿ÃDumX*3º%ºlÿ\G4[mñÄÏÅ=p>'ÒÌ Û±ÊŒ{áb9ØÖ n¡säÏÓOø_ÿ’Žs³%Ø‘ƒÜwHNª×¬9‘á0OT› 9è k2-ßá¬íµé„–´½“ÎD-t]5ßi†õŒÑDÝ­9êLMƒ¤ Š ŸÐ{r“ ZÔôµú5­ó2úbO’y€F$e•ª&ÛŸFUŽU™ý(«âÉ¡-kÐ[µ¢bBEŠˆ:²Ç¶Ï¦Š}‰Š!¡IÈ:hA'èò¨öšuÓ0ŠšvjųªCB''݆|oÊJRÜmÕaE]Àí—œ‡æ¡ˆŠï84Qê4ߨZ˜uxG¦}I‰­$,5ÖšŸé$k¢]ájoXVåi[ÅŽ÷ËùŠ6µí†„¼š£«þ¿ù»ª}K{‰ŸO&6IEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1210!¦ÝLIDATH‰ÕÕËmÄ à±,…Üh ©$¤¤ :I+”2%pä@˜üØÎÆZR"EÚò‡Ìc` ú·ÐR&*§($=‚ÍãD/áïU?orV7¦=Íöh˜ž²>¶Ñ(Öî¸YœÐÒÕD WNñ¢Ù“-ä2¡Óµ&#´'—ÖŽr¿ªª‚m÷‰vÕ­FÒeá5~s¥L:¯i©júªòªÆFñçïØDÝÕ2Ò]‡*ñ[ÃHó¡ê׊õ®›¦ž'Š-Qâí_UK+R7Q?U™`y ¨¡#MZ°U­_Gªj(6¼Í4š´i'ƒP¶BÊD²ŒôÊW<‰µ\ø¹ ©Ræ X.R†ˈñŸ÷áäíÎâÊE¤ m±ûÓ°Ã0ËÆDï­¿Gús¨÷C½¾÷~œÕý§ô׃¨MãQ`"¿Ðæ9Sh䪤ÕqêdEÍ·¶‘SâÖäOZÒ ¥¬³ïmºêäo‘ÀbEȨèªRˆÕ/±ÅTe­‡ØÈ¢rrY55­hvE5"N;!+Îö¤VVÝ5îÈŠ3›½^‘’´Ú¦÷J’¶Pêe.Y}1щš-ôÊ&Y“ëê²jÅô:Y'†z¼~¡=uкTÄ6#jëjåXµ\ºFQ±Œìk_‘—5…ý서¡±+éÒÊŠ@ò‘fÚŽ•TÉãs9¯d ' ›¹b m±µ´•v0ÚLD7T?,wCHùcoÌ0WÚUÐrB_µ’æÉ¬(:E s­EGû×€?š÷ø[Å‚¦Ÿ¿‡Øü¯uvÖ}ãÅ¿ô-ý¾®üz¼®è`æ5ý5ÔÇ¡>‰ú*®8ÉIñùIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1204?Ðæ…CIDATH‰íÔ1NÅ0 `GAdAôè•#02 WnV¿‰cn‰&2D5¿û¶W'‰ûE©íØ!é,¦ß¥óŒê_ÿ”>ÑÅ5uñRh’b+yÉ4O"¯] ‰‚nS#ùHŸLåê:ê¨GÛ¨Ø#!/6nµulh¨N(N,µ­3Kq–.«Æ¹­Í]M¦"_biê[uªÑV)ž%QnhЉš†COQå´ å úpÝPšÄû†¢-UwÞT-—Ä»†–AõvokÑR‘vÆK@ªïª¸¨æ ×ë–¢ŒÐGKqòA"46ËÂÙЊ!rkOÒxª…h·*IÝf½"ò •î(Jat]=j¾Ð1¶ôFUÇÏÇiFÏi& ¡[*:ácÕ‡ÅÖuÃÔQ}3’qGöúº~|C“?f€Q¾©·IEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1203¡´s&—IDATH‰íÕ½NÃ0à³,á 3v@MƒÉ}”>BÇnñÆKð0–x‘C¼€%WbP}öÂ7´Š¾äüsà@c[ó@jëWÄ®.|OßøÇ·ôÒÕü¯UÏ]Å®úœS[éÒ›sCŸ Ï bC© ©©cÔ²*nçãA-mw¥^ezmKŠZ£Êa(Šà*I'= µBö.lœ++‚B`¤Ý`Õq  kU\,z•Ÿ5首ÞYV%êHo`3ì†d”¬—¹§tøl2/ò¸«fA9]RH™é¯§±^/k4¬i_ï3k°¬(Taæt«PARƒK¥êk.ñ¢®VZ‰.*uÝD+±Eók™‡iïèJó~¥”–& «b­aŒŸ¯Noj?ÒtãÖÍõNÒ¸´Ü‹÷ƒ Üч+U¿èqÀ#UÕÐÐgÒdÃÉHýÌŸ4HN&µfÅ=#ôFæ£C±jÞAÚ.Ðs¹AÔò¼&­{c oiø¡¥ÓHà:'0 ½ñmr¦§Ëø¿¥ø8Ê~޹IEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1202Ö³C°pIDATH‰íÔ¿JC1ð/ÌfVi|„ŽJ¯ÒGèØA¼§ô|¥ˆbœ\/tÉrLnÅ–æ´8Š4C ü ÿΗ€/4ÂU¯ú¿Õ]Ò¨dõ=‡Ž=zQᘠ]«oœPHgÀµºå•¡’‚m4+€M0zÅáÉ ÚØ*ûÖ–Ög”zZ9¿6I‹ÊUggUIT*ÚÓÒAÔ¼×ÌMl•«b ÜaÏUŸQÚÄ¢Ò¨®ãM¾Ÿj•½«ã—}MßÚIZJˆ‡R ê¥u9)?­Ê¢F=ª”«ª¦jÖ²ÖOg6YC©P)¯=ÖÝú.Ì£œ¬Tâmèä™Õ¨¾ß‰ªyè¢#þ4›¼rÑmøUÒdÓÔ Nó¦Õ GWu¢—u¬eÑ¢ ­Ç 3€¬‹Hÿ©£ò¬1×´µäµDNÓJR]xÚLT ÕmMÖYuØOÖŽJÏ|FÙÛ- ê;ô³µ¿õ?ÿZ¿û*Ÿº‚EIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1201Oº IDATH‰íÔ±mÄ0 @ .”"€Ú×&ÑJÙ@MdMð`©G1$¾ûDºoLÀvq0AS¤œhpê©§þKï®"Ñ(¦öJ-ÒJºBÝ4I–gP«”7þjƒ:*H U1B(ª¦#·Ï€¥)Š¢ýz`Ö”kîe\Ž™µÌÔjÏãgZ–âGäv(5?Þ…ÄÚ†W‘a«<Ò>L_¿Ý€žS¹ëðtFK7+&[ebíÌ$íò”ì/" ž2 y ´â¶Ïˆd¤lżÞ<ï<“ÖäD4u¤p3«;CcåM¹iÓÎkàe‚¢èU6´Á¡(õÇò6š’ì°üt¥®S¨™%väÛ·¥j¼Lªr¶Û­òIEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment12008½"œRIDATH‰íÔ1N!ày‘ÆH©…‘+XÚq- Æx%:K¯@g)%aœ}/ZȰµ1o³ÉnöÛea˜ðÎA8ëYÿ¯ö¸§5póÌﺖÀÅ0¿ªZäQêPµˆ±É¥Ìš ·Ô›v$)'Ö—R—“Cü&ô*6•pÒïyå ¹pвæA—©¦E9u-3òw“Vz³ÆŽûq.'çÿÕã^Ëé/ªüSíæ$EàžkÊ©¸g¾ñüÔ”b²µÐ.ëàÊûÌíW¬/Ü)/ªá¥yl4Ì:¸µµ½HÐÎßïÛdþ6´­›Öê¯õ«©ŸM½6õ7©vÝuס?ׂjLñˆIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1194ìTã•6IDATH‰íÔ±NÄ0 P‡ aëÊ-ä7Øò+ý ¤f»Ï"À'pŸÄ¤Èƾ‹¸–&ÑQ„ÄpUÚ ¯‰×*Pçò°Mqú3ýEVW½ê¥úÜÓlOsrD¯ Mr¬ÃqÔ48BCINúqÖ8І"OßãN\Ã/Ù¥:yº¢Ê3Å£r,Yý(±gk§¹ª´Ô¯ ÈΨ²d¶RI6Ô¨9³uù¼iÈUGyo멤8…µú‹øpÅíªòJ5ÒíRßæ ñn©ïEãÀ+áðÐTŽëqã@}å*Båë -u¢ñ Q Ölz*í·YQwt:´µÑÏ»4¶K€×¯ûY”×ÜÃh+]WÔò¨ôÕY]­ëŠz˜jꟸ-ÀEÕŽ•+QÔmåø–èå?ü¬ŸñïP3BºûûIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1193r0v6 IDATH‰ÝÕÍMÃ0ð¥ª/UÝY ÂH€ ‰+t#Öà`Ä>úüç9NÚR?§Nð.•ò«¿8D×£öEz xH¤ÿÒàè[ +µ»¼+’: è—ãe~:Pƒc¸^[ªßЊzŠQ?Æ'榥0’ú£v‚ºY­ôØãZ9ˆü‚z44œTQÿ® ðÉåïdåzgÁV¹Š[Ž_í2í÷…µhš¥3åE±)Ž*TŸÔŽ}UøÕí£ÊkÍ–öUŸéô\ÓÐ]eëlÏ6¦ÂÃM;Iý˜/+••®h¿¨†ê²vvY7­Éò=©F^«¤:£û¼ p³n…ÍÚö뢂nh-tR>LÔ¢ò®JÊÝ×FȈuˆsÅ[¢¼VIÇ‘“+É¢ºª 0÷›¶¬¼¯Æ—•«,+gäùš’ïÌjy®$Mï ϳ¨xF¬"÷OYAÃíü©ª°IhI¨$ÂjI‘´rÂÊñÄÆ³î¤ÉÞÇ…Z:7bÆ”†kE<Ñ8U#œW“žE¦zIÃ/‡EÅÐou&{Ra@ê.IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment11927F ÓIDATH‰ÝÕ;Ž!àB„À’¹‚Cg\ž…ƒ•ºVöZXø½Ñ¦„ˆÚŸîžžÙáa9³\š€éOMó( 1¤ÌJŸD؉d#[0IQDN^„TÀÃBD6Ý4Q ‰~áAÞÚ§¾íZãíлw/ñÔú=kÉ-ZÐþyS6 NíïI¨ýü¾õ /r•¬Wš|£åüîÚÑ£Q»V2P_GçºÏT†*ìDÓw™h ;Ó´Ìô2íÙNõ£úŸ5Ú™²iÖ5ÙºZœDZ)¾Ñ»è›.õ4,¶æPüŒ|Tö ÙÅ_ìê¹Q¤{„R2Á¯†M‹Êš4‹.ÐøAkÆA3YLWõ4bÑA1Ÿö»<æ‹’ƒ#ÕÓE’…2¹ÐêzªçÎJ^õ›ôW2nŠ‚³ŒÕ4Ùb¶bÕîﮘï’;¹q(^¬Õ°«¢ÔåI¢Ÿ)f>Ð 2RTNyj²,úAý©"ÏXת?4ÛÒßýª*¹‰jdHg÷¯]ì*.”×¢W꜔]C1a u%Ÿ ÷£Â5‡SÖW‡Cï¸þZÅÍCoq`¸sº1ÒPTîÔ è×z‡*y­[}"ïËQÅÛïÞÿý«[ã!þQ}ÇdÛò ØÁáIEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1190ë9'Œ IDATH‰íÔ±m!пYd¦:ñ¶âܜܒ·A „ˆïÙ»ÄöHÖ%nÒ'$f渨„‡>ô¡Ò}ª•žCÈlh‰lž ‘gM‘ų`ïp'Mˆ ž¡ÙZU|…Ìo®`›èغ+ÏS•.9œ•ÚJö]†êÅ쨺å}®DŠ3uîQ~ÚîÑqUÎTÖ:lÕ©nÝÔ¡;/aàu©˜¨†*p¢ÇUÓD-ø‘›_ZýJ;WJÊJ‡\–šæ*Ý™ŠC´Û¯Ú|ŽgMO%äpV‘ÎéúŠ ÅM÷"3Ý5Íu³t»©~–JÕƒYسïÔË4VÇaè·Z+ÿ…~ôµb¼0B­©IEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1189‹þ®i}IDATH‰íÔ=NÃ0ð¿„DŽà+02TòU8#’ÃÔ‘#p,1tä –z–0y<;I7N*!†fôO¶Þg@'¾-u{RåúzFTýSí ‘¢SÕ ©oÉCQ¨¨çcI-A/Õ*ò’d„\¨ƒJÇ€ hjÊÇ=ÐøŠÚQCã VîÆ& {…Uí…ÕK¥UX;3U¤ÌˆãÍÚ-Õ¥|}V»®`Õu"¢£Šò+žN*’ªº¦J¬iꊚ:ØÖu£GÕsýõ>©Åu©nˆßÞ wÕÍUjrTÀ j:d”¾™zSä{¤E­„ÇòÈò¥c MªtVWQ~û¹ nxù}¦)j#³ú¤ßòíX)ÏFÈw%Õuˆy7j7i¤:(Í´õ Á›Ï…î¡rF½ë^h‘vA𦨚"ž«v5}äóäX½]Ñ–gcʧÜ߬¼Æû©zņÂóËŽ;Ðë…½„۴dž×þuò0†ÿâû‹š¥þZ£!>?ƒIEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1188üùžÿlIDATH‰íÓ=N!ð?™ #0™kXç*Ár ØÊcìQ¤ó$¶”dž–Õ™¶1Æh¤!Ã/Ìû@g†ÁÐÃôùÛ²ú×_«j±·%Ñ+‘ËaÚhˆö4CQ+`O’ì@A¯5°:ä ¨âzÞÄËbô6gV^æíˆÀÔQ;" fÜj(ªÍN¹JçW°Ú‡ÑWJ^’d´½ïèÌJ¬Aõ4ïíêdÎéˆ{ÕU{/ëŠN ø¡«"4:I®è§PÔcàS •Ng5ïUGM'Øø³¢˜ââ±™UV®hÔÕ žâ&iéäS¥ší¤¢RŽë¬ê0¹Œ?U,õ°ýó‡Zݪè¤f¥é•¬² Z+è"ÕkoÝËJ¹ýwÜB¾“hÜIÖ[@šK8Y¿2ÖkV á§P”ï•o¾ß¬œzhÝrœ•ŒP3DCÓP\0™¡£Do¹k=]ÓwÉ× 53"«îIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1187lFƒn8IDATH‰íÔAN!ÐOz #7+xñf¸õP^ƒ‰‰.eÙ‰jŠéVgì‚Yiz!Ëÿ’¦Š¢uVÀ¿þ®~l²ª-+þN£/7°+-=q`GÀ,ÙwÍ…£{š EÍ†Š¢ •½RŽ‚¢$AG肦æY£Ã°o†©|¾:Zk„K®£>V-þ¤*CñS}MÜqGÉдhðÒiTµœj©æ“GS©–Æ:´Ž**CKÓYtKy¸4 šô¢¾­<\—¨å VÔýâ~mjj¸€VTÞ6˜ŽºØSŸt4ëY³FK_»úÂjzšÚú¬¨†ð^­¡ÀÀ÷ÊI:âP±©×¬<#/iÁÕ¬|šk%\²Ž(H«NU½ ‰¿<ÿŠ;4[ðœéh¼±Ïôcmóå?£{ºS3¤œp6uIEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1186A³økIDATH‰ÝÕKnà àŸRÕ]TòªpŽfz3ïºìBNP¤nXP¦®¥Ê Tj‘Š”å“y 3$¶¨ˆÂ ôÆ2ó’fýša»ªÞ–Òs‚&EAÓ@£i*_¼4/kýñòŽ>ê÷'ɺ·0TqU·Òóu#Ÿš3ÐxÕ¼ÿF“ å?C‰{«iÕ[Š3y.èVWK~âô4ªÑ Cn"`ŽÇ eõ0:“¤ÆoÊÙ½0+4?§}WC_=ª‚Z[Íߪƒr³¼ª´is‹°†ºßªê¥ÑĺÖy¡ÚcÅ ázú¡¥Ù¡ÎåXÝ¡sFU¤mš€'ÑØ”Cö8ÔvÑ¿*íó'.’Ú=Ö’s®§*ÔëÔU?…²cÛWêëÌo ¡–‘¥HZ STî$¨cÕQEµÞ·'Xª;à™ÓFª£Ò"O­4’”ϩ֯po콙˩§6 ù¼· ¯oéªÐn¦_‡sðm~&ðvIEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1185‚HâBJIDATH‰ÝÓ»M1àåÀ.aA2¥Pb®J V" E¤&:ÆÃxïgÏ$—ŽVþäÑì<@ýóHùD½õ²>Ñ%ÉJô©*ý};CŸÏxûªjœTuš&]GMÏ¿×QÓD3¦¦Õ~XÇÏZÝÍž€±«¾¬ŠFóÀùl:oùjO6ö´ðÕÌê’ mÎ…¯­ ‘õ¾­FÕm¨ê:Zsæÿ•´ì”s–5Uq5†IóZI/+÷È ZVmû»Sî ïua¯Üýp­¨ ¹íïwd;LbVƤÙÀX ‚òl˜E3ÿ¬¤Ñ]U¹Ž¢Žu85…b5¢ËU©«c² (’ò–]à¦ÛÁp\‡Îlظã©ã¯Fù«¦n¯óºÆ]5aâí<œºtrºYÆS:Òþù¥úNˆBQ* bIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1184õOÒÔ@IDATH‰íÕ;NÄ0à?rá±-/‚ä‹!Ùœ`ÀQvЀ+D¢¡Ãˆ‚-¢ cƒ–Dñ ¢ 7‘üÅ“¿6ZÆ¿þu½Óqvòx1õ^\•T=˜cù[=šúlªÖ~®oªR\V°ÒW™;ß×Ö=ÁIßVgÑ[>a`ÆV'ÇóÀèíí•JH˜Ò¼[?(Q)æ4©šECeôi«O¢YÕGÑò¹tT*bÉ*Qê(j¤4ê$¶ª£wÕ7•™Ìª–Z³¹®ES§ê̺ž€oéµ®²7®vªŽr ‘•½KEs$ îé¾Ê Y*yµËB×hªVQSghàM)Žçb;(vµÍ4úÜU œä”:*שÏÊ¢^ž²¦íì«:}ÍqG9‡žÖküX¯Û9ç=xÓ~ë¿ÌÔwF\f@)†XIEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1183k+GwrIDATH‰íÔ1NÄ0ÐoŒ6ˆ½¹ÂÒm…9@sŽÀU\ q Út)dø±WM&n¶Aˆ¤ˆvŸìÌŒgÉ\\?²ú’Õ×#4Õ¿­"ïüUêjEî¥G¡jkD -ŒÔv®ÁpaÕü£œê°¨j`U{jî€õT›¨BÝbYÒÔ_bØ%uÔçG§)÷†ñ«ò@»sÒÚ„“Còí’š3­‡jʰ¡Ö+§êQ¿3ÞkÕ¯°µ~AY«ÂãɩʈwçÀMµ¤’Ó7]ë¤Ó:ÿ¨c%5íâÎkåŒö꣎x¦~Q‘´T•GŒbÈjªmÒk®=Õ³¨ÝÐÑgšÚ¸vè÷¼Ö‹QQ¢ûŒ8+¦Qt8‚*ö¤¢`ª(yÃ*;¬N©ASö“õqN4MËp«L(T&ƒV™nvßk[ØNù20#†Ëó)xŠn¦ñ*9„2.óüKF-9×þ*§ò™Uùýú„kÝào€¬IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1182,wá IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1181…%&[—IDATH‰íÕ½NÃ0ð¿ ’Ù²v@Ê+0v€šÇb¨j3uä•ü&Xêà ,wiH±#è œTÕí¯µã;ÊÝá|ÓÞr³q†(kòÚágÊoWu^Ô³Ò3ãGmàln©¦‡õI$FåNŒhoä[:F\Ò»0ÔÑC2ä(Lš6Gm¹þøÈ¯{ŠzÔ¼ø7†>â@´ŸÚY´ËJî'ôðKãþëwt¿¨Jr ¦IÉ¥hKšÐ§B†.iÏê1¼ÑSQùGðº¤r¼9ó$} ãŠrÖæ«¹r¶KÏÎ`‹‚rò9EÎr•(h¯eÊÎúuEóôº¨Í¨6ÖÕxÛ/¨³}[S¯±¤¼"u ÃŒdNÐFVR4–ÿ›ŽOuš6ü l]QÑ šùd˜šªŒÝ¢ò>„õ]]UEý¤&t3•LéÕ°ÿå­ËŸª¨+ð|lM9:˜÷Ën®Ú]âeA >× VÏwìtK}ÒØc=\˜º¤\pßâ­—â0SÎÿíM‚ (¬äR:lU‰^§ÆŸ¨Ïs}_ ö»Úg_IEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1180ò"ÍÔIDATH‰íÕ1 à¿aÀIVc/bÂàµLÊ z%àìæÊÈÐð|T‡–R;“²<’/ïñ˜~Prœ¤2ºÛIŒåU°6¬‡TïD‚e•9Šnª±8ÂçÊætTÜv–”KXVŠ2êßx93מF$E&Uj{}#E^óÏç:£KJ´é¦›núßú(j»B×lõ†¦¤ÐuEí >7¯3*äP9ÿdNó¨ëÌdÎ1Ä»dßú8ó[õJ5Fã²’kJšžŸé „hÒK!·nIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1176œÙ¯7 IDATH‰¥ÕÁŠÔ@àjŽ‚< B|„½ b|_eÄ´ìa/ ¾û&ØÃ}aúæÑA{ØL—w²3J§]°/™Î7U©T§âŸ9üÒ´Ô]QÕHmJêëTŸËØTû¡í6Q÷BèM‚<4BÏS}V—Ôm„~Mµ—º½»jYU}ÙK¦v®¾þØâÒûI;¡Wm…bã™oRÙ˜÷PËŽΈ̼38Í}g‰Z([R¾Ój’5G%šTv2ÑZ“ìÆ­öDMÕºb¨Œ~^Ñ¡ ú ª—ºµ-Ú3ëà'3½„z8(ætJ³ÌPÖ*´ÿCзÇfu˜õ ñ£¾;6KÓ9ûƒž1ŠêREðdG)P”FµKõI8º ¡vŒôiÁCs«÷0*µžÔm0˜ªJµ¶ó^ÅßA}T“Y…nR›SßÙx¿lšœ¶¦ŠÚ7}.ÖMÚötº¸.Oª¥îfŠo¦N¨Z%oSÝ5,“­ìJU!ÜV.Õñm4T¹ôiÿqÔ!¯^ÆÀ8§XÕæ5PGf¡èîcì°!$îÁ?ပ¹OT !ùr‡Žª°ðTfv÷?×¥Q©Q9óF ·ÔT£ö‹·†GújP|m’oømøÊ®kûû¬ Ì×®¤ì^Õ•ÿC¿õÍš†¯–ïJšŽ¹þ(ªKÝçt/ÿu‡Ì|ÈŹÞSIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1174r×Î IDATH‰íÔ»mÄ0 P:*Trà´B6¸lfRd-uYC#¨TA¡|¾| ÒÒ¤±\’I™4ÈÎZàÔSOý“~¸Ú&‘7O3hx³õ]# §Q9‰ÄUÙPBá àhEÉ]'¡Q ÁÕ H]_ÂZ”­Aß]Mí'G}j°T–À‘£”Q ’P`´UjÒzi-ÌѤºX·ÑU¿Q² ¾Ö«­iS~òµÌw mwͶn{³´‹Ÿó¾.R/àêM ÀÕÓ©kô5[Ú°·*©yò—ÖgmW…ŠÚš9JéHïSRÛøÖbdu Úª»fCuö7µö Í êÍó:Ês†>d¿ÖÏN‰‚¾Žëßô D€ÛˆEÁIEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1173ì³[¸æIDATH‰ÍÕ1ŽÜ Ðo¹pé`нĦ I‘#¤L±–r€½JÊ”H[¤Ü+M¤)‡ÕËj?ÿÛ;x§Š4‚'Ìç@*¢}÷ñ^jœ`Q§œò¤P*UV9íÇéî8VÔð4bÂçRU Y_K¦­ÓÒ3N¦ª+‡>a[X‰™tRòH³þÌ4±jŒ=bœ³Q× Ù´ z¨h?ëˆnÙ…ŠzÖ~G= -u=UTa€QºJåtÙyì]®ƒ(ý$#T™Þ²Ù€$+ ê¢ 2•løL#/L"U‹ê‹eÁDÐq(5’N¬&ôó~×ù¼ †@ÚÍ ™âkÇ ±TÊilé¥pv¶ÊÏ^Ôs;̇뢔ÂÄaæ¶;%‰´6n;¸.{^çÙ®'$WÚTàþàj*ÍA2[W Jt¨j]L·cU—<$UUºàÛ06Cñ÷®Êå;ÕYÓCCÏ|écãÍëû÷´UÚÕ`þ®fl(W‡ÔгèUW)GovôäQQùvÀǶÂý<{U§§¦F:Oå×l7€Jå—p)¿è†´Õ}pz=o¥zê¦Þ|ÚŒÜjøzeÚš¾¼ßÑ×ÏT]ݾš=]ÿÂþ¾-ÿ©þÙþ:‚W¿òIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1172›´k.¶IDATH‰ÍÕ=nà àg1°• TòQÜ£ô;D…6C–J=R,uèØ#”*CÇy(R¯@ ›Ÿþ-E>ï=0\6ÙM}ÅšUŪ¾Wõ­¢Cü'ÑÝ®CUwUýª†ÿ~æ«¶+ë#*ZTØCIw¿DmèênrjZÄ'¯+€.QÍ×^¯sê#%®®à¢MTRT£*¶T !èåYªú¨·$Ó‰* ~øÚ€¤±¶Ý¨ ®íRY¤n«a›P §÷NM#h•¡S¾Ö+,R;ÓM%“Q5fê ªÚ>ªäfLxTzÀž§»@|ì(0³  Ê1s6|·„Î’T¥ëózÞ™Q·³±Aû®Õ™3éµñêRJUÊ7ÓœŽ%/*¬°Ç²ºÎSù²ÚT• )«=©M2raH(ÇK4v;é^дMUÁï¾›YåT š¼ ^%ð’öÐö@ j\Ÿ8i›Q Є¨:,iƒú„³·Û+™N\ªÂ%ʲê™ 8kq¾.£«Î©;oÓåzlÏó{r¡w0¿EùbÙÜí½­ê¾ªS˜_|5>ݳ:1f—nIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1168bz³q:IDATH‰íÔ=N!ðÿ†‚N<€‘+XZläJ–Fð^‰›Hâ¶\#œy¾gô1 ÆF[,ìþ’ácPOÀïÖ§9«ýz'èýö½šš&Au­•)Â7ZT­·Û¯×hVµPð€mŠ{¸Ì¡fR€ÌjÑ]5f½ ªYfÓWg“­¤yªÉ¥kI)\a}ÌZPþÅJ ïjômÖË‘wŠ¥«—& {µÓU¤}Þ+H]_ýX¥ü¾ª ýqm°ƒ9»x ˆûÌê©ê뉊#Õë4P“‡Zz?R Ô”ªîx¤ñ¬?çdã¹Îh”OájWªÝÝ9Z42R£+ÀÉ¡& YxQ•1IUGz.HÀ j8$eþݵŸ,E°5©V/àÞÞbëí<_ÖÍ7ôóã>¢:÷žŸ9IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1165ËÏÌâIDATH‰½Ô=n!ð7ɸ°B›b”)r «á*9‚`eæ9B®#`¥H™+ m±ep‡%ÄËŸùòìò‘.ËhzðàÄh/ö3çÚDñWû¦¦Ïз‚¾Bg™Ì©#Äê‘M“Su4²¦ñ%ÑsT%'R·YEE\ RDòVâ¾ âVyU¡³æy4¹‘£mo†‚òµÐ>¯l”Z»^h»h9%Ê!§~V}ª*‰¢”êúõ¸ÜDjJ:EE! ÚÒ'J뻩Ô]n'WíM'¦´ «*s/mªn×Þ¥Õßõ¡ªTœ¤¤r,éEC‹±ÝcÞŒÚMI¦hž×ôš¤KÔCGrêP\a#K*Q{‡{b% Ð_%½Ã£5ò7—ÕûyÏ{u¶Ë”Ñzç²6Û_tdµcèw¥AB}G¾¬®{–‘¯cn¯ôØÂI "Åœ}ÿ=WõRÖÐïŸ]ŽRQ¹¦õ‘]UmUTõcUYÓ ÇŠr5–ÿT•ÿ‡þoƒÔ¿¾œ(IEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1164kÌÿZIDATH‰ÕÔ±NÃ0à?Š„á~ 6ó&<Š=!Þ*fêØW0 °º‚!QŽ»hã8F0•SZUýê»K|.¨G¥¯¿X‹,õ|é¼z&C±Îªƒ¥7Cá⻟Cl=þ(d×VÀHyà¸öT·;}‚j¯©›¯õ°Ï0½Êk`:LN‰ßéšhyõ&êΕŸºI•«R÷¥aû©6§±K×^7¿t;ÉY¡(ä» 7Ƭò¸—ÔA^s@7*òÊ=»ÆëÊÑ‚z®êûE5áJe´¯vÏT&³¨=mruY! •ëYÔŠ·ÔTqé³jEµhÝ:hÕòP„QÑœ¤ZËæDDq>×G'z¹ à©ó|Z,f™+þÀóÌÝ6|0.ÍD[ÙØº«ø,)Zè‰*§*þÚòÔ rÏõ¬`%9Æ!ÑUP±ÈÔN•ú†GŽP:$u9‚¤U£îcÿ_wÇ;aÖM•Íâ@×E]ý íŸõ¥˜9ÿAß‹Z5-3UWÔД´/j:‰®‹Zìêhô˜¢-9'ËÓIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1163õ¨jù¾IDATH‰íÕËM$1à²,á Z'€h‘´M(„Áº7‚ aBÁD°)´DFs1ÂrñÛÝÍ<\žÝ œ¶¤9Øßxüªò—ˆDÓY>»b¤­˜Ç ÚÅ5ýýÐc“”ï6uN n²åØÿð¢ƒ#›iKô“ø3¦Y9*Þ¢ù:›úE׿¨x/â¬ýÒ|wºNOæ@1ñ€õܯ£ŸŽY±§‡áͬƒ¨9 M„¶í+ô÷)M¸¨rFGú‚OÏ[ ]­ÏÔ¡ö‚¢…n«kÍ-tOÔ{ª·»2ˆ¬¤H8t"—DÅ8¦[KdZc•ÿ!©+štV]iD†RM5ï×Aã%jBÔ©–=¶4`3”¨Vµª:¡šŦæ5Õçâ ªVíOkòÂiE}uA8çEµ·^¸ÁEM0Rn,jƒ uÿ é\žwVfyÍ®÷Eåý®*ŸÕß4Ø 7,ßQQœc­iV“µþåœ.cQ-è˜+¥Ú_HŠú@%rÐj¿©¨Â—nTªÎjV‚>ªÐTMRý4ú»Jñ’çE1¸òæW¯Y~oR~XI—(éÜ~E7'•¿YßôÙ„Ác¸ƒa’IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1162‚¯Zo!IDATH‰íÓ1n! Ð?¢  푸BÊ-¢Ì•r€•p—+¥$7á¡$ÇLíJØS§XÊyúŒ¼¯÷ÄÊ"h_ïz×»êÚ"w¯è'ósq\æmN(=2VU)1QÓŽu‚¦„µ/¶6ày¡©è¡utvÕÐT}~òMU E×eh‰õÕχ5´íÕéº eK)ŸbuMíw(\³”DÑ}µ³H![Jr^|¬mê…,•’6í^ù]c}±µ„æŽtþU«¯SÉ»n{Ö—ÕÌ®Åç©¡ 4á>Ì ýi޶ÒÐǹ]Ñ7Ér ù¤fyhõt6ôIÞÑEÕm•9ÉœmhÀr¬”Н:Ïç÷¿ôàÆœ¢©ügýrÿ_ˆù<ÊIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1160l¡;CIDATH‰cø~€40`Ê~¨!ÚÈ~ÿ`SöÇÿï?pËþ*Ë~Æ& R¶÷!Y Cb,.{Àd±ûˆYY²Í4“=>(ý;Te!€¹¹áÿ0‹$üˆ?üƒËŽ‚á þ?`°ÿÀÀþÌcüUü©g‡[–v)öÍL•¥¿,‚ÚR¾‰·)IEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1159>PÐ$wIDATH‰íÔ;NÄ0àßÌj¡@¤¥@ä œ_…#pƒ¸£Ü+Y¢à–¶ Ä%ŒÍä±h•±-„´–R$_33F.Ž=_»lP×\Õ禾55ÿTãÐÒ O¥þdêÚQ -­Žý~655ôå«D¥)Ï Ú+©‘ŸÞb •t:½ÖÄjfåék E¯ø…º^Â׿|£<­5Ïê; Rã3«§¨JX»\Ó<ëy‚TÿUKÇuw®¥ÔTUÔq“xGm}¤ª>×kê€ å¥úo*ª2-í즤aÖÞSµ5X#¯`ªsÇõíVæ7¨é_ žÂ½ÐWÖÄûÕŽ²¬=— «é=I}_´sDQÔ¤?(Ç$+–SÇ ¨ ÷¼èÖ[n/Óa'úÈŽ Å37….c‡™^ê×jfµS‡ê•~,s9ûÛ‚ÎÁÁRG1ó‘ 7¹-œH·•8ÞÐK]†ÕÇwá|.è¿ÏŒ’äAIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1158IWà²IIDATH‰íÕ;NÄ0à?J‘SR Â(·XÉWâgOF×0Ú‚6Ý­ñ0¶7ËÃcˆb§p‘OžÄ™_Ã…¡GKN½Ñ€\ÍfK)¾kCsž(WC-‘J™^Ê#)ÍZ° ÏâóE+xÒ“þ*¢}Qǎ襨`ÝpEYIgÖ¡ÞLA¹x&VüÔ× >é:ÓíAV‚º˜YÖ]\ÑÙo2å°Ù¨·’N¿ÛXý6Ô¬&AªzœÛ êQW52{ÎŒ®ª+ëÜUõ¾°“Ió<êp&œQPçjœWÔÄî[ÐÇØKºß%­H…¤Š6d j£ÂüB‚zhQí¢âŠø`ý TдýZÜ+ÖK@᪢ç½ß´äJI…Ûr éÖ¹õAå[G3_¨vJ-@Œp™ûZ¯ãŸù¿ê±Ÿú½ ÞɵØIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1157Ùèý#¡IDATH‰íÕ1NÃ0ÐÉ H¾fceDbÈ•*âªCÇÞŽ‚à$c-j$+Ÿ7iœÚ1cœ*Júäïoç;›b ºvµ¿‚@5×ý’·pÃÕ•À:ÒÃ÷2§¶Êh×N¥î3«*J~NŸ²z!p^[(3ª»À³úîϳãþëi´Dü˜U+»z Š’Im96†Y±j‰†ã«aÎ"5Ï\“m¢o ÒQ_]g P3(½;âœ-ø¬4ýÕäqΖãé÷k]öºúCWǺÅ{]Óõýtƒ‰•ÜzUbFé¾çÛGV´oS:ô¾Ò3RÀ_ê×JÑjŽíX—Že”µ9Ý´EFçtíÒZ2¯j|-¼.ƒØ *UÐn •ûÇÒé›åí4/ÒúÑ_én%»µfLãšP‹cuU¯»½º‰îÛNËo\;ÖÊ@ß…F +ôB8ኸ¯®Á2})÷Ñ#5ðÀ”àvF %¨rjª‰ cV6Ø¿²¦¯Å ?ÁþõÉ”–Åž|›=gO¯¿Ôw@‘J‰IEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment11557æœ:IDATH‰íÕANÃ0ÐÉ»šø  Â×ꢪ-q®dV\#;¶fE$,cW)¨h7•À‹(ÎÓXãL&~3t.×xúØÐrx¼O?uÿšæ«Ìê_ÏÕg¢Ñ½Ó£¤U ösß|ÕÜóÜMÀ=7ÛBSOEA3zžºxަ£î„¬f5OI''­@ÑRÒÂ~=鶴u¿ß©»@×W†MPmU hkϺxGíR³¾oú Ö—u´Ø©Èi½É=©V¬ ƒ)·²Ò8ئ¾Ö·ÕR¢h.ÐÍJVüÝé¦;r:QAÞ=”aëM€šdŬÒÊŽõ®VáT»Òƒaƒ­PA>G7[±Ë P•שּׁ|¸v$|WÓ!vª­HR¬/šB/©ö·Ü¥Ü*n¡ÙÐ鸊¿hÙý\?¸Té‹Á¨éIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1152©‚ ¬PIDATH‰íÕ=N!ðÿf‹­” ¹Â+-L¸’å«„ÄÂcxé,½/@J Â8ûáÓ};PhŒ1q²ß¿ÀÃ. 1Έv(Ѝ˜ñúñè@ÇÈݨsttªôôqy·ÕMü5UMm•}xnêwZõU-mµ?õÞ# ²x¡+ª§X#*&´¤ \+n%©›t?xQ1«ŠC]£J¢ºŽÂeU5°ZŠƒ¬Ü£ª¾6õþ¨B«Ê°h’4Ï ÊRÓ¢º˜PW>Í#™­ üïôzjˆT–oœ©Ôì9¿ Õ¬«y¶RëLéªÊ¥³0'g=PÐQÕ”Ó¨ƒnª©kÔžZê>/,'=Šº[Öš­:Ãó®¥=õ5ÕþºÏ ½êêv‚fN;|î7‚&& ãüƺ†I7³nÑ8nUMè£ðg`Õ¬ª¬’ÿÞfÇÃà-ÑV«ñkú®QSZÿ’€?IEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1150GŒh€£IDATH‰íÏÁ Ã0 Ðo\Ð-Á£x4»›yàÞ V•JÒ8é©ôⓈ/È;V$ÆXíº‰øÐìùF-5‹º/:\ihš•wZU£jv4‘Îy§€døâ’·¬ÊØj(Á‡`Ë(RZÊzâžÜ¡ÕªŒ.ýA#(ÃTXI qóWqÔr¡¡KJ6r¦sèR¥ë6K}þ©U×®]»vý½¾ ú}dÆ5®IEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1146·ôüôcIDATH‰íÕ½N!ð?’Hç¶Æõ1®ãÅ.•÷Z$¾¾‰…„qØsOoùh,¼BŠMv>† šÅ¿^ƒš_èaÀI4u0ì_k4#õº©XÔCSž{±Ž5MMPÜGOCQgZêaVµ¦ÒPt*š¡+åˆE­I˜kuü™´ P+Ù™28?Ùê™üL dwCÝw5²¦–Rѹ«$©£š5+:öÔ‰üs¶gå§Óde(X=ͬ8×äû·Š¢éF°Î_ú¶Ñx[t=^/ ‹®YlÔßÉ€ØØß“>Ê »êdP±^çÌjµkcWE˜zjXŸ†Š†æR‰Ö¸¶&pÀ¤²RuάS¹îÛªJxÂNÕ«qRE‘WªVÎJ‚÷½œœ0m•ž¡x:‘dCÉsV0ÀA¸¹Ör9¾€hUw —´„›¦Òkù \ÞŒ—o\Ý­{nAô²]©~õ Ló6€wÔIEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1145.ý­NLIDATH‰íÕKN!à"½`É Ä#¸t1I{o/†7áìdA(«èÌŒÚãvbdѯ¯U¢¿Ý–"_Ér}¥'yæI‹ÿzWÚ×™Ö©&?ÑB¢v¦}ªRNÜÖµ©~ îªMÕÉ_P9nš±¦Ð7­ä÷šgÑ´Z §2P«(¨IÔÿ¢BFãŠ/Ó¹Ú#­¢x¾ª…Â;Ò84Ïõå@WÕ”5{>G `¯4ÔįEüCûÐëÚU4¨ZUw Õ™¬$Ì;æ‚,Õü`ضC•Ñõ½vUÉ­„Þ÷Ù¿ªCªåU-оiÓÙi“Ï2¦Ü=T7µûžÛØøµ&öíXàfÊ‚bÖf8‰¢µŠ6ŠF* ZgYŒ¡Ï ªvåM ȯ¶7y?Êþ¥÷¡Ê¹p'Tu|û&š Oôòœ P?‡›‚~õ^…øIEND®B`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1144YúØIDATH‰ÝÕÁNÃ0 PWA*D®œÖßà€È> ©á öHüŠÿd™öÛ-‡(ÆN‡(mÄi"‡ué›f@ˆ›‰`wL†¯æ¡EÇÚ‹Žäg ÝNtˆòýî ¸؃Üè½c¤c’(;8¢ßphE/‰RWôp”O‰öT"-a¤Yã £h”'èLKÕ›ßÔCSxºoªmª»Êý'=ëÊEê*A¦®ï\LDÙ”ËR³¼íIýZ“åŠäKU3 ¿(¬4Íu\jäíC:ÑpUO†Ó¬4±’lL¾h¬hœ Oì·š&õ¦ ¯(ü¤¸Õ4‹VÞÑEo ½ªššï Ôf7¢Zìicr¯Æ†g“úÔÅÞkŠŸNÓ²ý·UÍ\Ž õŒò§ÞNÇ×BË2ç£e Òbg c­#ÅŽjZ h¤ jà¬U}ìÈ—z¨›ø?ð ¿puµrìµµÌV2ןYy¹~k³‹?9E«íõZ÷,¤ø«JIEND®B`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1143Çž{ÄIDATH‰­ÕKNÃ0Ð1•«æä,¹ Ç@)®º`É‘pÅApÕE·Fl\5²™±4‰?Hˆ,Úf^üÉd¦«;h­íZ vqp¨Ì ¿ à'‹uk²í’œî½V D=YuZ49µ¿ªiKÚUUEzžjWœ¹¨éƒÃ¹¨º¬ÉGmÿ¤§âÌŠ´O¿z9ÝUÎu_{˜ë"kÅ<¿µþoý~43=øÊÜaO-”Úaçkoc%ts}·¶Â©€†bítfœORŸ3ŒÕ‘r†ƒZº Š5AíDMÐõiµT+ƒöIU¨Õ°H†PUZ)$‚B¤Ö«Ëò*ÀnŠŠ‹9¥€Žw0 ²{Fí!ΆWL2&%Êó +Ò:£}•Q Õe­ÁêÔ®œª5e#wGò 2dò«+›œ  E}ð­KÚX_îsí¼âÔ)mýºX`^ÑX Œ:{‚n]¼è¾ ^˜‰÷|æ &9©7ÐI×·,®+ê-¼NÀTJW^kÚu¬Œ{å“'¨êQÅ —º’0SìR9© ÏîR\WS1¿¹F½è£SþÐ 77¾åIUò´²Ÿy5]Î~}KþZÞÙ&Ì IEND®B`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1138 G4kIDATH‰ÝÕANÃ0б²È2@ø Uä*ƒ"z€^)œ€+Xê‚­%Õõð´`ƨH‰‘µ~NlÏ8 ÑÉ£¦ÖO¿øCûGÃÜ3/‰jùžÝ ‘»@ûe¸‘F gçøwgì'Z_±ÉžO•IEND®B`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1130ÖÏOIDATH‰íÔ1NÅ0 à?D"áO Ç`x¨×b@¯A\,ˆk„DbÉÕ¸ícx“…åYúɮըuÂãªWÝ¢¨ž&45YŠ˜Zê5Œ¢–‰ X]­ß\všò‚~…±²­5ÐŒ1£Ê¦VÏͺ¬ý¨K­‹&]t¥~S›=«†F“#kZ*7µ°*YÿÝà2ò ©Vb® ÉꥧtЄZêeÝr#zpì¨ÿ“†qSþ®oë]S-wu«ÊãJ©«ùF5ºZUËêV-]ÑÎhÕb‹öM͆U˜³ò¸úS[³ÇzžW5‹Æ{aSΚt„ |i©k„ŒŽ—÷˜,ià×[„›!ÏLüp«ÄM='~¤¬a—x¡¼ü{üÕì®NŽ>›ºÔ|kè}}íê{WCWcWsW¥ø7ý]D³AoIEND®B`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1129qFãjIDATH‰íÕ1VÄ à?¦ “,aK«åJ–V 6z "¥W ³¥[|Ç8×·.K-vª$_††I@_‘4i2"j>xÔ|Í‚Nc?'L9BG鉨ÑÑï€ZÓgZSºèEÿ¿Vf鎾Q‚Ê­&Î cí®3ŠÒL"`nÕ+ 39ÌS£ 2s’Åä7h4”éÌ„=œ¶C%X3Ò >5ΜküMy΋úFË¥EÉëFƒ¢\Ô­êJ.-ªúÁ³é!òj •â4ÒTtvÚU8…¡éÐ×ò\¯üŠ:º*«Z®ÇX'ʸi½!´ê«&ÞËïuU£Lu‚çjUÑô*Xtâ´ {êªznUG}U.ÁV¶{²¾ÑDv‡­lwûQ­hûˆ‚à5äÿ&î:=ÈËtUµí_^ûjÜwzŸë¶9jûÝ`½^FÎЃ\Á½OŽ-5Ç1O5úõ¥Á¿û«Ç8»6ë IEND®B`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1128vu:IDATH‰íÔ1nÄ Ð((iSÅ×H‰+å‘ÌÞŒ­¶Ìr‘Ò¸@LÆfHËà*éLeùÙ30ø`Eœzꩬ_Š–v}cFè•WÏ\1õšÇ„°Àu*·™gLÛiF(òR„Ïc\z6C]lœÑ)mZm1‘c§Ev%êª1Šr ¼¸²iR뵌¡ú¦Ê—›š ŒÔ‰š+*w­«NÝøQ©7)lÊdµ>·z¥g¢}‚»fG𪥿kòZú»Æ)£ÏwWÌ }¾w­ÒDZ®1¼cVÕ¯€‡J¾J¾#ÍS9Ðh¤$:g]çU/<Ðí]!Uch†¦rø8û¨S'ó"Ñmªœ£CÀ `£’‘$#ú$ªMè²©ÓæêWÕ¹’Q~Ã+àí´®ÌŸ2ÖWÖU]ÿ¨ßBTœ AÀkIEND®B`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1127–©kä@IDATH‰íÕ1NÅ0 à¿êÐ1G'!WáÜÀAìEâ t{#A,¢'ð:¼ØAB /C—/Q»N@|56,ò]pÄ5rks0iÊu)`VµÀÑÛê¹ÐHeüROCå›ÞôOô¬é+ó»4•/@èUº&1ÃI[yU#Ì­÷®tæ´a²4„ éô‡úx§FÕ4…S9…÷ÚykTCôÉ‘±÷)¯ÊñG]§2 t±5ùä·YWðR°4òF‘l­UÌ‹©rS‰%àµ+Ñ¡²é@³¤ÛVY˜¼©B)˜ƒ­’.ªs ­Õ‹*õy6\æÝ[*UXvßá¢Ù×§ù¨¯ËæZÔ7Qßwj½ ­­*¼¼‡ÑT‡6èEÕåKÙÖÜÇ@ûÒïû„)õÝy‰ù,?Æ›†ÿáŽÕôBÚZjÄùô^IEND®B`‚ pix[158]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1126á®[r£IDATH‰íÕ;NÄ0àß Â "ÜÀÜĉ’É–8GØ£¬)ÐvpÒÑѸ°<Ìd—‡È84t0R¼Q¾ÄNlÏ,ˆ¨öqW0¼V[1ÃIK›Šð´}®pDÛw-‘Û±±ÆQ¸9ùy¡KžDÊ!¾Fñ܈‚2±^úìaÖ+¯hãá“hÕ”%Sµž‰’ÃÍÂöJ6)ò¡Ýø×?¨ó^îiMk:I2Y"ã5M¬ÕRÁ¨i„kœ\“¦A”󘻰zÏ>³F šfxyYÕ_14SŒ:Ñ7Øfª®<“­¦u5³~]ã:6ÓV”†&Ū§»ÚÑ Ês¶¦yXênÖÂ:)š>4ªÂÏ}oÜYÚ‚V´ ]å/âV4;M7¼¦·M¡-ÔsǬ‘·îwuÅ>ìU²a¡ù˜W_²a1®(§ØXåsZŽøâ[L^j;;å‹ †×~¹Û+xep\BËAp=àg%Ž»íêäòÉ0ÿ;«¹ï¤I8×õп³RU?O•zu+‹ðþ†Šr¢tuC÷Û¾né鵯_#¾x¼,sèÒiIEND®B`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1125x§ È—IDATH‰íÔMRà ð?GvÆÄ›p­î‚ºðZt<ˆ8]tYÜÑÁ!í^²q[&3%ùQx<>jÁ0׬¨•ÌßÌpœ­Fuª5‡±ÖôE¯ÅCmh|ÜÒ›ž˜VWõÿP¶Üô¦S‰›êÕ–:•bŸ’äÕ¨$"V-ÈüwªQH ‹ŽSO ô‚ë™4rUû «1ÛûγšgdIC·¦®j󤮋B|®ª2¹š{ŽâyK»u ßóH¥—Zñji}­ÔóU¸Pó[èù¾]¨¾£| =¯RÑU¬![¥iú“Và2IjH1bǬ‚.1‘DàÕõÉËDÉÌïGFéùHåë¡éyÈUóûg“«!g›Õ)ª²ôE¿Ez{Æ=·Jᾈˆ•ù†ŽN£ã´cY5èív€U aW´Í¤,Jáò|Ñ{áÚ¼¨³ú¦ŒûD§{Þ9‡?·Ù‘Þƒ©ª—wÝ}eëžÔXh)¾îg^c7G2éþ›iD¹ÍzJû3§ÓŒ ÞYœÔðFú Ϫ;÷Œöú÷IEND®B`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1124 :^®IDATH‰íÕMN!ðG0²äô^@éQ!£jçäöåqî«qpuÓïhœ*^ú‘ÖkØPKû‰˜†®éû„Q…³J4ä0îÍiÐͤ\%ˆ E·w ÍMÅ禾6ÿ•×b¡—9ì£>R³Å 飫UPªìð=Ö€Â`)Â]Ð\)$ ÝövÒlOU ›¤7èM¦V :V)êQGÍ©£>O µ¢Cº`ÐI—IÕ©ú¦Ž¿UIç†F&Ý*ôIã¨ïX«þR¬5¯ õL»Q©Á0ŠGõëe»õ ín—µÊeÍ¢¥IÅ©4šÜÐ`³gŸSoiÍPKê:R±¤}nµˆþ¡Ìè8G² /i’…ËôjÒLª+¥¦˜GèÓn*¥ÛËå(“œ*?,R”ÉúÌ´Kˆ‰ÌXýLUÖwË)>à[4]azÅÖ/ê ë”ÜiÛCIEND®B`‚ pix[161]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1123‘įý•IDATH‰ÕÕAN!ÐO0Á… [Mçî8ŠžDÆ•ÇèUh\ô’x7,ßÓ6íðacãÏ´ÃðR ŸÒÐ û¹éT œ‰Ú= b«KLÁTõ¥ë…šjÝ=ãeÌ'²¶ÓlìJË»:>‡]éûñéGºŽECýj/þ“~þBo7«¿R=Ò »&tÐUP`YýÆ 2ŽËZ÷ADé¦Vwˆo¢ ­fY ×TÐ&^ 3sP±Uê¢óœ–¥œ­ç4>©Žª§Æ'X U_M;ç uE¤™‘":‹¾ÍF¬JëµÈd2Uõ–^Ì.$U”¾Ÿöw¬¶§‰vBòŸé&Ño™Y-Zò”›\U•FͲ§”È’ÑŽº¡ÒeQYI””ö”&ŠyQ5P›thÔ TêiÐdl³‘¸—¡§T²Á1y.jÀ€9e¤ ¨0n¦Véˆ-u’ýå€]*ªáþs¨ô.zîatRœæªâª(^«+•øÀ)¬¿ñ:.t¶;ì+7Ôä)˜yä IEND®B`‚ pix[162]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1122æÃŸk\IDATH‰íÔ=NÄ0à1FJé=¹’¯²G ¤@ØTc¯âŽc`‰ ¸ôJ–“ÍÙØÞf `)R>%~3‰C¸P–þ ~\ÔÃ÷^“ê_H]ßÔW€T]Hd2ÉR3 T$Qj4ˆu¨T¯á;¾ÒùšZ¨í¤ëÉl5Žƒ> gœÞª?i¦,l[E&2Ó8 MDÚÊ뢭Ñjî7ÑI‹uá¾µL5L#Ž©´m+÷k‹iŒ ™…G9«Iß8un*¢dEKC‡Ty¿³*¤Ê·Át:5”'*_ݤÜë4È­&V¾âLK3çµhéW4T"*d ]M%úc’¹_éûJ½ü–ëÊ{Á„Gu¦8S¿W±ªœÙÂí…­ß+AOÄÕTjiÞÑݨe¿V%¢Û†òž¾§¹ õk5uå' [Ùû‹ÊÏ%É™>p+ó¿ªÔ—u­3ë#6õ»þÏ‹~ðÌ?1 1t§IEND®B`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1121ÊÎÑIDATH‰íÔ1nÄ Ðï Å%ˆÖ7 9Jްe:öbÜ W KKIü3öf•Â3”Ic[¥heZFÕ³Û*ù®Û—s¨†NÛºªÖ‡F[Gš%ÚV©7-uÒÈi¨n{³´Í#•Ç@¥ŒÍa¨q¤ºoÌÌ·Ï#•>Žtéf¤Š¡YçJ´„mͱš*g#dM×7¿õ6Úi¯ÛE€pEP¯À,úŽhèÓ®Ôô‚}”IU‰}†Ü}wÔöX×5T¶}/Ÿ¿ÿ÷ý}Ój-ýžø'IEND®B`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1120ÍþG"IDATH‰íÔANÅ ࿲À7+¸t£\Ì<úâÅxy ¯ñ,1!ŒSÞ®0˜Ý•tÑä Óf(h²Vzè¡©‰(š±¾ó»¡U Ô½Q",½KUQ4*›.è5èÊûÂýRÔê÷šÑtuKÖATÎ&:AAçd‡JM/ɦN Ú1À_£M¶Ë9¶Šà?†š U®•ÕMô\2æM9ògpYÒ•MÖK5¥Tÿ^ó4rÚrÖ’†YE\ðL1S~fÊc)kѬb²©uÿ¦É–‰òG'ʃ#ësx4q ºÍðÄ]*šªµS¾&|55€WÀïµ/€b= îoЖ¬w¬ý_妙«ÒfÀqV_[ö®Ó²ËtW¯¸þQ¿¥Q*±9m€IEND®B`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1118-;%¶(IDATH‰íÔ;NÄ0àßJá2”t¾BJ*r%J*âŽ+pö(9‚‘,Ã&Z'žYƒÄ«Y–¢OÏxbƒÃã‡õõú{Y]ô¢ªFÑ—åÃRÄ(u&J#%K3œTžæ‘ž,Ð 1e¸KþÊ õ˜Â¢&uBqÔ›»ÜR»/iUZ"óJ©k£‰ÈÍ»j@Ô|TÓÑÂô t6Xôµmÿ¨_ —¢àæÈIEND®B`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1111Tç?IDATH‰ÍÕANÃ0ÐY±¡7 AÂWá&IW q³b‰%6®äx˜¤%¤õdZ*áMœ<ÍxÇhÚ¶wÔâ7š4íœU4CСJÕs©5Ñ‘o(˜rÜÌÏ6Ü·ä†䮨 Í0ý•5a2@€õ¸Rµ*4Lt6óü¸Ä)=lÂJ¬Ùó€mC®TŠ5¿ÂA½¬ù"ý¤NQ¯jP3wçT…a}PZ\Ëõ=­ß5£Q4@‹ eæm2£–5Ÿ­â|GuÒŒ %Ã*¢Üûûmâ€Ü5GÊ·€iGA9â¨vº>ÎÌ)1¯~ëd £APsUý&N3ŽxÙ//߯lû+­4Í7ý)<{Oq¡ªNªU4`ñǾÉI{RU}WõUØ)?Í­5õºZMù ½X7¤)ýýG?•–%7vIEND®B`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1109C'$a]IDATH‰ÕÔÍNÄ ð!˜räêÁl_Äl_Å1‚zðè#ÉÍ×ÀxØãâ­Fÿí®»Ûò‘¨ñ‹¤!åW&Ó ÅqÜÇÜДÓÕL×Õ½ùñÃúümú•¬þ³¾þ¥¬îª*ªÊñÜTõª¨×Û/òzc((ΔV±gEL«¢–Ñ’JtˆgT$ uS}Ä â‘ Ä±œh †MÊc"j§ú°W D² =ÓÕPi b®é`¯kíùÑ\Ÿð£õ´!žü¯çC¡\çNDF7ÕTÕvîX++•TÕïT誚ZdakÊ‹j ¬ªTü#ÓõMMݧ9 ]«³°MQ['úeEe V¶Q+Wa6‚:Tœ:Éý^ýâÔI»`½H"û’K%pÔ¡t&çŠÞj 1/ô2éÁQQBBV“¢ywOT§÷ÆVÑøïËÓœIš¡‡Ñ¨™ûêÖ·/˜¬Œ®M5¿¦o7½.³f&IEND®B`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1107¤Ÿ f7IDATH‰íÔ=N!à![PO€7á*Ä×"±°ô ÓÙRb\‡õýd «oMlœb³ðe† 4ˆ¿®’–ú˜ý(· uOW{ôy¨;r_d}ßêê_Ïàd-zy±­¢›új.ô«™|ЧË\ä²ú¤«uù£FšaJÇuWÊSUuµL„@\¶«iª£¬˜FâÉÄ;‹¶Q¨ê«:QÑâ­C×Óø¥¾£¼nÞÈ}Û³âüª7=Yƒ.YÞ”j9ª!u½òŽ÷Õ5°ÎZèYÔsnhÞR#÷œMºJã–Úd°£ô EÖ(«IVV®{¥›4w&©â[ÖW>®ü[ð=-`"À}UÛ*ßkÖ¨'¾U\ÔEÉ·¥¨O3*ÊVÐ 'ZÅJ5‘¨ ü@;ñgú \ÜUöãíä“IEND®B`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1102Ôõýé¶IDATH‰­ÕMjÝ0ð¿â€²ª·Ù©ÇH A×*j­r.CÐ+¨ôdñªx:ò{1±4”d¶y?4úžîDÀG5ûž&Ç<êìx±œÍúUk‚c²òš¶ÑnÁÀ>ÃhJ¢òJ€¢¾h€‹ìZ[+ßã¬h„Ë¢€Õ4•Q‰~³Á_ëßà8ÚYt7áU_¤A²ÙäŠþ¹èÒÓa\«?ã(­åpwVT½SEK¿$ã ?ZŠŽeÔ¿3šÕàM™tE!:©j“MàÔî>‡iUÇA×1–̳®©¨á0jzŠgÝM·Öe7ä÷ý®;¼¿V•ÒÐÓh{:YY«¢dIö—|­O(ëL~·X«Ê¯³ì~º–SgZäzÝy@®×Myè:c‹Zç÷ú½Ö#I¿œµ™/­:6‰·j&Ãõ*é'™*”ªr‰´ß‚JÛøzºønÛ¾öû¥ºFï4™_ý‘ž¸lÅóa[©HJmßô¡§œ{ú*©•û{ š’v7Uoè9rùöPå_#¹žF¨Tæ½æ®Êy½:ÎÌñ«ÕêÆ[TCþ¼óü¹úʯì$"¯ÚÏIEND®B`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1101Mü¬SæIDATH‰íÔ= 1à [¤Ì Ü£ìÑ’Åx¯²âE Ûµ‹òL´±x™E4å|dòoÊ ò׿þ‚f]½ÚYW­sñHŽèØ#KÓR3Hâ¢pMQìLuƒ`0¯:®åF‡AU?&á/ 7ÅÌ5LØ!rEÕ©µwQC9¹­cQvnršF]í§4-j÷úÞüÞë?Çj~J=Qw× M/MtĹ­~#S[SV“b‰–b¾¦Œh¤ÆÓ6´éJ´ÛjciîššeH êƒØò`­Óïq}ßô¾éÀq¥›ÊIEND®B`‚ pix[172]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1100:ûœÅ*IDATH‰íÔANÅ ÐAŒ,9GáJùwåߌàæbܰ;BÛT-&Eix)xþõ·éóPŸ†šýHi¬ÓH_†ÿ=ÆŸÕZ˳bÆV <“å ƒk4[›¹4GŵÁ‘¬µ;‚Í`zÎ6Ýé®’IN5š×¬ÔlÐ_Úù¢çTUãtm5yζ,†Ž¥Mcï[Í:° X•žª±*Æ©£†µ¨ñ† ›Þ|¦ñ£>2Ï}}x§ <Ö}FuÃÕ°›^ŽYÕ@³WPª¯Yª?IíªFÔ’sݱd¢ åxÕTuÏøM#¨ àC¶²BpádË’ôT4‚KJÔsQ”W-7C†V“ t[i"A™ïëƒÊ°ÂÈË9¼ˆÊ’Jñƒú ›q`£õm–IEND®B`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1097tŸØ_IDATH‰ÍÕ1nÄ ÐAH¡ Gà 9AØ(—J V9H®2]®A—) b2X›]ïz Å*ÊŽd7O0ÈžoQ¦mÁr «:ªPÍNÕ]¡óÍTõ_)Mûê&ÔÏ´]¡ó9Õ kð#Tœ¤<. \õWQ›$åùÎ Q«¥>4YBpé¾ëæÌÜpQ§ìÂ¥Öøb1¼¡O‚‚jbˆ$U]qG[­`šj:>Ñ~£„‹%%i1M7ÅúÎùÕ7Ú¹Fjžiì܆ڃ0PÍIØ'cå'‰^ÒþަªºÆ¡ i]4û‘’j*»HCÕÉB¶îK±êt§( š5á+PÖL-ö°–Ó=Ò¶ƒ¨\ãܯ~Öçê)žž+/¤‹:ê'_CëßôŽË<8Ò™ƒIEND®B`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRl/.Ñ¢ pHYsb&2 tEXtComment1094í–‰¢'IDAT(‘uÒÁM!àIäbdŽŒX‚˜¥KØ „hI$6‚øŽÈ<°Ãއå4_àÍ~À—QK6Q׿JDeéTΕ>ðÅ:›uõìz½Øó^å±vë!ýÚHûî¼8*IEND®B`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1088ý;ôÈGIDATH‰íÔ;n!àAÓeRºã&Ù+E¤eO’+Á7 ݈ °ÖÆ1ãR¥1í'Ð?²s<Üõ®wU5Îð– ñFÑ·J€0Z°Ò”ÀfM3J— Lךë“\œ¦èT=P˜É¥A[œðŠAª²ª¾tFÍ]m“¦ò޲HWåeaÓô˜hLÕê5bZf+ªZšº%Y]­˜ˆ†zµ*D°¬÷¹ª_§ £RîŠúŒº2PÙS,Ê«–UëËJEtNÅ·õlÒ”»Â“M¨tã¬ó1™¹wäs벦¢+5LÖü‹JàŽš¦zæ®æS$Mû>ûÖ µ^ñÙúiIŠæG#þMÛÜPÛºËTßÚ^ͺlZ/ºö«ˆ~7Õ…Úvêgªª¼-ãP•ö#ÝÒvÜ®^ŸÓ/&yVÓŒDIEND®B`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1102ÔõýéGIDATH‰íÔ;n!àAÓeRºã&Ù+E¤eO’+Á7 ݈ °ÖÆ1ãR¥1í'Ð?²s<Üõ®wU5Îð– ñFÑ·J€0Z°Ò”ÀfM3J— Lךë“\œ¦èT=P˜É¥A[œðŠAª²ª¾tFÍ]m“¦ò޲HWåeaÓô˜hLÕê5bZf+ªZšº%Y]­˜ˆ†zµ*D°¬÷¹ª_§ £RîŠúŒº2PÙS,Ê«–UëËJEtNÅ·õlÒ”»Â“M¨tã¬ó1™¹wäs벦¢+5LÖü‹JàŽš¦zæ®æS$Mû>ûÖ µ^ñÙúiIŠæG#þMÛÜPÛºËTßÚ^ͺlZ/ºö«ˆ~7Õ…Úvêgªª¼-ãP•ö#ÝÒvÜ®^ŸÓ/&yVÓŒDIEND®B`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1087m„éYTIDATH‰íÔ;NÄ0àß1ÂÍ _)AäZTÄœ€#pw{ ÜÑZP` ËÃXbW!™Y!(vJÒ$ó°A‹x£ïðcm/Ï'´îŸNe^ÇYÏú?´9ª0šÌq¡mZØH SDÍ–"Fó&s%Š†Ï¼¨y¦`pXd>Fœ£ˆúŠ®÷¶ZÜl+Š˜*pkë’Õ¦k×KVÒâºÂišw–•»¹VnRöygêàëVÛA¯^ª7ûr;GEÓKÀSE{£Fœ£ˆúŠ®÷¶ZÜl+Š˜*pkë’Õ¦k×KVÒâºÂišw–•»¹VnRöygêàëVÛA¯^ª7ûr;GEÓKÀSE{£¼ÀzT\./¨‰¯:bbu‚ÚÒúW÷ÕrƒwÔU¸ ›--SøÊ~¼Q›×,ØËÏKÍn¤›±ÑÏ¡~ uù Z‡>í™W?kIEND®B`‚ pix[182]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1099“'õ/IDATH‰íÔ1nÄ ÐϺ ‰– DâéÈQrŒ+An†”ä¡K—ˆÙÁn²öÀ&Ú2Kgžh0îz×¢_7è÷ïÿûF‘TSULT­š2\¢¬÷Ês3ì U°×Ês &AeAÛŠY …'ެû¬Zäp:ÀŠk›¢àp”’&Uü,ï¨)E/í·,¸”²VE‹J‘Y'B¼¢éíE.¬ðÑþ]óª#}ì¨Y#}n*ܺ5òKGל箶jÔ¡Òûè¨SÉ|Mùôó@+’ƒ[—\÷N¢ªè ÚZeŠ­¦f>¼ÀzT\./¨‰¯:bbu‚ÚÒúW÷ÕrƒwÔU¸ ›--SøÊ~¼Q›×,ØËÏKÍn¤›±ÑÏ¡~ uù Z‡>í™W?kIEND®B`‚ pix[183]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1084ô¸ãPIDATH‰íÔ;nÃ0 àŸp-Et"î2fóUrŒ ¤Þ£w©€½†¶ŽÕèA0C¹ŒˆV™Z-2ðAS$Ááñ¯7é÷ z¿[ýÍ=O¤k`ކG¸Z?˜1°'N2UúÊ–è+•ÓF˜ p¦R™º t®²H”F ‡¦ÄHºæ=tqƒ#±«5XŒè ñ hïŸMz@Voå‡+'O•òÛ¯Ž  •NKuŠâ*e]ݪæËaRk-…–Ê ×TíÎt¥jÑ 9—5¯é¦©Ö·v¶>­½‘¼ooZúT2'¯åƾ‹«ê÷$[çdÑÐcG^²½«T¶ [ì€- ©•Híæ:²•Žè¤ŽŽs…jJ¢R¡ƒVû4ÿjI®AÓqVùr•†ò6ÄNÎ`mm!oÔn…¤Ù¤Å® e~/î|,:an*6õ«©õ¸£žEzïx°¯wTIEND®B`‚ pix[184]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1098ä ʼnPIDATH‰íÔ;nÃ0 àŸp-Et"î2fóUrŒ ¤Þ£w©€½†¶ŽÕèA0C¹ŒˆV™Z-2ðAS$Ááñ¯7é÷ z¿[ýÍ=O¤k`ކG¸Z?˜1°'N2UúÊ–è+•ÓF˜ p¦R™º t®²H”F ‡¦ÄHºæ=tqƒ#±«5XŒè ñ hïŸMz@Voå‡+'O•òÛ¯Ž  •NKuŠâ*e]ݪæËaRk-…–Ê ×TíÎt¥jÑ 9—5¯é¦©Ö·v¶>­½‘¼ooZúT2'¯åƾ‹«ê÷$[çdÑÐcG^²½«T¶ [ì€- ©•Híæ:²•Žè¤ŽŽs…jJ¢R¡ƒVû4ÿjI®AÓqVùr•†ò6ÄNÎ`mm!oÔn…¤Ù¤Å® e~/î|,:an*6õ«©õ¸£žEzïx°¯wTIEND®B`‚ pix[185]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1083jé-@BIDATH‰íÓ1nÄ аL³Z|€(ÎR¦ˆä«ä)·)ã(aºPXÌŽ­‘H™f‘ìÂφ1ÌFÄCúÐVW§+1'Ï]càh9aÓtG¨0 l­&„¨Àš±6 /øßѲŠÊÌäâÍ‘\£L>½ùâPl£œ×üêËlöVùÔÅ•ÉT£ìÆ𶼨2YV‡ÂÐHñ1иXYDÓ@à©£1ÐõTôõ½«yøí¡S{ Q9ä¾Nruª™j“¨#ûê‹MÐ÷YªZwKCÝÃH¹s‚!ªuŽtÝvêWíô¤„¤8­c§Cã‹¥Ù(Ý.ùÈŸH3¨Q‰¦ü($hW%G¢¦ÀHBŸ‡ºAI¨Ì¼CšJöqçhäÑÖèwZ9;É97zŒŽ;] ô#ý5þMïΊ•#ÙÐnIEND®B`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1097tŸØBIDATH‰íÓ1nÄ аL³Z|€(ÎR¦ˆä«ä)·)ã(aºPXÌŽ­‘H™f‘ìÂφ1ÌFÄCúÐVW§+1'Ï]càh9aÓtG¨0 l­&„¨Àš±6 /øßѲŠÊÌäâÍ‘\£L>½ùâPl£œ×üêËlöVùÔÅ•ÉT£ìÆ𶼨2YV‡ÂÐHñ1иXYDÓ@à©£1ÐõTôõ½«yøí¡S{ Q9ä¾Nruª™j“¨#ûê‹MÐ÷YªZwKCÝÃH¹s‚!ªuŽtÝvêWíô¤„¤8­c§Cã‹¥Ù(Ý.ùÈŸH3¨Q‰¦ü($hW%G¢¦ÀHBŸ‡ºAI¨Ì¼CšJöqçhäÑÖèwZ9;É97zŒŽ;] ô#ý5þMïΊ•#ÙÐnIEND®B`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1082îÖIIDATH‰íÕ=nà ð?¢[ÜDá¢r±¨©ÇèU¸IÙºRua ¼<×rc °ªv ÂúÉz€ šÆ;}ñü9./ãT ß<@ÃÝõ®wí깫IR†ij"  ˆ¡ÖȤøÙ¨Zƒ%' 0¾¥°QDÐîQVêa «LÚQ)ÌÒg•5¨­ÊŸ†¬Å­à¥¦!œ†ÒTŽ›tMY¹°V;/D^xÎK5ó…Õ€ýXª^¨àËFÔ|W¨$×:—;¾¨h=Vß« ·ôB[Zé“TÑbñIEND®B`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1096˜èŽIIDATH‰íÕ=nà ð?¢[ÜDá¢r±¨©ÇèU¸IÙºRua ¼<×rc °ªv ÂúÉz€ šÆ;}ñü9./ãT ß<@ÃÝõ®wí깫IR†ij"  ˆ¡ÖȤøÙ¨Zƒ%' 0¾¥°QDÐîQVêa «LÚQ)ÌÒg•5¨­ÊŸ†¬Å­à¥¦!œ†ÒTŽ›tMY¹°V;/D^xÎK5ó…Õ€ýXª^¨àËFÔ|W¨$×:—;¾¨h=Vß« ·ôB[Zé“TÑbñIEND®B`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1081„çLl[IDATH‰íÔMND! àYrn"s¬ÙÇrGâÂkpI\È©í¼y“÷S^Œ ãbºäK ”ÀE´€«ˆ°R<Ò—Ï#ý8ÌÝÆ]ïú§Z‡ ®ø›¾¯°%u7}[˜Â &/u‘[ è•ÎÑQÈ D­øôIÒÌêR`õ[­`iÁFŒ'ŸD…³‰˜N!‡­ÖÆ ˜vµbUM“*Aiç΢¸S*a×]‘¾âóN±ØÆê€ *Tã¢DZVT vY R¡4v3ÒLÚ¬¤•´ÐÎG X݆±ÒÓ‡2ÔH+k!…GðÙ j.âH5kšZc¿3+f'kýEm×Ü_¨¡Î¡3g?PEJ÷µ~ÍÚh„âV¯¹ÔíŠê$¥:Ƴ¦CA5EÃ]'hå徂 ©%¥c”í”q¢ë4÷© Ôc™o¸Û¹.v§šÆKRt¸Ž÷{Oú -Ô7e CèIEND®B`‚ pix[190]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1095š‘¹4[IDATH‰íÔMND! àYrn"s¬ÙÇrGâÂkpI\È©í¼y“÷S^Œ ãbºäK ”ÀE´€«ˆ°R<Ò—Ï#ý8ÌÝÆ]ïú§Z‡ ®ø›¾¯°%u7}[˜Â &/u‘[ è•ÎÑQÈ D­øôIÒÌêR`õ[­`iÁFŒ'ŸD…³‰˜N!‡­ÖÆ ˜vµbUM“*Aiç΢¸S*a×]‘¾âóN±ØÆê€ *Tã¢DZVT vY R¡4v3ÒLÚ¬¤•´ÐÎG X݆±ÒÓ‡2ÔH+k!…GðÙ j.âH5kšZc¿3+f'kýEm×Ü_¨¡Î¡3g?PEJ÷µ~ÍÚh„âV¯¹ÔíŠê$¥:Ƴ¦CA5EÃ]'hå徂 ©%¥c”í”q¢ë4÷© Ôc™o¸Û¹.v§šÆKRt¸Ž÷{Oú -Ô7e CèIEND®B`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1080óà|úŸIDATH‰íÔ1n!Ð!¤2¹Áæ.]e¯’#¤ta¢>†¯‚”‹pœŠHˆÉg׎ìÛ&EF²dxB,03´WÌi`æ¸O/2P ‰á?Kû2,Ê™ƒÄÄxÌšç°ô\ óÎÏÊeéñ¬Š£¹UG4žGy䛀õ΀ơ‡E“YÒ…ø×ý Z*î­¡΂3iNÔP”™ˆâ —ºÒ4M¨ŸëùZÓ<íï&›êHûÁ²pº¥v£½qYú†*¶;åŒÏ*T𡔥ãSR±Ú—b‘¥åϤRãD³šS¼4¤[ÅU ìÛÔ¬²„Ž.tÖÕvA½¢p/:j= tRÓUé©õF“RžêW€âÄ6NZÝä·Ê¾¾^¢· ½Ž=u“Êξö‰žuª5NJfAqMîqAÙw4O õ7Çr“E×]Kš‹nZ·qQ¿U±Îö-r2IœhÛÈöø€/NÊŽvר”ˆŒ°ÐåÆëC»ÖŽ72§h©ÐRŠuÖAAC(¥X÷²!!k¼¬4a·ˆ‘5|)Áý*K¾‰_ë¢_· ¹îIEND®B`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1094í–‰¢ŸIDATH‰íÔ1n!Ð!¤2¹Áæ.]e¯’#¤ta¢>†¯‚”‹pœŠHˆÉg׎ìÛ&EF²dxB,03´WÌi`æ¸O/2P ‰á?Kû2,Ê™ƒÄÄxÌšç°ô\ óÎÏÊeéñ¬Š£¹UG4žGy䛀õ΀ơ‡E“YÒ…ø×ý Z*î­¡΂3iNÔP”™ˆâ —ºÒ4M¨ŸëùZÓ<íï&›êHûÁ²pº¥v£½qYú†*¶;åŒÏ*T𡔥ãSR±Ú—b‘¥åϤRãD³šS¼4¤[ÅU ìÛÔ¬²„Ž.tÖÕvA½¢p/:j= tRÓUé©õF“RžêW€âÄ6NZÝä·Ê¾¾^¢· ½Ž=u“Êξö‰žuª5NJfAqMîqAÙw4O õ7Çr“E×]Kš‹nZ·qQ¿U±Îö-r2IœhÛÈöø€/NÊŽvר”ˆŒ°ÐåÆëC»ÖŽ72§h©ÐRŠuÖAAC(¥X÷²!!k¼¬4a·ˆ‘5|)Áý*K¾‰_ë¢_· ¹îIEND®B`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1079 ¤Ø‘zIDATH‰åÕ=N!à!XÉL¸ˆ Å#X¾bè<Æ» žDŒ ±Â8¼]Ís°0¯rš-¾ð7ð€-Â2N_1lúò}›ê+«uªèW}Ÿ*§ê¦:Ÿùrzœª›ij¹˜Î×Äÿн>Ÿ+~ì#¢ÀŠÕ*‰\I-b;ÍØ¢À:û¹VÔî&^©Þk!  ƒõ¼*ô·*¸ÀÍ|ҥ鮫ªô•]¿g…bUÍœ·¢ô..†Õ*PxÊ@%Šv¢‰jhiJ™*D_eb4Ê ¦ }6VÍ'µæm¬ÌLž7 ’]7¥H&²JU‚8Ø4T —·ç¦.8+Æß´°J{˜S}°¬VjÒ{3TZ÷ŽÓü­:sÙ@Q$84—+º7YyQ÷y¦î±>ëp%¢ f¯­ª­©‚Ò[F‰ ݺÄÜœ¦ÔÝ tÞ~ž»uImÛ^FM†öì ×¶¨ëEŽŽÕŸqAýFè/ý§ŒIEND®B`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1093sòzIDATH‰åÕ=N!à!XÉL¸ˆ Å#X¾bè<Æ» žDŒ ±Â8¼]Ís°0¯rš-¾ð7ð€-Â2N_1lúò}›ê+«uªèW}Ÿ*§ê¦:Ÿùrzœª›ij¹˜Î×Äÿн>Ÿ+~ì#¢ÀŠÕ*‰\I-b;ÍØ¢À:û¹VÔî&^©Þk!  ƒõ¼*ô·*¸ÀÍ|ҥ鮫ªô•]¿g…bUÍœ·¢ô..†Õ*PxÊ@%Šv¢‰jhiJ™*D_eb4Ê ¦ }6VÍ'µæm¬ÌLž7 ’]7¥H&²JU‚8Ø4T —·ç¦.8+Æß´°J{˜S}°¬VjÒ{3TZ÷ŽÓü­:sÙ@Q$84—+º7YyQ÷y¦î±>ëp%¢ f¯­ª­©‚Ò[F‰ ݺÄÜœ¦ÔÝ tÞ~ž»uImÛ^FM†öì ×¶¨ëEŽŽÕŸqAýFè/ý§ŒIEND®B`‚ pix[195]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1078z£èÉIDATH‰­ÕKNä0àÊX"ì¼eÑ"ìf;KH¹ Gè lÄæJ–æ ã#Vn)¸øÝG—3‚ž’z“¯]å·‰™–ã`©!³š¶¾Yj¥ÍaII•¦¢«ÌÉ„ž9޳ŽkÍÃEW•Œ!4ðC­˜I%B1§k}â‰è¬fG’F¢}ï5ÛËJcÇáÝktÚîÌZ‰8 t3@IKê³Æ¬ëÌè,»ÑBuª•©+: j³ºDM¦ÊF©ž«Y;7„¶b&E%¶œuôr]Œx‡¶(ÞÐk"mI‰jfí¤º'í©©»MEŸ/ð3’ŽYsˆm¡Ê7™ûU7+„PßÓ”µÔõ2¯„0“6/OÒås¥u{võ*pÞ“X<¨ÎÑQƒŠJ:eè•l¤ &qž×¢‚ÔgqÊîŠQî騱^…tÒ¼s¢°¯ ·Ø¸þÒ0Hú˜Oi¿|ù¬˜¬O—ÛGÍ{Ü›–Ö!êaS_ÎÐ`¶ôuS—øïzø½¥Amf>GŸÏÐòtVú¿©VÚ…r-,–\‘,í—ÿÎmqgÿ´ãtõ ÷¾áµžNÑÕ‡¤ëº®Ü4¢ ñ}—rѬvRoIEND®B`‚ pix[196]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1092õ,—ÉIDATH‰­ÕKNä0àÊX"ì¼eÑ"ìf;KH¹ Gè lÄæJ–æ ã#Vn)¸øÝG—3‚ž’z“¯]å·‰™–ã`©!³š¶¾Yj¥ÍaII•¦¢«ÌÉ„ž9޳ŽkÍÃEW•Œ!4ðC­˜I%B1§k}â‰è¬fG’F¢}ï5ÛËJcÇáÝktÚîÌZ‰8 t3@IKê³Æ¬ëÌè,»ÑBuª•©+: j³ºDM¦ÊF©ž«Y;7„¶b&E%¶œuôr]Œx‡¶(ÞÐk"mI‰jfí¤º'í©©»MEŸ/ð3’ŽYsˆm¡Ê7™ûU7+„PßÓ”µÔõ2¯„0“6/OÒås¥u{võ*pÞ“X<¨ÎÑQƒŠJ:eè•l¤ &qž×¢‚ÔgqÊîŠQî騱^…tÒ¼s¢°¯ ·Ø¸þÒ0Hú˜Oi¿|ù¬˜¬O—ÛGÍ{Ü›–Ö!êaS_ÎÐ`¶ôuS—øïzø½¥Amf>GŸÏÐòtVú¿©VÚ…r-,–\‘,í—ÿÎmqgÿ´ãtõ ÷¾áµžNÑÕ‡¤ëº®Ü4¢ ñ}—rѬvRoIEND®B`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1077êõ–TIDATH‰íÔ;n! P# §ãs-¢åZ[D=I®‚”‹ å¤C Â1lŠìÚL—O±43â  ᮿ /ÿrUwý3}%JNW¤ÀR³RRßÀP©€Ü½UÖÈSÜhcÍà Ø4Mà²ëNÕ'̺ɨiì˜øÍT¡cU¦Û¡¶Iå†X‹ªm¨Iµ[E¹“5?-õœ|zÆ¥fÉ­4fºírg,ç=µssBÝÐÊúQEœ¿i~X«áƒÜd$Ýå¿Àê5Ź£P0,Æ&ßi5s<Ži媦òÈäGò.4V«:‚ÏZyIF*~éÑïé£ÛÓƒ®œ“&úrÀ•ZÖ“–9é<4±ª•¦ NØD$ëSE>…ŠÕ+ºh¶¦£~Át7ÃÐYû¼i'´Mõi¦ÆµvŸ}å #JAèüÂÌÇ;©zÕ~P?riJË9Æg…IEND®B`‚ pix[198]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1091ü}-TIDATH‰íÔ;n! P# §ãs-¢åZ[D=I®‚”‹ å¤C Â1lŠìÚL—O±43â  ᮿ /ÿrUwý3}%JNW¤ÀR³RRßÀP©€Ü½UÖÈSÜhcÍà Ø4Mà²ëNÕ'̺ɨiì˜øÍT¡cU¦Û¡¶Iå†X‹ªm¨Iµ[E¹“5?-õœ|zÆ¥fÉ­4fºírg,ç=µssBÝÐÊúQEœ¿i~X«áƒÜd$Ýå¿Àê5Ź£P0,Æ&ßi5s<Ži媦òÈäGò.4V«:‚ÏZyIF*~éÑïé£ÛÓƒ®œ“&úrÀ•ZÖ“–9é<4±ª•¦ NØD$ëSE>…ŠÕ+ºh¶¦£~Át7ÃÐYû¼i'´Mõi¦ÆµvŸ}å #JAèüÂÌÇ;©zÕ~P?riJË9Æg…IEND®B`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1076ÅdIDATH‰íÔ1N!à1Á„ ñ–fÆcY-t–^‰Îr¯À()ÏÇÄÄuy¬‰[Øì4“Ì7ÌA0haX#T¼¤.ÞªrURÀ†ù~¢ÅÂ#¹à޵Â6U (¼¸8(Ϩ©Ú.ÙA‹­º^uµ3åÉpiYÖö›.ˆSU¸cÿ[LS*I5çM#t^ÇÕøRîQ£©fî a®Š[½N¿ÜÕO«7„dEàÕÊz¦|ù$eÒmúŠÝAÉÇÚx¥×©'ËÏTQ\7ÖϪXŸIkUMíú¤›Ô£žÖG#húÖ*iÓ¥×ü ÇäVÓSǹ;Ö ìT6¸™éÒwYDZû‰Ÿ&ÊÊc]€á\P>7$åɬ kéï¹ÚÆ{ê›PÈUp*¦ÿvò`Þ ð‹ 4®IEND®B`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1090êûM»dIDATH‰íÔ1N!à1Á„ ñ–fÆcY-t–^‰Îr¯À()ÏÇÄÄuy¬‰[Øì4“Ì7ÌA0haX#T¼¤.ÞªrURÀ†ù~¢ÅÂ#¹à޵Â6U (¼¸8(Ϩ©Ú.ÙA‹­º^uµ3åÉpiYÖö›.ˆSU¸cÿ[LS*I5çM#t^ÇÕøRîQ£©fî a®Š[½N¿ÜÕO«7„dEàÕÊz¦|ù$eÒmúŠÝAÉÇÚx¥×©'ËÏTQ\7ÖϪXŸIkUMíú¤›Ô£žÖG#húÖ*iÓ¥×ü ÇäVÓSǹ;Ö ìT6¸™éÒwYDZû‰Ÿ&ÊÊc]€á\P>7$åɬ kéï¹ÚÆ{ê›PÈUp*¦ÿvò`Þ ð‹ 4®IEND®B`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1075”º>IDATH‰íÔ1n!ж  MúÍ1\D&GÉRº° ]Žnà+pJ¤ ÆÃ®dÅñ€¥HQR˜j5O; ³Ë€>¨»<úv×¥e¨Ù ÕþVUw•5Y¢wAD ‘TS+PT§5ðùE«¦›J‚r,aN@Át•¹r,ÂDƒ í𨃠›ž¦àºêkÓmg_OŠÕÆk¥xÖ,(Çy®Ê–hmj¼ë(ïD-‹¾pŸûúÚTø‚«¾u•3ú]OõY¥}åÌšËZ•ØUÌ}ªõ­‹F3P—dÕ7T”n) ‚wšWµQIDATH‰íÔ1n!ж  MúÍ1\D&GÉRº° ]Žnà+pJ¤ ÆÃ®dÅñ€¥HQR˜j5O; ³Ë€>¨»<úv×¥e¨Ù ÕþVUw•5Y¢wAD ‘TS+PT§5ðùE«¦›J‚r,aN@Át•¹r,ÂDƒ í𨃠›ž¦àºêkÓmg_OŠÕÆk¥xÖ,(Çy®Ê–hmj¼ë(ïD-‹¾pŸûúÚTø‚«¾u•3ú]OõY¥}åÌšËZ•ØUÌ}ªõ­‹F3P—dÕ7T”n) ‚wšWµQô¯•tm‹åŠÀy›µNÄžc˜5ûñœà:ܤ»F¸;i‘‚Àfª­ E}79P#]C§|±Š3JÝÐlyêãüÏCëÐ’²¢PÝU·´MZ†ž¨S:PßNFô®•wZ|sh6J¥î®ï+•Nþ¤åHü±ZQ¬Ô-4Âb]±Òg€j’9Ö'Ê …í+u|¤uWy¡ôyìo·_ëør}•“£ª«¯Ž?´¹r¶l4-QºœÏ4â'ͰÒÅ4Ò]2({”=6EGBå\Ü®’{ݳ/‹žµŒà™æ„î3H‚Ê]¹ÆhžùS²êUý·þßû¤°Dª_ÎÞIEND®B`‚ pix[204]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1088ý;ôÈ6IDATH‰íÔAj!Ð/ânÜfâ5²Æ£µ¹™GñîâB¬”=°Úd3®š~ÒÕ–~Á‹ñЇ>ô¯•tm‹åŠÀy›µNÄžc˜5ûñœà:ܤ»F¸;i‘‚Àfª­ E}79P#]C§|±Š3JÝÐlyêãüÏCëÐ’²¢PÝU·´MZ†ž¨S:PßNFô®•wZ|sh6J¥î®ï+•Nþ¤åHü±ZQ¬Ô-4Âb]±Òg€j’9Ö'Ê …í+u|¤uWy¡ôyìo·_ëør}•“£ª«¯Ž?´¹r¶l4-QºœÏ4â'ͰÒÅ4Ò]2({”=6EGBå\Ü®’{ݳ/‹žµŒà™æ„î3H‚Ê]¹ÆhžùS²êUý·þßû¤°Dª_ÎÞIEND®B`‚ pix[205]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1073íq1=IDATH‰íÔAjÄ0 ÐïêMÁ½/Rðµf14† WòQ|„,½p¥Ê“b9]”ÂPšUÌC±e)<ÿú•~ ¿wª;ÓwNn¤ Àqi…Q•Œ,ð (ê¹`=kZlœ€¹ÓâdÓ¦‹¡S4õM}î´ÀÊ›[Õïuiz² “â*ª.ê´/z´4åP4%C–¬¦œ$Œ`«M¡Ø>_QIëP}qy¨F®,{UkÓv#]†š}vy¬AjÔç[oZ€>öªi>Öz q&<(§—±ò¥Š‘Ò·Jm¡TÿK®†!J¶ïIQ©Ÿ©à:õý¼Q“B¯Ò7«ªFšV;-¢ç«r§>=7%e2Ô-I³‹ Ÿ*­ªNræäU]ä—â}°ªÛ¨:Ú¦²?Uà·ïe>ïõ8D(`ûÌIEND®B`‚ pix[206]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1087m„éY=IDATH‰íÔAjÄ0 ÐïêMÁ½/Rðµf14† WòQ|„,½p¥Ê“b9]”ÂPšUÌC±e)<ÿú•~ ¿wª;ÓwNn¤ Àqi…Q•Œ,ð (ê¹`=kZlœ€¹ÓâdÓ¦‹¡S4õM}î´ÀÊ›[Õïuiz² “â*ª.ê´/z´4åP4%C–¬¦œ$Œ`«M¡Ø>_QIëP}qy¨F®,{UkÓv#]†š}vy¬AjÔç[oZ€>öªi>Öz q&<(§—±ò¥Š‘Ò·Jm¡TÿK®†!J¶ïIQ©Ÿ©à:õý¼Q“B¯Ò7«ªFšV;-¢ç«r§>=7%e2Ô-I³‹ Ÿ*­ªNræäU]ä—â}°ªÛ¨:Ú¦²?Uà·ïe>ïõ8D(`ûÌIEND®B`‚ pix[207]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1072švhIDATH‰íÕMJÅ0ð)²r‡¹‰s3›‡ ¯•x…€È2‹ñ_Q0ÓÙˆ¸1›öñkÚÉ|ðHŒ•è_ílicéáLE©N2.ŠbÉ~:)QUÜá ¯*Ñt`»®ÐŽíßµ­NmD‹JâîêÃTNû¢™»o×\Ýóª…4 Wöš†v‰ÃŸë=4ïUÓû=÷ ë½ã3+oÎS½TÎQÕrhPNt("öZ6EÆ•Lš‘ñµ S‘K¹¢KÖ ~i7t3÷:èéw‡;5ˆšH=/tžér¦¡y´¢ …ƒÜ(y¾i…"תÖ%©†nо´pÑ5·xªD~¶TŽêwçx&"€5æá£›®çý\’©q­BBÝnšµu'i›ªV+£%yvÝ«¦5Î7òWME1ú&–Ê/곩ÎÒá-í¶SãÔ~ófêç˜éʆSÅÖÏaø³çw$ü?ž0 Ñ)IEND®B`‚ pix[208]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1086ƒÙÏhIDATH‰íÕMJÅ0ð)²r‡¹‰s3›‡ ¯•x…€È2‹ñ_Q0ÓÙˆ¸1›öñkÚÉ|ðHŒ•è_ílicéáLE©N2.ŠbÉ~:)QUÜá ¯*Ñt`»®ÐŽíßµ­NmD‹JâîêÃTNû¢™»o×\Ýóª…4 Wöš†v‰ÃŸë=4ïUÓû=÷ ë½ã3+oÎS½TÎQÕrhPNt("öZ6EÆ•Lš‘ñµ S‘K¹¢KÖ ~i7t3÷:èéw‡;5ˆšH=/tžér¦¡y´¢ …ƒÜ(y¾i…"תÖ%©†nо´pÑ5·xªD~¶TŽêwçx&"€5æá£›®çý\’©q­BBÝnšµu'i›ªV+£%yvÝ«¦5Î7òWME1ú&–Ê/곩ÎÒá-í¶SãÔ~ófêç˜éʆSÅÖÏaø³çw$ü?ž0 Ñ)IEND®B`‚ pix[209]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1071P£|IDATH‰åÓ±jÃ0à3Ô¡ 5CÁÑ5p/C†Ž}„¼ŠB ¯ Ð¡«B†ª êzJBpðI…´¥Cƒ->K²dý¿V&€Þ wÚ•FOé ÷k€Ó­”Ú½#=€3z¿R×jü†¾7ußÔ]S·MÝü€n%|{jêóI_D¥æ¼ÿBw€:QsÏÍ’ Q£ÊœAÒdÉwUH®ãˆéAš7 ?³I ‡k€ð¡&X•_˜„ŠVõ€Y‡9fÔô õÍ:Î1¡!3Ñ ˜Lša´&O•¦>Íl´kÞ²‰zŒ}º±Á®“¤–õ–/Eå™Év­¦|ò£•4åôI1 ¯eIejQ¹/ô8²jª¾ˆ¤ Q=kf]Ö•ÿÀJÔ22MêJ†²¤á GMí“ }MýA½á¬Iʧ."k¨¨‰èªšM@ßËêJRlE=gZ¹¢ÒWåË#%-ëЕŒ‚r¡n4æ¥ÖhjZ*Û–NëÏô4«<’IEND®B`‚ pix[210]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1085ƒŠˆu|IDATH‰åÓ±jÃ0à3Ô¡ 5CÁÑ5p/C†Ž}„¼ŠB ¯ Ð¡«B†ª êzJBpðI…´¥Cƒ->K²dý¿V&€Þ wÚ•FOé ÷k€Ó­”Ú½#=€3z¿R×jü†¾7ußÔ]S·MÝü€n%|{jêóI_D¥æ¼ÿBw€:QsÏÍ’ Q£ÊœAÒdÉwUH®ãˆéAš7 ?³I ‡k€ð¡&X•_˜„ŠVõ€Y‡9fÔô õÍ:Î1¡!3Ñ ˜Lša´&O•¦>Íl´kÞ²‰zŒ}º±Á®“¤–õ–/Eå™Év­¦|ò£•4åôI1 ¯eIejQ¹/ô8²jª¾ˆ¤ Q=kf]Ö•ÿÀJÔ22MêJ†²¤á GMí“ }MýA½á¬Iʧ."k¨¨‰èªšM@ßËêJRlE=gZ¹¢ÒWåË#%-ëЕŒ‚r¡n4æ¥ÖhjZ*Û–NëÏô4«<’IEND®B`‚ pix[211]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1070tx`5¦IDATH‰ÍÔ;nã0à!T°äx‘`µ'[‰Pár .Ü,à#,‘-R†é€áŸ¡â–ø(ØidÍgB| ‡( ù@}g€q“‡ÓºSˆ˜pÜ©°úŒ¨£æü\T)áUÔO)—^æÖ\Šþª/éïÃHÏÀ›¸¿<“òã„J¬znj5¾]_ÿŸY=6õ_SíÐÔ¾¥sS©ùݯ¨ZtK£lè{Ne âã×^=ß GC®OéöXVKýš¸¿U¾4$Içc%õ3«±¹zÉÕI;—+_cwÇ* ]¿×Èj©&*_ÔrJzÊN» Sйb”XÐp(*Ÿ‰9@úºþ†j(xÆZU¼+QE.G”­7iÇk =«®©oëà„S •¾ªnp*ȆêºZ8?©<¯OªMªêjXËs6<Ò 4T ÈPÜ+Ã'H¬å\°DBìjj’VÎhÆÄ ú©sMëé’Ž…Ê ¬Ãªs~÷#׋û!“Ú¼o°JO*õ¡×ó^ã´Qî kÃÏÄwíéïMWqÛÛ•â úØÔãørò7 ;Ù“IEND®B`‚ pix[212]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1084ô¸ã¦IDATH‰ÍÔ;nã0à!T°äx‘`µ'[‰Pár .Ü,à#,‘-R†é€áŸ¡â–ø(ØidÍgB| ‡( ù@}g€q“‡ÓºSˆ˜pÜ©°úŒ¨£æü\T)áUÔO)—^æÖ\Šþª/éïÃHÏÀ›¸¿<“òã„J¬znj5¾]_ÿŸY=6õ_SíÐÔ¾¥sS©ùݯ¨ZtK£lè{Ne âã×^=ß GC®OéöXVKýš¸¿U¾4$Içc%õ3«±¹zÉÕI;—+_cwÇ* ]¿×Èj©&*_ÔrJzÊN» Sйb”XÐp(*Ÿ‰9@úºþ†j(xÆZU¼+QE.G”­7iÇk =«®©oëà„S •¾ªnp*ȆêºZ8?©<¯OªMªêjXËs6<Ò 4T ÈPÜ+Ã'H¬å\°DBìjj’VÎhÆÄ ú©sMëé’Ž…Ê ¬Ãªs~÷#׋û!“Ú¼o°JO*õ¡×ó^ã´Qî kÃÏÄwíéïMWqÛÛ•â úØÔãørò7 ;Ù“IEND®B`‚ pix[213]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1069¿éÐ9IDATH‰íÔ½mÅ à³(èÂlVI¦Hy¼æ­2AV Žq9°Ÿ™ƒ*éŒ,ùãOÜТx¸ôÒKÿT¿—ùÁZVO6XIPÍj¢•ëe×pŒ~Ò *±zP’¦§ÕJÊó&{›iŠÎ' „y©iˆ˜PTÏ›^øµÑû¨7 ›*i¯º¾R =QbýXèDÝúºH-Ô±>¢$hÕÛRgZ =à·â¡–ÕÌúf[U\©NBvM¶š¢$hÕÛRgZ =à·â¡–ÕÌúf[U\©NBvM¶šjpÃ/6‚!Âwè‰ãQ¢dù=ÜM:Á=½‰ìú3BøÆz£h®'üÊÝQ hþl*Pp¨"²æ®ÒO/ú<ó—4à&)VÕ6IјÁCå©—qôLMhh› õÍmU%¿±®OõH·ô/5üyÛ¿ÉêsFm-¡¡±‡-–Šâ%×vÑÆß2°*|mþV+k„GÖ zÑ2ô–5ƒÛ«‚¬™÷¾â‚6UÏœsrqQGÓxÖhXý¢Ù¢ÁÏmriÕ2ÔU›EuhÚÙU·ÑÊêY½¬¶Bñ5Y 5TX$µC3¶šµu®¦jŠ}[oõ;7]WácªX×õŠW´Ÿ"»žQc¯©,ç|Qy6®¨©æŠþü}k,ʇuÚ¨ƒ £êìNSÏxjZ´€A͹SxTÅ ’ÞBêARÐ5}Y•×ÜGðYS¡êêTÓ/Þ°(×i‚À#*ÒúòªfE•O©68ø¼j¡|ö%ž„m&Õd½Ä¼^Æì¹¡«97IEND®B`‚ pix[218]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1081„çLlÄIDATH‰µÕMn! `#ªGOâUè1º WɲË*ÐäJô&ôtÇÂÁ1W%ÂÌ‹úãÅh4Ÿ` ص‡÷>jpÃ/6‚!Âwè‰ãQ¢dù=ÜM:Á=½‰ìú3BøÆz£h®'üÊÝQ hþl*Pp¨"²æ®ÒO/ú<ó—4à&)VÕ6IјÁCå©—qôLMhh› õÍmU%¿±®OõH·ô/5üyÛ¿ÉêsFm-¡¡±‡-–Šâ%×vÑÆß2°*|mþV+k„GÖ zÑ2ô–5ƒÛ«‚¬™÷¾â‚6UÏœsrqQGÓxÖhXý¢Ù¢ÁÏmriÕ2ÔU›EuhÚÙU·ÑÊêY½¬¶Bñ5Y 5TX$µC3¶šµu®¦jŠ}[oõ;7]WácªX×õŠW´Ÿ"»žQc¯©,ç|Qy6®¨©æŠþü}k,ʇuÚ¨ƒ £êìNSÏxjZ´€A͹SxTÅ ’ÞBêARÐ5}Y•×ÜGðYS¡êêTÓ/Þ°(×i‚À#*ÒúòªfE•O©68ø¼j¡|ö%ž„m&Õd½Ä¼^Æì¹¡«97IEND®B`‚ pix[219]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1066„ôA`IDATH‰íÔAj!Ð2Bjé¼BN/Ɔ,²Ìr•†\¤wYFÈÆ€±òµ™a&–³Îb„h_—hYÕ$m$'ÚXH¾éMo*5H¶º¾ÈF„_õU ÉJ ƒV'¹ "?hv’(ìê]Ëz裢™OzàU}`è“Kƒ&(e¦w<ðe¬)ÖŠª¥ë“¹ *ÄÕÖö—¹Å~^jrM]…5ýø«ê ï±C®š öÄã‰z¬^ÊnÌÆI=’:æ9ÝwMm›Ìú™nPåö¡Ü4BãL×(Õˆ²ç£žê[ )¹êЉä¯é¦+cb‰šb7„{À ïçúvRÓÔȳk«)Fª½¦¸Œñö»Z¨Zu­®JW"EëÚlP÷Šn½”¡hp¥(ÒT±ÚÓ]U_ºuÕÝÃÌt£€D%å»]…„‚BØ÷qî¼CÑ%{AýŒ*_2Œÿó¾Ð_T]=Åç†ÛãIEND®B`‚ pix[220]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1080óà|ú`IDATH‰íÔAj!Ð2Bjé¼BN/Ɔ,²Ìr•†\¤wYFÈÆ€±òµ™a&–³Îb„h_—hYÕ$m$'ÚXH¾éMo*5H¶º¾ÈF„_õU ÉJ ƒV'¹ "?hv’(ìê]Ëz裢™OzàU}`è“Kƒ&(e¦w<ðe¬)ÖŠª¥ë“¹ *ÄÕÖö—¹Å~^jrM]…5ýø«ê ï±C®š öÄã‰z¬^ÊnÌÆI=’:æ9ÝwMm›Ìú™nPåö¡Ü4BãL×(Õˆ²ç£žê[ )¹êЉä¯é¦+cb‰šb7„{À ïçúvRÓÔȳk«)Fª½¦¸Œñö»Z¨Zu­®JW"EëÚlP÷Šn½”¡hp¥(ÒT±ÚÓ]U_ºuÕÝÃÌt£€D%å»]…„‚BØ÷qî¼CÑ%{AýŒ*_2Œÿó¾Ð_T]=Åç†ÛãIEND®B`‚ pix[221]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1065 ¥ûQIDATH‰íÔ;NÄ0àßJ‘r8¾Æˆ\lE¼Ú‚cp• ®áàÒ…ñ0ãMö¡ØA¢BQìOžø1ðFsø×ýë:lªmëKU“Œ}pDWÕHœÁ˜Öê‰FÕܯÕØ °±[+Hª¨ë}lé®}j¨ÛwÓ¾®1r÷ÊŽkêUÍìot(Ï@lØESen l4hÇ©r'í[jEÉ16´“ok¢Ÿk´ MßkØÒ1 Ó(ê7u7”í«êN*é9+ÍZöë¸h”ä+šéóJ±è=pÔqË5%#_rC‹&êpwµ*Q#¥ÄQ×<¨tžÕ¼Êóܲ_˜³ú³Æ³ÊË{yšíùVíå³R^R I4¬3VÔN;Õ¤^Sô¹¨­©‡ætM£Ä“ê>é*²ød¸èjUÚäÚøù¡rûÚÌuç·ýŸgýÔ,KÚ6ò•IEND®B`‚ pix[222]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1079 ¤Ø‘QIDATH‰íÔ;NÄ0àßJ‘r8¾Æˆ\lE¼Ú‚cp• ®áàÒ…ñ0ãMö¡ØA¢BQìOžø1ðFsø×ýë:lªmëKU“Œ}pDWÕHœÁ˜Öê‰FÕܯÕØ °±[+Hª¨ë}lé®}j¨ÛwÓ¾®1r÷ÊŽkêUÍìot(Ï@lØESen l4hÇ©r'í[jEÉ16´“ok¢Ÿk´ MßkØÒ1 Ó(ê7u7”í«êN*é9+ÍZöë¸h”ä+šéóJ±è=pÔqË5%#_rC‹&êpwµ*Q#¥ÄQ×<¨tžÕ¼Êóܲ_˜³ú³Æ³ÊË{yšíùVíå³R^R I4¬3VÔN;Õ¤^Sô¹¨­©‡ætM£Ä“ê>é*²ød¸èjUÚäÚøù¡rûÚÌuç·ýŸgýÔ,KÚ6ò•IEND®B`‚ pix[223]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1064j•m.IDATH‰íÔËmÄ à!HË‘(…VÒ ”F)”Àq"!È­3f••Vñ!s3`^3ÔG|t1"ÉíWVz™^s¿ÿzQ5²6?(“µº^Z¨?kq¸i²“2¹ž( zÒBŸžˆ©I3”Þ´Þsà ª@UÕQš¹i¶ª+¶)µ’«šîè’'íyèÍ4]\ö’šz³Íœ(›úf«Í#*9>U¬:°[(Ž;ÉZ©Âõ­4‡•¦ÂBûJãBu‡?«m­z¥u¡uè}Í_¯oW†òм)ÿRÍ®^RæèžqKÂ1Ò~ÓYÇ‹µÅ GEZã)oꢠH¾ä ÅJYFÈs|Ü”Åü%Ü?QÌP7ØbŸseØzèQyÍUeDs{«õ¦ŸcæK{è‘'IEND®B`‚ pix[224]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1078z£è.IDATH‰íÔËmÄ à!HË‘(…VÒ ”F)”Àq"!È­3f••Vñ!s3`^3ÔG|t1"ÉíWVz™^s¿ÿzQ5²6?(“µº^Z¨?kq¸i²“2¹ž( zÒBŸžˆ©I3”Þ´Þsà ª@UÕQš¹i¶ª+¶)µ’«šîè’'íyèÍ4]\ö’šz³Íœ(›úf«Í#*9>U¬:°[(Ž;ÉZ©Âõ­4‡•¦ÂBûJãBu‡?«m­z¥u¡uè}Í_¯oW†òм)ÿRÍ®^RæèžqKÂ1Ò~ÓYÇ‹µÅ GEZã)oꢠH¾ä ÅJYFÈs|Ü”Åü%Ü?QÌP7ØbŸseØzèQyÍUeDs{«õ¦ŸcæK{è‘'IEND®B`‚ pix[225]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1063ôjÎ_IDATH‰íÔ;N1 PG‘Hƒ6íV¤äæ(’iBEɸJ:ŽA$ ÚP‰(ÆÉ~Ю3Óñ)vKyã™ØV´ðx8éIWŸÕ.iý1%ü½ªHÙ£×f¤¨©€%@©)e0í…cÍüIJ 3h¡±ëA¥±VÖ¬j X!:§âM€E%ç‹è…V“,Ô¦“¨(`6y¥Èú)Ì+ÁŒÚ|¶¤6ŠB£K¬ÌK ŽæfÕŒ“kªùË}H8RµÕj5n}Ó¬ºVÞuM£ÜamWÉv£©â1ÂFIªÞëq'“«Ó35•½jÚ"ÜŒrãNoázA§—`ç•2«•¼ì*wåù{™»×wòŽ>¥öÑèx9¨×cÙh0²Þºk1á\æ€ÚÇjà“¼6õ±²Ê3¸S>¤ƒóËJ-N ŒÐxôÆñ¾ß¢"z¤ë÷ÒŸÝ“_3¶BeïïÁIEND®B`‚ pix[226]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1077êõ–_IDATH‰íÔ;N1 PG‘Hƒ6íV¤äæ(’iBEɸJ:ŽA$ ÚP‰(ÆÉ~Ю3Óñ)vKyã™ØV´ðx8éIWŸÕ.iý1%ü½ªHÙ£×f¤¨©€%@©)e0í…cÍüIJ 3h¡±ëA¥±VÖ¬j X!:§âM€E%ç‹è…V“,Ô¦“¨(`6y¥Èú)Ì+ÁŒÚ|¶¤6ŠB£K¬ÌK ŽæfÕŒ“kªùË}H8RµÕj5n}Ó¬ºVÞuM£ÜamWÉv£©â1ÂFIªÞëq'“«Ó35•½jÚ"ÜŒrãNoázA§—`ç•2«•¼ì*wåù{™»×wòŽ>¥öÑèx9¨×cÙh0²Þºk1á\æ€ÚÇjà“¼6õ±²Ê3¸S>¤ƒóËJ-N ŒÐxôÆñ¾ß¢"z¤ë÷ÒŸÝ“_3¶BeïïÁIEND®B`‚ pix[227]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1062ƒm0XcIDATH‰íÔ1N!à!4&{ã\Áòux, ØÊkñ*¯ÁÖØLA‡}Fß“â+j—/»ÃþÀËs„!Ò\q¦R×(…ëõ'}ÿõéÛTS]å:Œ4fð#Ã.n¬Ž³ÜU ¬Ü‚ЩôÝn,ø °S2œ½­}’ößµNÁ›PU+º’Ëør6ï =Ò’}»T4rÚp›©—s­ëÊIÞ+¥ªÌ:‰>õAÔêo…{d3V‰ôïÝÕ0<öY•QÕFÅÕ“Êù‘bœ©Ï>Ž5dµ/ï»*ß2gúTû4¾Ô呯oêsÞÕ4Å2ÒÔ´_£"jªhÒ´’u×ö{ƒZüÕf/ª=+?9Éñk÷EMÓAN‚¬}í²*MaÙh)J΀pCŽz•óIà ØbN[þRÛã¡‚“AÓöÈXG*õz9Òÿ'³)ù™ž×/ê;SkDÜúhõIEND®B`‚ pix[228]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1076ÅcIDATH‰íÔ1N!à!4&{ã\Áòux, ØÊkñ*¯ÁÖØLA‡}Fß“â+j—/»ÃþÀËs„!Ò\q¦R×(…ëõ'}ÿõéÛTS]å:Œ4fð#Ã.n¬Ž³ÜU ¬Ü‚ЩôÝn,ø °S2œ½­}’ößµNÁ›PU+º’Ëør6ï =Ò’}»T4rÚp›©—s­ëÊIÞ+¥ªÌ:‰>õAÔêo…{d3V‰ôïÝÕ0<öY•QÕFÅÕ“Êù‘bœ©Ï>Ž5dµ/ï»*ß2gúTû4¾Ô呯oêsÞÕ4Å2ÒÔ´_£"jªhÒ´’u×ö{ƒZüÕf/ª=+?9Éñk÷EMÓAN‚¬}í²*MaÙh)J΀pCŽz•óIà ØbN[þRÛã¡‚“AÓöÈXG*õz9Òÿ'³)ù™ž×/ê;SkDÜúhõIEND®B`‚ pix[229]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1061daâ3IDATH‰íÔ=J1à §Œ7ˆG°´ËU¾#XZ™=WÊQâ "6Bæ›,*,ù´±Øm–ðÂLòðâ#8õÔS«n¦ €éõ…«,ƒÊ#­È<ˆb§Es[ž{+hN`åÐÇÑ&#Ý4‹†Ìîl¯ÈT0™x±©«·4­˜l¼¸^Yt«:ºè£ï4#+ÖÁqä0Q%ðÆûn kÞDß™FZ5S¸•Z·^ó®$eÏ@±œ0UX«¯¸PW†Zš"­ÔEWÌBmž«ÿI“]iü‹ºi7DÃpï~ƒnªŠ!Nµ½QGsµa¦PU2äZs{í:ÝÀH%µLÏzÿ Õhc©ïFÓØTÍÕ´å˜A0’}&ó”cE|T¯,QéµUu\þ¯û­Wm¾NVu{[VIEND®B`‚ pix[230]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1075”º3IDATH‰íÔ=J1à §Œ7ˆG°´ËU¾#XZ™=WÊQâ "6Bæ›,*,ù´±Øm–ðÂLòðâ#8õÔS«n¦ €éõ…«,ƒÊ#­È<ˆb§Es[ž{+hN`åÐÇÑ&#Ý4‹†Ìîl¯ÈT0™x±©«·4­˜l¼¸^Yt«:ºè£ï4#+ÖÁqä0Q%ðÆûn kÞDß™FZ5S¸•Z·^ó®$eÏ@±œ0UX«¯¸PW†Zš"­ÔEWÌBmž«ÿI“]iü‹ºi7DÃpï~ƒnªŠ!Nµ½QGsµa¦PU2äZs{í:ÝÀH%µLÏzÿ Õhc©ïFÓØTÍÕ´å˜A0’}&ó”cE|T¯,QéµUu\þ¯û­Wm¾NVu{[VIEND®B`‚ pix[231]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1060mcQtQIDATH‰íÔ=NÅ0 `[Aê‚ÈúôrF&z•w„”0q­p“H\ c†(Æé(Ø©ž Cò)v] Q«žŒuÞÕý±»Êíï©¿@/Y÷_6£ëQôTø5ÎR_‰ÀQßÀ mH•»#¸“ЀԻ¸¬(t5àMó 6Œ.TM«I6>JåuÓ eÊ.4© ùœ¡ØâPQ>Qða±Õ#½Èht‹ýËï+ÅÓÍ\Ç `ê&TÛ]AW(°©Y¡÷̱@ÏàY¹ÉmUUWÌwCX+jÊy[€“¼£f¬îR]ÃÉõ¹kÞÑeUe]Ãù=«Uó”¯P×èù{N×Xeœ¸ª‰G¾|ÕÖËë+ß`ùeÒ-fåÛàAœ¼^¡>Œ´Ww'µ'1séCf±g^­ò âx/t}þèVT¶Ôw­.qÍQ=IEND®B`‚ pix[232]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1074s¤,QIDATH‰íÔ=NÅ0 `[Aê‚ÈúôrF&z•w„”0q­p“H\ c†(Æé(Ø©ž Cò)v] Q«žŒuÞÕý±»Êíï©¿@/Y÷_6£ëQôTø5ÎR_‰ÀQßÀ mH•»#¸“ЀԻ¸¬(t5àMó 6Œ.TM«I6>JåuÓ eÊ.4© ùœ¡ØâPQ>Qða±Õ#½Èht‹ýËï+ÅÓÍ\Ç `ê&TÛ]AW(°©Y¡÷̱@ÏàY¹ÉmUUWÌwCX+jÊy[€“¼£f¬îR]ÃÉõ¹kÞÑeUe]Ãù=«Uó”¯P×èù{N×Xeœ¸ª‰G¾|ÕÖËë+ß`ùeÒ-fåÛàAœ¼^¡>Œ´Ww'µ'1séCf±g^­ò âx/t}þèVT¶Ôw­.qÍQ=IEND®B`‚ pix[233]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1059?’ºhIDATH‰íÓ¿NÃ0ð/²Tw"+CÕ¼F'üJŒ Umăð(u'Æ>îÔÕcŒsË¿¦ç,°pS”ŸbŸï‹A#åð¯5Ýþö¾/?¶ò_ézT͘æQ½¨« õUhîK£¥ÐVÕ[òºªÎ’S”¬¬° …e'i†Mù…îQµ·îNEYû6X—Dåžû.š&ë kdUEA)šx£¨ Vk(:×åA8o `âlLûY[QÐÚ·›¢Ó h7Ôç£Ú~ ØÍP¿©ñ°çêË´X[sªë =ÚªFV}ªô©*)a’GÕY¹,¤àÚfuObFïú@R¾‡±îyQcQ’”3bÕE}E¯j%5qÁº•tÇ:)%k4a©’nÊ•ê†Õ³N©gPìüJõW5mݪ‰¬Â¬â¾× `iÎô”øŠ’¨™ƒu0¸ò-[k àW¿QÊRßG'ë¡ÂðŸ<-GcJ¯oÊŽO3R´IEND®B`‚ pix[234]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1073íq1hIDATH‰íÓ¿NÃ0ð/²Tw"+CÕ¼F'üJŒ Umăð(u'Æ>îÔÕcŒsË¿¦ç,°pS”ŸbŸï‹A#åð¯5Ýþö¾/?¶ò_ézT͘æQ½¨« õUhîK£¥ÐVÕ[òºªÎ’S”¬¬° …e'i†Mù…îQµ·îNEYû6X—Dåžû.š&ë kdUEA)šx£¨ Vk(:×åA8o `âlLûY[QÐÚ·›¢Ó h7Ôç£Ú~ ØÍP¿©ñ°çêË´X[sªë =ÚªFV}ªô©*)a’GÕY¹,¤àÚfuObFïú@R¾‡±îyQcQ’”3bÕE}E¯j%5qÁº•tÇ:)%k4a©’nÊ•ê†Õ³N©gPìüJõW5mݪ‰¬Â¬â¾× `iÎô”øŠ’¨™ƒu0¸ò-[k àW¿QÊRßG'ë¡ÂðŸ<-GcJ¯oÊŽO3R´IEND®B`‚ pix[235]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1058H•Š…dIDATH‰íÔ±N!Ð!ØaiÇ/XZ\¯øaãø þ  ƒÎ–’‚07ìžñ<s±q“Ýlòv`–d¯äÚÓÃ@ñj:Ÿw®vªæZšõLËTëTq®¯SÅýµ~Nõ}¨­%^†ÕP%"Ð-XÍ€¯¸ô£Ôel–¼æ¦&iÀ¨×èïu2s¯H÷:Ú§™ªŠŽv¯b¨4rUÒÈdÕe@^sS០^%.þQãa¬ p©÷TÉj!ª‚ZU'}ž¨ö;=VvÚsÚ²ï ôZ¶ØU]§u‹un@wŠ[,)ЊtúQgŠ›¦“¾]ªhY}©f4Øt `†-®d{]bSßÿ/¶ý³DC}–W‘Lpy·S@™¨‰[+z­2SõGº—e¬áA¶ÝÍ« ´Ht2d6g)(|Wà‡VÕ†,8Òr6d¯õ¬eúyÑ_âßÞGbhVÂxhGIEND®B`‚ pix[236]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1072švdIDATH‰íÔ±N!Ð!ØaiÇ/XZ\¯øaãø þ  ƒÎ–’‚07ìžñ<s±q“Ýlòv`–d¯äÚÓÃ@ñj:Ÿw®vªæZšõLËTëTq®¯SÅýµ~Nõ}¨­%^†ÕP%"Ð-XÍ€¯¸ô£Ôel–¼æ¦&iÀ¨×èïu2s¯H÷:Ú§™ªŠŽv¯b¨4rUÒÈdÕe@^sS០^%.þQãa¬ p©÷TÉj!ª‚ZU'}ž¨ö;=VvÚsÚ²ï ôZ¶ØU]§u‹un@wŠ[,)ЊtúQgŠ›¦“¾]ªhY}©f4Øt `†-®d{]bSßÿ/¶ý³DC}–W‘Lpy·S@™¨‰[+z­2SõGº—e¬áA¶ÝÍ« ´Ht2d6g)(|Wà‡VÕ†,8Òr6d¯õ¬eúyÑ_âßÞGbhVÂxhGIEND®B`‚ pix[237]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1057Ø*— IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[238]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1071P£ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[239]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1056¯-§‚RIDATH‰íÔ=NÅ0 ðU‰,H¹¹ÂWbdK8‘8WÈ2zˆbÜòB/N%>†—­þÉmÛ¬„«þ¡¾ýË]]õ÷Ú¿[Hª1§!'ÅÚ½0¤c•´ŒÚ¼Ć¥qÐê%ƒxWºT†×Gª·hÁÔÊ8äA«ê¡˜Š·rWö9>×Pmð}mª¯–JÙÔ%ý†¥Õ·“z[]_Óö’©¢ÎrÙõð5ä‰X™Òp›ú]5lh`/ªZ¾DSÕÐX£³Þl*3%ÄnôÆIcмNUR¬Fשº-áH3ÙÚ7¥ô4õa‘C÷ Æt¿ŠQ£]SLO®js†v×꣖rжžÌ„GíSÙé¤CyŸ¯” ­ú«ÐvÄb©&QB`¬3ÕénpªÁÒê–Ö]Er,ƽÁãE¾®‹Ûìt¾½X?P:Ôø©ïi1¸Yr]oIEND®B`‚ pix[240]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1070tx`5RIDATH‰íÔ=NÅ0 ðU‰,H¹¹ÂWbdK8‘8WÈ2zˆbÜòB/N%>†—­þÉmÛ¬„«þ¡¾ýË]]õ÷Ú¿[Hª1§!'ÅÚ½0¤c•´ŒÚ¼Ć¥qÐê%ƒxWºT†×Gª·hÁÔÊ8äA«ê¡˜Š·rWö9>×Pmð}mª¯–JÙÔ%ý†¥Õ·“z[]_Óö’©¢ÎrÙõð5ä‰X™Òp›ú]5lh`/ªZ¾DSÕÐX£³Þl*3%ÄnôÆIcмNUR¬Fשº-áH3ÙÚ7¥ô4õa‘C÷ Æt¿ŠQ£]SLO®js†v×꣖rжžÌ„GíSÙé¤CyŸ¯” ­ú«ÐvÄb©&QB`¬3ÕénpªÁÒê–Ö]Er,ƽÁãE¾®‹Ûìt¾½X?P:Ôø©ïi1¸Yr]oIEND®B`‚ pix[241]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment10556$ö8-IDATH‰íÔ=nÅ `G ^*qnò¸JÑ¡*DÞµèÔ±Wàtc@¸Nx•ž‚¡j—.aI¢OæÇØš §žzê¯ôcªWªü‘µ¨©€£¨DMH ù…HwZ)±PÁN (Šº¸Øke ¬ ^ WÚÔaÑáYҤȓÊFÖªh¥×lbi¡5ÙO åt ZvŽßúlõí¨¼/f£n×ô.Å'%‹ë6]šw…–¦n23z+injÂLÝ\£¬z¦å[Í_Õ»4PÚïh˺ü v´g® í šÖ:ÒÌUì+&ã¥;Ê6LšÏ$ª OȲFЖÌÅsÔÂÊÝͺ­qÔz»ý`›Üt'Úã-=RnÑÛîEmk´.èÝø7ý¾}a¯yØ:IEND®B`‚ pix[242]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1069¿éÐ-IDATH‰íÔ=nÅ `G ^*qnò¸JÑ¡*DÞµèÔ±Wàtc@¸Nx•ž‚¡j—.aI¢OæÇØš §žzê¯ôcªWªü‘µ¨©€£¨DMH ù…HwZ)±PÁN (Šº¸Øke ¬ ^ WÚÔaÑáYҤȓÊFÖªh¥×lbi¡5ÙO åt ZvŽßúlõí¨¼/f£n×ô.Å'%‹ë6]šw…–¦n23z+injÂLÝ\£¬z¦å[Í_Õ»4PÚïh˺ü v´g® í šÖ:ÒÌUì+&ã¥;Ê6LšÏ$ª OȲFЖÌÅsÔÂÊÝͺ­qÔz»ý`›Üt'Úã-=RnÑÛîEmk´.èÝø7ý¾}a¯yØ:IEND®B`‚ pix[243]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1054A#Æ®IDATH‰íÕMNÄ ð?’Ø 0yÞ„9ÊœD:qá1¼JÍÀ+`\¸”Ùa‚àƒ™ŒNŽ;cÓôëׯ}R *íBª¶åJîÆt4Bóº£AòÁÉ^Ëwù°ééö¼n{Zèû˜—Õ,ioû×?¨¡¯V§‘æúv¼W¹¦Nôc¯aà’xo¶ìDò²VNZ‹ä 뚦[iõ4×GŠp4¦{VÝRáÕ&­¦éfÒv®[Ÿ5”æÊ…Õ¶”?cÖ €FíZê‡`XT‰ZwGEC_ŠÆƒª5•û¥E5‹Êz9iÎi5f³¤ñ‡Š-c^µÿà>ÞqEm•A²®©ÊVŠÂR•u{õüëáÔØÕ+ᘆƬ¥Êš*œ²YŸÒë©ZÉU¦JÐ3ågº¨Šêö9“A¥ë™ÁÕ‘o'jêÄë3O>ï©¥Ú~…R÷«ƒH —h¬³¿6{J÷çª%lÅIEND®B`‚ pix[244]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1068c¸ÙFIDATH‰íÕMNÄ ð?’Ø 0yÞ„9ÊœD:qá1¼JÍÀ+`\¸”Ùa‚àƒ™ŒNŽ;cÓôëׯ}R *íBª¶åJîÆt4Bóº£AòÁÉ^Ëwù°ééö¼n{Zèû˜—Õ,ioû×?¨¡¯V§‘æúv¼W¹¦Nôc¯aà’xo¶ìDò²VNZ‹ä 뚦[iõ4×GŠp4¦{VÝRáÕ&­¦éfÒv®[Ÿ5”æÊ…Õ¶”?cÖ €FíZê‡`XT‰ZwGEC_ŠÆƒª5•û¥E5‹Êz9iÎi5f³¤ñ‡Š-c^µÿà>ÞqEm•A²®©ÊVŠÂR•u{õüëáÔØÕ+ᘆƬ¥Êš*œ²YŸÒë©ZÉU¦JÐ3ågº¨Šêö9“A¥ë™ÁÕ‘o'jêÄë3O>ï©¥Ú~…R÷«ƒH —h¬³¿6{J÷çª%lÅIEND®B`‚ pix[245]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1053ßGS ”IDATH‰ÝÔ±NÃ0àßò॒;Tõ+0vË«ðŒ •âÇÂÀ+1°ZbÀUƒsÓ¦;¨%Ÿ|gÇwÆ=Õ†E×èìR¸@÷³:Ÿ÷ÇZMú yÿ‹î]½É×Ý #…œV‘€±žGº íy` ´5 hp'Ñkî OlXoµkŽïÎ59Ö`ú-Ôj~ÐÂW4BS éM(4dŠS:tME§\K®‰5M"É å¼IžTköº“Id5 õóÊ[žR‚‡p:L+œö²ÐxÒåfôZ¢Ô>²[à ˜Êëš9µ­]ÎÌ%·ªiÔ‘õ™?6UY_¸\F¾iŽ|è“^]UõQm©>k_9oT¨mýZ•uÅšX¹ÞWÒÏèR8SSÁj켞A;uVþÀ¥§£’°ëS‡~Lè¤]d¥R%Ù­äL¥.yAP\u4ÑYùoÁ ¨"W5…FV.掛mG5U†Fÿ ‘Æa£µÈiØhE =Ò„RúN¯Z¦ŸSôYö`ç‡IEND®B`‚ pix[246]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1067óÄ×”IDATH‰ÝÔ±NÃ0àßò॒;Tõ+0vË«ðŒ •âÇÂÀ+1°ZbÀUƒsÓ¦;¨%Ÿ|gÇwÆ=Õ†E×èìR¸@÷³:Ÿ÷ÇZMú yÿ‹î]½É×Ý #…œV‘€±žGº íy` ´5 hp'Ñkî OlXoµkŽïÎ59Ö`ú-Ôj~ÐÂW4BS éM(4dŠS:tME§\K®‰5M"É å¼IžTköº“Id5 õóÊ[žR‚‡p:L+œö²ÐxÒåfôZ¢Ô>²[à ˜Êëš9µ­]ÎÌ%·ªiÔ‘õ™?6UY_¸\F¾iŽ|è“^]UõQm©>k_9oT¨mýZ•uÅšX¹ÞWÒÏèR8SSÁj켞A;uVþÀ¥§£’°ëS‡~Lè¤]d¥R%Ù­äL¥.yAP\u4ÑYùoÁ ¨"W5…FV.掛mG5U†Fÿ ‘Æa£µÈiØhE =Ò„RúN¯Z¦ŸSôYö`ç‡IEND®B`‚ pix[247]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1052¨@c›ÈIDATH‰íÔ±nÛ0àŸ*.I´f( W𘡰^¥à1C Èä• äüaáÁcXdQš×;)J%’Ö` h‡¶aøÓÎÇ£@ «ÅßÕ·Róë¿þq}=¥‡|¬}hø³ƒIõ™ô0MªŠ<Ô Þ¢¢§H8%n€Š_ô)qu hz|™+F½„Ó´ŸÇVÛg¾T¾à~FPâ–/(zufžÙsAàVÑ.ªêUÛU¡t–™S¯pÕnjòCæcFW¬CUq7ê¬ètF¿‹Âx¬rz£òÒ«Tw½ª.Q#Z£a•¿\ebÑÕ9jp/z“«ÊƒDµìoÚ QÎ\Yž uZ¯å2¼"<+±EªèÕ¸’û1×Z´†i?‘+‹)?ÌOß׸‹‚bÝZm˼jésÑ^èQ£þ¡ä@¨vÌÜ5~ÚIîQ eñ®VQ¤üæäCÍô6éGöKy5ÄL¦}TlÔXèä¤(Þ¿¯rÊÒ=’ÛÚ~lÖ'Tw:³ûïú™jfrDï$­¢mæ©ÂúMÒjr›ÿ[y¤ø c Mªý–ækþ$tËjÎí5^S}YÔÝbæeÍÜ÷åÈÇ“)"âIEND®B`‚ pix[248]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1066„ôAÈIDATH‰íÔ±nÛ0àŸ*.I´f( W𘡰^¥à1C Èä• äüaáÁcXdQš×;)J%’Ö` h‡¶aøÓÎÇ£@ «ÅßÕ·Róë¿þq}=¥‡|¬}hø³ƒIõ™ô0MªŠ<Ô Þ¢¢§H8%n€Š_ô)qu hz|™+F½„Ó´ŸÇVÛg¾T¾à~FPâ–/(zufžÙsAàVÑ.ªêUÛU¡t–™S¯pÕnjòCæcFW¬CUq7ê¬ètF¿‹Âx¬rz£òÒ«Tw½ª.Q#Z£a•¿\ebÑÕ9jp/z“«ÊƒDµìoÚ QÎ\Yž uZ¯å2¼"<+±EªèÕ¸’û1×Z´†i?‘+‹)?ÌOß׸‹‚bÝZm˼jésÑ^èQ£þ¡ä@¨vÌÜ5~ÚIîQ eñ®VQ¤üæäCÍô6éGöKy5ÄL¦}TlÔXèä¤(Þ¿¯rÊÒ=’ÛÚ~lÖ'Tw:³ûïú™jfrDï$­¢mæ©ÂúMÒjr›ÿ[y¤ø c Mªý–ækþ$tËjÎí5^S}YÔÝbæeÍÜ÷åÈÇ“)"âIEND®B`‚ pix[249]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment10511I2!RIDATH‰íÕ±nà à1xäxn¨ï òd%êб/Ð)CVGBÄõâÊImC:tÉ­ŸÀLJApxêSÿ¢ÇKKûáØÒË{K飥ö³¹öW|ÁÔ5¢¥= ç:Æ@[^(ʪö–)”4Ë}„ MòÔC—õLA’‡bò͸©pf¹sDGî¥ Þx[RÄ.l”'OEM2XÚ‘+iùG·+MW%1ª\)õ“îK»,G¥†r÷rWÒ$‰Ë¨(5TRRu\+Š =wE=× &øÔÕÀ¬TNYÁ:zÏät]yíMíD†ÂÃjY]MñZUî/Ÿ(èë õõµÆ›G”yH\]4lM“äRQ¹é¹ÒM€òè<Æ‚•U…²ò;Ĥ"ߨqßè´P~òí£<1ó,niæªIÐ,îš5­â¿ÿ)ý÷Á7ׅϪIEND®B`‚ pix[250]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1065 ¥ûRIDATH‰íÕ±nà à1xäxn¨ï òd%êб/Ð)CVGBÄõâÊImC:tÉ­ŸÀLJApxêSÿ¢ÇKKûáØÒË{K飥ö³¹öW|ÁÔ5¢¥= ç:Æ@[^(ʪö–)”4Ë}„ MòÔC—õLA’‡bò͸©pf¹sDGî¥ Þx[RÄ.l”'OEM2XÚ‘+iùG·+MW%1ª\)õ“îK»,G¥†r÷rWÒ$‰Ë¨(5TRRu\+Š =wE=× &øÔÕÀ¬TNYÁ:zÏät]yíMíD†ÂÃjY]MñZUî/Ÿ(èë õõµÆ›G”yH\]4lM“äRQ¹é¹ÒM€òè<Æ‚•U…²ò;Ĥ"ߨqßè´P~òí£<1ó,niæªIÐ,îš5­â¿ÿ)ý÷Á7ׅϪIEND®B`‚ pix[251]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1050FN·fIDATH‰íÔ;NÄ0àßD"C¹ÅJÞ#p„¯²G ¤@ÄTc¯bn’`:V†±Ãc7¶Ó!´VŠ$Ÿ”Œçaðʲ8ëYÿ¯NæûŽVµ/5Îjë:f`Jõò¤'@hæåGfP!tX(†ˆ^”úbG.i×R‹!@¥/ÛûªúYjÊž¬èŠIß–:jz÷¤"ê²>OË~yXìˆvô™¦\†#µ¢ã­æ8k_SâÐg~)ÔdÅq¤G:Œ[¨©©MªDuS!Jm½A¥ ³n€k k+[šª«¢*Y¥oº©¥íÑ7ukÖTK"A]Š9´bvƒ[×°«gÙ¬ª–IéIcwä/êªížÆ+øRs·cO–jõ•ªz‚¿9*{CHùtÁز¯’†Ür²i³Ty-ã™&”G uíäTáð•ŒÓ¨& 6 ¡ÔgGlMÔŸuzš½§£¬©i½®*ÿýçõ!MgÓ}IEND®B`‚ pix[252]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1064j•mfIDATH‰íÔ;NÄ0àßD"C¹ÅJÞ#p„¯²G ¤@ÄTc¯bn’`:V†±Ãc7¶Ó!´VŠ$Ÿ”Œçaðʲ8ëYÿ¯NæûŽVµ/5Îjë:f`Jõò¤'@hæåGfP!tX(†ˆ^”úbG.i×R‹!@¥/ÛûªúYjÊž¬èŠIß–:jz÷¤"ê²>OË~yXìˆvô™¦\†#µ¢ã­æ8k_SâÐg~)ÔdÅq¤G:Œ[¨©©MªDuS!Jm½A¥ ³n€k k+[šª«¢*Y¥oº©¥íÑ7ukÖTK"A]Š9´bvƒ[×°«gÙ¬ª–IéIcwä/êªížÆ+øRs·cO–jõ•ªz‚¿9*{CHùtÁز¯’†Ür²i³Ty-ã™&”G uíäTáð•ŒÓ¨& 6 ¡ÔgGlMÔŸuzš½§£¬©i½®*ÿýçõ!MgÓ}IEND®B`‚ pix[253]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1049&‰‹R…IDATH‰íÔÍJÄ0ð ëÉ\=ñöļ˜¼‰¯ðE¼æ°tv¦év·ù¨¢àAœÃ.ô×ÒÉäŸý¡­Éο?PìèWºú#úÒÕÉ`U[“F/ÑƒŠ j  kÒç o4‚æÁÃ\•ЀÍjJq0Ÿ©l)½7×Y[]%Hj»Òt‚¢¥:Û˜†×AÅ[RßšU`½–{zµû,Ø™Ž&^›—[©×¬Æ*4Òö-ª= …:µªª§A·Ÿ”fUìþH·Ÿ´žs¢Û}p_hXUDŽ€í¨äSí¶ÊA˪ø%…ºU) ¯è+µ³ jÿ ½é¨¹…–S…úU«k*ï/©mjÜQGzz˜ "ñ¨ÖKuàÞŠ]È:ÝÆf½¸kíþª”_&ÇÃRÏ”ºP¦.œ”?#6¤#S)=®Ä¤p¸UD3<×Y'ÒQá¦.Ò$޶«(±¬K}Ïm­ëû:Ù]5îßà¶ŽQ«aIEND®B`‚ pix[254]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1063ôjÎ…IDATH‰íÔÍJÄ0ð ëÉ\=ñöļ˜¼‰¯ðE¼æ°tv¦év·ù¨¢àAœÃ.ô×ÒÉäŸý¡­Éο?PìèWºú#úÒÕÉ`U[“F/ÑƒŠ j  kÒç o4‚æÁÃ\•ЀÍjJq0Ÿ©l)½7×Y[]%Hj»Òt‚¢¥:Û˜†×AÅ[RßšU`½–{zµû,Ø™Ž&^›—[©×¬Æ*4Òö-ª= …:µªª§A·Ÿ”fUìþH·Ÿ´žs¢Û}p_hXUDŽ€í¨äSí¶ÊA˪ø%…ºU) ¯è+µ³ jÿ ½é¨¹…–S…úU«k*ï/©mjÜQGzz˜ "ñ¨ÖKuàÞŠ]È:ÝÆf½¸kíþª”_&ÇÃRÏ”ºP¦.œ”?#6¤#S)=®Ä¤p¸UD3<×Y'ÒQá¦.Ò$޶«(±¬K}Ïm­ëû:Ù]5îßà¶ŽQ«aIEND®B`‚ pix[255]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1048QŽ»ÄgIDATH‰åÓ;nÃ0 PÔ¡¨zõ¹®Ô1›XdèµtÈ1ª¢·¨`–Š ‰>C3tˆÃždJ Ü÷¤ä{šºú÷¸ß]ý¸A77讫|®?]í¯½?žÉÌŸ¶Tò<*`xZ&W]pŒƒLWœt±6€›ê:ÕgUM‹R©(ªG×PYMV͡ԎL°*O,•Ñ“¡žÚY±ªÁ’É M˜ÚªÞ[:ŠÂÀ©¡r&Á´ÕQ[LSã“d2´ÕVmz\Ù¶*|Íz¨jRH-5œ¤V\)W€—œ+yÆâ¼Y%›rQöðVWðY·›k}4'%·ý¼¼AGú¤ézWÁÐiÑbÏ¢Ï*æN«(ØEU© 59®”4B(²±GºÁµ’FÀR%`-·?AñgQ•ÛtÌÕe\8’œ67j]yùš" 9 æz.uÿµá¹w§ŠæAn~ïªz=þM‰ô)&`Ê™IEND®B`‚ pix[256]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1062ƒm0XgIDATH‰åÓ;nÃ0 PÔ¡¨zõ¹®Ô1›XdèµtÈ1ª¢·¨`–Š ‰>C3tˆÃždJ Ü÷¤ä{šºú÷¸ß]ý¸A77讫|®?]í¯½?žÉÌŸ¶Tò<*`xZ&W]pŒƒLWœt±6€›ê:ÕgUM‹R©(ªG×PYMV͡ԎL°*O,•Ñ“¡žÚY±ªÁ’É M˜ÚªÞ[:ŠÂÀ©¡r&Á´ÕQ[LSã“d2´ÕVmz\Ù¶*|Íz¨jRH-5œ¤V\)W€—œ+yÆâ¼Y%›rQöðVWðY·›k}4'%·ý¼¼AGú¤ézWÁÐiÑbÏ¢Ï*æN«(ØEU© 59®”4B(²±GºÁµ’FÀR%`-·?AñgQ•ÛtÌÕe\8’œ67j]yùš" 9 æz.uÿµá¹w§ŠæAn~ïªz=þM‰ô)&`Ê™IEND®B`‚ pix[257]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1047Á1¦UkIDATH‰íÔ;ND!àŸ ´&lÃŽmMf —1[ÁÊmÐÙ’XHAîñ03>" •Þêæ~¼îùÐâ‰øãºù•Ö¥¶¥Røþªþ•èég#÷pŽS-žª™i…§¬Wš@YÖG€OP”¤¾nÓ¹kãvê"kqªÂŒš]3]uµ°VËšy걯¯¶Ú»l20U¢äD-¶5Iyæ«~¥IÒÄúpz‘4²&ÇaÍUQ ‚&ß«•ÀëVuÖØ#ÀLKÆÿ=éN%³aªº˜&Õ™Õ·­z¢ÅWsl¬B‚¬®Zj¼s„ô/º)5¼)–e-7v®¶\›®i¨ÆKdÍ]ïiÌ(÷U¾5MiQ¹ˆ]¹c‚ ¨&íu*°çs")ŸŽ®©´ öóÁ \IJ•GTÜÝq“ðòUûܺìž-®_Ò¿L¯ùÓTI÷ºLõ‘oáÞxoé¹~”JÔVúi”ßÓWÂëI oI¡IEND®B`‚ pix[258]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1061daâkIDATH‰íÔ;ND!àŸ ´&lÃŽmMf —1[ÁÊmÐÙ’XHAîñ03>" •Þêæ~¼îùÐâ‰øãºù•Ö¥¶¥Røþªþ•èég#÷pŽS-žª™i…§¬Wš@YÖG€OP”¤¾nÓ¹kãvê"kqªÂŒš]3]uµ°VËšy걯¯¶Ú»l20U¢äD-¶5Iyæ«~¥IÒÄúpz‘4²&ÇaÍUQ ‚&ß«•ÀëVuÖØ#ÀLKÆÿ=éN%³aªº˜&Õ™Õ·­z¢ÅWsl¬B‚¬®Zj¼s„ô/º)5¼)–e-7v®¶\›®i¨ÆKdÍ]ïiÌ(÷U¾5MiQ¹ˆ]¹c‚ ¨&íu*°çs")ŸŽ®©´ öóÁ \IJ•GTÜÝq“ðòUûܺìž-®_Ò¿L¯ùÓTI÷ºLõ‘oáÞxoé¹~”JÔVúi”ßÓWÂëI oI¡IEND®B`‚ pix[259]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1046¶6–ÃsIDATH‰íÔANÄ àŸÁ„ñy®áj¸˜±ÜÀ#ÌU8 ‰À‰¤ø N+´+Ý »öƒö½¿Päƒaq×»Þu«ÉiÐ9Ñ®:Ê^ìi• ÏËiÔ³ƒƒÊ =µ ²§#`,DvT³žô[#t^Âó¤¦#«“¬êž–²nêuTéÌŽFBÖÖØöÉ^VN Æu•¢*ªÿ\=%É)r$}²D­»MªÝ¹“UÕ@ß©Í9;Íyü}ãJÖa¥_k ’7Q^i07•Qä 6ZKt†õ¤’È^­5Ò²V«Ý캑F3«Ê#òÒîTóǬT5-%ÏC}/u)š·:WEáAˆbG=äȧV­ E¼Šm’E]Q§C£:’{E}GET¬5¹F¸¼–S„Í7ºê;+À =ƒ“¾U=åÓ͇ô±§Ÿ <á³_×K¾>—­ÕÓÀ?¥òöö¯r¾µ¯åÃ‘ÞÆ?êBƒI' ŠIEND®B`‚ pix[260]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1060mcQtsIDATH‰íÔANÄ àŸÁ„ñy®áj¸˜±ÜÀ#ÌU8 ‰À‰¤ø N+´+Ý »öƒö½¿Päƒaq×»Þu«ÉiÐ9Ñ®:Ê^ìi• ÏËiÔ³ƒƒÊ =µ ²§#`,DvT³žô[#t^Âó¤¦#«“¬êž–²nêuTéÌŽFBÖÖØöÉ^VN Æu•¢*ªÿ\=%É)r$}²D­»MªÝ¹“UÕ@ß©Í9;Íyü}ãJÖa¥_k ’7Q^i07•Qä 6ZKt†õ¤’È^­5Ò²V«Ý캑F3«Ê#òÒîTóǬT5-%ÏC}/u)š·:WEáAˆbG=äȧV­ E¼Šm’E]Q§C£:’{E}GET¬5¹F¸¼–S„Í7ºê;+À =ƒ“¾U=åÓ͇ô±§Ÿ <á³_×K¾>—­ÕÓÀ?¥òöö¯r¾µ¯åÃ‘ÞÆ?êBƒI' ŠIEND®B`‚ pix[261]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1045/?ÇyeIDATH‰íÕ;N1ÐY¹p‡/€ð()†#å»Ñ)s„\ÅEJn@\Aw¸0Æ@B™1¢¢‰·ð¬žíõ–”<}¥ùøNpÊ£«T¡yÛÒ™¾ yÌ‹¾Ò¹Ò\*Ü7ÝKJÜpEΞdýL‡®ÒE/ú›¾ÿE—-©¶œ‘ê¨i; ÉjšXã +¶×ìT#8I3`…‡1€¡‚ç}ž°š„J‚F,6/ 5IÖ첟:Zü:Ù(iÀä³›Ocµ4-]åHÐ1žZÖ³íi±Y§¥n€žòbèê o‚0júÌë«ê• š†¦Ùö´XŽu®Y±õjWõ“£:ÈêX}WoPQ° ãµkJgºÇzgeº Míåñ®%µÙ‡UÓYRSÜ´²<Ï黦XÈM·¢VЉâù¥Äj €?HÊ¿O°¨m2Ûå iä‹e «h+`ÈéJ;~d=þ,øo7ÿèj^?Ç_·¾IEND®B`‚ pix[262]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1059?’ºeIDATH‰íÕ;N1ÐY¹p‡/€ð()†#å»Ñ)s„\ÅEJn@\Aw¸0Æ@B™1¢¢‰·ð¬žíõ–”<}¥ùøNpÊ£«T¡yÛÒ™¾ yÌ‹¾Ò¹Ò\*Ü7ÝKJÜpEΞdýL‡®ÒE/ú›¾ÿE—-©¶œ‘ê¨i; ÉjšXã +¶×ìT#8I3`…‡1€¡‚ç}ž°š„J‚F,6/ 5IÖ첟:Zü:Ù(iÀä³›Ocµ4-]åHÐ1žZÖ³íi±Y§¥n€žòbèê o‚0júÌë«ê• š†¦Ùö´XŽu®Y±õjWõ“£:ÈêX}WoPQ° ãµkJgºÇzgeº Míåñ®%µÙ‡UÓYRSÜ´²<Ï黦XÈM·¢VЉâù¥Äj €?HÊ¿O°¨m2Ûå iä‹e «h+`ÈéJ;~d=þ,øo7ÿèj^?Ç_·¾IEND®B`‚ pix[263]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1044X8÷ïIDATH‰ÝÕMNÄ àGH†]™­+®àL¸’'°$^ ã¼³rK2 1Á>ßcÌÌ´ülŒÆH2Ó¯@áÁ+À¿(š/ˆW™xÁsÙêŒ×…Ô"FƒYÙÆãF¹Î¶üy,õÛVWå8Ôªç_×ãPßhû7ç»Ñ<4ZDÛÕ`1ªžÚEAôÔ“Ò ÃZ?¾”¶¥‰Î´Ú.¤äº5nÞ:T¥‘TCš¨ójFÎ&Ie,çh£Þ& € SS£ŽFfí tTKþáÚšXÝÜÔ`’VEç‘ú¶–qi±;ªh%šêæ¢ÀjêMRì@9!uu°ëë$<«î(EˆTµÔ¦I¥‘êLÑmj 8Ø¢¦£¸°¶Þy¤À:™ ·jFÔP¬uô_‡J™<e5Z*¢ö{•Gx£ «r·*JÖc¥@ÞË ÝƒÀ÷ªgÈåÅÚ÷¤Úß]ë{©Ÿ#k~ÀøÕ Ý_Ú«2±ŽÒŽq´(«³sÖ4c”ê¼q)‰’R_—Óç²—cŸp¤øÓú «\<”‚;ÍÏIEND®B`‚ pix[264]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1058H•Š…IDATH‰ÝÕMNÄ àGH†]™­+®àL¸’'°$^ ã¼³rK2 1Á>ßcÌÌ´ülŒÆH2Ó¯@áÁ+À¿(š/ˆW™xÁsÙêŒ×…Ô"FƒYÙÆãF¹Î¶üy,õÛVWå8Ôªç_×ãPßhû7ç»Ñ<4ZDÛÕ`1ªžÚEAôÔ“Ò ÃZ?¾”¶¥‰Î´Ú.¤äº5nÞ:T¥‘TCš¨ójFÎ&Ie,çh£Þ& € SS£ŽFfí tTKþáÚšXÝÜÔ`’VEç‘ú¶–qi±;ªh%šêæ¢ÀjêMRì@9!uu°ëë$<«î(EˆTµÔ¦I¥‘êLÑmj 8Ø¢¦£¸°¶Þy¤À:™ ·jFÔP¬uô_‡J™<e5Z*¢ö{•Gx£ «r·*JÖc¥@ÞË ÝƒÀ÷ªgÈåÅÚ÷¤Úß]ë{©Ÿ#k~ÀøÕ Ý_Ú«2±ŽÒŽq´(«³sÖ4c”ê¼q)‰’R_—Óç²—cŸp¤øÓú «\<”‚;ÍÏIEND®B`‚ pix[265]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1043Æ\bLEIDATH‰íÕ1nÄ Ð‰.´Ûq“åhŒ”"ÇÈU&'È8](¬ ÞbWb@QRlŠ ‚ÁcƆXíµ%íwÀT¹=MT§ooUSmy5v_êoWõ¯Ñ&RƒžYG­"¼uÝG-YÈé%5„A›Î׫•S…´ _®Z° ÊÈ»#=óÉVÏ}Á|v–6_R׌A5n %^HFÕ€]÷®”å\Bíê&k8”gÚ +ædÄíZWêËr,/•æš…­- +&ú $õ‰>uÅLJôs¼PhºêôG’í\©B¼ño*$†Öïé‹­%ËX)rݱ‚@y¬2黣 ã ŒØ6ÒÈžNÉО-ÏŒÚ×Üw-pÕúͪ|÷¹S¹jq¶ê½Æ­†¾ë=ô‰Ú6ªÈ§´# »·ÔjÓ/ë›-Î}\êÎIEND®B`‚ pix[266]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1057Ø*—EIDATH‰íÕ1nÄ Ð‰.´Ûq“åhŒ”"ÇÈU&'È8](¬ ÞbWb@QRlŠ ‚ÁcƆXíµ%íwÀT¹=MT§ooUSmy5v_êoWõ¯Ñ&RƒžYG­"¼uÝG-YÈé%5„A›Î׫•S…´ _®Z° ÊÈ»#=óÉVÏ}Á|v–6_R׌A5n %^HFÕ€]÷®”å\Bíê&k8”gÚ +ædÄíZWêËr,/•æš…­- +&ú $õ‰>uÅLJôs¼PhºêôG’í\©B¼ño*$†Öïé‹­%ËX)rݱ‚@y¬2黣 ã ŒØ6ÒÈžNÉО-ÏŒÚ×Üw-pÕúͪ|÷¹S¹jq¶ê½Æ­†¾ë=ô‰Ú6ªÈ§´# »·ÔjÓ/ë›-Î}\êÎIEND®B`‚ pix[267]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1042±[RÚiIDATH‰íÕÁmÃ0 @ zø©l :@Q¯’òìÏîdÕ]A|ò¡Š%í¦uB:@_í#:ˆ¡$ÊÖˆìÆ þø]7ñÑÇ›s§?©ê®¿Ò>9ZÃYíÜ×ËKm¹L®&fJ `ô”‚*Åjµg®’S˘Ræ²êèhÍò4rM4‘Ñ™A~¢l•T1qI8QºV„Ôƒ Ϫf®jlƒj²UIæE!áàÔ ¹ }ÑPìn jì¢Þ>ÓFyG$ò•†D›—%Y˜w‚:—TíŠVŃf6;ù¥õA«² ‹–E‡k•…ŠB9 8£ï«Î¢ ãÎ\8Á1Ó®Jäf”7Ú­Ö›Š›Ì¦fÕxKÛYiO_ “íX¹^Ò1b¬ŽjßD¹ièž v†þó³wúRhÎxô:Gzy&Õ'¯ëxÎóÚTstsYtÚ^”o¥T–;Ìñ£(ž±¯-Ó¶Ø+•/[0øßÞ‹~¾")û„<æ*IEND®B`‚ pix[268]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1056¯-§‚iIDATH‰íÕÁmÃ0 @ zø©l :@Q¯’òìÏîdÕ]A|ò¡Š%í¦uB:@_í#:ˆ¡$ÊÖˆìÆ þø]7ñÑÇ›s§?©ê®¿Ò>9ZÃYíÜ×ËKm¹L®&fJ `ô”‚*Åjµg®’S˘Ræ²êèhÍò4rM4‘Ñ™A~¢l•T1qI8QºV„Ôƒ Ϫf®jlƒj²UIæE!áàÔ ¹ }ÑPìn jì¢Þ>ÓFyG$ò•†D›—%Y˜w‚:—TíŠVŃf6;ù¥õA«² ‹–E‡k•…ŠB9 8£ï«Î¢ ãÎ\8Á1Ó®Jäf”7Ú­Ö›Š›Ì¦fÕxKÛYiO_ “íX¹^Ò1b¬ŽjßD¹ièž v†þó³wúRhÎxô:Gzy&Õ'¯ëxÎóÚTstsYtÚ^”o¥T–;Ìñ£(ž±¯-Ó¶Ø+•/[0øßÞ‹~¾")û„<æ*IEND®B`‚ pix[269]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1041(R`/IDATH‰íÔ±nÄ P#tcí–û„Ž·ñ[·ÁÖßâîغÒJ׎®­t±‘:uèeŠx$`c´x2<ô¡ÿW¯K}5m 4 ÉŒ’Ž:=5ˆ¬`»× ž*OìÀ¯w:v -/¼¶©ùâ©cStò_ó@jªRõä&R _Z·ªétä¨`Mí/uÏ_Þ4ê ”}¥š¢ÀZ,儾S!]¤›²¥’2Þ›¢Ýß ¢ýÉó1 íÙKXz^ieÁÒrYé^¦ÊÉ‘¢¸Tˆu¥[šruìZ,ÅÌšmaàÄÂëê:qH§‘¢óÄ5)ÊrÔÎ:ÞuV•; B ÎÐ-Cà˜ 6ÖôkígN!DQ-^îû@NŠ’\JD?ŮޓoK¥¿×OŒG9å6ñIEND®B`‚ pix[270]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment10556$ö8/IDATH‰íÔ±nÄ P#tcí–û„Ž·ñ[·ÁÖßâîغÒJ׎®­t±‘:uèeŠx$`c´x2<ô¡ÿW¯K}5m 4 ÉŒ’Ž:=5ˆ¬`»× ž*OìÀ¯w:v -/¼¶©ùâ©cStò_ó@jªRõä&R _Z·ªétä¨`Mí/uÏ_Þ4ê ”}¥š¢ÀZ,儾S!]¤›²¥’2Þ›¢Ýß ¢ýÉó1 íÙKXz^ieÁÒrYé^¦ÊÉ‘¢¸Tˆu¥[šruìZ,ÅÌšmaàÄÂëê:qH§‘¢óÄ5)ÊrÔÎ:ÞuV•; B ÎÐ-Cà˜ 6ÖôkígN!DQ-^îû@NŠ’\JD?ŮޓoK¥¿×OŒG9å6ñIEND®B`‚ pix[271]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1040_U3öKIDATH‰íÕÁnƒ0 `#¹LbÇ&x“eOV»o–Û^#àc¦¡z £šb8ì2ij¤ ”Oà8±)Y;>¿o„-ü{ÝÆCúŸõÃWLkÄMB«j–0Ù¨o5­Ó™¯Ô5šhN\•ªTUŸÈÓ¹\YGWK@lá[EÜ2ÔsâV•X§¯U/mF²èL,öî廩yš£ÆBL»:!<©£²h†ÒäiŠ:d: ®"ãô†g3º)öÂ9…U§K:hWµÝÉeUeê¡Î)¬:VebÿÍ/A΄[Wµj·«§ ¯ûúŒ:TÚ‰›5k†vûz Ô“¹»‘QW&ƒ8kkÅšDOQÈ:¤hÓèvÎ ˆÒjkõR‚ %PZmï#•©‚Ô©:hínhq*ö¦Ja¦è¬ª«ßúÚûfüø^¥{@G·?tWÛñgú-ÇCòÍï×IEND®B`‚ pix[272]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1054A#Æ®KIDATH‰íÕÁnƒ0 `#¹LbÇ&x“eOV»o–Û^#àc¦¡z £šb8ì2ij¤ ”Oà8±)Y;>¿o„-ü{ÝÆCúŸõÃWLkÄMB«j–0Ù¨o5­Ó™¯Ô5šhN\•ªTUŸÈÓ¹\YGWK@lá[EÜ2ÔsâV•X§¯U/mF²èL,öî廩yš£ÆBL»:!<©£²h†ÒäiŠ:d: ®"ãô†g3º)öÂ9…U§K:hWµÝÉeUeê¡Î)¬:VebÿÍ/A΄[Wµj·«§ ¯ûúŒ:TÚ‰›5k†vûz Ô“¹»‘QW&ƒ8kkÅšDOQÈ:¤hÓèvÎ ˆÒjkõR‚ %PZmï#•©‚Ô©:hínhq*ö¦Ja¦è¬ª«ßúÚûfüø^¥{@G·?tWÛñgú-ÇCòÍï×IEND®B`‚ pix[273]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1039iÈ•NIDATH‰íÓAj!Ð’pð},†x³Ñìs%Cî<‚KÒ•oÏ&é߆,²Œé~¢eU):Qîz×ÿ¨‹iiÉž-¸j¯Å4Ù‘Ê„àø¹] ‚ Lñ‹IXEU“o6Í{Z/Z ÓP¶M!‹eZæâ5BÍï5{¤R¸ÆUÑ\¦=m¢¯J¢ŠwškWr#h¨s©Ï¢oTõgM{;kÒâM鄉UaÕ'‹IöôhÏP¿§î¬"óVÏ]Ñé¶q¿¨@m%y¾èƒèK#jV|-¤‚F3Z^zÀÛê¿wM²,á»>ªcŠ3j{»2õ%Dmr@çmαÅw­ŽD…-ël´äb« z@dÐ…ôsq ¯;u%ÙèOØá«ÚFU‘‰(GZ…~6™œ¦Ìu î´¦‹+šžöÆÍ?Ð|“æ­VÖÏ|ü¡~H‡y.3ŸˆÒIEND®B`‚ pix[274]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1053ßGS NIDATH‰íÓAj!Ð’pð},†x³Ñìs%Cî<‚KÒ•oÏ&é߆,²Œé~¢eU):Qîz×ÿ¨‹iiÉž-¸j¯Å4Ù‘Ê„àø¹] ‚ Lñ‹IXEU“o6Í{Z/Z ÓP¶M!‹eZæâ5BÍï5{¤R¸ÆUÑ\¦=m¢¯J¢ŠwškWr#h¨s©Ï¢oTõgM{;kÒâM鄉UaÕ'‹IöôhÏP¿§î¬"óVÏ]Ñé¶q¿¨@m%y¾èƒèK#jV|-¤‚F3Z^zÀÛê¿wM²,á»>ªcŠ3j{»2õ%Dmr@çmαÅw­ŽD…-ël´äb« z@dÐ…ôsq ¯;u%ÙèOØá«ÚFU‘‰(GZ…~6™œ¦Ìu î´¦‹+šžöÆÍ?Ð|“æ­VÖÏ|ü¡~H‡y.3ŸˆÒIEND®B`‚ pix[275]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1038Ï-ƒIDATH‰íÕ½NÃ0ð³\á­aei^¡#Rx¬•⨣`ÄÀ[€û–X<„»_JsΆपQ~Žs¶ÏqG•§šÙ6¼f7ÙÒñ‚´%ƒ?¢ÛÔ¦ëË©5ô–Wz ¢;üÍÓ‡¤‡g­üì¸Õ¿þm}ÕÝggu?«Ø)¶¬Šj˜ß./ê÷i‡bxá¤íY­âH³föS%ÍáJûKϺ2<@Ý4+¯Ù¯4÷z”ú9gÍ®…š¢rÇ1s:Èj¡Á`صì‹Ú¡oh,«3”¨ jeÅ$¥¬qú¢7sÚ/MZË‚n±]WÒ t'*Ü…Ã:ë³ ~k“µ«9j_•Ô>Bk)笴1QÖ´JD:Ì)……°FP•ÑLåÖqç²V²îPñ뢢0T/iBk)笴1QÖ´JD:Ì)……°FP•ÑLåÖqç²V²îPñ뢢0T/i®Rye"ž‰¢¨œï ì7 7øÆZy¨o•qí§ò;Y/ÖêEí/ä¨÷IEND®B`‚ pix[278]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment10511I2!¨IDATH‰åÔ±NÃ0à‹2xAÊÊPÉ®Rye"ž‰¢¨œï ì7 7øÆZy¨o•qí§ò;Y/ÖêEí/ä¨÷IEND®B`‚ pix[279]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1036ùw”IDATH‰íÕ1jÃ0ÐÿÔ[Ô±Cˆr„ŽJt•£CAÊIz”ª'èº:Ä¡ß/;vcKÊVèAÖãËßò— ´h-è©oaêv|}Ñ7©¤ )<ÉÙ<ç±jùs-´«^õÿêÇØù¤ˆõØwêÀµíÕƒÊôíÀ·<¼'2×=Å4Œ<ØdúŠÒ0¶¹Zät'E™ë ÇchrÔÊAÇž«W–:ìÄL£îgfÕ–O•¥*3t¶&×u ¬ÒÏ:Ï*èþÁdV\ê)-²Ò‡AteÕœƦ°V4*‘/*¯ùÅ8»Šî.(¹G^nr*WœÔšŠ>4˜f©è=¦bMºá(r½n×\²¦ ZUTÛ«ôúxA9”²:©åýPWäýPÖ-ÀNPV“i…œq&ByÅjMÄ׫7`t%©žù‚çšnÒjÝ–”ÇZ. [TÞGØšU]Ò´-ÜA~2$M{ßÃËj¥ *"ÔþÎIi<ŠÒý4˜f©è=¦bMºá(r½n×\²¦ ZUTÛ«ôúxA9”²:©åýPWäýPÖ-ÀNPV“i…œq&ByÅjMÄ׫7`t%©žù‚çšnÒjÝ–”ÇZ. [TÞGØšU]Ò´-ÜA~2$M{ßÃËj¥ *"ÔþÎIi<ŠÒý¯3^V[ôƒoßE}¯O5VUͬùþž•vízÝåûaÒ -DÑ̼éTݱšg¦ä©Š“z%¦(¯ë°(Ýwz½á…>V¨z%ù„n¡ê¨\RÏÍyË"¤Æs1ˆs¨DÝy½5\z5V½ªÈ 9G\g”ÎYa©S~£A`j]%ÓhÐR£ªè'eAÛíªRuZ¨¬ª8²í²9a÷ÔC´!jÏ5îÐܼš^8®KD& pz"Ђ{Ÿr86Óô4D‘¨Œ¨´òÏÙqO{˜?m#eNC{ýÛ?öz×OG8ÖþIEND®B`‚ pix[284]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1048Q޻ėIDATH‰íÔ;NÄ0Љ\lé–ákÐùb+Ù@±å«xEAÉ0âX¢ Âò0ãlüÉf©h6M"¿ÄŸùð—ËÂE/zÑ¿×7DXWoFЧJYÉ:‚*:¿Gà `Yt~V‹¬€6'ê¦X¿ÔéHO&Ðìh·¬/­ •<;ÚĺÏúXÕ+Ë:¤¡(E¯­)úZ5òºè´3# }4Fäíê¬ÐëW>¯3^V[ôƒoßE}¯O5VUͬùþž•vízÝåûaÒ -DÑ̼éTݱšg¦ä©Š“z%¦(¯ë°(Ýwz½á…>V¨z%ù„n¡ê¨\RÏÍyË"¤Æs1ˆs¨DÝy½5\z5V½ªÈ 9G\g”ÎYa©S~£A`j]%ÓhÐR£ªè'eAÛíªRuZ¨¬ª8²í²9a÷ÔC´!jÏ5îÐܼš^8®KD& pz"Ђ{Ÿr86Óô4D‘¨Œ¨´òÏÙqO{˜?m#eNC{ýÛ?öz×OG8ÖþIEND®B`‚ pix[285]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1033‰ô‹€IDATH‰ÍÔ±j1 P¼üõü[Ý|7õ3ú)qèбŸC‡Ž5Íâ#UéМä!´´>ðq<Œå“, qè™çdmô6PŒû«•âa¤¼óHi¤;ÚD]ßèq {Ú]C劑6ƒEºú¼¿ªû¡ÿeÌ?«œ¸Ö@äUMªÑ´B <UPƒ¦éR¨ðKÙ×–˜ÀŸb»ÔÐÖ0W‡N<ºê§f«µ¹æ'´E\›o·Sß\SoÐd)æëXCóh’¬…õ½ë‹²ÖQ×'em×-mךÏjʪ67Ð ¬eÝsr̬üÂ?FVÏùM¢R× 1ч¦ÈÊ¢\Ö9€óY}¾1’–“ö°eåûÀÅÕËrU“_ŠIZY#ÚÓ—¤åÎw=®u>«éíêRpö˽ëºÎ>k ¹ªjšO¬öU¨+Vt _»4³òrW¬X±|¹fƒ6³îÄŽ”,8Ο¨Å@àYëfÜ:NGÖf©éÊ¥»ÿ}ü™~h®•ô^Ä7IEND®B`‚ pix[286]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1047Á1¦U€IDATH‰ÍÔ±j1 P¼üõü[Ý|7õ3ú)qèбŸC‡Ž5Íâ#UéМä!´´>ðq<Œå“, qè™çdmô6PŒû«•âa¤¼óHi¤;ÚD]ßèq {Ú]C劑6ƒEºú¼¿ªû¡ÿeÌ?«œ¸Ö@äUMªÑ´B <UPƒ¦éR¨ðKÙ×–˜ÀŸb»ÔÐÖ0W‡N<ºê§f«µ¹æ'´E\›o·Sß\SoÐd)æëXCóh’¬…õ½ë‹²ÖQ×'em×-mךÏjʪ67Ð ¬eÝsr̬üÂ?FVÏùM¢R× 1ч¦ÈÊ¢\Ö9€óY}¾1’–“ö°eåûÀÅÕËrU“_ŠIZY#ÚÓ—¤åÎw=®u>«éíêRpö˽ëºÎ>k ¹ªjšO¬öU¨+Vt _»4³òrW¬X±|¹fƒ6³îÄŽ”,8Ο¨Å@àYëfÜ:NGÖf©éÊ¥»ÿ}ü™~h®•ô^Ä7IEND®B`‚ pix[287]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1032þÄlIDATH‰åÔ±jÃ0à_hÐRPÇ!z…Œ™¢Wê˜!Ô÷hêÔ±¯ è ¨S=_O íŸ2 x1ès¬»û¯\„»ÒÏÓÛì÷Îõ몾^U# ÓHÉð‚0Ržá89æ j[ú-®²l«h>op©ùÁÎr#øuU¢S€ ŠVÃ)šb!Å]êb¤]dOSJÙ§­–ßÖŠ¦yãE-K¹e µë³/]ßU=†¼µ¢ëŽp:MikêH'¦-t5M°[÷[mWB$eV]eZM•9w}‘HI°¶FšÊrü“ʾòŒÞ,›.júge:i韕9í-)³r=æIUÉÿƒó£+#M¢^Ia¶,9Дá•|sWèZÛDãHUÑ„ ª§£Å” UÕtçd”Ošrñò3:`ïæõ$ynš€£ÉŠÖ ë œ´Œx‰¥u‹ªåÛë–áå5e'ØŸeíœ$ÏçUMá÷¹›8½Wú .z'²mmÓIEND®B`‚ pix[288]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1046¶6–ÃlIDATH‰åÔ±jÃ0à_hÐRPÇ!z…Œ™¢Wê˜!Ô÷hêÔ±¯ è ¨S=_O íŸ2 x1ès¬»û¯\„»ÒÏÓÛì÷Îõ몾^U# ÓHÉð‚0Ržá89æ j[ú-®²l«h>op©ùÁÎr#øuU¢S€ ŠVÃ)šb!Å]êb¤]dOSJÙ§­–ßÖŠ¦yãE-K¹e µë³/]ßU=†¼µ¢ëŽp:MikêH'¦-t5M°[÷[mWB$eV]eZM•9w}‘HI°¶FšÊrü“ʾòŒÞ,›.júge:i韕9í-)³r=æIUÉÿƒó£+#M¢^Ia¶,9Дá•|sWèZÛDãHUÑ„ ª§£Å” UÕtçd”Ošrñò3:`ïæõ$ynš€£ÉŠÖ ë œ´Œx‰¥u‹ªåÛë–áå5e'ØŸeíœ$ÏçUMá÷¹›8½Wú .z'²mmÓIEND®B`‚ pix[289]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1031g•§„IDATH‰íÕ=rà à§0¥£uá1×HÇUrßRåX!'ÈÂèÂL4"ùO6k)âQ#¤o`ve£,\ÿúÛúñ'³º‰ŽvI³YÐôdJn¦4”Ø_Ó@õjIÑ•‹Õg+à8]ÓpW4Ãð®D›\«6«hK°ºUos¿×®Õ`SÏ Þ@T¸«Ÿ¨·Ñ$îyAõ@Ý Yy¨.”÷sý¬ûÕžšªQ™W„{»Ô¯)nÕ÷|©ÓÀQ_T–ivº©Ê: ÊÓÚt¼ÁŠêÒZq ±‚UW=¨}«|íÒC_ã*A çâN%ᜫF0a•eµ“¾ ó îv7ÔphOjOÊÂׄ[½;¨:W³ 6º§v¯gªw ƒÝì-Y—ÓAïçR+䆸ÉyR]u«Æ¶'«ÖØHjlOÃCeªGVƒÔ±j`Wx<Š'Yc+>®:© 5¶æãA¨`óÅF¬o™Úš?zã8R_ÍÞ˜R?¯ažç­ÿdý9ä$Üè -ÙIEND®B`‚ pix[290]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1045/?Çy„IDATH‰íÕ=rà à§0¥£uá1×HÇUrßRåX!'ÈÂèÂL4"ùO6k)âQ#¤o`ve£,\ÿúÛúñ'³º‰ŽvI³YÐôdJn¦4”Ø_Ó@õjIÑ•‹Õg+à8]ÓpW4Ãð®D›\«6«hK°ºUos¿×®Õ`SÏ Þ@T¸«Ÿ¨·Ñ$îyAõ@Ý Yy¨.”÷sý¬ûÕžšªQ™W„{»Ô¯)nÕ÷|©ÓÀQ_T–ivº©Ê: ÊÓÚt¼ÁŠêÒZq ±‚UW=¨}«|íÒC_ã*A çâN%ᜫF0a•eµ“¾ ó îv7ÔphOjOÊÂׄ[½;¨:W³ 6º§v¯gªw ƒÝì-Y—ÓAïçR+䆸ÉyR]u«Æ¶'«ÖØHjlOÃCeªGVƒÔ±j`Wx<Š'Yc+>®:© 5¶æãA¨`óÅF¬o™Úš?zã8R_ÍÞ˜R?¯ažç­ÿdý9ä$Üè -ÙIEND®B`‚ pix[291]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1030¥1žIDATH‰íÕ?NÃ0ðy¾’ÀÚ¡"‰‘¡") Çà(¸â\!ˆÕAD~|vÚüi^"b«©Q~ßkêÏ%fÊ“-×”ÛŒ™ß˜/x? b~|Ù”D”Ùöj î–Èà`cºU_—£,ªB™åP9mÞlBï~A'Œ&>:ŒJÜ+£õ÷zÿýIÝí¬>lÛSòÇüЩë¥LqE93"ò:V$/faÛŒg¦”Ë_ÝéW«>èÂp ]{†Ú¥ŽÑLÆj¡«±šæ¤N¹@KNw½+œ¢ž Z÷õ¹ÕZ(·ªð²(-©Þ«´ÖqîBs9¥kF“VV5«¸×C‹I­Ï4ßMj5«n¡9ÔòÆøFsYkÔ ZØÊT§“º†^ u«ø$¡nRñ§Îª*—3JWDùXM¨KqIñëÛ9 y(eeÕ¬ØZÐk¬+Ä$¬g¡+J8Ù©ð Êñ ÂÊ‘Ôâÿ—Lˆ¢´bKÊpx„Ü tAsò½Mª;ýľ›+„ž9n,a¹ZYÛ„™¥ñú L";˜$·êvIEND®B`‚ pix[292]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1044X8÷ïžIDATH‰íÕ?NÃ0ðy¾’ÀÚ¡"‰‘¡") Çà(¸â\!ˆÕAD~|vÚüi^"b«©Q~ßkêÏ%fÊ“-×”ÛŒ™ß˜/x? b~|Ù”D”Ùöj î–Èà`cºU_—£,ªB™åP9mÞlBï~A'Œ&>:ŒJÜ+£õ÷zÿýIÝí¬>lÛSòÇüЩë¥LqE93"ò:V$/faÛŒg¦”Ë_ÝéW«>èÂp ]{†Ú¥ŽÑLÆj¡«±šæ¤N¹@KNw½+œ¢ž Z÷õ¹ÕZ(·ªð²(-©Þ«´ÖqîBs9¥kF“VV5«¸×C‹I­Ï4ßMj5«n¡9ÔòÆøFsYkÔ ZØÊT§“º†^ u«ø$¡nRñ§Îª*—3JWDùXM¨KqIñëÛ9 y(eeÕ¬ØZÐk¬+Ä$¬g¡+J8Ù©ð Êñ ÂÊ‘Ôâÿ—Lˆ¢´bKÊpx„Ü tAsò½Mª;ýľ›+„ž9n,a¹ZYÛ„™¥ñú L";˜$·êvIEND®B`‚ pix[293]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1029pÓ,Ô¦IDATH‰ÅÔANÃ0ÀµŒðü ÂOà! qè‘'ðÌ‘SŸ@‡1êH5YÖnA¢»6HÂ7;Ífc¯Ø¶/u,.ê:v-¦õܶ;h5ójSsC“meþ³¦.šú¶ƒ¶«úG]í–ùq­gv?<÷½®wBæè0öå®A‡Zk@|Ô;ô:ÿ)¯*P Ín„ž©7ÅVÒQš)‹ÕPež~)¦@Ú‘úsØÖ‘4Ú¢˜ú¢±Ÿ û¶‚7ô±OÙUÕ]Lß«*ÿ®/¹"§¨“ˆ^b“ŽB9¶A'¡IG¡¾ %$=Ü’•cp¼ÉgµÇšÆÀs¦Úbo•¾Ð•é R(“ŸyO5,j¨QQ& )µö¼ÑDü XUÿ ©t¯Ö¨¾¢‚¹ªUÝÞÔôîvM}MMR¢²»SÄ<{Uµ¸ î%$ ÒIEND®B`‚ pix[298]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1041(R`DIDATH‰íÔ1RÃ0ЯQa:¥¤3G ¤óUrÊtö 8W1CÅ)ðÜ¡B£Í—E ‰ÖbH—{&Ö³²kkeÈq¼½ž\J\õª¿Ðçª>UÕ]Lß«*ÿ®/¹"§¨“ˆ^b“ŽB9¶A'¡IG¡¾ %$=Ü’•cp¼ÉgµÇšÆÀs¦Úbo•¾Ð•é R(“ŸyO5,j¨QQ& )µö¼ÑDü XUÿ ©t¯Ö¨¾¢‚¹ªUÝÞÔôîvM}MMR¢²»SÄ<{Uµ¸ î%$ ÒIEND®B`‚ pix[299]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1026àl1EIDATH‰íÔ½NÃ0ð³*Ýnlèr §Ø›m3o]-Öï¶.±ú¸éH­+^ÊõžÔÓª> z0Ë¡äld@hM_R}¡Ô¬U?©ÍOŽ«? —öu=wÁðŠJœuªêf=ÛÑåÊè°q¯»uOýR?S(ºS{ÐS‡ç±Zdm´y ¯¹Znµ»¡¾Tv£›ð5ìKé[½UzªÞ92uLß+/Ï»äϿݱ_¸,IûÏ*Ýnlèr §Ø›m3o]-Öï¶.±ú¸éH­+^ÊõžÔÓª> z0Ë¡äld@hM_R}¡Ô¬U?©ÍOŽ«? —öu=wÁðŠJœuªêf=ÛÑåÊè°q¯»uOýR?S(ºS{ÐS‡ç±Zdm´y ¯¹Znµ»¡¾Tv£›ð5ìKé[½UzªÞ92uLß+/Ï»äϿݱ_¸,IûÏ™ŽZDsS©Q__žCYí¢¡×¶ Kû7&MùY^°ílœ„è8»¡~¿öúq-O6w2”IEND®B`‚ pix[304]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1023ÅÊhIDATH‰íÕ=N!ð?¡˜r.`äV²GòF¸™t–aé,d‹#}o>6;Œ&&«…ü¼¼$j&•š÷A/G÷ ]·mMß×ç̽–+ºú÷_Šê_¯¡/ÜEŒ¥³Ô×éP¹6©‡ hIÛLƒL“ôÉ¡õ% ƒJl¨vµÛz'¬ÂNæ±â‘ÔB9]ŠqPãò³êÏšl*(¤pÚŠºzÃ;äÖDEAÑ™( +ÚÁ„¢Ž UŠÊ9‘öí¤Yi€HݬVgJ@ÕU\hi_?kÅl649=^ ¯2¶ã ý¨Óõ†³.ç*»Òϳ(¦)‘lßWSº_.0§PSñ¥ÞÖ4h[V(ô²¢P‹i5î JÉ·½ÁS]©BKÚ“ºAãô?Εkzì™z¨Ž 5WÞ—ß2Õî[®”‘¢¼™G–ß«õÿÿÏ|—z´ÚCþŸÐcIEND®B`‚ pix[305]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1037Žp0’hIDATH‰íÕ=N!ð?¡˜r.`äV²GòF¸™t–aé,d‹#}o>6;Œ&&«…ü¼¼$j&•š÷A/G÷ ]·mMß×ç̽–+ºú÷_Šê_¯¡/ÜEŒ¥³Ô×éP¹6©‡ hIÛLƒL“ôÉ¡õ% ƒJl¨vµÛz'¬ÂNæ±â‘ÔB9]ŠqPãò³êÏšl*(¤pÚŠºzÃ;äÖDEAÑ™( +ÚÁ„¢Ž UŠÊ9‘öí¤Yi€HݬVgJ@ÕU\hi_?kÅl649=^ ¯2¶ã ý¨Óõ†³.ç*»Òϳ(¦)‘lßWSº_.0§PSñ¥ÞÖ4h[V(ô²¢P‹i5î JÉ·½ÁS]©BKÚ“ºAãô?Εkzì™z¨Ž 5WÞ—ß2Õî[®”‘¢¼™G–ß«õÿÿÏ|—z´ÚCþŸÐcIEND®B`‚ pix[306]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1022çõ\ŠIDATH‰íÓ½N!ðAŠíŽÖâr<ƒ±±0Ç«ø áM|ÞD K±ÃÁÿìy1»°ãGc$—l2¿›]f¨®,GQ‹]ÓlVu5·|cWÿú)}]Õô ôÓzj´¾æ¾&D¦fÝjÄñÈšÉT/ùÏSõ¶’¨žtÆc¦÷žlAÀ‘>Ƨ¹ŽlF€H-htK4 n{:ø=ET«ønµÈ2h×h€ª°…úQgõ:uduÆsùnIø]s :îDî².èFfAÇ}´ªŽ„ B s5IÝ¡zê¡\'ñQWƒ$¾£ÒÕHÃO3¥QmÆm¥ÁuuwTµ¤šÕôuCÖtYOÓÍÚgIÇ{…>w ]¾¢®²rÛÚ®wjA‰õ|ÈKMxWÛS®ÐÎÒ\Oš„gmNêGÝ·Êçü¶T[•¸Óƒ 2po¤©¢_pÄØ±Œ¬/ó\¡/ã„Êc`ªI˜îLªQ ü™BºÑ§¬ªW<¨5ÔFy%ô“üøT]Y¿¨oj˜üOûIEND®B`‚ pix[307]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1036ùwŠIDATH‰íÓ½N!ðAŠíŽÖâr<ƒ±±0Ç«ø áM|ÞD K±ÃÁÿìy1»°ãGc$—l2¿›]f¨®,GQ‹]ÓlVu5·|cWÿú)}]Õô ôÓzj´¾æ¾&D¦fÝjÄñÈšÉT/ùÏSõ¶’¨žtÆc¦÷žlAÀ‘>Ƨ¹ŽlF€H-htK4 n{:ø=ET«ønµÈ2h×h€ª°…úQgõ:uduÆsùnIø]s :îDî².èFfAÇ}´ªŽ„ B s5IÝ¡zê¡\'ñQWƒ$¾£ÒÕHÃO3¥QmÆm¥ÁuuwTµ¤šÕôuCÖtYOÓÍÚgIÇ{…>w ]¾¢®²rÛÚ®wjA‰õ|ÈKMxWÛS®ÐÎÒ\Oš„gmNêGÝ·Êçü¶T[•¸Óƒ 2po¤©¢_pÄØ±Œ¬/ó\¡/ã„Êc`ªI˜îLªQ ü™BºÑ§¬ªW<¨5ÔFy%ô“üøT]Y¿¨oj˜üOûIEND®B`‚ pix[308]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1021~¤ætIDATH‰ÕÕAN!à1eɸ‚K¦\ÅchL.{%7ÞB¼Æ ‰“Áµµñ.jbJfÑ™¯óà=x ÷‡ÃÓPø×j†ªÐqäñªNTãú6Ô÷#VubúÒ×Ó&çMK“Ì öÐL“Íté(¦ÑÒÏÉCÅ–:C'ÙÒ€¢UÙ¼¾ªÆ¥(âjSÑ«¢SKEXáQ?²jRΰFøŽ»×DóÊxFï¶´d$gÙS_Õ/²¡ÁD5ËWÒƒ„~hžIWЬç²I²£b =jªšEªÊjµWéÛ^ù7UmÕu^¯é*¼õ=ÍÀuüL~iÆmGUÕ»ø™Ü©»È±§toZkA÷¦y«èjR”-¥4VíyF¤’t!u\i\m•Wf.½pœó= %¨×¨£¥ë”ö¨Ùe°”ŒkŸº¢TD_º[0 U':Ì ü;XÎiÔ &,j§Ôñ9m_úÈL;ãßôT$ ]ÍÞÂÛIEND®B`‚ pix[309]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1020 ”pbIDATH‰íÕ±NÃ0àßòà0²ù5Ø,ž„©j³ð\æIðÆHØ2X>~§”¦ ‰¡xiÔOvî.w dcüëßRw•Q]hÙÔìUߺÞórÒËÓ¬ÈS[•˜¶¾“ü-‚†™`TS³‘CëÓÐÉHÂÛZÉ0q€ÏkÍÔpk‚ ]ÝiªëiQÑF7µTÝØˆ9RE%jjæ[Õ{ŠIàûÊ2úÐÓPŸD_=+‰f3u¦ÕÕTSó·ê®î¡²ÙPl¨—tß×[Ô¾\ç«gj_þTç“ǦN³>l*|ÕuT_êÆ¡À5”C¸4H3_Á¬vµ÷õ ì*›ag-•ÙîÙ±ÁrØøô3÷¥îØíŒ«Æ\ qÒÌËx§S½óœt9Sާa¶þprp‹˜'Ö€óËVË^fT•›r}3×rÊ`øÞ(Ç*®”%ôò!-e™9 gëJ¿ Ÿ–,Dž—ÑIEND®B`‚ pix[310]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1034ya(bIDATH‰íÕ±NÃ0àßòà0²ù5Ø,ž„©j³ð\æIðÆHØ2X>~§”¦ ‰¡xiÔOvî.w dcüëßRw•Q]hÙÔìUߺÞórÒËÓ¬ÈS[•˜¶¾“ü-‚†™`TS³‘CëÓÐÉHÂÛZÉ0q€ÏkÍÔpk‚ ]ÝiªëiQÑF7µTÝØˆ9RE%jjæ[Õ{ŠIàûÊ2úÐÓPŸD_=+‰f3u¦ÕÕTSó·ê®î¡²ÙPl¨—tß×[Ô¾\ç«gj_þTç“ǦN³>l*|ÕuT_êÆ¡À5”C¸4H3_Á¬vµ÷õ ì*›ag-•ÙîÙ±ÁrØøô3÷¥îØíŒ«Æ\ qÒÌËx§S½óœt9Sާa¶þprp‹˜'Ö€óËVË^fT•›r}3×rÊ`øÞ(Ç*®”%ôò!-e™9 gëJ¿ Ÿ–,Dž—ÑIEND®B`‚ pix[311]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1019[þ‹IDATH‰íÔ=n!à·" %m Ë\#…åMn’“x¹™‘|¹p‹”"ˆÉ°ÿ¶”22Wþ¤]x3 èÆ2xèCÿ³ê[Õ- Š’li€"ßµÔ³:PBS †ÝÖ>ÿ ¯~Ð2B”{†J°¬" +ÕêÔyeÐy T§c”™ÁCME”`è+².á”­ªŒbTWªÕžÕ¬²ê?©Mðº©\†ÐWÕMškª‚ Èÿ›–Žq‹ŠöY=—•¬&u©–3«¾§2Õ*8iÈZ«þà´d%ÝPÄ¿•j²JJÜñ®ÜÕ¹–çõ™Û¶¡^û'‘÷T©QV΂s¬¨Åà•C—“*Õð%8hY_¾AÙ—.r…jŠ Ì먧꟔aÑ… Ýw•u…ÖSol~•ïVÊÊk1õFNJî=g{Ö9GÝóÛó¥—öر?ê–g‡âÏó¡ÇÞXÓÎë=}žŒ§ŠçÆR±òø»PëÉ:S´ šè‹®Ö8‘æŠöQ_Ó!›yC&íÛxo¶ÿ„˜|›ó IEND®B`‚ pix[312]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1033‰ô‹‹IDATH‰íÔ=n!à·" %m Ë\#…åMn’“x¹™‘|¹p‹”"ˆÉ°ÿ¶”22Wþ¤]x3 èÆ2xèCÿ³ê[Õ- Š’li€"ßµÔ³:PBS †ÝÖ>ÿ ¯~Ð2B”{†J°¬" +ÕêÔyeÐy T§c”™ÁCME”`è+².á”­ªŒbTWªÕžÕ¬²ê?©Mðº©\†ÐWÕMškª‚ Èÿ›–Žq‹ŠöY=—•¬&u©–3«¾§2Õ*8iÈZ«þà´d%ÝPÄ¿•j²JJÜñ®ÜÕ¹–çõ™Û¶¡^û'‘÷T©QV΂s¬¨Åà•C—“*Õð%8hY_¾AÙ—.r…jŠ Ì먧꟔aÑ… Ýw•u…ÖSol~•ïVÊÊk1õFNJî=g{Ö9GÝóÛó¥—öر?ê–g‡âÏó¡ÇÞXÓÎë=}žŒ§ŠçÆR±òø»PëÉ:S´ šè‹®Ö8‘æŠöQ_Ó!›yC&íÛxo¶ÿ„˜|›ó IEND®B`‚ pix[313]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1018,ùOlIDATH‰íÔ1n!Ð?¢ $eŠÈ\Áˆ´9JŽÒ…ˆ|\….× 7 b2¬•fÖ]”Æ«-V<ÁÌ à+OÄMozÓ¿ÓEÑ÷úje”¹Ð¬Ý•¸ÃqÂ2i³õ¡Â0à'-vL* ™¡ C}5À^j•¡8šYÏ.íp0Õ¨Zm\T­pÚYÛ¤íGã^QŽ®™n¶´ˆ²I×”RÀ^‰JTé‹q°ÚIÒp´eC!±}žÎj¨'Ue®2sšrô«RÑ«ÚD%"¥6Š-ÈëÜ.¿ž5c- îJÕ‚(g©-³©Œ 6«Å);EíYã’¼¦qÕädžæý&“è4”?ÔÓ¨DœvħI³d¿ÊÒéøMÕfDï‰IS Ò rÖ—Ú©Z„¸êçÔGC±êÔ)Xðâð¸­pc]µáãxñ´¡ÒûqVz¬œ${0Y¹7êݠѨuÝê|›õQqáüýowì7¬>÷7{£IEND®B`‚ pix[314]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1017¼FRMIDATH‰ÕÔÁN!àŸì‹ G½ñ =zh²¯â#xôT¸ùZ¼‰øx*¦”q¦MÔîšÔh•Mv¿À ,h¡yü†n/wQŸ.÷ojõú2Yýk­Æõ4:*-}¤ >Õ<Ê3‚>û²çh%Øä‰ýÊS*Š0x˜Ž¥L…5t´ô·:è†îº‚ñë™òhIv£‚ c˜kuÍs¥, VÛVÞ*P3×"Š0ú1µUeD×T+ù -êYÔ¥yV;Ñ-g j(ÿŠ¢*6_¨¢fάôõ‡¬úšyE}¥ÐÙI‰ËjÏP}Ôhúzç–4t4ëÊêÇpŽò©«J4vÎdaõWà̧š¤Roq˜©fÀúÕ€U[M€f½o«ŽÒ‘ºj”ÄhÍÌ7C†*ïËý\ƒ0®|ïÉŠäâQüÚÚh?¨oH3¿…(gIIEND®B`‚ pix[315]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1016ËAb†QIDATH‰íÔ±NÃ0àß2"fd@ø;Tò+udËI¼˜7F^á«7“í(Ÿ4†ºŸµc=¤¯¢¯u‚œ2¤cù¦N Á¦+$IJjd`2 _—5¿¾,Ñú* ï’_Õ<”·ô]gX;Îd^b^©•j20䔵evÄuÝW¶%zH%­ûþsªdùcnu>ÿn>/zAa7¦otIEND®B`‚ pix[316]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1015RH3<IDATH‰ÅÕ=nà ð?¢#7(9BÇLE½I1S¡êAr÷&lÝ*º1 ^Q•DæcHTÅ’%Ì ~ð0hryÜEÍL‹þ/Í·è|ÎöN‘dMîzó¾7Ìê ÍSMSsu7èôÍ?k=}¬´h*\ö†.–å¤YS‚+PµÁZ 4EØI\Zkæº!2Ú¾U—­Ȱ]õY-{ÕιŽû^”w~§[¥¤IéÝòj:Ê_$¨**I`¨¥ª©¯šm£éO=Lêiæ .ÎÃ%3R(TpT^*X3>ªX“øš©ü¶a¨Qe³è¾‚‚N´ðæ«w}5Gåyá¼+åX—±òM~××"S²xÔ#DÛÑ"‹ ¦ UÁ¦75PÞí.îepkMÞ“¬:ìäÒhäÔ‰ˆ¼©[…óQ£êù°¸P»l'NÒ¾‚u9Á{ðŒšþªÑÌÉáXsçd8¶?òÁbºJŠJ­r}m®ª‡©Îû^­¿‰Ð@týZŸIEND®B`‚ pix[317]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1029pÓ,ÔIDATH‰ÅÕ=nà ð?¢#7(9BÇLE½I1S¡êAr÷&lÝ*º1 ^Q•DæcHTÅ’%Ì ~ð0hryÜEÍL‹þ/Í·è|ÎöN‘dMîzó¾7Ìê ÍSMSsu7èôÍ?k=}¬´h*\ö†.–å¤YS‚+PµÁZ 4EØI\Zkæº!2Ú¾U—­Ȱ]õY-{ÕιŽû^”w~§[¥¤IéÝòj:Ê_$¨**I`¨¥ª©¯šm£éO=Lêiæ .ÎÃ%3R(TpT^*X3>ªX“øš©ü¶a¨Qe³è¾‚‚N´ðæ«w}5Gåyá¼+åX—±òM~××"S²xÔ#DÛÑ"‹ ¦ UÁ¦75PÞí.îepkMÞ“¬:ìäÒhäÔ‰ˆ¼©[…óQ£êù°¸P»l'NÒ¾‚u9Á{ðŒšþªÑÌÉáXsçd8¶?òÁbºJŠJ­r}m®ª‡©Îû^­¿‰Ð@týZŸIEND®B`‚ pix[318]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1014%Oª€IDATH‰íÕ1RC!ÐÅ?##7psK+ñH)­„ÜŒ£p:™Y—'þ|:ÇÆ-’Ÿ¼aþÂ.° `.Nu:ÖÎî§z;U3}¯‰?ÏŽÈï4­_šÎ±S—h[]h^ús£cû×_Vœªý£¬æšM¯‰QDòªýþ¸Ò‚”¹ÅAW€~l2”ÀXʺ®µ€¡6ƒÊ¼S÷šYÃòVI:Šz*˜Lê´’*&ºpÀ„}VHKÕ¬`ͦ²†¦YP¬º.~¦7íPÂÒzd 9³–oæÛÔ¬ú¸„ª@á(¬3+×U½“•jtV"È—£¤× e¢EÍ4·ê5®>všÎ1Ý´Í—‚˜‡ÊE²cm£E­¬¥.²Ö%/cåωF,C-šS'g¥‹ö.±JkE:Ï—ŽÐÏŸÁÐ’ ß/Ø÷o/:ÅÖ£é;‡Õzhš„ 6 ðÌ*U¿i„7Öº¹é.9ó*$Å Í m{åÈšÂönû“s2º™Ö/‹@90”óoëIEND®B`‚ pix[319]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1028ÔB€IDATH‰íÕ1RC!ÐÅ?##7psK+ñH)­„ÜŒ£p:™Y—'þ|:ÇÆ-’Ÿ¼aþÂ.° `.Nu:ÖÎî§z;U3}¯‰?ÏŽÈï4­_šÎ±S—h[]h^ús£cû×_Vœªý£¬æšM¯‰QDòªýþ¸Ò‚”¹ÅAW€~l2”ÀXʺ®µ€¡6ƒÊ¼S÷šYÃòVI:Šz*˜Lê´’*&ºpÀ„}VHKÕ¬`ͦ²†¦YP¬º.~¦7íPÂÒzd 9³–oæÛÔ¬ú¸„ª@á(¬3+×U½“•jtV"È—£¤× e¢EÍ4·ê5®>všÎ1Ý´Í—‚˜‡ÊE²cm£E­¬¥.²Ö%/cåωF,C-šS'g¥‹ö.±JkE:Ï—ŽÐÏŸÁÐ’ ß/Ø÷o/:ÅÖ£é;‡Õzhš„ 6 ðÌ*U¿i„7Öº¹é.9ó*$Å Í m{åÈšÂönû“s2º™Ö/‹@90”óoëIEND®B`‚ pix[320]: xres = 0, yres = 0 ‰PNG  IHDRg':bk8 pHYsb&2 tEXtComment1027—kÓóIDAT(‘MÑ1nÄ Ða-….\`r•¹JŽr‹UÌV¹FŽB—k>](“ÍÚüŠ'Ïè#îãqB?fKtEÇ8UÈðG2†·Už„–Ø&° Å.­÷ fLeýv‚TÖ©Lå©e“A2̦<7Eë߬lÌ]áµKzÁ4¥D‘ žK3ê&-ŠsÛî›êy‰«Q² »L4»âÙC_»$fGyK5È롪X§]E³Êf”\e•Z%¿4ëCË Ȥ=wç÷ ÅÏ®°Äy:äÂEWw]ñµIÉó‰°é.òïÉ"çÓ!ò/&™ Sÿ‰ ![gµŠ2IEND®B`‚ pix[321]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1026àl1EÂIDATH‰íÔ±n#!àYq)¬#eŠÈû.NæµRX‚(’WAºâ^c¢¼R ÷³6›µa·Ks:dÙÖ~b†a)×u¾–æ¿aS£ÙÒÔàR;ã¿þ;ú²¥žô†Zü¬šˆT£¾jØTI®«•­« ¤fuúV±Ÿ0åÅ×bå!‘ÂU d"‰[u„5³ÊŒ4ôt´²ÔÄ÷U#$"x¢[e"dƇ$ï¦G¯×*"QXºc3á°: /¬iòbž<É­'ý<Ÿ …J{QPþS‹&ª:2¬Ü¡$Ÿã~)JÉŠï¡sVófèÈwôóü i¤š;G»³Ö6HzÙWÚi(¶UOÁ,Õ8íï6ÞÖù¢;É?ÎúûZ]Q¥‹–G/¹*»Ô”:uõ‘öEûsí/œóºžÈXÓ_³J”(÷Tb]ƒŠrKKì WtZë5åÑ+§ÝÊŽŠ"†Ri?ZÑŸ”é\ÉFýÈ{:’Ý7waRÅ8>×Þ²²_胻3éPßÞ}\Â! [4lÙÐÊOh×Ô¾Uð‹“tQÈ¥b«èu™ßr£evH|ý²\ªkÞ…U?ò{özMûãõ/_Àñ®.ŒIEND®B`‚ pix[322]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1024bPibIDATH‰ÕÕ½NÄ0 `—³2  Á€”Wb¼-=ÝÀcð*A¼ˆaaµÄ‰PãÜQÛ º/mú5ó[ÈlÇÉÕ{WŸ\}sÕÁ«®Úc¹èþlúêªgUgqˆ’«ø‡ºï¿Ÿõc]E+ž’©]Ê”UÅÌe¹h:E)gUŸ™aœAvlU´ò ÃgÍbºŠ¾@×HŠM;ÞÙn ñØðƒÆƒ¢“e¡ñº×§†ß¼*mjµÁwêd4ä)ÑÆË$mWQjmG^%iø³Ü™”[ ü^U‚ÒBðë¹¢ÈôºÍ4fAaø +ºªLJÎLA—T›²»EÜÛ E?9¢;êç·Ô]NýaJór¨KÙÃJ³ŠðeçT×ÅôCÆJ{¢í+ÑIEND®B`‚ pix[324]: xres = 0, yres = 0 ‰PNG  IHDR*²…¹ú pHYsb&2 tEXtComment1020 ”pBIDAT(‘}Ò=n!àG(h,‘Ò…•½‚KV¸RÒ9’%H“c$WáÉ8åJA;yÃz½v$ú4Ìð)A²“‘w™ )H²R04…ÌF_á/Ѐ‰PàR‡3à2Üo‡8št2ÅfØyI¬.\µi†ªPöŽaGÓË|ytLôõÄub®;꘹Dží¨ÍrAàÓ¨°<ÃB­¢nF¨ºf¼¦éÍv5I×ÖµØQ9[žš)‹ºUÛUI” wÍ›~\S»fÄ“(¹!óEs(Žì ´)9%–\µ‹Ö°§èu沯‘y>Ô´«)J¹ÇZ‘Ý4w´ê´j¼WÝï4¿*ßýV¦?èÒñú-ÄË~ÔÖ•¢ªÍ,:‡=5]ýŽR׬i±l¤¡’+:IËèJxa—»Õ!Á'˜³rÞ>y«jÕèš{¸ÓT&Þψi ½ýg™/ð'ë*«š›y'oõ ΘlWŠ’éIEND®B`‚ pix[326]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1012Ì,¦ŸNIDATH‰åÕ;n! `# JÚt\#U¸X$&ÊÅr åa; „c4³-¶SE[„éæ2¿@„¯Š'äÆˆA°]QÒӮ¨ iSu¨ŠÒ_v¥VãÐ5m᯴«Šº ã¿h÷¢öD1µEÌY5Ô‘ÒVýÄ ·Hió«zêœÐ v·èp´_Hm]µ9,àH›kvQZ.¿J:¦[!V×í¤Z$µ’̬Εßè)¡ZfWÅÑÌMÒ~Öæª¢Ý•µÅÀê8óz ·4ÝTe²±k"L®®zrÕ<µ9M+“ç š–Ä)ž?ýVÕá;¯³VÃ"{¾°«ŒZ2RO¢h“4ýÀ$ÍÉ€'AËËTà´êA»ë’ºÙñuvè\yI©kóxº îtÞBsyu7wqcÕS1ÅÍãÝxØýü;ÈLËž¾IEND®B`‚ pix[327]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1009BåNVgIDATH‰ÝÔÁNÄ Ð!¸l‚GÆù?ÀˆŸâ'ìÑ$ü-~†€½‘ˆŒC·›@·íE›iûBèLÎ0tâaS¯ÈkjíÄ?ëÇI®êL´œäª~I³]Óbšg\dcOÞŒí K ;mú§>è ÐéË@DlÅMi[}¯ƒ7äÁQ:ÓênHhøÞøŒÚwš†œHèïDÀ‰Úš“[§ [-¬žU$í,xÓ+í5ˤœu÷S¥áÍYf Ö=˜¨;}#út˜„uÛ©¾ÖýbªJÇsè¥*iÝÒ¢Æu¥ƒ ~ˆ¡×¯NµïuÈqTk +ê/~ —ËÊø«UE¸™Ó4*Õ³* j¨?É¡‘5a«·“ª;¨,’¿Ñ£žU®+¶*˜™¼ûªƒ¨"ïHg‘¸… Ž ÛiÔ\íŠ;%ÑŒrrU¸V4§Oq\î¬RÆBËÚÅê7¦OxxuÓOIEND®B`‚ pix[328]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment10085â~À:IDATH‰íÔ½nà ð?¡*™Êš¡/b•1¯Ô¡ <Â#02X\Ï$êG8»êÍÉÒýdt>î ÚX»îºëÃ4Q«§¦©ÂŽZø%K¼õ¨™#†2B’4‚¢Ÿøq¯¡q8ÂÇ M3@(.Ò¨‘Õ¤ ªU²V›/ZÖÜuÒ󳤄P\YÕØÕÌÈš}9™v€ðE?t«A‘²¯GÓ4„Z]¦©(Ö™ÒUÌ¿5,j›Ê¨”UH¡«t¿ß!Vã¦Âªï²ú«¶-åæòb%Ë¢zU]“prW3oèiU—ÛÝP—'S—œ×õ‰»NÐsqéM—|HýlªMU¬ÔW<µÕÄ€l£ ë3'uÎMy~3œ¤­Ï>_£té&.D5Иs2Ë®êë,º[…ÿWnUçñ0ýoö7Š äKÈIEND®B`‚ pix[329]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1007¥]cQIDATH‰íÓAjD! àˆÙ”z¡^¤Ô‹•êЋyà2 1o–M,”Ù¼l?P‰ÿ¼™§žzêtÆ6Üiq<“×€ rgi‡TAy_é[n-Å–êg(ºì© SC·i)Šn¢ã›ª‘Þ<{¯kô*ŠümèåPe¡KÇÙ‡¹Ó8‚¦-Ê#î”¶Ú-…C“­Ž[þ¿Ö߸4roÙªò ‡ÒËR%tk“é®zbE¯¢ÓÒ~ óºRêï(ªµiåªàD²´}áØªÄV×jör¼¡XØ™:¥"¥[ÊRëÉÒ‚\![Ú7©¿祔¹;S× S²Õ˜§é¹Â˜.ÄY}ÎIEND®B`‚ pix[330]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1006ÒZSljIDATH‰íÕ±NÃ0Ðs-Õfd¨ä_`d¨ðo1TØLûI¸_À/10&2X9ÎM$>!„V%yJï|ÎÅ€õÑ|¢»YUUM#uSöƒ¸ÉÎi7«åø‚ÞþØ?ÿëŸÑÖÍ©×5í vPÕFRHV£Å(¨{}8¤ëD©{DPtíâšQAéHÁ†ëRS(:­ÇR=©öI5Æã¶PÈ6ª5ïO޵1a£[ÍižŠ Wº=©h´áB§¥d´ËϳRÉŠùOMZPC_¡·:ßM´éõ˜×n¬î¨Ç{f ¾×î Ot#9VWà%–UG«('9÷ªIé4êš :}œÎw¤E5zUßÒEÖçZÜeÖ{F©Î´‚yFûR£mÎtRY·¼*RwC‹ÇéZ%íI™œRI/µe:…ÔĬaUÓKA®}î‘”é_ïZå‡<éBHÚ2³&0…zyË à~¥B^únà rÏ"¥ÓºhW`˜nÔºWT¬š²ã×ôž)C‡Ÿ…èIEND®B`‚ pix[331]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1005KS}5IDATH‰íÔ1NÄ0ÐoYZw„r ´¹Ú\iO@Œöb^Qp |Ó¹°ò™8‹@Ê8ˆš\D~öD™Üx†w«Ãv7gåÚ«­Ö¡ä»&:ˆR˜}{Åø£¨\#<ùêeÙTÉg.šRij#šfI]ùXu8I{¬¢ß4• çnñ dL}nÊL›¼8M´¯zU5 I. J£Ò™MUy`XòX´¿Ê}ná¿lUÔ_aTmïzîIEND®B`‚ pix[334]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1001L>Æd(IDATH‰íÕAnÄ PSt1¶]TÃz€j¸RO0áh…ªð’E÷“ªJ+FŠ4ê,êEò‚QŒ‰¶xùl(NÖH?Ð.“,A¾cSa/ò.¿"ᮑ^@ñw:ÝLÇëþëêGÊQjèjŠÒ*ɪÊ$™IÕBQ’ÁCQÓŒ¹¨ºÒÕ¥ŠAÏÜ}GgjU­ªÍÞœþ¾¶ºr¢ªk†ò‘f«k`ÏÓÓȾì2PÚ«%45#•‘º±3ïÕ|+V÷i ÜÕ¯i¹¦µ§ìË£«êÿÅ~fŸŸ¬®™ ôÙèšÈ`+¿V÷3º_} ‹)=E]ˆô¨i&B…¢ÀOš~`¹µŸ5mN²H¡kËîñQ¦ž"еçäâîë|ÞôóT=s· ¿IEND®B`‚ pix[335]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1000;9öòEIDATH‰íÔ;n!ЋB…6…e¶x¶âe¸°Ël )¡KK yLÇ>Vl)•Í舧;|ò`ü›~õㆵ·¤ºë<M6Z¡{êeöP=u";Ȧš,Û¶&* Ї¨õ@qdš•×Ês€ˆ€Æ¾ÖÈ(,0b­–QX¸]#Õ Ògæ…[³ÜT»)ºb™-5Í 'ÜcG&õèT&ÝʶÒBt”þ·l“ ´[Wª T¹>…ÈÒe•E•¦¢v¤ú¨uås}»BR]£ú¨õýU45ŸTõT„‡ úÚW/°¨Äjj©™Ì ÷Ò4Þï·î˜ëªÂVÙ–Òé>a(×ÐXNˆ.=T«op7ëPg¦Ý/^wZ¶6R-]ཥŒŠg·lt'MÔl‚ì(Ï˰ç©D¶º§ƒq×?èõ?ßB,­IEND®B`‚ pix[336]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment999þ±cVIDATH‰íÔKn! à…®Ê¢ÐƒTåf¤\Œª!êènh›¾`ÒvÕMØÌ7blcèÊ ¸éMoúGÍžGô:ÖhiVDðC…¢*p#]Šð¦Õ™wa °©×7y8@T·z5á ÙÄjõY²q¯Š S§/¼“K;]4­¿Tqh­êªùÎHZáp©‹$%Õ…K¯jÖUg.„¨oTj»ªé׊þä­“ŒfÔŒZ-eÚgèšo£ïÇïãFóE}7Ç…•i¨ [Ô5R>Ô¬+wŽ@ëRÛF¥±Rx°×POÙ–{µèö~?£¶´ðm­©ûAËšÎ.ûc1§¾ëªÚäÕlâ¡ëØz®‰ê@Œ5LÈ6ô3X£âÇ<¤¡Ÿ_Yå£çÖþ –‚’ŸÃH¥Û’áÏÓPåÛ¾ÖrEe¹«Jÿ¯gÖ¾S}á°¿IEND®B`‚ pix[337]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment998‰¶(õIDATH‰íÔAj!Ð/BܵG0GÈ2;¯”嬢‹ ¹ˆ¹«P ±R2Ì03”M–´imQ~»Á;#ãÐCý7ÚÖúÁ ¯*yîHFÕj¹! jAªð+Rk2):€˜áªWµ!¿ÚK¼ÑÏ‹ÚÐmIª’kÞ SR ÊÎäh3¼Òæû“a”¸RL wuÖš¡ŸÆo•×ú¼§xÛÕÓ¢®“hÇTµ#+Ñžð"QiŠËД®ê•ôÍìvSUnŽ)˜×GS ÀÔ©EÕKVº­ªò°s!5§j?+éïN•ÛJ¿ÖêÉåauuäó»É±…¥Ê—BI­Ëü}÷ô—þW·úÕBÆ V‚]„@ð&3Ã×!jõ´±¸¡¹¹ Ýô¦7ý¡šv*¼Ój·a©…N¥sj†Jt4ÊSÒAÿ³PºüV -UŠ)wSö@{ÔXžy¬•+¬ƒÃ 6=Ô4(Ì—–d­¥eA97SžUrCõ~ê×¼@ëVïÏ’-&¬W=g"ÆÚ?îQb@ Õ |8‡ ö»%¸GvËžÓQ3Rk q¨í.6Ï ëÔ¨[õÔVÚ7ª©ÛOÊ sî±¥7S\QgɯƒëBƒdZ+•ƒ4J.0+K—ž\¬“þ%I‹ôÎH ïï,lO¹ãÞ˜¶FÕx2\/…‡=yUÅöóuY©ßÊý '0Òw b§¦¥>IEND®B`‚ pix[339]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment994€dÞ,IDATH‰íÔ±mD! àŸ …QØ ÜÙ€Un„LpÐ¥ÌJŒÂ”HA8~—âÝ{±_)ݹCŸÀÆÂ€"ã®w½«¬#išvOÔT-–¨ÊšÃu%éM8QÜ¢¨\ì°Lœ@Ð3\ ŠÖ€î[ Èó»ï~ÊZXƒ®©œCwCÓz ã@ÁÚeÍWµª¶EÛ¡Ö¿ªï¶œd¬ÍrKd­pÕäªhy2Ù*Z<žc^À\ i<®ñ³qû6àóã¢IЄòºêL·:ñÆ\u›—2?ª¹æÝ)±÷QÜRõŠÆÏá©FË#ºÌáoí¡^Ló#ió傦\ssù ÑôË„NådÞÄ}RÕP¾‘­ØÍmv÷…çº5%þ3öq£5©ÿ¨ß¢m™Çý¡ªIEND®B`‚ pix[340]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment993dñ}:IDATH‰íÔ½mÄ ð?Ç)n¢#e:VÈ'³VŠ( e€[‰ ²Ù€’ùåA®8]©RØ…-ñ³¼/Ðä Øu×]ÿ¦ÅÑ/jr”4eXQa(*Šü´Bà#I ô8ðO¢ª X<‹šPu:á¬$M¯K>á¢Úð²ð²FÇ—)‡™ò¹¼¨Á§®4Q¶™Ò\«¬.w-b4®ºa¦EÎBp Ka3,kVYÖhG;G´‡s,žêªƒû&àØ”zÉþª ÀŒ•Óc£j!” Ò¤µ©”¾’¡ª?J]ÕP-ÕÆzé•#iuqÕå8ÐlâªzµKš–pwÊ›¤¸ËždESîБr¸<'™¤SqX¨»y2(Þb07xª´™ãîô³¿y™ç]èNâíNÿiÆÞè7ûRÔ>\Ó¬IEND®B`‚ pix[341]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment992icÁë‡IDATH‰íÕ½N1 `‡ …¡RVÔ¼R^‹-é›1ðé‰%Ccߤ"ûø®í}ºôîlÇ p`Åk|œà3„ÊgRXßã¢q&Ì*úΊñˆ˜Mü›–ܹbÄÃúq®¡øõìýI±Åüª×ñ¸.Œx¤x“P V=þõOéØÔž¾íOî Ÿ7õ}½~EŸ>yWqZFQ©¯:àY³Á ©+JýY 4YiÉ”ÁWY‡-î<$í®îa¸’Ä'ê¾íÍtYÖúÎN«ë¥E QSÚÀŒ¢õ¤‡¬hdÍÊ]´$ñmœô8e¥ÿµ´¥jÚy/æÍTP~^;Uõ ÌÞì%u4 *`“3p±Œ 9û4'X‹ª\­JÅ•ãUA®örëšʿܡƒæ“nK»W´Ó2-l¨mrögèþm•uø̤†«ÝÕÀ½ ÷Q_úˆ_—¨&SIyP”:”†·¢cÉ@TÕðPW©^Ë’@9G›Å*÷Â[ü¢¾:I³elÔ¯IEND®B`‚ pix[342]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment991ðjQIDATH‰íÓÍIE1à3ÌÎ[BZ°áZŠ%XÀƒÄJl%`#SB–Y„Œ£á⛉ÝÝìÂG~f˜Y¬‚SO=ÕÕžWÚ| "ìêÀ6±›:6éˆÍÑFÒØÑ a_ r}pHõâéÄS*“¤ØÚFBRM¡G’Wa[c¿ Ríq¨VOµ‰¿jæô÷*+íÔB±Ð d8:HõÑUt*ÀÞLx¦ºP/µé¿lÕzh„êi!’7WYGC\ùKµß–Š\Ï::C×¹j1;ÚrÑÀì–¾ÏÀ‰ºF¬hD¾ÍQ\¢fPÕ¼/¦ÛQ¨nú®Y‘>ØÆw¹7éNù¸?jEÒøzÊGºÑWúsý£~¬ä…Ëd7ÿIEND®B`‚ pix[343]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment990‡m ÇCIDATH‰íÔ±mÄ0 Ð/¨P:mg„l Un„”é$ãã!‹È*Uf(p)Žt€©r,dpAêÌ# ‘¥jæ‘ùZKæ^ ùc$þ®²k°ð}]µ?ÉTùéªàMõzèCÿŸŽý” ’¤*Ýiž‡c–´‘Wÿ,ùóâT­H]P•°t„Íеǚü¤ª¡æóˆºú-P¾ô¥fMà ‹6M·À~åÚSK¶6SWw¤Ò¦úf*‰žR_~«8Öl©|šêçðH4ª:‡W e×Q2,• ?·¼¡åP ®áÅÒ7PO†Žà8ÌNª*÷ŽÍ>ó•Z”ÚÚTýÜBËk[t½lrÛ§&M‹Ä ùUß#=‹RVõu!„á EªˆÃH¨ ¾b±ò[!ƒH }34ÇÙÚ*#ìÝjQÕ»úCý÷e|=uÆIEND®B`‚ pix[344]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment986w4³ñIDATH‰ÅÔ=ŽÜ ð?! […6Å(\d%®´mš1«)æ¹ QŠm¢ì,m‘2–¶R/{MÓ—cÑa¥ö2?°5NË´’úVLË›½ˆ¾\t>ÙÌ¢_õÞ°Rtt>+¬6òížžëìç“>-t—]_Nz\lö°Ã¨‡YWÛ¯õi©½íÇoyüzýU5•i\‹ZÒâïQS1˜ký̼SUIˆ×OJ²òø¶37ôͽmkÑ_iîšÕe>jò -Wêˆ^ÏK[Š"ŒQ‹¿¥Íñï4ÝÐì›{ù ÔfMZÔA³ò ƒ¨Q±Šs³¯5ÀGh¼¤¼šZ¨"k,¾#ËšToAH:8IõðN±š(ªIPÛK'g•âL®Ú»ß$©åÏ%ô{ïÄ*Œz§z˜†*@×T74ÀDˆ¬aY¯#êjDõÒ(å™Us¦ë½*D>Y-癋€ùgµQŽ–#âµ`n”*}¨j%åKQ{NÖµ‚-¥tSkõù%ôí½Mµ§“åxõ¤r6²Þ‚ÂCCë6zIÞc‡Ô|e9IêQ=k–ûŠkÔq×(I¹w±Ÿ)Ô¿Š£U@‹¾›6ã¬Émi©âøoú5k x˜ÏIEND®B`‚ pix[345]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment984™UŸ8IDATH‰íÔ1N1 ÐEÂÍŠÌVÌ5¶Ú\‰r» Çà*9J¸Aè\D Î"°G4Šu1éɱåxc'núsíq7wû›®nú¯´‡=e'U_Ç(ؾæjŠ#cµ$¯ÁÐ7 ÚTeÂæ9 Ö5¤35U×5ŸƒhQµÆòš7´ÄzœšuÝö•³«déÁ‹Â¨ËÇ–æÈ÷x ÝTÖfž<•-­”yÑu½j=ZDƒ¥!K]*ý€;Àg]3\6n_Ì÷¤k%†Ówc¤ÓÚ<\Õ·Q×y€l¼¢²³U#¶µîjÜî–Œºe ÝêÕžG>Q%U)]<˶«ÚÍI"Ô“eˆ2)êú¬X’0»†¦íúíÇ®O²Ë?#c3re)eZòûÐuƳTXMý¿¨ïD"k~fE¿IEND®B`‚ pix[346]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment983À<pIDATH‰µÔ;RÃ0à_cfDÁD”T1· ¾ Gà™‘º” Ý G@¾24*4+Ǧ»jBÔ~ÖìzBi‡cSÍÚ7µÕô¸ê'§‡Eó §«œ~­j[YµU8ÿ¨ã5šlÉFÒo† $ÍèŠÇ ª*@?-\h&ÀÄež.4{¼ͪqû.iOá ½ßuY;(Nýv:wõ©ê+½¯:ðjcC]Õ¤¬ŠÔŠŠ¨½¨Tɱ4´/“ aS5Kj€aÚñ:8Ò>ñ•Ä›YÙy€²Ò‚R÷1+Ûý4k—ù»¹Þô]y¬Y…KðL3§Îÿ;þÙ²1À$ºËi 質eaâÎ:I𭝛 y ìJRzt³¨½{3óª±jt*ªp§&ISmSTS©7H¬FÚî-õ¢0šhâ+ì`çèoùþ–Å®Ï;¿É™†.) šÏaoðzŸšÚj[¯ÐÔÔõÜP7TDEãoÄIEND®B`‚ pix[347]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment981éq¡.IDATH‰íÔ;N1 `R¤Ã‘‹¬˜+q€ÕN$ ®•Žk˜Š’ÐM1ŠùwV4+Ûˆ‘&R>)?BŒJ´*‡šCM‘Êéî¼oê{¨o¡¾ü`çøV¿ #»Šœ¯´xZ“ ÍÚKMX)*¦nDXa­¦®D uîdjÏõ”¶ÜåvÊÃS)òê=T{[ÛE1;ÊÏ®üjC7ç\("é*[\íÐÙQÙuñ´ÎUG;×àÜN”+yï½hÒj*jƒ'ü vå hZ=Uºå¼¹*7¬®jõî¬M#}µuhÒS·"‡ S‘ûÃ^u¦¢SŽ jß¹':ÒÊ«]ψ3š”^XiB¨KûZ¼îî¤D³$SÇ9óþ¯‚ªé“zŠ võjüë×OeDа V¤eIEND®B`‚ pix[348]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment9785{OIDATH‰íÕANÄ0 Ð_E¢ËÁAä*s–¬Hæ\É17èŽ E1nG ™Á)6“EÓè©ib»)ô²U:\)Ç­{ÙÕy ÛÌ}¤iWó¦ñ[?ÎõíÔ‘ÿìE»éMÿ[ƒ¯%«Ý4$O;bâ‚èiCXU0{Z`fOL¦±`òTî°ió•ðhzìð”’PБ"Ki¨<üI‹Ê¤ü<íhéèîŽLÉ.¸÷5›~¬L“ÚÜ~œ7 6ps´jÊMœÚ¬âÏÌjÑžuWÅÕ¨£üžpce©§…:ÈŽZÉ‘PCuUqXÕ²àê«S kÕ;ªb;®¿)ûÊ;Z3ç2TIÅt´*¡b™hƒº’ˆMýoA,ü%u< Ô^™FuµœtPW‹•Œ)û'C­›ëívؘ.W)úФýWÙº£ºjí]¶;c?û~oe6{äIEND®B`‚ pix[349]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment977‡ŠêIDATH‰íÔQJ1 àûÐÇ^@ÈE„\É,´žÀ#ìQoÒ#|©P“]ÅqH ®>l_fèG§Íß0'£„›ÞÔ§ ×ë˜~ù¦ñC}›êš"£« ÑÓ–B6´']¬Š†6U~q”RÓ‡¯GÔƒÙ í²}ªŠí†ø×Ô^õàÅÖ~‡->ó£§¹Á‰—‰×>ƒ³¸æS·$­š¹›·pÖU v”’VsÉ{¯”jÒ$L=”¨ÕZ*G­¦šÚ?5[:DµšÕTy?kaSëCš¨v‡Ôº\§šÖ°µ#¤µ¹¢oi@Å ž¬¸úšŠjs4†ì+§ÀE:ËQ©t¦ü+]q¦uª”· küÍ6 kèÀ™nÇê;=Xº*6&BIEND®B`‚ pix[350]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment976ð(|IDATH‰íÔ1NÄ0Ðo¹]Žàkl…9Ø ›Š£p #.bn2…åa&í²úÞ ‰&$žü/CC=ôµê¶pý„Ž@iQm˜˜6Õy…gº`2]¸Vøªo®pTœi9Q-qÓ|æšPchTsÊOIµÓSeÛ”g'tÞ,Åôòä/}‘â$÷:)^róï#  "r­Qœê<ÒîWðŒLÛ¤Jç…©ÈSÐaÃj ¦ú'7=s}ÔrÌ«žš*6õj±bÓDT£c]MãH;J,± ¾+¯5æ±JMªn¬¸£ÚÊØÇ*ªè4‘OUo»-ÓÍ÷Gyú»fÞœ] oÝ®upo|ëÂû¼m“\UãVí®zêÍú7ý½w„©æ*§âIEND®B`‚ pix[351]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment975i„yÆ8IDATH‰íÓANÄ0 PWA +rr V“£%¬8WÉŽ%WðÜ ì‚dbœÎ ƒÝU7ékR×ùÞ¸ üëßÔüý¾ª~‡RØRt\½©u‘³´@X(é SüÝ<œ)AÝÉÜëƒÇsuíú YY¹ûvµ¥ý¨IÑú…Θ;5 ßoN[ûAOfž(‚HÁÒHú¶FSÇÂ-uVµ…á[J¢™k4µf¯ªï¢²‘‹ªW-j¯¤ÁŽoù U¥© ïIÝ…qP䢩äÊÍ?æ’4­—S÷\U•dÑŒ³¡’Ù üœ6SGhAõï’_µèÚFִ͆¡rV-ù^Õ|T­*9š¸ìÔ ѪgcjUÇ/Š–ÈMnyéYQÉyOR\TW~+.hª„g$[ß]?¦¯/hŒ¾šê—§IEND®B`‚ pix[352]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment974ƒIP@IDATH‰íÔ1nÄ Ð((}ƒø )·óµRDœ Wrª\ƒ½%b2Ø«d½ú°R¤Tɶà{€Á›8ï··v øêÖvÉNÞ¯ž#døà;ªéÀ·¬Gšfú]]$¼@ÒwÓ ì%m™–领i«¬‘šrOSGϵ©®Í*TÛ´`¢ú¼©E¦8¹¦‘¦]éZ]tå0kõôT y  í´ô²Ò’•ïa·Úbiö#½ú1¾9N?×$#½_ÔOh%dy}Ô­IEND®B`‚ pix[353]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment973€çÜóVIDATH‰íÕ;NÄ0à‰R¤ôÐú´+|:®@°W”\in‚%.2ÒZÆÉ 6ìþ³4ÛáÂ|Jœ8cݽøJZ¼È~ôRI~JjW«Su:b¤•º¹å¹MZq<Õi¹·épªµÍ :ïY Z¯Vú~èÌôõÔXoU=txÖ'9þÜo ‹®¬iÖymUÙþVŠ­Ý¿É™’Vïxª)ZŠí_ÿ ñÊóІjØ`tãÔÑPŠ™hT·•ê ÐBƒêèH}îÒ3ÐL])ßw±Þ W éQ—‰égêôô+™„;Ù!ÕÇöÒcÍÎÔ`k õ¶[ñE~“¡iC–jÈPÙÔÜÔ#mÁœ=ú¿… ­ýhhK ìQ\©KóEEóNu¥‘ŽnV´Cj *YJÝÕ˜:-éhY/кä0tšíÄR¹¶~£ ˆõ €r¤IEND®B`‚ pix[354]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment972÷àìe·IDATH‰­Õ»q!Ðe. ÄàNp).AxŠT†K13 Ü™S2£1b½ ßÝi9ÆÞ@žÐñY8¦1̦±¬ÅëŠÐ-ÑÉ©Æk]ýÍ䩵¤[Õeeó€DN-AQ=sJÑ>0™¯º-/õ÷xŠïÚ¶™šÖðçÂ8Ü¥1,*¬þü¡o_‹:>ï¨fT/)¢9X½ÄGOß;cÞ+ÿ¶Å  ÌèhÒ4xõ ¨Ñ¯ÇJ©¤BMIFƒ¥,RVAÑ P§dU‘YÍ0jQ€Ó¢)²DLGƒqÑÄõ­~Õ¯lXß×[ÿŒ¡t5ú;Ú™‘³Aà;«álH·‰WŒi» Ô·idw°j‘uÍ–4èΘu=`Þ°j¼ÎªŽŽUíšnj%ÏÕ+JHÒ6¡Ã\é’Õ¤e2݉Ҍ³LœÆ£&•,£”êšæu4ŒXU †UÜECêM`#­GM î¹MU½Ç×L$^“¦¼S¥£Q¹“"§ÒÑNäžÒ±¦þt_ÔpJ/AZÆ2ɹ±JŒ‘×<½ÆfJIycÿüÆyDÖYo€ØôHSIEND®B`‚ pix[355]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment970îIóIDATH‰íÔAj! Ð .²ô^¤0=Xù:ü‹eNÐ+½€»f!¦™¡›ÒÄýZøâF£ “Qà_êÛú{§zèCïVFO{…\[_¥¬¦ªZ [ÊÇ>XuZÚ ºP²´BT½„jëUlÑÔ ¡î(å°©F¶U¶«ì»£%È¦Š–î‡^}%”0Ñ(8Ñ<ÓpUóI#øÚ&ÊÉ×2QÈmmÑÑ1Õm9_á–Rö´žÊŽ2<çâêX(ñnáÌø†vü™îZËìžTÕZWß5òXª£¢*ÉÓs5×u¢d¿ýÏÁ_ÿ‘Ÿð›~P•¯â“IEND®B`‚ pix[356]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment969y)¬_IDATH‰íÕ±NÄ0 PGAʆ‘ûF†¹Obd8]#1ðYäø…l¬ÞR¨q¯œÄõìÂKÕ¼8j긞¢'Ö"Ãþ2ªxP#þõ_ÿ€VojG.`*y,•D€¤ª›Fv®DM», °óUÕqt°5%ÀŽeºV-ÖCËÖ·H¢AÓ¶êP÷Ãv¯¢ûT#+™l=c ›œ '÷’¦–/5ÛƒÒÔ«6mÕ*ü¤(hÝg€QIª<¨¬èÕ´æze5/Z€.7(­™•¤a\×½òJé´ÄjAç3µýù{Í¢52ó™‹L¼f dL†W FL–×Ú6ô¶­Z<A)@}¬¤IQ·mçF±žý©¹’¶wŽY›±UKYÖÚæE­£˜žR_ŸºúØU –hÿ¢>X‚ƒÖIEND®B`‚ pix[359]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment966é–=IDATH‰íÓ;nÄ àY¹ ô¸HŽfŽFnÂVi§¤™ `pc7É®VJÐJ|þgy",‘¥y÷f!©áG Ôì R'Òsé»öUUРj:g-{¨¯Y; 4€ÚúJªFjA'³ÈJ5âêMØÄ‹?¨[š’\/j»k”{ÅûwuRßo<ï:€z -¤¾©oJs¯žÏÛLIIÕE?ÓÀz¦÷±š¢~TÙñ ìŠRç¤÷M­TΡá~Iû,VdS=˜Š:Ð#傘.ìHCÄX¾‹ƒRRJ…åéç+µEúhÓÜ#è®sÓÒòÔϵ»ÍYû×Qן¨ú[Ú}VÏTý’j®4\ërYùqzŽÑÂþëkèì­'úº"IEND®B`‚ pix[360]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment965pŸH‡¦IDATH‰íÒ1 ÐÍPXr„˜“p4ãI¼Jf¼ÚXŠ•©\ hL\ø6:Î(¿ ÈûLb–>ª¨Ç/MU´èÛÕgeÚ:¯1zô–j®NÆÊ8Õ™EEù}Óÿô¢!F顆\êó>§÷©Ò÷ð|^Õ§é4ÐÇ¥B•-ÒÍ*[ù"&㨲y ÃÝð%­CN1“&Å) Ù„ug_½«¢¬W\ÆcwzIEND®B`‚ pix[361]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment964˜x˜IDATH‰íÐ1!Ðo(,¹€ G¡ð`ìÅð&{:· ‹7Fý…£¿!?/™™€Lâ1tèÐïiXPÒ<ÓҊ׼ï"šÀ4ÔSÓÇQ'èmP­±˜+\Wg¨ûsÍ]õ°Uku¿•OVD UKt©k«¦Q15U#PG5®ªgªÕ#UÍt•¨¨¨û‘æ?ѭĨŠÅ*IEND®B`‚leptonica-1.70/prog/recog/sets/test02.pa0000444000175000017500000047527712233312636016221 0ustar dandan Pixa Version 2 Number of pix = 463 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1Øô<ÂIDATH‰íÓ1Â0 PWEê‚ÈÊ€”£”£p“ô\)G 7([Ë&ˆ%­ä 10Äë“b'?&µP×ßivHÓˆ4H¬æd- ¯H)}BM7[½&²Õi3;x#§„T¤àù<Ùª|A æ#Êh=¡ŒŠÎàäT*¯ù¥2E¨kÕ—w*C®5lU±Ž\龯N Æž}úŠ­BYŒ KúB¾ÿFCG[g!Çfß²ƒ̬«Gšƒ-u‡jT×®§/xSûUQ‡P IEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment2Aý܆ƒIDATH‰íÓ± € Pc8Š‹ÁÊ1\Å \ba)%Š&jW vÿÚW].Ç"ˆfoµwjÊjຕYõœ5@Åò„E*g »\Š5Šê”RU]Úaê*¥æÖ±ö µéÓÈÔ^@å¥ê”ƒjF¤Ôsâ~ðRRRRÒ_ô"à!Ók“bIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment36úì IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment5ß™I%:IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊÒ^ö7^ÙÏxeã•=Nl?^Ùýxe±QYbeÿ JW ZYæ”Px& >IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment6FŸ|IDATH‰íѽ €0†á‹+ÁQ2Z)\+â"q;-‚Qìó ¬òµ÷Ãdˆ“OšÄ¢šj=P7VGQWÖ@:£.¨çz7‚N¡^·Ò`AT¬=Õ‘Šô¨]YÓ›Bç[µ^ñÎ9šzÅeüB%|tG-§iÓ¦MÕ ôódbû!IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment71—( IDATH‰íÓ±€ …áx”ŒÀ(®ä„I\EÏEA;*°¦ù9OéHûÝå./‰(•>š=èÐ(to(un)M´O¨¶Ö­VOzÒó•Ö¥ÓPÌYÅ’®¤!‘–nêH³½¾(d• i™#mA„þˆ/6Òä»ýþСC‡þ®ê"¥ œÇ§IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment8¡(5˜‰IDATH‰íÔM € à‰ —aŽÒÑôhBñ-]„fîß ’h‘³ýx0?RHyéÔi†ý—&ª‘j˜©Z¦^©®LÅͦ0ò½¦CrÕ$0tS6…4‡u7q}¬–ë®D5þJÓkz(›BU‡5[°ÝѶ®x¶±%(ÓŒBõÿº¡C‡~§'|Þ®ÍÏsIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment9Ö/rIDATH‰íÓ1 À @шCÇ¡Gñhz4{¡º8„¦C÷?(³>þ1˜$T%€Vñ E\·æ!¥ª=uëÖKwл‘Z;H+k -¬‘4£&#ÒÇ‘ªŸ¦X¥©?ÅX]¶LUßþÒ¥K—þE_²à(z’sdiIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment10ÛlW+CIDATH‰cø40ŒÊŽÊŽÊŽÊŽÊÙ?òød?àÕ{Ÿf®вðÊþÀ/+×d~òeP"‹×UÿðÊ¢A* ú(J&ŒlÄIEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment11¬kg½ˆIDATH‰íÔ± € …á3&ؘ8£Üh8š£0ÂÙQÎÌo¢&4Ð~¡àxïÄáìÒA3ꡤA›l u]@KDÕÔtͺ³¦ª=ôà»éAéEOúzÎ…4Ð!­BÙð€ê¬”IwJ»7Vê‘WÔ‚ ÍÜß„s&5¡½aS§m6tèпõ¼Ñ |6½UÄÎÅIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment125b6¤IDATH‰íÓ!à ÐÍ‹ˆ_Ãzƒ­È‹ƒTpêVô±IË«cV4`ßðf1çD9¬ºxZfªºZš¨fX’Ó„ýZ™FØœ׺ª‚Š¢U êjéÆñQøªG4ôƒnI*ôg½zzþ*KÁUÜ]}8šá´`Ùë¨iàZ¹î9_N1¡›|k¤{nÚïfª&OëWtÆï:tèÐÐ hxëÝs¼KIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment13Be‘—IDATH‰íÓA à пË2Gð(Í­G‰7²qa*¤«ö14 ÅÇ8ã ïá>‹~¨té"²SMeT#$Ã1 p©¡–é†røI}V¥y‹†J«òµWTk“¹æ¶ÒªtMÃ4ª5ëê2 W›°ò—c"»ªªÅF%ïë˜üßkÔwè>¬ª©So£èÐÿ¼QCßë¬ûéÙrfIEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment14Ü“2 IDATH‰íÒ± Â0й Ìf º¬Âtx´Œ’\ét&)ý?A¢ ¿}ÖÙ¾;T‘„ÝJÎ4MÑ0RE,8 ÍLý½L q¹õ½©}¨EëYV¾ÆÌµÎñ!µýoÓÂûÜ”Ï(M5kTåå.Õ»¼éŒné—:¸¦Ñ¸:Bؽ†a‡»ð­«.f´Æé>‹úu5©þ#íæÐCÿHŸ,ÊúÿbXIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment15«£¤ŸIDATH‰íÓÁ 1Ðöàqí v’–ì`Gllí$b9FŽIÿ ‚à!s}dH&ࢠ?Щ¶Õ3"ÓºøÎµ„ï5ÖÄtº ½™ }\©Zp—ú ªsã·êÓ¨üEmè*´h=Tç¢ô)õ.neг:‹#ÕŒ  Úƒ!5‚Ϫ«)M&2‰$2Ù7%óßïUðý½Hõ©S§Ný/}“ûôŸô\.¦IEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment162ò®IDATH‰íÑ1 1ÐQ íl-¯±…«x !é¼VŽ"xt&2ÆÂÝ%æÏ¢b—ß¾b>ˆ…úY¯g¨Ù. QI³š&• FQ=é„Õe]ýM7¸•Õ±Ã[Mê^Rß-%=ŠêE’º^o5=Í íù‹P/D «íõ^j 5h(ÕÓzP_ªk¬hn¥‘Ε۾ÖxÓç©•ÇšDå/t')+QëiÚ´iÓõBÌóímzUIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment17Eˆ¯IDATH‰íÓÁ à’8ò<Š&ÆÄ=–< 7zÄl¡–dQÆhM4Ù‰^¿Z (”ƒÝÕÇc©SAÑ ‡•> ºÖò¬×²²·r¤JTÍ*ZNé 9Iõ:^¥Ü ÿ¢¨Ö½ÚèÓGV»è­¡*HzfÑ{CÇ·¶ró`4|S+i²|®’T%åYHŸ^5VÒŒæ¡Þ…ª<¿ ¹&Q±k×®]÷Ö_Œñ²ÎìÎIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment18Õ·ßÄIDATH‰íÒ1 ÐÍP¤ô…£èMˆÃ<’T¶^!]ÚtR0 ÁX8æG+ÃìмYØ…•DV'ÕꨊzÉ{MÔC=æ}TèÞ¢[¤ôËÏê Ò) ´;÷{ ºcêÛd±æfÕ@µa*àjö*ŠÓHŠ xè»*ÿ¥v<·ezΠÆ:mÆ*Ì o4=é•ê𢞞LT%‹ÕK²£Fêr쉇çªè"–©ËçÙ§©l¤dý§ž*ôwU­ºêÇzìvôuÊò IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment19¢°ïŸIDATH‰íÓ± Ã@ Ðo\¸ô!#x4]—µ )²†! ¤° ‡”3©ÿO\œ¸î¡|!„¨„ë!u Ÿ®¶Æt±,4ýV:·ŒŽ«m¥gêU}`Z`ÁÕOÅÜÕdQ´Îêg­»)ÍZùö«®R_Ts<¤>©Lq½côR;© ix ™sâºÔÇõ}žƒºP±…o5mÚ´é…ôŒ¡ ¶i›!IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment20ðAè´IDATH‰íÓM Â0à .ºì¼†»^ɤÁ‹Å›LoPpaÀ¡cB°ð& â*Ù~¼ù ©qfúVÙC½¨Ðéæ4Ñ€THWr–ž-ey×GÕd«Ó¸Ó[Õµ¥û›ïU¹èeæœ*ÁnhéÆÕY}ÖÐÒ~7è²ÁÌY¯†ÎYáŒrE¡¡`÷Š«Ðh¼+4šŠÂz³Æhì³ÆU#M†2yCˆüú¡ Ôþ~×®]»þIŸ2x“Y"˜™IEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment21‡F4~¶IDATH‰íÓ=Â0 à‡ÊÆ Ú‹ r4wãZÙ¸F$@˜ÈÕ¤ªç"B¤zÉð)Nä¨=V׫©å|P ÚwLsQ™FHFÃ4@ö–¶;C£©¡Uæ]ÏTŸï¨ê¤BU½T©ûJ‡”½[£yA%pMpádêj„‹ =*w×<Î$ïo£–^Jv:uz7U—4Ò]¨Õ@wp O÷wÒÎÌì,Íbé<6ý½­¦5¿ÚôGúµÝéJ[³!IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment22OeÄÇIDATH‰íÓ1Â0 P£ s¤\‹!¥ˆ‹1pnŒ„­H‘é‚|w±ÐlÖ‹l'qHŒÕÒGzÉÑÒ.X™[•“ƒJ±2yC ù¶Hj†Ø!Í+S7N5!e—V™R#³4ªèÅÔ+«öHEž5¾*û‡rª)¬+ŒI‰ßó„ÁÒ¬º‡Úë î ’Ž‡1u:ZÍßµncp¨èr!Çà\ɼvÒ&X7úûGC=ë+ZíëuguÖÿÒ×ÐýQ´u˜“IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment23iHUR–IDATH‰íÓ± ! PG)®dFa48¥È· QaKi¨p`€ÿ#ÊUиx–ea[Œ¼$k•hO¨ÚõµH0šÅ})Ó]Óê,Mh†ú¨žè›ªé„–p^sdšâH@Úç› 6ªÚ§5ËFõþCûòàÊm?§®‰ƒû\¼ð'?FøÃ zªnB‰®–.]ºëêa…5w”IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment24÷,Àñ·IDATH‰íÑ1Â0 Ð_:tÌr”Þ¬ â ¥F½HÐ †¨Æ-êD~ Š•(RžìD6´¿ÔÔëÜR]:•†ªy`»¶ „Ï€¾ '® Guídp‘ªûJƒ§ª~£P½JPž«bg()Ÿ‚Þ¬#\ϺòéëE“»Sm55“cN­ì[i—Ó]¸.ð‚Ž©ÀÅ]³¿Úõ-ïÐo‹çÚ»=ÓÉÆ'9|ucÎÒ¡4ªV­ZõOô ®wôÖ\W.IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment25€+ðg®IDATH‰íÓ± 1 PŸR¤ÌY Âf”Å1#àŽ’H4‘8 |ÓqMÜ>ÉJ¾mR£2ý[÷ o¬Ýi£„´‘ E¤B«¡LIpçüCãhŽtá( ü‘ãðxAõž8¡zÃ*Q=Ô0¿ê.i'„ÈÔFñA§ûB5}`o,ºè_ës†~¯ªÖ7~(ûBÁœqDIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment27n%‘KµIDATH‰íÓ1 Ã0 PÞê r“êh–éÐ1Wò–±WHOÐŒ‚U'”R_K‡R°&ÃÃÆ_–IúŽ7¨^ iö*Tq–R%´¬ ê•jO:À¼ ËW°FQ7ìõú^ÉiR’½Þ?4å_ÐéyÂêõbªNŒ´S¹jt‰–Î^Ÿœ»ª'B“C\÷-U„ò®JP5l{•¬yÖQ³³~Ù §ýUM›6mú7úbÓÇ©d0ßIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment28þšŒÚÐIDATH‰íÔM àiºÀÄGà(­.õ÷f·r®Ú®»îúçúñ*ðdÿ ¬IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment32TT…ÂIDATH‰íÒ=!àI(°ã›àM¸Š1Ö½Øx %‚hc³oÝÒ%Tó…áïQWF¤mÚì­FZÈtñH3™JNU‹Õ¶É(Zƒ¢®òŒ4M¾(z™¯ªŠ¢ ë=¿”ŽgÔ”œ°¨VÑfMÄ›_ˆ#Ü7\4íCá}u-}ŽH3Ï k tÂ?(ž(¨Ê TGGœ+9¸‚3™È-Ͼ’GZ‰û˜ëú®?Öph[­:ïúZ¶(ÿ¾V?Õ®»~§OM/ð@1ÃûõIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment33pSd‘IDATH‰íÓÁ à …aW–Ê‘ šQX¬-£°As$Â%ø?$R{Á×ïðŒõƒYåÇÚiSÒª_%tÉžî¢M’¯´ÜÒ5UØùAk%µ‚ºåtM¨Ñ@%˜ÿÞþD jö ÜZNus·<¶Z.jÒú͉Ø+Ww‰ £rÍÏ=OaøûS§NzU¿Åóevç­MIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment34î7ñ°¯IDATH‰íÓ-Ã0 `G ë5Ær´fÊÅ´k´ê2`õmÒð3h5RÕô#þy•å˜L#Uq›$¦*N%rõÝÒÐæ`è»y®qéŽë°_oÃÊ=®J»B3uŠP:/r€Ò]!{ôª/è‰jy¢q}UKQ1›:ñy¿*${Y¶T•«ÆÚ ¦º¢wãú^F®‚òѨã÷)ÉÒ…âáÿ½ôÒKwè6þKtuný@rúÅ­µIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment35™0Á&±IDATH‰íÓÁ 1…áÌÍt°)e-LÌVb-#6±=*„Y%åä'íWL;±ªi#¶C´Ã:†cÍ^£Ar®kíõ¶NzPm±ú¤ê…öªQu(™ö¹z<7®õˆ5ì,Ñ6ÚV†kUÏWƒµˆÛ uСèö)ˆ Ô”<ÍS—'-‘†tßóWüüA® UòF“ ê­×ñ¼Ó^®Ys]tÑÓ'p[´×&;wIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment37w>  µIDATH‰íÓ± à à“@\ ® ¾HɽV·\Ÿ ¯Ô¼‘c{WÓ¬þ…@ÅAüôü%k4¡t]‘* &i.Z:ÐmWßÔ€Õ1Ö`ßùº^¢E¬7>õÝÙª¥EgxfK¬ÖWÐ ÖÊdÐÖÙÈiÀê‹ Ô§X”¾~Ùø£¾›ºqKS”ÜÒG^°—çê:ù µ¤.S#Ï^qž÷¸â<›°Q„z,8éÿvíÚµë¿é¹ûL«Ý·¥IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment38ç½›ÅIDATH‰íÔ½ Â0`G)Üá¼ ͉((Á©²FØÀ¥ 댃 ó{H¤¡Èk¿æþtª j»ÎL¥gš4Óè™>hUí¢>zÙ †ªe*DҫT=z¦ ÎY”ÉîHN&™ VUnɶ×ðR—ìU|rX³nñH“‹k4UÔ3Óybz¥Z¦ÚÖðU=Öü«Š Ï*ÛU[øV±ëXôõÐÕ!Õ—†z®†zÑB]õ]wÝõ¯õ ¬–ÚÉIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment39† ªIDATH‰íÓ± ! PK)R2£x4e€¬“’(Å•·( ]s:Òÿ_D:é \òdËØ Fâ"»è‚µŠf¬E| PSSQª«Fqÿj •‹éÊ®ýÊPŸf1\KXÛyÁ[@tµŒsÞÞX+WgÕ™êêÔÔC½q]ݦD=׊ßäkU¢9õiÁ-œúá4œÕ3ûe\TþÅСC÷Õ…êç=V¿öOÛÂ->IEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment40¦£nÂIDATH‰íÓ½ à à³(\fB6äÂk¹ðÁJ‘+ Q.x€÷”ÆULAóïø%ÍËÁ:bõ®ŠCűH½Ø,Ñ$¬.b¢!aí4d¬†éòd+/ÊTwµP'½E5h7Õôí]Æš};g˜»e»–è\ð޲jOt¤j°.…éHÕp¥¹&»@r“ó¿Ék뤩۟%ÒÒï¶Š:þïÿ¢õèÜÞ‰®t.×ÇF«âú¢JsO=õ/õ @²}|KdIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment41Ñ“ø¯IDATH‰íÔ1Â0 PG2æå$äZL‰¡c¯bè5‚X3zˆbÜø­ ñ˜Y²ômPú¶Bš)µTx@ªÍMuò,¦¾DœÀDG è¬:nT'¾šÚ¨­§s¨ÁìÌÇ]Ê@G¨èuZÕœWuÞ¨ÍsZŠ­YÞ¶’¾›*§jf#HKÔ(u’Qb%à ½A½ïÐ+Òê¡Ú»/kv~p¯ºvíúúð0 (+(øIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment42HÂB¾IDATH‰íÒ1Â0 P#†Ž½á)×b¨h¹Ü$L¬f"Øÿ(C‘jEYž,[?'5È5iý‘¦ªõ`-Ò` & ¤*A™FÝí‰^×=Ô»¹vPŸÎÔߺ„zö¼ƒYyŠ&iY‡"©mjΰ×ö­­ðV¥É~ ª>|­ kªÚcõZZ®ŠU» j–˜̪HŸño÷““÷ýÜ=ST —InõÍ~£Êz…ÎÍT*;ë¬Ö¢ÄbO¹©)IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment43?òÔ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment44¡vgwÁIDATH‰íÓ» à àC.\f{³R&ȹðYÅdpR¤ .ÄrÉ)â4‘‘¨>Ç=HèK]XNPgòs 5¡LÎÐ<Ôƒ[Õ¥j“øƒz¤ã šhܬ¦&—ÿ(–T`]ʾbíUßUxÔõÌ«>«*ÂW0ŠO¸ú*>â³Egã.~6ò,¨CêäB–²¡Ôk‹ß%ÒÇ\Úõj¸õU•6C¤;L衇º¿²¥ÙÔFõÏúYÞý`£L”]IEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment45ÖqWá®IDATH‰íÓ½ Â0à‹R¸ÌÅ«0Ø…$VJ—’n„£sy8¢~¦!’­«ü]qºAã%ù½~þ¹F•ÐÐEü1º'4•ÖœgäDu÷¦÷ n\1WªÛðšŸRƒv²H,\íìÄÕB ¦/ó£}†y®`S¯¾¡“†LusÜeUU\á–8*íF] ItFëÐÚ«:}¸f˜;äB»víÚõÏô ÏAC5IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment46Ox[´IDATH‰íÔA Â@ ÐHÁn„¹€0r1¡f¡·ð*í ¼BÁ LwS“v+˜_°¸‘fûàH ¤`Zú¡¾ vRª4,-‹@kí°Õ- 9¨^ï¦ÏzªMeÕ³­ R &-[´såjkŒ´Ž"¶>Rí¡†,î;“­™Ãhkâ~ÌĦÆD¦æ½•£[´1´ç¶¡ºIÁV'Æ÷¿ñÜ 8y×]wý'Üù’::ÕIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment4786Í·IDATH‰íÒ1à PÓ 9‚¯Ñ!*«dr’\¥[¯Q©(cä_’ý3V`}Ø o :'ËïõMõóDž˜V™ T÷Cç®F®3D¹FˆqU‰.ŠÄõž`Tënn‰)ŠùBÿŒ—ú•¦Gtžd ÙcGƒÇ@u®BuËè(rëÞWcYYÓÌ´¤|–Õµòw‹†Ý¸ÆPo4r™ªPm[Wù\ÚŒøEïóy!õtEO1tèС¦_&AúeˆÃIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment48¨À+\ÄIDATH‰íÔ1Â0 РÙÈÌIÈÑÒNŒ«$êÀ5Ê 2fˆlZ¡nùFj‘Xšõ)²¥oÛˆòz³_ïš²Õ´8M'µnRõ©êMÕvS«ÒveE³­*›oz š˜W\õB…FسøBí>š©á¢²ÇZEÓâg H³›ëB}Yíï8júHÛURÑ4îÑŠµúE[¸h¡X)Bõ‰q¾Õl¨çNÌ ªé¤‡S'ó¸F|7ú A¸f¿¸u‡zèŸô XsíœÔw†IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment49ßÇʳIDATH‰íÔ± ! PK)®dÂhDº²RN)n;eÒá¥þ¿ˆtJ ,*žËÄHœå}Q}`-w¬YôªTE‘n]ÖH5Q5rn–~4¬ÆbM"T¯Å–ÈZËX}>ã.H"ÚD½IpmUO j v§º’ƒ]¾ÔÕ5@]ñÍ™KhLµE²³¶õVbź/½–° '«Ö©òʸ’Z}bèСÇ*ùc=ž™óõ Ýðí›s–IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment50¿’/ÔIDATH‰íÓ1Â0 PG2r„Þ„\…c°%U®• F®ŠÔ¥ˆ‚I»€ߨíÚ¬/qÛ!–£yÚÙNAõd[²HÙ@9Ru¾Ty¬Š‹€5ã«×úüÖÃ…Ks>qRƒ”{ý‰ƒ–é½PoÄwáÚWjílØÀœë`Ž-¬G³UÿQ=Mu\ ‘u4™¤6“"[él`…µ¨Øms¤iêþ Q³Çä¼ß5M¢‘­zõ&êc~V¨gQ+Q÷¤ïÐT¼wÑE©/còü˜O5U}IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment51È¢¹ÁIDATH‰íÔ¡Â0à.•³¸=JÃ{‘”db–7B ö[*f› è’Ò£Cóÿ0ÅNöËß4—»*!uV¿×§f”%ê•MÔÆŠi¾鸈©™"Ô‡È-¶°³tDéRµ£ª¤Çš¶OfOFífÚèȲ=VWÒ¡ °Wu43Ñ`\ÀêíÝCUyžqö’ÏœP1]„éZNì[á.”u¤»?Q=2M5U¼û«¶›üW»îúQ¯_èv¯ú_}0á ¥kñUóIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment52Qó«IDATH‰íÒ!1Ð!ˆÊá{’^ ‰Ø°Å!8TR‡­\Ñ´L$ÿ/àúíK&“™/$ÈõA5`MZÅCZD‰®5èzÂzÓLô®ù²‡:iZ®¿+:G:i$zìº] ®sWtÝPG&o«‡š»F¨Å%¢óÎô-š&‘ìáLÏ~ßt®°W¦kž\%m/®|)Ši ¢N&:tèЯõ ޶ò! µ0IEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment53& ÕIDATH‰íÓ± 1 …a# —áFÍrkEb££¤H™â“ü#qqûÉ~²%‹C­2uê¿h;¡Š·…´&Ð\5Ô:zQ ´¸Å¹âOÔêëV2èý€ÞPõ{í:6 /ÙíûAu¥\‘%Ö]$5RuLV;£Jx+»æ«›÷ ©Ã—цêS§þHߩɅdÝâIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment54¸mV6ÆIDATH‰íÔ± Â0à+â ô }‘B_ËAl­ààè 8Dô]2„œ©tòhÉ–,>Âýw!ÎH9õÕJ:Õ<Xu ê¨=Õ‚:Q-i¨U jÖ~x¨áð¿úf“ÎX]§ÙÃn,ê`'?ÚB=Eí‘Ú³f;@µëQ±¹'yQªx"¤†(^Ég­JR­—´rXãP¹}za–^5ÊwP9ÆðÔøV ²¦ÃåÜ?ï:‹úõ"ê5›Þ6(-Zô[ß2 ó.Úv0IEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment55Ïjf ¨IDATH‰íÒ± 1 P.=‚Gñ*!èà3dÁ)ãërXqrõWàŠ¤±*Ãñ?2©1ýV¦N\(A%Îi{+ÜüQ6fÞˆo+Ö3ïZ囨«pÙ»n¸o×zIHáµDCŸ5 ½öÌGu6Õå°ES½¯¨Q#röÝ5áÍn¨BÞøušYðU¸œ°Ö»©j¨ZªC‡ú}dË%iIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment56Vc7©IDATH‰íÒ± à гR¸$e:¯àÒ£¹J(3–7ð±”pGLNŠ\…ÿ‘ IÁoŸ>â$’X©×§aj©J_¨v8ˆŠ*ž+&£W¨Z¾t¦z£ бi:¬‰j5¸GAR‹ëD”c‹í@)W½Jrq<¦mU4·,6_¸Zò³~¢=Ó4PõV±.\G«Ì÷>ØŒ5úª»XµoŠÀþFcŠ…³±ªŸà\U L]„[uqPíì÷í©p··-ã ŽÕ[ ’-?¸Ï§žú/úH;éŰ(IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment59ÆÜ*‹šIDATH‰íѱ Â0Ðo¹HÙÀ+dƒ¿R60ˆA² ÙÄlà2H–?ý]¤”Æ×¾âN:1’›ü\%&‰H«èSÂ?´p›*ÒmÒ…è¬Ëk†šg5¦ÁÖÜÔ&ªkÓÔ{V[©> ú¦Òº«õ Õ¥PT‘kq…+\õUGz™^Fµ]¨Õ35®vX#Ó·1µ®]»v=A?Yý‹2lküIEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment60”-ÁìÑIDATH‰íÔ;Â0 `W{„^)= ·€)01r®’Š‘+¸#éD‡(! Cã b¨×/;¶BĆÆÐÔ²·:R@-•¢r°¾Ô“nduIÚ‘®¡n}.©ÅZ}¯l 2ʹaÝB N|«:êBIzdååþFuÒ.qíKO¬í¼”tÇš×bÎX÷Qåz VFV¢Ü¬2ÒŒ+¤`ÚŸªd]Ʊ”4°]œ8öÚ&q¤?gÒIÞ ^ žèa€*¨½øW½ØÛk[нl÷—¸âIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment61ã*ñzÃIDATH‰íÔ1Â0 PW2ö9J8JÁ–".–(IoÑCHH©à/KÿúdKQlS™é×êR2@+ÔB¦’“uä^.k†šhDzÔ’r×ÔøºÕjŸªu2§-ŸižÌP‡­º‡¦7ziH×,Ù"MHC²JÖ˜ìÔú®Û÷®™ «‰Hu,@U`¤K¿wÎQƒ×,O]˦1P‹”»ŠÓÞØ!-÷r°ûj7ô¯ÊUAÕÿ¸u»îºë×ô é–ë?Y^IEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment62z# ÀºIDATH‰íÓ=Â0 `W2rrÌÉ(CG®ÔБ+Db`͘!ª!cßC¨Bbè[?–ÄH޲L‹¨©5K‡4I—D‘ÆZÀ4m,$µµSÚ@uÖg¬Þ\vPÍ\lr¥E:R½rm™^„é ª;¦Ó{Ü’i<S[¤Þ¸ÁÕ>ùþƒz¬:fE¢Fü Ãþõ ³ø¾öƒª?iÄ­Ê{ügµ©S§Ný/}ZÌþJï ‘ÃIEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment64“@õÝIDATH‰íÓK Â0à)³³ÌQro2qåÒ#x•Þ W¨«.-t!…˜1¥uF0 ]øH&™Ÿ å IO^Ò"û •æU‘S’sx¯yÔ„ ó®^É º#oEE‡ß©Ó¢ª¨l_O‚n)öæTUHü¬ö ŸÂ¡±O¢æ¼: ¯`=¯G°ÕšU,§+°¯K@ÇëPr @ú©8V—‘yd¦ª_¾TÔ&Žñ|_v¥Á}ßè Ú­E-E¥YÿHCÂÞ«¨¨m‚^D­E-”fý¡Þ>ïÿñAIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment65äG5c¤IDATH‰íÒ= Ã0 `}„EWê ÈÐk¹tÈ1jèÔÍ‚kJ×÷Š ´èÃòŸ\%±¸kæê«9¦ÙéI TcS¸ïí›Hï-ŸTñ}¹n\WÚ¹Õjºèû…ï[¤î\d7ø’[™« œc¡[T¸ ÖÉ$f¨Á”¨Ï|«V¿â©[|Mÿ`¨e‚jñןÄÐîôÑ婆íA?øKìÚ'ëIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment66}NdÙ'IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽPÙ߃ÑU÷ÈÞA, P+Q¡ìÁŒãIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment67 ITO¼IDATH‰íÓ1!P%Go•¼Ábö{²l,,½íXI#Ýšø1Ùhl Sñf2ɈÜ8N|_oM ª& õª&lS§sÐXmöê¡(]E²ìwŠLhkQ³c¶Ú©IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment69íñyHÆIDATH‰íÒ? ÂP ð<:t{ßQr´tóXV¼HÅÁ5nK?_ApéAÍú#ä¯ ˆV>¬éØ]Íts©˜ºd—ÄUû(7Vë…vå®ê NóT‹jžqžˆNæZ6’—u„סŠbÐe½m¨ÎÕ/Ô꺂ƒj®Ðšp¤:Zž*p z)º¥ÚZ¨ê&¡æºª \Ëˉ1ífÕè -ÍÊ}»@ó£þ’>»ûë_^¯¡oèh¡j¤ÓŠê.T|SïT¼úiÂ*àIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment706ð­ÐIDATH‰íÓ1 Ã0 PC5ú…\$Ä7kÓ©×òMbèÒ-à_‡®þ¢tèPbŒ—‡dqFùX§¯b;ª³§šêuTGWß«¡.qõЙŠÍí¢w ¦FC‹‡¥ h²•Õ\Ôã~kâ®âhŸ‹È•÷¹jLdÊ£lU}Tó T‹«:3­:óX ÷:«©´ªzÍ,v ÙÔ4ð¼›šêÆ‹Ñ:…“ ‘Ž(dÿ ‘iÝv>A$EnìÆúÖ%¢4Ò>aýýÕTzè¡¥Ó¯ò¾»áÍÅSIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment71ú1À;»IDATH‰íÔ¡!Ðá@ž£¸k%%DÆ×é„(`&"9wc¿–Ý…‰Dü]sP~Ò·ÒŽëÖ°qÝ«RËX™ÂYzx¥•iìh ×ýèBƒÔÕuwŽz׸ޅ^J]]”6uîW=¨6T+«dÃÓ§Â>Aèš©Î:ª6þ·rýÜoTÓÚu6Þj…êL¡Ý>“¥¦ 4Ò)›á38RùtÏKAí+­£glÂK/½ôú#d˪’YÌ’IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment72c8‘¿IDATH‰íÓ1!P6[PîŒx¹Š'Š-½†D!í”[e ÿK´b2ÝK0ó uQ¿ÔÙ±ÇJ6ƒŠ’r¥EµHÓÚ’†ƒÚ³'¬šÇi@Ö“†ê$½ñ¬s4VèÃKzï$ ê,êq³Æ´ÓþÆ+íeY©FÎp¾WQG2c6X­Ÿ,ÒH6œÒ\ÂII% TR –nÕu>ßôN÷STPM?u®Q·]ÙV¨x«¦Mÿ® r±÷@†@kÑIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment73?¡—IDATH‰íÒ1Ã0…a,}…£Åc·\ÉGᑺdˆLÝ©ÿ”¥’ùˆC5yZߤ]H›ì® ~m¤'ªåX“÷X%{-¤ÉI3jRÜ›ý*~‡:Dö‹5LòQÐd¤Ùj¬Õ«p_%µ˜‚nSã¬R×SBYõùÒqÎ-ÔïAg³‡{ÝÊo jéÒ¥KÿF?.–ø¦ ktIEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment74Š[4´éIDATH‰íÒA‚0КšÔ7ïá¢ÉX.9GQâ8åŒeŒUÄp&Câ‚Ùý¼¤ùéŒ@f¶bHM-¤Ïh.tI=ÿT†Vc…¦9`t$Š9Ux²´jÜ[ÑH^—ä´ ^udg˜úÈèÜC׌ÒBkH-~ÆÇo8HÅ‹ä$îX•d«³U…P”¦¬Z«rFW,jÍ::ó`]ï(n+?}o?骾æþ+†mu÷ŒEmEÙˆº£) §ö׫íupÍ~ИÕUÝ_«ëì§ÕuþÝFýVï)Y°[:ÙIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment75ý\"¡IDATH‰íÒ1à P¢ 9BŽâ£‘N{„%‰8H:teôÕ%Q×ÿ‡´S <Œ±32÷MBµ±ìÑä„*Žm©úr/Ìj9&Òx¬çôùCl¼™M8gÞ‚UeS¦ša­¢ö–á/¼¨Ú®ý9]©zªÊD4˃꿨-š )Œ3¬dÙqOÎÍÞÒ¤Ÿ·ªúïùdT­ZµêEôçfÄûžó˜IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment76dUU˜+IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊÒSv>~½ßñÉÞ§™«±,ߌQ=¦-¥sIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment77Re³IDATH‰íÓ» ! `%#0 £™SÈ·Š»ŒF Ï Ç'¥HŠß‘PšHPòI¿œ§ºß+“¥5HKX£pœT—…qd½®jP%¨Qä 3IdŸÖh©ó²ßqFî,&T¦­ÁȾÑÖ ièåÒ ¬U/·O}¼©’`U’†"lé‘Ú--ÏidÊP‡¯”þY»*¬¤êÙ&4Ï^´Åp‚ÕßnOûëõ¥K—.ý}s£1›]IIEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment78ƒíxŸËIDATH‰íÓ½ Â0àÔëä5œÌ›Y¡ƒ¯ÕÒ¡‹à+$tuˆ[†JuÊ9‚ 8ô®ßp¹?G$RgñkõTÏTË VÓ ™zÍÔñ¥–ê@uüVLV#SMuWæUÞ³i²¶HmŠb¯‘ÎY é”50­BC´&:FY>ÿ¢=Us":z®G¢CÐ2B³â‰ò¿~Ð+ջª.ø 7¯º ¡:ÕùédôPÒ²«^üu¶oN·,Ý:E5•)½3¸é¦›þ§>wGÅÇ$A¾IEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment79ôêH ÍIDATH‰íÑA Â0Ð)²ìÄ^DÌÑRqáÒ+)]xx#n*†|SWý³P(.f÷`þ„/P^+ÓjßGª±BKU|Ã4ˆûAËfš¤LMÔ‹.Í>8œS3® E¯Lƒ¢wTÅS½m=ÿQ­ªÕta@uep¡7'®Þ £ ì¨>³Ážê¶èª­¹®U]š\q“KMD[±Š}«±´Ï[@rïüQý\7ë¬ÿ¥2}îMÕ¨j¯«×4éê4ͪBWü¯¾mÈúCð뜶IEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment80 ®ìbºIDATH‰íÓÁ Â0 PG•ð1 ²IËd¤ŒlÀ  U1)½æ$$n‰r{²Û²9³üWW…šœ¥êì`þ]]ŠPÓ4!-š±úªj Z$’Ì¥ÖŠU”ëÍtiâ¦ÖÉ"Âuªƒ º¤ÐÂë¦çI³‡±yÔ;RòÉÃX{Pµ|$嶺ÿ¢#Qe­.±X™/*¸WEP“íBýlJDZGçkY­UÐÓØvs}Qµ®]»výEß]àî¾ úIEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment81}©ÜôÍIDATH‰íÔ± Â0г®pG@ñ L@Va›e<‚K&‡“!¤ü_¤€&WYz:'¶î[ŒT/?Ö¾c*r۪㤎i¢–ˆ:‹us¤jƒtP½Ý‡´Ô^M ÐVTioó‡wr×]wýÖ©”Ì‘BAÐÇIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment82ä NÔIDATH‰íÔ=!àÙlA³‘ ˜pK+¹Öv²7Ûx§³¥Ü‚€Cbé{…Z,%ð3 ´$ßéƒêÈ´R-ŽiL×È4AìºPÅKîjKÎi5U°)SË%0{’b*T§é6ùzÄ*c½€[N’e(ë¨[”ˆÔé% õy‰êJôD4(U–UÓ¨,Ë5@ݺ‚ª})Ëž‰ö³"ªD‹×BÔ™‚·Ôëy©xûM†*r…:6uÕ’³8ÔÕ÷H3{ƒïû®wª7ªøþßýîºë'ú`&áŒTCÚIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment83“§½Ø°IDATH‰íÔ½ ! `ŸRP2+dVJyݱAF¸Uî6ÉHiPbÙ!éßK•ŸJ>Ùù8YE¾®-0ݨ S£ª‰¶×>Ò˜^zã+Ô-¹ïPKv›ÞËѪ‰,i¦š*Òµk„z6™±öZ Pû]5܈Zð© œÂ[u®ðÜ®‘¨hÄÓ÷Bu›ÓS¶N¬dV˜vYTy) kkÅêê³yþÁ4tèÐÿ×Ç]ó/›ÓIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment84 Ã({äIDATH‰íÓ± Â0Ћ‚ä2(S%+1Á¬61¤´„ñq¦!üC 7O¶¿îÎÄÊZÓ”zPu£iÈ5íJMÕ´…˜‡JºUG†ù¨êºÐ” ÒPp$ð¶(™@Ô,3ÐGÑÜù9Y Þ8_c-ÜrEÍ‹Ú-T­¬vsÅP»ò‰6 «‘4Â:_ö(i¸×ho™ÏŠÚn(Dù¯? §ÉôTß«žŸêY¿d9´IEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment85zÄíÈIDATH‰íÔ1Â0 PW2æí5XPŽ–V\¬G17ˆÄ¤Pã²ÿ?€Íå)JâoYŒ¬Y¾­ªkf:3í´I!Z…½ªL5RMèä[„šÍ$ õBvªèÙ u–Lu¢šª$¨£ë„Tr¬1ÔPµ@-—›¢:oR[‰{ã…?ÚĆMP‚®Ò¡šŸ%ízbÚÑŰ®¶Ü±ª­Pk‰ok]a5š$U¨]&Å}åñ“¾²«‘¾z]Íf]¿˜¢‡úwú~þã ] ’ãIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment86ãÍIWÝIDATH‰íÔ1 `L:rn"wñFêäè•êä5ˆ^€Nb$E¨ŽüMŒIßÂðå½ÀãH$:1-ëƒæº/´g¦A1õšio©B,º§*™ŽíœÞHc>®Õgu¥Ò43«hÓjM:cm¦­gª¼-:ÖU;{Ĺ\•3ªŸUC+Õnm‰zÃMϤkÔ~WÕÇKÝ6É+“ãâFh £êƒõ—V&ö”µ^:¿!©¶¤rêT´ª3)ÉÒ°WÓoáƒ\ðí¼Ä¢‹ªÃvõgúØÐïª\±»IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment87”ÊyÁ¹IDATH‰íÔ¡ Ã0Ðz¯Qæ•:@¥¸¨°+¹Ê õ†‘¯)û¤QQŽ>pÿt§ƒ‰Š8X“T(mR×Ai•–IªSšý~M¡O˜Æ.…«³®ƒR dÌ\}ͼéÈ´áâ“ãzs‹qmZ§_4‰Ì]é¼mØtVJw´é«ú]j]¡ëdÕ1Åê„ÆNEé›kºú§PøG¦š´Þ“gZ0GP­è­SMܳ}ŸÃá¿îÔSOýŸ~FØì u8ØÜIEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment88udPòIDATH‰íÔQ àLxäÆ]Ä„‹ݲx¥í&xŒ6qRañÉð×èæ›„·/M¡¥T,¬¦š­ë‰cu€Úò(¨bÙ“Žšƒ…J–ƒƒšÈ—ÓfM·éËøÔëÀ܉ª±¦@ó­Ž+…õ+\g£“: Q¥ík¤šö:@5´³ I“n±ŽY©|ã¬ãÚ¬´±¡\é)VÔK‚®ß©p*Aã”w†Ju®Õä !嬰¿¬ƒëz‡´k ~ui÷X{ÅϾW 8M·aТ¬÷ºL¼ÈOø×…õú뼨­¨ƒ¨çOuõò3}-ñrZ\³ôëޢ]‰bIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment89srTÆÂIDATH‰íÔ=!` %Gà({4Øx16^o0ÆB ÙÝhå{…±XÚ/Àc`PŒ >®{¦uÇ´PªI3†i˜*Oµ½¨fZæÈW¦¢fÓŠšs#ÍD•%*ÊSÍÔŒ]Qf±ÕxZžÇsué\±Úä—Z¿¨ËM`µ$3ÑÜ5;¨.zÁÚçÊ@Õ3Mh;B-]P«˜šqý@éµ A‡ÚÔ^¨ˆµ-á•;lú;½|MßIµéë |—úaï)ZÙIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment90µÝ#ëIDATH‰íÔ1B! P~9Þo††ÁÑ+a<€WàoŽ$b$Ôšhòûµ]~~¢‰lðÒÐR@0ÖjšötéLu~#Ú:ªW¢u¤…hYHš ÕꇚìHÝP£)‰¡¤@t#jÀ"˜ÓFÕYÔ¤<£MiˆÊ1Z¦-¯~#èÊA‹ÝòªQ‹¤;IͱxV±ýé5¿¼i2§Ž×l’¨|š®¦gs~è¡Jªt+©]° S4T«%uØ&N÷EÒ¸„P§ Kd5wxŸ=§MKŠ#uñ©ís¹“ÿÉ¿~ºÙ÷½MÐù²ú]½˜Öëÿ¯&-«IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment91d²íµÎIDATH‰íÔ;à `£ Œô¾I¹V§¨#7¡7`d@¸Q¦$ªÿJ‰Ú)^?![~@b iòH#T PQÞÖ!­ia¤Ù#M'4B°²ˆÑÕH]5s¯ä y]9«zçôеw©:Uƒ‹MW±S³@ÇÕŒw:žP#¶CÚuÍèjÎyŸ_T¯¹×¹ÉH{7U]‰±¾Šª‰|Jªf ™Ôù’zSµšÍ ïoß"]Þ«[·äÆÊH3ÔÕýÐŽë @›þ3ÌQ,TFº)áÒK¡o›çéÜ0IEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment92ý»¼¿IDATH‰íÒ1Â0 PWÊÖ•‘ƒ€q²TbàXq‘J\ Ý2Tþ$°ö{ B©²<DZìŒèd‘ê É1Dе–JÍ4‰¨×‹V9Áº5´NGªñPGåÎYS\"hÏ#š„Š)´µtrUQmxeŸ‹ó»þUü#MSàŠ’Àt,ê \À°§z/çüÃYo0þú C½îøŽú¯h©6U-•&9`VO7¡gGµ^¹¶“fToH#×zŒª³tôè¸öO®)Ÿ”¾ÈVõˆš¤fˆ'®¾#ÄYû9“&)Xo#è§‘õ&ûœ–´Ft–¦`é·–ônj»B;S±ë®»þè°ÙÍå†S­Ð7ËÍùÆ béIEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment96úÖxËIDATH‰íÔ1‚@Ð!”+Ø[ÌÑv©,=‚W!±°ñ/°ÄfMÖbL’ß¾êÏL†D‰¥MôÕñP#±¼ †¤½¢¢¨/4u•¦-«j~iµ‘õj±Þ‰µÄuš$V¢ )ZÊ©¡C¹´¨G+Y(²“<"Ü+*fÔj§©ŠÖ"®•ª êÀHÇ ‘M¢®<ƒŠš%ןË!sÆ@_kè&jlh‘.ÔhY4V= Ô䣣mæ×ÑWM¾ Ôɺw: µK|ÆÊ™a­,s>Á:[%†šÄ<í}U™m铨±Üz¤7[«Â“'‹Ž^]m‹ŽHµ*|¯–¦•ËV-µ‚Ý®ëgA™É2áÞ¸—í¸7êäêÌž‚±ë®»þ¥ÊF}ü4Õ'úùªü:”|hOIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment99jie‡¶IDATH‰íÔ1!Ð1”{nâ Œ…×›à èÄ„0.ÛÿŸ¨‰6;ík&0ÿ‹‘IòcmâˆV9Ø“jQ¤eÕ°:“…èi?ôõ仞¡šoXo¶TÍHï#}ôPcŽèº¢í ­T Õ©Ó´j‚:O«[·fÚT˜±JìBT‡LŠlÇLÔ°&ª9Îa ¥:Üçڹ”ͩT3Ìï\J`3lJûêú‡&Üu×]ßÑHUöɰ£°ŠIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment100X¼J6ØIDATH‰íÔM ƒ0àHîš#ä"‚×rQj KV^#Òm³LipíÖ7B-”Òºý˜Ésò£XøœÚ«YÖ^Ò$«ØY®¥eSy#ª†zØWPÏ]@:U-ˆUT%¬~²`Neí³¥i7Õ¾¤“¨¬ÇÜÒú gõG¡6 ÉâZYÏc² §Š‚–ÿ4™ØáÌÉP×Â9SM Þ… 5Ô¸û%ÕÉ8Ixí<Ïù Øa-mñM™õºŽóÉA‹.Ê´}j——ßñNþõ›õ.êíC©~L¢Ööû[Z²½IEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment101/»z IDATH‰íÒ± ! @Q£+(Qí.›1 #¸¤@&—HQšøGJ¤« }þË„sȵjTemRæšGpµ*jOýUšû»6ͤ-C•J1ÝAjÅ›ošI{2¿9|Ñ諱n¤óÔá7‡‡fhý× =„´žûLZ@Ÿÿ›<íòšÿI-’¾Û—.]ºôB½Éûœ;7ÞIEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment102¶²+ÎIDATH‰íѱ Â0P‡)Á£˜Ž±.cq°‚3î°”(‡“ „„ÿ5¡ˆK?ùüõψrjó›E.Pc!ÞB F¸„êÂTfBÙÒ}ã©ÂZx²5!-Çöu¬«Ã*êHzêDÞ“¿´UÕ§9‹sÏ©Æj—6P¯ïèTHÇ*Úqt˜Ôj:8mrt7¨Á“ÿxQ¯*c-ƒ»›|èYIê|èÔÕÎh;2iG¨ J^Ôƒ’ùD/UΦëkÿ—©6Ýt}cž:⃒\IEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment103ÁµŒÐIDATH‰íÓA ÐOšÈN.Фiäh¥'ðHâÊkÔàJ„‘…qSÿ˜èΔÉK>3@VëòÚ¬õ¨êIUù¤7U£×VbÇ´¢«Ó¢j†ÑÔjš WÓŽæ:×ÞÑs‡¦W#ÙÓ¼®“DUöVZY‚“h©îšÒ¼¥UæÚµ>Ñ×ðsë1ÓҦÑø›–‰jð!{®cHšštàÚ›4Ò¼&ó©‹è2Ÿº¶€v0ÁUð©Ã iâÿÈ?o÷Nå,šÊ¦›núÿzWõú­>MQå!fIÈIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment104_ÑŽ/³IDATH‰íÓ1Â0 P£JÍØ•q&|-¶õbå&=BØ<˜˜²ó?H$¤z}²Ƕ‰"ŸªwPMcÆ: 1m –j“.ªs=. ú*bÚ5œû†Â~º%šÚªkòçÚtÑýà§„r›0 ®}b•u4ƒêz!j™iÍSµ>C-W:çRå+Zó™êèXóÉHw)ÈOÊNæ«ì ½Ðx¥wƒÄª«®ú÷Ú¨Þ~þª;GêlkªIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment105(Ö¾¹ÄIDATH‰íÓ1Â0 PG Óä Œl½ Gà‰ÄбWêQ1tµÄb¤¨¦Cùf@0ÕëSìØ–IHôwmMÝXʤë@QjO‘±¦Cc)vPIÂÿjV]ê™%œ—Z^š-mÞè3z‰yēܯŒ;âZ‡]„s®c–× YR'áurâGC‹×â–Ú*¾•oÔêèÈPiÃI…ž ¦›ÂͼßùR¸ÂÛwª¾Ðê^¨®ºêª«þ@¯ïHþ¿~K"ÙIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment106±ßïÚIDATH‰íÔK à!˜°œ#p¯Õ…±ôI¼ ހą,X´®äŸ&&Ý•ùx ÌU¡9ÚX/’f%iÒ’Fó¿+©%u}\túv¿z­«·„Ü”LÁZH šI­(1ÒDmV— ÔÀ¬Êe Ÿ8Œ(ª·‘òMÐbt²Ñ­NTß­Üæ2V5 s {A“¨‘}Æ1GNX¯j÷&ŸMmúºì;à,DëÏ Ò|^ë ;¨ìªPWžV“jN"Ò:ë½ïìƒRÿh‚¸ý/ºë®»¾ü÷è¢%ç˜IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment107ÆØß•AIDATH‰cø öÿ1A”ñ‹$B+‚²ÿðÊþaÀ«¯,ý}TOö²¹jTvTvTvTvTvT–Ú²€ãMà-»ýÐIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment109!`ò’%IDATH‰cø40ŒÊŽÊŽÊŽÊ!Ù߃ÒU£²£²£²´”iKQÁuÊÏIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment110A§{wãIDATH‰íÓK Â0àˆ‹.{!ÃE!Wñ.]Hñbõ$F¼À¸‹«´nÌü-– ‚³ 摈ˆ±T4êº[åP3V)‡«6‹Ê²jvhvô¼†¼VbUžkÕ¬’Ó¤õµœºZT>³S´æ•­°*¤ ^ëª:U¤Ô¥…² sÁï×K»iÔ¿kÈL)÷Ïã-¡SQÎ&\æ(æZLY5Kmø×­F?¥ŠÉv_šŽ>º…šl¶ÕÕ'GÑ*%GÑjz=Uª4R6þú{ªÇÒ0@ýu)A½@½B_Ó;¨'úúv>ÏnIEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1116 Ká®IDATH‰íÓ» 1 àœ(Rf„ŒâÑbÄŒÀ*F¬á\^a.¢ó_Üq :·Ÿ_…§Ôb5ri¡Ju¡Psqµ×§kt®1:P#¤Jw¨T°6ÊMPÒ¦«Õ–Þ°v¥Ê~Z\Ž¥H­°s‰´OÉ9Gê ª£ÎCÁ/øù“´F/POH_P{Fjéò¿±ö„ÔAu ó„ô?×Ôëݲա‡þ§¾.; )—°bIEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment112¯©[ÝIDATH‰íÓ» Â0àC)RÞ^É+ÑÒ `fq&Ál:KçEåÿ@‰h"NrõÉw>ûLQˆš~¬7Qk5Ä@ Õ²§ª)<P…Ûb-wØ@eëÔ4BõÜîçªãVcm;…uà]õ ïùƒª¤JÚë5ÒÔ‘òYœúuùÔ£Þ­¤–²…G5P=[]C l4Q4-}ɉ~&Ix£x·Uß(y“ùƒæH´!š‰Š&¬ÍõH«sMîœ1xo:‡åuªþ©Pmõ µÛæõNTº0mð¢U+̪Ù>åüÕ QW+ÖæjwMˆZ®UPGÎ2-L—Ua¯R–¹^ùéu|i];øŒ[§ÍÂc ëܦ5n×reš•i¢z£ê˜&¡¨F¦o¥[íºë®?èú¢ñ£C*IEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment114FÊ¿nðIDATH‰íÕ» Â0`#¤¤Ã#c¤óJ))"bÄ ¬âL‚7ÀåQÌá@—ÿ$eÜYŸÝÃ>›¬,oVë^Óq§iR¿µ¦Áiêû²y,+JkV²¨üt!‹J@Yô&ŰPïªf]£ã`Ñ`Ùà:ûš îQµgŠåÍd/\‡) lA“¼)2E¤B‰"amu±ušž°&—Öhó³RjpFºrQ‡µÃ*]èHëQg•þ†³õ‹XÎFè±æÊôŸÉpÌA¹û1'Ò4/‡üQ°^:¬Ðë ES£è„n~Q&MÑœõ=$âtÿñjlºé·ú#ÉéW1gäIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1151Íø­IDATH‰íÒ½ Â0à‹R¸ôxÌd8°’% :VÀlpt–ˆ|„ôïABBÊ×|ÅýŠ‘ä÷:x¨Õ™HDªÝ¬i‘F4Ë‘è¨{R·¯\w)'¦ÍÛ\ öøB/H§^©ž‰zƒ7Z4¬Ô¾ú©&2¯oF·Õœ2=Q͇ðÂZ$>±ªÄ‚¿}R¦¦‰«-iŠXó’‘ŽT;ª=Óæ˜Þüz½íjÓM7ý{}ÝÿJ þˆáIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment116¨ÄÞBÔIDATH‰íÓ1 `šŒïF.bÊͤN=†WÁ8x ¼cB­…‘ÿ‰‹1}aûü/ÔBjTßjì™zpBÑQ9¤É,‡:KÖÞ" :ëÕwL§'S‰Y˜ž% ÌyÓ&µú†4™h§;S/LAäUgÍ£U¯±½¹èº°‰J„éIb»¥MD Û›6E÷&aºŽ~Íl.½ðôßOÏw Ê)ò¢ókp rÕ¶UEøzªª Ù¢4[4QÁG¨ji*\»îÚ¨ì~1Õ¿ê Æñ¹_BIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment117ßÃîÔIDATH‰ÅÕ=nÛ0` ´eN^£CQ^¥Gè‚P…:‚Žb )ÐÑG0 C"CX˜åë#)ù'& mÑ7ˆ>þ<ñYt™¨‹ªô/éó•nâúËêé8’Et»ÜÜЌڻ˜6‹~öj¨à->NtøTÍjœÞST¶àÃ70ìQ—†e¼.ˆ¡’5À©(¨¦¼/ 4Ã7â­¥šï tbT†@lQSè™\Ôp0Ð ¥,› …R0(ˆðÚXjhT˜f¶–˜iÆnÁ+'#Hº¨ÆÂÌX òK¥@–^v.ôë…J>ž´Å%÷³¶0=Ÿô‡S®a?bù:§ã v N¿ŸënÜ_jº•tj{œkB ÃÛTPINë®­SËé€›Û @6gúPbÍÖ„ö€Û3@³Ñô¸7NGW²T—5÷ºÖsV‡¹â;øår``>T¸­Ñ/ÕÕˆ$”ã2LTQµŸ¸kD|fóq¹‹Ž½Í)°¬ÂÿÖâýj³jþ@õ›êjù¦ê¤Öqå¡)òŠû¬ù”Ъ‚+Ýø«uú‚z1ùaÑÊWp²¯–j‚âx•†&9•YóÙnc‚5Ù,Ñuç·`Öù¥>ÿMžÖV¡)Ï•½R»Šý鯦Šk“8BèÄ©ŸüI²_Y•R÷Jxz&T†¤ª]–RW•žç²rPÿÚP#¾Ó'IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment118O|óEIDATH‰íÓ;NA `G+±eZ ¤Í1R †›Ž€hP­÷&\„"Q#0¹ÁÐMañjÅÆ6EŠÛoÇšõïvªƒShœzÚÕ¼5´C†º@£+„rS7´@ °%¨mÝd¨,͸Ïs]I´}LoC1­‰_4Ü yÖësÑ•1¾Êño}mõ[ýœý0tÝë’ôi Úf=…A17ŽrBWÙÓÈÁÐ"¯©QµÝ3ŒëWsØK%ý~¯t•]¥»JT½ÁTR •e¦[#}¿|podÔÿr(FFR™ë4¯ûúîêçý³¾>­óÎU¾êUÿâªuþ·ªÜîWbIEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1198{ÃÓZIDATH‰cø40P(Û€_¶¯¬=²òäËÀ/‹×Þxe?Ôã“Å †»ì¿z¬²ß!¼?öød?à•E,T{ш*ËŒW¶¯,:•••••¥¡,9ÈAê6þ(×IEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment120jŠ(´\IDATH‰cø40P.ûd½ìødÿ1Ô“-û‡Áì¼²øõþ# ‹ÏUÿð†~½ðêý@••pÙ߃ÒUCKvæ tÕ¨ì¨ì@ÉÚ“«÷;²]E®,ÊA<܈3ûIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment121"ÍIDATH‰íÓ» ! P# —7s¤b•LPš¬ÅéŠk"Ý Œ@I$‚iÒ`"”O…hž,°Á@°ðeÍŠnŒFM ÉC[R¬:¤È‹¶Z¤K0^vÛ ’0šE÷te*™1émæw¹ “Ú˜Š«^ÙNVuGÓÑ9èŽ.A±ÕÊj,Jaj«L»ÕË$«¶ÏuUµbÔv Ëh&ÏéIƒ¬jSv^‹´_¡$Z^ϲâ)Ì”9Q§å«s³ðŠ¡C?ª©«÷ÝjèÿêƒèÏß 4îIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment122„„I˜ñIDATH‰íÓÍ Â0 àŒ =Æ£·½†e/&®¾Y¥ñ²CiLa°&ÊŠ`Øað±5Ͱ>¡4šÁÒdê8Oa¢±1µ·4ÌpªS[]Sg)9Kc›5ûFÕ€EA©†Gnc¥’3í« ¢tjäøº&Q±¦Y´£ƒ#KQ*R×ñ•î5ÝZÊTt·TÉüórEµûŠÕxälë ë=•.œ7Jƒô7žªšÁ% ¬LŽLcF¯+È#¯ƒª U¹¨6íGö-Ó|Už[\YRMi–ïTëñ¶Ž¦Ò—ôºBo+¾µ³ŠÃòs+ñ×Ð;þ ±™›j³IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment123óƒyåIDATH‰íÓ;Â0 `GÊØ#ôl½-b`äJF\$kÆJT1NÛáßC½DÊ—Äy8$NŒ´ë®»þ“¾<-„õ!3 ‰:SK‰úD©3I¦ŽNU[¦`j&I§­œT‹§,QØV&¹«NÑUû¼‹6Žž«ö輎Ϋf aÑ4` ¶.yUÅÓÑÑi^õìj°5UB¶2 ªÌeê«F[GêFÕT.my«[-x”W?Vý&=ÒõB†T–p´h-ƒ=oqµõæêõcPpÏ—µoôغl}®M¶õ;~¨oô‰Ò‚†ÄÕIEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment124mçì­ IDATH‰íÔÁnà PW™”K'zÜ_ØøÇª‚Ôëþ¡Ÿ2öû…ô²›¥YЀš4v›*íŽ<6Æ@º3<£ÞW³HíËÖ5Œ~O¥{ÊúýJ›>¡‡(ÁÓhÌþAwãôÁMÿ•~¸úîê‹«¯P¿*-nz5ýX@Ç@¿%ìÞIEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment126ƒé×IDATH‰íÓË Ã PG9øH7È(-H #t6èaƒrÌáb’¨JdœC/=àâÉØü€”°@oU_ªÎëè!ë Êú,ƒšz˜D½ 9Eµ†‚!{ÓðMÍGEò¬FÌÖ„KEsK¬Â†-$Uã¥æº¦¾ò’s£¨T4bìE |’u5¬•º¬yedõ¥+UõÜ_4וïèB±¨DuH¡Ohe…ž|G ¿É¹îû)Du»Ž'íYývEé¨ü&s쇑N]­ÿ7Nb]a²iÓ¦MÿQ?Î@Ò÷ÀÇ•oIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment127ôî½–IDATH‰íÒ±à På<€Gð( Fc”x—X²àH§/çœt†£â!ÐI"qV¤?ë$²A-z¦;Úº“p½L}S /ºb kÆšºÚÿ6•{º)E¨­Jr íe´•ÐòM,Èê£v/ôÕè–îîËI³Å±Iûî阤:r…f0WU3P©¥ö”Wq´¯¡C‡}„žOóïÅ:SIEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment128dQ †ÈIDATH‰íÓ1 Ã0 @… õ„<%O‹!ù@ã­Ÿ(ÔOt ÔD•S0JÚnµ'ãCF’e cyø&§èL )´ÇãGÑÕÑ‚»8ЬR¬1ë0| ÁQÀ„ÐÚA'ªßµ÷ªž EšXƒ¬ÒU×3r'·AÑ”•w_èøŽme]_ª¼þK7´4uK!­’Õ BZ%vÑÔí3iª¡¤<“-_K#%åÉi(ÍJŸùÜoD¡5J]*j¬ªU«Vý }Zç8Œ¡É#IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment129V¸IDATH‰íÓ!!ÐÙT`šì¸Bm²Ç×k‘TTöåHa:ìZþ4©Øc^ dæ±r©ÕoÕ5Û^ik´œ]#‚šDÁÝ`9Šž W‘R×v5PÉ5ÿj½8.OMó v#‹‚_íštÝØõ¡ê=hú~¨iSþIãw­^Ó U4[ d6¥¡ö̤ULpá`Ê+™2Ù_&SÇFbÙhÕ¶,òÑû;uêÔ©Òl欅ùxŒIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment130s‘õÁIDATH‰íÓÁ Â0 àÈzúB_Dè‹ Ú›å¥0ñRXilÐÛòwâ<,”Rú‘JüŠ;Ï#rù].-»–XcÕN×[Ý= ™°RK q©zÐ5“=ê=W­‹OPknÁÊ—3R^ÖL2ˆæÍʯSßÖ”?VN ½HrÇDipcDêD‰¬ªd Y¤YÔ`5K +'2Òvê® W`VùY17šó;Zö-UãOtZ¡¿ëjÓM7ÕõE;àÍyA IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment131–)cÁIDATH‰íÓ;Â0 PKÊÖ#ä(>F„k°‘£Tb`,"‡Âf{RU/žòñ' Aü^ÏŽV‘‚B­#ʘÍ¡JVíMeÐKUGÓCÑÔ:k²3z*ÞEÙ„zTµOndœœjl¥$î÷®^Uw¡æH‡P“.®J¬­‘ïê!RFG©MNõT;Ø”„zOYºš R»:6Ô1@ðØ›ö9²=í¯Í§ÿüýUW]¬^>Ðék¯ZŽÞ³PãÕ‹âFiIEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment132ŸxÙÕIDATH‰íÓA Â0Д,²Ìz”^LšáQ\¸ôV¼@èÆ !cšJ;3 º’†¬òø“aH0ËŠ¨«8µ¬ Ãh(¹{=VxT‡~*†£ž¿Ð «{J KZ½†æˆkÈY»ÂÕç¬m £ :h+œ‚›Ik׫FµËªhZ¯¬¦i¤ýN§×ø‰•y N’Ó ¯ ÖŽÔJ&ŧá³&MÖ"Ö¦9ëD\hwÕkÙí uà¦ÿ÷¡Æ³Ú?Úi¹ïj•¸b§³Î:ëßëÃ2çþ‰)ÄðIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment133ê˜HOÑIDATH‰íÑ1 Â0à”€s„¥Gk'=’ÇÁˆƒ£úèobqËŸEtfIàË{äýQ(¬N}E¢¡jlU“Uo!Š©A0TI˜ö&5ïTKÕ@¸Ææ³ÊO´ÔÂå5F½4½æU¢ZàX¬=u—W¯Ss¦NA4`ȼ›¨Xš†èq.kM³Š* sÔ–Ì[% D}… '¦}«ŽåSàùjdê×ך¤¤`Iž—í×ýûðcŠŠ¢Þ‹zû óª«®úúálü*1+KIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment134tüÝìÛIDATH‰íÓ;Â0 `—Ùð|Ô-fâZ•z®Ð‘ldˆj\©bil–Žõ’áË;@œb8BK4uÉÁTFû¶êœº¶Î(Ð 4ö·ê¨Ú-ÈÉÐE•æ¶2V€Jy¤M¯ž‚b)`‰Pb&kläB³¥5r&clÆš<ÕÖÕ»*šÚ{º„ŒÔ\·¢·«JÅÑ’Ì{VÍ®Žp£œšª¹bÐÈÆš:¼Ã_ê Y‰ƒ\@ØR’g·öi¯«í}ûGŸ®5éUÛúÒGlϼÕÃÕ·«:õÔSO=X¿è×P½@IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment135ûíz IDATH‰íÒ» ! `# JFÈ(Œ]Ö"J‘2+0%Âgt‘Òà?Ò)%.ýɉA$ú·6‡´~­=p¦³|¡Í‹Æj×ZdU-–_Pß)M sªÚ©`+.ªö©q\Òñ[i†úÐUòO¨w¨^Õnçh Ý m¤¿¤åJh¡[§µ¶Æµ:é¬êüÁ†¢ä>¤…¢ßغuëÖ­éÍ£þxF¹6†IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment136šò¼ÀÛIDATH‰íÔ1Â0 PG {„r“­A ƒ«1p #Ö"–J@?IAbÀ¿,í€T+Êòâ$’"ÈtÚ]ЕTï‚Æ¡)lmÑAÍ^*I=Ó udê²¢ê° ¾Ó2ú2rU_*ÕJ}Eôä°åЬuJ¦â­CIÓðl笑ëŽj÷S×ÀÊÀ\ý—’ê'Mé×¼ 83m÷å‚i#¾[[ñ*•Õ^£X×ú¨Õñ}Ožb½'}•gÅU!Å 88éûuÖYGÓë ¿î¯}´[ý“>)Îé“+9÷ÅIEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment137íõŒVÏIDATH‰íÓA à Ð Y¸)õ¡Þ¤^¬T{³Å#¸ÌÂ:…BþR’¥Íwf$V¾H{ké4ÔÕr´L’Áj*ÍP£è$:þo´¥é4V²e!^f¨âj¡zYÇd¯ƒ©Âƒ‹kêºTÉ2‹‚å®YÑY ŠÕˆŽëÜÔj*—åä‘U7ÏAÓê€J5²«n…šèæ@æØªtuq¬2QÔô·éýŒæjâ“ $èàÚ»Álláo÷÷{è?h ªúT=YOuè¡ßéóS_jjÜ8[TNoIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment138}J‘ÇËIDATH‰íÒA Â0ÐÝr¡×p!ä*ÁéÒcõ&¦xŠ›ˆÃŒ)Ýæb»ú·Ÿ„OH´´„ƪ¬]rÚ¥À¦¦¬mY…Â`ëÉéjÏNë²ò¨•î Þ°¦¬‚»ÇQ¨Dÿ'´¤×¬g¬Üðïê™¶^“OHs7…§¡ƒÞóÔHûJ¡¨Ñk× 5yÔ¥M¤²æÉ–VÉÖý6Ò¶øæñä³{¡5®ªÒ¨‚º_)XrJ¾ÚÐR–U6UfèœW­ºêª£oÝ6ÞŽ9ôðIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment139 M¡QÝIDATH‰íÓ=j1à·¸Ø& #è >@@¹™Ö'³;_c—\@]¦4™]b7ÖSc‚]ìBð!˜?Á:1áš®UÚz2\ǦV8å»þ<¨ bó­ÂÊWT$ª%øÙT-êÈ4»®7¦„ë·Ž’Ûª›’•M®¡z]mÕv'oJ¦€l ®I>¸–¤Ÿ :çµÝL/Û ™žº:ØRÛYUäŠ8+Óä 9“zQ0̤Woc_l «}¾ü”³H`û¼eF÷ù/ØæÜc×÷ÕsWÓúLV»îú¯ú `¼Ûˆ*¯È~IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment140<Ð2IDATH‰íÓ1NÄ0Љ\¤LKç£øh1iKZ $®â(Lj% $mA +ŸÝ‚ÝxF‚†fG² ?%¶þØ`¥"ÉôfªZ¿Ðâ-åÎÒd*YºnNøSËù§'ºxKÙÖ`iîM=ÇMÒÒ¢4ˆŠ.L•nVØ!i¨jvc¯ê]Ý¥7A49Üe­k—ý G×”E]Uo¾Õ)z{Ô¦ª¯¦Ê/=C¹ot3 …®,1ŒÐöÍ¢E“è-«(Úͪ:¬í<,u}p(ô4q½G÷ µ£ò~eÎÔ&åý!Q›-í2ySC]LɳrÛ%—6AõY÷ø¨«V½¨©{SßM]L-½¥«©jý›~þøË_xðUIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment141K׿¤ÉIDATH‰íÒ± ! P# J2@$ÖHÇbÑÙŒlr#ŽHÇܵ|W)Rœ$ž ›X‰D¿Ônö…ÌT›ì¤Øˆ€®B%Zç*‰iê P¦X/¶€{¥¤zSõnJž¿H´,æÕ±vQ;×<ôtäZnh¨ª~†ú¹R‰iZªj$**T"PÏ[ämêve¨9ðk²üÀ*ÍÅÚEªÙqMAUð“Ékšeb è ŒôÕ*Ê‹g'±©Ú‚¦Gù§žzê©ÿ£_*›ÖM*ENŽIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment142ÒÞîüIDATH‰íÓ1nÃ0 P<ª(à+ät„^!7‘…"È1|”*' ƒ ]5ª°êªEQÔ Õ!ÍÁË3Eš¦ 1˜ûuî[ZŒ×´tªÎyƒü =NdMÙjŠR4oÂ¥ÈJU½–û‡rÝäbâžÏªîd;œ³#ã€WQÇäRÕ§ÎKEò¹NTÎåž5­³"ä½WõdîjÔôZ')h­{D¨*/lKy©†ÇnI_u·à·TŽUW]uÕÿÑ…N¿ô½™ûýîpå`ïÝ0DéIEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment143¥ÙÞˆóIDATH‰íÔAJ1 à”,ºœ#ÌE„^LlÄ«D<È+zº²‹áÅ<|îæÿyˆ‚‚Yö›¶!“TœD“ïÖ…éÌ>²ûq_»º%ßj¬Ï´¯–]¤vajR‘j«+H«©C]­êÀÚït¬D3О½ô[¤ç2ö-Ïíu£ú5²òÕ{ªÊô”™n¡ê$ª>Ò¦@[ò.›öýJÆ¢ÉÒh›B5š žüdq5è ¿àè9^â#¬ '?u¿Û¯R£ÚØËp3øh~/IÙ¿$•™¶…î-L_â%ü×/êÓ·•é3ÕNuª•éDø›ëü×ôÕLÌä ˆ*õIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment144;½K+»IDATH‰íÓ± ! P# J²Ga4ˆ²©²#î îZÛE”&.y ù6ªÀ¯õÍ”eçb²–Äà¸xYáRgi¼‹:–zÆjè0ô¶,)MM‘,Å#µ¤)%K;vEW¯z˜Š¢ÖÄÍ[ZªóÂÇÓ:ûj•WMe[ë÷š–fE EK §²¤H±t%KÁÊ©›:¦‚œç±ÔEyŽeRøü¦‚ª® ÙÒ«¶nݺõoôe®Ö›s®IEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment145Lº{½©IDATH‰íÓ1 !ÐßÙ¼ÁzTñbr1s“Í ¶´™“6ª ¤ÐFðùuêŒgëC5q…6D¦òÑ'ÕÝßµ£˜ Ñ64¹š;Ñ}Ü[UË*Óít²ººÊ³24[œõY<½DO—àéÍSGËÔºñ2åï[ïTíéë5Ø T:2ÑX;Ó ±mCËÚº•ͪR± c>ÿÿN:uêê% àD®úV6IEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment146Õ³*óIDATH‰íÒ1j1Ð1[¨t›NWð 2¹JnáÊÒ’b¾†Àˆ‚›/ó3N &k*ƒ!ñ4*Òh˜OhT¤+k!–PWaqéê::$â¼hhHÔPô1TU;æg s=~Yÿ³Çø·κ…›+Îú—ëšÐcÙP‚7´8KÅ¡¬¹>ïIת0uôH†êD“ס~ôýR·Í»CS]]§»É‹‘ Õ—É#ºß~ô™¼¥qÍ™–UÕ Æ‡Ç'C5T‘6d¼¬Œ$ #§¸vâŒ-|hh!a_ׯFCÑVÜõëëŸSܨ/ߨ/îz©ŸÁùê0þwÞIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment147¢´‘ÜIDATH‰íÔ1 Ã0 P… ^ >Bz„ à‹;½Y¡C¯á#²¸`ü+·«älb ^~daÂ`­ôW} õ¾§ìFJ®?T]QÉ5št¥$Zm-¶¶®¾Ð=Œ^a•À'C¥3šyFÀdi£°£ÍTP(m~ÛÊqæd¦â財ÒÉ}ŽúÿV ùæsÓ'GƆo G½ÏR[xá«qFòB–±Ô窯 Õÿýf8ôÐCélÜ=g~2IEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1482  IDATH‰åÔÁJÄ0à sÌ#Ä·ØË¾V‹ xõ6°>‚Àˆ‡6dœnE„æqœC/“v2?%V*Ð%4hZiP´¨šUMN{oòšÆÕÁ_u=Ї¾1ܸ—EGæ#V©[¦g¨ÅTz‚JTéµ­ÙW¢‚zÓ¢¦­QÔLP]¥n¢õHg ¢VtÊä&wŠºÐVš5;Ð+mvjÒÕ@•¯ŠÔ»ì›*y‹±wë`-[p|Œ½ÇzŸz¡rêÐ9çinò¬[›¯¨-&l¯®‘Êr÷D°—èm?veN,ʆ‘@V˜«Y剔©“ó¡ËiÓÖdùn5ͧJ=´ðBÑ¿¡Ãt÷kÊHË?Sþ¶žTU}QõQÕƒªJ…wmѵx£|´ëIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment149E 7–ÏIDATH‰íÓ» ! ` ÊáFa•LNº"eVbƒ¬À)ÒPXvŒ”’Ÿ*Q(ý #üp:9‡ûºf—¶`átø±Vêê\jùèŽU‘f2’™zAïšÞNž¨ÞsB*cëÓ+“$ ìµYdÒjác\I&-Ö…‰^’žXKT‚ú2 PµDÁz7Ý n%ò5”Ø"˜+’® Ì•šø›"½Zë+¸[º¦ þ[û@¦ *©wµE¨`zò`ÿší OU?Ùî¥K—.ý‡¾"Üá, ÈŒIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment150%˾sëIDATH‰íÒ1Ž1 Ð?Ú:·t³ÇØ.WáTËm¸IFSÐQ`Do²Xmâ !¦›HVŠ'Ù–ü!•×ajuÛšö¤ê’FQ$ 0E ±@Œ¶¨>Ö’Üg>ú¡Ö麢EeHXÑȪ~ÕÔohô¯¨tI÷þßV§»ò†„IU~ªmy.äÕ)ÚÉ!©)kó«v«uNÚgxÓÁ-d§kü;e.Äy°ê‘GûzÓ¬¨CkŸhÃÊܘU^Ûr®¾Ó”LÊQ¤r#‘ì¸ÕWUŒ7UÞ¬³Îú6=Uõ8áVa²Î—ªŽEýx0ãFìtØDIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment151RÌŽåìIDATH‰íÒÁmA PG8n n¶•”cn€ÒˆRB@[^qÀ£5ždþF|ôÓhfìO–Ô‚ü¤úê>Ñ¡…ºö6ÃWy‹X‰Cª6B VÞÒ4Ô2j|Öu˜¹Æ÷ê¨s¤eƇmü#YZù`ëcíÿuëÉUÙ¾bµ…©dú+\gæÜ jÑ$/ë'ØÂ›uþ*ÕFwô§M¢;™&ºòÕK¢“)U] ÊÆÜuT©­úž*HëF”:ë<=, uv¬ªh¿VÕ&©VMu¬«>IË ë¥wÔÃÃôtƒ&õÒ+ô ¥áû*|4IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment152ËÅß_êIDATH‰íÒ1n1Ð!Slm ¤å”©2Wâ³ÒJPr„\„‚(%WQÐn™Âx/ Rü]@’jG¶léé[cËd…jèWTóúyÛJ^·f§‘ÕFF(‰Ù¾ÀÉ®'¨Ñõ̶:ëu™×àY®ªíÙÖ@çjëêBíê¥ëuîÛ‰Õl5x«CÒXP)it}/+èÊU9Vkƒ²®/ 4ÈhCTgu+hŠ´‘o¢W¤Tßt’×Êõ f«xä0F¿ÝWîGNSµEe‹O¨UX÷?éNó5è© ij)[Ö§ºtÐÿÐ+TÏæúIEND®B`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment153¼ÂïÉÉIDATH‰íÒ=à `£ Œ£p4@9@z$¶\ƒª`k×ôgã¥R¤ª X>ÉÀ³‰*Ðô¾÷µ˜v&ò]Íšk„š4íw~«êkМE'¬ªuè*½Ô5|UA¢·ù‹ ÃëÌä`’kd?]DAVíç,j#«ätÊHwÑ¥X¤N²8¥Ùìþ¼V')ƒ7S% T‹Z—ûY‘ÞˆŒ=T“ÐÖ5 `FÌ›&‡ö™¹zÅL¿•z^tþ™òСC‡žÒ¦mÝ ôŠi¯IEND®B`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment154"¦zjåIDATH‰íÓ± 1 à7t³pob­=]}œ8Ýè+| äbZ“ ‚pÃuýùI Æ ð=·4õªÎÅNÕ „RÖ›+:¢5ZJ@»èDÅozêÈ´5É,]FV93TÝGU§@SüÄ·j“<>U™d®Š ÷M†ö¨¦ziTåidY£¡ƒ®\kÃl9Üo ªfC[«ô­º1ÙÉ™û¹¨ò¿Ø±ZíX‡^ÙØª^<·ªœÊk·À{Eèµ++Kþ>Èjª Vt.DKm);©Úx«®ºê‚Ô-&ÕD¶ÕàòÎ[IEND®B`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment155U¡JüÑIDATH‰íÓ; Ã0 `™ s÷&¾Jo’” ½T‡” {…^ÀÐEƒ‰êxö¯@‡Ò!Fàᓌü"5Æ@?TéÊô¬ktª7Uu¥(T•iS!oh¤®®NÖ©( ÖSàÔ"•s¸›z1”¡æÓˆPqÊ›6UMN—iG¬¯MÒkîêñµ’^±FòW£ íš©¥¾£\Käf¨!ë(Uwdj¢~ FÁ»*«÷{ê¡Æ] –æ@*9A­¿¿˜:›:šÚZºz³¶7U=ôÐ×Ã&ÐÕ»óÐÐIEND®B`‚ pix[153]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment156̨FÙIDATH‰íÓ1Ã0P¬ ŒÁWèØ-Wê˜!R8š’#Têâ™buèn—v2Ê”',~@Åðc}è™C夅Fj«çªx˜–üÒÃWRX`u•Q„ØÚ°%­¹¸Ú 7ìê\é¼çÓU麘bØ›"UÈvÙP9W€[¬2R’…/ÁÌÖÛp öš¯#-•ƒ·` ¦uå¬Ä;úûµØ×؃l|ÒÅT‚ÔIï 3i'Ë Ï@v¸EÚ×bÿjqVÔUŽøš}µªÎDojêÔ©SÿªOq%¯F‰õ¬IEND®B`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment157»¯+оIDATH‰íÒ± ! P# Ê!k¤c•Œ @Êb—IÂ.]D8@š|_—(”<>¤ÆÊôe­IT>Ç'еPš«xݱòPZ\×úî½6™ªHsS•šFS“²¡¬Ù)zÉ®”æ®'¨ÁÒýP/ÒÒú^¡rлXz;T”¾× ªS/A(ÍoDÕsÓˆ”°¶-¢ <§0Tý\Û—£Þt®<ÒGú.7”7K?\ºôµþHí©–}íÂÏê!z¾IEND®B`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment158+6A÷IDATH‰íÓAN!Ðêt"Ëö\Á¥+¹ØDúf3f.çb¼@í,“–oõ˜:-ÅBWMXñ ø 4ÚHUßPÁ°•…²ò²âc_tÈ=2 x)z*ês‡‰¼Ö\W~_¤úV¡XÍ<͘B]I{L´8X,*éh}°¢OÉÐâqdg){<Ëo”U)¶æ’·¤:œ¤ž9«Þ8°­nNVUÝ÷±s_Õ-½Ý´Æ«BõÐÔÑ\ùM•îë:âuÖ[k®êD?þÅåå¤]/† …´slªOÔR½#¾3Uû'×õ,BzKÑiE0µÚ6ÝtÓMÿU¿HFÙN²Ú™lIEND®B`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment159\×ÍIDATH‰íÔ;Â0 PW•ÈFŽÐ+025Wbd"eâZ­¸ˆ ˜-CdãF; ,€šõIqü på °è¢‹þ™R¨i^½ªÔp†.S5Ã{E[=n*Ê©hTE#óEÏ÷¥×ªNº–¸ûh)Ïñ¨¿jVIGÏHמŒjímôJ–›{Ç©5õÐr65“hc)¦7C âÚÉÔ z6Þ,CUÕ€ÙMÙšº€[Ùu¤GÞšºgèÒbkË Øzd>}ÝÏðËúcÃæ G¢hIEND®B`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment160æí°IDATH‰íÔAjÄ0 P/ºô|îr³I WJèvÎ08Ì\º¨¡"¿šibiUè&^VÄ—Á8ý‘rkij,í,ɪÌAïêÅÐwä']ì-M¶ê•K³ãA©¶¸({S²¨òÝrW »i®êä¾mkU/÷XUy˜ºaô¦ô—m[‹zL@­ëtFÜuô·ÞDܬ¨G¢VÓ»6šBz¦hésô†–xÖ”0qÐt&¼qè5u2‰Ð±®òVQéêÆaäz΋Îu•ʯ%Œ—ú|e!Ç’¢™š!ǤmŽ(Ŭ«Ì¨(;ɧV¶õ?ƒlû.ÈUw9ýÒê9ôÐCÿY¿àÖë±\%ÑIEND®B`‚ pix[158]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment161yáÝ&ÂIDATH‰íÒ1Â0 PW2æH=J8 A*œ‘#@ÕÕˆ FùuY‰=10äYže9– FôkM!ZJªf':0y]q3´ UMì-}B´¯*;Ìòn-EŠuíð6•_¢CýG¢¤*VíÁºnªîFUÙÒ¹LªBôlêÅP¯êQ6âqUõ. E “h¬k¦aÊ¡(*ç:¦ÞPÞÅâ´ÎQî¹tÊTk •¶†®‹2Tr2M›~2ÿåTM›~éèM[áU£ÇIEND®B`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment162à茜ÞIDATH‰íÓ± à P" JÀ(ŒfG.\f%[.\f¤ Ê+P~'J îì*R #䂇ÅñulŒÎüX3'U£A2­¬¾h4AÔìO•F‹)5¢&V‡^ÑÈÚèÊX’ÏåY¯í©¾QÑ®ÁšÚJï_µ®÷e½q5®Y5˜"¢Õ•ZD×0çºæ·ÎÙ/ä5]²HN’´£Ž„²v•¶Õá’‚¦ÉÂU:Ǧ`·´Õz#––ãäª|ùžµ·€ÒÏâs{-&_6hа&¦©2=ôÐCÿHŸø÷êÚò? ÕIEND®B`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment163—ï¼ ôIDATH‰íÔÁB!à߼ûld+¶‚–ì ±•wØ:ô•@²L‘çêù³ñ¢'áÂG€ 3@ID\y×QLªùïIEND®B`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment166ç…H…ýIDATH‰íÔAjÄ0 P™,¼Ì êCô>Z ³è1z…Yôî ²«¡ÆªÒ˜.¾ÔaÚE)H<$ÛÑ'$ÎUè§úêj¸]Gô´Í®fO·ÅÓjàIÙ­-®з¯Úá)Ôg)Y*œF¡¥aÔ]u‹{û[©/Ï”¡Ö(aäĦN»&¬“jr4އÄhŠ…ø¤ë¹¶âÎ}’§1[:vRñ‰Tz3À‹®†Nªó7zðTŸÖºGUøO]GêF6´çÚR£G¬AVΡ…5¤‘Ë•P(u ».lÔªj9£sähäJO¤C”º@=¿¼ü…¿Ù]¯×‘þâ®îúoõ–9߯uסÇIEND®B`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment167‚xäIDATH‰íÒ1Ž! P# 7‘¸ÁÎMÂÅ¢ 7[r“É \ áõN”Žï&RÒŒEÅ`c“:Qè³J«£ã ÕüFV®6WÅÕ»«7¬#éíWå”§ÚX ëFËT%j ZnQ‰ VÓËZiþne¥žëÞˆ©†±TšWTyÄ‘ìþ©–§²s–ÐöTpsça.ÁUóKçõöý]‘ìèC'g•µCÖmsµþÆžÐYûÿÐ# 6 RÛ)ô7Gϱ"µ¡ºš:²a^ LõÎVja­/ ƒ½.¤[öô•ÿ¡‡úUý&aÊÏ®káQIEND®B`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment168=e‚úIDATH‰íÔ1n1ЉVhKÁ9}"ù*œ„õÞŠP J®`‰‚Öˆf‘Ì:cUæ¶ÙTüÊÒ³5ÉcÊJ<Í«QÕ^ÕVÓdTµªº²¼:í¬®µÝ­¦éfUCÎ#É:6•zö”X©«ú§'Ö¼ûti%ëÀº¶)@õkSU¨Y³¹cís‹4]Üöå,ÒËS­¨¹hµÔmN³éYÕCpH÷¹=DMH‰ÕãêhöQÕªa´žváê@.’CÊÄk¢ÎÇ/¹®á§ÎÓâdåüð´X¨ðr&iz}¨ZWÌT•þÊ©:Ìv«·¾õ•í¿Ô=#ý^ŠÞ8”‚ ¦IEND®B`‚ pix[166]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment169w:UÚIDATH‰íÒ=!`å£à‘¼Áb¶°ôJ˜Ø{¼vdŸ … o M´YÚŸ™Ç(+¨Ÿë]Ô éª$­ZÒb$ÍVÒä$^THzþBÀ­Ž5;,­l5ÖÖN‹*”AÔ\5¢k˜Vµë{˜ê<·¸†ª¦Õ!ý¶³¦ú+W˵vu²F+*I㥒dyêf¦SuÇäŇ ÛÕIš¹OÕâØ•¼ÛufÚff)ðiœFh#·‡‹D-’Æ)™ôHíròG½0ö¿¯•ÉL¾ ØtÓMÿ«LÌæøV ñ²IEND®B`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment170ýÜñ IDATH‰íÒÑm! PGTº¿²@%6 %#ts“•LFà“(jˆÒžíVU¥JUüN¼ó †~‹KßD€íÞojušæåçš–ÞE ¶W@IÁ÷¢(öLoðÚh‰bnÝQ©!ØI5; “µ±çM 8”ûðT?Ôœ¤ÜüàêòÊjL` 8YMîšnš…~ér’Y5]ޏ†§F“ ¼0‘:^[Âä‡"§=Nõš>û¨èAÍU4ëŠñEÒ0ró*ÌdðC÷ü9“,{abƒ+n­OFÒjÖÊÌÆÛu&+NÏsrì °½\µ‘Ïÿ×õ‘xfp(Òê>6NŸT‰»þ­^Ó†SÕ]¿¥ï5{ºs'¸IEND®B`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment171`úìgÖIDATH‰íÔ± à г((Œ"y¥l€­ •l¥Èti))—ÃIÉ?EŠÜ™öÁðÄʘh šf¯iTuR•Ô¾+Z­ªNÓ¢jö{iòœhìëÓÀ‘LWK£€47õ‘¬­ÝšZM/¦’Eºiê4]T•ÇÓÓ*Ê3Rþ*¸ÉYT*‡?$8mº¨ºýT~•ªÕð(q,†ïª:¤!eþ¯•Æ|µH ù|rTÎäe‚$¥)A•Ö•ú)”sÛ6Ò6Övj¨¯–Å>ÿ䡇ú»¾‘BßåƒêùÂIEND®B`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment172ùó½ÝÙIDATH‰íÒ1Â0 PW:ö\£¹#W¢Ç U/­Ú|’JDm/,H4“¥'G–ý Æëè[]ÖÚ+:¬59U'$:ÈÚ#R3S+k‡@uÔ”ØmDMÄšxª ,ë\~n*Qcу¡c2¶NÉyl.òTèºtynUó&ùjh€®\”uÌ^[Ǭò6ÊT7C¹hÒÔáoë,_W‡VÕ˜“\!åÔ…œUb-“9r«Êyö¥7gÏ)½([$–gƺ®ó'¾´ßлŠo×]ÿOï?9Õßèðè·NË”IEND®B`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment173ŽôK¸IDATH‰íÓ± ! P#Š”,‰QD +eƒ¬À”HAvÌRå¾OºH©pCñØØq¡j~NH»—JAü¶6'…Ó¶V' ý¨Š éÈ jñÂ%{¥BmC3R6u¼RTѪbèK«†ûA¯¸"¼wGOûÊæÉ¨v3T Žðu&õêFe¥W7J觨Â.å,u_æÖèÍT™:uê'ž¦ÞM–ölªÕÔ/}ý&{®éÙNIEND®B`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment174èIDATH‰íÓ;ŽÂ@ `³S¤Y)G˜+pŒb‚¶ äJ”H\ «-vaŒ'QÄž]ÒJ+ÜDÊ—x¬ä7×7ÉUÁϪU¯ `SÈK¾ É  tFº×ôŠ¢ÖN+UßÀ^Õùؕފê OælQÊéçºdÝñpòÌIW܉Y׬ì´=ëBÖôîœèC×’h¦w¶ÝŠF›2 uŽH­ÝiÚ"…÷•ªŽƒ7 V¯Á‘W´5‡€ªÖ0 )´FT šVºZ+¹ªÁ±jÿ¨)Ó:Ððc\¶, +F¿ÜÐÿ¥›[õ˜Õýst;Ô¯« õˆÒK_ú×]Vm¶³®¨Ÿ{&!çû¶õIEND®B`‚ pix[172]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment175g—(~ÛIDATH‰íÓ± Â0Ћ(\fD֠›aK”¬¢`0F)òçL Rø§DB²›Oñ}ßÙ‚™åå§ztQÀ®¬ÞiiÊ*£JQSÖE¤Úͪþk"©«ú€É±Iª'ÚZrÞ¬¯Ø1:DÇz…¤J;‰dçt°¬®ªKkC5º´$çÕ̪+2#ÕØrŸ³ÞõÃõšÕ1=sõ­\V öTiq@ïÊ©1z[û-WA¿™èmZWÕvŸý¨¬ÏY£i£ügöOº™þ7@ÕªU«þ‹¾J1ãÀîÊÉIEND®B`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment181çbð¨ÐIDATH‰íÓ1Â0 ÐTÂæ#ä(9Zƒ¹R¸c¸AK†ã¢"1Ô_PÆ6Êé)ŽcÙ†Á æ½C½ý¦§q¿õñ)Ísë8Ó|VÑñ±ãdUµAÕ@l#'%r Fiˆ‹Ô¼4,W¾(9ï^Z-¢W L¤òª¨ÔßzW´jÕA×*Õ(J5r_œ®åµPiT­ë²«¢ÑÌkštPz²¹Äªzv‘ã~>² ǃ6¡¡G*ƒ4{¤Sü5*!mªcÞ­iƒŠÞÝtݾ%0¬2áIEND®B`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment182~k¡øIDATH‰íÓ½Ž!àY)°0á.rb\ŸL¼ÊÇã‹`¬M¦Ä„0Înî4Ñ›+–‚æ óPcíàS=¶´‚WBW7AÔ !ƒ-ЋZFÍbðQ ‚5³. ~ëº4 ­¨Èº6çÜP{lèÜžî§) ùºKK=隸YÎwÐ/Kèé*k\JžN‚rcõ¢èÖP doÊÙŽ~¨:]gTÞ_=Îk…Uñ¢öqË ÊÙ>®8¾¬>Îy127(BÇúf¿štå%žÉM'j!Bžg4¢òV¸¿øú¦B_ˆ/šÃßÝ QŸª­I'tÒ¤wñ2¾Å˜øtIEND®B`‚ pix[175]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment184—'IDATH‰íÓAJ1Ðj[ÈB¡·.„ö B®ädÁàÄ“8Þd¼Az5ó­–›vª‚è¿Ì£ŠðCǤ€¿‰4é J˜ëPÕÏ“Å倭±ÃÖ™J]KƒB-¢4̈́܉¶–rßàQW>êþ÷ðõDŸÛiÄOšF]Ïô½ª˜iîŸp­ëE]EËeWnuE”&{SIšì˽SulòÂå•®?m¬óÊÜÌþÚM~SW.¦nEsE#ßQ°5Ý·4ÄDº~QeC™| –&Qßðù™z+Q¾jÙh’)°ü…bôü‚L©_¿¦o¨)`ô|P-ÿS=‹.ºè¢Š~5gËü_ñŽ¿IEND®B`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment187UÂIDATH‰íÑ1Â0 PW:æä ŒLä*Ü$E½XKÁšr‚Œ¬š¤, ùžXâõÉúñ‰2#ýZŸš2išÈòUåA¹‘lUS_”°Î7‹4ö²D¨¡è‰È)jTµ¡~ÑGÐWÑ«Ÿë*½lÑË,UÝsg‘j¼ˆÜUí nìr:Ò•íŽub³@‡CM]åPZv“a«irøUŠvE£® 7š@Y×hèY&yƒš£É3Öü} r¿§iÓ¦MÿF߀Êê¤d<@¼IEND®B`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment189é¹xšIDATH‰íÔ1®Â0 `GXÐ+' 7!WáŒL´¨#œ„Á£Ÿ58€:Ù$:üªô©Iœ8…j<|BK´5Z`P” çÕWµt’’«B=UM΋¤èê° Ø¦VC¡ ÖìêCÊÂ’g=KåÎ:êÊóŽ$ÔÔ×Ôt)||×]\•x'W½¦Å·S0á`hÞoX£¢gZz,ÆÈ£©þ-íÔ½r“+'YnŠrEÜQŽ:'¶ŸÑMP2w62G$E9 .{E3‡ÒWèå+x×v핎}¼ØªÜ”§4™:X:yg¥…¥bA³æhé¿„úÿô§_©—ô ®ëzפPIEND®B`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment190‰~ñIDATH‰íÔ»qÃ0 `0,”&§¸‚7ðb>[šÀ+IUÆ0½K<  _JñƒráÜ¥°Ä‚§O€IãèÊ¡¥¥ÿ+ÍÍyÓÖÓµfè±V˜ÖËçBjÑ£dCsmpHÆÈ¹–6 ⪩–‹©‘ú3ÓÁÐ鳟÷ª»n6úªûnl¨xKÓEcÞ'ÔYª±Ò×Êkêš:ŠÅÈ~U¿¦8û«:‹Ÿ¥³t²U×<±‚oŠ&'î|*ÁÐÉ'ÚB-z ÉgÞ›æÉ›Š.„ê—~ceÝ ƒÍÊãv3Øì³ŠB±hnê´m) ÔCщ[´ @-Šƒq/êEÿö·¾õŸè:žÀ»w¨}JIEND®B`‚ pix[179]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment204]—0vþIDATH‰íÒ=NC1 pG¯Ò³2 å (¾@M*†Ž=K¯&F2f°büŠ@Åú¨ÄÐÿú“•øxë´…‘^NÉ2U͆«Q5.½ÖDó-FÃYѸAUaÚž4ô´i¢©¯†æ4½1dsxQ#¹ŒºVWðØ×ŠiÑ}¿# R›ÝáL-º6>©Óv´«#Dm³¨÷ÊŽÈJ¿þ¾?EmñwŠV}|ûÞ¿•Dænm±¢¤i6#Màç× ¿ÞýR?í¤Öi*§¥©]޶m”I>?q”i[xãätýÌݵ—­n…v6ÿGz¸˜*¹êUÏÔFK´LK®ÜIEND®B`‚ pix[180]: xres = 0, yres = 0 ‰PNG  IHDRI)Qü9+ pHYsb&2 tEXtComment209#&LËÐIDAT•uнQE!àƒ7 q†–`hàˆ¥X‚x·[¡fl€†}gá¾7`¿dPV <FøÅoØ&ö7Ù‘úƒÓŸ$¨ˆ-ˆ>A&£|üÁü–6c _ø 5æ—Ýý¤Õø|°üáo€»ñ·aÔÉ÷Å@~$ŽÝ3ÇdQH,ÂX,7£ž`P7f!¬7c±î.ìØú¢¶ðžûÔØzPIšIí쪃‰uìö™“«îØý•íF¾ùB‰WZäcÁ?Üå ¯·ßI~dáÞIEND®B`‚ pix[181]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment213Úè””IDATH‰íÓ1NÅ0 `W•ÈÛr„Ž=ßì=+7"\Ž@$F2fˆòãôu´`j‡ùäÚŽ]‚óÜѿꋫÄãý4«Ú("Ÿ;MªV HliùA%£¨ž7.t½FÙR›ªÇUÛ¢ëÉÓrÑÊz¿]za=¢™‘õª†FÒûEŸ‘×ϪÚDÇUœu (3^‰U­2A9§¨j‰ï«W¯UÍá9OíD7ª&âëѨŠ6U;ê¢)XÚHÎC=èwµ©±uë6†flå&ƒµ“èq œ ð`ë=ðiè²ý¥V^|¸ Se7ͳ§‰/ö*âËÎßœX¿f,¦Øu×]£ß&OÀ‡ºÃIEND®B`‚ pix[182]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment2153‹1¡ñIDATH‰íÔ1nÃ0 P<ê:Šz³ÈÐ1GèU”)Lj€^@@‡ª€ öÓYIH–ö@I“0±ólô´ò´zÙc34z:ú£w5ÓãýŒŽìªŸëjÏRyfU'å¹’® ºr¡“ªÈêÐE¯[(7hÐuƒ.QWzÛ5«:CMÐw}^¨Ôµtm(æ=ë=ϸ+Hí:Eõ/É»KëI´%G¯¦¢oþlQ׫跥gQ¶4x: ï–R‚^ m‘¾V]7Š}áPôy *+0µyš†¨~Ï î†û­«qí_ûúÊßìÐCýßú §qÕ͇o.¥IEND®B`‚ pix[183]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment216ª‚` IDATH‰íÔ;Â0 `G2r„\k±Õœ„«„‰k䔉Q‚ªÇb *­*UúÔÖþm²p |E¯GIÑJ ’&Q# ‚NªÁ¹jIǤ¡-j®mQ3õ‚^2 j2¶Xu49’vÒª4‹àXõðPË*]£ÎmE†¢[Ãizê¾§®(3†ªèBÑv„Eµ·¤ŠQ#k°©ªã:²/eûuÞ&E'¯Ù;I±jçÍ4øX•«™‚ÎQxV‘ÆžR;QùžFRØ)>g"C9õtªŠ#;Á@“zàÁLà°»ñVÛÑÍDKÛÙçCÝU¦ÝªçS¹‹âŸ;–ÖÛJßý]åùT—«ê¯+ê ¸L"hS·IEND®B`‚ pix[184]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment227ö¨N IDATH‰íÔKjÄ0 P/¼ô¶;_¡7ðUæ=@aRz±„¹ˆ†.ºU˜E]ê±*‘Âl¤ÊÐU‚ógÉv, ¼qp_™ÑÕ…¡t¦6ÈR…ÁT‚ÔTÁÑX!’£(ô jgƧ@Ï¢ö¬& Ô†ž[øhÑÖªÊÝÖyU'ö\ÃE5™ºÔ¨ŽòªÕÓ¤5ÛJI;P±3“´£©_SÑhë2 Ol«TŽ„Ï¶’TÎXøÅV„Ð!ó«§C“í‹®jÉ [ÚÁ—th{½xštu¡Ô£§—še<}“»gvfuZ_ÎßøÑw[çÛç×ëÕѦO-:÷Dª^æ[‚?jßTÞu×]ÿG¿™Ùêø‹¦IEND®B`‚ pix[185]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment228fß"IDATH‰íÔ±N1 `ŸN"•²v@Í‹Tõ+12 .<¯T‰¡Á¡®R±x06Î r2u`è÷%Ñoûr 'Ã4v5ôTúÚ=™7“«‚ªo* ­i_L“¯–ç ²òb™T_U ¡GUP¹ièlQâè+ CâôìW‰L1»Ê DÚÁä)݇ªèká0?„–ž9 ´ñõG[@kï#Ép\”Á¯×ö–ª~¯¾UÀM5žO¶××zŠ ~*å¨Ô솑R"Ì MZ°`Æ®&W êü«Ÿžî“i-I¦¿:£æÛæÉ{˜`h*ÀSUp3 À£éÊï†õa F'éG_ï^­éóvàmlM9Ê.©y¹ûË{ï¢\æovÕ«^õ?êòеU%´ÃéIEND®B`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment229.I7IDATH‰cø îà XdÿÊŽÊ⑽?(]5*;*‹[vÿ t}eë)¥«FeGe‰“ñPEÅ?ëÈIEND®B`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment231З:%IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊ%ÙýƒÒU£²£²4”»ÜQ…;]Ä IEND®B`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment233èÞöþIDATH‰íÒ;ŽÃ ÐAH¡äËMÂÍÑ)÷J$MʽÒ^€’1¬µ•Áåj ,Šyh>€;ááOUc–Cõ`·jq‹‚ ´ `WÍzÆ2«éTΚÀùŠNýà77¿«ãnNMÅ$œžÀÝîèE§E-ªéÎ|¨NëRQ2ÐjÿÖl¯šVÛúÉi6€Å`U¼ZR1•Èh!ÍÓÇOPPÍ.õÝØjnjy•4'›¢aµRÛ‚ÅCÍ»š$šh¿¢f5Šª£UõpÑñ2R€³¤ì»àƒT†±z:ù^QÞ\ÛÒ²ª(÷¹Ýº>žíü|#ó»ÑÅ¡‡zè?Ò˜ã¼_ó¶@oIEND®B`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment240>–1k"IDATH‰íÓ1JD1àYVHó ­…+l© Æ£xK‹…¤ò^剭‡ˆxØÍBHœ¼-ü'»  i^ñ1ÉŸÌ_°”BR=– UÝæ:Ryч\_ÚòSo/ŒWÕçüíP3v“ Þ8¼»úèëý¤Nf¥Ú©*tØ–I¥puÁ³aªÆKN*}®(ñÄXÙ[8¡k[!ªŒÎ~Ç³Š­²)³8Û_Å´»¼Ù)ó ÚFP4uiAú½,m+ tç)±ÔI³**dYxŠ[­¶;zÚèð;Àé(…êæ¯ºKÃtuz~E³ñM­˜uÖYgýµ~r_ÒR<¦°IEND®B`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment247 ò¤ÈçIDATH‰íÒ1Â0 P‡Hx#=¹#R®Å€ÔÞ€#p•"$¸FY˜;vˆbœ”ÑÎÀÀB-uéSÚoÇ@•êà÷ FÖŸGµó4Ú¨)`EX̤hü¨œ*¿ï«Ú>.ê¸ÜìKQ_ô®h(Úëº*¿SCÈgQî—Õ±:yV­-ꕜ5È‘œUu‡‰uhåT ¦­-; uÔ¸ŠŽ€É[zj 'žÆUÕƒ… ëÀ÷ræYÒ/ë1«×tÊ_–uZçeŠF‡‰wc5qœµÑ朋o0—¢çºÞªJß륪´è¢‹þµ¾±E½7™'IEND®B`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment250'*IDATH‰íÓ1N„!à1tr¹‰ÜL0[lé•H¶±³µ“»I$Œ Û쟙iV‹ö ä`c üš¾\ ÞÒn*KÑÖhiK–Öl*[úh):K«×õi€ªBWtÀÔH'}Ûè+$Z*§j‹2>ÈZ—rãm~´` §êŽ¥¥YÒýÔuËÅTHš¢ªžÖT …P¸ÈŠQ×á1á­W•Þ¹’e ˜1»šåT±ñR%3™†®‡¹½®;~ÿÖ,*äãpÚupK³¬m©Ç{U[÷º‚'¸aYçÂÙv¹“ˆõ¿ðA³±QýG}*q²ÎyÞä=Wiþ~^ —êªW=×/R¾-[²o›IEND®B`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment254 àÄ3IDATH‰íÔ1nC! P10rƒr„®JÕ©Ðüá£WqÕ¡ã?Bùʈ²0|}Çd­Z¥•21 =Œeꌗj…ÐÑ^ÓêXmQÔlXã&mÎʳ­ Ç&ˆe`•cÕhº™D듬ÃÂWFEsÓ¢¨Ëa±£Â½¢1ƒ_ÔØ¦²ÒëƒÓ”2åg]Zª®ï´¯nÂ(ëÈ•²VSÛZÇ)º¹Ï¹©uµÓØtµ€‹57uš"ØW¼Ó4MÀ*¼Š³„GMwéáEÓ Ci)Ÿ;#Õ¼R :žWèd¥Ÿ¨ïiîêñ;þÁ¯rÍúuþ_V7½éou¾Ê¬T=8=È21 XIEND®B`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment260  SéIDATH‰íÔ1nÅ P#¶Ò©úÃW}…޾š‹}¢ GèUr¶®H]êâ’ä«KŒ—v Ò“  °2"üY£ª ›’Ñ´XMÓ¨jÐtEŒÞ4²¦³¢–ëà5×U×T*ȪÕÕ R1›¦±º‡¦AÔè L5 ìº)8 3‹ZÁ6º ¤t¶dsWŸMqy8PŽ%˜âópÞ)®Ê‹>=ʱ™§E1u2Oä󽪧žò¦YTâ×_¥¶ÛUÕ5½¬ú)¨'Ì—qѽ֛"óÛ^ «¿é{G¯˜P:Ѫé¥^jZ<»Tq¢f6ö_ŒÑpï=·¨Ù2H ÞôBrcqyÜXæÎÙδß:Ä?JÆ«™ê,W¦ÿê¿饗^úú k¹ ióöIEND®B`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment290‹8O&IDATH‰íÓ?jÃ0p }‚®ÑM=XA*2æ½JŒ_CÂCÇ*tQ¨ª/r é§GÁ í‡ðòãéï³'~@áô i­>…Ö,,„=¡#5 “ïÍ’Tÿ¨“ÕGô´zÑ<“bÕ}KçÔyì£CC_s]”×i¨gnëÜPdýŽiliÒ3§fl¯[u@ßÔhâŽVÀÔ†ê„~¬:,nôsÕ‘Öuæ"lD ÕºK_©XdÊw¤&!Ó“LžÖ,äe´Ta§Jý’»zЀ‚ ûÙ,ê4­5EÕ;á”̪™úM¾©‰9R¾ª7œX¥Þöª…z¯Ú=«­ÜèÛ†Ú¿ –ÓbØÚ-ªY}Ù Íüë¯Ð3·葇WhIEND®B`‚ pix[198]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment294ŒU‹?IDATH‰íÓ?jÃ0p }‚®ÑM=XA*2æ½JŒ_CÂCÇ*tQ¨ª/r é§GÁ í‡ðòãéï³'~@áô i­>…Ö,,„=¡#5 “ïÍ’Tÿ¨“ÕGô´zÑ<“bÕ}KçÔyì£CC_s]”×i¨gnëÜPdýŽiliÒ3§fl¯[u@ßÔhâŽVÀÔ†ê„~¬:,nôsÕ‘Öuæ"lD ÕºK_©XdÊw¤&!Ó“LžÖ,äe´Ta§Jý’»zЀ‚ ûÙ,ê4­5EÕ;á”̪™úM¾©‰9R¾ª7œX¥Þöª…z¯Ú=«­ÜèÛ†Ú¿ –ÓbØÚ-ªY}Ù Íüë¯Ð3·葇WhIEND®B`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment295ûR»©óIDATH‰íÒAjD! àˆ —Á+tÙ=VôJB/âRºq‘¾T ݘ¿00]>1QC F¥Tù:§½2%=Ü^;Y±×Fy¬Øk¥Ì”lML‘ %Jý9®ÚvêZloÁÔÛaªï±å©ÞÒÀñò‡:ë¾ïœ.êCµcͧîójË3¯ZZKEªHÒyÓ*fUL¡!õíuj6ºÎ÷''”Œ®ósÖa+C•ûªZ *á\îÞŠ#RÉ:l=ŠŽhë| e6RBz~¡Ó×÷ݬ TT½›~ýTÚÑÉëK*W¼AÇCzý-P¸PÁ IEND®B`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment296b[êòIDATH‰íÒ1nÃ0 P”Í(À‹Ñ•:¶@`+Èrõ&ÞºjTŒäÎÂï%Ùj.@|‘$ݨ@oЙm õ™”œ©B¬qêMÍU¯®PtPî Yñš:á.mMG'¾ËèÉ’Ð5Bõ}öñS@çm›~‹ýßT\òqú÷ÐbORËk^4#妳½AMe¤¹j´g¥³«ÿ…è«j ôÌa"[…è| k%Ú.jQ3UùèZpWrrúe´w¤Êª?ª`’­.ª7¬VÛUÅZߪæêWÍV¤§/(o¦ò[Šj×]wý§z2œÊ#¾x%7IEND®B`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment297\Ú…÷IDATH‰íÓAj1 @-unþÁú#e÷c…UÈÃâÒô ~‚>+òî) é(ô°>ø Y2qþF½¥d͵H (z*AUp”\Wu"œú¸q`u¢6V—úUî¨zè>Ód ØBÙ¸©74b e-²¶m×,WÕ kd•;¢C“òWCp“ub¿IÖ¢íP\E-¡ñ»«¢yèM¡…ü©*,~¨\ÂìòWYfVervýPæê +ÏH™9'ÇÁwQéN˜£¢£+ª«¥dlè·©7S'K»³´zKy»ßÖ-=Ω§žúªY•¢OòÄ÷ö¢öIEND®B`‚ pix[202]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment298…ãÇIDATH‰íÔQJÄ0à¿6oæö >ú í•|ìÃÒ¯áQŒ'ð›˜Ç,„ŒI  .3\|r‡B_¡“™a@Xq‘~ÖC2¼b¤Ø“S¬&˜h ÙŽÕMù±\+BQŧ·ÂC't’:¨¤q®o›Þ©hì¹¾n:]ž;^÷*ônyù®‡McÕþ¾?ªÏzË«¯: z º*ß Æn~¥¾Ïú êXtæ³"·´Ô.¹÷3ßAZMè­¨@Öi@ÏiöYw¢&³>Ì@—©iÈZFNVEÎNþ;hÊ!¾©L˜¨õe›úN-}":XBÕMY?dåÖÂIófh¨oëØÒ°´TŠ«^õ?êáý»¬Xý7½¶ A˜@IEND®B`‚ pix[203]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment299òä÷‚ìIDATH‰íÓ;nÃ0 `4ê< oV)È ÑGª 9FäʦÁK§è&r(:t°-ôàO ØþXŸ¦^L…ù˜_]щ›ãa¬Àu²T(Ãxg…(OcÅÖByjÇR£ŒŠÖC·q½ßŠ7% Q·«J¦r ~ÇÍiú!ª¥ñ£ã$yí¾a.4ÖMÔ¯UÑÄ¢\q¬ÞÒŽ–îd*òÒPSy6¢wE#„TqQ*Š@·‚‹’†¬}dJŠ¦È èš•œr3R»pÜ›ŠÖÁCCÕºÿV6~wáßëjêÅÒ>[º;S½yî§©|ê©§þ{ý{yãwÆ÷p]IEND®B`‚ pix[204]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment296b[ê IDATH‰íÔ±j1 `™ x‹× ½IýJ3”³ }-åMî<jìêBš%’h -rÜðáß:Ë6 ãÉðëJÑR†vðª–ÔÁɚà lšrfö¤â3t˜ø­AVÎÜe­;×¼SõÉÕ°¨úÌIÕ´iCùJZ6ÝËkÅZfe9¹Ä5ŠÚ®*'÷1±Înuô‰ç}Ŭ¨/¸#)X_"¥{åÆ5T•ÇÖX£¡ÉÒbêêÒQSr sYV€9ë=^v$­¿W=L²îyjjZ"g’~ŽÞÆ8¥û—Ï2Š€Ÿz’ì‹*•tÓnj•6óMWS M–žeü‹[ô§úþ/«zèC¿¯ìlÀÀÚ]#±IEND®B`‚ pix[205]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment300[8žX IDATH‰íÔ±j1 `™ x‹× ½IýJ3”³ }-åMî<jìêBš%’h -rÜðáß:Ë6 ãÉðëJÑR†vðª–ÔÁɚà lšrfö¤â3t˜ø­AVÎÜe­;×¼SõÉÕ°¨úÌIÕ´iCùJZ6ÝËkÅZfe9¹Ä5ŠÚ®*'÷1±Înuô‰ç}Ŭ¨/¸#)X_"¥{åÆ5T•ÇÖX£¡ÉÒbêêÒQSr sYV€9ë=^v$­¿W=L²îyjjZ"g’~ŽÞÆ8¥û—Ï2Š€Ÿz’ì‹*•tÓnj•6óMWS M–žeü‹[ô§úþ/«zèC¿¯ìlÀÀÚ]#±IEND®B`‚ pix[206]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment297\Ú…IDATH‰íÔ1jC1 P}4x)øõ52Å×úCéwèÅ 2æ >‚Fæ»rÈÐ&’-?¨ðbžŒ- º ¶Ö“¡- ­x\§ÞQV×` ’ð'ˆš!ÐHˆ¢¦¡Ž (êËy¹¨Àú†eçD²Ï ó,+’Ï+r‚¬•uúµ&Þüæ²¾)&E?Îk5ío§hi‰‰oCÓܳ¡‡;Êo¤é KyÁÒdå¢"Ö*ë(›W¤YÖ®î¹rä7bmïXUõ}uäÊ¡9 m²Žh¦VSÉVß«üÎç¶5Œ¡iæUýäÉ¢*ÇMwú¡J߸Äõ‘Ð'ÿõ9µKëfJÛiüƒ.êS³uI÷(&IEND®B`‚ pix[207]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment301,?®ÎIDATH‰íÔ1jC1 P}4x)øõ52Å×úCéwèÅ 2æ >‚Fæ»rÈÐ&’-?¨ðbžŒ- º ¶Ö“¡- ­x\§ÞQV×` ’ð'ˆš!ÐHˆ¢¦¡Ž (êËy¹¨Àú†eçD²Ï ó,+’Ï+r‚¬•uúµ&Þüæ²¾)&E?Îk5ío§hi‰‰oCÓܳ¡‡;Êo¤é KyÁÒdå¢"Ö*ë(›W¤YÖ®î¹rä7bmïXUõ}uäÊ¡9 m²Žh¦VSÉVß«üÎç¶5Œ¡iæUýäÉ¢*ÇMwú¡J߸Äõ‘Ð'ÿõ9µKëfJÛiüƒ.êS³uI÷(&IEND®B`‚ pix[208]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment298…ãÇõIDATH‰íÓ1j1 @Ã:žà2í•[öK)¯»†<$O9uyFò—.ŒùŽKÉM¸nVáÁ6H2ð <^ šZÞ=ó—¦ßœ“c¾(*+;ÉoŠpº©ö®è“cG‹¡ S »¡®"5´ÔWÜß0ë:u=[C¹jTµ¡è -˜1Ï’tõ#Í0Ò}¨¯M4Ò÷®'K?édŸm±—b6j% ºé¢i tŽùe ˜W£¿“4w úäTÑ›×§®N°NÐgOUÙׇVWו¼ª­ôLAUùDÈ5êJ¬Tâ®vüéóP·Ü|衇ú«?[¸:´]IEND®B`‚ pix[209]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment302µ6ÿtõIDATH‰íÓ1j1 @Ã:žà2í•[öK)¯»†<$O9uyFò—.ŒùŽKÉM¸nVáÁ6H2ð <^ šZÞ=ó—¦ßœ“c¾(*+;ÉoŠpº©ö®è“cG‹¡ S »¡®"5´ÔWÜß0ë:u=[C¹jTµ¡è -˜1Ï’tõ#Í0Ò}¨¯M4Ò÷®'K?édŸm±—b6j% ºé¢i tŽùe ˜W£¿“4w úäTÑ›×§®N°NÐgOUÙׇVWו¼ª­ôLAUùDÈ5êJ¬Tâ®vüéóP·Ü|衇ú«?[¸:´]IEND®B`‚ pix[210]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment299òä÷‚ÍIDATH‰íÓ± ! P# JF`'±Vª@•¹È&–²åE:cŠt|7—H)Î%K_“Uéûºf¨ÍKP+½ íH«NPé!‘JlÒ î‘ T7´"õªé=l†nqKœ hkâ„z»Š2³Ú6: |5ô©Ú¡ _RÏhF¦îÉR}䋾3ÒЖ¡h]bo®´„Zš›§"º‰­u®¢DõŽsòÂóT:}©x$E€ú©SÿW÷béú;5SÙú2UN=õ˜¾3ZÎÒ*ò¢IEND®B`‚ pix[211]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment303Â1ÏâÍIDATH‰íÓ± ! P# JF`'±Vª@•¹È&–²åE:cŠt|7—H)Î%K_“Uéûºf¨ÍKP+½ íH«NPé!‘JlÒ î‘ T7´"õªé=l†nqKœ hkâ„z»Š2³Ú6: |5ô©Ú¡ _RÏhF¦îÉR}䋾3ÒЖ¡h]bo®´„Zš›§"º‰­u®¢DõŽsòÂóT:}©x$E€ú©SÿW÷béú;5SÙú2UN=õ˜¾3ZÎÒ*ò¢IEND®B`‚ pix[212]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment300[8žXIDATH‰íÒ1N1 PR¤c(éÂ1¶"Çá+’Õô\Ž2+°G Ò€Pa¤cCk§›n~áæ)–bh êë#­ÑÒŽr°YÁÓdj¾C2Ô·¸4К‹Î˜Þ¸êz­÷^×§ˆéüY =Š^Ñ©Ú[ªi½6] i¤5þ©6Ö ÙoW?R·”´~Y:‹RÓÿK/'QÔ'Iô¯ÁÐ,Z£ªH¹Š&Ukd=SѵÄÓP'Ñ|«0w¦¥ƒvX¬7>¸f)¸vçÑP¹IðÕP¦³¥L¡Œí_¸&<;âüõ`ª•íõc¬ß¦&V´´³^0ú,Ú¬‹•¼÷‘êÙu×]7×_öÙ۫äIEND®B`‚ pix[213]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment304\UZAIDATH‰íÒ1N1 PR¤c(éÂ1¶"Çá+’Õô\Ž2+°G Ò€Pa¤cCk§›n~áæ)–bh êë#­ÑÒŽr°YÁÓdj¾C2Ô·¸4К‹Î˜Þ¸êz­÷^×§ˆéüY =Š^Ñ©Ú[ªi½6] i¤5þ©6Ö ÙoW?R·”´~Y:‹RÓÿK/'QÔ'Iô¯ÁÐ,Z£ªH¹Š&Ukd=SѵÄÓP'Ñ|«0w¦¥ƒvX¬7>¸f)¸vçÑP¹IðÕP¦³¥L¡Œí_¸&<;âüõ`ª•íõc¬ß¦&V´´³^0ú,Ú¬‹•¼÷‘êÙu×]7×_öÙ۫äIEND®B`‚ pix[214]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment301,?®ÎêIDATH‰íÔ=Ò! à0̸#­Ý^Áò«äbΰ«ñ*{é,¿”)0¡5¡´Z šg/@´~­˜L-¾-s¯j× î ­0‘¡<ª€'£2ÓP'ŠŽ ¨J¢+ÁlhÀ´Ñ_4*Ϭå–t½DÖFº6Œ™ Í5aŸ÷õ¥Ë$ºõ=¿Õ‹.^×»ÏqK§ë¿  kíúý¬®]$Mñ$Ú Í]ËP1Zêq àqÞrÔ׌¢ë@éèòYϤ$‡‡©#‰údi \A¿ý•ŸC¨F&Û›O1ÊíX/ôÑûßÿ »îºë®¦~ÅÏ¿ì[`IEND®B`‚ pix[215]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment305+Rj×êIDATH‰íÔ=Ò! à0̸#­Ý^Áò«äbΰ«ñ*{é,¿”)0¡5¡´Z šg/@´~­˜L-¾-s¯j× î ­0‘¡<ª€'£2ÓP'ŠŽ ¨J¢+ÁlhÀ´Ñ_4*Ϭå–t½DÖFº6Œ™ Í5aŸ÷õ¥Ë$ºõ=¿Õ‹.^×»ÏqK§ë¿  kíúý¬®]$Mñ$Ú Í]ËP1Zêq àqÞrÔ׌¢ë@éèòYϤ$‡‡©#‰údi \A¿ý•ŸC¨F&Û›O1ÊíX/ôÑûßÿ »îºë®¦~ÅÏ¿ì[`IEND®B`‚ pix[216]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment302µ6ÿtëIDATH‰íÒ;N1 `£E ]¸A®@¹Åй' ³šbJŽÀQv¸I$.:¯òcSÛiÐHcEn>ÉÈ„AÌôWýpµQÀ<ÉTVMØ¢§"f[+…ö<ÐÈ9@êÛ•çÅÕû©æ¥{zÊªŽ²è¹mý®(-¹àÜ_l•omžRÜD«­²‹*;TÙÓ¤zuÕ/Oqذ ´¨L­¿úÉw¦– ÖV¬åÉ:]ÑIô­£§Àˆ›£õùU5›*WGÉÓF“ÉÈ„AÌôWýpµQÀ<ÉTVMØ¢§"f[+…ö<ÐÈ9@êÛ•çÅÕû©æ¥{zÊªŽ²è¹mý®(-¹àÜ_l•omžRÜD«­²‹*;TÙÓ¤zuÕ/Oqذ ´¨L­¿úÉw¦– ÖV¬åÉ:]ÑIô­£§Àˆ›£õùU5›*WGÉÓF“/ÑŠ$±qSÏ4ma‘æÁØû.bu°BkØðc‹'úWá©§žzjGý¡ûþ}ÙÀ§KžÓIEND®B`‚ pix[219]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment307Å\ ûßIDATH‰íÓ± à гR¸¼X#)e:°Rd-2AVÀ ¥¡°|ùv‰Oéʉâ!8à#ÖiQŽÓ"~½`ðMÍ¢U0Çq ÅâYØÊnï¡©I\Z í𓸴j¨¾¡Jô¦uÌÖÖœ :36¬—7Q\4¦~SrÞ*nWßÓ«#ªÐü zݵ¶µTè8Wmj.›~‰Æ2B¨ÅMZéé‡i…ê‹é]§EŸLÅA§Ü>/ÑŠ$±qSÏ4ma‘æÁØû.bu°BkØðc‹'úWá©§žzjGý¡ûþ}ÙÀ§KžÓIEND®B`‚ pix[220]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment304\UZA IDATH‰íÔ1nÃ0 Pª­Z;Õ=F‡"ºRPD.z1…Gਢ‚*.2‘Z (~Médrmpmq¦¼ÌÔ|Åå&Ì´Cšh3gß•¤_¡¸ÚR‡ÌÖvU;Ä +[C©V ‰¬Ã8käC$ÈŽ&:Dtö«/¥ì~õÉÚ’êKF øjgT?ÊÐwOe¨“ï7Ÿµ9é“>yÁêä‹y(;º¥¡d«¶åÑÖö'ÚSêMµª~á³×É]½¶/ªôæi Upι¨F;A΋ÏVR=ªÚÝ G¥Ôœ^ñèó(¼=ÕX¸ÊfàÞ:{¡ìeýÊ<•­È·ù_ý¡¶©ö+ôš©îz× 'nOÄ=¸ TIEND®B`‚ pix[221]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment308Uãj IDATH‰íÔ1nÃ0 Pª­Z;Õ=F‡"ºRPD.z1…Gਢ‚*.2‘Z (~Médrmpmq¦¼ÌÔ|Åå&Ì´Cšh3gß•¤_¡¸ÚR‡ÌÖvU;Ä +[C©V ‰¬Ã8käC$ÈŽ&:Dtö«/¥ì~õÉÚ’êKF øjgT?ÊÐwOe¨“ï7Ÿµ9é“>yÁêä‹y(;º¥¡d«¶åÑÖö'ÚSêMµª~á³×É]½¶/ªôæi Upι¨F;A΋ÏVR=ªÚÝ G¥Ôœ^ñèó(¼=ÕX¸ÊfàÞ:{¡ìeýÊ<•­È·ù_ý¡¶©ö+ôš©îz× 'nOÄ=¸ TIEND®B`‚ pix[222]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment305+Rj×ÚIDATH‰íÓ=nÄ àÇ­›ÈÜ \aoÀ•\nÈÍæ(>é\XÌŽ½-*RO1Í'ót¦¿ªÈT‘¢¶ØÕ q7EèjÅ´!Xîê od™èTá…¨ØÁO_¸ÊÝr¯ 5ÊlÚ¯hE’/÷A5—„ÙÒÓíÔðèkC*ZÑÓ5wuG8T”è4Ô›iS ™öë=4S­¦ßNéôG*¦Oª(‹kT,ž½ÊÔV‹ë±“;™ œû¼;%Žï@´"6d¦’þ(Ów4?R†ª—^zé¥ÿ¢/FÆ–Ks÷IEND®B`‚ pix[223]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment309"ä&üÚIDATH‰íÓ=nÄ àÇ­›ÈÜ \aoÀ•\nÈÍæ(>é\XÌŽ½-*RO1Í'ót¦¿ªÈT‘¢¶ØÕ q7EèjÅ´!Xîê od™èTá…¨ØÁO_¸ÊÝr¯ 5ÊlÚ¯hE’/÷A5—„ÙÒÓíÔðèkC*ZÑÓ5wuG8T”è4Ô›iS ™öë=4S­¦ßNéôG*¦Oª(‹kT,ž½ÊÔV‹ë±“;™ œû¼;%Žï@´"6d¦’þ(Ów4?R†ª—^zé¥ÿ¢/FÆ–Ks÷IEND®B`‚ pix[224]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment306²[;mùIDATH‰íÔÁq1 PyÌÄÇ¥\Š)%eäÄ:C”V¶€±™4àãf²XÈ. ¯K¸0àñìåd[²—Ø™n ëØóT­KÏ9qŽº’¯ÔÉTu&?S/Ð0µi¨/ä ®üÕ—$±ßkº=ëïuæßE{-s¥0Fw޽TM„NÔ´ @ýзÕU­G…±Î ƺÞÉ®ÊÒÒ×7PÉ šóÆRÚèÕ˜-óz¥«tV”^°FZƒ:‹K[ëM #Ðã… ø^‰vö·›)BýŒL õ—ù£½2ðŽ˜wüÅü­à)›ü7ILLÝ›úŸ]=õ©÷£$´ŸÑߌIEND®B`‚ pix[225]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment310B#¯ùIDATH‰íÔÁq1 PyÌÄÇ¥\Š)%eäÄ:C”V¶€±™4àãf²XÈ. ¯K¸0àñìåd[²—Ø™n ëØóT­KÏ9qŽº’¯ÔÉTu&?S/Ð0µi¨/ä ®üÕ—$±ßkº=ëïuæßE{-s¥0Fw޽TM„NÔ´ @ýзÕU­G…±Î ƺÞÉ®ÊÒÒ×7PÉ šóÆRÚèÕ˜-óz¥«tV”^°FZƒ:‹K[ëM #Ðã… ø^‰vö·›)BýŒL õ—ù£½2ðŽ˜wüÅü­à)›ü7ILLÝ›úŸ]=õ©÷£$´ŸÑߌIEND®B`‚ pix[226]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment307Å\ ûÓIDATH‰íÔ1Ž! Ц˜’¬Â•¶Ü.H{°Ü„#Léá˜lJ¾¥¤Ú'?À‚Uñ¶þ…ŠÍZf:¬î6nTg¹Ý^åzùZ÷‘ë Ú‘UŽgó¥Ê)­¤óTýZ«!»ž‚ÛZw×o©‘¦Éõ§Ôò¾`ªŸhªÿºˆªçJ~Y6¦b7š§l•eÒI˜еâ /T-ÒWªžê@Õw4ú7zþèW¹ôÒK/ô"k³Õš+ÌIEND®B`‚ pix[227]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment3115$ŸÓIDATH‰íÔ1Ž! Ц˜’¬Â•¶Ü.H{°Ü„#Léá˜lJ¾¥¤Ú'?À‚Uñ¶þ…ŠÍZf:¬î6nTg¹Ý^åzùZ÷‘ë Ú‘UŽgó¥Ê)­¤óTýZ«!»ž‚ÛZw×o©‘¦Éõ§Ôò¾`ªŸhªÿºˆªçJ~Y6¦b7š§l•eÒI˜еâ /T-ÒWªžê@Õw4ú7zþèW¹ôÒK/ô"k³Õš+ÌIEND®B`‚ pix[228]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment308UãjäIDATH‰íÔ± à Ðs(è·‰=š,RØ #„(RP “»Ë?¤È­©ŸÎF_S,O§ôÕ7±ÒÔ7êFT#od¡¢5ˆ¨™õ\ö÷ÿhÞÕ¢Ã7*qf¿"MòEriQuëº@µV4*šï¢Ýf7К]m5’¤×4N¢ê¬dš2Tã‡FêöYUe¬……gÎN´å¼"MvWÂj¨éŒ»E½KJ¯âMÔjš$I2Yil>·½wÒÂ7åÑ:ÙÊõú-P§y¨õ=T´Nþ7.½ôÒKÿÓ/2†®åWG6IEND®B`‚ pix[229]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment312¬-Î5äIDATH‰íÔ± à Ðs(è·‰=š,RØ #„(RP “»Ë?¤È­©ŸÎF_S,O§ôÕ7±ÒÔ7êFT#od¡¢5ˆ¨™õ\ö÷ÿhÞÕ¢Ã7*qf¿"MòEriQuëº@µV4*šï¢Ýf7К]m5’¤×4N¢ê¬dš2Tã‡FêöYUe¬……gÎN´å¼"MvWÂj¨éŒ»E½KJ¯âMÔjš$I2Yil>·½wÒÂ7åÑ:ÙÊõú-P§y¨õ=T´Nþ7.½ôÒKÿÓ/2†®åWG6IEND®B`‚ pix[230]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment309"ä&ü£IDATH‰íÓ1à P#Æ›”£ÅQ†®=U‡^)`d@qA]ñŸÒ¥Âë“íÁß$ ˜.Ö㔬UϦ) ArPÔ I^ÑEØKkuèé×®JV°•=ôÐCÿGŸ,×Íÿ(nB—IEND®B`‚ pix[239]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment317ÜG:ºÒIDATH‰íÒ± ! P ÊQX)pRÈ· £°A(It9Ç&RŠÄÿÊ(ÅQ¸àÉØv¼sf÷c}ØZ'å”M]îQ#ÐÔ&¨Î¥Þ·ßšU )ÑÔ³æ& ¤ØÖsà†õ:í鸋.¶vZDøQwCA7ª‹C3Ð44aÝ|‰¶VÍ¥jë­ÄN€rU½¥¡“­«jร´í^ÞL¨¬Úv´äæE“©Òáæ9SW™Ž(˜Â&[×N𵫳·õ>JV°•=ôÐCÿGŸ,×Íÿ(nB—IEND®B`‚ pix[240]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment314ENkäIDATH‰íÓ± à Ðo¹p²£°RÊ‘@Ê %Œâ\‰@îl¥»;¹ˆ”Æ4H~âwÝ ?Ðâ-MM¦"ÚëTe2ÕYºH‡Ú©âuwè“æ¬hëcÏb7X'*ERjEZY¥è5yU© <ëY*%é9Ò›¢×HŠ6ÊûK{‰/Cçð¦}5ÍI|¤ €S¬P´±zC=ÅkÉ' ï©*zX‹r£M/–f(],1®*wŸ´!ΊRfeõÊZÒ°¨êH ‚¢¾±FQ·UUùäï_íSq衇þY?´&½Šñj§IEND®B`‚ pix[241]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment318Lø'+äIDATH‰íÓ± à Ðo¹p²£°RÊ‘@Ê %Œâ\‰@îl¥»;¹ˆ”Æ4H~âwÝ ?Ðâ-MM¦"ÚëTe2ÕYºH‡Ú©âuwè“æ¬hëcÏb7X'*ERjEZY¥è5yU© <ëY*%é9Ò›¢×HŠ6ÊûK{‰/Cçð¦}5ÍI|¤ €S¬P´±zC=ÅkÉ' ï©*zX‹r£M/–f(],1®*wŸ´!ΊRfeõÊZÒ°¨êH ‚¢¾±FQ·UUùäï_íSq衇þY?´&½Šñj§IEND®B`‚ pix[242]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment3152I[–ÏIDATH‰íÒ;! Ð8”ë ¸‰\ÉÒJ¸G’£p„ر3 °p×!±òSl š7!ÂÃW5kIl™X `’&¯WZŠª’]©{jT/J’.êÚ Š¨™W×Õ1JoÕ0Š]-Œw•ÀE•Œ"8TåÌh›íY5©íŠÓIÒ“¤3vÕc½%I}ÏõÓXáØ4Œµ¾lS4¢ZN î(޵NjbÕñÍí¯6eznZë2óÖ5«5q&VéÒŽÄÔ}Dfz^´÷s½þeW›nºégô¬JÆõ64”‡IEND®B`‚ pix[243]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment319;ÿ½ÏIDATH‰íÒ;! Ð8”ë ¸‰\ÉÒJ¸G’£p„ر3 °p×!±òSl š7!ÂÃW5kIl™X `’&¯WZŠª’]©{jT/J’.êÚ Š¨™W×Õ1JoÕ0Š]-Œw•ÀE•Œ"8TåÌh›íY5©íŠÓIÒ“¤3vÕc½%I}ÏõÓXáØ4Œµ¾lS4¢ZN î(޵NjbÕñÍí¯6eznZë2óÖ5«5q&VéÒŽÄÔ}Dfz^´÷s½þeW›nºégô¬JÆõ64”‡IEND®B`‚ pix[244]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment316«@ ,ÚIDATH‰íÔ1Â0 Ð_:t #7!œ„302µ9ZŽn1uˆì²úgêØ ñðÔÊõ·ŠÖ9;h^zÑIjÅdjÁØâR:½-]UýŠ*:êD3Õ[½õKOï›^ìžËÛWíÊÖör›ÚÓhqjÑ9ë$;:ˆ®D+°©ÝUƒhvö÷¶I5Ý­Òô!¥™jÕìñ.’7§WàÄ5Ïî³3\:3ª(Ùœ¬[GU“…ËdΚ]$éã&uÝnC?Z¿Lÿ'¸ÏŸáÐC=tý±µ¢._î’IEND®B`‚ pix[245]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment320iüÚÚIDATH‰íÔ1Â0 Ð_:t #7!œ„302µ9ZŽn1uˆì²úgêØ ñðÔÊõ·ŠÖ9;h^zÑIjÅdjÁØâR:½-]UýŠ*:êD3Õ[½õKOï›^ìžËÛWíÊÖör›ÚÓhqjÑ9ë$;:ˆ®D+°©ÝUƒhvö÷¶I5Ý­Òô!¥™jÕìñ.’7§WàÄ5Ïî³3\:3ª(Ùœ¬[GU“…ËdΚ]$éã&uÝnC?Z¿Lÿ'¸ÏŸáÐC=tý±µ¢._î’IEND®B`‚ pix[246]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment317ÜG:ºíIDATH‰íÔ1‚0Ðe(°’Ö™\Ä!73Xq ¯²Þo2E&˜ t» g”‚æe–ÍòšÀÓÓ¾¨ê©ÞP†JNӑꔕZ]mʽÉÚD²ª‡šë+Ú¤fÖJÙoQV4Ì•ù$kœ»â‹¦eÜ‘R9wkÙÊK?–P§i:.êÄ\ÝßÚ‹úœPevP¯P;´£ =T‰Ì¨L’Ëœ?Ë:'Çx’ÕS›J´¿ŸÃ좢S_^IÓeœÉõP£|V•ÏàG Ru´HÙÁiÀ»î±ÿ=ù×_Ðij‘z¨9Í@o°«êôÅúX«nÂÇzIEND®B`‚ pix[247]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment321 ÌLíIDATH‰íÔ1‚0Ðe(°’Ö™\Ä!73Xq ¯²Þo2E&˜ t» g”‚æe–ÍòšÀÓÓ¾¨ê©ÞP†JNӑꔕZ]mʽÉÚD²ª‡šë+Ú¤fÖJÙoQV4Ì•ù$kœ»â‹¦eÜ‘R9wkÙÊK?–P§i:.êÄ\ÝßÚ‹úœPevP¯P;´£ =T‰Ì¨L’Ëœ?Ë:'Çx’ÕS›J´¿ŸÃ좢S_^IÓeœÉõP£|V•ÏàG Ru´HÙÁiÀ»î±ÿ=ù×_Ðij‘z¨9Í@o°«êôÅúX«nÂÇzIEND®B`‚ pix[248]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment318Lø'+òIDATH‰íÓ±i1 àÿpá&6î·!3§ ëwÔùÂYš’Ôí…6}݇zè¡ÿE¯î°ÃîÅ{ öIEND®B`‚ pix[253]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment324nc8ÃüIDATH‰íÓ1nÄ ÐOBÉÈM¸ÒÞÀ¶r\ÉEÊ!D)¶.³ò,Ž‹Õ*3n¶IaÈâ10ÀÙùF<¤%ˆ5dÃ7 2[ÇÏe䆴uœï•à ‰ÕXB¨ˆ½U×í±±KÝTãW5c'Š3Y^)ÌäUmXgÖuÙUAŸ6Úê¿)¾³žÕ/”ÎwTª¡Ï^j–’ u;*è:HŒu±”ŸœLýçãSSºeƒª¿“o¶.@6´Á1 ¤µj¯É^x–†MÕõZ¥—@'§*÷b>6î·!3§ ëwÔùÂYš’Ôí…6}݇zè¡ÿE¯î°ÃîÅ{ öIEND®B`‚ pix[254]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment321 ÌLïIDATH‰íÓ±j1 `• µfó‹üJ;ìㆾ– ÐGˆC_@%CzAÑ]¡“tCÉPèy¸AŸmþ³eЕÑàž*í{‘âj_´Š 5R´å+ºLø¥¶yç+Æš‡Ž§©Œï­ÿ«#ãg ºcÔV] ŒbªæÎ6ÇÑ£íŒÊY^æ·o-òä•é>i¯2ù')³^§äësR²p¾²Õ‡PÉêúh“$;bµ¾ •S‡4FÚíê“]¢ŸŠ¥Hçv¥ s>¨œš-/®*Õ3^êþ䪗XòozOýú“©6Ýôè h2Í>‡(‹8IEND®B`‚ pix[255]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment325dUïIDATH‰íÓ±j1 `• µfó‹üJ;ìㆾ– ÐGˆC_@%CzAÑ]¡“tCÉPèy¸AŸmþ³eЕÑàž*í{‘âj_´Š 5R´å+ºLø¥¶yç+Æš‡Ž§©Œï­ÿ«#ãg ºcÔV] ŒbªæÎ6ÇÑ£íŒÊY^æ·o-òä•é>i¯2ù')³^§äësR²p¾²Õ‡PÉêúh“$;bµ¾ •S‡4FÚíê“]¢ŸŠ¥Hçv¥ s>¨œš-/®*Õ3^êþ䪗XòozOýú“©6Ýôè h2Í>‡(‹8IEND®B`‚ pix[256]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment322‡öëIDATH‰íÔ1n!п¢˜rÛ‘ö )]e}”!¥;“äJ{:—!r3ÅhdzNJ>)\f ¤'ÄðNÉxL¥£+’gª†´bòedª=‹1•M/M•ŠVlºiò¨DË)­Uªö$Ÿ~´•×®–Mé’Bõ…(Ò·‰žˆÊà*úÞщÎýüðÊ5î¾Ì=]æJÖÕ965Ö7¢’¨¥}Αx(Ç©…g¢z×¹­Ã_:pŒMLõžÏL c¼³cÒçéZÛ§½ž#»˜®Ñ¸nEûÚ~¿¿k„üðŸ³ë®»þC½ùt°÷ð×IEND®B`‚ pix[257]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment326€mYïëIDATH‰íÔ1n!п¢˜rÛ‘ö )]e}”!¥;“äJ{:—!r3ÅhdzNJ>)\f ¤'ÄðNÉxL¥£+’gª†´bòedª=‹1•M/M•ŠVlºiò¨DË)­Uªö$Ÿ~´•×®–Mé’Bõ…(Ò·‰žˆÊà*úÞщÎýüðÊ5î¾Ì=]æJÖÕ965Ö7¢’¨¥}Αx(Ç©…g¢z×¹­Ã_:pŒMLõžÏL c¼³cÒçéZÛ§½ž#»˜®Ñ¸nEûÚ~¿¿k„üðŸ³ë®»þC½ùt°÷ð×IEND®B`‚ pix[258]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment323ð­`ÜIDATH‰íÒ½ Ã0à3*\ªuw‹´J H&‹Édi n\(¾œMŠ@ôT¦V¡Bˆûy$•觺Ó{:/FbSÖDœvê"Õt#ø³'òÁ ªdÓ¶¬ÏYLtÁ‚iŒk«ê»¢I6U%±Ñé8‹º’gUÐo&–¨-ƒuªJ¾¬»éäÊUe+ƒô½Ê01T# £j«Ë(kŸíÚÊ k6r²È¡šÃ‰5xP;ŽÄá tË$£IFò÷ðí÷Iú%L.,2Ë 2ùQÀ¡‡zè_è ÒÞÔbloIEND®B`‚ pix[259]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment327÷jiyÜIDATH‰íÒ½ Ã0à3*\ªuw‹´J H&‹Édi n\(¾œMŠ@ôT¦V¡Bˆûy$•觺Ó{:/FbSÖDœvê"Õt#ø³'òÁ ªdÓ¶¬ÏYLtÁ‚iŒk«ê»¢I6U%±Ñé8‹º’gUÐo&–¨-ƒuªJ¾¬»éäÊUe+ƒô½Ê01T# £j«Ë(kŸíÚÊ k6r²È¡šÃ‰5xP;ŽÄá tË$£IFò÷ðí÷Iú%L.,2Ë 2ùQÀ¡‡zè_è ÒÞÔbloIEND®B`‚ pix[260]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment324nc8ÃúIDATH‰íÒ=n! `;4‘¸Áp‘hçZ)¢£qŽ@Ia™xG›Ý"¶«Hi†öÏ–³*üÎäéžvW›«Õ½Š« >•ÑSÒõÒè©Õ]'.²põ<{@¢˜ §A¢'èI C }ø¡8@ ë®ÞqÄZt´áH†¾EºaOMU†D;öÜv]££«ÞlmÈ[ͪvàOeº=WK %SW-3{:öf½Y´Ù«*ïõ¨¥']g‚Ì)Œ7ÀiLPæ~œúŸJF7D¿ÎòX*åa£“SŽýŒlôYtq^U}œÙ<»±kð£ÎºôÒKÿY¿ú­5$ü~IEND®B`‚ pix[261]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment328gÕtèúIDATH‰íÒ=n! `;4‘¸Áp‘hçZ)¢£qŽ@Ia™xG›Ý"¶«Hi†öÏ–³*üÎäéžvW›«Õ½Š« >•ÑSÒõÒè©Õ]'.²põ<{@¢˜ §A¢'èI C }ø¡8@ ë®ÞqÄZt´áH†¾EºaOMU†D;öÜv]££«ÞlmÈ[ͪvàOeº=WK %SW-3{:öf½Y´Ù«*ïõ¨¥']g‚Ì)Œ7ÀiLPæ~œúŸJF7D¿ÎòX*åa£“SŽýŒlôYtq^U}œÙ<»±kð£ÎºôÒKÿY¿ú­5$ü~IEND®B`‚ pix[262]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment325dUßIDATH‰íÒ+! àì Vbë¸BeתƒÎ`¯Äž G(®–™CšmE ?¦/³>’âNxú°Þ|O#¹bäP[Ù¤äŒE‡uEêÉ2@]_iUt3«`QVQñ-{×Ô4=4€N*Ö¢K[+õ´›E§¶f²ѱ­‰ GW‘î5¨9‹rÑ "ÑgƒuâlÛêº*¨tÐEÔÝ™’âNxú°Þ|O#¹bäP[Ù¤äŒE‡uEêÉ2@]_iUt3«`QVQñ-{×Ô4=4€N*Ö¢K[+õ´›E§¶f²ѱ­‰ GW‘î5¨9‹rÑ "ÑgƒuâlÛêº*¨tÐEÔÝ™liðteO:õÔSÿ@¿„È>ñAöiIEND®B`‚ pix[267]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment331ý ÷IDATH‰íÓ»Q1 `é8aÆ1 .‚7vƒ·JÂ¥ˆ p†…önÉ$%0D«ÐŸßó Ø© þO):º ðV-dþ4uBZhi'CSß'dUG~ï:$}me¢QWyñ ô +÷Bé)èJY´½Ú¢ìÜ^Q×-|8*ÿlëº Ø–±6Š¦Æ ër·•E³§T\­õ[õ/äV­;÷gÑb)É‹ ¥\€¦î©Ã~5νé0ôH”ܪº‡ù*í ë’$ÏÄËÈÆã}’¡ÇF&¯SFö´¹jôïVG§«ã>liðteO:õÔSÿ@¿„È>ñAöiIEND®B`‚ pix[268]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment328gÕtèäIDATH‰íÓ1n!пÂ%mRqtø(9‚ËTY:+D)|9–ˆ Ø]2Ë(ÅŽèH0üîTÆè¶Úº‰ª×lV, ÇôK,íÀ ¶§®…LÔ)|å×¥ê©ú›†´1 Wý˜šL­h‘jZ¹6§›§Z¡²P•óZ L‹¤ý”ô•_é‹$ÞÊžj¹$ª§5_Ø/DA¤Z½<ÅBÕ•—0Ïþć.yhe ¼ }¶sUq®n¤ÎNl»’iŸav3]–ê=“dRJœ+G[GÕ1k‰ª]‡zè¡ÿH¿x¶hÏÎ IEND®B`‚ pix[269]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment332ž¬·äIDATH‰íÓ1n!пÂ%mRqtø(9‚ËTY:+D)|9–ˆ Ø]2Ë(ÅŽèH0üîTÆè¶Úº‰ª×lV, ÇôK,íÀ ¶§®…LÔ)|å×¥ê©ú›†´1 Wý˜šL­h‘jZ¹6§›§Z¡²P•óZ L‹¤ý”ô•_é‹$ÞÊžj¹$ª§5_Ø/DA¤Z½<ÅBÕ•—0Ïþć.yhe ¼ }¶sUq®n¤ÎNl»’iŸav3]–ê=“dRJœ+G[GÕ1k‰ª]‡zè¡ÿH¿x¶hÏÎ IEND®B`‚ pix[270]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment329ÒD~ÆIDATH‰íÓ1 à×0°ÉÚ+8:9M<†G‘Þ„Æ àF"á‰cÿ78t‚/?ü@,Œ‰öT#i‚fÒ™¬ ‰ ß¶5­Z‡ÿÔ$²ª•tlê‘æ“E†šý{a”Š“ã'ÖhyfF OžÐI39¨¤kká ô êÙ@½+.*¯Š2‹šD ^-X'§gQC1P/’†ãWQG‘tm%¤&’Cº¾INn•¶ê¶µ]UU¿ø»þý®]»vmS•÷z¤[‘á&Y‹IEND®B`‚ pix[271]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment333éœ!ÆIDATH‰íÓ1 à×0°ÉÚ+8:9M<†G‘Þ„Æ àF"á‰cÿ78t‚/?ü@,Œ‰öT#i‚fÒ™¬ ‰ ß¶5­Z‡ÿÔ$²ª•tlê‘æ“E†šý{a”Š“ã'ÖhyfF OžÐI39¨¤kká ô êÙ@½+.*¯Š2‹šD ^-X'§gQC1P/’†ãWQG‘tm%¤&’Cº¾INn•¶ê¶µ]UU¿ø»þý®]»vmS•÷z¤[‘á&Y‹IEND®B`‚ pix[272]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment330pÍ›ÜIDATH‰íÒ1ŠÃ0Ð *Tê ºÈ‚®µE )|¬ð|„•+—1l3Å 9igLš4ÁSÁƒFú„êè½Ê³­t-¡’«U­ä…œ*«z¦`hëò†¦6ÔÔ6°¦ò£ëz6egª¤"¶rœ6t “Øs‹ÿ7õ¹‡©#Æ D+Ì=ÆŒumMoà NFç´œ Í«^|ª¤ŒNWN™Ó¹’ÎŽ–¦á,¦ì¦Æ³”cÿÈäAUù ÏÐê}G´¸?ªÀÐn¿ºnÔ®»îºë‡èCžô aR%IEND®B`‚ pix[273]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment334wx ‚ÜIDATH‰íÒ1ŠÃ0Ð *Tê ºÈ‚®µE )|¬ð|„•+—1l3Å 9igLš4ÁSÁƒFú„êè½Ê³­t-¡’«U­ä…œ*«z¦`hëò†¦6ÔÔ6°¦ò£ëz6egª¤"¶rœ6t “Øs‹ÿ7õ¹‡©#Æ D+Ì=ÆŒumMoà NFç´œ Í«^|ª¤ŒNWN™Ó¹’ÎŽ–¦á,¦ì¦Æ³”cÿÈäAUù ÏÐê}G´¸?ªÀÐn¿ºnÔ®»îºë‡èCžô aR%IEND®B`‚ pix[274]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment331ý éIDATH‰íÓ=ND!ð!$ÒIkµï vvr%K‹M˜ÎcÉÆƒønà+§ ̲˜XÍŸfÝb“7¡û…0_N‚韵y-/PÉ“MmD\£eªi%Wš«¯àÝAkè)ÕgTQlOQ7»—ZÞ¢®ö]• k?ÉÖ­÷9h±³ÒÕ){e»^-4¦l=u%¨_œ?XÉÛúý¨:”‘–®¨,å˜8¯@#¿'–£­[dI$¯Hi›ëÁɼû@BN@¯y[7Û«vÙ«¥˜þ㢥ÿ& ¿öê/vÝõ>õ{ªŸSMSÍWdµëõ è ¿Ü !6IEND®B`‚ pix[275]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment3359éIDATH‰íÓ=ND!ð!$ÒIkµï vvr%K‹M˜ÎcÉÆƒønà+§ ̲˜XÍŸfÝb“7¡û…0_N‚韵y-/PÉ“MmD\£eªi%Wš«¯àÝAkè)ÕgTQlOQ7»—ZÞ¢®ö]• k?ÉÖ­÷9h±³ÒÕ){e»^-4¦l=u%¨_œ?XÉÛúý¨:”‘–®¨,å˜8¯@#¿'–£­[dI$¯Hi›ëÁɼû@BN@¯y[7Û«vÙ«¥˜þ㢥ÿ& ¿öê/vÝõ>õ{ªŸSMSÍWdµëõ è ¿Ü !6IEND®B`‚ pix[276]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment332ž¬·òIDATH‰íÑ1nÃ0 P ­¾@_$p®ÕÁˆ”É–\ @Rµ=HUäºh0ÄJÎʯ%«9hy"A’4ÊÓ£z#‡Ô“óX‰Ñ^þê’o餷h D­uUSPm e+Ï,_ ï;K5³äN^&–¹“Љ%Y¹]c ¨!”UÈÐÏè~Ãa ô;ºV‰{ CSwƒÕõ\4Ž@ǡ㨠»«)ÆAŸ*‘/ú²Ñ÷œˆFöåí΋všÎD™ý4“É|D*Þ ÑÏõúçk~³ªÊ2ì ö|¯G47UÚúÓT­V]uÕUýbf½PŽ=À{IEND®B`‚ pix[277]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment336™vh®òIDATH‰íÑ1nÃ0 P ­¾@_$p®ÕÁˆ”É–\ @Rµ=HUäºh0ÄJÎʯ%«9hy"A’4ÊÓ£z#‡Ô“óX‰Ñ^þê’o餷h D­uUSPm e+Ï,_ ï;K5³äN^&–¹“Љ%Y¹]c ¨!”UÈÐÏè~Ãa ô;ºV‰{ CSwƒÕõ\4Ž@ǡ㨠»«)ÆAŸ*‘/ú²Ñ÷œˆFöåí΋všÎD™ý4“É|D*Þ ÑÏõúçk~³ªÊ2ì ö|¯G47UÚúÓT­V]uÕUýbf½PŽ=À{IEND®B`‚ pix[278]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment333éœ!æIDATH‰íÓ± 1 P)R†²R†a DŒ„M™€ÂH4WD1ÎAi_ »(Už¬\¾}À3 áÇ:îæ”äÐóÓP9ÄaÚšd†/µõ=¯NÕwao«kt]õÂY¿×‹S/Ž×ÑÔêø­¯âqàªõÞLÎT‚ŒC•0u¥Œ=®¬ê½¤#6‡ºrI'±3cdk6d]¥é÷ÿþ¢‹.ºè¿ôóµÃ2, IEND®B`‚ pix[279]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment337îqX8æIDATH‰íÓ± 1 P)R†²R†a DŒ„M™€ÂH4WD1ÎAi_ »(Už¬\¾}À3 áÇ:îæ”äÐóÓP9ÄaÚšd†/µõ=¯NÕwao«kt]õÂY¿×‹S/Ž×ÑÔêø­¯âqàªõÞLÎT‚ŒC•0u¥Œ=®¬ê½¤#6‡ºrI'±3cdk6d]¥é÷ÿþ¢‹.ºè¿ôóµÃ2, IEND®B`‚ pix[280]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment334wx ‚øIDATH‰íÔ±m1 Ð/¨Pg¥LaX‹¾•2Ox¥Û +È*U’)ÃvE²TwíÃÔ'% ãËøsmÑR –fSai‡U·‰½¿ÕYZ½©RSo-ªÞ¦J-³vø†¨iƒ¯¤hêI9SAØ•s.SãK¿EÍÂzjÊ'©-®û+–|‘µ}ņUS±ó¿WiÀ¬[è\WSÎY×™¤®®ÂåUÑàÚA×~²tt·iuM- Ê•UΊèâÈÖ³¢GGVm¾Žàʇ¶9žf˜ò 늠iC(sLIÔÄ«5°ÊJkÃ2~ü—p×]wý½Þ·¥ëŸ±×‘IEND®B`‚ pix[281]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment338~ÎE©øIDATH‰íÔ±m1 Ð/¨Pg¥LaX‹¾•2Ox¥Û +È*U’)ÃvE²TwíÃÔ'% ãËøsmÑR –fSai‡U·‰½¿ÕYZ½©RSo-ªÞ¦J-³vø†¨iƒ¯¤hêI9SAØ•s.SãK¿EÍÂzjÊ'©-®û+–|‘µ}ņUS±ó¿WiÀ¬[è\WSÎY×™¤®®ÂåUÑàÚA×~²tt·iuM- Ê•UΊèâÈÖ³¢GGVm¾Žàʇ¶9žf˜ò 늠iC(sLIÔÄ«5°ÊJkÃ2~ü—p×]wý½Þ·¥ëŸ±×‘IEND®B`‚ pix[282]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment3359èIDATH‰íÓ1nÃ0 @ 4¦?ðGŠðg¶2åYÕSøƒht‡,å¬$&KÚ04ð,™”(à©ðkåPé#Ò ÁÒW Ž¦ÖGtTßók CÙ×¥&'+_2‚]‘æÜŠÌŽj¥kN®ö)%Wiì¤p¶µï›ÌÅ9ýŠèiQ%ä“©œ+ Mž&ºM¦nºÿ×PK›VôtΪv_©rªØÝ¹cñnÿ—a½¯y4Ùõ ”ÑZžÒ¾¦«(-Kwô&²N²ú*ûÑíþzåîÿI}„º½1÷¬=ôßê=ÔïPFü9þŸIÂ6‹ô¡IEND®B`‚ pix[283]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment339 Éu?èIDATH‰íÓ1nÃ0 @ 4¦?ðGŠðg¶2åYÕSøƒht‡,å¬$&KÚ04ð,™”(à©ðkåPé#Ò ÁÒW Ž¦ÖGtTßók CÙ×¥&'+_2‚]‘æÜŠÌŽj¥kN®ö)%Wiì¤p¶µï›ÌÅ9ýŠèiQ%ä“©œ+ Mž&ºM¦nºÿ×PK›VôtΪv_©rªØÝ¹cñnÿ—a½¯y4Ùõ ”ÑZžÒ¾¦«(-Kwô&²N²ú*ûÑíþzåîÿI}„º½1÷¬=ôßê=ÔïPFü9þŸIÂ6‹ô¡IEND®B`‚ pix[284]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment336™vh®ùIDATH‰íÓQnà PGLåo\`Wتp­~D!»YoRO;Àœ?&exÝ_ìJ“ª~~B`æÄƘÀ’ÿhUö5ý–y)T­B¯jiJ†ÒU_œ­ÑÖ¸êÑÒ„lÍ7!Ó[¶t&&Ì4è12Ÿs9êo%ÄS*u¢ÄYWy–J–C(Oú­–g¿ôžF=£úêkï(wºör¦C~×oU¯:ênè\5ݤԪP=²Ä¶)W=¾mþ±už5Dž:þÔôpÆëøKSi¹5¬ÎI´†ÕíBÙþG™?dªþmîô÷wÝu×] ¿ÔúÇ™bÇôŸIEND®B`‚ pix[285]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment340?T[\ùIDATH‰íÓQnà PGLåo\`Wتp­~D!»YoRO;Àœ?&exÝ_ìJ“ª~~B`æÄƘÀ’ÿhUö5ý–y)T­B¯jiJ†ÒU_œ­ÑÖ¸êÑÒ„lÍ7!Ó[¶t&&Ì4è12Ÿs9êo%ÄS*u¢ÄYWy–J–C(Oú­–g¿ôžF=£úêkï(wºör¦C~×oU¯:ênè\5ݤԪP=²Ä¶)W=¾mþ±už5Dž:þÔôpÆëøKSi¹5¬ÎI´†ÕíBÙþG™?dªþmîô÷wÝu×] ¿ÔúÇ™bÇôŸIEND®B`‚ pix[286]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment337îqX8IDATH‰íÔ±NÄ0 `W²á@]Þì’Ó Œ¼RFÞ#V†H,¢˜\zˆ؆¥¿*5ê×DVäØH‚ß´ŽQ5õ*oþJ[ü1% òøaT%húÒoiCC5}n™D­«hz.;kÚלøHQÖ™O|*A¬Ê9~~`'+ß óY½¨O]±iš'®ºö  Ü"+Ü‚{Ô”ÂK¾ÅEíûð®+—Ày‡EÔæ“gÚ9Y+®*¯¼¸œ:·ëÞ•½©a&])ÌIV€ÃL@®`mKq'ÛPβrïºþ¢©Ÿär_ä×þʲ^B¶ŠÝþ™lj2©òù½¤9K+šêÿpnºé¦ÿ¨ye¬¬óßNIEND®B`‚ pix[287]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment341HSkÊIDATH‰íÔ±NÄ0 `W²á@]Þì’Ó Œ¼RFÞ#V†H,¢˜\zˆ؆¥¿*5ê×DVäØH‚ß´ŽQ5õ*oþJ[ü1% òøaT%húÒoiCC5}n™D­«hz.;kÚלøHQÖ™O|*A¬Ê9~~`'+ß óY½¨O]±iš'®ºö  Ü"+Ü‚{Ô”ÂK¾ÅEíûð®+—Ày‡EÔæ“gÚ9Y+®*¯¼¸œ:·ëÞ•½©a&])ÌIV€ÃL@®`mKq'ÛPβrïºþ¢©Ÿär_ä×þʲ^B¶ŠÝþ™lj2©òù½¤9K+šêÿpnºé¦ÿ¨ye¬¬óßNIEND®B`‚ pix[288]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment338~ÎE© IDATH‰íÓ»m1 ` g@¥R¦Óî´RÊF¤ 2‚W¹Q” Ø……"†9bS<À‡ÀMÔ~ôƒ`ãøsÅdiñ–¤jßyî±S•Àóhñ  h d(ÌïÑ ZÏÚo4ž4 ´ƒŸÏúu£ÉPzIíI´$-WS¥Pû0Tð†v˜h¬Mô0VAÔ×Qªã¢iÖ•´d5sv؆ŠÉ!M˜ôþÖèŸõÉ©0U€×Á\­©=€¾ '}“éR3/š‡äk.QU‚DmâšUmR†¦-à¢,OÊ«ª¾('S/çz~+™ZMýØ Ÿ¦ò¿>R¦¾o¸»%ÕªR¶M¥k||îÑoϡ՗]IEND®B`‚ pix[289]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment342ÑZ:p IDATH‰íÓ»m1 ` g@¥R¦Óî´RÊF¤ 2‚W¹Q” Ø……"†9bS<À‡ÀMÔ~ôƒ`ãøsÅdiñ–¤jßyî±S•Àóhñ  h d(ÌïÑ ZÏÚo4ž4 ´ƒŸÏúu£ÉPzIíI´$-WS¥Pû0Tð†v˜h¬Mô0VAÔ×Qªã¢iÖ•´d5sv؆ŠÉ!M˜ôþÖèŸõÉ©0U€×Á\­©=€¾ '}“éR3/š‡äk.QU‚DmâšUmR†¦-à¢,OÊ«ª¾('S/çz~+™ZMýØ Ÿ¦ò¿>R¦¾o¸»%ÕªR¶M¥k||îÑoϡ՗]IEND®B`‚ pix[290]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment339 Éu?ØIDATH‰íÓA 1 Ð/vgУô*Þ¤ãØÁ‹D¼@a6³ŒÜ&‹‚‹é¦¥4iiÀ‘ñ]͈ëuâ²ãêT}ŠÎ`êÕ .¦¦¦²hÖ•1ˆ&S“­²O9y¹ <–d¼Ëedz¡RÒMt0NF<å–žsêT nÕIÕ‰‚_õ®ÿœ*jVÅtv^Oû£¡‹#xxã%—¸ªÇÎx+ôX [å_Eg]¥$ÜK;¨J;žÖ•Õƒ¹­Ü¯¥©¦ò¦›nú‡zmêågÚ®ê#}hâÆJlžfyIEND®B`‚ pix[291]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment343¦] æØIDATH‰íÓA 1 Ð/vgУô*Þ¤ãØÁ‹D¼@a6³ŒÜ&‹‚‹é¦¥4iiÀ‘ñ]͈ëuâ²ãêT}ŠÎ`êÕ .¦¦¦²hÖ•1ˆ&S“­²O9y¹ <–d¼Ëedz¡RÒMt0NF<å–žsêT nÕIÕ‰‚_õ®ÿœ*jVÅtv^Oû£¡‹#xxã%—¸ªÇÎx+ôX [å_Eg]¥$ÜK;¨J;žÖ•Õƒ¹­Ü¯¥©¦ò¦›nú‡zmêågÚ®ê#}hâÆJlžfyIEND®B`‚ pix[292]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment340?T[\IDATH‰íÓ1J1à S¤Y6Í,-äå*ï–âŽXx â‚ÉRFŒ;NP±x3 ›‡¼bÉ–$ÿ ðáøøù 8Zù}bJºÇx]ÁqÆ ¨ê*ë‹+²GÓ&JX@;^Wÿ¥³®³©‘=æ+C¯Ì·†ÞͯÓIDATH‰íÔ½M1`¯Éî`ÝLK„Dç%!§‚+……€6néÀ¬yçÛÌŒ.A$çÈÒgùçyì§-áJWûOïäêÑ]÷ŽP³¥&l„@ªö]/ct%¬®~P7gŽ»F]S§­|Ä õ9ëZx¨ð›ž†$Yõ‚{ºŒQµēƺnQf’Mß–IòÈJ?hŽbdUÒÚ™Ÿ5ÆÐˆ´šzˆ€ª(®¶âi嵨•E×¼Ö*ëºíúhhÍËÐVëJjš< ÔÆÌF’-ŒÃSH†f´QuÆý†7h¿n!¼ºzr†wW¿Tõz…~» UåŸôW»éMoúçz–}Éá$~âIEND®B`‚ pix[296]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment342ÑZ:pîIDATH‰íÔ±n1 à‚.Ku÷Ü‹ ãµ*%´¯OÂ1±fÌpŠq@ˆÛ*:TdŠôÅQÛ#âõº“5u2a-jD(gÊè%-@È3Jº&U'Ö4ªJ?ê^SǤ«7´ £C½u'kOßUÅXŠ}(êhrš‚]CcÅ®MM÷Z¯è!Z\–Uŷʾ*gÊ‹êâªÇ§¢ Xµø'RÖ °0º&KgYß9_µQÎÌUÇÚ)µQà§“ÖeÄ}Š ê‰,¥›F[Ÿñ®[z´´Èø'¿Ù[ÿ‘†_èëNõVY/½Ã„üö¶o‘IEND®B`‚ pix[297]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment346Ö7þiîIDATH‰íÔ±n1 à‚.Ku÷Ü‹ ãµ*%´¯OÂ1±fÌpŠq@ˆÛ*:TdŠôÅQÛ#âõº“5u2a-jD(gÊè%-@È3Jº&U'Ö4ªJ?ê^SǤ«7´ £C½u'kOßUÅXŠ}(êhrš‚]CcÅ®MM÷Z¯è!Z\–Uŷʾ*gÊ‹êâªÇ§¢ Xµø'RÖ °0º&KgYß9_µQÎÌUÇÚ)µQà§“ÖeÄ}Š ê‰,¥›F[Ÿñ®[z´´Èø'¿Ù[ÿ‘†_èëNõVY/½Ã„üö¶o‘IEND®B`‚ pix[298]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment343¦] æîIDATH‰íÓ1nÃ0 P4jÍÆ¡7ÐU|Œnrof#‘‘¡+GpÃ2Nºñ«ºZ£ ü_d5Ñ¡‡þ]¿ÌnŬÆ:³5¶s U(e¥S¨ò²wm¿h|ïL¼Ý5w•–] к«Å:šº¦X—Õô%·«-]ªŒ¹½ÆºËÈèÍúTFíÏêGã9ë9‰@5M«ë[œàCEcýÐtþú®iñÖ$y=®@‰\OXóLÃèDy¢a¤ìº6ÔÉâ'ãÆV'©où¬@¾v¹«R…¿[x ky>?Tíêf=µCý—~sy³L² Z]IEND®B`‚ pix[299]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment347¡0ÎÿîIDATH‰íÓ1nÃ0 P4jÍÆ¡7ÐU|Œnrof#‘‘¡+GpÃ2Nºñ«ºZ£ ü_d5Ñ¡‡þ]¿ÌnŬÆ:³5¶s U(e¥S¨ò²wm¿h|ïL¼Ý5w•–] к«Å:šº¦X—Õô%·«-]ªŒ¹½ÆºËÈèÍúTFíÏêGã9ë9‰@5M«ë[œàCEcýÐtþú®iñÖ$y=®@‰\OXóLÃèDy¢a¤ìº6ÔÉâ'ãÆV'©où¬@¾v¹«R…¿[x ky>?Tíêf=µCý—~sy³L² Z]IEND®B`‚ pix[300]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment34489ŸE IDATH‰íÔ±mÃ0Ð#T¸42=I¸JFÈ! %c„F aziX¼ð$ À»«’Nl(J÷?¨¬££¦Õh:÷‡üÒ¢î̓¦é¨ªSÕkuípÕ|rŠF =t¯µhh >€•´’vü£.ÀAP?ŸˆŠMCé½ê–'ž»_I ÓUSœ0'Fo«4­ÐÔI:ƒO²p‰žÜ•rÑöλi¶Y?óñ]V,¤Ò$±Ø«¬S±)›Q2é…O°ÅŽàâ3›>í0‘ïÆ¦‰o]5é±i: @Z–ÎsúÒ´%%ë ýU¢Á{»Û7^i ÌÍÿžó›ªøŸÊ®]wÝuÓ/`³L­¨¿IEND®B`‚ pix[301]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment3481Ón IDATH‰íÔ±mÃ0Ð#T¸42=I¸JFÈ! %c„F aziX¼ð$ À»«’Nl(J÷?¨¬££¦Õh:÷‡üÒ¢î̓¦é¨ªSÕkuípÕ|rŠF =t¯µhh >€•´’vü£.ÀAP?ŸˆŠMCé½ê–'ž»_I ÓUSœ0'Fo«4­ÐÔI:ƒO²p‰žÜ•rÑöλi¶Y?óñ]V,¤Ò$±Ø«¬S±)›Q2é…O°ÅŽàâ3›>í0‘ïÆ¦‰o]5é±i: @Z–ÎsúÒ´%%ë ýU¢Á{»Û7^i ÌÍÿžó›ªøŸÊ®]wÝuÓ/`³L­¨¿IEND®B`‚ pix[302]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment345O>¯ÓIDATH‰íÔ±NÃ0às-á­éÔ¯ÀÈD^«’Í›™©#¯‰!#‘X‚0¾žS54åZC=8V>Ywò0<]VMI#in”,’ƒª²v:"í‰8¨Ht7¯2¯PÝQ i'uUX5{ÕQ~ 5E­öj`W·–YÖšoÔ{ÂÊ]VfÂ)›–Š“ÂêÍ j"•Öš£™IðDŸ'{׊û «))W{µÝž´õ u»QÛclîi#ÚÔPÃ’6ùj¹ƒ¾LÔˆ’ûÒ·‰j’€êÀX)«}ÂÚP×>ŽúÔ×ðœåÖåºÞBíÉȇàf4’ÍÑûŠ[”¾¼ xo?èñ9z˜/ýWi‹º=C_Ïèêõó_vuÕ«þ¦î5ÿ¦sÀÐîØIEND®B`‚ pix[303]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment349FˆãøIDATH‰íÔ±NÃ0às-á­éÔ¯ÀÈD^«’Í›™©#¯‰!#‘X‚0¾žS54åZC=8V>Ywò0<]VMI#in”,’ƒª²v:"í‰8¨Ht7¯2¯PÝQ i'uUX5{ÕQ~ 5E­öj`W·–YÖšoÔ{ÂÊ]VfÂ)›–Š“ÂêÍ j"•Öš£™IðDŸ'{׊û «))W{µÝž´õ u»QÛclîi#ÚÔPÃ’6ùj¹ƒ¾LÔˆ’ûÒ·‰j’€êÀX)«}ÂÚP×>ŽúÔ×ðœåÖåºÞBíÉȇàf4’ÍÑûŠ[”¾¼ xo?èñ9z˜/ýWi‹º=C_Ïèêõó_vuÕ«þ¦î5ÿ¦sÀÐîØIEND®B`‚ pix[304]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment346Ö7þiðIDATH‰íÔ»m1 ` *®Ô…«d w”‘"kd·[@éà`Fw0Ü„T .ŒS¡æcAþz€V×›UöÐdjÔ¤µï– à H ›Ê€+;Z€†ºµÄþ¢a×b+­L—OW¿/bë²+¿Ù=kÐ+÷4ÐÔžÿÂTœ{Œ]gvs®»OOy:7{¢vÊïB¡MöD-}Ž5¶èi’ìé\óÄÉÓ>K(S¬®Äà(ìzO±k{¢rWçnlÑ»uT½Óß"ôÞѶW£åå¡¿Mõ:Ôï»V²ôΡ‡újú銸m‰øÓ·IEND®B`‚ pix[305]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment350&OjðIDATH‰íÔ»m1 ` *®Ô…«d w”‘"kd·[@éà`Fw0Ü„T .ŒS¡æcAþz€V×›UöÐdjÔ¤µï– à H ›Ê€+;Z€†ºµÄþ¢a×b+­L—OW¿/bë²+¿Ù=kÐ+÷4ÐÔžÿÂTœ{Œ]gvs®»OOy:7{¢vÊïB¡MöD-}Ž5¶èi’ìé\óÄÉÓ>K(S¬®Äà(ìzO±k{¢rWçnlÑ»uT½Óß"ôÞѶW£åå¡¿Mõ:Ôï»V²ôΡ‡újú銸m‰øÓ·IEND®B`‚ pix[306]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment347¡0ÎÿöIDATH‰íÔ1nÅ àßBjÆÜ éIJö¨ÞÞ3¹7É22DPë*U²ý–Œ±Ø>„ÙFs"ã\eÄ–<­Ô隤O7$K  ¤IöÚ†.–JRXJ®y²è¬êWוxRõ ÆùF›®’ôÛVùçO¾…Ý×`œ¼8º¿ -º¶í‰Þyu4˜ZgîJE}ÑòBùÕø ÑwàÙPˆ@Wt%_³®uh°ueSeÅí¯rê?–ª»s,ºr~ˆõª«ÓЬk®z=ÓS3ª½Ç.W×»ì‡Ñ¡(OÔ›HŘ*¿y'wšÍçOÂK/½ôTýsåŒà [¤IEND®B`‚ pix[307]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment351QHZ‹öIDATH‰íÔ1nÅ àßBjÆÜ éIJö¨ÞÞ3¹7É22DPë*U²ý–Œ±Ø>„ÙFs"ã\eÄ–<­Ô隤O7$K  ¤IöÚ†.–JRXJ®y²è¬êWוxRõ ÆùF›®’ôÛVùçO¾…Ý×`œ¼8º¿ -º¶í‰Þyu4˜ZgîJE}ÑòBùÕø ÑwàÙPˆ@Wt%_³®uh°ueSeÅí¯rê?–ª»s,ºr~ˆõª«ÓЬk®z=ÓS3ª½Ç.W×»ì‡Ñ¡(OÔ›HŘ*¿y'wšÍçOÂK/½ôTýsåŒà [¤IEND®B`‚ pix[308]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment3481Ón IDATH‰íÔ1J1à?<0¹)¼€v{à 6af^aí"öº`3`È8‹àL„Ç+,6í³³™œ„³èûH¿ìñ‡æA創¾•®bǬêbE$Lª&„ŠiEhEª·u.7–Æê¸´ƒª²ž³©ó ób*‹æîT=~ev'iH\aªLGnÃueH¢}»(Se@ÑÒ_,-¢—ve_éÂê¹Þ‰zKŸÈŠ6]ùS»èB>wuFjX(ä®&§¹5d GR3Ùp–5‰m@Ìi[õ»’º²íÂd©ä™Œ-“L®àfl¨É¿^ëÚn·G@=gz‘vÝ•ŸÿeW»ž¨_±dª íG/¬IEND®B`‚ pix[309]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment352ÈA 1 IDATH‰íÔ1J1à?<0¹)¼€v{à 6af^aí"öº`3`È8‹àL„Ç+,6í³³™œ„³èûH¿ìñ‡æA創¾•®bǬêbE$Lª&„ŠiEhEª·u.7–Æê¸´ƒª²ž³©ó ób*‹æîT=~ev'iH\aªLGnÃueH¢}»(Se@ÑÒ_,-¢—ve_éÂê¹Þ‰zKŸÈŠ6]ùS»èB>wuFjX(ä®&§¹5d GR3Ùp–5‰m@Ìi[õ»’º²íÂd©ä™Œ-“L®àfl¨É¿^ëÚn·G@=gz‘vÝ•ŸÿeW»ž¨_±dª íG/¬IEND®B`‚ pix[310]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment349Fˆãø×IDATH‰íÒ± Â0г\\é’&R² ‘Ž1X%À"–Xàè\˜—Ð áoDK®žt¶îÒÊé鷚힎Hj1Ö ¦t(j?k®iÈÔU4Q‹µK€¶Bеu ƒ¨ T½WÔÕôbz6õEÆéÛeµF T¨S HÃm¼Òª¬Ž{ÓrFiÇ’¡>„k¨éèªJ·-Ö5_?"%ŸËÛ˜•|‚°ê¬ŒÕ2 (_ëd%ýhœÚÎånø©<¯)ŸúþÆ¢‹.ºèõ êf¤ó;#x±IEND®B`‚ pix[311]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment353¿F;§×IDATH‰íÒ± Â0г\\é’&R² ‘Ž1X%À"–Xàè\˜—Ð áoDK®žt¶îÒÊé鷚힎Hj1Ö ¦t(j?k®iÈÔU4Q‹µK€¶Bеu ƒ¨ T½WÔÕôbz6õEÆéÛeµF T¨S HÃm¼Òª¬Ž{ÓrFiÇ’¡>„k¨éèªJ·-Ö5_?"%ŸËÛ˜•|‚°ê¬ŒÕ2 (_ëd%ýhœÚÎånø©<¯)ŸúþÆ¢‹.ºèõ êf¤ó;#x±IEND®B`‚ pix[312]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment350&Oj IDATH‰íÓKj1 P ¼«à¤ÄWê®ÝyB–@/âÝ,ëîT0V왕¼+-4«yŒ¬Ï ð &ø9­£_±§|C@‡®2D\3”S$H$ks 3%K¤@.ñ+FxJ͸êr!ÏQÚ ™¹ª ¥B¼×|[.qÐo¢™[ ?PTµ÷Õ)úú¶9þ¡ûù™&[«ö¶ v•ÁÖå ]m Ç‘meÈýªfHe—d[_ ±sW)¨¾Ù*-N~š]Õ“’­3­ôé(® =‘GA™­4Ôˆlžhèl€„c 59š5œ¾Ò âU¡7sƒx½¡å«ÑÖï—áɺ馛nú¿õ NÚÍdn‡`IEND®B`‚ pix[315]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment355V%ž’ýIDATH‰íÓ1nÃ0 @ <êø…þ@_É3ºIE†>£_±§|C@‡®2D\3”S$H$ks 3%K¤@.ñ+FxJ͸êr!ÏQÚ ™¹ª ¥B¼×|[.qÐo¢™[ ?PTµ÷Õ)úú¶9þ¡ûù™&[«ö¶ v•ÁÖå ]m Ç‘meÈýªfHe—d[_ ±sW)¨¾Ù*-N~š]Õ“’­3­ôé(® =‘GA™­4Ôˆlžhèl€„c 59š5œ¾Ò âU¡7sƒx½¡å«ÑÖï—áɺ馛nú¿õ NÚÍdn‡`IEND®B`‚ pix[316]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment352ÈA 1÷IDATH‰íÒ1nÃ0 P:ª7`n«ô³IFÖÊ€‡\ƒB†¬êÆA0+»È€T;e2' (~‚>T|¸%ÐNýO©£¤€¶~QZ ˜:ñx75mZ;:¨¯‘CkÛSÍë§ì®FÖkÓƒ­ç¼é§­—Yç䪎뗅m³*Ž.'@O[|ÂÌhë±WOÈ5äb«æ®Žª 6}zùû®o«Ú)\*Î5ÜøÍÔs MSÁQÂÆf'X†‚éØU@Oá@¾*mKkwkFQ‹»uÜ^u´ IÚ$Šo¥íä¥ð[B=µj×]wÝõ¥úóÄÈ ™Q…IEND®B`‚ pix[317]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment356Ï,Ï(÷IDATH‰íÒ1nÃ0 P:ª7`n«ô³IFÖÊ€‡\ƒB†¬êÆA0+»È€T;e2' (~‚>T|¸%ÐNýO©£¤€¶~QZ ˜:ñx75mZ;:¨¯‘CkÛSÍë§ì®FÖkÓƒ­ç¼é§­—Yç䪎뗅m³*Ž.'@O[|ÂÌhë±WOÈ5äb«æ®Žª 6}zùû®o«Ú)\*Î5ÜøÍÔs MSÁQÂÆf'X†‚éØU@Oá@¾*mKkwkFQ‹»uÜ^u´ IÚ$Šo¥íä¥ð[B=µj×]wÝõ¥úóÄÈ ™Q…IEND®B`‚ pix[318]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment353¿F;§ôIDATH‰íÔ;nÃ0 àßРQGÐEŠèf‘ s%m¹·ŒÕ YÊh7RC‡.±¡í# >dƒ'OÁ¿jAž+-̯l*ø‰¤*˜&ºpƒþæ¡NT¯ àæYÒUuà5²¤«z«|gnÖ¬ocèkª2¨ZG€ªÒ‹”]ŒšÔ˜†Li¤O’(×–WŠª~QÞZªº>¸§;¥­«J¢Ÿ”n=¨{âqt Sõt(©ÚE#]¢®äÚ%Ї­×CÕŽ:põÐT}»—€¢ÎyÇ2®%Œ-76cƒ{8VolTæÍûÛØôëû3ìy¦óÜSO=õ½õ ÿɸ ñ@œIEND®B`‚ pix[319]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment357¸+ÿ¾ôIDATH‰íÔ;nÃ0 àßРQGÐEŠèf‘ s%m¹·ŒÕ YÊh7RC‡.±¡í# >dƒ'OÁ¿jAž+-̯l*ø‰¤*˜&ºpƒþæ¡NT¯ àæYÒUuà5²¤«z«|gnÖ¬ocèkª2¨ZG€ªÒ‹”]ŒšÔ˜†Li¤O’(×–WŠª~QÞZªº>¸§;¥­«J¢Ÿ”n=¨{âqt Sõt(©ÚE#]¢®äÚ%Ї­×CÕŽ:põÐT}»—€¢ÎyÇ2®%Œ-76cƒ{8VolTæÍûÛØôëû3ìy¦óÜSO=õ½õ ÿɸ ñ@œIEND®B`‚ pix[320]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment354!"®"IDATH‰íÔ±mD! P# Ò‘ Ø$Œ†ÿ!«üQ~6@º"Dr †»kr¶›‹®ˆBó‹÷m,€ÓЂ¿¤ÁRr–6SSwo)DYßÏZdÅùíÒ¶SWî¾¶ýR2S¸è釮E×¢>nB“¹ªò¼¦KÅY!4ðÄ™AžÑUåN.¤ÔSAª¹Æ½Èš¸5YÔ§DIUz>ë.êh¼o¨YуիºK‘»áTgiØ(8µæ„7-ös`ØtYÕöÊÓÁ–ä)ðìzÖ[œê‘ P”õ𼩣°É±Îµ×A¾¿\cRN]‡™U;±sFåÛÝ!v”š±&˜æ³P‹¬Å?ˆë¯èôXÚïлªú×?£o¦f]¿œÒ«´FIEND®B`‚ pix[321]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment358(”â/"IDATH‰íÔ±mD! P# Ò‘ Ø$Œ†ÿ!«üQ~6@º"Dr †»kr¶›‹®ˆBó‹÷m,€ÓЂ¿¤ÁRr–6SSwo)DYßÏZdÅùíÒ¶SWî¾¶ýR2S¸è釮E×¢>nB“¹ªò¼¦KÅY!4ðÄ™AžÑUåN.¤ÔSAª¹Æ½Èš¸5YÔ§DIUz>ë.êh¼o¨YуիºK‘»áTgiØ(8µæ„7-ös`ØtYÕöÊÓÁ–ä)ðìzÖ[œê‘ P”õ𼩣°É±Îµ×A¾¿\cRN]‡™U;±sFåÛÝ!v”š±&˜æ³P‹¬Å?ˆë¯èôXÚïлªú×?£o¦f]¿œÒ«´FIEND®B`‚ pix[322]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment355V%ž’÷IDATH‰íÓAjÃ0Ð^h©#è(¾VWA]æ=Jzå ݪúwœngˆKè"Æ`ÐÃ£Ñø›0¸=T³ÇÇ¡éJ„äV"6uªï†®äÂPcß*¨:á€þbiý^¡Qž¯úy{@°µyÐx3tyÀëZäPR]UY¤ó@Ù¬–&ö…{Ôõ”ù`ë%3 ·ù]OÎH[­\ õy‰e®8jZ§«žõLÞPG‹lumDKH,­*qEÖ§!º}£¬ÏyK£¯èºþ¾XŒ9'‡6o÷ƒÿî}Êÿ²«ûtijVþÚÓÕSŸúWú¹CïÝ÷¦½Õí%-îIEND®B`‚ pix[323]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment359_“Ò¹÷IDATH‰íÓAjÃ0Ð^h©#è(¾VWA]æ=Jzå ݪúwœngˆKè"Æ`ÐÃ£Ñø›0¸=T³ÇÇ¡éJ„äV"6uªï†®äÂPcß*¨:á€þbiý^¡Qž¯úy{@°µyÐx3tyÀëZäPR]UY¤ó@Ù¬–&ö…{Ôõ”ù`ë%3 ·ù]OÎH[­\ õy‰e®8jZ§«žõLÞPG‹lumDKH,­*qEÖ§!º}£¬ÏyK£¯èºþ¾XŒ9'‡6o÷ƒÿî}Êÿ²«ûtijVþÚÓÕSŸúWú¹CïÝ÷¦½Õí%-îIEND®B`‚ pix[324]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment356Ï,Ï( IDATH‰íÔ;NÄ0àßÉÝæ+\ÒrÀ7[¥à\Å·`}B¤(Ãx „ä#­ÑÄrªÏ¯{ê´„‹è»¬K¤ò@³•5ƒ²¡"ìQ•¿dxL¬–Rö5EWGfd5”†ž>«²²­ú¤ì;Â³Ž™#úhõ >ÝÒ˜"Ñg«+3¢¸ò*LŠÎˆ¿hZžg“Ã¨ä™˜Š·J®¨„תNQOåæ< ÙQÙÙ©}X¬«ÉW> pí°×•Û}Wmã];à`á= ^„¨õMžzµ>uîÊ –Š«Õ$*·Å“ªïú4·ý¨îµ=Ô¥þ›nºéKWÿtª?Òãùs¿w ¬2*z/€IEND®B`‚ pix[325]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment360 b9Þ IDATH‰íÔ;NÄ0àßÉÝæ+\ÒrÀ7[¥à\Å·`}B¤(Ãx „ä#­ÑÄrªÏ¯{ê´„‹è»¬K¤ò@³•5ƒ²¡"ìQ•¿dxL¬–Rö5EWGfd5”†ž>«²²­ú¤ì;Â³Ž™#úhõ >ÝÒ˜"Ñg«+3¢¸ò*LŠÎˆ¿hZžg“Ã¨ä™˜Š·J®¨„תNQOåæ< ÙQÙÙ©}X¬«ÉW> pí°×•Û}Wmã];à`á= ^„¨õMžzµ>uîÊ –Š«Õ$*·Å“ªïú4·ý¨îµ=Ô¥þ›nºéKWÿtª?Òãùs¿w ¬2*z/€IEND®B`‚ pix[326]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment357¸+ÿ¾IDATH‰íÔ1ND!`‚’ ¹†…‘‹™ð^,<–˜-lÌ^aǘØJb³&„Œâ&ÌL§Õ£ ù’a?£PX‹úW­QÒl0_FN“BP¬.]±ZUS`x5½>«®i¤Õ x\!zfqïÑfZo’Þ܇ê}õøÔÕ“ “­îȨƤYýº‡I3¯×|Åé3Ä]WGê Däu÷­dåjºž3Z „{¸˜õз£IÁÃõ|“?-´¶l´âvRº讚ê*FuOcRãõË)·Ô--xŒ.¶çù h}lÙ¦#Ï%ÎçJš†Öñá÷½ÏºŠj$-'ú1·l%MNšWÉK ÌTkÓM7ýsý!Åîn};^IEND®B`‚ pix[327]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment361ze HIDATH‰íÔ1ND!`‚’ ¹†…‘‹™ð^,<–˜-lÌ^aǘØJb³&„Œâ&ÌL§Õ£ ù’a?£PX‹úW­QÒl0_FN“BP¬.]±ZUS`x5½>«®i¤Õ x\!zfqïÑfZo’Þ܇ê}õøÔÕ“ “­îȨƤYýº‡I3¯×|Åé3Ä]WGê Däu÷­dåjºž3Z „{¸˜õз£IÁÃõ|“?-´¶l´âvRº讚ê*FuOcRãõË)·Ô--xŒ.¶çù h}lÙ¦#Ï%ÎçJš†Öñá÷½ÏºŠj$-'ú1·l%MNšWÉK ÌTkÓM7ýsý!Åîn};^IEND®B`‚ pix[328]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment358(”â/IDATH‰íÔ½mÄ0 ` RmŠ Z! ²B²E ã¨Ñx›(È*UVèûIp6Éî:»`† >?ºq%x¼¶`iö–&SÁÜY:ޟ΃¥ÍYZ…Cýk±5XšY³¢-æÈ7QÔ >cŸ7\´°~D~GÔ ž TXÏ|Ó@àË4* \>®Ó¼)ғ˨kt¤j' “¬Ÿ–öS§ÎºnÀU.ºéÇEgžM§CRvæ„-}¾×ù~çÃY£rªÉS((5·¨6ï¢j߬GUék¤i¤wùÑ›+“#/wƒ‹Q.¿jê9ò"·Ž•£.Jc¹®3`…(jáç€ PÔ¶¬¸ý9\³ú9¯'E•k×]w}¸þ7ñ·Z¡Ñ½IEND®B`‚ pix[329]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment362ãlXòIDATH‰íÔ½mÄ0 ` RmŠ Z! ²B²E ã¨Ñx›(È*UVèûIp6Éî:»`† >?ºq%x¼¶`iö–&SÁÜY:ޟ΃¥ÍYZ…Cýk±5XšY³¢-æÈ7QÔ >cŸ7\´°~D~GÔ ž TXÏ|Ó@àË4* \>®Ó¼)ғ˨kt¤j' “¬Ÿ–öS§ÎºnÀU.ºéÇEgžM§CRvæ„-}¾×ù~çÃY£rªÉS((5·¨6ï¢j߬GUék¤i¤wùÑ›+“#/wƒ‹Q.¿jê9ò"·Ž•£.Jc¹®3`…(jáç€ PÔ¶¬¸ý9\³ú9¯'E•k×]w}¸þ7ñ·Z¡Ñ½IEND®B`‚ pix[330]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment359_“Ò¹éIDATH‰íÒAjC!à .=‚=Iç*9IÆÒEr‹ô(B.â\ µcM….ü-”.²x"¸øtfŸúbEúw-²Rú»*­úV·ÒVšy¥i­Û!s}ÅZÒ·Î*G’7¬´©‡jG}‹´Ó3R£ãB6PMøÖª-œ€FV[¡žE]ã´õ-½TwSP9TsÓùÌ ©¯¾Î•ó¦n®épÄ*9 síýshƒÚË Ò_T}a\¹ùwÆS5÷̧ÊPãRINE€êÉ5áä$‚™Œ÷¸¢L&×ó}Ï2ŒðôÊ@4Ùu×]Y¿™·ÊS"v2¡IEND®B`‚ pix[331]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment363”khdéIDATH‰íÒAjC!à .=‚=Iç*9IÆÒEr‹ô(B.â\ µcM….ü-”.²x"¸øtfŸúbEúw-²Rú»*­úV·ÒVšy¥i­Û!s}ÅZÒ·Î*G’7¬´©‡jG}‹´Ó3R£ãB6PMøÖª-œ€FV[¡žE]ã´õ-½TwSP9TsÓùÌ ©¯¾Î•ó¦n®épÄ*9 síýshƒÚË Ò_T}a\¹ùwÆS5÷̧ÊPãRINE€êÉ5áä$‚™Œ÷¸¢L&×ó}Ï2ŒðôÊ@4Ùu×]Y¿™·ÊS"v2¡IEND®B`‚ pix[332]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment360 b9ÞIDATH‰íÓ½J1à‘Sæò >€É8ÈŠÅ•>’ [\é#8‡…m¶ ³.îæn'S7Åù˜0“ÈLôpqŠÓ 9E¶Ö² †UMTS‹FVÕÔªšSoÚšô¤o´P¾4vC+‚²ùö@}4%7´…ÍÌ«Jk[ªñN (h}06‹ÁÓ:–ëÍbh-árw¢‡J?6ê*}žô¥Ö㪩›µšh¬õÕ•zOÏoÕjZï9M;9)zÞ8ë9ž¨cõ@ëç¤]ÞÓúå1‹,7¿åW1Ém2¶Õï”oh i„̓žUƒ—ÓƒNÇÆaICù0ï¤Æá|¹Öf\õªÐ/V‘U{1uÿò¬&ý„PÞå¤ç{IEND®B`‚ pix[333]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment364 ýÇIDATH‰íÓ½J1à‘Sæò >€É8ÈŠÅ•>’ [\é#8‡…m¶ ³.îæn'S7Åù˜0“ÈLôpqŠÓ 9E¶Ö² †UMTS‹FVÕÔªšSoÚšô¤o´P¾4vC+‚²ùö@}4%7´…ÍÌ«Jk[ªñN (h}06‹ÁÓ:–ëÍbh-árw¢‡J?6ê*}žô¥Ö㪩›µšh¬õÕ•zOÏoÕjZï9M;9)zÞ8ë9ž¨cõ@ëç¤]ÞÓúå1‹,7¿åW1Ém2¶Õï”oh i„̓žUƒ—ÓƒNÇÆaICù0ï¤Æá|¹Öf\õªÐ/V‘U{1uÿò¬&ý„PÞå¤ç{IEND®B`‚ pix[334]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment361ze H IDATH‰íÒKnÄ `G,Xæå"Õp±ªDÊbz,æ½Bå^"•âšQgÔª¶»èC] ˆøpœÈ ü¸.ÉR°´›Z'ë^ô––`j´4'SIÕÃtå­•” ±¶5u‚¢äžxVt"p]UÇ/²Ê÷º}‡’`’k^}w¨ê#k|¾¨Õw_c E]÷í„’âdi¡-jzÏZ•ªŽ…uFuÃkQzE'ÍÊZÃ6r)ê +ÉÊí õ¿ÒhêmдÄ=ÞÍò5Èiý¤/o+'Šäv¤÷ÚÏœ™ @ÖÅrb?æê¢wkîZ®Fe–YUG²”þPŸM¿SÕU¯úôìøÃˆâM©IEND®B`‚ pix[335]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment365}ÍQ IDATH‰íÒKnÄ `G,Xæå"Õp±ªDÊbz,æ½Bå^"•âšQgÔª¶»èC] ˆøpœÈ ü¸.ÉR°´›Z'ë^ô––`j´4'SIÕÃtå­•” ±¶5u‚¢äžxVt"p]UÇ/²Ê÷º}‡’`’k^}w¨ê#k|¾¨Õw_c E]÷í„’âdi¡-jzÏZ•ªŽ…uFuÃkQzE'ÍÊZÃ6r)ê +ÉÊí õ¿ÒhêmдÄ=ÞÍò5Èiý¤/o+'Šäv¤÷ÚÏœ™ @ÖÅrb?æê¢wkîZ®Fe–YUG²”þPŸM¿SÕU¯úôìøÃˆâM©IEND®B`‚ pix[336]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment362ãlXò IDATH‰íÔ±J1à‘E¶œ{1¯`aŸW²ÔÆìržÖú–9¶°Ír…#„ü&ÇÂfR(ZÈM>H&3„F ôëj[¹¥¡¨Ót6-ÐÒ«¼“¦©+™iYRÖÕl䋊ý¾†† MÛ·‹ qpÀë¶ÔE±ÊG]w¶¥·FSOÎi ï&Ü)7ßÃcÇú‚MŠ®kѨ(yñAÑÙµt°Y%(JœõCÑH}ÖUꚸÑ®÷R¯ÐÖî€ý¢è{ÑéMQ.`Z亪sQ^*cम°'Em/ÏfÖô†ãNWâHVSOä ¦ª,FhšÎV×süD+þø¢ýú º…Øê2ô§IEND®B`‚ pix[337]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment366äœë IDATH‰íÔ±J1à‘E¶œ{1¯`aŸW²ÔÆìržÖú–9¶°Ír…#„ü&ÇÂfR(ZÈM>H&3„F ôëj[¹¥¡¨Ót6-ÐÒ«¼“¦©+™iYRÖÕl䋊ý¾†† MÛ·‹ qpÀë¶ÔE±ÊG]w¶¥·FSOÎi ï&Ü)7ßÃcÇú‚MŠ®kѨ(yñAÑÙµt°Y%(JœõCÑH}ÖUꚸÑ®÷R¯ÐÖî€ý¢è{ÑéMQ.`Z亪sQ^*cम°'Em/ÏfÖô†ãNWâHVSOä ¦ª,FhšÎV×süD+þø¢ýú º…Øê2ô§IEND®B`‚ pix[338]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment363”khdIDATH‰íÔ1n! P#"¹t›"Z.‰kä0«h‹)s¥‰rŽ€”"Ö3µíf“lŠÐ>Æ|¦±2üº~šš“¥ mÎÚ[ɺ·FKK²ô}Zz¹AW]³›x¨¬ T~VCUp¢p|TÔ÷Úø—Ä“ií¾´åEaíX— ëojR”7³FT´Sc… kÃF-‚—µúCånÌÍ'C’µ¼ìUmQÔòÈJEÖ¯úÄå™uÚ*ß;‚¥ÊÙÔË’²¡gM1/~S•Ó®Ÿ@ÔÎý߃'÷™S7‡šgÎ*Ní3í“Èšf<“î0'ÿõûoП«ê~:þdUš^®kºÏ¸Ìä IEND®B`‚ pix[339]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment367“¬}IDATH‰íÔ1n! P#"¹t›"Z.‰kä0«h‹)s¥‰rŽ€”"Ö3µíf“lŠÐ>Æ|¦±2üº~šš“¥ mÎÚ[ɺ·FKK²ô}Zz¹AW]³›x¨¬ T~VCUp¢p|TÔ÷Úø—Ä“ií¾´åEaíX— ëojR”7³FT´Sc… kÃF-‚—µúCånÌÍ'C’µ¼ìUmQÔòÈJEÖ¯úÄå™uÚ*ß;‚¥ÊÙÔË’²¡gM1/~S•Ó®Ÿ@ÔÎý߃'÷™S7‡šgÎ*Ní3í“Èšf<“î0'ÿõûoП«ê~:þdUš^®kºÏ¸Ìä IEND®B`‚ pix[340]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment364 ýÇIDATH‰íÒ=N1à‰R¸Añ ²|ÊÜ 6Ú‚k â"KE‰KŽ'c#D‘yKƒ¨Ö¹ùöÇžy$++Ñ?¨ƒš£¬ì%cM¾?´Ñ$ô€´’´Ýª“º¿Åoõ½–I Òyèdk!ÉA2ÐLaÁºÐÔü·kß#Ö ;P%Ïd÷™)òAÕžÑëE88¾7ZÙUÇ_8®è̲3õmU•Sœ“éìšú»PõF§R ?A-Ú¨¡ÑÔ£çÓŒ´>:xªvvã¾àÌíWÝs´õ£º%@}îêølö¹‘êQËœ`£âòÁ-wv6(;mWÉ!òe”©‰¦: ©ö¸R0U+ï:Ç[iÿºè§­Íøä®¬M7Ýôô O”°²ÙÞøIEND®B`‚ pix[341]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment368¹±ìIDATH‰íÒ=N1à‰R¸Añ ²|ÊÜ 6Ú‚k â"KE‰KŽ'c#D‘yKƒ¨Ö¹ùöÇžy$++Ñ?¨ƒš£¬ì%cM¾?´Ñ$ô€´’´Ýª“º¿Åoõ½–I Òyèdk!ÉA2ÐLaÁºÐÔü·kß#Ö ;P%Ïd÷™)òAÕžÑëE88¾7ZÙUÇ_8®è̲3õmU•Sœ“éìšú»PõF§R ?A-Ú¨¡ÑÔ£çÓŒ´>:xªvvã¾àÌíWÝs´õ£º%@}îêølö¹‘êQËœ`£âòÁ-wv6(;mWÉ!òe”©‰¦: ©ö¸R0U+ï:Ç[iÿºè§­Íøä®¬M7Ýôô O”°²ÙÞøIEND®B`‚ pix[342]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment365}ÍQ&IDATH‰íÔ±J1 à”oý·¾‚ ô±ü·œÜøJ_£ààø\:”Ôܯ =’€ƒâ`8²|´¤iz0ŒXá÷õÁÒ¾XÚ‚¥õN×6²QUGgém°ô %H†Ž-ͶU+XšY DU‘³¬+àê8뺪Â9¦~Å$YŸ‡£%UYŸ6K/ž5ŒŠ¢’³´îZ´>³zîµ¢i×GYËMò=ŒMÑóU½²s‹ž×%ÏÆ‡.ªn´P”5\µ+êk¼gM¢Ò®][K¾°UsÌuérÍäÖÄÙ`MMî+@EÀþXšÒçì_‚¶¶‡Ïlý å^}Å¿þ„¾™úz°6éå óë&œ°ÚfíóÆuÖC°Î[Ì©+f¯^þÆ}[ß®j¼RLxœ˜IEND®B`‚ pix[343]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment369t¾z&IDATH‰íÔ±J1 à”oý·¾‚ ô±ü·œÜøJ_£ààø\:”Ôܯ =’€ƒâ`8²|´¤iz0ŒXá÷õÁÒ¾XÚ‚¥õN×6²QUGgém°ô %H†Ž-ͶU+XšY DU‘³¬+àê8뺪Â9¦~Å$YŸ‡£%UYŸ6K/ž5ŒŠ¢’³´îZ´>³zîµ¢i×GYËMò=ŒMÑóU½²s‹ž×%ÏÆ‡.ªn´P”5\µ+êk¼gM¢Ò®][K¾°UsÌuérÍäÖÄÙ`MMî+@EÀþXšÒçì_‚¶¶‡Ïlý å^}Å¿þ„¾™úz°6éå óë&œ°ÚfíóÆuÖC°Î[Ì©+f¯^þÆ}[ß®j¼RLxœ˜IEND®B`‚ pix[344]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment366äœë%IDATH‰íÔKnà àA,fɪp‘¨¾Jr‚¡WAÊ¢ÇG`WKE¸3Ž«¼†Y¤]ÚK>cÌ0)O„?ëQU£iUu´šÔ4{MSPUÆEªrɧž6*9K‹bõ¬ñwCê60¬Wú}§ ôæ6ˆá2úu­•^0iªj`«f{Šó;êÞ5õÕ•W”:A»ü8ë#²6G: Ô Ò:kììóhI}’ÂCš k–bIšÞH7Щùwnܸ<,CáF?õ¢N¤åÅe'~yÖíSZ=µ lQÖÑå=©•µœ¥³ÄsÓžûÛQ›‚ÍFY)«œÄš)çÑ\ò|¯f¢öutä³ÒÅÅýØËÆùH%¡äÿ¸'W]uÕ'õÄúô ±–×ÊIEND®B`‚ pix[345]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment370yŸ%IDATH‰íÔKnà àA,fɪp‘¨¾Jr‚¡WAÊ¢ÇG`WKE¸3Ž«¼†Y¤]ÚK>cÌ0)O„?ëQU£iUu´šÔ4{MSPUÆEªrɧž6*9K‹bõ¬ñwCê60¬Wú}§ ôæ6ˆá2úu­•^0iªj`«f{Šó;êÞ5õÕ•W”:A»ü8ë#²6G: Ô Ò:kììóhI}’ÂCš k–bIšÞH7Щùwnܸ<,CáF?õ¢N¤åÅe'~yÖíSZ=µ lQÖÑå=©•µœ¥³ÄsÓžûÛQ›‚ÍFY)«œÄš)çÑ\ò|¯f¢öutä³ÒÅÅýØËÆùH%¡äÿ¸'W]uÕ'õÄúô ±–×ÊIEND®B`‚ pix[346]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment367“¬}÷IDATH‰íÔ1nC! P#ôý7ù\«Cô¡Êkù(n¾ þ¿Êf;]2D ëCÆ€m˜ÎªðmÅSÈŽWÙÕŽ^V-™ZÃ$[&ɱ?¶‰®ê­(i› av(¦BiY×  }Eó•míùÖýF8/hh‹#š Ý#"ëJÁÓ ‡&S/Ž\ð‘bG=gXjÒu] e¤5òjD>µo¦B´ïÌò¹¶ØTÝ€ª©-Ê›¨ÿ{Tô‘©áïxµ®& 8«®çTMºÞC¨½ðOuçÕ·«WW£§=Ý“§}ñ”Ësæó[ßúŠú ‚aªõ„ ß#IEND®B`‚ pix[347]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment371c~8 ÷IDATH‰íÔ1nC! P#ôý7ù\«Cô¡Êkù(n¾ þ¿Êf;]2D ëCÆ€m˜ÎªðmÅSÈŽWÙÕŽ^V-™ZÃ$[&ɱ?¶‰®ê­(i› av(¦BiY×  }Eó•míùÖýF8/hh‹#š Ý#"ëJÁÓ ‡&S/Ž\ð‘bG=gXjÒu] e¤5òjD>µo¦B´ïÌò¹¶ØTÝ€ª©-Ê›¨ÿ{Tô‘©áïxµ®& 8«®çTMºÞC¨½ðOuçÕ·«WW£§=Ý“§}ñ”Ësæó[ßúŠú ‚aªõ„ ß#IEND®B`‚ pix[348]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment368¹±ì©IDATH‰íÔA Â@ Ð_»p9Þ`."xoà¤SW]öP.¼FÁ "dè0qª¤d²t!“íK ‘€•jQ´hÑè]U¯jpšF«neTíUU·*Zôo4ì;æNV€ ÜÚœ6€ÃòÒÆ§†z¡þK*Q#ª é8kýR)Ú¤†6'Úfte‰¯Ô@üžå39Yùô’Õ›ñI9§ëôt’îDRÒ>DXAŸ®; ¥Ú;žIEND®B`‚ pix[349]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment372úwi³©IDATH‰íÔA Â@ Ð_»p9Þ`."xoà¤SW]öP.¼FÁ "dè0qª¤d²t!“íK ‘€•jQ´hÑè]U¯jpšF«neTíUU·*Zôo4ì;æNV€ ÜÚœ6€ÃòÒÆ§†z¡þK*Q#ª é8kýR)Ú¤†6'Úfte‰¯Ô@üžå39Yùô’Õ›ñI9§ëôt’îDRÒ>DXAŸ®; ¥Ú;žIEND®B`‚ pix[350]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment369t¾z IDATH‰íÔ½J1ðÿrJa_@6>ÉÍk]u¸ÂÒGrÅÆÎÖ2à äØÂ„Œ³ë!"3Wø…ÅN‘"¿23IÀ'"`ÑE?D…“± Q5ølkštuR¡­èZK#Ü`ªOh6^× íK›3éši¬þz½V‰^ªçhèà¹xô9ˆC?K.…ª‘ÑÔ…Ü× ½VGíô:³Ì'fÒ{ĵ™”m¦FÑ»y¦Ã¶á{Ž[C× _QƒÜ¨ǵ®m4ͳ¢ hª³vW8³U®å¹¢c÷¦Yïï*鯪»„Kâp«éMA¡ÐSÿ¬ò:éÀ¶¾Ç?úUý9}þ†Ž¿vª¿ÐW弦ß5-‘IEND®B`‚ pix[351]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment373pY% IDATH‰íÔ½J1ðÿrJa_@6>ÉÍk]u¸ÂÒGrÅÆÎÖ2à äØÂ„Œ³ë!"3Wø…ÅN‘"¿23IÀ'"`ÑE?D…“± Q5ølkštuR¡­èZK#Ü`ªOh6^× íK›3éši¬þz½V‰^ªçhèà¹xô9ˆC?K.…ª‘ÑÔ…Ü× ½VGíô:³Ì'fÒ{ĵ™”m¦FÑ»y¦Ã¶á{Ž[C× _QƒÜ¨ǵ®m4ͳ¢ hª³vW8³U®å¹¢c÷¦Yïï*鯪»„Kâp«éMA¡ÐSÿ¬ò:éÀ¶¾Ç?úUý9}þ†Ž¿vª¿ÐW弦ß5-‘IEND®B`‚ pix[352]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment370yŸòIDATH‰íÒ=j1àY¶P©#è(›£ø$™)}%‹”¹ÂBŠ´Ûe E/o Ï(Uš°SÁú™7¯>€,®~vwÚžÔÒ&N'¬âªHGu}äMÇêkýÑÙ;9¬Ô÷ìê¡§õ8¸zÀ€‹­˜G௎–á7 xó”ADœ­°¨™} f[E´%ªý#)Z©v'1]bN¦¾P'D‰¦ž©Š Á¾WtWSŸÎ¨]]]n::Šâê66eòt¹’¼WqbQb;Ú 6©$~ø¯ N›ÂQÖÜUöNú·]W­Úu×]ÿ§jO[W¿þôÍß›JÀ£ ¼IEND®B`‚ pix[353]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment371c~8 óIDATH‰íÓ=N1 `¦pnn’«pJŠ•f$ ʽÒÌ 8YQÐZÚ&HÑ<ìÝ‚Æ^$Dƒ4)RäËó¢n´™þRå!/”6N®VJ3q£ßèòƒæ™R£hÑåBS ¶\ȿѼ¶ÒØ×ÓGUøz>á­ +pCuD&ùðµSA…hï©å`êge®–¶¯wlzϾϨ‡Ñ¯¹3FHtã3З>n|™ãé ªõ¶HyËx”÷Œ5Ø™ž®:øJIï´¶H³žY©˜>úç.4© ùZK"zA¡YEÁZ†>S¨ßîºë®»þýþÞÕá,7uIEND®B`‚ pix[354]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment372úwi³úIDATH‰íÓ±mD! PŸB…2]…²BFÈpºÅˆ²ˆ¥[€ÒúŽùwJÛJ¥ùÑ<ÆØÀÎhðçJÑS žvW›{2TG·“‚ß:µk©” +ZʆÊK!C'‚4Š®qˆÂ«¥I¦¡iW=Ïyé“–¬r͆¾•þž°4]±\·Ü«®ÔËu.­šr-Ž29š™ª­‘GEC7eSSصëZãÚû÷Ê9qwõÓÕ rVuÔà(ÞUÿA”˜SÖkŸG¦½ñ!20UwÓièxLÒ¼dU¥&Wký» iyºéZ?\µÆ¡‡úÏúzõÌ'xQdIEND®B`‚ pix[355]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment373pY%ßIDATH‰íÓ1Ž! P#¤Pr®±E$.¶ ¥Øk%J±×`4EZÊY ñƒ“Ö&ÅN9È ›0gÚV+Ù±ÖâZ¼kZÈ"EÝ@×ê '×2‡L6“‘5ÆåìT=¥ª¢¦Üܬ¬kz4¿hš#ZXª“õúÍP½¬äXWYÛÁö£Q‚¬þ­QÎ P’RkÖ*g ñÒ„;8$Íñ¥M/L?ºvrŠ& IËÉôèaÔÌë1 O¥¾"+ÉÚ¾û «Êc¬·×‚AÿþnÝûÿػ뮻îúAŸœðë1§x IEND®B`‚ pix[356]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment374̆õIDATH‰íÓ1nÃ0 P4ú< {¤ž Rà!c®dOí1ôÚ¢A%+%ÍÒèP ‹5xyE~‰ ;+Ãh ¶^?(1$SW d ]} ÏŽÊÐbkš<=mw¦.Ÿ 9gïå½k(vÍz–ĺ0Ù%mºådªLªKïë‡6¸édkí Ÿ]åW’¨ùÅ®ª”Ùï¨b›5:i E‰N’û+Ö^—ýg  ‰s mhòö¶X¨¨¯Llž{ýy6e–ÀhVu×)“Ùô0ãøšÊ7Íε/í­Î”éÈR­ š Ò_O÷¡‡zèÿë7Ñ»ÐÀÀRZIEND®B`‚ pix[357]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment375düIDATH‰íÔ±jÄ0 P<æüÝü[ÝìС¿•ÒIép«nó ¬*N‡‚%µÜA)ôDÐò0²‘`' ü®’¯ùz­¾ºuÑÕ·ôÝÕ³«|×oµõ“|šfIS…SŸEë¡k44 (ÌŽöÒªÎÉq]cWÐõ!!„ }ÌH#dõ½5_ZÀTíyKÜæ-•¤ê:3izÄ<-S4uo­Ï c2• cötãësá[Sרë–~µ5žø‰ÑRص†¡ƒG]™¨E&ÄÒ o"Ceê¸ä6ÎU‚ÈŸs¡öˆw=sEåf–®ìéæü\[𔆠ýõÅèÞ9ÿ•?á?ÐÃ'Áfb©ßÓIEND®B`‚ pix[358]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment376ý­ªæIDATH‰íÔ1n„0P# wÙ„›d”¥Lƒ((s%# ®á(ð*E¦°vv¼¤œÒÐ1²Ü<<àNvªwë²§¬{´ÉnmŽÒek€M#“¶#˜æD@ÃÈ4fc¬‡ŠêĶ?U=_LõeTõ¦®¿{*«|sh‘NrÍ7¤·Fx†ZœäW¨ù=|ñÒTháØ[h*Ïð‰J·¯¾<ù‚•¡~n n¡eÕjÒs±:R¹3Õ©rК«>¨9Dؾ©Á‹ íÉKjê2U+{AßÑ_#ÿg8õÔSOý¿ÞÕ½«cøIEND®B`‚ pix[359]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment377Š<ÑIDATH‰íÓ± ! P#¤ÐÄ£Íà”A2Jn”ëÒRR “ "|R®JKž,KæèSU€áóïú¢à%Í  PÒº€iñÙkmß¼ &_u7ºS›GŸÑ¼ k”ŠKî.jö¬YÒĽZÔˆ¨»É‹µnËm¬TÛn²Ó‹ª¿ (!dw•BòëÆóºF'êæ×ýPÃiuzcrÅZçò2‡ :¢ê"Ýè&ÖoRC€iIð)Y)uų"µõu¿ŠŽ”¦N:õoõ £Ð„# þ‰IEND®B`‚ pix[360]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment378¢€­IDATH‰íÔ1NÄ0Ðo¥p‡[ D®Àr%Ê-"<[mÉ•ÒqPQ‰–‡™HÛ͸`)“Âͳe{þ8àÎG¸U·ÑU€)2M¦6Q Œdj…NhˆŽ†d\$££CIË ÖÕT£ê½£é¢úà踯}F¶´=Æš¨8Êu¨)”ÙѤV®®¢QÔ<“®­ÕQK¡ª]+>/s"Wß—Ó¸pµdVÍf{ìú¢:™Z¦]WG£ê´>LØR%ÖH›(zúê)BIÔÓˆ°O%ñA»:›7’€ÚQAjÚÌ^·gÖgòf*K8dÄ×÷ûaã?ü=ôÐ?éOW¿»ºuµtµæž¶”¯û~uõ³§¿v¯¿ÜêIEND®B`‚ pix[361]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment379m¥°;êIDATH‰íÓ;Â0 PGFÊÈ èM'#A\ ß!lª1ÚÊÖLQ^êÖŸ‚¬¬›j+ Ê€ÉÕ…“](zim\[Y{ÑøŽ¯Ö…ägé«(ŠEξL+}} Ü¹Î.In$sð^UJ2ùv¨ª=¨$Y+_²« V(æ@¹h¾ïŽ®¾¹ä^¤'W…Ϧìë“O±Žl:e_´ÈzaUýgçD¦ÈnF 4Õs¢@᪠àÖjØ\Q¿ CçÍF:šg´C ú«ÍiÖ_qU—}ï+Ô>ý6ÿû»îºë®ÿÓÏ<²ëÛçü·IEND®B`‚ pix[362]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment383 èEêêIDATH‰íÓ;Â0 PGFÊÈ èM'#A\ ß!lª1ÚÊÖLQ^êÖŸ‚¬¬›j+ Ê€ÉÕ…“](zim\[Y{ÑøŽ¯Ö…ägé«(ŠEξL+}} Ü¹Î.In$sð^UJ2ùv¨ª=¨$Y+_²« V(æ@¹h¾ïŽ®¾¹ä^¤'W…Ϧìë“O±Žl:e_´ÈzaUýgçD¦ÈnF 4Õs¢@᪠àÖjØ\Q¿ CçÍF:šg´C ú«ÍiÖ_qU—}ï+Ô>ý6ÿû»îºë®ÿÓÏ<²ëÛçü·IEND®B`‚ pix[363]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment380“áPIDATH‰íÓÁJÄ0à?æOæêÉ<‚W²y-B³ìÁת ìk´O` §-lãn¦"xè¯ÓL“Äy£zÆñsU¥üD;ÇC#i°”á%…¦®ªÐê›æE«ÝS[ÖÚ³FèäkñÆC©ñRûBͨ(¾h8ë;j(56‹ºèö›æõéJ—uo}²ZÔ'Ÿaè®®9:‚¥‡ºÒ`¢¶šL/*T¶}–5Ù.ïÕ*:VU×#kûºÓu% £ µ³> 7gÒ—{ØšF?)ê:ܬipÏQª…ŠvEuâdÍü/d¡g˜IêšøbÏzÓ5tä™°“ïóL:…9‡U­eÓM7ýS=ýË®~«_K­ý…&kIEND®B`‚ pix[364]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment384”ŒÐIIDATH‰íÓÁJÄ0à?æOæêÉ<‚W²y-B³ìÁת ìk´O` §-lãn¦"xè¯ÓL“Äy£zÆñsU¥üD;ÇC#i°”á%…¦®ªÐê›æE«ÝS[ÖÚ³FèäkñÆC©ñRûBͨ(¾h8ë;j(56‹ºèö›æõéJ—uo}²ZÔ'Ÿaè®®9:‚¥‡ºÒ`¢¶šL/*T¶}–5Ù.ïÕ*:VU×#kûºÓu% £ µ³> 7gÒ—{ØšF?)ê:ܬipÏQª…ŠvEuâdÍü/d¡g˜IêšøbÏzÓ5tä™°“ïóL:…9‡U­eÓM7ýS=ýË®~«_K­ý…&kIEND®B`‚ pix[365]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment381äæ$Æ IDATH‰íÔ1nÃ0 P Ê‘7¨zŒEs¥ŽK@/Õ­Üz Á£ bÈ´@RK²ˆF?Ñ0©/ƒLV…«ë–Cý,Â(òã+€ÔE\ª¶!¹ÚÆoy ¡„š:ÖR1Ð¥#—J¢)|%:«øúh*ÉWéy „ÚH øß,Ú(ÀŸ•ÍP›Îö f tMu\ýà•´£@¿ùH[AÎ~rø´Ð×!üL[¤-ó“Ö~ùº“ékõø…¦ŠÕíh§Úˆ¾>@ú“lšºsh]µÔÙùFwèùúy¢#H¬-íf/ñýýÛtý?Ã]ïzC:òLûr¦ túæA3ý_7©'$®§}ãìßIEND®B`‚ pix[366]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment382}ïu|$IDATH‰íÔ1NÅ0 `W‘9BŽÁè+1¾µ©8À»R6Vn@ !E"rpZôÞb›…éuýÔ$¶ÿºñ%ø ý4UZä¢dj,Ý‚©hi𪫩ÎRòº¶Ø¤#ÿè›×Õ÷äTM®ÃÔÂYSr©ÝKÇbG>7JÊGÊ”)@z‹¤ãÐQTŒ4TÒP¤°²FqßÙÔ†\Ô¦i ¬%HÑa-žKVu›¸Ï%*ºW¤êKânœ4}Í'Cûïú¬(a~bUºQ--1—¡¿T=à‡¤!ñèg€EÒúÀqM @•Ãì÷TKûrV‰™½¨ž8ÌRAû]àé‹÷sWžÅ;vô¹bA]‹ø*\T}IU>^†ÍúWÿnzÓ¨ïª~D¯·v)ÀIEND®B`‚ pix[367]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment383 èEêßIDATH‰íÒ1! Ð Å–O"ÉÀº3ëµØ›¤³¥“Â!+‹ ‹¥a†7LÈ'@ƒ•àçÚ¬ª|VAÖ@,ï(ßeEð+8M3ø«®éâ0)J©²*w ÍÕu/ª]ºR ¢Þ&ÚXQÖæh+0ŠúœªCœ$eY3°ò&çœ{Α6U3¿j–Ï¡÷»(³ÁVGv¤Ü—¤Í½µ8QŸž¾*¿k¤AV›{Ýe5umЧg•Ò3¶Ûp÷Òy¥™ªo7éhÑÙËÑÖääØ:wºŽàXN´V§Š)¨Š±Pb2TR /ô@mz %SK˜ ÍÅè\°¡ù…v'ÊÁ-ú¦Ïs~wLƒ®¥Íä2ÒZ—iÇKœªÒ"Ò’bý_¹¤l#ƒ©Wè¡ÖÚu×]wý³~`ç¼â?“U!IEND®B`‚ pix[370]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment388:œbIDATH‰íÓ;nÃ0 `´•7(¢keªe8@®%Ÿ$î ÔM!VΫ1J:èÐÍ‚ƒLH2áõkSg‘LM$ MØ^”#Tp^ÈÐåq ´ŽÀà‡ŠÑPÏ40Fµ3^õ¾«ÏµÒUû[iZéG`ŸtTU4­Ü3*>Чg•Ò3¶Ûp÷Òy¥™ªo7éhÑÙËÑÖääØ:wºŽàXN´V§Š)¨Š±Pb2TR /ô@mz %SK˜ ÍÅè\°¡ù…v'ÊÁ-ú¦Ïs~wLƒ®¥Íä2ÒZ—iÇKœªÒ"Ò’bý_¹¤l#ƒ©Wè¡ÖÚu×]wý³~`ç¼â?“U!IEND®B`‚ pix[371]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment385ã‹àßIIDATH‰åÔ±NÃ0`G<ö ÁæWáÙÜ*/Äk0:êÂÀC¸b`uÅPKwMIh}g‰üC–/ç8öÙ |–ŠTUw“ÂK¹™õ$QÙ¤D Êå$õ£¶¢ú+›´¤ÎG•¤Ð'¼Ô;€~+ÔÀ¨X?‘by¡ÿdýLÚ¥¶Ð7ôÝ.- MT¯aftKõ ‚w&™BiC¢r±óPên¯VPJ<·¾¢×m?XóÈë[j;Ô[^5ŸÍjOUçvÒ|¬zÔ{Vs3j’uUG‹ªyHWácÜ‘*E›Û‡r(Kì¨ ë/yõÔØ“‚6Ô´)ò \m^1QÓzJ:X|CÔ}}ÙÏŸ?_UÏœ”9Kþ ÒTU8ÝcðŽ«h¬jXTU¸s# ÷Õ”¿¢ºªÛšÕÿÑ×_9«oÔw,Õ¹Í_8ÆIEND®B`‚ pix[372]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment389ê=¬ôIIDATH‰åÔ±NÃ0`G<ö ÁæWáÙÜ*/Äk0:êÂÀC¸b`uÅPKwMIh}g‰üC–/ç8öÙ |–ŠTUw“ÂK¹™õ$QÙ¤D Êå$õ£¶¢ú+›´¤ÎG•¤Ð'¼Ô;€~+ÔÀ¨X?‘by¡ÿdýLÚ¥¶Ð7ôÝ.- MT¯aftKõ ‚w&™BiC¢r±óPên¯VPJ<·¾¢×m?XóÈë[j;Ô[^5ŸÍjOUçvÒ|¬zÔ{Vs3j’uUG‹ªyHWácÜ‘*E›Û‡r(Kì¨ ë/yõÔØ“‚6Ô´)ò \m^1QÓzJ:X|CÔ}}ÙÏŸ?_UÏœ”9Kþ ÒTU8ÝcðŽ«h¬jXTU¸s# ÷Õ”¿¢ºªÛšÕÿÑ×_9«oÔw,Õ¹Í_8ÆIEND®B`‚ pix[373]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment386z‚±eIDATH‰íÔ1nÃ0 @´q_ýÄÊSú’ÈFý’Š}FÜpä`X¥Ü PRž‚,æ$à$¢(A®Dw×Å:—7†¦ ‚¨j‚°´y‚ jQæxC#5y ÖÒ 2 E#²¡M~§³¥ø!ÛvŽ•rˆŽŸ¹CCߊ-½Œ5]Pôà¤"šÎ’?YJpv¶N«¢¥/ݪzV_tt|°4ÿª^É å­µÔ"{UùM}å é":’¦hhè“Oý,Š¥]“ñà$]çÉÒ&ós˜•”×—"—£%ü£$«ÈÔuÕ{£*þiªêPU¥ã®ª~8WUúâfg#vÝu×ë7)R¾u{vàIEND®B`‚ pix[374]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment387 …óÐIDATH‰íÒ± ! PN”^ £0šïtKdPqª´”‡KÚ|QšHç‚‚§–l§F­îǺzC‡[tD¤}j%m jö*u~‘zuÒáÂj¢A¢ëgU„‘S{lT¡V²TüÔÔ€fS·­Åš*нвbe5­-­ñ­i‚µLåuΗA¶Å}PfÔóÅ«Ï,l]˜÷œ ¤" T¯úÕ¯S}›êyªcÁVî ÂR4ãLÓT³Ÿ©w½1ý¾ÉªîúÏÚ¼ªn)Ë~²qáaIEND®B`‚ pix[376]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment389ê=¬ô IDATH‰íÓAJÅ0à”€ÙˆÙº››´Wñ ¤¯áQœ®\z…ì\ZpS!d^’‡òŠ“Q\5‹æk“IøkXÁü©.ššV"ƒÅ„ežzßF_ß‘u`r}µìy÷ïšc;×dõÙuò‰®!û€ÆËzÉÞ‚¬¹hÄ­£ÉiºÚ×ξ4l°NQ>‡¥©|}u†-¡˜?”êØI_Ùú#tRÇžã–ЊúVÚ‰H kñüèèò Uµšf§iòš®ª†IUÔô³(뻪|衇þ—žl_ñXl·öIEND®B`‚ pix[377]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment390Šú% IDATH‰íÓ½NÄ0 pW2–‘ ¿O@x,&ÔáF^)§y… XƒX"/&=$>T; ˆ©ÿ1?Ùq,¸ 'æ7YË…ã#—u›³°¥«Ššf`‚AT6ù†ºk¹¦¼Ï6ß*º¯Š)ÈSMO¤ê<óHøª(ÏÜWŠîØ>kjjípP´@i(]ß]óÝMÕIÑc¾2dfmªŒ¿Óá)ZQ_>4ÈÚŸõÑ÷¢v w4xÕ$sÕNQ;fÔÕM µÎƒ¢¾ã|‰/¿(˜e!¬lƒêq¶š.©ªìjIj«ãèZºÎ§F¿ô¡©«=}×bZJ«¿ûCmó^1›nºéÿè©©¤é;Ž0Í ·5NIEND®B`‚ pix[378]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment391ýý‡÷IDATH‰íÒ±m! `¤wMF`‡ÔQ¼VŠHp¼•n”Û ”.,Œ^iSDJñ¤sƒÄÈ2?È¢*ü‹ö²Ðh)Cœh+AÀ|Yµæ¡fWª|6glÝúKdHŽ&¾ Ͷ~dÊLEÊ;g[™°2Ú*TÚBOT}G[¤ªÓ¶´nSíY „†‡«Qõûfÿ‘ܧfGeWEOçÝb+Õ"vr®ôÄ@¾ªõk¡HªÙÕùø Èé¹iê€Ðžd©ƒÀ¯^b“Àîý f†n¦ö±-{wò<+Ê.®ö8Gi©mû»žiy7¯ôQ—^zéë/,²´p/õzÄIEND®B`‚ pix[379]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment392dôD=-IDATH‰íÔAjÅ PÅ…»z¯Ð$7ûINVË?À¿‚ÐÅ_v ‹ÎB´þ~g†¶¿….*GQa,êG&Iƒ¨JÒ,*j)+p¢zIc?m£aþŽ>ï_=nÔ%leuJ®ËÝtQ˜¢‰à]程R}ZûŸ/Zh­+4zR˱uê7zÓs±8šdi}õ”-¬ÚìðÞ$CjÖÙ%VQU8…‡ƒKw…QPµÀ`«r+ªŠŽ×Ññê6ÕHžB¶0ZI' ~EÏèl£_éîÎf³øÀÔ•‰õå#qƒì5Y«ÎG¦ƒ.IMÄFî§`·þìS¾ö ô)5O)¼ê“¨Äb?”¨ÖF¡¯‹F#q 6±^ÌŠÿú}½AßD=ßÕôñé;‰ž¾+å¬ÐIEND®B`‚ pix[380]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment393ót«ÿIDATH‰íÒ½J1àRL™ÖBÌ›x_LHÁy,g°÷œe_ `“…Ë^³i,̹…?`±âã„üRcdúU=ý™ ¦N}e ^ W"¨9"­mg ë™&¬QT!–¸žÜXRå—£Nã_­¼5Œµ´ënGº6]¡æÐô]"PßT+PêZx¬ËÜ5^Í{ÓýSù‹¦]Q¶pN‡±Ê³kªÛX w}ëM½s•I ·¾Þc½ñ—ÊÍàTä…œÒÖº¦ 6ÖÍg B±=ÊöT}kÓizÉû¾|Ke²´KWSs´”leK_ÕR½êUGz2µþD“¥bfõ¿ë¿ÒQ§@¬ÚIEND®B`‚ pix[381]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment394—áIDATH‰íÔAjÄ0 P ^xWß`<)èJí¾`=@®äî sÁK/‚UÛÓi"¹Pf™,LÈ Ž¤ <¹"YE}×£%Q«ÍÇ¡VÒÕÌ´˜Œ3%4¤kÂZU+Äö×!€—uE±#è³n›I-'LJ¾ý9aÙ–|s+V÷¦ü—¦©F T>\¾µfZ„f5m¸Óˆ3½ˆø¨sr×]wý¯~Μ³£—XÕIEND®B`‚ pix[382]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment395úÑž(IDATH‰íÔ1nÅ P£ t£7à ÿ•¸Ö*AôÐ+Ñ©c¯@Õ¡+ÒJõQ\Ã¯Ò 6ýê+‘"=Œ€Ø ñIo€ÿéy¨AÏi¤ìϯ_†ªŸx `+ø ¢fp4@P—Áp‚úÔÒ-¯Ñ§“ªaõô†ñÑÏ©£ÅÔû‘†îoêWÓYU×ôa¨­ÁëºyÔž’è:ZLu´hFxMWGòàT.¡\m}_óÍÐ |¸d©œ Àãλ¢A}ï'frMeÅ中ÒÕT.{Š–¶ôŠMSK¿†Úuê©§žªèê“üŠ$´IEND®B`‚ pix[388]: xres = 0, yres = 0 ‰PNG  IHDRG#î®*þ pHYsb&2 tEXtComment407À~ËIDAT•EÐAjÃ0ПT›âl³(özc_¥ ‘Œ/¦£¼èV¥Œ¦b…Ìêñù‹™rÒ¬¸Á†‚š\ŹÐ(;\nꤩ̒LAŠ_›²_·ðF¹ì—­PpÉ/?õýPPª¾ôñÐÞaÿtÑÔ?U¨ÑäsÒ4QçàÓ„|•dº!ŽÒX‘®TÔ…²lѵ"ß³|Q84œì^êÒŸ4LÜHÓwHø“Q 'œw–f½W TôªJýêSÛ¡êôÏôàŽ¦‰Y5ƒIEND®B`‚ pix[389]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment408P¬ïIDATH‰íÔ1NÄ0Ð﵄ÄD¢¡@É8"WÚ’bEÌ 8¾ –8)SX쬄™ñ‚ÒP¬«ÈÏcÏŒì€WããëËc­ãPÓôCSÇáz½lÑwVܤLN†½a`uD¦èu}:Qc <èš²ZE’õªzLZVEã}U´za²¶PzŒ;˜ªZQçjì¼+Ú*Yc[¥¢´Ãžâ­“{•lÑòu%I'‹;Š QG‹†"4PTÞ9ë%…ÆAUç÷ºʽÊzuJ'EËËÄòã¬gýú²Aµ—r݆¬~¥¯tùiƒž8÷íú å|LF;ŠIEND®B`‚ pix[390]: xres = 0, yres = 0 ‰PNG  IHDRH)¾>R pHYsb&2 tEXtComment409'«0y±IDAT•uÐ1Ã0ÐoeÈ赩’¥‰jz3ÅGÈèÁ ܤêô$ œ4A¢ì˜M T»â†Qk¨¦¡aÆæª SAÐìš\E5£ÜFSNÈ÷AEªe9k¸±O ?\ûŸ qâ+1\Íd{MÀè FN« S`¸„ÜU´õTéòCƒÍëÇC í w3Ey‰˜6{”´ñPUU2mªá'új?%H§äÿ°«´èýüIEND®B`‚ pix[391]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment4110k‰ ÎIDATH‰íÔ1 1Ð,¶ô{”x27àÁŒx¯B°‰X˜"dŒ !l¶Ü)BàÁ™dQÂafÅ$ª6Ó×›P׉èX)#,ÓðWx¢ØŒAS«i°Zæ¦ìT.ØÄÕ7=s­}¾=4-DM3Ñ]Ó+×ÄëÕÕ4u¬WNѬ¹f`Åo!&bë1pµªŽ«U#Cz¿IÓ­¨v£˜š¢«²VN%÷g°ªÈ½‡ëCÈü6}Rýnfÿ7]tÑE5}¾uÎ-IEND®B`‚ pix[392]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment4110k‰ ÎIDATH‰íÔ1 1Ð,¶ô{”x27àÁŒx¯B°‰X˜"dŒ !l¶Ü)BàÁ™dQÂafÅ$ª6Ó×›P׉èX)#,ÓðWx¢ØŒAS«i°Zæ¦ìT.ØÄÕ7=s­}¾=4-DM3Ñ]Ó+×ÄëÕÕ4u¬WNѬ¹f`Åo!&bë1pµªŽ«U#Cz¿IÓ­¨v£˜š¢«²VN%÷g°ªÈ½‡ëCÈü6}Rýnfÿ7]tÑE5}¾uÎ-IEND®B`‚ pix[393]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment413Þeè&ƒIDATH‰íÕANÄ ÐO0a'7°WpéÂL¯å $^Œ‰ ¯«ÙâÊšÚ|haL\*Ý }…òçó)øN“ð¯D¿ 0•ªpå¦E©2\¹©±R×¼PG>÷X¡žað¹G7Ê’YEê?ÌÏ/m˜uLzÔ@™ÞåæÙÖpW廪 Ëê!•«¦(€+ºÑ1Ýà:G«^"ò ©çhÈj‰Ù¨J+œÈ´ü»jˆí)ë©f½™ƒ’RåUýbìU¥Wô³Ò!) úÖVKý VÀJ,ñ¤56d¸ZS~'˜ˆƒAæý”f5Ay©iOÚ°¯lÔËóáÑZYCÜÔcÖÛEÙžzyOxÍQQ-b±ã*ã9^¯Žð#®£«‡CÔ1é˜3øq ÝRÊïkP)P•I¯Ó[ô9N%PN^§y”ˆSá½…¾—'ð”4ÌRUh9ýÒƒÛhnš›ªÊp3¤«´«¬­áåmµóqÕQÑV7Ïͯղݮ|˾0—*ÑHÖûôIEND®B`‚ pix[394]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment413Þeè&ƒIDATH‰íÕANÄ ÐO0a'7°WpéÂL¯å $^Œ‰ ¯«ÙâÊšÚ|haL\*Ý }…òçó)øN“ð¯D¿ 0•ªpå¦E©2\¹©±R×¼PG>÷X¡žað¹G7Ê’YEê?ÌÏ/m˜uLzÔ@™ÞåæÙÖpW廪 Ëê!•«¦(€+ºÑ1Ýà:G«^"ò ©çhÈj‰Ù¨J+œÈ´ü»jˆí)ë©f½™ƒ’RåUýbìU¥Wô³Ò!) úÖVKý VÀJ,ñ¤56d¸ZS~'˜ˆƒAæý”f5Ay©iOÚ°¯lÔËóáÑZYCÜÔcÖÛEÙžzyOxÍQQ-b±ã*ã9^¯Žð#®£«‡CÔ1é˜3øq ÝRÊïkP)P•I¯Ó[ô9N%PN^§y”ˆSá½…¾—'ð”4ÌRUh9ýÒƒÛhnš›ªÊp3¤«´«¬­áåmµóqÕQÑV7Ïͯղݮ|˾0—*ÑHÖûôIEND®B`‚ pix[395]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment4157M2IDATH‰cø40ŒÊŽÊŽÊŽÊ7Y{|²ÿh&KÀUàþ`«QÙA(ûgPºj eNŸþS„ÑIEND®B`‚ pix[396]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment4157M2IDATH‰cø40ŒÊŽÊŽÊŽÊ7Y{|²ÿh&KÀUàþ`«QÙA(ûgPºj eNŸþS„ÑIEND®B`‚ pix[397]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment416®©\IDATH‰cø40PSö0^ÙÆQY$€?¬þÊŽÊŽÊŽÊŽÊ%ÙxeìñÈþcÀ/+Gö?ÙÌýxd?°ã3ù;>W°Ã+[WG¶CY[€7eGW°Ã+[WG¶CY[€7eGØ*;ŸŒ™ì:™[ä9#['Ñ —³®Oø½RëÜ<í­÷4z*ÿ¾§ìh[\Íž²ë÷¦7ý?úéêÇê—~é*£n:ÀFIEND®B`‚ pix[400]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment433ìSФÎIDATH‰íÓ± Â@ àœ:ú}ŒóÍrààè+\|ó+”ÆÔâv†âØã†ÀG—KÈ‚Sh…J¤aí\ÅuH ÉÐDÚs]ûEAîW ©º&SPyVŽôvÔ.ö:·¢±ÐRdb±Ž5yý& E”2R&ÑÔ«Fú†:qÓèØÄJr…:ìIÎX‰r¨Ö¶§ ´ñt¥(Çê3©°2Ï3é3P{/ѱKvaÊþƒ¼ÄÕ-“þé/ú·ªEj›nºé¦ëõŒÄD,åIEND®B`‚ pix[401]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment432›Tº2 IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[402]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment434r7 IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[403]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment433ìSФIDATH‰íÔ±m!àÿ’âJ6+¸LGFñÞ¬ ಠ–‹”^éQ”à{»S$,]cÚÞPc¬ ²©ŒjòÏ*BUu9(YÕô…Ñm¡l}åqRÍé.æ ¼NRÛ7¥dtÚ³: ô~ªkÎg ó묗k5ŠÒ²Ý¬±Ä¸·:]H\tÔ¥vV(V}Ö弪Ѐ¬ò¯ o…~#n¤Û.z(tÌ„wbÖóµÊKäEí6" ¨©Ç >x5¡ï§2)xŮǖSmð”s«Ö×¶”\R ¦c“¦0Ì[˜”˜žÌêÉv쌒¼\ég¸ë]×Ô¯¦þ¬”Õÿjlj¸A?oÐJ%Ì/#ïº)¸+1IEND®B`‚ pix[404]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment4350/‘IDATH‰íÔ±m!àÿ’âJ6+¸LGFñÞ¬ ಠ–‹”^éQ”à{»S$,]cÚÞPc¬ ²©ŒjòÏ*BUu9(YÕô…Ñm¡l}åqRÍé.æ ¼NRÛ7¥dtÚ³: ô~ªkÎg ó묗k5ŠÒ²Ý¬±Ä¸·:]H\tÔ¥vV(V}Ö弪Ѐ¬ò¯ o…~#n¤Û.z(tÌ„wbÖóµÊKäEí6" ¨©Ç >x5¡ï§2)xŮǖSmð”s«Ö×¶”\R ¦c“¦0Ì[˜”˜žÌêÉv쌒¼\ég¸ë]×Ô¯¦þ¬”Õÿjlj¸A?oÐJ%Ì/#ïº)¸+1IEND®B`‚ pix[405]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment434r7òIDATH‰íÑ1nÃ0 Я¨°Š Ñ û"Ar¦n‚ŠS;ö:]ô ÕÔ̓ V‚ÓÔÔÑ„&= >Á"üƒ£kä$ Ù4¢=QWËÐ5𦋢KUÓUÛU×Õ7Uɰ}—CÛt˜øUQkøcâAÖlk ¾t4¹Y‹«j³¢ìZÈkGZŠzðgœ²ÅyT¶ªÊMÅÞMoO˜$ÍžÇó#¼¢/>ž!ëzÂè–›¦Àø€žª&àä0wÔP4%å õÿ£õFK†¼ªŒçèóEÖ¦kšrP5”ªßâVÜôZ»+aêŸêµë®»î*è/®µ¢†rÜIEND®B`‚ pix[406]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment436œ9~+òIDATH‰íÑ1nÃ0 Я¨°Š Ñ û"Ar¦n‚ŠS;ö:]ô ÕÔ̓ V‚ÓÔÔÑ„&= >Á"üƒ£kä$ Ù4¢=QWËÐ5𦋢KUÓUÛU×Õ7Uɰ}—CÛt˜øUQkøcâAÖlk ¾t4¹Y‹«j³¢ìZÈkGZŠzðgœ²ÅyT¶ªÊMÅÞMoO˜$ÍžÇó#¼¢/>ž!ëzÂè–›¦Àø€žª&àä0wÔP4%å õÿ£õFK†¼ªŒçèóEÖ¦kšrP5”ªßâVÜôZ»+aêŸêµë®»î*è/®µ¢†rÜIEND®B`‚ pix[407]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment437ë>N½ôIDATH‰íÓ1nÃ0 P<êØcdóUz…l Ø>A®$#CÇ\†/Àn˜¥d#dÈf Òð‘Ÿheð&½ú:?޳« ÊGrUŠ& 4U”‹"C_ÕÁU*Úsã÷{×ÚPóQ— +»tùÕ5ÒO\—PóêTÕF×)PÂÍjÒ oÐS¤© "üŒrHù;ÖSš¥subܤ[cUéþmŠ& /·Š¦)Ô  3½ŠÛ‘ikúñJºd7É¢™qös¾«åìϨTEñ•[ûÁ%´M‚«Œ3оªCMŸk×]wÝõeý jÃl ˆ¹ IEND®B`‚ pix[408]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment438{S,üIDATH‰íÓ=NÅ0 p—HxyR.€èEžè•߀h8XŽ’#˜-CdãV¨o± [½þý€Uàß•1Òž"¥)Ò¾-a.¬‘Z±‡²{W+öБ}m8fG93`÷ÞV¡vU°ø®N¯ÊöÀ™Â¦3aµõs×ìèEu¡¹®ŽX›£|Ai›.¦>¡TÕæ«š­ãŠRr¤€´Ø¹ªü<íoÈ‘Ê<Ñ‹£C§3Ñs¤ÝéFç]Ñî$m«¸ªØ6@KIEND®B`‚ pix[409]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment439 †cºIDATH‰íÔ1jC1 PC=úÎ1º9Gé1ºÉŸ ¹–;eÌTz€þÒ¡«JÚüüäO–ÐBãÅ‚'l ϬWÐ>´´' ¼ªP4‚kt¡h9ù# Lu7tô£z]Ñî…›J¸~eßU‰p»™S^‹¢ªIÔJ’®Ï„t'Iºv¢€œô{ÞëCà®­OWº®ûìÙèjwÙW««•5µŠn³+NWGhD}CÓAƒ®hz—›¬¨>“EÞÝRh«½˜õ®ö*¥óôDŸG]&*Ooãcˆ(Ds®ï#M–ËTóHÉsõ-Åïýr=-â9å ´\çW¹é?Ñ·?ÙÕM]¿µ}Öúùè+ÉIEND®B`‚ pix[410]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment440:MÙóIDATH‰íÔ± Â0Ћ®0"”(Yƒ%«0 ÀPlÀ ÁWX>Î@éŸ $Ü>ë|>™tb4³ö:½i¢6Q]Vï„êˆô’Uˆ±¶²:>tWaíÃèÙI .ˆN¨•teꡦUV4Ô°^úH=Ô±žP+É5Z? KSî*vN[–¡|_1UZ ‰éé¡ oiTö@CÇáľºÎ °zÓ-ûmùF¦Ç…ó ¬ä¬>ÐÊò¨Ðùºú]½äÕ´0Ø )íIEND®B`‚ pix[411]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment441M}OèIDATH‰íÔ=J1ð )¶370W°Óʼ“™ˆÅ^kà^#7pÊ’yÉj™ÿTZ;„i~0æƒÔˆB¿­q¦ÖÚ*kóký¢Ì…,­”&>Ö\.kmSÕÉZeÔtê%"½^»ok­ôøŽuüöcj@ª;ÔR’ú¾!åÔª»ÄF/P9ÊÃ3R?´Ýú‰uã¤Pû¡w¦C÷v Da´àMnC™,­†J’§e§g]OÎÔB–Ž™Ô f’cuP•“L]oÊЙ+Øßz(#Í3¿š—l÷w´ÍRwãGãÜ«SO=õ_è òÇ41IEND®B`‚ pix[412]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment440:MÙÚIDATH‰íÓ± Â0Ð W8^ J‰’•()lha<ŠG0‘,›8¡ãΑPÊ|¹°ôtÕýƒTˆ† ÔUŒÊüI«ÉÊ‚V#’‘° ¾å'ucEë ÓC:u-ª¦õˆé)­2¬6‹*R[ŒýŠFc‹¡FiZ‡’†EG^/ÿ«Ï ¤N»óAhfÖ7øyö³BV;Ðê zázûà4=¦‹ž;ºW‹ö5ÝØ¯2m÷]}PБš"¦(ù;šÕ8«ÈJ&뽨iE¹ìºë®»n¬Hâ½qÙ _IEND®B`‚ pix[413]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment442Ô,õÚIDATH‰íÓ± Â0Ð W8^ J‰’•()lha<ŠG0‘,›8¡ãΑPÊ|¹°ôtÕýƒTˆ† ÔUŒÊüI«ÉÊ‚V#’‘° ¾å'ucEë ÓC:u-ª¦õˆé)­2¬6‹*R[ŒýŠFc‹¡FiZ‡’†EG^/ÿ«Ï ¤N»óAhfÖ7øyö³BV;Ðê zázûà4=¦‹ž;ºW‹ö5ÝØ¯2m÷]}PБš"¦(ù;šÕ8«ÈJ&뽨iE¹ìºë®»n¬Hâ½qÙ _IEND®B`‚ pix[414]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment443£c½IDATH‰íÓ± 1 PKH\™n º¬Äñ7­’Ž’ˆDAºC ‡kï!çöÙ±lÅb$T¾¬ID'‰žP{¨“¤Ò-k}C3ÐâªLoj~©b½ºn€*SÕtö¾H¥éô½P=d#z¤:`•YÁ&E"Õ~dzMX;/§ î¶žP%-Ï»oêÿgQ‡Ú^. Öjçë*®¬ó‰"SCÚ,B½Ñ“1à¾Á>ת­ºêª¬OÇÆµƒ |ãIEND®B`‚ pix[415]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment442Ô,õIDATH‰íÔ½jÃ0à»zðf¯Lô&Ñ+e,%$fë#äYR2xì#Ô¥CƪS4]Ïíz§ên>4>$ݨ&ÐdK:EÏãæXËúâ)UäuH2T²zϺToŽðÐI¥ýj€ÕRÑÒ¬6°ÕôÝU=}¸ð¨è~Ôt=9Ò´öÔ{”œY÷ÈgEͬO¬r¯rëé_£ÜçlvÔàg”gÄšìƒQuQõƒPk²»ÔV—c-Õ§yc.¢ºt = :€…®†Uz7ühûmåwïÈõ®a›‘6`%¥Ì‹ÇçŠ*ÅU%,ª'’FOý*³Î:ë úVTSÒlÿ-« õ<ª³j^ÔIEND®B`‚ pix[416]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment444=v‰ÀIDATH‰íÔ½jÃ0à»zðf¯Lô&Ñ+e,%$fë#äYR2xì#Ô¥CƪS4]Ïíz§ên>4>$ݨ&ÐdK:EÏãæXËúâ)UäuH2T²zϺToŽðÐI¥ýj€ÕRÑÒ¬6°ÕôÝU=}¸ð¨è~Ôt=9Ò´öÔ{”œY÷ÈgEͬO¬r¯rëé_£ÜçlvÔàg”gÄšìƒQuQõƒPk²»ÔV—c-Õ§yc.¢ºt = :€…®†Uz7ühûmåwïÈõ®a›‘6`%¥Ì‹ÇçŠ*ÅU%,ª'’FOý*³Î:ë úVTSÒlÿ-« õ<ª³j^ÔIEND®B`‚ pix[417]: xres = 0, yres = 0 ‰PNG  IHDRH"Ôù¢Ö pHYsb&2 tEXtComment445Jq¹V¹IDAT•=Ð= Ã0 à<(CÁk¦öJn’cd(mŽ–£¤ô±úì8>$0O‚ÍbfŠl›|`Ø”ªš"H€C¬ÄVRKvb'©Ûħ”R½O¸R¾ÈCûµ'Ôè#£(uhŠ>…Š>](•½%`¦tÓwÕÔ5o•Op_ÜB±nÀðD­á¼÷ú¢™ânSçŠÞê ïf*Ö;ÍI)u9ý¯ˆç*Ó*FªbÅ|Ì?% Š*uƒ¿dIEND®B`‚ pix[418]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment446ÓxèìÑIDATH‰íÔ;Â0 `ƒ‘ÂP©¨ÄEªr%Æ:0r®Òc Qq‚Œ¢§]óAEòÙ‘ò$™i-ÓÛœZ–W µgé ;¬cBR;–;Ljô‚•fuÃR°\Ó&-€êxÅa ´R5Õ*Å´6¡ê›Qk¬'¨nTL«m”°j¡‡:D-VŒõéóý kj½*˜™¨¥•%:=PŒûÿ+;ZA Fœ±@EWwÜvÕGLHk0SùOZÆŽ4¶§øÔ^úodÍš5ëWúž·b¦…X=IEND®B`‚ pix[419]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment447¤ØzîIDATH‰íÓ1Â0 P[Ú©]¹jGŽ•$8WÉQº1ÂX¤`“6€Øaa¬×'[²óœ)ÿÕkVý†o^VjØ `E½ìQÕ~T'÷8)ªê¢²ú¤¥¢À[ ÐȺE>Dí^z|×ý¤©õ»7j‰Á(Z'µ9U6¢iTùO•/ R¨Õt…¡”uè&mÒ± +$#ëÅŽÊVÕ¡²`DmqXwNîX,ójT­¢Öò¾Uò×üxM¬YVþV8‰×w?bNoRfa\žoEÝÔO/Jsƒª_c¼¡7·ŠzV»ÞõŸéÖéä)Œ~çIEND®B`‚ pix[421]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment449CÇõ}IDATH‰íÔ?jÃ0ðOhP6eôæ+äîQz„ŽÙä£Ș+:t¬Š)OöªO-¡… -?ëñéFnŒ¯cOuÊ6ÁÕu´&À5¢º©ª®øÖ;'Ñ9ÈL4q¢=íë;=G®s™ûªÎ0R9 U «ú–&Ü£¾ÓòAdº]µžy]›˜nWeTÒõwååúvTEu2Lá¦#ðÄô“髨ú`¸Jª*¢Þ9@'hª;UT}+ÊÎ*ì—µd¿¢Y´'êôÔéÈ:»÷¯áÈÎyv“¼e¦Ñå$j‰‹’T%í°TãoöšŸúÔÓkS¿2sÑX]‹~D£á$IEND®B`‚ pix[422]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment450#|˜IDATH‰íÓÍ1ài*8ˆõÂ+ìÑAx-7½9z%77qp´âRÑt´µ²‹™JˆMo_¦3S@Ä2C'….#ºÁyTw=à>¢ÇQ½ÔEDç¨Z7Ô¡FëLàZZ÷0-t& <„·ÍU 7ŸÔ”UW`LÞ ÂM]iÖ„á[jƒ’'Û šÓªSÉETæE¶ô1“…5]Ó¾*Õ7}ÊsIël&u_è¶ÌºŒ>ÐÎU©™Ó¾ÈF¶ åö¤àuÈkë]íù“é9…¤š¦@+¹* õÊU0¨oÚ˜*æ‡bP$‚ êvQ-—ë2ÿË´òã¯ý=Eõüͨ.»»‰¬%›oIEND®B`‚ pix[423]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment451TL.IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊ’/û§Ÿì{¼zñÊþ‡ÈôµNø†×ì?IEND®B`‚ pix[424]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment452Í´ãIDATH‰íÓ1 B1 à<:>G!Wpt{-'ëM¼‚7ð¥à*.JcÔ§&ÅñeìGi›þ®Ôþ¬ÛOMá¡þM‹çÎëšC_ Õuç |÷ÐÐ×1Èö‘~ç™(Ó²ÑuŽ4â´¶9²òrѲB Ue„ÉÖL×sk ^ÔkJWm-=‹Nªºh» ë‘0gêÙÖTÕý®‡»]›”Mí¹XÑäâÒTésœê¿SL`i#i'+±ÙÔKû«¶’ŒÜ›”w•9«*G4TYjÙ×Ô®AtЯõ0ÆAo›­vIEND®B`‚ pix[425]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment453º -"êIDATH‰íÓAŠB1 ÐHaºìzÙõbý2˜#MÄ…Ë9‚ý'ð»+X~LþI**ÂϦ…GÒЦ@èàÕš?¼¦#Ä<õ²fêNº“•+T݈‹¢Ã-M ®Ås«½è¿¨Jª"„þaÅÐ/U]¥ ’¢KŒÜXS½¦ßñÓij8÷ËjjYKK÷ªŽåÇ´ô]ܺ¥†u”5,ÖÙ`5ÅÁ•†‚×ÕðpZW©N»—o£«óL‡É?:œ‡!›º_á‡o’TÝb”ôò+Iú7)rNãZŸÈuÖYßJ½ãÊWPIEND®B`‚ pix[426]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment454$m¸IDATH‰íÒ1NÅ0 `?eȘ#„k0•£p ¶10r®ÄÐk8êÀH¥·dˆÞ[¤"ñìš)ê'»Vü¬ód25ÿ_Ç=mî·Ž›Þ‚OZóUgB±ô Lúxò±ÑÒ–h0Õ‰FUå§ìåL R««ŒÄÝšQE¥»¡pb£¶ü¡õ ÎÐZP^9ª:q*òP;úÁƒªœ¸E”¤êÈ©.z›–½‰µèšÉ3 “±ɪÄœT•¼6í7íJj6º}뼯ʴ?jŸC=ôPE¿kÕÇž< IEND®B`‚ pix[427]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment456ÊcÙ­ãIDATH‰íÓ;Â0 `G‘èF.€šk0TåZ Ε£p„Œª§¬þ½± zÈOy؉‰Hô[Ü 6rüöº¿©Ó5‹zÎPW°º•‚¡îP“kù ôéZd~ÙªMôåÖ€õ°Ýùh¨½hÚŽ¢éEúÎ]}j£žQ×n@ë(µ‚Zd>¦eÖ_¿Ì²*/Ö{¾ž¡Ö‹¨žo9ÑU”(ªJtŽ é»+UCÉÒ‰¤Ôð\[o$_ZÏHºˆåõû¯šB‘V¶” u¦›‚^øFï%¬MÕb×]wý[ýÞ$¤T"rÁIEND®B`‚ pix[428]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment457½dé; IDATH‰íÓ1nÃ0 Pº4jí¦£Cå`œž, z€^@.À ‹Š2fie+HeH[tˆð“lúSŒ-ü¼rÞ ´A–àè¼*C6uy‚Ò ˜Ê…`öTïè<»t¶«Ò—R‘æÔ¼ª>¡ õ{ïç ª…œ¬T±:ÙZU!“óE]9iÔÍY휷Xð>éWŸ">GO‰#²­/X>8Òbë„E8г7¨6O—€ùàkìz°•CÍû_›­aß’£ `BJºÀÕM®v’]{=Õæ¢ÝÁUõ¸:Ýç;Hj,}ÉQ!Õâ釔žlu¯¸{g`¸¡ûÌ=±©Ó¢åÆÑØ%V5¿wQâ[‚§û+ÜÁWhiÙºœ úmÕûY«Õzå(/lוjIÚE®¾-/°+¶b_%lÏ4&Cuúh©©£Ó¡k”®¥LMuæÆ–9ŸsNþ±žþå©.zÑ_ëãAšƒk9¬*IEND®B`‚ pix[433]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment462æ#NwIDATH‰íÔ1®Â0 `[2¦c'|èõ ‰V Œ\)ˆ‹ä3D 0Ú^`lÖ/–jçw¡g¯õn*ZZMÍÞÒ,M³¥QÆ* }t5”šÓuó]s5¹®Ij¹+6–¨hÄʵ‹4Ì®®Bh =%ëÝà põÁŠâ,êÅeø¯Aš5ëŠÙ¥SH$×b ›ª×•uÒ5zé:†$ šÕaiô–šzÌ”'k Xh@ÑC×¢øÍõøR”µL]'/÷[ø£¤M£¨¿Âl(©JÁª¥[¬>žmWTsñK%“­k%ϼ'$ý¯¦k¦nIEND®B`‚ pix[434]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment463‘$~áIDATH‰åÓ=NÃ@àY¶p…|„½%¹ G LaÅkq1ç$Q¤ÌReŠÁÃQî{  !$¦ý4ÒüŠ“ÈòË:15aª2-4wᚘÎ#ÓìL§KÕ‚÷5µUÅcm¹okE<ÝIðê ò…Î@—óm°°‚ù·¾¥­Æì^N²¦ +xƒ¨ÃE½¬¶ü¤U­Ìj[qQ£-8W³Ñõ©^me ¬GÜ8Y8á‘d=²> )ºeu:å{^”»3§¦õzR;×8ª³¨$LúK‹g݉•É"{S˜ßwœÂ¨”œ«I‹’«Ö7:ž¦œ–ºrk[0‚’+ð& ý¡F­BÇß*–Ux×ßT]«®ºêªÖº§½—)¶¾IEND®B`‚ pix[437]: xres = 0, yres = 0 ‰PNG  IHDRI!½¯»F pHYsb&2 tEXtComment474[ÚµIDAT•eÏ1Â0 @G*&øAx#’yc·Dbà|¥#_(b`MÅ’J‘ÝTi%¼ølY– \¢w$å9l…ä38å +JRR‹ÜáLÏ„´›»é ÌJŸ'¦Ê”‘¯˜Zá˜*áÈ1Nô<¾…ß…~EWøüãCx_踃M€«ì•‹”–äKe¸rJ- 5¥ B[fÃÙ’ánoäùè„%®i+ù¶PBï™0ü ¤ÌûËë®™IEND®B`‚ pix[438]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment483§So÷IDATH‰íÓ=N!à‹iŒ´æ±K #ëy+p˜¸ ;·2o'³J äzüÉË «¡šäK˜ûsœ$ÿ­9R%¯o¾¯«SqMl_ ªb˜Ö®ÉVo »9Ùæ"®¯ò£¤æ_ #=ƾ^šÌG™ºÚ®Q³ÕLôÓpºn´Mg­«(xÙü·…¢S¼í÷ý¬Šv®ú“ÌO®ÆWõ´ÄYÑè C!jsLTŸGº^|i™ˆŠæÈTŽÐÕ{èã@Où–êCœ3Éd†zK3YMG3Ù°}_Y&¶Õ“7Øœ.ßL•«ŽUwÝu×]ÿªŸ‰9·§_WâIEND®B`‚ pix[439]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment487Ê—v IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[440]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment490µ3”üIDATH‰íÔ1ª1à‘Û¹ñ–¯âILÁö]á%ï&ñ)S„ÄÙÁ™ØXXlÚ’aþ@mP‡¼&]c­ yæuÇkè¨0™‹ ªè.á?¯^e­zQÍ­·‚¦†:T@¬GNˤ'AóFýɵy kÚ’:jÞУ ±­ýÝ‘ ÓˆçQO²îe gø!EÇ+ŒzD÷Š= 4´7¤ƒ¤4Ô¯$Eš'¨†fà÷9Ž=WW0¬ÖB:üJ9L`pRºX§„êZ„?ò[¸çÌš¸ç̹hÏLK¹zRÛÒŸùÍ]tÑoÔ;Dö®Ü˜däœIEND®B`‚ pix[441]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment494ˆØ÷ IDATH‰íÔ=n!àG(èB‰+¸t± Wò `å‹Ñåá”h7»xmŠÌŒÒ¸3ÕÇ¿æUhÏÕŸ­KZµ´r–ÕHšœ¤Ñ‹$ Jù¡‹¬Ô…Ú8-zM–Õ¬VA¨ æ%3Ú®ŠÖ„¦cU‰U“ŠÎÑjÓÅdOê,굫eTošOœšC§.0ºô¹àÔj)meS'é‰S×Ïìè}ozf´úC=¥e×4qzø´qr)Pš÷7L6þÅ›Zà‹©«]#<èìoûºŒéŠm nMÍþ¼g»ꪘä%ñzí8åþ…»Òé½k!ªf(USC“—”ú¹‡rí¥/}ŠþF*¢þRü¼DIEND®B`‚ pix[442]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment496fÖ–¡ IDATH‰íÔ=n!àG(èB‰+¸t± Wò `å‹Ñåá”h7»xmŠÌŒÒ¸3ÕÇ¿æUhÏÕŸ­KZµ´r–ÕHšœ¤Ñ‹$ Jù¡‹¬Ô…Ú8-zM–Õ¬VA¨ æ%3Ú®ŠÖ„¦cU‰U“ŠÎÑjÓÅdOê,굫eTošOœšC§.0ºô¹àÔj)meS'é‰S×Ïìè}ozf´úC=¥e×4qzø´qr)Pš÷7L6þÅ›Zà‹©«]#<èìoûºŒéŠm nMÍþ¼g»ꪘä%ñzí8åþ…»Òé½k!ªf(USC“—”ú¹‡rí¥/}ŠþF*¢þRü¼DIEND®B`‚ pix[443]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment495ÿßÇïIDATH‰íÓ1N!೉ó #–¯ã"/îµ,^/†ñ"xƒ-y‘0kç …Ú¹SÐ|a`†<?Ó[_£á÷º:Y±·³œ9PI€¬ž2HUP¾›Gj¦&»jZN´YŸx5W]üMÑt®>Š\ﮬécSWHVP¬šÍt;wMVÖK×MÑ뮋¨ñÚº¡jîú}6z„/•§.lõ¼{Ux¶poª^à^t=õÀS ¨{—¦rEñ¾º2änp&敽®eR5çy¤iæ ߪeŽ´×&h1í“jZ#˜_¨*”=ôÐÿ¬ŸG¿•_¾zÕIEND®B`‚ pix[444]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment496fÖ–¡þIDATH‰íÓ1nC! PW_ [¹@_!c†(¾Ö¢ÿ©:dér¢V=Gøã„ @Zu±=DU¦Ï€Û`ÈÊpðPS× jë^x &‡s²NÔÓ)¢Yý2Ù~Šúm2^"¯]R5¢Xg ƒåJZôµéJ¨FÓøJ¦M7Uµh pHYsb&2 tEXtComment500_µâê®IDAT•eÐA ƒ0…á—ÌÎÜÀÜÄܬ*.ì˜í@Tt¹>Õ\è}_Ú ‰E-ztq/à(߸"iNŠ Û뀔X“Ú?IEND®B`‚ pix[447]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment513ß§‚gIDATH‰cø40ÐHö;^ÙçxeßS`ï}ì_\²òxe±›üYàÇ'û—ìo²?ðšü¯«ã•=ŽWöÿˆ‘ýWO¾ì{Ùçxí(Yœ`T§ìþ’ÅïªQÙQÙá- pfHâãXuÔIEND®B`‚ pix[448]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment518Hu[™IDATH‰íÔ±NÄ0 P[7t €”_¸‘­ü ?щætÃýV6–“îÊÄZ¶HTñ¹É!q,&š¡RõÇNœ#À_ëhi6uyVù¦3ôk™ÄM'é@©|£)eä]KäçN×]ÑAרQBŠêêMå¢X[ë½³&½¢øDÎÙéZöjÞû†ö„¼“cC½¥w®è½®UÅäO:®W××Ôñч†RÕs[‘`2uÖõRsOUåvüJ³K@¸¬o¹—g„qíì¥ò)ðuP:ÇI¾êI*Gõ.¼HMPã— oRsiÆ(öûŸaò–f²ôÇØtÓMÿ©^„-Ç_‹i +IEND®B`‚ pix[449]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment519?rkIDATH‰íÔ1NÄ0б\¸tA Úp´)¸'ÁF[P£=À^€Â%.]XÆYÑÍ7 4hÓXòËä[™IˆW¤ß׌50'¨Môj}êj}ƒšÃqÓ³ªiçÙb%¿Y?Þ¶¾ýôFt5ºF²Íp%ôPjÅpAÊ'ÑLNUÚ4Ý!]$7=X]—“Ü÷ºFzd qoôZ²]Ÿ¡®4cu?é„rãý¦; RÛEWÎ]SZº.ïºúºiÓÕUÇò䦿I۶ܬ«iNæ*?Uß(ÐýH¾R¨P'Ñh¢¹O{Ñ5SèKÕg²\öò¤Ýî ë÷áæž%k¬ÒüQ­ê4Ò…ÿæ|Õ«þCý;æ±`Ú¯V-IEND®B`‚ pix[450]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment520mƒ€hIDATH‰íÔ1n! @[tá |#Et|+Õa)[éŠûÆF)Ònéáx7JqÈ&E):…‚fƒ 2¿«½þ@Ëôܹæ·c‹l+Ùª¬ÑÕ% ;*UŠè¨Rè0¦æS¤~hµ5wÀ–ÈÑÒTóRL ÒN¾Fár^]=ïšMEáŠ[^l…À¢JŽ"÷ šl[wžêøH_J•}EÕèj¤º%UóÜž¨ly¦««-«&Nv&5e ìLîJðŒ®V€GOœžŠ¥ ßh?TóFª¸ÿy[Qz°ëh¯ÉÉTÙÃ)BÅÖ—c¾ŒU~Ós®c‡¸íHsmSå©jï˜è«Ìtw¦ï2ª½ýRØŸÀí½ÔòIEND®B`‚ pix[451]: xres = 0, yres = 0 ‰PNG  IHDRF"Ê0’e pHYsb&2 tEXtComment524jîDqÈIDAT•mÐ1NÃ@Ð%RJSRXi.†´‹RPr„\eQŠÐù,JáÆ#YùÌ®m*¦zÝüÿ1r¾ ¶«ÈÏÈÚ–Œ‡¢ŒY[&&מqÖ•|‹áæê]i•¤0¤]‘ýšuÈ-øâÂøFÑÕõñ¤‹Òèbï:»Þyñ,½ë\E×…Ý¢†]r™Rxr}šÜµêd2¹b‹Æd„>h²äÁõš4C8Æ0D‰®ZL-îPÊ~Õ l³®1íW-Sý'ûÓ}úì6Ñ—XrËIEND®B`‚ pix[452]: xres = 0, yres = 0 ‰PNG  IHDRI#ðgM pHYsb&2 tEXtComment535òE¦ËIDAT•uÐÁiC1 `?ð%ÔD£¸‹5ö-cd…²† ´Çú#='ôÒêôYIáòƒ/x ÂH }'gù‹Æ‹#;©n,AåÉPÁà'ëdØkú$KŒØ1¬y":dÜö^kÞô»b—ƒ->Å™´KBVgÑ~9[Õh¦ýóŒÐ† M Ž¿¼9Wވɋ}ѽª±Úarõl‚*æl2hÍÃÞ’¿¶ÍlIVÒÜwñSÄFÁÕÿPÒâxÚðŒÿÈñÍÍÖýâ áIEND®B`‚ pix[453]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment543¢ÐvTßIDATH‰íÓ1ŽÃ Ð,…fµ(0Y…=V:cå ¾J¢)s„ í"m“Âò¨çÓDîL1B<†a€4FÄ*º º>æŸVטJˆæÅª02›¬ƒ®¼ÐÒ'øÉ¶ª¡šP¢ªFª>tµ"‰TÒeeÂôe Dܢ̮_¨Êî‹áެ¤V¿á>R5i˜F‘sÐt±-•¬ž«¤CøH—@² ©Ïê‰úóažëðí£®®èŽ©Ç¼×±:㸎vû øyߨÕΛtM®jãÿޫ饩²é¦›nJô ¹uËe·ÖFIEND®B`‚ pix[454]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment546Òº‚Û IDATH‰íÓ±mÄ0 P* àtj¯0¢lâU²‰ed€áVÑ(Þ *€Cž‘«H6¹ÒjDIÔ'³ _é´É¤ŠbS4¾/Ñ'Y4(“ª†95t³bV\©4èÿTÅ*ðí9kâÍŸø§jkÔQ ó{½JRpý(šÔZ8«â>kÍH˜û¬±%í$W:서xÖ$,WÒ7ñ®ê–«€·‘H±nd ‚¯•ÄÁ|j0²Þ+/ÓNòc|[;x4\Éq9=i¢ƒW5æ;ÂTzWëÜõ0°^ɺ‘©`LÉ7ÊV@d¤?žÓ({€ãуð:Ha¥œÿ»h7©ÛÎÚž«<é®êW¹ÖþKÑ8”Ï4œT_ª.ynÖ˜U—Úa˜2rù½-+Gµ¯jŽ¥¬BOZg®Éõ©q*p Tl¹°u6r/9c«ò(i;w?ЇîLuh­vs÷ñ6¾K³r3#«',ª8—\+®Tî‚˼¨æó‚§À'ŽLÝÏé(”.X®ZBnÒ±É"·è(šå(d1‚Qýúžóc)“d=ÔœçÏ’õóô¯\9¼q­®i'>òmì¾Q¨#uð­ÀU¯NFjwšà »g c5î4Ù½k ÙÍã.ž ü£"à˜†ZöáS4£ŽU.ŽºÄ6ÔtµlEãõK©xÖK{ Â˜ye@vrQÍBÍŒ¨I¥Ì‹&˧'Êîe Â¥µÈïcµÒsÐ,÷·ÑwIõÆËßBÐpæL¤N$ ½®¢ži@¸õRŠâ±4ظ$jû‹´Ô¦‘"iúة×9eÍ;ÒåcÅ*½ U´ÊXµ“ƒÎ^(gê£.Ü]¨9öª2±,ëçH5i>UåÏ^“Pë †^ëÔèÖ'.•IÐ(Ò*RÕú4T ´Î¦ªNH­j»Ìé0Û¥EÒf9_ŽòF†«á9'©çõ“l×ÈY2š+r£×Êt éwIñ ÏgtÆ»¥†Åºˆ¢·Psþwµ—•6×è j¸8]QzX_êÙÒ1BsI=¥.š‹êöÿKÜ×{/ÿ¾ÒV§z}àÏaÝqñÎwªpµ¡Ó*‚ LUû îoä&7|IN•; etò)P®ø£½0~<þq¢ïı­ŸŒõY}/íWÒÉ©Š^3iïŒM‚ª’¬e¯V[“ô¼Ò˜ïi7Ì‹bkÖA¨ i5¨Ä:TÚðrÐ{™˜P©Šj»S]ß߀ W’4­V\¹X§·' ²á¼Òµ"CþƒÀö‰hÛöIEND®B`‚ pix[460]: xres = 0, yres = 0 ‰PNG  IHDRD.¹‚# pHYsb&2 tEXtComment565y…±ãXIDAT•ÑA À DÑ9ºGËQ<Â,…ŠíÆüB+¶Y=2„@¢s–õ”EEÊšJRª#£@J ÔQ,ÒŠÊVzk Ž2ª(Pù©ØÍh.»/¾øÇ§.ÍóÜo.린IEND®B`‚ pix[461]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment5684Í^OIDATH‰ÕÔ1rÄ P9΄.n·È WØ›á-r-º½G ¤ÐˆHxÒñÕ‡‚Âo0BÑXþÜ$žt„s ¬’-5®U²NõÖÚ£M·}­í° ßi­Õt¥µ›OZŸ÷Òò­´á¨F#+6ó¾Öžlý1È$g ©-¯_Puëöÿ¬aóúD¦zdûò6fX`_Ê–-¨É& ÍTVSXue^Ò3z:Œ5;*×g ¬Ÿ vMä©Üw¥ ”I¯¾A¦cÖ-Ò¨k‘Š%£€7x¥ ®%[ÌO 5½†>_ ->MÁí3í²A•©UÎxÇZްVW[Ô€ßB2Å}ÒÚ$T)ž²^|¿¦B¾¢˜­Õ`GkêoX[êë;GOýÀʹ9ªqy* óÿ­õÕÝ·îø¼–jO‡¯°êæ€]ô^ÌÿTDÿ³õ±À0IEND®B`‚ pix[462]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment569p3ýÈ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚leptonica-1.70/prog/recog/sets/train05.pa0000444000175000017500000007410112233525560016341 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment0¯ó½ªVIDAT™cøüÃ?Æ? øƒ¡†áG… Ç?6 þÈ0<üÃÃpð³€q#7ÿc€cf fâF(ÍU Á< dÈÌ5; vþçÿj6çHÝ•ÏIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøßÿƒáû†?0|üùƒáá †Ç,ƒð? †v0æcö Dáv nþÃÄ`s@æÌýøáÃD ]Ì?þ³ÿAÖ5][ÄÄIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ó½ªSIDAT™cø?ÿÃ?æ ?0ü0øÀðáCà 0ü#Àpˆ›Á˜‚ÿA03 WÔÓÄÁØ€á!м@s?@ìÙù¿ÿæ*7ËuöIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÇþáã†>0|øðáá†Ã`lÀÐþ„À˜3``f 87Ã0P?È y|`øÄ? v1`øÏþ0\3ö füIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªHIDAT™cøÇüá‡ã†>0<øPÀðˆþ0`hâæ?`Ì Æ ì03Ãôš2ë!Ô\??0üâì 12/rDo‘IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRï^¸Å pHYsb&2 tEXtComment0¯ó½ªQIDAT™eͱ € EÑ‹$–Žà(ŒFÃdÆE$.ðK òâG-,NyßCQô ÂŽLµÄÙ{_)·…¢ÉA|M?Eóg4ÞŽÍUß3ËÏ‚.˜e1Pغ3IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªOIDAT™•±€0 ÄÄQ¤„Q2#d æâ2I6øt.|6P¨û—ðUØ"tˆ)1¬Ñ­Ò½rúÎõå¹Ïo:Òu‡s¨¡­èyϦOr2ÕÂ?k£IEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ó½ªQIDAT™cøoÿáó†?Œ>$~`øø£€á!þaÅ Í ü‡†ÿaÁPqó0>üÇ€á!Í™ýáÆŒ;ÿ÷PM5ªàá™ëIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ó½ªQIDAT™m̱ €0 DÑC.ÒfFc‡ –Eˆ²À¥sa98‚‚‚âu_3&„^Ä Ñô@×ÕÅ2Šgœ!9~ÉÇj—úêñhaÄ—ñ×pá GÇ3jôC;IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR¦cÉó pHYsb&2 tEXtComment0¯ó½ªTIDAT™Mͱ €0 DÑC¤£Í(‡1Ò¢Y Ä"d—WX FB@ñÚÿÑ•èšpª`£`gÄÊ€lŸbÀÔþ«¸|³ˆãQMP½¥LàBØ@´Ñ?3/ol0 fæ}”IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÇÿáó†Œ>8|`xø¡€áð6`há? íØÁ˜(Ì TÛ Æ3ƒqÃÃ>>Ú´ïûù<1áÐDÔ9IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment0¯ó½ªAIDAT™cøÏ~€áó†Œ@üðÃãññ`ÜÿƒóÀì Ô×ÅÇ¡æ=šýñ0Ð}üר2ç®IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøÇüƒáãüð£‚áã †‡@X‚á07ÿã€b8f†âf ÌLJø P?ƒÌ™ýãÐ. =ÿ€öýïÿ<*7¸õ»ÈúIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªHIDAT™cøÇþá33~`øðáÃà 0þ íPÌþ‡‚ÿÀPõÍ` 5h&È\ù??0üÚ÷Ÿý[†3EÞÄïIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment0¯ó½ªKIDAT™Uͱ ! CQ—ŒÀ(Œv=“˜1ÁuAŠLů´?ÜVs’ >}¨ kưŒR¨—ã°+ý¼ÜlÝJ|O³ÁÞ­m;€ -íIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR ßÒ©ä pHYsb&2 tEXtComment1Øô<+IDAT™cøWÁðÇ‚á€C}£D H*(ÁðA‚á4pø› +BœIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô<$IDAT™cøSÏðÁž¡ÁžŒ€ì ò ½^ 4á^Ä„IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yÙ pHYsb&2 tEXtComment1Øô<0IDAT™cøgÇðÁŽ¡A„È1ü°cø!Fpœ CÀSÈýÀÇÐÀ/ä¹ñ]IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô<)IDAT™cøgÏðAž¡†~؃Ð ’Ç@öèè‡=B=ˆ!2 ¦”|”ZIEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cøgßÀðˆä Äþ óñèýÀЀ ´š,$‚‰a©IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR{ª| pHYsb&2 tEXtComment1Øô<%IDAT™cø/ÇðCŽá€ì~äð1@À6ÉNF¿óõ§IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR ŽzA pHYsb&2 tEXtComment1Øô<'IDAT™cøcÁðA‚ =Š€Ñ’@EH,ò 1@Ñð…%´ÙIEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR–ïØÒ pHYsb&2 tEXtComment1Øô<#IDAT™c8ÿ¡¡„Ô1| ÙÐ9†L L ÿØY'$¦! µIEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<0IDAT™cøÇßÀðˆ17@Ù?äþð#ayþA™Í ´@ä†àü+¡6¸dIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR 3òÅa pHYsb&2 tEXtComment1Øô<$IDAT™cøoÏðGžá< }gøA.ê}ÀÎÿRÿ[4ñIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment1Øô<2IDAT™cø¿ŸáŸ<Ãyz ÏðŽìÁHžáÙ#!$.D}``8ÀÀÐÀœ´–±ÅIÉIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yÙ pHYsb&2 tEXtComment1Øô<"IDAT™cøaÇÀCìØ1| =@C ôá==ÿüÒ™IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment1Øô</IDAT™cøoÏðGžá<=°gø ÏðÆä±!{lH¤ñ?C Եўé]ô´IEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment1Øô<1IDAT™cø/ßÀðˆð700@ñ†Šƒ1?–'ƒÌco`xÀÜÀ´¡±4É+YóX&IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô< IDAT™cø'ÏðCžŒÀlÒ=’gø4„‚($š«×IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆]IDAT™%̱ € „á?±°t™DWac´²dW!a‘’ˆÌåëîŽgy-1Š$Ï•ÁÜfCçºC'Y·6§±ý;ŠöUVû[ywhó¨x"?:u¡êÖ”2ÏôÆIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aý܆^IDAT™M˱ ƒ@ÑA„.Á¥pqTàÜÊR‡hàœ ¾×%´zÙG'j+öIÌE,5±ZTxÛhù¯$d»Dø£¹‡¸žâìmH—øØ–Åoù†F¼B_t’7ºh)9ÒIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment2Aý܆YIDAT™MÌ!€0À.$Oà)ôaˆÀ—êøÆðˆá £†4W×¢nBé…; jY2ÑYhðIÀšˆ]D•P£yóx[ý1y&®B‘~"¢ûïìô”þ-¶»£§4IEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment2Aý܆SIDAT™=̱ €0Á(ƒQØ 90¡b ]Šp"ë:Û´Y”Qd;v±&±e1gº`üdÑËÞhƒx¼m“ù«.PÜÎ*ê!ü}¢*˜oIIÅIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment2Aý܆MIDAT™MÌ1 À0@wÊX aR*aA)=ÃÈöu’N²dÙÈFâfNMÍꆊ0. ÝQÛmÅNëßþÏ_Û0Bàaeu/v4<â5sïIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aý܆UIDAT™M̱ € DáG,,ÁQd7;*KGPãØQð‡ÄÄâ«îòH“H£ˆN‰íô±¡Ûþlo.yju5ƒ±N™E^¬Wèžì¹“ýi§#€4œOÍœ’IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment2Aý܆\IDAT™-̱ „0ÑAÒÚJ¥¸ €èBZ²D#¿„ fm¼l4܃ðŸP'ò,NOüÝš#à4ÛRY“e%Je½xB}Ý£qM†¯†*¢é£ênÁ-Ü„1i¶IEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆[IDAT™=Í»@@…áß„Jp+QË– ³;m­Nn  Œu0_v½S'ãD‹Ën¬HÂmzÅ`D7¶¨Q’S[éœS[Ç`”ò¬ì©l1?᧯ À 'd¿œaIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aý܆VIDAT™-ÌÁ € ƒápG‘ÉŒLâ(ÖMpŽøc<|/yI[µÅª³Õo$äð“.DüŸd=è&1ºl´•Í*»”™ŠB^ô¸ƒ†É:»_J6mÐVIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment2Aý܆YIDAT™cø!ßÀð½áñá†þ‡ ó40ìÿ ìÈøC;Pî?âF nbþ†@3þÙ70üùßÀðóâÿ@|þG2 á÷ŸK‰3º…«rOIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment2Aý܆NIDAT™UÌÁ €0CÑ”<:‚£¸™D\¬nÒ,^z(ê—âA»%Ñ1X9Z÷ŽüÒOø¤nKtŒì®“Õf«.hRÁYù•{‚wŽ~¹|, “èl…IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment2Aý܆\IDAT™=Ì¡ €0Dá× ŒÀ(lF®Š1X¥Ik4A`‹«h(?! >÷îh£ÈƒHN,^¬A´Ä/÷ àM”5Ö7Ûµ^\öQ'3‹Rá¬b/âÈb³VîÅ£Ó ç-šÿ’âkIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment2Aý܆NIDAT™5ʱ € áK€ÅÑ4¡` WÑŠ5 ²´°yÅ‹¿X|ÝJÜ…=£uÔ~k#Lù Ž4†‚"oÂ\˜xÄåȨ-Àdñì˜%OWdzIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆]IDAT™=̱ € EÑk,,ÁQd28‚«üÎ5`ì(ˆøˆÆâ/ÿæSg£LFŒäÓ{t™_ßÅ—éžÔ5õ-È(úq/²uƒrÃU!õ8ü§¯n¿ìÓ‡29‘ÑIEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment2Aý܆RIDAT™=ÌÁ €0Ñ )À,ÅÎä‹%D<äªxBâT–w[†6m•M’?×%Xº1WÔlj7ê jÔÉ(3ÜÎbì’Õû†{y{Éñ/7:™4IEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìYIDAT™M̱ €0 DÑC)Rf¥ŒÂ*‘;DÁ¦Jk‰&]¸H¯:cÂÁMa¯°¨hŸSºó–C2j\ïöÀÀ%&é'/ºÉúaê¹Ú”-5#üCJMIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úì[IDAT™-̱ €0CQ£)3Œv»P¤d¥ Ö0„."8'Š×œüïLÔH”‰8 ‘I¬Î~ºK.9ˆGûÔqkÓë‚Þ¸,Á-.6Cª†müÚÕŒ6ñ{ó<ãx$q§IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìUIDAT™MÍ» €0P£)!«d4¤¬eD‘5Ž n¤Ã„(^ç<–ˆ>+Íêg7"¶W#Ne] ÄÁаº¤ŸìõV´1/ÚÖG¿ð¾33-ÓVIEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úìXIDAT™MË!€0Ð&H®ÀÑv’+±LìMØ-˜aô£&žø¿-,-'‰R#²¤ß½½É-™ðé÷xf‹àwÉ:2)ß-bS·DÕöùu=Ô ÷[ÀIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìQIDAT™U̱ €0Á“]n 9p[GDèÑ€+™„`’Óþ+’åɪ<”ÏÎÖp¿ ªuÑýÁv[ä¡K óO†•èýÊsß?¿·7„š«\ÍIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìXIDAT™MÍ1 €0 Ð/{Ö›HppôJuòzŒÝêˆHx„OŸ ND«ÄÆò°ŸK‰qŠöz"\=ªÅÌ—Ïî@ê/å½ 3‡éV?ûÊäþ7TC aIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úìcIDAT™-ͱ Ã0CÑo¨ÐÑh%† ¯%#EÖ ΕUI¡¯8€GÒ³ˆ$´ˆ†ø´Ê¦Ê•ãñó=%æaÎ çƒÊ©Â0o¾¶>K½¢Ý³»§½½åÿ{w¼ôõ…9†ãÿIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úì\IDAT™M̱ €0 ÀG)Rf…lÂ*YQd-Eʬð#˜Ž)¼SQ\a¿ßxWÂ"Á…hQ!±ÿø<Ü)—uœ:÷Ì †å©P%<.#h%YAÒmÓz7ñ§Ã<9*IEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úì\IDAT™̱ €0@# Ö`´ì’‚2+R°†# Ú”ˆxœ×øýF›‰:ĵœ ÈuŽ!àWî…ð,ú1õMÙ£Ž[xnÉ;e‹n›:I‰_ä;•žŒéüIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment36úìUIDAT™Mͱ €0 DÑ£¢Í(-+ Ì…¼H \é"’9C“â5Ö?s'¸7 S]4ćˆG:1Õ»zÏ»W)¿Y`r,º§ŠS­ bhKýŒà €Ÿ?Yfæ\IEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìYIDAT™-Ì!À Ð.ä®ÄÍ&“»RÉ×`7øÉ ‚„†xâç·EÛ s7"‘¸ KøY˜w–þ,Yñc ~Äç¡x>Ë3*0À@ƒÍB2÷Cà8‘5”`knîIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³FIDAT™cøÿðÃÿH¸Š øÿAÂ?>0|8øá3Píc ~ÄǸˆ  ˆá愚 Ö/Àð$÷Ó¬Å=é9jÙIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³NIDAT™cøÿÿÃÿ‡@|Šq#3"ð?ŠýâŸ@5¿CÕ6C1}(×Ï ÀÐÀÀÄ3`æ‚Ø @3 ~0(0üÿS·²DNêúÃIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³;IDAT™cøÿðÃÿƒP܈„!øÿâ@üñ ?âãÍÚ¡˜¨ ˜×Ä  @ K9Žº¤¤ÏIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment4¨žy³9IDAT™cøüÃÿv fbf( Äÿ øþ ÄŸø9¿gG¨‡á  0€lÌ|ü9–2 »=\IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿð„âF$ÌøƒáþûTóˆ?ñg ~ÄÇA¸áp0|n@2„*~0H0€Tý`°P¯>Ŭè5ÂIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³6IDAT™cøÿñÃÿ‡@| 7"aF4 UóˆBña(nf(`@ÿ f€ô4@ð5¹>O„¶HÓIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment4¨žy³DIDAT™cøÿüÃÿãPÜÅìþ¡aHî'âç@ü¾¡g?Ë3>`€ÿÌ ¸ùœý!ˆþ3$ú@9º_­™£IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³@IDAT™cøüÃÿÃPÜ ÅÌü ÃÄ?³1PÝw ~¤vs00ÀÀ¸0føÀð‡¡Œÿ7±8d;oIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³CIDAT™cøÿüÃÿÃ@Ü ÅÌüŠÿ@ñ þ Tóªö9Ÿâ~ æg`€„™ ÜÄ  ?€â‘Ì8õ‹ðrIEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment4¨žy³FIDAT™cøÿóÃÿH¸Šøÿâ>0|âÏ?0<âç@|Èo>PÀÀÀ À€ìÿ@qÜPÄ ÀÄ<Nú¼IEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿøÃÿÃ@܈†?0üƒa† €øùòA¸áÃa >Äí  @,Æ€ìÿ@qdü(ó‚¥7x–ƒqÇIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿüÃÿÇ@|ˆ¸Š™øÿâŒ@ Tóˆ?ñg ºç@|üð†v ÝÄÈn^#7|`øÀ Á `>¹¾œíIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%VIDAT™]Ì!€0DÑI**{®²Gƒ *¹Ò¢z:ì6˜ª.C Ä“L>znúÍþ:©eZh殊RŇþ³~"ÿ‰¶ØìI/.8ÁŒ@Ì€áóþ ÄÌù0<þàÆÿ0`àÃ@Ü ÄÌ@ØŒÙzø`h?|€á;Ø<E88¦…ÝŠIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ß™I%RIDAT™]̱ €0 DÑ‹2#0 -‹DÁfG Î 4¯°Oúèap|/Re!®AÜ/_çŸÚFœnSãg—’<*uˆ-;êÇÆ ú4QSÚÄYIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment5ß™I%PIDAT™U̱ À CQK”"ƒÆk(Xã"¸ ˆ J‘â5¶ôa'aaó%ÊEŒ¹™mE_­D3¢/NLÇO—$Aß'ÞÒˆ,)«w¼ým]3ö¸ä"1IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%VIDAT™E̱ €0 DÑC€2š7AT¬‰‚5¥HëÒ9GH¯°|úp8…nThWDüœ·ñ—›ÞC+&E2|êrÓ™Ø-–W§A¢eëXÝ>³Rµ\¥IEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%SIDAT™U̱ €0@£)3«d3R°–Gy”"íȯ†â¤—e?ü& ²}’dÙ‰>—÷Ž,­N§XÅðŠðÓ$)êe#Š6W#Nýa!üà7ÔVQÉIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%LIDAT™cxðáÃ(f„bf –âÿñ{ f‡ˆƒàáŽ?pã÷þ£áv fÊ!ðöƒ@Üx€¡d?ØLÞA6 AÄõöIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%TIDAT™-ÌÑ €0 Ð+ýè§#¸Š›‰ÎuàG×Hq7¨—ÄG —††_‘*MvbLâ™9c§Œº¹ItÛÂ|‘,u9¥(s5M?ËA\Þá]+?.í6ž|PÚfIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%XIDAT™U̱ €0@G)(lÂ*Y%UÖb# Ú§{‰HÁ 4ר²ÑáȰ° quâþø*ñívŠerzBðS”KCF”ª]-ĦÎú[øe2<®gÑIIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%UIDAT™e̱ €0 ÀG)(Y)›!D‘µ±ˆ#0¢¡›ÐQ\ñ~½¡7¡øt.¹8¬Ù­å¸ËBT%6ͰóouSð>½2Š¥³ï%þ÷Ä5ò%<’ì´IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ß™I%TIDAT™cøÿ·áC3"ðv –o`xø¿á;?°bþ†Ç‡ø`Ãó ï?00üÇ‚13?ávêáêmš}höƒú½N5Håe޲IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%TIDAT™]Ì!€0ƒá™˜Ü•v,<‚k5Ap-\`37*À ¾¤Ékc)t>¢K6Åe·õlQTßZg/óoÀa«sxEw£7©‰mòïšõì59Ë¿ÏIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ß™I%SIDAT™mÌ» €0P£+RÞŒ# Ö1+$¢€.X :ŠWùƒ¶Ñåcâ’‰£§D/éÍêB¬…ؤ~bÂÔKâÚùD úžõweÞ@Ç4#Ú”‚ÝIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%QIDAT™mÌ1 €0ДŽÁ£Øƒ "^,âE ®qû[ÍP7‡ „ B(s²ÁñtZm²ì.âRÁm-ðë´M@ò&*±ýQG"f¾{Ê9•19¶¨IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%RIDAT™cøa€á#3@1ˆÍ Ä ñÿ@\ÄìPq ~ðàÃà ?00<þÁÀð âFªa„âv žæƒ‚ôƒÌæ?À´£8»qpMFIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment6FŸPIDAT™U± € EÑK,~çQ\MBaÉJ KWÀ ´´0j(=9Üâ8š£ÖÀ2“B¯ŠÞ~œ@`¸ˆ,£†2¾ýjG…TØ"‡ñø « £c7ËIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment6FŸRIDAT™uÍ!€0DÑ•½ò¸^«¤‚k@¸@q˜â‰ÉîÎrFq ¢#ö"¶ÕfËÎyñúŒI^ž…ÅÄùáïÕI,¾kþÙ“n…Õ*l:Ò©èIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment6FŸSIDAT™U̱ €0 Dѳ2+x´Œ‚”*‹±€é\ ÀÙÅÓÖ7–t„wÜEqqÓL¯•‘ÃÞˆ Ü ¼K(ÀÏ,ZÎà_r6ÁvmörJ8UM¹ä<IEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸMIDAT™mÌ= €0Dá/–£){±-¼Fd Û¤ (¬ƒ?Å×=r"Nk522'ðH–âÒË«þlíªsmµIƒ~G»dz?O϶ê|IEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸNIDAT™E̱À CQqYã± “±‰ØÀ¥‹\@qrIñªV!N4„8 ó5ØR¢¯ªhˆzq{„¡RÿXêÓïµ }\7‚Þ3Nª •fIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸYIDAT™5Í1€ К?8z$¹ƒ£W*að$\ãâ`À qxSûÑv¢ñ€¸¥Ðá”,ñ“|!|°È,º™‚$ÂÔ±òS,[çºC¢du¯0öªþ´•/‹b5æP ø*IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸQIDAT™cøÏ~€áㆠ>~8Àðø?âã kÿŠ™™¸ˆ1P¾ùƒ³ÿ``hÇÀ@3€ø0Èl ~øhÐÎò9M:ý ® IEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸRIDAT™eÍ1 €0Ð@‡­z4§­ˆC¯Qé~7…‚¦ “ÃÁXˆ³]ZÍØ™Q&eWç—Ü„}œH«S†~\ýT^MÛØô•ˆa|Þ}4¡yJÚ\IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸWIDAT™UÍÁ €0ƒá_:€+t´®"=8—t‘ˆ Ô[AQcÁƒ‡ï^ÂãÎâBœ$ZM슬¶Yq.‡(·È6½fÁ`ÞàûÐ"¡ã'w‘åã®$ª·-øç¨‘X5Úï¿÷ªIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment6FŸTIDAT™=ͱÀ @Š”YÁ£± Çdl"6p: .‰p‘âÙ–ñ81Žàvࡇ‚ª¬¾ m;‰#€hž´Ÿ¦!OüZ°P¥«cÔÝz&ÖÅû4’´ŸgIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸ]IDAT™MÍÁ €0ÀÁ{Z‚­ÄR¬&O[Zð‘6"i ÏbÜ`>îØå5Ï@”¸"qF‡Ôí>KýX³ÓH`լܲë€ùÇ àeAÝIêçöˈ{á µç5…öûüIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸOIDAT™MË1 €0DÑ‘€–^io—k ¤Økr@mŒãbñºÿ1q/ÄEb†&E<>‰ü³ªÇK}ê¶€?\J'šÔJt½çÎÍî5†Ç¢v†IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸYIDAT™UÌ1 €0DÑ/‚)=‚WÉíRz¥‘^#’ Ä^ˆ#ÚX<–av—¾ŠžÅ¹‰£ˆ*‘Ù=“sªÖEøL³ Ø F÷c‹„>oNÉV½_|ÛüãZt¼T4ÍÏÏIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment71—( ;IDAT™c8ÀÁÐÀBPÀÈ ÿŸÁþ?Ãÿó ÿ3üï#yúFÀè‡=}@Cò ÿcÏð¯ìèaIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( ;IDAT™c8ÀÀÀ `ìÅú?B°<?>À°ÿð†ÿ ÜÅì@Ì€áÿÁ‚ ad¹òÿ 2ÕÌÐIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment71—( ÄíPÌÁÿ@X¾áþaÁp`˜üûœ×-¬© nùIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment71—( :IDAT™c8x€¡AHþ1ƒýc†úã ÿ¨á?Ã~ú'Bì~€Ñd$Fü`$ †ð•ã^RúIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment71—( 4IDAT™ch``"F0bf°ÿÏPFÿè>Ígø/BÿìAèý€¡0ô ý©#ó!MÇÍKIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( IIDAT™cøÿÏáý† (Ø¡ùÁþ@üñƒüà û`øŠ›¸ˆÙ0üa~þÅ?Ðð4 T  5 ý¼=IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment71—( :IDAT™ch`@@Æþ‡ òì70Ô·Cðv æ‡à@üG‚@ñ,ø¬Ö¾”±&Ú ½"IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR]³ w pHYsb&2 tEXtComment71—( 3IDAT™c8ÞÀ€L üm öÏê1ÔŸcøD}`$ÇðÏŠþØ1ü£8PêO¤ã<ÍáIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment71—( AIDAT™c8ø‘¡„@€„ä2Ø?f°Î`œá;Ãÿ~0âgø/ÏðOžáÙ3ü€¡¨è‡<Ù3ü©x´FÍžÚIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment71—( 9IDAT™ch`€Fâ?ÌPÿ˜áÿs†ÿïþŸgøßÏð>Ãy†`ôˆì~€Ñ"ûï?)!„:õÐwIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment71—( @IDAT™ch`dh`€F†ùŸþÑc†ÿ‡þgøßFü ÿåþÑy†ò ì !  PÊ„þØ% &ŽRÚ@IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜\IDAT™U± À ¥ d„0£ Qd-¢,ò#PR (†¤Iq–¬¿·¹ƒh›gWK”9:‹ÒãÚ³QÝËô“hÓœ:=ðÖ ãóžå=qêëÚϱëûn2fÜÑV‡IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜[IDAT™5Í!€0DÑO*½Ro†@ ¹ÒD%W€ôÅU4À.ñÌd2CõBqBî„”…XL`þLjÔ|9qÍn}Lx%˜Ñ.ô¼¹~ºS›ZuûHíïäo6¿nÇæIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜WIDAT™UÍ¡ €0„áŸT Y©£° AT²ÒK*¬Ð^‚yÁ0ˆ/g.wÄhø`4Œê™]ŽÈ”Ï*‹6Kï%Q:]æ”jP¦ëo{h7´ßÞ¯HvÉÈ0õ«W·IEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment8¡(5˜SIDAT™-ͱ À DÑ‹((UOJ‘’•ˆ²ˆ³t.Rä)^åo¼#–ˆó%šÉX€²e‹SèË¡é WWkÑW߾͉"mª½cK›?Þ*KÓƒGIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜YIDAT™UŒ± €0R|ÉJa3PŠ”¬äT¬6øò‹8Bç·^¶FôDܸœ¨žq†Ð¾ˆCÿ}#¨åñ‘¥@‘$lÀ:þÔx·ZWG}×Î0>J‹/ÿƒŽGÃIEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜SIDAT™cøW€áû†ÿøÿàÆíPÜ ;”?À Á@˜†600~ÀTËÀÀÄü? Èîcy>ñïÇ@;Ž\º6ÓËšm*IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment8¡(5˜^IDAT™=» €0C(R²BFË(t)Y)ˆ‚5e£»"B8 Q‰f §âÏ¡w¢ÈSf‚¤ Ê!¡®ò0"›è›Xƽ?{z{ª6Ly|lƒ7‘éË •IEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜cIDAT™MÍ¡ €0Ð#¬ñ7a•Ž‚C²¨JV8‚¨-©©h(G@ ^.?¹ÜGkDí‰äˆc'b"BñØ>“<÷Zˆåõ(©# ”ðÈ£!Ò’©o˜«\ÚX‰¬âÞŸmà ¹@@ûÜØG·IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜YIDAT™-ͱ À CÑR°£1B¶`-"ЬqQ¸ò „r@Š'¹°lF,ŠðXæuÍwßf¾\= ›þ}%»Ä[½§‰bP:Äile¤¥õ¼ö}aýõC>~5ªºá%IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜]IDAT™-ʱ € FáǬÀhŒbgÉ®¢±°t…K@¬ÄÄ€’ËW¼ËO¶B2BD8¢çLŽ’`ï6íUÿKfó«ñÊ¡îAwA#¼›=¶H3u¥zÔ¥ÆÖÖo<’½6º¯IEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜`IDAT™5Í¡ €0DáGÈŽÀ*­d¥Cu&l ¦$üÐ >÷rGu¢ô"wb "&±fßÏbæ,¦S„]hÉúd}âå‰Á:ÁÁ•f¬?ÿY«íÞâ¸ìË6ŠÓÿ¬4!1¤5IEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜XIDAT™M̱ €0 Ñ‹R°FFË.¬J‘5±€K‘…E (žô û˜YШ ­ÜVè?-\V9U´(‚ŽQb†@SØ'¾lþíîÑ #:ïo4<ËN—5µl^ÖõIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜cIDAT™E± €0((Y!£ý*T”¬DAÉ –²@¨Hñ"˜‰âô/¿ßF­Ä=¥'Ε¸2±ÃÑÚf±‰¨[ì~dè¦iHQžüzÑýgqénÊ"’2ÊD¸úÔýÂþ=TþŠOIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜]IDAT™-Ë¡ €0á#ˆJVêf ¬ôP]£-Á@Òþ&Ÿ»£ âéEêÄEHžðx–f6[ºu±I؇盬؇õà2 U©1ÉÌ`…ˆ½øÏâ˜ÄÅ/†×àúdÝ)ôc.¶Ì}|‡8«À2¦N ŽÐ´®¼¥^ƒ‰åûî;ÿ°Rމ=Ë¥ïIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/OIDAT™Uͱ€ CÑtŒá(ºkÅ£p 8€ŽN¿…§¯Èå.Ñ\¬¬–­\­„ÐÛ‡^EJȨäAþ°…x`36k?,óUøœ«/þ¼89a&šÎIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment9Ö/SIDAT™UÌ¡€0DÑï"I´€¤¬ôA]IwŠp ⹿Kíbo"KlC"ØBÐ#þd1w$Ð —Eº÷¯DuÅäÍÇ¿K§5 ›uÚ8£]rIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/WIDAT™UÍ1@@†ÑOJnà:{·-\ë±7˜D3B0‰(¯~\­ðZX%Ê,ÙÙShœŸ)d{-¡¬`œÜþIl¡¹Ðþ*G¸ãêÅ5ê¸_8 ¡=gIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/UIDAT™]ͱ €@DÑCKpË0³•ëå;¹Fæ:X¸dA6 ^ö‡Á}±¾ã"úT—0,?ÕSåhÅ@â0<ñ™ÚSš3Ä.úŠ/nT:h¶"ÕIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment9Ö/XIDAT™eÍ1 €0ƒá€CG¯ãÖk9¦8x­J/ÒÒ yb|ìÃôÃÍ*ÿ ;¤Z5ô¢\•Ç©´éŠ!é¯-r/Ï:ºÏ]IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment9Ö/WIDAT™Mͱ € DáK,,¥´cF£¤5,Fâ"°Á›¿0Á‹&jñ¯zž°…èhŒØ%3 ›Ãô“oxmê"59pu8SÀ°O“bQøèru&¨Ÿy^^‰9óamGIEND®B`‚leptonica-1.70/prog/recog/sets/train06.pa0000444000175000017500000007527712266537002016361 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment2Aý܆cIDAT™-Í» „0DÑ‹6 ¤:Y\ …@´4Ò°-X¢K$Íð μd42ˆÜŠÔˆˆø)ðX_s²ëŽWˆŽ*QûˆâÒ‰£·o Oزû„Ûì¼ùWÝu=œ1Ó‹*_ÀIEND®B`‚ pix[1]: xres = 300, yres = 300 ‰PNG  IHDRë«hø pHYs.#.#x¥?v tEXtComment4¨žy³GIDAT™cøÿàÃÿ0\Áð¿H3@ð?(þÄ0øŠÕ?âƒPÜÔÇÀÀÁ‡*æ‚Ìòÿ0XuJ0ü±ÿÞ¸:¤Ð!gKIEND®B`‚ pix[2]: xres = 300, yres = 300 ‰PNG  IHDR :e pHYs.#.#x¥?v tEXtComment5ß™I%WIDAT™Uͱ À0 DÑ3)Òfƒ¬à ²’G°7Ó(2YàJwÊ !ˆW þ!‚Xàÿ69%^»Âõsk˜^1Yqó@¤õÒLÅSÃ0¢«aj»zë"´ý=|÷šêIEND®B`‚ pix[3]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment6FŸTIDAT™=ͱÀ @Š”YÁ£± Çdl"6p: .‰p‘âÙ–ñ81Žàvࡇ‚ª¬¾ m;‰#€hž´Ÿ¦!OüZ°P¥«cÔÝz&ÖÅû4’´ŸgIEND®B`‚ pix[4]: xres = 300, yres = 300 ‰PNG  IHDRâ@È‚ pHYs.#.#x¥?v tEXtComment71—( =IDAT™c8ÀÀÀ HD²ÿh`àÿÄæ?l`øÿˆCq3³Cð?$ü‡ ³câüü_¾RÔ+jtmˆÚIEND®B`‚ pix[5]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment8¡(5˜SIDAT™cøW€áû†ÿøÿàÆíPÜ ;”?À Á@˜†600~ÀTËÀÀÄü? Èîcy>ñïÇ@;Ž\º6ÓËšm*IEND®B`‚ pix[6]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment9Ö/VIDAT™=ͱ €0 DÑ벆GËô¬•T¬áˆ‚# c'‚âI¿9Ìa¿ëÉXdHš‘äC¿YÐUïÆ!‚NSw‡ŒÍ·Õe”‡Qmháè/î> r%}ÄIEND®B`‚ pix[7]: xres = 300, yres = 300 ‰PNG  IHDR ÷»] pHYs.#.#x¥?v tEXtComment0¯ó½ªOIDAT™cøoÿƒáó†Œ?>ñ‡ †‡?,þ±`8øG‚¡†ÿq€1ó?,˜Œ›á¢ç [€Íûð£h~Ø}ÿøß 4cq=%IEND®B`‚ pix[8]: xres = 300, yres = 300 ‰PNG  IHDR ¶„°t pHYs.#.#x¥?v tEXtComment1Øô<IDAT™chüÀÀC@öAÒÑ0j#h`[¿)7&4ŽfIEND®B`‚ pix[9]: xres = 300, yres = 300 ‰PNG  IHDRâ@È‚ pHYs.#.#x¥?v tEXtComment2Aý܆SIDAT™=̱ €0Á(ƒQØ 90¡b ]Šp"ë:Û´Y”Qd;v±&±e1gº`üdÑËÞhƒx¼m“ù«.PÜÎ*ê!ü}¢*˜oIIÅIEND®B`‚ pix[10]: xres = 300, yres = 300 ‰PNG  IHDR‚ýqh pHYs.#.#x¥?v tEXtComment36úìXIDAT™EÌ»€ DÑeH-ÅÒlÁ!°- °…g’á%28Á¾ÏÊÙjÉêͺêqèôï&O泃Ûs²Þµó®96=CªÈHäŒÂ®Ð±\t4~£ø¹5­i“mÞIEND®B`‚ pix[11]: xres = 300, yres = 300 ‰PNG  IHDR :e pHYs.#.#x¥?v tEXtComment4¨žy³KIDAT™cøÿÿÃÿ‡@|Š¡˜‚ÿñ$üŠ?Õ<âà Üü¡½‚` Ȇ› @3 ~Åéÿ÷?Ê><}:y5IEND®B`‚ pix[12]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment5ß™I%RIDAT™]̱ €0@G)¾d$²°™‹<ÊO—.8 ÅÉzY~´•á”Äd#ž®ìóö,ênÕ j€þsÉ@úä(0'ì$ví9þ,|g4’æ,(œIEND®B`‚ pix[13]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment6FŸSIDAT™Uͱ €0 DÑ )¼VFbЬu‹$b—.Pà¢HH¯û>cdb$"v½À[A—Sçò,u2bSF$õy |Lê¶Ô\Úéº ý»/…Ç3³0ußIEND®B`‚ pix[14]: xres = 300, yres = 300 ‰PNG  IHDR‹Ñ pHYs.#.#x¥?v tEXtComment71—( 4IDAT™ch``"F0bf°ÿÏPFÿè>Ígø/BÿìAèý€¡0ô ý©#ó!MÇÍKIEND®B`‚ pix[15]: xres = 300, yres = 300 ‰PNG  IHDR ØÅ~b pHYs.#.#x¥?v tEXtComment8¡(5˜cIDAT™E± €0((Y!£ý*T”¬DAÉ –²@¨Hñ"˜‰âô/¿ßF­Ä=¥'Ε¸2±ÃÑÚf±‰¨[ì~dè¦iHQžüzÑýgqénÊ"’2ÊD¸úÔýÂþ=TþŠOIEND®B`‚ pix[16]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment9Ö/RIDAT™EÍÁ €0ÐlàHþ‘Ü¢kEzp Kð‹½}£¶xx„@ ˆ ®(‰X2‘JãýÖ¾$ 9* >Â;¾NÉ2ïÍ¡^õ³>j¼KÍA®ÊvÉIEND®B`‚ pix[17]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment0¯ó½ªMIDAT™cøÿÿÃö ?`øøñÃáPlÀpü 0´Ãð?v,¸ý 04Cña06bˆy|`ø4ÿ3ľò3Í9®ãx¸ôIEND®B`‚ pix[18]: xres = 300, yres = 300 ‰PNG  IHDR ‚£¼ pHYs.#.#x¥?v tEXtComment1Øô<(IDAT™cøÿŸáŸ<Ãú!Ïð²‡! ~ð3<àgXÀÀð€ Â¥IEND®B`‚ pix[19]: xres = 300, yres = 300 ‰PNG  IHDRdÔº, pHYs.#.#x¥?v tEXtComment2Aý܆LIDAT™=É1@@DÑÙ(”ŽähFâ ˆƒàJŲ~È*^~&£4Z©·Ö™îØ2½„ŸµL|-:”¨¬»¶bƒÄ¾qâ°>Ê ?ƒ2—^2ê\IEND®B`‚ pix[20]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment36úìQIDAT™U̱ €0Á“]n 9p[GDèÑ€+™„`’Óþ+’åɪ<”ÏÎÖp¿ ªuÑýÁv[ä¡K óO†•èýÊsß?¿·7„š«\ÍIEND®B`‚ pix[21]: xres = 300, yres = 300 ‰PNG  IHDR :e pHYs.#.#x¥?v tEXtComment4¨žy³IIDAT™cøÿýÃÿÃH¸ˆ˜ÿ03”f„ʃðÁ Ï¡ø8·Åš Àø#ƒ\˜nb ü Ñÿÿ´ºAÈ"|ËIEND®B`‚ pix[22]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment5ß™I%TIDAT™U̱ €@DÑZ‚–f'rØÖ•2b`ºbbvÎa¢,/Øeù܈øJÖ‹³ŠËÂä]¾·Ù4±71rX ~ËF’ÿ^b-"»Q:Wwg=Ñ :¶¶3”IEND®B`‚ pix[23]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment6FŸYIDAT™UÌ1 €0DÑ/‚)=‚WÉíRz¥‘^#’ Ä^ˆ#ÚX<–av—¾ŠžÅ¹‰£ˆ*‘Ù=“sªÖEøL³ Ø F÷c‹„>oNÉV½_|ÛüãZt¼T4ÍÏÏIEND®B`‚ pix[24]: xres = 300, yres = 300 ‰PNG  IHDRâ@È‚ pHYs.#.#x¥?v tEXtComment71—( >IDAT™c8ÎÐÀ€@6#Û?†âç ÿAø<÷C1Ã?yþƒ„À°}ÖG`ÿâõ 7n,„fzb×IEND®B`‚ pix[25]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment8¡(5˜WIDAT™MÌ¡ €0EÑK•]©£0 ¢k½ÁeƒÊŠ ^¡qÌÏ}ŸE]EYŒÄY¬BžŽWbß„Üh¶•!y§Ü”¯Í:ÄŸìÛå·F/š÷=èTˆ-â™±¼ŽIEND®B`‚ pix[26]: xres = 300, yres = 300 ‰PNG  IHDRã/ pHYs.#.#x¥?v tEXtComment9Ö/QIDAT™MÌÁ €@ Dѳ-K²Áƒm%X€-$lîÍ›ë,‹àáÁ@fB=8 —-=†©vóC ;¨Ž¯ È³@SçS´Mñ.Çï®\ÆÝì±H6—kMôIEND®B`‚ pix[27]: xres = 300, yres = 300 ‰PNG  IHDR ÕÛ% pHYs.#.#x¥?v tEXtComment0¯ó½ªOIDAT™cøþÃ?æ 0|`â X€ñá?PÌÁÐ Âÿ8˜ÿ1àÄÍpÌÁp†úþ±`xÄ ³(íb€Øù¿ÿ÷7¥{ŽömIEND®B`‚ pix[28]: xres = 300, yres = 300 ‰PNG  IHDRâ@È‚ pHYs.#.#x¥?v tEXtComment1Øô<1IDAT™cø/ßÀðˆð700@ñ†Šƒ1?–'ƒÌco`xÀÜÀ´¡±4É+YóX&IEND®B`‚ pix[29]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment2Aý܆TIDAT™EÌÁ €0ÐHÁQü“IÅÅÒMZº€7 kª„w ÊD#q¢ÅÎ>IØÑ¨ÞË&Ú5}Ü3Q¢¬†R —äJdð~»ã[¾9ÊÉ Í>IEND®B`‚ pix[30]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment36úìVIDAT™MÌ!€0DÑO•{¥앆À5ê°ÅU”%5ÏÌÎ,ÕD™Ä½ˆ$±)²æ‘h¿Ý.ˆ7ôÍ£ÿ´Ò]ÂÈ3+ó^òç,²é0ç4Óüo¨èIEND®B`‚ pix[31]: xres = 300, yres = 300 ‰PNG  IHDRiÆ pHYs.#.#x¥?v tEXtComment4¨žy³IIDAT™cøÿøÃÿÃ@܈†?0üƒa† €øùòA¸áÃa >Äí  @,Æ€ìÿ@qdü(ó‚¥7x–ƒqÇIEND®B`‚ pix[32]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment5ß™I%SIDAT™U̱ €0CQ£+®dF!»Q°–EÖHć ˜@Cñ:ûã "@‰AL\q}Ê$öªq"GêZà'Ë"֥εw«¾ûÓÕŸyÃ9‘ê-ùÁIEND®B`‚ pix[33]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#x¥?v tEXtComment6FŸRIDAT™cøÿÿ'`øSáÀðó``ø ÄŸø1ÿ(?bÇ 1Pþà†æ?| ~ Åj?þ8Àð£h3Ø^%B·2̇IEND®B`‚ pix[34]: xres = 300, yres = 300 ‰PNG  IHDRdÔº, pHYs.#.#x¥?v tEXtComment71—( 9IDAT™cøßØÀÐÀÀÀЀû?60Èn`°ÜÀðÿ9‡â~(æo`ø'À€ø‡=qøO}³0äv†õIEND®B`‚ pix[35]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment8¡(5˜ZIDAT™cøüøÃ㇎8ÀÐÃ? t;7å˜0`?ÀðH`b ˆ380´pªe`àá ò?À˜Šûd>éšóOþbó4[TIé"IEND®B`‚ pix[36]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment9Ö/SIDAT™MÍ» €0CÑKÅa4v¡ÈZ‰²ˆ#H™ pøHH>…¥÷dŽ ú,Ú$jE+›E-Ä6Àü3úöÊ¿ààÊéûÏn¹­¤›Hõ¡bÞëAŸ’6ñ˜:q`IEND®B`‚ pix[37]: xres = 300, yres = 300 ‰PNG  IHDR >ìµ& pHYs.#.#x¥?v tEXtComment0¯ó½ªVIDAT™cøüÃ?Æ? øƒ¡†áG… Ç?6 þÈ0<üÃÃpð³€q#7ÿc€cf fâF(ÍU Á< dÈÌ5; vþçÿj6çHÝ•ÏIEND®B`‚ pix[38]: xres = 300, yres = 300 ‰PNG  IHDRâ@È‚ pHYs.#.#x¥?v tEXtComment1Øô<+IDAT™cø'ßÀðˆqÿ€ŠáÅü@ÌÄÌPšõ€æ30€0Å’,ŽVý€IEND®B`‚ pix[39]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment2Aý܆eIDAT™-Í» ƒ@DÑ‹RX¯Jp ‹)Á­ŒäÜÂZ4°!Á „ƒ“͇ڋò¹?‰O¾%X ¼m´tyý gVGÇhîï­¨yo{er Ä-™›7Í“N~í0xôû4IEND®B`‚ pix[40]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment36úìYIDAT™Mͱ €0 ÀRd 2 £° UÖ Ê"²€éRažˆ‚âdÉ/¿a‘àN´*Ûpüt#\{?¥w",ÈJ\–ᯩIü„93’ò¢ž¢Žª?ÔýXøÏª:²ap-IEND®B`‚ pix[41]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment4¨žy³JIDAT™cøÿüÃÿÇ@|ˆ¸Š™øÿâŒ@ Tóˆ?ñg ºç@|üð†v ÝÄÈn^#7|`øÀ Á `>¹¾œíIEND®B`‚ pix[42]: xres = 300, yres = 300 ‰PNG  IHDR)' pHYs.#.#x¥?v tEXtComment5ß™I%VIDAT™cxPØÀð€Š™˜ˆùžÿ‡àÇ@ü@"~(ø`Ãñ çøþ†ÿPq?³Ã0P ;P=?Ëõ²Íhš}À¾áçÿ‚K0ªžkIEND®B`‚ pix[43]: xres = 300, yres = 300 ‰PNG  IHDR ØÅ~b pHYs.#.#x¥?v tEXtComment6FŸVIDAT™Mͱ €0 Á(XãyvHÁ\(‹±€KˆàDB¢¸òõôÝx0n”@Ü„3]© ®´nÔÏbÀ °)Å…LKª?mKžm”|®ö94:\)#ÎIEND®B`‚ pix[44]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment71—( +Íêg7"¶W#Ne] ÄÁаº¤ŸìõV´1/ÚÖG¿ð¾33-ÓVIEND®B`‚ pix[50]: xres = 300, yres = 300 ‰PNG  IHDRœÓû pHYs.#.#x¥?v tEXtComment4¨žy³LIDAT™cøÿñÃÿP|Š ˜‚ÿA1þá„? êÕ>âãjÚØ007°0@ Ãù†ˆYafÖõò1 êU‰f §âÏ¡w¢ÈSf‚¤ Ê!¡®ò0"›è›Xƽ?{z{ª6Ly|lƒ7‘éË •IEND®B`‚ pix[55]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment9Ö/_IDAT™UÍ« €@ÐIHVâhIYׂ¶–ÐÈ]h`fÅA<7Ôˆ–È Q ±ñ•0GÂ"mŒ?‹Ì4e %²Øu2ÜñÙ•[Õ÷ \›~èã}±#®ð{;fÏvIEND®B`‚ pix[56]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment0¯ó½ªKIDAT™cøÏüáㆠ>|øÀððG0<þcÀpøÿc`hbf<¸ 04ƒõB̘Y6ÿЮ?@;ÿ±ù,5°Ø“ÿèIEND®B`‚ pix[57]: xres = 300, yres = 300 ‰PNG  IHDR)' pHYs.#.#x¥?v tEXtComment1Øô<$IDAT™cøgßÀðˆä Äþ óñèýÀЀ ´š,$‚‰a©IEND®B`‚ pix[58]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment2Aý܆[IDAT™E̱ €0@G”ŒÀ*¿É$Œ‚°B$HIåñWèuraùÑW¢ÍDˆë$îJ졉L‚P Y  /¢k?ѯ¾É0xê^". ÒÏß;8KlùIEND®B`‚ pix[59]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment36úìUIDAT™Mͱ €0 DÑ£¢Í(-+ Ì…¼H \é"’9C“â5Ö?s'¸7 S]4ćˆG:1Õ»zÏ»W)¿Y`r,º§ŠS­ bhKýŒà €Ÿ?Yfæ\IEND®B`‚ pix[60]: xres = 300, yres = 300 ‰PNG  IHDR ‚£¼ pHYs.#.#x¥?v tEXtComment4¨žy³ÿ[2ŽnIEND®B`‚ pix[62]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment6FŸQIDAT™U̱ €0CQG€2ÚBÄb ,b68‰&4Ž €â¿°•ˆYVC°àýÕhhN,§Ä#gI nH®ìõc¼ˆƒ¶]×Ä‹4Ô" 4öIEND®B`‚ pix[63]: xres = 300, yres = 300 ‰PNG  IHDRâ@È‚ pHYs.#.#x¥?v tEXtComment71—( ;IDAT™cøÿ£À˜ÊâÜÀ Çþ7q;ó70üƒaù†?Pü @Âpq{ ZûŠ,‚2f·êIEND®B`‚ pix[64]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment8¡(5˜WIDAT™5ͱ €0 ÀG)³‚Gó*©X+k±€K)xcQ\åÿ7V7x3ØmxÜpER!Ń&osg.mì ) ÎI^ù@_?ùÔ–2SœÑì!´7†ðඉIEND®B`‚ pix[65]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment0¯ó½ªHIDAT™cøÇüá‡ã†>0<øPÀðˆþ0`hâæ?`Ì Æ ì03Ãôš2ë!Ô\??0üâì 12/rDo‘IEND®B`‚ pix[66]: xres = 300, yres = 300 ‰PNG  IHDRÆÞp pHYs.#.#x¥?v tEXtComment1Øô</IDAT™cøoÏðGžá<=°gø ÏðÆä±!{lH¤ñ?C Եўé]ô´IEND®B`‚ pix[67]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment2Aý܆bIDAT™-̱ €0„á,,]áíà®âN  KWR,\ãÜÀ2…$¾9>¸æŽ4ˆØˆ’C#çc\n‹T롘~#ìN»‘½ä òâZ‘:ñÆ;1wÍŸ€*U]¯s/ÑB~m"IEND®B`‚ pix[68]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment36úìYIDAT™EÌ«€0EÑËD¬M´@i)! ‚¶ÂP-¬Ã>‰"lâ¨÷A&<‰6‰­ k…4øïtÑ[XÅ›þ~£pxæôp=°‡4hÈaÁT°ø±ø¨c¡f}ªÙ2‚Šº,ÁIEND®B`‚ pix[69]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#x¥?v tEXtComment5ß™I%UIDAT™U̱ €0@£/(3«0(‹9¢Èaƒ”H?JCq-þD Ë´Ê&NÜÓÈŒ(…¸Q{Øá?U²˜:kCÒ.DÖÏ‘êÿu~“W;A.IY«IEND®B`‚ pix[70]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment6FŸTIDAT™MË1 €0ƒá” ½R¦8ôZ7xJ/Ppqk¨‚ßô'hF´YrÄ.%£3YkìRãg!G¸IÔ|øã^éÇ´)²e¢ê{âyW4>üx<,IEND®B`‚ pix[71]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment71—( @IDAT™cøÿÿÆH¸H¶?>ÀД›ÿAÿŠý? Åí@ÌÅüþAñ$ü ÃÄAêþËŸc9?ü·IEND®B`‚ pix[72]: xres = 300, yres = 300 ‰PNG  IHDR ØÅ~b pHYs.#.#x¥?v tEXtComment8¡(5˜aIDAT™%ͱ €0 DÑ((Œ–]R¤d¥ Ö0b”)"ÂYÈzÖ–‘>ã6ãi‘³®HâÙ•)º)Óϧ%(Á©•*,M:¬/ì’ÿé‘C¿Íþ®¦Î±ÙJa7RNÙ÷IEND®B`‚ pix[73]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment9Ö/XIDAT™E̱ €0 DÑߥÌd4F`”‚’•’Š5.bw”`#$Ч“,}síbl¢WQ»HAa&ÛL²ØâðÛÏ<¡-`î¶P^‡7ÕÄÆçôÿ‡hYhÒ¤i3ØA³1IEND®B`‚ pix[74]: xres = 300, yres = 300 ‰PNG  IHDR ÷»] pHYs.#.#x¥?v tEXtComment0¯ó½ªPIDAT™cøÏüƒáãüð¡‚áà †,þ‘`8ø„9À¸ŒÀ˜†Ès04‚ôüa °9æ}üa6dÏ }ÿØ H5:AÔ}¹IEND®B`‚ pix[75]: xres = 300, yres = 300 ‰PNG  IHDRÆÞp pHYs.#.#x¥?v tEXtComment1Øô<2IDAT™cø¿ŸáŸ<Ãyz ÏðŽìÁHžáÙ#!$.D}``8ÀÀÐÀœ´–±ÅIÉIEND®B`‚ pix[76]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment2Aý܆YIDAT™=̱ €0„á?XX:‚›È›L"®unq”)‚ú¢`ñÁwGDê„‚“X“±5™×âb“>r»Œ3w·ï®^Tÿ©£(äŽêŠ÷1¢kéôf ,†-Z¬IEND®B`‚ pix[77]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment36úìSIDAT™Mͱ €@ …áHŠ+³’£)®õÜ$àZZÝùŸ‚Hø —ÄjȪË4€š$ó.»ñ±Ðhf¿ì$ÙL;íSà?}2ÁUï¯,º˜3¸Œ6ÐIEND®B`‚ pix[78]: xres = 300, yres = 300 ‰PNG  IHDR`!j pHYs.#.#x¥?v tEXtComment4¨žy³BIDAT™cøüÃÿf fFÅÿ€øÿ€â@üˆñq nâ~ –bø3‡J3Íʃðÿ ‘y.Ž5ÃxéIEND®B`‚ pix[79]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#x¥?v tEXtComment5ß™I%XIDAT™e̱ €0 ÀG)<+°^*ký(A´.ƒ„ÞTH'Ù~ùq "G ižˆ^ĈÌÞP9n0¯—IEND®B`‚ pix[80]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment6FŸMIDAT™mÌ= €0Dá/–£){±-¼Fd Û¤ (¬ƒ?Å×=r"N(ü`xøˆT0þaÁpøK04Ã13ƒ1æ€cˆ:ˆ~Yøã‡ † výcþÁðþ$7ÝÎãÎCIEND®B`‚ pix[85]: xres = 300, yres = 300 ‰PNG  IHDR Ü0®_ pHYs.#.#x¥?v tEXtComment1Øô<+IDAT™cøoßÀðG¾á3 á@üƒ\l]üB@ýÊp¦-3ÒÅIEND®B`‚ pix[86]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment2Aý܆[IDAT™=Í»@@…áß„Jp+QË– ³;m­Nn  Œu0_v½S'ãD‹Ën¬HÂmzÅ`D7¶¨Q’S[éœS[Ç`”ò¬ì©l1?᧯ À 'd¿œaIEND®B`‚ pix[87]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment36úìXIDAT™MÍ1 €0 Ð/{Ö›HppôJuòzŒÝêˆHx„OŸ ND«ÄÆò°ŸK‰qŠöz"\=ªÅÌ—Ïî@ê/å½ 3‡éV?ûÊäþ7TC aIEND®B`‚ pix[88]: xres = 300, yres = 300 ‰PNG  IHDRœÓû pHYs.#.#x¥?v tEXtComment4¨žy³DIDAT™cøÿáÃÿP| 7@1ÿb0tøÃð¨þ!?âç@|¨§áC ƒÍ›[Ô/ÔÍÄ,´e@E»øIEND®B`‚ pix[89]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment5ß™I%LIDAT™cxðáÃ(f„bf –âÿñ{ f‡ˆƒàáŽ?pã÷þ£áv fÊ!ðöƒ@Üx€¡d?ØLÞA6 AÄõöIEND®B`‚ pix[90]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment6FŸRIDAT™=ÍÁ €0…áW9°»yèZ4]7àh£¾ÆØÃw üÜê8‹#174ê´‡¡†C=Ÿ=„xS¸6’]°TοžŽÆ>æ/ºÄ_vÈ/{Ä·Ó IEND®B`‚ pix[91]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment71—( 8IDAT™cøÏp€¡8ñþä`ØÄÿCq;ó#ð? þ#Á?ˆÄ µÿì:Ì3ÊøÚìbIEND®B`‚ pix[92]: xres = 300, yres = 300 ‰PNG  IHDR!™­Ç pHYs.#.#x¥?v tEXtComment8¡(5˜_IDAT™EÍ» €@EÑ+6²™¥ØÆ–an`a¶ñÀ“–Ç&¹¼Á]x/¬§‰#¬%‡ô˜¿+ËhŠnkÞÞȟľEgDc…É‹§ÇZï]±Ÿ¢´ñ· ® jžB?¥ëtIEND®B`‚ pix[93]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment9Ö/WIDAT™Mͱ € DáK,,¥´cF£¤5,Fâ"°Á›¿0Á‹&jñ¯zž°…èhŒØ%3 ›Ãô“oxmê"59pu8SÀ°O“bQøèru&¨Ÿy^^‰9óamGIEND®B`‚ pix[94]: xres = 300, yres = 300 ‰PNG  IHDR ÕÛ% pHYs.#.#x¥?v tEXtComment0¯ó½ªGIDAT™cøÏþƒáó0L¨`øð£‚áÁ †ƒ$ ø7ƒ13^ÌÆÍP 3ã!м‡? fÿ0Úñóÿù9|5ÙœûáIEND®B`‚ pix[95]: xres = 300, yres = 300 ‰PNG  IHDRÛ'yÙ pHYs.#.#x¥?v tEXtComment1Øô<"IDAT™cøaÇÀCìØ1| =@C ôá==ÿüÒ™IEND®B`‚ pix[96]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment2Aý܆[IDAT™-̱ €0CÑ((Q¸Ñ’ Q8‰‚5‚X tQÀŠ'Y:û(ƒsuNjœÕ-“Ì–_$¤OÔýP÷ÒŠöµwÞ_£T#ã”=Ž¥ß6€1-bµBAIEND®B`‚ pix[97]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment36úìUIDAT™5Ë»€0 Pq)R2«d7 ¯%.‹xs4錒ƒâ5ú +…ðè$NŸÚÒ?©,Õå%FŒùÑþVöÌ>d`1)¿êÒ°kgÚS?×|JH7Mã š3IEND®B`‚ pix[98]: xres = 300, yres = 300 ‰PNG  IHDRiÆ pHYs.#.#x¥?v tEXtComment4¨žy³;IDAT™cøÿðÃÿƒP܈„!øÿâ@üñ ?âãÍÚ¡˜¨ ˜×Ä  @ K9Žº¤¤ÏIEND®B`‚ pix[99]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment5ß™I%TIDAT™-ÌÑ €0 Ð+ýè§#¸Š›‰ÎuàG×Hq7¨—ÄG —††_‘*MvbLâ™9c§Œº¹ItÛÂ|‘,u9¥(s5M?ËA\Þá]+?.í6ž|PÚfIEND®B`‚ pix[100]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment6FŸSIDAT™U̱ €0 Dѳ2+x´Œ‚”*‹±€é\ ÀÙÅÓÖ7–t„wÜEqqÓL¯•‘ÃÞˆ Ü ¼K(ÀÏ,ZÎà_r6ÁvmörJ8UM¹ä<IEND®B`‚ pix[101]: xres = 300, yres = 300 ‰PNG  IHDR`!j pHYs.#.#x¥?v tEXtComment71—( AIDAT™c8Àð€¡Aˆ€8ñÿã öÿ0Ô?Àðÿ8Ÿâ~ –‡àPüÇþÃ4ü F’Æd8ÊÈqIEND®B`‚ pix[102]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment8¡(5˜YIDAT™-ͱ À CÑR°£1B¶`-"ЬqQ¸ò „r@Š'¹°lF,ŠðXæuÍwßf¾\= ›þ}%»Ä[½§‰bP:Äile¤¥õ¼ö}aýõC>~5ªºá%IEND®B`‚ pix[103]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment9Ö/XIDAT™]Í¡€0DÑuHJàJ ZI ´ÀD¤.æDÚØ {TƒxfÅ_ÄB°~µ%ˆ!’Ø~ Yv8b5Üѥש†ËÖ]¢nvmE_#+<6yºê 1IEND®B`‚ pix[104]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment0¯ó½ªHIDAT™cø_ÿáû†É>~üÀððÆÃ? Àøø†v0``‡á ˜ø ÃÔÁôÀÍzübþÃûþÛF¼6’fªùâIEND®B`‚ pix[105]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment2Aý܆RIDAT™MÌÁ €@DÑ1` –"©±±±ì`Í^<ÕÑp0䀈è‰{—b Ÿ]–ºá öÌŸMÔh£:“̆«N©¡[µˆWNGxåÃR9ƒ˜±éIEND®B`‚ pix[106]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment36úì\IDAT™-̱ €0@£Y#£e”‚1X”‚5Œ€G4ß'¢¸â-¿á‘°@ÔX6!Q˜Q¬S®û–vJu]l"žž«7xÊ/ Ñ’v³ö3®™xõßV~Ä=õjvÁ IEND®B`‚ pix[107]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment4¨žy³8IDAT™cøÿüÃÿÃ@ÜŒ„™øÃÅšQñûv fÀÐÄ ŒÐÕþg|Àð!áCZÒ7Üþ¢IEND®B`‚ pix[108]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment5ß™I%RIDAT™e̱ €0CQ£)3ÙXɈ‚9¨h/¢¹ƒhÅëì8‡t¯$…ˆøòL´•ØØ¬"nŽŸÅ€áQ‘$k_ô+1Îj©}ö¼æMÔ1|€u06ý¨cøSÌç “Ü[k­IEND®B`‚ pix[111]: xres = 300, yres = 300 ‰PNG  IHDR!‡Ý€ pHYs.#.#x¥?v tEXtComment8¡(5˜`IDAT™5ͱ €0 ÀG4!£x´ô¬Á.¬‘ˆRº°l>‰uró~#Bá›Â¨_M¯ý2îIP‡RPGŽÖ„;£Õ„W#O8‡Xž`G°ÏÝdÞ);|Wðÿ_B>7¡±¥IEND®B`‚ pix[112]: xres = 300, yres = 300 ‰PNG  IHDR 7\ pHYs.#.#x¥?v tEXtComment9Ö/TIDAT™Mͱ €0 DÑß1«d¬t¬eD‘9"0¢1MŒ¢xÒ¿êpÚ(œEØ«PaÑÎÇØÂ¶è4CË ·?a}\¿jÐI°ß7É`AãT§åìIEND®B`‚ pix[113]: xres = 300, yres = 300 ‰PNG  IHDRë«hø pHYs.#.#x¥?v tEXtComment0¯ó½ªSIDAT™cøÇÿƒáó†Ž?><øÁðñGÃà ‡AøC3·ÿá€cvþÇ€ŠÿÀhˆ|3KͰ`x 4ë!ÐÜ€ö0þ`øÇüB2jßúIEND®B`‚ pix[114]: xres = 300, yres = 300 ‰PNG  IHDRÛ'yÙ pHYs.#.#x¥?v tEXtComment1Øô<IDAT™cøñá€=°cø@z ÇÐÀóÿ:!À)¤åÞIEND®B`‚ pix[115]: xres = 300, yres = 300 ‰PNG  IHDRã/ pHYs.#.#x¥?v tEXtComment2Aý܆YIDAT™MÌ!€0À.$Oà)ôaˆÀ—êøÆðˆá £†4W×¢nBé…; jY2ÑYhðIÀšˆ]D•P£yóx[ý1y&®B‘~"¢ûïìô”þ-¶»£§4IEND®B`‚ pix[116]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment36úìYIDAT™-Ì!À Ð.ä®ÄÍ&“»RÉ×`7øÉ ‚„†xâç·EÛ s7"‘¸ KøY˜w–þ,Yk522'ðH–âÒË«þlíªsmµIƒ~G»dz?O϶ê|IEND®B`‚ pix[120]: xres = 300, yres = 300 ‰PNG  IHDR ‚£¼ pHYs.#.#x¥?v tEXtComment71—( 9IDAT™ch`€Fâ?ÌPÿ˜áÿs†ÿïþŸgøßÏð>Ãy†`ôˆì~€Ñ"ûï?)!„:õÐwIEND®B`‚ pix[121]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment8¡(5˜]IDAT™-Ë¡ €0á#ˆJVêf ¬ôP]£-Á@Òþ&Ÿ»£ âéEêÄEHžðx–f6[ºu±I؇盬؇õà2 U©ˆPÅ/ó~²¬BqiÒÕ=x3Iõ¥Ýt[ÑW$ZäÀ47äŽ6ˆ7IEND®B`‚ pix[123]: xres = 300, yres = 300 ‰PNG  IHDR ÷»] pHYs.#.#x¥?v tEXtComment0¯ó½ªNIDAT™cøÿÃ?vþñøÃÇŸ?þøÁpðÃá? Íh˜ù; f@ãCÕþ°ãÃ?*ñÃ@³í`üÁð‡læ&7¾úMÇ¡IEND®B`‚ pix[124]: xres = 300, yres = 300 ‰PNG  IHDR ßÒ©ä pHYs.#.#x¥?v tEXtComment1Øô<+IDAT™cøWÁðÇ‚á€C}£D H*(ÁðA‚á4pø› +BœIEND®B`‚ pix[125]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment2Aý܆]IDAT™-Ê1 Ã0Ñ1.Rú:Š÷f‘ÉÁò/"páV&!eR¼j†þõ!Ê,®]ŒŒQ·K¦P‚±y?äO¼›{¹Eô$Úꆸ»ñiÆù5”EF¦¿Y?d›5k+ùIEND®B`‚ pix[126]: xres = 300, yres = 300 ‰PNG  IHDR浿 pHYs.#.#x¥?v tEXtComment36úì`IDAT™EÌ!€0DÑI*¸FÆMH®ATr…%lL›4Y~‚@<³;3òËto0Óa£f¤òÛáüüYϦF¾q{Èz‰ò*yÿd$„jÔPÙdc)¦ÌÆèNö£â?Q ÿ½gIEND®B`‚ pix[127]: xres = 300, yres = 300 ‰PNG  IHDRÏ5Ðc pHYs.#.#x¥?v tEXtComment4¨žy³KIDAT™cøÿùÃÿ@| 7@1ÿaÆ  øPÍ þÄ~`8 ÄǸ¹¡€¡@4Ø d3 ~ÅAøœû£>³}–ðƒIEND®B`‚ pix[128]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment5ß™I%UIDAT™e̱ €0 ÀG)(Y)›!D‘µ±ˆ#0¢¡›ÐQ\ñ~½¡7¡øt.¹8¬Ù­å¸ËBT%6ͰóouSð>½2Š¥³ï%þ÷Ä5ò%<’ì´IEND®B`‚ pix[129]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment6FŸSIDAT™eÍ!€0DÑIVp­^­YÁµ†TôMV`Áµ†eiêOÍO^?ˆAâni²P?Q±ûr%4¹»ô´ú“¦EoñÓ…x6¾d¢:Hœ4Y£IEND®B`‚ pix[130]: xres = 300, yres = 300 ‰PNG  IHDR‹Ñ pHYs.#.#x¥?v tEXtComment71—( 6IDAT™cøÿŸáC1‚PÿG†ùŸögøÿœáÿq0ê#~†ÿò ÿÀè ý@E0qñ»"’É” /IEND®B`‚ pix[131]: xres = 300, yres = 300 ‰PNG  IHDR)' pHYs.#.#x¥?v tEXtComment8¡(5˜SIDAT™-ͱ À DÑ‹((UOJ‘’•ˆ²ˆ³t.Rä)^åo¼#–ˆó%šÉX€²e‹SèË¡é WWkÑW߾͉"mª½cK›?Þ*KÓƒGIEND®B`‚ pix[132]: xres = 300, yres = 300 ‰PNG  IHDR‚ýqh pHYs.#.#x¥?v tEXtComment9Ö/SIDAT™UÌ¡€0DÑï"I´€¤¬ôA]IwŠp ⹿Kíbo"KlC"ØBÐ#þd1w$Ð —Eº÷¯DuÅäÍÇ¿K§5 ›uÚ8£]rIEND®B`‚ pix[133]: xres = 300, yres = 300 ‰PNG  IHDR ÷»] pHYs.#.#x¥?v tEXtComment0¯ó½ªQIDAT™cøÿÿÃÿå?~|üÁðñÿ©`xüÇ‚áñ? †Ãÿ$À¸Œ9Øá˜ CÄÛ¡¬þP/È(þ 2hÇÏ?þ°íäÿ]:EV”IEND®B`‚ pix[134]: xres = 300, yres = 300 ‰PNG  IHDR ‚£¼ pHYs.#.#x¥?v tEXtComment1Øô<)IDAT™cøgÏðAž¡†~؃Ð ’Ç@öèè‡=B=ˆ!2 ¦”|”ZIEND®B`‚ pix[135]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment2Aý܆]IDAT™-ÍË € Ð2#8Šìâ âÉ1\¥Nàró ñ &¬Ÿ4/½µH qôĉ5[°˜Ó/#.|(‹·8=Q)£L¢Ò¹“¸ŠEŸ-¨¸ž6ú¨¼Žô8¨@c&IEND®B`‚ pix[136]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment36úìZIDAT™=Ì­ À àkHFè*ì†@v¥k]²HD“×#M*>u?èF\…ȧHâê'ÉÝSfI<116¢©×k„° dq¿¯,,ú9ôQ´­xv¾ûé7búqÔIEND®B`‚ pix[137]: xres = 300, yres = 300 ‰PNG  IHDRë«hø pHYs.#.#x¥?v tEXtComment4¨žy³=IDAT™cøÿñÃÿ‡Hø 7B1#ÿƒâ?@ù@üŠAêßq;70p1˜†›à ?~0H€0‡C Åcè‚IEND®B`‚ pix[138]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment5ß™I%XIDAT™UÌ¡ €0„á#•¡£ÐÝ€•Ž ¬PöLI9Z…øÌŸÜ¡<„! »AÅ.;ÿMÅ;ÞÒ‘¸>Z¼9\ÞÄŠIEND®B`‚ pix[144]: xres = 300, yres = 300 ‰PNG  IHDR-éË pHYs.#.#x¥?v tEXtComment0¯ó½ªDIDAT™cøoÿ€áû†Ì>||ÀððÿH`8 Æ Í@˜D ѧ6ã Ь‡? æÚóˆÿñ?¢3 Dé±ôIEND®B`‚ pix[145]: xres = 300, yres = 300 ‰PNG  IHDRâ@È‚ pHYs.#.#x¥?v tEXtComment1Øô<,IDAT™cøgßÀðG¾¡ˆñ þŨ„Af}àÚÁÀÆç6 |-øó1=IEND®B`‚ pix[146]: xres = 300, yres = 300 ‰PNG  IHDR ws pHYs.#.#x¥?v tEXtComment36úìVIDAT™]Ì!À ÑmH®ÄÝ*\iI×…ýI ¢ ]’ªŠç&ƒˆæˆr‰Òˆó§Ê*rI"O˜ú®~´ˆe°&%‰ûøl#rW¯Ç]ùáW9”&NÄýIEND®B`‚ pix[147]: xres = 300, yres = 300 ‰PNG  IHDRÂ+ $ pHYs.#.#x¥?v tEXtComment9Ö/XIDAT™EÍ¡ €0„ás•Œ#± ÉJ×tVx-Ч(WJ‚øÔÉáî‰Üˆ”ˆy#élhr…W0¨7I¢Ø¸6Å—D'¦êüìD<ôµ^ø÷î9Ї± BIEND®B`‚ pix[148]: xres = 300, yres = 300 ‰PNG  IHDR ÷»] pHYs.#.#x¥?v tEXtComment0¯ó½ªMIDAT™cøÇüƒáè`øðÂáá–`8ø‡Œÿã`h†c0f†Ò¨¡îà?~ °9 ó>ü¨`øQ´‹ˆvþcÿ$¸6îÇÃ%IEND®B`‚ pix[149]: xres = 300, yres = 300 ‰PNG  IHDRÛ'yÙ pHYs.#.#x¥?v tEXtComment1Øô<$IDAT™cøgÇðCŽ¡AŽŒ€ŒhÈŽhVÿ€)gÇBˆ–IEND®B`‚leptonica-1.70/prog/recog/sets/test05.pa0000444000175000017500000030507212233525576016216 0ustar dandan Pixa Version 2 Number of pix = 254 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1Øô< IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment36úì”IDATH‰íÔ± ƒ0…a[.\2£d•l‚QŠ”Y äE.b—.—¸çþ‚†Æn¿ÂïÞIç^rwè@Z©xÒ5‘f!}ÉšX 錺¢n¨Z°çLz`Ï{‡ú¤Ìßò Ìu¼¬ï:€TOzøöï5ZêÞ`¦jûµUHÓ¢ KÛ¯•J%ª=‘îñ¦Ëеk×®§ú°7'mhùIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/VIDAT™=ͱ €0 DÑ벆GËô¬•T¬áˆ‚# c'‚âI¿9Ìa¿ëÉXdHš‘äC¿YÐUïÆ!‚NSw‡ŒÍ·Õe”‡Qmháè/î> r%}ÄIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR( HÖ­ pHYsb&2 tEXtComment19¢°ïlIDAT™Uλ„@ P]Dè\ ­Ar„”ÄîR[Â…ÌêlÃGÁ z@uÂÒ¢~ÕU1«ØÃC«Î¨—ù­mú°{t˜”pü¸Ù—dÆq9ßn¡„Írº›+RC‘ÀaB&ûìùÙb¬ÓŒkgIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR* L#× pHYsb&2 tEXtComment24÷,Àñ„IDAT™Eϱ Â@ P# ¤Û€ŒrŒÄ8ƒdì‘D €éRœl¾ÏHüæéK¶%“#‹PPÀ+Ù’Õ ¼W¶“ТÜþÌZƒIëFP’h·ŽäÞMÜ‹ÏÁ”<|Š]€ v&PÆ÷`w~Ò•>–W”ãŠPo#8 †¼QGƒCoñ‘˘¤v‡c7IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR*¹bè pHYsb&2 tEXtComment25€+ðg’IDAT™%ͱ‚@ÐEƒ )RŽ’ ÜãY€- Ï€KXé™(ãÞý`ÞÌÈwcn y¡9K®¬Y ó® Ñ:Èc+!ÃÞmNºÆå<Ã%"Þ3Ó' 4 àd½pà\¸“&¶rtbåC N>ôì¼ô2¾nÁW •äŒm‡O~›¦ÖHÄŠ?ß tò‡µÁIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR*¹bè pHYsb&2 tEXtComment26"¡Ý’IDAT™Eͱ ƒ@ÀEHþ(å)‰GR‚[9‹€6}^Càht·º=9;ö–\¹áçí(™[v¬ÕŠ;æÝðÚãªI$eIÓÃã£Ù›ht¶ºã“mÀ–AœÝMqD¡J»9í·¬7¹ZKyÀ[`E"‡‹ª·$Þ¿¥7n;°¢öIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR)ðxà pHYsb&2 tEXtComment29‰¼LIDAT™]ͽ à à³R¸d„lFãYŒ‘U°( pHYsb&2 tEXtComment61ã*ñz–IDAT••ÎA Â@ Ð ‚uÑ;Ô+èzèà^ðBPïâ<@A2;·ÓÝ­ß¡6ó»pc ðò $–¤~Ò·ŸîÐd·XÔÍIím¹Ê¹]ó‰kúU‹ í’ã¸ãĨ/©Œ‰ÃŸïaðÙÅzC?,wv%=Z¶øÞ¿'¡¿ÄtQfB¡R·—+ó=hqÙ8O üíÏ)(úsc¦IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRX"óW#> pHYsb&2 tEXtComment57!dŒ–IDAT••ÎA Â@ Ð ‚uÑ;Ô+èzèà^ðBPïâ<@A2;·ÓÝ­ß¡6ó»pc ðò $–¤~Ò·ŸîÐd·XÔÍIím¹Ê¹]ó‰kúU‹ í’ã¸ãĨ/©Œ‰ÃŸïaðÙÅzC?,wv%=Z¶øÞ¿'¡¿ÄtQfB¡R·—+ó=hqÙ8O üíÏ)(úsc¦IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment62z# ÀòIDATH‰íÔ1n! PGSLªu“:Ü$‰RL™+ Ú"×`5@JCðÚ£-?¤ÝHCûdd¾-Hg¡'Ô_Õ&’B§”¤Î²x¨d: 9„õM5¿´w¨Å«î[û`¤9hW?[õP“½hÝJX‘FÓoÕ/¤×CcG'SÞ3VÍksŸÛP-Cª¬1CeÓ‹éëœBZœj¡i¤Sì*Q™o¸çlZ9uÔ[m_ÛCQ’c-AµqÂ3*¡>Mÿ/-‡â½ª!ëNò­aõùØœvq@›‹¦W!”'Õ}•%bÕ̲!”Å©t­žòW9õÔSÿ³Þù ìLk—ÍbIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment58±ÛòIDATH‰íÔ1n! PGSLªu“:Ü$‰RL™+ Ú"×`5@JCðÚ£-?¤ÝHCûdd¾-Hg¡'Ô_Õ&’B§”¤Î²x¨d: 9„õM5¿´w¨Å«î[û`¤9hW?[õP“½hÝJX‘FÓoÕ/¤×CcG'SÞ3VÍksŸÛP-Cª¬1CeÓ‹éëœBZœj¡i¤Sì*Q™o¸çlZ9uÔ[m_ÛCQ’c-AµqÂ3*¡>Mÿ/-‡â½ª!ëNò­aõùØœvq@›‹¦W!”'Õ}•%bÕ̲!”Å©t­žòW9õÔSÿ³Þù ìLk—ÍbIEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR,}W´A pHYsb&2 tEXtComment63 $V3IDAT™cøÿ‡‚~þaøC ¨„àG6 j.Ñ 4äÜ´?Pî°]ÿ[HG©ÜTIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR,}W´A pHYsb&2 tEXtComment59ÆÜ*‹3IDAT™cøÿ‡‚~þaøC ¨„àG6 j.Ñ 4äÜ´?Pî°]ÿ[HG©ÜTIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR)R8Ùë pHYsb&2 tEXtComment63 $V“IDAT™EÎÁ !ÐÙìAo”@#FbG@Ö1¶-6lcÂÃÊøO„™ÿ‡D$¦zVLûUަ’=3å´(Çôw¦× ¤ÚùÔö°X¼eo‰Èœ²xdNE˜œËM¶ÇÈ#‘i-gÝ9©?nŠÕ¾µ[½µ“¬qíÀª³ŠPΦƒÇ¬9s¬ü~IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment66}NdÙÌIDATH‰íÑ1Â0 PKEdAÊÊPÕW`ì€Ôk±Åˆ p¤´ºr„rƒ°©RpZF'¬ ñúô•oBfŠ-Z´èß)†Iõ`\Zt3ëlB/fWµ¬‘*­JæNPÛYÖƒ.©K­ß3ú’£žõ3¡࣊ïnŠO'md5+çFÁ¢>XMRï|È›¨ƒúêUÖkkäOTËzäæRçia­5‰ûN»˜my”b¶©ÈkI)*VUZdõ?µK©ÝÔæTõ¢Ž½‡àq)©=²IEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment64“@õÌIDATH‰íÑ1Â0 PKEdAÊÊPÕW`ì€Ôk±Åˆ p¤´ºr„rƒ°©RpZF'¬ ñúô•oBfŠ-Z´èß)†Iõ`\Zt3ëlB/fWµ¬‘*­JæNPÛYÖƒ.©K­ß3ú’£žõ3¡࣊ïnŠO'md5+çFÁ¢>XMRï|È›¨ƒúêUÖkkäOTËzäæRçia­5‰ûN»˜my”b¶©ÈkI)*VUZdõ?µK©ÝÔæTõ¢Ž½‡àq)©=²IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment67 ITOUIDATH‰cø40 NÙ õxdñé¬>••‚çØeÿÙƒXÿ˜±Ê6¨±þ0b“=ÀÉ*?°Ê„É]¶›±hAqó¨ì¨ì¨ì¨,Ýd5I?ŠI¿KIEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment65äG5cUIDATH‰cø40 NÙ õxdñé¬>••‚çØeÿÙƒXÿ˜±Ê6¨±þ0b“=ÀÉ*?°Ê„É]¶›±hAqó¨ì¨ì¨ì¨,Ýd5I?ŠI¿KIEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment69íñyH®IDATH‰íÔ± ƒ@@$‚)á7à |m9‚·(Ë oÂ!ˆžì-|@»–!‹M';í^a$¡8õ°új˜fIžéXAÕ,m 5%qê²éuÊ7ªµ¡ö©°Æ]¢Žhdª÷ši¦ªâz¨•6õ}Át¼BÔç5ª·/j¿é¬ÒaTJÜ%7Dß›ÎPu±7Ö.ÖvXŸðR¶ôT÷Cíoœzê?ê è«äû×.IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR) §l“ pHYsb&2 tEXtComment79ôêH €IDAT™Uϱ Â@ ÐOÕÁ£x1FH¤ÌJ‰Rd‹4,]ŠÓû ª×|}ÃÌ6Q8OVL°3)W*Á…A廢¼«Ì þTNdr^/-Éš ­36 ÈNžldsbN ôÇÎÕ;5Z:å`øcÌ÷;HGo±ÒŸQ4 ¾»éhm1±!3IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR(!ƒŠÔ pHYsb&2 tEXtComment86ãÍIW‡IDAT™Mα à „áCtaƒx{³8%#dk€2@HGxܸН¸ê¡.T%² ÌýÐ'ú™Â]v=57¥‡êÞ¹ ÙÐò&XÖ«îK¸î*,œ]e„ÊÓòìŠz³]n—fü›IÐu×¾PðHúdFôA£|öŸ³ãcç`Ïr©IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR) §l“ pHYsb&2 tEXtComment95cß)¬IDAT™=Ï1Â0 PW s®ÀÈæ{£¹R¬„T\Àcª~œ1=Éò—ý €nB{Dž„,tÊ ù$¤[gv‚cÈ,´XR…šÖANƒè·Í“±LåÑrüÌVãW!ÒÂpìÒ©×jú;÷à÷@¹AÏg:íO€üläìÚK{òjò³ˆrûcòûïIEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR* L#× pHYsb&2 tEXtComment99jie‡–IDAT™eϱ ƒ0…á“\PºMk¤ˆbFÉ$1‘ ‘UQPf£,Ý!Y¼œM™ê+^ó~::LÒ!{¦Õ#9¦˜#ÓÄ‘)do+OËLQî6õÔÈíŸpn¢°¶…éd\ÛF·48£ÈŽ”ãêøÑ²ÛPÊ"¾Àâcf9ù*[%)³˜žcè˜víÑÍJžA¢z%›.ÁIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment107ÆØß••IDAT•…Ð1 ÂP à_\„^@èEÄ\Lˆ[Ç^ ‡Q:tô -º·W‰¯.v0Cø$!E$ì d= Ö8“5$ð ;”‚­c¢¢Ç'Rª=BHùz7ErtO $n-©Ï™‘+c@øb¯ŒÁn ´ Tß®ÍøŠé]†r5ƒê ¿"º¤0*Xù¥Àþ…§1ð[1¨ën8Ø!IEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1116 KáIDATH‰íÒ½jÃ0à´„êBô ;û•JV]Co6쪫¾5ïÖïêáøSó6BkÎIõ±gõùª§‰öÕÊáFM4BVÌú”ÎÚÁZ¾Aåƒ_åy©3¸~5Lե笶 õäÚ”ívuåXtÑEýcý8©\¤^úIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment113Ø®*Í•IDAT•]Í» Ã0 Ðl F0àEx•Œ2…z´Œ¢¤aÁè¢_Š„Õ4ß™¥ {Ø=V8¨¶MøÝù¤¦«ËÔGèWÛ€¥yû=öe©³‰œÚHkè@ ñ{UÂTÈõF´‡**‰,¹áèXg§¬#]=་ZP°ø-”k{½üÓ¢“'WwôIEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR:! Ñ…Ý pHYsb&2 tEXtComment1198{ÃÓˆIDAT•}Ð1 B1 à€CáQê±Þd†7¼Ñ+õáÐk¼â".¤¿MDPì’$”$„ñ‰#ihûÆ ·¬x\Т䫢,’h–ÔÃ@øòž/ˆaÈ8{© ÌÉ2m²QÿÀæY߸w°¡ïµÃÚ7¥(ÄŽX\Q8ÑëÕÑÏò]öÊãA…úÓIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment123óƒy¦IDAT•]Ï1Â0 PK aËÚ‰\#[¯ÅP‘¢Œ=T®Ä‚ºx°üqÒ°àéÉqü«;“ä¤t¥9€S$ ¸xŽƒAGÇÓ`G’e:Û°`ùa+·Þ©3·°t@â?¸f©?!·Ðà`¡u:Ô[¯m!j³@/ð %5<÷ŽuÏü;·%—m{!W sÅGí;žÉ³=ì@dB«•¿Ëc“¸©oIEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment131–)cWIDATH‰íÓ±JÄ@à‡\§`-CDæ•´S,V°Ðî!/"Üui„}„R¤3‰)’à¸ãl6{ÙÜÁ*C&ù˜ÛÿvsýROÁß4T‚øâÚÌÍEÀ •§ðLj=Qþ°ŠªÖmM¸jªYe´Cái)â^‰*ž¦$+Óeä랢ÚtùŒn «;OohÈ25ÕƒÍ2«w8n•8Ö®ÆÕœrÖö¢¢c­ó­~O•Až—ʆ¦©ê*.Y›!´§kÖ·[OwïZÓn<…ר¬+ø,S)Zy©Ôù*¶™c?óçZZ•ýêÛPÚ-Šf¤Ý+pU uÃCá¨ÒªßèèÕQôÕÙI4ë¢0/¾)FVc5#øHɨ|˜Ñ—þØñÊ]W‡D’-È33{MIá*Ï'ûpù› ïí“wJEÿÍ·̨_‹.ºè¢ÿª?â·2pˆ’IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment129VWIDATH‰íÓ±JÄ@à‡\§`-CDæ•´S,V°Ðî!/"Üui„}„R¤3‰)’à¸ãl6{ÙÜÁ*C&ù˜ÛÿvsýROÁß4T‚øâÚÌÍEÀ •§ðLj=Qþ°ŠªÖmM¸jªYe´Cái)â^‰*ž¦$+Óeä랢ÚtùŒn «;OohÈ25ÕƒÍ2«w8n•8Ö®ÆÕœrÖö¢¢c­ó­~O•Až—ʆ¦©ê*.Y›!´§kÖ·[OwïZÓn<…ר¬+ø,S)Zy©Ôù*¶™c?óçZZ•ýêÛPÚ-Šf¤Ý+pU uÃCá¨ÒªßèèÕQôÕÙI4ë¢0/¾)FVc5#øHɨ|˜Ñ—þØñÊ]W‡D’-È33{MIá*Ï'ûpù› ïí“wJEÿÍ·̨_‹.ºè¢ÿª?â·2pˆ’IEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR<“¿“G pHYsb&2 tEXtComment136šò¼À®IDAT•EÏÁ Ã0 P•Ò›3A½B&ˆWÊ1‡P§t€®dè"ÊÊÍ!UrSz<„ôც¾lª $%‚’ù•&€ÌK”i0Ô%ðÜ;ÆtÔÚ9ö6ð`[Üe2¨ÄÍ’ œ`ÞÞ 7$ËQˆˆ~,×€óà›1nЮHßpþáQ ”øE:€t²Á¿Pƒ£dâ@–¼¦:ÇZ­WdHÕ›9Y}‚5èSõNQ›Kжù¹IEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR;qcˆ> pHYsb&2 tEXtComment137íõŒV“IDAT•]ϱ Ã0 @)Tjf®’I¢*²– d)¢BàG4¥Æ_]óÒ¡Ù\¡Ž¬(®…pYÁb˜Y¢Ïîê W ¿‹BÈå¦`ÿ“6Ø–ªPÈ@eìæ8@xx|¬õÄjH+’a9¡ò‚‹aHÑ@9´/´õ˜$…›ÐÞo¨Ð{°ý¹Þ¦A’¾ øIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment139 M¡Q®IDAT•MÐÍ Â0 à@%rk@õ €ÒÍÒV=pd$ÒIÈ=ú`ùá´qû$[Ï?€ €:¼©BcAÝH¸zNÑ9Ròkê Bͪ•„æU[k–0\èçš34à(`Z“«È_Œã†G#í†ç¤~¼÷œŒmÖ °¯Qd¨àP¸ï*(sܱT0q?qŒég¾'ÇA{/7ïÔn<©vucßÈ(õ-š•jÐd,3IEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR<“¿“G pHYsb&2 tEXtComment151RÌŽå‹IDAT•eб 1 PŸ((3‚W`oF"¥¸’…EÖqi¤ÈÆ—‹AW¯ù–¿ÁŽaP²¶Zc`²r¶ÊP‰O àÀî¸;HB¶™9:íéê/ZàF)M` ¯‘ªg`ÀýCq¢ãŒËÇfu%§ýTÁžQ†GÒ+y=(‹©í¿xÙå p<­/ÚßEIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment153¼ÂïɧIDATH‰íÑ» 1 `GW¤ÌYÉk!%c°J¤+®A0'±T\qŠqRÿ¡¦°ÛO~“üˆL¦¦¦¦¦¦ÿ¢—·Tƺ:!’×4Pªª…žm¹¹¡VJ«¿9<¥kØA㦙wÕ:ÐÒU &)±ëy ag ²`½zÕVg¤Qn“æz·Ruªn¤wR¥øÁºä¦àªºJ>qk9°~0ý'" Ýk—›IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment147¢´‘§IDATH‰íÑ» 1 `GW¤ÌYÉk!%c°J¤+®A0'±T\qŠqRÿ¡¦°ÛO~“üˆL¦¦¦¦¦¦ÿ¢—·Tƺ:!’×4Pªª…žm¹¹¡VJ«¿9<¥kØA㦙wÕ:ÐÒU &)±ëy ag ²`½zÕVg¤Qn“æz·Ruªn¤wR¥øÁºä¦àªºJ>qk9°~0ý'" Ýk—›IEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment154"¦zjµIDATH‰U•ÁnÛF†—fáU#DOu7›¢‡\S 1¥¹õªÂ‡(€í¥àƒR´€¯=У˜ºå ´YÕ¥@ÖQ®Ð%ÿÎ %*åA‚öÓìþóïÌP)M²óV©o~Rf 1s‰K¦^ ¡U¦ˆB½ƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%àOL ×@ ² î™97å¿àÐÄaÓÓ[^$­qWåÑGºµ ¶ôLÙò…öé ц豵~öBÕ¹Ž<6ˆá|¸ g#¦­fztJ4{Ü5Jë94èL¨[Ï‘9TÁÙŠè è뎞úï ’`6Þ§vOb¡Q{l¦4¼Of@½£QG›òd^cý)½ƒíRº#Æ!Aí“yºAƒkXNxHF¿«*Œ} Œ’âšb}@ÑQ¯T2®fKô"AÄô™E»£z|7G…)pÎô˜ÐJÅÙ]AFM(Gѳi™¶)Ñ3–5œ"0]2®+²Wt¨zLtAT]ÒÚª„&º Yço J‚èŠnž€é_BuŽ‚þvÂ)VDô€é+ýn3§ƒ‰ê˜6”Ö¢ºÖc·¢{ù HjÌࢪ©kLµŒ‰Æ_6Td’W‘xÝ3rrõGl`JîçZÒþh”:¤ø—”;YײQ9¶ÕÝq°DÙj8þ Vÿ£ {#Ô ì¤:Pñͪ}Þ¦6œPžuZð}Õ7u{:J­{ù®Ø‹Ž*eˆR7¡Ô´ÖPI¢NLdgª6¦)ÁL¬¸ÁXT 8É–B'È þ¢øL‰+ãmP÷IÏÛŽf±7ž7]ÛŠÝïtÕïyçø­ŠÜËRñBó7QË­G_KÍ2zõ¦¤*ªQ»£%c(6SAmªŽŽìzÚe̱‰L•ù% ß ¢NzY.‹(ÏœT”OeW~>ô”ê?Wܳµíã˜läËŽ’I«TrqN˜^"ÚdŠ¥Ö· I ]p—Oxç+“ÝÏcþµ=ô%EÏv±WI®ßë¡é‚«Ãv4ª[ ]ÐÂÂ[*SsKê¤'h6cƒ-ås/4ŒŠç5ÃÍV_´Ð‘Î4X3Ù´špkÎÛwt¨U"”v]ÎdK¿ß™è‘;ó—Z>Ù½–ã¥êˆ>`óçæ·ì•ÛÇ&5Іª)ˆÖ´ÙS’4Ð!ÅÁwÞÓêXó¯Mn¢Å'4N]èãFènÑÓ)2‹qÍÓª £ô7¢~º£ÔLç<¯¿nG$þáÛ%×R\Ϲý¾ÃPsFíž.ÚCÝWŒ7»§æ}{Ë šŠgý¹&¿:ŠûØ`£),¢ ÑÔÓ’¼0Â=ïÌ‚®+ï葲'ÖÓ¿Å‚öÞÚô^E4ÇÝö%„÷Öá{:`Áî’ç7ßq$ë×;zl„þz†Çýú¬§éŒŒm|3Ã0•aW^häl4õ§´ïL¬èž"øK¡eªNF‘Ððe?6|+ôóò@hÃg…zç©ïÎ}îœöt ›­ª7îÑ™ºˆüO¤¢‰ŽÊ¥Bìvj%’kë_¦Ï¸fƒvøäiøÆ¨.³ÿ³™æ´áOÄIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment1482 µIDATH‰U•ÁnÛF†—fáU#DOu7›¢‡\S 1¥¹õªÂ‡(€í¥àƒR´€¯=У˜ºå ´YÕ¥@ÖQ®Ð%ÿÎ %*åA‚öÓìþóïÌP)M²óV©o~Rf 1s‰K¦^ ¡U¦ˆB½ƒG¯§YüsR,ƒq'ÆUPu˜säQH‹%àOL ×@ ² î™97å¿àÐÄaÓÓ[^$­qWåÑGºµ ¶ôLÙò…öé ц豵~öBÕ¹Ž<6ˆá|¸ g#¦­fztJ4{Ü5Jë94èL¨[Ï‘9TÁÙŠè è뎞úï ’`6Þ§vOb¡Q{l¦4¼Of@½£QG›òd^cý)½ƒíRº#Æ!Aí“yºAƒkXNxHF¿«*Œ} Œ’âšb}@ÑQ¯T2®fKô"AÄô™E»£z|7G…)pÎô˜ÐJÅÙ]AFM(Gѳi™¶)Ñ3–5œ"0]2®+²Wt¨zLtAT]ÒÚª„&º Yço J‚èŠnž€é_BuŽ‚þvÂ)VDô€é+ýn3§ƒ‰ê˜6”Ö¢ºÖc·¢{ù HjÌࢪ©kLµŒ‰Æ_6Td’W‘xÝ3rrõGl`JîçZÒþh”:¤ø—”;YײQ9¶ÕÝq°DÙj8þ Vÿ£ {#Ô ì¤:Pñͪ}Þ¦6œPžuZð}Õ7u{:J­{ù®Ø‹Ž*eˆR7¡Ô´ÖPI¢NLdgª6¦)ÁL¬¸ÁXT 8É–B'È þ¢øL‰+ãmP÷IÏÛŽf±7ž7]ÛŠÝïtÕïyçø­ŠÜËRñBó7QË­G_KÍ2zõ¦¤*ªQ»£%c(6SAmªŽŽìzÚe̱‰L•ù% ß ¢NzY.‹(ÏœT”OeW~>ô”ê?Wܳµíã˜läËŽ’I«TrqN˜^"ÚdŠ¥Ö· I ]p—Oxç+“ÝÏcþµ=ô%EÏv±WI®ßë¡é‚«Ãv4ª[ ]ÐÂÂ[*SsKê¤'h6cƒ-ås/4ŒŠç5ÃÍV_´Ð‘Î4X3Ù´špkÎÛwt¨U"”v]ÎdK¿ß™è‘;ó—Z>Ù½–ã¥êˆ>`óçæ·ì•ÛÇ&5Іª)ˆÖ´ÙS’4Ð!ÅÁwÞÓêXó¯Mn¢Å'4N]èãFènÑÓ)2‹qÍÓª £ô7¢~º£ÔLç<¯¿nG$þáÛ%×R\Ϲý¾ÃPsFíž.ÚCÝWŒ7»§æ}{Ë šŠgý¹&¿:ŠûØ`£),¢ ÑÔÓ’¼0Â=ïÌ‚®+ï葲'ÖÓ¿Å‚öÞÚô^E4ÇÝö%„÷Öá{:`Áî’ç7ßq$ë×;zl„þz†Çýú¬§éŒŒm|3Ã0•aW^häl4õ§´ïL¬èž"øK¡eªNF‘Ððe?6|+ôóò@hÃg…zç©ïÎ}îœöt ›­ª7îÑ™ºˆüO¤¢‰ŽÊ¥Bìvj%’kë_¦Ï¸fƒvøäiøÆ¨.³ÿ³™æ´áOÄIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment155U¡Jü IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment149E 7– IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment156̨F(IDATH‰]Õ½nãFॄ p6[²ÖÁnêRZäM¤H Å5‚—ÁB€ |$|”£¡B½@r¤À‚eVQÁ°ÚÉÌ,tGÀ?âçágf×BQÇ) €ÜWÐÁ¶Vgˆbÿ¢ÝìQµ×¨@_A7/ [趆¼Ð†‹õÛæ Í$tFç ýžå<¨„¿v>-qe«~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzs¡ ™ä^:…Úu¬1À‰}™$9¨^¶xÏß×)¯{ÊD-„Š“¨.%ý;®%§‘u“àG/éÉô¼Èð+{T‹Ú¬1SŽÉ¢# úoFå˜2 •ò·™˜£nòBMÁ)Vñ«“¬"Þê,«÷A5ëCœç¬†´…—© ¨?Æë\UÝ®áØÍØ"ÒÈ>$ë\° ±û î NˆyÂj%)ål9qíœFQ%×Å© $«£vÜ%SX iç{ýÎA«Ô_Ó$9ú†Ž•:hQÁΰˆ{VÐGXÁj¥X½Ð…¶%FÔ3ZÞh˜+Dv‘Úgj:¸`f»çK508ÅNÔ¢¦W¼eÓ§Õ…rŒªÀ¤£þq¡¼SRu€ ¸è?S•½"ý,nà»Ðñu9ÆQâEM‡<×`“ó ÔýH\ÿ÷º‰ð}i_GîNNT^û¸ød}XçÃ-¢¼¥uo}|œÕ¶è/+I}"¡O›*(.Wœ•+Ô_©&І 'v »Ìy)}Ä?÷ùB#·L%%Œ/Åú!rS"§®°¹p0ØŽ%þÕï©{;è6ðJÒkâD’j¬·S¬™ å(g õª?‘z­gBù˜Õ?Ýr9Ž£~YöJ™êˆ«A¿ÀØ7«¸OóšÇ ~†ÉP{ÒfÒ6q†«U| ÷ sô ë9£©«B®øv›Q_-Uv7ÿ™µ¥Ä!…çIc™e˜œwPk¯zÔÕœ,Ýô÷Í…ϧpá4ìaR¼_Ržp…½Ú*4 —…Ϙž‚mPƒ‘?³EÅS±ê5õ¯ä¨Fµ'ÀóxXõf¬ÜÉöÀ'j¯*ñ =TÇ ÙÎtœº¾’ÉŸ m²ø¥³¦r¹þÿÝÚ¨Bu\(É/»;YTÄŒŽî=Tª9¥¯ N©e87ÖjŠfBVqéSÚ|Ãñ©Âf9Lº¦ó„Õ? %CáXo¢A[Néý…Ö•¸¥ƒÎ?ž¢?¡Æ&êèÐ+FWC µø<±QÛß™¶7Ÿ¢]6©‹.£Âõš×ͱÅysî·¶ô«Iñ™ÛObïƒ.ÄLõ__¨¢³=.ñ\‰ûØýÇá™Hjq÷$dȪþTS#´eíHõÇjÅ£öƒªIq¥ìÈ 3–kY«IEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment150%˾s(IDATH‰]Õ½nãFॄ p6[²ÖÁnêRZäM¤H Å5‚—ÁB€ |$|”£¡B½@r¤À‚eVQÁ°ÚÉÌ,tGÀ?âçágf×BQÇ) €ÜWÐÁ¶Vgˆbÿ¢ÝìQµ×¨@_A7/ [趆¼Ð†‹õÛæ Í$tFç ýžå<¨„¿v>-qe«~cí.4…|ë¤%ÕåÜ5 í 7:ß9é4¸öôÔzs¡ ™ä^:…Úu¬1À‰}™$9¨^¶xÏß×)¯{ÊD-„Š“¨.%ý;®%§‘u“àG/éÉô¼Èð+{T‹Ú¬1SŽÉ¢# úoFå˜2 •ò·™˜£nòBMÁ)Vñ«“¬"Þê,«÷A5ëCœç¬†´…—© ¨?Æë\UÝ®áØÍØ"ÒÈ>$ë\° ±û î NˆyÂj%)ål9qíœFQ%×Å© $«£vÜ%SX iç{ýÎA«Ô_Ó$9ú†Ž•:hQÁΰˆ{VÐGXÁj¥X½Ð…¶%FÔ3ZÞh˜+Dv‘Úgj:¸`f»çK508ÅNÔ¢¦W¼eÓ§Õ…rŒªÀ¤£þq¡¼SRu€ ¸è?S•½"ý,nà»Ðñu9ÆQâEM‡<×`“ó ÔýH\ÿ÷º‰ð}i_GîNNT^û¸ød}XçÃ-¢¼¥uo}|œÕ¶è/+I}"¡O›*(.Wœ•+Ô_©&І 'v »Ìy)}Ä?÷ùB#·L%%Œ/Åú!rS"§®°¹p0ØŽ%þÕï©{;è6ðJÒkâD’j¬·S¬™ å(g õª?‘z­gBù˜Õ?Ýr9Ž£~YöJ™êˆ«A¿ÀØ7«¸OóšÇ ~†ÉP{ÒfÒ6q†«U| ÷ sô ë9£©«B®øv›Q_-Uv7ÿ™µ¥Ä!…çIc™e˜œwPk¯zÔÕœ,Ýô÷Í…ϧpá4ìaR¼_Ržp…½Ú*4 —…Ϙž‚mPƒ‘?³EÅS±ê5õ¯ä¨Fµ'ÀóxXõf¬ÜÉöÀ'j¯*ñ =TÇ ÙÎtœº¾’ÉŸ m²ø¥³¦r¹þÿÝÚ¨Bu\(É/»;YTÄŒŽî=Tª9¥¯ N©e87ÖjŠfBVqéSÚ|Ãñ©Âf9Lº¦ó„Õ? %CáXo¢A[Néý…Ö•¸¥ƒÎ?ž¢?¡Æ&êèÐ+FWC µø<±QÛß™¶7Ÿ¢]6©‹.£Âõš×ͱÅysî·¶ô«Iñ™ÛObïƒ.ÄLõ__¨¢³=.ñ\‰ûØýÇá™Hjq÷$dȪþTS#´eíHõÇjÅ£öƒªIq¥ìÈ 3–kY«IEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment157»¯+Ð IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment151RÌŽå IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment158+6A IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment152ËÅß_ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR=!B ž¤ pHYsb&2 tEXtComment155U¡Jü±IDAT•mÐ!ƒP à.pÏâz Ä»Ò$ba/A0Ǹ /ˆÉ]aGxs/íZØÉjú¥ùÓ4Ù‹`ïå%>*x¡,¥! E  @†Æ&‹ç‚€ÂnÃSØdÔ5Œ?œ6h:Ã:sÝƉϵa…+Ã<|!«¦ˆÿA†ÜoÀH­]L­e²Ro 3éºcL¹ÖLöe"…cïèÒA(Äc‚p’ùf7¿oú¨7«ä‘[(IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR<Xã@â pHYsb&2 tEXtComment157»¯+ЗIDAT•eÏÁ B1Ð <Æ„mÁ LKv%‡-ÁF °+0âÁ|X2fó£ˆò0$§›Ì‰ˆ±¶™:Ò/8ÑŒ²ÃÑ+„ÜËbÄcÄOY)ÐÁÈ ±"‘8l-RÃ.v® ø`ƒóáEqÂA‘9Ã4¸¨HœýTw°xÖ†LY:=&ƒ½ÓÏuÃP“^ i˜P1ÿ’†IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR<“¿“G pHYsb&2 tEXtComment159\×§IDAT•UÏ1 Â@Ð ·Ü@Ü+¶’¹RÊ’ XXæL’‹$x)§XwœÍÁî5Ÿÿ?d”0ÉDPÀ§š`,àŠÈ€+w@ЏòXSò6 ÌÜüÁËœ6€ù€;NáÅ©õ«!:ƒˆ£Oê >îÈׯ ¹ ÇÚÀøƒûl àh(Ãýbhýr×ñ†P0zîqéõW• Ò­ ƒð…@´\2ÒÀŠh·¶òIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment163—ï¼ ºIDATH‰íÔ1 Ã0 P‡ }„Ü$>š’vȵb(ôöÔÕÞTP«&Ð1_C§¶Ä/­/ìÔX£û1•hÝvê€FÕB—h³é<íkiT8tj)¡Mû*V†ª“©Q3ÓÙPÕk¶TÁß:›ê-C‹&Ôç¨ S¡F¡["¬aÉÔð±Î¦vX³ –>MÝjዪ w£ y<w&Òg§ÖȨ¸~=oq~¦oü=ôÐÖ’½Ÿ‚œXSÚ´' énpE1°5Q ’´d ¶åƒW3¶Èô'¶Šµ^ÍÃptø;QIp ÊfåLQ­¹­³ÌÔIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment175g—(~ªIDATH‰íÑ1à PG Œ\ 7)«D·^‹N\ƒÞ€lŽŠòëˆ1¦c&›v“ÖÒâã÷üü}?àƒ•CÇk¦³.tà¿+Ô¤Ÿ°ÿC}N”kÂ}÷w½Õd@$gŽDàà[ÐÔ6$¥çeøÁ=|—AKïsÓÐ=1Dá; Å¿à/ùÑkvøÒDû¶D«ÛŠ6÷¨ ¸¥c…&WÚºøù9ÝC÷™¡…î ’æŽvH!®LŸb”Zœ•réjJÁw»ä+A‚SFðòbYÖt Ð1î/Ü9ûµ¿£GÃEü­<‡yU¨Y²éZÀäK<Ïç÷,#ås’çñ|êsߺG»DßÐ&>¯àt©ÉÚw0%*Þ€èð3£BL&š r?)/I«ÇS ›¨ÎÚEMEô-IÉöã)Ž¿ }Þäa#&yÔþlú;QŠ~kN}N&ñ%’³Š(هñî,hU‚m£$%& r!¢¨Fš‡;3 ˜´½¨$Qò$ª:\€ C·`G¸X˜¡N9’„F' u8ÛãUÉPUò²ÎPŸa¼{éÉ„l‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Ð(7C¯si½Í tMêZçšáÎ ¥.s¼OÉx˶s7’–­~ 4Æ)u]ïÒµ'ÒÂÊè’LKibáêÌ ¨V.Wµg I²/‡$ë•˾9Æ|!%*<«F¥WnpR~L Lx¥Œƒ§&ª†)y”aB ~OMð²Ò5ͨÝ\˜TÙ˜2}¦Ý ¡!ÆDOÓ ±±Õ 0~Üoh:ˆiluyÄf\žÙB«Ÿ×iœ3¢#‡¸Ô³•SºÀ†B¤íN’·°RZi+P(¿p4D“û”4kÃé$Á<̓í‹dçY¤lÖæå©Âɘj§ToÑFJÝ6§¡ñJ”•ª ‹S¢%F+¦‡Ð¥<(œ­ðQ‡7X}Õ4Jp€^.’w§kÜ`•áêŽÒÎ/Ñ,=ÈóÉë-–®ˆírX4ŸLÌÒfòyAŽg»¿ <6a(.žÃÒdêÏ@Ïv•B¼£l+¸¼v ‹Ý§ÿ`QÓ“HYð”ÅõSÄeMGTYŒîX1#oîÖ›Õ·«ý*ªJŽÓY%lME†ËUYDšPE[ef#QJK1íÞ K¶µgIÃÚ)û0‘¯‹xãoÉ žcÈQ7n›8¹e o„]Ô”ê¬Ó™éä¾OžÑhI›f ²•þ:Ré{–ãN?”7½'HC‰×&Œ}ùGžqô¯Fr¹ªi ¯,]¬‚^îi ½V¸>RªÇ] ¤U¯ð|áÊäHe3·¤V5ì)/ö^à&ÐÍÒëÇÇ~Þ> º'¸Ù)³’†MÇòSº1Ñ%¸[GÊ]B{¾o¨&ºß¡­©Eai–=<]âE¥Ã›i°H\#l¨:ö¥;Ä,΂-³Xvf>¹ÄÛzô5åÈ#ý‹],(⢦ü–^äZ\³ ª›@Ã*ƒV”c=u=%ºÃn±Æ¨ÿ ñ-œ…ÜIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment170ýÜñÉIDATH‰m•Ï7ÇŸq„9иG*Ñ̤9ôJOå°Åÿ U¹ŽÔC¦Ý1Z)›CþHû§Ô[¤ì¡U÷ÚC¼‹T®&HŴü>›v“ÖÒâã÷üü}?àƒ•CÇk¦³.tà¿+Ô¤Ÿ°ÿC}N”kÂ}÷w½Õd@$gŽDàà[ÐÔ6$¥çeøÁ=|—AKïsÓÐ=1Dá; Å¿à/ùÑkvøÒDû¶D«ÛŠ6÷¨ ¸¥c…&WÚºøù9ÝC÷™¡…î ’æŽvH!®LŸb”Zœ•réjJÁw»ä+A‚SFðòbYÖt Ð1î/Ü9ûµ¿£GÃEü­<‡yU¨Y²éZÀäK<Ïç÷,#ås’çñ|êsߺG»DßÐ&>¯àt©ÉÚw0%*Þ€èð3£BL&š r?)/I«ÇS ›¨ÎÚEMEô-IÉöã)Ž¿ }Þäa#&yÔþlú;QŠ~kN}N&ñ%’³Š(هñî,hU‚m£$%& r!¢¨Fš‡;3 ˜´½¨$Qò$ª:\€ C·`G¸X˜¡N9’„F' u8ÛãUÉPUò²ÎPŸa¼{éÉ„l‹J4é R0‹+t6Of÷’Ô=>ØBÎ Q…Ð(7C¯si½Í tMêZçšáÎ ¥.s¼OÉx˶s7’–­~ 4Æ)u]ïÒµ'ÒÂÊè’LKibáêÌ ¨V.Wµg I²/‡$ë•˾9Æ|!%*<«F¥WnpR~L Lx¥Œƒ§&ª†)y”aB ~OMð²Ò5ͨÝ\˜TÙ˜2}¦Ý ¡!ÆDOÓ ±±Õ 0~Üoh:ˆiluyÄf\žÙB«Ÿ×iœ3¢#‡¸Ô³•SºÀ†B¤íN’·°RZi+P(¿p4D“û”4kÃé$Á<̓í‹dçY¤lÖæå©Âɘj§ToÑFJÝ6§¡ñJ”•ª ‹S¢%F+¦‡Ð¥<(œ­ðQ‡7X}Õ4Jp€^.’w§kÜ`•áêŽÒÎ/Ñ,=ÈóÉë-–®ˆírX4ŸLÌÒfòyAŽg»¿ <6a(.žÃÒdêÏ@Ïv•B¼£l+¸¼v ‹Ý§ÿ`QÓ“HYð”ÅõSÄeMGTYŒîX1#oîÖ›Õ·«ý*ªJŽÓY%lME†ËUYDšPE[ef#QJK1íÞ K¶µgIÃÚ)û0‘¯‹xãoÉ žcÈQ7n›8¹e o„]Ô”ê¬Ó™éä¾OžÑhI›f ²•þ:Ré{–ãN?”7½'HC‰×&Œ}ùGžqô¯Fr¹ªi ¯,]¬‚^îi ½V¸>RªÇ] ¤U¯ð|áÊäHe3·¤V5ì)/ö^à&ÐÍÒëÇÇ~Þ> º'¸Ù)³’†MÇòSº1Ñ%¸[GÊ]B{¾o¨&ºß¡­©Eai–=<]âE¥Ã›i°H\#l¨:ö¥;Ä,΂-³Xvf>¹ÄÛzô5åÈ#ý‹],(⢦ü–^äZ\³ ª›@Ã*ƒV”c=u=%ºÃn±Æ¨ÿ ñ-œ…ÜIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment179n!dUIDATH‰ÕÔ=nƒ0p$†Ž¨'ðQ8W'gËV.P5çèD¶Ž9‰2d+â(Ưøùl'ÊP†ðãÙp‰¶Êð ÞRÊãzø@åÔ³uKáŽz-µ®QWŸ;[[Új©Å ºvY²ë”’Nª;#‘ÝMgbùê­è,³Ø U 1 ½ÑÊQ5+½1kGa¢ßcíNiáúÕÚ`"ž·zÙ~ÄVgVµ½)j|ÅšR†½¼dR53¥…“y¢õžV!U16ŒÀLksBXÞ…j±‰’“uBA¼D•—ø Ä”ÊþQÀ·+®œ„´ÖG¬uÿÈļwô·díL©sÞ¥kcÏê¿é?ÖÖQá*ö•£î^$õè鬶s¦zÀ³Hæ#ÆŠ­¨Å/&º^áÕ ëá7w”z©ˆÈ½Z«'Ù½‚§cÃíèk¦º¼¯„2÷öÖ°öúɇ×ËpW5:ÝœÏxÃwC,P9r™ÔtíÃÚ/Ðç¥zPÅÓtI*£$zºáH™IEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment171`úìgIDATH‰ÕÔ=nƒ0p$†Ž¨'ðQ8W'gËV.P5çèD¶Ž9‰2d+â(Ưøùl'ÊP†ðãÙp‰¶Êð ÞRÊãzø@åÔ³uKáŽz-µ®QWŸ;[[Új©Å ºvY²ë”’Nª;#‘ÝMgbùê­è,³Ø U 1 ½ÑÊQ5+½1kGa¢ßcíNiáúÕÚ`"ž·zÙ~ÄVgVµ½)j|ÅšR†½¼dR53¥…“y¢õžV!U16ŒÀLksBXÞ…j±‰’“uBA¼D•—ø Ä”ÊþQÀ·+®œ„´ÖG¬uÿÈļwô·díL©sÞ¥kcÏê¿é?ÖÖQá*ö•£î^$õè鬶s¦zÀ³Hæ#ÆŠ­¨Å/&º^áÕ ëá7w”z©ˆÈ½Z«'Ù½‚§cÃíèk¦º¼¯„2÷öÖ°öúɇ×ËpW5:ÝœÏxÃwC,P9r™ÔtíÃÚ/Ðç¥zPÅÓtI*£$zºáH™IEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment180eÀ> IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment172ùó½Ý IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment181çbð¨ÅIDATH‰íÔ» Â0ЇR¸##d¯ERa• Á X¢q¤‡/vBék @qãâèùsýTÚQ~GÃÒÊêोۮ¨*³JYì*¶ZÛóym²f—·±¡ í#ÛoVPõÀ#UóÚ º©*_3îÐÝ/nZÎjÑIË9¿4¶T/@E‡ÕP5oÔqItÞ¤ãžk“”f••%9f=vc[4¸ùò ª˜¬®|úYxvsRŒW¨©¾_ûeÿƪ«®úúX ùÑbIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment173ŽôKÅIDATH‰íÔ» Â0ЇR¸##d¯ERa• Á X¢q¤‡/vBék @qãâèùsýTÚQ~GÃÒÊêोۮ¨*³JYì*¶ZÛóym²f—·±¡ í#ÛoVPõÀ#UóÚ º©*_3îÐÝ/nZÎjÑIË9¿4¶T/@E‡ÕP5oÔqItÞ¤ãžk“”f••%9f=vc[4¸ùò ª˜¬®|úYxvsRŒW¨©¾_ûeÿƪ«®úúX ùÑbIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment182~k¡³IDATH‰íÑ; Ã0 `… s„ö&>š]2tì•<ô1¾@LLU»MR PºX‹‡ ý2 Pþ¬ÑTß|d4`2*-šÖ+.p¸3¡¨ât}©ÕŠ“íÊì<#F}£ð«xu4á‰l~k@Ó‹Úñê±UÕ¬Z죢ÕaI»S窓Ð;ì×Ç–Ú Õ‚zQç¢ÁÑša,™ÿ0”¼y䕤ÏdVhÚ´iÓ_èu»0)ß­IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment174è³IDATH‰íÑ; Ã0 `… s„ö&>š]2tì•<ô1¾@LLU»MR PºX‹‡ ý2 Pþ¬ÑTß|d4`2*-šÖ+.p¸3¡¨ât}©ÕŠ“íÊì<#F}£ð«xu4á‰l~k@Ó‹Úñê±UÕ¬Z죢ÕaI»S窓Ð;ì×Ç–Ú Õ‚zQç¢ÁÑša,™ÿ0”¼y䕤ÏdVhÚ´iÓ_èu»0)ß­IEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment183 l‘„ÆIDATH‰íÔ± 1 Ð8Ý"Üý!ŸÖÁ_Rü ‡ŽV\:”Æ\ï¶6Ep9ä2dyiI-p%:˜•Úš”äÁ”¡qŠFÀXÕ i7;Ñ–Ëê“®UxºG«©¤‡6oÒçʃ:U_¢d‹,÷U½Š†²úIQÓ½~VšÔ«ÚèJ£º²ö¿Ð½ŒJUíoXÒݤǶ¦›\áNW2|žt›+¬DÓ6¨ª.šL;#Ûàƒþ~ß©j^ÿÆ¢‹.úïúÕøÁ§íñ IEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment175g—(~ÆIDATH‰íÔ± 1 Ð8Ý"Üý!ŸÖÁ_Rü ‡ŽV\:”Æ\ï¶6Ep9ä2dyiI-p%:˜•Úš”äÁ”¡qŠFÀXÕ i7;Ñ–Ëê“®UxºG«©¤‡6oÒçʃ:U_¢d‹,÷U½Š†²úIQÓ½~VšÔ«ÚèJ£º²ö¿Ð½ŒJUíoXÒݤǶ¦›\áNW2|žt›+¬DÓ6¨ª.šL;#Ûàƒþ~ß©j^ÿÆ¢‹.úïúÕøÁ§íñ IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment184—'¿IDATH‰íѱ Â0ЋR¸ô7J6#¦rɬbD‘10ÊF4‘ˆüqRû®Aå_Yz:uŸ ÄÑõ¾?N‚$bô‚"ñ­«ë²ëÙÕ5m:pf;MqD GA/˜íç £è ýUT²ºøÔh´“®yŸÝˆÂ‚ûE˜¶ýˆMͬ—K)þV?‰¾I½²ëÿ³Î:묭þGoÚçî?1IEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment177‰™IRóIDATH‰íÓ1NC1 PW²5@ G`쀚+ud@$¨CÇ®ò+F®Ô d´Dˆño«À÷˜'9¶lu"ÂÒEÑWXÒBÑèX ( “â6èj½–¹€É蔪\ CG‘†T¬¬ÅýÐ[ªu'Ž=5¯’Rõ©šKAñª÷¢–pÒ´U4Oú•EŀϬY35)ZW¬ï²ò«eÝ4%û—î%õ4žÕì\Oã]Üy$|áéÛ¸¶²n:òÆ«š>²ºøÔh´“®yŸÝˆÂ‚ûE˜¶ýˆMͬ—K)þV?‰¾I½²ëÿ³Î:묭þGoÚçî?1IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment186ye ÈIDATH‰íÓ!Ã0 ÐD=Bn²jd jÆ{¥N…»Bª`†™å/ÛhlRi(¦Øòÿ ÂÜÔA}Šê‘ ¢­k6 êê ‚Âîë:l„ÇÂêJnÚêJE£ë…ÎAGK‚fKŽÓ;%A狨¦hÏiõ$)é(©’õ*è>‚.4÷ú(j’tJ£¤ùÜñœ²ã4ÿ”IN:Ágp©‹ºì ¿×5¨~yaeò\4h¦)¤>=Š–¹è»Xmw¿iÓ¦Mÿ¥o]zóßê~5IEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment178&TÃÈIDATH‰íÓ!Ã0 ÐD=Bn²jd jÆ{¥N…»Bª`†™å/ÛhlRi(¦Øòÿ ÂÜÔA}Šê‘ ¢­k6 êê ‚Âîë:l„ÇÂêJnÚêJE£ë…ÎAGK‚fKŽÓ;%A狨¦hÏiõ$)é(©’õ*è>‚.4÷ú(j’tJ£¤ùÜñœ²ã4ÿ”IN:Ágp©‹ºì ¿×5¨~yaeò\4h¦)¤>=Š–¹è»Xmw¿iÓ¦Mÿ¥o]zóßê~5IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment187UçIDATH‰íÔ± Â0à”³ºå!\ž–ƒpGÁW‰tð5R|ˆƒBÎ4i{ɬÒ[?ŽÜý$a˜©†ýŽjp%¢H¨S ã´Ú€J*>,4i½Ù:¥({Õ)U½Ú¬¦föÚyMí«PÈé ƒ©ºˆº9]pJ} aæòD©eqª*¡q_NêKJžÛiTÚš¬Ú¨[RnPAé£ÒYº¯;B¯£®/Ý-%¥.¦a«©J¸9÷Êòæ}Èw¦ :é5Œû—¢4ÌñvÚ{ö+E|Nê»~†Ygõïõ èÂìl;xêIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment179n!dUçIDATH‰íÔ± Â0à”³ºå!\ž–ƒpGÁW‰tð5R|ˆƒBÎ4i{ɬÒ[?ŽÜý$a˜©†ýŽjp%¢H¨S ã´Ú€J*>,4i½Ù:¥({Õ)U½Ú¬¦föÚyMí«PÈé ƒ©ºˆº9]pJ} aæòD©eqª*¡q_NêKJžÛiTÚš¬Ú¨[RnPAé£ÒYº¯;B¯£®/Ý-%¥.¦a«©J¸9÷Êòæ}Èw¦ :é5Œû—¢4ÌñvÚ{ö+E|Nê»~†Ygõïõ èÂìl;xêIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment181çbð¨IDATH‰íÔ;nÃ0 `4jí^¡[— ¼–‡"¶§Œ¹Rн†r‚ÊèB„X:É”’º´@-hû ×/QAZVý=e”AäÓÑ‚5t’m­y‡’;SYµÂXÐ; ŒÞº“¤ì)á¨ÚþP‹¤âÏ\öpÑXJ[Òó>$S5«Yƒ©¬Z4Éhè5çA59ª]MÛS~L<§±5•Ú(œúð –¾ª•FÁ,QêE? =Ëaª±/x°5ÏÚbcëiVê6Kúdëñ4¥ãM9ß´×·¯¬Yqz»G íáLö{VÕ+Èn-lô~Kð+ô]¸Y¬ßãû7V]õêG6ÒÍÃVÁ^IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment183 l‘„·IDAT•5Ï9Â0ÐÏ¢ÐÅ7°¯Aì›%†’–’›¢àA”PºÍgƒ5ÅÓ¬2è8&Jq¼æ8º×¾ ìeÓbpšîëÑþ–SubÒ-û¤–l*èê@m ¨Þ@C½eËÇ ƒEœ°Ðe[p\ÐO·üŒç¹A–ÜrºþÐ?È¡"'Cø£d>©ö<+¤`ŽÓJÒëÓ7ÀLÃ=w-€.—Ÿ‚CD©Ð{oý®Ë?q±~‡IEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment186ye ºIDAT•]Ð;nÃ0 `ÚÜ;AxÔƒ¢€ s¥zº*)GYB€À7|€›§"²à¨2ˆñ5Sf‹ òDÄUVǬF*¬¸Z½Xq®ŸŽEå\Ó´cÕ4;*/ê+×™;(îˆF±hr€ÞÊGè8;‚÷a{?i#jrP›%ƒ6Ä"[¶ÒñóÄï *U¿ÔϹT™(LØd&ØB <àdÿÆ›ý½l˜Ûãà¿IEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment192gpS°IDAT•=Ï!Â@Ð_Uk {d{-mH®TRQÉè¶ÁŒØÌgv¡MF<1ù$ç+)``Ø ’'l³×½S´€WïÒé`Hþ.²Ã±¤Äpû( òC2ŒâyÅÑl'6É÷¤É9êúÔf°~2ò7C œFΗ äqÅ´â1”œ‰¾ ž4t¯PðX…ÓšÑV¨ΰÁ® «¸pÑö ÷4•ufy‹çIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment194Ž5f£IDAT•Uб 1 Pç h®`€0 Y…IB¢)Unfb£"E”»èt–l½Â²-€g%.Ó]P œA©”5NÙÒ¤«1["]6D$KIg1YnÎ&Ênß@‚bN“VÅÒ—ždSv€O( n.’€¥" kÃX%9Ã¥bZ+ºá»iǵ!êIz,·#^à ÁØcZ1O ˜1¬7Gœ¶U7d~þ!îè*Äù,åÈcV ‚ÇG ÀÛ¢?Ï¢ž ôJlÙIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment201-ýÄùäIDATH‰íÔ!n1PW }„¹IæJ…U½RAá!GIª‚…½‚£¡^•L¤‘gUê1Ø ü$ƒ?t2†]wÝu×ÿÔÃvþ:*J¸r[KH¨­«¤ücl뢼,•‡¶Þ•ç›’£³éªôÙÖ“âêõ­«'ÓÚÑ¡S[ó‰£)9úz4Uvº*ï±$qyÓÑy¹šNNÏøªTÒÙiƒ)ðáhìi¥®²©²£Š ñôD7WWMÑ×R\$œ L³Àic»ëë$Õéy|zóµ×’zzÇsý O úîÈ5ñ™IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment203Ãó¥Õ½IDAT•UÐ1 Ã0 Ðè𾈩¯Òƒ'¥CÆ¡W±ÉÐk¸7p7 ª’’¡Á[ô%²¢ugäVНpˆd˰%‰†Æk–u¡±‡Íbº*J°ÛÚÌ&“8 @í[ê r˜”)²":HbÍÔ] ŸëÐC ªa¯ã »C:°?ð¤ã4TÙnÅŸo®?Dì˜:ÌŠ¥hy®¥ö;Äëa­°ev¸¼„|½1ô¼÷UB“v­‰ÜIEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment205*àÃIDAT•5Ï1jÃ@Ð 1¸YP›€a/b¼×J±H6 ¸Ü#ä*.|ºÀw÷!MþÊÉT¯$5‘ÙS"Ëê+ÇŽØa¼°\‰€keùl(•Ý8â[ú8Ñ13šãkÛy—cÚ‡0Î’“ o—úÑpÀTµ!àgl8prä~÷‡Á±wô°v­CGÔ¶ X²'”7<³¦†õ‰ÙÖ¸hò`·ˆã –›ô¡á~—5àRÔÀ‹WÍà–úÙ~Énž|Õ†Ý"IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment208T!|]ÊIDAT•5ϱmÃ0г «37×H!ˆk¹HÊ\F#xÚ.RjÊ „%¼|:ȯ®8ÜGÕlW‘;&Ã`‘vŒš~Dƒ"z<#ç®öG¬Ñ-—jX’SÏ⮫îYpK£ÞfAÌæ Ÿ‹¾ >LšÔ§à$B#î N†Üpç/ïDÐ ì°UƒÙ£ÁäÎ(Npr™E§Ì~þ±•©á…«¶?Pàð‚÷x€ëW{;~¯z,d¹1Éc­¿ûr›$E×ZøIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR@!AºŒ pHYsb&2 tEXtComment220hÌ–í½IDAT•EÐ=j1 à7¸p9ø"!:š=L±×ò’bËaR¤Uª¨0~k™„}ÕúA$©Ä„&6qÔÈ’Ðk vèFãeG›ÅkOï-³v9qê?L¤š8Lâì-TËÐ\&ÄQ½'\T.‡ã¦ÂààÜj»O±p${¸±‹cDZÖ|b$êp˜ð³›#Ë—Ù¼G‡|kÏ´W)èrG…”­ Q Ø8ä'ï ‘ø¥§­·ÌüðΦ>‹IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment222†Â÷ÁïIDATH‰íÓ1nÃ0 @4ò üF‡ úRÇE•ÀƒG)…Ð/¸ðd(¨b-g%U c`. %’mÄ MaÓOUôµÓÜÌ’<9zI"›õWºIœ/¶@Z8™šA3NM•Tµ÷4ö›’­ÔóŽ2žùàªày>`øŸRÇÏÔPyõõ=(GO5SÈ UWõCÝÌL:54é°j´õK•FW§ïB£7A®9Žƒ§¸ä´îF2µ„I§ë^AÇ@‹…µÏþÒxu”7½™ Uå%eó®/Šõ,žÞclªs«]wÝõAõqÞÞ›þw»ðIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment218M:MïIDATH‰íÓ1nÃ0 @4ò üF‡ úRÇE•ÀƒG)…Ð/¸ðd(¨b-g%U c`. %’mÄ MaÓOUôµÓÜÌ’<9zI"›õWºIœ/¶@Z8™šA3NM•Tµ÷4ö›’­ÔóŽ2žùàªày>`øŸRÇÏÔPyõõ=(GO5SÈ UWõCÝÌL:54é°j´õK•FW§ïB£7A®9Žƒ§¸ä´îF2µ„I§ë^AÇ@‹…µÏþÒxu”7½™ Uå%eó®/Šõ,žÞclªs«]wÝõAõqÞÞ›þw»ðIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment223ñÅÇWÎIDATH‰íÓ1!Ð1trç"›ìÍÄÕÂÒ#¹ K¯ 'pìØHø®Ö~*›%„æ…ágAeläÇZbMM±‰8íD‹#ºu¥Qcª»¼W¦m—@µ´ÃÏÎÍqxƒj?NÆÔ÷¦ŽVv½…š¦@+×¥%MõÖUø®4;v¿™ë7)W‹T³Â@5µ¸fNŸgÃöÚˆ×[‚r=?ŠÞ©î¹½P•EÚ«"®¢YœMº¨¨f‰æwÕ÷jrüýïžuÖYgý¾;ñj¨d¨ÝIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment219:=}ŠÎIDATH‰íÓ1!Ð1trç"›ìÍÄÕÂÒ#¹ K¯ 'pìØHø®Ö~*›%„æ…ágAeläÇZbMM±‰8íD‹#ºu¥Qcª»¼W¦m—@µ´ÃÏÎÍqxƒj?NÆÔ÷¦ŽVv½…š¦@+×¥%MõÖUø®4;v¿™ë7)W‹T³Â@5µ¸fNŸgÃöÚˆ×[‚r=?ŠÞ©î¹½P•EÚ«"®¢YœMº¨¨f‰æwÕ÷jrüýïžuÖYgý¾;ñj¨d¨ÝIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment221˦{|IDATH‰íÒ½ € €Q¬,ÜÀµ,Lp7 ×Ð ¤ƒˆ  ÀG¢¡0áÚ—»Ëýˆ1‹‚º’:È~´W Ö  Ú‘_t’ sCFj£ž¨ ©Ô×Uöµ# íkÕ¨[1ÝM”QÜ•Å߸LãÒ´U­Zµêô-C8q“Ñ3zIEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment223ñÅÇWPIDATH‰íÓ=nƒ0po}ƒú•:øZ"ŒÔ‘#ä0 Œ¡Aé[ 5Ê‹ÿ}n ÅùèZU7óÃð¾,ðÃ*ſԭ͞º´%1k0™¾k”¬vRÊ5„ ᎚ +íÉÜVÛ jGzÖ<*ìåâmè“®g ¸RyWmÒã9ª1WÙ-qV­ „;ÚÌÚqôp\²lèIqh¥h,¿±^jWÅB#u¡£h7M\eß®@:>skVÝ^¨JµMùÖ®4j‹¨J¡¦å}V8̺6]”K¥SŽ’ÕVd:¦. _êùÇ5^—zZl“Vž”ù:ëHPÞ_h5éδϺôÆ£µïÁ1ÛIÝòàG|Q}ÊÈ6뀥 IBíÒ\ÙÖvs8ÍÿT !ƒÐCäî«Ê¶¦ýâìIÇ4íº Ø´—j¾ïÑÍ%ûî?ô¡ý‹ú ~ò×å©‹Ô§IEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment226¯3ØÄIDAT•5ÏÁiÄ0…á' ¬[´x ë–RÀ"É1ì5-MH#rÎ)P4-ìíƒÃ?h¤¿ª²@‚VR™QrÐ6¡Åë2aç.@¨‰J7Ä3w›ây%n4ÁÜ蜯ÁмM†·'êͳ\JM~¼€9‡MÂŒÖ/ñºiB†]{²‹¡nyë€5Ÿ: 9m ¯Ÿ2ðÝׯY÷£Q±/2\³ƒe Ç@‡Ó¼Þí7ÀWplz¦)vW.ŠKàIEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment235½S#ÌIDAT•5Í!n1п2hZæk¬2Wʪµ#ƒeÍ•lô¨ 0†ÑþÚ‘:Ÿ<4pšçƒhŽE˜¶ð–'j¡¯¹E_˜öŘ·®n€]åÎL,]÷;w]¿ëÜà¢üdŠ/ìó< ?<’i†ñ«DsÔŒÑõSÉ+¸ðadiqàðÿdÓ§FiçÏÒÖPж7)°c•w…]ÞÅà2 ¶`æ ›¯}ô®¯~"Éó€…%Pä_¶HŒ¼æ‹¯q“ÅÛ¶B¦IEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR<“¿“G pHYsb&2 tEXtComment238 /žÂIDAT•Eϱm1 …áŸP¡&ˆn€Zá&Èe”xƒ €eÜYI®n uiYª¤P wð=’¾ ®M •XQ²WBa'9ÅgV~Eß\® ñV?ܽÁ–ëûáX~‚+Ü,ˆÁ[7D?¥t‚Nä‘âÄqÉzWÎcà'†¸jëÝÿÑ-žƒKÝÎŽXW¹æO¤ZŽ8Cn_‹à^¿ƒ6I{‰bçD'ú‚½¶2ìtgf„f¿Ïª8DÿF£e“¾qeIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRA[TNÊ pHYsb&2 tEXtComment240>–1k¾IDAT•5бm1 …áwu¾°ÍWVé52† Ãb*—^ÀÃð"ò*YÇP:_÷‚ø“Ðd–ŒÑ¢­dÈŒLiEb¼&—.Äx—\g•$$kW5‹ŒTc£Ú…«+t….výn‚ë\¨ !~ĈÏ.Ÿ‹û÷&»éG_i×aQÿïÏu’ŸMr» µëT½ Žª·¿ßJ H¨e—Wû·¹+ˬGêYY‚öÍ1™LãðkãÌÿ3V‡¦ý™É‰IEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment250'*¸IDAT•5Ð1Â0 ÐHd#@ÍMÚ›‘@FŽÀURu`ä E ¬•X:DùØV±dë-–ìZ}+t~˜NøŒÌ;¢ÅcT4xÁÄìJ{À}Ž9,q èVŒœã/À3'&E Š$p†Ì´SŒ¯½‚gÞΆž·ÁàȬ¨~E t+–È»à‚¹Vox•â†9 –±BöüXºÒ¦ø¾´"¸zl oz}YB@`²4RäÛð’®?Z½®Êª±)IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment253¾„Q¢IDATH‰Õ1nƒ0P:uk† ×èT¡7*É”‘Þ W誢*#GQ†ŒNÄBd‡_Ûü¤~ pxØþØ?I ˆ~h´ ú,(!­SÓ!7§z¢‡A5jÅêv¸­Ì! ó9Ù׫ŒTFã˜NUeZƒ÷ 48T˜M{G?û›gºÑQßi4ƒŠ”fó¾µ[)œëaP»T6Ì ©Ö¶¶k“ÈDq•-þò:}M»:ª‚~•ùAhÑ 3¨2Ög-°ë˜ó´¯»A(ÄgeT'´[¿¬®HÅÝZ“Zø#™Uÿ8<÷“Êy1¶Ü.ÌŸ´cõ„-Eée–¸»éª³‰œrVQ±V;Jý¼Lµï[NŠÓ-û=2U'i­Õ¦ ºEÍé’X+Œo33¥;xÉ÷&«<©|ACλ3›Þ¼ÑóvÐå„^AkÙ½zÁMÔ¯„žqõ©83Ý×ÄÇdÞÛß žVO³‘½+V!­a«á”©+¬yN¹šÄø¯^Y½ÜÑ#©’U\jBKw9¦ßW¸K¥SÚ.Ý/¡¾¯Lެ¼šuþ^ˆø³iâIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment249GJ‰Ï¢IDATH‰Õ1nƒ0P:uk† ×èT¡7*É”‘Þ W誢*#GQ†ŒNÄBd‡_Ûü¤~ pxØþØ?I ˆ~h´ ú,(!­SÓ!7§z¢‡A5jÅêv¸­Ì! ó9Ù׫ŒTFã˜NUeZƒ÷ 48T˜M{G?û›gºÑQßi4ƒŠ”fó¾µ[)œëaP»T6Ì ©Ö¶¶k“ÈDq•-þò:}M»:ª‚~•ùAhÑ 3¨2Ög-°ë˜ó´¯»A(ÄgeT'´[¿¬®HÅÝZ“Zø#™Uÿ8<÷“Êy1¶Ü.ÌŸ´cõ„-Eée–¸»éª³‰œrVQ±V;Jý¼Lµï[NŠÓ-û=2U'i­Õ¦ ºEÍé’X+Œo33¥;xÉ÷&«<©|ACλ3›Þ¼ÑóvÐå„^AkÙ½zÁMÔ¯„žqõ©83Ý×ÄÇdÞÛß žVO³‘½+V!­a«á”©+¬yN¹šÄø¯^Y½ÜÑ#©’U\jBKw9¦ßW¸K¥SÚ.Ý/¡¾¯Lެ¼šuþ^ˆø³iâIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment254 àÄ3×IDATH‰mÔ¿oã6ð§Ó AÙ1ƒ)½¡«oK&üWÒ©«Û¥>ÀgÉ0Pµ“Ö9äoè_P¥šÑë¸BÊeðx <ˆF)½~©Ž,›Àá~ôH>>’ÄÌ9Qê)JiL¯iNKöÈßf¼äˆ:Í¡sw­æ”° oÁüÔ¨‚º9ýuZIVSJÌÙ‰ç”"6Gìß3è„„™Ÿ¸w#§h‘Ó—Ÿ©ëÉÏ¥¹KN²Õ±ñóèlLþz§&R‡¿xÔµFti¤J¡âFI=ñtXyì(jUj©s¨|¯¤ùIh†>˜±UMt©åï}u^…‚¹Â?ž[UÉÜ=~p+I“€Y˜¾ãŠ )F$mRO»éøqZÚµ†l5ÿŠÆA0Ú|ò‘8i#„A<ëV‰&ÓÉ(üŒÔÈe("=Æ'øöYÐTkÐOèõn[Dùµ9± Ç@ØžÇÚ‹ûZ6U±Ï¥r ‘W/ª)!$Gï8±ê7TÕ›éÄñÝó”ùAð®5º\ëg肃oxÕS·ù•·ÝV„E?0ßî+†û™ t•ÌÙPO݇’‘ÔÒYs¿=Ú‘Ýä*yõTC«ÏÈÎÊÑy±ëgNê|¡>yøùœþØE©:ŸFó+òës«Z´Ý6Z¡¦XRÉÚÙÓ¸­U…ʳ…@ËðßúFtzñÊã«WaÕiêw*ñ#ç­ò?ë¥aS#7’/9"íú lE­©KvÈ^Û•ж+é°µÚÔ­<¦k«EyLÔ©c7ÇFÆ&UvÞ§eÓ• ”ê5ßÝ7]I_¿g}=¶ºx:¢¬ò± §hJ·7onﯰŠ?óÞ²ÿkçNüËWçèQ=ݰ¬¯É?|õ=ÛV¸tV35³óοݛÒêŸÐUaprªùåÁfÜB“µ!ÁùÜmºz§vÑÔ]s:³šu¯ãr:Å­—ûùÖZTx-ò©ÿ„'­«¢a M¼‚#××rmð@n_B·ö?ÿZèS‰ïÍ›VM»“,rYkˆómºØ²ÕJ¤³SÏ×Ó$îBzU€†¿z˜ñ!>8Y¨¾ˆÂH¼Õ¼ŒÃr°Í«å´äEšÅÈx0ñ-²//Z±§e«í›½kØš {¥&Ì¿ uSÏk¯'Öó ÉaìwxVöLÝr8¼ ’o„ÕŒíF™}ý‚hæ;Y}î”èÕÌ£U·MåP}ãQfƒ²n5}•|o3 9î…©žÖ«]/5ÀÙܾb1H:Þ)Ñ)íº¨=ÇN««£ÚQânÞæ•Ì»[Õ^­ªVQ‚8Ü;ú–³‰8ŒIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment250'*×IDATH‰mÔ¿oã6ð§Ó AÙ1ƒ)½¡«oK&üWÒ©«Û¥>ÀgÉ0Pµ“Ö9äoè_P¥šÑë¸BÊeðx <ˆF)½~©Ž,›Àá~ôH>>’ÄÌ9Qê)JiL¯iNKöÈßf¼äˆ:Í¡sw­æ”° oÁüÔ¨‚º9ýuZIVSJÌÙ‰ç”"6Gìß3è„„™Ÿ¸w#§h‘Ó—Ÿ©ëÉÏ¥¹KN²Õ±ñóèlLþz§&R‡¿xÔµFti¤J¡âFI=ñtXyì(jUj©s¨|¯¤ùIh†>˜±UMt©åï}u^…‚¹Â?ž[UÉÜ=~p+I“€Y˜¾ãŠ )F$mRO»éøqZÚµ†l5ÿŠÆA0Ú|ò‘8i#„A<ëV‰&ÓÉ(üŒÔÈe("=Æ'øöYÐTkÐOèõn[Dùµ9± Ç@ØžÇÚ‹ûZ6U±Ï¥r ‘W/ª)!$Gï8±ê7TÕ›éÄñÝó”ùAð®5º\ëg肃oxÕS·ù•·ÝV„E?0ßî+†û™ t•ÌÙPO݇’‘ÔÒYs¿=Ú‘Ýä*yõTC«ÏÈÎÊÑy±ëgNê|¡>yøùœþØE©:ŸFó+òës«Z´Ý6Z¡¦XRÉÚÙÓ¸­U…ʳ…@ËðßúFtzñÊã«WaÕiêw*ñ#ç­ò?ë¥aS#7’/9"íú lE­©KvÈ^Û•ж+é°µÚÔ­<¦k«EyLÔ©c7ÇFÆ&UvÞ§eÓ• ”ê5ßÝ7]I_¿g}=¶ºx:¢¬ò± §hJ·7onﯰŠ?óÞ²ÿkçNüËWçèQ=ݰ¬¯É?|õ=ÛV¸tV35³óοݛÒêŸÐUaprªùåÁfÜB“µ!ÁùÜmºz§vÑÔ]s:³šu¯ãr:Å­—ûùÖZTx-ò©ÿ„'­«¢a M¼‚#××rmð@n_B·ö?ÿZèS‰ïÍ›VM»“,rYkˆómºØ²ÕJ¤³SÏ×Ó$îBzU€†¿z˜ñ!>8Y¨¾ˆÂH¼Õ¼ŒÃr°Í«å´äEšÅÈx0ñ-²//Z±§e«í›½kØš {¥&Ì¿ uSÏk¯'Öó ÉaìwxVöLÝr8¼ ’o„ÕŒíF™}ý‚hæ;Y}î”èÕÌ£U·MåP}ãQfƒ²n5}•|o3 9î…©žÖ«]/5ÀÙܾb1H:Þ)Ñ)íº¨=ÇN««£ÚQânÞæ•Ì»[Õ^­ªVQ‚8Ü;ú–³‰8ŒIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment255Wçô¥IDATH‰]•±nG†ç²Œ®Á£‘FŽ nAê„àÊp‘Î~\¤´‚44LøV 6AèÞåGH&Ì#h€"o°Ú¸Æð.£Gp³“Ù=Q¢½AñÃÎÎ?ÿÌf³þŵ™cÉLŠ®.Mºˆ‘è?`Þ<œÉÞ-ŒÐD̵È~˜“N¤ ’°îÞš ´Dêïî3s?ötêétYÞf³iÑöû'̨ Me À–|þ~FÑÛè\/žÚÚ>|å²PÞ4Q¥ŽÞ>%œ6"÷f?’,‡>ÀôHŽâxêRiÓÍÓ»k÷¦g,—GuHg†cöDÈR¬ ØHèjçOIQb)ðÀ$8°ÂtÒè5Q”LÂ.å¥0¶™XI ·¡¢yXrä†«ÔÆ ®dî\S,ù†ç#åár 7å÷^.ø›qîr‹ìi´†Ã ÂÃ@£@ÏÅ«ñm·Tب„k!ßzúgEŸ™]ª;ˆKˆV8iØ?D‡xô ÿ›½{ £sht` Ž+Ÿ¡=Á&aŠhyÒèË`K{hïûnˆêÇL²²·'v(eoÕ›ýkY‹ÑJ.ÜôôIú²ó`̸Mô cÅ<ƒøè5àDánaz÷^°‘m#ÅÐÓ×äÀ™§I16bkÛ-&TlžË6÷‚W›ãÌš”%ºLpd„âù ÷/égÎ =â,…L¼KÁÁ@'348 r'¾Eæ}üNg.6£™08¤ Ê J+*ÊqŽ“ _ã‚(·¾‘ˆŽTÙÍ)xûÒHç©â®L.)ÎeJÉÚ wý [iN_ž OcÔÓfvªÑN•4!ºÁ¬Ù†J¶ixh©q;`kÌ ûCØ¢[±*Ì‚‰q*{DEï-uÃÑNYÊN þîb{×UBái t®¹²¢QrŠ9ÔRSµàVmGAÜI| D¾×øJ†muEÉÝ÷ž6Ad{m¨Àn%Ññõ@Ì÷EwZÕŒí:¸¢Zñh²PÉX ñŠêkš,Ä0OTzаÿ9-²ämwo5R4m²õyä"ãžÔ‘¨©!`Y­¤@ÿ€öáoÇôW½¢Óe K\(®.œþ•<ÃKW˜\„ÆòT¨|¡ŸÓ*ºÞêõ>ñu^àóÐ,ÍOªá—ÿÊ+g®sµœã&Êp>ú(x›æûšnðlU,JOíyú?€ÿ^yT­IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment251PŠ0¼IDATH‰]•±nG†ç²Œ®Á£‘FŽ nAê„àÊp‘Î~\¤´‚44LøV 6AèÞåGH&Ì#h€"o°Ú¸Æð.£Gp³“Ù=Q¢½AñÃÎÎ?ÿÌf³þŵ™cÉLŠ®.Mºˆ‘è?`Þ<œÉÞ-ŒÐD̵È~˜“N¤ ’°îÞš ´Dêïî3s?ötêétYÞf³iÑöû'̨ Me À–|þ~FÑÛè\/žÚÚ>|å²PÞ4Q¥ŽÞ>%œ6"÷f?’,‡>ÀôHŽâxêRiÓÍÓ»k÷¦g,—GuHg†cöDÈR¬ ØHèjçOIQb)ðÀ$8°ÂtÒè5Q”LÂ.å¥0¶™XI ·¡¢yXrä†«ÔÆ ®dî\S,ù†ç#åár 7å÷^.ø›qîr‹ìi´†Ã ÂÃ@£@ÏÅ«ñm·Tب„k!ßzúgEŸ™]ª;ˆKˆV8iØ?D‡xô ÿ›½{ £sht` Ž+Ÿ¡=Á&aŠhyÒèË`K{hïûnˆêÇL²²·'v(eoÕ›ýkY‹ÑJ.ÜôôIú²ó`̸Mô cÅ<ƒøè5àDánaz÷^°‘m#ÅÐÓ×äÀ™§I16bkÛ-&TlžË6÷‚W›ãÌš”%ºLpd„âù ÷/égÎ =â,…L¼KÁÁ@'348 r'¾Eæ}üNg.6£™08¤ Ê J+*ÊqŽ“ _ã‚(·¾‘ˆŽTÙÍ)xûÒHç©â®L.)ÎeJÉÚ wý [iN_ž OcÔÓfvªÑN•4!ºÁ¬Ù†J¶ixh©q;`kÌ ûCØ¢[±*Ì‚‰q*{DEï-uÃÑNYÊN þîb{×UBái t®¹²¢QrŠ9ÔRSµàVmGAÜI| D¾×øJ†muEÉÝ÷ž6Ad{m¨Àn%Ññõ@Ì÷EwZÕŒí:¸¢Zñh²PÉX ñŠêkš,Ä0OTzаÿ9-²ämwo5R4m²õyä"ãžÔ‘¨©!`Y­¤@ÿ€öáoÇôW½¢Óe K\(®.œþ•<ÃKW˜\„ÆòT¨|¡ŸÓ*ºÞêõ>ñu^àóÐ,ÍOªá—ÿÊ+g®sµœã&Êp>ú(x›æûšnðlU,JOíyú?€ÿ^yT­IEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment256Îî¥$IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊ/[?@öŽÊŽ`Y>œQEeh;'IEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment252Ƀa$IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊ/[?@öŽÊŽ`Y>œQEeh;'IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment261{§c÷IDATH‰í’Í Ã …zàH'hF¡£t“d´t“lP¤^r@P61=WU|IÌ—÷ €ÿR œô¤?KŸcj!”Ð=R5 ®¥æ<×ÔÎé{êVö޶l%ìkR‡ÎVö蟺š»]Þ±I2•r=ЂQe‰¬¨´·LMEóà# V  ÙÚzm’l‹h¼C¹ (%gú”nÉô©ßõaÒR×îQ#›d˜qj‚ôâ_¶¢~ˆ´H5. vº¨‰ŽŠ6P§|œÓãRªÉZFîpUÇ´*¡‹kÁ˜f†ß- ¬O)ìÅcŒhš}Ò¿¦®–®=ŸIEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment269u|ëMÉIDAT•-бjÄ0 àÿðC¡^3ç׸¡Ä¯tc‡#v¦Œ÷J 7ô5:tÕ¨ÁXUB4}Ä/ jõ§“@¢Ê¦ø;åµõwÐE·¥=ÖÅ c™òÛàñâü³pöˆœæõDøå |t8žxœ(ôPòÀD#œ °ˆÑmòèÒ:ª6¤“¡¹u-έ3d-¨ñ„ i‡‡W\yÞµ—5dÍ·ã,PØÆ$•üj«V­Zõ×úÛD"»¹Te­IEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment292e6. ÑIDAT•=Ð1NÄ0„áA[8Âm „Å-R ÍY¸e ”˜†”\ÉQŠ½Æ³¸€#š'ay°‰îëþÑ€¤,¤";GU¤ ?-u‚ÜѮԛ»S{쩸¹ÃWšOX}w‘¥ƒÓ N¤+€Š-=UL €ûÇÕ…tß!Èb½>vˆÖ—¡ýskñƒá•i/ü” 4ddPÛ°µÍKÅ*Èãh#@Ëh¾iŽ2›½8ɳ¹eÔf³j…Çblª—Ð7„QNÌQ98ü¡‘ßù’ÈêIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR@ÊöQ pHYsb&2 tEXtComment2931œÈIDAT•%αmÃ0…á'¸P€äVð·’ËT¦*5’E°péÂ@ œº ð…Rþê+ðÌ#8³ ‹À;zÏ!ÀÀmäÇe‰kág‡Õ4—*^¦S©aÄÛd*÷ð} †Œ¡Á¢dà&½)'àzbÆp•É•‚ᦠU°˜>\÷€Íbv`ar}`bùR.`¦7pbõÒŽT}¶õP°Ç†{ƒSVßTM¾ËÌhÆM¿ÿˆiÛõ…¡a­2ˆ¥çåÙ@ ùmœ,ë7ÐIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment297\Ú…·IDAT•=Í1NÄ@DÑ÷Ì5ˆ˜+ ÷ŽpÆ8 ƒVÂ\aV6m‹¤…Œ‹nÌRÑ‹êƒ/ä‰ü‚]’(8WÇQe˜“Iç¸Àhy§KŽô¸AøvÆ;öÿ¸Nã uÃê]6Üæ¡Ézƒ¹åƒØÄs‹£ÒTÌQHëÁ‡3º€öXw:–ô|0¶–SÑ€J*ó/îsù 4ä2*òëØCj÷MñãX$P…¾ïõdü‚åIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment298…ãÇÙIDATH‰íÓ½ Â0`##Aç¼ -A.R2£@”"%+QЂ(ˆEâ‡M•_(¡ðé$ŸNçóÀDâwºÅ}BK´€Ë‰ÖØh®´WMôè²ÓÖëŠiŸ•“Z_Q9*é;êŠèì¥ó¾µê¢çíÕT}¶îDNöìÕ8AúÂ8mP°yË -S…EnATÜl/ãnödAtðK}…‰« zczÿ¦;®g ÕÜÐĵ˜¹ ‡¸ éÔá±n¢NHxíIíR…÷¸'ŠðB2e‘4iÒ¤¤OÖ› ÒñÌÏ·IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR@ÊöQ pHYsb&2 tEXtComment300[8žX®IDAT•MÐA à Ð)]¸ô^¤à•z€P…féz•ˆ‹\Cɦ«ºüŽ1„êæ1ÎÀ©jÈIŽ’Bµ-Í$ÑP ¢Ö4%,q3)†_7ûlйڸƒ« ­Çpq·?°› K=àw$ÚT5¥¯‚»`ÍÀ'†eèS(·ßHµ§rBb(~4DÒìÌžP÷¨ÁÚ¶xgøoÛ ‹\¼ É|€Ù6°»ަQJ¤IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment304\UZA·IDAT•5Ð=‚0ð'&t³7°×pŽ$0008r%H®QÂàZâ` ß«:4ù¥/ï“~;ù\‰X“›Ñk„‚† £‚/È:t6ÁC' Œé‹Ý,pŒ5Ÿ° ú‚ h/‡ðÆ—ò3 8=(÷ æ¿þ°ýÁUÎzF.XUµ DtˆQ32Æ]{„3£ÖN¶8†FMŘeæG@;Âh\`;ô9Ù΀rr¼xÃ×øÅ>¥pµ‘þ8IEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment305+Rj×½IDAT•MÏ1nƒPÐA. ³KºŸ#¤¤°øWré"¬”ÁW1ú…¯ò¶\)èOvM‘lõмÓO¡JÏ©ÆRp D…´ò>9¾…a$COÇMº8(ùŠÉë³au¼äºƒ¢qá˰:,ÌY §ùàhkHáÈCˆ8üèçþá´#mµO·7¬Ufÿ¡ç˜´JmCÒ®B)}Õ¶Æ…aÒ­~?T,%1\!Gæ>CBâš.ÅôIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR>!©:%§ pHYsb&2 tEXtComment306²[;mÈIDAT•UÐ1jÄ0…á·ØàÆ v ƒ®‘¬¯’cl!V ¸ äJZ|€\AKŠ´³Ý"/#%)2Õ× ü3à;mîÚQ¦r`v|ñqer|±g¾mœ{lÝúeX%úk =žåò‡àS¹ôØâ+˜Ë’K,àÍ*>õCÅ9@a‚<Χ"=ذ´"J Ǭzô N>ëÌ>©muz²BàÑí B»ÂR×·óˆûÎ40M cö+dýJÅ7ÍuœiëýŸ”IEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment308UãjÈIDAT•EÐ1ŠÃ0ÐoR8[wÎRªèJ[º0IÀ…·Ë•"Rä{€t+4ûå¢ê!¡áχy«G!;“‹5ŠØX F<îvíòÁaŽÖµ:õÄ¥›¥ì‰óð«˜|x­7Ù‡údÄ]ÎDRåÔÃ~*öö¬àäÒŠJHCd8H$&ôø“¯ ~—ã%ÆoHu>Æì*’m+N>$»~Ð £&ûÆB<3/\g‘Òã7Øí¦“c+Cf6Q,C±–Â6þWÚœ}Š IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment312¬-Î5¥IDAT•5Ð1Â0 Ð_uȘ•-GÉÅ*‰ƒÔp…0±†Í“]ÒLOqäÿpô0 ’mfM܈:³¤> ø¨‚%“å”ýñŒ‡dµ› Oɼ:ø¥A o*; /ƒ:n6TÌàŶébØÓ5@ÓÀ¿ÆɆd+e{TòÃï³ ”gÞÇ‘¼aÀ¶£X–¬»§W¶¨Þ§…eÝÙ²"ãø– e½Æºqp·IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment318Lø'+³IDAT•Eα Â@ ÐQ„‰6¬‘.kQ H‘’–q‚RÀF,pé\œîãK¸z²eû#îéõ6„’F I¨1„Äc~HKzõŽqN¥•‰@dX ¢|4*ƒYƒ3NøÊØÔàè0Àþ +Ñ…³#¡Â¤3|=_‰À;:¬q¦/< úŒ[¬ ”yë‡É±Í|b«T‰¼áz§6Qj<:¶%wžpŸq±óÕ£áuN°IEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR@ÊöQ pHYsb&2 tEXtComment320iüÚµIDAT•UϱMD1б8t¸ÄvÆžùH¿-Ÿ. ¤Ÿh`‰ð ˃ý9&zÉÌjÑMh s,q| |L¸ž4mC".U%w ت°t ȳSšnÿ°OdœMü¯ª g°ÒçÆæ;†ãî ä:“¾Mº­–š®Á ãÂ¥ÅÏÛBnñã¶®»ßþð~íºO¤“ë²Ã·„_Øüzg«Ïð|HÈe ðUPg*Qü²cš*ky¾ IEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment329ÒD~»IDAT•=Ð1n! Ð?bJ£p¥Ü€ASl)W´E®ÁhŠ´¤#’Å_`V±\¼âÛ² ÎB]X=›Gwá§CÎaµ¼ R Æð}À»ØÄbïѤîfbW¿á¨>â,a›`¿ùÂB+*Â}QQ?<Í€V×l“ªëG¾]pŒ §J dBR)ˆ*ÇĪîü#èË~~)£ÙolÕÃ4{ÇVÂÀRn‚¼ ˆCµDï€ë)+Ÿ´(šZ“WëIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment331ý ¸IDAT•=Î=Â0 `£Œ¹¹"×à4MªŒ\©Q‡^##ÓC <âðã铟mYŠav|BrÇ©’„aË™&ž»"˜¼P1do¢vôÛÈŠÐ0)üÞÌL È™+„™\VÒhÄ‘° tÌ­“…qÔ™ ¿DÅî¶¶-8¦†âꩊ¹ØŠº5kBÙ™mÊá‡ývÕ™ú/rog}uI´'†£¤ ¯¶ˆ ïîUñòÔÂ.ܸî|½Ó±IEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment332ž¬·ÁIDAT•MÐÁiÃ@…á'$Ø‹ˆV#ÆN).$°:è˜ÔŠ– ¤UÉaƒŸGŠ ¹}—a~HÊ@,°.­¸Ô¼QÀi$zäÂ.ñÖ:¢ƒ F‰a!÷ÿH’ÄE"³vÀíBŽ;^ÉI_5ÙmК¿Á ¤âšiŽ ¿WZ ñóBíA=S(oˆb¬æçIcþñïCÐøUPé!xÀó'j=uB4;Š9&‰C2´ÎYÉƒç ¾À¶Eûš›¾÷±*IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR?# 0ï’ pHYsb&2 tEXtComment334wx ‚ÎIDAT•MбmÃ0Я0»h@Z$3Afð é °dh¯D¦q¯pÙà€4Wþ9R6œ«^qü÷AÐÇ&~ƒë|9ÎÑqÒœaí9¶Ì€6œæ ä…¡¡õH2u‡ ºDíqÐ}H”ñ?¦¾Ã…q+f‡¡â‡—®b¡ ĈÜ2êãR »í)]¿^+f-9¥Âßȇ¢à(o$ëƒì4w<y_ÑI©ÚÚóJr°Ï+t¿­·ŽÊ( 7÷>žh$nõú#þ³IŒPIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR@ ŠæC) pHYsb&2 tEXtComment336™vh®ÂIDAT•EÐ1N1 Ð?¢HGn@.‚í½Q”bʽR¢sŒ@l‰éR„ù8³[øëþ… ’Ãkà0Ëó?BÜróká5¢ˆ_í‚xÂ)ºKŠxÇáJ÷Û~¸Û\þV»Ö¡`&·‘4ãÅa€Ÿf<Eøº »‚âoû°ìŽ2lµ!o.cVûDœx½c;± gxwéÝ ŠU¼*j vçµê¥Aïª}a6lœIqÐüêðßá ”—êÄIEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment338~ÎE©»IDAT•=ÏM ƒ0à Ù^@HRôbE…\z„^Å`Ák¤'h\u!¯“¶¸ûæç HË1"ÃgHA©j°;Þ¯©¯°yÖkd…Iá"K\“ê« _P¡SŠMlîä,º™o&qÉ·br…ÔsОéˆ Ô)ŸNåñPzé3:Å0fÌ>pÄ&Q,˜¤Íð(¤­ÿèاð’Õ`7LOÚ) ýtΟz£A¨ÁB—áâ䨂É¥bIEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment339 Éu?ÃIDAT•MÐAjÃ0Ð*hÐL|]Ì ¼)ä9ŒYö ò ¦«j1èwäÈ_½Åg>Ô³E‘…ź0v#¶ÌìëeÀ$¼9!…©¤_†­¤Ó X…~Ã. ˜y{b'gI'Ò7ˆcõ¥Ô ø•”}Ã_‰‹«g+—øX騅Ÿ+†L^áÞ_™±á²ö߆á /cóh¿jßaÞ °GýTÏ#$ðä EMü Ü6Ém–µÓß;LkIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR?³Ôûá pHYsb&2 tEXtComment340?T[\°IDAT•5Î=‚@à!4.`Ø›°žÌ]( ó ^ECá5H,,]b³Å8ÏÙ«ù2™ŸGx¾£P@ --¤®¥yQ°­év5õ Ñ ÑD(¢"` 9ìxlÀ 6 <á ¶$ƒ«ŒñI_¤Î7ì@tØmX—úh“ÐkÉ/ 6^1&lÁJV\¨Ôõœ¹JŶ4EÍ#¶£ÇŠØàx¦¥LðB¡\ùö¹ ëS…| IEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR< f“&? pHYsb&2 tEXtComment341HSkÊ¢IDAT•=Ð1Â0 PW2–±ginFZõpÔŠ3TêpÅ€‡¨ŸÄ&dz²ø+„ÊazOÀ­`;Ó2ŒLG+ ÓÄÑ0rLÚ2, Q,+°Ãf°åwîqx*ríªX9Þíº„Þ†%\ ©¯è SêˆbF“Îáð¥å$ØŠ?| ¯•µf ÓÜ`vˆ}Žšˆ(û–/¿R°MæÅ¹®IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR@ÊöQ pHYsb&2 tEXtComment360 b9Þ¹IDAT•MϱmÄ0 Ðo¨Pé4 WÉ)¯ .”Î+IPqkØðL§Bð?Ê—"løŠO­66ÂzwÌ‚SÙ&þT †€¢ñ7_²äÌ]•š{\‘5>÷ëÈ<›JÔX@厬ô7.GŸvCáô#ºõ†Š;ØÄë¼ê”OÃ÷ÓÀ㤩˜šáKV¸& «Ý¬WØ`{êÁyF^x.»ãi¿Gô™œ¹ógË¡p:ÖƒºIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment361ze HUIDATH‰íÔ=NÃ0à,á·‚„êc ¤*>,qªeãHÄêÀ5lqw3’ÉÃNRÕi“Εh&+Ÿ_Þ“¹j¸ mãÍíUä´qƒ™Q¿þUÕ³ŠÞ—twª®Dïd§vB¸s²™SÖK7£>©òIõDGcL§ÛSmIèAÅÕçñ†í @5ÝrcÝÇ‚‚ ¸ã¹ÕJë^oÂc Ì®ó¼ Ó+†r ì{¬¢‰©¤¾ºoŽt:<õ±®zX1»Éó*¾ bÐV¬7f\3Óƒ õˈÌ~i=Ò8øL‘¾ ¼)´‡ºFQ€Uu xYWºšc³««¿W´Æ¦««[*ï·²¯«Y*7ª=m¥«ë+kŠ—ô-ÎV)*§ëµ ³ÇýJ€…b·?ªmoÕP½¶“£š(Ô¢[iYÅ¢Pî‚]ë£Î+ª,áA§sSèRZ‚ΰޭÊ{“ìœ`]<ݔڰzŸï}–Pè® ÐÏuñ‡¶~w„òWç f:IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR?# 0ï’ pHYsb&2 tEXtComment373pY%ÄIDAT•}бmÃ@ Ðo °:¹M%m¢[%ƒÇ*Tz„¬"ONUÚ+YÐüáY®Ã†w$A?|…ãl×–8ñ«7ÌXDg(ŽNm|ã6`©½æ7ê(7¹ëÞÛ×o!¿i¸¿0‚21²kˆVïè‰[†!àaŸbbÑU“ŠçKCz@§†3VŠ<‹N›Ô|Ž¥¦Â*gœJj/) —€è«)>`­Œb±îµÛ0ͨW*¹;,gù³©½´•SÃuIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRA e$( pHYsb&2 tEXtComment376ý­ªÀIDAT•Uб à3XLÎÑÁ„7)oVH:ö•êÄè+Ðtp´n4AÎÿp02}ä yŠHHQL Bn#ŸòÉ%\ íl¡%¢ ÏäV(¨|„RÓm=Ç]Æo{¾ïbäU+/1‚?e/k%Ý›šXx‰•Ш»BG–±v7h`™ª™5Ũ„,nz‹©*¢ä;ˆU’¯LQš‡MPª ª¢ŠØ¶e =Ð “CJi­D¥Û¯U>ÝÙ¨]´±ÌlIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment382}ïu|ÊIDAT•UÍ1NÃ@„ቶ°»´."›c¤@<Ž•e±(œ.GÈQXk‹Ðq…uå³(xËÃ:rÃT_3úa—’[@^C ä™8à%y^M÷h“—ø3•G‰_ÿ2¾gä×ÜDÍ`˜‹¨õ ®»¡%Ý“[¡>o­*‘Š©ª0$ÇÜ¢úSÆ!Cê “öдì ÕÒ3œíd`÷™qïGnßVÈŠYN(ôÉÓ]‰³e0”èåCQ!ö|}_0\9^ü2×û?Îe—õÈR›"IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment383 èEêIDATH‰íÑ=NÃ0àu’9ßÀ; ù*pX< Ø¨H{¥T| G¹Àƒ.,;IÛ4 ŽLöâŸï=?ÿ@¸Ò4dÍš5kÖ¬ÿ£Ž…MÑU­ïD“6C\±ÐZ¤º“²_ŠIqTÜ—ÝØ}ÎU4 ÕÚµŸrçuq©Ûá5n”I“òoazBqh­“qŸÍT*C€7kåƒÐne•Ž÷ñÅ Œ™.Å•ÔK@…EPAW0êÎtñ\uÔwŽkÙZ§ü­˜tkš¨´¢¾âüñ•ÈKå9Žu1ê>ø*)rN–üZ9qÖø^}DÈCp‚tÓ/ÚQŸ.ô%êöõkP=¨êÕ97)Fõí³¥ï“þƒ^ÈK¶Z¹9IEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment369t¾zIDATH‰íÑ=NÃ0àu’9ßÀ; ù*pX< Ø¨H{¥T| G¹Àƒ.,;IÛ4 ŽLöâŸï=?ÿ@¸Ò4dÍš5kÖ¬ÿ£Ž…MÑU­ïD“6C\±ÐZ¤º“²_ŠIqTÜ—ÝØ}ÎU4 ÕÚµŸrçuq©Ûá5n”I“òoazBqh­“qŸÍT*C€7kåƒÐne•Ž÷ñÅ Œ™.Å•ÔK@…EPAW0êÎtñ\uÔwŽkÙZ§ü­˜tkš¨´¢¾âüñ•ÈKå9Žu1ê>ø*)rN–üZ9qÖø^}DÈCp‚tÓ/ÚQŸ.ô%êöõkP=¨êÕ97)Fõí³¥ï“þƒ^ÈK¶Z¹9IEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment384”ŒÐIûIDATH‰]–?o7À߉©©‚™­Wà**ȱ²h¸ûI :6A{Pu”op ¸Ñš¯@E@íÍk‡¦, {­€ˆÎ÷úHJqR¤¨ŸÞÿ÷„Å@—Î,ÑJÓ¹í¯þ·-4@Z¨þ‚r ¹§-°îG’z¨{àe“I½Å#ó4˜‡ýDÛÊ&êOãí`g#ÎßÌ º ÃÏ(ì(­NØó°wwÎîoí‚òïÝÊ·añsúQ4² v‘§ð 0£ÒìËϼ=n˜ùe˜ï¤éèšXe–™ŸÝÒÞŽÂa¤3Ãôªí\ó”2Ó¹Ÿ,\ ÎëQ¾ ЯC²—²EËâ•ßQ¢brÈ-ïzkŒ×ù8Rò…Îáù´ ÇÎúÞm^g-¼»£ƒóS¢–½–Y?å\gøµýŒòÓ¼—–)‰yGéîQˆo@þv˜9äÐ¥ÌÛž8õXbé·‡‡ð ‰ ”/©="MtGا:ÁÁ W-”gäøÅ¶¬L˜§úa«˜aeþè°û Jj £g-¨6ë2lîè K& #yÕ€ú˜uv´ÃºLu»6¥§üš”#jض û¥á7ë òê¼»#õŽSÀPÎõ¼–XU± Ëír(€œk•ÌsÉ;¨WA3ˆK^½§ÏæÇW‰›@ Ä|Ÿ^Ò® š4b8Åó-}K>%3%0PŽéòwä1U0ÃÈO³‰¦d3tÔ³xê˜ Tâ„ÒÉVD¥)/"Ý;Œ£ÀN(H&fK£ÞÍ)£IîÃJZN,Ÿz 1¦>$XgÙ$KÒQj&ÌÑ@Åg‰ºâ16ɦTš(ë™±T·â˜× ÿÑ€žî¢ 6Ô6å19ˆh¢BïÅö(èøßu ZÇbïèkœ·J9xn[èVÖç,ÃU+)>l‘ò@;”ÈA£,[ã4ÔWlµ 8‰ŽSÞ¼ÓT¤@ý¬Ñ sÍj(_-/=Í$õxcš[Ò,AãÒ }•KŸ/z eW,EC1ÓìºDÊŒH ê>ü(§*Â¥-[?WT ¢…š\uÙA•o,Õ‰ÒÃ2P¾zðx2¹J÷ÀÓ+ |‰õ’ì@hM/Ó­½`}uuj†¸AÒjˆv3Oófãä•ú#5G¼ ”ëãðpžädH±?•[¡§m c WÈtž-؉¢ßz½ /;­|“&ºa²ÍSY¤þŽêbL¿þªWFÊk„Ìzª‰ª†BN\ÕDWzÔÅ› .=}Eý¡h<–ÔîßâÍ%J\yzyÒÉ@o«ö ¹»æ‘¾„~ÙP¶âï†ú©©|q0nT…T¶‡)È–/[jE¢~µž®5 7>þ6Y×ûÔ¯UéS§Aö)Í*dlSÕ oO¤O”ë3¬©¾Ï›@×Ö¸ZDû’„]ö(ȾhµãùlfâkÜœôûDëTEÍþEë‹¥IjïÎrh3,}@ô^_ltb¤/®ÅOÛ-ªÓž 33¾pF¢ð:vôHŽß›%½JDµ¤ Á[<ÞÒçZÑÝ¥ÂyYëeÝ–>3êtI´N*¬èoÚñ€ÜúD¥°Òb›Ì7 ÿ%º®±ª ÍÑ1[^“‰7¤ÆaéT±þ‰Ì…œIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment370yŸûIDATH‰]–?o7À߉©©‚™­Wà**ȱ²h¸ûI :6A{Pu”op ¸Ñš¯@E@íÍk‡¦, {­€ˆÎ÷úHJqR¤¨ŸÞÿ÷„Å@—Î,ÑJÓ¹í¯þ·-4@Z¨þ‚r ¹§-°îG’z¨{àe“I½Å#ó4˜‡ýDÛÊ&êOãí`g#ÎßÌ º ÃÏ(ì(­NØó°wwÎîoí‚òïÝÊ·añsúQ4² v‘§ð 0£ÒìËϼ=n˜ùe˜ï¤éèšXe–™ŸÝÒÞŽÂa¤3Ãôªí\ó”2Ó¹Ÿ,\ ÎëQ¾ ЯC²—²EËâ•ßQ¢brÈ-ïzkŒ×ù8Rò…Îáù´ ÇÎúÞm^g-¼»£ƒóS¢–½–Y?å\gøµýŒòÓ¼—–)‰yGéîQˆo@þv˜9äÐ¥ÌÛž8õXbé·‡‡ð ‰ ”/©="MtGا:ÁÁ W-”gäøÅ¶¬L˜§úa«˜aeþè°û Jj £g-¨6ë2lîè K& #yÕ€ú˜uv´ÃºLu»6¥§üš”#jض û¥á7ë òê¼»#õŽSÀPÎõ¼–XU± Ëír(€œk•ÌsÉ;¨WA3ˆK^½§ÏæÇW‰›@ Ä|Ÿ^Ò® š4b8Åó-}K>%3%0PŽéòwä1U0ÃÈO³‰¦d3tÔ³xê˜ Tâ„ÒÉVD¥)/"Ý;Œ£ÀN(H&fK£ÞÍ)£IîÃJZN,Ÿz 1¦>$XgÙ$KÒQj&ÌÑ@Åg‰ºâ16ɦTš(ë™±T·â˜× ÿÑ€žî¢ 6Ô6å19ˆh¢BïÅö(èøßu ZÇbïèkœ·J9xn[èVÖç,ÃU+)>l‘ò@;”ÈA£,[ã4ÔWlµ 8‰ŽSÞ¼ÓT¤@ý¬Ñ sÍj(_-/=Í$õxcš[Ò,AãÒ }•KŸ/z eW,EC1ÓìºDÊŒH ê>ü(§*Â¥-[?WT ¢…š\uÙA•o,Õ‰ÒÃ2P¾zðx2¹J÷ÀÓ+ |‰õ’ì@hM/Ó­½`}uuj†¸AÒjˆv3Oófãä•ú#5G¼ ”ëãðpžädH±?•[¡§m c WÈtž-؉¢ßz½ /;­|“&ºa²ÍSY¤þŽêbL¿þªWFÊk„Ìzª‰ª†BN\ÕDWzÔÅ› .=}Eý¡h<–ÔîßâÍ%J\yzyÒÉ@o«ö ¹»æ‘¾„~ÙP¶âï†ú©©|q0nT…T¶‡)È–/[jE¢~µž®5 7>þ6Y×ûÔ¯UéS§Aö)Í*dlSÕ oO¤O”ë3¬©¾Ï›@×Ö¸ZDû’„]ö(ȾhµãùlfâkÜœôûDëTEÍþEë‹¥IjïÎrh3,}@ô^_ltb¤/®ÅOÛ-ªÓž 33¾pF¢ð:vôHŽß›%½JDµ¤ Á[<ÞÒçZÑÝ¥ÂyYëeÝ–>3êtI´N*¬èoÚñ€ÜúD¥°Òb›Ì7 ÿ%º®±ª ÍÑ1[^“‰7¤ÆaéT±þ‰Ì…œIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment385ã‹àß IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment371c~8 IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment386z‚±e IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment372úwi³ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment387 …óêIDATH‰íÓ±mÃ0P".Xrƒ0ƒ¸µR…6T¸ô^…‚ •!²€Ô‚?'×úA"iÄ‚ÍɻçÃ7ëäþ^Ds´­9¢'•©?Ô–9mj‹é¤DÃYq)LýOTˆöš¸Ú»)܉âÖésS\ôI@ª²ÃÕ ¶µÅfš‰–«#7gê ©jìV}ÛúÞ·£G%ŠIßLÑ2[nQ1í¢-– C!Zê™ë‚‘©>´'5k̦é·Æ~Æu¨²­2(nŸ,926‘¥$2«+œèD?,kCÿò÷wÝu×]¥_Ѻùª2m9IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment373pY%êIDATH‰íÓ±mÃ0P".Xrƒ0ƒ¸µR…6T¸ô^…‚ •!²€Ô‚?'×úA"iÄ‚ÍɻçÃ7ëäþ^Ds´­9¢'•©?Ô–9mj‹é¤DÃYq)LýOTˆöš¸Ú»)܉âÖésS\ôI@ª²ÃÕ ¶µÅfš‰–«#7gê ©jìV}ÛúÞ·£G%ŠIßLÑ2[nQ1í¢-– C!Zê™ë‚‘©>´'5k̦é·Æ~Æu¨²­2(nŸ,926‘¥$2«+œèD?,kCÿò÷wÝu×]¥_Ѻùª2m9IEND®B`‚ pix[150]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment388:œb»IDATH‰uÕÁnã6à‘¸0{؆è­@ѽnO^ 0ó}{è5·æ`˜ô¦@Žy÷MVn=æÖcÍ¢/ 6B²fÿ¡dË–·lú4ÔpÈ¡‰N¯Ìã+/ˆ*¢’†WRbº=×/öÚÐúÛ™î‡àê‚~ê½ZÿóÙ{»Kqtþ½ÿT¼cúö3ú Ÿ\1×´üŒŽ$vÃi€³½ê-s5 K7rÑÊiSFI-T Õ„tOÕ§ÁPd‚›&Psªcº¤ã Kùýå0¯Kªríñ³Èø¥9×HÊço‚ê[š’ä¿Q!ãçN:Õí‘´ó':ŸÙVƒ!hÑk†«Tp8R•t"ÕÌu°9ÔžŽì~Iµ©`U±+8MÙÝcrºPe£W‘nºûº”ï‡"δú“²Fó‰f%Ý\AƒÖLZ4»&UÒ-!«ôÐP±¯’ (EáUÔþ]×fÃUݧÅÊx]#ŠUm7¼å“";‰mÈ}ä%žà޽åQ¦±Y{—Tªq½OK,¼ÃœÖÞBŸù¸VßpÀŒ,t鋽¾J„öû*©ÃŒ—%tÓÅš²mN UÊ‚YbKÖæïVm§¶Ñ¤b̺B©t«ªF^¯E9—}^1;hZðVéÂDy]7ú±Ï9醊æ5jô1G*g õ—èÜÿ,¡žwÕTT:·íí{•¾¼ÂNÄ\8.ì£ØÇµÂÄs0dœZ†f;/QãƒNuÀÁܨÚËe‡¤A §DKó€FˆJVœbõ±Xq|M~Ü9-¬*¡O¼áø}´Òeiç¡gÑóWPb^aùª,ºÃÞ0Ò‰Pdå­­eécùLé:ÚXœé]{šÐ,Ú:©Ýòý^õŽ™Ýst5ʵŠ^4Jú> é1®úàe…œøA•©Ž”¢X]\/’6‹¥,¦šÙmyÕ¢¶2Æì¿s±¨:èÔ­EŸDÝë\3v¶ncŸ’+) ŽZüÌåK6Œ¨OšVƉ½MoW¦wßyêÒ “½b2O­Þ”~í´‘:–IŸ’–©&y* j•Z—·Ý‹­lœFØ`Zj;ÊfEœ¡‰Ö½:N'ðU?²¡V½Ö]ì¼}w.÷Êb¦¹«¤¹IŸ:ÓEý' 6ì@ƒ**E~íÔ'#“©Znª¥H›”ðn_hÑðø{jÇ…Æ#•ý^x,(—œÂÐfýÈ)¾ü]»ŒªN÷ǰ ïäXvÜçü sà@à \lIEND®B`‚ pix[151]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment374̆»IDATH‰uÕÁnã6à‘¸0{؆è­@ѽnO^ 0ó}{è5·æ`˜ô¦@Žy÷MVn=æÖcÍ¢/ 6B²fÿ¡dË–·lú4ÔpÈ¡‰N¯Ìã+/ˆ*¢’†WRbº=×/öÚÐúÛ™î‡àê‚~ê½ZÿóÙ{»Kqtþ½ÿT¼cúö3ú Ÿ\1×´üŒŽ$vÃi€³½ê-s5 K7rÑÊiSFI-T Õ„tOÕ§ÁPd‚›&Psªcº¤ã Kùýå0¯Kªríñ³Èø¥9×HÊço‚ê[š’ä¿Q!ãçN:Õí‘´ó':ŸÙVƒ!hÑk†«Tp8R•t"ÕÌu°9ÔžŽì~Iµ©`U±+8MÙÝcrºPe£W‘nºûº”ï‡"δú“²Fó‰f%Ý\AƒÖLZ4»&UÒ-!«ôÐP±¯’ (EáUÔþ]×fÃUݧÅÊx]#ŠUm7¼å“";‰mÈ}ä%žà޽åQ¦±Y{—Tªq½OK,¼ÃœÖÞBŸù¸VßpÀŒ,t鋽¾J„öû*©ÃŒ—%tÓÅš²mN UÊ‚YbKÖæïVm§¶Ñ¤b̺B©t«ªF^¯E9—}^1;hZðVéÂDy]7ú±Ï9醊æ5jô1G*g õ—èÜÿ,¡žwÕTT:·íí{•¾¼ÂNÄ\8.ì£ØÇµÂÄs0dœZ†f;/QãƒNuÀÁܨÚËe‡¤A §DKó€FˆJVœbõ±Xq|M~Ü9-¬*¡O¼áø}´Òeiç¡gÑóWPb^aùª,ºÃÞ0Ò‰Pdå­­eécùLé:ÚXœé]{šÐ,Ú:©Ýòý^õŽ™Ýst5ʵŠ^4Jú> é1®úàe…œøA•©Ž”¢X]\/’6‹¥,¦šÙmyÕ¢¶2Æì¿s±¨:èÔ­EŸDÝë\3v¶ncŸ’+) ŽZüÌåK6Œ¨OšVƉ½MoW¦wßyêÒ “½b2O­Þ”~í´‘:–IŸ’–©&y* j•Z—·Ý‹­lœFØ`Zj;ÊfEœ¡‰Ö½:N'ðU?²¡V½Ö]ì¼}w.÷Êb¦¹«¤¹IŸ:ÓEý' 6ì@ƒ**E~íÔ'#“©Znª¥H›”ðn_hÑðø{jÇ…Æ#•ý^x,(—œÂÐfýÈ)¾ü]»ŒªN÷ǰ ïäXvÜçü sà@à \lIEND®B`‚ pix[152]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment389ê=¬ô IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[153]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment375dü IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[154]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment390Šú%BIDATH‰•Kn9†‹aj¡™že†æ^zA¼Ê¹€wñÂPÓÐ"K_ H®BÁ‹C ¼ð¶,ÜÚ¬üÅ~¨%ËÂÔ¢üšõøYdý»8|-©‘Ë+t¡Z¢åëΚ³¶üïäp ·Ù}<U "§v’ÂægCž1ßßO'5Ы³>^RÌ› ÏŽ!Š¡ËW’AKSŸ ·Tñä¸r-q-üKZd*YÙ8ä¸7» Ãw™ª ýkB»Ä¦ôšôfÈÖ 5èËH=©fp càë@UGûdèJ¨æ‰gé3×ǽÄM&1×tÃÓ‚*ŽN‚wnWäï9œ¤ŠÛ¿)PÍ­ÏÔpcHmGú†è)Y/éh-Gíuà¾z‡jšÞG=S’Oì * øqOóžZ¡°dų•쌢¦u[„ªâXÉÊö5cYVøÆH¢ÕÒz¡¾×VyP”kóB\­]¼±|»§:ÒÔÉëÅÚÕ76ÉÚ EºTÑ:Yâ˵k’óA«‰Øq•i™\ËŽ Èj@²œ7N +[·cöÅ1½èiuÇ-ý)Aú“g.íüÁ%<¾ü™›Lq.åÓen%=‡$g»-SÕt2.@ô4–sÞ&¡ ɳDûï©©Ë?xÛöT êwÛhfÐÐ6ÏMgÕ4ÿ{Ç?ôÖr9=+Öaº½c®A«ö`nM6Þ‚F´Ù@ßÊÓ"SuÇ¿¨`æ4Ê$Ã-™nžk|óe»ÅÞÓLÿ4AïèµÝ Žneƒ|l½æŠÍ[Ám2 ŸÄÿ„Ê›¥I:!@p¬îGŠ]'¿…7¥f“Ü=¶~xçªÑ¢›KÆ+Pæï?¦žkKæûuÁ–9ÓÇ)E·a¤)’cÞríø1ö4Ì$2èSkÚ)Ó'¡aðŒ9üÀóž¼Õ2ðØSLÅ$f„{âTqg ù°.2MEcÞÓîç²B·qkdì~J»ƒ~‘iÖo;Ò½’™*æo¬é¬Ë+V ÀmGwFЄ…ß”é·CêzÊIÌE û ¥…𣏅—*’ë¦Q,:ŠÅQj¤å<ó±õõ¢ÅEÞcÞ׫QGÛÉÿó…ÏïGŽ{ú%e΄ˆ„–IEND®B`‚ pix[155]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment376ý­ªBIDATH‰•Kn9†‹aj¡™že†æ^zA¼Ê¹€wñÂPÓÐ"K_ H®BÁ‹C ¼ð¶,ÜÚ¬üÅ~¨%ËÂÔ¢üšõøYdý»8|-©‘Ë+t¡Z¢åëΚ³¶üïäp ·Ù}<U "§v’ÂægCž1ßßO'5Ы³>^RÌ› ÏŽ!Š¡ËW’AKSŸ ·Tñä¸r-q-üKZd*YÙ8ä¸7» Ãw™ª ýkB»Ä¦ôšôfÈÖ 5èËH=©fp càë@UGûdèJ¨æ‰gé3×ǽÄM&1×tÃÓ‚*ŽN‚wnWäï9œ¤ŠÛ¿)PÍ­ÏÔpcHmGú†è)Y/éh-Gíuà¾z‡jšÞG=S’Oì * øqOóžZ¡°dų•쌢¦u[„ªâXÉÊö5cYVøÆH¢ÕÒz¡¾×VyP”kóB\­]¼±|»§:ÒÔÉëÅÚÕ76ÉÚ EºTÑ:Yâ˵k’óA«‰Øq•i™\ËŽ Èj@²œ7N +[·cöÅ1½èiuÇ-ý)Aú“g.íüÁ%<¾ü™›Lq.åÓen%=‡$g»-SÕt2.@ô4–sÞ&¡ ɳDûï©©Ë?xÛöT êwÛhfÐÐ6ÏMgÕ4ÿ{Ç?ôÖr9=+Öaº½c®A«ö`nM6Þ‚F´Ù@ßÊÓ"SuÇ¿¨`æ4Ê$Ã-™nžk|óe»ÅÞÓLÿ4AïèµÝ Žneƒ|l½æŠÍ[Ám2 ŸÄÿ„Ê›¥I:!@p¬îGŠ]'¿…7¥f“Ü=¶~xçªÑ¢›KÆ+Pæï?¦žkKæûuÁ–9ÓÇ)E·a¤)’cÞríø1ö4Ì$2èSkÚ)Ó'¡aðŒ9üÀóž¼Õ2ðØSLÅ$f„{âTqg ù°.2MEcÞÓîç²B·qkdì~J»ƒ~‘iÖo;Ò½’™*æo¬é¬Ë+V ÀmGwFЄ…ß”é·CêzÊIÌE û ¥…𣏅—*’ë¦Q,:ŠÅQj¤å<ó±õõ¢ÅEÞcÞ׫QGÛÉÿó…ÏïGŽ{ú%e΄ˆ„–IEND®B`‚ pix[156]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment391ýý‡éIDATH‰íÔ1ND!`Ô‚NŽ0×ØÂ„+­½YžyÅ+½Ò¾Plé„ÐÉ&~y±åw[Š/™aÀà‡1™¿¢IúÔ ÑÉ^™ÞÛ¤ÂXeÖàJõCmîUÃÂu­XÊ Q{KUlj©~¬U”(¢>:˜EM@ D]3g¢U`¤¢ÉÂ85äÜ8oú$c½¬í`›:UÖ“íå&šjxàZŽ˜¯D›¤#b9Uݦ‰ë3â™ìܵÜО3QÉ—¬2Vßûê-³žôQ½Ëe¬½Ðý~+{)xÇÚSàó{ùM?î»îúô :€ó‹hÖFIEND®B`‚ pix[157]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment377Š<éIDATH‰íÔ1ND!`Ô‚NŽ0×ØÂ„+­½YžyÅ+½Ò¾Plé„ÐÉ&~y±åw[Š/™aÀà‡1™¿¢IúÔ ÑÉ^™ÞÛ¤ÂXeÖàJõCmîUÃÂu­XÊ Q{KUlj©~¬U”(¢>:˜EM@ D]3g¢U`¤¢ÉÂ85äÜ8oú$c½¬í`›:UÖ“íå&šjxàZŽ˜¯D›¤#b9Uݦ‰ë3â™ìܵÜО3QÉ—¬2Vßûê-³žôQ½Ëe¬½Ðý~+{)xÇÚSàó{ùM?î»îúô :€ó‹hÖFIEND®B`‚ pix[158]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment392dôD= IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[159]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment378¢€­ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[160]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment393ót«êIDATH‰íÔ1nÄ P" wᙋ¬ÌUrÈöj‹-÷{"¾VŠ´Xi¦@þ1[ó6QL1O€˜a0؃ù+ª®ÄÐ×5Ù¯k|Â}ZÔu 1·D/±“™kêü¬­«ëù¡/»*\å=³ÇÔ¹+QÄÕ^¹ÎØR‘Éð‰ÁA=Ñ¡Á@ÖªE°0äÜôZô¹©ë¶2Eêå X¢ÚJØŠÁôä#Õ©höD/zê“2µEÓž.?hO´ÑÎ/ $n{9ÊêëdÒ7©ëmÁÕeÖ)øBµéÐÜ?¦ßô3zè¡ÿ@¿þññ›ZX»IEND®B`‚ pix[161]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment379m¥°;êIDATH‰íÔ1nÄ P" wᙋ¬ÌUrÈöj‹-÷{"¾VŠ´Xi¦@þ1[ó6QL1O€˜a0؃ù+ª®ÄÐ×5Ù¯k|Â}ZÔu 1·D/±“™kêü¬­«ëù¡/»*\å=³ÇÔ¹+QÄÕ^¹ÎØR‘Éð‰ÁA=Ñ¡Á@ÖªE°0äÜôZô¹©ë¶2Eêå X¢ÚJØŠÁôä#Õ©höD/zê“2µEÓž.?hO´ÑÎ/ $n{9ÊêëdÒ7©ëmÁÕeÖ)øBµéÐÜ?¦ßô3zè¡ÿ@¿þññ›ZX»IEND®B`‚ pix[162]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment394—á IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[163]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment380“áP IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[164]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment395úÑžìIDATH‰íÓ!nÄ0PK¾@%_£ ª¯U°ª³*Ì•Ö È5¼Z°°^f0š_G¥þ©TÐ’˜<ÏHã™1Ø9£ù{½-n» Ñ‹f1±¯Ó~’ú:$ S¢.KXê‰Åf‰Ky÷}µ[lyÝÓÊtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ò®¦„Ñê“ëë=ãÅB‰¢hh:0=…skÓ·˜„éÐôZB_õ'}Ž·wb©Ê·¢_¯º"ñö ¿¡¾MÝú`Ý÷Iý\Ù´cÁèé¦à—ОüÏîz衇þJ¿'ó#' %ÙIEND®B`‚ pix[165]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment381äæ$ÆìIDATH‰íÓ!nÄ0PK¾@%_£ ª¯U°ª³*Ì•Ö È5¼Z°°^f0š_G¥þ©TÐ’˜<ÏHã™1Ø9£ù{½-n» Ñ‹f1±¯Ó~’ú:$ S¢.KXê‰Åf‰Ky÷}µ[lyÝÓÊtjúQYæõ*n‚ER;ƒU„UGDg4ÍDÅatjHæl1[ò®¦„Ñê“ëë=ãÅB‰¢hh:0=…skÓ·˜„éÐôZB_õ'}Ž·wb©Ê·¢_¯º"ñö ¿¡¾MÝú`Ý÷Iý\Ù´cÁèé¦à—ОüÏîz衇þJ¿'ó#' %ÙIEND®B`‚ pix[166]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment396c™€$ IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[167]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment382}ïu| IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[168]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment386z‚±e\IDATH‰íÔ±nÂ0ÐCýõ/ôücˆkÕÁc>© é'8bȈ#†ÂòõÄvˆÔ©œ"%ÒËY¾s.ÀÄ<ŠÆSu} 0Óìoºw‡Ø§\@¯RnxE>3·)yƒÞ$¥•áÀì’:3j 3¥¬>jX¨ŸèZ²Ò\wyW¤ %ш»¢à‰FÓE®³ÆR9YõNÛ>);œ¨"³u£J ŠíT/tÁvŸYÔ'ý`®rE¼,õÅ`ÕO”hÔµ–cYú¬V4UÄúÇ™%JU‰bÒQÌÚc Ýzbe£©§êGõlë¹w?(Úšg+_t à°¾Óv¢JŽ ÉÚ]ôtSV;Æ&×{Q”}ù@uyŸ;ùÕJŸÑ]µº“Q8&}ïI;=¨|íç`Žg–k 8zuU’^‡O.ø[æH”2¡’exÒX=Îã©O}ê¿Ð_”ȳ’Ë IEND®B`‚ pix[169]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment387 …ó3IDATH‰íÓ1nà `wòÈ^Ð1C%®ÔnªâNÞÊ|NM*9BmyðX¢,X"¼>츒1î–ÍHˆá?ïHðŸ‘'7Ð~]€±ª2EÇuÂã M@TW¹®Êz¥dQ¦.WåQ5(ÏVD:Š$ã¾2¢\U¬,ì×UÚ;ÕDܰ‹ªÒ\5Z@Ò3)á-Ô0Ì[Ÿ\–÷Y ]9ÃοȇÅÑ MŠ•WÑÆ¹QZªÁ)>±¼Ð:Ô“!“^…ltØ/i…Txb–ꀴ»*ûªe§~Rz¯f±wÒ„¥¶=þ ºsP)3åí…–”ôÅñB}Úá¤Vê‘Í¢ùqÒ× e½›ë8¼ºgduS_]Ó"úý÷ËDDoô÷7ÝtÓMo¡¿׿¬ÌKIEND®B`‚ pix[170]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment388:œbÈIDAT•5Ð1‚@ÐI(°1ÛÒq +÷J–F4x;¯a‰¡ ô  J—Ø|âúÇõW/ÓÌäƒá,ÆdÊ$àJÝfh*²T¿BÙ’õ› Ǽ{qB~8ˆÚn ¨]€ôަMÀ‘ÑCl†Ð°·²”©‡ÀVF‘A ÛX±‚SºˆH0¸\#n „YÞÏȯ¢_ÜFÖù0phÂóŽÕßä9ðˆXvvF)´ýÈJÇóÍó‚ºf•ê:´Çl-§aéôB>Ú»«¢ëÛè§IEND®B`‚ pix[171]: xres = 0, yres = 0 ‰PNG  IHDR? ¤< pHYsb&2 tEXtComment389ê=¬ôÇIDAT•5˱mÃ0EѰ`'.`ä/"„›ITXcdYâ.#R•Ò\„ñŸI¹Õi.HÆž±gáü ZÇÐàn(›·AeT9㶪¿fyǸv †¾ $?WÈkììTÁ¨!¹â Yh8ÛŠ\¡ñ…ÁÐûJ1 Ôù[¹Rë/dAnýVqϧ¾`Á˜NýÎ&µîµŸÿø*xó¿6õþ‡îS¤stŠiã" ŠÕž»"ZÖô U« n$M“²IEND®B`‚ pix[172]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment390Šú%^IDATH‰íÔ=nà pª låUéºû¦È– ‘±”!ÇèЋehŽ©K¶7 (4|ØnÒ9ªÂ„ü³dÞûóLü«#×¢ŽzûvÚJ’²Z"Ì]ÕFÄgôŒ"!îÜÂã¤~ Ë/ÛÎýQ• x:!ØpDØ›¢ Tn,lP\P¦ÝeåAùÊ–’ï©…_º­êDTjyÕ]UïFúÁ¶}åCýd;Xë¬cEèdVô‘Y–õTvY WC¥ê)ë=éjfš¨i‡Š=õŒZNõµ *Š.Ý@ÝPCÉc-)ˆ±Ê¤6¨¨ôŒš6)ô2ªÚü(Å‹jÚ ¢è:ªN*B7ú7ç]G•I3­ØcF¿)ºEõúXt¢ W"©]ÄΘ—Œ–ì “<(Nc¾Ÿ{“bÉLQÉTÜ… =ø+…y3©3ËÓü¾úóëzþ*7½éMÿ‰~ëÈ’äÄØÂëIEND®B`‚ pix[173]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment391ýý‡©IDAT•=Ï1 Ã0 P… }Ÿ£“)½T‡Ò´š1WJðà±WpÈÜMPã_ÅŽ«éÁ—>ˆ’‚ïñeâ³ÁÌL:Ó6COów=rÃ4Aʸ‡…é)°;– b|ÅÍ’a£.hS·(çŸWv¸ßüQ Y ÀP-›®B½÷¿:îՄǕƥADvÅËD¿È5 Xˆ§%äáÁµ§½E--IEND®B`‚ pix[174]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment393ót«HIDATH‰íÓ1NÄ0P¯V"tîiæ 1W¢Ü"b² RèÒrЬ\ä ”‰öF¸y°(â$K…h2e=Yžù–•\¨BýîÅg«ê•¸ÝŠÄЬ¢Eõ Üú•XÆ“]Ñ{mçê0ëü¨° ð›Šî.êûÚ½ƒŠ£Ee¬£Úú…™$ê9ª…¾›©õZʨMb^,k§¢šºx¢¤-r¹v·¡+ªêç»D àíâD¢ÛCªWÚk- …òÐ>¸D!ªƒbkS•JdTÆùÙ0ŒÀé[­MÕü¨£ª·Sc4Lp\Q '‡£¾‘IâTC<Ɖ^H›ž!Q‹Rú&40QlЉY½æXšD©4äÌ9V‰:ʘäÜõ×2WíQx^Ðï¤þœvÅù°…øË2™UCãºü?ä’ʦ›nºéè½ {…¯IEND®B`‚ pix[175]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment394—á¸IDAT•Mб Â0ЃnÌx *²V ä$rA dˆ\¤Ì ¶h(Mç"òç§ {ÒÝ××E  ‘0O,šÜb@Ôd]’wMÆ%u[®}¸Ö®À4ŒWNÅ0Æ>ãÁ° ãȨÕ§³¦X%F£éCIö‰K}hEŸ+ënÜà}‚ÿ2&Æ;Оª?¨ ió2CLù Á˜3dÐrÎ#Áw p'2# œrº6Qؾñ.­ž“‚ CqIEND®B`‚ pix[176]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment397ž°²DIDATH‰íÔ±nà `*îT†®Q®¯Ð­Cd^+Cey`ì+5ò×0ÊOe8q=œ:²)É©aCŸî~ ]Y¸%íÕ5m$íÈ È+”ô¢Y PàF¹ µZ¬O:dT¶^ƒª}N;¯å7êKêHRT›=yÒcn$Ö’<§ÑåÔLºË©œTè#É2¹¢Q©AÙ.µ§K²¬%­´I.ÿ,ý¤¡R&iÜdíX%GšÖ~u¨~Õ×Ï©Ò>ÀIÁø£`ImÔ!@Ú3õgµ¬&—U²7BY\'i <ëÆb•¨5Lº–‰ZT Ö7ëß×O[=WسRÔ­õX­œš«Ú{¥F}µVý\Qµ“ƒÅúa©`÷£ºu±ÐÀáóÞ°~xçàæ]‘P§8ÄW†Yh¯i<ë¶~†»Þõ®ÿ\ר¹æ`wIEND®B`‚ pix[177]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment398„!­#ÒIDAT•=ÎAJÄ@Ð?L ›`_ k¸äZ.Ât$Bo/àaÒDð.:¸˜¥5»ÊþV"øWª¨úà@Ë·"×,eD:ñÃñ¾GŒ|q¥o±&º ¾AïVeƒY.nýá3åÒÅ̧[f…UFƒ-_E»”‡$>T`â¦ãÚ €jN˜µÛ±üáf8Ûèó@Â?®™opÙ×_Ù:;aMå+Âf(¾EœH+&Žï䤰{{ôƒÛªÓùx´‡IEND®B`‚ pix[178]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment399ó&µ¨IDATH‰íÔ1Â0 ÐJAbìr”\«j*1ô\N¬Î$7&Ð ñÿÐ¥K¼¾Á¶ôíÎHMÝaú¤:1-c´T}ÎX£O‘fëS T=ÖóÂU‰Î‹öHתy§ZíËÔ%Ü·DªÁe¬æ]¾b½Íza3Û‰ªíMü>-©úš«@T¢A†ˆ5ŠþǯÚc…Z'?ûÞMÀPÛ…¢Àùš6mÚôWßd€õ…ÈÆ–IEND®B`‚ pix[179]: xres = 0, yres = 0 ‰PNG  IHDRD ƒ ãS pHYsb&2 tEXtComment400^wˆÝ¿IDAT•MÐ1ƒ0 P#ª²5Ü€+ôTê…:²%c¯DÅÀ5‚¸€Ù2Xùu­êÁzÛÿ6ˆ¥.&lbTîYÌv[²–Ю¬ñí̤Iš!¨zi^áJ •1¡N*wEB/Fþ%7ÕÉí¢¤ðû¯6­‡jš|,wõ£fd”¥iD¦”ó¡B*£­™gê¢ýFëT¹½u]3ì“ô6g}ggU$ë “^.d¹€¯’ 8}H§Elø?áìIEND®B`‚ pix[180]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment406·-èÏIDATH‰íÒ= !`a »x¯2EÀ+¥ÏÏ ),÷JRì5”\@HŠ-ĉÒùRœöçɰ8•IDAT•]ÐM Â@ à'‚Kçæ&æh¶]Œ®<‚Wqô$/PWŠ-yÎÕ,ÂI X²fÜ8e›Äd^Ôd0¨é lùª˜tÒn†Å?ì¦ ¦ VŒiœŒsƒ{CÅûŠ)h <˜KâË>æüwUwÌN±y78:ÃÚ;âíK>ɾ|#½åY®³¢¼n$IEND®B`‚ pix[186]: xres = 0, yres = 0 ‰PNG  IHDRA[TNÊ pHYsb&2 tEXtComment420lAê_ªIDAT•=Ð1 Æñ×8tôoâ5Œ}MÁU Ž^á5:âÖ¡áóA±L?Bï¡-&|w ñ±›œSyèÆ=7%˜GÓ`¢ŠU7þ²³ŠÓµiT SÞµªäRuB¥h¼ýbQ*ïVͪIO‰‚ê^5©ŽõÆ(ȶŠÉM}Sd ¬¦L†]š˜Í«¶I‡:½Àw­h`•Vf6|´<û3÷å_~ĸÌObIEND®B`‚ pix[187]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment425+ÐcIDATH‰íÓ1nà `"º±v¨ÂMÂÍ‚#Wbô|•F<öq•¥££,HAï/à¤*&ñÒ!KÞdñIþ÷`˜©Š=B»¤¢X? ×xQ=/t‡J‚ɨnQh .®úuCe ¦¢ÇRIïÀLÔc©œÌ÷ÔÕ£ûRÐøõpCÅöªÝT}Ò6éÐZ{¾A•ÎvЩ0Øë\™g‡¸‚.,*Ê´J.Nñ_ùKûf‚ÜŽ/´˜«ßú¯ª9¥yÕs:˜9ÝÜŨõ¬ÎÔSŸúÔë_ÀµÆÐ© IEND®B`‚ pix[188]: xres = 0, yres = 0 ‰PNG  IHDR?³Ôûá pHYsb&2 tEXtComment429Rû±IDAT•=ÏAN…0FáŸÈLv`w".Ë ¹%Ëc#4nâ„Aíñ–¼£/¹I{®°iY³Ø¡ÁVˆ4†Pà>Å [vïb0¼uÿ/xQ1]¶×.ȸ# ¿/Ì19¯cåçÄaɆÝðAôKÏ´sÐÈÕ¡O}Ô& ¼Ü/|Ý,µ/wŒg|¢±Âhû+¾¢±+|_ð(ÔžtÈù=[¡}Àÿ]¤ç0Ç…ÆIEND®B`‚ pix[189]: xres = 0, yres = 0 ‰PNG  IHDR?xˆ(D pHYsb&2 tEXtComment4350/‘ÉIDAT•MÏ1nÂ@…áGìÎ{义s¥”),¦  G 7‰V.(9–R¤µ”"&röÏ8JÁH3úŠWÌ>[./âï@,Dǵ$V3Nû?$,k±'$´™Q&Ê,–3ìyɱCŽS£¼‡ªõÓA`UéÖ1Vè–èK[}&’ÇZ}$Î ¢.~ûÇ{ [‡dáUÖµ óµb7•ýhþóÅ ëÇÆ[ì²¥qãX`Ý´®5‰·C~j4Šó‰Wo_¾ùs¢¡á1ÝÙöIEND®B`‚ pix[190]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment449CÇõ}¿IDATH‰íÓ1 Â@Ði„¹@Hnbn–([¤37гˆ Çˆ"X§Üb™ïšzÿ66 ™rª?‚ÌìdUà Œ\Ï€ÂZª¦f Ñ}ÔÐiF=Õ¡ô}ÉUsê£iµ¬†¬úóúR¿%:;\50}8¸žŽjÑ›C­‰‹N.­ê,*†¤ZÔMIU¤é³Ú5iËú£#oNiT/QCsÊfYÛ­‰š`«ˆziïÒ³Ë&MÔé×~ÕUWý }^}éÅ­¥i IEND®B`‚ pix[191]: xres = 0, yres = 0 ‰PNG  IHDR@´–%ô pHYsb&2 tEXtComment450#|˜­IDAT•eÏ1 †áŸt`1rƒr®ä (6±£WjÓ¡£GBâj & Ÿü¨“Ë›g} @ˆ%„ßTLdMp%²ªP[++lÒÉ4;V#¾°Ž²€×?HÆ&0+:Æ2{Œôšp‰Œ‡Ã50žðÅ?,ŒCÁQ0ìDDú\Ðì¥OípYúÍ å"˰ÉPsÖ|‘u¦LV è %2'UŽ7ƒ€7ªØŸü½Œh¼IEND®B`‚ pix[192]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment458-Ûôª&IDATH‰cø40%»Ÿ½£²£²£²£²£²£²£²£²ÄË[Q…Ó]?àIEND®B`‚ pix[193]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment460-/[×IDATH‰íÓ1Â0 Р l; ¾7H¸YÁU/Š%HQÉœß ‰¡^<<ÉŠÛéF$÷C-ª«FÍ$ e@3¯Ž“ßÐnXî@%Z&¤£éJÓ–¤©)ªÜÔ#uQ'u¨_S‰Ìj½~5­¦™GP¹æ¦¬•¾›öw$¹¥iH}2kÂwžkµ$H½Ö3å¾fç_õÄ@­Ù¥ž¹@Šiÿͦs¹TÒi*^Eá^ÉÑ~ÿùjG2«¢K² op#vÝu×]ÿH?àúÀ6-•+IEND®B`‚ pix[194]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment458-Ûôª×IDATH‰íÓ1Â0 Р l; ¾7H¸YÁU/Š%HQÉœß ‰¡^<<ÉŠÛéF$÷C-ª«FÍ$ e@3¯Ž“ßÐnXî@%Z&¤£éJÓ–¤©)ªÜÔ#uQ'u¨_S‰Ìj½~5­¦™GP¹æ¦¬•¾›öw$¹¥iH}2kÂwžkµ$H½Ö3å¾fç_õÄ@­Ù¥ž¹@Šiÿͦs¹TÒi*^Eá^ÉÑ~ÿùjG2«¢K² op#vÝu×]ÿH?àúÀ6-•+IEND®B`‚ pix[195]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment460-/[ÒIDATH‰íÒ±mÃ0…aºré ¬E \ÆJaÈT¨ 2Zã/@"…YÈ|¡z>Vn èµ_w÷4fÍË40À'Dù€¯Žêúó‰jÒ,G¢Q{™¨Þõ*#Q»éÍ5ðºÞ~¸†Ä4EKÇ¢®®ë¦A´®É`h¨Ãà©…]¨FŨޛꋦO¦³ÃXt©ë`Å%·²æèÓ…©3§MÙ-ZêŠ^e&ªEûŽuµi¦Zª èXÏF–ˆo©k6]üÃ/êŠÏÀ´¶]wÝu×·Ñyõ ŒµÖEöIEND®B`‚ pix[196]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment464@ëBÏIDATH‰íÓ± àk:tkW^£C“{%GÓÖ¸øVšø"8¹²‰ ¹Œ#?›ƒ 7‘|Ž -ÔJ¿Ua½a FOPå€Õk(¨[|ÔkÀjÙ‰¤Wv±±¢¤kQÏ|aݰ“ÊÈv\ îÙø 4DÍ$é£.0gïÙ*T—t€ºë¬ —&¯–š¨=1ÖžhÈwEíGMVÕ§ûU°rÒÙè1ß•z“ÞRgüdœHm&F*ÔÊV%ûŸ’61H¤ßÚ·PU«V­ú7újðö—<³¢IEND®B`‚ pix[197]: xres = 0, yres = 0 ‰PNG  IHDR=|}øy pHYsb&2 tEXtComment465xGÛÔ¸IDAT•UÏ;Â0 `Wš-S'r•¸ Ç`J‡ {®‚Ô¡c@*Fº‘!ò“ $&¶,?O࣠\ƒš Ì_L –  bÆâ1Gb…q ìÈH­4{tíîò@>ZvnèíYÍ€¦—çZæ-žÍ#ã:$³fX©èŠmˆ"gÃÖKT¼CNµ!¸kpúã’,­0>¶ØR" S<_ä¡þV§ü—n` ÒI’˜ÛŸø»¹DíIEND®B`‚ pix[198]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment467–Iºø²IDAT•EÎA ƒ0…á îšx©‹^¨¬´MÁ u¡dá5"ºUܤò:µÍêƒÌ ?a}/¨@Dè€óŽÎ jŒí†žqØPÜ tëñˆ€§ Y!âËù>"ää 2ŸÓÇ„c _Òb‚ºÁE$¦’Þ&¤VÐïÐuP¶ä“@Š2e+†¾ Nã05É£ù!n1ô B?ÃÈŒ£jÔ˜xNä-î,_œµ¼ òžüIEND®B`‚ pix[199]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment468ö§iÙIDATH‰íÓ± ƒ@ P" J6ˆË X%›˜tÙ‚5R¥ d„¢H{(..ç=ߢI‡Û'ßYòw¦FÕÙ®u6u4õóï™FX=Pa•ª{ZÚ@=¡f°”TIê:žîM¹Dÿ¶<©hæzÑëèÓ«u ô¾h‹TxmsCÙØ ­t5uöMéÕZÚ8Z ñH~]UÎVwÉ ÙÉÐ*[}$C%Pƒ’³hÕ£l…Àݨ§hì(-Þ«À;"5¢lµë®»nÒF„~{»IEND®B`‚ pix[200]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment472ÿ86¢IDATH‰íÑ1„ ÐI¶ØÒ#pŽ‹-½’Gá”ÄlVÑÿ­6L1 y™0|DIyyJßLƒ¸h Îb<Ö &: KUxopL}Q‹Uyѧ¶d™tÜÎH¿7tª æ<чڲ^ë2è©~šÛ šÚ/hô<¼ÛŠÎ^Õ“-PïJ$ÇÅwYI +#U)³Q^äÞg·šéÎÚµk×®ÿ¨+áÆF¯‡ø?IEND®B`‚ pix[201]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment474[ÚšIDATH‰íÔÁŠ1Њr,Á‹‡fê7æ°lü”ý„=z23ÌÂÜôü½ ìo˜Áƒ×/9)Ó£°lo`/jAÒtIŠ¢h'¶ðw+=®ÀvÕôN¶ÛŽ2ÆÐSö¥JS«‰æ¿Piô}幯FÃS´Îj ñWÎiIËÍ™$ã”ßTØFÇÀŽ/¬Žžß n4º¸1 7«VÅèíq„>Çñå‹Fœîw&fÄÀ]ÛAÝþ½c¡7Ïh_«áqÒä+$[«MAÐ}D~ë’«;ÇŠ—õ¤×ÁmHjðòUpiA‰¤¨ÍX©¸IC™~*5šˆ&ŠWÙñÅ¢¨ÉÇ7¹ôŸPU«4iøZôtÖu£¼¾_’¿=IéìViÒãY)ª •–v8Øï¿•ÓU.*ȯS@&ÇìG•Í bfö pHYsb&2 tEXtComment477R‹¹–IDAT•mÍ1 Â@ÐXîr‘€[L¬l„\@ð*ÙÞ;+Û€…[ŒóÝMDÁßÌ+fæƒN ¼qD÷P°K-è;IØó`«õ‚&ãLò²âV¼NЊ)-4¤©-^+ø iñ,ð¸gÄ ÝröÅú]l 6†é ¹ 0ºð`OÉP8͘ᘯbí¬Ô>³DÞμæƒò¹öIEND®B`‚ pix[203]: xres = 0, yres = 0 ‰PNG  IHDR@ÊöQ pHYsb&2 tEXtComment484‘ÃÆÌ´IDAT•Eб Ã0Ð *ÔY)]´HÀd”láÂ`Rf%/"“”N…ðåËIóyÝÝ}ðÍdI‚+£áfÁÀ ¾XFnô|xæϸà †ôƒþ" ÀiÇŽ‘܉A#_é½AºÜsÉrQÒÁÆ`-.¶à…V0¯œ|Ó[Œž*Ô½sƒJçN¨t’ 'ȵ ¢2¹Ë(sl²¬˜i üÇŠ„vY•À-% ä œ?ò— />IEND®B`‚ pix[204]: xres = 0, yres = 0 ‰PNG  IHDR>\ß pHYsb&2 tEXtComment487Ê—vªIDAT•mÉ1 ƒ0†á/¤àRÈ ¹ˆ‹ª8t)x“âà5PÝRÿ×DÚN}§^pe0|dÜ&Àû5´dÆ©À-±@Év‰×;D‰Y6&$%Õ¸s@Ô¢§— ¼X#¶L5öŽÍ¡bòX34£Ç˜—âV æ@׉m9{èŒP nf(8»íjqû® °ëE;}Л‚-çŽÌmé |–‹,ÒºIEND®B`‚ pix[205]: xres = 0, yres = 0 ‰PNG  IHDR@ÊöQ pHYsb&2 tEXtComment490µ3”®IDAT•MÐ1Â0 P31ve‹8IΠÙRÄбGèU :–#4êÀH¢.©õc§¨êödÙñw@2ˆ D…AÆ/%è>hêŒ ŠñDÝípGå3(|2nEd,‚›àœ1Pºà˜O]÷ð¼"#ðö·À:øÓˆ2õÈËDŠ%WæÄ1¸Ùfpf»&dL zB Ëw5„ÒŒ_ôš©I£åÛóoxü@ºØ½ü¤ÒIEND®B`‚ pix[206]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment495ÿßÇ‹IDATH‰Å•ÍŠÛ0€GS_Œ²‚ÝGHo.5±a¡}…¾D!VHÙcÛcŸ¦Qéué3¸ìa/ qÈ¡†5VGvK±7Ð¥¥C‚e}iFóc€ÿ!éYzuÏ® €=Ù¥9z’VOFgi§Ëÿø¸¿ úÅêÍ`ÞÝö¡Ý1=ª ;¡hâ+úóvèéÔ9î.Ú§½_•Ft¸;@±Yàê õSVǺe zft4²Zo}OŽ£!Ú]sÁÍ ]ØÍ…p'õ$¼G`GÙµN½sƒq³+\WÃ;ÛB$^9{¤Pìoy‚åüðfBoµÌc¯ˆ‡i¸ZŠIÈ£áCÆrÒð‡ØKˆU&©äÍò e¿j=BJeéx¨¤}¢Õè9µEO¯$”•Of“.ëÑ ÑÚW)îÓé´ õ£}vj"¢®OIXEF5R&€µå¿ç¬u7¦Ìc¨$ɱp6Ša¾×Š6µ`ô™xSx’Ë18*g^h?ƒ¢þ,¦íŒNo9Ä3º£·˜/úçîx*{Þ=¢ìÞ¤[˜‡ÅàÒWû4)(~,PôòÆüD”0•ªuØG€©F%OÔ!ú)²žÊ©ã g–ŠüD£¶TÙ0Š.òô¤ÕW`×dëˆòüÄßÊÃ\{ óL®ô6×Z•­mÉ«LŠ#=Ô¨,iç×@”÷>DIB˜e?Õ»i•¬É£’œœeI¯ õB†Š¦™r^4o¨MzI£ûÆ B~’b’Ü®sÕS[ºÙqH6éºSÛJZ¶·žËÍ–yC)Zû–ºo²ßåÝv Õ÷WIÆ©®+åíÃŽ“Eg¦*à$NK‰æÞê,'{IEND®B`‚ pix[207]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment491ø²‹IDATH‰Å•ÍŠÛ0€GS_Œ²‚ÝGHo.5±a¡}…¾D!VHÙcÛcŸ¦Qéué3¸ìa/ qÈ¡†5VGvK±7Ð¥¥C‚e}iFóc€ÿ!éYzuÏ® €=Ù¥9z’VOFgi§Ëÿø¸¿ úÅêÍ`ÞÝö¡Ý1=ª ;¡hâ+úóvèéÔ9î.Ú§½_•Ft¸;@±Yàê õSVǺe zft4²Zo}OŽ£!Ú]sÁÍ ]ØÍ…p'õ$¼G`GÙµN½sƒq³+\WÃ;ÛB$^9{¤Pìoy‚åüðfBoµÌc¯ˆ‡i¸ZŠIÈ£áCÆrÒð‡ØKˆU&©äÍò e¿j=BJeéx¨¤}¢Õè9µEO¯$”•Of“.ëÑ ÑÚW)îÓé´ õ£}vj"¢®OIXEF5R&€µå¿ç¬u7¦Ìc¨$ɱp6Ša¾×Š6µ`ô™xSx’Ë18*g^h?ƒ¢þ,¦íŒNo9Ä3º£·˜/úçîx*{Þ=¢ìÞ¤[˜‡ÅàÒWû4)(~,PôòÆüD”0•ªuØG€©F%OÔ!ú)²žÊ©ã g–ŠüD£¶TÙ0Š.òô¤ÕW`×dëˆòüÄßÊÃ\{ óL®ô6×Z•­mÉ«LŠ#=Ô¨,iç×@”÷>DIB˜e?Õ»i•¬É£’œœeI¯ õB†Š¦™r^4o¨MzI£ûÆ B~’b’Ü®sÕS[ºÙqH6éºSÛJZ¶·žËÍ–yC)Zû–ºo²ßåÝv Õ÷WIÆ©®+åíÃŽ“Eg¦*à$NK‰æÞê,'{IEND®B`‚ pix[208]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment496fÖ–¡LIDATH‰­Õ1sÛ6ð±œ;ÖìÈAt—¡«¶jPçòr×ECb§»zÉ]>BúQ Ëà±ý¹©¯Ìi0НÿGº6Iq,’æOð`¢ÿõ:—›Ÿýxj+Êäá Û]˜”\óZêvcð¬Üˆ¾½‚*ç’qK[rZù8¢Äf£º¤¦-:Q³ óE^­ËÞž¶%¿ÍÊ3Q³¾*ŽYœåTøùf ³V¥-ôj øõâÛïY Ñ´èz9Í‚'b6¢Ë…†zÅžz𥒭òdc? ‰k5›R⣪(ÚâZSæ ækì«~Ò¿´7wDgô½[é`8tƒ…V•³RDºªÊæEÔ“®T_£BÔÔÅ/ŒùÖ?ë„T Î't~cäã¶”EÑGýŠ1|ÓnÈ ;”„¦¤¤B>DÓÑ«dL ØßѪpϺmbLu©KY?³]´;ãçr{)¹*Â@›Ñ^Ö[ZXѪ«ø -­h =P+Ó_n¶9"¬ksª´yƒ4íJ¾aÝïÙS.ú«W»È7–ûš£XÒõò§Fw¦¯ëå’æ¢÷om‘˜ S]þpøÊx¨:ÊB¼à‡‚ŸtñŸ–déü ²|ÚVÒ3=ãÇ«£3ò„Ä4Í*mo­#PzUðËÿØÎNYIÕµ­ý<·wEOé‚,4×Ѩ÷–ïŸÆE1.ñÈ{/Bÿ Ë'1Ëö¸ÃÁ`ü¨Vt¶¯²È{ÕcZC½{wßÕ¦´÷œã›h}NêdÐÖË­øTAùÈ»¾ªVïj™Ø‘÷=U×AîlÐüg_?GyÖhñùïg½hzV´i&zà¬7ßvg©ÒJÖd²]]µ—k ?QèbáɯÎs}ªò/êU3#’!ëþ:ãÌMÕˆG.z3J_»öP*\¿y7ÈÑäµTŽºâŽëË¡&hVfÈÞ-—Cűƒ¥Š¢;®×CÒªQ˜Ò±£ÍS¯4 Q–««’»sÒ(9TìÄ ö‚ÌdNúškzÔCG娲¤÷ÌıÕÁ¸eûº@<Íbª~Ìì1Ù—±©å‡X fdBÄŒQ嵫ÎìKtŠŠU›”È^lЦÕºHDB³—aIEND®B`‚ pix[209]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment492a»R¸LIDATH‰­Õ1sÛ6ð±œ;ÖìÈAt—¡«¶jPçòr×ECb§»zÉ]>BúQ Ëà±ý¹©¯Ìi0НÿGº6Iq,’æOð`¢ÿõ:—›Ÿýxj+Êäá Û]˜”\óZêvcð¬Üˆ¾½‚*ç’qK[rZù8¢Äf£º¤¦-:Q³ óE^­ËÞž¶%¿ÍÊ3Q³¾*ŽYœåTøùf ³V¥-ôj øõâÛïY Ñ´èz9Í‚'b6¢Ë…†zÅžz𥒭òdc? ‰k5›R⣪(ÚâZSæ ækì«~Ò¿´7wDgô½[é`8tƒ…V•³RDºªÊæEÔ“®T_£BÔÔÅ/ŒùÖ?ë„T Î't~cäã¶”EÑGýŠ1|ÓnÈ ;”„¦¤¤B>DÓÑ«dL ØßѪpϺmbLu©KY?³]´;ãçr{)¹*Â@›Ñ^Ö[ZXѪ«ø -­h =P+Ó_n¶9"¬ksª´yƒ4íJ¾aÝïÙS.ú«W»È7–ûš£XÒõò§Fw¦¯ëå’æ¢÷om‘˜ S]þpøÊx¨:ÊB¼à‡‚ŸtñŸ–déü ²|ÚVÒ3=ãÇ«£3ò„Ä4Í*mo­#PzUðËÿØÎNYIÕµ­ý<·wEOé‚,4×Ѩ÷–ïŸÆE1.ñÈ{/Bÿ Ë'1Ëö¸ÃÁ`ü¨Vt¶¯²È{ÕcZC½{wßÕ¦´÷œã›h}NêdÐÖË­øTAùÈ»¾ªVïj™Ø‘÷=U×AîlÐüg_?GyÖhñùïg½hzV´i&zà¬7ßvg©ÒJÖd²]]µ—k ?QèbáɯÎs}ªò/êU3#’!ëþ:ãÌMÕˆG.z3J_»öP*\¿y7ÈÑäµTŽºâŽëË¡&hVfÈÞ-—Cűƒ¥Š¢;®×CÒªQ˜Ò±£ÍS¯4 Q–««’»sÒ(9TìÄ ö‚ÌdNúškzÔCG娲¤÷ÌıÕÁ¸eûº@<Íbª~Ìì1Ù—±©å‡X fdBÄŒQ嵫ÎìKtŠŠU›”È^lЦÕºHDB³—aIEND®B`‚ pix[210]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment497Ѧ7ÐIDATH‰]–Ïj#GÆk¶…;£VØ‹`Úà%— <¾å–gäãê(XáiEM^ Î;䲵Ђ/=BÆñÁ—·ñ¥†©|Õ#yíƒ%ô›®?_}]˜¨{²îCÕDûd½|2÷D Yÿ9•?Ê„ºòsúUGqvÜ£ãú3š“–ØÚÓ„èõs:H‘•„ë2fÏ#çEúŸ*?N_OŸá“íçôèÍÐ_‘ÑíéHÕ?4”ôŸÞÏËVúè«H†IÒèOqŠ’©Wº>R슗Íì;DÝ':UÝÙç4'Ž:äøz¨Û”÷yÉ2­Z톤©ÕúÅqÝfìu]ªÎë®›íS2ÊQ\PyéEÎ'­ÒÏõ~ êàÙˆTwv)¯1dV¢©’¹[^{Š\ƒfuž¨¥˜¨|õk—5¼¢ŠtMÇB«¥Ä%ó25&„¾Íø¦‹·¯Üû¿õt„‚S¡åMW[Y£¦éщ§,*Ò¯öáœø<óHÉŒìµPGÔMh2:;åÌA4U/ùHü2€Žéýa„’#ôÚt‚h ´ú…Æ ³z‹Å@^ÊÍ,ÐñB "ý©°O[=c&tÊÉѽ£FhCMoj9ÐknÈDR.ËB¶Önhª›’ñ37³ñ:îhÑkK àuhÇjÖ¤î{0—•–¦¢xSºÜÖUmÛ€{Öß›ÒÑè{” ¬Ú–Îʺò%œí— “Qj˜ 5çZµ•ç h4§h;Úhh«šêŽÛŠùÊ¡í/hZþöV1«Pf±b¡¼¹Ù{T$‡|íuBåÙ\…´U¬´â/ƒ­' -¨/É@|äFÁröqÞцù>ê£U¼qš\À–—¾@Ô6òOY£©wØ#ýk¢=:³6ëú…ÏØÛ{,”µ\?˜˜«ºUOýÚPSy jëñÔÜÖüDyıÛ”lïy³¥Õ/ÜwÌÁ *è*ô´£¸‰å†ï–°j«!X&¾R¼\Ü í'z›Œ,Úßño²ËÅR¨¬ ¾¸MÈ@«9óìwâùÂmiÁT ýPAÎÙ›ŸAO·ä:Ñ Œj±âe9sê2m´ÐÍù’±ÚAørÅ5Ýl©™Ïa*%”Ù^Š2È{˜œ5æŽÿ³©°Xˆ¼ö&„­Vócq€®ã°„¿®u»£›«+ж2|Ñ®¤…'ýŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­ÛÚŒ;OÂ:j{ÃþôÄÚ™H¥›|K£iEfW reM2‰‰þÍmÐë5è¶ lü× a•!'·c}ÕJŒ`ã;¾ìgœ =¡ÿ†àHP¡F:IEND®B`‚ pix[211]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment493¼b.ÐIDATH‰]–Ïj#GÆk¶…;£VØ‹`Úà%— <¾å–gäãê(XáiEM^ Î;䲵Ђ/=BÆñÁ—·ñ¥†©|Õ#yíƒ%ô›®?_}]˜¨{²îCÕDûd½|2÷D Yÿ9•?Ê„ºòsúUGqvÜ£ãú3š“–ØÚÓ„èõs:H‘•„ë2fÏ#çEúŸ*?N_OŸá“íçôèÍÐ_‘ÑíéHÕ?4”ôŸÞÏËVúè«H†IÒèOqŠ’©Wº>R슗Íì;DÝ':UÝÙç4'Ž:äøz¨Û”÷yÉ2­Z톤©ÕúÅqÝfìu]ªÎë®›íS2ÊQ\PyéEÎ'­ÒÏõ~ êàÙˆTwv)¯1dV¢©’¹[^{Š\ƒfuž¨¥˜¨|õk—5¼¢ŠtMÇB«¥Ä%ó25&„¾Íø¦‹·¯Üû¿õt„‚S¡åMW[Y£¦éщ§,*Ò¯öáœø<óHÉŒìµPGÔMh2:;åÌA4U/ùHü2€Žéýa„’#ôÚt‚h ´ú…Æ ³z‹Å@^ÊÍ,ÐñB "ý©°O[=c&tÊÉѽ£FhCMoj9ÐknÈDR.ËB¶Önhª›’ñ37³ñ:îhÑkK àuhÇjÖ¤î{0—•–¦¢xSºÜÖUmÛ€{Öß›ÒÑè{” ¬Ú–Îʺò%œí— “Qj˜ 5çZµ•ç h4§h;Úhh«šêŽÛŠùÊ¡í/hZþöV1«Pf±b¡¼¹Ù{T$‡|íuBåÙ\…´U¬´â/ƒ­' -¨/É@|äFÁröqÞцù>ê£U¼qš\À–—¾@Ô6òOY£©wØ#ýk¢=:³6ëú…ÏØÛ{,”µ\?˜˜«ºUOýÚPSy jëñÔÜÖüDyıÛ”lïy³¥Õ/ÜwÌÁ *è*ô´£¸‰å†ï–°j«!X&¾R¼\Ü í'z›Œ,Úßño²ËÅR¨¬ ¾¸MÈ@«9óìwâùÂmiÁT ýPAÎÙ›ŸAO·ä:Ñ Œj±âe9sê2m´ÐÍù’±ÚAørÅ5Ýl©™Ïa*%”Ù^Š2È{˜œ5æŽÿ³©°Xˆ¼ö&„­Vócq€®ã°„¿®u»£›«+ж2|Ñ®¤…'ýŽŠ!KÎ9 +x¤ ãÄ'jdW\[Ém­ÛÚŒ;OÂ:j{ÃþôÄÚ™H¥›|K£iEfW reM2‰‰þÍmÐë5è¶ lü× a•!'·c}ÕJŒ`ã;¾ìgœ =¡ÿ†àHP¡F:IEND®B`‚ pix[212]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment498n»¦ƒIDATH‰¥Õ½nÛ0`4jí¦ºvk‡4|”ö š±šREz?G§¨Èø *2VFSÉëÝ‘%Kjö ÿˆŸx:R¤,À £,€­Qî ~Wø*¸•Qàu‹o­•“ø]]k X¯È ZÈ h('h,Ô¦êXo2¸Â.Ͼ¥ãš» ­¸Î@|: †3Rñ¾/û„UÌ2¯![×Ú—ª;¸n‹šßƒæ6ãPõ@kÒ è[:ÔNnFº+ªÃ½V|¹Iæ09ÏHºAC-x çT†ž3ª“NÂ뎕m9ì«2°GR5Vãõʲ¶A]RjÁµ0Òw^(e´p& ‰ÝµWegûjQ_-ï;¾_ôñëRlº4³MÜæoÃu¿oúuÁÑŠÇ+7?ºœè<§uüq쵊cõ)¨Áûý³ÆOŸÙЦò‘Êé«2¶‰µÈ©âÕHÕXªpÅ‚ZðîØQßXDÔ–žW©Ä-5u0ƒÚf&º‹zêu—žP3}+tãwus©áÞW0 Ô:¨.æ4.G3ÝJ¨ý¬nç« ±ƒÁ¶šò5Óifþ¯šœç¨v®ÝDm/à<ÒZÍ© J[g2«¾ï &aX÷¤Ý’ê)ÄäK#‚Xóõø}-ýñ6S²q]}]XÐ<ÏN-eþ ·’¢pã 7sIEND®B`‚ pix[213]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment494ˆØ÷ƒIDATH‰¥Õ½nÛ0`4jí¦ºvk‡4|”ö š±šREz?G§¨Èø *2VFSÉëÝ‘%Kjö ÿˆŸx:R¤,À £,€­Qî ~Wø*¸•Qàu‹o­•“ø]]k X¯È ZÈ h('h,Ô¦êXo2¸Â.Ͼ¥ãš» ­¸Î@|: †3Rñ¾/û„UÌ2¯![×Ú—ª;¸n‹šßƒæ6ãPõ@kÒ è[:ÔNnFº+ªÃ½V|¹Iæ09ÏHºAC-x çT†ž3ª“NÂ뎕m9ì«2°GR5Vãõʲ¶A]RjÁµ0Òw^(e´p& ‰ÝµWegûjQ_-ï;¾_ôñëRlº4³MÜæoÃu¿oúuÁÑŠÇ+7?ºœè<§uüq쵊cõ)¨Áûý³ÆOŸÙЦò‘Êé«2¶‰µÈ©âÕHÕXªpÅ‚ZðîØQßXDÔ–žW©Ä-5u0ƒÚf&º‹zêu—žP3}+tãwus©áÞW0 Ô:¨.æ4.G3ÝJ¨ý¬nç« ±ƒÁ¶šò5Óifþ¯šœç¨v®ÝDm/à<ÒZÍ© J[g2«¾ï &aX÷¤Ý’ê)ÄäK#‚Xóõø}-ýñ6S²q]}]XÐ<ÏN-eþ ·’¢pã 7sIEND®B`‚ pix[214]: xres = 0, yres = 0 ‰PNG  IHDR?"Àl<7 pHYsb&2 tEXtComment495ÿßÇÂIDAT•Uб Â0Ð"‘.Ù/‚°Ø„˜ 6X‚’X%®XÃEÚD4FŠ|œ ¿zÝ¿;°h Ú‚úî"àì:ãê¨ØÀ£%v‚SÊè né‡;±úC•$ÈŽ@L³‘eŸ¡‰.tz-3ÑÜåå@Át¬Œ˜2Äœá¬ùB¤} I¸!*ªêÕY´ÇÌ\‘/Ðg˜&ã„ØV÷:n™GÚ`&$ÞÜ"\‡ ØùÒ¸³ÎñJ— IEND®B`‚ pix[215]: xres = 0, yres = 0 ‰PNG  IHDR<“¿“G pHYsb&2 tEXtComment502±»ƒÆ¿IDAT•UÐ!n1Ð,Ln°W0 ¨â+-Ü¢Ûä*k,Ë奠–gTdÐcÿÿ¾Óî¡(;Þ„:9®‘-@÷=.lGèàè†ØâÆ|³I~ÁƒUR9et¼ƒ:²ãä{eª§#²ú°V–€¯:;&°N†¤Y™A·,+.êˆ+ö:KîñóMM¶f‡ÒâEa¸[yÇ!q¼,££ø”›<òi_°òÇñ ad¦zªeŽIEND®B`‚ pix[216]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment503Ƽ³PÆIDAT•MÏ1ŠÃ@ пØ0a.`21öµRÁ…Ë\ÉÁE®1CŠm•n á9)vU=郟YTr F˜ÃîÄîµk!?\×25Š·½L5’£ÏÒâr1ÆüäÌ;3…VK¿¯•œ¼ ?ÉIEND®B`‚ pix[219]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment524jîDq]IDATH‰íÔ=N!ð·RPRØX-WØÒb2Ï£x„-­d6[l§7ð$l¶°ó ˜5±¥¤ <ÙÌNa£ÅR@Â/ÿG ÐLkࢨ~NõœÑ¦âsYd3jÔfF­Òóª~¯æ¬㘻®¹N çäeA€´l¢š6mVs7ÍXK“*«£™è>ÀJì£.èÍ*7T<¾Û¨GZ?“©ª’ÚúëxÖ(y›uc•I)© íÐ ;Ò#uQíIQ¯ñs’=i%£¾‹²úZ˜{õô“*nz))ËJ†–%ÝÄu‰Ó~¬2«NwƒÑ!ÔS•d ë.ÔW“³âd[@õ5VÒ@qÖ+äëP]Ì4‹t¯œÜ\ëW6Q µºóJï«^´cRîGz¤³Ú¨+*uêjaûI¥‰Z~å૤f°£žfú*Eó;¢r0+mé£lÿèE©ù‡§žµµHƒ IEND®B`‚ pix[220]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment525étç¹IDATH‰íÔ±nÛ0P*ÊF®c‡”÷ 3&ŠþH?¡@ FhÃ6ûú+rY KÑ_0… ^/èP%È’–d+@tÊdÒò¨;ï ŸY ö²ú+¿üµú·Úq¡=SXR=¢…›ã¸ Àó‘SY8$Å'þ' ?¨(Àë>>FáÆôw$:Ìk®„ãOT *Êú)×{ÐÉ¢G‡û}§Æ8 ä²’ž }IÁÀ,;½o¼„G—ïÙ"Ú[aayR<ŽZã\rÂfó–wº¡èUJÖ*T+Òf}ÓkÊæt«ßåaåtµþüᬔÚIH)!}ûúÊ6gmZe~†+Нp¨¦S7UÓ¬lvÂé*ÚVçjªDX<© ½Ù×ùTŒJu«  EÜž5b«œÊÙ­†Æc4ý Ô}í’*¢»ò¶w«¡ÂöxWDórþÞüį«.v[ÏÀ´]°¥+ß™5ªª×$Ié¤ü›”* aª¤uî>M¸gÜJ¦Ï ĀЬîºðEaÓÐk@bèŽóì¤"Õ¿H#Ý7Xç-*kлˆ›bû ÖKÿ.zÑ‹^ôý “lyõä­ÒIEND®B`‚ pix[221]: xres = 0, yres = 0 ‰PNG  IHDR= ‰QM pHYsb&2 tEXtComment526„à%]ÀIDAT•-αj1 à?êÛ¼z8’×èPâ>V6_è׊¹¡¯aÏ]T²h§Êw•@| ! ¶ Ø«Ù3ƒ=³-Ž“-Ñ0 l³ƒ¶³>£Ò ]´| tÓr—ëô’Т„;A BHé´£|ÞÐÛV¶7b¿µrÑÀç æˆ-Ñ%òÏr  <87 .õwÀׯ}G³G—Ñj뎾$OUAzMߎmN¨¦†w^Ë /Ó9ÚüÚZŽÐ<ySIEND®B`‚ pix[222]: xres = 0, yres = 0 ‰PNG  IHDR<"+[‡4 pHYsb&2 tEXtComment527óçË®IDAT•5б Â@ …a£) n&€•ØÀ ײ£ ”"eVH”‚2/WœÎœÄÕ×üÒ“IÖwd)x(ž—HD¨„=u:¼H0”* t¢ïpâæ§ðÑ5¯¥Ú°¼“4 ÉÕŠnÈ è>;…€³—Ѽ´†È ÒCO"5¨φJå/ÃÙ÷†1“3LiC»áÖh%‘W¬_ ;ú3þòq¾ÃS¨`„IEND®B`‚ pix[223]: xres = 0, yres = 0 ‰PNG  IHDR<Xã@â pHYsb&2 tEXtComment531Ÿ¿¢IDAT•Uϱ ƒ@ PG”d¯"ÝZ).è JVQd PˆQ§û9BI~ã'ë»0©ƒEHNy$oH®UF8pj26‚Ðû\°åëÚ Í*— ë„Ȇ炱l^âï?”2Ô#ìp˜,xhËAÛf4tzû¢\U¢Ü¡ªWuÁ0ÌÑõ CrèLs+ÇŒ…¡ùõ a|;©ŠÑžÀœIEND®B`‚ pix[224]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment534sõu0IIDATH‰íÓ;n„0б¶p‡s€H¾FŠ(¾Êd%@Û%W¡ô9‚Ñ ¤s¤‰'c`ÑÚ°(U*¦B<äùxÚˆ>7õ}S_7U½-ß"ˆ«Êáá|« 5guy¬T8=ë·MµôjÖþhmiR’dšd¢rREö´Ôä:¨µù³öhèžýà²æY aÚïP³?àN&I•—eë€5Sô±TÂ9¯¥‡T Ô…èÕTøVUƒ©g}Ò© ²]ËÊIð¤mˆìeRòkʥ͚Þ¤>gÍEÜQ7(êÊú x&kê‚*àyÞDy=™µæ¼ZhËÚz^Q *¯C¦X»Ql×ÔRôE]œ¡¸£"¨å;rÏú«Ïqü5¦@î Î{à~Á8þ.ê¨ÅK"ì¯ÅÁJÀ{Ê{%èn°nÄ®»îºë¿ê/w ¯ÜápöIEND®B`‚ pix[225]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment528cXZIIDATH‰íÓ;n„0б¶p‡s€H¾FŠ(¾Êd%@Û%W¡ô9‚Ñ ¤s¤‰'c`ÑÚ°(U*¦B<äùxÚˆ>7õ}S_7U½-ß"ˆ«Êáá|« 5guy¬T8=ë·MµôjÖþhmiR’dšd¢rREö´Ôä:¨µù³öhèžýà²æY aÚïP³?àN&I•—eë€5Sô±TÂ9¯¥‡T Ô…èÕTøVUƒ©g}Ò© ²]ËÊIð¤mˆìeRòkʥ͚Þ¤>gÍEÜQ7(êÊú x&kê‚*àyÞDy=™µæ¼ZhËÚz^Q *¯C¦X»Ql×ÔRôE]œ¡¸£"¨å;rÏú«Ïqü5¦@î Î{à~Á8þ.ê¨ÅK"ì¯ÅÁJÀ{Ê{%èn°nÄ®»îºë¿ê/w ¯ÜápöIEND®B`‚ pix[226]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment536û IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[227]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment530t˜±) IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[228]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment537êü$Š(IDATH‰íÒ±nà `"騡Ñ%C%^+SŽÑG±«Œ~, Ê‚%ä+à¥Ç[§ší÷‡Íq>‚;K¿S{Êv•ÚìÁ´«*W™k«ºÿΞæ:­ kž›Måkûâ˩ʅc³¥ý„ž¡«ü)fù¨®†®r©§ô–kÓ£&Ðqs‰°Bo=* 3Z—Ž/”5Ø´8ÎñºÀr »[ƒwTQð\¡]¸ÁÕWˆv)ÙÂmh¾”!Ê= AýFÔþí‰Æ·4!¥º S« yÏ5ÔŸ(Šm*ºPÐAë§Úðuøí|K¹€³WVù e¯×³åpC‘|¼\NºêÒ¼éRÅ•øÚPæmÈf6è®Jw,æ±Ôu衇ú/ô­\öymÜûIEND®B`‚ pix[229]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment531Ÿ¿(IDATH‰íÒ±nà `"騡Ñ%C%^+SŽÑG±«Œ~, Ê‚%ä+à¥Ç[§ší÷‡Íq>‚;K¿S{Êv•ÚìÁ´«*W™k«ºÿΞæ:­ kž›Måkûâ˩ʅc³¥ý„ž¡«ü)fù¨®†®r©§ô–kÓ£&Ðqs‰°Bo=* 3Z—Ž/”5Ø´8ÎñºÀr »[ƒwTQð\¡]¸ÁÕWˆv)ÙÂmh¾”!Ê= AýFÔþí‰Æ·4!¥º S« yÏ5ÔŸ(Šm*ºPÐAë§Úðuøí|K¹€³WVù e¯×³åpC‘|¼\NºêÒ¼éRÅ•øÚPæmÈf6è®Jw,æ±Ôu衇ú/ô­\öymÜûIEND®B`‚ pix[230]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment538zC9 IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[231]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment532š–Ð IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[232]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment539 D 2IDATH‰íÒ=nƒ0`G ÞJÉ×èÕçêR“‰‘#p”&b`ä1dŒQ†º’å·6”Á†²t,zy„ýù‡`£2òç-eÙ–¦Cð¡ßÔ:Ôâ( µÔ¤«*¦¬›P›©>å!Ö›Û­Š…“˜ƒÏyéê 2Ñ£¦‘-$¦Þ|f‘–-j)t_ãô,T^ PÐ{5"ÖLáÚ羽W6«(-w¢®\T6R|X7k…Üïp·PnDçŽ&Kï€4¯¡ÚYyë”XµÓ8U$‰U9¥îi}Ób©WKmŠr\R¬q¶Ô;_ÕL¸³N+·T¦¹f>ßb êh~×°vÝu×]ÿ…~Lãõ@;@¥IEND®B`‚ pix[233]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment533í‘à“2IDATH‰íÒ=nƒ0`G ÞJÉ×èÕçêR“‰‘#p”&b`ä1dŒQ†º’å·6”Á†²t,zy„ýù‡`£2òç-eÙ–¦Cð¡ßÔ:Ôâ( µÔ¤«*¦¬›P›©>å!Ö›Û­Š…“˜ƒÏyéê 2Ñ£¦‘-$¦Þ|f‘–-j)t_ãô,T^ PÐ{5"ÖLáÚ羽W6«(-w¢®\T6R|X7k…Üïp·PnDçŽ&Kï€4¯¡ÚYyë”XµÓ8U$‰U9¥îi}Ób©WKmŠr\R¬q¶Ô;_ÕL¸³N+·T¦¹f>ßb êh~×°vÝu×]ÿ…~Lãõ@;@¥IEND®B`‚ pix[234]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment537êü$ŠõIDATH‰íÒ-nÃ0`3³¹°h¾BPÉWÙ6>å¹ ˆŠ {”¥ ÜÒX~}NÕ‚ê=³i$~ÒûWX ¯þC[YÛ߬dõ&m]Ec´²Ú* áÛˆÚchd=“Ê™ëzD¬uE*Ï{ø©©í1Ê›$À+s½r꺬(³NaÊ{êY{O¹ìªUŠÕ³öª‹nªºûd,˾í¾Mv @úþÁ%Nvš‹º™«m·(ðêîŠVÁÌÙ,ÊøSGdúØrß¶üÁkäÆÅ@ìYŦ@×·šÕ%h^ÍÕ}(œù™î*ɪ«®ºêè µ°øŒìÿ ÞIEND®B`‚ pix[235]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment539 D éIDATH‰íÔ1jC1 `“7x‹Ž 3tèZBœâ!×ò»IC/àQƒ°b§ÐåIÎèÓúõ# Ô5üÍ?3½./U\’ÅW‚*ÉQä™*#Ü…l½=µÍtm輜z*_±%\ÅÓ¨V[‹ ݇&CcÖBßCÉPX5PŠŽ¢«X/Žjé‘©övª_õfE({ÚbtUbaÌâ(Ç¯Š™/ö~9æJ¹åmh†¥Ò­žû]UÜö=ÆquOCOP?ÕÔ@ò‡­}}-/]yÛWKÒ  ºÊ6ó_½×¿±ë®»¾‰>V©ÞVõÜgãIEND®B`‚ pix[236]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment540;Ù'îÓIDATH‰íÓ1Â0 ÐH2ö¹@ GBb'•:tä= zRqt+’©1{¾GÄ/ždÙ±mX‰Îü©&ËÄt:YÞB^‘¶¢KF™gÑPVò¢óTâ«j ½®ä Nªv¡AúÙKmYÇ÷3Öû¼ç+TެéòÎ83//U×,ýB}&kŽ“±üÕî4¥6¦“í7¤³LÍ—\¯ì¹A4f ~àä—Ê5ûV–6/Fú=:6ÍÖí‚èn&y,@•¨ZµjÕŸêÖnù½QÏ×"IEND®B`‚ pix[237]: xres = 0, yres = 0 ‰PNG  IHDR>—JCz pHYsb&2 tEXtComment545K³Óa³IDAT•MÎA Â0Ðè¦0(æ"¥½˜BAwzÏR÷Bowù&UÁ·øÃ|ØIoPDž ¿¡­H …è Ž¹ ‡6öÐHŠAYþÑR…­Õ«$t¨À€”â½d:Ñ_‡6¹ë¯õÂtê‘43uUïTQ×Ç®f¦ŠÅTÛú‰ª…¨ØL}[}ÕÀ´«¥Cnëfƒ!K[?Ä&¬L¥ß¬‰¨?•A¹ÎyÐS;ï© „5S½E”‘ÜÂOT°»B¸p->,¢YLO /˜þ4R-9±´““¤f’ªïëZ’Øt–Í£ÇâÑât›äAtël‚€ý”«í®TÿÛ¡‡zèéƆûYëqRIEND®B`‚ pix[239]: xres = 0, yres = 0 ‰PNG  IHDR?!FøN™ pHYsb&2 tEXtComment550"¯´IDAT•mб Â0Г"áooB6KPH™X%‘‹”X)h(Œh‚dü¹s@àê5þ÷ïë‹ô柡S‚)!” aG^¡3ˆ ƒ©1§»|^°¥”â±YqûâH‹Áµr¨É7[s‡ž13¬àâqžœ7*¸ûÔÐøR;IV ëxz&jŠÚzn¨\0v±hät²@Êœ0&ò^¥4¯¼^åésŸ%Ì«ëg{IEND®B`‚ pix[240]: xres = 0, yres = 0 ‰PNG  IHDR> bfö pHYsb&2 tEXtComment552ÌÌwƒÔIDAT•-ÏMjÃ0àgdª©»ìÂT ñ•zÕÝdÙ+É84Ë¡ 予 B¯#ÓÝóóföžä=C†ñ‡ chˆÂ‡¦< †&OÄ0˜TÑ3ØßÒB<ׯ[¹R ji¡¼`k¦<QÇ{yP¼ú`¤U¤Q÷ Å%뜟:Ü’;kwVx*¨Ømˆ>Nÿ¸dÜ7¬W¼%÷ýñªaî}RìM<¸šŠâZÅÁĬY³:,±ØEú+ôTk"4”|·ò‘+>{2ÿÖ¥–^VË-IEND®B`‚ pix[241]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment555R¨â IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊŽÊŽÊbYy+QÅõÀÅIEND®B`‚ pix[242]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment556Ë¡³š9"{ú×(IEND®B`‚ pix[243]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment557¼¦ƒ 0IDATH‰cø40ŒÊŽÊŽÊŽÊŽÊŽÊ’,û¿¬=>Ù4sÕ “µ©{‡,|´O}§œm}IEND®B`‚ pix[244]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment558,žFIDATH‰cø`ÿ'h`À/û¿l=²”ØK;W ”¬=²´sÕà”µÇ'K µóã•eÇk/^YÜr£²£²£²£²£²Êa¥>ryÜIEND®B`‚ pix[245]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment559[® bIDATH‰íÓ=À €QˆCG/Ô£9ô&=‹·r0P“î_—`}!üqˆKþמPÕ3êuÕhÅÜ/…®†ú–z“6œˆµ£ïj•λþ"5êY ü‚É©¤ôÐÐÐÐôàË*¨öœ¾…IEND®B`‚ pix[246]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment560 ïElwIDATH‰cø40P$û/¯,ûŸúvܲÌì™qÛ‹_¶¯lû¼²ì›ñÈb—hÙxeTàóï |²ðÊ gÜñ;`²ìÃMöó;ܱð‡ù€ Ž| Ö{€·ìÿÿì?à‘Å FeGeGeGeé* ˜Í/¢® ‹IEND®B`‚ pix[247]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment561~èuú€IDATH‰íÒ1 €0 ЊCÇÜÀ^ÓIôfŠ©7èX¡$ê*þ VD¡Y$!?F”êÍ#°›‘& ‰&¤L>Ñp[™à\¡ÀîÌ´Š(zÆ×4t5ÖÁ7ŠöºU•;ç(Î(·óu¹}t|{…4Ú±µ)Ó®‚ô¢Š-Zô7ºŠ£ Κ3syIEND®B`‚ pix[248]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment562çá$@šIDATH‰íÓ;ƒ0 `CÆ!AäheàX 10öåéÖÕM`åÿ+µªÚ!^?Ù²ü(„D_|O׎i°3Ñ»q¨gjª£næGÊ»jë J¨M*°©#WcµŽ:é¼0Ì]úBõJTVóJ‡‘Uö–©ë˜Nïjì ýCºØ¨ç˜>E; XU/7¨"Ž*ެY³fý#}›?n«IEND®B`‚ pix[249]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment563æÖxIDATH‰íÔ± €0Ð/–!£ÄÍ XXºR¬,]!Á´KüNð¯0  ÿÚÇUG âém=¡Æ šþ§¥õNÖLdŸjéh¾LD›M‚º#V¤#ÔjØÆªEzThv²öPÉåAÖ† PæÂ_<ƒªªªª¨7³À5QãH‰Á–Ñ)éó…ÂÐá”è!’î"Õ°•Ó kºvó b¡€b˜ÏDv 9b~µ§­šÏ.ž²…P1µYDÓšS}QwVRü™'9ífÔÚíý~ÊSu†óì­Ñ®_’7ÞTæk¡>&nÀÌ,•Ó‹¾Ðî¤Þ}5E­¿·õJåWñ3º>„êÒí·í$_;£zé>%tÒJ3Ò¼è-2ÃkëkibŸ´Ê8Ȥ½[Ó€U8" ™£CXus¢T?<Ó³ë jè‘6%Ç’Ãû¿ØÚèÛAͨ$M)”ÉHw¤`¶5™SN™Œ•‡±Ê(×9Žr>ô7]¦#m}½«k\A~ŸS&¿îõkÏh|تSµ›BNÅ^žžuF; ž(X]Š=Džê(}4QËEè¸U°ÈÎk½¢#êŒÖ8“gTRÇ¡²aÑAÕë¿7¡g=B Y{”érn%ý{sÚyùbW±¯ník]èÍG­ÿý ‹gÎÕV¤IEND®B`‚ pix[251]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment566àŒàY…IDATH‰]ÕAoÛ6à's0] {rÐLûîÍŒ0?Åûvq/TÚî€a¾ö0ÔEA¹ í5‡ma—½2ë!4@éí=ÊJ”è`ÁúDò‘||àk < ¡ˆ¢¨´»ÖÐ^“)+€¿à{‰´wZì5 |[œJþÞâóýK0ž~…;«€ô}ûpÖ)ˆŸ¹—‘нÎ÷¦@ GG#uÓê¶ì«DÒƒw#õ™u&°„þeHŸ]åŠ{žÎ³¾Ò¬Ž)®ìjNêèÕ,’ŠýÅ ¾âûÛcå^(ì-ÏNT­Z”iÕÞšµõ+áí.ôý©iC‹fW“:ÄØÓI«›æÛ]ðÇjø(æÿd/v¾Ð2©|¢Õ‰Ø¹ç*ªE«“» äûV×®ËQÒb!.Ü*Ï*ö˜•p”Ô8¹qb«\¼»× -^R§“¢ú¼y"Z‡^J'ñ â—G:Ò¿Av½Z{…a4ï«[—æo€à—ºRˆá Û#V|Ú¼6´\ ÌrjÚ¬ú;˜Ýtz”/©é úúÝy«ÿñvåæñ¸“V_•òµù@:$u‚²éÙ?Ðꔢ¡ÍQ.èXz”Oe…ARNdݤ`éÍñË?:¥„>áoø<© ieš—5…PÒÑ‚™Oc‹¤±Êw_(æ ImbjÄš5Íišµm§ww÷™3ο“¥vQZR‹þÒt:%o ¬D¹¢F'R?¬)õ.q#ª@K†O”zWIiÚ+<êk€Ñ`×¢\êKœiý°ƒasRÙja£Á{Í‚Ód¤€¥ 0µ}Pð«ñaîL#ŨPXN%ÚþI c©œ ò^+¬f”ì7uO «“¹Ü`uÊx öj×ү耾£ãçVϪ«V+é V)tRwÆqÑ Ö*ƒª9°nZ=a¥m.¬·Ë”‚Ž…|“b¶ŽÒ£ÒÍØf”¦{÷m”:«EÁÅb¯Ÿ#«×S»S-"kÖêõL¥–Ž©ãa¥e]*h5Fš´M(Ç£/Ǫ¦"5„ Â^9à!+–³±ÚQ[.vÊQ NÑŠÔ×^UÊ/ËžjQÒ‰uó|¼ÀJý+›Y§|™§©3ÎiµD3;GTÚTX3Z*„æh‡¼–­ò‹´f»4]3j¾©z¦†Tô¡0Û (dJ§jꌒÖn½ é’ôn¯\aÎuS©P¸AnzÊ=ÄjXý"@n¶Iuɇ;íçmˆfS*ÿ}„\'ªY¥Xµÿ¡ñ#å¶ô?ÚmiümÚnñ¬ÕAÒ¨Ò éËJ«¢qyuªí•Wtn¼-›Wüÿ Y;_•´’Q’þâYñÚÙuÒm깑CëôÂïÛÒ2@A÷hY]Ím®ßÑéœkͤæ°ÎÎSp[e§+þ/l¤qÏÏwœJ6ªÕÈm4e£º@Õå$ÉSþ„jo.Ï‘ÎÐ¥ôVâu—“œT¼ARC•ÅÑæF•¶Ÿöah°¢ïMP¢Ò×hËÿcž\âhIEND®B`‚ pix[252]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment570ôt-LIDATH‰ÝÕ;rƒ0PORPú*Rä:W*1“"¥£Ä>†CR¸4Šˆ1bƒ ín>ž4Q<¼ÙÈ+€3» °‘¯N ‹šÔwеå5¯ŒºhJ³~n ½Qn¦ºÊg}þ®™ôvïfÿ¼%Q·®¡Še1ËjªdUE¯éRˆëÆiÛ5§ñ`U"=ÏUä¸VAÀô«î2ßazŽHÒ^5ÛUåßz¸æyí7õƒü:v®«À}‹?éê·j1}IbϬöCQu7a¥DŸ}N\Éíë?‹«Gµn‰/Cýq4£wÜ-uÊ\:MÊå{ÖNÓÖ•_+míÜ9x¢õÀ©<4°'5ÏŒz"u+FßTû°!õ£;=qÞ üåoÞçÿ«ê •è}Ëj)9-¸ºíý hh³fUÚub$§¥ï&ÿqó$Ãbø5IEND®B`‚ pix[253]: xres = 0, yres = 0 ‰PNG  IHDRáK®OÝ_ pHYsb&2 tEXtComment571góD»»IDATH‰åÔ1Â0 ÐH Gà0å(ŽWac¤ŽZlH$®ä/”P©²¼ú;m“õÇ­@/ Š“‘¦}Ž%t"¤¼Xßuêj÷{?ÔýûÍZù¾Ú¤õô.$H#VœÊ\§cƒêßêu5«¨Ó7Éõ7¿vPÉÓ|=Kô”)?áª"Í–ÝäÒ;¯´WT†:eèæArNF¶8˜ZÙ•™îȰÕ÷N{5.ú å0Ii>IEND®B`‚leptonica-1.70/prog/recog/sets/train02.pa0000444000175000017500000006227512233312610016335 0ustar dandan Pixa Version 2 Number of pix = 124 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment0¯ó½ªLIDAT™Uͱ €0 DÑO"Q2BFÉd(Êh… ²qLA(^wú‡¡ 7…‹ÃíAHÈét}±ØØß·Oà>[Þ–è—øT,ëÎ#KÔiãIIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªMIDAT™mͱ €0 Á\%c¥¤E,6ñ)]XRPP\ùzÆbx2ŒNAk¡ÙÊé™cJÎ/“eÄ¢ {‡¦—>îO<Å.$'ØE«IEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment0¯ó½ªJIDAT™}ͱ À ÁG¢ô"d46#›„ (SX)RªWž £08·¥!´"T ™ôr~Õ0CæúèS讌C÷ñ§-~·)ê¾RåÅIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment0¯ó½ªUIDAT™]ͱ €0 ѳR¤ôFbÄfa“Œ@™Âr0 Dñ:û&ƒƒ5L4 mVª)»e6KA.HÀyÉÏuóI÷홺hlk4 =:=—q)ã)x²±d$IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment0¯ó½ªOIDAT™cøßþáã?† \Çð †áÀ6†ÃPÜþ„™À˜ù&þ‡ÀŒ0 oc&†ƒ?€øÃæÚ!Äv`»~0üÐ(+ôo ªIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRœÓû pHYsb&2 tEXtComment0¯ó½ªGIDAT™cøÇø‡áƒ `ax Ä5< þ±04qã?8f„b$6.Ì𤟈e€fÍšÿ€¡hdž?Œ –'õW¥IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøßøƒáà ¬`øÀ`ÁðŒ%(H0üÁÁÐü™10 ‘gÿ#ÁÐŇX0ÚñlOÃF ½ü?¯û*·=Ú ßIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøÇøƒáà ¬`øÀ`Áð€A‚áÀ †Æ? Íÿ8˜aø^ÌÆ uP Ö#ÁÐćX0øP4hоÌ?&(l bIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment0¯ó½ªTIDAT™cøÏø‡?0Ô0<`°axP Ãpð‡ Ãá?2 Í`ÌÃÀ Æ,X03Â1 ã? ªáF nøÁÃpà3È€ÍÙód#PÃ?æ?Ú*þ‘\ªMIEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment0¯ó½ªSIDAT™mͱ€ DÑï@h WŠEY€‰Ce@„7‡‘Á w?£*ÊEwƒv E…jB¶ÝEòˆ¤„Éþ¥%r»Ç÷Óü*Í¿WÇ{›2‚¾ÛU0ÏR{:nIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ó½ªEIDAT™cøÏð„?30‘ô@‚áC40ññ‘ýó5IEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<&IDAT™cøPÃpÀ†R°ax F6`$ƒahàa@Ó[éJE÷ªIEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR `ÝSi pHYsb&2 tEXtComment1Øô<)IDAT™cx`Àp@€¡Œ€ƒÃTô0`h#8xPÈÏQØ™TIEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR‹êèj pHYsb&2 tEXtComment1Øô<&IDAT™cxÀÇDÀ¨Œ`ˆƒaï(Äqï]l0*F!‘Æ-ª´È*‡xKxí /rÊ.“ã‘TCÍnþ\yÑ>öï Çà-äÅž&IEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment2Aý܆KIDAT™=̱ € á³²dFÑ0Žås#Ë¿ à3&_yG$¡U´ÅX²Ü^•¢Êió§Ïf»æÇÈ¢~ÝîƒjÐmú3/=~,ßÁl:øIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment2Aý܆RIDAT™eÌ1 €0Dá—00V8ÁJ¥4逭¿ANåÊÊð%·ÜC³ˆID-™™E™íGô!¬ÙaÕüïI|* ÊRçIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRUãH pHYsb&2 tEXtComment2Aý܆ZIDAT™5̱€ DÑÏR¥hgÙÖu` çØ!ãy cð‚ ö3‚¡ l®,’ ’ˆº$¤9ÜéÛ4cR°Vý=¯·7t¯¨“߸$rÏo/1A%ÙsýÍ4IEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRï^¸Å pHYsb&2 tEXtComment2Aý܆XIDAT™M̱ €0…á…+3BFÑUœ$X¸VÀÞ®³MiOP°ø~xͣ΋F!aLd¢ (‹0Ú'üDVKôìôµtü ª+.¿ôáQ{N‹7ÂÔ%¢abIEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR}$Z© pHYsb&2 tEXtComment2Aý܆PIDAT™MÌ1 €0áK€„Ö V*¥°T€‡ƒ²1~Läò­GÄ[£Pm®Ö é“™” •‹­¶ÙhIÜ“¸ì$ÓÁG8*„±ë'Þ.¯£ ÏIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment36úìPIDAT™M̱ À CÑ(®ÌJŒÆYÉ]Ö¸l@™*`% Å“NgË }‚bU”Kħ½!ÿ†ót/ÝL×nssX|¡Fíú7­{W¡7ü%:ÚVIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment36úìLIDAT™cøÀ ÀðŠ€qüð€áñç ÿñq f~Àðˆr€êþÿaÜÄìH˜ùƒã†°™0?ã—+éXì'™IEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìVIDAT™e̱ € „áßhbÉ®Âhlà¬r‰k0tF¼‚Îâ˽âî!"éG”KŒb§eñâ±{ÍV#½Âh“ïlÁö™A‘àî6&oë*úÐ[s+¶OŒNWIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úìRIDAT™U̱ €0CÑ¥ ½Ñ‰‚µ®cŒà2]0( Å“,ëÎŒ!iÇÏ>‰,¢×ÉYîåh º`L·]vZ}5(Þ‰o7ýÛ=‡’'´½8?IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment36úìUIDAT™M̱ €0DÑ/Y £d7r„t®°È‚…í•ÄxŠ…Åkî¸C]¬q¢ð'Ê`£X6Q­W›Íù徑âëhÐ'ì^‘Ð>JdÿfïÖ 1¤×¯€xIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úìXIDAT™-̱ €0CÑ)YáFË(‘((Y)kxÒ"¡„ƒ¤x²t²: aä!ý¢Û$Î]\‡h«¨A<~+ô¢Q Ü®}^ad„làÿ:‘|¯ å±(O¾WÿIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment36úìVIDAT™5̱€ DÑïJ¶@i”@f[ÌÒvp!‘¸£¼do÷hÊ/%‘c?>õ4FoÜÊ»î¦nKpŒ©Ã*~²ðrAѶ8í7{¬)®ø¨›•IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìUIDAT™=̱ €0CÑR0«0]ʬäŽ5‚X éR ‚#ÅÓÝé,“Y‘m?½O‘vÑ£%qqù׬8[ TëC6Aôœ}‡Áûd8Ë×-w´EŽI*øÉžùIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment36úìJIDAT™cxÀØÀ€A|f fo`èïo`øÂò €øPìPîPÝà ø?3À1?€Ò@ÌTËÄM@s±7L&s5:qIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment36úìYIDAT™cx`ÿƒáƒÃ$,Æ @üƒ¡™ñÃyæ ÿ€ô†  z †@ù ÿ0Àñq nbæpÌøƒ¡ÁdžP_PÐæä§'k EÄ´IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment36úìYIDAT™=Ì¡ €0Dá—TÐ:Á`•$¬ATv…ŽPy‚P~*Èå3'•Àçø-&rm"Ÿ¢dÑw3'd höHžþƒÒ g&û†HuÝj´Fî®òÜ/?Ìö+wIEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment36úìWIDAT™=̱ € „áŸPPº£1 ÆXÉÄEÎ Hl,Œx±øšwwQ •<•IDZÅrˆ¶‰Åk³Û¹*sõÌèüš%ß’³8…½€Õ?õ %(Щ™6IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment36úìYIDAT™5Í1 €0 …ῸttìQz´Œ…^KèE/ ¸d(ćèðò /•ƒÌ’?Eª8ãvÎpbHeÓ,øšqƒé¿ ›tIÚÓMíí4ýÒýâk,ŸüñOéIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úìPIDAT™-̱€ ƒáŸ£°eWp4F`4Fa„tRxb‹¯x—¼ÐO!2´Ôå²LqR§ nöú~œu÷[†¡í°8µ_…P’·öfó‡¢>ss&øj]ÐnIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment36úìSIDAT™MÌ¡€0ƒáp5Qp¬UY×µê¬ðØ ò Žò_‹@|"—\ÔU?yX±!Á‡\:òMߨ{kÒ…þs¢˜,N•Ï<ëâ²Ý_ Z'†¾Ç5ûIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment4¨žy³PIDAT™cøÇ Çðáÿ``b í Çðã€Ç;† ø!?FÂÇ ðy îPÇЀ‰øÀ`Çð(ÿÿÿ²ÿÕBÎ. ËxªIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³GIDAT™cøÃPÃÃ?lÀøƒ°axÄÔÀñc > ÂjŽq;ùý@ÌTËÏ Ã€°0ü< Ãð?°ÍV./©:”IEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR!ëyV0 pHYsb&2 tEXtComment4¨žy³[IDAT™Uʱ €0 DÑ‹R¤Ì…UØ:JV²DÁF,à’"ÂØ†“ž~s0`pw„ö¹œ:a„pº-ðÛ]j·HÁ*Ù›Pþã1ÁüÓ8ÃÂ\¼¦ô·?+Mø6fôIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žy³LIDAT™cøÇð‡áC ´AÁ?@Ø‚?€àPüˆñÁnªmâ6 æblàPüƒ àžÿ`¸†áÿƒ?·™)åä¹ËÁIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR  %…• pHYsb&2 tEXtComment4¨žy³IIDAT™cøÏ`Ïðˆÿ0ÈÃñ þàÄì¡Xžá!ó3<Ò |(wŽåÚ034002`‡€vü?Ä@u d°d²,:„qç¹IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR  %…• pHYsb&2 tEXtComment4¨žy³HIDAT™cøÏÀÏÇü ÿ øÏþ Å??€°<ÃG~ Ïð(öHÿÁíØÚ024002`êÿÕ£àöËú-’Û÷öäIEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³IIDAT™cøßð‡á?C Ã? þƒ„@àlÀø3ý„Ô0âãPÜÂ@ñv f`°bdÐÀÀÂð¨ÿ?P*þò¤5ØÎ lIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³?IDAT™cøÇPÃð‡ÁŒ cþð Ž<°axÇ5 ‡¡¸†Ô007Ø000°0 ƒ@{þ?@Ãji1S¶RèIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment4¨žy³BIDAT™cøÃPÇð‡ÁŽáò‘ñ 7@ðÁ†:0nâf(f?Âv Ì L Œ åÿ?¨b;ê&Ñ–ˆ…éIEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿ †áƒ €àŸPüñ€ ?a†ÇPüˆõðy>PÃ0†d$  ˆ?4°0€íAÇ€øß ™;ûwP“çIEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR!ëyV0 pHYsb&2 tEXtComment4¨žy³FIDAT™cøÀžá?ƒ<Ã?(þà @œ Ïð øÁ ðáö(¸AˆÀ˜Lƒø Ì ÿð£ay†ÿê÷~.LžeðIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³MIDAT™cøoSÇðÁŽáƒó1üPâþð‚@ñC(>Â`XŽ¡Èop``h`€`TÀÄÐÀÆðÿ¶â:†ÿÿ:.O,K÷IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³SIDAT™cø@ŽáÃ>†Pü ÿP€à Püˆ?ð1r u06·¹ùWyS|P\&MÏsG–IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ß™I%[IDAT™M̱ € Dág,(aW`4FÀƵ4±°táJ ü%_u¹G»…ÄÖ‰mÅ/Žös‰Å¶Ì+’S +0›½ÂišYÍTCçkÄ)2–øý¬k 9=j;1ÚB)DIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%KIDAT™=˹ À ÑA„”`:q+tb$7¶™ÛØNàsÈÁËfp+…ösZ(YnéÇ#ÉwC==´ ¯Ã'})Ë%Y’„±Íߢ³(3ä_IEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment5ß™I%UIDAT™M˱ À DÑQ¤„QØ +±A((a$Âlà˜"–ž®¸3ÂdÉËaœñ“ª“¦;‹Éç×½ÛD‘D•Ha“Àm.ã\æwÁþ;âûÏŽ)˜’± IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%RIDAT™=ÌÑ À Ð?ú©ÐE2šÔÑýèvƒ8AzQiàqp$ÁðŠþ*4Ñe¸ÝðøÊÆ®!îQÇôÒ “ÒvD*ö’y¿-ÛHˆ)§êàžIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment5ß™I%[IDAT™-Ì» €0CÑ‹((&ŒÂ& R²’%‰ÄÙ̧8’Ÿd?J™€*¡ú×~â(ÖY¤Kì¾7w"b)ÆÒ ;í²!Ã8™s—­ÕÑ»ç#J§¥*Íà#IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment5ß™I%NIDAT™-ÌÁ € DÑo`8À Äì@\ÿ€¡ù?·#á š .H`hü ÀÐüCá8þÆ ÿ|y æáÌþ!¡ùÐL >?ø(c3b]4üIEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%UIDAT™cxÀPÀp`8À Á üÚì?0´ÿ‡à6 ¿ˆê 04qó†Ã@üŠíXˆù˜Šê@z@æÍøÀÿôó*þ²|¹\IEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment6FŸ_IDAT™e̽ € áìp]Á t%0þlæ(Œ@IA>Bcbñu—£DO¹#Ù©S½!Ljžêl®Š´³ƒ]‰…l1™Fþî¯\Yž*9Âæ úŒ,$䊙4n*5IEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR)ö!Ð pHYsb&2 tEXtComment6FŸ_IDAT™m˱ €0Á$BèÀt-Q˜ÎL'”@èÀ:óO†D0Ò{Ô4Sc 2 ‚Ù(È£¸Ý$.·ˆävuÑz‡}É=”–Fü+_Gvíë4ií¹p÷+ØêôÐQ6ìÃ~ÁIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR'ÈÞ> pHYsb&2 tEXtComment6FŸ_IDAT™]̱ ƒ0EÑ‹(âŽÖkx4Hq6ƒ*kx—¯°øùX¢ ÅiÖ"VFä$¹LŸ…ÑV÷õbb¿}Eá’]¢lzp0Oó­ÿ ÃgˆJìÊTÛKتˆ, –ÇÁÁQK¢ææ"a âE™Ý*öÚdï¹w¾k&rŒ`‘Ϋ7 pHYsb&2 tEXtComment6FŸZIDAT™}Ρ €0á#˜:,Ž5ê`¬: ,öؤ#Tþ‚P^B|örT%ª¹Eœ­8:¡Á¢Ì"×Çþ2·4’;zÚ[øàŸ›zVgSļ•Iïêù¸q>2 l&vIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment71—( CIDAT™c8ÀÀÀÐÀ€$ìÀð†ÿø0·1;óCð?ù ì!øG=Ê}ªûÀ Á?ØÁ´Ö/ThYÇxIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment71—( QIDAT™cxÀ Àp€Œ äòì0ìPÀð„|€àƒ@Ü Äìüˆå?0ü±‡âú ?@(þ(ÿƒ‚ÿñ?ö¤è2JÆMó·IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( NIDAT™UDZ €0CQG)®L6`Fc˜„Un”Œà2âp”4ï[FàrþTµÂ|GiÃ[bp".I’‰w°é)²}¡>ó’æv ãN™/¾òÕEIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR ßÒ©ä pHYsb&2 tEXtComment71—( EIDAT™c°à`€ƒ ÿ;þI úgC €èÃÏ ŸÁèù†ã?Îÿ`èÿÁÐþƒ¡ñCUÀІ‡?©%Ñb£HIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( NIDAT™cxÀ~€¡ÁˆÀä€böþ?8Áø07q;æbù ÿ@Øþßzþñÿà ý(ÿ‚ñˆz³®3ðƒ‰xIIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( GIDAT™ch```a$ø80È?8À°ˆÿâF(fbvþÇ€á<ÿ°‡âú €ô ÜvþÂõaÑ.Þ75j…IEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( OIDAT™EÊ¡ €0@ÑïZ‡ÅÝu]  ‚µÊ&áä B9JÄ3?ŸJ¤ÀÙº) ÑDÖ…¦F«îöáp“q»K\6ìµ~Ô»†Ÿ…þ=»6"(,×$IEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment71—( DIDAT™ch`@ ÌØÀ °áÿa(>Äí@ÌÁÿ@X‚ÿñ{ ®o`ø¤?ù€òØ‘0?ÿ©·o#Å(Ði¯6ÌIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment71—( @IDAT™c8ÀÀÀÐÀ€ øòìøÿC >ÄPÜ Åì ÿ@˜ˆåؾá ù?Ø¡˜ CÔX¢)PKÎÙ¶IEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment71—( GIDAT™ch`P`h`@ PœÀ ÿˆ<Òþâ‡@|ˆ›˜ˆÙ!ø?ÿ‘bû ?`ÈÿÁŽŠÿ€ÔË?jk0Ç™ò gIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( GIDAT™m˱ !ÐÀ¿tWq´3#YZÈi>|» ¼"`<Qðâ?‰Y:‰íjh¢ïgÄr)db^êÓ‚¶+øg*-T –ýÞIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( NIDAT™EËÁ € DÑ!8R¥¸¥‘ØØ&Vbç`ÄeAä%sùèTÀý—›ºrN}8̾D“÷׫(¸ûLŒ0‚ôÃÙ> ¿0îåMâÜIEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment71—( JIDAT™cøØþƒáƒC.ð(÷¿A‚áÿ¶â ÿ313³ÿ`øÇÄò?þñòå>0@02‚Å$S/"l#ÖIEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( LIDAT™c8øÿCƒcø þàÃÿ‡@üˆq3·1;ó`øÄä0üaû 1Pì?Õ€â=ET3ÏgRSIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( EIDAT™ch`<À€ ì'`¨ÿÁÿ?ñC > ÅÍ@ÜÄüüO‚ÿØqý†ÿ¡ÄÊÿ`bfþÃÖ‚~4 _¸÷IEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment8¡(5˜VIDAT™cøÏø‡áÆ 6 €¸AA†¡áó€q#”>{P`TWÇ õ@ñæ2 Ì?x€˜Š ø #6〠P½ XÏ ^ l) Üý,IEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜RIDAT™cøÃøáƒÃ >   ?¸ñ‡ÃÁ Õ0|àZ°\óftü‚¡¸¨¿lGÐ. ~æ¿(ÀÞóQÕIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜SIDAT™cø£ð€áCÆ`ÌÀÐÄ@üŠAì0>` T›Å@¾Pî#3#±áhã : Ù ;0@Ìø$ÿ1?€$>o×IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment8¡(5˜QIDAT™cøÁüƒáÆ  ,$€˜ƒ¡áC# –ãƒ,€jz€Ä~p04qûv(fFÂŒ@Üøj¶Ð ]Œ?k)?ðçIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8¡(5˜JIDAT™cøÃøáCÆü€àƒhøÁ°º@òT=H¼ù3€13ÿ@ÅÍ@5@s €ìégþt,º!ÿìRIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜VIDAT™MÍÁ €0 …á'.!£uݬâ"!ÇŠú[zòA¯J¯¨ÉaªBªùÓM-MQLI¦“½ñ0_ÜO2–iÆN—šiÿºç?§#^cª'Áy´‘IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment8¡(5˜VIDAT™mͱ €0CÑX °BFˉ„U’M2‚KR`(Ñéu¶çÚŒÂ$…^ ßP­Ù)Leg ún’+Ñaÿãþén•·ïñËí]¬C/ï 0””< /IEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment8¡(5˜SIDAT™cøÃüƒáƒÃ æ`8Ä `ÌÀРÄ  @(W V÷¤§Ì>ðƒƒ¡ñ3‚ðøÈL ¶ÚÒ 4ƒù½Æ#át`ÁsIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8¡(5˜NIDAT™-ͱ €0 DÑŸ 2#d´””Éf°IFpé!|ÁÅ“%ëÎÆéuV.y„TYâ ;Bdÿ|ßû;ÌÈI‘7gBqS?v×ðbfL)Ø ÈƒIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment8¡(5˜KIDAT™c``¨c8À ÄlPÌÄÐPÅ? ø”+cx `ÇðƒáéûÁVðcP?CØ.;†Œÿ9ä!˜YïöIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRMTrð pHYsb&2 tEXtComment8¡(5˜OIDAT™-˱ €0 DÑo)eFpÁ †A(ÌfŒâRRD G”“^wŸiƒ—Æu+Ð ¶Ý½éÏâRÓ×BRÙ¯ËÉ^Q£vý3ÇꪪìÄ_"IEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment8¡(5˜MIDAT™cøÀðƒáCÃ0¶`8 ÁÐð„9`ø@(/TkU[æƒÔ11ó Ì Ä P T Ô ² dçÆ•~ žÈ8ÓIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR(9ˆŒH pHYsb&2 tEXtComment9Ö/bIDAT™…Ρ €0„០¨ÃֱޕXÒÅè&¡òH¯aÄ—Sw9žIh•ƒÂJÙ#Y‘¤ÀØ©õäŸ>©ÂYàß ¾hÎÔE¬®ŸÒØ%,;/7ÿRg·¸Mܦ+p>až IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment9Ö/YIDAT™mα €0 DÑ‹ˆD“2 £Q$b1³‰GpéÂJ8)4H¯þ#'UˆUÜ^Ð)EþØÿ|¹¨[FSB†’ÓԲȫULö»FÂA@ùc{<+|1^#TbIEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment9Ö/\IDAT™UÎ1€ ÐØ\= GcÔx1ŒÁ0þáçcÓ¼±Ma^ ‹ §$Á£—n¸é$×Y& ð~܇SØ+ÈT†MZíâTZ–é ÍÿØ*/±Õ;k>T^IEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment9Ö/^IDAT™uΡ Ã0á³ šºFÆé†®²–³‰GøáVÚW|ôt(‰ ÓÖLÕ¡™&¶>ìöìÜÓe·- ¼¡ò7Ñ,ì³-C³j%s"zôð‹CñÒÍ’8l8²©IEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment9Ö/TIDAT™…α € á36ŒÀ–ŽF©a1Ü7 |Å ø'bmñµ—ÃW£![¢¦â‘KN¯X:¿²œ—Ü jA݀˰Oœv†‹%F•cÒÇÈö=;ü ‹rIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR'#é…ž pHYsb&2 tEXtComment9Ö/^IDAT™uα € …áŸÄĆÄ(„¡ÀBãbŒÂ”ðjl,¾ê]Þ;Ú,T#…@Æ‘VK,ûCน=;?w±@ò ´šö¼²’S¦ÛUõ/Ä u‘ *B;•b5<ÃIEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment9Ö/bIDAT™mΫ €@Ñ!€ „-…Â+ 4] [ÂÊ/<.‰8ÉÈÁ£`$¢ÒX­g;{æGÃ"õªóͤ¼VI@%ÖÛç½ÁKÀ󀧈O‘S¥ÒGmäÖ.ŽB:Ù*´-IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR%pè& pHYsb&2 tEXtComment9Ö/WIDAT™m̱ € Ñ#¿ ¤µcŒ(£1 #PR ø%‹—ëŽÆBÅSpCž,iÖ ÌgÎíeˆUaH¬Ê M胥WUTttn^W^»«~{û)rª[ IEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment9Ö/VIDAT™]̱ €0…á'^™2J†q‚‹²HÜàÒ]q_åçkØ–¡šÐ-â¤jÕÇ´8~äË»ej¤0ºhh|µ„QÎŒS}¬~>»4Fgƒü1IEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR'ÈÞ> pHYsb&2 tEXtComment9Ö/_IDAT™mα ƒ@DÑ „+…Ì­P!ˆÆ®JØpë–aÉÁ çkÈh½a…:› ›ÆÛný÷¯º‹ðÖ€Z ÜÄí‘ÔO!ãqLäº,4¿á?1è 8t…ë´©IEND®B`‚leptonica-1.70/prog/recog/digits/0000755000175000017500000000000012254515477015052 5ustar dandanleptonica-1.70/prog/recog/digits/digit_set05.pa0000444000175000017500000007575712251652136017526 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÇü‡0Ô0|øaÃðà ÃAþÇÆÍ`ÌÂÀ ÂÿˆÂÍ`ÌÂÐÂ@}Á˜‡á!ƒÌÿP!ÃðÃÀhk ÃÆ?Ù¬0ü !IEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøüþ`¨aøQcÃð០Ã< ÿó0üÏÆ`ÌÇÌxp3ÃÔÂÌxÄ sÍÿ´ç‡… ÐÖ†ÿŒ€n³’6÷´3IEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªJIDAT™cøßþ‡Ô0|¨°axðG†áá?†ƒ üŸ‡¡ù? fþÏ@ÃÔ6BñÁ<`üˆÍýðdžᇅ ØÞÿŒeˆ3~}GƶIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment0¯ó½ª8IDAT™cøÁðƒáƒ„Ã@üG‚áà0nâæ Ì`F¨9Áæ1ÐŽ‡,~øªn)¢­&ð/IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªQIDAT™cøÿÿÃæ? j~TÔ0|øcÃðàŸ ÃÃ< ¡¸ñ? C3300›Áªç ܬ‡@³ü‘aøðÆá‡A ÐfýÜä6ŽŸìIIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªGIDAT™cøÃðƒáGEÇ ÿñ? †Ãÿ8À¸ù?3€13‘¸ þÇÀphƒÌ}ðG‚áCà † ?šå/7ˆ5+wIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøÿüÃÆ? ?j>ü±axÄÿÉ0üÇÃpˆ›ÿƒ0 3ÿg ÃÔ7þc›ÂøÐìÿl~TÔ0mføÇøñ4ÊÔL¼IEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøÏü‡TÔ0|øcÃðà ÃÃ< Aø?Có8fþÏ@4nâF žƒ0 4dî‡2`{~Ô0üc¨aøßø‡áÿÿ?z67Ìõ£IEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÏü‡áã†5 ~Ø0<üÄÿdÿãah†cæÿè˜F¨éáƒ@3@dîƒ?2`{@ömfÚw2G‚7),IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªHIDAT™cøßü‡$Ø0|øaÃðà Ã2 ÿñ€qã?†æÿ0ÌÀÀL4fah„b˜Y 2ÿC ð½ÿÿf´2‚ÆÂ\IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøßø‡Ô0|¨°aøðG†áÁ?†ƒ üŸ…¡Š›ÿ3€13 Sׯ½ s@æ=c†52 ?,l€¶Ö0ücøŽ2ÿz£×;IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªSIDAT™cøÏü‡Ô0|øaÃðð ÃÁ?2 ÿÉ04ÿãcæ, ì üJÿc@` Hžù?ÙÍ`ŒÐ2d.È|= û@öþcþ?2¹©§DIEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÇü‡áÔ0|øaÃðà ÃC >øŒÿ±04C1ó?ìø?&nüÏÇ0³þ“aø4ûC… É ­€öŽ2(ümïûIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªOIDAT™cøßþ‡áㆠ5 *lüa†ƒÿxÀ¸ˆ›ÿ±00ƒðfÀÿ1€Õ7Cq#Ô,~4dLJ6`;ÿíþø£X3þ9ÿæ¿IEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøßÿ‡áó† >0Ô0<øaÃðà ÃA nþÇÇÌÿXP0û? gAS‹0ã Í}Ä {>Ô€íýÇüŽà2aN >IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR !*þœ pHYsb&2 tEXtComment1Øô<$IDAT™cxPÁÐ`ÁÀ`"X0| šs€ƒ¡„pÅÝ"YƒX8þIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR !ÅEð=>¸âxôÉyj–9ûB•y@úÌŸIŽšX‡ÐßË3a…hN\R%9c•Íé¡u1iÑž;b¹æ…7Ðô9¡IEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment2Aý܆bIDAT™EÌ» €@„á ½lÁlÉSK:±í`à äÖñ²|ìà ã¾#vlÖ0§@yòË/”éa”˜ÀÕsõ{'†¯2IeäÚ8[# Zwí"QS7¾ï¾\üS9 »/ 9IEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aý܆eIDAT™MÌ¡ƒ@Dá—Ap.ö’p´…ÈLÈDÐÖÑÉ•€\qß ñ¹ÝGŒBq°°_e¶–é[¢?ÿ¸t†­¯D±ªDxþ\êBÛÄùmp{vûm!ª&ˬ¤›ü17¥uÇÒIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aý܆dIDAT™MÍ!€0DÑŸ ¨Ãâ¸Fת ‚àZp“rƒÊ¤Ë`⩙ݡvFÁÈ$ÎÙ¬g¿í«òid•e‚c å®®[Äuç9á§á«´Æû÷d4lÖ†kCz ,?W ú8œŠ#ÁoIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aý܆iIDAT™=Í!€0DÑ!ê°u\£ŽkU HH,ÇiÓ‹À Š[Ñt™†ñÌdóª‚Ò 2<âå°‰Å^,Žb0ÒP?=­Íb¸gÞ¨4š= 4R¢&AÙ&á‡n pÄÎÏ"vô|rÌ?¸˜÷IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aý܆eIDAT™MÍ!ƒ@DáG¬«]GèÑHK‚àZ^d@݈Íþª*>÷2Cëʼn(÷‰C™·m51´ ?½u¶ðTæ¥DüñÕùfJÌ÷D-‰Í½8ù'ÖBTo[D»ÚMh´‡÷ClVg²yëçÌÑ,ò_ù8|GMÌIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aý܆lIDAT™-Í1‚@„áßj·£¥óv\‹‚DŒ…W²$ñ"pƒµ1Slö9Š/Ó¼™GëDA,Œ|Ê—zRÍt§tºT`‚yÊ,öõ]ì܉2«ˆ‡=-‰vuº{?ÄfëoÿÓ3“éfñþƒž:¬Hoý?IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment2Aý܆eIDAT™-Í1 €0 пµ›kâ x¯ÓA´ÐÁkU¼HÐ1Ciü­!ü@7A¯ ”qˆÕâê`(þÂA‹E¢²[(w‡2C³'ÞÉÚ$¨+Ó»SP´ÿáýÀ,öðÍ/ƒí8šy<ÍIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aý܆eIDAT™=Í-ƒ@„á7©`]-®×Àq­D¯T¹Üdî›$­xÜü !8*™ý˜ØbäÝÃ¥ÿÀÃÖ%ÝŠ‘³rGõ’Q ´™7û3h¯ f“?¬Zad½¥?uïèóÂJ;HlaS5IEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aý܆eIDAT™]Í! €@„á n³Ú¼†Ík ^KoaÜ#,X^Ÿ£Á Ã׆¼0ž$Z¶\3[ÍrÊ‹O!È4H„5²:®î+·xêñÍðYJ㪌³Ñr'£‘]²˜~ŽgË÷kÀ:ŒW¸CIEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment2Aý܆YIDAT™EÌ¡ €0ÑC!Û X¡£!q X«Ý¤lðe¡| ˆç.GDE”š8”[$\/>£ ÆÙª›®W¢×ÙD/¶[÷$.k«P§Ë$6¢G¿-ǰ4O ØÍIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment36úì_IDAT™uÌ¡ €0EÑKØŽòGb„ŽA Y Â"áÉ6i(¿‰8î¾GÛE„ˆ$w%ãV`ûdc‰]äœ#J¢]Î7÷#[@9P2´úïp“wÝ(c]üÓÒ$JÓ ¸¶=‰¤òIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment36úìaIDAT™]ͱ €0 À(R’ X!£e„H¬Ä"áé,>ÐQœ,½õ6ÚDÐÄQ¶šà9ÄwbP–e/D_E[ I­ˆÊ€Ó.zû™v‹Ì¦›öÝu™Èã¯çÔ±8QãØIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment36úì[IDAT™u̱ €0 DÑ‹(\â‘Á#„е,±HFp¤ˆpY¯²î£¥À8wÃYVñš(›Á‹¡{ ïÄÍM†XQõ†Š™y®!±•Ù(è9F_ &\IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìhIDAT™Mͱ Â@ƒá?J“ŽöF¹q!å•H”¬tQy#¤´Ä‰‡ Å×X²M>ŘÄA#ze?N…]§ÊÝz³µkã"7s'ÝTt-H  ùùþ÷Ë6ÂìíÉ?·htïÄEà=pj@ƒIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úì[IDAT™eͱ €0CQ£”¬ÑnFˆDAɬÊ"áèR ‚# B§WÞ7¼#ÚåÍ0Ó°xDÿšÜø ‰ºK .)úq|Œ8 P?çß*CQ³Q3¨í¦À5ã6„çÈL¿IEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìcIDAT™]ͱ €0…á_Rè%+¥L,\+à®7HyE0Þ¡•ÞÝ 6ÄÕ‡6µ;«5&ZFQYi§kGHòH_·áçÍO5w3v·%Ê$Tû¿ÊÙ‘>IõÄIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment36úìZIDAT™uͱ À …á_,,ãÁ‘2 d1!‹8Â¥»€`Î2Ex|åãgDe­7áê…S¿ê"…vwWfsÕùg Øž1Í<–™ƒ_ÛÈ$[ Q…ོ›ôë9ü€eÛpIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìaIDAT™]Í1@@„á_¶Ó:ÊKùJâbÄA¬lù ¬¡‘ÈËWMferžË{Ь92ùg”Á"so¤l”ä”EÔ»Ôq"n~N)׃ŸÀ¦¬yuÔÚ¬µ5¨=WúÝú ÿ@=¢¤„æIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úì]IDAT™m̹ €0ѱœÒ[pI”à ¢-K4â–l„ùÈ^²ÇàƒÑ‚`l­°Ú-_AÐlžtS¾»K¾ÓQ,+vºUi(•H‰ROëÚ¿ÍoºÑ{« ‹·’ÿΓwL_UÖA~×XŒËIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úì]IDAT™uÍÁ € @ÑO8peW`´Ž qW‘¸HGè"–“'Ó¼[ÛOÆE¨*\ZØí³N2 ªÆ¨n3ž`t¿iL2Ö2w‡ñãp©g’ïEÿ¼…wÏÙ_ìc:rú™ÍIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úì]IDAT™mÍ!€0DÑOT"{” Y‹âZ%\¤G7bòHē߄ BT:…ý,ÊíµúR¹zÅ›ðUÜÑX4š3ª Y üþ“Øì•Ã?klµøî“{5<¯šÇó½IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úìcIDAT™u̱ ƒ@DÑ.ô•²¸—°%€h D#[Â8»àd¼W=M4CŸÅHàœa\i—QTÙ²—ÁããDˆûL«øå¦çFòÊ·ÁÝŸ½z¥´Á˜ós g™ÄQD{ë½9:¹>¸øIEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìdIDAT™]̱ €0„á_,´³Í(ÇR¦TÀ•".’R(Æ—ÆB_q÷xzÑ®9²ç,ž­¸Ïb9…&’çHM¢®¦·m„CÁÜ#—©OÃÏÈnÝÐÈÑËÓåÈbëd4éû :¼$³—5IEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úì_IDAT™]ÍÁ €0DÑ/<šlaK²„”±±ˆ…˜Üc„`Üœ2¼Ó0 õVÊ ´¤è9UØ‚‰^H«§&¥fS^Û„,&;žâ¨…îí.ëf3åFÕ3D%´ïE?@o=ñè;ƒIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment4¨žy³TIDAT™cøÿ£†áÿ Ò€øÝÄ 6 ÿ@XÁ†áO‚ Ć@5ø!âf î`ÃÀÄÈàÿ Y6Ps¡øƒäX@£ò5Þ0ò€IEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³QIDAT™cøÿ§†áÿþÄ€ø7@1ƒ Ã? þÄ? jÀøÃ‡†‡@|ˆ›¸ˆùúX`àÿ y5X0È| Ù@ù£8ñâR®IEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³YIDAT™5̱ € Fá?ÖNÀ NÀ\V†ÎµL,\7¸’‚p¾(’|—»'÷MÞ“¼¡ÂP†Jêó§-Iu»†'7v‹ú_†ó{6Ú5ŽÊD?ÐÅ­:Œâ&IEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment4¨žy³GIDAT™cøÿãÃÿ@üˆq3`øÅ0üÊâ‡@üˆq?óƒ±2øÀbÞL|(ÏÆºù:õaVÖIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment4¨žy³NIDAT™cøÿÏŽáÿ$üˆ@q3Ø1ü°cø#Äv ?€øPÝC ~üÁŽá0·ƒð>h``bøÃŽå€f³Ífaw’7·ÞõÛIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³WIDAT™MÌ!€0DÑ ‰FqTÏ…l‚àZM¸„ €«hvù … ž›ùr7¹yAÆYmHˆPõƒÊ”q±Ýq`ÅÂgÞIbõµ^ÿ~êh··3ž>ÞZÿ~~IEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³SIDAT™cøÿφáÿ þÄ€øâ f€à6 €øG àº@üˆq;7?ah``€ãÿd æý@à ñ<@óY€˜“‹9µ¯œIEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³QIDAT™cøÿ¯†áÿ†ÿ?€ø?€â@ÜÄ 6 ÿ@ØÀ†áÿ(°aøT÷ˆña nbv f``a€Ÿ <ó°aù ,0 š7¢×ñ$IEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³NIDAT™cøÿ¿†áÿþÄ€øâ f°aøÄ l~1PÍG ~㡏ˆ™d` ˆÁf|À†e€æò1 ~‹8¼çFKžIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³VIDAT™cøÿ¿†áÿþÄ€øâ fb †6 *l~ü€à@üˆŸñq ¾æ†0>  1þ”{À4ˆÔEÈ=Æ*”s:IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿãÃÿüˆ@q3@ð?… †? ?€òø!?âÃ@ÜÄü@ÌÞ`Á€ þ°€˜‡â @s9@4—M9åÏ/Y+IEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment4¨žy³OIDAT™cøÿÇŽáÿ þÅ€ø71ÿâ? v ? €¨æ?âÃPÜþAŽ•˜Ùÿbp3áX‚åÀæË5’Ó;œIEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³NIDAT™cøÿ¯†áÿ†ÿ?€ø?€â@ÜÅ6 ÿ,lþØ0üªùÄø1âv(FÿÈ@ÌÆÁæóÍfaøÿÿб<8#ÈfIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿïÃÿ?6 ÿñ ~Ä ¸ˆ øÿ1°aøQÄ@uø!âvêcêA`³>`Á ñTñ8?BþƒKIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³OIDAT™cøÿ¿Žáÿ?;†ÿ? ø?â@ÜÄ v ÿ øØ1üâ@µjñq nâF68ÀÀ1 ~ 4› †358<£kÏvIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ß™I%ZIDAT™]Í¡ À EÑKtƨd´J6èJŒBƒÀR÷Eý4Uˆ£îKwä]qü„l”®!ÔÅ×Ñ}ô$ñÙ(ϵÃXi›NåtïšÇ¶€IQ’ž!/¡F@²-­‰IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment5ß™I%YIDAT™]Í!€0ÀÄæ°{ O›Äñ­ßX21K‚©X6:$ˆSmZ\Õ#Rð â †HÈ?=ê8l”b±Ë!¹íe?ÊÖâ`:ÎO%h§ÿL¼'š?}`ÅAŠIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ß™I%^IDAT™mͱ € Ð#8£0…‰nàJPØ’Øü‚€‡¥±xÕ]îpº:$LžI‘ä!(yæìöcµˆmÁù.ýóƒL³0b¡«ƒJ;·ú&Ÿ?P`d÷QIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ß™I%YIDAT™uÌ1 €0DÑ/6élSzŒ-¥`áµAÁÅáBá¨#yȼ<#r+¬±Šô½3ßSG,î„ô¨?6ßÝZV·ØÀî_Öˆ2ë(®?åx/IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment5ß™I%XIDAT™]Í!€0DÑ!àj9J†„›q”%µM0#HË,©B<±›Ÿ î¶ÁªÀ6IHäN”Ÿ¯ñÖ.®È[P¤7‡aÜþWe¦KÚ;vâÔV|ÞAUßy»IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ß™I%YIDAT™]̱ € EÑK,h…‰ÜÀ•H,\ƒ„‚ö—?â'4ÆâTïæQ4R˜’Š3^¨Ch_MÖ>»Ýz Ô—ÂmÚãO—S¾O‘M".'ûÊ^^£:ÇþþIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ß™I%TIDAT™}Í¡ À á#H…Ñ:£‘ Xã%µ¿¬ ¡[Qñ¹K+'Æ&Zp‡°$®%ÆGÛ·Í ]™þdƄۭif’·ñ): UTYÔ |:Ìõ`”7IEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment5ß™I%ZIDAT™cøð§€á `xÀÄÌ@lÿáñÿ Ï‘qóˆ†þ``xüŠÿ10|âÿXð} <ÿö lÀÀü¡€¡hΠ=ä?Þ>=õ«йIEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment5ß™I%]IDAT™MÍ!€0 …áG&†›ã=Ú$GApdÅÂxK ™øLû§Å^Š&‘Ar G5œ½¶c“ÙfX,b-#¶ÏõµÇÙ/°õ&ð·ÀiÂÜîðMö|i=RF2èŽIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸXIDAT™mÍ¡€0DÑÏ™RJe!"Ò&„¡$âæÂ ñÜŸ]Ú’P"Bàœxv ”¶!ÂJk™›*`/£4—S×rüIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ_IDAT™Mͱ €0 Ñ H)3£0Y؃YˆX6HIlL Dñ*[ÿÐMPF„+ê8ÄèÊ©BùY^9‘í$âqÚÑhœ™tþ»õ¶éÛ~Ök]ëïòªB93rѽ¾IEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸZIDAT™uͱ €0 DÑ‘2#d£pA”Å@,¤¤°b ‚’âu_wØ¢#Jæœ2M{w–YMÅÕÏ,à=$ÐDè‘`0ü¨¯âV‹ÞßûMüÏw:‚mz¡"4ÏÖ †ÚIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸ]IDAT™Uͱ € „á3Ø8 8ÀÌ‚Æ8™aØ€Òâ…ç6_÷_†ˆÁ½T (]$Óáü¸îP€í¦¶‡£Ùþœ<·¯Äæb_(ó£nå·­úyƒ2v{©®IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸWIDAT™u̱€ DÑÏ@H –Ba2´a3tb^7à¼ìï²gRp6¬fÌ3×ÌŒuŠÓ¤n'²ƒzÈ 6ÌDX‰¸øÕ¥©ó¥í¬L_Ž?ˆ:1Š [šIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment71—( QIDAT™]È¡ €@ П À­ë7’„˜‰ ˜ã6@V\ú)¡‚ žy8iX iz‰`£ °B½‚>ƒ=ÙÃÀ+µ´‡#­a£ÁzùÐ8µ…CR¤ì¨ÝIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment71—( MIDAT™c8ÿÿCóû p  ÌÿøXþƒýŸ†ÿ üŠ?|€à‡P|Š›¡˜‚ÿÁ0ÿ†?Hø‡<¶Ê׈uC!ãÔ’¯IEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment71—( IIDAT™chÿÿ¡AˆÀäÿ0ØÃðŸ†ÿ? øÃ~Åø07C13³`øÅøøË#a{ ®ÿkÓ>¸fÊTIEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( ZIDAT™UÉ¡ €0П í] º@‚`.‚@2®âÒãJ⩇ÝÍ4?€‡Ë!w·¨L{X*&tÒQ-´ÒT5Ô òË ô#á¡‘?ÈyŒFØñH[#IEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( SIDAT™]ñ €0Ð)“ ²‚¸R6Pp1ÅÂ9ÜàìR„;¿ä°ðÁƒ™àôð]|°„¨ YGLlZ`+Ë[`7_~çƒW?pèÕ·ø›{åkH.ãôIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment71—( ?IDAT™cèÿÿ€¡Ža€ùƒ<ÛÿIãúþÃðG(~ć‘p;³?`øÇÁðy,ØþJ9>¾#f¥IEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( UIDAT™cøÿÿÃq >ÄÀ¸ ·ÿc`èÿ/À ÿO€aþ?†ÿ øGøÁ€ø!„âÃ@Ü ÅÌ@Ìþáÿa~(–‡àõcÕI Á IEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ì pHYsb&2 tEXtComment71—( PIDAT™c8ÿÿC3700€12àÿÇÀ ÿOÁ„ÿ$0üá@ü„0üÿÄ¡ø07Cq;³Cð?æÀð ÿGà?ö@uõ½AžW"à IEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment71—( PIDAT™c8þÿCƒCfþ ÀÀÿO€AþŸƒý†ÿ þÿ€á ÿ?ñ ~Ä‘p#71ó† ÌŽÀøÑ°<ÿÆ?õ>3”PIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment71—( UIDAT™c8ÿÿÃq >À Ä P  üÿäÿ@ð†ÿ øÇ†ÿ€ø#?„âƒPÜ ÅÌ@Ìþá ó`øƒ„€°< ÂöiBkÁ`8/IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment71—( QIDAT™c8ÿÿÃq >ÀÀÀЀ†øÿ 0Èÿ3cû? ÿÿ@ð þð‚ñC >渊™!ø;ÿa~$,Áÿì?[ÃB/<£¤òIEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( NIDAT™cøÿÿÃ{ > ÄชÛÿ 0ôCñü ÿAøOÿá ÿ?@ñC(>ÅÍH˜ˆÙ?0üƒaþ ±ÀÀÀЀ†Û 0ðÿ`bû ÿÿ@ðþÀðÿ?„âÃ@ÜŒ„Ù!øóCð(þÂòüÇþc½DÓáîrIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment71—( SIDAT™Má €0П ¨«­ë8ÖB’t1‚5`ä‰Ë•_Ú/yس \à0ìÞI¼DžYY¦V/>øäµÝ8qÇ}m¿êk)ãWG¹ýEORd¨IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜YIDAT™mͱ € „áßJF`”W8¥Äµ0.”=4v_ñ’ww´©R¨äbœUšgﯭ;ñDY‡ÅH™ ÌgÜž#é·Hƒ¹ËõÇ=Q)Ø“×þ ö‰/ ßδIEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜_IDAT™UÍ!€0DÑj¶GéÑ*!®Apö•+eŠ A¼¬ØÙYš3l0JM9¯Èz‡ŸEf™´Û¢Èõ•$R¦À‘•7»ä×`l}úÏ*½oWWÖ­~?ô02¥4Z‹ˆIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜bIDAT™-Í1€ …áß8ÀæÊQ8ƒƒÆka¼G`ì@Ô¾¤i^_é³ÐjK\É=ï€ûÙ|¨]÷Û)!Q,Ý¥¡9‹æª'‹Çuu«å?|]Ú£¿¬C&y0ÿ14ýÜàIEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment8¡(5˜bIDAT™E̱ €0Fá 6Al\ÀM‚3¸HÜ eŠó ‹Žƒÿ!]&³—•Fžb¸+ùyuUVM#•¨›ÔÔÛèO…Ÿz\'04{Ó)''‡j=ûujCæüMÔ4ÒÂSÒIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8¡(5˜fIDAT™EÌ1€ Ðo`cå( Æc8j¸†Ákà ;𣉦yiÚôÍd Ö%±Xœäëo§VîÃä° Qf&?Ýq¶8o³†/ªj˜ ˜Öé¢þ/fæ÷Gåy&3ÛxêUIEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8¡(5˜^IDAT™-ͱ €0 DÑ£"#xWÌE”"k„°AÊQÌa¥xõu†= ci¨ØQšâí‚{—§DÅ!87‚¢°¯NI\‰WR§Ad‹X§äþ;;c/êüÿÇ_5µÁr”õIEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment8¡(5˜^IDAT™cøÃø~(`8üÀ¡ý÷Cinâ†? 6  €øÃ°® 6²`hþRÏÀÀÂÿ€ø?*fÿ”ÿ2¨Ç¡lÂæ:0Ån•2ÚIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment8¡(5˜[IDAT™E̱ € Fá—PPÊ(7#`(XKã"¸%Aï4Æ\¾\õ?†kØ-rt!«2ÂÃÏ—Së’ ÂF¤ê¦>KÑ/ì)+”~¨ ËõómeëuÛE+ܤ~.-ãIEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜ZIDAT™cøÃðƒáCà †‡$ÿƒàæÿpÜÄê$ØI0<±`xTÿŽA| ø†ƒ€êÿ004ÿc``ÿ‰›Á¨hσs€ö×x0~Ÿè®IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜\IDAT™Mͱ À ÀOÀ(.2%EÖe³e y¨(N/Y~=Úñ¡‚¼¢4‡·O‚¸¹)ðž.…Á³3)›Êt°$È•ÿ x:pŽ]X‡,™;æÝêsÿ#0z÷RIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜[IDAT™U̱ € EÑ›PÈŒBå\–ðn@ù þ¯•ÅI^ó.à ÂAo‘{ª™žlÖçTiÊ®ˆ4Õõ#/ÛV<µC5a[&ý8e½K[M‚þ"y7ù2Z³[-øIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8¡(5˜]IDAT™e̱ €0 ÀG)`„Œ’‚Á(‰(²–Qa„”.¢˜w Š+Þz?¬(ú¢h8𴄪Ô#ÊpÛtQf>y—=A¼K퓘#naW©ë û æ{Ù·æ¯b}&ì1ÌOO}IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜\IDAT™5Í» €0 Г(ȃңQPQ°‹˜ (] „K²^a?(ƒ£–™ârEzgØ»Ö..‚C†¹¹%aŒó0f|Ê/vÌ©ÞOÎIëï:0Oô–i7IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment8¡(5˜aIDAT™-̱ € …á?‘’,H\Äш1ÑÁ$.PZ\<9¤øò®xïÐI"*òúÆ‘ÔqëŸæ2›'û@¶.kg»ßnG©­+^8ÔìLÃ1$=û¿,m3Û>¢‹|QC6‡–MyIEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜[IDAT™=̱ € DÑo%#8 cYRX`,t, ‹0%Q ¯¹äu(d )[BµÄkb¿Ìo“U¼ös, §Æ©j¬L„Ó³šŠ:ïÒÿBûšûO¡<`ü1Í­ŽdIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/YIDAT™]ͱ € @ÑO $q×°`(K âbº n@Iq9„N-^ýP+T„²ìä¹$Ôst¶¹>ŽA! œ+d ÐÉÑÚ›§iàî² ‘¼õo¼FYf—55·žG´IEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/[IDAT™uͱ € EÑ‹šØ0€£0Œ#8‰²n‚XR_ ;‹Ó½—‹˜J!p/ž\§Ø.¶‰±ã—ˆê¨6È@@vhúmò²ŸKI©xÒt¯í¹>%1³ÍN¿ØIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/]IDAT™Mͱ €0ÐÏ –Á9¬œËBÄD°u%³IFؤ÷=A$Å«Ø)+Ê8!/’:D¾x³34¶ŸÿD .¤*ÈÃ3€|õ ‡Û$µ£šÙ>›‹ý¤>ߥ@ð$Íb®IEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/WIDAT™eͱ € EÑk,`GaÇ %îe .¿ü¿$ÆÂâT7yA©1RZ µ£{ÖÎäÆßÛ¦I!ïP1ã4ýá?¶{™¢,‘\ísQÄé &0ƒÑüÓåIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/VIDAT™mÍ¡ €0á#­$…Áº£”°²âÏ+¯5Ägï° â™Wò¾mät©Æ.tüJÁ!8 dðX€Z›øñæí.ùCþÚ\ûB“^Q[4ïÂôIEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment9Ö/dIDAT™UÍ» €PDÑ«‚f¯ë0².?`]ÚÉ+A3Ùuü$²œh†|2î;ªšØ–D ,<L>“ùø“x¯ìµ:,& DR6±"ÅÕ{åŸÀ®ßÑ´qJ£=:¶Ä8 Sn>:lXIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/]IDAT™=ͱ €0…áß)ãÎaå\"ˆ‹é&7BÀÆ"Üy(Iñu÷cRPò4#ëˆhâ²Än‘ãèš½R8 ÈxØà¬Š?ÿ½¨7Š·–Í÷Êã}ôÒï6®ù£m­IEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/TIDAT™mͱ € …á?BÉŽÂh4ÄÅpÜ€ÒÄ˧‘Îâëþ¼‡ œdFYéšhn·DµÈf¼Â:)4 ' ˜Mñ“¸|÷ÐçÕì}ñÞ߃ÜÊÁ3¯Ð´9ãIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/UIDAT™eͱ €0EÑ«l!£8”؈‹ÅM.2ÅçǧUÀâtw±Á(ìäm%YäòÈ鋦ÖãÏá0©€,u 4ï-Ÿûý–TÕ)‚i¯öl Å1¼\EÑêIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/YIDAT™eͱ €0@Ѱ âŽâPF\,â"!eŠãbÔÂâµÿc¢”<’NìÍjž­sHuô•±Ïª3$ wPGµ‡w&–f Äë+zHt1Ïe ›ƒIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment9Ö/VIDAT™}Í!€0ƒáŸ ˜ÃrŽ…œ„p±q“—pÉŠeã‹øT› "1­\eá¬]`ìÿ*vAÌå šg­~Âëöí¾Ÿü'mÑûÂü[³â20ýTÀƒ·IEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment9Ö/VIDAT™]Í!€0ÑI*Z…Æq ކ„p1Áa+WlZ~Ó`ÏÎ`7 ‡Íœ>²{"”.ˆõ§t¡qØd58€,>@-ŸÔ©ûÈåz˜^YÚ7ê>Ù «•1…P¶ ÏIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment9Ö/XIDAT™uÍ+À „á¿ÁpŽÒc!Q$ £7ÁÕ"Wl Û—¬øÔLfÐEè$Z\©ØÕS†Ç óÇ›…M Ít3³Ï´ÍãÞT±Ÿ˜¬/´ëÛÉ ›0-“^IEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment9Ö/]IDAT™Uͱ € „á_M(9¬˜ËÂ¥°u%Ù„(M$<_ˆ_®¹Ü!2ŽKZG¢BåÙ¶ªû² W†8C¢×œJšC‹îK\Ôä´¯ßCyfh<¸HóþIEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/\IDAT™mͽ € †á7ÁĆHXÄ¡,)hˆ‹á&¸%Ååð(´²xºïuB's§&SR-ŽÄ¾>ÂešIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR¥Í pHYsb&2 tEXtComment0¯ó½ªXIDAT™m± €0ÄŒR¤dA"“¡ Öºl’()Ï¥¤qug󰈛I\Dq2ˆ B«#[Nl¦Än‚`µ#þàè;ù#»À\¥ùó…fŽ­1¶š'­˜^OX4dÿdVIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR¢–Î pHYsb&2 tEXtComment0¯ó½ªHIDAT™uͱ€0 ÁBZ Jâ3•¢ù-yH 6ü{¤âf°ó²-ˆ7ÃXzÔyi‘œ8mm«S½Áì"¿&<¸3ªÞ°A|IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRPÓð pHYsb&2 tEXtComment0¯ó½ªQIDAT™]̱ €0Áµ>øÉ%¸$JË™NL„ˆã"‚‰î´(‰›…‹ÂIfLN—ÑÔ0U\{äÿXh:¨ñÛ”è³K´J4WôòX).DqÞIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR¼_)} pHYsb&2 tEXtComment0¯ó½ªUIDAT™uα€0 @q”ŒÀ&¬åXÌlâ(S!ls”4_Y’!‰ƒ1°–d&¼MÄ)&Ftp¼øßIÏ3k{´xöUimԚ؂ú xHå?J«3š¯IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR쒸ΠpHYsb&2 tEXtComment0¯ó½ªPIDAT™}ͱ€ Ñu0Ó,ÅÆ >c`[W %Xà ¦&/ÜÅqQØÄÍ"2QØu§§Ž‰Ë3Äôaƒä-`GO­a”ßGaµ}'81ýƒnvb`#:V¢¥h¨ÊÄ©â4"8Qý?|Å<É“J-F²TƒE/Ïÿ&Š/rÖ6&$ø:°IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRJm¢Æ pHYsb&2 tEXtComment0¯ó½ªUIDAT™mÍ»€0 Pq)2£àÍàŽ‚µÄ&’"‡QbJšWéƒàL<¨ÄB\˜: ¼‰3h {8’Ò©?_Ä’ÑelšZ5ê9?ŽDƒ~‹Pð¤«;ô|¢IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR¡ZÅ pHYsb&2 tEXtComment0¯ó½ªRIDAT™eα À @G „Q1ÊbŒÂ”T1oÒ¤¹êm?$j‰¸ˆŽÓD»AÔ\5€¦¨ÿx>Ê> Vbg£Ê}«y˜×Cb⃠<sc˜IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDRÈ U pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÏðŸáƒ<Ã~† ì j˜þgdhþˆñv0þÇüPºˆAò µÿ72<¨gfø`Ã6ëƒ=ÐäÿôÝ+ b ŒTIEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRŒ/$ pHYsb&2 tEXtComment0¯ó½ª\IDAT™Mͽ € †á×8nÀ ”FVrQáÊ3!9cAóTßö˜`wpX…ï„ä¶ÑŠ Ô1…j}¦M蟓<ˆ^ÛCM8Çhañ£êG¦Ù1“¤8<4ð…KIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR…Ä¡^ pHYsb&2 tEXtComment0¯ó½ªQIDAT™M± €0ÄRd Ab´±X"ùRR Ž'¢ ps–|HBÛÊÍÌI¢O˪BSå±:éGüx÷â¾9U [nFëò¦ÈøÇ1¦1Àä:–¢IEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRJm¢Æ pHYsb&2 tEXtComment0¯ó½ªTIDAT™uޱ €0 /JAÉHd3ÂfÏ&!%Âäɺʾ3±‡¸XÄÁ,:“hd# 1¦F-l!£r4úÞ•BòE ÁŠUé3?Óµp×Ü·7ßJ!RIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRy-³ì pHYsb&2 tEXtComment1Øô<3IDAT™cøÿ‡á C`axÀÃð@Œl>€” A<T|Y/ÆÿQïÓ5žÃ×IEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment1Øô<-IDAT™cøÿáC11<`bøÀF| ô/*ª?ÀFL ÿÿÊj_`}mjIEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR -òb pHYsb&2 tEXtComment1Øô<IDAT™ch`@€† ¡$À€ª¡ù±Ã-òIEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ÏÉé pHYsb&2 tEXtComment1Øô<0IDAT™cøð€A(0IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment1Øô<+IDAT™cxü¡‰¡„00<àcø G,zÀÆp€ ¬‰áÃÿÖlu=Ö(IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR ¼þù] pHYsb&2 tEXtComment1Øô<IDAT™cxÜÀp°¡Œ€ÙtÁ¥€*aë;!¿jIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR •:¾ pHYsb&2 tEXtComment1Øô<IDAT™c`@ Àè=@Bq°²¸F@uúAIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR -òb pHYsb&2 tEXtComment1Øô<&IDAT™c8`ÀÐ ÀÀ "È¢h¨Cˆ€ŠaàˆsóšIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR •:¾ pHYsb&2 tEXtComment1Øô<IDAT™c8 À @îƒè5(€ÔCAʆÁb'(IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR Â×™\ pHYsb&2 tEXtComment1Øô<(IDAT™cøhÁp€†$X€Ð‡ ²@GPƒü``øÇনR^§ûIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR -òb pHYsb&2 tEXtComment1Øô<#IDAT™c``€"† ô7‚Ë0`h`@€ ÿ /Æ0¢;~IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ëWQ€ pHYsb&2 tEXtComment1Øô<!IDAT™c8x€ÀèÀ(zF`$¦xL#H¯Â|"¬L̹IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment2Aý܆LIDAT™%˱ €@DÑ/–a)^i†¶4v² ë®Ëð`&Ü…ŸâE ÑJqŒâ¿†[ŠÏzX⻊g6‹Ìž¦r»>` +q”nŠRIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment2Aý܆KIDAT™%˱ €0CÑ(RŒ­†€•D#¨0È.×êQ<–] R"oë¿Íñž¢î1~31-úVt0k(,ªIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment2Aý܆@IDAT™cøÁÏð€™á#C°70ð`?Àðˆþ72ügdøÇÌð‡Ÿá‡=Çz†ÿŠAˆ‡Î%øØ‘IEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment2Aý܆JIDAT™5̱ €0 DÑoQPÂY%£‘Ín”Œ@™%Qõ\œ|¦í¢†øæ"„—cŽ%)3&1Šm¢ûàI¢Y=q›ÙýÉ¿îÐ Âðþ¯¨ÎðIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR’æ1— pHYsb&2 tEXtComment2Aý܆NIDAT™=ÌÁ €@ DÑ` –â–¶àa¶;±{ãEÂ#CŸ‚cÁN&UX<šVå¯ä¦\cpÚÑg;ÜÏT{^ß_Æ lµ+‚ÒJÈÎIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment2Aý܆KIDAT™M̱€ CÑoEÉŒJ¬\ ÎEœÀ£¤àÀx6&÷Ê„™D âÚD±·X(-Y¶UĪvÚ!fÃÛž½]¢Ø¿|?wв> ÓþÒÙÁIEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment2Aý܆JIDAT™EË¡ €0á#ˆŽÁ8V{I’•ÚM:BeáïÄçîˆÏ*nD·«²vY|šˆjÙ’ßMŒÃïþ¿z•ÅMhÈ&_ òIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aý܆NIDAT™-Ë1 €0DÑ/–Á›Ê KàUâMrƒ¤L!®ƒ¸ð¦øôQ4D± $¿½XƒÃN ïÈ".ÛlÏ,îÅíŠ[¾Vü7ˆzÄÞP…øIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aý܆FIDAT™cøÃÞÀð±áCà ÉÀÐ d´?``èâù@ü†40üobf êû#ßÀðˆØ0ÀõÂ@C¸¯ÀË7?[IEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment2Aý܆GIDAT™-ÌÁ €0 ÁEyä™’9*¡•”’( Â9p,%?ÖÌ*žC DÿáS}4»ħ‹¸¶"Þ&æé>ÜG¶Yoþ«¢LN¤]9ÃHIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment2Aý܆DIDAT™cøoÏðá3ÃFFæþ òê0ü¢ƒ`ÔÌð¿á??ßz†ÿþg8ü™¡¬Š˜ŸE/‡@>RIEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aý܆>IDAT™]˱ @< ËŒà$îÆh)¥•‘;S ÷ :áM@õ¥‹90K:‘íRû3ˆmDLýëùi¼q„Þ‚{>IEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRû°( pHYsb&2 tEXtComment2Aý܆QIDAT™UË¡ €@Ñ!$%p•PË•…¤Z¹äÙÂgŠLž¢g#ä²%ŠÕ«`Sb·xe¢Ø"¢w'®Áïèoú>~23zƽ#UVEŸoIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment2Aý܆?IDAT™-ʱ À ÅPSQ2£&Ò¬b‘!é!°^iFâ‹x ‚½”JöMGCJÌÌxø…kÏ·qºDë~dWIEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR¶x‰ pHYsb&2 tEXtComment2Aý܆UIDAT™U̱ €@DÑ/†ÚWÚ•rb`hKWÊ€ \h ·f.<˜e™%Ñ™FrâS­Øæe·£Ái¡DÔl"|죻“¸gÑVQ­,ü¦øw½ô's%N–X¼ËIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment36úìVIDAT™U̱ €0 DÑ“R¤d…ŒæQ`V‰Ä"Î.SÅ|”ŠâI.üOy¹–\S¦PãB4 äü˜2|xPhÊî]Òd?˜7vjlÅM¢;ÑÙðê/…:w?ÊiIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment36úì_IDAT™Uα À DÑRÀŒÂh”l•È&ÒÂ9”&)ždÙ>Ëøe8Æ¢2)ª ƒüÿº·‚÷­âM”[Ê,í;Is´+&óïT/Êa‰0ô Ê6Ýèrýí&Õ:íì’íIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment36úì\IDAT™E̱ € „á3”0Š£1Nâ*ŒòŒ \Iax†Äâëþ;x$ÆFtPì³£Ée;nq+ áMŽE»©àQï5«œKÿ’zFdFÐ'ªhW'ýX ˜øÏ<’›<زIEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment36úì[IDAT™eÍË € EÑgh€R(É(ãºì;˜å$ñܹ8Éd>oÔwÓ#SS–+QÅi…EÝè–>Y½šú…4Ð/Ì+»®©ýƒG-äþn+ìÞé>V2²¸{IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment36úì]IDAT™Eͱ€0 @)!£d´æX *Ö€ \¦ðE(À]Šo,[à!VÑQX^ éã Ø†ü+RA×Í=o e¦½+)—öé”MóaU§y†éç.Žªêb7Nì˜éM½ wô¬†ú—µtl%¶f‡Ä‹è®l”äré;ežý|/IEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment36úìbIDAT™=ͱ € FáŸPв+0#°‰«0 V¶gl(ø£¹|¼;­`šÞ4œ©Ë˜¬¦¤Ö’KZ¿ Óºpãݤ›4“f•Èt½Æ'jGèàݳÛÕ$ÑT®6võͪÓ@Ûüo,…IEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment36úìdIDAT™EË €0GÈÑ,Å¢, ‡ØYÀF,!Ç–<Ÿð0,Ë2³HÊMf°,™F¢mž}F}ùXQËè´S?ïvdG5ùn‚—ñs˜}$öH7‹ÛÕ^õßÓ>¹¥¸ˆ‰A´geLhIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment36úì_IDAT™Uͱ €0CÑ¥a„Œ’ÑR"±T¬bÐ]å0( Å«Î>ã—á³Ñ)42FúÔWMÜ–pËCÁ«òç°Iu]y?&ÝÅùë°ËÒ ¶‰ è/êÌÚ\Õ?´jÑ\×?Å?‡pÍIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment36úìXIDAT™Uͱ €0 DÑCYãy$`%:Ö°”BG¾¡¢x’‹»³Æºêrµ—)š©b¤ËÜ8Qq {Svä"ó"‹þ·¡tû°77×ÂÏ~”xèz=ý@¶¼¨IEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment36úìZIDAT™5˱ À0À/=‚ÇHéÑ(Éf–²RpILÞ‰#t ÿŽì ‰Š‰‚ø$ucÇ…Ø_þ•¹±;Àœb›Ÿ›ÎWI…¢¡“A༼üúÛ@lï«)IEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment36úìaIDAT™Uͱ €0 DÑ(HG›Q2ZJ:ÖŠÄ"F,ÒÂé(ž\Øw&&ç¡r‹SèbdÌ2gÏ\C!¬Š§2²®lÑÔMKÚK‡ð¿]OÌž™ÕE+lúÙÄÔÑ¿®Õ_1>0ÈJT`IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment36úìYIDAT™E̱ € EÑG,(UÑž¸Â7¶ØQ¾ÏHbqÊ{1"ÑÃÇ@l…¨Fx“K©rÊ>%â톚¡Æ‘á& ð>Ý¿Ô3V‰²èô, A=,ñ›‚?Æ,Æ|IEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment36úì_IDAT™E͹ €0DÑoà\ åP!mA'¦ƒ 7°XÆ€Dð²9ˆÝ¹˜hâŒLíf±Ì)á]!l"êBþJ½»¨[D™U e?í·ÉðÈ$í%+ ÏUý]ÏU[mô ø:1TÃVIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment36úìaIDAT™Eͱ€ FáÇYÈŒÂh–:+9 n@g øç(,¾*y ~ƒ—ŠQèdZ°é–Ç zÅÛ&†’Ô¦ÙµÁ¯¬9Úû²†žY$µWýÝÕïúÞtËû} ;ç„:_ IEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment4¨žy³FIDAT™cøÿàÃÿÜÅ  ÿ øBÄ †@uø!âã@ÜÄýØ0 €ÿ8þ?¨ €¡A-kYõ°IEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³KIDAT™cøÿ¡Žáÿ;†ÿ€ø7@1CÃ?¨cøcPÇ𣠎áÃ~㡏ˆÙ˜™0AÌ|P‡Û!ä@öÿøuÅ?ÀÅÜIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿ÷Ãÿ \Çðÿ@ vlPÇðψ+êþÕýâÏ@üˆŸñq(nÀ€˜€æÚAÌÓ8ðÏ¥C.ÅIíIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment4¨žy³SIDAT™Uͱ€ DÑ?†Œ\ V`M–@iÒÉ•@HÀp®#/ü»D ¢D3¢ŠO—ä cL]ÚfÔ]NÃÕyMɾ’á§°h7½ÚÇþžÿ7åñ:FGfIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR%Ÿ* pHYsb&2 tEXtComment4¨žy³YIDAT™UÎ!€@PƒÑjó¶½’ÑÈÑ8 G nØùp`˜~€OîÉÇô-0 ‰®Pð‚‘ô#°Éž@à(ß¶Î̸.•ϲhÚø”FDù!«eIEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³KIDAT™cøÿ£†áÿ†ÿ ø7€0PŽ¡†áŸA à ®¨aøÄ>Ô0|â‡@|ˆq;£ˆ¹j° &þQü[=GKŸÌ·IEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR$J¿œ pHYsb&2 tEXtComment4¨žy³SIDAT™Mͱ À @+eF`†L™˜ b4² #P~Þ±”—ÀÒ•¶A:8Ðnpä_—&5 Ãà 㒒ÑÕiòŽIV*í¥µ½³ÍÔ?ýœ®:ÍEtóÒIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment4¨žy³GIDAT™cøÿÀžáÿ(n€b{†Püˆq=Çõ ø!þ`ÏÐÄÍ@þb{üøG=-63©CòbQIEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿ£ŽŒ?Ø1üÄ ¸ŠìþYÔ1ü«¨cøSPÇðãCÃG ~ ćø8·qó%dðÿÄL¸ùXð:zÖ>(øNöjIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR#¦±÷; pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿÇžáÿy~Å€¸Šäþ1؃ñV°gøÄ €¸ÂžáÁ{†‡ìqóE†Tp€h¶=¸]â8òƒ3IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR#Isœ pHYsb&2 tEXtComment4¨žy³[IDAT™eÍÁ À Дà;ˆàbÒÍÅ<æ Úÿ M…ðø$ð#ke•5#éÜ5§:JÌŒŒô‚ªVÚ•\DmÂqôÜßoð§׬7‚iL%4ÂÞIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žy³QIDAT™mͱ €0CÑ?]Ö »µ(ƒXŒŽ5‚Xº+¢†&Xz…›hFÔD¸œEVÉB¢aÔQ&Ãn\²Ë!›,>0ÈôdõwÏ>º©;*Ï/L8IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žy³RIDAT™5Í¡À EÑ«‹­Ëu¬TYÉh…pà†ĵïÁ,Ã:/J°æjWc:ýdèµ´‡Q•!ÓM(H?qoK«»õ-žÃÿfàP8†¯K IEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR$¬–WJ pHYsb&2 tEXtComment5ß™I%VIDAT™uÌ!€0DÑi**9WéÕ8Wš£,A`×µ¢É2¤¦ñÜÏGŒŠð ʰD\A´Å#·Ø&y6®6¨‡} ºŒg¯(’8Œ`š//DßùÞDE&ñ#8ÀIEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR#µf·Ï pHYsb&2 tEXtComment5ß™I%OIDAT™e˱ €0ÁEº—j pKDîžÉ°D„4Úè5.#fü³½ÓEÓÛ*–‚'ÜÆ`B+rÃù䃴afx^™(7U,,tÜIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment5ß™I%VIDAT™m̱ €0 DÑC)Rf„¬âÑ`V¹Q‚XÀt."™¢  xÝ×GNCð‡½ˆ+‰óãÑ¥I‘EÔ% 9DƒÔ(çÃ.- 5ˆâÄFbÕƒ•ðÎâ›?` ÖIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR&ì@† pHYsb&2 tEXtComment5ß™I%UIDAT™]α À @£i… ²# eQFp: $Ǽ¨Ðë*ÿ[‰Ð,˜(¡‚aóïÀÛ.Kô>ãFÍz˜ Ð8åÈ^K,e«hîé«ïñ?â,[DØÓÎxxIEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment5ß™I%VIDAT™MÌÑ €0 Ð ýð³#8Š£y£u”ˆ øYAˆWRÈû8Èâ!âtð“Gçdä¶I•"–¿·zÑDcë×'ÊU)NX# >-·|%úÎ)&:ÕU@ŸIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR%ˆïÑ pHYsb&2 tEXtComment5ß™I%VIDAT™]Ì» €0PG”¬M²Ê‰Åeo@èèŽË d½Î6ì"ZÔåt:F”I“[Ý26oÇaêXý‹Ýé #v ‚ àû&‡ñǸ)=å*¯ÅdIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR''U£ pHYsb&2 tEXtComment5ß™I%`IDAT™U̱ €0 DÑR¤Í(Ù€•!£e,±€ËHæh(ž,YºO„w!†XÁ)ØRébâ\ñgSvú&LÇÚDS§¿­Å'¾û:õÏVɽ’ZmQµZRKݱûÓ(Bè(×AIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ì pHYsb&2 tEXtComment5ß™I%RIDAT™u̱ €0 DÑ2+x4’ XÉ£˜ BGd‘‚^wú\&ûpŽHŽzíS6YD{>Õ IQ¤Î?Æ&m8-ÂéjtµBÍ±æ €»<¯}'ÎIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR#±“gò pHYsb&2 tEXtComment5ß™I%UIDAT™]ͽ À à‹”!«¸™n•n”)ÒZZÏ!BН»xO¨H°axœx,<%Š23ë%ÁMª´ [ßným‰F@ÝÖ–]DËÆ?ùYrÔIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment5ß™I%KIDAT™cøÿ¸á#3 a ÿáÿ†ÇPüJâü@Ì ÄŒuÿñþA³Õ1?h```„àfˆ™ä~üoa«>ãÿªIEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR''U£ pHYsb&2 tEXtComment5ß™I%`IDAT™UÍÁ €0 FῸ@7p…Žæ<¸–'爘cB|U<|$”ò¢¸²¢IaC{ä«Èf—ÅëèsÄu [¦AÏ@èÓþV,¼'þ¥-s­`R¥P“k§§ß#¸=µ¢\õ”IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR#±“gò pHYsb&2 tEXtComment5ß™I%VIDAT™e̱ À ЇŒþ’f>-ЩС«›…ôŠB á.ðbhb¨ø:6ÃéS_Y˧¸ƒÁ‘á•àc¹þvÞ {Â~Ô å^Ãü7’Ý›?•†|IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR%Œý?ì pHYsb&2 tEXtComment5ß™I%XIDAT™e̱ €@ @£/¾üoÂ*‘(X##|IÑPœRÄ6‚À`Š‹}[ˆC3ê&ÛdlõÏœKá¯ù·Ë®3Ôƒ6 -öÚ½W>ng4ÜÊIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment5ß™I%NIDAT™MÌÁ €0 @WyðÌJÝŒŽfÄ"!Ͼ*TY'cè¿úâ“$9gs“2)—î“¢ŒÅXD…Ë„u¢4úoöéÎØ(7Ú¸Ï3IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR%ˆïÑ pHYsb&2 tEXtComment5ß™I%ZIDAT™UŒ± À Qx ’QØ$Œ–Mâlà’á<‰}ÅÛ¯C E4€ ÿÐ…Í9 OìÌ› É«ÁnAgŸ/Ó·ÑnfiŠìŠä8 *5.ú\ì?Ñ ëÚIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment6FŸ^IDAT™=ÎÁ €@CѯÂÕ ,ÅÊDÆÎldKØ£™8+âáA ‡ÉÑ=¢šP™gçœkrê§t•}&a¯Ûƒ8d?ûAnÊÖSçÄÅÚÎŠÎø ÐÈ8ýA„‹IEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment6FŸ_IDAT™uÍ!€0DÑOÔÕö(8®…„T ¹R9 pƒÊ›.K‚E<9ó1±š°â4Ú ™„jÂíŽÏz ¯™,‰MC ÄÆ¯Ým Y‡oŠ·.Fªÿ¼-ëå¿8Ò8Î.ÕIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸcIDAT™m» Ã@DŸáÀ‰@ ܈‘èÔÙº“+á ;Uð惔èšÐ(¨YãN{Ïäš“|%cKúñ§±,f"öBª*§âÇç–ê\¥9Û×Bwwx#½¥‡¿”_g¹CœÉc¸IEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment6FŸ`IDAT™Eͱ €0CÑ/’.#ÀT°±T¬‘(Sœî8”‚âU–mLV– eF¢RGåYܦkN—Èr ìÒqhíÃO¡w_¶»Kç”(Þ|§²"þf·¾³ž2yM‘ÜHIEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment6FŸ]IDAT™-̱ €0„á_ Ø8BÀEDzŒ¸XFq„”ù~ÑÖât÷ñP´;´šlR ³ ƒ £Ð&³ õaí1"™@ŽžlÛ]›¦_åsYwZ_›§âi¼_ZäÇAŠ- ßIEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment6FŸ^IDAT™eÍ!€0 DÑ*[Ç5p\ ’+•á"ÑiØjÄ›ˆl²xéñ,Djg”Á°ÑxgãYÅ,WÒdac"•È®»£BÁÿNiûæVö¶È£ŽW?Ô€û *2b‡ìÌIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment6FŸ^IDAT™mͱ@P„áF@ /£ ™¶džQˆVèäé@¸q–Xð%7»{„¢X6w-®Vhçk%Äa;bc$;7»·Ü°TVÿxï_Ææ 6wJ—(ôœÞñbÕoì4âb÷›Y¦2†'Õ_ ,ÞÀÚ•?z×lºýÎ{'ŒÄ÷Güm7ö]s{=Ðk%IEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment6FŸaIDAT™MÌ» ƒ@„á_F"„p „ŽìÎŽ‡;:¹.t`í0@Bð´ÒÌ¢PíP±ùPDüŸAýØt)$Ètä±%'ÓƒE«Í|oŽ{;qvJØ«¥zûóàœRì—u:ð~5IEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment6FŸ\IDAT™uÍ¡ €0áK*Àa; ޵p@HV*a‘ŽPù‹¦ñÉËaeÄRĈ4WD™D^œ‰ä.·±òÙ µ§kÎ`øqº£Á^áVOÊ‘ì}aþ^ôA4 AÀJWIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment6FŸ^IDAT™MÌ!€0ƒá?A0‡ãs\  ‚kÁMv„ÉŠe7A|IE[¬&,GlwD‰: Í¢,nÙÄÝb§KÐ)2ÔÀØœñ™ÞÜ~¼w(p•Höma¥úWô¨0úxoIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment6FŸeIDAT™%ÍÁ €0 Ð/^ . ¸ˆàJP°â¡kU\¤nÐc¡ñ[ï’üŸÀÄÃ’ƒ‚:*tVȪ(»"Ûï¡OÂæph³’‘†&4±ùçßþfîb>‹Cf¿ðð–uú¶Û7iB€`IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR#Z¤Üñ pHYsb&2 tEXtComment71—( MIDAT™Uͱ €0ÁC„.Á¥¸4_æ¶,Ñt`2Äóð—°ÒÄ‹fϯNäA”ƒ¨Îv·J“îL\r–0jØ^þèB7É,‹KÆ­R7tX)²^IEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR#±“gò pHYsb&2 tEXtComment71—( SIDAT™MÍÁ €0DÑ<¦K1Ia®X@ZØrô ®6‚Þùã4È?_AbKØÉT`BÇP(ÐäžèîYpu‹kƒ®ütæ2mC¡jò§Z>…ÈÿPIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment71—( RIDAT™5ͱ € Dá3”Œà(°™ZQºÒ%.¢qì,ŒxÈïK¾ú!bB”¿øñ™'QvsÈ*É8ñÄS Äm®Ðä±Ù„UýÈ,éÅÉRøP>X¨A‡"IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR$CT'E\¡¼:Ú ¥èa†nTóLNfÇÍ" ®4I“—v{U^U>áÆ§ÊIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( WIDAT™Uͱ €0 DÑC”°+dVbLŬ)‹x„+)Æ!IÁ—^ý!!?­C'œ`\aꢓŒEçzâ©î¸²‘`¥s—â{:4Fì._³žÿgD•˜ ]‹6÷DÂmaL¼»n UÔ¦¥O/EÌAµ@¢2,IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment71—( IIDAT™MÃÁ €0Àýåi –¢™`¶´b#)!O’3ËàÀ€4ÿ~R[qŒV•þŒ{L¾OþÑ™¸u!Z¬A5Ÿc/ã >‚;¬Ct±OIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR%ˆïÑ pHYsb&2 tEXtComment71—( XIDAT™c8þÿÃá ¸Íaþ†ý@ùÿ`ü€áÿ >ÅÍPÌÁÿ@˜ÿÃ(þ!Áì0<€â \ÿ€¡Š‚q#7ñûÿ™èF°†Ë~IEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR%ˆïÑ pHYsb&2 tEXtComment71—( YIDAT™UÌ¡ €0„á#dG(›° ›PRd%‚5n„Jáq¥5\ò™?N#¢Ì¡G>¿éwi„#‹½:$Ê"ñ¸âΨ|êÔBŒë‹vØIEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8¡(5˜RIDAT™Mͱ€0 CÑŸK‘Âh‹eà2r—âIfrr¹1¨‹ýFd¦3Kà5ÝEêb¸£ ÜêµôÀ±iߦ~@Òžº^âUr&ï¶é«˜IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment8¡(5˜bIDAT™U± €0 /¢HIFa$FÈ ¬EÇH,àÒEñP\cÿýÓ¢áÁ02';‰XŠˆ¶÷VLSvîŽÜðt¸:\¾é)wT9bl¢þ‰žÀûÖ$²vÕ3Ø ý’0Û‹Šw”IEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment8¡(5˜cIDAT™U¡À 7$%PDdDDÊB ‚J[Ð % ?!*+nþöž¾B â(ƒÓ’›!‹!~¸ÄN’w$í'ÐÑÜÔ­XÊf(»!XûŸøŒ-½{;ÿÕéú-/N.¦w'´IEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment8¡(5˜\IDAT™]± À /¢HFÉhŒb1¤,ò#¸¤@QÒD)®²}fl¢“0N‘ìÔÎ" Ø?Ô):ÉJÞ„Ö^ wÈf‘Kï~nŽûÇtyV¼×ÖçüvOÐÙN/+ 2JIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8¡(5˜\IDAT™]± €0 Q(ƒ±R¦Q°VØ$#¤t> ¬kì¿7ÆLf$™#Ö±ÝüHT6”·gE;“Ÿýëob¯0œ_úêÔçX¦Ö¥Ÿ·kÔÎ.Û/|{ç’;IEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment8¡(5˜lIDAT™%ޱ „0 E"%dÊ+2EŠC,›dÊ+¬ø>Nñ$[ö6î†O†Qù‘yX‚öI\UôÄáƒÛG™æ{¦mE»o®F¾SDÆ69öD3¸;ÊÂ)fu Ï÷u­rÅÝž®_ôÓ9ꥑIEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment8¡(5˜`IDAT™MÍ1€ …á`ppptð(Ä“£“×’›pF††Z`!Í×é½}% x +yq$o*$¹á2çAÞ[^úÔÎÛ>(›Ý–ˆv#Z÷Ñ{B÷Õñ'·NïTå9Ê:">œ« IEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment8¡(5˜jIDAT™%ޱ €@ ¯x‰�ÅFñˆÅ@,ò#PRD¢X¶"œÀ¹i\T:Æ> 7ާpDa}iIéSúÒŸ9×4QŨ۸æBw”‡SÙ-û·´U,^ØIL]™«_O ú'üÜ€:»ÂÿÞIEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8¡(5˜]IDAT™E± À0 ߸ˆGð('#¤L™læQ<‚JFÉ?&q ÄëÖ*: .#¸E|Þˆ3w(Â’C3ÑH…ñìtøúͱØâßE’ËÕ¥Îå’çÉþà).dÁIEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment8¡(5˜dIDAT™U̱ €0 DÑC”d”lÀJÞ€HY+‹DbÓ¹ˆ²^cù6*úÜ=¹)ÒÊû…Õ¤¨ì+{K‚S=sØ+ؼæö;þÌü_ijØ 7Ec8Y¯2×¥IEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment8¡(5˜cIDAT™%± À0?rAo)#dËEÖ"›0%…e›â¤ú{0Éà‡Añ@„ñ£{Å;’¾Y7F³è¨AV¿¬¤ëˆ¾"|­Û'h$çL(¶JÐbKnÞ?—9/ûè5&ÈI‚ùIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8¡(5˜`IDAT™Mα €0 DÑQ$#dJÆ¢ b±°‰Gpé"BP@ñËç3g"Ί1Ó—Êæ**û¨L¿¶˜i¾Ò‰'{œ¼lÈ:³Âá…= yðv~M£TÓF—1Ùû†þ¸ ¨1Ñ帢IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment8¡(5˜bIDAT™cøÏø $0ü Àpø‡CûdlÀÐüÃ(^”ÿÀpà!P=ó†@ü„füêÿøÁ€á1Pïaž üh¸$”oª;Thë^öÙœ9¤KÕ`4IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment8¡(5˜dIDAT™Mͱ €0 DÑC”ɬÑ"1JAÉJD,’ŽÎ…•`%¿±ýdTGÈD™·$ 8Ôÿ³]".±ÛàlÎR³jVñ”`~˜SW¿Úh©¾—lŸúOšo+_%89éµ9—IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment8¡(5˜gIDAT™=α Ã0 ѤR#ž$€Öra$ñ^.2ŠFP©‚ý)^EAÜ o†ñ “þÚ­È[\F¢N¯L-5=ÎÎlò¼n¬šo‰ï€]‚Úx ? t‡žùh¿ªë³úÃíÑ85ˆA¿zIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/[IDAT™UÍ¡À ƒá¿ –Q꺾‚¹¸.Ò¯^Mŧ’K° ´‰Ž¸{¡iç™:#áÉþ§zvy§)r}#2ÈØXvLë‹°æN1ý¯'ÿ:œéÑÄ7å-ú¹eIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment9Ö/aIDAT™Uͱ „@„áÿPØD°á®¥+ÀDlì•"\† ûnp#ƒ/û™¡QÙ¸X –Û¥šFæF—O¥uƒíîâkŒÞ™e]ºËΕŒÍD¾„qú7f{ÛGüR@™40†\ÒIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/\IDAT™m̽ €0†á×b—t' !âbqGHiî<¬,žêûÁ6¥“i¬œÌT"%Š ƒ ã‡_»;¼[“ø^üGü/`ý±k~µ;3V²çJÝäÅLoìÍ3†¬RÇIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment9Ö/`IDAT™MÎÁ €0DÑŸµ±±4ÑÎb')Ác!ã<Èò.Ëì°H Ñ<;…•‡‰¼Œ¤#r ;¹>á3üvÝmÉÙ¼áûèžè¾ˆÚˆj7ÙŠŠå¥ƒêD 6ØìÔ^ >¯~2RIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment9Ö/eIDAT™=ÍÍ €0 †áWZð"¸€à"­`Gs”ŽPoBãçBò #ÓHTöÇD9#ƒEB‡ñæ0û[š‡O1t‡2PVTfÄ넟ÒIê3^2]Û¦¿{YV£nÆáv’=4„$ÛIEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™Uͱ €0EÑ+Ò.A,³²XÜ$#h—âá÷ƒZœò½‹+•Da ´¬@¾ñÆWüÈn¾4šæ?Öv¸:ceÅ6¯uÞëE‰nu§é!à3ãIÁ`UIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment9Ö/eIDAT™MÍ1@@„á_"±VçަCJW"®¡Ø#H4SÈ>(_¦šR!”‰ƒ–HâŠáªS °@ùâ—ý—0»Ém Ö ï”lw¾az4ØÑbQØâñ|ÆÒÕ®§éφ:˜î>è=IEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR$Tv¬½ pHYsb&2 tEXtComment9Ö/jIDAT™=α €@ @# JF`$C"ˆÅ~”gƒ/¿@ol4W$² ð K਽éi…h†öŸC©gï"LÚÌ ·ˆbªi.åÕT]cÑ]f“&á_*6ÇÔš;Q31n/kFtÐ;’¤IEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR$»´Çƒ pHYsb&2 tEXtComment9Ö/aIDAT™mλ €0 „á?rA6È(´Lb³°IFHI8!:d}•Ï$ñÔÉÄA¡“i Ô1¨K°]‰M~íVÝocò|òžð¾@³ÃëȨT'_[Y-,‹^üƒt"9B>®IEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment9Ö/UIDAT™}Í¡À DÑŸA€H¸´—¶° Q % O0G6 D<õgg±Ã˜7}eª'š„ ñÇ×›C]ÐA{0ûÌl/ì%&S†tþ¢1.yìS°0°"NIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment9Ö/^IDAT™Mͱ € EÑ &Ø1‚nâLN`d3FaJŠð¡Åi~òïÃ\§qQØÈDîé ¤pæY:¯uŸå'é~úõjx*“Ñâ§nŒr0²hÇèTmfE³¢eïF·- P/ IEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/ZIDAT™uÍ!€0DÑOÔaqpŒ­Ž ®UnÒ#T® ]<Ù<·ùƒÆ{DÝ"å^¸úBîÉùuJîpH1¨5‚JWãco ¯†ëÉ-i¯Î²Ênñ 4qZpáIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment9Ö/\IDAT™eν@@„áw˜!£ƒ«Ä(Cct¢„ /0ßZ±à ÷)ÁÃL!ÙÀMǹ˜.ílv(ÿl–çjÎ}ª=îP¶úPIè¶<{mñNPZëƒ:úƒâàØ;MJWãIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/YIDAT™]Í!€ @Ñï¤Y·y"G£9Œã(¸Áa]Œ†WÿÇ‚¢›2Pz*4ÍÔG¸§°/ø„¹DªkÉéˆw„™óŽ × Ö«Ê\/×wºK_¾'2wÄ€kIEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment9Ö/_IDAT™]Í¡ €@DÑO·{¥œƒ²m¡J8¹bòAÄKFÍÇz¥uÊÅL §e¶;³ßBzÁð‘~6*‚× ÞÂ5ãUñU±è´èÕ¤,Cc»>HØ46g˜–IEND®B`‚leptonica-1.70/prog/recog/digits/digit_set06.pa0000444000175000017500000007613112251652153017511 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøÏüáÃ?† v *äÔñ>†ƒÿ@˜¡„ÿ31#3Ã1Œ™P0XÔŒƒ`Ì6dLJ ; u`»ÿ3þóÐ0âÄlÄIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªSIDAT™cøÏø‡XØ0|¨‘axðG†áÀ?†ƒ`ÌÂÐÂÿYÁ˜ˆq`fÌÂÐü‚ÂÍã›ÿàЮ †@{ÿíÿßþ ¡2â0‰gªIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøÏþ‡áㆠ5 *lü°a8øG†áà?†F ncfdüŸ0†ªmcˆY 3ÍÙ² d'Ðv†ÿÌM1þÊá¦IEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøÏø0Ø1ü°‘cøP#ÇðàüÇÆpð?314"aÆÿ x0ªZˆ~6°Y0s?ü‘cøQaÇð‡¡l÷ÿæÌ[5[~ñRIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÇøáCà ;†äüããƒ`ÌÆpð?Cã&8fDÁ h|F¨gc óþ“Ûñ¡FŽáGÐÞ @û92‡ýIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøÇø‡áC Æ2 þð0øÇÃpð 7‚ðF˜—Ü?ˆ^(>4óÐìd€öíÙ ´h?ót.«U=âÒIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÇðáƒÇ 9†5| þAðl ÿ³14þgBÁŒÿðbtõ 3@øƒÌýP#Çð„vþÚýŸñ1,‚wLIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøßüáCÛ1|¨â?r þñ1Ãÿl ¸ñ? füÏ€£ª‡˜ 3Af¨‘cøQc¶óÐîÿÿþò4˜V)ÓIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ó½ªOIDAT™cøüþ`¨cøQaÇð¡FŽáÁ?9†‡ÿøþgãÆÿL˜ŒÐ0DU-Ü™€øCÃ;†? v`»ÿ3þƒî5Wy¹·IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøßü‡áㆠ>TÔ0<øcÃpð ÃÁ<`Ü ÂÿYÀ˜ŽˆÀ,p}Íÿy æÉ€ÍÙñáG ÐΠ­þ·ÿ$²5NÅm7IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment0¯ó½ªSIDAT™cøÇü‡áC Æ2 þÈ0øÃÃpðCã?8füÏÀÀŒÿÃÄÍ@}ÍPý óÍ™ÿà‡ Ã ÚüñÃÿþ?Ù1Ÿîš·«IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ó½ªQIDAT™cøüÆ ?8ì>ÔÈ1<á?| þ0Cãf‚cF fc"ÏÓ2ˆ€1ÃÚñ¡ÂŽáCØîÿŒÿ29ÀÚ ×IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment0¯ó½ªOIDAT™cøÏøáCÃ;†5r þñ1<âÿØþ‡a&†ÆÿM`Ìø¿/n„cz&¸@jö =?,ìþ0Ø1ügø›£8]Áó×IEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÏüáÃ?† u *ìüácxð‚þcãÆÿL`ÌÆ D`&¸†™sjî‡9†v`;ÿáÆ—2›"wGIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøßøÿ0Ø1ü°cøPÃÇðà³1áÿl ÿ™ᘑ܈¢jÖ?¨Ùø>TÈ1üÚù‡¡Žá?ã?®ã2–·àóIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR !ÅÃ+¯Ý™E·ˆkãe‘„_†ï¢Ï{2Úlئ)ÞD2~²2÷øòŒ5ä1&ø¬IEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aý܆dIDAT™=̱ „@Dágäf¦›]‚m(ؘv²%l8ø;{à_2 u¢²PÙk¦W“识¿ÎøÂ6%Ž%Qü ÿ£ŽDiDœ¶Û î¸f¡ÕýÅN;Èl$Ç^ù·EäcS5ƒº[‹„IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment2Aý܆iIDAT™5Ì1 Ã0DÑo\H]Ú=Š‹@®¥"$_L¾ÉAå›I Å+†Ï\ƒAÃÙ8‡q„Q¢Ræ?«,Âö;ôVq}RßéÒyyH ®[0A¼ÕÏ kï˜TÅþ ©“ödÚ4¤(ÝIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úì\IDAT™uͱ €0ÁE„PŠK¢—`Ëm™N\‘=Â< Á„{‡ ¢!ö)-²)|ŠË.)R›8]ß]·7FDk@¶pôëÏÂì&{FßKUÔÑ¿'qu=Ÿ?Õ„@IEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment36úìYIDAT™uÍ1€ ƒáŸ‰•£p´7:B¼Æ‹p„Žšñáîð¥S[FÂèdeN%öåJTÏb™ö1ÔÙĬâñÎðŽRBhÀíæ¸øæü'4£øsz—5Ÿ‚CØIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìcIDAT™uͱ „0DÑœ¸g´@è²]@[ q n°’ ¸à…3ŸX£1¨ÜVy¬ðûxá¾W®Mö†ÆÎì‚ÚøV°–±ÈÌàÌ)) IŸ‹:]_—Ú#9¾ú x:tN ŽIEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úìaIDAT™uͱ „0DÑ" »Ë"”MPMôbôìü¦‘<#–\]x*ôöïl ³wB&ÿµÝ±¿Ú ÿß;îqÓIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment36úì`IDAT™}ͱ ƒ@DÑBnáJ»@hk%7Œ³ N,c‰˜à…†ÜD„¨Qùªð±í¶Úb¡Jì• ‘«¹9Ýt ­Ì¨Á¯C>˜úÌ«ýFï »ˆÑßoo¥.´?ÕBö ¤IEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment36úìaIDAT™Mͱ €@DÑ/¦–²%XŠ%\h¨Ø–‡…¸%lxxŽ` ˃If–‹Ð%ÜÆQzÖŸy2ödø˜¨Ô,Kp«U0é‰ Êõïþ(Ÿ²IûÒf«?óØ›À»xù8T¨ÌIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úìcIDAT™m̱ Ã0CѸP¢ ¼JFÐ Rd-y“@ʵ‹× ›D£ðŽÌG™¯%ÛŒ’©Ë«MÌÓbxÓ½™ÐNô_‡9n8ºO—õ[ ŠêŸ–„ý°î7ÉóDÚIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment36úìmIDAT™Mͱ Ã0 DÑo¤°Fà(*3ŠGp©ÒA ¯E#xÀ’…`å*ÅðpGNI\4ލ|äÆ.¯0¶ÕðµâK%¼1<ÊßÊwª.#[!zaüÀ¸ÿNÙõ›»ñPï¤íÙpm_s~yÎ6þ¾áÓ1IEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìbIDAT™Mͱ € FáG(¤³e:W¢¤Äʵ°r F ¼D"ž11_ò7÷ŽË ¡’Økàhí'ÇW‰‰Z£cUFè½TÑÓÄqvÇøðÛŽYMâUÀj×h+k£<ÿ¹é£:ƒDuDIEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìfIDAT™uͱ „0DÑo‘8#u)[%\è€DcFp-ø:ØpOB6‹DŠF/œZ0î(™Ÿ »&KlÕ•,Ô S¦W£ç†p’0‰Øù7è/¾-²¹áLÍߨ÷ÿh ;ò2x.VIEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úìgIDAT™-Í+€0„០Àa+9r…¬$A ¹R“ ®7¨Ü„†²<2ùĘʦ×ïí-«YL“µ •mM½jûîô ›=Ìâá3áIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment36úì^IDAT™mͱ€ Ñe  Ê0¤4BÛ±J ¼€?Æ/Ü;†Ý ‘©$®–¸?‡ÙMY§D]3­fFc5Ýi9 czþÎX&Ûtö³Y_¬n^/i®8ÙÇñYIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žy³[IDAT™cøÿ¿†áÿ þaÁ€ø€â f°aøÂ6  j~|¨aøÄjñq nbv >`êç˜T‹‚Abd€fƒ0P݃?ðÂ>DS¨IEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³VIDAT™]ÌÁ €0DÑS€X„lQ–°`c‚ÄrÌ!$þE½¸ð.ËÌhtÓh¨(ȯ™z˜Mm5ÕÍTÙ 'vLt¤¤ï#/Ïæ_ü=±MÆu•c5ZËH¶IEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³SIDAT™cøÿÏŽáÿ þÄ€øâ fb;†v ,ì~TØ1|â@µ¸†z˜ € hÄÀ¶8R¹Ð\rIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³TIDAT™cøÿÏŽáÿ þÄ øâ(f°cø'`ÇðÇÂŽáG…ê{渄È10001€@?``C˜‡ŽðÍe‚à r-?8‰g|ŒIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³NIDAT™cøÿφáÿ(þÄ ø71ƒ Ã?†?@\aÃðˆ?Õ~âÇ@µ‡¸„È0À@ Â, ,4›h6 ›V9ò-²LIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³MIDAT™cøÿdžáÿ(þÄ€ø7@1ƒ Ã? þ#Ä6 ?€j>|¨axÄìÃ@ÜÄì@}Èàƒ ÄÅ @ÌÁÿ€øA à þPÃðˆña nbvêAÿ€Ì«AÃ6ñ2@sY@ë::¡²ØIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³RIDAT™m̱ €0CQKd`”Š(Ò±‹„ ’.E”ã+@‡¥×Ù–÷MÞL^‘‘^⣠³©­¦ŠL¯à‰)èKÄøû“~ƒ\à *‘6—CzûIEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žy³\IDAT™MÍ1 €0 …á'.n]Ýr ·^˱âÅ ^¤àâ–¡4>J‡oKþ÷o¯d¤C¡LiXmÔM`»@yûÐMü94 aê2õŽ}¸£ñ×ìÎÜ ÷)•<œ¨´TIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³UIDAT™e̱ €0 DÑ%b‚Ì‘ÊsQZb1‹d„”."ÌÜaé5–îÃ]àw²ÔÒAJøŒ•jUAßÍ']]°nâ4½ þÿ¢¿°=±K:?§A8èèCø¬IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿOŽáÿ(þÄ€ø7@1ƒÃ? þ# ÇðÈ+ä>Õ>„âÃ@=í@ÌÀÀÄ @6Ø,\øÐl&.ú4ãöiþKIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³NIDAT™cøÿφáÿ þÅ€øâ f€à6 €øGÕ}ª{ćø8·12xàÀ1 ~ 4›h.?à698[á–zIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿdžŒñ ~Å€¸ˆlþAñ†6 €êBña nbv dÐÄp³0° Ðl Ù@5 ,¯:5™ø`=ŽIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment5ß™I%ZIDAT™MÍ¡ €0@ÑOí…Ñ*IX€‘J]£­…„xÖIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ß™I%WIDAT™]ͱ € Ñ#ÒÑ2 £Q:JÁ&.@ù "òc¢Åë.9Î+q¤ %dóðBBýÙµ™m&²µ@Gé ê4>ÜË÷À"*b[ÂdaÕúÍ?ºÂ¬y”IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment5ß™I%RIDAT™cøøÏ‚áÁ fá þÁð€ˆÙ0<þ‰Áò`µ H0<þÃÁÿžñl(ßÄì$˜X00°`h\ðƒáÄÚ²>œ…Û2IEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment5ß™I%TIDAT™uͱ € Ñ3–2 £±Œ†aŒøí(ˆøÑB‹—\w§'WG¦ÓFȃ2ÂÚ„í#íB¤óÊŲHõÕ~Lj,öfÄAðžO›åSx=}elºIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment5ß™I%cIDAT™UÍ!ƒ@á!ˆ]‡å(¸^k%Žcp”B*¸Æ6µ+ñÂc7i›T|9¸'ž–È|‰ÜUA¼îâíÿŽEl4{y¨²ÈÑœ7ðÖ³ÖâÏj#C4J¢Ïbþ|ÊMf>AëQ\IEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment5ß™I%YIDAT™Mͱ € EÑk(h…Ñ \ Cá$´?±¡ âÆHqªû’ÇÙ¥)>B1Ê ÇªÚ'Y{Ò]³‰#7ÈýU/³þ[»Ã*Ó ­¬IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment5ß™I%ZIDAT™eÍ¡ À „០°ŒÂ] YÙ º£@µO"ôÑÔ4Ÿº»eò®X¢²QN¨ó/­üézJóÔµ¿\j.ýëT®{¬n¬LŽú“¬Ð6¹-C=ÓGA†?IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment5ß™I%YIDAT™eÍ1 À ÐÇzæz4‹ù¥ƒëÄߨºuxH ¸F‚´ÁÄ …lä·}êR(³ËÜeîÏP¦ŽW%ÔÿöàÛá4Á‰âX?Ãôzy? ’­~KIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment5ß™I%RIDAT™mͱ € á3”²+°+1"†‚5á•FüI¨ŒÅ×]rŒ'ѺayÚŒeˆúåVCäjÒÍ=A5ãWà°n7^ß. ÖG§^Ŧ>ÇJ‰â\IEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment5ß™I%XIDAT™mͱ € Ñ3”°+0#ع–†‚ÒH\à—$øQ ‹×]rœ-²1ÈcRVÍBêBþZßFû½’xRõäÆíPý—ÇÕ!`%bŠ€~#'\>kõ-·6y¢J§IEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ[IDAT™Uͱ €0áÓ@ÊL ™DœL‚âÎ7qK Éï3ÚX|í–Fä"pv’G ì¶JaûÌŸ‰A¢è=”–Æ^ÎøYd®Új3O–ýé‘S­ ý]¹bþ3¸ Ä¿ÔIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸQIDAT™m͹ €0DÑpè€(Å¥Y‹ÊÜ %¬vÁËæ (™SŽ*žÙ¥‡½Úc­ <Ê2%XÄalÒ>º'mËýìϢº]…T.|u’w‰IEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸYIDAT™uÍ¡€0Á#â•R‚¡´ð€§¦”’&σ ÖÞaš0"Â9 Gv³Pmwò¡5£L.¢½ S@ggн”åG±ÕêÓ~Cä$ÑÈØÖnÌ­7Ül=¸IEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸ^IDAT™mÍ¡ €0…។s#ÜHƒ!.F7 —–£A">÷ç=*+†’Gå^„Ó„«(©Z?áµx÷ …®ô„~õD·!¹Ã”sš¹}+û{ìMÕ0IüxÖÞIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸYIDAT™Uͱ€ DÑ/!%X ci XtB †Ìc ÁËþì¢5¡ìwô\)ÐuÚG™r"[õXKr ŽmÉ?åÕ–Ó8ªzºØÇü²Áaÿòæ6Iùê38IEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ[IDAT™M̱ À Á$BJ G® YÐîÄ%:@ÿ~á„`tÉiÑ~"d&‰÷HŒ’xÄh¦«p›¶©œ`ìO‰ §¿ ,nÛ¶ø¥j¤K\ýqd†µ&ä‡C0×]á³FIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ\IDAT™mÍ»€ EÑ+ÎR¥X—ÃøiL;¡Cf× Nö>è’"@W2(9Uºõ³?˜ÀòXžäA<ƒºnT~8ë9ë;Ûò–/òþTÛjdt“© 1·SCMìIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment6FŸ]IDAT™5ͱ €0 DÑH)SSe”L!R±VØ6 ¤@6ŽÅÓ5'}ô”Œ¹»¹Ì!‘¦É»©¿&¬öǾ®‘A;ÜômWÝèvh8ëÌÉš™ÇêºÉ ¸4òѧIEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸ[IDAT™mÌ¡€0 @ÑÏŒ`€‚è`ˆ:+Ç"°²"—ªˆçþ}üRœŒ’h‹pá4á²Äîʶ±*DOô¬61„Ñ_üÚº©Û£­ñ?Kâž3‚ úa“2­NC ÎIEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸWIDAT™]̱ € EÑ %'1ŒFМ 7Ñ ,) ß c,N{°š0"6H œ9°Û*úQ!I”“˜pòš6[txºõŸS¤1Òɘë7Ž 6a4×zIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ_IDAT™M̱ € EÑ«&„ŠœÃÂ0ù,àLqJ Ã÷ca,NwßC÷ˆ2sû@]59Š:.ÝLãøÉ¥!ëÅ;ÄZtdx ÓOþ`FÛwýפ@Yf*‘FBÏöi»8Õ ZðIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸZIDAT™MÍÁ €0DÑŸ9¦„`!)-ÅÆ´KÈуìºïö™A׊8‰9ÒŠ‘È®‘Må3¿¦Êd=Ö“HÀ©ï†ŽÏbæÇ¦¡Ûïý’hãý[Q'(´2⸋ÂeIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment6FŸZIDAT™uÍ¡ €0EÑ ¢²éŒÂd¤Ia–¢X£#T"š÷ù 0ˆãnÞú0Dd¤Hß\Ž49Û©&ÊWx÷¤Ùif2~•×ÌáêCæÝw.V;u“i3éÖïÙIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸXIDAT™uͱ € EÑK dFq0 “¸ˆn`Iñóñ#¶§»y¾ !Ñrâ–Ä¥SíÂaÊÇ›€õXOŽ8 8 ø¡ó#Ptª_çj_¶ÓìY½Ä ˜ýÿ?ù`üÿÿ(€â ÿ?@ñC >Ҹˆ™¡˜ýÃ?(þÃÀ?@X‚ÿØåë?‰ñFÓŠÁÀ8IEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment71—( HIDAT™c8ÿÿC?·q f```ÿ#À ÿÏŒíÿ€pÃÿ ø?„âƒP|ˆ›¡˜‚ÿ0?ÿAÇò` K8D…Œ—ÕÿIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment71—( RIDAT™cxÿÿÃa >ÀÀÄ `ÜÇ íÿ8øÿK0Ìÿ ÿAøÿ¨€à üƒáÿ ~Ä¡¸ˆ›¡˜‚ÿ±CðæGÃò?GîDÕÁ’à%IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment71—( MIDAT™cxüÿÃ0n@Ãìÿ9À˜ÿŸÃ| þÿÏ‚áÿ þ ÿ?@ñþÁ€ø 7B13ÿƒâ? ÌÅüüOþÙ|?wÖóöŸIEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( MIDAT™c8ÿÿC;7qC€û?y06ãú? ÿ€ð†ÿ ø?âƒP|ˆ›¡˜‚ÿAñ~,X‚ÿÙñˆEŸɤñIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ì pHYsb&2 tEXtComment71—( MIDAT™cèÿÿ€¡ˆ€˜Ža€ÿƒü?{ ®ÿ“Àðÿ?`øÿŠBñA(> ÄÍ@ÌÁÿ`˜ÿÃ(þÂòHØŒÆ@Z£ ÚðIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ì pHYsb&2 tEXtComment71—( OIDAT™c8ÿÿC;70€0#þ ò@lÿ‚ÿÿH€à ø!âÃ@Ü ÅÌ@Ìþ€áó?`øÅ?`X‚?€h{ ®²¹?ðbÛ‡IEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment71—( QIDAT™c8ÿÿÃq >À`ÀÐÀÀ€‚øÿ 0Èÿ3`°‡âÿ øÇ†ÿ€ø#?DÂø07C1;ÿaþ б<ÿ³ÿÙ"Cù„€QxIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( UIDAT™Uɱ € ÐßY¬à¬äjœÌXX²‚np%Åü0ÑâU© ÌI+-ÀàáŠGP3"ê„j²T¡‹nÚ»ƒ¶nhŠqR~…È›åI‰¦tiîIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( TIDAT™Uű € ПPX¬à®äš8±°d78; rç'ÐP¼Ôh™4’yŽâ9E¬ŽõóHï³òÈ›î ß“veoG4QPZÑÕEw“ÞþNõh'õon¢4F½ìsI5ƒ­ßù IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8¡(5˜^IDAT™Mͱ € EÑk%#0 …‰kYb,X ã"ºå/Èc,N÷r52‰…39v±ÙT1l‹W“#â8uߤ‡k,W4©m3ŒåU•ÿé½µõ£ôŽþ×Ynü·5E _Õ)IEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8¡(5˜cIDAT™=» €0 D¢ ­ † ÌhA¬•ˆE2BJ0_žt–îέr©0Õ“6aÝ‹1¿L/aB'D<ÙòWGÍÄnGŠ–/°(4»q|„ßׯ½ibïŸJOEå/ËNèhIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8¡(5˜]IDAT™cøÏüƒ?0T0<ø!ÁpðCó?0n‡Ò ÜÄ ÿ$Ø1ƒÃ úp âõªûTÿ‡¨—ý? 7Àqûˆy€ö<êéÿÃøÁ2>á1u¦IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment8¡(5˜]IDAT™Mα À DÑ/…’P&É`)PÊbdF ¤° 6Å+,ßYf t"@½=Ÿ¨áÈ›dO:=År\K[‚ò:;JÕ|‡,ð8æ.)ÝO»§w¢u¬õù$0,µlÐÞIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜\IDAT™Uͱ € EÑk,d aG°´2ƒMòü¢'yÕ»È yq$±„Óêß¡ünñ³#rÛȪtV·!EU LUµÁØž¯C;quýCûØ$- ,—!0IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment8¡(5˜VIDAT™eÍ!€0DÑŸ èö(œ@*¸V.Y¹¢), ‚xîg†‚’ñl‡'a-ŽP¿f3fâÝ>Ôd¤Ù£#e K…þüëÌ»³´_E/½-ßRVIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/[IDAT™cøßþ‡0Ô0|ø#ÃðàÃÁÿ< ÍÿY ˜7€éFþÇÀpàÃþÇÎÀðÿ?³ 0ÐÜß@üàÐŽ ®°ax´÷#Ðvþ?Rd6Ïx ËVIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™uͱ €0EÑ+¦\ ƒX\Å,-,‹›Ä R¦øüø´³8Ý}<´ B©x¢zví8ª£ýðkWØâ ÈF{Gµ]ÕW÷¸ÄsJ .fZ­·ßVÐQnùó3uåëIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/UIDAT™mͱ €0áC!¥:sX9YãdºIFl,Â{þZˆÅ×ÞáÉ(g7²Çžl ›‡[òåcþ«AŽBÅ)¥®p„סv6=Š ú1‰þ­]€›<üz—(IEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/^IDAT™]ͱ €0Ñ“l à"Ê,K6 ¸@ÊŸÄ ‚Åkïh½PòäIÅÅqÔáfªÅ´?>õ± l–¬d´´öÒÎÃqj;Š'è',+¡’Ñÿ,ó´3œ¸´ðIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/XIDAT™mͱ € EÑk( ²vÇa K‹a\„(AÀ‡¶'¿øÉ»Œ7’­\uáׂ€ë༿¡Â!©@t¨3ô6„ö†[.5vS+iR×Û#/Ä&‚_IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/aIDAT™5ÍÁ @@EÑk$ìè@ *P“¥…*L ì,ä7&'ùó.±0α#Ì Þ«Øbâdÿº³UBfà™àÄq‹ÕŽU¦ÍKÛÁRGú î]ªßÚ m7ä3òîIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/^IDAT™mͱ €0 DÑ‘2# Á”‘X,MÄbaØ€’²q¨)^÷u‡á¡pÏ™SFš&T‹ìn0~W;…&n…| t³.bÚ¥ÏåZÿ(™¶ï…{t“+3½öL8¡IEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment9Ö/VIDAT™Uͱ À …á?Ø8‚UæÈ8ŽÒÖÍtG°¼âÐh$`x|<¸âz3å¾HâÈêˆÍb^üõÍv ©BFÑNèíc]¿³Î@ò2¶«‘òÚ16Ì0IEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment9Ö/aIDAT™Uͱ €0„á_‹XŽà –’¹,DŒ ¸’n’´³/¾äøºãޏ )7–³oñÒ°‹áˆ—­Ùòã>h_à;8P”ÄZÅ—É.ÝNû~ÒŸÁ♵/„J98‹EF÷IEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment9Ö/^IDAT™Mͱ €0Fá§…vâN"Îe!!Ù,k8BJA¹øSÈñ5÷޼ïœ,$&Žu Ú«#ä¶¢hª}õí½AÜdD Ô‚[²nÿ.5“Ú‡“Y¿ÊOGjŒ»·ÿˆ6Š-„¬®IEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment9Ö/_IDAT™eͱ €0 DÑ ÊŒŒA˜ E0+e$ƒè(^uÒ}ìP”ÄÉL#’"Y[²5l/¯õ§nUV—@(ÀílwV5Ÿ–ËE½±tÈäjÓëgP¬×ù.7†ˆï¬IEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/ZIDAT™mͽ €0„á+G¸H†rq±¸IÜÀ2Åñé!ˆÅÓÝщ†8ÉÔ–Ø•Xcd‹žîzñ/pÖ¥AÜÿŒ#ÕûE™2/Îû×ÿšt©4(ɽcIIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/[IDAT™uͽ €0†á"Ú\ £d(°‹›Ä R^q\¼€ØY<Ý÷C_Aidª$.9]èÓ‹_‡9…Ò ‚ï€Ìн×mˆŸÛÆ~¢H¦l»çý7(ºê3ðcßðeIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™mͱ €0Fá´ èâP–6ÙL'p…¸¥à‘øG´“㫎{GÞŒ2qìX̳&OHõÃe¨~¸W(º“uà”܈vYÏ¥înå‡LK;qVv@22ú0LýIEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™mÍ¡ €0EÑÛPY!a…À` a1˜€Ê$ÄÏ/Ï€B÷^.u7ãf¢Œ«ulž˜e©‘æÃ¯àh‹~P2œÀÝDj/úU%.9¼ÓVQ½l” vk‚"4™­/J IEND®B`‚leptonica-1.70/prog/recog/digits/digit_set08.pa0000444000175000017500000007535112251652177017524 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRò[ˆ} pHYsb&2 tEXtComment0¯ó½ªQIDAT™MŒ± €0ĬD‚.bFa.Ê„,ö£0%úç.Nò™èÎ…s°°3c Øšhžè‘QØÇ»sl4yU¾MúRÔ)œê=ÝÈ~-‹$$øÂTýIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRÈQé pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÇðáƒÃ9† | ~°1üÇÆÐüŸ‰¡ý;óÿ?Äà˜ŠAòÍ@ÜT{¨¤dÈ< ¹¤û% ,ÅÒSIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR9[Ø pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÃøáCÃ;† r þð14þãchþÏÆÐþ¿‰ˆùÁøÝæ#cºF >PÃÇp€lȬ ÿþ7ÿï $Ù†©‹-IEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR9[Ø pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøÇøáCÃ;† | jøþgchþ߯íÿñ8f‡bˆø! š6°úÿØÀú0ÈͳcøÃðáÿ?úÁ+øŒ©,IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÖÅ0æ pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÃø‡áC Æ 2 þð04þgahböÿ @|ŒùÑ0H¬(ßü¿…á P-HH?ÿšõÿ·ÿCÝ'²Tüï6IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRò[ˆ} pHYsb&2 tEXtComment0¯ó½ªJIDAT™m̱ €0 DÑG #0 b4äÑ%#d€ÈæBMñº»O–`r38èì<â4|e5Œ-ÿUÑV;?Û÷]®ÞàR;^ëȬ¾n#DIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRÖÅ0æ pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøÏø‡áC Æ 2 ,xþcahþ í@Ìþÿ?‰äšÁ˜…áPÏ 92`³þÍüÏüA~&œ¡ÚüIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR̤90 pHYsb&2 tEXtComment0¯ó½ª>IDAT™cøÇüƒ0T0(°`8øG‚¡ýÿf`ÿ߀ƒäûê@êAú0X€Íù4ïós9#·Äæ³IEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRÖÅ0æ pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÇü‡áÆ 5 dTÈ04þãahþÏÃÀþ¿Š0ðÿ?€Ùÿ70´å›ÿ³0ê9Ôÿ€ÁlÖ üÿüG»'ÉLðIEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR'“‚3 pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÇø‡áC Æ < jXþgahþÏÀÐÄìÿ€øVÌ ”kâF ú€¨ÿМ 6 þY…#ZˆÎTGIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRtÏúÓ pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøÿýÆ ì>0È1à >PÃÆpàCãÿ&0fþŒÙ¡Æoc&†u@=ØIEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment1Øô<IDAT™c`€ †  ¨ Y`G@Å$àšÞžq'=å¸IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR¯tPñ pHYsb&2 tEXtComment1Øô< IDAT™ch`a€ƒ2 lHA2 Àzä]kf!IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment1Øô<IDAT™c`€PôH$Áð€¡Šì¹)ÁIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR æI!Ç pHYsb&2 tEXtComment1Øô<IDAT™c`€† ô aŠ ÈÂ53õÁp>eIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment1Øô<"IDAT™cØÿƒ¡00<°`øPA,zPRÔÕBù¾ðï`y¾IEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR Â×™\ pHYsb&2 tEXtComment1Øô<IDAT™c`€† ÐP”å@èý÷ç•g!Ž2ÙIEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR Â×™\ pHYsb&2 tEXtComment1Øô<!IDAT™cøÿƒ¡€ä †D¡0ƨv$ÝÈ—å9IEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR Â×™\ pHYsb&2 tEXtComment1Øô<'IDAT™cØÿƒƒ8X0<¨`ø€‰,°£ PÐP¼vXæi{MIEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR Â×™\ pHYsb&2 tEXtComment1Øô<&IDAT™chà`€€† ,°¡ †@dEpq z¸Þã F¨:ÏÇIEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRŸøAÐ pHYsb&2 tEXtComment2Aý܆VIDAT™%̱€ DÑïJ´`ÖDZ™—Ñ%\hàˆ‹ÎÍËî/½:wp®É×(˜ì,+DÉršÓ‡CôÛÕ¢O"æAìs†d7©NÄK´}³šB¬*êçÙÀµPÛô7û݉ •%k{·D·IEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRû°( pHYsb&2 tEXtComment2Aý܆NIDAT™˱€ CÑÏQX2lâ*l¢V®Å(qK O \î¥ûôS¼AÜhnŸ*±U’å&VëÃaÑñ%wY<«Û­p½ÐÀmñÕA?O¦%×›ufIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR}$Z© pHYsb&2 tEXtComment2Aý܆QIDAT™%̱€ DÑoDH Љ­P 36†•¸%Pã¹jð6ºDˆØÄBLš·2¬[•¬JQc·¾=í°$î쮸Û;3@ ·|ýïýçîÒ•e)Æ–* VIEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRÒ0àÛ pHYsb&2 tEXtComment2Aý܆SIDAT™̱ €0 DÑ/¥  °‚@Ì”’Éð(Á%J¸ ëIWÜ™‘‚—ø¯S¨Òª‘ÜÈ})Ü^˜Ì&êÏ-òd9 .è'8h¿‹)Ùúõ#Ú"÷ßÎþIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRl3~ pHYsb&2 tEXtComment2Aý܆VIDAT™Ì¡€0DÑBB´’(!„’2C#WÂɆcA<·û‰p¢s2MŒD•Ë»'Ï„}´«²Ê&½>ƒsON[Nü›Ñwü5Šzê¿:I-.äï‚RIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRl3~ pHYsb&2 tEXtComment2Aý܆QIDAT™-Ë1 €0Ñ#hÔ°Ô‘‰À„ ¤P%¤þÈ@(h.o<Ú)¾A<ÈeJwÔL°dW­ØÞ~‚x“¿ÙßÑüF6¦.Ónýç*½ú¼«PIEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRÒ0àÛ pHYsb&2 tEXtComment2Aý܆PIDAT™Ì1€0Ñe(()8ˆ¥8&Ààä$\™‚áøCñÊ]btžÁé8Få’f•]’œæÄ-›4™œ7©+êÊ/`=«Í¬Ì?ô‘fx(È#ÇSIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR#Z¤Üñ pHYsb&2 tEXtComment36úìWIDAT™}Ì¡ €0Ñ#HF`T¾«ì¬R‚@²BÙ A(?xòŽ;ˆ Q­¼`É‹H6[;lµÍ’ nÜ}m4Ç­þ»Ñ¿à½_EžôuV;ŠH6›IEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment36úì\IDAT™M̱ €0 DÑ‹((Q9)EJV2ʬàRR Ì!"Añ\ù¢W"M€IÕÙe5"¶®ŠþcR#ç .½Ý#Ô…šð®ý8?Ú*’3‘ ¶8¶ðÉH<¾.úIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment36úì[IDAT™u̱ €0ÁER¥r!-\-¸Bäçc‚I^Kă¸Ëªí‚²Ãf§…qØb«eÑ’7÷“w}ßoý£Î­Í­ìVr‡Ñ&¡Y”Ð ¹Ë8•“³%IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment36úìQIDAT™5̱ €0 DÑR¤ô%«9¢`-³IFH™a¬Ò+®ø:\˜‰±ÑÁ@— ¢Ô†ïøA4·pE™‰¾â®¸-ýûü”FNï¬>¨T%9§c°IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment36úìVIDAT™mͱ €0 DÑ(RzFå¤ Â*A,’(©0‡(Ò ëuö7YÄ5‹sÑì*QšÛv‘‡Uó~†¸cÜ|RÍú î…÷p·´ø÷ªó=9Å‚-/IEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment36úìRIDAT™mÊ¡ €0@ÑOÈQK•Q¸¦‹” *„£E“<ùðÀ=R*0Ø”hìÆ‘ðL ðHŸ×7WÜðòçìbf èŒ.Øú±ý.œâµ ^IEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment36úìYIDAT™mͱ €0CÑR¤dFÅEJV‚IÈ))‡JGñNºÂ6‘Ä5ˆѬ›->ÅÏZÅa±ÛbYÜvå/×è œ g¢ý¨(îJ/oãF¡ÉÛ³Õr7‰œ“{IEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment36úì]IDAT™u̽ €0Dá,R:‚£¸Ú…¥#¸JÀE".`)(Æó§µø¸êgbò' úCÖcœE™¬·(ÎZÞ-Ü¿×îOÉŸõ‡[·Á½è^Õù䎑Z±]þ•:œWø‘çIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment36úì]IDAT™mÌ¡ €0EÑG*QXí%ˆÊŽÀ*eF ÁTÊ-XÄÉ?ïê¬*ëÀ.©ÀH¥³2ÖÍj FëŽÖÅ­Ýðm»ÆæµÿéÐʈô Ñòd•Ù:›câ8o:¢zIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR%Œý?ì pHYsb&2 tEXtComment36úìZIDAT™mͱ@@EÑk6ØPIZ{FJÐÊêdK 3Ãøž!ÎÏîûœYlXÕ øBo¹ˆñ5Í"KânŽO÷€ÝÂqx$êò˜,K$÷xOÞRëßXCÊ4®³Þ<IEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR%gÊ„ï pHYsb&2 tEXtComment36úì[IDAT™Mͱ À0CQ….=‚W¹Ñ ^L©²†GH™"pù`)jN:尞ͺe]˜°BÂÞCÅ¡j«!pŸeùz«d(éäÔrýÌø±Nö:}{®üo~‰$>̬RÏIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR%Œý?ì pHYsb&2 tEXtComment36úì]IDAT™]Ì­€0DáÍ ”Dkë´†BDF0…ønÎìSLÖ™¬&«¢HÊX9S¶æbm» VtèÙààoéÝU6a° "Q?åÏO·£—ØëF˃•Gzá Em:bŠì¯#IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment36úìYIDAT™}Í!€0DÑO*«NRäJ%®7¨¬hXƒD¼¬š¿D} Q­›`)b=íñÚí°IÜÖ½kß_ã´úÃÍòŸ¤,4š{ev'ôº¾ fb@€4„y`\Gþ‚ÁN(Ÿ×$EIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR&ö|fˆ pHYsb&2 tEXtComment4¨žy³OIDAT™mÌÁ €0 @³ ›d•n’Œ›´b>û¨nHX:ÉòÃð®ð6¼왎`™îСh;%EÍK¡“ ˜Þ6þÉúüøÛÂåŸGÂïÀ,KIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR%pè& pHYsb&2 tEXtComment4¨žy³HIDAT™•ËÑ À иYWqíf.rÅülAš½šðþð!8ă…ÔWf¸mXÁ%Ý š~MŸÓ2*vÒÒµáνøMýÚù==IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR%pè& pHYsb&2 tEXtComment4¨žy³FIDAT™cøÿ§žáÿ þÄ ø71C=Ã?(þÄ?@Ø¡žáPÝ ~Äø07õ40 ‚öŒóˆÁêROEX?ˆ©IEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR$J¿œ pHYsb&2 tEXtComment4¨žy³@IDAT™cøÿãÃÿuüŠq3Ô1üƒâ?@ü„ê>Õ=â‡@|ˆzP;ƒÂLâ0$ðC†Ç%ñÁIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment4¨žy³BIDAT™cøÿ‘áÿC0:Èð¿Œþ12ü£@tác#ÃçF†ÇŽd8¡ˆø¤ ® 5À v.çѾ¼“IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR%pè& pHYsb&2 tEXtComment4¨žy³CIDAT™cøÿã?Ãÿõ ÿ@ñ(n€bþÄ€ø‡?€à@üˆ?øÏpˆÛ$240 F„¹Äâÿc5JsãtIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment4¨žy³MIDAT™cøÿÿÃÿŸ@üˆñ(n€b†pø„þ1üÊâ@õ¡ø8·Å˜À˜Lÿ?`1fö4{°áÇÿ¾˜Y¸–¿7TIEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿãÃÿu ÿ á@ÜÄ üÿ€°BÃþT÷Š?øÇpˆ˜PÔÌ|  cá?þ•Iì.ðÜvIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment4¨žy³PIDAT™cøÿñÃÿ@üˆ@q3@0þa‡ ?€ò?ø3?âç@|þà?†~ ÝßÀÆÀÀÀÄ€ þ7ÔAÌ:€ƒåÐ0Hüã?cRtµ¸€œIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment4¨žy³CIDAT™cøÿçÃÿ@ü¡‚Ù ¸ˆ ÿ$ücøÂ@uÔ1<âÇ@|ŠPÁÿP3Qpü<çQÆU$m0IEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR& iMB pHYsb&2 tEXtComment5ß™I%OIDAT™uÌ»@`Dáó@¨•[háê@(0®õˆ Á—ìÌr¹ÂÂNDŠùåÜ¢±Ú*+Æmó/‹Çò!t™FQüŠܢêu½4=6ᫎtIEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR&å«&| pHYsb&2 tEXtComment5ß™I%GIDAT™m̱ €@Ñ‘ ®Œ+õ>ؘb`kßÌlÅÃLá…Ã`cqñÊáôì¨¡Š šÐèxyίì3Q B#:›o€62 Ð;2IEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR& iMB pHYsb&2 tEXtComment5ß™I%PIDAT™mÌ1 €0DÑ/–Á£:×Ú£ä›Â:b„¯˜O6¸€6¨ŸåÏj‹Í6‰àUú/ÑyÌÚ•AˆCÿq7µ¹³‹3u†È:p¼“eIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR& iMB pHYsb&2 tEXtComment5ß™I%PIDAT™]̱ €0CQ# JF`U3AV ›„  £Ê僑îUg[Q­¸$îqtÎðÏþ*·F éX¼¥çÏf¥• }±£Ù2›9Ü9b?šeü°7IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR%Œý?ì pHYsb&2 tEXtComment5ß™I%TIDAT™]̱ €@ƒá_,,ÁQ\-nvNà '.p`c!Db.üy¡ÁÇùá#a½tÒJ# ²%ék•WÆ×.+±Ìõ@1iâ ‚¦?å²ñïâIEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR%gÊ„ï pHYsb&2 tEXtComment5ß™I%UIDAT™MÌ1 €0ƒá_:ººy½™õfï(zƒºU(ÔH_ÁáH(3šüSâF­ÆãnIÝ*“Œ2MF›owºä²ë9õ2Âa ‚è/.êw{ACKdÒ~IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR%c?TÒ pHYsb&2 tEXtComment5ß™I%GIDAT™UÊ» €0†Ñ/X¤ÌŽâj‚‹ÝLâ/.R«›Nyx |h¸^nÿQ“°ˆ-BÏÞ®¡Lš2ç¬ìÙ+V0e[ÊmÄIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR%Œý?ì pHYsb&2 tEXtComment5ß™I%OIDAT™cøÿƒˆPð(þø¿á'Fà ñò@ÌÄÌ@ÌÁþ7ñ†ÿ€ø6 ”Å€ú€æ0ðÙö`ó9?ÒFRn¿IEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR%c?TÒ pHYsb&2 tEXtComment5ß™I%JIDAT™]¡ €0†Ñ¯©@vFélXëƒp [‰â'¹/u.èàßÌ©ÿCxÅ 6`9&î„&dÑß-®hC s*ˆ]æè1Ïáâ%ùIEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR%Œý?ì pHYsb&2 tEXtComment5ß™I%NIDAT™m̱ €0CÑ((™‡éb‰X1Ù %E¤‹9Q¦x•åO ]¼@ÿÕ$ê%Z¬Õb§¶Û¦ü ™#©¯|»5ñÜÿq÷T4éz?q;{4IEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment6FŸfIDAT™uͱ „@Cј‰ô$¡(*8͉ƖN¶„ ¬†àB‚X–l"œDKÕˆ²ˆ>âšE{¬¢þe.Ù6œÿLø×ð0~cn¾9²?:œÝ(2ê>Ñxlù*bÐ §8<ŒšÀüIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment6FŸeIDAT™mͽ Ã0„áרàFY$Å QÈbÊ&êÒºTqèóÙuЧ»b,D·f5EÄ$Æ,týtûÓ^¢~¢ò°Lɉ2ïX æ(}.\™¯³Õ¶%votoùXu¤ÿ>NÊo°æIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment6FŸdIDAT™eͱ ƒ0á“‘œÎl›µ¨ˆÅ›x—ÖûcH:Нºâ"ª•&'d ÚuŽ¿œÚ;çøSÞÍÇÉ—ÖŒ¥°9aÙ. ì7è´>ìÿ~xÀj$Ï‘Bâd¢r¿¿Î@J¤{.IEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment6FŸfIDAT™m̱ €@ƒá_l\@pÁUÁ\L7¹,¯÷|‚v_’`¥Á²K;F, «Ei…:‘qM"mÎÄñŠÔ )P‚ºµ‚ê"ÑœŒ%ÉGrY&íöJª³NÆA°ûJŒÂ[…S0{ó¶ü9°ÂÇý:VZntï\æ·/_M=côæ\®IEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR$J¿œ pHYsb&2 tEXtComment6FŸ`IDAT™]ͱ@0@Ñ'Î‰Ž XÁÖR±›d¥"ç?tŠÛ¾‡ªG³C“9z4,(‚4B6wgáš>iŽ‚¢'Œ-añlZ8j&üÄ×þrÆsŠ'™kn¹­“±o%L=ƒgpË.IEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment6FŸeIDAT™}̱ ADÑ/·°É ,؈`c‚¶¥l`n0Ü8×€ÁËf>öO¶ÿ¶IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment6FŸgIDAT™eÍ1 ƒPEÑ+ù`#d7"¸¥, àH ·õ݉K°´x8y±µ8Ý›;dR¶udÈg#ÔÚS½ØG›Äf5¿àE¼;â,4î<.XÐÞÀ÷R˜½_ý³úvwãàã¢ÈE?w<#òšŽIEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment6FŸkIDAT™]ͱ ƒ0EÑ H¦s6€M`˜, ‚£,f*Öð.)¬÷ó“(MŠS]é=ÌÖz¬º±,¬Ü(ÚEœóW]EÙÜUd7¹Hj¤ž‡½Á`écüóôþ³+ÏH¹MTߪÜñGìÐ †°@FßdÆCIEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment6FŸaIDAT™eÌ!Ã0CÑ_t¬´¬×(ëµÆ–iËQr„Bƒ(ž¥‚Çì]°À-ê‹ð$Æ,ú*´‹+Ú/QýS²)ºŠ"DÍD› œ£s<9­wöQ&Yœº‰naŘ六vd>_Ia—þ‘®ßÎÞOýâ™ú¨Úص×:ÿN7è_ã$CIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment6FŸiIDAT™=ÌÁ ƒ0DÑ[27ÒtBZI%à(uQŠKðÑk' ‰rxú‡‘iG= êJByAŠFŒvw³Qn3Š÷8ùžYÝt¡%n=-õ5(ÿàÂßûd‰—;ÚHyNTšÿY´4Ô9iž=*IEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment6FŸ_IDAT™mʱ €0@Ñ/Ò\@p\,`ÄÅâ&!¥Å‘óÔÖâuU‡Š©¦4 º›^h^¸3 uÊöÉjx,$):öfúWÂÿ‚ãå8íg ”9P¹ˆ´Nnßà=aJîæ»IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment6FŸnIDAT™mÍ1 ƒ@„á_Ò,äB."x¥@È[e*¯±GØÒⱓ·Ú¦øªf6¤y( åÙ„:§öŽ?óu+sø89ì Ž1…[V:A1´l¿æýÝù(±q²PcS‡ÿWÚ@€;7µIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment71—( [IDAT™5ÅÁ €0 FáÿPð"t¡‹.&Xðà®q‘¸àÅC0FÓ>øx¸TÀ ž? æ‰;¬ÜCc!ŽÌfv3›Å4î‰ù$Á] ‚³àÉQ¥îPy6ÏI|wdIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( SIDAT™EÃ1€ пéÆÊÆ5ܸ–›&. ÂEØ\;v0VhIxÉÃ#Œ"7€S¯ðpäxÓÂ;„z†Ô6¥½ÆÅ~íëf–¢­ýa“Ø<ÿzîKÁ4sU£IEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( OIDAT™cxþ¿áCù ò? ê0üáþ?€âƒPÜ ÅÌ@ÌÁÿ@˜‚ÿÈCð(þ`ÅõÀð~Á2ƒI b»1IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( ZIDAT™5Î1@0ÐQÐiu¹†Îµt“Ü$Æè¶Èø6Dñú‡Ãˆý"<ðš  ‘mêàRMŒãç$,Ê.AY¥*jâ–ÔŽ`6ço"¢øÌ>!_ŒƒJSÂÉèIEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR&ì@† pHYsb&2 tEXtComment71—( XIDAT™EÍ¡ €0Ðï°A `$6€ÁZ%,Òý²¢á8èÄÓ‡¡x3¿Ô¹ƒ3’ÆYD³«Å¬ª"®Ú8"?z"Nz~¤ðjSQÂô-PšR3-IEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment71—( XIDAT™Uá €0ÐïÀaëXÇZ8pHF`°@ë~Â…ãJ+ÊKT‰ËnÀï„Ú:,â°JýPÆ„ú<ØÓîÅÙVéÓä-!qO0 _<4 öV¾zzSa¢­j®IEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( [IDAT™Eñ € ÐßYʬÀ¬äšXXº„E0.p%áü£/yPÜ`ؾg5°ÍÁW­ ´°È˜ùâȉw>ÞÏ‚Ö[Aí½ °¬ÿ¬càøN*ì}Oú)®IEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( UIDAT™Mα €0 Ñ(B—6kб0+e”Œ:!Æ–-ÄI¯?ÜL(À'‹VhbO¸Z+ZÀUmàâ2™Ó b4=˜¦¢¡ÙÔõgwòò0½,xG›nƒ—ÕIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment71—( PIDAT™Eı €0 À߀lØ +±t¬”E@)h]¦ˆ0¶ ¸Ã©‚ ¼–Oà±4!‘61U*nuƒ¹QÐ]KFæß®&ӿйVÖM'/GÑIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment71—( RIDAT™EÃÁ € DÑñäQ; ;°%;PâÁ¶¤‰ 쑃q ?ÿÁoÏZ#ºs‚KffŠÈÓ^ÔWƒàý9ÁCÉÌ…¬Íe´ˆt«|i¶FEIúîIEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR&ì@† pHYsb&2 tEXtComment71—( VIDAT™UÃÁ €0 Ð<¶t\É ,8˜vKȱ`1F’|ðP˜P"pBG x ³‡k‚<ê î‰t¶Iîv´ŽðÈtí}7}ñ–7Ó Ñ MˆÏî˜KIEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment71—( YIDAT™Eñ €0Ðß™ÎÖNǰËZv öΤ¸H‚ ,¼"xþx‚.¬ßéí°tmn¸‡gÍT8‰ yãg®þwmskÅÛTŽ6”jã÷Ty@ñPGÖ~×0IEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR&ì@† pHYsb&2 tEXtComment71—( XIDAT™cxþÿÃc ~ÀÀÀp 7qÿ?y ÞÿÇ€áÿ.€à ø?âƒ@Ü Åìü‚ÿÈ#ð{þÂõ@ ´ûâ‡Püùÿ^ÎP9ýû ‡IEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR&‚í8 pHYsb&2 tEXtComment71—( SIDAT™cøþÿÃC >ÀÀÄ pÜäƒpÿ ~ žÄÿX@qÃÿ@üà„âf(f‡àüüG‚ØCð®ÿÁð„ÿ#ðCù±OG¢å³IEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment71—( VIDAT™5Æ!€0Àuà°¸~Ç·p x ¾ [¹¢¡Üq‡˜dp"Š 5&à9Ð"dÕa倢Í墛Å"*âiLVà¯'’ÍYÌî¢; _a¸O?”Í|³IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment8¡(5˜\IDAT™M± €0 ¥ dVÉ*l”‚µ^Ê"aƒ”.Â$B¢¸ê}gîUXu¥‰l‘|½Àá,Î܉L¾%¿I›P4÷ŒÁ™"E›»öyÿ½½{Guü´Y}3¾NÕIEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜]IDAT™e± €0 /J‘5ö+ÚiÌ÷O—yŒ5`²fáIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜`IDAT™-Œ± À0 ?¸p™4šF1¸p™•d²ˆFP鄼#N ÐfvÄáXs»¢†¢ Á5ç&ó®C?J8Œÿ–h¤ß ,”[п.lynž;l5ÒÙ1¥Ow$Ü4V&êõiIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment8¡(5˜\IDAT™U± €0 ¥pÉd4¢`-K,ò#¸L‘‚)ÅÉ…Ïg4#¸bÇE‡eÅÚþXs”$Êþ ©™˜Ž;*NÊOèNô{;Ú«œS¾ñ V3‘k‘€5IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment8¡(5˜^IDAT™E± À0 ?¨ðÍ#dYKÙÄÙ@¥ ò  ñÇã)¾ ä*º+ι(I|ðÒ¼¢í̦#„ÛéNºÅmŠË>I€îDþ;Œ9Ãê/…2”>ð=IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜ZIDAT™=ÌÁ €0 Fá'9tŽ–Q”\«â"ÁcEü+"Ễ¼0J„Æ9.çÌÊ>&(¿Ši¿¥³ºèº/jäbòWPé1ï ‰©µ[ýÇô§Iן¨êԧŰq0½¼¤µ*IEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment9Ö/eIDAT™mͱ €0 DÑORÂa“ÌEˆÅÂ&!eŠÈÆt¯9ëÎè%tH%PÖ‰Ü=·xNu.=¼ù{?òlÃÙ–Cðhÿh“ h5%¢9¡VÔÁþB›…º˜]!¹?A7D YIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment9Ö/lIDAT™MÍÁ Â@Dá»$—ØHб  )À–ö”:b{ÌaÈï *>˜Óâ!ÄDcd» Ô½°¨ŽüÖÇî¿XlV¦^³;ŽBt¶Ú>|ŒD›ˆÍªˆÙ’¿{ÑN¢ží&ž¡K<Í7–†IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment9Ö/gIDAT™-ͱ Ä0ƒáÿȃ4†[ p+d€À-æ"æó(!e aŸR|THô·8™ÆB%Qs¢((=˜ÆÛïœw×ágŪ ­áðZ0tI…qÚ±Yf41v{ MþžEûØW|b:Õz ÓIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment9Ö/aIDAT™e̱ €@ƒá_lpÁUÄBq1ÝäF¸Ò"Ü3jiñ$ÄÅHf ©ã, {|ê€öµþìî[Cf5Dgþú Äey´…H"<ˆJ”ZäV¤^“3tÂî>µìYûIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment9Ö/bIDAT™mÍ¡ €@DÑO‡BŸ£ m!!4 G\X&!A!žÙìþ%ZQ3…Ì^3GíØnhÒgù›­ÞÝ+¾Ç܃èÍóp+”_×H”ùµˆhÄíÿJ¢ 6‰3ôL«=éŒ}…IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment9Ö/jIDAT™Mͱ Â@DÑn…$p)–h‹à‚³ÜØ•rD¤ŒXF@@ð²Ñò)t•…qŸéº°*X_AI~“•?ÛÞA³^aî„{AžÍ­¯™›¬ðqIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment9Ö/aIDAT™uͽ € Eác°$q×°p0 1.†›à”/<ñ¯´øº›sÑF<G,©X¶Ò²(7£á×únb©&HP;Ô^‹ÊÇ>‡æËˆFáú.FÈújv•Üp?٫ЕLIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment9Ö/gIDAT™=ÌÁ Â0ƒáŸT ·²AG)kq@¨‹¥›d„s¨ü0"BÖ'ùb‡øæd¥³Ð˜©LQæPbŸ)¶¿·íÃ&(O¨à䯄r&4œÖg[ˆ¶ÕÊ‹ðPÑ'Ñ®vs¿ëBj>Nö´ò˜IEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment9Ö/dIDAT™]Ì1 ƒPÑ?؈+d#‚Û²°Ptaq'o –½†T)N3ÅPI.f‚ÈGvl*?;Ú?OÛ¾`µ£BLpRü*Ô¾ j~ÉO]3ú$Z­I²Mâm£)oͪ@¥×à[ IEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment9Ö/fIDAT™mα ƒ0DᇑœŽÈ"ˆ¹¨T¬åQ<‚ÓQ ÿr!mН¼§CGpuÁÉJc¦2R§™]™N‰þ¶ýÁÍs6+‹‘ÜHî%DF××ðsZmFuE%Ðn½?<‚ö´WðV|½„>Õq™¬×IEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment9Ö/gIDAT™UÍ1 1„á_|&¸Ø£,x1Ae/¶Þ$àRZ yNì,¾f`fÐItDc£õ•—*û°¬” –ìñ§8›öi„{áðV0.•ÓJÊ>ÓFvk7ù´³Åß‹]ÅqïÔØ@rÁ? ÞIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR&èµV; pHYsb&2 tEXtComment9Ö/hIDAT™]Ì1 ƒ@Dá 6Brñ @ðb) ^lSå{ˇü Vaøš)þж“•üœHe⣑£ötn¸í Ú„w…¤°@ =žC±nÑõÙ¬8¿p »p'Ê ò#lÁâ²~®³A¦©n:IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment9Ö/bIDAT™M̱ ƒ0Dá‡bF c wYËe¢¬›xÊ+,¿•†âkžN‡'Ñ(\dª2g[ùõ%@òÓçáßö0vgƒ#CúkÁñá6¬XCÆWÁ5Âß0‹ž„6QßÁºm¾=̲ë&IEND®B`‚leptonica-1.70/prog/recog/digits/digit_set04.pa0000444000175000017500000007430712251652126017512 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ó½ªGIDAT™cøÇÿ€áû†Ì@Ìø€>H`8 ÄÍÀ¸ý‡;3àÁ (¤¯ýÐ,~ð€áá éŒ»þ°?qP/±ìóqIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment0¯ó½ªIIDAT™]Í¡€@ DÑÏ "¯¥P‚¶–¡‘”y’s O¬ùK®"¡Mœ!ö!{€uh¯œþ{²s á\ªvõ£~ÒDoº9'øœ)ôIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ó½ªOIDAT™}ͱ €0ÁE]”æVÚ2¢‘s~€`‰ˆ`»åÎÂga›èMœ&v+¯•48äiølj|T‰†Ðhy×¢´Ð/98®ýCIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment0¯ó½ª@IDAT™cøÁ~€á3<ÀððÆÇ@|üƒC;ÿ`c~"1;ƒôAõÍ: Ä`x´d×?þy-é ohHIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment0¯ó½ªEIDAT™cøÃ€áó†Œ0`8üàCó0nÿÀÀÀþùIÀì`ý 2óð ù@;>íúÁ~€áý§,»ÿIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment0¯ó½ªJIDAT™cøÇÿáó†Œ@ „0ü`Àpˆ›Aø‡C;³ÿ`  À1H_óˆ9‡AæšÏ±ëû†?@ ´êÕ2o²ýŸFIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøÇþáó†Œ@üàÃà 0c†ö?Ș†©mþÁ s~â  €¶0üÚõh'Èîÿó?+J6|.Ë_gIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøßþáó† >$|`øø¡€áá†Ç? ÿ€ãæ? üFÒsðÃA 9€fMgøÁ±ë?ÿÿî9¶wyÑIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment0¯ó½ªFIDAT™cøÁþ€áã0|ð€áà‡†Ã@ÜüA¡ù‡óvq;ƒôâƒ0$€ÍÙóƒùÃ?þwÏ+±nÎrIEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªFIDAT™cøÇÿáó†ŒÀðCÃà ‡ÁX€¡ŠÛÿ00°ãÁÌPÜ Ã?ÀúCñà  Àv€ìÚ üŸ0t¼ÆGÅIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment0¯ó½ªXIDAT™cøÏþáó†Œ@ðCÃà øð†fþÃÆíPÌŽCÄÚ@pó†Ã s€øñ ¹@æmÚõd/ÿ†ÿó?º 6ïTaÑUIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment0¯ó½ªKIDAT™mÍ¡ À0 DÑ« ³’w+ÈZt wƒƒqŠ¢¯‡?F!t‘ÞFÜA<"ª|±Oǯl˜öêâ¸ÂÑè`IÑó7Œáo-ÎAMçIEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªSIDAT™eͱ € …áßPÀŒr£]©a1Ü7 ¼Âm,¾ò½Ÿ ÛŒŽÑP'Ô>eªfvI–(7Kpñ'}Êkn,súÏÕ„Vź:³7¢=Ù-ªTaIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÏüáㆠ€°€áÁ†‡þ€àÃ@Üü‡Ž™±àft ÒÅ ý?Íš 4dË }ÿ˜?ü1QËrIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÇþáㆠ>ü(`øÄÿ0c8nþÀ‚™Ñø0|Œ¡ú~0<üaÄ €l`ø´ëó†ÿì–l7ÅE¶IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<4IDAT™cøÃ€á71 ³`ø¤ÿ áDâ?Xð y  0ÐÄ€øu.;°C¨IEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<+IDAT™cø/€áû†?@|ˆ€¸Š@Åÿ¡c~Ò1ÈtÐÀÀî.…b‡EyIEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment1Øô<'IDAT™cø'ßÀð‡¿¡ˆ øÿà‡ˆÿ‘§CÍA’Uá(éŠO†IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment1Øô<5IDAT™cøÇ€áû†ö HøÿAÆü”á@3€Xˆnéÿ@ü_,¶5Ýè>|IEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment1Øô<*IDAT™cøÃßÀðˆÐ0Hì ËCðtÌÊGVcƒô`š‰ 3÷$¿é{}ŽIEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô<#IDAT™cøcÏð@ž†>È3ü@Fö„’âÌ pð‘®\š ?IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<+IDAT™cøÿÿÃþ ÿØ04 á@±? q*b°Ù `üˆv×6­¥ÂÛ|IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<1IDAT™cøÇßÀðˆ€˜J?â@ü†Ù‘Øò¤a9?€ú@@¬ÿ µ(¨Æ‹ßIEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<%IDAT™cøÇßÀð‡½¡ˆpHœJøÈL$âýo`¨ž&¾#vIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<.IDAT™cø'€áÿ†ì0ˆÿƒ"G üh^ƒ 4ñ“X/#ès1IEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR Ü0®_ pHYsb&2 tEXtComment1Øô<#IDAT™cø#ßÀð¿ ƒÄ~åþPƒÌÁþ30“&NÅH.AIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment1Øô<"IDAT™cø#ßÀðƒ¿ ?à‡ˆáÅò$`¹ …ã%ûÁþš IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment1Øô<IDAT™cø#ßÀðˆÐ0Hì•ð~ ™ q;%Ó¾QçIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment1Øô<1IDAT™cøÏ€á`?ÀÀ€„Å~@å¨0`h`p``c†@úÿ¿»1Úƒ-¸ÒIEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô<IDAT™cø!ÏðAž†€ìä¢v8øÁ½eÇÎóÝIEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆^IDAT™MÌÁ €0DÑrðh ¦-ÅR lÃRb'[BÀK!ëÜáÁÀÀR½Ð“–À.#ÃPÀ÷ÍeÛ*+šÆ~´Q¨ÓI™!+HƒÔÛë»ÞUÂjü+féÌÂXIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆_IDAT™U̱ €0á –Á7Z&ÅÁUà ¿¤õ!ZxðµÇV U"Ñw‰1'&±uêFïf%.‰+»ÁùãŒâhÄÖå4V7Æà:¾ìgÙup—-Þ®Ô¿XIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆YIDAT™M̱ €0CÑ((3BnVÉ(A)X+lrl’%Ñ`ëU–LN›·•D©ÆîFhÆÒ`–ég“¢mxbTgRDwh\«Ñ:œrHæóOF==úy,Cí%4$IEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment2Aý܆aIDAT™Mʱ €0…áßÊÒÛÀÜÀ•² KWЏHÀ®L!9/`!Ç÷•Ò)í2+OìÚ‡ÛŠNïnß-7KŠE×+uPžQ(³ ‹«ÿWHë‡OËV¦ÍÝ1w XãôIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment2Aý܆aIDAT™EÌÁ €0 …á_ï…p÷Æ7‰Bd?"Ù‚@®ÐK'K³*ßÕ_âºõ’p…®?Ï`ÜãF6ƒ9œRžÀÂæÛøDë.zñpçIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment2Aý܆dIDAT™5ÌÁ €0 …á_<ôèv¥“ˆâÁ5¥n7èу´¾¢&|ÂKȽ‘£v$°Z`3Kž.A+ð™µ_äT¦([¢Qi쌻߹Oš<–!V£îxýUçý(áÅ-Õ®B?mIEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆]IDAT™Mɱ €@DÑ/Z‚׉­\'j¶tb`cˆë* <øX+öZ¨9'V%¦¡@í*7þ,ÞL·„ea£ âlÄÑEöŠÁvÂì20¼¾ÝßJ¼2./ 75LIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment2Aý܆_IDAT™mŒ± €0 Q¤Ä£°+eBEÉJ‰X$là2E„±(¨xéªÿ?lUÚ¨T”Lä¬3{‚3(Û‹P¼7ßYŽXRÌÿwPú$´EÐÕ1ạtÜ ‰¿¸§Ç"ß,{:><9IEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment2Aý܆[IDAT™cøS€áÿ†Œ@°Á¡ÿ€ƒü0fbf4ÜüÀá<ÿªûßp€á?Pï?æ €æü°s`øQÃÀðñÃc > ÄÍЀ @N'¸¯…©JIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆]IDAT™]ͱ €0 DÑ¥ d² «dDÄ"Œ*Öð)SD 6 –^s¶ÎT/'dLäÀT xå~’în½YIiGŸ…¶œÔÊÒá2-°ÃëË‚~ŒŠÛ)ôÀ!IEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆^IDAT™EÌ1 „@ƒá_,,míömN"Ê^kÀ‹ÄŒ…8fEØÀ×$Ž^¨ñ͉EA_~ ³Öš×ì~õ^•¨YÔÙZquâôÏñI”1د`³Õ¦Áxü3Y!n“*•¥›2IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆YIDAT™M̱ € Ñ#–Œ £1‰ÁX¸„E~âØY ø5æòÚ£Z¡á)EÏ&N-0(ó³GV]<= =©UBÓOç Gƒ]å p¯ ú%7çV-ärëpôIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆]IDAT™Mʱ € EÑK((Á?“…kA\ä»vüZYœâæ=šWªS2‰5'vb}A0Þ¸°šÃö¡‰‘•QÌf‚Ò£Ò¦Ä= WNSší¿ ðóöhúšÂ.AmüÚIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆[IDAT™U̱ € „áßXX²›¸ “ˆ¸ÆEžPRð6Þå«.9ŠÒ,ôF»Xeì¦O,—îM-*/´ ÔEè_e…¼Aªp«³€çõþd÷ C+¬iD½IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆_IDAT™]Ë¡ €0„á¿A°ŽnÂ*lÁŒA°ÆCa+ åHPäòåÄåHΘҲ™gžé¡'ƒô_¯ÚNÉÖŠ‘W»4R=ˆ„ ‡,ú,èÿsUþi/…ªoŠ IEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úìTIDAT™cøÀüáÆƒ >0`hüÄ?Pé‡@ñÿ@ù@u?฀á?HüƒÃó@µ `ÌÄÌ0 ”cªi`0`8T²dßù­0ƒ/>OIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment36úìXIDAT™5ͱ À DÑR¤Ì ŒÆ(D •’*kÜ”HŽ# x…}>»DÝ„‚x²(J”'¦1¿Î<7 ;E CGc_~Û`[¼¿/Šd"7Éão?ôHJ7á{Ì IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment36úìMIDAT™M1 ! G,Rúå½kü–?9Ÿ`y®`!aX™ #DOâETAiòE5sÓÄ|Äogd§½)cç;w1.¼—CrÿžfÇ?ü%ø ñ›IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìNIDAT™]ͱ€0 CQq.\²£…*kiVð)©€Ÿ£‚â5²lk¤Uay±º­¬MQúèdn£YÝsÚM†9ô?‰•ÉnÓûg„¿Q,L0FôIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úìYIDAT™M̱ €0 DÑ(X#£e$Ь•T¬qˆ\R Œ#RP¼Â¾³¹fa“8«Ø•)JKl?{p˸„·ý'îüзëÙèmó°Ä¼ô¡­™JÆ÷¤ƒ¥6tÅõeµIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìXIDAT™Mͱ €0 DÑRP²‚Gc¢Y+‹x„”)"™ Y¯ñùdžÃéɉ¹8)ŒÒüsËR¶š³²37gÈTïÛG.u@‘:ìRƒCÃtmtýQÿú˜2·ø† IEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úìZIDAT™]ͱ À0À\x Fó(‘\¸ÌJŽRd F ¤ˆDÞvª]À“bÔÙ ª4ÔŸKÁÙ´+žM៰}ængž’cʶÜo]Ð!üT`X7"ë L6†bŽ?IEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment36úìXIDAT™-Í» €0 Г\Pf%¢ ÌJ·+x„”H朠è)–¿xFÔ;I\áh²`úKånÉ R=y¯-Ï¼ê½æFÁ¢í× ìp]ñy+d?,÷1ÜËQ¯ÖIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìTIDAT™]Œ± À Q°£EJÁZŽR°Æð%ÒcBªèuÅËö¡'Â@<,hT®M„„qã º§~[ÙîÔ®¾HÙ·ïuÊO­mæJ1}¬ü66IEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìYIDAT™-Œ±À ÅQ¤d„d4v¡ ÌJ¡b à¸Rü,KÂ{ ¢?ÄÍŒÊ Õ.”×]ÞÔo*31Ôaë図³Ñ°8DÒ|O4dÐñ^áñÑ6ŽnødIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìUIDAT™EÍÁ À0…áWrp-7kÀƒkyëvƒ P0/)¥„錄Ay Àz O…$ÐÆË6ÅE•ºÉO#vÕ‰MqîÜ•ñ·òá=ï@‡îrµgLHS0TÃÉ·ÌIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úìSIDAT™]̱ À0 À7*\fæQd²˜7È ?‚Ò”7I•âxôHBTbâ5¼ãdƒI‘ñÙ]ÎŽtbi/Š(oÍIõÑp`?UŽû§î¢[!˜,ÎRŸEùIEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment36úì\IDAT™-ŒÁ € ‡Ø¥P‚%Ñ‚áaYbl„îɃä\ÐÇä’ÝÃ/££aÔ=ó´Äi‘Ò?q‹G™OÔ{Ë í‡¼y½fuÊçn9~6Q ý„J\4’¬<ýWñ4ìÔç``IEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìOIDAT™Uͱ À0 DÑ3*\f%fpáµn Òs"Äk>Â6"Q7é˜,±w;á8$ªÉ¢n>»¬ºXþû.m8Š>Uwñ%+ÊbÙ ïIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìXIDAT™Mͱ €0 DѲ£e•(EÖ Ê¬à\RD˜‹  x’uöÉÄix2l3†eªï4©åçP¶d¢·î§zSs¸²µ¿`H•"éÓü5Ôïdômõ×$6¨‚€éIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³IIDAT™-ÌÑ €0„á¿8Š#Ú¸˜nb7¸GLñH!ùBÄq•£ fùRo‘=6ìîâ´f8ÃÆªì;áYôÒÖ?y——~”€4|Cù¥(IEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment4¨žy³MIDAT™EÌA À À=æÙ^ú,¡±øŠ—ĸ¶Ã²^ žC Jø êËmxÙ©ÌF…{a^ìI Àg빃àáÍ‚g™~$@w³~)ÑIEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³PIDAT™cøÿðÃÿƒ@|ˆ ˜ñÃ?(þÅ? øCã†Ï@õø8·ùí  ¢Ï70üo„š Â@ö†@¹@ ¤»>8_*´ÏIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³HIDAT™cøðÃÿF(f„àHøÿ`þÀð¡ùÃG ~ ćø8÷q;312øÂ@1d 2ëƒåÄÿ? ¥Ì9¥2s†»IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment4¨žy³QIDAT™EÌ» €0 EÑGEF`Üt¬DIÄ" p:ˆpƒŒ°u$Ë?µêj{X‘ƒ\7®ÐÓ×fnFö¥¤/2õû«ü\“Œ¾1ïúE[Ò$<EIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³KIDAT™cøÿðÃÿ@ÜÅ ü‚ÿñ(þÄ?0<âÃ?0´ƒ0ÍTÏÀ À€ úüÿ@98™©„á Iw4·ûL¥IEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment4¨žy³SIDAT™=̱ €0CQG,ÀÈ €‘@”Ì@•ö)"ÂH8éUg[é6¥KÑÃ}ă)¬¦³¸àÉnØ1ÒqjU¯Ã¿W7É¿,äÌŒ4½³ˆAÐ$$ IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³HIDAT™cøÿüÃÿÃ@|ˆ¡˜‚ÿAñæ ?€øc3?†âãPÜÄì@u P̦Áf5#ð†@qþÁ#O8ÉaìvIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿýÃÿÃ@|ˆ¡˜ˆ™0üâ?Püˆ?ñçæ ø9â~ æêág@l@ 6«aî Ø$üÿ_]›6ûöIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment4¨žy³SIDAT™MÊÁ €0Dѱ·KŒXˆ­X-¨'¯+¹ä ‰?! æ«DW¹°53Wî¼HxØ"îÚ,®+ÿLýí(­ùeMr™N6GªÛ—Ø;¾©µIEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³JIDAT™cøøÃÿƒ@ÜÅŒþÁ0ó†?@üŠ?4`xTóHa »ˆÛ`›3óRñŠAìÿ Øw5n?ˆßIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment4¨žy³GIDAT™cøøÃÿƒ@ÜÅŒ@ÌüáÿâPü±ùÃg ~Ä縈ù40@ÌhFÂ@þ†@ù ø3žÂ>(IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿøÃÿƒPÜÄŒü‚ÿ@ñ þÙüá3?? TÃÍÜÀ À @üžaĬf¨™PsÕ|Êÿâ? !¿<‰ø IEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³KIDAT™5ÌË € EчX2®hKâ‚:Œ ;†ñ¢8ÉIæ/?Mž±#bCøôéFƒ¡²{á@A¸Y´ê§~剼Ó3fC“ƒõ8ƒ–IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³MIDAT™M̱ €@ CÑ_\É BAÇZt¬q @¤èB\ ë5–eâqâZˆ.»¬þÁR™ëÎ-g:Ò–[hB.›¾ü÷9UoÂxsù>~TÄ•IEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ß™I%]IDAT™MÌ¡ €0…áŸTÔvVèhŒ@ƒ`­KHVhÂ'ëÊ+‚ >uï~zËT2öY°É±Ù9ºsþXüÝËì5q:\Ò‡·lRDÂ+´ úYG_ªc‹þ‚¶3sæ;óIEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment5ß™I%PIDAT™M˱ €` „Ñ‹”ŽdF X¤tW9'p…Œàñ„´xr|8é &+‘Mìú§ö-t«9ÊÑôý¹Äd¬^ŽERÕ—ñRH,œâŽØIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment5ß™I%TIDAT™UÍÁ €0Д\ãöG öèJ_\$à@øæPAï’ odžÀË…ˆBIôm!Ö*ʆ]ràç”&eR5 žÉÜêcT>'3Ù±©êhIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%WIDAT™MÌ» €@ P£+2Æ­r£ñ)®dVqGÉ !%]°ÄI è5–cdDtE*q&Ñe—k˜X'åTîÄá é@ƧKù±h0õL?Ûòî»vîÊjÔ4­‡dIEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%NIDAT™c8ÀàÀÐÆXþCûî‡b›ˆòÌ@uìøXþÃÿÜÄÌh˜(ÏÔÆÞ5hÆ ÀþÊb'ò…Y»/IEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%VIDAT™cxü!á ?`8ÀÄõÎÿGÃò˜˜ñCó íæõþÿ Ä `|ˆ›˜ŽØA¨¤¤÷ÐŒ@;þÈ?Ô•6Th˜˜IEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR#±“gò pHYsb&2 tEXtComment5ß™I%PIDAT™MÍ« À0ѱ¦%—f˜ÒÊv—`æÜåiµ ‰NA®¾DMÎÜóîN ² KƒÕ›ËÎB»é“àÜñûPû¤CË)ŠDÔÝIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%TIDAT™M̱ €0CÑW¤¤¥Ë* 2«xnØ \H¯°d›ÓÅÆÏQÛc­Y`!:&‘T¨^8ZwA )Xäô£;SÆ–þ?žu_›*25ÿÔ¡IEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ß™I%QIDAT™cx| áC213Ë70´ÿo`èG 1 P P-;É€aþ†ÿPÜÄì@Ì Åì0|¤ bþ ~4ç©õ%Í»¡EŒIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ß™I%SIDAT™MÍ¡À ƒáŸ«èo4Fy=²+1JFÀUÒUñ©$UñSID¢-Ñò´¢_YiÞv÷ ÖÝš¹fAÁa%ûïK›\˜§^J¾/¨r3<IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment5ß™I%OIDAT™E̱ €0CÑ¥`lÂ*ŒD‘’•² îha°tD¯°Î>n:¡²˜¨ÙfÑž_,)îîm½Ðl÷þ¸ÂyÁúIƒ㿃²^[b)¦T 8IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%WIDAT™Eͱ €PÐ|®¸ò¯t£Zþ\%à"K»3¢`ñš„Ô x5‚FEl2>«©<Õ/I¸v]ö ÔùâbÒÔÙC–¡—@êe*¸:oò,áòIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%VIDAT™5Ë­ À à#lGa4V¨êZMÈ®ðö$ªôh@|æ~0Þ„ÊÖ„°@ÔA´¥LÊn'ÚdK(ú=<0úd9'^ýti[,þ_óDü!K7E‚W›#IEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%YIDAT™M̱ €0á‹”®àho”ˆE!#8Š ÇðÁÒ.>AÅâ뎣žBå#J+Ö*òß.¦ b#oR1²ŒY=Ëõ±¹äÚ— xÓ¹1ñþûCACv2ä'1IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment5ß™I%UIDAT™EÌ»À PÝQ¤dFó( JV"UÖДé%—Oñ %Ã'1`¿ ¼›»4é²F"ë–AÔah4ô™à7|ê#¼˜PÕ-Ú\[êÇywÁ2ê٨΢IEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment6FŸWIDAT™]ÍÁ €0 @W]$£e”J€•Z±ˆGÈ“jqñàq¯Ä6F"NaRÂÐ_{8êä§dQ¦(:’îYÜêO×kkêÕÆkoíªkn¼Ÿ53ÎþæIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸSIDAT™EÍ» À P# Ö`´%‹egƒ+)Àä#Š×ÜY6F"z  ¾0ã–ós¹¡ nÊQŒPAÿèeiØþ›¿=µølhK{=q~4ãNL0IEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸPIDAT™Mͱ €@ CÑJqc‘Ñ@,–Qn„”W AñšD¶9,˜‰3€p Ø^¦£¥cg<–:JeÚÐ/¹õ¿ñ©Ž½úV×RíhOùÙãc%¼x…pIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment6FŸTIDAT™eͱ €0 DÑ‹R¤d%¯†²Ø±IFHIßBTϲÛ§U¬SÖThHt ìè#`µûU¡†âo¡šÏ,·ùׇƒi“AVf²´¸um~À¼*“ö¢ï|IEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸRIDAT™-ÍËÀ EÑëXH(ÍRbg¦“W‚K6‰btq`ø0nñQpŒh‰¤…gq£¾¢Ž¬3UÀ º‘b.ù–¿Ž~=Ö½?{=¢'1.M*“+]Þ.KÿIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment6FŸWIDAT™5Í1€ DÑoH¤äÊ“XPz%ˆo@IaÐ%JñŠÝÌîиQ%ÁUàøÅ¡‰ø?œbõ»qÙæ2Aêg7q²ýf™œDÖÕìGzÉ+ÉÖ§ŠÑIEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment6FŸQIDAT™]ͱ €0 DÑQdŒ¬âÑXìØÄ#¤¤@Jì@õKwǨâ.âB8¶œ2'ØR»¨ãÕ‘¡<6ÅÏ“}ð=ѹÇFÊóÈöÜnšÁ¹,phr’IEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸEIDAT™c°cP`°â0NâH¸áCÇ ‡0001è*ˆ†̈ƒÄ€ø€È, Î Ðc€¤Áè'œIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸPIDAT™]ͱ €0 DÑR°–Ga•(‹™M2Bʈp¶(Å“ÎÒé̹0&0^ýW8“Q§S—Ó„"›Leꕟö‘;=ª–FüÔνû‘Þ*a›ºâkIEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸNIDAT™UÍÁ €0DÑR€-liiE¶±ØÉ”°Gb\1(2¼ÓÀ 'â ±cD3$c›V5<„5ñ(Ù×°‰~ïu£ç2QòsÑ¢¼.n„‰,IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment6FŸXIDAT™Eͱ€ ƒáŸc‘7£¨,¦ç"’ƒ_•KÂHâBt  E ÇÔ‚Ój/Ô¡×–Åâî Brž§þ©ßìÚê­}ò¾ÞŸâ?ÿzçÎzF2Wפ£IEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸQIDAT™=ͱ À DÑ(²£y bgJ $8+JŠ×¿ÙÝY8c”‚»ŒÂ#Mú4êöY’è7’6!‡ ~Æ«©yG—`¢j¬Ë:®2"Ô#:IEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸVIDAT™]Í» €0 Ћ²#d4À€•ˆXÄlà2Â\ŒDAñºû ÔpÃpAà ­ §¿:C aT*ÄLP˜©Ó@ÒŸîÈÝ’|þq'6{'¤3:I$Æ_IEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸOIDAT™eͱ À0CÑonæQ¼˜³‰Fpé"8WRF…:KÎì|5á0’òF^õÇh‹z·þ¸tÍйù§ .þ­R–ÜIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment71—( DIDAT™cø¿ƒáC#€ÿù ø!<À`øÃÿf(fGàPü‡ Šÿ`‡ÐÈøPîŸü<ó26p’ýœIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( FIDAT™cxÀ Àp€¡ 04ÿ0`hÿQÀÀÿ„?0ô?â‡þâÃ@ÜŒ„™˜ýÃ?4ü†™11HþÿÓf9ðœÒqIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment71—( EIDAT™cøß Àp€¡Ž€8¡ÿAÃüäAøáûÇþâv$ÌÄüþAñ,ø:f‡ˆÿïR7ÜÀ•Õ¥IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( IDAT™cxÀÀÀÐÅ Ä üä?<`Å0ü? ÄÍ@ÜÄìüŠÿ áð~ ù`v4ž½ík4IEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( CIDAT™cxÀ Àp€¡Š!@ýƒƒü‡ ~À ÿˆ>`øˆ›¡˜ŠÙ0üƒâ?Høü‡¨GþU¸4Yê}0IEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment71—( 8IDAT™c8ÀÀÀЀ‚?$0ðƒñùP|ðÃÿÃ@Ü ÅÌ@ÌÁÿÐð\˜‚ÿÉ?|†2»æÕ¡ªIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment71—( EIDAT™cøÀ Àp€¡ŽÀ˜ýƒ?Ë(`Âì~`øßÄÍPÌ Áÿ ø;&þ†‘åþñõÏÿc–7ýpsϘIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment71—( OIDAT™cøÃþ€áCn~ ÀÐÿCaþ†ù0È?„àý‡0üáã@ÜÄìü„ùø ³Cð$ ûÅÿêþË?Wï=±£Êþ>IEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( DIDAT™c8ÀÀÀЀ†›(0´P`èÿÀ ÿáƒüà ö0ü? ÅÍ@Ì Äìü ÿAÃ?Ð0Lü?P¯übÇ7%âù«æIEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment71—( NIDAT™cøÿ§€áÃ(n€c†æ í? Ú?0ðøÀ0ÿÁ†ÿø âf(fFÂìþ!c ØdŒ$÷ŸˆïXÉ=[kl³4IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( =IDAT™c8ÀÀÀÐÀ€ ø80ȱý‡ öøñ†úÃþ·#a~þÅ`XÁþÃÔý³?æ2¾”:xIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( ?IDAT™cxÀ À€ @üù ü€Áþ ~ÀPßü€á;³1ÿ†HøÿGÅ`˜ Ãäí·E3n‹‡EâIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ;IDAT™cøÁÀÀÐÀ€ ÀXþÃû‡P|øC=ÿo‡b~þÃòþ@ñ$üóC1LÞþ$Ý0®CÉéIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( HIDAT™cøa ÀÐÀÀÆ Ä ì0ȱýC ~ ć0üáv fb~þ‡„ÿÈ#ðdÌÁ`(öˆÿÛ?Úä6t.;‡IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜PIDAT™-Ë¡ À0 DÑ‹»’GKQaW:©‹x„@ƒ€ž[ƒw’e}Ä ¼$ñ,â ûÜrÈHËÐô›íGq$Ó§f¸ÔÈ.ugßi˜¨¶óŸB):äšãIEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8¡(5˜TIDAT™=˱ €@…ág,l…ÑÜÁµ¸X¸†n@IAN90†|ä>)jV\`ÜÆ8œ~í#q £«¾pþ5!Ì¢]:aïH›ÑŠ–òÇb?§¾n‹0 *fIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜^IDAT™-Ë!€0 @Ñ¿ \¡GÛ]H®42ä MH&+–…†M¼&múi“b(…èS¸‹ð˜ðV¸Üù²ß’))(:”Ñïrò?ƒ­v{ƒÅÍM|Vï$zgA?Ñ‹3­—PûÅIEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8¡(5˜TIDAT™E˱ À DÑQPz„¬ÂhH)³Òe²KJL("ëI'ëÏ¢â‘h../ÜÁÆ–#§øóнš„–Èû -Xs8ÇÏ–µï¢Yù¶Ö®'F¢WxIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜XIDAT™U˱ €0 DÑ‹R0Í£Qd-" Ö¸R¦ˆNÈ ²^åûX;12ÑA£uÇ= ÔpÊ1E¿¢Õ ahR ímþeõ‰¦ÖÕùWõDÌż•02г9IEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜TIDAT™M˱ €0 DÑ‹(Rf%FDÁZ'Q°†ÙÀe œäd½Æú‡ìÄáò¸á à^Àùs,Ô=¶â­65T«mW?òÓ³~3Lu]lD¾Ê$-þ/¿ã*IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜[IDAT™]± À0Ϥpé~´ŒbH‘2+9›h—.‰ ®Â#x„Nâ-¢'1¯±s+8zpŽàZš¶—úN Qo‹‘f”a=?ÙËîØÜ]Ÿ;2?Š>¹ï+µM·ÚÖIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜[IDAT™-± €0 Š’Ø!EJVŠDÁf—AŠáâ\¼ïõôÙ¨“á·oœU´•Kä ‰¢¼ìF‘ká;›®~@rÑK‡#È‘¥:¼áÿݱù>öÅ`5Љ¤ IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜ZIDAT™Mͱ €0 ÀG)Œ–Q‚(²V‹ü.S àR ë*¿ý¸WÂf‚QIœ–P\sqHØ%‘=7|“º£*LjЀÅ]?ú,bÓ¾ö¼:ußÔû¾„´5Ÿn¾¥IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8¡(5˜TIDAT™MŒ± À0 Ϥpé•4šC ¯¥Q4‚J)ò„ç@<÷"«ÅY9øÒÓ¨“nuEt9+½80ºÜ„¦M»ì?G@—(MþÚ9Yüjá&ñæÀêhIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜XIDAT™cøÇ€áㆠp`8üÁ¡ý nâF xC† º õP=ž300œÀÀÐÿ‚ùÿ bv€újÁz™0í‘I-ÿ!jIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8¡(5˜TIDAT™5‹± €@G,À–®5#ÃkiÁàC[°„“ôß`XXf¨³ˆIì%ŒR lƒµ ]IzJÿÌ :Æ-ãˆîƒ7XÚ¿ùµÑóµ‘íãzÇR25”ô†IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment8¡(5˜WIDAT™U± €0(R2«d´—R°–‹ü_~! ¤Iqu¶‘+ á N¯¸¢âÈ™&,“cr9|Gý Éq $°õ™Òÿ¼i—¯‹ÑÕFèûÞùCÕ0¾½1ÙIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜YIDAT™E˱ €@йÀas…ki\äF ¤°ðƒ…—ø úDö ÅeŠ{ † Žø ÚCa+e¶e>¿”„³p‚…6z€F=9ª¬²ßO/iÃ%/Ï£RÿIEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment8¡(5˜VIDAT™EŒ± À /¢ dVýŽ2+!eØ€’‚"ORPœe¿îÍÊbFÑ‚è—xª(CÜÒ¢ÜÁ„¢¡¦H’$šày]—IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment9Ö/WIDAT™Uͱ €0 DÑ‹(h³+0ZF°73›Db+)p&œܸΉ`!:¢78Wø‘*Ê?Î!0èÄ%7ëk×ϦŽe‹jf×ÓNh/fm.|Ȩ.1ÍÁƒIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment9Ö/\IDAT™Uͱ €0CÑ¥ „-›ˆÅ‚„áÊ‘ÂÐ ë•¶—У Á –D•DÑõbûÛõUœ@ëa}è Œ¶2¬{šÃw|Ïe!‡}æÉþf¡mr®X3³B5³¡IEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/VIDAT™Uͱ €0…áRX:‚Žæ&n±ˆ…k¼lÒ"/(ŠÅ×Ýý:‰2‘›DÔ‚•™ðâÇQþuk~ÛÎÏQzG˜7-{w÷¾5ŠºêÇ^3¾–âàWIEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment9Ö/UIDAT™M± €0ÄŒ((!£%b±%mÊtpO„@/KWXoú*Ú,ê$Þ+5QÌú· b$xÒw¸Úà|œ4ÿYÌ6st¢·˜hoºÃï/-¼áLIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/VIDAT™MÑ €0CŸôÃ1\Áº™”.u‘ŽÐÏ~ê JxÈ]B›EDA·R‰äê@øÓ>Ÿ_va`}…afT'rzGуæ$Ž`;¾·ˆ¾é˸/É"¥èIEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/TIDAT™=ͱ €0 DÑ¥`l£0 ˆÅ‚Xä$Hé"õ:ÛŸDK♪™µ= [ò‹ßöi° ꄯ aWt§ÖÿˆU"yyq£fWÜ‹Q7þ0‡*8@IEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/OIDAT™mͱ €0 DÑ‹\0-£Äb1K,â\ÒÁ²^ãÓÙ*K­ L ytY~$«ìø=Ñ”.ܵtpú-HƒÛíßö|­2'8Ξ)ÎIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/SIDAT™cøÃ€áû†Ì<ÀÐü‚Û?80°ƒ1VÜþ€á0?<ÀÀðHÿÿÂp|ÿÐ 9@í@sÛ›04í9²Oþy;2³å(âüIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/PIDAT™m̱ €0ÁµÝ¥})¶ḧF®„ ÁHÐiÂ[Ž,zcÍŒÍê Ó_ë« Äz8ý³Çtª¢×ŒR¢Ÿš…g]¬M-¦JV¢ IEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™u± €0¥HÉJ…Q^JÁZåG LüôWX²Ï¬.² "S¢åøèÉ?‚xެ öS ¶··™iWù­òû'êïÔ öÉ'Ge碤IEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/JIDAT™e± €0¾È¬’Ñ’Šµ<Êð€#!¥ 8¹ñÙTB‡˜CDŠ–}SüI°â>8(:Onno„>¦8½½„á/]z«~&]ñd?CIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/MIDAT™cøÁ~€áó†ƒ0~p€¡ùƒC;³ƒ1n‡âÃ1Éðÿ2v`8ÄÍ€fÌ;Á @;íú wK/ªÂ“7IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/UIDAT™mͱ€ DÑïjR­(áØÈ–p™$бÁKnnwy7a³Ð$ ]b·Hv¡ò+wæ¥à)°¿·!r{þ=ÉÿD>ÅÑ7‚o-¢6}øÁ0Ðèav¬IEND®B`‚leptonica-1.70/prog/recog/digits/digit_set13.pa0000444000175000017500000007244712251652256017521 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment0¯ó½ª>IDAT™cøÏþ€áã<Æ üA¡ù‡33@ð*ßTÛÄÀf=cˆØ¹$¤»p?8IEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment0¯ó½ª@IDAT™cøÁø€€ð†Æ Í@Ìü‡ÿ‘äAê›A¨÷ М `sA¦Úó‡ýÿ!%ôŸÐ–IEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment0¯ó½ª8IDAT™cxÀx€á70qÆö`Ìþ„âv(nêiâ†@“É Ìx„š!Ê(IéØIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÿÿÃ?æ ~aà †  *$üáãƒÿ8ÿ1€qóܸÕø1dØ\ ù€ö€ìÚ 2êÐŒ_IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ó½ª=IDAT™cøÏþ€áó<ÀÆ?(04ÿ€`æ ìˆÅ í ÕÛ4ç€ÄÌŒ{þð?ÞÂ'j¼³;YIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR¶x‰ pHYsb&2 tEXtComment0¯ó½ªGIDAT™cøÃü€áã<ÀÀpàAÃÁ Í? øóv$ÌŒ+04ÕƒôxÄ @Àæ‚ÌÿÃÿ8¾&ézëIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment0¯ó½ªFIDAT™cøÃðƒáCà –`8` ÁÐð‡ƒ¡Œ˜ÿ!áÿDb ÚFêoüÁÀp ƒáØü@{~0Tw #€ì7âIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøÇø‡áC Æ 2@ÌÃpˆjXþAp#7ÿg``&Õ‚p3Hß ~þ1óØ|¶ÚWÃð‡ñ¶ˆ&¨uIæ!IEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment0¯ó½ªÔ{ÀbÖˆÙ@;í#"†ÕaVÃIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR¶x‰ pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøÁü€á#ᆆ?(04þP``cæ?¨˜„ 0X Pm3õ6D9dvQ¤±dÐt;\ÞoíY§_UîçÈ®ú•>Œ&æ¡M¨ÄíÈžðIEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment36úìQIDAT™cøÁ~€áó†Œ@°ñC3·â ý@ú??8ÀðÿgÉ1@ð~(fa 3М ¹ óAöü“?.ZñÆIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment36úìIIDAT™c8Àx€¡ÁŠ0001û†v þdÿÊüâ@50 âÿo``°?TÕÇ d3ÅPà |ÀxæZ¡ÝûIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úìYIDAT™-̱ € „áßXXÊ(ŒÆÐ \ÅÎ5á•<Ð\¾\Þ+ŽvS<n¸‚Ç&éwgG3‰žFÞº)Ðêg—EfýR†hÒ7Ç~À&£®öèî-µŠàGIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment36úìVIDAT™-ͱ €0CÑ_¤dFa´A)XëØ„(Sœr8!Å“,6q9Lãàe—G,KOÓ½„KÛ“²Œl£‡è¿*çRÔ— FÒvšûãËõÕ?›Å3j*ÓÊmIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment36úìJIDAT™E̱ €0 DÑQx-FKÇZ· !%EDr–‚°õäÂö1B4ä>©–U.›™÷¯=Ó¬ÿÍý@lùïPWæŠZD-ÞM#žîéIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR²Y1 pHYsb&2 tEXtComment36úìMIDAT™-Œ± €0¥ dV}*ÖÊ(!%E”äÈ:Y²ýOÙ‚L(WTá–ñÈëf#C·o®š7]ü]ý8Ýú.ÉœõS¹/)&b"vöØ…oIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment36úìXIDAT™=ͱ €0 À§KI™Ž52¥Ù,ˆ‚52¥ äç²®x[¶ÁÓpUAC–„:˰LJ2]Z­€L¹YàwhgÓŽ©oºÛÕ÷ÇŠkrpñp!1ÓÚå PIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úìXIDAT™-ͱ€ CÑÏY@gË(ŒeI‰çbŒâtRp`PŠ×$w ÃT*‘Bà–Œ'GGnŽs¹ä‘Q<# Sø¥™©›}ƒÑa»lÊLu¤Cpßþü)zí¶¾¿a-9òåM:IEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úìWIDAT™Mͱ €0CÑRŽ–1(òØ,k0BÊ+¢'B‚;½Æ²d*®?Èìܬ¤n‹˜GÎò¹¤eI+Í„S®~+Ð*,2¿‚²àèâ`c£oisòv)Kƒƒ)IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìUIDAT™Eͱ €0 DÑQ¤Ì¬âÑÒ1«x”Œà’%œ²^á³tfîNTg'§'7¶!aT9di_ݘºÿ2ƒrÁ)íS“ò2Pg²·?ôçnþ³Ï+-xí¥IEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úìXIDAT™5ͱ À DÑ\@—–Q-%£±AV`J(äˆKOòöáæ œÆ)…ºLðŒ}¢\²ºÔÂâ§Lb5q™¼Žâ¦Ý$8š¤ßI™®Û¡¾iþâf)[oÐèIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úìWIDAT™Mͱ À CÑh(S2JF£d4² R ¼q1J‘¯¹“mÜ †Qœt2D-2á’[|3é ¯ù'½·ý[Ÿ(AP®¢Î¦î®¡­µëöݵ1´-´ŸœIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR¦cÉó pHYsb&2 tEXtComment4¨žy³JIDAT™-Í¡€@ Ñ•Hä•’r(ãdJK))!2‚DzÇ!¾Ù`M0 ŒŸ ¶Gni©SÌÓ½yÉ5à8ŸæPwQ§=Ø/4æ-ËZšÍ#IEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment4¨žy³KIDAT™M̱ À0ÁÃeFHÉX))=£0‚K +EDÊK×>™A®âJZ›ánû¥Ä¡¬Sñb—`K˜^lð5›3ê+düìúf
áÙ/„ì!IEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment4¨žy³NIDAT™5ͱ À DÑ‹”’‘ƒ«+c`~ÀÀÐþá?÷1óˆ80€Ìo šñƒý¥ÃšË›?€IEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ß™I%TIDAT™]Ë« €0…០ÜQ­#´©`­:Ö`„#M.·i‚@|æìµ& pHYsb&2 tEXtComment6FŸVIDAT™-ͱ€ DÑïHH b@aÒ‡ÅPŠ%Ü€·Jð’ öÓWãaç&s‘hDZq©2ätHvÉÅ_ >–î¬SߥmáûVC-5;ö“ó%pŠŒTÌIEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment6FŸUIDAT™-̱€ DÑïØ¥Z¡Tb+”b 0‡ ¼èn?½S1œD#b„é9äTýÔÝÈ I¢„å„ìP~›ä¶TÝêhÍfäÕÖÕé·}Ìð-e’IEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸSIDAT™e̱€0 CÑOE›Q2Z ÈHŒ`6a—)rvZŠw§B™NâAU*x-¼—DÁòÇakRéêuulÂ&ßÇþSh7•ò”ôê1"–,2ìIEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment6FŸ\IDAT™-ͱ €0 Ñ+R2ƒPDÌ ( =Ce6€’Šù!)žÜØgÜ Ç¨D^&ž_àŠ²JoNÊfÀ.³Lº¨QÅ»Ãóy( ®E]í·~ûe:tõü¶.j)ç_öÙIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment6FŸ[IDAT™Mͱ €0 DÑä2#0£¥{Q€(X##¤¤°bhõº»3q:×Í4ÆW›K—H챊S2EHŸÉ CK åõL;’ª|“Kýç_à7â(-lfÄ úIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment6FŸLIDAT™e̱ €0CÑ¥È0Êí–‚µÌ&ŒpeŠHÁ¤¥xe}Ö!f‰x”Ám}×ÒÖŒfþÁ'(þÔáyþuï=ý<ÝÛ]÷‹^XW%BöÏIEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment6FŸHIDAT™]± ! /¢øµ2læQ~J $0è«·t.bËa†èˆ—´ƒ:´afÒ–C¹‰É˽p¯ü8·ê¬Þ½ƒ·ýc<ÚÐ<ØÊôþIEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸMIDAT™-ŒÁ À@GÒHJI)WBJ0])–§#dåF…e– E0ÌâOxæ©5šú{$˜r[p¬} âÊüÚ}!§xå§Å½±Á´†bYIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRI¡¢Í pHYsb&2 tEXtComment6FŸMIDAT™MÌ1À DÑ$DÂICLŒ! W^Á@ªï[,ûuN`ª1ÈŒ’é!ÓhÛ¯ÊQÄ$S™\mAúA[9_r~C]É?n&¼°¾bIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment6FŸUIDAT™5ͱ €0CÑOw#d „‹±YFÉ)S _Å«lÙ¸wœ›™N¢…dÔCžDUÊ$êåc[$‹3Ôß)ÚjÚ³±ûñã—þ¼¿˜y,Õœsf˜IEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment6FŸUIDAT™-ͱ € EÑKX€QÉ()Lĸ£0Â/)Œø@‹Sý›÷ÃxœÑIqij–]î@QSÔ¦$qÁNw/×ïœú§n‘ª¾­mýðÆ8ì—º*XRGôåIEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment6FŸFIDAT™m̱ À@@#¬Åh?£0%E¤ÄÿIYWŒa¢,±³X°Pü’;ûèfcU?د³'¥íÖïx>èÁÂ’H‚¼IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( NIDAT™c8 ÿA€€øÿ†ÿ?€øƒ0üÄ>0üoâf fþÀð‚ÿðC1Мöü„ë!øÿÇŽÿÿÃA¯†ßõEIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment71—( @IDAT™c``p`@ÿüÿ@øÃÿF(f†àìþð`øÂòPl€á?¨‡âÿ|Š"áÇÿH3‰´DoIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment71—( JIDAT™5Í1€0Ñ›¡ Dq‚œœ!å$„.Ãg¡xí®"¬
À°ý†ȸ ÿV‘4–‰ûîIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment71—( NIDAT™cøÿÿÃÿX€˜ŠýÿÂ< ÿ?È@ð†ÿj ¸á3Bð?fþÃÅü~ áòHØÔõÿÿ¥ÒBÙZJïIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( EIDAT™cøÿÿ`P`@ @üÿÿÑ ü ‚€ðn„bF f~Àð„Ù!øóCðyþ`¤ëÓ';lDeÞNIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR²Y1 pHYsb&2 tEXtComment71—( 6IDAT™c`@ÿñn`øßÅÌ@ÌÞÀð„ùþñy(¶o`øÃõü„ÿc`r\+^&6IEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment71—( ?IDAT™cøÀØÀ€þ?@Æ ÿq#fFàì@ÌßÀðˆ€°<Û70|âõ €øÁÿ†ÿ?¨+XxGï!IEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment71—( ;IDAT™cøÿÿÃdÐÄÿ€°>Á‘p#713³Cð?~þÂòPlÄõ@ùÿÏw4Ú÷òòlIEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRI¡¢Í pHYsb&2 tEXtComment71—( CIDAT™ch`À|``8ÄÌ ü€ÿ€ó憆b þÌPÀ`Ì”d„`(Þ¢Ù¡˜?ÈRI%¡³IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment71—( >IDAT™ch`8ÀÐÀ€ öÿ ì€À0ü?ÄPÜ ÄÌþ±C1ÿ†?@üC‚?ØCðƒz(þÆËF0*`kc’IEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment71—( EIDAT™c8Àþ€¡A€øÿÿ €À@8áÿ~ÁH˜‚ÿ0м? Ìÿ€áËCð{ Äÿÿ?nì4Á E…ÅIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment71—( ?IDAT™c```@ @üÿƒ@ðƒ†ÿ@øÃÿF(fbö ÿ ø?ÿGÂöü×Åë?—8Ch<7’IEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRyÑŠ” pHYsb&2 tEXtComment71—( 2IDAT™c`@ýþ?€á>ÅÍPÌÁÿø!ø<ÿ°‡àõüà?„`Úš,6sœ ÙIEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment8¡(5˜GIDAT™cøÀ|€?804ÿ€a†f ¿á€PÖE3<```ªaá? üP â3```ʃ@T/Ð.!‚‚õËIEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment8¡(5˜_IDAT™EŽÍ €0 FŸÐcGp”"Žâ ÒÑ:JGèÑC!~ ‚„wù~‚ÙĘš•‡Ì Ñ’h74ûéÚû–8t?Å}ý.(€4 d jà{u.åH×¾÷N™¼_¼ÁX)Å”œUqIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment8¡(5˜NIDAT™cøøÃ† †  $0p0<¨à`8ðˆÿ1@0ýÀˆòÀI­BÝA˜z®á€È1H-ÈüÌ?þÿÿv)Õ2ÎAIEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment8¡(5˜[IDAT™Uα€ …ៃ’,ÅÁ,,`3ÜÄ,)rÁ€wx_“¼{ ­ ê…Šp³q±Rº=R$rê_©†8rŸw–Ž@Ò@6¾19“•±KK°l˜ý¦:ÁþxÙý/¹È@^IEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment8¡(5˜BIDAT™cøÁü€0$±Cã†æ¨ø P $ÿŠAì Ú† Ì?Øÿ`bf nüÀVÓûñJÐ#uù©¹§IEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment8¡(5˜SIDAT™cø#ÿ€áó† ?(00ƒð( ÄÀò uœÆ @¹ @µ¨¸ˆ(õ(€Õ=Â@{þÏâÿK!)d':íIEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment8¡(5˜OIDAT™cøÃþ€áã<ÀÀpðCCó0n‡ÒÍ@±† `ù`uµ  Œ˜ÿ00°£aæ Œ@¢ïó.á&™’£IEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8¡(5˜JIDAT™cøÁ~€áãl`p`hüàÀÐüá 7Å@Ô Ã† Ì?Øÿ 0?Œ gþÀ4“l.H=Èž?ò¯Ç'½C6pIEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment8¡(5˜AIDAT™cøÀðáCCƒ3~``þŠAb ÀòP0D¼ñóLÌoHé«´çãû‘å@‡'IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR}$Z© pHYsb&2 tEXtComment8¡(5˜EIDAT™Mб ! ÄŒ²ÈÆ(yýbŒ’RRP<<èäâd“¬5*­ OQº°Ã3¿‡¶çjÙÎ:ظ˜ÿMpô7«: ¼t*º IEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment8¡(5˜UIDAT™]Œ± À OJÀ(ŒF”ÅÈ&Œ@é™§Kq’õ¾VU&…A¢#ô,4ƒgýð¬M g»ƒt¿›&ªÿnŽ%œîöe—úæö¢WPôA§)ˆü¹:³IEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment8¡(5˜MIDAT™EÁ À0 ÏôÑ52JGÉ(Þ¤«tg…F&$t`¾S(ăHºip5™ÑƒóÚº½M¹™Ø3ï&Üëj_®þñßš˜ÿÁ*nsIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment8¡(5˜RIDAT™m» À0 DŸHã4FÊŒ–R&‹eàR…1‘LªâÁq܇!Nç¤qp£XâJÊõ’º†g]Wæ‹í ¶Òljí²ö³ÓâÓÅÃ%$LMéAIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜RIDAT™U± À0¹HFa„Œ”Å a 4ÃÿÜ h↠:°™@6íùÀþLõ íÔé‚IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment9Ö/XIDAT™=ͱ €0 DÑ”2dFKÃfff@bÊVÌÅk¬»3NLNcá¢pó„õÄ&kçgPu^:»DNõÆFÓÖœ¿Ý¢lUV?Ãoj¢/#9¾ÕNIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment9Ö/NIDAT™-ÍÁ À0…á:@Wp´®ºX²‰#xôH_cï ê“u;y9«1º#–ðíè! ½¢–)K³5ËHö}ùóvnýÑ¿î€+ÈbXIEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment9Ö/JIDAT™U»À CÅQP²’Gc4â(Ó‘gR¥xw:ëcín¹YKE¨e¨oi<êFŒÌR X:x1«G˜7U»æGN¿%—LHQÉIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment9Ö/UIDAT™-ͱ €0 DÑ¥ õ(€¡<Ù 6¡£ué"B„âɲ|ò‘58 v\Ú§‡ÑÓ¨cZšSIt‡ ”´’÷j\ÊùÒ¯hÿOW‡%Pß,%bjIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment9Ö/QIDAT™U̱ €0 DÑ¥È-£Xb1w¬á\º@ÀÅ“NÖ©D œÀX4_ôœŒGñÓ,ÔG ЉSá:>»z›˜öÆ|º¤ÚÕ㟥#²ÆŽ_’IEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment9Ö/QIDAT™=ͱ €0 DÑO—Ø‚ŒG›Íœ XRºˆbd!ëuwg"œ…ëN;·›² KK=Ù”* <ê¡>Ä!‘þ¬vjùv_CææÄåo×.ËŸŠÝàIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/KIDAT™m±À0Ä”sá2+y46ÈJ? #¸t—<ÔSÁsöy‰ê`cÃ,ÎÎGÒF¦FǼÞ?}kG»¢½¶ûGqn}Ù ¦¯ õ˜IEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/TIDAT™e± À0Ï¢ÈaŒŒãQ¼AVbFpéÂ’óŽ”*¼®ùžµ’iÉVPi›p¬;Çà‡u(É;M„ż`çÖ½¥S¢*Míêÿî9u>ø'ŒÏ§4‰IEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/VIDAT™=Í» € …áŸ#8 £Yb\Ì \(oAÐs£±øºóÀ‚ÑÙhNVªËÄñ™™4ùE7PjPïÕe.p«s©{ÈîL»Í÷þ;’=2'W4ïÍIEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment9Ö/GIDAT™M̱ À0DÑoQPf%æÑnF L—›"H¯àGºÐ‹châÙn¸þ’ÊÁ‚=«¨|kÅ<û¦cbêÞê—‰p½ÝýçÍaÈIEND®B`‚leptonica-1.70/prog/recog/digits/digit_set03.pa0000444000175000017500000007416512251652114017510 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÏþáㆠ>$0<üaƇ0þÁíPp331;£Ê @0H?Íû`ÀðàCÐÚ´ïû«'3Þc$@IEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment0¯ó½ªJIDAT™cø?ÿÃæ ?0|`ᆇ~P`8üC¡ŒÀ˜ˆÙÿ`Á? ¸ Cô@Ì8übæÃ;@víðã1¨é¹ˆIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÏþáã0LøÀððCÃÁ ‡¸ŒØAø 3àÆPµíP Öÿh|PÀð€„öíû´÷ÿŸÿ-&3„º(IEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ó½ªJIDAT™cøÇþ€áó†Ž>~xÀððCÃã ‡(0ÿ£ÀÐþ‡+fGÂq8>ÔøĬ‡@s?Ú´hÌ*4 r»ä*IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªQIDAT™cøÏþáㆠ€°€á'0ø Àpà‡Cㆆ Í ü‡f‡±aêúÍ9øÁ€áÁ°ÙÀh'óÐB,.1):OIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment0¯ó½ªCIDAT™cøÃü€áã0|ÀpðCÃa nþ¡Æí?À˜„ÿ á¸0H7ÿ€˜uðÄ|=?€öýãÄD.s­ÀIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment0¯ó½ªCIDAT™cøÇþ€áó†Œ@|àÃà ‡ÁX¡„00´C1;QXŒÁzAæ`øÀð€áÁ†ÇPãæ í?À˜DÜÖ«ÀpüȬ†‡€l`øÀ±h7Né1t?ñèIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÇþáó†ŒÀðAÃà ‡À°C3·ÿa``ǃ™‘p3Cõôþ 6óÁ° »@vþçÿÉ 2šÝ‚.IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment0¯ó½ªUIDAT™cøÿþÃ?æ 0€à‡ øð –`8üG‚¡s0´C1;3 af ©iêa°@³~â @¶0BìûÇÿ< 7}NóZIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ó½ªAIDAT™cøÁü€áã0üð€áà‡†Ã?š¡˜ŒˆÂí`¬ÆÍñÁ Íf„Øó‡ý ,mx$WÎIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment0¯ó½ªXIDAT™]ͱ €0@#Š”dFË)Uˆ²Èàò‹ˆð²®´¾m&t"<‚‘„ÂE#ªÙ\Ã'áO]D¼Wmça›r¾´/ ĵýà -M7¡rÏ#IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment1Øô<.IDAT™cøß€áû†@Ü€„ñvˆ¥ø3ІL `£ñÇ ÌdIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<+IDAT™cø'ßÀðˆð700ÈCp€ŠSÿšÝÀ4 üoh±¯)á®`IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cø#ßÀðˆøQñ~ˆøj`YŒ@s‘Àó'$ªÀkúIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<-IDAT™cø/ßÀð‡¿á7 á?Hø.†ŒÿàÀØ`Äú€ÝN*eÕÚ´§IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR Ü0®_ pHYsb&2 tEXtComment1Øô<9IDAT™cøÿ¿á¿|Ãþ†@ÌÄ @ü"Âÿäñã?Ä`¹ì@ó€4|Äÿ6Dú/6Sœ˜OIEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment2Aý܆[IDAT™-ËÁ €@ DÑ/`JÙlÉT<ØVìdí Ç=ˆq$<fmú9 î…#Œ³u0Ê È¦ÎåÖžQȺä.cðNÁ3m5"*׫Œíǯçlå#.*-¡8èIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment2Aý܆hIDAT™-Ì» ƒP …áQÐzV¸d%6‰‚FJ”E.­KWqQd}’uü õÎ]•‰'…w-lnì²¬Ò ²„±8¼4»$µ›u"æ*ƒÓƃx1ƒ§q~àlè·î±þî>(_†Ü/•å{u‰IEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆]IDAT™E̱ €0„á?Xh—²‰«d KWR\ä¹AÊâó,ă¯88ŽÚ%Fæ°ÌRk…(™>qm\[ß ŸEW4ju€âpÊ~ÃÖÁÈ+ñ'©çíÌ+gS¯“ìIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆XIDAT™e˱ €0á –ÁŒö&‘H ¸Èoe›ÒBŸ`gñ5G¢Q£T#*}`n0¹ÐÁ[q§ŒQ_bln}÷"®Õhwâp»+þeüØ:H*FÀ ,IEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆WIDAT™M̱ € „áŸXX2‚£Èh ×zÆE0.@IAÀ‹6¼ËW\.yTog$L ìŽ>ÿ&qƒM.í=º=Êd´Ù¨K¤®ÜòÈY@/?ã©¿ŽÙ'ˆMôëõIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆WIDAT™M̱ € …áŸXX:‚›&3 ×:7aJ >…wùŠ—¼;òb$gô½ÍóDØÒ°Ê"nº¦W=MýŒ¦ûª?e7òé„XÕë †ÿ(¤…'[à ~©IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆XIDAT™]˱ € EÑk((Qü“ˆ‹}ã®ðG ¤ (ÄÆ˜—“[=ŠSlQæö$…`í­ûñ&\¦Ü:äaü»WZTꪔM°.ÃÙ„\˜øò]·'Áu=ÖéIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆WIDAT™eɱ €0CÑQ¤Ì…Û ¤¬uˆEÂ)S ‰[O.Ì•”ÙC…T!5È.ºÅ…oËä¿UÁT±Ó—”‘•¾ }ƒ6àv—+vþ1äÔK(ÎPNIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆[IDAT™]̱ €0EÑ+),]!›¸J6Ñàbù`aûï¬,Nu6u0 F.‰Í"S}Á(AÉŸ]íÒÆ-áÅð,Áèúés¢-‘Ú#·œrH!²þtqO¤Á1$¦Ó‰ÄIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment2Aý܆UIDAT™mÌ» €0 EÑQ¤ƒ ˜%“¡ 3b‘Œà2Jx ¶Nóü¡FÃ1:§ÄQ Ê"“¿ÂÇ.—f}°DÏF×}ÓŸ:ƒ¯P6ipÞÚ¯ù/åsÜ$ጧIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment2Aý܆]IDAT™e̱ €0 ÑC)R2ž„Y%‹…MŒX %E”ðé°ô[>ÆâÜÁñÉ)l$Ù݈õA¦¬}ÖýòQ$9C¿]6÷jÔnœކº¨ûŽý$ì°(ö%Vƒ-IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆VIDAT™Uñ €0EÑ+),Á?Z&!…¥+).òÜ v!ñW¢e9ubC,[d•1d£Ï|÷k$ß½h»O¾ue2îj\þôG™/{ÏÄcJ+öö°IEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆VIDAT™M̱ € „áßPX:‚ŒÆ$F*׸È@IAÀ‡6¼ËW\ry'F˜<—Ir³B–>S=¦x©eáöÔakvœ¸ñàB2•¥ó7è6k?6+»_uU)Ý-”BIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìYIDAT™5Ñ €0 O:€+t´®"ýp-ƒ‹d„~öCˆ/E G É埪aÞ8F¥8¦X½bâÖH¤I=L?;7Ínª?Ô÷€ýU.¯–§ŠIEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úìVIDAT™-ͱ €0 DÑ(X#£eP Ö Ê"¦¢MéŠp)ž,Ù>ÇèdnK´e:.iòôÄ–»ñ.¢Ü¨³?÷Šÿ¹¨«œAó¦ÛU?,~Ev³H^3jd#ðIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment36úìWIDAT™M± À ±£1J‹ewi]R RDÖÉ/¿_Á§‘)’¨Ê¢ü8[ÓüÙ2Ãþ‡å|¯›ùÎåÙá#ê¦ `!¡Ö×M=Q^Á1‘Ɉ<IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìVIDAT™MŒ± À /rÁXa´H”Yé7È ’ŽüÁðˆŸñy žßÂ7ø8€ƒá?åþ7C1H?ƒÃ 8 ÿ_Äÿ-¥÷<¨ŽøºüIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³NIDAT™UÌ1 €@CÑx<‹…­W²òba»`±#ˆã_A‹(JV¬˜‘>ºæÆÇ™šcÈÚ°ÓŒª^FVaÓÿÏøbw¶W¸B=/¸‚IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment4¨žy³RIDAT™=Ì!€0CÑÔõØåXW‡ã $¸L—_ÚA<“L"ßL>!¡C¨r8aŸ§±ÙtcÇc#ÅFêS”“ýʯ]ô•Tžá Ë ñ[BtË·ÜÕIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment4¨žy³RIDAT™-̱@@„á½L ׎ζ¤Fd/0žŸ{;óe»+ßM>…‚©z k1›.aÁŠ‘Ò&©Ñ—^rýâ¦ü;éÜàÍ >h?Âñ”ƒ1IEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment4¨žy³MIDAT™cøøÃÿƒ@ÜÄŒüŠÿñ(þÅ€ø1Píqn~ÀÐÄü@1T0¿á?PŽAf3$0|Ê=býÿz3Ò,²r‰IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³MIDAT™cøÿùÃÿ‡@|ˆ¡˜ñÃ?$üˆñÇ òø0Ÿêéâù@ÌÀ À€l¸YÍP(öŒÀøÿ­W9­_õ:ãIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿüÃÿÃ@ÜÅŒ@Ìüáÿâ@ü±ùÃc ~Ä縈ç±<#ƒ ™ñ¿Š™!æ~`ã X5:ê—IEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment4¨žy³TIDAT™M˱ €0 DÑ£c„¬ÃV”éX‹T”¬bè®@˜Ÿˆ‚âÙ–ÏVìVl˜«Q‘+f}:ëÁ ÖY¬ ¬˜¸—zej¦õ/Ê[+µ¬å‘^<Ž=R0ú­7IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žy³8IDAT™cøð7B1#ÿâ?Püˆ?@ñC šÃPÜÅè ˆÿ7 ™ Ä?€b0ä¯1ý„9ìOIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment4¨žy³DIDAT™cøßø€Œøÿa~Àðˆ?@ñ ~Üü€á8·q?óƒ0Püâÿ@q 4¤ „?€ä0`ö2å\Õž~IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³RIDAT™cøÿýÃÿÃ@|ˆ˜ÿñfüÀðˆ?åñãæ Çø<÷ƒ0PŒ½A€ f5C1ˆÍ`Àð(÷Š?0\ä7–è˜tIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment4¨žy³2IDAT™cøÿýÃÿÃPÜ ÄÌü ƒÅ›qcþøÏ€)ÿƒ„>€ä)»w: –öB«IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³OIDAT™cøÿýÃÿƒ@ÜÅŒþ!á?Püƒ‚?ñC ºÇ@|¼ùC?Ù|    Àð†b ÿŠ}Ê<€bûÿm—5ZÞ;qIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%VIDAT™cxÀÀpŽ0`bù ÇÿCp;7ð1P®¨¦ù@Cû†~ žÿá?þÁÀÐ ¤™‘1P ó ù Pó0?`ø#ÿKß/û9B-IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment5ß™I%ZIDAT™cøÿÀáƒÃ8.â ?0þÿá8>À©i~PÀÐþÁ€áü†ÿHøù†Ã@ÜÅŒ úC󆆄€v|Jþ`þ¾b7hýÌ÷IEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%VIDAT™U̱€ Ðp®Á&: £èQXºw¬‘~iå7@eñš$¸e uÈBÔ(+Ñüoä½ß2 NK¸Ä ðgº¥HhSѦï}þ3ïÂÊ4øÓ‘sIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR Ü0®_ pHYsb&2 tEXtComment5ß™I%LIDAT™cøÿ°2700ð70´ÿo`àGÂ<ò@qv Ê33Åä40ìÐÀðÿó1;æ?QÏÀ1ÿМì Çô&1‰ËÛqIEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment5ß™I%\IDAT™cøøÁ€áƒƒØ ?04°`8$ÿáøÿ íÿ!ü8±Cûîc``øÄ€¸ 9Œ@X€¨Ž±Á(X6dÇöA$]/ò çIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment5ß™I%WIDAT™MÌ¡ €0„ák*Œ@G{£T Yé%HFàFh‚Á•£©@|î¿Ãýƒw„GYˆÒˆã§ÌÄDM¦a« {.iÃ)Y»¤>õÍ·u}Ô‰/¤2s}$¢pIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment5ß™I%WIDAT™-̱ À0 DÑ .Tf¦Q +¹JJƒ,  œ‹pñ@ˆãã áè‰è&;qOb,ÿ}éwѦ‘8éx¢b&¤!m)©ÂÔ7m[Ww#¨F?û³5?" بIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ß™I%RIDAT™MÌÁ À0 @• ÒQšÝúÈZ‚<òôõ}æç(¤-ElG?J’¨A4±×±nU?æ× Ä_ŠœêéQ&®}Ÿ6¢k+ŒŸÆ6Km%špIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ß™I%YIDAT™MÍ1 €0ƒá_:tô =šG:x­Šƒ£G0›kÝ:Y¡„o !ÔGÜšHüDòb­b7Gg­s"Îb±Í‘§© ÍU æëDb íC–<ˆâõ—89´yÝÊ9IEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%NIDAT™]̱ €@ CQ£)³RF %#°ŠGÉt‡((ž”Âù õ"ʈ}çO9M´q&B®NŒÆç[ækk³­ªßjÝÁEŸ*œó(øIEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%WIDAT™E̱ € DÑo((eFc5®…–®ÀWÒ!hÔâU?wT2ôÉŠmGýí£˜MÓú’1{VyN9jW¸ÅÆtz9LvØäÛöù× ŠÕ02ÑlÇ|IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%IIDAT™c8ÀàÀÁPÈÄòÚÿ£â x#Õ4780´p`˜ÿ€á?€àv fFÆ@9v fªm€ÚñhÆæÍó+ÆR6½IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment5ß™I%ZIDAT™Mͱ €0ዌaFË(‘YK°Ð.+¼ Li!Æ_T°øºƒ£B„—˜:ãÄÜÄòSŠX{­%’¹z¶ í¶?f“L_?g²<)¦÷QíqºA,9Ã0y!IEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment5ß™I%aIDAT™MÍ; €0Ð ),½BŽ–£RXz¥ K¯0mJ‹@œ Y,ûÅè‘aHå°™Øqüœb‘X´Q,£2cm ›Œ†×uUЧZTŸ÷]¦]·ÆÁÌ9)Ý–ŒIEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%KIDAT™MÌ» À EÑ‹\P2BVñhf‚¬ôº¬ÁÙ€!$§z„YÑDŸâN¢jg gU¸ÌäyÁŽq8UNYßü{júd &R§×]7IEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸSIDAT™]̱ €0CQG)²Ö†tEÆ`#96¸2˜ ŠW}Ù8A Ò G`ÚÃ&OÂ/¢K] 4©¢MQ¯ùQúéâñÚÓâAD!R£ñ)+»—±¼IEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment6FŸXIDAT™uÍ» €0 „ᥠe„Œ–Q@)X+ˆEŽ RRD ç(>Ù’Ç<Å@¼úV2]‚ÛµöB¢N‘Bò`1ß â6“zà×á½eš3‚"Ï?ƪS-ÓsÁ>IEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸGIDAT™c°aH`°```(â ~ÄpƆ›2Ì *@* ÔFløPï>2K¨S¨<nDj`(ÃjIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸOIDAT™uͱ €0CÑ¥`-Â( [ìØäFH™ÑQ…êFÚꉤ7)#Å>y!;[û±n,½[´,þÏbš,\15ýIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸRIDAT™mͱ €0 DÑRdŒ¬âÝRd-K,b6p™‚¥¥xWùÎ܇3qãŠí”þIc,g0ÌÄ?0ü?ÅÍPÜÄìü ÿÁƒÿñõÈ×9nöÈÉ.IEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment71—( 9IDAT™ch`@ ì0ȃðC¶?|€á?·C1;ó`øÅð4ü ËÉõÚøD2xSAÔIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( @IDAT™cøÏÀÐÀÀ€Ø$0ðá ò!xþÁ ÿq3·1;ÿC°af(†òÿñ?–95E*]+.IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment71—( `øˆ›¡˜‚ÿ!á?üPÌŽÀ?Ð1H^¨þÿ×`45R (IEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( BIDAT™cøÃÀÀÐÀ€ `Äøð{n>ÀPß~€á?;ó`ø‡„ÿÈ#ð4ü #‹ÿ±? @0= J ÓIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment71—( GIDAT™cxÀßÀp€¡+00üP``ÿ‘ÀÀÿ„0ð?â‡ä>`øÂÍPÌ Áÿ øü³Cð~ ùs÷6»*Q…'IEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment71—( GIDAT™cøÿ¡€áƒÃ†8`hâþ@\Äø|`˜ÿðÃÿƒPÜ Ą̈ø;*þÃÌHl(Éÿçÿ)»9ÙW'IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ?IDAT™c8ÀÀÀÐÀ€Ø80È?8À`ÿˆCðÿf nbv æ?ÀðŠÿ cù ?Ðð$ ·?z/ •K6IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( ÅÍ@ÜÄìü„ùøøŸ3PaÐ|M˜à¡$‰” «IEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜WIDAT™E‹1 €0GR¤ÌüJž&XXú¥ ¿‘'œÝ)¼`@–a›zžD[Ä%q[åôÊáÿvÛ„§é74N«ƒâA‡µ?È£·h‡%½Ïœ.åèË@IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment8¡(5˜dIDAT™E˱ € Ðo(dư¤t,J;W‚¸#PR\Äcñr¹»ÿ!¦£ATxäÝ£t‡‹’ü"÷¸ñÏ\f¾¾{žÓñFÑ"5 #ë=‰î‹ö+}ÙÙë†:i¨ã Õ1‰yXñkIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment8¡(5˜`IDAT™%± À ¥ d„¬(k½”"k0%B1PœÞzeúaTg «‘·E¾Y7wrš\rÜfú…(À’œ2;àEP'ŒW>ô»«<ù¶:{³i{œö `/£u¼}IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8¡(5˜QIDAT™U± À0/•ˬÄhŽ\d-¤,”.RøQÒ¸8é{ÁlNNàxÏ4îÉÆWBÞï‡æ%9Z ¹ç»S»¡[÷Ï-ª«¿ VG)J Ò„IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment8¡(5˜RIDAT™E± €0/ú‚52£ ¥`-ØÄ#¤ü"N¢8Éoõô"ÄÎenUZÂ9`31*‘•£›åh1}QgMö»Éw÷¾‹{ø÷ò¿ =Ùä$A‰GIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜TIDAT™E‹Á À R@,ÅÒ, Ic¦K¸ç=ÍŠ° ,Ë,)…^2ÝOˆÁO@ÓÖ®LCŽÜ建“ÔѶ½*ÿ^L8æ×E]ò÷ß§½x^-áøDÒIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜_IDAT™-̱ €0 ÀG)(Y1Ç£Q0«XJ‘5^bè\D€“ ëôÍûñD „¸Up^3’ËÖíÅyn&X]\Ví¤Iê=Ö.0•ßÓsôà‘EÿµÀ2 Nf´IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment8¡(5˜YIDAT™MÍÍ €0 †áW<ôèv´ŒÒâ¡kU\$#ôØC?¬„'FpÚâ¼aœ¹z¤ü’š‘̨šªÌy'ª†¬T¶.c ²ª—u7aßn“¡¿÷îßo0þ·~SIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜RIDAT™cxÀø€0$04P`hþ ÀÀþ7qCACP]#H-HG`Ê10€1H± ÿa``bæ@úDLH¥lÅ -ÅHµ!IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜ZIDAT™M» € EqGÑØÅ‚Ò•H,,]áŽ@IA¢—`aq^ñîgm5IœU\-q÷Äñ‘Íî_±V†/LÅY’o$Ë´ÈÚüˆîš;Š;˜yo¾l5­€íœIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™Uͱ À DÑ/QPf„¬ÂhD¬uÙÄ#¤¤#‡R Ovq>3IÈÚ%ºDŽ¥lÏ‚÷Íq* ÃfüõøzÒê»=›²¨þ§S/á‚*ƒ©á”kIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment9Ö/PIDAT™cøÃßÀð½ásÃAƆæ í@Ìþ'nâæ ‡00)† ÿ? âã f5?âƒ@ 4¿hÏ }츧+-ìˆ/IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/NIDAT™cøÀ~€á󆃘€°ófÀŽ@0P91™ ? þõÀp;H?ȬÌTÜÀx€áÈ.þ ?ìN)´ÂÑ”IEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment9Ö/GIDAT™cøÀ~€á󆌚@0û4Ì€‚Ê€ÈdxÀàÀðÿ·?8ÆÌ¡¨¡„v?Î@'`F< IEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/UIDAT™EÍÁ €0DÑlÀRì@KÊÑ«•™t;˜cbƒ"˃]fi»¨ƒx¦‘Éu²‘í:¼ÿ²Àq´€O®šsŸÃz¬¸3¹;ø‡³n˜ý5“1¬!4IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/WIDAT™%ͱ €0CÑ((a2ZF!b± ñב ÑéU¶u´YÄ(¾«UeöÈŒ‘ºö¡ œuE¸W‰°{I<î_vz_~b.bóŸ:‰¶êº".,lºÈ)IEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment9Ö/GIDAT™uͱ À0 Ñ*3’Wû"kÉx€¬ ¼A"ƒ!UŠÇ•Ç[fV1™SeÔÙ~ðR„;¸ Þ‚cV6–>.;Oì$ExþÊÍ»nãä++ÈôµIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment9Ö/OIDAT™m» À D_Dá52ŠGQd­Å#PÒ']tzÒ÷aš‡Øjrz8eðb™VɤežpsÅ·ÓCån&ëó“aZCg(þØá¼IEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment9Ö/RIDAT™mͱ À0 DÑo\¤ôJÍÁ‹dàÒE 9ƒ!M„ÐqÌ"" %óœ=DuãWü‹àŸxÆçr¶Ç¦Jj¢­ŽÕu¸Ó¦ÝE/âé/"Ç_áIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/PIDAT™mͱ €0CÑ¥`Œd ÆÉ(d³H¬á®¤Ä-Å“|…}ÜUD‹48’:%¯úc&án‚OvkWtN›1¼óaÉÛ–¿6¡¦!I&üU”_ÉIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/OIDAT™eÍ¡€0ƒáŸ«` :£À½ÅÚM2B%‚òÄ'"’pÌb¡I4D×JŒT)~ºp·À‘“Êe·*a»·^-‰-?Lù¹è­,¼Ltí˜IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/MIDAT™uÁ ! G,À,ÍRbg–¸ò¼Ÿ·9ßËìÕÉ[ÂLï”$ ^Èl:˜!™ðŠ­g+{䟞ñƒe·(ÚÑ^4ÿ§&zxx‹öIEND®B`‚leptonica-1.70/prog/recog/digits/digit_set02.pa0000444000175000017500000006617112251652100017500 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment0¯ó½ª*IDAT™cøaÇð@ŽáC;{?5à@M0ÔÆÐF‡ùØò:sŠ“øâIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR.x"I pHYsb&2 tEXtComment0¯ó½ªDIDAT™cøc€áû†<8Àððà  ¸„?804ãÀ‡€0PßC ~ 4hÖþ ÿíh·*8èyõIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRå$ñì pHYsb&2 tEXtComment0¯ó½ªKIDAT™cø'€áû†Í<Àðøá†ƒ04”IEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRáÑ!Ñ pHYsb&2 tEXtComment0¯ó½ª4IDAT™cøÁÏð¹áq3Ãáà ‡24?!v z€>0´?`h+*~ÜÎðá‡<l94>t±”IEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment0¯ó½ª2IDAT™cøcÇðáÃa6†ö&bo@ ~ :ÀÀŽŒ€âM ÔÜÆÐÀÆp¨Wy„,”jÑIEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRáÑ!Ñ pHYsb&2 tEXtComment0¯ó½ª+IDAT™cø!Ïð€áp3Ãრí`Ä~7:BÍ@ÔÌpá?ÃyÑ„ÈD_+ÉIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment0¯ó½ª8IDAT™cøÿŸá?Ãv†‡>dxø€á0}`h¢`ô$IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment0¯ó½ªBIDAT™cøÏßÀð“½á#sÃà ‡ñƒ†f8fcf(f‡ÒÍp QÒs¨ÿasàY?€æþÿß;]' BÈëIEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment0¯ó½ª5IDAT™cø!ÇðáÃA&†æ†öv :€‚øaÄ+hobhfbh`c8ÀÇðA˜Ld(D£˜IEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment0¯ó½ª+IDAT™cøaÇð€áÃá&†æ Ä Cì8P;bhnc8ÀÇðA¸Ì–zŸ¨IEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRáÑ!Ñ pHYsb&2 tEXtComment0¯ó½ª7IDAT™cø#ÏðáA;ÃÃà ‡è C3`h~EÌ`Äø„šÁè0XåÃã ú~È¢Ít\ˆÎMIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR=Û pHYsb&2 tEXtComment1Øô<IDAT™cøÃð€áC¶ÀY2Ÿá8á ¥Úu>IEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR$£»@ pHYsb&2 tEXtComment1Øô<IDAT™cxÀp€¡ðAÈŒ ¡žJ¨IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR pHYsb&2 tEXtComment1Øô<IDAT™cxÌp›˜ @Fh†çžÏ¡ÇIEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR Ë<9& pHYsb&2 tEXtComment1Øô<"IDAT™cøÙÀp ¡  „‚Q#D=``øßN;¼½aYIEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR ñ6XV pHYsb&2 tEXtComment1Øô<!IDAT™cøÀÀp€¡4€á¨‚èAŶ±^IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRô3h pHYsb&2 tEXtComment1Øô<"IDAT™cøÍðáÆ(lCF l„ƒ`x?>U Éêh}ŒIEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR¢j ¶ pHYsb&2 tEXtComment1Øô< IDAT™cøÏð“áÆ HÂ;‡`‘ûÒèj ¨IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR©Ú0 pHYsb&2 tEXtComment1Øô<IDAT™cøÇðˆáCÂ6a…m ïõ† ¯jT¦IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR `êƒ pHYsb&2 tEXtComment1Øô<"IDAT™cøÑÀD0040€â6… Zî5zùÏI ßIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR `êƒ pHYsb&2 tEXtComment1Øô<IDAT™cøÀÀð€áC h€¡xLÏg ‘E³IEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR$£»@ pHYsb&2 tEXtComment1Øô<IDAT™cxÀp€€°‰ ›€° ™òï$Ú!yIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR pHYsb&2 tEXtComment1Øô<IDAT™cxÌp B0‚eør{ÇaIEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR •:¾ pHYsb&2 tEXtComment1Øô<%IDAT™cø÷€áƒÃ†$ôŒ> ¡X``xü[­ò_\yIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRËaÐ~ pHYsb&2 tEXtComment1Øô<IDAT™c8ÂÐÂÀ…ØB¦9håkämIEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR$þR pHYsb&2 tEXtComment1Øô<(IDAT™cøÏð‡áÆ @ÜÀЄÀð 6Âa>¡*¶û¤ËIEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment2Aý܆IDAT™5Ë¡ €0À*;£0âGñF +ð!!9{Ú*ª(ÆÄÀôÛyRq§êšõÅyh›F|”¼/×ú|-&w±IEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment2Aý܆>IDAT™Ê« уTvFE4Á2Ž5‰ |/O#P”,xÁñ3œ‘Œjl>a)30"½= ÊA®O¬"j?,ùIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRâ¼ñú pHYsb&2 tEXtComment2Aý܆?IDAT™c8`ÃÐ ÃÐÀÃÀÀÂÀÌÀÀÜ€@ì ÿ@è Æ2 ?j>>axx€áC |¨IcuÆœ¥…IEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR øÝø, pHYsb&2 tEXtComment2Aý܆=IDAT™c8`Áp@‚¡ƒ„ؘÁˆŒî30üã`ø#ÁðÂáGÇ O0n`h`€ · }¦/CÞIEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment2Aý܆IIDAT™-» €0 @Á¹p™„©Ø QË ±Ÿ†"ÂPp:bæÌlÊÒp§|íïÆåD%¡Dæè#÷ÄQY&a×YýHhwIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment2Aý܆>IDAT™cø Çpœ¡½¡¹‰¡ˆ@Ñá ÿ›Àˆ „þÉ1ü±cøSÅðóÃÇG ˜010€Q?¢m5YäíIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR øÝø, pHYsb&2 tEXtComment2Aý܆:IDAT™cøQÁÐ ÁÀÀÁÀÇÀÀÆÀÀFÌ`ÔÎÀðŒþq0ü“`øcÁTüáÃç `€ˆ¹L ÏÖÍçIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRØ¶Š pHYsb&2 tEXtComment2Aý܆>IDAT™cx ÃÐ ÃÀÀÃÀÄÂÀ D PÔÎÂðŸ…áñ0ü‘aøaÃðãÃÇ7 0`ah`a`€ ¨ñu·tP7IEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment2Aý܆DIDAT™%ʱ €0 Ñ“(\2C0£)EÖŠÅB)]ùcôªÓµ³ŒØ¸‹3ÿ<ŽJGyÙˆ“ùÿŪ¼8 Ru1h0IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment2Aý܆TIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment2Aý܆BIDAT™-± € †ÑÏ#¹Ò…Ñ̯.fÇŒ@Ia yyôŒv’‘.6­§¸E¦NdÞÂ8èAsCþÿxsIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment2Aý܆CIDAT™ɱ €@DÑš\ –rÅ haf¶apÁâº/{<;n¬b žn“Edã+;щ ËKž aqÍúñÄ:a¯´8IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment2Aý܆AIDAT™cø÷‡á C C ; s530üg¢< ÿdþØ0üøÃðñÃç7 04°€Cƒ Éx‚ÅŽåtIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRâ¼ñú pHYsb&2 tEXtComment36úìAIDAT™cøSÃð@†¡‡¡…¡¡½Šþ³0üçaø!ÃðA†á˜ËÀ0¿½‚@ …áÃ_†Lx^IEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment36úì>IDAT™c8 ÃÐÀÃÀÀÂÀÆÂÀÌEm çX>ð0<"†', ÿŽ304e jØÁÊXðvÔ :§ŠTšIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR µY' pHYsb&2 tEXtComment36úì3IDAT™cøWÁpN‚¡ƒŒú9þs0ü“`øcF ÿÀ"ÿú‘Ã1†! 挟;¥IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment36úìAIDAT™cøgÃðG†¡‡¡…¡ŒÎ·0üçaøD2`’…á?Ž70´70° C? CÆ6ïwm‘¢#)IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRØ¶Š pHYsb&2 tEXtComment36úì=IDAT™c8ÀÃÐÌÂÀÎÀÀÞÀÀÜÀÐÞÀpžá?Æ2 ò ˆ{¦€™¤˜¡ˆXðø(xFV IEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment36úìAIDAT™cø Çp€¡‰™‰±‰¡¡‰¡½‰áÃ?6†| d¹ÿ0´`h† †v&j|À¬µ~$ÐrIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment36úì@IDAT™Ë1 À Ñ,±ùÄ xÔ‚÷”-‚µ¸ðÊæM- 0Î.–ð²=â548 …¿¹ i¿¾>«N K®òIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment36úì?IDAT™ÄK €0@Á lÚK% q{ ÁV` UÀ§//£o²–P~Í’›ñó'¼\œÔ´¦Já½ûƒí …íÖéŠIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment36úìH0üã`øÏÀp,ÅCý ÷8þXS¯½ÒV×IEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment36úìCIDAT™%˱ @@ÐWüÐü°À%1šâ&`%£ÜJ… "yíÓµ¨IˆÐ…!¬áJGj³Vœé[Õÿ™|q//ò¿Å7ÈUIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRØ¶Š pHYsb&2 tEXtComment36úì€ÑqâPRÆÁp5ìãAùˆ»»IEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment4¨žy³*IDAT™cø†á ±0ü"TùD, ?@àˆ ùÒ‘  ŠpAØIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRâ¼ñú pHYsb&2 tEXtComment4¨žy³5IDAT™cø„áÆ`ôŒ~00|£ ÇÎ10Ìcac!h€©„!4ëØ€5!ŠIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR øÝø, pHYsb&2 tEXtComment4¨žy³6IDAT™cøÿƒáÿ †ÿ ÿ@èý²;ÀèÃ{ ê`¸ßÀ0ŸAŒ@*9 èüÿq‚€Ÿ„ IEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR øÝø, pHYsb&2 tEXtComment4¨žy³.IDAT™cøßÁðŸƒáýá#†@.ýá€2þÕÈ0@Á¨0·«@·´IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment4¨žy³5IDAT™cøŒáÃ6†ÿL ÿ˜þ€Ñ&†l ô€‰áC!P¨Œ ªøöÕÝAÙdÆIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment4¨žy³3IDAT™cø€á10ü£? ?ÀèÃ'†g Çúäà’b[^yíñÄbIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR æI!Ç pHYsb&2 tEXtComment4¨žy³*IDAT™cøÿáÆ`ô ¹÷ÀhÃ>0ÚÃhÊþpÝÇß^¥ÌIEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment4¨žy³)IDAT™cøÿˆáÃ&†`ô‡‰áúCóxà’Ô&#õešIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment4¨žy³0IDAT™cøÏÃDÿX@èý`aøFX±0caècaà"øƒ„þ±“îdü„XIEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment4¨žy³*IDAT™cøÿáÿ!†ÿM`ÄBÿ˜  8:F÷™Z@ m°¹_Î/IEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment4¨žy³1IDAT™cø€á1€Ð†0ô‰áÃ;†{ ûÀÈ,Tó ýb÷äÅÌÄIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment4¨žy³/IDAT™cøßÁðŸáýa`øF€Ñ1†s ódàX% „7U1,ÄIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment5ß™I%?IDAT™cøÀÌð€ŒäÔ3<þBþ3°g8ÀÎp˜™á?#ÃÿF†ÿ ǘᨑ‘¡¤æ‘<†ŠüÓÌÕIEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment5ß™I%CIDAT™cøÁÌð‘á3Ãv†ò ÿ3<# $ÂÌðœ‘á}?ÀÐx€Œ˜š˜øA*ÿÿö1)×p/žIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment5ß™I%EIDAT™cøÃÞÀð¹á#ƒhß¾áÿ~ÀßÀpªæ#7ñf`hbfn€`v††& º¨YÿìïŸ%òìŠIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR–᪠pHYsb&2 tEXtComment5ß™I%EIDAT™cøÿŸá3ü`døÁ Fì ÿCчz†Ì ¾`øD~?`8F Œƒ ›Áºøþÿê&¶4¡Y‰IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment5ß™I%GIDAT™cøÀÌðˆØð3<°gxüŸáù†‡ÿÈ3Ø̼ ¯ IEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment5ß™I%EIDAT™Ì!€0Ñùù¢²Gભá\›p‘&,Žº…’<;Ã,Üù+ŒÊ0±9*J®À7,ÑEˆlË+üs{/¼Ô’ÈéèIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment5ß™I%CIDAT™ʱ €0Áµ. tI´v&¡­GhÙS:0Ò$+-icTbçZô_dŠ(ܰÌ4Ý4Sâ#£Æ)Ž|ê ] ›6Í=+IEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment5ß™I%>IDAT™cøù‡áà ’axð‡áû†ÿ`ôþÃC ÉÃðŸ…áõ70´70°ƒ?ÛÂpž‡áŸ z¶½ó ²…IEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR ~šÄ pHYsb&2 tEXtComment5ß™I%CIDAT™cøßÆðƒáÉ1<øÇðŒÿcx$Ùþ31üg`øßFž`h?ÀÐ $Î¥Øþñ1üÿ§é £:Ú!IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment5ß™I%GIDAT™˱ €0 Á—#¹ÌÌjႵ,(R²BF ¤²Q®=*y”©„bK<¿+‰În¡lÆaxà'm§ÉZ³ónT~r¸»@rãIEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ~šÄ pHYsb&2 tEXtComment5ß™I%=IDAT™cøÿáà bcøÀÇðáÃ÷ ÿÁäƒ:†l Ï™þ7€Ñ: FÍ`t¼á|:rëÑEÁ •"„x›UÌ]?’‹F!Hq+SÿÇHOÊaÕ —“ñÚ°hIEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment6FŸCIDAT™cøcÏð™á#ÃF†ÆFæƒ Ìç˜ÿƒƒ<;c3Hý=€¡ íš2<Ìð€á?Éã#©SIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment6FŸ=IDAT™E± € ÀSb(ÁY ki¾p ÝÀ’+ãåôÅÃÅN)jUOi˜«)K!ÿö=C„»éÛ ½ÞGcÁBIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment6FŸAIDAT™5˱ €0 ѳ\¸d$V òbþ›Xb”tHO×ÏÁ Ú)Cƒk"ora'8.¼‰ÞýäOEi¿3^+®Mä–äIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment6FŸEIDAT™]̱ ! CQ£+(YÙ·YnF ¤@ˆÑ]ñ$+q¢Ý¬õX³X]WØr 0w‘Y¨±_ïÏÇMäº#ÿVc MQ^i“IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment6FŸ?IDAT™EƱ À EÁ§dwf#f³B‘µ…(©Pè"]q¬`)º(Â/Ã4tÿàI?¼IO¦XÆŽ [ÆeTIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR øÝø, pHYsb&2 tEXtComment71—( 0IDAT™c8ðƒ¡ƒp0|à`ø#ÁðO‚áý€¡ Àèý€¢ƒ?ÍeŒz-IEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( 2IDAT™c8PÀ€ 00|`ø'ÀðÇŒ ~0|¢ >0@B`ÔüáøÐ!‚*KžIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment71—( 3IDAT™cøaÃð€‡¡ €Œ ÿXÀˆ‡áÉ0ü£6 ô‚j@І‡-Tq9IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR æI!Ç pHYsb&2 tEXtComment71—( 8IDAT™cøüá€C``xÀÀðA€á€Ðÿ >0ü£`ô¨†‚Ñã@eUV#M’w*IEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( 3IDAT™cøðáÆh`øF @è0|¢ ôŒ‚Q#!z‹ÿÊYfkIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR ~šÄ pHYsb&2 tEXtComment71—( 4IDAT™cx`ÀÐÀE L l Ø~°1üã#9úF?ÀèƒÃ;0ªƒ¢@ôÅ*ýk²TIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment71—( 3IDAT™cxø…¡ X>°0üãaø/El`¨†á‡ Æ5tˆþ0|üúÍþâXJÕIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( -IDAT™cxðá H`ø'ÀðÇ„~€Ñ *`xF`¨H~`8B`i† šÅIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment71—( -IDAT™ch¨`€ƒ 8~p0ü" 0²¡ ôŒü`8CAy'Gá¤W²IEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR >Ÿ[Î pHYsb&2 tEXtComment71—( ,IDAT™chH`€ƒ† _þ$@Ñ0úð„€Ñ aè0­Îâö)ÙIEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDR øÝø, pHYsb&2 tEXtComment71—( 5IDAT™cø`ÁÐÀÁ ~p0ü" úF?€È‚¨òCÃ0:A?@èá²ñ´ïm‰oIEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR õÈk pHYsb&2 tEXtComment71—( 1IDAT™cøÿ€áC =``ø ÀðŒþ$€Ð zÀðáÃ0:ˆŠ?`8þ£Wó~ÁÆTIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment71—( 3IDAT™cøÿƒáC1€É ÿ9ÀH‚áŸÃ ²`øF* èý¡ÿ?nIRáÔîðIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR “ pHYsb&2 tEXtComment71—( *IDAT™c8PÀ€ 0ü¡ Àè}`8F 0ÔFÍ´¦¢«MëIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment71—( 6IDAT™c8ÀÀÐÀ€ Xþó0ü—aø'Ãðˆl~Ø0|€ †5 àè=üWxBîóIEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment8¡(5˜HIDAT™-б À Ä, ʰ³¢¤øµ)²Æ‰ (SA)’+Û¬ÉÈ(ROÃ*&.§SÅ}ÜU±‡$Òøñù>ÑÁ›Yó†PáœØ°IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRáÑ!Ñ pHYsb&2 tEXtComment8¡(5˜9IDAT™-ʱ Á7–¬Œ¡°t%Ü7ÉUŸ'^±Ž­gÓZ¯ì‘ DGâ9Þ§¹Á¥7IEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment8¡(5˜KIDAT™cøÿá‡Ã6†L ‡Pó#†Ã@Œn ø€¥00†L ‡1´¡æ 1401`ƒ!&†c í ýú Pû!†ãl äþ× ÔðQ ü´IEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment8¡(5˜8IDAT™E‹1 Ä‚CÇúeA°ß*¾äžbu2].ÈI#±ÉÜ cÔîÈP#ÁU]Ÿ:W(?¼~ÓLëê±IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR‡“ pHYsb&2 tEXtComment8¡(5˜DIDAT™5ȱ €0EÑRX:‚³¸™`áZ~R¸Æsƒ7@ &`àT‡Ö¨+Î(/áIÜûÈÎ ƒ <âòï4Å(ðBÝ>Û æ±·ÊIEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment8¡(5˜DIDAT™ȱ €0 EÁ§)ÃÌÂh‘(R²R€E<‚@1ßÒUG,¢á+¼–N£ËÁ,IïDçšlbiÈÃ]ñX?PßíÆ¡0IEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment8¡(5˜BIDAT™cø#Ïðá3ÃF†Æ‡`ôD682 ‚¥>02<``8ÞÀÐ~€ýû(jÈpü1Ãv†ÿÿ¯íŽ?wŒIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment8¡(5˜EIDAT™̱ À0 Á.Tj„¬jcˆ×’ª¬!o Bd¸òy¾‹×H%Ï`k37#è ×#nAÁËCKe“®uøFF­¹‚4qIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDRáÑ!Ñ pHYsb&2 tEXtComment8¡(5˜?IDAT™ʱ À ÁR¸ôÊŽ(\²–¥Ì0XºòØÊr2ñ¤Eùk˜0„ù–ÿ¡_†tYx7èK¼“@<IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRØ¶Š pHYsb&2 tEXtComment8¡(5˜BIDAT™cx<‡áxÃñ# í0Ô|†¡±‡á€ Æ< Xæ30È70È?!~ ù„ÿ Cû†ãsþÿQ A¢ó7)IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment8¡(5˜@IDAT™cø÷á?Ãù6†óÇúPû1: Bø°1ü`bøD ò òäAQÃ>†ÿ¶Z¬H‡ÇIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment9Ö/=IDAT™± À@ Á ]·jqۺ܆Jp~Ð0ôÂI!¢È=Mö4ÑMÿy7*¤™øÂë¡Ãê—Û7ŽIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDRÁºIw pHYsb&2 tEXtComment9Ö/JIDAT™-̱ €0 Ñ“(\f2ZF "k±ˆ;Z@‚Bñ®<. \¶)°E|H^~«™^ +™[}öà”CÚ§I?ŸãÑÀ#Nê®ÃIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment9Ö/7IDAT™-ÄÁ À0Á ~èy-Ë\c7’N Âd*çË´1^ø|¬mÒM‹lõˆ)îS*IEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment9Ö/GIDAT™cøÀßÀð€½ácC3Cs```GÆ@1nâƒ@ü¨öÿ>Þâæf ÝäÍ{ ßÀ𡾃G ¡«ã!VIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment9Ö/JIDAT™5̱ € DÑO((ÁQ=Âb ×p Ñ#hñšËå3vqo¢&‘£(Y„&¨?-}Êšéöø3]V¦¶§OÕÝ~èI!µj6ÜêIEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment9Ö/=IDAT™c8ÀÏp€¡™½™ý ?€¢þ í ~00üo¡öF†f0bgê} Ï𡘒`%PÒ‹IEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR.x"I pHYsb&2 tEXtComment9Ö/HIDAT™=ʱ €0 Ñë(³RFa䂱ø‘1b&À„(ž®9rg‡ a¯^`úد3J”k†¬fý.±<†.öUDÓ €þ*…ÄÁ¢µIEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment9Ö/:IDAT™E± Áï(Éá,X Â"°´R/Ç)„ :2þ·Æ0–qótÂñ–•^Øõ²P$Û\œÀIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment9Ö/8IDAT™]¹ Á.¤Jň€¶L't“2V%2.’¡»¡‰üß!`·wÜ3Lx& «&Êq¤-(KIEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment9Ö/JIDAT™cø!ßÀð½ásÃÁƒ ͘˜„0€1ó 8òñ_ û?P ⇠ú²Í<ß]ÿ'Š ìIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment9Ö/BIDAT™cøÀÞÀp€ˆ@°ˆ\æ@ü Å€R @Šáÿ2>q# 7Mšshæù†õ ¬Éëµ|¥CIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment9Ö/;IDAT™cxÀÎÐÀÈÐÜÀÀFüHˆ†€²00üod8ßÈÐÞÈÐÜÌÀÜÎÐ Ô+Ïp@žáA=hí½É­°dIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment9Ö/5IDAT™cx Çp€¡¡½ ŒÚ0°ÃP; =?Àð‚1obh¢6†Ãm ½?ìO9g3¨IEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment9Ö/>IDAT™cø Ïp€Ÿá03Cs3ûAö üpôÄmo`hg`øÌÀðÿdh?ÈÀÜ BÍì ü ìÞ;¨h®ŸBIEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRáÑ!Ñ pHYsb&2 tEXtComment9Ö/6IDAT™cxÀÏp€™¡ù 3!vTÔØÀÐÀÀp€áÃÿ Ï‚ƒÐa†Ãí û™¼ÕêáØÞIEND®B`‚leptonica-1.70/prog/recog/digits/digit_set10.pa0000444000175000017500000007556612251652223017515 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRtÏúÓ pHYsb&2 tEXtComment0¯ó½ªGIDAT™u̱ €0 DÑ/ Ø‚QQ¤,f61¤LåËA¬×ù>Š‹âd²3ØH nAW³àPþêŸðÿ«‘Þ¥;ýénùôÔû.aQ˜yIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR쒸ΠpHYsb&2 tEXtComment0¯ó½ªVIDAT™mͱ €0Dá')Rº€à"‚«X¸–Ù$#¤´Ïü`ióU;,‹‡Y\Œ¢‘ERÇâMì.A‡+d·R°»‰-âœ1P—¡Cú>nVa¬XØ6y©&ÝIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR'Îkk pHYsb&2 tEXtComment0¯ó½ª\IDAT™=ͱ €0EÑ )ÁEGóEÖR2‚ Ä R¦ž‰ˆÍ)Ÿû±,n&QE!ˆìA>Dò.6çNñB'ºòoï]òÕ©¥ÖÖ+sè?ZÞ,Óz÷K;Þ`¹QIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR9Z²€ pHYsb&2 tEXtComment0¯ó½ªGIDAT™cøÏðŸáƒ=Ãy†ü ÿ334ÿofhÿŽ á`Ì”cÿßTßÈÐð™á€ ;PlÖ†z¡%Û˜ ¬IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRN˜rû pHYsb&2 tEXtComment0¯ó½ªJIDAT™cøßPÏðÁžá?Ãf† Œ @Üøù?70°ÿ?€„ aˆ8H]3P}ÃF° ³>0°ƒÍ™ÿ¿ñ?ø6&Àä:·ˆIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRÈ U pHYsb&2 tEXtComment0¯ó½ªKIDAT™u̱ €0 DÑ/¥p™XƒŽÅòbñ&fƒ”H‡EOñº‡7Ä{#Ôp9¦(ùé?LWµÁYý¨]®Æd©Ï¹^{)o,à{IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR¡ZÅ pHYsb&2 tEXtComment0¯ó½ª\IDAT™=ͱ €0 DÑCiÙ€QØ .JÁZŽX$#PR  š'ö7´‰&âÄHìH¦'ÚÜ!ÕdQ¸iÀjÒ;ÅGùy–³ÏB® î9z8ÿ<–›êç/˜p;­TãÓIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRSBC pHYsb&2 tEXtComment0¯ó½ªIIDAT™uͱ€0Ác(€”ŒR;{:y:€Ì!œl¦9! e¡³Ð˜¹†‰ü¬ KêpÿÚuzgå ·:ͺ{ÛŠ‚¿^5eØý&ãIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR…Ä¡^ pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÇðŸáƒ=Ãy† ì@ÌÌpà#CãF†æÿ íÿ0°ãÁÌ@ RÂzÔ0ƒÍùÀÀ6ó?ÐìÿÿfÔ)¬0s-.IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRèghó pHYsb&2 tEXtComment0¯ó½ªYIDAT™e̱ €0CÑ((³BAdÆ ;FË(!eŠHÇJšWزñáÂï°ŠÁ":œ´B¦™2²òHëÇø¡he/-¶%¶Wª™}þcóÞëtÓr§9 eD;¶IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRWh’~ pHYsb&2 tEXtComment0¯ó½ª]IDAT™mޱ €0 ?JA e•lF¤,öˆE2BʈÇV(i®zß’5GIĈDG Úê‰S-zÆ¥Ž‰:1~`»:/˜Á£˜e.®_¾Ðƒä]Û/ŠSEò®¡ƒZIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR¥Í pHYsb&2 tEXtComment0¯ó½ªUIDAT™eͱ €0ÁER¥àÂÑØÑ‰K $@<~;$™è´‡±‰‡IÜDq1ˆâhEì–Sç0Aèˆ?REm§J§yei½àåè£x™…ÕáJÀ4JC[IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR1qc pHYsb&2 tEXtComment0¯ó½ªSIDAT™]Ë € CáÀÑÜD 6ë(ŒÀу±‚1ÆxyM“~0«Ø™D#‰J"t¸kqîÆÚˆ®/¤?ê7R,‘GWK£á™¿Nfál]º;6Õ÷k;“IEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR쒸ΠpHYsb&2 tEXtComment0¯ó½ªXIDAT™]ͱ À CQK¤Ë%›EF,“„(SDç‚*Ík|úQ„á ìDG$Úˆ"§ªY…jDœtüñu‘ÇIš$¯˜WÚVù '¡[ü4<5ÿˆŒ#‰IEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR…Ä¡^ pHYsb&2 tEXtComment0¯ó½ªJIDAT™}̱ €0 DÑo¹H °(RŒX,lÂ)©rÄ @qÝ¿‡¢2ØxXènœ¶:×0N® ¨ý,¾&Ûc~ÚîÓH'½t+2½–}%¤û óIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR I]›µ pHYsb&2 tEXtComment1Øô<)IDAT™cxÀ€ < „@¨ò€Cƒ˜ü Àð/fÖÞkIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR ãU pHYsb&2 tEXtComment1Øô<#IDAT™chp``p`’@Ð"P=C40ÇRam¤IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR ÏÉé pHYsb&2 tEXtComment1Øô<*IDAT™cøÀ <@A?0|€!©j`€ée`ø“ž ¶×—ÆâIEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDRy-³ì pHYsb&2 tEXtComment1Øô<2IDAT™cøÿ‡á C ±0axD6¨H$Ž‚xx@êáz00|`aøÿÿ{kž}IEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment1Øô</IDAT™c8 Áp€ŠH0<°`xPÁð¡D‚*Bi``à`‚†?UípæIEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR «€Ì pHYsb&2 tEXtComment1Øô<'IDAT™cx ÀÐÀ@Ɔ  H  #J$½@ðGý”Hû²OIEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR -òb pHYsb&2 tEXtComment1Øô<"IDAT™cx ÀÐÀ  €¨Š ¡ØP=1È‘¶Ì[FIEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR ÏÉé pHYsb&2 tEXtComment1Øô<+IDAT™cøÿ€á€C ¢*¥Àð€á}P`øÿ7»ï—B¯IEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment1Øô<(IDAT™c`€ † ô¡ŠÀˆX€Ô7p00p€ÈÝÙ§81SIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR -òb pHYsb&2 tEXtComment1Øô<IDAT™c8ÀÀЀ„00¡‘2hú‰¡?5ÑUIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment1Øô<-IDAT™cøÿáC˜~°ÄÆðŒ€  â PdÿýåwòZ—IEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR Ñ]0ð pHYsb&2 tEXtComment1Øô< IDAT™c`p`€ @t=#4Á† @)O¡Çï°:IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR WÉB^ pHYsb&2 tEXtComment1Øô<IDAT™cøp€á  8ÀÐàÀÔLqéeIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR -òb pHYsb&2 tEXtComment1Øô<"IDAT™ch0``€" û*`x€‰ @$ Ôÿäõ/0;µ™IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment1Øô<-IDAT™cø ÁÐÀÁÐÀE$T€Ð²!ˆ:`Áp€¤—h‚q9ñ §©IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR}$Z© pHYsb&2 tEXtComment2Aý܆UIDAT™-ËÁ €0DÑo¶Nl%(xÈÑl%žlcJÈQ²Ž"˃=Ì'NÑq!_¶Dµ¥&ÖŶ–Ø-^ÊDqX±Ñýä~­ÿ­ñÉþ½¹õ*/+³È úâIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment2Aý܆KIDAT™cøÃ~€áㆠ08I† n2Ú00ðñ| þ„þ71PÕæ ÿ@zåzm€z!úPȼ¥ˡ۰zIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRJï pHYsb&2 tEXtComment2Aý܆;IDAT™cøÀØÀp€¡à˜Hð``b{ þ ÿ˜¹áPÁþ†ò½6ú“èæIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRÛÛ@¡ pHYsb&2 tEXtComment2Aý܆BIDAT™-ʱ À ÑC)(Q±”²’‹x„”(Ÿ‚œ^y¬Ì{ ƒÛ(N t8êh U¾Æl„þùd‰¡ åê®ãˆIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment2Aý܆MIDAT™%̱ €0Ñ£¢ÌH¬E‡%ŠŒÁ*A,’RR >&‘õÊ3âÅ=‰Š(ìrƒd‡Å¯Š8í²lI<‹ÛÍí::ucÅŸþÿÖá'2ЖsIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment2Aý܆@IDAT™=ʱ€ Ñu~@H –BiœýR,ÁÐÀáÀ„.w%ˆ¿§hI^.¸0*_ãí<&ÖÛŠ_(0)IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRÅO™J pHYsb&2 tEXtComment2Aý܆DIDAT™cøÃÜÀð¡áâã@Æù ÷ø??ánbö†ü ìzøD_`l4«?C$Ö´IEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÁºIw pHYsb&2 tEXtComment2Aý܆MIDAT™˱ €0CÑ€¸Ø€Un”H)(Y 6ñ”Q‚Eñ,7Ÿ†xIo\V|ªœ6–&Æm³è‹h«Û]hKwA1~ “>_!]$îŽIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment2Aý܆;IDAT™cøÃÆð€‰áCóþ ò@è?`øŒÚþó1ü“cøQÇðáÆ$ÀWRÖ§¥­IEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment2Aý܆HIDAT™%Œ¹ À0 /Há2#xÔ0“Y£h„”)ò–„ GÞ&îUœ‹äeâ[ÝŒ_˜Ãø9½.®Ýî#2Ê«qrŸK~¾m~X°ÊIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRyÑŠ” pHYsb&2 tEXtComment2Aý܆KIDAT™=˱ €0 DÑ(Rf$6C‡„U< #¤¤@˜,=Ë…?™âªâDC¼d«WiPwØ,£¹XùÚcr;ëïúØõÛ@ôÃôBLbæ[ø­¶G IEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR4+Ÿ pHYsb&2 tEXtComment2Aý܆GIDAT™cøÃßÀð¹áCà ÉÀÐÄÌ@;÷ñnh`øßÄ@õ }?äzízëAzÀz! Œ˜›¤k‚ެ·IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR’æ1— pHYsb&2 tEXtComment2Aý܆JIDAT™cøÇ|€áㆠ @q79Ìøx>ÿ?àÁ@‰ÿ@½ ý?ø0|?Àðˆ츀 °îþy‘X:IEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment36úì^IDAT™U̱ € DÑ3´ŒÂHŽÀ$àJ'qƒ+I$à7V¯»‡5”Õ”TaEy£î5jú8ƒí…ëÛY¶ÓÂÖb‹ö·!´¨ÀßÌ×ä¤B·Óï“åàÒxæn™ø¸ä]–¹ëê&.íóL§¬ƒ²¤¯ä¬Pµ¯ÉðÕ^¢q9ï& ìsIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment36úìeIDAT™EÍ!€0 …á_Lr„ ÂÁˆMq­%\‡Ѭ¼e$ˆ/iÒ÷Zü6¼l8 ˆ1ñ†5àÏ4X”Es§|í½¯›´KÊ”žëÀÛï’Cr dí“n–9rêoeÓ?ÝÙíÃþAI ÝÝ8IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment36úì[IDAT™M̱ € …áßX¸£1ŠT®eâ®pná|`cñ—üïðd8F#R ä!J øñ<¨+òÈ%Úu†(ê µÒ~úç–C÷:’þíÚž‹a«Q7{·ø?è$oIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment36úìbIDAT™Eͱ€ DÑu ´J¡4³[À˜1!¸ñü˜¼èv÷ä›éQ‘)k|’:Ú4V]¸á#É{F‘7“_ ëšý î•\d'ÉíwZÔŽÀÖÂVe«Ò;øÝÐÙ±`/æ~> T=aIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment36úì`IDAT™=̱ €0 DÑÑd’ÑRFb±lÀ Œ:KD˜$Š'7þGt'Z%(L c¸qLãÔ_!†ìúoêxT.µ¡îÕ³~ÄùÌÏ&«gIÚbuíUéÚI{‹ßÖ~<õdy-¨IEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ì pHYsb&2 tEXtComment36úìZIDAT™eͱ€0 @å(²†GóŒ&`¥°‰©hM—"‡QŽƒ†â+Éâ0Äb¸0(þšgÄGn¶ç6ÊÀ¬²ã`úßJ™¦.HüWTQ¸[“Á³Ýâ}AÏùÛw½IEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment36úìTIDAT™e̱ €0 DÑO•µ<R³DÁd¨Hʼn‚âI.î›XœÀiUv :âa/mOY%®«éÚÇMMÔ¿­AªŸ¬_³™j§LNM~Y9ØÑ& èIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment36úì[IDAT™eα À DÑCPfFa4 º¬•QÈHi\Xq¾DY¯±|¶rªËÔ´TqhvØvãA,̺] ® ä^r¡B_ÌÂþNäU”Ø¥ ²ƒÛÌä²ìßH9é×åR‹IEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR$¡ˆ' pHYsb&2 tEXtComment36úìdIDAT™Uα €0…á_,RšQ2ZF,\Ë \!âg!x>A‹®xïîð`xg\L%iJKl5á??•?d—IxºY"¾ˆ¡Ü«}V™%ÔH_"²£î,êí0ýлm3A/ØØ8'IEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment36úì_IDAT™Uͱ €0CÑ(R2-£Ð±k±@ʇ%DAñ\}Ä*îAtD¥8_ÛRØUˆúqÚe‡%÷Æ·×}“ Y…hÖÿæž™Z&µBòÖ ±øïæ:éz@?T&jœIEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment36úìZIDAT™E̱ €0 DÑC)É(-;°ƒ`6°D“""| $ŠWXç; ¹nUu4®—YÑ…á«p;VLÑ äÊäâ ýw`iY)xÖÌ®ª6úÆŽ'C;irA]ÈIEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment36úìWIDAT™eÍ1À @#F¾ÄÓxš«ýL]32 RgîpC$Ûb'b0aÓˆW<èö)—Üò'zY”?hp@9YUŠd ‰ ]½®¿CVù=éáp!IEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment36úì`IDAT™5ͱ €0@G)(ŒÂ(?J$`(q6ø2EÄc(Nߨ~ÄEÜ  ]Ü šDÿ‰h¢|’ÕKo×D™*Ž©Ƽ§6VY´™Ýh¨úYÕ§vÆÆ ¿= ØÁŽåIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDR$CTÄí˜ACP΢Œí°ãŸÿÈXBoÒ§¶2IEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³MIDAT™cøÿ¡Žáÿ;>Ä c€àPü„ ê~Ô1|êùÄø0ÿð¡ýAûÐÄ€ÌGÆv˜øC7~<ïw=IEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žy³SIDAT™cøÿç?Ãÿõ@lÏðÿa X3±D=Ã? þcÄõ ?~Ô3|„âÇ@|ˆÛú›?02 ˆÍÌ0ÿ<Äl~€„ab?êi?>±ÔQRIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment4¨žy³MIDAT™cøÿãÃÿuüˆ@q3Ô1ü3¨cøÂu ?@¨î#?âÇ@|ˆû¸ý üÀ4Óa6VüF®@[_{IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žy³WIDAT™cøÿãÃÿ5 ÿ€° Ãÿ5ÜÄ üO †áÔ0ü(b ú@üˆñq nÿ`ÃÀìÀ€, ÷ðͶ˜Ç6h(öçRã@Òó½/IEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment4¨žy³SIDAT™mͱ €0 DÑ/ ʈ ,&a.ÊŒæQ"±@Ê‘¥XT¯ûºÃÝp||¤žZÐP‹…‰0N¡¡½ z*|”G÷µÍ¿+¾ƒÛ >;_ÐIrIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment4¨žy³TIDAT™UÍ¡ €Pƒá †@0QÁXHk]Â"°ÁáNŽ’â5ùldÒeûÌ,@ܯ–¸$™â”C6Ye‰0T³±Ñ?kÎÒû&†8},œÅIEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³WIDAT™cøÿ¯Žáÿ;†ÿ ø€â f€àv  ì~Ø1|ª{Äø 7qã9&h²ÿàš'5[a˜ åÿ°õ8•µB!IEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR"‚/O  pHYsb&2 tEXtComment4¨žy³TIDAT™cøÿþáÿyñN ö0‚Fü“@âOø">€Lù"C Þà ¢ˆ€À¬ÿ€ôÿü BF \ð•€*ísJiøHmIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRœÓû pHYsb&2 tEXtComment4¨žy³KIDAT™cøÿ£†Œ?ñ >Ä @ÌPÃðŠÿñ…† @\PÃð¨î 7?°a`~ÀÀ>0°Í±˜‡ÿ0üÿøe¶4j±I˜ÕIEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment4¨žy³HIDAT™cøÿñÃÿ@| ‚€˜‚ÿñ þ‘Ä*>Õ}â‡@|ˆqÿƒ ü0Àÿ@\íüø×ê>„IEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿãÃÿ ÿñ(n8Á þñŸ„ ?`øðáÃG ~ d‡â~ æêef@€ ›”Ë?]ÇAÍ}éÚ3IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment4¨žy³AIDAT™cøÿÀžáÿ$ÜÄ üˆÿ€°=à þ`Ïðˆñc > Ä͘P#Ãÿò@lÿc-~3[4XìIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR"mí$ž pHYsb&2 tEXtComment4¨žy³MIDAT™cøÿÇžáÿy~Äì!¸ŠìþAñ þ¡`Ïð¡ˆ?Ø3<üPÏpŠÛ¸ù#02ô?`š 2Š`Á`¹ÿ‹4;†Fè}tIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR$»´Çƒ pHYsb&2 tEXtComment4¨žy³UIDAT™cøÿã?Ãÿõ ÿ?ØCð >Å PÌ`ÏðÏ‚ÿTØ3ü¨¨gøÔóŒíéç@|ˆû?020$0ÀA#Ð\f öüþùlDb!·úIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR#^Q Ì pHYsb&2 tEXtComment5ß™I%PIDAT™cø# ÀðƒAáC?`øÀÄÌ>þ‡à‡PüAˆÙ!r 5?€jÿõü? À”føÿ7nb 6 P@ @ü€¡l..L8’ÎÔW_IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment5ß™I%[IDAT™]α €@Ðo¤¼ÅÂÁL<7ÓÊ5pÊ+ˆˆx•Å ÿà7£¡$í$q˜ néêSÖ0Ú·Ë ÷Ák @DgØaP悊cÏ[Kü`ðà ‰9¾êª,ÀIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR"‘øT pHYsb&2 tEXtComment5ß™I%LIDAT™e̱€0 CQù\dŒ¬*&a•°‰»´)CethHñº/!ƒ âc’Dÿ¹¤U)âb«OJ2d¼æî”2 ¿ ;hO__QùmN9Ú%°&–IEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDR$CT»Z¡f|X›<ÂÎÈ£IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR''U£ pHYsb&2 tEXtComment5ß™I%_IDAT™mÍ» €0PG)R&£Üh·Ù€•X$ˆ‚öÊÁ|$(üäÎFßzzJ!ÅB[·Ëúéy4L<á¤Ü J¯ú£ bò¦pYùlÈîÞ+ÑÐ;á´FØÃIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR%jÔô¨ pHYsb&2 tEXtComment5ß™I%[IDAT™e̱ À0À·\¤eƒ¬àÑ2‚»¬• ²Q tGã.ÅIž‡W!)ÚráqûĬ;U*6ï‘Ì{—ÙÃH7÷'UÊ%ÿBgGGvÚfÕ©=­Ú'óIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR$¨c‡w pHYsb&2 tEXtComment5ß™I%HIDAT™UË» €0 EÑ‹R¤ÌHYÍl61@IÅæ B:Õû !ç†ó³à¡°kòÐñšy´±¹@†FÞ6Ž+X}5FÏ»ô>08ž–ÚaIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR#Z¤Üñ pHYsb&2 tEXtComment5ß™I%TIDAT™cø¼ásà ~ÀˆÀ€üÇŽÿGàÃ@|ÀˆÙ!ò@jþâ üŠ a¨x?·?h``~ØÀÐÀ Á ó>È7¯;ž¡W*IEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR!l}ú pHYsb&2 tEXtComment5ß™I%HIDAT™cøÁßÀðˆ0{ÃÇÿüˆÔ1PÝ øfþäÿÿOÏÿÛÀÀþˆ0ACÐÎÌ`»[™9íV¯;YIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR''U£ pHYsb&2 tEXtComment5ß™I%^IDAT™EÍÁ €@ DÑ=xM¶`iv ¥‰ ØBJˆ·=ñ/+ëᓉò1e•2$†âãƒaQl¡ tÛjÖž![‘¼wõw±Oa*nYq+:Úç'½yÅ ]<ÍàyQ IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment5ß™I%QIDAT™mͱ €0CÑR¤dVÉfŒÂ*å ¤L•àˆ$ŠWX:ûµP)ć8‡¸^fŽÝ6K¶È=Ñ}?Â*öï°Õ¿²¥Hhnx«eÝÂÝ=€ˆ©WìIEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR''U£ pHYsb&2 tEXtComment5ß™I%[IDAT™UÌ»€0 Pq €Gñhl@8KÇf—©l”ƒãS¼Æ–„LE† › p²‡Ò GþÙD#Á¯ ³½›àûÕ>îÛî‚ÍkW…ýÂví¸éÜŽÅO½²CÎ`Ñ„IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR"zÏ´W pHYsb&2 tEXtComment5ß™I%LIDAT™u̱ À ÁC„”d:Ã¥D@X4ð¼ÏÉÁd«…EbÁïqbJßš°JõTÏÝ: |`±“‚,I" „åþ^‰°‹/óA³ênýÚ²r2r¾3%2›»+]Âw7oÚ’yü¬hæp@ÄâÛµ IEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸaIDAT™M͹ €@ DÑ/È(Z èŒCÐÖ–B X6à ëIØcÂ:¢´D–U™×X㜽S&Yœ#^™Û(-y¨I&^±K°’óìlV±žõs{èOQ1É/“-62ÈæŠIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸdIDAT™U̱ƒ@CÑïcæBœ:‚Np[ŽðÎÐîäJ $¸YY ÁK´Ò¢\P+(@@RéLœäxÚœ´·}“}0Â÷p/>Õƒ‚« ºÄÍælSág{¯´Wå`äôΊ<–ò`·20^ª”IEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment6FŸ\IDAT™}Í¡ €0…á?Ap[Éu¬…l@ Y©¤‹t„Ê ÇÁäåSOüXXŒ@wúnRÚ¢TS²»\q›‰Hšƒ c¦›_§;ºS(MÈõëDï­Ø®çù1Äᣖ}IEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment6FŸeIDAT™eÍ1 ADÑ/˜4xacï x%CÁ/6{“9„4ÓÖnjðè ŠjÒÄ.òbœƒ¾í.ï ¦\WæÜÄðgá…ã”äÏi»“=ÿ¨·ŽB}M?º6†Líå7~U²+uweþ¹IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment6FŸ`IDAT™MË!@PFá#½×TKÑlKcFm‰lƒ¤Šxó®kÂ×ÎÁTa{ÄúCä R)Ô¸N\&ŽÏrŠ™GÍâß"cŽ„ Á ü™ÜøÈ¯ÍÛÕŸŠËÑ’ aA7C9ÃñÏIEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸbIDAT™]ÍÁ €0DÑO±KQK±’¨x°­ˆÄ<æ »®"2¼ÛÀGUÐdÆ€{…pVBn…c0öIf71" cW3eÏ,%‹º>âÛéXsIê= ÏAM~{:Ë?>ϼIEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment6FŸ]IDAT™=̱ €@DÑ&W‚`#‚ *¶¥Ø†Á•p¡Á²ë¨`ð’af?‰-“Ðàµa­qõ2Er|6i$1[Åâ°¾&jY_~<vu³%²ö…Ó—c7ø—8ˆ3øÎöIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment6FŸ]IDAT™EÍ!€0ƒáŸ 6‡ã8®…c ‚kÁMvdÙã-! >Ó´)¦ + ËŽDeáB£¸f·Šbâl<Ï4¸N‰þŽ„Úð^Ù½·)røWñíå?êôä3/6ä'{xIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment6FŸ`IDAT™=Í1„0 DÑO(³œ.ŠW{±%GHIÙ ¶xÅx42Nô…h™(bg¡³ÓGçø8muêE¹è^ÔY&lNXOà‰!^Æ÷›©/R7™'šöÇó'~~¹3Vh…ê”IEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment6FŸ]IDAT™UÌÁ €0DѼ,h)E°±€‘4–RR‚Ç–¬o Ì0XOX‹X aQ}SžÓ]J3¥NÅy—9\¤¨ÆB° ÖŸü)ž§ÛwUÝ.4¦H÷Ÿ¾’1È0^"3IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment6FŸVIDAT™mʱ€ Á3‚ÈlÃ̶ÌÄ¡1ìÀ°ÂÞ%4Øè­-&ºÚ,È*Ôݨp9{â8š'uHúq?Þ>œögñ‚Y¨l´I{!5Ù2. IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR%gÊ„ï pHYsb&2 tEXtComment71—( UIDAT™]ñ €0ÐRX:BFñ6S±ÈXþT®7H© ž'Dj?ðÆIåEœH¾oP…IEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR$CTÅL<þâ qÖ™Q½l~Ÿaß³ñ:7°©<ÈIEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR"• ßi pHYsb&2 tEXtComment71—( RIDAT™Mñ € Ðo,(6q7‘޵H\äÜ»+ŒçG®ð%U*ð; šuƒ©À_þ䃋¼ž> î_]m…+g'?s1yÓMAÓB…ÝñIEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDR&ì@† pHYsb&2 tEXtComment71—( [IDAT™Mα € Ðo,(uW`Wr1àJ0‰$.ðK "xÅëžBáÆ5³²’…ÉWÚp“(UTAâ£0Ä[MDVIq!¢òÕJ¸Þþór‘ÓÑH9§êHsIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR&ì@† pHYsb&2 tEXtComment71—( ZIDAT™Eñ €0Ðoei6p7p¥L  KWJ*×P\à:Sˆç— äÁí‚‹Ç ˆ¨‚wXó€5{¨ˆ=9•KÙÚ—Ÿ®Î½>8Ž60þ3«mxWùé|J“>!IåIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR&œ pHYsb&2 tEXtComment71—( VIDAT™Eñ €0 ÀG)(lÂ*Ù„H)X &`…!e „±eKœt¸…8t9þRÏXF†ôâi ¹b‹IÏÄkâ±+1t·›çîOñUO1Å&ü’½HÿI÷ÙIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR$CT»ÎCV2ÌåIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR''U£ pHYsb&2 tEXtComment71—( ^IDAT™Eα €0EÑ–fWpWÊFÀ•YÃBq/6â÷I>¦8·¾Pœê ?Ç~:TÑ£Yz˜vJ4Q=Mq·‚‹„Vû" F³Ñ$â× —eK‡r}'çIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR$G¡ìI pHYsb&2 tEXtComment71—( UIDAT™Mͱ €0Dá“)3‚£d4,,]I°p¸AìÄx¿¦Èƒ¯~Ø 1 O›KDÈD¼ˆrÈ.k5U^ñ˜ž¸å4‘Èfø%YŒ½¤k8ñ2¾óÕ9ixdAIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR&á^öA pHYsb&2 tEXtComment71—( PIDAT™Mα €0CQS¥Ì6#(‹kÀWR ‚ÑYK¯öÇÖ *>ÿ%Ÿ©¸¡ïtÐ*M’á–+‡³ÃþšƒIå7dP ›_QA”ŸïIEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR$NJL3 pHYsb&2 tEXtComment8¡(5˜^IDAT™MŒ± À OJÃŒÂX))ÒDYÌTYƒRº@ŠDÖ¯L#ñ¨lt(?gZ¾h®|YwüôÃ#§|[Ê6IÀPIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR#SO|‹ pHYsb&2 tEXtComment8¡(5˜`IDAT™MÁ À 'øˆ%XŠå¤ Ÿ iÌR,ÁçD²já˜ÇÁÎ.%*‘B ã9¸L4¸\÷ú§È•K”ͨb]Až\ýô]ì?Ü×µ5í̽ÕUe7g/#A.R uœIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment8¡(5˜bIDAT™Mޱ €0 /¢À#dÆaJÊ  ›d„”."à£P ëdɺ·M Na!oFvãp8ÚŸ>3RäU»|§*7j‘*J5.¹§rsçþxFŸn#hIò³îåõà (2.xm-lIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment8¡(5˜lIDAT™MA „@ KðâÁøó0ƒ°ìÇüÈ<Á£‡Ø³ ,¡ „®F †“1.&®œh;4‡#^tëøD+ mÍÊnY}\»Ë·Y›2–¨ò«ÜS|ÿøô>O«rrîßïBŒöxl8ªy0„IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR$»´Çƒ pHYsb&2 tEXtComment8¡(5˜jIDAT™EÎÁ „@ Fá'æ"N‚l,Å,@—ml¶KðèAŒ¿¢xø îŽÏ†Ó²XOUÉb·ôc~X¸,uTwöÆ~i%h/YÝ| õ9AöI²æWgúøeP?êΉø”Ð/°°45{˜6´IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR#¼µ pHYsb&2 tEXtComment8¡(5˜`IDAT™]ͱ €0 ÁG)É&d´ì@AÉJ¡bH,àÒH`§ƒâ[öóÌ‚‚)$JM,Y[$|$‚ú.³‹PF¡1êìÃU2§Ýv¿5˜ÜýÓç±7¼W­ëõ6Ê óZ5 ~×ÿIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/^IDAT™EÍ¡ À0 DÑ« bÚQºRax@Öj6ñVÜSU©à!ûô±vÃÜ Š Õ‚aš ú¤…WŽ_útj¼ þÝ—p/˜ä8NV¨"&©!±å‰­L'»a(Ê5Ó¿±£ÝIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment9Ö/aIDAT™=ÍA @P…á_^™È ^Ùˆ¥)Š2Q¶D6 nï¸Q_ý£sÐb¤Ì¸0k8SdWdÐ̤ñU¼úßðƒMµ ߤªDÉYüÜ ºZ´ê;÷¯ÂÕÞ=é‹<ޏßò]IEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/XIDAT™EÍ¡ À @ÑŸ Àa; ®+UbIE×¢›0òá %iÅÓf„ŠPˆä#p¶ÀÕ7lw/¯ÛfHÍ‘YêÐØP Kh4I˜W±BöÃ.Ü*F“2–êèIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment9Ö/XIDAT™eÍ¡À DÑŸA€‹Å¥ JÃ&Q % O0\ŽØˆ'÷/ó™N¢I¤ÎȳÎøM7~Ü‚jÊ„¶Ö L£ÖøHBGF» EXûË ý4—¹å1kãmáCIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/hIDAT™Mͱ Ã0„á?DàF#¼ˆ!‹¥0¨ð GÞÄ#¨tñÐå°_óxw‡èœ…ƒB‹Â>2u$ªn“mZ¸TÛý×"9›Ü‘ݕѯ ÷è\ný‹š·^Áð^Ÿ‚c¶oŠ?¡{=¬j„BIEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment9Ö/`IDAT™eͱ €0 DÑ) # ±ƒ!Äb%#¤Laa.¢¤xr᳆qÐÙ¨,2S$÷ÈeHƒÿÿö·deËŽî¡õ3âMú¬¹|ê†çƒÑØ&£ª»$Yå´0Ô2qj„òIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR"˜¯. pHYsb&2 tEXtComment9Ö/\IDAT™]Í!À DÑOàjëz ×6½GáÈ„í$¸Š'ç#£Q¨òô“wìDI3/ÛOš% ¸;Ú£NfäŒÛ¾¨å½àMªáÁ˜úkɨ›r‰Û¨t5Œ«ýñËIEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR$Tv¬½ pHYsb&2 tEXtComment9Ö/kIDAT™MÎ1 €0ДŽ®nÅ‹ ¦7ëQz„ŽÄo"]~“ "ˆÀEÜØ‰•èÈDC"êfn|D‰Ÿ<ƒ‰b¾ãz=‡&Ç'·)>ÆÇbTMåQÁÃw—hZKf}õRÍ}« E4¶  ÖIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDR#Wº¬¶ pHYsb&2 tEXtComment9Ö/^IDAT™E̱ € EÑ+&Ø9‚n‚›Œ‹1Š#ü’‚||6Zœêå]œL#ar³QY%RzäôÀ%ó,~³œRú5¢Z‘®ÎèÒ^ãJÉÚ›DgSÄv§þñ2=ö^»IEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/]IDAT™eͱ À Fá"ØY £YÌBÉb7Š#XZ^.mR|ð7÷Ý”A¡“2M·‹ë‹Ÿ]¡MŠ7‚·Ó™&Ì[6N¬gL V•õþó£9ÜåÛô33ròÎxIEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™]ͱ €@DÑ/Š&‚ XŠ`+rb`[ÚÉ–`xÁrëF2¼làµóî&aLX¹JÏVöxA-ÝÏ!ûgÕס!Ó­”‘pÉ“$â–Ó‰Ê15­“Af'‡?—Ê8cÏÑóÑIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDR!õ°fƒ pHYsb&2 tEXtComment9Ö/`IDAT™Mͱ À „á?D°²€5R8Z „,æ(Ž`iñМ¤IñÁ5wG[ŒÊI!‘§#r[àéß~L°ýøþYå6GnN}§@“Q¥EIÊRNF6Æü’²y“]ù²s°2^LáÑ&IEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment9Ö/fIDAT™-Ì1 …0„á ¤ xÁ‹^̇…×ÊQö)S,YG|ÅSÌ ‘ŽÓØ0ª\gán…ìI`ñɯñ™ä§ÎiIÛ¤BO…ð…èÒÄ69ˆê„ÊcrLÇ6;u•]9üÀ5ÕÕN;ÂIEND®B`‚ pix[148]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/_IDAT™m± €0ÄŒx‰&# ±H†aˆDFûQ2%Å+áÒS¸:ÙGlÁCÐÈ8;•D=Ëk¬“€mÒÿ™û"ê…|SÇÔ3º:ãÏÎh™á…AÑ“¾$¸DWØqÇ¥-V¾p€IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDR"s$- pHYsb&2 tEXtComment9Ö/]IDAT™mͱ €0„á_ Ød„€+8€àb6!‹½Q2‚¥ÅÃç[9¾òîˆÅ¹8éìØV0ÏÔ'Ñd‰_³4©؉úI;Ik™¸‡ò¹¤ï„91¾&§ÏŽé»¯rø ¿>4VíÈE°IEND®B`‚leptonica-1.70/prog/recog/digits/bootnum1.pa0000444000175000017500000006007312033121735017125 0ustar dandan Pixa Version 2 Number of pix = 125 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR  ‹Jù pHYsb&2 tEXtComment5ß™I%@IDAT™cø!Áð„H0þÁpüˆlüÁÐPÁp@$ø‡ƒáà j£P†}ƒ<ƒCƒÃÁN’×ÅIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR »šÀ3 pHYsb&2 tEXtComment5ß™I%DIDAT™eÉ¡ €0@Á—T ©3D’•°B–:‚¢©%9w¼A»`•Mf™$I‘}¨rwÁó7ªÉ)—’eñÛa%cf‹àIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ß™I%ZIDAT™chÿü¡ùá†f>Âü@lÿáøT|€ˆ?0þ`ÀpüÃÿ (ø87ÿ``ÒÌ@º¨¦ˆûÿ0ôÿ(`8þ¡€áA†Ì÷<9nˆ˜\·IEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR ‘‹á¼ pHYsb&2 tEXtComment5ß™I%9IDAT™c8`ÀÐ ÀÐ`ÀÐ÷aþ†ý`Ôø¡¡$”úÇÀðˆ@h~ƒ|¿Pê–õ»†m•IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR µY' pHYsb&2 tEXtComment5ß™I%6IDAT™cxÀÁÐA ý?@h>˜d¨````à`èá`øÏÀð¿„æ70ðXý IT‰Ä\ÄIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment5ß™I%OIDAT™]Ë»€ DÁs-ÁRlí:±ìLLÉ ÃÇ8&›ÜGu±ò'X¥Ym¼n¤ ô»‘Q'iôŸ™Ñl"Âi‰Ÿù§Õª»¿5O*¿qãIEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR"wÑÄ pHYsb&2 tEXtComment5ß™I%WIDAT™m̱ €0 Á(Òf”lÀJ €„˜ 6€Á¥‹ÈÆ¡‚⪗÷÷ßÀèÊÇ„‚-¯Ö倠Ñu®¨üÁ¯#ä0´Bê´²JeÇ•â“åÈ.<ÔðnðoIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment5ß™I%BIDAT™c8þ‡áà†ªahÿÃÐÿ‡a>õC¤xÚYæ·0ü¢Ô€ÿ { C;Æ5(o þE‚ÊIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR²Y1 pHYsb&2 tEXtComment5ß™I%UIDAT™Ì1 €0ƒá_:8z„ÕH/VpèèZ\  Æáò¯è§¨ÁV‹ââ¶çÏÝÝ&ZòÝD©âêbLLÅR…0‰íë"ä¿ÙûõÝ.i[ÝÆ4IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRyÑŠ” pHYsb&2 tEXtComment5ß™I%NIDAT™5Ë1 €0Ñ ),=’WûbáµRä.ä‚… ‚Ńi†ëç ÎOx Y´C”WØÒPLTƒêö;ëÄ´*B(×} É$˜Á+AIEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%PIDAT™cxÀ|€á ó`8þÿÃ{ >„±å0qÈÛì‰IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR)à"_ pHYsb&2 tEXtComment8¡(5˜:IDAT™cøó‡á€ Æöþ#PÄD- Í< q,XA C? ƒ|ƒü+nf)ø`9´ø&µöIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment8¡(5˜FIDAT™cøoÃð¼‡áü†þ' ó€P?=ahÂpøÃ†0ôI†á=Ãù†ùG@*åÁhþê?ÃpüÃç?Úð$ý© 8IEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR^"â$ pHYsb&2 tEXtComment8¡(5˜3IDAT™cø`Ãp€‡¡‰…¡½…½„š[X@‚d@ÈrÙ@Rü`Qs€( ñÏ1ÏÜIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR±à‰ pHYsb&2 tEXtComment8¡(5˜>IDAT™cøÀÇðþÃùG ÔFÍž1`c8ÀÇð€áÃ&†ó ýø€H *;þˆáUó\YíÑIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment8¡(5˜cIDAT™]Œ« €0D ¡‚Aèn$#t•#$+´T–P>GR…xæòîáˆlˆÔq!ÖDl™˜>Š«h¿ˆå x¡—ßUô{b„O>;Ø ØòCû¬æÕô-†/Õ˜;:G3#IIEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜UIDAT™cøÁ|€áÆ?þa†ÃHø ;€å?TÕÕƒôüaÒ@}€r€ú~004Õ21;·ÿð›Áæ8@ͪWêU>Ž\4×iNÎfIEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR–᪠pHYsb&2 tEXtComment8¡(5˜NIDAT™Ê¡ €0@ÑŸTTv$†aÔÉ®9Ñ5¸ °Ww…äå«ÏSñ„-†í¯vÖafOx&ò÷l†tÄ)CP Ú…ÞØ‰bz‰¬$U§¢ÖIEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR²Y1 pHYsb&2 tEXtComment8¡(5˜TIDAT™cøcßÀð¹áñÆçŽÿâ? í? ¸È??Tó€¢ö#ÍÐÀpøPÍv :~þƒÀì@}í@|ð#DßþŽZ*ŒDGìIEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment8¡(5˜MIDAT™M˱ €0 DÑe1”‰XÌL‚Gpé"˜„‚âé¤Ó÷¥ŒªxI(¶ êÂLúÚ³C°òÛ±ºÞà0¨žbeÿ´¹YŸ¨ú%'ƇwEØIEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment8¡(5˜QIDAT™cøÃðƒáCà ÿH0þÇÆÍP‚%Àøá †~0Àà‡p= õíÿØ10PîC#PÝ *~0þ˜ú2ðÇà]IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8¡(5˜fIDAT™5Í¡ €0„០°+”Í:($ŒD‚@²BöÉŠ¦pŸ¸¼Ë=rmÄÊkôŒÉ1eGý»Þÿâ?îñÿŸ@üˆ?Cñc > ÄíPÌÁÿÐð(óùjä–C65ápN¤IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR±à‰ pHYsb&2 tEXtComment71—( =IDAT™c8ÀÄÐÀB@Àˆaÿ!†ÿm ÿûþó1ü“¡?v ô£ŽáÇ?†ÿþc8øá0ÿ·°ôÜ‚IEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR 3+‰ pHYsb&2 tEXtComment71—( 0IDAT™cè÷`h`€û†ú ÿhà †ÿ ÿÀèý¨@ `ô£š*N>º½IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR!™­Ç pHYsb&2 tEXtComment71—( XIDAT™Mͱ € À/í6a71V–Žà*yCa‹±¡ â),®>Ü…rd üXLÅ’¬bá"Q. ²7sÓžÊY’ûÄj$XéòÍ&gá R^DÐTQŸêIEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment71—( KIDAT™-± €0EÑë$%£EpGp#¿tIa+ØXˆOôp0‘ñí»ñá Æ‚6dhA=Pðwü_‰ó+öz“˜EW›++¢‡f)IEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment71—( 8IDAT™ch`c``b€&þO òŸöcøDÏ`èÃÿs ÿûÀˆ„þÉÐ0úaBê¶q8ÓíIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( DIDAT™c8üƒ¡‚ øó‡ ü¡øñy ÞøÃÿf f‡à ÌÀðd,Á@ب¶þõ…0V¥‰IEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRâ¼ñú pHYsb&2 tEXtComment71—( ;IDAT™c8ÀÂp€¡¡‰AþÃÿ0ê#†ÿ2 ôÏŠþQ ý¢? ôáÃÇ? ¿ÿÎ\ÉÛëIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment71—( @IDAT™c˜aÃÀÀ Á P8Ÿ±Aþqƒýs >Äçþ÷±<ÿ³o`øÂõ ? ø ÿû¿HÃ'ÏwëAIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment71—( EIDAT™-ÂÁ € EÁ—X€%PŠ¥ÉÂÀÐx€áà†‡D# â€àÀùYUG IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRÕ¨àÍ pHYsb&2 tEXtComment1Øô<IDAT™cøÌð˜á0C3Æ 2`ÁË{ õIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR µY' pHYsb&2 tEXtComment1Øô<$IDAT™c`ƒ† ,~T`G`èY04H@t™]ÁûåV˜IEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDR^"â$ pHYsb&2 tEXtComment1Øô<IDAT™chÿÃÐÀÀÐÀÂÐ ÃðÆXô@†¾89ù¹èIEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDR Óí pHYsb&2 tEXtComment1Øô<IDAT™c`ƒ` ‡0d780080`¢`„Ê}PE  èýª+a IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR©Ú0 pHYsb&2 tEXtComment1Øô<IDAT™cøÆÐÄÀ„‡Â†p9_ H×IEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR »šÀ3 pHYsb&2 tEXtComment1Øô<&IDAT™cx|€áðFj<ÀpôŒ ì€È¡µÅ'~õ&™”IEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDRÿ¹ÁB pHYsb&2 tEXtComment1Øô< IDAT™cøoÃðφᇠƒ 5Ù”#†  !J{ªŒÿIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment2Aý܆IIDAT™5ÂÁ € @Ñ.ÞXÁMp5⎎$t…†%@cZ_3¡)³³)«²ükC¾ãXâ1.cÜȤ*9À7‡—᜛uIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDRˆ{9 pHYsb&2 tEXtComment2Aý܆8IDAT™Ä»Ñ „JPÊ+MqF%2]ŸÇΙE¢%±ÇÅgl—YbŠ!º(â¨v¹ÖðœIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR ‘‹á¼ pHYsb&2 tEXtComment2Aý܆2IDAT™cøðá€CƒÃ†ÿ HH„þ0ü)¡Ÿ>`xü¡ù¢É ³ÖÚIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment2Aý܆FIDAT™cø÷‡á Æ>†ù ü ì ÌÄÀÐÎÂð‡áŸ Ã?†?5 ?þ0|þÀðøÃá , ÄÎiQ|½ÑÝIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDR)à"_ pHYsb&2 tEXtComment2Aý܆@IDAT™cøù‡á Ɔ{†ÿ-ˆ‡á¿ Ã?†?6 j~üaøø‡áá†Ã_À€ˆhÍDŒ§±›IEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRáÑ!Ñ pHYsb&2 tEXtComment2Aý܆BIDAT™cøÁÎð™á#CC#CóCþ‡ ò`dá3Ãv†ü ì~Ô3|øËððÃá Œ 04ÿ?’ï¿å­9IEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment2Aý܆QIDAT™-Ë1@@á…Ò ¸‰}ÇR($$JGp•ç&{:…ìú‰â›nHÁ9*'–R8.ëkw6i%L¿Åɵ4FêàŒ«7"†Ë¨"³þ|~U¼&¸,0å?IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDR ÁFp pHYsb&2 tEXtComment2Aý܆2IDAT™ÂA€ ÀpQÀ@+Ñ„ >y0(²³ú¡ÄÉŽ7^æ#z+eÇ3¾à#-Ñ›xÛ¸¶ÀÜóÌÐQ{¿#IEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment2Aý܆PIDAT™M̱ €0 DÑ¥HÉ,Jq(k¥c ØÀeЏtÈzÏgz‘ECÔ&Ž –€bÙÒä]mp:wóýãÞXEßÜpÿ1‡¿¤ÏÔ!rÿ¨ÝKIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆ZIDAT™=ÌÁ À ƒá@p„ºIWq”Þzt¥‚‹\@ðbAúkéáƒÃ[‰¶Df@,±y¸¡ãÅô½J˜È)É!ޏÕ뛚F\R%K’ûgl³ð'r=Å ÛIEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment2Aý܆]IDAT™e̱ €@DÑp%h'¶²¥` ¶¢X† 6p`r¸Î%&I†OÌNiœŒ³¹±gc*émT¹2BÿXœXe”ä<­s÷j†šrÉ)› ˜tŸ¸í3<×ÚÙ­IEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment2Aý܆eIDAT™=Ì1 ƒ@„á ¤tâ ¼’7ˆba´`á5â ^º-ÇIaøšaÔ…pŽèØJâYùºŸÐüL6»ÛkBÞÉ{Å€^6[¬ NÖG¦(ó¶C+™ÄhüuŒ·¸F—6ÒÛ‰ IEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment9Ö/HIDAT™cø÷áƒÃ9†ã} ím ì‡øÉ ü ¨Œ70<``øÁÀðüCó!b’ÇÚùÈ1<°cøóWç½/¹Œ3IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment9Ö/LIDAT™M±@@†ÑÏ.Ü”¢4ÁB%h…µàfØP€ßy󸌨qg- ñ¶ß䦊(ÈÑ‚ú¯q7œ-GG›õ}˜$ß´öÿIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment9Ö/WIDAT™UÍ!À Ð:p³ßí ?ÁÁœ5û—™ŠÖ„™‰gš´ÅĬÄÙ‰æDñŒÂ„@ÃÆ(ø ÊʧJ÷†‘ S½%£ÉA.—¶o}4âÙùn5ß“G~hIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRü(( pHYsb&2 tEXtComment9Ö/BIDAT™cøóáƒÃñ>†ãm í‡Ø!èµQÃᆇ ¿0ü?ÄpüC3choc8ÜÇðÀŽáÇ?»/ÒU¿ƒIEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment9Ö/CIDAT™Â1 À @Ñ¿õÚݲõžE è5B„ŽêX(Øêã1&µQn$# qCÖ¸—ˆž¼ÆçtGׄfô¢žù0 ú±1òÐIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment9Ö/HIDAT™5Â1 €0 @уczƒÕÁB;z¥´‹×È::HR|<Ü™z¥ Úà2Ò¿}‹¢`0!6â$*±Â+<=èÎí ɦjPóIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/ZIDAT™Uͱ À0 À)Rz‘q¼Š+—Y)"k¼7P©B ˆá¹îù‡Ââ ‰K+º º ŽT>øé6Ýi( Uà» ²V'%"7c¤FøJœ[ÊOÉ38d€„M·IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment9Ö/^IDAT™E͹ €0ÑA„¸Zpi”€D@[ Ú0üÐåe9$‚§ ‡Ò‹Ü 5"eq–‘½ÄÇbáW]Åë æòÚr`MD$;Ó'NØêf׉ê¯û§AL&Ó¿1=`<õIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRÆ"Ia pHYsb&2 tEXtComment9Ö/HIDAT™cøQÇðÀŽáCó1†æC í‡ØèµƒÑñ†L ˜þ01ü?ÄðþÃñc ‡Ï1îc8 Çð@Žá÷?ò€+M–IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR‹êèj pHYsb&2 tEXtComment9Ö/EIDAT™cø÷áƒÃó>†ãÇúÿtÔ€¡ýÃñ ?0üEç1´bh?ÆÐ~Ž¡}C»Ã;†ÿ²ø$n¥rèMIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRrC9 pHYsb&2 tEXtComment9Ö/SIDAT™-Ì­ €0„á7©¨dÖÀñF‚`­k€Ê•uå ˆGÝc-‹šD¹ÅÞ¬‹ÜãÇçx5œÃi¥B%èK0Ü»¼Ë–ü‘ŠÀÛ$´ê(8€óIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment9Ö/[IDAT™5Í!€ „áß$ÍJòËH'=ãEðÄžOÑðÍÎlØE¡MBÝ"E"¹R÷Ç®ŽYG>’býSƒCpèjú϶÷²í³ ùÊl‹Ü?ô8¢éª*ÄIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment9Ö/ZIDAT™mÍ¡ €0DáGµÝ€­+ŠÎEºHQØ“„ò…@|æå’ã^D›EÄ^ER$·€.ÿÁ¯Ü ™"8*h…n½7ÿ:M1IÁ6‘RQ6!gß‹6„6B }IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDRµé`_ pHYsb&2 tEXtComment0¯ó½ªBIDAT™cø'€áó†Œ8ÀÐÿçÃü ûØþ? Þÿ"’?ÿÇá1Pý ¾ìþóÁ"vû)=IEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment0¯ó½ªEIDAT™cøÃþ€áㆠ €ø‡ÃA > ÄÍÀ¸ ³ãÁ`5?€zÀbÆã ?íÚðhÏ?ö‘-Vß6/DIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRgES pHYsb&2 tEXtComment0¯ó½ª1IDAT™cøgÏðÿ=Ãóç ‡3ÈÐD ˆ?‚ÔÌðø9Ãçã ?ø·œ´Åé IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR æšÒ pHYsb&2 tEXtComment0¯ó½ªGIDAT™cøÇÿ€áó† |H`8üC¡ý30°ÿc`àÿ¡al0Êõ1HM;Hý > ^  €fýÏäu"‹£w(ÉIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRl˜; pHYsb&2 tEXtComment0¯ó½ªBIDAT™cøÃüƒáÆ  $>H04þã`hÿ ü`Ü€‚û$ß TwðP¯[€ÍùÃø|Á!`‰2¥ËIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR*òt pHYsb&2 tEXtComment0¯ó½ª3IDAT™cøÁÏðù8Ã÷ç ï?3œÿBýpôŒÀ ~8ŒÎ?d8þ˜áùq†ü ?äÐ"›6R£eIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRzW pHYsb&2 tEXtComment0¯ó½ª5IDAT™cøgßÀð¿ásÃáÇ íø³`@Á`ñ@u@5ú€zþØ7¤ã HtãcIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment0¯ó½ªHIDAT™cøÇ€áû†‡0<||€áñÇ ‡?`hÿÂH˜/†ªûàÀÐübƃ‡>01Ðü?@{þÛð 0þØ­IEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRŸøAÐ pHYsb&2 tEXtComment0¯ó½ªBIDAT™cøÇüáã,`xð¡€áà0nü#Å ÍH˜ 7åÁø‡Ãa¨¾ƒ@3Í™2ûûÎ3*ê’Ž|™IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRœÓû pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÇð‡á Ã:†ÿeþçↃ@|øC3€cf$ÌŽ$ÞŒ¤þ0X? а™þÉ0ü¨±ÚVÃð¿õ 5;¸iMIEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment0¯ó½ªOIDAT™cøßÿƒáó†Œ?>0ü`xð¡‚áñ †Ã,Žÿ‘`h‡á ìpÌ@#Ô¶ƒ±c †‡*>üÚY´»øÒ5Š : IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment6FŸWIDAT™5Ì1@@á…rà(ŽæÉJg…k…vU¶ë«øš)†tŠ´™Ù8q×âjDlEHbÍÆ¬L)|!ÊETáU„>êcÍb²÷²Û˽߯Ð3 x RIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR ~šÄ pHYsb&2 tEXtComment6FŸKIDAT™cøÿŒáŸÃ;†u þ1<üÇðøÃá ÿäØ˜š1°?`à‡  í`tüÃáG 1<`cøa™Hn¤îèýIEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRYºâ2 pHYsb&2 tEXtComment6FŸUIDAT™-ÌÁ €0ÐHÃM:’;xèZ‘œ£¸ÀïÉ(jJ=<!O$úBøF˜UK(FìC“—È7µÅJŸ¢§‡>ÊEý%U6þ?Ù10ë6ÝIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR±à‰ pHYsb&2 tEXtComment6FŸAIDAT™cøŽá?Ã9†v þ1<øÇpðCƒC{ÿ0zBì@t€¡ùÃÁ6†| ì÷ŠY–cIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment6FŸWIDAT™mͱ €0CQG‘HÉÜhÙ„2%3! Öp6HyED0ˆ’âu_6ˆ+=¾m%8ˆ*»Ÿ"“<#Jêöš;~¶‡ŠÚ³eTj__žxj4‹t•HIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment6FŸ_IDAT™=̱ € г¢dM$±°tWÑP¸Æ¹å/ˆxÄÄâ5w—Co@Ï2#š',u•”cP—µYH¬•p5Á[Bôó³øe²k³i{ÝD9õ¥ó|xÔ82,iRãIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment6FŸIIDAT™ÂÁ € @Ñoz莪„Cçj8¸F xá`DÃËc*0„.ÔDsJ㺱IVNas$ÖŽþ[s¥8^#”±ó­Ne³RIEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment6FŸWIDAT™E̱ €0 DÑK¸d†c‘£ÊZH)˜Ã$¢IGÅk¬Fwâ2¢ D݉ü "rÿ¦™Õ›ZÛD à HâÐ=KT¢¬ú¯m_øç1-CCÌIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR}$Z© pHYsb&2 tEXtComment6FŸOIDAT™=ËÁ À0 CÑ:@Wð(¥#t„@&ó&ÁÇBRÓB’XULŒžˆ”Á»áÃhKÔòãº)‘²;6h›}< å6=ãÔ É©&Üõ“5ÍIEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment6FŸVIDAT™cøßPÀðÁ€áG…Ç? þ0<üÿá0·#aöæ \ÀÀøÃ€ù³ÿa ÜŇjñC ž  ?€füoþ=3—ÜXœIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment6FŸ\IDAT™Mͱ€ DÑE(ÁR,ËÜ€Â(D Ü€÷01xsü¹ÃðDÁ=¡rÃ-WM“‘Ç'¨]ÔâJpj|3q ~"rÿÚ‹Zc÷kMöÝãä Ý7n.IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR }ØcÑ pHYsb&2 tEXtComment36úì@IDAT™-˱ À ÑcFñh޵2 #ü’Â"XN¤W\s,ñ8ÃØF'ù/Ävd¥pàýŒ’ÑKrš˜ºÅx"IU*1„IEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment36úìPIDAT™cx €áû†ã‡0ô?âÚÁØŠ0üa ÜÿÇ>°CÔ?`†Š=É;€q?Hýv æ²Ax>ïÿUwð‘8£"G½¦IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR ‘‹á¼ pHYsb&2 tEXtComment36úì>IDAT™cøPÀpÀ€¡A€ažÃ0ú'ÀðÇ€(þÀ€áÆ ÿ¨Á¾A¾_€ ¨åYkÖÍÔÝ8IEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRêC/ pHYsb&2 tEXtComment36úìAIDAT™cøSÃp@†á C3µ047€Ðñ†ÿ- ÿyþÈ0ü"†ÿ ôþC;±É†ö†< dk,”†ÎüIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìLIDAT™cøÏ€áû†?Ì~0`øüàÃóþcÃø0P-;ÿg„Šä~8 a8{?óÕ°ÍfêiÚu€ÿÏŸA‰Éu.IEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úìSIDAT™m˱€0 CQݹHÉ Í£dfbq,`ºFIMñ*}¡@¼2âÈá¸å”k‰¥’(Ê¡¾©·ù‘Ц®PÏ¿]{›Òa X'ºþÜø©Å;Ìl\X=IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR!ü[Æù pHYsb&2 tEXtComment36úìZIDAT™=ÌÁ €0CÑ/ÃU:Š#8‚à®”UŠ Ô[ÁbR=¼CHuP,[šáHó'S &Q£­6ˆÜ¢LOgÞþJÓòæ~x‰^¢óÇâ⬺‡9<"e8,IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR æI!Ç pHYsb&2 tEXtComment36úì7IDAT™cxPÀpÀ€á‡Ã?†ÿ4Dþ3¡?`©?@.à j@Aó >0´æcm=…MOIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR–᪠pHYsb&2 tEXtComment36úìCIDAT™cøÁÏð€„42<Eÿè0Ãÿv†ÿü € Ø33üo‹?¡ö Í`Ä $2463`gxÀ1f!£M£IEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment36úìXIDAT™EË1 À À…+,}’_Û`a™/R\™/øK A7H1·w‹™ˆˆn„Äs¥¹ýneK·¥¿)þ½¾€Õ—"ÖE3¨åT×3Ñ¢z‰¡™.ÕÈ5¤UIEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRÿEø: pHYsb&2 tEXtComment36úìCIDAT™cø?¿á{Ãæ†Ãø7>@°ÿÅÿ3#Ô}>äÅÏ?```FÂì ”ëâ&F Z úò ¸(ævÞRIEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìSIDAT™cøÇ~€á3ã†ã0œÿàÀЄÛ?`èŠÿć¸ˆ™0üªÿÏÄ@Ø‚0`Á9y :~šÃ 4£AþÃïÿ=©>²%"ÒIEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìWIDAT™]ʱ €0 DÑC)Fó*EJV‚Š5Nb—)"…3é(ždù>ÚL8ˆ‡†Û EŽº¡Ôq'z¸dõ}˜þ¢öÓ~ƶµ‰DÎÄ™ˆºò-Æ<ê1çÒÂIEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR!ñE¶¾ pHYsb&2 tEXtComment36úì\IDAT™]ͱ À À(RÂ(Œæ"ЬUÖ`„/)PÈCR¥8ɲý6nOp#* %G$NGûô€$—ê1i>h™èŽh“²«×â»Ó¡ à~vͼœºQªéçÊ?ìY8¬*ôIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDRyÑŠ” pHYsb&2 tEXtComment4¨žy³9IDAT™cøÿ¹áÿc > ÄÍPÌ Áÿ€øsÃO Üg ~ÄÇ¡øpcC€X`ý¸ðóý1‡ £IEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment4¨žy³CIDAT™cøÿøâf(f†à Ìþ€áÿa ÿPþ#Píc >Þ Áý@ÌÄì@Œ óð ø98ßE’±IEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment4¨žy³†| Ø@èÃÇ6†Ïm ÛŽ·1œocègchgb€€†ÿl`-PF¸H³ÄÞyIEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRgES pHYsb&2 tEXtComment4¨žy³9IDAT™cøŸá?Ã~†`ô‡Ÿá?Ã~†Çü ÇÁ¨‘AÊ è;Ãf†?ì¬Ö~Ì zÊIEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR7tû´ pHYsb&2 tEXtComment4¨žy³5IDAT™cø?á¿Ã?0ú#ÇðCŽá˜ü¢y| L ÀÄðŠþ°1ü`bøÿïá„tp+IEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment4¨žy³KIDAT™cøÿñ?âƒPÜÄŒüˆÿ€pâ†@5øóã `8Äý@v?Pƒ Ìy ÅÑ̇É}þ¿íKç{ZIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿãÃÿPüŠq3@ð?…  ~0üøÁ?þ`x ÄÏø8ß~À‚ƒ€ôÿ‡HfáÂv°Kn[Q´IEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDRï^¸Å pHYsb&2 tEXtComment4¨žy³KIDAT™m̱ €0CQ‹"ó2A”ÑèX#T´G—9ü$-'=¹°uê¶zËK â@²Œw÷Ôªô»›<Ù%l7²GZ&ÿ{üý_AI²ª·;IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR YFÛJ pHYsb&2 tEXtComment4¨žy³DIDAT™cøcÁðÂá =¢ †?@èà†Ã?ŽÑ†> †>†y0dFu u dÁ'þp0ü“"£z;‡PÄIEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR²Y1 pHYsb&2 tEXtComment4¨žy³DIDAT™cø¾á?óCð?(þÅ?€ø'âç@üˆÏq?Ïböâÿìs@ì@ü(þóÔå&ÄIЮIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRß.œ pHYsb&2 tEXtComment4¨žy³LIDAT™-Ì!€0DÑOBº®\©·CräºJŽ-Á –I¨xùɈ!ª«˜óJ¹´ßê)Uƒ-Ã’Àæ"Iìÿé“ÓÝ?>K$”c >IEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment4¨žy³DIDAT™cøÿùÃÿ‡PÜÅŒþAñ>øá/ÿâÏ@uÏôy îb~ ††ÿ€úbÁ ñ† @]LÄ?IEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿóÃÿP|Š˜ÿ9~`øÂ@¹Ÿ?0|âçP|ˆïñ| –?Àÿõ>„šû‰} €áPþÃGYçIEND®B`‚leptonica-1.70/prog/recog/digits/digit_set11.pa0000444000175000017500000007410112251652234017500 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment0¯ó½ªVIDAT™cøüÃ?Æ? øƒ¡†áG… Ç?6 þÈ0<üÃÃpð³€q#7ÿc€cf fâF(ÍU Á< dÈÌ5; vþçÿj6çHÝ•ÏIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªPIDAT™cøßÿƒáû†?0|üùƒáá †Ç,ƒð? †v0æcö Dáv nþÃÄ`s@æÌýøáÃD ]Ì?þ³ÿAÖ5][ÄÄIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ó½ªSIDAT™cø?ÿÃ?æ ?0ü0øÀðáCà 0ü#Àpˆ›Á˜‚ÿA03 WÔÓÄÁØ€á!м@s?@ìÙù¿ÿæ*7ËuöIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÇþáã†>0|øðáá†Ã`lÀÐþ„À˜3``f 87Ã0P?È y|`øÄ? v1`øÏþ0\3ö füIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªHIDAT™cøÇüá‡ã†>0<øPÀðˆþ0`hâæ?`Ì Æ ì03Ãôš2ë!Ô\??0üâì 12/rDo‘IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDRï^¸Å pHYsb&2 tEXtComment0¯ó½ªQIDAT™eͱ € EÑ‹$–Žà(ŒFÃdÆE$.ðK òâG-,NyßCQô ÂŽLµÄÙ{_)·…¢ÉA|M?Eóg4ÞŽÍUß3ËÏ‚.˜e1Pغ3IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªOIDAT™•±€0 ÄÄQ¤„Q2#d æâ2I6øt.|6P¨û—ðUØ"tˆ)1¬Ñ­Ò½rúÎõå¹Ïo:Òu‡s¨¡­èyϦOr2ÕÂ?k£IEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment0¯ó½ªQIDAT™cøoÿáó†?Œ>$~`øø£€á!þaÅ Í ü‡†ÿaÁPqó0>üÇ€á!Í™ýáÆŒ;ÿ÷PM5ªàá™ëIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ó½ªQIDAT™m̱ €0 DÑC.ÒfFc‡ –Eˆ²À¥sa98‚‚‚âu_3&„^Ä Ñô@×ÕÅ2Šgœ!9~ÉÇj—úêñhaÄ—ñ×pá GÇ3jôC;IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR¦cÉó pHYsb&2 tEXtComment0¯ó½ªTIDAT™Mͱ €0 DÑC¤£Í(‡1Ò¢Y Ä"d—WX FB@ñÚÿÑ•èšpª`£`gÄÊ€lŸbÀÔþ«¸|³ˆãQMP½¥LàBØ@´Ñ?3/ol0 fæ}”IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªMIDAT™cøÇÿáó†Œ>8|`xø¡€áð6`há? íØÁ˜(Ì TÛ Æ3ƒqÃÃ>>Ú´ïûù<1áÐDÔ9IEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment0¯ó½ªAIDAT™cøÏ~€áó†Œ@üðÃãññ`ÜÿƒóÀì Ô×ÅÇ¡æ=šýñ0Ð}üר2ç®IEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøÇüƒáãüð£‚áã †‡@X‚á07ÿã€b8f†âf ÌLJø P?ƒÌ™ýãÐ. =ÿ€öýïÿ<*7¸õ»ÈúIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment0¯ó½ªHIDAT™cøÇþá33~`øðáÃà 0þ íPÌþ‡‚ÿÀPõÍ` 5h&È\ù??0üÚ÷Ÿý[†3EÞÄïIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment0¯ó½ªKIDAT™Uͱ ! CQ—ŒÀ(Œv=“˜1ÁuAŠLů´?ÜVs’ >}¨ kưŒR¨—ã°+ý¼ÜlÝJ|O³ÁÞ­m;€ -íIEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR ßÒ©ä pHYsb&2 tEXtComment1Øô<+IDAT™cøWÁðÇ‚á€C}£D H*(ÁðA‚á4pø› +BœIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô<$IDAT™cøSÏðÁž¡ÁžŒ€ì ò ½^ 4á^Ä„IEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yÙ pHYsb&2 tEXtComment1Øô<0IDAT™cøgÇðÁŽ¡A„È1ü°cø!Fpœ CÀSÈýÀÇÐÀ/ä¹ñ]IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô<)IDAT™cøgÏðAž¡†~؃Ð ’Ç@öèè‡=B=ˆ!2 ¦”|”ZIEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<$IDAT™cøgßÀðˆä Äþ óñèýÀЀ ´š,$‚‰a©IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR{ª| pHYsb&2 tEXtComment1Øô<%IDAT™cø/ÇðCŽá€ì~äð1@À6ÉNF¿óõ§IEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDR ŽzA pHYsb&2 tEXtComment1Øô<'IDAT™cøcÁðA‚ =Š€Ñ’@EH,ò 1@Ñð…%´ÙIEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR–ïØÒ pHYsb&2 tEXtComment1Øô<#IDAT™c8ÿ¡¡„Ô1| ÙÐ9†L L ÿØY'$¦! µIEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment1Øô<0IDAT™cøÇßÀðˆ17@Ù?äþð#ayþA™Í ´@ä†àü+¡6¸dIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR 3òÅa pHYsb&2 tEXtComment1Øô<$IDAT™cøoÏðGžá< }gøA.ê}ÀÎÿRÿ[4ñIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment1Øô<2IDAT™cø¿ŸáŸ<Ãyz ÏðŽìÁHžáÙ#!$.D}``8ÀÀÐÀœ´–±ÅIÉIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRÛ'yÙ pHYsb&2 tEXtComment1Øô<"IDAT™cøaÇÀCìØ1| =@C ôá==ÿüÒ™IEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment1Øô</IDAT™cøoÏðGžá<=°gø ÏðÆä±!{lH¤ñ?C Եўé]ô´IEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment1Øô<1IDAT™cø/ßÀðˆð700@ñ†Šƒ1?–'ƒÌco`xÀÜÀ´¡±4É+YóX&IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment1Øô< IDAT™cø'ÏðCžŒÀlÒ=’gø4„‚($š«×IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆]IDAT™%̱ € „á?±°t™DWac´²dW!a‘’ˆÌåëîŽgy-1Š$Ï•ÁÜfCçºC'Y·6§±ý;ŠöUVû[ywhó¨x"?:u¡êÖ”2ÏôÆIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aý܆^IDAT™M˱ ƒ@ÑA„.Á¥pqTàÜÊR‡hàœ ¾×%´zÙG'j+öIÌE,5±ZTxÛhù¯$d»Dø£¹‡¸žâìmH—øØ–Åoù†F¼B_t’7ºh)9ÒIEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment2Aý܆YIDAT™MÌ!€0À.$Oà)ôaˆÀ—êøÆðˆá £†4W×¢nBé…; jY2ÑYhðIÀšˆ]D•P£yóx[ý1y&®B‘~"¢ûïìô”þ-¶»£§4IEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment2Aý܆SIDAT™=̱ €0Á(ƒQØ 90¡b ]Šp"ë:Û´Y”Qd;v±&±e1gº`üdÑËÞhƒx¼m“ù«.PÜÎ*ê!ü}¢*˜oIIÅIEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment2Aý܆MIDAT™MÌ1 À0@wÊX aR*aA)=ÃÈöu’N²dÙÈFâfNMÍꆊ0. ÝQÛmÅNëßþÏ_Û0Bàaeu/v4<â5sïIEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aý܆UIDAT™M̱ € DáG,,ÁQd7;*KGPãØQð‡ÄÄâ«îòH“H£ˆN‰íô±¡Ûþlo.yju5ƒ±N™E^¬Wèžì¹“ýi§#€4œOÍœ’IEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment2Aý܆\IDAT™-̱ „0ÑAÒÚJ¥¸ €èBZ²D#¿„ fm¼l4܃ðŸP'ò,NOüÝš#à4ÛRY“e%Je½xB}Ý£qM†¯†*¢é£ênÁ-Ü„1i¶IEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment2Aý܆[IDAT™=Í»@@…áß„Jp+QË– ³;m­Nn  Œu0_v½S'ãD‹Ën¬HÂmzÅ`D7¶¨Q’S[éœS[Ç`”ò¬ì©l1?᧯ À 'd¿œaIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aý܆VIDAT™-ÌÁ € ƒápG‘ÉŒLâ(ÖMpŽøc<|/yI[µÅª³Õo$äð“.DüŸd=è&1ºl´•Í*»”™ŠB^ô¸ƒ†É:»_J6mÐVIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment2Aý܆YIDAT™cø!ßÀð½áñá†þ‡ ó40ìÿ ìÈøC;Pî?âF nbþ†@3þÙ70üùßÀðóâÿ@|þG2 á÷ŸK‰3º…«rOIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment2Aý܆NIDAT™UÌÁ €0CÑ”<:‚£¸™D\¬nÒ,^z(ê—âA»%Ñ1X9Z÷ŽüÒOø¤nKtŒì®“Õf«.hRÁYù•{‚wŽ~¹|, “èl…IEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment2Aý܆\IDAT™=Ì¡ €0Dá× ŒÀ(lF®Š1X¥Ik4A`‹«h(?! >÷îh£ÈƒHN,^¬A´Ä/÷ àM”5Ö7Ûµ^\öQ'3‹Rá¬b/âÈb³VîÅ£Ó ç-šÿ’âkIEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment2Aý܆NIDAT™5ʱ € áK€ÅÑ4¡` WÑŠ5 ²´°yÅ‹¿X|ÝJÜ…=£uÔ~k#Lù Ž4†‚"oÂ\˜xÄåȨ-Àdñì˜%OWdzIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment2Aý܆]IDAT™=̱ € EÑk,,ÁQd28‚«üÎ5`ì(ˆøˆÆâ/ÿæSg£LFŒäÓ{t™_ßÅ—éžÔ5õ-È(úq/²uƒrÃU!õ8ü§¯n¿ìÓ‡29‘ÑIEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment2Aý܆RIDAT™=ÌÁ €0Ñ )À,ÅÎä‹%D<äªxBâT–w[†6m•M’?×%Xº1WÔlj7ê jÔÉ(3ÜÎbì’Õû†{y{Éñ/7:™4IEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìYIDAT™M̱ €0 DÑC)Rf¥ŒÂ*‘;DÁ¦Jk‰&]¸H¯:cÂÁMa¯°¨hŸSºó–C2j\ïöÀÀ%&é'/ºÉúaê¹Ú”-5#üCJMIEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úì[IDAT™-̱ €0CQ£)3Œv»P¤d¥ Ö0„."8'Š×œüïLÔH”‰8 ‘I¬Î~ºK.9ˆGûÔqkÓë‚Þ¸,Á-.6Cª†müÚÕŒ6ñ{ó<ãx$q§IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìUIDAT™MÍ» €0P£)!«d4¤¬eD‘5Ž n¤Ã„(^ç<–ˆ>+Íêg7"¶W#Ne] ÄÁаº¤ŸìõV´1/ÚÖG¿ð¾33-ÓVIEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úìXIDAT™MË!€0Ð&H®ÀÑv’+±LìMØ-˜aô£&žø¿-,-'‰R#²¤ß½½É-™ðé÷xf‹àwÉ:2)ß-bS·DÕöùu=Ô ÷[ÀIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment36úìQIDAT™U̱ €0Á“]n 9p[GDèÑ€+™„`’Óþ+’åɪ<”ÏÎÖp¿ ªuÑýÁv[ä¡K óO†•èýÊsß?¿·7„š«\ÍIEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úìXIDAT™MÍ1 €0 Ð/{Ö›HppôJuòzŒÝêˆHx„OŸ ND«ÄÆò°ŸK‰qŠöz"\=ªÅÌ—Ïî@ê/å½ 3‡éV?ûÊäþ7TC aIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment36úìcIDAT™-ͱ Ã0CÑo¨ÐÑh%† ¯%#EÖ ΕUI¡¯8€GÒ³ˆ$´ˆ†ø´Ê¦Ê•ãñó=%æaÎ çƒÊ©Â0o¾¶>K½¢Ý³»§½½åÿ{w¼ôõ…9†ãÿIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment36úì\IDAT™M̱ €0 ÀG)Rf…lÂ*YQd-Eʬð#˜Ž)¼SQ\a¿ßxWÂ"Á…hQ!±ÿø<Ü)—uœ:÷Ì †å©P%<.#h%YAÒmÓz7ñ§Ã<9*IEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment36úì\IDAT™̱ €0@# Ö`´ì’‚2+R°†# Ú”ˆxœ×øýF›‰:ĵœ ÈuŽ!àWî…ð,ú1õMÙ£Ž[xnÉ;e‹n›:I‰_ä;•žŒéüIEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment36úìUIDAT™Mͱ €0 DÑ£¢Í(-+ Ì…¼H \é"’9C“â5Ö?s'¸7 S]4ćˆG:1Õ»zÏ»W)¿Y`r,º§ŠS­ bhKýŒà €Ÿ?Yfæ\IEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment36úìYIDAT™-Ì!À Ð.ä®ÄÍ&“»RÉ×`7øÉ ‚„†xâç·EÛ s7"‘¸ KøY˜w–þ,Yñc ~Äç¡x>Ë3*0À@ƒÍB2÷Cà8‘5”`knîIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³FIDAT™cøÿðÃÿH¸Š øÿAÂ?>0|8øá3Píc ~ÄǸˆ  ˆá愚 Ö/Àð$÷Ó¬Å=é9jÙIEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³NIDAT™cøÿÿÃÿ‡@|Šq#3"ð?ŠýâŸ@5¿CÕ6C1}(×Ï ÀÐÀÀÄ3`æ‚Ø @3 ~0(0üÿS·²DNêúÃIEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³;IDAT™cøÿðÃÿƒP܈„!øÿâ@üñ ?âãÍÚ¡˜¨ ˜×Ä  @ K9Žº¤¤ÏIEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment4¨žy³9IDAT™cøüÃÿv fbf( Äÿ øþ ÄŸø9¿gG¨‡á  0€lÌ|ü9–2 »=\IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿð„âF$ÌøƒáþûTóˆ?ñg ~ÄÇA¸áp0|n@2„*~0H0€Tý`°P¯>Ŭè5ÂIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³6IDAT™cøÿñÃÿ‡@| 7"aF4 UóˆBña(nf(`@ÿ f€ô4@ð5¹>O„¶HÓIEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment4¨žy³DIDAT™cøÿüÃÿãPÜÅìþ¡aHî'âç@ü¾¡g?Ë3>`€ÿÌ ¸ùœý!ˆþ3$ú@9º_­™£IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³@IDAT™cøüÃÿÃPÜ ÅÌü ÃÄ?³1PÝw ~¤vs00ÀÀ¸0føÀð‡¡Œÿ7±8d;oIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³CIDAT™cøÿüÃÿÃ@Ü ÅÌüŠÿ@ñ þ Tóªö9Ÿâ~ æg`€„™ ÜÄ  ?€â‘Ì8õ‹ðrIEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment4¨žy³FIDAT™cøÿóÃÿH¸Šøÿâ>0|âÏ?0<âç@|Èo>PÀÀÀ À€ìÿ@qÜPÄ ÀÄ<Nú¼IEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³IIDAT™cøÿøÃÿÃ@܈†?0üƒa† €øùòA¸áÃa >Äí  @,Æ€ìÿ@qdü(ó‚¥7x–ƒqÇIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿüÃÿÇ@|ˆ¸Š™øÿâŒ@ Tóˆ?ñg ºç@|üð†v ÝÄÈn^#7|`øÀ Á `>¹¾œíIEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%VIDAT™]Ì!€0DÑI**{®²Gƒ *¹Ò¢z:ì6˜ª.C Ä“L>znúÍþ:©eZh殊RŇþ³~"ÿ‰¶ØìI/.8ÁŒ@Ì€áóþ ÄÌù0<þàÆÿ0`àÃ@Ü ÄÌ@ØŒÙzø`h?|€á;Ø<E88¦…ÝŠIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment5ß™I%RIDAT™]̱ €0 DÑ‹2#0 -‹DÁfG Î 4¯°Oúèap|/Re!®AÜ/_çŸÚFœnSãg—’<*uˆ-;êÇÆ ú4QSÚÄYIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment5ß™I%PIDAT™U̱ À CQK”"ƒÆk(Xã"¸ ˆ J‘â5¶ôa'aaó%ÊEŒ¹™mE_­D3¢/NLÇO—$Aß'ÞÒˆ,)«w¼ým]3ö¸ä"1IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%VIDAT™E̱ €0 DÑC€2š7AT¬‰‚5¥HëÒ9GH¯°|úp8…nThWDüœ·ñ—›ÞC+&E2|êrÓ™Ø-–W§A¢eëXÝ>³Rµ\¥IEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%SIDAT™U̱ €0@£)3«d3R°–Gy”"íȯ†â¤—e?ü& ²}’dÙ‰>—÷Ž,­N§XÅðŠðÓ$)êe#Š6W#Nýa!üà7ÔVQÉIEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%LIDAT™cxðáÃ(f„bf –âÿñ{ f‡ˆƒàáŽ?pã÷þ£áv fÊ!ðöƒ@Üx€¡d?ØLÞA6 AÄõöIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%TIDAT™-ÌÑ €0 Ð+ýè§#¸Š›‰ÎuàG×Hq7¨—ÄG —††_‘*MvbLâ™9c§Œº¹ItÛÂ|‘,u9¥(s5M?ËA\Þá]+?.í6ž|PÚfIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%XIDAT™U̱ €0@G)(lÂ*Y%UÖb# Ú§{‰HÁ 4ר²ÑáȰ° quâþø*ñívŠerzBðS”KCF”ª]-ĦÎú[øe2<®gÑIIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%UIDAT™e̱ €0 ÀG)(Y)›!D‘µ±ˆ#0¢¡›ÐQ\ñ~½¡7¡øt.¹8¬Ù­å¸ËBT%6ͰóouSð>½2Š¥³ï%þ÷Ä5ò%<’ì´IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ß™I%TIDAT™cøÿ·áC3"ðv –o`xø¿á;?°bþ†Ç‡ø`Ãó ï?00üÇ‚13?ávêáêmš}höƒú½N5Håe޲IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%TIDAT™]Ì!€0ƒá™˜Ü•v,<‚k5Ap-\`37*À ¾¤Ékc)t>¢K6Åe·õlQTßZg/óoÀa«sxEw£7©‰mòïšõì59Ë¿ÏIEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment5ß™I%SIDAT™mÌ» €0P£+RÞŒ# Ö1+$¢€.X :ŠWùƒ¶Ñåcâ’‰£§D/éÍêB¬…ؤ~bÂÔKâÚùD úžõweÞ@Ç4#Ú”‚ÝIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%QIDAT™mÌ1 €0ДŽÁ£Øƒ "^,âE ®qû[ÍP7‡ „ B(s²ÁñtZm²ì.âRÁm-ðë´M@ò&*±ýQG"f¾{Ê9•19¶¨IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment5ß™I%RIDAT™cøa€á#3@1ˆÍ Ä ñÿ@\ÄìPq ~ðàÃà ?00<þÁÀð âFªa„âv žæƒ‚ôƒÌæ?À´£8»qpMFIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÆÞp pHYsb&2 tEXtComment6FŸPIDAT™U± € EÑK,~çQ\MBaÉJ KWÀ ´´0j(=9Üâ8š£ÖÀ2“B¯ŠÞ~œ@`¸ˆ,£†2¾ýjG…TØ"‡ñø « £c7ËIEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment6FŸRIDAT™uÍ!€0DÑ•½ò¸^«¤‚k@¸@q˜â‰ÉîÎrFq ¢#ö"¶ÕfËÎyñúŒI^ž…ÅÄùáïÕI,¾kþÙ“n…Õ*l:Ò©èIEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment6FŸSIDAT™U̱ €0 Dѳ2+x´Œ‚”*‹±€é\ ÀÙÅÓÖ7–t„wÜEqqÓL¯•‘ÃÞˆ Ü ¼K(ÀÏ,ZÎà_r6ÁvmörJ8UM¹ä<IEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸMIDAT™mÌ= €0Dá/–£){±-¼Fd Û¤ (¬ƒ?Å×=r"Nk522'ðH–âÒË«þlíªsmµIƒ~G»dz?O϶ê|IEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸNIDAT™E̱À CQqYã± “±‰ØÀ¥‹\@qrIñªV!N4„8 ó5ØR¢¯ªhˆzq{„¡RÿXêÓïµ }\7‚Þ3Nª •fIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR 7\ pHYsb&2 tEXtComment6FŸYIDAT™5Í1€ К?8z$¹ƒ£W*að$\ãâ`À qxSûÑv¢ñ€¸¥Ðá”,ñ“|!|°È,º™‚$ÂÔ±òS,[çºC¢du¯0öªþ´•/‹b5æP ø*IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸQIDAT™cøÏ~€áㆠ>~8Àðø?âã kÿŠ™™¸ˆ1P¾ùƒ³ÿ``hÇÀ@3€ø0Èl ~øhÐÎò9M:ý ® IEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸRIDAT™eÍ1 €0Ð@‡­z4§­ˆC¯Qé~7…‚¦ “ÃÁXˆ³]ZÍØ™Q&eWç—Ü„}œH«S†~\ýT^MÛØô•ˆa|Þ}4¡yJÚ\IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment6FŸWIDAT™UÍÁ €0ƒá_:€+t´®"=8—t‘ˆ Ô[AQcÁƒ‡ï^ÂãÎâBœ$ZM슬¶Yq.‡(·È6½fÁ`ÞàûÐ"¡ã'w‘åã®$ª·-øç¨‘X5Úï¿÷ªIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment6FŸTIDAT™=ͱÀ @Š”YÁ£± Çdl"6p: .‰p‘âÙ–ñ81Žàvࡇ‚ª¬¾ m;‰#€hž´Ÿ¦!OüZ°P¥«cÔÝz&ÖÅû4’´ŸgIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸ]IDAT™MÍÁ €0ÀÁ{Z‚­ÄR¬&O[Zð‘6"i ÏbÜ`>îØå5Ï@”¸"qF‡Ôí>KýX³ÓH`լܲë€ùÇ àeAÝIêçöˈ{á µç5…öûüIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment6FŸOIDAT™MË1 €0DÑ‘€–^io—k ¤Økr@mŒãbñºÿ1q/ÄEb†&E<>‰ü³ªÇK}ê¶€?\J'šÔJt½çÎÍî5†Ç¢v†IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment6FŸYIDAT™UÌ1 €0DÑ/‚)=‚WÉíRz¥‘^#’ Ä^ˆ#ÚX<–av—¾ŠžÅ¹‰£ˆ*‘Ù=“sªÖEøL³ Ø F÷c‹„>oNÉV½_|ÛüãZt¼T4ÍÏÏIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment71—( ;IDAT™c8ÀÁÐÀBPÀÈ ÿŸÁþ?Ãÿó ÿ3üï#yúFÀè‡=}@Cò ÿcÏð¯ìèaIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment71—( ;IDAT™c8ÀÀÀ `ìÅú?B°<?>À°ÿð†ÿ ÜÅì@Ì€áÿÁ‚ ad¹òÿ 2ÕÌÐIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment71—( ÄíPÌÁÿ@X¾áþaÁp`˜üûœ×-¬© nùIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment71—( :IDAT™c8x€¡AHþ1ƒýc†úã ÿ¨á?Ã~ú'Bì~€Ñd$Fü`$ †ð•ã^RúIEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment71—( 4IDAT™ch``"F0bf°ÿÏPFÿè>Ígø/BÿìAèý€¡0ô ý©#ó!MÇÍKIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment71—( IIDAT™cøÿÏáý† (Ø¡ùÁþ@üñƒüà û`øŠ›¸ˆÙ0üa~þÅ?Ðð4 T  5 ý¼=IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment71—( :IDAT™ch`@@Æþ‡ òì70Ô·Cðv æ‡à@üG‚@ñ,ø¬Ö¾”±&Ú ½"IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR]³ w pHYsb&2 tEXtComment71—( 3IDAT™c8ÞÀ€L üm öÏê1ÔŸcøD}`$ÇðÏŠþØ1ü£8PêO¤ã<ÍáIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment71—( AIDAT™c8ø‘¡„@€„ä2Ø?f°Î`œá;Ãÿ~0âgø/ÏðOžáÙ3ü€¡¨è‡<Ù3ü©x´FÍžÚIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment71—( 9IDAT™ch`€Fâ?ÌPÿ˜áÿs†ÿïþŸgøßÏð>Ãy†`ôˆì~€Ñ"ûï?)!„:õÐwIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment71—( @IDAT™ch`dh`€F†ùŸþÑc†ÿ‡þgøßFü ÿåþÑy†ò ì !  PÊ„þØ% &ŽRÚ@IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜\IDAT™U± À ¥ d„0£ Qd-¢,ò#PR (†¤Iq–¬¿·¹ƒh›gWK”9:‹ÒãÚ³QÝËô“hÓœ:=ðÖ ãóžå=qêëÚϱëûn2fÜÑV‡IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜[IDAT™5Í!€0DÑO*½Ro†@ ¹ÒD%W€ôÅU4À.ñÌd2CõBqBî„”…XL`þLjÔ|9qÍn}Lx%˜Ñ.ô¼¹~ºS›ZuûHíïäo6¿nÇæIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜WIDAT™UÍ¡ €0„áŸT Y©£° AT²ÒK*¬Ð^‚yÁ0ˆ/g.wÄhø`4Œê™]ŽÈ”Ï*‹6Kï%Q:]æ”jP¦ëo{h7´ßÞ¯HvÉÈ0õ«W·IEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment8¡(5˜SIDAT™-ͱ À DÑ‹((UOJ‘’•ˆ²ˆ³t.Rä)^åo¼#–ˆó%šÉX€²e‹SèË¡é WWkÑW߾͉"mª½cK›?Þ*KÓƒGIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜YIDAT™UŒ± €0R|ÉJa3PŠ”¬äT¬6øò‹8Bç·^¶FôDܸœ¨žq†Ð¾ˆCÿ}#¨åñ‘¥@‘$lÀ:þÔx·ZWG}×Î0>J‹/ÿƒŽGÃIEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment8¡(5˜SIDAT™cøW€áû†ÿøÿàÆíPÜ ;”?À Á@˜†600~ÀTËÀÀÄü? Èîcy>ñïÇ@;Ž\º6ÓËšm*IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment8¡(5˜^IDAT™=» €0C(R²BFË(t)Y)ˆ‚5e£»"B8 Q‰f §âÏ¡w¢ÈSf‚¤ Ê!¡®ò0"›è›Xƽ?{z{ª6Ly|lƒ7‘éË •IEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜cIDAT™MÍ¡ €0Ð#¬ñ7a•Ž‚C²¨JV8‚¨-©©h(G@ ^.?¹ÜGkDí‰äˆc'b"BñØ>“<÷Zˆåõ(©# ”ðÈ£!Ò’©o˜«\ÚX‰¬âÞŸmà ¹@@ûÜØG·IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜YIDAT™-ͱ À CÑR°£1B¶`-"ЬqQ¸ò „r@Š'¹°lF,ŠðXæuÍwßf¾\= ›þ}%»Ä[½§‰bP:Äile¤¥õ¼ö}aýõC>~5ªºá%IEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜]IDAT™-ʱ € FáǬÀhŒbgÉ®¢±°t…K@¬ÄÄ€’ËW¼ËO¶B2BD8¢çLŽ’`ï6íUÿKfó«ñÊ¡îAwA#¼›=¶H3u¥zÔ¥ÆÖÖo<’½6º¯IEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜`IDAT™5Í¡ €0DáGÈŽÀ*­d¥Cu&l ¦$üÐ >÷rGu¢ô"wb "&±fßÏbæ,¦S„]hÉúd}âå‰Á:ÁÁ•f¬?ÿY«íÞâ¸ìË6ŠÓÿ¬4!1¤5IEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment8¡(5˜XIDAT™M̱ €0 Ñ‹R°FFË.¬J‘5±€K‘…E (žô û˜YШ ­ÜVè?-\V9U´(‚ŽQb†@SØ'¾lþíîÑ #:ïo4<ËN—5µl^ÖõIEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment8¡(5˜cIDAT™E± €0((Y!£ý*T”¬DAÉ –²@¨Hñ"˜‰âô/¿ßF­Ä=¥'Ε¸2±ÃÑÚf±‰¨[ì~dè¦iHQžüzÑýgqénÊ"’2ÊD¸úÔýÂþ=TþŠOIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment8¡(5˜]IDAT™-Ë¡ €0á#ˆJVêf ¬ôP]£-Á@Òþ&Ÿ»£ âéEêÄEHžðx–f6[ºu±I؇盬؇õà2 U©1ÉÌ`…ˆ½øÏâ˜ÄÅ/†×àúdÝ)ôc.¶Ì}|‡8«À2¦N ŽÐ´®¼¥^ƒ‰åûî;ÿ°Rމ=Ë¥ïIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/OIDAT™Uͱ€ CÑtŒá(ºkÅ£p 8€ŽN¿…§¯Èå.Ñ\¬¬–­\­„ÐÛ‡^EJȨäAþ°…x`36k?,óUøœ«/þ¼89a&šÎIEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment9Ö/SIDAT™UÌ¡€0DÑï"I´€¤¬ôA]IwŠp ⹿Kíbo"KlC"ØBÐ#þd1w$Ð —Eº÷¯DuÅäÍÇ¿K§5 ›uÚ8£]rIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDRÂ+ $ pHYsb&2 tEXtComment9Ö/WIDAT™UÍ1@@†ÑOJnà:{·-\ë±7˜D3B0‰(¯~\­ðZX%Ê,ÙÙShœŸ)d{-¡¬`œÜþIl¡¹Ðþ*G¸ãêÅ5ê¸_8 ¡=gIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment9Ö/UIDAT™]ͱ €@DÑCKpË0³•ëå;¹Fæ:X¸dA6 ^ö‡Á}±¾ã"úT—0,?ÕSåhÅ@â0<ñ™ÚSš3Ä.úŠ/nT:h¶"ÕIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR)' pHYsb&2 tEXtComment9Ö/XIDAT™eÍ1 €0ƒá€CG¯ãÖk9¦8x­J/ÒÒ yb|ìÃôÃÍ*ÿ ;¤Z5ô¢\•Ç©´éŠ!é¯-r/Ï:ºÏ]IEND®B`‚ pix[149]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment9Ö/WIDAT™Mͱ € DáK,,¥´cF£¤5,Fâ"°Á›¿0Á‹&jñ¯zž°…èhŒØ%3 ›Ãô“oxmê"59pu8SÀ°O“bQøèru&¨Ÿy^^‰9óamGIEND®B`‚leptonica-1.70/prog/recog/digits/digit_set07.pa0000444000175000017500000007270312251652163017514 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøþÃæ ?0<`℆ƒ šñ†ö? ì ü†à˜Š!|ˆ{+ñäUqÖIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment0¯ó½ªEIDAT™cøÃøƒ?0T04d.È|= ûþ±ÿÃï,¾è"·ºIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªFIDAT™cøßÿƒáㆠ €øƒÃ ÿH04þã`háÿ ìÿHÂÍP½ 3@fÌ|À ¶dÐN¾*ö9µŽ IEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªPIDAT™…!€ ÇÍJô{4:ÁkÉM8qu»aÚÿ3˜)cS:J#ÓáÒD‰2çŒ/Á»ñƒï¾OyËU»¸_¼“QïÍ 7W-D®’ÊúIEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment0¯ó½ªJIDAT™cøÏüáㆠ €øAà ÿ0þÇÀÐ Ãÿ˜Š›Ñ1Tíáý€øA…Ð\°Ù?€ä?æj-—¿¸IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªOIDAT™cøþÃÆ ?*>0X0<``xP!ÁpàÃÁ ÍÿA˜ 70´£av(†ð‘ÕBÌ84ëÁ ¹`;@výaøÅB3Çe21IEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRœÓû pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÇø‡áC Æ \!ÃpðÃÁ< ‡ÿó04ÿgAÁí@ÌþŸˆ€lncTµ3@f=ø!4_lÈ®?Œ:0)W“ÒÌIEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ó½ªHIDAT™cøÁøáCÆ@ÜðA€¡ñC33ÿc``GÇÿñ`¨¾f ™ÓðC€á@‚Øü@{~mûÃü5%-ö³ $IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment0¯ó½ªQIDAT™cøÿÿÆ?@XÃðƒÁ†áƒ džÿx‚ð†Ã`ÜÂÐ Æ íXp3· a°^™õà Øl »þÉÿíë;ê¢IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÃüƒ?0T0<`°`8P Ápð‡Có þÇÁÐÄì üfÀƒêéoü1ï@‚Ðü  =?þñ?æ?*ÛE 7ÝIEND®B`‚ pix[11]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªNIDAT™cøÃüƒáW0<`°`8ðC‚¡ñCó†æ í@ÌÂÿA˜Žù‘Øè¤§ŠÍ™ 2dÇ üÃøƒáÿü^—,L/¯áIEND®B`‚ pix[12]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment0¯ó½ªJIDAT™cøÁø00`0`8øÃ€¡ù304ÿc``‡b~þ³ÿCÅíÿ zAæ€Ì;ðÁh¾Ж†@òûiº(¬Ž€!IEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment0¯ó½ªLIDAT™cøÇøƒáCà –`xP!ÁpàÃA >ü„š¸ŒÀ˜ CÄ!êb?ø4h6È]€äÿö42i¢ s‡IEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment0¯ó½ªAIDAT™cø?ÿÃæ XÀðÀ¡€áà†ƒ šÿ€qû?0f'·ÿ€ë™2ëÁ‡°Ù?Àv@‰,y€á9‚IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR »šÀ3 pHYsb&2 tEXtComment1Øô<IDAT™cøÃÀD?>0 €`q2‘ÃÈ‘÷>©ÜIEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR TX« pHYsb&2 tEXtComment1Øô<IDAT™cøÇÀðŒ>0040 À˜8©hà?öB+ÒŒùsIEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDR˜=¨ž pHYsb&2 tEXtComment1Øô<IDAT™c`ƒ†¤@¤…Á¥Ö›ûIEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR ÒÌÙ£ pHYsb&2 tEXtComment1Øô< IDAT™cø¯Àðáý``h`@€0qúGa5V"¯¦IEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR 0ÂÚ pHYsb&2 tEXtComment1Øô<!IDAT™cøÇÀA0040@AXäL–Tô_rº#þL¾IEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR ÒÌÙ£ pHYsb&2 tEXtComment1Øô<IDAT™cø¯Àðá}`@`â$¡P4묃JIEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRÍH pHYsb&2 tEXtComment1Øô<IDAT™cà`à` p0ÌH±tðX%IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR ÒÌÙ£ pHYsb&2 tEXtComment1Øô<#IDAT™cø§ÀðáÆ ð,NúÇX8#¿juIEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR 0ÂÚ pHYsb&2 tEXtComment1Øô<IDAT™cøÏÀðŒþ00|``h`@€0)2ÐV9Iú¶ôîIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR `¤ pHYsb&2 tEXtComment1Øô<,IDAT™cøÿáÿ†ÿ ÿþ0ü`h`!0ù€áÙH€áÿê¡çP:TIEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR 0ÂÚ pHYsb&2 tEXtComment1Øô<&IDAT™cø'ÀðáÆ PÐüG`ø¿mbV8&ÅyIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDR¿o pHYsb&2 tEXtComment1Øô<IDAT™c8À H‚þgÅNQ1þIEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDRjúó pHYsb&2 tEXtComment1Øô<IDAT™chaha`ahB,°…á Ÿ”­q|êäIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDR…8˜& pHYsb&2 tEXtComment1Øô<IDAT™c`ƒ@ø€6¡Em}IEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDRÍH pHYsb&2 tEXtComment1Øô<IDAT™ch`€A0F H,dU ÇÀ‰ž0é¾IEND®B`‚ pix[30]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment2Aý܆\IDAT™-̱ €0 DÑhÜÑf”t¬E(%+Á&ÒŠ9¶^q¶t4\›©¤×qg3Jƒ°ýv ÝCÿðDT92ÁDëÔÑ;×àÔQfç g•"‹zÁøÆ”í£¢.äQc ÀIEND®B`‚ pix[31]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment2Aý܆]IDAT™-̱ €0„áßÊŒNÇÈhv )\KqWÈ)_<Ÿ˜âƒƒãFè$ ‘cŽœ-ÈúíÝíôä½,¢’ж ß·Á0ÿª“q¬NÆér· ûò%{È\4²œ_IEND®B`‚ pix[32]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment2Aý܆YIDAT™]̱ €0…á_,,Í(ÙÀ•ÜÁ"¥+%¸HÀ®´9ŸX|ÅñàÇÝèƒa¬T"™@ipHêâŸ]¿?´ùp‹xÞF›Ô™ºYÝ"›$Oãw7D•37ÄÉiIEND®B`‚ pix[33]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment2Aý܆ZIDAT™MÌ1 À …á:Ô­«GqëµÜZqèµrà˜AL#t胄<J'ÓHÉ2u.P žÅ»-~3u=b’0ÿ¾¡›ïJ;¹œ)åÃùç&¼[-™ä IEND®B`‚ pix[34]: xres = 0, yres = 0 ‰PNG  IHDR¯ˆi‰ pHYsb&2 tEXtComment2Aý܆JIDAT™c8ÀÜÀÐÀÄ@Ø Äÿ00üÿ€ƒÄåq#õýco`øÃßÀðC¾áƒ}Ãú†ÿ¡˜„‘Œ*D °÷‘IEND®B`‚ pix[35]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment2Aý܆YIDAT™U̱ €0EÑkeFHçv®d™2`áZºIFHù‹ïƒhaqàÁƒ‹Ï†‘¨¬"×.-pôátmÿè÷ñ"9ÑUh“:jÕÅ(›q¹qËñ‚ð“C|§¹1kâÛIEND®B`‚ pix[36]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment2Aý܆RIDAT™Eͱ €0CÑQP2£áˆAX%Ù$#¤L‹ qÒ+\ØÇÕEZ„& Ä‘D/ õóf Ù¢¹sÏât¿­¢n¢x/[´ÝB›ÿù_Ðú±/BUûtõIEND®B`‚ pix[37]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment2Aý܆WIDAT™]̱ À CÑQPÂ(l•!‹1JFpI¸\¤(ENz•íc1•N¡L›neâⓜ=<3ï˜ vTÌwk3 %ÿ³‹nâtÍ…×ÿÌt%10í4Â^mIEND®B`‚ pix[38]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment2Aý܆MIDAT™mͱ €0ÑCŒÁ(d3`3#ɤLò1QQ¼ÒgÚ(r/Ô‰='Ž ñ§¤G![ÍÛ6ˆÓ2Ùìž)ÄöZàsDè\û7·ä‡ŒIEND®B`‚ pix[39]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment2Aý܆YIDAT™=Ì+€0EÑK0ã°]JÛB¶©@²¥.¥K¨Ñ0 Ÿ ŽyÉ»ŒIQ6Ѫ ùÊÍ`ÿ&˜o6œ¬»1ÿ>Yé‹ÒV¥Ú+»â’·A~ ¹Êe/¤>ÛÃIEND®B`‚ pix[40]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment2Aý܆EIDAT™UÈA À Ñ!{豂´ÒTVÀÉJX¤¿=Âä†Èt£&*´ŽÅî?ÝÈxæÉÌDÁ/\ ñI,}¦m"º%JºIEND®B`‚ pix[41]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment2Aý܆[IDAT™MÌ¡€0ƒáEG¨cdká(‡`­2+tä=AArŸ‰7¦ÎT¢Ê8¬7lþÙÅ_Ú½ü’ñœx?Z§ŸÞ¨ƒLFYŒìÆ*9&þÉrº=f06É©(IEND®B`‚ pix[42]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment2Aý܆QIDAT™MÌÑ €0ЈtG'3ÒA\¥ÝäFèç}HÏzáA~r°D”…à ÜD›øÔˆ"U²¬D×þÙ߉vD•Kr|?ÿ;1.Ý ²PåIEND®B`‚ pix[43]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment2Aý܆\IDAT™5ÌÁ €0 Fá=xl7pGp¤n`ŃkÕIt„{(ÆÔÀ‡£a\dIÔ9±vØî×î0HÔ~Šëæ-á&uÂK¦ë¿©cQѨ‹q¸±}‚ ö?mì.ùâŽ4IEND®B`‚ pix[44]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment2Aý܆TIDAT™M̱ € „á?±°” \ÑØ@ ×’Má•„ó%šÈ]¾ò­Fü‰JäŽÒ!×¥ŸÆ§d®Ft&äë¾øÏæ?»Q£ÈÈLyÊ0Ûñ¬âIEND®B`‚ pix[45]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment36úìSIDAT™-̱ À0À\¤´7ð -#DÊb…(),Š“<9Æ‹ 7Y8÷H½LgÌ3êYÅ?ù>îŠ4K/ÑÓxdw ÿ•Æí(í½†é·IEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDR]³ w pHYsb&2 tEXtComment36úì?IDAT™5ŒÁ ÄB}vGÑÕŠ“uÇð!TT„|Ž  BB:ŸN S »(ë9ïŸ;›ŸÂé^7è,ûÿçœIEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úìYIDAT™5± À ¯ #0 ã!Q°TY##¤üññGIq²dûßx7ÆMá"3Ä\‰¹Í K]ž[Ƈ¨E„†‡2áAU·r|·MYü¤w#¶bÓO{~6?ˆ^¦ÈIEND®B`‚ pix[48]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment36úìAIDAT™chàg``g``f``døßÈðÿ Ãÿ`‚š>°3<`g8$™þ1‚eè*:À Ï2dP±=4 ¤)äóIEND®B`‚ pix[49]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment36úìVIDAT™MÍ!€0DÑO*Z‡íQ+…äJ= G@®hX¦Iâ‰Ùdˆì œ‡ÆM¥‹M^8F!I–S. åa•àoæC^Øò’t'å¦Þô×ׯÜóÍ?â)ì§)F^IEND®B`‚ pix[50]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment36úìYIDAT™Eͱ €0 DÑ(R’Q‚((Y)£d—)PÌYQ¼ÆgûðdôÉ06+•Lé™ã0K’K\s7ÑÞ/fÊ"â°HúŒ÷ÇÞ¡h·ê¦©+:ý´Ž-å_êsIEND®B`‚ pix[51]: xres = 0, yres = 0 ‰PNG  IHDR‹Ñ pHYsb&2 tEXtComment36úìAIDAT™cøSÏÐ ÏÀÀÎÀÀÌÀÇÌð¿‘áÿA:Ìð¿™á?;Ãv†ü ô€á\Í$t$8ŸdÈ(y…| ‚Æ|ÛßIEND®B`‚ pix[52]: xres = 0, yres = 0 ‰PNG  IHDR]³ w pHYsb&2 tEXtComment36úì?IDAT™chc`àc``c``bøßÄðÿÃÿ`tÌmbøÇÇp‚Ø~Õ0À<@Bì@&€Ð(;i±_qÔIEND®B`‚ pix[53]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment36úìZIDAT™-ͱ À DÑQPÆ£0ZF@¢H™•2 #P¦@8GBñ û,=4ÚÖ¨Ü$rM”Ç(Ý8‡å×ìÚ»r×ÝXœ¹G¹ qØ—8~AYnöýŸ=jD½/“À.^$È»5IEND®B`‚ pix[54]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment36úìXIDAT™cøÏÿáㆠ ÀØ€¡ñ‡Cóv$ÜÄÿâÿ?0üob‰ñ†ÿÿ Xþ??Ùì@Ì ”™ÙT2dÐN2,lŒ?IEND®B`‚ pix[55]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment36úìVIDAT™MÍË À EÑ ³pK±4K0¤%K±—.Äñ9Èü™¡s^#SI¹GÄf$ü<âÊ{K8Gf½¿r]&ø‡ë£8ˆ©VÔsvWÍ5ÝÖ7p+^ßXJ¹IEND®B`‚ pix[56]: xres = 0, yres = 0 ‰PNG  IHDR ‚£¼ pHYsb&2 tEXtComment36úìGIDAT™5ŒÁ €0 Ä\å‘'#±Z™€•‚X¤l ®¡R%?ü°LœtƒÆ}¡EɃ^d 'i¨šØM‘[oÿ¤Vý 5`÷$×®ŽŸ¤IEND®B`‚ pix[57]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment36úìRIDAT™MÍ¡€@ Dч½R( ƒ  ZI)”p2‚¹°â™ìÎc’‚ya»¤ ì?¡ÛÃDÝ ¼jfÒ ¥ÿäΪ|ÉmÉ_Žßʵ,†YòÆ=IEND®B`‚ pix[58]: xres = 0, yres = 0 ‰PNG  IHDRâ@È‚ pHYsb&2 tEXtComment36úìJIDAT™cøaßÀÐÀÄÌ Œ óþâhø`Ã? š@µ@ĪÿßSÏ€À`lˆÈ\0êiào`øQߺ1ãÆ%ÖûIEND®B`‚ pix[59]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment36úìYIDAT™=ͱ À DÑOå6È Œ–’I²JFa—r(Å“,Ûº£™ãÁ)87;™³f¬¥_”K†ö£ˆþú2gqÝŒþÚ$~¬+£&BI+{vÌ®jþã,|ª ¾òIEND®B`‚ pix[60]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment4¨žy³IIDAT™M̱ À0 A¦ËE£±t6s6ñ*U± D… \GIDAT™cøÿàÃÿPÜÄ þAñ þ¡ð€á?(âq#?H``btð(ö(|U5™ýw;hIEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR¶x‰ pHYsb&2 tEXtComment4¨žy³EIDAT™cøÿñÃÿ@|ˆ ˜áÃ? þÄ?@¸àà ~ðáÃC > ÄÍ@ÜÔÇ|@ü1cR\90sõ¶IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment4¨žy³GIDAT™cøÿáÃÿ|ˆ ˜¡€áÿa†  |€àƒ@Ü ÄÌ@ÌÄL  È ˆÿűâ{˜3¹è?~²IEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment4¨žy³NIDAT™=̱ À0@•!£h´/¼˜³‰É.¿0þ(|ˆàj„ØŽpCL¦!]êÄ–Uä œÄ´4œ¸ä”&E2oß½è›ùÿÓ^öuj3Òã(«IEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDRI¡¢Í pHYsb&2 tEXtComment4¨žy³GIDAT™e̱ €0CÑÏ%£Ý°lr#¸L¸X"–^eË”DË/‚g¹›](ÌÛTpÙa[ÐøÒ¨ì”»?ÿMÅ<4þØî0"IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDRŸøAÐ pHYsb&2 tEXtComment4¨žy³?IDAT™]ÃÁ € EÁ—Ð¥m &6l ÿè¸.ÈÁ8É.¢íGFÜûÈW²·Kô|®FñÊWs#ô¯ù1 5EÝÑ•IEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment4¨žy³HIDAT™M˱ €@ CQ—Œp£d4—-£ÜW¦8aŒ@‚âýîCj¨ ­€æ«, Óöt‹ÄôS–¤{+S‹~6/Æâ3(H "IEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDRœÓû pHYsb&2 tEXtComment4¨žy³LIDAT™cøÿ£†áÿ~Ä€¸(Ö¤lþñ –°aøÄ,€¸Â†áÁ†‡@|ˆ›˜ù *`˜ù„kÐ1Âò1dŸÌÃ~IEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment4¨žy³KIDAT™eÌÁ €@ DÑ´KIi9.ؘv¢ä˜ÃbœuñdàÁ00¡zRéTÈ)»MM™éV§›“.Ú\rÈ6„ ß5)uïï¿U³6õf¼2ŽIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRœÓû pHYsb&2 tEXtComment4¨žy³DIDAT™cøÿ§†áÿ~Å€¸ˆ øKØ0üâ@\aÃð¨þ„âF n``b(fA˜‹ŽÿÔNý3¼'©­7IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment4¨žy³AIDAT™cøÿ÷Ãÿ@ü ‚q30üƒâ?Püà€áC(`xďЙz1Ðììøç¸{6/o:„IEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment4¨žy³HIDAT™e̱ €0CQ—ŒÀ(Íe$ƒM2•WDR aé•þ¨!TZX·}jDA8ÁÇX‰¤º?Ç´Åø®YÅò¶ÿ.õ+5¾äR¹ÃIEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment4¨žy³QIDAT™=̱€0 CQŒ‚A–ÿÿD’#±ŒÂ³]IEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%TIDAT™UÌÁ €0DÑ/rtKIi– ¤±ˆØBJØcbœH..<fqœB$cƒrs9% [ºU¢»é†KÚó·HèÔÍ}»¬}ÑŸ:ù Ö..Ùû™±IEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDR{ª| pHYsb&2 tEXtComment5ß™I%AIDAT™Uȱ €0ÁÕ)Á¥PÛ!ÚúR\Ñ=’åÀH e2Ëmž¿ËèDj¼A‰Êilr>Р“¦üÛ8&<&‘‘ÌIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDR]³ w pHYsb&2 tEXtComment5ß™I%=IDAT™ch`c``‚!6ö ü0d3ÿc`¨c`c`àcxÀÆð‰áÃÿ†ÿPPfPeƒ›d?–T¡IEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment5ß™I%SIDAT™cøÀ`Áð€AŽùþÿ`8ˆ†01CCP¾¨„p0þÃÁðÿÃÿÿ¨˜(Æ Â@ù º°Ù ;,>0ü`øÃüø+/¬ÏLeØIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment5ß™I%3IDAT™c``a€¢? ò¨ˆýHÁ†A†áÃ?†ÿ ÿ`èŒÁ’bà#x½s2ég»IEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ß™I%UIDAT™M̱ € „áßPXÊ(ŒÆ KW°#PRñ$_î%wy;$Ý ÏÕ+yŠS0ÂÇ‹c¯–Øà¸¡??Nå&«:ÓìØ†ù»H[ê 7.B¢¬IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%UIDAT™cøÁPÀð€Áˆ ¸€áàÿ ‡Ñðæ \Ä šÿ0œÿÇÀð†ÿ#p?Ï€õÛóáã†ÿöµ³3Y´º€÷IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ß™I%LIDAT™cøÀ`Àð€AŒ€±ÃÁÿ£áf fá 6b†æ Çÿ10üáÿ¨˜(ÆÄÌ@ÜøC¬þØ® )")-ÍìãyiIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment5ß™I%KIDAT™c8À À€À Íÿ0´£á&ö Œ@8ñû†þ? ÿAø*–bþ?ÌüC¬¾¨ïPÿæð'*Ñ*ȶÉIEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR GÒ¡ pHYsb&2 tEXtComment5ß™I%2IDAT™ch0`¡†þ Äÿ¡€Á€A€á>à j!y~ Pñ—{ßô IEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment6FŸYIDAT™eͱ €0 DÑ¥Hë!£e”‚µÂ&Á%б²^cÙw¬¤\¨OcRM·p.èKè&SÊ¡@¨ÁI~—]±¿îûÝEÞÜä͞賬´Ö'F‰õ$IEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸRIDAT™Uͱ €0 ѳ(RâQ ZGÂM!¥Ïx(Å—&w ã&kf:‰>àz øtŠQ§`À”%¡AÙ¨lô_]Êrh×”i»î~?6Õ öÛ)»"éÏIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment6FŸZIDAT™Eͱ À DÑRÀŒÂh´EÖJ6aJÈŽ­)^sòÑ$EcR™½rï©…a¡q™‡¡»æ*Éý"úí<â›±í½å}ñŸ–å´8'žþ+òIEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment6FŸUIDAT™%ͱÀ ÁcL ”âÒHn‹R\‚C ò ›^¸3Fãåä¡2š¬J_…˃m9¨EêBš…¼~‡¶;Ľt5ô¹÷ãO‹Ÿ¡ˆ)Õe³ ÇIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸPIDAT™-ͱ À0 Dц¸Õ(Í#¼X²IFPéBØ‘8^qÍŽEÊ#ÊëBߦP—;®bÀւŠoPgZ){Ï­{ÄöùhçÍ‹ýôJ&@M±{ IEND®B`‚ pix[96]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment6FŸXIDAT™eͱ À DÑRÐzFÈH¬€ +1JFp™AÎJY¯8tf%çÁu•›Â]Œ1¶Œ¶‘·“/B•"¦h¤ ‡äõ׃º¦½qÚ·/ño&¡@&©-aIEND®B`‚ pix[97]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment6FŸ[IDAT™51€ ×.Oà–<͆Æo1~Ä'P¦pˆµØ&·wÁ²r³¡D+8]¨&d;(¦”SI "¸BÚ=w/îü¤÷^=Ÿ{«Ìýæýñ¯/úmc.6¶•£|IEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment6FŸXIDAT™]¡€0Å57BGéh'0<+›0²¢¯Ç§8D\^B,ŽÓ(Üd.Œºç0ö0ŽI›¬r‘‹\äâÆÒ4 ÅÇñcWç”Sýmg=Š^ÎP+¢=i!+ Bžå”IEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment6FŸSIDAT™M̱ € EÑk,l…ÑÜ@ ç".‚ü’â|D ‹s»÷H“zDîa¹>yÊFbÚ%’Z`ñÀê°v8rÕ¦OmL\›=@Ö0:(úV´IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸXIDAT™EÍÁ €0 @Ñ_*xÍ(ÁQÁzè\â"!ÇJc*¢„w Ÿ‹JC}*‰Ú…s—Ë&ÓϼÃ;6!x¬“ýÊ+û>Ï{®îéù1õ 7}®*ÛlüÈSIEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment6FŸXIDAT™eͱ À Ñ‹Ò0£x4Š‘(X‹(‹d„”.äC›â¹±u¦ã4’¦ñyŽHíknÉÃ)SqN&Ý--°év,ùGíkS×¢ú¦BÒ?ÿ@ð*ÅÖšcøIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment6FŸRIDAT™5̱ € „áßXØ2 £±&ÌE\„^IAÀµøŠ»\މÑñ41©Q¦Qä’ôËÆ©ñÐ<{wKŽ<ø¼9©/íêú´Í‡Ýè@.¬‡¸ÌIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment6FŸPIDAT™Mͱ À DÑ\°£e æBYÄ#¸¤@$g)EŠ']á;spAS’Ç™rK—!5U‡"ºM%¶À6ÔŸñé2wcFîæ¾þ¨Ì_2Ÿ+–ùP7·IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment6FŸVIDAT™M̱ À DÑŸPÐzFó EÖb”Œà2‚Tz–¾ŽNè9ekݸ†Q—iÜ3Èr¦—¢¯q¨Mêò@ÍîºiKMSÛö¾ój£§øU~'ŒÑc¦°IEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment71—( 8IDAT™c`@€øÿV`øÿ!áÿƒ|Š›˜ÿñCðy(¶ÀðŠ?Ô£áÿ` tß7>à»æIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment71—( SIDAT™=ͱ €@DÑLlD°1ÅÆ´“+A0¹`qýÇ¢ÁƒŸ #w“ߦCI«ôËpKè0„2ɯEž+vNlØÑ  Oì3†RÍ4ø~>ëAMýµ¨ÕIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR GÒ¡ pHYsb&2 tEXtComment71—( (IDAT™ch` ùˆþ€ÐŸúñáÆ0ô†¾m K~hIEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( @IDAT™ch`à`@Ç€øÿ –b †ÿ?€øCÿ`øÿˆñA n†bvþÇÁ@XØ£áúþ#7Ýi8{”IEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( CIDAT™c``à`€ ûÿ–b †ÿ?€øCÿ`øÿˆña nâv f‡àüP,ÿƒáÿ°GÃõp ŽŒ9âS–M¢IEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( >IDAT™ch`@ þÿ?üÈ þâþ„âÃ@Ü Äí@Ìþá?ÿ‘GàöH¸ ÿÿ®¹:l?!ø\IEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment71—( CIDAT™ch`p`€ þˆ80üÿÂþ?âƒ@Ü Åì@Ì€áÿ‘‡àöü¡‚üGàƒHøðÿWx6û¶Ç4”¦ÊIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment71—( @IDAT™c``à`@€üÿ@X‚áÿ †ÿ@¸‚áÿƒ ÿBq3³Cð?~þÂòüÃ?€p=‰:6£á>—.IEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment71—( BIDAT™ch`@ûÿÿÃÅ ÿX0üÿPÁ~@ðA nâf fbvþÇÿƒáËCð¶Gà?õ?Î<9oG„N‡IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment71—( FIDAT™c`@g€øÿ(>Àðÿâf fbö ÿ€ø?Ë`øÂö>ñ®âÿ@ñA$|øÿ%q38 ¾KIEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment71—( 6IDAT™c`Àþÿa†ÿ øÁ†ÿø 7C1;ÿã‡à?òüè‡âÿ(û9bDÞIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( @IDAT™ch`0`@ @üÿÿ0`øÿ¡ˆ?0üÄ¡¸ŠÙ!ø?Ë`øÅ?ìø×#ðÿÁ=:`OŠhIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR cLº: pHYsb&2 tEXtComment71—( /IDAT™c8ÀÁÐÀ@ò?Ã? ’`øgÁðÇ‚áGý`øFaèñ†ï?2]Kïû ÷IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜MIDAT™cøÃþá#30`0b†Æ? Í üŠ¡üÆP5  4Xýæ ìÈø?‚Íü‡¡¨·ªd׿êÕ&™s6‘ IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment8¡(5˜VIDAT™5̱ €0 ÀG”YÁ£e…×"¢ÈÁ¥‹ñ&BÖÖÛ§|1ä\¨¸£¢“ÒsoδλŸQÛ Ýê‚2ðÙH‡ð_p0ËÞìÕ^*«0TeL´1IEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment8¡(5˜RIDAT™=ÍÁ À Fá'êŽâh=Vº˜£t„séo+>ɃЃcœ<Ò(4ËÜ.}JK¦jW­üÍ–¹¤ª‰#ql,šu ž¾nš §G' Ô—|VIEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment8¡(5˜OIDAT™cøÁü€áà L`8ć(0þƒÀü?€r@5ŒPÌü¬¬þ€Cóö ìPq37å fêýÇþÄ,±K%cÁIEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜UIDAT™cøÃüáÆ @,ÀpàƒÃÁ? ÍšÿA1ßÄ~1ƒPƒØ@r Ì@uì ü ÿƒˆƒä @z!ú?!Ð^‚G(ÁD®ÌüIEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8¡(5˜SIDAT™cøÇ~€áㆠ€Ðáð†f(n‡Ò?80Hª©c†bÆ`Í€ê00°``àÿƒŠÙ004õ6Í©Ùó‡ÿlq+UZ>…IEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment8¡(5˜UIDAT™cøÏÿ€áó† €0áÀƒ†Ã?š‘ðÁ@ñ@ù :FÁ@=ÍÚ?(0°Õòÿacv(fŠ5å@ê@êAvíþ0,—½ÈIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment8¡(5˜PIDAT™cøÃüƒáCà –`8Â8þã`8 Å 6Hì@D¢¦žƒ¡(×ø¡ù?³1ó$TcÁ× ²ïóut)˾¶—˜IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment8¡(5˜LIDAT™U± 1ýJAù+1Ê’(‹1JF ¤|[T‘u2Æ ,p‚ ë8v’jV¶÷ÊF³´§ƒ°Þº‘7x;!úOZüÕ(TuhbIEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8¡(5˜JIDAT™cøÃüáCÆ@ÜøA€¡ñC3:þ!Àp(RóŠAì<ó?v,$Þøƒ¬¢·€áãGm%Ar¹lIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment8¡(5˜YIDAT™cøßÿáÃ0|ÀPÀp Á€áà†æ?@ü ù ñ@u`µ`õ@v#Pœùû? þÁüÿlþF þ `½ »þ0`øÿÿO.¸æ!â~IEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8¡(5˜SIDAT™5‹± À QP†Q‰2B"ЬÅ(ŒàÒ…•DĤ8éÿua°Ó? M3Í2iq™÷S ½–å¹Û™{&¤¶Éãù'š;þä Ô%µšÿú€IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment8¡(5˜VIDAT™cøßþƒ?0T0<`°`8À Ápà‡ÃÁ ‡¸ŠøÀ† `u0 Rßð(”cþÇÀÀþ™¡¤¿(R Ò²ëÃþr*qU³ú%IEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment8¡(5˜OIDAT™U̱ €0 DÑC)²FFó(D,æˆEn—.(8 (õ»çC6"6¢ÎaX1pæÀñ¶Òà¡ì1e?¿ËO—#ÐC]ÿššÚ+WÛÔ_vÞ¨T+‘à=IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜LIDAT™cøÿÿÃÆ ø€¡€áƒCÆÆ? Íp̦€å@jqƒãv :ö˜˜(’©ƒè)Ù¤ª'ß3øIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment9Ö/ZIDAT™UÍ¡€0Dѱ)…h)%À ´¤„“'2Í0Äsûï¨ÑðÁ('™Å&¶šÛ‡¿Š6°jP‹jðîÖ%Ùk§{>q•¬íûǃÑf{[Þ-pås'IEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/ZIDAT™5±€0 Ÿ£ Ì0Z6!T¬Å¬ RºàÎ8Šo,ëEÎ"&¡AˆMbï•)*%ÊõÃGà Æ­ánO¤ÿ^â¡’ö¤}ç!šýmôF¹ê£6/ÌNAöIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR :e pHYsb&2 tEXtComment9Ö/\IDAT™Eͱ €0 DÑ(R’Q‘ˆ‚µ²+0‚Ë–£ !ëUöñ$´Ièó°RCi™SƒAêüc¿¾+ ÇFdˆ,ÑšÀm¸-séè*mtWö¸Ÿ³à‹¼Ó!,E!M#IEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/RIDAT™=ͱ €0 DÑ\¤„Q2#dVÊ(Á¥ $¸Xˆâ5–À·`r2ïXvÚ}”½ðkKS@YpщGÿËU9õ¨ËÔYݬíY¼¢®%dá^U+IEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/UIDAT™m± €0 RÐf”Œ”!Q ÖÊ(ŒàÒ…°E‹^W½îÛ„ÈÍɤФ0,“ ŽõOtÝi‚;¸‹/€íð¬ sÙÇÐL׬±?‚&y6«)3ÍdÂIEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/YIDAT™=ͱ €0 DÑ(è £0ZFJAÉJŒ’\RX — Q¼ÎÿŒÏFÁ¸‡ÈñìœXºØ~‹ò© õ¨†ºšî›ÚËûŽh/[$i»ÿ(“᛽º*Y!\•!IEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment9Ö/ZIDAT™-Í;€0DÑG•hˆ$$ =±X@–[äCHq›ýÌÐ’8›dêš±˜9šÜP$ eøæÖ`¨ ?”€ràYDû³ßþ9ÊuéŽOŽz_¶Z-$›­? IEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment9Ö/OIDAT™cø/ÿ€áó<àÀÐøC¡ˆÛÿ00°cÁÍ@ÜøƒáP¹ ÿÿ a ~0þ Àpð@P-ÐlF  @»~È?dè-ú'çZûIEND®B`‚ pix[143]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment9Ö/XIDAT™]1€0—*Ä"I‘XB ¾Lñ“p ©(¶¸b÷è«Q'ãÆ¸È"Qj"xüh°üþQ*ìršøéMÈ=Gãí–G__úó`Õ/)ÛˆP#IEND®B`‚ pix[144]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment9Ö/NIDAT™]̱ €0 DÑ(LÇ Í£D¢`-r#¸L ¢@Oráû¤‰XDG–þØGû{­¢þ!JäÖ˜ã˙՘rÎ^í»_£0]€|)²_!€IEND®B`‚ pix[145]: xres = 0, yres = 0 ‰PNG  IHDR ŒŽÑ pHYsb&2 tEXtComment9Ö/7IDAT™cxPÀpÀ€¡A€ŸA¾ŒÀl h``8ÀÀð€áCŸ‹HeƒÃ!ò  —"uIEND®B`‚ pix[146]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment9Ö/WIDAT™cøÁü0±CÆæ? ì üóÃØ€j€j€z Èd 1üÿ ý@ýí@Üüˆf6<0Ûñdã†üÎs*†·òüYIEND®B`‚ pix[147]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment9Ö/RIDAT™m± €0 ¹ Í(‚(X‹QÁ¥‹(ð!-ÅIÖËOZp\l©áY°VX;¿X‰~Qg¢E tEXtComment0¯ó½ª%IDAT™cø Çp€¡¹‰¡ýCÿ~Tl?Àp°‰á9+2z/ÀIEND®B`‚ pix[1]: xres = 200, yres = 200 ‰PNG  IHDRØJ©ò pHYsÂÂnÐu> tEXtComment0¯ó½ª6IDAT™cøÃßÀð¹ácÃÁ ‡000```GÃí@Üü¨æPm#õüàoÕ )œ9ÇAIEND®B`‚ pix[2]: xres = 200, yres = 200 ‰PNG  IHDR7ˆÂÌ pHYsÂÂnÐu> tEXtComment0¯ó½ª*IDAT™cøgÏðá3ÃF†Ãš0´@AÍ@‚‚Ô|`à cÈe 8IEND®B`‚ pix[3]: xres = 200, yres = 200 ‰PNG  IHDRüÔi pHYsÂÂnÐu> tEXtComment0¯ó½ª,IDAT™cø_Ïðƒá3ÃF†ƒ˜0°@AÌ@‚€•ý`Ë–”hr„žIEND®B`‚ pix[4]: xres = 200, yres = 200 ‰PNG  IHDRzW pHYsÂÂnÐu> tEXtComment0¯ó½ª6IDAT™cøÿ¿á{Ãæ†Œ 60~ÐÀÀüŒÙÑpó  üõ؃¶©þ>+IEND®B`‚ pix[5]: xres = 200, yres = 200 ‰PNG  IHDRÅr‚ pHYsÂÂnÐu> tEXtComment0¯ó½ª-IDAT™cøÁÏð™áÁA†ÃÚ?€;ý! ûøøÃ‡ ˜~°¶E™ÒM;íIEND®B`‚ pix[6]: xres = 200, yres = 200 ‰PNG  IHDRüÔi pHYsÂÂnÐu> tEXtComment0¯ó½ª.IDAT™cøÿŸá?Ãf†Ì š0´?``ÿ€@@.P°ù!HPÙ~Oo}zòIEND®B`‚ pix[7]: xres = 200, yres = 200 ‰PNG  IHDR7ˆÂÌ pHYsÂÂnÐu> tEXtComment0¯ó½ª1IDAT™cøÿŸá?Ãv†Ã‡Ú2´dhÿÀÐFíôáøC†Ã0U"ÀV#¶¥ÈIEND®B`‚ pix[8]: xres = 200, yres = 200 ‰PNG  IHDRzW pHYsÂÂnÐu> tEXtComment0¯ó½ª6IDAT™cøÿ¿áÃæ†Œ 40~ÀÀpøC;nFÂŽ@5BÔ`oÑÖ‰ö•0·IEND®B`‚ pix[9]: xres = 200, yres = 200 ‰PNG  IHDRØJ©ò pHYsÂÂnÐu> tEXtComment0¯ó½ª6IDAT™cø?¿á{ÃÆ† 40þÀÀÐ Åì@ÌŒ„ª9T Tÿ½Ain'IEND®B`‚ pix[10]: xres = 200, yres = 200 ‰PNG  IHDRÅr‚ pHYsÂÂnÐu> tEXtComment0¯ó½ª-IDAT™cøÃÏð™áÁa†Ã`h¢ ìôùHðàC†Œ@e¸Ég8ušIEND®B`‚ pix[11]: xres = 200, yres = 200 ‰PNG  IHDRá-© pHYsÂÂnÐu> tEXtComment0¯ó½ª+IDAT™cøÿáÃ6†L ‡0´CÐþ ý`i>Ró€ øûnwlŒIEND®B`‚ pix[12]: xres = 200, yres = 200 ‰PNG  IHDRzW pHYsÂÂnÐu> tEXtComment0¯ó½ª1IDAT™cøÿ¿á{ÃÆ†@|ðAÃá Í013700>€¨ýÀ Ö ­BíYtbIEND®B`‚ pix[13]: xres = 200, yres = 200 ‰PNG  IHDR­¨ç pHYsÂÂnÐu> tEXtComment0¯ó½ª+IDAT™cø Çð€á`Có†ö ì`ÄÿÌh£Ã‡0•r€F%‹IEND®B`‚ pix[14]: xres = 200, yres = 200 ‰PNG  IHDRá-© pHYsÂÂnÐu> tEXtComment0¯ó½ª-IDAT™cøWÇð€á`Có!†ö ÄþŠø$Xäø#†ƒ‡>°1üÍ}+±ý™IEND®B`‚ pix[15]: xres = 200, yres = 200 ‰PNG  IHDRñÐ pHYsÂÂnÐu> tEXtComment1Øô<IDAT™ch`F†Ã°$…“^!ÔmÈIEND®B`‚ pix[16]: xres = 200, yres = 200 ‰PNG  IHDR ÌXH pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cø€¡80<8Àð7:VÙà-ŽIß!dôIEND®B`‚ pix[17]: xres = 200, yres = 200 ‰PNG  IHDR JÌræ pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cø€áC=p`xpªa©hŸà®sÅIEND®B`‚ pix[18]: xres = 200, yres = 200 ‰PNG  IHDR 'o»K pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cxÜÀÐÀB4àCe ä¸d&Vê«IEND®B`‚ pix[19]: xres = 200, yres = 200 ‰PNG  IHDR ÌXH pHYsÂÂnÐu> tEXtComment1Øô< IDAT™cø€áC=8€‚Â}ˆÀ1Û£°a±aIEND®B`‚ pix[20]: xres = 200, yres = 200 ‰PNG  IHDR ÌXH pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cx€¡ŒÀ‡€jÀ*_0™aˆIEND®B`‚ pix[21]: xres = 200, yres = 200 ‰PNG  IHDR ì3hî pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cøÐÀÐÀBâF ÊÈ~šÓ IEND®B`‚ pix[22]: xres = 200, yres = 200 ‰PNG  IHDR 'o»K pHYsÂÂnÐu> tEXtComment1Øô<IDAT™ch``€  ô:ÐRÃR Îæ‰úE{ãIEND®B`‚ pix[23]: xres = 200, yres = 200 ‰PNG  IHDRñÐ pHYsÂÂnÐu> tEXtComment1Øô<IDAT™ch```h`8Èpˆ!ð06e˜Ã š >IEND®B`‚ pix[24]: xres = 200, yres = 200 ‰PNG  IHDR #škv pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cxÁÀÐF€(áCˆ„£H" P•¹rù_È <IEND®B`‚ pix[25]: xres = 200, yres = 200 ‰PNG  IHDRñÐ pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cxÌЄÁð!D‚ º ïÔv›DIEND®B`‚ pix[26]: xres = 200, yres = 200 ‰PNG  IHDRñÐ pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cøÏÀÀÐÀpá0<”a©ô ÝõÞióIEND®B`‚ pix[27]: xres = 200, yres = 200 ‰PNG  IHDR ÌXH pHYsÂÂnÐu> tEXtComment1Øô<IDAT™cø€áC}8€@À™}À¢ A/ .>¾ÇIEND®B`‚ pix[28]: xres = 200, yres = 200 ‰PNG  IHDR ÌXH pHYsÂÂnÐu> tEXtComment1Øô<IDAT™c8ÀÀÐÀ@ò€Ã:€@ À£"aRöÚ5IEND®B`‚ pix[29]: xres = 200, yres = 200 ‰PNG  IHDRzè pHYsÂÂnÐu> tEXtComment1Øô<IDAT™c8ÀÐÀp€á‰3±~ !±–gIEND®B`‚ pix[30]: xres = 200, yres = 200 ‰PNG  IHDR GÒ¡ pHYsÂÂnÐu> tEXtComment2Aý܆4IDAT™cøÿáACƒCƒƒÃ†0ôÇ€á0|øÀððÃá Í `îyªìIEND®B`‚ pix[31]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnÐu> tEXtComment2Aý܆1IDAT™cøPÀp@„æ10üƒ úcÀð§€áGÇ 0l©a`º¡ióM@0IEND®B`‚ pix[32]: xres = 200, yres = 200 ‰PNG  IHDR GÒ¡ pHYsÂÂnÐu> tEXtComment2Aý܆2IDAT™cøùáÆ††p$B ~0|ªyÀððÆŒ‘‹«éHIEND®B`‚ pix[33]: xres = 200, yres = 200 ‰PNG  IHDR GÒ¡ pHYsÂÂnÐu> tEXtComment2Aý܆4IDAT™cøÿá@Cƒƒƒ„ƒÃ2¡  >~`xx€ápC3âô<4ÔIEND®B`‚ pix[34]: xres = 200, yres = 200 ‰PNG  IHDR cLº: pHYsÂÂnÐu> tEXtComment2Aý܆5IDAT™cøÿƒáà † †$B,~T0|øÁððÃà 0À*Ù£ˆùIEND®B`‚ pix[35]: xres = 200, yres = 200 ‰PNG  IHDR GÒ¡ pHYsÂÂnÐu> tEXtComment2Aý܆4IDAT™cøÿáAƆ= ÿ‘߆ >0<üÀpøÃᆠH&=;Çü‚IEND®B`‚ pix[36]: xres = 200, yres = 200 ‰PNG  IHDR ¨iŸ pHYsÂÂnÐu> tEXtComment2Aý܆2IDAT™cøÿƒáCƒqp0Ìá`øA ôÇ‚áGÇ †`hl`ìÃzBGc}IEND®B`‚ pix[37]: xres = 200, yres = 200 ‰PNG  IHDR GÒ¡ pHYsÂÂnÐu> tEXtComment2Aý܆.IDAT™cxðá€CƒC‡ÃddÀðˆ >|`xøáð†F(h`6 QÌéˆIEND®B`‚ pix[38]: xres = 200, yres = 200 ‰PNG  IHDR cLº: pHYsÂÂnÐu> tEXtComment2Aý܆:IDAT™%Â; @Á7VRÆXˆ*F8èØðI¸'ðÂH˜ B:ìW؉õf"ãÁ4š¡ü[6Y¯ƒEIEND®B`‚ pix[39]: xres = 200, yres = 200 ‰PNG  IHDR ¨iŸ pHYsÂÂnÐu> tEXtComment2Aý܆0IDAT™cø`Áð@‚áCÆÈH‚áà † 0<ÀÐÀAîà@¥†ñIEND®B`‚ pix[40]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnÐu> tEXtComment2Aý܆2IDAT™cøPÀpÀ€¡A€á‡Ã?$ôÇ€áOÆ~`x|€áxCð‘¼?¦Û/IEND®B`‚ pix[41]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnÐu> tEXtComment2Aý܆6IDAT™cøPÀpÀ€¡A€¡C€aŸÃ?† ôÇ„~0|øÀðñÃã ‡€ÍAHçsIEND®B`‚ pix[42]: xres = 200, yres = 200 ‰PNG  IHDR ¨iŸ pHYsÂÂnÐu> tEXtComment2Aý܆4IDAT™cøÿƒáà ††>† ÿÁ$I0ü±`øQÁð¨æÃÁ ¿‚P숊IEND®B`‚ pix[43]: xres = 200, yres = 200 ‰PNG  IHDR ÁFp pHYsÂÂnÐu> tEXtComment2Aý܆,IDAT™cøðá€CƒCÃ?$ôÇ„~0<üÀpøCsëE,bçú^IEND®B`‚ pix[44]: xres = 200, yres = 200 ‰PNG  IHDR GÒ¡ pHYsÂÂnÐu> tEXtComment2Aý܆3IDAT™cøðáÆ††{ ÿ H„þ0ü(¡?`8ÈÀÐB K,v€˜IEND®B`‚ pix[45]: xres = 200, yres = 200 ‰PNG  IHDRâ¼ñú pHYsÂÂnÐu> tEXtComment36úì>IDAT™c8ÀÀÐCM, çxþñ0ü‘aøaÃðŒÈ0<àaøÀÂðá?5@Q?4°0àax`ó€ ŸÊɤIEND®B`‚ pix[46]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment36úì=IDAT™cøÇÁÐÀ2 $þX0ü°`øPB~0<’ €R ÿ!¨Œä€z€Ú%XÿÀ)õÙÛIEND®B`‚ pix[47]: xres = 200, yres = 200 ‰PNG  IHDR øÝø, pHYsÂÂnÐu> tEXtComment36úì:IDAT™c8ÃÁÐÀE} ÿ8þH0ü±`øaÁð¡„X0<à`øÁÁðŸŒ`ˆ¡¨ ¨]ë¾b¹¬JFIEND®B`‚ pix[48]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment36úì8IDAT™cøÿƒ¡„€ ƒáà †? ?€¨‚áI0|J10üo@AóÁ8X„ÛdÉ‹LIEND®B`‚ pix[49]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment36úì5IDAT™c8ÇÁÐÀ} ÿ8þH0ü°`øPE€l† ÿ!¨ú@zpÕ¹`Óuã—IEND®B`‚ pix[50]: xres = 200, yres = 200 ‰PNG  IHDR)à"_ pHYsÂÂnÐu> tEXtComment36úì9IDAT™cø†¡ÚYÎñ0ü‘aøD6  ˆ‡á Æÿ@Ô€@ý `], x؃ºË¡ôIEND®B`‚ pix[51]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment36úì>IDAT™cøÿƒ¡ƒ8x8öI0ü" † *@èY0< r0üg£0b`ëj`8`³ØA&üsIEND®B`‚ pix[52]: xres = 200, yres = 200 ‰PNG  IHDR Â×™\ pHYsÂÂnÐu> tEXtComment36úì:IDAT™cøþƒƒx8öH0ü°¡ ôˆ,9þ3€QÙ30ðq€´7H0¨ö´ ¹%IEND®B`‚ pix[53]: xres = 200, yres = 200 ‰PNG  IHDR øÝø, pHYsÂÂnÐu> tEXtComment36úì;IDAT™c8ÿ‚¡€ä<†? ,~X0|¨¡@dÁð(ÈÁðŸŒ`ˆƒ¡ƒá€Ô¸Õ˜IEND®B`‚ pix[54]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment36úì@IDAT™c¸ÿƒ¡úæq0ü‘¡ ?*>T0<" †@q†ÿ ÿHž¡ƒá€P%h‘[w¬!IEND®B`‚ pix[55]: xres = 200, yres = 200 ‰PNG  IHDR “ pHYsÂÂnÐu> tEXtComment36úì5IDAT™c8 ÀÐÀ;þ‘Æ@ôŒ >þCPÙr   î¬A_€IEND®B`‚ pix[56]: xres = 200, yres = 200 ‰PNG  IHDR æI!Ç pHYsÂÂnÐu> tEXtComment36úì tEXtComment36úìAIDAT™c8ÀÂÐFm, óxþñ0ü‘aøcÃðˆj>‘ à8 Ãÿ†ÿ ÿ€QÃü–†2½‘´=FšIEND®B`‚ pix[58]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment36úìAIDAT™5Ë1 €0@Ñ7ž„J9iŒU€´ ¥:24”BBò¶Ÿo5T„#Üa#]©oŸÔB_‰¹Ô»÷=‹–.˜£Þ{׋IEND®B`‚ pix[59]: xres = 200, yres = 200 ‰PNG  IHDR)à"_ pHYsÂÂnÐu> tEXtComment36úì>IDAT™cøÿ‡¡úXþñ0ü‘¡6 ?j>Ø0<àaøg`øD 4Ÿ…áÃiör‘RÊIEND®B`‚ pix[60]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment4¨žy³ð0<æa8ÎÃÐÎÂÀÆ 5ÿyþ÷€µücHãÜSË…IEND®B`‚ pix[61]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnÐu> tEXtComment4¨žy³:IDAT™-Ê» ÑÃ"{«Å÷p±´Dü¯<¼ãW\°k SBSŠ’‘Ÿ…³½ùÏÜÖôIEND®B`‚ pix[62]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment4¨žy³2IDAT™cøÿáÿ1†ÿm`ÄÆð‡á}lcxÜÆp¼¡½`ÊÃêð¨Ú~ï”IEND®B`‚ pix[63]: xres = 200, yres = 200 ‰PNG  IHDRÛÛ@¡ pHYsÂÂnÐu> tEXtComment4¨žy³:IDAT™MÂÁ À DÑ?¤ð°¤±ˆ•lB.ÄQry<üàÄÇ[L1D?h¢2¸ÅÇ®¿ÁɾQ’Wü¤IEND®B`‚ pix[64]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment4¨žy³;IDAT™cøÿáÿ#†úC ÿ›@èÃ6†@ÔÆð±áqÃñ6†ö&†©i£c0(ÂBYôp2‘ŠIEND®B`‚ pix[65]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment4¨žy³ tEXtComment4¨žy³:IDAT™5Ê;щºåÆJ(ÔJ…¸ŸÉ)5TQB†똎áéž)F6/qÎø‹kŠ5è‚p IEND®B`‚ pix[67]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnÐu> tEXtComment4¨žy³:IDAT™cøÿáÿ3†ÿm`ÄÆðáÃ6†l Û¶1fchcb€€&˜Ê6$-L ÿí ‚—½»IEND®B`‚ pix[68]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment4¨žy³6IDAT™cø„á ±0ücaøÃÂðƒ…á ÃG†Ç- Ç[Ú[  ¤ª®…ˆ„ÿšèÆIEND®B`‚ pix[69]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment4¨žy³6IDAT™cøŒá±1üccøF?Ø>¶1 tEXtComment4¨žy³5IDAT™cøŒá±1üccøÃÆðŒ>°1<`c8ÌÆÐÎÆ˜@ÊÑ?&† @bëà½À†IEND®B`‚ pix[71]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment4¨žy³;IDAT™=Ê! Ñ {pÂW2Å,ƒ¸Âá… ƒ¼á Æ5ޱÅK ÑE•xrøa86_ë.ÃK IEND®B`‚ pix[72]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment4¨žy³9IDAT™cøÿŽáÿ1†ÿm`ÄÆðáÃ6†l Û·1oc`fb€€ 0•pÄÄðÆ^Ñ(¼;IEND®B`‚ pix[73]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnÐu> tEXtComment4¨žy³9IDAT™=ÊÁ €0ÀÐÐCF·k ]Ãzô ÿ·BixÇyþB>y¥Ë#Mn©"«³¬s‹B0 :å5²¥‘´IEND®B`‚ pix[74]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment4¨žy³5IDAT™cøŒáÃ6úÇÆð‡á}`cxØÆp˜¡þ3·!´Eþ15¢¥1ä.šIEND®B`‚ pix[75]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment5ß™I%9IDAT™cøÃÀðŒ>Ô0|øBþ0<„¡ƒØ0axÀÃðŸ…á baøÇÂÐÀÃÐ hÌaØŒIEND®B`‚ pix[76]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment5ß™I%6IDAT™cøÿƒá=¢ 0<þÁpŒšÁ¨ñCCCƒÃ †¨(Â`B ?ž$WcasIEND®B`‚ pix[77]: xres = 200, yres = 200 ‰PNG  IHDRâ¼ñú pHYsÂÂnÐu> tEXtComment5ß™I%9IDAT™cøÃÀðƒá±0<¨axð„ÂÐ? 6 dð0ücaøŠúXx€²61¥‹%ì’IEND®B`‚ pix[78]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment5ß™I%9IDAT™cøÁÀð‚TüaxFÿ0£Æ? 5 2 xþñ0ü"0s€H†¡Á4ï7ïW¼IEND®B`‚ pix[79]: xres = 200, yres = 200 ‰PNG  IHDRÛÛ@¡ pHYsÂÂnÐu> tEXtComment5ß™I%9IDAT™cøÿŸá#Ã02ê>ÑzðŸá!˜| Ïð€Ÿá;à jFBì @ÄÏp@¸xC˜è·IEND®B`‚ pix[80]: xres = 200, yres = 200 ‰PNG  IHDR ~šÄ pHYsÂÂnÐu> tEXtComment5ß™I%8IDAT™cøÃÄðƒ„>QýcxC€¨Žá€Ã>†l ÿ¨ †ØúÙø€²vg?ÇGµ ‰IEND®B`‚ pix[81]: xres = 200, yres = 200 ‰PNG  IHDR õÈk pHYsÂÂnÐu> tEXtComment5ß™I%9IDAT™5ƱEÁWÊ•¦"u6¾„ã˜Ù`qcðHtQDýšÈ"‰hLcóøw¿#†:%oNaäIEND®B`‚ pix[82]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment5ß™I%8IDAT™cøÃÀð‚l>Ô0|øEÁèà†6 dþñ0ügaøß‚„XúXxÈJëÖÛKÖ°IEND®B`‚ pix[83]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment5ß™I%‘Ç ôàÃC0:øƒá€Ã † ÿÀ¨†ú8$€j‚èBÔ¨›IEND®B`‚ pix[84]: xres = 200, yres = 200 ‰PNG  IHDR  ‹Jù pHYsÂÂnÐu> tEXtComment5ß™I%7IDAT™cøÿƒá=¢ Áè0 5ƒQCCƒÃ † ôŒþI€„ƒÃ¤“q¹KIEND®B`‚ pix[85]: xres = 200, yres = 200 ‰PNG  IHDR)à"_ pHYsÂÂnÐu> tEXtComment5ß™I%9IDAT™cøÿ‡á}"†5 þ€ÐÃ? aè€ Ã†?< ÿYÐCƒ ÃØNÖ‚œ[IEND®B`‚ pix[86]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment5ß™I%:IDAT™cøÁÀð‚þ€Ðƒ? Áèà†Ãÿ04Ø0aøD< ÿ¨ŒÀl††5R$3§Ý+IEND®B`‚ pix[87]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment5ß™I%5IDAT™cøÃÄðƒŒê>Ñ?úøá! °c8 Çðá?Ãÿ6ÔÏÆÐÀÇÐ d‚Á|¾#IEND®B`‚ pix[88]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment5ß™I%6IDAT™cøÁÂðá Ã? Áèñ†ÃH¨¡†á€ Ã?†ÿ<(èÆ†5QÖ5äM¦ˆIEND®B`‚ pix[89]: xres = 200, yres = 200 ‰PNG  IHDRâ¼ñú pHYsÂÂnÐu> tEXtComment5ß™I%9IDAT™cøQÃðŠÔ0<øÃpàÃAjüÃÐ`ÃÐ Ãðƒ‡áÃsexd@²j:ºx;IEND®B`‚ pix[90]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnÐu> tEXtComment6FŸ=IDAT™5± €0ÀÃê;[Gq´” ×zp7°üBˆ"xœQFÜ¡VWs–£l¥7ÂÄÜ¿ùïvò8Þ¤Z¶6»IEND®B`‚ pix[91]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment6FŸ>IDAT™Ʊ À Á—)ÒyFEÍR!¸¤@‚tÅ‘ƒtRXʬD#ßåŠ ¥ÿžëä=œn„0t²0½¶]°ÉIEND®B`‚ pix[92]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment6FŸEIDAT™± €0 EÁWDJÃ…Ñ(¾”"%+™MÌ.SX)§cK|yž¼‰%j¨ è¢Õ¹±wã^ˆã¤–Œœî¾ IEND®B`‚ pix[93]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment6FŸDIDAT™cøÿƒáÿ†ÿ ÿØþÈ1ü°cøPÇðàÃà êð14014610?``‡¡ö ‡èÃ&†lÐ8cˆ/Û¬IEND®B`‚ pix[94]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnÐu> tEXtComment6FŸ?IDAT™cøÿ€áÆ ,T0üBÍ?,8€€½ˆ@û†ö Í €º$(ÞŒ-ÐJvIEND®B`‚ pix[95]: xres = 200, yres = 200 ‰PNG  IHDR*òt pHYsÂÂnÐu> tEXtComment6FŸ@IDAT™E± À Á\P2BFa4l±˜ÙÄ#Pº@rÊœŽº”Rp!…|9ƒ˜øÀ;ÚPÁŒµYñ·?„pÙ?›0¤âílIEND®B`‚ pix[96]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment6FŸBIDAT™-± €0†Ñ‹”7’£‰$EÖ:q‘Ë)-ä?Aòx¤H'A¯ñì̃C\³Ð*Ýÿ±¶àvF% Ó>:•/¬J!:IEND®B`‚ pix[97]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment6FŸDIDAT™± €0 EÁ'#….#0 £!K¬õÙÄ#¤Lp§#;)£WÚNÄ‹¾^pc1Výc¾‚SÜŽŒ(´:¥“ºúyAIEND®B`‚ pix[98]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment6FŸ?IDAT™± À ÁtÁ£FY‹xF ¤@˜„Óá Wf`ý¦-ê©‚^h¤d’‘êÿ9‹ñÚ7n„1Ä0ÉÝôIEND®B`‚ pix[99]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment6FŸBIDAT™%ÂÁ €@ EÁ‡B¼Y‚¥Xš¬^lëË6’RÀ’(8 ”(ÆØˆƒH tEXtComment6FŸ@IDAT™cøÿáÃ?†?< ?l>üaxð‡áá†ÃÈ0`ahl`h>ÀÐþE70<`aøÀþZ•xÉIEND®B`‚ pix[101]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment6FŸAIDAT™cøÿ€áÃ?†?l øØ1<¨c8ø¡ˆäؘ˜¨ý5`hdb8ÀÄð¤ ?´LxqðtIEND®B`‚ pix[102]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment6FŸCIDAT™cøÿˆáÃ?†?L ?ä>Ô1<¢ ÿ14Ø14ð14°14010``‡¡v0j>Àp‰áÃ>¤ÁÀé¾zIEND®B`‚ pix[103]: xres = 200, yres = 200 ‰PNG  IHDR^"â$ pHYsÂÂnÐu> tEXtComment6FŸ=IDAT™-Ʊ @Ñ_(d4Å% ¥•.±ÈÙ@©„H^ñØÊ†Ó3}ÒžQ@²^ÅÈö_ƒî\>6jì°“IEND®B`‚ pix[104]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment6FŸBIDAT™ÂÁ À @Ñ…t Géh^<¸Vh‰ä(¥$ÅÇ#_RI᫬ oX0­¨ …® ã0NßÛç–üÀ ñj+›IEND®B`‚ pix[105]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment71—( 8IDAT™cøÿ¡†ú1ü¢&†ÿm ÿÙþñ1ü“cøAv ?ê>€Ñƒ Á¨„°Yá“ä˜KIEND®B`‚ pix[106]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment71—( BIDAT™cø¡Šæ`øˆáÃ6†ÿ| ÿ€HŽáÙ1ü°cøPBþ1<üÇpðÃá ÍÿÚÿ^}âã3ÖIEND®B`‚ pix[107]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment71—( 8IDAT™c8ÀÀÐCó1ü¢60âcøDr ôÇŽáÕ1|£ÿ@èà?†Ãÿšÿ1´ÿ€ØÂWÒä3IEND®B`‚ pix[108]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment71—( =IDAT™cøÿ‡¡ øæ`øßÀð¿…á? ýãaø'Ãðˆl~Ø0|¨¡@èà†f0bÿ?‘h°3€xIEND®B`‚ pix[109]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment71—( =IDAT™cøßÄÐÀEí ý€" ÄÄðŸáýacø!Bì>Ô1<øBÿ14þchþÇÀüE•.»©ÍâIEND®B`‚ pix[110]: xres = 200, yres = 200 ‰PNG  IHDRÛÛ@¡ pHYsÂÂnÐu> tEXtComment71—( :IDAT™cøÿŸá#Cõ72üod¨gf¨"v0âg¨‘gøDö ôÞáC==øBÁèð(«ødIEND®B`‚ pix[111]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment71—( @IDAT™ch`a€þ†ý ÿ[Àˆ‡áÉ0ü‘aøaBj>üaxð‡áᆃÿ04ÿa`þÃÀþÏöÔÀbP#IEND®B`‚ pix[112]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment71—( >IDAT™c8ÿ‡¡ æ`ø„á Ãÿ†ÿ< ÿd@è ߆5 €è=üÃpðÃá? í Sc‚Ê}bTIEND®B`‚ pix[113]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment71—( =IDAT™cxð€¡„æ¡ÿ- ÿ{þó0ü—aø'ÃðÇ„~ԀРúÃðŒÿa8ü‡áø†ó¢9cǽžIEND®B`‚ pix[114]: xres = 200, yres = 200 ‰PNG  IHDR‡“ pHYsÂÂnÐu> tEXtComment71—( 9IDAT™cøÿŸá#C060ôdøDÍ`ÄBÿøAè<ý°gøDõ €è?ÃA:üÝAfŽAIEND®B`‚ pix[115]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment71—( 6IDAT™ch`ah`€¢þ ÿ¨ŒXþó0ü“aøF?l~Ô0|¢? þ0„¡fk‚\p‡½IEND®B`‚ pix[116]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment71—( 9IDAT™cøÿ¡€äüC ÿ¨ Œøþ‘à ²cøDu €èà Á¨ŒÚÿº–žWF´XIEND®B`‚ pix[117]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment71—( @IDAT™cøÿ‡áxCõ`˜€á?µ0üïaøÏÃðO„þØ€ÐúPÃðàÃÃ? Á¨ùCû eö +MzIEND®B`‚ pix[118]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment71—( AIDAT™c8ø¡Šú0ü?Äð¿‰áÃ6†ÿ| ÿ€HŽáÃ;úPÇðˆþ1£Æ ÍÿÚÿ¬CÃöK›?IEND®B`‚ pix[119]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment71—( 8IDAT™cøßÃÜ ÿþ³€Ð?ú#ÃðÇ„~Ô0|¢? þ0£æ? íØAàâö”%gIEND®B`‚ pix[120]: xres = 200, yres = 200 ‰PNG  IHDR^"â$ pHYsÂÂnÐu> tEXtComment8¡(5˜:IDAT™cøaÃð€‡áp Ãñ í`d<Âð€$DXÚ@âýø€Èö ‡€Äð@>1°ìIEND®B`‚ pix[121]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment8¡(5˜8IDAT™cø`Ãp€‡á CsCû(:x€á ÃI10°70ð£ ì`5@õ@dÓ6Œ?›éIEND®B`‚ pix[122]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment8¡(5˜4IDAT™cøÿ‡á Ææ†öä€Ñ†vþþPÔTÓÀœß‹• IEND®B`‚ pix[123]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment8¡(5˜5IDAT™cøSÃð€‡á C3Cû(jn`hl K5°0°30ð70ð€"v°šœÔ~ÆÁXIEND®B`‚ pix[124]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment8¡(5˜7IDAT™%б Ã,ú·1ðVNá F(H^‡ÝX ‚îÄN½c¦Wo N¦Fú‡‘ø¸¶BIEND®B`‚ pix[125]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment8¡(5˜6IDAT™cø!Çð€áCsCó(:x$¢ Ê200``¢ í@j› jÈýï6aIEND®B`‚ pix[126]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment8¡(5˜;IDAT™cøÿ‡áƒ Ɔæ†ö Ô|€¡ñCÃ(jc`ho`ࢠÄVTð€Þ‰a‰á‘9IEND®B`‚ pix[127]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment8¡(5˜9IDAT™cøÿáÃ6†L 0~E€D0A¥€ˆ¹ýû(j>Àp€¤à©Ÿ—÷g«IEND®B`‚ pix[128]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment8¡(5˜=IDAT™ŠÁ @!ÂÝZD®Uq‘ŽàòŸr(i¸•“qBeöO ëÉwe”"Š™‡i†QDð´‡(€µ2IEND®B`‚ pix[129]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment8¡(5˜?IDAT™й À0È+’.3¸Âk)È"Á¥«ø?ý¡‰×|Þ»XÆq®@…·7Õ¤Q9Á5â£(Ç62IEND®B`‚ pix[130]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment8¡(5˜7IDAT™cø Ãð€…á CCó†ö ˆ0€Ä¡R, í ì ü@ˆŒš@Rx“GþÀ^IEND®B`‚ pix[131]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment8¡(5˜9IDAT™-ʱ CÑ_6‚+®p­¸‰ƒˆèðŠ g³.„S˜)Vù“ >¢;Ug(áþHR@x¾IEND®B`‚ pix[132]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment8¡(5˜@IDAT™cøÿáƒÃ6†ÃL Í í@¨ùCã!†L Ø@(ÛÀÀÐÞÀÀ~€ÿµ?`h†)øÀTT€ÑEÉUIEND®B`‚ pix[133]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment8¡(5˜8IDAT™cøÿáÃ6†L 0~ÀÐ D40<`‰C¤30´``EÌ5 N«äs±rIEND®B`‚ pix[134]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment8¡(5˜;IDAT™б ÄR6‚ 8샅k›ü–þAŠãr¡F4vpd¶¸ò™Å° èA³HÊ.Þú¥k[Jï0IEND®B`‚ pix[135]: xres = 200, yres = 200 ‰PNG  IHDRêC/ pHYsÂÂnÐu> tEXtComment9Ö/CIDAT™cø÷‡áƒ Æ, Í í@ˆŒ ìæ† >00ügaøÏÃð‡á ஆÆ? ìWà׋Ù(£IEND®B`‚ pix[136]: xres = 200, yres = 200 ‰PNG  IHDR øÝø, pHYsÂÂnÐu> tEXtComment9Ö/CIDAT™E¡ €0†Ñϵ®öFa4dDq]éš.Â'A(AñòX"vÜ82í¤TŠÿ»Ó*.Xùû·¡C$½,Ž,ð57IEND®B`‚ pix[137]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment9Ö/>IDAT™cø Ãð€…áC#Có†v0b“@îÁ @èà baøÏÃð‡‡áP— CC ãì@ˬ`wIEND®B`‚ pix[138]: xres = 200, yres = 200 ‰PNG  IHDRü(( pHYsÂÂnÐu> tEXtComment9Ö/?IDAT™± @EÑ…ÒF1šøÖz61‚R!üpr˜‘î‘C–l(PÓ«»ˆ&¦ád޽·cyF@‘oÿ)ò¦kª£IEND®B`‚ pix[139]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnÐu> tEXtComment9Ö/:IDAT™EË¡ €0ÀCñ®–Q:Þ',Ö‘*_BÉÙ3»2Ü´ÔÆïÜR2˜,Þ°.OW{•£´ú>Ã|JÆ%­IEND®B`‚ pix[140]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment9Ö/ tEXtComment9Ö/=IDAT™-± À Á >¤Jqi@nëJ¡B‚ !›ñ  ­ðéîÿ&ì¸+ãÌ|‘©>Mö^JajIEND®B`‚ pix[142]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment9Ö/?IDAT™cø_ÇðAŽáÃ&†Ã‡Ú€Ñ(:þ€áðÔ&†?M ÿÛþóÐ?9†?v êÿŠ­ªGÈD·IEND®B`‚ pix[143]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment9Ö/@IDAT™cø`Ãð€‡á C3C{ÿê?ÀÐ~€áÆ ÿY@èÆ@]5 ˜ÿ§ù¾K`úIEND®B`‚ pix[144]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment9Ö/Ø0<øÃÐü¢MI©tKÔIEND®B`‚ pix[145]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment9Ö/=IDAT™cøcÃð€‡á Ãá†æ Ôþ†ÀÜ >00üa`øÏBÿxþÈ0|°a8PÃÐð? ¢;WÑIEND®B`‚ pix[146]: xres = 200, yres = 200 ‰PNG  IHDR 3+‰ pHYsÂÂnÐu> tEXtComment9Ö/:IDAT™E± @Ñ_ê´F1žÓ¤´Rlbe '¨¼{¸12¨ …xëß…ÞXùF7ÄÃNܶ¾“IEND®B`‚ pix[147]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment9Ö/EIDAT™˱ À á…4BpT ÁÂÒ•^6qK‹Â_sÌDÈS2õ$ñЦë">è0`{v`,2Î’ÀpöüÝùæPV”IEND®B`‚ pix[148]: xres = 200, yres = 200 ‰PNG  IHDRØ¶Š pHYsÂÂnÐu> tEXtComment9Ö/>IDAT™cøÿ‡áƒ Æöþ(¨½¡™áÆÿ, ÿx@è Æ5 ˜ÿ¤Tbýê?ÆIEND®B`‚ pix[149]: xres = 200, yres = 200 ‰PNG  IHDR7tû´ pHYsÂÂnÐu> tEXtComment9Ö/AIDAT™-ÂÁ À @Ñ¡£8›xh× u‘Œàу$ññX…!XFýãÕÝή(ŒD4â!æªsù[ONéª%IEND®B`‚leptonica-1.70/prog/recog/digits/digit_set01.pa0000444000175000017500000007561412251652063017511 0ustar dandan Pixa Version 2 Number of pix = 150 Boxa Version 2 Number of boxes = 0 pix[0]: xres = 0, yres = 0 ‰PNG  IHDRï^¸Å pHYsb&2 tEXtComment0¯ó½ªIIDAT™cøÏüáÃ?† u äð1<øÁÆpˆ›ÿ0A13 ÿÑÔô4õ6ñ6†@³AæƒìùÇø‰&îáTIEND®B`‚ pix[1]: xres = 0, yres = 0 ‰PNG  IHDR'= µ- pHYsb&2 tEXtComment0¯ó½ªZIDAT™}α €0 DÑ¥ ô…Ñ(€˜±H$€.²±‚Šâé—w˜6½f'}!9ŒFO;{-l*l&¬Ö¹Ì4š~äŽ%¨«B¥ÜöØ`À]j¢FcVíЮIEND®B`‚ pix[2]: xres = 0, yres = 0 ‰PNG  IHDR:Ë[Ó pHYsb&2 tEXtComment0¯ó½ªXIDAT™UÎ1 €0DÑRXæ‚Gñf²-x½AJ‹5ÔæÁ43ƒ*(Ê*Ü,9 ¥NÂÕQÈ:ή¼@p,†?ÑÉzé9Ølˆä»ÕhvÃ=°*>ÊEê}ŸIEND®B`‚ pix[3]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment0¯ó½ªRIDAT™=ͱ € …áßHÉŒbâbv,¦qF ¼â§R|É«þGïJ[á ºB¢ÔÈ%‘[‡0e‡[§ðywþ‰±N®‰³XÓÛãCQûl»>—¢1îÙÞkIEND®B`‚ pix[4]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment0¯ó½ªOIDAT™cøÏü0Ô1|`°cxÀ ÇðÀ‚áà>†æ?lpÌü‡ 3@ð?dÌÆÈ¨¯áÃ>ˆ¹@ó?íùÁøáû? £)q‘™IEND®B`‚ pix[5]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment0¯ó½ªUIDAT™Mͱ € …á_Š+Q˜ÉŒÑÍÅ()Èá“hñU—ûýrœC•ŠQ6ãnFnìSt„]Òü³LÊ’‹þy©§v¢6ÒØìø9p#-?¼’IEND®B`‚ pix[6]: xres = 0, yres = 0 ‰PNG  IHDRÕ 0í pHYsb&2 tEXtComment0¯ó½ªTIDAT™UÍ» À CÑ‹^AÉ…Ñ ÊbHY„()ž |’"Å)ì¦ÓQ•ƒ‚#Ç]-—N²H3ˆ¾šùgeäÍŒþsê–ª°ä¹½>üøóô·Â&–´ôxIEND®B`‚ pix[7]: xres = 0, yres = 0 ‰PNG  IHDRñ—ˆv pHYsb&2 tEXtComment0¯ó½ª_IDAT™=α €@ @K”Œ#0£ÅèË(ŒðåˆàÀ‹æªØ¢¾7fâÂ$ÖQØ ¢-©q†w<‚`d'3á–±ŸÅJž¨¾š†ê&Ú»›„r´€B Ëð¡IEND®B`‚ pix[8]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment0¯ó½ªRIDAT™]ͱ € Ñ“‚’…YÄÙ 7 ()Èlj¯½c\§ãhXêtXr7uObˆÂ²½úŸùÄfIU펤ݼxôqêKô)Ô=(l4 ¸IEND®B`‚ pix[9]: xres = 0, yres = 0 ‰PNG  IHDRï^¸Å pHYsb&2 tEXtComment0¯ó½ªXIDAT™-ͱ À Fá‡KGp’ +eu4G²€eŠpæ¢_óýcÜÂ@xI<åéÖÑœ¥yK fIP/(y ¿¹JܲÞý¢6‚¶Nmj»Ï‚òG%QÞ=<IEND®B`‚ pix[10]: xres = 0, yres = 0 ‰PNG  IHDR$k` pHYsb&2 tEXtComment0¯ó½ªSIDAT™uÍ1 €0CѯÇAIEND®B`‚ pix[13]: xres = 0, yres = 0 ‰PNG  IHDRœÓû pHYsb&2 tEXtComment0¯ó½ªKIDAT™cøßü‡0Ô0|`°b†< ð04þaahþ‡Œ˜¡˜þÁÂÐø‚~ãa8ðh¦Èì =@Ûÿ *óþ‹NIEND®B`‚ pix[14]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment0¯ó½ªSIDAT™mͱ €0CÑH)3BFÉh4L–Š5!å§ …ŽâInl3Î`8;&*…Ë Í3‡'Y_[üaRöO’§;Y¦umj·“%°E¿*êÿ5‚/u.¬*(IEND®B`‚ pix[15]: xres = 0, yres = 0 ‰PNG  IHDR@J· pHYsb&2 tEXtComment1Øô<,IDAT™cøSÏðƒŸá?Ã0:F 0ô ’éj`dh```’Ì ìDŒ"Ïš‰IEND®B`‚ pix[16]: xres = 0, yres = 0 ‰PNG  IHDR 8W pHYsb&2 tEXtComment1Øô<*IDAT™cxðƒ¡¡‚Á5X0°`xF`Î}€Š@² ~^‘>/sIEND®B`‚ pix[17]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<+IDAT™cx ÃpŒ`ˆ È0|aøFp < @ 2‰”0‘‹IEND®B`‚ pix[18]: xres = 0, yres = 0 ‰PNG  IHDR)à"_ pHYsb&2 tEXtComment1Øô<"IDAT™cxPÃpÀ„Àh‚ ƒ} =#F  ŸtñãÓV²IEND®B`‚ pix[19]: xres = 0, yres = 0 ‰PNG  IHDR M¨Kˆ pHYsb&2 tEXtComment1Øô<!IDAT™cxØÀÐFÈÈ=FÀè! À@ ½ p˜zE„®/kIEND®B`‚ pix[20]: xres = 0, yres = 0 ‰PNG  IHDR@J· pHYsb&2 tEXtComment1Øô<8IDAT™cøóŸá‡<Ã~†ü À¨Ÿ†Àâ°"°®ì 00``h’Œ ÿÛô_/}²ÒIEND®B`‚ pix[21]: xres = 0, yres = 0 ‰PNG  IHDRdÔº, pHYsb&2 tEXtComment1Øô<3IDAT™cøÀÞÀðˆ01c2B0*žÄ€¬Œ@ T?ê?€a)—no38IEND®B`‚ pix[22]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment1Øô<)IDAT™cxÀÇDÀ¨ŒÀÈø€ ±Ã b`8AL ?ä¹'´!ÇïIEND®B`‚ pix[23]: xres = 0, yres = 0 ‰PNG  IHDR‹êèj pHYsb&2 tEXtComment1Øô<0IDAT™cøaÇpÀŽ¡ÁŽˆä ¨AŽa}À…ìØ\ ˜01üùCòEÐ`ÌIEND®B`‚ pix[24]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment1Øô<$IDAT™cøÀÏðŒ€Q1€?Ãè*j`€¢ŒTeCAY½IEND®B`‚ pix[25]: xres = 0, yres = 0 ‰PNG  IHDR@¶;Ï pHYsb&2 tEXtComment1Øô<$IDAT™cx Çp@Ž¡AŽr«¢HèC ©{ ÉåŸeYIEND®B`‚ pix[26]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<IDAT™cøWÃpÀ†¡A= "$²¦“ ÐæìIEND®B`‚ pix[27]: xres = 0, yres = 0 ‰PNG  IHDR–ïØÒ pHYsb&2 tEXtComment1Øô<1IDAT™cø!ÇðáÃ>†b£6†ØÐ:DL  ¨ dÈç‚á’¸%[PIEND®B`‚ pix[28]: xres = 0, yres = 0 ‰PNG  IHDRd(ƒT pHYsb&2 tEXtComment1Øô<4IDAT™cø÷‡á Ã0j# ’#†6 `è ÙÀ Æ 0t€ÃN£u’QkIEND®B`‚ pix[29]: xres = 0, yres = 0 ‰PNG  IHDR]O2 pHYsb&2 tEXtComment1Øô<)IDAT™cøaÏp@Àh[ã}R`>ïê§½Lø0¸ôh™²IEND®B`‚ pix[46]: xres = 0, yres = 0 ‰PNG  IHDRm?V pHYsb&2 tEXtComment36úìXIDAT™=Ì1 €0ƒá¿thУx,GG7G¯Tpð(޾ñ b E>!„Æ@¥tsÏ“858û&‡ÓNY%9ú[Ì —gšó[$v™d™hôË÷mÁ_Â,Ô¥©{IEND®B`‚ pix[47]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment36úìVIDAT™=̱ À EÑ\À ²‚#d$GR¸V EÖ¤°}åFPRœöp7q9~q>âêJ-OIÔ-b Èìµ& pHYsb&2 tEXtComment4¨žy³FIDAT™cøÇÀÃðŠ@ñ8–aøÐ Ãð„È0<âÇHø8 ?ahá< `ŒXþåÿ?a(¶Óã'1fí IEND®B`‚ pix[61]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³DIDAT™cøÿÃ;†HøO?°cø„?ñg(þÄÏ¡ø<÷?¨ƒb&†dÀ“cøÿÁ ×1üÿýËÊ8û¤TòvIEND®B`‚ pix[62]: xres = 0, yres = 0 ‰PNG  IHDR  %…• pHYsb&2 tEXtComment4¨žy³KIDAT™cø žáÿa°‡àö ?@ðG(~Äâ‡aøA=C;óåøð13#†F°Üÿò ÿ@1ˆý¡{C-&[(‰IEND®B`‚ pix[63]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³FIDAT™cøÇðkàøƒ Ã(>Á?ø3?°aøÄÏ¡ø8ŸPÆý@5í , Ì ÐÇ, ‡êþ£ã5"‚3bïp÷IEND®B`‚ pix[64]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³KIDAT™cøß`ÇðAŒÿ(@q‚Ã0æcøðAŽáÃ9†PüùÃc(> ÄÇø9ÿáv L@Œ ‚äfaàÿõH2™·z[IEND®B`‚ pix[65]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment4¨žy³LIDAT™cøÇÀÂðˆ€± 7Ø0|hã ü(ö„È0c0> †¡„jÚ˜½'ø„m€¸†áÿþ-ê(åÿY5IEND®B`‚ pix[66]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment4¨žy³KIDAT™cøÏ`ÇðAŽá_?cøÅø'ÿâßì>Cñc > ÄÍ@ÌÆuPš‰`c0bØ´çÿ ~Å@¸o‘.½î IEND®B`‚ pix[67]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment4¨žy³JIDAT™cøÇðƒáCÿ€â`lÁð¡ˆX0|â‡*Àø1c 0>Äý@>ó1sV0¿A‚á?Pþ¨Žê,Dú¨PaIEND®B`‚ pix[68]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³JIDAT™cøÿãÃ;† ü'ŠØ1üx¡ÿñO(þ Å¡ø8>ÿAŽ¡ÿCÿ†tÀÆÀ”ÿÃ@õ`üñÔI5õ·Ó\ IEND®B`‚ pix[69]: xres = 0, yres = 0 ‰PNG  IHDR"‚/O  pHYsb&2 tEXtComment4¨žy³cIDAT™cøÿǾáÿ~ ÁÀÞÀðNü nPöß ñDüý ßÀðB¹AÄg{ŽDM>b”mÀÜÀÐÈ€Èqû†ÿ?@nù&äQˆßÿÕ³C<ƒÜÐIEND®B`‚ pix[70]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment4¨žy³GIDAT™cøßðáƒÿ@Æä>€1”–cøÄØ1<~`Çp„@p?2n`c```b@$ÆÇðÿA&þ÷ÔÙ1REh\cIEND®B`‚ pix[71]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment4¨žy³GIDAT™cøÇðk~0Ø@pC ÃO þˆ†#ã5 ÇaÈ? ÄÍ@Ü4§°1P\†á?Ðüÿ@uÿúþüôx,‘i £`IEND®B`‚ pix[72]: xres = 0, yres = 0 ‰PNG  IHDR!‡Ý€ pHYsb&2 tEXtComment4¨žy³NIDAT™cøÁ‚@lÆ€ì,>ñC(~   ‡p0n°`8ÞPÆí`üƒ¡ÿÀ~ ÍÔËÇ€4ñç ÿf¡aLL,…t=3BIEND®B`‚ pix[73]: xres = 0, yres = 0 ‰PNG  IHDR#Isœ pHYsb&2 tEXtComment4¨žy³aIDAT™Uα €@ Ð/r£8š)ítÁUÜÀ®°ÍuZHÌ' ^óHÿ˜™Àòàì©!;¹ÈMêOTuŠ&‰·3ÇÇL6–®è:ÁB„«cA[Ô³ñ¤óLyT–u û3IEND®B`‚ pix[74]: xres = 0, yres = 0 ‰PNG  IHDR"œæ pHYsb&2 tEXtComment4¨žy³RIDAT™cøÿñÃ?; –cø£Ä üãc;†@üŠñáu`|Ȇáv>`ÇÐÜÀÀD` ¾Ã üÿrPÌ¡È"ª4÷°¼·$IEND®B`‚ pix[75]: xres = 0, yres = 0 ‰PNG  IHDRD¿ÒŠ pHYsb&2 tEXtComment5ß™I%EIDAT™M̱ À CÑ¢ d¤ÜfI”Å< ƒD 4¯ú–Ñ)®Økvˆû[Âø¹á i= {ºÓ¦Z™rn`ýªŠ·iÑw&ø2Hî)IEND®B`‚ pix[76]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%\IDAT™c8ÿÿʆ @šˆ™˜ˆå0´åú‘ðüýæå{€j$0´?P`8Ä@ilÆ ò@Ì@‘!¡jÇö ?ê¼5 ¸eßIEND®B`‚ pix[77]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%WIDAT™cøÿÿÃþ ˜¡˜ˆå?0<Š¿âóP†|â ±Ãc þ†çÿ``èá í@ÜxÀ€áCõ2íÚñïÿãÃA‚]°uIEND®B`‚ pix[78]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%YIDAT™-̱ €0 DÑQ¤ °BFËx´  ­épA)ždŸÎ¦=…F §IÎþ:çÐg›”ÿ,3[ëàp¸D퓤!V¦¾õ[ýnѹWÿ•/ÀÅ•IEND®B`‚ pix[79]: xres = 0, yres = 0 ‰PNG  IHDR`!j pHYsb&2 tEXtComment5ß™I%RIDAT™cxb÷€013³1?Û?`hÿŠûÛ0ôÕ60$04(04lP`hþ ÀpüÃ4<(.ÄüØÕCíxÀü­”14&û°MIEND®B`‚ pix[80]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%PIDAT™E˱€ DÑÏRc)R3´µF†¶p%ОÂh𢿋- n¢8š8‡Ë•Sdo™n·D©¼ÚÃ~ë'•À÷„þ×,ê¦"0lnÔ>IEND®B`‚ pix[81]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment5ß™I%^IDAT™cøøÏ†á`¨`Æ? ØXˆÿÿa8Ž„3ÅÀje$È0üÀÃpðÃó, ÿ?€0Ã| ÝÄì@Ìø€‡‡¡Œe ú€v<`ø¬„/x‹]ÿÑIEND®B`‚ pix[82]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%ZIDAT™cøø €áƒÃ†(þÀp€ˆ™˜ýÃaû Çÿ#pP¼„ 04``8 Äÿ‘°<óC1ûf º†`½ ;>°^|0¼Â‰NIEND®B`‚ pix[83]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment5ß™I%VIDAT™=Ì» € …á?¡°Ä \ánàJŽ¡p-:×`„ëâ ‹¯:îÇhõwpR(»sö©ø—ŽÉJ®¹¤O›De1Á¢ƒmÕ‡n'x3hnIEND®B`‚ pix[84]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment5ß™I%\IDAT™MÌ¡ €0…áUI7è ŒÖÉ$¬rM’¸‡ƒk‚@|îkÍ(! .õ1ö¿Éµ†¢‘b‘jp¸ó³¹Ô(ôÞ,™e`”ì;CýÿöHÜ3C¢]dIEND®B`‚ pix[85]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment5ß™I%YIDAT™-Í¡€0DÑŸÁœÃ pi™Ò"q´* …ÐŽÌÀ&ƒxòïâSâ"QÉâÔ ƒŒåuN) M–DYŒ’ÝÛáý²]Æ ¡+s×›ö¡í'úóº/˦z&©IEND®B`‚ pix[86]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment5ß™I%RIDAT™cxü'á ?`8ÀÄì@,ÿ€áðÿ íH¸ (Þ”oªm`P`h|ÀÆÍÎñ} žÄò@ÌŒ(0´é˜ÿùx¶.1mÜ IEND®B`‚ pix[87]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment5ß™I%XIDAT™M̱€ ƒáß³ ”Q Ä ÁUð¸“5!ÖøÔB‹ïÒ$áP ¢W'R/â`9‰ÜDùsb·^"0kd“'›R¡¥Ïúð,ÆÅ‘È-ØNÈþϦ qã5¦FøIEND®B`‚ pix[88]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment5ß™I%]IDAT™-ͱ €0 ÀG È&YÅ£€(X+¢I:V°Ä–hRa%²®ú×îŠö ýoRä™Â'ï.f•½Õ[ì-¢ÐMEøh»‡ 2ú¶q—?J9}ÆT IEND®B`‚ pix[89]: xres = 0, yres = 0 ‰PNG  IHDR ws pHYsb&2 tEXtComment5ß™I%XIDAT™]̱ €0„á_,,3‚£øF Ú¹‚£øº”Y!#¤³ŒÁFޝºã¸«ófQ&™Ôœ,M.9³s¨ß´[½3öb¤ígéæh ô¿ÿàÔæÝ@2Ƽ]žIEND®B`‚ pix[90]: xres = 0, yres = 0 ‰PNG  IHDR*…KvÎ pHYsb&2 tEXtComment6FŸlIDAT™mϱ À ÀG)R2£ÀDYFóY()ΛHQ"¥¹Îÿo¨žÕ4£Å¨`n†'#¾ˆ¤-ÂxQ± ¨Ñ‘ŒDJ‚üˆ~¨ŠEz“ÁøÃYé7ìÖ6±–ží• ÑÞ`rwŒ¯IEND®B`‚ pix[91]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment6FŸcIDAT™U̱ Â0᳑B6›ÀJ #ƒMþRºˆžó ) øtÝÑb ã‚’XŽ¢Ú|²³ˆ«=Ä룉â ÖÃØ6Iùö´é+3-™÷.jGÜzÂÏ™;5i•¦7ŸŠ¿­IEND®B`‚ pix[92]: xres = 0, yres = 0 ‰PNG  IHDR'ÈÞ> pHYsb&2 tEXtComment6FŸ_IDAT™uÍ1€ …áß8Àؼ‚#›×râÅ<ŠG`ì@À‡£‰Ã—´¯MKO‘F¤Š±Sœq/²×!ÝÈ’õI3"¬A¥gª0ÿ±eçË“ \%r3è¿n››³šÃ7 sýqÏIEND®B`‚ pix[93]: xres = 0, yres = 0 ‰PNG  IHDR'#é…ž pHYsb&2 tEXtComment6FŸhIDAT™UÎÁ ƒ0†áWz t€‹º’šàbŠ‹Ø <æðaüQ(zxîuŠÔØ ˆHy‰ímz±~ÌWLõ2›œÅ˜" ‰Ž´w§üioƇŽåäøÉ±Ê³OÅjDmuöA¨­3IEND®B`‚ pix[94]: xres = 0, yres = 0 ‰PNG  IHDR%n!$• pHYsb&2 tEXtComment6FŸ]IDAT™MÍÁ €0 …á¿PðÒDp±¢-£t‚šôb_ȃGÂËŒu·Ïk2ÚâvCÃiHX+âñ®P€ Õ¾>¿4ˆ,=2Z J˜i~/\ÔþÛ’›ì©Å.]{’ñøIEND®B`‚ pix[95]: xres = 0, yres = 0 ‰PNG  IHDR(=}\u pHYsb&2 tEXtComment6FŸ`IDAT™=ÌÁ € DÑIð†h'Vf 6f(…fa`X"œ¨™XÄ Ñ8~sÎÉ9fQ_/ûeyE2Ö%, ØÜcñÖrÿáïnY¿ž½òcAÕ3ÇX8µëú!6 DqM}­ÄëIEND®B`‚ pix[98]: xres = 0, yres = 0 ‰PNG  IHDR'= µ- pHYsb&2 tEXtComment6FŸ^IDAT™M̱ € á#Ø9‚›ÈZV¨›1Š#PRž¿bŒÅ—ëåˆ6ãD fç$jeíý0‘ÉK`KFþå+ì¯üq]s·dfOÅ~·jïJä´IóºËAAˆ|§IEND®B`‚ pix[99]: xres = 0, yres = 0 ‰PNG  IHDR)ö!Ð pHYsb&2 tEXtComment6FŸfIDAT™mα €0„á_í!nWq\,báŽÒ"¼xŠ`cñ5wy3òìÅ‘qžTg#åè_“dβ £xPØR¤ZJ*ûqç‰ÏY>–GÍ*ah9¸9¢v£Þè˺X:ór5°’IEND®B`‚ pix[100]: xres = 0, yres = 0 ‰PNG  IHDR&w= pHYsb&2 tEXtComment6FŸeIDAT™5Ë»à DÑ; p†:ÀÈ-)t„ŸpM”B ˜‡Wgfƒ½Œ²0,œL8}vÚÓÙ_òqª”q[3F’ˆ…€Åé’€¿åvìx1Ù¾âúJ9j—w`ש)è þ 0NÖI]IEND®B`‚ pix[101]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment6FŸbIDAT™M̱ €0CÑ‘ ƒ `“° 86 ›dÊÑ…# O–%Ë”à)L¨ÉxR¯Ü£™•¸˜C å#nGl'¶—m@rGóÒö“ߤrÖÿNíª+UHqõDû¼ÙIN¨6ªïIEND®B`‚ pix[102]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment6FŸ]IDAT™eͱ €0EÑ+l.à(‚‹)è®7ù#¤Lñ1>ÑB°8å{—šgªAMœâ ¥ur'½c“,Nâ6²_AƒGãül_%HäȳÓOfVËqµêîzü3Ìà_ØpIEND®B`‚ pix[103]: xres = 0, yres = 0 ‰PNG  IHDR'#é…ž pHYsb&2 tEXtComment6FŸbIDAT™}α €0…á_l. ¸†EÀµ,&›e”Œ2Å‘x1•Å×¼{<Ž–-ZB]Y…² ùRw ±Ó<êÝÓ9µáƒC™©«ü ^û±¨Ë°¯¬»eüò”;Ú¤©\$IEND®B`‚ pix[104]: xres = 0, yres = 0 ‰PNG  IHDR(Ò¿7K pHYsb&2 tEXtComment6FŸaIDAT™]̱ €@ƒálApÁ•,-ϱìÅ,¯ž9´P‹/Ç#¤0‘˜PVˆX‰£{o³%±=‚-¹ýh€FSM‘å/ßÛ¢Û¦’=Ú`Þ‹Þ§3­º4,;ÜbáŽRIEND®B`‚ pix[105]: xres = 0, yres = 0 ‰PNG  IHDR-éË pHYsb&2 tEXtComment71—( HIDAT™cøó!áƒ304 a ˜›HßIEND®B`‚ pix[106]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment71—( TIDAT™cxøÿC æb†ýlþ¨â? ÿñC(~ 渊ùXþÃ?{þÄ?@(öƒˆb@üÈþÇTÛÄÿÿ~2@ÚêÑÂIEND®B`‚ pix[107]: xres = 0, yres = 0 ‰PNG  IHDR«}¹´ pHYsb&2 tEXtComment71—( KIDAT™Eȱ €0 ÑC)(3B² «x”lÂ*åAA‚8é5‡mø«d¯”‡±6ãÂPhƒO“Øfqt9”°ˆ½û~zI7þ˜$G¬H¿7IEND®B`‚ pix[108]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment71—( NIDAT™cx ÿ€áƒ700±ÏoH`˜ÿÿƒðƒ ÿBñA > ÄÍ@Ìþ€á?ËC±ý†? ûÃŒÀÿ@¨öÿÿ#“9§ÇýËIEND®B`‚ pix[109]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment71—( VIDAT™cøÇÿáƒCƒ3@±4`˜ÿÀ€aÿ‡†ÿ üàÃÿ‡@|ˆ¡¸ˆ™˜ýÈœòüÇ‚€0ÿƒŠ™!ô þ/ÿ‚î9HOë(*IEND®B`‚ pix[110]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment71—( PIDAT™cxÀ Àp€¡0H±ýù@º€á?øÁPÌ ÁÿؘÿÃyþaÿáå>0ù Ìðÿ0‚õ'2÷ £Ì|IEND®B`‚ pix[111]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment71—( LIDAT™c8À Àp€¡Žæ10Ø7ñ‡†ÿ>@ðG ~㡏ˆÛ˜‚ÿ°ý†?õü„嘈™!ø3X7R«âŸIEND®B`‚ pix[112]: xres = 0, yres = 0 ‰PNG  IHDR ØÅ~b pHYsb&2 tEXtComment71—( GIDAT™cx^ÿ€á7 `†Nㆂ ÿ><`øÿ ?âÃ@ÜÅì@ÌÁÿä!ø33 ð?f„ª•ZÝ7õÁ IEND®B`‚ pix[113]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( JIDAT™cøyÀ€A€€ø ö  õ  ÿ|`ø 7q;ó`øÂòþØCðz(þÁ€òØl$ü‡ÿ~4—.¼ÊdIEND®B`‚ pix[114]: xres = 0, yres = 0 ‰PNG  IHDR‚ýqh pHYsb&2 tEXtComment71—( MIDAT™c8À ÀÐÀÀÇ ÷Á€ÁþC`°Å?0üáf f‡bþ ÿ@XþÃ{ ®ÿÀð„ÿCi ÜvþÄø?1ø4TÞéÖþIEND®B`‚ pix[115]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( KIDAT™cø@€á70€€a†y  ÿ>0üo€âF(> ÄÇø<÷±ü† lÿá2–‡b~þÄÿççö6Ÿæ{Ý„IEND®B`‚ pix[116]: xres = 0, yres = 0 ‰PNG  IHDR浿 pHYsb&2 tEXtComment71—( FIDAT™c8ÀÀÐÀÀÆÈ€‡AÁþ@ƒýƒ0ýÿÀ>Ä@Ü ÄìüÿÃù ?ìÑ0H (ÿƒÿcb!0a?o´IEND®B`‚ pix[117]: xres = 0, yres = 0 ‰PNG  IHDRã/ pHYsb&2 tEXtComment71—( @IDAT™cxÀp€¡ÁÔÅþ8€Š€¸ˆÙ0üã‡bù ì0<¨‡àÿ,”ÿÂüP,·42|;ŒIEND®B`‚ pix[118]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment71—( OIDAT™cø`ÿáã†0†0¶`ÀPÿ¡€áÿ‡ ÿ?Bñc >Ä縈çC1Мÿõ@üñO þÁÄìü‡¬b1=lþ]ÞAIEND®B`‚ pix[119]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment71—( OIDAT™cøÿçà †TÀÆì@9þ ò,æ?¨`øÂ€¸ñ*fþÁðˆùXþÃ(þäÿ`b²ÿ€0D=~b3Úî™ IEND®B`‚ pix[120]: xres = 0, yres = 0 ‰PNG  IHDR!r ½ pHYsb&2 tEXtComment8¡(5˜`IDAT™MÍÁ € Ð&qƒŽBÉt3Øâ9â§ñà᥇ÿÛb<ŠEE@† ž±m?©z”*(9X¯S›ýCعû´gðMbî"ó‹wç}ʶϿ«bìú)õ/¶ô¢—’IEND®B`‚ pix[121]: xres = 0, yres = 0 ‰PNG  IHDR >ìµ& pHYsb&2 tEXtComment8¡(5˜`IDAT™-̱ € „áß@bCá áì&ÆÂµ .”/ÄZ|¹\r9ú!ÔE(Ò°{RõäÉqN/Awº7Ÿ² ¹yq\Ýqw« f_³˜j‰ÉÑï)PõGVyÛ60¶qIEND®B`‚ pix[122]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment8¡(5˜[IDAT™Uͱ €0 DÑÉeFÈ” E™"EØ,l’\RXÑP<¹ðŽ;%3Ã"ŒõS]f Ý#×<ßÞ«µ0M8ÝaÐ.ýÄOèš¾3Ø|ǻɸâ(8>ä|IEND®B`‚ pix[123]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment8¡(5˜XIDAT™UŒ½ € DŸ`‡8 £ ‹é&ß”†x‹—Kîgë´¥S ŽÛ ˜£Ô âdIYæ¢cêÛPä¼ ^¬S¨s^‘ƒ¨}Ò.Í÷ìä-9fÖ·+IEND®B`‚ pix[124]: xres = 0, yres = 0 ‰PNG  IHDR$»´Çƒ pHYsb&2 tEXtComment8¡(5˜hIDAT™=ͱ „0 Fá¹p™…Un”C,Ä"a—Q|?W|…%?›žI«É×¥«TNëÆÆv?ÊëSó㊅ u¡>æÂ5sûÔþ l”¿]¶¡»ÃéW_¹õsX’kþýŠ8>¯'ð1IEND®B`‚ pix[125]: xres = 0, yres = 0 ‰PNG  IHDRËÀ^ pHYsb&2 tEXtComment8¡(5˜WIDAT™cøÏð‡áƒ Æ <  xT°0øÁÇÀX†áCHÝ ®axÄþÈ04þacÆ? X0PüPˆ€fìb}ÿjö *ÈoÓAIEND®B`‚ pix[126]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment8¡(5˜OIDAT™cøÀðƒáCà †ƒ$šp a °øÃ €ê@ê?Õ(€¨eþÁ€‚Ù‘ù8€vHí²›ñƒùˆú'¾[zBoIEND®B`‚ pix[127]: xres = 0, yres = 0 ‰PNG  IHDRï^¸Å pHYsb&2 tEXtComment8¡(5˜NIDAT™cøÁðáƒó1``c8 ÄL ?1å ä>(Ô1€ô€ð‡;†@¹ƒ€j€˜á ”û4hGØ®:|Æ&°Ùg¹IEND®B`‚ pix[128]: xres = 0, yres = 0 ‰PNG  IHDR#¸xLj pHYsb&2 tEXtComment8¡(5˜\IDAT™mͱ €0Dá'l.p\ÌÂàbÉ&!eŠ¿ð ‚_{Û [d­±I â)«#µÏ)Qró¤(b¯@6O4Çe0þ:}T}¡Ï§Ñ[êNvÄY1Þ ‹âIEND®B`‚ pix[129]: xres = 0, yres = 0 ‰PNG  IHDR Ñ.Þ pHYsb&2 tEXtComment8¡(5˜PIDAT™cøÃøáÃ6† L `¸Š @|60~T÷€Á¨¶ˆíÀ|°Ü&†Æ Œh¨ˆ¨ €fB0È,ˆ9?þc±燃KIEND®B`‚ pix[130]: xres = 0, yres = 0 ‰PNG  IHDRiÆ pHYsb&2 tEXtComment8¡(5˜MIDAT™=̱ €@ CÑ]AIF¹Ñ‰‚µ"±ÈòJBOnlãâ cc§Š©†ÎaO'ºÿ¦s¹rNXÂZ™üÕŠ˜æío š"@e•úsIEND®B`‚ pix[131]: xres = 0, yres = 0 ‰PNG  IHDRÏ5Ðc pHYsb&2 tEXtComment8¡(5˜_IDAT™UÍ¡ €0…áŸ"tFèh•• X‹¤°BÙàÉCÁ5(Ä—'îO…!´d.%ª"Õâ·nk]æð{ë÷Ä}ˆGâ´ÄîýØ•H( ¦ŸÈÔ+Ù‰ÖÎzŸÄ/ô€£IEND®B`‚ pix[132]: xres = 0, yres = 0 ‰PNG  IHDR ÷»] pHYsb&2 tEXtComment8¡(5˜YIDAT™]Í« €@á!pXm\iX‚¸¶HNÐ ,ÁübñÙT‰‘…Äd=s¨?zÌ–ÂH1±BMÄé‰Õ[ò«q~Ú[öh(Q¯øY-¼Ó³41—*×(õIEND®B`‚ pix[133]: xres = 0, yres = 0 ‰PNG  IHDRë«hø pHYsb&2 tEXtComment8¡(5˜OIDAT™eÊÁ €0DÑ/9¸%¤””–£`c±“”°Ç=,ÁAæ³’†S™Ý˜×1\?]]à[hK6άb5{ò(ñ1ŒƒWeˆÓnÍZ(x½Ù®IEND®B`‚ pix[134]: xres = 0, yres = 0 ‰PNG  IHDR ÕÛ% pHYsb&2 tEXtComment8¡(5˜^IDAT™E˱ €0 DÑhÒÑf””ŒÂ鳈E‚²€©pP<ä;sJ%¢ÄdqlêX>þÉU¼ ‰ì¶ÖN‘1RªÝMªŽþ¥XþZ—ÚNóÉíßFç 7´»4ßtt”RIEND®B`‚ pix[135]: xres = 0, yres = 0 ‰PNG  IHDR%ãO« pHYsb&2 tEXtComment9Ö/ZIDAT™eα À „á_KGp”Ì•*ÄÑÜÄ,_@4Ï6)>¸êîh¦#\T"¥²RóÓìæ6~Ì$T®h¥°Tõœž!ª†¥L‘qG:M÷E“Ì/®¿9€4>¡Ÿ3£IEND®B`‚ pix[136]: xres = 0, yres = 0 ‰PNG  IHDR(9ˆŒH pHYsb&2 tEXtComment9Ö/fIDAT™]Î!€0DÑOÔaë¸FWBâ9!\¤Ü ¸M—-T‘ÉKÆìfÐ](P“XIKàÊžíå>…Wß Mí[þ8Í!âì§#õF|д¢±ô0vTz[1ÚŽIˆ³p«<ÍEo—¬laIEND®B`‚ pix[137]: xres = 0, yres = 0 ‰PNG  IHDR%…Ÿ– pHYsb&2 tEXtComment9Ö/XIDAT™uα €0@# 2B:ÖÈhé)2ke$š/¢<þ”È:Ù¥¡E0&G2jOØGtÛ®8ü:>=  ¸IM·Ž¯½L&žTi懅Vn• rI^ŠÌcIEND®B`‚ pix[138]: xres = 0, yres = 0 ‰PNG  IHDR&ö|fˆ pHYsb&2 tEXtComment9Ö/gIDAT™MÎÁ ƒ@ DÑïøÀ%„Rh+7 ³-eK 7¤¬<˜ ‡žFòH#£¯Ð*‚™ƒ)ì ÔwjN g Kt[g=-qßÿ•ìK3êÓrËsÓ‰‡£×€â2¢v™Ð‘öù§.¨ä?‰>æÂr*RIEND®B`‚ pix[139]: xres = 0, yres = 0 ‰PNG  IHDR(Ò¿7K pHYsb&2 tEXtComment9Ö/mIDAT™MÎ1 ƒ@„á\HãRxÁ+¥L±…a/¦x‘Í ,·\GBŠá5óu¢ v"ù=òÕÀvëùXR îàç¡æ¾É™Ôl¶^ äî ”g ÛÿõÔ<4Ëh‘:G/ñžk“hÒ FŠALÇbÝ&IEND®B`‚ pix[140]: xres = 0, yres = 0 ‰PNG  IHDR$¥}÷0 pHYsb&2 tEXtComment9Ö/]IDAT™U̱ €0@Ñ/l\ £d±³p-ÅE".»Gb¢ Z¼ö‘%2pøÁ²D˪r›n†¶Jü)t/Ãü±EáÂî…sr°äX¹G^Ék1%J½^%5<¾Å(ÜIEND®B`‚ pix[141]: xres = 0, yres = 0 ‰PNG  IHDR'ÈÞ> pHYsb&2 tEXtComment9Ö/hIDAT™]Ρ €0Ð#ê°u¬Áh8B*X‚a XF@” *OÊ‘‚A¼ÜWwWE° ï;l±Š‹V ÊTíµËôÃl¤“5,Þàê>i‘>¡Í´•f" âDQB­?eÏÜA4ñã¨oIEND®B`‚ pix[142]: xres = 0, yres = 0 ‰PNG  IHDR'#é…ž pHYsb&2 tEXtComment9Ö/^IDAT™Uα € Ð3þ„†ÄÅÑ,L(\ 6a„_R|Á Ja.¯½;´ÍPÂ¥b™bóÖ6 ]+© SJ‚a¯à®}R*á•vô“¸mŒò‹²T=œpÕAña¾Q›„JU¤š‡rYz>t²­³¤Ú§r¬|€Í9QW‹Þ†Ø‰G àQeš‰yg€ÈŽ};çÑÜØâKb½4„g ,è]9¬Ø9Þ±nø0°¹‡Mx‚Ä¡èè„­Ù ìZñ™çI7ŠÏ3&NævèFœLÊcCTÛZïÜó±˜, cO÷·e¬ ¿[Mys‰¾ÚRåñ ®÷C¾œÏ~I³)þù•èWAŸNjí6ÙbdIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.5.png0000444000175000017500000000213711030265012017715 0ustar dandan‰PNG  IHDRNP’* pHYsb&2 tEXtComment17EˆûIDATX…í–[oTG ÇÿÏœ½ä$!$BBé…>õ…ª_¡Ÿ¹•úTBUE‘ a¹„ÝdogÏŒí>’Š=‹¶*­º~ÍüÆöüÇ6>§¹ÏJ›à&¸ n‚›à&¸ n‚û<æÇÝøa4¢Oîúw[‚“d°**0Ì@E$3Ë 1ÂÑÇãb0à÷i5 $(¨r0!.Å =1D˜QÆXáÛ=˜_ÌR6&Ž-9?³¹°Ý:)ºõ4«Fê<5k_ÝÝÌD?·_-¬ÎŽújC8µ@˜ ‹áþVt)1Héò7kkß®@ò¦Æ™k¸/ €Z­îÀ^•„•»½Åe§aÐn¼ W§G87Œs’27›ÝzÆ*œØ ¦ÖczVï<;8Þ¸yida ÈyÕ@DÈÉù³ŒšÛÚ×w.ÃdÜO¦0‚¦™ª¶;â=¡#9Üz:·ycNPN+ ÖL¢Š~ÁÊ ïôŽ[½/¯×áÆÆ©#€ÄNVT=A€ØÛIÓéÍ£‹Ó³ž‰aÊ.v²å[ 0@cãÌ ‘ê7²Ô“%þОMj‹ëƒk›wꘕó†ÚvŠÁË˦å]—K¨®]¬pÐäû_¯Ì_ºH˜Ù˜S€*“ì5qÊp2gÔñf0ï²S߯Æg0ú5Bê„ã¹zmDu/ àQrzÔ¹Ø'Ÿ¢Ì»`ÿ¹av‚›à&¸ÿîO<)ìL³ò¿IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.7.png0000444000175000017500000000107111030265576017732 0ustar dandan‰PNG  IHDRNMúO€PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment85zÄí·IDATH‰í”]rƒ ǽ€@¥}W4ïQàËý¯RÔª!™>v¦2“ ?÷ã¿à~wàäNîshÌòËÒÓØ$g}¼Òu¨ë[ŠCŒËÀaËdßU,ɜױà,å+Ñ“¡™ó'Oå1DLEfŽõ)nˆ^Z â„Kqe¸¼ô‘ ißsdOX³§6\ô;Nº§³p Î=Gy´¶å.tÙ’ïì @Òay%çÒW®OçñÈz§yŸ„ª ¶w¾ÖÃkƺ:xœ8U°ÿ̹6Ôà“–V—%û*!Öj¢¯¢GŽ. Ú˜D|ïúšƒ !Áj³s¼éSß~K„tØ6êÊ)i åòñÃA‚3üÏÃ?$7„Ž×” Žýk®ŒÉ5~*bS„™9,>ggÌÎ%ãCˆú>lŽ=ë²p®ÉL¹§ôÃ"ƇMnïÛêv0×<òÙïÕ}Û^£T݆,=yéC£œÜš‡B(/#¶’¡ÔO*Þ£j¢uUwªÉ~ö`%ªyaéš3±[Û=©»uxL×Fóìñ“;¹“;œoJrÓÍCIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.33.png0000444000175000017500000000077711030300454020006 0ustar dandan‰PNG  IHDRXJÍ¥Ž—PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment4786Í}IDATH‰íÔÑ‘ƒ Ї6Ò€ X XxV ößÊÂ3Ù2ùÛÙ‘?<÷‚ë.|á ÿMì?Ánþ=ÍeŒ†T+çÑ™¹ˆÇ&¾_x£µÕ­ˆ}Ǧ𰜠U·†mTS [`1ô÷—föaÿ%¨KØ… &öc*´k¡_óØ|ðs-EÊá¥c†Ê&‘÷Ø5a[Ê$×<ö£!n•qJ+ú^º›¦­E¤)İqÏ­ÅV¦Ÿ^‚ÃTó ¶¼„—N®î÷Âù¤‘SlÅô‚ÃÁLy쇰¬ãO\Íyìx¿zÇ+Ü~ ²€Z+`JãiäWì[ÁÂq‹ûY¿ÃۇɢZ`ß/Áƒh”ê Rj¢Èû~iAƒˆjƒÛ:u Óšyá ÷ïΰ6ôdû~y<ûÇ@Š|èwŽ=E®÷¯Žø¾|¸dýŽø›–×Ç¡ßiŒ 7æ=vtqz§Ìñ6Ï]æé-þŸŽ _ø?á®ZìþÓFyIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.35.png0000444000175000017500000000113611030301015017770 0ustar dandan‰PNG  IHDR]W”ÄT–PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment89srTÆÜIDATX…í•Mrƒ0 …å$ÀI»'@öü„} fßûþW©$²µQÈ¢3),<ùlKOÏüKÏ'lüÆoüÆÿ ~x‘—Ìx—‚‚\\ðÈ»Tv†ÓZ~Lpó>ÙI<òÔà] ו|;ßVò%ìq¼Áá—øæíjþë±’G}Zâ[úaLTÖY½€¤I®ÖÇX¥g~(A]]Êrbí VéPzÚõ†³Dµ2ïSÜ”³Eç¦ONADs¾B~G›Ž@.ª 8`Æg¸GÝAn¼¯Ciú™N(óG«÷š¸ƒp©"“º*ðöï* Úá"¸¾R?r¹0”ž4eðê_8Õ=Éc<«*ðø_‹¼e9‰¿ˆñLü §ê9ï¦x,f1²S½)%ÝP0ÿîX$Ì(ùŠKkYžV ò–ïW…ÃPRÂc ’>lJß'X„µ=t“T/6}~æL{ÜZ£•Dÿ #tž±%MŸiW,hsÿ»æj7Mé luÒ÷¥ å‘xú<¹³§5ï@…n™§‡ k‘§Ë܆¯y¼Ì±Ù"_C´O/ð¦ÖpŒ5è8¹jjX«÷¯³&Š/ñ.úv™_|6~ãÿ5ÿ à2óŽCÑJIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.53.png0000444000175000017500000000120211030304231017765 0ustar dandan‰PNG  IHDRiKÈ´4PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment497Ѧ7ÿIDATH‰íÕK’¤ ़ZuEgß‚`$ÙOŒÔý¯ÒI¶õÀŽ˜ÍÌDȆzðIÖOjÁýÆ/8Õ©NuªÿS¹8yüVyëÒ¬•‰Ë­šÑ©UMii§TÏKGh ãÊj·jEoºzˆŠ‡˜‹ÊQihµ¬\¸@TPV‹dE+iZÛp}z]Ó˜Jж‚×ÉëycßõÆ iË®2ª.Žñ•G‰cSLc¨>² “‹U\ïåÇ:«Š·ᶯn%µ*%ƒ¢®Qm¬ÝPRV™–ÕÇ‹ZÄ‚ò¦·YUOjÜGø¨ô„Yq ×5^\AY5Óúð«æ !eàÛ¢Ò½ó¼×ý·ä‚ô—’ûà÷ÊS»ÇVJSèÀTá%µÐésæz‰º×ÊMbx¯|’²t'ÙV(£eÎnœé½Ze­TG-U‡Ž£æáÝœ¾W¾£ûAfåêÎj•—ÂÀkÅ{‰t¯{tKîç0öi GO4ÓvÙØó! ¸•ËvÕª¸m ÑJ§œFÞ‚>¿QÃîMjY+ÅCoÔW…[rÛï;PÜíáP—ºÏ•V÷#E^fî“ùŽ];ã)øç'«èƒ‚+êôÄ~ðEÕ’ËÒµÈù]*%e1¡,j¯FåÖóºqGŠŽ9ýç AÜ}ø¸èŸù‡=Õ©NõWÔ'„½»U¶é¬IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.23.png0000444000175000017500000000071011030272140017770 0ustar dandan‰PNG  IHDR_,ñÔy©PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment614C…©ëEIDATH‰íÔKr„ àÖ(ä  ¢^@Ú}ªï•ü->¦RB’m2,,FøèÆ¡õwíƒ^à€À˺²g>çAðf£­í_ø£s0_ -•{ä¾ÌFhÌ䞊1Fh ΀àjµô˜Î=ðM1FPÅyKMi€a7°C*2gÀ°fIëØÕY0fà øÖT¹C÷DˆØ-'˜ë!—¥Ðr•'àVó7À²Ûò¯¬¤kIœyd<ºHÒ ‘ÓÁ±Œ>@C[ÓK¼Ë„  *sãÊaLvIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.30.png0000444000175000017500000000124211030300013017756 0ustar dandan‰PNG  IHDRpN ¾¥PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment429RûIDATX…í–]º› †G»Ð.@ÀÞ0 ˆà Äýo¥ žjÔäéÓ‹s!f$óf~˜BÓ?.ºÁ¼Áü/`ð«´îùáÐÛaºY ÖîÉW0˜ê‘'8Ïb0œ+¿U;‹¬­‰¨h£%Ç!ÉáØ” 4Œô¡ ¿ñì)¡¡J ¢WVP=\‚ð0Ž•-Ô¤†©g9‚s°É`_@{Œ`E÷‹_W`èY Ç3ƒ¬ŒNjj/A3ƒº‚¶#øç¨Žß<óÇè„ Œis¼ˆ.§¥§ÃØs™À‹ ¹ó te×ôC1-Ï,/ÀQ(ÇÇŠXhú°¯ºq‘§::<ƒÏTE'`ÐõàæX‚Uç½É‰ïúʢ횴„BßMÙ÷X§`0ʯ`489ÝNcS"Eãè…ò~vëÎÖFÉGs:® Ke‡œ8‚”ñh‚ã²sæ ÔÄ¥ÀÕçõˆÆ¥´’mûj΋·‹œŠÁ©lC?§3£E´=\Cÿq.¯R¼[þ7·•·87œ—1Êøò5ÝÐS0-”–Ÿæ*Ÿü:Û¾*ñ twAXE³mÇcðe/Nº·SÎmÏkæÐ)Ýp<QðûÝÃäìÀ`Øÿg`ÏqT[O@öbþKµÛ™èb0™æ:êêrUÞ+7š2"hl0ŽÙ+‡Ê æ4õh³ðîåh)T꽞;¶såŽÙ¬ÊÁGMyïø¶0ïÃÊLuFO|k”c›™Uù°^ Õað&G—…wôÄ]A/|³zƒD¼:¡¬.xQ~€]š V‰¾²3ƒCpF8˜E¹ÐÕG´3 _eSíNÄfÃEBÿ`hŽ~‘F¼r s'~ÿxeîÎ’³rþâ2!@+/LÍ¡ÑióÍí8νԾ£=ý«¦å”uüóïùœq$ô7àSIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.18.png0000444000175000017500000001150211030270232017775 0ustar dandan‰PNG  IHDRW9ÌT  pHYsb&2 tEXtComment53& ÕÞIDAThíZé“\ÕuÿÝí½×ïõ6û>šöa$!!„@¶›²cCaWªòÉ_í¤ü¤*•|I9vUR±qª\6‹$ c m€4h„…Á£Y{zº_÷{÷Þ“OjÙÌŒ$W8ºz9ïö9¿{¶{îaD„ÿ÷ÄÿÒüŸ OQ>E!¡OQ>E!¡OQ>E!¡¿>ˆèª×8}(\ bWˆkíqÆØÕ&ÏÕZÿI.úÉùâÑGK9Ÿ9á\¨¶ïûꢿxJ¤ùhƒ¢Ë„ËB/BôùØ7‹¦E¢PS¾¦¿µö99çïáüh[ø°uðA _­0y¥¶€m5¶?Ëÿ¿¾Çþ’(Ðû„¸ü†³÷IÅÀ#XK`|þ~~À¶sa0ÂüüE€µ–˜ –¬‰KŒqQž™Ý·w÷SO?ýÖèÛŸ¿÷ ßøæƒA. @ÛÇå8ËkëêêÀ$¢q Å9w¥"p n­¶š¬©ò”{io®‘…¡Àc 1ëé8«Vc­õÁƒÇ''â(š™ ãê›o ôöö¶µ4ï?xà±=»ŸÙÿìØÔøÆ­›Ï‹ãxzzº¡©þË^Ž49ŽBqbâüùóa©âxnÎ+ß›«ÆA.›ËÕyŽ'9` N D˜—t‡Å‚mA E1€(Ò<“¯cB‚›é©©=»wïÙ½ŒIÇQ‚!ªÆº¢”#w<¯–}ßË××]~ö2¼HŽ yúå“»}lÿ3ûßyë (/ˆa{—¯lno[¹rõ Ck‡V67Õƒ.`‰Ø• F1H)ÁZ!¤ëlÛ¶íðó‡ xÏgF“1FG‘Ž"ÁÁ¸ðÒµ6Ȥ«q”QéšÄD˜Ÿúš™˜øåž==öØÅw/zÊëîéiïê‰Èœ85üô3û+Õhã†Mß|àŸÿÜÝí-Ͱ€ó'u䟭b¯ €äŒ­ €ç9a¯]·.Èçª:.ÍA—óŸRÊóã¹Böýtª¡¡a`pM®>Æ'g¦òu8–ˆŒƒŸ8ñòëg·¤»çK÷|©½¥½³»»«gi¨£c¯œúÙÏýåî}‡Ÿ?䲔ͷ¶wU7Ñ"5¿"Ê¥È÷<ÉüÅb1—ËYF:,à)O*'ª†ˆtL¶ÕÊÍ·lZ¾|y*•Z{ãzk-<ÏûÀÅ-ðÄî½#¿;wÛæ­»¾þ`.—ã\zuõ±ŽZ:»…ëYO?õÌç¼ýÆ[T±×ù-™®™Õ'<ÏIÞ±E*å®^³2—Ï„åb}SKWWÇð™‘\]®©©eõÊwî¼cÝ CíM M<¬„\!帕rèû>c•J,¥TJÍ ¯¼þü '††Æ'§2™œç» «µN§Ó÷Þ{ï[£žÜ³¯¹¹íüù ?yänXwÃÍÛ7Xc­µœsÇq8Œ1‰Û^+¸¸T6hmãJ “<ßÍg²…`zㆵ=ü·žçÕ××§R©ÖÖÖ”â™TZ[Í@ÚhXb€Žb!„ÖZk­”ò<1fŒ9zìÄ¡_b‚:|tj²ðßýÁ¨2!7UÖñÍ›oa®;93maNžzåÙoÞ¾]¦Ä5>‰¸@¨U°`ÉÅyÚOyJötunX¿.•JÅql­M{ŠŒŒ5®W¾Àó<²—." 3³3§_;3;[Ø«§Î¼úÊkóµûW ¬!Æ×AãS“}ý½ÄŒ‰lÊV°–>PÈ…±à^“±†@¤àB0‚)…űñ Þ-L»ŽÌ©útº1ŸmÌg=ÇI§R<åzœq]©VKeĆ˜!FàBˆ¢È’J5µ´Ý¼e bÛ[Ú´¥ÙbÉõ¼Â\`NÊŽÎ4¬…%–” Œs>_ó…¢°`[\XËq&‰L–‹…«ã´ï:’ýaô­´ÌÌÌç ³³³Qh²ÙlOww[K«d$€86‘®OZ#î("f4eÒ™7Ü´ñ¦“ÃÃg]©6m¹¹»§/dœ$Ÿ‹ŠÙLnøÌYî*.yµ8ç9ASkS­pœ¯yrœ¿V(X2V[k•9®ò}O øÞÛ¿ãßþåŸGGÿðûs¯[kÇ™/(宸å–[vܾchhˆ )\Œ1¥ªåPBJâ@ccÓ÷¾÷O_þòWKÅbksýuËÀP1U©T ðÃG[]µV€Óí;nß²u+® s³HjÄ¥4:2VsWÉ|.Sš›ž¼øç,θJõöö®\¹òô+ÃÃÃg޼xøÔ˯;òÒ¶mÛº;º:ºº:»—4´·K.´Ö®¯t¬cM|vnnÙŠÕ¦泩jLZW ·®—"Dgßzý·Ï>£•¬Û¸ök÷ßß׿4) k¶ðITM ˆt¬¤˜®1±Õ€NkkëÌäïß~k⺾o=ü­ÁÁÁ%K–tvuœyñБáSçNº86¾ï—Oj­ëëï¿ÿþ[oßš m,ƒR‚ˆ‘’s÷çÿáÛ¿fÅJ¬¾”°Œ1•JÅ÷}ÎyR;\[¬1cœ«KKH.…óÀ»fgg''Çoݺ-ðÓÙLàÒqÙÜÒ•Ë·¸^†qufäõ°ÇGýÙÏÖÕÓÑÛÛ Á@WË€}éÈÁG~ò_§GÎFdKa !›š[ÇÿpQ¬ülï²îή¾žN¦§gëê³–,ç¼V.Â.Ä÷¿ÿý=ÀO19ÏZc´‰­µMÍ̓CC¹|n`h°U”\–æªB*7%Ke}òåW÷=¹ol|<Ö¦RÅäôÅõ7nloïÒš ™ÂÑÆ*W Áª‘Žill¼nðúnZ·n}]Cc)ŠfÇÞ½páÂôÔ´ï½=KR¾ @ÍB$Û¤Ùµ ,kúkMDŒç¼®®ÎqÝ––BÕJE)OpGH€u‚;3…Pkæz¾à1ã®’¾±BI¥T $u\­†³«W4·tìøÜN&DKGg}C‹«Ü_=ýô‘C‡Ÿxüñác'}ôÑòììôÔäwlÏå³DEQb ‰;\{æu5¤”\0k9wî‹"êìì‘‚AxÒliËttöùAv®hcYÎ×­Ë×µ(/Άœ‹t6o)Êçóol&&&‹³ÓÓÓétzçöíË–.%kΙ{÷¿øÅÄøxKKÓ¦MÇ Ã0A_k À³ Ð°ð¸`mRðYk•ã¸pþüÈÈÈ#<†¡ï{]]]»víjhhÒ&` 4Áh€1­­¶ÖØÕ«ÚÛ»TcU-˜2N©8帜1‘ìg6IBr115ÝÜØt×Î;_>züÙß<†¥_?õä’%}ý½RÊ+9_/¼¿ ø¥°LV1ÌÍÍí?pà§?ýéÞ½{¡tÆ[²dÉÀàu›7oÒ1Æõ¸%T*ˆb„Qãù¾±<ŽCé:1Æ*Qd Ëf²a …L6k[‰â “ ‚¬e€šëë¬X¶´.Ÿ­„%ÀºŽûÎ;ïœ1uqß“»øÃÿôSÂãœßy×ÂJè(†lÚŒ¥¶¶6sss~*U*…o¾ùfÇétš1¦µNZ -|¦äœK)¥”BˆÄ(êëëµÖQE‘v]wÍš5Ë–-ˤ3‰9XÄœ!M¬ÍäÔ»®ïhSlWOÇÚµ×;B0n訩˜}áÐÁ††\*•Š"](&&&ÒžïY©„Zk­#2q¹<€€R)ÐÐP7ßþZ/%´ðèºÔ}Ö±”²U›[[´µºRuòÚ«‚Yåðº–öÏì¸}p`5‡ e­ã¦º\–&' DÈfS6lh¬o v¤TRˆ£¨X˜ƒRLkZ¾|iOOçyIh$¢Úåð‚”Z0rìrÓ8ŽccŒµ¶···³³C*±iÓ¦|pûöíRÊjTõÏUªR Sš›=qòøÑ#‡Ëå¢äbãÆ÷}õkÙt¦\)10 a­aÀÐົ[xà]»v577ÇQT*Î)©@G•Baz|b @‘µèìììïïWJ½çBøšwYj”øE.—عsg*•Bxžg<Ù ¸~X-¿vzø…çž›ñ•ËW}áî{nݲˆqÀÄ:Ž£¾Þþ5kúzè¡ï|ç;½=½•JÅqœL&caŒŒ1SSS³³³ŽÃø¾èïïëîîÆûf®y—…@DÄOR4g¼­µíÞ{ïðæ›oîÝ»wtttÕªUA44Ö§Ó>™ÊË/¿òøc{öíÝǹ\Þ¿bûö;v~öN©­­ŸJWªe)”ïùÕªéî\²iÓ¦öövÇq”Ô ‚ñ¤4ž-Ž;22r&މs¬¿qíöíÛ›ššÍæ‘k~šÒZkk]Çe\”òŸò ™oÚèú©ýèGí~âßÿãMMMK—öõõt3¿{þüñc§&Ʀn¹iswWÏ–M[›lK!Æ —® p?%Ö¬«•ñɋǎ›˜˜X= T. !Fß=~üøîÇŸ8÷úï|ßih¨»uÛ¶›n ‚ºÿó¹V((©Èèä¢PGR~¹8—Ïæ·mÞªµ^µ|Ù“Oýzüݱ'N<à9KH§x__kcÛí;v<üÍo 宽~ œsa£*— Ë¥²ïgzzúšZš^:vtjbòرãõõ Kº{\?xðà™‘‘ÑÑÑÖööåË—54ÔmÙ²¥³½“c®pœcÁ3nÆÄ\XŽbm g®r YÅÕ8ª†•°Z‰«‘6QKK‹5°Æ0.é*×QBr)Yb`É8@#NÌ2Ž™ÂÌøø¸Ö:ŸÏçr¹¨Zšž>xà•0 ÒiÇqÒ™`hh¨³½ËbL¼§ï¸Ðjz“~@±Ö&›l“o´ÖIîH¤qÝT–ðH)ù>l~‰qL¥R±Öº®+…,‡åB¡Àó<ÏZAµZ-‹ žë[CµûˆE£°È¾£µ6ù§ùX%©©.‡(^C¡Ö/ÿè5‚‹”$ $¥“Ng3é K–3NÄ„¨X‹dHhq*̧Š`Œ‰ã€"A¡6ò– “ð$±šÈÎJÈZûa7hqCApaÉ&ý )e&‰uÌ9Ÿ››ãœGQDDŽãpÆíÕ˜mZx¦œ§j¢RR´Í×j¾¶5§Ÿ½>Â\Ç!"c .—‹äÁE&“áŒ(‡e)$]¥ñ®EÌ/0!Dí à’ š™æ÷ʼnþh)5å?â6‘ƒ[XÆX­HÕF×~¥ËŒ1K6Š"Gº Uáý´àœÏ/×?ÐÕçÝ”°š]$q¡fA¶¼µ–1ˆ¤ú$k p€1:¹’ÒáLz®´‹:J¿‡ÕkšgÛï{µ¬‘°Õ"hMós­| 20"RJqÆc'ªšƒIt¼ tE™òãÑŠÙZ´c/ø_•Q¿ÿ%AøÜ!Z'“IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.25.png0000444000175000017500000001012511030272270017777 0ustar dandan‰PNG  IHDRi>§k¢" pHYsb&2 tEXtComment590ŽwY£ðIDATxœíZiwÅš~«ª«[-Y-Û²-9^ãx‰-H$¹„ 1ˆùóKøÊ¿˜9󆜹 “.!¹œ`g!ÄNì86ñ¾Ê’lk뽫j>Öñ$áC18~ŽO«ºªºë駪ޥž OU=]ß¿-à§nñ»¦ã© TÓhŸ>¨FwûØÅ>wÕcŸ»ê±Ï]õØç®zÔ’» ¤µÈ ‚@rÎ}ߤç<Ï“²„sü)„ð<¯Ò‰ì³RM–Ènc²O!„¼BpÎe}YþH“Z=µmü3£RdŸ=jËpÎ1Æ{"„8çA¨ª*ë !ohÛ¶®ë°;xJ)xžªª>þ2AÈgÉþ…Š¢ì}tMPwüÉ¥{x‘ß\¾7ÆŠçy!9`)%Œ±ïû¡PHÖaŒIÒ=Ï#„ø¾/™*•Jªªjšæû>!Äó<Œ1!!´—Û¶)¥„Ó4UUUU5Ù¡„”$Ƹ¶ôUe? •×ò}c̳m›1æ8c !¤išb{{[Š(‘Hhš&¹“´–ËåUU‹Å¢¦i”RÇqêëëe5Œ±¼Ó4)¥ªª BH:ÆëºÎ3 CQÛ¶£Ñ¨œªR}„)ƽœ>#jÖ‘ïû”R¹âø¾¿¾¾>??oY–ï3ÎyEPétš1ÖÑÑñÎ;ï „|ßw]W×uÏóÖÖÖ²Ùìââb¡P\èºÞÞÞÞÙÙ©iZ}}=cLêQª¬T*---¥Óé ß÷ëêê"‘H"‘H$„H$"×SJ)¥T ¿V ”D͸«¬qžçmll\¾|ùêÕ«ù|!Â9·, !„*‹­­­üãK¥R,£”Ú¶N§ïß¿óæÍÍÍÍÙÙÙ ÇB†ÑÝÝ}ôèÑ¡¡!UU !”REQLÓœœœ¼uëÖ7,Ë2Mb±Xggç±cÇR©Ô4M“»ç\®§¯¤Ï‚ê¸{Â’‡°à\¦Uš_˜½rõòÅ‹}qãÊô‘û¥´X,Jº·¶¶îܹóùçŸ_»vÍuÝŽŽŽÎÎN!D&“Y[[›™™¹wïÞÉ“')¥}}}†aX–•ÍfÇÇÇ/]º4::º±±Ñßßo†ã8ËËËÓÓÓ333¯¿þz<O&“º®Ë…RnAlVψªu‡øîÆU¨”L¡PÈd2®ËB!űJ©çº€A˜×4ÚØXOBH˜fivvöÚµkß|óÍúúz,{ñÅÏ¿9ÜšHÎ/.\ýó}6::ºžÞð}ÿÝ÷þñØ‘LËš}øpôúÍÑÑ<À¾ú꫌±‰‰‰‹/J½K ȵR*îïÎ~ì?FŠˆR꺮ëºù|> ¥cÍš¦3ßÕ#‘b~»­³-•J $M›éµ²eýðÃ÷.\ØÚÚ"ŠzöÜùÿ壶Ž‚ÖÃzÝâêÚ—¹´²¶ñÍ•¿õ õõ&nofrB ã/½ðƹ×OŸ>íºncClöáÌâââ½{÷.\¸ iZ²µ-‹úW(žÏþî{Å#ôqP!„1Æ|߇éTêüùá7^;¬…äŒÞÙÙQ4’H$ötQJ‹åB¡Pøñáôöö¶ø M©Tª­££½½Ý²,M×=/èéé EÂv¹<¿´<99õò˧Êåò7Wÿv燱ÂövHttt´¶4'“I`Œõ÷÷_¿q«T*¥R©¾þêÚB€@@CZmh€šÛ(aιmÛŠ¢ôô<{ölÏÁnBh(¤z¾ÓÑÝÀâñ8U([æÖööôÌŒã:€±^ééë …B*U! ‘H$ŸÏwv¶Çb1Û4ƒ Z²,k||¼°³œóÎÎΆ†]סÎÎξ¾¾x<žÏçWVVPÒÚvÀˆÆLÇžŸžžþáöíÀõg¦þÛ¿þûÇÜÞÖÙÜÜ|òäÉ?üðâÅ‹3§‹Ù+__žº?ñÊ+¯˜¦9>~/ŸÏƒ‚xàÓP¨££­»»»P(H„ÂaÛ1E¡”Ú–¥‡ÃÖÎN¹\V…sNQ¥\.‡B!×õ5ÚÓTR Ò~B-crÚ677¿öÚk'NœÐ45‰$[Íòììü·ß~‹1þþÆ­­\Î4Í|¾È Qµ½½ý7Þéêøøøôôtzm=½¾ñå—_bŒ-Ë&@¯ ·èxî¹ç¢Ñh8–¢s]WzûŒ1UUAƘiš…Bd\KQ!„ªRø–¼ÚÙŠ‚òF ÃÐCºÔcÀ-ÔX5DÀÌbiêþ´Y.{–»0·hv0Vêb'_8ÞÒÔ84pxyyéþÄ}iåܽ{wqqÑ4M×òì²uúÌ+§N¿ÖëZ[u±¨mÛ”j¾ï !!DQ|Ï“Î|> …Ç1 # !$iŠ‚kk¥ÔŒ; SÊd2Š¢`Œ$„pH?p 9t8Õ‹Y%Klooc &÷¬455©*<|æÔ]×'''×ÖÖ&&&|' ªÒÓÓsäÈ‘††³l«ªÚÓÓ399éØöúúºišœs¹ÉÊxI:–s¶­­-‘HÈ­ƒ1ɯUwŽã`Œ …B6›½zõj©TJ&§Njin’xàû &aŒÜÔÐX5 ËuA &±¨ 4Ç›ÆÆÆFGGææf}7 *:üþûï?~¼¾¾^¥!Ã0žþù{wïçžÇ·¶¶|ß/•JQÃ(‹–e­®®ÊpaGGGkkk}}}­Æøj9g X,ÎÌÌ|öÙg«««ýš¦575†@a~`š&óÎXÔ0:ÚÛ ! (&¡”`ŸùÛ;¹Õ•õ‘‘‘‘‘‘¹‡ €àÈ‘#çÏŸ>v옮ëˆïûGýꫯr››uuáÍÍM™¸€……i †ÃáÞÞÞ¦¦¦x¼A¬VCÝEÍ|2žu]7NOLL,,¬|÷Ýw—/_^YY \Ïw\Ç´ÖVVŠÅ"ÁäÐÁÞÉ6Àü@Ápä2™“÷¯^½:22277É–3gÎ 9rDÓ´ ˆæ–xÿK/½KßvqqÑuÝÌææüüü•+Wc¡PhhhèØ±c±X lÛÆ ¦aãÚéÎó˜¾qc´T.hm?{öµD¢¹.Ñ4Í÷ÝL&“Ím®¬­Ü½{÷Ë/þçÛo¿CÎ Ÿ}{øÍ?œz¥ÿP4œœ#MMϧRo¾ùæÛ·³Ùìõë×ÇîM´wu§Óé©©©¯¿þÚqúè£öööd¢cL©"„ T©ífQ3ÝÉ\W]]ÝÁƒ‡N:eÛöüü|·oߎD"†aD"‘Þ¾¾T*uîܹ“'O†ÃaÙcœÍf'''Ë%ëÈóÇŽ?ÙÖÖ600pèÐ¡æææJ5 É Î9Ò”îήááᆆ†‘‘‘B¡ðã?BZZZºººŽ=zâĉT*Çå[B0ÆÒã&¤fæq rÛ•T¼4µ8ç¹\nnnnyy¹T*-,Ì@8N&“]]]‘H„1&§¹B&zcÔõH<O$Ò¸‘y†½N«ïûÒ–´,+—ËMMMMMMe2™ÆÆFÙª½½½··7Êíko:ü‰‰óªQ3îðnN¾q©TÊçó¶mooçdÂÐ0 ]ו]hš&%À9—¶PJ9‡P(‰Dd?27$³‘²$éÿÁ®9™Ëå\×5 £A1 CìZ|AÈìÚ3óqÔ’;™~—‡+¤gŽ1Öu­’$ÛÛÊu]MÓÀqœÊØ …B,Öðø#* Vž»§8¤* yè@~Øã„UäVÛ\O͸ó j¹ÞUˆ“!Ü]¥pÆØÞY#OFI.*p]cL)À!?ò y6C–Ë“2÷ZYþ+‹€ã8’DYç§¡Ö:PË9 {ä oqÎ+ Tf´ TVe+¨ôƘ¨ü”Ÿä§Èàî^$oí=´÷–<³S¡©rª¨RòëÚ+$~®„ž\þóõkbûE±î³zìsW=j6gO›4øÍ|ÎßÌ‹þ ±Ï]õØç®zìsW=jœëy~·Ÿçw;°ÿìsW=ö¹«ûÜU}îªÇ>wÕcŸ»ê±Ï]õØç®zìsW=ö¹«ûÜU}îªÇÿÒ°:pfþ°$IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.24.png0000444000175000017500000000076111030271672020010 0ustar dandan‰PNG  IHDRD;0I1•PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment587 ýAnIDATH‰í’[šƒ …£ÝÚ.À°ÐŒ„ ì+s­¨ß\^æQ^ò‡œœ@ùÏE'r"ß éw„™ƒóÀ˜=×½¬Øä´Öƒ™ZÎ ]þ2Ö5¦‡2±î©ó a%'6óDæN=ªk Ãès@"Â~!ì‰ú ’Ô•y¡>EvéŒs3*7$(Áw‘[€‘<“Ý!>ËE¬céªuÞ'~@n¯!Wø .qƒ@^7B .—θžÙB’ŒTq#«ª+;D²¡‚Õó Ú<]ànq±´¼Z^}ÁÈfꞟªÓSqlmyû¤YX'ÎÌs•òþ£º‹^-7-ÏŒ"~FÞ`ä­NEpp‹RH$ȦΊ\xAX áež;$#ä$ÆASš×–ÛiËÊݼ“ÿMî—ýÀÞP’,Úˆ±ÿpêÖ)÷#öû«‚ûá:*ÿ ¤ë—ËF–uµßoÜퟢô\™¾þ®åG{8â]Ÿž·h£_ï¦yjŸ».¡­—÷A|È÷ÎTJ<àŸÛÉŸüÉ¿Àÿª¦Jp¾MIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.13.png0000444000175000017500000000302411030267003017772 0ustar dandan‰PNG  IHDRYNn³åP pHYsb&2 tEXtComment63 $V°IDATX…í˜[o×Çÿ3go\J¤)R¢I-É¢ìú– iµ‰¤Zä3õÈ{&N;‰ãÔ®׉.®dW”LI$%J¼ìî9“ª( s)2p€Ð<ïùígæÌeIðÿTàsò99Ö¬³0€Cb4Yƒ+¡³nŠ!0j`f×ÎÔ|Ê2Æ€ìAÉgj†bhˆ°œM†† a¸ƒç†ˆLÀB„ ”NGœ¤?0xÁ­‡ÆææÒ¯‚,@Hþ¡»õønÆ!75ªD„ˆ£Á$±ÉK6&ˆ®¥+­ï-/æ¦Ó €@apÿÅ’»Çxrÿùíú|ñæd&1DÌéëc󻟟EXŒî?üäÑî[¼ºœ†V€PßÌŠ÷Í,AgãÉíÍèÚ­«Ó>PD`4Ùdˆ†' [0ÍG>z˜¿ñN)‰¶Í ˆ˜‰ºDÐZ ï &b ^^ÿæëváÚo;é„e"šižt„GÓ°ûT‘X²V"ÜÚ}úו•ß_^nF®€Èƒr¹^õg.å-+>N}4KdïVþroçÆû7/LÛ¶µÂÉö/w+jé·fû”Ö>¹AQmóîÚ¦—ÍMŒÆ²Øƒ(Ö}ú¸µ×Z«âO?Ž,•Ö´թÃËAk0{ë­×B}ÿí›ãñ !ž, ã½'|qRþ½f¦$åRÄš)+H¼7s°þ·{5+Kzx2k˜æAƒÚœÐ«vǯ]¾™·Bcy@îõ…âÎbóYt°1îÄ*ëã ÓÚ[DkS}úŪ)üºñNÎÕÚ‰¸8>âÌò¥+:4Æ~ ÇÛ¹É îȲ³ñô˜ý·“Š Åu!*ÑlÌüî]tÜ¡Éjï?'„þl®øö³O?¨|V(\¶ÐöLӿޮ’µÝÉXpÍ ;Jk·øÖÔbûd±òå^ù«Rº ö¢jÎì•ÉÐF\çíS7ŒbÀùåõBVB÷õ¿ß=ù¾LîÎÖêZÃç–± ¡wÃëSÇ‚ää„Kæz/j¶f%€Áþg|Q©–› HwjB3|2H4MËX>å$l_Œâ6¶n|ÜÇD:²$½TÇ×g% Ë Ly?¯`aÜSì%]Œ‚nVv4^Ô÷sÎTu{æ€ÞТýÌŽö5°uØŽ¢ Yb#(í_^ÉšÆê‡Ÿ§r_V«Y‘\˜+Õ[58:¬®­bfe RB^²äï¾öÍFý»ü*ËŠEzô–x2Ø›¾ødgí»ßäÂöÞê?­kï^YY¸RϜԶÖ”(êCõçž\‘ˆ-hÖÃdhë{›íé7Þ˜ö„„ NÇÝÜ”ä¢ë±°è—ܫق橕ÝÙ¿ý|Ò­Ú¥LiÚ§Su"¢æ÷ïUÏfÒCtŸ¬‹7WÚk<|š°.ÎÞ˜*Žÿç¸#*í/d«^Êí–Ñ—3!–Y® geþÖ³¯ôæ\*Ÿƒ "Ô£ÑìLÖU†Š`°EšgÇŠ9±ì¥„•ÄênDi•÷8??n#f %{G*•J‹í(ˆº®âÃ:OÍg!ÂÑÛãx¬ ›QdCƒ†¨;#EGÛµôÒRF½î`,ÙñC¤Ñö)´ƒ @DŒ¾øW-SšUÝ)¯‡èr7" (ø€‘Ó‚Fh{z?°vÊ[ë# —RFYè]#ÜÚþkžÞ~¼Ý9¬Ôà.]_‹¿†&#|þÉÝFÒ›*]]šTQŸ«6¤‰NšðÂÅ_LÎ2dâÉìƒÿkm/úöA=›ŸõÓ¾%}6Š¡ÉBhGÊvÁ bÅOæC“¡CXŠ1 "¯P³& ‘qNÿ$¼"òÀöÿø·çœ|N>'Ÿ“ÏÉçäŸ?ùÇ£xwÜä¨IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.17.png0000444000175000017500000001106611030270055020004 0ustar dandan‰PNG  IHDRT4›ýˆÌ pHYsb&2 tEXtComment74Š[4´ÒIDAThÕZùÇqþªº{fÞµ÷ÁK)Y-QÑMZ‘¶![ ßb@þÅÿ™ ˆƒ AbX€O‰!)®(Sâ!Ê¢DŠïÝ}{½}÷ÌtWå‡y»\kIŠ«¥¤ð0;;oº^ýUWWW5©*¶  xý ÕÛ÷ج’6=Øô€5€J ‚Š@50úímezgÍ÷/üկܯž- â–Dîr¿]±[m À¦ÑfJ´ø³ñ{Þüú½õoxy£ÊÛO6Ê6hÇ×b~‹M¶×¿ut[Ó#Ë̯Ƀš/÷¥sÛxgÙ*xÞêÀ«jáɾôœîäñÖ¾[¿nð°T¾ó|W–hƒÛ+Ü€`ÓšBïýe=_ráòã6Žã&÷²eùàïÛàIQ€WaðPï³yV )ÖÉW€dkݸ»ÜK…ª†D¤¸‘>σ÷H*B@že¤Ð ePñ¨øÜ0f"0“a6†@¢kcQ¨-Dª`F«Õ.&Ece%OS¬¯Y^´Êó<˲탧»9ªªªDô¥É)æ<ÜáªA‚zÃLŒV»éœ‰¢ˆÉ*TD""&«ª ¸óÜcÉ|ž³ ; EÞé8yŸÛ$1Þ‡ b£Xœýú&pW³WUæ;èÍÓ,N"|–8 ^Cn£"l-‘†B–(ËŽjÕÊš ÀUÌäµù arªADlä ŠÜ»J Ë fÆ11̶–½{1_p^X&1ó`î)¨äLñ*ˆÖLbCoÔ‹øùÅy%±Ö&IR.U­±ûà‰ÊDfs2@Ÿ§Î¨úVÇ:ƒ(B¿Ÿç¹+UY%c#Ì6Àß•ùuk/&¤sn€(S"’ÜQѺßl­®®Æql­5†k¡Ùl®4j¥TIÆÆÆÊå$„¼ÛíZ•KåÜ{ºþCë,øàEjò^ ᣙ÷êõzmdxßþG§÷ìH@ UCߌٯwËÚÁk* KØXVçWWWççg¯\¹’¦©1$"ÂŒÂÊÊJ}±ÞGš”ãZ­¦ª K"òÂó/½öÚ÷¦§w€mbÎo 1f6¥xþÊ¿øÅ/–––<ýÔë?N¦vïä(²@t{ëÿWƒ_÷yÞûÕ•æÏ¯†ÌW«•¹¹¹£GÌÎÎöz½/®\¾xñ¢µ,"Y–1ÃÓëw;™/Ø~æ­%cL·ëwîœã¿L·b­&háÏ¡Þ{k¢‚±Æ;{íÚñ£Gÿø‡ßõûý(Šz¯uÙÜî³ám…>÷ÿ¥›Íæâââµk×C–ŽŽ|~ùÓ£ÇÞ®×ë### ÍV#rQšJ •ÉDƦ¤ßkÊ쉵ªDĪº™viž'qÒ^í$Èùôû§ÿøûwæfÁÚMû¤ ôû9[rÖm‡ûûšóøåååK—.ÍÖç«q©Ÿ¶çJ ¬I™z£#I·=Ôêô3QF¢0ÍÌ Da}G¡Žafñ¾×•ýûžT1c0ðø*"R©Ôä=ä&°à“³Ÿ¿õ_¿ï…@‚Õ´k*¥`Œ‚Mœ¨lÇÙÝüºˆˆ÷¾ßïw»Ý‚šC&F†Ÿ¨<–‡ÖåË£ýnweµÕh¶M\Jú*l]RŠ“Ä8 ÃvojbÂZ¾yóf»µúíŸxüÀDÌÅBÁŠADd ¾¯µÊPÖgO~pöìÇy€À²AR­¹j)2Ûö¿‚yU5ƨª÷ž™‡F†¯]½Ù™Iìä·`¼+™z½>Ú˽òšu6¥@&N’ÚȰ‹#ï}Þí?´gO–õOž<ùé'^zùŧŸzÊ"ÃDƒ@ €¢ˆ+˜¤\s7nÖó›ßœ>{V”Æ“/Õ’rY ™Ïc[64púßøbÚc˜¹T*MNN u»Ñњɬv²~'ëML|ïõì˜~hhx2`m©Z!BÚí•\T+—æææTrŸ÷w옊cç}Æ U(AEÖÇÚ0!K¤mêO'xwna>‡DB\ªÅåJ¦yžûÄ‚è/¶Q<Öf»1†ˆâ8Ž¢ˆ›Úµ{ee)²rköêrku~©ÞËzOíÝ32>6½{ÇððT.Òϳ(Ž j ¹$¤Ù­W–ç4¤µJlŒ‹T  ŒT™ „€ÔŸûðÜþû\¼xQÁ)Äk(U«£“¥¡ªÃTìwt[»º¯0šb3SDxÖZfXƒ8vI¥œ…¬Ý鬶𫭦q<:1Z®V! €RFˆ#0‡VcáÌéSŸ_ú”X&'Ç`é/B bUU‚ÀðÜëÿýÎ;'Nœ‘é;@Q<<6^ŸHÊq‡øí&uîÊ|س~£ª>Ï­sCÕ*“ U«Õj5I’åååN§3:_Y\8ùþ{Ìüƒýð‰ŠX.xñ@%YÚ·lô:-@B§ùî‰ãŸ~þÙèŽÉC¯~çû?úá¡Ã‡ÇÆÆ¼ ‹Ôç©/TD¡!ø¿zÞžCP‚ˆá5äyÈsCd½n“5[—/_š™™™›¯ONM~åÕ‰©©ÆjKÁÀ§ƒr„XhÚhœ9ýáÉ™­¬õÜá¾ÿã8x 6\ëvúYš²q0qÄÎÁ:0“-–!„p÷Ž~à0ØZ‘°a—xPæC–å Vè•ë׎9ò«·~Ýîô&¦víÚ³GÉôz©†ÃY‡ P$åÒÕË—ûÖ¯.^ú$®–^úîáÿöPu´¶¸²²¸¸({”\)†uÄ Ä.2lÈËý_ ¼òPC06€ `E&ŠzáÒ…#ÇŽž9wyhhäÑÇsQR*WF‰½jȃ1Ìé·Z~ð§Gåi÷û?x`Çî=6‰»Ý®†P6%B?KÛýv³ãEE×"…µ\ãfyðàY#€(RHÁƒ”X˜¬vÛg?>úÜÙ^Ó»v>ö­'¢(a²•¡aIa!(€•ùúû33ǹyãÚôôôcß~¼61 ™ÏƒJEÃÕać^·Ûn¶Ò^ª¾(ݪ—m™ý–óölÕÖ‚*!d!K¢$d!g^Zl\ºxõʵ6,l\-µ»)8Žâ²×`ˆ­aÒ^Ç*ÏÎÞœ™™9wî\a÷îÝ»w= OËËKè;ßë!dž&6Ž˜œˆ"&1Ì dË[ãr à‹ŒŽ¬UM‹ Ã@ɱcñZŽªŸúÉ/ÿå_Ï|ðgdp%®ŒG¥Q5Fˆ:à $)Ùvcù£ógŽ;r«>¿g÷ΕÕö¥.¯ÌvF*£Huþúâå‹ç-÷c䥨­.Þ:÷ÁÉÞêüÄØB^rö‘g‚-Úëõ »8Ž1Oï\úšà¬LÔŒH Ö*T!cxa¾þÞ‰“ïöú\PŽÔ£dÖ(…ø,s‘Íótaiñæì­¹ÅLy.z{攊‘ÌÇU]µÝî6º«œvúï¼óöGçÏ8Gç&F‡¿øÂ›?ûÙø¾½•ÑÑRRN’d­‡,"wÌ»oü]EUaÐh4N:õáÙ3­~/bµ–!ÃëÕb _l£(±ÆÙ(fF·—^Ÿot³´ 0à‘XE`¸R­U[v3í…å3!ïÏλ‘Ññ/nÍ•vLÇÞ`bQ&¾äü ÀÔhܺu«Ýn`ã(Ërrd,3X$B†û1®Ô†Ÿþ›g_ÿÉO>ñ€L´é%)U¢²US¿Y?wî|³¹Ú]myÈ·ö¿öÚ«û÷í¥û´³krrjçΡ‘‘5ÎQd\Øà›¿9‹àUº­þW®Ì/Ô•@DYžû Æ À ¨€… @€²1A‚aûü / Œ­,/2³kJ›œ”ÔŸšù@ÿéŸgN¼ïI“$~î¥C?ûùÏŸ}öGbÄÙj­$’³aAó )xŸò ™o4W¯^]\\rb( àUƒT Á‚­‹|žqehäÀSÅû(ŠÔ˜ùN ÖUã¼ÎÞœ›çØù^ÏwÚ.ކÇÇJ•²JV+•Š)<@ÆZ‹x¼÷›7f›eëëü¦äÉ |ÌìChu;ínWv cI5(n6äØÚd"c¢¤DÖ¥Y6T­: Ÿ÷BÞ‡xÕœH¢Ørì’Ä•ËIT2D XûYïvqaC¿îuòaƒ<0æCER Ll¬ Á‹%zU EÖ¢ˆ½ð!ŠœH…ÈYµZ­ÄU4d€ï;í••¥z§µ c a¥±ÐZ]êw§ó~/DY›$ ll‘Ô¢Á÷iü[?¨+n*°Å±­ÕjÏ?ÿüÄÔd½^W‚Líš<ðí'G‡†ŽsÍ Œ1&óyl3®˜üªj]¬@I’¤Ìfie~y~¹±Ø¸ðÑéN³^Ž Ð¾ú…ùǾsáϧ+¥ø[ûöíÞ1½oß~ &".˜/®dü=ÄÅѾýû_yå•V«µ°0?½câúÓïúΞ]{äyn"60÷^ˆNœ¿â³´bÿçâ…ûe{q©n4|÷ÕWþáïޮԆǿv©ö€×µz[Ç»vízéС^š..Õ÷îÝóæ›oîÞ·w¬6B†Á$Bkð$k»`"2L½N«±²¸TŸÍ»ùèÈðK/>klRª ³ä*.‡09>616V-W¶Óó»Öçï"²vªkGˆ^±´´ôᇧšÍæøÄèÐPõ±'£R%„GÆH³Ü9gÖ\T1W¨ ÍšÝþüõë——æ–cv¥hˆÙ”+ÃÕ‘ÑF»H2 Ý^;1f玩ݓSÅ"2ëf¿Ö«u³¿—G`à ŠfsõÆ­ëÕjõá½)B–yR6Æ™b3#*Å:Ä õ¢ W"š…n£yS49®De 6Ï»$®TšÝžêåHc¡„9Ïó¤Rý¿Ÿ-„‡Œ!räà D2(sÙ'ff¾Ý¿Ûà^z0}EfáÄ@ ”•8^ˉBÔg%ë Rº_ðñ>°ƒ”ÆYæØÅ.‰»i_Dd‰ QH†,C)†M ÅyCf&8Bä¥i*¹@ Ôk³› ã}{p7 F·u*eËÌcc”`y%Qï}¹õׂøˆ# j˜@¯l@–æÎâÂß©ª.PRé96 &0£r ,+GQqêËý^;Ž ‹nŸOü æ Ë•¯þö¡³{MñË[L±‰B0hÅ ŒµÜÉ—4ßå¿J'B´uð[ªoèÌðºl±?Õµ3œßÈáéÿ7ò #¼;ÊV-ë>÷$Dþ— ˆEµ&IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.31.png0000444000175000017500000000132311030300136017765 0ustar dandan‰PNG  IHDRnEYÎ=PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment358(”â/PIDATH‰í–]–£ …1+Ó ˜ f#¸+ûßÊÜ*Óv";=/ý<ä„ú¿¨®?{Ô›{s¿„›~Æ¥a<ærp±9 Ö쀇\²­qnx•£à|tÖo rÖ 6_å’) íÖÑ#n4ä]å(ç}.Éû)—cÜžûŽâ}Âã£æT¦¢÷\F‰—„SŒ°ْ攤Z(Yc–Äaåp¯ºÆO4Ö¸Œ3‹ÁQái˜#«Ú!‡Z¿$sÐRá œä"è¦ îòœ£S³>]„3«ËZÝœxÆq fÝðîÐú½p3‚VçÚß6&‡¾4øÈQ2œOꋨådšjŸJÈP4ÓJZ¨÷rN‘™{.!”ö»;);Ö‹UuªqÈœœ { J]ÄÁ¤›K…³¨‡Q V7Òbo®r9:„ÅsF“«V¸éÃÄ…µR¸ån\Ò[azœw(ת$ò¿GSË'nê×J‘Å’úZ 7ôŒ‚:.{…#‚åé²Eco¹Q¯[s<ùζþú"G#æÈøB·º;êµ3ÄO¹òZ)¹¯øì’¢œ QÝñó¯úàz\×Ñò¬…aº%J3°ÇÛÙåpW ÉÜÎ,¿8áô-NcHtpî0ß©ÛQ£nÖªqÐݳpXêbÆ÷ãëY( §.~é燩å½òå€RM{ÐAHÞ¢F¨5 W¢ÛÞ·¸Ê—EйŠýÊïÁ7÷æþ—û¤ö}㥃‚IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.29.png0000444000175000017500000000321111030277605020010 0ustar dandan‰PNG  IHDRTI†H^X pHYsb&2 tEXtComment306²[;m$IDATX…í˜ÙsÇÆ¿žÝv A@ EÒ¤ÌËbbÙ‘"Yår^òàäŸM¥*UI9%Ë%GŒ.›’(Q<@A‚¸Ï=f:Œd0™'UIúifÓýõôtïã?oâ¿ÀB‡Ð!tB‡Ð!týy¦÷=3€»ë6Ç*2®y¦ %aøÐ뎫ú(¹†ÒøÂ?0E;§wìvPb ôŸ¦º½ý·‡zÅŒF"Ù)M@'èè¼Þ®»Öøl.DÀ¤‘ª½x,u'·± \¥³a­Z8x¼™÷!+9µz{ŽXù›ß}_wG²2·ÁLäåŸÝ}ÑLþn% 48ü3 ¸òâÛ¿ï— ˜|ÕUéÐ.î=Ý1Lç r²²6kHBw믶piw_ÆR @»z¶YmëÞ¶ zÏ)4ƒ£¿e£¸þà“™ïínåít„¤³û§?”s7Åý®·”ù"Ñý O«ow\hœÍÖ÷ëµ'é4‰Íoîå¯~þiºÐ}rT_X0õvþá¿O¯ü¦üv÷VÁ~à(À¾ ’æÜB£ŽãW'uÃ}ú·mÿh%ØÛÎÿpUŸ<}pÿ‘ &“æÒf^Å#:L—AG–t`Í^Ó×P-nÛ½}eÄík45®u·_ÇcÕÍ—`þøg»Àl.ê}¢™X} ûÎÍà˜¥Ç­îîN+×íÆ=K-•üÚ38S 8õØ—á¹L–”4. ÿ#·3åØK©v¡?³6Ú«k ºm[ Tù4zpä•£À“©Å¹ó¥ž±ymY:¨6ZÂüô·¹vc¯fÀR2HÃÛ»>‰ÝVB¯¨¤œì´&]FÓµÆÞËG?TiòêŒa{€Ø—¾ë),5êÇEÇ /R/¾xyì^ÏÚe‡ðuÃ=Xÿ6ßlÀ¼š1’+ˆ]ɬ à°ïuEÙÛó'wî{f"ž~iöu¯Vªv —jU´É‡&YBèšÐÀº/¤Ò·¾^,67œâÆÊbÂ8GøÀº²\çØêÒ^¾î­—ÝtÀÕ„dxŠ4]DÚÌæ~½ucA_î¿*^ÁåPÝ£ÈÜègc{yýø¤9w GC®§¨ëJº®„Îm€1³<Þ“¡híã²gu­P%ÀïÍîó^XÞÐf¿:uÿ¼Õg2›Â%”œ”Vj1m¶R*8ÕìqOI]Ó¹èB!€ Ýòóoʶ96ñƉ˜%™±¸¡ûæ¨Ö¨H#I„Ú#e]É.™šS…qA혡ZÅgßUÉ^ŠÎ„MRè9½Xrb¤"[„[«K“¶>YÖFG:øšIËê+ýþ¥fp¯]k‚Û-yZ¬CƒfûöÔlªêKßuô™kI{bj _)8®žÍ¦Ðÿ5> Q’ußTp_ÿ¸£¥¦FãÖÊ^‘«¥1SU]#{m9Z± ’O;oŽ0–2“J n' ™Âz8Ù¬­¿‚ŠÎOÆ,sáÆq¹ý¸óÖݨ§¯>MmíÚöýâé£V|oÃÁôZnÄ\pI3A„“Ó¹;oÊΦ‡Ä/¾È†ìÆÖV¾©Ñajá÷+!/†_º¡uç¨fåÛ‰ù7?Öúrÿ¯P`]YÎt›ùo22ñåi—e,U VŒÒiØZºõu—)‚°ð“N½S[¼~{ኯ{}%Eþîà'›GÕj˳ÆçW—§"‚AþÑVáÇNÛÈ|²6`¥AÖšÏw ÝžËÞŸ0!û]…[®6Ú­ž§ÙñTbDgEn«Óp=X±xŠ5Àíõji´s] ÔÓ„r{®´ ‚gª0AŠYg Õ»¢Xô_§ƒ R”OBé ¤Lïßdk¬H±&Î5¾AáŸ[ÀŠ…ÀJ{·”""‚¤÷Q+þIÕA‰’LZ'c&A1@ïgO'¥Hâß%êL)ˆèlhaÀÚàugs¢€*‚bô.¡¾Ö¯% ÀŠ,$ëPï„fùÓ‘¿ÐÓŸcÿ?ãù:„¡ÿóРÇ#¯éü›"IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.44.png0000444000175000017500000000075011030302620017774 0ustar dandan‰PNG  IHDRK3-èuPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment25€+ðgfIDAT8íÓ]n„ à{Ð=€}×°Šïí:Üÿ*aÛÆMaÓ·¦Éò`LøÂü0@úÍzƒ'û†[…Å5~ š¹ÌÐãó»j½Ñv6fЖÿ %˹í†"õ‚ϸ’®ÌK'ènLØ­Ì—Ãq¬]TG¦æÌí_yÝ3T–NØH_Ä*S8+fÒÛPcŽ[Aì"´6¡ÈRÏì@¹Âž‡¶|Y4‚dÖ$¼€+²Õ´öÜ7ìO_­ùÉRŒiQœôÙsk ,îxo¥æbŠŒ®ô»>„Cr÷lÉ7Já…S…Mrf²÷ˆEåhp7jžÌSRaï”?WÙs‘K-7\L¨7º6bS­ÒE„'ycØWúFÝ ÇÍ–ÈH1›Tbù¼ åÖE„×"o¬Ë#lj/‹ç׉ÃóËš«Lh•wW­Z›ÊÌO•†\^Œ1•ÙÃõdÿ‰}à;Áå›dIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.12.png0000444000175000017500000000076311030266611020004 0ustar dandan‰PNG  IHDR[=0µíPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment180eÀ>pIDATH‰íÔQ’ƒ Ðö‹= ìÖÀÿÎ¨»Ø¥3û)-¥Ïx›Þi_·‹_¼Â™Üðw͉¯ð ­Gx6r›fhäQ‹dm[£'¦9ºŸiçæïdØ;7ø%™G(Keï}¨qÔj© ëî9$ÄàPá¿›}Beȹc(µ¯XÉô݆Üë`™ˆ´PÝPáܯ̪[""G¸?ÛÎô]åñcI@6_Ò‹XåãÆeÕó2òöø— ¤Äh ›Ê|ž ©¨c®lo_p–£ž`æX㟙Ï'R6çY¿æJ¾I m™îœ§%Ç™¯KíkK=r½ñXÝÌœä„I…ÒÇP~rÆ<š‚ÅÄåý&¿Æ9r93¹*’Øò =ŸesO°r„Áã»Òv¹NóEX¢x4.w ôáün×ùÕÈ£ë b‡Ç÷YÉ}7(t×õS·µ‹_üâÿÆ¿ mÑ&—TIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.41.png0000444000175000017500000000070411030302126017771 0ustar dandan‰PNG  IHDRO]&%PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment74Š[4´BIDATH‰íÔAn… àá@ô^@ÔT`߸ÿUúCÒ´ÒBY7Ìâå%~qfdŠ}ñN8à€E„ãt]ÐpÙwâg ‚ØÕ×Nè'b]5ÞDs/T]p'ölú ƒuÑZ‹?;ÍWÞ2rÁŠÌˆGÄ&$õb.2?áJ96ÀÅÚz3ß WF×K)pÈ7?õ´¸:d𖀝s§WŠÔjÀ|Ý‹mÂ\–W.è6Œ&=2 n¡ sh…ìWü@2ߊñùn©LÀúçÉáE†i,ÚЈ+z j|,ìˆCA‡Æ.¨&ܱ+Xj9ѳÈâ1އÄ©ùF?¥œµ¢˜ñÞ´à×¥eXb~=×\µ _1¶9ÌѼ{Ìô cc¹r‰Å•S…¼ÜçZjYîsÆtOtÁj 8à€þø›©›,þ€Û}IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.51.png0000444000175000017500000000071211030303660017775 0ustar dandan‰PNG  IHDR1,>úMjPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment85zÄíHIDAT8Í“Ïrƒ ‡à HLïFÍÝ(¹7Éî½Sáý_¥»€¦3=v&ùXvù@Ä?ž/¼=¡¹§<@k“ÉrN^{á"¯ÐÝ €†u¬§Î…¼j%F&Æ'à\½‘ÐOÐÏø@z®™„–©EÅ+±\H*Æ–¸¡Ô¶@Évfá`:Þ‰åLh4~î9îDâ?Ñf£—ßHY¡Å@Úuî4ovn)mʼn+HËeA,]RAÅÎæ`©1«·)oü¬äC7¾:X$D£*¾&Å›Xl¦:m*¸áHFঔè=H Ã©Š»Ô/ø7‘HNX{ÃH ^ÙkËs”KŒUlÊùˆœ&’ j²†žYG©ÚÈÙ –@ÛIÏÇ}§jǯnOëÉÅ×f4M2~¿£j ÝÄ0u®ÛONn+Í>ßÞ@Dÿø—¼'ùÅÕ Þb2IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.43.png0000444000175000017500000000051711030302425017777 0ustar dandan‰PNG  IHDR79`ÿ®PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment10ÛlW+ÍIDAT8íÒу Ðè€ HtQ¨À¯Àþ«4`Û»hýéW{5Ç# !Žã 'þ!º2FçüãHáË»És¼¡²§‰A­ºiƒ cÐ {ŽÁ4”p‘³ºñ £P圢V3?íÛš’–ªß áù]† ¬X€Ê§¸Ã `:Ì$œó™óòMzƒ¡¥+ºøUâúÏ8P ][M -ÕVÑ›Y© ŠM…$¤ýÑHŠŽ×6Œ¨1/Y³ÏW°Føæ¾=ñWðÏr逻 ™IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.2.png0000444000175000017500000000231111030264237017714 0ustar dandan‰PNG  IHDR@EßÏ¿± pHYsb&2 tEXtComment46Ox[eIDATX…í–ÛoEÆ¿3³»^;;¶cÇIh”4Í¥·´EHˆ'@<ð¯ò $„x¡P›¦4%—¶¶“¸¹Ô÷K¼»3sxpš†ØF‚¾ äóºçüæûfΜYb|\ˆ¬F€àÿ `kÍÐʰÑF:`](0`užLýÉœS QG`?(Œ ZBË¡ zÙ€~_oFƒÖé-IÃ0Á@À>O3Æ‚2’:]«ÚÍ&?ˆ¬~6ÐA3‹ dd ˜°Xê6쵨{iÙ€ž{ÝØ+K« #H¨æn½Rا[¡¿_Þíÿø‚¿1õ\uŽž?j¤cigÚ‹Àˆ Äè¿Ù|bßãÞ÷ÐA-ÿë#ÿþ׋<>Ñ;e”J/¾ß*Þ¦vÔîί‚¹ÏîÌ»Z{¨*œn>ÍÚ5˜4 ëÏ7¦V¿x8%•‘É¢ÚØ{^ˆVp0²ýò—­â—wÌ8€¹ªöJ0³hŠUw1¥{Çìo<Ù÷f20̃0sÛi0) Š«wŵ0§Ö™“ä‹hÙkl•²×ý„Ý“kéʳ­¶ÅõíšåpbL¢­| ÐC2‡ùíS1·r•Fk0A•wŽ¡Nóm÷“øB< A¸ ôo"ÿñì0š^ÌH(eðÛïÞv„9þ]4åžóéÂ$]N¿ t]ux²Þšº•’N›»$ªÂ³+¥Ðpm5^?>-Ucå›ÓÖ€. :¥ge/žôTÙrEØeÉZtÂÚWß¹G;›G›áXjƘÅU€rå—_oµré »Þ*µíÓÒdMÑ |³˦ãG7î ¼mØ4Š»í1×èΫ¢2ùu½<ݶ}ûúl**-^ÞîT»ŒÐý›hƒlt+…ãJ7ï5DEßü܃ÆDÖŽÉ„äb ú‰ ´dà¬^SáIÑ® c+‘\“%9–°´©¤8â%¼ùg1PV_°– ÔrUã$Ú©¿Q°gVo_ŸNnö°µß’’à 0”ŠqÑÒ—_Rsqë0a^ÿ´Žìƒ‡÷W'ù¥Wû‡-¡Œ«tš@ýÀ¢Ñé·2X—Ûñ4ñùÃùi7+õí½ÔYWº›_Iiáðy£°ª8±˜Kº‘tFBY“ …,ïÎLº‡¥’;?—ލÙLv&ô‰q 7VŽJ/Ë¿¡<^89ÊÜ]LA4|&†¶ Ç‘áÔ¼t 0.<ëÆ½õ‚×q“™µ™´€þ.DÂF"Ç+ž–QDo„×¼Z+ˆ/-eWhù7/£!E­©¼¸JGt½ñ¢RÙÛ+n ù~  ø–IÀiíÀ„0Õü¼;‘Œ÷r´„é»LŒ/- Ð’’ÁB‚»Ñ 鬨‚ùüébáÄógF€à_ÅŸB@"ÇÿÞüIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.1.png0000444000175000017500000000252111030244722017713 0ustar dandan‰PNG  IHDR=6QÎÎö pHYsb&2 tEXtComment58±ÛíIDATH‰í–YoW†ßïœÙìx‹í8)$@ÂBJQU ªJiozÓ›Jý9ý9½ï•@U ‚"*ÂR !{œÕqp¼ŒgæÌùzábìDm¹B깚gÞ÷[ÎBŒ÷â}à˜6ö¿„D`i@5“ Dmhj—ó@ðmæ´j "LÌZøBXkÀÌlþ#mÌ «º­ã¶ÚƒXkÄß Ò‚öþvˆ6‡L :ìûAR©µ>ÍÎuÀÄAà ñ f*¥R-Õ‘Œí"hrîÕ*·R©Ùv<“I˜€·½žÏo–e×±¾lþM]>?ä·§™¤€×_Þú¥T¯ËÈlöšÒ*ªòîÌ“iÓ[^VéXô `U}ýâç`é(á˵‡7'ǯ] ž=˜žˆ ´[@€n½œÛiÖ]Ÿ$…‹X±09áþæú™zBÌνXê?$k¦_šXÉ}Ño‡•ØÇqŸ´`«˜—¹Ñâ½=-l´f}×9@ÐëÓå“ý#}ñj!ÞNvÄ ”¬VŠvÚ4ˆ Ë9@›¦âôìëìb¢ëhÜvbQ-µ!yf*–áÚÊ¢>ÑÛÚ-Ðh¥ ³¯ÊÙ²»ct[ž2ž*Îü‘èñçžN¢§Ë‹µw®%”Qs9|æf»®žî :”íwŽmÜ,ßð*Éû«ÙÁÞúÁÚÂìZòÜ¥%{»Üá CœúÔ-Ýó&W‰b}WFÚÄ-%áX¹ãÇ;ýB½èæRVœ¥ˆ$Ë¥U*lÖË‰ïÆ¢–< bLÑsÅêâߦ½§§Ò—ÁÄNb[(—ã;Ո͠v´ˆ)O„Çb¶yß›èƒbË[ο2“±UAýžþ¼SÓ;xƒ–„$¡UrDúSîü¢„!‚âüÓGÝ_ŸžÜÞZ»í¤íµ …‰áÊ“»¥²¨;(-L=Ôg¿¿ÈÏ;n­ÌD¦rñ½0÷h Ö€"'¬ÈÑž*3¶—gWÏ_ˆ'‡?»`…sÓnË(€†o$”™í´ØõÉ…ÚÈ91'wýò`]E@¨©™†$WŠB¿æí“©˜APV½Zñ͈ ÍÜ¥ãQßs 4éïÆ­H®ÎG;2hÃGæHÔR™‰ ¥ !{92³Ó”{Ij®w ðâ×3µÞ˜.-,»ýƒ [H™èà­ùü1I¥ZÑIg’&M;³Zººxwz°0”›ç{.ZR82ÛûQ0ý(Ìî,­«îžÞXËߥMS9´¹±Ö—NkÑ«_°ì£óÓs?Mæ^»pNN5U Øís"À!*îæQü·# áP°ì°«Ëss‹®ß=:>áÆÜ·hœ’TS¿¯,nÄÓ™ñÓ<[×b:¬,<žÜ¢h&<3<$ E­€P…Ï«5#Ó²÷­%¿\Ü®fC™È´l {4j[û°÷¦$A ¢––`uØ ¬w[G‡-³4v ƒi@ûÎ^К‰„ôîÚlCÍ%Ñ ´x{8˜š±çpÿÅÑF½ùXdjºƒ5™Ñ¨Ô¡Î™4“x§ŸÚÕÆù¿î=õú¿Œ¿kjMíNd¹IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.21.png0000444000175000017500000001000111030270676017774 0ustar dandan‰PNG  IHDRK9ñÆAw pHYsb&2 tEXtComment10ÛlW+IDAThí[mo\Çu~Ι™û²»¤–¤H‰¢Þ\Y²#;¶“Øq,hà±8IQhƒ~hû'òZô4©ó!A‚¸Md)‘íH–(R”Ñ’¢WR|Yîî½wfÎ釻¤dÙ²H—êÀÄr÷îáyæÌœç¼\’ªâó”­ÎNÛ­o÷„ÿïäK„_|ùá_¾DøÅ»Éû6h“ˆ¼òñëË#®ë#˜’¶›ÿòmø%Â/¾|‰ð‹/ù7ˈԿ €î'_?_VB½|K¨ëƒë+¤÷_õ!‚ òï`@¼>Ç`¦ÇrË#ªêC§ªª‘™QD„MbZ”¤K wa¸ÕÞa“D¹K <O@ ¢Jªê£s Z–eðI–²sPUéËàš|´™àc¥l Q„Ôcô™I?ä–mȆõeʺÈ.AYõÖzç/œº}çNÖÈŸ8|xÏÁý”XXèÀÒxмAYÁ%”¤Yš‚UAYr–8ë@ªDó)@ÐÄóX…·Œ°ìižº¬éR†båöísg>˜™™}çäÉn¿wð𡎌îòI%öÁ?4==ÒeŠ*t»6Ë@è=¯’º$”EËZˆ”Á§Yëµ,ª$MU  :JŠ¡2Æú¦y®1®,-]ÿðêÕù«ºtùƒÓ§gff.^¾âcxayå¯ÿæ5k’1Æ)ôÉñ™/ GÆ6›ˆñÎÍ›Ós³—?œït:±,,¶fbbâ¹çž;ðWO4›MCc !À°!C€ŠÐçaC÷{Ý?þñô¯~ñËÓuãæÒÂââ½E%Sª¿qãÖÒ½•¢¨Ä¨séúÍ¡°Öôúg§ÏýÏñßýþ½wg.^¸}÷.‚‡j£Ñxê©§.Ï_yö«_}úé§9BDŽMŒ1„ÈÎÔïÙü<Í#„º½°8{áâ;'ÿðþ©wK_Y˜Élj<˜­µ‰1ÎÇÒ8€~$–¦ ¼Æô––ßýéÿüÙOõß¿™¿~­[D‰‘çy·èÏ_»ºç·¿=vìØ«¯¾ú / cbŒX6чÍé[·¡2“u.m4Zíöh¨"ƒÊ²ì=ÃŽsIÆ–$²½^1šeOP"Õ»·nÏNŸÿõoÞ>yêÝù«×;½2çéÄÈØØÈ¨ªÞºuëÜÙéé陥•Õn¿n?ÿüóP2”õ7C¹e„ã¾}ûÞ|ó̓û\8áâ…¹÷ß}ïÌÙ ;b.Ëjuµ³¶VD†Zl>–v»½°°púôééééµ¢ÂøÄÄäÔžúÇh ߺuëí·ß>ÑéÝî¥K—œs¯¼ü­ƒîÞ!"*B̆Öô§‚|$‡Èpã#†`tdç7¾ñÒÔî©gŸ}v||×ùÙ *X­ºÞ{YZZÙ¹{WX†˜…‘‰QH4±æÒ•+333óóó1Fšíÿü¯ÿ²gßÞcß|ɲ¹råŠ2ÍÎÎÞìuKïç¯^ýÝ;ÇŸ{î¹CÃiš‚HC0IÕGåŸGø(\–Žäi³Ù¿{{aÿþý—ÿt@š¦Y–%I <À ª "Ã>†ªô/^H˜œDôV×.L_8ûÁt¯(~ú™gßüþŸ}ákY’ä`vïÞcmòµ_š™»xãʼ™™ûà̹}Sû[­aD% ¨>΂Ÿ!ò&"%Ôì „PUÕZ¯«P¹Ä:çê-M8Qf 0KŒNçÎ;‹‹‹Ž]šå{÷íûÊ3G“$íE·ì÷Ë@»Ý>tèÐèè(9¦;‹ —/_^Z^&fÔ¡,}, Ý„€0 ê<É“öèŽ]»Æ‰” ˆPU„ä‹L„P†à½_]^¹}ûv·Û‘ãðððèÎÔÈyš;6õÏ莶%V•eùáõkËU©WŠHÞ„ú[Fø@'G¡ cò<‚áuo$ÀàÔÕÀ6FÄ!Z–å;wΟ?ïÕÃðÈÈÈOU€8ç˜9„àœ ! FˆTUuýúõ¥¥%ñ•I6×öùlù¡ˆ„*Dè˲¿¶¶J¤ + 8aC@ ü@çç¨*ýÍ›·®\™ÈZ·s|âðá#ÍF³¯ÁC¼¨FXv¤œ¥ gSÀ@Ywî.®vºQ Jµ 7r«…tpº,X cëõ®¿&"cŒsuv HBR‚²°¼R„hLÖõ¾Í9G&«ª5°yž·ZCY–³ËÀd‹Â‡‰¸&/B|Û~6„DÄÌ R¬uA"+ËËý^ÏW¾RUkmˆQPÝT†Š¬¨B%tKµyãÃ[·*ë ç¢5Ñ‘~ˆ KK t¢@ø*H ’D<#&ˆ‰x^¹×󥤎$ k¯ÿÙBˆ´ŽQB¯×[[[‹1Èc­%"HjP@1ÆÂ‡•^¯¬JH„a¯""×çP¢÷±ªB ªÊƒZ!‘UYâ€ç냾ݑ7@$6µñU|~QuÖz^”`Ò4O’Ì'ë·×š(ãz!C¤ßï#0¦vIÌ\a€­‰QcŒý~¿(Šõ³FιzùPÓÏæTÞº/%’A‚  ()“¨c’$IÓܳþç9Èਈ)œ³©5ƒ3 ØÄÖü’ ‘z@’X"ªªª,û€¸$5Öfy’e‰µvƒi£ÄmF¨€€HÁQ!lŒM\–gYƒ``¬agØ"ð;„ff3\bò<…!¨jQ!g-)lí¦£„ I’´G†Ûí6ë«~o­M’¤&ÈZh9þÖm!@# ±³ÆZcÌ:ÓkŒQu2`×Y91 F¨‚ª6óÔ†"e·Ó){}ff†YDb,Ë&&&víšh42 B"‘:g‰(„AxÄŸGL#€( ˆØ€ PïcQz€bªªªª¯ºQ5D7 ð¡‚Äf3o· ‰E¯[%+$h}µÖZ[–åâââââbY $ϳV«•$Fòxšø¬7ŽÊà$ÄXøªßï+4jôÞ{ïcŒï{ï}ŒfŽ1#O³ÑöˆI±VBŒ>@4úeë¨ðÞ½…é鳜=ª~’9—¦CÃÍ¡áf’€" ,¹mUUTHŒíô:Ä,xþù¯>óÌWœµÖ˜•••{ UÑ·¼¾ ‰KcŒÞGÆÚC©5ßÿÁ›ûöïß‹>i\[]®Ê~ž¦¾¨ ³(:µ7n\ºtÉ$M¯ú¯¼òòÔÔd§S°–£<67Ü"ÂZbô 5š¨DRìh íß¿ßYvl‚¯z½n}§`}™­µµÍV«591~`ÚïöîÞ¾#>0Ðj$bB’$Yž®¬,õû}åe0ÚíöØØ˜µ,™`›yÚiË™Ô@X"IP__LJ¡±Ûí¬,ß3–(Š>©µ1 ¨¥nçØÈØh14ÍáVÓ2;c{nUÁZôú€v»­ªEÑsYÒ={v<¸÷î çìFî¶ñfÛ’JÂl ¾è«¯l’²³ýÎjwe¹®ùK¨úýn–% Ô¤¸QïS…ˆÄèE ¯¿þú·^~)Ë“å{K^™_¼{w¸Õt UÄEäüùósssâ½/ŠF«õíoûðáÃYfŒB Vl[ÐÍ3DðÕÚâÝ?_»ZôºÐh €¬¬,u»o`¦P{c 3‹ˆå±W^þ»üðàþ1„óç¦O¾sB"T½¦IÖétÞzë­÷ÞפŽ{øÈ“¯¿ñݽû¦Pwg˜+/1¹íŽK eÅy Ã÷nܾ0;{áü̉'nþùÏ1øEovvöø;¿Ø39µoïÈȘã4FQÄ4u¨ÃwD„¯}ýù¯ý…………›·nü×O6621ºs¤ÙjÍ]ž›»xáøñãýµ5›¦üñüâ‹/¶Ûí²ŠêÜEuSÛ–ë4.±P µÙsgþÖ['Nœ¸|ùr¯[0‚²è¿ÿÞ©¤™>qäÉ×ßxƒ™[#»ë÷›Y¢–™2sàÀï|ç;N÷Ü™s³çÏÿÇ¿ýûO>±¸¼têýS/ÍÈ[ñññýèï¿÷½7&'w7 @DĹ”›ˆØ>B K+«W®_¹xiæâ¥åN·=Ô$¤R:õš¼sr©³öÒ7¿µwOT±ªÔ‡G¼÷L꜓‡††Þüþ÷&''O?ùë_ÿæ¿üùÐïw¡*ªª·º62>¶k×øk¯½ö“Ÿü$ÏSI'*U5 ¨¼äÛ¨›íêº60Dych|bòС£Þ[kGÇÆTéÞòÒJ§ÃÖŒŽî<|䩪ˆµG0Ž X5”d))ˆ(x¨sî©§çy¾gßžW޽tóöÝ ”æyžçCí©©É£G–eh8W¥¨žˆÒÔÕe`k€Mä‡ô¨'h…PI ›ÊW×®]›»ô§¥¥¥F£122’5škkkÝ¢/"“eÙää䞩ݣ­!Eäõ †`í`}Ë¢X^^^¹·Ôéö—V{Í¡Ãí,O¬ÙÌÓ¬>ÀõpC €ëì‚7‘nao­eâÊW½²PÕ,m¤I*ÐÊWªDD¥ý~_U“ÔŽ "Ân·kŒqÖšuœˆE)Ö%ÖAªB¬€Äkî!¢:oÙ¨Tn?BA¬¯«jP@0Ì,Ð#‘I¬ *D” Ð'"|x^UVØX+@BÀ:vÖr?|§Ú†f“·ÞåÆ@G­ÓreÁÀ(DT£ª!b‚˜M8óV‘ˆ¬ œ£öc¯ë ­¸"n€Ü^„²®ÑzIÔK (JDL¬ªB ¨D3h#>,Þ{ zÖƒíU…ª"*ˆê¢xïKUͲô!ƒÕ½åÇ>é·Õ]+©jˆ³]O_QIÎHÀ§íÒª<®ð^Œ¥:±¨—Uï·é¨îž6ÙöÞhP¯gâIJ~ Uˆ!ˆ2³1µ/ÿä\u4¯ÃÀuÕŠ(F€Ä‹AÊù#ɼ²Ù¤¾[ü AÛªF•ºtÄÆ0qs dÈG?×ÊLúàÜÒúëÏݯßË•}‰ Y¿Z1­{qž?Qß];µS;µS¿™ú'Ñͨ%¸>IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.46.png0000444000175000017500000000077511030303004020002 0ustar dandan‰PNG  IHDRL@B{ŒcPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment63 $V{IDATH‰í”]n„ …/λ‘é{QÜ€À ì+=À4qZhúФ/šhLø¸?ç\ ô«‡.ìÂþ‹Îý€¹­®ÆuQ¦‹9вjG"a:XÔœhò ÖE⯃Y.$±=¥C8;óM,jf¢{Šo7Ÿ4ÑÞÆøà½¤8{*ZØ¢FãìžlÞÐÂ4ˆÀÉCù¡‡Í(Æ­Ê#iÅšI‘j‡ú>÷â(=71«vóQ’h ˆûi–[yÇdÙä¨Jˆ°Ž$\#%9«žÂ,¦šIM+¯Y³†f ³’ÃŬ"©vGåE-D|'|‹NlÏ£ yY3ù;ø¨Q l{Ò÷$Èžƒ Þ?æ6fK-¡NÓ+†®4pöÀtÁæv qÎI,¿A‹šôé0œæ­´0å׃ïN¯òÙÖ¤|JÓ(‚lðcjŸ¬tp±Éì•bYž?gÉD]´ß¨óå€(Y,ÃÞâýr¿´±Ÿž »°?Á>¦½Ø¬èÁó‹IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.26.png0000444000175000017500000000100411030276361020001 0ustar dandan‰PNG  IHDR]D†$£PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment479hꦾIDATH‰íÔÁr„ аûâîØ{ü€ Þ;ÿÿWš„­Óšm;=ô"ÆÑgLë¯Æ+þð‡ÿƒÏ§2óeÌ|I¤&‚³‘¸wa~à‹OËZ7Ê·–ß“ü‹Ñw@íŷ1™Ë,úÒ©¸ù?¤b1§Qô©òF[Ûà›Ksš×A=‰~ |lÌyÂJÞà„ÅÃUòÅ`²‹Ã)a_^ª?Ï‚Ÿ Ç_"ùHóái×—`kþ´D¾ß¼%ï?RûÞ§6Ÿh!÷Gô!Ô~r)„h9°‚/!æÍŠ6Æ.t’O6b|—kúܔŴAŒ?i‡ýÔÔüš9mW—¼ÔÏA©·MK¸-Rɹx8¯»~²ã+Ž?T›7÷eßc0ÌÿÂ?³ÇÞôèû}ÏiC?òôyPñ‘çtò)éÏK+ž—ì±ÜX_Iyí‚q¢F«¶Ö«9élZëäóhXîÿí¯¾ð»ó’ó¼ÞýoøŽè4øÃþßü;©òØ£…ö}ÅIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.40.png0000444000175000017500000000100211030302110017751 0ustar dandan‰PNG  IHDRUM%^5ŸPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment86ãÍIW€IDATH‰íÔQnà PÓ]“ È h ÿ“Bî•™´ÒÚDsö3iÒÒ¯¨y1Æ6Àòãßœö´§ý×6—ÇC-G6§É”d›ƒw~ÅÐlñ« Ö!ú–@Ѐƒd«5µáÀd “쬻BúÂ6 jèŠ`'–ګ뺀…‹`ë R³i!^ €‘í7U^ •r`Û•:ªk!e bn |M©Z%Ši۸׽ià=ueÖà¹Ô¢Í\U4׌ÕJîE@PÜÚ @¹ƒúÎ\TmRfkâ* –FYôÍv™vI¼Ô,8£5‰í°ä~›Ä³™-yTw[ßáM°mÄZϦ–*7Dˆ;­/›ÕÍÚÛ¢ã@«í·üli Ävn³Æ ê@ë‘`[-—‹4õ­#ò[r‰·5ðy迵ËÄ}ÈÑ>™&ïʰé1˜Ã¶l”ï·-ÞÍŽB?Ƹ;B›ûœñmÄk´ˆò¬/•OÃý!ºxxŸ}}¶ÿëOÞÕ§=íiÏ~ÓÿÀ¹½ ‚IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.11.png0000444000175000017500000000101211030266435017773 0ustar dandan‰PNG  IHDRU=.|8^PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment129V‡IDATH‰í”Av„ †ƒÎöâè^QP…}[Ãý¯ÒÝôgfÙ÷*o#~&?IâËã.öbÿKãq÷>Éïåƒ~K1ůh(§ìÀoYkövÎÆµ™Åy»K­%Ê)+ã ¸’ßç,ëàÚ."Ÿ±i•frðP/A§.X¬ÑÏØUMï¬Á“œÕGÞ‡–;®%_ÿhž_ìÊ AËÌk+Ö8Í“$?ª@˜ïöÑ‘¤ê>Ž®î8Œ ä{Òïµï!™"®PeXBá9êÎP‘Íî¡Ír.A·Ë2WT²{sÓF[ÍEpmݤJƒÊîùtÚÐþÊïÍÉYòʸ؋ýsì7–¸ ÓQ@èIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.45.png0000444000175000017500000000070511030302712017777 0ustar dandan‰PNG  IHDRT5-íÑ PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment49ßÇÊCIDATH‰íÔK’ƒ ÐÖäb<€€Ù Ä„Ï Äû_eÐ*Ç;³™YéB°êЄå×\ô?h Ûä#ÕÏ2zmMcßåÑ Ñ4áV—N‹Im¡3.Ž?H:j« çu hì!ŸUU¨Þ0tn2}¡A-À=ѦЎ Š}£·s9/øLÐ;ª(ª» k$hÓº©Â¼bâΩ“a¥– ‹£¨–~¥³Æ4òÁ¯=°`³~Ngöòu)¼Oóû}·F÷P›­§‰j©Jˆ*Æ&\4}Ÿ÷€)ôÃB>¦Nü™.>Dµ©mÌ+Ù¯[Ý36ô-X30B#ïV!zý8Þî=õXÌ*%Ë‚4ìÔ± c£œ±–üe8L—É%pBOz¸)Q9ýåE…E?½èßÐ/±©§ŠW¿²IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.9.png0000444000175000017500000000107011030266051017720 0ustar dandan‰PNG  IHDR]HfDäØPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment26"¡Ý¶IDATH‰í•Mrƒ0 …E¸€€Ÿvv8@ï;ƒ|ÿ«T’ÉLqŠ’.;ƒ †ùYz6þ_pò'ò¿.Ë+]ëÜF¡-ÊÎëüd Œ-hP©ül€¡NÒ7¥³Ý¨œ«FÜá# I'Øñ³)o N@dÀ:Ãj Wø!ãÄ”ôâà _à¢ð}äkȼÈa^Ë_Ç•öÌ÷"ÊðUá/^xižkJð"ˆù5 ÓïõKe¼':m8?Š,*ê85…îlù=-2÷wêrA½®4ýA ¹²kHõºÑýãΫ ž´ÍõÃ|ÇP`µÊ#_8ÔC±ùàÚO£ÓÑ­‡ó³ä‹c!P(Ò:[ë»ÃÓÝÇÿØ\zQyœšòzÕêì2¢Ó_Åó\z66Þ\þ*H̲>>ŽL>ÿ¡XÏ-oôxÍÕ¹93qÂO“£s¥ùÙH‚ʽä´4¹jÔhlòÂxÏÔ—çû¨¹‘+£±¾RD2áW-ÿòã Æ.Ÿ8¢)—±vÐØ-äËP‘8ës8nÎ_”œñäʼnXhð­®òîÄF™Ê24æ‹F“¼‘_[ÌÐÞñdr¤ßçÀ\v¬Nɼ†/ôÞ¡‰cdêT¸m#Xs²Vs¶d”zà•œm÷†lpr¨$!ŠA)¢ög(”E´Ã¥"r&HP@¹„t^±­Š¾KIš>plÏk@©XÓ€"MÄá¤Mô}þ®üþwà?›ç½ ÔìéIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.15.png0000444000175000017500000000662211030267475020020 0ustar dandan‰PNG  IHDRQ_ç¼ pHYsb&2 tEXtComment59ÆÜ*‹ .IDATxœíZYSI¶>™µ©ŠÒ‚‹Õ€„Œ D{陎éŽyë‡þOý§úáFß™¸7ch·ÁÄŽIHU©–\æ!¡¬k<MO;BúT)³È/Ï’ß9%Ä9‡þ£ð Í¹5ÐæÜhsn ´9·Úœ[mέ6ç/ìw†zæg»&çk› }y=v✿@;Ã玸/0žñu>ìÿ ôíÏŽ/ÐΟmέãìû>¥Td‡«9‚sþïGó}ÆcÁß@éÅWžGaÍø”,ôYrcìƒÇbŒBÍwÄ€«7Å\„$Œ!±¼FÓ?rÿ÷à&Ïç€ÆÿÉ}whÞˆ`$IrÝBL’dD©€eYKŒsÀ’â¡ß g~‰«&ý`Bèƒ}æ½¼Éd#Àj 1Fã#™e æÐ¤=ƒ§^*IRÌ‚ÕU6âRx ¾ÿdœb$q`œB€_~ !”É©Icy/7‚Õ­š¦)”rÛ®`Ó4dYõœœœ4M#$É2pîyž$I€e ¾»·³µ¸¸pôîíÙY5‘HœÛÖÉ»ÃZýL–”{÷§¢æãÇ=âaŒe¬NÈŒ3à€¿Ö©umÎWŸŽ0 £Ã€z­¶úê·ŸþŸ………÷…†ë!IîLvMOOÇãñ®®.UU ]R5 8pŸœŸŸonn¾x¾¸‘óÛo˱¸9™ËuDtMÓì£úîÁþöÎV£ÑˆÇã㙬i˜˜1€1ÂìúéèS}!‘Zâ8Îúúú³gÏòù¼c;”ƒG@Õt¸ÌÏŠ¢ ŒsBˆ¬(Ì÷ËåòÞÞÞÓ§Oûõ¥ç;¹ÜÔøø?óu,;zWX^^þûÿýcÿïÿûdg ËÊÄÄ„®EEî‡3¯ª(I’ÎÎÎ677766ÎÎÎúúú’‰N5¢KŠzglbff&—Ë¥R)UUÅxÁÙqœƒƒƒååå§OŸ–NŠ™ìøìììÄÄØÐЦiª&×jµ•µÕõõõâyéÉ“'£#MŒ GeI¡TDÙ¥OHˆ÷œ9w]wsss~~~¿¿¿fffàvš#ïL ÆãñH$<$¢ëà8ÎÞÞÞâââ«W¯º’©ÑÑÑo¿ý¶·÷OŠ¡¥]]]wîÜÉf³ù|þMu}mmmpx䛿üU<Áu]Ã0Øõ{!97_2J)¥ù|þÙ³gsss•Jefæo?üðCf|§ Ir¢3¥ë:B(¥R À8/—Ëûûûëëë•Je2“Íår===Šá„PJTÍH¥Rý·n§R)BH©tZ?·)¥ˆqF) ±øðœÅ¹*.)¥žç•ËåJ¥b۶뺖eY–¥ªjwg$9p¿‹ü¢Š@µZ­T*‹Å““èîîN&“ⱄŒ ¤iZ45ôΑmÛõz½X,ÖÎjñX\Q$êupí`Œ,Ç9§”BŽÇÁ×ëõÕÕÕùùùÝÝ]¸¶mû¾Läœ#Œ !®ë6 Û¶E°ÔëuB¨X•$)À(`Œ%I’eÙó \.*• ŽDŒë.^ ÌYÕœºBŠ¢pÎûúú Ã$©R©»î]×%„eU›ÈÈŠ&†yžªªbŒmËêììÄ—J%ÏóÇ©T*š¦‰˜çœBÔó\×5 ³Ñp@’àôô”1‰D8çÂáþs ÷QÜLÏ!4>>~÷îÝÉÉÉÞÞ”ïÓÝÝÝååå¹¹¹jµŠ1V.}[ ‰0ÆDîåœÛ §\.ÞÕjµ‹…a €OOO …B½^'„èz$K(ŠÊ(\-Î~?ÂÄóe)ÿþcÜÓÛ{÷îÝÓRéèèh~~®P([ŒÆÙI3í¢–àaŒ|ßW%™L&‰R©|||¼ººú§ž®™™iYUëÕêÎÎÞöö¶P Ñh´»»;‹]FrHH?þøã5§¼çK'ç€%¬ªª‰X–U,ž”J§”x‰ÎNÝè¸Õ[×u!¿c@ÈJ©ÛpÇÉÌu\Bˆm[ÑhÔõÜBápkksmmm{w»\.Ÿœu]Ïds_ýõÐШpœp©I>iŒ1%$‘Här¹“““Ã÷õz½zZ9;;{õêÕ½û3Ñh4_ìÙeÏLQ”þþþééé“““£££íÍ­•••ÓJ‰sÞ™ê´m!nÛöéiõô´*e†a$“I]×c„0U ³þ0vF—¸PcÀB”I–U%¾_«U‹Å⻣wv£!Ér:=ÐÓÓ“L&Eÿ@ÂX˜a¬Eôˆ¦ù¾ïº®ïù„Ë®7b±T­VTU1Móìü¼P(ضÝÝÕóÕƒ=ŠÅŒ1ÎA’þ[ñü!Y–9cãX,6>>¾µµ•_ß8.–;¢‡[[[“““ÃÃÃÃ1f”bI—‰D"›Í*Š’ÈÖj5ÆI,OtÆ #âyžØÜÎD*›Íær¹D"œóÐ’ûÆzKŒFhÄ0‡ÇÇ3Ý=ÏK§•r¹R(*•ŠMï›GŒÂ«Jooïìì¬'år¹³³SÕÕýÝå—/Ïju×ñ{{û&&2™LÆìˆ‰l10!2wˆúùjïˆjIf Ó¼u;=:6>04¼òz½nY[[;årEQ4Æ@Q4×u5MÑ¢\’$Í0ÀˆÆ»zú(!!JéþÛ=Ç£û‡ùmU3ÆÆ3ù毉xÒu}MÓ„’.åZ¸Éž>ÆkªntD£±„GtcYˆBˆÈCb¡Bx],eÔ'¾O|Â(’0aôíÛÃ…ç/VV^3##wîÞ½wûö€iÆž!»Û7þîFéH$‹Åb±XGGÆ8ªª,Qüáû~³Ëˆæ™,Ëš¦yž÷îÝ»•••/^Æb±l6ûàÁƒÛ·o7Wfá Ü`<‹í'„ë5÷ýR©T,)Ì+Æ‹oE÷³¹¼¿¿¿´´ôòåËZ­vëÖ­±±±L&3<<¬ëzà,Ÿ‚›Ëa\ÔŒ1˲„`”eYˆ'1Æ÷}‘oƒ¬K !žçU«ÕÅÅÅùùùÃ0¦¦¦fggïß¿/Òu°eŸ‚›ìõ*Š"¬}~~~ppP­V5Mëî››¾AK|߯V«sssKKK…BA–å[·nÍÎÎ>|øpllLL ‹nq¸4vÃv€F£‘ÏçWWWëõúÀÀÀÔÔýÙÙÙd2)H„ !¢RÚîîî›7o~ýõ×B¡`šæÐÐÐøøøÌÌÌÀÀ@ð_š§‡KÚpƒœÅö{žW,766677 !=ÊårbLP ŸgŒù¾O!„=þü—_~¡”ú¾ŸN§§¦¦r¹ÜÄÄ„$I¶m‹ãMìš(È l ßë¹G$j‘lÛ¶m;ŸÏ¯­­ÕëõT*õøñãï¿ÿž1¦išpc!?eYy[Ó4ÆØÒÒÒO?ý´¶¶Æëííýî»ïîܹ“N§…1#‘H3=Œ±(ÔÂÅvx;™V0¯Õj¢ËóúõëR©4444:::;;FÅ!$f¯/E¡”‹Åµµµ'Ožäóùh4:88˜ÍfGFFúúúLÓìèè€Ë(}2]Eø^oPK ½q||üìÙ³£££J¥"$w.—i>Qˆ‰–emoo/,,lnnÆãñ¯¾úêÞ½{¦iö÷÷›¦Ù<>tè~a8'*ÆXä^ß÷ÇÙØØ°,+“ɤÓéþþþd2¸´¨‚Wíâ!žç¹®«ëúôô´¨ºººD‡ÄÄæ)$çfuåîîn£ÑH¥Rccc£££===¾O¡©a¬^è³t:­ëz< ³®®®æÓ®´Y?!Þ?3¸ômq-|[Q˲Dzž§ªêe |ðŠ€?Bˆâû~$7ƒòCÌäC×ÿ7Ó'Q¥Ñhˆ›Žãˆ-¸,qÑGg‰z°9½€¦iÁ1ö>¿A„ïoÃÿÿ”®ëŠ¢ˆF¬iš¢Y ¾ïT!ÚK\:Ž#:ÁAíx!Noíß{¶Úœ[mέ6çÖ@›sk Í¹5ÐæÜhsn ´9·Úœ[mέ6çÖ@›sk Í¹5ÐæÜhEÎÿÈa{WÃ|s8IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.55.png0000444000175000017500000000111611030305445020003 0ustar dandan‰PNG  IHDRt]†_êPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment251PŠ0¼ËIDATX…í•˃ †Ñm@4(º÷ˆX@ˆØ+ûó0ÑìF1×e"óÉü±ˆF4¢hDÿ:~ŒJÎ:eWZAÄò¿¿îÜ¢ZV”ÒÚžâXÑ|†ü•ÊÑ-FœÎ{xQ†$¥¯3|Û¯-†6¥ :ÞZ¨‡2’ˆ]ÔŽmbÆ¿Dÿ¨®\êƒãÎz C5Ï’œ.E‰!ƃ÷(gŒá#eGx‡ñò¨,%=­³rÂ-!;¡æùó«®^ƒކID#шF4¢§ä¥±œZJØ8ZIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.14.png0000444000175000017500000000235411030267147020011 0ustar dandan‰PNG  IHDRYZöô¥Ý pHYsb&2 tEXtComment4786͈IDATX…íØÉoGðïUU/3cÏ`âuÌfccŒI€¢\8äSò¯æ˜ H‘²!'’#cã1Øà…1/³wO-ƒƒ/ôÌàD‚ºÎ]?}õº«^wã ñ®àTNåTNåTNåT~ßd ´,phÂÎÁÆ€u€þ2YH ‚cøTd!À1¤ä›UÏEȨÞ(¸ênÃFNjëAŽûèl†JØKfšOÿÖ×/Ã1Õõ‡Ïê‡Ð*ò0*/J›4³»Ì`rzó×ù0œC°.ÿ8¿X±­Œ3~FSá« ‚œ@f,Ï/ŒW™ˆïîìÔ  š-EÚ2ĉe€Q[{ôÓÂö Å¡ÃËæF ñ²ÝØofF/%ܽ^23À/Îß{d +dÿ×7Û§|á‰F»ôpysøú•8ÞˆÜE6’ÈéZéÉÊžõ‡sžUÎÍÙf;§ªÑ~.W׳Ÿ_ëƒp'ËLÎÁ‹·^Vcㄾ%…¯Út9okã¹w~B €‘¹óN‘B¶´Ç…¼'¤¼¬¢°ÏÛ½¿5xuÚ%}8t©3ydK›T¬•XÉ@+bh­/¬å®L®S¶Î™5¼æƒß—w¼ñ±œòÃc™­3ìâÒý¿ÂOoC ©]3°µ°²?s!Øó#@€NH[_{fçîÌ­ ³8a5„~±¸*¦ï Uÿ4ÆYÂñt&˜ý¥jñÚt?lòFéVýGKåÁSc~Ü´âx;À:ÄãÑbh°c ¡“d¶ÆhÔ[?o†§F)Ûv¤#A‘oãp{c#{é…*ù@o{Ö Íçûás¼~¸ÛкqØôïœsÊ îÝÿ.;6}Êèï¸æ7d®®®1™6T×ÚnõîÖäéÏ´Ò…o[Ëw7/}r5çŒJ|,’å×—Ö×YBŸ¤—æ ãÉËïoߘ΄ä W,ž¹y ¶×‘Nª33*åµ=4Í,K-<×hÖcG`ÝÖÛ•Ã/®ž‡Qÿ¬ïd²:7âå9§ªí{ewvrèÃÉ@@>·ö*§§Îx¬U·6š$<~;[ðñj¥úonæËéb(BìÓÊvýÆä€3 °ç$™ADF²§Š"o=ÔWÇúÔÔ­Ù‚Ðh•½ZjÎ/@:©iw’_.2ƒ6€guŸl¨ÀŒXƒ¬î,ý‘+^œ`‚×¹ æ Yöm줂œ\ùöñØ77Ã.f‡ÌÇCJ€ÉD¥vÄŠØJ´žn5.^úHØž¯@e#ر°œ+¸Z[±€ÌþbmâÂ$µ“öó[Ê’¬òyŽ!Áä$t¥¼åÎeÈëùÿ©£L8:ÁHõ§†Æ}rDL&îμÅ­.ÝŠv¶p+œ“`ò&òçf=KQÐKNlà˜‡([‹]>`§`j•ƒ‘a#) :4©Þòïå×D*§r*§r*§r*§r*§òÿN~“a›Ø¡IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.32.png0000444000175000017500000000111211030300331017757 0ustar dandan‰PNG  IHDRmGÿáÔ5PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment106±ßïÇIDATH‰í•[’¤ EÓ^àDk-Z0ñ"*ÝÿVú&ØqжæwäG‚ÈÃ%ŸÒúOë]ÜÅ]ÜÅýXÂã–×9îŒéî/sâëÊ4¯ë±#ÓMû³œxªú̽3Ü£–žàf²ÓáðwNjr'¸àªÛñtÇIˆ+…›øecŽÏÜs³ÁêRȃß6\ÛEä7ŽÈØi˜w.îÄ#šaÌ%w;å #U º×Cº› õ"Þ©ÈÊÙ×@ª­@y—åbO”Ý’SÕ$2×YÐCÔ,Ltž’Ö1·Õ¤>×ûÂθUÊ!×z½À7p½^Q¿•¹¨'.qï.¾P~B¯ý”m6@Ú½ƒç8Ym\º‰J¹6:vš›^åÔ*|sá7q›S êlãJñÜ8yzŒÜÉ·º*åÏ'n>“v[‡’+pÁQJ¯§&4×-zÚ¯O9kŒ¼%˜)–ýÞ„å0,öý‡öCÿ,Zhv ñ™èÓÞØûSû]í\Ùi÷…¾et¨ë"§¿’8'ô:÷¥9¯óŒ·9Æcï7[üƦ|‚>ŸŸòÂ9®¼.îâ.î?â>?7®£Á@wIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.48.png0000444000175000017500000000076111030303220017777 0ustar dandan‰PNG  IHDRX9@ñøPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment80 ®ìboIDATH‰íÔQŽƒ ài½H Ö}¥è*Þÿ*ûƒ˜ThvŸ6›ú@Ió1ZðÑÿ/lí>söþ›®›Ôf%¯_ô»ŽóhFNÔ±®';ro&¦öœ†~ÆN m£©wšn%Ì|P}‚‘¼ÐW]ƒÂÅ:à6ö  ³!Íãˆ/gà™DÀ} ŸQd‰xsX&IäñBT+׈;bn¸Êc×@w\í ”ìðXgÂêñ)WÀ}…›˜†/yÛÆ‡O¸ÆÈkæópì=6¬Vtñ\Àت¦‰.HCœ¯âõÛ’ˆe/,l^SñP8à{ø©âÙ …㎑ñHâ­h Éíøâ¯”?ýäL¸ ‘ük2줰¸xùJ·ŽþyKÜ?M×5]˯ִžÜ?–f‘´t®¾m)QZ‹´ÉŒÐ[G2-Õià¤}¹IÙ}Ö©Ôæ»¨³¯ÿýÍfþÁü;ü Üó¸…aÅêIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.50.png0000444000175000017500000000110411030303516017770 0ustar dandan‰PNG  IHDRG,Å­¸µPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment206³™QZÁIDAT8í”ÍmÃ0 …igYêNâÞY 6u/`yÿUÊGJ.ZèÕ¡`åäãBÇßç“þ!ƒ o\o¶9åjž9ŸÐ~ŸŒó^µs…Ê“ä8•«X}åØÝT¡Ulù‚é”×@#U_@eìîs$ºÈ—'õ·+õÙx/q{ƒv'Æ6R·À;°NªÁ§xB+BB×rè÷Ý!ßîº ü uI…-’­Ëw±[íƒ>T©B£Êy௨cæ8Ôê>SÓƒ$̰ͳvÖÒÉ'"_õZ"MŒÚÜpkW¡´>P˜ ΩZëSô ÙB­K!)¾óQÂcaŒ _ŽèíP‘L!ñSCµ-€ŒŒœ“AÁ:d^’@>ý†B•Û Œ€ šn2³h%ɈS^CÞÔ% Šžä*|u2½Õ#ú›­øw]—íTžŽhÁhÐÏH2KY(PdP÷Æïç€7[A\"JtĤVÝJ'¤û±~˜²š¶ö ÚGò7[´.ª$…ßÐaÓù„ôéâ`'µ'åóù¢üÒ¶`žeÙîvkÏ´Äëpç׿…¹=sñ<^C/Î?t|~‹+Í…P… IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.20.png0000444000175000017500000001262511030270562020003 0ustar dandan‰PNG  IHDRT6Ö5)Ç pHYsb&2 tEXtComment69íñyH1IDAThÝ{Yp]וÝÚg¸÷¾ x˜Fb"„¨‰‰ƒ,¶íÈîNW¥;e;¤’—ó“(©Tº’ßTuuWµ«üg·Se+ŽÓ25˜”eÓ¢H“"!‘I‘ ’ ‰ñÍïçì|\<$A5 º»Ý½Quê¾÷î=÷¬³÷>{í}ˆÙàA~Áõ zèÞß±ØuícŠÚôËÂù,O:ž§¿z¬çÿÞþ€ü©ä÷Mó¨é1Û§?1óÞ°Þý~gê©ä‹W »ÑÇßͽ>=Õ7°õµ#_õ:=@jé‚ kA "ÄÑ ðk5­µÐ̱«H¸nEÊuƒjU'&„RÆØ-„ + ,¢Z­–ô‚@°Õj%‘ð¬,,hAÅR¡\­^þü’ÐÊñ\)´µÖ3:²½««'Îd8ˆ"Àñ<Á`Û xÊuÔí¹›Qd÷ìy¹£SDÖ€ÉÑ®xõäZXa‘ë%À2Œ±Ö–Ëå……¥)åüü¼ïûÙlvhhHºŽ$QÈJÀ ­5ƒkAUI’`ØÆ*æ[³7&&&®N]_ZŒÀËù•b©BD½Ý= %Õà64¡J/!…¢p¥ZÊf²OXù¸üޱ ‹y/‘I§2€`¶l­”Ç~kAD ºq †elL†µZíÎ;gΜ9wîÜôôôÄÄÄââbOOÏ–-[öïß¿oß¾¡‘álss¥VUJ¤Ói°®ÔÌ&á$a#x.˜nݼ3wsjòúÒÂò@ÿÐÐöÑíõé©K—._¼xñ³O'îܼûùÄ•ÿïþYÚ@­´«¢§$òÏÿ×ÿìÝÑÜÒ))Ý0ŠbÇNG$ÖV@fHIR `aaáÔ©SG=qâÄ©S§¬µ•J¥X,Ž:>~~üÖ­[}½½Ö2Àžë²µÌB†A ¥ªËZ¹S—¯¾õ³ÿ÷ó¿=zýêõ-½ý»öïÙ6²}t`p8ÍåÏ®L\˜¸2ñy_oŸ–º)ÛÌ̤¤TšˆLØäú*ÿËú­9/ÕKµZ¨a ©f01ƒ?P޶Q83;óË>øÉ›o~záB:“~ýk¯ÿç7ÞøWò';ŸÝéy‰Ù³W>¿’J¥:mÊzÚ!!‰E‘”*¬Êqƒª¿twéèÏßùÑÿ÷o~}’X¼rààØóÏ%3:Ómjnñýðæì­ÉÉ©Âr±\,ÓèŽ:•ªÖ* +¥°yðÿã¿ÿW¶“:í%ˆ”e eœíR¬öµÞIH²öÚµkï¼óÎ~ðƒ÷~ñž£×_ý;ßùγÏ>›ËåöìÙ³{÷îééésçÏ1óÎÏôtw ) ‚5J“Ђ„ã%ÆÏ~òÃþèôé3Žl=pøK£/<'•cIHá†ÆŠåüRþæÌ­üJqþ΂JJÙÚÜÒØÒ¬”òýšjÓ‘U7#”g¬Ê#REQ¤•K !„ b&0ÉZf©T¡T9}æãŸ¿ýîùO.XˆÑ±¯¾ö[‡-D*Ó¨ÝÄJ¡45sÃBÌ/.þê7'VŠ+‘5~PqWB ?0AÈ'>:ýÁ‰“ùZt¢±¹½©5ø¦âAÇÝÜÒ±cì…¾þa¿...OL\úË¿ø«Þÿey¥h‰ M‹âˆIiíj†1Ñ‹™ÓªÚQçªÌÄÄÅRñÂÄÅcÇŽøð7•r¹``ûöí]A$RoýüèÿùÉ›W®~îhgrêúÜíÛB+©u$`ŸYaÈŽ+ËåðÒääÝBA“ÃÊI7µôms\ÉVZ/62ʶwô¤3®—ªTòÓÓ3ùÊÊñƒmí¹¶®ŽÏŽÙÍ/öP¤ôª hˆcöj~ç$‚„oÂ(ŠnÂSóÃßž9sü—ï×|?4Q:“ùÚ~=‘L %˜žžùøÜ¹¿ù“|>/„~éå}só ‰Lƒºžg#©P‹*ÕÚ±'¤ëE‘!×méîJ5&k>´’ µlni©né­6_©¶fÚªå@Ÿ}vÙƒçv?ßÔÒÒškB¬r*€ù b¾Ëû¸:ÙUµ°Ö )ÀBD…ÛñññééiJëÞÞÞ¶\.“ÉTªÕF'c¬ÐÕÝ„aSSӶѱ-½ýÍMBjdDlCÆr1¿”_1aKe¿¦¼iWJžq¤ëXËZ@®“H¤Ò)×›[¸¹²œŸ¹ %ûZsmkcÿ»Š±ç:N ÎcüDŒa%H Ê•ÚÔÔÌø…‹ÒK&kå2)ÍB²ÊÍm¹_ÚS(WΞ=ÛÓÓsøðÁ††@¬%ƒÆ2¶ó‹‹åB’@ˆ8J¤–˜%ÁQD$„Rh?ˆ ¥rJi†˜_\pÓ‰ù¥ÅD*½ª²Í1¼¸.UoîKÈã-@B0£ñR>éòåééi/™ÔZ×€;vŒi-âI‚`×®]ÙlöÈ‘#}}}ƒƒýU¿âHÅ6bAR’âÁÚr¹ XhÇ‘J å(Q«!™ð<ÏDüj?9 aó¥¢H¤-„PNskk"™Îf³O“D©¸J ¸žÄÕëvl-IM üšÉ¯}?¨T«µr¹èèì,–JãããKKKŽãT*ß÷Ï;÷ꫯ¶wt()Ò^BRÁÂBK)]¢l6»²œ·ÆÉÅååüÒÝöÖ ‘$EÁuÝæÖ@2ŒÔNÂ¤Ò ¹Ž.ÐadHæcËÌé¸Wºfbzˆ' HÔíÁ‚"Ë—/AJ566ú¾?11qòäÉïÿû•JÅZ»¼¼LD]]];v샦\6K W¨Èš¸fFLð¤noi~a糿ùÕ¯¿ÁŸüüÊí³¹†!+­p¡$˜N§›ššÉTµR*”KÖF‹ËyÇM oiïêÜ,ÁùßþìÏV™+ÕÓW¶ñ"Á–˜`WçW ¥÷Ÿ¼vÕ0„ÕbiâÒ¥ÉÉëW¯^mkË=óíoÛ;7wûرã×®MŽ níjmSR†cÏ€ ØÀf3 ù¥¥k—/WV8íxÛG†·ö0Œ˜„Â2ò¥êñcÇûÑi6ÆrdaJåòèØè®½»GG‡ÀXÏÁÖäq¦DÅŠµÄ–ãìš0D €…a+#@J8.’‰Ôòr¾T(ÀX/•‚4 ÉÔáWzõÕ®®®Ï¼oß¾îî®o}óo¼ñÆ[?ýéèÖ¡g†¶¹N l- ±ê_& RiïÀËûñö;…•üâÊâ­[·îÜ #?0VKŽN¢\ çoÝžš¼n®ö\WçKËwæ +ùÉk3ƒý[6©÷Xóˆ×ظ~Fd@–@ÖLB)¨ÔÀVüÍßüðÎÜ Û RÀ¿ýÆ·^=thÛÈpc¶±£3×ÒÒÔßß·û…ç~ñÎÛ7§§>»8á¥Ó#££©t¢D:©@(–Ë®ë(¥Â0l͵:ÚYZ^º1{say±«»“9رs4™LiÇ‘¤§§gŽþíÛo¿õv~%/•#µììlÏf³ét*•Löõötwµß£ÞuyÍÇN›6¯%o°D–V¿³†m†~-p¤´6Tätuuuwv744„ÄÙ¦|¥L– …•¡¡¡“¿>Q,ðÁ‹{÷¾ÖvPheDÐZcâ…#•N¾|ðe䥒Çß;öî{ï?ywùÎ »ö:n²Zµ×§o,ÜŸ»}S{ž”R€HɦTfË–-m-­â km‚ß@¼:•õ*޵`6ÚskH£Tç–Þ¶Î.ÇÓÆÒj~`”—ŠXÖŒòäÉsçÎízáùÆÆL„J)Çq¬GÅÌtpë@6ÛÜÞÞ><8téÒÅ?:ö½ï}¯éÍŸùéíÚ6<²uttô“ñ ¡d™$úû÷¾¼÷™Ñí¹Žöß xq%Ø28.šÆ‘Ä2˜ 3m9qì]ÀëyÙ¦/•Š¥PŽ8•ô*~Îdï,,W‚HJ·X,NMM-..65e˜92çh &¤Ö¯Õ´v3™ÌÞ½{wl½víÊ×®¹zýJp-¶íx~xd´wËà±~õÉÇÀÏs¶ö¿ôÒ®Áþ^ÏsŸ <Õáâ¾z­ &ªpâPGD¤Äî=»Þüi{aî™lLAK„†ÈÊK’ Ù& D0ÑÜÜÜíÛ·‡†ú=Ï Â N*•ŠëºZk!È÷C"jkkÓZì?¸ûîüíÆl³±ä%Vò%fjhh ÏaA ÛÒг¥£½³ÍK¹&µÒ›Þ·YcvµV{ÿq Šo"†’B)±mÛððÈV  +‘1Æ dxHèJ¥266æ8ž CÀ–+¥r¹¹ÖÚZkŒ‰ÙˆÒZS(¬ÌÍÍÍÎÎJ)Ã0jiÍ¥Ó ^*IDAàÏ/.JïÚtCºo°·§oK*°62>rçô1D=¼A @¬ßõg¤„ç¨îî¶_xfbül5_4Q¥ŸWˆŒ±RéøYM 6°&ð«R1hmmmhh0Æ! Ä N¦<¶æ .œ?ÿÉÌÌŒ#¯~õË™¦ÄàÖA¬µ®ÍÍÍ7æn•ÊDUÑÚÖ´cǶ¡á~Ïs, åØäÞéý ^=«˜@€`Xf (%ÑÑÚøìØHw{ËÍZYÂpä'=Z&Âb±Ð˜i0@Ês®]ùŒ£Z"•2,ûúúr¹VcCDZK)‰X(4A¥Týè£~üã7Ïž=›pJ‰¡íýƒ[-ÛJ¥¢2Žç*×ÓÍÍÐB¹N.×:0Ø×ÕÕXk äæÏ¡!Îß@,ˆA÷v&LÌq IÀ2„D2¡É†»vŽ9´aXYY¸:ñÉ…ñ3~µP.-¦ýø“™™™sŸÍu憇ϛš™=}úô‡üzòÚåö–ÌÁƒ¾ô¥Ã½½½Zic ¬µq®E¡ë:°ÜÞÞ^©T …‚×åmß¾ýùgŸ™Ÿ¿“˵wwuÔ•ëWOŸ>UÊçÿÅ—¿ü?ýÓ—_Ú 2¡« ŠL$äæK<Úgê’È0 @BèÎŽžžöS5®p/]ºü×ý½Ÿ½õ–pu*“Y\^™œœ65x.¾þ•¯|ã›ÿzll4ṄÅõ1X13´ÖüÇtôèÑÙÙ›¥Ri÷î÷x¹\\"LÍ\=öî;Ÿ_™{fôß|ó[{öî%pJéz’Oµ?;ùª«¯7¢z“ãćbÎ' +W»°öùÝûçn-Þ],}çí‰Ë³† ÄéQWOëîçŸûúý˯ҙF~໎^‹,Æ¥TµV•$9òÝï~÷ì™s³S³JÈ…›7Ê•ÂõÉ«ÇßÿÔ™³Aömé~õµ?xeß^/‘ ‚šµV)— jµšç%7ÅuÒ À×'” «9& #W;Å啦lÓü­¹J¥ôá‡Î-Üuž›ö”RJ©†tº­©¹¯³»»·¯ì‡RkúÉD°A¸Zaàhgye¹)Û  \ªœ?þúÕëàðgÿ÷GZYË4w÷Ž—L<ü¥¯|õõÝ»öXØ ˆ˜)é¦Q)—ÙR*~v¿ž€ûC~}Š €5`†µPñ·å|¥¹!Ô¬ã‰b¡˜€e Çq4 bK&ÒÊ "CRšÐw—a¢(r” š£jÍOxÉj¥’H¦+å²_ñ—ï” ·WòóµšßÖžkliNes¹‚ ¢ÐZxN&²6´ÚñV¹Yü÷ƒ_]¿ kâsKqº»š a™‡ `JFÖ(%”²¤…¬÷j™ÈÚÈÕñâGÌ,IÃRJÙˆ£ "¸F"ªV«éæf~¸N22! I$¶\.WÓéF0"?Tž~Zð÷>¯?B^[¬Ö:8&@usY;µÆõyC½.¨ Äõá½2ó½kµ¦c­]ýGA‚D½¬± ’$€8‚ÔO>cÈÇ ®öŠ›ñ¤ÄhÍêá°ÕLp ª%H†%^…¸Q} ê?28î,I€Á$b¶+S=ø‚xõØÄSÈÇ ˜Ø XZ— Q]Õ«m<¼Miý® ‘Œmijf¤kû3>Ëã¼èɸ11ˆ,ƒcÞ# ,V£·„XÕùZ?òD/Xs´îð+3cˆ(V>V ì#ñ[kÇòŸ41°`€ƒÈ Ìߨ[‰Íªýþ²Ê=YSéóö¿GÍÇBàz©ÏÀ bP¬õ*ø&…™‰âó¦³Å:G`f&¯ÛdÛ¨ûx{·ÿ)1Ð ”ºV©IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.10.png0000444000175000017500000000063311030266253020000 0ustar dandan‰PNG  IHDRO9…akiPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment77ReIDATH‰íÔK’ƒ àŽ¹€:@IÜ‹„È~FàþWIS45&±1Ë™*Ùø§ø0à>kßpÀ?õœéiÇ44ÂdggJæ»æ \†^4Å5Q\YZ«(T \B÷ISnDê?ÿ¾ÁÀ(‡¾Çq”B4ðÅU};á¶øŠ1h­`da†sÝ/>à/µšù*?—Ä $+3ÇÁÅÃfÂ7Û¼b!ž‰3N8û ½U™Ž•é$”%…:KBSÓÊl~v)¨â±)¨’PBB·:è hkªCšœ 4\âÁÙ¦ ökZëÓ~¿AIÐv;°‹°Þ‡Ó§0¬qÞbÕžîÄÆ>Ò «õ³]üs°Ã˜†\;àÿ'|½<¿\DNLIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.8.png0000444000175000017500000000106211030265714017725 0ustar dandan‰PNG  IHDRTB;ÊìtPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment39† °IDATH‰íÔKrƒ0 `™ôæqd0ì Ø(öý¯RI¦¥nm&û‚Ɍ?dYüÜË\ô¢ÿ‚Z}üÖáRHõp¿_Ï4¹2Ij-ƒ5È[“¢Ð%:zª†\‚t•Ð*,œa­2­j(t!„F*Z9;ƒ˜âô Âp¿Û$ Âû#EieÜo7\&iåÜÀÍì[ã>qúÎt#ʽ87˜(õ»®HÝA§(µMÉc‚Ê´‹R§i¹§Ã´ŠS.]Ót_¢Š÷Üéó„jLIa~Ò·]ñUqDz¦x:œFœÎ°Ó•_ö¬ºÜÉ!´ü=YÕiÉ¢éödpÄiŠ•°ÍÑ`¨²q¼ŸSNfq‘EÛö©aYE'Úüg`•Rú™z±½7ÒÏÔù L1J†j¦”‡$Å9ú\u-Æ`ƒ¿?@ë›)¿ÛŽRlÀâ`q½¦)}{-ý°n”ŠÞsêã®ù óžÂŽ£ëât†Îкà>è+«t“¢ÕìmTk Å” n‘³DÑÆ(d¹ ÿÝ $}¥­ÉóPþ¡ÒûµÕZ›3zz]ô¢Ÿƒþ*¿WT¾IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.16.png0000444000175000017500000000160511030267631020007 0ustar dandan‰PNG  IHDRQ=ðÒÚË pHYsb&2 tEXtComment125b6!IDATX…íÖßOGðïÌîÝù|‚CŠˆRõ!ª*õïïS¥VЍø‘¦¡)6‚‚Øw·¿¦U•Òã,PóÐHž§Ó®îs;»³{K‚Oü©Á™8gâLüÿˆÆÁxäñÎ^ÄY^&<@ôÆ k¨1Ä„”f BÄQ( ñ€POê7¨#+UѲª6žŽ§µsD§/Qú˜ét˜V”)Å^çWn Ž+UÛ(¥þûºbx ajÜ(¿Ç"3T‚:HR*.ÕóRS•ç¬÷)×RðV÷ÔðC˜R¢<-t6™vöÖëUeÕr†O˜#Éj³O) ò<5°„‚tj¬ÉWºI÷•>¨œ÷‹äÁåˆíJ°W}GÅ‚¬ çJ-]vB€ëöÊþ¢fYDºås]é¢8 Râ˜6Ssº`G”†šs“ËìÇètïÕ ì¶U/”&%‡ÌWÈÊ0¥vVôYn –UðOÈ#(Å÷,i½•+U…—êç QìÚ~;Ë!Šzç›»”ÓÞ¦GqÒ“þ+úýf¡é»ïIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.47.png0000444000175000017500000000070411030303116017777 0ustar dandan‰PNG  IHDR^R/>~&PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment71ú1À;BIDATH‰íÔÝ‘ƒ `4 `¼”»Ô"¤ý·r»ü\FC_3ðàèÌ,ë²Äž¤úꫯ¾Ä+{‡‡Tî]e½flš&1^a–lÎù•øÑ€”à´Cÿ|k­¤~Ú‘7Cðk8n³ú/ïIê;ßus>!?Y•0nÅÝ>Çžâʆ^ðã¾Oxãqeí—EÿóíÂýœñCÞDßäò#h·‰÷˱wƒ“Srê³²æë‡¦¤·Á· ¾÷øW ý«&¶ñðxJ]ä¡.CÖá ç…ôœò¨–øVÏ3jSä'ýúïá·©´õ·èåõê@[ϱ9`4£o,¯½xW>¡Ud½¤/Ÿ‰1HmâBîò9Äô(¸h™ûŽL<{ŽL6Ü]½¥›ø{ŸÕW_}õŸêÿͲäªakAIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.39.png0000444000175000017500000000073711030301623020007 0ustar dandan‰PNG  IHDRGKÐ\‡WPLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment95cß)¬]IDATH‰í”AŽÃ EIOôr€ Ð Äd?RÌý¯2¿I5MSº©4‹°@JôäoÛˆÜ>ßâ€è£§7 Sò:¤ăÒá9X2J)ÛìмDjÈÍRÙgµ¢œÝå]€HõmŸHÅý¯ ÄÓ íûò€˜¬Ó­:v–? 2vP"Tg*fò :kÝ´BÂ!ºˆsòú 9¼8MEHv=û®ÏlãíãZb!Ãpr¾<5ïÅéŠë¨&íÂÙô18QÝaÛ‰¡D-ê„F¨>e+†]8€i1Hñ£”IÖw è  |Ê6íÁZ– ¶â-!€ê&Âr‡íÀ5ÃÜD[–ýjðmc÷¶ä-j—ß~‡‡íAçíÀ`p”pD¾1Ü0K¶w¢èíø|§P%´q€ªtž}BÑ:»ø\¿¡IÞBû pHYsb&2 tEXtComment391ýý‡ÑIDATX…í—IoÇÇÿ¯–žéž•3¦8$­…â"AŠ ^ '²!€— çœâï⯑O| [@6„P ¶%K‚‰”¸Iâ6Ãeöéµêå 9xZ0ø’ðÕèúÕÛþõš?µ‰ŸœpŒ8F#þŸ`kÙ   c˜>Ä1`k™™í °$È!$¿öÎ#(@€ Á ¢4„²Æ ììŽ*¶R~y+vâvÞ”Ä)&†¸>&À„£ 8xº^Ú•‰³“µª„%Pܼÿ”•7V©M*CÒH†Õ¨ï®]©ÀGAíû¾øZky¿:5õÎü(H!xv÷þâ|XÞ-”/Î(‚C£yûAc¬F€•G aãZº23Uøóý'{…B–€å?,„ù7bw{wÍ/M[¿÷ù·ÎûFÐQžÝ}Ô]¿|ù¼½¹ÒÏÏÏi‰[¿_zãêõ˜_|ñÝæ©ª+-¯}³°°Y Õiûcx_0¢Æ‹®ZZìž»v‰ÌúAdÍ;‹æäõR%_Û½³°ØµHߺµn 8`Ž‚±ãÀHôÛsã–úÿ\#œï‹l¡Ôêþî93ØÙ^íYB°gÖ©‚0DI~ÂMœñÙÈ7®k_b°½fàæ<Äa­G[ ¯Ÿ, KÖ@Pú˜1$Jžþ…¨¾5JGöœšk8ê5€Œ&8ùr&l?œ{ òlç. 9J˜Ó´hXº=å̆'fFÛÏ÷{xçÚ‰~¤òÙPÊP%J…›å-Kw¼–µpE2µ+†#)+<™#¥ñÉ×øÍyKYá5™Ãœ wÖCkV6N–EF†+âØG¶ ^GðÃoû7[¹__ÈoŸÐðæ¹µ[q+«1c¿Ç‡šì+ç½aÝ­ad¾¿ñÍíÍ ]¯­ÑjêÝÇOW¿rÆš¶˜ØËg5“"c ¡ÔÑ„n¹7ý‰ /ìRëK¦t_;ç>Ø]_Èœï}¿I#eÅV’ƒBlêÕ3,„ž«ÚûýýùŸýå_,~;-ýú°ú×%ï¡¥ÉeŠ JB"ò±Ä¤¯›´@±Å@t33nq É“¿¿Yu=›ûÕÔn¡êL>ÛÀ©q$ N®à"Qd.å)^$ƒÛÝýéwkîøÉlßÙDF6»ƒ±7#™ÍîÕ‹I~¶@i- Œ^¡æCý£öwŸnw.UÔd …p‚HH„ñÊ]zëœ#-ÈéÙr¬8ЉìËðþx„4X¾Ý„ÿÁÅH³I²ˆýœÎ$÷¾¢ñS® Ô‰‹gÊ  “X’J›ôzJ‚ßíõUœcž—× ý_®b+¨Ð“ :3âÀZcA0öˆ°(6d6lm'[…«ÊÔcÊé8<\s.])‘béwÚÍèìɪ@’VSÃú"vFgÎFѸØ{¢WBç—ï͉83ÅWu7Ù]ë>N¿w#:ûu²¹[÷J& !?þÁ’ŸEÐôòÅ3G­{_ñüG?ŸÖRéa3ÑjÝùðÆ1¡×ºùÙæ`“In®îx•ÔÆò¼9ä×ívÎ^ž|ûÚ$@æú™™•†_<=}¶ O7Ù-fÊ•¼ö<Äi—ë°«„-ÙöFc§nJ™ü™Sc€a Ø©‡n1Sñ”“¿±/¥,tÂ>&Î:iN C0qHd ‰“ I"ØNQX#bmÙÄ*N„-Ò4j(ì³+‚®¢A&çX$¬[b£^î•(„GœÈÔ|‚‡‚ëçDÁŠÿÈ©%b)þÝ&u4Hó°" ¶Cp¢… l%¬Ÿ`™ÀI³&ö~<[`²V!:Ì£I¤:t’€—óS}•iˆÿªýÏþˆ#ŽLjcÄ1âñû»(ÎÛ›šIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.22.png0000444000175000017500000001014511030271353017777 0ustar dandan‰PNG  IHDR]A<?t pHYsb&2 tEXtComment523ôŠÑÒIDATxœí›ûsTǕǿ§ûÞ;oÍSƒžH!Ba /Á±ÀŽã8U[[ùe+ûßøÏÙÚ8ëÝ+&Κ,Þ˜`XB–„Ð[Ióмî£ûì3aÆ»¦¬Ø©­ùÖÔ­[·îãô§OŸîÓÝCÌŒ¦^’ø± øU“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kc¯ú<›û$Ѐ8pü†^`QþÙ±Á#?~mýŸhÞÿÙ®£ÁÐ OC¶W㣭<§vâ”KЊ=PÊ)AU׫î«`Ðõ=(VZ¹€”Võ7T*%Ïó`ÀS` Ï+€kÏÖïÜ¿¿€Wy‡Åå%©•”^¾ÌRïׯ`ÀÄ€ëxD²R©‚+Õj5“É„BxK4šŒK˪¹ƒaJÁS`ö4i­-¿¤•RŽcû†$@@ ()÷ =`©5¿Óžë¦ùlê^>»ûð¹|»¤5gC)ds¥ÝŒçØùBŽ <åÚ¶½³“)dsmáDB’ÉPhá(ϲ¨\¨¬®®nl®îíåMSvt¶uuuºÊ š™¨^)¬A`V$˜Q­º…½\>ŸßËÊåb¡P°,+m9qâ„aX —ëó¯Í¥öIÍ`f)hkkç‹·îÞ½»º±^,}>3—J¥|> øÆÆÆÒíÝŽ’–A¶£ˆØ2} ØžûdeqáÑãé¯ïMOO=yòÄ8~¼¯·§{|||dd8Kxž6 €™¥$Çñ,ih…Ýìöôôô;wfgg766òÙ\¸%tüø‰÷Þ{opppxø ˜A‡DæÕâ®ÖÚ@&“¹~ýúï~ÿÉòÂ"f$ây—+ nëéîîë‡0…A HÔ ”lïéÊÆäôôÇùä“b±xìØ±h4šH¶üÐ\˜!êýWµZÅb£££##¯Ç“©x´eww×SN<M·¦R‰¸<­Ù2Éõtn7¿º²¾ðøñ©3C£gGúúúÖ×Wçff¿º{wòË›ÅÜÞgºÞß?N·µ·Á@­a@ÛÕr6›­T*]ÝÝ£££ƒÂ0>|xëÖ­>ü¨R)ÎÍÝ_^^©V*à–Ê0ß9¾‚4£Zq]×mmmÇ“?ûùû©T: íìd A‰D ¤C¡@2%@+¥”’¦å7„eSÒððð™Ñ³çFF\×íéé¹téÒgŸþqvvÖ)gffÆÇÇÛÒG Ržúûû™)žHœ{íõH¸emc3•J3ÓôôÌôä¤çy®ëh­÷D? Žë¦@&“q]7—Ë ;3°|áõM8®öùžç€òœ epžö¶Ÿ]~«L|¤³#‰-Óq•ë9B‹ÿø÷ïÞšØËL÷»“ÓZKÃéZ}D£Ñ'ND"Q!ÍH¸¥% ¶ô-=Yïí;ÞÕÕ5;ýõ±cÇÒé´Ïçc>´é»r$j£×uÇ©V«Åb1³µµ¶²ì9¶4ȲŒ€ßŒÇ£-ѰƒXJ L€–¦‘lÂÇ2,ËÇ€ˆÈgú,Ë G´Ö€ ’Á@@š®ã˜–%¤‹t:‹·J“¨ºØØÚ^ßÚüó_n,­,w÷vŸ>uúdk:qHL^… ž5%)•R…Bayy9³µeËŽ=­X<ÚÕ‘îëë~ü„Ï']W™&I)™Éõ´I¢jcuumáÑ“µÕJÙ àÚ‹óóþ¶ìóéráò±¾îŽŽ.Ç‚F~ðÁ .?ë/ì¦r|8¯*.„{mìÔÀ!ÍZû#†$ÔÜmgc{~îþ䯾º}[úù»?»<þÓS'}~ƒÀ¢FGºŽ– ËH¤ýý}CC§O<9@¬ò{Åb.·³•ñù##g[SiŸ/t(c˜—ýE×'9ö=… D ­”e€™™ƒ+²’± cWâ_"ÚBŠ%èö­»åbUhã'c—±x"eOKAäi’Û+ìdW––îMNÝž¸¥<÷íËãï¿÷îÈÙa_ÐÌïæ7×¶|>Ÿi™‚axU+n™ •Š·$-ñx‹IÔÙv¤³½3 ݼqžco¼yüØÉ` ðý¡à¥ø¢÷ \‘™kÉ®mÛ+++…|Ñ0ÅÑÞî@ @"DBá#­m‰hkngÏgM3ೂ`H!À Á`•Ëm///ß¾{{jzRêK¯]¼pþHgÂõÊ[KÙ……Ïó¤ÅÁp7†§Èy´8¿¹™Y[Ý=7–N‰†“GâŽó[V©°×ÙÝ»º´bù"Ìf¹ª‡4â}…ñ‹aJq¹\]\\¼zõêƒùG±Dô­wÆ_»0fCÀ¦dS*I.«hkÒúÙ”,êé¿«õ^nwæÑôäW7oÞ,•J£££¯¼~êä 0°ºº833333‹ÅZ»cm”0„èªSžœùøã߯®®¿}eù¿øåÙ‘$ }–EXE[‰x< “Wáâ8ŽeYR’çyËËË×®]ûË/tuDÛZΜIÄá1ïöW–³Å‚ úÏ ÅRIéóWL ­±µ³ûðáܯýáË[7/<éé=ª,ZÚ\Ý-å‰qÿþýû÷ïg³ÙsçF\ØJ¸D.WX^^ÿð7ÿfÛÎÎváÌÐùhËrÛ‘ör¹º´´4;;[(ápooo:ŽFý?tàyžeY,Ë …BBˆ|!ŸŸËOÏÝZXÐBV«ö×îÏ<|(}þáÑóÇÇ;ûz"1¿<`-³yïÞ½Ï>ûÃG¿ûíÚâ"\lfó[Ù½À§×\×ÖžÚÙÍØ¶=8pòR4Š´0CPYfÀ4ý•={êνëÿõgÇæ¡!U,–§¦¦æççÛÛÛûúz.]º˜J%øðòÆoÄ]Þ?|=0M3 C2#“É,=]Îås6´b,¯¬>]Z™ðhck3]yûÊ[ãouvuûMÁ€£1ÿàÁÄí;Ÿ\ýtáë9° ¯ª·7v76¶·6w2«›¥|ÅvõØØÅ÷~þþÀÉ¡ ¤ÒäóË%[kš°àÙÞòÊšR¼µ•YXX˜™™) ƒƒƒ¿üåûo¾ù“®®NË?Î|3„@*•º|ù²]u'&ï–•W*”—'“IKgÏ Ç£±ááážî.¿%kë&©xª«³ïñâŽi‘mW¡´ÏoZ†$æt*ÙÖ~äÊO140ÖHÔJg,†‡ÿéMÉÖúúæöö¶[uŸ>~BþPÏÙîááá³g‡»¶Þœ7ЋûàöG€ÖZkm×U{{{KOWæ=XßÞ F#Ùl6™LFÂÑîÎÎp8GÓ©3$Õ}oee+›ÍÞš˜Ô,V”eÑhTŠ…œç¸~¿åØ•€Ï:;|æôÐqƒÀï34à)Îîæ×Ö62™J¥R*•J¥’ÏçK¥RíÝÝ‘–iBk0³!Ça^˳É:J±çjO«•- H)MÓôûý¡@ ¨WÜ3™áV¹\.—íx~†Yk°M¬èDÜ'A¦ÕòM˜j_„m£R©V+¶ã8áHÈ4M¿ßôù@ûviÖ’'?ú®\˜™´]­¡ýLµ:ô¼ú¹ —ñ0 ÁŠêiº^Òû·Õ–«5 ÍÀ $µ•lÞÿÕž çŽs¸Pð}¸Ô$Ío\ÐZëÚú0èy²U¯m ^zfÖûî£4'<À¨=è_žWgQƒò7Ç’n èZËò”+¥$HÔ#'@)®• Äõ#@Dˆ¨ÑZj="ÜH!åµMZ3óa-Q/.L¨ºD$ø@hd@¿”D!MÀD-†Ñó£>°}äà&Q÷¯ZOÌĺ6¼|Ñ’ÃþÓ½ô?¾ïº…šñ¬0¼_@®Õù~DJ33Kaôöç{fš^(X½Íq­‡òiªMÐ=³äYü902'z¡Çüžz™Ë«é¥‡ŸcÝ·ñ[°Øô¿X°¿ïè[ßóWÒ÷åòÿU?þŽ­¿M5¹4V“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kc5¹4V“Kcý´ðx+Û5IEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.36.png0000444000175000017500000000103311030301225017770 0ustar dandan‰PNG  IHDR^IF/Œ~PLTE222eee˜˜˜ÌÌÌÿÿÿ(ÎäI pHYsb&2 tEXtComment30éZ5©™IDATH‰í•Arƒ0 EeÒÈHH÷`̾€¸@±ï•J†L'ÆVÒm-Ïð$‹oîoððø¦3Ûª3óKÞ^2Ƭ¦U¹Kxæ-¶@ÁŒ9¯îaÂ3+UR¦_€2rý•‡5²Yâ—JlfWª‘ЋtWAƒÂï5SI0ÖÄóJâ9F–>üò½ÈOÝUÝ9é¡_®¿´g8qã·>.¹¨ß±Ý2ÃöY¹Ág'yÛlž¡C׳wwéÞçZ÷²åÌîýà¬Aúh´9GÝ®ù :7[¶òùÊÇîûÜÌíæÈ÷kՔÅN¬)¡è×1|ó-NÝ~¢Äëo¦·û—õ$"˜ü˜ö]IðúÖ;ö„S$ÎSÏÙ• ¨¤œg>çÛJÏ,‰‡|†¨%ù¡eô:yÞáÙ9çÈÌLòV“ËŠÈÔOðÎN±Dšðÿ‰ÿMI!W• ¿wIEND®B`‚leptonica-1.70/prog/recog/bootnums/pagenum.4.png0000444000175000017500000000236411030264626017730 0ustar dandan‰PNG  IHDRS<?{ÙS pHYsb&2 tEXtComment30éZ5©IDATX…í—IoG…_u÷Ì3¤DÒ’µQ[,K6ÇñÁ‡üêü‚\ƒ ‡äÄ›dk3©…2Å}–ž®ÊÁMç@2€¢9 ¦õªêuÕà«?êë#ï˜ÿ{&3—à r`€™@XÄås0iÜóJ)LN(EB€€D š'N3F P$n%Ê•Ë!„ðé«0ˆs!ÿÁ$íÖe£|mg;Ò€”dƒÞˆÈ¢¯æÀš‰wÁu_üuÒìgñæ“ç»RÎ#$§ï;9ôÂêöfIfCÇLôøÕ«ëΠ׾j?*)EÈ/_¼º•EõöÌÇôÎËd —´muYú—«æË-zã–Y«Ó y™´ÐŒX'µƒÀ™ª.­…½““ŸFÍ«¡ÕγƒÛ¾Yß©†~·uº°?SúD˜ Äš…pÕwëýØ}Þ‹HzÓÞÖ³åå4±½_Y<®, i^ù¬Dˆ|ÚóØ ¨®F†Š%„îùi·ºåYwŽÈÅsÆ bÖð¼–DHG+Áú=#”ß7‚°Á˜Z•®_ß®DP2u:|ÖðÉ#14ñ°uÖZyºSÒ‚Aë*..úÈJ•ж¯º ™î§‰¼(;(Œ®ßýù²úݺ!Bçú& Š”(D¡vÝŒg̰1S@aWwÎ_üñ¡¼*ØÑð¶Õ³DÊ(8g³´³Ì€~Q?Ò ƒ‹ãÃׯÛWç­œlÂYgŽ6Ílž2¦C¿ð‘ÁªtÐi·o®u´T´§D¬ ã„´bOi¦‰;Dœ"ä&Õ•½rþ~pZÚ®[tFùa H ÓTëb¨ar[˜/N2;˜`y+4îåÑï„&M›%™ÃŒ&€ÒsiÏ (NüÂBÚïõŽš—ýš±™Àx,pÂ6N<ÕE“=Ï$ ¢û{S»ÈÃÌ+ú&ç €8¶B °ž>ÆÆ‡F‘0à2&rˆÖ7Vª‘ʙʕ%ñh—å:\ô§›_ô§ HàÈØA¢T–ƒœý€K¬¿¸An.fbìpÁÀŽš·R®– ¼µR<@²öU×»_/ S™ã|úÈóáèPW«a0¸>V·V‹…úË+]áøºÙѵZ ôqnÏfæ¢Mãçw·•-¿‘4ƒ½§eVþâæÁIóMÅøì¼ôøÉ¦§ôÔ™àYòæ«õB¯àìî/xp&ZÝNøméî[ïá³ïC_aª‹&˜ "D& ]©ÚêÁã¥"ਸþ(td`mí᳃HsßÉM´ô M¥Z\ßüf™ÓšÍ½}òÏn-ü•­ƒz8Ç‚5ÞmDXáæ|¤F¦¦Ë÷BÀ²ÑBÈ[箂¿¸²R+º&šd‚2.óu⢜4³‹f(H¯ŸºP, Sš>F0—vöÏÀ)ÅRp”“Gå4„A€þ{˜”!ˆN‰4ŒvL€h#€R`E ÖYë ÝýÝ1ï˜wÌ;æó?Àüåÿ:c/_0¡IEND®B`‚leptonica-1.70/prog/xtractprotos.c0000644000175000017500000002271312267060734015410 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * xtractprotos.c * * This program accepts a list of C files on the command line * and outputs the C prototypes to stdout. It uses cpp to * handle the preprocessor macros, and then parses the cpp output. * In leptonica, it is used to make allheaders.h (and optionally * leptprotos.h, which contains just the function prototypes.) * In leptonica, only the file allheaders.h is included with * source files. * * An optional 'prestring' can be prepended to each declaration. * And the function prototypes can either be sent to stdout, written * to a named file, or placed in-line within allheaders.h. * * The signature is: * * xtractprotos [-prestring=] [-protos=] [list of C files] * * Without -protos, the prototypes are written to stdout. * With -protos, allheaders.h is rewritten: * * if you use -protos=inline, the prototypes are placed within * allheaders.h. * * if you use -protos=leptprotos.h, the prototypes written to * the file leptprotos.h, and alltypes.h has * #include "leptprotos.h" * * For constructing allheaders.h, two text files are provided: * allheaders_top.txt * allheaders_bot.txt * The former contains the leptonica version number, so it must * be updated when a new version is made. * * For simple C prototype extraction, xtractprotos has essentially * the same functionality as Adam Bryant's cextract, but the latter * has not been officially supported for over 15 years, has been * patched numerous times, and doesn't work with sys/sysmacros.h * for 64 bit architecture. * * This is used to extract all prototypes in liblept. * The function that does all the work is parseForProtos(), * which takes as input the output from cpp. * * xtractprotos can run in leptonica to do an 'ab initio' generation * of allheaders.h; that is, it can make allheaders.h without * leptprotos.h and with an allheaders.h file of 0 length. * Of course, the usual situation is to run it with a valid allheaders.h, * which includes all the function prototypes. To avoid including * all the prototypes in the input for each file, cpp runs here * with -DNO_PROTOS, so the prototypes are not included -- this is * much faster. * * The xtractprotos version number, defined below, is incremented * whenever a new version is made. */ #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 512; /* Cygwin needs an extension to prevent it from appending * ".exe" to the filename */ static const char *tempfile = "/tmp/temp_cpp_output.txt"; static const char *version = "1.5"; int main(int argc, char **argv) { char *filein, *str, *prestring, *outprotos, *protostr; const char *spacestr = " "; char buf[L_BUF_SIZE]; l_uint8 *allheaders; l_int32 i, maxindex, in_line, nflags, protos_added, firstfile, len, ret; size_t nbytes; L_BYTEA *ba, *ba2; SARRAY *sa, *safirst; static char mainName[] = "xtractprotos"; if (argc == 1) { fprintf(stderr, "xtractprotos [-prestring=] [-protos=] " "[list of C files]\n" "where the prestring is prepended to each prototype, and \n" "protos can be either 'inline' or the name of an output " "prototype file\n"); return 1; } /* ---------------------------------------------------------------- */ /* Parse input flags and find prestring and outprotos, if requested */ /* ---------------------------------------------------------------- */ prestring = outprotos = NULL; in_line = FALSE; nflags = 0; maxindex = L_MIN(3, argc); for (i = 1; i < maxindex; i++) { if (argv[i][0] == '-') { if (!strncmp(argv[i], "-prestring", 10)) { nflags++; ret = sscanf(argv[i] + 1, "prestring=%s", buf); if (ret != 1) { fprintf(stderr, "parse failure for prestring\n"); return 1; } if ((len = strlen(buf)) > L_BUF_SIZE - 3) { L_WARNING("prestring too large; omitting!\n", mainName); } else { buf[len] = ' '; buf[len + 1] = '\0'; prestring = stringNew(buf); } } else if (!strncmp(argv[i], "-protos", 7)) { nflags++; ret = sscanf(argv[i] + 1, "protos=%s", buf); if (ret != 1) { fprintf(stderr, "parse failure for protos\n"); return 1; } outprotos = stringNew(buf); if (!strncmp(outprotos, "inline", 7)) in_line = TRUE; } } } if (argc - nflags < 2) { fprintf(stderr, "no files specified!\n"); return 1; } /* ---------------------------------------------------------------- */ /* Generate the prototype string */ /* ---------------------------------------------------------------- */ ba = l_byteaCreate(500); /* First the extern C head */ sa = sarrayCreate(0); sarrayAddString(sa, (char *)"/*", 1); snprintf(buf, L_BUF_SIZE, " * These prototypes were autogen'd by xtractprotos, v. %s", version); sarrayAddString(sa, buf, 1); sarrayAddString(sa, (char *)" */", 1); sarrayAddString(sa, (char *)"#ifdef __cplusplus", 1); sarrayAddString(sa, (char *)"extern \"C\" {", 1); sarrayAddString(sa, (char *)"#endif /* __cplusplus */\n", 1); str = sarrayToString(sa, 1); l_byteaAppendString(ba, str); lept_free(str); sarrayDestroy(&sa); /* Then the prototypes */ firstfile = 1 + nflags; protos_added = FALSE; for (i = firstfile; i < argc; i++) { filein = argv[i]; len = strlen(filein); if (filein[len - 1] == 'h') /* skip .h files */ continue; snprintf(buf, L_BUF_SIZE, "cpp -ansi -DNO_PROTOS %s %s", filein, tempfile); ret = system(buf); if (ret) { fprintf(stderr, "cpp failure for %s; continuing\n", filein); continue; } if ((str = parseForProtos(tempfile, prestring)) == NULL) { fprintf(stderr, "parse failure for %s; continuing\n", filein); continue; } if (strlen(str) > 1) { /* strlen(str) == 1 is a file without protos */ l_byteaAppendString(ba, str); protos_added = TRUE; } lept_free(str); } /* Lastly the extern C tail */ sa = sarrayCreate(0); sarrayAddString(sa, (char *)"\n#ifdef __cplusplus", 1); sarrayAddString(sa, (char *)"}", 1); sarrayAddString(sa, (char *)"#endif /* __cplusplus */", 1); str = sarrayToString(sa, 1); l_byteaAppendString(ba, str); lept_free(str); sarrayDestroy(&sa); protostr = (char *)l_byteaCopyData(ba, &nbytes); l_byteaDestroy(&ba); /* ---------------------------------------------------------------- */ /* Generate the output */ /* ---------------------------------------------------------------- */ if (!outprotos) { /* just write to stdout */ fprintf(stderr, "%s\n", protostr); lept_free(protostr); return 0; } /* If no protos were found, do nothing further */ if (!protos_added) { fprintf(stderr, "No protos found\n"); lept_free(protostr); return 1; } /* Make the output files */ ba = l_byteaInitFromFile("allheaders_top.txt"); if (!in_line) { snprintf(buf, sizeof(buf), "#include \"%s\"\n", outprotos); l_byteaAppendString(ba, buf); l_binaryWrite(outprotos, "w", protostr, nbytes); } else { l_byteaAppendString(ba, protostr); } ba2 = l_byteaInitFromFile("allheaders_bot.txt"); l_byteaJoin(ba, &ba2); l_byteaWrite("allheaders.h", ba, 0, 0); l_byteaDestroy(&ba); lept_free(protostr); return 0; } leptonica-1.70/prog/flipselgen.c0000644000175000017500000001013612242266432014754 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * flipselgen.c * * Generates dwa code for hit-miss transform (hmt) that is * used in pixPageFlipDetectDWA(). * * Results are two files: * fmorphgen.3.c * fmorphgenlow.3.c * using INDEX = 3. */ #include "allheaders.h" #define INDEX 3 #define DFLAG 1 /* Sels for pixPageFlipDetectDWA() */ static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; int main(int argc, char **argv) { SEL *sel1, *sel2, *sel3, *sel4; SELA *sela; PIX *pix, *pixd; PIXA *pixa; static char mainName[] = "flipselgen"; if (argc != 1) return ERROR_INT(" Syntax: flipselgen", mainName, 1); sela = selaCreate(0); sel1 = selCreateFromString(textsel1, 5, 6, "flipsel1"); sel2 = selCreateFromString(textsel2, 5, 6, "flipsel2"); sel3 = selCreateFromString(textsel3, 5, 6, "flipsel3"); sel4 = selCreateFromString(textsel4, 5, 6, "flipsel4"); selaAddSel(sela, sel1, NULL, 0); selaAddSel(sela, sel2, NULL, 0); selaAddSel(sela, sel3, NULL, 0); selaAddSel(sela, sel4, NULL, 0); pixa = pixaCreate(4); pix = selDisplayInPix(sel1, 23, 2); pixDisplayWithTitle(pix, 100, 100, "sel1", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pix = selDisplayInPix(sel2, 23, 2); pixDisplayWithTitle(pix, 275, 100, "sel2", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pix = selDisplayInPix(sel3, 23, 2); pixDisplayWithTitle(pix, 450, 100, "sel3", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pix = selDisplayInPix(sel4, 23, 2); pixDisplayWithTitle(pix, 625, 100, "sel4", DFLAG); pixaAddPix(pixa, pix, L_INSERT); pixd = pixaDisplayTiled(pixa, 800, 0, 15); pixDisplayWithTitle(pixd, 100, 300, "allsels", DFLAG); pixDestroy(&pixd); pixaDestroy(&pixa); if (fhmtautogen(sela, INDEX, NULL)) return ERROR_INT(" Generation failed", mainName, 1); selaDestroy(&sela); return 0; } leptonica-1.70/prog/converttogray.c0000640000175000017500000001010312242266611015517 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * converttogray.c * */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 d, same; PIX *pixs, *pixd, *pix1, *pix2, *pix3, *pix4; static char mainName[] = "converttogray"; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: converttogray filein [fileout]", mainName, 1); filein = argv[1]; fileout = argv[2]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); #if 0 pixd = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixd); #endif #if 1 d = pixGetDepth(pixs); if (d == 2) { pix1 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, TRUE); pix2 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, FALSE); pixEqual(pix1, pix2, &same); if (same) fprintf(stderr, "images are the same\n"); else fprintf(stderr, "images are different!\n"); pixWrite("/tmp/pix1.png", pix1, IFF_PNG); pixWrite("/tmp/pix2.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixSetColormap(pixs, NULL); pix3 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, TRUE); pix4 = pixConvert2To8(pixs, 0x00, 0x55, 0xaa, 0xff, FALSE); pixEqual(pix3, pix4, &same); if (same) fprintf(stderr, "images are the same\n"); else fprintf(stderr, "images are different!\n"); pixWrite("/tmp/pix3.png", pix3, IFF_PNG); pixWrite("/tmp/pix4.png", pix4, IFF_PNG); pixDestroy(&pix3); pixDestroy(&pix4); } else if (d == 4) { pix1 = pixConvert4To8(pixs, TRUE); pix2 = pixConvert4To8(pixs, FALSE); pixEqual(pix1, pix2, &same); if (same) fprintf(stderr, "images are the same\n"); else fprintf(stderr, "images are different!\n"); pixWrite("/tmp/pix1.png", pix1, IFF_PNG); pixWrite("/tmp/pix2.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixSetColormap(pixs, NULL); pix3 = pixConvert4To8(pixs, TRUE); pix4 = pixConvert4To8(pixs, FALSE); pixEqual(pix3, pix4, &same); if (same) fprintf(stderr, "images are the same\n"); else fprintf(stderr, "images are different!\n"); pixWrite("/tmp/pix3.png", pix3, IFF_PNG); pixWrite("/tmp/pix4.png", pix4, IFF_PNG); pixDestroy(&pix3); pixDestroy(&pix4); } #endif pixDestroy(&pixs); return 0; } leptonica-1.70/prog/test32-alpha.png0000444000175000017500000000240412036647165015401 0ustar dandan‰PNG  IHDR€€Ã>aË pHYsb&2tEXtCommentAdobe ImageReady•¬ìh’IDATxœíÛŽã8 DÙ‹ýÿ_Î>0¼‰£ /UT—iÌLÇyDÉŽ-› !„âDþª †x]~vÍ™ààõáï\r'ðù”ü+[9”ü’Àl1—€ w$®HNÜ$` leL‚‹¬é¼oÿFÙ–€5@£¼Aë§ç…- Ð3 «ßÚ½Ú¾e þY< ³›&‚§6¼~ü»;(#ƒ™À!ôÛû ßR`¯W’:ïö¦TƒN˜õ“À,øŒ§›ŒxJ0À`T÷oOušðj×·ÏiyØ ¯éàþ9m/}â)@,ý ûþÿŽ*Àá°Œˆª*€÷qSªÀ¿»@DTòGõþ?p®Ûy=úJ]Š,'U/¾Pr#KØ8@eÂÿ¢Ÿ!Àëö3ƒA÷î7̓!™÷î­Þh>—ßÛ翪5@õ”]Ö!G{êßȺ‰³z¾¦#³Ñ­VÏFšð;: œ£EÒ¯Ttˆ¥´Kö'º.Âf9"ÙŸ¨îx…Õ}†- `ZÑ)8ÞOÛA·oÅ$à7h VW$À3¯ËŸ-Es´“@ÌÓJ‚îìž|ûý6t âûüt š¶H€}¨%ã´¼¢¨ûþÏʈ»g/š“ˆ,Ý4›Xž$@õ\öÒ‡`²Iurw(Íxæôç¦9i xÂ#ø»²”<+Á^VG¤÷–¬ÞO¥å…U€•ÄG>t2úÙp"° P@Ï@`¶µe bÔ{çåï=`¸Üön‹›:†A`4ñ•U,âìá!  0šø§àe”/Ê$@`d?\„ÇÚ«öp•I€ÍÉH—E¤Qÿ¦jÃÉÔ~"€8ê«Ï:ÒÞ!P-bòئe*ˆNþê©ýoRª@•¨#µ]aTÀäŠv…Wl“RúSÉ€9ù¨Ui›,˜\ݶÐãWŸšÕø”w }$Cä9ï_‰9ÀÌÓ’•Sr€‘ÛæJ¤¬¥¿ºm©D €`ä¶¥ƒp òš¤„FØý}EO7úÍΩJþ¼`¼‹æØä›Q¦¤B×-'ð †ä²ÜO˜FZ{Ê8±0%?ü´õ4˜’ŸB†(AGi‡7[ýòÚ"¦ò ú¤«¤Ä”}  R×KÀÛb3 Ð5©f‰}cÜ%¬sâÍ’w a«;Ég'½,€!y™¸-jÑX)‡O¿ó2Ü3‚’ £ªï ~úò´)«phn#ÅJ÷ ÌÞHÉëÝ;»[³"ˆ!{ÖNšžx<1[-DòÍð¦€'ª“æLòÍx˜ Ÿá:B%þ§Aï0ê+÷8.9‡‘‹S„M&ŸhñÂ$ë³_ÖD‘ø¬ƒ¢¯Æ=¡J<ÄÁ°3ÝAÄ¢dì®q bÕ`¶®@6 „¶I¿ßÀD¼®aPÅ”åJ :TI¿"Ö Mø6qâ> (>B!„B!„B!„ æ?µ”ÇÜõÛˆgIEND®B`‚leptonica-1.70/prog/fhmtauto_reg.c0000644000175000017500000000656512240303147015314 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fhmtauto_reg.c * * Basic regression test for hit-miss transform: rasterops & dwa. * * Tests hmt from a set of hmt structuring elements * by comparing the full image rasterop results with the * automatically generated dwa results. * * Results must be identical for all operations. */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, nsels, same1, same2, ok; char *filein, *selname; PIX *pixs, *pixref, *pixt1, *pixt2, *pixt3, *pixt4; SEL *sel; SELA *sela; static char mainName[] = "fhmtauto_reg"; if (argc != 2) return ERROR_INT(" Syntax: fhmtauto_reg filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); sela = selaAddHitMiss(NULL); nsels = selaGetCount(sela); ok = TRUE; for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); pixref = pixHMT(NULL, pixs, sel); pixt1 = pixAddBorder(pixs, 32, 0); pixt2 = pixFHMTGen_1(NULL, pixt1, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixt4 = pixHMTDwa_1(NULL, pixs, selname); pixEqual(pixref, pixt3, &same1); pixEqual(pixref, pixt4, &same2); if (same1 && same2) fprintf(stderr, "hmt are identical for sel %d (%s)\n", i, selname); else { fprintf(stderr, "hmt differ for sel %d (%s)\n", i, selname); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); } if (ok) fprintf(stderr, "\n ******** All hmt are correct *******\n"); else fprintf(stderr, "\n ******** ERROR in at least one hmt *******\n"); pixDestroy(&pixs); selaDestroy(&sela); return 0; } leptonica-1.70/prog/subpixel_reg.c0000644000175000017500000002005712240302372015307 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * subpixel_reg.c * * Regression test for subpixel scaling. */ #include "allheaders.h" void AddTextAndSave(PIXA *pixa, PIX *pixs, l_int32 newrow, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val); const char *textstr[] = {"Downscaled with sharpening", "Subpixel scaling; horiz R-G-B", "Subpixel scaling; horiz B-G-R", "Subpixel scaling; vert R-G-B", "Subpixel scaling; vert B-G-R"}; int main(int argc, char **argv) { l_float32 scalefact; L_BMF *bmf, *bmftop; L_KERNEL *kel, *kelx, *kely; PIX *pixs, *pixg, *pixt, *pixd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ----------------- Test on 8 bpp grayscale ---------------------*/ pixa = pixaCreate(5); bmf = bmfCreate("./fonts", 6); bmftop = bmfCreate("./fonts", 10); pixs = pixRead("lucasta-47.jpg"); pixg = pixScale(pixs, 0.4, 0.4); /* 8 bpp grayscale */ pix1 = pixConvertTo32(pixg); /* 32 bpp rgb */ AddTextAndSave(pixa, pix1, 1, bmf, textstr[0], L_ADD_BELOW, 0xff000000); pix2 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_RGB); AddTextAndSave(pixa, pix2, 0, bmf, textstr[1], L_ADD_BELOW, 0x00ff0000); pix3 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_BGR); AddTextAndSave(pixa, pix3, 0, bmf, textstr[2], L_ADD_BELOW, 0x0000ff00); pix4 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VRGB); AddTextAndSave(pixa, pix4, 0, bmf, textstr[3], L_ADD_BELOW, 0x00ff0000); pix5 = pixConvertGrayToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VBGR); AddTextAndSave(pixa, pix5, 0, bmf, textstr[4], L_ADD_BELOW, 0x0000ff00); pixt = pixaDisplay(pixa, 0, 0); pixd = pixAddSingleTextblock(pixt, bmftop, "Regression test for subpixel scaling: gray", 0xff00ff00, L_ADD_ABOVE, NULL); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixd, 50, 50, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixt); pixDestroy(&pixd); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); /* ----------------- Test on 32 bpp rgb ---------------------*/ pixa = pixaCreate(5); pixs = pixRead("fish24.jpg"); pix1 = pixScale(pixs, 0.4, 0.4); AddTextAndSave(pixa, pix1, 1, bmf, textstr[0], L_ADD_BELOW, 0xff000000); pix2 = pixConvertToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_RGB); AddTextAndSave(pixa, pix2, 0, bmf, textstr[1], L_ADD_BELOW, 0x00ff0000); pix3 = pixConvertToSubpixelRGB(pixs, 0.4, 0.35, L_SUBPIXEL_ORDER_BGR); AddTextAndSave(pixa, pix3, 0, bmf, textstr[2], L_ADD_BELOW, 0x0000ff00); pix4 = pixConvertToSubpixelRGB(pixs, 0.4, 0.45, L_SUBPIXEL_ORDER_VRGB); AddTextAndSave(pixa, pix4, 0, bmf, textstr[3], L_ADD_BELOW, 0x00ff0000); pix5 = pixConvertToSubpixelRGB(pixs, 0.4, 0.4, L_SUBPIXEL_ORDER_VBGR); AddTextAndSave(pixa, pix5, 0, bmf, textstr[4], L_ADD_BELOW, 0x0000ff00); pixt = pixaDisplay(pixa, 0, 0); pixd = pixAddSingleTextblock(pixt, bmftop, "Regression test for subpixel scaling: color", 0xff00ff00, L_ADD_ABOVE, NULL); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pixd, 50, 350, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixt); pixDestroy(&pixd); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); bmfDestroy(&bmf); bmfDestroy(&bmftop); /* --------------- Test on images that are initially 1 bpp ------------*/ /* For these, it is better to apply a lowpass filter before scaling */ /* Normal scaling of 8 bpp grayscale */ scalefact = 800. / 2320.; pixs = pixRead("patent.png"); /* sharp, 300 ppi, 1 bpp image */ pix1 = pixConvertTo8(pixs, FALSE); /* use 8 bpp input */ pix2 = pixScale(pix1, scalefact, scalefact); regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 2 */ /* Subpixel scaling; bad because there is very little aliasing. */ pix3 = pixConvertToSubpixelRGB(pix1, scalefact, scalefact, L_SUBPIXEL_ORDER_RGB); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ /* Get same (bad) result doing subpixel rendering on RGB input */ pix4 = pixConvertTo32(pixs); pix5 = pixConvertToSubpixelRGB(pix4, scalefact, scalefact, L_SUBPIXEL_ORDER_RGB); regTestComparePix(rp, pix3, pix5); /* 4 */ regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 5 */ /* Now apply a small lowpass filter before scaling. */ makeGaussianKernelSep(2, 2, 1.0, 1.0, &kelx, &kely); startTimer(); pix6 = pixConvolveSep(pix1, kelx, kely, 8, 1); /* normalized */ fprintf(stderr, "Time sep: %7.3f\n", stopTimer()); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 6 */ /* Get same lowpass result with non-separated convolution */ kel = makeGaussianKernel(2, 2, 1.0, 1.0); startTimer(); pix7 = pixConvolve(pix1, kel, 8, 1); /* normalized */ fprintf(stderr, "Time non-sep: %7.3f\n", stopTimer()); regTestComparePix(rp, pix6, pix7); /* 7 */ /* Now do the subpixel scaling on this slightly blurred image */ pix8 = pixConvertToSubpixelRGB(pix6, scalefact, scalefact, L_SUBPIXEL_ORDER_RGB); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 8 */ kernelDestroy(&kelx); kernelDestroy(&kely); kernelDestroy(&kel); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); return regTestCleanup(rp); } void AddTextAndSave(PIXA *pixa, PIX *pixs, l_int32 newrow, L_BMF *bmf, const char *textstr, l_int32 location, l_uint32 val) { l_int32 n, ovf; PIX *pixt; pixt = pixAddSingleTextblock(pixs, bmf, textstr, val, location, &ovf); n = pixaGetCount(pixa); pixSaveTiledOutline(pixt, pixa, 1.0, newrow, 30, 2, 32); if (ovf) fprintf(stderr, "Overflow writing text in image %d\n", n + 1); pixDestroy(&pixt); return; } leptonica-1.70/prog/pdf2mtiff0000755000175000017500000000174511463463334014301 0ustar dandan#!/bin/bash # pdf2mtiff # # Rasterizes a PDF file, saving as a single multipage g4 compressed # tiff file # # input: PDF file # output file # output: ccitt-g4 compressed mulitipage tiff file scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " pdfin tiffout" exit -1 fi pdfin=$1 tiffout=$2 # assert (input pdf filename ends in .pdf) if test ${pdfin##*.} != pdf then echo $scriptname ": " $pdfin "does not end in .pdf" exit -1 fi # 'echo "0 neg 0 neg" translate' is the mysterious "primer" # choose one of the two options below # output image size at 300 ppi rm /tmp/junkpdf* echo "0 neg 0 neg" translate | /usr/bin/gs -sDEVICE=tiffg4 -sOutputFile=/tmp/junkpdf%03d.tif -r300x300 -q - ${pdfin} ./writemtiff /tmp junkpdf ${tiffout} # output image size at 600 ppi rm /tmp/junkpdf* echo "0 neg 0 neg" translate | /usr/bin/gs -sDEVICE=tiffg4 -sOutputFile=/tmp/junkpdf%03d.tif -r600x600 -q - ${pdfin} ./writemtiff /tmp junkpdf ${tiffout} leptonica-1.70/prog/graphicstest.c0000644000175000017500000000673312265247476015350 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * graphicstest.c * * e.g.: graphicstest fish24.jpg junkout */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 d; BOX *box1, *box2, *box3, *box4; BOXA *boxa; PIX *pixs, *pix1; PTA *pta; static char mainName[] = "graphicstest"; if (argc != 3) return ERROR_INT(" Syntax: graphicstest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT(" Syntax: pixs not made", mainName, 1); d = pixGetDepth(pixs); if (d <= 8) pix1 = pixConvertTo32(pixs); else pix1 = pixClone(pixs); /* Paint on RGB */ pixRenderLineArb(pix1, 450, 20, 850, 320, 5, 200, 50, 125); pixRenderLineArb(pix1, 30, 40, 440, 40, 5, 100, 200, 25); pixRenderLineBlend(pix1, 30, 60, 440, 70, 5, 115, 200, 120, 0.3); pixRenderLineBlend(pix1, 30, 600, 440, 670, 9, 215, 115, 30, 0.5); pixRenderLineBlend(pix1, 130, 700, 540, 770, 9, 255, 255, 250, 0.4); pixRenderLineBlend(pix1, 130, 800, 540, 870, 9, 0, 0, 0, 0.4); box1 = boxCreate(70, 80, 300, 245); box2 = boxCreate(470, 180, 150, 205); box3 = boxCreate(520, 220, 160, 220); box4 = boxCreate(570, 260, 160, 220); boxa = boxaCreate(3); boxaAddBox(boxa, box2, L_INSERT); boxaAddBox(boxa, box3, L_INSERT); boxaAddBox(boxa, box4, L_INSERT); pixRenderBoxArb(pix1, box1, 3, 200, 200, 25); pixRenderBoxaBlend(pix1, boxa, 17, 200, 200, 25, 0.4, 1); pta = ptaCreate(5); ptaAddPt(pta, 250, 300); ptaAddPt(pta, 350, 450); ptaAddPt(pta, 400, 600); ptaAddPt(pta, 212, 512); ptaAddPt(pta, 180, 375); pixRenderPolylineBlend(pix1, pta, 17, 25, 200, 200, 0.5, 1, 1); pixWrite(fileout, pix1, IFF_JFIF_JPEG); pixDisplay(pix1, 200, 200); pixDestroy(&pixs); pixDestroy(&pix1); boxDestroy(&box1); boxaDestroy(&boxa); ptaDestroy(&pta); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/binarize_reg.c0000644000175000017500000001331212240303475015260 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binarize_reg.c * * Tests Sauvola local binarization and variants */ #include "allheaders.h" PIX *PixTest1(PIX *pixs, l_int32 size, l_float32 factor, L_REGPARAMS *rp); PIX *PixTest2(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, L_REGPARAMS *rp); void PixTest3(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, l_int32 paircount, L_REGPARAMS *rp); int main(int argc, char **argv) { PIX *pixs, *pixt1, *pixt2; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("w91frag.jpg"); PixTest3(pixs, 3, 0.20, 2, 3, 0, rp); PixTest3(pixs, 6, 0.20, 100, 100, 1, rp); PixTest3(pixs, 10, 0.40, 10, 10, 2, rp); PixTest3(pixs, 10, 0.40, 20, 20, 3, rp); PixTest3(pixs, 20, 0.34, 30, 30, 4, rp); pixt1 = PixTest1(pixs, 7, 0.34, rp); pixt2 = PixTest2(pixs, 7, 0.34, 4, 4, rp); regTestComparePix(rp, pixt1, pixt2); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Do combination of contrast norm and sauvola */ pixt1 = pixContrastNorm(NULL, pixs, 100, 100, 55, 1, 1); pixSauvolaBinarizeTiled(pixt1, 8, 0.34, 1, 1, NULL, &pixt2); regTestWritePixAndCheck(rp, pixt1, IFF_PNG); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); pixDisplayWithTitle(pixt1, 100, 500, NULL, rp->display); pixDisplayWithTitle(pixt2, 700, 500, NULL, rp->display); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixs); return regTestCleanup(rp); } PIX * PixTest1(PIX *pixs, l_int32 size, l_float32 factor, L_REGPARAMS *rp) { l_int32 w, h; PIX *pixm, *pixsd, *pixth, *pixd, *pixt; PIXA *pixa; pixm = pixsd = pixth = pixd = NULL; pixGetDimensions(pixs, &w, &h, NULL); /* Get speed */ startTimer(); pixSauvolaBinarize(pixs, size, factor, 1, NULL, NULL, NULL, &pixd); fprintf(stderr, "\nSpeed: 1 tile, %7.3f Mpix/sec\n", (w * h / 1000000.) / stopTimer()); pixDestroy(&pixd); /* Get results */ pixSauvolaBinarize(pixs, size, factor, 1, &pixm, &pixsd, &pixth, &pixd); pixa = pixaCreate(0); pixSaveTiled(pixm, pixa, 1.0, 1, 30, 8); pixSaveTiled(pixsd, pixa, 1.0, 0, 30, 8); pixSaveTiled(pixth, pixa, 1.0, 1, 30, 8); pixSaveTiled(pixd, pixa, 1.0, 0, 30, 8); pixt = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); if (rp->index < 5) pixDisplayWithTitle(pixt, 100, 100, NULL, rp->display); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixaDestroy(&pixa); pixDestroy(&pixm); pixDestroy(&pixsd); pixDestroy(&pixth); pixDestroy(&pixt); return pixd; } PIX * PixTest2(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, L_REGPARAMS *rp) { l_int32 w, h; PIX *pixth, *pixd, *pixt; PIXA *pixa; pixth = pixd = NULL; pixGetDimensions(pixs, &w, &h, NULL); /* Get speed */ startTimer(); pixSauvolaBinarizeTiled(pixs, size, factor, nx, ny, NULL, &pixd); fprintf(stderr, "Speed: %d x %d tiles, %7.3f Mpix/sec\n", nx, ny, (w * h / 1000000.) / stopTimer()); pixDestroy(&pixd); /* Get results */ pixSauvolaBinarizeTiled(pixs, size, factor, nx, ny, &pixth, &pixd); regTestWritePixAndCheck(rp, pixth, IFF_JFIF_JPEG); regTestWritePixAndCheck(rp, pixd, IFF_PNG); if (rp->index < 5 && rp->display) { pixa = pixaCreate(0); pixSaveTiled(pixth, pixa, 1.0, 1, 30, 8); pixSaveTiled(pixd, pixa, 1.0, 0, 30, 8); pixt = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixt, 100, 400, NULL, rp->display); pixDestroy(&pixt); pixaDestroy(&pixa); } pixDestroy(&pixth); return pixd; } void PixTest3(PIX *pixs, l_int32 size, l_float32 factor, l_int32 nx, l_int32 ny, l_int32 paircount, L_REGPARAMS *rp) { PIX *pixt1, *pixt2; pixt1 = PixTest1(pixs, size, factor, rp); pixt2 = PixTest2(pixs, size, factor, nx, ny, rp); regTestComparePix(rp, pixt1, pixt2); pixDestroy(&pixt1); pixDestroy(&pixt2); return; } leptonica-1.70/prog/convertsegfilestops.c0000644000175000017500000001351512242266621016740 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convertsegfilestops.c * * Converts all image files in a 'page' directory, using optional * corresponding segmentation mask files in a 'mask' directory, * to a level 2 compressed PostScript file. This is done * automatically at a resolution that fits to a letter-sized * (8.5 x 11) inch page. The 'page' and 'mask' files are paired * by having the same number embedded in their name. * The 'numpre' and 'numpost' args specify the number of * characters at the beginning and end of the filename (not * counting any extension) that are NOT part of the page number. * For example, if the page numbers are 00000.jpg, 00001.jpg, ... * then numpre = numpost = 0. * * The mask directory must exist, but it does not need to have * any image mask files. * * The pages are taken in lexical order of the filenames. Therefore, * the embedded numbers should be 0-padded on the left up to * a fixed number of digits. * * PostScript (and pdf) allow regions of the image to be encoded * differently. Regions can be over-written, with the last writing * determining the final output. Black "ink" can also be written * through a mask that is given by a 1 bpp image. * * The page images are typically grayscale or color. To take advantage * of this depth, one typically upscales the text by 2.0. Likewise, * the images regions, denoted by foreground in the corresponding * segmentation mask, can be rendered at lower resolution, and * it is often useful to downscale the image parts by 0.5. * * If the mask does not exist, the entire page is interpreted as * text; it is converted to 1 bpp and written to file with * ccitt-g4 compression at the requested "textscale" relative * to the page image. If the mask exists and the foreground * covers the entire page, the entire page is saved with jpeg * ("dct") compression at the requested "imagescale". * If the mask exists and partially covers the page image, the * page is saved as a mixture of grayscale or rgb dct and 1 bpp g4. * * This uses a single global threshold for binarizing the text * (i.e., non-image) regions of every page. */ #include #include "allheaders.h" int main(int argc, char **argv) { char *pagedir, *pagestr, *maskdir, *maskstr, *fileout; l_int32 threshold, numpre, numpost, maxnum; l_float32 textscale, imagescale; if (argc != 12) { fprintf(stderr, " Syntax: convertsegfilestops pagedir pagestr maskdir maskstr \\ \n" " numpre numpost maxnum \\ \n" " textscale imagescale thresh fileout\n" " where\n" " pagedir: Input directory for page image files\n" " pagestr: Substring for matching; use 'allfiles' to\n" " convert all files in the page directory\n" " maskdir: Input directory for mask image files\n" " maskstr: Substring for matching; use 'allfiles' to\n" " convert all files in the mask directory\n" " numpre: Number of characters in name before number\n" " numpost: Number of characters in name after number\n" " maxnum: Only consider page numbers up to this value\n" " textscale: Scale of text output relative to pixs\n" " imagescale: Scale of image output relative to pixs\n" " thresh: threshold for binarization; typically about\n" " 180; use 0 for default\n" " fileout: Output p file\n"); return 1; } pagedir = argv[1]; pagestr = argv[2]; maskdir = argv[3]; maskstr = argv[4]; numpre = atoi(argv[5]); numpost = atoi(argv[6]); maxnum = atoi(argv[7]); textscale = atof(argv[8]); imagescale = atof(argv[9]); threshold = atoi(argv[10]); fileout = argv[11]; if (!strcmp(pagestr, "allfiles")) pagestr = NULL; if (!strcmp(maskstr, "allfiles")) maskstr = NULL; return convertSegmentedPagesToPS(pagedir, pagestr, maskdir, maskstr, numpre, numpost, maxnum, textscale, imagescale, threshold, fileout); } leptonica-1.70/prog/blender8.png0000444000175000017500000000342310327060544014666 0ustar dandan‰PNG  IHDR5/fÀÝQgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœ%•½²$GF¿/3«ª{f°Ë*  ^ŸWäq°1°ð ]­öçÎtwUe&Æš'ŽwœÃ¿ ”cŸsÀ:©VL›ex Š$ç y>¡–ŒŒû6ÆÔBä ˆˆˆ ‰®¦BdˆH±žstïÇžZ@Fdͤ¨ ­ª¨©‹šÁž4;æ~Ûú§á´L1IŸÑÜf*¥ÑbÐÖ }¶L€ioÛv;:|Â0 ‰ &’6Q+–¥µÚŠLĤ½¿í½ûHUä ‰ÈHˆÐ€”ºT”¶,ËZWPØûmIED"æt÷ð€ˆI){ ­m=_–+LZOQ%cdmÙ—˜ãȉL£TSÁŒð9.¥ I³""´ Ô–]ý¸ÝtŸ3ĤÇÈ0cîÚD©´“ HUÌœî)I02³D?dÑ’|l³¢!ö ™@´áécvO*ºPÜ#)pÌ#)*ô;«jwpbcÌéÓGw䌮V"n·Õ*‘sŽ"’æË”Ùe™×CÇÆ¤dÌîZ“Z"Dˆ”ˆÙ#hÌů/³^~íÃC:cލ€hY (IQ’7qR޽/w Ÿ«ÀcÄ!Š‘QNZD´V"RFDPbû2$öÛª…<汓ðé1ªqŽCÇz·V3Khj‘Èpwÿø"wÏȱo×—í%2€D(¤Ö ¦Rjˆ aÈ>Žã:ÛhÛ§/#úv#£C—*[ô°º’Ä„ÍÌq»mG·Ëüøérl±,£Ì 2›'0·i>É›e³"@X|¿nZç§Ý—Rî_Ýmÿ*±KmMsö¥‹m,k5¤Xdÿü2òJ̬¯ï_}ýÇ{]Þe=”RòjÏü9ªXö_Ÿš‰ÀÄGw*öýÈÓýÏõrþ\Žw×í¤v•Ù‘‘‘µ·L«ú— Ÿy§ªð³µÖJêÏ_®¬B½këӛ׊Hö.õ²4‰(ú׸nz÷ ,ÇõÅO\¦Ðe•Ó·o¿û¦DÁì]÷l,’jjeב·ýó¾½~8ŸÏú´ü÷èöðê›ÇÖsÛ¯·8¿z=?å¾NÛð¬ÌOð­¿~ùù»7wzùþòé·ÏÙNkãqëÇËË—[Þ4öþüXºÑZ‰‘íž –õ¶¿NåIN§çëõȹoÇ}îûô~¼<¥˜Ø)|£ôòlq›¸é¯¿Ùšœ‡gß+Ó©>2l•à´õ›Çêafb¿[uïòíùÃËùòa.Ÿž?Ô_$§ªU ž†X)f\µ2L,33Q׋`•GÊzÁ)«©–“…V3&¨]´Ôjz(‰D.§3²ÛÆÓã‘U®VÖû6Åàa𢵶jOá‘™–‰NMÐÎbÆåœ\{+Ö¢õfá„df‚"æ@FXNæ¬g¶®ÕR¢µZ¼¦‰J TETMU¶L‚0šyšt.Õ– 9­k‹š ™‹ZkÕôFª@€Ö¢ÈEfç}‰EcúE¤YiÕˆ ½2‚R¼8Or¬Ÿ–¥õjé}¤0¦Cˆth¸bI,†YÂ,®liûÉ/˜¥Ú ÂÕ€8@40 0™$W8BˆCT_—€¯áÒ¾B‚ ‚$5§'@ª„§1üjA’ÿõñ’è®7”tIMEÕ &4ó˜øè^tEXtCommentCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 E=…—IEND®B`‚leptonica-1.70/prog/ccthin2_reg.c0000644000175000017500000001063512270122643015013 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ccthin2_reg.c * * Tests the examples in pixThinExamples() */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 index, maxiters, type; BOX *box; PIX *pix, *pixs, *pixd, *pixt; PIXA *pixa; static char mainName[] = "ccthin2_reg"; if (argc != 1 && argc != 3) return ERROR_INT(" Syntax: ccthin2_reg [index maxiters]", mainName, 1); pixDisplayWrite(NULL, 0); pix = pixRead("feyn.tif"); box = boxCreate(683, 799, 970, 479); pixs = pixClipRectangle(pix, box, NULL); pixDisplayWrite(pixs, 1); /* Just do one of the examples */ if (argc == 3) { index = atoi(argv[1]); maxiters = atoi(argv[2]); if (index <= 7) type = L_THIN_FG; else type = L_THIN_BG; pixt = pixThinExamples(pixs, type, index, maxiters, "/tmp/junksels.png"); pixDisplay(pixt, 100, 100); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixDisplayMultiple("/tmp/display/file*"); return 0; } /* Do all the examples */ pixt = pixThinExamples(pixs, L_THIN_FG, 1, 0, "/tmp/junksel_example1.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_FG, 2, 0, "/tmp/junksel_example2.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_FG, 3, 0, "/tmp/junksel_example3.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_FG, 4, 0, "/tmp/junksel_example4.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_FG, 5, 0, "/tmp/junksel_example5.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_FG, 6, 0, "/tmp/junksel_example6.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_FG, 7, 0, "/tmp/junksel_example7.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_BG, 8, 5, "/tmp/junksel_example8.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixThinExamples(pixs, L_THIN_BG, 9, 5, "/tmp/junksel_example9.png"); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); /* Display the thinning results */ pixa = pixaReadFiles("/tmp/display", "file"); pixd = pixaDisplayTiledAndScaled(pixa, 8, 500, 1, 0, 25, 2); pixWrite("/tmp/junktiles.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); /* Display the sels used in the examples */ pixa = pixaReadFiles("/tmp", "junksel_example"); pixd = pixaDisplayTiledInRows(pixa, 1, 500, 1.0, 0, 50, 2); pixWrite("/tmp/junksels.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pix); pixDestroy(&pixs); boxDestroy(&box); pixDisplayMultiple("/tmp/display/file*"); return 0; } leptonica-1.70/prog/barcode-upc-300.png0000444000175000017500000001234710770123063015652 0ustar dandan‰PNG  IHDRÍ™ZÃ1PgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IIDATxœí¿#ÉuÇ»ÕÆ`l‡Ðle }™' §mÀÈ œRƒÁ6‰6Ð ÍŸà?Áÿ€kšÁ8»PiC\‚êp½]~Uý«~¼ªng!Yº›½å~öíç}ß«"±âDâK=xôŽ~G¿£ßÑïèwô;úOý×CÿøåÐoñø£GóümÑ´õ›¡yNàŸå[¡ÏB¤ð¯ï>Ë'ßKôñG-Eà é¾.E+¿ª£ž¼QUójt“ó<ŠŠ&‚gòÍ>Yè#‚ÎçÐ<çYe<ÜöUzñ,I«?‹:tÝ¥% áË(zhrø:‹ëûô4‹ÎÑ¡éßuèãay„æèºG³û$zH#–“C“&l“ÒB)<~„2YFÊ}€?Då¤Þ¥2×G¾%õ>=°<96+Âî³zZ5›Ò]¯"šCÅB$tCŽ\¡K¾Mé>«YQ› a™šày×=º”­ä:f=šÝ“c“ÊAѪjž±ù6fºžÐ  AJK`ÐË&=²~çmF÷9…èÐw¹è†¨Á‚‚ÝAŠ;4”Ú¡[…æ w:å›hË’*ôxìã @Ÿ|Y±\¡“V¹¦ÑÝ„Þ~͵±ôdDÿüWöK›ÂQУëMz=>…Î:4ϺœÐ T¡AÈa×¹†J×ëÙðe²…BÇ ýÏÙ€æ†Èu&¢Ð)aÛl~sØ3‰¼‰–;¤Uè¤Î»ª[‰—èc¦÷äð@".ÿ H\φ¯CtèÞ5«1…e$]ç°ùRøÍêh>דèº8Šú¥£“b!×°X*¿TûºQh è3è´CßÇ¢IáŽè¢ jÐåRÝ èZî8 `mÆþê·‹Öeª´<;4‘è•DË¥ªŽ‚Ÿthò×Åá{yÁ¯s¹6ËP³¨)d°ÃÇ]ËßrþUz†ŸƒNÎÞîm´èÑ<ëÑ%O /Kû»Â}:‡DÑò hy{4\¿_fü‚ö•蚨{¨¼Îx‡×¡y6÷üÃüSpôü£Žò/…¦_Í–?ÿZtû³/†¾âñÿýC+ä|~;ôg¸×ñ¥R¯’“{Æ^ƒ†×‰UUŠ&kS¸5šèã«ÐŸ¿ýxØæMLSA4Ïš=V].GÿøXš)Kœ¬äÝ­ºM­W=¡—»>Õ‚Â=€Ž¢»­‰†ÃÏD¯D§Œ Uoíªß}×¹NßÀuNݪ+´ê+ÂOõ É­áSè¡=ºžª…ˆW¸¾(4Ñ™æÚQèó•®5ô:÷¡¯âMîúš6^\×!!§«rÍt4‰TB-^)„LBÖ™DÃzªL!âBì6fýæKð¥z š¢hÛ5]¿-‚áSBö^ו Úhj%Ä@·ÿž³®ú±8äK]:YàîÌuÆI¯>2Lˆ \Ñ 7âÁª–4f_JS ­W½õ¡ÛÞµÎIu9±æ>{ô IgÂ7º6ÛØ";Ÿ_^ÚûüÉ'$µÖ““k|dxMr~â±Í¿ ©´A‡6&¥5è"Ú\<ñg±ñWm·ÑF«‘qÑ\¢+…öºt¥¡[èâ’„ðçöoÅ#ÿG± '„k›¸UcÓÈ£v—?6?Y ×Ö4zÑVÕÑöcúØü¢ÍZík.]¹Ž— Öyä»ESím#žÞ®Óê‘ï#Ôum…o@—8ÚtýƒXeçÇf{ÂGeÕ}ƒŽïëUþüØ|JÖÞ\Bb¼8úW€æ…X!te&Ä#A?qD÷®'!¥› ½Rè6Œ6\§•sìbB^:ôK» ´qrÝ¢®ñ\3™§ÖlóÊS5\k ±ÑØ4²6K«ç Û}ŠÐ\®ðU¤:ÏïkåBÞÂݳ1±Ñè)‡Œ% ~¢OûÚ ß’„´‘ ¹zóî¿„ƒ®§i æ? įñ÷üBá[˜ßcD“©cÕv®}#3ƒ6«n‡ªÑ6¾Ím!†ëh¨:¾]ÓñØ5N™ YO»ú¿‹âïùðvíÚ˜ÆjÑ)#~÷ÂüT £·ÞD EÛ¹®‚¹þüùŸê.z‚RÊ ‰>ºèÚ¼âè;äl»žÚÈvÉ!oÖ M‹(‘Uoq4®8ž6ÚUÓ Í4*Û!X÷ZÕÐ[…î„ hoÕÁiÔ„\ƒn‡ª×{=ÙàB˜ƒ»îУܵ¯jSˆ[5™b­']Èl;ô.T5ª®g£m ¹æî±‹l>½PšÑu~\VuXˆ¾ž&!3è ë¡êÄ›ë{ÚR¡;Ä¢Ðe(|lrñ¡„X®×3¹FÛx KÐzÕ§©ø‘GëÞX\†î\—£ë܋ތ ñ£+4×X=áó¢ÓÙ6Fªwz¿`Ð}®'!“뻢vªV®ñ6R ®‰B÷mÌ5!5>õ^|¸ê’'u_5QBŽ.zÊõÂAw„cÐ'!¹+$0èµ6èžrô%d3æzÖµ§åTõ(d¯çzvdJCH©/U:„¯F\3_®é¸TK)Û!G$×H#£ÎÆupЭ‘Ùèh:wìê®O#º²G„,jc9L‡>ª¿ÎÁòó$¤vnOlÉ ;®•bn>Ï™]ªs¹¶×ÓLø¨3è 6¯qíÍuÒíb ñðièÌFOGÁzc`²Åy™ÂFëÓÑ'ÓõÚ=s‰F]ÏŒŒ»¯ÇͧªÖG›F¶]N—2L㈞ڈºö'¤ÒGFß|jdNÚÈ ›/°žœSÆh#œ2_O3!«™lÓ !ºë¡ž›ê‚‚?ÀöæÈÌ\qÌ‚£ÍcwñíIÛ|nøX½`‡táÓÑ™•k3!KvHeÌ> j|Ð\ïf„ ®ÑcwtßQ`\̨“ã² Ÿ×›p®}Bªiб}½_:2Õ8J#:ºÀÖÖF{Ð¥Z›ɵÛFfî,àzƒßCl×:]˜ks_k›ï„l¾ý€Î]qÖÈR5… áë]ï !Ö¾vÖ“GTa®—L_u'„Ï g^Ë8 Ñ0Ž]Ý—ël\oœð¡;d¿ !TÛ| r¢B ]Uç}ÕYᢹv‚9!özÒ^’ö®§ŒzÐÔ™Fl‡X 9á qªÎ®'_øj=|éÂ÷CŒ\W¾ªk+!t‚¢K,|ç“hÍý¹^ò2 E§»˜¹èbÎõÙ@ë)s×Ó<ª®°Kp0!ž¥Šº¶ùâà±;ûâ®ì_H#GÁxÅñ`¨ëu#v`Ww|w³¯ ˜q,°Sfo¾–™}ÁÝùüGÁì»85vYHËÂÉx«…bûú´àǘüD÷]ÌNKnOö=DâÍõxY𵱚Û|á‘‘BöÖ¾.Ü×2u­ÖS=ºÎì+8À2Ÿ_®Kué ã§ÌѸ˜uè;ä(^'_íZ¾c¦Nt¯ÚZO­¾Ú?2éµg#¸¿ÚÅnªË„èw¾Ó°ž!¥{Å©|h=|©N\»®»ªÏçñŠƒ­§Ú _ŠUm»F®8v ôNßת‹ÒF%„Kt«\ïºëd¡cw»ÑÛØºUÓadê¾j…>Iô×ý‰.«6ºß!z¸Ï»–èBk·'…NL´áúÔ Rµ _n'¤4ТGÓ!|õ>¿å:AÂ'ÑŽËÐÆ:Ó^œº6ÚBLô:UèNˆtͽ®ÛNÈþÊ‘q] !zóη2ÑÂÛÆÎ5ÓÂçäš-EëÓÈÇð±í«Z[OksUBÚ%¹.±\ŸP!Ô:À†\×ò”AÂW.‚¸îÑ«¹6néúl)×¢ñ6Z®™BŸ/ËF&äZ¡§ð‰¾êð ÇVÕÁ6ž\Ÿ—¶1€¦cÕ%dv‡¬´„\CÕ1Ç“ãz‹ \û7ߨF1„/ˆv…¤þð•vøtô®GGzÕ«Ù6r­ê©§k«v…ìÆ\›®‘SÆFwUßy…ìF!ázfãh¿kìb]72ú§ñl¢÷v“¥mìrƒî&äC0!!Hg²ÍôyªºlD„ èDUmíë“á™±qÐu“ͳñj!.z×UÍócc$ä¤ éÑëÌEïÃ#Ó 1Ж®êl²•èt¾jb !µæÏ„ïì’MhY5³…¨¿$1'$ÆÑ'÷‡ïÎ[õˆ.CmTU¯sj Sc=-p­£‰åšmR‡Ã‡ k{=aá[$ÄAŸ„mLgÐã ÃÈÐ }ÔÛ8¸¶r=$D™­úÔ£»\ŸÌðí-ô˜>|™§€¦]5tNcwÕ{–a×'Û5Õr݇ot=¢÷K\;hgמiô Ùì ç˜ëí‚„0MHŒ Ѧ1sGfQ®OvûiÔ\g®ë¶‘yÖ“•©Ú4NmœIˆB¯¢B jj´Qåºì\ï-רÈlóMB4üÄ>Ëuº(×z™Ä¨Úwôm|ð ÏRH¾d¨ÚF[BH0|Ôt­Ðû¡B%„. Ÿrço#I]´?×D¡3ÕFYõUu>¹¦ºs}™„P½Ö\gÚÈ8UOèª:™rH!Ôq½Vè;@÷:èxBº ¹î…ÔC·¡ª5!NB:ôsÝ¡aô âV½Ff®ê“)dD‹ ZXh7|¹³C |g•@—…F„Èÿg¥jãÖìBºð•Žë¢C«tÑ2ïºßÙ×F6 ]!ä€L£ÕÆÝ€–®m!z‰™ëÃÃUhÛ5“®-šndF4¸Þ!BÜA] åZ¡sÓõzt}§¡‘„„rÝ h´¡\#UÛ®;!|Âïúª'¤t]ÇÍf¬ºÚÈG!ÚBôðihØ÷šfkº^´ž&´)$7s½6]ÃSæ]¯ì„àmìvˆDo'4.$v§ß!ÌtÍB®÷E£„d¸±ê:6êèKpdLôÑu‡G&àz®j²Á„ ®‘ª÷¹DO®‰›®)’ëð Ë6ÞyªFÂ7;2²êìF›mœÂw7'dtí "ÄÝ|º5Úˆ ñ ·\ç  ãvtÒ£kkdêDl±AÌàzBï;ô‹üö2úGfµÞ\_‚á›\ö-¾Ã>µ§5—ê¬ë’´ù³(4Ì©vÑM¸Zµ‹ÁЭ†Ž†\¦qçA#ÿ­ÁFfnЗ¡Û€l_«ð]‹vÃw‚µ‘¼MÕˆÔõ«…nÐÕ›qì²Ç_Ã3;ôÝkÒWЦuŸ&Œ‘AÐÁ\·ù7(ÒD_!DäA‚^,dù#èú¶GPÈ ùCñÖÜýeïèס3ùÿt¿ç× è–°(­sFD¬¾·ÈÍh–7™àB~ë“Ї”&mt+Z~Û‘ïEB™ò¯Ž êŽùݵnHñ,"(³CÓÆ24%šóIPÙ» b“=Uœ·7£a“œåG,¿ˆZ~÷—3/Ä}þôÈüè6ôùE4   søq#äD§üþ Ùmh&Ñò£hÅ/Û¼ÉæTÝüÀ››ÐO¼G3ñ¡Gó6ëÑæÇ¥¾-žÛâYHô_âÛò’G®Ð7…¯‚¶=Ë\Ú»ªü—D¼ˆCZ:½ýØ¡Ï"nö-äú—q‡f²jäÛä]ƒnº‚×5ûæu ?<¤§H¢³Ëíè6mΛ¼G?L«:’BÄmh%„g¢~áÒËSS<µù™þÅ UÕò;ºéèçf+…v;îcœB>º’¯pš—7B—ðß?F)ÄÐ-½Í_nA?)לŒV:f²½-!j¡c|÷Óm¡„¤€~br©¾Z®f^ðßægñÌ ¨¶<_øC.⛦q@WLðßf•¸°vé0r úù"ÑQr>.?šEŒîØ-àȼ}9)t\ǂˆf1 ë¬»,ÈoÒ÷z4¨ŽÝF~0tCàEûu™ó¡å7•ý¾þ†_÷g_‚nÿõv¤ý–wô;úýŽ~G¿£ÿ„Ðø;™ìè7yüaпùrè[tñ}ëãýŽ~G¿£oBÿ/%$@®JC`tIMEØ È ç tEXtSoftwareESP Ghostscript 815.02 Æ”Å_IEND®B`‚leptonica-1.70/prog/marge8.jpg0000444000175000017500000007112510327040031014333 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ °@ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ò—‰ ªü²ääUˆv9È#­EzÕ·ã9¨Øm\Žw « ®‹ÃîL”ö2àŸL©­8f˦跌ŒŒõÅkƲÍwÂÐ\®1²¸½Qj— ÏVÅTLƒÍmÿË#ô£aû¢~•a°Ì~•§áÂ>ÞAÁÒº¶})†Øä 9ö¨ÞÆÝÇÍ }"ÉÏ6éùUwðæšü›p>„ÕwðŽ˜ùÄl¿FªïàÛNAøæ¹èñhéÁ)pÇ5Pœ)³‚@f5žÜ9¦H¹V±5RO Ú3dSìj´žý]ÄŠ?:‰¼5tŸr}ÃÜTE¿Œüª“ÈÔ!R }Åc^%̾HÝwâ³o "o›‚yÁ¨" ÐŒŠë´MbÚ R’¶ÖÝžke5k9:L¿J.àsòʧñ :7pkÄÑÇý™s\AäTO÷¨¢žúU« L„z×_b¸µAŠcŒÙè)ê6Ur “ƒž ,2mÁeÇ5¡Ûƒ]$í&fÿ¦dþ•æ.r$=Îk ›æ4ÝÔ¥ß[.Ü †BJ€IÀéQÃÄëZ¸þâ ‘làtªÎÙí]‚›ô©Ô9{ûÞÓ­ÂήÌck{Ö´«ÈŠ œòÙèØ®/[]ºÕø?óÓúVrZ·sçøE1ð-ßžÕ(÷þéRZjqé3}¢PÛ1ƒZ‰ã]-¾ó²ýEXOiOÒà~5aµ*ÝÂÝ:cyKùœz\WŽ%¤#9%ɬ Wþ%¶ÇëYÏÖ…ê)ÄÐqƒH˜ÛOÏ47J‹½iEv‘«°f’KòÊ 5Y¯@ÏÍ¥EöåÝÜç­%ܱºªg‘U‚€A Óšîlðéõ®KZ;oýÁTmÆæ ÕûHTÞF§¡aÅvÇC³–5ÌxãµW Z“”w_¥Dþ™?Õ]¸ªwš&¡4&&¸µÊÝZ=µÃC' *+«W·“k äd‚–§Œ|µnÐ ÄúWSjw §]§ÞÏzqödUY”5ÒŒôfÌ¢‘èÕ¢«Âý+v鱡Êé—ô¯5aû§?ZÀ'še¥ÍoÉ„ÞT…'÷¨$ ¼sPÄ12ýkZkIÖ0þSma¸vª#€Ä©ã­V|ƒÈ5¿ 4˲;:Ô¶™ }Àg8$t­Ø‹+FÑ3°7g<ÿ*åµ-Àýæ*:Z?\ûÑ¸Ž„ÓÖâdû²°üjdÔ¯#-ăèÕb={P¥Ãþ&§þ×»ÔŠÛÍ.TœóUu¡qp ^ƒQdUä*x.¼©ÒOîq]4^2EUzU¸üafßy\}E[ÄvŽ$#ð« ªÚKÒU®'[’9u'ÚAùº×Mœ3[!’%cޤTh6rŸõAOµV—¸Ìrcê*¹ð¼èI©aðÝà'8üëZY!£G\Qxp ç¥'!ô¦Ž¢ªÈÛTcå"­ÚÿÇ» œîæµ2«ô­KÃÌOhyÏXèkŸaɦâŒQ]4³ÊêUØIn}}j¼—2Ÿ¼sõT>dSއµm>¡v‘ÖgÚ£zJ£5ÄÎs¿ïqÖ©»±<Œýk¡ð±ot CÓ=ë|>3Â¥FOÝô5cív×3«yRmçÍsÞ) k÷£®Bè"²"Álb¶âû4²Ü?û´¨2±ÿ¸:ý*Þ‘q®¢²Lá¡'ŽõÖbÁº]D~Œ*A¨Ù²ñqýô)âöØô™?:x¹€Ÿõ«ùÓâ.0êÉÔÿ}å” Ùë\·Ý\0$cùæôŒ›[±þÅV_½M“½5sš{t¤©¤O»OÚ­*üµ ’¹Á"ƒÍ& àƒŠ±1“ÏTA~`rki|-¨´jÂ>d Ó[šªø÷cAP>ƒ©GÖÒOÊ }6ñ>õ¼ƒþj#ip½aqøTf)ToÊ£Ƭéãý58¨î‰ úRàúQŠ1Í(Èõ§+8èÇó¥ÞÛ<×u§9kHó×m]Qš˜/N)á)ËšmÌËoö\ŒÕ¤ŽâÙÈøsœU`?t1éLÇ5 ’/â€G<Õ›|݆~÷5¥á} ]Õo†&ÿwÂB»”)èjTÑm¤•”ƒÒ¡} ÛS'Ú†Ñ`Œáò)é¦Yç¦qïQ:·Þ+ÅU:T@ãëZR—ÜÕGV œUGë]…×tW öU<}k¦dÍåØÜÃïz¥YA _µ¯‘ªç È®gÅa¿á#¹ÏB¨Gýò+&õ¼ÖÜc0'ºÒºÿ£0øM:<ùqg©Œ*}½‚jW+k#G 5¦~Ùö¹˜~4‡áõ¸Á[ÉúÓ×À¡Ë{/ãŸñ ø*q÷o¤BÆš|x˨ÍÇûF¨jš5î—žúŒ»sŒ—5Ï^YÉz¡žèÎÁ7(-Î?*§¤Ì‚v·Û/ÊNzT2§—; <)ÅE ëMê)ǧá@èy¥UùiÁyëJËÅC´sUXrhÆ) ÍTŽ1l‡ÜÓ#?½Lž2+Ö¡;…™RØ3ϵlG´ŽÔæT#îƒQµ´ Ö$?…Dú}›ýëxÏüUy4]9úÚ§åX>"Ѭml Ñ@¡ƒ\mâ¤>\¬ Uº'rsü5§á«/§˜N»‚®q]KxWN“i ˸f«ËàëVá$+øUI<»7æ*ðtÀa[5V_ ÞF¹ÚMg\h×Vɽтƒ××XBRÒ<ŽÕv5ÅOŒNÅ*®¨¤Çs‚ÜÔ?"iŽT|ÀUqþ¨n´Ý¹aP4eï àt5bÕ†Lz´á*ιDžäǵqVã%=ÍlÛÇ›‰µ$hVôú5CQa3–ûµ^ÞýFj`C@pÄH½Tô#Ú³gde;FzUCÛëZŽrƒžqP‡_-”ä0éT%9ú×Aá_¹~¹äÆ1ǽt;âŽgTWÜ šÙ·1Ü@²¡Q+|›Š÷Ç×Ú¹¯Y=Ÿ‰^'<˜#lãGÿZ° MÒüër!þŽ zS[˜[èiñ¨…¿Ø«zAUˆçxϵwa—Ô~to_QK¸zÑÿŸð*ç|d»´S´g¼­q1Å'Ú-\) ±>•Ïéüj‘ÿ¿V.Æ/$ÿz«Ê858§ž‚•Gž£å4œÒب³Éõª® ±Í4dÑ´ÒsSD ƒa?(Ô+²ðå¶¥¨ÙŽûËv¨#5º4ýv3”¿FǪð£ËñòÖü(7"Œ ÑBÞàOíMqxkßLÑý½©¡ÄšcýA?áTõMfKûC¶S.H9Æk—ÔÆQBE"€rw ¯qÉr« c>µs@½].áäu®¸À<×SŠ-ÎÒ`•0ñ5“}íËõñ®Ø1Çœ£êjÊj–Ž8™Oâ)Ò]Á$L«"óïYZÆ•(Üj–ÙÐã>¢§Œ HH)Tb«êm¶Øsѽj’©“N|pHjû˜ö§*óíRGXŸjq‡ÈŒ”Ï<š¹ ŠvñÚ­øƒ á·ü+ˆµÿ[Ö· #ΗžÔ‘€×oŸîÖ~²¿ñ/b* $ý»J#Œ[ ìÅFJÏž³#Aç5I…jàö¨p† ýðqj¡(8í[þ¥½ü¯ë]bY|£»Ãü*ÄÍ ‘åCnʱ¼Zãûa !‹Z¯~œšÆ³É™@Æs[±‚ªûÔcýS t¤„£@?Ùîj1o,å£¶ÊØØAÆ ;þï¯Kãÿ Øž,Où{'þO_Š”ŒÜ9öÝA´ñHód8÷y^+^'ó¨fo2”3Ù”£rú²[?™ÔÛ‚D`XÚLK¨¦×;Ϋ²i²\];ä(-Ò Õ´ñcå®ðÌÃ$zVojs‘M ÜSдåŒÓÊqÏ¥Bc*sU®Gï:Sp)qëI´Ôö‹™Œü§ùU<×}à¼%€ÃW_¬e³&ìœÔžbzÒSÜROjÓéL*‡‚fkqDtÉÎчµyÄÊF˜§¶úO*÷Ы‚»›Èá…N Œ€Ê9ZÔM&ÊX˜$gL}ÅÏ1ÔGöxãp¨_Ã6ùÊÈÀúâ¹ÝFm,Öþk½28?­jh·O-¢‡ÁÇV®Tñ§.Ò:ÔhAži·é3|Ù#Ò«• §0§Öz¶œœE\€|”ù€èjDD. pEOâ3·Ã¤{Šã-?×Gõ­xFdœý)"#íg'€*=L,–„Ç¥W·@!\v¨ÉœTß¿ZªÝë]NëhñýÑT嚨ýë¡ðf õÒžðÿZÜ·%˜±lšÞ‰ÞÖÕ]šXqÇ \¿ŒÇ«ZŸïZ¯‹VFžstƒVäƒn0x¨ñËéÚͬ>ÙþtëyÖÞåf~N=3]'ü%º^9þé x·L#ýiÿ¾M8x«KÿžÇþù4ÿøJt¯ùïÿŽŸð£þ+þ~ýòj¼ž#ÒÙX ÆÝ5œ5»'´ºæ]ÌQƒÍpºTmk« d&O"¶MÌj ±ošk©·OJ¯£0!¾^;ÒŸ¹Á´>ÖYFZUœž*d‘Ž6¸™P·54ÑǨN„[²•™B)#bI\ôéZÉ„ƒM•‹õ©•HÁ犵âP‡¿ï“\m§úèþµ­ÈœûŠbãíž8¦êe– ÔpŒ[)Çj¡=´ñ¾r¤UY"“p]§qÖ©:<ŒVýŽ•uu¦ÇðªW­`ŠçË…Ü3ëM‰†ìäVŒRáGqÞ¤l‘ƒOFÉ©ü@Cx|㜮:Ï|}ù­kq”›'7ZjßH(Ô”f§fÍ$~ÍŒrV®¯¤`ͨC'ÝVPª Œþ\þUÊN’…óYÆøÉP>•Ÿ0}£$Šé4X´¹t9Zêicº^cÚ Û§^µFì[æ+‰ÏZÈ•g ’:}+wÁŠ[] 7KWU¤Æ~×"ôÈ5»l«J«–pçtçÖ¹¿Ms<šRÎÀ„‰Õxèé\þ”»¯"ùrr+¤Õà1ݎ“ûDÿwõ£û@ú ¡þÇëGö‡û4 ÿöZ>Ü?»KöïEýhûwåëH/Ç÷hûxÏJ>ÜAGÛ†zQöÑéKöå¤û`ô£í«GÛVx˜íKö´ÅkCIö¤õ ]&zÑö„õ£í ëGÚÿ8L¸É"Ê~}i<ÁëJ%_QIæ©î( =h-ïK»ÞÇÖ€ì;Ó„Ž:9©îxþ䬿CS R÷ñðø j—£¬íøÔkŸ“»“J·“/F©—Vº^7ʤ]nèw•;ûnçÐ~U,¾ ¹¼´6Ò*ì#¦Ù¯LÖ­¿ü{Ê{—¦ÄœçÔº°_ìØHîEB‹¶!þè5­©é ªùvºŠN]W÷›Ôí?ú×5=µªð. æ².°­‘]W‡5›k í§¶óKH[h;HúÿžjíÝ‹–[•Îs+V‹' G¥mx-ñâ·Ñ8>õÛilƒS‘NZß·GÎå+°ôÈxÿ Úl‹‚˜?QX¾—f©FrÃù×[â­¾dÆàEsÇ"@=©-óäãþšµ2ìcÍêŒ+Ïv[ëF(ÃÒ•JM­éKµñÒšUý)v¶zRìJ 8íIµ½)B>3Š?cA GÏIóç½z7?½.ù=éCIïKºOz7IïFù}i|Ù}iD²Ó„ÒÒùÒçµügªûûÕKÏ ^ÚÛˆöÍžLg$ uÅe˜Ÿ”dñÚ¢x2 ž;ÔaM#- :Q´‘Ò”©QH –«vv-s ,vDÌÇúVÌ3XÙü°Z$ÍÓ̘Ïàx©ÛPŽ@#¹³„¡îÆþ˜æ³u="ÄöÄ´qÈåO\Va8ýi™æœÓJ(&Ÿž(Sži¬i 4šm(4¢ƒÖž”M•jØsÒ¶4ïõƒé]:¾4Ku¡oçY‘(çž´ºÐì ÿ|SgÏ™•ãæ™I)ŒdôÆ3š†ïx„zŠËn:úÕí?&jFËKòœ¹ªS)g'#üj}¶ë–§ýºï.•´%¹éøUí?tp<òªÕ€2j§Šîlçðµ¤Ãp½-æ®Þþ~‚¸˜œ™AïšèÓÔ¶ì½D>òçÒ’‰&ñüªÃÿ®'¸_éZqXY˜#o³Ç’ Ÿ—½L–V¹[Çÿ| •máÞG“ÿ€Š“ìðŽ‘(ü)þTÜ•fkè§Iœmw½y»Â7` ëÆ;ÕmAI¿Öt_¥+r)•" ûÔ†6#øTö–²ïU¿*ì­-÷Ç Ï6ݧ$sAô©eE~…Èé·ùVMÕ£%Ó#ÿ>Õ™¶KYL‘9FöïìEt:N³æ.?å <\~•·ö=.üôxÕ߆ 1œÕ;¿EqèõÎßÃÿ­Xqø.ó,¬˜ åP\x/PRÞ\E†qÛŽ:Õ|3¨G´=»’:g8þ”¿ðÝE˜ÐHs‚W®*´ú\ÊåYÁ8ÏÍ@º|Ò: ¥CEN–Û2è•ôNçåR4¦M¨ª«*¯J’ÙŽjËÛ—Œ zSí#,¶S’Uà7¨èkmr•y§Å4÷¥šyÁiÒ ó^3øTÐxJÖî1;HÙ~HÅL<bßr>‚§ÂV È.*œx_OÏÜÄÔ©á½8õ$ýiï¡éèè¢ÙNM:v›jTHÎ㎕Áxž­õŸ&ž]ò¬}jսŭ€Ü$ù»œIôÿõS¸¦v)$Lã$íÇ<ûŸÖ¯ZH—YCŒ·<˜g¡ Þ§:Qòå\´‘· ­ÕO¨÷ÿÝBÚi0/ÌÀá™G¶2?<þU¡¬vÿº\™R«×ó«èIR¨2Þ•43îã#ð¦GtÒŒŒcëíš°Ì&óœã¯Jçµ{srK+29üºW+¨Íq"œÕ ?x ,M¶êqœeWùÔäƒ9=ñý+ ÒçŒéñ’À`c­[ûD8æEüé¦öØe_ΘڥšŸšáãL:æœÍÜ\´*üC¥ùˆEÜg ÎU{¿i3ÍÈ;NxÉ®/^¸MS\K‹`Z0sJ·{n/õ€#å@ t6:dp(ÀúUñ©æžbbFOáJÑm^F}*„€@ ÏQYæ+st¾dŒ žŒ2+^ÓD·žv1^$ˆÇ%Hõíô­õÓ"†ŠÞã¿LúzÔ»Aaü¿'©Ãéïþ?›|¿ÝÆWøÿXÿ:®]Ž9f žã©þu$K­‚O téŸÂ•çTL&s“À4ˆ6Dª½Áôÿ*&<›¤ÿçëM“ ˜lNr;sÿÖ¬;,´jV=¥ùl÷#Öª[èƒÌÿVPm!TsøúS®4”–S·×UþOóíUßOxÑVH¶ÿ´¼ÿ×à{Óà´.JÇüì<b îß•:ãÂZm½»È‰<W1/ÙcP¦Õ€-³%ýsÍbDŒº·–¤íYHöÍvÖ¥22»Ö·¢‰•@#ŽÄu«)nN2sCB¹ç;ïLh”žøô¨¤¶Qólð¬[¨·]®Õsô Ö¥´{´D€•µ¬ñ+©#?>YÊv1׎‡µTše™IeÌÜœœa±è;wü=ª-åÐ~Rûþ˜¥‰¿u÷Æì.O¡ŸÖ¤4QïÀ8$æšó˜‘XðX`­@¡‰9R½ýµH³=c<¿7¹#?ýo®À‰2Žs“€úôãn­!U«cü*w‘Ÿ1“Ó& “KIÔ¬™ù¹Ç ʹOKr¼‰<"1"N¤óÜã#'½Ae­M$ÂÙäKÐÃ8‘Hࡸ`qý*&k)®Y6ÖV&Häê ‘¬¿3ý–5-¸úÅq'­-5ºÐ)SRgŠõ¤4©W¥(¥rô ’MR§Jž/ëMÔ²cJÌÁ£bŒWIù FçsU%¦[œ\Š×º¬?*§w 9#OéT ËgÞ½øîÓ,ŸcÈTÚ7΀ ÙÒ®êê¿Ùwcqî1šà‡*å‘ÍÌc×5tñ'N†šßñþ1Ý*Ä£3sé]/‡Ní3Ü9ʶJ7_ÖšeAüC󦛘GYóª—×víi"yÉ’=k¹‡Î|ˆ60<‘Ðúê}/F[›³9Î –Ϩ®ÒÞÕBŒgŠÐŽ"£~tò£¸"£hËsœŠkBzŒ‘Hëå¯Z¦¶‰,ÞhçœUÏ,*àx5¸ò› @$r3T$¸'vÖçÇ?Ï­pUV?¼† pw)ëϱéך’iŒ`ƒ÷€ãØtJu¼ìÍ•ËéÇùÿ ³,…P„9ÁüÃj¢Œ²ÉÇhÎ~‡8§»F×k0°ù< gú~´†å¤¸óØ|ìʼné“ZvW.O¼:V”Rùˆzóҥܡð¸f?¥Wš\FyϽpúô‚K™›3*v -ÛŸóô¬í0­ºÍrò©tû xŽŸ×ñºT,ònXÛ‡^jψ-¡–À›¼r1šóç1©„óHzÑH84þÔ-'~”†ŽÔ«J){Rž”«Ò“½¥8}ÑRÃÓñ«oj·*61L]"6èõ*èA—plj³'†• ó»šç&ŒÇ3 ƒŠÝƒ„ö¦;çŸÊ«H8¨¡8¸JÔ'÷ ûUk¡!AãúÕ7×&Ãö þÀþUŒ’ExÎÓÛ¬Jï%Èf'0¸çèk ŒdpGbÐâá3ëZ„ƒ çŠc±ÉîVŸ4ç²ÿJm¥Ö´«åiñ«Gœ–`x?…^¾'˜|×GŸE4£A×å#ÌÕ öjeðµë­Ô¦9ëóšWð~áÍ܇?Þ&¡—ÁÑE Iç’ÀqÅféº_Ú6ï'wªõ®ªÏK[uþ"´ÒÜcëV€8ÃcêiF Áâ¤QÅ5¸ƒY³Ëæ1PF},_»áºôÆ*‘¥“ä;1ÚE#?ýoz£$›Î”•Àá‡åLh%Uf(Ä åsÈ÷ÏãU¡›mÒÆÛ€cŽ;£ùãñ4’32¦yQ€Gâ®Ø¹_õ?µ©¤&ñAéJ´«N5*ô¤9Í!æ¤íRÁÐ}jçñ/ãMµÏ˜ã¶ÃZºn ”Ÿ…mN1§ÿÀ+‰šæ!3~µn”4Ç óŒUu8•O½jœ˜ª„ªŸ¿šôþ ØžàåQ[ÝsëV›i¬mü«’ÉÀéš’Û‰—ëZgïg'­6Sþ™ Ï·éVX8Ž£mtù¬åÀþ:è1Å4“ÚŸ¿­5¤ëU§eu+žµ ŠÇ‚ÁKxqZ‰u©–W‘$hýs»ŽƒМֵš«á‹sŒàzôÍWÔ.7\teUÿŸòª/#´,¡ŽyÇn{ëTá2Áí¸ÏŽã?çØTˆ¸%†Hpqþz ‘]Øü­³¾s“ŸÇéZ–ÒíL|ľzó‘Wã½9êGn?SZ÷›Ÿ$…=±ßüõ«*Éózç½c^éѺªìÆ(·‹Ê‰•Ôî= ¬ÍfÅŸL—÷ÏOÃšó ”¤ÆzúÔ[N `úÖʨkqÏj¡"rpj³!ÝÀ®ÊÓQ„xrÞÜçÌCéMÈྔ¯¨Ÿ(íNÕÏùSv\¥I ¼r/˜ äÖ—ñ}h—‹¨ˆõ«þùCе¤jï§Bñ%¼²– ƒ8«í®ê¯þ§L”ú☷~#™¸´HÁîNqJÄ,q#Äû5j [æ`'¸'ÝkNvAŒçëWbäb¯Æ€G"¬$`c?•\D_JRœb«M’k鉓iɸ¦> |‚~Õ ±åó“» Ì0JžÜf¤Ôît™Ö0 žYôç¯ôªZ©]SJ´¾µèÎ;`Àæ±­î®-Q ƒø¥WxöŒ–P@䌼ߟ5röD’+k• ‰"/ŸN«–®FŸæPÀõϸÅQœ™¥É`Atã9ü8ãð«BÁ™—†ÇðŽýÿ ̾»PþD±;]¾éç·ùïS%´rØ£5èûcN"ª‡!1’û‡ÏÎkI´)-4ƺ–ì(舩ó3œ?_ÐÕe‚d÷Œ2FvÓëRÈ9uõ<ίZÈèÊ…2O$ç³,€Ž´Œ„õg ¤hw ôü*µå x^&ÉÈíÞ¼“\´kKé#l†°+äçÖ£<)¿ÇRgMëšJoz)â”S…+P½(÷¥îÕ4]·ìN4ç#»S“–_­i¿ú“ÅXŸþAYÿ¦uçñðø«³/Hò>•!K—'þ”ƳºoàÇáBé’çœ ´¶ÍùTƒKËó „‚z Â×¾ãøÕ…ò£Ë òûÐ `(¦äcŽŸJ_aUuõhzÕg?0?úèHþð©œæXóÜzVÿ„Un(lÖº tP(8ÁÅU•±ÛŸ­,J {Õ´Œ7|þjtR:nµjÏj´‹Ú¦L;T™^½*­Ë¨¿Æ±–!#’—Zl‘09þuBä²Û ÔVsnΈ ôÅY´½x¶©9ló‘Á©mí§´f}0ÀÖÎs%­À!sýå#î“øŠ†úK«(Œ‡IþQ*˸Ž8ãhÍfÌ»-¢Fp<µÛ†lpÎ=ø¥ÓîRXÚ䀸OøóV’)“¹'Œz÷Ïàj-Zê[{VXÜJa[¸ëút©%}R¶‡É¼‚€¥ÜFÀù±íL„iv “M¨Ãq&NÔ·7àªI'ô«Mw6ªñÝ]ÇäAı%‡_™±Æîëɪ×w¾c`¸Jm©#æ,¡IÎ5±2ÛHŒ68­KqÓzU¢˜ä \ÓÕÞsPKíäž½Î+‡ñ–޲Fn2Øî3^q24r+´zUcÖLþ:jhïIGz)”u¥œÔ‚O”ñRÅÕk ±û8ÿ½V9ªãÝÕ™ÈþÊÏm•ç7ßñðÿJêCv›ÛÖ±ÇZ@ ¥ÉÆ 6Ïœ¯z7(Æç¤iaU ÈãQ5å²peFú•ºž o¥WºÔ"š-ˆ„ƒ“Zò‘ÕE6<³ŽŒ*rq"sùUýWMy„ª[L ¿wãHà;VÎgÏ¢ÕEñmÝÃíŽÆAŸïq[sÍuóH6œô5µn€/Õy#=±RªœäŒVAäõ§óØÔˆÛ½L#5NùqEQ2MEs8õúÖuÔjªH}N+0‚¹Brà/5]ò‡ý`É*ügOñ«Úuâ’!ó:px?^jÖ â0Km`AQžý¾¼ÿ*æ®ÃOtð¨Â¡Ë7ROJ· ˆ‰÷ó’ÇŒç¥]‹7•Iä`öúŸNß…fß¼sª ËÁ ryÎ*k% ‘]UQhã9ÆÒ=z~¥u‚æü÷üúýj¼á¥ë"ãéÏáü©* <ã¶GJ}¹ ç ÍN« ¶HÙÁÂñÏ V”#PzUÕ”•=F !•@ÇOj‹†ìqîk3V±[«7±×#úלêB<Œ¥J‘žk™½°’ѹ_Z§Þš~õ<)Í7­-é”´ð}è<ó@éE<^µ4]VºP}ªäd2¬>µiqZpöœæž¿J˜:š­|™„àÕvù0ݽ(¸§LU)ãFpI'ÔV=Ä#d_ÄU)×1áÈô'Ëy¼¢0Çû¸$ôÿ –Yݧ@§j¸÷éþZž(¬¶á‰êz’Oøš¼ª$bÁ• d޹úwªjwRȇ*w€;}³ëMûï—îã ?/þ±¨–#מ7G?çÖž°À(dž ¿â9­,„(,I$cþµT“|ÌeÚG;ŽW¯¸ÅY´Œ;-½Òº+`ʪ¬ŸP1š¼‘ž0 ôö©âaõéÍ8G»“‚)Bª·q ÚGÒ¸}NÕVf*ÃàzVT¶É*•uæuM&KRe‹æŒþ•¸©äQæ{SSK°w•ž†šcaH´õ¥4™âOïGj±ûµµÿeÒ„€t$â Ä Ÿ™H­¯¾×‡+Nfÿ‰?ìW¨¯Ïû5W,{“J·ANò$?Âi­©ù†(S„Bœ  }'zp§¨§€7VêÛÅÏðŠYÎbϵO3eöúÖŸ‡5týBgœáã]¾#³pB,„ú…5R;ø®&û¬lÖÅ´¨¿!ZQ À}ßåV¼ãð5$ïqèiÙ9⥯5)=ø©úÑ8 <úVLHRRþ5q!9ÏáÍA5‘ê§åþ鬻9ܘžÊ²M„‘Ü0’ãøœUÔò\Žx;@ãëQ-ÜhZY]"§%ŽzÿÖ«âöX¤†Udn®½ºñÇ0¹…B‘(9ÀaÎyÁ?ŸÿJŠ&VÖT³6ÙA‡RÀwã×ùÖ¸Ž3˜Õ=xíL6 e‹0îH…RšÍw¸M»³Â}ÒxÿõUGŒ¨Ø¼(<‚pO°¤ŠÒRá™yïÀÿ&´ €ÆIu è´c ØÇ#¡ŸÖ¯Bq€=‡µL‹µ³ÁÏcRí,ÜqOæ©ÝÑ8È ŽõÅê)åÊù~§ŠÎ1n…FЂ¤0È÷®SYÑÙ3qÊwµ`mç­8 3/Z9<æž=éA¤;Iô¤´¤ñIÚ”g4þô™«0òEkÜš4}Fq\ãrÕÓéß5‘>P+jàcC+ŸàÅpZ÷EYX#îŠ|Q¦: ”¨ÙÇZ¥wË¥U§ ANíE8sSB¨Êû› zB9­¸XÇÛÖ–n`'Û¥LÇrÇëëV4œ6¥µðG=k ˜B£Aô¦A™À#é[vÛ ‚>™­(YçqúÖ‚*íH˜ÿõŠ<œSöÒ¤ŒN#äü+8ÆVbHuÉ5m €0§ñ§ífäñî5Öí/Þ•Èÿz°/t¹äœ”Œ2§$œà^Î:ñÍsWöÒˆÙeTVoSï‘ÏO¥Q·KiCwÍàƒzät9Ëñ¬«ø›J¿žØHæÁ£>¨zô¨"Yo®Y7“ѳœ÷ä“Ívzf˜-’ßíE™¡_19_Nøàã·ÒµÈàÉøÁ=3ý*iWܲ¦ï—c8ü?lP¡Ý€Pp£vÓôk:¸šm¼ª†ßŒìDWÇ× ü©ÂÆ%ÉÞªGlOáŠ_±¸\“€äŸÂ’8Jõ¥[‰ž¸«€Ô}zU•téI"à\VuÐO|t5Ìê0YZÇòd‰¶¶vö ¦}éŸgI¡¨®;_ÐÞÊSs æ#Éö®}febsÖŸ¼ËòàzUP£O‚&Â)§]Û=©PÌ >†«#Žçš— Ž´v§%<ãµ'z±Þ©¨äi0ÿ»\ÿzê,¸°lpp+aþm “ü5ÄjÑŸµªîŠNiÑH§±ù1T®º ¬@ëN¢–ž´ã÷«bÏ›4>™©˜8ÐF{Ô¶ˆ^ôÄö­G´F I#dõ±a"(,Mn@ÀUˆÙWÔU„ŸhçŸÆ•dÝsô«’Æ® P)p;TŠ0¼Ÿë@bx»Õ Ô‰sÏçV!,É»(êsÀ«aPc{üßÝÅ#\Cä¨ÿ?áÒ°uKk›Ù•åå>îì|±ƒ××è?#XZ……´LÁiÛÊü¡q‘Ï\ö=¿çE½Â\íä'¯j¶ w§"´LΤu ‘Ƚ.›ig ‚þ» ù§'#=V’Ëo3 Žgø†1ÿë¥XQ̬¼Ž½?çù52Ç–O–ÙÚNI뎠gÀàðzàÒÛYDóÒfR£æ?yO@3‘òý}HWAml£o™VÊÄ“êH'ž¸­/³_Oþµ@úzž@ þT‹nÈ ,ƒ¢· }=*t…G==AéSlP:~U•ýj†NPàîÞ¨È3œò=kò \•&²îTŽEP.?ˆb„ÆâG4Ùâ[˜Ú7F"¼ÿ[ÑΛuÆLmÊšÎPAKMÆ{йQØ43–nXŸ­4¨4Œ¬9€\v©ˆê)áïNjÌCæ­=OåÒàÒ°ÞZê @,àV«4?¢×«7J{í 8§Æ~sO$ëƒUn¹ŒTýi@8 iÙÅ´õ&œO ײlÙ¯ÔÔ¬ÃË<úЬ~Í\b¬iÒ…Ôc8<‘Z3Ëþ˜ÜMnXî¿t“[Ð&WŽ? ²‘*ñ£`&¥RTàŽ*Ü<в£ÅøÓùîxõÅJ¨F1úÓ‚‘Ø~ÎȾr¡eÏó¦Ç,³`±Ú=€*qè2­K´. ÍÙõ¦MYX cÈ{:Ì“GX2ñ©glgwaØ};ãØV<Úk$¥ÈÉõ>ýi±ù‡#hVàð8ÿ=j«0Ìw ûyéÁd9QøÕ6ÛÝ#Uf‚6çmW0¢œŠ‚kˆ¢’ú×)¯ÞZÞȨÌ~OJÆ f£€ÄÒ²wŒþñ‹ÃgéSÇk¦2áÃçéSÇ£ésð³”>æ7„ß­çYdÜi³ÚKôÔŒcîÓÚ$Û’*¬‘ÇŽ:Ó€8«PòÕ©«ñ¦Ûjç×ï­ušÍiÏ<Ö¬çþ%N:qÅrW £S‹w#o9ªK1S†j½ò¼Š‘­D¹,ØôªÓYÍ ò¾µ^(¶±ZBƈ<úÕ9´ù#är=EV ©Á¤áRD¥ØÖœÀƒŠÔ±æÐCRõÝÍ"7ú22#õ§Ú’·hÇÞ´n\ý´‘ëÀ®M;£N95ÒÚ"…É$Õ°ô¥Ž0ǧJI”Ê!“ @a99"§Ûœ>•8Lž1éH$Ü0£Ö ¹ œ“Eº–«p0§“ÔÔ¢<|£¯­(Œç§üdÜ“T®-|ÎvþU—qiŒnAsÒ¡ÙFÜ ñNŽÈ À^¤ãô« lŸyØŽõ2BˆêW%»Óçÿ¯V–2\H£§Oó֭ŰÁÝ’~R•XM l~½±Ú‘ÆÜòiÎàÿZvG½BY[#Šð>SÓÓ5\$‚w/lÔm¶"½G¥sw—±Äç.=³Yý´' àÊŸÅVãî'ØVdþ#šn#Cɬ鿹KI>÷_ðþ¾ÕEÜx¤1“Ú”@;ÓÖ©þR‘÷çM1(?‰w-¹Ìw¿BkFù£È¾Q$gøäT¥£[þþ Œ‚;VRÎQ¡gÚÄjÍÅZ±%›ÁÅlkœZÛjÀŒeÇֺ˶Ñ~µ¥qΘßJä5øü\v­½œSØúŠ£-œöÇrç¢ áÆ´b‘]AM–²GÊÕM­îmNT¿Mov¬vÈvžœŽ*ÃÙÁp3€ î*„ú\±ä¨Ü=ª‘Õ°A§ªºpAíO çš¿dq~•iq†¦!G^Œj7.7<‘S[Ý^I4fdw9õ®ãKu¡À…tL ŽƒÛz¿“V÷$cÏaMtg\#†bZšÊૉr¸É>µ&å$eºóÍ#6â‡BëÏOZHØnÚÅ_v@ü*ÜAHÇSVÖ ¦i>ÉÀã­!µ;ˆÁ¨äÓÕÇ+UÛJþêãŠû3nr)ÂÉAÆ3VÅOqN6Ȩ¥Œ»t4(óPcõ¤ÉRAæ˜àFxÏ]‰Ç5 ‚yéž(g8¬½[f~ùí^y¨¡iY]ÆÎÙ”tôäÖ4šzµ±´¾‡p_Jƒìp¨ãæ?ÿiG@=‡ziD^Õ^P»ªÀ´Ó*ŽõŸÒ£7 {Ôlþ¬j6˜TläÖ¾“}¹>Ç;f&ã·½gÝÛ›k—Œö™À²|úV“=¤¸ãô­+Wi2¬¿0ôïV7d`¯çTç¶ŠV '®*KwŽT$à÷ÍZŸ›5 ¤ w4`š§¨:›T(HƒV¬þë ´¿xƒÒ‘`O©Žê7éLiÝÖÜ!<ÕÜèŠÿeÁ8è t0\sÏ¥iFä )f%ÁË“S“ž;SJ8éPÍP63Š[oŸ¯§u9{ Œ<†NIúUKqÇçM$ñZ0À«Qžr: ¿ ªWäÕøÔt©ü•ô¦•i¿/ÊMBm^ÞPǧJ³ªæñïZ ßqisV4ñE©­]—ÐÆÄàŽjµåœV—‘,G*Ã5°¤ý•6õ­7v™†î+‘דG´cå¬èNÙTûÖøÿV¨£qîäÓ)°JÉwÁÆEYy 9$Ômš‰¸t>õ8>ôÁ<ÕkÕÌ`ú¦Àâ¬Z™³éV€%³šb‰û_Ò“'q:l[1=+¨ÑËaå-ì£×Û cçÜÖ´@(3íV“?ýz•1R‘ÒœÉòš¢ŒcfzTá™8-QœïÀê{Ô±•99«ª•ÈS‘O¶px­8ÇZ±ÁÈ«ðÍ€*êJúÔ²`€µ0‚¸Èçd·}˜c'µA$*AÅCP0ìNM "àZˆÀÛH#¡Í ubÃ¥FÑá±ßùÔ&=¤©•‘€K ý*¬¼€jµÉ ž+†Öç‘ð¹àžØaé\=õÿ,"P?½ö>Õ…qrìr>_lÕV“=IÍ3yZ¢îÔß5Eã26Y‰>¦¬F»@¥9œP»zš/´‰!Ì‘ È:úŠšØŸ!I©jì#xÌ» €E%ÃR¦Fqô¬Â¬—äcšÐŽl>éšdœqÅW— zÖŕųEOÎN7UíFP¡D`Ü×=¨NeB0Æ+,·ËVlïÇð.\Z3dõɦÛËå\o'(>úŸâ”—nóNȈjÄ(QÆ*$M¨ìÜ`àÔš’ÒÚ[Ùk·Ó°­ème†Ù·3tÎrÄ“ÛÓhZ’É'—ÎWŽvLœš´Êž¼SÔãúÐ@$“Te—v8ô¨Ù¶0`ö©Ô«®âjý»Æ2)ÒÆBät¦ÂØàŽjÊ>&¬ÆÄsV-dóZQÜq×R ƒ f¦ˆò[d ½)Bži’0ZƒœñM(JŽzR€9=*)†p=*´¸nzξb²o&P¼¶=뛽‘ݺ¹ê9³›Ï_ÈÒ ÍÁ;qúÐc'¾´‚I=TûÔd FvœŸJ¯=ŒOò²)\úUkÚD8‹Ýý+(x^A1u”{ äç~•™>“yʯ}ç5HÞ9B²FzŠ¢?Õ·êT¤ÙOESïRÚ>ÍHsÃd~•ZlyÌ= '¤Y;…*psZe·±Éõ4Âê)?åQ4ã?{š@]ÏZ¿-ü­‘»ƒÚ£¶™‹qȳЗ<"`dqQÉ*ã™sì+:V&U$皸&ã.1Üf¢—PF7/áYÓj‘à…ŸZµa¨‘XŒ*Œæ ¸Ôn§˜'Ž(–I`q Ÿ4Í×=ÛëRE<³|øUÇ*ÍiY@ŒÛ¦ØÒ>BùxÜÓ¥ ò[Ÿ‘†ÍÀúçÒ™*%›ÍQDE°Ã$ÏåYSNÒÈI;A=jÓ±^âpW,J¾:tý+³Ð´HàÚ΢M«—ÿi¹çüúUMI_íD`OJ¡cy%½úR¨IÜ}~µè:dáâÜ}OjÖŽ@yÍJgñ§o¥ý{ÕY²I'·jˆœ®ÑŒÒE:Ç…“ÍkBèà ñíVIÂóÍFÉòî\~ô ôeIëOªäTñHÙÕ´8#&®Ã/ÍøÕ‘8‚i²Ü®F8¦1%KJ»…+¸íÒ«}£å õ]§ßÆj¬²8Ï…dÞ\ {W?¨+ Æ}ë îYœïÒ‰$B¹+´ŸJo˜AÇãOó#9ôúÐEÝ·Þ•A<ªãôÒ¸'4.ç|3ÜÒ´`r_¯PhØ  Gä„»&ªÝèÖWY2Û£1É^k6o鳈Šåp œ`Ö=Çüµ&I#±¬k¯êv±´o•’§8¬ù!™-|Ï-‚ƒØã5§Ës?RÔ\ŒÎÄw52_•ѪËN6äš®‡Eæ¢w•½ª1¸óš•.$LzVΡ£G±p Õ4—Ê“v3Å=õ…¨ÍäÒëÞœ¶óJWtSÝv?LR=”‚]“;¯£2ü§ñ¨¤†(ŽòÂ*¬w|¹Å\±¹û;¡ gzØ\—cåF0¥€R+1­ïï.òžGϵ•4q‘:õëJ=,YÅ‘7; ܜ⮬PÜá< Ò*–Ǿ={S’.'ŽTwÛ‘Àý)_Áöèèç{g’ €+B =Y–0ù<`Æ: ê,íb[~AfÇ>Ʊõ€°Ã"Ǹ3áô®êUŠmˆŠy>µÙx{SŽh¾Î² øà}+¬·p±‚MN’çš‘žjBÜý*¼‡9"¨O6ÂNqQ ¤à޵b-MâéŒ}+VÚðL£‘“WÒUÙ·<Ó~éÈ«¾áœÕ€~Q‘šz6&§Y sS$˜5cÌ߆¨˜âd状ò¥E›Sk”×–Âóš¯(*w¦«»ɬû©Ë£Ôr+P¼Ù$t¬‰·0WÊIÜÁô¨ÄÔr:h#*Ab? M„ñ‚x¤(@0~‚¦"q‚äqQƒ’X3ŸJXÕdØî)ìH 9þt¥A\0æŸåæ”ͬ1ò;ÓL»26”ædeÜȨ$ˆÜÜw¬›Ý;‹?²Ÿ–=ûÈ“\V»a™¨BaR€py{ÙÜ{äbªšlÃ÷`úUc’y¤T«1žjü+ Âôçã`§¡«÷ÀX\ Uíóo,  ð¹5¥j‘2)û*¶Þ2IÕŸ*9Ð dU!†âÊ{Ñ}§•³òÃÆ¸l–UÉüúŽ•ÎËö82¬ƒû½y­y4ëËØ#“ì`(Âù˜Á'¯>´²xBóp"D úUë?…Ú&—$uÅmZh¶ÖÒyªNåþõh-´qQzŽ1LxñÝÊÎ1šÉd™ïd†@êÛ´ž K 9$c¹àÿ>+¤³„óuÎIÇÞ­T¶DÙÎ3ž”ϱ¨*Ê7z `~4Øî|¶” ¨ ÷éz æõ‹½Ä\åz“Ö¹­ä–C#.{ žÂé¬îѸ9ÇZôËØç²Ž\ð@Íi$ŠT7éR$Í;q#)’Hª‡'ƒ©jVÑ‚¦DýášÁŸ]€p„Ÿz|^"@1Äš»ˆ"í)ú-nXëñÈȹ8æ·£½I|Ã>•n9cÅZY³R\´èçA©Ömì1Æjôx ‚{Ts°Á+Ú«Ç~ Á'©¦Ë–ØqÞ¤µ”Q‡UëPO(ÞI<T.¥ã¯{x!]Àž;{ú«›º“Ì”õV\åMF劙ó‚:Ó ÝОJ Á^@'“NÚÀíËb¸lÀçžôï(•Î0x¦ùL§oÞžm|¸·+î)¡zš‘ ±”c®êT`«€NG41n Üš » œœúÓ$\©I dTD/–wÀqUÔŽÙ`x9¡Âìá‰ïY̺s;Z,Îê+ϯÈk•8ÆW¥Q4ÙÏ%øäh˜2š¹ Ã¨ÍkµÖûž5àá~Q‚jm ¹’yÛ‚ ôlö?SNdšêåâŒPçwÌ1´u­k{ˆW*… CÌ0pÇ·|ÕØô•ŠÏË’Bò2í!¼ºÜ$Î}ë:K¶<’Äýj«ÈÄç<hY µ,sû¤ñÏ´m5gˆœàç½tzˆŠ²»39ü€®–ËÄK4»K€;{Öýž¨’½šÑ[…fëS£àöÍJï¶S·±©…ÁëNYr˜ïPOoº2ËÃAëK¢Àîäô§1;<†IÁ`OzÁ¾Ô• ‘+|ËXÞ4’8bFî™ìjÉ™X°ÜW‘úJnO˜½9ËpêHYUÄgŽx¥ ò/œ~4Œ‚ #¾)v>ÓÇ®GJ”…U%Žx=i…‚°~@iA;†Wž¦“ã>ôð©¿.¹R9úÒacʃ‘Ô‚(p„gâ9švSÏ_­Qx÷¸QžF[ÓÒ "É?7ùúUk»~îFE"Ÿ/r²•dPÙo¨íO‘ð˜1ŠqWAÉÁ'èáIÈ>´çO5Žì`ž;Rù1íP Ó<’ï zvì0Ú8ô©v®ÂÉ÷‡\Ô[˜œœóÇ4€ì˜>=¹éJÛäš­#¨u,ã¦H*¼ì‚1œAçµdßjAk$Í–`°ìsÅyåö 5 OÎÚN+6@DŸZVå¨'ê@iq“Šy…Ç8¦#¨¤¯|]CO³…¼©Ä³—¨!x.yî¶ êf›Í¥´Òˆq» Î3Æ9©‡”SÌ–d*y*:S¢{{©pA`t~EYŠÒÞÖ34’æNÛ1QÆŸj$ˆƒõt‹{[p-ö±#—šŽÆ8ZQ4äï T÷oq'›q.SМYM5£e…Rp0ER{袉Õ˜¯R9¨~ÒÛÈÞ2OŠt· S1²ª©åOz_4Ü)P@bpã¨ÒGVG« íúSÌ *‚îÇwiZÏ'i•FþÉa UŽÞ„šãµQûÀ‹Ðzw¬9©9¨ÃPäâ—ÍšPÀ’M&ìÓã$ ç‘Nf<àšb¶O&¥ 9¨ä~1KoœçÞ´â|€súÕË[ƒã§JÒ‚òH“¯Ýjé´òÎ{ã"»>æÚî0cœ?=;ŠÒk`Ãå=cÜ\Ée)I8Vç&Ÿeys¨"D¹^O¦ ÿëU˜<3 ]5ÈgY˜åˆ=sí[VúbÆ€HîjI-€è+*îñ´R”‚>•ÈËe‰WHЭ ›‰ÂðsYꤘª±ys!’I3œñŽ*³¹l“Þ€„ÂÍÚ¡íV£K6Ôæ«÷ ÏúÊ„ ÓÔúT‰w$g±õr+è‰cǸ§\}a߇qè+ÓnmÃã `r8ëL«eH{¡¤¦ý ËÛµ((Ã#° ÏçMŠ3Î̇<{U«k}Ì76I<Úž‘‘ÆséŽië—WžØíO•A8QÓó¨¶*8ê§½ZH;“¦3O ž½}éøÛN)wŒ+àúÒŒ}7WÍ 7éML˜'•>ÜAíOÜ,µUÝ5‘¢aëÆ«H›%+èjµÀùóPö IKKØW³)Xˆ§“ì&í¹Î1CªÍ€¿8à(†aó/Ì:jan¯RÀ`úÕ+”eÃ$žøô4CtÈÜŒåjxæ]™“ü©‘&yçô©‡Ü-ÆêjH ¸«!¼Æå€¹¦dÇ™­4èc;;ƒZ n)Œu2À˜Èp5(Q±²œõÎi²lFg¯¥Iùiƒ¸ƒÔgŠTã,À‘éÞ§;RÚ7Ï9äjØ1ÉQ¹Nq×4¹ $jr¿/Z‹i˜dàúҦƄe@p{ö¨\(ˆÜpFOj«”WÈl+sØTŒç2(ëR@l!õã‹ a™ÎKœ(š¢òE f'g95Ëë>"³‚61Iʧ!G$Ÿzågñ£G+(F;Wg8ª±ÂOZ´¦Énßc’nÀT^m·W-Œò(ñD‡í1jÁ H§/(GzU@8#ši‹œ“Å4’¦¸%§'¤¸I Û\u©-RZ…aÏ­O03±Æ9¦Iâ„òŒð-ì}?ϽW&…d*s´zÔx«ªÂÍCq⇒Àë’sYKªN“‰F2zèôÿ¤ßñðÂ7Žx5ÐÙêVÓ !”ẓ֬™b¹' ·iÊšbNÂO›$Ž•qebÀŽw~um mÈûÀt§ mÀ89Á©Pœ‘–î)줒IÚ}†i ÂÊäzPÁ8Ï$Ò7|f¦ &=8⣑iÈÈÀ¦>v®cŽ´‰îáOÍÐÓÌ.øØóŽ´‚&Wb=)å%KC,yä€íLTÁÊ©úæ¬$,G8敆￀5ÐQUTöÁëQùDôëR}¶qžib·U$§­.ÇRþšµeÙXd>jÐ#$±Ž8àÐy0³B)f‚<Ó„;òPðzG’Ê­û±¸r8äÒ4dc9ØÒ¤†o•À9{¸«x²5j÷éR!Û R„ÿtçÚ›#mbê tö¨Š†bCÈíI(a’ÇÐzUr *–`<ØÔ !yq»¡É§ °¹XÇÊÄ¥aê:ýš8žtV ç$û^u­x²{éÌv»¡ƒÛœŸ~k2Öœ†<úÖÂÛ¬6ý3MQéO=1W.£1èNqÔ ¡áXÆ.]ŽîµOÄe%½_-Ã(^¢²@Å$uÆxÉc–í“€=ê ¯$¸cÎ:»æn€á@çŸzŒ»Ë5%5™*…%0FîÇ”Ösn`¡OŽôÉh¨\ô9>ÕJYJ<Æ&6ëÏ"²µMrÇN…Cº°ÁÀÈÉÍrzߊ'Li–#ŸŽ#¶+’6rÝrÄœó“Íb´g±È«“ﺷ‡< f´Fϳœv*¥¡inpXàVŽ ûJ.?„×!rs;÷¨Ðö­¨¤ s nÞvÏ^´³¨K´8E :!ÈJr¢PTœ{Õø¤(:wæÏ#¡rXiÐc¦Ïl®8QTg´( ]~Pjhne…³²ý+¡´ñ4An3¸w®ŸN¿ŽeŒ£àJÕšLF0aÔž8©`—9ÝÎZÐ*‚§–ã¥ûÛÀÅG+ü˜SÀÓ#™vgf õ`i^,A$éOܸ\zcÎiîþ^ÍÊ ñ¦ÊÙ$± ·ANS· È9楮<³õ8©B§ä<ã‘Å0mìÏä) ) ö=:SX–' ŽØö¥TäuÍ,UÏ8Ü@¦,$nvåGóþ©£%Ç÷ _ŠÝÙwªåG/z·,¥[^=I¦8xðêþ*ÊOºV@A fœ¤¬ô4æfs‚1ŒŽ=)ȱ/€€8뚯ä?žV8Ø&Anœ{S¯ã¸Úê 7ißœ(^µÇܯ|zÔCïUø%ŽëW®˜³Ç#.Ü6â«^’̃×ô©¢9EúS¿kt¥¶<ïVš'ò„„|„ãw½XH¸±kˆ¦VÛËÜV<6k<}[Ûý>K ŠH¼•Eˆ­3TšÌ… g¡ÖiúÚ\7Ïlõ­ËIIoÝ0à ó[0\îERlòjK¹v‚w‚zqëPÂC£'åèYƒˆÐ*ä1˃Ïç5m¼¦l*,Ž6õ«y ¯ƒÓ¶*B«#(c†ÇÞíI4 1\† úõ÷¤OIè*S£náÖ”ÊÙguéL'/ŸÓœ2¤çži¬“oÂd©?.x8«p¡Èù±×ŽE?Ê\Œ“MœyhÈR}ûûÕ\Ǹ*çpõîkBÕ¤‹åäsøU¨bà³’sÀä Uˆíãwhå<‘ÁÈsQ-«$€Œô©bc’K(ïwè=xï\.¥{}?™y#;æ®èÐDbf•€ÉÀÖ«Ï•|àã†íIsu¿…ª‚¤ÓÔm9 Àûqžãi_5¶Óœå‰'ÞŸÐzTm(è9¨L„÷¦î£©£S;ÒÓ–§·x#·5µá´4Ò“óÅ^º ¥Ñ÷Çcùúš¹w¾YOB+‘œæfçœÔur3óZ× *¢«¹#ž£«] 0¥ß9)öç1/554æ’Üá˜VMÚ{0”`0Êg½høyÃ-Ì ~R„ŠÅµ>V ÷d±¯[%ÜžhmÁxúW+yb`‡Ý=*’ðjÄs4l ’1]—â•Åšê­5t?ŸN3WbRN H-À©%vu%dz.ÿ=? TϹxolS`€‚G^´òcÚWyBxëùóL‘FÌAr§#ž)ÈéäîÜU— =*´÷K*sØ+6á‹*;±RNäc9J¿ñE²Âg¼†) !ÜËŒðqÓñ®_Qñû‰JéhFOÏ$‡!Ç”¢œ3WtøüÉvŸJ·§Jöí ÈV=kNá³i1ë–¦iÀ\ Tš¿ú¢{æ¸ùGÎXr3Q޵j3À­VŒ6½Pgàt÷ÍU˜ï·¸ëIluzœRùS!ǘEhÆ»íäÀ8Qž;RÙê'L•¥R9à‚zÖTºŠ½Ûʈ@fÈ¡&µq08µã“YSO, ‡`£Ò«*R 38gbÌ›½HíL1³àƒÜžô*`üÇ!ªÁ€X#Ç4ª‘»s»bh@ó´äd¯ΦHè'§R= Y,»X…ÏòšÕqéÎjd¬ÎW·SëøU‰cŒ@@^GrsšKKp;…Ú~a»Ž*K†U»ã²O&<íe®:úÔÞbä`“’8Ç_©íC‚8A¸e³Æj‚ –óXl'’8J‡ÌŸËÜ8Ϩô¢{˜’ÜÄW•éƒY7·,m%ˤ ™Î3ÜŸzáüMãéC5¥™F*6¬Èr¾™«Î^W•Ë1É'&¬A SZÚ‚¤?óIñZϺL•ö§ëW0\,Î5¥á¹m,ìä–yIÙÿëŠÍ¿×¡´I%•±Ý@a^[¯øŽëV¹eÂÑIþ~µÏ'­8&*ì ª­ZyÊ©€qÚªM"<{BóëUã »æÎ)Y2äqéN (ÛL'ð¦’AHZ£-šÜÓ”ÓW’)º¦´].=*k¢Ac\uñÍìŸZ¯Ú–†ûµ4ñN+SIà¹ö®‚ UëÍaίop× ÷Žj;«æG ÍÜTÒG"é$ÌçvyΦžŸ6¿j²°ÈH ÓÁm»rqéMÚăޣÆd\‚Fy»½[±µ±\Ï2„û¨úŠžóÅÖÂŽÒÙÙñJzW9ónG³±-ÇsV’ÀÈQùR•ã¥Bã X^E)^¼U…>`úSœúÖ¼Z©qeÐÚ;$¼é[ú/… £H×Ñ«c9×ýzì-áH"RƆùPã Uˆ÷ÞWS×#ЏcxùÞ8î9þUJP€;•#/îÁa´0$1êÏ4A,ÜãùRgæç«sJˆóJ<°Aè=jdµ‘Ï÷³Œæ¬àFH˽Á§ïùDhx*1Éö©m¢d”ŽBx¥šBB©°g#µC´ùAŠÙÎ3NFs7Ìxâ‘Qâ )åOJ—Îf‹ç  'Šlûa+ó‡$  pwzõJ娡¢8 ã¿éUÞB¥Yó‚Z«y¨‘ÞÆ ‚Àp>¾•ÏÞx³OÓ·æ78]¹?_ʹë¿ÇspæÝ¼¼p…QêkœÕ¯.o#%æÞ£žµ—i˜®ÙÉ´ÖB£bƒó0žgo+`ásÅC»=hš&” óM-Q´€TFBzRª— I©¥¶hP3“Ú¶tÿõiW÷…‡'Šuƒ¹'j{—¨Ç½qw'7RzˆRÒ?Ü4ÁÏ4êpéZú`ýË·~­¸Oî†;)ªÎ¡¬þ~FyÍgiP$𔝰AÀ÷«‰ÿC“¶^¹Z|3(÷¯K“CY®Á¸÷zæ°îaÞ­DsOz~ÍÎ ±è£’j¶>VÝÓ¦)ñÅpèÏê£$ªç˜Z@N㊹g¥O¨åDXr ·Ÿë[Qx1Ò¤šU9 ²^ß…uÐ&ÈD° áp1Ÿ¥X !„Æjç=jF‡²pGû=*Håç#*py©áR2âi¬›ORIç¯Ö¥òMÆì@ìM=¡e\‚3ÆjKH“瀰ŚwšUqIÉ VcŒ:Òá†pÿõ©nÀî#<š’%Ò.9aóU‰cÚʪ Ž:æ¡t’ILL¬ à°Ç#ð¥c–ÎÞFsÐRíWvW*p)ªé !ÝlûsJQHÚU°NàI9Ç­U˜c*§{)ÁÆ9÷¦G±JÊdVÀ$¨==)ò\±w‰•Y¹8ãõ¬KŸiÚuÞÛ›•ógõõôÿëWk¾9¸¹wK<ÀŽ[vÞ8ì1ôþuȇyC39$œ’M_µDy ³ª¨f–{¨¤¹÷éL´¹òƒaµ$· ÄðØT§žô½EqÔÐN)–?ãW#´ŽH¸l·zdv%+'~•úc¡Ì|ЬH¤R©g2° ã°­¦µs²ÙO®j¼Û¾Ã‘œ`ÔâfÇ$õ¦êGm»© 8 bpp --> 1 bpp */ pixt1 = pixConvertTo8(pixs1, FALSE); pixt2 = pixThreshold8(pixt1, 1, 0, 0); pixEqual(pixs1, pixt2, &same); if (!same) { pixDisplayWithTitle(pixs1, 100, 100, "1 bpp, no cmap", DFLAG); pixDisplayWithTitle(pixt2, 500, 100, "1 bpp, no cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 1 bpp <==> 8 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 1 bpp <==> 8 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Conversion: 2 bpp --> 8 bpp --> 2 bpp */ /* Conversion: 2 bpp cmap --> 8 bpp cmap --> 2 bpp cmap */ pixt1 = pixRemoveColormap(pixs2, REMOVE_CMAP_TO_GRAYSCALE); pixt2 = pixThreshold8(pixt1, 2, 4, 0); pixt3 = pixConvertTo8(pixt2, FALSE); pixt4 = pixThreshold8(pixt3, 2, 4, 0); pixEqual(pixt2, pixt4, &same); if (!same) { pixDisplayWithTitle(pixt2, 100, 100, "2 bpp, no cmap", DFLAG); pixDisplayWithTitle(pixt4, 500, 100, "2 bpp, no cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 2 bpp <==> 8 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 2 bpp <==> 8 bpp\n"); pixt5 = pixConvertTo8(pixs2, TRUE); pixt6 = pixThreshold8(pixt5, 2, 4, 1); pixEqual(pixs2, pixt6, &same); if (!same) { pixDisplayWithTitle(pixs2, 100, 100, "2 bpp, cmap", DFLAG); pixDisplayWithTitle(pixt6, 500, 100, "2 bpp, cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 2 bpp <==> 8 bpp; cmap", L_COPY); } else fprintf(stderr, "OK: conversion 2 bpp <==> 8 bpp; cmap\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); /* Conversion: 4 bpp --> 8 bpp --> 4 bpp */ /* Conversion: 4 bpp cmap --> 8 bpp cmap --> 4 bpp cmap */ pixt1 = pixRemoveColormap(pixs4, REMOVE_CMAP_TO_GRAYSCALE); pixt2 = pixThreshold8(pixt1, 4, 16, 0); pixt3 = pixConvertTo8(pixt2, FALSE); pixt4 = pixThreshold8(pixt3, 4, 16, 0); pixEqual(pixt2, pixt4, &same); if (!same) { pixDisplayWithTitle(pixt2, 100, 100, "4 bpp, no cmap", DFLAG); pixDisplayWithTitle(pixt4, 500, 100, "4 bpp, no cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 4 bpp <==> 8 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 4 bpp <==> 8 bpp\n"); pixt5 = pixConvertTo8(pixs4, TRUE); pixt6 = pixThreshold8(pixt5, 4, 16, 1); pixEqual(pixs4, pixt6, &same); if (!same) { pixDisplayWithTitle(pixs4, 100, 100, "4 bpp, cmap", DFLAG); pixDisplayWithTitle(pixt6, 500, 100, "4 bpp, cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 4 bpp <==> 8 bpp, cmap", L_COPY); } else fprintf(stderr, "OK: conversion 4 bpp <==> 8 bpp; cmap\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); /* Conversion: 2 bpp cmap --> 2 bpp --> 2 bpp cmap --> 2 bpp */ pixt1 = pixRemoveColormap(pixs2, REMOVE_CMAP_TO_GRAYSCALE); pixt2 = pixConvertGrayToColormap(pixt1); pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_TO_GRAYSCALE); pixt4 = pixThresholdTo2bpp(pixt3, 4, 1); pixEqual(pixt1, pixt4, &same); if (!same) { pixDisplayWithTitle(pixs2, 100, 100, "2 bpp, cmap", DFLAG); pixDisplayWithTitle(pixt4, 500, 100, "2 bpp, cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 2 bpp <==> 2 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 2 bpp <==> 2 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* Conversion: 4 bpp cmap --> 4 bpp --> 4 bpp cmap --> 4 bpp */ pixt1 = pixRemoveColormap(pixs4, REMOVE_CMAP_TO_GRAYSCALE); pixt2 = pixConvertGrayToColormap(pixt1); pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_TO_GRAYSCALE); pixt4 = pixThresholdTo4bpp(pixt3, 16, 1); pixEqual(pixt1, pixt4, &same); if (!same) { pixDisplayWithTitle(pixs4, 100, 100, "4 bpp, cmap", DFLAG); pixDisplayWithTitle(pixt4, 500, 100, "4 bpp, cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 4 bpp <==> 4 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 4 bpp <==> 4 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* Conversion: 8 bpp --> 8 bpp cmap --> 8 bpp */ pixt1 = pixConvertTo8(pixs8, TRUE); pixt2 = pixConvertTo8(pixt1, FALSE); pixEqual(pixs8, pixt2, &same); if (!same) { pixDisplayWithTitle(pixt1, 100, 100, "8 bpp, cmap", DFLAG); pixDisplayWithTitle(pixt2, 500, 100, "8 bpp, no cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 8 bpp <==> 8 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 8 bpp <==> 8 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Conversion: 2 bpp cmap --> 32 bpp --> 2 bpp cmap */ pixt1 = pixConvertTo8(pixc2, TRUE); pixt2 = pixConvertTo32(pixt1); pixt3 = pixConvertTo32(pixc2); pixEqual(pixt2, pixt3, &same); if (!same) { pixDisplayWithTitle(pixt2, 100, 100, "32 bpp", DFLAG); pixDisplayWithTitle(pixt3, 500, 100, "32 bpp", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 2 bpp ==> 32 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 2 bpp <==> 32 bpp\n"); cmap = pixGetColormap(pixc2); pixt4 = pixOctcubeQuantFromCmap(pixt3, cmap, 2, 4, L_EUCLIDEAN_DISTANCE); pixEqual(pixc2, pixt4, &same); if (!same) { pixDisplayWithTitle(pixc2, 100, 100, "4 bpp, cmap", DFLAG); pixDisplayWithTitle(pixt4, 500, 100, "4 bpp, cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 2 bpp <==> 32 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 2 bpp <==> 32 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* Conversion: 4 bpp cmap --> 32 bpp --> 4 bpp cmap */ pixt1 = pixConvertTo8(pixc4, TRUE); pixt2 = pixConvertTo32(pixt1); pixt3 = pixConvertTo32(pixc4); pixEqual(pixt2, pixt3, &same); if (!same) { pixDisplayWithTitle(pixt2, 100, 100, "32 bpp", DFLAG); pixDisplayWithTitle(pixt3, 500, 100, "32 bpp", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 4 bpp ==> 32 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 4 bpp <==> 32 bpp\n"); cmap = pixGetColormap(pixc4); pixt4 = pixOctcubeQuantFromCmap(pixt3, cmap, 2, 4, L_EUCLIDEAN_DISTANCE); pixEqual(pixc4, pixt4, &same); if (!same) { pixDisplayWithTitle(pixc4, 100, 100, "4 bpp, cmap", DFLAG); pixDisplayWithTitle(pixt4, 500, 100, "4 bpp, cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 4 bpp <==> 32 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 4 bpp <==> 32 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* Conversion: 8 bpp --> 32 bpp --> 8 bpp */ pixt1 = pixConvertTo32(pixs8); pixt2 = pixConvertTo8(pixt1, FALSE); pixEqual(pixs8, pixt2, &same); if (!same) { pixDisplayWithTitle(pixs8, 100, 100, "8 bpp", DFLAG); pixDisplayWithTitle(pixt2, 500, 100, "8 bpp", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 8 bpp <==> 32 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 8 bpp <==> 32 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Conversion: 8 bpp --> 16 bpp --> 8 bpp */ pixt1 = pixConvert8To16(pixs8, 8); pixt2 = pixConvertTo8(pixt1, FALSE); pixEqual(pixs8, pixt2, &same); if (!same) { pixDisplayWithTitle(pixs8, 100, 100, "8 bpp", DFLAG); pixDisplayWithTitle(pixt2, 500, 100, "8 bpp", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 8 bpp <==> 16 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 8 bpp <==> 16 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Conversion: 16 bpp --> 8 bpp --> 16 bpp */ pixt1 = pixConvert16To8(pixs16, 1); pixt2 = pixConvertTo16(pixt1); pixWrite("/tmp/junkpix.png", pixt2, IFF_PNG); pixEqual(pixs16, pixt2, &same); if (!same) { pixDisplayWithTitle(pixs16, 100, 100, "16 bpp", DFLAG); pixDisplayWithTitle(pixt2, 500, 100, "16 bpp", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 16 bpp <==> 8 bpp", L_COPY); } else fprintf(stderr, "OK: conversion 16 bpp <==> 8 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Conversion: 8 bpp cmap --> 32 bpp --> 8 bpp cmap */ /* Required to go to level 6 of octcube to get identical result */ pixt1 = pixConvertTo32(pixc8); cmap = pixGetColormap(pixc8); pixt2 = pixOctcubeQuantFromCmap(pixt1, cmap, 2, 6, L_EUCLIDEAN_DISTANCE); pixEqual(pixc8, pixt2, &same); if (!same) { pixDisplayWithTitle(pixc8, 100, 100, "8 bpp cmap", DFLAG); pixDisplayWithTitle(pixt2, 500, 100, "8 bpp cmap", DFLAG); error = TRUE; sarrayAddString(sa, (char *)"conversion 8 bpp cmap <==> 32 bpp cmap", L_COPY); } else fprintf(stderr, "OK: conversion 8 bpp <==> 32 bpp\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Summarize results */ if (error == FALSE) fprintf(stderr, "No errors found\n"); else { errorstr = sarrayToString(sa, 1); fprintf(stderr, "Errors in the following:\n %s", errorstr); lept_free(errorstr); } sarrayDestroy(&sa); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixs4); pixDestroy(&pixc2); pixDestroy(&pixc4); pixDestroy(&pixs8); pixDestroy(&pixc8); pixDestroy(&pixs16); pixDestroy(&pixs32); return 0; } leptonica-1.70/prog/grayfill_reg.c0000644000175000017500000001410512240303067015264 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * grayfill_reg.c * */ #include "allheaders.h" void PixTestEqual(PIX *pixs1, PIX *pixs2, PIX *pixm, l_int32 set, l_int32 connectivity); int main(int argc, char **argv) { l_int32 i, j; PIX *pixm, *pixmi, *pixs1, *pixs1_8; PIX *pixs2, *pixs2_8, *pixs3, *pixs3_8; PIX *pixb1, *pixb2, *pixb3, *pixmin, *pixd; PIXA *pixac; pixDisplayWrite(NULL, -1); pixac = pixaCreate(0); /* Mask */ pixm = pixCreate(200, 200, 8); for (i = 0; i < 200; i++) for (j = 0; j < 200; j++) pixSetPixel(pixm, j, i, 20 + L_ABS((100 - i) * (100 - j)) / 50); pixmi = pixInvert(NULL, pixm); /* Seed1 */ pixs1 = pixCreate(200, 200, 8); for (i = 99; i <= 101; i++) for (j = 99; j <= 101; j++) pixSetPixel(pixs1, j, i, 50 - i/100 - j/100); pixs1_8 = pixCopy(NULL, pixs1); /* Seed2 */ pixs2 = pixCreate(200, 200, 8); for (i = 99; i <= 101; i++) for (j = 99; j <= 101; j++) pixSetPixel(pixs2, j, i, 205 - i/100 - j/100); pixs2_8 = pixCopy(NULL, pixs2); /* Inverse grayscale fill */ pixSaveTiled(pixm, pixac, 1.0, 1, 10, 8); pixSaveTiled(pixs1, pixac, 1.0, 0, 10, 0); pixSeedfillGrayInv(pixs1, pixm, 4); pixSeedfillGrayInv(pixs1_8, pixm, 8); pixSaveTiled(pixs1, pixac, 1.0, 0, 10, 0); pixSaveTiled(pixs1_8, pixac, 1.0, 0, 10, 0); pixb1 = pixThresholdToBinary(pixs1, 20); pixSaveTiled(pixb1, pixac, 1.0, 0, 10, 0); pixCombineMasked(pixs1, pixm, pixb1); pixSaveTiled(pixs1, pixac, 1.0, 0, 10, 0); pixDestroy(&pixs1); pixDestroy(&pixs1_8); pixDestroy(&pixb1); /* Standard grayscale fill */ pixSaveTiled(pixmi, pixac, 1.0, 1, 10, 0); pixSaveTiled(pixs2, pixac, 1.0, 0, 10, 0); pixSeedfillGray(pixs2, pixmi, 4); pixSeedfillGray(pixs2_8, pixmi, 8); pixSaveTiled(pixs2, pixac, 1.0, 0, 10, 0); pixSaveTiled(pixs2_8, pixac, 1.0, 0, 10, 0); pixb2 = pixThresholdToBinary(pixs2, 205); pixSaveTiled(pixb2, pixac, 1.0, 0, 10, 0); pixDestroy(&pixs2); pixDestroy(&pixs2_8); pixDestroy(&pixb2); /* Basin fill from minima as seed */ pixSaveTiled(pixm, pixac, 1.0, 1, 10, 8); pixLocalExtrema(pixm, 0, 0, &pixmin, NULL); pixSaveTiled(pixmin, pixac, 1.0, 0, 10, 0); pixs3 = pixSeedfillGrayBasin(pixmin, pixm, 30, 4); pixs3_8 = pixSeedfillGrayBasin(pixmin, pixm, 30, 8); pixSaveTiled(pixs3, pixac, 1.0, 0, 10, 0); pixSaveTiled(pixs3_8, pixac, 1.0, 0, 10, 0); pixb3 = pixThresholdToBinary(pixs3, 60); pixSaveTiled(pixb3, pixac, 1.0, 0, 10, 0); pixDestroy(&pixs3); pixDestroy(&pixs3_8); pixDestroy(&pixb3); pixd = pixaDisplay(pixac, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/junkfill.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixac); /* Compare hybrid and iterative gray seedfills */ pixs1 = pixCopy(NULL, pixm); pixs2 = pixCopy(NULL, pixm); pixAddConstantGray(pixs1, -30); pixAddConstantGray(pixs2, 60); PixTestEqual(pixs1, pixs2, pixm, 1, 4); PixTestEqual(pixs1, pixs2, pixm, 2, 8); PixTestEqual(pixs2, pixs1, pixm, 3, 4); PixTestEqual(pixs2, pixs1, pixm, 4, 8); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixm); pixDestroy(&pixmi); pixDestroy(&pixmin); return 0; } void PixTestEqual(PIX *pixs1, PIX *pixs2, PIX *pixm, l_int32 set, l_int32 connectivity) { l_int32 same; PIX *pixc11, *pixc12, *pixc21, *pixc22, *pixmi; pixmi = pixInvert(NULL, pixm); pixc11 = pixCopy(NULL, pixs1); pixc12 = pixCopy(NULL, pixs1); pixc21 = pixCopy(NULL, pixs2); pixc22 = pixCopy(NULL, pixs2); /* Test inverse seed filling */ pixSeedfillGrayInv(pixc11, pixm, connectivity); pixSeedfillGrayInvSimple(pixc12, pixm, connectivity); pixEqual(pixc11, pixc12, &same); if (same) fprintf(stderr, "\nSuccess for inv set %d\n", set); else fprintf(stderr, "\nFailure for inv set %d\n", set); /* Test seed filling */ pixSeedfillGray(pixc21, pixm, connectivity); pixSeedfillGraySimple(pixc22, pixm, connectivity); pixEqual(pixc21, pixc22, &same); if (same) fprintf(stderr, "Success for set %d\n", set); else fprintf(stderr, "Failure for set %d\n", set); /* Display the filling results */ /* pixDisplay(pixc11, 220 * (set - 1), 100); pixDisplay(pixc21, 220 * (set - 1), 320); */ pixDestroy(&pixmi); pixDestroy(&pixc11); pixDestroy(&pixc12); pixDestroy(&pixc21); pixDestroy(&pixc22); return; } leptonica-1.70/prog/weasel-8g.png0000444000175000017500000000205210323370707014755 0ustar dandan‰PNG  IHDRRI\lðPLTE...JJJmmmššš¯¯¯ÓÓÓùùù^Ãf pHYsb&2¸IDATxœÖËw¢<ð Ó-¯9ÝFP»EôÛ£„ºm5Ñýt€mgú•üûsÃ3 ¶Í±S~½É½yò» ¾/wÁmÞÉGíߪª*.ZÜ˲(+Ù| Y–ísqEN†ÓD}…Eçãòºl»§¹œ±S|ºSÖ!Me"?ØË›²úCîSx„M/1•EEb Ñl³ê¡ˆ48ªÒrÜ·àf“5K7˜ÿÎÒcV:ÄÙNÓÀq\p<5õqV¥Ö7&„ͱÁ ëȶÞ{Yå#iûŒo­¶¤4Ód¡CnûuJó.¥¥žQÎH 6jÛ;] ~ »ùL =£F©Úofã v ÇT7·Ø‘z"[Ûüˆ\M6{ ¨R24ù>©œúSÒåGì8AêR`nŒÖguÄÓµŒ_•EÁ¡nä²{WÛÕÌQÊdëÀ鞯¯Ë`žª÷~x± ~÷»;ÚqEÎ ¶Â½Û<\ ý¬cYBé üFI'³©|©ÍN}§`¾[”t½e.^æÝ’PõÚjUFgJ«©76¦×$®¦#is½C-û™u'RD`;uò&M5t©¶Ÿ9$Ì8K-L H»ªRJ†ÞOý&Îð£äq¶3ƒqÞiRßÄ{ÇÄÔòàX_OÊÖ{¥Ã´O:ò„B?iõ]Ì"XãêHc<¿çªÔ;ã†ä„¶ëÏS…ÆÍªe¤SlÞ ÜM}£|Dd^jãÉdÿLCZ_gÕ¼r”Q>–³YàüP©¡ÒäèXÛG'ˆCSþŽÁoîŠAêNð!nB쬻{ê†Äó†¬U=ÀÏeíâÀYʯ$§åÀüZ2"ß<úðµä©%Ÿ{ß³õ ÉÙö^Ò é¸×%ç,ÙK;´‡®½ ™njȨ¬HHéO%Ìqµ¥D¾›ÑÃên*_ü„¨}ŽõùcØV/ÿÞOe´‰6ÉR°Ãƒ|6V}9ÿ§ç©L º‰ð¯% â-|µ—õß-ÕM¸ídõPïHïT=ºu† ˆË!Ј3ªÊÿ¬±pîN?§Zå> æªå¸§ ®µŽ†”‹7y-vZû:Ò[ó€w¡Òwyz»8ÛÆRñ\SÈ6‰|y´éï5‹V¾1óû¥ n23jÊÀ66ŸÅܾÂÜ¢{{ÛJIs‹Dî¯1Þ‹ñàØ#7oK;ôžzGQ¢ÛUÇö=Þ)…½÷8Û(£ÚÏz¡ÜVv×”ÊöiFõMšÙuï’Ð=’% ìÃY“Δ\w`ôi¿¯MEki`£¹gºuw¯ÙÌLïb‘ìdH×~½±4w |›ô2éàülkŒcwoåîÊÚj¸µZRûh›±|@”Ý(ÿ×…¨Ä¹‰}­?ïŒÚò}ÞD×fxÃ×[Ð{E§² pnßF Ûÿ½™nˆu;€îȯ»ø¶îpÇtk´0÷*ù•Â]ŸßŽ×îf‘¾óº?MnWYk*Èý*Ј3ÿêQSŽ;-V¸p÷¸ÕšË,pØ>¹|Z«ËÓ¡r3ƒ»4;(½lÛæúú‘çš*4àÌ€oTŒçšû –¨ÕÞæÝ~S“íHÚóû–t€ÝJï}tÏ©" nD×ö¤ÅÇO»ù¿s|ÚcojˆÝ[%²õlt“äû -ukê}ÜÒaý”ö¤Ý‚­ƒ¾ |( ¯ù@ƒÿL;²§¶ ¥ÙHÁŠ•´·ÔÛ¾¸w¤Jén9Ìïmâ°ª¹ïqtm¿Þ| ö Á~†utN>m–›p+LPð.sª½ó¨ ¦J(ªEªé¶°cnÝT-÷FuåÿÆâh³ïV©ÑkßÀ(+Ùí˜W´òcÃð}ó#fX 8#3L¡H"Ux‰1Ôy3&°pº©E€S9(+ØR£-æOj”ÏÇ–/¡ÃnÓ9µ3uxdc¸lGÜkÌÜDÍ“@5¿Ä ÉìÂg¿Uy‹WŸ™: ÑÞÔ Ëà@àL‚é¢Ï y‚¾Á1_¦Æ­vžƒÆ b0ÅLF`RæÔGf˜Ì‘*9ž+ÌyG,ÊdÞ‘)ˆ èz¦Äª£kÃ5·ñ¼ÆÐKVùc¸µ|ÚL“F_nìûn×oXù›« 7 b“ö†×˜{a,á•¶Ê_Kþ¿L5‘YÊ0j²7õÛ19èq2¾Ðawµ"¯aÑ’À‘›%™µÔ@Þ÷iŒ•\‡{i ˜'‰1G¦¬3ZÑŒ§ #м ËZ>ÒÌm%nÁ9Ì)!˜È@Èú´ìò$<ƒE}â-MÛ™8Î  '\Ì*ŽL'læÌ˜Ê)Ì`áL ÚÖY‹™À®Ò«bŽ,g±»íÑØ|Í+#hƒC‰ÝMå­ÿßÀG•7˜û8sž PíMÞH‘oWCvIBr%ž¦«˜³`–šw.¬R2༮DàRÅd) £à<‰hàÖ•O®º˜¼µ9ǵ¥„Vð /t ØÇLε0[Ž& `‡L çiÕO–r0ew5𜮴;ȨtEA|4gµ>¯Ô;ç¬ ¢ÌâXƒc¥H»²4D¬±`n1Ñ\SëB)ubаp  ‘¹LŒ¥Y×±“Œ\]F‘)@ª^–ØÇÌb 2G€òlÐÌù&{@¤ PÁ— ëõG5Ém&\™|ßVål‡ÊÃŽÙQ²Ì;‚õvó1wJPä¼×Ïë¿õÉôM·ë¼T˜Å˜A0 ÅD° ÞаŒ)¤Æ€“E蘘kX®21{ F*BdF´œšyUÎ2‘¢­’Q2ƒqÄ šñƒe¸T§2{žR+ÍÌwxÁÜ]pË"¬#³D`>†vŒh…Ò!©†…Qöuƒ…ÀÄ 5ïMD"‚eàÝi¨Úê `\™m`³u]wÕ"n› ïìÊÊ+ýœä&Lë¦ ê%f^ëxD‘ÏÙ½’MÈÃM færÑfT¸ÞÈ` %¦¼É2%rÈŒ‰È”©sVêàâ @l™°cSSsd&L’ é{µ,0©E™ û)a:œ)8Ó(èø´£vÄ­4D«)¹)2JÕÞ˜’4 80­X‚Çp9g•ÀèóXct»†eF.vS‚wΔ½÷Ü 4Ž; à±Z©*q,‹öD§˜OD4tªŽÀÌy2%V#3êy–ÀÎêJÔS¤Y¦Î‡%PDAœ[xø r®š̈¡X«° …TÄ"Ÿë¬™)3#ÀxÛÕ°GK¸†Öð!Ç,¾É`n»ëà{ §Š†±²‡6šÉF&΀b¨RÑMù*µn¡áÜÅØW#"Y0gDj¹ákƦI…­Ø@Ä+ʵÌ(¤B ¹ žÞXìɈ‰ab sLÒ`α¨Ùéd!+g4bÐH¡4z«ÎV·'óÃõÏ-ö…Šj?ò+Ž]È,Ì}伟p‚UÇ®Ç Š ½h¶Œ‚&æ¼GWHÅk O‹kD¢ž+ÞÔ,2Ãâ vºìëÊ(rÊpdŒ@>,»È1;;S%˜±Sr¦Lb¨PÌLfDR"œ°2UŽ<„XÉõŒ¦È7‘¨ä^‡¼£4`&¿ÌwnÝy7-nÍ[ßw.£’ÕSlÐ/6ãË8žÖUÚ»Tuf{¬n³¼{æšsU" ÊD P@5U˜s!¬’¢Yf¢LÞ/Á‘»°¹&ªÂ&³ã)T=/É›ös³,i¯5^z]çªXt0à.dDœe¢‡Â&í âee @´ÛÜT´3‹ZgÆ1Û@Ç!Ђ‘ÁV§­Ù`á, g&݈8r.rý¥t)Ó(²ÀÎ(&É”\L‘÷±ÏŒ§|ˆTD–Ceæ8u&  ì ÇNf“”å¹]\çÚÞÖ´4ç½ð7Ð:ý»fT¸8vмwRiËIrgRI‡j¶¦*sQ(‘A•`ÌØ” ‘¨gµ\±·™)g™EŽ(ÀÐZ“JFf}¥Ø™-&¢”0‹@AùW±Î¥¯ŽˆCvpµð Ç­(C?"ãÒoùKŠÌX3#drê-U‡žLtűª"O4£ølÎmVò ìY'òÿó;°ÑðN8kèl÷ÿmÐpk ©æj½%Îj‰ï‰Se‡7¹{oõr7ñm¢¦Vk¸;V3-LÍu`å–‚j®­•ƒL2cfÔ *ÏXP 佋ÀHSsžÈB°È/UÈ),£V€î”¼åÞIY*!€|lf0}kÞ÷þä¸ÉÞ&}4¯¼¨tDŸ¬ßVýž¸g»ooT¿‹ù³Ýë¡\­JµÀïâ"xGÚž­Øj·}RUŠ­L¡Þ³ˆÞ¤q?Õ3«)j¦WÄÇh²7¡¦×lª©”×@›zba»Ä{ÿíµøwÑ»ÐµŽ¶"Uµ‘¢Q°þ%)7ïw²ë÷nUÀ´ÓëèlXT¹Ñ»^¹ÆzÝ¢²7ï,Ûîé\R4ÔnL¬Ü×,¡¯ƒÔÕÆ;¥}ïô.Ñîï†AbæµEhÄÙœrSn‹9Õ¼§h¥–["̸ŒZ¼ØŒ¶ ¬ŽÃÛ·ÂÙö÷ñu)Ôˆ6»·Q7"+‰Tô»K§ìpÁwgÆïK¶U¢,¡=8‹¶Æx©žlð³-óªÞÖQPQ8 â6ÉÖùûMb‰ö=U5»†áU-¾m~îOºáÓÚ-T—§;é£6¨wlø?ÞaÙú~œÜ„ õÚßB7§óî0Uh\¶ä¨ÉÚHDc€jmWl]ÙËHÊEÕE·›Ÿ·oøš Õ¤ã56IEjÖÔ™õk5W-}¥þVœ-S&«Æi€ÔY-ÁýJPC"wêÕ[¨? 3@œ¨qý±–>Í­O¥R¼áÅ«ræi+ÁJ[¡Ê#‹²y|òº‰´û6ب5õÞv—­ ë¡Â¨ŽÛb |UY—ßö!tï\ز×êóvŵµ÷¢ fà¥ì;_#¤ù˲·6ÃÖ°žc@Eù" ªŸçŸÅ•'=m5Ó–Øä2‡£XKSIŽ*ï+¡ Q¿¶Šª˜[—f› ÒÖ O`”?ó™CÐz•ß6ˆ-<±´ÑUÀ¬‚ý¦6Ù~·B»!ªL¹)¡J˜7mT õN¯%£¾îYF®!»†[áÂ6#P T=n§H¦, दeU¶½´ðº¦*øK·P­nauÆR?jôkh‹Ë¶Ü,ñ,þrqŽH1Hµœû®Œ™’¯1m†p9¿NxsĹM…r‰fMþázn.Yצ%]õ“–BÙJD›ЏŽé¼,Uí/WAóÚ¶`-„eÎ&×ùPÍ9çÓ">Œ 3bgíáZb1m!ã]º½¢¿‡Ü}_Ðq2Jö¦4©)iÔ&H$!çð¢JýÖÐ*)´µuU®ÎÚÖ©Þ²(%vëY`@RŠy£D'é¶aÆõø¢uWð¡"½2„ rÚF SZ¯§*R.j¢’1Vrö¸6ƪDÙÅÁm…åÇ y§PÑëd˜%¾è65±r9NÉhÖá…¸ØZ²s ˆúµ ]I¡¦m7 ”-~VWÅ ›S5@c»®«&ê$ðÆ]c©+%k©=­P­ÐÛ…ÚšÙa««óRJ•©R­êUÛè¾k«iwD^Gût]ãâ†Dö}O~f* îQ£½yÕ9,ÒæÊØ*LÍ­"¬-«¡Ç”¸ˆZkX£J«¯ëîRÎmK¬†­|V²¶œ“ˆ1x®cFðœãHƒ[sâ"„3 Væ¼5 ›j)o „¨`¿T-“XÆœšC1¯b*'òöñk³r=bEý»%K*÷öí"âÞ”¬w µ²ã©4Ú›±Z¥«*tÞã¦ê| Áõ† [KËÇséÿ(ë«°ü}©®pm”z•©¯–úך$ DThb5i¥Y@ÏÌrÙNJ¶VÙ,dYÅÌQ¡“™Ü–±R3+ÿò2p¦y5K€f@F "PqòmÝAKÀÔ)`F¹»_e_3óÊá0롾 ScÔïO…ñô1q&å^¡<àú}®Ùš¢šš 3¢µ¢ ‘—‹AÖEeQä³fº˜¨¬(VL0-×À"Ž pð "ÀC@™Ø”HV†¹ÛÜz±ç!li çr|l9/4#r0Êu|3G€*¹|? c3 ÎÌ•¿óBmלœ*AÍ|jÛ†X«¸¶iƒšëâ=éC2>Ž÷íß„¬Õô…b€¶¬?HÁ%ÈÈÔ¶ø¾à ù’TBÉèv5—ý XÕÓ+a«Z\Éf ÏkÞ5¹•‚®LàÌX„fã㵌â‹s›>ˆ¨Ã„-‡ì¬g€‡ÀdDpV(þ \4æK•ÝÖ‰ÝÈ9TMÖÒ8Ø aXÁùî©B0¸5S²uƒVZ£¾8­b<½ëúËJb÷¸2%æU4žÔ7Æ6ȨÚuFfL%Ï.Û‹+1jº½Û¨|ù–“[®jlåRÔ¬ew^¶¼ÃKéˆÜTøZ§F›î®¦P/… ØÌkJ\³.®¯(i}ÑRi0”œd=Pß ASòÆáJY5 o§ZÖ#ôLgÓ4{}é˜úDó+S}óYäñf3e®Š)"ãÍ"+îîP"Wr-¨‹`ìˆ ¤êfƒÆFY+XJA{…?Ȫ^Õ[kÑwý7[¦ÈmáòÁÝ–!ͽ>×ä¼aߘW«²“bÁP¾åúù:\Þ fÕÓNvð¸§Ø•  Ñ6ÿ#OÚ”J}g9^Ñx5 aôEÔöjìi=ŸXº oûctƒ¥©Út>ë—Ç.jE\±a$PT;œ˜LµÄbJaJº’~Éõ ¼Û`³R‘µÓZEœçÜO„­FßTÓÖKê-\mí¨×6¤UlÛ Ô›"îIm+fÅaðšOѸ? nÎP5N¥$#aÛ+¹×oU±Èm’%Ô~ÞŠêE [û­r… €}ûöMbgæ0z89z3(rìa³gçI·?xÖv>à&¦bggáÕ°rì[P0T©™8W-Yu9F ¨™‘‰RäŠ1d«ÜXD&æ*ËH ­­¡ÎkU£Ú˜Tû¶N·ÁY3²¼Å*3uﬣmó€Z¯ü ×mç-¾“q‰‰jrTC.U{«D-¦hjú*ƒù~Ù¶• – \b`ñÍ[ÍèƒVì¯ÜÙÙZŒ[DÖ›g½‡¨/ b—)1“‘‡AvCªúâ‡Glj÷f€<ÓÍœYEÀEŒ\®øõø"Ú°À\[ ’êóº•Ökav•¤Ê„}åO[_?V•”=¸1Ýlé6ÖàxË º/²Rmú„Š «”µZ¥­*T¼• V6ázš±øPY T»¾k+³›‡å¦‡PºV /•¤aüÍëÖ³Å÷Ãß´œ§,Õ·¯ß~ÉKcÇA.~úoÌÞàd†K"ïO½#ÅÙŽÒlÔöhØÔ2•B®Z3áRSÛÆÊŽ–[jw{¢Wù™‚©Âªº[ ›ñ}3ÎÊ`Ó÷–šË~jž°7þ¸gÛÒ«.E›êEÛÕ«$Saþ[ã¥îš¸E±¯ S3€ O×åôÊÈ/|òÐP˜“—éÀé?¹|sø“È`:Ÿ²ëB*W3Lº¤×qNõí˧=^ÙóG‡IÁdrC’ª2Æ6ƒU ÅÖ·ÝÁ Ø_mšJ³Ô¦Ö6ºçg¥K 8³ É8«Iåõ”}­}{ôm3x‘\‡³šš¿É뺥rYåÛíÊQMò¦BÞgµÄÍÌf2»˜ø§úíÑp0X›!*2¿Ä±þ Ê?÷ùàiÆq `3•9y>7{˜`òƒOÄÞìõ<¥g‰ãrU£Š‹l¨Zï%lÍ$öÜÖÚqéæ ÔÔ*¶—ŸU¥K£¶··Ýêªô‡ÁÙ׈³õ"³2÷r»éÞä‚m­–ÚÖù¨Ê k©n×é¶u4²È2¹ˆû&ß}¯G-Zý‹Þ™Sóºý‹GǧE%u±ˆ]×ÖÚyÊÌ&ú `Ǭ!“çéøÄuO+µ' J¼UÜ Ó!ÀTy½‚³&Ìhä­R_@Õ$ï(Ðö´Û,+\âš Þ gEš¦#> Æõg²¢ˆDÉ-c6ÕØÄ 3r5çæ|3<ÓŠòCX,çÁUèV1[h"&äJõmæV)âºÌ›1ZÑÇ6AŠGIÏ¿yc=ó—é¸÷ð´ó¤÷ú·Ç‡ów%_¬Á¤Z?µ‹Ö1r5ÜíXºDTò+ÏùYì;òb~Ô\&èNè÷îáŸùÍFX²št¬–§ òPƒjͪTuÐÕ´Œ2ãBánTAüF1Þ²>éüë‚ÎΖÂjÈ"¶`Ѝ¥jepæ:GoRãaÌg@&}ï\ÌÖIMU]b—樋zÄB±· j€OÂÊÒìøêÈ‘S%¦™°I²;Âë!›ÍY)I˜EH3êŽRÄ4c¨sPŠežX¦mRp9DÛÿðÛËþð¯žñüòù#>^>êæ“€lÙ‰ÇWîj‡ÎD:¤xÐzuGŽ@lÌl©uçªÜËOP 0Š\–Q’ðøÍqÒó6¬z½—öE/_Úh( oùÂÚRÅÚ&Û’"ÈÁHÀz¡[ù®œm‰Êʯ·Ý¿T{ÛŒZªÁï>hÆ;@£ðRâXdÁÐ,d}ï5ÞVª‘²-9j_-GÌ—j™8Ç€©fÁ®”]—±Ì@˲¹ºn[AÅqwdN Sé©O£QDÀ*“S(™˜s°#2‹ÝL¬ë!½)Z쥡Çae©á,pBìFžûs }'ÁÑ…?{A?;=t§³Ñkê™ê«îÏýÛ‡¤ÚÆì¼·\¢ L2S’¸ÿÁÈ!‹Ì@jÓËö°ï'ÄŒi»¥6‹Û ¥gãÞÓ~ð¿“NøCúó'h"ÑÐ̼›û\‹ ’`މó³ÕJÎhbì;þZÚ×ûuXï„©rÇ=–éÎÛæ”Þ 8£=vÀ¼½_Ûô•–‘*£Ð‹Ù„0 ªhå€3ÀØ[ÈØDÉaE6eOLË–©N‚R-• kF¼ q°ÄT]§4æNy¹Ë,ñjtÕ&Ó¥ca'+c\j–õº“Q˜[‡è0ƒ“L ~âƒùÃ,˜†4L:Þu¼Œ»e›Vƒ©ê`:Rú¢-Dò¤š†îÊ\Ç»uQÔΈ´¥ª˜Oé³îáËWÃáÅ‹£ŸÄäZ6‹Y4xg™v$ 6„¨-ɼH7²©‹"J&E>-¡QGVˆÆ]cu‚¦B-@˜OTÀÂ̤FRb(K€½C±$¦XCZ:NÖ¯š{x·ˆ€­nße‘´Ë ·ÐS» v†ÓFœÙªµ­ßNC¸a´*x»„–‹…\»Öb™DqyŒòi F0²1DN)¤€ã©¾†_ÍVþâãT^¾üͽ2’Lè`6ëúñ"Œè’âÈ…ÐéÊØù–c sŠ&K}H¦Ä¶²˜F1­µæúͺÂdªsg†©FÎz!ŒzºÄ]tÒ, pÆdºt§pc,лÐ~ÄLcÒÃE//Ú]%¤®Û‚Ž´§%ØYäl©û˜˜[aIžb7@Waˆà-tÙÕ‹Cï‰Ø ç( ˜B𑘘÷„IÔ31ån<IÑf"*4(ÁH´M.(à=ÐÌ;•é 3bï ù|¥ãø½äèZ>«½æGÍ8m3Ö}î±7L GÛa·Â\ßFug«îjÚNõ<þ¼ýtàHíù/åÙÏz–Áæ DdBc"ë¯ÚÞ›ERZ¶#AÏ^~vâÈH±#ͼ˴)¦`$KÅG_¸ûÛãa”º.È1.( Ô ’’fäÈ™@—Q⦚f©p›çš¤;²Œl¥þØÍæ’µ3utæãÇœeˆ}•‡së°Óp|¥Ìb[–eäb§8o·á˜•“ÔO»vðή\ßÀÓ÷½»PÇ–eýd’øØRaãæ½z3ž“¬ôÀ”£DÕ™x&#¬ÚLóI@Ç iÔÒG`hsdT¥ŸYÏL™¥æ#'pA=‹«E‘Ø@)¼çE”ßiR*’ SÂ|¤Ÿ5ú5š4ÍfÓ»ú&𯓨¬Ì»9ê*FÝÀ/dH—¯ð“/]Ïüü;zð³žíÔ3>y(â˜`Åyrfa5µcO–Ï\{] ä­D•œòS²Ï¿ÅéÒ«Ëî‘÷ÞÔØ@¦Æ,`±!ç¡‘À¬©¶…b"3QGa%–&$à«VûuèÒÒ„" Ž®àQHÕsˆÈ² J|ù€"2ÖI`^¬,3>¢±Í½ë_°“Ì%Áhvyêëœç³¨EÒÍd~2!3 ¡GΤ7qm5»êÄ«´Œ± 8Î(q<é0Uµ®wmò3FK¡YWá)‘«~Ä’ yGÎÈÌ”wAFy'ʱ‰÷&{ÕŒÙÌš×5ñ³üÇîò²Ê´Ëû%û:¯»päjr•Œ ’ýþÄwyùìñ#~ûËÇô³cX)œ­ì)—Çź‰ü2ˆå„úÞCíÕ«_$9Š’k¾5 ªE$›:{9èÃìÕˆZOkžé5(Ë{ªÇÍmXðz~ÇŒ,Ïxd"\n¼ (°SA…Ls¦L¦ff–¯¶¥uÕ@žGê"jGÀ<6µÔ(˜´TTã÷²2?'©7q‹t±Š,S2ŠtA©Š7òcÇ 5L }… S:xÓ"Ocí‰AH%x¯Ë8ò"3çÙ„¼ÉÇãG¦jý¾‹H.¸Àÿ8[%µ ›ŽÝÅHÝŸ|#Κ€v£³»Ž3C¹Ý7ÈùÙÓÑïZ]"Ñ×ßéàô¡ƒÀ‰BØÙÜGž ‹|+ˆ'†ä×K¤aÞk3$û.û³ra‰–²¦ÕJ™$å˜D-;{%¾ ù]yÉ›e[­VúÒ¨YXCñìÑÛæ»s¸©­­8Ó"DpˆÉÈD4³˜ C a˜™£`bÎY*æˆök]Ι%Õ‘Lç\:â&'Tvz±ÐÂ@€d©Ñ\û®·fÚ6ÀÜÅ—XûTÉMOFÿ®ÇON*|ýÊ~UOEc¡L¼* lí8½ûH%4^ ~cB÷Ál3ÞÊXBhÂÉöñf·Ê ÿ{Í2Ï=à½6F­ôØ2QÇìùèÙQÇô,¥¿X¼=èx[IGô$*#ÄTÈ`¶ÞÕ .ñ£uNu³Áy³:æõjŠ)û·ÜråA⊋F© )–rF€ÚÃñp4~1“Ç¡»á(;•µM£Væ|KþYþw‹®Þdï—Š$¯#zã>$v=¼>œóÜe ‡ÕÜ@墩JF \«/ª±÷%¼Ã7›(:vãÙ—§„Ñï““9UûA\?$,èDi¼ú:A¹:œ ì)y9êœ &È!_°FëÓi‚ÎÏ|Ô¡øÐc‰Å÷îd°>3¡2yNâ…µðÆâãÍ@Xs³u•Ê[_w•ºånÄŠòî»älëçûè>˜+и߉¶Ú¤¹Æ›!b¥þ[¿I ú '4ÎÚ5Vp³ Ú:,­EKxzn‡zöÙlõäí‹Éß>YÚJ™N.åQ8;:òEá6ZP¾R‚ùðõ›ÃÇj„rsà•´NZœe—㙄.ñ‹—O†Ž×ŒU3‘žDQôl¥òfùÃã¡£á½Ö¬rm­rëkÙõ&0i _ªwë#}ß«ƒË÷w³,îG©.ˆ˜ièúY³h·íï{ÖþƒFahZC‚›“yëªå1zÞûªÿoi´ˆ'³Sû÷Q–Dè_ Ú}yLY­†‚ÀÌ4œÿÓï~þŸŽ–Êô,":pÁùh|éÚÄç-]|óô‘!¿¤a:<~#xäÛÁ}AXÒæ¨ õÍÏ<¨qëZGšq.®E¹Ü[a+®R»Ãaò{ÛngߌnGœ†U„F~—?Ð`ëT6딯î®/l§|ËÁ[³(Èu/N">ïL#NèíËŸ†^8ÿæD:‰×%ÎåѪçåªës14ȹº>ôlüâÍÓî¢ Ó—¡7[¦oŸ<¢e r€÷é~ƒì@ÅÜ8;anåóa]M^‡‘ÚËÎÞ9Ú*)¡Ø&@»Žì²k8·5Œí=PV¤~‹;n6öîéÙ¼4è&ë“jíð³†0·¥­XMjÄ5}¹™é5Ñë?éŸD‘Ø«ÿû †Èìà/">p°tžQ—aÅÌ4r¹(úü¥ê×þâßè)ÓC†ÞÆqb–Ìú©Ú+<ÉÅO–ÊÙåÓ#GL¥ f€í³çߨç{ÛMUvâfNµZ–X²šw°*)j{^ïJ·ê–{’{3¹<Ôt.UkÉ˳-=ï‘î\Ù[¶¢o¿™ÿì?<òÀDÌyrCÕÖ«ìñ¡sdÃK1y{0ú“þôõQB@öêObœ¯®þàÿ¢ïMÚxÉi<:('“HiqpF{vyz8x;Š=`Q‡eñ2kõ´h0ºzp ½ÙÅ©+ÎÕÖUtáz×ÄnõªÊ’½‹ƒö]郋Oì6†i°äúl?Š\¿™Ì¦á·o®¾îý§¿ü³·Ïÿõâô?üI1E¢JLa‹$v¦”fJKf^¹ŽrËà7¯¾ìºW¤³gÞ©Z¯Gf#zE?ÛX„éú8ÁI+ abò÷*¸Ì^¢§"t8´ÙNN¼)È‘aò??á:ß*’ÃVËÕ¦ú˜Í»Q7ï­†éxØmÐÏðt°{'½ºú~öøÉwß%Ó?|Ë?ÿógI~kAán÷Š9x  Ÿ6lÈh"–}óì'>¸ˆ0w:ÂpôðwãAéΧd»\ó×·=|KžÈÈ9=Õ£ðòŒ¸wŃìå¡cŠE„Áã×Ãhë„Zì8Pw·Ñ~Tº_ŒéžóÏD·ßÜ{æ÷@[.^†/ÿ´õvùý·ÿÕO¾h層EÞ5˜)Ÿx#…óoø‹Çôº‹ïÄŽ´=¢Å°PÑ '¸i7»8f~ôC<ÌSb°ÇàáÛ—a†Øs²‚¼Èìg¿^Þmö¹J»©?l~êfiãýè.„î®ï¦úæSÀœA²—¿¹øâ¸uõ{™È£ÿþ/wuÚ~*¼ã…š-gîÖnûöÕôàì`ú¶U\ÜïÂ0zÀàá²·9z—l8<ùvté{Jßè té}¶¬)ó•[ú®)áÍ3½”>LÆäû“vÍgB¸lâÜ?67ß&ãÅ÷¶Ÿ¶CÚ=ú›ÿí›É̬¹èš®¦'KáFJ: >yÌ¡ TÁù–8ñšG "€hðç¿XüÛ+}y–¦šŸ¿L„î‘U%Ù8fóp¨”ÞÇ[öiSkß¼“nºO c@³óåàèËL¯Bôè«»h¼8ûóv7wEän ŽƒxužÍ6*o ó9W:´i·²•Ü™üý¿~ÕN..ñš!…Ùðý§>I…室®P3v?|ò•3ƒáruâ"IÿE“‡z˜QAÈweZáwršï@é[ºÎŽê–sRåD¢'ÿóƒçi+^mÔ}—tV¥¸«ú#äji³Ÿ*µÇOsPI†÷çä¦gÚû_í-ᎊV’A³6ÕþàòƒB‰ú«R'ƒ”‡ÿS¡ãÅ[išýÏoŸ?êû¼>ÌØñÖ%ó %üôšõþIe±çdÞs@É'F6i-;úÃwúç_¾S‰O¯FªÇ¤ü">L+ªûVâ´+)|ùþj¾n¢eym㇪] InN6 ´W‰þñ‰Îù­hñ‡VçËÞ;õˆÅʺ%«J{´WyS~/¬ï:|ô“Ç_gÿïÿó*@Õóëÿ›¦¢vqæë7LÜEgøx¸t«©ïú–½ýÇÕã“wƒÙ|åSË—^7õlàs·jœs'ÓYþêïGÕÆÛY óéÛGÅêŸ]œ%!wÔ~ÂBÂã¸Ç“_¾LO{7Gh¢öhÕiþ¶ÿ.Ãæà 7é]ûGƇnv6•þWËwJ€\ïØœ4âéî•¶V˺q÷/æ¿™|r®Æ•¸½ÚÃÏL fVþ-¨óýõoû¼f˜=c“Œ®Zç§ï˜J']EñV‘–U~7Ñ©ƒùàp:z°úUhÕÆÃ¥ÛâF"Žöàl>• ’.S š÷¶q·Ç af¦ûÝô·#[¼ÊìÅ¢Îðׯa?»Ù”oÍ@èT¿[ÉéΡ¦Óo¢_\ý:äþ½êDë]Òú##É7R7ìX¼¦eâ½"d ïúfKŠI(á‘yëf422A³ˆzgì,#o ì+;º‹)-*¬¼«SÅ™µû¡ô{@W³§“Åat1~üuáâË;vGõÞ?›ÁÔûC+Ï HÖø¸óôBtòrйzûôOþý»/Ü'9…òã;?i¾ý‡ÿëÀX‚e+øçÉGHc?i«qä& ÒÔË =% – ëclè/‹é³9…ëH°–„È™Á³éô„Ç€8€T™‘‰9SFqªð¦{Š«sT˜©‚S!6˜ÚËéb²8·|0TâiË[ )ågóçVdnÊ×éku§0§/ÂÑfD¬a^ÑP«»_¶–Á¶Nhéå3L¯Üsòq?mÆÙáWŸ¬&ìX͌Ժb•à²qÇ{M¡ËLÅ<ðx)¢d ,øŠ"ÎüãËŒU¼ƒu&6ìÛÙ¡ ÂÒ:Ƶ ä,€®­ì#çXÉ󞢢”¬b"öˆr+Îk@äÔD_ÍäU4¿ødâËó“Ó¥dÖ¢Ô€4cgæIÙ#™gU"‹dÔuʼnÎȵF—Â׎IÌy ªðÎ`"ÄgUžXáÆU2™áDßdÙ÷_?yñ¼§Ø6,=«Ñ?M4á¬÷W_¢àüÜPc†)‰9ÍVì|¾ßG2òA=Í1I0VÑL%ë›ò][*ñŒ‚€†aHÛ‘¦#•0äÙØ·GêfY*mºb2Q x:|_Mi#rS¥˜Ô,ónQ tÅ“sÿ÷“Wî÷³ˆÈ仄'â;.Ž3…È!gÖ§uÓ,rN = *ªÚ%‚‘ks–édè/gã««/yŠ®QGç =0r˜õ}¾¦€9U .æ‰pBì…0…)h˜ÄÌÓë“Ãì÷ø Ô“@¬ÊcVølå™–9~ñJVÿ[_ û Rq¨øî¾ºW.7àÞÿüe×ÎüR…sPpÁ±3˜31]8 ˆ‡ °àc,iÑ Æ¢Rónìbµ™38Ì£hBÏÓgo"þÇó?ûÒÒüR×ïBg€+†&f†à8(«.ŽÝÒE8i-lK¦Žˆè$ˆ,ȵbÿ21T\LiÔ2D¬ g"‡ùÄó6VÞ‚Fùs—XËØs‚ØÓ¨Ë ãˆe.¾;¼É‚<=¿Ñ¿Ž^ ™9p̦–…!‘gò¤jäØY`6Œˆ¤Êl+Y±Z¸ˆÔÊ;ÙMÄyûQ)î7¯Ó>^û¾ý^A½Ùrtê×m»y>DèÖ×¹—¿¸¶â Åf|%×$Þ3KSÛb«‰ôù³³¾}“ýõŸÇ”»ùÎ_"—sÑÌœwlÈ‚‹•B<{1o©8Q’ø,«ÀÒ@×ßÓç/Ú½ñÔÙŠxÀhÄä–KÉ´;ÁìpÁPŒgC1ƒfÇr™QŠF¿÷½‹ñoZ'^21g«¢Áû$tç§4@+ɱ' žŒ\w„(vìÆÒa‚¶†™ÅA ©o*!Q¤Þ3 bˆ…uŒ›Â;U3†{UïZÈU8Á)Ö{“ƒx'ÊL0AåªÊë©rȦ{jûÖk˜®1vkvL×þº‘Ìí ^½q}\/iŸø—óç­Ò1s|4^,C¿«b8èVS3X¹é–€Ú…rÄ{ùîÍàð'-‚Á‘"!µ˜™ÍÔ˜530Ìi %^²7…¶±f^§>æ9®._xp|özøhпÐ|˜ûËaD#8¬THÆÃç|ɺ#ÏKGK”8èÙÈy'c XGÄZP13ííÌ’(AÖ׳CÅ,"s=vd™²ƒGÔå7Aûí˜ÀžLuÂÈ¡JòBìzSD‘ó “( j£žs–!jvȼƒ±™g† ö¦5uÞBð ùò~3ZŸÞWÞ¥  ÚœHãÏaMçìi˪ý´’ÔøÛ.²÷ÃÅ£hsq ‡Û㢼lisq1»JÐúÙàôÙàœ=ûšŠã"†Àe; †ÚÐ9 •ÌœÊËXqútþ_Nþì ò&Ι"bˆ &ÆÅÙ­ìL ÄJµ™Ì¦€AÔ‘h“Ë>­$ŠͲ`=S“SYeû4òP´Rc»n²ŠæSZ8‚jFÄÐÙÜ»¾dA˜³"ò½¹CÅë²ohù™cRN@Ï95“óƒK›xçÝÉ…‘"¤Eƒ0u¯2Ö£EÜŠ¢°¡ªsjÜÆ"q Ž˜'!:ò낲=Ýn×Bâ£Q¾Úйî›oô¨¿f»Tr¿]F¼v¾Qý?hh„ÉoOpŒ†êmÜrÛŸ¬8'Ñ`6Ø÷“Td.<ÈP`B¼ï¤¯Îž÷l½™4 Ý‚oÎ…Iq=±)i”Ûb"Ì021L%ƒ÷*) TIÈàÉL²À+Ç&æ,¬`s¶…±¡ÓÉY7JCjž»±‰™i¥PЦ—jÜš[&D¿ÏV¡Ÿ³2Õ$ˆ‹HÕÆ8 y3ž»¿{€F¹YkÒW;¤`°WÿíZŸ%@áy¨¨“>œûÁöòe‚‘¥^~µøù_i6ïT5cZC¬Á*¬¨&…O.ÏéèéóQºìä÷ÜEÁ­¥K¥âR²jŽ×c€J.ÍÕ•qäò'ìviãE²›×ç°«1¨¿—ËP¹3Ö´`âæœ(9ƒ755¬¼cSY Ç”)Äèröv@¼s"Ðõôám꺕ä~9ñ5ðÛÑuÅØ¥¸Ë“)–îÏÿýùoI³h­1ìh¹ I“ÁòÃ_×±ÁBý8N/}ƒ3wOB[É6Ú…ìí[¼¾»pûãz@äŒ9?æa÷ö‚æ;c‹Õ¡¸°ä êng Þô€&œ¥Ë=g"í´Ûu½îÌl`°Ð^½pÕ·ˆWåI²›Ð´‰²‡0¦ÏFÙ¯¿ŒT¹zèvÁ?6ür§@È»¤²mîjñèêwlWíŸÖ2½­¦{mAoªžãº.·É°¦nìÄ|WUʘöÙ›·>_ã‚»5Õ¥¹ë`ô͛Γü©ûøå¯½ëÊà z‚óúÇ gæ‚^]ŒmõÎ~ ØP\±^e+T _^]/ØÌÚš¨<²î²?錞M¶32+æÕZîVïcLß9þ-"ÐôhôŸí¼ùѽÍÛóãd°¾³Ï‡9®¨õÙ«ï_ÒWÜ=TŠÕyÏiVü_¨ë×ùãåù—òüê7é/†¦Ó~EÕ«{ïÖ0ñù)¹E™xÀ›Ë¸EÉbáÒUC%p—f¼ÕU sÏ÷ÞEiûnµ¯®¼Ùûú@ïR.Ô]íé*›§iD #3òþó§Óq_WËÏFÒ¿h%уþÜ‹sæ×°«×œ—¿}ú8þÙù/ÿþêoP¿^«­U ÕÕE”I ˆ…²v{äN“D·•ï 7k¨îûƒ„®yúñÈ$&œÝpZPI÷c“Þ–UÒvÙÙ¿õNz0HF1ùðài05sú¬eéž±ò²wûZ%w¦ÄÍždÜÒÇéÕsúòäh}É0€êÛ{ËUƒ@œeíä…dÑÆ> ­Árß ÈóøT€µMY.HÎu·íÞÿ«@Ó7ƒ‡ €/¾s_»žùü '¥Ü;…¬ØóNé­ÔíX€s.¾pÿðâò‹¯¡œ& yØÜ|TØÛÆŸe ‚Œxy_ôøòYX¸ïØz·¶ß”¼C"ލ½L;hôÓnŸt]*÷W “­ñÓ ùü3ðýó7Ö,‹ûOhýϸ&?hïÖ6 EeÒÞ}ÅÿéQëO ™´Ö9VÝ£ùlKñ’Ÿy[ª^ffYº˜a2ËÒÍ:7T¯ÙŒ5L÷5ǦlŸ4©ä×Q4èg³èŸvA°Ö—Cûᙦ=#_ßXå[ºU)ÇòI|Z?¯ƒÒ{ý5Ï.\·½+'CqíÁ”‰TÖ¦Û)õ¨GÓ´[GPU³»‰êîÚ²µk­°‘ð·Lûã“Û£Ÿe2øèe¹5­»kòëGŸ<Ô=0]µ»‡í<@å^‘-oëšEUß­Ó~ñÏß=K€ŸM‘¨‚8¬•uPHg:¯ú=æ‡õ×Ò¼ŽKm0]µy÷y4o0Älß ½ûr¾w¨õ" q_]çîsnØVrÏd‰€ËÕÅ4Ç­gŸñŋ߿ø—ËLa"a•©ˆˆBK`_ ª;Ë ÏÚ—>Õ±¢ríD™!òù+sÞ¹õur•*\*àèjËå&çZ°¼6óÛmm똀üzÚ›e›î³Á߃TÆ{Î×p;sŸ Íÿãê¯Ï 6þ<}Ÿ~á—#»ÃƒóÑ Ÿu<ŸrÔx8jµws?Oβ#Í´¼l­Øj ó n³ÖÕ¥ÑÙè°–ÍF¼ê‰mÑ&tY°ë£™}*º[>•²Û ò~t¯¬¬HðõÙÏkÅ”ìvM³çWW³öºX%æX¼]e:‹Ò`U7$ž9?ŠOHÁW—Tï[WâçåYE.ŸÐÖøàÒ[g88_n]ÚZp ª®åí¢6àéš”Ö&ÑméƒÀÒŠ­;_VñÝ3¼1Æ={ŒìmúõÁf”ç½ÍIòÓðÌ0Ç0‘f™,ޏô<×;ª>à ð®…Ln'0P¨ä‘a½J@y@9ƒG!_™­¾<¸ÔŒÝGÚö—† mË«|[Ê­š;Fú0D–åGKÜ;÷úðd éoºOÖ3K•Nò@7¿Á ˆ’|×wÚc%èH—»þ¶M´ZàMüÍ•'æ“y¢1KÒ‰PÞyCmöevk9ði@jµÏ hÔÏnÐîL÷Þ f£ñŸï¦K•Ž/|{úªæ«X§C~' 5ÅÙ¼´u¼ŠþeX7p–úĵ" .Wó ×kJ»šâ>„}ÒxÚGËöžý›ác.Ãx7¢ò_o¦û«¢E³Õ[=Rß‚Vù]rµry7ì¤=YÆÞUð†³Y%V6k—˜‘óAÚŽÑëùé4©Øk¹ä£¼M¼ýôiõ_®Ÿ50¯;Ìüd ³o¾z˜?P©%î^ü¡æ(À¾N[)¿™ºé?þӘʎÿ¬IC¯¹E¸ÕJVL¥µ˜m¢ÝÑ*ÏòþD”¬÷¢â¤]~&“ƒ5ÞkÌþ³ÿ¼Ug*…ËœlЃßn¶zGF™çHÚy(—þÞÒF¼Éd$ã QÔ¾ŒÜø(îtËU¹× ˆ?(]KöègY¼óêS"½þmkyy\ó´¯/{f~têFƒ=^ÿm*8êž\õNÏ,¦µà¬©s;6áú½|A§F”P"«öfuîµzÿ·¥avª}±ÇÖÞ ûI‘Ú7o{Ï[‹§¨œ½i<¤Ú²ofçƒèNGÄÌ\¯ÿ8,Ö…«î¥RÒÖðr~Q'¾ doøãS™Ô|(×Û÷Ôù·ÁÑGöß.¦|?í½_=ùåÿÿå§gÝ‹ÿ»7]räHÒ?U3wà¸gFäÅäQd‘]µÕÇìŽô\O°?÷uöVdEVdd{dd»Gf»«¦IVñHf&3#¸q_în¦º?@ˆLf1IF­þˆ~˜›©é}`³:£YKÌO _¥náøÉ£ýûûæš%¼¼ 3Ýqšmƒ P¿s·°D1,²6®¼Œ€=—ª÷µÈ“Å!‰™,îûƒáíèÍÍõ/¥5z€[sòÍ&;ZiòåÿõߘµË Î=}òùZ»w¿î¿û²ï~@ż iÎ|Tˆ|]æ;./'èe®®XÐòÎÓ^µäÎ… %ØGiµs1÷-ÅùÕáæѵ'ÿ ø ïеñgÑüUð ~¶¥€$ƒ¸±ë:_~ø·Uåe¦¤°Ï²ý³gæÉdHí/¿Úú`#~§¸òˆjòL~cªg;K68]GÌæO¦ Ò‰“†(Š)2–í"¯}þ»œ¸7ßëgG4Ž*ëå³ Û…À|h9.½F¶þYÍËÑï[O¾:8jÞ‰¥o"èIV¨T#W;?­¾ì·§f÷ð䫽¿¹{%çâeh&yåmžühÎAÄYž‚f®ï×¾_þþƒˆ`2LpÙAúÃàí UýøÙþÖL”Aëìg¡¤ª:L’TD¼›ŸÍ‹ÓB2+åhçCÆêÁ‹¿+õ€W¨ÿ¥ãºŽk\|…|ùµVõÙã)ªÝ§š–,1@Dó1jõôû½ÉýÁ~^Þ/§Öÿù1v¬Ù°82ï ,$nöÕ…uÎmq¹ îu“ID„ê­äk €l*cY2á¾ \±™]ê‰qýÜÜT˜È5vô Zñ#1¬l¨Ô—–¤±wbÂ0€w#¨±¤åL DŒ1",l¦FÅXP¿Ì¤sÏžÐÌòLñŸÃÅ'ÁEÅ™Õs®œ xù½ÔíÖÑ·•Éx:ŽœTóëALÞ=hèø>*ÝPBÁû÷¿ü¼¼}‰˜©òš»#N’Aîk0Ú/‡H]¦‹sª¯@âÝÇG÷TMi§=¬]:óGÃ_„пÊ|]ãÛXOŒ´¦afí™ÙFYœƒUXõZ¦‘V´¢Ú0ê˜$©8A¹,ÎÁØ€™šhjB£ ›²eŸ¥ž¬øÌ7ŒfN8´*&ça6ÌE%%#d'PË:>?)U¸Ý¯™A”D¥z]½÷&`'™{úb×À›†­?º»Ux”ztDÿKM^ÄÿseVG1/S«³B‚AW%Èà£ì|¸[àÉ, åâAæh!.Â*˜ö¥rÑñimÉ~°bé[ºø Î²´òÀÏ€¸ƒuxöþ†ŠßHµX…ÊmÙ!°€'kjì|O}×N†“‚lDIâp±ôhB>öòiHÀRs}Ó2½r©+ZÔR)Ày*¤2†¨è(!-2˜ÅC*jìa¥ÊÂ6ä©¥~HÌS3õ%2ò¸=E<¢­oÏ·â­M;JzqÄÔ#+ÞD}øA™·Òöéý´ìN6?|Þa˜™Û”Ä‹‡A©‚U-9O°,^=BÅÉéyã/~UFÙù)Èk*Š0e6ÿ0_{Aõ`PñÃ?îÆYϹç÷/¬Óås‡êeòM—N¿LÜWD¾¿âfòFWW놾(6¼wb&õªäÔÀR'cE‘§0RˆA¼°H Y–eijˆxxíg±XãœD¯d&ÎDHýÀ ™ˆR)+gN}"°‚Àb€xĤ㦌H°Ñ ü´"Þˆ”bâ—¤ÚÑ]s”;[ÎÒ’Õ ÚOmÉO’PãKjÇå¡akû•vÛ£¯\ÏÞû eÓó±Š xˆ5â‹T(7ÅÁWg`t„ßí?<Òf•¬!%‹Ô ±xC¤j5³!tTTR 2&U;~úÕowŸ}íEþÓϘ®Gž5P‚w€±+8¥–^_ÖÇÃ\0ûõF¹×âÝ/Æuõ »Ï´Žž/êu-ÿšf`¥˜WžþsÝCtbæå‡D‰¼Ê›^Ybzqž„X2µV|欑Ի4´¤2˜”Á ‘)³sj´xÞn„rçš4‡H©à¸nB¡”|'áF;}i¹ÒïWËæEA¥+^Í =ýfcP˜¡<ÅÄÇ’i¦Æ²Ï”cç â\\9J¸«hõËL õ)À…ÖX¥¸Ã\×(ÓHœ¢„€;%É1¬Z#IR?èÿqúMFfüuÊM+€F4a¨¤â<ÇÂ*(ª ]æ:cˆR5ªlX@,JÖŠN PbÊçI!"Zö”‰€ TüRqúk–âuºìÂÑ{%Yÿàft`ÌÜŸwå!WÝÓJæÂB°z¢xþƒ.‚.5 \@mé³€¡ºT&—Ä¥lã»ì²÷Þ\ßwÚú¾5LêØˆcTüpØÛÀô¨¾¡O&ûÁï'>Uô9þõfè”86SÔyÄV³aïT4 ôéQùãÑ“neK‹NÎL«ä%”ó€´MkÔ…ç>™©8“Ñ i`N‹lÇê‹ì=wŠo‡“‡Û¶¡%¦“Ìpš5чVáKSµ¬cç(-†ûLid¥X'!•„ØÔ„ÛžU8`# 6$L sÀ¢J¡°’ )ÍX) µê=³†ƒÌÃX%‚Â;bä -ÉK²è¥•\ÀåßÅ Kb-ÿȃkðlÚX9wÖ™<¯ø•W æk½5¯™èË—n”[° aܯHåîvrÒ¾[î$õ¢5,<Œ~[iq\v>âJ·ñ—Å­áãОÿêÉóV0ÜÜŒ 1 B³²ªùP"yªÜûDÞ{tzÿ^Åÿê;/äuHEÃâ  Ì2"žzúUç½’aç‡íöiÝU›»Ïvî—‚Ðt!:£CX4ÅÃ4`2™ëN¨öâ3/"¦œ¤,0TÌFS)0D!™ öÇ6ð8Uí”8¨ã˜*AÏ—CÊœ 9[õ=ªgTšÀW'i‘CxRF¢1L5M˜ 8Rß©ØàS19X…â…r>´DĆ&dlO ÏfAõV°Of‘,ëdQ@¤s]~@toæ_®öÒýÉxþúkHmðÞí(Þ=ú~+éœî•g(iÄ%ñÉNY {Ï·êE)ºV·¼×=<èíT¿ø>jÞÝ%P^VjÞoGÁC‰Õn±¶ÚÖ!DŠ"Í+ÓÖ&ÄÄ9ª³-§À©Ig5äÃß{ÙÚ©üÃæ§U2yQ`1äÁÞ)Cȳe £šzR¨µ9 ˆ¨›F,Jš0‘Ÿ!c8§,2ÙßÖÔÉ"òð‰oˆRAÎïyôÉrlªlMÏW5sJ !#ŸK‰j Óê+U¡6ñu7Õê„ &hPqxTibŒ½SFedÊžLà¦ÖJUÅg1–CM( <‰×0ä}YØPæ†×Ø5’´°üu…‚]‡V+ìãÞ¦+*S³…Ov H¥|÷`ÔuEe3 `Æ]Ä oO‚ÛªÕ_tŒÜ9ïmQ¶}rzëƒÆÜä?»)ÍlØZ’ð$C3.–Ø~º£¦õ}Ãìðâܱ!-“]šUoäî¨n=ùrX³cK@1X¸ÂUÁ@UcMt܈ 1ÄÏsvemU¥r÷l«emó«'·Ë+tùu®Õ•‰Ë7öìì‹ý6ÃCZEØ·›Ñ5O×Ö_º“2æ¥õ‚æ@‚üô\Ÿ[¾hfƒ¸h…ºPéÊþš|ôª™å:!éÚ_~X¦<Ѝ÷|{Oq*<>¼rX©„~Ù²"I§,æöÉóAV©U £ÀnKMÝþ³“ñɸþ›?>ìoš… '*DÀÑ7W%ذëÊ:-ªƒ gÈðÞ˜<8÷ÜTÇ)»MˆäÉé`¨'"¨÷ u•¨´ñrÐ\.ÁrC³¯k¦p…°]ýmªþ¸æâÕXõןû&PyAè5þÍÀ<öG>çGÁºgúFqøôž=9÷ÝFíTêI%¼0)ñÞÁA9 ê7““>oV66cª ˜ZÔü®ÄÃú­I¯Ñ3•²‘hβڦQ¦VÓiD½J¾OE™*©U?0TE– Ö°ÈyR¤÷~Åk “Áöw. ]- Ä_Óñµ"ì…[ø²Ãé kðçË6oùóÛÁ¬xï¾™Ói¯s{ì}ìŸqýµ—0Õ·^½âö‘oíó˜¶ýÝ;116ÿôùñíÝêýS7xùß›ŸþŠê!ãþQÿY³Þ˜nœvlAglKçTï&q“A"baE¤R¤–1œ„*cÃþÌmVªÞ§ý¾|s§Y¿vÞ¹kx F™+ÕÄ–X¶§BÄ«ØráÝ|=®Í¨ìuýK½¹pñîkèY À\#YüBþ ¹¼ô<…éNëã#—}±±qQÚSĕߔº‡ß•46wåÃÓ¯>=h´ZÉza“ecB›Ççµå÷Î×ݶŸm·šbÍÔ3Çg.òÌ "d¢–Äû¨L¿xµYµ^FLmg²òñïÝ+“‹¢½Ú"P¹q–”—0ꈩÀÚ|Æ¥—¼RŽhá¬_beW<†¿àÊ\³’Mæ¿üä@ ZzÑŸnôë°øõä_uz8ÉH¥ªý“ÇÝÁ £B®ô ž†„ ²[7:x<¡~«^Ÿþ¡»[‘FJk%J¨ôã`¦è-¢»Ä}ßý¬N€NºØ’ñãƒ(V&A§Ì L"U×.C¿?¸uëvËáJømd‹âœˆ¤èïïd&£[³”žk¡õ‡ia ¾X'”Û7^£ÎÓ,R+KX‡gÓ(Ï­]øi¿îî×IFýÜÚ×’h5¦æoþ—íã“ÍáTâ Š q±Ø¼•ðJ½vïlï˜h#;ÒÉÀ„¶DgN ¢Q6º…ÖP)ôºe"À¤J-ÕÀGû¦)ŠâA'¥yŸ”<%jöbD€ Þ¦V‘fÛ…·¹â&Á຺áuMü~q êÎwŽƒò½ÆéˆÆý1ö,¬iÖC¿•cé³s»Ýz‘Üåú¨²õüü·áœ¨F¬MwÖkÌe jî•g7 7ÿ´ï(5Ì­SÙ4F 3é…‘›¥“˜¨ÏŒ´ê„:ýFV‚J¤›·5½Vœk×n)Zú¯ OB^¢\tl|¤kú;½s<{§sxmõJwþÊÊ'¿..V£OT«ï ùÿðÛÿëíáw½ÿPÿüÑÝê¼E4œŒF5^YdïŠó0ZëW˜š„ŠN[±„˜´ÌeäOBÐ Ê…Ü“@Ã3²Ç[鸂ɨZyY XRSoO4è:ÌøAv ‚–®–eþKA´Ù¤^OŽo¤\©Ë[¥á¨Z¦é¹L¢ßT/S¥\ÍY_»]Þ¼ƒQûiÒ}÷>~úbÁò@ÿXFã9}ËÓXÎÚóSŠ;Á³nPž <7¢χ ¨x ÒÔåPÓq´™KQêõ%˜¦$â“ êNŠ.ë:òIû]rÍ~Ùw7ŸØ·ñçÑb¬³i¸˜w ï8ꚸ Íý7¤ù7ˆÝ·Ç[M}ö}§úÙî‚¡¨z‚á•0ñ¨~Òþ"høñ(t|ÛŸï-ñûåS“úUQíf1Už ʈj.tfFtÉzð›fzÕ'ºÆ y“W  (_£¨¼U•ŸV…uj»Ão|·ÐÛ­_hûäœÎ,ÌlÍðö–bpZÚ7ÐV´šÕP7W¢õï¿~rwcÓ5„œiĺwë¸ýª~ÇtGûÊ5‘€aËÎBkBdÔß°E“Blu¸Þv:3y­Tÿú §ŸÍÞíMµpÀ7²ŽËR+‘çþNÏÝ»ûÂû¯‡ûKåö\qѼ3yâƒóΞ¡ñÃþî-•¶þÐ_ÈÒ "lÚË! ¨o<?È«&7z_•ïçíìYZõGýoªÙQÜ0¡s° ˜Rœu`.•§{ÁÄÓú¤˜‰_÷¾ Â×…áâ•®_ÚO°.-ý€yªì€ðk*Nÿ2°ìó¦óïËRhV·wÇýæßÆ {ÔYK–õîÙ)UczüOÿ­òà.>Ô¬1 FÌ;)_åZáàKS ¨•ötزLðFÔï„ö«O…%ï=FªCˆ¢íËEñ5mX“vŠÛ±¡0Mšó.ºD¸–Ì®×û‹ò+çpuZþðp^Tâ žÝ@5“hiBŸÕŠqĤþ ÿÙí¥ódNÄíGîvÙÓ7ÿô¸ñ›Ï,lüIÍð|Ý¡n)Ǻ%ˆBÿùéF‘ZÙ%÷™€9®}5ŸœŸ¼ÒîÙÙô@“ö¥Ó’ï%Ùˆ·CŠÛ(5 ý,(+˜Vèæ²Œ5?´2ákQWæC±ÚnÚR]q9ÝZƒg7mð˛ٻÎYmRcwŸÙ_/ÒöòÓ7GôQ!;­Gîävõ7¿.QN ¿-Ôxiµ)¹âʉkÙãcÛ€dCílTOê¡…ŠQTÝ´Þ°mÝÚâ£_¸[èµÓ"‰7ð&M´gO{Õš5¦5:šÔ aµó¥©]?Ó—ðl-ݺŒ·7Th=žÉãéÜ$µ–ƒþlu!é{7=Oj½êq»=:îýj{Y–'©€Ä$¥B·[­nžö yÚÀí­h)ýÕÈt"›õÏéŸõ3ôK->?¥<Ó…ˆ@aPhŒ»õ„ë¥*œDeŒ¨ÆÁP6 qù8ih¶µ2<­4i ¬èš×Ïåõ’¥ÂË—Õ‰g*¼ÏY°´k.]4†øéÇxyêSz1XzõŒ7·žáÃòygòÈÇÖ¥f{Ò­6ýK.Ï–ZiTVƒê¦.\³^ljMúêpú×q»¸”6’ÃaÐ…M䤴݃Q—ÊEÓ‰ šH)rYÐpgux +£ÞFì×*U9uÄ"7tqx @-²ªÖ çÏgoµú”w]ãG¿št~cÀGýìWæ4Ì6kWϘþÉÿ»[[¦›Ý¼_|¯qÝ6³¼ÉFqÆgf©ûtQÀ~ÁÄr%®AÚ»Íöó»÷‹‡_ Þ¯ ‚R/)ì ‘ú““!µœF ¨–|–¸BTŠaódH(Ä/9«s‰|]z\>7,Ú<ƒssy㌽{P@À?Gdfö¿OÛ/a5Ñæµ ÏÏ9nˆ^ɧ{ÅbàYòëÚ•õó¶{®‡Ór¡˜Æ¬þ«£bHËÙ"É >ë»,Z»v…ô¨[fîïX6åíʤ{pˆóq²gƒ^-5„ ~ÈyUŽ™@ö“qZ0•¨ã‹(Vž?uµ[kƒß/Ñ(Ø*÷^r® f ì6<©þÃ×·Z³ÖžM9ß¼JÏ Jza¤ÎÍß—âònZWa)5beW£ý`ïefÒÚæóé-{]0Ì|ãRnÇÄå¬á¥ù_¬ç» oþ±0=ú«I]ùç.4ž«x62ì3O&U"ËN¬«8¥ Ï–Tñl½x²oŒ‚óö§Ö!¯¢a>qoWM:æìb0Ã$Q©:mу6o-¹ÿæy˜{'/FD…V¿Ã5bÒV4–ŽŒoeÀ¹Ià¶l»ã—û{ÑUà“ìùÓì×µ³ rTnZMJVã]—fx1Ÿâå(¨oEMwOŸoãÆH²‡¦aªTÔþ{Æå”´Š‹y¨K3G ]ƽ¥s¼£ðË˪Þt&¨7×ä£ÿËÈ#C ©ŒZ¦àŠcÙ„vÈ2 *HŒ üX ‘Õ6bɈb6"–ùLM˜:Š)0`a—!È«ú)ÁÀ±…ªC@êÉhb ‰û¹IEó2:O2õJ25ÆËù³öíÇÃ[÷Ì«A¶í—*wÍ¡òà»á¸D…°÷â¼Ò W+¾¡!å(iŸü ªÕf=Ø £;ûÝ';+éi‚4{Õ*ÝÙ?~¦ßÝ­c” ‚ѳW‡õ ú(8<í~÷ð·GMå—Œ³8ñSM$Ù'c‰âÄ'‰¹L¦°7¬aÍ/óͳtä—R‹õÒâZÐYµ€«x¶Q‘1„sXSR‡gÞ±z(N`«íÐÈpdÈ·|*;5•c ¸4"R iÓ‘±‘¤&¯ÄÎÝå³–w4²eÊ8b @ÂԔũµ$Þ0°V¤J^-2R­Šc…Æ&ÊüÓÃh[›‡ÉÙaùN2²ŠÀ0©Ïœ/B°hXöŇõ¦øbÒ¼Ó$ebÉSFÜ{=·¿¾÷W²4ê£DQû lX•)˜NÇaè þvòP‹7Ÿ¼ø~@»ï×ë†ßþcçÑ­4jõ:ÃŒT‚Ç>óT`‡b0rg¶ý(ÖY ì*!¿À. Âke¥‹B2¯÷¹ÿLðv0Ùu|óƒ*D>…¥L,³dj.Ï+ô€—ÀLÙ;á‚ö™R H<\"žVGžNYM0%ïˆ-•Ù˰¬™ »SëˆÏ­ B üÈJæ¼' @‰õY6DåžfÆê4Wø° ÒqGYùŸ3°_;2G/+ªlKÂ~Êa0U [þâ¬Q± >{ö¯{›\R&‚“šË"IL­ºWÇ«?ž~zG Ú–$0D QR¦H¾óI)47OÝxUOËÏRW¿¿Û*kÊZØÜçÞ—¿ÒR¹ôE¿Yó>£@…‡ÞIß`¢]D…âÙ9U¼ÚÀ€~îQbX‘—F[`ÎÜß|ÑHv:+f!rç‚êì‚u«zSD¸º`öáÒ/Únþ¨;ëÂ2”!3·72ŒY]u—1“ˆð>ÓŠ›x/žì±Enã©¿WOÔªs†L¨TF'¡t7E#õq’zk{{fä'°VœSð$(–ý±â »– Î3é$ð›-®Y8?e}(C~Sëð1ßoE‡¤Nξ¯=`¿a¾ê…>,ù¸RJ‰X˜kÌØyµŒÌ3Ñ(0œeUò cy2Ô ¼ƒ1¢Ëñ3ysúÆkšu_]¬õÇß(†¥ ôNº<Ú½_22‰-!dÐ×ß—eçú­:…âôyšuv[%íëÙ¸U4'³gz÷8‘Ø'+®JÝ„áÚF'©s&Lp†ƒ†-”ϦÎScDZ~}&0%£Š0cõe*%“FJalúÎGÞ£¬™³qYj‰ZøØû¬\Ö7œèˆÈ°)ûB€5Á&{%kB¸~`XÓ”ƒ*<Ô1" &"Þ,Ã1‹÷ÊÖ¨:¶óæ£*J¼ÚÿàY|µ+ÿ–à¶GÏU/ñ“b™'ç›Kx«æ’÷&¾Ý›<6›š'ó”Qÿ¨ÿå§÷'_v?+`LKç”ÖZá¬OŠ)Ÿ»@£ Y¾Ví`Dýöí·l¹Û‹«¶c7ˆÆçoݵT ´ÔZ¼wÜþÕîFàÒôs³¿M§m~Àh£Þ"7ú02OJÉ„Wõ KfY&*°fÄFC!ˆsÄTÈ26#K2`˜dkuè])JœÉŽHá@ÃBÇ×Uç ôËc@-UÃR‰KÑÄÕ,Rék£S5ÃA`Îj.•ˆµà•)«9h$½‚lŠ5zæjEò ËDÄ`&Ãá± 4ÎÓ¨ƒÀö…ä„Li`Hb¶¬©kÀÚþè7.Ay¬†™fU‚ýnôൄR>x1}ùi,…à+@ÐÖïþë‹Ýâï^>ÞÝ€9~Îi<€¨/ô6¤Rà|"™ž=÷£O~»E>6¥d]7µ:,§ZˆË¾£0Á´GÊQÏ4oZ –à ¾d®ýá ›U¼ 0ÃѼ^³:2 ï@PeVÍ‚-Õ ¬*BD”  •LM@©ËsàÓtZc‹™€zñÌ0ÈÔÀ½Ä’úxc-B!3¬Yê³Ìy­Ô¡F©Pè8Riž÷LbÊRglÜ<Ö2 Öxð¿ý5ðst~G@ð¶î=A§ß=X“ú·$°ìÜj?üue¡œÍªaëæûÚ¹Ü~5Òe[ík‡~ù·×¿ê»šˆ™ú\*Ÿþñ•/·.TÍ™:k,»Ø§Ê¼©M"ïìÊmªŸÑ ÛZ+ žÒá{­­*Ò—¦`Rþ¤´»Å¯†RªÖÜI²Ãg®é;Õú~½A©^±¡‘ôå Øª†’½LnI§‰ùÒ–ótÿÿò¹5öj}¼AŠ…Æç½[âU èôà)Þ¯U i‡¥KbƒàâìãÕ×U2<wu3-BBŸÖ{Ãý;!¤î£ NÑ©ïÛÖ×R”AæI‘Ь‚Q¶!¨{KÑñ$§OwYçQ嫉›@ºøf,[³Koð⬹..Èÿ pŸrbåö¾rŽ÷Vm ôŸ¼è}ý?nÝ¿··¬ üà5™­'?“]ã‚$ôÙàä¶}ezbFA5„xG¥²†f\äó*Ù,ðT…À©wŸ‰Û¦,(Zktz™š×´çš|M&…®S~àØVþ_#^ýðf~5—¯àÙ;û;ž›žLvn•t¥eˆzwì·Ò:ŽÓ5‘kF´|ñ(ðêÑ¿»ÇA‡Ÿ%ZÚö5’™X š¥ˆXÂЫ1ÁTMéN ê]ÉX@2_¦A0l}vÖ·›ƒãN¹byf'Ðùýÿìö–ºæÓÍ€7²?žDëõ_¯¤®ŸmK©2൲ӺlÔ º-Û%_$Œ¬øX—IÈÚ8t…N}€PšÞ?M‹^;ÃOöœˆ¸sR¬ÞMÒÑ$.¼èqã“2&@¸0*eF„¢ÉÙt·V/³þ¶Š‹A,©+o´Ré,Öq!AʬIË/OÎÞ8\`­?à§ÏMÔØ(,Ö —-Rþ£òÿyºº5HôÒçëØ™vݽ&ˆçɹ#­‚ –wó$>™T²,*Ž÷:ÅÍYy?K®(Úfõ(Ë$+Uë¬Óa¨Ëm™ÞîE稔åæ²‹ûТóú/Ÿ0ôCÏÿÕºT7Ô|ÆÅ¿}zhâcÀ‰Œiì Šö­g~~qî0Û.Aeêž×ª›¡½›hfÎ*¢^¦EêhùqÏ&…2è£Þ)´ØÕA¡)ÓÈnZÑq|§´ÚÎäRhì¥Ç_‘öeUY]zß…}V—d€ 3‡ÈUËúÔ@ÐÖI:ñ¯c:©|¶_g˜—½¼”×}Í]—*dÒ()îh*§ßzt€Øeœwס’˲ä<‹““GgÃÓ÷>,“¸OOû""‘‘—¤ƒð4Ý)Aܳ^a'˜c–^äu}yÎ¥&ˆ¸ÐP±ôõã ]CÏnîèµ5-–'+¥òÓܳTŠzGñûf¬r•ທ˽ŒçZk’B{_ùÑ+5©šÙZʆj‘š‰ú'VÛÛ{E%>V%¨g ;p—ÍÌÑvY•Î^Ò­º5³£ùWæ.«WGÌú»Ì¾ÓrÑ“‹–ñ7”‡¹Ýÿ†rÉ5@¦˜•ÂÀd‹€Ò ^¤ÿŒ÷žúÁe í2gY,--?•ó"Çõ»À7ìT¶l^Œ-hÒošÃÒéØ'ÒJBÊÜ šUxYøó€Í$äé¨\,‚ú/l|'$3c——Ï_Kªå C/ã§\²ÅÝhæI£T×Úiß*Ùø-áGΙW;ö`ºÎ¾©^£ÝÝ?œnmò¥a]tB_9†…þ¦D€yyæ(s¿9PÚ$å¼Ð‹€S³w2xf­»W.2¬Ù|~R*šÑ׃F¤›Æs“×ᤵ]13Z Ìe“+®ïë» ¬ì…™>± g´lN»ñ@×áJ+/ð“‡ÿ@ •rÑ›nwŸ/ú÷z°2A¥÷ðeðÑîßü‡}ÙÕ%¥¸Lk”ël^ˆÐó\a3<¦÷·‚€Z €:õ†@Бïu¼Û+ãË"6~ÃvCÝNŸîFÏNÚß6宺­¦v}#Ì´ýrx¿ÈB­½ä»X¼ŽúÜǹÀø…½d QȪ{êõúëC?Õøÿ¦òü}KõÚ‘_}µŸ 3‰cÜzv°wa@Sík][Òûê…ýÍ{zŸ¾8ªíb•™,Ó.H5œgÆð°*t‹Î Ãý0ço9¯bö‰a™œùç§Ã[fcë÷·óÛz§=¬а0xt,Z.úÂÉ´>jÉ”£iºY‰!— +­°é\¤TÉ+L-[×rWí’Åß,F´xƒË7ºQ˜u Š]¬§g?lÔó-÷Æ“—ÑðGÎQ!­oùƒ «¿øþ6ªmE½nå¯0ÜýÃWÛ˼GóŒ‹ñ𜠆i RúÓ4Ø.΋>¨%ˆˆ'y²Y8ðÛ¥³þèÞXÇ%"H9›v|Ó)½L÷ê–ºº[Îdø"¨ ær#­Ùv3©‹f*§.@$²Ò|ê‚Ì]è7µ–a¾£×õݹrà5¥~F?)“ÞW;;föØôÛç÷k:É‹ÍÍî1`éÞèëÿúwwi¹Ä³ 4/ô KLT$óçåÒdFËáÎ,HUÒL,—ÖF•™IUf ]ªÑ‚ T‡€9·€ä“>¯ÌT^àuf—õºZúÒìÞ4Z§ðy‘¹ëë /¤—»]\ŽåòÄ?Í(ÿåzLë_ý­'ÄQòõÇíoØ~2}øß¾Êþͽ€YºUš…4Õ»a,*Áçk”9cD•tøœc@O^n…¤XŽ{éÁ.ÏÉ¥€ÀÆ*©2«¸Ì_µ¸xÿN(’ŒãB:̼ Muôh˜&ÓÑI;t|a§a H²Ô‚yVyeîfó+ æ<ªãb[„Ôo^† Àˬڞ3«’ßë{ ÿâ b¯‘Ïæð.„wËV)FA+þ/ÿb›â:—e¢Åð‹þþ™VƲÿ÷ÿÏ?üûÛ£¹aŒ (û9Îñ#j…ú¬?2¾>örþ¼üñy^Š¡qÄ$*¬dtüÄaöwìë5Xò!ùnƒ¶ǵ8›˜„Éõþ±Ù»ý^@…z¥0Çë+©Ø>ç“4+U%¹*¯\Øx3w+@—]Z7 «®ÍÚž\å›W‰Òk¨Ñ¹ZöŽ\€N‚õ7¸¸ýÀä™û›ˆpŽí$µbGSÚßÿxÿÒ;«ÈÓj<Û1lZÕWßO£JΊò¤{‰Ä$“´À¤^O“fD I\O £³öxçÞÀ•œ£‚Øhf,;&!é×Éz¼ùa ÞŸÖŠ˜hIÚØó£‘VÛß‹…R&è 6$̺h±‘K^¢ÍÑL½Ÿa¨0ˆág }>/>ïí²(„6'¶<«WK‹k§õ ð31XB­§gkÌW¼¨ôNÞæbP% ŸòÎyüWu2Žj'Qb£íûóÓH߯ýá_þý¾™O«…ÌŸžXaˆ§.5Š¡Ù }tê©Ñ¸Ÿ'ä-¯P‚²õ¢)‡!|Úÿ¦ŸŸ“‚ú”[öûA±¯ƒi’ ¥ÚܸeFñÎÖq¹Ù?öayÛ˜†³ÀJNy)TtŠÁ.-)"¹hbr­€*L€Y¶Íè¼§¬€Í\»¸É‚Ùe¸F>[ö:!kõŒkÂ~èözÓI´Ð/&Ãd?4L§[„ÞšœT„Xâñnq!Ñ Ô2ÝmÚ‹ÊÁ¥9K©UêÚò‹x«\•Q-*_œ–J2ïÙaVð{V@úÂÒ¯^­‘ /ûHD„Y’¯úY3;U(t–ð¬"„¹ æõrç Å7½üåªt½tì§EQ¬×^ÿÐåú©+}ó¥×Þò͸¸Ð~ÇèÈäQÿ“ 3üž¶ ¾=lkcœ6éö"1V5í­Î³tgás'8Bé×Ccì#Í\–¦É7ç½Y ˜É#¢Ö¨×ãqPa &ŧmÞ½'I=è _=ìµÓ¬PÌ&™þõù°T ÇY5knûT 6ëVëõªLWÞ.ïx@•ËbHó0z03ÀÆÌKlÞ{' ±ašÓÃ%-l]tÑÅYçx¿Ìoß°> ‹×ðM]Ôüœe$CÀPq0fnÄ\©³kü¬ÿéÅVY‘jô[,îvøU¤ÝÁ¨ÚçÇÝ)º‡CÝ©žMái È3h£H+Õ=>¼eV'6ÞE½Ó0 ”Ñß_³»ÎþC«œOøLÝT""uþ•oÂ'£~ÿÉ鯽ýÝÞ´Ó~rÞy>ÜØu‡–1íºh=ÝSGHJý:{;I’QÊ,"d +)¼¨hÞfJÉ(«§œlI–çÌ›mÌÞXˆˆŒç`9îqþAAªŒ+ Ä%xMRõOŠ™æª¾9µÆ;ê)g$"ªiD‰11“÷¢Ö°w†HÁ^YÔ‹U‚š¼_x^GND _¯ƒ ­XFÝ¥3?* â ›Ãɶ¼·ÜáäßíNÉ[åÓ£í•8 %­ýö´bdn&‡lo ‹ Ä©¤¥ZtpënHù­gAL•ŧ߽ˆ¾ù~L£½ÂY­ºy"eì¸m>ìökézx^³) ÞHµ· \ìg±e±i70à”,yO*Æ(T²ie6±zš+/E€ ^ 4ÿ!ÐŒE† å0¹l6W®dè]CØVެ‘{.ùNø©ÌØÌÕø³Ï_n²zOÞW¦ekM‡tT†©J5C¢¢O´HcU®K_"²PJ¢ÊAR‚SX‹Ëœo‡€¡LˆÀ†¡`ã}n[Z8õ¼œ{aÔÀ JþÝn›ž¹Zµ7-Õ=M¥ÜóõáÄņÉj:mŠ"°zdf1–àœ—i‚f?"õM­dq…º0{§e”ÄÃk¤ c™¯Â3§bI,g‰Tˆ"¶ðjú0/ÆÓ1²Êølwèᣦ÷Ù³®×ñôóèväU!Â8øöwUiȉ¸“ . ³è÷ÏÙN+PŸ{•eæù:*y" È«wXU6ð`Jvÿãï;½ZíÁn«ÎOžD“m/C[ކhžØ¤k ÓAd§/Oìn‘PŒ¾?³Eç‘A¼QÛz9p%U Î ‘xe"ƒˆQÏ0,‰ ïm§¹²™×lÁ¼Êœêç”È/²” J+)Ò?ÖýÓ`™ÂÏ0ìjüÙ§ŸC䨲:Ô!+©À  ¬Ó|¨–CˆèÎñºJ¢iLšPAc‡]¾5‘'QÕÓ¾ú®Ó©LôÁIýÎãqO={öèô´Ü³PvF!ÎÈÅ÷¿8ØévýÅùWy2ŠAÅóæQ²jœ}÷¨U·%1nq^7D\oemñ§­âŠut%ðtë9]_ 'üÛ«.Þ[÷нyá#!Íî­çW¶È§-ÜT°iÁ0¸Š¼ì/ÏxÖüûiü츎ÿDgá?b°ø§a9>êÇó„nèôÍûâpç¼–¡¼bÕÁÉÏÒù²ôö<†öè;!Û´ð”#.µ%VîzÄ•êÌ‹{À fT3írñÛ™®¿Ä Œ]foõݲû|g!Ï¢¿úp„w‡ÿâ `’OSÈÄVÒ«Í–¡‘Yðƒõ÷O(ÅEÑ€¹^Æ$Å·üùWê×/®Ï@O)4ÕOî—}¯à©_ðë›îýúÓÇg¿$m¿hGñ‰tvWüëæ¡ÿIãS<‹NÚxºÿî¤OûëÙ{1× ý`õXuÇÉòB£§ÎÙ|$ޕЫpŒ_æPHžÍã|×d›–ê.ÜA§LTR–ûY|ûMÎã¶ ä £ÅºM†¢,$p|8y&f­ðq6oÿy9šwVË>Iq[gu”uº¿®zûÁ\7î ’K“‰´ «¹ó&Ǻ.Ušd›m¤WÅ=OÉÿ»6¿óL×6nòi,Ïñâ‹AnÚµâ»UˆûéãGXà­·Ï¡/íW•¯~ÇþÙþÎ ›£%Líü8½Z›ólÚk¥YÎ5’Þ :b`@„ n­˜ì–¤(>ž’«àm#I9˜çǃzoÕ®€\޽³ØY„q%]qQŽàìAñ»<ËüCwo¹8k혙-Š4Ì3Ö)€€r7Ÿ¼)ØÚ$ÿP.Þñ¦_]lr€®{Wˆ¢ÛüF÷á¢ïwÁ•TÇ‹'ù߯>ilá§îÄq¹+‡Q`•·ï¿‹M›á¿ìmÒÑ÷öá~LœNª¾½ÿcùðË1ý½T8åumV‡ã£PÎæc•$ùÈØïŸLZÌ­òe€IDATªnùºUgnŽ˜¹àîä¦)\¾©r“ש>Í:æ¹Ï¼í_VÝ|ýz7ÔÑ:íè&ã7³Þt}ºÿïþ~힎>ß[å¬ÐŽ¸Õ b¢ð•PŠVqöí³YC) Û€õ'j2˜(/:ÕŒlÂNe̶9)wà8\ãci២!ÝÛßiCX7Ó‚ ¿,p¼Gêÿ0$×?]s8ûí>²{`î§ßTïÞåögá{{r¹[»àóðþÁì|å´ñŒ95ÍÚ™R<¸§ºjiŠÏÝͤ‰ô4lÙ¢[›ŸçoßÏ<Ìž¥êÃñ—EánÚ™ue“žVUvR,{áɇ÷“¿ZƒT§C2¹"NY!#‡ÏNgº“õzpE(òH¬Úèû `M¹]sÓt… i¦¶i—~IT~ùl.“_þQOù/£^ó¹yäáfUÍ­f/·®ê&¼ì"ßU|Òµ^OCþýÿõìQ °@—âà™Ï¦oñ‹q1ûXMÚ?‰­ÛÃøüê¾h£ƒgí–ÂWŒL9²Ì;M~—;A¯$ ž„n*ª¾ôóñ~õÛU}ü7£ÚN>¦ŸŸGV¥ìxw¬íR¦Þ:J(ö_<ÜÿzVºÕßþ²[rž¢Ž¥:m3¯ý·ÏeGDºI¸Me„´lJ¶#™\iҮȉ wç¶d`[½!¸à W—Ïî/n¦Ý=6Ds·p açG¬\ì¾EføtþcOá2aÔyð?'PŒ¸ƒ/Ä¿Æì|Ù‹¥ÅvÛ‡GOieâ©û`™yvZýaˆ’ÐMè„'æµ!ˆ;<¹šVò¥õîžÖër„Ÿà°e)+ßÅê³^¢D1me9l7M_Sv~õçwû?K/ÊÏö÷Ô¬^ CĘtí©/f52t¿ýÃÏv¤ebâÀšŠ;ß €Jæ€3%úÆsÖP’Ǫ1 ¸ ëHºRÜ´€jR÷–YÍÛí—<ãÇŒ¸Ÿ<>ùX„нy7âÁµ¯þé“ÿÉÞ´æ ~öoÿïß|%¡ %‚dw²RX;¬‹öü¨Çº¯ ¬2fÕ0w=ŠÔ¢îQ¥ÀÜiŒÎUöh˜¾Û©„<„|>±3îåªÖ÷ò^~FëÊ“¹ì;óºo)eêqÁLÅs;)…Õ-Qu»Ã€XÛº.I‹É̹jÑ)&·¤Úˆ!Ö/7®’›Üž-‹Ø")\¾±äE…¡Ýz¸Qz³¸¾§ÞéâäBþúålíÞ˜~Áõnp¤›vë,ëžqK­0ÐÝuyÜùÿ|þM7ã“ÊѪeÝjJ7Ü?ï½ï°ØRªÐÃ#´ pwÀëX¶,¯dtx´×'²ÓrãÁñ|rèR æç|³ÎÓ±U!Ö®»Úïdâ&\›÷&¿ìîÅßþÞ¾RkG3›v DOZX=ßj×M`J<Ô†o¡²Ü(–ÐM.JR'¥Ä£`Œ¡©O‰)s^@ˆ\–4m*ÚoG·¦_r‚-oóO&µ»×Íqƒª¯îâýrsûƒ+¸ÍŠ7ù—Á06ìåÚÍÜññÖÆûXÖö°¼PôÌyU.¸»;fü÷ç_?|ÖÅw'’&§aódÉŒnƒöIkH BT¾Œ­8;­Û½FÖX ðäê²6 (A-_×>xš·Ålyr´·³RU…ˆQ¹®z£ö~[ÔÒ‡ãí¡fä*Y §¯§ånwtPÿ¾¤vˆbšJ–…%ZwgÀÛA¯ˆ]ÉAC`ô¦6gk-ÖâU ©4KÉQÀ€Â¥©(¤¨Aè隘°[îŒkßSRH7€á/ç~ÚÛ÷Œ;„ØfË÷àÝmœøŽä¯Eþ?‘Îî›p+âB 7çmøxü‡ÿ´üêéîGýGý„듆̀¸y°”Ê^P¡;8E·Cs?=ïfFDqS6Ùø¤›Õà>û~Ò~²WÕʲÙd5·)ÉOgÒ9_¶b«,r‚“÷½<Õ;9cÍ´è(UV©ªZãa7Ó7yK­ü¼îEž‘î« ÎeêåÞ„%è{#ˆj¼Zr   Hj‘¹‘¸%p[¦ ËsÑL­o((›4Sbµ¢ðBž\"mQ@þùé e¼W?»TÁ.džâ/©l{ý×øÞÍû­ý[íô^Ÿ Œ’KW’¨ÈÙÿ)ó?ŽÜØ?<ìé݃¾HŠ. Š“1¹Ô,ŠæÞÿò!Ÿ}üÛ³_î‹9ÜZ XšƒAð}>rx2â *U!=GJMK©ÎÔ°¤„x‚³Rº² ¡7AC¯›Ê I•µÄb.έ}Í/`7“C.U¹{J:þiÎ7YßGçÕ+»úÅÁK¸Íåmr>›ûñ;¯óRõ¿Â èÒüNCÁè–Êß>ÿ›_õM^ ˆ‡¯ºô*7'¡éð˜_¸Ó²,r¦XˆÅ4JŒÈœ‚˜D EÅb•fzv<Õ0Úû¼/ƒ´sK½Öï¾ÃÉù2h­îe׿zñ*š§R‹Árµj[¯o½ç¶üÝr··÷ü}á»kïK”|­v< †ãeDît/£¤ ô–9ÌE”ÈRW(\ÈX1’L˜\(nN! Éáu)y΂‡‹8—«‡~ ëFàž%4ýÐï[¿ŸDfWzµ¡ŸÎ ºåo¹¤2^ιÄú½fè4³üžpÛ]ûÛc€YLÿí7­G]%jSBëŠG™yùÇ·>~øåÏ¿õ ÀRó‚Øé·VE¨.jY,v÷>Æd{¡½ÖõRRÖBò¢“ËÚÏÛgEgÞß©~ÛÝ)ö»§GiÀã>Ô!y5Ï̱\Ž ¡`¥ª%aò&k€H‰€Ñªh&ôÄ îæî$ƒæž’ƒâÍkhFQ‚TäîåR¡Øm½‹àª*ueùpÉ+®î¿Ïé.Çè6²½ùzf£ûô³›ë~Ç6Ùv‘¿n*Üy)—ºçÅÅ}Â)¯¾tMD‹g¯^MðÅx1}ý¨üâ_=v’ft(LÍ5°¶LfmЖDI(\² "¶l1±è¡š½zñœ½gϺÍîJFO¢\†á“ÓêãǯŠatv2Êù`>ì„r6‚Uñ¼¯gû’˜ÉD5Ôì¾?ø¹}èŽûÏÒo~?ÜíMZ{A©SŸ·™ªªå¹êÅ+gæ1¨Go‘—ØŽ¢L’¢—u@mâ1 ˆ70Cpk `˜yó€x4GÑÜ^ÚÆÕ/ÌÉËø°^[‚›ê ›?ÛîR?büøöìò‚.ÏpMrýÀ9î°8/eì1zÉÛî·yâFý[?g²lúáèpöØûCZ”Ì,Zg•Z"&ʤ ‰ž( ob†`fb TÀdŒCÀb•â‡ß—óG­§óÞ;öRènƶôúï}÷`ztèÒퟗ,†VR,Se»ì2ë³ÃdTɼ»ð¶š?ýÃýÅNþúÍχoûù€B¶×/zÏbœ×eFKÌZb泂- eM$œfÑiÌáSݦ#›“.ð³.€JUݪ›Amk4ºñŒÛ4¶íCLJ ñªvÍ:ø¡¥ýñ¥º8°Ôú©õN¼q‰Ÿòƒ v+kᄂ뻮DMf?cåÓñÙþâýQêíz4CîP÷JcæˆqXd°Ä-Šˆ•`ÃÌÄ €ÙôÅqxöëG…j&oƒÑhºD/e|÷ðñ¦,ë쾪ŸµëÝ´ê ˜ ZNwú“÷{džÕÈè(J «zø³ßý6üÍ È÷3«N³6ƒªôOæ±Å=@E@¤VTw‘”ļ‘~ t£KÇ‘QˆÂšÝLÍ‚9ÍDPÓÜ7áÝRž­º Y΄ƒM!ASL¥p\t"¸’jtkî¨þ!Övcß ž“wæmß;¶þ½ŸBi78â'/W2ZPlõáL{Ùø>øëPúìš`1z‹1 ¨pEŠc@¢Ð(®Fm=»pó.½<úãûXô÷ÿÕ.ÍeÛQÂA’¥D+¡Cí=øE‚ÔÝA{µÊ²Eê{ÈA¯S–SÇå”Ã%Gr+2zßçoÙ›~óù°è…sÓ£= @¶÷çd<(I[#@éwOhbT6o5ˆyrR8ëeÙ\ƒ$€îîBIT@ Þ(hîYƒïâm„®pa“¦áWõãFÀÜv@¾,½¹t?i\%vÕü¿—Ÿý$Š ~˜æ •ý„TÏkS©«ï]žÙß¿ûåýw'½÷Í÷§ý=?µC%ÜÄ¢xUvÄ’À¡bÌ<ÅH&ñDÂLz'³·žÎñ/|öwƒ$¥±ÿ‰&åæÌÄëØ}³{2ï´Õ}âëX…Жl5LD>_õ$œªz^šdfÒ‹îq~6øböæm«ßß}Þyº:ë>Çþ¢ZK™UæËQ‚$Ó(ââè 'WßTq: ‰µ5oGZ†Z%˜›YžDDKÔ’© ­ H¾YŽàFA½‰àê²\ &„»–ìŸüq늣û¦Ôÿäæ­°øÍؼ#Ÿ’ÒxïŒÛ;.¶8ˆ”&Ór¨Ù˜_uÒÇÃ/-ôû3éœÍúyT¦®u Y¢ÑE`F˜T! ^C„þv¡e{ü¯‡"Ë ')Žéß§˜¨ôœ_œûÉû.¬Žóhg“A5Jí$¨¢‚ì¥ïl·#„U«ëKd?¼^=¨^Œ‘OçÅ“—§ù£¡øü´lé^äóNf^SÕÙ Ô8 ³Nq‘¤` !¸È¢® ·sÛëXþõ|YgŸµ¬_ G/e8Yª.†îHÇGòE˜vF¶ …¸SÍàJ]‘ªxöâ-¸»»_Œ»ÂdLTÄ$…Çn"cf)Aiîû¡øûx:ôóÓ1µíõAõîçëZ¦`/K÷NƒhªZÚ‚¤|¦úÀß~lOþî—£A2é>†¼™†jt·H)Ú+Ì’ƒLžZÊM¥ ÁMIеÜHM¦HnJ*,•õN0HJÒ4ŠÈˆäáªOˆW¸Êö °]Æ^‘Ÿ¢ŠßÍf¤lþß®G÷X™fXM7°”Å£ªÕD,à@ŠÁj§•I:JwȤd ynSë߆ßèCI޾] Þïìíâõ¤?PžzÞcÞŸ¦r(çõñ¯a²øƒÃôo÷¾î÷é4S@R"’¬Û1Å7ßž¦gwŠ^Öœ(3 ±±JȴуCwÒR÷¡>ÿóÚ¾©½µŒg°o¬ŒÉ”+A=hOŠ–HíîAòÖùŸÚYÞ}}¶#>TÅè¸Bu•1Rg¼tÜP/Ýâ5s¢d‘”Ð 0¸Ðà®´èÞtUApèŠÝý˜ª)!(¢Ù–_:3.]_—ú®/\?D5 ã¨ëîM»2îôpéú>~–┤¢¨{~žgê)dÚž#VêV„Äv!ëÃjb´®W)y×{B#¥ˆÓ¡gðµתj5ó uL=§ ÕMkÊÈ\<’®Á&… Ã×YØ Ý’ìñ‹*Âóé ÷îûÐIåâ¨õ ë“þY™O0°ç/ö€7Y6l-Îg‡ƒª ¿>ÍP$[½üã䋇O*9ŸLá0¯£f)FÉÝ!t§¹Â›|¡âé§QÂ)Ý倫ÿww:½Ú»eíiÞj#‹«VáKElUG{ùîIi‹7O;.Óá~ùzØeTÂS6Ö`I½ & ͤ t£! dFÝ’ FwóEŸ 3iÒ¼­×$«” \¯»(JÙ6¸¡_uX5Ÿý*3ºÎÕ˜ßiß+Eï¦Ú”¯ï¡3øú „pçPΉóвʳLg2š•yé©NÞ§OÐA6ek·Ã®¼ ¦2NzÂÅ^¯¬Å<—‰ô™kÛ>¶§ã”¸n!(%Î3J¦Xf*(‘;3u·`K`”ÅË÷ËŽMNõ8ùG›LÛ½Îl6:M;b~¶ú®s´N8/>ZÍ£l.-§»ÐWb©‚óù«w±7Î%ÕAJÆMÉ;¨œ‘¥*E<:)°$ë "ÝóâÓã0á›þYb»ý*jË…ýµ½•÷/Ç–Á×.3­×õàçïÊìäýçõPúaï¿Mºcx]ƒŒ™6­*m™ƒXH¨#Y¸§Ê3uiøº¹¶jB`Î+Ž»²a\—,j«Ó4Pûn®¸€Ý¿¤–;™6xW ÒÍŸÞ7nQ¡Îy©þïUóNKF‹ñx Á×TRI)2Ðb£ËÚKïX²(*º’h³=Ê@<¢£åÄö:Ë*µãÜb–y™g•‡Öig™z^ÛÀ½ºõp´ÏÓÎÎR¨sáÒG ëd¦}@‹ÞïW£ãs¬æS=?Y„YbþaÒ,†sÄ„?ÙY:i{ïݬœ Ô³wæÒI“C¯½c`EÄßÙ‡Ý8Oª@–Ad2¥ÓÃbM$"ù@ܤ5%¨@™Y úù·Óðýì#Ï͉Rùøëï¾ûpøåÁ©§s°L¥­³ç†–jTvøÜw„³áì¨m™U¡ý¯ŽòléÈhŠ:©—< ܬÁÝèS-’¢3ÆÐ Ö:E“DWeô qÓ7u›##°dES¯î‰tÙ(úMÞ¬oДuÑ» ‚Ô °Z‚¸Cs¹¹õéÄm&»Ý#7éÐKàäÜü­5p'$€ݼW¾m C`.HµçÁLÜS p%S•lÑ/k«©NO\#ô qíâ3Kƒ”lQ!kSræÞMsí9Vv¤eœ3õ5<®wÃ÷=› Ó[™Ùq¦s=þ{ñÁɬHý–{)L5Îëš«i缓M³LÚÑ-ƒ“‘y B­yX剅H©ãÀg;ºNALºÊ÷U‹•|–Ž“|ñ/ÿüá8Rf†‚‹¥“LÇgÝ¡ccwõ†•ì~,Æ3;_$¼;³,tgH>NkA‘:“–›Ð…AÐb™çáB˜kÙ¡ƒêI ‰JÓV“dÁ¢1˜!˜hŒN1O @hŽµåš¼iÙÙÄ Ü¤sI"lúà\tÈKÒõry/âU¸üðSIl3¶†îƒ¼rØ[)BWæß‚ˆü$óä"ÍéÞ¬øsnHî tÎþô’~ò«ƒ‘×Õ{‡é›Éy§vÎÐg«>ÿpd-ÿ¬Å?œùÈUì8 4÷ºLfœ>—‡> a>²èHˆ©;ñ!çù”L5³DžÄ>Wb«è!Ë&Ìuf¦€œÙ»BC§4°?B¹È ²gÉR‰¬+´÷#`<±X÷8YÒ›Ûî±v¡'è÷Û™@Î÷eco=†;afê6F í…óUW•°u¡fæœõêéu‡ÝàÈž 쮜íà+ÍÕaI‰=q©kÛ H¢ OуM jp3QwH€[ªÐ Hu´ (óv2Rb‡Ò£‡ËR×¼©·šÝÜ\÷+”3éýHÿÍÛ¾âk‡å)Ûhî㪧c«Ä^Ååº8àÅ!Êåµ¥Îèì¤Ú>ɱ°/Ÿ Gص҇óþãÆÝ騾~=¿."ûã¯UB=Jý ’RŠ‹Ý¥ì`]ÉPÈ(¤—I˜¨Lvüng/gíX5ÕªžÌªhN‰‘³çG–³½· 2ãûÚ‡½?Ó~±Ï˜â2AippÛ»goÖý"‹Gn2=ˊ㙹MÂn¶î®e™IL ˆh™Á£³ ÁAVÎB{'i1p§d°äRH¬‚˜µ“@<лpSÁèܼgó §ýVéÖJÞNÖKQTbêËD2f)%…1yžOe€2!‰ôDh“$Y‘Ö²Š.–œ]‡Ób)©tš¶e ‹ }¾ARvOIa.tæM I4 ¨ 3ÀCÜGg×=o~sûMúú©ü”·rÕ_}Á4¯øu™Î|G3«$.§«ò¼Íš¬3Ÿv¾Ÿí”/.š£Ý~÷îO==Ðúýã ²÷þõΡ¤˜-ž N^Íê×Û}òå8o™ Ûnsc€OÿÜÿw#r[ j #5&¢«ûWþ‹¥Ã,”k _ä^¥ÎÒ:ÏÆàP’MªzÐ6m½ÿWƒà†wõ²59z¸ÓfÆôÇøh'‡‹Ï’'èÈ×’Rª£ÄT$[]–ãà4•éM¦&â$ƒœŽdî+ÕÖ2¬[Ôsk/&Y'Ä^Η~Ò‚ÃÝLb’ÃI*Ö±ëî5áU0É59<¬ ÂÔ°¬Ì;¶vª÷“„óÚ8,`•%´S":âÓ>€~ò !#r1$QJsÁ> µ’rg:ë0‰à½gÔ¬Ô”Tž²ÚàKÞ‡ãrƒKÞaeü »Óµrω/¦]=þBû'“>RŠ'ßž?Ní8«ž®ÐóúÙÉt»ÏDã“ÒâÜ/ßwv»{oz±ŽÔa»=üöõêûßÉ‹ê˧æ›ÞªT#A®ßøv3!ܧ:˜ÊäA£EËžÿ6F[FÿrÿèÛiZȈ¿8È3q5gò~ÚWU{ 4•_ÎÏÓ½ñP2Ô­÷ûr±ä,z–‹ÅD4Ь‹‚bƒô5gZS£«P,²5WTDg–aI5T•k´µ™x”ÆÕAå1 ºj'®• ‰hJO™Uë@(*Ëu‘H‡}=šRsh Ý·)õÏ(¬vb¶:ägˆ6ׄv†´òÚ™«®&Z3Ô q'&¯½oë¤M#ííò12[íóÔ+ûú¹—Î~d4pK9»{ÚO=ö•@ÂåÿØo/óIÑàÃÂêî³á‡0V´ÙYŠUjÏ{žá—ÝwGU~;zò7ÚzøjR„B;goc´~ýþMÕ*êïLJ¢—¦Õ˜³+§{Ã&€ÓôRJÉ)P3FUIòÌëékz·ÿø`gøäýß}LþÇ£GOG#e€™*‹ÉŒ.dà0U£w‹I¢Õkàbb”@Í(T¹ÐÜ|F¡G‹4'rPºÞ¦'j‚¢µr7q—!áÉyÍiqñÔ£ë&îDOfFOK›Úw#­6ª’€¯ž¦4C0ÐKÂÍÄ¡‚UŒR(ÏR–»+Òúu8w‘‘½¬'ój4ïgzXMÛËšb¦Cß)ÎãÙá²Ö?.ö:¿ºj·žM¾ž>ªí¯^Ú2׬Ñ+D›1ïw1é+µqG"nîd”V%I[­ÃòÜ>ÂW«²…?þ_LÞ¾<ëö{£<,‡EËË ðèûÏ×OêÓ½v¤÷¶‰ƒ‰ÁaeÖ´P3Ðm›)”¹îàež"Û¶tµ$*¼ò˜®Eê®xdÕçy±È €nµ{/! Ø¹|Þýïn"Òv±6¼kå®âl¥ŸANÇåµ\nجÂM²úi)i÷n¾\]lzæÃ•| çë”bé0­ˆU!š=ÌÊ“Ö ÄîÀÿôª2ï÷å¬8K`—TìÕ'Ï?|±¿<ÏyØS¤Ò³Ð¶´XOöI7’¬z¢ Û`2ï?ªŸ|ˆ­VÙwáð`\v¾n§ïþôVöúûƒƒ^ÈrM‹B®F&x¹æþbÞÀ‰JjÀH Ákoò^éBwW  ›Ê k¨!ÂäVµ£YlD”nbÌF¹x`›òÍ¥¸Žxu¹lM¯]Gòn¼[f\a6 ~E¥ñfGS°ÇKënûÒÀ?^‡rÍ‘’ì"¹y{wËË»ÜÍ?6š“Ü0Äu9¨‡Äuxèg#x<“7ÈON¾È[ÃoÞڪ彧ñxîYNM•@Ȩ¹ððÙŸ^r¯{yGŒ”Д8€ SËX7È.ˆPƒWð²•ub.«Iç{µºT‹â=Ý=|ûÿ,ÆïÙúl·7V¥…WMóÖöxŠâc™@·Úò]OERY+ypm×9wܼñJ6ÁI‡¸S€ÊDÌÒºG…o̹m!õÆçz-–LOB\—ªêæÅÔki@„3ÝÜte¤m·…«;xûߕϞÝwº8€Ã¶÷6×¥ÛDÍKÖè× ³›Vã'èjW‚æWgohí'bå.u±»Îò³hå²>Ê«òÉxÚjï úb¥A‡ÿòÛwý¢\Þ§kî¶F–‘HíÏ÷>¾·.Vë:Л4y7 ¢kkü! ®s«©*uÒ]XhæA…qµ’³Õ~o'‚éýþ~ªFŸ=Ý­NÞÍf_µÞ9“(„FxhGÕ•²ãCÐ7¡#x"5Uµ$wá¤@ºLNr•¥HM5óàtˆGfn1*#"$R˜YƒHs%=›Ümƒ˜v³úÅrXR.—zóÌ)Û$#Þú¡ßÕçóǸ‰ß×çõêº_-ýK”-£¼rÁMUÖuÇõŽÕëN4\%¤›ìërûÅã‡J*¢ÙNkÕõãÞòh¼£tžÄ³'y•§Ã<-ó,Ù”­u»ûøHw©Ó Öl/몙¡¥ýüÈY&@ChæS<Y¯Ü eì¸+à‰ ÜÕ`)î¾ß{* þfÚy‚vúk™~ÿý÷ç=œÆ*Ð}Z/mvúpÏö%K!dfî EÍ)A*£gÒ¼µâ§;eÛk¤$¸ä,GYfN果Ҫc”LNf&áN‚Áéž,ká0Ý”ð\]‚[\…ë‹s¹äy]ü€:õãò϶ÌÕ7ó½*®»(6E:7ÏwU·½=>Y—Û€C@j Û¬cHì…qïìòd™=MçÅÇoŸõ9*^Í{<ïôºÑ>°¢ûEÜ#EBá"*¡¨?ÿsÙùÞÆj#Ä)UÙMF=¯œIX˜7‹\Y¬²w‹<é"¶„MçK©‡E²*t7ÿêìä›ïk¯—oìyŸ5CÂoãcÒÿbØÁ³v® thðÚÄ@qQ›‰2@“îkR*THZb­ÉXg™›S2ÂS6¢©IæÆ Á¦9A£äpǵ:óæ‘6É€›SüYþB+dvM'ºiã5m¾?QTm–ûòiýÂMŸ_pÙ²µ=åµÑ(ÖÛõk4ù#ôueï¥!pAà ý|¸^ ìî|öÁ9=€1 w—êoíÀþá|>øöÍÃý­Ö­Üzy†ÈûV±í®.¾†„ЫJ¼ÞÙiš’tqõþÉár±dkS¬fí€iwÞ!ÜRp¨9t¾:ÛÓÅz0¶ÚùñÅ›]}P9ŠJ”©ë­ÝŸ½{E=ûxrtJQ®©Ád1¯q,Ï]øùÃ'µß£ÌØžµ«âÛþÝŠÔtçYôœ0ƒ¦Z ¹%V ’n"¾lë®EÓ@3ŠIÄIOÔ m0W¿Ä€&IÝÁ2Ð/AF¹iÊ~›u\ÑûšÖífÆÄ|#à˜š÷ß'(N}@6=ma®+Z×~íîØx •à ¥NÇí¼ÀhØ_,–ÎlQÅ,í¶ß®žä®Wg{¶ü˜L:ìN¢V„‚Yf¼¦™´êúõ—âI/šÔîãa?ïz) 1:S{œÈQ«ù”ùÛ“ù?Œjg±ÈY@h1¸"I;;šÉÙü·u)“:z«6Ìks婨üî¡>øìÉ^^¨4QƒÔF¸U™‚0SôHÄÂ饅æIP“æThª„³~CQ=Fk („[Œ]"mäd[3Â\7ØÔŸxt*Œh’À¼äawku7ìSòô­3o>üh<€~ 7~aÓ\9ÁEÑüÅF¹›ê“ÜÐÍ6jÁ”Û ~œH§7­pRšŽOFu‰¢ý|öˆ²c“—ûOÞ,Bëåë¯{×Þ»Tßǰ·´‡ËÔRE°ôKÍ™>¾ôî‡ÏRj@^‘’yo½Z¬f]¦ºS3ϦàI”†p>owß}sŽa§ësÇîþ~;˜iOUÇ]WíeÜA·¾Á: ß8>+}”=ŠU™Goÿnü³_>4JnIæÞ輎n›Ê?Ëh9V±åÉrs1Ét‚”ú­Ê˜[" ê€y$“+uÝ\™6YfB(a®×Ü&H„‹rÛ†ÝR¸ÄÛªE×<>½íšÝ¡r_YL«~D?ó«duýPw)_×´¯ËÌíOuóán¼ä­1q5±SK$-Iަ­Þ«ƒâóYm%Ç‹*C7v‹ýÕéG–¯ÊƒåwXÈà芥^ÈS&–¬+˜#ÕˆÑPü¼9û‡áâMS,*ƒžÇqV')ª4tˆe¦–¦$øãéGß¼Ûù›ƒÿ±7m’$9²ÄÞS5s÷8󬻺40ÌIìÎ.?”òŸñ‡QV(B —ä’³;\\;4ºÑ]èºòŒÓÝMUùÁ#"3««0"Ué¡¦úôéS5¿ýfýÝoÿáªüÙlal©ªáˆ(LehG¡0# ºJFj¶fšmœKÎ}„¤â& '$ÈB¬X…»‹W.pƒ}‚iØs½0„a£teFA¨  sP„ûÒýž½MÅ'áªÂ¡W6„úzàSú´Ã XìÄ^›¸/ºðÀÛ ¤ðkà>¦s8=âÍx8swŸ‡‹GD($ÍÕ:„Óèòòö¹75¢¯.ªqýf2¿]¾ÊÕŸ,¤¯·õyc©ÊªT­LÒº@ïÓñzó‡‹ï67—W×ì*Pà¼}ý¾ûñ §ZeDQ v)T”LH÷öæzyôîË.ÿøóÜ:./—OjmÄV¡š-n¢bš­ÖÙ¡š4NŽçÏŸMØ×³Éñüù‹Ÿ}¾~õªŒjr¨­ŠÀ DŠõ"”d¢÷ŽÒ–ÔæÒö^ƒ©JV¦õÖEÜIÀÃM„L„P! "1àÞ™ä r`]Y¤œ 1 w´[¼ $÷Ëð¿ðØ ¯ì|ãõ0ÂL<8„mý³ÛÙ`f.*ßçãÛŒ=I$™÷ÞK؃Mý 4»OKÝC9:O€T‘Óê¦_ëÉÜ:í7Ç”¦ï*ío[}1»Z=žû¦í‘ytZìñ©C’t½«‡h“š²ÃÃËåÕy\n®¾}½|·ø•œŠAÀußÖŸWáU uËC›nêÕ›?‰?~ƒ“/&h—‹ïn®&õhæ·mÔ Û¯¢“2Žrêõ±”~c%£œŸ•?Rg¢Íèé¶_^nf£ %܆ *5•vá`Dvs:FJ€"A¡Hd+*i¬iªIΔhE3Cb©Eì´¶•îóù½×BÇ!qäß3ƒá ›‚0÷R»‡Ñ•w ûÝCÌý§tÖ£wõ‡öã»=ûž×:Ï»;¶WÝ' üàîÍ/¹I ™81ˆG 6bôø*MÞ‡VÖ_èõr<­1jÓ}^Mÿö–ßžµÏè½?ãܰԪf)žjwÔÃ5Þÿöëã²úù_¤›÷]ý£çò›W?<®œ,YF‘C²XžahGðbë7¯ý,}ûºJçÏÎÈÅw—W­û’y[×­æBiga—ÇX’Óe—)rš8¹Ù.m6}qc½ÄÏÿÍÍoþÏÅ¿{ž2¢ ­2 ¤ŽRP“a §y2hP¬‡h´˜n¹c-4cÐáÊprèE ´H0$‰44æåívÊ0M~il¯ ðÞ4œ0O‚*X÷ îÐâ‡N)€8ÞÀÿü=CÃÁ´?¦HÄ{[¥…`_’¼ÛJ︊»×Â0Žù𤃆åá}Yì%11L¥¹ûN ²%_dlå­ŸV×J·îmòl¾ü£5£œçy2W (•SSŽ*I”Åïþýß}1úéñ?pvº|Õú»çóg¢@âªüxÔ·#x0Ix ð0…Öÿá²™£ÿÍ{þ«Ÿ$—æöŽONÏ@,óLF„_·™étœáUø¶í»&5\\RÇlu@-¼.XÿïÿÁÒìÅŸá·ÔGÇÛWW1û+ D(æÓeάDéC›ªº»FH[ùõ³£Ñò·¯eþ—/ªVâúv‹§2©*öI‰R}×o²*£mŶ‹ÀrªÒ·~\½¶G¥¹âY$heÂGÿÓõë_·çÓ<¡^L›JD„êIºA¡J„;}o@]K³€„RD TT< C´$ƒ©äXVnK)!*Û iÙÉ!ìƒ/+Ø;½Ä{ë¶7¤ËLjï,é¾Ü¥†ÿ‹Ç§ü?r¸gç;7³WØÙ÷êâv‡7W¹ÿD‡®ñpýÇÚ}|?m7±y÷Y‘H¹eµx—_¼ÔÛwoSb¥P¸)JxP‰nî-šäH¿ù/Ýž?Âõøž¯RUâöÿ¨ÿ. êüõ wæ°J,%üõÕ²¾¾øöu<þËÏc*Ò__^N«8Îçn›\E”ê²T«Ydyï®FÜlç YëD Ÿ.–cœYº*J f?}÷÷7ÿñü/³lF”°j5Ì ²‚ŒhDVÏ(®ª!D˜¨†\¹QAx€(„Â!ØÀLÕjú„–E‰%õJ7Ê0B9vlþ ©`eÈßäûe÷|Èí¸W’ľ¸¼ÛÓ´`?=wçž]ß}p/‚{q]Þ »¾÷nï·»ý}sk݉TY>'Ƀʩ¨ªæÂï™”ä0*2ˆ† ˜„QâH)Q8p…ÖT‘]âo’D‡>÷ù`¨ŒìÒÈç¥ ÊÝbþèZì·˜¸’‡Îl8KþT|öñ2V(‘>¾Í»)òøËý¨·»/f‰=Fø½˜C±Üç_ô·×‹ã£e÷¯_}ör"eúCw._ד(á x"$ܙܢŽÎ—_ÿ_ßÌÿ‡ŸL%…ôöY÷‹E“Oóû_d®ÆX„eïI¢“æýÕõÍͺ_+ý·Í£™Ž0úæÝåòGg'U1VUƒÖʘïlŒíHNýDxβ&ÊHVe4êû˜¦1utYÍ"b|öoñöŸÆýãID„Hä xæTRx„[¨X‰2ÄŒ"‚]õX8ÔÍlŸÈa(cæ](=\ºÃ×DÀ¡a‘*ïÃØÉÝ8d•Þ÷*aAaŸïÛÅG—ñî±õa;ÅAÆû_Þàr˜®w?ûøËwí?·û!qùЇ¿ÂÀ.¸+Oýôæí»å»G9Î6¬íØÅJiOŸN`…ïRrPºaf€>ÞüÃÅêøÇ~’$)\OÓôâµ>Eõä¾Sâ—<—$NdZ_$IŒ~ÿÎ7þÕj?»XþîówÝDÉ=ºIŽ0ª·*"âæÞiféy˜Lå¦Q¨ÉM¬¤}%íâiR9 ’ÕpœE3 +iPpÙƒþC:70&÷hþay¬ïcFVw @Ñ»éƒU?ûÀ yþçyA`®! ß›ê'£1ÜÔGÞ=wÓå?1)ahtÙMÖâñ1ýy&ð(–‹›…ÙÂ~ø2 aÖÖ2 K µ¯ªÅ?}õ¦œýÅŸŸzÀ=úÕℳÓôÒz»êmG;$ ˆ¹ mÃ7ý…Ýøì/ÿF}`N7¿}ùg³ãJØiЉÔÙ¸µ§ì¯8;’qKÍM¦{K£K*V’–œK¸ßªÖéø_߬ßü¯Ÿÿ›/*î>$ªõÂ"©YÐzd‰€¼W/P 241‰% C „Übè'Pí› "4JhÚ ¸yÖSc0î½ûú°ÿVU0¨' ‹°ûõ°rø~­øÀ>} àOÎCÙŸ€Ò÷§®øÏï?i÷ÞÑ;"ÍpW8©K†œÒüø²™<¤?@Õ›ø&roÄ(<ºö×ÿé]õòo|…Ѷ_~µ¤4õ'?~ýëüÍ—“ ,0¥—pP$#B3W‹›Ûo¿)qògùéO¨S¢÷õ›ÍøÇã£9"­°,¢ˆhÚ ÐauÒ6]7:Î +lbz1« :# DVËɯžý;~õnRZ©¸¯ ŽlqŠÖµO™†›yÕ{rg´¡€0Ây}ÉdаÄ]âwGáÞEµ3Ì©€(;ݽ;igÞîñ ¿¿KÞÛ¦öQ3ß?÷ž!=¸³?m8» Í2»€ß©Èy(@užtÒMX@^ŠÛ Dªº–jüãßߎ~ðß¿¨5zJþåÿ²¬¤y}î¾’ç¯6|\…H`·n$P\¢+¯ÿébqOÎóKžúŠ•¯þã룟œWçÙZ×(¥ÁÄC&—}ˆ™Ï×UÛøø¢bäõuªÛ+}!Ó7ÍÔ¢„Æõ±˜d!·UùÁ¦üñÕ¯U%GÐ!°^ÔÕÓ ˜•€ðTUÃŒjì›QˆÚ8ßiýÄÝôÀæ°óJ1XÚÀ¸¶1é‡Ýñ!%B¼àaùä] ¿=tÿÜÖ ÒøÙ?ù >âÇâ#Ľg:4ù‰ÓìþÓ,\Ás¨¤Þ„`æ"$ µ„v†ÙY‡,QGùòÿûîäÅ_=1"$__u쎦OOú§?ÿ•M 2B*w±VÐ÷½ÿö±Ø6?ŸÏ¦ë§ámÑäñÝ·Wù||ÌvzÃÚR•·n™Ë~>]¢Kuã8¬KlOÐ[NmŠâ}Q³ˆl‰)ýôúkÿEþÛ³¹ìER"‰ƒIèA²@ >ä¥âNAW ‘F?€Œ!—ÙqÑ#ß~.垎–vÞî®õc }@Ùùçnƒð=Nû‰|óS‡ø%ܹ¹½Ó…»ð0Oòpb XíÏÿÔ×Àɽƒ¬p£ Àäkm¬’`fQ±Fô¾Œ•=ŽJX›ƒ^Þ|õºúÙß>mÜ'iÂzÓó6äýâ4Áoφ›@¶\ýþÍR^ûìå³Óót:½Ê^׋õÛoÇG/ž“b¹cDÄ6‰äÜ{â±ÌZ£§Ør«ë8Yé߆¨ƒ¥(+¹¤ÙšS2lò³?üvý»Q]‡L±§»ý1qû—FqIa€e˜pˆx`f>„ÅÐÀ7tjÄNÊ=?X¼»­å¡ìs¼;@á__ß_¡ž!Íj¸ó±:úÐ`b¨:rÐ <Ô¸£SÈ]§?´OÞû`ݽ±áÇ0Ý¢Yd‚0#©a…•  <åð V(HæZ-^}Ÿý7¥X±7£Ç²Ù<d3ZVõëß뻋³¯›—RzôWßt¿»ˆùãùÙ§/S”Ò—±Q½¾øÇ›£4Ÿœ¿L)KÏ02E§46„F k‘r»½Œ¾c’–ç›2©Ëâöù(wÒKnè>KÚ);B“?þ·ñõwÅŒ ³\OïV#Ü43‚†Ê ]GЃ8:èŒB9 «ªÅ¶û²ß{n Îð›x Ü ±_hÛ“p>zÒ§náŸî,lÀ¬Ð‹{1U¦f•6·Ïx»|œ¹UH°^Sß«:¾©\aÊ#’t3P…ვăò1W =°oòr ríÆp— ß1àbžÀTŒ"K/õ-ó(âts_»•¿: C—ZÂÞ¼ù¼ØïÛþä™vÿé²É+ùÎG¾»½þîM¼ºy<û+9~Áæ´w$ö7)-×åríãã³çJS­3 Ïr+S/ö^%ôÆ‘ ¢áô¶Sñɶó¶®r_6úŠu<&®€Îæ7s)IU_æöÕ›_<û ÍU_ ­€@t(ZÁ0¶“=" ØœØÛK¥$ ìæ¸î}ÝÞܳ‰ÌîC›‰l»ÒÏŽ„ó}lêOÛ¾‘ä#s*ø›¯ÎWëŒH© §ˆ“1cBÜÄ|e)ºœ­„Ð5“bïüI²>è|–Ó¨¼ÎQnJ77f@æË0­YÅ&éVr®Wŵ¢«Ó9R_‡Ÿ ½”`¢˜“ôz€¤ÛTUºJ¿®Šæª 6ÀvÙ¦>¼3x'£öÛÍüù£ª»)®—Ç?è<ÞßühöeýûÅZTÆ¿>~|íoÞ¾½.eüüñÓ—ójD"¬÷ή5~W¾;o^ÊécrKö}±ÕhÔHíæ"þöqQT`à‚ 3Ñõi9Ñq¤¨JÛÜN5ËruN›‹•RÖç?{sóúwÇg˜Hñ$ºË¸JdI¹Ôƒè±Žèä€6Ú€`Cà%\b–!p=Ù÷µÇÞ`ï’ÒÞ>ÈÆƒg|Ä!>ÀÝw/¶Ãy?–\¾¿\ɜך¬/hB¯¤’‘/Ú d)MÙl¤ºNŠm$©íjÑÛc«òmæÑ•Ï¬Ž¾LR *KD)ÏJWŽ)k™±tΙÈF·Õ5'’rÍ,KI‚Wz¥×#:tÜ!P¶¨ÍÂlR8]ÆØ/æÉK‰åL!ì}Æõ°é¸à&ª~âÖùE<}çÓÕ·¿ô£óã•Tz}u/Vï¿z:ŽÉíÛÚ¾8ÃÚìko^â¥cJãÏæúâQN[‰r´‚Þôå¶¼¹¹Oy–x]Ž|Ñ»äQ·iO,eÝC¶×Zç…HX*§õ‰]ú˜˜çØBé!“íªn“$[ž°ÈJ¦«ë›Ç/OV—ÿåÉ”I=" 2#(樇Êà•†°¢/P„«ÐBÀ7 ¢ß¶_GA}˜‘2„-!ÐÉðNÈØMÏ»{ðNÿý¾™}¢#ÊÍõEéÆÇéþ ë[C Û#‰˜™B/aEŠ3û°¢ê­DDB¹e‚ÅxMS{[¬G [Ù<ú¥@„·Ë¬š…æu ñ‘ßJ…¸BåS¦¤¼ $Áí¬.‹fÈ—ñ…Ò§UÌõÝœšJ¿JcÙ`jæ#&Iqm1«ë$ïâJŸk’ï¾\çŸüYbx\½esöÍÓóm½º|¿~üd„_Ù…»Ï.t2 ŽO’Îàˆª)”·á‹››2?ŸŒ7iÕv~ܹ€rêvótÑyåŠR^˜^ÓÔèêúø6Æ×ç«ÏzOG t½?]{µtb•é™fë4w¿}w3ûòÿõãÿî¯ÃLc™F2¹÷¦*¤2@–")©4ÙyZ—a2"Ÿ¿£šFIèm7#}o?ñÙa¿ô(ÎU2ÆE¿3Êß,¿³ÓˆÛa.â÷±®Cüçv7¹åžÕîie G„(Ý\4ŒhMR†¢0E$z)©’ÒÕB5kÃg€÷f¨`a,DÕKDñbÔæF'°µlS¢%Çïsº6VXoæI½0EDgXP¹Q"¥œj{¿ðð˜¾!«•L_æ8úº[õöd¥å˜%ÖÄu$™‚nÚÄE9©æÓ–sØ´w3?¦'ï]Ö70[Ç笳6Q½ã¶©BñRž°*½þq6ó-$E }„îvÓ¼OWµoýH–|ƒ££6|[ë̹®F*WZÕdo¯ñîÍoyôãÿñÌ}*¡°±j=ÑÖÒ‡C³Øz„©dE¸æ¤²A˜ÅxdNÀÐc@@ŒÆ0á‚N‹;RtèJ3ª{ìJOCd.jªæ»ß³ˆqÈO{AÜ·£²)'Ÿ°³½¥í Š‡ôäÞ«î'ÀÝ¿þ÷ägÃAÙÃ7e÷º2R3x ³JÝCä €¿6ÉÒ¯˜£Ç†(‘<")z(Õ›+gdY½õÉ3å*~õÖ§?{¶|íË.~ê TX-búú÷Ïô˜k.färIs’É+Êâ´³ÜâÝBÉBžûu*[N6›z¾6p.èA§"nª$|ÇŠHéhvñ¶œÜ{‹³´IÑFÄÈD%éé{™ê–+œˆ;êôîºÕËé¿þÇ+Ð{_Y•56SÅÕ(Ëõ³÷°9Ám g@½¯Xt©ª‹”säÜoÄ"e}yÏ›YÍUTäzì±Êâ}²¢Óҕа’$ÕûrÆ%w‚·šÌÑ3ØPÆèËÔ‹kR"BÉÅE%LÒÀÕb˜«úýŸ3F Âlyþ'í,v3ÛcØÕ»Ç=…ÇãÀ2yðŽ´s¨C[Äý¨‡·{–‰ûÀÑÝÅÌE\'Bà`Ò£±Þ ŠZ\£÷¿8þÙ™—EÿŸ¿©þæo´Ø2~—ŒŸ¥#½¼/hÖ¿þß&÷Ä(In—6F®·Å‘loýb™ÙTY(«›¾½‰_ùdž·)]—ã+xëTvÈʯãÑÉÍ•æeüê¼Òb%xˆ8*U¹ÖJ/m²UGtÌqëÞ.‘_L£.ŽR&ӏЙÞJ•y3Îzóâƒt—#ñÅÄf\åÍú¸DÒÚœŠÉQN‹‰Ä2,ÆQ];‰óõ*N7Ì’Z-™`Ø“¬×}8æ°&-,d†K?i•¥ˆjÃÖ.˜™(u”¨RF ªdOXÑj˜‘S°+AcP‰a ±¸)Ï |º°“9Ûë"Y?ÌÜöÀÐ D”Cdù@sá>u|ˆ3½aÒí»\g°²ÝŒöãCÇîôÄa< ÆŽ°"‰´ *ÜV£¤.ì$,`³¾ŽôäLD«¯þñý_=ÊËîâÍO"t\—Þ\B5㳟.»|~´=J$M<ë†fÖZ{µ._m§ÓŸœ t1m˜Äúgqy)§Ê'ž*mur©YÏUX_5Ír¬üÜÅb™è£[ªÅغ"ܾù ÓAõXØw0ÛÂE³ßTòöÿYžéÉççbýÖžªo=Kf^‹ë—X¼W‰ÍQ/ª'‹‹qñ´õ>4Bæ—¸®½'=.[t[ÀטGPÐØ"5+UFA•RÝM®¶QùqÀ­Ö¥ûhÒ#a£‚8µEH£LU¾dÊ"ÁÑhÕHo£ââ€çªÉžaKÉŽjÌÅäÖGY\…I…Å’$ëQ»u>Ô'>]wò¢ 7O"€Üð`§ÅàUN¢pG‹uêeD ©·‡«²ßEöNt×2¸+0ñå¬Á=|¢t„€îêŒzK5‹—2‚uy[ƒýõÓ³ž‚¸]=Ò1ÑsuqRÕÕd\¶ýö»Óg)Y œüuñWÿ!|ö3¦*OGÍ傸~ÕS§OøƒúhR7‹ªNH•{ï^ aÔ¥,Ç¢[EªåªÓØœV(ºÝÆQš`³zâµ§ëYªt›–g×6œ¤ "¬Gfl½7éI±£l­¿_=ýýÖâùã A}x†ˆœÂÝAˆ{ñ„¢5`½ €a‘ÞS %$V1ÍÑz*¶Jêâ–×ìŠ(½ƒ¸“U0DÉíJT*÷fkiE‰.R·é5GoÒX$Úm›ÂQ,Œ"²$HëW®BÅLWl›(J€’âhŒÒöë,Óëq•ôf5EHîF¥lÉv’^^¿Ë•ßvvjnFÕgç?œkÅ)}ŒïéÏVèG5\n¡ã¤7²nÆ‘ÊhD]«º »=^­¼+'›º¢¹Ðê÷³L¿žxƒ@ ÎcQºnbZ©ªKûÛÍEþî×úTK ˜fq©‡Ñ­f©p£Ô}I꺳èZ³UÛýIU1 Ñf @}zŒlXìÝ×;c?ĆP×û¿yDpäwAòÐ åÉȘ<( àá;xsŠ8Ìp;t5²O˜ë€ ¥ôZÇPªJ‰aJh v=½&PЋ*a±ë|ʳ:Ô8‡zéÇè¾‹ÃÆ9Ì¡•˜"L¹„=IDåZC‹t”€,þÈÓ“†Êο8 骵,Á6-FÑ{½ © A°îpc Õ´U ¿ª.j+bÓNÇ™eŽfÑ%fœ¼{4)«ÛàèjfÞô’nõõõ©Ê·S.–<îs—kdJT}¹ù¦=ûjúÅÉ oç¥x 3.t¦€ ïPå‘¥a}E‰$}@ÓN56vSx{¹ñ€ƒ +x˜>85÷°D-d¨0ºêà "ü`3ä!CŒö«¸cäìÑ%Zäì°o( ÿ“ýƒS¢Ôw1Tæ!(ºE¢§«ì÷7‡”ćäPÞÀ ›1Ø2u`Z`xÙë‰ìlœAÀËPGæ0i)<4u„Suð”Î*J×Î ÃnúélÜ›gÜ~›ëå²*)³ës…W~ÓÀÐ(×¢) ¾ìeÕ÷'¨Äbc£~Ëô%ã©ÐL&‚€Y¦:ŽyéÕMÇ·WÛÏ>¥©RÒ TÛ>ßž·Óò~ÊÐi³-ÀhÃþäfÄQ­c+¥šŒVÕÄÁ!¿v»™]þìâRùõÓsqÐ-šÔ}}T„ˆ ‡2zQЄên»î0ï½’ÌØue:(a=U5BÌ|XL2èîJÂÁb9¡ û${ÉÑ»ìg ûØ`¸#]h‘Ivª Ülï6¾×Wpß·Fì€ÒÁv£jÄ©x„däçrè’’ð@ìxM$ÚÕ¥ˆï&KGïû/ÛIŒöS¾÷™#"dð¥Q„¢û^Ã-‹{ïX*:ÙÖ'*€Êï~%/:åU{3ÑÎzIýjÃ2G$•RB¸Ù¤Z*±q-ÞÁ<Úx4˜Q4¥yV¡t«åI5®D+)cÈÊÙ>=jò›K­#Ëøêêd´qf£¯íì¶š¦¡YoHH}nª*•µ7‰}òúM•ºmThGtëQŒÇë+/WGÇuXßE­Z©(ÖB¦¬(sax03¥^*qS‰Ð•–Ç0 Vu×Õ_J[ ½…ôŽ‚ðpƸ{$"ªM$÷µÎ!°2PÀíAƒÌ0ÚÍïJû-Gvê.$zÛítw¹›÷ÐELùQ;ƒ™’€9ƒ"p+wú>€G ±˜‹9´QÐïj¸CW9#ÌbÀÖ†P’„î>%A —´ e¸74ÁßqÏv½^AÐ%7"sA4ÑàØ¢IßÙÙn*Ýåeõ£/à‹rqóƒ|Õ°½N‹3I‘AZzPb4 Çx’…_‹ßnšö·çÕÉ<ƒLµHØÚb|”“mkuLk»©¦'“©ÕáÍx¦¥­dýå4úUôÓQ›|Þ=ª †ÛQ.VmüÈmY—¨$Ϻ®¶MU7YsE.;^6ÖJûôsÃ"I¥*Êd¥”âˆâ¤çnXÿœêD…d—†>”míædq‚Q$ (ŘM”l‚ŠÁè#iJt§¨ª õ¥*;¥Û]C•»ü±O †µí=I4ÿ ‘”¥j>‘ìj_!DxqÜk¨ ˆ%„ i!Déf:Èýº¼#ô(ìmGveƒýQ "ƒn³¾‡bÆ>ÖÄÎÊ€ *À4!¥B›”4 )=[‘ªjÁ„X^m^>αآËWÞ_43„5Š׫q}äÇ7‹Ít’"m!+^Õ¸,.×mšR´*Aß6«÷)ûœ*`«,tŽF§ “É͸ÝTJØRêíxy¶~¿}Ô”~û¨éWÓÍÈÌ“×îG„bf&RbäÄvýDD°m¤¼}šžÖÝWöîÕCº¨tÈU›bÙûªD0:¥€º5Pw2ˆõô&¨fÖ˜®µÁÂÌ8†eŠÀŠ€ŽaËL4€úÀJ4OeT¼ÃÓ‡/¿`—¹ÝõƒïxÓÞ%S@¸[ɰAC<íö£ïÌò·ç¾€"’Ь¡ëÒhj$1L}pÇŽJP(ŒAö¼ßÔ0Ø›H8Ÿ›v èÞQïâÚXNÛ0ˆ¢BDIHÕ°$­/DZšk@nþ¸8Y÷[\£šý‘¥?ŽMø6&vYr¿žêUÝ{o´!/¿Ë×Û÷ÛZæ±›t|¬`î“ÈRß”c÷E7Ë©Èë~4­UŠéf¼hÑ„t¹’d‰8MãWÅÆãe©¤ïê)JU7}bt‚háeSŠ5⚆ÐÊkmgQ§e鿤ÂaÑ "飡C $ YöÃßÌ‚HªŠX}ê)¤$Ӱ鄃ªsAºíÃ{ñ³’)y8“Ié±ÛXv Åtß%¢wÕÇ»¤nˆÂ\XŠk„’¤† N®'rUW÷g;`–ºg@²!¹!ÅÀO8Ýc”ñ@í¦nsB‚‚0á!d¤bH—cïÉÄÀA–5ìNüþá"Ü¡QHÇC„ë 4U¢FPÃÝ™<àþá<¼q„G{½Î6Ðnñy}\pÖl“ÏW•ê(©Yy«Óú4KÀ©ô‹ãã#9nûÍYb›D£ñb]{µ‚d·õ¤¨ùŠÛój•ñrõEêÍ&P7í7)5èªð‹é8™ÓŠØd¡9\¤Âô¶çõœÌE#*ä¥6Ÿÿîï¾ÃÌÇ€&ÀF`[)e9bB¸…U õ1…{aQ†3å0!¬ˆJ74à #…™SÆ‘aŒ«K¸ !di¥ƒ» ¢ÆR¸$ÂB ž+,Ðý; !µwÊÒ]Ôp€²>±Ø~zŽØ!©d³)ƒTá}$µ1Àˆ|Âtø æ{UÝ8ø§»b¦†ûdžÿýyB0ÒþÓíMi7ˆ×…îÎ’Hz¦lfÞoäæM9åÔÓgÍ\<=£7öµùLcáeôª>ZMê‰ÞruBÖ`ŸråÜ´ð›)êFp& …æ¿·[ÚsKó_¯¡¶MÍ‹3_nSŽÉ2uêªãѵÇyåG-—½Çfþ¶œ8Òµ6 fåúÇ&Â°Þ ËX<üè‹÷ÑþW)óLß—Q¢/d™šD² ”6&:ô›8Ì•[•”èT4æÈÊ"á!6t÷¶ý¨Uw CwqZ0 á»Ò±ªÐ]$úd6ì­½fi¯î·œ;]¿ˆmî¥?ÃÓ®‡Ëk(Òfö);®ƒøÁbˆBƒÆfÆÁ A‘bCÉwj àÃn’ê‘ñàH ðËîÞ;¬uOØt²hªCènBw7Ò¯#YHÏ1®_—§§Òu|}{®­ŒµWãºr÷ª^š§üE*Ë'ª1/'#¹ÉvcÏ=|¹Ö§—Ml6§¤²'MCáx_Ê2$Uf]“ëõ«“‹§VÄ]Ë¥NW”.Ħ•ʶ’Qçaž6²Ê³DÁí‡OŠuÖæêWàX±tó±ãG‹?¬ïOŠìês5IƒFKvÙÆHÜ€jQR:E8ëè“E›P%=HXgnSPjÑl!³"œ D…wH#(’@ eø0É1@ê0_¥ÄJò~QÓ{µG¦}’@ °_îèRÅÐ4ë®Ük|ì%Ö$(÷èƒ ÖRä@@WvàˆÙ]ƒ<„^:Ô6?ª‡tWŠÀ!ôu80hë4’^<4Â#%¹js0F ”­?:âåâöw§£Õídó¹¹²ó¸|¶¹¼Áã&¿/ÝtCpVÚšå źåò8ÕGYe½­Ø§oçè#ˬãÕtT@h‘Fê£ü´é=Y_šÂuvcïŽìYU "ŠmícÊ6fQ%„—Ö–œÔ¬a] §îªòÛÔݾ<öjÖ]L¾@å%…„R†X#¸‹˜ò?=™ ÐΘ ¢‡ë€›º £e¯p·TŠ$¥s¦a/†•™/¢ÞBWãØ‹2èˆ2Ay°uòÞÿ€Xˆ›5!F@ £Ä.e¨þÄ\D@@È¡oæ LćÔ@qÜ © c^2'&C3a„ï)Ň\`oJ±‡õî×9<;Ä1B\vÝ7}¨hÉ›”R$l£øû·§§•l«ÕÙ“éëY]¡õ¾å¸Ë,ÅŽQr'dzUÌd”n{¦F²¾o£'ŸdñÆûJÚõtì%„Þ†=â<ëFËF›T¥t³ž°O[¯¦š]ýŶŠq”iJQÙ»éº_é…7:«P¯,×Íåå<çži½z”èÝGж]¥þÑùët™ÎŸY¨DqAA‚¢KJhŒÞ¦aPUCò²’á §$º)î}%FeÐ5ÉH )ˆ”„Ža¾­êôÊŽ½Dá#€ ånRç]/$öâ¾Ù Â+A›w ÷ º}ÌóQ; î´ öd!bß0èž… “°ï…Ã;ùJí®þv(aìª÷ ¸çÂÚòá¶K¤K„k„rCUE¼bF«¡r»Híqå2—´t¬Ô»mïæâî ¡í«°–‹±–¸Å‘æœ$¢Nyµ:N½0S­çBœSHôI-yÿÇ'O6”Þogµè&ZIôèü»èKÔ:rR•f"«ÎB0ŚͺN½Ô[žÙyiG‰y¼ö.Mf¿×éŲŠ-²@¼ †Yëb5‡%öƒN!Ôá+èɆ6b$7ÐDƒ* Qèß|§Ê1гx¡5!àˆpÅ%ˆJƒwë÷ꇕ‰Âó cwãê>jg>¨ X„#ív]úÎòöDÅ eÿ|‘#dw_ ‰¦Ã½„s™ì'@„a—J{>¸Qu˜*i:¤ée-Só˜. âDFÑ£±ùšiZäqž+69go¶sÝ^[õîØÏÖÕY2Lj£ÖRô[+V1eCèš¹–ž½u])£D©7Å¢¥nä“˾A«‰lŽ\|1­*pºŽ¸9ò5Üz™cä.×¾jÆÅ'+*¥ßFdú¦2¯|«íUyõRŽÞÿñô‘¨@B Z ј¨„&h=ÕXJ0J¯*ÀG/0Ö°h Ë~êªÉ uÃ×>œ `Ä6‹ ƒNzÉÕ˜Vâ½K>ÕGØùž¡ÙCA‰{sp¸z)ö ;  «„¸ïwÊ=Ra»jåAÓã®A€Ä^íH÷¿ß™ŽßéÝ«˜À÷†ð êÄûá¥÷Dû¤ôYB% £w&¤Ža£mÌ`f [ÕS¸oðRFß½}„ÒÕ)ËâX²Ò0é17«“õ¦)qó©ýîÿçìM›dÉr+±s€{Ý=<"r{kUõF69$§m83¦ÅdÒo×7™d’Ù,¢™DŠÍa7»»ª_½%·ØÜý^ú๼zÕ¦‘ÈŒŒp÷ŒÌ‹À€s.¯>é.úeLFVŧ«ÚFÄý4j«}õ0ß{] /Ïsì-÷4ï_4]à ­ÕÕ¾­S\ Ô‹¸Ý]`…îCR¯ëÝ:ˆt¯‡4ic£'w(”Ñþîl%oˆr¶FññýU3ÃOâ!¨¢!ÊOÅ•Šâ­†»Ø ¨À‚3rqQªxu ¡S0‹& ‘° ãLS:gwiJ*µb ,“’¼]žEÙY,<ç°ýÁt'Z˜]×éïâÍf·Dx¨ƒÀʨÚž,p¯Ë4;º1’¨ÅÌÿæ*:;~Cb`&D!"‘¨âNç*å\³9õh5§†h˜1ÿ¿rý$þ V=?霕œž-dÄ 4}ëO´T_ªû_ÓñW=‹Ä#ü´Î÷‰ÐØAãá|4®xòèôå³ãXû<ùŒ[À#àÇΈˆ:$ίwk#RA»©/›Êѯ°­.”ÉWýf¢Mýhû¦ßúÞû»—HxWíÙ”ž!ûeñ”Èð¡£3M,ŸìuŠkiÅŠÆ·æ]o‰à‡~W®£{·vÔûd¢?eë¾½0ö>MݪK–9ei¿u KwÒ gNÓ©÷ ó”v膻¼8\ê¥2…#\Õa±“„€{ªRbf€D ÎѲ½ü;;¹­g×}•ýæÕz-ìPúð©Qo,jŒÝzS­ô7/–èÇ´‰Œbqu¯õBñ"k0{¼ ëÊ$µ-]{ö>Mou¸‡°•¦õï5‰•´56y×õŸêt‚7_’öu<¯ ·ÁÜ®ü.Ól&7L»ø®9WqhÕ5,¥FŒ µ‰âIéì§T#LÆÊgÅ™B LÌzˆØqÜr`æBÈÛÛ¥Š8 ‘Ô£dƒ’Ž0ŠŠ˜ÍzÆ«o"Çf'~âh(?¤‰Wp}¬þüXŸã£m<Ûáø™?zÎû¸áÅçÇZµ?{‹?xxºãI˜9 Ìó *vØŸÃ\$‰Þw§‹´¾¿ìk4Ÿ^é¢f#ê(c“ œ²šìS¿J¨26·Þžç3vÓ=˜Û¬^¤Â_ÊAÔå8úaÐþƒó¢RùÃ×·ëçá¯ý¯<<³ššÇ©€¿`J1‹ÙÜNÿý+©m1%É5lÛ•iØ,—3£š Ëv§Ûµî±_èbI‘|ߟ[AðŒg² AãÈâ.VëÅŠ½» °˜`Íý>.—<«¸»P:ukÍ..y6-l/È[H7!`„¦ã~1Äy¼ÿªÝ”å`ÓJšÈB„/—‡uôñûë—)mS’mŽð@HZ«—”?ññ.3rñ+ü¯9N·}ü܈>×H}J^¦…3aÒ®Ú@NQ€‹íw/cÿím½hû¢ÌêÛ³óº™Ê‹®äó±M²dF­>ætPõ€c,"‡ cl”!Ç}je% 8qÉ|çR>Z,Ê_q)Sß1ÄÝ»±î‘†—íXö0YL¡5°YrŸÛ×ÎìE,Úº-é*O¾„FÒWüôö¥Çôþk[Fœ @CUxˆ¹ˆÔ¢dCÝ8wÿ'Ã7ª¤µ“L·T½$„ ^b]­.Áb”F 3[Š…z‚ı|ȧ1—“ŸP;Úã™>‰T¦ÃΡÄg?}¹êÙ§.K>µ >;ùÿe=óvs«ðCìtÛÇ722·˜»7žÀT<Å®¾ýØÚÛïÙóª«QE·ßý4õÚd%¦·ë&£\¯PִԆ ˆj3¸[Ô¶ŽB•ùN¼]¥kÞ WÒ†LïW›:PrSn›0aBòHã5WÓÖmSƒeÀ©½ß6Ö~8”ÜÎþ±®®.0:4êÑèÌfÌ(.6-iѦˆA’έì1ÏýHö¨‘$f!ƒ d@àî°Yè*&Q8(Ò( í$À…GÃUò±vƒS›Í“0LžøªÇE™¿ÿ`o=Æzû“ùñëN>D ¥A„xD3>3…ÙÁgoâÉ#Ÿ›Ž¿ð?³¦?yð©‹}ú^•ôVz¦Òb­×r×/ªõ÷SýY³:ç2öÒ´‰oPâ¬,g‘‡ÆæoY:å½¼øÉ>0Ö¥³asÏÜD Â'¶&‡¥d†uȸGçDÔ3ÖHíb 2ï79.“Ÿ½Ó2{…(¾ÀnU›vãp‘a@)ÓA–ïFciêýWoׇíOË¡UUˆ›Ò ¨ËJ–(¶F:6§„„PB#4àÈa•B%ƒ¹:*€¤1ÍSPÆ#2ᎠÂ#=™p:nJŸÉqÅQãâ´jñ¹Í=¸”'KÊ&úi~øÃ’b¸]x¿°êMçæYMDáT^(y¡Ã*¨9å å ¨ÎàC÷¹‹HÄq8æ þòÙ›y|ï>CDŽ#±`3ëwJÄ»OùbçÖ×ÎÂ}w8¼–%ò2¢>ÀJÌ3iMˆY‹µS‹á‚Á®´WIe&¾JÆä>M…ÚŠ@HÙN}?¼¡ÐB…ŸÎy0m4‚Av÷ߘ[x½ÜÙϱERL±™-.³8Í!év™®û¿ü¶KÕ ÝSüí¢A@@™ò±{ZQ©„“íQÑ©}òO˜;Ý=ŽŠ%%Xgt"€¸;*³V`fnÅ‹´aóLÌ<Ö1wø?ÉÞ~·=Y~þãgË&?ÖñßY,ñ^ÓÙîãb]C¸Þ¼jôÒt^ •ŵۿ€o½Ó°ˆÔ(ÖwÈ©CÐíÜ·mRSLž2·Ë‘"ÂZDT…-Ì'—Up–` ŠI€d­‘è§jCV4ÏÜ$aæùž{ÒHÂ=dt³Ô¤ï?ÜþíïÓJ°Ý,³ g/ßÜaèKtšÜ6²ÒX¶ ¹_-b»üÐfÞ¼jU º†×€Â÷ò:‚:G×hÅ#T·7çêÑF4iجFi°Šílpßr™­Úh·¯»™5&ÅB<ÆœÚ}JêHCL­%×ø³Õk´^ógéwŸVŽ©ƒª‹'…ˆdÿlgx´Ï®(ˆyªÈAÅ„@J³V6s@Âýˆyïy) æ³Ïöü? •~`‰‘æk|¡À_^½Ó¶L²Ñ•Ù:ã»åf7Ê]$ÑoVmzOø”µV¦5I˜§ñiZËÒ÷M½í×ubv;O‰ï£‡ ªzdÅpÛ¨ž¡æžŠhš|ؤ,j!I«KÂIŒ¥[xti—¤MÑ6n!n^®ªÝSUé¦üöÛ¤‡ú¾>y¿ÛkÇ¥mv‡ƒn±ë©.¯%ßï—­ßî~2UJ»m¶º&9o^ïãœ4sÞz›åuçP©%v²–ÖkÜLí¥n`¸HR%Ò´« <¤;Ï·ˆ”ÐN=!EEš2žËâû㘷wƇ«ÔPw²[0ÌJ—¯ì·}·ë7ÿÒ-0‡Ï³!ášl%‡‡‘ì}¡ýxzš*þè1“@ýˆ?#âòòÏ£2Âëlæ"šÈ(Su—ŒQ!á¢<Ð(±˜•¬JaG$Yb+r¯²!ؤTÌ›©ÛˆÂSDºu«QõשÑ*ïSÄ]“aF¦Qdsî”&ÂP²hoᆫ´'TîÒ,°åÊê/v×7ã·¥þúýöòct(ö­ïËö ß¢œõùæƒýÄU?É—V>­­¦ ‰WHÓîº 0}4m27[þáçvçgQ$Ýo2àÞ¾Ó´Ânywþ~-ÛÎ6ò‚ß÷š³PF¿K ƒbJë‘;º9¶Y·º0ã­¤WµFçLgv°UÝçe²}Y ¾úÉݨ[l¿[qiB ˜Š«Ì(8åÄÝòÌç D:ÙÒl&Œ)ÇSf¬ë‡â¹G¢? ´žÅ_sÔõEËzšê=C´æ­ê™i~~ÙñøŒòñé¹ cnéŽ0ËO½c8¢82ç1æ˜fïL 3ºKT6^â(³TI‰Z±ˆ Ô‚#Á~ ¯!f1 “ý)7iŸÖñ).dç1ÒRZºï¿ŸÛåoíç+ÜïãBvÿrþw’%Δ¿ƒ®¶9/õ>Ë^äëûæÖ«­¨«{®6mVŒ]©’À%Š«(Û«´ž·µ¾ ³œíÅ{ÇNtóâM­”k¡ªMëwg¯Šöü|ÐÃe›þ½ß¾(×—Y#ôwòÒß½ÈÛ‹ÝþråîŽï~Lûôg¿ºˆ‰Á”XµœÅ-”!5ŽRƒÊ=½aVá*õrì¢ìRÌKîaPº÷b¶íš˜{ù1Û¥ƒ3'€G(ô‡rŸÔžGJä§y]À¾™Û­ÿ¤æ×“û=ÇÌΊªê3ãÖÓ󿇢ìôÿáxBþrÒŸ !ÝBæò=a+‰"­ÄTÿå7ÿþþûß½ívøÊ7ÿó›ÿFþ©¼é¡"”ïÐózf6Ü3š¸»òµ¼ÊvµáËûYÆ€ýZ×r»cIé ±½"nM’—± õZÕ·÷x%LòÉq®äŽ‚ØÝÊúr[A_­îUSÚé Î”—ÖïcòË ½6ð…ßoxŽÍ* j4û·¼Êßá¯&w•MM"Û‹…fÝKÊZmw¾*õ[ reso ‹\ìxV‡blRGÀš°oqß *hŘ—ñ^/+½jBuˆsžÇU 7OÊjŽ˜$:@¥W¤0U Ü%N6Ï\l ÝqMàÇû‚ÔÌŸzv““¸\3»F>ðØŸlìá‚ÏhÀÿd%àá…G<Ž'=ô ½ñœ‡@P’ÙR9®–Õ†‹Ÿ½é’•®ÓýÅ%ÏêÛ£»-/£Â/ÏÅJƹÚO:z\Ý¿çBS“ºƒbÌM2·©†&,][J­ÑŽ[•íþíö®ÑèTƺY¡ŽþÆ'ÇûE8–UcOÄÝÍÛ´sã§óô"e±Þµ—ü˜êæ W¶³OÓÖíbû±VôüÄí¡•¬"7¶/ß©—?ü”¶Ý·âl3ö)¿¶L'†CZŽŠMnÓºxÑõ÷m¶Ox-÷’{èæ5ÎVq'ºf­g÷^‚Ë•D¯7ÌÍ÷f{íëYum…jV3qóR›uHQÃÝU‘ ‘Ôm2ž±š„ïË,{M›ÐØ$x zõ:õѤ¾ùƒ­xîÇ¡»‘3¦ð8vŸás°îóÌŠ~Ä®N?|æ0Ÿ”Ž ÇðÇ>ݳU¦äÇp£xßýb@•¨ÛiSV/mµuW+$9¹ºùT’oÎ$eÂKœ T|á⑤c0)ݡ谰1ˆÚEòXê§‹Äö¯t×èÝ·9^jÎ$·±ø¹[õ–ôañNWÙMöûejûÃF³iÂnL|]*?\h#1m[¹b™¤›šþø\ÿ4ËÇ׿ÊwH™!*׫3«QFÛ]pHj‡jIè¤È¾¼ÙG£ãmÒ뾂róqñòþ.m©M·ž2÷j»œ–e7ieªù2íbD9\5Š5à5 ­^É\„ʾ\Þä´‡YqPih—‰²ƒz¨ªÙÂvWØÊæb!îËÑSc%%6 ¡Ù [[ý¸–õ¸Œ£† â4u ¨°HOLã¹ÿ{–—|aýáS™Òƒ>ÎNÙõ#—cžTu3•°™ Ú|¿Ûy}Õ"öõîg¾Ùµ/R=ô>º,±ì÷ô}êpo)¥ímw¡CZBjì©k"†®ÖÚ!«;´¤ò”ªr*CwÁrèw£ mô—-»û¬lª©™VÕááN-/ðÇnq.Þ³K7Ä„+ó¤’ôüRmÚ¡°x{žÓÆ› ‹IâÏïÿaXíÿâŸoþõÏ:ùÛŸe…W‰1e¹_‚JñªJ8 R בD)àrõˆPŒCä2áS4Fl.é7Ë¡®'7î¡ÜÑî¡¢ÝûüBÀ8X '×.°±@’DpÛïIè6 ÄK²Xbš<&ëšÐ_üäÇíì³CD 'F=ǹƒÓ,qmäUÞºfŸö>>s_q²gœnóðüqêÎåT€œ6w£OP¢äêRÅÃB®RýöÕ‹¦XýÖnäÝxÖr_x0[0Ž>FYk³qo%רµ9\ãòpS¥M‹ä¥Þ¼0à ÉV­&jØÊKŒ ‘4L½B–ï¶«¢Ûï¹ZîÚtû¢©l¶CÓzl¸÷c_&•µVK"ó¸€r”¶þä]ojã5ëZT•qñ7÷ÿòS÷ëîWª ™É™@ädN,€Ƭ<>u³>`„xÇ#êNõXQaólSÈœ²æù(yA~ÍcíÒ<0c :÷,zxü¹FÀDaâL6ä … JA#Žpwæ2‘ô”j™ǤWø1;{Ïp\UT†ÌÒÆñ<©€ˆÑNšÈœ/z˜á1À{ú?úž¼úßží+1®¤…䜪bÚ†èž!ý­2Œò†m¦’‹d­.©ìzLÑ[*ýj[÷Ú¥Ã~\Õ(Ö5ihÝPV>MS“E6a¶.¨ÝNÃ7á×õà —5’jŠÓ?0¥â¬©5c”¤ÕJ?ÿÕò?SÏõÿºøª7~*ž8S5Mtké&BZpÔÌ#Û¥ÀªH¸uæ a"˜»¡ÎÄxPþ$Ü"b!OÈ«O¬gy*qHÁ3c<€ QÉynó±m+ÂëýõÓÆ©dP`N$“Íí AÀ|œ!hŠS÷!pb\ûÌŠŽós³w >·×ùO~Hk.ç£IbæN8^â.D‚pgnšš°(¥‘I[·ß¾x#·èÆë>—Å"üáæ/úêÞVl¸?¿Æaý ý§!êYµé2y͸_$ÝQW‡Rï/’HØAtäÐÀv»³6v[IeŸ¸H¤´ƒ{Šƒ¿* -Áú¥Ww·çû†R¨÷‘/lÈÙœIzhFS uà™Û  Iä×çé·7?]þ݇§Éi‘N=8“f2…{ Æ©«„Â0Ar8æ!"a¸;ÃæžÔ*uÀƒÍ­×§à'܉pI2÷±Í DÌK8ð‰Ì;تyЀ‡0J—<™cSws"ð%^ª9$š[ðaN„8öÉ…Õz$£1œø3ÁOE̳¨O )‚úÇ<4Ž} Xy8-·ÑŸàqËt'‡ÌðpƒÃë6C&M»_ÿ–þÍ×r=ÜMeuøeþ˜V1ÈBké[Ý5h[Ùþ¡¯+xûð=Ü)£l,ëžo±-ÅJä‰LM޲ÑAõ X¢6Ð(/m^÷Ëœ]×nFx$õ8ÞPïÜåûœúFôîõ¾óö¶‹r“´²²Ñ´PìGUOyªmõPAÝåÝû_ÿMúÏÝKɳpSD9Œ¨ÕA‘ GJ£4.m•0Ç- ÷­p›©§ëT]‚L© ƒ*Ø; ¯®òˆð†G0<¨àL£wZ›Ùm¿Sw|î¸<­¼lîØñ“Ο-ã„–?fg³|„ÏmE4!çAc!ÂÍ"Ïó8ŒyZë‘®åÁY=|pzþÁî?ÿKžo›?ØDƒ³MÏAŠÏDÎG•ððJ©¡ÂÛ·)Á­þðûºø×eqw{·_|Ýmûa;5c•ýzøÐt먻‘ÓZöìÞg¢ö»¸X,7©ª”‚1«HŒ‰MRõÅ.,Xk„¨* éNä{Ý!0qÐt·»ZŠw_‡-ºáî*›H=ÿ7Ó?ý/ÿÓOÿpþJé‘ ¨Ðœ@Kˆ$MP¢N–4¢0kTd ¡ºGÈÊ ^¬³Ï‰ —ºŽ@Ì«fÅDZx•¹`Ú†S‹ 3[7˜UNXÌ”'ÜÞ™NåýŽ=D×Ì«ùFô¨@wŸID¢2¥‚Æ;ü¶ÅÇ­ñ‰å=Ý8ä³³ëû¼ÀAâA’tL<Ò9GꢡtDPƒ·‘%̾ýûMûö'‹Z§¨ö!äò§v¸j8¤é£ë¸_-_uÍþöþÍR·…¿;|ÿ‹U"R¨ÔCºÌûMÓ3íl1Ps/x.ù¢Tw¹š¼íÛesƒŽ(ÁLrs»ê¥ÈØ^ slÀm[›2±Õäqp)»Ãb1p u/ÐîR‹viX\é™ù®¤96åõÍÍðú«÷m;/6çôÇ=iª9{ÉƒŠ ;KÌ ó˜yã4 «1“k»3$¡–ÉY¥·‡Rz 9W 30Æó‚{„™&UÐÒ1î9-ÃB øc1uþ""i&g¦I?ºoG-[‹ ­¢ÎL×G&ÆÇpì4Öy4¥'LOí‡|2CrÚ>Ÿæœ§äòD«ðôºã;;Vëp-œ>»ÖI„C-(TÀ£cÀg~ g’©á¬»ÛåB cuqÿ0üuì/#;‹Æ§xƒÝ7Ù·z!;ɺ¿Y0Åx°u+u(ЛÊ˾ot°st˜Ôe)Ì×p‰ÕX«În— roç‚AHwFõÃyÜñn¿¬e;_¦wW^Û©˜R5“_µÙ,ï~¶è7ìm¬«…r³ÑKo¹”,ï–"_½ôPgo$ÆU²u.›íòW¯~õwÿ°ÿyÒ5§ff/h˜YaÈJø4÷ô‰®Jˆ!™«ÂÀð3£B}Tq„ÁŠzu%%€ ÉV0ÈQÌ>2Ð" F˜HC«³¶¥"H‘‚á3c™!†™EˆÂ#]ЗóM€`“A=-æB‚ôàj?†X 1‹>Pºã|,éyÖË矇iG1‹ZEg ÄQÍ‚ š`£ˆH`øVVM¸ïKøð‡mWÛõò*ïßOÍ›_ö"å®ic_ÏDóïºu|Àù¹¸´]“b3J3¤®˜«æšîN,KÙ¦”÷q¹å*›î«t½–ˆ¤ Ýu©=ALYîñzúî6¯×mÛÖ;Kù²õ;ºæ3ÝFD7aqÎÍxÞäƒVq­Èè;îKXsÕ ûsì ¥BMÓˆŒ‹á°>_½¾ýÍp¾R¶twOYU€(®¡œ¥`ifîûBÄ'"Œ$áã¸S2uZ$'$ “*«5£n:€cM³Z©Ž! £ÖVBTHF;»Sxx˜df­"<a8rv÷µáŸ™¸!%}ÙŸÅ= W‰Ü<$@È((žÏÌG£2>ðO=qf8Ò—>-|òÑ{ýÐc¦Ðx|‡/¢1ˆZÃRÌàöévUŒ‹²?ØNø2‘ɰÒtl«_›uȨöá¼_%8…Cïy±ñãÛĸi+–ð˜ìîáš³ì[ö/·SÚ\´Ó„N²ìy÷ª•X„ª‹ÜûÙæÝÅåÆïÿ€+ñ°ô6 ý]4&YÄ|/ý=uâÚÒŠÈèh¤XÖE—*±ý.ÌõZÍ ~ø/µ<{s@ýíW/å_ã?ð¿…¡æ"q¥†(gâ=ºIN“Io$ÙXH85¦ˆš:DÒ oÍ‘á}%gd_L DòØœÕi4.˜¢‘Ô6KÑQ¡bN+‹ ¬°“Y°Â!a<Ò¦ÏÚ$3| !`‰­¾ÄЧpœ"á@¨ á2ó:Q<Ësn™ÙÔô!I|°* ÔcnúàÚü¡jð¬ÖÅÇWfÐðt¿ ÓLÏüà(]2 ê²½=ï[X³Ÿ-ÖulÞ¬ÏÜ· Ó‹7ê»,ÝàŸÎ.o»ü悈Ð}i³”Ì?W«v×7Úc@ÎÍm?qQ ‘U¾ο^*×+†¥]'eXó6A#vùeÞù`9e T.C©‡o¶ggï›ÎÆr‡,v8§:m’ܹҗiL: 0 ‰‘,£L‹î/nþí?þóÙÅE÷ïÓߥõ’“z0j8ÂÅ¢e8²UjÓ$€LxVb§¨^+–4 'î-‚`Ú˜9Å 2ŒnϬÄp´*`ŽEïÕÍꂪ•8‚Y*(Vµ‰Ä&€IDATí< gž± «J•YSÎŽôg_®o ær”ÐAœÆ÷ubž+ ÉgöîgPÆ—]S€ æ÷ã5R'tùTjš!;?eºc95ÜAs„ƒ*B0ŒÌñö%£V’ºzµºqëÎÎ0M“¡ï:×M‘eI+ÚÁ—QkûñRÆý],·çzXHd)±( Ér×`ÑCuî•sÏ[šmε9¬`¨’‡aª“ÀrßW»’Íæ>®_0œåÑÄÅpø¦9D'céÓ¶žß¶*&Ym’Œ’"}™rä): y ½yñâßhjÞüÿÑþéåß6éoøŸòÙÌÓNeÀ…1¶ (Í>!‹Œ$(f"š}Ѝu ·¨ksJqFñ‰ ¨¬´”ûÔxe§¤z• ˜f D€$Ž!è”Ú 8HK D ‡!‹ª€ân%Ø*ÑB¤Ì¤ëFDšòe~{¢[„ Â83ubÞ$Sò£dÓSÆögŽŸYØé¾'°âÖ˜¹ç g‚Þ“!žÞÔQ¥ìYˆ&2—ÃÜÔN"»ÌbPË´ÐûÍùë«%0œï"÷7K«»Ã›´åctâ¬jÀËìÛTµ¬yŸ›Eüàž6Þwáƒcë5A5îVz(‹û¦™¸å¸j£“6¶Hïíeâ¼G“Çßÿ‚ˤÛ]Nw«×‘ë‚Þmö¯´¶®E‰Û3itFX,ÞõÒÐbhÇÜÞWç˜â¼z+4¼JúŸþðë·}RüßW߸ôê$F Q± Û9ž£s Í]“™C%˜èîûµÃBÅE‡•Q’U!ÑR5šƒV4 E%9k£/HjˆY‘Lœ3¥¢NÑ),#ÒÚen5'å\@hŽ)ÛãºÉÎN¯Ìy3‚r$ö>™¡žÐÖùû©ý‘ö4ï†×uò_§Ø£í=ý¥3\{²©ãïS|~þ)qw©ó˜¨ôÅmÿBzápHˆÃ»­·«ëðç7ëKøê£o_¼(ƒj¬×ÓA|ê|»ƒ½¼Éõ~Å’Ýž·¬ÌãTw—ã‚[²õ—£¦óÝÚhâ-P=¶Ø_&Ù¢†Y™mú͇·Ç¡¶ÿجLWÒÈ0nbwýêSݱm‡‹ðoôÖ–ŸÞ])Ä/X³±ªDE%cׂ¸8w¸Á5§±^7w%ÁEÒñãº÷Ÿ"z©×9ûrW«ýq9”ëüféï†ýñ—Ýõõ_¶v€m®¤ÿ„Fâ6&I“æg0nWmîÐÒ-1Tm¦´_u’/è6,‹–C’Ælýúåïÿéí"ÐÿùÒVjŽ W …ø±s?¬0¨Y<Z8µ† cAÉ´°Lµ5,VNxJî Àtmhj+sÓ² rjü’ä’*©€(!„äÔˆ‚ ƒYõ~ùtµùrßö áÎùàê§aÓ¢?°«ÍÆÜꣳY‡Ë©TÀ¹ùljU;æOØÿì±[ò³ZÕÓïÇÔuv› wT¸¨ÄîpÖ6P§Ð¹YúòMS¢XJ]ŒÌ˜VqKï—üt˳<Ö~J¶-—c”f•ÒuL}޶‘»¦lØH-+i0èayX,Éî2n–œaX+|‡)º¥Ûá׿˗ӻ&ßvÍUî.µsçd“Vµš¤XŸ‡ÇÞúŠdMÔÛ^³|êÁÅàœ’Å.Ÿ·»°qºi"%ßoÿÕÇÛ8¤ò³¿:q/¾ÌAÄMKHV„£Èò“{´û¥æjM¢;Y]ÜS{TÓª­Î(‚À"BrXD±u@B4Xê…{*<<Á‚ªp víLˆ Guu%à$Íæþ ÌL!µô³§åô#üg€Søf܈#L*›gëïF9±c?!³zÈ#žŽJã‘T÷ñWÊÃUñ´®ÎÏ,ïñ¢¹´¤˜+6¦)"Ñ€¡õÊU,ö~ßvïûÇ8¿_^|¼K­6º¾–e¿³Ux„2{篇ÐiéÍ61™Q{“ºw‘eÚW[»íòJÜ"ήlH‹¡-žQ¢I"rŸ[ãÖ?­~·—W?¿ðüb˜v—ïÌβGcC:Woü`y—0É’>&µD¢ø’6-Z/’¼Ý€Éu¼0Õ(‹¿nÿ·Ÿ^¿Yu pˆk6aÄ¡—ÃP‰F¬‹Â@_ BD¬Rf¾p¡[I4Îr´JYFPÝtÚÏôJqU«Tb®T1ð`xÔ fT6Ž˜åíÔ!‚AZ„3è3M:"Ñgž¿À)¥û"~¦O6²Ó$æ¶íˆj=5³ðã°ß³ls®½ŸèÉNftR©>•^øI<´CÅ#òñtÅcl6?©åø? À\ ¨Lb$Ènóù"2wÑ¥éæðÕ׺Û{¹ iÅêí 6‘§Í÷õgW3É™ø~Z&¤Fu­bš£´X?¶·k¨¡õ»âƒR2½™zÑoS>ÿÛáײ¶‹ßóo½-A便–e‹)û4-‡mf¸¹fЫŠ£0"ª $2û½„Dz2y tÄÏãý4é«ðD„'†n¢ 0w!]ÃgË–&›ætޝmúñËg\¯ªZí(­Jžd¼k-³•JG„ªgN2¤_“ôã‰pO^J®.X0m!(¦/™`ª„ ¸¯>>}¾XNO„‡‚ 9ˆT… ˆb‡bBFÌ@Ï•6t¼á¦"²OÅwUÃÀàH>4³†9›+œ„ÝÕep‚>*"‚)¥ÈDÂàáæ"DL‡$×ël½’»Ê¨Ì†¼ {ú£cï/ÝÿwSËvO*¿ßâ&Ý?ã¦X|8ã–TóƒÓõú¶÷Dn`?4r¹¥ûùõ·:P!(¡Ÿ|u6Mh#Óò뮚Yíj“°-±m^œõ*»ñîoëéz5% AR—(щ6"ô˜Iˆ­hCÚ4—Xh&_½ZuG¬ ‹~¬zL9VT)­%.)Ìr;ãìÿ®üîùd6_ùêßÒlñæ„D¼†š+ÕÌ=„K•悚 ^Î&‚ǶNm9…¦L:/eôRšz”aNèSÞÑIþéÿ[=<5’½ƒˆAêTBt˜N<{Ÿ™3Šì%D6ÍJáä ‚ø¡_„©¯1ÃȘ( U+cã=9 ýÈ]M8ˆÚД| »ÂÐ’€Úw¯;°ËC3ã€~w@Õÿþ6pîxñoÐrpeÝÁØMâ : Z7p¹sÉAˆíÓ!÷¿ƒ{ää̈;+€!ÎŒXÈÍ4[l™ÿ†=‘¿þÕæèãÓ”_ØQºÀâ‚B|pÄ›—a¢RÙ&ËËiÚ…QhÄÒÎB`/Ίr^³÷†>{E¡§JÂÕ<òZw«¦‘Ü/[†Ïsê I¥2 <ÊA¶EìȾØÖ:®Ö— TZ[ºÚœ¶¬1¯{–Yªb”Ç­3 ÞYØivœ½Õ.ÅÙ¨š­Ç]h*m1ŽTÃ.¯â¬òÁÐ6+y†x(›9üÞ¡(Ún«}sSUê&R·Å 3S0ó,굃{Sð>ëЇ8Òìéa£ôâ|ðLØ~«Ý7¯¹ájïÛ7-ˆŠ±Ý8În5ޏƒ;¿ƒ†v†ßƒã¦0à&(~í ;ȵCÇûÙõ.zë²!Ýr” a| H~õo¿ïýdººGxû/WóíéT×ãˆVLqäf’WE¤­UàŒ^5lwÇ,9¥±‚FÞ²N#(«ÅQ5n¹î(Ÿ¢ßÔT Ö-‡YM»Õªš¦×a^h{Êæ*­¿áÀ…`4C†šaä™JNZ¬ 1&IEAW±'&/¢Nêz­JÒ«Ò.&såï¯ÎßðøhX½ýr¸Ì¢ÙF]N,Œu¡ÀƒOiØLà0Ñ’«‚$2ªüM{Ü*9ÅÀ…V–k…zH•¼ë.À~½%È÷¢ÄÉA,Uéœ9Ì/³–¼¥¶ë‹:ùF»õ¦ÝIÉ}î³19<÷ð^=÷Nd†¡Åšš*‘[.&TÎkD{‘§÷Ü¿foQ9Þ–•ûóµ %"øÃKJ‰£U„ßþü›ióá)Ç…ä\Mûs=f>µmœ¤¬VéˆÝê*k7:"Yv “»C8͸2Â$¬[†ö92‘r‰MÒ[ 9Œ=l„fIz²­Î•ÂV,Ô¾E5Nv—y³\Ú—Z–¤â›4]j×–’×d´3ZÒXÁhÍSXÞu ¡È¦в÷£äz©›.L…CÛÌ­ÿª:­]Xu¨`ã˜=J!{P5"!R aè}Ø9‚ÀL´§²]”D˜Ü‰”ƒø aI£03í)–i* t­"c°÷êôÐpµï×åZºèß<¦ûô3³Ï:5ªKQæÉn3ñ+?Y²* cF–M曚»)UäiÏ`b/ €Ò‚‚pï ´) 0´Wȡ™„©gŠT XX]) «}6U0©ª5d`ð§¢A Dnîj`q %³wì¾|Ñ>’‡5ë-[_žLt|¹Š¸<’Ñ9ÆÉu}VìÃ:¡Y««Mõÿôh7MïÃVæ‘3ú;WŽa¹¥Ý±lÉ]rÊG_UR€¬>eì‘甼¢rüWßülò„œ‡äÂ$RT¤"˜Sb+LÃÆh`ÀÙí*¯Ä–}¤,äÕ ~³ñâæ0Dä•!_‡Yº¾B-„ëlèa§º¥¼C}À5¯Þ 0 lyoÿn?],Ñtl£(2\™'fm‘†}d™Ð±² #‘H 4¶]EªŽ#Õ@6"ꄼ¨tÌ3I,c,µZ÷S ”™éœÅw‚|iS5páDMîŒÇ¡Ü«Qƒ›ó.Fõèj¥Œ ¼LV^cc6!Eå»–ß8ËüËç¿&Á8ÊŽU©_Ùuæå÷Àž¯–=÷öêÕã-ϺÝ^Fq‡yÏ[ÁŽšXÚØqïDT÷‘ÔZO2›_85We_ÕìÜb 2fÇ%‰m[»Às{95NÞuåTÜy´m£,V§òìËL›$›/i³[6¤«É›çs–qâ ‘öÍô¤ßm;¼Žmü’Ú‹‰±÷&aÑlu–íF´ru\ŠÃ–¶½z½zJ—“î²M“¯<Òv73µ-Omyìâ'•¤ôÒVKiÉÒè¸yTyñha]&åA€e4 ìØI[%¯2hÇsÚv1‰„+F_ e:?N]•VèL Áã'WÏ^~Y? w9À{22†ì-r"7§ž<!8Ä!| ¯ µ]A=¹j4Ff"hñE%Xar8¸'®†NNæU~0Þ\]AB*+ÆòÖí¼€DÜÉŒÈs±¸»#æ’UÙ)÷ÆÂž‰ÌH\iTÆ¡ï_e;þúY(Ëú:'yi§§Ë_|Q&žãéÙ×”*èrµ~ |~<~³lÃÌR¯(l—MWƽŠ|òæ wãáëÊf%¸÷;:3#ÆšÒÇÞ…g6"ŸÐlÝÚhûⲘaòø8œm*#ò‘lÅÌl¼™Öd>1OœAÈíöD^O=&·%ªÊLеŽ&´.LõjΉ «ýÅöƒÿðø‘`­uØrZˆê„·¡®$›—C¤]MÇ—6v˜KÑÑÎÆQœ´›‘¸5Ž ï³0 íPñ=Õ"W ìî ÆC1‚[Ÿg‘,[-ØC{‚;1Ja‘ìb&C=]Ñ‘•üõãù{ü´€+ó \CŰ9ÙØ7ûÌ®‡C7ÛtÀmŸ¯c迆9²ßùErà ’Ìª[\HY™@à!ßlzäD~ÙTÝy~;>þð4Ô> qê?`­ìwz&çÇŸLûÎ&²ÔsýþÂVÇY_ò,TœíÔ/Æ¥¥‘.©+ó*\5|i¾`ž–^]íl>%k QxIZÔ|Eu]aW¿Ú= 罩ó«íîw6ÚMy¥¬Y‰‹RñªL½/\«óÜ<»÷ľ¨«$nê˜÷‘úbæ|âîÍ¢{o3‘õç¦óåo$É3šŠ°§V(p¸•e‹‹Ïè’J|IaíG¼¨Õ¢¬dÃ}ØÎaÞv>êÎwu9Íž‡eìd1³åüx]Á´÷”.bÀå8Š2«“ÑvjöâEÇÐL¢Òì¤ 0fç° ¡äÄ™€ïÔ¶Âäø–ú€—üu‡jÜn\Æ_þ`ÅÞ7oÒî!¼ºò;Åtw>¾†#pÓbàCÕÿ­Ó¢ÛÊÎänBlDEÛK~Zo·x½µI$;- 5Ù“¾Ù¾™!v"‹ÍV˜×:M Kå3U1æÕÖn¦:ïòn<Éb澎>_1o&ã‹'¥=> 0.*u%²mÓ›i jª²â¥4‹ÿëåª~ôôûÇÞ%°¿95»Ö³ÊlÕÓ„‚—-ÏW*‰»KÃrŸ_¥&,V£°˜ÙÅxºzxeð:Vùk}i!NçÊ*åÊæ“–¦ºDƒbÑ ŽPl5²L¬‘g²Ì™ÁÈI\¯‘¶“l®ŠÖ½]:u?’œ/?Vv©¹šðéùX|L O–Òø…͉¸ñõ¸/³müÊ ª³ûvJÁàŒR0%¢½Ezš\‚)ÞßGìz‰ß¢ƒCw0A ¡9âMhèÆÿêþîNy ˜×ˆ|OjÇCÖFBj†CÄœÅ*ßüP°¼ ¡š>>ž^4º §D½<ÈË×ëe;ÑÙùQ‚:o¨YWNìáX;ˆ^|ÈeÃ…O&Wž6#‰Ti?êS¼“ ‡¥Ñ¦ Un¬ª8- Ô…±.ì¢Ì9©Çb­›‚6gÿôŸ×õÖø$ë1Q2„2Î^¡¨­§“G*6UU}š]Æpéz⪈¢€õÓŽåòÌKoÛÑŒ_ÿöÿáæéã>®£»• E¨ëzqëŠq§BØš$µù4ví"´ã¼£JÎÕØB´~z´>¶K™,—c‹}óöH<øBŽ[%ëfKúj^SF±‰ -pBH¼Tk\ç¹€'¶fjV(d­M³ZLð@½5?}ή¡òÖºû­-ò®ïbçmä½õÙÝ›~Ûð·€µ(ê{RUbv¬ ¹øLÆ+TuUJYQ5’Z,ð‡Ï7jáⳟ<éÃUÅKž4/hrm=¶¤+4°°Ctwç:ôúæ¦OurÓd]ˆMq5žq‡uÔ¾”ÕÜJò<ÑU.+Þðñn>VÿðG¿Ú<=U !ëf…Rä´Y:´Òž&0 ²&ÅÆãÔrÕó¨å‡ †Xöq±‡ìBm–tûé³ÉGÿøÃãŽâQ܉Lm0þÈ]ØMÈ”‘ó@Ь83­ÖÉɳ SQ¬cu…“¨¹2| 5€A5R)F!HŸ"kYÎÖçBDÙZvfPb-.¢¥1õgl€—­wã=8ÛãÃo­î 7ÈAüä¼%•Þam¼sŸû®ßÿ¥;žwãæà¡¤æ¶;;¡ß<üô—]ŽzÉÊô¸Îý¥Ä§Ï^|uò`‘”smYJ}åÄQ@Ï k®ÏB¨Š¥~K¦ªÄç>^°±CV´æ‚¾Q³@aÛ¨wdÅŸºuõ+„ÄÞ†— 'šýäÿ´ÀÑ=ç´%Ä ©‹N-WÁ¤ƒs«|mbA—3ʺ«¶‘Ù…Û@êkf‘À`´FÇaùüŸWO§ÿôáÃ@ q( Ӓˉ`Ä! ëB 1‹î˜áDT™ƒbe.^$Š«)UîT¹5ny%Ùv#†9‹+‹ÃO÷Úºú@ûg¨A®€ ¹+ ÅÔ‰e#Ô_ÝËO{½ã7¦= Ð;Vé LlÑ[}3ü–„Ò}±ÀÛ—Lˆ·+?o‹Ãb‰®ëT®ó¿)5'ï‘Xà;!m9¼y9 _|AŸ½ª?9)ò&O/üQåNÛáøñÕ‹ÉSýýG!²*Ož]ÉN¨oKˆ#H'%sYJ(îTL6œŠ0[¤2÷u2Œ8i%7ÛXP.⑱¥DuM¹ç´nˆCZ9ª`‹‘«Ä¼5EHÙSpê3%oÖæyʯB]¯äª+ -ËšgÇL\úíf^úÏ_ýëòÑ?þà“À‡™è©8BŸ6ØŒ/ŠDC§0'b+.7• ¢{.¢w*Á+3O U Æ ìhqîƒL‡• ‡  Cä!O5Â…ö,Â4ð'È}8» r)o–ÿ‚¯nê‘®Ãå7Úý;³o »Á]|ÿ“Ê͆B\,„0Ø =Êy/_üëÕÿH—«OõWùòq9uÕxyÌHß{õâÙÇO^]> &¶ÞyZùöñÅÜq‚År&v½,)ˆkŒ‰ÌÎ6/N!tñan³3Ê«XD!.ë@‚ÒMÉQv•GªAÎO—‚Öš.%ûRçh2¯‹µ²u£ÚóMîÃf¶ò12zš-ÙÑ×aMœB¤2¡êƒØù‹×¯þåk+ÿû¿{vulÎZ„]¢gf ;ÁD  ؇•ÀtÓÇÙ]q#BdrW¯ F(˜†Á EC»™›n÷w—gè‹›Üß»\ÍYöì_BHï­«»ƒ%÷Ð÷×;àAo»Ãüƒ;[äA»sÜÛxû½OÙ):e‰áÎdNqáå«6Ÿ¿øéß=¿äGg¡iLÛã©w©l–óÜÌ?¹X®çW¿üéSI«µû¶ÐeçÝHrÞ\~ÕžšS5Ú){ž­˜¨9ÐèŠOûh£$«DB=‡Mc>ÞrQÖ;gZ?ð^×)DXoìý4†ºû`Shùù¯X*êT8ìJàœ‰-TSM±3© \ŸÉ©.!LÑÎBØö;Øo>ûÉÕY¬éÉñß*×±r†‘ƒ Ó† q3!Ù'M å‹?PC9†<4Çàngw¸íÆŠs¸‹ÛÐ8¶Ìפo S–k6ô^ô åzóÁ>yCËf¼…3½_5÷ûE½ýæ½7¸ëã¸çÌC¯EõÁuاž{Q2¸2Ȩòfúå&=<é_Ú㓱•Èënh¯õÈ|súøÍgÿôøUW‘ç78]F!=ÍùÒaçö`&\Ä©ÑF"ºk§Û|¸Å É8z—¸“å›ïM&XiW•¾F¡pÞÎ`Vç ʹ¬&¹„1•qK¿üÏÆbtÃÎÍ‚¦Ö—DàjÔ©7Ø\=âž°^O·TÅDD2&¦Æ.ûççùùËWÉß~0™1²ìf0Wc„z}Ew™D9p:•0Ķƒ ´(JìnCï°¡—«¹k2Ï9pØŒ]}pí{¼ ·{_¯_¯Ñ­uä[«w³¦·C©ï[ùg7‰û÷w¥Óm vzÞ- xû„›Cïæ›pD„k¹›b"¨dÌì4ðƸÏë.úÕÕW‹|2Bp†×ÈZq‰!u»øÞäk~„LÅfiæS’•(…­~0Rå#B•Ðm‚mfUç3/Vhe»R‡VªÝ «Ñœ³ôÁa1y®ºÕ®![ožN« ÛçL0–Ñv^Ãl‘DB3b&·›²‹°œW±mQÉûn^GÂ(F/滯÷웯Þ|púý}9Ò|’*¸©‹Q ’+*;„ `!.*  `Y#39˜@,(>Ô ÀŠ›3‹9”¨bvƒ*;n¥Aÿ»N<¤žÝ¸öÒrO²xX7Ur÷‹º&à>~{ÜgW¾{ú·Y‘÷\s¿tÜß„ïºÖB‡2Ò0¨~¼g\àH?y¶Y~óJO></^Xܹ#7§Žóô×ß|ñQúæ÷OÇãÊN¼-ž)îêQ, qï¨ö,ÑÍ©A_³IÂÎS¹+¬¹µ<;Ê ÔuTU=(w#âÖCÊ2`keGkA™ ¬Çâe¢;F™qŽIœyëI]¦¼*&í¨×Q¨u7ÛT ˆÂÖ³cµ(Ï_}ý’å£ÿùñÄÔ¾Fc …0C@nnð@0e&§@ÃVH˜ ÝPû†0ø0‡-ÍÌ>D|\sfBLÚW$¤&~P·i`fzkQoXuÞZNº]ø½ƒ³hyO¾Æû‘ñ] „Û‚óàîÛîwû·ôØÃ¡fÈý| ðÁÕWáé‘«¤¶ƒIDÔܨ;“}øË/ªñ7_<©vlÛK¶¯F¦$Ý$ ]U•´)øÎÙ·ÇæÀ¬g9Uó<åŠz¿¦jD¢Ó\š]Š…”؈„24)õ¡ó 5)”býx}^ÿê9¶¾m7GÍb»‰âx“ÙfË6"L%Ò²Bµò£€B^*Õm÷ÍëçËËv||üwC™jQß…Ê%½CåÊAåœÂ4P¹ ÙÞJè'p]»1ˆ" z‘ÌÙ!E î!ÙÄŠGw»ö’*‘îl=û¥¹(tët@f¼ÚÝß·úƒéÛÏxÛ{ö]tµ?pêýØ¿-fÝÁ¡Ÿüøe/UJ NsÖTÊV}èáñó;¶ËöÂ#ò¤pðÉéÅ’Q§2”‘”º¨½ÛÅ£DÒ5 ¼yÌõ*-M½™À¹0—PRÐ@0І Ù„©6Ò«~ô pØuâVÛëOØ ãQÞÎÂÈNê DÞCG¾Å¶8_U>ª Óf —ÃòÅæ•_= r†?\ìˆnHuí†Í”àÀÀwf8†¥äÃo×s ”_C¡Šƒ\z›8 ¸”";X` Dl*ä~ÓñæíU½‰¥Ó- úÞ5ŒÁŸ@Lû2áïÔGì;Žoßaÿˆ›¼}è~Áxãk30qåÚÍøçú÷sôÑ4Ä7!¤â“H,7ödûêC›‰^àá*òä¼M»0]Kàõ*wSÊÞ•ÊÐÖ–ÌÂÒÆN½¨s_Mœ`²u lGä–,(:=79z=âÚ À\Ø—óïK'’Å5I’‹ÓEà‘in™*åã ‰`‘„iwqa_>˶^Ó÷Ÿ€§š_>2‚R™{Ò°Or… j4Ó„‡‰¢}×M²ë5Fˆ¬„}",†“3<í}“~¨vŠoçè¼ÏúžÇûgÈ­‡ ÄGzo=úwU±¾õtzëï_h¼cù1™± Ùâ,}Ñýñ¸Ä6ÐrKòcøfùÅE<áÝ•üæÁHxÑâ$˜1ICã®ðFŽ|—¢cä(œÂnÅøáè#—Ed‰€Pì ¼ŒQ”‰aÞNr¡´ÌÕd¤`õ‘Ç(þˆØ¼8Ø7£)¼˜WGNáé.RK™ D°\*µW__âóÒ{òälö…ä²#e0u”„À0c<Ü{ö@° Ý‘<‡àF¹…ï| ¤ƒ…µ)èwUý{[#ÁýÀíyX–Û!¤=f«P!÷çɳï¾Mþ9ã­›ÞF÷P’;ýoŸ}öêûíÿqò#©!ëØ[Br]m~ùM:ûPv±ªSט¾\ŒñÀ$äÚ5(¥ìÂF%ÓÐ]¨ÓºJäœ&kê½ n! ^¶ÜL¹^"Ñ}kæ4«cõ%e1ã fVÊøòMݶH¦í|‚5ÃN…^¸NC)½¹Á%¸}ùóo0›¼Ú¥ÓÇO¹ëªË’P k©û"I‡ ÀÅ}kÀÃ|ÜöE\Ï×õwÛ9î f¿–y›Aç= pÛ€w‡Ûbë¶ðçâì=°ú#ÅâŸöHºñ„bŸü;iý¿üf#/ ñjuñõýè“3ö«—ÁJo^§¹i3jKåÄœ:Ô†èdãˆIŸˆ™.­‰ m¨YÔÚ­O¼‘àF‚¼ò@Á³iÅËÒLF©WªûaÍ'B¼Š¿(§Ð>SòIX+3pSÉ×´K\z¸ýòç_ßÿ×ç»ñì·ÔÐ\+ À¦÷k7U€áÆ,ºÆŽ7{æMGçÛþÐ[ø¹)qcv½#8¾ÛB¼u÷Û÷¸7/èÇ·þÇÚ_ÎÍÝo¦Î…~zö›¿Íη§¾Û…:+ÑÃÿö ¹ïׯãÙ.#/Ö³ù˜Bé²Ïc稔‘.À\¤P0"$‹pÚªH!F"x¶Hî$ÑúêaW³äNx”*›•‡¾m°ü²–Y¨ëNEÈ…á}\qÖ%²ØQº>Ú–õ¯ŠœÊã#úÍý·ÿ޲? NLN@(C›Ê¡juø—ß³ŸÝÑ.n1Þsæ^t±;+öÇ.žnæ7‹E¾¼·?ú_SýÆ­ß± ‰£ãò»‹HX¡×«gú£)< ¢Ó³þâÕ]s–’SJšÐ!¹™Yé+ca‰^r·¢³˜•Õ²2¥H­ÉåÙÈT}è;ÄÔ9L5eW*˜2AdÿÚÐÕºM’ŸJvgG$sóÐ'ñèÅ14à¾új½ÆêßhÙü˜¿ÿq˜%&||þòêìás­lιSmtÏí^Ãéðñ{•ÂM¥/ßýàOo}«á÷àŽCSópÿÉ×oß~ðwBâ_Äò|Ï}ï¹û-º4LÊß"XF0{3ýYü›ˆ‡²|þpùúœ¡ Lc¨—HLCñNvÒºk\ÝEµ:J­7P Pš­[Õ³;4 Ø-g¯ÂÚH´ïj‡,˜Œ‰`šgµ–ñæ¿6 ÿ‡±Ç$”=»s¨Ô¢ƒàzî¯åf—ýôǧ'ÇCs›~"¯~øèK§õ~ÅŒGº£•ø[Ð;Ët›êdÿÊïÜ;‚ÔíÀ¯qWž½Ssr÷ê?æQ%±xg:nçÃ2’3£.â#ñív¾×’­ùè›Þ׋¹øå ›âÒM‰¶ÎnÌ£•m'fè\M5k1/LNg=µ”#;G½˜©¤XiÝ©w5VsëÖ$s2‡µN“'Zrñöê_h›¿Æ@CæNæ9æe×Úùïiý¦G/Çó‡!í•M¡ñf=?yU_mÓm‚ßë™=ü»ïY¬÷™ÿïY»¿´fóö+ýðâ-;@íVû‘÷ÿÿw×½lÞÏþ ]ø@9XAÑýàÑå‘òÞ™S%Xigë×O'î^FìÐÒK ·ÏÂJ2§Ý„œœ<.8vh¹Ø‹ï…‘Ôvæc!Úæ±Z³¨^Î s¦¢YýèdK–Ÿÿz'¿z<>ó£Ç¾ˆ6¯Dbçç«å³—ÝxmãG'Næ• C¾ùÝÓP¿áöþ”÷ƒG þîæøžñžHÏ_lÜ¿õ:OGë·ãNú‡ пìW~h¿ ˜ýŽ-Åoæqxs#o_Ÿ~ðìòòˆMiÈ’Y+.`˜×Jq7š¦¦èF3•q奵4Ø9 íjïÇ}6é|b½ðf/è2Íry A"ì.W³jÇ®VT=M66_~z.[ùE±ŸŒôìÇ@’~ýùyÓ™<¾øè“ê)†Äß—Êb”^•UìV›–Ö¹ò=)3ßa¶þÐ\þU‡k¸×O{°µßóUþÊ¿ ¼3_ïúfïLÇ@LC{ÿ ŸØPã90^O#Ý\>®}àQó¼Èœ¹tÓ)›n»)¬7¬ðöüŒfÔ7RvËJf!T¢[²ÀîVx´Ç*¬¼b*NXll»›Y/ê§TqðKT#jƒ¥.…p2Ÿ^®^GùÚ.OëÕ8¯bå¾øúS}(“˜~úp: CÎ`é%ˆ‚”ùßåóìöâüñtŸÑì ‚ª\· yÇ©ør¯»û=Óÿçíö/îàìÝõûž÷m…P÷Œ?ç«ßç¼õ 7¹ ¡=µ@ Ë<ú@Œ×ç[ nȱl“Ÿö­ŽFìîýk«ªNw"aÖI½ð¹ê¬÷LÓ„¢ºæÀš˜] ­,%‚Y Gèœ;UE6…DMæ9²qñ—…Æãu[A®’ËX?Qû:¼z®áéË%gŠØèãêGßž¬ ûœ~˜œ.tíÍᇨŽk¤k·Á ç×aÜÙ­þô)ÿ#ügßeˆS_x7Ïñ=5p½ñ~8»Þ%R>Ì7o°o9æƒ)æ+Wð@±Ú|þñ‰¹ Ùùeyð –ãâUÕ'©d5A.Å=ôÉ4—´Ë©hÞö¦U)ó ="U—êr:*–É©¹0šWð5±{Z°C¶cA)±r©§2®Û0fÏS*}3)¸ú¨9n>5·îÅó³P…ãÈGa: Á½PpäóÏþã?;ü=kónÝnœ[aýØÏÂÝßàwPÕ¾«§à}Þ’?e¨,Ÿ¯Þ™œ?¸óÅÞÚ§þ2Oÿ–qç rÏ÷Ü”d`º¸³’0 ¡ w8x\?¯ŸŒÍÁLo>½´££f¼¶ FÆr$a[!M ´.aÔV"¾faäž{.ê}Ž:¦ÂÎ=Uhû¦0’e…V!!ëM=T}@D*¾P*UÈùìÄvüt¹ÁÙNç³ {*|ýŸÌ)4¾¥h§öúë¯~˜SpßÀ°ç™>L„áÝJŒ{†ßÍ»uü–e?¶øƒÒýu(~Èãø‹©búW¾÷Ê;18Ú€!¸,^T`TÁpxï iÚl—…Ì$ÀÞ|ÓùÉÖËtLνÊ÷GèÊy=ç\¨{XÇzáØ•:”†tËLµŸ¬}´B¦ Ö‰kÍGÆGSxɘYG[¡ `æ-W#%o¤Ð´ª%€©†~òÕ’>ê~WäøÃ$“ÃàVòÉǯœ{aôùøé…>{ó8‡ŽECõÚ>vNð28Aoˆ&n™E~˜¤[‘“k¤æïÚswªÿ|”JÜí¦o­Û0ê·¯p÷?„¹‘þ@æÍÙï¿îÝOn3ˆî7“Ju0J—)/ýЛ[Mb…’Œ¶_­înj Ÿ}Èå«ßQáÀîŽ$sÙh{vB]Ò”­¬a69U§±ìu=*»U7i¦žÈ‰cv°“‰­pÙU41‘]»µíº˜v ¥[žX.‹7QÇ)ú¶½ÌäóÇåÍüv>Ž|m(“gƒC|üvUŒÆIBEÕwo~v¥ûœwø@¡ Ù÷ t˜ìçÊÜ™¶[ó|hßðŽç~އùþ‹ÚzÄñ¾xÀ;qýþto^Èí/{ýêNwów.»7"wÏð›¿÷ÿ¶ö³J¬Ý®aÈs>ÜÔ‰iþ·Ûéºw¥„víô œ{~˜ØÐ‡…*÷qiñ‘uê:ÏÅ Ì ÑÍÌËØÛDãˆ*²Älš<çPt.oFã–E¼Ä-J­:†‰-PÙn&Ly¬9¥ó .eòðÙì´Þ>ÿѾ·²»Ex7ôL~¶&nÌÑ ô7ë_`÷ùãq„ì;Ô0ön¦æÖ2¼G Ý[_s›\‹½Áê;Øëw'ø=YÜ uÚ ®wãN¾dqJV‚õ6ÆuÉ”;„ý·à¥N4Ò‚°}iþði)!è‡|øaÝ-™¹{{íþ~ˆ®!ƒ¸›,Pc3³"y—à\ž<ýfµÞD¥Þüó Æ}û(ºln]? BÊ£¨Zî=¤˜…°ä‘Ëëª0¡>I­Q¡*Ö1•Šy3I„…‹½ðÐýÅaVµ G?­}ÉÕjj^8Œ®ŽH›æÉâ÷ã'»ßþèá”öñ$ÀÝ£h&xö!õ7'ññ£¯éòê³÷}G܉¼œmˆ7ý¡àÍ~·¤ÃìßúŒÈá÷Äþ oþÛÁ÷v°†\Ûý»»òLËÏ€æiKIB$Ëâí4ª…”¨˜cD—’G"ŒXÐ–š‚¨‚Ñ6$Ù&^+‰˜Ì‚€¼u›f!¶Á¢ê´žHduS;[¡D™´p1Êð[vƒ›øƒÜ5s1‚úPR”LDÉŠSë ¥Íë§3ˆËëñѨ@dÍ"[3j‰Í.&ç¥qw4^Ûz̯»üt«yÜÚJÙZm¦ÌÝ6˜•G0Ð"Z•´'ö-“4Ͻ¡rS ­æÎ7îNd^bbåÓ™}¾zTÓ/?À„r 5bÚÝì"(èé(‰gƒ£'ÃÉßÿ—i»xSM܈]‰ÕÌ™3Ë>`{ÆÞò!`Ï”ï· »e(Ü-œ®½~í×™E÷exÐí?ßaøMËÞ»8“«gŰÑfÁ<]LÔeÍŽ£õóy(6…hÙX¦ 'jdyqì 2CŒT÷î¨=Wc!H"/æðu”ÆMC%‹™AFâ ÁKnc³¹ˆlcG]áò(¨í{mé¨p@1‚O0 PcÚRÞaNÄ„- µË3Þlg½JÆ£•µÆÛú|¹©Ø•¿¹0›µ¶Öa&%ò¤wS,Íz5:Þ9sWrWÌ˸'Y£E-™6„m?m½Á‚’ªjWôJfâ/D¼¯}"¼+½‰«–àFÛÌ!êºu¼/gFÅ‚H(ˆi]Ÿ½¾Ì¯ó §¢‡CÄM™ WçÛê™®ßÐÍžèî ‡‚}ÿ s¿³ÛªÌ5~o{<ö:Þ}Âì¶è;¸Ã1ö|žcÄ·‡€GÀãÃsÀ÷meOã@AFbE݉$X.ÌVÁ‹ùdÁƤ¶V•ÉÊlÈ‘³Í¼ìÄÐÐÆ‹šõg–CXcËÇ›.lP¡Mòn‹-ª}C\w)!ÛËRåÀ:Y‹ ½Z}S'´~µ#ý”)[ØQ#[ÍÖÌf2²b!¢€Û@ AÂd|^2½ž6›Í1Vüൖ_i½[s¿š/ç3#ZøÊ(n +Pn'´xCåÍó3š‡)Ú6·òY8*'2æ uvBmçãË„µ˜”›#áúìù§Úö-;kßg—`5ÌÈ4¨C•ÙÝîÌjNÔF&v8Áâ˜é¾úÍw½¢·Þ¨{ÔÊQŸã­Fê{ÎÑpøÇ¤›»0¾ÚÞ!}Â45ÁÄ …Çœ¡î$äÞ[Cê 3'ö¼ŽT:<>³m R5çbD`ÿê_ž}ðß§Éæ·ÿ©ð¿<òùî*(£ŒË"9™›‘Ü×¼èV£^CªÊzÔQxÉ8¬`=ˆïêWyKäT›/k£ÈØR¨(o' ¡m­&±Êë‰ùxS‘o‚­„ìáv·xÞm«×½½9OÍ• KªôeÆ—õëW¢Ô fÿüýOå²}¼Ù½¤:£Äzm@/G溥i@q¶Î+6«õÿ£î=Û$G’4±×ÌÜÐ)*«ª«ÕÌÎέÞ%y¼[ЇüÂïü¹÷x|ŽGröî¸\1j{ZwU¥ ÀÍ^~@Dd¤¨êj±‚ö!À€»¹i7Kæ˜áÑÝÌKÛr¬;¥Ì‚¦&G‘$"äœSëQ!ÒÁ˜¸ ‘`S&bt5"ú]zŽ}Õg>,÷%©z#²xH‰òž=€Þ€û&­{ûR{ÌÜïTÅ–št¹¯åiÜ&œí+er[Ð…{"Ë =|_âD Õ„$fE >÷€f0ý]ŒŸ>1\§Ñóu‘cqÔÁÔ„…4P<Ôà K)D®«(K]&;–.xÃЪ6m×.s7ìkB#˜\_r–«tMo?ày[Ì Ò"-g§ŠµµÏäU ÆØËªäÕësÄÅÂ]«ôw/gÍèÜ­BN#Y\Ì—^ê¼tÞ­~w2ëÊ—ò7ß”x)…ÎϦWRÊ´Sp$©;,N‹ ÕTu8ªc1Y[õrʲ²'@‰Hè`…6%×YÛX1TD5"™mBµn+"¦(Qd™ál²‡¨H+n&P MYÍȈL±L” šôœGL"óÂG÷£+|‹ ¸G·=Õ;lÀ Úó[â»4‡Å?w)–¹´U¢KÀÃ, ›ZŒ„† D D™ýôs\ W¯==ïK­ ªÊVœ%‹ÎD’“ÐJ”áÑØj>LRiëN|ö$…sè!C{Èu7å‰%6e“º±žþTЦ“¶+þ…]Q5»YeÍæÝ*žå Ÿˆ_?E}i9}ò‹…‹é‹?šÙ\MÕT½[M7à+æ¤c‰\Ùhöùûéèý+-§"'EtÁš´•Ùâ ¶ ½­Ì]¯5Ûõ®3šU¶i —1‘Á•R UÇ¢KÉÍ@ŠÀy’£,ëã…Xˆëõéb²Jµk—3TªÑ†KN©Ò“n-µ«ph¶4Â[N‡f‰ )V"e¬ãĺ&–”$mAþ^xv£oðf#ï]‹ ’ó°FÙÞÆsH÷ÝD`ÄrZ93(`Ë,ÈSzv²üæ'Ýüצϧ¹A7hØ¢Â=+MJˆõybZgÕfUJJŽ5¢´E5JNÈ‹®Ã0 ‘€4  íâô¦U“*/TLS R!t–SÒÑ7I[ù0Öõ`2ì¼~O‚Ù>:ÆÍËåÍñÑàÄeÕe­B;Í~Þ€I%Ê×é8õ9Èì‹üþïÍØºš¨Ù p®ZêÆ’Õ¢%Ê• !ó†µJbéBXV¾)k­2 V#t½@$kY«·’_Ÿž.Ö'\’Í4i¶+ªÐWÄ1‹mæsÓΩˆ¥åK±©ÚÒ´p6¿(™EŸjº”ä–¥ùÿÒ't|`§ý~&à{‚œÜ½òðn¹ÿckÞZ­÷ì¾Äz¿#²„Ä0”NPD²{ËÔïÅ”£÷>ß\=½h—gÇÂÄ™m–^ B’"ĉނAtêEØL$Êå@FI’i¾Z¥† ¸l&EEÙ&xȸq /Ò± 2BcL/Q‰•MÃâH=š´ùÈpÕhÅ‹¯&ÓŸžþöb]J]t€e5 ”ŨԪüûö¾Â»¶Lë ¦¦² ÚQÿa¸•@hŒU·{ÐI ÈÁ* #)"¼Ï!-]R0àn‰`‘*;Ë‚ˆæÔC׉  •¥£%¡Éªó'Ì¢[e ¸ž’­[J—_½1?íG¶½Œ¶—èÜ%¹›ùvÿ¬U´UßÞwlSnoxüy’…¤˜Šd5c‰Ôg¤G_â íìýÏ¿þ½£åEÌ$RtEß\™~¤P‰ ÃM£…, ¢Õä`ò?CÓm^ùä<žÖ¥hèêx ¸lõKf\^ß!QVÒ\YmqÎÓ˜HWdÐÄÍÈhY¿útãùùèç×ß\}~6åbBIzIÐ$ºI! ±~öêog:ƒv0«z—f¡É>®v·:·’„8E ¹w…ö!w‚8ö¿Øæüªˆ¢Ïš'‡üMï: †„ Â2ÃÛC¿Íy½u/B €wúh~Úw†·!ã}!m‹oócIzJ˜ÕöÜý0—LwÀj·M…¡¢ ¡(Q¤ÛNB¿m[Óðɰûâd“µz¯V÷J(³—§^ "‹ËÁ©„jí±!´^v±žäªpqsƬKᓸÈ2‹¦clt  —ÁXئ͖ÏëÓc½ˆŠQ7e„‹Í¬ < LÔ†qí…|½|ª×¿}Õ–ÑPþùâ¯?aP…!VÖf7“¦ÏU9ý³_|þÞÇ`Ð8âõYm\ŽÂ¡ý'ö‹ˆƒB4Û-ÄvI6Nq‰zQxGî<&çГúÀ‰ €¶5¬íò‰î¢õÑcû¾{{Ëݱ¸=óÐÃ~K÷×î²Ê»#pK)!HˆôÆ(×,§Õᥤtü§ÿéú³Oìè}66J¥”©švW‰´MZa$°Ôi±ä£oŠ6ñؘ‡¦\Ííóqn帋R:äa„J ‡ª‹Úe6ÜTFaWÜÚ²ˆI­œ${cd®"kG»šÍoFã<‘ŠïýÑ/¾úÍè8¤€’BA‘è$Q¤¸aðþ7¿|oYÁÇã,sIäX¶ ¸ˆ€ð¾á­D»u t5“C§¦ÜÄ=RØÓ¶q¥÷o˜[¹{$'w]R0îz {Cý€ïoo©zïÍî¶¼MX³{É€Þ/¾¾‡ÃH«>ƒtÐ(UP ]%’¨?øíËi›äÙqÎVÒ&¿‰ó3•nè’Š¨¶AU¡ŸÞø¸Soò(eUÕ£e˼Ű”ÙÆš[À1Õ#\fâ¾pZ°›Àºf1e¼r,gPÌT×”OõèÏÚÿð·ëŸžN'è¨Ô¥°%ËÎõG¿¹¼9©Ñ>ýÑÕÃÍzg’)õNìsP=ª~µöîå¾òæmòô£~g¬lþ<˜ wð ?vÑ®z‚v¿>ú;£ÍßvKŸùóÞkÈÝû¾T"ökø1"¸½·uVëS«IK†g m7X|ÚX©ŸÀNMÒÕÀä*été¾Rcˆ¤U32iR­“@cr™†÷‹ìeØTi¬Ò¥'#Ó µ´dÑ:Ø•fPÕæÁÎ!Gëu=EUà€JO«/ãy¶HãÄËe—:2”TÏ/.óËãÚD“@NKÚÖ‚ fS¤OÏg¹íÚjØ Ž‡Bom=QÊ~HEM4ߎ÷¶¬·ˆ¼+@äÎ ŽÞ º¿ýñÉ=h-¨÷ÐTÅjõãyC¿|«â@àYzSüɽAyX~àQžk,0ée]€ÜoRËQd€³aó“Ù?ü5~ÎçŠÐ4YLjy:iX­_@ME…1Ë‚n°É êC.ꮬ&½R;=%ÚfÓÕÓ:ØnòKLB¥ «Lï\²€øÀ±©:4ÃÁüUœHè¼òÅâ=Pèn•†ÔÑAŸ}xþêkžUvÒ;B4A…ÃQG"ÇGtÒ5c_—Ä;%¡w°Ë¤·.sXð ÙcT÷ƒÉ:4šëíÆüáÄ|ëÕ]Ù7î«û‘áÍøØ{÷ÙÈûàλcuîK’"}ô‰˜Sˆ)!ÚÑ4U+™|p!1øÏÿÛ_œýád¦m>Ñ_¾¯º  eI%rlpsì %çÚZØj3Øp Xt%®ƒì—9ʈ xêdT‰N¬`(:jršFí0žYç·-±+ÅÒ¯¸'DÒ…â$Ä¢æÙ¨¬ŸüÏÏÿÏß”ÑoN>z†€>æ…ƒqí%h]*”úSáâú$lºÊóá&±Næ]eî‹•X$D[©«èeâ×¶©¸«­Â“´õ–Ö³©ŽSñS#d0\­Æ£R‰"~zS¾ZN¾ørð &T ×c@xôa)«©Ø7%Ö'e(ì+ÓÐÇ_¿R÷²­lùæáìIâ½ùCìzùýàöhz‚ö#àÙ·>ø1š´…;¯ÿîtÀnè¶Ñ|.†>ªŽP(=bØgòñGŸ•ëÿ<=Û\}q=Ò¤†„6¤HÚÔÊN(¾”óÒ65–¶pEG)LsKÞ£$ $õì]¡°ZÛjֳΌj1Xvë€Õ§˜b^ùdȱXNBa3Ïna"ˆ¿üå'¿ºyVõq›¤ÁƒêIÈåuÛ¬d:;‹k/Ö†¨;Rð}Éâ¾Òø—¸sJÀ»õáCÎÄ}w0«ão­‡ò#À;àÍá~̃±xŒã>üM@£/ð²»N@{EÌ2{=]ñ쫘¤øÓüë¿xr2šÉæHÑÖâY©UÔ$%ÄH•Ì¡©¬©_]~<Ñ+'“A‹´¹¦4 ¥T–bÐH‚‡FÁ"¥(£Öb´fµ¢¦N±d[}y^ž=­SO`Nÿ²þíÍñÓ*m¦¢! }®*.ºRçoʳÅ.«l?,¢(†÷æ:Âä‘å|od{ÁùÖRtRÞ*u„è´ÕðMvZDZñ»}ç®4Y¨ˆß"%˜ íBÇn˜üê«aÍDÚëÙ¦-VU&P…—ˆn”7bB4Õ@Ózq:èbò¤Ñj¹æ0Ì¡)­t–Ò&Ü’E(P:ˆWMÛŒdøµ§¦ðNW2lE%LâËO¿Jçè»ø™Óc¯¦ÏŽšT½’²©’QÌ&Õ¢©ôšº›FgTß…ìëCîM®»CÉÿVs|—‡¼å–þ’q_ãëŸÏÞòªïèÿÚ'{S·ÜúL…Ûx) N|CÛ_ñìÅŸ¥qW&¨0t'ªb­U—Í b€bp{œ°bÚ4"d3w9Ë]áÒ†›¶LbQ °îp\H³/Ã2±ÁzXK6x˜û ÂOÄ$¾ùíÍiŒb7Êzà:YkFŠhj Ñ©Ö}‰ô$ :ÿZ†ã£}øÔý1»ó¨Ðö.c}ï¶·sïÖwÿ˜·}ýsÓ³|7vÛˆ·Ç·UÊ€[3!?»å®ýÕ'7ÏŸb/b1ÎפÊB±«:g5Ì9­Œ¯Ó“*ÎOgW“Ié*Âëܸ•©¨ ymsúJm9²#EUBè!Z]fæºäpÿǾLuº•Ì}4jgÚ×ÎD×-q&¨@‚’f òÍõqà¦|0°ÚïÇP¿Qü–Ñý^CÿööÜÜÊöðᾺþØަݮâ­<{è ÝŽ&ó:§o>í¦ÿŽœ[ïJ™‰@$© Do²Ä:wÍ1LãÚ,'“ÄA²dX6G¥ ,E£‘ I¡˜cdùõÃ!ëâå×›ç×"fï8'÷me?\ ÿŽðÈ{>šoûŸÇÞ.rÝ»úí²Ù›÷ªêž.¿úD†³“Ó¨ÝTç¦âïЖQ¢ ÍÌ£DíRJSÇÕä©¡Ôu¢™´¥ÈFÛF× Ý _JõžÁ·CôA …Ÿ%%PP²„¨þîJÏFz¶Kk"ùœV/¦1íË R‡„ŠqýË4Õüþ}Åw5úüÖ?üÿ¯|óPWò– %åþ:üäÿ.OÒéŸÌ„P/¡A”^ºH#‹B5mMïb)¹®DYF6ÐÒyÊ­×à'C¦ã´–¬+sÑH±˜"ÚÀiZ“²ÐÈÂyÎ !ÒëóIí›ã“ŸÐÅ¥·¶Ö¥ó/gOfʽ•FÖËÙÉ¿®ÿá«ñ»¹z~xGcÒ»Ãà±}(?è)olüÐÞüÝÚ߇¸Ý°rÐxoÖ¦l‹"RªÑ¢ E¦Ôˆ&²™°m]”Š›mlqø|1é$k³:¢$úJs[‹4íx^*v£è(3e‘d«Qµ’º#×ùò”EÂ5w.›ßLí}ˆ"ºXÑÛA2S©rùü¶æ×üêòFæäÖl<½Kĵ,#-üè/þ`ö.ƒò8üó AùËþmèòøµGâëÞ·l„}ú»ÁrXÌ!úíþh¾ŽÑàõ‘ã|V›5"ZZH-7ó™ ƒìâåe«–8F0<êåZk¤<¹è–ç›÷sXÙ‚y:'–e £U¥)]E«OZŸ®:JM7‘|r³Ð鬒m®¥ÅÜç/TØW9‘ªZÏõæôðCšO7?™f9ˆÃlÔ~TúщØ,‡ýtýãñÍÇq·õ Òóíy–vpØ£îÓwíÓ•pkžÝzÙ`0âWŸÄYÌŽla“$Ï£†x¥CéêèîrZSt±’G‰Z¢IV8!¼•Ü´–ºÁ5›Õ“uÀcVe  _ÏqŠùûOv!£”æH›®NQ@•ªºpýÉSô¡Ôí«ßuƒänËözzñE·Þr÷k¿y:;Œþü'€ýQiyÔÿÿÑžr§1q/Üîí@`[”ô;µ¸ïæî”àÖŠDRÎÿK×?z6Œc#ÈËY-*tWamj…™mÛ%gÅrÙ$#5Â`ÌiUYfú°—Arú¨q«Ú d Ú<ÃÃOG `8—Ê9t.7‹™jRÑõ(â£ß" Bòåçç×—ƒ$AkÚ…—âÂóp§®=¤9»ûClaÿ˜„lÛý÷ ¿©ßƒ÷Þ«·3ÊïÖõ=¡kûâÖs1ÏÝ_!D#«épsüǦ9À«v8ð°U®˨·QH©rR]md–®6Ñ„%úºÊŽMŒ£"›fb~çØæ´b¯UTËTI‡¶É²i9 ¯O¢ •¤7—'éçÇU?$¢ÑÓôÑDCM(é¾píÊnËÒzvô(½Ýû/ –gýÿGëս˫ïÙâ!ä¾*$xÙ!ª‚·1éÛÚðîõ3ïG¯ìn#cÛè5ƒ ö[Úƒ»M ¡Ý¯Wipý'#ÄüD轜ÍJT~q ¨ÀK«š+"‚1m8ˆIM­Ýs¬3#¡’x}’(ìàëAWKUJåÝ&ó³³áQQÛ$Ñ b׊ÂÃr´Ýo¾ðãj¶[ËùòjtvR "¢- Øí­eëT$BG´ïom}dnÿ1±´y,¿wÞåCö‰Oï¤å-Ñ9@Úûpë†cßUïW¸ìðÒö€ýÎ'UúgàañÐ@ôá¦=ÂïxçËßøÑ²j‹v‰™¯WœQâ|&ÌkÔ4¬ «!¯hóÓ©I ZJt®ãäÍÈdUÍåúèD™7É «A·d GjHÏMJQ†„T.m@d¸’5²”׋ÅõûÓ­µ/âêsäùüçcŠ +¯ž™¾Çï‡#ÿ4¼7Úô=#äGe„ 5Y¢'јÍd1³NB²xPÙŒ ÈÙDY ,«I\ ˜MÊ \¯‹€ŽÚÒ‚e-Í(TÛH•±s¹‘‘º“¡PÃ# a& 1-.²Þ¤QÛ‘¥Dš¨‚ ç3Õ–ŽiDé<´¦h0h²R¥1GR{õ«Í -Ï?n%—¢Fø8±óË4ÖVSŸ²I  ›^ŸÚB—’jq.f’\K[o4úÔ¹ÍQGYñÌ “ׂZ aW_óXºÌî†'Ñ1Ôê0 \vV!V¯šnŠºCHn–íbÊéñ°ú·ù (zõêÌl!_œ7«;¤ìáÚØ>D·#Í­àòýUˆwFK­.{uó¾ ¯L$:îÌÙ祴ÇãÆ|z.Í)/C‡m$ij¼Ž³Br¥1! Mü”kÇ͈ÓüÊŸ¼-…O,!@9rÕ—ÇiW-ALå NÒ¬p\•T³E¼kÇPÀ TÌ©¼f¦¬ó²æjq-U²X‰/Õf².nÂM®?ýˆ·a7¥ËãeYwã¿VyydíJ§ÚQX,Íý›*Ì„1Å®féʽl‚°µ¯Ï»ÕÓ€êkߨÊoJÛ=ᛸcÀ0@U䦪³©Šv¡Q@ù§/¥®Ÿ¤B½‹›WÃAòç#¡û`'ÔF:ÂX¼^zQlÞuúäQ5jçùÿžHrЀû¢Ÿ“„{ˆû@"À`‹3IÑ0謢¥cˆÅâÑÅpŒËO%±}ÑR]…´œÛxW×ã ½ö“×W %yzž²³Ö…¨˜­å´ñ#A“3½±a\;+;QrymuXR®-%R)%CÕ‰¦Áõ2§ãW¥i©Ëù«MÚ8®ÿêE‡³•LÊÊÓ•±¬‡¼ˆ‰ ø$“á²+…¡¤Ùï0F¬«ÐY/Õaª_vz‘‹)m=ß$¹±ËºZ¨F;X`9B&Aç«)’®®êmÓ}ñÿÊÙàãcfSÕüÙ/ðñP“¥²0]© $Bør®Ã"Š›‘óOí¸GÂö¦7àÊ¢~ Ž:qcèA»’øˆSØ{™ßÛ^ö¹í 0ú€)AEîV©y+2\,k×Ñ)aeã&A5® ²‹8i ÷‘„GDJ銤”®í$Êy;®â>ülzz… w”k-}áÞRWh`åú¿„<)˜òu®ÒŠCŠx™ ;o4U ÓhÊìæc8J#³&):ç±|ÃT³åµÈd•ä¥eŸŸ"ÐvÞŠgºÊëµ¥úFŽ×õ:mÖÁ©6˵ÆMsõw¯ÇöñlŒ•S§Ñù¯gji8˜—¦KSÕ¬k˜6ì|u“$&~ù5N:w±¾Ž °ÏhŒS:¶Å¬vùÝÉ[÷@»UÖt<ö _ºˆ{yì¤<øñ´ ß2ç»xõ¶ý¤‡ÉŽlwì£ðnÈ­2Õû3²u8TvŠjШ»!Lz#Ä$‚ª¨uAVâðNTFùE“vL`:§Ó´I]GÞ|6ýû_ZúËŸÙ/??þãÔñ¼%×i<¸Ò›Ib“WáyŠeٌϋ0,´z)s¼RÃ…Yœ³Å'RœÝF„5Î6ålyÓ£œ­U<Ö˜ª^¦”+¼:YŽ>kwÍõ'¥éü9UÖŸÈš×:¸Nz2– eÅ××eruÅÑê¢ÚH>ý<ÛÕPÍp—*3¢7 š± !4±KºQƒGªJXR¥CK‰GÀ@÷¶TÔ±w1 Å‹   …ÃWÏí¸í¡eâÀʾ=$w©¬äSþδòÒ:“ÜZ³“XoØaw;søA‡V¤}L†RTú²N†ÞeÈÞžÿÚß›ÿ»—ƒÿí ~ú›ôÑ‹çz!€ó„«©.b®'ÆVàXJªR×Yq£Qꉜ ¨_räë³QÌÓˆ6R”® Åtq! 89ol \`â±^ ÅæúUñ›“Ó*Õ>±åUœ¬ ù0^-§*ë*³pFäÚ_¶bO*Dtжqqu”Ÿ¤Z¥˜ÊÂÂ=†ÞÅHTÜm˜Ó%GÑQ‡Ãe™LØ 7~4*iX+ZÇPG-…ˆ–Yj%‡($HhRŠEÀ«QE×ÅH4¶†!Q!µÇæ .P´ƒý,04Z© ]Ѫ[S*ˆ›˜Ùp׎óê»8ôÈé[<ã.cŸr Ám:—»Å4¸óñ=²xvT}ë½Ëpè €S•`ÐúüÈ ¯ÿóìEþ?þCKýè«Ï_¥ÿúç\žºÊB‘PiA«gÇ@¨Æ9FC¸ÃÀ„5afl!¥“$ç壌Ƣt0«´u§™„ÓI¬TÕƒŽ©r=Ïìü“¿aÒ§?<‚¡kšQ,¾¼LZumU­.Ÿ$q2™¥Eñ¯/ÓÏ*6-RoÊ_~ñ_ýIs"7fY6@xA‚‡C®DDMÚX°#,›N=b•XFXLq½Ñ5ĬÑé•KUUúJ«ÂÍÁ–Obê±FY¬R.S$ie#3ÎÅi Ôa }"È­ RŽ®´Ê‹z¤«±†À§X%µp•™¢É0æŠñÖ?î]gwùfð]c7E™ý¯¿ ÷I*y—$Ýñ&ô™}ä¯?t2ÝWíû’®BÒ½6 H(:Cm²wL[‘K‡NÓŸóן“ëÙoÞKU°Ãr¦uC’j{3A€N”A2hˆ°¸–æTSh§9;c&æ¥+Ò´%ž DS’BeÓ›¡%t:Ÿ­LSB«5|r‰:Õ/N—³1\F$ÐLç2 ϳ¢„YøDÚç_óÅ  ¡ê”ùš£?øC¡É†píʼn>D¼¸$ìBÙç2¢e‰§ ó”  3›æ]HU»ŠÇÒv]oR Û"©¶×È¢“ð('¦Šh}@F»À…“ZšG–B;þÚÏCeŠ/Sµ ¬“¢$u¿™Š+‘U¤ÃÿúâÙ}jöíá:o!÷¼Ð¬¯ú¸Ïgù":Í[z¤ãmž²ó*SH Š(Ãeˆ {Q)¶÷I1⪾úòýÿ ÿÝËîo/^úñ[‰d”82uRŒ]ä¶Ö(C_‹Uæ%G¸Çæ8­ëµ™Ž”.j›ç%o‹vÌ­šD³^žm²±#¯'V0Dä„üê<0Œ:§ã.,õ *u8@\fx$í¶-JEÀ[NBµŒ×ÕÉ`Ö>.e+ ÷µF!Aݳ'ERzV÷„BžQNº·|?Ýñ–èê.BÄ¡"T ·Ã¾f®÷>Ѿ2FLèÛè °}òd4o»¾o†x[f„§—Ÿžh¹W5û2@¯X>NþÞ(éœ[7L¯gªÒûB“¢$ d'AÅS%Œõ%xÞ¾71.¾ñAó%žNj5¨ŠÍ³AògO%;—>žÔ‰c–DÑV£r† ”Œ…b–SF%µ1Uór”´:gÒUòh0m9pÇhž¤",B$Žêêòëó¿/g×l7ÅT°ø²ýxD¡\¼üykÆ€JB7MtÑ„!7í׿ÿ|¼MÛ~ωÎ},ä#<õ;ÁÎ:ðSúq@¸-ïôÏÞöÄÇ•„ýeëíwAI²S5‰ˆtH/(úÃí1cï4‰¾Þn{“µmõgqI:@Q#W"ˆÒy¾º:þÙûË/ô—ÝÑpX]Ÿ®S–¶^e“¹µ]Lž±;•H+BP’)¨ˆå±^##šAº©¢õq×!iã³VÓFFËÕd ¥î¤›7 p=|2}ýâ釿h´ËdD÷Í72J)›Ó*DvØKaB^|5ý蘖 ÞPÔoÁ»gí»çím»üžÐÕ~ì¸ Y5òÍíBß¼eÓ<øàí±8(³(°G¶Q÷W¶Ï~Àƒ¹£ï}¨ÌÞQ"€©Â¶J@{Ê)J$ iº…MNŽM_ÿ:ìâjòôƒ¼IÉ[³E3\.4ÝLêM¡(Sò‚ T¼£»|Ï¢R •öRž¤è6Ÿ®Œ%1›™®ÖGÌ%Ò|rµàr’ª0¶òÅñâêèä¿ÿ7“Á±¬¯ÝT/æ×éD±ò™õäÞj\,ŽE.k¤J~iƒ*FHÏeûÜ£&Þä×<Ä{°·d*à»ý•ßBa¾ ·¿§H¼9 àîŠ7Ф­È(ÊãàÄþ¾GE>\®è5$ IÑ `_‹*íR”-žîH’v¡™â7ëaõË2ûÙ‰4<ö(cŠýÆ«ãxU€K–ÖRZ™½ Á¡Ðé2lt>¦9µŠVòfX¢#r`˜­Ûz4'袻Î/Ž’~á§O³x×t²å[BÑ(ëgg^Öž3€±À”“ûÿw3|¯} Ü“†öÙ¥‰­[rw+ìLãÙw]àõCþ–,í_|{'︡ë.ï! ÷º;@Óeô¶ß>f¸ÝaÈB $$x9à\^Xž¿ÿ_óýòf𕬛¶™¦ºÛdK©Õ*ÝõªÚŒÖÌB&&ˆ%*ÑO 4Y(ï4:Hk›fÚ™-,™.“ ÖJ¶9D¯7q¢©3z¬^æñ0e]:;•Œôº;6¶‹Ñ[~ò¢ÒÅgÏ?¨*éfSoÑc‹‘»Ï£i„îØÃnßBîp‰±¶C¿}ÈÚ']Ô¹8oVÍP ç7>Ü­ÏtÞ¾8‡ìÆåmðVüÛ¯cÁCzñÃ!êîQùì»ê›²kÎ[“Èã="Ò~{å[õœýYI{«"{R§„³W/a3’ôµêàÔDaPƒÒŠã§UÎ6¾y)£gï§îÈÜ•Ü#ÚJ“hæµÊæì¢H«›AÅHZŠêÐ €nS¨K´ÑÉR¤J×@‡º õè*=¾^ÔâfÒ¬¥ói‡Š®¶IJùåƒ÷ÿü‰úzYpd!¯ü¨Î;-GAÎOΔ£“ÕòH²ñ”Žv{ÕïIˆyˆ#?¾“Mã;Á^ÀyS¾ ½¦wÿä–’uîÅõ‡°Ç?x¨ <º m»rx+{Z¯ Dhè³5ÐÁV‹ h KÌ+sפ€ž-ítë܇Š?øW§NE7kÂUšŽ “ES4b“Ê&ºz3”îÈPLZ¯5:$ p5 ¯åR:A§èòª‹¬W#uÑ1h«µA“Îu8—QÊDên,›´6@}þ»Wg(¼üê—'ÃÜm¾šNR/Hn Ô¢NQšEŸìdó[{¶öl×tkú:œ ýĽ×=Ð<ßßeë“úŽ|óVtgìÌ÷÷Þö@\;°Þ‰éx¬Ùá·‚ýáR£Cð0=lßû«`+Bwˆ LT\5ί²?›–±†e³§'Ѧl•Šu©SÓªêÇÍ“A+ÃV&µžj)©4!p±wQÁIg¡WG¦šÙTµG§)…Ó‚ÅâtinUÍ®êÊËNcb£mû7¯ìÅC€|1>>JòzýÑ$˾:¥Þø“äݦ~6Òú¼ÔÏGjY DLâ°ªÑ÷²zî›þ€Öß á«'ýÑ;óM¹Ãäútý=UŠØm˜Äd¢ì‰ÝVbÛW•8ìu÷dÞ¸à^´JîuK@H¼hÚ:n‚ð®¦Ö`Q¢øä¦ÍÉë5ޝo’þ?ÍOO«*£³šÉÒr¥BÓÅpÕåIŽâ>tog"ŽFS§°vm“¼ÉuçôIÖº%»Ê£s"y=XòñÜ+Sx‡z࢑[vÓ ½]øÛ›>IÂËæ¤}:ñ²xVUÊ ŽØ›_^-Þóuù¢›ö ÍÍeú£ß{ƒ*)ÀM-EÙ䇾 òޏýHØvçMtµKâü&}ó1–} þÜJûx³Kt·Ïò€Â‰è ßúe!·1ô®1 ¶•Ø@ê68—N1ƒŠD¤Þs€¤›Ë+u›ÔÆçqôoO>ûÝxÄ9 Ûâ‘›f†¶ òæHeäSÁW8Û,—'I)‹Im ¦i}mF%[)›ù©T êõÎ&¡.yîy}Ê®LéÉ,e çuq4œ(I`›¦NzEÎÄÅz¯mæ_ `ˆÑ¸N„póÊ'qèd:\âtO¢=Ù¿]ÚÜßs;Ioš°™|÷ü!¤bl ^ÍÍãr›Úù]:“•úú|¼!ºé}-eÒd«1=òE{ÇJ¿ÅW`¸~—´µËöq`¾c¨†‹ºHT@CÐ!ñåëF›iÍ,/¿ŒžŸûY~Bµ¤—šçRn~"A6Ón:ÙŒCV”l'UòÒæ6'È\–ÈAŶÎp-vRÕX…AMHdZH½ä¨ÊJ¤+@º™ Ôå²ÅôãÉСŒvñ †)i‚ QÑ ¡\›äõ†Ý¢ÉiŸÅj7’=z¨©<Ħ7eÁy#¥Û»\~dÆy‡ÝÓ7ÖÝ©¿ÅÓµ5øšdv»v9掯Þm;žÑ3Õ}U\ö!fûdƽø/ʼ«4vÀbUú­h ¢¦‚(ÈìJIóÙó“¡ÂKsùú“ÿ4}zY(µEj?û@í Öù´c-6IˆìuD—ÆË”Œ1²eóÅC’¨¨¯´Vµ&+qew1«ƒš¼n¸^eoæerztl¡–×/gCtçé}é›&„èOžèª^›/ÃëI~ž­/rgê3ðVØâŸð,¶ŠÅwÅ•G|'4¼+…Kµe9÷ðì~xÀ㬟·»d¶›Ê÷äú`ÝÝsbm«àDIò–Ù>æ^ØsÕ­x>$Ø–Él÷Z±ÛÒ~¶YSÛqL’¨A¦õërϤ›±›þáåË&¿íHE_Ž}´aÅæx%ïAtÕ ¥^ˆ%Ê 5)Ã(>oT£dÉ6 xŒ+Äõæ#­“vaYwb_œBÖ̹Z\œØo>­¦O§¤êÍëËÑOP¼TM‡D¯^ Çèùʤ`q®_ʇ“}ŠæB0üNÙ›àÎ>rûC=íðy?|ù´?¸‡gíàî;ñÎíàýérç Ø•Á¾äö®Üb‘í™á£ß»E¨¹ºËé}Û`©@ÐKÖ j¤ÐEY\'vgÓ™Ò¿^ÿÇóã¿|¯³Ü]Y] Óuª!¶LSΓ™ 'ÊÖBéZ6Vå¢\ävºQ¤8±å|æP—!e$–WUU:)©Ó48ßTuÍM9¡P€Píf¨^ýêüýŸ?Ëᑬ½ž•ÑÓƒ§9`PYTôbótÒ­íl34ß\tõOŸÝŸö»î¬É[Yî;ž¾Ý]7ß¶KFyϪ·±Í»dœÑ—Y»W Fª]å®@¿Šö-‘!{An{†;äÕÞê$TCÏD(áHºP* ¢‚€ÎWÕ¼ª¬ŠÓÿæòo§ƒÄnåjÙ¸¬—U9·t¦q†ú%ERڤ̫5)AF;Ûl8 æúµ„ÃÊyÈ mBîTÂéD°¶äR¯¢„Âëyu#¨,^ÇðãZ;GRTë×Ëõ˜1© R“xrñ•žÀ€ŽÿwoúdÇ‘ä‰ýÜ="óݯTAM6»ggvMšY“vmÍ$™éÏÖÙšiL×îìh†ÓÓÙM$Ž:_½;3ÃÝõ!ß]¯€²ÿÔË#22ÒÃï#;æÏ.òGÝe÷…é–á쵈²Í7Þ^»ÿ{ŸŒy¿¾¹]€sçA;,Uçe o¯/®ÞëÞ`R(j 8²„ FA¢ubáYª!£Û® ª4ÐxŒOà/ϽÙA€q.Ж6Ú­VÈçóKnQ«ˆ1«bÞÈCˆÎdUrO³¼Q…<ÆÌšZŽfsa’¨Fóy/¢ªf­.Ö!".'˜¹V.8lŒ%`q­bî)sžgYs1ïUafšÊƒ˜ŠI»ænk´â{îÄØŒß¨W—îÁw/q¬îr÷]Ú°çЛ†¿=[&m×¥Ò7˜Ï6¶ÖÖ¡v·÷—//XÞMXn¯üèØ«Ó’-«Õni\Ij{¹V#;Ü]SNf†—âÆpÊØºív;P™œÇË‹ÔkŒ») ™ ¨[š:¸ì½hÄ2e½i[B#xäêjˆ†¹°£ DÌZ0”B»Lý¡KNn ¡†¨¥yÑUW `Îg© @s'¨(àN³«á°g^’°'b'’ŽÒ#o9q8³ž£š¢ßΛîà-÷Ú¢4Á†n¸+cÜ–"öÚS³ùy6~Ý:tOØü˜$ØÇ7i¼Y¬þÏpÔeQ÷~×ñ~Ker'ªíg+÷»/dÍ)X¼Î‰¢åÔßfLDPp°O($Yq58;M-1½¾àa×>þÀgócϧ­ë ­|š¥ç†åU™G„ös£SH¦$퉗”‡ŒTÆ1Ýô#n¸VÅÂòTjK|xŠ,å-C°JX–¢ŽÒ)Á_UÚ—[©V{øþÒXºq`Y˜€W9s¾e–¾•ªãƒl e¾)•úzvõ }ëîå¬Íy¡Ž.½^OáPDDLn€LÏSÙÑ#ã^ùì³Ï{vVI[›³ÒHJdÖÑŒDòD\5PdÒrÎ ³!Š ˜%rëx‘µ)µÉ1À‘¹“èäæˆM=Hô⑼ŒÂŠ<3Äè]¿8›eW7nLžh8îíøÑMùö#kËüÚB€›²¨šV“P‡R b¸x;4Öë¢?Lµv‹jo>p½ v°Ì´~k'²¹ÌÉ…X…7góZÌsK/B£›¥ æ7Ϧþ÷ƒh Zy{(EçRz©|¨$󌲔ÓLÎO D“yÙ‰»ñظ™Š6SÙuT8t4Ê Þ`Â+ÍÈò‘»»0Ørú´z¼œt§XŒ¥÷4,¬ÚwÂôUˆ99ñ¡°ÙÍåÜËVk]øl#” jsåë¿ôåo]O«Š¦o ›w¨,¶ûØôPUM˜ÌFK dfÌMdêbB•”Ý$íÓOÞšÃ*Ë%„ŒS 2Ë LÍ)‹,U•‘i‘±[2i©àÞ€{rvñPí­p,жO ‘I‚;TçmO Áɬnt^‚ELÎ88²tý°ì8ñäËß„Ç|ôaDàè…eYÙ5 ’‚’Ïç§îYYÙè¨uàƒpEž3[!ìx*½´–׉ð€B¤55ÜÜ(ÓfOC°„@ĪÃÙ3²^óè²U…šÈÏ3ʤa¼°õxrÌsɃ•AÀƒË§*G_5cžVÒ |³\’÷Hä½-Ví¿åµI»ÊÆÝÞuØ÷æ SÖøÃx¢ªÇT†‘Dö&³z€1Q{œ‡õtÒl³eL"ì3r‰Q¸ôÒ4‘„‰–…r'‚½cUiHÇ7àj#ôºN±J s4ŒyÒŸðy?çÊ}œkRaذzئ¡h’§Š„À%Œ<5“æq–{Y$ÎÀæI˜:;˜Ò¬r‰™Ý8y?Y!xñʳOÙ!ÆR̤¥‹³)¹Ù5LãT&;Ў̾û(O 8´Cl¼pb•lž\¦ænVP>s; åæm·i& 5mX£$†'M»˜¯ZÍ,B¥”ˆS‰®#g"x)H óÔíhÕÖPïø·°Û¯%’wƒ×‹o÷_†9îà™¤®œsXùu³TtRet"“Êó²Bê'1ùÉyàÍ£3¿€F!¶’v0¡£ÂÕºA€™œžy”9·Ë*„CC઄8œ¬?™¢UQh•L5ù‘ œ§l®˜É$!R7æUÆRb& ¿ÑÎL¬¬¸ÅÄaÊCoj Hµ‹™q;%Æè›3~Ø·IÕÌgÿðMç¯ÿ:››:ܸàAûÙÃdsrš„|šÌg&7Ï;GIç4h²ë\ÜŠ)GS²›—ÇqLãäì )e/Ç 0œÍ˜QÊM!2‹Á™T)‡'dÒË›o>vxølÆŸd \ÛÀ@¡L3:È c‚ù«ªëÄËL§Zóe饥ðÿ¾àî"kïô˧‹Ÿ; EëiE™‘™£E©2b 2ö’7!4},)…œÕ\g”‰Ð“ lÅŠxVHFU ,JžûlÔ¬†#õF˜Æ,Œ+Ïò É¬èTÍ\&S«”脪Ê}Áß~÷ÆÒ”à㩦®SàDrÓ²*ùI¸ˆ’!MR'ˆgà›¶—ÚÓ£ rs”3ë|ÕR¯¾¼ìæAü¢ªô0£‹^5¸þY¸®J7×V*ƒ'ÍTŒ¼…x²’Ì%T•O¹Í©G¯Š|¬~a$MМ$‡ W#j$‘©7Y§‹LZQŒ^š%dšˆÒ¼KãÒ{b ã"ãîAï ™Nì3Ûܼ9O“ǪŒ'±miNðbªrz0Ëâù{ÚÙÙ µÁÓ3²‹è’¹ÿVYÿ>³–M#9qï¬á©ú*JÑyQZôgÚ³Qû C„|Λåà\/úÓ‘~×–0¶BÏ©ôl¼ðHæÉƒ¤ >Ê1ï5Ê™_ZŸÂ¼bjÇöËÙóS†ùÍ<>2¨‚'¡êË«Ç1±[Ý®½&g*#ïu ¦æQ ž àUFì.ñu¨±Ò£ü´4wlÜú~I%•¼ ¿ÜVö®‹G÷yÒíWx+ùamþØ ¾¤…õu“ÀÍ7±:ÿ“ˆÈRe9=9“¸£J cw‰cRq/ñùÿ1õQ{vuxóŸÇÇwÕ™¹¬—ÊrNÜ ãYˆÕ<™H»©×"C‰aÌeÅ JíÀe Tù¼¬,ä–Ì’ç­YSÇ .êÚ±Þ#T&’¬=O gè¬@ÌôçfÉμñËгômQõŸ6*„&Íz@JQ_Œ>ô>àÆóa»3>¥ÆÃO2¦`I˜„ª$Ñë b'›Å`”I¬´¼.^)¤&â¦u@ƒÁmiÌv§T"d`3æEê!Á„á¾pq몶âëÅþ­s»¤sÛnºBY¿I‹V;v,Û`;nhcü- ÿú²¥ÓhË’Á ̬}õ?µÆ_÷À‹ârDLB£~Ä¢Šg+VÒàFäDˆQãƒ_ð0 Êìã/¤R%lt;K%j³™‰eÈVp(æ-G8PU ²y9«ˆ{š|D!À*„Yå¥çÂBZNŒ£ØŒ{>ÆÇA˜ÍI”±[+ÄÈÉX3§Â‘±um×F€#pÊ8 {…@ðT²˜rÔcÉ‚^]v5B`£›¢AMN¥RAÓtœæú¤©ìúßÎãÏOäúð7§ÿæTHH™\‘MGÜŽ™¤ÊÉæÔ¤ëÿÚí Æ?ÐDËHY>¾ä´JÐfÑV‡9 âCÊÁZ&3ƒSœ†ÑT^qP»Êù ]•ÃèÄÝóÙñÐ,PÊÂ¥µ†Ç#w—©7éç­&$!Ịݣ*Ë®N¾¾låÍ|~¾ ´áü¬Q̈"u4Òfji—fÜA"ÚOÿéü¤‘;Á-¨¡ê“›F…IhF¶™I°IéUƒ\²aé†z39‹¸O#³V±)‘—j}"˜©ITõÌÄSåpT³U¥EÍý擜æçß5òÅ…òE@uuduˆõE\z5Ñîñ±ñÖBÕ-œmkidëûÜ û*|.%f –”±(ôÁ˽ª·0ÀX¢3/±eCººƒÿ€w …ÿ€IDATû¶À<ó7Ø‘ßh"\Ç›;¨î¦ ÎuÚŸ{ªµ´…ê =•V´tÃl¸â÷je¹dzzò}üúˆÍ<9PÌ’p>Îb0ʦÄË‚=P.s™7èM‹rv‡³krÌÈ©sÕJ‘,dà4I ÈH"1!^õĈÀ ­›1ÁôüÛÐ;:r?y„iÁâUg¤÷«D³›ÙwêŸíåqZÄIÑ6f½yßd}Ï&ß-pBXbÌŽ|V­*³Ü1¢‘c_ÕŸ­5p^ÅØÞNûzÝjÝ…ÎK5Ü­ÎJà‰¥žÓêNŽ’2Ç®`òEÕ?`S¤)#›díÊ6“ÏÕRrï‡@ *ËÀìš`¢rwP4­šÌ‰½44áJ-¸©G3as㦸;ÁÔ@T˜¤áwƒÞéCO³¹ûQà•ùG®¹GB˜„yù÷³,k-Ó· Þ¨¾,ÅôîFÕâbÿÁ@Nì囤îÄö=rÕéZØVC×2ÖŠä,¹Â3Þ6ÞAé·ÓÖ>?w¡ºtÚfšBÖ›tàÿ2ýßÇý!ƒˆ¸¼…©¦ œIHÕþÓyjÏØ©íB}–2Ó*z8dÕ,’&jaöÄNæ”@îLgæuAvµËgƒêè0‡ž}5«d•ºï©ºú€‚¸×€>/gÿèÒÊÛ«êzZÔÜZ‚ŸOÞ4,ßxÏ4—·óžm÷•ØD³EºÒF)3,åô;†Ú¦çÛür lÊL6›Úº¡š@•Á0Ö. ŒúŸ~û»ïr†š°»7œ™Ã02æ<ÓYj9¼2ã,«ÁLȸQ0ˆãШKS‚2Ä* ,𦀲¹¡˜PÒªê€2ˆ“.gÿxíŸÖHì®»FÕP—ºú¥Bà*Fщ(X5Cgê´ýõÃHÃi^ŠXYFiLJ \MáM6*¨•1È+˜Á¹9¼i6—,^´ºd&EtCθ†˜ˆiu¼Ðt+‹¼<ûíøèAŸ¢ÑJ\¼—U ´öTÎg¡:þó“U0úZ€§õò¼+-ûii!9<¿#Aà¾^ûÛJèâºö{‹3îþ¿þ{ y—ÿÈêêðuq'¨Ô)P$îLuºÄ™L98Á{ý|2@ù\þ§@¥v}&Mhm³e¯Ç*˜M2\zÌ´ŽÖ‘•êUPÊÁÄHGÌ„YOÕ']b¯Ì0§¶[«š¸Xó*:ŒBUt`æÓ¯¾æÔøìˆMÓ¸lFaZ÷ÊÔÌ H.³a™¦½~uù³œ6^úŽuýs {ñ òºt>,¹â•¶7ݖ¼mÁº*ƾÊ!·}¸{¨žÑ²Æ‚-ê›;1ÈÌ!ŽudóÂæa!–ÁÈ›ñúw•8ûü‰ç·–˜Z44ëTÜ(Å0-E[9Cç<'¨³¹9[i9ƒsSKÚe²º®?E¤v†”lŒ#o¢@˜_öswBq}ñjX ¦+š´Ä­¾5/rBÓ@€k’ø/h”—ýVcwß-„3Ã~GÍ›`ó‹ü1 \FeîгM÷æ>sê뤬ژºèïM¿”¿éMw.ÙñË.~Ը崌[¯-˜p#]z…Q†:_Ý,±„Ÿ~÷âA.Ó±ScA°I¨… ¦ÊàÊ~3裡å,eDš‘“ûà €(ΩɄqˆR¦6rp"v.È’æ!N2JΞªò0góQ£S¤Ro^ÞÌ ;´òIóß~HÆpq‡VÈ]YàuÊÎå«=ÊØU É™S%På– 13±ÏŠÆbö*å9¸Íùœ]^ާ6£ôäëÉŒuìÙ”Þ€+Á/­cÎæ À•ã4dßtÛ§'+ }k!üÛôOâdŸýl÷m¶_„UXÅ:~—¿­0lC‚¿¿–ôze—‹zK%siœóT§³kMùˆÜ‘‘Çœýé««iŸÔÖ™B\€üPÜ”5CYõœSJóbÆ‘ýZ-«ÛL„1ÜçœæÍñ´b⪸ÑUFNÍRí×áb^¤§7“Ïæm”ƒ±ÄЍÊ͉ᔠ;„Á sõD;ݕȿÁK6¶Ú=Ö?öÍà(›ûå³[@;­Å°u² VÖ wå•êtk¬½ñ-ú¹¾u½v·´ˆ•VFVAu1ùB‚{ä¬mɉÙý¡ /ŽÊ~Ð¥•w%¨™º/h!‡›eÕAÙ¶Œ\ÂÜš”sH„É Ñ * Wã¶„€HääUÁ™T™2|2¿x=®8¢‡HßÞŒz<œóq,ËvÝ8aÔv&µHJ@ØYÁÇí°û*1v ·ÛÃÿ¹€­ˆ¼†ž½ùå|YovÅï6ð2˜2/±qKp»kà×?ŠÆÆÕ;²$ º²¡;Áª¤– qÃ/^]q¼zu°ºÁŒ—mEà$çL¬5 'AH¤a³Êòf R2ˆHfÜBÕ®‰C!"p Uª´ÔþB{ùqÕûä´72i”z¦!«ƒ0 43GBò@]ûõWUêÄ>h¥Áo꛼ñ÷>Ê;#äû%Ÿµ›؇goz›úüšœù.ÁZ<u Ý>ý:_ý?1+÷>-D³ Ò·VÝk÷f}UîYóh™K‚•¨|Þ´Ðç\«Ê5¬¸¶‚E[â“Ô­TLç‰8 ;Áœç$•ª6˜XË ‹MZ=¿yuyå²üôÑÑàO_5Æy;09Ȭl›·‰¬ZêȤŠì¨Ç_Ù·0í§%hïïaLwÒ³7!ôöùM¹iŸ z[wÚ…û¿ÔšYn&-›+2°¨ÁÀìÝ“7–ùÐîM Ý‹ÿíWûéA b°Ç˜<ÊÂjNПd‘IXÊn€È\’ÍI=s—`uG»õË;ªƒâûß? rØìxxÜ»(t”¹,©ÙÉ"@Ƈ$Ê€9Uç×vóéGö/Å[pñÜUOùa]rh[ß|óm¹/_ûˆõŸÛ'~è²m˜ˆ·ξŒ\D?ÖdÖ—CºybF @Ó8~’_~yvzrS#tŽ»™oºÅ8åpÄÂÐR($bg¡¨jiî1p\ÔÇp×dVeªlúìÛŠS—?—OWÌÙ—“C/¾õ§Q3r«¤OW{Сå³g üèTn/êê}“—þ¨ðÞ° °êi¿G>»Çël®Çë´È½(uÏñwIã‚Soþ·qvñÑÖ}˜áy«’Ùâͳ4õZM®¾ÿWàäñ7Ã'>j,[XÒ?ÉšíI&æFócÀê¨R•Xwöƒi¢æd¥G<²äçñ{δ{Ü>îûA8XNK…æ\ÝHüf1_!uY+ŒÌeóH>|°¬£ºÖèW‹ñ£#Ø•þý »Ê7yƒ¾ù¸­b¾îo3ò}ÞvÀ—aÜx'›õ¸KÀÓW_–©OÅ8ëῼø®÷?êfB´QrF$Ee/ ë*;ÄîBLnU*gþRýú<±~o:Õ(N.z]j=ýyluX6¬9Œ”=þ( µP¹/–WSÕC4îFdWß??šfåQ¸Ëôçªl0N{êº;ü}*Vf„õ{ס^Óµšù¿éÞh?æû>Ç—ƒ`TgGj=¸Êm$Z¿átÎ>éwZYÿ“ª8þëªðÜ'ßÜ|ñ(Ð1ús¢T)§ …¸„ …š»Õu(1¹¾¹9›K¼¡¡‹˜w¸•§ö õñäixCîXŧԽ–‰øæ= [y3 w‘i!¾ %»øž ÇA6ce-Zóýù¯œG;yuñ‹ü6Jm™2vqa“v­N½³Â´Ú+T¯íLëPìuwDccL/à…2®Eãôï¿müw•=ö§OÈæÕù÷ƒçÕYì„ÙÅQF³ïþõ$ê|0 ª{Òánbi‘““™[*)øóWE‘?›Â$òɧ€O”:CÓ=†O?<ª²×Yú‹Ò‹,lª¡Èz©^1®B&‹U7:»¬â¬ï7S Öoý9œ~¬§Ø*És7þl möP“{ð´U#“qo_´ÿð–6¿sÃ^F½u]Ýo<‘9d䎼N¬Éóo_üÍÿðu> Ñè~\øý«?L{£˜å‡½¤…•Ù¡QcpÕù¼‡–×¢Jšªþ+´:ÕÔ>ìu[~nóô2’}Ð 1´zµ´µJ^Xóܴɘ_d<}°¨ŽÑаQŸ¾ûÍ`Òœ<í­Iþ¶+àÇG´÷î;_¯¨ñžÙýì©Ë•XPß=G’æ{o_¤2ßstKʹ"œK}rÿT6þâP‡G[çä«N?Ö§lðÛ—­_H+|ÐXèTMhÏoÆggt9ù‡NW¤5ÐnOèÃf5R»>ÿ&ŸåÙ«1\¼Ã7¥Å6sÖv<Ð8<8ê>ȸÙݘv]Ÿ˜Wu5FÂ7ä>>Õ·ªâÄ+\¥72áù'Ÿö7H>íÙA®°Z-<{M'ªmºqGÑÅõN´h$û:]4ßüµ?"ms_ïü±B.2…Øk“mêöʺþ–ù×ÿ"¿ø¼}R7Ö"ò“S*¯Îž½O¡hÝ´/œTÇ™ð¤]´BÈéÔÆòõ3á†Ó# ÌYÆ,k+Ë¢Þfƒ/7‡1¬šŒ˼¶ŸºPsÃìúU ½G}¬qk-mûs„ýx¶Y:Æ}éÐ…¯z“løoüÕÀD¨Ûáì.o_·uæÖRn…‚ì`ÕßÂhÑ!KïLÍi–C©WÃiä Á¯ªã¿ë3]×°¦EP‘4pðäoŠÊ®ËÙy^¦Éµ4C«ÇY Î)@YÆKl)‰­ßÊ7k7C‰ÀuÎ s V¶z¦ìºK‡;™ήf‚Sî¬D³]Esý=Þ;ª­eç÷=òæCöòMO•³;²ºñe`w¨nìöDT;ëê3uûHÃAÉÃaÊ«¬Ê]âï«]»Ëìă›?€n·ú܈j£¥bPwr#8 Ó—7Ž8$ÃËòg§­*·öj@ëÄÊsO,¹Pš«_&âëWÝ6Ó†•‹Ì‰ƒfLË?'ržFb¦àqŸiìι.ûQgÖ Mç£ysðàøxµG|µ6j8úžœÎ?X§ÏíØÏF.\jÈ#OØ|ªm·–0l³êĦg Jê*‘ gj ç-ˆ\„†E¯œ3 ¨JŠì‚Ù°܉@¦aé\*‚«e ¨2“‘+ÂR¸© iúó­ºÍØîL‘Ž”./þ]oü}¿¿hG¶ÂÔÅ-"B~´™Ãp7f±ÕsÍÁä¨[N¦Äp'4HÜfLFä©oI‚š¬[y1Íýøòg²-g. ÏK¥ì'0ÔþHÀ¾·n(¿ü¥=¤&KçæÃYS؈a°d­&á2%V2†ô8'HŸ.¬k>lµ˜n)†y†’Ì:M¿éO¬k2 !)¬ˆ’±M¦ÝÈiLABDEbVé¤AHêŒ@¦¢&"Õ,xåS¥.‘(˜„È " äž*ËAD  Pb¢ Òê5Jn J_ý½}ðqs2 N ßÿî³O™ˆÕYIn‡ÝìT´6ƒ0/z^€äŽªÆ’»ÁYÜÌ‚VAˆhúì¹7ú9œÉ­Ž‘«o™ŸÿÞ:ܑ֣Œi75Œ6ÿا¼›ä¶ÿÎ÷, ê¿¶å³á˜lhÓRz7ß²Xé1Î3¯¤‰a*«&c öÏ¡]O•w*»bØÚÚŒa@1L› Êâ`šsB„gÒ¨0>…3¦GD^X™ÓŒ[!JŒÆ(Ü´@L≈•2SÐIU&eT‡¹2ÚÉBpó) NJ*‡©eêAHU)R/aÜS³Ë/Š£':-9‰_ýçëÓëChFB¦L¨S¦,‘ðˆ£˜Ô…ÁP3'Wq÷©u‚WL^ƒÙìÙ9~ùÐäÂæÊnÌ¢FDµª$$ðél Þ{ØŒZª^d9€Ü_þnÎãÞÉ©ˆ6MelWÅÿsä™6bü·ûT|ò„ØÅ`êupgBWrÐ\Ìܘ’›Cl,(Ì›Uáæ(ÐU·CrÙUgO:ªÂÈK.éÌ«æÚ×Q "ó<¸ V#ĦàÊÐ=,_…`•„ÓKO]ué°%ž¨;~’=?¹‰Æ0弫FœUsšÅ0D›‚Lq3 ŸùYæÒïØ—¿µ˜½Ò¯{E‰Öø›d¸ò#™q1 ÐØÙ%PITCšä³­ˆä˜ºù  U V(X:>úâw>ú‡ì'«e‚k²<ÑÂK-Óé7¿×öQ+Wwe7G\7úí‹`üøfB«æZÀƒ‚l#M<ûsÒ?¥ÜDû ­`YfÛï³íÉáU⠪ĚfsŠ@®¡n‚##³Ì¬ŽÁÒÊ|ž²Tþ€Ê4™òðÔt GF¿J‡ˆ,jÜë ¬®µ“æ-·Ñ™há"&bá©6Ó„AQˆ g6¾x>}úM‘7ý›Ëi¯EÎ_áøïš0uj CšÇ®9Áݘû<1p»Lm±Êœ³<\{D˜´ó›kÿ.Ì…È•–.²HNž˜Ë$®YbAd51 Á L$¾tú‘‚áN¤ÄöJ%ÖßcÑ@Þ*(t':z ËV Û2­kzì o›«èÖŸõïýuîƒÈ{íöËaiç1{Ft¹S]㬌eÙ¾§ÖN ¯âÊã³¼¦ÿk}úñ‘$»< ÿóSdŸ2¼J?<&€È]™”Ù“„PUN2Lˆ+‹@$Oæš4µ)bŽè:Ÿ»)zþõ³îç³ ¦EÕÑ—%€1̪Frn˜5ËJÇ-éñ¨{M(1;Ï“‹œëµIþÍ¥‘TÄ¡ ˜À,ùÀ{ °y†¤1NòãiºÔ§ê¹ÚVÍZsÊ& $s“àÞ*K4­ã•¹!tIÍYœXSï” äH¥¶áZ `5!!xA$Ѽîù¼a,ôE¸ï·"Öˆ¹g¾—oÞK~|pr{÷5tëÏ5=§ ƒù‚®/š7ÐÒ °¼qa¹3Ê yðpó‡âóϼj6"€0šûÃÞ²5W­.ÖÙÑžÁbÝ[Þ f …™ÖáÆFâ8Mƒî¿}*n$l®IAÌb5€À¾/ÿC/Zb2œJ ¢à×ß#þ¶ËÚeSq23ƒVÞ0#T%Úɘ'Sª@½nÑe¢£ò&0¦A®åÌg £|¢Þ·*M@n’ùM Î‚“²{ÈÓ4HÈìÃâÀGQÕe@ †m.Õ)ófÀ¸z0m¦ÉQAÙ•š (*oµgÍq[ÌT:9·¤Nø;6ŽPQ4PZ É+u7ÉÈÍy_]*{}Óò·‡wõ›ÜºoG,ÄŽm?Ч%¹Ï_t?&v©#o¬]¤¸Œ†\Ú` ‹zË‹Ÿ«-¹2•®ša&,Y§[!€!6Ò!̉ŒHízpõô´‹Ä‹þ™5¦ú”³¬÷I¦Ç€p2f!L¡IZ”’€LÁÎ0ˆ ÌÜ ÐÜY50˜F ¸ˆ¥J<9ÈP–†NI”Ðp„I²” Üs%¶TqÀ•·Œä¦ ž©õ9O]µU][•Ü«k›i† $D3h[+çÞÀ4È¸Š©£¥Rÿ&u©ˆqÖqŸJ+ Z¸N†Ylÿ¯õBná™Ìß"å>øóÞ|Á;þ˜UñŽ»'A>5;¢³ßÌ~vBV÷ÀtŸ·kÏÔ†Åj×ã³GYâ´³)˜à>à¡óJn^yüéÔâ£éEóÓPƸ°ËÕÁL>Í¥÷$çe;7†;±‹xˆXI· ƒôbžiaMÖ•ik8Þ·«nº+#°mYéÜXH‹7UfñÄljêuY ¬2ZXm¦‚ ³`Ub.+o¸‚`Êâh2.-ѱÓ2„=l®¨Þ§ŠÃjíï–çß~ $¬2£xùì0ãT}w&¿ìÁ-‚¢§Ìo#†nZIWì|±éú c«ƒÛó¯¯wõÖÁÃl—ÚtágßöãQÿxé^Z¡0˜j©tÏ”öÕš½Ö~ÂFÒ£ÓÖØ5}•Íj%Xø!€ìâò&¬þ¹s äfkùÌ--#Gaº'_à.¸Ëê5Þ^Ø÷ ·ªðíñÙûå¨M¾~NO.ƒWnÓÛ:Å›ž‡-ÙŽ«™sy^þìÉ1<_–2ÿÃHŠN´ãñ¥cTN÷~aÛðÛiÝ廘ÌnüäášœÉ.¯{Ã’ˆsV¦,Ðñ§Þ¸ñØ9•'·b´LW/nè3%Z˜ÏøjXTá u§™â/½6^d‹Qz•Þ‚x¯?ìÆxTÃΕ~à¦ú‡ïÑ?ì®í™Ùâ,3X§_¶'_z;|z0Ø`Çw8EâAöøq]wžj®é5˜]™n™ÜVíÏÿ"aÇ¿9é¿ãx;M€à?fÜñÃjUó‹gö¨¹Ç(»‡I¾Í µ¥‹ÞìÍe:eëôÒxCi$€ˆ“eöøa± ^jÏ^µ‹ãF;Ü‘‘ú— [xFúú«7?Ðæf\“µEÓÖ‚ýˆ«·i<Ý>ì®WÎ?þèý<þ6jò$‚8kØá'çåWÏw[~;Pfø˜ë¦‹ÛåÕ÷/ÏË¿k´–ÆúåÀ÷(Jþg Û &w€ûû6îd†ô4ûi”*­ÊÙuqÐyôóݾ}{Ÿïo˜Õ¾[Ê„ªÃ'ùÁËoýóê£%Þ/Œ”£³ßÝ<} Jäæõcpñ<}ij¯G† &îî ¡wÿ´a;^£»d2oP¿ö8™°ïàûߦ[Ó»ÍÝÔ.˦}¸×·4¯ƺï£6ÇP´VÎOG©ºB§3x¥[—ÏŸ½ð¦ºi*¸½ú:þ,}s9œ¿auÿÒHÛ=ãÉ­÷ó­­~K¾Ït÷7Ñ‹7pÇ©»${¢0ŸžöùÁéí‡ê%Û7 «™5ú½+9|9ŒÜ{~¶ªÇ ‡Û¤|ôð¸®ð]'•Zº¦¥™OF+“/ù_0![ßýë^(tÏÇøòûú;è|÷DVw0›þá·†æÃm[žûþ9¿IÝ’ýêMãNœi7/˼ÒrB@kp³!½ÒÅ?ËÓãÊôÕ7¯ž§ñ–µXgcìSÔÿr` ³teÂ|Ãû.8ÎEÍvïÝA|wÀ‹ç“êø£þí7Q]q¯±öŸvÜ ,Í“hívãú‰¸5š‹ jÕùÿõ^þÕ1§Z÷$80<3¾º˜öpõ’7Æonlë¿D|ÛÂ3 Û4Ãï4IÔÑn÷Zåxïàÿë>={9;9=Üs&„%ªÝn‘ÁzYJàÏã‡zóõ•Uùñåty ß|[|ø7 tç6¹ ãïËVû¿ûÇé&ÃhÿDý›þh°Í7º\Oºß~¿uê6o#Z±¥wܨ÷¹}ùøùõwÙÉGÛsYÞ/?à«®\u‹p"jD¼ß';Ìçß~1 ÍÏíyZLb8.}Ö* Z­‡éÕïŸß ­ù¨ýà õmZ"šUKmt¹zyžÎm¾Ù‘·p->û>ÿMùݧ¯ìàÁò³Øy-Ú Ì«èŽÇvÆÑæ/GJ­_Ôç´zyqtða(³˜-kˆðì»Qî¥ùÁáçW/ÿõ×K”¤ÀyŒr¶õM[ÆÔ‹|ºì|¯3+6D²wÑ/·o}í@»'W?­üæ›ô¡4è±<¾öí¼Ýw­×Á·%("‚—S/Û³îã^~ùåÔ:„0ºùzdÇDZ{B¼ì>d“‹¬+¡Ùî}@Õ‹ï®sµ½1ß?"¼£þÿC`›on…@î[¶@Çåïúïm:ð^I›/TÆm!r‰EÀB äâ>88ÍiãÄêr¼µ¬¸óšk 0óØôtõèQ>y^zú§›ÿo$U³½Ð#_|wÎuvèÔø÷cÓ£z‡ÆEtÐ"6hùãí¦ø§Û– /6¿ÛžËïµ ~Ì5zóˆz9m¶>l¬¼=ì|ë%zná8SOΧ™G¿¹ À ]þêú¨‰¢(µ¨´ŽLKÅõYW®ŸK«ÙŒÖüy‡ZIQ»×ë "ÿSu¥¿â·Í7³|gÀÝG,¹Îmùqù»ÎgwðÝGmýÚ·í€é5úÞê¬Uš Ïòÿ»çz‹oܹ½`ö„æÏZöè4–¿›è¢òïEÕÈCBÕëf¼ðZ²MCÓÓñÇÇÌÄ¡s2û~¶AûR.vÛT÷£óÑí8ÇY¶/ víêÅËÙ´|oWŠÞíë·~˜s…6þÝ:„•SÚþæ·%ºöôJöº?ù EwÏtû¡ë#$âÞ8¾{5ùg¿¨O\uÖž}p|8(8ÖhFÎW¯Ðî@z ˜ûÝòÛÏ»;à}3ú qBmóM’Móƒolá Éq)æ¯åþ™®ŒÛKAæÍºÀ½¥ý·w«¾9»a—ÜmÊfoÍ ö‰LM kvS3?Iů¯ @5ÿêjrq•÷R1˜­pdô//%Aì0´?jïúV üŸ"¼iq».U-ÐÔŸ\µ®'<:l•­¹`"6gV+¨'µkE ¶ÍD„Çoà™Ã* 7¥u3©<»AÌòÊD@nU®AÔ}Nä`-û®j?”)Kg )Œ jL0ȲÕ%ˆv*šÕµh–Íuö¡Ù\„]ܨ÷/ªAæBfØ#,FZww¿}óÆð‹´µWGW;œ‚>H”ëÕÿóôÕ”ûòÙgŸ 2µ«Ö‘¬*å•äÏ©ùøAˀȣÇß~ÿªåîâ wú„7¢æ6=«Šê¥O"“'A²‡(RiÔW°;:H§0ŽI p3{ÙKÿ?yoº$É‘¤‰}ªj~ÄG@…«{€îÞ™a“Ã%¹"¤È.Ÿ‹/Äà IáÈrgwfvçêéntã( Î¼âŽp7UåðÈŒÌÊ*T¡Pµ*@V„‡]n¦¦¦—©Â•–ÍJ„rÉB¥1;“"DQ“0œ¦ÜcÈ l†(0¶ÒCêê1íTã´)b05M’Úb¬¬©Û ^«˜× åéÇ—_XX‡Øp”WOaãß:ÑÏ‚;ÓÁïm }œ†ÁÝ=Jº>j cg¯[»ÒºO‹}NC'Sf€Üz?ûnxòÉ«ÎCø“…&žiœgôÍô¤McOöé©QW‹’ÃáQÏN\¹§QÕᘅp”X?'S_&AfÓ›!Ù3Ÿ:™x——Ä2¤JLBa8ï%TNr⎃ °~ræIË’²¨NîÇèÑhæg IîNÄPg²H‰Xá\Yˆ­4NÝ͈ìnÄÅ·OŒº¦  BCCÈÅ5 ¹1‘ÜÈÝHÌHV›Ò½ŠäÇP_å݆ƒ¢ ÷(èJê Q¯“EOÿù7IƒŒ³¹œìEMë¸ðË‘GØÝAP7°ƒó[gß|qck1jà¦a¯£ûm™,éã) ’0 %¥hªœÏB\€(!ŒÁ’ÒiÂQÓ…‘Ï¢S×&SBÿd©ÜäY‹á­rPR:õ\•©t™ &áB‡G°¨”õ}eÀÓ²ÐAbæ.|¨ÏhoîÒw7õ4œõBÆKq$¥/ÐI¢³¤r‘eÄ I|Î`#6w rò_NÛû®ÇN”{*AdKo‡ÀᆔÆ^j¬JGe"ˆFö®­£NÌîl Ê¢IˆEéd fʧ½e(ûHzŽ”‘ÌŸú1'¦n×?üSïÆÃE±,LLPÍïŸ|ýÇýêÞ†f^$ÂtÅé¾®ö"lÝ °_Í÷sà¹ešx&’m¢ÐÂ;ëʇUŸTwþÕ‘”É,DÁbØaFnJNÁÍB€³.Ô^Fä°©±æÆ‹(\O ’O÷ôÞÖñ¢sd"òc(â^karbÐa^l ×ý2*Ñ"t¦ÄmáKÍ„Kt‡ˆÅC-‡_š’‚ŸÝæÓ®Åà…¶µ›-„Y)u'N¼,‘é ìÒ܉3Oí©zpub>Û7I\•‚+8h‰v°…A)sgó¥—_kð?¶?H¢Ç"dC_L“ÍX’ðô?µ©3Já,ŒhY’MNzˆ0†+ I@¦rDàEt_u—þ¼Ž6 ,­üª„oáîN÷|Ë?X8ÙÊ¿¹ñ'£‹!@W,ñй©Ù Ђo¬iÓÁÛ1Ž.Ð&m›³)ñUëææ¬ 7B ÒÁfæb-¬àÄÝô·K½}|ûO…ÄÁíéûFÎ©Ž¨O#r`)0!LÕÈPfâ# 2Ww'‰,ΘÛbéIP›‡rڋ茉úGѨGÚgœqa}(J–ç¿ Ò"ÍIOä°Û|'ÄüäÛÉl®ƒg³D ÄH{¥å~ú°s@†”rŽLѼW¡Jê¢æqO¸%l¾ÌƒÃÌ0%bÜ«xfD3 RƒÔ9/jtZ!•7¨H0_er¹®eµn‰Î?­—ü9°…g6¬ãž¯I>lÈê'Ò×›Žê½HX§=ÎÆx/Ü*¯çÀüa*Ù_ýi ŠÞ¦,ª«ÀŒÎPeq)9¨4f"'‚-#I@„—š›{á,€ª%æÅXÒàL%Ò!þdr˜Z'ap–º3™>ú“ 6ÉG%'åR¾?¼õŒpãÁI˜-¾$ÃÙ ž =>Åï¿O%aŒ³„3Ç‘ß"š-÷³0´žNc­‘AÄÍCÖæ„æÈ°¢Gí¢ ¡] °”N%¤jLž—™ [©™‡Àæ0sbf!sO8‚ Q™(Mà"jR:ÁIXÜ\æfAÌÁ9Øu¾¨¸ ¹oöø³R_TúÙä,üÁp)b_òý’‘¸Åi[î?U¤g®ÿ0oûÕ6Peç©:ØŠüp™ÑÀ«<ª`ÄÒúÕÓeüRùäóà1F'a…¤ú‹Xªý5ñ½p÷nDjÑ¿ùëÇ{±/Y‹O¢§œûD;f³$Iü˜r׳$õ¢¹-•S#v¨ˆØ?#[xA 䘌ö§zj{­qéi;9åÀ=%s;ó9ðhL>¥')ÙŒ]u¶gIÊ…ÒØÒXÄC)‹DÒ’Õ¥Q‹Ò6ˆ–Øs¶cŒÖ ‚ØK´…ERAˆ‚¸±›„”£ªƒbì²pIçïoî7ÙÎëÀ "Ãk„uÏáÉ£ù_ÜæÎ–S¹û2‘írÛ°3Á…‡5«²R  ƒr5ã†Ó;öýÇÂ&™Owz’ôÄ[Ü2g8&ñNoµÆ³VœXÌúâ*GÊ;8æ^o1t6H7 rò£ h)nš þÇzU._°çÃkê—oØï‡üA5°ÂaÈð»÷=^xØ0UYU,ê=:¾ólÑùîûvXTFUªµøæãþáUŠ TÚàÓ™y;¯,}µ™ëöëŒ*çzÎó*Wà½`ô~•FÀh“þ²J.çŽè ’;“›³|ÉpÂpwv›¶ŒÌ)*X&æ·D“÷ŠR{ljŒÔ6¢&žñ» 34=ÝŒNlëmhgLÚ"CÕå@™À½õѬcÃåøoï5ä8à‹§³eÿ~º¡°ì ¼Ó{T~ÑÝö@yÉÁø»ðgûT«À'ËäÞ½ªP{-A‹4ï‹/wú§ Ï™Þm?Ç·›š ¼Ìo´öï¦MFÆæ»¥›àñÒ¨J¨Á½s;ž~ð¯öý7¿™ÀÚÝéôo¦å~&Ü% LùέòèäGõp|c°•“ù§è4üB@0}xRÀ©lr½øþ«á•ZÈuÑ—öƒKˆÖÍ÷ß;œþÕßìŠ~5[¾ÿ…øÚyÅ%pvª­P†£¥áÅ}áÞ>Øf–ßÔ(~(lðƒ§¨cÇÛœÝîkí¿ºÏ™ˆíÙ¿úÓ;é¿<^ë.cqôÍã,Y`˲2¾ÑóéûRN&oí¤¿¼í Ùyðä~ÎÆ[ŒÏÁ¯r3ã½|Ùùô×7žþ—¯½ò–5?ùf:L0GœÁئ­Öl§›Ü;Í·Üdùö»ƒò’º-·bÙˆmàíkžM?ÄCÙJsg>À·ùý?é<øíЙ@p§oÏò$k—JldÅ‹ÑÑ·÷zoñ1ò°Uê ãÂ?|á-Š )?¿nÇ2!"¡½ô¡~úëÙ׿=QÀÁ±ŒiÙoér^¸HuóŽ í»ÂzÌ­Ë= Þ)ØÒÓôÖ‡1‰E¯åvçÎÚPù£’ Ü>îüüdøWÏþÛÃóòè)÷¦Ëáß꿹Íë­8˜þ2¸ÆÕ°w¶äÍùóÓ;ý”ˆ}<.ËÓ²ÿc¯_í¢Å7g“ýÿîóÙßýÝc5Ÿq|<ȈIÿf>ÕªÚÖr¬ÓùqùÆ`Ëo{Ç ¡· ÄóÂJ’áüÇìu…ÒJPûþð¬}S~~üÍé¿íbæÝ/:÷Â÷y¶ñfâĽôk-þ« fçäÍäíF4w‡e÷R‘åbïõ*2vÃ*éz7ãÓޯ߻Eýh *ßÍ:=b;ÌÏ6~¤ò6Ÿ¡xÃ|Ðij— öS‹óÞ ™è^~-Åì«„5§EÒévÊ›óìé?ÌìÉ—¸ÛÂÙ„µÐB¥ÁNË+“M½;qÐÞ5íM,U‹“ýöùzýkÖÔ‰ì‰ðÉ|†ÿôÕïGNº,¡uºÁ*j¹ç"ËáëÓO¶ðÌ~h&·7 DÆóNZ&~6õåÃ``Nx¾¶çX(OÂ^ûª¶Þ8h[ö˜ôm~©•÷Ï [öZI‘^ðk|M.„[-Ü N€S"Ÿu¿šÄ˜þ9õ’e‹¹u¼‘ŠzcïS| Øö×xt†d³Iš'#ýÑå€Uÿa} Œ¥ÃE÷f¯LºiKÚœ6/€;É}çæ»A¤OŠ8³lÿɃ×Íkî–+huƒ ­6Ï¿{ð-:L ê†6ἬŒ³á*Qø»#W^ï–¼I„~÷`¿u ¾ôžy¡ ÁëÍÙ¨´XÖ‡¸|ø÷ôÛY2®.šÄÅp3ß$\IJ|Çñ«†wÆo¸>Z:ãÓ³•?õËÂK×%÷d¶bѽ_Þ{üþãGù˜»ï7½•ÜÆ_ŸÜh½[ýR¸ˆg/w-âÇ wÉ(â(žQ¿uñ5_v¸ômÙ³¨™Ww¬l¯çýaÚëÇì P[³ý$t6÷.誶Þxç¶S™µ:‰ÜeºÍ®ŽiúÃÂs; Y"Dà4ÿÙgýüéïÏ$oáY#jеÞëÜy»-}ׇ­xŽWl¬¦WW‡4zmäÏA\8{¡ŽFDÎëï\ÉçTÞñ³¸­Â¤ß£g÷èèÙû<™Î{u_ꬿ([þ#\¬{ópîÜ<ÝhvI`ÏÚ¦çï¯]Ÿâ•ëiŸf qKî?_1õêx ÈÉ£qÀÝŠÞí6Þ“ãi~¼Læ=¬¦E‰4 Û;w¢ì„ žU“âBêˆFjÀ‚``°x¹ô>"Â*4œ)¹l.Ä®£t¡Ñä5"vmÃÕ˾½œ«8\™pÏóO€ön· :¾"俈¦›<-:D€j.)é£OîIÚO¨+……'š¼yÆåÇ¡¦ z¦å|ìS7×”%£ùI”8.—EÇ2*范#‹;05 ØKJ9–‘ Â‰É„°" 33ÌÌJ13ÁÌyM{ž/æûЬã*;Ws"W„FûeËü\{ì ˜ˆ %>‡ÇØÄ©»H«7…6‡m: SY¦ H@>Ÿ|¨S†“÷i@“¤­Œ œó¶BÏdþ݃#9%Ï"…®º`A-:bA½±INNdfi8áþ¤4æ–DGÛ„-„”pÊŒù>±øB=IÅMÈÛ`‹KqÉ2”„-ñÒBÆ,psæMd:‡iµv¢ÄͨùÌó8Ê’ÌABù=µ‡þG‘âèöªŽÌtÚ>Ìëv„-ü~3°±¾¾jhògù§÷ctw£¶@`BcàT‹Kí‹>-CÈ¡±ŒÚElËÍ¡F„8 %‡1ƒà3®¾÷¤ˆæè´û§fÖ±8gÉ[¥y\Ȉò0žÝ±)f÷ħ‹½lè1úÇtÔ9QÂs†ˆ9'f<€»'îînEêIBNs&°-ˆ¿úçÛºøúÃ…s c`øø±ßÉiAB-€ÉáÎ`ö¡P«)‘‘é¬CQ%MT%X ¨q"jâž°)±Y•‡ÎTAÝœ„V ­•ž§æi›ðÍᓤ¡¿°ÈD7,†S™ö¸IeWBÁ6>Ó^~ýw‹eW k¯6¯t òíÜÀ›‰–œ«“ÇèBÎdê bቺOrqÀÕ(²ÄB‰Ev‹ç¦eˆgqN¾äö˜Àgc/ïû˜'4UbCêDÓ$p"C·–»nTž%\"ðÙ~\–°É %Ÿrûñ7úq9ð€Â+K†öJv.Gâv›ÎÚ³½î­2:åÌJNŒ‰’=D&ö2ié¤]Ú^æ…õÇ ’¼7´4ZNdpÊÜJç<Ç”µtpP6H"ÓhÌÕñpùÁal2jŸ= ‡ß~'¿üD‘¨ŒÃǧ_üb@\ç¨ Æ2©B÷°¡¥ª^­íeª)Í2—ñòøöØ©® óK‰ê—Á6žîy.÷e`·Ìé ©ÃVŽ4pu!‚“ª2S#'+q8˜É I<©”ÁLKóÒ¨;† ù›òßN¿ÿüÎâóR­7¡‘÷†nÀSºÍöáf$Î$’Û2™¸‹äEô¬,Mr9$µ3@:‹¡S"‡ l*é(ð¤7ƒPÔNŒýÞ¢íeìèœA¹°ÎõùSNˆÜZÇgýýˆ‡Hí±ôä+=ø|/ÌØ;ŠÇß~~õsézŒÎÄlJ‚RÁ‰ˆØLBBäsçêð1%†+’úVÂv\…8¨ŽÓW­¡›9³©'U”|w¹A¼ deÇŒÂjµde#Ül!m~?Ë;ü2»Ó.ÜØÆÂëH†«qïØ3ª„u2 «^êrWv°£G»adÇ_ËŸŸìݽ\ê@PæPÁ½ˆŒÓ”Õ]+•½Â­’FØ6…ÁI(ª2…ñ !ÂR¡Ì§e§\v‰ °™š'gbæ—¶—¶X Oy&lS9þºÝXœvÊÈÇÙòÙÓoq0í„ôÌ@ÿüìHz(˜Jvóˆ4å¬4Û/Ã>ŸhúÂ.ðv ž÷œM=#wœ³$ pâ…ySšºµc©Ôy`Ÿçˆì,AÍx,ÚLV/Kc6,ÉÝ‚/LBp‹e`3y­T0D®ÄçÎv !(¸ùS½ô/gß|1:º£4]ü¼ÁÌËÚ_k]Æ6æSÝoÜûöÿÍíüøÙð‹þº^£mªTùÚJ3’œƒ*.ks}Åš*‡›õE@«&c$FæâJd… ¹™pgŠ r|tx{2>Ð{åƒ~ÿÃ4÷HG§'_dHRŠC“tc_Þã9“È©ËIÛÊ~âQC"æ8™wXÝu€e˜¸JBKè¤Ã¹£w¤bË8˜öÒXD‚“)ç!ð³òF>,ö’S ÒY¨–¾çOqsžt•ÌTxfƒ$Í1Mo€:õ˜1H|‰ÒR™HG-€RóŽ—ÞfqM¢Ñ(U¦%áRC 7„„ësyƒg¯–¤sÿ^¿Æ‹•¯Ï÷†¨u'?ýýßïuW*_épö24êWàláyÅd[])¾6Ö:9·Q›A”½´ÜJJõðÞ²›ôz¨|–ßÚvÆþñôW?Ë͉ª$T!hX nRs‡ ÔKm´Ô(‰æF y¦äEA-×^šq°R<öÙάï£ùŒ„Æè/Ý?›Š"ìóöÌÚ]вgôÈz§¥9f8*’4 JuÒrÞ*˼}¤°žZœ¬àl†¾ ‰°¿cOÝ$„3aôé{>DgA~ã_×ûvKOûnX?Z­ÉÜ)Ï><˜:pTiËV¿íð,<ÿÞhåvW[€Rg€ä’Åi‘¶ˆ€ý›“Ó}"þÀ<[¡ìŠU¨‚€Ó&81®5Ô ²Zk²îàì»Ã[ìài»µBæ©n]ØØô<ìÙÝÿðÆŸmÕÈŽš;ÃÚ_¸KØý <3Dù)´ƒ ¦yRüŽý`¿·zg¸OLÒ-ÝÓÊl qÇkû}¯„Ý”gûHeîÙddƒ\-Íêfó}Ÿix~? T¯aí‡ á"î^hoëì—õ‰rM­ÅËýüÊ`gÖºi‹“ƒD67ž,}´¸yˆZñNVËœu;¾MÎ^LQèõ&¾j } {,"ï3Œ¡€Ñâ"9»ŽºüyÝ5á'd` ÏÞ 5{I¬ÜUààö½ÎrlR“ƒS¡G^º° J&°ÉâvœÑyzt…}ûS}Ø.íèä Œôä&Á”ülÔzpûÎŽÖÜŸ3!×r·º úy£°µ­ßŠÙ ™|å»öˆm:Ç·?KË|“Ÿ }/”S&.ÿðÛwTq¯×UiÇM¯ VQŒ/ºá^¬ì.®o›K`I¹0°ÇÒ}Ò=Ïp_®ëñûºÁÖ@-–•gÖó‡GDWÝ{Á÷{ÅŽüÞþ¤[>;J7hI'“O?þ0/´¶ÌÖžÖ~Î{÷…¹‹Dîb¹êÁZsâ^œØ 7€yÅb¦Ý— öBŸkCóþfñfèÙËÎÙe“MtûnoÙi¨%îÛ#’4™^@"/—‹euݳA%·›Üµ¶îÏ¡ÃUîê³% 3 Ãt©Àr¼`n•ïÂÖ·žMÔZ¾¡1¼à¼ÒvÕ'`ªãÓÙÉÖ£ô@Î@$™µf[@\Næ³ÉjÅצýË®ªÐvåKÍ« 8^³vÀ²J÷°¶`­±û§¯åÒrÏ´û"Í_Üá¯ûRõ5ïï:ðý—‹²ø~_ÊÒùÙ´;þò8n¸u‡a2M“t6Ï ‚;vSµ‹½£Àºeê¨ FD€wÒH‰8œÆî ÂuòuÀu½!oò¶ˆôV® +¸Å³SÏ—6î0êìÍÌŸÿ}¨8~ž>é‡Fµ,­Ó×ð•ú®’Ú=WKq%Ôš f^Et©€Í§g1Тhg”[iã/ÚRß-hàaþrâÏ —gøÝ|ôý;óìYRî³<ÐNRF&SØp™oꌼULÔ¡ýÕ7˜%IÃóµõÏçc…1rõʵ€ @¤—?‹Î…·['‹ÐE%Ê›†×‚ç  §k¡Ù¥[î5Œo«¯íÙüt~@œ|ÐéÊwG%ÑWÅϺDŒÃbx@,ýEH†=^!Ñ©YŸÎ†Yg°¬ÔR¥E6mÁõeƒBT"Ôu«Ý¡Î›>˜Ò!¦gy§xÛÃ]wÑ/÷×x[È÷÷*¥Œ|p¦qø»ºp÷û'I*$7žiDÊžgÃŪÞ˶øã½Û k©§Ì'qßœi‹¶ð¾Ð`›û„î´¶úQ‘à}^BóÒËŸ“$›ŸûôàuÚ?=«à ey㔣é2ó#…ƒü°~û~‡|o¦)`Ëìæ£jumùÀz6?æÛIµÑ·Ãþ{½­‰g‘¯sP¼èë¿Ä”­«\aŸ&oØvª›µUÜOÆÝþËIáîÉ÷ÇÒ"J¨æØ´€Oº‡°o‡Ÿ˜ŽµsãÎÞâä´<¾=^%¡Ù}³·†kƹ5‘ݽ²°¬k)hâ’ÀÀd8Ìyyé±YëWvNÂ[My³yN¼/è[¸èX¢Z.Òîmb9œóùü_ÊÏZλ ŠÉ{Ëß~r`~º¸môäÉý=ŸI7ÃxüÕ³½»Ÿß`>g!<Ü÷ÞpÀdÅiÒ~äïyyôÇ~wþÄüÀŸ>9£»“Ïn§Y–ðFµÑôºdn6Ô×vö×eH£<èÈBopÚ^ 7õÛ° /[z {yÝ^¢É+ª\`™kánCoÈý°ŸÜ{àªä‚›ø§ùE'¿ÔÂÉ÷åéÆäɽð$о?ú²´ûûºŸêx¸?]ým=ÛÒD¬è˜ïˆ•Ѥ‚UmÁ ÔZ¶'{»-} GÉ7‡p¯¶÷m¿ ÍÇóý^üš5VŽÛõônñìÖR)®^H¤wwøý½~×Ô‰A­Þ§þ}ÿSŽñÝåïðáàé)Ú½ýÑÙða0 7?½½:ú6ýœ]òå=3x}½’ÄØëÛ 2|y‚p§g;¹¾wšüYx{^³A'çõlyQ¨~èÿ2úe—>Þñ*[œøøÛ»Ÿ™=¡Ó䎟žMùâÇ_ûho¿eñ›?öÛç²ó{¡ñ}MGëçÀ Eáà éäÆ,sY˜&¡ó¸,z…ß#ëoos}húm«¼5ˆ¶cœ ¼hß8;>Ü?)#&õÇý Ð3Ÿ=ùÈK Bj?½ðÉ#å…ʽ;gÿt$ÓŸïÄ·cŠó‹läÙÝý_Í95?9Ìíé½.FhzÓew;t¥_寶÷&=ã7´‹^¼Ï'UsaýìÉ/$Æ’Ãç_ÿ–÷¬­÷ÿæž à Ù_ǣɬߦ6·:åoŸ£÷Ë›‡€ƒó-;h¬—‰jíóÆJ¾G%ËQéÔ6˜¶Eß9hògö’¡Yß<œ‹­>㽄þöî‡ý¿œ~ûÛ?k î}ï³PˆYžÉ£oÓt™ˆÜÞ/?jå?»×¹@Ï'#ÉÎÃrýlëÚŠõ¢mÏÝŸ£;—OÃôÃÑþ…ÙnýG‡×%{ÈÿÖ裾äø6`Ûyãõ–ËÎlÑ[Ú¸ì|ì½âëñ°ì/N´3O肳År*í:Ùü÷OøÃÏ>j]HÕÓlþÜ÷ ßÖ%*ºÔÀû­kÆŽÇâÝ6ë1Ò4¹»÷º3·¿ ¼Ž!5íj~ÕѰ=–+Ël„òW¶?®lhõcMJÐcÖ¨©ùüáwÿïâó€þ~1×å,'À¥eœ?ÛàÓžéÑ×ß÷?ùUzAžØîwóÂ;GAîÞÀÓM„f”R¬Ì±Ç 1ÐÉãû/6 /oZïÞ<7iš”HàIà æ©°¹YŒÞsJ1‚DÈáEBVå„2gª©¡×^¦ còsÆpž3!쪳#Ø­_òŧ'ƒÞ²5qð—Çÿô,ÜOì`¾,‰à¦{í'Ó<~qÓ§gOô‹Cé£,BxY|g^Œ Ú]¶¥u†—v¶z4ïîÀ€7‰¯«ß¦ž6Г§  ÆaÌL}öÑéz£HmšU!$0;Ñô¦Ù´Q f€H©Ì˜ÆIˆÌ€2< ÄìÌ0e€@Tx †ï³¯nWÖ*wC0‚3fF¡°„ 0ð°ËNänÄä€ Â< °o‹£Ð/Êïï ÿôÑ·ÿûÿýÍìÆƒØÆ•³cWç{{­ñ·;QBÖ V$’ˆGgZ„$ç¥Ù€I¨,‚q0 ðHIuÑ >×ñdÚû(Á—ÿ‡°ÿìÏö¬t¸1¹Åî4AD’†Xp™ Iˆ×Q‘”ø¼ç.Mºr/M7²!Ñ[)^ 4ñlºŠ©svsªÛ*¤]µ.ãÖ¼ÔùiÀÔ‰ÈLBõƒ¹GJîL…T‰Ì”‚–€'^°*³S¹Ô,:ÎþãƒÁáÓ§ôù_ôÍÅJöždf¿fÊãû¹ëø»³p¢¢K5-2 ùî‘¶h¯œ—Úï$tÖž/„Á…Šei.Š†Î´'<ž/ö•ç)9åÂ$ïrkÒÍ— B½§’äqéÄ ?Ì Ê2…ôÊÉSí,ßýßÖåé÷ïÚÒnÊž°eKÕ$+{P p$ÍCfp§**[éYå÷!âua¨#FN°8´8-M’êæŸ1Z ¥È¡Ê¼ ÌÑ99¹¡a—ð:d•¹_ç÷¶"±¡eØþu+.Uw·ÝN1êÒou·D­†N“›ã£ÕSœëžµ™f5BB‘„\æl.½OîÜ_ŒµûóNt!×Ÿßø÷ßêéï>¿3àO2ÅÉB;³XpwJÔá4ÇèÎï1§ˆ”Yædjä.¤ÆSAJm-KdŒ¦·0ËÎ<ÄþåÒºF­³Ì[äº,’ùbä’O`>Ô…JÈ,¤tp\èƒòFøÇ;Å©FÂéð;yf΂EÚb×Eã€' ‡3´%awÀcqG”]Ý(O ”Ò2v9L¡ìdDÞaŠ%%Ø&ìΑ„ÀN,óÀ½-BSî¸9D¢G7 €°1‘©œ®Hx¥˜4¶%w§”Ý”ÌsÁ•6ùpÖ‰C¶®1ؾ¾Ê#{òmT™ÞðÚº¬ÒóHöN2Ë0„0韞q*eõ‚A?ü_¿•³¿_üòƒ”Ä;á“™qÂ}ËÎàþa¸1¯#Ü€Ä×øܰfu^Ýó4ˆ;¹3¼@¿žØÌj$®Ë„ƒ;„0–„,ο޸ý¾Ç[ÿLw´÷ó^”%Ôa”a:2ƒû©;§eá’ߌÓÈ„±/†½ \È'‘ŸFŸµ1 ùا‰ ÈçÔLÆËbá%º9-@ l¹”„éiìq'–|@-šdsN(.,8QZìw¦©êaÐR©5"Î   6l‡ŽÍoš'T(§$®ê»³$¤æ¶¤¼MàfL½µª§)orñËÒw=þ¶YÊ«`4¼ßŸ´;=ˆœ¾ÿ¿¶ÿAîL¾ÞqÆúb­â݃¶C7m}{Ñ;¶+­$`uØ"sâ*»``&Ws¬zV‡£;p™»y™±•4j”à’ÐAÍ[…ñ̕ə&‰Ö²p0oÌ·[~Žå $éÛbþ_ÿšËõª·!\¤í´õéÙi»]?c:üËÙoÂíÑßÿCDðÙ×!ÿ4ä¶=„JÞÒZ­ÞTv°¥õA[%ð£•d]õ¼òËAÄ’| Çã-ógS×vÉkîúíŠò›ã5ë´•#¹Ôìp3òºÓsÂóÕB^÷ÊR hž›É¤·Á³Ý÷.°‘+ÖŽ2¯®7„:£ êa/N-g-ŸÞï­—Þ~q<ìpw¼”ö-zº\ÜúhÕ…ñ Ô¯ÔÔîÛÆH¹á*}3C‚)¶…aÕ5ìæ€fKs*@ƒ¤ß_ò‹í³KêŠ&^j?—5Þì±íÂMEßV#M<“½2 ç 2¬ï¼F»ñº.[µûÒh£…+LÛçÀÀ¹90wöN’¬¶¥›‰þ ÿÏã˜íMÆéûvvš´oÀÁäÚ”ëaÎÔº½qj5ìµT©ýÕX˜@näZõhk’áJ›id¸,N´·GÅ8I9”‰ì\¨—€‘±¹TA—<ßòsœÃ`ͤ¬·öºž7XËÌù|Ü +UgÍr—íŠçT»¤}^!1ï§éTÒ㌮FL$0x Ÿ§ÿþëež.uBäÛ)ÁÜU©! 8H½Êºq¸XsôkÖL‰*?ÇŠV9SEêjĉ‚YýÐy¸XÀ'íû» ¡E¸&¬NȨ+5nõpme4`!;|òè½ïü&Ç¢%•¶rA9‹|ÆÓ¯BV ÿ¿ý™òE ¨¸1ªšWf|2‚¯Ôî³Õ½Ö ËðÚhÓH %!%7v!Yf¹ ¶,‹Y ×éo†æˆÇý€&rÔØ¥sòŒÙO šò¦ –Ûîy›øú¦ë×H h\&[¿óelÛ¶•n-×]ä›O.üê i2=c6WB•›–³¥¤®(ª¸ÚZ†6>ýŸãd™»LQÞé6ø«à®lD°J¯°r›¤Jg¹aE7råF–©ê#w…üeõÕ 10‘†N6E1ŸxRLf}UE»*—³ »Å:_ì§Ûd;o,[å¶ç˜Ãd¥£¬qĽi9jnÈçú~7gôв~ɯÙ¹&7`>8¹3:Á"P¹ŠQVï)òÉ/ÿÓÐ>ܼJ1è`®¨ÓJøkðž<i®!9kÉ ªq (ÇoF­ò ëíäTh ÞëuÒ²d/¥>*DìÊp/õäªr»ÑîGCÆf\*úú{ÃeìÍxÅm=oh'#å´ãéõ¸¹z…m„[«VÝ[½É0)’X29‹;f`´~m_>.—YäÆf u6bªöT•?ÚA«w3UV>j*NxÎ ­v^• ÀX‡L[Åæf8Ø\3bîÃæôÆxÐ:[v Kн”…v¹n7¡kcÙ%$qÏ·µ¿Nhž›ÙNØp!Ü©Úê çÑÆŒ«_t›Á»lö6\ÐN¨¸¦:NâV¹3Éi:ñÙÞG².Ť>›IÀÁ‡~ðèÁQoî¬ÆBuäíúà²âϘjãõ±ïqýÍWÜ…˜ñ*㺹¬‘‰ÁUÝeJ+yiöHÇ]IŠé³ÛKÍòšX¿Ê¹yÚü½j›@—`Ù ñÇ?¶âRä Þäi±• o]¢ŽåÕ¬ãM¤»È9ì®—T¨Èá Ѷ ­~ª”.¥ù¤c”gj‹îʦj?—/Ï:QNdÂê¼ògØÐV+3ÈI˜v§µb}‰¾rO`ªˆc•mJK•N¡Þ4®K2©,Ï.Q=db™«•  ‘IV}o ï^;élÁ®gWOY]í.äÒŸ^)œc ÌÓŠ`¤æWv@enAµç ­d½´kƒ°0|½7[‹¹´ÙÅk·ùšQk0“Õ°8@÷ÿ¤Ó¤¡ %8AäÎ×ó¬îÿ¾ûó†–UÖax¥e%Ô4À:²1y4&ªœÊk/ÙÆÈÄuÑ"s /I¸J~jÎU^ÁÐ=<›j&E!ýG­ Mö6ç-åçEÑÝ“V×¹òøõÆ¿m3ÅCÑš,ÛúñÊéjäØNFrþ7×:/Ħ™qÜ‘›¯ ⼎èN0÷Z¥‡:»„$ÔîPô~—¥ö rȽâ£>¹ƒn¿wpTÎÇ©ªÆ¢08¹©9 ËZÿeÑÉËÒÜ•R±èÌ@PàÚxuÏàÄ&Ìi`Ø pǦ+”±t?Ï—šˆZ>=™¬Ã™¹àÖ˜ÑÍïLž±™°Kç«ZjÝšßkÞÙýÑÔ›R£U4y+.?=ç=o $µaðü8«‘?wü—þZ±[Õö¨±É^F,ž‡Ã²¬³8@nDðìÃ÷–c’Ä,É ´Ê–¨â¾òÆ®úX™ÜAæ+8‘0PUª†oN f®~g!†98;bÁ…:QÝ!ÏsEb{¾—M#DFªä«ûyÖ|sßdÌlîÒª ¹ÓÅù=?MÔ¢kyY¥W£;¾ÆÚþB^ǽ܂‹ô kÞx}xÍÉÒêËÆ¾ü<1ú<«°æˆ¶Î€íá4‚›1’;ïM[íÖ^¨P°2Æ©füV¯üF;ûdlDIÅ(p•yH¬¤d3PŠÊø¤+Nt-W0w—UÉõöôÕO\=$&¦hR¹ ÍN¸\–™ ªÐ4¯fÕ\íƒÊ¦ç[ŒûyƸ |©HºŒ.´PϬƒ~At+¾ÆÖ‰‰íÝ©0¬ùÜí盓õVÚ¶-ËspM­Ú…á5x¯ªÊC Î~O?ZQŠ•ãàÑÉ)MÇœ¶Dª³×a 7¥GCÁN´òit'Y3eaȈ¬DÚàè°zUQ£*í9“C*ñ bîæÂ»°8Õ§YUzåt^ƹt®Í`Õ›£Þ»+zM,ûLÜV|¢5ÐìªwÖ2ç¹Ç•ç)6_üsœýÕp¹þ¨&º›¢@-Å”ñìã},ÝÖ¾]Õ´º›±ÜûNzéé¢MAÜÆL®ÎàY‡ Ç_5f`¢êÈu"¸Á !ñ˜WòD6qÈÍeµ–¢Nd ¦Dî•¥JD•àå^\bq£>û@fH°¥èºþâ:],¼–¢ÎÏ[%ŸÑf•/ˆœ¯\4ز;5¨ÖŠé8o#ßË–h¹>I6pñîÖÑv7»ëéŶ·>5§h¹$²˜oqcï¬To\[7¿AÒÎòP™DÉÝ)Q%ÀÌ°Š J®ë5_Ý€c+- ŽV¥B¡ ©Öî8°ñš@í,ì““ÓJÛ'|g‘rzø‡“Ž3Ò"áJ=L„Ý­q÷ãz«Ý¼$º õ4ïܪ›ƒàyzÏW—ªXÃf¯Üð—¹$aÛúGl3Û™¾ªÅ·Æ¯²3#Ü¥›Ýn7Z;ÎG%QlÉz7ÐúH²Û‡Ë'c·ÂˆC’6uVãh!$Ä×ò” LugfnpU¨ºƒ…Ü jîDZÌÿÏ*K‚/ '"¦‘#Þè£ç3I<Â݈\MÓF{IÛ²þUp©î©š £ÝË÷cÂVž _n°ŸÏÍßL[ÿ4jü曇×9ž')\h:ê~lÚky¬­•¶9Ä÷ßûæô€“˜¯™*†#©ô¬ÍÔéɤ&Dõµ+‚m^HÅâU”L…V0è/PzH«Ë¿¡W,ÃO¿?8¸Û^Ý2ªiÒK¼ü¹uZOaõç¢r}ÃÚ\<†^Ñü_€&¦*Æ5ê^^æ¢Á ÏQ¼,ìæ–Ý†²Ø;'ÀÚ[³æ®@ÿöÃÑ“l¿zûʺ`L|i›nÎ Wf…¸+W""*î‚6G9ȃey»6kau`L=Œù¿ô~/ËÉV¡ËÅÏ7p^œìÕ¿6øÚð"vû€¦°!i²QI½45oçÒ‹“î¢ÂqžÅ>õ2.Ú©­üŠ?j=N\ D¢JEZŸ¼çÏ|‘kt¸WªY!uNÜX‚P#»ÜALfp )“$‰¬) 1sÚîíu’÷ú¤6ž‘¬k¾²éØšæºÞu뿦ãu§KJÍ[¿\—;x¯Rù<\²'Ù~Êé­¨¶5ØÎÉÒBš%¹1oNy7®UJ;zd rE«ÕoHCž]ëyVê¸Uës2±zn³Ló;‹…ö³-IïÕ,ñµ[Ù)¼&™ ©§_ÒÍsmktáákd:wÊç;”ÅIÒcÓÞæ¬¤Æy’t=—xôY4Ë×á,ÇÚ“€š0*5£fÑ·/‡í˜8ÉÅC‚dBpó£Oê3³¡"ªÚÅ=½¼TÅ×´p¹ÚLáõd ¾F«õÉu!ƒôÊ^K²+S°˜†N/É„k_0lJyÇÍ’0?.šÍ6ôÔkEŸoþ®ÑhŠš_µ6¤°qâ × Ö¥ó<Ï2¹?Ìç…æ­æ¶Y‘—;Ñêz׬ÿº’Boù9VB§oŸ2^¹]ÙûZ#¸®yAówI¥k=Dƒpî,Ðð'Ü<ÙOÝšúÉÍ!Pb­÷Ãßܸ•­«­XËÇ@W&¥JU[¡bç‰hí'uQHp€}íÌRë²É­ÈŘI¾˜.V~ͧÁÔÅyhòg•uÈ–Þ©î+ÃŒ@TFâÀ%*çy8ÃYàMUJ5á:Et¥ÏökœôÞ<"šÏw^+¯·Ë5'k1×áx)³^-8êBfuþÞÓýÃßä¾È«ŸÝQ†ÕíQņq­Mlîì‘€,š*)kiæ½2s5#j8K|á%0³œ¶²&‰xç 4–:€Æ„X£ ‹*KåÎ q³ƒübx3f)îÄ•3ŽA¸qI¡Æ-`E„¾"1ñQlç-0`Fd`q©M{p"ÂÁ`žÈÙ-[K™uŠBÁ#¤RÓÃŒ T °‘Šä3ÜkkGu¶¸¶9Õ dËúëÀŽ÷(s=*öŠn4´S›õã ×ÕËv>a>ûÝ—9‚@ÝçÎÿ?woÒ,¹²œ‰}îr8CMwx—¼¤ØœL4ã¢%ÓBÚ¨MZ{íÚLfÒ¢i&u“l¾§wߪêL9áþi™'OÕ©;ÓŠÎ{W¢’ݬ¶5œr¹gt’ sϰ%½£*¨bPqe¥T̘„9$g¸ÌÒÚ,‹‰En‘j ê,¶!MZ[™}eVݼÔ’îÕèLi}ïIÚ,ÙÕÒQU‚–Y·µ È»fy¯ÿøùN:M¢Þi2¸"< 9»H 4‡U ƒ»Äò^MèHâqàqÑ;á…q$qHñÞ¾’&ˆKÿþe²íMv¥ý9'ôõsìK§í•ÊÓ?ýZí±]cþê³ä`Û>\G–êVZI EçHêß/£mµFk ÷¯¸dü£U«•-ì­ÄKQÝØ¼Sɸ ·×ÎßÅÂö±k Lví)i%yc—f¦¡¶è\² UU5¥6˜}ÙfQ\cmI7,)E!MuÛ˜íš Qðâá:g]E+©NÜwš~ÿ.vëšæ6ºpñ@çWûvÙñ"b¾[ߺn]wñ÷KÂz#*Ê0«´ƒ=¤]šÈ@ÚBÍ©ëÔh¬-%Öï"K’Ue¸™wJj Ð @ñ¬ …É8Q*Tè[]×¾¿Úa>og"}¶ëSÒïï:J×};R~¡ö˜Îò_ü œáÒE%"ÑY ³€t-ëÆ6ÛJ2¤5ÖP®:©ô¦Z²¥ï÷Ì]6ŠkølÉ›få¨ÒãÁ™w Î¤ÅÝ ±Q÷ËÝÃÒa&ÜCèÎî“5ÌìâûzßFPV/Sç)íf‘.V5 R›h­I×ïÃ.™3ðþ·HÿW«’"äb7+mÞé5%i“¶÷¸¿Þ³“š}á>7y0I¢B_ø†ZÏ+]1‚V«Ìôޝx·µKk—¢ ;4):µ ä}Æ•ša'Z?Ü_5.YÐd‘•‚Ö­®tÓÅ~‡ÍëÕï³|› ê\daºƒÕ »dE›)œÊ?¡íÁ<ùaøO êÃH_ÏPçž¼ÑQ;Ò7Y¼pˆ>)8\€S¼í[`VŒcðýgã+ÕâÄéã`D¦‘ÿ¶’È Ä=GJì߆íL³)ˆdÒ…$Åî* ãBV¨Òb)(ô]\on¨”w³Hš-3×]Þ[únÕ½Üý.y vî¡Fr:*j-Þ5àíÊüÝÛ›ËÏoEÝ’<¬4—ûýŽ×˵”¼8ç9ã+¾ÓÙr‘oœ_jó°¶+A,R²”4º]Þ^_ÜÉU¬äf.Òµ^‡jäHä,·¬ê:ºíM×]V¾4¿½ä\v—øÎcÁ»íå¢ë^*×¶&UéÖ5xIVaAA¦Eht¡µ‘°&ÌMA§šä>¢©×ËFj@8TYI(JGª€.0ÓcÒ>Qø§Ä;žq®ñ³Q¹2`S©ŸåMEƒg(èR´ËQ™Fé…`Áª‘Ð#w!îfÈz‚kÔ¯×¡ÏøœPDˆÆôÕHŠ„Ã¹³J‚È$1ÙBÄ3Áÿc-ÿæýÒr§ÑºD+` e£²íº¸´ïùò‡xÇû×M´!Àn}Á ©ìZr°å­\‡®Í¡jv'éÂñ.Ö3½{¸þÎÀµ-(­y³b•p¹vV²ÛJ ’.[¥ºÀŠ6—0Â;^™ý/°ˆ?ìw»Œß5]ë¯öiY_ëÃ…æî%_TµR¤¨É Aäܰ–¶Fäœ|ã×’" YˆÌ*RE»[€bÈA˜«æÚy.èY°ËÍ×ßÿ8·?Ì n¤JA Ê-3Lسs$²I×!ÕáÞ&AÛb‘Ã[¯gºÎ—¼ÝXUU.‰ñàªÝÂ$‰_ŷ׿ù}Zòåþ{.[©^}û*«µÿ²~Y]/ÂgUìW»×îMÜ­£ýFªµˆ-»Ý2GÑÕÊ2“Šæ¦üJo¬ŠÙ;_JJÉnRKÓ¿®iƒº¶e»Ec¨v°eÔÒ1­>7ßÇr+X쥋0‘Íj¹OÒ$Ó qTµÌ0Jˆ°® €Ó,m,¡•’¹ƒˆ6](M9cA2K2†”Ðó˜D”ë›ÒÓV `¨¢@G0 U QÌ Ñc tP=BgãÔ„©=¹þAÐ}vLóS‚§Ã¥0+¥H   hcAR‚…áiÏKÑ’áÛ (ÈÒ ^~WÙ2µAXd·*˜3Ⱥ§ŠŠj±°Xd6‹«ÅL!×"JocI‘€økRR ¹ÎŽ ”D•ø{¹6M’³Tê¹ë¸ ÿÃ_þý×_ ukÜMB…›ò>ªF}i£ÒÜEtþm ""çìËüe\ì»ý‹*2.B¿€ƒÙ±Èx£ïëÔvÛô°¥C’ľRÑë﹦¾¼QÌ»dvKh‡Ø˜Òj÷…ÎVÝÄ_¬U:_1x%•‚_ã!^±sÁVó²QÕuD–*›ßSM(6CËë×ÑÅ’¡ _Œà“ÇþÍÿè *JÙë´$â`ÎR'd¨§PX`J†ðì=³‰Ð>¨ èÐ%‘¾P}s…’PvN@H&ëG6QÂ;$Õ>UØߊ©Ëï7WÞö¥-•9ÚJk À#Q·DÌçÝœ¡·ëÅè"ª)`(½Ã\=× eΚR€*º†J Àç"ô¢0jJªP‰n©f¡•ªy®s{aÜ6ivuQÉròf—¡DØèsSô(߀À³˜‹¢`pj ƒ‚M–A¼¥$Äæv& 2wTµ´RSDö@¥+ZL »… ½u“LY%VvX_’I:-3S}ë/,­™C²é>ãE¾ŸûöÊâœå›ë´M•¾¸ßʼ“´øwçèì0­‰!ܘ)&¢ˆ ¨˜1§b¥Hq¬ hªÌ,9ìœø¡;ÐŒ¡½ÿ†±K@,¢§ºt¬½ó0ÂáVÈ4¦†v–‘+ñ’ N:=÷ßûuNåfФŽÚ[3€¡á¨ÎJ³ïj†Œb:÷ý\5 0#A$:Ax§ÆdB­G”¼ƒ™9TO¤"²B”ÂSÂÔ¸¥ý~³Ô‹‹ëu Žš`ôÛÂ÷'C˜œH ½1xâ;8äÕà§NG=å4Å•öK¢ä]"rPj‹s­h†SÏ ‰p@ÔÅb+}¹Qf@,IIáU:`鞉 â ÍýC•J á R¡O+à ‰°è|¡Ÿ¼ÝM‹§×©ËŒô”È"dd2Pù°æ"Ì C.& w Bú‚yi¿n7o–³ªè» %ÔÝR)'R™£þí¶¹ÚïVÛZ4y$,Ÿ“‹|=!ÙL‚„0K 1GÀ¥¦ !ÈNIŠÆ° Q©³@ÿi€Lˆ¨DT®–Ú,R}¶fŽD`B@ÓÑõhrŠšî¢2N“”Q<ˆãGòEiƒ]`±"ïm{pvÔÁñ¦ÃIH¡|cN¢”æj¸ûJiš(/ ;Q¥$bÁïÙ=‚ ¥¨¯*z¬NzG¶ÌPDØV)ˆLC´·«7@<Õ$8ì3íCÓÖ——‘5š† X´b@Î8kóÔÆEíß|ùW¸‹P!â{Ô$s$uõ0#{FuJò¶KB]HëjQÑ‘ .® Â[¨ WéCÐTÛÄ@x"FMûˆ®}¹[—(6zŒé³Ê`.{Íf[0²íaÒØW*h«ö(ì=”Qßó±7™eíÔ~¼ìù!:š–#{’Æ€3ü¬½ˆß“Y”úc,Äú„Ì’WFQbÄÂ2+¥7õ…ô‘6…Lžhq&íÚªLÊ"JXKDˆs$Â;Ì a²ï sG¸Ôd}wÏû¿Uqj$ºœ³¨AÅ$Ó%‘†j¾{9_>äVÓp&Ah{ZBV¸° Spç32“¨B0OJR5š"PT¨‘Y¥VhêÙ ªY¨Ó\¶¥ˆG×<üÉu·$ÊA®á0j%œ®W„FËÒñöH*(¬¥Ï, t°F–KIñžÓ>û楂‚‹Š'(ƒ‰º‰ 0ÞÉìõK¥ßûi½DPûÏû]ç ¦(ád„j½ €¡ðœ¤!³ŠÃ3´Ä´Q &¢ TA :’(%æ:Eh;8%M@Æ–ÃÆ7П\ì04i›IÕ "Uõ…Ù ë_!BÙ'y·I¥×cÿê©£ªç½ø}M:}²Ml¿EýPª@Ü T^ëÀ9n.BÐY`FˆgNbKmÃãSóp Y´@K";m䀃>p‘ÚÅ“ÂÛ¸ÝÚRçQQ Ô}25ÌJÑÙˆ&‹*2p¹’¯ÿO{»ÎRäA£a~ÌT OBXdT¨RÇ’"»FÁ„ȹkêfNÕÁòá5­›or·ŒšŒ=ï^˜U~!·¯.ˆ(Pn JÝ[Œ ©è¨˜Mæt²¦ébˆbœP€Ù Ò $ˆÃŸŒÔ#‹è«FW2&Û6€ƒzz$›> Ìð<‰}Ä¿ùhò£·Mõ·víïj…Ù21”b<Üw¼·$9’¸&Ðèà lGÎäÎBµŠª#C X)û0Èž“úïD`Šr¿½¸4EA†z+æ*uP u^åòÿ›ëÂ~¼ÛQI¢Çï,ªHÛÌ`{wSuw©¶^•R®)µZP³,*DADC(ÄD'îûX¨P qƆjdv´ë¶M=›sn¤À"Z£„ö,gXz=óñhMÖÈè],Ê sÔƒ=SN!HÃöAªˆ—Há ÂâÕA± ð tLæ”@>ràQ{ä8}™žÌr 5 Ëâp3°ËËÂ}œ©¯lF¨ìùG‘|‡µ2þܼÿ8š‰Ç“ û  ÚˆÔ“Ê6"Ô÷ëKÜ[§ 0* dª&q¥£]å_ݤ»ÄH¥Ê)ªl«u YQ‰©D˜ÑMB ³U{1'ƒIÀ-'TdÌßSŠA¬&©ðÞDN" j}ñÝ »eØzרŠHˆôÎî©ßãÈ‘#ߣ9Õñÿ ˜zÉ*¼¢Ð»‚Zâ ¨Dš2Þ 0*¦³ÓÓ©ßuò™§žjG¸¡S®D`še©¯>PR$fðH–¡9µ-b§ŽDªLt’ÑjvĈ€Ñ Âǧ6NÈ`v9+ÑW†+õ„ærŸP’º•¹[DMgA©šÍŸ­g?î¯LrA%ÛÊÔÃ¥% ZíZ«Gý0:ƒ‰[X†¯·´¢¸Žlb`:ƒÄòDÐQçjçüýûñðµUÏfÛÍ5°Úa“–2ÛÉ‚EvjÙ Ògèðn@q£4ä˜õ‚•¬wCîM?"‡!f?Y¥&b‰TŒß½ÎÑãBŽ÷’²±<ͪ¦ÛëÛ‡ôÍCëíøÇíó€Ä&P Ò‹°y¨óøèáŽ@¹Ÿzdœ>øÉº;ð¼Ãž9=Ûv»ëýß¾˜•Ñv&AÝó‡úPãBðâ/ÿáaöùÍ|;01®ô`ˆRäЪø2/I‘MTVºýk½¯­0\™&ðŒ°ë¤.Âaµ[ÝU›Œjv‘b¤—²| IFǼŒïÙ SiBå/™ ò‚€n‹žÌFbÁ˜Ú7‰^šªî@ÒèO|jb>Ô>¨…ÓÙÄå1|•~A &BÑ÷qŸB [d|…‰•ì½ÃÍ‹QoHDÖtª®Žð _½¿Ú¼Î僔xób:‚ž¶3`»¦­w(«2 p˜ª“1zøÂÙ¸ ”!¦Â1JõÔðP²Ùu3¯úU’"1Œ0ˆÒ±ZÚ®ºÛmjëì`‚ Ðl0EYOE&bôHOª¯ÈN`A™âd‚a¢¹èÿb (¤îãÿúSNœ¶gÄ“Ÿçg¥ã~qô ³ÝO3ËT&­ÓòœãöúAJ; Ê ';|Ñú,«~~ÿÃ?¿HMuR‹(µuöUÁ‘Jm#’ß>\Z¯a•èËp¦‚F&I6ƒS„N³žk•},&Ç‹ f‡Tô0°³b[†^¿oÞ¿»ý“8ñ£÷™ßý§{Á°`–v•Ô>ì¡Ò_Lé@”šÅ:ö³C·òHåý%Úã|ôÉ[OjëÐG„+dÄ$sÿH ;Ä¢<ƒÞœ> q¿8%çŸvöú+,çÖ©•|Êû]F«]-#×û™½^¾}ws=FBéªG¡-!Ȭ›uÁ›=È— 2ŠÅI¢PœÀ@Qf0è} ]|PaÛ¼[oï/ÙœÇÆ¨âžF¦¬ë¨M|5Fë„®žŒSá‰ú6z/ìÄ{ÃÇØ†§øðNôQj|ÌÏž¸¤9æžD&ŠÇæ´ƒa“}‚~´:Á÷ÆåxÇ”éå¾¾ãªREoò šL6›3'šPo^þw¿ýáþwŸ]–^‹ä"ðhze"§ž/¹q%¢R<_$#zÁAªÑ…*(,ê D ½ò:ïÓh1ëÏáN…ò?&g :ÛèPþÈù‡S„Ñ€¢ Ø ÆB^ÇL]å?½=O8%^˜šZÊqaŒŸ2ûãOŸÒBÚ3Îݽðjä9Dìoœ91›_Ï®íÝ?ÿÕRQ2ÊŠ¾#Jzï$EY\lƒ=„n±Rн@%$~|Ü“ÜDÄ]=j‰~CRïlgò›Ëf‘Ãn8ýûñ;–Ö™mø|,™“9+ö»(BÒˆ½_‚Êå£?ùNG?YO™>ñ9žµuzVÔ«_?(ê0éw”qæW@Æu›_¾^¨lA”È€r¦ ’€Ã¤˜Mè6Ìa‰KIÚrXfƒ{É(µÈ €KÀŠ €@õž¾ù5ÍáåÇU0}ãË„‰ŽÎY¾áv0Œí''žÜàç´c~öìÎäìç_ ¤í)±„§–Å“O€ÞdÖ¨úÓq´”D_µÛëe½ŠU®‘o?ƒ`ŒMÀ£íŸìÓºßç«G=ÈJèCú{ëÁ‚ÐäíõûÍâýÂEcô{ñ¹—?×ÎÏ€I…Kà„æŽáûÇ9û°~ö3Ûäiž½Ÿx>&íW ¹'úüu\šþðãü⨺ý„áLˆN‹¼ÿÓ‹ííý¶–þ‘gÓ ¬Wôd•2ïmgÕ4æž{ª£R‰¤ïQD`3þ¸ÝÜl×pêûýiM>9•ýæ8Ù`G-ûgÝô#mBgŸ¶OäÿÂÚÂ_ ;»­‹,äõ7—MóU;y‘ç©K€ROóØ EzÓ`8¢ìCUñôeoÕVé©\op"¾ÿdƒ)·>âsgŒp¾ˇ¿|;¶k<iY>Fcÿzè䲪ÏýrƒúÝýÕçwín7ü^è“ÜwH5košù³r…>ÖxöáŸÑÊË|òe?¥×8”~l¸ùE=¡«~‚—éYí}ˆÌmsîi§4&D_ü—hc5àÔ–ýòdó‘ÇטÖ]ë•Ê¡õØ2=ÏúÛ¨dyU?­R>ð>EqxVO¿B›Ò™Ð楌k©ð¼Îòg8p¢&ÿìöa{˹ ¨u= ØGÓEâŠêåûXÎ*\Í·’ÇBñAÐ:êðXšî»“Åú{$0»hf¿ý“—?jfrò÷×iGö³ûüZ:2È:g¦eŽddÀ£DiÂPŠÐ”p–`>K¾®ÛaØãàB;z­óRéëÑáÉÎXqDÐõÜ»Ûíþ3]¥ùÁ Àsc)„Ïëo_}ö/øíßÌG­k9í¿-pÌÏfóÕ6äÆÝ¾F^çêóöEõr­žwB¦%U 'ô>…}'ûuªh7«Hú»ùê cÅš9k­[•õæ•mÉVŠd—wË;»ò€©‘É„RÍtç´hymEÌ=Ùû¸_^ÃÛÚ›«¥ø¿l›ªÞ×3.Ël[itW¯ô;™‹ÞGdŠ5â·ûßewñr·‡!«8Œ{¯ªEAGÉV±uR’ÄÛöFõãwAOi#°Ä}t¾{£°™D@6fú°Ü—]8º:yDp&B5:›zT€†“ZPÄ#)ȳpI,ñR Åé€à®Í÷ï׃÷þ€Á#Â|ìI?>À³çœ¶G'È™ƒ¿ê^:ågòêUYÁêÔ Iïa‘sÖZLÛ@dΑµâúÐhu©ðæ˜b—q‰µªyF‹Î›@¬-*Ÿí×ë.Ì’D× "9ºÕu[I½A~oû+Ü2på”—M›óUõm¥ûœÜ¦šMS‡ß³»™-5U­_ëwR_J‚w‚Áû îÿƒ­_Ím–$sc®5¡|£]¾é–‹b4Éû:/ü>.ýž¿]ÌB-én){®+å& Då’ë»e(n»à^)É–ÑrŸ¶Â ãf.š]´JâKÒ ô>YtÝK‘•2+…äŽsªy—±ÉëÛµð0ÉNA‚«"èÉ^^äŽÑÌž2Ë¡GDB f;žˆ¶=½©}ÃIÔ_€ák( °SÃÚpÚl(R#¦Ù[ýFãj¼†1äX·ïñŠÒ€´ ÐE5Â)¦¹ ѤÑfA’È.’T5»w¡0é*“ÈÞí3(s¦³Öˆ¸Šõ.oj‰Õܾúâk—„ŽÚu¾òKßyËôžl×UzÑÞæ×ÉVÛêúí÷÷ËhÓo÷¯ö³m—›¬u-oýúžŒ/*¬¶5š´šÏë´w Wåe=Ó¦”R…®i°ÞÛLµÐÆ+yö£I×YºdH­¡+³]ÝÅVwü½ÞݾE¥òÜ’lM2t÷ŠÁ%340#¥Töµm(´ÇÓ!s^D@ª'û3äQØ:Q€nÈhf‡Qúâ‚<"ÎÇêÛ‘n6!ó‚i¯E]9ÃŽ'e‘œèîÀÆç¨’ŸÒŽî4$ŸD6#EDΰßýûo«¯þ· UIE3•™J@¨’341Keë ßþÇ?ýößëŸþÏ¿Ùk„¡Ì@ÀÝ•M—;Oi‘²¯‰´|‰{*׫Žoˆ?à• 7¨Á•¾~¸Š[Á ýá­ÎU¥‹+½h»+ñ=S•îMd¶_“v÷–óÏ_ÆÅCí¸ØÎá÷\˜¸¥7­ÔáW³®•KKï*»n–É%‘Ä®©m­Wzs<4'´2:S1e ‘"4f7j’5Ä(ò} ±«ã¾€( ¦pŠEQJh¢€Âˆ˜÷³Õ¦M´QW×¾ë"!ìfÑJgùj³õçÝñÆî.åý,–0U^¯®°ÕÙÞ¬#ø {³9_ÿÅ8'ùGSwl=%™S“éGvF~䤧èg╎wâéþNòû&/ç}ºzŸKú” BKÝi¹Øµ³»ööëÃ;‘zÈÕšì£ïˆšŒ û„ác…NJ½:¼èóÔ(KAJamu!·þlFI£’ˆÇuO† Ø]zЗ Èu2b\º—¢XA‚ÑB`H 'sD8’)ÜYghŽ%+f©ÆÝåCöTa¯$ ·¼ò@¢’µíÜ]›a)v[Qìï’¼cFò¿8GgÏà2µñÔÛ2^|ÐN©æ`ä|f›Ú`Øú³Ïw£@ÿn'ó×=êÌÐÄi£e—Ô2óAèëoæ/Öí.T4éeà8}¥G1@"ˆ(ðTånã#é‘6U$G×zóú;Û÷Aª)Œtrë3#Ó¯¢^|!vÄÆUÕ_h}ÀÂfC?ÃÄŸE˜Œê›£ï㇠(s¨Â£2„¦^rqv¢õ„?|Çåd…D\?OSާ½t8åbGÌáì-ÇŠÄ =ÖjŽ•pÀ|qkŸÍ=õ,f ”þ=K…ˆ4RÌbö.6雿ŸqÔ^D€ §Þÿ/ü½Ó¼$®ï7ŽƒÑ«‡8£ò6ºÅKûáö‹C0Â׎½×czÏ£Ï?ßàÀIøÓá]OŽMài‡×SR=k~PN³ŽÍcíÞ `Æ´m‰"a?A@z>0d –LÿÊä¢Gmìâ£ùN'KFf#lóù îã1Ó''Ÿt|ææ‚>$úhy™x¤D§õMŽ-e¢>…PA_ÛÒì¡m6Õ}ŒÀÕåÆBc)†¡%{Ô¾ hHÚb¬W|È.H¦e àL„™€ZÉ׸{÷»Ï^é€K 'ÒÅÑVpvˆ>"Á=ú}8væ·Y]òi|tšÐIÓw)Ç/yÚïtKëjt„zN";’µÎ<*}Í: {õEµ†kV­[…“9®‚=ùYí˯y÷íßU:žW,C=~[z¦PMˆô!´ô6Y`^@‚‚£¡1 »ìØIÉë¿çß,ÉmÓa: ÆùNü³÷Ï'BnOó{>©=ëÊiŠFð ðÔŽ ¡°Oé„šÉ e² ‡û¤lšéɧ7(ÒVPEôµõdrþpéqóµ¤ß ‰1Žº îþåíwß=\%E@²ÏIÊP¬ÀaÞ IH@ + ¤ªQ †B†ªã°±’|9Qóûëýœ õN’ÁȩÞ¸}äÔcW¦‡žœ÷±öÎÞ3š@cUÝSir< Áøù݃‚xºØ9ĉÜ̪Àn-Õgu‰ë (¡ÀÿsŠH¢b£øý_³FÖjÐJJ'H¯ ƉMK=AÕƒØ`Cµ×Kcðx¢Ë×_g­¾ùüKNGéÈ’7]mŸÚžœŽ)À9(ø_´×Ý9fhGwz°·ƒNÎ:1¨/à >gÁCUN·‡Ã¦>ÙµŠ9Åÿ¶Óëæ¢H9 ,È!ó¨5•(d#¸¾æìõju³PÈþd³œ“JÓ±¨ê1r¾¨à—”œ–C–\©U8I*ÓÔè_=üþòý7×Méq$¬ÇV„ŒÔLJôév˜!{4ëºÝOhùÙÉîwÄ[‹ù´ŒàÓËî'¯‘ãÍqñ°SŸZð¨BGÍù•ݳÀÑ*Ë6DM¼ þÄbùîÅlÏ?Ü]«á ®ô´Gim†Ó•4<_ÝFv6HbÇï.ÕÑž¥¬õ~óÅ¿Áð6‚5öÑ(œ6~ì„§.:ͯ»k~ÄN{îæãX^žÚÜŸ ¿Ÿaó9³¾§{iµ5¹¾˜ÌÂTþ(p”¨Çžì×Û„ÎrèÀD3LdX% „èŒ<Úøå€sx€5íµl™ÞI¢ 8*°¬÷U½0>§Ò'ƒúÄ`2×ê҆î°2ÇP¡£ñ÷W!¹“üÍñ†O·Édûã™ûãÇÛf*ã•ï¥"óˆ h¥×~aU_x{,.ž%õ£«ØADIëäv±nuä’)²¦Ãm„ÅÎ;0øÞ¤Q<ŸØÞO^åt,HÂüâR¶úeu$Œïõ±6±=ʇÕFîgÇÊØa?Itþ‰í/tÒ&I¥eÛ|„úÈÚ÷SÛ‰•pÒgAñ+<༦ή‘ºT ¥pHŸ±X4?2±æ«åþftVz•ú7-Vkö²ÂÔêÛC˜žkŒãÔ?áøÑ9ðϾê>Ÿ¾±>kVFՕã}h¼eVdx§¾Å¯lÚ ^ÐÇÛŒjº;<›¤~á¥3ˆT½…,ßç/ßl4ä¸ã³Þ’F6 óõíÝ~ÑÇêOr ŒtòuØ¢žæ8a5ÓÌ^/¶x¿úìøuž×Æ;Œ²Ë¯>Ýl&Çåä´_¥=Ò~¦©œ¿:>3T±Cìþûú¬^MˆCé­oðDV`=ûá «íF¡¨¯†ÐÇêÇÁ#/=k;‚~ð û-û‘ Ñ×ã¡`qu]MÍ|‡+?6’Ã9éðS›œ®£_±èϸ¡}ü#±Ýµ‰(qs·—*®§b'hã<² ›‰¸ToÞï.—wo»z ŸR £g“(Ú¡Xá}ŸcSázÂjFœæ‘ óùKäØ.§<{DOøÂǧî¼àüGà 8öo>Kü‹ñ}è„Q5#²Xñö+„Ì?®›öwæ6ŠÞ/$€*Ì/>»›E×Q¬gciH§`?½ªïøʲWúƒég¤Ë'•õ^î×8&³ãx»_Ýñ“ $ŸÜ¦ûfléÚëyö£xõaã ÿ÷GT˨¨ãnßÜÞ^ð …ÊÀ{Å$ðøEyîë¤ÀãÍitǹoíÛÛ‹£«õyêß/1ÚS ǯۦûæó°jÿ jE è°ƒØúþ"èX<>»g½œWôT÷›7-÷-évÀçcFñLÐÑÇŽŽ+&¦üÃÍøèÈáÏÈÜêÍþB¸Ëéø¼gMû/' ÿ1øÃi^ݯÐwü³ouĆˆ @¨ÔK™Un3•Í‹<˜Ðîåo¾ÝRŦz¦¤iÇT3¼ãÔÅÉ98>|È#+‡$Û·÷S9÷ŒBøt{¦¿å‰'úh÷¿`{ŽDöKÂ~Á6 Ì‹à ¬«Ýfñò´.ñÉ•}ŒÃ+Å¥\\TÍ~R(j†<)¦AŸ¥ä£êjyøQú}X|eýÕÕµàŸ~äÐß' Á±ìYgòIcç¯Þ~þ^ù)¶³_¼ §+…åçy] ç>uÅðߨ˜mšöýGu9¾äƒý=nÅR!<b˸™Ý¾ßý””g2³éÕÿ£¶_@&»¿úø9¿j;Nöp_/ŸâÑg(å]uáÿò——¿ôŠ™æxÈä¿’@áëK#¶üIKõÓÉìÝx¶ýtö¯AfS†thÜýßÿáÏ_Ϙ·†:<ã±6ùiû}šÈý Ê¢ÈFò›´ø#í¿ú³Úϧ³_mˆ>6»§²!÷ݼZà“åc}ù*ó~³ýiÏùÁ;œæ9OUW!WºÍÖýQL ÿªíùûõs…ÈÞ±û¯!qòý~ö™~ì™s¸m‘KicmêË‹õÆñüö‘|žPï/þt¿øj±9—õßV;Â×øð©ÎÇ4Oå!¼é]©‡ω[ûz9¯úäØcÂô¬ÉG-–®îa¹]ó¯??Ó ê™69ðÑ1]ÝÖé´‚ä¯Öþ8Lóœ-û(^ƒDP-¨ ’ ¨…«¤õaØŸÆ"MÜëø¨pp¨:rÔ‘œ^Íãs¦ŸÝïeõÍ__cȯýHãà»’j±¿x«·ûž{tÏÇ3Æsdv¤Áž»ôê—Ìg‹üWÜÎä¸tFp÷p TæK²ò.Dª:AV∠‹ t¯d—¼Emá©J¹‹ )žK‡À5õE¤õ3KÂE¡¥ö.!³$©"AŠy¯E 欢 9LAŠ%aJ—„Àýݺ¸Ç…ÀÑìò$Ù‘ñËàEîVçOë¦x#gí ^qîðÈj;ü§oÛ×õ¿¦ièWhgD†é¾ù¿S¥h‘jŠçkÙï$°!!¸^å˜uÙÅ’.µ‚ç¯é¾ª«Ph=3Á½¿Äý’mªVV§ìÉ ©é\äK­í=enYÕIéb´:y—Åê!‘Ùä6%«r–JºNÄ»P‰K°ëüáj—QÍ*8´„Ó/vŠþùv±¹kØv´ZµCUi¸2@¤’jAªD˜"Šs;#¥„í|õ?þù¢‡4Ρ%ÞŸP!HÒ¦¨ÊCZÒ1]~»ŸœÕÿ_7^Ÿb û¯²Mý›ÿ‹›ðæZ‘мÎE+eˆäŒUW“¢«m+w/orkp .ß]®©²·ÅúöZD¶>D¼Q_Û\k½q³¼²×Wz·­uÉ;àrûù[…ꢃ]vóêN«êndÄÕ*¶Ëêþ²n;®ëõæ„^ïÚh²Øåîê~nð ^QB5ºëôÄ·9üöî‹kª Ç%Â;—ª©Þi¥\‹©Ð!á0ƒ¯ðÅýö›¿©À•©EhÕ,¢`PÓì 5Ђï ¦:䃪 yžDŽÊŽè1Æh^ˆÙ‹v‘ws;¡ØsÛòOdzϼð•¤z²pF:Æç àËÉ­9aA!"J ‚$f2(C`Î †#–sÞ+iÜêw¼¬4ò¦2ÄÖHÃËØWŒ[isí¶qϳ,[åš«¾OûÛ¤7¡ïõúÇuðò®C¥¯¾×&{‡kFç[]Ëelìž¾×÷9çôÚY5èB^4ÒnC/dAz†¤YHÒº*36IU›?Tb|ûÿ^49î.DktZU Êƒ ¯M—öp\±ËPhC¤D†»«BUdT&BDÀ}îÃó6Ò j•¨¨8„+ˆ‰ÇIÝÑ=à>¾\'æT§}‚ð´vs¬#¹ðpòûŸt9ýˆy¦é÷¯O f'_øûàÓCï­ž iÉ{=µ¾IË|Ñ?Zø×¥:ò!G1r$a0+us'E Q© \K˜yAU2¨Ñ…,¸EäŽÕ¬ýý\¶ÿÏ?U¿±ÿÉÖÛ÷W—ÑyV[Iåâm+÷uÌ÷îª×ìB ¹óÜ]³ kðý[›?Ô?þ'²Ù?\èZ­&,WHïÄ,™nM_?´Öò »°šüE©tÐ…è¥aï.&žÕrG¥\Eл»¸º|¨Kµé½«Y@„Ì‘ïn"Ú‡y¬ªZ(¦j$Ũ ÕQi|´ºá C¤”÷ô>}~lL`Ä@)|V„µ,‹0Ü‚Š!ßvI!ÄP!ýIÕëQJã xw×¼8¦Ç£¸í3h‰1ôêè:>v›ÙY’×ì\ßËÔ:U³DÔý‘I¤_Œ8‡p’¥$a&µ^ñàw—/ñâó¿IÁ÷ó"B‘„È{9¨ÈT3Rºs!ôá·ÿpñ;Áÿøg ¶&h›uJÞ¹Ø,å=•¤Ç/.bó`«=%‡EG’çÕÆÝÒ,ÂW"Ÿß¼WÅ|í¢­°ÅÂñu¬:î®’or„@–ÈùÃû-ÂÓNíRçÞñ³${YWs K•réR5âÖØ}Õ$îý%;ø¦á…ëÃRiMÎnUƒ,¶|€RS T5³jY›%u¯Å½Ã¾–À"G—3@µð`JÌ‘Ì="H&BšyVºZPD…ц5`h"Rãðˆ;ÚîùÒŽ¢;â¶Ï*æ§Ÿû“?hÈ:óÛ:kKv܆“ø@SÚdqF’"¨Xÿð%kÒýæöf‘+7v”dì¡?‘gG÷íd¾iûñz<øº¿æëíL Ï¢¤$f ‡(bK¥ î_ cãbŒ­¿` ÏÔdïA3Ñ6{³D_kÀƒîþŠˆÿøO×Õׯt½Ì¬4ÔÞ‰vûUJqŸ6¦¾i*[Ï¼Û k÷×ßfž3ªÊp}›÷bicÙ8S\§;¬ö|u«*»q­êôâÈ*=Ì»Šë&^™n̶+Óõ|#‘…%MëJÝ¥/nõ«Aã>¬aRˆ°y)u!«Y) b&Pæbd w?^¥41 ñ³·3!X®}Dy|LpÓHƒs&½3Îîòg(fCivL&cx÷ý›Ù÷W+Ò}|vQ;Þ]N\›åªà~v%«wt;œÞ«‰’z3„j)W÷òD= É-KWoÀ«£ )FŠ Àè˳PŒB5:Ç|þo_©@Ô ž©¦î͹2wQŠú>6YRî³Ô9g4Bñ=ì­Æ­F@®]е†Ù&W‹¤7¤‰_«Ö¦ÁÙ}¨ä®ÝïÕ’{–«Õ&=ØËÝ3°ß4Âj}ùCfÌ¾Í jsQU~å+u˜¬õÕM\²#Ùx¾lùYÞ#ÑDúæv%´J˜ã¦ýÏWúÅo¾bZOx½<#1ã¥çyГíE­ÉÙó>Fæý\úì15¤| hÕ­nÓüå’¢‚`[ÒÛlûhÄGlš‰™ÇÛõÛΫé@nå^ýù˜P§NÌ£µHŸCØcÎP˜ ®Iš.­¾ÿlÞß¶œb&§’óe?Ro S;(I¨€ñØÍEŠÐ©€Äê.¦ÑªÐ˜¡"] 00„ÉÚT«»b³fïXY:#B¥u½Ü¬ æ±Üš´^Ù{oãâî굆·4KonænþpxšéÛœf-Ó‰Aí…!!¢$ÀóbÜv”WIÍ ÔZ³{ÚÓFÝ•LÎcåxÒ¡©¾ÿSU'uŽ>ñÕùØåeÇe0~i™u 6UnsHÕ@J–`ïLÉ¿–½”²‹ã©Ã¥WËš–žæd]AÄ]37/ 0G8âi~¨¾òí]\lm»i€½í87:Äÿ´5Åúì 6)H=g€VJñìËëÖ… *Ú¥µuXÎ1–1ᓽ¹”S‘µÅ °þÕXì\‡h7,Ó­,¼é‹2å@,<þẽL6ìÆNð$‚õÝËò‡1œµáÝ6÷ó¤T9ƒWŸL„׎áGŘ+Úi‹ûÑ¡âmv°ÖæaŸ~+ãÇM£¯p´jt³»ˆ-S/æ•©F€f¢A ÆB˜$*Eº»¿ÚŸ=>YÖŒúØGwT6»ªÊ‰½—w€žt0ŒÍ¡ÞÉ!`«6¤'9l©45Üêí¼*eÙÕdõ& V> Áß±2Üù/;SOlÐAûI¼%“¿C7>ßX ý¥Þ‰ÞŠêÛ){N˜N@ˆºçàMÌ™*ØÊs:ÀÂ3æd°=4r‚^€Tq&]:rÞIeFo/¡‹íLf5#€6©¥¥ê³ hôLäµi#QPo„Úï¥x^Z`§ºT¢¸™TYßÅÖ‡Ô{Û_:‚Yîb°èPq­ZPr½kvkYôóå¶ëvH•еKröIäT¡ ‘âó=34}ºùÓ-úímŠÅDFþmÊ®Ž%ë…Ù@7 ’·¤ŠDrìô¼ ¬kÆ©àuÇ•”ž`Ê3®Nî­ˆ»½ ¤wÁ¡€Í€ÔdÁ‡ë`¶Š/æ‚kqý"žq¨@)pË`g)8ðý<Àç—7Í6ífü˜øU ›BØ>¤Œ–pHÛžH²ÎyˆSó  ]®Ð…Zs‡Zµó~mFˆ‹p‡ŸëS0¡ä-É}ÜŸÉv¶ÍúW:+éÚHç,¨Xö4<€’u" à„J‡û&u1åa‘ úå­à=ÏOe¤h|†Î o)º¤†‘n"â^Ç3V·¿ˆ q6P¥˜G“ C{l…TqѬ¦ °ÆãŒÉ³MZ¤û4¿û?^ÿ³Ž:’:& LU‚¡É£ª»¶ô¨5 SB(âM%Ùd Â$3’Ý6³ÚÄJ ¢¿Ü讥EòŠô†R¬?úQ®\ûÆc„T¹9=~ìIœLw?ÔBw­žËAu¾=Ý›ý¥Ý)kL$!´Ð‚{®á„Šv‡šS0µ]ÄycÑf©Hl!µœ‡°¾‚Qd<‚Ø1¦ý²;" P¥4oöj{[×ç÷·[±}%VÑRåT¾­¡ÞP*1ˆKÝP‰«9ª»-âöæ,aPÇ(©®b;â*DÏÈW'ƒj€»H6ÒUt -n¢¢Ät¡U° „WÛw_ݦYðˆ6ýä°6£ËFS#V0CÍèÛ€èß`·m#roò†útä&]Â箌8•ÖÞ¦¥X jމB‚ªå|ƒšE\ƒ8BýA˰æ»=1ç"RVe;ñ…~Àah?Û@êîBQû¯faõ¬Úà~›|V0 qBVPƒPÛÚNJ4‰òìÿݼq9ç^ÒWu—U Q*=dŠ„Â)¤w'+¨Š!(\ˆ (j-Æ Öt€ÚÒ²jÉcÒp×ìþíõ/а¸¥ëSì)ß¼`Ó¤·eéÄ.Îó˜sìøF–à %ß‘™y€#8,ûÍó£ô™P‚y1‹P\Š*„²“Å—juLÆ{…÷¨ix³?YÝñ+‚0ÒZ^®—€´.GPoršh%DØtÆÑš«{k˜¶•ç›0‹®9± ›äçp¨„H•ôb`©2ÍÛP_¿=ÇöÃÙîf‚ ¸Õ%´”#ÍCð†ŽYbF±NUÄ¥ÇìHÙ†0“â„´ÿ‰@„.‰›º=yë—xóöë ƒmgñÎqéTÈäï1LS‚Çäçƒê%âbQA€6¢îÑ~ÕÈKqdçÈÖú·g6ÎÐö‚,Y8°áíȈSe€±¾›üÆÁœºÓÈ~Tc„(;)® )‚ïÞ³¾þZ“o—Z[Õ&½•*  Öhw¥‹1yÃJ,¨;^Öæï¯¯þíz{ß ‰™$XÇ] ÑØyÂ)ÚôÔTfï(2£(]˜)Ñv-û‰Ÿ)à¾"UÜÖJqÇî÷y|ÅÚýúuÖRӥ﷯:T­öøFí1¬÷î#XÍ,2F%|Y²åèòxe¢÷ÕUÛ.Úý.&'÷ZÎmTF"Ûnºý‘ŸŨrϹ·<ˆÀ]ôTmßV b»³‹ bŸtÖ *œ€¤0D4vI*¢I¸<¯öŒÿò¯¿þfâ (3u)í? »èRè+Ä x£-‰*â ±°D"Þ’ ƃB]¸±Û߆Ú`rÄÀ®kNO#zäÂ~A¥Û·|ïe´ÙÅ G{…<‡,*ìLë²Ð%I,º+îG÷> Á„æW_©a{}V Ð&ö´‘Î\ux±kŒí÷~rö0Äõ”eÉÓÔàäóÝAêna *À3 J»¯./ä,ìB…z7ãÆ@ñ("Ö†>Î1ÉŒ¸ O³@@h‚óß|w“ÞyÓE•IIÍžFšFÐ@ÖhÕ¯ƒÔÙÊC)’¬ÞdYä( „% =³¬NQHTõêæOÏm Á¾îx#Â@Ü\’ƒìhÀ0ð´½èÏ#ZFGmËTZÞ‹‰­ߌ¶e 1Fûtô+ŒóW«Ñ“‘ü,™Ä.Ö+… æHÃÇu O,ÅÔtÃE<:¿S©w'FF€ÛnµÛ¾þÞ»çØoÒ Ô ªbU£”ìªA¡0J„Q\·¢„³”OšJÑíÀ{Vì>©$¦É"j*ˆì¾ÿ«ŽË¨Ô@'ÐD˯®¸ M”¦6ËG ªnõJ/‹öàW‘ƒx$ c󥸒€Ì´g®VHHo7Éì#ÝâÝñ^Œo–Ž”; Å‹ªã'£{S4 …IpñVh+ý<ƒ÷<.†z¬egXÌ™¥%4²NA…tz³X-ÏÕ•¨ž¿©ÓŽ!ªD‡@$Írö¢tx…ÙUw⋳‹Pß­Ãù"ôcR¨•ËpŸËˆP2ÁEªÞ«ߴF½TêÚž)ôx\Ô±Òg —ö•‡xʃýí uNÃ<WW»¹ô·‹TpÚ[ùR ›ÃÏ2ü?œ†³ú„õÎÎF·Kê^:v;>vÒ=}ªñ £±«$YÙfp@¢âW)½J¦D ¾?É@¢ªŠÕÐÁê9Síyˆª¨¾þá6ÖQÓà¨J°Ó]tJÇ£CmÏwk\Ú^Žs´Ø Ù—:o)³Ö È@,¢$t$4iåÔÞ WåèZò ŠáNPcÞXÖG—³J8Jìßqj{ýÿüc¨Ãñä´«¼ºOc"ªœ:ærª¿c‹S1*}ï#Þ06²'¼{ÃsÀIâ’»Õw/$$Ýî‚"+b=IPø`¦2B™®•¿óË+y–æÞéBÐ ROŒrôòt&AËÝ‘ràíØ…Ö²ƒ3ÌS¸¹N_éž°¬©ÚÛC;¡§ø½‘ŠåD ç☵Øêâî<ÖT{R‹ZîÒÜë³B­S¼4ŠK5 v>V1•δÄü€÷¤é‘Q!/Déb2~stZꛕKvrßüÁÿû¯®Cœ¹Òwœ¥ªÓà ]ŠüÑŕ׊óCŸÍë]L¾¡çÇá¬=Ð;Yt묜ݹÙ1mýñpÄSk)Qô«?ßÌ*VFìÐÌiO¦7ääÉ2zÉ“)¿‹ìºÒS¯ŽJYË.?¼{fÇm”Æ¿Š»Ž¶ùäŽ#6íS7wŽgíñØŸ|…ö‹Ð&îÈŠii?‡³ÎÂ{Ýx]-)€Ø}hv³ï±á TµÆùô´ÒßNF±õMŒÛ{]ì½ãä E¬ãP콘¢¿‚óÕ’èèÚ±#…ÐÉ©® g8›¡tù^Á^RuÊGçǬj{xµÅ¼!r´­òÁÿ›) ´"°¨‹Ýò@˜›Ëú:À©"ÃúKŸòàTm\óñ?šG÷Ý<È`ƒ”IzQBH a×4W/âþné0yy#Ar€qV½4†‚ž‘À’&“Ft^Wó{•y¨Lz‹[èÝã=ï/”j~û”n"ìlˆòmÙâ@é‘»ÕrCAë«p6\¸PhƒXÒ§­öä·ÉûO4*êɸ‡@#„_Üjop7~z˜½ÿ:8£–Wÿi‚þa¹#Õ”K]pFjŸ¥0ÿç6'@¡Ûµlcõ¯¿¸¨+—ÈËÙ¼K4ò—ìõYímê¢8Tå~]5¶ªQ(Pß{¡¥\† êxWˆ„P¬O7P4EÛµ;TÝRz]/Ïgq8‚~8±l¶£2ù{¸ˆ£‡vDãÞ!‹S4xI´mëõÔg>;i0WÄ u“ÌBH;5épc2滪®$Á…qóòú'($‹¡‹™˜ÒN 3^È)“;â.³æ¹»†2íjT5uÑ,ÿž³ý"~ó5’@+Þ5y> ]®±ry‚§ gO;{{¾»åí®)ꪖ¨ÃMÞsŸÅFXOfE¬dpW F¤äý?]ýzi¦ÀuÊ ä3;äw ÀБÂÑß)aùp§åÐ|u ÕøÌüÏ‹­‡èÆJ<ζI*XJ„„a˜§J îÃ;î.È€ZܧӒY$=Ñy€³p÷_±|¿~v}ÉB r³½C¨t'Ï$Ý?y/óˆ¦fcB?_Ý@ø}#»…¥3Ç9©;§­…—.’ìœD€…° cEÞGÕÚš}Ô·éçÉcö~3Tp€˜U‡Pwpw¦¼‹P˜3øîÜHªß+ïƒßýñë-|ùq7ÞÞ½}®Ð"Já J' óžu˜)DD\ ÞT¯·Òû´0¨gHhv„ÊÑ4‚S N3‹KÚv°ªcïEº°ÅjÖº3œ=©HOÞ?õå„©ìRú«Gº'×èc8Y8óÕÿDê»Ù^ÏðÞ#X)‰†á½T…Šaq³çQo‰[åǪÒíþÚ坿w‹«:ÜA…hœó ÎnÄ]ž•ùúf§:·ŒÏ‰?‡°ªâzéêªN×Eö‹ÚÒks™ßêŒTßÎjkx|=G1_5¦zk4æus33ûó»ôÕ‡»P}ÿê<ý~ë»;H4¬4 ™ÌJcBª©Ã=ºÇŠðúö<¸Ý¿ª{øW‹Y$h j˜;¢î\TU ­&'ã¹ñò»këªCtV=Ç­îª'‰ôsßœÑÑ1ÏGn/<™†ŸÔ9 Zø‘φ°í¢èIªæ!àLýo£ó?$qi}™’8#hn ADÕ÷ "í5ÌT„~{æ$•{˜;ÂÕÂøòÚ!؉uÁ«í2ÔA«ÙõåÍëîyy/ÜR)›Ù6XjBpoLÎßßåË›ÍÙÇ ¦=åÞWÎóº¬ô!FõÅfͯÖL³ïç›Fë÷ ÿð†?[aý‘ÛKý¸rÊL!Ï|îu%‰˜ã!\ËêÍ…5éåz^‹5„K½úàÍF·ŠÝÕýùJ½Ùk´èa K.Ï…*I%yîç £ ¹¯´š[ÚÍLjO±$ƒVL"Š5¦–RzV'ª%…+Xq—øÝ¿Ö’ÂÞ\$Šˆyêè1oý _)}Ã'tððÁZÆ7³W£¼ƒ¾Xöt”%± H<×J·¾Yœ8\N” ­jßàNr·ØûÂL•ªH7J€y %Ó(–¸OÂÝ2%ªï%g!MÚkP¡6µª'SI" åÿtÿÍßÀJgµüð¿ëß<¿¼Õ"ßUšR©Ïp»¯ô–¢ê.Ò%hJ0©’à¥Äÿ;yóšA^6†oö!‚÷ñù‡íŠî+‘¹ÑDWÎWLî¦uxn}W… ¢ lì,˜W óç4ˆlõ,5V©u"Dr½0óç·aæößþéÍù?þC¨ëо]˜ë2‹ÌU!á„ilQ¨K6,rŸÆ‡ÈFl¶G¨Üã îJ'=ŽÆkFuºˆú†ÕY…­ªxò„ZµO›ÅÅ'$ÐK*÷àSG‰¿´GrÐÚ‰³L8c¸¸x¡sTìEã—%_ô­“1/P Ý>d˜Ðwž=ìÎÌn¹ØFm#ýRé¸ü‹ówÛþNC%÷ëümµƒ¤Ìá øvnœKÜ©®v{bi§€Áíbwíüîeˆ/a.h<Þ3!*"ÜfÍÖáz3›¿ÇLJ0W,ü=qQ½7_˜ˆ+ÒÅÙ~ývµô+á|çKI®¨CƒÀ&ù"+pq¾¾~¿–ÿõgb渨^l€$Ò¤•†3.‘FtTƒlb Ƙ­ÅD É´ÚÛ’@¬°vÕD›ä@ˆð¤aK¨ÀÜU¼R®²Éþt#\êHÔѨ@Ú'Šlj•eŸœskšf¥.ÑQ™­ãË­ âûÚ)êˆÂBô•À<´1ƒH(àÌç Ž©ˆJa]/y8AŒñjþ£µŠ¾8ôÐ Øzµ¶ä}þrÎ Ù¢VQœ/o·dœ ײyˆô‚ä,™å'Ežà×-ÑÛšl8h߯_ݽÿ«kùï^?3ÓJHŠzrª˜ˆ'™EÜn¦î›™’ž#mÀR’И[¨éfj÷²Bc–¤V_ŸÝo1ƒ)èvsqÝT+ Ó»Å;ý»EˆUÚ™†[khÜ|Çglêp%Ö¸fòI°«g5ïxáÜ@ê>òE#5.Þ¥³d׬fðÆx†ÛÉq/’ìùËíVLÄ ó^Wô³f«ñålwe²ÄÆ‹x^O)>{×7¾i<"­PWh.Þ¢Öäµ/÷”Ks$º¿¨šd“I¬u_‰\ëXðc¬Ðù@žp¦ëE´˜±8è>,i,xð“< Ç;i®}¹¥DÇ¿~é-:?»žÙNóù‡›¹læ3÷Ý•RjèÝ@{ iu ´Ö€´´Û¦oVÏE#rêjHÕöm1GO8¼3F—…»@4TE-!*r$7GˆAEÒžp‰B!ÉwÿÛÛ_ÿÝsà”¨îf"ÞT*žRÓ$ÏlìN—¾vÁŽTì£=#iUøøò&½ŒR£IIfw0—ÅW‰AüÃ…nCJ«_5ëª bÍv¥à™óÕ‡3Ÿ§ù¹Ýpϸºº õöö{Vm’‹° /¯ï³;â­r§ϪÝÎ/nü\øŸk%¡¸: A%¥ù>=»Žuu.øŸ‡ëª´ ²Å-½i`÷C-ÉVˆ§À1¾G†ƒ¯àDƒŽ QsŽ’üRõëïïþ¿ox} œ…JD-Sº}d¶@pä²ñp}÷úŽ7ëó(‚tC ¥qÙÝ{¾ NgÒì,Úu@¤LíHÓV“HWÅ z}»¢×nAî}ÎõäÜŽ¹k·×Jy@2åÛ^©ˆtˆªÈ<ëÖpŸHc:„ÃpŠeéìž©èÍo€ây¹\!Ã}w²2šn!¹õÌuÓLè¦ý.¾èè½Ì¿ÆÇœ-4Uši¦õ4 tedB;Ÿ^½­O6O³µoG–ùØpW&øœ§«u} `hÝ'(²ZÝ~ýê «mP½ò¦‰ ÜRé!óð€38T¢[ Ä(ªÀî>ÝïfwÜõF@ù]$ z䃳D¸õ„?·‹ã} úeµ<¹ Deùçg¿=ë°äQØ!W5Z²ãÇzXçÑž~"ý󜬴7–·Ðº­ØCö¤?Š dN/cSƒ™ 0± *\uGÂÔòxÝ(;íÊÁÀzG #³ÿAãVÙ†øj!±·)ÌñŒÀ­ºûð‹mÚ»/ï«83Q%D¨Þ¦_2Ð@³æ¢pJ;µEPTsîÿc–y·ÝBëÃÉ Š …ѹààhô!FrƒcH¶!ÄÓöYXt™i€™îÌ'”¸ú?Y¤<«‡ÐÙ«Xغ)&ÆQµÎF!0†›@(1Ó]¼&/ N»f;Ù§…IUp§O]„¡Ö ®³„£D€¢õö^{:ß=w—™Äh lÓL‘ëP4/a¯‰¾©.-xá2(Zú”PhGHóº7a,hȾ+fóEu©Bš„pó~½˜wó¢¢»)NS8ù¤ Çß&Ÿ Ò+)W¶SîO|z˜˜“¥ÈWg«ZF½t0‘Uç_:¶´šð‘#ð0—1:à …â˜õ–ç“£Mƒ4Ííî!€õîî­¬M•%£+O=®ÎéM†ñ¤ÍKû~»Ýn+‘&kÚK~£y2:´3JFòòGë2ÐWtR%3œJ@V’,.«ŽhÈ®Xݼ†E>¾r¥zuºàíw÷.kGKHÕÓDÉJ‡ÜÞäǃÙaíqü3én­é5‘»ëvèNÝT¨Vp‰GÆ&#ì°¶ã% ¿—e”$ qµÁzsƒgI%ˆ M\r0v§¨H =`GCv–C"pÆwØê¹êj½“iQcLéNfÓ2Ǥ„ÎR(;FšEí¤0-˜‰Ð-G•‘½aTÀÒÝÕ¢îÑK)`—¾—=ü¤åë«ê@ µY‹†sPUGšiÑH‡óspê‡,+Þ?VJùÙ€²¥s¶(¯Á`Ä^qÜWyÊš+c›¾×ä{$!p*ÜÑ™8ˆ‹ |ýÍ}ºÂ»sÐ/üÙ3@£@Ä“&.LJ O¸ÿbŒÄ™TË{­åõr,¦i¹²§~‡d2„‰C!"ªÈžÝŽtá牲çàØV*ª iæ† ¡fjÚ}˜ û~Ž,(Û±Ëi•ò­Þ9®ÉiCëíú>ߣ|éÈH16Iî‚ –v½³O¬ûøIá&›£’aœZáÑÁµÙ(Ú”cʦuÎèSM@¨2KÉxÓ$õù×õÇÅÙåúôìyc!€N©„q¾tï—¡­hžMäG¾z~frK€à E†HæýÛÓòN¨‚.QØ m×¥KE1)VC A€…ÆJh–wi3ÖÖMѾŽ”b#؉Mú‹Kt}¬%YîçaŸOÝÆ‡ËRäìR]ÿÆY$%`àA¸/Pñ`î“l K©Ñ3¹B›•¥½Uµ®Tàî̄Ŀz]\ÙÅ…;^.,ï|GQ¶V:yíBkÈ÷¥(B¿9ßÄjÉê¦ë¯Ýµ65ÅÍV€ ¶·ad]­!ÃÁP:Á¸`ˆ;!/Ž¿×?|ÂèOˆXZ†©LçžBÅÝ|>{óO_³e¾Z3¯Iw¸RµÃ^6T4Ì-¾¸Žéî’ùDu§ ˜¾Wm }pTYŽHë錇h-ˆðFoŽLÿØ’[§SÕÚõ0;Weï8¾ž!8°,ì îÓ®Ì)gR”Çàìè[ƒïñ[Ù#ŸrãwR²öòCÞ2+†µµnjרRÁ|ÿW>¾¶ýøÛý«_v² &ªˆÏôšJ7Ëž`¶ÆÖáܬ»eò¾ˆ·Ê:‡g%o‘£É¸ö4ÏÄ¥“ Om0ŒKaìuöGèÓ«uz‘Û§l󇿙ðûSF ó(RìÉ”å=Ùü'•Ó~Â'Êq´ÞàÇC/tstyù…­J\µ³Vpvzd!ÂâW¿ßWéê—ÆÛ»oλÎ4º¨Ti’öt5 ÑÐTÕ¹ÎLzR „”â .'ëÇéq `O,…DSPH¨Tš±ÿꉽäcú! / ªZé¤g]¶ ½é«²+…zùi·Oq_Ÿ(¥\ã“Á”8ÅŽ<Ж|"ÓåN2'ÒsZªÞ_ "2ç^e÷ޱIuèä+”ØëRu,T7þ‚#dg Ëûz_‘Q2Žc‰•‡Ÿtd^Å Ú× p¬4ÛßnXÊ¢<-‘ÜÐJÉÁ¶aÚrï,ÉvÐb4;Ô|V†Ä™öŠxÛ§_ÒqQƒ}ƈٳ7/R#•pF1Œ7®tÕÞƒ”5—ç·Avú²Óob¨´12ˆQŽf6èë&Ñ·d‡'„`®ÙSï¶™—ÕNÒ·û“þ‘ýXưZQy}÷êéÇ>¹ÍFwÉÕ>|UŸ,O•ô)YÆ5@o‡¨8—ÙG+pô)÷TDVÅøæÍz¦g»;N¦ßó€£ÓÖŸfpÅÅê¼¹ïs÷‚ÀsâI®IŸz1Ú3 ÙF$D€iWUK™Ö9&bDÝWx•P QÉ9ƒûÆÈñ’¿v´‘WŽÂÙcIFÇ2û£oiâsSÕ’lE¥ìºîˆñvÓ ѸüUU½&ûÙóª boötž—Ò©Úoݘˆ°Yí¯êúYÔúÀàÖ=k,ŽEÅ,¯©ÜO¿:‡KŒÕ)€V±ºøÍ‰è']=^ë {nW,†K´éÆÍ/N ì“[þþ¹Fɉ´Ÿ­½é\î ÎA²Ýãòo+d/r–µÅ9u5ÑoWsÄ퇯—3æË´£o{É„Õefs±VŸW;ùý_•^°hªÔáçJ?â.ÜÁ¬i‹¸‰r÷TÕÄwò3˰^y®£‡ñ» fí,:)Ç\ö‰lÀƒõFñkr¸Ã‡ü®Ó7ú§­c·EPH ']‚ö°'ªæ=úP þÍÍí o^`y;×6Rh{Y´A<Žá£öFnê»y8ª¨úQ3“SÓ Þ¦Sõ—£e…(¹ïq6½V¦÷Ç‚à‘]‘Éß¶Þ¹%KÏŒá0Çs†Öå‘èŸÙXëÄpÇb«£•ú‹n´:•tÆ7¹¥†s" pö¾¿öÈüÝ·},*¶Òƒþ8´ Y¯y“êÕÍ©ŒïýÜÇËSñ`;9]Ì‚oo~ß¾ úåöwôÅ—ÁFTGž9Ó?r|œôÙí@b|ÈZ,{°B­pó(AÊÓRªD&ÝW1‡&m£¶ÀKQys·öloÆÖŒQÚ6Ëa%„6Ä=-æ²yvëÓ1?m‡“;,mvvtW©[Pžm“p·FÚŠL÷£ŠœØY°Ð"ì|©n(Eü³¾·Ç§Ûmì$ìxn‚'ÜHô§8 ËècdVÈ¥„’Hï)A8|þ‹?½mö þâ¬OÂ-rà„’¢m’bj­³Ùþ ¿}>­ b¢=*–¨DOtºsé Àû«TA%ÑšKH5^V8¦Óõø¤Rx{RæöÃd.?¸ôGÀÑ“·ÇKƶ­ë`A»x@XÒy[ÛúÃÎîï"®"}k²ÏB^5CýòÅNp¹¤ÐÚÔµ6ìdA<¸ˆ·œ(˜’×u8ÃåáÐ2î6†1ºi˜t•µÙ±-ÙH©B UÀjþu²8\ ?ƒEú|×ÞâqúõsZž–'½[ÈiOÖíLNqgÍÛE ðc­=}&Qà­j¸F€½ÊQ(Ñ ·›çѪs†ÊÁ9é'àYC.9¬Ãöß!ìn¿î©¿RóÿÍëÑi„Ö± =ÕÐ.Íøøæ(¥Ã¹Ý¾¥\†ö\MXˆÒ)å3áà¤Ê[§‡r –@%ìM¨~|‘~CiÈÌzšÏòCÕÙ*íoÝâ˳.79=ô@ÓÁ¨æê½÷¯é›oÃëíÂÎ>gÓxØ“ª¢-»3õ9„LW”­ä\¶d¹§Í\o™T¦\µ–æ ÃÑ让^mѺ[|–ÝÎ'”‰\oª(m, š„l]êá„öˆI"ÁÒñlZz‡mŒ1Ö¤Ij+[éz( €ì_ÍÝ$Q]|ÜC½ÎÂ=§¶ÞèfÊ{ÒÊîÛ$Zàv±ˆ‘òl–Ÿg½gúãu’Ÿ¢šgÀ/®XAK+R ›Õg/× žC$×ÂhU_†cëT¦F*Ê¡lqzIaÞë¡íϹ?ŸT¿àxïN„†Æloç\Y@-)SÀ–K42›Iqu îRÇdN¤ýÞ.Aã²ÒÆÉ¥ÀRpVÒ°“À!J{z’SÁA„œX'$“yj\# ê"9¡rž‘†­€¢Šú»{ ¡5……æ¼ë=4w¦>#Ê·õ×mÚoÍ#ÆncéÅ$FãÀŒ¸GXþdÍRkÿÝÈNѹ­(Ç>)ã5ìÆ©ô»pÏý’&öûW˛ۋ+:Þ;%TwɈ´ÇùÀ,Þ“HŽ2úÎW¸Y&6anÁÞ¬—ô™\Û*ÝÌWêRÕðAç3Ü6þUÐÕ,lâõ2¨2V…ªIßþí»ß|¼ußí¶!˜Äp·1‡¤téû}¬áê ¶ óŠˆ4Þ,´:îB¨ÄÝ48DÅMTiN¶‡¤Ý%ÐTà„™' ExÉõ¿þ­9sJB'„Ùó…í=ŒâN¹îðœÞv{òœÞ§Ë ‘Ím¡Eº˜¢ÉØ î)÷é¨Né'ÜÑ­­Ékvu53~ P±]£U¶p:)x~×%ÇÞ' "™2¿—  I7ÕÆcA—€$QÍáC”Æg$ †àT#|ﳤJ¿I¡Ršˆsd§~õÿùûů/µy-~¥¯•iפ %ßÈNÿ"–Îço¼i–®UŒÒì4õ«·Ûïî*]¿øAâÜÍžñ¶ZHã¢q!AU·•(>ß#’Á­‚*w‹ûgHIcTu aj&Ó*¨97a’Q‚yÜÌÄBÜ(° ‹”Bl^®oþxY‰„J“Õ(² u€–D ˆyPc0Óˆ.W CðfÖã*ºkðƃ6^Q=…À ´샺¶¯+1JOÆJ\ÖjTxvÏlŽ;1 ùŽJ8ÀðÔ•Úœ’ß›V–0ìBdžMTë®Qô,^>°î™'s ø—¯þöÕ?ÿõž›G1¸Sº¸ÓUÓÞ ¦žT8“åMpˆ'Ì“m4(®Eá•4 ©Ø:—[¯jÙ^[¨–ŽùnÅü5ݼQ,„&ܯó½hõ6m­j Ê{[¬glg•Q]7*RÉro·q†´’€¢12Å|7 wÍN­‰¯?ðÛ·Üà6Ξ.^ü¾’{¹ŸÍcHdÐÅÍBþœ®1ˆÁ÷v®Â*ŠTî^¨V•ŠlUÄCO.±ªª~´eTQ³¨^8ÃgÄ>Ÿ3:ÖÚ‰ŠOY2[ž“ŽžmEÊ@‚®°þã?Teȶ¸( 9ž05ûxw·¿”»tqV_¼œ«bxTõ}-„€ßäs]²0TrXOAV‚Á=ç¡ðFUó(ÿü¿Üþúx®’#‘Yƒ ts¨'4™ŠyãµZJ¢ÏÌDly{£³ŠqgJ¨Üª† êIDî*¦__îw~~ÿ2È•³ôÛ›g|¾¾Ø?ó»@Cµep7êÝr¾ql¢ïlWEu;ÿhB.µ ·¸åÊì|©rYŸÁP…7+÷…Tµ4|ÿrÏpªˆµùósQÈ߉ƒ| ó`¿£Àp¢<•YàùÁ7Š ž=Z.¬EZ– Ìvw9mœY"&£–úÏÇÙüMÚ¤8ÅåÄè:4ÛÅoIAü¦Ý—ìE×A¯ÏZñŠ¿þÝ_<ÌâS׫—dž02Hv:tÑ`®DÆ:"þ_öÔ Ù(Ö 7¸Fs£æj‰•¸o¡¨Ø:¨A!×Jª&ƒï}kßQTM¤i6¶º=³škTØ96dîg{§þõ@Å? oxhâG/Å' õž¼œ2þpšó[P-ñÝÇ_>Òk{M—ºò»ý¥òö¦9"ê?9èÉ Ç~Þ£±Êð1GGhë ¯VW»0íõ$m=¼Ø:}uZÛòÙškö©½|QøþÐvëÛ?¥‡ËÅä/-XºvH%(L°äAgˆ§T…ôø4œ=+Ü>¿ÜìE9Þc "gqvs_š?œjg¢×ëµ,Wëõ~v"Ã÷—*eŒX(úü•,¿F^ÿq†–¨í¿÷ôðDd6jó¼Ñ&/étkÇ_]ùì5ýŽRãò©à*“oÌZ7žp&õ€a#O,ט•† »»¿ûžÔ“24{ˆÜòQë]ØföúKKGK„{ <žþöt,þ¤Çãò™àrÔ«åKù`)mè§Qg@¿Ñ-IðáfûßãUœp_ÅàÇc—ûo_®õ±hO hc¡µÃ:²ÅÇn_‡ŸÀ(gÚÑ‘T?cùÂwÄ×»Êg´!–¿ýþæöæ™H¡µïþœn™€y Yý:\­pªôwϧ¡¢nX¸­¯uÿI~R95é'ØÐÁòÅ®¿Ÿ¯t¨©ôƒíWLôrµ½ùI~ÞŸ_?´°(jµøŸ>žÏ&JÆh±u'ÍÂòîÁÓñºf[­÷ÙeðScB|VéݹêŽÊò™øìanè N>°3Áß ù]U¡Vë²2u”’öÔÈäÅ®ž+êj»yûB§Qޤ}±°Èþ B“9†ŸèZÓ§“áŸU¤ütŠrý)ʧÀY^OW1~šèXy›t1]FÚãüY@5îîû (Rþ?˜[`ºöAüËŠ®¨2Ž •4âº'l`öy‚ëE­›¢‘§•G»è*<(žúÙpÚ“álÐá?4¶‚žý⇥Ӥ•¿´:Ð!I¸§áýßt1ÌÊJ ;˜Én{Ó@WçÍ(ÉÕaçÇиàØð(í @ýn‹«û‹b\?–ù÷ Ïž@¡Ïƒy<&×,‡8Dííb2÷•†Û±ÿmùjÉ«ÆäX9À"Þòhô»³»1;Ÿ9ÞéÛ)^(YãùôOuøð±œ qŒÃþ±å`›~j°-ŸHŸÿŽI¾¿Ô¨Û–ñw.¥Ñ€8Ø' P¯°Ð>àq.>$G85VVÍ»å\ýM«Ÿ]ÉGßá?Ÿ´ï ÕÖßî]Ê·?·uñï&Á8^ž g2AèZ+¼3þñ0wªN¶ÖÙe®×ÛUf…þzÁñ izºöÂLq`äÒõS¸9iã3‰+&<—ji…Dõç’‡Ô.?EyJœ½¶LàÃ+?Í`G ²ÇOÆ_ZZ'G'Ü?ûø6͆:JnVÖš0ÛÞ] .rZ[‡ß Êÿ‰Ì樖u+¢úìS~&hEð?Y £Q½±‚FP^Üyof÷ð3ÉY˃búRÛ(àì²PH\2Í·mpÐÉÍ9ŠV´!ñó¦/-eF€â×;‹Múñ¡OõçDqÁYí…ãß:âì§µƒm-©ìQ`ºV',hЊûÍÝÅdô@™=sÍŽLr¹[Ÿo,‘:Ÿ Ûe‚Ô=yBè¨Iôrf‹ƒ€8_®o¹»~`{Î&|ðôqgi8 Aò¥Ë±Ö}@ÉA‘)],´j®îWÉÞ¿sx!ÄwˆMœáöú·ð͵ŽÄßzh8²T§_­mÕ“ùâe:ñ}®O,?Zþ9í88~†Œ”A_ywööõ£m²€¾¿ž!~J¦ÉG˱‘‘Ü?7OJÞñ%t\"õS—“4ï(>óè×.“Z®!òâÄÏA´tøHÊ•QZ”—/Þ}·x•!l³û(îoäŸÅ¢¶Þ¾X4³æiÄñÓ%ÓcîƒR—p°Ýq}Ž_4? uÆÃ•ŸÄëýI$îÀÃ~(‡Gûè ŽÈ)+Ÿ·¨‡oDMýg»Jo6ç=¯2Ô8›u”•D®™â]*´è#£W2©0üö0Öe•oß–bÉ’.nÓúòçQ6NèÎA®sðìË–ÓrãXê‹Àûq¶ýfþÁs– øØFi'–ú2ξkP{UÎd^¢’ ˆîŒß,âê £êñžÆáY'Õ"þ…ßÞ@wBÜÒþýóŸNHtlxÃp~&ÍÓI|v¢ûBÞ÷)ÙM>½°éq#‘ŒÙâ¬Þʾ‹ë3ÍÙ9)½´ì|n$ÎDŽáªþ‡ãÊ…‚dsé=ŠÌCAÀóõËø{%tcè‘þñÅŸD½}:öû49íDóúsžÁ)¥“ÇS –^ì¸úeÕ,\Oß?$EDŠ.ï6ûæAñjÛgI?|ºkuï¹Û,>%>Zà¡$î' –DÚtãû©ÛÏqŠ>»æ(]A“GªuxþgÎß_ö:rü­Ý±½’y˃™Lj—Rý²‡Ñ@K|桺”õÅQUñiõñ“KŸ2Yù³p¶Óò£ì¶À~¹2b&Ç–<ºÓÞBÄ dñ9íìïçïÿ¹é’Ò?Á š°÷oôæã'¢“Mžr=éFtâîç>o‡1ÖEh%Ž5Ln™È©Ì9ÓZŸ6ƒ¸î…À¼8u#e!Ž}ùòåQt’çm£HÕì›ðýn{þG½Lþ‚Ëù:-™Ö:èï]ú(Á"ãj‚MÞ¬þæÍ¿9;F~´ ¯Ó—ŸUÛ4”"^PÊÁ_¼ËfÔ«F€l`pÜ`(Vt¢äy LAº»9©”s kñV÷©—Ð^þawþÍ÷?¼]õA§¡³»ËßßÊhOß‘I´ñù¬\hÿÓÙÙÕîîÙ‘FŸØýC#•ñ£0² Zû³û:’·sDúœîXÏ´fc0O ÎÔ4¸Fº%­™XuJCN4ÐSX}¨”ÕL†XÊl“a8ZÃ0–¤k¶D5sž PˆÐìf9Bh»½~ìÁ#”°¸¸ß×/‰§m<®™¨úy~·ÞnÖÏ~8ÒèSÈÏ/_†8.üÝï.ÀÕüã…^jƒí/(÷v±‘XGwsJlÏ’Ôæ²Ãìå}¬\Ô"b5ƒÑX „›uá'(p Æ lÃö7¢â"–µ 7Þ¢šWHDÜ=ˆ[ÖꪪwT@ÜI°Æ¹ Ä¹ØÖª¤HaÙìõüŸ¿ÙËÙí&D…»Š‹ÀÍ· ANÄ'ø¯Þ¼ÿå¼d&ë ØNj= iÇ.Föß/ì¨SÂOT~>ï“¡ôÙ«÷nd³Øqƒ8»"q7ÇݽxSoUë*Vï„ûº¡–ÉWrÕ˜¨#~õNÏïekÔH×X…Ë»›Õb¿—X¯|kÝðl¡?,¿z#1hJ—;DÕ·35Qe¹ÿøIÅH›í‚®Õܶu¸‰‹míïVàB›½w\F$u§‡s0 {Qj0ß¼›}çïö¿ºÀÌiBŽt¼•X"P1B( I›·öý¯¾‘…öú9tZki4A×ÝÇV$Õ"‹©ø…“}á‡Á¶Ä$lcpŠhB0_ÔoþŽ)¤‡Ú©Z÷ÛÃÄï!Doý{â3HgðG…vªQåùèfã¯_¡}ò´ÜE º¨xrAÍ” b€¥#F H&–(«L¬¢p¯T˜ …¾© ânM‚ù áÆv)ĸ¼ç ñ§×bÍnÅ3ßÄBø—ËÊ›õtãfé;Ó:$[σã•ù‡ÕÒÕ­ÝþË™.âÍåLÝo$^lÓ Úö«0«T%T•nC¬eŸèçB¸]‚Â&-÷N¹‹bb “2Уì½§›(µRý uÅštw»ðæF5OG%:«Ðç“:¶ª-4>@üæ¼{R‚8zuëA)d ?²sìpZ P–ãÃèlNG§'WS-:Ò'ˆ†:%?öŒ,o´|­7o~ÿõùøÛ¼PŠ€é¿Õ÷TaB%ÖØœ{ Ñ›ÿŸ»7k’#IÒÄ>U5w;#òP¨««ºº«{zçØyX™!ÈŠðoü§’B!ey-);Ùéžî®…*‰DfÆ}¸™©òÁãðˆŒLdȲT Ȉpssssu5½ìS…±ˆ3سÁà»Ö'G#I%æ“6š%lÄO'uÔÏêõ~ ¨å ÛXé Õó <ÈTäÜ„*]—íô;3‡©†™ÄÆÄU†D4rCP[cÓ÷œ²Á9ýÓy‹ ˆG†j0kI"äR‘$©CP"ÓQÍ,u¨©ÁˆD#sT¢`lLÑq¨¬1ÃL™œPT˜Ì©²àeÊjë¢æÒUTZ㯅ˆRzè×*Z¸ºÆe¿¾3z >±ä­]/;Šÿ÷ÆÙùj{ÐÌæò7,[ZiC‹^-<}uºûÙaºè=BÔ3r8!gÌŒb Ç}«{屃8šZ ›º´g±½3Ž¢!Òž’h}ÐÔ"[z¦Õ¾Õ”GT£¼Ÿ¡~àlˆ¼¨’)M]DÊÆÏ›‰ìôÀŽ[Px­›ÚêÌê,1vfF<¦„äôž;¥Ä¬1hºõD9›œ#뜠/Üb[” ´#<ªÚ¬O¬FfM7fáÔ±i왂و&*J™r!JVyÉ ^J×-´zþ+>‹[K]EW³ñkß­ž‡Í϶å[QÚÕÐÙA¿2ŠÅùî‘U•`šsòB*Îu.6Óñi­³Ðà æÊk˜‡Øâð2ÀT…£Š@µX¹¬´!$ˆ8ª°A•ücüõ¾ вܘbĤ¨ÆGÊ)iP&Òű±„¸«ñ¼¶ÓöÚo÷SfÅO+²{Ö´QØ­6›>7‰Ü Æ#ÇÕ~@RAB±£px: ÓЌֈڨMŒ[Ï¢“³ŠVb°Ñ® sªƒ]æ8 ûcjB™÷È2±Ä ”À ±¥‘H¤¬K‰#ŸK–±KÝ|ZÐO’1p=*óèãÚw)(¤ìÖ²ù¬•\À8iIâäbϯ:Ø«o!W£Kk ãÍwaU¸¬Ž^Ùÿu¤.Š»¿¨¾¯\&‹ $È‹µaÁ;t½µo›~öÊt VðR7ßÞõRó,iW+ h5«ò¤¡i¢\(ª‹"êåÓ·tÊ ±Jo×]x¯q{7˜ ן†Dô GØ››Ýµ2ï—½¨[>\×q)ýt:ÙMãÒ[š—|”—öd Þu3’(]G¿ÀD[z×Ù^µ7Î^mN.»¿—ß·V}Z™ýÍðÔ×\·¡~2ºm>»tÚ®?Ÿs}Ü6_®-Tp'[;Ozõ=10Mx®‹Ñj‚·Z´œ´jçí‘]1Š…õ—bí“Í×ïîóJ›¶È‹7¼Hü$=_Fo€ÏnqÐkJþz«m¦)i=­ôÎì0QLç‰øW_ªÏOÝùÄçoæ– K{ùÀÚ­pªÊÝ XúӳĭÐO·n¾Šé¶z$då´šuuzþÿRÏ—G¥1NÚf Ö ©Ê: €ü¤©N?³KôþªJKÏÝ–eï³ÕÆEQJ+—~{÷˜óÝñ™½„®˜º¹í¨ ußRŽû‘)2%´¨Hó²KdÕ\í“ÞÃ71ÔË0F×B0%…Ûâm$îÿDt#|ÚurË“²¦«^´6ÖZê#5IH¼ãÂY°æ)[Ø]'¢ýÊik2«\<ørº®ÁÖÇcÀ vªºŒßÜÖ´–à-¸^B¯"Ï~:ke«wg~`É닇–Ë"Þ2œ§!Q!ð¢ È"èΦ‘¥dá/Wf™3!Ï+Û/}…çá&OMÁ†UÈËôYõ½^›Õ[á}›Å"^áÒ?¡Q|õÆ¥ñXe™ðÏQ稔#S-iCÜöPnu‡˜|?¿°'ýÊn?pù– æù8æ ‡Á¥î'€½»IA¡7Nku«¯jxsÏåkRÉ3pñØRžÆA#é› ¤QÖQÑ鼤ê2ý…½éàG½5Œ¨2­ØÌrwhQJ•4nùŠØf°ß6ÝŸvNo+#“.ýRüRzFÜ® ü®ËR3¥e5÷UË" ¼X}2²{Ó3 Ž—ÜíMfnÎèk§KR®¾ù6²÷oŸÊõ®ÖO5Ûqj·¯U¥¶ÖNhçhscQKîâI´&ê` ²q¥g³­ƒÙzÝ+Q`/éú×á3m¬µõêwœJ(L“·8ŒW¦m2¤­}À‡ &9Á¼F×âxi¥òžz3NöîwÃ+ ãÚM/éA Õ±ŸŒ~Â"X³â]}“6yÍå•ét ·*}Ù´.*¬MNÙŸÞÀXvs­F´ -ÆlžOn—Ñn>ïÚT²^ªýÎÕ˜ô~+ºæf¨`ãÁ‚¯ºh½À”eÇ6c‹´Ñ  ááÉy,)¥ó^rÝKGz)ͳ.ÕÎYûó¢r>í[ÆåôVÝf•’Æ;=Ú«7儳åO+Vb$þ·ñüèWy7§þMRé1üÖüíÐæ’¨ë6¦{×ð]:¤MW³üö5ˆ…ÂH “ñíúÎ~ZUl+•âWo½¥%ðïî*—‡ i}·Ä,ëà¥զװ†IÒqH¥ìêÛá¹Õ|6†¸ÖÞ´»Lkïü»xŸ×}Wº®Y®½q–ç ½k³¿å):¯¾·\6 ³aŸö†¤­F°ÞÇѪHߨ֦zM˜ïw‹nb^\kÓîR~[Œ¸-çÒ†&­f5ZBl­É¤…¾eEAš‹®´up–ñYJ½mæºÑ™‰åžÒ Û]tϪ^;<~í˜×»5 §@é…ZÅggƒ§Of÷Ìó"Ty.˜k¥jz&§ …i›0}ùL\çE/C"guákúFÞ)¢ë«ô׎oþ”ô ºŠ­Þš…Ê·õV«RZ7·ç*,·—,NêUjl[kÖ\ig¼2Ñ»¥‚ô™úÑ F} Á·U͹]Ú|бÍyšO©éG0KøÐÏ"/b¬ÖºÂ{†ÁÒ¼™ÙÌŸí¾_Æ×\óEµ‚7°Ð³ã㇕›Ìî;c1ÜdkñÍ«·[ Öß] W¼¨õs‡sÜTWëfi¯V¬˜¶ÒÚׇºü²–¬µOy³ãÉÖ1”+è\2ôE}Š—ÌÌ V~Ô;íÔ¯hùó ’<óÈ®š™-«­Ò.žrCº"¡p±\•uú”î’¢·3®Lîíš,ö8™là aþq™é½ºŠÅ£Gq¸?­Û–[X“pÛ\çî–wcLOßß¹°Jß–Ìzk²°„{à«A }NS²"!²ãB“X<Aƒ©2 ÌËyÛ°ÿ—Ÿnà„ºBP©MAjP¬ bŠJ` fʦƒÙ4V"©2O$áà9FJ±@™Yæ¨s]¼‘bá#ßkôÏÛuÜ•“ëÂí¼Ì^ĬVøy‹x¢ñA¯Ço;HùT§íýÉ! wH•‚¡¬É#WbBÓõDl´ãóè!5¸QHÓØ4™Ö£ã`,ªÂäà)!†Â‚rf0 ä‚*ˆ ´˜ô@š¤ ƒ°#3“4ƪyϘo yd!2m° ¯;æGRu9aá1E¥šÅï‡Õ´9{–$õ2fÔ 9¶)“'6uêUœXœ²™ˆˆõ˜î¯»6`^Ñuc7¾_¿`ñjìž;Ý«Üiº•ÖÍÆ±Ö‡ÃÇ6J|Ê16*u]-¡>uFlJ¬Zóc¯½£èét+èKÆêgÑ(«yK(„–å±é-Û푲I“Îٔɇ±LSòÁ¨ãd”RHÕ™‚‡P º#šçjŽü¬ž„8nÍ|mDŽãÚMÙ£9ª$†‰<Ž"T D AŒj4­$†áÑÓQ½û½í‹sÎÇàª>Þ§v¤j0@ÁÁkš×àxè6" —HÔŸ+ðã½,¥BØ™!` \,µºÊ'(T@ÚD^,V¿-Ù‚¸ûdvžå‹zKUV.£×XøÞšýP*s5·`ŽaA‰¹’^T…TU rÆEùyW‰³ˆ”9z& 4Du¦qjÊU}ÄiF˜e2R4OÙžsˆ{!ޓЋZɽ¶*§Æq¯¢îÝé‘ìzÄHƒ+³psØóÌ.‘ègž$XÂgQ²4ŠsȘÙNHœ¸‘qsâ ¢Ûi„óÐ 7DǦM“–ù9G¹%u?óFÂ?î¡©‘,¶L¥’BOþ_àóÝfÃeAI4ĉ˜áƒ81e†åšˆÂ´P*ÈÈ" æ|Z¶WÄæ GÌ·§Ï¾Ùý‹OêWnª[蔕àÍHÚm±Ñë«u+>‹~Ò¹x|R½yŸ‘SB„]T˜r3ÇÂ,FmO΢¨\”˜%Ä‘ù`¤ )5“Ôf Ì¢’ˆù€*±©iî 5A°ñŸÃI÷Þ§;Î y° cÄÎ Øç9#ŸÅÔP³3ŽæØaÔ ”›ë?‹ìÛÎI=©ÍÔžê^"‰D!çDT“„j1mM*B ¦à*S4a‘q G4q‘XAFY ª°o"ÑóðOgö4ùüaK+‘ª4G0A•<Œ­”H3"˜n:ø .:©Êœ¹Ô.­tðšôFù,^¨•`ænꦾ5MCל0Å.+£¨™Ñø‹³Gúñ_t„X£“E8Öḧ9e˜Á‚Ö ¤p"˜Ôhàcÿ$|/ûû‡˜ÔыʬLSsñDSÂ9ø\¹JRI¹ ¿I›HêfŠjPŽÈˆ…Æ øÀÄZNBœ± ÆJ A•DRyñÄ,»G©Km¼“ ÌXœ#¢nªÎÅ:9fDEÔ 7L`!r UBˆb ŒMØb`a#Z:›´Î—1òEð­mDÛç5â![•ìMk^<ã¶w¾ßo{]6³5þ Q`î®`+vÿYµ’¨NT$ °ðˆYÞd*<ßl¶ìbIGêã _ë>ø|'…NÔR1R嘫¸èc@TÇ4™A5zN£<µè!ægjVoõ‚½—{£UÃ8H6Tž¥1’„Öy$ƒ““‰öIljv‰¬Þ ¡‰¾8ç=¤Ò9'‚Hêzæ}Bí˜GTÖ˜5d_U¶×bcÓd~ų󳋅xN­a½6}Þf¢êÚ¥ËdóX¯Äê¢ËŠ=•rG·Awš Äå;»ûÙ–ƒÔÐÈNMÁ€Q ŠB ƒkÄÊ2&86 *¢93! ”ÀyUMÙ†âØB $c $®ëwh 3K˜}eœ¨>J‰Oà§bŠ”¸ë=¨TsT³ö™2«VúÊ"|èAìÍŽdúøß­Æ¿â3®íîzGiÍ _RÍxñ¸}^ïpEh¡†EÚ¢¬‹5Ê-Ô¸WºÚMö¡¼SD+ †yéE€=‘Ü1­0iKÕdM· ²²Ø4«æ`q+]×ÌYÊâËm5âi8ì¡™mK&Y÷÷¾ÑxQ¡w,â{«û`^ŽfÁÎnMK߻ɕ–c.íCy÷R:/™Ùµõ„æoþêÇXѧY2«.ÅA9·¢ôH—,¸A̧šÇáè6ÃÛ…Ñ‚¸tÑ·ÒÕh.¼X·B¶¶ð¯¦=nÕÞ>­'>läPëòçÅ„©ŸETë¿HÓ3KE)Ô‡-Ñ£U~¶¦»§=]¿xéÒo %‘„Ýio¿¹ÀÏŒÖ&Émÿù-}åÇBÈóÑ„½Ú澓Փd¾n'Œ9ÕJ"™©.œi§—Å$AkíZïdgeó$UÛfjÙ’ðVI{:ôþL¹ìRyö®Þî^*Ë—u‡u‘U›Œ«?ª­ »bcʦkveQ,/Gn·Ý¬Í®=ÆËÆ»ü©¸Lø¶Ý>äïñ¿c+°¦ŸÝ½ä 5¤M Šm Àˆ -liÑ_ìa~$IölÐS”Õ¶%mBâmiò²1¥å3ßmú7kþ¶h}NÞU)vsZ.fꟴknQ—kM·¢Õ7_¼¶¯xdõúžù!¶Y×@F|Y>û¼¯¸¿“Ö/¸Î^B­ë\à]£;h\:N+rCÂÈ—À VZ·­€K×Z‰D#¤LƒÇIã @ú_>^œOR»)èò]yLë껯Ÿ-èbŠ•]üÊ0ó½z5,C«ƒ—².d‰9i˜j¿ÕzC£¿xM“X×Zvg8çuèÜ¿¹ MFZf·luj?‘Ûé¤rÕCÂb},˜kæÄ*cA“ç®e¯\]áZSI³óXo½ÚûýÎ=«‹´¶g¶„çxÝ¡¿5Õ€äªgR(P„Á7?|«ñÂKÚ1þÅæ·õ\j³bÇê¾ãtz‹þSBRÉ©ý®¯#¯Lk\rwî’hÓ¬ÛøZ°ü@]äes#Ör±ïµ~ “ÔvºêoÕ÷iRmÜÑôJ´f-½Ó|¶ÆH—„€VGÇš>-"›%HЭ΋K®Vüª¾ÖLG· …6í§Í;SøèÆ´6߯ÀgïjÛUdÝ„¶#f´§,ÛÂêœoš+v»»fú"QzkÙfðGÍë€þh™`ûõ8n¶¨Š¡ÎÃn¸üém×.K°BÅj:NÆ2~±\M&vß)/ØÍ¨[ú¼| _»¾éíÒÕbtyTÙ¬ä»>mÀoøv‡‡ƒ|¹ÓætÍó_z5ðÙñYRåËK÷ÜqŠå¼ÙŸÉ;št.}Ø6cµÕÒ¡½´ñZ[p¬XÌUjt»zmº±61ìNgÅüÿ,m­|ÑQC·åÞlme‰…õÚÓŠ(n¥¸–PLDz˜üpRÙm]o Ú+˜UÙ|/ñ]Ds|­ÝRÉO{ïu«¯¶V¯Ur-„®wKl¦Ù“tšI2èhîÝ%×zmr W­ßnñ°w†JùwÄ~«‚d+ >Ý©ÎþãyaÕ¬t«eÓ³Ë~…ß–$•‘´ßƒÏã‚[7Òsç«ë++W­YMw(²ü´ä3~óí6\fLÂ2,«åª¶Ô¢Hš‡íðÕ£õŽV¶å+®Xf B€¤÷0 oŒ 6yÒ&še(gݵ$ŒÐ’¹w@žÍ“/$]«b™§È¶÷i½ò"ÖÅÖ¶Ã]èuiU-Ò…’ ’ÿØ»¥y1zöxп©™z‡è’¸Ý…<Çm|RÔ¤[á"ˆK“Öé@mú ¬àC_ç9¿„ú„)$;iðy)¿:—९*îxfÜnmÌKü'w…¨¼¤¬øŒ“prùïÛ¡¸Sù÷E¸“–À²q1V óØ‹eaV ¬—Щ¯*$Àt2¸¬ÆüÜéäÞ2#\{~6€ÓAË­Û^‹?&e£ioZ„¬›>óÍ>´Ì›_"X{»_rÑk¿ø/a‹$ël¾Éu™‡bÉ~2«ƒV`˜£ ,/¶D…*c–3`ú½Íêë÷ºêöUÉå@JQ¶JèŸmõŸÉ(W3&G¦$ £àˆC R€˜T 4‡’1 "Ç×yoò’j4"ÃÌbpjÕá4šš¡h°@Ž9ª*' €,æB ب7 3ð_S26ž%n†ŒÏ‚Hr˜¬ï³7Ø…8rmÌL¨ÛÅQEgf†9Š’Æ™¥n‚Ž,0š Ú‘3¶È9J¤Á×CD"3ÁNeL63!’³@@UΤæÔ#IàƒTÄ^C¹Œ†©M,Tõò'dÔ¯mNPË#:c‚¦H‹;‹^O§y¬Y¤¤>œEªYb&‰ÎPEšÀT½Ž„$q.Frfð3m8‹ù8êf.¥óÓZ¦äœ¬¡Í°ŠQ•„Ú:{,õµïóß,†™Ûá·W2ëö‰g¥…s¹nÆÎniG„‚M ÆlVà~Ú(R°šwM\ÄtDfD¤A)zC¹5i–‡)CYg*P'1Æ^œIÃLÀÎëd¸›©òÙ^Ïb¨ÔGR1MDÙSâ3g“æó¤6Ó¸’ç¹öB´(®‡z—8§AÏ,…·®7²Ö(ÖžÃÝëIãÜZ¦àC¿;HͦŒ©),uƒ1Õ™|P³ŽÂñ„T*‚£6ð¤&T—”MÇÉÌ·\OÝãÚœ8vŽÕêμ:‚Åç`¦Saf5bB41”5õH64Šžó¥ô»:5‰År½E¨--¯ý¼ßi‹k¹H£ðâË…ØB›)ðUÕTIØ<%¤Q "3õZƒ1™ªàØ B10©‚ŒˆHUÈ1bE"˜NˆÍ{%bÑ ‡ Î@Æ•ÕÛzôéÇŸH,FV¢ˆÆé8c1oXUɲs¶hªÄxsÈ#`y.•Ã6#šxoïÕ"'uSqí` E"êî±¥ÑZ¹" (“f ‘0™±S#$Ê"‘@a$™EýêKÝ;x?‹œpà,þ^-‚/Àоœ6žÝº8¥²Ì½(}oÀÓ/on%§T? _Uzí—ȨèÅŠí°àÂø  kù¼vEüš¤lHi[\é×Í‹{¨=oTè0@¿¨Ôöî‹* Šz þа'ƒ lP³HDdÑ`Â1áÉQîÍÑÈ4žÿýùÑÃæ{ÎWBÔYðÓØ­OqbY4Ó¨°3ïvǰÜ¬‚h‡f-PÏê{‡`7hJÛ4<;ÉüI-ç”ÄÔ'މ#9̪d! “TR6D«ñЉ*1X4ƒX,sá×)ªw˜šÈµ@c†­‰×¥°µò®OèËhÃô¶òïkço°Pi_Ý›Ä?[gØËÙÖîŠãK®mÇ@€Ì[“9”—ê,m§-™ó.3<*‹7̈@/K&V#2œžøëQ4bŠÑˆc ÑçFdQ%Ñi ÆÈ¦QkÆ(zoYÔ™U,2 \ ã]nú¿ùk8÷šaÓÂVM–ؼøSÚy–B@s^à6rõtéý]Ý Ö¤¦ pˆ,‚½ ò³¯ŽyØpP°@-˜Ì‚’WI†‚M!B¹ä9ÿ&²E³Èf¤”bRCH$ŸsÇϹrR›%!²µUyàŠ×¢¯O¢Š´<½`‘¤q¢DÖª°‡´N“4ËœŒ-6`q҂Ȉ["Ó¶)Ç@êu.¥sv$Ʀ,\í™c­5Eà ¸^ê32½g¹Æè»-¦HÉÐeîpŸÝ¬ƒBÖ·•—µ‘eeL=;y µMFš˜óèK=V«®³ç‡;åVt[”#³%'*àsy±à'eÅ8óÎÞCm°fA‡›£) p ŠÑI4bó R.É(;†HlNЙ¤sOP†’µIˆM D L#Áû0iæyjIžÉ(5ª¹dRégNóid)'µzÿ´AÙñ δÚS>1õZÕi,{5þ·,ÏnD‹"\e)·îlüêÅáÁ}ºÂJ"n«Ãk ó…l§Þïß»R© Ò‡²7£ÔÝošêÉ£,õÙrÙ_²èjt¥-]Â\´¢^´ñ4/·–Mq2^)Ýg¹;]š­Ö4›^Æ”/Û4½ÆYóɨ?š½Slö¦É¶ïwz·Þ­Ð"µxüE×íýr?y&Ô·Ôù‰Ñ[ïqM”/Ú.]º·s½e˔ɛïâœjr°±žßÕù¿Œ´¬Ÿ•ò¶ïÜ}.wP-xhÐnT÷2Ž£4uë ç™MsZ“3siWêËdC’ÃÃÑY…°õÌkrý7`ׯG·YŸàm“Ë ÚK>É·´~×Étñ§GÇçqVý´‰¤:‹jÄeçAéw‚©-r¹¼ÎÏiúoŸ¬k/Ýœ^êšh k*ùAhüœwž`mÀÊÞÔôbÓwžæáÓ%OL‡ñ½Ýw¨­ 2ÚXµ.šeÕÊå57 ·Y2 ui·ÖTº±Úø¥Ž®;MkëîÁÔÏ Ñ|‹ €ëÔ2Æ!7ZnÝÄZÞ=­õr9d¶*ÖÆHKiŠòú¡à°<½¼Ý¦5I}·÷£[¹ÓóiÖ®pgt.|äD^„…®é%Üh’ƒç Ë"*×I½ºGHš8ùù)ÿ+R”j—|vSû·EkÎÄ1óे‡b@ãð‹ó÷>Èè꣛Y¯+Z€ÖºiwX{îßïÐêôמ,>þѱ»¤ŸŸEÚ6ó´ôí®Å–2 X8$–*hkبԲÞ×\%ï—NßÒ)­Žc4¥yb†É/¾ßä76KT«’]…x÷iMá/Ùk;¼ÞáWªÌh‹˜@!{tê’gd Øù¥=ùºrôÞZ9Ó¥ãŠÎׯ˜ü7qzzúüËVóßî×ß§,žÚ~åBHìgDF£RˆÅgïº}½Ê;‹Ì«ç³OdˆñËÓvdR£#‰_g»Ëª¥Û»¥5Þ*ØÖÊüHï1îN¿ûqö?}ôë½ú›yGíA¥¶Ž}^ÓÝ'›•Íé•~vË Ú+=­'-®uÍÊé†D‡'현ú¬eÓ ”ù¹E¿Z¿Ty™¨fÓ”-§ÿ8 ïOÎÚ»¿¬9)™„Wº¹0K²ä݆¡~=2ÚG_oõ†™nk6εOÝtB\BäL{Öwïwšj“<ëpnã~»Ä]¦ë΋eXj¹€ñ¼¢'2µçã#<=üc×9F««ðå/Ö7‹{nÜß匷h>Ë]>­_ë”»I2.ßÍëã9^o~ ]½Ieí)¶¨ß¥ä‹å/ÖþPŸä~ôí¯>ipEÓ ß=¶öbï<Á¼J£uS`îÎ{Hæõ– „¨ý§|/þo_fCÙ•gòíÁLòîðycü7¯ ˆæUˆ`Üæ~ÍGrg,±kÙ V{3¸¡/w½Ñ¨ó ýc,Ëf®\²Ï¼)Ùt¿=ö4êÖ›öâIãL“6FfŠ=Ãé=2¦šçñͤ5ñTÀ«±Æñ÷½æµØò3t>=œœPêvþC:¶æ;ºn®ÕÊ1Á¬§tmÞ~N\ÙV>3½MìF \+×;V Ë_Ö:ÆrÜ€í8h¾ä?gçÃ÷³g£9ÊÇÕz3 G'ŒæÉû(ý †‚u¦Ý“øÑ‘¨Õªãúá9g£ãÁ´Q ½§µ9ÔmçWÜ«ø"¥¼ª“v)‹ùçÅf$yIˆ½¾<»^‚äMgÑJÌUâ£5C°øŽ$ ƒYï_žSrTK)¡ÉžãúPÿÓ¿þÅgfÍbû’‘,LǶ *¶G¯]XušQp Ù÷Ó{͆%÷>}töÅ$ù(Å{áójƒgÏÿðùÍwð.þ`Fµ†ýÜØkEf^k«¯+;à"^FIDAT•ÅÙ©¥÷bÓ™‡ ¤Ë|G0„øôŸküÅ/?&#Í_üx\yðÞîɳ¯îï}Tß)|9E©1Pâæ¦æÖöØY<¯D£ª>Ї÷„ƒjœä_Øðã&99ÜÏCwfû/q—\Ng´žLµH×ó¾ƒdkh­8ø;pËkBk¥ì•V¨Íhø\O>úæËHïýö €g³»Ô9ë?xñe—›û÷~SOVÈÙ‹ :"WÊR¹÷8ćòÃ,Û;b‚ê£ÿE¥õ;ŸíÕK(}×¹‹-‡ Ý–DÿÕ?ÝOï§™”¤õ»ðÞ™ééN¶ºŸrÜé]¼ËÒ¹ñ„WÜF0¨þþ›v>ùÝî|ëy­ÖžöF:ý?¬Ugßÿñ‡ÆÁÇí„*Õ\8ÖÌtQ+ÂÀ†ç?ž< n~°[ãY0œ|ði«ùÍùŒŸüÕC¡"[R솮³¥»OeÒà8NöšEý€Åñwqþ_ƒÜt[<€Þ ÎÖëon/·ž»Àè»ÿû»–»÷»j+}Ž*ÉîÞ©îŠçhƒÞ¿}|»ísu4¡`hÏ/aÖ?ý’éÓç÷d@…ô蟿ÙûÕ¯¡»ò/Îÿ©ûY °`Ór}ÖKYdÛŒg ¬òñ7šs*«–o{æß8ʹ7í+1\éÞ*^zéùòçÃÙ×ߟNšŸýæ½¥¾cÈY-í9h'<üÃñ“ø‘sÕ´ÂÃýÀ€4ÒN5)N9þZÞ;LzÿªïÝ«˜=þjRßûEÃðùþ¿ø÷åø·;ÁÕUÍ7•˵ˆdf^?èí…çæå÷yi‡«o+>Ó±¤/ö.–ô6[.WÐKçèRi¹¡n­&VG¶'YÃÖ~ïüÅÞ¨þéß¶K')A˘ œ¦éßœýÿaç}n3;ug²jÒངÐ<œ>q¿ê@ëGNx#8ûó4ÙM‡Þ"ôA¥7ößTþRÊÓñrÚb§ùâµõ" «p½Ìe?7‰–¥[ãNà/_4¢ÕSVo¦)I&Þ2ÓDØ"¢¥ !5"ÌÕ%ŽX!/›í+™0ãÅñ?i jBÕ¨§„FÌtpzüý3šÐ¤Ýø›OZ…ÞƒÃq[Z¬pÈ f"çÞ;üô·O¿}òO6½×oòC×¼Ÿ ©ÕxüÔ?¼ßRƒ$‹uÚìä8öåÅ™4FÕÑ qjè`Y[Øcó¿˜Aöüsu;Tödþ¼¸ $\Þ­^ʧUç¿Ó*$yaÂ:ŽuÅAòb&ì”ØÐêU™û»]•:s:««1IâØ 1vÌ«c3br,0бªI b² ;@¢1 lŠ›ê›Uc5DRJ j 9‰B‘ON”©u´#ÎÈBúO»ÏI¨[k~ü‹ê´O†F˜Í†ß²ëÑ^gß [n=I™%uƒ6îèãóÿœÇö”\Â:C§'ƒÌ:­½šYÀR^™ý‡*=øë]jªa§ù”?w˜ãQÐåY=Kát‘ Èýôª´~ž^Z@2+1Új} ÄÉ¢iÐ!²yŸ‡H,*¢E£ˆ…„vFTcc®ö¬9fè˜RLmZ5,¥£è•Ûîx&GÔŸÖµJu‡Ç”ª¶œM³hÌ.ú̺̓i ´íáqÌ£s”Ìê¾§œ˜}`àf-³i´œSO¢v8àp7÷–0ÐRûƒFe4¬òî^MÙôYÃj)R96¯/¾éÖÒƒJx¾{( ºõ{»É®ƒ¸ Ä©…<Òw¿LGŸýfW ‰B°ÄÍý¬vÝäå*;Ÿë'³$„ó?}_ëüîè.2ØuìE³ØåÝ-~ 8lß_±¡7(@:/¶3S($Fa5 Ø‚æB˜Á˜,øÄÙÇ~Z‹A„Æ)WÂNÌà *³ÈB®¯{S ”°ÍHZñl–î ½Èãè˜ÈÏÓÉ™°síðwùä<ë¤Ãxêæì7b•vƒy1t)âÓŠl²gË«|Þ•"é& GPrÌâ"¥!pf“G:ŠOX¨F‰ùìÙŽ@Û€1ÕMà=‰=ùÖZ2}2b‡¬@wFvÓ *DŒ`dNæû_ƒ«%*Ñ·r—UädjDì=mµ†ýt–åS½å;¼›ÂÎÖƒÞe{s»–^–üVD P[9®±A,ný×Á¿LF óùÞ£]-I2©z É0‘ɧ)…?2öN»ôÙáþ½ŽQ’¸ EÜÉâÙÓ$Mj²§O…|}kœéE³a$ÌŒC-7'G}æ?ä1Y4ø´¡Ê^™ UbÄ ž¼êëë³ïKr [÷o^zMºÞ—mÃX»Ç%ÌÑòðêû2šLDqöûcëáûÜlÄ@0ª$¢gÖýŽªçµÿò3 þáÉ´ªéçõdÖ™RZ`&™’MÒР`)†,.|X5¨Ö¤Î’¸å€Š,xøoÔÎNŸôÞû¸ž˜ DŠI,ýêï}‘J7Ÿåš²óÞ¬Õ£Ú8ò|Z%U—JßñÕeb½ZNF- HS@Œ’4h߯ûµÜ? ¦“w‰ u(YˆMXtI€Ììœ(Œ‰Æ,À‘[,°ÉµaJ9pëü¹ö5nXk¯“A]$ªˆ#L™Íx¡ñ¬ìû¹5˜ 4_í}1àìÏœ¹ƒ¿ÞwÂ…‹Ö@dôÉ??Óì¿zÏìǯÿ¨|öa*Íœä X¡4ä甹¦Lí<œPeoˆ>œ›÷vX+€ž7n9†ÇÇßȇêåªQ´ïÿ©×xøðÁº$VÁ4(¢©'(9…F2˜‘†hF\ëC͈b˜Œ“ÊY@ŠC½ŽÁ1ˆ:ŽØœè`79 ÑvpB¨¨*SÈCš4؉1¢ã¦Žr%²Ü4q2¦d¸ó¸o5o• s=H!ÁDàµbˆj–1ÈT#¨æÅ‰1”]ìAÍœ¨Y@›QŒ‘Ç@ŽžÍ(-*Œ¨YðÈl¢WdœEfÓà͈ß AR9 c¦`¦6Ñ£¿Ý¦Ÿ]úÔ_Q¾6_å$Ðï}ùã¿þÕQ»øe ý(Çß7Çíýªýï±å“ûÂ6í¾@‡°áIíX £×[‚…i#ÒxP3¾Z0ôðÓggßüçG51•”¾o…/½˜d ¼pâ«çÎ@ðŸh$A·w@Ôÿóãû÷ø}¶èÄ`ä ©×@!2ƒ':%b5ažT1‹CmÒ󄤥^©’g!ÆÆ$æ­±N=¥æiÍqÔ)3¢)ôà…Cïc 2sŽ[Óxä^œÊž©ŸtܳÜX 0TÎ8«kkR!ƒÁë®{ZKÝ™î(t.i"µÁ™ÌÝ8ehôº/iŒèô¡Nc¢#¥tR=¼Y}óûÒYøó·±öù_¾?E˜  ó„ÂûÇÿAjßoøß[oÀƒ÷ßÑx¯šÇ.šõ´ÀÁèçcPÜï0#·êu}:îÚʯº9—îZÿÉÙ×¾qàä^c$ã,Ézr²ß¸çòàR`žkyû*M&•ÜÎ4·´v³ÔéîÃq½­Õ¥åÕÚìc¥þ–àRËFYQ²¶¨A°H!¬!€]¡ aª ŠªE/ŽM(Ò˜Ú:‰áŒ”TIR¨HˆÍÁHbdg&ìFLf,2qˆc$U8j4‡™‚ ƒ8„2ƒÈp{>­Ù+¤"¿Y2ýoã5ÿïUŰ`}ž4,Dƒª¯1ÍÒYŒ÷^ü0›@Vù(NŸ×ûµÉQV¬ŒÁ+‰T㞆€VÕ"‚«¥ư¾®jS‚ÝÎàôÏT?ѦrО¶éÉŸÏÓ῎kÚÇAÅ×ßëð5¥ûöXÒJY¾-RÏ'q{ܶ`ÊeêÀ<¡²¬Æ¢óó>°µàtµmr(³fñ©àr¼Ï­´LW–—YÕ×I&[÷o^Vi÷f#zmá±Mÿòã*PE?uiåÉàðˆgc ÏiÔÞ{þâùç2éïüæàO_v߯;t¢Nñ=IÖDd3±é–6[ÌÄ!Ÿ(5ÔˆD1®x™²óÓ)ËZEœÂíº÷»4 SŒú÷q¾çÐ?2C?AÏ¥.Oxw7“×–üf:M+ A3­m;¼ÙÿöÐÃuG°À…°kKã’A#¹UçsNTm—Z-ùlûNŸ’ 1N¾?îýúÐE½U3<†¢<õºÿïGÿrÖSª¸ôaÆ»ûU—bœY6›í¤A#wR€BõР1$Ë&³Z6°iØ­å”È/†X­kMš6uÍŠ¦AuÏÑÆ ùqƒ¤;ø:œ?¤v½²·+›k亮´öe.´†ªŽOök|qkż¬Ë¢Û8Dûçoþne+-!R)ßýjÿæÛÇq1:=y6}øù{ ƒ<ÔSôµo»¥üä^ŒGb;/ÔaŒè>L šŽcp¿L%¢‘’œT‰+99hð¡Z Œ0³Qh"úÌqÖ1ÕÐA’#‚ÅF³¬–Hw?ï…o­ûè¯ê÷«ïiœ}ûÔ?ŸÜwG»‡;œl±Õ×üS4X×D£Y›WnüXiΦ£Ü¯í¬›Ó›¬KsûdGÏ?»·)¥h°†·ª¿ù–¹Ìõ¾£O~Ý€0µ¬æò˜J°ÈbȤAdñÞnšè,ÆóöNÆ( êӊÛY- ª0Ì ‰cÀÀB€¡*‘,¯(!p³˜)#lÐèv¨â Ê¨þÕƒoÿ~4ž¦IíW‰¦DÍ=wûOãñw߀öŽvD™!F8G¶VïÖ,æÓA%¡aÕÁyïAcÎhp¤¡žŒÎÒô¢Ês©×(Æï¾æÎÛ;f§Ûëo¾u²îqÏÞÿm¦¦á¸EFg\M©Æ“4s 2£$#ÈÈÂNsÎ8›$Ll`«ç†Jæ¢r³`*s±®æ¤ÏMÑ€,!1‹°ª;A4QsDB Ìkîœ?ê^e罇óã$Í&~ÛÓî÷:¶Çÿ"™OêŽ:Ý“º¥íö‡–Oi§‚¡N³`àNg/!Ù팗k¤ñù>'ûSl{¹ßö²rMZpŒ<ùç³öÎÅQo]7ßrú““g_Oö?©ÀBTÉ…Ÿò÷1¬š3'3šVe)S€Ä¨¦­E‘µ]‘\íêÍFýj3MÌhž’Ö«W¬2u˜»„ó=鑈—îZzöøûá.Ýû࣠ëØAû#€Î'¡{ÚåD&=7= ‘ªßï˜Ëîs°Ã´Ã@›«€¥$ Ë‘pø$kÝ¢ ½ÃTN–W€ ø×çò—7çrœK.ÔŸmn0[öû̓uŸ>ûìo€Ëk²‘¸à½ôE”…©à:`jÑ%¬»C¨ZoS ¹-^æ¬q4Ã4ÙK„EuAí n°Å J U"Ò(”³0Cs(„/Y£vô»Ê{«”²NÇ(³¯Áοz6ë£ñÕ,ìtïïï2ψœ`›n¨ðA[³Swx—Ø € ÎcÍí²aú?~kmù:þí_]Ô)ò­8.o]\ÝûëVClâGA$Äè+NáŠq·C °OpÙ®‘@®góÄ} ¼ŽRNSc.@‹CpÎâ*µ;S0h&ä« S&p…€H#ÕZ¾ÿ»Ï°eX aˆæì*Ú÷gq Φ1þøèOµ‡»§/pôa;ãmn˜œ·`•ûì5ýmOë%Ã÷ß?îïêño½Ù/íÅÓcOû×ÙÂ=©l¯'¬pÿTòÌ€ÉLJ« ˜Áu,ÅæZˆA¢­ë‹ƒ™ df¤`‹£Põ±MD€å©FÍhîß´K<}·Ø‚ãþ%v÷þݧ+¤÷¨I±·*hµti˜• ÿj8ýýWc3ëì×÷µqÏ5×W`ÐÐû?ýoõÁ+†ßðèxÿWøöÑàÿ­ƒy±i7öÿ`ÿ]õ¢v}·³m_Ýö}Â?Ù¨R»q°ð0€…„MC‹gnñ³AƉëí,b9ã+r DÓ‰TY?‚Yô™û,—nžåׂYšs7»Af¼×ß}\ºÄùÃï;WŠ¿ŠáþŇáƒßÿ?l¥@£ÃSlCj'7Í·í«{Ë §©ùÚúˆ+0£„P-¹š­ ka”Y'€Ì dDrLiºdÕyÜ´ßÙèÀP, KÑ£6­Þ›í}²Vê ëgÑ…û1~±ÿǾýÛÚ¹Zìu_ìì»ÿŸº÷l’ëJ²»ß'"^èÔH ¨ŠÍêêjQÝÛ3Óf»c¶cÝf³6?t¾¬ÙìÎÎÎNÏv×t©.E– A€$DHZ¼wÝ}?D¤È"«mýCfdäSq¯Ç½.Ž?CB-7^ÓÖ£Á|ñÿ£F4r8û××)Xw»™œ*+ºÏ‹ø1_jäôõðý¾âàrÖX» NËKØÚy~/Jžœã¢ Xõ óâš,¹Í–Û\•_ižîºu×Á'3Û¼Ýü _?¼þÇÝǸÞü|FQ§““{½›µ<áåj«‹òá„G½·»ÇÇú‡W³³ñý’w&××ÞgÈìÃè Aù\&(­Êçöwòø/Ù§Bõ¡Ý¾h›-Í(:{}öŒN{K´´ÔÉ/Ô£ž_ž_T}y®ffŸOR»úœ¸Ð‹Î¹,AÞ¸yòÄ·™©5†ž~T•ºvøfàý&úé†w;&µp)9ó‡‹6h¦á˯¤y5O5Û™=:©Ï‹ŠÉ¨ºøVxΫ?´80Ý{r{U¾l |!ÛzЬPœYA—á¸VmIý4_ŒÓ…ïû{e¼]~ï K¤Ã±7jößï}Uc‚œˆ7ò“@xËcõ®ÚÞÞ|ö›¤îjí%ß|;ûòM,Ç`²§­ìËg€òðÑÛ1þ`œ5ϧ'­Ý}ZÜzöZä¬åóú£ÿ‹&Ü @=\ Ç^ÖjûȤ ,‘ß¿{d0_¶Å=…áž¾¿úM§sÎ>­Ù¬ù¼u/]ßøÊj¶ÚŸkÙ2&IIXó*FO=ºÒj>Þ»õ…Nèߤ8Ü÷3ôzý«dQ­þÖ?þño¿s<>½&w~ÉíoßúâÁ’\ôpÎôL¦ù°qa²O¤)ódE±è<͈h@‹A*T–?³–]xMœ@p3Š|Æ5#Η 5‘Õ>ê•BËDKEó™ð>®‡5Åïü‹¢?—¶ö&êÝÛG“{÷ú×ÜãÕfýê9~óë'Aîíþ‡¯°2¿ýñDñ7ƒ¸­~þQñ¯w{Ï9x’Ìž“ …Šò¯U–¯ˆÀàéñA׊e°"Ú´¹Ì-̪hóáuq[¢¤—'­¢ æ–f™ä±ÔfJgA¡ÅY=Ä9Q·Uqz|¤W‹È­ ×p õh6ÜZOõ’æ-èüïK³ôü¤9àŽ暑‚%=]kž$ó2ƒÎê;P7ßAïn$a¯qú^ý ~õß}h¶íÍÁê™ñöÕ÷è<‚yÁóž=ßßüú=+)Žã¨µ+è‡écÍ:+t¯©3å‹'_²„/OäóHn$u‚+ØîN%%zz¨ƒHÎlþ ZÂÓrüpoí¨#òþÈ×µ V‘„$0ïß ™&›á *åFî/4`ý’^˜¼ ÀKa"pÂÈ6?úœïÍó®„)ê_1±ü•à–f1ª½¹OV§jl¾ú̓߸Êèi¤ 7'í³½CwίŤÎ<¼Å…¨Ú7#@3sGð2Ö‹ºP Æ·Wëõ¨¡‚ªÛ¢¹]"Bv5 L8°‹¹PppiÁÊEEÍ€»@ÏÀÑ€êÁ<šq¸z¡wXÜ×¢´^u"‰m«ùYÜkßÚÚ Ë/)áÔËø]êÂÚç.€cÜ\Z‰5 9­†WÄi²õ`Ô¨s×[»rv™/¡6»ÐÀæÕÎvð½´×¬“ž.O~ò7íW¿í26ä;Ÿ-K!OOïîÜùÛ |nÉE…:ÇUßì‚æÜ*%eôãÍÆqŒ:Z¯}!p¯6–O@Τ,0‹ÄrÉS™æLð’#wq†D@¼ŒY]H™–™ÓˆØYŽÉàøØ‡”$éõµV’hlz*o<îS·¬Ü¥³]ôžƒ »ðažå?¾@¨A0•ž€^mKøÁ¡½5?5«ñiZáœyèB@ïÅãy¡àÛ{sËtÿÄ7n^0 É ã/¡g«£-øÌÎâ#þÖÎE>·ò¹q kÚ7á\XÃÔŽ¨ŠÃÍÕcAQ0Ìi¦eßèø³ÏžnË…^T¦dZÅ&×Nƒ`€œá°U«j°;W'áÄ"¸Â0KN½ÎÓ tù,>?<¬fÕÔ‹Ýzú„ïS*[ë%n5ÈëTûô£§ïnµ××g!¸Æt™#·åòE€øªFY''/Õr91ªÊÜf?ÉþZfœÅ=ÌXˆØ¢ræÏÞouÓK]^b_iîøÉǵøôýKê\ý ÝÌNõ €Çón[t¡"@›ëÏåÙû:½Çy‚ÑIP1FCrn¤ ¡Qµ™In…NP´ÆŸtnü̾Ï=ú´y¡ˆÝ@0Ï‹NhÙY‚@_8¸ëÂÄ^¬šœ~þÓp ±¿¥OϵHŽŸØh#ذ>ùõ–߸=f f?7`±ÖûbÇ‚e!L ¨j™VYí™ÃîN17tîKR-¥êg“N¹÷á¤öøG¯Ýj®N Ê$f‡Õ-%˜W±ÎîDP&Åfè «W™•aœø]Z˜›µø»ÏùÂŘž¯¯Fwºx6í²»äXžÇ5¾Ìòù ²ÌâÅ8>>ÞÔÊ“}Ù¬7FE~4m¦Ì'Öæ$"aÛ.Ëæ›Ÿ•ÿ¯ï~«~¶+,†öùˆXµ¨š`R«´Ap˜|IêœS«1øÂ7ý4À®L*}:˜6íî©åµÖZ»`‚7Ó?9®4+û( N^Å2‚σ+^¶h”ÀsseNJd”,/­.èÁ`ÔsJ¨p#µ¶ŒÐ¬šßÍuŽ»{õãþÏ6›K;’Lb€›'iÚ§eªÞÝ,rÒ¦~\t¬Ç$ òÆ%°ê+oß$W{ÕòÄ<Ò¥?ÜAý éø€„è@&q[¥áO’vLáI÷¦á˜¤Åw6{}?{÷ìiJQ­ÑÙ>¤ åtbi´2ÎV†úRŸ¦§ª`D§Ï2â«øè ÝÂãÃÁkײõ+¹¤ìîÄÌ®6S;)õð° <†'WÛ;6rà"+#“²:2g² ›;¬RÕA4g ‰ú2£>FÇgd“{ÕI¯õ~ãî¼û®•J)ˆ‚/Åy¾@Va%ب Û´œyZ«wFÌ-©™ûˆKÍ+ZÖ4ÿüøÊ{;µËïÆøOÚÉÿy§þìOŸÙ•))ï½·‚$\m?˦ËoŸß"™6VÉÓ^°«Ïž¢N`µèúxÌɵvmB³YóAåÝÐÉKU›ÎqÄçÇí]—¢YLæ×îÇ·ë«kÕ¡gWv'$u‚HžA„ŸÔ3'Àݘݴ'É…½ÎWÑa•!˜?Ø—5Ç17µÆz—\  GÃTÆÌÖ´~ÝóNú4Ô_?¸Þ¹ª&ÀÍÅݰÁ-t^¶ˆi‰Áà’ZwáÕØj¬\Í+áeŠ‚Žþ¹ß¹~m{ÜÖçb†©ä ÎÙ9±2å3£ž €/®,GPJƒg­p:q׿âÚ@^TÒì\:œ`OËElÌzgçÞÛݽÄ—xš¼¤ú Í®Óçæ0˜a ±ò"…˜‡ â ¸“-»,¦–Öí© ã1Ñ&bqQ5Ñ…xÕ,Vhò jÁu¿‘¬+Ê+áTL”‡xÌUL›Ã'ÝÖtïzpâ•WF<.8ra™;I"ËdäðqCr‚2[I¨TåpÚin5ÔŒÃòëî1þöhÖì?àýëÔÙJ…)ÆþÑÞ\k³ U5̽¸;×ÞíÞØ§–m yÿðÞŸí^Ä9°ä1%ø’ž‰æ”ð ˜=±+¨¨f]'‚ÁaqZQ!²Œ:|âk7wjëaöhZ,qÂËqåeGÆ”—n²ÃV^ªŸ7‡œöt•¶†±Ò$¾ZÌ‘´Â3:åFZÖ/v6€üøŸªïÞzóŸ¾ÿ¿>ÃÊÐÛíòù0?ÿnv *|~ÛÇ¿ðˆiÝ™ £$h”`^´ÆÐf^Ycc‘Ĭ˜€Ì;ÅLÁHdréé$ö‚ ™ÇÈy us‘hŽÀNuÒè•HB:zð¥ãºÕ[k­×Bm¢{íOx½Âþ  µ”ÇÖñY æ8Ÿzþè®óÊË«“9(9óøX‘V¶U•86 0Ô !$ ³Q Z'w?]´7z9$ mY$ŒÕÖ{æ1Ò™7Ä0ç¸D“¹“¹ÀÂÀÜÔÑÍdíÕMšµzrY7HÂxpÁMtÓ~Ø\vO·ß¨yã—'ÏèÙëÅK¹,9\‚ Ç϶þǯ ’„4¤>›G²4ár6¯'Ÿš¶†¶ù´r¤YòÑZÓbŸwïBàI}ˆJ¤fV´‡µ>§NÇZcß`@^}êºGµÇÖC1¡QEÎö)9ÙìðmöŸ¶š¡²<“C«+ö©kÇ¡1–ž U)*F£$Í$œd&2©;£²¥cå,´¬±žZ-Z ,{‚LÍXÆp!»¹Ù$¡$ÏÓi"ÃÓL¬¢)kì FBŒŽßÛ._­jÊÓ.úì›ÍËõGæwÿþþüïØ•ïåÑ&þ dŒ|ó¥†<É¥XËÙz·Â¥ˆÌö¥³Ìb}ߘ½T¦XÙ‚8|ÈíÊx‚F3!áÁüh œ)¸_1WlBSmšM9ÓÊaZq²O6«Ígh·Ç>ïž`8}@uè‘¶¨É±¡Ec‰.->¦*VÖÆ 6¥02µ¦©è¢DWa*yÕ¢Æ^–zu<Ì4ILËrjqŠ‘<ê#üƲúäþà¸Zàé^Ò×¢òb/º.|ˆ™æ\}>Î=)‚—I·1>üÎ-¡è"ŒYÄM™ ex “¦ecáã{­>s‡M‘ä‰ðªÂI”YèÎr¯€« ãçOfm3š%ö„ªGÃMFd°JÒ‘žpŠ1Ç‚“D±\Ǧ´l®GH“¼8¤1h"‰h„­ùìA«û ŠFàéñ³ø]¢r|1ŸÀÿÛÁÍÇ¿|ÿ†Ã}ÐØè>¼síÙ˜õ«¬žšÛ…:Ó³ŸgO.=ÐSίðìI€õÓóÌæ²4Ytá.BÍ*bô£{ßt„zu¨›¡_øÖlª¡¿^ÍÂñŽÕ¢ú ¯¼6¾»Ž§'$ãÝØj¢Ñ9㌴2†™»>MȶjvÜWgW­fг$a6ëe6§§ˆ©>™‡[å¡e7wZ6z|?Î…kµ4+Ëã!±M3," ZýÙ0å§ÔäºtùìÇÞ*2éDË(u‚%®l:ÌF<Ÿ&üd¾èw6‡½ s[ ðñ¤Væ,<©E:÷GF”Ê[rW'ÓÖ£;ùµ?ÂQ–NŠºÃœÌk¶ˆåx jÄd&³2ð"c]˜Ui¬fq>r—ÚÌòE}5N}3´¥c#yiÙÔR“²Z­ñ,%n‘O1KWᮓŸüÛ7?ÿ¯?êNI†ŸÜ9DÓÿúvóì—ËåÏ·¾è=:.¢8ÎãcyË,]øù¢O@Vq\ÕK†eIrp‹Êý‡Û^˼ìä}kºÞM™úÌk£ÃÉ C&쨼½÷ÙÝÅ_Ü~oQÚK0º’-s›dê#,ç$ÅIÈ\¯+4g³ºœ« »¹!TFjðÅ^%»“æòÖ·Úztˆk<¬o^IÆÇã'“Ðà+ØT¬E~ Öü½›†AŠÙtox§žæ4£|BüXó5‚͈@‰”$s´÷ÌfÞÌÒ¦$´eÔhË\×µRjó­¾ó䣇Ҧ›Ü®3÷þiÜèòq*1»ë´}êÜ ™ú­'L£I-VÁªñ:-šGÖ‹>è7³ú@‡£µL“>êÕ°ÞB‰¾·Î‚/ž&CŒ÷b!‹Ä­*´éôñ;áÎ{Óq3ÕÏî¼~M6³Oêõ•¦oûFC.ôž[¾8 }ÜÉW’ÓÞ ä -/Á¶ÏÕÓgÉsêê^Eõ¹ ´Hî>W8ü\‹7k¥ óþÀ·ìÀíJ-Ç´àS’ù,ëöôÑÿô[Ãß<:éܺ~¥nýøé„Z²ÞM)H wá‰9‡<À}¨u†P¸»»/ƒ³v,ë¦>Ùè³EÞÁÁ}ZûîîѯÊvØÜláðàäan®mn>Å"ãbQV¨·’ñ£Cô¶»U‡t1zúÙúV½¥sµsŒC'«*äžÈIÓGh&9†]澤˜%r¸X°Ó´1)-äÖóªÂdÀûÜhtÓ$iIÛº/Ü„®›‚sîªàV ç ÉÇè;·zÜ©·RB9T.³²ô“ÞLÛÞ«· IB+9ar7ÌœÌyÄL2–Ç>ýÎnBÓEhÓÄ—l|rð“í×e|ü½µ*}òø^®ÿ©'þ۵÷jÍî¤9S6Ý ‹J¡Ž)a‘¨(f!¸£ ÙC x‰ »~¡dð\ÏæÉW¦CrZ-$ȱÄÙèJR ñDzM¾ÏÍ^7‹«ùî´^ë‹l;lD…7Í=ïË.ܶÿ“þÏ7qrç^¿Ü\{w;Úöæ–ˆ WvmsÚFŒ¦»ÛŒK8ÚÉ’õЗ¡ØÓ4èÊSÇÏ¢)Ôì 4£ï¼õäûÇôÊ»iÝÊøèñçÝ5çá¬ýxÔî¹7‡Í4{ôC»þ½,Qõjq‚]!G®‰—ÈÜJƒÓ¤AÓ CîoQðU̬ÏFÉ1 Í„1öÑÞ¯Êáö•Öæø3òÆñ“ Kw³;ÞúšsBÇ  â)€‘fÄÜ™Ü'‘4Ô‹!Šc“¤ŠeÜʺÉpZ/µëÒpØV—1U$ìij®Z•ÆÍ…4*%ÛœB Ê’ìáãkíæÚAÃ*=ݯaýzÁ¯üOáèøj»¥ÃÏïË·ÚÅðã‡ïóÉðoîž>¶× o ÊYªG°ÒÑ’ –©£Z€EÛFC3s>Öÿîóôl’}ÅõìLÕ ±²9=Ü ‰QqpoýZž0‡â¨¶/-´‡Ô5—ÜMpj›¡­¶°I&¥ñôîÃôúÕ:;Ýûé$ôÞi¯µ¨òÃ2aÈ Ì>ÛaicQÛêP6gOÄ+¯É2NUiHVk9yTŸ>ñ‡1ú"o±O'ÇGíׯåÔ¿õVHħŸíŽäÛ»Ò…öI*%[YÔE™ðÞ£'|íõVæãn‘ªz4 -*«‹xUZîê4,R!b2e36µÀ>“@‰À1|ða¼¿V×lÃgØ¡û?¥µ·Þª/Ž`=>qÔ( ®GÖ‘‘νAhÚäç,ÑêH®˜s¿ã"êlu'wbŠ 3'rv‡ø5­ÿéÖíŽéGùõwn†ÆucáXMçÓ}4¤vܼ–z‹~ܯu»N p¤£&×$ôAL¤F‡Oe‚­õ åÁý¸WÉÎÆÚ£‡²–¿ùzÏK{|ïQ=«þüvBn“:çz˜SEᨉaC3²õ°‡ qÛ‚ES!&@æî*©eƒ*äª3€Ÿt0[/rC}A^¦BþûÑ Õi]Çø¨+â÷ÂíÆ­‚ò( …ë´NUb¨7ia0Î’® O w…XwµHÂY€}ÅîÏkÍQ*óŸ}Ðýî­ö/?_´£¯Zæ ¿­ÆI<ó×ß €çæ?»{wÚùßÞ9÷8C†/vëk~0â^L˜ŸëÙì+ÕÕ-3ÌæVU# i+±jÞ¯ûº´¶‹ ¶1õ8¯Õ))Px%TXf5]ô6(zŒiR¬dÂTõ6Ž?xçÆNXÛÅîÓ“Ÿ^ûÍŒò¢SMç\°çmßǸ95 h \Ò@^Y1¡o˜pÓ|¸©Mnàðð·dõú6ã§ZÛ×w’RýáOŽ‘½Ö¹–šVGÝz&ÄyLËyÊaÎÍ„«í0©ÅÙñ ‚¡Bô„àæJ u’šE7[$™(æ !8&/ù¤1ds²úª]ýäwìfrÛªuš½pôëNný)7CµßlÏBÀÒ‚›†º¹gT#ä€Ö0ÛD‰z,JžƒË åØ!´¤<ú23•?¾x›'Ãô/ÿÊt!2ï~6‚Ó÷ß’f¾6a°Ø 'Ôþzw_ýí—ÁËý è'„‹oëY5îà+ˆÏ'DFæ %2©b-,”ÖÄrÎ’ `ÂKš&f7…ó˜ã9âÓVZõ¼4PÊ›M¹ïþÚëk[Wn¾fÇÇûÿüQïõ^žp–:ñ:ÆUœ`?í6i00,¶¡!iËd+YPùÑom¯³o¨­×wׇ¿|jÍío×]ãâàÇOóÞko7mމ2W^"å4ÔGky F©«»eÛA r6q\'ɉ1-oÍû‰dªH¨ £| ɬ1÷8ÚxØJg5÷éçw~³Ÿ¨ìÌm¶¹U‹“{{wG­Û¯‡IŸÕ“é<ÔŠˆƒD`,fsö„ÈœÃ*?Ðv•œà‰,D¦;¯^;ä°hÓþøŸ~Ï1ª¾óí`wîm¶ ö韄É#i%Õ6ïÏ¡àb™~ó6ðÒ êÿMî—êC/„Š/ü*BµÚòº„p|ÒmòÔçNq'Ö³EÊLâF›9‰èÜQ ÛCªcBÝQk›L]gYs0ú–´Ûvÿ§$o¾{µµ½uíµ~þtoomRrÐéx$Ø4˜K •» 3 Cµª†žú#/ÊÅÕkµúfKî=–Ýך¯Õ2#ô÷^n^¿¹Þœz‘•ìå!OÖBHÐ$óJ‡-sÖ#ê$‰“™Ùql7ê³Ä‰<Ï¢'œöØ 5¡DS²íé,¤ÁÄSö5žêU3s |ðÉÝ»ž÷Ò¢7‹f˜<ì{oóæû 5¶ n!ÉPZ:Ý{΂Ë’‰ÓÒTälÂ|sc:Ÿl|qFž+ÇG>x¿yƒ°¿øNËöÿAþ"`|·—–N¥~ÚÚ@[w¯ùËNgu™mý²â¸Lz®g©¾B—¦çÊ)ênðF+,Q0s¨NŒëY©%¼\Ø•ãY÷’h¦¥m8©IºîÓÔ‘ŠroPÏh£K›O÷žüø³­«›‰lü›òðÁÓ_}ß® •Û o… ”[›ÌØBB‘+› 'U‹{›­o××:)ûäÞŠwÞíyŒUýÑ'‡acg§¦£¹^ š£Ó”áIN„$ZnI¹û9ÑKöº¬šó*w›ó°“JVæìŠI]8ñÙÂÓ4‰ôð—ýzMjŽÖN zðË}4v›í`*`ðJÅ)°«ÙTÒKˆÜÓÙZ½:Ãp,=7¢.0НŽNuûø¿ ’°ó0½Sjðþö¦?Æí£ãõÜŸ€Ëäçߪ½Jäôw‹]2!Ïó›ÉWBÔ^Ä‹P$ºìèâÌ $ËJP²Ê½,K5-•‹„Ì1"’ܤ&Íqsò7¤N²ˆo½ÑôàøÉSaì¾uõêÕjÏfýѯѨ4vi%Y§DÆÏz©{N•V‹Ê¦*×FûÊzs­ˆˆ•åѯ~¾ØÝ¹¶A1HrôëÃ"»}5¡Y6®Kà4 j­`Õ‘µE„|:ibœê]1€¬¬NŠ4!÷\¢»‹XLæK®~q­“ ´Š'Ì4פîPÏÂàþÿ£‰ùvúöÕ:ö~u;[v/Eåd 3C®•…A¡ä•Ù¶K "*73i°²ÌS~LIÌš§X)Wµ¤ñÊejï7:ò€þd •ãÿÝ"þÕ;ä¿zø½ÖÕÏ!»Òß^@ÙþáÖï¡^Ôá¹ö™§_u9;½®s -«i`’ÌKM‚›˜Ì(ì‡Ô¸ŽóܘQK'èhËט—[¯½½_¸Ýÿùñέd3(mx©º‹uu—¼îDj&â>·º“-*Çç5!#ÑÒkÂæäõ¤Ñt,$ § ˜Ÿ¬§^Nµ_³ÌõÑß?WoêGño{ùè³»Ùæn~=1«Ì™j¹Y7`‹FJTÍÛ07/½h:«SÍQðé6Og„­•s¶¨.uÖÅÚ…5ïwŠÈ_þOÿ—G)H8õµ÷¿ü1—wþñÛ7¥—þSýß~çµÈÑÈ·~?MXjÃå‡:ç?[èóº&|™K.µ(‘êLž¬pRhêbk Y'i—ö@gT/ÆvbÔ&<®<1o”hT Žž\×í,Xo±V+jiülr÷îGasw³ùž±¾¯’ÀO& ºgk‹~ÔÞÃÛO2o¦nïÊZš,ÉŒ©ŠO>¸Cãæµ·o6|cõëOãúÆf^èp¸Þ¤X-^æ:vn4=µ+ãZ’¤ð»‘Ð(p³`Ƴ4”VõXÆIh„¡I–d€Á+ëK+æÂ¦¬Ó·;®ŸÿçãÍÖfiß½z•&w5·ßhQ Dg‘i™8&0–fã“–Â ˜VÄY*´()l”1i <.F1÷r¢¹Ã•81?I¸Ûx¥º·`ٵǕ2ÑÍZï½vÅGw~²ó'¢7ÞÿY¯—î.g°Ù¾xëë/}»€Ûþ®Fðî<ÿCA¬‰ÊZÌ.U<[}[³ù´š†™“¹ŒƒVÕzš's+q¸Þ¤ªËëïŽëtó$>xø‹îkiàÆZ’$°fL¨®³˜È dUi” AĈ<ê`pôéƒI~mûõ­«6Šã“êÉv{¯ÁÃfݸv€PWˆšUpj¥Ø<#wU¤]W êT'ĈžðŽŸsß`r(ÈÌ ·q1 uƒ©æ¾ÿßN66 ÆÖÍ&î}¾×’Þv§¾$‹4c bˆŽ@ ¸[–²kNL#fqfÓPWW5—A£c3N[ýúãZo(Iœå>?ÚnjŸ¾óJ<g–ÁÝuÁέŽ7îí=¾ñWˆÿÅ­Fvº*æ[?{ô25{%|ÿåúç ø{.gKyÎíȪõw‡ûkI¨q­”˜Wq´Ö¬9äô»å›ˆö1]X­`|Ý?ÝØùðÞI5k¶×ÇúúfË£>Y“!dF’¦F¤ ¯4úЙûŸ?9‹7:·®´:‰óñA#Ù¹Ú:êi²Y'÷“$ ^)(I`gH…ÌÁrg4,˜*9 M:‘,¤ª-ˆ;§¥¬‘Ø'%Wqf•PÍÌ÷𴾈M\ß“>´÷²Z²¬‚“€ÈI«o¸(¤n Lë öèäP=é6É÷¹iA^`ÚJCظQXCo{e1ì´ru:)ûÏ©|þÜxbããM`ó{‡?úQwš½ñ¯6œÂîÙÄZÒ^\½„õ›¸ <}^¿:@¿)Zö6„…Ѭل ){Üx;˜šö½Y`°D,–|ºÓ²Ê;’ùíÑõ¨O?«Ùþ®íõF[F/“^ÃÐ¥öç,~òØ›<ñÒŠEL²vÞÙ\ÛI2ª"ÁêÃýã[»·ä˜õ& l5&ÖmOÉ”Jª²$€P2-š€]0]-’¥¨M$ L€Fq œ×’<°nxÂN8ùé^Khëz«çýŸÜit¯Lk öªŒóépM„x'–‡ùˆ#E7ñÂÇ¡ˆý„úaB´]B_RïëUÆ^ÛÕ±v¥’"YsÅJÿJROOœÈoýû>À_ÜÜhâbI@ð­fû¥{ùÝýêùz¿‘:á¥÷C¯jH£Úq³ê`Õ¢$Ep…Ð2@N‰ŒÚÉtØ;D7SPݯ¡R¢û7ÜN’}“V\øx¤Îò°Ù¸wÔ<à$_ïŸX\@íµ¼-fƒÔ܉|~ôx\_Û+ªyÌÌ\,"I‚yÀ€¥²+ J¨ 82•Õ²Úfv"ÂYìDó£a¯{­Éày<‰î)«³8™{‰XOŠ 'TGëìМ«ž7¯C‹«V€[4¢ >¢D™Aj“‚ÜÁþvÖßÜfŒ?||­‡qsY{Áì´da#_ömΨ7°üØ ›Ì|O¬H@ŒÜ€ Äš/óŒèvÒz±#wzöÖi8þE³MXÿ½Ò_¸çR.Øg߬žoä­Õ| ‹Æ( ªc´…:O˜\Ê ¥Y“Ú56ΔYkÌ€¤Ê¥‰;‰ E‰¸sI¬TfKàM<6dØìèI§›t\m6¼³o·vÖרž Ï)RHÕ¦î qu!°ÕÉ:‘O‹Ð0à) r ‰^qFæŽ2‡,3Ä„XýædwûJ>ùÍàíµ ÉªÚÑé¢qC~¹;hU~îu¨],F"·U‘ª-sž\åXòöíÝH^>„~Ü?ü]ËÞ×§/Šk¤ß p*‘‡Ð|ëÚ&“ðiVòü‡?ƒè? 8*óàâ–ÍV§pzJœYöt¡´Út;/†¤k¶rû:¥¯ /ZÏø+å7¿ô­—íD$ ´¢m2g¦F¤Ñ#žbŸZ›Ù» ³aP_âÊOÙŒél¾€ž‘»Oî69ŒÞÉ›Mu'ͧµú•ª8¥Y6„¥ÆZ´tÒÈ •B—Ž¥s½>tí.±œ§D˜RpwbSs"Rˆ•ËÖžçÌ_ò›ÿ×’küñæý«Êjª/°±DHIô„áâ³Î+æfU†g2Èru·å/u /AïìÿÓ_¯aT5ÞÛý3öµÉ<íâk Ô¾LVºrªÎMó™i-“d‘§ÔïJ ¬óÈÕÁ;-&3¾ˆÝôÓŸ„c$Änš›å£EWÆÛ¡Aâ x©•lm7=ºÁH&µY­Ì¨â J emš;1¼óÓKÈŽ:•u×’‹À¢ºZ)§}\VîÎá÷[Ww2Óƒb§Ë$TFNH— ¨iLˆA•‹U Oª­ƒXj[S®œ”õ´$ñŠÙ´¢{Ɤä܉"`Nò’=ïþ\€Iuã5OøF匣¯——ê%²¢ž[õ• Ó‡€6RVc  ¡îŽá´Æ)œ˜@†³¢7® “Œs¤€y¥Æž­ÞNZ.‡õ:e¤q˜{á "W.i ‚|iûœa®Îw;ƒP,'U„f`æKjõãÖæzùôg£kooHj¨Ž»\+"¶¥&A ãzˆnð1¥œÅh–) bŒäVçi©V¦Q©îZ|lÅ0é6034 gÉyž‚»~–%ÀÇãíg Û¾Ž¹|¹]wŽ×˜Õ¾Ðñ« -}krÒxÞÞÒ½Á0'/›­ò:º]‚£Åh5sW–$À* ×Õ€,Zá1Ƀ»œY,ÃÃøæU%‡YP†,룤L³.Í>s†Å¨…V­{Ξ+:k̨øŒˆœÂ2rúGŒŸÜŸ\{óÍ&îÿ?'ï¾s•A§°æb¡êÍ1sUÝ£6‰ LÕDr–e­Iâ`1b*CJÆR·Ì"\‘ <‘…6I-¡*õ¶Vcù²ñ–úÞI>ø8\ýC³÷/傞ý[AÒÙ—€Âjßsx¬$!b­,I°â3!‡‚ÉUƒL„ÅÆõ@D`ws&¹›%U…<%gf¤¦’SÌmXoÞ¨CÁÓ3tª9¢yj–^O$ ½ œÌÀ%aj÷<:*’åqÖg‘Ñ>ùñ¾\y­Éª7ßÛMN+(œ&.!WyHœƒ9̈k0GšÓ*¶AK67œX=ÑH>ê2Ãäo~ô³ý_>|·ó;ƒ¹¿Þï”3=ãÚ¶ñÎÅO³Z:ÌåpqÍœ9£ÉŒÀiÂfê¢ žÀOþóÏZko¾â5¿Œ\èW—þKw%ÀEÜ­~2!êsO—ùaUf!ÕQ,Cê&ÓÊ2C¿K'QpÒNI*תdlÑÀ9ÈÓÊf j«æ -(çpÚ!x)vjnŠ4l±ë"KwtŠÜˆVÁµ³µ,%Àñôî}Ù~o?û¿‡ùë·Û¥÷Ÿh+ äVd ^”±eÅœ×9G¢v\Ć ,DŸ™8E„`îƒà3ôh‘‚–XÐH¬XÂ%_y#gN^’Ãv?y{<}Õùú2Bg¨û­ÖWÞ:Ïãgó+Y”«2 -;6Á•áìæDŒJ Dip'˜ƒÉÈÊõÄ›š5ŒjD°jQilyZƒC{rÿs¿ýþÙ†±Üû°X°ÉŠ7ÇáŽy8 w:^.™!aÑBÜÖd!`R'Üõ,ªáþécYýåûÜÿþãpûæ6“:&Ÿ®8¡™'{Ì0ˆÄÊ ‡z`DµƒuŒƒåæXÌ1CÛñ¤®£íÚ@i¯¹)Á'›Â¢%/)x]]§¾Ã×'n¶ÇÔû&2Ýçzö KAîUòÌ"‘$åh¬„Ý ÄTy€ÚíNî_ºÿ[Öå¸öÅPÂQÃ’Oÿâ;ZŨF2NCÓÀâ7'4é û0¬ÛÉ'¿Ñ«ß{½8¤€k©QÑñ²vêí¹[$¨œ¶‹ÑªtpÍ\ØèÔ ZAaùx 3 êG¿¹·óVo}íèÞ:o6-¸ÍÄ¢p²,Ò ÁD<÷ʪàCui°ÁLj~lF'mm{s²‡¸».Ipã°y9Èú5+„¯Æùë¸ì3ëÌ„Oì)ç6šÏ+JoÐCšÉzEÇyÛ‘£æ‹ZÊ’Žº³q½îÆ ¦Ò($fï ™ÈE ˆ›³@+[aËü\‹ü™Gó%¯–9ÁÏÌݤ‹µ$v&s‘E¦¨~¸h„8 íTüÄk¥vmî<²Ne£äÿkïK›ÜH’ìž»Gfâên²¯¹wIk2Ùêƒd¦_/3;;ÚËfwf¬»ÙÃfYU(Ü@f¸?}@¡.} ¹ÃfÏû‚B" D>xDúñ|½>lOúŸ¢ßo§¿ùxÏvÆ’DX™Î‚‘H  À8ÖÉ,®ô¹¤JoçŠï vñðÛÉÀÿý_½ŸþâÇàþO~y¬`"!=¸X¢‘ÃT±¦Oˆ=¹H“8‚«e6ŠÁ¦}bãA¹©J¤cßW˽Õ0ã±êNÿùè y® à›º¼¶güT÷ZÈXNÔ´¹¸XêL° Ðr¬+=oRRDÿÙ{cM‡!Ó¹C:M×8'7-6Ùu4îe?eR->ôö ½=6k*g­ÔYK4b]1„e9£´ÖF)"›åJ "9C‰¶rL—6 .¹œ¹ö%M¬’Æ—û ög(Œ9V&²gçN.Mýï} ÿ©ßq¬QˆJÈÊLX‹¸€é‹¦ŸÚ´aÑ W5¹Ùd©’)wûî-»¶iO~ó ¼ÿËÞü_þ!üøG `ÌQ75š~aŠ‘É: ìÚ„(l&E©5ÔCê³#:‘ 6®¥"‡VîÏÒQz³üz¸gÏv<#þðÞ+òE®Jw¢Þ°0„g,%f¯ƒ€GšY4ëNrè4 ¡§C.6, ËÄEt«ºišn,}žU(ÒoD=Zy¶öEa_.‡µsŸ WУ¬õÆû*(3Éésh™ri8:5¥T«ƒÕêvÀÜã´ÐhÙåXzš´'mà(쬫d»ÏûŠ•À´Î{¹ кh¯Ë¢ì 6©ív/7Y‡å&%%‰P…\…ynúùðó_ÿ‹ôÃ÷»ÃêgG{ ÈùŠy»pSŒ÷íl¥£þÊ»—¦UãÚAxíM,¤P†Ù¼+ËNd Yluu¼it׎ô«.æÍÁçÜ“rëäû{”{/¿¼dÝ„×/ Ä^'\-;Ñxbë<2Û‰ ¶B÷±Mø9x F„($œAQÉ[©}…CêMjš³jÔP)à*ÙCðµ;šfÙ62D|ÃøD…,C€¨jhÃR\…•/'¥îýÍÌÃ=ê(u#!Sk²G»eõl•793Ÿsv´Iᨠ™[5è\±×*Ó «}ë[2±T"È‹³?œQ΂ßÿ'£ªÚ/.òӣÑÏÓá—‡9Ï"|1Ti«N*faYû‘µ ©;l M£D]ƺ•}%VÎGi¶»Ó—_Ð{‘ûG¯œ÷ä?¯w0àøÚ­~w[ìû]û^ñŽ=‹Gþ):{÷qoß(çèÚÇý2Ï4Ʀ‘ÂA3x¶¥¦10ФžxñèNìû¼{¼§PCˆŒ f‡Àʼn† -õÂcEŠ.¥û44¥eD{½ó&‡˜4›$•džNJªjÏç ;QüŸ]x5UtÄkÌâáe FÉ.p¨j³öPfÀÈ™{Û¶±-Äc-hš#ÁÙÊ!C’(Íà†ZU)¢ãè °Ð²ŽvNâ´²nhÛ¾·šd©eÎJ²¨Ä™Te%ë™–åZ£'ŒN†@Dͦî*8—N•j@R¡ta˜R ªgª©me‹î\ŠWæEöì5;Ïä•O_‰ñÜ5«Ü¾¢"-C0BU  Ä ¸êñF*#Hí/¿”³OþcWfkÁ~oÛpb—æ@DÖˆbzHzˆ&¤@!ë$MP‚%6Æ­Zzô¨Ó;8úОýn½ßÿá¡£ßÛ[µÏuÕê<02V澜Yzÿéx„Wá¥V­f³hSûz>ëP.Ž+‹&Эk– E`eºtˆJädX˜çxÎŽ)>Ø£Š{ã–,’Å´Z¸h‹- #rc­M‘H٠»¨ˆPKÖ&fhÉ4Y©&Ïj^C)&Œ¬êáÁ¦ñ@¯AQG3v6–ÒØò&z˜ ž[¥Mx†%É xÖ&…/Å:ó‚µ$²£Jª™K¡ÿåÆ7~£{€úõq―7AQá6NDïÿñ Ká,T#[¨Üf…íÜå’>øxqøïùë§ÏêUÙ9øã°±~g[vtË[$ØjÊ1 P%u÷¢èoç×͈O÷ÞFžÝœñÜD3Î¥po¯‹T( ÆpÂÃàÆX”Êy“¤hcr‘}ù£îà âôÙßoäägBέTÞé {ø¢_îï„Ònþ^œ7Ÿ^.­úÉõüñ³æ?üdûAÓÍtºÉ ¹‡I*Êœ-¤@HÙµÀ‹ ‹51§kY9Rbë®™ FÄ.¡ä-ÃW]¹—øÏÜôßnž=ÿ ±P¸aaÀÚWøì-žŽÊv!ª¦^gLÿ¿ú£¿9Q1}ôdŒdŠ&÷‘tûwû“»`n«¸©}ÙèâÙgÏ>,l$Ãáò7—öÁƒ÷@Êô¬’”¦ÅÀ´ÌfÏVÀCrXJB—“–N] ô2ÙÅ(|™º·WC.Y5ZØWÎÐÛ‰—ñ¬ùýÇž}5^ÁDÀB(²( q© "L¹¤×d陦dF,ýÙôç¿–¦†ÚÇ¿},•ž}rqðƒ#9)”u>}ü]ìï=è©¥YË?ó÷JD_» c¨w ™û³é´fëh™ñåü‰ö’u‡v`øäf-ûë‡Û<Ê›••Y4²èxkÎê®;lmƒ,{\J¦”lÛ¾%GSxˆiA¨Jù]µd/Ä Ï>?é}³oõÆrÉ¿á\d„h[3JæUj]eáh©£Œð…}Y.¸þÛgl ‹Ã£î ¯«ñé¼óÙÓA">¬ºû1Ëô=+M—rT_WCæ:./ütv0È0}§§¥"Y÷ƒ“aö§Ÿ~²}<üÁu­Øã%Jx8ÔàžeÚQÏYŠï™–Å.A$‡!þ,·r·çóCÐE5(·²¹ß\ûÏÖ_|ü ão϶ ƒŠº¦8’³”º’ЂÒe¨rcQ7“~<r°w8î¥#Y$9´1擥̭7‘nz؉SU÷®Œ8ÒµGzqŠª*‡zâÿò‰pô 8Ð3ñôô7 ÿêý“£«¹žËä‹ÝkÙDB§Y‘Ó(©³f¦0¥b*gHt’ŒƒL®^nðvÌîkÁÍþìÉq÷;˳Ý#£vãºLÓV „f ZÛ_gâ‹Oÿ¸ÔÁü@ óïaòàÀóºˆßk1¢‡ûYª“§‘ 8˜†V"­ªUÙÓ§ÿ\ÇÞÞ‡9®ŸÙ`öxsi­“_ý7KlÄB×ú¸7*ÊD0/º”Ë^f:OTšºÉ¨¤\´.µìE'8XJÔëÕG{W?òk!Ÿ·gv_ nÖÍÓáà;þ½v.]LÊm*,E [.­­âM®Míÿú·Î½½å›üeìÏbp€ÐîAÌ&>ŽtÞ$ÑÞçR CŸ_Øø G]Å© ÚÕƒÎêbñ:_†ž|tb#ÙE• ÂMƒ$ª*ªž¹–?-m4•½$OÿÔ"÷Ï“íûfP o{Õݱì]Å.`›e1xå™o?¶k—¨@ZI‰‘¶6ñÅð²7í²•«6ÿÏÏ8[å¨p>->ZWe¡½¢w@h<‹N gÃòðs?S¤Ö‹t?.uèù‹ÏǹwäíýÎÃö­ l(’bqÚ§¦e³n®Ki7ëqtõÉã>[ýÅ{-‹ÈCôµ¨º™&aÛxß»Ë1àæ‰“?¾–övðö_9d£]®ÏÚuaŒa­É—òÅéFí²ƒE.Ï£ÅãÊŸ‚j­N5ìÙ$N}öe1YŸyçäÕ®9/ð„¸¼˜ú<î>Ô.€ì¦¹R™ø¢ éˆðMZŸþt£`êÜ.‹ö™äXðn,ù˜øWâšg³Ç¿ëëæmìJ3Z-²¥ì :Sjö/âlg~²îï)a!¾7ÞDUÏ÷qT¤¾sæ²?’hòxzÒÚlb²:›LzHíõòèAùžŽz¡&ˆMF°u„gžºØøã‹¢Ì5N»OG?í4‘TŠ{ÅÝžîšõ—ã†g§_G¨í;†+Í4ÍloqÑ[µZR$…ÈŠ›úÙo•k)¸B™OZ²TŸ6Y’\ÚH.1)æû1J‹ål3ê=9íWý¹‡ÚžGçGŠ·l#¢ÀýŽ#b*Û”Ûõ a­R©%=] Ž”ô²”Øï ®yv1ýèµÔ¹¼u ˜k–à¹l-ŒLÅëqàâ³µÔlƒE’Ëœ¡•çéØNGÓ}Êì1¼¿Qèžïå8¸\ ë‹~«8Œ„‚Ñ\öY 3 hƒ²ˆ:„Ñ¿Ë;9Á_ ×<{|ñ«wg€YÉe‘txæíQYHÞ0|4›êFM'q9ÏT;²³¤Üë›B{ý59XC÷+CÊ"³ÈÒ*´ÉûÒX|vÒ–B!Œqo™úËÐÊ "*Azu'LúýÅM§»:ÜÞ‰ÝCÎêR°¿h{§)TØ“ VR¶*åqá‘pÜ䋲ìJ¦G÷²SVÌLª¸ ¥(BjÝ*žë>Bªó-¦fÊö´Ií«¼%1¢~U÷\Û³'—õœ=#ñVæ¤|}@l¿Dd•Ýó«Y2hô:TTKa¯ e¯ê½ Ð#)@ÑPª«˜C¤qM®élÑ¥íÉ]ý ü…dW¸¶gV¾ ¿ò;?IðJ=]Ë+9¨mÚà.mTDAÑE‘À6#¬µ=g·äíz£9M꺱m¢œªRdƪle×òú¿þwqͳfõo ·ýçÀuæ5nàª\Й®H÷®Î*Áh¬^gKÜά4@*óU¥€ "HBI"þ•±ßc\ó¬3þÅwxÖxC"¹wÜìNŠümÑN†¹‘Ô”*)±3wúnþL_®yV¯¿Wó´åÑó’o·"Ø·räY€z³t½R#M»ÓßáßâëÄ5Ï&o{½ÓŸŠìÎ_\)âb®‚ã¹1‹¨+i%÷×Ò¿àëášg)ý™Uöþܸڲ+µ‘ʶ.Y¬m[ öÅ·Æ5ÏÊÎ÷›g7%™+éëVë[¹iÞñ½žž?7~ÅŸso;;µÅsd¹•Þ!!ÑÛ)<þ:òßø«qͳ¹Üt÷¼u‹õ.}ù{rw.îµ¢1K¼[ßúíÀÍý¦µî— ó–xn.Õ½'oÛÕzUlcçà¸ß¤â/x=¸±g6D‡)†ÞÅ’À$GkÓ±r+à$"*[!³  @ðžÔ_ò÷ qSþ¯í×ʈ–ëG¾Zjé áçö5Ï.~óT¤§È\\j¹Q-±‰Î†¶W¦igéÒíO9«VRyŒd¦Ç a­…´—>‚E%4A´‘3c¨)< äŽÜësøVàí‡Çì–e~íòw×<ûéÞ/! ^‹dc&"\‰P„7Yê¨Ø§UÓ8ÎM{‹±jX7‹TK›Ï•kö2Zºf»Žáåd(ZAÁ™ 6uC u¤q6ðy‘#¬$`DQ°ñûÏSU°ÙC…† + ÑBMð­pKŽ„† @LB:%dDdÛv—°mŸ º (C;‰åÎq+wàšÏi#îðmø÷}åíu¾Æïýgßøû”†xƒBwˆŠ$æ`]J‰¤ºSÁ…7l%25«KI-¡’zðHêbúdØZŸ¹ô˜¤¦»xͶ*$µÖ:M¥$œ¥^pÝÒñëµ ÛK¶–`k-)‹h¯±gªl¤TádƒRÜ’rÙ "%“Œ¤ÀT»àÆû&“™…©ˆ¦˜T¬­Þ°(Ä© 04½J×é-í¸ÆŠ¿YÊßûô[ýPî퀿r„b+"-Àît¯^òÆW!<„ŒÌ+£Ô¸ÂARD6%sVdöb]Š<7ŠÎš>y®º̺{Y k²éytà5’Á-rm iBš,ˆQ^îé4{GgÒ[¨5Q:/b!Eí®š¤. ¾oç™eUjäýq¥T-aIµ(Ã’xÖVÛ2»™IQèF`* š] ¤o„Ø*F&‹f[ì¡I=›"Ä@^µàsÛ„¤í‘-±ÃI‡H!¡[ =*tMW÷ÓA UD_µe¾ÿüÕ,Üøi}õê¦,ÏáOË]¿ÂÖ¶~óhôƒíÛe÷97¹c†Ì¤H€clK™VfœâΈ܊8DÕ] Â]f†wõ²ÁÚz“H&óÞ<ò&šŒV±¤;†_JËÈÇ‚qž‹ì_$!Rßa:#Y &=\ˆ„+æFZ2´1ú2&Ī¢ä#³ìIræÑ¢UâýP媻ˆJ^Æ:÷Ã/­q€Åeo.ë΋ýÉØº‹ÔmØ]=¹ÈËÁ†öÞ8»V›"uMÐã4)RY¸QÇ”*ZilSìn]Žo¹ÙêÞ=¾[7ÿ8ý¹~3{öa7ÖÛÓs³­zéë[üqnKèB J:YNBÏykyaDvÂMPY/Ñš¡Î… .²Î›î‚ûʚٺƆÖr_´š†Él*FJгè'žµªè 3F¿xí8^dí\h_§°•ɃÅe  p¾<Û…öë˜@qð41Øäu·F¡¹–BÏʦ¦fƒô¬ÛM6Ov’à1)tß©‰,Y;F ™ˆÉàR àšan¦@ém76òF˜ý×ölu_Ôû»Â1à¶[â_ßW¡ÜOñø=Kãþ;Rp_Tãæ|®nW¹ÆÎÙŒmJ°ÜZ·:»[ÿs„*±$THyÛ›M“ ¦¤2.É«žéÞ!–Z^ÎBŠr±!`aX•fÆùL [ýL¦Ìª©HQ¦aÝXJ±^g9&¦{Í ebŒþë­1ÞÔ¡l~ô¢Öw W¾’{ò”7xŽ<7¯ÜÏÜUõ”»g>oÔ¿Í8·#ñ€ix@¦Œ€JÓPJÖbÁIt²D* ,DÈØ,l Kô/=oòÑbð«Ù³júýŽ£¿i<,ýšžã{g¾Àr?·ú¦CíMÒ dÛÅV@+~k ðªÏ{®­Æÿ2f·÷­öÕIEND®B`‚leptonica-1.70/prog/feyn-fract.tif0000444000175000017500000002640011166233363015222 0ustar dandanII*B,&¡fÀðÁ  Ó ÕB0È™Á¢@,A0¤%íþ2ƒ†Ã û=°ÓïÙÃ6÷§wðŸ~ï_ÛõÿÚþÂþÿÅ…÷þ-sk_†ºo ¾~>Ý„ ƒV¤ˆ(öé 2 œƒä5öð˜T .BÙ a͘ßœ6äuúa5ÁAB C6#“â±íé6‚‚ £Í£ßP…„FÉ‚a‚.0Ð(÷jôêÚA´ˆÿ]ƒ ´Â &œ9ƒ>̰ûzZé=i{ɧTÔ&& ‚ ?n¶ÒûVÿp­|㣜$˜!a4·ÿ«ú_þÐvNm'H=Í›M4ý¿ÿÒ½÷­kiï§uÝtlß±ÿþþ»ý=x­:ìЩ:þû®¿¯ÿÿáâÚé¥þ×ÿ¿ÿïþׯV£ö¯ÿÿô¿‡ë¾+îÿïÿþÚß·õÿïíïïÿìU{<ú׿_~¿þ×ïÿóÀlz»kÖ•Õúü/vïÿÿøi·½>ºð^¡ÿïôݺa§Õö¿èàj}»ú«ðƒ{ E¶“¤Á‚ý/ßïßÓv)Û(p¬4¢þô |†‡{ïî÷pÂxŠbœ&š¬Œé†N;#¿ &O‚ íšÓ^øö 'öJdQñÁ28a3HØúki¦¤ûš±ÃñdpÐGÈáËÉ„íÝ„âšOïŠÄDDFÿi ›I«O¸ˆ´ÖÂM6šðdpÎ2ú >ÓZ8"""!„ÂÒq_×n»Ka‚ìBÚÃÿä;ãC! š8tôƒÞ“ƒé>C,õ!“YÁŽ b4Ÿû"?Ý|&ž®BB^Gð@Éq¸Ÿ^Èb5éÈdÿЦ…„ÉjD9ü… È8ûIwèãl] í4Õ#™ H"¾;AÈd^wM†~4Vg9·Œ#“]AEAGäûÅÓé-¦v›VÃtÚ8á„n!ÝÑ¡ø‰d ÿS¿[Jº÷ŸÒ·NÁBwªA¦š fÔ‰2,Qzé=8r‚÷þï{ûMV¯¤Û@ž+ÿÿ QP×…¯ëèDDDE„ûx ›NÖÖé}² õØzéÐ'ÿG¯·úñ÷ûøˆƒUUlSI±Q×ü/§úIwö‚{œ 7ÿ¯__ˆ¬Þ0ƒ Vž)4Âm¥awUFÃ?ÿÒðPˆï×õÿúd2Cw¬DDL&Òa Ž á¥iç…×]uõÉïÎÿÓMqÂ-×Âxظš öÚÿ÷o§¯¾×þ±Xˆˆ†™œªÛ Ã; à á=äq¿WÚÿ“ü=b"EÆfÖ›Åű°Öû]~ȃëÿãADƒ@⛳7}ºb¡¬l0ƒm6Âþ«ûH1Gˆ0„3’ ô™œšj*¢Ø¶ *ݯ®/AÄDDD0ƒ ¦ƒ·‚ 'iÞ>"A¤pÓ=} ×m&^ÔDDD2áÈâA5ÚyÏ`Ïâ""C(vpfÁ!¥2|ňé§d3<‚Ž -'ùd · Ú9°ïi‚'ˆà`øÃJ“u¸uFèBò¤é5ïÑÑçáýãí$ú8|à¯Ä¿ÿU'rpöEtÈÆ­ýö¯«éè>²1ׯ¯ðø[*‡˜@Èü‰á/ªO®ý¶@ðbÿûL!hy>ˆfPáwÿ­ò‚ÏY¡ÿM ð½Ã ‚ƒ¾Ÿ~Cýá 6žÿI§È´Âd?¬øí¦AŸÿzÕé $q´ruˆOƒ <ùûJAUÝOþ+«žµïTÝ à7ÎoÂiÄ2&y›‰L‡¿±þþš×Å×öº áœåG“¿´( ’Qf§!ˆõ×!¬áÿkö·×ÿé_ªmöÓM&¸AÒã †Wg² ÚM~ÿÿÿ§½¯þ“uÎÝ©³sû¤Â Á"Ḃq­WÅoêÿ_þ,9Gö—ýuI]/´¶¶šI{>è ²:ÿî¾ÿÿè~ç§­ýoÿoõ [G'£“¾,*ðØ5ªý¤Ÿþ¿Ï¢:# KÜéÓðÞŸJºçÛ á´qíl&ƒ‹!fƒ"ù„ë}?ÿþˆ£Ïä0ëÿ÷«žpc}¤ºôÿa5†@ðfˆ­! `µê &d2º -ñ' `Ï®ÓÕ¦i—TÈdH)úЃ¹ ±ô,†ÞÊééw2CS²‘î>A•æ Ûò f.?ÊðŸ¨kyÅG›¾ôâ ñâ3 |!€<4¤ŸÅtG²Ž@ð÷£“´ãM2s<ÍÄŽEÂ7ý~´›Iúh>› û£†Ã3š§Ý¦í&¾)7[¿é=]l££»M'ö¢%ÇâgzïµûÉYý?ìú¤Ú[M56pÓX.†Êò~TÈC¦Bâé^>ä áÂ[÷úa}_ÖûQ·h⿚ƒ!fA3 \×ÇÈ ®ŸõëÐÖ»ëï[‡„ÎW]0ƒCøÃ[úß_üÐa?»õµÚg´»‡ ûs &˜Pƒ½Ï3pA‘3×ç?þãTƒ@½O oôêìØ‡ Í–r£Ûë´, Éq°v{]iÿô}zöÓ¨Û\=ÐÁµïï¥úO °Á}8M X†BùÈ/„‹êÂÿÐ'ùâPóˆ(Õz®¶P>–Á×ßÓ«þ› S“u°ƒ “¨´PL® ˜¸ï^—íâÌñ£Õµß«ÿ“‹ýW¯ý-<þÑËÚÜXA/2'cÿúÿêO>ßýñ‰Tþÿ WóÞžm&óEœzM4 Ÿ„Â$ x!†l˜ í/¿ìŠù;½m~ý½Bú½k_á„—½[°ƒiPghãi§a ¦0ƒÛT× ö­¯¯þB9.÷Ûð_ÿÚ¥ºïz…³ÏM£•m°Òqh;ؤAÄ4Ól-…ªÂmì7“ðˆçÂ#£ÁƒÏúþÿÿê»]¿M®—NÏ»6!ÆÃ£“kiw0œSîÚz﮺`ú ÿ¶ë¿þ®=ëïÖéúwIØY aÃM3;Øiªâé4þëËï¯þµ¿ÿãÿ_×§÷½nzUmb"ph#‚ ;O´0šv¶©ëßÌ)}ÿ¥¯ÿÿë^5¯úüDDDYöŸTAÅGa=u´›ûuºÛÓÿþs80_¶ÿCþ×[ñšwö´A àÂÇ ®m;]mÒFîõÿãüWõ¿\ù ×|D£²< ÿЦ*-‹m-´’¿ZÿÿAeóÁ•^ÿ¯ÓHDD\D‘ôÐiÛc °ÂKímµºÈüøeïÚÙ°cèó/…_ñM‹0Lù§«ŠT7IXaum‚×ûÿ ÿúˆˆ£“0X4œ6)u`¿h ?VEw#{"úý$""&­¸¦(& °q÷iØ]5ù…„D0@ÈøAåäÒ 4î‚aXa+V×þÈãuö „DD0ƒ ÝíÓA±LTUöÒ_\DDDvŸiÚ „â˜Ó´½DC „ÕÛM&ÆŸN" "i«iU!ÇÂðOQòƒHñY·ƒkÝA¯òÅŽ»VC ;¼r ä2Údù¥Òîžž=‡ôš6Èdgh< d,Èd2ð‚Ö² N@¸áÂ!˜^-4s.¢\] â?!'G »¦>žAµÈižÁa?´û “ô"q®¿¦.ŸœãnÖíUŦƒ!—È 0~<28CÀxjÿ^²CÈN“‡ †xØpí#mº9ÓNÓA‚2È Ãê¿ÓWdÿO_Ó¿I6ƒ£ÓO¦0ƒ'2õd&ŽJÓ]UYpVéÿ§ÿï¯=÷JÁÃ8 ¤q¹ºáB Á0„[¯gþ¸¿þëö¯ßÝÚÝ'G&ÂuN.àâ … @ÂûW_ÿ׺ëC þªÓ÷Ý&ݘ,㣓¶»8h CÀ\à(¨ïÿÿ÷Dzr„ÿë÷§IÒl3õ‚`¯ì&47!˜é¨ÿÏ™/¿éxh~ú´½×]=7L-mŸ Êh4!’ãðE2?òcü!ýµ÷þïVN }uþ·ç »AœäÑÇm [ ‘ñS#¼ˆäì„p¾¿¯_< î½Õ [º÷T÷ú¿ô›Ü3‡t{á4-a˜ d¦o6²xK>/þä î¿íayÀÖ÷x[õ¿Ö¾·÷8gƒA¶Û´, î.!„ÁŠtG6àx›M{ öªöD¬?‰|RMÿpÁA„û¿ûU ðþ¹‘ îC\}=ß„ýÈ ö@ðÒÿQ7—äü Á#â¼2y¯î»YÂa€ðÊ6 YCî-„0˜ ȸn ÷¯ÒIckÊS ØæÝÝVÕ…‚5Ä}¥ûVŽÂ’'ÐM³:Ž6ŽXkÂøKÔVòƒo“ÏùÿNÂn›Ã‡Z´ÿ¢ ™n:WÓ¸r‚ˆTùïõJÞë÷>yÇ`­ßé2ø!×u}‚MÿÖ?ßûZNÔõA6¾šØRœÁ»ï‡¾H~ëºÕ:ÿz êõÇ9õBÐh2 \Gæ-ïÓ¿éÿUñˆ-_õöý¨póŽÚv §3GÅ'eYkôŸ÷ïòýÿÝ;¤á™ôlØ`“xÓ¸y ~?â¿_ó=/þº yŸKþjÛ m¶™ÊÝ”†BL‰ÄH'„Êuþ½n¾Qçõ÷n>é½ýéë¥mº áœÐ4Âa†GÿÿýúOïúýSÿ­û¶—¾ÃG&šv¹ Ï>Ì…”#ÿ×_]&ézþ¹àl}¥ÿõq]ôÚO9QÆÝx°ƒA“âL-®õùÿíroï®ß¯×¾˜V®¬7¶•îãsÏÚiØ\ºð‡îÖIµ×ÿׯïWûÿê+_I]u¨y÷¯ß¶lTTVšÛ§k}‘«ûÿ¯ÖÞ ¦žûúO¿lû‡ž]¦º}ªj!¦¶¿Ö¶µ~¿ÿÏ¥}ä ܇èñ¯ýçµí6è ûµˆf昴ظ­6M­ÛïkÿÂoK¿õ¡úôŸzÄFl„ÌãžÛpƒ ±Ã -Ú¯×ù1ôð‹·Û×õÿ´_ÿKÄDC3š¯iŠ0ƒböÓ½ëW!]Aòßçƒÿýð~ÿßñG 0A«¸aŪ¶•­…FçÛúôýô¯ûüDAž4½0ƒµUoýM]ßÿáþÒÓËŒÁ‘àAŸ[¶)¦(* ;«[½È‘¾¿þÿßÂb"" Á˜NÕÄ8ã»JÖÕ×õúõÿÒñ`ƒ ºk`ÂL0“ÕÛjO>¿ÿcÄDE‘ôME1M1A5ˆvº­×¯Xˆ‹#°ši¤ÓmA¶º«z¾$Wa4û½‚!Å'`ŸXˆˆˆg Ÿ¶é6,&ø‹BÓ3•l]xˆÎh2<g‘ÿä5}qò;K]òx†”VAf+i„ëL/ÓÙÁøBq^áÞÈ õ׎Cc‡ Ú?d »¦¿û aÃá@Ça{úùÆ8p¶A›õÿ^q=<ƒHdð„✉Ä,Õ×_t²;ê˜B 9™³æ ‹ìb=WúuÈä2A}uM?A„MaËr:®ºµon‚¬ùÇ6è圛T,XL*qB&éø®º !zNôõh'vM‡œš·iÉ€ò¦Bù «O¥_Vúý×[ú}'œ;<%OâÐaçâÈ^!–=úó{ ùõømmnô¶Ïj®çç3Á¡jƒX´Â$€a0›®­4ïÍšûKèW^©û¦p!ù££“i4ƒA j~ œŸO¿ü5¿ôÿ½I´œ0LóhãhÁÑÄûbÐhsù² Æ;ÿ·ýªÔZÿ½}MÕi>éa„Õ…âÂD¡Š™!È‚P¿þþ¿ÿÚ5?ë_WïzÚ àFMí4Ћø%ÁNᣒwõÁßìsá?üzý§¯W\=[®yé¶p%èú~…„>%Äø¯ c/_R<¿¦8¾µßÐâ÷׃út·ž6n ¶uI¤{§kÐaù?÷Áÿßßú?ëúø?꯵®­]Ú¤4TrnÝ„ê!Neèo#Âð•~!°~×¾ÖÕ¬Šÿùqè}sD¡iuö½kÕ³Ò¿fÊ“nîZ;‹BA„ÛM;Ü+×Ú¶Eÿ¯-òcüàeœÿ»}zèúô/UÏU}çÍÂl0Z96›‹A¡{†“i4à z¶·úÿ¯þLô_ÿÿïÿûoµ­úNÓ0f|6wÛ¸­ŠØ¤Øã×ôÿ¿r¿}A¿ÿ§úý´¯ûý¿õ·J³ñ÷ Û3ÞÍnA¦ÂaÅÓµÒ´¾ÕȯzØ=ÿóÁ™õúýkÿÒùË]îÜ'„+†aa;Nè0›ØãM6ÖÖÿ¿õòoÿ¬ð'ÛI´¿ÿÿúú¿{ÄDD0™ý5ÛúkØ%{¥{þ¾ùoïüq¯ÿﯥÿM¯0LàÌÚa5i´Åa0¬5´­.ÿȃÿïï õëÓÝ®õÿ_ÄDDL) ÃM5iÄ(Ø œau_"?ô~ÿ½VôÚ_^ øˆˆˆ`˜M8i„Ò  ˜V¶¾ÚÝn÷þ×ïÀ Öñ!ì4ôšlTa5`Á&­Aö’¯_ûï8ÄE§vš´TR|ê?¶·ßý:þ—øˆƒ §ÃA¤Ú°›iEÚ¶—äXÿúÿa0O· Šn)ÕBm«Kþ«øˆ¤­0ž˜¤A±]¨TöÕœA‘Áƒ`é…ÛT4aiùPjÂI8ŒØi‘ÑÁ@M=ñiÄ0OM`’!ó7pÌãžò‚øA©â­qQ ƒ# ˜Z`‰â8A®=ÿüƒk‡Aà‰Å9yW!Çÿýò•ä³A¡ œ?˜MU×ôÈ6f}qO_\…ïý·¾ƒ†gµÂ½aGÆâ%—‹kˆwrµÚôó£†÷ïÐqa £Ï3a^]?w²ßk§Iÿ×t´zÝü4( å?óAÿ,ƒ(äwOîºò ^ÿôá™ì39Ó´·qaƒ!¢Ïö{!¤?é§oä‘ëè~»W Úwi©³hÁØV®¸†J…ðGò8ˇ6Àd/ô¿‚þû‘ߥý=?ëî)û6m‚»Õ Þ4N F#ˆx ÿûµÿøg¯„¿p—Õ¿[ïÓjì Ï·m:m¦¤3ùèAžw _½U?#íÞþŸˆ/ýÚºÛ]?ôóΩ·tshÜ÷I†1öºü+ÿwœôÖø/êëB 3 ­m{WMô“ºN“´ÐtyuðA²@SÁ Ž d3\(_¯õÿßð½ýÚ‚ÁþæŸÿ­»×´ïT £gœŸÜ4 GØ2‰@¦€‡ëûí¯ã¾ë}][ýúÛ¨uþ÷×Ó¤ÑÆì&þŸa0A桸–„ ž¿äAÿ®¿ö*(#Õ¿×_}Y8•j ÝkÿëÞyçö=¶©4ôÓBBû5OVÒm?õ¯õô‡ý»þõk‹'ýZàÝîÿ¦ÒpáØ(AÙÁqç:´í®ÆšlCl,0’zµªþôÒY8%™oè'×^ûêîñ= Ç_ÿûþë¦Ò·`ƒº<»®Å±¦?mV¿ÃõäÇ÷Ø«í·Tˆ°aÚ V•ÿýz^‚vy´kgÙ¿¸d5pÐx âÚýiÛÿ¯¯þŒ Ç­þ×ú}×ÿk tû  ¸ÁCûWh0ša7|'ikúÿÿ‘ßî3Å#õ×¼~¸‚û‚ÓHk½V""" ÚBì%Mu±wÆ«§ki{[ýƒ» °‹Í5ú¿ù  öÃÿâ"±eÒd~Õ;R…Š ˜A±8j«ÝöJ7®¼/ÑÃÿúê-þüDDDDi„Õ2PŸÎl;§Õ:_¸v8g6{^!¦ƒ+‰q.?¾¤'"_Jˆ;¸i¯§Þ›î·÷ ýG¯£–-4- #ðƒ/È"Ùvצº°ÁÿÚï]úôÝ8pÏI„ã½­ÄXL!P3@¿Å}ÿøûïƒk~´éé„Ðpá™ÙÊŽ6Úv˜Aä⼋¬2cÿýk_\ v‚ÿÿÿ°›IéÙøÓ£†Ãm|C@„!ä&Îúú¯ý_ûxzÿÿÿéû¦û?YáNî-; —‚ Ÿ“ bÕ?þx ~û×ÿ¯ýë_ê­&á6ûìÎ|äïAÄ0œA„ yðƒÙ ·ÈŽqð¾Mþ¿ðÝf»×ûkÿûA/õúiÃ>©<ûz8ìZ„Ó¸†0CB Éñ8Óõÿ×Ë‚œ&èýû~—ûî%#ÞúÿééêéÕ&Ùö~£G Ú{MBí= ÀýþäGzìøWÿ¥Åzÿ…õöÊš÷Š·WýSxz&xHG¶¨äÝþÑž~<3@§ðߥ­®ºý¾†–¿ýþÿÿü}ûÕ´ïzÞÔñº8|;P½ôì&НØan­m/ÿßýÿ_A5_4~¿Õß×ýkJ×ÿ­ž §µÚL'ÚQ84°šküØ4õ¯ùÀÇÑûÿõñÿ©÷ÿ§Ýº¦¤q¹¿¿´Æï‰„Oµ[áúûéwûù7…ÿÿë®ßÿßÓAï­ÐAñ"ŽB ÂfjÕBb!„Ø´Õ9Ð3ïûWN½Èþ“ÿÿòtýÝýqû¥ÿý·ˆˆƒ#†ÀA‘àšfqÏm„Ða;M‹^ÓµþÕ{C^ëÿYÀ_áº_þ¾ÿí~ßaa;¶·h8a0›Âj¶ý^êÿüë×év®—·Ðh,ÓXˆˆ’…{¶â ÆX°Ÿ~ëûØ;×üðe:Gž?Ö˜ãÄg !›TÓ4ŽkÚ†›4Ä5Â]¥¥äXþÃßyqÿ¥ú±ª¾‚q(â!‘Åk§ ÆûKm-uþ¿ßZÚ^h†­ûˆˆˆ´ÌÝêœk§jéù;K÷&=4ŽýDDamL$˜ia8i_ví´›[VˆXôßK]¾¾l5B„zîãb‚0š±Å±OÒ¯ÓجDD„€eÅ.*eôÝ4Úo¬'{µûì,DDE‚ ö²uôUvù°ËŒDDC#árA­¯ê!ÚX¨ˆˆ MoÇ È-C¨‹TÉÕ­SHD —Ö@ðW‬ñB">>õ<Èd‡ xž×ä <÷~AiÈ ýúë®Aœp××ý[‡ÈjŸ®+¾@ÇA8 È7Ë<Uü†HeAÀ²8°œ qBL‹AÓí~È }„é;L&$hàÌa!’úy » xcÈŒ39Î6σohâzá ÐÉAÑÙÀÁ¶l}ê÷dn2Ât­¥nyÒ »´©Ú`“¨°Š |!ˆZi܆‡ôÓè ‡€ðúéýéºwÎƒŽŽM§ín,dãö~ žCŽPê5­´;ý]µýÒfÍ;/ÍÄûÿïk®¯öÚÝŸm&ƒhöÚ 0™ “"y9­t›gÞl6ÂÓ°¨DXN-COäN·ÿßÉ¿ûÿÅWÿ¯¼_û…†ëú»M½S³Î'GnnÚݬXLƒrk¯ýz_ÿ©1êpÿ¶—þþÇ(6 Oÿ¤·MïAÃ:,Ùí‚{L)~„°…í×_T¯ýRòcýq_Õk«q¨ÕÖßûïÛM«ÓìñØNÍ76ßqh3q?Âé·WZÞõkð_y7þ²cüðeïÿú‡×^õüþk÷a:º=]še ¿‡„N±Ã;J×]g4ÙõµýuúµªGžGN¿ÝÖ?ú¿ƒºßt‡`ƒó›ïûØ…L\SØâpZÿ¯ÌGÿý¨<àþ·K¯ÿ²pÏõ÷ëþƒ¤áÁö dy4išjcM=A°ÂQQ÷ÙQ¯¶E~¯õÿøÚûÿî»ý~è.ÿÚ[û 6iÚ¶=¤iÄÐ3µ×[_û}ÿv¦Á‹Öµí¾Ú_ý1×ýuÿˆˆƒ0 -„Õ*aq¦›¯zÞÙìî½ïòcïø6¼ÿ¯ÿ¿þ"Du 4ÓýÐM6¢‚a8‡uauuúȃÿ®[ƒü/ÿ_þñ_~‡Ú}ª»n6)† ]*í§ö½¯Ø? _–ÿ£Ïõõ¿¯º8,DŒpÁW³9SLm…´êªúÿÿ̓ ïôŸ_ÿ×õ§›  „‹Á¦˜„i»šÅn—߬ÌýJÿ¿ÿö ~" Žké¤ÐxA°ÒUµù ]ºÿ÷úúïìzXˆ‰(½­ŠA„R 8a0±¦©ëÿùܸØPgüDD5MoJ»N‚ Ó†6Ó¿ÛMÕWÁ„Å&"CŽ"G€Ð`ŠݨÓcbÂk®¶¿X†LDDQ㈆2:6wdëhC4avׄDDX&{M:bN<tˆh„rèô‹¬‹ñ ÏG+XLàbá‚B"-nƒb‡|†Ë x4; rC‡Á ¦äG¼àßÉøÿôþ@ðŸÿ´Až¿~º‡ä~õ×ü4ŸgµÕ}ò C¿Éa.E ¸BâPö›È0ûM;sÐ3q>7 Á¬;È/íÿýb ÿì/žwào»qa òæ_cËr‡$ä=þ» ȽÓnôï†p[£ß^í0„>AêA¸ä3l‚ãþïdŽŸýúvxϽÃ<)³{[´éî2~O22$ȃ’r$ýôþþ¿ú«ö•½¦&šFÛûâÕ0@ÂD „²káßÿÿ_¯~½ÝúVÿíSlaB†AGûÿÿûûíïí&ý/Ç ûÎ6Ž6Ú6úi¨A‘pØGÄÿÿûÿ­v=S_î¿÷«Iªw§ ð§G“Tд Þ˲."<úÿÿum'×½Zé÷]žÖõV‚ £ÖrxA§„, ÉTn œAˆ"¿ÿù1õÿð¿ý§Hÿ_tÕ¾®•Ó¤í£ÓG¯§ AD€C€x?ëûÿ&?^ú®ë×Ý>¿°DuÆfWé?³èSÓ{hãvœCa„.6oÄû_¿ý?}öðbêÄÂ}ÿ¡0ÝzwÃ0“½6Ìã:Ž;Úq`ƒ!¦™‘”^ Ƶk­¯ý¯^«QS€Çÿ_XkÇué´?û9%Úié¶gîfœäøkØ ÂÁ}¬0ú}×ý»¿õÿÍt¿ØûV‚øýU­Â„ð› 6èã£oúkÅ1lSœi¯ÚèÚdqõMÿûó€½ýªŒÕ?ÿúzÞžŸa;kÓÕ„´ÖÂm¥~×äW×_×pEÍáÖq{ïÂõëÓOM­ÏK½ÝáŸnlÖAªÙü&™ŸÚ´Â.65éîþÿ½² ú‡Ð÷úG¥ªÿ_ÿøý¿ON” ÁƒA‚ 3OÓH:zl$žéÿëÛ¼Âýv‚ogõÿê±ë1]{â""!‘ÄqÙi­ëb“ à ¦­„ÛUõJûÿ_KùÀ]ÿ®û@ðÿˆˆˆ`ƒ'i¤î!¦‹c[Xô'T¿"KÿÔðbÿáXÿˆŽ"Âzbì7H8§mml.¾Ÿûõu«¬â< Öÿír Xé‹8GEÄ žÐa[TÅ1L\4Õ†¸RV½‘cöÿu¥ñÁ»ýëO!Ga5lC ±QÚ¸^ü‹½7ÖMÃÎoøø¡ a}X·uÓƒ *« Oȯ֤[Kë…Ј`„3†mØLϽ Ø „4â“OÒ´õïÛ[Ð^"" &0M4Ðj-¤Ó8Û v¶ûoó`x¶ˆˆˆ`ƒ>Ìôã¦( ؃µíWO ã³?1„ÕñAšzs 3ÄDDåM3KQ &À€8åå:,ð,ø,(HHleptonica-1.70/prog/rabi.png0000444000175000017500000070641607551337230014120 0ustar dandan‰PNG  IHDR à ä*A«gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœì½×}'øºCމÀZFK{IÌ8kꈒ.a§"™ÍaÕz`Ÿ´ãª;yPQçK…¸Q|µU© ªÛã µ»—¬qØY¨ÊI‰“+ŒýÇyNàýò½¾¿ûšöï“÷úþîkzÞô¼1hðNÝëû»¯é’<=PUÆ àAÀƒ€7íÞĽ¾¿ûš€7=o zÞtçx£Ó~àÕïõ ÞÏ´xT•½èÛŽAû€÷K÷úþîkzÞ´x§îõýÝ×´xüy{Ñi;=oDúøøåí½±{ž~úŸÈ6#íÙÿÁÛùø”‡07 ¹‰(3߇ƒþÖȾJò/à?õNµ¢¿õV]<{˜|ÚC®é_ýµßü¯Ô¦8ÂçY’¥v_4šqéVÿó§®L3”%ÿðÞÜÉßCz¦7=o zÞô¼1èxcÛàUuEÓFëºêò7Ý4xÎ[X™@Cj÷J³P×zFG ­8KáPn5S,ÅcBx]Î =" žÚðDã¼B÷4ˆ÷§ ØMž=L&´"µOᆦƒXó4®ÒTêšm°¬‹Õ^0÷¥Öµ;„͉T,ó‰Dd=Ÿ'„ýRÙ'ë¢QÁ‡5%-ÅE¢ÞÔa,'+ʈ_e~òØ13¡\:˜ã8x3=ÖW÷%ðöäK˜Ub²w¸®k;”íEYšº|M¥3N±ž\œùÛÄ žD:oÎûmƒÑpàõ;$ŠvÔà¼*eÛFClªøGѸæwØÀO×›ÒàY‰UñÇr¿ØŽxrØ÷HC¬6AÀÚe‚Ú+ÊðëÎ]E¯Á¿·FBÍD|ú‰á¿x¼dS)tÏBMÓàçõЇ¬Ç4­\+…kv4‡eÛí¡@cˆG²¼‡ü²AihðšJ¯¢!‚ºô­*eQXï¼¢3c0 -cÑ#M¼ÁÔ-ßOlÛ&sùj™ôŸ*°š¦‚œ¨š@bE]YÕ«Çëû“‚Ÿz}ìø$üXÊPO5 bâ uq’5*`­¨€ô5œqÃÞü&*üSkâɵÛAhx¶5”`±{õ9ì³r#™l)&ôž…¦^¨pM¥s2 ;˜ô0·†D+°ŒË^‹|=÷ê ^Ý\êûp õ<µëÜFÌ ½VS-Ë  ¶nmðûñOº³;51¶w|J¬TéoÞ}‡ãÒàœT[œ? ´àÎâ¥QÍE²¤°mØWJÒÖ´ÛÆ‡œxv åeù½óa´ËhdÑçNpeKÚ™tµ‹¶Sëƒ-D8ej#fN?v1–J Srxð¦b¥.íª®ÂÂ×ìX»V+—S—š¶ ¨:$÷’ªõ4,n>˜o­×ž;¿Ò^P FC€FCÙqÆ!ÛV­4ô E¡6l½*µ˜›ÃLµÁ4óLš\ß”å"ý5î¶m˜R×m…­èy¥ feCt¹†ÏÐUèýex~ìxضGĹB£“ªwÕW˪£ºEN€rZŒ„ª‚ƒ¢1F•Å{}ƒ© t/ƒ™ …ÿµ²ÿFÀ×w…oˆz²Z½Äâ¡GU®¦7Ê¢`qäáÇN¹ Rwð™P¯ õÍ#¡õMTÐÁ¶qŸ¯¯®©tïj‡jµ¨&-nA/ êwhz®Jûë,¢X õÁh Êâv°íÐÆô@4¢ª‚[=bטj¨ÀhžY‡qñKæYÕ"(R¢Ø¤Óðãáªâµ•d‰ÀÌÓGÚ4ÙŸFOírQˆÀ‘˜RJÍv— 5m· uë¨Z^*ofl uª^^Þ~S¡jû`ß6íUAªëÝ÷§P¯±«Èíñ¦V5ÏäÁ õñ\ƒmÅJÒu5i,ðîØæL8àÔΨXA¶M¡^lÁ­²¿ÔÓã`w>–Hßæ•!ŒéahT=¯WÍm6·”º†æ™uTEi[«ð,PãrWÛó‰èjØÐ_:†ÉåäL±\E‡/P÷Ê}ɼ½’û£Ã`:ØÜ '`¹+Ô:ª0Ýü¹„³pßû2ñÍq&9Jrq±œÊ¢‚†Ïñ”nïžFw*¸Åؑɲae é1ÄíIã`Ç.ÆøD$¼žÆ6 UwF 嫨´F ˆèA©Û´/=uêñÛ“ÆrFygùüj¶øF<îT6[ä)÷¡ÁSºpó ÍÚŠ5ZE‚ &E¤ÇµÖ( {MS»–F+êZkÿ|m ðÒ™@”gˆpìÏ^èûUcÒ0àizß-(±ËRm^†w %Z†Ñ«¢ÝFݯ3¦ö¿¹}R•ö#Î뛚@ÚÊ”»> xâþ§¡œ¨VšuÜ¢¶¿bhP¶Åû.ø÷X˵÷Æ@n‚cfÂùËÙ è%¸óQht=OíÉŠ ,ÏåÎb†FLæÍh£"¥Ÿ[EÁ tm–àèØyVÓâÂ|ÌÐóz¿Ä¥Ù¼ô;Wëú×N•æ–áOn“bøñÌ8 óvk(<@ìÚÐ,DqMm³–k½˜ç9Œ“:þw¯^qø—ØxðúˆXz3šý<*`id€ÒÚ´ªL ì[°ùä{æ~^2lP™˜«ð'tæøw3¥rÙQKvÀûpà‹æ~7oÍŽö ¨+2Ƭ$»ÔŬb÷§ààÇÀn2—i»l;Ù((Ýï žØTºF¨pÀŠ.(DºI÷"ÍKT½Z…Ë5ÕÑÌÓq’‚i"oŽ[ŒÇøé0˜gÙlQäyF¢!ÁSŒØ»îa`[mGUí{*F lQ¨uŽï#˜{|IUœFbŒ‰ç ¯çÒÙ¢ßûO¹ÿÆîC®˜wæ ^¡Ï¸ÞÍvš¹³X@}¥}¨Ž{·Ôý,ÞÀzûúî%àʰ€y¬3OÚþ/ˆŸ½~$Æ B§Û5J`ìG ]nȔֵMѨ|ÖÓazéŽLÀ¶ãí™-gb1>É…€mwÊû{ûG¤a×<”“¢£¬‡ UNuEÞUq½±›ìò¤à˜îäë Cõ:°mttè&øéHÍZ¾¤£X÷zÆip𔽓xªM½©Xº›QNY!BQ¦$÷4ÏÕæ–g}ãYÍ ?^=[›âD¦48xN~ÓS¦Xƒé)ø±‚nxÔóÚóVEϰ­Òó)Í›ÃwÕ6óÙ>O<‹V­|ã>bÛ©ö·hq©©$¨Àö`n¥¶£6œqj‡[0rCh z­wæ¡0.r}Pr&ÆÊälŒ6’ËË™ (,°ÔöÎ<‡ð‘hðÌõΉÀPE7¼Õµ^E˜îžîÑ®¡ÇEJ÷²‰3°NÐRbòo‡›xV¶eBùt&3¿˜ˆ„8Vmˆižõg[G¶}ƒjë¼*æ€LHjbaI´2pg¥n›0@Èx[îÄ\kÚöpØy$ËÄ[Œnrò·~2ZfLéý\®£ÓXæ™U+›(,Ë¢£´Gq3…G²ãUPé†Fé©=¢e‡Ã޵½à™p(ŸÏ”JñTBHÚ1$ž³S´ |Gw-¬ €•¨Ær'ü¦jwÈËÝs¢n†ÃÎF4ç,Sœq+l(½»*Þžr`nøþàUõ>IÇt«Çj¡ã%keËê  ^PSäšõæú½ø:åxE-Ô Lfá\”‰äÖsôVéêÖ@b›m{¼r ZbÀ¡Ó wÛ5ÑÊ@ç²oûTXîêt é…Jkœ/ÉúÆKÿû‹Í(”åx#² wÏ ?xβC®Qï;ÈE»bâ^š©wž¡ŠËê+N4l(h°ë}È¿(Å—€m· =!1nJQÁëþ-5#¸Ñjžavcw|Œ8‹U+JK¤tVrãr°Šá¨2†Y”¹yÐóš9Û“‡Bª`®{.Ðà)}Æ Ö¬Ú¦µ$0(Y/µusK­D÷¬W‹`Ë5·”BQjctì@áóQÿÊ)oöpCc­y½»ðôeeL8KÈ1.‚BeS¦û«U nVZ[x¬ñÑ8à™ôŒ.‚µ³Ñ3ªÞh¥Ë䦞‡±ï(_­[;À>€XÒØwl *4…&\Ù> Qõ¬ %>dÛÚÎŽsĸv÷½*-rvR˜Ó¨2Ð:c\ð Öô\˜›½IÉf,Èõê(¡ mâxßLH¼‰%ÑùÄæ^~ÝaȼaCŠzÑu}SÆ5î’ØTÌ1ºVcd|o²m]‘éZ×h¤Äjsœ‰Ç„ sÃ×þlü*uȘ\ÏN`O Ébg %k¡€NQëg£šR¨ÓÑ(ú èc‡X˜ â—×vð6ªËMiðì*JM°Ã´®uFÅ’[kIûAO2©Öb¯ÔõÚXiÉÀ·`ž…V2¸¾¦„^«–®Æ”mÝðò žê8Z£=Kt#­Œ”¬¾¦ÈõÔujfT FÝš6)J ÃöPOüQpdÜ_=)˜‹%Dç{7¾Ô!g4rmÕî‚‘DEÍ¢ÎAšÇ\1façÔºI%­šÞ/H‹ÆrðêÐÕÖç70 NwÍ×Eà½3èµNwTÛA—=çb°­`u€¿òN¥IWIó#¥ÑÁëÐqÙø³·ú…ð ÛîžØïXØ0XE§nQݪ41ZS[:juãµÓä!é@`>¶DcñaÛT4Uwg[hœ™×!Çå`48xÆdLæÃíÉ\+^ÂVé˜h»ÔßÞõƽ!šércg§Q=ÄÂ#Љ̄<è¨éfŒ¥j8ÐýH®³m·Í&©°àé?§%}l«·hÈ”žœ¬V›¯Œñr×–N2årœÞ“Cx£5†¯©;GÓŠ«=•P#©èXØÄ"(0/—–¥6RÓØÀ¯Œå0‰å_µ£Ö½Úo]¡  ˆ96åý ìKC'öÔi‘Ò¥T+ZæzÚÜb%[=~`¹ÿDbmg§Äí;4l›±ÄšT6³ÏpC ©Â÷.Ï<¥ï‡¨ö·´¬¥ØvÙ‰:ÝÔÅm3nËkZJm§Tާ–@cùÎèómŽx™ ¼ð:R4uPX¡ÿó J#­yæã;:Ý>«ÖÂ!€¢V3¢¹­W4MºB xizsìyGÉ; ?T×Ývs(ÞÝ]g[£ô cí·ºLk!Í´Ödt¹wR—aí£y.jClŸªÈ2L@7  …²¯ìа+©­{,Ó@tš´_¹Ëz^½Ÿª®và.AR z^ç.`$Vµó™ÆtÕ/%„àȈI~Þ îšù¹˜-ÅœèBt(é«ZÉmU…ºñ@–Ú««¢ãj¶½ÜÒDzë[yYcëâAEÏŒöqè`¤–c=!¼šz÷ÙvoÂ]¾î²–:MEÃxÚö‚WU¨&Hƒ¹ TÙ¿£×¤ÑÁ3Kì=2¹†a»)ºö»KZ©^°ºHƒƒ×4—Þ~¾œj÷L¶EÛŸò¨Úú 5¢Ícþ%‚c!Ǧ)¶±˜ ¬wÁÒܤ ¡•5†T}| ž£C ÙuÉmúW©Å‘õŽž'ÒP3Lÿiw§¢l+¯H£‚÷Y³«G"llÉ÷;ᬟh@Hûn©L‡B, ,ë#ð®ŒñqW šf¼£Ž“mÅN=8Р…­Mjž<ñâ©D'Kù3šô·'t­´˜Ò…uЄÊèaÅ …êy:5q>4×¼JeS–ˆm¯ìu>­èæ|Ô[öL<ʶ´:²ÕÍ•’aQJ= Ì5lûË6y6­aA¿^ø¨XŠ-%"ëÔq@^•+û^ÔÇ›\ÅÄ㞤‘²xI7ûd(ø¾ ¡YK™kÈò)šìêVð‰)f¦ ¤•ÀÌçäZ±_ÂbBÍ:H\hnë ¶utX%+ëù»Ë¶ c­>˜yIB¦›Çš?í̈°í£ß–µ’Ã"ަª¿ÕÐ/F†{JG<Ña¬j8 lÇ´D šd´!º°·°íÕ=ðÙ‹˜P[ÃñÐ\G¾åRçþNì‹‘É`6‹nÑfÊò¢ú&þ”F7åáŽ*ºœÍºÝ8 Äc1¡näÀäªm Ö!‘EË é)…:õéJU_—?*-ÆGOyÚ(ço—ºd)¢ÞàjCã¼o&”‡é¶%…ÊÆú¦|ùÕWŠ)µüÝôÖ€CaùïÞ]aäŒöÛBQºšb`õ2¾h¹E‹p¦EhôhÆ`ï—y6œ» j1Øû3¹ÕLf;Î1¼¾‰ÙòäåïfŠoÄ^À5u¤|>KcÂcpðú¬w½ƒFt…Ú°¹Li.®J`”×Ô¯s£bg#‰sÑÓO¦¸…Ÿ`ɼQâß_ûƒ— Ý*¥R [®çål©œÂ™*ÊòÕ[S£C"å@c±­â8ºÓ¥ûQ¶Åè&Twµÿç_Œ ž„˜`h%xÚë{6JûO^Ñ»9ñ6ÃÌÏÀrWŽ¡Y»ž“£4OU -Î8Ï„ódz%uàçìGCƒ§´Ã뺩î¸A„A…:¶ù¹¢SGùG‚’FÄ,è<ÌxVüÐ’ÁÌ@¶]ˆñ?Ьƒ[Ûù˜çaQœ‹¿Ë†ž€æâ{èV­.Æ ßÇ̨· 4±3ÖZýücŽËÔ,ÛÀM®…±s€-Ê=Ù̉y>Þ “Œçg‚›+ß{ïM¢ÿFíF)óÍ’°É¶´Ùi™÷Fr¿‘³ˆÒ˜ÒÖIz¨e£T² éz™þèÆºçtij–<õÍFrš³ü¤±+r&½ 2l²™Ìòb<•ˆ´så?ðDr…UÚÛ¸ì†Ç,ë–Ƭˆ –Ö/£WY-^¶ÇPS:¹ý$êVödÐÁw¨Üà™g“¨À&ƒÙ†åyž™%“ÿ§þqƒ?¾TÉç‹ oÃ/ùÚèÏiÒpàÕt«±ÕÆ矪÷¬„¢ÝH§!ÇCÎùõü¨©R ì Žô¬|A’)Îó>€+›± z^.ŸÎÌ?û1|é NÈd¾VTË Z¶·Â¤ŽŠY›ϱˆ;%[c„å@ó,Õ¾¥-húÙR|ô¸(GÉ3 ²mñÏÀoÓªe6ÁE˜à? î$³3áÍ<êybÓ¨EH&ú Õ‘¶g¹ÎqŠ4˜Ð¦.Óðnº€ŽšËÿêun,Ä—ÇÉœÄÎqÌtÞ?} ¡ã0—Ï“Íf€mc‰p$—KûÉÂ3·DÚz¶€Y’φ7Ñ;:©ÔØ/S-ë^㣇Þ-§FÎç­X’üÝã´z:“9ÂGƒèŽ €¶œ ¡«Ù °é‹ÓúÀÕKÀ+Ò_°€Þ#àÁ̼³Îgö5Ï©jiÚ]×›˜Jã#¹QÓ’=étÀi¢añ烦 Í‚ºÚ_¥miÓ©6B+Rš°>ñ÷¨±ªÈ¶˜e¥ƒ“# žâÀ¾"dtÄ~G*F€n‚ÀÀeæßܺ dˆï ¶’»§_ÇxpjŸ1 Þ=”–°P8”Ë`”­0‹3ï_½ªrà |À·[”muÔ– ú5“O4Ö:é®dauØ+ öÆ¿™™ÌS5?Êø‚{cÂcú·X#K9” Îã&YÈ“¹>ÎGç!‰ó¯ânÚÓ°šl7²õÊK‰i¥ö}q¸ì4Œž×MMÅø×ºWÛÄÜä2­ƒl^¦6R¡”)ÆFÇΉ~»ü—< Mî²<ÀcÕ ™3¸›±Hc|@ÏK1^HÞ9k0F£š˜Qî²3´C g=vpP»ªp/áÞAýïkkcaÅn•Pç‡Ñ ¯áTöݲžÄY{ªÞ#Ch>ü«Ø2nëêc‡Æ‚îïóyF‡[C/Ma®.CÁƒU.ÊÌñÅ"°ig^q1Ö¸õÒ¶ßË‘G&×iZ æ_ð‰™'dÙ^ a$NÏF»Þ›^=Ú54‚KŠ®ÿhãê™en ì‚Äs\²±¥‰Û^Æ#í‚rÂÌ„±470ðBÓ üÿàú2vCÇMƼ”¹¾ˆÕ01eïmëNSjºÖ}ãÓ«nø:íêcO¥{¥/ó‘ààáÌõR©¸ú„ÐÏVäÜó ¥HiKcêØ!OÅÀ¶˜Û¸0Þ{î‘H°S¼¹•Ï1ïòìakZ·ôШ”HŠö"±Õõ‚|cZOç³R?T£( E–ØÀg °EB]4F“9–õÒÐn°k£<ƒÛA™R)Æ_‚hÇyCa,*’tç=†ûµ»¼{ÖG1nè1i¥À]š¯Òï=6pè,^!¦yÒræÈóhu¼.á§Cù4œàã“ÃpÛ¥‹¢~EO$ž z‚›)Ñ"¶tï¶"äåt¦Ü׳6 ÀîîÑ’«Ø©U»ÔÜ’¯‘4zV2Áóù0¼ø÷ƒÙ?0á8«£””ÊzÄÆSsÑs°$®£ž÷¶ˆ·÷‹;Ÿ¿(—u2÷ï»¶1Z]¨'OmPÿ¦<´ŽUut>ÆS mIc£F±I‰×7ƒÙÅÅ8ù|÷yQË¡<Æ €>r:Z“ˆ4÷ÉãšÖ(‹À?2¨MÀ¶ýnIÛ7ož2^À·;ºUD½ÚÜê>€éñîZeÆnuÁ‹ŽxA¬š#>Ó³JÁó‚ù‘Nû9PƒèNž¥¸²^¨Ëþ„…8îÈ –l@Ž€¡íFC ðÄž‘w~€;MFñÀj*Jo7 ÜNÑÜVÌ‹';C20±8Ÿ(Ãn·†˜ß cÖäÓ§“ýÀ¶ØC‚‘(y„¼Ösx}£ ËY?ÍR¶-–cðd²\ŒÇŸs#_Tpæ½ó–“Xga§y(íà!Ö¯Ÿ_³v¹•~Ã9u¬„§“¯¾ŠûqŒe?× ÿËQgTýÉ!4ÏŠñT"lT=—o*àúf]A½àig{†Ô—»ÁK:à†Mâ»Ûj%\ïò™1û®R¢M0}  ¯0ùÊúU n¶ÕÄž¡w¾àQý®+Ù¤º†µu¶#å² T0ø<ï°a=,¡¯3DÍ/âÅìZr|ûËidnžlAõÑÍŸ9t'çòò ÐóRÂ!ÆKhZ²mØR"¢úûrÇÏm«§Þ1š½9EÁ«4ì;(3kÑD³µ17ºì‹D:5 ÍZ×KÛ$8¹vÝLгÒÚ–ôöú—¾¢júíO-%| çy²tDÖópcq¬2å‚ ¥4À¸yöºc¿¦}E3 ÂdÁVÕŠ>ñœ5)ؤ‡œ‘°ñ9± þOEŸdŒäQ«›>}>ödÙ6› 8>ñH8œ—¥>VH¬¹ÑIDmwÅS–wUgÜ(ê£Ø`ë`%¿š-ž§j~‹(6ñcéŠs ®¦‹ñmòH„œ´Ÿ‚ùœo& zMÚ»0C¥SßÏÀž­½ÉX,i\àÏ< cUr½;£+:Š4½Æêá*߯ò勸-‹œÇ˜þœñîdŽùáa‰<ü8Ï‹Rʰ¡aT ?cžÖ¯ÕÏmã¹é@×9°o‹¨ç=ÑÓ2ã.€çL¶Êx-¢íVÐë¿|y{läˆe×±õiœï‡Ÿ@É1 z0Ú眷Ãã^ýIóW‹Å(? Wû~áÛÃ=ß^44xjëÇÒRU#LJM IÐ >l^Ír/ÛˆM?ååÑ/µl{î\äBŸ`§¾Kc¹AÏ“Vü¥øâKäO}V+aq’»Ê¶§Z/*rös´ª ÙzÊ<&b,üÚNYíÃ6Êø@ð® \>ßNrò:̼ÖÔ§¸JfÒ÷Ÿl®®šÈ~2žâ'ÑÖDÚ¢ ÛÝp« ¤$ÿ@7Ì3ãý[EËb¿@A÷Y<†Éü«c4ꩲQ£â9$qÆ ææãGÁËd¢>f&dDa0‰ ¥®7QX]Mû缄§1É™R,! À´ 4ó>ìßÚÆQÕÄ„ô ô÷ï †Ð‡g 8.=Åz1êPæúb”Dr¡W±³-™ O[dÂ`ÖÒTï) VÓX…&²UÀ`Ÿécpu4Ä,4xÕ¯[ÀSúSAª›å ¦ã‡òGß,=톞B }ïŒ0 ­¢x-äq9¹Íj÷П‰ñx¤å"zsêÏóÖ ùçw¾ühäõ\VEiK‹oÆuaüÆ,ƒ÷xöP÷6aмª[8Z©í`1§Hh¼þð-Üæ`xBÁãØšÀâ î>OÈ)úŒnœóò³˜\À’‰(y ç5N†Ùøï›E{-³ˆ¥ËZaFuú1i0Ûöwhã&µ5¾­Ó=LŽûn©§êÓd$Øh‚r²ç±ÝE‚Òâ$F=‚2âY1k6 Åq¥^Ó诇Añ+`gÄcKðCÊØã¹Ò÷Ƈ¦Áfžj_ó€m '¶Úª0ØOª «ï¾—Ô~:^ëPoWlëMÌ'Wü•HD€mÓäžâï»ÀÅ/@ë\F¶r«Ù4;=ÏDh]šoþžN½’`¦ßM¶mƒ§l«ô^¥Pâïªá – 5 Ï IfrM’3ì"èqaºZ;EgÞ§ñ˜?À²ÃxBét`Îë›ä±ò[ü¼÷Bcl™éÇé~@,‰ÞYíŸu]v mu<ʶZ½Oÿ •–L±¸U4lÿŒÑQ«™‘ëö˜d‚f­„î“‹^2#Ñ#WwOm#xgð~z’FGçW"Ô¿†þ·ñ/1`Î…rÀ·‹q£¯`–±1kÓ@àÝ´vh·œé0f°íú5°kãK£· 1Èkjwºè †×@>pSüÅHŽd%ò4ÃGa6€=Ž1m,ryŒ[‰b¼O>ûJ©Üé*Ñ(뉻ĶVð¨šâÔsÒ0ØŒ’«ePwÊcƒg#†„C+rzáKQâ ‡B«×Ù[8ó¬;ÂŒG"9â£Q¡™ââ"ŸxÄ3s5M.L¾žÕÊådëäªzŠ–?ü«»Þ[Ò1£Í¹îœgÙè6;ÊâÖ>u'ÝÇë%!4Ïüsó˜bñ %Çw‘Pð¨³÷Îä<ÙÀÇ“Phí¡Lñí˜X©¼øÇ_…cáµüU`Û®#…µAª:Šbqé Â-mÛªÞè×í¯«°š¢ÒÃÊøàØÀ‚KVZ‰ `¿~Ÿxä_ÄøçÉã`p Î‡ ¼Šs¼iéšøçô- Zr†û1jƒ,µ¶^@ëJÅîx]Ô_P5·òÚr4ü'þdìFz[((úê¾»|=C¿|~õ#v‘›fÈðmˆG"y¬Éµ‹y6“ûìjñDìÉcï·÷­D!²™¿[lk¡ªN;Á÷nfn= ë¾Wõ­ºÂm<Ÿ@ùÙù?{:¼&IìB8ø b úóø¯9þYÐW²™R).$Àð5ŽÏ?týT<6Qä¿Ò⢀­'1ÜònéyºQϲé\"C£ZvvSÿ3P£^‡~á WÌZgEjUR }ûršÄ©ê’—žo{£€Òì|”$äAç£9™t”y,-o4æKD0ë;žJÒîC°@ ͼÜóÞ›ø§î\Ô\Óm»)¸+ý.„ƒã#‡ÍWç,1BoPóŒ‚ç§à1…k6#iŽ£ªÍñÇß©¿^cKÀ¶¼ÀüeZ½;²Y{EkßëæÁlz‹=CÛ]ïM¯J¯ž§aTY÷¹å‘ ªvˆ5 pwh*ê%áOš}cñÜ#dpÃÛnøx–%„s¨8ƒžwî¹H!{Mm´ÍÈ¡ºKl»sÊò¦¡;íZ‡°e Æ™¿wñ¿¾éF”€˜P.»ÌÆ¢¾ÎI‘)lÒ<æÇT>zHòÏEј z^<æ›!€mr^FiÛ,(°ðÐ*~wË<ÓßÒ[­“¨ P­§ë–T[l¤z¨vbÑÍø”>,wþ!“9\9PT>A0û ½ÈùUŒ‚'$(áò6Ÿ¸ðèM‚}4ƒ!PdІyöŠ^NbبñåTÏSx»ÆVl׌3‚£lƒØ)AÕªqòÌL°hÁv?Gb8ÙY—Ëœ÷4™ö¤É êª÷K§h=kâP 4w ]F=ï<ŸHÐÚ ñ%“SU YºKl«cþ‡…°¸€Z¶'\ ¿…V-ßuôDÜ®y¹D! ♈žó?töÉ5ãÇð˜:•½y~Šg‚ÁðUv›oúSñªk» ç½ràÝqíÛ©©NŸ+aKš6’Áý½IŠcS€,Æ|>,¥"±Û0ì§mÀzÒi? f†ÇÓ­ãÛUÐÏäÙb ÎOl víùʵƒ˜yNàížêßÖȵ5Vß”^n4ps>çZ §ÃµM³ ø¼àMÒXn,¶–ïòB ÷s Õ ½‡wg±’÷Š'›Î,İ9 ­ ‚æ<¤` *ÿblì¯[Wé“ëýö ´dS¶pG?îínâ †a6r+YÖ¬¼lbŒQ¤À¶ %¼ç šö]<çý…"ŸÕ1ùWO%*[›"mÀÓ&:¯›4H¯Ñ;ç+èÀíÚ¥çN÷<µ $2‹¢´=¯Ì]›¶b;‘‡0 Ø®f¾ l›˜Á@e‰…‰ûí鸳_ÁZá‘-Œ'ˆÇîÛnã’×+Å):Šö ©c[¤¸ø¨®«ºÄ‚=ô%GL¶Ý†:ÌBÓóI)³ ê]"z £Fyaz}%ÀËü°<.Rg(L¿2½nÐÒ>ëgÄóNàE™¦GbYLúÒ)ÉøÂ¨Î½ÁçEþp=— ž"QkæéDÃE›üuý·¼Kàýy÷U–ë]Að• Œ9‹R‰YÇ&c.XÇ Û†s’(E9† ZEÎt<âÉ=wÁS¶Íg¥ÀBì<÷ÊòáJ±1ZUñw‰mͽ³¦ œ“¼(h;`P.%…ïäãoÇÄÎJtÐ5/¼Š3/&0Ý ƒ´ J²Â!“aÑ<ƒ‰•6÷© |‚Và‚ÙGÙìÚJø`¼*NÒÖ Mu¤lÛÐŦØÔÿ/í÷Þ?}FNKîÀÄ Tég2ÛèG9¬wŽ ÊW†‡À¨ pœ”úè[¿ò`çå½¾ép‹mAÏCOŠQ.|“ý-‚̆ÏJÕŠBU¦ÎæEµÒÜ”åÌâblô:Ƚ4mó'3À¬ÌZAK³óT ÷·œ);çMpf³'sc1Æ?„<ùÕô2ú“a¦Éµ“Ï÷ùÁëy£áÃ]OSáVØØ±²;¥ÖÁŽŒUˆÁ ¶S7Êš $Á5‰x3&ØZŠ˜×L$˜ Y ÛF±Ât:!Oy¹‹Ä;™ùÝg·j¯ªIl‹Ž9B$º[zžvIÅÞ˜xìeÖHzüs¥p<ó~p\ìl˜\'Þs†Á²,n÷0/;ì0Faé9Îwz_,>Ìœ˜^;Ò\‚×°6 ìô©>é:xªCþEW =ü›ºœ|©Ì¹„ò$ˆTÛ6ÐÀéµ5l;…ïPÚâ ÏŠ˜ñJ˜5:ö|àÈ()Á À˜Y4ͳŒéñ®ßZÉË`rˆWÅIϳG ˆMEëΩË7vJ†YÛyÔqÉ–êvûæ,Ã’0Qâ Ób[«£ùy2ùµ«~Ú÷ƒ24Êû&y4üºÖ Å†1ô÷¶C‡Õån±m ¼Û ,˜âÐW¹Ü€å;’g3mâ*m·’0ãìxç´£ÉL†sr&s>šzr(%â ÌÀXÃcÇò‡®ßÆÜ‚­k´Èú,Üg±Oõ>çøà9íaSØIo:$‡êhŸmdí†Zn¼”üëðhãP»­ yK¤8œ•ÉÌÅpÂåd?9½p”ùîD/–üìÀ2`´#‘‚5BbÉ£ãqï^ïIê~Ÿ‚aR(7âK‰q­ +a!‹§ˆÕCsÒÐõ°4(!æµáp8—É,{”/LOæ³Ù Š­J[È%)^š¨•cÏ æï¡ž×)†dP²Z‰ 7j|ï{8J[B¼€¼ˆ¢^³HH›ùOÎûȤîâ/ãü,–Þ—ÅÒü?IvƒêyŽd´92paâ÷ó®¿w(êõFBÖí3æ9ã_–3WB£ß^P·§'é“¿ñÍq>1KB9ô'cµ†ˆÕqœ¯cÝÚž(Þ;Žõ¤­1yЬ`ð ïZùƒ<š-à‚ðG–è¶E0(¡ý`=÷Ÿ]|$ Êp¸EF=Å–Bp­°ö±q—Uã”Tô›»kÎPPUŒPw]ìµ54LLNÑ¢WW%wÁb—Y#‰êÅI®Ïy´È"¬{Øé1SŠûø£Ä Nþû¬ÉDÙv]–U5•ÄÆÔõƒÙôî ’b‡ ÿ€z¼÷'ïî”]‡.e&C!ëOòËÛ¶ŸiC›LûH$ d9î…ÿñ×>çcŽ’P>-.Ðj ›r¡T~F4˜€gÔRïcº^ïIï\Q»‡j¦;¹E?S~v²8×oZŒJ¹U°Ïljw€VdÀ<ÃÜ /cZ¾ÞéÓ›«` 60÷ÔRb6¼¹Š1><ü°^Èj–û׌J¦¹¼rwÀS¯t^;ù¨åòšµ.f]˜ÄV² 0†Ï®'ÐÆ-ž…¨¶åÂÔsÁ™Ð™åå·?©\Æp†jEW®á¦·  ÇFÏs8˯Út0j¢V£"ËÅÿÖý¸(c–[YÝÇæ zÒ¯B8”;ž]À’–º!þPþ£ÝÐB¥)×nІ±fÅÆæFíî‚çHtHÕßNÞéñOŽGèðÛ²sÎeY0cŠaÐÊ`YŽÃÆì2 ÿÒÄp«q9òƒOÒp3]‘ÀZYjL¼ö·kz·_\ÅŽ¤Ñ°Wä Ó‰¿ Ÿ½¼ÌÎÛ†dÚ€%1ZǸîÅxJ¬â®• °o¾†¹…âÏëSEw¨À$bóçM0‡Ük²bP°ýýäs&XN­<0ÍžÆ Õ\–V¢Í:¿œ‘¸O~Ã:§c'"5‰-ŠA³qæÝà)Ník+[°Üí”@â]‹z„¶‰#O¦ßüóò 8yß4²m†Lù"á_/|õ¦„ÎܽMÒ¬Z £ì+¶¢MCÍ<»áWLêMáO}®c‡î€(˜µÁ¾gL†ä(JB°Ð-ÎK;=L ›ù«ÅÒB”Ÿ cK½Q—ÅêÂ¥âãâ]ÏÑ«R‰ä=­BnvŸ±‰ û¯ƒ«©¸~§3ÂÒJ\h\Äh…ß,°òüEAˆèú‹b«ò†®ËˆÛR²¹YPôqi@=¿·~­7<ªZ¥©V,–b®Õè"é)#³ÛA–Ó[ày£ÌéÐ ö™Á˜ÞâÜSÇ1Eîyì wx»Ak ¡š"%ØÝ À3̳†hSAé«‘]N- ‰u×zÚ)ÊÓ2[}*d<±.£ Ìôx¤@ñ\4‘ì:ûýÝݹ§cü…pŽ!ÄZÃìë: ž…*fªݾSê_ûà;ž'Oˆs¾3@JN€~Ô5ê‘ÒÛ†VWÓ ¥(ÞJS±Þz]§¹£Í-EÑÇ¥¡ÀÃÂŒô…Ú9ÖÔ 72Å"w0è=Öšv‹€Ÿ0^yŒ 92æ`ð¼7ôÖÀ!¦À £cC±ÙÌ»Q~PðTD Ìi{/ЙäØìp÷­Zƒ¢>&ìwdiG´ Gò³s–†[{5SŽÇŸÁ;ÃÎAKm ÷ŠmÕî&Jûry)!4›ŠœñoU·§?Mæ%g¶¥ óuÂ}1Ø*"å1·ŒN¾½al —)ÆbIAØPºk¨4DšÛ žIXè7…å-i(gÒ®í™uÓÃ}¥hÈ]]šÿEº÷Ž ‚‘™p¡PWmÏ 6D Ò“‡ê€çx ò©uø›'ÞPËXhí ¸Ák…7r=7Ô=: Yÿܼ—Ìxm°m9x§TnØã°ïÆîß%ð>4ŠŠð_­f8ê´ŸŒ”ù‹.ÔAn={×û“½õj;ô b­›î÷»¡Ë`Ÿ!n9šÛ}[©EÙTZ?½"+ZYtØÇrŠÆ’8 IDAT¼[½'½CzJ«¹n‹Xq=—w3ÙNïÞß?}Ãʆ<ÁNìŠ^~e™œŸúºv¨o ´¥ €:Õ9DÝ-<Õ©ø Á¶¥Òyž;(ìX.æµ'X‰™4«ªXÉCÞý&Cæèrl‹µè@ÑëÝzQŻޕnðD´kK4#þ*q;¨Ì$ô¢àÌÛîsŒb©¶b§1}`f-v!„¿¬D¦†×H l;4&k+þñ±oI°íäzŽÖ-ÃŽ… 0jnuÀ¼­ F°­Û#läÓ•ÙÇ#‹å¡––Ò-nƒØé‘#³#Ùúoú OLÏzhŒ¦(oaTYoIîfŸF½ãƒçP¸àc3ìŒÆ5}x{çW¥_]v6¬~ÔÛº›é©5ÀÂi“7 6’ŸIæ(¦Gzg0÷±Èâr·™“_¹reWð% …î žÃÌ»…gQ¼Z„¿eÛàØ µž>hæœXˆ~¸¥Œ¯AŸzÀ bx2ÁMcÛ)Ö[–$–ÄRÀëì¡£Ó[9¹H÷~"Â&z¼»ÁÀ»ÃØÞ¢uAÍÚüŠ«¾¨énc ÍÚ^§LÉpôåátW°#‰-ñ3žƘQó Ø6[²wÄ¢¤énô<ý°ùo“qÇi_yÇÝFÓ~6~+Ú˶¤‡mKñ¶Ÿj‚³€ç%´SkÒR\?zû×Õf£‘ìÖš¾KàQàèV@£íЫ}³¸èfŒE0y=/ÙœîAB…Àû‰wÀã¦oZêpÌÅ—ž%ëy‰=ñGÒî #q_È ;ªÞ¯æéÁƒ§Z^7õk5ŒL¬ç\µ.ž:)v\'´œ }æ1XŠËôS–²-•‰úÃKÛ’÷Ë<­ æY¹z^×óôÉ)9pð´2ÖcÚ”³Ùëœ{ȱÄÿÔbœŸâ­ÎÏ ã™Ò×òSM‘'.ØzÊfЉŒÒ6SZŒ-]Jb5˜nª NQ®Þü£hÆæS¡VTõñ˜‹a´G¼‰ÈLh3ß ò³‰ »mKgÞ¶ñúùœ¥È´D091ƒúñ7ËܹGµ³_G;|½·½^í€fžƒž÷ í”ÑY¯5ð¡ÞhtÊ„OO:sra1îkƒvÿ D^BìFÌa,bþUãõ¡tf‘óš•iph2•ýïÝ~qâ|y¦ßȶèÕsp†x3ïæ‹g-ïe}´ ŒZ°ýêÂÑOÿ³ßœà (Í­n<êïÞt<$M´ÆŸxÜV«Ásæ*{}>·ÃFáK4Ï*›.î6îžÃÌ»ùÕrKtG©å˜ÏÍú‚,¹‰xÖ¿Eq˜o­|&jvðŽm¯òád÷Eë±²íiL*¢^xb].|¯'¢ºjt ¸Kà½5c—¬6Ñ®-7]yE"®‘‡xÒÙ@é/cÔRÈ?°¢Æ¬ÙN>¼=Ñ.§’ì¾d¼¢q¤d&œ» b".0á5i÷ož{¼^ á4båÞ±í;/ë¦zgÆ$ •­oInXAó_ž?=9j2àë=f=Êr½à™añs÷HR Õ³…ÿõÒ³wfþéOH0¸&1C€%¦pÍ•‰6x3OýFûeYO ­»îÞf-tœõ=mÀu$Î_œµ›´Ÿzì& 7§wí ï ¥˜pú×óiR\ä±ï9B¯ªöý‹»ÞóEµBÙ6•çV$WÁ˱4O÷C&7sykä <9^Ï 3³ÿ«ãC»¥·ô‚÷ÓÞ“Ì­GÌñUd­ìr!f††4Ý(î,[=v¿ì¾£ ÌMR»stÆ8…?— ÊÊqÂS|"i[£lë~pÞàÁ‹&âbÔçN†£ÑËœ°‹Ü‘©„øõ]Úë"¸¶ ¢w®ííö?`€¡†»íK®Y5ª?ý.Ä—˜³ǰa’ÒûHâ]Ϥ ]€ûZu9ùŸùÁHMVªëëk$ðÏñ ‰ÛG·mçr°&Â?¿¯aæµõdŠ¥2ŸŒ„Ñ<+aCÃÈfŸpw”æÁÁ]“ºßo]pX‰‰„CùUÐÏÔRŒó"GL˜`×ù´Pò1¼ãtˆžÂF}X:àPà§„ÈMRØ~¶²Eû±ºPBeLðª:hëå¦þ?o»·ÝHPë ÀêõÎ&uýæ×oÒ1°ÎŠl«ð´SzekFð‘ÞfãL“ùx‚¿ÔlnÖÚ£Ÿ*›ÛA=±—7æ0¾²uh!¡P–Þþ ç'ŸøÍ?~,‹]ÿ0¢Ö…ÐqÀÛ=…3ïù—žüi#šˆ¸Zþõ’éȌ猌¥ÚÕSãà`dKN›'tíž páq¬>Ï„ìG¼ä_jíäÆ:``Ë]ÀŒ{ Þ6Þ@9þ$ƾ»V5¿MÏrÁ+—ž‰‚åe”|§Ìã¶@i¿ºÒû1s>7½a¾ÛbaPœˆÎOÝpGk<ì‡Q0t¡8Ïû‚½÷=­\æâ؆¬²Q@!ÁÑáYý¶ñE‡Øxœ³œÏ nžÞ‚é‹¥-. !Ð{2oLM%ïìèd[ Þîac»6 Ã]䋨7ö€U¥ë•R]F°¬ ¶Á+Y.˜ø!þíþ,;•ˆ„åDzCü‡ÞX~3AÚÊ7P< ‚·ß VÎç…œ´ænÔþò¬Hþ§ÈÔ|ÃÇÿKŠ#­µðKå%³ž*°°õªËÅîhÑDòÉÊÿñÙìÎBË<ƒ#µtPò à½ à5+•M¬ã~ý "ƒirI¯¬ç¤,ùįÿ¬ µÏà,pùž :Œg¦bFêöŸJ$šŽÝd]›†ƒ‡9+X‰Ømä¼ u¾jš~{qÑEÍãØna·žd¹àÐvŸO:1XçºÈżӟÍœ}_W ¯hXÖ\t ¯áÁ»UE±±™?ã6t´or¦8‹‹MýVõâ£aòµUÂ~ªK<âtÁñ~»v“ërv§ æÇMù°?pö#X§±Ðªr Ð ªª`|Þ›é€û‰µˆ‰ùÚyø†;‘Çpm±ã 3 2Ä!†óNÏíS± Þ¯¯f@‰}Åp"Ç–°¦JÖ•œîqÀ{_Õzªn)È6 ¯¯ç亦—bOƒŒ˜~b³ Käs,yÇéì¬S%.¤9`Ûü™,vwôENçäµk5;znî~Þ­S:VŠ\q?¥›É‘•Læ]°£ôd% v-9t²ñîÇ7É'|S Á銣ý>‰Ön,y}Ó3++‡ÈÃ/¾†=O¨n•ð <ý”^»Q:ï2p‰ ÛÂ4ÙØ,ÀÌû[ŠË¡“©·S ŒÍ;V•;Ý 3ðY?mš›¿ðèOኣ̚çxݶè}ØÇNÝ å"Ïû—©då‰MZ04–¬èMåžšgº¾×3ŒŠ]¶ŽŠ¿µ·ÚˆÌyŸ>ÇDÖó¹è¦å¥­D&˜ï|ö#¿—›=–e³+keK.Ôœü*w—m¼–’ˈðùù•C™ÀÂÃXç2ì9#-²ü°XéV-™`0˜N;†{HËd[lÈ’YŒ'0‰_.h˜·ÔKšÓ +à}ì|"wàQòH|–? úÙÉ  „ÑßÓ«èV¬¢¦Ÿ5ºÏG3ák…ÚÇÝø ]k¨˜*ª8”´¿‹à=™GÙv‚;‡Õÿ˜âù%`æ§X©|f+_¨í\çz½ö-?`ÊÏJ6óôâtòý y‘ +òGØ…-)D¶Ð¿ïBR÷8à]Ñ»Á=Z#"|Ãû‰aÁÅ"Z¡iÙ_nˆÉÊZ÷ÉØ7$ÐP²5 ò¿0Ÿˆ¬¯­ÊÅ…øR‚¦Èc¶RïÃë Úò}ÞgÓª®ÇßæùG@ACúâ|ÌGføÚfvÉr=×SòòÏÒ‹Kó<õâÝØ)Å@‰Nã8ø÷<Ûó³dŠOêÍ­üjÚÿM0¾’hÞ!0³þPWjÅ"ÇôÝêd0ŒÅèÏWV2™nŸ…®fKïŠg5µñ¶ÆÅ–\ÓvîÞ¦÷¼ÛÞÙº®¥þ-¼úƒX¹ñ•D”-ƒÈLU+=!)AÚ£×¥,ǵ„™¿8óï"—BWkÅwã" ò‘wJåòÒ¥J¯fâNÁ½OêzøCxš7|¾Ùç°ñ‡¬a]ßLX)ÔõÛÝ×¼QÆ,Úíe ZŽøþ0w&›)aŽÏ}»ûä -7¹ÍÒA’ÇŠF´@ãW¬Ufæ¨W:Bÿ½O²¿õË×u fŒkf™;ƒÚå"KV«söÿ åEb.³ 0h…Pçþƒï¢Ø¼TÝÒkµF9‰…ᵚKÁ Ãƒ÷Ö•S(m½‚ êW×à•°A[4¡kTBá‚®;äF9 $hÿÕ0-”LéøòÂ3žÇ.ŘýÕ… ³UMuxpÍ…ÍðÀÃô)ÑâºÞÿªÖYˆø37JÀ¶I#c´ë±'“úOìg2<›öüº"\›qcwB£M†ö‰Û úq£·¦{^‚À“\¯7JÙ¬¦»ÁJ¿±¾)›–Tu÷ȧžð,ýk0|Þßµ e€fÿEdÛ" “ÚÈe‹;¦zœÒE, AÜ-ù*öÁ¡¼ à©n­y“kÝ#,K¸Øì¥æë9Ë´¾³ú“œüоö-”Â<©lvJ5•Ü5]{Ê^ñl˜fÆ|AæìÌÀ•²\T±äª°QuÕT—÷Øþþþ±o÷Á#±(a"XWÀ3Ý´õÁû™¼sûVOÚ#GÿúÙ@”gÂ9ÔóŒLñ¯¯æg×9Þ7ƒôp÷l “1Ê»!Ú‡zU4µû)?<ð¾vk^›0q6"åײ”m-9'dR·ƒçcÂí¨ÉÐ »Ð)ùê_-%&üíw¶ˆjÏV^®½Zеk…}F±Q[Mw,µòáaýoê»æ»[ò›.€wç°Kzž#=„·1š3‰t5H6_Gî´žÍYß°FꯄÓð\8‚>ü¹O€kè_Ðj'J(m½Fk\Thƒã¾æÙ;/ëÌ×¶¹ Ÿ'»Ÿ>vóÂYLtbýÅ‘ÀÛ=vpàùqæMFB¹Üåâߨö}®Zv§ÄµË¾wC¶]3¶Ï‚ˆ‰yþ´!OÎÈ1X@À4ÈÚصB¥{û±wñðþ|æfô«g¿~ëñÃ7¹Sw>7Ó:ÄÜzøpÏù:ªžd}ó¼Í?ڱ׃N%›ÝÙÁ&º€|Nƒ¹˜ÛÏÄøsÌÚJ& ¦7eYþf¼¼ÔÝl«5ÔT²Ò£è}ãëúÍgo=üâÙ7ïˆ/ß:vìÖ‹¿Ö:ôç·˜‰îÓïåƒÏJÅó<ÖlÛ°•¨Ô’ØýwÅ+`ûE•óÏ ‘Æ$G}3%•)Åá—8v¥A#á 5µñL²ºUP°€zKïÌ»ò&‚÷¹—<ýå[g_Þí´{{_?ì°þ Þ›KÀXA¶]Åbî6J«é%âãg‚}®½82ú71X ©XŠù“¡Üq8’z–¶FJ˜cÃÂ2L?´eXÄf÷Ê•?×o6n=®}ÿ&x§:àsÀe0‘<È™‡Ávù9†ÿ.œRí_ –Up•8·ù_8—Îæ£T³äüÔ³á?øS?Œ½Ì–N`Šü&&ñÑ[cLï^‡Nxú-ÑïN7xæm/xöž¤¨´Eò{ç|XR{CïNÖ±Ÿ—fçèn£'`y~6jãÊ1ápîx¦8å#‘0Ær—qáÛÚúnÛA‚ÁXØû²*%@Bð~Š3O´ƒwjdðÞ¿r zž—ÀƒçW;îß•hóß@¶¬ÉòžP½*üL8”Ï.ctÙ‹ŸÑþÖ¥É;[ydÛ” è0û°h'êyª“Ño÷c¼³n€wë - lw‰ AÏÍžŽt}oµ¹Ác½Wx 3¹¶’Θâ#@æ£ül€92E<×N%/ ‘°Û#°­@ý¢; [ƒG'ðÄ]¼[x·ÜOw¼lG±=ÃÄsB÷vt£_yÍtæD”÷ÙÚaßB…pŽðü³‘°íB™Ç}\ÐóJjY¬Š“°v{¢Î<Ñïw)xw^l_ô¾6x®šg=É)^Fðx@m+.ôTHmXO‹F£nHXÆÓ6k‘<„²-³9 0=Þ(~C·^j4Äê[Цp`o`‰=¿ÝÏxGï¯ÎXà¹*0e%û@:P|cÑÐóÛ·V+Ä#e,U},!Þ&x(m—Y`ÛH8·’)¾ÁóÓ‘¿•µWÿýy­önéí˜ȶ (Ì •FÒ±öÀÎïΣÛvôâ±ØÖUðmo9î‚/B<9ôýÿ`ÇN¯ï”Pž{>B"úOBN/ …ʦçYﳌ„ÆíÛÿ2˜gßA}™úEÛNꆞ¬(ŠÜ#moé·ÎšàÓ¿àYŒïŸ™7ÕîÓÝ&LÆÃJøånwGS²ž 9lÔ; ž±n óG¼³“”mqû[À„ÿªOEž-¿ -m«`oCªxÚ1:óÜOq¼‡ºãŒ%6Pœã©ž·Ù¥çýBêè$´Ôœ¶A€žéέ zñâóŸxöQMO%„'¶0é[Ô+ºRÛÁjl¥Þ;ónŠ·N!xw΂~çxÒ¯¸ ^wïFþ˜ ¡ÜŠœéÖó4½[5Øçƒ°2¶|ð2ô¼À–ø%kÙë¥ÿéÄ߉;qާ»·À¶q,5]¨›Ñ>ug/üö©íÃ’xóÔ­cú)ýð­³_ß%g‡Ï1ÜÂUð>×= ö:a˜ÝÛ_¸ÝèRÀ>X“zÒ€¨5;ã ­H–nqK*¤—'¯÷Ñ´ó]€‡ðí!x]ýj«÷“8re;³×Õ¬ŸX/(·ÉŒF÷Åð»õéö&1ßÞéQ*.oM Ü-ñ¼Ço/×<ÖÒÝø­ƒÿÁM¹R;ŶÖÖ¢@ÍËGìŽS£`¾õ doêÞ¥0½XÔ†ÞFÛ µZfO;Â7&£bbüªÁël¹ c¨Z#¯8ÆE+Ý¿ˆåˆ•%¯O|ëÃaÑ>8]¤…-³|žxé½çuC÷¢§èê%uùœ¿ˆ·ÉóvDàù„®‰Ý”TEÏ2ä8ùûo÷v,çGÎäó±?c¹=J¨šoz?𴽯›WéÙ{è¿‚^þEG4´Ò~¦ƒõûQ@e°œ…VÎ}ÄÙ*ZûŸÞ{%ž\úNÛƒhyÜÂ$b’ÂÃ$õkžI®Î ²ú&"(¶y©ýƒ7÷·ÈªÅTn1ºçvëíºt{E ø¸žŸïÿ³>9²„ÞÅ-)lnN×–qæ5³ô2à­ü:ƒ×=ø¡r”e#"r¶u|p-²Å5D)€wÁc–OãðqYù~0°qŒ0ÿ]HîYØ ”’º ÆšvÁ¼’éÙ»oíÉ‚'Ø~ÿÊäµé®•h³£Rõ[yÞ‰:&|KÆcV—;ÉÑ×±g©¶ÅR–ì„_ »#g^óŽm#\,6ܳµÎ ¼teÀ»”ÙKS…e;ÝUb ÁBÈa縖ҽú7l~ v±GÙý#LkÚJßÏü¼-Ô¶4¾Âx<(ŒŒ<×Ä ô.wåÕüL›R'‡‘¾‰ã3m ¿xtŸtynOd¾c÷Œ‹ÝS£ƒ6ïê9S£}”XžäÙ.‡ƒ~HÉ"·€;ŽÆéÌ»¿O]ÌGæ$¿ÀËt¿öAÄ|ÇÆÇt§àIf‡<ߥ=õm»˜´kÈÅcˆißO»?üN;ÐÆ|3w€D+r (vÁþ7È‹8Ï·ó²2~ÈpÂMí<©-…¸ÔÑ+™u·ÜÙçsîiHêV§·jzC 8#÷}ؑҭu°Z7rúXü#LsC€'?žÄWÖ°Çb«ŒŠ ¶îDÌNF{ÃÂÚ}$žÎÏHúŸkÕ' Þµ=IŽ] ûÐ}%JF ÐÖàé9¤~?ÓŽ"›û‰r¹‘"c4(žñ€BQn¼*X,LåK¸ˆáMóXƒ¡=(Ðä‹fµŒ9xêÞçÛc±=Ûú'+ø­¡ap’•w ]~G`ên…y•=Ëú­èžEDßvŒÍÚÑ”ìŒÅê}7™ºx¡Ø–1h³‘®ª­Ðµ Íí¾«9[ëä«{^FÚãäF^êS˜*FúãœãÞ¬L |Ýž; ´™œ`&´+¤Ÿ0p7E9©Ó·˜+ ÍžE«ÛíÆ¢¢À ö“owÏZƒ^æ­9Sé+ÙmÕ>MX[“´S)Iª6dж¢øî ,Vp'°,Wxåì"s¯c²7kN0×4{'ש…ÚÀ«5À[Ë&xÑ~ÍÀka8Â$'7Èc†FCÚM,ÛU4û~?3Œzט“uâU6€LÉóàžùišmŒæ |ãX‹&ÿoÖ_‡Ñ¯$·'I#>¼—˜]‚—ÞÓ3¦ClI!ƒ{¶)µ}´ZÈóî9ö:xÖ DæçdL9ÚŸ8„„!8'ÅgaÃ3`ç-¥µî°C;xk+màaÉßší1ÁÓöØTaŒçvÀ,²àzÿ£ä¬LMà§.w€×YLP0«xÎN½ ßèììè~‹whHaqø(&Má>.¦[tîÒ6sŸ×´»¼›ÔTi‚÷O­ÚsÍÛ[ðžiÇã0³†Å(‡Ѿè~ÎÖSe»ƒÅd<7/+ŽöÈK\œÌ”cÖÇF•Ã~qøàÂr9Õù{PàúÇPðJšnçiuS儞4§ƒ×u^ÁKï­wªElq<͈~Æ·trŽO÷·ì˜1¦=,âAÀåpŒ‰g\‰È¼â¨GúŸëÿ6ÛMж9Üp¤¹?¼¦­o ž*©ÒÍÇïÒ»gÍ™çÇÙã%Wçg3GÆ,¢åLWúaMK˜9³†ºvÊ<ÈEg• _Ã%)Û³FOH$bW(sí•d ÷¹ãS­¼·«'¼JàÛ®« ð`Í[©‚øÞ¼Yê<“TÒ žÐy€‰×a¤yîOÓ™ÈÁÊO0W¥SlÛ.—qûŒq¹“óʸîÖÒHBþ9EX–?«ïhÛ¨cÜï§¼`浺gZ~†2ŠÖ (ô5éî]u`®TÅÀ€4 ©Ï”4Ûuêa¬¬=x'íéÌ;ÕÂAˆã#ˆXìÄü¦|p¦ÃžmœÌâïàòD"²õckŒæ-,®$¢lû ‚šPX‡ßb\WbO4Ýæ®»|µÚ2¥î6ìkÿìZ²Ý=«XxÁcœ³\,[øG[7xÇ7üÓޤ”›f¡%Hˆá©–nû ´IT›z؉ÁP žÆdžaJø—sÍbé#“f%½wsoM›û#ðr|0²Â •$ä«…Z[Žx¢«»Þô_n^¿aÜq‚»oácÚ}¸“HùqÜYŽ8àf„¼†×–·A½Ü®§lc<ú€â©©kRååJŸüàUvc’\ò´`D7YÃÚømüÇŒÄb«…` #màxË•Xëã–‰BüV¯Ûz1œV‘.Å–ÖÐ{=‰ç£È™ÜF. ÕŠiÜôÎÏHZÇ0£‹ÚvôÞ.}[3ËÐ\ì8ƽee|£*µt#ÉñæÝ¸˜w~€uéOšõ-ß…Ó~î§áde<(†x̱Ž#,;IÞ:½ÙŠÒn °ÃÌÛ;ðÖv ÛžÕ„OQ̠ЀM–evt0 Ô³€3¯ÐõÙ ¬ºÆ˜CoØGØ“8/UØË'ë;›`ì~íùTƒ‘Ö½Ímú?!ðÞ~ ±59Ö×À¶Ï:‚*);ìÉîº>ºVw\ æKyÐ-c8ÙO¸…4 r@î— ?¼¶OóO´ô$ Úya©õ†’VSSZ®+'æI÷Þc0úì“‘£¨}¸åæk|Ù‡zäÔÄ 5ܽ’·…¤@lÇiùr$6›3nÌâi¿92ìòÄi’ÈÓ^£l³Üº ÔSå<åôéÌ}†Qy|æFðâ¾=œyr”´2Ðbœ¸Ï/Àò†o )*;Òè –Æ=Xħ/ûšw.ÀYÅw“ 'h’à¦WóØ#¼xo?¡äFÖ.XE¬þL\µÏ²ccƒÓá®â³Úr¼;{~–°Ö¯[§D°ÿû>OBÃýž„cöÔl¸)X\ Ÿ îY ùclìmãžÀ›{ ð¸-’$ÐZg”“ékÿ±ôM‡°f´ýùÚ;Ù°Ê(+0^»vô£ª:è½?Iˆë¢C¹… ˜¼Ä6‹ÛÞ6ùDkÜÅ ×–Ó_xéÝ‚ÇÒÊYr¤þò”qZ{èÀŠUèdh€‡~ˆ­;Bö)‚ßê÷.Pà1£øç˜¢Un‘¢!‘R PP£DŽïs¶ÜJ]ÝÄVW s/ú|÷¦m÷Xléð§yµí<í$8yv¸«Êé3^îÚ=C/ÃÏxâˆ9˜Õ¤Q#¤*àW:•aM±5Ö¶”iµXðCá±QûU‚§»Æêæž3 9fè¡!v’©u‚×AÅ…>24̃TúÁàöà)â̼‹QÐ>Fyâ±+ªL`¶¨i…˜+O¦hÁ³tí@° më¸Ñ fx>9¤°¹N*®6SÅ Ë[7ç™'h6õñ¿EÙÌ`hØ•ˆDgYðVhœ ÖþZ~šrú¨`çµ̯%xœÜy„iŠ­`œ‘£,øñàÈ3W–:bÛîèWû~Ú„ØOýpëA8c!>¯(Tl“ó ¶~4Sh&ùj nš6b‹E{’¶UÉh™ÈÛwyoÁ3õéfµ‚Ö$vû~€ÀÌs?Ÿ$ßëøàBÎD[s$Î)Ù aÄåÕÔ,ZÃ^šš?¯ñ˰£þõÅÊjÞª“QÓl¬9{ÇîɃg1qLë À¡ºØqhÐ`ŽK{°CÛVÛoÖÚ6ª ጋ ÚÔ$ÏqÄ1¶Ÿçíö?ûÝØÇÐ!`·ÒDÒìQÐØS»¿ŒqÓF!µªMÝ¢®ê‹ àNU)¶ i¼àèY³¬?≧c)o€‡}»QG·i ŸŒF³™Öƒ.³Ä1Š{¿H\6ŽÑ(>>µ;F:ñÙÐÒXLUЦ;É êã’ }\•øJ}Õ_1xfpjáÕæ6tW/F”çeÒ9óVé‘ú~²yŸ‹÷í™>̲S±õ`#ŒÜDÀÊpôž,Lj ¶ÔR)µ€Ñw˜p¼á¶ò^ÆY}Öysí×<Ò¤1sØGÇ0¾Ç×ß8âûàÛ½3Ä‘SfõqKÚà ÜœØÎzã_¦âöÏ ßz͘l>8u.ÜM¿’ÍIÁóÙ>(ý€ÇuÖ ÀðÆõÿ­íQ{š5žÅŽ`hë)‰ùYÅ1¦×Òfs >1€ÊogÎx`.š´ _®]¨sSDUÑ?ÛŠr°Ã”ZéÒåÊ[[ð0~Qà™%ÖqÑ–`¨>ÀKN ™ý¤úUD¶ÛYXî†y{hÖöÿM¤ïú/"cc2O;0ƒ·)ÔjÉ* r‹IÉy¤ý^½»EŸoOuV´9ÏhÎE±¸¸TÖêÙj_ßšT±•¾ªT ð. TÞÜð.햔ƴ™9ÃxâíGh%™2Šdx8¸¶~#ÎÉà¬úqv‚ìpø÷[\0ÍZª ¸C¬’±øLv0¡îq'C¾zq5˜ kXB@‹WÒN¾å×QY&ã[[Yã}à›1%¦Þ\I¢2\òý’Ì›~÷Þž’¶á†“ívn&Œ~¹õà £ øÖk,¼@ä¤C5¬>j»nE± VA?ÖDÇ…€H)W³”ßÜ<ŠœY{Ö¹²^á¼R©Ú˜y7-¾m{[FÜdç.Á»fÛ[ðêJØn”@íxPjýôxë[VæàBd^±OˆâYOBÆC pd™H§GW9ž“ B^·{™¸Þ<n¯]níÃr½äsÞ¼[=H­WÎ;uð¤ H €à]š[;Œÿ;Mv‡ºÁ3Aøšo—àQÇUî<ÚôÝq€þ˲´ÕŒö8^o§7cÜ‘çG6 †\pÏØ–h—ã09)òžø¼=Bij^p=”ì)ð\Šž÷Jm)à×¶&ÇcÍÊ\©ú ôQ¼ŠÔ§­ëE¶›¥·|x¬£ïh¯àm¦w žÝÞ½îÁ´ï8ä,[®NdÁ´mLËKÐÎ;èq_”É7'[®¯'ÑF¿ÿªÈ€}‘ Ú¦ˆgÖâ»J ?EÃxTíÓ-·§àUªøØ+ÕxÏöi+´ß­ê\¡=Ev ÞÍ]ƒ×ãpëÕŸÍq¬ùáZ‚†_êƒcÀi±ã$­÷ad#ŠƒŒ„xóZ,t'÷Ž5t€ç’:S²wÛæ75Ï× zfs{ޥǓ»1üNíkýøÖp¸GD¹"0­ë&üwà(µxàÎö "N×X1~í¼Åd;I#ŠmK`·ÚÀÓ˜ š {îÁëõ»<ß.ÁK¿ãÛ¥©³i°» KlépñîÆZØV0"ƒ–xŽwcðÌÑ»€aOzo\}ÐK¸XÔî·ž/ïbê!ò+^Ž\¾ûA:Úa Sˆèä›.¶Л‚÷éüCÁóéàa¤]·û \ï䮣] £›Njùô8hWÅ1¦¦æ‡2= c€çÂÍŠì~$Àô•³ƒÚõÅë<<]K¥nçòÝ”7xZ»ØjØ}Šv}¬úÖ×)xféO<:ºÑë>Ò9Z¿DFaZ‡ºbK8ìˆÐgut|Ìzö¨›Ìë›"b«ÁD‚!8*¾ò$0 ~û¢ó­Ðž­¼Š$µwa—b»{ÚKe ƒ½µã…Û~:¼ ­Ô#£È´Ë¢Ä´4€)Ö.øq7c©ì8%X¬¼;rü"̼)‰Þ§æ£àý •›=ó™wé®FÁSëàíVaì¾öÌÒ%Øá`—Øò¤£0[h~zœKÊØÕ£Hí6:ZÿAŒ’0N棎рxÐ“àæ•ñAél‚ØÖ²+3’V[*ßΧ6´š–ºÝþpTÛªíàÁ¡Ti¾þhý±†¶·Üð2›iù )¯«µm£¨ žªfAKxy ”@¶ü"ý©{Bw䢒¬Ö£ü×ê_öÖ~ÑvÄvIÛÌO‡½? YÝ!äð>ª6Œdç§uðV(xÕ_x²ùŸ‡[órã[Ú”° eÕ/¤ö2vnåÜzônÒ€ÎØf?pßî€÷ÚA÷5$MK©j¡ýÉê?‚·R¥à5ݳóΛÕvð¤_™G¬³£h$ïgD/Oÿ 6?[&œ]É‚Á ÓœÅñ1£‘7ë0”ª%¢÷ãݼݡd~+Z=³k±=÷ÙºJo£æ‚Aô\껸õq¡tÞvý.­³¸[1ây•·|2¡àiΛx»Õ¶š¡0äG…©; Ï6J¶óè)C¯pÑØm}ík~‹ÕBÀÆÚY;+B-—ý†NÑÍ$æÇ¢ ¿Õ›x¡ÁWø%ÿ±pq!©iyÛº¦M·y*Éî+õ­!6¥uÚ­+C*oH`.Q^=ۜމ]ƒ·[R¾ûÐ)3ªß&WÊ'é¬eÆ…R1ÎÅX冠¿OkDy=y̓bËqØ•Á>q”ID>AÏcD³¦°1º$ý µDS›<Y{¦¯2@Á«ö•tðªD«ƒ7g“Ã{Õgzª·õuŸôQu—‘d¡=ÿLƃ&˜ÃšþŒ¾hÛ5²|ùöO0åŠ$ÀzÔYŽ#³ì¨ÞÒÛ.PR êsñ˜<ÙSn‰FÇ'„ioÑ“D=Q¨ß®Ñ&'m‚¤>>Õú4Ú5?ÝG<•¹¾Kð2¥]‚‡Ôã‡xN2!x˜‰ÇíŽÅ z2c3z–½E#à“a;=¤pÕ Àê¿×_9¾é£“ü&D«Õ“ŒÀ9L˜ç‰ïïªï]-cã•¢w ©.7‘Ûgkܶs&‘ÔžÀ“×+­¶>¥°ù™2»lpÚ¨ìn‚~—¤àH:rÃ/ÙFŽË•˜bÚ¦¯Ää“wã 7m …¥å%[ÃZÞ³ÑxïôXJ° ÿ ßòº«ß^cXúêà5Ķœ½c=MŽEÔïÅD ÄܳÀ$‹Ž¿ê·ðäÛÒ_²É;Ö‚»i1PØëYN–U-¿±Q\Þ[èz/më <†ïõNžî“´ mÃ+ÔFÞ£ÜÚÞÀÓKFM÷¶~3:n2Ü=õ('#XjéiöWÚ¯òæTÈÅóÉXL ŒX±Ö6¦4“MORð¼nN‰‚Øc'åË–aЩhf°O[Ík3SWÛ²ÍÚ‹>aðv[Äb.ÇöS]‡,FYL5È£,ú'Ãb6Ë’™3˜%ÛÁˆÑûŸÓáèóŸe°x4ë×·s xñfô:É{Že|C±•Ààë¡uÍ“o—†ðˆç3¾²±ž›Jùsíâ;™§)ìƒcÖIžwGÁ\¦¥~°î§m‡X{ÀB>ãO‚įq„e-VŒ¿`GŒàŒ^|¶Yh}¦Õ/ ¼]Ç󄺦hS”Ý¥tÈdì$jtÅA?ØàTQÙÕ[t¹[H*Ùq4‡Ý|$jê=y?e($L¹Aþê'Ø*ˆVŽc¡G’5-·9­§©…MIÛ‹F6½‚§ñ»/Nº)¡±ƒÌÌ0N%ÙP1z ^Ï egFÂÈ@ (7¢xÆmPÕÂ%e(èhÿÑš³ì„(‚Âxž°ãdd’& ¶ëÒÁ+ ÷L£p]ZŸ xêN4l¦C0=jREŠ»ŽŽS£ºéÑ/‡7à¸÷"·¹ÀˆHâ\¼yO+Óÿ·Q)¦=X;„EñE7‰Ú¿tGÏ} ¹¼ß¦ƒÓÓØ).—?}nëbÛ'ÞãDUøG9ùé:2QÂjFcC‰¼uðïÈSá’Q»}Ô¤D™„Úyå–0rfsÂKÇ-Qò¥ØÍ­ÅB…qlq©Ù™°¾‰b›þ5O6Ÿ|[ÍbÎ-¯, }´Œþ×yæ\q.bûÅÐs¸®Œ2àÀ¦(ùh_‰€º¹CʽWEP'(¹ÏÔ0(’òç…M½cïÆÌ>ì\¨¯,¥Ñ„ù¢ÀÓv-¶|÷QÓ~ tŒ5_^n‚çNΖU,RaÜÔ,næG¥6v$ìr'ìkmýÄ•Zégü±Å•³…Šœy!'•’O‰z~ø$áíÊ=–“®¹¨âð#ÃÍB"•Õþ| Í’M\| ÚæŒV»Y5[¹½h­µóÛ¤Ä÷Þ»Oxä+˜pqYÆôÙdýØý”–ØÀYM(´QœAíýâ 8[‡ÿˆÄ Âù3O"ª|é!å¤bé ¾‡Øž°ˆâ Tl—–0ßBÓà­)略–6Uû^€w)óDÛ¶Ö‘×êàm%'<¥­»“I‡Ò,s†a¿1€e“lGý!tÏb÷&ü"Fÿä7åðKEi1I;8„½Ë´Š¥s½k¯u›§ú:îš­<&x—¿8ð®|_x–Êjíe†0ñÕÌaZÈhÁ¼PwdÖá@FUw2uàÑ5ø+%üw¸Š›?´U"‘¾­m¾‰Å÷jK–ÔÆ/–šbÛ^«ØVJÞG ^º°{÷ìQ†ž`à‰ãëàŒt®¨fä>5;:æ·ò4YÛ1*ú÷‘&èvl€n±„×=‰y{ö¡ÕÏ€•’ŒÃ!ýLÓ~Q #̓%U£1®˜‚×:(xÒã‚çÓwÏä]øÃèL‘¹3 IDATƒ.°XWÿýï>¿Xôâ®cÔ1ªWQÖ³ žF#@VìÄjõz"åV±y«X>%I/÷•ßBð¨›1/§R-?£µ_,57 [çZ;x4Wå‘À3ë&ìÛ­‘,<ÚéOgš¯û—–ÊŠ»ê_,ßhk)ŒÁPP ØŽei£VVø‡×ûÝ„ÜÑ¿ëÈY/œÎjù`½1õ&Òúc6|Û' žôä²áÛÆaþGÕD_pšvUb‘f $“A í^ÅÚ3½ŒYv4®gO‚Ql#Ìz2êȪV‘Ç*dª…±¼”z ÍÔ#µ%U-g:H?Ъ"~Eà™; òîìOë1•doðgT¦³¸©Í¸ÜóQ#Zóû÷ë§Ó`¨#›Cƒ&™9!ˆÞ×^þ.iÜVg6AÛ¦R—µ¼„U,©rÖPj_‹Áü¤ÀÛèJOƒ[JÝVÂL‡‰Gþn,;~ÒÂtÄôжFt‹‹á„ ­»ÝѨCÂ#ƒü›ÃGÝTlSaCjfÊH§ÝÔÔz­G•œ¨0UfÍ—‘J€cŧ½}½¼G1UÌ×¼=0Uºó¶l`:Ìó„Sÿ3 îzØÁf›Dct¹ãáz*Šl_æ·ú ð,®~·Þß[ú™ÚávÓT(n¸Ümæ±ï·ñ9Áö•2*€G|¥êÀïT€q®9;ž Ý'yaPöðnÂÉô(«ºX2j …±ø™‚•¸#I˜y ÏûèiåæÐH^N"³ïLH«µjJÇðn®#xUïfÕ9§géa+4ÛGÚ¡åÒºi´žÀ»Yú‚¢*£ï!gaæ Ì’ÆVÒˆ PT `qaS+Ðã²Ýîè»1†™È¾« ¶c¶Ÿ…k‰«š¢!Eh 72T£„|ÌæTƒ`sN[A‚ó•Ï«”^¿ê»YQëà9?‚53G×M[öÞÚn¢ †ïzØô˜<‰Ž?cåyN¦µ)!ÊwÁßlôî û7Få?a`eL'¿{/+h­F뉮© ±½]Ȧ9lÞÏhìОêDT<ÌZîJÛ³qH¿ñ– N2hÅþyó”Ž0|ý öEž–mÆ+°ûȬ’µˆÃ >ˆƒëY¶Œ”aÀA;C¾*G·ü¢‹øR ¶Am&xdÁ ¦}fŽGV§‹Wµ%Üî9§U5ôm¼œ¤M‡±UA=*OÁ+xUß§ºØÖ¤x›:x¥—Lù§{ï%OxTðØž®`ijž¡AIçÌDcd épœÁh~ë K£5óSFôßh©|o"zÎíŽGÉ7"ŠÏõûR—ËêWàÛ¯ž>¢íÔ0)¹v%].rÁ™ÆcÎ]žÓ.”¤ª¯êûà.yMðlŸ£§aEЮÁ;±ËbåþP£æGdˆFÍÖÎëm' ÀÜbC­“X®ÿDzL·+£'g@l¹¨ÝŽ“22±0¾TúÞDP›¸RJ&\­¸hÆÌñ]ЮglUŸê¼Þ,Z{Æò¶®éàwV<Ÿ´÷b+ Îë CÛß9Õ*É ͧ=]©±3‚Ýi8EACތّŒ›‡%^Íè1¬‚bûµuIÍI0¦õ¨*úû5m ³E9f™·ˆ”9`ƒç&Nù%fí)¦ÄêPe´ 7+Ò…ê[¾ºå÷E‚ç¶~On8øÆà(š,ÏÉõ£Wûh<ù*òMYF.Xî00¥_È@—šRs~1äv'¢J_Æo}Γ¾zùÞxP§’öi^.ŠE-•BÜ )©ÿ‹V:á„ç–%ù%²v€T}…#¾Œ-óQKó<Š^ÁÛUT¥_Þú=¡ùòPÔβ‚•Ú»¦Õ6ßsq$…7ñ£‰Òe´pÖïÅÿf³)šû® Aø"x‰DœUÐ^A±ÅF6µ+àž©9msJÚ‚<ÏFgìýs_É—y–FÕ^Á39Í·Ë5¶}»_¶ËØÚÂ:Œ ÙëvÞaÐõ Ç©óÖ58»Á5ŒÕ‡ƒ¤òìÄ(rLašÞϬèéG±=ýóp±˜^zH)˜k˜<òC-½Mjèݹ߶O29©-'YÞx¦¾/,îgybpâÕO´>w$öÕ7fáím¦6GÉiüÂsÈÉŲÔPÔ‡óYÖ‚ýéåÙo¾EV¾$ˆm€R«–ìÆM ÝÚ1w½·Æä#óª=¯÷áÝþmFnŠàÁo¥ØÄ¢,ûj3½À»¨ÿïæ09jLd¬EØÇ ú «õØv™ñ»>NÚ™Ó¢TsëzóÁÃÕüæt £*j^û9ÚÛ‘›´#÷Û£€ç«=±…3 ñÀtljçùmg™KïaïÚE}Š[¬z‘$MuS´ŠÑj"žÌÇÞÉŸÄô^¶ø9~®ïº´áù†[e›¡0Rs£ÂЊڎ¤ð{ ž´Ë¨ÊNvž` ¹`sŒ³ð©Ib{ï…(a5lêc(Ö~•~îËJ¬L;µŠÞcWd¢Çµ´{#`½ø’iŒª cQVVóÁW4CMÀ¿¹ ´h®›lï<­¼GÝõóFu±é»˜¬Ó ´°°û+.SØ/~Ò¯•dý­+t·Ð»9ÀÃ;¤äú Ž#dèÆ„`uIGŠãôÏ¥¢ç‡- •³5l/t/§a’ÏâÒ6 £ÎÞÞ‚Wÿ’½ï¿rò6v^ý.ô¶"Ã#'>"%ŒÃ!•:,´ëk÷ƒ7Ësr»Âz¦uŠ}7ëGnx”Õr`çÙëSÿÁIÁûeÍb5‹ÔoWÌ,¿m6·jRÔýxàõ YëØAl±1-ÂþÀ¸#à§&I*C°FÀÛ4NšÝúzÅÖ †Ë˜(ûEüê¾YŽjÔPÓ*[ðf‘³öͰ÷‡©=ì$Ò3x»,Vîè Ü=d9Š»×è/üŸú¹ý©X–Öõ·Ó—陽lXHwâÅq³…ÍÌñ}´þ´#² jR ¸g›#ÞOÓªn¯4lÜ…Ô¿_x6Y/“Ԋ탡­ÁO†_H!X©é0e,³5ðëŸ*ˆÖaŸ°GY¡á53.þï&±ÂæE×¹#ÑYí¡EtñÈšÕÃp•×76`®¢{æ]Ncxo‹tø'žï)}Ó›“ ».þSÂnŽ;$“ìDpÌJ =Xš2x¼ ž]G׿±2>Úmè§&±fLX­á儬dÇ-"#}Ls à‹ß{™¹Ó÷”Íç/ {–ߤ¤Ó{1z3UœævÞN3qç0¿ËzÛ}Û¿Mû&ið}}+gPš.Æñ…gÞŽ+˜þ8& à¡ ­Ù±@è bnÕæUÏO´¬ed[ܱ.zÓªr»P¨aEªm 5R® 5)WÕš<xoí¼ƒ„4:Ð609Q¶yÿUꟹSå–™× ^¿›(Ç ¤žá¹}QŒ¼¤‡N[¬^]lÇÎ2R"U²£A©X¼¤¥| UKÿc> ‡?K.©«Û&ƒžžZÕå:5³ü€t÷¡žÀ{iWñ<°óÌw˲Õ*¢ØRV­Ì<:¼gå–ëÀ,æ=qYn½4‘ºÅŽ ãæbÊ*6¶u»Ÿ‡™Gɦþ¹¶QðÊ mCaÏ{I%› ÎÔÂZíÚnæ­´€çõâìȥì9POàÉ»¥CÚq0 ÏsXí4‘ÿ'p°R¼L£}±Nêÿ×Zë^‹ƒ „^㙳Šáå¤muÏzø@‡˜Þ,C†ô,&±Õ/;f;a7xÍÑÏ·{ðö|Í«{ zWÿÿuU?æ?[/F7Ø #´]%×Õ .ì¤gO½P¾Õ—ÑýAÆû^"UFEÛÞOg•Ó 0¼éTì{Ò§TX§;¸i¾ ð)s‡ëyd,“ý‹ ™rR‹á°!83Œæ5ã[«ë¨[Ö¹Í R Ã–?Ð?ë7Söì8f{'ä(ˆ'm±”…ñséþôÃ3Ǽ/ß)Á÷§àQÊHr±Ùò˜Û×xýXàé¸É‚^oY¡<º£ã¹ÜízÁ%Ë·(Mƒ¤ÑàÈ@ÉÀ—§Ÿ~k´ýb ˆ-A.[QDÜe<0bõ¾›ÂÐýqI¹sú}©è:VŽÝž†° £È›ûO¼î§~üìxºŒ½: fï°w1iüø­õêà VÚ®¸%ÓŸ2ó¹Ü‰¡ì Ö’Øå¿Œ“lËɘÌN|KBaMÃrŠvÞâÕT6˜Ç‡ÛÄÆ"Í‘ù`å‚öAeMϦùÔg[{OÀkk”º7Cn…ßVãiäÎ2 _ÁZïUTªÿjë%ŒÇMä({ ‰ßÝv8Ë‚™g'<õûm|+#÷€xÖC´óÞŸ{<_ýþoøJåg'pÎÕ’©Û­í›Ÿ±Ý ÕŒŒà¬¨¶RŸjwʰf¬½åÔú*X|iCPž} ðÔú÷>,ì°ÒÃüäˆC9’ó[ÜGä.®æ6êžQ‰5À³êÕ4â“HóâiOV9ë°—ÇÆ·c"Ó4™Š²cAéµ³¾ëÚk®ßM)`$ƒ:ö$Ó˜^6ÝÖuÝg˼~~ óŒÁ«8×ÞVÉ€Œ¤ê_·UI‰`Fv鸳ºï‹y=*ŒSc¢ÅzÔ³àŽèŒ´‚k`ŽÜ'Ž[T—r_ÍS¿µnõp‰X,3*Z½‹‰˜’`HÄX¨¬‘§óÚï2eâƒÆó^*3îAºmVH—®c¼ÁËéfI¸FréÀo TÞx‹D¯—x[…ßðXc׆t<ÛŠ-FU"´cËhÝl /,x·Ql½ï’çÛ®¡‘»06B\¼ë×<ç:‚wÞ¶rWE®ø›¥ªsn½ú8àÉ'¸Ø+v[gwÀf!`g<ü1 š®Å©W%_^Œþß4BcaøŽào^ˆ ìˆ5|%‰œ¬þ³pŸˆÍÅI’pjÿÆõòˆíDÀ*¢ØæR8|%ݶ ¤Ú4  À”k€'Ù>Z§àÁtÞÜ=xíRÛnï٢؎0 A®wÇ !8‹çûnNj›-h‹·˜èöI‡o°PØÅÉൾò‹YÊôͿʋ“X(߯ [Þ¤`A ÂÞ+ iõ§›—Ûwl‰Ô^EÚh€‡ýžÕgžoee×àeZÁ3IzØ<ÞäÍV«[€Oÿ‚-äý„ §5•Uò7ºÅž!|"*³p éO¼p;Ë’ƒá^šÓ] Ö‚ær2±ÝDFó”rc"È„j΋œçþ’šÍãnx#µ›†¶€çÓH'xÚÚc'K†Ø2d‹p€` ^ïQ*«‹K&c a'!kq1NÈšG¶Âw÷bClΑƅ<&„Z½¸Ê±c"2š'©ççAaÜ*ôÎÿ×Qip$Tü6Ü~"8Ó/]~к{+ÛZÀ«ú*Dõà­¬O%Þ®äg%M5‡gû±5!r5´7"šE#$ùÛd@ûP¦ ¨T4¥ÜèçÂw_í#ÙKæ•ln&ô葨ŒÕ£üÑ矈ǥÞRÆÆ¦Bž—qA `ÏïDªüN¾Ðþp¥vðÖëb«9W2¼ÿXàù|­ £÷qx»7±–€£¶ °p_Ž¿õ/‘4Ÿûòj^€ÉbK²¹zw®öçb Å~ÔÉX–pîŽ7öØ1:S¹À?‚YL)ºÁ  ¿›JɧWQª°)µð…ªÚ@x+-à­S÷ìzéqÀS%ßî†éF€v<Üýà6ÉdL´Naº)JfÞkG_l= ‰¹9.j'~ës4…F^û Ù»–KWÉ)ÖoåÝñè<íçZøP´'ýçBÞtœ:z7Ëå¢7ìE’ÏKÓR-Ýþp>}æI¶KÞWlkØ¡ÀÃ6Ú5ÏöxàÓvÇ1°m-(Åò?z˜6&éߪÿê™ðÃãUÁ|>ÆrÄäR‡Å:ìâ8™Pæ|âùôfóÝ(á÷ Rÿæp¹Ç7ö0|°©…5O-4Ω{'œð«]P­kU[¼’vÁy÷F²Š¡É݀Ǜkˆ¸Ñ¸¦þçoÎL‡ÏOr©¼š#}"–±“C+ïì3N¦×Éúm±1&A×Ã9tâ¿G*ûtDL–Ć,Þ[GŽ’Àý õNA[‰=› þ‰ÿà˜‡…ÜiMjiP RïöÝÄ›‚‡V]˜š#¯ŽX½ÆóŸXÏx—Ó¤ÿ“¿YLÝʾ%R.¤,¸^ï•ÅrÚüñJZ¯5SÞnÖ<ÎìuÓ\³«Ç#s³vǘß" a^dºŠIÉT˜!Ügˆ8V³4ž×VJ$`­’%«ݳl`*Œ™Uº?Ó7bõ,,§¢J62‚·sù™p¸ñêP¡þ4ᮌ±R#_e¯ÁëT[¿rûŸ&ç5M?ìøÁ6-γ4Ÿ#eP ÚËLÃ-…ð]I®wÇ´~ΔDñ,çáØ'ñ¤4’c)Ë h0CHaËý$ðsM«IÚgý‰)·)ƒž¶”2[ç€gv‘Tq+À¶&K¤¿Ó—cH?Rƒ¡b ¾VºŒ»f,¦g¬áO ³À„QW xÌê›á‡¿r,œx@¬ÃH…4;.ŠÈeqUÎ}¨mT¿ÿ“@è\ P¼ €Ù·¸”ú®¦½/uOÙ·¯û€W5³Ùv1øÆ+Å6Î)2Æá¬ I•««„£ YÌ7`ŠÄ%;6È0„&`´ ûE •)x¡ðQ7øµ³V! ?4½Q»vo6‡D«W Û ( ðäR…¼&ý±fš’ ÆÉ£.ðÌˆâøº‘lŒŽGÙqȬÐ}“Y̶³6ÄÅ˱‚‘#™G–±ëÖá"Ý/kæ4"\”ó[)÷›2À%ÜÏÿÈxW`x>‘ºxZ‹ ”»q¾¥¥ùÅ2?::?C—;Û–]ïÝžÀÃ5¯ñø&8l5žÛ¾ÖªŸãuyÜÏÄ$°p8nð X±éÑ;R|ÿÒ›Œ¸90H„´\â1ÚÕ°_æmĹT6ª_F¢Êx £u‡z­oŸT| ‹mØ»°ˆÔo´Ø6ýDÀ3?ï‘¢*u‡`GQÇKžµƒ[eµ2‰d$+Ü1¨A؃ÞE%{io×§sTƒq\"•Å 1ÏÛq[C<ãq¡]’›)í+åß·zÁÏÜ"”ÆM?ÌKáé½k}Ö+xšÐñí·±—¾M}t^Mt±¬"ƃñï;_áùk {òŠíÚ¯ýâl»Ž°àÏ·UŽ ,‰TkUé_ëbë±ÅíHœp‹)8vR<è;8|Äv/º'=x­¦Še‹Þ[]!“·‚‘i´ã£ {‹Š-fZà«fÈZœh(ÿ<©‡cì£#¢Ãx«,Ü ìëØ‡wNžhÜÔŽîl8¼œL¢½"zÁ͈ÉÐÿkÖê§b«dµ<¸µ½˜~=­y°êUeï|§af¶e=!2vv<Ó·ùceܾ cßEøÔÒqGö0ZÉçxYO!eðW`Ù“þ>ìL¬®f‡BÈ,¥Ø 6Ãe"øæ±‹÷s‘¼˜y LƒZIb£à)°¾[¨C÷<³³ª¨0ÚÁÈîFóº(e€Çu'#Ê,;;÷IÜxsŠmé¹a)Üw—ÑÕ‚ ¼Ê„a6;°/kïÙGÆ…óÛ~ŠL«Õ©Í_Ú>~y1ËåÄÆ `ÂÑœÓdêÐL×Ó1íf¤Ýƒgvi¥ÍT¡';~ÛwÁð= Ï-ô¸ž0Öëbë0Ø¥Cêsõ¯5·ã{^XÎngLÃ$Ì¡Äq S{<Éû(¿¨_“¸‰˜­ \ýÚú·ï§bŸ#±J­–nR ¼Ýx½tV6/ÓÏõlç¡Øv8\óÚ†.s™hîô£…|º¥èØ IDATNÏó±%ˆ®Â­Œ‹sc‘¸²žÕ}B{xzƒ&1°§FÁlö"œ˜^^J)—>úÖ>ûù;¯ÌlÄ=hOçð£ ÉE«¡·Þþ°&,¦HõžÚ·»`èd÷¡®ðøñžÄ|;J‹!=eÿ3þ‹^|…±zÑT|ö–`(w»@ÿƒ_dÇ ‘VÀ+”ÒÑ?«cõtéÅ’oéZyå}¿8ŒIàf€Ø^;¯»‘Mx櫾z¸ûpOà•œ]û¶=1 ˜(Œxó%ò5â:ŸýÖˆ…ðýÞ—¢V²Äö>«L Zfž•¸’óYìûˆi‚ «¾.Z]¡Ú"MŽF;O‰.¾ë™Ý+lž?Øýx=Wýz/à™\˜iO·/„Ý×2Tkº¯ÁpdȺ@Ò°þ˜Ä0)™ Ñ`”Ñ¡>‰“ì ê /ÈaW§¯,–÷d°cKŒºµaêž½2^XRµÊù¡l>?#nÔ€µ• ®7ðÞØ%x}—wWÄ2I:ý`3s‡áx æq@„0ž´¦Ñ’ÑW¦1|­·:… fúö™"ëìGý!­o±“3WÿÌmž÷ £ï€R©$NÒn2$üí”z/‡n0,ˆèžuÀÐxouë <ÛåÝ¥[ì¼éÌ2Š€îøHwZ3š„¼ÔªÐðXZ†ãdè#X±‘Íím$'ËûXÀzЃTð°®ù7¼°÷ÊßÎÏfÁéðíæüL¸›Dª'ðÌŽöÞÜ.gÞNÃ1* uÇ首øq¾ËàC½t¹“Û®²+Ž`È%eÓ¤RJcJ3ý±´´šŸ™í µzV8›³†_»¤iEúD.¶»¯Ò ‹ñ ~ZQYÃÄ <ÝÕћȗu:Ç0ú„l¡ýš¨ƒö³õ$/ÆrƒâsG9,ªœ4Þå9 t­ ËÝh¤LV¯«Zy•0¡×¼‹ÉrÄKa­‘(UÒÖW´O[â˜{ žJÆÞ¸g&c”XÁ@ó¸# ÂM;§Õ(x9ýN6ÊÆi?tö["9XeP+g tÏËH€‰ Áøi.(…‹o«ÓëZî1 ‡½‘$ ‹†¦;ÜZÙ·NhÓ•·¯“×kRE·IæîjUg ]Å®ÁÓ.tØyì¶”Óõú¦{D`(-Rº!8.¯VA8n0ÄblýtüpAðê>ëOÎ+,˜+^w,š5öåØ[ä}í¼¶yZ‹0ý0%2Þ]EºÿÝÅaf³­‘ó/9çl²L^·ÉÎ’EÂ#&#­ ”Ž;3ÏànwÉ™éeßÖ¼R›{†Ú[ín0ŒÅ_n9ˆ{fÈ­e±õ™púÈ,kσY­`.ŠËýüE%·¿ÅW}_¼†Œ§Ãžb"ÏŠRñµ¹·?>k{o)¥6%ìiS6祵ê‰óNÛܹ^õÙl×Ñ=S #û®_(ñ¶ÌKÞÚ@¦—ŒSðÔ&xLQxžtÏ>†ï8pƒBwÌzB-¡\ù 2©Þ¥½19Ý™cÒŸ9@ x¯«pÿý_½•£ŸÆËÄ>Š -àNnÒÈ™+ ×b´Ÿò¯3ùésáÄUdü ¯,§[äVuέU_ҜΛ¥ãëêyç¥êžeÖ^Ââ‹=qïæJO‰>æñ<†ï|ôm†ž/Û0í -AiÃvªàž²‚5Œ3Ï(E±…Õ-dKû­@ÄÅ4yÞÎæ¨ñÅx…ÁâÓhîéÍ©ÚgiõÆzm15«7Bs§RåÜOÄÐ0†EÕBÛ“aú˜úŒô¬s¥ô§ëÕó¾›s¼ë¥ó黪ífErŸsí~Íë¬Ã@nÎmÇ~ÊJÞ:dÒ5óPIp’uô Æ?Æox•‚cõþPÓ°^¦+±Ùoqa;½Õ@ Ôv^vÄo©s†^ñÊÒ5=xþÛ¼’=Dˆ#Qûwó¾4fÂKM©Åô1õß;žTª”:5£éà™€ÒóÌ‹?B%™#«Ã¶ÓºE§dG-Ìð0ÝaæÕŒ7ÑÙ‡V°¸¸eý×À…%g…ü¨$–ú ívÇè˜8éF'ÿsmS›¡A(%‹•ñáD"–]ÍÏtN Þ?SèàU[Á…á[Ñ<>x-E,Ü õÀ„‚h\°%È”©½Ø “·Ïkñ(ײY‰_‚KEŽ1kțĆI˜Íh|fd²ù>芠*bªi67~ šÕ[àûšª¢‹×µ­ö—NoÎh€‡5+šϲ=xÆ×ñÚ?bž-а^Œô¯Å–nÁw'ÄpQÓ’‡è•XÅ‚T\­§ôé›°¥Ç!ÚnõáIÑËÅåÛÞ°=‘‹·è¦·' nFí•eù¸}ãÒç-w £W‹KKÛ&õ on]} Àûü®¦xt#¹ Ý[³™6{|¤\ž×½n°]Ýþ¼úpŒúý#ºØ‚QOÅC¯¨DV¿ÏÒe/º”P{…ŠyupÐÿò/o£Äýïog'ôX~ÔNÍ?àV(lâï mkq»=»„½`ÿÝþC$¾lÏUÑÝ3éÛçëšjSŸv‚wáñÁk¯=Û~1 ñ††œÜ5;C†‘¹HÆÎy ~í:â—áu€ñêb;Ø’¹o¶ÃÞ÷’°ÞQ±¥»!„÷pûn})?£Ý;Ml‹µ ¦àæ-Úyþ©ð1“ä(›mí·|ÎO×à5øc+kø-°~Ïv½Þ¥kæß\¦¹¬–mýÜùNÝ¢6Ür!AªBêG |íZÜ`9V«¥SÑ¡‹¿”­¾Ñý˜Ã9Ç£Û=cä}J0?3L>åÛTl¯$®eƒù÷œ+³yÔGŸ­äŒ²óHõ€O¶É>Í©õÙ®Szš àÛÈïx”,ineצŠDÁÃ6G"2-š»& áN)fl¦ñ’Ön_DâqÑÀ›nZéûqš{®Äé†p»c1e"Nþr„=E„ßæ7±ëæ_ kõ°Az©¬æW&k§óê}7ÓŽ`û³ôR«Ü®I0ÕŒ”qh—Ê5‹—øÌá>ù8¿`%8sk¾À3¡ËÄl]ÕÏX çN˜à&t2&f׌ëºZ&ŒxcÈ Ør~ì¯ZÄ8 ãgç˜w™« •s­µE]Búz¯Ì>s|º&ï³PŒ“è,Í&p'bÑl08í­i*ÅGÍåWÄaZ#D“¦¼‹é’£ÀR¦´$óõ̯×Á[³õ 5®«F`´Dx³™Ô|G0Ǫ}Xžó$ÀîÍfÁà ®+®T2ú»ýÅôRJUVûÞ°zÛ<0v¯`¥Jž¶'X^¥üè2‘Ùý–3äó­o[(€Ã•IÀ-ŽÚ}%ælm¬yHéÄÕɈLÛòŽQ7°•z¶;²b™cŒC×´|.`Ü€E.miý(suèÚã¿H»>ÐRnšÃ3˜ú†§Yžðô+!Xî@M ØÒ¶ç¹1¨X\ZzÿüÞÜ_ŸÖŸk½ <óÑxŸunžµÈš®ÿœÑú¢5’bÄD¶š¸dB)ޏ«Q[Ûp1¹$o@›¢ô s&=ÀsEÔ΋* Ì<î5öÅ–::ø1t'B`Þ¥R…|^Ò¦kcÄ^«èrïKÝ{ãé«ä_²…ÀY«›{AÉ ~\eY †½Øù¢ñÍÏ-'"©Uœ‡ ¶)euÛ>¦cÎ÷˜à©¤ç,)™}µ èä'Ãs‰VïQ08èÎbŸ¤ýQ©þ®# Hµ£°ÚËm€Çîe'‚~Ñs£McS _ëv'ÏqÊ—/kÚ}ÆHHÂ5óvnBœ..§QÔ+3¡°ÉÃ=iðªFGÉÛ´§ÆÀÏе]èÏlݳºèîÙÐúûƒRøÊBº•Û“¼¨i«_ir7‚6uR©g‚R¾ŸiÈGÙóÑ »óZ|‰y€S«Hÿt®"1º ojÓÅšÉsš YzðîšœT™”ª<úµì˜2$ŒgO®ƒ×›{6”Ûoñc‡K­æNÎõ7žþ à1õŸ€eÇXÊ+£œ3®ßKÇH†¼`ŸUhÑ7™UFÁß(^…QÈKoê_½À½PÐrÚÏqËí•{”dîÌ6ïõ4óÖq÷L0›@\)ª\Y™`#$#b’ì00zÎxÁíLÚ·°Ão¸øvs³6ø*¸EÒ ãð½¾ÿ¶faü ÿ2;Q}¸9y–~+ïI¼p»PNï]N•s4*O³/òSaoï õ2zïä–,fm»÷XÂL‹1^á1±«irQw]ûþ8îo€Çx’ðí¶)kY&Gènc‰Åa†µ) /Ü*`³ïòLbÛ+ XK‰.ß¿ö÷Rý‰6´^Åö‘À3ÛÆRc¹Õ2¹Ú†a÷ÐÛ;ò@÷%àÕ<î{µ”Eûaæ5W<–ŒZųJè6 y—Ó1%3h±}Àhþ¡§…à0Ê·¿çI«}®i(¶Y=ø–ËÞÔõž£*ÂãæÜ¥ïrËkc‡­ ž@v̈×ãND¢(¶˜Mâi( B#Í)Ï.•GÓà‘½¨žÓ´dìÖ U<Ê%à[ÚyJ>ˆýkÕ2e*{ËIR­˜Ä¾]`MïIÉ٣烙Çs¦yR­ø”uðÜ ¿”¦æÖ1Ìh'W"yõrs̓O| Ýé<ßœFïù+½Ï<˜+cV@‚MÖvö` ªù´267C±¥·qA { ]kždˆ-K;òð[ @ÂX‡Ç"[Œ±nËèSdz/äúÆß‡þVQZ¸yX4üZI¦±kœpËNLtõ©°!pƒõ‡=Â÷³Áêž•‘"T÷ ¹,J/þÈxžtºµÔ»âÜ3ðÌfž¦ozc'·M˜IÉtls ;€§‘?й-³„ êô¶¦Fõi-àQ‚ÌY%G«TS?*r‚ÕÚßï–uð†ÐÝžÀTø“E° ø«¯­Ã·‘ÖÔÕ|0`¤Ôæµ™ÖÀÀà©[;·½‚îÚy]p´:l×ÛxÐq2CD+,i‘T,zº•GcßR<¼9Lꣿ·TVCÿû爐Z!4bÅþ5·ÆDº+ª`œ4F"ú /-,`úe©Ø"’9:&Á¦–QÙúíG˜yõÁo…ÑæGé^à­ÃͶ±màõM·‰-Û“JÅÆ±ÄçåELJÅ0¯±¾Ò¤wÙ“7Û­ÔÀ`ÑK§S±ÕÜØéúÓ¤ËM÷· mÞ6o÷<ó0Tìró‘èÖÊ­G[ý}ÙCQ¥áy¹-£QksÏc.Ê”N¤šÏ¿9é‚evÈx–ÊŒ„¼´ ¶«yðpÃHUÀ_5Ð¥öAc] ¹½ÜMkÑÞ|jkÊÞL•·µèPÅ!õ ¹Ùpé3ía€wÏB £¡îÄŨ’o* XÒ­àa ÌÄEÏ þI¥¦}}’Ðäxú8™Ö`x¯,м xþ²øÉòR9W˜Ád•¤N¼±¡µÆ“Ÿ0xªh*¶Gá;»Ýq™ÔÉ‹b» Ða!ÖaWÂ-+:Þ¤…;ˆÍ°’öOç[åï¾uÜМ 4r@ÝÒoaaøyß¹ó´OU£ÚB:u³ôhx‹p§¥ú#}à¶™V+·XV@ÿ—’©*…Br[¦ÞƒÐ8o™‘²G9ô‡Òk$CPþÞÞ?¸+Ï{Ýh’€h-0…£•'FóØë„È»§õøîl¢“ @ÜœUÜTJK¤VTv'+œ¡«Rµñ %u›âX{©dêUÁ›Ù]‹{Ç÷Ç0ÖMA@Ub ´YYOÆW± “Ò8ÀAF;ëÛÌ Ù€~ù~ßëntƒ EK¿‹$Ðhà}ð¾ïûã}¿Ÿ¯ñ%j¦¼Ã~˜Õ’-ðkK´¤—'ò1;l¬‡nä™¶Uh}ÏÕÌÙv‚çÄàÁkG0ªâñÈfщùMƒ¨?̸üʳ|ŽŸKlÁ å‚?, ‚;ÔéŠmà™QþƒyO AßœoÜM¦ÉaùF§”'š`³À\ÕØIsæÁÊ{"@ß À–·}"n0ÖÖ¸ ìåš}rïÑ´­þŠÂây;†|ñŒ4*&|*üáÿɪ&FÇ9Ì>ìÈÒ/¼ õFï‹& §Žsl¢'Á|F­Æ@§ßý_ž=óg33aÆ'J5…æ4¸˜aÏ5zÍf%7 ýª×ˆÚÝÕyRgQ÷#š*/óR‚Œ6u±6GÝvË!¶äk‘Ⲟ\Ø:CÄ£öÇ4Í¢h äÌG$áØóD÷ ZÃñÔ±üUÍ7eWc\†ØªGÌ´Ï#¶0ƌۺc©p;‰ð¡4Alv^ ÞÁ‰“®?ùè|M¿Úý<‚‡1–“Étº+àiåÿÒ3»Ù)Ý`5|‰™N§D·0@ßÍ’òêÄ¥³?+êÓCíÃÊŸzx¯’K.WcH¼+Í@»O Ë>Á»Ü¤y^Õ2=³àƒÃÓ1Âo7…ÑÇóÀZOm<Æ¢*ñ×j- ¥-¶“§»GÝ‚ûñÉÿ‚<-ߪ€U'‡2Úd·_¢Îù§’žÑÐbWØAðÀW-´WO¼Ö‡1TèÈo€_Ï ]i^ˆD¼¬ rý¹Èœkcµ}Àó6î<4xÔÈ’’wB1¨Úäô )Šû^yHVqR8Ú-ÆŸbü:X«ÄÎÏÔÃSÛ3"#Ùòd2žZÌåÁ-~1î±^ýÄsÿD%Ì»¨¡Ø.•°ª` ôîr¾P¸õÑ“¼Ã7&ù™)h€çÝh³2ŸÆ%/&ÁG^gà5.VVßßh^ò6¨wc£(ŸÃ=#ÂÑP|œÚ5÷T¿“ÕÒ¯¿«»3:vnº¾l‚u6Ú¯Ñö_¬t/À¾!ãS LJcŒªž k+iŒäó­ ØbêµZõgiÐ-%0U>Ñ#ÍÊpbS¡\lÊÅMxMåujP#xrðtïÊ݆Žà­î¼¾W¡Ø"Ù½?Jzï`ÕƒhÀš {`§Øî–RzÊ£Îkk•ª)¦X§úŒ~ß~Ö‰9²xìHNM¸ÓëEöå Rp>ã·²+ÕŽã/­?1P¢kh×—s…6<…vÁ[ñ>Vð.]âéýÎ/lúU%§Üˆª‰¦s¸wþÉ E f.Óò˜ÙìÌg ·zï‹§pϰŸîw­ /ç½ “‰è+d=¢¤ë¿ÀÛ*FUPl«Õ°\®X%ò¶d)=ðBÀ(i4Àk=^ð¸{Ö¼.JHÚël.¸°ÛõlÈ}ÓnW’æÎ°U£døâ´¸x|KËS¿GfPt=]"p?žÍ†ÙñÚyËÅìV9œoÛ´Øi^á„ð-|ÂjˆÞ^CJ¹²±ÝoýQ÷<O'wÔžé‚n8eÅÓO=éx*º'xÖ`—±Êð˜'ýÓ¡0\øé\ßr€GN¼†Ix 0®f*«ˆ¿`0:rJ¯Å¬¦%“3éÅ%^Òýsº> 2ÚáîÙ ˜Ë¥í­ÛkÉnͨÞ¦ ¼÷x ^ã‘Á»¤t0O¤wå\P]D}Ot©ûC ‡$‘̜ȔˆïÍò—‰^GÝ!¶ÿ™LF_•ÉwTâ¯T°¸gø±„ $Í•§^Œ áßøë¦×¿Ju6†Š::³ø"–ÿì˜ÜS—¼È‡]ð"o|lüE_gàÁo}S[öéŸÜÈYUS/ Œ'ÔÌ^§gªý™ý îjÔöàHÙT # ¶ÑxzÚy‡øÁÃî10“¥ ¹ªúÅ'=Ö[pz•ásö+±ý¯6•ˆÍ„—®þÖ¥âf{ÄÎÿd,Ɖá1ªðKøÑ?ðZ É<Ù Ûâ GíÁÀU/ Ý3lȲ̬Ñ/Œòpà)NŽÞ!s„ÈÚËG̕ׯ,˜CœM&jîŽO«Ým²Doß®UŽ•‡íÎ=(¶eÆ·½˜;o"fžIdNH±ö 5ª/±¯\£-'Q²Nþñ8£Dwë[øHàõ9 ÔøìʘÌÝGòD£¤[ÂHékîJFÚ;.·žæZET» ÙBs±¦MÈu7`Ñÿ,Ýù,çØ*DKÝó¹ìd­ö+~xúE¬±U5¿DÛò‹XÊQÇ¢ÖBtfá   5jLlo0É¢z~æâc®/x»vž:öÑÛS=M Ù`Ir|Šm,&¸ežVl; 9KOpœbKþ8þ û/Y.DZ–€åTb<`4ÿô½X©RC[œ²,ÅøÊñ_0aLcœŒ ò«SÒ¡¿† °BÕ>®U[¬ÁÞ¶^ƒM›]Š<íqfÿÅÞû¯ïžÚvÍx_ß@’LXµð0Ô‹Áf[ûËØé­¨If•‹(2÷,Ȇ9}ðÈúÿ¢ôí*ÚyŒQ•+Œ°Ì¿CI‡òfaàéÙîj¶àI 9¹è tÏhuO½K_ÜÊC;/Ýáž1éD6®0à¿urÝ<þwØy§Ø²XØí`có ³ƒlÍ2@5êYÛžïêļ8¹òäæö§­áhp4OænMœÁŸ_÷¤ÂØžù»ÕZŠùÉ Ûk¬dyÓõª³øxé1 ¶x»­¼ܺcZ2ÄÁ;EÎ!$=‡Þ„ô3¯ý㉘ñ2qG"Æ“ÊìLx9—﹑ä{­2•dAMÃúPðªÝ3‚¼SB^8ñçµê½t§sÅ–%sÃz«TÝ$dXt­ª¢!à˜íçhÅ·_ð°pÏ×§cš-$öø°@Xa±µXlŽÙN3ÏMŽ‘¼Óìlûâ@©ˆ+¯§q‹˜H¥tQa9rómüÖÐ#37Ø%xÚƒ§@56‡ûÊfgÏl[ðÄ&V“v§çÏÊtêá6ºüàxT¥')Ô@Å–­‰aù4‚×Ç=Û»ƒ„7Lþ‘íʶ®Ö*I›ÞFñÎ_Í"eOú§yþÜ6ææeÌÂfv^A«aê"G–@†ðUØ>xF©ov°A«äâZxëxŠ„ýôê—ÅWbñ¼óg§gÓmDÉ9DØpÏìðì/jøfFüf×ÈÉÄ êTÕñÁEŽ¿Gžœ™Yº‘±ÅÒ‹«šö£AKùëÙñä‹F­9£ØÎÔYÍh%q>Ýáînïè-%0Ê>u^÷ЬýòC‚Giÿ~Θýââ=‡{&p€znW¹Œ3Ìlw_X·jÂù"4’ʈ°S ØíѸgtž½ðŸM»(á±ð"š% ËiÜB¦KÌZ±€ƒ' ØÛk=35ĶÍÄÖÖèa?à­îézœt–|`TÅÛ(qKÄÚíVú!n\}Hu샒ª‹ ŽÄYeÅY±+Yô1ç|Æv'³·ý³©1Ö/ µjllZ9“h)øá?®w Eл &s3@mLÉþnÛþeàõ)DÞx:½w4¼Ú»|X0ôhRöÍsß%ÿ½Q•½‡Šr‹$eAÇÃãá\OPEŒyÒ%]©ÝËJDt n̉™ñh”°í®œ<‰IðƧު%ÎÏ,±¾]¨më‹ØF¾UUœÐ=Áë*fŸcïý×îߢ•§õŒüíŒJŠŒ`ÇÏÐ>9´a9ØSÙuü5¨U*S;^–>û" v"óà|fòt<.KðáÄñÙ±ð7¯ŽqK®Z›édaQ¬‚\¢=€2S­–n®ÊþÀëW¿?ðš{4P’Áa`)u8…(f9aª 0µïË®úŽD£Îl?ñ”ãOa4|£gåOÌó¨ÊRŽ5"BHs…¿Vrf ×—–Q½Â‚ /Kµï¢G‹tði$kÀK¬°Ênà5xW`$ƒºÍdv® !>†é„+ B†º€í€7ÕÂ1lã uŠ-™[t‚çŸxÅ“J/ÞØÊV†O’ƒ2ay2s>x1#Ô×ü_Z.ÒÚZ O©ýÏ•0Ø&·pлÅ-Œ5`Ñ^Çr4š¼MæŽvÈ<×*Õµ>§ÞÌS»§8àé'6 ûŲ.pjhÌ®5RJ{BÕå#ÕÓÎG‚Oñï:v·p‡ñëcØL]"š" K¿³uŸf•¦g0ªé†÷hvÞ¢BšiÔW¼ë*Õ…H#ð.]4×é  ÙØ\±h<áÊ^}ÏŽ?qþ·Œh”jûF̳#ˆêË”ÉÄÄTÀ{£ðA;ôN³ÜÚÉ( IóYf|ÂG¥Ð[… ­µ6ëK` —«I~Œû—+-Å0J:‹úÖ¶•7ü³öP#°Òö®bYûéÈ»¯ t%°²Yq­Ð•!u¨ÁV抢î‡ö²xús^Ú“elgu÷z¡¨64Xk»`Ì›ÁÖÛ§wúuñxº7™E{® ¬:×¢’Õ°°J¢x vÁ÷Ð=[†ín­’s®´X¸ù;É&X˕٠ÖË"@’¤’•ÝÈÒjõȤm·áç}ýõƆwEy}heè«âû•ÀCƒwv[ ¼A†,×¶fœÊöŒ!¶+; 뾌¿±¹ A ÍkÕy8bpÌ[#œ/h?þ ¥»U­ž™açßöpOñ¢sÐ/ߥÞ÷›/àa`³gEz ð°b«ë ®¼(ð*í£¶¨Š9ØÔº+¯oðÛX¨ËÂ\†êU0BxgÅy&óå5)wU+G=à¦HYÍƒ¡…Cþò“«÷Z¬OM‡Þ,®U¦çüzòÌf½Î´쉷i7¥Ák˜àш{×¼ßT¼M/ò~ƒ~ˆ‡yýáÁÛ%cÀ’`æØ•B´ þúôN…qÒ“&¡…~wí­Ë͇8ãÞ?ö¹ƒõ:§ƒy͵´LüŸÁ®À‹¥›7+UÆÉP(øÁ$|‰þT˜ÄÒ,NÕY.ÚĶÑÖYùÀÅÀ»ౕ÷1¬<ÌÌq~hð.è ¶“ãQÏh?=Ÿ_ìQŠxâ\L8"âš­2—?šÅ¹“õxÔ££èñþ.K“Ê[ ^]ÌÄôŸ:O¥Àïýƒì±¦V_“ʱ¿­¶RõÅwJ[Ÿ0N8¤©É®µZ¦¦Gô@ÓÏ«>Ä>MLD†6ïÒU\£måáÁ#„Þƒ@ÍôØh–Àõ·Ð‹ïRÖý»ŸÉ§3ƒCEr9üErž–  °Û@×…oü™~±ÎËT=© <7ç?s{ä`ýÞÙ´é|)[•“ ¶õا°:ÛA°°µ6´b›‚÷- Rm `2ße½”x„Þå¾›žîïÃEÃkd}}ºÃEƒÖóˆèÒ²´À–›ý)ÕqQ¯ØÁý¯Î…o|¯°VMÄ=,ËvœÄ…c’ ŒŽü;æ•ôKJ^Ì1OÖ[©d%GU[i¥kéÙÁÓÉ¥Ýhc; ž¸Kׇ¼6Ÿã¨#.gå×ê¤ öá¬ê¼ ˜|ó–™Ak ŸÓø~tK£¦¸Ø4x<ßè~žŸÅà @‡§I*U¸2½X¼É gKäÑÏÀü‹–éŸ!xíb8iä\yOz ðV¼wiÃõˆàÁÿ:nAš÷ùÅà Ší@ï¹¢}/Xé¢ÉN-¢ÃéèÝ«b¤Žèç€3GŠÛy¼–¶Z‰áËq;PUì“À0yÍÙ-=wFI+÷è}ïÒ&ù´fÓèïbšmòüŒR·Ü3=r© ^ƒ¡x¡»Ü}{ðØ{hboÔƒ‹-˜w1èì*ÖËz±ñ‹+è^ÆYyN'¦7è[<Ùìñ!ý­µêîsabû¨ÝpPòù˧)¡E[­™zz‘‡U0©Œç Ì(›ÇA‚í{áR@wqðîéO¡ØrðZMªx¬Ë#‚g™*éæÄã„Ýð?—Jv†56©Æ¬1˜-c«xÁ¡¿]ÿëŽÍ¿.í¸:¢!/Yx)w5ãwcƒåyð{ˆû(;¾˜»ŽÀQÖoýól¡ÞF¸>“Åo`vmuÖÞ@‹ä}Ê»m‚w¬¾Õ»ŸÖ^klÓÇèLÎ†Ûø7Ô_lÙ…"Ú¿b=,Ó“QOz:Ô:6»ÈhãÖaí eªx¦ÙMüLÛbK"~>˜1ï;œ—~ ±ì©eÌ‚¯&1Ž’+¼Ym•žBß dµSÈêH] +±sÃ$Yðèõ"xMðôÀ§ÆÊ‹Ü¹ûé‡,ÿ({ŠmüŸ1§™Ç{á¨þþ¾Ýݲå^ì¾n;:’Ù¿S‰˜ç¨ÙvEBSÐ#¼Š*$±øY^æ΢Ù"G1KO›`Q€Ø)”O¼¦­±IJä·æŽ ?Y‡5ŒýVžRWøL>+Ò5F:€ˆ1;Œ‘k”5ZieÅK"ªwå°«9´ú°1´Ê|ÛG ÀNÚVýã ×0mß‘½., ØFû‚ÇĶo2FÏGôÊvÜaL”•ÚXº" VÉcƒùb ž…à$ø¯ *º1¼¾‡?:Á»ÿbr^–@OLºîŸ£R0Z(†£ZÌ Wk‘êÝ•ÇÛÔÐHm©t=B"ëõ°Ðö®ä@Ó»‚v•"j`à½ßaÚ¦÷ÀŽêfsCb¹ ³kùˆú?Œ)·¨¾BÌ ž|Ô6–QÀÃØÌ{… “ƒf¤^ˆ1«FôŸKS´5¾Äë=N‚´^ÕÄ(`ÉX“Qøo[‡õ‰q‚êß X>ªô›áÎA%ÛŽ¬±8Þ Ýx»=¶çúDÒ±x&±r¤?Bv¿§sÖlõ·ð·àx³³©ðB0«úM±u©Æ»~2ÎRÅn—_± æ®bͨ'Tç4âŠz`¢‘Moë6eñ‹¼Ó£½ë ÜétJŸ+»»ÿØ'xJ›øÅX,…Içªß†ãAÜÀ*¤ïØ‘+ÕI¤à=àx4S®L0Òhðßµ[ã‰éƒ¦‡1ÄÁ;ŠÄð·Á¯Mcç³¹Ìx|:,Kƒì‹ù/‰ –_½XÄ ;Ÿœþì¼TúíîÑuU¹^‚ŸŒ‹ë‹Ä)Lvìn¢DH}“ô»‹­O#D¹¸Ùe(ócÀ ü 9Tþ¨®’¡u¯ ÞpÌÈ)ÂV{å‚®tz¤+Âó]ÿ)âA¦McÖ(Œ›<ÚyÿÌLê"¸g?©ÕZxhÁXØŒT¶÷pàõ­¦‡•‡œ½x<ìü0»ƒ‚ÝWpÞ;A’Ñ8̘-à+»¹¨?Igêÿ6X¸>bÞxÄÛ`ñÿõÒÕõ &5 £Ô’6€Û†µ¶co›D´x³‹ùl¶Šñ•z©T ˜§B;œÅr³Tú%€×' ‹-Ë¥@Ê&¬éå´ÜSð㙕½@âCí˜.­÷§¢qÒÍñ½'Fð€ÄXP&©ƒëÆ3fa W0ˆz¾Ñ;‘3Ãc¶/9æ~5*„h©X€U†„ÜUáq‚ÂÍÛÆ<¼zv;ärœU¾0ð“4Í?jÂf~œF ÂŒ#©Ÿ¦ (Q|ôN÷ÑG„1<¿ÏYLÎÂÊ“#ׇLZ©Ã| À¶É ¶‹…-Xy 0ýò>#ÍÏ}ò ¾Vc¾WéFáMd˜¾ˆŒúôãÝzÃ(eÉ·ÊS°Ûm‚%Szdì>‡Ø–£1O— ·À0+d{Ç®b‹H`¤§3O$UÅܼQvþ]žãŸK¢Ø"5 k=ú dlñcífߪxš±DÑ(®Vgêéã£ËþÁÓÑÎ;iD8ƒ’šñ9Ä’*î²ÝíÄKîy`”¡>óxdɪK;ü%2ÍÒ¥@—'Á³2_ô¬ùm‘fÙ2L—ñ4ÖŒ¾‡'ä£Em›Sƒí®Ž§Þ•$2ùÀoÝR½úñN ^•û€GíD^¸:§ù£î¸UDõÄ®)xÖë?4߸kvf¦ãŒÆx¡ù¼*¢ ˜ËÁg®ûUã#MœtÏø§Š§Fçsíô0S2Â9 ûv±\2$±EŠø"6 ¾dâ”@‘Âl¦Ž -_xmkÚ)Âlu‡›'Ûì6Dì˜~ ÉȆ$¿ÛÅ&#‰fKÚ·Ù¶B1×™Ø"Umþ7Ou?Ï'ÆOº±t ûB¤C7ò…5€‹åR|Lÿ"ýd­ær“i Ó“—òø\íód½?xCôxß]Ä(ûqHµEšú`„ÿD?z}\]¨ 8w£\­€*O‡¥yƒŒê5BÆ“]±5C^s‰'ÿ•Â>S‡æ}H´ŸB/OR¡ Ø%Þwšâ1¨FuΪÂk-ôÚŠEý'&h_x @•ð ø èfà\ÜÂ.^­m˜èö^¸Àœ ï˜¥Ù8þ‡DæéŽž˜0:_È›dûV?ß‹IXS؆¬ºX¥ LÄÎŽJÒHfðð·…™ýÏ' Øe­Öð¬5“ª›ˆê?ƾq3õúò sz+Ê/< ªMÅ0Y†æÝÆjÚ#yŠŸ r¿g„1¦0¨ãŒBÊ–AôºqÕÙs;ƒÌ¾ŠmQ×±Q &>ÿxâæzà["âÔT‡Ù& îÑù‘÷~ïŸêc¡øÐ]ð¢X/+mu-³¯X‘æXsÉ%l°÷­—¾®/ºÅ.õ\8(_×T1÷„0£‘`]Œ3`›ü ôKië6ˆí x¹"’ªÔ”ÍMd›6†UoÑ̓j“÷»à­GúFš>xm'L’áø.^-ƒö?zƒ2.l2ÛÉ©¢Ÿ'ÉðÐÈŠg7³,²&ò×Uv@çIg>B14÷ÉäD,>Ê(Æãî± ”çÙiZd =Û5Š}Y—r\l±Tݶ*UÒEÜìˆØŒ”W\Ý’Ÿƒù. *ºzŒ é…­ÚýøËîâ©dÎÀ36&ÍçyºmºSÀšf†ü,U5ÏÞ¯%•ÔL£*µ@Õ<¿È`³êóLðì¥Ow0 ÎÁ»²k¾ü>Á | Gÿ£ì)Ó×í7Ç{=9P¼Ë¡ŠZE6ÓÙõZ'Ì#3¬äÒ­¼Ñk­d*VŠO¡yw5£‘hj4.>óe¬¤Ï0w Ø+¦Ø¾ «/ò‹"X,ØÌ Ýïã_xz¤Ãö<‰¨xÖã6³ wa+·ÆOgH"…áHM9yL&WÍäP¾`­¼uÞ8¼ Ûb2Y;¸êê1YÈ?ñD ;="Ãt(¿}Ô„ 0ÅvÆfçYàÙ7¶;%ßó6<¥vÞ¸;Å€ÂØ²îĽªï3ÌùŸcïo Ö±69ncdð)ëæ¯ pscÈ…ôžŽ%Rgùy¼¹ò¥«Y°ú°áYžn«CKù7蛑kðh.wpß«` ÈðR±¸½­Wk|rM<{,n£ Þîe.ûõ0t¦0Xq}<ǃ{=)ÜÄ·nî2#JŽ $kˆ]±…«à_äVtZrɰ%¨¸{€¹"‘ŒzŠÕ|sê7V#€»>ËS+–Ùã˜RÖÉÓ­×j¬³CËpÏÖ…æËJÛËͺ;ÆiÇúã¯A)sJ„{ñ{ ±çgÿ‹’'‘yâzÆvÈyÑ/˜ëŠ­Õè°ëŒR_ÆÚ)Œ¾嬿ŸŠG¤ ÉáñÕZõe³ÞáîY<-3xK.¸_¡[eX¸³JvB ¼h áÿó°WP‘¶K0ÛÌ»±B·¯4"ôW½Í¼>'xJ.X'»rM÷Œ‘]Ÿñ€{œWñû·ó¦øüþDò¼ù—k"5mþ¾Î¾ˆºgØà'îN.xu­¡9QÄä=Þζz>½´”Ëf¿;uú,, âoôn*¼|£PÄB cr‘æ нê³ÞWÉt Á²¤†hãÅ õ’˵îm‹O¹VÍGïž’ƒ$3·“, ºBÎlWuì:ÍÜvÝh|WÕB¸ lÔƒmÁ±Hò¥t:’+øÍƒ\0Ú%‹¨â££È…ÄN{–qƒ«½+ÓËO~ëløyL†¬´èÌf}q»PF²iÅÈŒçàE¼« <í÷®¿âõn4<¢lÜY62÷âûï7_ðHà‘VÞÜ­]p’{þ–ìçC{Œ—O*Èð2õ²<©˜à¡a^»ÀK…éc®­Ï?ã×&b°YJHa–89ŠÙ>â)äúóØË–™^C+%´˜ÏdyNc”ƒÕ¶ñóÚý³¢žâ]mrðÚ+«M;ÕV7Ö/DVV__m4«Í EJÔøÝoS¼Ó|ÿÄÊúÂírõ0ï`™eˆÛ®ÆàÍ~?†ín«†n-r h•D2~þy£±íý'é&<»*¦‡à½~Å/à)€ó¾¿±®Þ]õÞÙßç‡gM<÷Ëg|þ(Ç=u9°lc—¡¢(*ÔÉ] Œ…æÛÒC—-5ANã‘6šsÔÀkÚ-Þàk X£Œ2&GÕ—ò[[x@ylæè¯“Èr‡5™áb›­T’Ø#}é-x ‚·à±2Ç•¡+Þ¶wƒ§<מ·KaYF%)§î Š5¬ðÒŽÁrÂGØí§ >ßÄù™:]Æ\¨JrÚzb•ucA,‘Ÿz9óæ}ꩨð ㊿ÿ@ lo·Xv Ö˜Á‚{ò⯽í%XŠïlé´rævY×RÏ2—uÅoWîª Þcж¸øPÁÉ;Ü-ž¢´ DvyÜvãYüÕ@Ù3:°heAÜ«vÁRDÎg0\<¿cE„ƒ2Kž™8 b¼Š§­™Í%ºµ]£W/ÕªÉçÇ%Èý$ËÒc‰›U|àÑ×WÛÖÊ[Õ…¾Kï\¾ÇÀó¢¹÷hàÝ…áóÙíÿFyr 9rYÔ_ÇÏCØ×(?8^_|‹u£ØÎ³¢½‹cá`@¿¦ÿ?(ŽŠÂ‚È%ýöZÅ Ã +_ÖGÁ©xjh¥p500°¢¼¾~‡w…û¶ž÷ÌãeIÉbÔ}RÞs »â‡`$ù*X°t#žQû¿I;?í^îz7Š¥¦ŒyüÚw¸èDT–Ft‘ÄÆÌö.—“³,Ëb ÆK3éð }å/¿9$g•‹K%V¦QUX§Qcv.¯é“âY<-‘¦àý 4†Ôg]DY½Ò|Ùûj#²¿N,ýÀC".ì;îa÷ÚÏv”wç±ç¿ÂnÎlâŒ*\Ñ*aïØòFI^õ‰ãÃñƒÇBÅ×>Ѿm¨û'Ð?£±“¬ÃŽ/Fë¶X?ÂÍÕ0ˆí›€§2›F ¬WδõÎòÎ)– Ú¨›.}HÐMUizÕ§E¢¬{Ûƒ``<Ñ7÷b?àa$¹··å?ä]–`BýŠýÁÛã×ØÍ CÏ"튘_XÕ^ 0ËÏíÝ‹¿ö‰85쑃Az"S²MÆŽJ`—ü¼ö“Ú‡-š^ZDú°c!åÔȬ¨„VúÖíµêΉö:ÝÙ*ís×1BR²ŠÔÐãNJvkt;°lìÛÞΨhRÁ›oÙÎ…0`”×í™ÿœj©#ZsgŸC 3¤L-d3|ƒr™''ð°“|§rÈ/ê?¸eÄŒAXé2×¶-dßx{Žý‚×V±–;bHó¶Ùö^Ï9bšËý_ÀWݲÑœ<Àx5ûÊ{;ì!37X½úd2î s`¯§DŸ›D1¨afôfyQ) Ê®m6iãÖïÂÝ.>¿ Žed uª¸µ/ <Ú<9†Œ÷30ïšýâpÏÜrïuvó–£urPúšõ¶nãŠOF…ð÷‘D³ Ž˜kë{Mã©÷<8{âUÈ®%«XÅ çç'²˜5 þ,o<>ÄÀçºöèÈ}ðl‰x œA¹ïjB±•¤ìÏÿqHªGNPRawßræ_}ŤT¬ç¤nÄå·„þ©ð_Ë’)%ü|a° _'b¬/ÕVܳ_ГØü·SØbœ¬ Àï€X¦KÜ,2†8¥/<Iö‰~tÏHp~ð<Žm¹FòÁéÞk5¶é€XL˜œî;Ú¿¹•ÕŸÂþ« ‹ob­Ï(Ë "#zx·RžÄ[~|†Fo0ŠÆ{1É‚vJ¼fŠùÞX^•ýÂÄ–‡ ŒsjÆ××:vD <3ö‹#€àÙq±±wxñ³Èz|HA³Ñ{gÝöê8¸¼¡|û¯¦f–ž¿žÃ†/ä_“¯O"CÃ8†£˜qÙbvãÍr‹~L«­{éôÛ ¶k¬åhg9Ÿ}+«Î›;ë/<åˆmÏ©Šÿô’duClvÞÕ×q÷ ÄV´Ã/ü÷ìQ…Ö¸åÇmË‚þÉdÒ3M–ZºòóçýãSñ³¡Åyp3b¬ƒ—Á\ÇŒ2Ì=Ö+ÉÙó—Þú,{»†Û]©¨Ö@^™ƒÖ:¿™Þ9Ï_ x˜%Õ´V¼€-ÝûžgðÙ&Ì•7h×Ýqõoð›o¦m‰Ä3Kë°rŠze].IåOD”uràų£ •oT¦X²ÙUX‡žø¨,©šoÅ#£Â“)#Š\UÀÍÈc'‚+¶å\HXD5ƒupÍí>óü¥€wå2m ‚ zMõù1þ-È=@ÈVÛ˦Ù/ˆ-PÞ§Z™ß|ûß[0òP¤nGzŠƒM•9¦Ã)X]¯á¡v<]'ÇZNæ9¶ê{Iš1ùÛ<úŽåÌHÂßf¹Û÷± «MÁH¡ ¶©/lå­ Ñ¶šÉØú–ï1$X4QÌœEàîÊÛ ž‹ß|+[v?ËZA;¯Ì¨{¶‹·køz$Ô¯×o|¶õI5. :h$kØG«ÇÇ^#@›–Í%Á`Ç?å¸aº ¨K#ÀéLnÜ~à¡»V:h¿‘ð 먪¯áŽ^Ìáf ²»ŽDÉò[?ÈÖšÏX0§€Ûf7Ž'†S ËôuÜî¨Îs‘ÒÅëæïcV”bN(ÿÅÉ8šq–ååó‰§b1GÔÎY,ªFƆï®Ù* >}ë#ÇÃÜ´…­ _üTÔmºxGåœQ«7ówó,; 앟ÏÇéÁ‡ºe4’Á*žÁÎI·Y2^}Yç_R˜uÀ=ËÁ`i¶µhö¾ðÚy¬Éî»ÞœCø 5åCªý‰ P<&åø«M ­GÑÈ%xÊ¢éÊø'‰8¬Ä¼V½5|6Y¿½x æ9 f±óíyÖqJ_«Q¥S/Òç¾ÑþXg¾ò?Ô—Þ*‚{VM ‡K‹£ÐçZyö‰‹Vço6©˜êÓAz‘Úú@‰ß:üŒ6hH=ÁwB! bKNdÕ/c¶ÀЭ/Eå'¤š6Åwaã½ïy4ê7Ø]ëáÛ»€§* &=î³¢jßàu×OÔ-ŒöM®åS,ZçØðúh[ãnUVc$x6•bä ·øM9ð'|Z¹¯,êá=Þh*3ç÷L˜ÿÚ³OüÕ;¥7jµêù™¥R± UÀì ‡ÛY”ØŸ±wÚÄÒø«•H(}{´ª‘†«a¯ÉrB`Ë4ðPlE–ÝHúDIŒ–¸‡©n<-؉¯} ˜žÈfV¢àš¨û+/²b>–”G{E×¾›LƼ*í040 «YY,n½ÎG¢?¥OÓÕ žþ8ÀkƒWÛEÙžRQ;=y€Â aÜ»ÜK‡,´EÞKi0#N ÇK$IóÃ2ò©8ýꯂïèˆgTFbø©RúU'Sé·ÐŠ»YÔiõƒ™1,;ÈVÎPpÏÀlÄÓÚNH¹Ëêú¹ÖÔlEgíw™à!w#,ý°Èˆ“°€Âá ³]˜áÌ‘0 =}Õù„\/þ~"XßÚ4k…6•ŒË£,z‡ÕAãÍ$õ29—î¼ÅJ€0)ì¼ò°%AI/°·@ó®>JoÞ ­j3Œ™ —Û^ú— 3ÚYÿ%€×VÚðy'ùí5óÌ-]ំUëϪ¸×âxø»n¶½0_:`{‹o£n‡§4$ @sä*f§ÆûÂöÈÍgÊŒ9 ×*Õj*¾R¸$]¦¼Py&½tlG$Ü¡wØ2¹’Û>ƇxJÙ›Ê:×Ç mu/}*@9¨^óÚýXÜÉ©² ‡Ô å  ‘Lì|ÚñzSl;¡œÚÿ ·Ì’BWðWA æ5íO¢Ö³>^³à]ñ6•?åùWšP"‡‡šOôÃeàÝûÐÑ÷ÌÍ£*Žc/Î/¤CóÖ•‡Éž£+¶ÕXÔñŒh6õÊbiÆQ+˜%‹¯e¢‚ôCcnlL%¿Nº±†åzœÜZäÞ -¿SÀðÞÌf–>AêПà5³3¦Ø6õÈê]}Я‰4¨÷ulÂÂÁ[§wïRŸ«é~xð:´Ì Oñ àú›³¥ðéŽÇF!£OZÉ'ö.R[üž¹ôÞ·3ü«èþ·LNœŒ§.m<æ9(Kó>“¢Æs صjÅ!)æ,æ¯fn+ ï”´¹\*¡ØVϧh}ñàÃïÝÐWšxí@¤Á:±Œª@ï4èÐ*u=’ùðR@™y›ãÎþÃØq,+À2ú–ÕÒ›ƒgÌúoµ ¡ØYdãÑÀkÃFm3밶ǯ9«=xÏÛ\grãÎaŠ-­Lõ‡Yb!;KB^V·û¨Áí#aS]¤þõGb2ØïÙòd$u¶·á¾¬p<^.me«-$[,e±Ï5È‚²Ù<Ý àEî€Øò§aÏÆ@tèÚ#€ÇBR&xª†ÕòÝ–J"F6Ç7m€>À=“óãæ;É…]Vy?Òëmk^ˆ¨tâàÏÛ/òHà]úUT6xÄÑ“2ŠÙ¼àY#á¬f}ε7v£fWJs}avóïCÂ'·ƒÎsK½±ø ;e0mÀóÍð[×¶>óÎt†ÖA<ެ!§Ox¹Px³R¡÷¾>C/Ó±ÝcÑb iÉ.x+(¶°Z× ;=*xí ´9œJJ<%€)HFL3«H‚ódn…8I¦ö,R§¬T<Úp<ã3–¸ãˆÎ}î˜ ¤<õŒ†i“bTàD·Q«kø$HëV¹Â¦ó°Qa_Ìß¼ÆaJÒøñNþ&: ­ã#d“èxëxíÇ^§y‰¶áÓ€™í~ÿƒ†Ô y•¨âTœ×ѱTZCló™=kF­xBѽ.d#ýY,^ñ‹1÷¨Ü}Ê=vTÆdn–TÊç±Bå[écøqÎlê7¯±¢–tˆ^ÏÖî'±éã[¿(L¹½Kû‚§¬vÁ{¤=¯ÓÔé}l½ë˜ç¤QÄWE–¤·ßœ˜½Â'&î½òÈÀ×JÖ;äÔžçz.†MB–ížr”;"X)ž#G7c ½3C7é·¾ž'YEñ`E¢ýGϦŽwnÜ„7}Ãv|†àé&xMÚ@;¯vÞ¼÷™¶}èR‚ö]¶³!k‚:”‡Ì•‡|PÂ.?°_ÂX‘Í;Þ };ÐwÇTÂ̬°óè1Ø£O®÷ èØ(&-€Ú=}2N¤ |¢Ûí!£*9sëÅÒÍ-Û0kôãx<ÎóWÉþ[ôÕ/y<¬Úk%f,@oµ­x¥I›Þ§6𼫞~²M;Ù«~-eÂèL3d ‡Ñ÷Dìd4$;ÒÊ„wöŽè…Š]¹µÀùo‘^ðÀužb1sðq“3ªyXú ‡Þ,'À¹@7ãMVµ·˜+¨kµÚ¹Í6RõxYíÏh2 bûö/‰€¿sƒ(ïÞ3ÁkÐ6ú¶Ÿb›GžŽä (¶í^Tö u5h‹uNm6jBüûZs9•?…{^œ™Ï>[y/ð^ú£î;\ï¡ôê2!ñ)QØ^ ©àcü®Öž aMÚTŒ¹g—R꿸žyê#ñµR«‚•r£È8Ááèä %Ì·@8MðëBÓÅÛR¯<%ÕËÁsµ ÞŽ¾ÕûïõOaWÊØ¥Q9`\-'$¼°¹Xy¨!¶Y#qs/èI&º]š=Û#u‚7#óþž¶†‡Q dɧÀ1Áë~VÕ·¹DÿlƒÖo,hßÅN"°Ýå‘Tï<æ‡fµŸP¤AJL3y\'os¨a€§zõˆP½+^×ëüIil´½ëúÐCƒG1’ìCæIãóc“eÃR±ª“,¢äè@PB±M̼Ïí ^èFÁº½-_ßb <¨œêI³ÔWžÎ#41ËG’F4« Æ^Ø‘°3CÓØQ]5†]odûZV¦HðÉó2 êö»y­ŒyµK7ŠŸý³ß,•¶+•ß‹§C!ðk+Sìqð3j•ä·RÇñ-7K´dmëC¼«2m“šä±‡Ý3 þ¨ªDc˜â/‰[+<8h ¶ªX‰º‡§ekÂSÃ{&«LÖÔ&-Ñí>àñš‡2>0ÉAïæ_Ëøcq·\À HðIT׋gëØ/é»Iì8…TµÚTôk(sk6/ÑkwS ¶[ˆcuöüL?ð`š=oïÑ h¿àu‚óš†\HÝÕäâŒ(ÇÒ[þ „ç@lW̧…à‰½Z‘°ó8W¨h¶Hé/WȰÎfÇäàU¿6~WžáýùH,^œgb‹æx¸k•d*ýå3žv]×õZ¶»ã¬Sp7;7ЦØê.ºbûëOmW”G‰íTT°Òøæ§Þ~¶òP±~ÕAu9wäÉé½Às|¥Û†º u ‡½ÇÊI$RrPVç 3ÓÇÔ~† wc©ß0¬ÂÎ/ŽTª-Ú^£wÎ}'ŸÏ–_Œcí#,Ä3eŒ,/»Ý5kÂ.ªÚ>Çåv€HéÀCæàN7ªäC÷LJ¯ñþFGqdà©“§H<ÚEøp`OðüNB"¾ò”ŽÑGð?ô^-¢ƒÈ¹¦GCùŒQ!ÊÁ¬–ñÇcƒyM_üÁkSXêsð„uÈÒº«xþýêˆ.¯cÕÞ<`úgú‹ð®ô°J½^äáÁƒÇ:¦ˆQÖ\Ab¨¹Öy ¹åŸÂŒþ\é®,éОîYÈIˆÅÌšÁ-Sl{í뼦Á:‹‡‚X¼2•ˆÉ<„@„(|­8ðêb>»UF&®6Š›JžE2_ñ¿Èn·z6u|ñ*ŠmRi¥ÃK7,¹ÕOÒŒ¼žsˆ+ð¿G¯³ b;Ž}”ÇÞBœ¥;øEh.¶ <º{ñûÓ{gëNq‹9\Þ™Îr‰îO„í.D‚¿v ƒ²ÁÕú+4ˆ´ IDATØ1ù9ÀÍ8>›JÎ^üy(W ‡ åÉ{åä 7ûÖÒl•+¼'›ðYúô^à½k/òà!;Z;hoWë±ÍIëQ–à©4Uˆx„S ñ …~¡; µî;´fæŸuÉœÑP,ªëŸ¡’e‰@Ȩ å…¬¼Ûï¹^­Á‹¿É(1ºÌ(WQ€S3¹CÕWÁÚÛ/x^¯ßÆ~Ác<ý“(ž×Ï«hèyxô“ÊăyRPrtœÚ›8dÿD%ƈá*è&5[o4eÔwÀMÐjnrâ$%F†yî ,"‡?jˆï͹°d¹T¸Y®$gÃ!l]=…Ô[‹W¾w‹¾ê¦0ÉŽÓ º)¶Ó{‚¾ûhàÑ÷AÛè» ØyV5_#h/GCLl§‰Ê“{Éþ3vðX44=¹Âp®“95ãb[EêlKï¯$`PFÒõï Ø¾Ç²¼oYÛ¤bNøeýeÛ¬{ü¹¡G¬ƒÉ‡oí¼9MµÏÓâÐp8’A¢ÙÊ#÷‰+Ú½â¤g’íÕ(ã-në5#ÔâÏÍÄVtïÌ¢´ÉD*Ìå@lnØóÅÒÍÛå[’JÔvÄÍXqÍgýØ ýÒñR·55¯ájºˆ ž>Ä…ÕÄc½èwh»oðTzÿ·ñÙkÅOܸá/l¼-¡O8\¸1šÁÐtö쟨ÄÚØDÆ¡0zÎÞxîBøÔ[ãx†‡5±D,5°ð5Ú,-Ó›·Ÿ÷: ;‘H×C×_ËÖ¾{å¢ç¦JK ¿Ý)uÁ»ô2½ónÛõ*ûór;ÒÚƒC–hi¬7Ⱥзçèþö¼!Úv“ßÑ=sGQadh|¼èÕ áü¼ŠYȬé¢1öîèà[‡ž±´mßã3ù¾5âíƒÅ8¼kÉM={ÐÛÐü ¦IÄǽpeû“Ê´ä£äð¹ôØ"ØËXG¯Xs{åBƒ¾—zyíÀ«+J£I¥¡¹§x AV¡;ƾÀ—¥ƒáoì¶m[9+Œß2ü}‰ˆZ…ñ,>a;"„cdÏ!GìïÁBǃÙ5ÓáíѶxƘ‰ÆÜcÐOÛµˆä cc9p¾æ>@ j°óTŠº@È«ê3[XôJÑá`m ì”—¼úý©z·­¼ze¥ÙO´#íKŽO»ðÚ`‚߇mC¶ÍÖŸ0ɼZ"¬»à¡Ý cîåSÎS8®¯_4w#‡Øú'ÄãcęވÀù°¯5Šmy2‡sàN ˆw…5›_Ðü®8æëå²ÚÚäT*•^ZºÁù»à=× « zùo]ÙhG._Ù0t„ ^ÓL˜ÿÜà ¡{f-)líáÅ y ¶aÒÞ6Ëê9æ2˜þ*ÙÏð_³¿ [iÂ3ŠãokÈ’mßóx$;NÁ÷>͈ÿ=,2Ë-Ìûþä÷¾L×ZU%Ƭ­‹1…Q('?ˆ§5_RÛÎg%’~៲•÷. |Û;Ý^¿ºÑý¥[Pz¨¯aÂg;S³)p‘ƒ,GéÌÞš±\ör»ÆÝct„UøJËnÕv³ó@E£Xz$i¬¨Ý•7DTei w}^ûX©÷ ðk'£ÑªŠâåyŸ?÷ä9«Ì³ì0Rx.·iç!x´AÎf˜ ŠàÝé¯Ñ/}lx‘>àÁ÷YÖ~О6!¸Ãxˆá;öòA™Uk»V°ï°žooEÇ÷ÄÁ‹[5ÄΕ矈{0-œÁ¨ëMÞòþ,’û`q7Ví¥¨Y$—Wà¹WWãžs¡Ü¼¶6ÐŽ{fÔ‹nšàýjƒê„®+xC«zäÊã·¡N0÷š³¡7hÛHp, ô©–ÝèŠ )YæM‘8DÇùß:{lÄú»GaHýRëÝØ°ØÏ(ˆC¡|FÓ$g.^¤ttoOæN‚^å < ( ]ÍjÕÞÃkýÒ—´ñ4m˜à]q€§?*x8Ø >22À>$ ÀâiOœ±@OG¸¬ DÓ&’ûÂŽxb»ÂûÊš^ãïÞ§^"þ÷Üììs’ca`áOõbÔú@òëé‹Ë…ëåÉhÌ3Êe°bâÜ1$™£$p+ûÞ]¡d&Êè—\ ºÑ F´xÞ)7ëL‰Ü†_æúÏ›X„删 y×…¨p,]c–°óÄßµ¿ÊÅ4N6zܳ iõû¢îøXÐ)·*ñcò^z Ê#ˆ­äýãÄ-…ïDŽ“IfÍŸL¥Fü¯2=c’ééÊSÆžw¹<ï#‚ÇÅvÞL56¾y9ŠÁÎ Í“¢Qád}‰åªDH'¹ìo¿Á7kÆßΕ‡Q¼9ÙQ¢&K¾ìÜÄ‹ ¶Œ{uOÉ:Û?àßlî'‚LlcHf‹eö•jÏäxWôï}ÁÌÞ}Dð:(¶F/n¤0ó©"‰ Ã6ø@KHLÅzd ĶR=½7hæpŠ­1_Åü{w±5y¿$"ùü±X\ÀN"sdXðø¾vá…‹t»Oð æTM›?ŸÍÍôñÙøÊ‹ñ-—à½Þ z ð†7x«zà /?´¶%½/º=X#—#š'‰ÊCüôÌç_Á© ,¨˜Ý(Œ>_R9žÚ<ÿ„5–ØîL“bo†Þ!&×õ†øªXv™ð µ~J–diNô³záæƒ ü]Vw%‘Ä7»5ÐȦâЕ×x׆Lð6à]¡ïï¼@ð:¡\6“A¢+Î4T`à…*¬<ï:NŸ.à òÞà‘Ñà‰œ,•ö¦Ia ÊÇÄàw´*ºbž1,ÒÐð¹Õ®EQíÔ‹ñÔÅVóUjÕ$%-Y“‹¼¾Ž< #ÃeÝ î×½O¯èO]xaFr¤?x÷'bÃÃý“ý¬&4Týâ-$Av­á$ä?±º ¬ìÝÁQÇ{pÀÓ=˜£DÕÆ‚£•Ÿ'v4øï /úƉgk['H¶,húäT"–>Ž÷Þìt,ðÖ‡^_‰\V?À»‡Ñhxï¶#<(u‡zõ§.=·?÷¬x,ÝàÁŠZÙ§i§b Á$7ÂOÏž˜£7/wÜMÆÒVïV¿ùvÇHÙ¶y› Í2’û‹-ŒqNÄ>£`6Á·Çò¥}Š{ ŸÕ«Õd«[Ë8¾ù|ÁO\ž“í¡gÏ’0Š-vJ*x5â]9|x_Y¤ù².Pµx—=i·Oè_Ý_` Ï5 @жYÿ¸|2Œ¹½ǧ+œ@ŽFW ìŒEÉFÖ%üáÞàyÂ¥îýM¬ÌÚ’ÞìF ,Kÿ)t‰šÉˆ=©xz}nîæ\„o2Z9*ðêVq¥öž„í;_ê„óù«èžÍΤ;KEÇìÖ/¼à5À¨îjƒQøò¯MIÐ+tÇØ·7M8í«/ñðTÖwH\'¤FmRUytŸñCÛýM)1W^xntbå`è¤$a9 à|!¥ãAîžµf»F’O<•Lœ=Ìå³÷'‘63LKÛÛ[µ.erŸQã?îò.Ô"—é«}.Ü÷Ê“¸”2?˾‚E^lwŒ<‡é³ ¼äŠìkbÝßúŽ‘²íþ¦Ml½ýêMÙð°†3>ÖÑ;´œ#Ó¿ú‡JëVèàÃ4 2*çó°ñ%ã3 ò¤Oñ¬wÛÆîã òû6’ïÁÓTßx”S:›x)Êfð OoC`Bزʦ÷žúA»Øšà½PÛ<‘¿#úØfç±,s™=èž–Åq4Fç5ðƒY1¸JÈ䓉écäæ[´ýwy陑 Åd•úr±Ø;Ëã ò;ÀëwNÄŒäññrú̳ì6‰!ö¯ú]ÿ7WĶáá ¶#åZ÷=ÌØçA3K½§{ÉV´SIlF’Ë^ÕL¯<¼xÅ~Á»E–uÅ,qOp…q‰<Å·¿MÐ%sûÏÃ.>Ö-æ“m¹ÏPE‘°ZÛyÕw8î‘GƒjV Ò°údê`X–²ê)·sÁo+¿˜ˆolõòá¯dë Þ{ Ô˜úáãÏÏ“’$pÇÑЗɛ|z:9rÄv4OÔSövÞ™î{¬z­â’/“yäšÆÃ É/mg›#Úé ø|x4«Y@Œà‰ÿ­Òk„üöß?aIXü±µU©œi)‚¦öXÀëÜë Øæ3sãö¨Æ×2:àiRQl{ÃQAÞ<éJ;Áër6õ^®j~4ïdM´Œ8q25Ší»™{$ÒUëAÀÒ[ÿ{ $‡CRÖ /êÐÇ1öêû“Q³™ ‘`ôn˾ˆö&q¹¦‰¡+$É–Ý<‡Øš¯ríxdKk—a»Ë"w£0*Ív›p¿Í>FaËO*•áTª/Ãï/<´xù•(#®Ó°a!n9y 5¯p ”a,Öísïüûp¸g;ÁÛzÁƒÌ$¬ä>Ÿßsù!ñüU°FãçX ÷¸ åÁQ;ò-åçÿG’b- °ó5mÍîœç/¼òz.di¾ñX| ¶Ÿ¼Ä&ÿ&Àl9£o…}½È{ƒ¶Ÿ=›îµòðð‡5Xöué!q³È7–€ûPïþÿ¼½}p[ו'xßH–h a¯Z‘Ó¸ ŒÅ¡äî(Ž3- Ôn :%/óC춤êɬQ2 ®í­j«)é=SŒ˜ª™naÐ,8ã)ÐÙ?¢²Æ [Õ–‰³Q&šn«á)& t`)n'›` }„àÝ=ç>|>€â©äVI$É÷ñ{÷ÜóqÏù€ÝvÜì×”yo&{þøê;%@°#á4ˆ-Øy5ºñj ´‹­Ü3ìêÁ×å‘?>æ·éÅ#D—ê=KRoÏßåúsê%$Ø4ÈHóà^8îÀdóŒÒ8Áën{qû|“¼WÒ™ºÂÐZèøÄÀ{èˆîi.Ô+Š=v!l÷ù_' ͹ahË–çšÐ{¼Ôf$7Mâ–ºþ@]#`‘ò!‰‘68·™cÚ¶ŸüNwŽs:‘ÌÌ‚\˜#ß›²Úãñ~åà•À”o@j…Ù›jÛˆ7§¹¼r«XˆÖq°Ml›€[{›žHoÆ='×;Я¸ðþ½€"Mt·^ Øbó„e³ØPEÃŒ4Œ:Lqú€û«·?¼‘±YçdžF¶ö$v Þ£4ØQF0Ÿ"ax嬙291ÇDÉÍÓÉr»{ºl>ö¬´F3ôi‡RêßçFõvb™áÝnÐI§/’™ô$&ãa.ϤÏMr8o†œýж–)ï)Ä6ù …Q%_hTéóäÍŠË29³iU&;¯vžÃ~h>\OæW8Ÿ%aK¶šÍÑ(n|l‰¨zXÛ.Ñ }¶f^x<·¨˜Zlèì/F˰7Õ'>·30k%áŒì1f¯•â3€MõÀbÇ&^ê0)÷ïævÁC£”ÂN\0p÷O?+IáÉ kâ@XꮄQE·Å0 m—¨ßl’6ÿKæ'âm˜Íã72”D°›Á ;wbøS®¹õ ¿€Ù>ˆl"¾bÙûÜÑ?Fe¡ôÿ©kÛ2=ßν‡ÖާWByçwž|C˜ps«‚ ¼àf&ß Jâëízæ#[8dcÏj®y‰FDŠkUr¦ºþ€Mx@É=Š»gfF Rߊ`fb›ö¹lã°ó,è|²´òã ù ¹‘ +¹J#àt—.·ƒWð:!˜c¶s;´mlÞ&íìa$"g¦@åqõžÆ`¾ð¶9I ylñÔtƒg”oTjÓ °¤;Œœ X´×¶=Ïå‘:>íÅp Øy‘Öi¾Í;»Kït‚·Ü¼m‹-Æóî¥Ç ­ìK8ŽÜ°NV_Ÿp¦àëª<ˆÇWÛ3`±>ð®ÖU»ÁëÂ+bO~ \ŒÅ®¬pÕ¡æÚ«Çm5OÀ鈗ؔ<ÖØnï~µ<±c"6Áë94i[„OOž:ÁèP˜ç Ç9âñ{ÊT”;”Ò[%q·—äÕ\óžëÇÚv–7OPz<°¹Åáò˧¼½HôÜl,^ÑU‚?±!w/ý½ÞÎŒ‹ëO*üžçX@¤%̹Ÿ{‚W~òà|`lÆÌþ)Á³_Ù§tb= gSžê¨§£·ù–ã_¶Í<åD„KÊêC­‹œÁ«œ²ÜµÃ‰æˆ„Yã½€#– 7rŒ†,7ðäñi?šË°"‚ØŠAì‚–¬¿6z¿Ù:„w}à‰½~‹ÒRzÜë1ÚI[z+?íg-uO“ýy?ص)V)€Þ‡Ø~¨cÔ—®”I°Õ –³ñHš«´¼“Áð8Ïr¸É)¦0(¥í9ÉE±RlÏõ¶ ‚ƒ÷̼…ºõdf1Ol}¿¢¬Ü6åŽØ…Çr ¨Ç—Úž¡¾ÝÑžÒžjH„5ÑEõoAv®ý…yæùãæêž2(Ù1ã(³ë‘»fžý?ßcJ2­äh™hJ«ä[çÞráóxt ëq/=ðd×­,ÄBà=åöŒ`ð$dˆWyÁœB‰ÂÃ{möÆï[b›R¹ÚˆzÜsºš¡B39Úú æ‘YÅQ«2É0ʃ†ýQ °XP¨ÒÇs1p–^mxgeÀ+ÞÉÛl6+OªRrfPÿ´Ž¦\ºó xRï -àUŇ´ÄrÎX=Òjì£<(4ü2›W±¦n1\m—ø/„ ¾j/ð@ng8£êÖÖ„±¡¼)h"QéLŒ4ŽaR GM`XÞO\nqqU‰«,®Ý-ë_Äy_µ¾X–ÖcƒɪãxòçÏiêJÐ<úܳÅX+º7í zf rÎýʇ-n1MÃÚv‰ Ê¡ö«jrõ@ fÃÈécµKƒ‘™Œ×ÐQ7¹QÛrFä܇}·Nyœ‹öXüÞqÕÃÉĶ\Ý}˜åIÉÖVEëÛso¯ÉÖ‹7N²tê—6#¹x>ùécç„uÄv@Èü*©Û}ôEö幬ÇãÐ÷açY„±0ô}€× päÀ¯5 Â|#]aý•õ:o8ðËðRyNÀÖ06…Äf|…ö\ ÃÊ?¢•Ê)‘^¾š¬_G*‹7ËÕÏ7À{ótÁ;_”]ókè&êà€6#y3ðÒã>LJÆ–î*ጰŒ.Εú›y_j»„2óxÚFñÔ³øL/a#Œnc2d ñœÇÈ|ÿlö´»±éÍnˆó¼b +Ûg”&âTÎ6#:EÀf®\µVYçùé·N—©éüÇsE8¿CéÛ‚®Lw^ œ›ØLXývq­aÄ=Æ€²}ÀªXú®¶K`¼À8~š*X[„}l~v ¶EC¡LÆçvÛ¢* ØúÙ‘=Œ”‹%Ožn:™CðθðèÓoýqÀ£€§x&ˆ-vÚáÌK½Ånç(Ƕ*`QÀÒGÒl&ò·ÛØ“t³am»„Ò͵#sU x ÿ±f@¿ …ÃÈ6à\ÿòO‡Þnü%Üé¬9Äc‹ÈËØŒyjŸGdpP¬%|ô:€WT7×o+Óv^Ê–o±¨Š=„éq®¹KðÌ žËçÌý¸g_jm&È»[p6n §Øâà›ÝJHk¯¿rBà{‡æ#ŸÜ®ÞÛo‡‹¥/ý¸xaå™ÿŠm0jñ8}”ËÖƒ¡ŸÑ»eQ"MðôÕ/ €w±\škïn`´€‡Fig– $!²µ= ççØG^x|£®îÑv%ùóÍ#M±í žs{ÕÑ^Áø:öKŠd2È/tþ8¶GÙBªýR6G§§Åm¸gŸQ–F[m€7[ýíxDטn¦4$tofª”2S¯€5é‚íÐ|CØHÃÕveÙ켪¶³Ä0æ/¶:ó+5£me/Oy$¿ˆd¦ÆNùƒ´Ó=»£Ooð\¬}5‚'Ò›ùmƒwŸ>tÚ_dª œ ³Å€y+ÊF‚¯9á웥]kO‰‘t\uS±mcÌp1c Y˜É ÉÒ?›Ù£¼Á02‚ÍI±y°ÓyˆÛ`1Ð{°`4¸ ¼³íàÉMðÄ&xZãy=À“1«þaÔöüøQÁü¤¦3Q¯Hñ– ã¨öt„´áŸU÷wƒ·é̳I½¦ºžèfÒS>“ â,ü¸RçcâëoþÛ”Ñét,Ä?×¢â ÔêþÙ¬yíà]¯ƒ C™yçw5 Ñv–õŒêõöÙŽ:}ìYf°8ñúòÎH²u2s¨aèõ ä6‘m>Þ·‹QëGJaUR¥{:àdbËZ‘;¯™÷™ðNŸ—Ï´Àc]oãI€'™@l™ÂhÝ+£“ÐÄêkºµ¶+=`Ë”ŠFÛY°ôÃòØÇúÅY˜yÓÇkéŽ_°c5ßä-l-ïˆ)¿í ³yñNùôr•ͼ"‚G¼Ql[àÁ탗wQùݱ»˜ã+x±¶A5ƒ'NÚÍ:žÃ[v^Û•”™×7xzlwj³Ùmó3Ùå%©ÿ–ÖŸgR )oaì*—/\„éVA]Qù¹XH񼯾­7Ë_X+#xçó”­T]—pæÉÖÏžxûý¥ÿ¼oFÍ.aÂ…rûbÖó!xÖ ]MíൽxXÙ÷ ±Ý <¾×%øyžx½cNG’Þ³d0h¤æÏ¸/íؘ֟½°Â¨IÛ\sûì>1UuE.oÊ?Íaµ÷j•ŸvéèPQ4]¼ÎÀ{»ê²öŒé©ÁkI·&¶ˤ{WGG 8àÆâyó{ÚQëÞöÅFØ VœÁ¾ø~8í)S!vÑXd%õ`>28õ~Þv™”Kªå‡òƒ¤(*] ÈR%)«d%H¢u˜ÑéêX£¼-­d¦¿@°*Äá[ I@Oì·ëõŠšxÅÉUÔûZÁ[;\ý‚§g]‰XDIY|Þ±_¤4U[‚@ï¢_p^]À¶¢¥/ÒÏçj÷c¢Øa0ö:<ðZ*™ai©x.éÜŽÀ“W3Ø€ŠQ…''Ž¢]lÛÁCÊ©¹7;“½íàÓn?!3'àp"žòž2¢¯c±à6|C,™ìõ±7DúÃ]NÉ%9KEŠñä­kFŸ x°–pÒcCÊY)ÒZrŒ#zû,Ø+>ÏIÛ€=ÚW8¯+¶oø]ÕeS›ü¡ úlØOØÏ µ­c1êH"$ü_b? ³µX$‚b,6e+ÿ•îÙÕX„í>‹zÎhÀâ8 Æ!GíK³ìEbË‚m€WŬðñ£Áë mçCfä'CbøôúD[»ºç8?&텳عÕI—žDŒ~ÁC¨Æöì!¼[iü„YzÍ÷Ë%¤²´"ޞǢÑ:Õe¥Çü±2Çõ’Ĭ¦‘Åÿ"’î¾d¦¾ŸŸÄŠ8‰’èPgÙ¯»jµØypZ‹¬P´"®~mb˺ӓØNg³WC¯Nš–>Ühh2ËZ¶EÃ3Ú'^;xòá^à¥zÿ]/z¯Å8™ {=Nš±%ÆÙHc·Åµ~…˜PlKÈ< b»Q’s]\p¿Bðb06zµ±z IDATVàÚð Í¼Š­*Kب]Gx5&¶Fmàu޽>4c™ò¢½2 ç*_°µ_åæ(ïÉfAl µ%P¹ƒÖ/x¥ðrvúÜ0æÇœ7LŠ#†“È9ÉK<£P~ ÷±´´WA±jնͶz½49‡y¯çuFk¯<ÄÉÖ÷ÌcC0ŽŒè£’kÎïG:=_~Õçõ°F6 µÙi´ó”¡²Z:§ØPÙZiÕU\Û9x5Z{i 0úHvGÀ YX«JÌ49ÿµ…ÆÝ´vðØÕ¥·tz;¡pzÂcØowÄfVž+#c®rÈÁÂ=ËÃð×דÉV¶€*Ú Þ\Õu7¬ï>ðªo˜ÀØ Y¦tI.ÚMŒ£[0š·vz—ßòX[F&ÆêµË¿C'Ÿ{äñû‘ÇÊ¢ðûÛAaLyÝÁBío(6Vl—«¦'^ù·héÿÈNý#àž™qûBh=BÈ’žd­*gÃáW…îGÜd´»g=ÁKmú§-_¦•c‰[>pÕh$ŒѰµ"ÜåñïùyÅù—+™U0UQl±%_öñ3¯jÚØx½~)%âîÙb ™sëe{ñ!Þ0˜Îöùy‹”_óI4Œ¶™‡9=<áTï-¯õL˜˜nÜ͸NO<¶¶ô)ãXÀ9rèJ“•q(®$%·]©ª§)zsŽ>m‚dk½;áZwxxYõ´€'ó"-½÷I¶Ò¸+Ž£ÆÝϨM/YêÛ| F›^EV´éh›yX$¯'j÷L xfòê¸gÌkî ÙwÔxâÀáÖ¦£@‚#’FÊUL ?Êd¨ÕÖ›•Þyª?2ÈQƒN&åݦ”² …à•‡dqI×ËCè¼ï‘p¡¼òÓð‚Ž<“Íp(¶X$÷Ô.«Æ¨0ÕOÙW¸ú¯¬>ÀFj«3À²f$ö…=fžÇ‹·ßö(\ŒÁ­EŸ{yÙm/F~ôè¹Ü†\ÉŠ`¤$i‰Ê™FTå~YvY¥<å®—Ïœ1 ]œeøæÎ}V¼#!G \‘+î’»‚>Á«ž£LláåaܳvêPµm¹aÿc;)«FÛÍÕØÈk?׫˜<€¾õÌJƒ=j6#÷0Œ—0=Ÿý‹ô”ï–?py1gÌ`÷†uðª.Óõ2Z+WEn¨žöà}|ç®ìº^=òwŠòoÌUÏüööÀ“€{ g½Þ×›³Mš‘xalnt~>Ä…ýv°5~ÑÇ®wÛDSÀSuZÖOŒžf´óG=û!=8;?þ½>b¬ŒÓ¾`PE`v¿Z/.—Å¡bQv¿XO‡*xËpàNU´Âסår/>Pm Ž_(üí òH±pˆÊã!#XSh~Ê­(?ñ]‹„ mÅôšÁS`êæáZ ä“ô’Ù,±{°"d 2ó^·dÀ_¹ñMOª.F(¸AK+«MNZ¹ÌÀ3×d×ÜŸ7À»¿üñMìü€3Ý)÷ŠYi¯|––O9 ‹Ø¯Þ£{„z “A·ß¦·ë÷„Ç…c>Â*mX¥¶žº ÙÃ:;8õ¶ØL˜×ý€Åó°¶hè{§ééBai..¯æ*ŒŠ+©\¥(–Å9¯|R¶‚cQï—/ΕÏ5Á[+n<ùsôAÝo ¶“ù&C£€Û¸ÔdXAÛ;rÜ m3OO]•¹%xÍ3ÙlÈo ¸¡›²(vÞûûçaÌ„;¡Ø —k\¥8àÝTƒWþãåK ð>ƒY·ðèuZñ;?]'LÉå±L8ƒƒ`§;‹×mÛ_ï –Ò¼° ðØoKa€š°éÃ!°š¸v²'<¹»³»AŠ žÇ÷eÛjÓgáj¼›Ü,>*se2ÄÀ;A¬&Úo­ ö±Ù x©üÙ\a^’ÂéWq’ÙY•+q7›/ꑬÝí ì³yԎц•žzæm]|†›O<&ÏÀ÷¼´—è×ò”@Œœ~64ꃳÙÁÎ3[ˆ×ãtÁ £È¾%¯bc4dJV®R%e—©ÞÅF‘Yù…:x 0dB­kÛW˜ʺÚcq!¸‹3ûêò'0u(ÆæPØ)+ò:ü®IÓvÛ¯}XBûÄŽnиÛhä†ð5î} .$™È¨ »È+”RW—´”m±P | El±ðÜEÒò.¼#àt xZˆõ7 ÃW`ÒÇ¢³!¥Æaïkä$‡~nˆ‚FõõäÚÁ2O´jÛ¶™Ç¾Klµ€‡m•çC–WŸòøY®yxÊÓP$Cüçù:öQûô8kaÅâ¶í̼ٙÐ$ÜÜijWà6t'Èo³¼Yp´¹Y‰|dí<Ì<9R•N–x…fáÂÒ¯.²©"xZºŒnÉßvCæM˸qÌ`××}Ý=à•y<Îû³átfÉuæA5xZŠÏ82¢è*³Œ“±“#ŽÅ+aäX1ÚFIÚ;N›í‹ÒWŒdŸx¶à\b•Þõ¨Êù-ñ3o¨¼Fs+‚wÁ«ŠtÁëmÒ hÛË‹Ørjƒ”õlØ…¯zQD¯Ì[n¸ ÂáákŸyõB)õ._?kÞ£%‰)ý½öè³`¤àñ]y´db®ÀœòÐ=Ëd³ÓH—l€wÆÅÀ+é%¯¦€‡¬ ¨m)¶¦²®ÝíŠf±¤3Snl•@tÄ6b·If «ö@T`Ut¯ÜzIãó¶f[ƒM=ó4Ԍڤ°Y Øè;ž/û@]À}^ÀÒ©(èãq/æÀƒ¥šÉàÌë¼ÊZõœìaqh­(ºL`(ü>˜'O#˜Þ`a䟯SP·ÍR‚üË2yž+Zc¹üùsC2˜‡ ì,º[ïN¯Þ"ÚÅ6€Ä.‘´àeYæáŽCÖ2ËÉø0 .¹˜ßª/kk¨fž9³KuIMbËÁ,“xÆs`ZwÚGü£v©þã§§F=b›õ³å.¾ªÞtìïîï¸Õïd~L^~1D¼ƒ²;ŸÎ°<êhìЪ°‹·™'S»‚‡]kåc -Æóp¬ii”¹xd?D±˜š˜8Ilz¸and`ÞœžÂô7@4ƨÿkÛ[bVGU´—zKF0"…Š-fë/°¨¢™[ÿ—ÄóÕaç¡8Ø&>ÅJaÓEZÛ¤‘¤Â¨Z/',ö"ˆ× Æó2®'°ïqD%´—½FÜ…ÅûªÎöùûcÇjÚ“’UbËmÃ=ãPÛ²ä™h³<þ€Í}>Uÿ±Áˆë4ëp µ¥øÊ ,wb¡¿þ?JÇG*o?ªb+Šô‡ÄDÂÜ+¸Ð0 Æ7}4ûÆà 9êwrðù½ð„ ¼ÖÝüTfý~ûçXÌ8_ö?óÚ„al·þŶ؞4?æ6p ¶{Ò¬[ÉÊ›^G÷L,®&1¬’ë ÞC3x§…(æ"¥Õ¨²b+EÛLæ–n;gO tTá>v¨f^7x[Ì®RkHj£ôÍpÇçVþ×8,’Ã\¯ÑéŒ%âéëé°Þ1±í<&¶Fgýº´å9ôXxäÃ~Ô0ýoÿö;64*=Kø‰SŠþ@Ò±³—cñx.ÛÝF¾žò±9ÿð.ö lÞf3Ê9,ñÀ$c»·°¾9£1)mzHãÞÎøü,i:ò®f…ÑÒ¶yöÙÔ•1Úò¼™ÁÛöÁ‡Ý¼û”ƒŽ3–)·ß`Çä¨Ì-¯îk†>úzƒQY0’q÷¶ UWÝ x½g^ ºc{@ñúŒ¶ƒÿô Æ~ð†'½^g` C‰ëâ4ÍoqΦ—,!^ ä Nìçb± é¬Ñãgíánìózœ——ÐÎû‡¯½Pׯ&bñ0¹N›9ÉÞ9â⊮ed ¥¯Óµå;ױț^_Æi“ÛŒFU#xE¥ e%H,^;)˜Þ°ßºî5ÂüKÄ#ÌÎß\z´åti>z'H {ý‚×ìv¸©Ì×ýä ywÒm¤6ýw#‘¿X”ùGp߬z—;xL“jh °óζ"x)éþåÞæM™ÊT: /ÖEóV)õ–uÛàIH îY,J§ßú-û ùdòX=ü“ñMýÎïÅ÷,sŸ{ÿ½´æ”n•ÂxvækýƒÇ#ÿ—ÝÆK³óÂYÏXÀ%‘!˜Ïà̲vè‹‹±wV2SSXÅgå~³ó”^¾zκ&»#ù~ž®ÙR/cŽ·ü4ÜbJGoÎIÒ‹=‰´€WT¾þàüƒ—VpÓ«¨"hN€Ã:Ÿ üÇ—.°éÜNr#ɨf½Ô–”l6“ ?öµL âÜÌ.£'àZ ¿¹r噹Y|Á}ð×èê_*ÑJvZlæJɘ`ÁÀcây'Oó'óUXuxoôârñð¦@½À+#qZéR†H¢è¸ÿà—ÉÓºo8i‰9àèqÄK7¶±éWpèz¹"4ö—d/ùbÌbɸAl1G€Ž AÔ‘H:íõÿö/^Ö}\{å£Xµ¸g ‚éjƒN&CeÑÔï³"ÍßÍË.òNŸÇ{p™îÏik&Òsæcb` #=åÞEÈGDü£c{ÈsH–ˆÛ72Þ~ÂH*…1(um§jÌnŒ’PxÒÇÂQ1œþn?’k)Ã3•Ò99}Ô?ZaMƒcŽö1zp4;-6/îWµ<WvY¼eÄÖj]+žÓF2Ý <ùyø¯´±šõýá gÆØ-^O|ˆËáì·OHïzÅŸÙ¶!¶~4žtö žžèCL’F^Ð0,wþàŸýqÉ„È!3y.Gã ±E;æ*¢µ“©}W¹ÞM¼ç¼²ˆˆ¥žfEÛkÏèÆÆjæk>ܢŊîŒ×‡'ñ©ºH“žÒé$¿ª¼–Ø ì³ÔUÙRl-¼‡3°°ì3¯8Á/ÿ 8 ™ß‘'ŽžFuOcé“Åx2ý'´²Q’}s¥PÛf[àå[à¥X}íàUw ꡟAkÅã,ÝgÔ¶¸,$ö—2[&`ZÔwúu›VìÔb«—º¢*š“’#ü¤â#&ØÞÀÁª}Öá>Á± »'œ±¿—\e5LlYKKax¤ž¤€wÄzW/Ið´tbé ž¬£ñ8,0Ý v fͧ Gô‡q×{ŸÛ`ؽÿü£>zÙ´fϸ_]2Jh9™7úŒ«ÉwëXÀi‘Ke^WL°¦¾Á¢>¯ÈÚ¡¯d²0ó:7qÍsµÀ»T­Ï¼¢Þ%za‡à±msñò·¾ð¹/^VxF ¼Yð¯öŒîaŒ›iζPƒgžéšy[Š-?îáFQr!̺¯üIòþ/Á9s•÷yæÿx‹+Ì €ZÆ$‹cA…¨¦ìSäšàµkÛKU«ÞÝxßß)xHÿ,8Ð×ION cž –·Ì'Þ7?u4W16âËJ˜¶Áw‚×½é­aæÕ£ù½œáuÎõÄ6í6Šû *ÌÜht%-¹äsçŽOŸ*.+b;-6/‚àQϪ€g•­k^¼^°hŽçÕÝ3gÀ1+= ÷{ÿ?=›þìe‡#Q‚ånÂë碶+Ú'žzæº84&%c÷°Q'RéNeƒ§Ý>Ÿ¼7y캟»¼ôÀô‹ò;!Ôngðq¥#Fár²m÷ ‹¼j<hÞvð.>ð¦ƒ`'âƒoq6b&é£Ó,úƒ\ù¹t8v„ç^‰E´£×©0ÀWàÕ—Ôž€L Xð‹ ƒÎIi’D,‚ØÏ¡r@¯ÇèXŒ—Òl» p9±±Ñ¹áàÉMðä:xÖ†‘ðJâú‰Wðv,,YÅáí[Þ1?FÏaY9„Y{¸ ¤¼ÖD“Ôêck±µÍJ3èÙ |×2#}nƒJãDðœ Ø_ˆ„Â>ÌdaŒ[¾Ÿ<›¤ŸÕjµwâ%°WO‰ÍÎWuðÊž À£C xwšà‡±c±§•¨ X%!Ë£4øzC@&]ú>Ú}^”˜=áÔ6ÀKmžö t=èª iKömHrxü¸g?çˆ^Ù3“.½<½N[ï)˜~XvÛpÏÊC´üW‡¾íy ßî<¼LåT0`_Bçk̼·w±Åp’83‡¸'m<½Äw5;ÑöÑÏó®q”âÈ…4v†è­p\lf%‹µóÑD ßü)ÅÎëL Ís´Ì½]äÉ Ó-êÀ¸tIo™nÎÏaTE’­s7w^Ö'9N7¾íJÄ™Iæ}í<Ög\¿N»éï$Dn£¥jë< ѧH—”¦ ä÷÷Œbéï’¢¦¯àgïZSgPlgaYþ¡ @L«}xß$_’iV„³·ÂÉòÐÍêÓGH¾ yQ—7¥¬Dé_1e’öijcÓ¼ÿKGKq™ɬ´!ãÌ;»&ñÞ“KQæ>úY‹¥ôÖÏÛ^ãˆúº}”‹¼8à Ž:ô’l±a·žÀ¸Ë`ò½“Z,!ƒØ*9ñrÏ´î¶®çèT­y›ähÑ•zyûàU`Ù¬` ½p$=þ­ ¢ØâôCûÔ´!Ù铤ýy[WÞ <­2qÿK»FíÕx"üqŸ±Ù’¸ëí-ëωÁÈ9¯aœÙë ^fb»i-AÏ–ñê;îÍÙe¦°‘Ìמ»Iþé¤=ÎbŠØ²j Xd~F—¹çÃégÓúÄjmkØx! V`ްÃ,K=:”¢Ø—™`TÅ?ÌJ€|Ó¤@E{L| =J-ú¯·ok¥•;ôÌÓϱœÜ®òeOá~Æ•g÷ü½û…#ï¦qùsÄÂê†ßÀ«4ލ/«ElÝÌDœÙ»O0¤ªõÎO]D’y[Žå Îì›À4y9"¯þ#–›{Ua0Ëu?gR‹ƒæcå.Š).j¸ë +JìÊì¥os‰Y%ŠŒ›*à‚|Ý£:ÒClEÕeû¨%à÷ ãH5ùNØ:î9k³_»2s£öá2È]”ß»†…ʰÜ1÷¬"Š´Wc‡K¿ ð`õüå¥â2øžýÊ !É+1ÜÅ"Œ'g}Ó0|åßkN¶h›y F\7xÃÒ¼ÁϨ-B“Ž{®(ùNåÖ•9Ýô»múHú9¬8»ú~¼úƒµ‚ú:áÚ!x=©má`å´X Ôè{b¡àˆaì.ëil¯L;(^¦å?vÌFÂ[?¬<&Ø{µðxÁ°ŸØc±û|˜}TtÍ¥ŽrŽ«'¸Ædì@÷ °I IDATìì­àÙ`í£>ñÙ9xÌBi ÆxÔP½Ž¢€ßŽ8÷Ý::ȱ‚äuZÁkú¶Š^ºgÞ–IɬƒLxN»íœèŠ®¡Ô‘)ÃY±‚e5˰Ý EÀýjØ¥V[ºVB±¥´p•îxhÜ×ZœYé¾ ²ëšòŽÏý]Ög„ÏßeÙ¾§ü#vIÒ¬/Zà5—65xfþ‡¤«v»^"“™ãÇÖÛ焉•Ö°²¤üÚñÊiÔ¶¥¬;XKLlÈ+ß{’àa¤º‚{v…D,~û)ásöúCXAÇâòUðÏä7|ò×ËC€ ¯°7Øy‘Û™)ìä´”Ô. /b–†£ÐsÓ ^Sl›æ\xÚNd#Wê¼dרbÃÊóiÿIçÂü|š7ïò“ƒŸ~HýŸn$Jà\LŸBâÁÄ©bÑ^sŒNçU–>è5èóÉ"=¬k[VémíŽ-éœy›€'i<Õ•PzŸûÇJˆà¥yò’Dt7ö¾ r½Ëò` Óø³§0¬Ë-Æß' ^¯5£*4ž,­ds×iñ_󌣯D1{@‰€÷ý]?·¥Èmâ9±-ð$&¶®m€'ax ÄÖ®Ÿ…' ÇUqNKØÛÞâ;m4:ôð~sÈâLÀÌ[­ß ëŽÁë5óÖ‡éÕ,sÏØ­â/Æâ¥ÿ¶{·þw#ÏeYK¯Ð6ì¼r£…Fx©­ÎÁ#èz{ –¾:"gãK·»¾)ehOº–qúCvʬ¢Ø&»£*5aï÷æZßö®‘Ô^ÁË‚sƒ1OVk;:rvé•×j±ø Rsa8j{y´· ê[«úÂ’ÆS"3i·ñu9áî7xeH!žöù¤Ãâ8Ü€±ò–fì:Àãqq.õEµg<þŒVðÈý›'õ&ã/þ©o—ßf·R¢¬ŸC‰e7ö~Â5^;»%&·§Ŷ3ð@aP'uU~f,,Ú£l?ƒÙyq ”qú§ïb úG¢±™þÁ+Ã(s¬ê‹¦¶>˘€ ƒápÆà-£ðsÊßðâw,¾ MN`¸1z!²šÎU”$‹ºk«Û;l£±„•\¼K±8Íå6.üŸ‘©X¶´„Åh~­ÌðOJlõʺ÷û «ŠvŸæ‰C¢0¼Qÿ ›ýÙÈLùyþOè»^àƒ«qŒ†bÑ¿Ú=»s§'x"S¡õ«í€'‰ÈoQâð{ìB|fƒ&®áò˪ў ‡}Yç_Û_ÔŒ]‡ÂPFWj¨ðØ Ø4d&n7¢·™‰EpÎöéÓ‡ÏÁßk*༼ˆéÌÎKâÉsª‹¡ß ¼üÁ=Èý_IÒð«n»ÝÆ„ý5–!xƆ·ÉI¢Q»‘Ü.¶0_ˆÙª¾një³6ÂÀ‚dªP­6çF0‡5=µË3ZˆÆY¶Üqm£Têõˆ½À+2ð˜Ä¶+áþÀ“MJ’KðÓ«âi¬?—ß\Æç}?Ü/7ì\š‡Óîþµíz­X79ºòj [žÄF$³å5£ÿ€­!ý25 Ø¢¸±áõ²zL“Ú%²’ÌkÄG ¢”ܼò“¯*~Œmê™/ëg›dh¥aæW~ŒÞÑh8’¹îÙHôBßîÙFKlÕàeSšNÓíä6ú€56½žÌðãnÎê+†Š×6$=§ðãd•«4AeµÂx,xÿmûàÁ¢{Æ¢Q÷2{M¶/ɹìô4¬#¸}6‰þåïFCá±6©Ùr4ŶžÃ(mKl ö&p·ÑhÓ³ø€;ìÀ¿ÜdÆô`qös`5‰xR*Y¸7Ï™0…îây€ï"=² x]÷¦¼‡ÊžZ ùüÿyåÝ}^oPéËuo8¾3C>÷Ÿx7ÏëÛ7œZah[°ò°™¸çuG,´GjÕëÍ–ïO1"]̉¿ÉÜÈ<˜iž¼á3äO|~ˆ’3ƒzr„Ћe=Or½¢Å—iSaüݶÁ«( ““U”x²Kõfßÿý¿Õ“-ïfná.¤=Ö·Ø–h³ìE-¶¹”†W°#{n“ßh‹%†gö £N¤&÷Ìm |'šL&דØ+µ$L;9§\¤¼ûsËÕ#Gô›Ý†mä½n´šÝNçw–êI>…«J`‘Då"U«n­*Z¥óH‹|q¹gU—)صœbà1#ùÒÀ{HYðŸÍ¼_¸è±Ÿ>…å·¤ì::¢‡ÂSSÙÓĶ›û ½ÁË\*Ÿê[mà…,ãFÏÉ‘E)²í6úö vDcï…²¢9¶[&W‡—_u ­•Eëõ›Xòsq­Z¯xÎ:—gà±R׎ÀCÉ­Áü; kÇUÌ`%p…Ø•ˆ…yþxöë CgÿàÝfvž~¡kæ­¦¶>‹àÙþ«yÆü¿¨Þgdmä-ãX¾Ÿd²Ùc¬ã¬rò\¼‹wËÔt}}¹H­¦å:x‹²ÕÄì<…uÝ¥©|jSðÀ£A_6©§é-&J¥­ž6è-78w=àâíßÎ[õy]”> ZÎ#u‰¯‘³ÙôKÚç?I 19Íÿ«/Ów³•`–”þS´Ñç¶*^¼[¤&еELÅëÈÛ¯‚à%“H$ö±ó{K±ð÷Qm•rY%ˆ¬;/ëõ~'ª]_ôXóºÜ³”¶3탉;bŸ÷ ì>‰½1 ãâÜLü‹Ë÷&½§Á®JÄW~Äì<´.”Sƒ—§¦:x”šî6Àñ£,žWß›vðî#;xÐY£Éù•3ò—ÌŠµÉ(ÒS¯aKã_ÆeÂ}gÛà!ù²Zl5¹g£Ý>;›žw{&¤í'ÃH%b‹}ãñ© W?z§ó ¯»Ö»Lu©½¬vë¥Æ·ØvÝ]Þ"Áì<4o6[ ÞŸ:¿÷ÁÆ9úY¦Ü&[™5Ìl€‡ûúËkèf0ð@íÞÅ" x öËþÁ“]1 /ï2ËÊó &P÷"XíXl˜öy¼ËäÆíà5ßå¦àÕ¤Íÿºmèa¹ãÍ‚àáˆE‘ l =r[·;޼¬šCû7NAa°“7âÉ൴m§ØV{gRh IYá?°órÙÌszùjÛÚÕ8ëÿ‡vÞ7çÍÏüÛ‡·Ìö¶·šÁ˳=°ö# ð4œF"àž¹6›MíWßæ=FÿIG4 +5È ‚”«ìäT©xÅ&xeQÞCšß6xž‘–äÕ,#º\ŠbÒ¦»–n€S›ÝƒÚö¤Ý®™z° Õ†œÂO¶àQ b+`ºE¥¦k¦XÉ[#V·†n[ÜÇ<1y_¦Rùçs««Ób]u5Û¯,~ÌÀË5Á3©Áë‡×ž­øÙ0ݾZXOÂ+\_ºòaøö³C1U3Ã4é%¶ê{Ñfç¶Ùþ ‰¹ð¬òÝ®G’· HVIâdÛ 2%'Ð=˵²¤Zà•ÅK&ð0.öïîÀñg)Œ€àͰÕëÚYb‘ˆî‡GB4 ´C•ªûT\×ÌÓVpËHØ+h&u´oÚË 3Îjøêµ" ¶Á³í×(»†òU×%Ï…ES.ÐùåsXÉWwϰª ÀÓÒ÷lSð²•cÇj—0¥—Qp|¬&Œç­ð·pX—Ù5æqØ£’fìM²ä”N œ­ÎÆÐ¢m †{lÞ2à € ÆáÖm|ÂËA,-/ÈÂbû5ò»9醣Hu÷‘¡â›Vï0——­Œh¥èBA^£`Íl<’ª ƒ^]Ûbñ#8¸JþæóGv1mËÈÍ´›yM±-Hœ$)‡Ô^Ðxª£]ç¶/`Qð„Û0âXxiÖ¢£Ï£•ÓÁÂI€‘æèzàƒx.rŽÈðï WÖéÁèméE] õ¤4„àI.i÷À«±ù ºÎÅ+ë*˜7•Í2î’h(θ¹À@Tëã¶CÕÛn…ñcgÒ¡Ø. )(áž F‡ [+ H‡Ì²`3±…‰ˆ ã~®ë9‘ÌâipÔ¨<´,½¬+¾Øžk{à±ò)ܳmM¶_.^°Ò,f‰^Æ2×ôkî1n ömòÕhÚ¶ye‰9K]3OxG,6»Uaãч̡´÷tÓqÊ;p&—òñÏØ›U²ˆÛ&ᬟbqÆ,é —â×À^ŒNv«Ÿb±Ò”»Z‚úÙÏJäJ½—úþ¾·õIô’Ù¿&¨÷ÚíD ì db>AÖ,•*Êj)‡ç¬ÓÞ£2 Í$Û2nPq%h6{ æ÷?¯ß®·KÈ<ÈÈ¥´c׸²,a³ÒžàiÛ®­v~Rðz†¢Ä¼—,ÿ©~èz…œ…%ðr3¾é@£ð ÷ìW^…>ÊN3Øâ±ÒñK¼^¤•¬WÄZ.¶.GñGÏ[[ÿà5óºk 4ÜÚczÞBÜÆáÆÕ9…dƒ[@.Ì£žaf¥dØ›¿œH(îÙf¯Ÿ*ÍYR—Kñ{—(Xw¥KÈÜŒ ’%t³=#Èásû+ð^#ïM¹ÇúÍf!ºTÕT¹'ñ>#¶Ûë< j‚÷y„Gj-ø4ÑÎ̽)x—žòI…ÊŸ¥o¶ÀÓK½ÕqxbË»ÁÔ±u3½†'°]ë h.{Où1ªOc8€Iì¦bû„Ák–äÿ(—­œbj£”V¢*ÑY%ðþÒr6ËAJ}ƒ‡5,4.ºgž±Œ\½UǰŒcJ{ÌŒäpcÎï-%î¿G+9%Ãq+­ü:ÁSbKðòÞÅ vá,¨{úOyý|drœxŠÛé'Ú¼…æPƒ§¹Ô»1lÊ޳ÛI¡ôÄáôIÉÆý#,rs¹ ösH Yúó௼Úbí¼l%Xp&¥ûHÈ””W°:=à°ëg‘DÙÿ†fî¼vðê¥g¯ºó-4ƒgàlz‰Åb•…/„ %Äqà£y0’}§ü΢Ÿ‰}“0ªXÊ¿ð0>».ÀZþß H¸ÎÒÍD°Šg•mîݺ±K«½Â½vð0¬¢ïÞÒR­Œ?;ß}ÙçŒ'`¼‡-Çù)˜ø9ìÀpÑ'³Üi¯L¾À¾ŠšUña_ŽE´ó²œ’5ì,Ä¢‘ô¤[û¦wKlÙR/nð4μQD&Á§Ç=°ð]Y˜ÉáÎsV¦Å@’â¦mŽŠ¿.±Eß¶v™Uê±í³Ë±Øƒ•GYeT##6Û<ã>÷ÃÌÓŽJlIðúàÁaf¯À¦ê5ùwãkÑåÉÆÓü,Š‘ÎQÛDKló&šª/Ýô‡O<Œ>‰ÁÂÕkWjÉw]ŒÆBi"@2/ QööÁ[èÞ>Ój$ÛIfŸ»#:ð»&£è% ÛèÃ*Á4©`w…|~¨ .º¬´Õîu¸_ðØš·¾‘„okàžEX²JÁD«¯_TÇÚ"ˆmz¼±…´ã’%tô4uõnšÅƒ9Ý,J;‰PP´…ËK‰VG$±±ðU‡%*Ãñ°ŽÎ©o`çàÁX_Š_CžaF¬Š%òSÎΟ0ØXSP¼F¿CÒŽ]# Ð&¶jðú[eÀ퀲å½ã›>:Û8 ñ̓•ƒ/At.7ƒ²î!³¢x]=_}à¡Ø‚·¸K¯ú|•ƒër¥BEçåèB$Á«‚æÇk,píÓKuï[sƒl>E,fÁKlÃD?ÈÑj‚b<-,$AÏåÁÆ¥ä±vð\O<Öõj“e‚¯0MUKÊ2ShN=Ñï §}¾³A ›­Ñ¸ûúG¡GѨ¶ñõ~­fIý0^vãn£"*Ô«1˜Âhê]ù¤|¢ ^µ ¼ûO×ëê- ‹°‹pЦÏÎLe¼Øà)ÑкÁÒ¸„üfµ‘>à}~(ÿ¢K2É›[¾Cu竺êÓ¦·· Þ}´ó*§Ä³ô£Kòq×77J錯âµë£f ÎhŒ.ü ýt`¡ðêbË:©ßxâ°‘!ÌZé8ÎÛ8äH"¼èõà¶K‰iŒÂÉkïµ_¢<ë\Õö¼ÕT}KT_¦W^+zò^j¯1‹ÏÒ¥Hü=€í6˜(a±”rÇ#fö'¶õû{‹õk$lP[¤šÎc¶¿½æ £,ögÃáIló¬§ñÛ0ó~V¨á:W£É8ÒÕN‹ ðÞ:Û Þîç]såx’ŽæOÞ-RÝLãHßàNQÇcb%ó3@ݯÏɸҸ…‘ÔJU‹M;v ðÚ©¤· ]ñ¶OQXNƂӾ€PŠk?9øñ²Ì6KKé\öˆíFKlß:Ý ÞÓG¬sņÍÂÀ[+‹C©^ ¼4W|Ž‚¶õ)¥[+òª•2õ[ ŒÚíöÅ2>æv.%ãÿ=Õvª5φ>–º˜@Û‰FÈP\nÈBYfN‹`8„Ÿž¢¸íÇW‘i-s ™«´˜’»À³žCðêP?Oówî`Ÿ›mƒ‡a‡Bæ;|M”ÀICÊéËßÅï ÛÉ ýíƒD$bú¯~7e¶ù3ÃŒ2u@OÒrÛ]§mîHb–8ÝÄh ô.Ì ÝÈQ¤hïÌ—UàÉ®¹» ¨Îß¡ktftY1Á“g‹ŒÂ³ îˆéO_oÞð³JÏ{?»õû+¶E‚Õà¥4žêù/µÿê˜Pâõ#â ôõú¿QøŽüç5ä0ÛÈeÅàzm£ÙZ>óxéá铯ü[ƒÆ|G’‹( ¯XøÛäOÿ5᳉ç=LÃfýƒ×nç=£º²¤ñT‡¿ÔžEªJä_Dð¯w#=p¾y )OO±â›È*•S ùÌ3mà¹æ¤bx÷w ÞYÌU¹G§Ðw Sz+ËâÉ?ûn,úlÌæÆónþãuíTø¤m浆º•&ðx ™ ҟ雥\Ï©[ÆÏ˜‡Øîñãôa Ÿhß¿¨žj‚GË ¼ósO¼*f@ç:ztÎX ©nù÷Ûì°Z¡kdÊÜø:ÌÌm‰-{`ö¿zæ¥4œã1±DGàÏÉïœ#½™ìÃŽ,y:—UúŒÖÄ6÷¬<ÙÚÞÆNÁ£†ÿåÀ=«Õ–.ÄKàLøÁ^_Œ_QîÕÌs–æ½’ú¯Ò>[Õ›’ÆSÖî¨ÿ)ÐÇCÓÀÃÕø…p.EÿNÎVüH /]¢ nµgà‰Èn < ï <ŒI®Æ;ÏÏú:o¤ÆL‰X˜Üc܈ÒÖÄZŸ¶^‡ØªPm<œsókapÕ—þ9™˜fù¥•¬oÚ ­F6`†´À+ÖÁkÖû<ðª¿GåÕìô© ½Ló‘~.L¿N±Fíö™°å)÷t°ðéGëyÛ6ÁÃz;»Dª §´œ‡Ñ_IÐÕ¶#V˜Í†§‰¢>ÿÈ£4FG3>¬%KRdz!xë ð(‚'ΉfuðÄ€×pÏÖiíêØy>Ÿ' tˆ±¼fàNà»Æ®€h Ý ðN Ê–[öÔ;@ ZÎ33£Kë0¨<›}–°Lg££Š-'¼ÓþàIe¥“r´Õ¥µìð”͇¢¸¦€7TEW ¼;åwKÄ•6Ïl·I.Nœ›Ó?ç\`Tº`lOaC‚êº)mgâ°)rÛç/=û‰(i;1¼ÿÎýÓØuª„l:žýeÓÎË›.Ib<Ï5T>|ÎÚo {{m¼ Š-Úy¸lÀ··öS™óúGLÂÆ²^œyÊ·ûضmïòÏzÉœV]7¿éwŒ<ˆ­bjKøß®v%d¢„cWXV(†§;‡)ñÍ;Y¦òPY'½¹#ðr˜,ƒZ«”Ic£ÝË‹Ò'œ>f [&±ªÅéo¯õžK9o¾íÐ^xùMþT5Lç“u÷L/áÿ:ä^%ƒ!¶±ÁÕÈúÌ7¥÷â«?̂ؒ¬ÿ8¸WJnŽåæC3x«‰zTG¬-&‹.êXˆ…ßp{ŒN›q&‹g…>°S‹-1£NWçESZÎ"Ö£"Û¥”+ZïõoÉ@u6Ž}Ù”¼Ö•lvÚTèëWË’B 3Q¤—àzu)©“éa4ÙlÉõ §`$®aÿNhìd¼ ½ËÃa°+üÌ#7vºÃ¦wÙã"HlÏô“_xåz¨H¬‘•**¸û ˜Î(eÚt äð3ŒVgÚ¢zÓÏ[ +sååsÃo'.Štq#q!°PHn¨ŸñW^‘2±…I £$Ë9š«‰SV Œ,¢Ÿ.%î=úAà¹ÚÁCE –F®óÂymgzå‹h›èèϸ66‘WðÄ·q³ìõkWXMp KȪËüJÁÃtÑBáj¾T’àž!±ª×pækÌ^ùf’1˜–Ò§ ¢rr}ˆ,mˆ­}6dI#¿%¢Å¡¶Ô öVý'˜,íCî—(˜ rÛÎÙ¯ñºýd IDATØ'«>|{ÿZ›g¯&’L£I$VsYzfPê¤àC#Q©±yÔoo™ÁãÛChfÚ‹ ´ð} U-Nº–ºí•<Ö9ÊÖ탇ݧØi­˜õÓ@;SÓÿú-[Jo9* ¨ˆûè‡Þ/'%Ež#]Ûgù-N3OO£ÿ¦¶¿0(à=´¡éOäH8S¹5z°êÝ,’‰†“O57o{Rã=1ðІ÷ ÓT”hl2!Ë™ç¨ü^FaÐSäL©ðêwÔü“}X ºòVç¨ÿ1Æ`E­«ž˜_Èn‚Ü4E«oœŒQk ôƒd£ŠEîÝXµcÈÁë•¿\„ ̃ӧÎÖj 0U>Æ`b&‹óïr”q7N£áIKbªð\õ;ÀÁqœ#JÌægÔWÖgsØá«F3aíe\‚Á)zCô€gÚ`¡I&±ê‘VDåU àmÖÕK x÷;šUoÈ«ŸøÌl‘5gÁ·ßBÏ-™ˆ¯ôcçµÇ2^ÐÀV)Œ­ÀC ‡„¥É)¡±ñÖܽ°xfÁý:'.&#Øég^"~ÍÅJF³´|òà=& _K*Û@gΫñR)­Ð`õkGÆ0:Ú–‘ëÙú¯~G’’%µÛ(‘®½Ç-g^Š0{åw¤Æj‰àém “ã—‰2ó¨Ç?ò' cµ:¦Y'ª=yð6+;q‘ žE…!§‘Û¿*æ²ÁÁúO¡ØÂB_•úÏU¿ƒú^ $ôµÎ«n•8Tï5Å-I nt[¾¾{Œt+S²'0ò½Ùy‹BÙ„-dþÐG £ük*mêXÃ+9M+bÁÉØ0. ˆ2Gû¾¼]ðPÛîK¸*±Ý<èõ!~Ò'4»ö¿x~aŒ£UÜ$ðbcôh¼”…GhÏò|’à=v÷Œ?NŸÅ\­D)í»u*àü^"V¢‹9Y,á·õ^ýŽ$lû‡á›ÔÑþÀ#i»=Äþ¥&}œÔü‘`ôcµ²tüÆŸýŽè¬DöeË_‘+´"þ™܈יºóâÝ­]àõ$gÅ6ÈÄv…‘\\Nþ5½kúh)Áåí<°WúÀN-¶8ûÔz[•=¢‡×ÚüÂ$¢ø£()òD'—T}þŸ9„qŸoÊÔqF“PÛ”înŠMU}ÝX^.‹²©Î³Úl×¢¼Í*$×5pÇè*V aÕà:¦Ç—Xç½(D¢„ˆþ¢ð¬à±ÒÇ‘þÀc #D,>²KùƒG‚‚˜Û).É ÞžlPit:b¬#Æ©“Îd““+¥[#®µ¹² 3‘#ykY—Q¹¹”©lÀ¯Ÿ7õôC´‚ÇÔ;Œ$öÅb^w†ùNä»ÈU*ë4—£?ï+ ïj§Ì.Hê™·eñ€çu|Qªë‹ª„GY¶eÊà I$wãO=H­«¼LÔLa“…ú%Êbþ°ëæûÅ*ë$ÙSñn¾î¯Ì Ýe5ô{urw÷]íàÕG ÜÚÒ à„ €XYƒü«b<·ÂåˉH¸®u𛽙Þy9-b;’f|ÍMà ‹ÂQr0zᶅ茜Hª‘™0ÌÃo_Lt ‹1|-m›ÇTÐûå2ËíÉ—­¦;åj½Ó›õæV/Ë-WµPýn ^cר×ë÷h2ñí$ù^ŽíÞ&c Å=ë;µØ*Cì¸è–3OR¾ø5âé]gŒh)ÝO÷“A8£TåS¯¾&Îo€ØF”Äô«Kñ6ð.Þ½_-³•-_u]\.coù3Æ>5´VÞ¼Žpþfà•V<¸^«Ï÷ädåšVŠ1?Á0OæåOúÏÕ 3Ž,t‘7jï)ã(±SùýÚÈÁ†fJéR¬?†(½å9yÀ&¡›½‘X'×*“/Ó5Ùjº»V-2ðÖª®¹åê³:d¯Šß˜Öʽ”†æ™WÖ’r)Dzkq<œÃ^/°ŸÐd¬Ž™‡øpàÈ^ŒÄÖ ÞV¥Þœ`ûÿ™{ÿ 7®ûNð5€á") 0‹V(I€HS+•5#sÏ´Ð3ÌÝ›’nüÇ)ƒªÜ‹j…£qP.U9¤Ø-rÌIÕî…XìœÓV‰ã;L\W–ˆ¹?DÔ왎]òà:Z²¦hEvÙsƒ1éPºï}_÷kt7?º”ö[ENã¡ûu÷ïûÞ÷û}ߎ@&å™ßKÁ®RN~yœOÙžb˜#þV¿Ù™ÈäW¾%ˆâÖ?a¦©vØÀ«×¹:ÉÅàݦàá‘÷€,¸î­ú®À#[$úR¿á•ö ¬ ?rº½ºŠGf%7yY¢ ñøß>-xC±-¤ø•Í÷Ÿz”iàkŽSdäD ØGûb’ÙU’r2žØÀ’ƒÂ¶¼ñZ}¼.PðàhS®6Ïp*ðj0uDÁã¯e¯¼Í$ÖÏè+‰•ŠO‚S<¬[xÁÅœ™L¿¶eüc€ÛkO¹K Þ@¶…*KüœMºLH}îÆ!7lLAÅ“éXÄõI_mjÒ0Hl‹ þWºÀ«ÙëŒ žQj“¢ ‰–‡]ïÕü=Hã˜Ü ã¡Ba›¸Ÿ™Øö°­$­hÁ‚mm™{Œžî“ÀÃÍ_(B ¸Ã£·!ËT>oûýÿ OØÍ*ìüz5¿ªOäß" ÛŠ-<¼v žÏ:x¨µxImC½3Xx79±‰ùx fb¶M‚54Ï›OǶ@)›ö®CŒ<<*C~†çñÈ“Ï"²R€øÇáš.mÞ'u#ð|kRº`[~µíx Pó1Ävß'l‹GÄb¾rÍ x>Ò™"۱ш.§Ï@!6½x^ÿˆç¶Ås=ëJóê$ذbû;R‹E¾Eã±^Ë<,ªl-w·àQÂêÙÄÈ¿–3‰#XÏ(ŸÄÌ “ÉÙá ´jÀãÉçï°À¶sÑ4–N/ÂÅSðöB[èûSÌÙ dEªTÅŸoø|ëp: õ–Àk=Þ"æ8"ç‰TÎ c9o4àU±,n|7· Ûgâ;ÉvaUh‚–›ù ™Û7ò¦ä<=Ûºá?-xƒØÖŽ˜¨vò鬛‚ÇÀÈ£º¢”í9XmVð|÷â\£lû§Ptåñámî O8ÇÝ;U+¼v›É^uàAMìU¨;õL …‚¯‰Õ³JìDn‚‘wÆâÈ“jXè2« yvIB”Óö¶x°ÑÉ_á‘GÏ‚HþÄŒ fB4Æ’‰¯ÞPFÞocð.>\o½öÉà­·äð³Vøâ€'ø¶Z«à àBÞùX€X–f2ñÿþ¸|R*8þ‚ðÜ xR¾Ê±ìÑž“¦Àƒ²À33.y}ÊrcœwÓsþrtrÉA.Ü×~ªŸµÆÑKöâxíX‹üp|ý°½þ'ðÅ™ÝVp×aíÏj<õ+a)ålâóî Õ“âiI=kòfŒ*2x°¾H>ÛÀ½YûˆÙ–Á¨diZ‡GH쀷í§[×Qÿô‡ÑèÞÄÆwW_ÿñ«?@G‚àæß¶×Ýÿd— @§ö1 {íiª…€N±`alØùãNn—àa1©JvŸ®’\`±ý*L…q¢®aQ&f¢”ˆšm%ÀÁ#=xƒFž•>œfék-;ðÔCð ¥±\oß[»}#t•8%G¹ÄÆ •ó ô´’JïÝ­ÿo\/SPƒwiCöOD!µ¸”4VL´¯Z0F žP›$T° }Æjnv½Û…TPä€ow¾«št#ÏÆxÞëÓÞuP‡6¯7&ŸZ²i®p«OsM!1^0 OBaû[ByÑVÔ³H}˜Ü$Ù@v‰Èb^{Õx>r‘ŠmmlWØã€O`¶ ˧FÆ4WhÀC)ol†ÈÇø°V„ùÇ^2§žA–âä# «‚œ]J£‰«7ˆºF“蘯¦mÔ²­T²º-¥=„â~éüÍa¤:™¿ý'÷s¡o_‚‚™±Íd{eõ³dÛm((¥Ëv{‡ÏÀfÛU؆'7ƒžm‰rk–m1ãÊg N’¿5¹}¿ö´àïå2ÛÄ)9±²º]°¼²KäD3ö¼$8\QÜ`÷bÄ&¬gCGÉ`Û"x°0Í §¹Ë Ôòçrzï¢ÑyKÞ4x €wcžÔPÛ›áÝÀ&‘É92â4“‰Í¶H¢/Ï&CÐP¡°-VËVÙ–ïän4ǶÙ\º*ŸZ—’y£óf\VÏ^y\xEøq³"&7 Õ3ªÏêc‚~Åí¼mì:¶Û…mUD.±Q€¿•“I¬žíJÎ#äÑÝP‡“ŠÝž—ò ô²ú`ó' Q®˜mñ‘œGÓ¬êÁ+î<,ßÁY@YãÁK3Aåq¼`@àWóe3Øi É}J¯ž ïe»-"]Y6:ËÁ{KóxµMÜÈ’"½~—\A}Ÿ¶ ž¤vèc‚º*=˜Ö.@»Y¤¤É×sÛr)§fÌxx'žæââM²­#G“Æ ü¥;-ñÈfŸqMù{x¼M’Ÿ¿Ý¾nÞÃxáQƒÇ%±J½ƒÁ1i–àûâÃU¨üxrë=¬*Â]%ð“._í€.ì vC~‘eCŒñóª‚0%•J-Ü/kÕ3ɆÒU#OžQŽdsà%Ûm1¿-TÕ¶Ä\^J ^¢ø›“f°3”ótBò@9ÏOÁûäå"Û²±^ŽM’ƒ0™Üå4 5@=x2àI¿‰ªá~µ“¬³ çI½™!U˜¢¼Ú”XJƒÀûß®È'Ê»@F.6ðg þT™:'Kx‚Öò„Á“ˆô²CÞ ’:r3‰_';â¢%« …‡—j’èØ¶Ö¿‹§"ôµ~ Ù 7Ô…Òüž‰ý›ÏÃÎ.sBL˶4å¶ž0rð¶%§dP+ yÍËßÁ¹6l+Vb&*z÷PÏ´à \02ò‰M^zWãÀA‹ì¯ã&_œøa[¬)]Õ²-]_מ xdE…d¿rNV‘œ,IŠ+,8[QÏtð˜ŒV¦Xÿš/¿¬1x®7™fÛô|””Ï £QÃîÀû¤Ov<µß õÈ3œ8²šË§ïCE"ygíSàù´ðx4h žóÊQò~†û¼ŒÃ‘O{çg¢àƺ”)•O’7¯,òáwë>IÄ.ž—j],úêŒÈ‹¤‘µEŒ ™ß=«=ã:¸Eaµ6´ °µ%ƒ‹™¤—jðTÕtà ˆß¥î´íìóÒ["lC3oî1—©?g¿kg}哜˜¸z]fÛúaßzË'%Fî€÷´»Îû8FÒ5Z§|Ân6½%â’R4†PéØ!ë°íFâ†)¯ZÛ²Fsl»—eÐÂäïÏd¸ä"ÙK™úû±àáG¢^+1yDzιן´`4ä´µë¤9o½¾%…sµþwë8·+ð°~sGSKB\…Ô$(„ø[ü¹)ð¾hž¹Ü êOÙ“äo/çJ¤l‚d£¶6n(#souÀ“W[Á‡Ákp¾Úi <ßå^A,§ƱÙT A¢{.©gx¹5^gäñ0X\8dÀ¶Ï˧ý2PÞÆˆl6gr‰gòxÁˆ$6þ ÏÐ:·hÞm žè«I«p+¼ØP¯¾½À3ðùÖìT€T±×R­>ñ$äK²²é]$¡‰ ™b[Ý¿¸+]ÖÓ/è€Ýe§þÍ÷0šØx‹Y‚²{VÕàQ¶ðê"ÍÁ*ˆ¥7xh±ƒuÙŠT» =®@BÎH²ûs#ÏGÁ³ñF5¨ÿÈ“öËà4Ù×ïu¦ ͳ‘Dœ°í|L³`ˆ#O„ûZZÎ]§›íˆzò2xéa½G„9Ñ\1_#9OŸ¤Ö<ù¬vPR‰{†ÛØH|"$á‰ÇCàß¼„—Ü>àµÆuà­åV1˶6‰m›¿^݆èxŽ#ÚV¶­+#Õ¼þàQßNŸ”€èubîäøÃŠxîÒ'Evɲ1ÛRðj¢à5¸ÅÚ0q½Áã`Ó[$>• gHûÛ;"ä¦Ù(€Y>fEÎ+’cÅoŠmiþŸº|UŸè-¿óDô4”àt̶¡þl;sÞ¦8*ð¶·±x|–SÂîEØ=«œÁl Û@•*xR àQ#B.¥9›í: yõ, ©gœ¸Ù¾!¿Lý_½á«"ƒwYo¼u¼à]VÀ»2<_/ðdª"È˰ $9RHþâÈÌ÷+f : ŶB_¶¥?t$"I³:’ÆOþŸÅRJp%›?8_Ü+|øú^)  Þ3¾²×Ç%nù$ð^± ϵÂWð²+ƒ7TPŸ9O ©%_.·±Ù† !Nº±aE=Ó]b†m}òI<‚xdüë­*SÌ·ùŒ·ÌŒA`ÛŠl ¬¹Ö{ƒ:ýäÏðàÑÅöÓ5rKíçºÎœžqM³ÙLéÂtôÍ[ˆÀFSúÆ‚Ý!>ÝÄR ˆÌPé· é^!Ö+eÉöM ߊÛÄ¥ûPÖK«-§¹g¿‘G§geÊ“ŒðvC«ÞÏìLd2„‡f`°ª¬(êY_ x:Ïû "¥TÎÊ•uª¤Ñx:¶•Ãu´·¼¢œ‘F–¨Ÿïò²Ù(Û‚Ue2„™›:> ïN¿/MÏy›¿Ò]rsƒìzÓ[´ËÀƒ7U/œænýض Òæé,/7ëÁC”JÏÍÎL±ï¾ôÛõåçw„{Mââ(¯¯eÝxíÕÕü}|Ó$èc0A`! °ív¹h “ÆÍIQ«£[#3àmƒ52Á“ÌB•³â†”ëg‚I¶UÀÓKã4·ë3òNÊ”¦»@äîU±K-á=hv† |š·ßÿ>¹$‰U«uÈx¤UóíÎŽHü}¤f¨ IØvÃÊ‚•ÆÍiîÙgäÉ/ßfè#ó¸‘ÄRÄêÓ/ …¬÷Â\4ŸÄl ÉÌvšL&À#>=šraâêö=R¢#ñ]ySà) Æ—”&VŸd ÷È£û5E¡Ããd¨uì8ÀC‚óÉ )G|ŒäÕ±„—†Ì°mUu ÖOK@’3Ü'*ï@?N-)lû{¼ªUûƒÁ+yåH=s’iÁƒñ73#y \(E]W  ~ßbB-™œó¤t$Û˜m› žÝ(H/ùÍeóàÛÆÔž%ÚèͶÔÿ…䃚bÏêBr™yÑÚ©o÷±¡PA¼w¿ü™²-×nß ®Ç$ƒ%(ípöL"5·m“ê™Â¶ÏóªVíôy'¥)†©¢²›vŠœàÑ]`›ÆêY«g˜m!‹ÝwäËÌ"¦¢áÁÜš*¹ç¦ ’h  R»•4ñÈ )#o,p¬ÜêÓÜ´7xÊ ô|ó˜´©Rë>ÛɃ٥4‘W&C×E’LGºLs?Aš j×úX8ÍŠ*¤×m¢&“RnÅà‹à= GôZíôd[ºLüL±$tÚtà9_ÀRŠëg×þÐïdÓ·Ä6x)U¥“uê™Ô‡ ¼ÆˆÀk‹2Xg!£³ð6‘Äë‡i¶õÁµžcYÕª}€ž#®×”] ‰k…nð(Üvä{1@vo¹Ÿ'®[Ud·¨x£yrÊUµ~†…;N`îW!=!o H_IÑÒjÒ†y»mì¥f•\ voñÌw½°]*Ëf]þ5x’9jd#O…~XLó÷ªÍ&ÝX3…]gä¡7¡zŠ<Åk gMù´&«¦ë® v©g.—ß±”I—f±zî>é“ʵ7\ôÚw|bàåA=KBe‚¼T ­3RÀxpÓ`Õ­ =êu1ýžWí_Ћä®èŽï…’óåQš+1®Àò !xRËëdb’¸7ª7Å6žîH®S¥DTl‹žÒCªP/¶¥ËDQQçˆY´îyUøn‡jø7âm`V™ f B‰Êy}À»=Bð ­ïÍ‚ºeóFË/ÿ1&n¼SÅ!Rjȧ€§~YmðY/ð”ÍFÅ+™üÛyá~5ÆêÏö#>¶E#‘‰Pv&>NL¿û™‚§£Uˆb9)r­w r‹ð:kP¬ªU¡^l+ŸÕ^P­_„ UòNZòxmldÊ5† ¾ü:bOm<ô‰‡dðú¬¶Re‚Ñ€'ã'¶mÊÎQívA¦?Sd¶%àíUµjÁëµ`È›Ÿ²tÿ¢HúkžyG,o½K Gù„3]¿)nÏW(x5ËrBXà`’Sƒ7>BðI¨ iÜZÄ?ýÕ \¥€çö­Ýª{g¼uœãíx§Ü-tƒÇ qŸ½0-{ IDATîfŠÏ‹dI=+ÈGjyÿÛ0^‡mÕ»gCGË_”NpÒQCêï±OÜÔq"UÁü~‡7m›0û—ãžz1Xø–ø)’ßåÅuÁöôøbã|Ø}óéZ£5în´Â˜mùc²7|/ëºLƒG"ó]~jPŠK‚Þœ·…Sפ6ÔjûeéÛ¶jˆ€÷(³]ú!kx‰ÇöÃS¡0«”£¯&±€%_)„o/n {žÆ˜ ¯øÖ0x ŒM½^$Umìà'zåöîÀÛDUE$ÃíLBr[©ö~Ó^äîoX¶õÑoél^Cdµý4šLô'ó tG £ƒwcv5¯ìzcn/Ö÷a߃ºx8ŒÁ»¼þ¢VžàßÂwv žžš`†A°ð¦}ÁS®q,¨Z€G§¼’Ú¼üè‹Ûz3‚˜@`«g_‹FâÁ•k™LùÏÝß›Õx·1x€÷€·x ƒw[”¸|w|†n¦ÁÈM7I°y‡8RäÆxäÅ¥‘—âµvîfxåXAúöçÁ} D -µñ_éÏ…Ôú^r1ÌÊ¥ ûÿ¾[ÏdJ±Wÿ.±ñ¼‹bQo_ø€÷°ÅÝ~ÜOô]qæy4á1 ?9]+d"Ì $é…e9¯ R…ŒG]/îÚÔ§Ù«åéHÜ¿E÷% Ã\¿”)•¿FêÜ.Bªs¼²·"à­<±NÀÃ’ ^¯×ý6§žéü}6 "„®VÎrÄàbRT‘œ.5Mìp#ÏM¿T¯È•¸Š•/ƒÓÁÊ?CÈyÕJôç‰yàT{Jðaðj2xEÀCð.xo€Œõ9ÄûU>£¥ÐvÿI‹oðä‡|¬,Í5hµ•Êl÷¹˜mÓX02¥9öÌÔ¾dÝ^ µðÂâZ]Olxþêß`ðZ‡;à-†‹ãÀçë>EEòj«ŸäÏV¬*’òª àÐ>€qÜ»üå5¥†}ØÇ­—¿€žâ÷|ø{v&Ê-þ*]ꬶ$Œ¥Þúq¯!¨Á«ï¼& U)úvž!&À¹Ñ0 Vo"»g]rÞlKCÎjÔ0%Åœžà{ßí`1`0'—Õl‹ÁsKàÕ)xn P.W1x°`|ȉº8`“àuÓŽ@’5$Ú4ƒ¤©ªg9‡‚R«ö Á£3"²È¡ª=Òúóid‹DBÁ,¯¤ç£oâ‘w±v³ý¼È2@ÀûGUê¼u ·l ›¡‹mÿšóCk@Nf’lz—æ¥àG¬à(È"pn¬²Åc†¸ ž6‘Ôñ¾±º]…ƒ|î–ÝE>ü`ÈÏÑRp^Vj¹ôÎ8š#ò V3²™´÷ý»Pß JÒ–F¯ÚVæ<Ð3 å/I)Õ‰^îßÙ<Ârjÿ×lK™õ#Zмö“’)¤ÖL@ÙëߨïIMšÆ;lÛ$ðz…™Ï€m7D’y°: ¶E]Ù»/£úÅrgwz»ù%TJÏ-‚¨†ª£DÀ{8"ð¨ @"Œ)…vvD/Á¤†A`R]ÃÃÎlKíQ<}ô:`Jt8RÄ7/!É+󳑸„æMzo½W •UQ2æAÁB1)¶åÇØÞx6u«B ÈO(("Ë]Mv¤¤SºÓýDm›ŠÄƒìžLzþ‡ÿêOµg\§ã…a^SïJoÍW%V•‚ΪrRÆW› Su•å!džmå—Þ@ÏËQC_.(ç1zð*>Ãïám{AJÉæðj[íû¦2¿Q)üÛ€L€—7Û«]­; ç%!hÛä‚¡g[‰±­“¾¹K½’E¤õxˆ"±ûƒ9°Ä"C.D‰©s½¾Õ~^Àñ'+†KZvö6Mkçyº®¢ëEQ¯Kn*ߟ꾑y±”âÀ®÷,Æ-üàÂö•êÐoÚ“,‚'[o÷dòüDL®¶Ã°m·¿¤âJò¿U‰°óå¾Fl§Ëïð^že“è]—ó?ö/]’mû“)ðT‘{´º£@Þ`³m>cªLf/¶4òNJ_lóÏʧԉY^ùžïu;±Î‰ ÉW;7‹'>íîº%2žp_Ô G‚Ø”61Vag-šÏ.¿º)ðh¤YCqvSÑ_ ‹à.ׄ_Ž%H„€àI«uH^xè+«¤‚!”(¨J “à©G£mU=Ÿâ",±áÎGw:yxÝÓÈ'æï\Ä…ÕÚ—S™û ú×ks@‘Uðä zÔÅáùT÷ný@ðj†­çÑcA¿NÙªÒ]IüUo¶õИN\“û—±¸‚ОÔÁò×"‘xBvnTœÇèÖ¬‰@\Sl e½9}+S ù<–ó¢dÃyx" ÆðºFžrF÷/@9öˆýØVn[vì)¥æ€mƒ*9Oñ ¥¡@ŒØï-ÚiN‡¯ç™Mƒ˜qˆµ…̃ÄaÔ\½½^#O·M¥ÿú¤üœ*þ%lK¿W'oU„œ}8 jÆ­<¯Z0ðèA üië#OKdpï2š^,˜Ë§¯óÊZðºØVfªGŠ= Nˆ$•ºIvÝù°ù“ò"ˆÁX^@©t)v"~îÞÙ¯÷I®wþÞ–Ó# "kàW¨ÚÝŒdº8kE=«é[û<úí¨W²´±ªŒ<xðàp"pÈxác£$ô6OÙV™ó(x[jð${J÷æÍnÀëÐê*…ÌÉ…üsà‘‘Wìž^T9HZÛ¢bR‘NxY1 (UÐ5ä8À§J¶¨ pÃÓaÛïêÞ¤x܈ÁSRJa9Oæ[ÃçîMn àÑõ‚§§IîQE¹1`[̬Þy¼¼PKxþÄ™D0{ô¯óUàõÀÀ’¨Rw äp»¡46¹ˆ9ð|pU8ù³½ÀÓ³-'µ~Š´)Ž*Ê͸î‚4f\—3Xø^©Äîõïó37Áë¹¼Rª¯/x’CèÅD†¯©©,"Hþ?7ò&Õ32ŠŠú<ýŒ‚ÔüSDCΖuîéq3ÆV¿‹\Îý/ò¥¹XôL—z¦Ó€×Sr^WK¹¢ò1ãXsà‘[Õô­}å¼½ò;}¤ 9r*l5¾×ô^"¦,€~‡£A#Oî_ Ò…XuN‡O¸'tjÚ‘ Pmn´oª ‹[ô’ŽlÛ—m)²¼6”ÊÇ'¬» oC3°Ú‚Sòl4²?0áÈó‡ö}éæC¼wÅ"‡æú—ê5±å#à=Àà½#};®Áu$àU!ůú#PÛ\á®Î‚á„ÀºàéØÖ'µ¶Ôª×åáñŠî3#œˆùxÚ±)•`øÉlË‹ŽW÷ƒ­'Ž a÷'ëun}(GŸ¡ÀkJ©·„ŽUÈ,ÛªÀSízë~bMŸô»ŸÑU—bÛqËÕÞ~ÙØhd"´‚2xætÈV:›L¨À xç}‹[ ñò„þ´|‹kÞb+쾃[׆Io>äÈ+è>âQiZ‘ó–õ­ý Ÿü)'u]­o¡cÚ~‘ùÀ¾w‹)‘É Ô§¤ž¡óÏqñòúè»\ð/¼¶k,ï2€wÛpÁµÎ¶@¤þÞ}Ùj.Å´fä©–Û~l{¤ ÝÕO׋.ÿ¨1ãÍ Áj;?w‘]ïô\,žØ¤àqÇ}ľۼu=x·7ÄÅQ‚ljíðmEe<Üx~d£Â†ç—þžë€×b ¯4O;òîòš8ZðÀ¥±ªúLØ6f…m%pØž#U#!·Õ•-[¢œ©íŸŒ.§Æí=9tŸG/!gïL†‚ù<Õm1x}»èVw›€Ûµ‹¢à.ú2õ2ëNüeÿ±nÁ˜š"Ûg¶R4„Žï!ô þ<ñlqkîÛçÜPˆ¨g-PÏ0xXH~Œ?Œ¼vWÃ*¤ˆ·Ä¶ÝÍÚ®YÝùP ó üÝO»®õv±-Ìì4í…ŽƒiÏë'"q5Ûò>ôöÓañâξ¶ÖBLM8l[n÷úcïØ+ãkz«a䤷;¶ÅŒ¡S•³xá½n®Þ^÷œç Ç= F 'ˆ!gaT n„¥ÿÂ¥ôáXØ6›K{˱•óø0ÿ˜çÄ”›?ÆÔÝ^`ˆE–P°ì|½[|а×N<‘$ ¡ Ü3×ÝàÉÔ <rVÓ­j™gOèFÙñðÞ9’>w0“ž›y3±ÿoofÎëÀ€·Œÿܺ%>®q-,‹µóö[?LJãêêò»¯M¤»ªÖý¢ZùÈ xÝÍÚ{±J;5·,w atð¡]®é ̶¬ìyË™÷.¢}ûñ~3ú]̶Õ!Þ”RAùX¯ÚÔø‘]HqÃd]å^ržN”çµ§ã»±êHr¹B+½\>˜åŒ×û¬Ä¶pJN$ESd´ñ½{¶MB]‚>ê?74xÚt¾—}É»BÎxå”L¦\2Ör<Ó±hK)à… Ñ£—¤:äÃÓèÀÃ:ñ¸M•Y´ÙK>í ^w³ö!YÚÌÈJMK™ò–¥öˆ²íè:²ñmmÅD¿V[§ùWW·KÅ".¿ß¿€ÐqÇ¥üP/Ú!£½Û]˜áÕ„Ù¶m…m»¼ z²­’H_ñ2+’vÇ‚²büæ‘vV˶,"ÈzÈxøØ”kb*²ÌG£q“l»Kðv RUEÉ·{³íkæ°nÁPÀ“™µ=á(ÈGò^¼£ùòX£;yÑ<çJv)}áÃ(É¥gnÁÉ^xíbÎk’Rh ¢MÃç6§¹‰Ò) 9Cª”ܤ=B—[&žÜøæ²®7âR뚘€+ Ð(“Í.ÙøC?89ü{Jd”LÊ{ëDŒ €#Iˆ-GªôìEä@=ùÙƒ'Èf-x“ªö«ªi¶í1ò´OÀÊ­>éãYb8€§­Èިʩ,Sšf5}É)0Ý}`{ù‚˜C¥C1¢å~Æl ´¡[%èGÈÉÞ^¶žÁ5§¹/·V¥R° ·¥J¬³ó›1ñD€G´ù¯Ì”¾ÖŒGÞ€éÎ ¹ô>ëCM°Úîêñg;"¹õF–Iƒ‘{£õ(Q0«2B¥»2»0ˆñ;PÆ;ýzôÕP°ð(u¡4{bo¬~_N ËoWðbÜ'·1Y¤»ª¦ë¶& :Èbow3§éXîÔ0ä h>QÍ™EmWþ@–€¿Ÿ»Æ«„8ü[=ËžxÁ¥b[Ùqñ²?]ÔÛ˜î¯DÓl+ýÑ;é‰à$Úò[oX¶í¸„VEˆ9W. }Ou)„gè.èð bêüÁÿ§”!eã¶­Ià»<­‚gDð²…ÂNµ{ÚxMï2xò>a“…* çÉú“¸¶Ð¹ÔFäåîð³Þ/¬E’“xº[JÏOG¡«‘'³-°ìåN-`en—]!xQЯ¶Û1ÖÀÓ>AQj”oöH]òOýç„Y†Ò¯ë˱Àƒu`’!¦=Žþ,rø¾~Tß–ýée.ºÜÊçKP—`ÒX=[ìT¡~àHåJ#qÓdrs¹LÙpà}QúѰ() çôfÞr…EÎ@vé‚1lˆäèzÉ.½_*U"Ä™û ·ôz4Ò=òž0x2Aè­Þª²Y3 3ÄŸ”X“à ŶEÒ&hèíQ(]~}ê”Ó/eì&PÏl,ÚÇ ß?ÿÏuäõx™L¬ds*¶õIQR‹—;åõ”Õuôàii»ZižäÝû÷Șmœ¦s‚‰RÄѱJj$?pæc¸B]È‚'Ó>ôÕ,z?])G"q(sKrÊ£ùÝÆ¾qw·˜ñKö†$eÖÿŒ?‰õ Á'®-Jƒñ‰2k¡3†¦#Ï× žr&E}Ôr³ )/^˜;{PLýÑL$ ~œÍ¤ç0‚øäÕKWä4œváícîÆ[ã Œ ^ÑÎ×íõgÜ"³Ø`ZO»k¿+Ø ±Ì¶Z·¡BadàiŸ M«ò2AøæZ*ð¦§!mΑ7¼½ß±Ÿ9žM.ýø¡mMñöä@ŽîaÔEûzK»ëɯËsÞ‹5qm½áÁCr¼^ÃC“gZoíüôD|2XÈ\{2õ’Ç×[bøòz‹»X—Á»ò`K¼]Æ×Z¯Œ?hˆÌøâ»­Qy ¨N'ÿoBíÖªYo ƒ‘âZ@ûEh—~(áW(…ˆðQì\ãXF¥ùùhòTÇ1·ëNS>?“H¬ütR®Êõ2«<÷–^x±¡o­.¸4¸ñµwqÑ}ë±2zð¸¡@kËÖ(Nå¥g ¼n/§¯ ¼1ÙˆSëöjô–žŠºÀ´ž¹kc{ÜÇætÅ'K73,Nîð{öåoµ™ÜÛjÁ«!eבfehvô 38z©4?û‡\Íø&ÒîÙÝ:²wÝiâcfÛŒÊJFž[Ô€·(¶õ­cžÆ£o5v^L…ÕÕŸXZ0ºG^àJx2œoƒ@_ÈïÚ9݃<6v~&šœ„½^ÔÄâ;§W-y f4 ®äòŠ=ƒ‡´àñá-Rx ƒ·(Êàù ÞÛÚÈ£8‚³ŠdaIn͂ǂ§c[“vœ¿BªF‰xuE‚,ƒØ¦Ù^wr…6|æÇP ’ªdJ•ØùMm&QS¼¢{ KC2x<¯edѳ]ªá_XÏÀ!² <ê"ðHõ’2a.<û¦A’ß 6ÀÓ黯EÏ&ŽÔP.uÀfûç{>¬DÏ$;àᡎð xµñ-±þïr q—œÈìnäQj¯®šÍÚ‹muàU…Wè–íM^9ë3NôÇS_ ïëü(šr®½†˜WÇo¡¬Ç;7KrúäWUàÕ}î#^¦à5ì[âiÎàr—[¾uQ'BYÏhÇiãX9ûj²óFCŒ¼î¥H7ELÙòa¥ÜÜÕŠÎfídl>c›–?w›á ÞØvæÇNÏ`Üùƒ¥r,ªy¡êÅ8€ç+@[áâ–¸(ƒ‡ <òÖ óšYyMÀ‘&ò!—øÌÉ÷¯›mIC[Üæ ¯¸˜îJ:ÑU§d’rùñèûViþÄ/â¡0ÁLGO$6VÂaNžèƒ‚(ü`ëáe <÷m ¼æ0BòPàµ%3žŠr«f3Ãɶu%ÑeS1Á«|ð<ÞÙÑøÊ.yxƒ[L@bx<Ý뎉Ghü"nò²ÊŸU³mC¼âþ„€ç&7ó=\è–Á[lpnä<ísY¯—‹B¥’Üð›¯ÇÈ{U^Ç%ñoUŸ^Ó†ï¼'ŸJSv5(‡>Σ/?Jý‡Fe'¨d£bÛçs¯IàKàíð0p‹u2òF^7ÉÎÝùÕûl÷3÷'»!xŽ+:ð¤ñÖÆZîûR“N°vä ?^|*à— ìÉX‰ý]äHk"™r4 vøß)H½Õw­×8^çž>à¹Ô?Y9¯qÀs‹î[#’e¶ÕË˲¦0¶Õ.uù³@× í5<š›vE&ÁtwW¤Ž<üÜç³éŸ”ggБÿ_ù™oÿå<þ˜?†Þfjè8Sô¡s>Üf¿]¿È?ç¾Õ:>¾V<âÇßmp£¯»´C%i²Üêɶzð|ÒA[1‰j•èÒÏvÌ—6›ì‚uO¥^ý ƒ×^€X‚hT‘¾SûÅS'àIF$»á.óØÑ+ˆ)îs2x1<öœ2»e[™ò«ÛºWLÀ¶µ®V‡vßž–˜jK!Êð£-ë/;»PÈ/4`ÛÃXrM –2ß‚Ü4° ¤Ks¿N`#N+"„¬Ô ß­Ÿ?ΈµS_áÅnx¢ys^‘gÓ<â¸#TËòJ"hCÎðàr¹Ãq€Ç˨dã/øŸ_HeJ³‘ø‘l>?öz¯ž5±Þ°dQÎëÚ¾MþÜ:xÚ·öiú­S/øe*âk·=ü~?‰bÑyHÊäE ïkÏFOYv8^*Üݳý¼0‹êÞô¶ ^x($ÉÈk·s«%Þ,xÆl«óU©Ó¨))‘¾h¦øµÔZòXoãßϦ<ûÞ/Íþ!ôVò:¶•Á3e 6^µ÷WÍJÒdªZ$<ðtržü@M<¨èмî:ñN¡·t|¿4‰!V•r,¦S5oK°õÊpiH£™óÚÛ«EÓàŒ<`>­—œì>·ùK¥}Y¾ZÁLÉ{l=ØIˇãZúÃy"/à‘÷úl2QøuA÷ ·¤´3½2\ÒˆÀÛY5™çWž&§¼v&oÊt·%/_Í’?¶i¶W"!ÖÉ >cßœô_[Èfñôê¾û›ÿC2ÊéÙ¶®/:<¡Y9cÖ{H¶¥¤lÙR+²qBd5Ð…åC|›:ÊÜ”ÉÌåò¥rE϶Vh·àE£Ýί|—.‚‘WÔá‰U‚çn³©ÄÐ\*vîuV#J¥leb}'Ḛ́œwu%W0ù¦d<¡ ÿSwŸ‚ï#>] IDATuðüêzèš9OQ±®sñA{å½FËRõä"æ(Þf›Š0Ù£™÷˳( ì{ð'?¿óñ‚9 Œh4s^3–4϶ûEꊢi6ôI¯)Í4m£®“»È‘òxåÞyd¿{þ‹˸ÁßËc¶ÿ/m m¶¯†m Ó6ý¬+qÙ^½MÁßF(ǦHÁ3ØðƒÞç˶jöÊÛ‡`,åwÓ5ëi;%çBê¤ zöœ|ÀÊ3Y90?Û ¾cöhê=Œ[$þF6—ßæÊÿ`íE5dÕª¢û\1›ž©ØVKê‘'?M³©òJ–éèÍAý;Ri/zJ*X˜¶±Nö³ŽU¹ÿôq ɇbC¾i?ÅÈK¶ÍgDR‘_¶?xÊc)ã±FO‹êÇzWW30 «òà2ßÀB2T†Œ¿+z«ŠLE3èÀ3¥ˆŠ]¾=c;‚ßݼ×à6rá•ÍvÇõEݵ‹=od›™b…T:=+îÊ—J±˜Ñ›úz€×£$Ð.Á£tÑl^xL‰®‘'ˆ•™Ná¤xEÍh êºyÖ?€›÷YHý#ïСOõêK_T= >Ñ07èHÁëÚºz=g®l—ôúÛê¶ ÕàQA¯+‘>²Eu®=\Q×=Ë‚÷žƒ'Ñûýøç©ÿ¦ÿRæðýJ,©¸d¶}¬¾¯=Jdä ¦S^Ñ‘§Öéñç¨Á³+.JˆãØ¢Î*U}"Ó,C:0xž_yç£X=[ÉåÓ«Š<ñ³OÞ½m`²ò” <› wxÕn¶­~¤ÂPr,j7ìï°ºî% V*‡î·¤¼„Œ³g׿,÷®sÕþ,Á£§ÌæC’ÉÿÓ…×wåÿo‹YM¡.B˜mÏ©ë¨ëwïlìÞˆ‹dJöL;#~ÿ²GðN£SáTåL<þñõë©ÇÏ<™*“åYèÈ+Æ›üðJy34ö›{¼ï¡<ÆïXRRL;`zîyçQd³m&].S¶ýüÁW-°­O”OÝ[ÈyEyËVèÄ·íµkäö¤~EmXväfßBS£¯Ç×]þ#ÂÇw7w³í§ª(yJcßÑ8ò¹ÛÝ=å.`9ÁK åõ t ¶Ò\W¯âÕ¶RŽÉFWä&{LƒÀ;¥õW#ïø@p‹‡•ú–#Ï(¡¦öÕëËæÁó‰†IºÙ–z q=‹G^gÚ‹œ~«Û†œ*û<^["SoN¬d/e Ã4Èyr°2ï&‘/!7_÷ÕÇÃ͘wö>æjãµcaÔ:æÛ=x=H¨XyÍÝl[£‰ßQ]|Q½ 9Æß¼Ä÷¾ÓÌÌ$žîÒ$ä,ü›£¹L¹rVyëââü@çÝõ–o½Æ¹á¹ÞEëëëç‡×.Öü¯nhe x+fS!ùD:òxus×Èû¥â•¬Ò)ìQ.Ù™1}L×V¸/.¬ž-¤/xó°õ§˜ þ¸ÔÆÁ«T=[ݼ†à»Ý8†•£þÖZãaëç[Üjí;vî¸ïö“O(•çYóàéG^/ðjÊ4xªsŒ¼Ž¾ñ"ÓÒ×)ôkÌQxÑà—ÒwˆÕ³7®®æ·K•˜2òÜ ê­K#o6Þ7…·¹Ë¼ÃÇZÇ}k#¯ JqMÖF^W Þ…9È‚1£éùÙH<ÊåS%ZU\ÿ„Éð “Á{('ü÷Â1nÓý¤ÙÖÐkb(ðÛ>Õ¸JèØ6—29C‹Â| ÇäÑ!£8<ÈÆBxZJ—>œ™‰8CüoÜsü?/êåj¥JÁ[| ƒW‰zö o€w‡€Ç=9R3qº;hn0)l«5áëÀûY÷~7¡Ù³Üæw¥xÝo ôœÑ fTæmð¥šB¡…kÛ’³ÊUʶ571 Ôw±xÞÁsƒ†±.Þj­ çÂwÜ·Zá€gTšz×àÛn—ŠÀS ¿¦Y·é­øGéÒ§;ÂÐèÛN¹ ”¥ï½\¡àÂ5ˆ]‘SÕÞ«TNJÝÖÝ5Ðiê(\ô¼‹WÛPèêªÖW¥.çªå¨ ¹àÞ±ãXlœí#¯Cxµ5Y©Â¶vM³vµívÔçPªôØ{ÒMÃ/úý—Rs³°ëÕ³û•ŠöMˆ†æÎ Q‰Å$xðëUÅ3 óQ{ˆŒ¼†žCÑMµ#¯¡ÂXÖ^-‡Ymn¬ðÈÀEJE 8›a)e*N2[Tµ‰«훬)y{Ð(Á+¶•Í*;ûú<û`ðÆxUæJ-xB‰zÇ«ö/$ð¢ÜƆ¸š/¥%àüÝ7`]ÈáÉãEÎ&,|/]žœ m\)Ä7Ú:ðn :¢‹5¶Ý¶Âµ°¬Jl«ÝѲ­R¨Ko*v8nB ¤^‘G,ãdá±fœ ˆá©²ÙXÖéš V•ûå˜öMiÜ^OzRà‰OüîIyZ1cBÝuÇÕUŽu/×~GìX—Yí·Í×ir ô]0„²Ä$+Í;¬÷Ø]Tè±AÛ(ÀËç £¬‡墨Y3ò{”ЕöÝε7À[®ÃØŸ¦?<Š+õAÐøåó⽪ö=4h‰z¶ý¡Á“¤½ x¥^3ç%¯Æšþòç ÛeÜ>é7LêrŽ¡Ào›çÚ²¥K,ËœÚÿÂøžÂ'b‹õÝ;×NîO£ïlܪœ'ƒ§±«ÁRúÂ+Šr‰„qj£åO¥çæa;¬xZçF4±?p0Ÿ§äDâFÁ›êh·àmbý,—ïâ©ah¯Î°ÎJ5l«$éO³*ÂqϘGB6§Ý59–ïøy(%rëgejØ í~ä5EËÍðd× ¾¼ ¢æñˆu¯j”ãwD·ƒ~Æ+¶ÄÏÙ6Ã0A¼îâéìðG.ó^¥OŽ ˆÍ¨LRì(À£ï¬êw}A>êNF€Õ3X0Ò¶ùîÕæwó¯?{€·Í±lœÁGŠ/>í?l«4Ï$B7 –ÞTC£/·m‰mcðÔOÔËEZ~‚Çý ŽŒ:™aˆÒ¢Šbö£kÞ X=› ÝÈåïý¶ÕÊÙø©Q€Ç“jQš‘×UxEE¿Aõ_‚Ô¾<‘R"cX?ƒÂ]g:ýL2\1÷ê#y;¹ïõz|౪f…xröˆïº|/°íM¼xb¶=eÝ n(åžu^»”¶•Oħ^àć‚R¼áé Æÿ5ÜŠ4§*T{’àáÕ¶ûÕ†3Jè£ïSä’ øÛ±º}ŸÌ^¹.Ï\¬ˆáu<¼÷5'3Ã(åAvÖá°Ûÿü¾"«íI©ç;WÈŸ¿ô‰`†Rœl¹¯wDÕÀÃb“ì`r^'Ñe­û<yÔíÄ“”ßïÀúÙëHµ”xŸ:1³2fJó±xǬr%Lþg‰B!ÐHLÂ2ïÅŸ”ôÙXØDèÅ•\æýJ%š… RׇÃxäCg•Xûä³ïzîo ÎܘÙéÈÛC“³ ©Àë¼ß“yß°8ò´à)|«tü©""îñ䡊 $ íI<òÎÙPd"à½ééÙH|ÿ‹¿—Ï¿_)E,Ò› ž‘•~à5,„cÐ ^ñLOÏ ‰”bC,4½dÿw _Îçß«TÎ&ÁÂà]ÏY²Âw<‰”yNîÒ]Gãœ$ax£Š—ÈÜDÃ¥xúÁ&P*E£àä“Ï—æå¾Ý ØÆsãYo‘‚wÛ<£ÍµÏwÁÐg#eA•Žü}ÃËÁ&ÕŒÄýP®Ù!Æérd\ Þ+$j#ïXû‹ø65{}\`D7S?æ;žn9»ø÷>±ísÚx‹܆%HGžP¬õ|øà),çQ Úo[ñ63Î Ål›Ë§=Ææ<Þf›qAn¯m&2ÛgméØ?üýmáΫñ8e[<ÎÖ@¡XÐxÀóŒ7^ðŽ£Æ>7nGÅ·O…´:ШÁk_ÏZy2dÛŽù ¯HT4¼üeA¬T"°ë©—Ñ=s(‚ 'ºp¨ã:É£ƒÞy°"ضcUY\‡9om«ÞâÜë­ñÅFë·1Û6Þ>ïÇ ÛÅzùÖëÃ$Ö·žP±($£nT¦Uà©L*Æà‘Ý ç‹øè%ýW~ò?K?üü…tifÊE aÜÃòJgÁ à-nmµÂî-Á½V‡4øßŽ%%ßÚã†Ïý ñ¤æ¼œ…TH„8 *NúÒðä÷k]ŒÐÞ¤ØÎ‘Ä=V{É7/—N͈`ܹ)#Ÿ]ýëÕ6­ ^c]ð|kuXz×¶„°¯°îµ­F²ë?!ðš…]²­.a¥Ü­Àw aÒÁüýJy6yºF!€?˜.?åŠ0l6•Æ·™Lüì7~´ùÎÕþ:ÿ«ØIúüwx—)x¶¼Ûë‚Dt÷ÚÃwyý‰W‰Œmñj{Š®¶m”jÆ—ïÅ †‘!R9úJÙlìL(Ž{ørN&²xº»GœU:l ñÊPø ÃÕoMïò»¼Å'6òÚX=³g4™¥:Q½Mð„ìâ¦(Ǫ›ýÚ”\XØKc-ã4C!…Y, ©jó¥C'é 4,ªxÒœPâ/ßýƒ'ÖŸÔÈ+ÇNí<"kðð£è³ueË–7¾|Ïö½J9¢\ÙMŽ‘W"“ðøpÖ }»ûë{åêÅd£³ÃY[—À+ªÁ»-ƒwûßðГï®Uð ÙVYbߤ‰‘÷¸œI`9Ø$Xí.É$€Å;žø–R)ÛôŒë´¡1w¬QåX$‘ i4a¶…T dÁh¼ÍuÀ[{ Àk{Rl{c”lëñT¥nÅ ¾gšªm±I,Z[¨ßÁó„q'üê/ë݄̃ ¯”NÒ¸¼ÕC¶ÖLðŽÝÁàm=©9OˆYÉ…džò|Òn ¯h É1é¼5$Oõ‘a_@Žì%Ø>ø‘mÇXD½`¸Éȧà= Û¼õ·_Åà­=±£`rl < Z”àŠ‹ÛóúÄÕl–ïÙ½ Ëy0Ý-¥çf#‘Ó~î{™¯5cÜ/­½§âa-x‹ÂºX àS<¯v·Á»Á+ˆ]4‚9o%oÙªÒýæ—hÁã,ªÊG=áyù~Ù 1„«µàòÆLPJÎéD?™¶Ì+Ño@Pæ^ù¤Þ-^«&† xx[ÀÉxÙz²àÝ—xÇ…»qa”:å,•÷zëp»m`bÆâ¶Nº¥{-e››é¤œçæ!qÊZ£~ž€·FvÐnã5—€×ð –MøI€·q#×…eðP†B¦Ø£>í¾P&÷F(·ÐïÞN§Ÿ 8¼À ÞEœ¹Ó±èY<ñ­^;ßÉ!…<ÜÏ½Õ Å(…pýû­¢›7@fV+i€ŒF^gׂ{^o߸j”Û€8G^Á‚œ‡ü¼è¨FúÔÞHb³í=Èé“ »gÔaVð‰vñ) ÞÛ¼ó ï±È÷¡Ús¾!ÊØ|¦lÛ=òüÊ®…âßg)g6Ûà9T’ )Õ|Ð[:ùV²r¨7x7n¿w²× Õ….±¤!†× ÎÅ‚ñkØéÁã=%¶Vä;öÞT*ϲ}¾ ÏÛ4Äüd±œça+«yáîÙ¯ˆâÓÕ^/ô`P<‹B£˜ó¬¤¶*tk­t•XzT6¸P&&Êvõ+6ãÇ?–R¦\®1GŽO§gg“~†w>[gn Ûêé³o£m%FˆÓíŠ1õ¢­Tv¨õéà Ñ~®#Ë_°‘Þü„©ÄÛŒ‰ûA\.ÅbÀ¶«ùL©Úë…Ö†vÓÛ=x•JÌ2x<=”¶pl6lÛPìËýÀ+O÷ùvÕxÛÌŒ‹—ÆT bäƒA¼`¼W‰&ûŽ<߯> ¶µ‚)¬a[–4É]Þd"´ßm%Â_ÌÄÀ•[â!ů+à_N_¸/ x]ÝLª¡:ª Rèó]m»šècû©Å¨o¡®ƒe1ÏïçS6|æ?šJ{1Ô?íßÚƒéÒb¤nW>ݱªè©1t5 ÝƒW¶Ì¶aµ†ç òíS kØÆúUxò 8òX\&¹ˆWhóL¼7ÛO#yr$âºd8Z.¾¡,»}³Ý0ò¹àù.è «óéJ§ÃöÙ×C;Pÿ°° ÔdÅœ×Ó}x]l–{¬)ö¨S}{0b[ÊÅ4ù³K»âš –RXät9§9÷‘ЯWó*«Šu…zÖGëK݆@ù…T!g|ßöw7A¢ÕæSäJóŒ?6Öw‘Ë/Q°íË™2Ä„Žôz¡ái÷à%®Z–ó´à9Z¾[<5ØÕ < õòٞî+y¶PHm†·N#yÕé%Ì‚‡•Ú¥ââ3`½€²¬=¼¹²(ýát¤”¬kÊÍäVÿ³(|xÒ:h”F1çYIa¤g[–êH®b [Kû dΠ@ÀHìëXEí„ýÄ\þr­ð­ü{̶‰ïJwx ~Á.6tÉâŸ,x#b[ÄR+òß¹{²ù^Ë <”àc¬¨y/€4cã»1×s™÷HæÁ••Žz¦±–`ðê§>Cð„ûåQ°-¸­§ rŸ×讣±Kh‡ ¢A7Û:;±+^(„&³:ƒ&ˆGsìërìýÊyÒs‡0ßWr™{e0èÊyk¢pî³o³wüÒâ(x Öz¦•]ÇMƒ¢oWàÛù2ûº‹ƒùn.ŠÙv"@*=Æ^M|µ°º-T^æ³ÏD…r-=£°­Ä).Ó‹=]S—7·Ã‘²½6í„]ï\æBzv*2.¥<¶yçÞú³Fòê>ൌ²Ïô Ýƒ×.fHÚWи|2ß–;l/;èÓXê×6‹µ2?ÈÜÓ3.ÄøbU;KBó‘HÂ/¥¶èͶ²Ï<1ðVÙöN£?ØhÁ³OÙŽ=y*ê>)‚và "ÛgA<Ks1ÙMê~•¾Àe®ä¸&>üDš>Ç‘çVƒãBºëØPÙ“‡ W§Þl* €&‚<”Á.¸Ã¬~ô¬(ÈàÙp@LÝ%ä⚸c"iÈæ<£¸Ïah¿îÊ“r?¥[¶}÷/ºÔ±u",Þñ^[4>1‘Íf‘ý$øŒäèNRðÜ"ï÷ƒ'ZË…„@T©©ÞX±BÝ¥&x<墛.¶ím&ƒ˜mK?$©¹øh:væë‰Âª@Óàµk=¾?Ù5zgׂ®x¼Á&Ó•ÇïO!¨On™LwÎÐO¯ç½‡ýÙÿ„NDÏ]o…m!TOxæ³oÛ²<¦o¿Üßc?=úB–ô³C³,f[X1lNFb|¦ö|ê 8]D€m%/=Y~ "óÂ0ò>sðÄÄÁÓŽ<ŸÜ]'‹O¡aô³.£Š£“››„¡:R¤,«k"˜Í“Â]‰ ˜øª¼z¢â?¶,ïÿØU³ìT'±*'ñÈ6Œ¿Ï¢XÆêd4f¯/A©Ö3§_ ­îì´ _Þ§à=ðȳ‹ŸÏœg™mÕÈSÊÅwBš˜±­”Ù@Þé)'ãGX={мéwåÓ^v/^”ÿ’yó”?”Ïo—Á¨'ÿZ¶D$Av×|àYf[Fí«­¬üù¨Gˆòànk)º <ý?¡i»÷Ì› Ù|:=ÞA•œ·%†I ÏCHÞ±¬žiÀ£>ÔM–Yµ7 4ש8êAEؽÅÓ]FNU #o>‹*r^ƒW‡`y¢ž\¼†)ÜHɸäßX}I5xý‹°|TìuÙ@’•[ljœ‚[hiz&²"tôÔ$8+ Íùä'ÝæVý•0¬Rkku¬¤Ù?3ðdzaàɯ‚§AÚ-o±WÆX“šrúÙ¥ Þ³.4ñíì‚9ŸÝƒå•X<¹±’UV[ôÉÈ]o0"b?[ð„m¹¦‚ðTøPðf¦ä£¡ö/ŒÈ67ëtÉÙ¹@ucx;z1ðÍ<©  Òc%UÌðÍ[ »>a\䋦ØýȳTHDݵhó= ¯X£©ÈT ˜#Þ€[6ÛgQ<òr7wªš×^-ÐضhõÕTWvv-|òQÍ2bÄeC,XU T/™À¸åÒ¶gNDO'¦®¬%Û+×óš²[¢aåäA4¶µ*$£¯RÈ|TìyÙ ÂÂ0ä§å‘—e"Rç¡=Gy›' ™|rØ=;£Ù=[7Ì-8v ^3yÄ,‘Šm roYåy,cîð§ñª±`óÚˆU³-Û&7>îÈy„>/ð¶o­¾%‡äüž½œÔpµ¦ IDAT™PT™T cÑëE~„ð¹AB0ñ¥ç¢{݉•r;õúßÊÕeeÚ:bJC»ŸónòV_ØVRè®…ÀÓÉŠÈ"ð½¶Ãø<ïym&âJŒAFóéÙYvÒlc‰¯g¶KåèY*$Kw;î3ÿâ£a[«àqÊÕ*6üaù¨&cœ&ªáùŽç¥zÃ~äØC~=u&¦I*.,çiØÖ0ÁÛ`Úx¤Ð£Õè)x'åþJÊQQþÆbÖJ÷”lÓ‘HX£J³QRé1¿ô£3 ›Û½h÷#ó[}³°ü—¡¹{:úݲuX !IJ.××7p“ îòžƒéª\K|Ø|•³Ž™B#ó,æ0SÖ껾¶õ ÖÅÄA¹ l; IàðÈ;;™ØÚÉ¿’9ú<Õ³“ô *÷TW=¹ÏCQ †Ã±œI±ø7™ûJ©‹ÄƒÙ\æî_Æl®1Å…+7ršÕÖ"‚m­‚÷UzÀÉ})!4älbÕŠœ7‰<ï=ãBþ—~·ÆðžGùÒ{Ñh$q5K䕸çͶ„š‰I«à½"ÿUÒJÏÐ]GjR™¸a…mUÉAœ®Ó+\Ê;7‰C¥GŒ[/ò]|[ëd·n¸ÅbøŽ¦þñHÁèÁŽ`¿4ýüèì_t¢¦dð¼³Ë‘ŒÝvØÍÀl[–ÔÚ\¾tè©È™¿¹]È ú7jtÀk¹ÅZxQ£1:ð:( x‹àQg ª_t\B¥3&ôU y mÞéÆQñ6ÏônRw½6äü—ßÿM›üùÆ Ym#]>ÉêT4—Å€wëIƒ'ZgÛ?’ÿrôæJ+Ápÿ¤…Õˆ f•˜á±°÷+/ËFÎ$‚ßÌa¶…­+¹îC®'Ò¯ÝyFe•GÞMë y´«Îz!µ‹+lëåYåØq0m›qÉõ¨K{#xÁXɧ„JåG]ë…¼;mQñí~Rà‰œeõSOÙåf;üKÚ“í«9Kry"‡'ec!F9{ Ÿž›ÁËÄOѵôýûÿ÷½ÅqÑÊ@ðÔXŒÒeÓ½z¼ó3R-øäD.do¼Žfî•æ÷FÀ™[²Ké‡^xªP ‘´»—ó¬<<ú`eÝzá†4²«¼¤lÈåb ùRiÔfdÿ"’®®fô/Òž*äûI'nóVÁ;„Hå•‚ÜѲbO–¾þ2ä5Ü…=7)’ª6!Eÿ”>rEíYÿ﯌ض^Œênñâeá¹0©±„Ådx¼úÁÓÜwwlkSb¥D]¡®½x« Û´M:üRÁ³ˆ?¸ôAM7Ðoñef2±‘cÑx7ÛIµÌâ¸€Ü Çñq~]D­§á©jöaÊØXyq× ·éEÇÈÿô©ÅŠ,Ù£¤EØ<Û2LñÇñí sPöË+K™É0}=×eÏÃ#oŸÿ½¼ÖzÎ]«aðÆí­cçœv^ÝÈùlàÉw·.çx\ðÊþ#/½2dÙ Ûb ,¤Rs³ÑÄÿOÝû¹qÝ ~¯ ˆ¤€…š‘tlÌp+V³§µ½W23¼dÁ9R1U)i&’Ùõ 5ªÚ?Žº¡ØÍᘳ©Ú,'{Ž8NaVùÃ,ósUÑ '»ã³s+”ë€ÔÚK«lì€"i@¿¼ïëhüšü˜þÚ6€îF÷ïõû~ßûþ€J"Éhæò¸ ÏÅÿ2“áÆ[ÂjeN:Iá=”.ÛWKüL /J—y’HÂj»¤ý·¼Þm[Úmõöö qÉ–‡È¬^&ÀYÀæ2ϲ,;€(–¯ÅgFÆß–Qû9mßm•ä¾v¨²(¼‡à7õ˜Â[lçÔ?¼É@¯ð „j}Jåžò’~ãÈ—ù^¼ô«^ù%Ò –q¾V¬o‹bôô̪ÌÅ©<鶆–ÿ ,´ÂÃ:¼™*my°¥À[jWå¶WxôTÊ|W¯ì”ƒSOXŽh[ú!´Ãb8ÕS·¥“z#/(ÓQÑÌ0lCîäá§1Qy>þA¨<|¯ÞuÞÌ áÕ¥Òóhû ¼zš_6z52J/#÷Òò¨o^”ÚÈœpDG˜á³V„~9D¬µ¿—ɾwŸdª¼*SÂ×Ux«ØnßFx5œ¼Ñ«¢G»­vM¿ÔTdµ%ç1Oû²ûÓFÁCÀexƒ …Ž›Í7b´Óš™±ñ Í0ˆªBáVUx·ÆÏ¾Õ#; Oó}—#šW²ºd ›ÿ®ÖK·­‹cÄ ™ã‰H†…e èÀÙñ±P8ü?,´Ü‡ÖòfxÂŽÀëÝkº­®¸û^o8-Èò×+¹^½k01årnÑÓ§Ïñã±ÈôÇìeáÙaXj…§´<»2`ì ¼§±^‡[ùï¦véZùnuȿªõ’„V9F 'ÿ7ä¶>º‹d|¤Û.$wŸV=OÇéð*0`(ð>Üxy\ ¸z„÷>ª?òž6yÁÓ¹Dëz÷' 3£íX’ƒÄ|FŒ[w:µŸí91ûë<–÷³c¾a4ºd6—›lî¶U»Ï~ض‹`Û>Y” Œ!`ù`{̳J%p¼Gx%CáCˆRÀ üû»>+uÄ5fv0'ÌË™\î¨ËÓÑ,õn¼•HÞlº‘S8 —cAo¾i)xKéïI—4x·gb ,нÃÓÛç¾ÆñB™ä»–¯ôÞmCCŒ9F äÌ“øKbŸ  DR¾‰Ÿ Í÷Q`Ä#`ŠïŸd˜’ù #íG——‘'¿­éq»ðŒ¶½ø S)Ô³æñâët;P¬ ºp®B·…±Ø©Üò„N²d´ýh97>ÙBO•{¾zEzõ SåÀH ¸1ÈÉÒfטg^W½ÔÇ‹tSáåý)ÜCÊU+b\.:ªä½`Ñ)t-V*!¯—¨}+4åj±Õ<ÛDø6ïõ ¯–Œöªç Yš]*/ úõl·gm›g3Á -ìYHÆh*®ðœ|6)t}«-Ò¯‹Ì{º »z†W/¾®nè'êÐ;\Äó³=ž\wÝŠSÙ…Ð1/0äÏrA˜Ò½áj”87úz* ?ò>oòjTS#MåqîlO§Yäó[!',ŸÞü~2òRæìþý•\Ž(É ­æY2€ÑöFÝ–Ñ+ž¼àEú‘Ú¡WÏv}^Ö‰Tgfšlï?·šJE_z9 Þw±e¢¹=ñj¾áå*¡^£XôQ´ù¨†ñ‚>óº‡×]Êg=ä¢k¶¹I(ᕈ~”¿ÞÆ<ëAÐmKGz…§¯Z<ÐR˜©.>ê+Òm+½>DwÍîx$æoÈhNd@¨¥>ù× ªV¼Û=wÛz¡.^ÝR棴‚,ÌZ/ ·ˆv[(Œîtúü!/Tôþë̸le*“ #ü‚`Œí‘nKô§õ<6Íißj(ÁrF}uw´ìCÌKÙ âfD³ùp&3NºmØ}DÔ”pz^;éwѻֻ;<“Ô3=hò‚çÕ—DI®ô_D*Ù(N>s‰Û°ì˜(Î%“7+ùƘÑÞ¤xëMÎ*½Vîb®hg8¯­:*SŸúìÔðDϹiˆ•aŽDœþ`Àæ6ÓÌÜÏ/LC.g^ÆÙܤ€û–¾»m¾ê±q°šû‡,6z5ê¡h÷q³ü lg¡¾2-í ¸›9­÷+p©'of©õv¹ÛbÅI´œèµÛj%ªzBJ_×'¯®×•5oU]qAjÖOŒ20ϲ§ƒ×‹ñäÝ•l}Àhçþ´Eé ž’º×ŒæŸû…ÞOÓðÎ}H ½“E;b 0à›ËŒWBá"yòåÿp™§NwŠTYžü•™6ž³¼òêÒ¼ZëPÎ*l^=AsáN{ÙS˃ êiÑÉž0CûÌæÎû( 3 ¸\(ÞžŸæžOaï­Û–”1ÿŠ¡À£¶™~Qйè[}ë øª$£-ùÿ¶$º}ájÌÊ ·C žš[Ë4Ý SPéѸìm †= 8Ífˆy£írv|Rý–Ç oµ ¼™zo©þéààÁêÙù“IéÓ‹¨ÃxAáõš ÄÁúü>Û>Òm—3¹ Tz¼“Œn zçY-ðàq!¿-ðRõÍ<"¨è«MãE}ζt4ßkZ$ˆXfÎïsÇo³Q_ðBØsKN.ÿ,“ûoyüÊ\¼UÓÒø?Tæ×W zŸúø“ù’ps[à$Ùã4¼æ" R˜èNÊø—¯wßò̰¤â·©zžÏw–t`sùoïÝÄ_ÆV> †Â5O2™ÉæÆÕ/U×&ÚÔ;—yI‡'óíî¼?xe9_éYÏÓ5‡œ}U?=üÞ½Öy¡cæ ËLºíxåB(<÷è¶Áp¸¸ µ¼Å àUuxmgá2«ÒãiÇǽàëš .q4uhO²V¨Kàv°™è¶Þ”r85^[ø]cÓÖàµê^S¨jbª§»ÓÛçM!gxÒë=Œ¶f¢#?ãv›SÎwüˆñ"w¬œy‡púÙóS8\¼£mnRØ ^•—nàð…Œb=Á«·7^ÝRÓ¡Õ»möéî¬ÙÂî´¤åékßæý™Lvò­S¥€n-̧”Ú%üL…g\Ú–9ù²¯}.Õ¾àU¨¾Ü〡!ûµ¨Þ†6iÌéç—»‡× ¯í‹›ÑTæ´|óæË™l\˜/¯ç+êè*£'M NŸ+¼¹ß„EZn¯Ê _,Û!ä{‘jÏÚN à™×£&¦]M&¨m‰Íðð¡MËw«ÕìžFѨùlnÈØ˜.„ÞùdÙžz"¯¯hð0zÿ$‹ðSxÓÌà)º \Ƀä2’^!ÂÔºí¶Ô½Ç¥½‘•Až9š±±2V½rе”öÞbU'Ѭ ï*åF˜+ɼÉ>ó?¸^…þíMÏãÕs‡´ûÐ(Õ[ž<•Ï÷RÄ1âœÛçF‘ ÓCžÔÝ2`à‡kk¼Öï$OlÛé’o†r ¦Wœå&D´o{€×ìSù´§n+¨Gg£¦àá³d¤ëòäfeYm6Æ=‹NAø(3gNì?õc¢žxZ¨Lô<#¼7[àÑË#ðxøz ¯6NÃõ Ï Té)fTŸJ×CFU©ëy–ˆºÇ:ЈկA¾Sg•¯š¥¹i0t[ºz;>®-¤ÚÀÓŸy*¼Ï‘A„ÂSæ^¾[鵤åõOo^gµù_¶|„ågzî¶dÜ ††ˆ™œ§ƒ¬ZÀ8q óóõûh€'óv¼*Ùà ˆ³¼R»rr]ÃK¥æ›Ì³§7z¸3N=¸œ9£nZááóÞ®»-R¦ñlŒ™p°ZÑ>—;]Îb,¬½ûp-üaêãù²œ›Zá]æ¸x² Ï^2&Kê^‹ôæ«Â«GÿR¿(’¡Û–,]&Øw¢›Õe6ßv:Ñ+6­‚×þÃÎå®L„!%1ÏÞ ©Vx‚rYê€Aá­Â Wm5x5ÜC¾§ºŠ\wöÑ?2´¼*Û]·m. en, óÞJ%¡àÙx(üMÚmÇ…Vx—•ËÒà <ˆ|L^Þ°]uuÏNwÐCÎêá <úl3·æÅîÏŽŸ!»Y6ã$xHÉ̯á⻟ÈÔ…Šf*ª §Œ¶‚OPá ©ðÖ¶'ˆ¿ÛCÞº óÉš(Ó-´£ŒÆ…t7çayÈ힎Â0qÎE,5ÖÁ¾ò7¶5˜ÂƒŒ)õ§â©x÷(<Ü'ðNà<…÷¨]j•>á k`žu?­Â©ÇW›]ê`¦\^¾«£\ž·§Xùо—P4êò”K"F tÙñ‚€kµ£~ï‰#ÿ·0UÎRº„¸‚ž]^¼(ðtÀØŠ…Ñ!v™^pxD1e$1UFä [Ðóº†Gn²‡n«³¼ºa˜Q5ÆÚ˜nF[3u¥‹ÙlY'ËšÀÊß Ý6_¹^0/%µø\ªÍÍðW½“Î#_!Æ”)ÍÿÝ"€¶¯ÁJîa&™S}îÔ­tÙ ]á’°ã¾ÍNÖv‡ÃPFž4?ˆÕ‹fƒÀë¸6_^^½ñäWkçb& mmeÝvºëÑV»ð¹¸v± ^yæ9þ#±ÓIÚCÔ»Y3áæ xÝn1F?²Š›-×0Œo+gˆšr+>_^ÉŒŸi½ ŠTw!€7Þu·­O©èæ¶áSÚA*JÂÎ_«%|¶&n1ñŸ¢Q,zš¦}q÷áØÏòDIöÞš'öÙØ¤öü~ªõNJ¸mdhG¼§×º…§#‹œQ7Œ«³j·xò :àëöìT¦Yô‚¹ |4“…Œ?ÄÉòr®-/…åL»Y /=éæÎ{×”¸úi¤Ûn«‡¸RêÖ/ ŸRxóTKÂÈ,vwn³Kt°£Û1bfˆ¤ûg‰}vmù3:ƒ–Ǹ8—uùLëI‚ýQ뻥;xmó}Wº.Z¡]÷ó6ö…Þm©KD9ÝáDtpÇ\´à­ií"£.bØDá_“Ÿb¢HºmB€Â·Ú޶Æõ“-HŸÝV€Y•®[žvÝRë|R[ÞºOî Þ¨ÿ,xG±"òCjæPó´Ã‰¤¼)ÒmWÀ®õ.Ìß]ÎŽis;mœ.6’Þá õst)úã¦9’"´å=¡Ýv"<ÛíÉU ! ÁøáopJÎW&…Ú­ùù2¯yp´;Nmefº,N¦/ùè³È ~dJ·U̳ånËù±«ß‡Üî˜è|Ç)¦ÍÄâE!5$k½\~žÇÅð/>Iõr«2x]ÇŒj³Pµ!^ûZãÇÔ¹q¾œ‡Šg»:³-0ävG"S#ÃaÛ¥½}äÇ,¤EžûŒŒ¶?„iÑì™nµIú„'CK·óyÚe·/´ƒJñ½îN}-Âá_íŠXtÊoS waXõ.Â<|^/Õ0£ô /eøîn“†jÇ}éÔ¶ÄVx‚€¡Ûf»<·™(Öä)Êþ˜Až™˜/BÇ~Häå<áV¼•LF39•ÓRGxj™ï£ ¼Ôàà6ý‹ïá•ÉsÞ£Þ°üÚï)/¨^×ÝVÖéöCý(L«(€`À ö2X…rù³ì™6ð <ù¨e`ðä5x27S=íW± Ï~’»©À»¤Â{ukð6÷6 £mç o ðL¹-àЍ½h× ©Slޥћ£ç>iˆaòÓ/CÆ_ï­;óÉåÏò*<x.€WÒáñ*<Ò(<É4hx¸¨.=3Là}?0 ðfûi)½UýZÐ~‚ÎûT*Á×\[@gFQʸ¾ïÌ„÷V<1==6LìŒ8hw¸"„ÃóÉd4[™ðZJ…Gh©ðªðfZà¡ÁÁ_áÙqA)ëÓ>”ÓŽÑËŽµ6Q ^ØßÚÊ’#~‰vwlÈm¦ú Š›½Ë/ÐÄýržèŽKùÊ…‰ºyV’µnkWàñøš u[¬À“QŸÏ<åq·Ödž‘'aí©aÑ‚£!O0éµI IDATôÌíDCVÖg‘[!+ªàÓnò>hžF#ÈFµâ̘ ô¼„#zÌwÞuðÏlEÓRÌÚ;†cé±OæV/Sx÷›ááÂ`FÛI­Ë2Ñ; ôxü@Õ~ÛÝ»>‹\Ó½TÒ-;Ѻ)å`v€Rnµ’‘Öádßñl.Ï´Ùy„%* ë÷†¼ÓI˜U©ÐÔoà&¼Poy«DÅ«¾Oá-V/AmL*µúÄo½zò¤ö»÷ O9Ï:µÔÈ/*¿T¿Ϫ« í† ݾ¨ê6Ô2ejÏ´³øc¦‚DèјOˆ¤Û޳և:…ÙñPx ¯Ï“–ü0\œ_„¿…5xU°0Hókï‰ï‰<x5¼ž$=بçÉÉz=¢8ÑNÝ*:²2§Ql݉¹0ÞÊä»YÔ¶ ?ÞAÆ Å~ üÀñ8éÀäÉ$F"¡*Y\ ÿ"1O™¼òÆbà3cZàóŒtRIÀ« „ô¡ïòà­·,žÉùʤ¡Û*é<èéÖûÕV-*z¥ÅvíÓÝš‚¢‹ª:hÌ™×ë¦Õ0ÿÈæõ΢!ä©&¿&Ón € ’H]Ï3•Þ7])T/ñ3²©þÁj©ÊáÕ’€KÏþWQ’_mC£÷g¬Bæè4|9¦ß±Î´´½íÒCk•Å vÚªèýÀZ3$l´ÚÇ5}¦ñV.ŽGB£9Íäó¬\Îk晬vI&Ó÷L2º„0r]bJ«dÀ{LlÇ’ÅTâ-×q•»'ñ¥êå#‚·¾Ž+9Å+T5@Ž(Z,~>®íÖÚ¨ôñBÖ'¾g{‡W04äݼæd£cWšfòyÙ{‰}ËÓ¹´ñÚZžÜÂsm´%t®ßµà+U„Å’l©Z¼'¥ƒ(m‰òÀ¢³–’o!hx)¢°@"¡†‰ÑŠ^ÈÆGöõ)× Ôߟj³ÈýdŠòµÍ8G6¯RÄÖ:tÜc&Wùg—øºµ…d™˜)Õù6Ÿç]΀¼›T²¯›¨[FðòôÛ°µXLÉõ‚…&š¶M‘ZË­i.>5}Õ±‡tª­ÂÒlFNÖ`¼01ý|tbè ƒN Á 8›Íý*@Ì3}FÆ]jžé-¯ð‰ƒ@çôäžFS"²úèÔó7Ò…ÄÌJú§Aš†n¼ c™¦ ‡aÅ´íjL·Ò-<.ÜÐåÛºyv[3\)½åvÞÈFŸÒ§à[Õè.¥5Äúšù ˆ°}'eˆ¾’/=O"™ÌÃ7æk¸6v7ê¶[–.à ÖRó)¹ñKS²L”v½þ”‰f/GN=DŽj§hR‘{-õª ãr!1= ålç×bαqÿ?÷7]{ñï}åÆ?þu1+7;> íp·¥ ]¨¿n¹ y¼ÉïJw…ée{^=î™6 7é2Ì0êQ|¾cn³Yt°Èð2n1víÁÑù‚`}Ý¿‰e2PÖ× 1ϼ´v¥vÝw[øC]|ÀØQWêÃ*~Jß ŽLÓp«âK}J¥ÐÈ@욃F^@õnÖ¡MQÁtÔþåèøè¬7Toè·1ŒÉH[\¯®ë÷ѯt¯­ BW¾š42ºnŠÀ†¨—{–§+ûêöÅSý±Ø5­F:SÍS·#ìXÀön°êðÒ¨½ì©“ê”Æ¼¼œÅ‚qÃ;ÕK²m(ÝéyJæ-ü!ÍoA`4ßJÈŒ8Ì·pƒ„ô:îý±3P„ôŒæé(tÛc´^R–<øBswn'øÏ„‹§‚­Tù£Üød¸˜;#¿ÑxíËþô o­ÉŸ^@ÝL®ärïj*+ƒŸÒOpm!UN¥aÄàÕÃäˆv‚¾J]¨}Õí†öæÐfväÈ)ï7ÿ­©Xóü›ÛÉèƒw‚0­rº-ŸÑ˜Ñœ` Ó`‹©mC4<]rà” úñ õ“JÕí0þ¢þ•SÈ 0¬môZHCÐÍã"dV hõà™ç´™¼ÞÙk÷ˆ4?%Åô¸ºê[=\á}ªü³ ð` …º7£FÃ0Úªj2cH¢,œõ4 ·Úû}~ Ý'<˜ý×2ˆ%Î*Èõ’¦bt˜ðü>Øg#DA.ÎiYbóàa¿pg>Ym;ÀÛÂÌÊÖá ÐÔ3ÕÖjÄÌ€n˸”[0éðjÉä§qj@Ÿ‚Ot/š_oE|”â56:æcÔËÂ9ͱåÏòïP`}/|@ô¾yð1ƒi•yeZeBðv‚·Ù:¼æåÔ|2ú äA|W»þ•öqeâ=béÖïR/þ¥vÙM¦/;Üm`ÿyÚmYä@ŠPU × ôßS§ÇrD»sÇ©ZL"üôw¡pWÓlTÃ=o^TSÚ–Ø ãpwì\±ˆÓþÞn·uè–‹±ÌO´µî Ì‹zˆyFgi'ÖhÁ3ý0ž¶#KÉTrØ%@QE|šxïó!MW—MÕ×—:ÐìÞ?0ÏÖ°îR\–s9! v[cE2™1ÕáÑáñÚoÐBÃÜâ7ðµÌ'O£ˆhyãoD¢0Lóz¦“Ë÷Çsêͯo^~ëÝ–·ðêcÉ4ó¸¤À{‘x>.-ü™¾#íGé³.®xĘa˜(Öß“s˜¤˜KjËgÊ# ÀJ´»´C²ÚVóxAºa—IæEýßæ2ÏŠ¬Óéyãy#–³sýîüm3â͉X&8J2Mý„ =5£À»¾ áöÅ'töÝ.s0fHv»$p0ƒñ-WK…†ˆ¸®ái±¶Ê½Ãü€«1¢¢ vÞÉ2y ^Ý«Q_¿hmf‡»KøöF$¾ô3È잎FY¿ܤ\ˆ9°_ÀYÓ¹c·âñˆ336‡•Ya-ìýFZ%ð]üT÷PIj—iA‰». óRe¢W*Eyeð’Âòçãzèž±Û>)ã4§ÒÇ Y÷R)´Ð`ÖÄnàA9Lw9F á,K»­»8æ¡úÊx. L4Ö cä'uw <ñVUxJ òLSxež[|Råúƒ7¿^ÎWÆÚm•aA^ÏCÚkï­ymõÌж+Â?·kö™>^,ŸÑ¶Ú´²p7ìÌ‰Ûæºjô¦È?l‚r¶+Y%ø,‚œéà[§|oU>xër6W¡NÉIÕ’-X…·*«ð |Y<¯ÊéÒU~©xSqmA·je ŽùJ•âܤæPMáå•=’åüçvmâ„×NÖ·Úðè*óŸÌx>†yÍ=‹²>?ò#—+Wá‰_"´šFf6æd‰¾ìñÜüJyš)9¹³*šƒTål„GqïúÕ~ᩲNgñ.ö·>Ÿ$æÙO'¯c|V½!Î0Múd K ÞyFû¸ïù(ç¸ÏfsŧÅèˆ\\ú'|ðÉxG­-ìq»Ñè¸6`¬Œç…†yÄ­¥é2WR ÕáÑQŽÀ›¹ò¨oxàW™»sïóIL'%ÖòýÕ»¼­úÁ‡$Ò¡«Õ~­{î×6úBžø¬#êðѧÝÁúÛ¶c®dŒŒb~%è;æ<}*8èù_Õ' 8«¬ÕˆÊ¥ÍªˆvÕó°]ªÃ£ŸÞÿØ/<2J„‹·æÓªëGv|< >°9#ëX¦rJíœú#¯¨'.+ô Á&Ò-ó 1zÚ¯˜kdÜNÔnÍ’§b‘›·²tôÖ2}{o©³*šÆU²n‹e® SdÕáÑÂXÞÒ‰Oûƒ³F<)Ð<´º3D®êùÛðð„_ÁMï/ßÔ¶ÄfÝ ;†ˆIíž¾ü6;Ž”:»­!5»ŸuÒqwœâÁYe ¯'Ë´ºÁ±euà­R7Іn+Yx‹ßèž"ùÊÑRÀ±’(,ã¤)âõÊÚ ó7ÔÔ<ÝIÝyÍ[›Ué.çyí¢û…ÇxȽï§ZÓ†¹ÀƒîH»-Ír#–ÉŽ;ó@‡×ʇ)ÐRîÌk³*²°´ú„Â{D-0û÷êð„Þý‹ýÂ#¦,†å:óÉðÔý°.¾™é¶.záœ^¹ͽ£¡ÑϲaAWÂ:ß©¿ syäÙA®Âá|› á…D,}'8wþø‹Ÿ ·Ñ$UM&Ãá„ÚmÃxWe2Ú*µV¼%ÞeaIW¸È  Ûæ5-ðº ÆTý»Ï%o«?òÛÌÊrN$›GN !9#ö.Í›GUhVíá-óV-Ê—í÷Ê*¼ ÿˆÂã —ú„WO…ÚžR«S€ÉIÒQð°C^Ù®®ªØg6ý$úpœîž'Ž"QvÔr¹§‘sd¤>¿÷÷y)7jóºÝñdÔù2¸_­]¿-™û´ôhµJlÛUÚòfNÒ’…ðWùR•Ä3o47Òèái·¢Ïÿ" I·UV¯8ãÎòr¾r†ÂÓËÀÉú}³s@È€‹´·ÖFmd´M\/½PÈ{ˆXjÎÓÊêÙºt³–¢Óš²'[®—ì¥s²ÉR SÀxÌ.³E#ÈÊÔƒä•qËŒ’Ù±Ñ`¸8D g²²ŽK:˯.|ƒ…ZKþÔ‚'Ëzîq\KÕèâÞxÀ¦xŽ õçË4'‚a¼Àúd|·U.ÚK§ôšV&v»!µÀè0ùAÉ;Ñ#Wÿk;ÉWûXÛ¯I '-¯¼ÌúliJ× ÓTÙˆ]½ ’û,Ðõ ƒ Þ‹àÐ*ò²_›_'ïó?ù;å¢Ý)-ÿ ùªÂ‰Ó^gÏh[ƒâÅ"V™ ß/H0AÌñéˆóôè°-\×ó~ðX¸\ã{¡Õ$]ÁS|CóDñi 1ŸËއé„rž1ì-C♉tÝÅçÚÆàÆ‹öÂÂQŒD¾`à±pÅhtÌoS~óï¹ï* û¡¦JðH³b­hŒ~$ Kxa!©ÆzïK>`Öx=­çÞÂW´AŒJ$3‚6ПDí3~òôxD¬˜U +9ú–­Â£öY±ñ=¡úr ìì°KùÉùú§ëåàŸzEÂ/õ³ÁŒu17¿á«ûrMÆDb<‘$·0 á-´.zp‡[ž.4‘U1u7¹B¸‘˜ÂkôBÙÓghn3u?Ê:­9FÊâ5UƒïCø+žöÛ†‡<î8Tv†>Ä—“Ñ\:¸V|Äÿ¦OnTº'¯Àêí˜ë+yL×ß_Y AþÜØ¬?3zùA*ðãÊé3ÚK½P× BÌ¢ÃÑþ“òý?ãr›©w|`8ä6ߦ6ÊÿMnÀD"Ù6õ>_vî¶ùQŠkëÔéX]+†çî$”…Œ~.åª G¤’t–.«Ð3è‰.·{¼@¦Â‡ ¯‡ß2߆іXžx ºmHÕóªu”Íkfn^QŸ¢ùr!ÿ\ –àñ»0—éE²>ë¡ÞxnôSè x¼ÛÀ»¬nùlà‹:Gß „1Mav ì»w‹FáÔbñëï¶O†Ñå3¯¢V›„YEB°¶€Ë—×jwî$a `O-U>„?ºf]®“ˆZË8Q‡'#ê|áR*,‡¼.B0Ecämh¿WW’›xdí½ˆœ„Ûo^¯­Õ@)ư|¦ÌrÕ~s'ƒY½ðy0ÏXV0PnœõYà|Ô&r`õC—ºiµîÛ'¢ÈüåW©¿MØëNÒõ>Í<xZàUñ¢üªžñƺ†W¬‘aÂàÌ]$Öuyy% )®jñdYÕ>CΕJ£60¡¶ÛÌØ -¥ËõŒ{Ú'x.Iô¼ ÇMjF<µÛVñCùÍÁÓÅH„áVqæ.Î-$¿»Œÿ_¬Àó%9)—ÏêRÕÉAŽíÝçMiž ÔNŒügø}-ú¬žz¤ žä^÷+‹õ峋©T^~ k¡ù츯dg¦ú´Ýå÷ùJHÛÀü&r`UpѦèóÙ· Ù¼RQ …ý ÍCTZ‡n«Šdpžî,[î¶PäO¨-¤o…ŸÉŸA·-.ÜIfÀ>óó¤U*O ë+.ém‡g)m~Ë„mR9ê²×`ž¼ÖeÅÁÂ+Ã(¡¹Õ –€r¼5—/½ñ‰/à y D)¯ÒÐòÛ“©­˜ ux¢sÄg;Üwc1œŠÊD_f2hly­.³¥Â[Óþ®·É‰ ê›J—È1‹èâcRÕÝå”#}žt`óQÁãàZšå˜Ç=ýRT9ðâ_àòsä ÂèÒ|ÝfðÕ6å  8håÀ9¥x+óðôñFŒ[òš ·S>dó5TìüÀppÝ ~Ûí ÒmÕ–g6›#S÷Y¿ÍŠÌ×§-ø.“.x_$nëz^U/ž4™pÕ,ˆ2'Ù«ïƒkžÄÑ&)µÝêž–Ÿ™èÇyõtà¬Bô¼,x¿¹]ˆ¬7èyú™ ÛÏ”þ¦¾­.Ç›g¦¡Û†Bf¨œyšè+‚ O’.#þÅ£¬ KàJ–ÂYNÜoJ³¦*y†81-qéþà+j™æ •É_>î`õ6wŸärìÔ®õCŒ¬õT¢é€wRÝò[mfH†é€h>a.‰²ãóû\îé)õrfWù™»ž>…ŸI—Nžä–½À_-ì7IÉç×Eñ}{ŸðTQ¼kï@ËžO­¬Õ ]ýÛˆñzjO ÝÖøÌ»µ-ãE‡s1âïÑ]nH.52¢ÖP"æÙðYÄü© 6´9Ú™W寧ñ“ê¥79né±ÄÙKx±Ê/–ˆnl_*½ù»3틬tOÀ°(F'X&е›Úb€Ú䉣ýQW„úîÆn[÷ê »NÂú”Øë†l.‘4>“Ⱥˆö>ìòP§©Ñ Vv¦$¼™{ <éÏÍ<–ø€',>. ˜[*]²ÏôiÛ6Ï+€½VVwäI+O½M,l¥RºVŒÝV‡×rÖ·8ZgCÕy>™Î¾æB ‡Ã°…„[ŸÜŽFGcCqóþ”Zž0s‚}Þõ’oµ$ÈÜbIæ–úhH…„ר»±$*[ž‚À;Oq¡}}ìÚ-m«”y-2¢Äˆ°º:õ_¢¦$cPjð݈àÜó€í¸KTvæUxD'™‘(¼’ Éé²äÕcž„eþá@àåq;—¡-” {Ü襨3gÖ ÝVÖ[^¡f>åŸ)Ág®6Þì0±ÎÜ(âÌ@yûvÄáL£¹zø”´JǨMï¶8Mà!Ë"g"6#¼‡ í  åÑ…bêÙ†<Û0dŒ¨Ý¡Ëg¶?n<ÛõÍZJÛjßFúÈêrŸ ‘õùä¦9¨n}#­íÀŧÍœs¹ã1õŠfd¤Á“ÀCˆÀSºí"h¥& O2áVÙ"úˆÔá=®jðpàÙq<“á¸Ox°r’€Ð_53S²àA¶óÙçUßì2µKœÚ…nX=›Ed…2“1uøÚã®é‹Füh蛢ë«äçœEÎ > ™²zA3«ÞçÞºT‡Wx÷êðÚBÙz·=Xûïµ>:‘ÿxÕf=ˆ…JÁCÓÐmábâ6Dø…Âô6ÀûÿˆÀ{(_>â,U€÷DG`Vú‡GäÎm‡óå±  2ˆã:ûNðÜ1æJÊ?ìõÎó̉Bç÷5¨ÒuxzÔÔ`ç£Ìj¬^q8Q¡}î¸èd­>«Ík~é_a™– $ðÜnw2¥Â[%:ñ÷¸¥Eö¹ÈC4m)¼‚Là=yÜ7<™Öæ$˜¦oDïûha@dòC'PëǾfFÉHÃSµ¾Ð[:¶ÓŧÍzFý­ãÈÅÙqÿ±×h· jQ –BÁrõ¨ý:W¨^:z’[|ð.JÂbéÆö‡ý·¼‰0Qæ’‡Ïàß9aN‹/‡ÜîÄ z!ò$¤É~¿ùŠáˆŠA!Ôá zýžr¢ê#Úi×ìr8¢c¾€M(BTÁi¿\°ûFŠ^P•ö[Ò<: …y/Êè¢)½XâL%ˉ¿* p— ÂRtM¬|WÆý%´ad ’戌È2’L°¤ŸxÛ\Ùžõ ·E"4£~[±´nÈâXÀ IDATÅ:â³!¯ËìÄÙº'®Ù­ÀËg/éË^™ÁˆX–ôA$½ˆÎîG—ˆOìGi®/xjÞ(ò¡ Ì>1ßþ¶8{;6å$Æ62›“‘W GÚóe€ã]k[—ºA|ô¯KéÀô¡A ‘—¢,ë׃‘ä‘êÛ]åðßNˆà‹QàžØ¼pØK̳è LÃ?ùÇÖa3"Í‚l ¼ð$±7îµ›¼Þ)øvBH¿ð®ß&üÜHöBn—Y3Ïú‘­ëycÿ¥0ñkŒ'ÿ(tèŒ*<Í% —ÒÖÝV×_<^¸ Ñ€¯}atÙ%ÍlǼž0F}̱}ñk"i‰V~Çàáê?‰9ºâ™ˆÒ W!9áp:®üÇp¦@ˆ˜G‰èX¾íÁƒ 93»!7Ð_cÌnͼ`ðuˆZcÎ*ì< ®x¤¹eý —˜ŽQÿŠÓ121wâ%¢Aûã2w^ßÒ£¦n_ˆ[ØÇÏ;ë{VÉ'ÔÜ1JîÀ0Úî<0„¸ä' ?FNb3ž†jÐóÆü×}¶Ñ:««mnë’mç¬,1si·}>æÙ¤ïŒXÛÛO1d\K•—I·µÑLØD_!–Úw®‘(-r¾~@}ó7¼/€§ßåñó R 5òKg²G¬ DóõÏ®Ëix°3Hû»•ˆÇ¢ÎÓÀyª˜2ž71Ò;üL{s}Ü´}ÑÑ»‘Š 1DÏ‹8_öÑŠ·1üüè7¬éÏ­èÃÌêuëú.×0ÀÕ]^ÉçÎûßC¿ó/+ N:;ûÙØömÓx±5ñ)ÿ¤ÿSô¯ðóWü‡ÎyÈ==º“Ýv‚ú,ê®;• ác·À<;=긣¹ÌÓçˆ?0D|ßÅ™Ñã2‹.Æ÷ƒM‘.l[pæ/¤ K.ø @$Yõßß v¹¼×ˆ¹_Ô7ª{M |¼ñmü9QóÀ˜%¼˜KÛñ—äÕÐwDW$J̳„÷EXM!…ÕÉ’ZQH•¿\¡‰ÃÉÀëçÆöÝv»ì‹­ Àó(E+%Í4¬;¯¼L,”këà,0> …ãP×)“{~öä"hÝõ§ÆCóÚÆ€CÎ\.e³}àyÂð“n;ËŒ½IDñ(éÊ/ï <*B¸XTœk:x')çïW„2~ž«„B¤ÛÖ8[^M÷‚O„Ù #>e#s:ØL]!ƒ-”¬§ f4ä}ãp E"³ÈáüÉE¡ý=ÊT¬Ú›Ÿò}Ó©oÔš§\ùÔôdù¿¸‘ÓÅ[©d&í÷Ð8áÕ/bè/é{Ž)bÕÚˆ}»ùã¦X4W}óO‘éß1D¯wfÔd+©Žð8 ¯{ÏЇ¹Á]£†ï”ËYí*ˆÅ ª3¹R“zAϵ¥©ÈxÁÆ^ƒÜÈŽÃàH,—þ«QHp¾™‘ke†¦ÍÊr<îbÑ—ƒõ¼{4޲Š^HK@ËmóÝÀ1Ûÿò/„€¡ÛVÛêy/XBîd ~Ï0±v ²Ìש–v™¾As&ý˜¨¦oùÎ’±Mlw‰uQî¥åmê%•§93_+}ðô #*ŸûÂtWø#ƒoÈmžBiľ†|itÎæž›Nu¸ÃUêoÇ[(MÝ ¼Šª³ÉбúˆÁ˜‹Óe 2ü{>AZ*Úçx¿Ò¯ACŒ¯g6[Áy¢gVþOE‹/¯@5èJ9(i³L~é‰ð‡Õƒ—¿óÍ;tÛ^ám<`(Ud9GzpÊéLoý>Œ¶§i.{QËÐhXû©èÞ>Ûc_èóðb:;fS21äsx2Œk©uµªcMçT™gÖIð:ÂëµÛv†·¶†çS¥­†ÌZ°ÃCŒòYmñ¬¨'܆–WØ>x,òÙŽ yâÓ±¨ÃËR ‰˜áTA+ÙšÇ+yPjwÔåPùE N OîAN…g!£Ð@áщUÂ8¥ä} B4F"éLïK|}9Oº­òyv|²Íf·ž>ùÞPÇ ¡\ão…‹)HʾÁýKMXä$ìjJ$¯Êàƒvš¡j©š°l¿W¯™Õ <*p‚…dÓṓøÙ¿¿£œ „'æâªzW3¸éÕÿma×)ã2›£QHU6v„aîÉ—v‹3àËðªöÒY™hMù’IBÕƒ„Ûº lžšÖWÖËÉøÓÔÀÌðÂß÷}g‡^=oYÝPÛ¥õn*µ¡#<ÓªÌ_/\âgf–”›/ þ±$˜V©…±ºú¸$£«áúõ>àA¤Ô¸ è‹ëåç9ž›ƒe ñSÆUF¹D9<Óz‚]›"â³Ú`V%º2>.„ؘ;ï«¥*'óö™%ÿ]š!·”¨…±¸º* W UÛBªßÎ-¯X$=ž½ó¸ “zJ*¤ì¸Œt¯œò} ÿBíÅpCJ)UÒ»ˆsd8€¼(‹‹ÞáJUaÊ­Ì\W\¡îšáͪ'û‚ÆÅÈo@}¹’IZèqB^ÉüIèÇK»­:úËŸJéÅ]¢Ö2eÅžÃ|A+üGÃ.Vå£Ü’]…' «¼]7Cá­x‹}À++´J˜l¥VY“nBþRµ3Ɖž‡çÔ‰dÙPGiGCÎÚJ <³ûF4êÓÌ3;DK<¬Á#Ô$Þ.]¢ðž<‘„ëß¼ àÿ—Éå¿È]—Ç`RïØ­;uŸýæÇ‰u\Sá}áþÝÖãw ¾{«~{ȬY²Pxê:8ÀuxP¡šÀ{³¯–—\Ïçž•“™ìO –ţ腘9³ùÛâ7ç’ë¤Û*˜2Ž3úa)mc!gšÅ\ǯ5Â㪨OFÚBFGxóË×W«Ÿ˜ Cç~pû…†æ öÓé`ð-\üºzŽúªžœ×¶2¯_¡i¯TxVº­òÑû8žt±xÄÈ&ZI,–ñÿ3·x“ý€ñξ³x£þËO~?P/'P‡W÷w›–QíSá‘ÑV‡÷˜>óÞÔo©xr2¶üY.pÖ,"DW Ôé€Ð!·í'×s¢Á+Ǧڜ`wiµ¾ž½ïèC€§”ÇÀû‡‡ÅGîg h'”åp‚ÏÑON(¥YÍ¢‚øû)ºgÅZÏ´‘×áï2©6¢Ã«ò@Ï{b¯ªð^\¤ªŠoqð.„Bt :2°y¯L;Xãv݈:}£~+3ä¾qX Γ ÕÏt/øÝ´/:H<Ë£™ª¤À;¸(’ ð®Ö–U…k—Šp«Ý6˰ïÐBžÈab®ÌÆcSѱHv¹#âÑñMe׺Ùz|a·QµŠO¶Jà]]ºúŒN¨ðV ãÙbI°÷ ÃꔋÖÑ6“æ—ñ ‡ln·yZ['x^mO¡õðnkï€(ðªŒÈ!½oí釞ˆÑjÁbZ¤…'‹€ÇÛ[“umÁf_KÚ|Ð$^´_ícV¥ !?>?rÏN;Ôp9 ؆\fQŒ²#SMuT¹]/ôù¨=8^4»˜U…*GÛ§Ä]´Sx’½pÔʈgíýÌçÉ⣯è@VŸ•q›_r°ZÇÕ•H}¼´§í¯'ä_‡šàÑ»ZßS¥mäÞV[žö•,òÑÀ71‚œ>cØ×~9¯ì:«_UE¿–]4Î::u¯­l¤@P®eZlLŠ ío™ÂßTvÕì2-q»õ m@µOnÙ7<Ùß´ïC6äž6G¾dÒÖ†õƒvgýb«Â·Þå³Ö·¯*¾`¹âp£‹¯ž1¥mìæxa;|ÐÞæuhzƒ§~cûX/4ljI=K3®éðvq¼@¬¯Ãmà­·¾5x›µ70Ô=õ‹ÊžÑ¶Òƒ¤1(i¯[ÙzËëP@MU©¥´cîèG‹;B£Kv ÞæO-mÝ¢>JäµB7v€F—Âï¼Í—¬·8@ëðž#¢bï9ÙKðZ¦ç\Á yOÀkê¶gêG²ËÙÀ…³=Þb¡Š#T EO÷Øhä­(À_®$Ⱥ»T½J%îPhpÝö­†d*:¼çV&<íÚóìfO¾x|èJú`/G *¼Ë€Q†?Õƒö4'1ØÎHˆ+ØÓ¦+XÄ/B’íR»xªÁuÛ†úWzî-Q&½MÒ(ô&ä~&­¶¡“±(¤ì²óÊõÙ哹?úY®ÛW <Ñ’612ºd†)rÉTèÃ3tsxf%k³Úm+‚väㄽÀמ…ñÞIÜpÐĵÔí¯eºû ^•nùƒ wý¡D”dIâ¹Å¾W=yÝÃTjWw`ð‚ªèµd ͇½sÓÛ£æe‚t†ÚÓR–—³ÃÞ¹Ûfunþ T^»$Øáhè–W¯qK‹dsõ™$¼Ué2wÌŒ‡¥í}æ¾–7ÀÓ]|jw’¢ójçÄ€ƒ6Ÿû`"ìqÇ!çP%ðzã76ú½`Ÿ×á]‡ñ€Âû~ñ÷øYI°SxGk'-JÛ ÏÄÒ–§ŒY½PWËöêðÀ0µˆoüv,¢Âá׫_: ?dú´£ö'èðf Û¼™*¿øàUJX‡íÞ’âÞ½mð0‘FþŒî^Kéðr“ç÷}'.‚Ó1¢Ê¬×YK•E,„rk©d9:Òéx…F‡I£{ŒWñM€WRáÍl3¼ÃSÔšU+.ëÞJ%cÎSãƒÃ´™°~Ì Æí†ž•ɉZ<ŽÓ×fG•†½Dá¥xÈ„À[ÄU“ïúNÀ Úh.$ÅcA9ƒtç™+-i‹¶CDú׵Ђ–hCžTËiòÊüö)_ËîB<»O:ð®âÂààmÅUëðê…ºjäš¾‡˜ÙêV 3ʲƲÁÀ1oÜ-jŸ¨4Ôg0®“aá1Œ¶xÏ,î`ËCÎ<ìHG 9¯÷,Œqlê¾o›Ðl* |†œÿÈ ’ù×ù—‘ýçèïCÅ Þ¿xŠªð¨ªB,4n'áY鄞2WŸÌÉr‰Û isqdXæÿ9‚_@B-Ñ…Zîï:Lhð–žÌ}Dà=T·õû7+p˜îH'fëK¶a2€”Ó;gsñ1ð}Ôèbÿ4º’ {2£Âã¯Ö¦®]“(Æͦó39\RYÜ~0[·aÂÉœío‚eV¢Wz]&ðhÐ ”Â#JòuEÏëGIÞ|À°R7©dþ깫Ëyü«Ðæe+vTþ©`¼³ý—`N@ºð,²ýÑUZ‘„£ÜÕÒ0Ï(¼ÅA˜gæÎ^zo(«Þ çÕ'¿ßÂÉ=ç^6Ž/L‹)åÅËPÜAB ´`Óõ{é-…Ò›Gíèâ?¸W=É[ÞÃÇ}ÁsovE¯iY¸Œe |”߃ÞÜîd,–Ñ ´ßÃ0Z5]…‚Ó\áU+ƒN ½hA'\b $üñb?³*²oÓK¢ðh·Õ uañ#¼W© 7xSù§$”.ŸäÅ‹ˆ¿RªÚ‘€ªžd)ô¯&nz1‡a€rÓWq \üÍôñ¡Âw¸Õ¶Ò~ç­ÂƒôÌO,Ñ–14õ%Ûjt%_Ù›-ÝIŸdÈ’èÝðrx I’RÆB]M´C8º~ÇàÕææçï¿rеOü× eª€˜^/ì.¡ D‡B_t›Ü¢xa­èyI½ò:(‹ñdLÿ<¥ÖË™]´‘-ðº–ÞနÈ"ßHOˆËYßd=jJD/W¡ÝfÔQx¼¶Û /WÂÇÜJ –?ÁkiôÎ[ÚG’•ñÞ)';ZÞ`àµËO¸±ÈOrÏ|ðÝã8<7›0„(³yòén&óÙXŒð¶Pãl[à|!@¡¸r4ë«Ä* ýù|e“uÝ•׫ö*6°}ï D{ÖŸÑ?¼5Å}[N„öòXû}Þp —£ânCê$êÏ|Ä’¾L4Õ’)}–©2ÑJGì’­j‘-y®‚-¸$H|©±dï à5Äüg½æµWUQ¤Å _ÛmFE…Ç\-\ºt´ºšö1Òûï?zä„ÃRbJ¦*áÏ´/p"¿… Þº-•$1;¬úú…¤ö‹½;Úªð,«Ò%ùM~±$9W*síàÉW-3VWKÒ«Ü•’T@ÜÌu;·½ð~úVÈeNi¯Jˆ™(¦Ö“ÑÝfÔQTxöUé"¦ð¾qn•À;i½|Ô¾øèñ¢ô¸z”„œýú5îúöÂ+ÇHÃ×_Í¢ýå+•k·u¾ÞŒtñÍU¯zÒ*¼h_\z¶(­¼ÕêEÞnŸæ·R@©xÕ±>^ø”,5åÝFÔYåB9¯<~uà9ð‹ÜÃÅgKÒÉÞÃêEá:7ÍÏ´»åÁÁƒÊÔí…RŸã½ê.€Œð.™(+ƒÌf-ž²ç²Ã ¼‚¥ÀˆÔ¬X’páÿgïÝb$9ÎCÍÈÉÑäð¨Õ1¦ Ÿ–ÝÛÑ„‡ë`î¶!¯·…Ó[1”€5G„!/÷Å ïÄ›lAÛ‚J•Ù*‚yÕ` 𠭇ѣaA‘çAÒd)SÞµ 6ø sÀñr2Q†z b¢Ü^N´&&cÿ?"ëžÕ]Ý]ÙÓ$û'ØS—¼D~—?"þ ñ<$ o¶÷D5£jÉExÓ¸ÉÏ^©³‹e2“Œ¯]xÂù®Ù@ÛÙÓbž.%™°Ä‹æˆt¤“‘+Ñ¢s‚𜈳ãùóäÒ bÚíQªŸ?^nPùL~3I˜dÉœ£\éh'ÉIÖ¼ïϘÓ|ñêg–—_}õæãŸæêg.ŸsŸP’º5 IDATûI¼®tôØfîvÑqåÀ+uùÖ›7ß¹rõêcŸxõOHDŽˆn_xm=‚æäà•ë)úüËþ9ÿø•O|ÿ­å¿þ÷{æ.“ƒމ?¹üñ8¼­¢ãJ÷/+3'6 _øƒ/ýðoþŸ7Ÿ{áÙ—¯?yëÍ×o>wåÊá³úù“˱j~`¤xåÚ Üzëõw0ŸÓ“?xó­wÞ}þ“×?±üý#\ÆŸ\þö˜ÝYÈ‹Ž+^4c\Ãòì—¯?õÓ[¯½óÎß½ðÊÞ¾ë\¿¾üæ ë"èป.þñ'—_¬Œ² .Þûß/“ù?ÍþŸí·ÿô¯þóß}ýåë?ü)T¿w^¸úôg«°â°"Çf²QáqeÀ+ÙþwÞúàÝ^xùúSÐluç…g¯?õÔ­7oLtƒI—ñóHÅ1÷GàŽÈ‡•,ZW^øòõë?x º»;w¾qýýŸüûþãà–‘³LÈ«7 yå.ãÿAË€—”‰Ž¿õÁ ÐüþýÛúÞÃÛoðλ÷ìÕëO^¾œûûß{æ±ÇȲ·ÿìÿAË€÷÷åÂóïëZ¼¿ýÁ¯îÜ}å©7ߺñÎÍÏáâcËç—‹jFÿøZ¼rÙa³}øÓ·?¸yçÎ×_¹þð6ê+w~óâÿ4¬rß.=÷ÌÓÎòååàñsW®bó½TdíÏàA‡ß~à=ÍÖÄU×óûáÂÿË×pyù;˜§ãêÕ'–/ÿæÍÏc w›ÇþJÑufñ ÃogïàüßÇç®ö±Ýæò0þðÇo¾þÎ;_ÄD¨—o½ùòyz¨¡>cÔ¨ˆƒúã%OþÞ¨½xK†§õ+ïÿoõMû¯ÜÓo¿õÎ{w¾ŽµÿþüŸžwÓàùËsWL†±þêÓË—/߸yîÊ‹Ã=_AÉÿêÚ–òšÍ´(~Þ{ÿ‡?ýÎëÐBõ{âÉ[˜Pñù«#ð—®Øš7§¤¨ä ÿØÙ~äànïÿt(üýûßúàWïÞAÅù‡?xóæÍ¿|öÙ—ÿèòŸüèw¿ù…+Ý©Zõ_÷ªŸ_Pr† áMnðJNûcl#Üï~öÞƒ¯ùúû?xû-‚_|y®Úùù/ç/“ß}ç_½ø7Î]¾A¾ùürõ3ËdùÒ7»×)(¹…7°×sòðÞ+Þ'Þ~ûƒ÷ Ù޽ý›ß¾sçåWÞÿÍ·n¾÷î³W?óÔ­[oÝ|þ‹WûÔò-BnFƒ×)(¹…·YôP…£È‡¯Ùþ//|ýÞûoU…÷î<øòËOýð'o½õ«w_À%ƒ?!ø÷¾ðòŧοvé¢Q¯t¯oü‚’3ü[¸¿}RðJvðþÄíÛ…·}øð6ô|w^@ÍùþÛÿ²ýÞ Zß¹»ûòSOÞzýñÇÿK¬ˆ—aæ{éÜE3ñ-¸„…·\tõ‚w¿äxðèO©õ]r à+˜¸½ 3>Þºùî³Ï>ö¦4~ýç.:׺+W'îošÝ³YÔ¼’óPŸƒYÙûúíÂ[ßÓ8qƒñÙë×øö[8Ë¿uówÿó3ÏÌÿ™¹€…wÅ·§D:›§šïák/[/ºòIÁ+YIþÄí}îé¾—Zò1ºÆïÝþçÿãλ_¼úÔõå[¯ß¼ïÅååó]\²È_0uá%Ö}‘(¦]d™1ãÛÖÓDèž¼¬l%yªRàêå7^É)~õ?ÜúxTèOÝZ6ױǩ5–&äçq(M&µáGÑ*UŽœ»H¥‡f£É #‰|øjžû@ûßxøöíý q]Ckp0|Øw¾xõ•—Ÿ zkËö8åÓXüòÜzÞo›áôpòʽ÷ŠSâwqáåÉï'8÷Ü9ûx2óýM-¼=ÅÑ­£8À‹ÓXÂA?©£äéÙt}^WpÝïí>xïÝ;Ï~ù\r~ýç¯^é_j^KfTú¯±´iFÛ=ŤÏâ4ãÞ ÀÍ‚ÃÛËM+Gj¶¹Ü•ïúßþÙ¿zþû Àkh„÷kú°mô¼m]„¼À+"SFÍ[. ŠÑn><¨ûËÝ¿ÊógÃH‹ðß¡{0ÀÞÅÁ9¼Ûoá¥0ÚÞ-¸Ê‡m†á\…fûv¦§ÕóŠäîW®_ÿ¡}-ª4€>O±m¯“Jxà%Œø0ðŠ9¬|@ŸÊºðhrãñc—ñömPXîØ×rÅ ˆ¢eõ¶ÌÓ™§7žÈ|€×Ü €'y¸Up¡à½ï,—Eåà¨cSHo÷Hºõˆ¬»šðÈ“Äsµt! ‘ U7ó·0/æW)¥æ•(‘O8wge”p %\{àcü£˜¨úZ2šY¼úÌ“ËçÑà«ùÄÁ%8œ4ò^.reͶÜX¡0Ú¢QÙì„e~ïõ#‡WêJòùàæÝúÞC\$™‘0 £“ËáTµàíý7d#ôcÊÕ‹OÍ ˆCBeÿõÖ¡Î,cÀ(·Ù]ö §ðCYÆ€Q*;òú]˜^ŒYùC÷¨g–¯Ô•ä«WŸ:Â*rIRÒh{¥¬éÙyraEœ‘”Ñl/.—DÎÈL¦g³‘à•Úâ“Wf>Ú]Ê€@³}¬$x¿¼~¬å¨™Ê¼­\òŸ>µ\9OÎ^U9º|ئgîÌá%|Â/V—ïÿ-‘9?óf;o07¦Ý,‘ÌüZÆhk6JJm{ñêŒ _qü'_jÌi'Ò~2 ¼YLÏ®\)ÊŒ›-·ðTþ†õ¿Ií?öQtn ðÊžA³¥dÃð›mÇþÃÌß“‚‡A‚²Ø]qŽg.0*#ð¿z4ðn>~îJYðH0ÛÆiƒ÷Oå&NšmŸ§rxfMo8õ#÷AP&»‹'ï‘ ``±Òjß«ÿþàB·‹ðfwÌrìÊ#÷òcË—ËBòßÍ´°‰£V˜Î3°z½¦ô­Ëmª[3Ǽr3°<6[%à-ÓŒ°È¤²! ß 3Ö /¬z‘€º,VŠN.IU)M.¿>Ûé™äŠRUaÂ×hÜ-x@®Qµ†ïR}°ú‹þD—ŠN.c´}†\>”ÏñôLùŠ…Ê§¦Yâè‘lPOÖ8¼K3Žáë*¯Fâ*Þ[7/‰ȹ¯$<JÞ…—q0¥v^(«œQ´ªÆÜb•‡Žóßù×33òAAx-5OûÚ4ƒW’/q™Mg«2 ù'14(Þ'¯ÎXÏ3ðüAx<fˆÅš'”¿èÃ[zR£í›7Ï•§çŸy³Å4˜²ßçuž­y_逷Ä>Ó³óäwgZX¨y/èÃCÚÄ8Þ¦Zz]òEvrðäÅå#l?P>9ûÑÖoe^1¼ÈK5è)‚œ¼7oÞüüL¢·Éùà_Ï´°^ÀÈᙯRí…Ÿ$¼«/?Q:ôï`3-¬ª7ñÈÊ\ƒ‚7dDŠ—T‰MWeòæÇË[…?OþÓìKŒÂñO7 †1|7Õ®t‰Ot2j¥Œãb‰ó³óÙØ¥Mò4RlôóaSU¾8ëf{)Þ÷ÏC»}æb9¾Þ—oÌv÷ìX2{xž¹Z–Y(ÁéÙlç¶Ç’2j^yèÐ&ùôZ†ÎB‚n)C.ÏxÓûX2{x¿ù"y¬<5ù÷ÝtÍ{Xn>jç# ¯ÜŒ—_íôìXR¼çž!å«<÷ì'g_â£J ÍöÍKÁ¹Ï—¼zdÅÙK zÞó%Åf°rù#=Új lQÚhûùgŸ}‰*eŒ¶¯çÎ]) Þ“·Šcs_ŒÔá¤=ïù§Ë aªJYÍvÔÊæ´ÙWfO•jÜøxiÍv 4‘GOÁ¥ 4 'K›žõ ’­þXšÖqç¿¿ùâÓWÒ¶Ï^(m†Ñ‡g"ÓìôàMT3{xoýè¨i¶§ßz`ëqïø¥íË©€§Ë.†GÛ™úŽž x¿ùüÕ¿ùÄòå xÏ?û¥ã±PúðL(óVÞ䜿e4Û7oÜ,N¯8yòGÿÃñ‹X(§Þƒÿûé+s%¡Cxe)É}x&r^؃Wå×H }ž~ðòŸ?ùê­àæ¹+Wf¾ ùÜ _žE{’\ó%ÕN6G·s 73†»^Ƹ=d²oðôý SÇ\ÿá­¯¾·Ð{S=ùælk^DX+²qÑU<Šy€ð•D3³¢“O ¼ž˜ûííì½»¾~ïÞOáÕÝYßáIæŸ=EEk§Æª!}4p,Ó ï$ÄÀK ¼5Žð:ð4 eÑÉgðêžx1£TV«ô‚]xiO <¿àä3xuBrxvH à™5žÁ+/€—‘><ë to’<ªž€fk>¨Zx €]ôõ¼ÉÂc=xÝ£‘ñÔzÁ›$8ÚZxÊÂë&i¼ÁÛ9¼gðŠáeVÏ«2tdi+›8d^ÑÉ{xœÖ(Æf†ðb9ï6¾ú®† HÑÉ{xK´¹gæ¶²BqÁ½™Ã —x[ÕÚ¼B‘„%®Zõº`.®ª$‰÷Mÿ¾¶Æš¢æÃ«p­ÆÝ´èä=¼+¾ð2¢/z |\ð"þV<²aèÕUŸÔ‹NþØÃÓøÐ-=Ïrk•nÊšDx¤fb®FÙ|ÏÊ>[黺mØŽË<+Ø!}Ïʼ#ȼcHnÒ˜}øáÍ"Mç!Ål7bÖÂý;UðTÌjÙÝO· ŽÜ-¹ ÌüsÙ’2o@ºÐNaŸÇtžªÛ>¯ð"6ÍLà%ò‰ì¼ÿ¨áí#žkáy9¼Ä…»-R7#xáìãC2 éO?”ð6õæ&´ 'NfáEøbó Þ˜ À‹ôÀëÖ¼ˆÉ•m¶â ˜q¥Ã³ž?ìC Ïëöyߢ:–¨0HŒxêhRvŸ§-ºÐÍÚ¸—rK¦E¤Ó&†8Œo#ÆöÝ“=¼ÄD{ÍxD4Kjï%ÙjÙ£­Ž[IÅ©—¹â’ÙÞˆŸMÖaPû}cK0.§Þn¢½´ ÏÓ­¶°ðâÚ}• /l Ÿ¦ÂÖ¼X¹F¯LyBüMYYc.¨KVxò£‡'ø®ð½ÄÂË@'ÛÒƒǪÖJ‡GSé³Xæð2jLâE%Š7Ü¿U–LÜäqydðR„×À^†í ãm;·EŠ'ÇÒïÂ3“ ¨Œ œV>k«µ%«ðäG¯‰Kvž…'}Ólc„×ÊXPÜðK‡ÇRÅ1(wuᥙ·Õ–ÕSOÒàÕž¢-É <˜Ûf,T¼mbéðDð*þ<ðÄžb·Û²Váw O~DðÐPtPñtó „x±f é§4‰n_¥DdÄÉ*>Œ®#ðB ÏÕв »º^ä4uFæ=-I¸‚¹õ„¼¦¦Th{µ¦Bª /wIÊÀ[ÔÅðd'#>Â3áÎÇåÁ{¸¢Åx>qÄA³Ì ÀH"pÔ?-^ÌK‡Ç4À µ…ý¯üª&4=!ýË#‚W(Ìöéïh³0ÀS€ÞOtùðô§&Á{ ¦‹/·h•Ó/—»æï=´]Ú<Èøë˜bà=V¶WøP™±_Mcèóhá[V°Rï ”Â/T×c£-Âó”Ñ:Õ„êîº8ëÁ‹ó^FÀûžúᚥ”\$èÜv^Séax0-3ðPIæßó· sHœ~xEÎNÞŒa^˜ˆ,_`fMTXà1éoÅŠ¯ñF¡ª~šàÞ½d+©€%ÀŽ´žÊëžÑéádƒj¦of竌MáÄòhávo¥ÛçIãºòFà>¹æ¡HÑ*á§ÞVÁg3 08µ\„¿­ùÃHSoª¨x=ûTÁ»[ðYÉ6É$wräûuªàÉlCGM+ÞAƒÕ©‡÷hÄÂ[ô÷?ê ^¡xÙâGÁ+³½’}ú€£ÎàJÀ5nDpÔ”ð$é'¸è<[BÂÓ%Þ :SÂûÇSüŸo·´J™ ¼qnÌ6 íi•)áí½üäåã„{ÿ£bÏ·¹~Àð¯?õä­ïܼy¯»'ž+tÖrüÑöƒ÷Þ}÷Ù«=qùVpì€úÿíÒ÷gò\'"³WUî=|ê·^¿ùÜçŸ9.J’ç<|é¥k‚ý”É»[ø÷0ÛÄ'¡çÝñ¯_òÖ›7o’çqný¯Ç-[@¼þKju;fÞŽ¦µ)G£$¿wçÎ+/?uºÎÇ?eöy˜—ƒs¿˜òI$ïi‘áXï¦`9µðÆ%ûàÝ;/¼|ýÉË·nÀPôLi‰­¯8O¿r߿ݻ¯ä¸ìn–O¤Ûq^?ÐþDçÏÅÌäÁ³×¡…ÿÜ•«Í4Z®;I—=sxøò#¯X@Åyëõ_½ûü³/æòåïܼDŽÐô{ðp ‡‡/ãîM>ªðö“þûüÖëïܹzõePŸnÜxz2q~žÙe²/{ëíGxÊõëïÿôÇo¾•g›%¼ƒOøˆ‰íèŒÕYÍ;¬Xx6ržyyozýDp72>G~p´¬Ò¬˜â­ƒrƒÁ«‹J^]?rL’ÇÄSœ0Œü¢æ<=aMècPÅcÛl+ž¬òèš×¬«Ê"›ƒ—ò¢«.Ÿü±0´Ï؄Ɍ5eÁ›F[UjK âXVý“?öðÖܬc /LÕšo ¢½TN<>öÍÖoöàU€‹•q43ð¾gx1¡RÁK°Ùš—5 Í6‡×xÜ£΄\·gðDžð©¬eáé¦Zs¥oá¥gð àU»5Ï÷tÀB O9ªB6zð¦H÷±†'üPÍwá%Oƒž·zo_†F¯ž*-œÁÛWrxh ðDÖ…GSõ uñ¬ÏÛWò#‡÷DKUUŸÁÛ_ŒªRÏáÕŸP¹’œxß²ðòäqãr¯™1W~U÷áa5C}¯ J2NÏhÚ9›aJ²èfsDþ¾ôƒeÉ6+_F7åFž˜à òq‡‡;ÝäÊ.â/Z?çþ»§¾¹@VVÙÒCŽ p,<ùã/û”Ö›-ãJ€’ç}Ï5ð‚õ+ G[ é’5R|òÇÞ°düîí-óª¹÷ða¤#ð‚Út1üRËöQ“3xÇ3xÇ3xÇ3xÇ3xÇ3xÇ3xÇ3xÇ3xÇ3xÇx¨R9«yV$?ÂIgðl˜(ãuaì£r òÄNûy,ŸÁ³þRf¡Ý Î%ÈIžÁ›,{9<³Å3¸I&ºob=QÎàÙf; ž²ðTáÉgð¬œÁ;‚tCmÀÃOÎàí'Á“^q,µ;¼nÊ3xGn¢³Ið„õj9ƒW$„n+ªh6ÏA)ùÙÓó@t9¼ÄÂÅ'½û›£ÂžÄímRY Ñµª›,xn²’UœÈ×תÃôÃä1?yèÝÇ^ª½´¶Å:×YµB¼èÊêW’UÏH¶fáýGG,ðŠN>ƒÆiÜI%×*«xuyñ¥¬±V=ʸ'°ÙFD3š†•:ƒ×h5C‘ÂÜVé 勘þe»‘d<ì`gׄÞ/<ëóŠj^‡"Îá¥rí ˜øg³Ø„»/FCå3xE‚ðÚ ÿŒAóUµB·^|oAxšZx^fá­Uè M•wŒž'kgͶXÕ„x¤ðüˆTÖ•.¼Àóµ7 ¼’c‰ŸB£ /#•Þbhà¥-[ó|q¯P <ªž–^]gŸnYxÛyÍÛœªÙ~üàµï7¼.<™ÃÓý¼Æ:Šwºðè¼Biï4BÝ0ðö´kí<ÐüÄÀ{`ŒNáÉwx)ÀÛ “]x¾›dx»¡¬¼Âõgðu€‡Ó3©ß@xÍ̯'è{Æq/×ÀóÏàJºí5Ûvn+}SóÒ XiÚ´ðÄ}„ç‰3x"æœÄK\qÂx±F#á‹ Ýêè0P±ð*žØ):ùãO.:‚ OžÇ̉ë.!T:z»£#²ì! 1O’9rEL±$õñƒg$ãzÉס· þ‚ežÞ~ “ O.‘hÞiÊ)–¤>¦ð&Ho¿±1!àÌQáå}@×’cóåúPHñfí€^nÁÑ…Œ~Ÿ•›¢ñ$$;0wÓ1áuÿMF¿—^gx‘ÆlÞöò§AŒó¾rýÖ Ä¯të5á5ì0Útáf½}JxâÌùLèÑlžFÛøÖœd^·Ÿ ‡“†â•[ÝO¶¥yч‡<}\™¤–~ok æ «Ÿ ™žë‰D7[ؘ£å8ºÆAÿðâMc…/tâ7ÍHÛíàÃ!ƒ­ax k¦oL©sØž¦öh¬Ý“'ÁSÚÎI×Ò)áe4N¥ï¤ªÆ/zï Cx?'&O½0Æ0‚ʹ´èÒêáðh… Â.¼-ÖšRçðx@KomÙ»ÙÀæÄB0=ð¦^†ÒXŒM{f-‡€§üº5¾éaÒX.Qd-û¾˜§—„‚ <éh’\ã OMìu†uÍÓŒ›«Ý¶’ÆÀ-©;cÃ+2ñ±H¼÷v¼ç¬ÓÊ´ðX ðB)3Vÿ¶…Ç-<éÓ–1 S·w…dðN(âx?§&¯^ä錰EÏÞ02553o–cðxþz`ßê@x-:¤˜oy ýƒé.;ᢱßût¿œc‡„·®Yøß6ðL…kª æ_ÇÀsvÚ&*n*UÅU¼&áƒ8N¿äfñ›Ð9Ò‘  Ëu?n¥0Dè~ò"¨¨Õ.ƒÃÀk Á㇄×ífÒ!o6¬ä0$ IDATðveÏ3(Ä`‘ àÁÓ7o(U÷<žçÃÎüYÀãIFÞ5BCö»}xk¦Ù„—h oç¶/8Äæð2jßfT³F;ã­8n‹%ž¼˜âc4š,cÙ›êß²º”’§ýÎ Þ¤_¿ÏÃf;Cx@¡jె=o.‘³€çFÌ¿ /ëãÃðËX#Fx­XÔxÚmmÕ;ñ3·•:ÅtÉê@!‹T öàeG…—ËLáÁ€ðPÁHè`Ÿ·†‹s çý6Tã à-­ÀZL·ðº¡©wo 3¿ExШ_ÑÍNw…oŒ£ÏÏám§=xÌÀã^háA^òEÊ©bK‡‰w³§b=ƒ^ËÌ<@»Ía*Y]ã¬@Ã𦭤7Õ>_å P÷honkŒ·`®ý»‹_³½vî1½”Ë“û¸Nê üRÜIï ÃKp°áéM“=e3ð`ÔÂàz»ø%Ô5`aK¯úaóÀÝ2ÌáAci0(«x;qæçðX;)Ñ}Xx‚\ÞvSÉ$ýG)¥“‘Í€‘Ä«Ó`>hǸÌÖ\¢ (¿Z2±Æ—>Ýù%kÐþы͔ Í&;8â5‘Ë.4ÀNºÍ–zeÊá)2îÅã êÃKþ¢OL„·áCˌ۸ÊJüÁð¶Åî¥BYx|U• &ï‚ÃÏÞˆliìÔê›ßL¼„˜JBxªw«nPÁORY¬üVg‹5ÂF£óÓŸzÑd¿‹¶{ðv^û 6ß+8ƒ€Ç¼äE ‘-Á# EAx¢¯cü-Üx8Y´ð(öÂ[ŽNEý(îTŸ8¼"QüÁmx† 7àg_„Q8hðLÐä``ÀT7/m!¼ºÜ†Þ»Ý^bsý —oR5/Æ®LÏéx¨WØšG ±æø%ô{1\Š8ñ\%€G¡LpŨΤ oRZ‚©gÇ‚7.1ް‘Ÿø z¯—¢N*¡nB«ÆUS€‡â¤ÂQxí!xqx¨×æð<=_H\…oÂËæMŸ×…P ƸzdàçxðìõÆG•») Â Þ ³kfáqå'4jÞ6úL ¨*G[\/Èáý¤¯²}ž'¿dš-Â3<±ÍVx¹_ž…÷O</² bΞ±ÉUû-IOÌ,|dÙ\Aq@ÿnõŒ6Œ€1ª*Õ\IFx<‡gô¼µ"x´×l=´l‚‡Óò^³}ÍWžôZZмÙêãÁ³ß–ÏÌÂGÜlÆ6¹ŒGç¨Õãðš:ŸaP€—À ÕÊáe8`(<Ȉ?Ò®{w᥺“ Ô¼È÷Cϯ·~ #†üƬà•(ÞÈ|Ì0SѨºóÌÄóD êÏ‹`TÆóEžÐfz¶ªJ¬°æ)\qÀ.ÀÀëà’ èy|§ð²-¼¶Ž4ox¼Ýú%êy_kŸ~xf/aÞޘ߈pI…ø:¹pžDŒ?#Ñ‚KÈ% <¹Qx竘'”ë¶È@y¤M³!…k]~©xI†ƒ÷ ¼€·fámçðœnxfédxmxÜoºq:7±4ð‚È VW<âñŠàh\óÈqæDkNò¢dfQyï“*Ð@æÜ²Æ¶¡ÆŠ*(÷Î~qÔÙIeÍ(ɿ䧻>x­Â#»ÒÍ*íÿ­1Îw%´äHx¤fCµ3Há&ƒî:ZY¹@®Á@ð€x$açÑŽtÄ5×… 'hI4x´Õ”‹0)߉¿Ç Ù~*&=¦’\¶ r˜Ö¡l¢¶'|fòa¼ötòuà*`òaáAÝ­©ºÒ#(%)ÙpÊ:%U˜Wºh¦ÕÒ $«·¢Á€˜}9%ð äPe)‚×—¾…ê`²U; Q˜Ï¢iWº©`þ³«×ñÄ[fÉÚ Ú@ÖajIVŽã>%H®¦dÏ8Ø\÷d¥µµï×}¥'2;Z ô³{†.>Ñ,zJx 7ó"í}„gU¥Í9'1ÛïÛl­÷²5=¼)dÚfëÓ­m•L"µÜ®n^_Ï®Ö^%ËÏ÷½®Ïær¼Ýý›ÿ¨L Ïn&#<32vᎈýÂc'Õ‰Ghëå³½—qñ°©sxiYð˜6ðÌú‡Î›í¼Ìp£2vµÃ+°—拾húûíCÕ®$rçuámê¶G†geÞÀô´Þ€}q?¦šò†wöKèGûÛœ;ϺwM´b™ ‡ƒ×8ÞÀ›qx·àÅýíØ‘ %o† ‡Ó š~ ŸMuÎл™Ãʱ5pùpÞð]Ãg+‡0èþð†Nñ%ÐÃN-a¿r…#9á)sà›,SÃCMQÞàÛÆÝþþ¦ï4Û£ÈÔðDíÛ}ŒP ³ì9ãÖäê0Ë ºŒ ù‰oðÀa}?&§Æhj%9ȼH!¼Œ ‚‰tÑPú+ º”ÿmp¬z—ƒ7ôv a ^O_3 ø: å­rO–iáAá oÂÍW‚ÛþnœøZ?l7Õ ¼úÚr±ÈuÄ ‹ªFÌM€·Èô€}ÑÐÊÄáÝÅ?ø+ô.f¯OoÌ¥ÿÈ25<Òƒ‡v$^ ‡v¤î é«NS´å¢‰»)–i´AÅ2âë P¬ûŽ¢›‚(}Ï3eož°1x Ÿ^±cT†Ãªy‡0ü^‚LæÇì=cЕ¶n¼û)šÇÚŽZC¯/áKTG×Ö6h HTsuÀµrЈs‘E¾ XE±ƽ¥Ð©à4[áO_ŸŠŒx^Ô]9H¡çYxªJù´ ¯…H/–U„×Q¬˜c Ñ’SU8Õòâj•Ó]Sˆ“-1-מX „GnFÂ^fÐî2G.¢I•«ïÉO{?Ùq† |bw:„_á®HŠƒ¾ÍzN„G„7Ù­šf]xŠïJ  åâ‡h“ÔJÑ®eàÅ}x´­*~C«ÅÕŒ£©ˆ±‡å ÷¶)4êyÆZ±Z„Qü’§V]­–åEP_s$Ð £Š¬,,é|ãðr þAPúÇ~ ¿év~剆dêš—Ñ.<ýh.¾1”K|cÐeBôõá…rf x|à­[;é£=lÃn±fæy#L—š÷³ZÊšSÇ‘SÒ6ÌÓé¼­,\r 5ðFU =kx|JßüÃÃËXF|*^ð<F“5 £‡šÍ£ªhÀãBçðB¨± ¬½Ï[DxmHiŒ)w€l¢Ñ©¦;Ð Y&ªæÖ‡ŠŠàÕ&ù ŒK!¼ŒñxS®¤ž\µðÐPN8ðÂzž« <Ú…‡ÖÇÆ2"£?á!ÂCûÇá!ÓÔne·:pvˆ¨½Áå¦l2¼êTkŽ-ú ×Qž1”+‚×H'÷[Gá1„/³ðàã.¼=FRBi:ÏY%5g˜iÊ!*š] ÕÀk” ï6Î0Ú²?Új’ÃS“àáºTÚ…×ÀØ4Át9ÔM¡Gá…hu÷°^FVÉzÅUd‰$¤rÎÞÑ×.¨åÏ>ÝK3·kò1f4Þx65¼Ê¬áᾺ7ÿ…Êm‹nÍ«4[¨]x5>Hãð æ˜&Ãc9¼ëkÜN6á)U¡²âʶ)IÔvøÌlÐ!kÃ`òIGŠIÑÊWÐèšño%~ò× Å­ø®Ž4z1é–QqäFKƒ§ <> å¶%«çð¾1fjÃð|Ãc/y1‡g\{à¹/M¾6OBW Ÿ‚:«*D½Š–ú4¨y^¬ ᢟ’N6¨‡Ñ•Üúã?‡c~NÖ`RΣKø‰qÝ Xù(oHª«—sx{ì‰Er € O¨/|AØéʵ”Q’U<öáU ‹S~>`läðÚ9<_×Ó.¼ª?ô<„÷‹ÏiÖ×~¥æ¹±;?51a Âc¡‡ç ü&ÚL5¶¼¸å„·pëµÚ«ÃôL ãKÌc„'b€‡®W1Tƒ~%*nt­æÈKL¹PqëÅÁG”äIŒ(ÝaÆL†4îalܦ%ktsýZòk9¼8Û@%ÙÀk!<£çUºðÒ<Ú…ua¼Å:ö‹ÏÁó»ðR‰÷1ðÚ ÿŠå´ltnE¼-蜾báá1è´Æi¡-Ÿê&öD‹¨—j˜N2l]ç(ÖZ8 á]ÙXÄ“/f ÜÆhx®NX€!*‚ä<}ÂM`Ÿxns­“NjŒV-<øñUïÂKºðvr=aמ ;Ú¢‘μíÈÀûö0<ªYfáíÁ·ª†>æmã0 }Âûzs¡s«†ÙâMå*ú ¼Ðc˜qû”&¯’ÃCc3mœ­EÕ ›9>ÆÂº¬yqGÂ}¢âM·i§göKPa kŠ%º)…’ù99Xg„+RAå&’mª/Áð0ÍÉ•d{«$[BxŠ÷àÁKÚUUÑ <‰ðä’§ÙÀ€Aº>*¢cáµz𪞟ÃãÑŽähßÔƒ‡n] „'ÌÌáù¬½‡¶÷ka­xÂû TctÔðYRÜŸÞà’³Í_zÆ À“nr(7X¾@ªdS88Ñ—4K´nàÙ"Î&ÐDE1‡×43 ˆì /#¦Ù6Þ®…ÁKLf*­ÐDúM|müK ¼ÿ5fÜ+ì®×ß³¶óf´mµÞš·–Ú_bÃgé4@Lj·†Wícežøî&ZÇZxXÂTØS—üàhg‹nRCÃ-hÙppF·idæ¶žÀÂZx-…&9ÂëïÀõàɯ"<áÅ^­ŠðL° ¡b¾JA™ÁÔ —ž12Î<ø=Íú*éî <¾bàqã‚q"ðFÅîl<¬ÀX-Ü-‹;Ñœ0|24â„^F ²6ç&UÚèôL»J²DxغiÚ7RJXÞlå_xè]Ü…§Fà}îÛµ<è§Q)€àÌÝÁ5“àùm ¯¢Y{*x3c7&»[m‘¯3× x°ÊI\rÉ ÎDV¤ _ö¢AM¤(Cwµü{Ð'® ÂC09<¿/ÁeÕì÷_«¡'.4«%†ö¡°OÍqôãÆáðœW^œ-±>SÂóK7I:hoþãªlŠ‹¡. t$ºèDèÏ2¿8WY~øžîÂSžéóLtœžìÁK ¼ß~µ†>(ø 4C¨Ó<`…ö˜a…Éqx•¼N@€ó£®yˆŽJýž ãùwÞË?”z‹UxáQÏדá¹QÖ­yЧ"Ä€ <óò}¿š­ÆFÖ‡W‡ÃN;¼tŸnžÿ :­°z¢Xfàá’bžÀaÆ^Îð"MbpŠÛöàä9‡—Ï|¸÷¥¼Ÿ ÃK±ÙÆ ivxíiàq~¡F]±ÁPÍ]#¢uá%訯qzÖL <˜Oï!<ŽðX×MR•ëym;ó1ðÐ ¢/¶ðTÏürÊcfaù-SÁCOSB6`¶Ã@%Kç£)Ñ‘*ñµð:8)0*m˜ç|ôÝ”d€×Áé‹¥™ùôàåJòÖMª¼£õEÐÔh³CÜ„7Þ7) Mx€¹A”£üˆ©óÙ9Ÿ+*ÿ ®Ì›™[xáðºs{:àNÑ=mžÕßzW4ñ‚ÌÄjxhÝ`à…ÃÜ` :Æ(5œ…Mø2!I¶Ä1,“–ëÊðèdx­ÓCn·×^âõám†9¼Ä•hwK©Æ¬qLHc‚«u%´uæµ)‚T…Þƒã¼ô¨lçðX^±ÊDâÁ<ËIT= )¯mÕ:¸\(/ ?J e(?‹Ö:³ó„’d"éufBŒº’&8Û37Yr%+«KîmAéh=1ðð‰âm€‡H#ðþÁÂ˪U¨>ꫨçém‘û/Wúðâ.¼^³Å­û×^Ü’k<ƒ‡ºaPÙËP÷¨?v‹°õQEëèÔ•›ƒù£‰5¸e…Ó:®¶‡ 'Ýj ´…9#)ÂKbÓu„Òx -^r\£ÁšŠI3¨x‘2æ]iû3Œó˜°}ÏÆ¼6ðÚÙW4ÀÛì^c‰Â{ÏtpÝWÓ-LâÕ°ðz…°™Xzð¤Æì*¯© <øé kË.,rŠÎ)&‡_ŒŽú-m³ƒÕçÖFé”~œ \P ¥~Øj•O†$¡QÕQ®›\\pÈŠ‡JÉ¢1—bèlhš­´AíáÖÐvK' ƒ[xõ½†Q’^¶á¿Á àÕÆfO3o¶ïå¾j:0Š-oÀÃÀÐT^j8.@xqº¬dáÁ‡­!x,F÷8˜Ô½‘A÷Ó6ðZ«dvÔ†ßh´Ë€×“-˜nÖ ÛòLW³ð°kqÉ2®æÑ×hÀƒ Y[$³fEV˜›ªuh^ÍÝpÏxa…Üà*T’÷âlÞ¹¯:µƒ{Fà%ž‹¹„EE2݇ÇsxÊÂkäðøÝЀ7KÏGxè6¤qŸÆ›§ð-z«ù%Âë X› ¼à]a‚',€ÿHD8Ô9É<¹vmC¬U½Ä­Ã|!l™ ‰ 1Ô¯¹—šÀ÷ƒðøŽ±öŒ%ÇU$t@ëíoåð:Vqø5™J9<Åp%%3É’XÏ3z^^GVºðT^hà­ñ-š–ZóºRœ†ÒÚ!ÆÚMqBááØökGé/À±FL'Ùð’Tp/y)ÙÀ¼2Ñá’ñUÚ]‘äPo-¼­Þ=žüª2ŠcÿÁèV5]V@³IpòÑ1Ùü8†~©°Žhœzôoƒð°Šrv2ðT!¼1¹‡ËºÝÈ„ IDATF1ŽÖè Àû5f´ƒY[4çà)ÀĤ² V¡ëD_5L=-WV <èÚò‹Ù>O¾¤AqxèM•õá±><҃nj«‹Q’Ó€xÿœÃ ÑÉ30mx˜_»rB5OM0ØšJPûe{ú“ «ºðÜ“¨Eë®õUƒ†wOU)º¯m,òü4 Oýá®@űó á ‡à5ÍQª†`\ßįP”0ΗÊû_Ù†…?ÆjÈaD*K5âœP³>þДýáoÄü:UPzKA+G©Ö3¸Íáy»Fqì<Èû¬êÃûIž]3‹QǯD/ÔhÝ.ÿúÓ9¼ºy`˜dçðøü‰Áó ’óÎVT¾hÒ‹JcáÁh`ÇLzÙg3Þ0º lzð$F#€™6.s¥u ïK]x8#ëÃǙƒ"ðL€ƒrEÕvzÖ…Wßä™ô³~Í3ðn#<›ýßb„ ø§&&-¡J²FUE™ÉÂC]î…}x›xò«=ן\2â¡õ:³Šc´^ád4^3ïÖ˜–³«cÍ«x¸b«|;ÜBx0׿´™±—a¾=PÐå×BR †ø¦¦{ÅFßäÃ{itß1»Ä‚àÅ‘¬?@Ó>qæÝð$ëAoéÉ'ÂH‘ gÓÑk€¾¬`æ¨pnkàé%€—*ü…Z©ž¥¦ß£7ÝON1QN1¼±ÉVŠ}«†YÓÌhKÖƒK?¢Ðí9¼CœQT”£7·ÃÁCEÈŸ”>©ô„@Æ6=÷þ™NæùJ;’Ã5[´ö'% èÃÛÙ00™Sc›¾¯ßĨLoV5ïÀëXx¸F[[®»}§[ i¶ôMßœc:YÃþÃd,8ïOqÐi€·gáázhƒ Fú8^¿ýRÃT&ÌG {„7Vàmñt Hy÷•ͦ1&¢o$¼û Œ·ïOsPÄŽzùà 5o?x?¨F]x8X-öàTË`XK+MN¼Î ¼ðpðìªôHµ§>›Í‘á=X[þs»!6FW­`0d6!bÑ‘µä)á ¹ª ¼–±æÂ\,²Æ6ëZó°%L¨âT&#;–=CxËT>w@' ã52€a¶íU­Zñ|œ ÝD>Ó×<êY–å©8‡w»8N‰à““žîÂÓË´ðÔ:úþhLU“Ã7›ÀŒ·ÐjØÀÛÖ$ÔÂÛ ¸«§Õ’×5/±5O¼* MÐaŒæm|* ¼5ÞJ•F‹,nÁ4VÄÀÃ5ó”…ÕÙ”^F|±à³ÝM-Æ8ã^g ^Þ×m×. oì»ÛøGó¤÷Ëþ:åô,µðº5. ðpf®-üʨ*Ãð¸gÓ|¡[€GtŒy,ZØ­±8•UÓl¡I€ñgGRžtMÍM¾‡*ø8¼üß­â°ðÆž?õ¢Þ)ú0ð&Ö¼QxÔ¼Š‡Õ4ݲð|>ÏÄÍ•¸MÅ{ð2Ícá’4K©¦1ŸUü Éic¿G ?ü&+MæçðjR+~ oL̵G«Lž¹ø~½á‘à5кK´Á˜²D7¶rxÊ…'àAoíäðà &ý…ïÑŽycáeæ=É–°óL^Œ¥ȉñ륱?V€·W>¼ƒåhð„éóŒa Äçð’>< Ö„ns;ëSÁ°ïdÛ(ØsI‘çÆiãßEÜLÒ–´@ׯwTzð³ ç_±â8 ¼©}ħm‡á¥}xÂ-žÃ {Í6Ƀ#<ÂÛ­C‹ÿÈÂó]0~· ðü– R _ôÑ- ‡'‰…GÐ!dÞÂà U³ýàáSâG®¯ÂøâA7'>ÁÉIü„mbŒ¿Èo×Ñ£;†á ~-ñÑËØ1a^8zØ$™^®$çð@ùX±wá1ðú9|˜ÞÇ€¹¡x`áAå4A‡…ÙŒ€—ˆž3Oåðˆk´ík ÷q+j¶xçdÕoÅØqÚ˜v!NjÄkn ù1ÝDç®W!Ð%ÈPyà-ÐľTk&Öܼ­…ƒëÜ»áw­‚§OŠ=íô¬ )Lr󙆅·màµi2oÏ>\޶>ºäðZ aO@µ×G|r <ìñ—L^luòô^ ãÆûV‚á[ Ö}ÊpÄÅ5nòvúoÀÝ^[r’ ©]‚à^·–wÐ>7ºÆ¥-Ìag³^ƒû'÷’ÿý>N&,ïL»ª²X­ñz”Ã=ÓUëhÖ†š‡K(éÀóóš‡þŒf~‚×(‚×k¶Ú®m©%€gšmX¸³aÏ¥^ úŽº£@³EÃ(ާê>‰ä ´æA 5‰Ùk€j]ªj­Æ0«#ºBõTp©è íÄÀK®-éWiä9šTÏOر›^F²?ºWÄU¯™Ð èq ßÐt\éÂãž…ëàaxl“6Ó·¾‘šù›ÑvÞÝ#‡‡qH,¼¸°„·‹ú«5j`ý2nÜPˤmlàvÕ&{Mu¡5ÇtÐ$¾‚yqàß%Ö†©$‡;ʹߪc4õFØÌ*œ<},xÚÕ›0XuÅEª•“ÌÓ †™°d«˜<=I àU<ñUm4`´µð¼x©Ñóô!v¡Ybàýzº¦ZxÅ; &kß–—× „𥅗&&,UËè>èÙÕŽÍhÛV5ãHÞŠ÷DÏN‚hº‡Æz T¢›š03Ýé[pzmN°¿>ä2¼ÎþGø³-8kj‚šz™E ž˜s’ErEšî&’?:Uñ ‘«!xv†±‡AZ”Q’ÑåÏÂÛµð:½Ñ¶¸Åx™Ó…Ï µJò{9¼ÔÀ‹-<ŒðÞêÂ3¹[m¸÷¢àµÍ$(‡½¥TkÚØxÛ[;ð±ú.‡…7&U_d>r‘DóNb÷¸qn:O0$cL#cj‡+ÎIF½(óÌÜ•亅—îXxfàÕ³3æYxl2<‘ÃÃAÕÀó5‚×Î0À sxè,ƒUr·cŽçðLä/”Ù§-¼ÖØ{ûð &j,ž‘Á 7 ðÌ*(  ‘#¼Ä8ª¸Á¥%׋l³ Üš³0nÓ–™ÛÒ㤭›àϸ¦­`š>¯™vá¡‚ˆ©éä<â¶³ qzðL®0ÝM2ô›Á®2‡Gµ…Ws <¿aRdÁ}NÞ¨ìlCÅG9¼hµr‰âºž,¸‰«P;Ihˆ+¾·K,©’ÅÆ¯wÉ)\5ðÂnŸã ÂKu*Æàyé<ô‰#®ØIÈ:õá9Þfâ»}xÄ|Û¥Âë8•¨=»ôD"Ñ’E«®¤nå¿*ýkÔi1Ç”p„ãFÁš(FÜ¢LϦ$íÂë ¿©»F§ÏטI÷àE@ú÷5ÂÃLN}xÊøR5@)¬÷á,¢åÃ+°ú–!_«ŒÞÈôWúž™M<éIÏKr¿Þ"x¡é S ™šé ‹Rí×¼xŒg¨œì¤˜Ëjž¶ðBô™±ð:í$Á™{X*¼ô xêkƒïÆá ·ËM3|óñ¯‡à…™…Þ§ÃðŒîcàõF[“½FË/¥ú¡‰ïjVÍ^Âsx›}x˜ ¯txh´¿¯È¯¾›^O¨uÇ@ñ€ÉkÊoxÊÂóvÞÀ‹Ó¾žwá=ìéy&{–pUôÎR•/äðvUÞ²ïæð|ïv½ôf{ ‘fxêËaàeÿgücO7³%º©>gç½Ôèy´… %1tZÚŸaì´a*²gf•d„w¦eútཔÃëè^¶ÞƒWñcÞ.´=H† q ÏûT}VÈšƒƒs’&‰·)+Ô £ÚœÄõ§µL}ɽ]3·e^Ævžÿ=Kgk&ë¼Lmøè0dàñ¶{ ౡ»x£' À+Ðó,¼`½æšÁÙ.ks”F¨€Á*(Ô%+¾×hJVo%˜>š9¦þÉè6®½¬q€·ˆs[a"Gx±’ nÙѶÂv¶vSŒ (‹ºŽ“‚7,U’©$cý6ô·ðb’50Ÿ’—TùfB¬ S>o£î”q=ÏCÇçkó.ÃÔW¤Êp• ×òDÍkŠ@ô½tO(VÇ ^jàÑ]œÛâ*oÑݼC qñÌ=Ýnåþ¹šýá]ãH5ãQ¸`ê˜äé ­ãzÞœ#ÜhÅ‹¸NæÜ`yÞk¸;Q­Â]qjÆ‹à}w ÃÞÂK²^¾8Ÿ›(ª½®ê¯ÖðŸÓÿeZCÞjE¸Ý´Æ^u41¦ìðéZÃpé¡Åâ°Ué»þwùÀ¹ÝèîyÍÓÛ9<2ˤ‡J‰A_…ÛwC#Ùö÷œÄ –ýIdæ@ãwÈ=Úº¿Û~,ú0ðLž åž§ÝÇz«u½pB7-¼Š…—4U÷Ñ”ËÅ„ÄðïÚÂ˵á7–6P‡›ç­D)ž$0&çsÛŒ©¹U©Öhª½NÇhy ÿDNšÚþÛø½ô¤›{°d¶ßƒWñCÅw€7cÎÏiu¿˜5<ðÈBzðh¬#¨6ž©Ý[ó|;Õçý8ÙË C±k6 ć‚‘.¼Å?F‹T7ÚN/y1Î+Œ}²AßÐ݉ððGƒÇrx…ö LÁËÕö1xͺ.ÃÀóðs(Â#.æ 1Å¥M^¼5'1‰f Û=xXÓlnL1žbª’Jþ+´Ýiwá¥h=ožß<7°Â²ë—Ò>n^oîxÖ†7Úl'ÃÛ-4e:LŸ‡/$ÅfÛݶFxðRhÂá—\:h*ö·_ƒpÀÀÍ(É’OHKÞ^Ü…‡¹Ôð™3«ZÓ2íÀ³Ï‡Ur^¬ØŽ…Wˆé"x“šíLà)máÑ><Z°N, aôôû4ðð ûžDx˜H>¹Ë€'ÌŒ$·Q„תë%j<žq~—¨êÀ+ÂX¡:TŽ"<Ð iS<(ª×[úŠïs8x;…Mjx -O«|MÙ-¼{B¥lŒÀkt Nˆ7þ0‡—äðJsx¾Ð?§±…GCÚ…Gˆ·—ÃXzØŽ5G‹˜kÆ’8©â5 Xž€ùÜÚ +Ý£-yaÒÓ’øø¬nÊ£¶Ç$³n–Ñ6nˆ‰ð¶·ŽÏäÞ°Jr•µ<ªcí6 ¼á­€5ÑZA/p¹äYxP'Íá ÝÄì-^ä£]]Æ•p ¯ ðL³VI‚×ÌÐ Ep“XC£ y˜ênì´²õT…½ZÏáyÛ’€6ñÑáúI¦—™ÉqœxŠÀj͉VXPó0š¨NÜ42sŒZG‹ûOó.¨Ç€—xqˆµ¦ ž¨ÑF}×j<àÛ!hò[Oñ{Ø¿Àœ‚³4[c²ð§‡áå5¯£ëÚÂÓ®Uæ%åéž3 ¯𶱂P“nÆäNKÍY]x å›°Ú8·lKczk|mbiw"Œ•·å‹c37‘KK• .æxÄOC„‡huôDFª¼‰†5SÃKLEÖHÄ‹\ã\âÖ÷Zõhƒ³“Ö²m/‡G›ºbPÅwáµ4:¶ð°‘„fYñí˜öà…ÃðŒÿ¶RÍ@äF_EðàÇlZ—O±6¤qÕ7Ñ›â=Ó‰bŽãV˜b­6Úýÿì½Ï#Kvïy³ÕÙ‚Ë-ÏÂ=p¹¢ÏÀ,¼x%Ϧ*1î` È+é0à¾áYºÆXu!Š™%^L¾…p9€7w!LÁðàí[ÓI¥ z!LmßBPgšÂÔÆV_ ê(wÞ Ÿï‰$™d%«Y?ºoÏ@{«If’Ìü0"Î9ç‡#ó¨¯U2D­²½4‚¾h*¶™ž"ÿIÔ»'<ׄç]ÔA¦•‚á=2bš={¶£“§‡²– A„ÑQKª¬bI<—J2Á›TM)‚÷'££ÏÓé5xÍ2@[`œÀðâMðFÍn­¹žqŒ>Ãå>ò¸¼jϦ <ê­ã‚o GS^¨ÎèêÇU¬OwŠëÛÀël{ÊÄFG¿ŸÅÙÁAHB®íÁE&OŸï…4C’B¬6ð¦U\¸ ¯çzeòun.vû?I§£· xµ‡w]Ú ÁbÁ/¦Þå*¼?Éoæá¥cšh2ˆôõDÎàK?ãb{«òðàc¯ÍÄBBR ·…wÛjíy‰ú ¤gQvò|/¨ã3—ôħÒ"Õ1›ˆœy £ˆ§.ŸMÍë=û£ÑEÊ{·ÁË«fÕå€Vàý¶@àñJ4'+ðH¾L<¯5aÄðœ7¸ÓÓ%¼\š%¼Òô¼öðøu|5ñåô;ýRoòW¿_Ï[‡×‘Ü p‰Uo±øKðB¸b‚Æ%YÅE^dò·«?M¸Ò–C0ÅØÚs~¥`ÖFåBbÐGàyA¼–‘QåNð4à †7I.¸úÁSC¯ððŠÏ©çå³ZžjàÍ|óFÔ½àu|ì á,¼²(É’§‰ËÛ8#Ii#+4cqIè"(8éH!//áÅ–M ƒÊ]îú°%–Ôóæ)lT^õŒáå?[À¡I†7ûG6!køž·ï‡­,œñðÒz-çײ=4¼’´—e—§Õ–"ºY¼Õa)"h/¨< ðªØÇsâŽðœáÍÞ.MofñÙ•,Ïø9/?|Íþ™o/ ^ÀðÌÿó}Cc` N µÆôÚÓ3ÎÒ‘Ç·‡†wC8KÛe#c|¢öKp_c$¹eùÅ*ö5åVà•— ï%WߊG?‹[ð⥴-ÿˆ¿ŸËôJ¾òÅuÍ/¿‡ÞêW–¹ç9îyoíjUÞFçÔ{Á³×—Ï6ŸÝÚ1ØœxúUû ÖêÚ Éqµ¯xØ…¼¨ fþ¯ZðLìcôG¯(»áÙ?üÖ*<< xÎT€9d¶ƒwKik¯»jé­Þ¸Þʪïfx9¶Ù KæðôÞë̱_MD¾!ÓW\ºï:<6!x} çá•sxõÆt÷SU¾­¬|@{iÁ+¤yŒ”_ÆEcŒåh\õ"sÁöš<§©Ï'~’$xM‚ƒô¬wxdŒ§àqLâÉ$ŸÃC„¹óð¦^Ú¼xÓ$ó±Á[i\duù4“…€ÄLöÄî:¬a ä<71Ô¾h\üÛá‘:Ký¦ØžÑHÖÄk>g€×S)¢-Ò+6Ï*MðÎ'¼‰lÿŒ¡â½²ÊYÏ‹_ÿºÂcG´åSó?˜O8Žb/àÙöIT 6…¸*T¢x„´½y˜¤²Îè0Ë$lȰµXׇÙMv+BUf <2­É°•ðWøœàÁ q&Á;OIYß@wÞ¬oh»š qêt˜}E*ù@4kœÚºlG»ûWú‰I¹|!Y„V„Yn^(¶ÄÈ$º!ü~—̳!g«Ëg¥Ñ2«ôYZ“yÞ}5<×)“m#WÝþ­ à}íbla^¦MT}š1U&$õV6]ª09 QÛDdú<ކ¢·«ÃZ޶‚w³/ðÕGßOÛP¸„›Út@¿ãC©·ŽâZ×û1=‰_¹¬~ uÕ ˜˜ˆL)‹„ÿÔŸª­†ífxdI¨™Ðèutãݽç¶UÏ»OûÚ ü‘ƒÛ«â"„bÚlA7›*uØxº/ÚF;ð=´MðnUŸê>m{xœÜ¨‰ ¹š»$MÖ¸×P%VZGùjeÉG½»m ÏÆV2ý°ÝÏeëoLZ+ ¯Ä‰XÛ(K>ØÜ¼-ÏŽÌ@M+–<çõTŽ—eõ=Ȧ4O•«ÅyXEDõ8, Pç vuಥ¹×8O±ßhëJKckd¹uQƒjaKËfgyƒÅç?Ãèu:Ô…cö«”— IDAT¹õÓÌædF[ÂCvo€g]ýØå—®7ãÜuú >3¨â’ ^¬&3¾ÛXÎØa[–¦þD9´½È{•F†®~$1 ½·wœÛQ}-‘››­Ï²é7³ñ5:Cx·-àmÞÌÞ^aô5xÿI4‡‡à’Å-x ùJ5Ãs«Û@ÚJ<È ‹¨59µƒÇŠàK’Ïé þá%; %ŞΧ)Æa››ÅßÖJ׿…‡·!6ëx—Íç]£“¢Ã> <Ž^¾„'Zð2‚W^¸å°E*Þ.xp&É ÃÃd.s;ØU~›z+õ¼˜à‘J2D r†ã‹‹¸jn[“| x¼ îÖâtæðnÔ»áz¹ÖRŒÿ…²õð¢ux±[À«©5xUP«ªÍVáÁó$Ÿ{a³tsxDõÇØÌyx£Yã‹‹hÃûNëV݃Ãs ¾‚à]l‚‡$ÏμvKik·?€[ƒ±S<~˼?æŒù€‡(T³oæÂÔz_´ÚÛxD•ãàÑzþ£9¼×l|må™á-ÓÞd1ç½Y‡®FðÎÝÞIœ—n—sѬÁÏÔÃCµ8™®Àsö‡ôðñ˜« È¥´Õ!”olŸTŸá_-ßÒ†7a¡‚ijsx7tvÐ_‰‡íƒÂSf3¼+¾Û?r ¼*p£Òí°ž°Þó¾öðÔxë9<Ò#Z8s’ÁMU¸ÒÚkh‰‡7NŒ OCs *ÌÈ;¤ùߥ›Ü ®qõŸ@ó#as¾”!Þ™mÙÀãÂ!4ŠSÏ1<åáaq]–£çyça†Ç7~<ößæ4äsx¤‰{/[_¹+ãÇ;!}t/³2ó\Úã?€c¤Q‚(vÂäEOÀ'.±a-aˆþÇÞ=±A)°:B¡%ÙÀ«UÍÊ8M´÷‡gÈfÀjSÞ‚wîá!#*T•jtEæ¯[ƒ×kàåÍœ×ï€ÿ4žÃ«öt"Wà|0®/¸7æ2d$ˆâ<ÔJû¬¬d:³ÿ3\rIøLØf[䨍e9›UýÞ'áˆàŧŠç˜¢%)ìÏ•ßI+eÂú@A{Nè'¸jïÝá%QÂ0/¢$ÇáãhjÝEEÒ¶ÒÃK¨øoìàpÔ‚wÔ¸t{o¼É¼ãx*Ï™&°Šá½bD ñT<²EZðTQ’RŽìÈ««Î.x‘±´Ö'é¦dKþ%xJ»‹ ZÀ¯øièQT²`ë(JûN™úD:ͼ­=àI×#>ÝCRåfê;i¡gÿÙ©Íe¨¾WNŽQèê:¼ ÷l93ñ¹×óÔRU¡n K^(ä9†ñÒ³°ïÂò:2q¥Zð.Ë9<Ò3xiyÅ1,òaT*Ë¡ˆ—V{xUœš”ìœL}D¶p“Y-'†=õlUûrGw†Çãù#ÄÌjÔûÙþ )æÍcױĦwBV°Ð‘ÐS6ØŠZŽx‡Kg xcÞOšÃ«%VÆ5, Þ¡ô=oêðrùŒç <å×hhŽZÀ+¹F‡GOGop[“9¼IŽj~ã uÁðÒ¼ã©í«<÷ðBþñrž¨G¶r½no•[Á»ë+ü…¯&‰<8%‡¡x±‹ÊÊUPÔјÆE1£ÁžíËæYíá•'ÆŠ^C½ N8ií†X ¬¢Leëy ³Òb»ÄÃ3>²Ï)è$¥›þ‡7%léô,AVÎùÕxƒà¹6 ‡zÙÞ{‡·TÈÊ÷]:[Þņs3YÍ¿‚t éæX¿$%ð|” ÁC#ÃCE*GR kÛ¹ƒ˜Ã³ëð†Ð­<F÷¨V¯œ;ÑôöÚ ¼»E0NTÕʆÏ fG{ PÖA–í%qÖùi··ÜeºžHö÷³xgkGónx7î£A¢œùOzu577Ó·xWW.íÛÁ[®G ðô ej° tÖõòMµd›]‹Î÷u·»Á[ÏyóËï¥a%àFxªãU»Iÿö©ñWo w¶ç›à©®WÏNéÿ¤å)w×Bf«ßå6WZqs³w½™oÞ¢m€wÞ O<™´ŽuÅÿl^hÝÜ6VZqpqè:fn\°`Kù6k ¯ãå7Ø…tÞ8jÚ—§%‹?Ól§‘cU׫óÆÛ· \»¼Ñx]/.á-FkWù:vózïå¼{Ú¦f¢›Žv´‡„×9&.Ü+ÒÎŒÓsxõ:|(’˲úÏ©³aýûÇI&Ž¢'{ð`´X¿´1Dž÷ìx7¢ÅX¿éÔ€Ö†íMðZë]¾N[­uì½#<=‡G£ðTO’"ƒ$l}.Q(ˆ:äîö{‚e¡ñ®á…°'ó³n †tð›¨"hà…Y„äOE°U=ÕFý¹ÞþëZLß®6ݽáÁ%Ñ.àa½š]ÇVàMH|=¡ ð—*e÷x—ðbfxØŠ6æàØõb•›†ç¼}5e'ylɤ¹EFþ'¶l÷ƒ×2k¯ÖÝš¶ðÏ{<ìÆyi«§ÈýÊðŒÌ^-%»7’|%xQ­Î/À¶•Þ„áa ð¦ÆwŸ¥Õõ\NžJ½ól4½‚@g³]ow·ÔÙWá­† ÝÞÈ`«½ä˜C¢”kÞÔœ¹S RWà)|¤&!zŠºÜ¼œ]ÀçðrC2hБd­K_ÏðdyU^¹Ift´÷o‹  ›àÍ<<¼AVÏyxÈ^˜r úDÞ¾ª…Ø7”;†§ÜrØr©*Ž‚QZ–3†7mi+›| æíx3üw3¼V¿KÏÛ¸®0E†ÇbGþ•Îa6T1œÓ¥¡1Z– xàe»ª~¬Á+ð ¯:B10lö{=otááõGì’Z/#îk‘D‘QIq„‹ —'ÔYÚkÃÕƒÁ›½x¬"È£<º÷ †WEÏ>V\eiÞù^ñC†ç¾7 x.ax'J»1~¨6¼ê™xQòF¡9uPkA?–}dtºâàØFCŽˆÌ1ÐæÆ4ßUÉ®É7Âk¡Ÿ­+C÷‚7¸ï%Ã#éxîXÚ<Œ:NIUq?í€7[ÀC 8àÕ{N¨”à8ÈeDê }7¶¤´àW[³ý#Ât2F°ibDdOŠçG‡ñŸG¦(Ž.Ç&0½Ã z:1 ‚›ýщÄ|B»&ÑV6³Øë6¼–â]v˜èw†WEÃ3sxÆi¯–#ï•ìiyIð&/þ[ÅU–ÒÉùÞs¶"0ïÛÔqÃp®|†÷e\|=¯ ÏÔút8š¢8'‰™Ûß9$«0¿$“N>:†}Á'¢A½ß P»åp„bxK„5\¦“þãÐe½0,°¼f£*ªNtFöå×f èKì´x’þÖñ6µ7çIœÉ1{=î¼ĂÈðPɦ§#‚§/&tðoåTY’€×èyÈvÁ𸀂‡÷u-Ó¿× x9‡áÖßû)RæÃßdž:xBu óð ˜Ã6Dº x_ 1mfãSÔ³H­í÷8ŽšDÔ³²Nxóå>zêîþ'a<óC2Ÿ«$2Qöâ0â‡.‰ ™¼Ø‰ŠÈêà>ðêð4Qp›9€“Gr‰IJ訰‡¿•€§õnO /†Fdɸˆ®`aœ/”ä ü”©ÄÉ99s!Šý}Ìð^5!x/]ý­/0ÚÍ5xÃ×$„髨C±´ý½cÒͧӪÖCÒ@oÂ1ûUìËð^YbC®<†8FÒÎÿA«Sü¤ÙGØ£,§ô¡¥qù´øoŸM$ RÏã<Ï81°yº¿×¹¤°%¼E³pCÓÔ2è§Ü ’Ãà4'¡è?‰“•!ñ|œ Ôytž^ÒÈQZI/áMÌ^5‡÷–ðèBˆAFç_Ò™¶¿2l‡˜ l/v³Šá)ãáU oBÏÎxˆÿåW¦ÞCX"çЄºýÈMm«!}Ú(ËG03ó2GÖiã&3»!%BÉÉÆÈŒŠñx¯÷ ðÌÂÊójãå Ê^,hG¬Z¨âÉnD“L–›g:SÑ|aà¼)xC!y8*©}G xp#F¶mÀ«;àI²êdV¥ÚœìýÚ<Éð‹…’ùåì<Ôl:¡/¥ëHÇS†7)sËðRêÕQ‰ßðF¦Ÿ–õî³øAà]K´å`qáö. bcv-´ÙÛ¡ E³E‡Á¯ÄI<¥)ê.MYX1Øwú,ý Î…MlšáˆQÀÏà-•dºÝ!iÞöÙs xÅ?«:4àaØ"æÒU xÓË’áÕ±¶D8žÃ³€çHÂ¥åÄ£!]q0É ‘ædÈÃø>sÞ¢uE tïD~M—lhÞŠ£×§6¤ùÒpD1õNDÀ>ÇÊ^¢©²£=T|­Ÿ ³x7†4&á€<öûKó w^‹Àþ¤7<¡Lh†Ç}‡àe€7âbEõ,ÎáY.š`ÅAúžÙÀ›ÎûmoêáCÓ+õMi索ÜOmtðYÓøa»tâøXÀŽ[:NÐ#À«¾ûÛ‹a—¼6˜ÐTFö4Ýd®9H…á¹Ôœ×¥oÁ£YSÈ‘‡‡NKýã™à!,pÞŸîÇÈÓñ@ðÌs}í5¹Ñ‹a^Ý‘ælã7Mí\βH( &DÿWðZÂ#ñpa=ÁMöéÁÁó…WòbWب U3LúŸÀ%ÄFÓ‰;›ºð鑬÷:eâ–ðsÓ{{ܪ½#€œ5æËµ—®…ì±Çÿ¤fö8rV·]QIe;Art ¬ôN5go\r‚½“ó–ðæÅ6—ÊûíðP#|-йÛ;{ò'ŽÏøçèAØÞBaë”:hÙû»!žlÞ,Ýçlå.ë?ëõ“#îzóÕ¸¶–q×›âç›K _kÕ_lÃD’ÞŽñ¾àÍ6Ãë1<…Ç6ŒW|ÚY¼÷o‘­‹× ù¹³bÖÐ><</ŽÙ¸`xXl9›ß΀·m3ïðøÛ:˜åvðÊ5xKÇ üZëð +ðή}Úˆßd{OðÆ·‚‡{¶y~ùhámݶ…—ñ\œ¸tÔžî—ë«ðŒ‡G¯©…‡=ÈûÅåk°HW(—<½Fžø>¼V‡p˶-¼#•N ´}ÀÛÃårœ&I,d!OÇXÈÀjrJs…ý½å°åÝíÍðÞå©x½µ>«½R¿C¼·¶-¼bl._ƒ,µi:)žiš‰!b|ï‹ÀJxxYŒ4¨ð?:‰IÒžu|æFceck9ضö^ÃöÃ…m-0¤šz‡…ud:šÂÅɉ9p~Ê%E%/ÐãÒ$šáQ½PÈë|"ÍïÐ矺דgNCðö¦ðxó©÷¦0 eó1åpä¹~ìÆä×Û–@Æízx){{8•ÊÒÛšc3Î"W‘Ò+ÉGŠáÕ-g•=‘ÓS˜lýÇQ&'âbÿö©ÎZAW]ðšÃïÐ"•d;òÌ  ¯O&Þfé¶Un¯„jâ½=hèrÌO^«©ù)ìž%x3Ø ¡‰xªR²´Wu‡\_?¢ŸTG:ýòöðZÆ×Êð¼çÅ͵vµ—Ë[á N÷¥º~R~}2ñ¿H}Ÿ­Gã~ŠŠíÓÆÛ£V¯T}E=¼Ô¢+vCƒçBO§Óêó:f¬E­NSý ›¶éË6¶õ‚®Ý—Ý ï¬}ØÐ[v¯}X½uýªš˜-qÝ%™¦ÃB­ê¨ oä fM‹Ýç9<«Óœá+*ݧ*çê4w€W¨î×o 鄯§‰`xë”¶‡7ì¾8ßóÜ <0<üƒœ§sx˜I¸RÕ^LðNb‚÷Ž­ŠÝ ]úàýJu¿¾ <Õ><Åθ^?¥êŠCy˜ž§Ü|ØÂÕ©†·v<¨,×áJ'±’_:ÙÀÛU£;Àë^%¹=¼Üµó¼ÌÛûƒÇSÄôÍžòð”[…çõ<†çXI&x™8ŽËϼtïzÞ¹t¿¤‰Á[53÷ÏÝ—Ýt«Ú‡‡ß¼‹5xÿ´¯jÁ³Þ$GÂ÷É<±s'x‘݉GºN–8$µËàx]Äùiõ¬šòµ3³Ž„"œ­§¹HD ¬7{?x7Ìy»ØOž²ÃÂbò/ˆPù¯<¼‘KÛWÙrØÎá Ì'ágׂ§ïoUOBêIè‚D” õ×¢ ³Q΄¦²nê`€P‹¸ˆ§u<Šl¥\bÕ ÏtÂóçÝ Þ Iûê½=jy!¯<¼«UUåÜ´àÅôÕ'ñÉZº6<ô„ÛÃ;KAŠaÕ˜z_©ÔìÑ·¯²çƒÈÌL§£}‚—è2wõéD…ÅÑ£LÀî¨DOvŸíqèꨊjº›ãjm«,žÒ¥Ö¿Ï¶Jå¯Oyxoî´ZX·‡ã ‚w.×áÙ%<ã᥹»¬µ|U¶áÕw‚7tQQi²jLÕÛWÓ#óYË ¡q—–4ñ”lG_Q²Ö*!ÍHI™Ûž*iO칫x Þó߱é…Ù‹Á Ѳ°ud…³Ï¢ìx W Ú jú¶ÈV»Þ¥ˆ‘S¡¡é¡|Íp4œ¢ˆÅyt xÞ<[(ÉsxnïÇN3ÖUx¯n Oç.*«Y5' /71œÂRT+¹„ŸÁ;Ç(IgdnÀ#|W‘°×CøWqŸyx„ÝÌfì¢òé÷L…º¯Fb]ΆÃìÅÑɉzc`OÜ£-Ü-6Â{“8¤L1ìí¡àpžEÉaT¨á;Ó² ò'í¼ñu…qÿ¤ÞÜ|–^I?ŒûrÃ멟$Øx4´Uo‡§hGd±€WÄ]åöÙw-°[˜“ ë¬ã¿;įTr±j î¯iê•c'¶ÐF&ÏB£*ÌÃCœ-Mzæ”<Ï«Á^\Ö‡ñ}ÆÛäm=®£·§6ü;êˆeR š/ 7š59.ü­jàaV¼a¾„Wž[#Ð󸢤-x¨1P‚'·á¹IÕ¼B.à© 2ü^éÔè<­zÏèÕgß ¼ÕÆU\Q—äO\tè©7¶Š,ˆ6<µ¯}:BÓ‡¯ëgôù*¼¬Ï+ɹK¯ŠMÈ…'^Ž-qO¦¯è'<ÿÏ}Uì*¼º-0ÌM¨t¤ZÀ‹Ý*¼1¬È¸¾ÏÆV´àÁ‚^xg /¿ð¬‡wxúïWà©‹ŠàÕqÚÀ³ëðÊ<¿0°€W ã?Zc¡h/¼RìÇÏÞ–V «¿ƒ3Ö¼›Ù^_/àíFLæðòžŸóâ×§\ò=;Csxšàí©ò£‚÷ÙÝÞÝÀÓòðÔ_6ð°T­­žÖýžü™ª¾¢$!¼¿c=ÏÃ{©*ýFzx%ÃËYÚÆ•‡wUr [ŒÀ©˜¤mIbo_~TðÌÆÄA7·Deɶe«Æ äžòªŠ– ¯$U6ú[Åð†–l{}õs–¶‡ – V’K PBçõ<†w¾€Wyx¨¹]% øÀó®aT[5‚'‚ä{—*JA/® IDATQ¢'>ÏB–V’c­>Ý•ç\šsFÆóYjr_JRùL½w\#µä¹„s®ázse5%eˆŒK'ñù¨7­c(É1 lÃÂHKÁ꺕gïžÆßŽ0ª-[OþîDB—©Ä‰‚tqg?í‰d;A!³}’šÉ!’CÖ¢ Œ¬Ty€Â d-GiG†8"xÅ ¦khã²²úŒt¿Ÿ^I=/¢?dö‡4Ÿ$–Ž>xï£ùüz•{ýóK38Ö€‡DJI‹q¦Í‚Š,tÞ§Gš,I”1$õ®tib-™</Wò´ ó,$͹êÇÖÍ  ÚÞƒ, ¸•lUGó>.ë’Ô"¿ž»°Âʲ9@‚pAŠ1é„6tIö©üÇ€L<Ÿˆÿ‘ô¼'¢Ú¸b Å‘pâÓ¸ãÓo /ÙóñwoýöýJÚÙo¤yxAäÛ´3ïž2‚ämVÜ_ÓŒ¼‡GC䘈Ü>#®YÖõî[ÓÂGéá-7ñ¿©à †×}ÛÖvTÛ½å¶ðj5ð¼OÒr¯ ^w’ׇm¿VðŠžŸJZÛŸ{«ðš^úÀ¾ðbdÿàÞŸÓòPÛ½å¶ð <¾ÄƒËkðV7˜|$m¼Õðo‡" ø{×QÏ®bÐÅÛAj»·Ü:»E<—kQp¹ ¯9ÛçS$±Æ€@f4šš»CÂ^½ãŠÞÖq'››j=Þò§¸=¼¹Wõáayè8‡tÅ g^°º |ˆi“[¼|¸­ìûððPņô«4·•ö©Žx«ˆ¦ÌNxw7GîÞì–â·†§çE¶¶€7í„GJ*i¨r:Ãnì¼«á ÆJGWžòzg% O턼j#s êÇ s¦¥¿[Ák¨·z^ÜÙù–Ú-b=[ÒùÕ»ïæ~íÖð ááÍ–ðÃ;Ûœ6ù8æ<¤z¦Êiñ\Zè–«Ø0¼cÞ¨q^ÚžºTù/PsŽM8Ò†í¹KêY°¢£µlýî»C»5¼ŠáÅ ÏÔ²§¦Š€‡ ‰Ï@aê^ˆTÏ$vg•D %Â8Ã_†wRKùiÜæ/BìÕÛOd‚!ïŠ×¬@ÏÚð–=O/^¼lÁKMÜ΂°„×]þty¸¥×%¨IïLUéùÖð\1P¹‡7!xDðl_½Ì‘ ̯ [¶¼‰ØèÒŒ¡v‹›šfΓ&®1ªùìÈZüðL&E]4‰ÄN”¹Dï.rZ¼y½H½¸œ6[Åó\¥›=Xo ïÊU=îyD #˜†.¿êË6¼¯¯ÃÓìö5UlÐ'‘¸>à„™FÄÈÍGÐ}%.n¼ðáUrÑ-–ðZK-xdý¬Àk ÆØÝÐVBàIƒÏ0‹Їƒg[ðŠã%¼ï<6Ë|E ^ê³éO°Û·,Ä’±Aä•d«ÛðboÂQ‚=)SW'¼Ö}SÏ•-x[Ç0¯Á³MÅyM‡÷µjeä®ÃKxX2IÄ5xÙÏu±ãÒ’„a¿`dÏFL¹SŸÚS,Ÿ÷âvõâáÊ}#ßݽáUï^¼„—.áÕßú©Ã°m˜áàê<<ö?¼|žAÔƒœÃCr÷UxÒ5ðvõâ»O\ÓéZÛN­¹ž>,jÁ«~ðλiNì‚—/ò…7˜Ã1<–Fõ·þÆ¥Kx-Á+&kðhR™<<ÓD²€g=<7iwâÅw¿Ð‰y&©C5¥ä T@œH^e§-x[–:†ƒOûûïž^“+b¤U´àÍÞ9]Àëá–ðªÞÔ4ðÙD .cšIËNÌÓǨ%Øï@åÔÅc’É6 ¤ÎÃãüYÞ×c eø¡C˜l*YoVáõ˜×p±›ù€ðxàÕ['јá]zxåžÃ[›óè‡U¯›aK Uy:“‰8ãrmbðIéBf™Æ”œ…S„™d/Ž"ÀÓEk"Ò·‚j'¢'áW®£Ýz1´Í'âż•±'iÐ2¼nµ'I†axg„èœàæ°†ñ%y¡çÉiåÎGsxß<®é%xÇa“P[.ì3”ý«Q“àM+ΠŸ^Y X¼©ò"Aš™¸8‘iiëGû*Ð÷Ëè)Ù‹¿P“IñD•¥tETˆx2É>}†`á#]£ƒã±}Ò[šƒ- enaaXUG¢`xÙáAhB§1w.kQÈPf|bŒ ó^xy…Tî«FnÝyº€çK©8ΞNÎ*Åñ©¤º- †§<¼ÜÃÞ±: xPÈG=¿$}—~Ä©ìî«Ñ0Ñ“ 6‡j=6=!ÅaÖDþгý0ÇĪ«ž‡‡€«1=™Ù*ê»··m—­QîÙýêÃË”8À2aˆÝÙb/,ÐÓŠ™ÕC^˜Û¶q’ ¼ô³ªQ’ÏQŒáM žéÓÐ^l&£ÌÀ ¼ZÉ)ÁË×àqÄÖ^^ vI[¦ôdÂðàÝ,Xߘ†Gøl§”Ž8ÿ<|Í¢Òdî:Ú}àù† ËyãEü|2EÎsˆTϚëv…ý¿f‰…ç«€Fc!ä´„¸-ÜŸfÕANP~!'xjZ6ðZæÙ*ÃSl^âÞ¼£õtdÝç5MãOýKÅÏF&df¢è+Æš‰xGgôb4¡Y@ìÒ‹Þ](­Ò†GjÆ:¼¨É¿{Í„¼LI6ïëuxãšá]"z%ŸàûÊ…žçxQƒƒWä× xÈÓæÆ¿ðÖÛð†ÚñÙžHž’m(]Øï;a*4d;)¶ËóÈÀjãôÜØøLK†—^0¼¼ò=ðF€‡5þ¼ãaQë.gXuóJò¯¼"Ø|ÌÉ!ÁSŽc*œÂBš=„á‡Yš²UcÉFDÉCZñ©%´'•ªÔiš&{z8¶p;° /å?øÜÏyöœ÷<2k` ¹ ãË0Á<ûõ€·!ûõö Âæ¼Òvð¿Õ‘‰–èIQ4G/é5ðÄÁcFk¯öL<Ùg¤þ&Å^4™½(ÎGþŒaÛX4Lúû":E–ãîkal}[ß|k¥¬—VG–àõŸïŠ¿ ɘF…¥OŸQ¯Íö²h8ò‡ÌT°ÑØô hM-TuP ÀÏèlj;¾g{x\+ä†AõëÑ^Bšû K¼xµüªJ­*öBÎë%Ü)*Š%1MA¢NIO¿7<8È6¼o~Œß¥­IówÕº±ÝÞˆ~¢ö†T÷Ú¾ÏRœèk}ƒm Þ»JÚÜØnÏ)ïŒÿvÃã5ZˆfÇÙºV¾üf W-Ûšb¹¹6ïívð^vÁ[ýzï–4ðüIE¨—ð²ølËo|m-¶ôÂk68ÕÊë]ðÊy$–‡7Áòñ6ò¶-Ú^Ë`>ºO¥ƒ÷¯QŒ<±Ö<çðì6ðZ但±$÷©Ðx'xzåõnx+,F‹r#µ¼–ÿì¶ñ8wj[—¬éjw·æ*¸º0Ò 3ozxX7{µ<²)æ¨oöo¨m OGrĉŽß´Óær[5åçðVæµpÓæž×:²©ˆBkØNMàm\AÅ3ù¡US¼ÁsübŸg¬ƒ­$là]­P‘ x¯^n¯Õ~íá!L *ëQ¼{"j\=ŠZ\ ¥wJuðÎÚ£ud‹Ý¢|õœ¥¾øëá[›Ú™›TY 8s´8ˆw£L¨²<ólÅVBs Œ WÎÜUù³“þDám¡ç­u¼Š7(£†"ûNºoÈäÞ^IðRÀ³1¹Ø9ŒÏR¸z˜W\µ†¦u‹ÒDr/ÉÄ‹GQ†}ÄÉST30E0sz»h‹Þ³Î7Åeȱá€pð|NïZ;ï¬Çdkxƒ8µ€çÞ^ðWxŠÈU<4¨†]¡Ø{1vÅÏ~`õº'6JÝX~Ø™(óäDž&΂U›/©i[Â3¶Çð¦†}X+Ui½„—óÚv<´}'ï /›zI¥›õYàÒQò¢~"¥,²ˆxœì?;Ù‰à»hñO?/´'²Ð—¹ù»iÛ›kª ÃÃc¿ÞÛÖYÍäàÇ|3c´WP*ýxæÝºù¶ðÌ‘µàé9<Îf>ñðÒÞ¹‡w8ã“´Ä0‹ezjRdçE,áÒU 4M]=’2OÂz¯&4À“ê›Ái&.é…É`})áAÄ7ðô^[H­Àk:o{eYåάçwhô؃gÿã^Oxx5÷Ä9<$ŸfxÅmÎyÎ3fÂ&=•-à¥)Ù¶6fì@Ÿ¦5‡Èe‰Í,7®•ƒóaâv÷?¡‹«wŽºàé%<ŽòG:àMçoa*-FÞÿ´oßÃãa›²¿ûvŸÃ‹+\¨e{<äù<ƒøµârtÉðèkì»áéž2¼ÒÃëÏáùzI€ghÎ[ƒWýdß5ðÜ®^‡WšZ¦HøàêB3@öðàD‡<ÆpŸÇoðèÜÝÈ=<ÖF[þˆàÕ <ßózÀóØöÓFÚzxÍwsIð¾·ÓÀÓng^Z[Îðºå «<»ÄgÁóÛ%1ý¹‡—.àYÑ:6.táýEèáªW}J½+HzBW¼l¡IÍá çumïûŽ#[ðþœáI5²{ Ïï¯Ðýµ^kàmµ#Xo„·¹åëðXU1ÿëÞô‚tð%¼ÉBUIÏÍžYÂK£%¼ðLoæ‡-/@ÈŸ¢^áð¶ß mòf-Ã¥ œU›«–¯¶ZßÞ=)g'k6Ïà².‡ÞÔ”àAH¼éRÏKS• Ï-«*ëð†\²ÆÃûeI¨œ‹9Sj“ò5ÝJ`Ük™à!iÃäºÖjuûÚ¥Q‘é+^(¶-ÁóæÙà©)Yñhêá®Ñæ‹\ö¤Î¥õ±{µ€—·à…˜1Fè¸õ\Uax»¨wÓ}OïvMÞ>ƒeñÉ£ Û›Þ‚”×S ‘üÂIÛòœì˜)a+xlžyx3/¯ )ssx%Šy%1toTØøç€ýî¼}^ôè¼ o ^r{Ç1#9B%ñBû^X™Ë$%œ†W!£I>)4â›É²É³}, ”W֔鸲-x¤_NóŒáÅgô’öð`ø¡˜ÍÞGïöò¢i—Pš+8?ÿ“„ !¬^¬á%d!³d–£¿ÙŽd>‹l†j7ÕÈâÇÕ~ƒUÞ@ކSu,‡Î†I_±’lû²¤ ¶ôÙnºóR¾1xÝàSÅq¾Š¡Ž{dªŒÈ˜]¯`½¿*” k<^쎎H+,ÿU™ä„ƒ»:{ºŠ¨«^ÅgFUGÓíùo¥]F/9· éNëoý¿oWÔ4 `1”àÅð²¸8ÐÂ^œLBÔDq·{Uù!à}óu€ÖÛ]*9øk,¨sÞጻVëη<¼ÅŒðêNoí®ðºZ­7ê·‡÷æÚ+‹e©ôú¡hýœÒ¶ð7½Öô†×QõqC{x‹e©ëÓê^¡¯{m»µ‰•6Ò<(¼ë¶€×ô¼×­c wÐM׿ÞG­•Ûe'á¶o8PÅûñƒÂk®¹ Þ Ãö]ð>LІ 2\ùFÇË…×´öï¾Þ«ö“›ámtö~ítã÷‹q.·‡wÝûðÎnñ­÷ pÚ¾mö,‡OCwÛž^<º.Rß3¼m“Î~ø¶ ïlÓi6ú+™¹$.Ç~a·Ž[„®eåi=þWx¤OQjAÉ@<“§æ`Ÿf¢ÓS£ëÈë#^¿í9ì_áñ²£Uq¨‡Á;dg¢PöN d%aPÉ:´ßÆ¢(ç„å7n€§ÚOÞï†(ƒo¸m /GšÝŠÝØ' wá¡Tÿ¡œÍ꽞ˆìIïQEö³Ù)r?c!‰s…KIX"fþóË$Ï«q“ÛÃk'ƒæ@üåZQå3<~Ð"AÛÂóÉm°Ãìáa ¼°ð®ú=™Ó±ÌÄ‘™]ÐýE(]S|ú,¬ŸÅ©ýއ* ãu[—ýH˜ýðD@5S¯ÛÛx¸t£ç¯YŸy£ ÔaÔ<ð °%¼IÕô¼žÊ­ß–Ê«“>¢¨j=Æò·A"âJ× qn5Щ±õþ‘:¥S‡Åsí¾ŒÄñž8„ª%.Ãüøe„͸ìx?"}YÆ^•|¹øîEÏ«Vn>D¯«ðœïy­3:àqêÁuµò™#nД¶„—^í]:‘–NM–ð½ŽàÁ5tjKw„ðË9˜T:£ž¹¯°_Wÿ•rgé¸:¬z²::¡ˆ¿Ä|À¹69Þ‰Š°¢œÚ¨z䫇ÔA‹ ð8Ýh?h Û£§\cõx7Þ 9<½„w\4W¬¯âQn&+ð*ÿœôžœV;Ú!Q÷çµVv ‡4rú•Svš*蓉²‚ ˜Úl z!)FÉâêW7+#Lœhny®Ã;ï†÷öº¢z]s]{Ϧv+xÉuxC{LzÞ”S ¼+l‚,McÈ †¨iu8ððÊŠ¦BuQVW€çÔ°¨5|¤|Br.`•–WɚϦ³™í÷ŽH²÷ãh¼>¥-@ïbÙš5•—]Ço5låux‰8`xÛ°‹ñÈxxh¡®yX÷xØrdu1«¬‹‚0hêdx)ͦsx³ðr{Yõûû:‡ËÒ2C÷ê%ÝÞlµZÕü“6Ýõ[X³Íd¶†³´½Þó*îyõ#†—¢ø*ॠxãêÎt'cÀ ¹²ÔxšuÊ.u©æáÍR‚gÏÔûËìk·ƒ7º?¼Ë„×ļnÃûÁC½8†‡\º+ð2ÑÀ«dEðB§ŠZ¦$wxHzDTÿ"qí°÷•Ú×4ná[¿·Ìû·êÝ^ygxªëø¶ª )ÉÂ¥Þ9JY¬ÁóÒv4ä”+ðŽŒ‡Wü€3’Kû’¨Èm>"xìõ/-²±#Rͱ¸‡ÒÇÚ Z…—E—XÜ“nø·L#¾žìîyÓFa:àå^éáåî¼XŸó\/Ev^WDö'5ÃSO'PUž xŸïÆU€ž[:Q‡øÜ¼¨w–ð’(¨Eµr9C ªˆª}Še ^æÌy¢š¥]‡—ßÞÔ±·Š»¾öq+xdÛŽ2SwÁ;‰Aðª9öðžµà98@ ËŠo…̳Š«ÀlšûzˆŽ›Ÿ"|ÿ¹´ÏÍÓ]Ì«ÔYCဖ+,%ý ‹ëv{‹ IDAT(Ì š²‡§| GûrèþIÂUU 8ÌÍJW)«îÏ=}œ&'Q¦q¤†¤Ìô¨*ÒÇòÒ²’\zxÿ>æŒQ%*x•înG0COO+š¹´:`x=87ðêð ð†­UBš;Žá«Và‘€&­—fE/'|ËËS ý&°Ñò™Uœ©¢ÈØAøè\õµq œ] (?‹«GAg\§ý•ŽÙ öI$*©ÁDHÌ’¸ÍÎáU{º8®¢™Iuvðü±È”C) u¨ÓÂDCd{ýqNFz4hà ž~©Æ()ááÕrÆð^"iàEcpI'aN¿`å›áµ¤-à‘bÃð¢!»ˆÑ).3óð.<¼ †§ÊËšáÕÕqŒa»ÕH¥~é|½«9¼²÷%æÒt/§ÏÕªè§ä™ƒáQ׉+,›ÆG Vã•3«â(³ñÐ ù~ÉsžA2‰î2¥·‡w­¡óTjxUôw!ü•iâBâÜÞÓ~` Wñüd_ Ìóò‹2z÷$F˜×¾B"ò¦Ê’DÏ›5ðþ˜æÒŸCUùûxpv5\mqƒçsxÓIžåüä’k6qmÅ»Žå¬“ÒKÀ«94*šVÞoj¼ Gzâ;fÓ‚NšÝK`ÜÊîʨí…IfÐw$/žGâ‘ሬ‹£Xô÷{aQíËÉ)äf_xyOŽˆSº¼*ëM–™q?WkðF¦â|‘á°,ê§ðÖ#ù?^ƒ—ÏáUmxqi—Žëº¤3Nþ®^ÞÀÓøy[xj3¼ÎwoÓ^Qל¹ÚZ$ú;PNÍúArðXPw«8!9ýrSG„9”·´4ä÷{2°ñ~+ˆ¥çõ¼ÈĦ'9ü¤4‚áÉ%¼ñ éÞˆá]xxç%×lÐÈ–åò«)YŒ ¯ËÑ”á•NMîÛóî ïZÃ']@‡úúJkÕV^rp Ø„ ‹ŒvÑ¢/.qÏï¤F6—sx¨®NðvÖà¡„‡—žžÃÑ´çNxXÍQk\r¬L\I„Ųž§š –×ڶ𬺮նzÞŒµÖ7¤9þ ,¼ØF \’ ¨“~7§š·%u¿˜+וcݲje½/öõ3\½KðŽæðŒˆÊ‰‡g‚— x‚6𔇗µàUÁýàæó‹xåé;¼Ár7[øwÌá]ñôÙß“sA¶÷^{Îs <ÖÑx)\gç^9#xXi7'+=o [ðÌwîïáÚ^¼òô®tÏžåë\—rÏ‹WàýU rK´†3çsaë8É]»çõu ^~Ï9ïÁZ½·úü®tæ²D$)àiÀûoÔÞUêU•jô<†G†ÏxÏ,á]ŒÞ™‡7šÃ›0¼éÞ jLNßxx÷•¶Öêµ •[¸Ò™?.©G=#­\dÿ3ä‹`ólæáésØ-x¥kaZ÷Ú*È^Êð`|°´=FÞ’*¶?C|.’ôá‡íšÇØ«íßi#Ñ?„Å )1îÿU‰# \ãišÅí a ¸Äö؆âX& ‚""ýŒ4ø¾ Eï^«* ¯î­NXņS?¶6j4sÃÙþ‚BgÈ·ZÙa˜Ä§ VŠ#媨Þ $9 ‡Fåê09¤ÿt§ßÀ-†­ät\í–´Þð1×Wêè×B¥¿öÿ¼â¿#²À_×1VCàÒPTÝKõ·„·šðÙ´–¹ìÂãã½–`¸S;»þÒÍqæ[FB=¼eí€Mðæ}óçz?»öJýùo¸<}Ó©¸÷ÍðZéï7ìFͽ‘xúXxîgï¼Äû7}ýZ¾ã>¼¶Ý;áÍ_?]üAKVN±ê¦+¸cë(óS}ïÆw|xËÖªðxåâOû3HO Þ¼ë/½Ã'ïæ£‹öpð–7ýn]ðôÜ{ÇêJ¸7JM¿Y¨U784¶ÛƒÁk©Ïw‚—hÛ/Úa÷© u¿öÀðHŸTˆÏW–žÐ¦Ö ¼mÛ–ðDv(w"Cª Þpš“¹8$ŒÀb&ï¬Ý^FðÔo&ð[Àì4 x¨¨Dÿ0ž ¼¿h¶C©‹²ªbu޽ÔâyÎÎô´Ó²:ÂJ9ÊÄÈ›×5›i®Gx…ÂÈ·(Ó`ãk†ÛùÙe¼Ù;")VBxºàÕëWm­Pžo[›™#ý…ïjO-à¥g(¢FÓªËóKÀûñ„;œ’û©”+ýÜÁªÿ d­\ÀãäÙ‘‰Šç* Ãâ(z4y=¼a´ïìúqž!âö“õ6^üÙØ:kBn Ïüãï{x…`ëÈͧVàÍ8O>ÃË=<”|˜¥Á{$–ðFêÎðó¶Ž;á­ŒÜ^ºÕ$(e×ZЖð쯾?‡§ØãZÄb¯¶¥ÏO ÁëÅ4žóð¸ÿaCoWç< Þã3qJ¥‹šàÁKv’ç³JF±–É0ZÌ}ÃhúÎa{výøàDÛÈïï¿ÝÀóß¹joÏ Œ<9ʬ¶™ó®ûõ’AœgÜÀ¥žé<¤¶KsTOKÞé0]Dœ†ïÞj¤.H´áMºvo¶…÷Gßjæ<ÿeÒÙz/åKª ô…/üYÙ‚7YÂË vJ"xgkð0i*cBIÝµß Û!F–W«ž `/“dÅÌœÀ­&•ÌØk½.åm¾"~=$žñ½™mç<öål»<ÝÀãô÷%c¥Ï8@ðt<'Ïn[6ßš¶ÆØÃ+çðÒùå¶àñ°"+jÙê¹ àMÂAºé„¬˜Yµ‡_(yz%<=ý ßW²ßD®…Ã&\–™/åhÏ!sD†TU(çQ©=±Zÿ>îvßh7òå5_>¼ó*Ìú иóñUiUÊðzŠ © Y½˜ü †w@ƒ÷Š{^ʋಠ¯hàÑ'U½“%¼š‡­Å°u-x-«?wp4‘)ÜIám6šÒw̪nõ#ýŽM˜É1«Âq°s膥ˆK>;„§¹æ‚’>æŠ:°.¦oET¢âÄŸÄ T­×L¼ <ŸÛ yú‰à²•ô-¡ù$'\H„È+=„? ® aÉõq xÀ«°´$‹Þ>É€¤jÖàÁD9g1‡‡ÜÚì†Ø†ol 1[«3\™!f’·òRËð|¶Ì5¤4Å{M6žò{ââHOØ/·¶Þï)•¼`¼¤ZR7¸_âBglîàÁ‹ÔÕ‡ý{ÁkÚ¯xÛKhOŸ†â A!£ê°Ï?鉦éÞöe:C¶\o.†7Äõ’…+æðŽÝh- Jò^Êð®<¼³6<ŽÍelû Ï-à¡COyx(Ú7€_™CYo ¿ÛO9s„FAIu ˜eEVQ‰ZPî’ú. ÒÀºbM ¯ï3l¯7öOÉ‚¹ºHWª9ÜÓ•qŸ68=VA¹bÆ®p°òaÛj„h^?Ào xiÞÀCwä´O¯ÒºŠ [«®Á›6ðz(V̾+ð|¶|äÙI<¼‰eeƒ|~YVýþž5xÓÞeç³ À›V€§ëˆ †îAá-r†à_¯F–§UP…U˜Õa€¨°JžÑ]ý,¨Ž´„€äŠ;ÇžqÑÛê‚°œ¡FÀðrXÞe‰LÐíœ ï“ˆ ¼êH’¦éó@¬Â»jÃc/n.-Âð¸D'½0y;­{`püª‡G¿Wk„)ÛçáýÀ«µmï*/u—lÅû á Ð…üH™Ïi”ýJÄøë Û ŠÏb3 Mrûßãé˜-ŒK$&_‰ax"*9bëû#Àssx³Üõ¾ÔO;6SÃÄ%ü?XÓ«¼yójŠžsÅ=aYWe Þ… ~®_¹€·”‡‹¨¸›lž?ÈN”œ™ÒK¡ª>æ”#ò+aãq‡¨QˆC¥ýŽáW‰æ<]Κð–üöðM+'¿©±ÛÃCÄÏ,+P¹ „,ê!-–…3Í4;òy3Á¨<íGAËñyŽÅ¡ƒ÷*5AòJ(Þ µïoÅž¨ÏXµêƒ n¤›Ì¢{’­áE;Á4TAðL<5ržÃ“"TÓ¬º!ðIÓeªNè\yb‹žêt<ÛÉ‚H"D éblLKaµ4R;³ù5à˯l×øcžQÍËU·Ì$°WåK:äì_W4î˜×d{x»GŽwl4ãæà’Ç>ë=…&YÁ‹S¢‹°*ÄH!Óiö½9|2-’R# ôuÈqN#Â,Î|q®‚÷ë=”ö%WïÁl›…º¹'ÜXœXu‚UîÑÙ3 Ï­Iü 'j(Y¥Oªù)–>žhÀ»&þêºÐ¬­áe'ÁÈÁ³mðè)ÁõðXKÉEHÇfŸVðr™YøæânSj¸é4éý¾šqžyå^ÿ±Ï.â¥Òa¤tÔ_^}ÞJ1´ž{‘á¹–§ï†ai:¥@­@­’A§©b=0<}"¼ ^äàq~xßÁKo^O¦Ü¯9:ò0@Ū‹UxZÁM¡dUœNsÝs‘˜®á&bvw,eb¥¯Ewyõ‹X 5©áUjЮªâ1Êux)¯þ¡2;]Â[/m³6pšyxþŒáb O3¼®žÕ Y×ò¨µžexZÀùûà éM†7Nc­Ã<Έ>Œ% Jáa'¶×ظº ^%g§ÕÊ$ê¯­Ž”Ú” ±éJÛé²ñÞo“uµµyfN:›sË,á ¹ÛvE‡›¤Æð¨[8x…¢Ô„ç[t[3ÀM!üT¦ãUxÔ£‡ŸóVk)$ ôæòÆ~´_ÝFxüo£³§ðªªà½7xjy5¼Ü,à•.È©«ø Ó­áE5ê”{~vàEÒ+;声|ËAfyé»ãgüY…‘Ô¥ mh›¬Á‹×þØd¨l ¯¢ýncÒ{Lÿ3×aÍþn>ç• $ž3<ädx¿ ‚ÝŽŒ`Á ùy¾™‚j*úâPyÙáóCUv8®-òÛ]º¶lytj2Qd§“íö~"’ýýOŒ?4ÊŸr1%Ä=5šåº¼ «Ý7Á Îg¿ ÒjÎooÜ/ã £ ÏGô}2¡ï ¹‰eaõõä¬N ¸6Ÿ•<}83<æÜé\ØñšJÏâ_AvާÙÎ`£O¬dתìy¯×%xìùóçÔ+Jì¤Dþd _•ÍðìÒIQ÷öjxÄìŠ>Ùû‡ODöغ°ûõ‰Çµ ›# †¨_À‘NsË<.ä_¬(É€÷2.kx¿ VfÛÂÁ; ã ©»E Ã=!xyÞ±K c ÛàÈ’Óˆ3޾Vg5!%?òPsjúŽÇûBôJ±Ó%ûÆôáû§›æÈÝàµÉø¢T—†,ùèø‰Ð»29ö2)Ž:Cqìó¦÷ÓCDY,P;çù×jÄðBµ£fñ\WY¼ðŒ.ý ÃÓ¿&´Ôó Ñ„WÂx=²^ææÄÖð´`x— x^¶€wr91]Eq™áí…5<,uô†·n©·:°ÜQÊðK^pÏ ZÃÛñ†"À–jÖ9Óžøãlw÷9 v•=™i9œ¦dÛª¦/Ã3áiLF/yéÿ…à…MxÃþK…(·»€GfsÇÎrk”­áM¼ †—¢9Óü<楀W¢ª±­ê#öƒi~‰0°¼ƒ¾¢Áè(äÙV¶Ö Ç–w³Èó·gmü3³ûä¹ÒJh®v&”ö¼DæéÅ^O^DÃbFÃbl}èo…ÔÿcàéÁÒ¶5E /ex‰+âçà„"<—[%²F®ÛÎð$ Ø1¼ÓÝp†Ò±Wà!­Äðé³[ÀÛ<ÛÞ—`þO/ÙxLBCƒŠÒò",FžF*ì¾ :ASÕ;;â¸,‰.í„áÖÁó+x¤#çv7Œ$Á«c/¤¼WAæKx¤çѓӻo4¿h ¸Óa¯UÕ{ÏðÚäõÜyUü'ßÐD$ a3•ž9Ù…XúÎ+x\{Ñjx=†GV4/ûãP[^"8åä*¼ÜÁ¼áé û®Û\CèÐ~Øð®Jé ¢‚ÃëÉÒ¯ð‚#,ðÈxYv[»C#š£«!_`wæY"Üš¿²–5rŸáËð¼<ÿ〷!vc†X t[Ùz ^T†1Á»pö,*«Vð²eË[ÂË‚!w[»„Zó× KçVÝ–ƒ ^?8gx‡¶ oX†Sš~ìVò/­–cÁ{áàéUx¯Wá‘…þm†×—–"P…à)RYs388xdž¼IIÖ‹¶ß¯–Ayv©çÙ1·<¼NÖàѱðùv-o ‹ºè7ß*x³¶Eí“A=ã ëžôýI©ezpla20¼IÙçò®¼ÝDGXáš»U• ž¼lÀ{íà™ðYè†7³¿¨à}ªÊ¶2m{QB 6,éÞ!MÂFDâ˜î7yQÈ„Pȳ‰ÙÓPV¸ ¥Ì'1x}ªç%V’+Št¦5¼s‚‡ú§ÞÁKŠó¸ßla|8ð6ˆ>ÁãŠA§ðÚ›_uH? f¥DTï Ž "¥¿§ÙhŽè ä¯§¹)”ƒ7£±’L뼚bX³qüs9dxYé̳‹-̳kàm™jþ½Ê©{@&©ŸÚóò˜˜zC·ö~)ãiŸáI@£½Bœsв ‡qÒ…Ï’ôtàѽ*wU<' Fºßyý×[, \³ž·Ø^w®ÅíEÔ¾q÷µ€úÒòŽW/1a¦£‘¥p »è‚—Éhì9³/)Ì5™O£C¢¦löD ÄJÀ´Ìo^’Ú Ï|ºxæ¢ÌÕ­ïñÁÄÁ[óâ[ùsº’Ô¾¹ äT͹ºÞòBšMf™¯wµ¸{²ý~Wàmh'1Ë>ÏðZJŠÀà IDAT“·õiîæ6sWa.çkðVâÙ ¼Î’·ò·„7_ÂÃèwÞ–äoñZ4€|GÖÎß:ÖâÂ\O®)+~«ðÖŽ\ʃÁ[ê9›à½Z¾VÁ«|7›Xûßny™× ¯º¤Á5GœnUx¨ìÞö›·„ט©7Á;[N"ÕÔ\½ í†Í»a‹ R´x­p>Šn,,ÁvðZ«ê]'÷oõ»€Ç™7œôx—[Ðtð6ÇZ^ãÝ´Ù8ÑŸÜ|ÌªÜ Þô¾à9  #µZ;\ߥ)¶Jkþ»U¹}ìëýÁ_yº5¼†#Í:¼—÷X‰ý&¹µ’°%<:—Õ/™ø£„wkÙž?9Ù—‘Ÿ¥€kÍÚÜøÝn ¯áH³Êêò£€—”ï©Wb]¶½=ß ÔÂf?Ñöÿ*|Lœõçï i<—`7D>:vd/…Wtéèr/Œ¾›ô}Ý1â8ÈT©˜~æ³bW"³í}Âû #€®ƒÊÁ+†£âÒw¾±Å Cú3]ˆc•ÆÉ'ô¢ýß=‹M¬òv¸†‹—NØÉlU‰_Àk ½^cEri~uý> l Ï0<Îf9ò8ç\u¦ 6F¾b„`hv3Œ&ìJ] ߇ 'Ù‰‚L/;ÄÛ^6ØõIÉá‡Ó5ìuxj¼å€{Õf7êzùÞd{xqì²$:xì=ŒwÀðàj‹ò †s%æÔËáÝ—¦Ð變§z®ŸKèSI÷)µM™ sÊËÊ…+ûëB½³f¾ —qtq˧“å!jýbɶ^ý©t8gu¿^ÿÀB®‰¹h“w„§íAsËcxh xÞɸsµ€ò¯‘ž87;ž¤&èLJågGaÌ>‘[/K|íG^Òg—‰lß&Fô–š~íõ“óÕð_y¥WÇ;x­$|ÿ¼ZuªNÒÙtü»À“€·Ó€§ð ÃS3¸q²mJ9£vÈŽ'ixsPe×zË.\¸¡Ó8Ï‹žÌ gìÑ/"xÏ—:P£{/ܯ~œÕïØëªýTKžU ƒºM[µÛÃÓ x•’œóf²þ<›¼5wCâxÏÔð¬T9|¾°³Cð|dUCºÀÔÁã=‚ÓiŠÌïsÍ×ú6šº­ßˆj¹²;À[QPO݃ ½¨öVáµW2€Ü½å9xÂÁ+ÃÓKx1ô¼™]ÀûÜÁÃ…×ðrÀã-h;FïUçNœ³®(ç447DÝÞÊBéi}H¼ ¥o ï¯k¸ã!›é^  sl4D/kÀÃæh^ ÞÔÁãƒvƒø"¯áMÞròk¹¾éíá­È©{XW øþáýÚ+[ÀÃ`·lyr¯ x¢·¥%<ÎùéJØTð|öôŠÏ¼2ðÏ/XÞÑßë×u¼ÅãMð¦Wå^àÉ&¼¯Ùõzoœ:xY™ B-6ÀË^mº‚ìcxž»4ɼåµ\Šß^õéÍð6Ô ‚ÜâÀ-«éyã)½ÿ*¯áñ¨AðLcÌc·%/¤G1Š(EUb†'¹cŸqm5À;]ƒ×Uú@/öl‡×èÈ„!½|íö–ðÝ÷&xn`} xì9ŽÂÎ<ûùÞ×P’¹Uþ£ªáðæíðÐò$Ãã‹®à%~ž=øa ¼ç;û¸÷è‘Wöc¤qááýN^ô"ˆp*YPµ¨À óÃÀ4Ù¯VGüð6]º¼„úä$AÔH¯†gÂSœùç€çÃñú•lÀ{Åðò¼Ýµ–GzÞ:<ã^~Véa;³5xeO¾@XàW?™~DPxåAÏË︷×õ#:ûãÀ’™m<ÝAýaΤ´õ$ÔäYyøå/‚Ò'óÛ‡œrÐÏÜ•†…Ë¥ŸÖ†¢K·€G—dOŸzQ—Có“®L¸ êù#‚×S\’Çr· *xÅÞ[ø|1ßÔòŸ<Î 5zŸíJúÊèù-t_%¢ð“5ÔXíK«PÄÊ]ºÙÝâ:xµ°BDZmÝç“OËÎ0ۗѱ?‘É~ u³Tp+˜dF Ú’më“þVÁÓ¬ 3»6ú‚ :¨´§ƒÜÕËjÀë6à!¦_<±ˆWiÀ“(j£b¿d=Ö%zJßîàÁÚF·EÐ r! í*šÓçÂØS=³3œo7D˜Z¢m£èÒ ðnfwUÞÌ쵬 kåàuň/Ž=/Áð± Óì„}‚:*py™‹Ñ]¸p©ÙT£fkf¿¤OÛ‰×à À3 ;xŠu¥ žex1àAè;xd(aàrïs¢ˆ!Ëé5ÿð8Æßr$RHðhVT»d_º:LË¢K¯}‘0ÊXôéj‘Rð"²1Ù|_öøq'ÙúÉoŽB/Ã"€þË'‘ç(ÄcÏJ)žÉ<xScžø)‚}Ü —K¡Û¦‘&—º‚Wà¦Ç±ƒ7cxƒG8ا¾„¹ÈRÁ¯´‚7ÆTv>½4ƒ`—ª+n°,ºt¼ðÞà­Ë¼”eð ìït¢ƒNvÎ…ªð‚Ïõ½8Oµ,BÓe}h†`Š'ý%¼Ë·w[D¡bg´€çÊ¥¿¼XÀ –ð„°ÎPpîàÍ\z„Þ¢åYXÚñyú†>¶¼\À«‹.=¼;¦‰}õjë…âÅÐCŠuONOtnl¤Ä‹ÝFKZò˜g^)—ð$Šæÿ7’\ƒG&МFÔ+ÈWàÍsì†ì37b…çü-©hQ¶„w·ì%¼"XÀ³\(ÿû¿niy›àº‚­À#Ý<4àø­kz÷oóÚâÝ¥Õ‡n ^µðúkoL𾸞ݱ-ðT 7Úxcíác4Í5à‰ÖÕä{€·…È­¥^•ÇÁËìñb‚^«»~Û„±žªàфф7;¥˜>–È&¼vOŒ^«ÿø U8IUAPÊ@¶†÷Ê((jÒ°2R«*¯‡Ù–áE¶žmÁ;æ©8~YÁËOí°ŠhiÀSíwÞüãnðBTÛ‹)Ãõxƒã9§œ™}GJ²»Ñê´uJ2Ê^Êð†<»ïp^¼Ô¯°ãÞO¾mð‚¶Éšéº @Ç}I*÷èçÐ4ưèÂ<ËÂ%¼¢»€GC3™S½„GJ2Áûþ^x:83¦¯þ5Ÿ æø ekxe õ\ϋDzc‘Þî+x_wýäD¼25"±ìCƒÆª»Ìá9èCJ±.[Ã+‚q®‘–Dæöœ€Œ§³¼èùY_dAG4¬9ŒÈ¦avwžø‰Íþº.º'¯Í_°áf–íSn/Í+Îí”F½Ós”pˆ±†Fïhäù“ÙQ`KQtOžî<ö¢ðs$z…ï6g‹cíîH¬s¨ì˜F¶:bÓBÃ}sìYµ7Ó\¥¸¦ûr+x9ò¯M Þ%àaAÜÁ“3 w/™ñ½˜wƒSš7•Œh†!ªøDF';Â+…Ù‘‘è{V”ž—…Z&^ž¿ÅÊCñïÑãOW¯æ.ðZÂŽK¿{]yïβý˜ŽÓ92ÿ¥¹M Þøµƒ7 xUD‹ÌJÀÓeàÉQ6‚)JVåØûib¡·•—›~øÇR==Öe·÷¨“yœxˆÝPS";Ch$4ˆQãôͧÅaxa¢|“@\çÒõ´ø4Mkºkï-mîƒççpz­áe<˜É ðæÏž¼i / —B_£]îÒâ$T(8ÒgÏiîQöœˆ†ìûsùµvæù൸ÏLë©gí=7²¾±ëÄ6q¾ÛÁ+ ž/—ðà0)›ðæ xy áËÈAçºmHdžÒíHè|Âõlª¥e?ž}‚w ²~œŸáFÍ>uå¾à]Ú%®‹Æé®—­á•Áx³gæo‚— %ž*x¶‚×·Ò|Jð„¿8fx’á½™‚7½œ¼ñ8]ÂKÍ-áÍ쇯—ðð©Â»^$‘Þ´†'Þáž¶s„>§o¹ÑŽÑ*C†w1½L¹žD°Ejé¶ïŒT/ÓxS·…R x‰ ‰t±ÅÃ+ºÈxJhË F]/C¥z(34v×ð8L”àñ¤tÝåÃ6¼ÏÜÞÜ> ¼÷™•žwfØûZó$ º›à™ž6Þ_ÔðHû¼© w…@ ƒƒçgÿÃ3G3ÈWá†vWfá›ôj0˜–Wà¹<—­³í¶ðfÓ]/+ð̦£Êð& ¨.ð‚UxŸÖðÂQcÂ@häwÑm¹BµÁq„áý àq0–îp'¢ ç!À«²lW×*Nv|2YMõ!öC»âPvr—ëˆÕÖ˜›¦WÌÁëáåϪØ{™­ðäÅ´‚×' £ ï…}éà³JUI+xߩበ­áI»hyE‡-Áëaý ¼ì$¾”â˜:;"Ê#¯| ÅsÕÑØ_Žü)Ò£ìÑ&G’Œï·Á´ÜÅ™†Äæ`ðÒ–Ýð½ž4pî^$ iOÏ” [þ % Ó,Üí#²j ïàØž6àAIž:x¤Ü;x¤î×ð¤„'ƒg#/uåA¹Û6o"+‚áç*ÎhgÏéþÊ@r‰I^µ*|Ô„g¢¾a/ºýnW E8mOÜ| xë°ö›")à™Ž8$ª¢'¢ù>iaà&ôÙ Fœch.âdÀðâKÀ£;;¥š¡Ç¼ïGÁðc¼• /Å~N~IðN]ªËï,à¡È àÍÌ`@ö3 Ø…ovQpÔâÓ1àÐÛÙ /àš´Dd~ü¦OW9ÌúÁøæ [Âk—Ô àúÏö¾h¨Év¤…Wû¦þþÀGÝI1î7š›séWR’Fçå± º"\íÕž•«ð$&î%¼É—ÜÕмr=èÓŒÏ%íjx%^unz%Õt153‚Ë©!Óõ˜#jíèù7GÝ ¼¥¸=Eú%ž¶aŠ =ËúÕšŸ|¼kâÅÆwîKîZ^q+x—–Å}TLÛÞ{§­š¿“{tÝ [Â+¸xJðÂÃscuq+x\Ã¥hë¶— Xg5“m6ž¿IÙ^±œ0^0â×­áÍ›ð6yÆ_.†®³úJ>xð²uðbÞyuÛZzkxÐþ¯…WÉÞ7C¾•l ï’áñ^Á/e^p”›ŸyK»>!Z]€ËÏîïC—-á]žáÜ,‘g¹¨8AËS[ú Á{&‹ŽÂÈ"8 åŽu®f•Ll•”v9æ]••‚ˆ¼ÃCº*OàªX-,ÜÇœ©ôbcʃÞ~ï‘HíÁ¾Ö~N83©B2çbŸ”;¬Á9xAËW,Y7/W&Kk…ÓoD¶„Ç G9×—=ͨU<#DÁ‰§”é¼è;•¡ò>OùŒ}Jüì0°Bþ-5L‘uJûÅaP©šSæ±,áÉ 9ùêhÕxIÖzÔV‹û÷([Â;cx¼õpŠ”æˆV ÙK¼Ç LGÑ•óÌÚGÂþT"ƒQ×OB±G&DôÄûi';ìùžM^ÔQ7GÕ¸°—vqÏ Ô–×áƒdCl•-ᩃp†É1úZ —ð|}–÷ßÞ”á!j]Ü©*¯+=OÊ/i¼#xåºqX_BŽ‚°¨ ÏÍÞßÐç0bÂÈP Ä•.àaP]•í}UN›Ùc°O?´F¡6:<ÆzòïŠû^ÖA…ÌOJy ª2E·uðŠïÈ œhÐIo¶€Çétߎ+xH·´2ŠLækÓý1B¬ƒÇ? °†êC‡÷jõ½+ÉC;,E¶ïÿ·Ôq´Dúbñü¹OÏw;ÙþSa¨z…çG…g<Â?LÜÈ3>­á‘M8xÊ)Í‹oÉÂðPÝJ—.]9þEz‡ žFa•wDzl/hÂ{yã‰a$v¨‘ Ãìw’]‘ xY |qx©åÆÅ¾È ̳@Æ’w¤Y?8õš,Zá•Òz„ˆáÉ%¼YÙ1„˜ô¼pñ×—·ÿ¦ñ ›oE)ó“èŒg¥H²uýþO¥F‘ÁäéŽXí§4Ê2¼:C³u& à!:`os{ IDATúa /­á뇯¸)íçä¥/^!ÖïXf!](ÈööáîI]„e=ÉŽXd Ì3¡†i O4à!f…áÑ;ýà›wSØÛ÷¥§Þ¯ŸTJ‚Þ®X8+ ¤®?4¢…z+¿4á »ŸNÏ»\÷MMß4¼½°ñÇÝ­Á ¿F©Øà…ˆçY´¼K§ç•¿¿ðšUéÞÍ2{~n‚}å‘m;ºDU£‘dñ2f…áoRÚ÷#¼‹¾JÈÏ@ˆþÓÞŽ89”jƒ™u⩬þQ K…CJÓKNž¾Ÿ þà-ÓKCJ§ßb1Ç#ZEdÅ#Oû‰ÌèÊËg}Á1+Çþ>› 8­ü¨ÝwýþåVðÞײEHe^È éJ¥,d&_£avÌV캀+Žkôœóx½¹¼ª[9÷†èA®ç®RõTltfÇ {øAåVðªµWá"jDDtî)Òâ[&[Âsn‹µ[ƒ ðoDD ð®¬ã¶û~ ²%<÷N½ÅWÃ[(Ty#§»â_#+gãá»]ê‡'[›5þ­*\èF·Ý/À¿¥¬߇5JÞƒl Ï)ªÍýѪÞÐ╼†SgeèËÊ¥®ù‰-%¾ùoP^Èu·Å'nçlÜ’§üC’-á9÷ÁÛ«DV¾³·‡÷Íh–[Ë–ðÜMlïªY^OÄ·Wí0µf^û`d;x¥PÈŸ¸ÑZÞâÛ«¢?xˆ»Ïׂž¢þŽÇ!Ðè[ÀÛ6Tô#‚G7—‘ì$TŠ>Ó;P³‘ޝý`æ;F@²OY W>üûoZÂ+$+zðYÊ‹@žÍô~ÝÞS¯ì©ìY8Ö4"f{^'P „ËLáK#R¹~ÀÛv¡²jÈ<önÍËîÞ…¨™^^„(Á2Îá~2i.‚tšp©·¬ûºÆŽ¯Ä`hDXIpó»¡ ^ O Á¥¿iÙÞðö±49+‚1Á³N7„2CJ_ƒ•K5%Sj–Ê"ÞJÀüžÐ5²èÊLF‰µI2ðFZfª Ã“!¢8 KÕÕÛáeB<6]ê{¬X¼=<¸!•{5¼éÀ£ÿ}Mðœ-åðò,£çsíR#tU//^/G&O;¥fÚäéçåÓ䥽¬ç%/TUÓ{ʳI8"D%›¶<屫‡(ØÔ.›à•¾Ë-È&öýZm Þe³ 5Œ‰uð¤ÔD ð¦XžœëÐ¥ñtÞ ô6îGÚñL?ã¬_ý€ZèB˜Õ(Jçô߳ݎ}rðH¢Ë7švª +’ë>'å^¯–̲)ÂÙüˆàa&xãk”ï`%KËjm›5¹-<|ýÌ™¨<—š{Œh¢'Ïr†Weßc+ç\Èrµr¦ÐÁe’ÆsÎTL­Ú(™ç¹.ýÇ`[¿àµô¯„^Í™’ëÁfx­™.,/¤¹ìç4gÅ›x°†Ñ°¨¼ Vù¶ðÌ <¹ü%< $ ¯<ðOÙÝfR¿BËcxsýïë$³±<xô˜§¦”R#‚͸ü¨&_íb³»À›#Ã{¥ãÇ+.|+å¥zÓ„çÚñ}ÀËÝÎê ȼ%¼ˆáEðþð×ä\WðÚÆýMðØ_ p+Ž%«© ‹¦÷¡ƒ·Á¨ÜÞ¯œªâàQ¯:EýjÂ\·Åq;iÀ¾$WZ^ľˆ ÁüŽò[ƒg¼“ÐÁã«æTÛW®†àðÛw†·r§ky VÞ»6ÁƶæÙ¯œ’¼¼®àÍ-ϸٖáýñl¼Œ•dÿZx‘`x¨®DM–—ò6À3áÏù¦ÚÖJ7Á›m„·¦ Ý?¼¯^ÑŬ xãK×òà‹i—ð†\iͶØÂ®4BAôfx¼‚¯¬r[\“W:üÇ®²…‹jŒ~[Á[,×à­ ÷œq™_VÆ^Šå€¡^…·ó0ßÀÍ?ÿ¯^k·…ûµ¼/ÑmK§çµÂƒ=r( —Ûä艧=KÏô¡*|sÔ;"¬ö|dG_ò:串]·uOVóí­y¼®X5÷/S»ÊÚ:øô01]UnB¶-¼€e†¤œ¬”áùo×áÁ ðó‘^¸B Â1W²©Ý[ày>b™‘ÿWŽòII Ë?È€uð¨ú¥(žx¼Œ†2¬ªDa>´ãSÔÞ}Ecµ Šï².‡Dþ3Îö¸¢@ß<â^¾î¸õ¼®FitäEE·çg'Ý?Êú¡ŸÃ15\òãy`›cÃö—_È·[À Æÿom†ÇÊ5l¾:KöŒ\¿¹.þôÀçqÔÛt};¿»tõÿ&d^ç¢ïÛÈ·jðfRwÏõQ ôÐû²ðuÏ3év‚,(ü «·sô™òJ2Ùôé>ÁdÔÜï KÝkjlRÊÉ…æ8œÊ<“®EÍÏ奃GtÇ€7%x#z½Y§ª¼†ËØÿa¯g¡@€g<:ºP)#»ïLLéK´nê\*¶>ý‘¾Eí]1|L§ç¹F,N®ö{âZ‰}Ÿ Åž‡ÔZ©Ô?ܰiúŽ^R¨¼v ;¿„»Mæ'{‚—íz‡d…’SÀëûÙy|Áðð„ £cÜ*ॗiéà¯ÂkQ²8žÒ¹6¼S2R<Æš"9{|Wð¸æ$j7¡ÀWl1Œpêí )èòˆ«Ú8x\8cxOͦ[Á[/ðNÒnÒ”¡›¿LfEh$Á3¾É';íëŽ~"%>B0;4ÈS~E¼ðÊn "NÈð2TÉV‚W…Ó€—4³Á‡kS\›m>±D‡@T¨ø9ˆ‚!ÒP’KMìˆ^rz^ðºÖó‚É/zÞ¬šmó3ÃðhåzJïÜMH¿?XxkÇ0<×Ú*xa‹qW³KÇ‚W.Ò¤p^þ{”o!¼3†‡çWàÕökcû$m^ŸñíUñVn#+™»?LxܯÀkýt ¼ÙÊõµ]ª£¶ÈXîmß>³ÆoQÞ¶Ð{†§î¯±0Üv©•sEÝrn¯é*p[xåü­áñ k¸b9xã‡Wû<¤ËH„‡”ºðîí˜o¯ôõqhþ$­EÅÏͶrïÊ^ÃàÍVðØVMïÃ-áyÉ'*ë$¡à$cÙ!Ê¿™ã ô±mU!ºâçûxNFfWçz08Áš†÷B¡~=™{2 “ÿ $žåÃïàà9ÓðÙÜ B#, ánûŽÛp¦}æ'áÏv…ŠTg(°a#‚abá·Íð|¶Hõøû oLðú¯Æ2cxj<3!& dÂ`<²J;C26Ê}5¤ÎZ ØàžGŮ̲¿Àó©yº e·†÷Þ²Dm'[à ãé” ˆ‹°†ÄyÁðdZ¼iŒ³OSŽ‘uƒ”Û'Üi÷ºýXêW®ú'8eXÊèŒ9éÑÏ$ʧÌJÅÄî ïÊ{Ÿ.ùð&ÈM‡äf[ÀÃl«fï ñiYŽU0‚§*bç c‰š+’à%YÑÎFz^ÂEwЧ^öœú»ö-ÊCç°ˆ“ÿˆŒå¡å>÷O¹‡†B¸\ ZªØÍ1‹Ú²­²íÂâ&”x€÷ùÞ…ë¶€§^!>-»pðƺT¨äà•jÃ…‰áijœæ¦€?íLÌ®ìˆ|Vì«|š#©t$9cùP«™í4îåVð6†œ7à-Wƒ’…~|ïðÐò2ß DñdÏ:xµ@ŸãÓ2¸Vð$³ÇÈègìÿ…x¸/ªÓÙŒ|öoFR·8{žÎ‹”a§P3ú¦˜à¥D\×ËV‹I~á»pÞr5È(»väí}µ<í™P«ð„ƒG-O„±Ê­fYà ¼˜Zç ûyð9 Õø"-^nB„þM³ã)Üêã4ÃâHp†ŒåÓ.g½»ZWá)÷ÐXAXº#Á"6£9½_kì®ÀÛ¼Sxe%bxeÖðÌÞ^$%”[xð’õ<wxù¹ƒ7¼øuZ[×ò|öª™ÃIRwF»ÎP4-³¿ÞýÁ«¤¯X>[Âk»xè¶/'(°O xI ïo,Ƭž®á¹Mà|ü?Sï.UD ðWv03À³HÆ-¥ƒ§^åeOÁíq¦ïlÛn„׺ÔP‹ÃÞ™FÉ€ø_jx'a\éy€gü<5®áb¯òRôƒYæÓÓL%rbiÑ x¤êE"Uj’œ±üžà­Ç_}#ð Á3¼¬‚/öS†7 =ð_¯ø3ž0jxj OŸÔð©ÄÃ+Ûd\¨†'Â^Ú€—ýõ «Ò±~ia©\S’²ÞeÛ,ðÀð¦—Ô±ÆñÁ¹lƒ7E|šƒG¯ÎÝ„ÁÞþoLÝ6G ÓN4Êx#šG¨ÕÒœËðr¸5¼HµÁKüŽý'^)SÏþÌV~ÉƱ &ÊùÚÞúªòEøD>¼â&^pJðÎÞÁ*¼àœàÅ9ïQÐ8Ö„§Oåic°pz¼ÜÔð¸bM/‘mðNãaÑ뉔}"U¡î+ÝÞFüoÇå)‰Þ'$ëð{: +†îP¨ÅŠE^Ã;[÷ú-‚ÅVË=϶¨sÑ™\è®R£žcaÀîžãõ“ñi9¾5á… x³i ïЪ/sJ‹¹Ió˜7·ð«á¿Þ”¾G uÁ‡Á)Ö0.Ø@¦i§èv"V‰¤Ü¢ŽîyųB ÜŠT¹oèJßKÀ$ËÂ,ȤƒÇíù$Zx,'Öü;º•g×›rql /Ù¿ô“(HH×ãD";ð&‰ä’OÓSÓôç¼Å½’z1w…1<²6CìàŠãRÎS{ŒC§<´¼“zÂ(ÃVxêœÚ)+à|F'¼R`0ŽÉd𤽄‚ò“4)9ž 3«rMœó´|܉‚ù„lMg[ÆYçŒÏF±s4 ‹1ÿlóÛgS·q½#¼5á‘!Àª=ÂúôžBùdú¥E_Ø‘Lväúºˆt/žé‚¯,ÍB/ã‚JéœàÅ6è% ùµš`˜,‚œáQûçåq xå½À+߇ÜV‚åÞ· Aöñ‘¢ÇÖ_`O:‘!ñ¼ô#>éwr¦bd)¼{²™Ô>R  “ <%Åÿb½*ç[dÊ'}ÏsgA¿a/`;x«{¿÷ìˆ}/Âé„ð$wÁ5‘ÍŽƒaVzÆuÀù|¬éˆC†J&¨ù" ²¿âð(Ħ7Úæ—¢Û1ÏÌag8ÓÇå>b1ö…´îßnÙm[àU¡Äeëi?x1=id¦2™„é>€‡L­™oRÄÞèï|¬çE¼œìµ:¾l ou5Z6^jÀ[[Ù~¹Ý©?D‘¤,Ðð(mŠy/¾Ø&ÒfiÂ{½¯áo·ÞVwîoºúæÊà]l¯ždZ#?Äaóörwxµl‚go‚§¶ûêXîo¶ ÞÚ˜×ïÍòÍ ¢×}Â[“ꨕÁ¶áíõû /½¼iºÊ©í¾ú–má5ÒcŒî Þ·_¶„÷¹gÉò9Á.m)‚]Éa nŒû¼›$ê”22H»Z õ”ôð¾ŸU9Iì´ìX4ƒ]+ۣϙæãƒ÷rãa.ß}ÙC6Å‘í¤e¯ë£T ï¥À÷†áPaAÃó³ P6¦çWœÀK¿OðF†SöáÊ0µ¾[”Ü ­îÓ¹ ãñ”zo¤ŸÁEê…)í—ðbÏþÌø›„SÏꡟö¥ýý‚'8/*xrÎËáG!íNŒ#Û.}¸õ˜¿”ã|fÐ Ï|=ÚÞ“¼eÂ2Eövìúe@íPcÓq[¹môöƒËÖðA¬ vzbx؈9bï±)ê)Å’á!92±TÓtnú’ÂrÔ°‰^X©ÆcìNÇ2ÒÃŽ§·¿Ö­á™uGZ ÇÖ#¯ ¼2ŨoðÚµ·§}ó™ 6À+oVÁ‹Í| /#~eW1·Q´|±ýÛn3ÛÎçsÝÖrÎ|À3ÝxsÀ“2×ð ;ÌÎuÏmŸ· y[ÛqËsuì/¾k·í‡qùgÞ«Ux¨Ç—æàiR sßÁK|À>ÃàÑ¿æAᵜô.ð‚›¾mkx'ÏçOÏVáåœÝÖðLg O3¼Ð®À+DÞFËønr¼ÙÊqöZx7§5½<ðÎ+xáÙçÕÄ¥U-Ï/cžõðp-)òïšÈÁ3˜]GvE^| 3­ô’G¾>Ü¥Žßó:ˆMáa5{AúxÎ1…Bkɸ֫Öܸ¥ƒWc]L×Àû'uÓm¯ôtwŸTÚRŽQþ4§Þz[ ÏQxÁÁ;gxzŽ« .FoWáÑÏ954iWð6dõk—‘Ùy62v~Pa» !&B&Ÿùå³)ô¡DL…è‰Àf*IBƒ¶Ú,,Ä`¥`ÐäÔîyŠõŸkà}­nº íàbIèÇE”L²ï%ýÝÀÃl¤»j4Ñ_ÔÆ N¼•…¡.RÀ;¼ß)j éoÕÄÔðnåÍ—å箢¡L4Ò”¤ðó7;22ýžÌLÇ×¾ÙЦqYJmõPt‚×{æs0rñb@.ŸxVŠce½N±K6Ú,$=O«rð$ûÒmnÒη÷’òg©.³#/ D_ \€¦Ÿ9{ìGr’¢8Ž2ÌÙ¶òbrIæÙâʾ†;]ú;uA6rpVMÁíà(XʵU&fžÊÃëùd´@ùaÝQÎ4ÆMéw¥«GÅ¿õizóËW\Â*ZN3Ï–\HŠe…0Oe¤¨5GŠà%ÒÀ;ãTš=Ù±IÐnH”q3ŽŽžØ X‹:*…Þ•‰~}úÍ3A#Yµª‚L¯¨w;2yŠìº³3yH Ó ^؈µÞžäÈù‚l–ðr†ÈGåã-:!ª ¡–i¨ÈrÜ;¤uŽ ƒ §è,(dLÇ ‚(³rBÝ 9 ÿXÊ1=(‰¤éS}ìà‰'Ôd§sðší±´_öOüO O •(šr;ç3F+=™\$ûÓQ2µ…ñ­’Ä/àqm¿)ʃ¼à¥rðèÕ<”‚©ÆªY±ÿã2À2.™pÊÃô8ç㨠Ãë,„IæíªeÝÆX#JsÜŽ"õæ÷8ûôÝ,EÔ IDATŒëà­‰>VoaÞø><ê QO ÀÝ^ͯƒ—:xù©Z®bAHŠ;‡ûð˜/÷¯‡BL"Щœ,¦ý‚Vàn}K$Wdz› YÑÙ¦0F%«ðB :°—ð‚%¼ÇäÒý€æ«ôÜÁCÝ‚«ð.Qô¸^ x³‚ó< ¼–ë6ðób{I9š»-*&»PÒü¸j™J!úvþ² /¼ù*<ãàITÌ x#уdN*†—?¼–jjÓkêX¬ õª[|YcÌ<ƒ2„Õ„qñiꥃá/ x%/)Îí*¼Ïðö„7CiNÀ+¨]žðž¾Ù3ôôwâ¤ÅBÈ·Œª€áÝáõ¹†c¬ÂûI"< auËr­Ã+þ¦ ORG%õá…“†÷ÿ…W^Ò·p°¿+<”ƒì‡gdPWð0eWàqËó­>%x¿V8(}uÞŸ7áÝÖ2<êVÜmíCÁk“­#0Vòql! xÊAÞ%’¬ÀûÌéy¥zˬø×1Š.êç.꾆÷“¼?ãÙVVÆžiÂk¿ €w )ÅmÜÁ^!«ÎÒ¢œùsøù;xA ¯²0.+x³%¼|oŽêàÁ§ú*<šm/QAˆáÍ>Lxœs[AŠ ”°èd½'jhºêt4³ÅÁ#=ÈwG¤‰˜W¶­»ÃÒpxda …ª<²*¨EÞk‚'/Óá]| -ïVRŠOÞs”ƒ$›åŇzÑdÏý£0zFÖaAÿ’ŒfÙ@N椔 ®.“¢šœAÏ#Û–Zè€áaQ ùæJgž“…!/r†go .>Ô–wGÉìkÓËB,Mx9à…›>AÍd ÈÂNüh¯£½Ì'SÓ?µØèø¹—)Kva:5ž¥~OæÏð¥D޳“<›Ð4#Ìôº“Ež -ïq¦ŠÂb'ÂUÒõŒÌ$ÁÃj}rì‹#ß'1:ò2‰´XU{Ê+Љ0û¹¢F*8>ŸˆûÈ«ôØ´òÆC,û·ÉÇoƒèRÖ«^eXÆb,VՆž‡›N;ëv9þ!xÄö Ãê"ª-h=÷GofÇ×/‹vµéãû£‡—ÚŸµ—)®%¸Þ5ò{ï‹Ï®{©LþoƒÌìÞŸ_÷þ~øx%k¤j“ûxňâÚuìíTio&××&=¼›öbN?ÊOoãâë>Ðüãô–þÈ$ où?À{ù¼w?À{ùVÂCÑ={EÞI¾ð8oÞõþUï§Þî·+µ£µ×ÔÊ_WJë®8ßKnTû-†·î:»ª _qâhÂsÑU‹ªÚÉʱF­üØkä#€ð¿¼*æ©Cád¥ø-Ã[ð½^{ÐU- <åþ¨ÖÇ^ä‹ÚÆ8¶1F®4áë³H|4ð*©á­d¼óMð\þý‚gV–r¼Æb³rnõc‡×¬ |{xÓßox+XjŸ·+ðVÿ>ÂÓ*“æH\dSÔÛ´gÈÛÛ<¦òy»mËk¯ÜÃÇo"/{.x*‚¯:V |i Ïìï+#Ë'¡”QÄâˆ}Vñ›àÅ›à9÷­^ÓÂCˆ¢¯’e·÷ÈK=Ý1ÇzOHí‚àù¨x™=åÌ¡b_FúP1ÜÀ”c‘…žýR9xÈ×è*Í—óžsøxàÉxœõKÍ@ML ’4FÄŽ<Ú•³ü’ÚPfÓ¹rÂeË.à ßüXïí i/’0;2Æšqñ\yYW‰ú¡V¡5žUú;0A"©Ué—ªÃfF‹¬½#¼û² o)2–yÁ™ L¨&ÅQ(' //O¤œÎ/ ¸,"%ò4+ W©‰öÜ”ˆêðê¢ß}êÇØ­(žHdËžs’}•{Ú#x~"M§ÜHoµ/2ß Þ7“Q¦Thy®Pi¨R†7uðz¾’È xc­¡5¦)‘-2Ü}øÉôÒ”AÇç2ІpÉv—Jçæq€Š±¨_3ÇÌ#€N!©Â4y´]Ñ–ðLó¸ë·£LJuVÃ#,¨)S‹WàRgð$'Ø–"ä(­|V d µvÇ1œWéˆ<;;Wh9›Í &Œñ ^ÌŠ~ŠÙ65€N7^·hV™Õ‹ç¼‡FJ”rðQáàÁ11­àa夂‡ !Âó%ÃÃû¢…Æ“ x罌•¼toj,B­BnÓ(þ¢L`>3ƒƒ‰½õ@µ]ÑÖð‹Ù:¼áúñ"pÒ®áE ÏOÎò€àùúÄkÂK±ô´„‡ˆxrº“öóÀ¶ÁS\1VMßÔðÒb‡”RmW´-<Õü[¶¼j„h=ùý Á›Tݶ|¢¦žþZM­Jˆ± E8uäêuÞð<¼¿ l^ˆ| ÈßAš!¦";¥™gî¨ïÑ‘rþNðl4ÖfÍ:¼ì}Á‹ë cÀð¨Û¦y Ïÿ>ô¼ù ¼€áE¢‚7ý;À“κo xÆ7V¸‚rQ¨ÔDî¢&OžøýTQÅcÌé¤9Jãl@£­ CSE±Py  àÁНeìöHÍïl¾çšCeõáZå]=é5ÓÄ^ ?/°"nA·Ïü¯PFê1ÍÎýŠ€—Ã?àL¸aMh>Æl)/’,¼S¡ €gXßÖ~ϲ¯”Ñ=yNŸÃh+÷Ù ÷ƒJXž¥ZŒt´âºçÛ_`^Û°‚m…ðoâÙ<ö]¬u÷“-ðš_=Pö†…±æ©ÖÂŒxw÷ f+á%¯ŸÈ8‚U"/Ø¡Q>xfôx†g¶_È>ÁëbY5†5»“žIžô€'Uªû0dõ™x%»‹gï#û»ð^d5˜£/"S?*ºhj†U[Gdmà öÃ1w AôáÕ£œ{ox¼à……ÞØFËȂγKxat ëŸðü€à5'õغ|Ù[çY„—H ¶:ÂKh ªàñ9ÁKBL{Ø·žê}0ðRö‡gx‚à]‡v¬ˆ4Àë+öÏð–RÂ˯o“«ÐÖàݼ1ƒ7£ìŸáÕ„àYX|k¡ïƒ§*xÌlûr<íUð²:<Ü)x¶‚—4»vüÎÉð°ŒÀãž´µž÷àÉòç{Ü•8`¶x¶„5£akÞ¼Å&Ñ:¼fû÷A¢­‚€…RÁ£ý½Ížçâûa¼\î°­Á[,)Ê…Y„ël4åK·¼mg|œàÁc”ƃåYbáÛÔóÞx5.ä!dx&¯Åtz¶q‹Ä¹…6 ÿÙýö‡gëðÂŒ®µ„w[š*`ɼ‡ß‘ºY.íwÀS¡óÿ.¶ÂsNàŃÂó >fƇµm8ÖÁ]ÞÔ [¯¿»”ÄÛÊÍò×m:¯¶:DWFÌ;=pÚúž –.Pµó¼p»y¥ìÐÝÀëàßxšgrlXÞ#¼Aõ÷ád;¼uÑ!º¼ç”úƒtž\¼‹ðtígAFmad>}00El<ÃÚB …pï850¶wu(ËÌeKx‹¯W;®¦^¨Éb˶}£¼7<Þû1ûï#GãÆK 0G«uò(Ž£'2z‘zfØ…È‚$‘šQ•+¬úIè3žõNÁ˜ÇËW¨iª®r SGä˜p4Jo 'y ŒôòBœ µaÿÓ½Àter¥…E—§äú F\]@g}$£áEú ªè' Ð5»bÆSg‚Ê}õÃX ÙÔ €÷P¾ñ…˜*èSõÓÜÈ¡+ ±21®ÆX€7ž<5’ŠáñcŠÉcBÓ¯¼ÀCuè§qU°S!F.dUááøöRÓízöZ}*`>òÔ+ΩË_ˆ¦}TðrÏ–ðÔžÀ:¦“뜬bŒ^î®¶À“ª†©Cr¢ (h( NäPLžõñGëB‚ÎS¦÷ zåÅT›Wôó¢Õ9Û?.xs€_ëžå·ºoRÂÓ<ôÓ]AÑVï†èÐüÁs¦ Á››å°µãJç¡×6Ötðââq O,àAß…5dÄWà=c/aãÁ$á*H¼ÖÛøç":Û¼)ÀûÆÁ›.á…LúØVy@xäKHðÆÈ꿱Y°^Âùžn~ýQÁ#;ïõk}TðR]ëyà ^_«O…q9aÐc ˜yçä¤s°Õþê°…Wñ=ÚƒÎÃúžllÑÀc»y3iV´Äí‹>"¼|^W¾â<Ê\QÂÓáà¯\!âÂKx^8˜¾Ú¯ðÔy^¸û›ŽŽñfS–µ=Áos„w`y¶o†• €‡û¥A®ByÚ;W…ƒ7Ko•ÆÂÆF|#‹+Lðìj-ÚסÄ/-²0é^9x-zlðpÃ)È®}ÿמöI'Oü¨ãi¦}0ûü˜â…Î1–Åz©nKÖcºÛ¥Æ$™f°. w‡ß¬7å#†w¼þJ>y<|Ÿœù‘ô ®‰äSŽ^#Ð1yÒENd=Ã0)e\Q‡µ½D`m ¦Ëün£rg;åÖ[+LÙ`¢Ží ð5»ZD22/²ïl3ôe_xúðÚo"ÿ ï-äã‚·¯ëš¶³ã±åã‚·¥þ؆Pn‹‡—}=‡nÈQåáV9+²/<ùÐ 9®lä†ÙsØ–ÛLsôéI¬ùÆþ'{Q—=ᕉuÇV¡aþÏðœÏx6ŸX6âõB¿ór(¼T$MðŠ·´­(Bÿ¡ÈaÃ6·±¾¶ñ¤)ÖÁ4Ák\Oo®Ø§{ù1?¼›ý!ò&ð7/]©•²Mjð6®–aY僫æ½ /0×áà¦)ä áQÚà±¥ö0aCÃfXÔ±zúTFU(šÚ* é0xÀ»”Íðד»áÑ:*ßÞB1~·ÙÇ4úXTœL]ô²ð}ܼa²—ì ï¿Ø Ë ^S¹ÝFxþ1+RÁ›ÏÔ{žk9¨¨ê5¯púëöáü1#ûÂSgèÿ—SÏ‹]kµËX¢Þ ù1ànÉ¡ðjOšà¹+œ¼ÌÂf3êµÝ÷ºÍ²/<çÿðt; \pG†á¢ðÔ‰¡'åtŒÍ¼­§EÚí×ý†ðVj6l‡#E–nô rg÷½n³ì /À{‡³-Vb'¯Ù f¤cÜ\«Sáù9ôK‰vîH01L€\^Ü BÛo Ïê¼EÌμFygðÈ%&·% îî#¦H4<Ц+Ñ9PÁ’7Œã(zÆõ¼ý¨ó‰§YȺƒ„[éðæ;¤ä‚e豈Ãá©ú«5x›=O|ðrjå8“ÐÒòèÏkD¬Š¶Äl‰ÚfF'ªÄJc‚\=³~Ñi? †@($Ý Jp‡Æf"JŒHûn³ë-á¹ æ-=Ol‡7·û^·Yö†‡¹Õ¡•Ù#LPGŠ*ž#¼É¼èˆ˜çFò©êÂKð$>h6¡ˆ#¬a‘ë0È`x+ÆÃÁ0#%|æ6»r[øæÒ30Ü‹Ç!îOŠ‚8ëß îf‡9_Ñ1‹Ýb7•~øðÔ‰„¦¼›œ²–æKx…SUˆI¾„§CÑÑ5p2×a¬. Å&Æ<¦tˆÉ…Kýãàùê ¬ñbnbßˤò0&eé—pź<²,ŒxôØ·Ìœâ Õ€_E úäl/G=öÂ3m©J-7œà á“» bÌ1 ïdÂ85&r†Ù8KxØ?%âÌÊýr2’;|Ó€Ö˜îÓ2–ˆ<Ø”%¼á0Ï^Ñ’-„gκO°«2IÁA /jûIÈìP}?ȭ~F"¨`ü6œcTîkøÅ;…g)[3ÝVã¼Ìîß‘\ÁÃÕ‚.áY>°bïgO|%bJ›Ó®àI¬Cqgz躓¨ƬôŠ-…ORrtNǬÐèåáýë ¶˜ÐàµZ~Ö½ ‡SzîÍUú³:´xÆÓ'AT<ºŠ'ôX{Òìéþ ð(é:]ŽÀc‚ÿayo¼„§öÊ8ŽÅ)ç¦S‡7\Àk‡èC|Wtñµ±–<ÕºU­Â»( ÞdN âý9¹=aÓ„+10Õ=¸'‡7d4@·0Ê[_ëkóÄg½G^$§“$‚›“o¡ùð†·ÎöMKgíW_ŒVàá~ŸfÁc<Æ„÷ïàáçtGâïļK›R)….eÔ—4ÀÞ4FxºKðP»ÊVàÍ)áÁ‡sôè¾!c”ù€nTúÊ„~rö³¶œL¡kçv8ÉÕ»ƒ7]Â.áý´‚',õ¼iˆð& x¼/Bx.áú´ïºaR)‚‡xÅ:¼^GL•ëÙ„§p:Âz+¼ É–š«Ÿ‰)’ª'â¹–ð•øɾ+xUÈ_ÀKÂûn#¸ž¤a ³ æ]À3lûU©ó^§`ÿ `ù¢ý<<LG²lƒc/¤dÐãéƒW[Ԭϊá„Ö5<%ïQ„—«/^îà )p n_zýßãÂKcZlÀƒè»­ðŠ:<Ý]éy%¼[„1Ì ½„Çz+ð– x ºÜ4wð`íB&‡ï†-êÚÂsÞðÞ¨‚§Á–ÂØ)LÃM±Wpò<>Ölû|ëa}/³ƒÜ° àèµ[ÂËì(× xß!¼| ï¯f6YÀÃðÎBœ v]ÁÓŸ<{.àùf¤/"xÊÇBtí,c|˜TwI¦ôŠXÂSï ža—0m¡IÁC-–Oò;zœ¡Îûëðel1ÎÆ™*p®i //á½ xÓ”öº@’Ë f¯Ã“¶‚ÇqÂ(áœàÓ¼üáedò ëļÇO1êyؙޅOC*È` (á1œSÅ@wœ¼Î¿„Iºy"<ìy—áÍêw4èÄoÅ+ž—á: xm,`oÍåÊ„a¾hÀs:¯ Ù6+už\™m± ÀMÓ™¦’Op8 ðÔ»‚·%1s…@xÑ¥´ÙcÖeð…žÏ4ïOÀf¨.n ÁÀåm [4’qÁëàÁô6ƒÿ*x£ ^àávà^¼  (9xFNÔm5a`}Ef<5Êq'±_Âã%¼ñ†W¹akß%¼JnªPøïYÏ횀] .3ªÏÇZ,Q÷TXnËDµ Þ «I0N•!xßH„‡«žX>ª½€‡³íÒí¤¯Kxßá „‡ž¬ÃÃJ6#\öfÖr¯è¼÷ o]ðÓZÞýÍ˜Û í±ŒG!öLZ¸ ‹0CB–¾¦¡†®çc‹¥ƒœê ¶ÑðZÂ[<}(ø-,Ïb0Ô~‰ðpcà<ŸY³„7ÓBÙÃá}FýϼÜ.fÛªçýöýÀíw~÷ÿÝb¢BÍ­×Gxê4HD"þ–kχ¾µô `=ægYtÐ,&xY¯Ï3èµqbĹôh°^À+ä ZaÌ´Tvćwß­ÃûÂ,á„÷A[ão* oE\oË> ³P øìYôÞcöìSRqž °T'èG'|\{ú0‹& ÚçLcÜÁFx]žM`Lûå CÜh bßÑT¬ÿG˜Óä—gÅO—ðbƒ³íŒßÍH>à4o~Å5™Ã$aíÿ°ì”áfè-ÃRtE‹sü^"Ô Ï.… Oáßkº²ö<ÅáOŸb„‚ š– 8Vú±ð`ŠÂ,:]—Ñà îÁ»=ÚòLîý±ã$¦ß"URÕ»ôÙjPÀ»g°°Î,Ä’*&ªS°ìÙ ff’Lš°`]/ú»%ÊOvGe}U XWªÇÇS‚Ý5˜mc@îý±wXue§kösjͤzŸáŸ}ãý=G Ê€²úó$x†BW¢‹G,9ó³ 9ƒ›põˆ¿ëž÷å~íîÙç÷!á×ÿí·:Ð<;÷afúœg3T¾]Dfû9Z½ùàᥣ÷Ý‚íòáÃï»Û僇÷`.<¼§ئìï ÒCv$Œ}¯ò&ðvdþOG¶MðÞIdæ+{Ã{½ôò¬E½®z«.œæÖNtHØIö†w»„Ws._ƒºŸËZî‡öwRÞÞê°-á-Ë-(÷BU¸í£y‰Ô£ºvoôxòc“7·5 §ìh3¬Cì|¾éÈLn™Ôžui÷ £tv2>Vɱ®èÇR>ô`¶½áM÷€W -å<ú»‚—ñ¢%晸©gl(íÂÓyå¶V‡WlKéáfhíï÷¥ÞÞ¿ ï?'¹>ÖB5nJx 7’Ït8¬Üû"Áú§—é IDAT›#<ƒ¡)õÎf.·\hÞÐ>|‰fÙÞ­í/á}½ý8’mðЧ;¾€.‡ä˜œ¹…hù*¼r«Õ\ÿYó2ë×ê_[ŠaVÒ¼ãä•ÝuUQ¸vÞ{ºšì }Ù~ჾ½æ—¾Þ‹í礎U3' Gð:Âu¯1Hoå·ÞÝ <½^\³~âåìÞ(Í+£{àÁ;ûW{Â;Œÿܳ:>\«-ÔE H†þ`=2¢I·ÖÓ¡Õß5x“à¹9º_ˆõ<½e/OÙAíÛ ÷…·r¶¼úÐæ¬ïÜß—+Ù^!xjûè}üŸ[ÛŠxö´ãcvÝ“”ùÆÏèë”*Þ¾ª¥@ ð”MÏÝ o[Üœfå!ÊýðFÕ/{›žÁgw˜r'©-:ÜpL^/¾ý“±iw»Âc¡ ôO“0¢è€ ‘QüÄfÅ)·Æ+εáõM[6ÃS8Öé«”Ñz[èš À[ÈðŽ9l ºVÆèu9x=Žþ(4çºÛ+íM:W*àiqGüXcîÄGoƳ€Ì®ÂtŒðô÷­›0n<üq†ÊŒ¾Jil«mðt8X ª?>¼ýäx¬ŒñKT^8L¦¹{‚gFÚüŽ~ÔPˆÑ$Ç wÊ¢¿: Èì@x˜¤.ǧÛhªÏžñ,,˜ìÛ8‘0!¥¸ëåÂDm‹ûÓa%âwÏo»r+Þë^"־мQ'Œ_…{}XæE‹ò±&©sˆ»ÑÂ\õ¸íƒ9U]‡Ç„Gáæw˜LaâþxE@=/ b‹•Jx<ÇЕuxKñÃÙø;Kq*sÓÁz*5xèãX‹±è@Èû›ÙÜLëêN‡pÂÑl =5×ù ‰Ùh1p#žê³k±ñ·—݇þ—æcÛð =ož›6ºÙ3tâg¾¾°èªöÙ9Ìm]4²Žï^9 <ÃqVÁ›C÷¨ÁÃo[`üÂë”ð’ ÇЕ%¼ ᾦèM˜aŽXKAV`p;x¼´ó Ç­ÂlZÊEëê§Ê<¸ fžîõÄ„ô$xW¤dS´M¡ON\þò˜}1ŠQÀ˜™BøØ!9Ø~o|YÁ|%³üÑqàÉ8]À»­ÃSäŒÝʃ‰ú¹ƒ§`–Í‚x‚4vŠC1§áE¼b ÏæNç!< ]Û„wzý%Ù1ÃWSŠq¢ÒëahªBx¹¾œ<œ¨8ºã©¼Tc¼ÂÃo6Üpµ!Þ?Gå ÆVÌÅW÷³;ÀÎCxr–âr «Ã#ß^°óò´M”¢µ±4•g$F<è˜ xÆ##Ù/l„w¢¼¾Åa›¯KÅ”–RäZÒ Ó}o+xô™ìÛNiäï^Nðn†stìÕ ?À8(äXSG><¸1ùÍPy³„gälŠð.œcôhð ï„œæ·aZͶÿPƒgÂ_ÉÜ0‚'0¨„'𔃗< ]Û”ýCEA¶0QAÏCNsÕ&xZ·zX m;<°öɼù]0Lð8Ö¬š£òÅ -™ÂÐÞµ“½ïÆ€Èo ÙJqäÁr 3¦ORaÁÎÇË*ƒ»·ó[9­à}SÁ3X›â™¿H<˜mKx‹µ­‘c¶6ˆ·Ã{d~@ð’À°²ç©ÿئržúºÕc€?Ã±Ì Þ|fèè<˜ ±õ·oHukŽ Ï2™cÖpáaXzÒG2׫n /×XV¡‚—¯ÂSöÙyùíˆé îϧEkÚÏMô…ù"ª|­9†¢læ«Ë Þo~äà}YÂ#%›–ðÜ„Q‹X¨°Íêv8p\pÖáuŽ/ æùŽ`…1ýì1K,Œ »¾ô¸Ëñmëq“<~›ÏĬ„¼ÁãS€—–ðÎ)´ÏͶïµß:S¥K<|‘¿j†×/áÐð%<ý?}Ÿ‚ÌOè¹=âÆÂájðX Þ˜à‰«õ¼ãè¼JhðUð€¤„E©öúì–¥å'âÑ×ð¦jÆgV…< Øæ`™dLŠÉÄh„wöEe$ßTð°~c—²õÂwýË-ð ORì·ƒ÷g%¼ýï 55å%¼<­Áíg|CÏœ‹ø¼PìÊü^RÎgPðItد¹ ¨Äè€ ŸŠûC‹+BµùXw$º¦·±îÓ0N5,CǯS G1t„x8a|qMð¸ƒ7èrÂÐÜ'xEÐ_‹d #~k𜩢²„§‚jØÚ¼ÎÊGv1sI¦îø¥ÐâL…g诞\ù¬ ã=ë=Œ˜Œù+EÖgÚH5, žÂ4 ý³¼„Gq›’<,«"nãÊÎ3ˆñá—ð„­†-þJ ‚gžùñr°5xÿPÂÛ{å]øçQ8v‹‚÷< HÎD&¼Ù'{ô:ª°¬û¤ã©îÿÔ"kÿ,å;/hËa#<\{ŒÇm¬Ê†Aã– ŽZ‹7R²ÒÎ<Úâ¸*AxW/áá­É<éíúbïÃ¹ÑØ°Ì(˜¨ÖéµH0¤:¥†åÜ)ŒzvÑöaÕÇ"T«ESá©F0g¦i™4;·óÔs„'qŸ—g x—¸ÂÈ¡ß^¼…‘<Áúsï¦‚× w}‘÷åº3#_*#þ…â‰î™-¼q$ŠûÛ”™íÄÉɉ§°h øñ‘Ì烩 Iɲ@ƒêÊ ‘λĘ LEvêºÅòl‚fâüV»k¸vM>xkRngÞn)â0³Ï)”ô‚gççžy\Â#%5šíœpÊðÅ^u'ÑýzD¿é÷UµŸ,*d ­ÜÕ`}ÒX[t)‡À kqqå½Ð o¯ú ï[^ìxÿ°]•ðþce­jÃ^³'S ÏżMîúZ€WÈškÒ:¼µVirŸÿå‡+Â[Èr—ÍÁ“å_wÕ±õöùYfþhëÕ^ÜÛ–C‚W›ï×à-ðl…×7‹$[䃞‡*ygðVL¦² s-¶]lÿÐhÒ ý—‡ðíåx¦¾½u0¼•g¯J/\žvAxà ¹Tïîƒï¤ضð®5I2Ë•¬6xn6à-ò¨•Œ*ÿÀ-ðtyP£¡\žvÁK›Kœ™Tíƒ;öCìf*±U›Y‹…­°]ö„ǘö3/ |}) NÇÕ®Ä*¼rçw žh„ ×r§: Þµƒ7²•çñîÜdëX…§øüXðŠÖ•¼Ç~ö”cÞKû•§9ù:ùt»Ÿ hŒA[ZÑ›ðVöÓ<ݯñÁÓ×?¶xF‹Kî¶³Í ¬:Wð¬ùy{]ö„'ÿåT¡ÎKMÀ•†–FLó)¦µg\ù†eôÌK‰(¦ ÃVÐ7ŒÒ©¼•˜p7À`hš®å¿WÃl ¯œðt»¾±“½à䫲UŒ¦ÚÁ1ùáô•åèÓ®»|šëëë5Ÿ«‹V[D<ÅqS|ÊéÁW¾¤Aou&hÕÇ8¥8å©á•à0xåïxºýÒj5l®Á› ^8œèn¨ÈûŽûb&Zt=RO•Ò]™kóè3†ÇèSxz:ÚŸ{@Íy«sÌúl˜)z¢û'ƒùVÃry­R[½<8éžð|xÖàm¼²){Ë+x|HŒIw9ú´“?,À SÝ=m#<ª´„µð°>¹µjA‘f1*§ÏtJ òØ=ìRAòì³gmôOô—…6ûW´ÝIÀ÷Jà‚—©l(¸Î1áä%µU`Ø6ÀK¿£§Xç^«-)W½¥ÚäL!j”ý<ÇGùV™Ÿ ï‘ru¿Bhñ4ùŒ}væ›3é±®ÝÔ'NDþ¥?ðû›ÍaJ$áëÉïãïŹ,Âz"ˆýà5hƇƒÇ#¶„:x8s„÷…1ajºÂ8oUK{¸èbÑ4¦2ŽSò¶ÉMÇØŠso2×O.[~ª{"¹¦,ÔƒªPaOM»åy^ƒ??À‹:¾Ï®þHf<: ’$ìkf=;LÚbɼ*óLŠú)¬‡‚WHQƒG5úm¼¡þ]žµ xrJ—±.–ð0Ý®i£Ëúœ²òã´ÏõÙ5>©ï‰ 8“—0]€“Ãò'ÉE¸ù5â¯=Z}&ÓàE‘Œ3Ì#´˜“îc´ÛŒ¯…fBæIÝ8“wyáálVðÊ”¦ÝÛ‡‚gO ¿˜žBõŒðÐÎÃìö%¼6 9€ŒWàÙp/wð(”'3Ìy?TºM9ôC*tK»ßþ³a6Áš€ù’ƒqu!ðtÚ3'>GÖì™D?ŽÂç}©ç±p TÂ3ð"ÊUïà‘SðPÔëðœ·qú f¹„—<‚Â1®ÆnÞoj€s2¢uG5j^G(€W`Ô•¤¨Rüs*æò¯¯¾"¹ ‡Ã,šëÐ×|ž“S8´&3O<,xð¢¬óD’ùê-Ÿ€¼<ô9¶¦«^SÏóKxèkS¶mé¼Uí*¼¤„gÞÜtËžGAŠú_Tð eÙ'x!õT/·Mðr„7žå¼á…O!<¼œ T|ÔAnN$†W¹Jlb¢.æ+Èsµ‡;‡ëTæ Œ„Ž$ó5/ZG‚‡Eú]uK:Ï–ðnT5aXÓ'MXƒG‡¼ ®ÁC‹à ‚W`]Š eo:«Ã뢣bÞ°“:¿sñªhoOÐáYôÃCW@]QX+pêŠ ÞóNc{Á\Å 6°À0¦å(ðÈýº‚7[ÀÓÎTQ9ôJ0¢© ýv Þb¶%xúÊlÇ^^ƒÇX˜ñ¼žºÓÐóà6d Ï• jôJÔÇ "/`=8µÁš y«g<b(ÅÕ¨ŸÄϤEzW£‚@´¥Þv+ŒAÛ]ð nä«Ô=ëI5[«Ã£|›ðøζ/–ðò¼öÞÑzÞ ¼I㓇•£IÐnò’–?&our²x=@`Õú¤Ÿ°.ªOuÍÇ%¼åxД`Än‡7K©ò2Éw xÏìh ^OŒÝ„áÊØµ±›NWá¥Kxó6¯Á;’©RßyÝ ¯Ñ%Є؟@_bÊmÃ~ñ,© áəϮ¨ ÁóÕŸÉæêÖÉã&x¢7%<,f5¯àµ®ŽæÞTWð†ãÔ¡#¾¦,ñhiça½¡ÒTQ¼#š*+ç™ìrü¾Ç%0_yØhä #2¬Luƒ˜= pmêÓCƒþÑÖ»j°ó… `áN71Ëä`êàeÅÉuË‚Ø.àáš¹_ÂÃ8uÓá·XWáávíš8x8R`ªÕÔ¦Žkç-ÿHw»ºg¸A_®\'´¨ñÚK Lð[àafÒ¹Ô£ ¢sù‘d†õ|‚ý‘*+û˜Q{#ìg¬6SØ[ck[´˜ÑŠAx´<ƒŽJ¥œ»c+{ßç¶rù{¶+ÝÈ=®ì;†üàš¸ˆQüÈ W‚ày‘ô 0š([Yr⡎…N=}Šø#+@–ñ~„Xz­ä9– 1;`r"UÙTPWwyf„Ÿm»¼“:¼= û˜î¨÷¹²ß¯8,ðgS}¼¤ýKÚˆŸ“F`“Œ‚mBoÅËH¨Sž\ƒ^È3„—<ñ"Á> ñî‰;Šñ|8šïXòrû[é½YýÌϺζ(‰QÓ‹0TÉÃØ%¼ÁZ†0ߟÑ,Ö9‡nš`c7‘¾Ï$KvÔ“xx÷ÈýCÞüð “o9—hzqج©ïS9$”àáEßLë­½e[ÅP6½Ê›ûüÇï~9Ì·n[ÅWaÓ«¢Óýx>&x‡En‹£øy㫼Ùõçþ0•C‚Xî‘]ùà߇lÙ%_4ßoÉÄr|ˆð¶H³‡IÒÜOïSÙ?¸/¼a»¾Ük#½¡ìi$v»©®ÊGœövòàðŽðþAÊqà=ß|©Ú‘XÕÓExÅÞò`ðª]ØUxżµÉÎM”Nµ¿¸ï‚†ì OÜOn¾Ô oÝásí]‚‡öÛ0º¯îÚ™xWòàðÖtÞšë¡júsƒ>ùÝW¼9¼5ÙïåâÏ”Ò8Þo—¯p%«7 {yœä{ÂÓºgoý:M6Ô~ðj² ^CÄß¾ßÝ4Á3̯v·Õë”0ópÙžbú™ÐøŒû4°IÏO°#.w.›v{†‡XÀ{±„×°Dj€×\³ϱ és­,«LX“…V3Çá@Kz?x†ëϸ‚©Ñ<ò-ëxzgçY'0^qÇÞšKÎÁððë/àÙãÀëUð^T·x°x ë๰zsï”úNöÖy‚ÓãT*_ÐÃÔÁ“¬hfN|Ųn%×piu)°H•“.é6Lä÷o´„'ãúyÞÀ½ù =àɘäS! ˜RÝ Ç˜•Y‡˜MM¼è)ú|zêÙ™ñÿàÙˆ'ÏdßF¡÷šà}lŸè™ý¶ ¯TÃKÍ7_­°.àÅF®fö´õ x ÝE±PtŽ™j³ïYJʼÉe: ¯R·Ö{A ܯµ€€â©„ ÞÞýFráè#WÏiö³ Þ­!÷s½ oÈû/zИÞ9ÑXµ!Gz 8ùë¦L²§@4‚“«0 Â50¼‚4i#¼t€F™l€÷ÌFBÁ$oxT0™HôûìÄG£í¥–¸F¹™¸Qµß\,àñ5x”ùü²”Ðó*x,ÈÿvZËWáaÁ„_ˆ f¸vîG½óðy ¯ô÷•ô±SôK‡ÇX‚ ÇØ8x \çd$ctrÚlNv};Ÿæc€g.äW®DMû±gmÒò3nXI€Ï=T¡?€#Ì¥ …'Ÿ€w S8x¿þ²‚7~UÊx ó* òóÝ¢X° º[Wð¾’oª~†.xè¬÷j¯¼I:%xÃ)¹?4(¸ÄtÄ0ͱ~‹2†ª×p˜¥Ø3Üñæ)´ ÷‰?DxêÀ;Á •šuŸr*%Ááv ÐÓI/˜þÝ,¹–* f*ÔaútË.y&ÌÉÑàÅ%¼Ðª_ÿ_}‡%à6à)æàißÁ3ô°6[ÂIèà¡C ÁKkðféÄÁ£¼÷Mð0üoSÌÛ¯qnwÝ©ONâ£x KÒÑ„Â*¸"ù}úü@SbZÕûæ1y &þÞ£‚gaÒ}ÿúèᆵ¬"®w<¤ØÞõ²ç¼oþuÙóÒ¹i€wvJð_Ö¡óþ`¼ìL€bOÄx/ExEèªV¼L‡/Þ¯8_³ Èá>AGGxèf*Ç©˜!<0¬k’â„Á'sªú“?&E§ƒ•ïL/€1_C1lð/fé¦rLñí©~wÀKÑ„$x‹¼©ƒw½/,ŒH‚g1J]-à1‘¼G@ð®™ðÀŽÆÆ²ð[NðpsÏ| ¼4ž:xá <¬4Gx³žj¬«ˆð„ËdŽÎéÃÿ«×é‰á\é.µf%!†0ÀÃìГéÇ£=áµ^áàÉ™îTðbªhQt®WuÁ+g[øF™ {Y [\‹#< ^Bð"ÌwŽð0¬Þª¦ž7Exx^@>/vðÄõ‰å¯–ðpÒeÅÃãðë^àå èMK`á¯[êooе¬Òé;àQîV0=$šo xº„l“%¼; ]‡w‚aðž¤,T¸kÐÁ¡l†Ç|ŽÓaÂ`´ŸÄAß#¼¢Õá¹Õ/ /íâÔjððÃ_õºXâkžÓ 5nðæ8û`<`~Dx–)é«k‹±pÜ¡„Ø>úS«¢eVá½ä¯&ßèàýßTe«/‘ ð(ڽDZ‹†òñ5Ã;CxêS ™b×+áõX/ Wº"‹X$›.ÜQŒT(áÅp¯ù-ÆGY®ºðî÷¼}áyÉ C'ãaùƒž§6î'þX!¼sÓ©Á3ò†Ïž3Uä× T‡÷ïÉΫàu¼¿ ^¤©Û õ¶MOÂû9…í2ŒãÆdMáY¬dNž³óØ ¼„<8«i>£JcÐ?Ñ»[Üæð/GxJµmá×JÖ¿ ¼´øï}ŒAx‘,°…M¼‚EÙcæE0EûY½z±òmWŒâ Æßú.œðk<|¸0U2;jq„÷zïÂûšàá$¼Ū‰é¦ÏC :Î4¡CêÌÁ£x8k©Æ¥bÇbä7E •ð”ÄÔ#¯øcË0ž†ôs}eÅlŠÿ¦˜´ã7m8ÚQcOxu¹+×qÙ¶?V-tIõ Xã_À*ÕªÇ,iQÏ}Õi1XteÅé%Zôqðhm«lKžÂ(Yƒ‡ °ó2Ò¶4Á#<§ÕþŽUVB+Ñ„« 2Ujðð'Z °.þ‘M`eðpép ýáyžþÍ÷í 5G±óše™êwãÌ ÏÁQ˜µXvʲäº%»Æ`á;ç‰iëוtÏ`š;x=1ÃȈ¯)¹Âs‘Ã{àµåm|çàYï¯KxŽg\7Jï ¿B¸)^[¦c&ÕâßXUÂãOÁ|ûr ÿŠø5Õ²ÂT&;\×oM^¹´ƒ9“ÑN|Éå§>ëx¨7™Â ²DaÒå}˜rÐÇpÙ!x@R… xFä ðÀ´ ^¦Þ- "% IDAT _¼¾åßM ¼:L ÞË ¶X9xß»¥c †  ë nÛÍÿ%ãüϾ·õåU Žo]p']¸=0ÀÔxs'`x_|žñ¨ÅžQ›EذÁÐËDõ‚|L]ó|s‡=1=>߯>ß [hóKyCð°õëÊ짯#‹i™u.èf6ãêô³°\5^†y|°V=ÚùœiF í¬.¡´ùñx–gß|ý^ÿâº×k…_]÷ºíɧ­«Ýg…Ñ( ¡ÞXö‡·¯”ž3¬‚!G/,¬[Œ§„ȰW†0“€IÚÅ:Ÿ,cn…ö ÏxöÖéCpÛȰ“áäQ°Ïž]ßÉ·÷6r|x¥4?À]WZYPÖm4U˜Àúí°¾=PØOxc½ì?îpÂx_ðv-ßXÚ¬<ÓŽtrï ÞÛ ùûÖ>²¼Ýò»/{V廾/x%ßʽ;0¾r‹ì ¯fl5eÈÿpdÏ`óå1.V‡×`QU’,7g¿QBäMö4Üw&ßÞKö„/Û„·6¡ß«üÁÈyWlÈžð†î8䲸·‹ V5¼9rîwPö„Ç]C#jÞš5o¶á–NŠ É{?NÙžÑfxkOâæGÅKm´³ÜóÇ"ûÂs?€·a…æ ¿m®+,ÃvÄm¾GÙ^Åi/xCzξ^±øíÅæ…–±Kx ªÉ²:ü=)‚ÃàáZowÏk†Wé<³8Ãh󪵠„ ^q¶ÙžuxÞ2£ÅÊÚv%’þÿÛ<Ï[JÞöèΊ~¡Ý=¯yØV²oµ²’¤¡]Â3—gz]RT¬ÇKÓcÅW›àU¯¬m?Â{›!Z‡Å²ìOy}}.½_y!À›–eNu{x~ïzãLwÊõ?ß æàUµ/ Øù@ûÂóÔY NÍ#¸ŽºÅc×àÌNoVÖl;àéáéÍÉù:¼ùðÂu—§tÕ àµÙ¾QmNö¶¹ù/Î{-42r¦…¥€\ƒ™˜z6êzIH&ˆ_ÂÛúÔn Ï}~µ¦—¤Ëágð6O´ oùÞê~^ ž\‡7]…§efãÃ"úö…7/Ÿ[A»r85A ®½ÕáÙ…==÷“Þ§!fT.áeiuãU>j7<êµ x›Í¹½ÞªÔzÒ.xàÝ< ¼¼8­àr˜+ç]Hžéžàø4Jbº°‚§þø–…Ñ—}WYnIçT«¦ŒI\±úöƒ—¿¼põ½uxBÙáCõŽõÚù`˜R°zÀ²ÎIû±?5l ž”SŠ‚`'—}}ÀCïð¾3|1Ûx`Ÿó‚þPþ^°„W¸ rðÈ÷ž«ù^¾„'0\d Ö„ ÑQ”*O¦k¹[â_·B z™R˜ œå&= h¼°„×¢À©Æ×íæJú–é^7vÁÍ%<üŒ[ôâ¨Õ¢à’Ð[ðRYòc,àõ?¢ 1² ¿qðn*xw¼ÛüI–ðÐΛ˜ëná;x–çMðf<‰AG[ðõë Â/Ã<ex×Ác°5 KÎ<ÇÐÕ©×poŸtXȺÌ[…7±} sYÖC<™Ûì€åÙÑàmܰƒá½opYZ]o ˆ+cÊþ¯*Àý5x3Ë®‚, ØöæÎéýp®Ú‡y1€üB~‘‚žÌîˆ;¹G¾sÁhj>‡Ÿ/_ïô\~'ðŠƒK–œ†op„7ysx‡Ë»éyË›ˆ)$¬TÒ†÷FÞŠ…œïtÙÞ».oq¸mâÃÒã•ß™ì O#<±üûàà]šÍ;ʼWö¶ñJàGå®z”ØÁWÞ ^e¸í¨7ºkaý±KÞ}…ªÖà•n ÷ë¹SWÖæ4'A€W—½àÙMxîAèò÷òvðvè¼åª¬zôîài±v ;Ýr àÁ‚è+oo‡,áUÞĘò¶‚¬þ^„þ'´ó¡äÃ+»”¨„ÏÑrÚu\*EÏÛ^Gý¿îÕ¤£Ê‡ o¹õ¾{Â.á½>º'¼¾ÛÍ™Uño ¯ŒbµƒÞ+Ržoo‘ò}ÇqµEKÖv?7ê”h[í¯`±ö”ð™Í>•6{NûEðªhíHê°¼e¤ÚÛÁÛudí}VfÞ®ÁKXÐs‡Ôám¯¸iZRZ|â¼/3&rf¼äše2ÉŸa´…¦Iw¹ýº ïßIj´¨ûÝÀ{]‹G/D†¶ô¿S´‡¿³¾Sö„'ƒ\÷DròoC@ųË0Pw*“ñvò˜¼)i—;a,+<{ØqJœp‹±‚÷KéZ_;7½EÊà!áÝÖ†-†«8Yj#ðµ´:x?Ùžƒ)ÀCïËÍ´ïn5–´Á„¥éT `ˆ àŒEšuO|}Ž.O´á=/­€ÇÑ÷éùòÜôEpûöáÕ¿Muþ:< Yx x1y5‰þâZƘ_z~k*xq®Ñu#/ ñsõé\‡llOA…Ì3sÙ;óãW¬m òh9ðÂÅ 7áKz´HS滂§š¥O><ô*"x„çR]§·¯#Ë U!·¬”|9cu17ÒÏ t?¼ÕºÛ ÅܸçùA…>õ‹3þO|¬ZŠÒ=à6‚T6¦ .`ܦǂW7šá¹´$oZPÏ3¡ƒ§ xíâÆyáqìy!f™V×/PFð%¥ASÎ)¯)FùÝaa?5= kß±ê˜8¾„÷”ë§Ø&8Ý $>£ËÍ8ŒBâsžç¯Ê¯í^Ü^¾°¶ÀÛ7ã`x)÷ÀoÓ™âðš+n¢è){/¤Ê@äÈ?5/×dž!¿ƒ‰µÀéGÂäŒå*pˆR5‹¡”ÔwátO8ù¸`A<hÏœ}ÊØo.0¼BUŽ%zñÄ}åiFýáç{ƒ‡†!xù ¾ÀCϧÙ¼;Œ2B’›¹î†e›<ü[`¢y€‡³m OPAµ‹Šø§b˜*Ó ²†Bnyš%0æ™E<è¯ kÅØ›'pðÔe]€‡w¿„§?u†‹"xÊÇ ïb 0®Ftž«¹@g~)ãTQ—p£9q SS€†ÂãéÔ ÷t %Àˆëó8;“Ó©ú¬ÝQèë®ó£ßgçè®0o¡MeíÇä·že=ÿ&˜(ޝ4U¦F¢¡X^Ö…a‹+ò^F.Üf³vO³ŸÌä‚ùXWá¡ä&¼)Âþ9!xº·ž›û¡¿b´tLV°–XˆrH¿|¢zr2×O.Ñ¿kúy C€`0 LW2*oeÄ h‰D­Î'>‘¦IƒÖÛÀsÞ—îKj13¯@M]Â#ÿw,ý¦L¯`èðþ;ü¤¶C9ªm£ò+°êV³T =·7›ãúZe8‰1N?<:xèü<ÂS1…½Øœ_‡ëÛ.Ö– £¼ôz Ætä1vHÒ´E<¥¨«£À£ÆÔYk”~àM €÷[¬wZ£¸†‘ x6ù[Z:ÇÞÁ]g80紮؄ç¾ 1ðL¼Ù«^ŽŸÊ§ð‡_ ×R Oá4hžF‡Z„G1xLŸ#R0\ö&,n³!L.œàâœ"åŽf½ÜÁÖÅÒH„Ç#g`Ì <¡¢.àÍôØÒ¹ƒw 𔤞·ÞßÂ/ƒ˜àšàµà&pðÆßíWrOH„×#xC~ðž‹ÄžG-”ð§á“Ðx†ð ÉG‚W<ñ”2|lZ¸scõ¿¼èJþw/v³i Ó=`Pè#È73ϰèe^ÁËoiJpoÂþJ [›á°5?j‚ƒàµq+á±®›õkðrÓãy!ÐXG½Xƒ7.õPW¢gmí%ã<›âW÷–?ž…µ¾§|vEÞ—†q¦9ÌOFË­0Ê 8‚‡=*¹Fqe/vUvkkðÈT¹¥oº„GÅã8–AxÅ÷›à©kÏ'xú áñ ùXåºË<€Çl²ÏnÀ8xX#Å0ãÁK'€ðà晀ߊ0c0Ÿ·îéVóJìÐÂÜÅ!·´dƒŽýŠÊÁ6¹Åpœ×Iç9xTƒÉ•S$x_<ý0æ冞ñ{›<ìy˜àøðÈÐ=ÆhØ€W0Bo×$hWSVžÅÚIÙ)3Îé?:ÃZ+ÉY‹EMÚI&ÿ5£Š3°ªÍz|g=½€ó6¿c0ƒ÷râ ¢†¸÷ƒqòŒäux/^xÃçLJ‡Åë܇?l>Bï½»–Êiùë !CÓ·ßoªÑ“üÉ/º ]hó§<Û©å'øEu‚Œvš2fLõ2Ph¢Þ Öô¤Pr9DzÏ`EÀòºð`™ýÚ­0nÞ¯Á6@ÓuÇW9Ôsš¼/iƒdËCfîŸg ¼Um¾¤…êœ{ÑíB›LdçkW!¼äÜcÒÁ“.ýÌ˸ú?ž¾î™”Ã¥è8É=ƒ%Øpˆ¬åÖ¶#„'obÔ‡¤y¹çwvõ Dó›†ïï÷P‡·5F´ë,†j.–ÃôÿvýˆnŸb"Ÿ$\ûÕ• =ŒåXŒÔèiï¬ë%øð4ñUë\ümVœŠ¾…›1JAÉýW~x;Î(ö>´o›¦Êý/=*âä”W%Îñóâ%êi¼«ƒ¯&ƒÿYè/*áÉ(ü¥TCuÎ$ =óv¸ºÞR‡·m° 4*"¼É–¡1jxæ$Mx1$'ÝS¨Ø‹pÇ^òû„§ë¡]³-=÷?¡t?¦8ǯaNrr@Ô㻆göI@‰ƒjÃ>ÙíðdÃk£mgÜž,…ä½Û}ä€X *»0EMžºÙ-ŽÀ£mg< ¼õ€áç÷Ÿô=I•(ÜŒ›57D¹íŒØyÛá­Õ[,m¼Õa˜¢€T³Û”ÿ~»[ú6E\Ê~ðÖ‡€£V¤‰òÅEäÒŽª°ïHF{Yl}g‡"{x‹¼öîGep,à•ƒ¼ì®hüMÞÞ"A¶ó¬à-²Viwô:¼µÐ•µc?y+xî‡(_vð^.ü–Ê- M]èderÞÀzµ¾w9¼J¼Y<úm-tE×ÏIðõ§~ïòððБÐý&êG߬ƭ¥‹ö‘$¼êMàMWu^%Þä]À[Ù|x3Ò›ÀKwÁ ëzx¦UßR xÛâ/3Ùd–;ï-¸µ‡ì ¯í%YXY;R^{·”n‚7ô¼ò7Q?úmà9/˜JÊmôæC3©?ß|ÕMü‘•‹?&*(IH]_öÊ«r?¼Dj/;ó½*¯}ð’®Äi@÷•ðß`Ox÷€§VŠhÜ ÏÈyÃf—›»2ËÝngQƒwÍz”z§¯]i)ö¶\‹¹R=t«eâçž=…«ÅÑ%;yÂuá<©Ÿ…±Á’ã¦â¹–ðÊo&ê§|xùŠÓæ½Å®ð©nÃ÷܂M«" ÌúªjÒŽ${ÂëH…ù­5¦Nƒ³öU,ã¬h=9áùt‚šf­ ébe€ ¬³`‹KQ0«.h” ’õSò·€7Þ„·MŒœníy¯ül¶.Ð0t&îÕé±àµCòÔtC~ƒßq Éû2V…ô9Osª£[˜T; G ,ŸP< 3Fõ€pëNh4ã8EïÂÀ´eÍÖ9^º²|Þ¯é¤<»€Wm>ihÓ±á]Z¯ãàÅ xaÀùdLµs´äÉ«]¡W{€‡¥ VôïSÂ^‘§úiïÊj§Y÷‚#Ru)P¦Ö³Iºçƒ·ÁJIª7†§ŸU5xƒ£Ã»À>žšv‡¿pðºèMk€gy<âÆº08x2ž£W;O¡gÆäG1§øŠÉ^>®àŒÊþ©žž`¦àÔ0}žœïµÈ¬,OŽÐóÔâI=»92<ô•åQÔi#ïÚÁë‚2ãñ´tPZÀ›8¯v„‡j´¶!?ù¹22IòûÆVð‹á^ 4ÕÝ÷w;c’ÄVwÎ…ÉÐ^SVÍ7“,d_xÕ¶'¦o¾ ¼íº á±ÎùdTÂCÑ ž‹AÞ€'Ñ­ÕÁ›R|ÅáSÚäåFL©á…ÞÀ˜h{@Žg»%°ú‚ “*HžI•„*È:Ÿ…š«+8·ÎŒPâ…z‰Å ö§Oê5ÌF£ãÂ+Î$:Þ[{žÊ:Íxm‹éÔU]ÊÓ¬ó‰—ÀÏä)œ;I.yÖò“@†Ü±J0—sbÚÓ XÚ á½’äá"gðÚVXðØðÎ…ƒ÷/§¼ÐVðøÐ:;¯½ÚžÍZ«ðî°',à¹þktîÂúh)¦¨Þ^‡cúɦxզȡ`¦¹FVÙ™¨0ùà…ÕÇãê‹âIû‘WtlSÐQ3®È¬Ÿ)_a̼ x‰ãÀë <¿7 ëðŠbÏãV;x“<êy–µD ˜îI½*ëðäþðг6ž£óscÖäXuðç‰$oŸ4€ŒÓy}Ø‚–ÍA;HT²hý)ÃçZ ´‘7i_},àŠ|2MŽõ>Âëã^{:[Àû‹íó±­ë¼p2¦Á}_ƒW°:<‡x¢õï,LM'<^Œñ Ð2A!–0æ1b%Ä4ÒœàMâx0ƒßT}iîVšŠcrï 0ÆÀÂ$‡K€4MÕ‘†­ 4“UÂëÊW8ëù°lx£ùÞ‹fìÌSÌÁËÀšíð~‰!ζãÛø6£åYªÂ¸„GFnJxn^åÅôXðz<üò xø³‚F…K IDAT× #A¯×á T /(‡mì6¸ÄÚF^Û’F˜¥â8=–Ÿ{Æ·3\ªsÌk/Àt¶Cíë S„×ãDÆ(‚J–ÖÕpyÖ.W¦¯í¢.jðà­ý ^X.>…Y˜½{ÜéšÏ¡ÛkÚ?'–êERýÅægṮR9âE¾jóTqŒ73ßÇó žkñ² od¶½-Ž]+¼ÙüuñÚâ'ßCY¾‹&)K…N9uÑàeï‚ë ¼r%ÕÁûÀg~œ‰ga^âá>TâacZáÑGØâÅ«i±‡‡CÔ©†*PuõÅ)>lðÂo>{]¼Móè™·§\Æ ýóñF7ÁÍF6ë³ð°3,pö½šÐÕ(¸óÐÊvƒ·ªÛ¼ âç„÷©:Åèi*Ö ’‹z†aÊl;x°ÅË_¯-pþe?§²€| ë³~Ž¿PÅ r¿×iN­PcJ=¼Q³{ÏJ<º€L¯çåB]ŸKãÄ›CSNϦ¾Æ‹#ÂËh PãE4”_G/5={þ»Ï¿ìçÉœ|kõÁëÆÅ”ÃÞ=L/t¥JˆTzIâ¥WjŒxÑ¢D¥{Rá¬rJ ™÷ÕÜv~_âáXjJMtñú.Þô­¯Š×Ž,žyå¹9ï àÀ{¯Ò?žSž¥:*Øž^†YÓ=©ÕÍž‡O ðG3e8¤«T®«l9D£+]^Ž ´-T2_Ï]üªxgþ[Ï­SŸ—ªúLWš ÃØ+lR霧£fÁÐÇuðChCZÅá^[—`Ûà'Bºš•ðFåMi°_{Ý¡Ê çüj…Þžj=HÓuÿa«3Å_€îÀR-ÄÿÏÿõŸŽÝAzý—¨Â[Ò—±ÕÁÇèmãü ÿŸû§÷¼çðž¾YÜþ_ämãüvõÍlÏÈi¼ºëêhú†wðïxæÍžéüJÝuu´gáíû|澑o ïüàŒ>Õ_©׎àãý’·˜}…üßÝõi¼:-@sé‹]{ó¶zÛLG `ë —Î¹^ð¬ô¯#¾:$ïMDð¯ÜzƒxŸg@Õ |ªŠ<—x.ßÅ›gTûÛß\UÄóU¬Á¯&9PéÛÅ.^âûßæE»x)ŠÉÞ‡xªûèýQάÖTý÷<¡7TÇÔ¬šmUÿñhl`å̆>–xs£ñíoÛKÔxÉ£/¨°õÝ’ð(ðMŠñœiêàa¡\ÜõŠ=™<Øâáa›íâMoz“²dK*7Eœ`Ÿ<ÁGM‰?øðÒxÏüg/ì>l[þÇÒ ÎÁü®Á£'ªÐªü8Æ!óçzS7€(‹»^±Gx™ÚÃûoÙæÁ‚¾…Æ…ʬ9Ä[Ýa—Ìë g ÕRS îŸÂo¹m¶AÄ]¯Ø#<¹ÄD¹Çÿ¨ñªÃ^«iê®vÆyŠðò5vɪ%ƒ„ E"Þ>”æëd^ÆG/½Â󡻆•%¼ëOi÷‹jœç~£F Z<§ Ï.½†[Â=Ùâ ñ³ÝÖØ¡9z9è \«œðø)þÎÚÝÓ:0á*ûX„-^F‡78ÃCä‚rÁ.¡éF’àdñþf¶ÛšÕýú„7vCXMj<}e¢È<ú/¯k‹R°qÃyx]„^ xéöç^ç ö oæ<¬tuØ.5θç-j<„·Áÿa‹7.ñ,}¥ÅÃn¤]žB¼Þ¯$Cî ª³Žx,/oe±Í£¡áÑÈ·)XXãáÀ$¦ZèI]Öq‹‡s”}¼î…¾>ámÔxñ¼Q9uÔÒ¢A‰7Û¶x8¦IÛ>MÚµ=[÷'Gé'Àò¡)>MQ˾µ Â-ž‹íœÔ)oñîÓ#ýÁóûx?4xÕ8’N<_áO‰GC•ûBïãMŽ^ŽÒ#<³‡7kðª5ùj§ÓlñŠXí å §gÓ{ØÅÛœªêÚ'¼ÜÁºÆûRâåv;·ÅV«¬4y/yØÃËáølQ™þàñ¼Å[/WÞrA‡j¡«Þ¢mº¶xˆ—Ãç Ï•«*ê÷ÒoµÓKï¥GxzêÌr^õ¶ËåÊ5·pKK›„§ª.£IçãûÂ( ·ž7Þ$t.ÙÁ[@÷ŠTŸðEjL3-k’éÊÆ8Ã€Û O¼ªz½ÝÚÒÑhK #include "allheaders.h" static void GetImageMask(PIX *pixs, l_int32 res, BOXA **pboxa, const char *debugfile); static PIX * QuantizeNonImageRegion(PIX *pixs, PIX *pixm, l_int32 levels); int main(int argc, char **argv) { char buffer[512]; char *tempfile1, *tempfile2; l_uint8 *data; l_int32 i, j, w, h, seq, ret, same; size_t nbytes; const char *title; BOX *box; BOXA *boxa1, *boxa2; L_BYTEA *ba; L_PDF_DATA *lpd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIX *pixs, *pixt, *pixg, *pixgc, *pixc; static char mainName[] = "pdfiotest"; if (argc != 1) return ERROR_INT("syntax: pdfiotest", mainName, 1); l_pdfSetDateAndVersion(0); #if 1 /* --------------- Single image tests ------------------- */ fprintf(stderr, "\n*** Writing single images as pdf files\n"); convertToPdf("weasel2.4c.png", L_FLATE_ENCODE, 0, "/tmp/pdffile01.pdf", 0, 0, 72, "weasel2.4c.png", NULL, 0); convertToPdf("test24.jpg", L_JPEG_ENCODE, 0, "/tmp/pdffile02.pdf", 0, 0, 72, "test24.jpg", NULL, 0); convertToPdf("feyn.tif", L_G4_ENCODE, 0, "/tmp/pdffile03.pdf", 0, 0, 300, "feyn.tif", NULL, 0); pixs = pixRead("feyn.tif"); pixConvertToPdf(pixs, L_G4_ENCODE, 0, "/tmp/pdffile04.pdf", 0, 0, 300, "feyn.tif", NULL, 0); pixDestroy(&pixs); pixs = pixRead("test24.jpg"); pixConvertToPdf(pixs, L_JPEG_ENCODE, 5, "/tmp/pdffile05.pdf", 0, 0, 72, "test24.jpg", NULL, 0); pixDestroy(&pixs); pixs = pixRead("feyn.tif"); pixt = pixScaleToGray2(pixs); pixWrite("/tmp/feyn8.png", pixt, IFF_PNG); convertToPdf("/tmp/feyn8.png", L_JPEG_ENCODE, 0, "/tmp/pdffile06.pdf", 0, 0, 150, "feyn8.png", NULL, 0); pixDestroy(&pixs); pixDestroy(&pixt); convertToPdf("weasel4.16g.png", L_FLATE_ENCODE, 0, "/tmp/pdffile07.pdf", 0, 0, 30, "weasel4.16g.png", NULL, 0); pixs = pixRead("test24.jpg"); pixg = pixConvertTo8(pixs, 0); box = boxCreate(100, 100, 100, 100); pixc = pixClipRectangle(pixs, box, NULL); pixgc = pixClipRectangle(pixg, box, NULL); pixWrite("/tmp/pix32.jpg", pixc, IFF_JFIF_JPEG); pixWrite("/tmp/pix8.jpg", pixgc, IFF_JFIF_JPEG); convertToPdf("/tmp/pix32.jpg", L_FLATE_ENCODE, 0, "/tmp/pdffile08.pdf", 0, 0, 72, "pix32.jpg", NULL, 0); convertToPdf("/tmp/pix8.jpg", L_FLATE_ENCODE, 0, "/tmp/pdffile09.pdf", 0, 0, 72, "pix8.jpg", NULL, 0); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixc); pixDestroy(&pixgc); boxDestroy(&box); #endif #if 1 /* --------------- Multiple image tests ------------------- */ fprintf(stderr, "\n*** Writing multiple images as single page pdf files\n"); pix1 = pixRead("feyn-fract.tif"); pix2 = pixRead("weasel8.240c.png"); /* l_pdfSetDateAndVersion(0); */ /* First, write the 1 bpp image through the mask onto the weasels */ for (i = 0; i < 5; i++) { for (j = 0; j < 10; j++) { seq = (i == 0 && j == 0) ? L_FIRST_IMAGE : L_NEXT_IMAGE; title = (i == 0 && j == 0) ? "feyn-fract.tif" : NULL; pixConvertToPdf(pix2, L_FLATE_ENCODE, 0, NULL, 100 * j, 100 * i, 70, title, &lpd, seq); } } pixConvertToPdf(pix1, L_G4_ENCODE, 0, "/tmp/pdffile10.pdf", 0, 0, 80, NULL, &lpd, L_LAST_IMAGE); /* Now, write the 1 bpp image over the weasels */ l_pdfSetG4ImageMask(0); for (i = 0; i < 5; i++) { for (j = 0; j < 10; j++) { seq = (i == 0 && j == 0) ? L_FIRST_IMAGE : L_NEXT_IMAGE; title = (i == 0 && j == 0) ? "feyn-fract.tif" : NULL; pixConvertToPdf(pix2, L_FLATE_ENCODE, 0, NULL, 100 * j, 100 * i, 70, title, &lpd, seq); } } pixConvertToPdf(pix1, L_G4_ENCODE, 0, "/tmp/pdffile11.pdf", 0, 0, 80, NULL, &lpd, L_LAST_IMAGE); l_pdfSetG4ImageMask(1); pixDestroy(&pix1); pixDestroy(&pix2); #endif #if 1 /* -------- pdf convert segmented with no image regions -------- */ fprintf(stderr, "\n*** Writing segmented images without image regions\n"); pix1 = pixRead("rabi.png"); pix2 = pixScaleToGray2(pix1); pixWrite("/tmp/rabi8.jpg", pix2, IFF_JFIF_JPEG); pix3 = pixThresholdTo4bpp(pix2, 16, 1); pixWrite("/tmp/rabi4.png", pix3, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* 1 bpp input */ convertToPdfSegmented("rabi.png", 300, L_G4_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile12.pdf"); convertToPdfSegmented("rabi.png", 300, L_JPEG_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile13.pdf"); convertToPdfSegmented("rabi.png", 300, L_FLATE_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile14.pdf"); /* 8 bpp input, no cmap */ convertToPdfSegmented("/tmp/rabi8.jpg", 150, L_G4_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile15.pdf"); convertToPdfSegmented("/tmp/rabi8.jpg", 150, L_JPEG_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile16.pdf"); convertToPdfSegmented("/tmp/rabi8.jpg", 150, L_FLATE_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile17.pdf"); /* 4 bpp input, cmap */ convertToPdfSegmented("/tmp/rabi4.png", 150, L_G4_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile18.pdf"); convertToPdfSegmented("/tmp/rabi4.png", 150, L_JPEG_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile19.pdf"); convertToPdfSegmented("/tmp/rabi4.png", 150, L_FLATE_ENCODE, 128, NULL, 0, 0, NULL, "/tmp/pdffile20.pdf"); #endif #if 1 /* ---------- pdf convert segmented with image regions ---------- */ fprintf(stderr, "\n*** Writing segmented images with image regions\n"); /* Get the image region(s) for rabi.png. There are two * small bogus regions at the top, but we'll keep them for * the demonstration. */ pix1 = pixRead("rabi.png"); pixSetResolution(pix1, 300, 300); pixGetDimensions(pix1, &w, &h, NULL); pix2 = pixGenHalftoneMask(pix1, NULL, NULL, 0); pix3 = pixMorphSequence(pix2, "c20.1 + c1.20", 0); boxa1 = pixConnComp(pix3, NULL, 8); boxa2 = boxaTransform(boxa1, 0, 0, 0.5, 0.5); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* 1 bpp input */ convertToPdfSegmented("rabi.png", 300, L_G4_ENCODE, 128, boxa1, 0, 0.25, NULL, "/tmp/pdffile21.pdf"); convertToPdfSegmented("rabi.png", 300, L_JPEG_ENCODE, 128, boxa1, 0, 0.25, NULL, "/tmp/pdffile22.pdf"); convertToPdfSegmented("rabi.png", 300, L_FLATE_ENCODE, 128, boxa1, 0, 0.25, NULL, "/tmp/pdffile23.pdf"); /* 8 bpp input, no cmap */ convertToPdfSegmented("/tmp/rabi8.jpg", 150, L_G4_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/pdffile24.pdf"); convertToPdfSegmented("/tmp/rabi8.jpg", 150, L_JPEG_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/pdffile25.pdf"); convertToPdfSegmented("/tmp/rabi8.jpg", 150, L_FLATE_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/pdffile26.pdf"); /* 4 bpp input, cmap */ convertToPdfSegmented("/tmp/rabi4.png", 150, L_G4_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/pdffile27.pdf"); convertToPdfSegmented("/tmp/rabi4.png", 150, L_JPEG_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/pdffile28.pdf"); convertToPdfSegmented("/tmp/rabi4.png", 150, L_FLATE_ENCODE, 128, boxa2, 0, 0.5, NULL, "/tmp/pdffile29.pdf"); /* 4 bpp input, cmap, data output */ data = NULL; convertToPdfDataSegmented("/tmp/rabi4.png", 150, L_G4_ENCODE, 128, boxa2, 0, 0.5, NULL, &data, &nbytes); l_binaryWrite("/tmp/pdffile30.pdf", "w", data, nbytes); lept_free(data); convertToPdfDataSegmented("/tmp/rabi4.png", 150, L_JPEG_ENCODE, 128, boxa2, 0, 0.5, NULL, &data, &nbytes); l_binaryWrite("/tmp/pdffile31.pdf", "w", data, nbytes); lept_free(data); convertToPdfDataSegmented("/tmp/rabi4.png", 150, L_FLATE_ENCODE, 128, boxa2, 0, 0.5, NULL, &data, &nbytes); l_binaryWrite("/tmp/pdffile32.pdf", "w", data, nbytes); lept_free(data); boxaDestroy(&boxa1); boxaDestroy(&boxa2); #endif #if 1 /* -------- pdf convert segmented from color image -------- */ fprintf(stderr, "\n*** Writing color segmented images\n"); pix1 = pixRead("candelabrum-11.jpg"); pix2 = pixScale(pix1, 3.0, 3.0); pixWrite("/tmp/candelabrum3.jpg", pix2, IFF_JFIF_JPEG); GetImageMask(pix2, 200, &boxa1, "/tmp/seg1.jpg"); convertToPdfSegmented("/tmp/candelabrum3.jpg", 200, L_G4_ENCODE, 100, boxa1, 0, 0.25, NULL, "/tmp/pdffile33.pdf"); convertToPdfSegmented("/tmp/candelabrum3.jpg", 200, L_JPEG_ENCODE, 100, boxa1, 0, 0.25, NULL, "/tmp/pdffile34.pdf"); convertToPdfSegmented("/tmp/candelabrum3.jpg", 200, L_FLATE_ENCODE, 100, boxa1, 0, 0.25, NULL, "/tmp/pdffile35.pdf"); pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); pix1 = pixRead("lion-page.00016.jpg"); pix2 = pixScale(pix1, 3.0, 3.0); pixWrite("/tmp/lion16.jpg", pix2, IFF_JFIF_JPEG); pix3 = pixRead("lion-mask.00016.tif"); boxa1 = pixConnComp(pix3, NULL, 8); boxa2 = boxaTransform(boxa1, 0, 0, 3.0, 3.0); convertToPdfSegmented("/tmp/lion16.jpg", 200, L_G4_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/pdffile36.pdf"); convertToPdfSegmented("/tmp/lion16.jpg", 200, L_JPEG_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/pdffile37.pdf"); convertToPdfSegmented("/tmp/lion16.jpg", 200, L_FLATE_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/pdffile38.pdf"); /* Quantize the non-image part and flate encode. * This is useful because it results in a smaller file than * when you flate-encode the un-quantized non-image regions. */ pix4 = pixScale(pix3, 3.0, 3.0); /* higher res mask, for combining */ pix5 = QuantizeNonImageRegion(pix2, pix4, 12); pixWrite("/tmp/lion16-quant.png", pix5, IFF_PNG); convertToPdfSegmented("/tmp/lion16-quant.png", 200, L_FLATE_ENCODE, 190, boxa2, 0, 0.5, NULL, "/tmp/pdffile39.pdf"); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); boxaDestroy(&boxa1); boxaDestroy(&boxa2); #endif #if 1 /* ------------------ Test multipage pdf generation ----------------- */ fprintf(stderr, "\n*** Writing multipage pdfs from single page pdfs\n"); /* Generate a multi-page pdf from all these files */ startTimer(); concatenatePdf("/tmp", "pdffile", "/tmp/cat_lept.pdf"); fprintf(stderr, "All files have been concatenated: /tmp/cat_lept.pdf\n" "Concatenation time: %7.3f\n", stopTimer()); #endif #if 1 /* -------------------- Test corruption recovery ------------------- */ /* Put two good pdf files in a directory */ lept_mkdir("good"); lept_cp("testfile1.pdf", "/tmp/good"); lept_cp("testfile2.pdf", "/tmp/good"); concatenatePdf("/tmp/good", "file", "/tmp/good.pdf"); /* Make a version with the pdf id removed, so that it is not * recognized as a pdf */ ba = l_byteaInitFromFile("testfile2.pdf"); data = l_byteaGetData(ba, &nbytes); l_binaryWrite("testfile0.notpdf.pdf", "w", data + 10, nbytes - 10); /* Make a version with a corrupted trailer */ if (data) data[2297] = '2'; /* munge trailer object 6: change 458 --> 428 */ l_binaryWrite("testfile2.bad.pdf", "w", data, nbytes); /* Put these two bad files, along with a good file, in a directory */ lept_mkdir("bad"); lept_mv("testfile0.notpdf.pdf", "/tmp/bad"); lept_cp("testfile1.pdf", "/tmp/bad"); lept_mv("testfile2.bad.pdf", "/tmp/bad"); l_byteaDestroy(&ba); /* Run concat on the bad files. In the /tmp/bad/ directory, * the "not pdf" file should be ignored, and the corrupted pdf * file should be properly parsed, so the resulting * concatenated files should be identical. */ fprintf(stderr, "\nWe attempt to build from the bad directory\n"); concatenatePdf("/tmp/bad", "file", "/tmp/bad.pdf"); filesAreIdentical("/tmp/good.pdf", "/tmp/bad.pdf", &same); if (same) fprintf(stderr, "Fixed: files are the same\n" "Attempt succeeded\n\n"); else fprintf(stderr, "Busted: files are different\n"); /* pdftk fails because the first file is not a pdf */ fprintf(stderr, "pdftk attempts to build from the bad directory\n"); tempfile1 = genPathname("/tmp/bad", "*.pdf"); tempfile2 = genPathname("/tmp", "pdftk.bad.pdf"); snprintf(buffer, sizeof(buffer), "pdftk %s output %s", tempfile1, tempfile2); ret = system(buffer); lept_free(tempfile1); lept_free(tempfile2); fprintf(stderr, "Attempt failed\n\n"); #endif #if 1 fprintf(stderr, "\n*** pdftk writes multipage pdfs from images\n"); tempfile1 = genPathname("/tmp", "pdffile*.pdf"); tempfile2 = genPathname("/tmp", "cat_pdftk.pdf"); snprintf(buffer, sizeof(buffer), "pdftk %s output %s", tempfile1, tempfile2); ret = system(buffer); lept_free(tempfile1); lept_free(tempfile2); #endif #if 1 /* -- Test simple interface for generating multi-page pdf from images -- */ fprintf(stderr, "\n*** Writing multipage pdfs from images\n"); /* Put four image files in a directory. They will be encoded thus: * file1.png: flate (8 bpp, only 10 colors) * file2.jpg: dct (8 bpp, 256 colors because of the jpeg encoding) * file3.tif: g4 (1 bpp) * file4.jpg: dct (32 bpp) */ lept_mkdir("image"); pix1 = pixRead("feyn.tif"); pix2 = pixRead("rabi.png"); pix3 = pixScaleToGray3(pix1); pix4 = pixScaleToGray3(pix2); pix5 = pixScale(pix1, 0.33, 0.33); pix6 = pixRead("test24.jpg"); pixWrite("/tmp/image/file1.png", pix3, IFF_PNG); /* 10 colors */ pixWrite("/tmp/image/file2.jpg", pix4, IFF_JFIF_JPEG); /* 256 colors */ pixWrite("/tmp/image/file3.tif", pix5, IFF_TIFF_G4); pixWrite("/tmp/image/file4.jpg", pix6, IFF_JFIF_JPEG); startTimer(); convertFilesToPdf("/tmp/image", "file", 100, 0.8, 0, 75, "4 file test", "/tmp/fourimages.pdf"); fprintf(stderr, "4-page pdf generated: /tmp/fourimages.pdf\n" "Time: %7.3f\n", stopTimer()); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); #endif return 0; } static void GetImageMask(PIX *pixs, l_int32 res, BOXA **pboxa, const char *debugfile) { PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixa; pixSetResolution(pixs, 200, 200); pix1 = pixConvertTo1(pixs, 100); pix2 = pixGenHalftoneMask(pix1, NULL, NULL, 0); pix3 = pixMorphSequence(pix2, "c20.1 + c1.20", 0); *pboxa = pixConnComp(pix3, NULL, 8); if (debugfile) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_COPY); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pix4 = pixaDisplayTiledInRows(pixa, 32, 1800, 0.25, 0, 25, 2); pixWrite(debugfile, pix4, IFF_JFIF_JPEG); pixDisplay(pix4, 100, 100); pixDestroy(&pix4); pixaDestroy(&pixa); } else { pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } return; } static PIX * QuantizeNonImageRegion(PIX *pixs, PIX *pixm, l_int32 levels) { PIX *pix1, *pix2, *pixd; pix1 = pixConvertTo8(pixs, 0); pix2 = pixThresholdOn8bpp(pix1, levels, 1); pixd = pixConvertTo32(pix2); /* save in rgb */ pixCombineMasked(pixd, pixs, pixm); /* rgb result */ pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } leptonica-1.70/prog/contrasttest.c0000640000175000017500000000640612242266750015365 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * contrasttest.c * */ #include #include "allheaders.h" #define NPLOTS 5 int main(int argc, char **argv) { char *filein, *fileout; char bigbuf[512]; l_int32 iplot; l_float32 factor; /* scaled width of atan curve */ l_float32 fact[NPLOTS] = {.2, 0.4, 0.6, 0.8, 1.0}; GPLOT *gplot; NUMA *na, *nax; PIX *pixs, *pixd; static char mainName[] = "contrasttest"; if (argc != 4) return ERROR_INT(" Syntax: contrasttest filein factor fileout", mainName, 1); filein = argv[1]; factor = atof(argv[2]); fileout = argv[3]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); #if 0 startTimer(); pixContrastTRC(pixs, pixs, factor); fprintf(stderr, "Time for contrast: %7.3f sec\n", stopTimer()); pixWrite(fileout, pixs, IFF_JFIF_JPEG); pixDestroy(&pixs); #endif #if 0 startTimer(); pixd = pixContrastTRC(NULL, pixs, factor); fprintf(stderr, "Time for contrast: %7.3f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); #endif na = numaContrastTRC(factor); gplotSimple1(na, GPLOT_X11, "junkroot", "contrast trc"); numaDestroy(&na); #if 1 /* plot contrast TRC maps */ nax = numaMakeSequence(0.0, 1.0, 256); gplot = gplotCreate("junkmap", GPLOT_X11, "Atan mapping function for contrast enhancement", "value in", "value out"); for (iplot = 0; iplot < NPLOTS; iplot++) { na = numaContrastTRC(fact[iplot]); sprintf(bigbuf, "factor = %3.1f", fact[iplot]); gplotAddPlot(gplot, nax, na, GPLOT_LINES, bigbuf); numaDestroy(&na); } gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); #endif return 0; } leptonica-1.70/prog/chars-18.tif0000444000175000017500000001066212226572724014522 0ustar dandanII*ô& &ŸÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈd¥îC$5\†w ¶<âAÁJN² —ÛĈp*MVHiЂ³l¡ ª7‚–C=UÅÌ¡ÉáH3á x xA…I¸:0 ‚0An& x]B'³¤$ÚjaPi… K  õ¬†jto]&úñ0¡iaÑá†òᕤŒ7­izTl*iøAR6‚ ïÒ8ÌIôƒ¤“wÕ6 ¨Ì«h-'A7×¥†–Ò ôéÒ¤àŒüø®oÐT“i?®‚ß~ž–Ó][Apƒpf3`ß¾ßúýZKé7uUÂéé´atª’´¯õK×ý/ ê­ÂéÒÒÒ߯ßÒê’l7DAê±öý/I-uÿÒÿÿ[ Q~«z^õéi}_õÿ¥ªTᎷþµô¿ÿÿÿú¥·_÷]/­/Wõ×ý-%¬) K¥úÿõû¯ÿñþַ̯ñ¤½--{òâžô–’K`ìuïKñî¿ÿµúKÂW×ú_¤•¯îC*ÿôœ$§¯]ÿKún¿¤{¥Å Ý_Kô—äsIm/õ Ñd%ßt”/k×õ¤¼=&A_ö½í¯^Âo¯é$¼R9ì4µÿÛÛI&ˆ5¿¯ú_ðƒIŠoú¥Ô1 L…÷ÿ¤ %ݵ¯¿±>¡$Iþ¿È5éóãªtÿë¦B%5î _ÒƒK‚ é¨a¶¾×°ÒGñëúM.ƒz8N®Âøû'!Œ"ÇëúÌ ?§ˆ éqÃâ^¸6‘ô›±þ¿¨@ÚXºM¨Aدü†ª| uoúþ¿Ý=$…ïJ¤ÃjßäÅëô›KzuH5ô@ÜSÒm'ÿ ¤!IÒý´’m¤¿Ãi$ßëÿWýzN/ýút›ÿªëKK#ý*lý%½ºò‚÷¯é:ûêéy¬!/Õ¿õ«ô¿ô·øUúTßi~*þ–¿­uŽ¿¯·ÿ_¥ÿÒºÿé~Ú_®º[ׯ×Ñ ¸ÿ÷ßë­*!«Ûõëÿé}¶—_úÔú^’×úÿb­uoÒºÈt¯KëÿÒûkúë§^ÿý,†Ô̺ý~Ÿü‚´.ºW[Ó¤•¤–O_¤m‡ù ¯ Y”ߥ¥Ú^¯¥Ýÿ¯}°ÞµMzÒn¿m.ÒKUÿ¤ºn^“¦×D k¶•é=%Ýõz[i0Â)ú륭¥ÚN—jýt’N­„{¿ý6’kh$ÛI´’m ‚ê¾Øašë¯a¤C6 ·Xa"p †VAï[!¨A$Ń צ•ŠˆÕˆQ5†qLU1A°˜ZƒX0˜A§¡Ú¦¾Âa(a !¦B kÒ !a`ƒC !°"-¥ÐˆˆúKïU_k¯½%ýªUïZêÚIV-¥C½%Ú°¶Ò´¶ÒÚab?ÿÿÿÿù@Ì‚]D2A¶²¡©©ÁKBƒ!ø xFAl L‚’2@dÔP&CP¤ä5 . †\  ¸2 ƒÈjjC_BІbr `È5 TA¬l È`A 0A‚å8`ˆÍ@ä`1 ED6y ©b„x†‚¼‚ØlÔ†ØÄàÁ ÎEÁ©`ÿÿ­áƒAÅþApÔ&¾a†Â4aƒ#@pà Á0X`ƒpƒ†Faà 0ŒÃ°ÃG‚á‚ &0˜$à û¯°ƒR ô! hŠ}5œƒÐƒJŠÌ¡ ÚÍ¡ Ê#àÐh TNŒƒ^ Ôr³„k Þ„0 f„ AF:8 éOu¦@@ƒÑ aÙl"í 4ÓM5M]] ›ah&Ø@ÚAæÌÁíSÓîC(éê ¹Á´f =Ãa î ïº ÿô·VÝ ÃÃiIÿÝý4ƒxm*K„6žè'Ûÿ ?þ—}é7¶ozëþë÷Iý- é7ö—†ÿÒý/_IþŸÒ~Ÿý×´­/ûAÓÝ/oý/ÿ/ïI½´›ÛÿýÒîž-.&ÿ_oþ¿ý.Öa=&ý&ý/ÿ¿Õµn´µzna~«õÿô¹…›]½ou½ÿÿuµí'],toÒûÿKÿÒûKÛéþŸÿÿº{Þ®¿Òº_oÿKßûÖýo×ù…I´›HRÈd È?N·ô?éþ—Ý{ûþÿî–·êé%…‡¤Ctý.߯þ—ºûz_¥ÿýþûuzXX: Üëzÿõÿ¥÷^ßß÷×û«iu¤éV¤öÿú¯ÿÿKÝ}¿~•õ¿î¾Õ´­%ÂíêÝ?¯ä|¿ú î¾õõþ¿ÿ§ÛßK x– ÃI “úÞ—·ÿÿé{¯·×õëºZþ“i% Â0Òê+§Ò¯ÿ¯ý/¿ßï®ú¿ï¾é´ºKL A†ºúÞ_ÿÿú^é{~úJúL?Þžzm í/§Á¿®«ÿ¥÷ûzúþ”öºû¤—„`ÒI}x‚ÿÿÿÒý/¿ô¿ 2œý7´ô—„±pÃKªû•—ýuãý/oöÿÒüR 6þékÕZ¥´X0ÐZúOüqÿéþ—¿øKóhÁÿ{~­ºUà‚à .¿¹ðÿÿñ~ßíÿ“Óø Ãýë¦ýº\0‚ 4¾’§È=?þ|?¥íÿÂý ßúëÓq¥ˆAa¥ªë{φ3áÿ>Ÿ¿÷þÁ~Ø7ýýZ¦ÒX@ƒ¿éöÿÃáÿý¿ºöÿÇöÈ2 ýÒm_ô°‚ ]i/·õÿÿíû¯·ÿû8ÓûÿÓkÂ6—¥÷¿ÿÿþÃû¯~ëºì÷®®‘½épƒÿÒOÝë¾÷ÿ†ý×Ûÿý°ßúêꗥ¦ýb÷ÿrÿíý×ÞþþÛþß×íépÂþ©/ý÷ÿ·î¾ß¯û¿ý6­Ò_\0¾õW÷øãj§þßÝ{^—oý¯úMë† ›½Vlÿ×ì?þߺû÷÷íÿ½uª·¥†Ao¢ê’_¿^ÿþßßíïïí¿úêß^–aÝ·éw÷ÿÿû¥÷õõ·þÝ7]$Þ–  qp‚tœ$“ûé}ÿû~ßíö½¯þ—ëªßᇄ¶ˆDó¾¯ýÿý¼ˆô½½ëzÛ!”õý¯·¤úD2£ < ›bšI'Õ½,xïÿÛý¿Ûí.ëoûÞºê›ÒðÃÁà ‚¯ÿKöÿý¿â½öý×o÷]XØÖô¼0Ä ›^úoK­¿ÿo÷ûÝ.ÒûKºb½'ëÈ †Da´’}[×ÿÿÛÒëÛî¶ëoýzÒ½|ƒfÌðÁ„ †—}7¥®ßÿ·ûûim¥·¥¶—µ¾•i¨0 [ +é0Èf¥ûþßõîÚ[imõÚµZMé. “a¥W„› „ì?ÿo÷÷m-´¾ÒÛK}+Òÿ 4à /¤Á„”%®ßÿ°õëöÒÛKnÒàÁ}¥}%ôƒÁlImA&-t(Tà SM=6Ô7M7a„“a„“nI6)ªÒ´Ô/ááaˆH4Є „$4à ši鶆žšna›I°Ða$ÚýXiǵAá4D3+!œ@A@ˆj bƒpd0 ‚àò °aH0¢ †»ˆ5 Q pâ @a…»‚L Àkµ‡„ /€Ê @³†I†WëzÿpÂøal&ª«üR`„D!S†@(ˆˆÐ‹ƒ$ õ!£Q ñ„G‚ˈˆŽ¸F`JP@úÂZAõ zI#c)ÆGP• MÁê1õ !´QPÒÓD CnøC°±ÿÿÿÿÿ!¯© 4{íHd†T< à ÈÈðANJÈ6Y {ü†@<<üàOáHS x)ù l>N ø z à¤B? à¬A ¢Ûá´¿ÈÙ »ô¶úuRÈþŒå4Ó!•äÿÿîÒ4Ýë¥_Hõï}4½ò¨?ÿÎ'ú^þ¿þ®¿íW‚ÿý]zì ×…ÿõuÿÿÿê×ÿßÿÒzõÿÿýµÿÿÿÒÿÿÿÿoÿÿÿÒ×ÿÿÿÛ¯ÿÿý-!¯L„ò “!­<†¬òôȳ ØäÈ59Èbd5`‹2g!®äIU¡È49ˆe!¥6AÃiÈ2aÃL ÿÕ¶x `„) ®È/< a 0@ÁB5 ÖPPR‘t!„êA5 ¹È1䬉§ÿõˆAá0ƒa9¨ ½2‡ Üúä œ&™ ³¦d2ŽdB䬃 çþûÿÿõm=#c„xl(Gˆˆ Â…Ð,*i…L#ãaPaQÁa z#ˆ7¢cƒhØ(4s`ºÿú°Ž Óð°‚AÁPA¬'ú ÓO  ƒMÕÚ¦º“µ_ÿ¤ôÑÁÐA t›Ò}!™ä ~‚Èeú8Tp™ ¿GÐM1èàØA!•ê¡Ò!³È1÷MÞÚ¿¥ÿûtúAIÒ²9&¢»élB Bv!:Nè6“º6õÌG¦ïëMÖ•%ÿétñNºN“êÏhAÿK„ÂxAÕ¸§KˆN®?ô÷ºM×_ÿ·Ý6—ºßWWú ¦›«¦éµé¯ýµÖ­-t¿ý/zzt¿÷ßð—þëÓ×Oÿõz¶—ZÿþØõkúO¯_éuO^ÝkãïºtôÞ)%¶A¯lÒýýÿÒ÷÷KÛ^¯ûK˜ý¥ª_„û¤5÷ÿþ‚ÿýþ¾ÿûô›WªKm—éþ¿ÿøKÿûßø?ÛKJ÷«T’ÛA¥ø‰Ààõÿëÿ_ÿ_ÿd0Óÿ¾ëÒ‚ƒŽkù €V¯×ãïÿ‹ÿýý~SƒGÛ­+¦›ÒAƒ ~ÿúô¿ïÿÿÿaÿ­ï¾’L=$ƒøFbÿùH–ÿùäÿÿÿöþéi[ôÞ•¿@¿þ|6—þßÿÿþýºûÞÕ/Ò¿Këÿm/ý¿ÿþ¿ÿÖÕé7¥},0¿Kÿý†_ûÿÿø7ûtõkw¥~Ðþ—÷±_ûÿßV#ýÑé%øÿúÿá…ÿ·ÿýi~ûÕ¤ô»õÿé}x0_ûþÿþû_µI»I/ÿÿmµ}oûÿý?iwÿ§Ié&ß_ÿý/ü%ÿ·ÿö–·ÿêÚßj•Þ‘ãÿõêíoKÿoÿÿ¯ÿרÿ}$¿ÿý[}½/ý¿ÿnµµúõ}§¤›o¯ÿì.—këÿ·ÿúV“kÿkW•þŒ- ˜m£ ÙÓÿÛÿöûAZö•Ú6µN“n¿ÿ¶— &ì%à ßþßÿ¶”4›Úÿd݆[½+ÒKÿö\A0ÈXa„à Ê@Ìÿ°ÿý´¡‚ †øiG×¥n’ÿûf)Šb­ŠNvž› 4Âv°ÂQLBÐf‹ 5I½:·HÿQÌ$íI]؆A’@.S†‰ ܆]9c$0B09 ˆP˜Y ‚"5!ƒO Iƒ×ÿØZA„ lÿû ÿØSÉ½Ó i§­ÿÿ†„ hA„ ؈â2D 0±hCø?â""!â8Ž""#ÿá ÿ_øH?ÿþ—ýé?ëúÙÁ¿ÿÿÒëÒzÿÿû^×é}'®Ôþך€Ž•zM¥ÿÿƒ ];iW¤#ˆê¾@Ñ»iW¦–ÚI|{ $—ÖÃÁ\pA<7°ƒ­ˆQDÁ‘ #include "allheaders.h" int main(int argc, char **argv) { l_int32 ignore; size_t nbytesin, nbytesout; char *infile, *instring, *outstring; SARRAY *sa1, *sa2, *sa3, *sa4, *sa5; char buf[256]; static char mainName[] = "string_reg"; if (argc != 2) return ERROR_INT(" Syntax: string_reg infile", mainName, 1); infile = argv[1]; instring = (char *)l_binaryRead(infile, &nbytesin); if (!instring) return ERROR_INT("file not read", mainName, 1); sa1 = sarrayCreateWordsFromString(instring); sa2 = sarrayCreateLinesFromString(instring, 0); sa3 = sarrayCreateLinesFromString(instring, 1); outstring = sarrayToString(sa1, 0); nbytesout = strlen(outstring); l_binaryWrite("/tmp/junk1.txt", "w", outstring, nbytesout); lept_free(outstring); outstring = sarrayToString(sa1, 1); nbytesout = strlen(outstring); l_binaryWrite("/tmp/junk2.txt", "w", outstring, nbytesout); lept_free(outstring); outstring = sarrayToString(sa2, 0); nbytesout = strlen(outstring); l_binaryWrite("/tmp/junk3.txt", "w", outstring, nbytesout); lept_free(outstring); outstring = sarrayToString(sa2, 1); nbytesout = strlen(outstring); l_binaryWrite("/tmp/junk4.txt", "w", outstring, nbytesout); lept_free(outstring); outstring = sarrayToString(sa3, 0); nbytesout = strlen(outstring); l_binaryWrite("/tmp/junk5.txt", "w", outstring, nbytesout); lept_free(outstring); outstring = sarrayToString(sa3, 1); nbytesout = strlen(outstring); l_binaryWrite("/tmp/junk6.txt", "w", outstring, nbytesout); lept_free(outstring); sprintf(buf, "diff -s /tmp/junk6.txt %s", infile); ignore = system(buf); /* write/read/write; compare /tmp/junkout5 with /tmp/junkout6 */ sarrayWrite("/tmp/junk7.txt", sa2); sarrayWrite("/tmp/junk8.txt", sa3); sa4 = sarrayRead("/tmp/junk8.txt"); sarrayWrite("/tmp/junk9.txt", sa4); sa5 = sarrayRead("/tmp/junk9.txt"); ignore = system("diff -s /tmp/junk8.txt /tmp/junk9.txt"); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); sarrayDestroy(&sa5); lept_free(instring); return 0; } leptonica-1.70/prog/lyra.036.jpg0000444000175000017500000035756112067375336014467 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÉ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?óÃ…1¤L‚ÄcéU™˜ò¤`Jà¶;×)è¹»€+ü©2«žj¸fÛ´œçOÝÔ€Oµ.V5%bO<)uÆi¯p£æÇ sQfçõ¨2wrw1ëO”^Ñô-yÀ¹ÆzS~Ð7Œ2‚K)üêFãŒóÒš‚d:Œ°Ò+œ FÀ÷¾”±‚ØàJh –éÛžôÒ[ MÚ⬀É÷>˜§yƒ%•N3UÕ\­(rNO·J§ÙaåÞ6úTq¹R8èhYˆ x‘\«áº–ÆG¥£æÔ¶ŒqœúqNWÛÁõâª4ì°dg޵¸ºÜT{6hꤋMt¡NÜgæ 7Dã#¯¥DÙÜ@Q—ïÖšÎÄŸ”p*Ô›ªÙinT£àZ…äv`wsP!ùúwé73±ä¼zSåBçlV|£ã'ò4cbëÞ™ƒÐô§¯Ý§b.?Ím™¡ç4É+óòcŒÆžIu'$éÚ•ù™cÏt8tïIÌŠ2pØ'ŒÕRNpIÍ/ÌsŽ4r öŒ»&Ûµ! £‘P#È€ÅHçÜT#äp{ŽN)ñùÝÔÿ+X®{– ó‚{f‘ï2 SéP¸VV5ç$š\Ç»¹˜` v¥Ê»™÷'ÇË_”g§éD7ûŽ%œÔj•gBÖ¡ Ðî `óŠ9PœälðñnQÅA-ÄqñÉ=0UŽiAÆàÃŒ %ÜQr»3ÉÉÍG&ºš:žéj;¿œ€ëV<Ð9qŒçõ’‡s*î?Ä*Y&ò÷+|ÄuÎ)º}…šjh×v ‚(7H;÷»VY™Žr2P£­J³Ø‚){2½©¨$FCÈ9¹¥pßwŸZÌk¢PœçÖÊî§iÁO qRé²ÕTôFŸËŒƒŸLSÚø9õÁ¬ée–UqŽã•ð¿¼,\äƒB¦'UÀ†e(ÈP9ퟭP… W~ÀÁ©|ð;ý߯“…ŠSº.î9<ç8¨¦‘HÁàÔ¤*Hëß'4ÀêÀ€WÌà{ j æ‰|ÀÀ‘Žzi,d¶öª®î£q\c¥FdcÆü¨ÿ8ªP1ö…¥œcq~üŠ_´ŒpIÿ>• ¨f˜Î£ùqÎA¨íT ÔfŠÊœ‚Ùõ‡·ô§¤«»óšÎY†G ~çµHïШÀlIKq¨]y”N2xæ£3£iÁÏéÆ@Cœcœð¨ÙŽì+qÉSÇ9ô©Q÷pß1`qþ~´Ã*îÃÆ{j»0ÝÕ[$ôÉÿ SYÁw!;ölf­D‡2ê…tù äúÔlnƒ‚1“Uƒm‚Ëõ© ÛÜÀŸcO–Âç-+•lƒÅ?*W­g ‡!³€s€:SÄÀ&Ó¸däb¥Àjª/ gŽ™£ËÜÜOôª 0ÀNÌç“Ö¥[°‹þ¬ãÚ“ƒ¨‹MÊr8äuÍE:ò¿> Aª¬·í’1Ç4Ðí‚9>õJ¨¥Q"Ź,²ž£×ëZ1N’®Tõê=+³(ãÖ‘%hdFØaØô?ZÖ(ÆM=N‹¾xÅH9ÅS²»Žî<óóz¹€WpéíM™‰‚)q‚)Á~\:iÎ(°ãð§ã¢ô¦©éëO óRE‘£PV°õ[¡5ÉŠŒ}ò½ÏµkÎŒèÛ>ñR=¸®irÍ£c©<¿…&TUÉ—Y²@ëIä)8àJh“i{Ó’L“óÖmÈè\£ÒÉÀàƒÈ?…(p­5_æÈ`ê1Q©z!Yqè)8Ú3JYK‚åëQ<ÇÌÁ^qM&ÉmDC#©:U£­pB‚ÀOQÚ•ËMXx›çÀAϨ¥²£Ÿjªó’FßΜ·Á\â«•’¥’ÉlŒÜ'^ôŸgˆœqÅBìãÆ•f rwzûÑÊÅx’ù1D;»ÒˆâÆâœŽÂ£Y‰^F:àT›Æ2¾”šc\¬rG¤þì “ì¨Ü.3õ¦Fꡲ S%ŸœFyúRÔ«D{Ú…S‚PJ˜k°#§½H.ÙW•ÈïL’HÝN:öµ5tL”G[^)•Rs·G¨­k¥ÝãÀP@·AÍs ¬[ñ«vwrBáYÎß~•£MìÌ_+ÒÇE ´Îþ]¾ äRËGÜÆ0yéš©¤_Cì]™¢'æPÜ¥hC¡N×M=­ØžT7ÌqŽ9èxüª=£[ƒ¤šÐ¬sõ¢¶.ìæŽàˆ¤URÁAEWµ2öLãV9p#ýêi†^?ÚÍvVþ»—^Üóþ¸ÿ\O߃¤G¬Çüj}¢;}“<ý’~K>qïK— 2 ~&»£à}M['J%} ÇÎ…ðF¢rŽGýµ'úÐêG©>Æ]üÀİ=i§$ðŸNk¾_êQ©ÿ‰:ßÞlâ¤ÿ„CTP?âK HÒö©l?a'Ôó×F8óÞÄJçÐg­zð¶©÷Nn;çh¥ÿ„OS·öM¶OAíëÖlÝžvÊȧ2B¦˜ËÛó^’<'ª:üúU²ƒÕ·ŸÖšÞÕ‡ÜÓm±Ð|íþ4{QûÜóq³ìZ“É`Pkң𮶡±gn£¡ÛŸÖƒõ×¶¶CœKr?:~Ü_Wó<Ãcr= +Bà’JñÏZôÑðÿV@uh§¯ ù?^hÿ„Ye9ŠÈ¯¡v£Û êýÏ.dùz‚¼cž´žQ @õ¯Q>Ö0ŽÄªœ€Y°)ãÀúºS˜wu O?¥?nJÃùžUå’«Î3ÈëH#l}áú׫ÿ¬H@0é[@OøTkà]fÝvFšr)=oê):ãú»îyc#•H8àþ5ê‹à­sÌß·NÇO¸˜|¬à¶<óüCúQíÇõgÑž\ä•Èϸ¤ ŒœŽ¾µêqø3\ýU Lòw°(ðn²¤–dŸY¬ðþg”ÙÇ­vÿëÒ½kþ}U¿ÖCfsýçjŠO_í¬ôÿ\ï#úQõ€ú¹å$n¤ÁïÏã^¹€o ´²\ö$‘ü¨o‡×DÖV9çøÈþ”Ö >®y Gžæ”)1Ÿ­zÉøwx’6Ë;Î|ÆÒ˜Þ¿aŸ°X ¾’7ÿG·«ùžXÇÝæ“¼dgõêKà=WR+âFâˆü«°ù’Ì)àÍÒ“®ÃÌòÖc‘Ž£ƒMº‘šõÃàmPµ,JÔîÿcø#XWâ ,ŽG óúQíÐþ­~§’«¸Ízøo« ž1ÚcþUü©¬™öÜ.½¬Cêòîp¢¤j8 åX0¯AO‡º‘cÿÔOûy?áJ>_19°ˆŸ{¦ÿâiª±Ã˹çe¹'=ýèÿ€“^¿ oX YDO§Ú?øí$¿ ocû¶{ñ×mÀÿ ~Ú$ý^]Ï;ÄqgµJa•%«»O‡:‰ÿ˜gSÞïÿ­VÃ[òZÊÜ{³ÿÄÑíþ¬Ï7el䃟¥9PÇð¯K 59û, ?ëé¸ÿÇ)áV¢N|»`:ÿÇÓñý²«¾ç™àŽ¡±ïJAÀµémð§P$&Üçþž[ÿˆ¦?Ã=B,ƒa¨ã‹£þx‡ÕåÜódi-å`Ã¥nØßGt…qµÇUô®´ü3¿-ÿ Øvú{oð§Åð¶ümhí­âpçé¿ø“š~Ú ðÒîsªØŸlxñ]Wü+­YNsǤíÿÄT2xY‹F¯ž».3ÍE/k}^]Îl ‚züRƒ´ttKà}`)?gŒëþáà]]°v(ãœÎ?øš=¬Eõyw9·a×<úg­P¾³Šî=ÊvÈ¿t“úWd|¬nÿ–|uÄÝÿïšGøw¬²äÏõÿý5V!õwÜòò$Y62ÀñŠ‘K¨ÉVü«ÑᎭ9Rá‡@'ÿìi½[ #¹›ÿ±¤ê¢–÷<ðÈÄýÓ‘íAfûß0?JôSð³SSËÃÿÏ?øíð«µBÝ?ë«ñ4½¤GìeÜóÄ™wņxÅ>F;‡µzü*AŽ|ËûüßüM=~^€¹ˆ׿?üMÒ;Ó•¬y²H ‘zœ¢È¹F¯B? î$ÝÅÇûGü)‡á]ê7É4,¿íHGô£ÚDQ¦Ï=)´ý}è †# õ¯@o…÷êw„¯´ØÿÙjœÿõhŸbD_ŒåeR?\QídÑÇà÷ºQµ '85Ô§€5ŒŒÛ0ÿ¯øÓÇÃ}fFb.}d”‘N ã¹Sޏ©Áxl×Z>k}–1ÿm:þ”‰ðÓZ,ŽN3'_ÒŸ:bPhåI1&€O^MuMðã[àˆ”‚q•—§æ)ÿð­u®¤B8þ)úÕ<È®VqûIç9#Ò˜›IUÏá]Šü9ÖAé¢_þµáƒžÓõ©ó!8œ^Ö'iS»Òƒ @ç$}Ev'ÀZ‘|¥‰î‹¯Ý[ÛåÄÇ"F\iã“þ¹yÏãDšˆÕ04ÅÏ÷ŒÉŰ]ÏHhÀQó|¾ªÔŒ»TdóîNkͰ|FΜ¹é“:àþ¥}ÄÃhìJ?Æ‹‡°_ÌzH‹*åÇ©4å@cìGÖ¼ËûÄË…û¶yÿ\¿ãAÐÒœ~©[Âþ!,¤$õ- ñÚØÇ¹èe##%”w5.O©®|1¬… Ånäà¯øÙQ7„µáÇûää38üÐPÆ=Îëb†+ž£Žôíús^~žñ‘¿ÉcŒníý6Ò¿…|B§SÅK@£¨+·¼hÄfW#ÐÞ¿øÓ‡ã4bk¦?û=+ìWtzp‹ èqÇjk.:€Np yªi¾5Ø $àtí'ü~žºw07ù¬A$?oûùJäû4z'ÈNzt©¶”Ç¥y°Óüa±T,ËÚþÙOOŒØïÍÎ@éöŸþÙM0tmÕµS {Ô…@à~ëΗãFÇü|ïrøå?ûƆ ÿh`dƒpü~!±@½—™èL‹ÜàÜsQ’ƒœàƒŽø¯>:7ŒÏÌ.‰ê>Ñ'øÒ¶ƒã, ÍÌç¼”®5Ew=•œÇëQ1Lœžú×.ƒã -yœãþ>äÖ¥ÿ„sÆåoÐÿOniƒ¥n§ /…Éö¥c ‚?¨5çÇÞ20ÔS$t¹§Æ†ÔcûÓì¼ÑÞ#Úy ôRSŒmϯÀ ÆMÓX·\zV¥mÆ‚@ŸÚãûÞc`ÓVcæBÊààŒýicÜ3é^|šOŒ¤Y5Ãæ¶HõÅ›ÕN¡ÿzvÿ M²}Ñè‚HÕ±Ç^ônMØ'¯Ö¼óûŇjvùÿ®îiFƒãËiÂ=Œò…³óG¡bؤi#a‘ò¶zuâ¼ûþÿ§ «[&}g“ü*/ìnÚuWŒ‡ûCãšve~¨ôs$* dóž´‚Dù¸ÇæÏáïñ5‰‰ôºzqмZ8]N 2~ÐÇÓëL~Å÷G¢ï®ú¥Fn½yôz'‹Lo¿U1ë;…*øwÅÌ ®³nÀ÷ó[Ò{/4z² &›æÇ‚1êk‚xÀÌV?¼¿Â”h/Ubu[v0óÿŽÑdÆýQܬê¤ü˳°î?ÆŸç¦ÌîÈÁŘfmRÁ çÿ‰¨ßÃ~.#VŒ?ŸJ,ƒØ¾èô¹‰ˆ9"”]G¸Ãóæ¼í<1âíb5õv'ùSŸÃ~( HÕ“‘Çï›?Ê‹ ö/º=®c;cøš„ÝB«ÁÂÿÂ5âLs«Æß?øQÿƾBƒ¬ÆAê|ö¡X—GÍк‡ I¦î!ŸŸõ® ¼1¯UäxôÐÿÂÚÖÃæk‘ç#©cÆ9ïÚž‚ö^glncËr3ÍKö¸J‚\ vÍprxcY ¨ÖaÉ·?:„xCYƾŠ\+qF…*+¹è_j„‰'Ò –å7IǽpÚ˜Îï1ÁPÆ “úðÈ]Œ¿`faÅ Ò]Ü=Ê(ÆZoÛâ9éÚ¸AáÏH¹:Ü;‡o9¸©Wúä–Mb*NM=Òk©Ü>¡*Ã>ôÕÔ" >eãšâ›Áú™8ÿ„që—ÿiðn¥ùÜ“ýÝßãJÈ=Ÿ™Ü5ü$pÊ3H×ðíûÀ­pñøBüœ7ˆ¦Ûq?ÎÿméÿÂArO`U¿øª4gýã²]N¸fsO:…¹†þÕÁÍá+ûti³pè£$ßãZ–ŸõáYÿ¶Üî\áwŸëNÈ=Ÿ™Ò}¦À¿N´÷H&‰°ªÇ¸Æ+ž_‡zŸ k,àòÍþ5,~Ömß)­¾œÒÐ;2 cJ‰á}«9ÜF/Ò¼ƒS€Zë/dsÈô5ëZ„šÖ”®5cžßº.ª=k˼PSûpº¾õu ‘ïšÒ“»±”ÓFiP Í‹'–¢µ±=»Aº¹DA²,qÔýk¬ƒP¿*W0*’sˆ°}»×¦_ÛÂZ)óÓ+ ÀúVˆñD ýðƒÉÿEsÒ°kRÓ±ÖBëj'î˜÷&0i~ßqÎæEã€b¹5ñ 2`Xß2à Y:ÿß5au¸6 ð_ÐfÿâjZ1Ðh]ýï0mô?š·WAp×2¶{”_þ&²WW·èÐ^àôÿC—ú- Õ­våàÔ9Ïü¹MÇþ;Eƒ™›I}9ÜL§·øRù²0ænIÏ@¥a ZÍ9ò¯ùéþ…?ÿN]rÔDWùÿ¯)¿øšVÍÿ2N›ø€?œ÷ù,˜'<…N+5Û}Äì¿ÿÀ¿øŠ”kÖêªLwǾM”Øøí&‡Ìk-ÍÊ©"mÞ¥”ANûTÌ yƒžØáY?Ûp?º¼àã‹Isùm£ûfÆ!¿fôû§ÿe¡ æ5 ó²\~ išE%òzgvéTãÕ"“(°^ëóZÈ£ó TË™|¿.äœg˜ØÌñCB¹l<ØùÏüÓ•åÿžBj“_LFŸv[û£f~¿{üj3©Ü“Æ‘~Þù‡ÿŽQf/´S¼Ë!•¾^1ž*P÷’cè?³[Tº ì]CŽÌ8ÿєѬ]qüzÐñÿ‘)Xw5Iœò$99Èéü©¿½ýáÇBk8kWYùt=@ûîƒú2˜úÅöF4 ý¿õÒŸü‰E…sO`|ļӦ'SÇj̽ësýƒ¨ÿßÈ?øå;ûfìàPÿ¾àãÿ"Q`¹y^àg2zsJ&— `Hõ¬öÕîÉt-Cþû€ÿíJûRô¹ÿ‰£×Ÿžþ9NÁsHÍ9Rwdàö¦kœc ‚=šu;¼èZ†=7ÁÿÇ(þлÜ1¡jÿ·ÿ¢Â¹ ..)$ { O2bÃ,zó€9ý+;ûFñ~_ì-Cýø?øí*êwYÿ&¡ÿ}ÁÿÇh³ ¢ô’Ï·ñŸöA¤8^$ýþ•DêWXÿ&£‘ÿM ÿ㔇Rº+Ή¨çýø?øå 0¹¤²L:¹ÏÐR‡¸ ݺàU¾ºãUá=Æø¸ÿÇéÂúä6?³.3Œòñà~;¨°\´L®ø2Ÿ¨£1ÍÊùòb˜×·9 4ù±ýâéý ¡û^¡ü:pÜzo@üù¢Át\Û)'÷Éüi­ ݸ†Æ*³]êxi°ûÿ¤ÿ/–œ.µs¦Â«ëöþÆš ’rx@=FzÒ _1Æâä¯LšO´_}ãcÓÎÿìiñËv~ý¤jHÈýîGçŽ)…ÄhŸ½ùÒ¼Ò›› Ì¿b>ÇÍ\gßÒ‹ÉÈSÎsJBŒß™ªÍqxGÉh¹ô3`~x¨$ºÕöV»Ov»#ôh°›.áÊ[¯­&ÖŸ3?ï¤nu’6ý‚Ë#¯úcÿñª šÐØÙÿ_ÿƨ°î^¬xùÉÏRi€(R\çþµLË­mÿ“Ÿøü~?òFϬ†æÎÇÒíÏþÒ§`¹¦v8bj]ãoÎG¡ªF]_wüzÙà÷ûKñºI¨ƒþ®Ø×ÿ²Š,"Ê~éÁÚÜÿ³RïéϽQ/|NvÛŒwËsúRI-ùO•­Ç¯ ­toë´ƒLÉÝÐþ•Dÿh¸ùf¶SÛ÷GÿЦ«ê Äù–øôòÛŸüz‹¤¹Ü2Ÿ§7sÿÇÿMõî?Æže¾8Ìp{üÇü(°/“pÄdzÒÁV+úËgÔ– mzeKcõ©.§Ë ­‚ã1þ*‹ ‹UÊüÇ=sMaÉGçYÉ&©³ýu©õÉ¿øª|m~ †kw>ÊSüh°H9*?3I€Ê€j¿™z!`öÎNj³H±+5¨ÿtOþÍNÀh¸ùGëŠ@ Áÿ>µžF«ÚêÐ}`cÿ³Ò0ÖBñyfýz1ÏþD§aŽì‘…ÏALËpQŒôþUCÁ<ÝÙàÓ«ñÊnÝXðolñÿ^ÿÇ)X 0ÇøG=Ç­?°È8¹¬°šªÿËݧ^¿goþ.œ?µÜÚsÓýñÿÑ`4ÆÒà ¥WïmýfmÖ‚o,öô#ì­ÿÇ( ¬ù¯,½ˆµoþ9NÈ>F˜’ ç5]ÁŒ1ŽEgËk«È›Ë<âMŸýHêÜ«_Û•ôû!û=A¡wsn?* ¸`?!TÛTo‡=¿Ñ¿û*hƒS 3¨F~–øÿÙ¨²¡¹óÓôìÝÀJÏjÙšù>oH#õ Ú_vßryÿT¸¢È BÜçqN(§ ÉÏn˜ª Þñ¾ùÆ{,kåCZÝ£p¸ôHÿøšv@_)–àŽ*E…ƒd`þ@Ú\ã#U»Ï²ÅÿÄSÖÊá[-«^;¬_üE+ -˜°¹Áüi†ç;sÈëPkŽ Ô®[>XÿøŠ ¬ä†mFëƒÕBñ4ì„HÖ¹fùGëM†Ü)ÜW¯#Ú«Iisœ¦«v>«ÿQýžç<ê—9é±ñYí‚$O™†ëÔÒ ¨ì~µž–7 ÚÛ pqôQAÓƒ››Ç‚ÞsÀâ“°&_1Dθº€iN#MØÎx=»õ5’º 2Ý‘Ž¿k“ÿŠ©ã¶†ÊõcI&),Lå%äÁ ½7޽¨@\2ùŠØ‘ÜdcðÍnxm ØÉ *HBàt^¸ÏÔŸÓÒ¹³*‡Rc<äƒÖºO ¸’Ö^<Ü‚~€Ð×ãjo—òõ9ëš“9_¯4‡9ÀúTØf}õŒsÄÈp}2:×Ξ=ÓÓOñ$¶é¿ÃøóýkéIÆä?7jð?‹$~(„ž£Éü±ZRÒ@ö85À#Ÿ¥?Θ ÈÆG4Vä$} ’¤^•gËXðª0©) úô©Šo$®S[®ç'Ú¤`Îr3éH‘`sõ©6ì;óÛ¥ñ*G9êsR¢OJwAÿ o)1ŒeÚyÛíQ€K ޼T»~n§9曵Wœš@3`C‚~”ƒk¨S€ô©>ó})¾[c§#Š.¹É'9Ï­Hå9<ÔeprÇ ä—¯|БÀ ÿ!ùR©x=I4нŽîqùRÛºgœ@¤Bqó`†é‘Aù‰éÒÇ<Фƒü#¯4ÓÏAúÒ¢ü¸Æ}iÁWŽžôÕ#ÉéÎMr2iPb<²úâ›»8Ȥ íÐ(Å8±ØÓ3ŒâŒ’@švPGCºíÏ|â£#$÷àç­PJä u4~2:vê)Šp~ñ5 Åý½¼eåž4P9gpëYâÍõš­’ãõëÏÓùX®óŽ¿­ç¥s‡Ç^UPÚœ]3€ ëô«kâÀ-ªÚEœæJpzÑÊÂè×féH[(séëU¡Ô,ï!Û]E:âGóÇçRï Ì1E˜]]ŇSŠbdñÎå8ÈÈd×Má[…’ ÈÃdÅ8O‘ƹp²]¤lQŒŠé<'´ÛÝ®s‹Ãî-&4t ÀûÙã¬c“Ðõ¤äqZ>ösëš”1’`G’Ä1^ ñxøHâÆpbÍ{Ì„8Ç5á?~_ÂÙÿ–@ŸÌÖ”þ {|¨ç ÇJ)‘•+žzÑ]-sNÛņù‡ÿZ§ Ù—Ž{ÓciÀëOUmÅ›Û=+Œè ü)­ÈÎî1ÅHYÈÛ€­4 ã'qÆ2iˆ[aÃsOl¹#=Í @ ~þ9%x4˜ ÈFÎG>ô»ÆÂ2iqÀÊœôÄ\7\×ó§®X’NF2(ô枸\ÔJ@ÀÉSj6ŒŠ”0#úSOO_Æ`ÞÆ€§ ޾õ&Iôô6œŒsï@ +Ô’Iô¥(ÇS“ïuôþO_ÃÀ6¶wv§c#q<¯ëYÚ†¯k¦Os,ÌÒ£2´Q—9Ûœ}áÏO~™“OÔâÔ¬þÓ ÈŠÌɶA´åX©v<vv¸®]ÛœÔEÔg¯Ð võÙ’®_ñF™ ©S/žTí…H,Oô¡&öiløù†qÛ¿ò¬m_ÅzVŽ Ü\«MŒˆ"ùœúp9÷ÇÖ¼ÃXñÖ§ª³ˆä6ÖøÏ—`·N¯×<ôÎ YÛnU‹Œ€y¿_qüø­ãC¹§c¿Ôþ#ê ,vVÉj¡F «¾Cž„€cëž:æ¹›Ÿj÷ðî¹Õn<Ð1°H#ì:*ã=?ÇgG ˜Ÿv@÷‡Œ· #¹Ï æ˜QQ?vá@ݵñÎG¯N½»›eM#7&Ë–÷0¼û¤ù$brüžçœõôçמ3'Ú­aU”€?)ÀcG²Ó¹5”²DÊÌ#‘1èÃÐô™#ðüÉU}Ëe~ó|£ò?O×Ö«—±7f½–sˆ¤ „üÇÌ÷=þcÛ¹ú #6‘È1ö™ÏŽG=½øã=OR9%‘Æ$tp0§žŠ^?úå©å#’EAå"tÜpOV$àóí’Ávií µÃù—O´¦Îv1ÐqÓó8#<ãVÛ_Õ´ÙBǩܲ… !qæqÇ@rç·QÈ®q$jD àï†Hï´gØzš~^4Tùrí¥} ÌG<|ÀçéÓ—(îwv?o£/¬Roï¼ ÑÛƒœ“‘Ü}+®Ò¼]¥jŒ‘-Ç•pHÄ2¬sÓ¡íÀ&¼qnI3[–#ƒ°å9Á ¤a–) $Dnܺ©ÂòÙ¹â¡ÓL¥6¡…Óp# ÜžjÒœŽ§Ÿzñ=Æ:®”<© ]B€‚V%—`†ä€ÄgŠôÅ~·{Yñ t/Ã.=qÛÜf°•6#4ΈžsÇZ 6ãŸÊ¢Y¯=IÅ*:±É$Öe<6HïM9ÈÍ?¯l O™Aã4Ń#ƒšc H=EO÷R¥Føg ŽŸ­ ?9Ïz~ Ú)¹'9^O"ƒÈ4ÁÆ? Ö^ÀsR|»†i²uÈ P1€É d1D‹“•=)ÎÌsŒPUÀa@ +Í êp¸ó“‚qÖ€âzP"%ld gÔT¸Ã‚sùR‚xÍ.Ìàç§nh)@SœàinKdvÍHÀîäçÓŠ Ç ÀÏ?Jn8Î85#¦G¦)›—§ NÀ¨ÀùO#´÷ÚqQ®=1ŒóMùX.0AïÐÓ™A œ Ò•%²prsŠ_½óŠ`7Ë%²c⬫Ž1ê(à`’ 8³Ö€#8'?Θõ`s“Þ§täsô¤ÚQBN ÕÈǵ*«mÇÍÍ#(*28Ç~¢”®p}0êÊ{þT™qÔž1šV>@FOÈ B‘ó`ž˜4ÅR#<ã¾)Ê6ð õéJÃ<îý(AÈÃj”0 œžÔÌ9#‘ŒS×iÈõë@!Xò9ô¤EP~UëÖžc,¿)#ß4 ÝHã½1bœw¤Ø2yíÒ¤ØrËÜã’1Ú€"èzcñ¤<žxǽJbËΚ@À{š…±ÁÈqœgò§€F~QíJXäí@„U‘ÈÝ“êx§@ädýjVLžæ‡B tïLŠœd`÷Æ)ê«ÇMÆ•Hf€´»WØ_êj‘,Ÿ``@Ç®1[žR–·€íæãŒzlZÂDl± òíÖ¶¼*›F¦¹äÝöíû´À• GCÑ‚ã®ig8Šsä?ãQ’ǧÒ¤¢»†‰jðÿ‹ƒ:Ü Ÿùb?›WºLr0W#ú׆ü[Ïö´þ˜æÕtþ4>Œót|-ÀHã4WaÇÌ}`‘·#ÖœÈÅ9HSŽÑë\q$ÒÿQNÏP?@ ÎO=&ÀQòãß"€=sC)qÃñM 1Œœc$úRÏ ÇÖ”€z¯¦š~W+Ÿ¦{Ô›XÛ¿À›==½è'k‚_jtv°À\Ã&ö.ÛW>þôæÆGŠ@Ÿ­?8é×éM-ÉéÒœ¬889¤ÀAóÈâš A^)ýù$M=rH#Ú‹yÅ9BzR¨^DW''žŸç4_U±µ¾µ/|ÎÐÅ—(‚“É®1Ç¡ÁêPÒ®l­mÞÚ(ÞØDžiIÛ/µ²w“Ôç¯<ŠÌñW‹4í&Ê[w+sq*”[uÁ#ǰ9ß¶kÇäÕ¯¤´xæf…*Í÷€è <àvŸ~6…7%©œ¦“ÐôO|DÃIk¢l. rã!{ üž½+Î..L³´³K,²¿21|—qÎBÃÁÒ£²F>PC0¸õÿõÔë`]ÎöKd³1ØsÜÐc?—~ƒ¢1QF2nE!rÁÃ''9Œî`ñëÚ›¸÷Œò27(9ã·9ÏÐý+Ti20TDw‘ûÅ<õ*0FI˯;hÆ)6 ¤.஄|‚1Áÿ¾½t.Va2¸UcÇ8À““Ïù÷회FJ` Ü‘Çùçó­åÓß‚Òå‰8;£lòóÿj¦m"G~^=•:wúø{`œÁÊs¢-ÇçxÀï–¿_ëBÀÓ8Uó$n™=†?_åë]Ó¦RÍ>ø¸—‘Go@û]º±ô;£—OÉÂL’ž…LŒÙ8=€úþRW0¬aùM fG+Ï 1éØþ==éiÚA9çÛ·æ^ÕÑ.šb_1‘´àÇÅžíÏsÛøqÛŠ²Y»Ÿ”dœ ŸöÛåþ&äÙéóSæ ûÊ*H¥£$æ^Ä}:ÿ…M•Ap ä€Ù$`ãŸ@>™ã­\KFy÷ª’ö$ýÑÔõç‘õ¦?z’°S†U žRÞ™öÏ&‹Ü,6)ÑŸc¡ÂìÇMÄ )'”uÍÊxTŒ)l’Bœt8ìÏ8êxö‹ìLX>0sœ`1ôSÜóþsQüðàJ6”gan8 ~‡¦GàÆ\‰¦EòðdŒá9:± ÀÈÈÎ:~ŒÕˆ@óVâÖ_&`ß$’2qíÈ'ž™8稤ë¸:œå‰fc»#9õ䓜ç=¸©¼Åв4k´·ŒãÔ`ŽÙçI G¦øsÆ’º¤¾Õû¡nTaN@ÀaÛ¨çîõéŒ×u †èÀŒg#Ò¼ ²Iµ¤0d€[hÁëŸ^ä÷ üÞÕÓhÚýÅ„/¥ê7„ÙÊ k( =¸ ŒƒžpzúqŽ+ ÓVÐÖ2±ë€myÏ9¥9#9ë\•½ž¤ÚÔ %ÅÌÖHÛÖS2ìÆÂ6‘ÔÇ?u1í!IëX4‘¢wܳŠÀã·4»3×49Å!†vœÅJ„r3ŸL AŽ˜¥Æ*@&€IÉã4âpA#ÞšOÍNÈ$åxÅ!³´ Rä{ rç$(â´ãå$dzPavåO4ÅFe^õ#ç<{õ¦cÉíëš3O=©è0@ ùÒr;”ªÇ uï@² Å9ïMuØÔ̹‚i­â9ÍA’ûSU\ãš•£8ÛQ‘Ž9éÅÆ9è¨Ê9>µ‰¯G¯¥Ý­ÆR¬hâx¥“j¸Êð¿íqÁ< ŸZŽÃÅ05ÂÚjpÉ¥ß7 ŽŸöî·nõ\½P®áÓyòªNs·ŠjäRc!Eu'%˜q€p)ØýÙfžIÀÀ8Ç4â¹Lí<Ò¸®åd:RÛ›P3€2jM¿)`¸§cåäþ”Ó Ùl{w?­;œ}ïÒŒd/úÔD°óô¦nA&¢eÀÎ{Õ†RäóJT€yŽ0*…ù°¤úöÅY)XŽ={~uÐÎF:©ëšbà€äûS”œt¥drx'Ú‘€8üi*Ÿ\“éNÛ¹ÁÅ@­µ³R‡ ‡§4d+€§æÆqF ù8£wÊ8#®?Ͻ4•T·µ RPdžM6DNÞ¾õ&Ö;Æ=1šÆwØ´À®Éj{qŽ€“Ï4¤)ÆS@î;‰HŒSœ(çh¥ŸËÒ€„rØéÖ¦òÈ^}i«“œã§­=¶íÿkÖ€#ºíè{ÑÑGÊ3šR1QNNAï‘Ö‹€Ñ‘}{Sñ‚29§*íÒrÀ©éEÀåV•#Üó÷O_J_—®úÓ™|¿˜½N5J±'h†2C†$©9žc]'üLìÁ•Yàz—åùVïÊ;}{VMúí Yù6ÉžÜü´ÄÂ4o‰Ýâ‡9ô¥PxÈÈÇPi‰¸#Œdš~1„+øšPN #à{ŠSÛµFÁ²"€yÁ­.G¡çßÖ0rAô ºáH'ÛéKRÔÃd†’öR;ç’3O²Ô­oìÖîÖex› 8鑜ұķnÝêkmÒHBm2(ýàP Œ˜ç9$qÐ9)ù™rßO,Я˜©,,f_”H¸árx϶>ª}‘XÈ»‰ˆ'É`0Hê#üðsÉ¥¶Ð庅c/7’™Ø3þ côÇaŸ¡¶,|=¦¹Ýrð™é“ny$üO®{Œ“‘¢W0¤6Òîx&h‚Ž[•À?F9ÏAïÇsWcx¡ýàyânWrïÿ{ƒéúàç¬D·Ré ©’¬J:ýpõôéǦ%ÿ„qUÕL8`˜8î Ϩüyî2eÌv9 'rómfã™-={…è}ñŽ8â8Å´r—leŽ2mß ôçœÿß-]¬~‚7bѨ$€§oCþ-²>•l7‘ÆÎ1ÈNã¿?çv®på8Ô—Iò¹¸ˆ6Ñ·ý{wô?ˆ=y¥á™€i€RAÝ!ÏûƒÛ×°þíuÏáðÈWnPýÜŽ1Øv€CÓ¦ŒÞŠfVÇ”m<`8XòPì …8Ëc£·$tÊì:VŠb±Ï$‚d*\6ðNNÞò1ùrjʼA@Êa¨˜62@Èíõö"kÍ'¦GToõžf ¯$aНL†?8ùHÆ9ª9’ÖCû¢uÀçêF¿—aTìÅs¿ðoŠ…¬ñi7N%·c²Ú`ÙÙØ!'±íéœqÍzDr)¨Èí_>FðÃpé2…bÍó¹[ž0ztÎyäzu_RðO‰Æ £L»µÜ@ˆúÕŸø{ã·Žyê4„ŽéKcµ.ïÒ™$ƒŽ:ÓŽàž•ÎlLqžæ[¾¦¬˜\™ô§†ÁLR„€Ø H99©HA`ðáŠ`3yÏçô¥$œriÁ>cŒš8< @!9äò§µ0¹qz{n>ÜRcå;°=cG‘]Ç+÷yéR)@ÆqÒ“åqOUmƒiûÔФ±b‹ýMJ€9Ç4˜ˆÉ óùÒmÆFzÔ¸^?§Jc£† $Ú¸l g“ŒçùÓ@7†R?)Áç½(Bî Žµ3£‘ÓçQlbŸ;wê0Sj€Ç9ëùVf¡ëÛw’ŠëÇB_ð­tÜ٪ιÛibåÉô?ýjhUÚŠàc «¾BÒjG~Ò8~íj _”‘ÁÆjï†põC ËsŽ?v½ûÐ#y‘KtÔR€ØÅ?ŒZŒ®ÂÄqº¤d!,>nƒ¿zñÏŒ\ÍmÇðo_ñ¯g‘I·>‚¼oã;ìÏ…?ΪŸÄcÈóE.â;Š+¸ä¹õŠ"‚H=NMH€nöÇZ’0OSëA`…ý+Îgp‡+•Ï'¥H?Š¢Á” å‹t Ž1øÔ­Ð€xÆ Ê’y‚5$“Œ{vÚ¼}3K³Oc@ |™çÞ”²¸Ê’Ct"‡+×ðª·QYÀd¸‘#‰s¹›å\ïÜP—A–›<ÀÿJœw·øWk¿Ö LDl6ß9p¯Sùà¯üU­_îiõ)•XcŠ«(ÏP1É­£FLÉÔHöýC[°ÓíÚ[˨áQ×-Ïàyþ·ñ)Ù…¾«$fw¹è;tÏ_¼ݞæDâRÎ9!X±rsïùUˆíZ`_%S¡=ry$}p­þMkInC¨Ø—:…Åô†k«’ZM­#¶I#¦1×#9ÇjŽ5ÞŸ(%ƒr@sØàž˜û¢´I;KHØÈ,8ù‹)Pßúÿß5uc‰¥XÀyù™OPqóKÎ=+MÄ[¹›„òÊûÔ" %†yQÕxúðOlÔ¿aÿ‰µµ£»£9É$«à g¶Þýu³¬ÈfCó’8Ë`Œnê¹ôæ›ac4þ"‚Öãiò~HÊ‚BÃŒGÔt¥Ì=^2×K6.ހȤ“Ï\7ãÂggd—ÁäºH‚ŒÅå ,‘ŸºìzzqMÖm€ÕÚ#&Ê€—ÅùHèAëߥt—8b°Ã†2Z¾ã¸brGÓ}rs7÷GmB+û˜ÆÈ­.ÇʲƂ ~˜R@öÇÕ©m}ª«³$` Èsò‹–ã¯9íÏ_ÇL‰§+(k’xNßþ¬úŒ—¦ŸfU®µ¢•"6’68ïò„ÝÏ*›øâf‹OÓ/.¤éû¨N$gÔ½½j]Ç ‘i÷ *ý»|œq˜‡§=^ŸŸ§Íj4ÕQŠXTàê›±“œpùQ‡Ä$½ÛI‚%#;æ‘›ô$só/AÜROkâigK»8ÃHUvF¤Œ0OâCаüézк©ª¤¥ä’ÖFp9‘6€ï¼úvïøS’ëWPÍqeÄ÷Û3×¢¸Uì;žµÞ(Š~oíå*‹”aÇ$÷Tzøæœ.üC ‹þ…o4$þù ;$?.ïïÄP”WЀï¨÷<޼ç½z—…î´ÌÚ“)–ûpsÍ¿ÉàÈ9íûÞ Æ¥;j#;¸'Ìr§G9ªãƒìi¥÷F ’N´Õàu"°5'bO®>´™W$ƒŽ”ÄU'§4ðy8ù»”6áô¤dã€IõÍ`OwÆqǘTôþtL R±${÷¤Î1’;f˜ʬb9â’×sq=­å­áHãhæ!’62å[’yÎzgUô#©ªØÏCלÒð[ž”Äš9K¬r(Û[iΡ¥/Œ|§š†P¸ädcÒÀÈÈÏ{R€qéJB… éí@VsœM.NGQïJ>xÏ­ YHèÞÄP,Ho•yöþ¾”ŒÍ‘‚k›³¿¿}iã’ââM²bkw¶ˆ­¼++`rœ±È;Ž:ñЙvªîeþðéW`¸å$rÄœz ÄÕtÃu*Ï.¦Ö‹ ïŒCd…rÅÃn8'·z³u®é–D‹›ûhÎ ÚÒ¨?Ïüñë\§‰¼]¥.âÆò9¯lܘâ13£n°8àœ ¨Å‘&ŽÂÚÝ-¬b·Œæ£T\óÏ~¿ç¥q%û/‡,âK„·¼·2bÞÚeRÁqœCeGb@>æ©Ëñ!-lá·Ó-$“bˆÄ“`mÀÀ8ç#©ö®&öþûW¿[˹ ÄØaлA8#ä`ñî;V‘Ú <àuÅdÖ¦‹a289üéäg')X c<ç"˜ì@äv'ŠI‡åÏÒš FA'ØÓ•óÏAP1ry<ا«q–_jVpÁ¾cŒãŒTƒ•뚆0 ñŒcÔË€x+@ (»¾C“ŒšyLØJE\‚Hé´ÿJ{ùG¯aHCXa±žØÇ­6@@ã®1ô§í#i4ÖÏb0:ñÖš™Fvž*¥ÖMÕ›nwaŒöØIþU¤Ë¸S´ ËÕKyúzÆvÉ羆F|©1õ«@Ël§Ê85cÂîûD`‚.¹ÈÇ&4ÿëUd åí g°íœÔþv[M€·@/ýúühÎ'Ž” QI´ã“Lû¤ ìqúÔŒ$çÐ ñ¯ŒŠKZœö=>¹¯a•‰ãß°>ÈOpÏëWOâ³8s¡Y=½˜··Šp„Án¸ ŒóîÌyÎ Èà×iM¯µv²’Ò9<œWqÆOãõS]4 –¦“¹F`ñÊ#  ó•ÛÏ œŒ\SÁi<Ȧ%$rFxSŒcò~÷þ=W-¢ó&ûKÇ— „c™ä9Ï9+žÜžkZØÏº?$l T`cnÝņxÊr88ëÚ¶nÆv3bÓ¢¶‰6ÈË*çƒÁ=,¬NÛ5vwvýÜR0@Êfb6®ÞAdd9Á$ƒZPé1[(k¸“(ÛX–ÀRü#÷kÈçÓ­ÔL°MÀÁ¶M§îÜîQ1ÚŸy‰Áb:`²ãŽ´ÈtÖ”‡¸»eØ¥G’¡~Aµ˜ƒŽûÁö›‘Dr-´PHgûÕ¦¶0A¦ÆúµôñFOßiH^>\mÏ^nÜ`qRKg¯xŽkY/Œ6ÐÆvÆW;þm£$sÏ̧ï½;[?éëf·wl÷WÆYÚN~b„ž§=û“ŒqMËKF?ö…ª®ÏXK}!7ØøòÍÉ8>µ3xOUÔ&ÿ‰½ìH†C˜í#UAŒ€3÷ÏPzu®¶K4ŠÖãdav+ŸÖ^1ôâ¯Ê‰€yó— û8Ò³ç{"¹Nb×údzzJ–Qka)yyV(Ç žœúWCj#Üp-#—þº>?™¦ÆZ"tÛOüpqúÓ­ZàŽŸ¾`qÛç–“o¨ZÅ{p|ì°ÇîûsÎȿƤ–&o$‚v‰˜`ÿ=ÐÿJeŽÖYŽG@A?õÊ/ÿ]Y•¼·‡~ñ›뉖¦å DÿO”írDy?í9þµ^kˆm`yåe7©ê«_§ó«+´»g …ÌÿãX×ö‰{¤¤WCÌå[!ˆ ˆ7ä`Ov&Ì™€ö_c\Ξ5 ×¹u1 8Bx(œóƒ€TdÇ$t­orìmh?|û¦ƒT’ F1¹Æ>^¼“Î=p1Ö»› NßQ¶Òù‘1À;J“ø0ß×¼6!’?9p ¦"`À€2C6A8ä`rôÍkiÚŽ±áÕ"Î|Â0^ÆT`mçû§º~Vñ’JškA©4{bJ¥¹àÍVƒT²—;n"ǘSÆwg~¹ãŠàìþ&AÄz¥”–Ì»C:È õG9ã“Áô8›OMÿWpj°K‚â#n‘ÊNíØ%†ã†ãdsÖ³ömnW5ÏDWSœ©w¦Ë"—1+1@$wÏøʨ_"_é×Â]«µÅÜÑg•#@2]ŽZkQ2u‘A=:ãµsú½1Í/›sŒùÍüÿÏl×+â/µÌMi óÉY'#켃ÏLþ\×3o¦„©<ˉNò;±àŸ»×±®Ý¹ÏCZFY.F•ÿµýZvKôHÏ˱{ço8ïÛ¿< õÄ{KUE¸–ây%S·÷ÎYNAç8ÁÞí‚k©m2ËB·in®&hZCÎÌO$½=†r ûVý„ð!sýÔO^ªqØžßÆ{VœÉ©æ‹áén"2Ç",Š>îI'Ûë÷¿Ž„R&9¥/úWüòeù\cwù^GÓé]¥«AªjWÖK¦îx«3®‘œõ*¼zœàäÖƒønÒÞ[‰Ñ%"r7ÆýÏ ‘ØŒþ~¦—´°ìyÐÓWìòâ Sožƒ¸qÊ8Îó›–Ú òƒ,ÒGkn_þ>.ÐìxÊ©=Áv=jÑÕ5˜l§Šx ó®¤BðeKBp­´žY±Ž:gÞª fkíF+]j͑ۈåˆBÄ–î:ñÁàôï]Eµä>µŠY º†Âæ2ÞT©¸ÄÛ€ ƒŒAäsøW'¬[­â΀")*¬ÈP0è¤w8u©ö¦µ¬w¾¼ódˆ1,æ&I?Ü#h繚ëœä68ȯ7ðíÊ6£<Í+%Â>áÝZ2N2ò®ÚmwKµ¹k{BÞCm‘Â’ ##=zVrZšEè[vìOqÚ‘¤<ðZež¡in'¶‘%ˆ±Ôä=y§¸8t©(j°#Ÿ\Òä¤ ŸÒ“!_•Ô€yÆqžOµ1Ç;C~”ü¼“ócŠA’¤çz÷ UÇsÉäTÀ ^xéQ '©âž£ùô¤ˆ~Qž!Ô]ZGc’¨Só 1óßÅÈ zê­lmmíÚ;{h‘w¸*‰€@b:~5Ékw—7^-ŠÆUef) mg+uK’<ÍFEÇúÃÎÒGÖŒG²\A¥ªH3jÝPz¦h°2Kt–Ys%†§¹œãý,.>g=DŸç•¬R8¸Žð²wêrvg sT$þÃiá;<>Ç?q±Ä‡¸ƒô«TvñMö94­¿1ĸ ;«â‹Ak'—"ÙŒcmVLõ2¾ÕN;Û)Bom)Ñð-Ä``|¼õ­/3nžQo—ÉÒåÇšˆ<ÒE!ŽïRQ´œ-²  ìÉš4ŠwvÖoæ:Å`¢&Ïú4eˆÂ a×zõüë.{YôØ'´·‘îƒÄÈŠör)_\0S’YúŸ§Ð\-Ú‹ˆü­V`èÄ·™ºrüª'ò§*f[ÈJË~a×kŸCT›‰¦É®Ÿ‹«+´ƨ­%³ä(QÐãŽwœäc'Š{cÊ„Çyk¶UÔé’:x‡·?(«ñKl¨« Õ³´n>IuW^cžIüªI#G¶˜› G•e2LFŒGÈÏ?SEجbÜh(ð m„a@ù2O$$õöì8ùyŸðñ‹a6òA$°ÏSïéÛ#Œ°Y6viP!'ÿfIÏï¹^{þfªû*=¼¯iüÎ#´“oÝ-ŽJç#¨õæšš9[].úÏiw8œœ…™Br1íëúNÏâ+f3K®\Â9*’NOB}p?Ôƒ]‘ûMòØê0/œØeVQ߀ø“•*kT骳¨·ƒÉLžcB£žã1‘œã¿j=§q¤y×ü$^(·\Gys2€HcSè{í™SÄ~6ù·JÅÚÁíׯq÷}ä{ס\iÖñF ©ƒÐQÍÁfsâÿ'-ö5QßÉo@}}~ŸCˆÿá>×aù¦û6s÷DŒg#ƒþyÿgwT–€Éh¸' ¹ ÷'?êGs‘Öö'‹@˜ãÌÉéÓ{Èz 9£Ø591ñVr ‹\•È3Á9R7dº>³Éãhôã®+zÒÈgÃò¨¿»8'Æá’¤ûŽj¹—blÙËhþXb ",˜n;I#œÁ<ídgŠÖMÙõne‰c¸„’ØGNàŽÙìy' »Y`ºD0»Ü÷È ä÷鎠Ó%·ÔmÚ5´û3ıít˜°-Èä6 á#§á>­£ WEm1¦eùVVÙqŒ7=øúÔš>œl4È ;hûªrªÙà9Ï©4\,Ao³ÝË4)Ο! ‘Œ …í×ò2zU‹¯.Þ f–DHãË+  çœñU-<9Ž·wœ\æ,}×çÛ¹æªøè²xVì$»|‘ß àÐѼ‚Ç=Ë[øŽ×SºFH$v§1.ÒŽ~m¡_¦ê‘ía¼×æm^Ù­bæ1¸þñF=XäžXäýNk¨´‰m­n§×ž ¬¹ ªèáTcnIÀ öàqšæ5‹}wûF‰mT•œ¾q#?1ãXäc¡ôÍl™5&Ôã»f¼ŠI‘KÆR5ÈÞŠ[afÁÀ,Í€f 8ª©¨j2_DÍ#)¦H•S€p†ûÀ1·¶#ïwö£€1ŠpÆñôÍ"rù=+€éœœõ©ç¸üi™Ý¸òç½.ÖÆqšQÈÀ¦¼¸}Ùäpià Þ–FQ“ú`|ñâ½ÖÞ!Ô<“ä‡%X1ަz~¬~•m¨ù71Dqì—õô5“ 2ÍU2Ê«¨©PËÓ2nü²Oæ+a™:3a(\œöÜÙçð5Î÷5"¸'µ‡æq:)‡~½éoˆ’9”$Éí”9®]mäš^ánAG8I>báF×`y HÈã#w¥¹,a–E*[Éc“Ç%cÇê XÔ²Äy€}ÒØg?ßçöQoñÕÚ5çØ¶ÄÆ)ËÊY—xç$`ÿz½±ò€Ø’zæzW¦£øþôMg-êÉdŽ5VeÆ=0qϵi¡2ÜßÓÒiRÙ¿¶n0À«å|µÿcÜÕĆàKƒ¨3‚P$kë÷@õäÕ3c4pyÚ1,c~î6Ü ÇŽþÿ¨¨þË¥yÁ›FÚw+`YƒÓÉ=ÏñƤ ö¶ºš¯›ý²ò¼ÉlÍ‘±g”ë¸u3§ºKujʨêH·eà#Žî{ž*´k£¥¸‘tû•ä %”«ü°_j¯?ö|ÐÌvj!Fòr·Ž’ß™ hšökÕߘ­œ– ÊÊ3‰óü'ÿOÂú6ª¸a§Ye<}±³÷Éÿž~ç½bÜ[骤­äèw¸"KÙ—8íêþ~¦µ-îôH¥5´B]²d¼ÞrûDúÎ!måâ!´ë|”ÝÌäœOU÷­5 ®‰: wÅSËcÒq–Çùk{»'–=¾#Úvc)48F1÷zpïš%¹ŠÉ¤º“ij,JAݘIë'ûÛó4_ ZÚ i# ä©(HŽß†òÁîþäÕ‡’Ô} ®ŽÐŒHª Æv©à+søzŠçFê¸Õ蘆x¤*°/—$s« |Ÿy±ÀôÆsÆMµ¶ŠÒZ—ò$Pf¤´cË2î89Â}à;U( šÇypöÄ&cÔ‰£J£ýpÈùO=ýuY ‹X¢ƒ«y6œ­ÖÞ##®1éù×3º§†Ö%—S´‚bÛqp†MŰÿ N(Ï8ëÆk² À{«VTS‚°0ÈòÇO˜äcœl¸ë™m8Sut˜eÌÝ×ròwÒ¸YÒÚ;›¨†±*+Å™ã ^B•›?Jï¤7þg1Û.½ÙsÊ{oZç5 .þ÷OŠ{K;f– ¿(•÷H¦%ù 8<gÔw§a=Naîí 4CSvBŠ[-&4"ôûÜ/kN/ý°ï[Ì“ç;FåRO•aéúU ïoÇžmãhÉ4…¤CüYÏ|÷Çû½3U%¹ˆ0Â[•Rb…¢¤k»m€ ÔÃy„|ÐNp<Á꾃¥ Ђò;¥ŽBºn¢ïó¡° –9ÿYì{TPß4Ã6…µX1ùîŒÙáGùúÕÇ‘'±I>Õu1äæ-§î?÷—Þ–Uíiæk²Æ@pK4Cø”÷OÇð¦•f°µ#ÇcewîfÓË“÷HèôÖºšÕWlRHÅÜâÒÄ®f'çº÷«âöÅâ$“%³ºXs˯ äTr<ÊÐê–ŒÈ@ÙVäù¹û¬?¼i_PhÍ—fdÛ¯F>l¶‰G2OßÊ®<³;–-.ò®M8¸ë…Ñ %vœjr?>_LOþµm ¸K·@FÑ€Ió!ô>€ÿúª¸­æijxfvëå®Gú¼w¦µ¬šoÚQ‚:#ÊH%,È| ]Ýøñ«zn·$qˆµ+r’¸€¿xTüÀg§¿a™«¤k¦M%Ý…¨_0eš@€4ÿtxãÞ°S[ÓôÍ&¼±g¹Ì‚?,Gl8 ÷åèìuéš®Na^Ç© ‰Uw;mÌ„ÿZ“zNü~?ã^Ohšmîš·z¯Ÿ5ԙܦcœî8ž>µbÓOÐͪÈÖ7$˜qo+QùÎ=vŸÂ§®cÓ^X€AçŒc%°=xÏ_Y&7_Ƈ7®+‡›CÑfØ#‚H£,>öž£xã-=ú“Q®•¥Û\k´EýÛb…‰ò~àì?_¦æ; µMyš­˜ `’1ü꬚χˆÀÖìWþÛCÏá\²Ï¥GglÛDž Ã÷d8õ8­X^ØÎí£hÙxÕNTƒµsü$qG*AsGûÃ¥6.¡m!#? üô5xƒEPTHò0qhçÛ²úñYÇç44 „~ Œ;¬zf©&òVUã¶XtÔ§_c ²h—£pÞyC#8þùö¦z$ˆý’Ø2´c ;pßìZŒMtÖ¹û8†L‘HÆAÆIOÂɈïÃl]|î(A™=}}i©â=Rlªh bO'-x£ מþ”é.gI·.íYnƒ¾<FÜ}ÿz¡«Ç¥Å#ÝZÜCš2lgcóÀ'°ý=9ªµÉ5­õ-FâöÚ"‚ÚÕü¹w± 6:¨ER¿ñÔSé–7°Ì× bŠpTt`ã†Èô®Ãڕ&£t³‹Sæ40¢–#=»Œš´š‹i®©}`¦ÓiË•´d©Ú@dÚ»¸ ‚rM!s´Ö#ž}x¡¸KyŒ$ŒJí ŽAöÇõúÐÒ.ä·ÓÑ/¥ž{™>bRuè߯ñÚÄIst&½¹šÜî;À†ç1¦á…À ÔŸlbÝËi0ÙµÓYý¤Åa$ò;¶þ@wR>œf—(\–öÍî¥=ÕÅÌnÌ莾^Õ$F[†8Æ>èãÓCÅp}·Ãw–ðÊžpA"*°É`A_ÌŒ âW_ÒÔȰÙÁlƒ&Âw6ÞN:oq’£=+v8tíbêÒïûJÍå´Ø˜uVi6¶àû³žAéЈd;X.$vÚæ£$W23Û·‘ÅÀY@0x炯ǫ æVîæ fb«e$ˆq‡)òÁ,ªÎ6;/àÝy5­ÞÔ!{`¯,Íi•'|l>xr=ùsè= 3MÑmõ[åµhJG;.ìåŒGqÁ›$d8ÇCÍ¢KsèöºÜjtʼnɸ‰†Ç\çvtí†ã¸V6Vk7S·°Û£ÏvÁ,sæ¨8ÆIô"«Úéz¤¶×–¡¥‘£Wf·…™VA¸ò8*àœ‘¸dàäŒ`Åknf·KóoºŸ±ˆœó 0Iá‰#ƒéÃ@Í=kR:¥Å™¶¶y¥ ˜ ä–Ê–1°)<°x­Èl5û3¡o •£ÆP[G‚áOLpààñžÙô¡IrAüèÙ¹08Š‘znë€)\GÓô©#ÈùHPµ3#4¡°:æ“ìWw~EFÜžGÊ:óJxqƒ‘‚sHÀdàHê(ê=ºýi»r¸ }i‘ïS´»9ç“RcŽÆ„YH ê=ªµù [@P?Gó«¥*ãToù§vu`=ùÊ©aIÛœdöÅ[Òvù÷D67:’ öþUHÃ#å5gLÊêW…+±9÷è)’ÍgbƒÁæ“=?ZvÀ3r)›A]ØÇ=(ãxÅywÅ”Q¦DÃŒ7SÚ½U~`F1Ï¥yŸÅøñ¡ÄÀ<üã§ü)ÇâCGФy\ÿZ)è¸^¢Šë¹™õ¸Fc(AÈÇZhl /ëO^1Çμã AÆ3Í9À<œñB€£9§žŠxö c°G\b˜Ø çö§ì8ݸç5)Ç:ô4á~=£×µ't8c‘Ÿá#¿ãùú’4¾’D£–A÷Ž0Ïð¬ïˆdÿnß(û¡x,½ð:ñŸ_Ï=2kcáýšüÓ£(xVã>õ×'îÖ¼ý Ã_jÎÄ׎}¶õý+e¶>Õdʱ‰p=77_ʱôEW¾ÔÊ©ÏÛÐGRÿÕ[D+º¸Pa!Èëó·oÇõ¬^æ¨]èéȸ| ptOõª——Z³;H¯22¡XË…AÉ sŽHöÍ€«"[³H^>°·ÿ_óªZ¶“ï™;JèñÀëò’3ò¡éÐôÇ ñî©¿p±®BýÅ;HvãŒýñ\’ú_Ž®$IãË”‘Óp\aØ‘Ø^‚0ä©#±ü@öúŠÆ¾²Ófhï/R ‘”Û$„((O¿N}ýj”¬&ŒûHu8fŠ%¼´Œ(TìÌvãÉóÓÜ~¾¼X°û{I2ÀAØF"aÎØ@êÇÚ§WŽ[ðÈêèÒnR§;¾k~xÿ8Á¥Ó‚€d¨AöÛ57?:”6ò?—nL0Ød„ú¡qs~î‚ĺ¤ŒÑ‹Ã¼¬ÉÛåç©­‹ßžÎdHmáÇ÷Šó;SŽâïR¹¸º½ŠêYÙbŠ5bd,1ƒÎ>_¯¥TUõ:ù¦¿i7½¥°ÃIÒá¸!fÿ`=xÒŽ[³ &ÑXùÎŽLî!ŸÔNõ€÷6òÛ¿—v2pñOcªÿ´?_ÂìsÛ#a¯Kó?ê×s‘Õ:ÿž(KA¢Í­Ô±I]2âEòÀÚ­@Ä\òþ?Ozå|O5ä—–ðE¦Có0/ ãA‰æ'æõíô­¡yd²FÇÄìLrð£1ÿ±ì!XÞ"X®­·Å¬[ÞÍ#F³K–pxƒÁ^8èÄÌ È¾Ù¬Ã§6ŒË 6è(BîŒí]Nâ9ÏCÁ¶=·3=´ú(kK¦s ‘Ú ‘2Á”›åNA ¶pG<г+Üyw6ºôfx¶Cp±È#Fu²ýÝÀQÏ^?¢¹i¥i"ŠÝ®¤.ÌÒ”1ïgä’1©É^¥‡NÛ“Ø­´uí¨²‘%I §!pa€ŠÇ”sÐd×I¥Íd¾2ÚÉ+%³‘/ÙŠ±ÚÉÆGcßò®`Z½º¦•¤ßZ½É‘DÍÍ£6>ã Pxüǃ]Õµ­Å¶• pêP* p74e›î’IùÇ=óÇZ‰4R8§Öü¹ÞðÇysoæÌs̪ƒ#pPF;u­MY³ž5ˆ›ér‡’+‰ü¸ù8ÉÏ¢ñŒòqÛ5¤ÚÌš›ÜBÓprÿ4Êó ì2ã=1Áç”ÝBú]MbòÁ6쯶@e9,½Œtè8ì·Ñ ÉñE®œ"[ˆç’ÞiP7Ì®Kœ(ƾÒÜ÷ÀŽœõµ¬Þq‹ûR•I\†É»Žß^¸þ,S®$¹ºœ<ÎÒHB‚Jîe8è8öc8éÅOþ—&Óo26çf}@å9•wDÐn-­¾Ømí%‘ÐH¯$Ì…NÀ'ê@­³sªH¬†ÆÄ0˜øûn?zG_/ÔcéQ)\´ŒØ.mNžTxŒcÊÈC$<µã…ÉôüÖ®­ýŸÌWÄP>×aµž#æzžƒ4–׺ªØ3 2YÝö¦Ïúµ=ãôþf­Gs¨´Ž’XÙŒ—Lq‚ßôÏù鞣!ŠàE Š-VÍŽÓ·÷`ämAÙ…,Ÿkx ¦£eŸ;;Z“ûοë=EJ³ÝµË‡±¶Ü2«‰·ùgŸà£õ¦Â®ndYôäà‘”ôwõÇù\ ÞMÿöi?l²eHNZ·f1Ÿ3БZH—1È$ÖÌsÕc+ÔýãŠÉòãkyû9òˆÈXøýÚó×ßõ©žÞÑ€Ç÷óóó½Þ‹˜œ +¼Ó÷܃Ÿ3>*¼“^\Úî–O¾>¦vA=öª‹khÍ“á\ÿ{e¾Ïé¿5^mN—ŸøG‘\GÏÉþ{7rU¼–eߦØÑÊgn” }zUWÒ–hý#NÏÚ[9`rLãŽS×51ŠÍ% ’è0ø à뎇žÕ$1Aå”{[° ŒTaæœU[@¸Ïì«1*Ò,»`lUé‰8û£µ)·@.TéÌO›¹V6Aü Óæ*£êzeÔ¾E¼Ó9A–U–F ì“=®*I ŒwÎûMwg£ÜrG–9Ú}ûRW@2;$ºic›LÔ"ŒÀk¼dï?Ý—¯¡®kXÐôíé$wº'΢'c!ÌgŒŒœž¼dóÖºk[«Hoæ;µ(øRL‘Îp 9çp vëÇZÎÙý©pð6«%”QFŒ7í,àíè01,s銨ɒч§ØËqûøäb9m¯nÜ‚OBÑòJ» &mÑ B…ŠÈþYP t€3‚ÜzúóZZ}®“ »4¾#06öMžt@`9ÆA_¥?KŠÓìAÅMž4u¹Â©(¿ÁýÐ9ü{òÜ$2em+¬:¼{šXÙü×ü²œ–à|µ#jPï€Å«éäü»Ë€vá\ó‡Ïê=*Þ›n÷ rɬ.V}©•C¸¸}Üwfý)lôýJæÜyz¥¨ÈñöŒÄíÌy$8ì3øÔÝŒ™5åÈŸÛ[) Á'àbN¸'ñ§’v¹šL]XJ¾sÚs“Àíîj[{ VþK˜þÕLaÔ?Ù˜hò>s¹Ÿø-ÅŽ ºˆ„­„¾{1‰e´l1ÐöLΚ°<öT1[ØIþ¨Í·äÓÊâáI¤hòdFIy‰ãsùçïR\iZ™Ètý)Á‘i™‰;xÆ<®üUk]2åí`¸ÃÚTèñÆà 8ÚO9ŒzŠ–×I€E‰4«"&o“’[œ”笠ŒÄ¤ ¡bV9BtŒ>aëYì×VÉáh¢/@"¸ŒäîÞ¬:úûTòCzf!ô9Ñw9;.IêwéÚ“L¾Fn]†“ª3q¶äŠxÿYKé{ÌŠ“Ÿ'Ú2[ã=*ºß$нøž6$¬2ÎÛs»Ž V²í:n¸’qÓ¨p9ûÊc6g r§RÈ‘0sdäqÞ¸ýkHŽãRžé…ë+e0¾GÊ6‚¥:d}yÎ8Ín¦§4†;=Tº´{‘®OÊqÎw?\b¢¸Õ-æÿµÆ|öm­sOL3óÒ¯©,­áÈ>Ï“5Æ¡ ”#tV‡Ç f?§ùæ¥Õ]xzÆe»¼¸’Ô$Â-ö¸#äÀŒúgÞ¤ÓnfºÔœÙ¶¦Ñμ–ï·v3ÎHä‚}Îh³k“in²^ê `=Ý:SnlšÛU’F‚õdXË»BÕ€‰˜äàƒÈë+,}ŽÖáÃOË ¤J‘^ÜRƒ´Œi„±ÙЃœÐÀi_”'Žô‡ T‡*BƒÉç¥!@NGP:zÐ(Æ0G¯Ö•Û?xôô¨òp8=ù¥RA?…JìIldñùUò?rO™x÷=¿Z¸Jäãùª“ìŠ7 Æ>™`×­4è ¯çÞ¬Ù+ ¹<².{t'üj.àqVlö­ÑÎì”þ£üiˆÓÁ ŸçL›*fUïHçjœô€#SËcÔÿ*ó¯‹kŸ FsÏÚöZ½†ã­yçÅ…-áb_‚$B?ÕGtTw<{ö| )™ÇWv‡3nç×ùÎ2£¯jzá8êOÆà£´å€Híž+˱Ø<Œ“‘O|ídd÷÷5¥ðn!ŽbÇpäÿ…`ÑqØ’2ÞM™É8(>£Ê4²¹6—©äBÇöÎ?Z†ÖFhm£USþÙ5)lZÏÀ, bp8ÿWK(¿#xûÜpdÿ©$PÝÚÃÄìØ¸°z¡‚8Á`ƒ¸»§_š:"ˆyH3÷v€Opý–„´§è±éwyQ½Ú@B-‰!# 8ÉÇtéW´ñþ­a•P{mƒŠ³,.VL“™ÿ·þ•—ò"~Á# Ÿúçøʘ˶+o.îNé0OCòËÿÄפ —ÔµÝ;Ohć~ëŒc•ÇC–Èí]µÞFDRß<Ÿ.xé=pž#G³ñ›Í$4w8E2‚T0U ñÎ2Þõ¤; GIm-õݰ–)íY|€ùL9>hÉùºò1ïZp6 .JÆöÀ+·ËaüRõù¹äò+“ŠÂÉ¢eK xÊ¡ûÚD§޽8Áü½*c¼W³·VÆ‘.G2{ñÓ‡û45`¹ÓF·À@<ÛbC`‡Aêj¶mF0Ûlª…‘‡dÇðñßò¬¹I·E;Át™—wúz:|’Âëy ópéwo•øýi!»/¼/;ßE%ŠÛZ&%ýʹhƒ¸ÚN6pAÈcІox„ÇS^ÚÊ‚o"É#·›½Ø ©‡>Õ§æZ ˆÈ·|ÇäÓgQÉŽ0{f¬™­Kû»T'?f¸É‰?ÃíC“DØ©¢è×VÄ~Áis?’Šg¹»f“n]€Ï—ê? WáŽòãI„M¥iÒ…p\ç÷cc<óúS!šÞF„wKò(m¶×#<6zùSUí«þõ©ÚBvŽâóqTBf°~1¸óò®>÷ëE’M ·.s÷€ç$ £¦U½Oô¬ó& ³\5½ÅÛ7*sP-Î;RBÂ{±hÌ5EA$Œ<ë'Î7ž¿8Ïÿ«Ò™¦_º[Ú¶—.íåÉïž¿¼ç?LóTí/u(­” .°r~㜃ÎãÜRéú­ÌVq ×NIÛo!Ïýqþµ6 —mu4Žóõž@7€ ÃÆ_Ú µ¿Ò%´tŸPÐäÿH”픡Îd>þœþ4Û=fHíðd“äÎ`“$ï=?wïúSôíNe·l´»¼Ö?ñîç‚Ç¿—NÀP±]®nÙ¿°6³‚@˜Æ÷£Hoþ*„Gsl^ïV¹—jèÁÖXæZ1µs“»8ùzj£es47g"è¶R êpsž8~ycH.¡K]FHìíÔmÓ‚FG8={cµPãmAÖK`žL ¸6å©<î'ž;sÈû½jÔX–i6Éö[‰ äì1¹È##Ž~vÀ#qà~µœæ˜Ôg±·¿¹ÝË>  q[Ä3ÊI'žIà‚@"¨èšµÎ“2AwrY$m9—Ëù¢r»ˆ^Ãïöúõ©u[Ø’æù,ÞÉm¦Q°ÛD¹sóÔ¨ žH9Z«h„iî¢UŠk•˜H1ÄjžköÛô8íÁ²ÔF^½}¾@%Ž7‘Œ¤8È%Aaï€vŽãiÇZî|£;KYæ–NHà€O_äGN6·­p+¾Ö K­ò#I¹úq–nNwuÏZõ3G]1aòï.4o’͹I8Éä:t¦ÒVUÙ¤ABp9Çþ•yá« «ãxh.w‚B†AÓ oÇߊØc…ãÞ‘ f<œÖhÖÄ–VÖQ4pÇ€Ç.I,ÌqŒ’I$ð:“þ2@ã¨ù§}ÕcëØÐ¸c´õô¤Û 8#åéÓÚ€À®pr) ‚ÇRíÉÍ?8U8ö§†ÁÀÁÍ7hÛ“œŽ´>ܦ23í@?+ƒÇ4ßQÀàç==hÂò MŠ1ótíHPÉ8ùz~4â™9 {Rmýè%GÝÅ1дN©Á#ïzR¢ìT<*@p·J  óŸB(ª ’HÎj–¨BÛÄH-þ‘¹‘Gõ«à |­ŸjÏÕŽ,£ÀûDÓÍJh ÒyÏzžÔ/Û@ïå9ëî¿ýoÊ‘QA °<â’««Â3Ö'Ï>ëL yÚM‡`cšŠ9AS“†jw E@Fk1Zà.öÛÜ“íI»®h3.ÓŽ•çÿd² g2)S×ší¤”œ+´óŽõåÿ.gQD‡00ù±ëUvŠŠ< õ\ÑMù‰èÔWiÌÙõÐÜxtš‘¹JË´|£¥5-šó޲E@HQœ÷Í<’ #)¨H9ÉÍ( œ)òß/OÒ ‘¸fò©†9ãŠÎŒg=¨¼O+Ûx¦öÂHÌi-É~órsž‡¯ZÛ±_ø•!c–Iس»9%Jd€O89ç½Cñ6ÔÁâ++ØŽÆu~˜*x9üJ’.m>Õ",KoVŸg ‘ógž®¯²Œ憟yötA-¨Þ؉cUå±ßéŽkZÐX¬J"Ùç—Ã9ÁÚO±Ç?cÃqp€ F_œG ¼QGp;ç5,MkpÊ`åðWä+»æÎxñرö¬Ú7£Ó5?g¸š9A$irÇ#ëþMLtË´I²ñºH…e ©DS¹—#øüMfZ,ÑmŽÞ誂²H÷}áÇLxêÙ­$Ôg¶HÞH‰Œ/X›x$œv<ÿÀCzT±¦[gš ¥à*ãÔüËÀÇ=nÔ×Õ«¡–5åä|Û¯aRÚÞ¤¬¥d ãäl©Þ}~ï Ž¢­ùQJ xâã "†úu5#3Kn¸%Žâ<Ë_OøéRØGåØ"‚@T^{}ÁN˜™„{ãòÈ`7†ßßî¶JŒ“ÆEDc»µ¶òš#:2`œã‚pü À¯ l÷ò 8äž}ÞqXž$Ñ×W°™×+tŒÎÙòÁùFNî3ýk¿ò˜ÈûMÇ2íM>Oïã={×'pšñ¬—æ>>ÈêÎÀdŸ™F߯aZBDÈÆ’¬Zâ ’ÆEC’‰¿Æ~ñCÿÖã†'[[)bóÑLM¹ÔÇ»’®~^sÁ8ÍTdÊ”žï U×2Œr·¹éÔ“íQZÜÝé“g»H>þG#.C(îÈfè ¶î‰GxgŠLmÔT–‘ ^N;ö¥‚éPCºðòT•½¹éT”_¸;n5gRÜÒØ¼}@ÏJŒiÄ`cý²Åð çkzñX³DMÖ<Ï3P¹G*2?À>CŸþµNu]WU8'”´ Îzf#Q@/òUSY c6§bõç=jÜ-rÒÑêKë™ ÄÞ‡Ûô¦&gO025-m¾e$}€¬ŸôÇ·ô©d”mˆ¾­¬qós`08lò «D\´QŸô££-p¸þïþOµE#ÍJ¬¨Œ–kÒ¤ ¬xÚ¿OÎý ‰&aªkgʵ€äíôǧ–k¡|Ú®²lŽÅ­P23œÃøäã·­C{2E±µÄ£n(_Tq‚OSÜóŒ}h=ü,Íu=Õ§”›ŠÅý±)bwdNî`äò3€® ƒÄ·W––†¶jf9eT<¶‘Afnv gBO°¡§£O<-ç=×Û£hrTí¶b²QÇTàóó‘K4W†B{s7ü{âúiºîënêLò éÀ$Oor§Hòâ}“.%‹g©ƒÉY€ïæ/¢ÚÄÅ­óM 8ÂPB¨ñ‚8ç?LñJ÷ÄF|Ï-sŒî!¼³Ï9<ŸJã4Z äÙnUq‘ºäã¦9Ê’°{]e®w|¯›dE~hø.AÉ9ì ôãô5“Vܸ‰ý¢÷,b¶Ë#‚0v‘×’0^qŠ›û>þi ¤·DY$p3œ`gŸLzÖÌñZ Š(Ѝ¿¯©÷®GZðÖ§©Ý5µÂÅÉþÕ*ƒû°…Lj@$»=úŠ•a›i¡ÛÄ[‹›™ð3óI¤~î üsT´ó¥ß^4VÑêQË4FV2ùñ)hþ, ò:WB±•„)`Ä(ŽÕZÃM·°}ñ™™¶„_2F}‹ýÕÉ8禰¬W·Ðìã‹bý£ Óý*^Ÿ÷Õs®.W[}Öɘ)VYîhü¸öŒ’?‹œð¤Ÿ\WnpS'ð¬{¯ Ù\\Ërït³»¬ŠëpãË`¡A8Χ¯Ò…!Øt>±‰H pO'þ>d#$ó»ÜоÓ¶•ògÚsÖâLŒÿÀ«`d(#œ{ÒƒÎG“lv1SÃZTE˜C($c?h“?ú#øWIyCù^‡í2g§ûßçšÛm»ƒc"6ï›°â•ØXÇÿ„sJÀ&ÝÈ ðó;ÈšcøkG0ˆþÈ«œå]”Ž1Ôô­…ÆÂx'ÆhñÎ)©0h翱ô4,ÙíåbiÜ¿à3“Èÿ8«‘èzr¸+ ^Ÿ¼cýkS‡O‹[–KÍîc(›îã]£npFßÞÎ~'oE¾µÔ!•­.VæÜ"J­œ àú‘œU2D]ÅV@@$lLã?‘¬íSÃÚeŒ÷qÚæDù÷Iy2¨Nâ ížÆºLqÉÅAyf/mL-4±å”–‰¶œÝ€{r)'¨ìrÚ.g}Óͤ}–Øá`Ss#»rrÄ»ž0<íR_x.u‰MÌÛ¼©¸Vö—ëƒ[ÖXÓ|ÔŽyž99 #ä!ÎNßL÷µ£´0#¹¡ËP±äRZ*f³Ô4{Q#‚ÂFŒà€2Nîž¼ðyéÅJl4Ë‹¯:Fe r¢¶`“Ž w=¸=9¯L¼Óíïí¼‹¸VH†ì}G¥pš§„µ 5š[×¶¸æHp2ã·nO|ÖŠWDBÒ˜ÅÂýâÖñ°Vôùvàõüºbª-¼w­:Ec§N‘¨!â·hCdvÉ’p6ž@ð+U¶–ã+ÜÚÛЇR¼ƒÓ’zžÀã=,ÄÑÇçE-Ì·6“/4…¶„'Xdã$týqŠ»MykhÒ¬Ê-¦pJý¨2÷É>b’3Àä g®iÑZjOÖöÑÏå"e˜2°'žw óøõëÆ'¶¾…Z(ÓÎv—çrdXW¦T1'·=HÒØìûEš,3où$‰B±~TÔF3ÈÝÔfP׉ôÖ±¸KÈÂy ¹Lm€‚qžäïŒzë?OüVV«°–L(‘»æÝÏ|äõÕ«‹èËï#"9³¤êDócr8û™bOãÁç•Hmô[TÔl´£‘Ïœ³yŠãƒÎÑî@úã­^è”tzMŒ]ê¶Kµ¬‘Å?”À•óxlz}Åúsør-m92‘1=¸,ÊÌ5àdd³tÊŒÉ#°5Õ$ßÚZT–Z]ÜbîFat&VI0 •PsÇäŒs’Nkmn4ϵé'N7–k¬£6dbÛ²¸’:8ù}ñR†*hs-Æ£ž.‹Z+E2ÌÁŠ@î8#®HÏj»¬[Ei :u¬AZ 3µΔúçÐVŽukË)"¶±KPÑÛι‘J‘Æ7Ï®=3Ír—òÄ–Vá‰ÎÂäùq,7¾Ivÿ íƒá$–ïÄòÜ4é³dƒ7°ü«³×-53©,VþMÑF‰öyÑàÌ[vãÁÚ@\ߨæ77! ŽILr8³çóÇç^œ¤ öÆ?ç½MG¨â®PÒ-®-ô˜b»R.]”¾üe‰·85wx\ †¤fê!y0ÉÈ>ƲlÕ USè~´›G™œsRçŽiüÀúÒÛó瀪±Ç4ðî”Ý©“Œj>2ZÜyÏÒ•ÁP tJLq·Œ{Ñ"‚=Ò€Á@1“ž†(Ç=Iè{QøñíÅ ž´!’p£?# œçqŠF`¸ãXœįøT!±×¦ìT¶¸kœ¸pƒïȤ·jäÀÏVVpGÊx)9Œm;zb«Èzž é‘N¹™,²[LêX•ÎG®=+Ï~"Ÿ6É[Ðш˜ÿ #€2î:Ö𚵌¥·»áuù ÈUÛÈ ŸáÏÔgñ«2..# Hú>Wc’@ÿ¾}=«ŸAlºƒ‘$k c'îÜìxéƒ×>¿Kq¥åœ@oI“nà‡Ï<œcœì>é´I¶¶óÛíšÚa$ySå±è  ç±è2Ov«ö·‘¹ˆÉ˜œ›$8l p õ9=Fk ÓPJî/JëòÈrN:.z±Æ3Žœ+R/"x rÆ0¡v@ŸÃ'¶ÞMCV5‚ÚÜ’g…H$ÝÈ=B²òNOJ•!ÎÃirÃo,}ùÝóÝŸil-#­î™JûÂä}ÐIÈ=j™µ ¨Jû=ûyÜ«¿ŸEkzsóT2®[šöúÚØ·”’“|ÃǾá“þy­&¯â_ìäCà¼ÁÝÎ:)`y‚=Ïç¨ú­¨ÝÜmxØŸ-Ÿæ ú‰9éÒ¸_ Ë"EªÎ&Ù=Ê?ÌÄæ3•=ù#ñ«Œtg^×Ö’\Ϋp%´ >I‘Á ±Î9ëVMžò­lØ”>îQ¶TûŸá®=«Gx&³û;‘3’Ò£*€Ç<“×»vúÖÔ6ö³HJE’ö¨P{àÒÊöÓ%ªÚœ."I máèˆ8êq°žF8ªPèlö——-©=ÝìÀ4³¬JÔV"5RŽ{çšê…¹tw—*3êdÁ>ç5R÷K12_H®ÝØE`sƒ³#­ Wˆá—Jñ¾¶‹æEÊÊ_*dóßZé຿*ÎÌEyK¤¬@àqÈ‘Ïä5;Rðô:µ‹ZɨoWn ·Fè@_ï\Ž›eökçðÖ£¦Û^Þpm.%Ç1ÄAÈÏ8?-DÕŽæW¾|îžÍH‘sû³ÿ=?ßIµ ’V/®iQc ãæny—Úª¤N YáðõŒ줅l²Ÿ3¸HÈú€x«‘ÜÝ(Fkd…ˆ\k+(ló´zÒ¶£+ëbÞ/øži/ˆÁ )ÎÓùiôRÖu£l&1êï2IÉY@Å#ÃgŒ}~µ Ï©thAX°wiòöB;Æzþxª“j ™ã¼¿±@íÎð±îȾa §uùÆGO!KdNÒÑ‹ Ê3ÍH—ßÛ6ûT…Ð…‹Ì´…烂{ûUëm:ìN¶º¼{X¬±Å†b¥°A+óc~rœd1Wá·Ž7êzÌŽ É%”L˜×Sm-# m¦gÀ—PbÌYƒª«nçûÉÉê3ÛœJÔWi-¼.ÏöÉ-±‡utÀR1Ç#úuÇÉèõH¬žÝîKØgÀ"]¾IÈH;þ~„VÆ—w8™c²Õ£úMçœs‚>]ü®OÔ {Ðɰh”[”xu¶'ÖìŒîèäËrÏ2ÜÊË”iËŽ¤÷$òqy犿…4W!WJ²;v³ÆHv+Œ`‚œz“ŒÑ$˜Óf‚ù°I4“ÛØ*ãpߨ9'å^¿'ùɤ¸“Iy Í.‰àÌVEêÜrTÿ‘U ¶¿¶òÒÞ-/Íû…"µ%W…$0Éù{ |—šÅ­ÌItláó>P"ð@à“ž½?ÀÔÙâEo§EŠçÃû†ÞVÌ>èí&:ÿ#R5Ô[CÈŸ2ð°iï–Ìg§_jº4½b{˜ÜjÍk Á¢R{p¹^9ùö槃Bû$R!»º›$ w”)ÀÆP)ãÀõÏz.nfÇûòf¼¼Ô¢*ÅÇúA?1xÀíŸAާ¬Ù[ùñrÚ™WˆpsÁ§9Îy ù°@ÀôgÆx¤VÊàŸÀw¦nqõ *ûÀdw .:ŸJnïœm?8Ù }€E]¾ýx¥nsÓp=i1ÀñÇ}Òx?\Иڅ®¦o ÆŸ{n ®¼é€}ÃT3•=;u©t‰Ìö¯4öÊw—¦Tî`È#¯O¯¹ýFM×Ä7)žÎgÚ$»ˆ2*6Þ>¸F1òž3ëšØÑíMœ·Jú‹ÞÏ3,í#(\»GÝÀư­:kÈ¥¾` öÍL™ þMByŒàäÓã<:žj ªA9§ìPx |¹8Îx¦Xà7S@ç=±Iœu'¹¥¶|ÜÒøõ§p9]a—S¸š¢AuolUI%ÈNÐÄF6õŽëÜV]ïÃØ§]Ö7ò[ŽJ£€ê2@vÎ ú×gs¤X\Üý¦kHžr†2ìƒ,§øIî=Hܪ¦xÇN=*ùÚØV<¢÷ÁÞ!²më7I´¢„“œ{îçõ¬;‡Ô´Ç ue4I*Ñ‚³tÎy èE{žÜQ3ŠçÙúö«æL–¬i[ȺȓN‘lõ(2Z_ Ì8Ü„ôȃ׎ß}®G=•Æ¥slñ]ÄÝÂÈT<¼þJÎ É=k•'RÒç‰åIíg-¹|Ï”’`xî Žæº¹­Ó_Ò|È¿w%Þ&‹v^t^1ŸPO$Œšm D6 }«\[Ey¤[À— Z;Ëq´ÆqŒõéŽ9=ðkþQmfñ–(ÅT Ê¿*㩃۾~·[ľ› éi ŠvíD’ÞŽ§åcÏr׿yt¯\Í:Ýjñ¼ )¶IXôP½sŸ^O^™!m¨ŽÓÀ:zÙiÑ#¦ÙŠy²`pKž?Ší@ç¶>•ÏèZ–œ©"úÒK»¦Ï— ±òä(îQÃÔ×Ažüâ¹æîÍb´ ©'<úÒ–ûüÓàÙŒ€*#’{}*7(’1Éǽ498aÒšW=@"ž8tã¥9¸ïÍ"È àt¤ùO^ÔÕ»#œLDŠå³ØöÍ‹`¹¤,d®Iõ¥RRE!r|ŠDl{sšypÈÉÆ3Š©y}kaµÃ•.Á*–,ǰèi 2<@º¢j67zTpË4I(’›h‘Ì€{”`ûÔ^1±’ám5&ÒïÈ9†ä`÷[£V¶¤/”ZOf‰'”ù™\í,˜ …$c9#‚GNÔ·6º­¢Ául“@üìu¿ãî?:µk]Y£m :°nWÀƘüéÇ=ñ\Ö•á…Ñõ¥¸³–cdatòd²ÆÅ“îƒÓ8>½t˜Âß8¨²)ÇŽ:Ön¬Á¬sž<ÄÀÞ¸«ù!ºÕMwY9$ðAÈÿyj1Ën<çÖ¬[)k•‘´ò~£ü*'wSÏ=ªh™”l Ä;~4ÀÑ ô^dbÄ Øâ­Ù®1ŸJM B84d\ùñͨ]VÚzò+ÔžnOqǵpŸ­¼¯ Nü±é‘Dt‘Hð‡?6qמ´P{|ØãÒŠí2gØ 6ŒîüéìC Ši ’G9§‚ãð¯4é¹vsÓÖœ¼’;Hã qOÇçž´Iã8Á¥à ¹jq†0h`WŽý*m£¹ˆÅ*«¡Èe` ú‚0jà]ª9¤LëøQ{ŽVðW˜Àé÷2@#!â·bYöÛžœýzý+1ü?¬ÙE$mh— «¹|¹Vaëœ7áÍzQUc‚8›Œ:ÓµZ¨Cäš¼wp¤ÐHEFEná·j«Œ¸Ï¥.š“5¤‘LrÆç‰G@+ÆÑxàuÅz¬¶ÑÏYcIòC¨9ÅbÝx^Ö@~ÌæÆeä€#<ŽªU;’àrvz¤öómš%†6ÈìbFzëô®•f½… f " I÷U†T`òÇœp}8çÌi—E=ìIlìà·Ê]Õñìp?AN+@.ß§Ã »x‹ ” r@¦[héß¿ÐD³ÞÚA(š)ãRÄ*·Ï} ôõõ®zK$Ôæ)$âßh 4{Ѷ©Jä¼ûkcH°ÚK5õÔ+½Ë²[*¨ü8õ4¤•†…¹¿"&KW•„LÀ¯íÈü*iµq ,SBIêÄq¦²kymñ¦cP6¼ŠÏÓvÏJ· º+î*Aè&\~MPQž5» f¾@œß§Ê1YºÔ:n¿ ;uŽñ̆åYCÆß§8­üFX—³ÛÎÿ ¬`€Vãë(?‡ÑpÜå´7 `Ô.±Ìð겕‘†9ÆðysÇÊ=kfk} K¡ Ã=ÕV[]-Í÷L€îN0?VÙäù|­2FéÁ(úüÞýªÚ<Ûy;ùÎ-¿ÌÒ‡l¶ýáOA!\R¸ìsÚ¦‡}<’Á(±2'—'–ÌÞhí¸ tìTƒ×žÕ{KÒ¯VÂïîÝYI8[ƒ§ÌFãÛœ‚*÷ÚA‰ŠÉñÁÚZ_Ðb¡’úÙek™z0PªžàóùS¸‹iÖÖÙt‹kõcøžMs7^.-Í¥ÕÔ±$Ñep Èœn*0ÀÛŽ{V»ê Ó´1Ä „Ã2ºúƒÇò¦Ÿí)Ÿv|¤ g9##qϤ*ÃË•b 'Ý gû£9CTI²Œˆm¢I $m…}—Œgךž=>1“+É2d‘±T#Ó ú ·$L¨¨¨@Ûµ8úöî2EŒÌ] ­¼mÎÀr3ŒÀ*Km&ÏM‰–ÞLðØå'OLð¼׊¼óªDØUÛÁÊž¿Rxè=1UdºŠÝwÏ" MÀm¤qØ»ÆOlñƒ‚ácžÒôÝK}­Ì÷Wòù`·™v¶rÀ ¶x ױΗ—‹Ha‡Ïr¡p9Uïè:qüϳÞK¨LD)åÚ€A”  ù';AíïÈ#;¤þ'5=¦mbÊÑ«É(]¢IX³è9ÂŽéZÜu=ñI€@äQŠÏ™•ÊŽWJ±Ôíî-^}+L†”°†MÏ”mäç©®œóÆ;SŠppÄbª§;¹Ç5-ÜiXnÐGп7éû¸ÆFiHç‘Hd_w9é@8©6¯N´¤|¼v ÊŒ Ba¡,ß'#“銙˜ß4ϽԓøÓHÈ4ä/¾iªxäqUí¯ã¹ ª¬’F~xäYyãCƒƒÐ㌎ixïÍW»…¦Xå@¦X\ºo8 ƒÈö'žÕ$d“¥N1ƒõÿ8©¹Æ äõÝP\}–.çÒ\4åS+†kU¹ ‘éÉô­,jÿnÍÍÕµÕ–ß’P¥e¶@Èç×¥XÖn †Ð«9.­ä}Ž©™Ï,¾œsþEfèvš?ÛÖmþQ^Þ9óÈî÷=*út€>Þ@û¼bœx õ*à’{Š@2["À8ȬýTãL»ËvÈ…i„œsÞ©jŠ>Á*çœHéïT€š0 Óô⦂0×äàá€'­GÌsÛµIÅÌ G=ø4ÀÐ*\30äàdô ( uÀ©æˆ8#¦iq“ÆëLEG›hû¤c=1\¡øWRP¼¤{—ðÁ?¦*ìŽ3OLW;ãuTð~®vòаÊõôÏÓލqG̬zQQ6sÞŠí1oSì2FK.1ëN\Œ¯öÅD3·’=ªXæäšóN¢BãRÀg¯ng4†1X®r&¥S€I4ÖÀ 69ƒ¸­#$C‰–±²ËæÜ7úÐHæèüöÃõÏÐô­KhYÕ|µ‘‚0# €xOoçÏ5 ÿè„L‹Ô™á[OAô÷>¸«ñꬨ|Àz‚ÊcÈ9Îc§s×5Mt¶Q¤2HÒ921òÇšÿ0ÇdÈ¥_Ó´ùtôbò‹¨òAoÓ5”š²œJŒ<£†¾P?8=€­]2{e7© ÊíãÎ=ùïYµb®[xuI£ßo¨¬@ùl€Ëh¤„°‹lú»ÈNË–Aø.úžÒRêÓ™dòÏ#¹þù&¦Šîwp ˜Fq˸lÿÀãþµ7°Ñ…îJˆgROGR6~Ÿ=!…âšú ½74òÿñu4—I ÷ï»°ó"ÿÙ€¥[ëy·±?õÒ"ÈQoQå› ô.íŸÄšYlxÛç<.Ãçh!ëÿù՘猋àÄºÒÆ?¤w`KKôÇ¹öÚ´ÖÓ£.¬Âáò¸ßÀ~OéOKKk{‚ÞT’1v–úŒK$BdU1#ŽÞlDãêXÓVb0#Än2{Ðÿ|î?Ö¬aB b ò<¨¿ý`:…æŒ>Zï8ÎöSìñùŠŠâá3 ó8u•‡àpÄè&³äÕ-L«nóe—É„—;HþêíÏ_îš`i-™C#©¨Á r©“ÿ}~u]ÆÀ¼Š’s£<ìêÄûVC\]ÏÔ• O ‘žãnG^V¥6Sܶ뻖vu;c@ʇøz}ò9íµiØA-ëItÑÚ¯sŽÇ;S·-Ç}¼.3“ŒÔMf'‘ ÔÞy ƒT¯Lèzg8è~S ¡"‰UPD:ìNréÓ“ƒŽ8äö¬ë½MâV‚4I$æP2Ï1ÛÜp¹ˆßÜ,‰pHwiê8Î q×ÛÛåÁšvžì<¯æa°ÞtùG¯ëÛ=M+¼€çq–gn:n<ôQŒ˜ÏN?ÙŸIžÞÆòayo}%ÊH8ã´wØa€Á8=;c½]‰7t-b+w• ;ŒqKò€ 4Íß.3I“׸4Às0Ú0{T‰r ô§–Èêj>wäôÍ1 ¸<õ¥'Hè=:Ñ“ëÆ 0¹lçØÐ"Lç=jQÈ8$R+ÚJŒÒ²ô\dcÖÀpÂ6GB±§¾ÔÐÞ„´¹Ã¨ÐÀrzÒr;S€Èà~t'8à¥!Ç­8â4£‘ÁâÆ 5(µy>Ë© .¡’Öà#‚8Ã/nyïÇÏ¡Fm,.&¹¶6“K+K:‰¼ÅÉã*Gl`ã뚇VÒì º¸¾¸Ó>׿²¶øâ ,D(há»gåù'Ö¬x^ò}OMZÍÄ^züÅ0={g€xÏ^ø«{·6>Zr0FsíNCÀàfœa';A<âžvâ¡2„ÁÆAü)îLRw¸céKŒ i€€Ž>”?ñšQ€Ê)€|ryÄ.Iì#½@lñÍ!až‚.sžhÜßúS‡­8Ï÷©‡ 2DYT«U†=ÅRµÒ­¬¥y¡3<¬6îšg“jç8]Äàgž=¥_$.9æšy'\Dx99þ”Ô+œö©¸ÇQŠ0¼œô¦@÷Ç"1ÀÍ9¹ù†}è©l`ŽÙ¤1›H?ŽiÛHÀã‚rpr)HÛÉ KžJ2©äS¾^¿çüô¡ŽîôÀ9ÇÌòsœã"Ÿ‘ÛœSW¸ç§(ùr{Šj(lžý…)Cï‘B.Oއ#4ÇuH‰,òzuÇÒ¹˜ôkýSQ[Ë­J+r0lGÏ´@27êóÒ´Æ/5K»Fœ j²|ʉ´Bž,_'ÀÎiÖšDÆd‚ùî–`ê ¶¹Ï ‘òÇO»ŽýªÒЖw}$Œ‘Í ÉÛÎsHåžGzPä0 u5ú¦³c£EÝÎc.ÛPª31 g¢äôª%µÆ¹g©ipÚ͈Ë=Äl8_á$ä óÛ‘Óñ ×P[[Kef—3,¸Ÿ`PAŽsÓñª6zŤzżÖ{+»™ É Ñív“¸0ùXðFsšµ±'`‡(IÇLÐ$ÎB‘Ÿj¬fÂãðÓ— `f³(° ÆN1ž¤Vn¬åtË“×Çžã*ÃÊA cÐÖ~®ût›Çebféè R`Í`ûQˆÆ1RÀ»îbWÉa’}ˆ<~4uEDù¤j)pǽÚs=Ï®ñ‘€µM`“MU'úÔ€Œ„ƒ^iØ9G##õ§`îáN{S6cŸ~•&îÎH¤0|¹ƒ’)ÓpãÚžÇçÈäw§íãy D¥XŽE86XzS6á·pÝFsH§=x9 Dœ ô¡€ÈÆzv¦ð[Ó­/^ç@€ŒÔbó›ŸJwqÓ½XG4­*ç\ã§4¸Ç8>ôмãµ7«`)¦äqž9VúĽ´öS##ð¼àœàǽ+ÔüK4VöQ<ÖÜÄdË!ˆ/¿$€W$uÇ^*-{mFÖñMƒC— —²4…•[s`:àsÐVŠnÆr‰ÁDmçXÃ,‘Œ‡UÉUÎéýïp}êý½¼?ë㸔€w»2G~]ŽN+¡Ô¼¨Ïe!„†-±òÃzwà÷ïÍrÒY\éW†+ˆŠÈ±–N0‡ž¡²AõööªæLž[1Åw:–‹QS¹¾_0oO¡ûµ-„º½Ïš³A:‘ó¢•\ñÎ6î'éTZy^B)D…7³8Y€Çs¸ŽØ!jyu8D1I3ùQ°âI àûŸJMåé5PÞ(‚×*y™Ð=‹/·çZÛ2*—–‹˜Ðã¯ûGÒ±-o£7¾d nÓNåFOoZ³%ì’ÌÊþj)"??û†Ö•‚åÆ×dvU[k¥N›ÉP§ß!ÁªÖú­÷ÚNæµ”ÆÛæCøÌ§óü(.\KåÜ8c×ÍuÇN€ËR}¢Dl2¹ Ìøù†ƒ:•ÅÈ’Ý-­ŸÔGêOÁVõ©ÏPšB.ï§ù³¸@c}”ãób+Éw•8ݸÇ\óæŸ~ÕRïQ¶iÇú¸˜ã-"¬yÿ¾ƒøCö $r¦HN7Bž£n[?÷È«ÁhÆ8õ‘,1׆ÉÇ^Š*´šíº"™î ex@ço§§ËYÿÛ),j¶ðOp³&Å~G=ð=¾í‰³l¸±f/"°'i.@8 “ó0ëè£J¥s}mm¤E.q…`wzg”Üü¼õê@§19Çòâ£cÀäúu¦ ÃAç­!<óŒŸJpäPzƒŽ)‰¯Í)ÿWÈ?&9ç¯cO ìçš* v¥ÆO±Œõ¥P};ó“H€@ãJ' ÀäñBeˆ+Â÷ôå ÀäwÅ6OŒNpsùÒá€ô!U\z Lð~”n nâ  qïÇãšMÜþ”€ÇÔtÝHÏ-Þ›ªK ­ÜLÂÄNêáG‡®..4ò·"Ýn!‘£‘ ä&‘‘Ž9úÖ±x1ç"¡‚ÚÞÌ0¶‚8•œ»P¹cÔœu>õWÐV'n˜ëH¬Ç9úR3Mçö¤1ùÆ>Ô b0ÜoJi]£#ñÍKÝã½"¯{ÐN9ÛÖ“i q×40`Gp)€Æ:é@˜^(ÛÈ{Ð7d€i¤M3³O6YH8ëL,AíŒÐdÆ sÒ•Ô“‘L8 ûúS.pq޾´¥ÎxÍséMn£jFÈ=ñM$1=H žç'šq'úÐ17A9ôÅ Èï·Ú†ˆÉ4¼Çp}hq·¿jn[œŒâœÉ¤-‚x ÈoâÈÈà NÃ$ñÎ*CÎШ5žG­<åðz=i„ íæëR Ï$àR!»Ð}ýü–¤gq4G;ä…Cç¸Îãø\æ—¯‹è>Ô5svÌ7X²…*¥±·Ÿ›w8ÏÝ'·9®¹Ûvà<’SÍqw²éW,ñZjÖòyŒánGÏo&~gAA<žàŸbkHµb^çhq´qŽ”î¬AZH³´ óŒŸòMHÅC8ÍC(†Xâ‘LR*º8*U†AúŠAqmU\À_aŠK‹›xd…e8iœ¤~í‚’š{1?‡QøRÔeÜ~`8¡0I#¯¥0ü»›5 `¼wàP1V2ÜU m6èZƒºŒ,G=~SZA¾BIÆ+?_Úú 86Ògþù4Öâ/€NsÇT¡öÜÛ€w=x5bP ƒ•Àö§ÆdK‹|à3½PFw1³¨çšc7$ôÇ­H‡|9éŸéM’AãžTa OqÒ¹|;v£˜›'ž3]+—ÇÞèp1\¯Œ˜ó¾Ø˜dcKª>r8É¢˜ç-Ó§µÞs½Ï°Õ†3‚)Pääô¦#61ך–Fá^iÖ?¯4€rvw§dŽ0¹ôÍ5ÎAãÒzãó¤hË®ÙHèTôüép2@ê( ÁõÐ0ÆÑ«+M$‡$†p£ß(ž«”÷ÍH¸,VœŒã@ª óÏÖdâ¥*Q±Ò›˜ÇŠ Áç‚)0Xg¼UÖŠcr9¢ú ÃH8ç>µ^H#š"“"HÃ#€ÀqVy¦qÖš‡??…lG˜ödÛ—àó/nÝ{v"²fðõüLZ· ¼GÂ÷=ë¶#…yéó4M®y¤–‹ô’êÐ+`’^0»Fryç#­5ô覹##Û3©^ ô–EÚT¨näõR]*Êe;­ÕH92§óÏãT¤K‰Å½¬A!H­¥@üÊ꣧^[Û­_z“st (ýßž¸'±àÿZéæðÝŒ˜ÌÐíÿžoÿÅf _Y¨ÏÚ®ˆÇC³¯¯Ý§Ìƒ”Â’Ú;ŸšHî‰cò±˜zÿ½ô¦,VÖÒ´Âóë@gØéœSXB¾cÐã¥K°`œqÖšÆ{ P Ï<ýO¾b0l7#¶( g šv:ŠbNqÓ’{ÒžxÀ‘p œúPs‘ÉÎ<àgŽM0r2qÓ"œI#¯zAVêzPÜn`­ gÎd?(òúîÝÎ}1ôæ€ÃÔnÁ Ž*<‚;v©J`ýïÒ¢\pG|õ ã‘ž¸¨Œ«¸¦Ü2x5<˜‚3Á¦Àȱɠ1Ú…Ê–ã€;ÓÐãŒSùQŽ1íJ09 [#žjUBç¥3p<â”0#©Í 8ã­ ÄgíMά~lâ ÇGQMËd‚´à&Ý£žôÝÜdMÙ#|«Å5#õ nyÇ4Þ6Ž0HɧêF¥7x(p; `)î=x¦Œ†8b¤ dýi˜N:Pq‘Î9 ãÅr1ÛÖ”3Ò€ÝǨÀ4cŒsíJߜҶÒ3@Ȉý £©íøÒ„Ú ¦ý'Þ€‡µ#ci89 çÒ“9õè(] ¨4Æ_•†pz3ØþâäúÐUÃ\Û\£Ý$ Hx€ù“ÝSÏQéùU ÝOJ¸¶†µ»yUm÷fɸœ“ÐcãœV½[ÍT—Oµ•ítëW s4M‰$|n§¨#'׊°Þ‡J·k­?"HÓ É[€Ýbz·£}x¦‰t)•\ôôœÀåNyïBŽr:äRŸ›Œv¨e#Ķ0jXÛÍ4‘¹d‰ö²¶ÆÆÖ²®,|A¤^äñƒkb:„Zæ´ní¬ïtW¤”+M‚Xö÷'o*}3]Jä¸=1޵‡h¾ ¸¼‡íéeªÌ!vvàãÀ<÷­òíS&RKSÖ¨kŸò¿Û×ìòcë´Õòêz€ÕMPÒ®ð|—zði-ÆX^W#¦?3RŒy±¼îüþu-ˆã9‘þ~µ(MÌ‹‚>`iˆÒ,prÇ8<jŒŒ²€¤c§Ø6¸yëMeûgÀˆðXŸ”šç<^'‡ï»âl~º&i>¸9=ex’þ¿Ç»d{Ot4|²äîê(§•,sÅÞ™ƒZŸ_n°^Ø5,8Á9ãµ5’Àž2jU.§jóN nx4»”¨œ¼¤õ ¤=Í ³)žù…qœö©8$Œôô¡—‘Á О¢ž:F=ipp3N •È=ó@ `KœŒñÆ)0zã¯à$çò¤à‘ë@ ©àóJ{'ð¦·n2hË qÅÇ-€Ý9¡[ ûRl'%sƒÖŸ´õé@ Á$d‘ÎjLà‘žÔÏ/ϵ&O˜r(Iæš[å4­Æ9¨‹ VÏôn€p:téQ»õ<þT€*®xùÍ4ÆGNsHĆ ä÷ª—Z½¬O$óG ÀiÚ¹K߉Z,&O²ù÷¥&þQõ'{ŒŠ¥ÉrHìÙ¹¿z@äÿ8â¼²÷âv£1o±i–ÊT|ÂY·•ü>_òk"ïÇ~!v+¥m<‘ Üà{sÇ8ÑR‘.hö @RIäž(ÆTüÀ㎠x,úþµ:°—Q™‹`[ð¡{tPçíê3[ír%h8']3ôÇ_O`Oàý€½¡ô v#¡©»Á'¦1Ÿzùéž'ýÐ1ÊÚ<„g'Ó–äg§§éW`º6HZ®!çÌžmŒqŽB.I'ÿfÐÒö!Î{Ï™‡Už¤`ÿZqÚW'Œ÷¯´ñµc ùîH&èü®Ù ò†Ûœ“ŒŒàEnZüB¾åºÓâ›ó@á]†$'=ŽrH Žø—ELôl®϶i²p: æl|e¤j,±‹¿&V' 7Ë’8À=àMt°'ç¨ë‘Y¸´Rw,¼ñÞ†`@Ú:Ó†ïÇñ§mïëHdœ`Ówy=M +òóÏ¥9×y´ EÉ\œõ¥B\Ÿ˜ t¤ª2Jnõ/´€3H ŽN3I!Àõ´.úÔ„ Žq@ ,£æšÏ…ྴþA$€½Fàã šFm½;ñI£r)Ì„“‘Ži„ÏNi€¹ç"œÜœž•qÏcØš\r}8¦Hõlà/zr°'yÀ¤M /LÐrHïÆ(@%º­ÁäãŠC¼)U·<ã Üw¤BÛB±RqÉÐÄC9ÈÇÓÞƒ‚:f”c©Íºþƒ–È#­7#=4¬À‚3ša tÉ $íǧ"›Î=éqÉ8=E5³À »9É¥ä`d`ô  Œ‘D{AŸLÐÎzÐ9"‘ן¥7h#ÓƒÒ€ Ç¿JzøíÇCLݰŽ\zÒ†¸éH'16G¶ Z8‡ëUïþkiI ~ìþP·tɉ@þèü*Ò°2)É$2ÿ:«nCÚÂã Î=>µ`)ùvãï®OãO¨Q“œtÁçð¢0KÓHmÀ#L‘ˆË$ñŒU O'Í\›²£ÓG\‰F‹}–Û‹wãý“WÔ‚KuÝÁªšáD¼\}è›ôÆ)>€“°¹;¸9¢† ¹ÈïEw$bÞ§Ø€1NIíR þ”Œ¼ #ŽqIÓלu ÷ˆù íóÁ¤*OÔRì‰?‡€rœŽ€sŠR§o\ÓNÞÜÓ99?OzAÐ’F‚¤­;áL$è@éH@£œ“Æ;PqƒM#J2 CœŠ_áç9¦äð?¥)$®ûS„ã'žœRoãf‘‰=‡RËÐЖÏLþ5d¶23Û&¤r84Âs“øv  —Z…µŒÜÜÅšvÇæ:®æô<Ÿ¥9›’I=9ÎúÕÅøï_¶Ñµ >á.ˆ¼Ý±¡DÞSuÎÞzŽ„Wžëž8¿Ôa’ÓÎû=¨_,EeŽ1÷˜}쌎2khÒoS7;§­ø×HÑg0M;KuÚÞÜþÙì;qœó^«|IÕ¯|ØôøÖÒ5á~g+Ó!Ž;‘ü>œæ¸‰%I^N‰Ž¦p1ôüÎ:Љ]ÕÀŒ¶IÛ•îqÏ¿þ®„Vñ¤‘››e»‹»©ËO4¯+3|²»3È:õaÓ¡5 · ]IÞY!Ñ€çßç8õ9ïИßs8PŠ3 ·Cœgï9þž„˜ÑdUEƒæ¸Y6އƒœ/r9>½r+D‘$?<Ä’Óä6 ˆ'‘ù:ŠBàòa+ÇP¹9#žÞžäþtHŽ_oîäÇÎñuêr¸9õíØ6?–A ÆN1ŽNsù}xíš ¹0”®#FgÁÇú¬zqúþ§®9k"9dùFY¾Lô#ôÛôÝ×¹…ãÝ˶Kç£î'ðÏ©ý~´$'po, d®@üýÈ?—½¤ñË@v dÅr8å‰Éü~•#K L²Ç+DÙÜ 9f“Ôcîþ?VùÕ€•‚œ`ŒŽÇ߯_ñ¤X÷*‰ äã;îðïéÎ1ʲ š‰sp<Ám(È\™3µò:ÝCǰ@ÄépVVŽ5aæ¡{+ð¹$Œ;0ã€ÈϨ¬†žIP(‘¶ƒ¼&rÁÆ``zÿ*S#†ÉhÊŽNãÆÜŸ”úŒŽƒÛÚ“CL×kµ–"w4†â§©À ·îòÀmžæ¶ôÏêz@ À¤lÁ¡˜åÎOû„g·Ê89ã’]A˜0”´²(ûå‰,F[¿©ã4ä™’0~Œ©ù”}î½ÀÁçÞ¥Å1Üö½Æ6:…À‚áZÎäü¡% n9Æ矧ºerÊF26õ¯žà¸Ú'9Œ`ôÐÉŠy ÛŠ@N9 b(sÆsM$/¹éNe$ qM(sÉÀ ×ÿ¯N –é@P £ò ‘°çš(f8ÏÒ™ÐÃ¥(Éç“HA'‘ž(¥³•:ÒäqŒdR’íéL,‘|q@žý)8¨²ÛлAù²2Hô¥Þžþ”1%Síë\­ùÒµ ˈþÕwm.|©f·2"HzmvÆÒ{w=³ÐWN *G­a]éK!»ŠÎê(Òèš)H¿6A nR ïÎ'©ÉqF”wöÏpm…´©ÿ,Ì€¿OLç¡»Õ½ß(È'¾;×-5‘ÒSK‰»O¨nš^™fW'ŽÝxÀ®˜uÏCéCVPÕ¦»[1%›ÆŒ|É&xUé÷AçñÍbÏq¨›ë.¬âÆÌнÎ7¶1Ê1\ädàŒtí[šÞ¦4ÛœÚÍrd‘bXâ$·AÏáXVZe†£p²A=õ²Ûβͧ»íTpr2§8É#îœÕQkØø†Êöã커‚èýاC0ÆxÝŒñé[ Ü.ÍEä£a¶®W•$gçڤ܎•qŽÉÙœr3UîE¥Ä»Lg··z°~øV#8è*´Û¾Í(^Nõ¡5®>ÍåŒ~Uj˜œå‡GL>f™g'  ûmÏõ«èJœ…öíL Q´/¦qMÀ9)= 9´`‚xÏ8ëÅ4…BÌ àÓ¸‹‚ù žFqÚ³u’ÿØ÷#<ùlO¸­. dvëøÖf·ÿ ¹Éùdc>Ô€ùMÃŒc4RLvÌãòz+Ñ[ïsìb}GJUÇ׊#&¨8Ï ¯,쓌dg#½ _Þ$çàñNÎÕ'9y XmãŠvNyÅFY9ɧÜt¤|¹þt¡Ž&™¹'·½0ÉÔ2:àÐFsÖ _žƒšœžÀR3Óñ¦G~qNÀ=Ž[#?JV$9϶i ÞHÏ=ø4¬!ÍÃuïF2Ù^j‘cVbxÇSÚ¸ß|B²ÐCÚÚ»¿ùŒ–6£AÎ? ¥-›Hê5MZËG²{«û…‚%îO?†:þåºÿÅ+Û©žÛC·0©áftÜïœ}ÑÐsÇ|׬kúåÓ]Ýݼòº0œéÈôê½rsUl`{‹Ì¬lñ® eˆXð¹ÏhéÛµuBŠKS)T¾ƒï¥ž[„–yÚæ{½åsÏ<“ß庪&˜nf%TàìÏòÈõ­©íŒ÷òJ6™LÌ¡Wf0 ý@wçÓalþÏ:†/fìXœ£ýî8äñÈÁç?zµ3±¨J–âHŽNHÝ·“Çlð¿†O¡Ã¢Xî]„Gü¥qÛ¯=úÜlH-JHÛÜbX2·9åHÏLö{äÔ…,ÑÓ{ÚÜ+€C#Žßxw÷Çlã;©sXv0’ÙÒL¼Fy¶†ã¨#¯‡>˜/[a+ Y­˜gÌPž±8ïŸ×žŽÚ 9"ÔWáA‘X¼Ø“Üg ËÙ„oŸ´Ì‡Ê^Ëñ‘—ŒäŽ@Ç¢å9#ž–ÕŒŠ`êsÇ—qÏ^y<žþ½yèpÑ;]íPçšW8Us‘ÈÅiænXÌ*£êíÙËŸ®9ŽŸyf³„Êb•ĸÂòsÖ•fäeu Ž0#¨éïüé4êôŸ\h7&[8Œ‘±d+6c~ÙŒ«}ÞHã'=B×°hú½¦±`³Ú6GF Ã!ôaØþžõà0´ªHÀ—'' ó€@ëŽxÜ= qœîh:ÕÞ“©Guh·2» ²@0Á×#+ÇBOr=pq©M4iØ÷u3ÇZLÉ b³ô½RßVÓâ»·˜äqŒàûоËŒä{×VÐÝ;‹€Æ£Š´®¸\uÍÐÓn<ƒ€iU>^áHňÆxÍ5Whë‘QáAäþB¤ÛåúÓh}è0?HCcŒw¦žFåN')€;f¨‘°¯Z~ïNëB}ÓÁëŠ\dÐÐ0\ºNE ŒRäÀ?‰£qõ&€“žAæ…äâ—$…ϵ;€ÇLØ>´ÃÔc=1JO$~´ÏOñ¢Ã ¶Ô-Ž.^ÞO-Á#¯?NjÁ<‘€:ö®WQð]­Ö£6©mwwe#ùžtŽ@zÀ÷ëÍgÁ¬ø£I,n¬ÓV³L¶ØY€SŒ•' Û§­_*{vw{KIÎh_˜‘·¬[‡^±k¸c’4˜ÂÈ0N=;u­PÜãõÅgk8Êàçµ*äœãšMÞüÒ©$ôéLÉ,Ã=*AÓé§!N:æ’=ÊX’s@€~´‡øOZR{qÍõã9¦ ¹9Å1 ÷ê\ǨÁ9Ç·¥FKlâœÄ(ëÍuæ˜HÆI îËt¥ô8¦dç¨Ç€Ùà Ò'ž=iI8晿’8Ò‘»ä`t ’¿1ÆjMÀ©ô¥ô䃞´›€N¤g­0“¸i›¾lÏ¥9øã ÷çž™ À9ç9¦œ ®ÓƒÎsK•Ægà©àät‮T|Äsž1@ÁSŒpi8 ð4åÍ ¤sǽsZ…„‰<¥4ËMJ˜¹RÁ'‰›Ðž^2TŽœñŽ›yRxÁíÞ¹ë*úÔ]\éwð“ºVCm¹æn¸gÝÈ'=¸ÍTmÔF†¥iöÛå)ó¢eš5}õä óÇcõ«è (àG8úsKí ·.ëÛÖ—;ˆÈw›¸ÑGVÜÚt»-MËðLhÁIÉçºþq\õµý¾¡«ZNÕ#p²ÁqFxžüýÜnµ{-…ƒÏ hu+ˆ÷98'' k µ9nu;Ÿ5ËJ 5Ô!^K*ºåIéÜ­„Þ§X«„úÒÆ3Ö“r[¸ õ©G¶õ¬ØÆ’Ý ç¹¨ç'ìòpy©HïœúÔrÿª§4ã¸tWAÓŠd/Ù£ü>QZÞh¹3++C øM}ëCÊòOqY÷öï$n áJãž…#å9ð³¸ôcüè§\ô‰2?Œÿ:+½3°÷ïR)Û ­F¤Î;âœzq^qÒ)ù##Úœ¼ €E5r çò§zóÏjBJŽQÓŠ—¢ãÞ‘Ó%w;b˜Ò'Y]¼×dnˆØ*ŸNÿ™5*€8#Þ•€Q“Mf嘀'$Ž” ŠÇ“ži€¯R09®gTøá½5_ÌÔò‘À¥ÉúŸ­r÷Ÿ¡Xér³0ùiǨνh©É’æ‘éoµGÌÅajþ-Ñ´%oµ^«LD1~ñ³‚p@àt=qÒ¼{Vñ–½¬ÈÂ[÷Ž&ÿ–V䯏=G\¶zŒ±ƒ“ŠÂi*á9è7g#8 F9ès÷€=ù­cC¹›¨v ø•ªê¥íôÜØZ–e;¤Áõ#…ì=޵Æì,ꈕ‡Ì$¾lžçéß‘ôÀ°Ìë´GŒ «¼gƒœpzô#>ÄóÁ«Ë¥ì'‘* Á$ ØyySÇ==9Ù%l¡·Ì…xsœ©îñÈÇ>«WtPRÞY¢-¸d†Bpp ^>b¼ž3Üu©ï¬R+A´"s¸ª`)é­žq–çkL…“HžB»”Y\¹"UàО"†ôZ•£µº$Fîè²r@\’s…¯ÊH!¸=ªxtíë 1Úþg ‘´üÛI !\ò=þï wžSyʳŸšMÜ£qËÊ·¿àÕË{å†alH§-lX)ã€Qð~O$g×"[{ °hÄK!EU`8m¹Îr¹Qž‡¹8û˃sOÒRTh7´,$$ˆàò—oEìAÓiY-n–)‹gvfÈ%/ÿÁÈÏç‘Ó×^ÐßL¿%”¡B‚¹¼Þ ŒtçžÜÿEfÛ ¶ÐRÖ5 m±ó0F8O§_^ÛŸ“Meß+[*ƒÐäaßPž¬O¾îpIÑ>©³oÙí1ܰ³ÀÏBñ}OÔÊ×Z«„L p±ì:åÇ©ý{ç{•aâÕåØ1 Œî“#<“–BzóŸ¡þîÖE` ’Pâˆ3ÇL cãû½€‹{¯Í+å±ÂõÚ¶3è$9û¸íßÜÕ”¸×1¸A)Ý‚>Í!QÇ«H3ßÛȆ\éчòÛtä· 9È;ÁÎIý{媴ºJÝ~íDrÇýÒ¹Qø• Ÿðp߇PÔbµ¬ȧæ[s³hé’±¹ü88?ö”m”¹ÒåóýѵöûòÇaÐR»C±‚ºo#@û•V];&}8VçHùOѺÕ[2x òc•ãˆr‡k.#ïm'Ó©ö$œWYÆ™$‰ ùŠü(zð½@ìzTÆÖ9Þ xrJ¹ÆÀG*öæ—0š8I-nÒ%/mÄ*Ûa]¥F:## ø“Žã½W¸í‹<3y΄ýíý ºNÚÝÍekÁ_';Ùºe‰=1·×Iª’iŠw¨7å^9pFܱö>õ\âå8Yt¤(£ ¯°1ŽOUÚªw¸œžƒkqY“é%I ’81’q’@>£Œàåøæ½ ô"ww T‡!øvP'¿Ý^µ›5”ÖȬë–ÍÑÕ€\gŸ½sÏS€«SŽ k7gH\6áV9 ,ÀÀ`;ò'nµAíT… Î1Ë…,2G®rŸJî'‚ ä18F“#|DýÁ×''^:žÆ±îô½°Çûµ©\¹ðH9à†$|ÛEh¤EŽccaUÕÛ铎߈Éëþ5b$ä*H¸Ë.qŽüøï×g¸³–„l̤¹Çš¥XG$ŒËÓXFè¿*m9ßôDZ·¦MÜxOÄRh—Ÿ; ÓåǘˆÀ㌆ý}Èä®G¯[OÄI4l®Ž)VÈ#×é_8Gpª¬ ±à^ý;c õ¯Dð?ŠE¥Âi—.ÂÖRDüùoÝséý}sšç«JêèÒ2èz˜*[Š\‚Àã­B›X‚^¿•?!JÖ¹M‡`ô8Å0¨ñO9\ñßÖ“¬8Ȧ0wõã”ÇL“ÓŠ“åÝÏ¥Fà–bFàp2NiÁ~P=¨Ú20x .öÀrŽsžô’¹`>”åU×­0@48Éö¦.7¢·“ÎhÁþTñ£ê)‡¿Js=±Q‘Þ€ Ž@ç rAǦjr§’*?aÔv¦€ç|Ý]¯¯o²On­°Ú*åà†'œŒð@çŒÕë +KHd–Õ|¸Ün(íLz)û½9¹Ù Ó?á'º[=[ìÚ´„µòUñÊ<0 1‘ƒÏLtº5µìV¿ñ1š9n ¹-Âýã§¹úžµODOR=â ©u mæI"7!ÈÈ28ïœÖ¶þ:TQªÇ‚~bqß§ò©rˆ¨(3úR¯vhÜ>c@ gœŽ¸ ?ë9$æ—h;OzÛÎp=i¤† †ã§À[>Ô‚ã=ûPFyâ¡Ü¾vÒÀHFBÉ´°Nz/4Þª09ç¿Jhrx4™Á$u÷ 8麫K$qDÏ)ªâä I©X䃞}`kê×ÚaÈÛ:t™uéM+°lUñ½Ã,w*€KåcûØf|Uû FÒýœE&]@,Ž6°ÏO”óÓ¿JñÈu-Ä7Ëmq6a0Å1@ '…\Œàƒ9Ç95³áßÜ´Fâî\ÜY:+I’KÄçrG8 IõUÏ çGOK¥©êûW¡ühc…Ï·¥@ò*3ÉíßñôrØ9˜ç5‹ºv¾N㌌ӈڀpMF¹€£¡ïN2“ÞÇ ã"¢ÙÂó“Rg2ipGå@ ¸  Íi¡t¾uóYE‘™ÃÙϜΰ¬#Õ-n ò/­otÙHº)Üm(0xí€8íZþ$ãF—¢èï@‘–æÜ0Ä@ÛœäŽÕ§hºkÝÁ5Þ‘ýz¬®©íŽFÿçœ^«[÷:¥<ß8¨2cnâ9ǧëSpxäÐ0IéÈ¥$ƒúT2„çlÔr†s‘Š‘‰/׌çÃr0`P·QÐO‡´Æ#­´\ÀEhÈ ÂÀŸ˜ƒŠËðñχtÃÜÚÅÿ¨#j„m¡(Æ)Ь¿)Ëw÷ÍH>P 9¤€?Ùª¸ûÇ1ý*)"ÎâH9äqÒ¥Æ×• ¬Íœ1RÁ(ÞÆÂúu%~Y~´TÚ™j·ŠTß¿þ„h®¤ô‡Õ¼Ѓšz6@Ù¤–'8ù»Ôˆ2£×ÄÍDþŽ™Í81= 8ð ;Ó@pN:PûrE6B¥síů·o­DàlÎytⓦ¡¨Ûé–¯uq"¤Q®KaÛüÿJñ_øúë]yl-_ìö®T†”d‘úb¦øâ9õ-pévÓ³@y˜ã’qÛœgë~-¡Ú`ÊK0'8ëŒ×]:i-L%&݈ÓtÀ¾vœŒ[¨ì8ÁºÕØmŸd†5,07ŽFCâã…Î0ØêÊr*Õ®ž¨˜‘Ö7ÜijXNxõ6Èò÷qVáµ»žû<"Ù• geP»Ž0¤xu8$ŠÞ³ÒöD#òY #b¦Kn<¨.Cc£ótŠÓ{›H Ð5èG2¶Ø¡cæ/^¨¸n‡nè*\Æ‘Éêž-¥Iq4Òð7ˆV2ˆ )`0I fNÄy§Í¥Ã„læùD2BæC&î¥Óõ#=}p{Wa¨[ͪÙÜYG§…3¯ÊnŽ¿(ÆüñЩ¨¥Ó|?HæfŠK\—É[zwÓëQÏ}ʶ§ V·áS•œü¤q÷dNGÓ—7>‘¤™‘$¸ 3 ]žp@Ü¿?ãÏLŒt¤Ñ¼)vóïR¢ÒQ’ÙqŽÜ u?ƒ{¿w/‡t‹“{{tŽÕÙ°O$¶OuÉÍJ}„¢hZÚÛBî7N«À÷äœÀÇ`;ÿtUç6¶–$®°D¤üòƒÎzå¶Žƒ§n?º+—];YÕ¥ ñ*ܸDÍ,˜ÊŒXެcSZ¸’K™®.åHÜ &•‰*²‘Ï“ÇÒ³muÙvoxvÛ.¢òIÙ±çÞ'oo^ätâ µñ–™8-kaªÊÀ’dý Ø>£5²|;eÅö[8cqÕçÖ:Äz„q­ý­«É4hÙÏ–J'âx#$sÇ5{PÒ-´?íVÒOm;Ç€±9`ä«zà•LÐà¯a\ë'·:}¹•5ˆ‘IfûC+“ÏÝyè*å/S†ŒÙܺ$lawPDL0®9_ºœÉ?/#ž Áª—Zc=?P°Óu-$ÊXœ “†»ŒvÉúVž¹±/5´Ò]Dã÷°È2HG Àìsê§Ic"‰Z3å>hÕz»Ï'Ï<ôç“QF1µ]”ŒæN܃€TúòßçšôKKo¡[ˆClEÈ‘[$`“ŒóÈÆ0AÁik:çÂÑOóÆ¡Cµ}2£hç¾2A#ïv«ö¹N‹Á>6ûYM7Qß¶˜…ßè¬F8íÁöÏ ã$~ŸOZù÷UÒ¿²ØIæ@!ÇíŒç¡È'nN=Åkè>?Öì-bŠîh¦‡ràJ¥¥+‘’Xž€w9?¥e:\Ú¢£;hÏoàƒžõîÎI¨m5 k´O*â7Èá²CÁ5`“Œçô®{[C[mÜf™†bG·4àØêi…ÙI¹¦¶åGTÀ­“ƒøSyÀÛœõ Œ{zô ;ÂþTå$÷ç½"›ŽG­ ÏåFHäŽ0ha’NqMÉÈÁã€9R?Œç‘š~FÞ¼ý)Œ<`úöÅ@ëÍFÀ`ŒðzâŸÈ ÍDÅB1=qÖ„<.tU¿¾Óüëgy$ó%ƒpܯ€‘Ó'ÔgKEšâk{ˆ¥÷8 )¶î%s‚{`ýy®^êì]]ݵö„ͦ½Ç•æ+î:œoÚ>`8ãiÏN9ç§ÒàHt¤ŠÒæIP+yrÊÞa“××ÀŽÕrØ“DörqéÖ—8¨Æ)FvÄÇP1Í'õú‚„ÜNxç"—w¡<ŒSŸ‘‘ž(E‚O©ëL=ý8æ€@ž”²m‘@Æ2rÐ e†¨„hX À8çüäSËmÃ銎[”0Á'9)¥p¹)Æìô¨§¸H2²¢äÌxÉÆךʸñ>”—Qµ×ï+L¹€çô®KÄ~7Ñ.4æ^\»«+ÄöñÆã•'wgsšµÉr;Ñq„º°*OQõäŸC\§µ«M/MŽf*×hû­Ó<¹ †Èî¸8?^ÕÅÉãíPi©G8ù¦º”ïf$åˆa@?^ÞõÍ<×7Wj»ä—sïwÉÃzz}x:â´+jÉ“¹ÒÜøîsi4ÚlP]°$Íæ &A‚àḠOôªz&"Òî¼Å1%ÉFwU Žòr£Ôç<Ñ¡øf{ØcºÔÕ¢·|2Æ«ûÙ‰äP?žsÓæÓZ™ŸT·LBâÕÈråêªßÅÇ ç¿UÂÁƒ´ ÞÔeƒx§0eB@˜ªvŒO­H'œÍ2Sò0*rFsN†FçHÜôô¦·eè*G‡4ÏkX¿ôZyÈý+;AÜ<;§dcÑè"´Ôdd‡4úˆÙMÃÈÿëTqÌ&%×;FW§¡©ÁàŒ­CŸ”vëúš œ·QUÞF劘:ŒsU®˜Å¿ÞÂäI.ë‘ÿÄöüg8¸gþh¦ës×oϭßüxÑ]Jö3{ŸWFÃŽx9éS‚£ŸN•)îr{ŸÂ¤näŒ×7$\mP3Þœ˜Èüê4É r0O=±R1À^´€k°`ŽJç¼Y|,~CßCøô?—Ò® ì™;#É-ó¨É+|ûœ¹¹ëœó‘מ¹÷àš¾ÁῺv‰ª0A…#?w®ôç4ÏØGv¬œî³m=2y`yý8»,&¢c•Ù¶6Ã’²A^¸<œ}v6Žtº’Iö©Œfâ®Ü‡æ›g’xfÁpÎOvÞÁ]•×qa& ¦7à–ŒÓƒ‚C}Z‘\ÞÁo¸í-9Áfn7o`8ï ‚3“[¶ú<òä]ʳhÃ2d+pK7“žœTJE£‚Þ9U^?2B¹KxIb'nw‚q»ƒŽkRÆÖæeX¢·0€2ofAÊ”Ä+Õˆé[¶Ö66v®Ëä[Ú1$œ…R înC`ä|à ÕψtkFŽ1r·lH €ÊätÇUüŠÖmÜ« m¡£!ûQ’å·ÑË.ä?ð}þe=jüvpØÇ$P®ØË‚À^sÔ #·uÍcIâ;÷ ÖÚq€.vͨÉåì9ÊòÀ|þ:úS`‹XÖ¸Ôã†Â쳇+»‰ ÝœZ›>£¹ÑÉwcb —¤*à&7`dàÁÿ¾ çäñ¿½oì­(^0.f!!¼»›®«¶^Ó­Ô\K ºÔ3ËråÙ› Aô…i­² DT O `Nü…'dœúxz÷Vh¤Õ/wÛä7Øíÿu ƒ“ƒózgëëZšnŸkcc,6ð¢Q®ýÊóü¿:ÑŒâÚÙ `Ž1ˆÛóç‘…Š ™†DO'§îJ—!¤$°þõ\®Ñæã¦2|ØéŠ ZNËÛ¿”¸þUbBâè« Žàp ‘Ï_”Sd]·±¶Å`œñ 8âläÅ‘>QÎ>QHdíKtfè¶òg#$p¿ ¥{£Xß\¬—¬Œ£ÛÏ̦c€pFG^G'Ö¯Þª› – ÿ«n{Œ­W9Y0Xnó¯{Ó»™¬6²‰öƪq€BÄØƒÅrzåØÔoÌóùU F«Æs‘“ïÏQ]6·#}’Î0üÙŠ¸Ç˜”Ÿsø×?-‡ÚeC4®Æ ÎÆVÀ|ta×õ¬_S6spÃo c¦D¸>§ >†B£‚mm%ßÚNø"†9v mpìN1Üõ­=Jòƒ¡-ù·G–×xãæã“[ºbCc¥¢ÉªÅ·XÄò)Á(ýätõõ­\¬$ˆílaŠ)ZÙv¶Ú캮DØ#8ü3Ç5²ÆêId–øÇtQËÞ/@œã§ÍGöf¸Šuyì®Pýу$s7?xŒž½=*YôÙ  °ÌÁkyšz;*Û®kõ*Å+‡‰mi>ÇçûÆ&¶ yoÔÍ×߯jA¸É3‹ ÿ£Ýù× ŸcÛ ÷©§Žhìa1C¨¯î÷+¬ë.ÌDÙâB{téTî 0ÝåÚS$šÇÍÁcœ¦õ϶{S¸¯¡Ž9ps6rd¸±må0 Œøæ¡GÃ"Ewló|¹ vñãéÜè:S¯%Š;¼›»o=[×r[¯Uþ[ÓÒ¦·KÜ,Ëö‰Á¯”кœèÄ)=ûÑÔ I 퓵ìp\̲$ÑÈ#e‘BŽ€`îÀÇC»¡ÇZè­Í½í°žÛ99 O\÷ ;»r~+ ÷6¨´èfB?uhÈFS»¦ê©sp4§þвò¢½•›Ï·{ÂDã$cç!¡ŽiZìÅÈ—:÷ÙC TRÒH ü¨£‘Áîsœ ®vî9ZñL#Y¡†#LúöçŒñО‡žÓH°]_^ÕYáXåfˆwc lž<ªŽ¸9ªeº×æiÄhU$ž[²ßR£¨àuVÊ\¨†µ24mJo ëÆóìûÒ³c|¸<ääƒÏ9éëȯjÑ|Ea¯ÚùöR’WlN1$dö#úô=‰®SÑ£y<Ո߹H@§cALã=…<¥Æ‘}¡KÕ•ÃÅ È TŸïÙŠó×¹ÅKQ˜Õâ{ÀbqŒÓ[Ojò+ân¡§ V³71Œƒ,cõõçé]®—ãU?%Ø…ÆIÔ¦ è3П¡¬]6‹SGF È$wÎ)A ­ÇÒ›ö…È`ÊØô4+†‘Qb‡+|ÝÇ8§¡ÁïL œíóHŽœçC@î OlÒ`äcÒ›¹NvqëJåÁæŽå$gÖ˜¼‚-ß4¦N£Ó¤9‚9Îlÿ‘@ ß8ý)¤‚§ ZyaÜþ>•Á8çÒÄSIsªÞÅ#ÃögÁso°««íù\±<†\vÃÎA­» (tÛ1ojD¥˜ÅÉÉç’I=OSTµOZjS}¥Z[[Å]‹ql|z68aìF:ã«Ö&æ+8ÒúD{”YÐpø$öÈÁÅSjÂ[—ÈçŽ)€€Ãàðr(ó>RN6Z”.[¦}ÿÏ­HÇmù•¸9ý)Ëß TF@7ŽÙªwZ½•ŒfK›ˆ¡AüR6ÑM\M—Üü¥¿¥sZ÷Œôí ´RJe¹ío ³îO¨ïžzcšæuÿˆFð=žˆ­µ¾CrÇi9è?tóÁlt>•Íiþšò>ä³yØi ¸‚ à·$çƒÁÅk}Y] ïkú®ølQ-#bDb–nÌ¥|c ÷éÍ`ÏmªêERyî1É#³ƒÜà|¤úð{ƒ]¼µªGö™¡ˆ0Ø¿h*»›¢Ÿ½ôäaˆ…]¸k[k‰4ø"yî`_1UÏðž§8”# ®wkNkl+r‡D·w+¢}¶Ö ?zȪQJ³ áAcàe=zàeßge Ò¼O1ÎtQøÜIehãp'=9ÎXSç ŠéÆÜ° #eXò 1·M»q–TÁùOµt_†&³“í[ºD#Ü¥b=‡Q–ç©<Æê©}©5ͼRI4D wÎ-À½òBž˜Ú? Ѿµ¸Ó§¶¸Ñ'š/4\ü¹*sǯluÆKu?Ø W&Úò{vg`Jþð3æôç·G=óG‡î kçSŒC#î–=Ì®ÀÁ‰<ÿ= ¬¬Çs^ÛLÓuKQ ®¡rñ êcOñqžOü«•×lŒÒ ­ç[b)xyc'÷oדÆÂØïÆ+¤Ôôëï û{§µbëÈ1³\àõÎ[žyãÖ©ßAux-ž{Ëi>ÓÚ3ÀÛ·\®pÝa‘õÅzƒ"ð³¬zƒ# î³ü²où¾áç=åçœEz)Ç$‘í^A¡ß}›Q·-¶)%AÈÜÙRBû€Ëõé^» 7 r1ÇBÎiOB¢Ér¬3ÉéžÕ VîOJœŽ{çØR7•‘dL:É ŸLqH@pHÉɧíÎzP´­ó(äôõëAž)Æ0:PyçH£çêh<žM9{qMGÔä:TäpSŠj U;F2riOçš@DÜ€@ÈÏ4¬Çn §GNsCTç°ë@ ݹˆ õ§(ƒ×=ª8Ñ€,Ä9ÎGÅ+n\” »#?Jq?ìñQÈH^1×4ârÄ}qM1«’åyïïMn-(*èö DA!Z ´#¢©ilN•ož¡ÀÿõUØÔ€v¶Aö¦÷g*ÈœÿœTH¸, t8ëÏÿZ¥€~ì dõ¦„ä}Ï­1;•b°AçÔýj® äÚ°ï·UæD æªj (l0é@ÑòÖ´q­ÞðGï߯ûÆŠ]mTk—Á‡>{öÿhÑ]‹c7¹õžÎ7÷ýzdÈOÅE#íSRÆANsøŠóÍÉb87AA;³Ï¥Dn)û°8jc ãô¯øŸo{¨x• ·äX-Õ‚óÕ‹záOÏÙ$;¹ Î{WüO¸“M×ò8ãËD«ó !€9‘oÔJÚÄEO„æü{Ùš4Þc‰™T¾0ݸÇ#þ5Ö\h7M¬ÏŒ6òA‹wšÅ6¹^™ÿ5àY<˨W¢”«?0R¤œysŽþ•è–$®»x²6Ze†B=9袴©&¤DÑ…‡µmò´íh#D#2»Í"€ 8S÷[ÖµcðÝÛKÍfé—Ì\u°ÜŸº½óÇzÚŸJ„m‡aµ?ZVºXÑß(JÇ·Ø쵓›erØÅÿ„{L2E4ÐyòHW{K#8bT“ÔãÓŽžµa­âKc,ewT\d˜Np=0GJäôï^êš·Ú~Õ 1yÍhÊY¸‡0[8ƒÁ*¶eûTâQ3\H¬»·’-Ðb/_¾;psšvÌêÚmÏŠ,tÉÝZÊ ^{°W öãï§·á»áÉm>ÀæØ­ÒöYbB b<§žw(®N½H¯|K|u D’Eò‘KU‰fO<÷®‹ÃöÁôW\i·3¹”o%¶a¾ñýGÕÎ:©Ù¬¨F…»(äõâ1ϧÞÏãVmÝUÈ`8ÉëêÎö_Ò¹G°"bÑèÚFï3’M™ÁŒrD}òOâjWK¤C/Ø!‰UýÝäƒ8YxAêk%–ät2Ì‘$¨Ûd€}£ù5:P½Ðlà#.ÞÅB¯ø~µÏMjåÙ ’|·bRýù? ?Ä=zT—:oÙc©6R@?Óò:¨dô¡ÄW:6‡3ïd,Ÿóÿ‰^T?e*ýyçòÏŸçXÒ\^hã²ÕdD¶3!'«ò*ûaµvk½Z6d þîçʈ}©rØw6e\Ü©2d NïêÔ³lkfÀR»Xýìÿ VÊm÷U“çù³hO&E=£õ©P—ì ViŒžYÂÉa&s´Œg“BFñ¯ ~@ô`5‹n‰A –Ú1œã÷iX ©]‡mÚ¤a˜ã}œƒ8wõóšeŽ®±K±µ,í#åR~UëóœS°îmO.û±Ž ÆzlOñ§ÈŠƒç÷±ãÖcŠÈkù$²—ìÆÊSåç+s×äSÐé¤{»÷pßb²`YH+tÜŸ0‘ÿ,ûXu+ê«ò[Z1;$¶Êd烟bdÇ+]A¦A™í¤aÆ%£ûà~tšî£°¸û6ÈJ.BI-å…8*Çõ¬Cuu»[¬N[¼ U€áƒHÝzm8ÈïÅk³7kÕš&¸´¹ÚËç”.:,NãÔ{•Õ[݂ƚŒhPaf-‚$Ï;Ç®?âd»’IVO²Ü2D§ÉI ™‰>ÙßiZŒs i|‰ðè0gv¹n}¾(’hjà Åâ–D’ÂäÓwSûÓïÏݲˆ½7Øþu ÂìK$b=BÛåb7¼o»ýqã%»ŽþõfHô(´Ä–Êc#?*˜ˆö¨.¿²dIs{HL„(º?ôÛ†úPÀ¸Ó5¼šêöVçe¦à+”Qüꘂ6q%ɲqŒ·›`ñ°àlÇod\n€Ý~Ôïø`¶;Ñ-±vT[Û˜9°ç§÷”Ó¸XæZKY£Y¬LiÎËù"#äÇEgË2ÄW2>wËÄrw<|ã'½h­¤ÐÆ®u ‰•œ:Fù3Ô(¨ï,êÕA07Í6<ÛpàÄtÈçŠÔ,aÏe,Ò¼–ð\[ÝE#È· E†<Î2Œr*›}£I¿•æ·¸ž2ìæê;V1Ú>`ØÛÊdm'¯Åjŧ²HçÉÓÉS!!-vÿÏ|`îã§§§§:WZt²Ë…Š"ªÛ™#Ýó÷Æjù‰±E/&¾µ3ØisMrvKž2CvçÔ©ÍQ½¸‚)!ûN•|³ÌÛ#<î9ÀêF9Æ@ç$ÙƒA²\‹SÓÌÑßK¼p‹‚HÁêO9ý9£©_êv:í”zˆ¸º[fùª«¾ d.a³´€x<œ Ik ÷Vö³ÎmÊq1ùŒ?evÚ¸6ä/²€20{*â^Øé¥ZC$Å¿$_¯÷pz{å½»e»«BÎ_jš]/’¶îÂ~|½bá[¡ sŸLŒõ5˜í^º·ófQ4Åbˆß6ÜavõsqÈ­š&Ç#n·r2éÚß•+ÈIJ tëŒçúãFkÅpî6ÚœíŒ4ÌÊê±9Ï?ýlØX¢Mâ¨P4r¼ZpŠw°-òœg¹äŸ¦}yM#JŽçE±vŠ%lH ç¹ÿXéIÔîDæ‡üGn„øîÖþ‡èß§¾&‡âŠ“gjê£$Ÿ?ú±ü¡®¬XAŠˆ°#eUÆ0G2{Èz ±‹.ÓlH`€¿.1èþÃò‚“œ{•œxø…â€v}‚Ëq=<¶ÿâ¿Ï·4áñÅ qöN¸ÿVàè^ãó£=šè1C–ã;r1èFHü:uõ4ùt¸O “ ó•V?ÉHî3Kš‡fq_ð±üO³h±³.G»sŸü{ßõÙCñ Ä¥cfÒì̃î)ÉçØOæ vO¢Ú̱Ü!Ä/×ß(Î}NQ´vùcCrxÏÌX~_º4sC°¬ÎKþÿmû2Óìlïóñ߯Àš¼wâÝÛšÂÕÆACòÿãßç§^+¶]õ‚BøÉÎIÓˆ†úªKáý=¶y–· Ã3)g¿Ëþ8æ„áØvg&ŸH•™øÛ‘¶Þz`ôÿ'.ðì&™ÏËã¯F}‚Ô¯Lª1çÛæëÈüñ׊…¼U⋦+ow±‰áVÝFsè_ð뎣¦N:ØtkHÀF·V:Oo¸ŸøñëùŸSRÃ¥Ùo`‰dTù–TŒû©êyéïG:mÚO–*„K®i†>%†@X%´jc|íÀËäŽ:×Mm%Ì~²û"K,òØAyc挘ÜaÅ`ÙE–½¦Æ³ŽiÛ&c®:|ØÚÃ=9Ç89è+­ÄWr ³^ÜÀ#e_˜Bœ(Ïœ`žzú`¸ºD–ÝbÇq²/"ûH<³JêØ$ãÎp­Ë{جõg’F}ÓZùÑ(fÂF»W¼6¾G½s3kºl¢ÊÊé„*P©hÊ9PAm¹È\ÿ8ÈçŠvlFæ·ö»hµÔÖÅ k|©,Мåz‚AÎ3Fq^ëW‘â—L†("03J±Û†L*…t#8##Ï^•=ä—·º ž¡v›U G‘¼|¼79ç ÚTŸ˜ð0§á¡g‚ð¡“m»-«3dPÎ2xþxϺ ,†sírÖš´Â=ãÉq<*pªªXräõ=ë×ô‰â›O‡ìîv‚<Áü±ùýqãúÜ3ÙÞ(•#ûDkå¸ÁùŠäô$©ëŽØã­tžñ´g,‡àF ÏÌ;ûÜûß$œn®ÜôÝùëëLûÀœ}*5r]FT®2Aê=?­=œ)݃Ç5Îj) ç8§nËr{S¯ò=zfƒÆp>´ ;ºS¶ž”Ääp <`/ÝÍ ØÆâúr€=(*6ç&›œ¨!yö 'iàSQ‘×§™ç8#ڜąÈ=:æ€"#$ŠBV G_J È'Òžøæ€"Î^ô.HÆãŒöïC€¬FyÍ&L@ë@6rqÏJú¦ ò);·ŠF`C`Œc¦)­À§¦6ë!Ž¡Ù[ðcŸ×ŠÕA€@ÇåY:QÙcÎ3æËŽz0àþµ¯B{õ¦ÀÕ‹X R…]Ü|[P(É# ?¥A¨¦ff ëØâ¡¹Pñ¸Ýž0Am£ÆâjžÂ«NW'¦8¤Á+xˆñ 0úCÿèFŠ·â(Õ¼E¨?h~ßí+®2V!ÅÜú‘ϘH8©”µÈS¹qžsSBr½pk„Øqo™@G4¹ÜIÚp{ÓÝÆ})ê~nNEXnèF+Èþ/..÷ l²Üg8ý#އ>½… žp:ò¿‹IÙž^df éòÁúw"µ£ñ™ÕøN/Àl¢è3£T Á ’Jõ_cßZôä2ÿÂc0ÈhÞܲ¶yù (þú5徇v¯l¥rLŠ 8éïë^´Ñ*øÍ³•p_ÞõëJ»‘OcJërMÀXž½Žè…gkR2é:‹C!„í=ÁÝ!ÏéZW-—^Ð5ZÌ×!£jjâBß(äó'éÍaÍÃx4¸Ò£HZu™efDj¾Y7¾@û§#޵½­á´¸kˆ­Ç™·w…ÛvÕ\óytþUÊhv‚{$SÄñ(,Bº0Üð lQP#Œž6§«yéíïQb‚[GA nžŠÛò®›»/ý3öÅY6~köGkCïœg:r;òj¥ëܳ¹>IÓ;åŸÞó$Õt‚vL'…,Ѿ~²FK‘€~”XfšØùwMž¨ÊÄr·Çƒ½Ž9“ßùúÓf>Ts(²Ôت³gí`…ùò žþŸÊ©Åö–•Ýô$Œ9Xçn0_ÑÎ* ¦Ž5˜;T;•ð"y™~ìcŒþOµlF­Ï˜cªG‰€#ûO˜ tÒ±u{ìÖowÚ¤—&ÜÆÌqºAŽzÿ?N)H,Tµ×´«;‰îà¶U™›¦‚‘ü{šè¼7}tº%Šy6Œ¢Ã%ÉÜqê ñùÖ5ÄÒJIKÛx“æÈšÑœùÞ¬>Ÿˆôå ««A¢ÊInv¨Ï.}Îx_Ò‡f`—¦ÌÖ“±nN'V鹪«ÛîS5«Ä™ûîÑŸÁrqév®Ì«£é, ¾8'ïIŒ|x¥JÚž.ØfÄ¥@â'`¿òÓÓž:}=jl€è_Tðþô–{‹EnÈê‡ùUG<1p55ÀF +*]Î0&“>Ill˜¬é¹‡ ±¬…D±|àlWŒíùÛdŸAùQË£5£ñ/‡eG ­EŒ†ÿXAü*t×|?[ûb.yÁ¸%s Ã*5梥YT g¯•þÇùâ§ È 5õÿ#,Œ¾‘ûÑËßð˜xy£›S¹£?N¸ÂÿœUy¼IáÛ…QæNî1µ’ÆLõÂ{Šm´í%ÔMî#™-–O@=j›“$…%º±ÇËþ¶Ø÷z¿ùÁ¥d;š1ø‹Jó$zŽ6äk(§û>ãó¦ÞxŽÁnÓ5UyÜ-vÎI8ª0Ã¥‹xÄ²é ¥—)G§«T7ÉiûÄ·µÓ¹‡È@þ¹àÀj(E¸|Snd ‹ª+*•ÀB޹ã~?…»v5`kß ß£Ý¯ÏÀ}s·×Ö²RÖîk‡cmVc÷/$\ó/÷WÜÿ“ÄíbchŽÉ•™×{!ÉóW¦qëM¥Ð.h^”݇;©À¿EäíÇö…Dž(Õ6] ŒŽr£ø7öµQ²ûRÁnVÞôîXØíš#Œ,G«µQÔ5&Òm ’Þ] `¡PùGvbÀ‚zãŸJ»°\Þºñ.¯ki=ÔúL#\¶.òz‘ýÏök§°¹ûM…½Ë(O60åI'i#=q^¨ø‡RÖУ\\%¸,JsœõÝ´ õô¯S´ÔçƒL…¾Öê‹’ͦLF6Œrý(œ9EtwW¶öˆyÒ Ý6 tãÏçY÷:½µ²‰ å·°XÉõTŽ1Ö¹;}Bòòin¦½ó ô9•†=Ù8ȸç-Þ©\Ïcg¥yÁ£Í8m€© á$–$׊J#l×»Ô4—† {(íb‘AxbŽb` #;rzujåö˜&´Fk#(Ù½méüÿ.ÜM¶±y¨ïê=+(%²ÛLuI.ÖhF7If€ËÁ#ix÷œF=)¦˜‹÷rM¤a¤QjÅŒi”HS±“Gï`·B@¦ÙAnomo,ìoîšÜ¥½º¤^Z*äüîØËÙ €@$Ö^ë)µ D‹^uŠ4|Èã•"É#;UûgÞ¶®õø-Rìuy®n¶>ìØ“ü[ºzõÇzAxçH†ûN]R Tì ²lçrœí#ò}«Î`º–ÂùdFXÙpFÏ—?§LÀûÃíwZLvIsgu`ºÁ§hí’ØÇR1œà“ë‘[[ðŒÛí< ÌK-²òAÏÌ=ºz¨»hÉ}ίBñ½½ù0\þæ`£.Ã÷lÇ=ûŒóïV¼RڋؤºtqH‹ºI&Ì®8î285Ãx>Ù-Eò_+A${šo”Ž£<àÏ÷#4kRÝ-äºX¾žÚÌ*£[Åæù GöÉÒ§•6W3±ÔøwÄVú†‘$év—p 8ˆm@݃Ž9Ãzž:×imp&…_³.쑎¯/Ó­+x­"°š-<¶e.ËæÉüºôè0: ó]’x‚V™‘­¢¯M“d•Áç¦ã¦‰C]¤tñÉÓÒ¤ßÏ^•“a«ÙÞ?•Ê_û„á½ð'ëÒµ1÷¸ü;ÖMXÑ;‰¸•íJ­´¨#ñ¦¼ÊsŠFÏ@?Z@?pÉ`¼ûÓÃ(Ò£Æ3ÁÎ1MUuÿY‚…9°8ç®iNXtëÅ/öúRôÎ1šDFIcŽi¤rõ©¶ ò2vã5ç8ëš6ô=yõ¨[ ¸â§;#oJd¨Aô#‘MÍÐùÓ˜ÏúDÞؔñøq[08`ØÈ8¬} °l©ÜÏùù­þ­•Ü9¦Àسϓ *“£`ŽqIl§ÉçÞžÙ7SÖ˜ Ú¡Ï\bª^ä@Ç·Õ—%IlÎ85Ä~b„'$Žã Rz‚>]ñ2ìñ>¦¤œ‹—=Í?ŒŒPxÃUF\Ÿ´¿·ñ+¦)ØgÓ²)ÁÉà KmþXG†œ6x©"óøÓüµã©>¦¸Êýwg8§!c‚[ {RíÈ9³R<ô d%G œŒt¯"ø©v‚èÅòàöÛ×ëþ'ß>Ã~+ƾ.Û®ÒáFc•†ìŽ„/Aøcó=yÆ´~3:Ÿ à+{˜¢fò¶ÍŽ@Ãý;œW¤¤RIâI! 6ÅÌqÈß0#ôS\ŸÃ{G'/åc!;°Ë‚è:¯>ß—o`í&¯;•û˜­¤×1’Øäì.4øü3{#Äú;ýȯo½B•’Tã¿®»MÓìdŠ'ŽòH³¹·[ÛÆï&?€ñÓô÷®[Jµº¹°¿ÒVKMßl„›‰$”¯3É<Òºí7L½–àšßK• vƒÐì(¹$°ÏOÖª[ nMòÀ¿ñ<¹UݸbXÔ÷Tzýé³ (IξFâ_›Æ^ñðpã°?‘¤MxmâÝ£Ø<¦0p-ãlöïéRËÂÅ£ðª€?»ä¨wý®ßÖ »)PöÚÜ |ÕÁyB~së'N*cm©˜p5¸ˆf&8sŸÝÏ~hc{µq Çe]Ãí@lË’ý)—óÈ¾Ž çLGÇjκÑì^B_D‘q’&¹ÇÞná~Ÿ—¹ªÇKÐãØãA¹æ3ŸÜÌÄŸƒó/Lÿ1@Ž|AåþèØmûAÆùóçt (ïüëšÓâ×.luÒ]>ä§Ï" & €IURN;ƒÇ­hˆì-Î-tAÍzF£#Í?Þœ}xªw6nEwf5hHžš–f)$7H9öëUŸ]ÝY-Ë<0\AFÈшA@ÅH*Ùº¨'oÖ«MöË÷—I[[‰/&™Ô´7@)ò”eèT0N;cÝ%Ö2Jú“ßËr-A•ä˜(’MÃú•áyÉÆ\`,÷ö0]]Ç¢É*I½Î2É‹„ îÏŸsÎ*ÄiÞ¾±â˜<í&eŽØy¦ÖIƒÄWîŒ\îÏñwéÍI¯ié¨1uÐÖâ ªø#‘„_`j¦™yk¥ÚIö a–I <›m&* ½ŒùÍj¯gÔblj°¤¨ l‚‘ èÙÏÿ¾½ª/©VÐÄM.Ú'.vd3)+oi XÆWj <äääõÉb§Ô5-9!t³Ò/¡ž@c3F€m °ÿG ž i]]\ZÛ\4ž%GtËíÄ7Ýž˜<œþ•ÇIy-Ô²\Oz³O1 '8'Œãîàcn镉–»‰è.ëÅe±Ž2O.Ò±a޹ùºúäà bûICVåe ø<6rséœnÙ'5$ž4e…-‘zùƒoAŽ°Çž¤Æ–“§jŒ÷¤öÌ"ˆ¹{úàúäpO'š·jI¡¤iöz¬¬.o5H“j.8Û{pßx…Çaúôà®ßFÒôÛU/¬^¬EÔâ{¶A, 8ÊŽ¼ž;RÀob¼ˆ>™ĹË@ë'#/Ÿ_Ò‘<ãÞ·9t;Á…0x#ŸË½c'sDG#Ó vÞ'·ùb;TºHÕã-î?JŠ;mM¯ˆ<âG ŸõÜgŸCÿ}UØ ™¬vÏ¢ÂÆNcœ³ ô\zzÕ{˜l¤:üÇÉÛ˜óûÏO÷j„‡sZHuX×AgñŒ‘Œà{Ô/ÿ Ú´ãó I᳟ʱgÓôYnÌÐuW ØË,ƒŽ»ØuÍ>Þ×IŽhZ=òßçnHLôl6.FšÔs2Lšk(–5Â#«à}ÇæiàK €I£[\Bܪó’¸ê}ÿZͼm%. JîÙKƒ„`{Ŝ࿕S°¹Ò¼øâ«gk9Á"<ð©Ïñ™©n·Ãn#ðÄ Yz‰bBÀ)ôôÍ[y¦>Ty‹—G8Ü1õSÓnmÙc‹UÔÛ’$#!ØgœÕ«ƒ+:ˆµ“F_õ–Äã˜ÎI'  ­ÛÆOԤǖs ²ÃÇáTæ¿Vm¶ÌL „Ž8›®æ÷ý½K»HâCâ¸;?wåF1ÂñÉÿ84Éoù«ý¿g1º´kž%î§þ¸ö£@$šà"Ýžö CrvœËÓ¾Gæj°Öôëk–ó5Û ¹T1ÆF7?ûþ½ÿ)æ—To1`¹ÒÙrÃ.ÍŒ.xõùæ*•¥¿ˆï5K˜¿´­â(D…"pTn'òŸSùÓI.¦¯ouâÞÿfFmÉ<™=1ëúÓä²ÔôôÉl£Freÿo®Oê)ÚŽ—«[`72\‰ŸfÜCÉŽ>ç ëÖ±µ3P·š16‹j«<¾P–U‰þfÝÓ9çƒíNÈFôWLÎGØ.If9ÝÀæSÇ_NþÔ鬡’í˜i:{.[pÇI9û˜ÿ#ðÍ›EºH_εSæäb 7 }î€H1÷ºãµa5¤ob×GG¹cåoÞ`”&H$üÅýÇnÃÔÒå¸\ì¾ÉyzZ 3ÜH“<ñJcòI>Á{Éä¸w?ý4Çÿ¨×;™FËd¶êC8g•××Ñ[ûߥTšýdÝ#ÞG{&r¥¹â.û³G \êÌjà0¶ÔT™£ý žñúHG§éO´ºE†'¶•;:sÈ‹¿¯ë\ŽŸª6FKÛÖéÜ;‚÷=‰üG¥h‹»¤¢I(Úƒ‰“h °r\Žr¿ £‚èÞHÝ.µ \bÔœƒþ™ŸZ‡L¹2¤R½þ¢Å8kqòÄçŸùãל­^B(†¤ñȉ¼6ëfÂS ùÎjKmjòØÇ—m;°;QM¹Î{«ŸîÈw4ù@éåÔ¡‚ÝMJ.˜ýê…<)ôÇ¥eK©Gq<Œº¾».e¼Ãþzz7ê?Ókz E¸°%3òF6äl'û⡦°ŽÏötÙ€ÖRIÌœt÷ý}¬ ØâYUžG°› IýÖG,ÿíZl¶ë„Ãidpû§h?¼_@kIlˆo,w X&ÒTÜIÈpçÖ©Oª‰$Â0­°n/$$ ^¹_öM¬ŠÉ®6Ä¿f¢‚RéÀlG¨^;~¿Ž§£=íìw/nò¸@ ‰K2€‰ÐäràãØTvZÔP¼rÜh–°£;äE*>OP=?SV^Ò¼å+ 8c¹ëÌ\ü­×å ô¡&˜vš_ØíoeH&—æuCËïuÝýÜ7¦w–žuÖ‰/§ê‚6¶PM@é—Èü+ƒ›QÓ#±‘lÛSI^523øDo˜ñÃzví^‹£-ŠèÖʺ„™Kt.<üã :ƒÐsßMè$qÚ^\l¶„]ùªÞ[*¤AQ×–B¶ÞÄ×>€Ö•ºÉáû nÌ÷r\m?~ÂGEÈî}€íÊçƒÛß»Ýu}OMÖ6LË̬#‘§$/sÈç“U—â;x6ì2À[¨ÈeëüPŒuõ=¾´^ã2u´:Èȱ"î”IdÇÊÆ=ŽÄgÝÐT¶W—Oy©M¤FÎé+ÄÑÂýÐsœýÉè6®t­b"3ØÎ-Q£H¤A©´‘Ç>¸íÖº»Ul 2ÏhŽ4ƒìì0Ç’2$ëŸOSCbG9ªjöñGo§.Š÷S¾Øä†qˆÁ»1ÏST´:ÞÙ-f¹¶³Ùò¬KöçI#‡ ÔÿL çµ4ȯ5 NâúAo'šæ8–QäÄp1×Ûœw½cë¶pjž_Ù4¡ö©<Ø]ßxFûì[+Ⱦ; Ç…®ÀÑmµë¾X-BbÈx¶¿šF'=†áÆ2~€f±î!Ôuhd’æÏQ·ž ‹bòªª†?Ä\’xà äœÔqX[>ãNžÅmfÊnNdw±ïéÓ¡o¢ßÚµ¸Ó®¢WfX¥³¹Dp¤”0ä9¹Ë²B(YxYüݺ„÷–“ÍX!"\99Áž@«ú„M›m&½¢*m¢žÒ]±ª‚B€Xð£Ÿ\æ±¢¶µžå#‘¯ ÓñL²× 9uqœg<‚N½«¬Ó“IƒOÚ-N5—|”™³¸ž9ãó464r¢{˸í¡HšÖÆÜ˜%‘I\ê~L~uMõDÓ`–(mlĤí’I!.½²Äß§¶7u»û 7OŽËO¸½GV/s#®Ìç¦åÎN[ðÏC€xæ\ʈ²—8$s£8Éã#üöëqWÕ“&uþ ÒàÖ¥¿óv‡uEÈá”àB›ÛµWñ)û/ˆ/Wí:…¼*UUãBT cïò*÷†´¯XÌtëhÉe*óÝH¿pÀ鑃ôÏ8®«Qqá](VÎ]B)¤cpÓH9$wŽqÓ…Eí"­¡ÃXYßÞ$m¬á&8Œ¼’*†î 1ÏlŠÑÿ„Wů$¶$†·‘·³=ÀdnÙ뻿¥;ú3A¦j-r‘Gö–ýÕ¸“sçhÈÎ>fL} ¯S%KtóX< `ÉõïéS:l5Î7Gøson!’ööi]Hm±D$tÉ$“úW|«¶0NZ‰}ñžÕ(c°XÊMîZIl3 œ§Ö=j=Àã9ãÒ‘¥ÀBw´†I¸î ƒ×Šs±Ï:Ò`a[¸©SÆyëÅ  ŽsL9v8>õ(;ÆO$c­#±ôÚÎv3Ú˜Üw4â¶x§Œœ@DvÈ8õ¢LpG¡§»Ç úS°³Çzkp34§Ob§¾™²¹­xÀÈëÍcèƒuƒ¨ù}2çþÚ=lCÕºô=ÄkZ±…=ÉÇçDä¤yq ¥´ÉˆÇ©çñ4÷Î8¦XÏ¿5€ã– TǹàóÍ1ÆU¸éFÀ|·ã¢¿ð›j»ºù祾>F9Õ°˜vqaEvGbw>¥ @#¡M‡ç‡# ¡êIüºr+¢·Ó-MãFÒNpr6ÜH?Ž_Fö©#Óí™ “>FúCúF}}ë.eл´b:zÈÓê‡Ê\ˆÑBýÅô^:š¢×šKLÙ×õeQ–URA#t™èž„øWKc¤ÛI¶d¼ËĬvÝÊÜý¯öéSG§F—’(–ë…÷—R6Feã–>‚š’ŽtjšöuýSŽÌ=דòÿœU”¼‚bÓX¸+ží$p8aíë[·–¼ .gP$Œg!‡/¨'œÔIc4 mÕ.‘6Äqò©î‡Ö‹ hÇÜÏ0κƒ+6Dmù£þñ>ÞŸ­6Õ¦’X ×bF8dŒvˆ÷×ðÕ¸ÑÔK–öGù×¢‡?~.û?Ú¨-t7¸‹p‰³%ä‚>x‡¶ßçEÐX͆õD°îÔtù6€?{2ÿv1É èOjŽyVrLoáÂÇ2J?êý†z:Ѓö¢$u‚Çæ1õµNâ,ÿ3ùÔg ]a–Œ¬kjrAòó€g¯lçñâ“B*Z%ËF§Éðû´ƒø?ÏâjܱÉR»ÙÛŸ¾» Sò¹À,Ý9þŸW.‰©\òþÊcÀ¼‰?wû²q÷{⦠iî%ûRÇ4‹‚ȯ(*;ªäŽÿ™¥ X©oo=äÓ§ö=Ü‚7!]ìù³½I;øù\{ýjªØ<Ú¥ÊÂ?<€u"H0‚sœʬ[xkNiïcM<4qJ©ó]HÄ`-œdþµŸ£CÝÇÙôëvTv@EÔ‡{ãø[<?z®€>çK‚Î{-Ú#ÛnŸŸ-ÚRvýŠõÎqTu´‰f³U·ÖâÿHUB#Æß”|ÞžÕ¥ucq$ÚtqE$Ï8òî$ä)húuþ]ꆳ¦Í ±&óY˜5Òn Á9?)ÚÈ>Xa>ñì\|Õ¡{ishÇGµ‘ŒŒ…bLÐï$úvüë–þ?˜Ñt”cj0 rªcqôæ§¾ˆ™í¾Õ.˜2ç!/$Qþ­¹ÉaùþX µ B5{%þÃP¥\ÍÈ]ø*3ò“Œgõö¦Üèp§‘¿ÃѪ†à‹É®G@¾õFài_ÚvÀGc&U÷cRÞ­ÊrI'êÍÚ±FÖúU£…‘1_@ä’ÀÊžýýé[U°Óí­ì Z\ð·ÚP|.¯ sÇnõvéa}>m¶:ÔlUñ¹ˆ^ýw•™«Ãp‰d>É2mº@Ý[žÇÚœ¼ò9«÷öÚ£YMæEª((rŸo‹Ü“Ö†"¶µ þÊm«â'Hž_,?ÏåWn0isï¾Ö#ÌOòÜΣw޵OY±¹M!äyõœ€œIz¬¿x2}jíÔw0è×#~¶ß»sóÎ:¼Ž)bæëOk9#‹X c÷¶ÆAÀéíÿêªú}è’X>Ñ}-ú5»F"òß`!r¿ ;øÏ¯Cí™u OPKFµ*’ZK`p8ÉÝÒ²¡Õn®eA¥*ypù{î#Ž-€àß7¾yëêhµÐloy°Lðiir‹"´g`Þ ù+¸ÇÆG<Õ«ØãµÒd·–ëìñ¨1Ë:Û:É‚I$88PONø¬ÆÕs£›Q¨ZµÑâžWRC|Øãæìq’99èiPšM0Ï%¥¥ì¥K–Xñ¼2rqü=€ºâyGs^F7Z}ºÃ~c†'ØÛÆÀÌU¹Œ qÇ:²ß¥ï´”̉ /rU\óù/ç\œš­­½ºtÔ2«)$Fl’2¼ã8qœÖÕ©ìMjÉo-¸ÝÝ›( ¸=>”œ@g‚O²Ë9"a@­ÕN #=ûW5¨Ï=Õôe%s$ët‚$Üc•‘¾PH’0:cÜWCñ;h"þnÒÝÊU 8 ¡·ŽzñÔàT7ZÆ©¨E|-­¢ž`’£ Š\ƒ•*¥²O¦=­E§q6tvúTäiW9YPÉ7“'ÏÐ0ä“’'Œü¸W>º¹Ðµg1±(sæÆ„¶@þƒ†ÒX]Ýj*a£¦^“û§çäçžWÇÊHÕjóUеҖú‘XÚcy>êpÝ8äoZIôa¡‰qeöµ‡WÇnaž žNŒÊ>\÷‰c“è¾õcJ¸‡Mº{¯:qo4BM…Y£^O o—'Ž1M½Hmô³o¢GhGÈ~g I#®@Q’ääÀâ+’ÏG’Â[—,.Œw ?"©fp=TªøÓÜgÅ72ËxpÊìX°`nÁÆ}±·ê§Ö¶¼£}ªãí³.ƒy 3ŒŸÛ¡HÇb´r:vï§=è(\“OŒ†“ž´Ò„Ž)è»Xn8ô #aø‹_êÃ{ÞÏUŠ“âZ³|@Õ $ó_úæ´W\^„µ©õ t gß5 éPÜàžµ 9êJà5‡LÑ´M Èê iÈËgð  0zñï^_ñG7Zm¾¢wBY‰9Áû£óþué ç#×EPÖlmµ-6âÎåCC"œƒùŽj¢ìÄÑçþ¼7šDî‰*‰Ñ³óc °ŒñŒg#ë“€*;8d‚V<— œàŸlnöç©éYþvÓnîtéÀÝlþ[ª3óc‚zq€IéŒqßFÏýf·¹’IHT°ŒsÈä~#zÕ÷3FíäOÖ<²s¼)œüÀq“Ôçµh 8„­sÉ ½ORsÓ'Xq%…Ë+Æc”¢‚@Êðàô€wëW-žHæ"çF¯ƒ<íôà’9íPÆi5õÕ«âx%”c™ ù¶Ÿuêäç=…X¶¼†æØfBX.Dx=s“Œd}JïT„èé/ÈÊÊÀ‚[9;Iõ¦*f†)ØÄ¬Q·œõïÓ¦H>Õ6nhÒí@’øm –á^•U6v½µÓðÊBJŠ+ò†®vŒäž¦˜±Oæ+Ç>HF&]ʼn˜ãè ¥–òâÆâ6&§ ŸaÃÎÇI#B%2 Œ0y?(ûç¯n£®*yd«Àù½}2œý1YòëV±Æ¯"ÊŒJ1Ïnút5 ê›+ˆ¤a{†*¦TÆ@ÎN2î~h°™}Y|Ý¡Hýâ’ô‘†j! ܬ­ü0œŽà½2Ýn<Ðé/œ7–HWÀbGÉ'Û¥Cmp†r¬‡(–èÈèTƒ»®3ÏáÇZ‹r”u…Û‘A÷ ÇùTW3 `º –7·ü²Ïó4õBºqEåV<)^ëåñüÍC" Ó®ÝrG—ÀÆú¯þµ43ù`ìfâäeÇü·¯ÎXþï†,>¿8²ù“oP>Ðx<‹Î*û6í:,°Ë2“ø¸¡î$5ÈŠÙÙ·mPìOâÆ¡¹R‰pÄdˆýù?¼ÿ³2ù‘².6²‚Þ¦KÊÎ¥‰§ù1þ´†D‡É¸2vb~ƒCDyó&‚\“þÏï$¦]±‰ddÆ6¿^ƒ‰+ŠÖ|`ðkN–°Ë$É?˜:ÎIaŒqßÓ“T¢å°›¶æÆ¼ÈgxËGi8ùå˜þècþ÷?JÀÕ`—zN‰—r¾çtƒ€ÿ–¯!úFjž»{yi. –q(1º*±ÝŒ+ƒÉÆ:¦kMbImÊVSå±ÀÛ°û£G¹Î@’CÚ´W[õ0¤¤"Ç”˜Á`pBŒ!?'ÝQµˆîqÉ®‹ÃóîÑo-ʼfU]rÙ ä’09ç$z¬öÈêù,È@;—fqœ’Ýçp —ŸùåTâ2XÜ3Œ+1”( ¨#ÆâA‚9<åö¹j„™è6j%¿-° ®r ä|ósQ@¬îwt éᆗKºK‡–t'iØCÉ‘Áéõ©-¾b¤2Pàý"ÍbhRÒÎÕ³¾ìqïòÁþ5mÓeømÊK’œûy§úþ•Rxã·`¹(b\ÿ^üþfçrŹû»˜Ÿûfÿã@†ÎÍ(;Š¬Ð…À÷‹ü $ TDÙ%J“¸•;ƒÕÃF„îh¹ÁþTÙÔU$°‚Ç9ÎÐ8íŽå@ ¹uÔMž7)ç¯ß‹ÿ‰ªKö‰¡h#iv ò2V2߇lŸj¸RKí̲4VÃøãÈ-È<rÇnNr1Æt t‡±ãQÇË€°ã×ßï`8éd¸‹VŽÆpZ2ŽŠ#%ºª²óÿlÇ>¦™6ÄÔ$Ž%^öÖE„ÀIË€xÉàuäš—ÅV¤]¥ÄJ‹´‡L€@ÁÝ‚=8':óX77ïsOı?˜»¸*W§¢äx#§¯5¢W%öwÚ•Bjz”±³å}»©î@b:wéfÒs†Õ5A&Ü}©‚ñл€\U2ò÷WHžÞ¡H–DgU9Û3ÀPpÝA:q]•¯‡­£ˆ5ÃKu1M†Y›'o¦¥KvcJç1Ÿj&‘lå¼Gl°X®dùÎ9;‘›>œÐqUl|3ö‹—•­uXÜ¿,n°Iú|­ùŠî4Í2çN„B×u ¸‘J`²9ú~4èôk k©'¶ˆE3î,éÆKœŽ‡ñéKœ9N2óÃ3Á{I®5¿˜sû§$žà8ê@àÓu/þáf¼×.ÌJêèûYöú’Hgž®ÒÿH¶Ô䮼ÆòÉ!Œ¹æáº·EÍœv’B¾BUm Ž˜Å50å8uÓc´Ÿí/ªIs¦” Ïn#p®$0 ò‚;är9ê2­`’¤3-ÍÀÑ™<«Û ÂÄdne*GO\çßÛX[ZCäÛÆ#\…ã Àýü©`Óím–c‰]Ë‹Œ±êhöƒå8»m+NŸJûMåì(VLR~öÝ›°}qŽý)aÐôÉ´É/lo®ç…Æ#upHl÷OÉàdñÇ5ØZéVÖo+Ú¬¯½ÂŒqØt£D¶‚ü^[¢Ã#3™WæŸqÏÌ}‰Ï×Ç œâå9+ÃZMÄM=Ô³díwWGã'ø{dv³iš:k&º¸[¦ *rn 88ç'Ð¶Š‘kÚÂ8^C™Â¡Ì¸] dƒéùI±6Ÿo,ªÒCAÔI–Oæi9ŽÇ$Ú7‡­õ¨ážkˆï@GH7Nìã$ƒßž)ºž—¦é÷¦á„‡-…ÂòNNpzg×¥u“éÖ“˜ŒÐ¬Æ#òoPH9~ ÀzV?Ûô­Rálµ qÊr°]®»|¤ðãèH£™±4RÔ<;¤Cuo-Ì÷y$¤yf![É q½I©5}Æ+a;ý¾`’ Xb”n$°9ÇC‚rG«>cwa”ÈïGrnrXpG_¡#éWà‹É·Ž&‘¤*1æI‚Oä)s0±ÅÞè^k[›‹‹Ï*gV‡29‚““×nyàU‹ï éöRN–rÜ`d)™¾qëôüþ•ÖI SDTYá€#ò¥ÚŠ 1‘Ç£™”ó+­?A¾ÓšäXßE í,bŽ"¸É\ï?+G<÷^ Á=¼÷V—ÑOl ‰,f¹Ãzûà`“ÛÕ k"í?ˆ UÔtÕÔôù­¦ ǘ€d¡ÿ=j¹ÄâySY$˜Šégó3ó[´®ª¯ôÚ1×' c[ö6°0`’Þ®9ÿ‡ýp{ßÇ&º·ðŤÚ_Ù/˜ÎÃvÙ€Ê È:vé\÷‡µmÚHD—ÖA‹ePy9\{žä’zñ¢šh–¬_þ͹…‘ãÔµ ÙÎÑ9!ŽÈR#|ªÜý*ì°îÆc+>Õ§0GcÉ $GåR2~b3ÏÏöz×É,,rîÅ]©$g§®Y,G5¥®c|¸R ³-W¦Bç=xà(á½³KQå‚ÕàGPN \éÒ0 åp¼v#¦8Ç ½–Xº¤s«XþÈÈìK($ðØ$ôçkQu T¬eÌù¦C1þO½íL¹Ž-J&‰¡F˜Êñ’¡£)ùˆ<Žr:š/Üg%âXköR,ÊÌ‘‚»Œ¶8bO¤zÖ^½%¶¡~/,žfk¥RöÏ YWh9ç#< þºµí.|éŒÐ3†ö8D‘H_2,ü¬xû¤ä¶N2iSì­¾ïHÓ4Ë–ï´` cË U`O÷rxªæb±µ£ÆÖSCu(Gg¶äïçä?1râRrOZæonÓ_׃±y4Ö¸1¢HJ~ð¡þégÏ$gÒº2ÿMÖlZÎâ.Í–Fo¾ÀÿŒƒ¶x÷ÃÔ¯¬ïní-l"ÚM´îkl‚Òp±€9bÝ€9Ô¦Á—,,cšÞõ/íîB£ò7ª1ò m ~ï'žÂž»z’˜å†Úhü›rû%ˆ‡™QrêT?Z£:^\^Ey ·Ì¸Ü¿.çM£®%ÏàrG¿JŽïS"ÇímzÏ=ÄÇk°V1Ãe]À`}âÇŽÇÚšZ G?Š!E‘D8i"`…Ü1“ýáÏñ^ͧÂ-í ƒ"O©¼ŸÂvñϬÊï´`¤XB.ãÆz|§'=Çìç’pxúRªúEo"¼Œ{Rt]½ÿ¥Fx¬ Ê1à±>¸ÿ?Zvðc ¹ãƒšp1ØÑœ‘œPr6žŸSM|61Œä犢–ú LaÎX‚N1×b‚ÎpiYˆ ö§•ÉäçŒÑ·œ‘ýhVbFMYÎTqP(¹<ý*t=8¤1X°`qÛšUï=ÏZS–O šTÀSÀõ g ýzh?0ÀÍ8ý}*6àt‚˜ͼcsºšçŽr^)Ü(8uþt2zз;HWòeßÿj›òóN?§çZñ|¬Aê}k7G#›Ûö™'¿Îúõ¦¹=xÎ1MˆÒ´$C“Œg}sRÉëÛ“UìH1:gÕi¹cÔU "lƒL•^œõ§ƒ–9êOä)‚sÒ†#æ‰êïñ S`0?uÓþ¹­7Äæeñþ£ÇQþ‹Z+tôGÒ;½AÇ"œ“Ö«” ÔŸy‰Æ+Ð{ÆzÒ;zŠBIbÈÈÁõQ·’4¦±Ý“Éâ’_˜m>ªLe¹¦”;rzçô¤Äq^(ðÔ‚äkZTgí‘c̉@Ä©ÏlrÃ'ô¬9es~5ÌŠ³)$ícnï #8åNbG¦J£ö±ot k¹ÒáFɆìár§>£<ñïÏzÑK¹-\äÞ—mÜŽCµ‰E±¾RsŽ£ ÍN·2´LVD›¨   ýq“Û©§Ë¢êvwQˆPKM¬`u §>‡ð9Ç©ªKvªò[Ü#,€ã^×éžTöè95Z Ö4Ræ+Ý¢fsÕGÌ¥¸ëÙlôf y-Bý–äÇ+œ®Ð0œeG«qœVtA& <àëЀØb0N=Aù‰<â¯G4ÖÙ;|ÅÏ éÃ~=1À¤Ä[7—VΦh†À2ơÜtR[ù©­ïí§c¶` nùU±·?—?…A äHÍ…Fmíóps϶I=Yš'ECíÎÞ7`ÿ³ïøT2‘ƒâ[¯7PÒtå,k5˜.ÒÛOn;:ÕK¿:÷Ä7r5ýœMä¬NHP@·'Y³ôéUµäŽÃÄš]Ãkxä K9s¸†öõ¼zRAs?Ûµ&ŠÑÅu1fÞ7|ÌÛpׯ@M]ˆ¹»»€)fb’TýìÞÞÀUö˜^¬`Û$Šì"©Ï]ÇnÒ9äsY°O•Š|AÃÊ™Áÿ{§åZ6òFS¨'àœÏ=@íúÔ²÷Ó™lÞ ie]q‰có6¸àƒžÃ¹éQ¼W¦'…-‹!;A°@òÈç~߯ÕµšƒV#¨\1j›{,{¤›ÊÉÉÂãêPRLfù ™$„ ¼ÂÒ)QÅÀn½:c½_[›ckÅ$ra‘A<îZÔYá›!dˆŸv^” ¼¡•ãŽU` =hl Ød‰¡`[iñ8?û0¤iDõB»”ŸB­åW–ÎÎ5)´iœvŽ1éô¨ßKÓÊŒÙ[¾xýy§p0¯¯#‘ÞÕ&_9ÖE˜$’%\ãóªz·‡×[¾‹+‰UG—Îè%䆯pÅzÔ×`PcCÙxÀü*)u{8J¬²®òpO¶qIM­«îaZøN;iÝ“dÈÞ¨ p¬HÁàݶ)Ú—†¡xL–ŒÂç$–b?yê§®ÇQŒZ‡P¹¹;-,FÕýäß*ûÓ~Ásp¿é7L2R3Ôsž2;SsêÂÝ*Fe`¸’9âm®œ©íÔg@“•vŸ*X<Í€ŒrÈotwÆçhâm ÎêC£ãå•]·£9Èç§#Ú°n¼7ym y8»Bpw <ä1ÚÇ©äã8ãJi’ác—°Öìm/Z"ƪê²0U ò=1÷³ÀP:H5g·h݆FeZ?˜¹sÇn3ÓšæßÃd/sCoÞG$D±-3$ÎIn§ƒÖ·i‘˜ü»•…äcp¹;{„Lž8êÜúS•„®Z‹TŒÜGj¡·«G»j’?åŽNzvʤ—R즉™Š„lcóaè®Iª¤¤ò-3ãçY³õÉÀéN——Þrý™"FQ²I¢\ãÔ “øœz©6£­ÚÛ<¡RYdʈîØÎAßµOžucyT-%I>¼·¯QÇ·8ÉÄÖšjA°¶ç™Hcd‘’@ǧ ý7Säm§8É$p6þX'Ð:ªý€“{±Ú¿) ó€GcüãÖ •Â#8Œ•ÎíÇq푎zž¹è~ðéT®u]“lµU’\ðtüÆ2OÌ@)ÂúâÞÜ´îÞ~ùeo›'`8ížN;¦*”;‰²Î¥­[Ü/Ùà€Êçåfä0ÆSƒƒÏÞ"³´o Ýêo5ÅÏ—lVò³‰0qÀ=yïùu`7tí/æÈà¡åÜžN¼þ¾ãlQ„  8ŸáMÎÚ Q¾¬©¦éI¦ÙCi 2,yÁ ’NIýkH.ž;n@ÏlÐNW§"±»4£fä¿DÀo'ôÍL¸ÇR>£…Òœ@ÇZLîb29iÛFã5BÁ4´èñóÆÅ(;ˆ8 .ã­0nÏ=K´Þ¡+‡ù‰4ÖAÁÉíL\±ÁÁ5)P1œsïLû¹çµ!‰€>lgÜUK»;køZ¨#š"~äŠ ýqëVæ–{gšyR(ngfÂêI¨ã•'e‰Õâuy BB)¡3ŒƒûRÖ[ÔÒË¢Éŕ۴“³$F@?)Ýjê,§k­: Ú:(Hm¤Œ‘‘Á®^ÿQµÕ/VæÔj:{ÂÍÔ–Û1H A8§ä÷&»;A » Œzb©I¢lyÔž Ö­ü÷†X¦¸m.Y‡=uõõü3®ìµ‹¶æÌ˜‘|ÖÆÜ;3Þ¤ŒŸ˜ý+Õ1yüªº˜º:uȳØ.ÌmånÁÆ}³ŠµUõ‰åK®É%Á +3ä` f'Xc7”yOÍ϶sÚµt¿ ¦—u]¸¼¿F/ÆHCœÁ1Äý)6¯Ì;~ Ð䵆ÍfÃÓNIù¸;H=1òþ(Õèã/Vv—böè¯8O´‘†#€º|z÷9V÷æ†Íß_ê’xÿ@Sþ(ùcÇ×Û‰ÉXÏþ:(­–ųèМp9 =P}i£jc>æž²)9µÊP.AÏJÇûõíOÁ cÓX9Æ)þÄP3ž:RsŒôéÒ¸ã94iæ£õRAJ™ºc˜犅€ ¹,}9÷ª·:}µâlšÜ62W e3×iê?^ ó€@Çjf×äç†(» ¥ç‡f¶c%›Æ8 q"ûïŽ0íTb»K(¸3ü,çhSÏ^˜÷'Ž85Ú6òàcŒrjµæ•m|UäVYAdC†P@ÉížÆ­HN&³‚â×2IÁÏ+ÇrÆc€3É59´¸Aº¶hßæÄȬ¤`tÁn}ÀúÕv±›Jd Éå’ª²à”ÉÅŸ»Û<à÷©N§*Âå¼épÊÝ–ã‘É÷<ãsE…{ŸŠÖu6—yec•wI“»9Æ1†é‘ëVtö‰žiF!q>ä$ã¤q߉?—½iø†4¾Ñæˆ2>lg dtã××¥sºmâÝi¬³(v]¡” ˜ØYX‚¯–;tÀ­4±›Ü쌨ÙÞ¦A'îàµg¾—d|·6ñ ³‚Á@cÓŒŒv¢·Še’&†yxrÈ’ÙëÀÛÛÜÔùœ‡‹Ê Ì©<œg h¸mÂÈ«×@€\ÈýóóTÒÛ\lcÜŠÄg düU?™ª7K¤ó£FІ#~G§÷íV­õhZ6º0z ‰PçJÅ …ofR¡•#î®ývIý*À´¿/˜:¼Nã§¡j®5˜a>[\Ç‚~ñ•ú3úUè¯`qòÜÅ';J‘ÿ¡R¶£¹Es ?¾¼žVë¹QÌÔ¶öQ:ïk©æ|eƒ8`?){n–+˜³œ…ÿÐÅF5X-¢ýõÔPŽ€4ƒ?ú§`¹b-*Áç3ù;¤fF$ÀñúUˆmíb,m …ð|  þc–ºµ»Æ'YüÅc€"‹}P•Dº­Ææo³\|ܘÀ¿;cô©åc¹¾ìƒ î ¶v‚y?Ö¡{¨Ã'<¾â°3øuý;Ö(›P–ò’;x²AçúãË:4÷;âžúI6ÈwD²,*Fr~TÉØü=EE+Ä 3¿ƒÎ9ç'¦}sôjˆK3†ç’A ä äå¸8qci"²çÕCÊ[3dªägƒ»“×;˜äƒÁÏZát]žå` ÄI;”ñ€IÎsÛIŽHaYRMuˆð‰jI,[‚ägŒz`u?Ý=º8BeR׫}ÞP'I$Ž9Μ 0ª4²9‚Õ‘Æâvãw#¢€Ž€NãV¢Kc.‹Á¶Þ$ó¤aP îÏß NqÁ<9"ö‰¢É},’É#m$™¦ã,Oð©úø åšv$²5²ÈûH&âá¾ó{^zý;WioÛ[$P‘ ÂŽ¸÷úúžüúÑ)XnK*‘„DÂ((À¤*HÎG¥"†Ë öéJÉ…<þF²4H#j“žâœWh rj5B ~ $çŽ(£xÀÛQ¸9Ç52 #'"šñì8=éЧ‘KiJa²sÍ7¶i¡({9?HFÒzE5A ~ÞÙæœzQ–ù¹lR{TlŒ3Û&¨=3ïQŽ sšyஞã4Ã’xÅCq^ZI‰¹µ…=ãh÷óؿٛæ’KdÞ…¿¾P|Àúœ­t›03È?ZŒ!'î“Ûõü)¦ åo¤{ý6êojvín2. IË*AVä’àmi¶¯i§Û[4¢GŠ0 ¨ÆF1Ó$ãêIâ°%_ kWs4ýª6*ÒÛIäÏ‘‚F}r0 äU›H5[•lïSS´BS˺ù$8áÀÁ9é•üjÞ¨ƒ¢ ÁÉ9ïíI·p`nlTŠ6ƒß<õ¥9 rz☠$c–'Ú£` › :dTÌSv3ù ¶nÉ÷ ± ½À2y¯9ñ¼Ío%ÝÈ–['‘¡†Þ rrÏ´©$€G^2:潦ìùWœêšÚ†ºl2¤7º|™BÜà“ž2»p¼¬>šS±15-ż25X,Í„‘Æ3&íÁœ¨ œž9ヌqš·ðö)¦Iå£\æ%3}×zB@ ú7Œ5h­ôRæ8íÑ@Ró/ÍŽÜrÝûb»ß éY‹ _,r°æRz¸ö$·=ò=‰ÒrIX„ÍWдö,RB?»ïœõÈRYŽÎÞÞ\1¨o½…q÷ÇSïV¿n”ÃÁÀnµ…ÙªBí%˜ãÔ Çõ¥WÉ'ƒÎ8 FOÞÆ9ž~”Üð{­*œgŸÊp3éLã’IqMh뜚~àGj(88ãJP@v¨ËäöÅ ÃŒž3H ‹3´S•‹c=j<{ŒÔ€7'#´ s8èÙô¦¨$ ¤Ž{b›–ÚrA¾* »È¬­š{–Ù ÀÈ_sŒà{š3+ƒŠæfr‹8òÆ!d¹lí$@ÏÍQÓ¥g;GJ‡LŒêßÚ÷˜æ>d«ÂBTAÎ2ëÉ䎕µóq3èj¤B*iÌC^Žp· Ž8è+J2ÏóÎÌÓÆ$¼E#jÜ1ÁíõýkGîʤc¹ýi_ÓŸyvÎAÁü9ÿ ¾ã b¨éŠLà/äOøÕãÉž†¨L@Æ@4Œ0¼}*Lüê p¿PÎ_Ý}è£?¥|ZSÿ ÜÇfÿ•ÑŠgÑa¢¤>çÞšÜçŽ(Vàr;×!CÃÄÒ“æÀ TèM)idzšVa€3H8'Š)\šPÃ'4 à÷¨\uÆOÖ€X"8þTæ+ÚsŒôâ“xº{SˆÊOaÞšÁr@#9 ·–=GzPI<óKµ>”ª6IÀ4¬ ®A?SY×Z,#ycÜQ†SèðŽON•¢ÅyÎy§.ÃŒãã“LG sey§È~R#Éã†BO†xèGN•Ê<©¤ëm lî[z íÇÎO@:û•ëîàƒùV&·á»ZÈÄù‚N KÁBAö÷Æ3ZÂ}?a} мFHÈÝÏÏÃŒnÇ'éïíWeÈ@Û·`á¶ñúšácYàÔe‚ãÌ·Ô-ØyÇ8V`§gœàxàgµo&¬ñÜ-µÒÀ0ÜrÀàrp9>1VãØ”Í†&Iv2º(%Fò@=ÁÛÇNÄóQ%æ ߸bv²‰0ÓnâES·Õ­ï! æ½7œŸEùÊ;¸5wÌ s "È»pÄ€HõŒÿß&¡¡Üµ˜Ü”ÄѱÇïc'¿«°¥\6¿Ù#n0JB‡ù)¬¸fk]:v’2XáÀØ9ÿgùÕÒßjŠÕ¶¬Ë wçŸ÷[ùÔ-¬aec1œb$~h(M:Î)L‚B&÷dÿ ’yD´qDWV½i‹-¨pÊÓ?Äo2?ô3JåX˜[+îQ*É‘ÒB­Ï×i5Q¬N¤Û˜ÃÏ)eëôU«waûÆl‘ÄwHÿÇÅ.&\4eÂôùËJOã¼Òaaó9Ú$’4hÁà´{Júœ»{qLó$‘GïYÔ £¡-ϾÀëUVXav0ƒcòÁ>¿2)ýj6*#pX3PÊIÉíµ˜‘×°aBB&Þžbå ¸?&|vÈ=àGéN 3 ·±q9<cå?UÿTot‘³ß¹Jï@¤¶1Ô‚G>¬*Ôc–6Š‘¤ WUîtŒwô4ÒÛJa 3Àä‘‚ÙÀão ª·ÄnJHä|Ês´uê½H?{vZŠî9.C}ªv„l’NTA·N:co£S †ÞÕDp¨Œ!ÚXœ‘œàÕO#Ž¡aÅUŠÎo¯f{5°åB—Ë‘Ýp 0Æ;ƒR"­°8 · wdœóÉþ.ç©ëœ•$,7Wv°ÆÒ± Äq·9 ç‘Ü rFëšÿlÔnL­$‘/«ä3F àqž®J–µÜ’Ü­q4²*ïTFˆ½8#®î‡Ê $‘W4»yøf ÒÉÔãÔž„ñÇÓ<´Ý.ÞI¶[[.ÔÜÜ…NO~¬zþ¸ãi]²ÚFs’\õsÜžßþ¬t¤Ý¶)+’[À–êc…@Ï'޵(î‘øRüª 'ðÏzMÀŒ·jÎ÷-!ñ†bNÌ‚‡Ú2qÿ륎TÀÆqœt46ÒGó g¡“éO#wò¦·Ý àçŠz•ÛÏN¼Rê@Úr}h$öÎ "”ÈàŸzV~™ ô¦€c.{Ž”Ý„ý>´æe-õéK¸}11Â2«ïõ¦0 ä ŒÿZi`Às@†€8 >cJTg<zBÀ`©$Š…›É8=¨1Ú¸až*<†$søSYŽ:åHo'€üXÀúÓ( ’Oæ“+ŠktùXSŠ/¨¬qv·šN«—{£IŒ²;ZO`Hèi6mž>”èÀN´­Œ ò)€ÃÂäìix óëšà—ZL€2Hü¨qpy#9ÅDx^yÅNŒð8ÇJ°OBF(1Á8íTn´»k·Fš ΃åpJ²Žœ0äqÅ]çœS$ š™ýf9‘g™wnÛ5Ä’.~ŒÆ´¶…8`cüÿž´ö?.6ýiyÎ(»d621JaVfè>µ38Ö›¸ç¦=©!Œ ŽGçŠaëÇ_N•!aŒçš3ŸË­0#òÆz`S#ž8ïV?Æ£byƒHþR¹;zMV²!*Àç§ð¡@UƒïHzþ´€2÷Ïz‘ƒ×¨¦"ÄMHFõÅ#pØ#·ji;qþsMw|ð¦s»‚ëL ä1šž0* Äxéòƒš@JrEHv¨FIúÔ¹9ÁèF(ŒÌ©öÁ4 í9ÃïŹ»Õ;ûS=œ°—($ã#Œ~GúŠkq3"ÆÚñLÆÈì^LÑ–d!HÚ¿uóÁ'¶}ë¦åñòŸJäl\Câ’.àŽ9å? Fn É$ðãdžGØ Í>`çqd¶N:竹 Ûi ôŒ~u§ ö²¢/Ú®îH&À9õþY©µ‡r5¿™—wØ®ò:‘3 þ ‘L}UQHž)úü¨ÆÝíÒ¯†ŒåZÝó‘™%qøò*u[XÆÙ'–÷q"†ü©]LþLŽ–ÒÛªa|¥º©e=)‰æ¤ÎP¢ý¡aEvÈìÈ*EÃn¸1Û]/Uh£ò˜מ*œ—ðüóf0ƒ¹&eI¢Ï÷X¯  ÌVï5ÈóIU’C¾<œp00¿FQßš³æªÊU°p¥Y|àåGH•›%Û<Òù)$Î ÊʈOøþZoú}ÔqàÅ •P c&_Ö>€ÈÛŸQÍ.¥ÚY ¿1*ø\Œî$uSßæ^¢¨Ïr÷AüÜwåcQч¸9ûÀƒHºbKûë‰}À²–Q°ž¹Aއ®2=¹­;(¦»Uû$dÆN|Ü`C»¹2;§t&̘ìŠKö›¶i.²£²’Fv¨ïÓŸ`O#nÃI–÷2Hd‚'Ž…°qÆz;ôqʃZ–~Ž7NVY3¹W‹éÇC×ðãÅk4M‚’~µ.E¨•a´Kx¶Còà`wÇ¿ò©X6Â'¥;Ž›{b‚,OCeX„¨U ä{ z€T|ÍùФ’}©6žÙÎi‰wpIÈõ¥-Î;ÓT+íÖ‘·gÈæŽ8Ç^¢”.zÔ#¡éÍ;,=(Pêzô¦Èݹ>õšå¹éô¥É$zP!óò“š]ì[# š\0çŒúÐÇ©§p°opq“Ç$Ò‡ c~´ÒóšNwtMÅÎÒ>”ÂAÇ8úPFÑ’2iÀsÞ€1Œ“ƒõ¦†^™¤p9Îiasë@–ÆrNzc1nÀ© ñ“Ž} 5›íHYüKz-î“UÐgŠ<¼EâhPydá°xìAµjèl#ЭKÏ´«F Üü°êOÊ0yà’k! SËww«Ü @+³yŽ s¯ÌFÔ'àõä¿¥ÞŪéPÝ* ’ €yä¼öÈ  ñZIÝhB/ù™8à u¤zR(Aõ=³Å/ÉÎzŠÌ±Ù^#"ŒdðzZ‹ sÏSK´n ÐËê8.àG½1wz“éArIaœwæ˜XVUàsÁ¥)“ÃT*êNìâ¤I6ŽŸ ƒÏÓ½+àà 7)äžÝª6çåzP!¹ïgØÓ•3’NOji xäRîà‘ŽGQ@`6ô¨¸Ï&”±ÂHÁÍ0°çÛM4¨nrAéH$= 'µ<1ôö ,3h`8?•*€ÉÉô£$ ‘éAV1ŸJhM ûûPPôÒçolš7`üÛˆö ²`Ã9¦rÜ`¦' ™íHrÄ0}èÂ’i¤!HçŒqÞ¥%@Ûß½4·– œ`{æ€"°#6õ=+GN½kÝ*Úí(–0åîÛ‘œgŒÓ•ØiaZûUÇAví”u§.À1ŸÿUféeZÿWÚ0ìtÿ®Qÿ…_•› Ýðϸ¡î•£¶T)ÇçZ‡Ó9Á¬=1‹Þ²çúÖÆFæ#9ëB$ƒíQ9#¹Èž[õ5§Ï'˜ºŸ<ü_ÜÞ:~¼[ çêh©¾.²¯Ï|Û!ýZŠÞ-Ø­ Á>ß•41uù¸ÇcÞ¢ÛÈÇæiÁ‹ ç¥r”LÎzb¢,x zT{€cê}iðõ÷ «îÎs … Nktõ¨ðÛæëNÚ+øR O%‡jqŠ ÆN Å*[-i\à®ÁÈæ§áÉè)ƒŒäàñA8Æ9 v$'æŽr¼SЦ7`àÔÊvô%zsŠvõv'ÞD9[ üíÓƒšyÈ9ÞN;g­G“Ôœú S¾~1ƒøP1˜b„‘ÐýiÊ2rIút¨÷1_þµ)/œ bub§ëH[€Kwæ˜w’ž˜¦pp=út D…— Ï?•)à“´ó·5 7㞆š%;ðNh:û@³»”ʈÖ÷À’.=zŽýk™›Â—˜ã6±ßFŒXÉáˆõ ý;í²Kdǵ8†n3‘Œ`Œâ­M’â™çO§ÃË›iS¦ÈHߎ¸ ’Rà E,nœ?óÌÈyü2åŠïŽXÜ‚yÏ5UôÛF×¶‡¾ óŸ9‡"mâ’ Äo¯G,¼g#–oZµijb†5w¸çõjÜ“AÓä <ôóúÔxSL”å•ñÔ¨n3ôéC˜rí§Y­ßÚ „ÅH :ù*xüi|«hÍÈ‚.N$h×ÎŒŸqà ߷Ð4ø‘#¡ÚGýóŠ4ûD`~ÍüL ŸÌÒç‰Î %̑ÓlÚÞZÞêØÊÒ­A¤ß\÷#,ÿ;8Vg\pHdv<è„m 1Ž:SU Èý)s”˵Ð-£—ÍšF¹‘€.e9€ÆìzãŠÖ@ (CÐcŠbä–;‡&•# ðZ•ØìHksÓúÒÃdf†H¤ Ôw m Nx¸£x yÏÑ©‡<© ùS@@>]£ÛxL={Іê)¦R:bM“‚E ±31†ö¨Û,O§ozl²>>QÅD|Ï5Žó³…ÇJÄÞf ]¤}(ÜOJ‡ÌbãI¹ÁëŠÉÁ<þ´âÇ ãÜÔp “×Þž2;Äи¯§"™óN:ÒƒÁÁéFð§ø‰=hT¶Þ@Å;†'Œ{R…É9ÒI\Š`)^y4û#¥&ãßš jRÄä``tÅd rÃ'µw9‰Ý‚°+ò± 3èzƒî*tË5¶· ±K1,Û‹1%‰'¹É5nWDÛRØp?M$`ãZŒ“þ4»¶‘éPPà:€iK ¸g¡¦’I4 N1Þ€$VíÇjyè@éUÔç°ç½)cГ@„¹Gx^4•¢f §Öˆƒ"€ÎÍŒe›©§üøÁ¤YH Ž”&þi ó.qÜf™H$g­„‘Ö˜Ì7gŸzir;d{RóÔÀÔg† š.—r3ÒÀ°´ÒØnzu¦X… àëR,ƒj’i¸9Å4«dc€;Ð"TeNO½9Š® ‚IB#§§zz€PH>ôíÛ[r=éÂAɈáO9äÒàŽ{“Å;ø½þ´ WóÈ#ô¦ ÁÀ hœ‘ZaÆ9>â¢S‚~ö=iY°@^§Ö˜8+yéŠiÀcš…Ÿ<{ô¦ùØÀa´ûŽ´˜2•#©§#À``tÅDÒà zTª3ÉíÎq@Ž9óëJÀ¶~a¸ôâ¢n™<{欬ǿ=)öBËÇNâš±«&Þy$ÓÎÈsÈÍDèAÜ3·Ò‹†Ï'ü$RÙ5ʼ3¡cË€0£î |Ã'žz±­]>Õ¬ôû{v!Ìqª•àv¬˜’æ_I1– hFÅwdŒíc•ì8œžFâ» =G<üê¥ÐH¯¥‚š†®U@ÿJPïÔuváH#' þŸãT4™ó«œ‚MÚñÛýTuvâP¼ýìrÏáIî½ »¿Ù~ýjÚ!¶zÅѤß<ä8©­b~\óÒ˜¸7z‰Æ}ñNgûÕ^G?xƒØSSç¨ñ˯?-ºžæŠƒâÃ#øælåH‚0F3Û?ÖŠìŠVè/0ç*Û©Êäs׎µ‹Þ e äîý(:–NM¯Ð5çXÛSl:ƒÝ1Ròän#ÜVŸP+‡{1žå ü1š™©6ÜY¢ŽŸ¹oþ.‹Ù´e,OO—¦)|Õ 9'·ZÂÿ‰ÎâMí‰àfçñó(X?~òÇð´n?ò%+ »7÷ü˜=3éJÇŒçŒuÍa(Õp º²Çýz7ùž«¬Ÿù}³Áÿ§Fÿã”ôA©©ægn¶úhvÊ÷ëÓ5™³Vå~×i¼÷û+ôÿ¿”"êËÖæÓ=?ãÝ¿øåA©¤Àýåôªû—±ƒY„jmÇÛlÀJÛþ=9 Õý¥lÊ…­Øÿìô] *èN$ýiÁ˜ÔñÞ³dŠüdýªØélßür.§±‡Û-±Ž¦Ôÿñt·Kï20y¦9?x7æ³¼­IÊ·ZpŠÔø|ôýšªŒý²ÏÖÙ¿øåÔ´]±’sô4åa·“ÏLf¨2j ôÛ ;£7ÿ¤UÛ“{dOý{7ÿ 5/–ë€zô¤,IÐU º©87¶Yì>ÌÃÿjSTjä×–^ÄZ·ÿ¤šFùsÔ V-òà{äf³ jøæþÌõû+ñÊO#P<›ËCëþŽßü]4Å©¨²:¦3ÈëȤÞxçk-–ý[‹»@§·ÙØÿíJrÅ|IÍå®{~á¿øº.ƒSIÎ3Ï9¦n>€gžjˆ[ÿã½µ'þ½›ùy”à·j?ãî×?õìøº4á,y Ð>ðç®AÅQ)yÿ?–á}¹Ï×ïR·s{°û7óù¨Ð5/’á¸ä~?áNaÎ8ÏçY«öÀü^ ÿp3øÓÝ.sÿCå9_ÝÖ–€_ÝÏn™àR#œr;µG˺`Ûz ©_Óüšw‘&9½—žø\ÿ*4ïžÙÛ>´ó)RO\÷¬Óm9Ûÿ;‘ìñ5²¸þBטÑñh‹J È4ÒäØÏ¥g‹I¶Ú¥ÉÞ)ô O±Mœ Rçoa².ñʼ¬ÜŸÄRîÁù†? Ì]>à1'Tº ö)þ9Otû¿ä)t>‰ÿFfiy«Å7L(9ô5DÚL:•Ïýóÿ@±˜àZèz„‹ÿˆ¢è,ËYÞ¸ÛƒšAF= ª›+€r5[±Ï÷bÿâ)¿ÙódÄÖïÜ쇟ür‹¡;—Ó©ÿ§ >PüMnøÜ‹ÿˆ¦š 2þX‚ôSLäq·ój°œ kÞsþÄ?üE)°W#U»üRþ7EÐY—yR0>”y„ÏÓµg‹ ñ6¼Ïýs‡ÿÑö ²Åµ«ÌÀ)ù‹¡Y—·ç}E"±\“ŸÊ©°?âmvqë?ün˜ldRsªÞßÿñº.‚ÌÐdŒ“‘NVëÜVY°—¶³wÿ~áÿãt Šñ­^þä_üEÌÕbY@Ta†#Ÿ—9E¬fÿ Åç¦6ÃÿÆé­a>OüN/?ïˆøÝ¥ægÎ2=¸ÅŸhÇ<ペ¢lf8ÿ‰½ßýñÿ YÌFßíKœÿ¹ÿMXVe÷8nY‰=©Õ0lç æ¨›ŒŒêsžßêãÿâiËaqóÄÊ}¸ècÿ‰£@³/+sįZ~õ'#¿jÍ]>pAþÔœÛÊŸüvé×*ǽȠòããéòÑ jjpÃ9ã9Í7=²3ïT†ŸpP§öÍà?ÞT‹ÿˆ¦2äᆳz1þÄ?üE¦Š·$sØpmØÏZË]6èœlßàs°ÿñ*ì¶ïÿï˜øÝ™­“×ÓKœ`Ö³¿³.öýµzàÿñºoö]ÒÿÌføÿÀaÿâ(Ð,Í6!†W·Zˆ±<ñŠ tëƒÿ1[Óÿ‹ÿˆ¦eÏÎ5«à}Ö/þ"bù$6r1JNâ9õ¬Ïì대5«ÿÊþ7J4Û­„füýVþ7EjióÔvâ›ùã½Q:]Éÿ˜Åè$rþ"£þλÈ?Û7Àôûñºz¦–òøûÒ?#àvª#Nºn?¶/Á÷XøÝÙwÏöÅïÓd?ünRòÏ—É`N1Onvž>•›ý2 k^êÉôJiÓ® ãU»Ïo’>?ñÊvA©§Ë‚yâ£gpr9Ç÷¬ïìë°Ç:Åàì‘ñŸ`¹Á ª]·¦V/è”Y Rþâ[=éH_æù—é“ÅgýŠäBGö•È9ëˆóÿ T`¼n¯wרH³ÿ QdšNJðÚy9Šd’œ¨éž8ÅgÿgÜFäÿiÝàñ‚‘ãÿA¨¥µ¼@Yu+‚{‘ÿñ4ì…vio a½Iü*T•ŠwÆ3Ö°+¸ö³j³c=i×ò©ÒÖðÇT¸éÐ"éEît(Å”«.à?»éNVQ¸œž½?¥b,7¢i\gÔ¢…W›ûBÈÔ¾lä£ñ¥o0¹ÑîÚÝOæ(2g•l·é\Ü'Y“_Ãöíû*V‡WbAÔàëÈû)ÿâ©¥æ+²ãéžl·Ks ÎûËG3(ÈÇðç§pkAåùYpÍÔòߥa‹}L¨Qƒý¢–Øç¶2Ɔ±ºwÕnAà7•@ÍMWP,i O«F»ÿ¿QéWî'DêH#¨=ë7N¶ûÈ­<³¼’IJç;BôP;(©.eCsÚK†Ü{ôžâ:-Aºå“iù€çñ­å‘¢`‡kdgéXÚ ­d €CÇzÓ’NÁ¸=ý)\v&iF9玵ZY°0ÅC4£?J¡5ǃÐö¦µGŠ|K’9¼uz\*±ŒçýESñ¸/¾—+ÉN¯ÓäWZZnfÛ=tj›kp1Ž)ÃW”¿*FEsá[°sý£ví£T_ðŠÞö½»'ÞSþ5ÁÊŽËJêŽî0=x§Q€8>µÊ§…¯Ãƒö»­½Ç˜Ƥo ^7æëõÔÿ+ ¹Ô.­7\äjOíyN2­Çjå—Ã3ÿÏ{¯ÂfÿxðÔ¤œÍv?í³.T:ÈõpO*Ù÷ÅKý°„t#Ûüšã¿á˜·ü|\ÿßÖÿ_øF§cþºïõÔÿ¨.vU~_þºSª¯Rá\xðÅÞp..~žiÿgü#7G¿¹ëûÓþ4ù\í?µ223œuæ« þ>ONG5ÅÿÂ-qœ‹›¯ûøƃá[ .®³ŸïŸñ£‘ÙT0#“øŠFÕA<À«Ž_ \g›‹³ÿmøÔƒÂÌG&éûßýz\ˆ¡õ5Áéx;†OëM:¢ç·Oïñ®U¼"ûÙ>=Yéßðˆ¹ÆÜþ/G(GöŠò¹=·ñ§-úíÁ ÿ}ñ®_þ)XÉÿԃª0 R~š9BèéþÞ TÿÀ…n@¿ëŽÙ®m|,€dE(÷$P|-‘¯Ÿ÷ÇøÑÊ;£¤±³¼« wÛ“ÞŸrßð‹?þþõéÃÃ.ß÷ðÿ¡¡Ô è†~u'ê(mF pdAõ5Ë7…¨r3þÙ¨[ÂN:LÃþÆŽP¹×J>úÆšuXIÆSëšäáŸ\°ÿšü%r:]{oj9P\ë›U‹çÍ4ëíóõÆ7„/srÿ„¦£>¾ä™?ïóSäBæ;/í8òH—¯lƒR^<ó çµpëáâãæAÿmXÒ^æáÏý´4r æ;¯í„þø?J²¼|êâãðmÈÁ3È ÿ¦†¤> Ìïÿ}š\ˆ.v'Yæ\ýiXðÆ?àýjãá ˜õ¸ÿlÓÁ³þ¸ÿßmG" ˆÕ@Ê™£#ýïþµIýª€$Cø×<>?ãá¿ï¶§/ƒ.\·âíO‘ÎËûYp@‘1éš?µ€}ú× <sÕnÿÀÚ‘¼zÃþ>ýü4r!]3¯þÖ$ñ"îiF¬Àçtg?í ãO‚ï‡"äþ5ÁÚý%ÿïëQÈ‚èí«÷âü 4êÇýƒÿ®4ø7T'‹–Çývoñ¤ÿ„+T'þ>åIOøÑÈ‚çgý±Ðe?§\daÁZႵ^¢öoûúÆ‘|ªƒó^ÍϤÄQÈ…Ìw#XðêH£ûX0 0ÍqÁzŠçuä {ÌÇúÔ‹àûÜôÉp;ùþ4ùçiý¦ ' f‘µ!Œnë\€ð…Ñ5äçþÚñ x5·|Ó;ƒýé þ´¹s­þÐU8Þ9õ4DÕqõ®Oþ´Îwqéºà„#¯ïQÊGQý¦™<¨ãû•u!³ ÄŠæ‚bÛŒ/×4ƒÁœm,Hô,häÑÓÿilþ£S {gðÿæ‚¢Ââiá €ºãG ]:ê “÷1þ4h týGø×0|nG+úÓ‡ƒ`ãÚŽ@º:1}×ùñ¤þÑÇ@ÿñ®wþøÁ3øÿ?ánvÜÌ£ÚCþ4rÑÒjÀë‘MmSo#¦;šç„¦ïwqÿMMEÿ|Ç;onïó>P¹ÓÿiïÛ·ø©´ê¸ÿW&¾¹Qÿ“Ÿ5õ©×Âs¨ù¯'?öÕ¿ÆŽPæ:q¨&0p}ɧ @g5ËÿÂ'3c7r=doñ§ÿÂ/0ÿ—Ù±è$oñ¥Ê¹Ó HczbêQ¾9üs\ðð«‘´^Üè%oñ¥ÂE¶Ü`ùêßãG(\è…úð'žO¥4ß©ÈÉ>Ýëžo ñ´ßܯÒcHPæF×Ûr¹#ûJnÕ³‚qéÍaŸE·úðÛcM> þ‚7¿÷ý¿ÆŽPlÚ+Øaô4 µÇÞn½ÍbÆ9…éúÎÔ'ƒPguýáϬÍO”WFѻʜ?B*3z™¾nßþ¡YcÁÑŒys_9¿Æ™'ƒca…¿¼Sê'oñ£W5þÖƒûë¥WšEeÁ®k+þP c¨]“ØùÇ?Λ'‚pÄ­õ÷=Òüiò ¹«ЛB öàSÌʘ">3ŽÎ:ÀoÉÕu+õ>¾y©Áw Ÿò¼ëÿ=øÑÊÆó\HWN{S É#qÜ÷¬càË 8Ö/ïáãõ¨ÛÁ×Ý?¶.ÛiÈÜA£”.n,ä–'éN3²/˜c=zu?αcðøm^ë>¼TǦWX¸ê?—(\Ñ2\ŽD_  €4É2óå¿^ÅƳÃZ©`S\œÀÿJþÝqy]nFÇfEæ€ÖifS»Êb? Š®ñKq~ j@™Ø8ôÖwö/ˆTçûEÓtýzoöo‰QŽÛ˜HCþ4[ÌÞÒxlí’`BŽN>ñîM9µ2mtw®ìž(WÏ™nGºñ¥+âhó”·`{€Gõ¤“ÚKt0X75—uzˆ ,Ç­sæçÄ®ZÒ'>ˆ¬GU×*4’süBNŸ¥\S¸™Èjí=îµ}q64Ìâ3Ç”SL>i/, Ò1%¶úäÑ]ièccèÔÓÁ þt£N\ghØ·­ W<0çÚ¹livP;fœ,°«âÍEîÌñ`3÷Mb\.? ÒòVƒŸJ,‚ìÍ€›Ng©P*{ùÆŸaqu!CHwd3Î@ƒŠ®Þ/Ó>Íç±™#+¿ÌdlÆsÓéù×tô‚ @ÍGäG¼@+4fFË•#< V4ðً£oFŒìŒ#ÞÑG=Âç¹#FŠœHrgŠ,%]Èò°Ê‚DoœœÛЊŽéWcŽáänqåÆí1“Ó§"¸íCN½Óí­ÚâH¤I”‹  0£†sÈ>œUßk,‘N ¼¹B 䓇°ëéG³‹Z3;ßøK´–”Åæ¶áü%pzã¥:Oèð²ÈêØä8¯7GTo´|ÞhVË)nHÎ'9Î{Ö‹˜.®caß³;ǘyÀÈÈ9ärÇ¥/fƒ™ÑñV” n‘”œpF=3éžÔéÄ+ïuŒž ƒøçç¬\™dDŽ5—RHÃváÎqŒü¹íOr³k24yTü¯%̃Œ@¾{Îf‡ÌÎö/é’ÄòG:£'å}úqN_ie¶yÛ›8ùG\ôþGò®îxìbŠ?"Л÷Ü„R 8˜/\àœ÷¦Dð[JVÜÙ$Ë(žuß+|ùßà týhöh\Ìî›Åš:¸O9·Ÿà Î{ñLOèæO,Αœ£×ßÛô5ÇC"É>TD³F7Jîe!O¦á!ÁœzTpLò\—€Áæ(Ê;G.í˜ùHýáþóíÏB(öh9™ÜIâÝi¹QÆ}HÇAÏZÅÚ2•S;n1åœçÆ?θ)u“2ªïÆ G»°qݳýÑ×Òœ. —!˜\¼à‰ë„B8#81“Æz‘G³AÌÎìø·G4“2“Œ§ôõ§ÿÂS¥( Ó`€©æ¸ ›ä˜#ÎdeÜ&ípê<žq“ÇÔ½qÏó£”ftÖ$)å8ìjµà•?AZѰJàç¡æšIUÈ<ÓQ ²¸µíµ?ïªCo…­NÄ“ÀÁõÅ40 “žøÆ)ò¡]‘yr;ÉáE)é•8§ÅwàQd#h8û£>”O ¯Ö½†GêE+îØHÁ=iØ.Gäuùi:~tåg9;Ðìê@¥Ê#ò¹éÚ”B$T‡ n'µeÝ_µ³Ç[Mq,¹!bÇz;Ñ`¹  Óæ€ d~•„5—FýíœñœãÆN}8sRnÅüIu‘Ø[Hߨ…scìû‡?…0ÚãœÌ!¶†ËÞ8ȵ›ÿ¡u”p—dç¡¶è@QÊ4|ƒ·8Ÿ\ÓŒ-´ñùŠÇ“[X€&Ú\/óÿaUO‰ŒYi -NÒ|ÈAП7­£æ:$Ôy*8¬øI’F"s¿…_>O·ï)WÄJ2ܽþÑú¢æ7¼¥óQ˜ò½ëüOd)·”’2–.Ÿ÷ÝC'‹ !JÛJwp¡eˆäû|ôr‡9´ðƒ’A&›å€/çX âÈÙ“|¿xù‘qÿÔM☠ù~Í"óÉ2F{ãûÔrœé„lô«#€1ÏZä‹£]Ù‚VÙ€Fô'·ÞúÔëã"0±é× û‚à´côîïBˆ¹Î¤F}ÿ*Q'9®Y†§>(°OŸ+Æ$˜Ù±Î;Þ— sžFŠƒ óYxŽÆx|Øî§÷˜ôÉ«QkV3±T¹Èì’ü©X/r%½i¦&Áæö¸ÉÚsèiÂxÈãžýh°îEå0èE'–Õ+\&r1ïŽj7º@,Ê8äâ‹Æù^Ôð;Tbé\²¨RAõíNK”Á$J,ÆOj_,ç¶>•:ÜãŒf‚ÇJ,!1œqŠhFê{Õ¡Œt¤ÙÈÇj,+,d“JbnØúTädóÖ•TžF(°$þß$ŽÂ®ÉÆÈì(°¼“Š_$äqÅOÕrzÐN6лR2xhvÑ×…r‹ÚƒÔUIlCº1õ­vàt¨›ÐâšB»9ÿØjFya;Èí8ÍÔ6èh§¨Î¯Êϱ¥óéVÏlÒàÕ%±œsF̃SíÇjB 5 Ua°ŒM 9c×ó©ŠÐÓf`±±ôÒˆñvŸ¼€Ca,·WcÊiá‘ÃE9-€¥G'¾ [ð¤w2Z\jw>|Aó Eç‡MªOÌÎ •o´ûQ}ah±'™5â þX ár1Óø{V€†o5n¢·ÂÉù™ƒ¨Ú@]¥sÜ‘—cŒ“D\NºõªH–%ºàr¬Ž0*‰-ë†qiuæ}¢à IÿXÙçñŽ9½"à jÏŒ~ñ‡Çhýyõ­²Ÿé–Æ8P¬Ê$#–‰wT9üw¯GµVþζþZ–ç¹þ¹¨™Q%Oõ¼Š»‚T(çØœTpÆ…²853«d*zäVeŠªÀT}sšGÛ¼Z’=Î,3ôÅE´o9eÉ>´#´î-@ µ²~´é8È4Ø×vî™ö M‘Ìá–:f—#fzSäL7Þ=i¯ò·šc  y4¬¹ã Å*.XþKnØX{v ùghÅWwœŽ=jwõÈôÁºœœ ŽA…Â3J£1Œçx版S·ë–éG)ü ŽÔn"' üÝóÒ£i#xÿw #Õy°|C«µ„ÿgš›$,^ñ‘ÙUŽ@Èàt98ÉYéz –•l É%Ñ! ºEÜŒÍÀÃíã=@I\Mžš™àñèzÓ\ífàdŽ9¬Ã×z~©ö•Ö¯n-L;½ËîÃg;¸ÀöéŸzÜ`7g‚:sE€Y›qÓ½s÷DÿÂOaòÞwàtù£?™­¹÷>pG €Ìá-b,Iç“ÿ­B‹ªÞj bóK§e Ä€üMNúRÌ 0@»´ ~U_L»Ymžw²ÎÍŸÇ®´“È3õ`*˜„:L ùó?áV´È(® Í·v8z{æ«$W~Pv’>‘©t¸ÜJvËsÓ¸íIì2Æ¿”·³ ò©¹Qyû¬¥s–Ò"krÉ,e•!>Aßò““¸sêïšßñ™>­§Å åºN%,zã‘Æ=BÃÆ;y6´Ó&ÿ´NççaØg S@ÌÝ9D–BY4¹#’G‘ÕVß7ˆ\tÍ8ÛÜHœçï¯ÈÎðÕ†ÕãìÑÃk#0„.L‰è: óÏvÙ®‘ˆŠ6ØYr>¹]ˆÄ›hÒ&@8RUÇë²€J¼Xr§ø]²¼uû¼VÛGsåöD±ç‰T׊mÎ¥qd©ö‹9AKÃÓ®qM1ØÄ—N þÌ‘w¡òëòûU_±0P¢Å•Á$0FI錟þ¸«Ú™:ÄqŸµIg"¶w€nœO~ýênV3]D  ²#n8Ϙlb@ú}º‚F&„>8î}{š¥'†–y¥Ô-öm “Üç4ô*î÷K†éåµCûM¼´l½‰’½:`æ·u?±ÞÅ5¯ÚïVó.ò¹¹ŒçhÉþ.Ÿ•dÅaƒÈ²M¦É† «’Y;@ÉŽON{URb(meV›g0’7”çráN1ÓŽ(ê"¿ ÜØÈL‡Ì´p|«Ëv =ôÏN½jά÷Ú>Èaº²°Êÿ1#®ìÆ*æ®ÞFZ+‰7–RȶûÀðÃŽÿ7ûXâ¬Ï¤Á~¦ëC¸w,Ûv,„Ç'}¾ªr~éê8äsOÔA|G{o(ùá z° |íÍvVë©jÉ=¶®¾Aså”+1ÐŽ{t¯>Öì¯,nJÝÇ$s6íņ2}ˆÈ?Q^§áÔ|7c· û•à„Š&•´ÜŽßJ½’ÝLú”»ÏÞF *š{ŽHU¿Ò’]Øà'¡'9Æ+F6 ÁU•Ðs€OÄk,«Nqî~VÅdYR:?Ãöx’¤°,V4 Ž@㣠é¢B$8É_Jľr¾'Ò –¢lޏÚ@ÿÇkr&Y[ŠL }Êr2qÏ59qÏAUáCÈ#­X ÀÒ)±cžM8© ŒqŠvìæ“€nÞr(Ú)Ôwé@ )“Šaˆx©O­¨±„y#4¢0=êrƒñ¤*prØ W# (¤ÁÏ_zxäqŠPsMŒ‚O·­5—#¹©¶ü½4®iØ …9û´TÄ ýÚ)XÇiÇ¥Y«;sÚ“o=(±<ä­!JŸì)¦‹ H¬Ê0H¬~ê=7Kžîb6¢á7ÀÀÉ­Â9À¬ n››¸mcŸKû4 ‰á¼Bí ï´nñê*Vå©{á­1îõkH¦Žð“í‰/‘°ÊC|Ë´g‘ÎO^õ±ã[¨™¡ÓÝ£Ë1–IQ>QŒdä‘¥vú}¦届Քƣn?„ã§Óô¨¿³õ#u#‹èD”O#æSœ’NyùT¼Ï#:s8ösÔZÚø}kæx‹]ÕÛ8-ƒ‘Á8 ý}6ιéw$RL$E’ÏÎã§\ž¿OJêüj¶¿ n.î¼Ëã$¯ÎÎÛAü±Mè-N:ûW7Ë?•0¹º™žÝSï;1å§áW`²7:½–Ÿ3Çq{)Ì˾q÷—nA'œžn9¬3yöMzÂòVs ’«’Œßxqœ¥lǨÙü}j]šBÉÝ[DÌdg¹Py98ÏûÇŸ¯µ`ÝÏ=ÝÔíùÖËäÛ” ¸ÚqÞãæ võõ[ceì­ì” ž0_k•™œ(Á%•Náî0:ö«××:}¬ZÞOÌ«Òàn?—Ó§é\­­üpÉ0†#4ÌiZF•s÷p0sôG6³ Þ£—;1Uhü†À@yôäÿJ9EsV[‰ôÆÿKµìå7 €ã¸?1\ õA``Íl¾T¬ ¤Ñ;qÎzñž„}=*yt‹k¨Õ‚< e£ØÄ4@¯D=¸:ÄÓã†-*ÙÖÃf[fíÅøêXõíÆyžÂf{Ƕ÷.ð:Ùš£ø€ÆYp ˆÇ=kv‘ŒeTÂ[˜äd È œ`pzž¹«×·Qup#çW·€Ë8à3gÐ üÿ…1o8Z9¾TAœÈòñßóÇz¤&F'’ÖÈCF6FPÊzíê3Øvã)lÔÿoêReeG$FsÌ ÔíVâê‹ûaisnßk\)„O×#Ži¶kÙê7—Lß¼»mÏ*ŽârÁ¿ R¹"¸äõö¢0…Ieçßš`2Qæü¬GáM%D{1€;ÓäSæep=N(pÂ2{šÌX­®‹s,¢e†8‹3@Û\}9ëÅyÝÍŒí§Ïi}1jî„QÃ#ƒ*¡ç sÏjôæßÃw’<ª©°+yƒŽ[ü­ü«ÌmžÒmRÆÞ8ìÜËp¿8XX…<ýì+ØééW ‰g°CòîBãDäŽ2zÕ•‰|¸ Z…W YsÎ9¨Rvf6wäæ±jR>•—æßµåÄsOs·?»²Ã=ÿJ9BçC,š|ˆêò ÁŒ:¦?1ëYvséFôÇ ˆ™Ç˜ñÈÈ8#ž[둌U%·ßŸ1ï$‘#,˜Æsß ÍÛÛ¼ãËÄÈå£Pç9É<â© ½Í»kx®–÷³\B¬3²HÙXüX#"·-–ÑY!ù$Ê£;±ÈõW(úM¹1¾Ryªó|¹À9Æ {~U^Âåb¿ó„Á¥¶H<óûÌj¸^ÆŽ©yáËmZàÜ››‡'k¨ùq`ðz½:ÕK›"äæÜ˜­Ä|‘>÷|óÓ»¡ªØÅ唘ÞLª´¹Àç®AÏ×Þ£´€½Ì‚8•€S•'8#=­4’"\E¬Ñ+H§<ùfrA9üzŸKƒPžpmO–ƒ*îÙe#û¬;ÿºáZ–Ú³»]ê8òί&Õ¿ÎÝà#Ÿ]´º®§wkqèÖÓ|êÈ·F-‹ö(Ï>§¯^i^ã±w^»Òm4Óˆ.ØÆ6D9“w÷”ç(>¤ÿJ›ÃNŸØ¶‚+VXL`¨-¸ã§¿é^c¬A<7}§ç˜s.Næ$õ$÷¯NðÃÌú†b(‰Bâ^¸™þtä´wfãùŠ cŽ™*ŽV¸·"ägÐì#úÔþ^ÅÜþ'8(}¢XeeÞ gÔšÊŵ¶E¹ðýÆñƒv>ÎŒ?Zß‘yxÈ Aáøó\׈#_ì}0q í±ëÛpÖºf@‘ª QÅ6ø™d ÁëR5 [±„eÉ•e²zF3PÊCC(8§ç#Šˆ/®sNÁÆ4†;péÐÒdæ” »õ&—Ò€h+מ”§Žæ—h ö ÌqÚŽ 4â0( )ˆ€ÒcëOÇ’)qÁ¦!ƒ¡ûÀsÍLŠ1Í4€1@Æ(¥$fŠîˆÍ!ê)ØÂã Ó3Þ¥¤aÅ&‡rƒÛñ®Æ6Ñ]ø‚ÚI­î¤†v;¡²†EË7w”ð~SÆ:s]é©&¼›VU×5Û—›MD—íB°Ì{¶™<âÞXã¶ÒxÆ)$\_S§ðþk§[Û\=³ÛÝE]aH•÷¶Hm¹91ŠÃÑ®5KÝZßÏÕn’!1žUÛ>×b €?è3šë|Iu¹hÙ¤?(†NOËÐ+zú\‡4½0Þy·Ú|“»¯•µƒy1$ hÀû£’OzÒå§scÆš¸±ÓÏž 7ýäÏä'qQ¸rG¥IáH`{ûVŠh.f;Ø^É(DP@òË~lç·¡è*ŸˆÓT“R†ÛMÓn^Ö1„@Ä㨖0 #ŠèìtŸ À÷÷ >Ïiæ¹SŽI9?ÌÒÎÉ⻡ª}›ì‘yr Žgi“q'óËnzÿã[õÜh3—Y¸*Ù·²äà‘Æ2 àã­UÑG…îµ'{ >ï Cµ‘…Èoâ¨>ù÷íXþ6Ò´ØïíeDÓ¡¼¹‘¦’kË•ˆ6háÑ·@È­;j;•¼#§%¥ýö¥ ºì†AVW'?+ìROÊ0@Ü9댽[]¹Õ¯MÝ·•âl¬lÊ%‚È`œgŒ×YàhàƒA”e#–âY. BTpW;7.ÐÓ·¦?:䯕5]by¡Øßi¸xài› !V B³[žOB7xæšZÖè‘ÙxrË•i'Aq#ù2ŲrBðÍüÉë\ÿïZÃÁ×1)ùîJÂ;ä¹äÃuiéêsEt÷Ö‹Ä—ClÃHf%FO²<]öŸˆ|9¤õ vn]zü©œqß<Ôý¡ÛCYÓš+ý'G[”‰,íR0DNüe¾\Œçh5Y¢˜øZgšpÒ]ß»,ßßH”F£ÿ¥I©\é×ZÖ«upÅd‰œíYýÁ„êrÀí ëQÝÚÊϦèñÉr[X¡; #Íü­Ig#«\É>›q*N²L#x€pØeºcå#=xúW±jºxÓ¾% R ¼0‚ʧ€I8ü ¯)¾µ’)­š…Â[\‰%Ào#}zcŒãç©îáh]¤[/|1)…— äÌ$ÈéŒ`QQ6•…g©ÊK½Ý®Ém±¸î ‚0 ŸË5›Þèãîý¢Ý3´«üñóŸ”ýFHü°y®ŽKŸê—O>—ª-„…²Öš‚ùXç³cê6³I þú7 ­ÈãUrJÖþ"J _DÁy0Ü/•“èÙ>½Ã¥hß_<*³Á[ÆuÿHW0³£‚ `px'¨ï‘œåÒm&…¤”Eó¸äp=¿JzèQÚÆâÎk‹g^ €>ƒ°¥£ÙnïÄWW±´såGòwmÎðª1ò€~¼÷«šF˜c€}–æEˆÿ­IÕ×{s“µŽ2NO¿¿——~-‰¶ÔÕÔŸ™&…žIêFzŒÔFßYi•EܳÝä¯ãÓ§jVì;³¤—M³òH[ÏÓ$/_¦3Tà·Oš)&½ŽWÆ×V„{`¦A¡¬Ñ§jì¥>Ûm±yÂÛ¦OOosþM”åFØ¿7½=ÀÜãpúQ»ÈàvÀ¬ ©çÖ•”¶*eÎAcÇó¦1!ñÏ 7mÇaÞˆÔü¿6Gzü#ƒÖ•VO/'å¦3G„·‘Tmw÷©Y|Àîž´Ý¡@ÍDÈÅÉÚH4o/ˆÇ§Zz0à‚ùâ™/Ê¼Ž­ŽFi’ÊW×¶Zu«I}:Go“§=¿ýyª–·¦Vk²ÜÆÄTì‡*jmoGƒZÓÎy¥‰ DvàŽ¬+/ Ão«[ÝÅ«ÜÌöÃ\¬…²0AlnǶi¥ žç]·jaxÀæ˜ìBpN À#ŸÒ¦þlcÉïH\9© ™à1XÛ“\ܘŠëÄ—Ë…vàÿÓ<óù×aˆðA#Zàõ¡¶ÛĦ2e†!·¾R0GëUÁìWÓáŒXÛ$‚Õ±AéW8ŽWË€2<¹imÕ–‚¬¡Â€G–T…$s¸àóºÛü)²DK0«¼E p˜b´´õmb±Á9þ3Y¹(‡&!ÿlŠæµ´¿œ~ðF¡S9ú±ÿ L Þ!’XÚËËgS¹‰*øå>õcpoZö+‰™- ‡l›œX‚Ù ÷µ<_y „¶pû"Þã uùk2ÚÃϱŸPŠ!,2ÄLé!#îçߌ~"šØ],ÄÖvî•Ú029EÏéO[iC3)Û´  d~&³¢‰ÚÁ€”„|Ü’3ŸLš·öfˆY›åP@P£·°ª4ZxYÈçŽJÿ2[(JG¹P–ûÊ?öoj®‘|‘I¾\± °=*W„y“:Q³îæFõÇ­G$00|\Gɉtê?àUR;h7,­t„“€U”ÿZ¶T±‡tór3ÄŒ3úÖuóÉ2ÖG ð ±ï޹ühÃZÀYŒw'ç8ÁÏ·’Yf(À¥ ~UFeu€I7mŒ‘‚2Ý{ƒÓúÕ‰4òÖöÞKÂ.¦˜Ç¶l(`2 Ž¿â)Ø.Yþͳ`€Hõ„ú{ I-¡dTy?x»‚ò猠Žm"y§Ž5I ¹ËïÛ’½Îý:ò*£AÎÎ1Ëc 9¦)ìmÖò5…c,Š’¥s·©ÉJؼ`c‰Y¼ (ãq#Œö®\f1±…8§QøU¦º¿Šä:N&s*‰ déŽÛGåI ¹O]¸Ö’ò95+eÝ ²¯îAŒ}i·ú‹êRÝK属Mß*îÚê±ä8ô®Š×ÄRÃò\†HÊåž0tç*ßøUÉ4ëûIVÌA ·A¹Aû¹éÓ#ð9¥p<³SÊ¢mrÄž@údפø=U¼;cÐ>Ó’c=²:ƒ^y­é÷ºMäv·±ílî\ý×7 ï<+ÿ„vØå¿å¡Äjç¬D·:UKBsÙ_üi¥’8ÚPCme?yúþ4Ï)K Òàg‚'#ŸÄU{ô+f첟7‚?~àç8¬žå‡‰¶É"È¿»xŸîÿvE9®žó¡Vë‘ÔW­Jn<|áX+@]IÁÁžá]u¾ZÖÜŽr€ƒëIìèQƒàjØ€`r¤f©[ghÊåvóêMh/WhÇJ–R'$Š`Ó×ou©6Œ{ÒBGZ²*b¼ü´ÑÁ¤ úTÛvŒ¸¦ðh)¬¹Z”ò3J9 cž”¸'éRè@§…ëŒf˜Ô`ã4˜!È=ª]­¿8üi]@$šb+”抛"Šì;ÒÒÒVü§8Sz Ó¨íRÒìˆ24É8! ‘×ë†Ñ¼ uk,RjH¹ˆ9–EM=ráã$ã ð8®£ÄÉ¢>œ‡]¶Šx€"¼&B\àª2I$ãŠM/_Ò'òìmfX¥B#ÍFÑœ)R2¹‘ž¸¨hÑ6‘Îxæ }7N²‹È´e/,‘ˆXARŽÈ˃Ç|›Â‘µ‡…¥¹ÒâK©fœG”†Àí>^ÍÊ«òöÎOÖ™âËË•Öâhâ˜ÛÛ@ÛØyê>c“ó"ÑGzÝ´’M/J‰f[TÄ9Ï9wä‘–îIïSäWCÓÅš•Ö¥ ¯öÆyÉ?pÒM»â&«|Føô4ŽpÍó,Šíîp“;“Æ9ÏO¼¥y„¬Ú'‰uÆ)¾¿ò“?ÄŠ}zcþTEt0"6ÚŒZ„™n.®V5VVæ2Àcz“íÖ¥Ö..u»Ûɼ«tÉû‚· 1¸uÛŽ‡óSØ^J5&æHÒKKy –P®O ­Íõ8Ò¼MÓº¼’U=Ya9'—Æ2=²k^¤\©w Ã7Äéqp¯4°Èv²6â 9ÇÊ@8ü»dÈX,RW@©"‡oS鞟©ç#µMie¥)[yÉŒîLQ¦”qÎF}xæ­N–‘Ýyw—¤Èª7HÜp0["RC“Û<Ñ}DeIΨ’°( ql“÷xÇ~ÕjAoäGßÞyl‚-¿7§ûÝN)'¶Ó¢!I“n1oÍ‚00$푊tpÀ©æ4³AD…Å¿FÄHo½€EO<‘Ãh¡¢S‡ùO¿µ,Kp®–ù.¿ëáý}°j¯äåL›Ã´2(-ÕX0êx¨Ìܴ˨$гÈm$$n3´g°æ¦ÀjÃ’66*â2é9%TŽädr9œT1âH»–B†0w2юܧÔU¡²s dÕÒ8Jyh ‚däûìÀ稑ЦÐê¶ÆÞ­Ä C¸æ‚9Á û¼Ž¾´ì3^tK%2º•v\åqŽ{{Ö‡œÅ·¸ÜÊÁc Ž™úg¹®jM:ì:Éí¡òŸ(ò£Ç—0Olõ4·mÍûî¾Ô¢ü²›åË?÷ÉŒöÚ“B:I@Ó £òÙN –ç×Ú›a%Š@é‚Í‚>µžak„køÅÊ¢¡+(NC€xÏQL··‰©¾Üçh3øéJÃ-Ìé4€mÄŒñÒ°Ú·òÁ}äm%£˜…‡à|ó×#V[[eó)‘›\¼“ùjËÕ4]KQƒd”-׆î¿*gñµRyO •‚ÊβÜE\ò~n\þ§«›¸§½@òÙ¤|ódb@ têi–ÇX½ñ&Œuh×Î]J[ìÀPN>«Ãnn¥U97F¦"ÚÄ‚G«}óô¡‚=+@´’ÒÒ8Xa·†/Érô*ÚuùÆN02j8²Hãt¬>¸;§éR¡A#y›ºc¥bÝÙ¢- äc½CäÆ~|’biJ‚¥†HÇLRF¬<Ÿ¨#€Å×üEm Ág¸šiK¡73c©ôÇ={U]Å1êZ‹Ø\é×z}ÙO1é1æ(8;Or8ãŠ×¾ÑàÔ/mn¤óÖ¹1†®I”|y<> ¸°]5fKwÚËÒû©Üûg5ÕÚjvúµŒ7–ò*CŸ˜c¸#¨?àkÏZòÛˋ֎B%\°{k{” 9ÇÊwžFO§¡[éM§Ii,p^oó^?*XVU冨÷íã=y\¢¬MË:¸’´Õ”³Ù¼Ø¸…K©ceAýk6ëJðmÍ´²é18¿‰7gO”ù‘{àœuÆ¥oøÍ¡k[)[ÈXOµZÚo/œg’~_å\æŸy$>"5Ö¢Ð;íÞÞ9—=š2N:t¡-çMá;ëíCÃÒßJ²Üm*ò!RpÇ|u®†4– êH¬ý.îÖ÷Oße Ab¡=„žÄdtïZI#Dç,7Æ{ÔŒ¡¨ÍŒF{‡òã'ÉàWy"Ϧø‚A‰KØÀ9Ï#ôúWGâ{Æ[xàe*fe ÃzûñøW+;ìÒuÀŠsý¦?*sÅR]¶ŒyQ•H˜àBãëVs"Â91ýØ¥¨`ˆyq ·Ê½âúÓ÷D¤ñ©=Ìdb“)‘ÕNôœcž[™ÌÇ{6£y ÔÅË®Ù8ÈÉäà`Û5H´‹H¯ –™Ä&22¸ÆsèÏZØD>Z¹’CpÏo½Óõªð:ÚÅ íy¸G`Û×qÎHõÿõzTGQkÁæÀï27œð}xúþÀººDD¡ç`é¾C¯~µ^WÓaùan&<™ÿ GæiFœ×áMô›N3) ö\Ö¯1-býÑB‚c§®\ef!ÿ³Œ 8?žçU.Ì <¶Qˆº–cg¨Ín>;Å}Ìàñ„B?çÒ°õ3joi£ÚŶOòéL ñ¥ ‚Ò@“A Ÿ;Ä\6ÜŒÏ;ˆÏñÅNº5äÚmh¤ûŒ>rœ¡8é‘ê;J×óDÖøˆeY ‘à õÎ}úTöÙâi ñÇ"Ä«ÈúóBlExtÍM'ó¥ž?˜œ¨Ëeyà篥¥K©Û¼övÈÓ&ÝP “±õÉ…Yûu¼Ä{IÇ1M¸¦EE.µ— Ae*Éu'Aý×'¯§4‡,öš”77·UÀ¼d(ù}jXmî'vÞ‚d¦þ¹Ï:sü«·µ‹T%¥-ï8GÄE]xo\õëíY·:T÷ç76±[Ë#+,b@6®wÝsÈÏâió Ç%3}£d™ŠGB6• ’<ΧÒ/%·¾Äjï‰#\üÃtèG­u-áëun×—Ó.ÚB0`;-mYéº^Ä‚8Ôcæ`1C’Ø,cjº\^&Ðe¶u y `”½‘‡Ò²¼&Þ^lJº;©öwöú×S¥°]MBã­Âm6‡À“T!ž$»½·ˆåNà¨í$çÛÔÒ»µ€{1ƒ°FU9æPM?hœ7`5yý*F]ðñæç?ÜãHb?f—;‰Ú執ÖÌyB7ƒ5ƒåÁ*¨aË ½×G¤²K¢iï°éߊ£wbŸÙº’ăh·lg¯úº±á­¿ðŒi˜aͺÒ“ØçAió×2W'Eh>sŒïY–ê#ž3—ëŽx´ds· -îjK+¹IT++/¸Í[F‘ÑŒŠ«ÙH=j®Û¢ƒ°Ž¼õ«1T¿šÀŽÔ…rPFA–ÈãÖ£ lddôòjQŒš'ãõ¤nAà ž9»p84¼‘ô  Í/ç9?JAœž8ÅÄ Ï&‚ƒ;‰çÍ;QŽ´ÐÃnÒFî¼S€z“Hã“ó‘šy89¨‰V%AéͱñدçE1ˆCŠ)Ø,vÔ(®¦ŽA) )¦°È"³’bkú/öÚ[Â÷sEr %Ž5Á“Ⴜó‘éF—áë-()‰<Ã>K:‚Ñ!Ú¬8úóÉÉ5Äø¦U½ñ]ãC8ÅœK  g³þº0x>†»›K?ÃpYØÌ’ÜÅ …’àœ1îX‚HüÎ=ë6uHó‰.¡Ô¼TgÂFšôDŽ!¨ÎÐt,Aàÿü+¶ñØ!Ð[Ë+k§ !Íe@›ð ~ïñÏ·gnâÙò;su÷¤òTí-ëÏ5ÍøàK+i°,WVvšÜ3Ê©0Q“Ür:Rwi<kæÝÝÎ]fû/î!™$å€?*œžz~6|Cgª\k %µ”ò"E²)`ò7',ÍÎ…?(©¼35¶•g(¹¶¼µgròÜÞ’Ï¿3 P8ªÄš´ÚúÚÆðl{i„hÞ,›~ì“‚pê1ƒHzÜÕ¸Ó®m<=ÝF=5íâógh‘|²pw}àv®r}k‘ð…´z‡‰m®]°ÑÆg–•y¾5 €2s¸`ò+ºñL†\ÉgÄz0pÇï§‚F s:m¦§Ñ’Öµ•™RiØåWŒn*3ŒƒÒŸA'¡sÆ×ÒE%…´1ËæI#Iæ,{öìÁäyrâàci¾´º½±{Ùe¹ŠF¸;÷"ƒ2¨ýÒ½{k{TÑt½NTköraVÊyÌ‹µ€Îáœ@çµMa¥Úhºi·±ˆˆAi6ûÌNO'ßð©[›M MKJv[ˆ’á£óC”-ÀRW ÏWián×@ƒGžËH»¶†Fuo·H„±Î ÂõæºÛ_^ë¶ÚsøvâÕ&vK‚¨'!yÏAß½[ñ. t嵎{&’y ´Í±Gp'ð’e©_tp£ÁW^gœú.›æuÔ¥ty–%•-Ç\W?á/_kú˜†îËN@¶åÝ¡÷À!UÛ‚9ç¢ïpMv¡á­Bç™ü.êFNbÕ¸Á௠ªòxWT½†8ŸCÔ<ˆøTúû ô¯Iñ Ý宩i¦éš\wr¬Í4­²8Àõ OÒ´ôZûH‚æîÁ¬æ;ƒB[8ÁÆGN^”ù݇¡ä’øVñmŒhzÙAžêœœžŠ)‰á‰M·Ù“D×¶ ¢X‡\{{ ôS¯kìÓèÞû]ŽHIå»X¼ÜeF Ç“Š‘¼Að¹ÖWOhåYDRÛM0BŽcÜŽ .f+.§Ÿ7‡gŽÄZ®‹âN@Ûå¶sM‹DžÞÝ­Æâ//`Û¡À#é×½suØV(`T)$wE}ÙÈÈd}k+Ä>,}#XžÍ,aqjûžðDÌH<#ž”s=‡eÐâ,ô©ì‘Ú -k±'6‹ÆI'8õ¦Úé×vrK<6:â™X“þ„¤tÀèÀôþuêÖ/´{ó ¨òÀ%òCä©+œúf°¬¹ùSƒøW¬ø‡T‹CH&š;¹c™Ê&0û03““MÓµx5Ј/ãHÑ¡’ ¹ÀÎNÀ§Îí{ ÈñÉX-û\Ëzr0’ZÈ÷É«hÑMz³‹í(!êÜ8Ï)õ¯L¼ñE•Œ²ÛΗ²m,6Ï$h{‚Àc×ÅK¨%–©á™îì¯íü£2]ì ÜàgƒÛ§Î Xó°&Aì®tÓŠéWpÇÝ?0ã=úöÎ*]2ÞîoÛÜOc0‰D,S#'ȧÁã<~"¬Îó4ˆåðÍíºÅ½®̼p]T’>¸Åtö^ Ñîlí§}:ØÈÑ©gŒ”ã¨Srî5´É“û6$Ÿ“sa³‚yþ¦´í®#‘ràqUmô„·bŒ"F£ ߯ĈƒhÚIêEbËC¤ †èAý)‘"‡ r°©wm+ò’JfA‘ÇÓ“@¬Ël @ã5I ÈÏZâ¯üo.®_[ù?mŽ+-c·…ËÆ6‚y’F8ú×Y§j±êÖ s ¤ñ#ŽVá|¶R=E; 䨀¸UrM,ÊGR9"œ¸Y €¹Å?jIþ°Œ $ev1Àâ£;L¡Š€;äÔär˜ÛÒ¡òc'„$“É4î0|øêFNGZ°êJ€ˆ*3c8„Åb³ ÎÄgž3šd‘€ŒÇæãæu«ž[(ê÷ ØíÝ£m¤Œã­4û!Õµ TK¹F¥l÷‹)e·»±>ã7qýàk´Ñ¼3c%¶‘¨A0Ka™c%”å1Ç`¸Èí¤‚¿L,s·¾efÖd í•fb:ý=MoC9Ž·† ËÌŒäƒÛ9#š¶æI!Wþ#ü*)®ííí7hÙ9P$ð3n=é^â±_ìÉ>Õ:ù·OÆKgØv¬ó©]ÛM¤M(•ÈçžzTó U¶E†IÕθ#¦Oò¦ªâòO&=»8±ÝPyõ4Ð ±éÖSê—XmâeI;HÄ’ä}N1ô®KÂNú¤×úƒLÈÒÜaµO_©¬¯ø¡µ¨þǘ,b8DnÇŸ§jÔð ¤W{±¸J2:œmú¾[+“{³°[lGó2œs“sù†gŠÎÒ{‡ ´!9Ø?Ƨ{¨<¦}ùã¦õZ‹sJ®‚(@ÀÚY”çðÀ¨(n“,šŽ…,²csÀ\|Ø1Žý;RxEÌþÓ³–H@ÏçÇè*]Ê8bx`Êàäç<1ÅQðC G”e*Ì7p~cIì4޲%ŒÈ®ì˃Ÿ”kF& e?)㑃T­p”£H[¯«T+:a±ýÚ‚Š²#2ŒNcUêsN¶·ti ŽN0ÝÍFmË+3˜09éVb€Ç'˜d‘þ\rr(&Á姘”ÜTÕåqžÔÅ*À‘šl's’ž†‘D… ð3ŠiA€~j˜(‚G=h@[¸$E´–Ç~Ô¤ ÜžGj—`$‚=è g&˜ˆB¸ç8§8àŒãã­Hé„Ïn¤R€¹ uÅVq áËíLv©Éå«Mpb‡EÙœdŽ9  ¦ž&l’sô¢¯ hÏ>X¢•Ø\ë3E6–»¯©Çqi “Æ­%2¹æ¼7Ú½Ü]Ù<³Ý¿”«unXü؇¦ºÄºÔl¼4n ›«–pQ”›Ÿ”œgäTÈ€U#þ<`ÿ®CúÖ¨ÿZ~‰üÍ`Ù´™§ê:ÄÎ%šñ2¢ÎH«ÎxJÃñT©6½fcønGŠyOÙïµ$ŒD&†b<²O̤Ž;ƒšÿȳ¨ÿ×sÿ Ô¹Y÷‰Š­¾Ñ¯ÏxÓÃ(··ÂÂÒÄqÔœ+{×g¥4v>‡# ¾çPWpùrsŒ äu¯ù MÿÿÐVºMSþAú×ýr“ÿEQ'¢Žk×76¯m`etÓ¦Þ͆ŒÆ:dHJvÆÚéæðåµÞ™kḛ٤‚B°¹"nøcœIÏZñSþ?-뜿ú׫\È•§×$ÿÑt7¨ÒìjhZ Ñ-gƒíÓ\y’G™÷S±zv¯?׿¸ºñuõºm;"¥²Èû'\–ÄŠ9þø×¨i¿ò ·ÿq­y“ǦµÿaÏýª)Çq欢Ûׯ‘¢Gn@C÷@ÛÀ¯>øwÍî¡ ãXÒØ¨0O–RÇ‚rÇû*k²ñ‡üŠ÷_î=s¿?ä7¨תèT£³Ë^0¶šóP³û)$[E!ÞeM €:­–ü;š¿ám{;(®EåЂ@ïöI‚ÄœðªqÔñŠóÈÑû’èf½+Á¿òO,?ëØ:Mû¨bËS¼²×/—O$Gº•Q”‚~GÎsܯֺ «[‹ß[ÙÝ[Ã{+ÈÑÈÒ.X“Ôá@öÆ+̯¿ÖÚ¿7þ†ÕoÆ¿ñïáÇÿCª›ØW:ïèZͧˆ'¹ÖtÈwIo±îÒ@|ÑÃ*€yçñÞ»¸nIà`(qKkÿÿÀ­8to­L¥v4ÉO ϧZÈ¢ªàɺ/l}ZgÀ–äúž*wû¯õFïØ&R×¼AaáøKë…›î¦Fç禡ÑpþlÒ£«7‚y§ÇÓð¤›îŸ­;‰»yj£©9Ö¶t2ÒZôã1ž?ú¹=Sî÷Åw_p×4þTœŠZZýÅÔÖÑC+Gæ#“´g<¯øÕ5¾º¹w²3d‰K»uÜr«þ#ÿŸýp“ÿe¬¸ãöûýÄÿÑMT¬Ð›5íu+‹»$H6–l“ž¸ëøzTóêà ŒyEŠç‡5ƒ£ÿÇêÿ×1ÿ¡µliŸñ÷søÒ² Œ‹P›k³`‡o¹'°æ¬Ks"‘¨† aI ìy¬k?ù ÿÛsZšïúÙÿà4l*ÜHm•ädFV?.Ðr ÕDžâVgÂË¿»@Çùö©£ÿÔ_õʪÃÓñ“ùÐ- ÉapŒ¡“ÌqgQž*iåŠæØ#MIÛ<œ÷ïXZwü†¥ÿpÖl?òþ»?ò .t­i²6-v¨ì˜'õª—Ð]A ¼±N¬ŽÀnçàÖœÿñýoô©ÿǼõöŸú¦„ÊÀÍŒ§xÞH÷Ž`ñ޼õ©ç·Ž‡9'.n㘠K©ÿ®ƒýÈ¿H~ìïÉÿ¢MˆQô‰çÑ-COl Èn.ªr ý=jž§öµð¼z™œ\O?úö8gÝü(¼øu¨þCZ÷ýxŸýÖ¿‰?äŸ?ý³§}@ó¦ÝÈ-Ó©k¸øxKÁvèŒx2ÇéõÄ\ÿÇŸý²5Ü|9ëþú*ѽ KS¸ÇÉŽ¯?üU7÷Á˜ütÆãýh~¿@~ä•Í,M¦–[«ŒÆ[’n õî}ÍPðRƒ£Èá²âUè0ç ­ýlÿõÕÿª¾ ÿmÇý}Íÿ¡/ u:E„oVf8'&´Ò$HÈ^ïïXÓ®O¨­Ø¿Ô¯áQq”e†_,ˆØî S ¸®õÊc5#õz’¿Ÿò¢à2%ØÍ´’:àR‰vñ‚OCMý|¿JQ÷EMÆYA¹z`Ó†0Ï\QÞÿ€Ò­;ˆc Ç©B`ŒúTm×ð§ŽÔ&˜g§½"€ïI'Ý?JEÿWNâ½ ÏéHÈ&íïH>èúÒ¿ú¦úÑp¸ÄÀAš)«÷E\.ÿÙleptonica-1.70/prog/test1.png0000444000175000017500000003475010365072334014234 0ustar dandan‰PNG  IHDR&ª/²ÕgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœÍy`U¶ÿow'vˆKGÑè¨øDÄ}fÜjpaG¢“buÄTtYR`„q 3ÊF°ãÂ#tÑ‘e«Æè€ GBØB"$$„ôZu~çÜê$]ÕßüþøõCR]ýéï9çÞsϽu«ƒÿ¯ûÿ‚2Û¯ÿ{Š [ؽL{-ø™ÅM?“»!ÞÓ»~ñoQÔøÙ¬O [ªšï v¾÷ç‹"±ß@d=#=¡øŽ·Aëÿ%Ô?ñ»öo­OüSÆ®3RÞðìÐý7I…š­döBQ¢ð64,o¤ØtÕþ™à»Èh‘Šÿk{Ry©w|¸¿õöiÿxgD¢W›t”ÐÌÕ{_ÛY"pÆõ”£¨ÐõÅÛþæðHE-º`Vìñ'FÜÔößÙÿrý„·ýÇv ´kÿœŸ§hj\KŒÙØÔsž>{·½³Ú>ÏÛPat‹ …Ú?Q€Ü{aœ¢Ú… ¬^_øÞ­sŒ  º´Éʺü¢.1|Ðe+ç÷Ž€noö¼º~ vŽ‘º(!X°úÖŒøGžœbüPàL|0ÿ×]~Q_€áß¼‰ÏØ¢|Ù¯åŒ_Ýõjÿ?û&S’4ÊêðάÞ?ádÅ‹×wTŸ4~Èg<îú%zúÀò1q-÷H þ÷æ±±Q¿;!Ï>ùe òĺ~iÙ©:2ãƆÿ×S«Kw¸>Ú]“kü ¸ÎHé dæ4b~aøÊnËÊ{ùZz Æ=¡ßZº3§õÃ¥ÕSãÇoÍÙc·öÁðê¦(§ì`qïŠ;ïHþ{<;úÓöÓé ü\ Ìoñ{â~ o0·RýâÕ'’êØºî³"2ðÎ~F½Þ­SãÁ~ûÖª¢ûJ§­ºM<íýn-®?7/Á—½P‚³ò†hÞ…ÂJÀýŸÁÏ_ñ‡ý{¼Ay“|6Š"—/ëêGp6êÐ3us¢Z«ì²¡Ô¢Íë“)®îßN:ÏR·÷°y‰uu?ÞôW"¦£¨Qõ£8å#¥Ëžš>:›–5a-ÒpM%J?Â]Þ­é!ë_Þ‹LŠk±öP¸_”H¢²³SàñÒ8ŲNKC—EÁ„ŸºWU÷oÁ6ßò´8¥û¥}¯^ËY)P»å>3§=ǸEÞ®H7œ‰’qÔE£Œ”í.¹ ,Ý+ñÐÆÆ+$Ã8ÍýÒÝæÆ/îE˶ŠÙË= oa¢Þ¢^( ZZZŒ™j (:-ÁŸAÉŸ³>3³-j·_ÎhQE^ÓùõÊ^(JwfдTAÒ+1lJ¤qW/”·»µD†– oáì’ü¢ˆ ݱǢ˜i×¥ÃeÌ©b’–9§?þG²–í` p‹¶|XiƒžËÅž7â_¼eÍÓÉ1ò‚Á»^úñÙ¡†J€U FŠ/š×‹–ãÐõ›{´lknE/]Põ×$-sÄÿÉIÒâÓ…k9ðM K“§r$Qäíw¯­®KK´GËgÍpΪª“(§›§è­t×”¤%¦i9ô |• 3Ç'S`NÇl%I¤U£¬j´5Úa®ã~±Gdüµ9zm’EôDš´D4‹§]Œnþì?“µñö•ô•·§.Šö•š–¯Â_a×:™ ¿öüâK¤– ¦å@ãy—b–ŸöT²EðÉEË ‰Z:ã ß'/X b欥vïTƒ_¼F-jo}Z¯ÅWbŒQ’_âà?nÐÒNÓS"¢‘âå”×;mª=úª=ø]t¥Æbë¹%†é(Í‘¢fEfÞ>6dªŠ~;óo²Ñ"(©§„tu@C”÷€X¤-üq}4 ogV@¥Æ6¿t€O‘É¢°Ú6³"Aàµ;ç$S¢×öFéòb×¢F™gEŠ*´¾¶™(¿(E±³hQà·]Em³¬ÃIeaë_þî’´¨ug³HáY¯Š(óBá­!¼~W«=I 8ÏÞ^¶bâµ-¨PB¶`ÛÉ1·%[7œÍ/n°¨C€„V×Ü¥E] åÏKŸ{âü¸²¨¬§DcÌŸ(8õ‰-Aê¿>®ånæ©¡kåxXÔSNÆX‡ðwÝúšø‘ž±Q½Ý¥Þ‘ßv´U[Ï1–ãÁÌoIó¡©GKTì¢Àí²zWþ‰æÖÚƒE1´ˆ%.õÄXM·­á.žä‚ËòÇ?Ñú •t$ÆÚ¤!‰GüÖš.-œäM’FŒíÓ[}ü­VQOQТv`²näZr¼ùcÍöÑ­U.NÑC@E‹ìuú1iècq o»õœr¿ žxlü+­õ^n‘A  ¦2{â!ß±8%ÚCy*WýcþoÿêýÕf€ 7#’ÅNß§qŠÒcÑS’ð¢éÅÕç­¾ø ”Ö–oõ'j ÅÿàÅL@ëyùÅQJmÜÖ¤ÉNŒ…¾gƒ¬uVã]Zz›Ù““µ -:ï&‰É'ks¶ÞjoãÉè—ê—Ÿg!fI>ùŒZêb,xËÃ’åDˆåžÒËŒï¨ñ@Œ)Î2É* R²˜è™(ÿL¦´•üö¼AìÝ+3¾9å«^´ì}9eø —ÊýÄäó¡×Yùׯ3c¬sm߯-ô{Ãðžz&Ê˽h™ôû‰~;¼f÷ô•õïi|½d8‘"ý½ç}bOç³JÃ{ýìeådc²–Ži¦E.€÷_ñ§Ûuï©©g ¤‰ÉZ Ïq™lР2`’î=…·!ÊÑ/N¦tn¿oø»jºsCf½˜$&y]JÍ1AïÎuÏ3ÛbsAe‚g°þM§½·•¶ØmÉZÚüûýÌÚ'D¾ –uºwhä0~Bç'k {Ö×¥T…3íêÖ ±ñEÝg”¨­Š¿4™,Ø)I¶P†]íØs0}¢Ùá’WC=%Sàþ¥fylp¸?³úÙº÷½N^™õ$-³Ç˜úÊ ÆìªÃ 1Ëߘ é/œt†g$0lr2%|çíLµC¦6N~ Ó8 @0dhÑ žûV2¥-ûO&X ˜ìò›>Â,~»®ÅJÞ5|$dNJ¢¨ådÝ58Ú9,pðÕ£fÆ{HH<£Ýø‘:“ñeïßí±aE;Õíî‹Òl]ŸƒÕmuúH©^ØÖ9d©E&P›2F¦°áèìîÓ(u+»ìúO<$&S”Gq9Q@Þ2‰eÌ ².Í ¯|:ÿzR.HZìÇ>ý6Æv5lGJãÈåŒèþ®8)3€¦Çþfº;)qÅXûl –è b£°±Ì²Ë²X¼Ñðr§Á«%š¸W+ém„=EÎó‘{sQ¦u¹•a-¢•4A:¿Ê u]þVR”(F"Pó÷XQ‘9#ëõÛÑ»àÈàl@Šÿn:ƒ±Žø¥¸Œ-½PEvÌÐù‘µ1µ1u8+°Å,ü )æ]2‰(bÌädØžØU¹½PTÏ@Ñâ~rèØ ¶@z‘¥Œ‚ºÁ‚FÑ5ºÆåf–iNºdF‘fvìÆâ)üTçâ_ÞÚRØ;˜¬]~éy) K¤Ìe_ê…a"\b':¢öó]‹4Õõa¬N Ñ€Ð`ˆÆ[kBÖŒ’¯¿¡Ė‰HŒ"¥cC£å[Ë«¬/;× ža4Êõ‰Ò™ÓÛ %Ä|˜ Å0åÇ£Y¶å¶›R粂F!vîð(‘ª¾Ž[šs{¡ø5PQ¥ñ8%Åž9È‘ÎúMí_Ò!©`Øv,ÃyD¨«ÕšF°ëãèÇŠoŒYÊJ §«/¼[¿. Â)ÓH <#ȾE™!i.KÅþ’r®u¶—“Âñ]Ô+ž‰B‹Ôâí¨_°6À†uáÆq©¿”UË‘fãùA{¥„FN ¿,µË-?š~dlÑQg߬óÜÀz)9ùH"Í1ö¦ ~yRõXwYv1sŸ+‡eô¡L/&—cj¤wе(í.qñCá=ã—Û$¶$³oÚ¹WeY#HÙÑËgz¥€ÄVßß!§8v¯=Ó–Á˜ƒ-ºä)Ù¹B4dûi†F©§¥¤­°pb„ wŒÀ¬)ËžX`Y)øYb"båu,ø¨ú¯â=l®4—®*-¾"Ó’ ~ÕF‹ýgQBe°Sü®&TûìÄŒÌV EúŒr1wc `E?‹‚I5$ ßÔì>iÂ@Ÿ`&?»çx¤î½?AQŠd4|ÞØ&ç2f]nÙ)—±aitY…rL–âÏ¡Pö÷Ïmÿoßæ=ÌÎl™8¤ùÙ«•%"†²ZV'&ÏAz¡Š¹ù`ßÎ½ËØˆÌAYHQûõéC×ñŒÜ÷¨¥·ÉS%v.T~â9±’îð"3LIoFa»5ÀDëm&g¤À16=ÔðÐ2ÖŠ¡ÆÑÕï`™4C©ÑoÃQeþÊáÛÔ×o>±>Ëü#öiüÞÃéæìËAëy«Ù‹èíÅ?ƒfØQïÛ/Y-'hTMç\û hKRsÙL›S“ö¡$SªêÆÇîùî!É&Y=8Ыr­CÔ(1žÄêØ=?C ôƒ§%[†×.ê›ËúVˆ æÖCô$²Ù¹gu0§àp.†Ÿ½™p ’˜Qu‰ô[‘–Y^i ±hSZÒ„0YK̦^°_z}!ý)±eµÎÒl![iÈ®3›ÄŸ¤À»àAúŒÍå5ºd$û˜Ê±G·dùŒ0,å,®‰[¹.ù±#rû—±sÜ"T‰<¾ edŒ¡•Ø+?©ÞÑESFËÞþ¯ ¸bÑ-¡4KˆÝFÍ¥ÎòåÙ)T£ãø>z9ú<Ǧt‡ÙM»d…Ç,850Ó’ÂæÊ?¥ÅVÕÆ0Ðvú óÔll|¾–Ï_r=ff§U]?ûýOùà=x3ƒFq°Á¯*F «<™‚‡ÝÀB$Cx¦TÞCÙo±áŒý°„]}'R”ó]W¦ˆŒýÕoû¶³¬Ÿ ø ::„Ö(,¥Ó´ó±)ËóSØdq‡H2Š.(ü)-à©£ÔÍGÐ{S®^Ч&Gæ² ClQ¦Oµò=L·òd hó¨˜ÃtŒ(Èa¦>uTÕúM÷ø±ÂÅ$*ÒBh(Õ8YJÒ‚S$)®…¥¦¿,cþƱk­uÏSRL||fòOhÉ‚ã"ß±¢¾°Ô“f÷¤ð¸Åì M½¬<õPèÃÌŒê¸E¦‘ Šw¥ŒÝ@gÖ©äàFÄ0âÓ’£dÁÎÌËÐLéÚËÈŽ)h©à\~ªÕO½CÊϪ%&1•D>Pç™Øà+ñ3!ÓM±4ÆàÎÝU€€PÊ…gÖ‚”ˆÄÞ®EÅöz^Ò¥)ÄÒLLûzéQrŠçÑd›´tHƒRl¨E™/Üoƒ·ë®´ú±ž1¿ÂÏm7oð–ä1·+ÒHi’F¼;A%-XŠH–6uš‡Ùꛊ.Ÿì¹šÄHý—žEKУ.&Ôã¯!š47ÚC…R›‡YÕ‚ø—gSêNI-8A ,Vaqe¥³>mË&‡Àp ¨ø¹Ê,–IÑ®»À8 §G@•óNU m•íA¨‹‰±Ç7ÙOÄÌ,ßACK¼ÝEîh•ÝÜ›Ÿ6qF XÇ×á‡À5á–b{ìSFýSìÞî×1RkëΓ)2F…(U!öcZY7#\¿6«~³øùÜ:¾ªÔžò_Zã¡ôLÞ‰âÅäB~©A´_âZ ŠêŒÙCF@]†µNZ´“C[åà×eqSÁ"ùåäQ|sÇ¡öÕ2š–Hê[¯Ì¢ë,¦-tååt%„$)CøÙ|Qo»ØmÑíöXH‘>~AÜïu×¶þÚSd,€xÉ)£ØÔ‡2²Ð½–Ãÿ$-$e;ð6K”½¦(”Q¤w™4-è7bà㬫Z9EÁâŒÿߦ‘~}ÓÂׂn`·©¼OŸâ|»íÞší8Üb i‰U!ÏÐ&‹S¼óËÉLˆ/‡Scž¯ïîÅ(ò~ä5JÇþâÖL4 óvîÅ8z•ç2¨éÞ½a/Zîò‹ŠC¶Ý¦þLë[»Ìq‹‚›~ñú9´„ˆ®9¥Š.ÕE÷óu©yäuùcäY)ðÎòyö®K[ŒþùwXWå3ž“ªèal¿Ÿ¤PÛUß«‘â1B¿x†cÀˆâÁÄC“º:“×âZ.b®Ä@[D>DTaY/Ã_x/úrtIÜ"ÒÒÿ¢¡.NiO]¬ia]1ço® ;…â"P=ù›®móŠ R·wÕa 4 \þ'P3a.­¾‚?yhœ´P^Ä8£úN)]~ï$†²Fgôš¼¥c¢-€_UÇâ~‰F•çj¶ ü¢·¶ &¶ctwqy6žØªÐJ¬ògX»ªæ ïkuyÀy®ÄmÑ:‹—ÿÃ÷΋¹ËñÄ ÍÞæ­9™—wQZ²gê)|u¼G%Æ)ä²)”èÔ÷ªƒÉz—|ü£Å}º(‡Jû{åJ4à-–h7Q"]u1Qvßç®Æµd)Wf-^ÜEiŸ<’&lÌí²h£“7f•㉘¤Æ-Ç-:¥ŒQ¤ÉJ¡jÔïwtÏ&:h@«cƒ”8Eé,CŠÄc‰SÄP¿"¤ür¨»†Çˆ·º#ëÇí¦4aN{žOÊÂ\Ëš ŒaIÏ,2%´G¡925ƒ‰ª's-¹Æúõ… sØoïäO}¹Û¢ÀÚeJ™ø.·H}IaÉQ”!œ·b’¹/iÑF5Uüg‚ð]ç¿®¦;Ò[&`7²8!dçX*cïaˆà²yk³®$JTË/|©»›¢Ì™êŸ|º»7þPÂD‰EEÑNC@Ll¥›ÆL‘[ª'C”ˆïÒ(ÐÔ~SÅ!_Ü¢¾ù ¾f—@U m sA¦4fmµq{˜(eu(6å~×­E­6Á—”»##Tõvlÿç;KÓþ—Z]°Œ¼›D™d–F»"­ÌX /ï¥ëç…£¼õæg2{ÑВɬ÷‹—kYc 4æs--F§]65Õóa¯‚Æü“`éÎûÕ¤’”~ÔªeNùQÔS¢ÃÁ®ST{ìÜìºTìs#X]Ißx§Ä6½<;-,jÑ´DívEIåáÓ´”(ö²Y?€z._PgI–NÇ”¼ØQ²èÐ >©˜)j!xk»´¨>—?ƒ›.GcBL|b55fmaMµc-mdQ9¶êbV½àM#®¥ìà›,¦i‚~æÄ|þ\²¯”œî÷l­dQh”¥.=E«<5-¾-7JVÚ“ r°-ôê]"&ôe+v ­,>Ú£·äÅI”@Y—×i]€GöbúVîû~ÂÐÉàûFÊwX‡º—ã‡p¯šß)˜ØÐœrE1ð¶ëm5RÚߨE:z$, ejEèßÜãÏʪ²A4™ÒWà±Kø€ƒ òÒÔ$ʨJ¤£ —©KâëÔùXâC-‚ž®¦0銋µ©H¬VÓ¢> ÆöÒÏ/Æx¤Å°¤-tà–°\B‘ï#,-ÅdÓö©Ás´,åä5P"•YöYÔLëªÚêœ]É´«ò)+Ó°ÔË öã%-ÍA/w±ô{ÑØ^^*¶j­®Ù÷EÜ"²-T„p°°Ž¦b|çܬù@ûË =ö µtÏ®E…-/¡ÕGiÎP#°4ÚFUQ 뚉Õ3 lW:ZXe €øiûp®E…—øU;þÅïÙªKüŸ‚bJúwíet:á±·'Q tÝÚë{)£ŒgP™ÖA•…` +4Q³Å÷a©Ub4Å Ø}I¥ß®Eö.3Íà;&aé‚ÐÀr&Jbgý–¨*dÐm¶F |)i¹N>lYŠå3·Hñô«ž£©ô†¸swRl7ufÒJVeî{ñž¶Ë<:}Ú7ïËèÈ‚ G«10RiƒPÌÔ0yåå½Pb÷î$J–³u|;š»×¹ÇC_Æ—*"bhoA¼#d:2oÀ¹½PTÛ÷|*Òš5Ju±Ùûh+p-–a5~ÔVgú¶ó>½PàïD®eõé9šE»sØÝùÃ)D蓯1t2ö4Ì Ó¡à;–Þ(JNa+iY‚ZT—¦åëõ[ÅT‰;Wˆ=À.Jˆ&KC´w ”üµÜ…Mã{oioŽrÄͦ¦…H½Žæè +8Ï`¦2ï(j1¯¥<˜_È»d‘·á §­¾`×jÜ&ú°Åg Tﻃ9ÏuqïÖ ÍÓäšœ{Ìï«-C̲ÆëºªW ÌéG?‰²qjÑ×ê¡Ù͹_–Å®ñ·܇å0øÞy‚_µL¢4ñ+ƒì2T0‘–ª»Ê÷Iñ–{çáæŽSt8äaޙƵIQšH‡<V5ìÕüòÈY4­Á8EL§9\Ê´(ÞwfrJÒUªH9É\ Bøé§}¹Mjí?´–fðùü»%Ô"¾Ãû‘êH2©d)·ÈÊï*ä1(ÿZK ;&¯ku-RaõœÅt¶=ɤM¦8ES05ÿjÑçk¾dÏ-šK~M´.54ɤ&ºdJã§ïÆéh^#­º©}òh®ïÓ,ŠY@\ONòåpº"·§¸¾¸¸7笤ÅÜ+´¹>Áw„ТÃùVò‹ub’IKGkåÆ)»e˜â¦Ö~“ª|q-/e!ekáyvŒ‘ÇdÒŽˆ¢í –¹_ ÄYLÎý|¨Sä Ütx±)Ãÿ˜6šv" •Œ”Ö©b7…´ eM¥’s¿|Ø-{«| xéˆ%·c¤h3u¢Ý@‰eØÁcžÖM©Â‘êáOi@[t-ii@¿ƵÜ!™LÔ¤’¤K(R%Ô¥–%Zô\i697;ëe¨B1 ìäÌ!"ŠPÒ>£C2:Á¢hù¤büH«ùJ'TΑ13,ÅI•k7—6œ_+O6)#Ô Z—`‘·©z:ן]ÔOüœ·—W@¬$-× `ƒPŸ^TbŒ’Ú<¾®šÆ@ŸOÖ¼«¸7!eYzÊP¨ü e©™ .F-ê3!Ó ÝÉZ7)ɤƒõGÝÔrs£š– ¬<)ò£Ø¸ ‚;s…ÛTW%Yô¾ÿRj/ JnxŠc”“´”û‚Q‰Š›³±NIË6™á<±ù›€PÓ(÷T æjö¿IQz5•¯'Ž—B/‚-ÕÅèÁ?ÊL…7ÄC[Á§TqïN{iK˘u““LûM.Q& E¥»ƯÏÂö\œý·t¸S]rçÊKÍëí±Ì ™i¼:SŒV5ÓÚÙœüĆ…@@Š£àDƒI§h!ÔÑ…u¸OË*&ºüék/˪OÜYu˜S¾q)G -·¢–Ôv>¯1U(“žà#ö`œR‰vÆ,³Œ /z©ÈµDƒUØZ²s¯ùe~N \ÁØ”X7ÅO“ OY’I7‘:W¸SÛÞÈ,óÂvY¿F(ST™´Ä\§àq/„ÎÓïþÅ×´²ç®¥ÞÍaÒro7%Âo§ðl4¤‡ðn—VKÑ¢dõöä•Ì|§¬æâ{­2Ä^ð°ûü7ÝØE©N‹@£>J± ÚE}̘ÞÈ£X1Ó“‚Jõˆ‚£gÁ‡5…Ï8e§‹v;¨–\ýV¤˜Ùí GxQKí3ÂרUbŒj€Ø;"Ý‘fýÛE©ò¥R…u<¯£¨©“°x¨Ñ»“îÿ3g²”[dmeWöÂQÏ’¥¿îÀ).oŒö«Ô¥oЛtnǨBRAË"4±9'½T»‡I•rŽUòÄ)Á±a»Š¥N1ô¥Ø{ïr¿ì¤I¿Jâ(ÑîlQ导äÏ÷¼·#N„ýð]=–¦óË´ /Ç~ª3´94Ë…o4 G¿H½üÝÜßwQ`‘èptó§¯6ìpYÙ—WqäÏ#‡éR‹CÐîl‰aú9þyúˆ‚Í]‰àBö©Ó &K±V¡5;£<ðêa"ð]§ ¶—i_˜ÅrºV”DdÌÇѤò,½I1Go\ 4Þ”ÉØE2¼¿7ÈZI‚W¥7´Ì@7òÉè376¼ëöL*êKW2vh/ͲL2NzB+Ù^OD'`B”øõ‚Z˜_ˆíÌX…úQçò¡ uƒ)‰ Qbv¤ÀWÀÁb+J@ -êZáˆí8†9QÊûÇ¿pMJ~ ~ÚK“‰"½ÞÁ‹.­RIŒi=ZéÝŽ “ª©='tÈ„³r x^¤Ã.®eŸöÃBèzÉ.º£y¼BÞ Ð.Ðø_Úˆí:§Ä0-hÚ~Mo«”Z<Úò ߌ“¯Zˆ5NŒ—áß-H÷Ÿ³­T“ó&½IŠ[Ðb“°ÁØ/0Óo;EËWà¡™ÓxèÀ¶3_!RT³w+Ö #¾5¤_§ ªù…²h¸•`òÉJ>*¡jMÜËrÅÑ=è¾¢»´?õNô`s‚`­—?Úln¨)ÿ|‘·çÅäwt¾g6¢vG ¦E¢Êž‘‘òާ¨ž~Ø+b&g–Þ¤}·NqØc‡ÍŽ—(Õ‰9?þ»÷=Ó›8°IýœúŽÝQýGŸ—Âíƒ P$ø5K!‘"’äCË1öà3n}”T÷Åoo#¿d°aXaÉ]”®J0Öõ¤­O:ý>¥›™r>Õ™¤LX4g~?Ľ¯¸|ñ{mùfÄ8¥m!Ýï!Ò‘q¬GCiý}”6Vo”éT¶øC”´“6#EM „?>Ù_š\8Õq'Zî`¨¡Û›¦ì£›¤M)8l¨ÓñK 7TÄX¬RñÅïÁ”7 ;¯M2+Ö›ôXÙðu2óù´ùf:¶CFŠj9¿–G^”ú vVÚ_¥µ‹7ÖÀiÆúQ½x R¾ (`ò©"hÉç=vËšºËÖë7gG jÁ{˜±é”{Êñ¿W’(o §b…ôÀ¼(¼qîP RsŠu¹ªZzî,`lú]Á )«¼Ó@i ×(Ê^éžfš´v‚Τ¨£t›YʈBƒByÔHÙêÂ&TÛEP½›½“ÌÐrG¢Iꢢ¼—ÿ(šÍGØ?%QÞyŽ K0Ýø¢G^½ià}˜7S QÚq4¼pKß*Æ)‡?3R¼8 Fƒâ îÎ4}`+*t&[õœü »ˆoù¢lß–LéÄ–±j¶)d±}˜º*|ªôÐÍ2”Êò‚ÝÚNtcÿ<íÙØè²×'QÀR­ÝU-¬}öãÓž”TG*–U×f'DÊ#Ì©]Û@Jû;¥ºû‡9Åã úxæ}·cNÚ¿`l‘Tƒ5HY¶˜pæ¾½+N!Œ”6=å$îÚÚÜ´pÕ?†mp0º5E5eëzdóëýµåNÂw—Ã1QG©‡ÚŸK¥+Nð‹K楎ûP[Uö\?!q‹mÇë7j;';óA»‚ ©DJìV°Zà Í#n[Î2Æö`¬C'ÞÄÚÜlçZ‚h‘º0x­ÚC‘¡6r¹‹×XêQgóàþGb,#Þ¸âJx« =¢S€º`" w)´‘‰´ÀÑmÎü€ µÉàÙ²)ѽk5J«uÞ5ñ^f¾Šã n·ië×o½õÏ™(Æ” ¡”OÎTBÿú¢Hyñé…P¦£|qÍieÍ È§«Ñ}Mûúæ14[ÅÌjÉzÎT?Ö´ø"H¹{È­ÊeçœÎ#©3H‹šjgÈûštïÝ¥ÄÅ@u¯+ÁG¥ÇðaV>Ã顸‚Á†A>¾³ÂÁkoyú_™tÕJÆ<™H¹@»šŒZ|êÜâÂ$JôõZÛ%:¢tÅÐ'™ÖbôwA3­Ñ£_¢ðH±Àg! ”@tP«Ì38(kZ»bsÙLš¯­Åw¿vhKLUQLŒ‹tOà­.¶»[f@‡zèã^åR8Ʀ$j‰onõR}YûƒVõ'h‰Æg'Ï »]pÐÛï`Þ'W²ͤ´Þ(QôàŒïuo–¨’‹}è:¶Þ@žºÍÆw£š±GêŸ]¢í@“©þ {Â×ǽXÜïMß^^ñͨûø' ödŠ@Zª*uO¤áZàSÄÖТàG7nûdwÆ9äÞ1¢ß E+7¨܈¿–ºtZ”5Ê¥TÚ·my+g²ûŠÔ+ø…«Þ(*ídQ qLáÕiÑr:XõÊ;ôÖÂ&ßìk‚:EÛ"µ) Í8zùôZxОÂÿn —N*ñeeò=Ãðnwã%¡2)· öMC"µÐuEz[Õ!L~fIQ=%Õ̤×· -¤=no]'ä[)^…Ï%vaO÷)Þ˜s§ÉL›Ãíà0háÃÑø(j©ÚOˆµ:ŠöŒº%xNÃ÷2lSÉL;1!&õB DÊ­b¸pŽ¢=£n=ÎxƒíÁùáI©KxÛ#¬Jx^RÞöClü =…æ*°CÀ1å‡MÔ)Dþå ÖúOü°ZÙŠ½àX"ÅÅçžðá+ht`†·uŽÃÌhû23jqåÆ}H¹µÕ«ø^ÔSHªŒcóö¨ ¶.Ôm¥Ûõ™~ˆíHY:ª6'ÎlˆÂÛÏ=¢2ã‘)¾=ÿͤ”‰èEFŠ€£R›ˆã´úc(]¬‰xu™_ ø¢3>kˆF]aê›Á5ƒîhã¿€”Ø/÷Àká½P”XtÆ'pÈ*Z–j¢bÔB~ØB ]Y©,—è-òÒm'ëTïßY]MsûÄÌ©ô [š›™tZø ÷Ñø±S±Ý°cÁ[:JUR_$÷„;›ßÊñ-+Ò6ZGÁÿöVÁ)Ôr‹ú•·#²Žâóº°£‹¹',t_â¹:%Íd…½˜ïtZ¨òn´óÚûp¾ßÖ ×$PìÐ@“[ÑåSs;Jʯ0fci6ØMïâDŠŸ²]!QÔgòo À_uþPC±! 5§ÔÎ_<Ð'í ê‹Ë~áÏxò~ÿÜUX4%Pr1ã}]mߨZ®¢gâg°[Ï@ùXŽS¨ÐM ´Y« Ü8GÚÒªF6ôÉ2±BØAûwtwŒ¾¢y)¡òjÚÛÞcÆÈÄÙ'úk»¾¦õéËÌNϹHÓLj—A¢¨ÏÉ®,f½=~ñÏ­al ²«:ßx3­ÜìT̼}õwÿ¥›‚U-u:¾Ç/Q~ÿDgŸeÁÎmó?YÛ'“ÒåƆè-ZE?¢D ¯rùnEн›¢*|ý±aýLj¶ùj«§˜‹2€3ë”,½–Ú?HéI…VÕãî½  ÆOÔGZ+iHìœè|¡ûuœÃ..ÏÛpלðÞÏl;Ø¡‡´|Ç ;~Û€?ôY’d›xn¤vãk[`g+Ûdñ(ÿ„ìéÎyåÙëÒ@VÌè:ÆÎA5EÙŒ½x®RRþöÓŽ_à„r¥~ú…­îRñFçæ9%낆Ãh QA(I#eJóõ/6m}?`¤@†:i‹3¯´úêp:/Pˆ2Ü©¬Ë4ýNwîÆ5ó7”×»MSµ' è(ñWûʰñVýQTûâ_YÄôÞÕ<½bÜæÚI–¢1,‰²Æ•:ÝÕϹ:í¿ˆ']Z8ÊÆ¤éG5µÔù\h‚{-+J1,5!åOjù$Ê/—<2 ¾“xÄRXx÷MÑÏ&ÔyÅÕ»«ç-Îbɧx]ùÁRgÞàÙÀiÉBÏbìÍì>)¬¯IÿŒŠ¿+ù0×]]PÜ ¥J¬žW~°9Ûìš…µ_`)ì¯æÏÙu&¸«|á‡åâŒ{³Ì=2ˆSÔÁ]ýuùçØüÇ@õØ)Ðøº²(+ÓÉts5è÷]©s³{¯TÌ’)eæºIî‰)ý7¯S%»ÖÍ&3¹%ýcM^Y1¡ÈÙY2jO2¶É¢šü¢Ô× €žIÅ)©S³˜¹ŸC×^àDI¹ã†Ò)‹ŠÍñgs$hÙoc®[‹]Oü@ô€:Šû%c¨”êù¾îäÎê¼¢šÉ%ާMf#%²Q.ŸWâtKìúÉNû-'-Y,Õ±$»H¿æØXû¯¦ŽyïM4vÏã\m£÷`龿YìVöÁâÅÐJ®ÍÉ|‰e¥¯u轞•÷ݽÖQœLQoôÖP«Ë`ã®õ,âI—±"sKë÷H‘®Þurõ•Ck¼›•–D‰¾5ãëà¡m9ÌsÑ{,£hïýhúÿƒer—;ô~QŸÛÒÏÞp“ÉHë:Üå“·îú˜ŠÒNI3¥g^$e?(ÍÔŸý«ÇÒWt6oz>½ ‰RYq¢Úýcx Çh•Ö¶.Y†sÆ”§¡½Àëy¥Î§7ŸHƒ”«ê;J§l©,—†ÜßÍ‘2’]ÈLÙîL½w¡>gQżæìI,I‹:}W ¦$géÌ,v)~Gˆ– /ÍÈ2g]²6+Óð­+æ¿õXÞ¯3’´„Nžž»¡zêˆ?®4ÓºeíóÊ`Ŭ¸ÏÃÅÆÇm…†«·~ï3Ãv)þˆmà¼&O~Ev¨sð•sú±Á#-5œ}þ“ÿ[»¯ä—c)­/•>fU¯fR'{“Ößï5£œ~ãŠ2Œg›wGKfÍλ0I RvÝUd t<@ë¨J‘:˜ý†å9Y¦a[NÌê.]²1ÛlÔȰ>;ÍØÁÀj]µ]0µ8ÝÆU?Ú-­~dhj•‘BÓÙ΃²/¨~ÒRj¤Ãí®åz Ä¡C†‡X†L%Sò7§\7ÚHã2Ínªžâ®˜RøQØ–)Ó±¼(û´øM9î#ûÜÕûõÛ<þ] +­))Þ9}¼þø¿GÙÁšÔêy¥ÕµëþÊWÏãÌ&›«ÿ#‹ÎôúDù?•)•O+ÖtIMEÖ¯IL¦IEND®B`‚leptonica-1.70/prog/hardlight1_1.jpg0000444000175000017500000000556411004507770015436 0ustar dandanÿØÿàJFIFÿþZ CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀuÇ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ùþŠ( Š( Š( Š(Å-¡¦èú†±qäXÚÉ3÷Ú8_©è+½Ò~1ÚúµàQ×É·äþ,xü­iÑO…T­ kÞg™àšzDò"3E¯z²ðW‡¬ñåiP¹Å6d?ø÷» ½²l‚¢_\èªnÒ—ÜURºæ§<ô>l6W@dÛÌû† *Tà‚½}CŽ1úUk­:ÆôbêÎÞqÿM"Vþb±j7ÐìXYÚíŸ3QŠ÷›ÿ‡ž¾FÅÙ\ô{w*Gàr?Jâ5…z•¨i4¹Òö03±¾Iô?+ÊŒÑç”T÷6“Ùܽ½Ì/ ÈpÈë‚? ƒŒ‚Š( Š( Š( ¢Š((¢Š(¢Š(¢—€Ï­w¾øy.§ßj¾d§”‰xy=ý…iøÁ²&¯ªC¸·Ío1ýöÈW¦¹ ¸ÕÓJ—¼¹•Ûþµ1›nœ¤’ëßɬl-4ËUµ±·H!_áAŒû“ÔŸz¸±÷4Ô›üjlt®œMof¹#£3Ëpгöµ5] £4”Wš}%º-‚ŠZ)óþ4´µtc4ž¨È×|?¥ø‚ßÊÔ ê>I—‡O¡þ+ÆüUàÛß Í¿™ì˜á'öaØ×»?¢žÞ«g‚xÒXœtq»Ö‚}Ï­‰š­%mº]OšO4˜®ÏÆþ:À»³Þú|§'&&þéöô5Æòk‚pp•™Ó ÆqRŽÃh¢Š’Š( ¢Š((¢Š(¢ŠQ]·Ãß sRk«´ÝejA ô‘û/ÓÖ¸û{y.n#‚%Ý$ŒG©=+è­G‡@Ñmôèyò×27÷Üõ?ŸéЍoráOŸ}‹äl@Š=Í8ƒši99¯^„\o͹ãcª)µË¤m¢>UÈ¥ó<­4£ ¿§ó&Ü=iÙâ£ÊíÔoö®'‡oáLöáQþ$—ËQKa±NÍDÍ»©2GC[}Oš+£8¿µ¹&Õ¯¸Ÿ4ÒvãÒ£”°cÍLp²R÷¶5©™Âp½=%æ!`q‘ȤÇ'bŠíŒU¢xµ*ºŽóý.Awiý¤¶—Q‰ •JºÿýzðOèrø[¸°|²)ÌNCý>¢¾®?â'‡Æ­ µìK›«\ïGüCðëÿë¬1t”¡ÍÕàk8ÏÙôgŠQF(¯$öŠ( ¢Š((¢Š(¢Ší¾iCPñRܺæ+$3ÿ{¢þ¼þ톼ïá§—£ê„s,ë>Ê3ÿ³W£bžÌôpð½-Š“íNØ08éO£³ÄM«- £—ÒM¹+߸ƒ9ÅEŽqV¦ã5¥[ũ͋ʡRÎ~¤µ)QM`+®¥7d*¶W:1rrýšJ•Tb¦NERÄBü»,¾³‡>í‘уéRðrM?3ÅÆ.ÑÔÒ†URjó|¤4R°Ãb‘FH®•4ãÌyò¥(Ôöo{ØR¤S¶,ŠUÀ(ÊU‡¨§JwjójbdãÊÏ¢ÃåðRç‹ùyúŸ8kºiÒuËÛé ¥Tú®x?–+2»ŸŠ–žG‹øââÝñSü…pµÄ9Ç–MQA"ÑE”QEQE{ŸÃ”X|dGü´y¾»ˆþ@W`9®?áã«ø*ĪÒõÞOõ®¶3Æ3]Õ¨§J3FX \•iR—waäàP 4ŸZæ¹¹%ìzŽºöÜ­ü‡ÒQA8ïY(·±Õ*‘Š»š@4 äfŠiÊ.Ä5 ±½®˜¢Š(¸ù-¢ ¸¡; Å´F˸ pi`dõ© Ž+¡b/'Cåñsö«âþµRö  G;Eb—<”bu9*4ÜçÐó‹ð®t™ÿˆ‰PýÒ?™¯-ï^§ñuÃC¤®yÝ)Çýó^YÚ”ââìÏ:ucUóÅÝ1(¢Š’E¢Š((¢Š(¢Šö/…7>w‡®­ṡє®èeMy7­Q-uË>B¼äÏ÷×$ÈšõÙ#>•߇Ä^Ôå±ÍˆÁ~íÖ¦ýå¨Ðr¤R§š¿z¤#Œ÷­+Ú7‚Ù“ƒ½D«·¬n½PÆj/›­9r ¤Á8¬Ô•ãk›Îœ±QSm¯/;ˆ¹ÈúS¨Šâœ¹Ïf?e \(¢Š–j˜´RQHwbÑE% \R•‚£”ò)û¹ÅDÇ-ÓÖ»°´ÚìxÙ¦".‹õ<ƒâ¥ßâ k`r ·ú±'ùb¸*Üñ^¤5OßÝ¡Ìm.Ô?ì¯ùV%sÖ—5FÌhC’œb6Š(¬E¢Š((¢Š(¢Š·§ßK§j÷°K‚Eúƒšú?O¾‡TÓmï lÅ:úöü |ÌzgÂÿy3 æLG)/l[³÷_ǯçUjSåv{3ÔT|ؤÜAÁ§89ÜÖ™Þ½zmU\Ï·ÜÏ¥†—"ºi¿FºWƒRÕz‘µa‰ ­Ï³.Ç»ªU>D”RRמãcèK«X(¢Š[”´Õ‹E&i ¡DTµÐN:Ò ÷¨Ý·p+zTyçÊpâ±~Ê“µ{!²Ù®sÆšÒ辸‘_ÃÏ9=Oà+ $*–$$“ÐõáÞ4ñ x‡[g‰ØàÌp/¨îßR¥wר¨Ó²ÜùÚ–"«œ½YËæ’Š+È=€¢Š(h¢ŠJ(¢€ (¢€ ‘]¢‘Y«/!ÁÖŠ(ß|¬ÜkþŠâì=$0³ãÀûÄzšÞuQEua¤ÔÐñ°Œ¨'$GKœsEë3æS³Ð\šˆ4QYÕ„y^†ô+Tö‹^¿©(9g4Q^;Z³ë¡&Ò#v=(ÞqEéBtã¡ó5ñ5UiûÏv&óŒf›ß4Q]4áôG,êJvæw±çßuû»ÓJ¶>ZN¤Ë ?3/÷}…y7j(¯+ÛªÏ_’¤¬%Q\§HQE´QEÿÙleptonica-1.70/prog/marge.jpg0000444000175000017500000010050607637003363014260 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ°@"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ò— ªü²ääU+ˆ¶9È#­=Ï¡’ p:R°ÛLdyëVߌæ©ÃÄëZ¸þâ™$l6®G;…UTò1휕YÛ#¨¿¢8M2SØË‚}2¦®ÁqûÄÝñ‘‘ž¸¬ý7éS¨8>r÷ö5±¦Ú…¸Wf 1µ½ëÒ¡og©–œÚšQ¤³]ÛÜ!-uÊã+”Õ£ ª]ÿ=[ÙÁ2¼‘¨ 2sËg£b¹MtmÖ¯AÿžŸÒ¸q-Þ?3¦™–™ ÍoËô°õ¾«˜?Â+‚¿C·Ô…Çî‰úUƒ†cô¨¤À·~{Tªïü?Ò²[ÏsGÃØûyJêLké\E®¥“7Ú% ³8¦ž5ÒÛï;/ÔW]){§ ˆèL±É@síQ½…»š$?…e'‹4§ép?°ž"Ó¤\Çÿ} Әșôk<Û§åUßÃZcòmÀúS®±dljÐçÑ…Lº…»–U#ëG7˜Oá1óˆÙ~UßÁ¶œ<ƒñÍtKu tuüê6UyKùœzEÆ’gx—G‹GHÞ K†8!ª„ÁMœ09®ƒÇÒœ’äÖ‹ÿÛcõ¤öÜÏn œÐýh^¢ ‘rx§òô§sAÆ  E⟰n¤Lm§çšbè1Ò˜3t¨»Ñph™"cëùTâ CƒRÅv‘«°f’KòÊ 4\CDnNsKå¾H'¥WkÐ3ócéQ}¹ww9ë@ÔyŠ:¡úÕúйw,nª™äUP 0!ºsMõK.Úk‹D¤”½©Ïáë6ò°}‰¬;ZÁl‘¼l ¨VŒ~0°rJç¦j\™¢å <+hÍ]O±ªÒxTõw(üëI§a5›>íÄ÷Ð¥Î;#Ÿo]§ÜŸp÷öEügåPÕÖ-Ý»t‘}éÂX›047Ðiyœ†ÍB ÀÇÜV5ๅ÷É®ãÜW¢ËµíÁ5Îx±?(ûç֒Qè†Óµîq77ÍÁ<àÔ1Š@èFE^ÖŽÛÅÿpU+q¹ˆ5©‹ÜëôMfÚ R’¶ÖÝžke5{9:L¿pö©¼OBÊ펇g,k˜ñÇjɤiÉÅÕ»Ÿ–U?£nàÖ{øbØœ£ºý*'ðôéþªíÅó+R/Göf@Ípì1È®ÊóDÔ&„Ä×Ö¹K«G¶¸hdáÅ\Lç}Êo÷¨©î­^ÞM¬3‘j ¢žúSjxÇË@Ùd#ÖºûŪ W-hâ}+©µ?»„Ðn63g §§Ý§ÞÏz@¸Œ{ Õ3&µåW R 89àÓÁVe t£=&4Y†C-¸,¸æ¯Ævj˜ÿE#Ñ«AWîý* GM;cH™¿é™?¥ykœ‰sšô˦ƅ)ÿ¦_ҼɇîÜýk•nÏBŸÂŒ6o˜Òn¦“Í6ºNJ—}Cš\Ò°®tDá7•!IÆ}꼊ËÁ5z[‰]J» -ϯ­W’æS÷Ž~¢CBœ|L¿ZÖ–ÎuŒ?”ÛXn«+vdSއµm6£v‘ÖgÚ£zJzÛ@ÐË’7‰SÇZ¬àƒÈ5~k™œ>æ'Þã­SyžF~´µ_E$i—dvt5vÖf‚MÀg8$t¨<7‡·º !éžõ²3Â¥FOÝô5éáÚöf2•¤^áØ’´m;ƒvsÏò®ĨF¹|ý·¯þ‚+dÝÛ\ÎåH·ž5•â’½v:ä'þ‚+“r¿S¦“»1|Õ½?gCŽª+,Æ+~›tì×›_dvÐz±ŽŸèÎqü=©à| îÒÈ?ÑßýÚ#ÿ¸:ý+ìͧ¹gI·†òøC4jéºÕз†t–ÿ—8¿*çô™ãµÔVIœ"t$ñÞºÅÕ¬¥ÔGè»)I(œUþ#8øGG#þ=TSOƒ´£È‹J×…›/ÿßBž/-I“ó­yŒ ðmƒ2* |j9Yfºqq?ëWó¦<ñq‡SøÒºÇÜxj;|u"äãüóXšüwºDzåÙxë]®¦<ï,¡†ÏZåü~ÈÐÚá#ÈÒÐOc'mVÎv¸,ÍÊå³UEÃ=¼p‘Â*]&Öì±U‡Þ¤û$oÖ…ê)dïMÍ{' šCÐæ•ºRTÐ/ݧ 5>í<iˆkž*¼ŽTU¶A¶ªÊ¿-L<Ùs‚iެ†<Ò©+œ(<ÕWa%¹ô¦(ù‡ÖƒH8 â€$¸¼ÅGV&"@²c㊈/ÌÎM6ƶ×Âú‹F¬#á†@Í#xWUQÿìqè(™Ÿz7КÑ} R­¤Ÿ•@úuâ}ëyüÐd+s2}ÙX~52jw‘–âAôjŒÙÜ/X\~†AÕò¥d#B=P¥Ãþ&§þػԊÛÍ.TœóXåv5gOé©Å¨wdšÐ¸¸¯AЍ²*òû¤"cÁ¨>”Årä~Té'÷H8®ž/¢ª‡‰Ž=+Áô£.)6Žö?Ù·ÞWQVãñ%„£‰ü+ÍñÍ(Èõ¥ÈŠçg§®«i/IV¸nHåÔŸiæëY!ÜtcùÒ‡mÀži¨ØNWGuœ3[!’%cޤUy49Oú §Ú¬éÎZÒ<õÛWTfÄŒ|' ŒÇ&>¢«Ÿ N€„‘ZºÀ½8§„¥Ì;Œ>¼çkCk$"4aÈëŠÚ\Ónf[x·²äfŽ`å1¯xóÒ›Áˆ}*ìòGqläGü9Î* ºô­!+£)«1ƒ¨ªÒöÕùH«8æ¢rEü@pçšlHž×þ=Ødçw5¨‰•_¥fÛàÆì3÷¹­(Ï èj 5¯<91=¢5æýao¡¯AÕo…æÿwÁB»€SÐ×3Ýô¾sl¼šn+­MÚIYH=*»èfÚ™>Õ²šg+§#šÅÒ¶‰g‘OM.Ï=3z«¢,ȤVûÅxª®+`Ð1/U=ö¬ÙÙNуž”\-¡L¼}kNAòûšË=GÖµ\å<⨖Tub ÅT~µ¢|¶SÃ¥P”çëR3sÃKº+Ð{*ž>µÐ!I›Ë;±¹‡Þô?Jçü3þ®ýsÉŒczØ2E¸5éa•àsÍ{æŒBÔ×ÈUs†äVŠƒÂCsž…PûäWOjc¸…eB¢Vù7ﯵbxÞÉìüFñ9äÁgê?úÕÍ‹èuRÜç`ÿ[ÍoÂ3nžëXp&é@þuÐ@?ÑÔJó+ü'uˆk/ú3?„ÒÇ‘g©Œ*0·ÐÓ¢ÿS ±XG©¬÷BE`š•ÊÚÈÅQȃÍhŸ‡ö}®fWÒȬG8Æ}«¹ ¾£ó®Ú? Ç]jŽ4ü?·+y0?Zzø!ùoeüsþ5×î_QK‘ëZèac> œ}ÛéПñ¦Ÿ^òê3qþÑ®Ë#ÔQ‘ëJ˰XóýSG½ÒàóßQ—nq’æ¹ëËI/T3ÝØ&å¹Çå]ÿŒ“vŠvŒá×õ®&8dûE«…!60'Ò•:DÈ'k}¸ü¤ç¥E*ysºœTzw¤ïÕ‹±‹É?Þ¥!Ä« ëMŠ|£ƒLŠÇŸ…¡æƒÐR¨àЫòÓ‚óÖ•GÊi9¦!Yp8¨¶‚jS»y>´ ”ØrhÆ)\cšhɪ$ ÍQ´Òs@¸Å²sLŒþõ2xÈ©"A°Ÿ”j”ëÐüÂÌ©lçÚ¶c Gjó¿[êZhï¼°‡j‚3[¢Ã]Œå/ѱê£ü+6™¢gPÈ„}Ðj6µºÄ‡ð®sgˆ£ÿ–°¿áA¹ñ`nŠ÷ÒÔ«›Ï¦Ù¿Þ·ŒÿÀEW“CÓŸ­ª~U‘ý­®/ béš?á ÔÐâM1þ Ÿð£Þ x‹E±µ°3E† q—ˆùrB6°85ÖêšÌ—ö† l¦\sŒ×-©Œ¢„ŠEäîQ¹2±JðÉÏðÖŸ†¬`¾ža:î ¹ÅRºd‚9U†1ƒŸZ¹ ^®—pò:‡W\`i½ˆCªo iÒm!Yw Õy|jÜ$… ³Š-ÎÒ`•0ñ5“}íËõŸ4}ÓOcîÍùŠ…ü0VÍtƒ]°c9GÔÕ”Õ,Üq2ŸÄSçb´N"_ ^F¹ÚMgÜh×Vɽтƒ×é2]A$L«"óïYÈJ”nµ5;‰ÅØBRÒ<ŽÕv5Å2ÙÐã>¢§Œ ;‡ã S±M¤ŠB@ªš¢“yÎ sW”b«jm¶Øsѽi"б4Ç*>`*°ÿT·ZŸi“N|pHjû˜ö­iìaW Í¹aP´eï àt5iWŸj–8²ÄûU²Qª ˜þõjBUC‘)žy5víãµfË,k¼xZL{Wj2ÉîkºñÃOøWgþº?­s=™èSøQµy¸ûTh…oO SV!#ΗžÔÄ®ß?Ý¥$fj@¬&rßv«Û®õWõ«zÒÿĽˆ¨l“ý?Ý«û&M{ÈF-„ŒHvb£¥gÏÙ‘‰ óšžBpESs×­ofs][b³ ÔÀ1íYMÞµ”î¶ÝHL‹`‘ßöª€3ŽÕfQɪަù»áAºKÑßÊþµ´Æ%•×Ê;±ÁÜ?±¼ƒ{t§¼?Ö´¡%œ±lšôðšÄÂKßeûY§†0<¨mÃùU/Éÿ8É!‹Z¯~œšß†Fµ³Wcæ–qÂÖ‹Wf£j½j¼~-XcuIÛ©ÑKâ1m2fP1œ×C*¡O½`ØÝ ÇзZï Ì2G¥fv­ çšêmäÆÒ«ÇjÌo—Žô&7_bûŠhSÔTíÆÓMXœòÊй_aÈ ZrÆhMÊ9SùTªxÆ9úQ ¬Æ”ãŸJ„ÆTæ¬å˜ð*)cxÈÈëéEÐr½Ê7÷)p*ËG½÷rÀ­>d5JOR®=i6Öˆ³ùwmân¸û¢ŽdZÃIõ*Ú.d~3òŸåTðs[±Ä‹mppâ±w¶úÔÓ¹Zn›³;¿`Ø1,»™c-™7dæ¸ÏØÚÜÙ3Ïäナ鿰m¤ÉŽypÆ¢[Ž7±£æ'­Ô÷–þ!NÛÉ”ÿ¼Ʋ籸µ¸*º„¬1ÜÒ°6tà§µ! }+ÜN›™­v·xaI ÄîÅ-AH”¢™­ÃÓ';FvÕ+ß»ÌjŠ`&FGbTŒQÎQç)bžÛê=<«ßB¬ î_G³x¼½ƒns€*¯ü#–‚A$)#§µ‰Ÿ#-^G *qdQÊÖªiRÄ„À™#< Ï–YH §Û¥2MOR·!VÜH uSQÍ},h?‡ì\óD|7gŽ7 ¢|Cz­ƒdÿçð§/‰eÝi'éNòÑ3øbß9Y\W9¨À-¥šßÍc·¦Gõ­ÿøJÛËù çuØn®&œn\ôsš¨ß©.Ý íå´Pø8ãŠÕʃþ5ƒ£¿ÙôýÎ5£ö¢Ê0:ÐÚBI²ú•#­Hg,¤ñS#1ÁЇ8”¢Ëˆ3Í2âÝ&o›$zTú|-q2¡nji­ÈcƒYºÑ[šF“{.¡4ætãšÍÛ[P‘nÈzV2Ž®¬=HÍhsWƒ‹WœE^·%fÆÄ’¹éÒ´¢“´‘œGÌ@CR"!u‚*¬¬X(ç­LªF•œûŠŠ<}¡óǺz‰ª’Ð8ô¨-WÝ©õ²Ëi [)Çj>Éâ3§µž"wÃ"c®TŠ©$2n ´î# z×m¬E©$3jÉ÷U”*‚Cc?—?•rW (_5œoŒ•é]ÎN[2)SÈÅoØiWWZls”¶Í¹ç¦.µ‰0}£$Šé´Ht¹t9Zêicº^cÚ Û§^µMÙ‘u§ÜÂÌ3òõ¬é# ŽœŒÖåà¶ÌW;žµ2¨Î$túRM°±±á ®©*ž ã×¥kéñ‡–Lö¬¿)mm€n<–­ý*3öÙ¦A¯Oð³ |lÙµa³±»¡ ŠÊñéG›H™"òÃÙ€~\g Ïá[¶ª°[ª®YÜÓŸZÄñ¼×3)g`BDê¼tô¬1ÌÖ“÷‘Ìé«þ›n9×Cw–àuuÍaikºö/—'"ºRÆqŒŠó«/Ý´ŸïžPo÷i–çý 8Ã0ýiç"SƒÆ1ŠKeÄÓ{:ä‰Ó2+•R’ã¦ÓX%Èàb·îð©)ÿ`×"×ÈXœb·§#)MCrÿ™ô¦ù™ëT~Ø”}­3Z{6O·‰wy¥/ÅQûZúÑöÄÇj9½¼K…Ïù4o5DÞÒ™öìvr1ûhšæ”1‘úÖoöþïëGÛÏ £‘‡·sKµ!cYÆÿýÖ·ÿ³G#oåòÆíè*€¾ÿgõ£íÃû´r0öÑî_ÞÝÀ£¨ªnô_Ö·p>^´ù{h÷/nøhÜUª"øv· ô¥ÈÃÛG¹w)Ÿ»úP6úU/·ÐQöÑž”ùX{h—KðTJnETû`ô£í«G+kå²GLõëLòbþèüª¿Û¥lZ9XH=Í kɬԬp*ô~!Ô£KŒ~°~Ø´}­1Ú—%ÃÚCc¡>&ÔÏYÿAUdÕï%}ï.OÐVOÚ“}© >V.jfºë7Hr~UtøªõâDac¡çõ®kí)ë@¹Lõ£•“zgDµ„5{ìs;~5Û'É;¹5цŒ©&™Ž"*­¬t10ÝœŠÑŠL(î;×·³/F©×Vº^7ʺ\ÎuE£¯l‘ƒOFÉ®Eu»¡Ü~TïíËŸAùTóÙ3´ñðùÇ8 \m–<øûóO›Ä7–†ÚE]„c4ÛõéšÁ«#² Ç6N>nµßH*H?ãÚSܽGsœR¶õSQýœ›4C·ì¸Ç!EM«…þ΄ŽäTJ»aîƒU}â5µMAµ_.×QI˪þóz§ð?Zæ'µµ^Á<ÔOÊçNLŒÖê-u8ù—b”El+dWUá­jÚÃF{ií¼ÒÒVÚÒ>¿çšä$­ m€ÅW-Õ˜^ÚšW×–.XEnW9Î@¬)Z,œ)•b~¦¨ÉIFÁ{›Þ |x„mãtN½uzk ÕäSָ߸_Aœòqô®šÜ²ë2À EzX=™Œ¾?‘×Z«ï,¥vž‚¹ÃN‘pAóê+sNäódÜe d×3â”e³±çd’¾¸¬±ir?‘¥/‰Þ—f©FrÃù×eâ]¾dÆàEpÚVèïáeêWY«±ióœŽkέ­&vCøˆÍl‰ö¦ÛçÉÇý5j\þ÷æèE6<·ÇiMq@ìžÃnÆ£Q…yËîÜßZôk°L’c8*Oé\ ƒ0÷®ªN,GB¶(ÃÕ (Ç5ÑsžÅb¯éIµ½*ë3\,WÚøéM*þ•^Õi\,UÚÙéK±ý*qÖž)Ü,U(ãµ&Öô«L¢áb¸GÆq@G犲£å4†‹…†Ánó0 n‚·eð^²±ù‹i+©Ûä¯áRøN!.±#… ã#¸­i^_]¬ìÂy~byÝŠ.-¤ðÈQуŒÞ¡Øùèkµ}A/ÓÉÕ#2ô p£÷‰éŸï¯çX÷º4¶¸™Hx$£•z0þ†‹…Œ2é@Gô«n…zŠjŒQp±\Æþ”Ý­W_îÔ4\ þ”oJ²´EÂÅr­éFÖ©ÏZ: .;Z“kzUŽ¼ÑŠ¯†¥ÚÕ0ӱȠEr­K†ÇCVHæžåÉé@Êa[©éGÌjÉœâ”í@Š„5=[#šPÀ¥óç½zºqž‚“Ú€)îz]ò{ÕÌ ò.zRL4žô»¤÷«À2)®)î“ÞòúÕœ a™/­(’Z~(ŠAv –Z_6\ö¥Œs@îûŽ)ô¥ó$”«MjE]÷NÔyçңŢÈ9™j K½léÃ÷éëX¶£ šÛÓ¿Ö©qYT:)lmF˜°fìãÄì‹çÄšb&OûèTgÅh9 úÔCÁ¶ }÷#è*xü'`œ‚çò®›3B'ñ}€?Ä ˆøÊÐtŽCøVˆðÆŸŸ¸ÿ‰©SÚp?êIúÑfÖ§âˆï,¥… “.02+—•您À÷8¯O}OGEÊrh¹ÓôÛR ÚFwt¡Äw<¢H¥¸‘ýà0*I {i<©†«_ÄðEiâd Eœ/JoˆT¶¦¬  š–R2¼½ä Õˆ´ó àóSZ[Lï´ #Öº;-%ÈNk7+Æ79èt¹QÚN=+LXHÈÇŠèâÓÖ?½R˜cU+ŒûÖNw5ŒR9¨bbâ?(³g ­¸¡”G±[Œ¦Ò¢“O.ùV ¾µb ‹[¸Iów8$“éÿꥭÇQ]X‘aAfmävsôÀª·0”]¬€Æ~é9È÷§qLìRH™ÆIÛŽy÷?­^´‘.²†ny0ÏB½tœš£˜½´‘PJ>xÛ¡9úއÓjª,É€ÜÆÌŒ§aÏSÐÿ*î”|¹W-$mÃ+uSê=ÿÇ·P¶šL ó0d8fQíŒÏ?•"ŒÍ0´Â7O½ü\cœOëúWqfP¹ô•¬vÿº\™R«×ó­É*U[Ò“4a†7'#¯J|B„…ïTa˜çw…2;¦”dcÏ_lÖm&YÇ·vÁÒ¨_O qí`<â¯3…‰‡<ç8ëÒ¹Ý^rK+29üºSQ'˜uÌöh›¦…´ õÌjÚüP –Ð"¾Ò=qš‹QžâDx—A'ŽNGéùþ\ß’ìI㎕|¤ó1³3Ë&ùs°ç'¥[³·;²Ý=EF-å,¸ÈÏÔV•¬g8)ÏCíøU Åø,c 88`sJ°öqí '¡§ÛJ±!wÁ ûT÷[$·` ,Œ>V8Æ}ñLLåÉ_Ã'*aß [ÉGûF·n“Ⱥ†"ÊÅXd±ëƒ×5•¬ÛIã–] ã¸ô¤WsN)‡#o–² ckwª““IfqsøPîtº–¬—Aȳ‰7zv¬+»Ã.?v‹î޵jnV³fSÞŽT629 8xïu|‹È$Áûœ óåâE>õÝëg6öÌ0 ˆtú ìÂneSã‰5“M=Ä ªÉÎ?­XÖLŸØw1Jw:ª’AÞOHf×?õ›_QÏ5nõü=1—™ Dœúf¶Å/qšCtqìl)È8­+ýö§5—žýjöžßé+ŸC^4þwCâF˜¼ˆÛmÔã8ʯó¤Ïï9æšÇ¯ƒÕýk’SزÄÉïé[ºdñ›É`01Ö¹¹¤>y=8ôªÑèZÅð2[]¼pÀ߀+®†ç#á;>s"þtÓyl2¯ç\Šø?VqûÍBOûøjhü9ÿYxÍõc]Zœv:VÔìÔü×?aÖôännâãý¡X«àhGßãS§‚¬@Ûò¥¨ì\ŸÄ_˜„]ÆpÜá…W»ñ“1\܃´çŒšmÇ„ôÛ{w#x8®bSk…6¬m™/ëžh»®½p𦏗À´`*ç•ròÜ_êGÊ€‰uo-IÚ²9íšî4ûÒ™ÝëYÍÙB7dödp(ÀúVˆ‰ÔóSÅ*€GˆëVRÜœdæ¹Þ§B)˜‘“øR´[W‘ŸJºÐ®yÎà{Ó%'¾=*FcÈøÜõœb·7KæHÊ èÃ"ºI-”|Ûü+ê-×kµA\ý4¬Re»]ÞyØÅx’#•#×·Ò·“LŠB(x#Žý3éëYñìbÑr zVÔ2³Ä¬r¤Œþ5ض8Þãö‚Â7ù~OS†#Óßü6ùº'Œ¯ðþ±þtéd_(ØÇ^:ÕRi–e%”3rrq†Ç íßðö©¥Øáó–b9î:ŸçR@ä¸ÚØ$òN™ü*®òè?)Ž}ÿLRÄߺûãv'ÐÏëNÁrÓΨ˜Lç'€il‰Uz3ƒè9þU¢~Á'4ǜĊǂÃ}h°&_I„&é¿ùúÓdÃ&SœŽÜÿõª˜(bNT¯CíR,ÇÏXÏ#oÍîHÏÿ[ð¤]Æ–Z5+Òü¶{‘ëU-ôAæ«(6ª9ü}+¬eç'ÿõéÆÝZBª0VÆ1øþTÉÜi),§n ®0«ü>ŸçÚ«>žñ¢¬‘mÿiyÿ¯À÷®ßÈHÏÈÉé“UäÒÒu+&~nqÈòªB¹ÉÁh\•Žx瓱¿ùéšI’âÒÝ•âÝžyб©ébÎW‘'‚$F$IÔž{œdd÷¨,µ©¤˜[<‰zg)Ô7 ?¥s"Œ·/2£˜ñ“ÇòÍSñl\[ʬJíÇ·™¬¦¸qdÛYX™#“¨$~F²üTÏöXÔ¶ãê˜Ò¹Äš=)ZZ¢D4R7Z©§ö¦¦Ÿž) )M HzÐ1 ¥“µ*ô¥‹Ò”PÒšAA¤1ËCu¡zPI&ˆhQÉ¥"•zP5¹<þµfIj Uh­7RÉ*»±²—,[&7‘â¦؇ñVN «öhËë5Mü^´Ó¨ÇŠÌÅ£‘ ÛÌé"?!¨Üã®iðpžÔÇ|óùV†Ii–ç"¥qQBqp”†k¿ÝV•Tº‘‚§ô« rµV¹‚1Ÿ­&Ø Ç/ŸzîuC»L²|uŒ!\4€ãšî.°Þ°oöò®¬/ÄeSxŽÐþmø+SSU:}ØÀ\Dà{Œf¹Û)¤„Œí=°jêÊò[܆bs Ž~†ºñÛƒ—‘¢zœààvéW4ó›¨Ç®j‘ÁU‹‹”Ï­x²^ë;¢ýãdñ'N†˜ÿñþ1Ý)äƒ çŠŽF"ù1ýÂ+ŠÕ?„ža™¹ô®ÃÇv™îå\ä„ù§=—úTv·ZÒ¯•§Æ­rYàþ×Eêq×øNø)r=ZãE·‰æ5ÄQçÑM(еùHó5B£ýšé»8ìuæDÄ?:i¸„u‘:æÂ÷­þ·R˜ç¯ÎiÏá Û¹¼M+°6ï®íÚÒDó“$z×sœùl`y# ÿõÖ쾊(ZO<–Ž+;MÒþÑ·y;½W­Kv)+²-/E[›³9Î –Ϩ®ÚÚÑBŒgІÏK[uþ"´ã€cëXJMVC㈨Á<¨î©8ÃcêiF Áâ¦Ã¹]£-Îr)­ ê2E^QÅ5¸ƒE…r‹¯–½j´IfóG8ôâ¬Ï/˜ÅAö4F|¾¯Lb®+QIé ï,*àx5¸ò› @$r3Q4,Ÿ!ÙŽÒ)ÿë{Õ)$Þp¬¤¨þ ?*ѳ4‰$¸'vÖçÇ?Ï­#ÜUï#áˆÊzóìzuæ h%Uf(Ä åsÈ÷ÏãUa›mÒÆÛ€cŽ;£ùãñ$¬ÒÁïǰè>”¶ó³6W,\c§çü*„’32¦yQ€Gâ®X¹_ߥï}i%âê"=k’+Sª[˜8Ž£moxcæ³—øëŸß!èqV4]ôèž$·–Rİg½/ˆä­ð¶8¦œö®iµÝUÿÔé’ŸBÜSïÄs7‰=ÉÎ+¦çÕîÀëMgë\¸_±ÄìÕ¸-/™€žàŸu¤åa¥sVfWR¹ëQÙØ¬x,·÷‡èmÙ3Ÿ­^Š6‘ŠÊNæÑV$HÀã­L±ã¢þ¤ŽEYHÀÆ:*› ²‡w~T­b1Á­Eô¥)Æ)ØW2ÚD$ƒš¯:ºƒ»¯4dI¬[¦&M§$â“*SybJ·©æód¯-ô5+àÇÈ wíP1ÛPÏ9;±ZE&A3BƒÏ`?™ª×1ÝFª| ÅùøU¥˜`•=¸ÍI¨+Üé3¬`<²éÏ_éWc;™S^Mh‘}®ÊEÊû‘‚ûõÏåOš(®Ñg…ѹÆS<ÿ…IªmÔô«KëQ¼:Œã±ÆükÞêâÙ?ŠUwhÉeHÈûÍùóJo–It4¥i+ê‰eyF×;¸è1Àý ÍjÙª¾·8ίLÕ+ÙH­®T.$ˆ¾}8­Ú¹˜C×>ãHÊä7÷®:2ªŽÿÏùU7‘ÚPÇ<ã·=õ©'&irXP@8Î8ü*аfB%á±ü#¿Ã†®1 2Ãí¸ÏŽã?çØTˆ»Ia’ž‚¤¾»U"ØŒ®ßtóÛü÷©’Ú9¬Qšô}±§ UC˜É}ÃŒgŒg5 «ØÚ4äãÏЉ]Øü­³¾s“ŸÇéZ–ÒíL|ľzó‘OmKM1®¥» :"*|Ìç×ô5]`™#ýã ‘ côúÐàÖä)§±©éÏR;p1úšÐ·¼Üù$)íŽÿç­`È9uõ<ίZÈèÊ…2O$ç‡sfeY>b2\÷¬kÝ:7Qµ@€Ål G#­#!=Gè(Þ/*&WS¸ô&³u›}2\ß=?kªhw ôü*­å x^&ÉÈíÞ“Ô¨èx|ÊRFÀã=}j-§ž+k\´kKé#l†°+äçÖ¯r± Rž ɽ;µ3ø©ùàP4%!ö£®i( 'z(áÒ”w¤¢Ž§¥ ¥jE ½)(^”{ÐŽ”êAKÚ‚‘<=Ö´¡¶’h·&0:Öl]º4ç#»Vrv5Jñ³*Gg"‘·zÖ¥¥³Aná†3PÇË/Ö´ßýI┤̣riÀg#ø+Î.‰ûCã׊ô‹Ÿùgþ™×›]ÿÇÃàUÓþV '^‘ä}*B—.N#ý+L9ÇaI½½k7^]Ž•„‡Veµ•Ó? EÒåÏ8¨\ã­ É©ö³-a©¢ºéÇÍùTƒIËó „‚z “'4¿6Ï.¤û–¨Ó]×Nµï¸þ5:¬QÇå…ù}ê>W½QÏSÍ.æŠ] AŒ…™ã§Ò¢iaU ÈãQ5å²pe+6 Åì*¦¡÷ô!ª6Õ-ÔðK}* F)¢ØˆAÈ95q„“½ŒêU‡+W5³óDŸë¡#ûÂ>B’:¨¢VÇ–qÑ…BÜobw9’<÷•»á5G[€Êu¬"q"sùUÝ WMy„ª[L ÚŸÄsUøNßh 0q\½ß#€í[9Ÿ>‹UÅ·w¶;½Åt\ã:©[¹úÓ¢PHÈ#Þ²ìçšëæm9èkrÝ^=«93X«$a»çðëS¢‘Ðp;u§$g¶*USœ‘‚*l;Ž…FsÚ­"àv¨ÕAäõ§óØÓ:`qÚ¤ÊõéP#n>õ0\ŒÐ{—Qbˆ„ŽIþ]kZõqEQ2MÔ/dT’& Ψ\–@Ã;dúŠÕ¹Œzýk6î5U$ ¾§h̶ݜ+A銳izñmRrÙç#ƒUÈ+”' óUß(Ö ‘’¯Æxôÿ¢M[{YíŸL05³œÉkp\ÿyHû¤þ" ¾’êÊ#!Ò`G”J²î#Ž8Ú3Fx¤„|Μך³¨ï¸ŒÛXTg¿o¯?Ê©6Kй‰2춉Àò×n±À8÷â—O¹IchCNàu?ãÍU» =Ó£ ‡,ÝI=*Ü6"$ßÎK3ž”®U‹ IÉ\“ƒÆ={çð5­u-½«,n ¥0­Ü uý:U¨³qTn@o©ôíøVmûÈ×1º Ü¼'œâ¥}Q¶‡É¼‚€¥ÜFÀù±íQÀºe‹¤Ój0ÜI“µ mÍø*’Iý(°òV ÕUöž3œm#×§àjW[‡0@wç¸À?ç×ëMÉ7{j8¹Æ. èN×Sj¯ÕÜ~DŒA Xuù›nç𼚯w{æ6 ô¨' /YNåHQç²:T·}Á+lMjHù‹(RsƒÍl@ €6Ò# Ž+ÜsÐfǧNÕÐ[$l„`áxç*F_·0A¥Z)Ž@ÈõÍAÔÀ•uAe%GOQƒ@Æ*¼ æ¡–5ÛÉ={œU“*ŽžÕ ØãÜÔ²“8hë$fá#-Žàã5æó#G!R»G¥{ž¯b·Vn2c®Gõ¯6Ôt„yJ•#<Ó‹W8ÓÖ–­ÞØIhÜŒ¯­TïVg°ßâ§v¦Ÿ½NŠ;ÒQÜÓzÐ÷¢’ŽôÀx¥i¢”´†8sRïAçšE P:Q@”ñH /Z '‹ª×E`öqÿz¹èº­tzpÍ’½XÌÑlL‘®r;UÇ?º9¤UÔ³cìíÍMîÉH±rGöN{l¯7¾ÿ—úW¢NâKí°×ž_Œ\õÅkL™üJ×¢ó"Ô ©Z)æAùW/–=É¥ÍÐRTV[žˆèZµ¢mz1÷b'µöyðškBê~aНe&¡¨úóŸ»BÚÍËtÀª":pŒU(Et%Ö¨ú“û§ÿ–‡ð¦g~²7çH£üS²DsIîÆmc÷˜šUQéKÞœ(Ê8§½MQOn¤R:%oÝFG÷E“±yèE23›x¹þK9ÌYö®N§¡Ðµ#bEÀîk_–Ð\ÞÜ,èÈÏÖ±¥l²ßZÑð¨Ìóœ#ükZzHæ©ð³³{ES¶ü«:xc µUG¶)%ñ›‚d'Ô)ª±_Åq7Ý`;f·“ÐåŠÔеˆðUOµ«6ʵS¶•à7ä+J!¸»ü«#VMŒ«­Z\cÖ«…yÇàjHÿÞãÐÓ$˜{ NsLÉÏ,}y¤1Ëô©@㩦“ߊzŸZi å[ÔÌ'¨Àß&·¥lLFF>•“”€¿;j.ƒ.)ÓJxÄ‘œIõ¸‡çðæ šÈõSòÿtÕX›œ•Ä#d_ÄU)×1áÈô'Ó\iÎäì ÄöSþ’l$Žá„7Äâ€2íæòˆÃîà“Óü*Ygv¨ãß§ùýh½O!ÕÈ烴>µÝÆ…¥•Ñb*rXàg¨ýj¡bˆÚÀnž§©$ÿ‰«Ê¢F,)QÀÆH럧z¦/aeŠHeVFêëÛ¯qS ˜T)ƒœçœùñßô¢ÁrwRȇ*w€;}³ëM¼f_»Œ€8ü¿úƤ•µ•,ͶPFáÔ°øõþu®±Æs '¯©ôÌÈÆõçÀ‘Ïùõ§¬° 1À!ƒ/øŽGë[&ÁcL±fÉc°ªSY®÷ ·vxOºOþªVÊ’ ±$‘Œ?úÕRMó1—iî9^¾ãqã*6/  œì)"´”¸f^{ð?É©iv[ ÿ{¥tVÁ•UX)> c5F d—PÞ«F0­Œr:yýi ¶‘ž0 ôö©âaõéÍG Æ öÕ2.ÖÏ=G»“‚)B©6–n8§sH£:î a`ûHúW ©ÚªÌÅXc<JﮈhœdÇzâµòå|¿SÀÅ"Ñ…-ªJ¥]A¹SH’Ô™bù£?¥v†=Ãð¨ÚT†ô”šÏ6,Tò({Vöµ£2fâ”îjçöóƒÖµM4`ÓD€©¥Ø DPóŠ2õ¦"o+= 4ÆÂ9<æž=èÀ u©¤;Iô w¥4ÑÁëJO% Ï NÔ£9 cûÑÚŽô™ ¢ÌG•­Ô¸û.’$¡'…,+bè„Ñcèr3ŠÊJí­ˆãñ çæR+JÿµÁ!Á ãO-]Nš7YÓåœâ‘œesnvÿ‰?ìWŸjëóþÍzÈÆ†W?ÁŠà5&îŠt÷ ¯p²°FÝ$Q¦: E9§Ä9"­™¡åFÎ:Õ+¾X}*ë“Jë ¤‚EJp¤ƒ@«$QNíMiÔ€Jpæ›K@˪2¾æÁ#ÞšG4Õ¥?z¤´nÛ°6±Ž3·­:n`'Û¥EgÍšLÔÌF¹žçrÖ$ìw,~¾µ>•†Ô¶¾ç­S´žõ%¢½1=«Hîa=Ž¢Q ŒeÒ›jd¥g=¢1I ÷­‹AbjÛ¹‚VÔÔ¶Ø€dôÍiÂÈG;Ö©ÀÀU˜ÙWÔR°Ù¤Š»AÁÅUR}£žU;uÏÒ™%ÔÇÿ¬Tèäâ«ÂIÿ¶@¦®éOŒMÀíOQ…äÿZiR>O³Œef$€\“Z!‰àvïT'R%Ï?1P¨ ~ÖnOàsQBY“v>QÔçV Æ÷ù¿»Š«©5»K÷¥r?Þ¬ Ý.y'%# ©É'8×€s޼s]S\Cä¨ÿ?áÒ°uKk›Ù•åå>îì|±ƒ××è?#I‰uý´¢6YUÁÔûäsÓéTmÒÚ@ÐÝijDx ä¹Aãòük¢Ô,-¢fÓNØÎWå ŒŽzç±íø×:-îçh!<†l=Ì›ø›J¿žØHæÁ£>¨zô¨"Yo®Y7“ѳœ÷ä“ÍuZ­‚]éÈ­3©F$rïK¦ÚYè £ÿ®È>iÉÈÏAÇd–4Í0[%¿Ú‹3B¿ br¾ñÁÇo¥j1‘Á’0ñ‚8zgúUU–Þf8Ïñ cÿ×J°£:™Yyz‡Oòi ½#Jû–TÝòàŒg‡ãI(Aw`(Ý´ýÚßΠXòÁ òÛ;IÁÉ=qÔ ã8\uµ”O1&e*>c÷”ô9/×ÔÅ&Æi&›o*‡!·ã;ñõÃ?*p±‰rwª‘Ûøb®[[(ÛæB€2±$ú’ ç§n+KìÅ£À×Óÿ­HFØÜ„.IÀ rOáDp•ê?JÖ}=O *Ý‘YEn@úzRc*DƒO\U„@@ê>½*ÊB£žž ô©¶(?*V€:t¤‘p?®*G*?úÕ œ¡ÁܽE+ 6žøèk˜Ô`2³µÓH3œò=kò \•&¦Å­sÉ’&ÚÙÛÚ¦}ëBt•#‘T·â¨z"n’)BQ\n¿¡½”¦æÌG“í]Âcq#šeÄ+sFã(ÃSŒ¬'èyJÊÊÄç­?y—åÀõ¥®hçMºã&6åMf®A[§us¦…U 1A4SqžôÄKM;„R3N»¶{R¡˜} @¹QØ43–nXŸ­!ˆŽ;žjL‚:ÔEA¤eaÈ4XiØ›µ9*¸.;TŠÄu¬R‘1ÇjNôÐÀ÷§´‹Nå˜~ø­mK#H‡ýÚɈ|õ«ª|ºTzVoâFŸeœðë]U Žr«÷‡ÖºËtÁ€îUC8Ò|Ú'øk†Õ£?kUÝÜ8#Cú-q±ct§¾ÑSOr§ü2PqOŒüæª,ÅNU¨N÷Êò+FŒ‘! /\«uÌ`ж֢\–lzUYí&Œy_Zw(úÒ€qRÅö+HXÂѧŸZ¢L€y§gfm>HùQUˆ*phRÓE8Rõ&œO H”»:Ó˜qH´kÙ6l×êjfaåž}jµ6„z˜òšç’Ôí‡Â‡£³GשôéBê1œHª‘·ú22#õ§Ú’·hÇÞ®;˜OcjyӃɭËÁî’kš¹söÒG¯º=4î8äÓ¶¦w÷Mø+Ç…YH•GøÓ-Bä’jØ zVfÊûè¹5*’§qV#Œ1éÒ’e°â\’EYQâüj”2aH¬''$S°®Xç¹ã×*¡ÇëPíÎJœ &Oô  GaøT;"ùʆ=—?Î¥nQëP\€NI¦ ŽYfÁc´z/Tâ1ÐdÿZ‚ÝKUÀ¸SÉêiˆ6…Àa¹» þ´É¡«+Œ`ãùoçVxùG_ZQÏN(M`ËÆ¥±Ý‡aôïaXói¬’—#'Ôûõ®Û·$Õ+‹_3¿•“Ì9B·ÇùëPÝY†c¸oÛÏN ã¥oÜZcdô¨E¶Q·($ŒîY³Œ¿POåôpC·#?¨âX`îÉ?)?ʬ&Ð6?^Øí@ÈÛ8ädSv)öö5+¸?äÓœÁþ´&âŸ)uÅM»#Þ¡,­‘Å1Âþª“àgµNø)ééš®A;—¶i2‘(–ïüëáó!ÊÆ¶.ÛlEzJæ¯/c‰Î\{f‘HVÛÝ#Uå†6çmgÜköМ3€k*Û¸XŸaCW)¦$S‘PMq@’@Zå§ñÓqMgO5ÌêZIð¸:ÿ‡õö©å*åÝ~òÖöEFcòzV0K5&šàîVªmosjr •üêý¬­&U—æêÏ™‘‚¿Kv-S“èfÛÞ+²§§#аö\ à{ŠdöÑJÁ‚„õÅInñÂÊ„œù£™ì%¹Ÿ>•,y*7j¤culk§Ÿ›5¬ w4`š\Ŭ<žæ«¡Ôòy«÷î„&Õ S Ñr\9]‹¶'0÷éV×j¥e÷XUµûÄ•„÷:!ðB<޽Ôn\n*y"¤EÀjcºÄzU£ÛÝ^I4fdw9õ®ãKu¡À…yóNî¶á àv®çDWû,lî Ç@0kVŽtô:ˆ&GA튽ßɬ¸®9çÒ´£rŠ@ÙwrF1Üö×@FqM‰prÇ$ÔäçŽÔÉ)pÌ@ëOóY\@`¡#Ž• Ñåc8 E¤¹\ dŸZ“r’2Ýyæ©[|ýx;©È sØSVlÅ…מžµX<†NIúUKqÇç@ †í Uø÷`d³À '|V„L0*„[ˆ)êjÚÁ”ÍSŒó‘ÐUøeR¸'&ý“ÇZCjwƒZq¨8éSùKéNÁsKqÊÕvÒÿº¸âº7N0) i‚1O”W9Ÿì͹È8§ %Ít=*«ÀþSJÁrŠØ©àŽ)ÆÙ 5u$7ƒ¹m¼…ëNÁs:XÀ±ÇCB5>øëÏZ¸ðpsÐU,ÆÁ”GB*l;ä© óLp#ÌýóÚ¼óQBÒ²»³(ééÉ®ß]”˜aç×Þ¸+ÉIr&AŸQÅC6‚¹—&ž„ílmï¡Ü×Ò û*8ùä?Æ­¾Õ;£“Ó¡ª’ι˧ô4®kÈ„1¨è°ïL(‹Ú¡’ñW©ªÒ_ÐP“c÷Q<¡wTu¨᛽D\žõI2ãжeQÞ£3úUbO¡§ݽ©ò™º£Ìì{Ôlþ¬jõ¼6ê„Ë’Þ•+ËÖ«”‡Q²‹J)ŒäÖ™³†A1ô¨ÛMù~Rh"í–4›íÉö9Û17=½ë:îÜÛ\¼g±âög‚PǧJµª©s øá×­-™KUfP“æ!½E"u¥oõkMQÍ1"Õ‡ü~mÿjµüBx…}±ôáE©­e—ÐÆÄàŽjÆ÷ƒ î•G½uö«²Ö1Üû³ŠÒö%ˆåXf·Ÿ²¦Þµ5J¦µF•ÈΘOµqšËt‡Ú»gv—†î+×Ólñíùj)=l\þfBvʧ޷”þìÿQ\òœ[¶c^üWD‰ ”®™6óÝɨÝ)ÁŒ…8ÏZ rÊ@¨:ÒHŠÞVK¾2*ÓÈIÉ&©&>Ò§µ\ ½ñš—Qš‰¸t>õ`¨ùUgê§ÞîXÞ€8'š³cƒp›€aè{ÖÄ–© «;$`°ÂóúÓQ¸å>Wc•¼\Æ¡ª¬*íØýѪ®ÆL1¤ŒjüDÖgælúU¬ÙÍV´ûøö«Ë÷ÙWØÖrÜpzÐŒH?Úþ”™;ˆàñÐÐê˽¸*qÈõ¨Õƒ±…ÇVô«HÆLX¶ 8bzWQ¢3–ÃÊ[ÙF+“£Žl¨.3ÔñZúv¡,SXÈÉè isD¶ÆϹ­x€P:gÚ¹-7\Šà…-‡î+¥³•h%šIŸþ½J˜¦*޵/ #¥+'Êi$ÓÎO„#=ÆÍ:ô©Ã2pZ‰`ÁÏñu¨X³/=GëT!Ç;ð:žõ,eCŽNjßÌàðG£­`䯩Óæ÷.Ç#åöÍUi3Ôœ×]àÿ6MÖ¯ýÓTO„îámÌ”^j”£a>fÎsyéšÎ‘‰‘I9æ® „xËŒw©)u'qU¥À´²ßÀ£—ð¬ùµ(ðB‚O­!Î1Ý5•ųEOÎN7UíFP¡D`Ü×)c~ZEb0ª3š†}Bêy‰òxâ®ÎÄJµ;ÜÑ¿˜Ê„`ŒVn~Zt¯,!“智ç¢û}jH®%›ç®8PjZdºª[XŸÞ3à\þ¸þµ; fÉë“V,`FmÓli!|¼niò„Žy-ÏÈÃæà}séY½Æ¥¡JÚ_*ãy9A÷Ôÿô¤»wšvD@#V!BŽ1V£…D³y±ª(ˆ¶d‚9ü«*iÚY 'h' íVŒ¤ÉR=¨ìÜ`àÔš–ÒÖ[Ùk·Ó°«V«ÃN å‰WÇNŸ¥vº‡YÔIµrÿí7<ÿŸJR‰I³žŠÒXa›s7Lç,I=±].…©,’y|åxçùÕ MíD`OJͲ¼’Þý©T$î>¿Zp•ÄÏQ·˜095l?•ai“‡‹p9õ=«^9ç5£DWƒŠzœZ„8ÎãNÞJ@H@$“Te—v8ô«Eý{ÕY²I'·jb#fØÁ€Ú§R®»‰ªäåvŒf’)Ö<,˜Îh^Ýãéc!r:Tpº0È<{U’p¼óLD¶8#š²ƒÉ¨Y>]Ëž„‚€.FÄsV-dóU>´ðJ®E6c¸ã¯¤ÍdÅ#dVÐàŒšwF#Èm2ô¬øeù¿²'MP‰‘Bži’0ZŠ[•ÈÁçÆ$©cé@ƒœñM(JŽzR¡w WqÛ¥0"äô¨¦mÀô£í)¨ªí>þ3Jã pÜô5;|Ä5O,…N3ÇaYw—žÕ-Œ¯w2…å±ï\íäŽíÔíÏQÈ5júýXpxn3ïXÍrÈÜä~•…IA3cëùæà¸ýhy®Jí'Ò“Ì  ãñ®vl Á/­ ˆOU>ôýñœú}hCEÝ·Þr²#;NO¥WžÆ'ùY®}+AA<ªãôÒ¸'4×: ´Šq»úVPð¤‚bë(ö +®ðÏsC —ëÔi¾…97k³>¹9Æß¥eO¢ÞDò«Àß{¨æ½h,x4Ï$l Ù4&ѲÄM+5©ÂñÊ”‚3ÔU%â6ã½{=Ö‹eu“-º3Œ•æ³&ð^›6q\®SŒÞ5U¬Î:Ñs›‘æ O"»KyjL2’GcXw~Ôíciß*%NqZ)Å™F =Q–Š2§Þ¥´}šç†Èý)²C2Zùž[±Æi–-ÌlýKPTô#›sCIÆ*K‘™ØŽæ£ @’4w Tàæ´Kî9c“êk.O•ѪÃL1’hh¨4›¹hÈ¢˜ÓþUI®GEæ¢w•½©r”ꥱu§ûÜÒîxzÕ¸óš‘.$LzU(£'VLÛÔcThö.Z ’yRnÆx­Kð ¬.+>;pìÛË(<.MØÍ;={æ…¨ÍÜÒëÞµ­c‰‘OÙU¶ñ’H¬ù1΀["© 7SÞ yæú˜km4¥wE0-чcôÅ#ÙH%Ù3ºú3/Êß¾ÓÊÙùaã\6K*äþ}GJæåûGœVAýÞ¼ÐÈwê$EÃ>XpEU“nï—8®ŽM:òöäû 0¾f0IëÏ­,ž¼Ü‘>”ù—QY˜ö7?gt!C òC[îK±ò£RÀ)~ÏÁÁv‰¥Éq[vš%µ´žj“¹½Rê$Rƒgm¯ï.òžGϹ“4q‘:õë°[Xã ¢õb˜ñb-»”3œc5œª\Ò0±‹–,âŒH›†îNqWV(npžPiKcß½ª»¤Ï{$2PݤðjX`hçuDaÉ#ÏùñYß©]:@¸ž9QßljGô¥Û££ížJ‚®’ÎÍ×9'zµRØIg8ÎzTóµ°rßs—ƒNRË|ž0 ãuvÑ-¿ ³cŸcLû‚¬£w ÆãLK-¥j½úd‚’wÜ35°Ã"Ǹ3áô®îUŠmˆŠy>µÕk7{ˆ(¹Êõ'­qÓÛÉ,†F8\ö¬ ¿‡µ8æ‹ìë ߎÒºËw $בX]5Ú28ë^—c{öQËž®„îdÕ¤—<ÔˆÜóTÒE*ô©N拸[Ÿ¥Wç$Rn$c¥2IPäâ€)Ï6ÂNqQ ¤à޵KRÔ­£LˆûÃ5ƒ>»á >ô\,vqjOLcéZ¶×‚eŒšó˜¼F€c‰5v/EÚSôZiƒ‹=!%]›sÍ7åluøäd\Žœs[ÑÞ¤Š>aŸJdš‘¾áœÕ€~Q‘šÎŽAØñV–lÒi “S¬…¹ªF@­:9Àh¢’`Ôþfü5g,ÛØcŒÕØðö¦€âd犴ò¥Q† ^ÕwàÈŒqš{ЂM©µJkÈKayÍV›.[aÇz’ÖPaFW­0(*w¦ v “OžQ¼’x¨ÜËÇ^*XÈ®§.ŒQȬ-Bð7d‘Ò­^ÞWp'ŽÞßþªç.¤ó%=U—9SYÉ—DÑ6æ ùI;8>”Á€uއš‘Ë2 çu¦™1»¡<0²fˆB2¤#ð¤ØO'Šx'yžM;k·-ŠÎÆ—!(@0~‚¦"q‚äqNŽÙ€+Ï=éÞY*7œ`ñJù9%€ c9ô¥VAÁÝŽâ¥ò™Nß¼ <ÚùqnWÜR°\…‚©G?Δ¨+†œÓÂô#5"c(Ç]Ô ËÌxäœgŽÔ…r}*d`«€NG41n Üšb+ía”ÞšeÙ‘°àô«E]ÐNN}i’.T¤2)Xw!fF]À Š‚H€ÁÉ ÁÇz°Bùgpü]Hí–ƒšÉ½Ñ£¸³û)ùcß¼€95Ãëú|zf¡ …HBÁäW§¸]ƒœ1=ëZNgkE™À=E\$Ó&I3ÍïcÛ;|ŒUSW¯Èk•8ÆW¥Q5ÐdÆÌ?v¥V9'š³9ýÕVªFsÜAÅJ³y梢™&¤+ Âôçã`§¡¬Èäh˜2š¹ Ã¨Ílµæûž5àá~Q‚j] ¹’yÛ‚ ôlö?S]JèŠdLÁ÷xE…•qt(£o5íGmÛÀÏ^˜úVÒ= 6q×W/lb‡;¾a£­k[XLB¼T(`Šaƒ†=»æºa ›”*rGsÇÿZ†³L]ËÀ'¡Å'WBÕ>ædzBÅgåÉ!yvƒž@«º|6Vå,¬ró“ëW%.Â4FÑÆ{úÔÆçå XôéSÎW)SÉÝ ÜÀz`t©8 œÒ®ÉU îS‚oΣòPB!9ö¤ÚØäI“ˆöíxEº²’Þ¬%ƒ¦Ð^ ŠtÇ…ÚÕÿoŠNH,f•téƒL–ÜÜ>åÚ¯ÔÕ§ ;‡ œœ÷¥hF<µP@=}EG0ìfChŒre¹º“Ú¯ÁdˆÅäù˜xíVLQ)}ƒæ M‹ ŽÙ$÷¡»ˆ·ob$Œ3a*À_-p Ϊ„ÚŒ¡vÆT¡ì:S 㵺£GcSa³BGû4Ç’Çõ©ÊRT»œ šîì˜F <~u‘$ˆÌl…úJ¸ÆäI”n•w/#§µzoÛYÇûÂÅñ•P2MyŶ¨ðÅ’Ù8àzUI/^fåÎMaÊv·¾7¸l(#§“Xw> ¼ºÜ$Î}ë~?Š4œÒÔzK¶<’Äýj³ÈÄç<j=ẚsŽ{P ™d,xâ9švSÏ_­CcEyoI1#wLö5 ä̬Xn+Èý?¥+ǽŒò2Þž”ø QH8Éù¿ÏÒ³e¡äù‹ÓÜ· àTÂ(×výÜŒŠE>^åd…"€²ª3ˆÏñNVyÎ?E ‘†úŽÔõÌ„À8éŒT2À1A$wÅ.À'ÚxõÈéR•tœpqÞ€ŽœƒëRP„*©,psÁëL(̃ðzRºy¬wcñÚ—Éj€y‘‚w ¯=M&0Æ}êO$…ûÃÞ—vmzR ›òë•#Ÿ­&<¨9H"§Ú» 'ÞsQnbrsÏÓ° p„gÇ5†çµjßê1Ak$Í–`°ìsÅyÝö 5 OÎÚN+HÄW¶¥;©7Ü“žœT/D€‰>´­ÊZ²)ÏÊV©î:PU-Œå¸QKŒœSÌ.9Å2Hè¥*GQI@@®¡§ÙÂÞTâYË€ÀÔËot Ïu±P£5Ì H툅>XÛ¨8Éúš‹û1w®àã¹®>UÔê¿™ÕEuim4¢n³ŒñŽjaåó%™ žJŽ•ÉG Fwøõf!Û”*YXcç@@ǧ¥¢¿c¦ŠK{©pA`t~EYŠÖÞÖ34’æNÛ1\ˆf…G”Ää0zp5*ù®»žVyqŸÒŽTgKý¨v"wÕÒmímÀ·ÚÄŽ\rk‹†Õ¤´ƒ8ï»})Ðæ'&;†‡Ó ýA£‘g_f´¢iÉÞ@©®ÚÞâO6â\§¡8¹?:`ß)<½?þ½Ë,²1p8Æù4(YXMší=£e…Rp0ER{ø¢‰Õ˜¯R9ªT’p(ô©ã´pp£Œd‚qÏãO”\þÒÛÈÞ2OŠt· S1²ª©åOz>ȸ‘¸Ž„tüi±Ç‘—99àRå ó•'1B<‘Ç„U‘ÁêÃ;~•a"P>d#µ9QS­RŠ ²J »±ÝÇZÏ'i•h R0Hœq»çëŒ}j‘61o¬–ÅXíèI®7V¼½§zï® ¸`â¹»ý90îù èGjiê"•'5cƒZ·¶ØûªxõªÒF8Ú}kTÈdAÉÅ.ÿ›4ö”r*&R;SðÀ’M&ìÓ0FÍïÞ€'Œ3žE9˜ó‚jlÿZy'~´†"¶O&¥ 9ªùÁ*VaÅ1 #ñŠ[|ç>õ95$D ~”«äŸÖ®Zܘ·:Vtg ŒñíR#óÆ3ÓŠ‚Íø.äÁI:ýÖ®›Hñ) ç¾2+Š`¤x÷­\äH#­h,™ìú}ŵÜ`Ç8~zw¤ÖÁ‡Êz ó_Ý»¸Ãæ½Îvš!—Á¸ªR¹›Š2YJRN¹É§Ù^\ê‘.FW“é‚úÕ6­h³ÀC0.Ÿ0ç­\Ñb‚TÇÎyÎj„WƒÃ0¥Ó\†u™ŽXƒ×>Õµo¦,häŽæ–KÈ£.áš· Àu;zÐ+IlAYwp¢|¤ô­Ù2;VEìð mÍÎ9ç½&R8Él±!Êò çŒTiàoû¹üªëÒÈ2A'ŒŠH!\Ÿ^Õ“eD˜±fÂôÏzÝ8(ÄŽçpRVHÈ'$ÓvFÄ ¤ ààõ¤Q\Z£¦íØ|ãcŠrÅ,,"9ÉZ è2 :’sÅ/Ìë¸ð= &4Êà³·ÌüöùiÂ&óJ``óš±*ìÍ¿†“Ûbõ^¾ÿJ›r‹jàíõŠ0ù<+w©$ÅŒ»ÐÔ;–b‘Ü÷¤1¡¹û¤€{žµbÄ>œT³(B$íüj"í À¢ÁqÀ‚ß3G_zRNÔ9Êɨ÷ÇKdŒt¨üÆ)–m¨xçùÓH.:VÉóئ}¡Z7…àæ³nu {5iD!<ñ\ž¯ã+tyæHx*ÔX=Žž}F3@§ŒžµÊëž+. 6¬¼dÅr“ë—2$“9Ï⪻–É=êÔIR] ²k’ÚÉlÒ“ÄZÍV ƒÜÔÁ …›µCÚ¨–Û-\€Á%sP¯¡©£K6Ôæ«÷†È®Nœ0©.ÖT f©KròymƒšŸ õ³TúT‰w$g±ôÄ^òãj­ô4诠~%âqöu‡|rÇ  P¹·ŒÈã­0F­• ì\r>†§VXˆ§–vvÜç¬,mr 7íî^Ý©D€©F€^:²áf‰@_œp°ÄŒ>eù‡R ¡ÌSŠ3Î̇<{U›k}Ì76I<Ú¬â*X Z§rŒ¸d“߆Ÿ-…ÌXH‚Èã9ôÇ4å‰K‡+Ïlvª°Ý27#9Zš9—f@$ÿ*O*‚p£§çQlT<qÕOzhr$Ï<þ•0û…¸ÁM1¤@ÉÓ§…Ï^¾õ އ ÜUÞcrÀÜÔ•`ÆØòpqK¼aX/Ö˜A“ñž´;¶ÃáíHdƒ{¡í@MÀ•ÆsQ¦\gíRª.IÎí@ÀÃ~”ЄɂsÇOJW¸ŠTCÁ-@¹ dsÍS¹µ30|ÛšÒ#†9Ï'ŠnÐAêOlq@Žv}ÐsØö¨£Ñ£Œ– èk¨ƒž™=»Ó äí<úu¦˜š99ü=­¹` ׄbüóLÀóiÂ×Xx éQþädƒÔÕ&O+9H¼7j™, xÈÕk¯ DË#Áòœ– í]‰QýÞ½3Hm“hY6¶}8§t'yeΟ%´®ŒÅVòÎG×¥Ýèð\·Ý9?•s÷þhÉò¨ær;~o¥!n­hÜéWP´mƒßDÚLiCUt`g"œ¥6îœhÊz{Sm_jûú{Ò,˜¨ˆ Gjnò3Sb‹ŠÙÚ@æ´í.€u:ÖD1³8#ŒV”|Ò•Ž{ÒcGc¤_CïÜýzëí|D¢#²ZóË=&é@;NÐzŠß³µž=»ŽsíSÌÖÀÒ7ä—™d‘Œfœ­³î¼ˆ{¨løUuŽ@qÛ52…ªœòØ¢ìV,Ã$™$ÈOÖ´"Ô'‰N•N_h8lTì7æCÆ1ÒØX°/îÖ<‰˜ƒê*¨Ô´’’O=zR P[8”6ØXaPìT>rsÀÅ7Édã ŸÎ¥xy'Œdzþ4ª…‡ïAÁÍHÆÝHn}})¢ V?Â}*ÄJÊø%pÝ3Qfo”¶îN ¡Qó7Å0/ÊÍ!€j8æWS¸r:*@T©ËèÅK(TRêHUޏâ‘r ƒŒþY¦™‹­ƒÆGAL`ŸÈëJÃ#›$Ÿ”ýqUK„pNpzgëS;‡‡cHYäÖ¨yñ™È9 ~¦Ÿ(&_y‹¶Ò9¢³#¨ŽzÕy¯<˜ÙäFâR>µÍ_x¢Ñd+îà/FrqÀªåS–Èè'¿ ª¨cë\ž§âßõ‘Ĺ c¥a]êWWÒn,ʽ• #y#’(º:ã…i^E KR¸¼¹v‘ˆÜrTtUW2}*Õ®6¡xÑÂ3ƒÉ«wúCéŒÛ,ã5­ÖÇŸ$Ü™Gn¤=©ç¥0×°¦ rMÀBËPÅøíA¤2îšÀÈÑ0ÈuÇãU¤M’•ô4°’£Ʀ½_ô·aÐóH} ûóæ¡íWeŒºd•—”Î*‘“Ü„IO(i¸4Ľ…%-{¸Y‚Ÿ,nïŽ)Ù`üŽ+!µH•˜c8 5V]·“äó;cš›΂;–A•=FyëVc¹]¿0÷®NOD'”g€¹océþ}ê°ñ4+!S£Ðæ„€ìžëi¶G­UžP±ïÎí\„Þ*À*°†€sPÜx¡ä„F°:äœÓ°Ž¢N/=Qy>Þ´<ÞCF¤ÉÅyšê“¤âQŒƒÞº=?Äi7ü|0Áãž + ìT–„’À’pAíO¹dwÆÆ{Öež§m2N©=jÑ–+’pÛvœ©¤Ð‹ÂEUÛÓ½L0ìrNNk!'a'Í’GJº²±`G;¿:–‹L¹‡ •è8§õYÇÌO­F…¶ä}à:Tˆ[ppjXÇÆ„¹ÇíR1Ü»8Ü½éˆ ÎHËwöRI$í>Ã4Xž‡mI°þ†¢'+‘é@pWã<“@\ >݈¨ˆ]»‡¸¨›¾3S“œq@ `È¥²=±Qóeº˜,ˆûNF@î1óµp£u¤1¥YÀäœT2"‚­À?J#}Ü)ùºy…ßûqÖ€+’­Œäš{ÇÀóR™]ˆô§””m,8 ben Ç­;ìèë–Ç»ÍO,yä€íLTÁÊ©úæ‹…ˆ&°YAT ƒ×p¬Ù4FÜ#•t) ÁÎ9¥a»ïàNâå9y4&b ¶>•RO ÆxPsž„×bè (ªª{`õ¨ü¢zu¢âå8©<1’ ƒ“úÓíü4® ”#žEvßgm€gšX­ÕIéÀëEÂÆ¾j¸>HéšÑƒN†3±!#¸5wc©ÿ ÍZŠ2ì¬24¬WKp€)Lc¨©–Æ@;«`Œ’Ä8ãƒ@äÀ vÍ0! 66Sž¹Í6MˆÀ õô«¥˜\óNïÉCÁè Eùiƒ¸ƒÔgŠTã,À‘éÞ¥òYU¿v7GšFŒŒg û@8íKhß<çy«`Ç$UFå9Ç\Õ4Íò¸#ïwoöF í^ý(¸XvCIœ¯ËÖ¢Ú_æ8>µ2²(O÷N}©²6Ö. ±ÇOjc›•ÁïÚ¡p n#qÁ=©ÄbCÈíD¸Ã –>ƒÒ‹O(¯ØV<ç°©Î1 dQÖ‚ *–`<ØÔ )yq»¡É©°ËfPG=F8ÅG"Ãfs’ç æ¢û`\¬cåbÒ°u/YÙ£‰çE`2rO°I\,Í9%ŠÌNÎrk–ÖõÈk^+žþs®è`Æ6ç'ߚ͵µyÈcÏ­S²ZŽ<­ØÖ¸ñ£G+(F;Wg8ªQÄOZ»öe†ß¦j4\ô¬î{XzQŒnÅ ¤’Ù¾Ç$Ý€§Ú¯ÝFcÐ\㨣¹®"Vб›á3¶æå±žE*sö¨‡µKá4n]ŽîµOÄŒ’ß/–á”/Q[_ß<>VÌpI«ÊÞŒbž8V“Öâ*ÁÓL\äž)Ýòi(9¤6„x5Á-898ÅUÜI«Ž›’'˜ HeÂH‘ØBã­Kh"’Ô+}kKQuM!cÇÌÀ`Õ¬Ý`SƒÈÍЗ°bÉ’ œL}Hбäv­KfŒî‘¾‚¯ß6ÈUGqš\Ãözœdñ˜/ñw¦ÍKts;TC©­ Ú³±±jó_ưðÞ#ÏùkŸ×5Z&‚ì €ËÍ[Š@×0¦íáalõëK:„»C„PâE„P¹@²˜¢-åç#wSõ¦­¤†¥¸*%Iǽ]ŽB€c§qHÒœTŠFÁójТdš¾Ó¹ä`T.KÍ+›{4U’Ôí¬T©­XH1ŒÓf·W(¢äºWWEHïå†-‘’ìç<ÖÆâ U‚Ü9rOÞ'šÅšÔ $T òƒLɦž§¢ÃuÌ­£ž£u^IŠã^c ̰¶cv_¥t6ž Fˆ-ÆwôXè6’“èry2:íÜxuo”VËGÀ•­4˜Œ8`éá10y=ê)[$–$è)Ѫcvá€9<Ð1äì]Û²Ob». $~ x•q埨9ÅH?!çŽ)C’ÙÀÇJaM«7.z⬠¢=™ü…" Áe$ǧJB+®v““ŒzÒžqßµJı8lvǵ* È#¨Îi „»4„ìç¥I ä–98õéNÉ`B®yÆâ1a#s·*?ŸôíL+®üœõÍL<–]ø Ѝ2\pÖ„Vî˽W*8ù{Ð +n~•e#„äöïD@²•lexõ&˜áãë ø§rlK,@.@€•N¨ÚO-а“îUH§)+@= b3j¹\ ·==*db Uƒ‘Ç4¬Ìç czS‘b_)q×4~|.Hê*-Œñ’Ç-Û'{ÔžCùåc‚déǵ:ñ^;®ªsÇ¥U òHÛ†1Œã¡«žfèy÷¨B’J¬€ñžhVfƒ PrG­ ¥ÛþY¨ù)¬|ÉT))‚7v8ô¦É½°÷m^TñÞ˜$ò~E$ïà“Ûñôªí͹‚…<;ÔrI´ T.zŸj­q?–Aç¨<Ö6§®ÙÙÁûÙJæ'œþì#VYJ<Æ&6ëÏ"²u]vÇN…Cº°ÁÀÈÉÍrz¯ŒÅÕÁKLH1¸ŽÓÿ¯\UýõÅö d™ËÓKQì®ÎÓ[ñBäé2Äsó±ÁävÅrŸc–ë–$眞i.ʸéSÁ«¬k°ÇÓÒ¢N]®HZÒºQŒîëWl#1†Žx¡uKiÊ}êh§‰ÏÊàÖR”šÔKdâÉîú?b´g±Èª Wtö r¹¤Ê‰oR}÷VðçŒÖ˜ÙöcŽÃ¥fÙÅö½i‹ ªV»ÄN ¬§ÑÞìδ--Î  ¿¨¾Ò‹á5Ÿbá.½hÞÃæùÂ…ëOaÇVq÷'3±ÏzOj}Çú÷Ç­D:ÖÈÂ[—à8”8#­^ºbÏŒ»pØ ŠÎŒüÀÖ…õÂʨªîHç¨À¦I^ô–`ĸç¥IÊ/Ò¢ºaK¾r:S 9‰y©fÔž¤¿5ºS©§5'@¶ç‚=êщü¡!!8ÝïTà8f¤vžÌ% 2™ïC^ƒ×I-qÊÛs¹{ŠÇ†Ñg/«bº¸e¹ÊP‘X–ÇÊÔþ삃;^Ve;ý>K ŠH¼•Aˆ®Ó^·K¹<ÐÛ‚ñô®ZîÈÀ7ºzSFRƒJäÚf©5™ ÏB+¬Óõ´¸n žÙë\ ðjxæhØ$b™ ž©i)-û¦ažkf Ȫ@-‘þMyž—â•Åšê­5t?#@«Ç.<œÕ¶ò™°ª<²8ÛÔ£\cqTñRª±R¡wÎåúTC+àô튪ÈÊá±÷»U8î öU„.`lðǯ½ ¡Šä1ׯ½4<A' §I„°;Iã8üj8¾óer@8Îi,…p´¦VÈ;8ã¯JA´—#u)ÆW è2rùý1IÃ(ÚAÎyæžnë•?Jíí*‹Àäý}Uhæß„ÉR~\ðqVáŒä|ÎØëÇ"¬$jcó;Ç=êCùeñ†Î?Ò…vVò—#äÓgZ2Ÿ~þõ;¡cêGŽ?láDGå ØÁbzõ¤ Ǹ*çpõîkBÕ¤‹åäsøV{ÂÆ@ÀÇsÞ´cw\ÇÃóéÆi!²Ä1pYÉ9àr*Ävñ»´ržHàäǹ¨âRN H-À©%vu%dz.ÿ=? ¡-«$€Œô©bc’K(ï* g܈<7¶)° ÀÁ#¯ZfBÁÉp:Sİ¥Ôr3TŒäOõ¨Éi]å ã¯çÍ2D 1ÊœŽxªç$9“¨' ب.T–VF,ÝH52:y;·eèJ­=ÒÆF œö ,;‘#;‰ÜOÍÔcÿ­IËù6r2¼âª\9eGv*IÁœŒg#éX7þ(±¶XL÷Å!ä;™qž:~4Ò¥y›o˜âs§šÉÕµë[<ù»Pà}öÉ÷8ëé\F£ñÄ¥t´#'ç’Cãž1ÛÖ¹««û­Bf¹¹”»4ö‹gU©xâ3jñØFævÇÎý¯ë„Ô¯o¯§ó/$gcÜÕ«X ³ ŸZcŽ ÕCW`«]Ñ!ˆÂÍ+“€­S¹Ê¿pqÃv­-˜W*𔢀µ=¸;Á¹¨j.ÓéIš#[ÃH$i¥'æ-нtAK£ïŽ+#M•ì/š¬zÖÃfÒc×-XOâ5§nFQ±‹|‡ýM\¼ß ,§¡iÊ .)uŸõD÷ÍUîÂã¦9™¹ç4Ê|ƒç,9¦µ¹Ì÷-Fx¬Ñ†Ó·ª 㜞ù¬xþïãZö§Ì³`Ñî %ÈÛøPK*ÊwÛ\u¦[ŸÝãÞ¢.ÁJäãÒ …ÎN(f”ݤZ„þU$Orq/!?ÝZÑÿ„kUòƒÉpp<ÆëùT›:‘]Lˆ±æZ®ûy0gŽÕ)šÞgWÆõ84ÿ:A|ò ´XJªHײÔN™+J¤sÁõ¬¹u{·•€Í*¸œåCsNû1Î `Ó%ÊRwHÖ“Y¸˜Z‚qɬ¹§–PC°QéV=eoÎjŠry>ô®Šä©-ÌåCKƒVß !\ QÍ3p¶…|àñSÃy=»ã=G­1¡mÃŽ´‹ Í D^IÀÍ26;_j}vÂTÃíÀÆz×y"Æ„–ÃÜâ¹èæ t»ó‡˜A qþEvѦåù@(Ï?D1D\*È>¸’j@ ‰nFàpÇ…FbP2£SÓò©Ó.]Oolý*@o¸\¤ž§¥&êj‘X¯#8äpELs` êßw'šTù‹2nõ#µ0ÆÌs‚r{Õ¶%$?!d1ïþzÓs¹¶ð3ƒÍ&4WTÁùŽCUƒ6°*F3Ži$ÎýÊG?¥((#'­ © ·;±†&„;NFJñüêo$6XgŒiÐÚop20zÐ0ê éÔCVK.Ö!sü€§ãØxç¹þTÝ›ÎÁ¿…>U’8v c ¦[¯–{ +7PM!“Ébò;“œÒZÛ€áÜ.Óó ÜqKq½R2U‚FqÅ8(r…òË·ê9§ÔC®TdnïŒ vÉ<˜óµ”r¸ëë@V€Î¬¤ñøóŠtq4îÆNBö)ØCüÅÈÁ'$qŽ¿SÚ†#"pƒpËgŒÔGdjÁðY˜nŒb¢’A•ö¯n3LÄ\·šÃa<‘ÀúT`,þ^à¹Æ}G¥Ug).ÎFÞ¤ŽÖ£{“ÎcäŸlÿõÅ4…rô÷1%¹ˆ¯+Ó²/nbXÚK—H$?3œg¸ÿ>õZÿ_†Ñ$–VÇup=…yn¿â;­Zå”;GE'ùúÕX=NÄÞ>”3ZY”b£j̇+é‘Ú¼éåy\³’riÁIëN Šd7qÐÄN©­HmABŽùªq‚ª>µi® ¡€qÚ²ÞÇ¥B1ŒbAšÒÎÊIgd“Æk/]¿QºÌ „Nõ¬À™b8ô§`/ËCiI³«Xa”â i t™ øQ»)¥©…³NĹX#y› ^·ÓÔ`Êyô©ôå4àUô n¦ô3»û5·’aˆcªôé# ª¶` ¥Ç¥MvH,k);³XFÇ©¶ëù TZ±|s{'Ö«ŠÙlc/‰‹Þ‚p¦ŠîÓ§ h4ñHhpéZZJæb}fŽ•«¤ð\ûT²Ñ®ök=·˜~ò· OçE$@á‘°sWíð-Tg¯5‡p¯op× ÷Žk7«±¢Ò754àRR è=j]·BÜñžµ›u|Àác¹»ŠšHä]$™œîÏ"…j Jö9àÄ1¡¦‘†¤=M=>l/~Õ¹ÌYXd‚¤ià¶Ý¹8ô¯@“BY®Á¸÷zæ±.<= RÉdœÔó!´ÑÌmb ÁÀïQã2.A#Pl ö [±Ylb“jƒó0‰n‰à/°¨3Sr”;–Zvò¶E=rl¤ª\€9&¦–Ù¡@ÌFOj`I"eH"¥œÊÀ3Œ˜#_OÿV• ,9 2 widths ! */ j = 7 * i; box = boxCreate(0, 0, w - j, h - j); pixt = pixClipRectangle(pixs, box, NULL); pixd = pixWarpStereoscopic(pixt, 15, 22, 8, 30, -20, 1); snprintf(buf, sizeof(buf), "/tmp/junkpixw.%02d.jpg", i); pixSetChromaSampling(pixd, 0); pixWrite(buf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixDestroy(&pixt); boxDestroy(&box); } pixDestroy(&pixs); pixDisplayMultiple("/tmp/junkpixw*.jpg"); #endif /* -------- Quadratic Vertical Shear --------------*/ #if RUN_QUAD_VERT_SHEAR pixs = pixCreate(501, 501, 32); pixGetDimensions(pixs, &w, &h, NULL); pixSetAll(pixs); pixRenderLineArb(pixs, 0, 30, 500, 30, 5, 0, 0, 255); pixRenderLineArb(pixs, 0, 110, 500, 110, 5, 0, 255, 0); pixRenderLineArb(pixs, 0, 190, 500, 190, 5, 0, 255, 255); pixRenderLineArb(pixs, 0, 270, 500, 270, 5, 255, 0, 0); pixRenderLineArb(pixs, 0, 360, 500, 360, 5, 255, 0, 255); pixRenderLineArb(pixs, 0, 450, 500, 450, 5, 255, 255, 0); bmf = bmfCreate("./fonts", 6); for (i = 0; i < 50; i++) { j = 3 * i; dir = ((i / 2) & 1) ? L_WARP_TO_RIGHT : L_WARP_TO_LEFT; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; Box *box = boxCreate(0, 0, w - j, h - j); pixt = pixClipRectangle(pixs, box, NULL); pixt2 = pixQuadraticVShear(pixt, dir, 60, -20, op, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%s, %s", dirstr[dir], opstr[op]); pixd = pixAddSingleTextblock(pixt2, bmf, buf, 0xff000000, L_ADD_BELOW, 0); snprintf(buf, sizeof(buf), "/tmp/junkpixvs.%02d.png", i); pixWrite(buf, pixd, IFF_PNG); pixDestroy(&pixd); pixDestroy(&pixt); pixDestroy(&pixt2); boxDestroy(&box); } pixDestroy(&pixs); bmfDestroy(&bmf); pixDisplayMultiple("/tmp/junkpixvs*.png"); #endif /* -------- Linear Horizontal stretching --------------*/ #if RUN_LIN_HORIZ_STRETCH pixs = pixRead("german.png"); bmf = bmfCreate("./fonts", 6); for (k = 0; k < 2; k++) { for (i = 0; i < 25; i++) { index = 25 * k + i; stretch = 10 + 4 * i; if (k == 0) stretch = -stretch; dir = (k == 1) ? L_WARP_TO_RIGHT : L_WARP_TO_LEFT; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; pixt = pixStretchHorizontal(pixs, dir, L_LINEAR_WARP, stretch, op, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%s, %s", dirstr[dir], opstr[op]); pixd = pixAddSingleTextblock(pixt, bmf, buf, 0xff000000, L_ADD_BELOW, 0); snprintf(buf, sizeof(buf), "/tmp/junkpixlhs.%02d.jpg", index); pixWrite(buf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixDestroy(&pixt); } } pixDestroy(&pixs); bmfDestroy(&bmf); pixDisplayMultiple("/tmp/junkpixlhs*.jpg"); #endif /* -------- Quadratic Horizontal stretching --------------*/ #if RUN_QUAD_HORIZ_STRETCH pixs = pixRead("german.png"); bmf = bmfCreate("./fonts", 6); for (k = 0; k < 2; k++) { for (i = 0; i < 25; i++) { index = 25 * k + i; stretch = 10 + 4 * i; if (k == 0) stretch = -stretch; dir = (k == 1) ? L_WARP_TO_RIGHT : L_WARP_TO_LEFT; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; pixt = pixStretchHorizontal(pixs, dir, L_QUADRATIC_WARP, stretch, op, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%s, %s", dirstr[dir], opstr[op]); pixd = pixAddSingleTextblock(pixt, bmf, buf, 0xff000000, L_ADD_BELOW, 0); snprintf(buf, sizeof(buf), "/tmp/junkpixqhs.%02d.jpg", index); pixWrite(buf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixDestroy(&pixt); } } pixDestroy(&pixs); bmfDestroy(&bmf); pixDisplayMultiple("/tmp/junkpixqhs*.jpg"); #endif /* -------- Horizontal Shear --------------*/ #if RUN_HORIZ_SHEAR pixs = pixRead("german.png"); pixGetDimensions(pixs, &w, &h, NULL); bmf = bmfCreate("./fonts", 6); for (i = 0; i < 25; i++) { del = 0.2 / 12.; angle = -0.2 + (i - (i & 1)) * del; angledeg = 180. * angle / 3.14159265; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; if (op == L_SAMPLED) pixt = pixHShear(NULL, pixs, h / 2, angle, L_BRING_IN_WHITE); else pixt = pixHShearLI(pixs, h / 2, angle, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%6.2f degree, %s", angledeg, opstr[op]); pixd = pixAddSingleTextblock(pixt, bmf, buf, 0xff000000, L_ADD_BELOW, 0); snprintf(buf, sizeof(buf), "/tmp/junkpixsh.%02d.jpg", i); pixWrite(buf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixDestroy(&pixt); } pixDestroy(&pixs); bmfDestroy(&bmf); pixDisplayMultiple("/tmp/junkpixsh*.jpg"); #endif /* -------- Vertical Shear --------------*/ #if RUN_VERT_SHEAR pixs = pixRead("german.png"); pixGetDimensions(pixs, &w, &h, NULL); bmf = bmfCreate("./fonts", 6); for (i = 0; i < 25; i++) { del = 0.2 / 12.; angle = -0.2 + (i - (i & 1)) * del; angledeg = 180. * angle / 3.14159265; op = (i & 1) ? L_INTERPOLATED : L_SAMPLED; if (op == L_SAMPLED) pixt = pixVShear(NULL, pixs, w / 2, angle, L_BRING_IN_WHITE); else pixt = pixVShearLI(pixs, w / 2, angle, L_BRING_IN_WHITE); snprintf(buf, sizeof(buf), "%6.2f degree, %s", angledeg, opstr[op]); pixd = pixAddSingleTextblock(pixt, bmf, buf, 0xff000000, L_ADD_BELOW, 0); snprintf(buf, sizeof(buf), "/tmp/junkpixsv.%02d.jpg", i); pixWrite(buf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixDestroy(&pixt); } pixDestroy(&pixs); bmfDestroy(&bmf); pixDisplayMultiple("/tmp/junkpixsv*.jpg"); #endif return 0; } leptonica-1.70/prog/bincompare.c0000644000175000017500000000673512242267050014752 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bincompare.c * * Bitwise comparison of two binary images */ #include "allheaders.h" /* set one of these to 1 */ #define XOR 1 #define SUBTRACT_1_FROM_2 0 #define SUBTRACT_2_FROM_1 0 int main(int argc, char **argv) { l_int32 w, h, d, n; char *filein1, *filein2, *fileout; PIX *pixs1, *pixs2; static char mainName[] = "bincompare"; if (argc != 4) return ERROR_INT(" Syntax: bincompare filein1 filein2 fileout", mainName, 1); filein1 = argv[1]; filein2 = argv[2]; fileout = argv[3]; if ((pixs1 = pixRead(filein1)) == NULL) return ERROR_INT("pixs1 not made", mainName, 1); if ((pixs2 = pixRead(filein2)) == NULL) return ERROR_INT("pixs2 not made", mainName, 1); pixGetDimensions(pixs1, &w, &h, &d); if (d != 1) return ERROR_INT("pixs1 not binary", mainName, 1); pixCountPixels(pixs1, &n, NULL); fprintf(stderr, "Number of fg pixels in file1 = %d\n", n); pixCountPixels(pixs2, &n, NULL); fprintf(stderr, "Number of fg pixels in file2 = %d\n", n); #if XOR fprintf(stderr, "xor: 1 ^ 2\n"); pixRasterop(pixs1, 0, 0, w, h, PIX_SRC ^ PIX_DST, pixs2, 0, 0); pixCountPixels(pixs1, &n, NULL); fprintf(stderr, "Number of fg pixels in XOR = %d\n", n); pixWrite(fileout, pixs1, IFF_PNG); #elif SUBTRACT_1_FROM_2 fprintf(stderr, "subtract: 2 - 1\n"); pixRasterop(pixs1, 0, 0, w, h, PIX_SRC & PIX_NOT(PIX_DST), pixs2, 0, 0); pixCountPixels(pixs1, &n, NULL); fprintf(stderr, "Number of fg pixels in 2 - 1 = %d\n", n); pixWrite(fileout, pixs1, IFF_PNG); #elif SUBTRACT_2_FROM_1 fprintf(stderr, "subtract: 1 - 2\n"); pixRasterop(pixs1, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); pixCountPixels(pixs1, &n, NULL); fprintf(stderr, "Number of fg pixels in 1 - 2 = %d\n", n); pixWrite(fileout, pixs1, IFF_PNG); #else fprintf(stderr, "no comparison selected\n"); #endif return 0; } leptonica-1.70/prog/scaletest2.c0000640000175000017500000002743712242265645014712 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * scaletest2.c * * Tests scale-to-gray, unsharp masking, smoothing, and color scaling */ #include "allheaders.h" #define DISPLAY 0 /* set to 1 to see the results */ int main(int argc, char **argv) { PIX *pixs; l_int32 d; static char mainName[] = "scaletest2"; if (argc != 2) return ERROR_INT(" Syntax: scaletest2 filein", mainName, 1); if ((pixs = pixRead(argv[1])) == NULL) return ERROR_INT("pixs not made", mainName, 1); d = pixGetDepth(pixs); #if 1 /* Integer scale-to-gray functions */ if (d == 1) { PIX *pixd; pixd = pixScaleToGray2(pixs); pixWrite("/tmp/s2g_2x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray3(pixs); pixWrite("/tmp/s2g_3x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray4(pixs); pixWrite("/tmp/s2g_4x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray6(pixs); pixWrite("/tmp/s2g_6x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray8(pixs); pixWrite("/tmp/s2g_8x", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray16(pixs); pixWrite("/tmp/s2g_16x", pixd, IFF_PNG); pixDestroy(&pixd); } #endif #if 1 /* Various non-integer scale-to-gray, compared with * with different ways of getting similar results */ if (d == 1) { PIX *pixt, *pixd; pixd = pixScaleToGray8(pixs); pixWrite("/tmp/s2g_8.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray(pixs, 0.124); pixWrite("/tmp/s2g_124.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd = pixScaleToGray(pixs, 0.284); pixWrite("/tmp/s2g_284.png", pixd, IFF_PNG); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleBySampling(pixt, 284./250., 284./250.); pixWrite("/tmp/s2g_284.2.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleGrayLI(pixt, 284./250., 284./250.); pixWrite("/tmp/s2g_284.3.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleBinary(pixs, 284./250., 284./250.); pixd = pixScaleToGray4(pixt); pixWrite("/tmp/s2g_284.4.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleGrayLI(pixt, 0.49, 0.49); pixWrite("/tmp/s2g_42.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleToGray4(pixs); pixd = pixScaleSmooth(pixt, 0.49, 0.49); pixWrite("/tmp/s2g_4sm.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixt = pixScaleBinary(pixs, .16/.125, .16/.125); pixd = pixScaleToGray8(pixt); pixWrite("/tmp/s2g_16.png", pixd, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); pixd = pixScaleToGray(pixs, .16); pixWrite("/tmp/s2g_16.2.png", pixd, IFF_PNG); pixDestroy(&pixd); } #endif #if 1 /* Antialiased (smoothed) reduction, along with sharpening */ if (d != 1) { PIX *pixt1, *pixt2; startTimer(); pixt1 = pixScaleSmooth(pixs, 0.154, 0.154); fprintf(stderr, "fast scale: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt1, 0, 0, "smooth scaling", DISPLAY); pixWrite("/tmp/smooth1.png", pixt1, IFF_PNG); pixt2 = pixUnsharpMasking(pixt1, 1, 0.3); pixWrite("/tmp/smooth2.png", pixt2, IFF_PNG); pixDisplayWithTitle(pixt2, 200, 0, "sharp scaling", DISPLAY); pixDestroy(&pixt1); pixDestroy(&pixt2); } #endif #if 1 /* Test a large range of scale-to-gray reductions */ if (d == 1) { l_int32 i; l_float32 scale; PIX *pixd; for (i = 2; i < 15; i++) { scale = 1. / (l_float32)i; startTimer(); pixd = pixScaleToGray(pixs, scale); fprintf(stderr, "Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 75 * i, 100, "scaletogray", DISPLAY); pixDestroy(&pixd); } for (i = 8; i < 14; i++) { scale = 1. / (l_float32)(2 * i); startTimer(); pixd = pixScaleToGray(pixs, scale); fprintf(stderr, "Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 100 * i, 600, "scaletogray", DISPLAY); pixDestroy(&pixd); } } #endif #if 1 /* Test the same range of scale-to-gray mipmap reductions */ if (d == 1) { l_int32 i; l_float32 scale; PIX *pixd; for (i = 2; i < 15; i++) { scale = 1. / (l_float32)i; startTimer(); pixd = pixScaleToGrayMipmap(pixs, scale); fprintf(stderr, "Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 75 * i, 100, "scale mipmap", DISPLAY); pixDestroy(&pixd); } for (i = 8; i < 12; i++) { scale = 1. / (l_float32)(2 * i); startTimer(); pixd = pixScaleToGrayMipmap(pixs, scale); fprintf(stderr, "Time for scale %7.3f: %7.3f sec\n", scale, stopTimer()); pixDisplayWithTitle(pixd, 100 * i, 600, "scale mipmap", DISPLAY); pixDestroy(&pixd); } } #endif #if 1 /* Test several methods for antialiased reduction, * along with sharpening */ if (d != 1) { PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6, *pixt7; l_float32 SCALING = 0.27; l_int32 SIZE = 7; l_int32 smooth; l_float32 FRACT = 1.0; smooth = SIZE / 2; startTimer(); pixt1 = pixScaleSmooth(pixs, SCALING, SCALING); fprintf(stderr, "fast scale: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt1, 0, 0, "smooth scaling", DISPLAY); pixWrite("/tmp/sm_1.png", pixt1, IFF_PNG); pixt2 = pixUnsharpMasking(pixt1, 1, 0.3); pixDisplayWithTitle(pixt2, 150, 0, "sharpened scaling", DISPLAY); startTimer(); pixt3 = pixBlockconv(pixs, smooth, smooth); pixt4 = pixScaleBySampling(pixt3, SCALING, SCALING); fprintf(stderr, "slow scale: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt4, 200, 200, "sampled scaling", DISPLAY); pixWrite("/tmp/sm_2.png", pixt4, IFF_PNG); startTimer(); pixt5 = pixUnsharpMasking(pixs, smooth, FRACT); pixt6 = pixBlockconv(pixt5, smooth, smooth); pixt7 = pixScaleBySampling(pixt6, SCALING, SCALING); fprintf(stderr, "very slow scale + sharp: %5.3f sec\n", stopTimer()); pixDisplayWithTitle(pixt7, 500, 200, "sampled scaling", DISPLAY); pixWrite("/tmp/sm_3.jpg", pixt7, IFF_JFIF_JPEG); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixDestroy(&pixt7); } #endif #if 1 /* Test the color scaling function, comparing the * special case of scaling factor 2.0 with the * general case. */ if (d == 32) { PIX *pix1, *pix2, *pixd; NUMA *nar, *nag, *nab, *naseq; GPLOT *gplot; startTimer(); pix1 = pixScaleColorLI(pixs, 2.00001, 2.0); fprintf(stderr, " Time with regular LI: %7.3f\n", stopTimer()); pixWrite("/tmp/color1.jpg", pix1, IFF_JFIF_JPEG); startTimer(); pix2 = pixScaleColorLI(pixs, 2.0, 2.0); fprintf(stderr, " Time with 2x LI: %7.3f\n", stopTimer()); pixWrite("/tmp/color2.jpg", pix2, IFF_JFIF_JPEG); pixd = pixAbsDifference(pix1, pix2); pixGetColorHistogram(pixd, 1, &nar, &nag, &nab); naseq = numaMakeSequence(0., 1., 256); gplot = gplotCreate("/tmp/plot_absdiff", GPLOT_X11, "Number vs diff", "diff", "number"); gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y); gplotAddPlot(gplot, naseq, nar, GPLOT_POINTS, "red"); gplotAddPlot(gplot, naseq, nag, GPLOT_POINTS, "green"); gplotAddPlot(gplot, naseq, nab, GPLOT_POINTS, "blue"); gplotMakeOutput(gplot); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); numaDestroy(&naseq); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); gplotDestroy(&gplot); } #endif #if 1 /* Test the gray LI scaling function, comparing the * special cases of scaling factor 2.0 and 4.0 with the * general case */ if (d == 8 || d == 32) { PIX *pixt, *pix0, *pix1, *pix2, *pixd; NUMA *nagray, *naseq; GPLOT *gplot; if (d == 8) pixt = pixClone(pixs); else pixt = pixConvertRGBToGray(pixs, 0.33, 0.34, 0.33); pix0 = pixScaleGrayLI(pixt, 0.5, 0.5); #if 1 startTimer(); pix1 = pixScaleGrayLI(pix0, 2.00001, 2.0); fprintf(stderr, " Time with regular LI 2x: %7.3f\n", stopTimer()); startTimer(); pix2 = pixScaleGrayLI(pix0, 2.0, 2.0); fprintf(stderr, " Time with 2x LI: %7.3f\n", stopTimer()); #else startTimer(); pix1 = pixScaleGrayLI(pix0, 4.00001, 4.0); fprintf(stderr, " Time with regular LI 4x: %7.3f\n", stopTimer()); startTimer(); pix2 = pixScaleGrayLI(pix0, 4.0, 4.0); fprintf(stderr, " Time with 2x LI: %7.3f\n", stopTimer()); #endif pixWrite("/tmp/gray1", pix1, IFF_JFIF_JPEG); pixWrite("/tmp/gray2", pix2, IFF_JFIF_JPEG); pixd = pixAbsDifference(pix1, pix2); nagray = pixGetGrayHistogram(pixd, 1); naseq = numaMakeSequence(0., 1., 256); gplot = gplotCreate("/tmp/g_absdiff", GPLOT_X11, "Number vs diff", "diff", "number"); gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y); gplotAddPlot(gplot, naseq, nagray, GPLOT_POINTS, "gray"); gplotMakeOutput(gplot); pixDestroy(&pixt); pixDestroy(&pix0); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); numaDestroy(&naseq); numaDestroy(&nagray); gplotDestroy(&gplot); } #endif pixDestroy(&pixs); return 0; } leptonica-1.70/prog/chars-6.tif0000444000175000017500000000350412226572724014434 0ustar dandanII*†& t ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ £ö@ð.ä3¹†@GÈ+Á W3 Èh‚1ȵJÈ(z!£lr8†| ]ÈB ‚ä_h¿ô@Žê“d}Qy… ¦º ‚10?Ñ|Òn’u¦î´›O.Ú.ÚÈᔎ*A7Aÿ¤¿×épÄ]OOSéké_Òý}iVÞC@ú_¿¯ýø!ãë’áÒßzô…m/ò ¸eàW¶•PÕÁÿý$¼¬é‡_éülRÑsñúý$—‹R±Xv»M{4Ÿ½kýr;vhI†ÚøømMh¾Ã.Üzý"!qzo¼Ø‚)ü†tÒÈj†A¯×ôž·§I[Ã/ÝRo¿ÈmŽ—úèAÿÓ¥ú_¶—â•ú_ú[ÿ`¯¶+ÿKH†òõô² îA‡ÿIaëQ4Ý'ô­,‚î“iV’]§÷Õ6“ †–´¯´´PÒÛJÒVÒKÚø†¬S<›þ©ŠhŠ)ŠIŠ b" ÕƒZCB¢""""a¡Ò¡ÖÒ×é!Ý!ÇÇÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈŽC 7†[iˆ>C 5øƒ!–ä †Â8dЃ†CAÈbdæCÌ‚L‚Lžó!³| öBa !6L†„Ù0Ž †fxù¨"èœ Áê@ÐlIö48ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿù|!Œû yA²ÈÁh!¯¬‚‹ h7 Ür„ Ùª© § ꥷþpèŽ Ÿ!’?ýh"}zýÿn¿Ä}ý-ýÿþ›¢/=Ùd6FC>d4fC)È>N2 9±Èeñ ãšÈ(²‡ ÃÈ1™“ÇÈ?9; ðN>È/Oÿ\B/=y‚/ š‹çÁåpP]p¥aø®Eæ ˜Dv,*h¼Ð0¡µN–цÿý&é».tƒ¥j“Q#Ì8}ÃfÃ@bGšM†p“A³Ž“¨pá„Ða(h Ó ¡ÿ·þ“† &?étÓÓ¤Ý6¾8† ®µÿô›éÒ¿þ¿Òúëútº¿Ý]5aºŠIm# ÄH3wþ‡ÿüWÿïÿϺäOt—è¾Òü#ÿ˜iÂ)ÿÿÿöÿuµ×u¦ô’ Wè/ÿö+ÿoÿÿÿÿ뫤ý/Äý+½½—öÿþý+òÇþö7ät¿ÿ¯O¯×þßÿº]þ­Ôi[DßÿíS C0í E;e¾‰Áûÿᥠ$Ø^Ò‡a}¥n’ÿý†{Š lpØ ƒÂAá70ƒ8a 1QLAáñ#¦ï„›t?ÿe͈Ž""""2ᥡÇï ?ëÿÚ¿ÿá‚ÿM¥÷¤—«uˆ°Ò¯„v($`ƒ¬DDÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ€€FF~4<(ÀÀleptonica-1.70/prog/makefile.mingw0000640000175000017500000006334312267665646015325 0ustar dandan#/*====================================================================* # - Copyright (C) 2001 Leptonica. All rights reserved. # - # - Redistribution and use in source and binary forms, with or without # - modification, are permitted provided that the following conditions # - are met: # - 1. Redistributions of source code must retain the above copyright # - notice, this list of conditions and the following disclaimer. # - 2. Redistributions in binary form must reproduce the above # - copyright notice, this list of conditions and the following # - disclaimer in the documentation and/or other materials # - provided with the distribution. # - # - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY # - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY # - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # *====================================================================*/ # Makefile.mingw (cross-compiled for windows) # # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # NOTE: This file may not be up to date on the source files that # are listed here. For the current set of source files, see: # makefile # !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! # # For a nodebug version: make # For a debug version: make DEBUG=yes # For a shared library version: make SHARED=yes # With nonstandard library directories: # make EXTRALIBS="-L" # With nonstandard header directories # make EXTRAINCLUDES="-I" # # To remove all executables: make clean # # This is EXPERIMENTAL. It compiles and links, but is not very neat, # because I haven't built executables for windows in any environment # except cygwin. It makes optimized executables with static # libraries; ignore the 'SHARED' lines. This should eventually # be fixed up, but for now, SHARED doesn't work. Also, if # you make with DEBUG=yes, you will get very large .o files. # # To build .exe windows programs, you need 4 libraries: # jpeg, png, zlib, tiff # You can get them from the gnuwin32 site on sourceforge: # http://gnuwin32.sourceforge.net/packages/netpbm.htm # Download the 4 libraries as 'developer' packages, which give # you the library binaries with the header files. # The header files go in: # /usr/local/include/mingw/ # and the four libraries go in # /usr/local/lib/mingw/ # The four libraries you need are specified in the ALL_LIBS definition. # It seems that you also need to download dll files to get # the programs to run (e.g., jpeg2b.dll). # # Libraries are built into a binary tree with its root in the # parent directory ROOT_DIR = .. LIB_NODEBUG_DIR = $(ROOT_DIR)/lib/nodebug LIB_DEBUG_DIR = $(ROOT_DIR)/lib/debug LIB_SHARED_DIR = $(ROOT_DIR)/lib/shared # Include files are found within the same tree IMAGELIB_INCL = $(ROOT_DIR)/src CC = i586-mingw32msvc-gcc -ansi -Werror -D_BSD_SOURCE -DANSI #CC = i586-mingw32msvc-g++ -Werror -D_BSD_SOURCE ifdef SHARED LIB_DIR = $(LIB_SHARED_DIR) OPTIMIZE = -O2 else ifdef DEBUG LIB_DIR = $(LIB_DEBUG_DIR) OPTIMIZE = -g else LIB_DIR = $(LIB_NODEBUG_DIR) OPTIMIZE = -O2 endif endif OPTIONS = INCLUDES = -I$(IMAGELIB_INCL) -I/usr/local/include/mingw CFLAGS = $(OPTIMIZE) $(OPTIONS) CPPFLAGS = $(INCLUDES) -DL_LITTLE_ENDIAN #CPPFLAGS = $(INCLUDES) -DL_BIG_ENDIAN LDFLAGS += -L$(LIB_DIR) -L/usr/local/lib/mingw -L/usr/lib $(EXTRALIBS) #LDFLAGS += -L$(LIB_DIR) -L/usr/X11R6/lib -L/usr/local/lib -L/usr/lib $(EXTRALIBS) ifdef SHARED LEPTLIB = $(LIB_DIR)/liblept.so else LEPTLIB = $(LIB_DIR)/liblept.a endif ALL_LIBS = $(LEPTLIB) /usr/local/lib/mingw/libpng.a /usr/local/lib/mingw/libz.a /usr/local/lib/mingw/libtiff.dll.a /usr/local/lib/mingw/libjpeg.dll.a -lm ######################################################################### SRC = adaptnorm_reg.c affine_reg.c alphaclean_reg.c \ bilinear_reg.c binarize_reg.c \ binmorph1_reg.c binmorph2_reg.c \ binmorph3_reg.c binmorph4_reg.c binmorph5_reg.c \ blend_reg.c blend2_reg.c \ ccthin1_reg.c ccthin2_reg.c \ cmapquant_reg.c colorquant_reg.c \ colorseg_reg.c compfilter_reg.c \ conncomp_reg.c conversion_reg.c \ distance_reg.c dwamorph1_reg.c \ dwamorph2_reg.c enhance_reg.c \ equal_reg.c expand_reg.c extrema_reg.c \ fhmtauto_reg.c flipdetect_reg.c \ fmorphauto_reg.c fpix_reg.c gifio_reg.c \ grayfill_reg.c graymorph_reg.c grayquant_reg.c \ hardlight_reg.c heap_reg.c ioformats_reg.c \ kernel_reg.c locminmax_reg.c \ logicops_reg.c lowaccess_reg.c \ maze_reg.c morphseq_reg.c numa_reg.c \ paint_reg.c paintmask_reg.c \ pixa1_reg.c pixa2_reg.c \ pixadisp_reg.c pixalloc_reg.c \ pixcomp_reg.c pixmem_reg.c \ pixserial_reg.c pixtile_reg.c \ projective_reg.c psioseg_reg.c \ pta_reg.c ptra1_reg.c \ ptra2_reg.c rank_reg.c \ rasterop_reg.c rasteropip_reg.c \ rotate1_reg.c rotate2_reg.c rotateorth_reg.c \ scale_reg.c selio_reg.c \ shear_reg.c skew_reg.c \ smallpix_reg.c smoothedge_reg.c splitcomp_reg.c \ string_reg.c subpixel_reg.c threshnorm_reg.c \ warper_reg.c writetext_reg.c xformbox_reg.c \ adaptmaptest.c \ arithtest.c barcodetest.c \ baselinetest.c \ bincompare.c blendcmaptest.c \ blendtest1.c buffertest.c \ ccbordtest.c cctest1.c \ colormorphtest.c colorsegtest.c \ colorspacetest.c comparepages.c \ comparetest.c contrasttest.c \ convertfilestops.c convertformat.c \ convertsegfilestops.c converttogray.c \ converttops.c convolvetest.c cornertest.c \ croptext.c digitprep1.c dithertest.c \ dwalineargen.c edgetest.c falsecolortest.c \ fcombautogen.c fhmtautogen.c fileinfo.c \ findpattern1.c findpattern2.c findpattern3.c \ flipselgen.c \ fmorphautogen.c gammatest.c \ genfonts.c graphicstest.c graymorphtest.c \ histotest.c iotest.c inserttest.c \ jbcorrelation.c jbrankhaus.c jbwords.c \ lineremoval.c listtest.c \ maketile.c misctest1.c \ modifyhuesat.c morphtest1.c mtifftest.c \ numaranktest.c otsutest.c \ pagesegtest1.c pagesegtest2.c pagesegtest3.c \ partitiontest.c pixaatest.c \ plottest.c \ printimage.c printsplitimage.c printtiff.c \ ranktest.c reducetest.c \ removecmap.c renderfonts.c \ rotatefastalt.c rotateorthtest1.c \ rotatetest1.c runlengthtest.c \ scaletest1.c scaletest2.c \ seedfilltest.c sharptest.c \ sheartest.c showedges.c \ skewtest.c snapcolortest.c \ sorttest.c splitimage2pdf.c \ trctest.c \ viewertest.c watershedtest.c \ wordsinorder.c xtractprotos.c xvdisp.c # Remove the .o files from these on clean SRC2 = dwalinear.3.c dwalinearlow.3.c ###################################################################### all: $(SRC:%.c=%) debian: binarize_reg \ binmorph1_reg binmorph2_reg binmorph3_reg \ binmorph4_reg binmorph5_reg \ blend_reg blend2_reg buffertest comparetest \ cctest1 ccthin1_reg \ colormorphtest colorquant_reg colorspacetest \ conncomp_reg conversion_reg \ convertfilestops convertformat \ convertsegfilestops converttops distance_reg \ dithertest edgetest enhance_reg \ equal_reg expand_reg extrema_reg \ fhmtauto_reg fhmtautogen fileinfo \ flipdetect_reg flipselgen fmorphauto_reg fmorphautogen \ fpix_reg gammatest graphicstest grayfill_reg \ graymorph_reg \ grayquant_reg hardlight_reg heap_reg histotest ioformats_reg \ jbcorrelation jbrankhaus jbwords \ kernel_reg lineremoval locminmax_reg \ lowaccess_reg maze_reg numaranktest numa_reg pagesegtest1 \ pagesegtest2 pagesegtest3 paint_reg paintmask_reg \ partitiontest pixalloc_reg pixmem_reg plottest \ printimage printsplitimage printtiff \ ranktest rank_reg removecmap rotate1_reg rotate2_reg \ scale_reg selio_reg \ sharptest shear_reg smallpix_reg \ splitcomp_reg splitimage2pdf \ viewertest warper_reg writetext_reg xtractprotos ###################################################################### adaptnorm_reg: adaptnorm_reg.o $(LEPTLIB) $(CC) -o adaptnorm_reg adaptnorm_reg.o $(ALL_LIBS) $(EXTRALIBS) affine_reg: affine_reg.o $(LEPTLIB) $(CC) -o affine_reg affine_reg.o $(ALL_LIBS) $(EXTRALIBS) alphaclean_reg: alphaclean_reg.o $(LEPTLIB) $(CC) -o alphaclean_reg alphaclean_reg.o $(ALL_LIBS) $(EXTRALIBS) bilinear_reg: bilinear_reg.o $(LEPTLIB) $(CC) -o bilinear_reg bilinear_reg.o $(ALL_LIBS) $(EXTRALIBS) binarize_reg: binarize_reg.o $(LEPTLIB) $(CC) -o binarize_reg binarize_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph1_reg: binmorph1_reg.o $(LEPTLIB) $(CC) -o binmorph1_reg binmorph1_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph2_reg: binmorph2_reg.o $(LEPTLIB) $(CC) -o binmorph2_reg binmorph2_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph3_reg: binmorph3_reg.o $(LEPTLIB) $(CC) -o binmorph3_reg binmorph3_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph4_reg: binmorph4_reg.o $(LEPTLIB) $(CC) -o binmorph4_reg binmorph4_reg.o $(ALL_LIBS) $(EXTRALIBS) binmorph5_reg: binmorph5_reg.o $(LEPTLIB) $(CC) -o binmorph5_reg binmorph5_reg.o $(ALL_LIBS) $(EXTRALIBS) blend_reg: blend_reg.o $(LEPTLIB) $(CC) -o blend_reg blend_reg.o $(ALL_LIBS) $(EXTRALIBS) blend2_reg: blend2_reg.o $(LEPTLIB) $(CC) -o blend2_reg blend2_reg.o $(ALL_LIBS) $(EXTRALIBS) ccthin1_reg: ccthin1_reg.o $(LEPTLIB) $(CC) -o ccthin1_reg ccthin1_reg.o $(ALL_LIBS) $(EXTRALIBS) ccthin2_reg: ccthin2_reg.o $(LEPTLIB) $(CC) -o ccthin2_reg ccthin2_reg.o $(ALL_LIBS) $(EXTRALIBS) cmapquant_reg: cmapquant_reg.o $(LEPTLIB) $(CC) -o cmapquant_reg cmapquant_reg.o $(ALL_LIBS) $(EXTRALIBS) colorquant_reg: colorquant_reg.o $(LEPTLIB) $(CC) -o colorquant_reg colorquant_reg.o $(ALL_LIBS) $(EXTRALIBS) colorseg_reg: colorseg_reg.o $(LEPTLIB) $(CC) -o colorseg_reg colorseg_reg.o $(ALL_LIBS) $(EXTRALIBS) compfilter_reg: compfilter_reg.o $(LEPTLIB) $(CC) -o compfilter_reg compfilter_reg.o $(ALL_LIBS) $(EXTRALIBS) conncomp_reg: conncomp_reg.o $(LEPTLIB) $(CC) -o conncomp_reg conncomp_reg.o $(ALL_LIBS) $(EXTRALIBS) conversion_reg: conversion_reg.o $(LEPTLIB) $(CC) -o conversion_reg conversion_reg.o $(ALL_LIBS) $(EXTRALIBS) distance_reg: distance_reg.o $(LEPTLIB) $(CC) -o distance_reg distance_reg.o $(ALL_LIBS) $(EXTRALIBS) dwamorph1_reg: dwamorph1_reg.o dwalinear.3.o dwalinearlow.3.o $(LEPTLIB) $(CC) -o dwamorph1_reg dwamorph1_reg.o dwalinear.3.o dwalinearlow.3.o $(ALL_LIBS) $(EXTRALIBS) dwamorph2_reg: dwamorph2_reg.o dwalinear.3.o dwalinearlow.3.o $(LEPTLIB) $(CC) -o dwamorph2_reg dwamorph2_reg.o dwalinear.3.o dwalinearlow.3.o $(ALL_LIBS) $(EXTRALIBS) enhance_reg: enhance_reg.o $(LEPTLIB) $(CC) -o enhance_reg enhance_reg.o $(ALL_LIBS) $(EXTRALIBS) equal_reg: equal_reg.o $(LEPTLIB) $(CC) -o equal_reg equal_reg.o $(ALL_LIBS) $(EXTRALIBS) expand_reg: expand_reg.o $(LEPTLIB) $(CC) -o expand_reg expand_reg.o $(ALL_LIBS) $(EXTRALIBS) extrema_reg: extrema_reg.o $(LEPTLIB) $(CC) -o extrema_reg extrema_reg.o $(ALL_LIBS) $(EXTRALIBS) fhmtauto_reg: fhmtauto_reg.o $(LEPTLIB) $(CC) -o fhmtauto_reg fhmtauto_reg.o $(ALL_LIBS) $(EXTRALIBS) flipdetect_reg: flipdetect_reg.o $(LEPTLIB) $(CC) -o flipdetect_reg flipdetect_reg.o $(ALL_LIBS) $(EXTRALIBS) fmorphauto_reg: fmorphauto_reg.o $(LEPTLIB) $(CC) -o fmorphauto_reg fmorphauto_reg.o $(ALL_LIBS) $(EXTRALIBS) fpix_reg: fpix_reg.o $(LEPTLIB) $(CC) -o fpix_reg fpix_reg.o $(ALL_LIBS) $(EXTRALIBS) gifio_reg: gifio_reg.o $(LEPTLIB) $(CC) -o gifio_reg gifio_reg.o $(ALL_LIBS) $(EXTRALIBS) grayfill_reg: grayfill_reg.o $(LEPTLIB) $(CC) -o grayfill_reg grayfill_reg.o $(ALL_LIBS) $(EXTRALIBS) graymorph_reg: graymorph_reg.o $(LEPTLIB) $(CC) -o graymorph_reg graymorph_reg.o $(ALL_LIBS) $(EXTRALIBS) grayquant_reg: grayquant_reg.o $(LEPTLIB) $(CC) -o grayquant_reg grayquant_reg.o $(ALL_LIBS) $(EXTRALIBS) hardlight_reg: hardlight_reg.o $(LEPTLIB) $(CC) -o hardlight_reg hardlight_reg.o $(ALL_LIBS) $(EXTRALIBS) heap_reg: heap_reg.o $(LEPTLIB) $(CC) -o heap_reg heap_reg.o $(ALL_LIBS) $(EXTRALIBS) ioformats_reg: ioformats_reg.o $(LEPTLIB) $(CC) -o ioformats_reg ioformats_reg.o $(ALL_LIBS) $(EXTRALIBS) kernel_reg: kernel_reg.o $(LEPTLIB) $(CC) -o kernel_reg kernel_reg.o $(ALL_LIBS) $(EXTRALIBS) locminmax_reg: locminmax_reg.o $(LEPTLIB) $(CC) -o locminmax_reg locminmax_reg.o $(ALL_LIBS) $(EXTRALIBS) logicops_reg: logicops_reg.o $(LEPTLIB) $(CC) -o logicops_reg logicops_reg.o $(ALL_LIBS) $(EXTRALIBS) lowaccess_reg: lowaccess_reg.o $(LEPTLIB) $(CC) -o lowaccess_reg lowaccess_reg.o $(ALL_LIBS) $(EXTRALIBS) maze_reg: maze_reg.o $(LEPTLIB) $(CC) -o maze_reg maze_reg.o $(ALL_LIBS) $(EXTRALIBS) morphseq_reg: morphseq_reg.o $(LEPTLIB) $(CC) -o morphseq_reg morphseq_reg.o $(ALL_LIBS) $(EXTRALIBS) numa_reg: numa_reg.o $(LEPTLIB) $(CC) -o numa_reg numa_reg.o $(ALL_LIBS) $(EXTRALIBS) paint_reg: paint_reg.o $(LEPTLIB) $(CC) -o paint_reg paint_reg.o $(ALL_LIBS) $(EXTRALIBS) paintmask_reg: paintmask_reg.o $(LEPTLIB) $(CC) -o paintmask_reg paintmask_reg.o $(ALL_LIBS) $(EXTRALIBS) pixa1_reg: pixa1_reg.o $(LEPTLIB) $(CC) -o pixa1_reg pixa1_reg.o $(ALL_LIBS) $(EXTRALIBS) pixa2_reg: pixa2_reg.o $(LEPTLIB) $(CC) -o pixa2_reg pixa2_reg.o $(ALL_LIBS) $(EXTRALIBS) pixadisp_reg: pixadisp_reg.o $(LEPTLIB) $(CC) -o pixadisp_reg pixadisp_reg.o $(ALL_LIBS) $(EXTRALIBS) pixalloc_reg: pixalloc_reg.o $(LEPTLIB) $(CC) -o pixalloc_reg pixalloc_reg.o $(ALL_LIBS) $(EXTRALIBS) pixcomp_reg: pixcomp_reg.o $(LEPTLIB) $(CC) -o pixcomp_reg pixcomp_reg.o $(ALL_LIBS) $(EXTRALIBS) pixmem_reg: pixmem_reg.o $(LEPTLIB) $(CC) -o pixmem_reg pixmem_reg.o $(ALL_LIBS) $(EXTRALIBS) pixserial_reg: pixserial_reg.o $(LEPTLIB) $(CC) -o pixserial_reg pixserial_reg.o $(ALL_LIBS) $(EXTRALIBS) pixtile_reg: pixtile_reg.o $(LEPTLIB) $(CC) -o pixtile_reg pixtile_reg.o $(ALL_LIBS) $(EXTRALIBS) projective_reg: projective_reg.o $(LEPTLIB) $(CC) -o projective_reg projective_reg.o $(ALL_LIBS) $(EXTRALIBS) psioseg_reg: psioseg_reg.o $(LEPTLIB) $(CC) -o psioseg_reg psioseg_reg.o $(ALL_LIBS) $(EXTRALIBS) pta_reg: pta_reg.o $(LEPTLIB) $(CC) -o pta_reg pta_reg.o $(ALL_LIBS) $(EXTRALIBS) ptra1_reg: ptra1_reg.o $(LEPTLIB) $(CC) -o ptra1_reg ptra1_reg.o $(ALL_LIBS) $(EXTRALIBS) ptra2_reg: ptra2_reg.o $(LEPTLIB) $(CC) -o ptra2_reg ptra2_reg.o $(ALL_LIBS) $(EXTRALIBS) rank_reg: rank_reg.o $(LEPTLIB) $(CC) -o rank_reg rank_reg.o $(ALL_LIBS) $(EXTRALIBS) rasterop_reg: rasterop_reg.o $(LEPTLIB) $(CC) -o rasterop_reg rasterop_reg.o $(ALL_LIBS) $(EXTRALIBS) rasteropip_reg: rasteropip_reg.o $(LEPTLIB) $(CC) -o rasteropip_reg rasteropip_reg.o $(ALL_LIBS) $(EXTRALIBS) rotate1_reg: rotate1_reg.o $(LEPTLIB) $(CC) -o rotate1_reg rotate1_reg.o $(ALL_LIBS) $(EXTRALIBS) rotate2_reg: rotate2_reg.o $(LEPTLIB) $(CC) -o rotate2_reg rotate2_reg.o $(ALL_LIBS) $(EXTRALIBS) rotateorth_reg: rotateorth_reg.o $(LEPTLIB) $(CC) -o rotateorth_reg rotateorth_reg.o $(ALL_LIBS) $(EXTRALIBS) scale_reg: scale_reg.o $(LEPTLIB) $(CC) -o scale_reg scale_reg.o $(ALL_LIBS) $(EXTRALIBS) selio_reg: selio_reg.o $(LEPTLIB) $(CC) -o selio_reg selio_reg.o $(ALL_LIBS) $(EXTRALIBS) shear_reg: shear_reg.o $(LEPTLIB) $(CC) -o shear_reg shear_reg.o $(ALL_LIBS) $(EXTRALIBS) skew_reg: skew_reg.o $(LEPTLIB) $(CC) -o skew_reg skew_reg.o $(ALL_LIBS) $(EXTRALIBS) smallpix_reg: smallpix_reg.o $(LEPTLIB) $(CC) -o smallpix_reg smallpix_reg.o $(ALL_LIBS) $(EXTRALIBS) smoothedge_reg: smoothedge_reg.o $(LEPTLIB) $(CC) -o smoothedge_reg smoothedge_reg.o $(ALL_LIBS) $(EXTRALIBS) splitcomp_reg: splitcomp_reg.o $(LEPTLIB) $(CC) -o splitcomp_reg splitcomp_reg.o $(ALL_LIBS) $(EXTRALIBS) string_reg: string_reg.o $(LEPTLIB) $(CC) -o string_reg string_reg.o $(ALL_LIBS) $(EXTRALIBS) subpixel_reg: subpixel_reg.o $(LEPTLIB) $(CC) -o subpixel_reg subpixel_reg.o $(ALL_LIBS) $(EXTRALIBS) threshnorm_reg: threshnorm_reg.o $(LEPTLIB) $(CC) -o threshnorm_reg threshnorm_reg.o $(ALL_LIBS) $(EXTRALIBS) warper_reg: warper_reg.o $(LEPTLIB) $(CC) -o warper_reg warper_reg.o $(ALL_LIBS) $(EXTRALIBS) writetext_reg: writetext_reg.o $(LEPTLIB) $(CC) -o writetext_reg writetext_reg.o $(ALL_LIBS) $(EXTRALIBS) xformbox_reg: xformbox_reg.o $(LEPTLIB) $(CC) -o xformbox_reg xformbox_reg.o $(ALL_LIBS) $(EXTRALIBS) adaptmaptest: adaptmaptest.o $(LEPTLIB) $(CC) -o adaptmaptest adaptmaptest.o $(ALL_LIBS) $(EXTRALIBS) arithtest: arithtest.o $(LEPTLIB) $(CC) -o arithtest arithtest.o $(ALL_LIBS) $(EXTRALIBS) barcodetest: barcodetest.o $(LEPTLIB) $(CC) -o barcodetest barcodetest.o $(ALL_LIBS) $(EXTRALIBS) baselinetest: baselinetest.o $(LEPTLIB) $(CC) -o baselinetest baselinetest.o $(ALL_LIBS) $(EXTRALIBS) bincompare: bincompare.o $(LEPTLIB) $(CC) -o bincompare bincompare.o $(ALL_LIBS) $(EXTRALIBS) blendcmaptest: blendcmaptest.o $(LEPTLIB) $(CC) -o blendcmaptest blendcmaptest.o $(ALL_LIBS) $(EXTRALIBS) blendtest1: blendtest1.o $(LEPTLIB) $(CC) -o blendtest1 blendtest1.o $(ALL_LIBS) $(EXTRALIBS) buffertest: buffertest.o $(LEPTLIB) $(CC) -o buffertest buffertest.o $(ALL_LIBS) $(EXTRALIBS) ccbordtest: ccbordtest.o $(LEPTLIB) $(CC) -o ccbordtest ccbordtest.o $(ALL_LIBS) $(EXTRALIBS) cctest1: cctest1.o $(LEPTLIB) $(CC) -o cctest1 cctest1.o $(ALL_LIBS) $(EXTRALIBS) colormorphtest: colormorphtest.o $(LEPTLIB) $(CC) -o colormorphtest colormorphtest.o $(ALL_LIBS) $(EXTRALIBS) colorsegtest: colorsegtest.o $(LEPTLIB) $(CC) -o colorsegtest colorsegtest.o $(ALL_LIBS) $(EXTRALIBS) colorspacetest: colorspacetest.o $(LEPTLIB) $(CC) -o colorspacetest colorspacetest.o $(ALL_LIBS) $(EXTRALIBS) comparepages: comparepages.o $(LEPTLIB) $(CC) -o comparepages comparepages.o $(ALL_LIBS) $(EXTRALIBS) comparetest: comparetest.o $(LEPTLIB) $(CC) -o comparetest comparetest.o $(ALL_LIBS) $(EXTRALIBS) contrasttest: contrasttest.o $(LEPTLIB) $(CC) -o contrasttest contrasttest.o $(ALL_LIBS) $(EXTRALIBS) convertfilestops: convertfilestops.o $(LEPTLIB) $(CC) -o convertfilestops convertfilestops.o $(ALL_LIBS) $(EXTRALIBS) convertformat: convertformat.o $(LEPTLIB) $(CC) -o convertformat convertformat.o $(ALL_LIBS) $(EXTRALIBS) convertsegfilestops: convertsegfilestops.o $(LEPTLIB) $(CC) -o convertsegfilestops convertsegfilestops.o $(ALL_LIBS) $(EXTRALIBS) converttogray: converttogray.o $(LEPTLIB) $(CC) -o converttogray converttogray.o $(ALL_LIBS) $(EXTRALIBS) converttops: converttops.o $(LEPTLIB) $(CC) -o converttops converttops.o $(ALL_LIBS) $(EXTRALIBS) convolvetest: convolvetest.o $(LEPTLIB) $(CC) -o convolvetest convolvetest.o $(ALL_LIBS) $(EXTRALIBS) cornertest: cornertest.o $(LEPTLIB) $(CC) -o cornertest cornertest.o $(ALL_LIBS) $(EXTRALIBS) croptext: croptext.o $(LEPTLIB) $(CC) -o croptext croptext.o $(ALL_LIBS) $(EXTRALIBS) digitprep1: digitprep1.o $(LEPTLIB) $(CC) -o digitprep1 digitprep1.o $(ALL_LIBS) $(EXTRALIBS) dithertest: dithertest.o $(LEPTLIB) $(CC) -o dithertest dithertest.o $(ALL_LIBS) $(EXTRALIBS) dwalineargen: dwalineargen.o $(LEPTLIB) $(CC) -o dwalineargen dwalineargen.o $(ALL_LIBS) $(EXTRALIBS) edgetest: edgetest.o $(LEPTLIB) $(CC) -o edgetest edgetest.o $(ALL_LIBS) $(EXTRALIBS) falsecolortest: falsecolortest.o $(LEPTLIB) $(CC) -o falsecolortest falsecolortest.o $(ALL_LIBS) $(EXTRALIBS) fhmtautogen: fhmtautogen.o $(LEPTLIB) $(CC) -o fhmtautogen fhmtautogen.o $(ALL_LIBS) $(EXTRALIBS) fileinfo: fileinfo.o $(LEPTLIB) $(CC) -o fileinfo fileinfo.o $(ALL_LIBS) $(EXTRALIBS) findpattern1: findpattern1.o $(LEPTLIB) $(CC) -o findpattern1 findpattern1.o $(ALL_LIBS) $(EXTRALIBS) findpattern2: findpattern2.o $(LEPTLIB) $(CC) -o findpattern2 findpattern2.o $(ALL_LIBS) $(EXTRALIBS) findpattern3: findpattern3.o $(LEPTLIB) $(CC) -o findpattern3 findpattern3.o $(ALL_LIBS) $(EXTRALIBS) flipselgen: flipselgen.o $(LEPTLIB) $(CC) -o flipselgen flipselgen.o $(ALL_LIBS) $(EXTRALIBS) fcombautogen: fcombautogen.o $(LEPTLIB) $(CC) -o fcombautogen fcombautogen.o $(ALL_LIBS) $(EXTRALIBS) fmorphautogen: fmorphautogen.o $(LEPTLIB) $(CC) -o fmorphautogen fmorphautogen.o $(ALL_LIBS) $(EXTRALIBS) gammatest: gammatest.o $(LEPTLIB) $(CC) -o gammatest gammatest.o $(ALL_LIBS) $(EXTRALIBS) genfonts: genfonts.o $(LEPTLIB) $(CC) -o genfonts genfonts.o $(ALL_LIBS) $(EXTRALIBS) graphicstest: graphicstest.o $(LEPTLIB) $(CC) -o graphicstest graphicstest.o $(ALL_LIBS) $(EXTRALIBS) graymorphtest: graymorphtest.o $(LEPTLIB) $(CC) -o graymorphtest graymorphtest.o $(ALL_LIBS) $(EXTRALIBS) histotest: histotest.o $(LEPTLIB) $(CC) -o histotest histotest.o $(ALL_LIBS) $(EXTRALIBS) iotest: iotest.o $(LEPTLIB) $(CC) -o iotest iotest.o $(ALL_LIBS) $(EXTRALIBS) inserttest: inserttest.o $(LEPTLIB) $(CC) -o inserttest inserttest.o $(ALL_LIBS) $(EXTRALIBS) jbcorrelation: jbcorrelation.o $(LEPTLIB) $(CC) -o jbcorrelation jbcorrelation.o $(ALL_LIBS) $(EXTRALIBS) jbrankhaus: jbrankhaus.o $(LEPTLIB) $(CC) -o jbrankhaus jbrankhaus.o $(ALL_LIBS) $(EXTRALIBS) jbwords: jbwords.o $(LEPTLIB) $(CC) -o jbwords jbwords.o $(ALL_LIBS) $(EXTRALIBS) lineremoval: lineremoval.o $(LEPTLIB) $(CC) -o lineremoval lineremoval.o $(ALL_LIBS) $(EXTRALIBS) listtest: listtest.o $(LEPTLIB) $(CC) -o listtest listtest.o $(ALL_LIBS) $(EXTRALIBS) maketile: maketile.o $(LEPTLIB) $(CC) -o maketile maketile.o $(ALL_LIBS) $(EXTRALIBS) misctest1: misctest1.o $(LEPTLIB) $(CC) -o misctest1 misctest1.o $(ALL_LIBS) $(EXTRALIBS) modifyhuesat: modifyhuesat.o $(LEPTLIB) $(CC) -o modifyhuesat modifyhuesat.o $(ALL_LIBS) $(EXTRALIBS) morphtest1: morphtest1.o $(LEPTLIB) $(CC) -o morphtest1 morphtest1.o $(ALL_LIBS) $(EXTRALIBS) mtifftest: mtifftest.o $(LEPTLIB) $(CC) -o mtifftest mtifftest.o $(ALL_LIBS) $(EXTRALIBS) numaranktest: numaranktest.o $(LEPTLIB) $(CC) -o numaranktest numaranktest.o $(ALL_LIBS) $(EXTRALIBS) otsutest: otsutest.o $(LEPTLIB) $(CC) -o otsutest otsutest.o $(ALL_LIBS) $(EXTRALIBS) pagesegtest1: pagesegtest1.o $(LEPTLIB) $(CC) -o pagesegtest1 pagesegtest1.o $(ALL_LIBS) $(EXTRALIBS) pagesegtest2: pagesegtest2.o $(LEPTLIB) $(CC) -o pagesegtest2 pagesegtest2.o $(ALL_LIBS) $(EXTRALIBS) pagesegtest3: pagesegtest3.o $(LEPTLIB) $(CC) -o pagesegtest3 pagesegtest3.o $(ALL_LIBS) $(EXTRALIBS) partitiontest: partitiontest.o $(LEPTLIB) $(CC) -o partitiontest partitiontest.o $(ALL_LIBS) $(EXTRALIBS) pixaatest: pixaatest.o $(LEPTLIB) $(CC) -o pixaatest pixaatest.o $(ALL_LIBS) $(EXTRALIBS) plottest: plottest.o $(LEPTLIB) $(CC) -o plottest plottest.o $(ALL_LIBS) $(EXTRALIBS) printimage: printimage.o $(LEPTLIB) $(CC) -o printimage printimage.o $(ALL_LIBS) $(EXTRALIBS) printsplitimage: printsplitimage.o $(LEPTLIB) $(CC) -o printsplitimage printsplitimage.o $(ALL_LIBS) $(EXTRALIBS) printtiff: printtiff.o $(LEPTLIB) $(CC) -o printtiff printtiff.o $(ALL_LIBS) $(EXTRALIBS) ranktest: ranktest.o $(LEPTLIB) $(CC) -o ranktest ranktest.o $(ALL_LIBS) $(EXTRALIBS) reducetest: reducetest.o $(LEPTLIB) $(CC) -o reducetest reducetest.o $(ALL_LIBS) $(EXTRALIBS) removecmap: removecmap.o $(LEPTLIB) $(CC) -o removecmap removecmap.o $(ALL_LIBS) $(EXTRALIBS) renderfonts: renderfonts.o $(LEPTLIB) $(CC) -o renderfonts renderfonts.o $(ALL_LIBS) $(EXTRALIBS) rotatefastalt: rotatefastalt.o $(LEPTLIB) $(CC) -o rotatefastalt rotatefastalt.o $(ALL_LIBS) $(EXTRALIBS) rotateorthtest1: rotateorthtest1.o $(LEPTLIB) $(CC) -o rotateorthtest1 rotateorthtest1.o $(ALL_LIBS) $(EXTRALIBS) rotatetest1: rotatetest1.o $(LEPTLIB) $(CC) -o rotatetest1 rotatetest1.o $(ALL_LIBS) $(EXTRALIBS) runlengthtest: runlengthtest.o $(LEPTLIB) $(CC) -o runlengthtest runlengthtest.o $(ALL_LIBS) $(EXTRALIBS) scaletest1: scaletest1.o $(LEPTLIB) $(CC) -o scaletest1 scaletest1.o $(ALL_LIBS) $(EXTRALIBS) scaletest2: scaletest2.o $(LEPTLIB) $(CC) -o scaletest2 scaletest2.o $(ALL_LIBS) $(EXTRALIBS) seedfilltest: seedfilltest.o $(LEPTLIB) $(CC) -o seedfilltest seedfilltest.o $(ALL_LIBS) $(EXTRALIBS) sharptest: sharptest.o $(LEPTLIB) $(CC) -o sharptest sharptest.o $(ALL_LIBS) $(EXTRALIBS) sheartest: sheartest.o $(LEPTLIB) $(CC) -o sheartest sheartest.o $(ALL_LIBS) $(EXTRALIBS) showedges: showedges.o $(LEPTLIB) $(CC) -o showedges showedges.o $(ALL_LIBS) $(EXTRALIBS) skewtest: skewtest.o $(LEPTLIB) $(CC) -o skewtest skewtest.o $(ALL_LIBS) $(EXTRALIBS) snapcolortest: snapcolortest.o $(LEPTLIB) $(CC) -o snapcolortest snapcolortest.o $(ALL_LIBS) $(EXTRALIBS) sorttest: sorttest.o $(LEPTLIB) $(CC) -o sorttest sorttest.o $(ALL_LIBS) $(EXTRALIBS) splitimage2pdf: splitimage2pdf.o $(LEPTLIB) $(CC) -o splitimage2pdf splitimage2pdf.o $(ALL_LIBS) $(EXTRALIBS) trctest: trctest.o $(LEPTLIB) $(CC) -o trctest trctest.o $(ALL_LIBS) $(EXTRALIBS) viewertest: viewertest.o $(LEPTLIB) $(CC) -o viewertest viewertest.o $(ALL_LIBS) $(EXTRALIBS) watershedtest: watershedtest.o $(LEPTLIB) $(CC) -o watershedtest watershedtest.o $(ALL_LIBS) $(EXTRALIBS) wordsinorder: wordsinorder.o $(LEPTLIB) $(CC) -o wordsinorder wordsinorder.o $(ALL_LIBS) $(EXTRALIBS) xtractprotos: xtractprotos.o $(LEPTLIB) $(CC) -o xtractprotos xtractprotos.o $(ALL_LIBS) $(EXTRALIBS) xvdisp: xvdisp.o $(LEPTLIB) $(CC) -o xvdisp xvdisp.o $(ALL_LIBS) $(EXTRALIBS) ########################################################### clean: -@ for file in $(SRC:%.c=%) ; do \ rm -f $$file; \ done ; -@ for file in $(SRC:%.c=%.o) ; do \ rm -f $$file; \ done ; -@ for file in $(SRC2:%.c=%.o) ; do \ rm -f $$file; \ done ; ########################################################### install: mkdir -p $(DESTDIR)/usr/bin/leptonica -@ for file in $(SRC:%.c=%) ; do \ install $$file $(DESTDIR)/usr/bin/leptonica; \ done ; ########################################################### depend: $(BIN)/makedepend -DNO_PROTOS $(CPPFLAGS) $(SRC) dependprotos: $(BIN)/makedepend $(CPPFLAGS) $(SRC) # DO NOT DELETE THIS LINE -- make depend depends on it. leptonica-1.70/prog/raggededge.png0000444000175000017500000000070411301154262015232 0ustar dandan‰PNG  IHDRgjî]¦þgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I$IDATxœíÙKÃ0PnÀýoÉ J“~SÇÆ‰êVC2lªF²-Y„z¡¦¦¦¦¦¦Îª%«î”IMýÒAõpž¬~VšP·-¶ŽYGeBkÑf©ðºQ*¶jêƒëzSת¦nU ­ë_ã¼8öé}UâhUñV ¶6ßþšÒßlZ¨©7hKª=«v±ÖM¬Ãy"°º¹O¡qNþ Z£™3°ê¿j¬MÓáulq5ÎÆ}Ÿî`jêÄº× ¨º9×JM½A#Ý€ÔÔãuSÖ8'OMMýÖ5>¸þ(tJ,ÇýÈZJ-)ô~s6/lÍ&m’CßWp¶ø¯9´úêC ]I§¦îGÜÅhÚËH¢W¯„,ºd¤ÑE¡Ô?×ò…¾æˆÃ4êr 4tIMEÙ *)ÄölIEND®B`‚leptonica-1.70/prog/ranktest.c0000644000175000017500000001055512270122643014460 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ranktest.c * * Tests rank filters on 8 and 32 bpp images. */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, wf, hf, w, h, d, same; l_float32 rank, time; PIX *pixs, *pixd, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa; char *filein, *fileout; static char mainName[] = "ranktest"; if (argc != 6) return ERROR_INT(" Syntax: ranktest filein wf hf rank fileout", mainName, 1); filein = argv[1]; wf = atoi(argv[2]); hf = atoi(argv[3]); rank = atof(argv[4]); fileout = argv[5]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pix neither 8 nor 32 bpp", mainName, 1); startTimer(); pixd = pixRankFilter(pixs, wf, hf, rank); time = stopTimer(); fprintf(stderr, "Time = %7.3f sec\n", time); fprintf(stderr, "MPix/sec: %7.3f\n", 0.000001 * w * h / time); pixDisplay(pixs, 0, 0); pixDisplay(pixd, 600, 0); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixd); /* Get results for different rank values */ for (i = 0; i <= 10; i++) { pixd = pixRankFilter(pixs, wf, hf, 0.1 * i); pixDisplayWrite(pixd, 1); pixDestroy(&pixd); } /* Make the dimensions odd to compare with dilation & erosion */ if (wf % 2 == 0) wf++; if (hf % 2 == 0) hf++; /* Get results for dilation and erosion */ if (d == 8) { pixt1 = pixDilateGray(pixs, wf, hf); pixt2 = pixErodeGray(pixs, wf, hf); } else { pixt1 = pixColorMorph(pixs, L_MORPH_DILATE, wf, hf); pixt2 = pixColorMorph(pixs, L_MORPH_ERODE, wf, hf); } pixDisplayWrite(pixt1, 1); /* dilation */ /* Get results using the rank filter for rank = 0.0 and 1.0. * Don't use 0.0 or 1.0, because those are dispatched * automatically to erosion and dilation! */ pixt3 = pixRankFilter(pixs, wf, hf, 0.0001); pixt4 = pixRankFilter(pixs, wf, hf, 0.9999); /* Compare */ pixEqual(pixt1, pixt4, &same); if (same) fprintf(stderr, "Correct: dilation results same as rank 1.0\n"); else fprintf(stderr, "Error: dilation results differ from rank 1.0\n"); pixEqual(pixt2, pixt3, &same); if (same) fprintf(stderr, "Correct: erosion results same as rank 0.0\n"); else fprintf(stderr, "Error: erosion results differ from rank 0.0\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); /* Display tiled */ pixa = pixaReadFiles("/tmp/display", "file"); pixd = pixaDisplayTiledAndScaled(pixa, d, 400, 3, 0, 25, 2); pixWrite("/tmp/junktiles.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/grayquant_reg.c0000644000175000017500000003543312240303050015465 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * grayquant_reg.c * * Tests gray thresholding to 1, 2 and 4 bpp, with and without colormaps */ #include "allheaders.h" static const l_int32 THRESHOLD = 130; /* nlevels for 4 bpp output; anything between 2 and 16 */ static const l_int32 NLEVELS = 4; int main(int argc, char **argv) { const char *str; l_int32 equal, index, w, h; BOX *box; PIX *pixs, *pixd, *pixt, *pixd1, *pixd2, *pixd3; PIX *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa; PIXCMAP *cmap; static char mainName[] = "grayquant_reg"; if ((pixs = pixRead("test8.jpg")) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); /* threshold to 1 bpp */ pixd = pixThresholdToBinary(pixs, THRESHOLD); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixWrite("/tmp/thr0.png", pixd, IFF_PNG); pixDestroy(&pixd); /* dither to 2 bpp, with and without colormap */ pixd = pixDitherTo2bpp(pixs, 1); pixt = pixDitherTo2bpp(pixs, 0); pixt2 = pixConvertGrayToColormap(pixt); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr1.png", pixd, IFF_PNG); pixWrite("/tmp/thr2.png", pixt, IFF_PNG); pixWrite("/tmp/thr3.png", pixt2, IFF_PNG); /* pixcmapWriteStream(stderr, pixGetColormap(pixd)); */ pixEqual(pixd, pixt2, &equal); if (!equal) fprintf(stderr, "Error: thr2 != thr3\n"); pixDestroy(&pixt); pixDestroy(&pixt2); pixDestroy(&pixd); /* threshold to 2 bpp, with and without colormap */ pixd = pixThresholdTo2bpp(pixs, 4, 1); pixt = pixThresholdTo2bpp(pixs, 4, 0); pixt2 = pixConvertGrayToColormap(pixt); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr4.png", pixd, IFF_PNG); pixWrite("/tmp/thr5.png", pixt2, IFF_PNG); pixEqual(pixd, pixt2, &equal); if (!equal) fprintf(stderr, "Error: thr4 != thr5\n"); pixDestroy(&pixt); pixDestroy(&pixt2); pixDestroy(&pixd); pixd = pixThresholdTo2bpp(pixs, 3, 1); pixt = pixThresholdTo2bpp(pixs, 3, 0); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr6.png", pixd, IFF_PNG); pixWrite("/tmp/thr7.png", pixt, IFF_PNG); pixDestroy(&pixt); pixDestroy(&pixd); /* threshold to 4 bpp, with and without colormap */ pixd = pixThresholdTo4bpp(pixs, 9, 1); pixt = pixThresholdTo4bpp(pixs, 9, 0); pixt2 = pixConvertGrayToColormap(pixt); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr8.png", pixd, IFF_PNG); pixWrite("/tmp/thr9.png", pixt, IFF_PNG); pixWrite("/tmp/thr10.png", pixt2, IFF_PNG); /* pixcmapWriteStream(stderr, pixGetColormap(pixd)); */ pixDestroy(&pixt); pixDestroy(&pixt2); pixDestroy(&pixd); /* threshold on 8 bpp, with and without colormap */ pixd = pixThresholdOn8bpp(pixs, 9, 1); pixt = pixThresholdOn8bpp(pixs, 9, 0); pixt2 = pixConvertGrayToColormap(pixt); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixt2, pixa, 1, 0, 20, 0); pixWrite("/tmp/thr11.png", pixd, IFF_PNG); pixWrite("/tmp/thr12.png", pixt2, IFF_PNG); /* pixcmapWriteStream(stderr, pixGetColormap(pixd)); */ pixEqual(pixd, pixt2, &equal); if (!equal) fprintf(stderr, "Error: thr11 != thr12\n"); pixDestroy(&pixt); pixDestroy(&pixt2); pixDestroy(&pixd); pixd1 = pixaDisplay(pixa, 0, 0); pixDisplay(pixd1, 100, 100); pixWrite("/tmp/pixd1.jpg", pixd1, IFF_JFIF_JPEG); pixDestroy(&pixd1); pixaDestroy(&pixa); pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 32); /* highlight 2 bpp with colormap */ pixd = pixThresholdTo2bpp(pixs, 3, 1); cmap = pixGetColormap(pixd); pixcmapWriteStream(stderr, cmap); box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pixd, box, 2, 255, 255, 100); pixcmapWriteStream(stderr, cmap); pixDisplay(pixd, 0, 0); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixWrite("/tmp/thr13.png", pixd, IFF_PNG); pixDestroy(&pixd); boxDestroy(&box); /* test pixThreshold8() */ pixd = pixThreshold8(pixs, 1, 2, 1); /* cmap */ pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixWrite("/tmp/thr14.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 0); pixDestroy(&pixd); pixd = pixThreshold8(pixs, 1, 2, 0); /* no cmap */ pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr15.png", pixd, IFF_PNG); pixDisplay(pixd, 200, 0); pixDestroy(&pixd); pixd = pixThreshold8(pixs, 2, 3, 1); /* highlight one box */ pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pixd, box, 2, 255, 255, 100); pixWrite("/tmp/thr16.png", pixd, IFF_PNG); pixDisplay(pixd, 300, 0); cmap = pixGetColormap(pixd); pixcmapWriteStream(stderr, cmap); boxDestroy(&box); pixDestroy(&pixd); pixd = pixThreshold8(pixs, 2, 4, 0); /* no cmap */ pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr17.png", pixd, IFF_PNG); pixDisplay(pixd, 400, 0); pixDestroy(&pixd); pixd = pixThreshold8(pixs, 4, 6, 1); /* highlight one box */ box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pixd, box, 5, 255, 255, 100); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr18.png", pixd, IFF_PNG); cmap = pixGetColormap(pixd); pixcmapWriteStream(stderr, cmap); boxDestroy(&box); pixDisplay(pixd, 500, 0); pixDestroy(&pixd); pixd = pixThreshold8(pixs, 4, 6, 0); /* no cmap */ pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr19.png", pixd, IFF_PNG); pixDisplay(pixd, 600, 0); pixDestroy(&pixd); /* highlight 4 bpp with 2 colormap entries */ /* Note: We use 5 levels (0-4) for gray. */ /* 5 & 6 are used for highlight color. */ pixd = pixThresholdTo4bpp(pixs, 5, 1); cmap = pixGetColormap(pixd); pixcmapGetIndex(cmap, 255, 255, 255, &index); box = boxCreate(278, 35, 122, 50); pixSetSelectCmap(pixd, box, index, 255, 255, 100); /* use 5 */ boxDestroy(&box); box = boxCreate(4, 6, 157, 33); pixSetSelectCmap(pixd, box, index, 100, 255, 255); /* use 6 */ boxDestroy(&box); pixcmapWriteStream(stderr, cmap); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixDisplay(pixd, 700, 0); pixWrite("/tmp/thr20.png", pixd, IFF_PNG); pixDestroy(&pixd); /* comparison 8 bpp jpeg with 2 bpp (highlight) */ pixDestroy(&pixs); pixs = pixRead("feyn.tif"); pixt = pixScaleToGray4(pixs); pixt2 = pixReduceRankBinaryCascade(pixs, 2, 2, 0, 0); pixd = pixThresholdTo2bpp(pixt, 3, 1); box = boxCreate(175, 208, 228, 88); pixSetSelectCmap(pixd, box, 2, 255, 255, 100); pixDisplay(pixd, 100, 200); cmap = pixGetColormap(pixd); pixcmapWriteStream(stderr, cmap); pixSaveTiled(pixt, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr21.jpg", pixt, IFF_JFIF_JPEG); pixWrite("/tmp/thr22.png", pixt2, IFF_PNG); pixWrite("/tmp/thr23.png", pixd, IFF_PNG); pixDestroy(&pixd); pixDestroy(&pixt2); boxDestroy(&box); /* thresholding to 4 bpp (highlight); use pixt from above */ pixd = pixThresholdTo4bpp(pixt, NLEVELS, 1); box = boxCreate(175, 208, 228, 83); pixSetSelectCmap(pixd, box, NLEVELS - 1, 255, 255, 100); boxDestroy(&box); box = boxCreate(232, 298, 110, 25); pixSetSelectCmap(pixd, box, NLEVELS - 1, 100, 255, 255); boxDestroy(&box); box = boxCreate(21, 698, 246, 82); pixSetSelectCmap(pixd, box, NLEVELS - 1, 225, 100, 255); boxDestroy(&box); pixDisplay(pixd, 500, 200); cmap = pixGetColormap(pixd); pixcmapWriteStream(stderr, cmap); pixt2 = pixReduceRankBinaryCascade(pixs, 2, 2, 0, 0); pixSaveTiled(pixt2, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/thr24.png", pixt2, IFF_PNG); pixWrite("/tmp/thr25.png", pixd, IFF_PNG); pixDestroy(&pixt2); pixDestroy(&pixd); /* Thresholding to 4 bpp at 2, 3, 4, 5 and 6 levels */ box = boxCreate(25, 202, 136, 37); pixt1 = pixClipRectangle(pixt, box, NULL); pixt2 = pixScale(pixt1, 6., 6.); pixGetDimensions(pixt2, &w, &h, NULL); pixSaveTiled(pixt2, pixa, 1.0, 1, 20, 0); pixDisplay(pixt2, 0, 0); pixWrite("/tmp/junk-8.jpg", pixt2, IFF_JFIF_JPEG); pixd = pixCreate(w, 6 * h, 8); pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixt2, 0, 0); pixt3 = pixThresholdTo4bpp(pixt2, 6, 1); pixt4 = pixRemoveColormap(pixt3, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pixd, 0, h, w, h, PIX_SRC, pixt4, 0, 0); pixSaveTiled(pixt3, pixa, 1.0, 0, 20, 0); pixDisplay(pixt3, 0, 100); pixWrite("/tmp/junk-4-6.png", pixt3, IFF_PNG); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixThresholdTo4bpp(pixt2, 5, 1); pixt4 = pixRemoveColormap(pixt3, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pixd, 0, 2 * h, w, h, PIX_SRC, pixt4, 0, 0); pixSaveTiled(pixt3, pixa, 1.0, 0, 20, 0); pixDisplay(pixt3, 0, 200); pixWrite("/tmp/junk-4-5.png", pixt3, IFF_PNG); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixThresholdTo4bpp(pixt2, 4, 1); pixt4 = pixRemoveColormap(pixt3, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pixd, 0, 3 * h, w, h, PIX_SRC, pixt4, 0, 0); pixSaveTiled(pixt3, pixa, 1.0, 0, 20, 0); pixDisplay(pixt3, 0, 300); pixWrite("/tmp/junk-4-4.png", pixt3, IFF_PNG); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixThresholdTo4bpp(pixt2, 3, 1); pixt4 = pixRemoveColormap(pixt3, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pixd, 0, 4 * h, w, h, PIX_SRC, pixt4, 0, 0); pixSaveTiled(pixt3, pixa, 1.0, 1, 20, 0); pixDisplay(pixt3, 0, 400); pixWrite("/tmp/junk-4-3.png", pixt3, IFF_PNG); pixDestroy(&pixt3); pixDestroy(&pixt4); pixt3 = pixThresholdTo4bpp(pixt2, 2, 1); pixt4 = pixRemoveColormap(pixt3, REMOVE_CMAP_TO_GRAYSCALE); pixRasterop(pixd, 0, 5 * h, w, h, PIX_SRC, pixt4, 0, 0); pixDisplay(pixt3, 0, 500); pixSaveTiled(pixt3, pixa, 1.0, 0, 20, 0); pixWrite("/tmp/junk-4-2.png", pixt3, IFF_PNG); pixDestroy(&pixt3); pixDestroy(&pixt4); pixWrite("/tmp/junk-all.png", pixd, IFF_PNG); pixDestroy(&pixd); pixd2 = pixaDisplay(pixa, 0, 0); pixDisplay(pixd2, 100, 100); pixWrite("/tmp/pixd2.jpg", pixd2, IFF_JFIF_JPEG); pixDestroy(&pixd2); pixaDestroy(&pixa); #if 0 /* upscale 2x and threshold to 1 bpp; e.g., use test8.jpg */ startTimer(); pixd = pixScaleGray2xLIThresh(pixs, THRESHOLD); fprintf(stderr, " time for scale/dither = %7.3f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixd); #endif #if 0 /* upscale 4x and threshold to 1 bpp; e.g., use test8.jpg */ startTimer(); pixd = pixScaleGray4xLIThresh(pixs, THRESHOLD); fprintf(stderr, " time for scale/dither = %7.3f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixd); #endif boxDestroy(&box); pixDestroy(&pixt); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixs); /* Thresholding with fixed and arbitrary bin boundaries */ pixa = pixaCreate(0); pixs = pixRead("stampede2.jpg"); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); pixt = pixThresholdTo4bpp(pixs, 5, 1); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); pixt = pixThresholdTo4bpp(pixs, 7, 1); cmap = pixGetColormap(pixt); pixcmapWriteStream(stderr, cmap); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); pixt = pixThresholdTo4bpp(pixs, 11, 1); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); str = "45 75 115 185"; pixt = pixThresholdGrayArb(pixs, str, 8, 0, 0, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); str = "38 65 85 115 160 210"; pixt = pixThresholdGrayArb(pixs, str, 8, 0, 1, 1); cmap = pixGetColormap(pixt); pixcmapWriteStream(stderr, cmap); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); str = "38 60 75 90 110 130 155 185 208 239"; pixt = pixThresholdGrayArb(pixs, str, 8, 0, 0, 0); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); str = "45 75 115 185"; pixt = pixThresholdGrayArb(pixs, str, 0, 1, 0, 1); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); str = "38 65 85 115 160 210"; pixt = pixThresholdGrayArb(pixs, str, 0, 1, 0, 1); cmap = pixGetColormap(pixt); pixcmapWriteStream(stderr, cmap); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); str = "38 60 75 90 110 130 155 185 208 239"; pixt = pixThresholdGrayArb(pixs, str, 4, 1, 0, 1); pixSaveTiled(pixt, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt); pixd3 = pixaDisplay(pixa, 0, 0); pixDisplay(pixd3, 100, 100); pixWrite("/tmp/pixd3.jpg", pixd3, IFF_JFIF_JPEG); pixDestroy(&pixd3); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/binmorph2_reg.c0000644000175000017500000001627012240303460015355 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binmorph2_reg.c * * Thorough regression test for binary separable rasterops, * using the sequence interpreters. This compares the * results for 2-way composite Sels with unitary Sels, * all invoked on the separable block morph ops. */ #include "allheaders.h" static const l_int32 MAX_SEL_SIZE = 120; static void writeResult(char *sequence, l_int32 same); int main(int argc, char **argv) { char *str; char buffer1[256]; char buffer2[256]; l_int32 i, same, same2, factor1, factor2, diff, success; PIX *pixs, *pixsd, *pixt1, *pixt2, *pixt3; SEL *sel1, *sel2; static char mainName[] = "binmorph2_reg"; if (argc != 1) return ERROR_INT(" Syntax: binmorph2_reg", mainName, 1); #if 1 pixs = pixRead("rabi.png"); pixsd = pixMorphCompSequence(pixs, "d5.5", 0); success = TRUE; for (i = 1; i < MAX_SEL_SIZE; i++) { /* Check if the size is exactly decomposable */ selectComposableSizes(i, &factor1, &factor2); diff = factor1 * factor2 - i; fprintf(stderr, "%d: (%d, %d): %d\n", i, factor1, factor2, diff); /* Carry out operations on identical sized Sels: dilation */ sprintf(buffer1, "d%d.%d", i + diff, i + diff); sprintf(buffer2, "d%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* ... erosion */ sprintf(buffer1, "e%d.%d", i + diff, i + diff); sprintf(buffer2, "e%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* ... opening */ sprintf(buffer1, "o%d.%d", i + diff, i + diff); sprintf(buffer2, "o%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* ... closing */ sprintf(buffer1, "c%d.%d", i + diff, i + diff); sprintf(buffer2, "c%d.%d", i, i); pixt1 = pixMorphSequence(pixsd, buffer1, 0); pixt2 = pixMorphCompSequence(pixsd, buffer2, 0); pixEqual(pixt1, pixt2, &same); if (i < 64) { pixt3 = pixMorphCompSequenceDwa(pixsd, buffer2, 0); pixEqual(pixt1, pixt3, &same2); } else { pixt3 = NULL; same2 = TRUE; } if (same && same2) writeResult(buffer1, 1); else { writeResult(buffer1, 0); success = FALSE; } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); } pixDestroy(&pixs); pixDestroy(&pixsd); if (success) fprintf(stderr, "\n---------- Success: no errors ----------\n"); else fprintf(stderr, "\n---------- Failure: error(s) found -----------\n"); #endif #if 0 for (i = 1; i < 400; i++) { selectComposableSizes(i, &factor1, &factor2); diff = factor1 * factor2 - i; fprintf(stderr, "%d: (%d, %d): %d\n", i, factor1, factor2, diff); selectComposableSels(i, L_HORIZ, &sel1, &sel2); selDestroy(&sel1); selDestroy(&sel2); } #endif #if 0 selectComposableSels(68, L_HORIZ, &sel1, &sel2); /* 17, 4 */ str = selPrintToString(sel2); fprintf(stderr, str); selDestroy(&sel1); selDestroy(&sel2); lept_free(str); selectComposableSels(70, L_HORIZ, &sel1, &sel2); /* 10, 7 */ str = selPrintToString(sel2); selDestroy(&sel1); selDestroy(&sel2); fprintf(stderr, str); lept_free(str); selectComposableSels(85, L_HORIZ, &sel1, &sel2); /* 17, 5 */ str = selPrintToString(sel2); selDestroy(&sel1); selDestroy(&sel2); fprintf(stderr, str); lept_free(str); selectComposableSels(96, L_HORIZ, &sel1, &sel2); /* 12, 8 */ str = selPrintToString(sel2); selDestroy(&sel1); selDestroy(&sel2); fprintf(stderr, str); lept_free(str); { SELA *sela; sela = selaAddBasic(NULL); selaWrite("/tmp/junksela.sela", sela); selaDestroy(&sela); } #endif return 0; } static void writeResult(char *sequence, l_int32 same) { if (same) fprintf(stderr, "Sequence %s: SUCCESS\n", sequence); else fprintf(stderr, "Sequence %s: FAILURE\n", sequence); } leptonica-1.70/prog/barcode-93-300.png0000444000175000017500000000454510770123063015317 0ustar dandan‰PNG  IHDR=çÝÐÚÌgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I™IDATxœí›Ïnë6ÆéjP£À Dw·@a½@]zaXóHéN@P^dƒúò³èT à]ó•àE—¥p—A ±$õ—â?™¾Ý´N¬_Î÷}çjöi.Þ@o 7ÐèÏÛoOÝËßCA ñBùbÍò8„A2‚ʈÊÛ;[P¾jÀ:”µw¶  4 ”`(hE£áCü> ÔD,b?2ºƒ<1¶ÆÛ@Ü`„ÿ yb”„‚Öì=q `ø ² Ñ5+° À JØ1ÄM–å@ЂšÀÔ$èÝ:+áªDÜ£6¤=¬ßÈ!<þøP΢ˆÞ Èoª¨E÷ ‘„¬n¾r³OŠy~z@ø]0HtvçÑ/âÝÛäfL ß :R(@'>ý¡ ¾Fò&:ɆLã, Äò‡u†ùˆ$l•>Œ_ìì¬39ýü ÞÙÔ®¾ä) âˆv±•\SÎϵÐãˆ73 þb^ ŸØ< ñß7€ÑX|±&a¯Ž7º/.å£ç-Ë@K¯¿"¨ùï¯7^YÆIÓDÅÕ Öì÷ ®ª 3ÌÃøÐï,yå=füŽf¿“ R‚ºŠŽvÐ/gFIqaU× bFî;ÐN€ê„mÒ~âwa~z|düyÁR¤™<*.%ØoâR€°ÑÔpN[m¥ÕP‘ƒÍTP%AFifP)@ÕrKë@øÞ m¬ˆ(Ii=¨•V{¤íGÐq’õ©ÒR«´Ò"­7»ï#l]JÝl‚-Hñ¨®eEÈÔ3Ðq?Q*ꤙAªGºøk‡´‰GDmH=þNš·!•Š ZQ'MT”!߈8âo+*]Ò.Š´ã\šZ‘ß#l‰4{?Hfi¯èì”ÖUdõÈÚq.Íb¶)5h¯ÈÑ Í J÷‘iÖTò… i©ÏGd‰ÙcqJ»F4³9ÈÞX÷wÒŽ†ø= i6{ rmHOõfoæ#rX²üGÈr ›Ù&iþéW=ªt³7„Ðayj3$¨\œšaÒJ|G± $**¯hÈyg Ð(mRÑA_÷èYíì|YgëÅφ>ÚlÆÔ–ÎZ,ãŸKÛ eKú訟kZCfÈÓGˆƒ =þ"gm"Ía6šÆÏŒ©aïbs™Ïú(³›}§Tä[l™½FУ^Q‘ñ»ú¨êGä^•6Ÿ~ë‘CÚ<~ÃÙÏ=òŒÈÑÚ„í³ö\@ê†ÌMÒ´†|–ÁiCšA{ÛéG‹¦ß$m4»ö™-㟤V™ã/½#¢6¤Œ>"û €Ýªu4¤”v?zÔWD³¡Óì¶!a'íl6xKת•ñßMÍÞK›{ÄSk=êR3Ƨî£g[CNGDóHVµégsi=ˆX@“Î̦Ÿ˜:™S¥õ©íí}äMR+2ƒà´³-©  ÉÐêÇQå2{‰øÏ²¢ªßØ.Æ¡uKs‚ôøGÐ,5Œ]§ˆÁö‰z:"Ú¹¶(þqhåˆpjà ¥ÙÄ)-öÇ¿÷U4Æï3{IgkD_?¯(6€ ±ó€¬æ}´OÔ¡Kc–}¤ŒÈ¹èRs€lC{éûh4»pv¶óiDZKCÂÊÒ¥™£eûhØÙN”øwþ}49Ef <ÙÙK7dmÚGÓ>rT„õŠ\#²[b¶EZé~8•Ö®ÓˆøAzEµWšÝìt0»rIó7dê‹?Æ£´ínk_#Š´N‘Ôâ‘ÅlwüíÓˆÓ#(†PÙGjgÏG$$þk*ªéÈICÚ§» ¢½­!§Ò¶v³‰ß#¿Ùúò÷š­­‘ªeDì ì“64äÞ:k~ &M=úÈîQz­G««A+ƒ´UšŒ¿à ÍÿºM¤!¨rÄ/A‰©¢ƒDéf Á£þa49Kiè¢IÛ-©Ò¶f³S;È m}MjÕ´"4—†tö¤†ð¿«!'YV­* O=2¦6ïìJ™+Z鉡õ€še »4ÜW4Jƒ]g›Öˆ=5¢€jA±ÆO6]EiDªéI¦ ¶¶bh«… qÕªú†\¼FziI¡ŒÈcŠæ ¯Gš4[ürñB=š=xdî#dïl"=’ Añ¤f‘ÖÇUŒÍ¤ÉÅVY¥Y@«ù†¤úŠQVí`¶qCRêU@H¯HxdÛÙÕuiݪEÚ>šz¤Iƒƒ´®!ëqDzbCÙ¥%Ã>ê†Ö:"²¢Ë‚øë”@ôp8<€?:+RÌî@üOÇ1‘WÂ(S/»GÓaô ÌþÀì—5µFšýÊž¬ÿpfõQôëeÙÝ&P¿üééêÛuÐÍ×èÏ=Þ #E­ÿ|ìAöcO Œ‰ÿѤí‡#®5ˆFŒ¿bð eDÚG\Â+Q,9(gþ9DQ È»¤å7|er§ëúç8DPEÒ&¡ð™D>¼rTДÅDèÄAI(Cgú‹É‰ƒÄëýðb©}¨Aß…(}ÏâËé_?JÐ}(ˆ5TFu.@$µ|¨f ˆ? œrP‹>z$Ë ~æÑNù¿îAÌXQ>„u6•T{Ñ9@–Où@ {ÏÊ8>ýF¿E_Pþý? „ØšŸÓɉÑoÙ¿ _£³Û^øìÁÝW+úø¢9°@P‚Ú²“øÁååâO$?Œ  BâÑæ|qnAgü!TÚE<#±Ó™¦ P¶Fø¬ñŽŒï£C yEÂEÿËÒ•€ŠÎÞÙå`Ëo=añɪNšä`Ço=y˜0™å3 ÞS$ÿ É#ñ©ÿQØ>2\çOúdY®7Ðè ô·ýX@¬(Àï¯?tIMEØ XTc tEXtSoftwareESP Ghostscript 815.02 Æ”Å_IEND®B`‚leptonica-1.70/prog/displaypixa.c0000644000175000017500000001546312244775323015171 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * displaypixa.c * * displaypixa filein fileout [fontdir] * displaypixa filein scalefact border lossless disp fileout [fontdir] * * where disp = 1 to display on the screen; 0 to skip * lossless = 1 for tiff or png * * This reads a pixa from file and generates a composite of the * images tiled in rows. It also optionally displays on the screen. * No scaling is done if @scalefact == 0.0 or @scalefact == 1.0. * If @fontdir is specified, the text field for all pix with text * is written out below the image. */ #include #include "allheaders.h" int main(int argc, char **argv) { char buf[32]; char *filein, *fileout, *fontdir, *textstr; l_int32 n, i, maxdepth, ntext, border, lossless, display; l_float32 scalefact; L_BMF *bmf; PIX *pix1, *pix2, *pix3, *pix4, *pixd; PIXA *pixa, *pixat; static char mainName[] = "displaypixa"; if (argc != 3 && argc != 4 && argc != 7 && argc != 8) { fprintf(stderr, "Syntax error in displaypixa:\n" " displaypixa filein fileout [fontdir]\n" " displaypixa filein scalefact border" " lossless disp fileout [fontdir]\n"); return 1; } filein = argv[1]; if ((pixa = pixaRead(filein)) == NULL) return ERROR_INT("pixa not made", mainName, 1); pixaCountText(pixa, &ntext); /* Simple specification; no output text */ if (argc == 3 || (argc == 4 && ntext == 0)) { /* no text output */ fileout = argv[2]; pixaVerifyDepth(pixa, &maxdepth); pixd = pixaDisplayTiledInRows(pixa, maxdepth, 1400, 1.0, 0, 10, 0); pixDisplay(pixd, 100, 100); if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } /* Simple specification with output text */ if (argc == 4) { /* ntext > 0 */ fileout = argv[2]; fontdir = argv[3]; n = pixaGetCount(pixa); if ((bmf = bmfCreate(fontdir, 6)) == NULL) { L_ERROR("couldn't read fontdir\n", mainName); pixat = pixaCopy(pixa, L_CLONE); } else { pixat = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pix3 = pixAddBorderGeneral(pix2, 10, 10, 5, 5, 0xffffff00); textstr = pixGetText(pix1); if (textstr && strlen(textstr) > 0) { snprintf(buf, sizeof(buf), "%s", textstr); pix4 = pixAddSingleTextblock(pix3, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); } else { pix4 = pixClone(pix3); } pixaAddPix(pixat, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } bmfDestroy(&bmf); } pixaVerifyDepth(pixat, &maxdepth); pixd = pixaDisplayTiledInRows(pixat, maxdepth, 1400, 1.0, 0, 10, 0); pixDisplay(pixd, 100, 100); if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixaDestroy(&pixat); return 0; } /* Full specification */ scalefact = atof(argv[2]); border = atoi(argv[3]); lossless = atoi(argv[4]); display = atoi(argv[5]); fileout = argv[6]; fontdir = (argc == 8) ? argv[7] : NULL; if (fontdir && ntext == 0) L_WARNING("No text found in any of the pix\n", mainName); if (fontdir && ntext > 0) { if ((bmf = bmfCreate(fontdir, 6)) == NULL) { L_ERROR("couldn't read fontdir\n", mainName); pixat = pixaCopy(pixa, L_CLONE); } else { n = pixaGetCount(pixa); pixat = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pix2 = pixConvertTo32(pix1); pix3 = pixAddBorderGeneral(pix2, 10, 10, 5, 5, 0xffffff00); textstr = pixGetText(pix1); if (textstr && strlen(textstr) > 0) { snprintf(buf, sizeof(buf), "%s", textstr); pix4 = pixAddSingleTextblock(pix3, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); } else { pix4 = pixClone(pix3); } pixaAddPix(pixat, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } bmfDestroy(&bmf); } } else { pixat = pixaCopy(pixa, L_CLONE); } pixaVerifyDepth(pixat, &maxdepth); pixd = pixaDisplayTiledInRows(pixat, maxdepth, 1400, scalefact, 0, 10, border); if (display) pixDisplay(pixd, 20, 20); if (pixGetDepth(pixd) == 1 || lossless) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixaDestroy(&pixat); return 0; } leptonica-1.70/prog/buffertest.c0000644000175000017500000000706312242267036015003 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * buffertest.c * * Tests the bbuffer operations */ #include "allheaders.h" #define NBLOCKS 11 int main(int argc, char **argv) { char *filein, *fileout; l_uint8 *array1, *array2, *dataout, *dataout2; l_int32 i, blocksize; size_t nbytes, nout, nout2; BBUFFER *bb, *bb2; FILE *fp; static char mainName[] = "buffertest"; if (argc != 3) return ERROR_INT(" Syntax: buffertest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; if ((array1 = l_binaryRead(filein, &nbytes)) == NULL) return ERROR_INT("array not made", mainName, 1); fprintf(stderr, " Bytes read from file: %lu\n", (unsigned long)nbytes); /* Application of byte buffer ops: compress/decompress in memory */ #if 1 dataout = zlibCompress(array1, nbytes, &nout); l_binaryWrite(fileout, "w", dataout, nout); dataout2 = zlibUncompress(dataout, nout, &nout2); l_binaryWrite("/tmp/junktest", "w", dataout2, nout2); fprintf(stderr, "nbytes in = %lu, nbytes comp = %lu, nbytes uncomp = %lu\n", (unsigned long)nbytes, (unsigned long)nout, (unsigned long)nout2); lept_free(dataout); lept_free(dataout2); #endif /* Low-level byte buffer read/write test */ #if 0 bb = bbufferCreate(array1, nbytes); bbufferRead(bb, array1, nbytes); array2 = (l_uint8 *)lept_calloc(2 * nbytes, sizeof(l_uint8)); fprintf(stderr, " Bytes initially in buffer: %d\n", bb->n); blocksize = (2 * nbytes) / NBLOCKS; for (i = 0; i <= NBLOCKS; i++) { bbufferWrite(bb, array2, blocksize, &nout); fprintf(stderr, " block %d: wrote %d bytes\n", i + 1, nout); } fprintf(stderr, " Bytes left in buffer: %d\n", bb->n); bb2 = bbufferCreate(NULL, 0); bbufferRead(bb2, array1, nbytes); fp = lept_fopen(fileout, "wb"); bbufferWriteStream(bb2, fp, nbytes, &nout); fprintf(stderr, " bytes written out to fileout: %d\n", nout); bbufferDestroy(&bb); bbufferDestroy(&bb2); lept_free(array2); #endif lept_free(array1); return 0; } leptonica-1.70/prog/testfile2.pdf0000444000175000017500000000453411517136671015064 0ustar dandan%PDF-1.2 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /Title (weasel4.16g.png) /Producer (leptonica) >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> 4 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 197 175] /Contents 5 0 R /Resources << /XObject << /Im1 6 0 R >> /ProcSet [ /ImageB /ImageI /ImageC ] >> >> endobj 5 0 obj << /Length 61 >> stream q 196.8000 0.0000 0.0000 175.2000 0.0000 0.0000 cm /Im1 Do Q endstream endobj 6 0 obj << /Length 1396 /Subtype /Image /ColorSpace 7 0 R /Width 82 /Height 73 /BitsPerComponent 8 /Filter /FlateDecode >> stream xœÌ˜×vë8 E l¢Êÿÿí°¨º7™y8Åñж ÈÇñÿ·ÌÿÉ<ùIä}ßv|oÓ—<ž¶ªøMÜ~fõêR:f<ÁïÀÛ[£f[ûÚn:q}$òUä!?ªÆuû±Rß½a6® Ëb¢±ü”ø‹BrŽ&UÜâ­ó%ð²í¿ ^ãóILd\ˆ1:“~K¼4²/©zÈåfÆÿޏ­§ÆB€d@¶©ÙD…¸m¼µ,KNgªG v`²”Ö‰ˆ*(3òÀ o‘µJ|õ3yc] èÀ×ÌÆÁT_Ê\=šÂÊk¶4`0Ɔü²dB×øôzSxK-ã ŽJzó:QÑø’¸W«#³5“>1o²ÇõÉÛÊåpWˆþ5`2’êYãÃé[Ob&Rë™~äð9uÜ: ê(]¢#Ó6 ÷ôC•“×e@ʹ"©ÿ´?!Ze*Ȥ’FPϯX”ㇷ‡A‰Æ”k™3öì}B‡aÄJ¢cÝÞoÒˆo§×eAœS NZè Òx\˜N«³°qV¸7…*è c°†"¹#}Ÿ^¯uìKCC%^ûBN܉©º´ ¾¿M7?i\{²ëöp#vœ¸[3ŸÚ“)Ó¹.£ ëés4ãlêUÚëà¯q,uÑ9Ú‚O )x+YØNøÎ%:WO׸¶á…M8øÅ2QÆÿ%rZV<™MjÓ*{ œåðeòùJ÷r9¢|Ç60÷Ÿƒˆk3°áPR~9’NÜ3ú6ª×³µzBRˆûµN¼˜õÚ©õâ~ƒ$¢=ÃÊÖ¼ñ?k§qøB@oƒ…àëæLœJ»|G¨••¬ÏklʽÂû/ëÂÒ{ÉLÄjfîÊcÂf玉wˆR#3}8´ œ°Mã}){®™Ò±£»á.óºh“2´±Á“ÇÇ^ûðZˆì€X£FèРÈs7ž5®×µ¼ö2làþÀŠ' DœäÙå»(Eãsm¼»!Ç‘µ%ƒ"t!<¯WëQY¯ÌnÛF/ºÙð¼ ø³Æå±4‰¸›Fß&Ç(“ùÆç[ã¼æ $txªµXtÞ‡Æ/ îÏ‘[r¨÷T4~+Ä╱[z/¼Ÿ-†­u Kxsoe6h9q¬iôÏCr%EšŒ(Û±˜¢çÜã°QÕxKqáÖjåHšˆ±>X«w›5¢¿ä%Ù$˜9ÅÖ½‚äåÀYÁîââfÍk¾<Åâ„Ú³¶/fø%WX’0f…èIï§Ó£8ÊÀ=Š$faqµˆÓ¬T#zc{Q‰ãˆ"î5¼Pårywç«tp6¯ó²bòýµ„ÕéÃkܯEKÉ#ÑKeK ¢Mx ðöϲ·1Cþ|¹zNs«²´m'•-a\à4ÃJÝØ€\¼áíõǧ®þŸ¼†w9?:ù·VÖwWúáÇ®0å@ÕòÐÇÇë÷ÿ¸Û?ÿÿ endstream endobj 7 0 obj [ /Indexed /DeviceRGB 15 < 000000 111111 222222 333333 444444 555555 666666 777777 888888 999999 aaaaaa bbbbbb cccccc dddddd eeeeee ffffff > ] endobj xref 0 8 0000000000 65535 f 0000000009 00000 n 0000000058 00000 n 0000000126 00000 n 0000000178 00000 n 0000000348 00000 n 0000000458 00000 n 0000002002 00000 n trailer << /Size 8 /Root 1 0 R /Info 2 0 R >> startxref 2160 %%EOF leptonica-1.70/prog/harmoniam100-11.png0000444000175000017500000021531611543721441015605 0ustar dandan‰PNG  IHDRóª[”½-PLTE$$$666HHH[[[mmm‘‘‘£££¶¶¶ÈÈÈÚÚÚìììÿÿÿ9þߺ pHYsb&2 IDATxœì]‹bã,¯4÷{Þÿq °ÁÇmÓ$Ý0çüûí&ŽaBÀh¹MLüÿÎû¼qáv[^]˜‰‰' ˜€ÚÛäüÄg hCÎO;?ñ!(œ7“󟜿ùéÏO| Bæü´óŸþœœŸø8‹NÎO| ,rÞOÎO| ’“óo¦Ÿø,¸Ìùiç'>ÞÿœŸø8­'ç'> ‘óÓ·™ø(cævâ£4n&žv~âcP8?íüħÀë¼Élr~âCà2çç~›‰O5ÆÁ'ç'>ÖL~â³lÞ@?9?ña˜œŸø4LÎO|f¬râÃT&ç'>Ááñï[Òt ¯.ÎÄ£‚U¯.Û"[q~â?APJ§ƒc&çÿ78¥ì²Ç°FOþ¿‚—r2þÙ·™{‰ÿ”eƉŒ›œŸø,g§o3ñQˆv6VNÎO| ¬·ÀùéÛL| ¬w“óç,8ô“óƒhæ1»ŽœŸø„¼|19?ñ)°Y߯MÎÿ!MA°‰ósMêmà­Œ&7žðçP1h©Ÿ}5¼{ÞÁi!8£t!Lêç­Y™ð1¤G839ÿZðHyÿÿ ͇ÃNοÑ©á‘ïB<ÓÀÿaÛ®õ§<–zÚù—ÃG§ Í-|hžÖɃQRI¡´TJÉØ¦•c¤±g2Æ)!Œ®ŠNê îMÇ*—÷¼©?œµÎ9ÿæ$üj) cBÊvÑÉëÑÖÅa¬SV"÷ Ìâ´Y땱:þ+³uÙ£äð8<Û9E€ìbYØ;´Û!Õñ 8ª8U½­L^ó²I¸vÝú‹Ö‘G“$¿¶dLìGÖª¯H}iXBAÌCzü¯÷qÒI«†7„hgºÎi{Œ‚+ ¦2€WÃyÃñ`ãm·,+EJ ¿#`„*T„cÝ­õK£Ùn¹}`6)??ç¼·<Ì­€ÿ¼¥~`ÞcæŸÈù`U!Çq$, Ër Ÿ“ûz«G»u_?ÍØêQÜ•_ѳrú›¯ %mÊBãÈNÖmd»N”F?tQ“.%,: k‡©‘œÅûE#¯%v`ëËl¿„éV|Ppµç%>Wvúa8\5ø|)¿ ´ýœÖmbŽO}GïÆ¤°ìó8oÙ¾^˜ì0 ú=ãÇåÈbW†µ[@èö€õÞdTJ9½DJW?"‡ÒTM»]¶¶û¡6/^  =¹+ ÏùÔ±èÀw£{ƒ× ©[)öoª×_Øß™¿¦™k÷Þå ½Õhèý“æ°¡Ge…7Q,1e´ÚfµgöVÏýÚ­ìÒÖsþ9v~3”ïL k®K_ŠìÃonâ‘ôÞäïHßßï4'xÖ¹ ({­„Š£ÓrKë+îGžšŠka»~H…®Ï^úësþ¤¼ÃàMicM}?Õ Ö*Û}ïWü§ÜÐú-Oœ„¤Küœ9lªF‡Ä¤/â+ƒPûó‰òY[¦ Gâ­Èœ'|ïÉ ª/eó¨`δ¥R;ÍY™c7޵[߉µŒóTv ëÖHw ézlepã.N "ç$ÜP:­«Ýj½>îú_•¹7ÏïqÞ‘Úªãìx4Çz5R†Ø§ì1K#¢j˜ä‹•®?£-/«“"¤'Ó½ÄùÃè”Ü}О[ïV7-|W¢Õub‡Ç:²{(<‰+‹± dŸE4·V+F‡ï´ôd/‡éÈ{\Y¬½2aq¾çØNÙxÛCá‰ïºkÍ&£ûÎ'*\ʪîðÚ;Žüc›8Žp$fÒÞàkF61Ó£nKÞyð:i9>×,­Fªu-ÇÄ à•ûdƬâðé/Õ¬ª—è Ÿ¦óÚV&í÷€Õ8xý>ç2S9†F¨ª=2çdD$5jÎBÞ kÆMJGÎ7D*Ï>öÂuf}¸Ghß5rží~µ¾E ƒ)àæ¯׬Ê;47½Uö½w®Æ?H½sGé]‚c©/G Ð?ÁŸÇa½ë‚ï·ÕOòTzö·Ìª_•/Ž øª€ÌËÎü [óŽ#öc¶mÇYÍê¡Kí:-­Ê¶^Fœß&Ar´¥‡@ÀhfSV¼÷7²ýò¯o±o…bPïjÝð¿Ìy?®¿r¾Þ€2t³§½wöãÏS4nÏm¾0?â<íÏ{=ˆÅ/èçWVÞ5‚X"¶z-ÍDûÀºÃ¹ÝÀ »ÕåÓ5ê„‘³ÿZöjî¶mNO)~×½"Çz[wŸ#´o†àž£õ¡N[Hl^8ãü­ß>ÑÎçà[Ý‘Òw†áü#•ÔòÀÀíÉ °-çÕp·,p¾ïB‹q-˜ç‡WA‰³Û6\Û7{;ÏG7ÏwڿȺ÷ ÷“ޣשõ»›ú²ûÛœg][Rà·#ì´sØ®uC†u ½ˆìè6Ï ûƒÎ?jîžJ1ömª²¼5†•xR}'>Þä£ÏY¼=TmWw×vWḦ)¾•*ßUæøCÎï_Ýo“˜În¶w‚Ž^eª×û£^6:#Îç¯[j{4½i’\?Á;ü)çñG×ìJ_èD>K¬¼îw Å+”Å£ê*1®…ƒ;ÒoàÏk ]muÛìB‰5R)÷Ÿ~::ŽÛÂׯK >ïÂyRÑÛ}ZãñƒÄv·W´‚np;—èrXÀ Voç„q‘é<¹çó:\¯’c;/÷ý£µŽ3²Sçó;à&I2ž|ôì¼?‰y¡ãsìm¡ÚF÷ÎNxŠ?Ÿíóý!/s~hìD§¡]r±ñ+Ö|¬®ç Í”FÕÔHÏ7ùGºíÒ,ÚùdbÄQg³š v~‹ï»Ó¤o)e<ílcr¸fË»ö¨lpêr^ôêm¢ïy0ðÔØoï%ÎòþnêÜ9†í“¼Ø6"nRÃì=X‘¸<Øà—9và Ç{‡Aréª ýC;ŸÝ [6LÈñË]ñçMõLÖÞùxaä]ÙÉ99Ë¥‡.žG²îè GMWþÍ½ÙøËÌ3öÏgÎßßñÎëÜ¢ØH+½mªôîtë¶r>¹u&X>%};ŸÜ‚w°õqh•Ã6v˜¥¿Ëùs¦°Ý¢Õ°®ðf±¡ì“Þö9_6N÷¸-‡Ï Õ ·¯7~&ç}¿M–¢»;Ü÷º$ØŽ-,î‚n( “Gñy“[9ù¥]Ybö¼Iš­ÀŒÜix‹òªef—¡ÇœOŽÁé¦s[ÊÇϳ#Ñy8ØÿjèXê~Ÿ(œÙùa[®gî7÷‹àà0Ò¯ÇmèÅžß ÌT°æ+œu¸Òç«Fþ¼*-RÇ­]ý£áŽË••b´j»Ù@̘ó²3†íC ž?_6œ™M–ËgAp>w©îÊ“³Ä·mC›»½§²·3@˜ß^‡=?‹w¸p¸%¯·¶¥+>­ÆEe.„Áò’(†ªê‰<ñrž5¬ÔÖ'µ¯×¦RðS ®8¡pÂq=4àõþ&u^ùºoŽÌI—çœß6­ò· Õ?‡óÃ}Àƒ G6©Ï[96×#þÕlŸuè»ê%§+Hþï(¨¿[ø Œ $ÒXóLz\”7÷žŸÙùþéÙn€DW¦#œ²ƒ¬åPp¯)`plŸªZ…¡âwqmßñ´žkÿmΗ݃™ÔvàÇ^—‡l¿ÿ,ÓH®ýJJüy²rÙ^«)ôõáüHK0±‘SûsbæÙ®ó¬w‚MœK]Ž÷:žªû9µ8ƒ=ádÀ ¿Û+Ô:þlýí[z7€ðÛ{‰³sÓ_+7UKÓ±íºí‹õ™†ë 7ÎÛ²ÝòÛ¹q>µ­ÅeÓܾ#ÎûÓþ¸!ì®òùíy.~›ó0¥ÖûPòìdÑûIÃù²·¹_òÑÜ9ƒñŽ7 PóA¿´ÀöZü:çOšÑªväØº”Fn›8[>¡yØ"‚½cl²ÛÖ&À—žfÖÓØ‘wplEÚ¿€[ÃôzìßÝõmÌ¡Tlh¿Ûó ƒÍõ—ÇçòaG ‡† {Î_ÚHñZü:çKĬçB¥¯ÁÝj;P[ÔËôߎ™v¥XðGëãóMùÚ¼fDí¥ßìž1doÍ éGÿü£þcë{´?‡+“é(¯Xü”î„tdç³õétB¿gøñ¯m}¶áé×9¿îÓ;Näa+Vµ£‹MR8쩹íÎeÿ`»¨'KqCÎo ½v[/q~¿Ã=Cå¯v&uw×íÔñÛ2Ï<ÞR¶÷*ûš{$ÔÎ=§ÎÁw²Ù.m¤x¼^ þÛsØÛ¶!{/YŽ wÕ.×Nîx7iÀîÈɬm^zÖ:Ü8ïjB`ãR¶u¦ÄùãH³;±Z ý,tصí:8¹~H±ê;r—MlGÂòݽJíwzro‚Ê ýw/?Ô2kÁÕõ6YBD±öÁºu¢%åþ8{±Ruó¤c?ß‹z.¬c¼Ïʉ\i?“”w¡Oƒ¢p¾­{äVl)_g½ yM´v•ÖdÚ´QJ_K±ŽóªâÓÊ£¦#îU«aßËHv;³HØ}nÑ}ÙMh#O¿÷«ÖX¦µ,JNžíË”ËQÝŠqÆó§A×—ëÝ3vÞHéL”g¼ù¾?w²-ð·ŽÍßžÇùöTÁŠÃJUP¥}˜²ÖjÑ_i3½$ÃŒŸáÒrK‰Í+­mcž¨®“Î&å|=€ŸIq·D©Ä–ãðÓXtxuxåà·û¹S—8­x>;£»é4T¬OŒ<¨êïm³­. ¼dj>ì©GwGåÕ‚h Ø›¦O«ñ4Îã ßUtïð¤ïŒîÙâ l2ܵ-Íìß§½Ø¶ÉXÈH ˆ8-F·ì_hÙE¶>ÖÍ{’Жª½p73DÇ ßǧmézv—ìû„\?%„1Ê„”òuÇ‹@‚J!IëI@0¨¾îÒRIe,œãªH‡®³t¢“9 Þ*þHÍ'r>=ÎêØ$’ÿsCzÕÚ«žPx¾ö’îèýK‘¶KØtËÎ3Nm!Í<ÖhJDôXÊ+¶9ê.v/Ùa”ÔZÅîÂ)c$º¬¥üŽž{~»S» `÷ ¾ˆ÷.¾À®JÐQE§FÃÃËæ¤@YüM'Gkp~ó ­ÜÙîø+»{^o]&²—»6ðwÕšãÉœ¿ « ¹Œ•¢/pt‘F^3¥ÏGÛÍõågêîx1UfˆÓFG>r×™= }Ü9ѧÙÓ`1]3‰Íð†÷oâ™y¿Š±Yú›ø¯^æã9?1ñX¤¼©“óŸ—RŸOÎO| ’¯<9?ñi˜œŸø4LÎO|&ç'> “óŸ†Éù‰OÃäüħar~âÓ09?ñixÓ}•¿‚`­OÐ=˜˜xcì3´>&&Þ“óŸïüäüS1¼Þ¸Ûôç A+!7Õ ÿÇ€ß8yêGÀk3ã6?…RÉѹÞåˆb£³áOEp¼›ÉùŸaSÍ©›g9ŸÒ4I:’²†Nü*‚5ÓÎÿA&#N[žTÑ*mLòi×4&~“ó 6ØœòUmB9ï¨Êþð“óHU“HÙ*OèÞ<ËÒÇÀNÎÿ˜wà¨y¤ÛYëäü{ ˜¹Çìçp^-¤Öòõ“óï7íüÐO9®£3Ï7ÁÌ@†IÔ&žŠßÏ¡öè§W Í™¸ñ»Èùiçßsö ];/A {K—Þ>LJ`®Ã>}Îk¡Ç<%˜`’Nοæ9©G€v}“/àŠ,¤? “󯇟礃>çs¶û”ÍMLο P99ÿô}•wà„±$söåÆLÎ?#>'S†N59ÿ˜œú¾Z¡BÎm59ÿ˜q›G€t¤ÉäŽ4;‹'^†à§ú{ÌxEò¦óœðŸkÜäüÏae‡Ï3$Ó’Þ2›švþå0“ó@É…LjÖûõðTqoÄäü LÎ?kîeRÙr‘žÃ<öïåþï`õäüÏᤶÞÅ›³ÖXcàÛ'dú󯇋59ÿ4ø¹­òõ°ÚÌýóŸ„`”žg'> !ÚùÉù‰‚·vúók´2“óo'ç'> ѹ™œŸø(xX4™g'>ar~âÓ`´q“óŸkôôç'> Á¨™saâƒ<ØùÉù‰ÏÕÑŸÚ}9›¹2'>>ú™ö¿EÁ{ç¬õïÃ*`B,N,Ò %ɽ±á?ä|pÆúX»æ›:|9½q¸|}¸-Ð'NÆŒu@k­Wû /Y**{^N)e!ë[ qFcÍ¥”T%z¡ÎO¸=Kއ¦ 7;q2®”àRIÁ„–äËMo¡¥ÔJœ6G0ñ9Œ F%”«{w&^¯$±Ááâ~?tñJ¼˜pÉ)릓Õˬ¹@/¸r× .Ž©àznU\j[ó¬Œ óÂäÈßrÞiÈxm¢Á ‚VJJU'h ½œ¢áI5Dø5ìÝ…Ë<£:­ÚúÞ=4ooÀÇ?d÷S!/:åaw:ŠÜ]ß;BÛ¹/kJ”¨‹Êb«\`Yz½+6øXË1ñm)»píó൶?õmz½¸n©^»wòJà$½T7¾½3¶¾mzÎ1·ì1nô£}=¹·SU9ê}¡g´r{:uH¿»†ÄÑí@iÿuW"½»a·Uɾ!Uα‚ˆg#rÞü”ó·ãòÆ…8QÞµPüŸ¾ûÒIË÷J2—õ ©6½ªm Žºˆƒ¢ÃÂ5—2¡ÎL¶Y/Lt{ƒáÕoÏ¿·"±$8E×wTæö¼ñ µ&Ãçß®cè•‘ÛŽ \vì O„S‘Ïa½ª[s!Úíç`®mn{eÞž»»Ö\«C°Z_¹õç®ì±ùº>ôm7¤Ü±«¾ [_¶¶û§¦Þ7:"añœFo·9I×TuléÑ—¬p0[10_©µßG06¼iI6²‹µ¾Ã£µ#ÕƒLãߟJÝìœzubɇ U×Õyäµ&:Ì<ãC}Ù ýø ¯{H¬2Ð;on¶ï¯ŒkÕÀp­–zœ¯¤ÄF†{CëO HR[¶ó×XÀίªÛÿ´×ìIß½=åáH¸½ÒgÅ]-Y÷ ©©º%iÜù‹½é÷¤>²¯²²“]Ã\½ø½6®MwÖ>EëOW³zÇÐßöN'í_T_szÇ­·ík£~µSó»soºµ†©˜‡Fákœ¯¬Òu…Á]!»¿k:ÆËóãz#¥oS™¥n‡/qþëÕ´Ùùº‹¸óB5h§âÝBÚúŠSŸkŽ^ÒU÷f ìÏÃášá¶÷ÊXY›ãËa•]«kZš~ñz;ï6ÙWYµd¿ ¶¼Àù†\—¤|·_4͵‹Þí9mD­7Lû†…g¯±Y€cá.Ÿuœ}<¬½×÷­ž;Þwín­7uu¦éwÓÿÞƒšÅ—sãˆá|íÏ÷+xs…¯,ŒÖí¥ÈÍÆØ†ÜÛ}îöœ]˜¿c‚›žxÖzÛ…=ƒYÛÆ…Øù ½WÀ2ø6¶^òUš:¿òÀ.vÓi«¶Ö^¶3ý3#µñê؛պ´ 6W¢Îoß5u»•“Ž/ÑÞ1ç+Ðíiõ}N8ÀÓJF…cÍÑ3Boot‰Â }OÖ¢÷…lpXk í÷¥çWáµz çë ë¿Öæ¢_á|CÀ+Vê˜á±™º»g¿Zx| Ü;qá56CÞ÷‹k‡àÄÐG_CµÝ츠ÌÏí®<¥sõ¸äÝB¶Øwbh¶±ãõúû4ÂùêÝû¯µœW8ß´õ•UÄ»œ¿;¨î90ôðüJ,d³l:^óœ%Ò$èzÓÛ¥5Å‹¼ †ÀíÀbù¯pþh]×’TŹf©z͈ôäÚâØ=úfð¥p¾Î:êyPia_®â<ýÖ˜ÇÄmvÁ…3Ü«I¬ôԕͽ3:Wqs¥•¬ZûòÙKV[©ËÜ_Ï5%õÂê×ÇÞ½6øÎÛú­Ãn™4Wbè>åX”{^4«îSu¯ûUÅBÎ×áWš_)Ç"nõlú•§¿|tº£osÂyBY½ÀyÏM‘.—ꜭOܸ^Ŭp¬žen™µÜÛ‹ îÌ?=ì±|ËÕ¥O §O¹¾Í¥Ì Uèæþ„s êyP>á.ÖåÄ­Ö^¿ôƒì|Õ$D ©wqþ*¥ÂXè­V§¸÷ÖPyžVõ>‹Ýí¾B»B À·ïRÌÒöÝÖ·ö¹jû/º2#;ï–ftÛíBÈ|¤×â6w¬+FKß«ÜÔû½^_³Ù9Êôþ–¯ßd”~ßšz°S`m€;ûáÑXÛqk¶ó®Rí=ˆ½­rɯ»t½ºVÁ’¸À›íx[µ2~ø;o—ÖÐî'²6ß犿Ãy(3à‚êZõŒ»&ŒR^a8œz„òs¯Ï¦Ÿ­ôc8_5uÿèæ¶~^ÿhÚ¹µ /ØÃR_®v•lã_=…·ÑÅ·¾}á”ÿxlº0Ø—@_[ çgoXÙ¡á5ˆ¡cz×Ðç…Ö}ñh¾kaxå¼ÜŸ¿Ù:л IDATŸk:%T!–®áÚ8§§v§^cï*­uê.O~Û7pû¦Dz­­în&®Ü±qûVë¡Ï¬ï¼;‰¤çg ®ná9†g¥Ë°ÕkÖôLºk™¿ÓfbH¢öÎ׋ÖÝ V[rn;F“Ñ圽k³e‹¶ ´—‚óY=¢§=–I¾Œûaï÷$6räü~1uG=âêÞŽždÁ=ŠÚêê7'õ:ò»q^=ˆóU+vƒgÕ–‹SÎ÷Õ/ï6Üf8óÝ¿*“~±v«F¯GVÔÜúöh6vEg#ï˜¶ó ·½9yHUÖÓ:Ë îXŒm1ë¶÷èëéõ=/à©p²óᎇî¶Óeg1ϳêjüùöF—T¼¶ECD½gÎ× ü÷ytEÁf»fx¿*¡—Þºumd§¨þyòÃõöåúkÞl8¶“»é|>ôÑ.œ‚Ú&7ãòô9ô¾ÇµrQÈ C¬÷Þ¹ÿÚòœÇ\Û móõ¶û½çƒ}T~Ø{!Ø»‹9$ª€”CÖ¬žºþO~¹Þ~mÞ/­'ÞöœoO_o¾ &Pw—þbÄ¥cºõ̹Æ~(¼Âù3;…Ù™…k k·lÀwÛO;tymñx˜?_›Ÿ.5/Ùy¬ÿóSÕÿ‰s¹Þ~5.õÂ啊Ö-7jæòÞÇc]‡èÏnîq±K8·so†/·yg^¹ìäÊ™„Ýu‹:^YÝóÞêÍ3*­ç|·/ÚQZ®mÇø§GÎפ'jZ·äl«Ž¹£ïwt ¹{‹[}÷ïߺ7ÃwÛF„3γ¶Öîj1Ý;Vu^™®o-Œÿ¶&uW¥u«ŒþáMz"gwF¬4¨Z¯2Õ\új}ýwFÕz›ã|55ï6奭´÷}}¾|Xc¤w÷K½¥`ÏùJÉ»úðÊjR´;N×[œwD¬ÐU WªÀû©rg<¹¨úïÒ,û­u.ö—ÝïAOAxØ:ìݳÿÆñrß­ãK³XÒ{x6¼»Aî[dÝÔUøâÑÎ:R½oeѹmjX•·ÖÒ_Øáp.Øã|ehκ¦;ðxÝ Ñ x½Jë9oîTÒÎë.çï‹çÜ*שq]+êÑ{Ž$;ð¸ðÛu>Û?i1éÕ•ŸVëj³ôã¸Mu xüÒo±Ú\œÔ\jõ¦ÖŠ“[¿uå*]\!üE8ó(ÎWÄìF®/`Èíxý*+1’4lÛìÞË&¤ªZï4ŠW{u¾´õs~eUÿ¤c¬Ûè®Ä*Ç^´±Þp"Бj¨ÝÓ”ÌOÓ*Ç÷õn‚}çkÙ·^&È+g‹å¨Rª|àÑWänÏfñ4x“ïИ¬°o½ÐHé À4§ùX~t(I=ÙÝðE*ù‰lá–êïcuºÑdÝ'Ý䨵ÚM8£®W:^ó}êFue7Zl¯VzkôÏ÷Xv sÒ79OgßíÕ6Üáë d½"Ï|}E£ svY÷îÏëF ^‹ö5éi>óæÑLY³åæ¾››|•5%røˆB¸Ž‡øáL>aëVKµ?C¹ÏÖiiÏØo­Î¡ƒíVV5…‰oä^9‘µZ?€ó†óý.ÊE4”mqhH¿eÍûÚÝíÐíÛÒHmvšÃÓd$TT'*¬îî³@h„8™ÉîÖ'Üir«›ú"‡ ië¥S‚îŽøSoy/ð5³²œvÞu?º©Z.›=Iåaª¿Q™¿ÎÚG3ÿsÎt>Êk™^Ó·¤mÓÕóM¬ ÚVv¸ãþ˜ý·K;Õµíã»ÃtsV5®èªq¶5:èã "ï¹Î &~iðìõ:EL*)ã‰Ýí›ïÏ×ÂVÈôÍèÔNKÓ&›~¿Z9¾>l¸OùJˆßA0FÛŸr~´µTA—, m;;ˆÅé½ëaºµiõÐÛ»·­Ó¡ÜŽedéÝF•AϾsdÔ«ÚÍ Çîˆ-âö»Á¯pzÑíÁßB•=¿»E‡Õ÷{•~ÄR–ïÜÖAFºG×$`!ÚyóSÎŽ–­“yÔ@aÑê0&”6Š‹ˆv®xä|®ÿçÛÄ ZÆq!øcn±mëÆFØØµ×ñºÇy(\úš 6“¦Ög©…PØèÉ£ñ„óÒôÌ…p3-]¸êÆzk­³Î›Gëh«‡óuàâelÁÎÕ©L_h&x8ðh.”‰ÿl7éîÙ,X!ø€êŠÿc<Þ…RBèÎÿ2à¨õýùØF‚0ù•½w.Ú”Øb¥[ýC¥Dó)(ƒ> ©mãí­¹"˜ÛCìÁ‹&±².l;Ë×Ã]éu]xcc‹A>1¨—؆uÍÜÏÕ7¢Àee¤¬Ô³öF§F¬Æ—Îaã‹ý˜ó°?cƒ‹\Žvíý851„‡„gì~Sënç/ßF11qö1v~bâO¦Éù‰OÌ%ÜäüćÁªÉù‰Ï‚Ÿv~âÃ09?ñiðÓ·™ø0¸Éù‰ƒ•“óŸ…ŸŸø4LÎO|f|~âÓ0íüħar~âÓ0פ&> 3>ÿ0ÀA*ïÚ^V˜‰1ÌŒÏ Nr!U}0O§ƒ¥Û¡pI U Ê7i8\)Ìx8ˆlµZn"O‚“ó_Ǫ‡S‘>Ë+TœßÎÂÛ2`# óje¯ƒ›vþë@¡Âe+´²^ò‘Þ|«×P6@pΗ7êý4̽ßY0í¸ Û«m‚é_EKÚ#Ã6ëÁ8òR½†iç¿–ýO-öªÖ ñ–Í÷Ú³¾è…ïJ—L|s/ñ7Àû€âð±ÌÖ<TÜý+õë>“ó߀îÏ<õó ò d—‚»äy6URžŽéÛ|(K»×¯îq>î¨*iA\Þy9£6ÏÇäüw€:š‡Ì%ú˜¥Æ`䆗ì&[·*±Î¨ÍÓ19ÿ-$5úñ6,)4²: ©/#Uî(Ðk8£“ó/ÀÜoóMàTkéU‡óqËL¹0HBÔ¼dø“éÛ<arþ›Ëžâº‹{^Ì|¬lJuÃù›žsØçcrþ›PCozúšñ ˜Ê·¹œ|âWð]â‚ÄŒ¨ÀÞxã²Çy˜¬²ZÅ~ý¸pž¿>ä‡arþ«(‘G½·ó¬“õ»Z‹m ׌9ÇØýÄïÂUœŸÛ½/!¤¼­ïÌ:n–ä‡8 ï¬_¥$•L)%é;äÆþ,ÔºÄîn¦Þ‰[J?F& ª ^2±í-½9Úñ]ªÅºy.f¬òëX³I¶™à”Œf[ãíêðQ Th«•Šp~\Ðø]LþËNAZ=5‡Å?ŠÉù‰OÃôm&> ÓÎO|ìäüćar~âÃ0÷˜M|¦??ñi˜¾ÍDÁhëüÿ¸`6íüDAsÀ¸Ár~b„àúå4'ç'> “óŸ79?ña˜œŸø4LÎO|f|~âÓ0íüħarþÓàô§ðšœ‚Bš·_¶´A’/"8ó§WªÞËŸ÷²é]«P+%„råή÷G“`#ŒÞ¹ÓŸºK(N-zÊû_×S¹ûUçyëÃ+­µ’¿ÁhÉØ>qÖ_ÃûØyo$M´!”Iãüx“7ŠÓM,ƒÈÑh bc46­õ4T¥³qËve1aBÙàÇAÐXȉ¿!#±áÀè¥\pÆ(e£Sä6>P›D¼eìI]D¸[´4Ú€ˆ×ÅhPT¾'œ&‡•³&<<{ÈÛã]8ŸyÓ€èÁÅ"Ñ‘p¥33y¿ |¹)©HŸ•Ø€K†,Œš9àý’âp~AúÀw·dª÷|ßy8ávÈ{[rº+,½9_ž_nwPÞI¿§¢#iò‡ð&¾Íšq• )Ï>1͆:ñ<¤ä«ƒÛkÝdHðéid$-’=#Âø+hŸ ‰ VVvBú8Lå1Ö¤—”âW«eˆ/kù¥þòîð¯æ¼ñ¦‹ìRMM^ÓêÑ!¹1ù‚M$îË=ðbê܆;®äDRÂ;u|§ÀŒ»’»Ïy› d5ØB/$ué2 E?Ž¥ˆé…Hç{#¼šó™7Äk?†ؘ[Ø—!"µ˜í?2ûH_ãüñj3~©Ô«\Yì=ˆ |‡óŹͦϧ¦2[h>,*ˆxEzœ)ÄBŸWÿ^nçùw8dÙ~8(£UËÝ"-6ù¾©s£>uVöcG³'œOf6oR¾çÏç1b‘¹»lŒ?°¡Ô\rßtœï¦ÙŠÇÌÎâJwy{¼æÖ²Œ6U­Zëï/ãåv>“õ¢“È—A­ŸpÞ¬,)¤¢‘îÐ’ÃÒ=-=ê¯gËG´¼mŠTŽhêÆœïõ“»œ×Û£Ì}æšô_*•§¹€ùŠEx[¼ÜŸ/»a®íâ([­_ÐÑ€6ª´oÉ̪q¡ªsmžÃ^ ÇÙQU'ïTæ°™P#êuI¬†Ìîv‘ ¨\ÿ>¨ÃöAÈlš®ÌfþN‘ÿ ^Îù²3àši-÷ÍîŸê%W»N‚iŸØƒuÞ>Êbåáj>°ÿ€•óÉsÍ»œ‡\ì;¯kó,î¾c¹›B‰vÜZß´Wù ¯ç|±¼GkIzÃo7&îά³l›·L œÍÔÙ6Ïv‘Ã胀gÅù4§î›MÓyͳHOg «‚n‹s÷ð[¿¥Í¥Ý³ ¯çüJ½\ë¶JÞËØ%oDé7¹Ü‘¡œè›«r¬jwV>îÝ>ݬ J²N 7Џ'qçíØÌßÛcÆQ—þîþƒíÀŽnªŠÞ þÞ€óÅtï6œ»Ý2ÇQát¿:zͲ), ”.ا>Ü$#5¦n0<K+º¥¡ë’¥»Ôߤ=_3îÏ+X¨þ:öX°Ãmc±Œcyòõ—ÅmnïÁùP\úú`?œžlO–x›‚éóaüð<ãüªêIú»ÁòIÕu6ÊVý1ôÍ4Ðu†‰„Ô—ª¡û"={Éaèý V΂È+ªG˪¦rÕüñ`å;p~TYŠŠKÐllÓòå,å:rÃ îØºþ|ù*ú”<¼SäÄ*¦>H•…‚²•b¸ulw¶QÈwØnªN-sç`|F~Jt­#–³b& j÷»ñÂZ1Òº?lëß‚ó¶‚w½nðyùœÈUÏŒ ØPäo’+°UÇ»SÄV.³ºÍ‰÷›y¼Uˆf´_ÇnZ5Ò¸êY¤U€ô«`˜Êo}i¤Ç³­f ½Þ¶÷än9QiZA9v/³ D¬³C ²þÙò—ž ço^uÌNÖ¸ƒi.2žnÆÿd*æwí»±oð¹QkáCSÙÞ1¨twÑ¿.š–${Û)Vn¯ÉdKûF9 ¨Âè RTžÜWCóæX&‰ÆÁ-;üY'¼|¿ÍŠP±ž@{ OS¤Ëµà”&•È¡zW¨©qiÁ;>»¿3ºøøÁÉpNšŸäŒåaâ,¹¤¡,¾œ’"MX(»=@,Eúr¥2ïmšÏf†˜2Ê´§ þŸÖÆä¢U>N´wSTH!µVñú¤6Ò“½·ÎØŒlœóáïú6þåû*+„X­±ªcânß+1/=»NKm­™S£Z(î‡Üby¼]âÐ?û3Tï,P²ú7úÑ÷ÎZgŒ½+¶¯…Ë}dä_ßéûëx+Î?þïZª‡ãÜ¿†æüÄŠðç¥É¾‚0s"O|&ç'^çNˆÝôm&^ûÔ“W“ó¯‡~j¬ú6/Gxnª?9?ñjø|á/aú6/‡?_q4œšœŸx1Â}Æôm&^÷\;›œŸx5‚|î¡÷ÙW9ñ±°ƒ”Ö¿ƒéÛL¼ì\Î…™œŸxè'z7fÆ*'ÞÏÜqc'ç'> “óŸ7ýù‰OÃŒUN|&ç'> ¿¥oóøx«‹C›Þúƒ<Æ_4ÿýöò=ûOï 굆 ý¨³ÞCüç½7Œ mv‰•2Î9 K7+…V¢ÑʽY¥ê_®H±`sP(][ÌYÒ,Yç/쉧æö&ÛkÍ€t†ÑR] +!AF*Åù¶½; =‚^X` ‹D[y3Íöû¥$H(ås@ž‚ÏAs\1Èj@(Û¾‘ŒqÁ95œæ 8Ü4¬8…òæ}³ÐÔ¶™E/TIi¬ÖøbmQƒ’»›†øþ ´nöŸkÉ™’q³ñ¿B°íFr¾m >6ôÛ žý†oSD—†t[®F³Šã5‚ñ´UëK×S*ŠíLj &†:y$å:F]§F¤ ² Ó¤ÒX×·«Ô¾îŽ~©P)á$Õ1\+G9/è;‰ï¤I–zYO' ›“ùmŸj5±º¬£„„)Á_³Äb™â•~›¨nŠPUíÀÛ’»MTªíK«€|«rÍZF™8ƒ^àð qTˆ$…á*‰±Uˆ•øU ®1y¼• nZé¿ÞjU·T+9«ö‚ÎÊŽhçª^•øÂ%ì‡I7¿[î&a§‹²j RŠgê¸0$¼SÇ7ó‡Ë\L½rN¤BØÜËš£þ`‚’‘ð鉻oøÖAøn¨ÓU··Û÷Npæ< ’«./ØÊjÀ•ÁÛe±ËÒTŸâ%I}ªBZ3"l#³Üy ´[í®Îs²~*ÐZ Kçq+Vù/X¤Ê–»wØ^¬ôCÞ2“Õ—óºFV.í„ìa¸ì8  Ìy[ÝÑ-Gü0sùnü(÷Ô{LUò_ÅN¡ØV£šøÎ7c/ú¥[•Tœ7‡ŠÇ :¦ÇñE4»Ù’á–šóõÐkÇE4"ä”1ûl;}ÈA"›rO›ÛsÛ•´{÷ÝI/b«”–󶹺‰½ðô‚÷çýá¹b$îz:Ú²Wr’8ï¾ ÚzØžófË2x?7ùkðhΣ ·±^{³^•Ói÷œ?”¤Óœ®k“Ív_ÕR“5MmšJÛ`=JËZA¤Îd÷‘Ÿ\tòRy´l6l^HÏ÷©­F"û<݇œ0Ö¥‘_övª¾;W?Tý jŸ˜åÐHªz{(¥Øž&w~¢]¢Ÿº_T¯E_ŽGûón7Qo‚1²á|ë@nvÙi Ûå|5š˜&{Âêy$ø¦!CòmôÑuíBœZî¯å)`t4—,ÎÉÁ¼ºØ;q²¢o;·þ|t}ˆ÷êØ'©åœ¿¥ô"ÇKM'Á¢‰¯Ê÷Ÿ‡dçãœcŸ¥å|ó+µø2†úƒÒ‹ñh;ovœW5e+#è÷œÑ\ÑfJZAnlÑ çÝŽÏ´nhD¦ •®4rfä ;¼ïÊeàcv0ŠJêrv^WŽ?çü> •Ð7þ0J9Fø¡òŽS)xš†ªÛ…QáݵìHïˆóM×KˆÕ Íhãôüy³›¶¸š²Õðyà<~X޶Ótí¼ÜØÐvw‹ÆÕYƒî—lt&™fö¶2Ùrv +Ð/‡~ë°¤P0bÛ!ðw£™‘¢zX]kå±O°n²ßó’pEâÀï=KSá¸{· #¯¤Wÿ•“ªvõ#h™z{OÎ?zÖíb^®¶T•Savœ_S·ìíZŸóf»²Í©vv¹ Œçµ—¼ùD„Päà>ÃìVÜêm«¥”KlÔ8IlïF«—³-?³ C²vCÎ÷BQz×­õ=ÎoÉÑö÷t>Œ5Õ€­w¬f,O<å-}›Gs¾²8¶¶³j«U½3ÑçRwf€¢;õ·ÛSL;ªÓæŸUL3Îb'¹¢œ•3Lº£w€Ù¨X.ÔXg š6—Þž²æeê4ž4¬å‰-ÇWïs~÷ëú6¥œ°EC*¥ÙÁ[ódQ±äb7Vx´æžôûˆ]ÿÚ”‘ÊôTÍÁã¤ï·y4çSÖ²·=×ÍÌÓ´?Ãß°ƒƒ[M—*çéšËq¿e¡ ˜×ÁÀ´ž#{#þ‡¬ªm¡öOð_³wn çónŠÐ|Uí#  kåú»ssthçÛâ¤ÿ˜µvdôØ¥ ½/ãê¨y¦vË]yUÇÕ¬IÖµ–·ŒÛ<|z×v ¬¹ÛÆ ¯9os{ëCˆ^u“Zºó;O¶Ù8âvQ”4Ô®A”s˜1çuß CÂ콫ønÅ•ËÎÁõ‹ÒýèÞÎ'þÞt¡{øê1n×›•åóÒãÌÍÁް49¦Õ³xKSžY¿UŽá*ãnwèVlÚÎ}zKÝ¥ô"+ÍQÿáœOÛ£Jkè†Ú~[ô—-“Y®9¨æCÒùΠ6öØÝÐ`·Çû}ke'Ù_Úq³úýAí,'Û&:6çSmç f}t¶¶ã&¤EwM™ìê€ñ–ÌÕœˆU_´³¨Èd›«)fîÉ”{——+Í…-œjoRú4Ê.v³ºLnWû:q>ìÒ¶Ü[÷>sÙÇï%NÙ¢E³µ£`]ÚTmU©’Î7ë4Î6;Ò À C`ŽÕV§É°öÔd †8|VÚO[wO-TpØ”uò}GD뉛õn&[îÊ>+ðºfIfBâ‹ÉÏ¹Í c7ªn–RtÇbIÈÕ¼U!nd«ö"£¯#´û¦ÉYï]ÈE2˜"wÖ‡uå,?lYSÊBþéšõ&×lì³Q‰/Hq³úª¸Û0ö{œØ¿¿±÷’-\Iº7@P§ª´µ¿iwª]·§W+·i3&9T:7Jbrê}Û•Ò²×mEN5¼óÌ¿iö=h»sm¶‚ç”Ý®D¸µØ‡1cM[LV9¯6yrõò¼ÿEÙ{¼õâ-3nÛ³× ìµó>íÖ[ЀäDÐ¥ÆBÊP‹3xüU3BÁÏ´“{WÝ À½Í¥õ¾ÓH/įœ“òkbê½>•/;„›Î=^J±ÁµŒm§*|ÙŸ}\¹±ënøý"á ò»§Ìí78{#©‘¬¤¤óÃêJ9g¬â<ÚÔ£b»I°·F+Ì[,qhØ~¡8ãlºÔ~:xK鹨“Àz㼃ԴñOÛL+ãÁi­aÇ}e6B€äÇõq‰gÈ>@bñdxðÉ(î/ŽuacA9Y£TØI~ˆ? 6H¡m—ò6–dëŠÎyçÎ7-Ô]WòyxøÜâ. IDAT³ oÓÉ‘C ÏiHƒ½ë ÃÈ!4:$&î}•óÍó~msü¼œ¬z¾^òÇóîÜê˜ã»sMìÚR)k=:ƒºÙÄê4áǪ‹—wêøà·8+ûåÙï ^rõL¥ÃÿÑ®”1ƽÓý‹øEÎO†~DENüü²ÖG:aÇÞ'N51ñ«vþ–Ž8ƒ­×­£ø›œ˜8Åïk:¹Ä!” ­QíCÑNðbbâIxŠŽ™W›ÌF2ûÓÐO¼ ÏÒîs D£­B7)?ñ:L½Ê‰OÃoÏa'&Þ “óŸ†Éù‰OÃäüħar~âÓð[9&&Þ“óŸ†éÛL|&ç'> “óŸ†Éù‰OÃäüħaÆm&> ÓÎO|^ÉyIù;·rÛ=àÏj%Þ/ûqðm\M•¯œ¡—äN1ÉšõßÀ/ ÍÈq"”=ºÊ[o‰Ÿs^/DJe±Î)vLü7}€ˆ¡W¤äǨ2 ðïj¥Ë£LÚÇÏ}aÔ•ƒôš*àØþ‰ù¬ÛšF¿Ÿù1çÿîI×AjŒÑsúÇÆ{i×¾€PI D]»¦mJ™§:l±ëú‘¨ž—÷Q`—®VïA¶ïu½Ï<á§œG¡æ¬¤zÌ™w†½Œó«ûœ÷”þÈ ¯”“;¹›.û<’çn_u™nýû†óÚÇmèQúì"ù—Öà`è¯ÊµfÔEIW"|+ L¨ò Òï[ÿ#­Óœl=¬ÙrÔ½¾´VÙ,³ ±Òû£{¾“Âü9«Ô•ºC[¥AAÕÞ GN»¶UƒÁ´NÐMØÊÁãŸáfPÚßèš~".fW‚ÿYÌàö¦5éçªÔVi >­w¬ZÊmþ(ÌL¾ $•y³BoH:%®È•˜JY=}†—án–KèÒ²`‚<8ü%åyHš¨>”Âm#ŒÍ\îô\+C.Ot7þc×5Y’|7¥ ®q2쮀‚ŒG˜dÿ¸•šJ?Þ²xY{«ßV í¿Áǽ×qƒ _³Š¿„ø®?çrEÝ Y¬… ˜¾ÃYHßuA1Þ-&¾°è&ÄÇÂcHì}ææÔVKRK§6G‰YŠ·ñ'²ÃH䓟'ªSþc“¸Ä÷É£8d!€|?§ÀH€Æ¿AN>ÙChJ<ù¡éADJRŒ]=À4:04Ü•æ´4œŒX é^­Û§ŸäKrm¢ ‘Ø¥â[+žûNœ`“øîO¹N $‰÷ Lƶ¼–6%!J7•û\&š­ØÓ\4]œÆÑDq޹Áiˆ?’0ÚjŒËÛde¬L6ŽS®”¿il•Ø8ÜKÔ-eUïÙ¡ç!<‚ózÍB‡úX}:%× é&’ˆ‘ÍB†›øæx ä¡Üa»a.@è1b©.Wø¡Ž•9è0Yæ®À¤}*Hœ³NBö†”€&–Ð~ñ®.þÖm9ñ KAi«ÓÙĻȔ×úØ; ~2$2¡˜WDBŸˆtÂ/)σ>kÍ[œÃuГH2L"‹Áñ‹ÿ" eø+±ˆØ¡ jÅ1ÿFJ "ó¦¦Ï¥W@y†&4V#$š]ÂÚP _X¬P &„¢Ñ˜‘3 _ðh¼#d!å«qÊ)¿0‰·ˆ°’Ÿœ·“’ø/L½)¬%Øž”ô j”ÖiÎ,""wgžBr˜{7&L"˜Õ¡‰ð” ²<á<_ͼ¹HiD¤B#Q)Ôûæ `ÖÐäÎsh香…ÌFÑ©ÂëÔÒßM4è‘;ÑF`!ŸÑÃSF^†œ¢©á ÅÂ2ø˜øW°ú‘0¹1}fzìžÆn63þ”q+,ªë™$©ÀÁxo`̸i™cJ”¢Í\_$R˜àhG`<0  ƒTR±+¸ÆBÁ ƒ1è ‘6\;OÐ@@f æ¤Å)>!Á ô8ösã*¾@NWƒU¼­Gòc Æä-Y‚9Ìx4"Ì(—&2,&8gÞÇ«ÁÖç{²]5ÂY¤¬‰gD) òÛ FÆ€5c ôDµHu$¥ý[´.tQ–BuŸÖ@ØòÒ”jþœÇ~œ<ßE!ï±qhÆèضÔel#ÀýAÿ3`BB4ásD:0´ÿÙ¹–™[ЈÂ$Ç0³JI 4wÀèZ6 ; Ç*ÕÉÆ9àÂâóx ½%lQµŸò%«dV£Ï“sCŒEÙÔ¥MúX1š§Þ´I³p×· z| ¼ Þ$Ëêo2Úeð3,|8Ü‘cÕ8"/%u.¾` è$·ˆLbT¶—kê!ðâ±êü+›î(éCÎsfm /¨iÓžˆX£úµ#U|$:ZÖ9ì=!°bð±òäq`Inød…6F`¥úÅø´î·á®]ŒNžMïà²1OmŒ¤K ª.Ri+܈L_ø4¹N¾¡>ù\¦“ï™xçéR8H´j`â ¦ŽvØ¢-Ï´ù‘JЧ¶“µXÛ4¡Dc!r=ù5W2KŒÑ5_;RšIl,Dœæ””yÛ/ü m±SDS°zÍüæÎ+xUCÞöÖº¾±Hvä]¾Ç6mUë-BœéÁÏãð7ÃLÃ:šÚØü"õùøwKýžÍagf…ñ}bÁ”7ÁgÀß[œ·G·O¤{ü=–Gë­Ì¾Ô‘À:ÑØÓq¨½ÉX†è¾Do_÷'D—ÌÅ?IŠmAÊ/±fµú*?»†÷É#¾Ù0e"L­ëG’ù²¾„ìbzOÈšäÛ{]‚ì†Í¶l»N ‚øÖñWŒCäÑá BÇ Â㜚çK÷#ÖÏà3 ˆB_¾òq¢]äØ}4P ®ÅR£º—Ùÿ.oOJ¶H‰ž«³eb¨á† 2÷‰„r§|«`ÞÑÖ`LìÑýã±3{=:usy*bq)ƒÅ‰/óÏÄùÀÓ£“-v¢·Ñ·ðð—ç‰Àiœ€z¼BCPò8A€‡'+ º–ßÂð´,±)ÒŠt¢<P,€M=#Žà¿‘,$ãh”b ™¼ËX©ÂÃ<†“ÐÓgÒ/܆ós;Ÿ÷ wRÚÕdªDòôâß8LQsJmÌy î?„ò€ÈWlLJU±—u'MxmŽÞ`ÝCË¡C ÏFOÙ§|¥·ÜûÆK!¦ž¼ ۬Ϧ‰c,Ztƒ($Î Ç™!¡7Á¬S`ôKrSŒ`ñphÕRí‚hï ÎFyŠSyðØ’MD\ÜȲ+ÞGƒ…^…)T¥€Ú2©ƒ‚ÿ1K†qÑf½¢Ê@D DÚIô chõ—”^•cŠËdÅq“ˆH~xާ2H±güqjºŽw˜FÝC¼fó,Äé„D¦ÖP2ùìØ±Ž´Éï¶h Ó\0~‰I|#ÃÃymü/<žƒÇÙ¦C2~Êù’|I—1 ´Lö@¤9.ˆ‘AàZ 3I‡”L“çYXr®MÌù<‡:ÅöXd˜#‘{™iŽî/|ì0ã2:ú.,@ßñ*ù Ë©ÙÓk@$Œ„Jpúyc8±€¹FZsƒØ ì–«J”¢K> ˜ôRÌçá¯ñ~ z› 1¯'ìC ň7˜o+œùÃS§%ô–J»U`yãXʬð±,¸”¥æ( 'Eñö)iü†Å—ÝwœQØ4“&6ÑØ/¹U)M1ñ.|8zfiùЧBa Þ&ÅDyª™äQŪŽcÍÈdÆaåÐ*àÔ—Y -S"yå¶ãŸÛùXùTˆ|Þ"$7,þy+oɕۖºqVƒ„9“~†«€Aåø•¯r2²é…kJÒ±ÁŠfZ®ÇXŒGæDÊÉç°†ê!€c0±f(üxü™ÜŽ9xX#„{Øè3¤ Ü=DwØÃS)LÞlošH›Ó‚ |þb˺d™ýµt HÄoœß:ü^Ëe&Þ4àštõûô®˜Å)‰”á5Àt¿Þ&Xà­±•jÚáþ^hŸVª7í”ÒòèöÈØ¢°Èm„—0ME†]Ü8í ){¹ÁÔÔ6×Sì°xKkÆÃ ™‡1ƒ¤0UœÖ¼r‡ñ#âóï·Cz‡Ÿ0Xÿ~Ißö)ŠIqÈÉC"ßã$Õ—¾ðÕÈ^“ QûâlbY“šx5| ºú×zʈ ºî?;Íó‹x@¬rbƒ{͹ S&¡ÕòÒ«ûOÒž¤ŸœæÀ?"²?9ÿP¨×‘…_õÚÁ‹ r·ã—÷!×¥19†÷sä»tÛLô ÆõKpyQד7<˜09÷­P×ËÍ´ÄŠ_»®\'RkIÞ÷Éä|Á[þ@H á„R1¼¥^®Òƒ»a•òÕbr¾gÝ(ÿ ¼âGÇØc61ñ§ð1œ¿ºeûpÂöÏ~;=?ñ)œwÃpq°Z«²;ÂëÇÊÏÄ<ú®c|1bŒü+J“Â_â¼7RJÆÍwŒ¦ÝÎÃî¾Àsn\Á^ oí—×”‚sÞElà݆»2è ”Ûîãkªfå“VŸƒ¿Ãy<`Œg‹Ù7H¯‹Â$ —¥\à>*/¾ud-Ï£#š8êXóT{E&}7Öç¾$B(áȯ,½-þ çA$6õÁùãoX@ZLm©”·~Þ¼ßÛ6€ûØý‘ÍéÁs…•Z|ÓËr_qmð¨Ù—ôçþ>Þ‘ó¶ãyåó†Võ ·õ©ë¹FN‘o +&RËÑQ~ÚÛkõˆô“}ÁSÁÍ â;Väïâ 9Ÿp·ØžF+y½…LRqcu ÉN2¿Ûì(3Tßô»QéÁ‚Ýý}!ô”´v† þ[ÿÝ8B:Â<ÚBÎÖ³{´L8ñï™C6©5Â:R9« '0ŠnÂMl“€ô_kð8… Ij‘Û®î&°ˆJyxÊÄçÿáI_R5À1#p 8pÛûjzšŽµØÍU†¦CvEw‡œe ñ’j[üªÑçmU ŸDýÓ 'QSRØtˆÚH…úh–#AF ÓÙæ¥X<°ò•H€‹ˆÝ’meSªt½8YXÖ€¦æÇ¥óãrI=KV x°<–^˜¥®+²N…¡Sâ©s±lýˤsÔÞ㨗DAü&Š!ŠMâïQÇa¬OУpv¼%¹d5ˆðü+1I^ sà 1®ðAp~$©Ô²\ÎñÖx';oÁ qŽ‚aÀ VÎoZCV¥á\qôÁPDan .·PçQäDå‚ÌE¥UˆR‚ GØ%ñ@ÔÙ$GBQ®bÝ^ãÙ:ÒC˜ÑY¤5já€õ-ê7ùø{‹ZŽÑpán œv6, ")ÁbNÚµÖyMP>$Êˆç ø¡’˜”:›leMÃtÈô™#(y²€0›ÌfÀ’xçÒÿEY¸¹@e=A’H$u®âØQ|€ÑKXì]ÕHˆ…¥TÉøæÔuadD¥ôø  ÒÀF—G¦vx%Þˆó @jÔŠá€%8™ÃÞ¡hÊ)´þ¨ö§ÒÄ4Zp—´;PþûˆNd…4‡= Dè\Vj¡«¶@´{ŽgÁ„ž+îØ=ʃD4¿Zç Påa(·[$M@Ë…¢ÒK:Ÿê£gм?³I¥Ô"Qé)öš´ÞVBV!K~¡œqþ»§Ê/ ³X‘tumdRA+*CÎÁ] ‚ëÎYQUQá-C–WͲ¸ôpà-(þ“/SÝ9œeÿEHóÎÃBˆ#­±$¬·y3aÕË…ãÅÑÏ’ãíÕöüš¾(š°è“‚¯ í(Pl†‡T+‚78Z$ùŽnÌ¿(Ò$xƒÊ"€Šž^M«ª~Yõ¶c&d‘±À@…‡ø"Ò®P {¡¸àú¸$ñ[Åhu–°Å—]cO…ø@“Ò Ðr`”¡û‘j‰ : ÝÖ³h¢»DY+ˆñæKˆK±šó]™Ä-ñéàë°$»—z§Ì®Ç,9߯Ûpé“8Hœm&ñºS]¿ Gšˆƒ§Aj(I¶BÏ”‚ˬDüB&cÍ Ø$„âH  žfH®bÂ[u¢“¥I1W¤iÝ`òà’/â•$WV³OB‘<„Óà–èèÓ$à=²Í&M0žÔMW€Û†ž¨á‰,`H}ÒÞŒÆ8ºèL9µH˜˜4±II\&*ãñYHТƒ6¢Þ§@¡D‘5bsÿ¦iX0Vár’ÛL;ì™iæwÀ;q¾JµÙžì %Õ€L*MÄ»tò2þ/»Æ/t'ñï@Ž(d:ƒ’G êdjHâ|DS7%/¶T†Ô•‚ä ÕPyR;&²³mËö,ý2?¶y9| ŒøhÔÍjJWÔ€”“ÇÁ Daªš`f t‚oÏ=Ž 0³Íª1 õ±p‰®¡–¦|…Ù¥BE×8c¨êÓ˜Hš‘ÒèžXg:XJ÷£1!'4q– ˜°•%% ‹5˵TûNœ¯ÅOÛ]5 Q¦’~ÖÜNbx¨ VV©ÒÐÖ‚Ù¬Bm¿$Ì0&˜d¿SH^àpÊx–ˆM-° Cb×AJê$j £:}qµLµ=˭⃠b“hR10?ÎF“&hUÊ,hq–‚âžu4ÞXg‰6‘«@h  -²{…ö¬,ðO®ò|'MŠÓ|_8NjK.½M‚n(Y‹•ióv$ŒÙ z0>îeIÎkñ™ù÷Ἧøs\ÊÇ€1M'?=[sÀ cQXþæ’ö5H*.’Ê0<ù0 [ÇqJKS4S„JÃ#.ÅÎëMZ’Ã&2ë)Ä6Ê–²JŸvÛç!¤4ƒÈ»99dJú“‘h®ùyDHÞð¼%dͶ”ú¿@¡ß²2JIqìŠs }†ù€q ÍTpÂ$T¸9JPĒߊÿD->ÊÊQGM Åä8\â[ 4¾H]Qbè ùˆëgÂü»xΣª*®¦¥ `á&µèÛ/Wvà ¤J9² •˜…¤4”ŽÞ<þЫ$¥óKæqýÖÛʧ¨W'Q0°Èêm*|eeÔJ©ôšù°„;±pX4…Þ>.;ïC*¶Mk¸6%Šƒ[Ù´¨>ˆË¤Å×9²‡õQÒ†_¦÷‚Wº`a½K( (”¨Ö—{å· )á`Ù£Êw˜xÑgáW”¼íéÖïà}8Ÿ6 S’u?;臇=F0fø7Œ“ Ìl'¾ŠcyG{Ùcñýšÿ›x£ø|I#¿ÅÏ`ã¬ÍzÛˆ§Û½^ì…=<ÀÇédð7Pú{Þ‰ó0zk%„úÊÇ¢çé~ ­ï¥|¾:þ*éX‡÷•]úe¼ç¿õÉÁ“1Ëÿl¨‡s*<.f¨%ûÖé›ÿœóy±Þi¶·êž½–óFòÇsÊ<ì–áãŽÁVøãœ%ÏÇN´3öÐוÃx&þ}èýaò@Rúêé΋ð^þüw¢AåRŽü)Æ•za¸A³¯ÌÄ/Á-¿Ñ‘>óŸ«´’êƒ?“óŸ†Éùw‚¤ßQï™ø&现ö?ÛÌõ¦˜œÿ*î,Ä;J˜B*Á¿cÁƒ¶5 ̵Åå­09ÿE˜;am›¶ Ñå;G‹hÚÖ.n}Õ™‰‡`rþ‹0÷VWU ßPœLm¤r% “ó_ŽM†&ïc±üˆÚOwþ˜œÿÔØ†³ï¯ÙOÝõõ\LÎwàˆGõ¯†cV½U$8ܸ¯Ùæä'a›Ža8k´YåúJ“êðÆúE¸¥ªù¯þ[:ûW09ßE$öæPTϤƒÔN¢#*óav8ÒåQnisJ@2‰KŠb<ËŠr€´’,¥Á †'˜¢¤tˆ¢222ÁùD”çûŸN]¿&ç;È;×\:—¤—ÈH8ÀÿÃMR?ݯ4]ƒÏ…ÝŽæ“/à¥$í>^d  Ü6£’LyÂ%©’AœUoH’zúŸÄ5Þ “óGDn ƒî ì¶ µ„pÁ@ª7àvÞ¤õuSÔ 2N#ÆÒNÞ d™]„ ¶ÿ¢`“¥¸/3¨2ƒB=ÎRiu½¢óxŽ÷K™&¾†Éù#Ì‚:0 )YhÕú„!=aI>)eHZ ´ Å'!IŸÄ LVÁ¨%¥@Ýâ*þ‚ªFH 2«  ÆàMêyŽg`rþOEö­Í\—.ÜŠêJÝ¡{n‹lÖ+Ë`YÎ þîŠÁŽÄ÷(+ðc @Í,:÷I žQŸtTÖ„G}ƒ‰_Âä|¡H4qz ™Ï*™yüjH Ô÷¢"IœVr!9„ceÒIbã1œ«®Š['öSPK2YCïÝÌÝp8½Hø±yå €ÿ“ó}€¤¡/ŸDP} ¤PbªëèÐ “X\XÍr(éÔœ"(ë=#¢‚>NaâJœKRô*ú6T Û-ˆ'¡>¥Ðqœ` ÓMeÖžx8&çûH‡’(n™Ìb0 Jî7q‡7 Ô²ÍNr%”åpÌ-ˇ'¹<”Ǩ˜ç’ºžÂôéˆrB<4Éš,5ø²ø19?€(ñ¬5Y¹¨¯’‚7è‰i'¥b=ZjAèQTe}f?ä/qNô ý*O} ã J‚ ÈñŽòsiÿ*&çðœrÜ` .‰¦¬m Âò'É.·Í8e…Õ‹$±ŠŒþ%‰.Émß~}k%üìÜOü˜œ!ÀIšÛ'ŸŽÉùWÁ‹…(”†uI> “ó/‚Ž.}À¬˜ôþÅÄäük°JȆ›y6&ç_ƒPvÙëƒ6&ç_X¼RJ¾XVó#19ÿ*XŽù‚™äaâ&ç_ˆð_%ðø3˜œŸø4LÎO|&ç'> “óŸ†Éù‰ÿ«Ë&ç'þ'\ „MÎO|&ç'> “óŸ†Éù‰OÃäüħar~âÓ09ÿ-„û¹®ÀO“OüÞƒóNuŽB-Å•½åÎHÁù3÷ä¶Púó³ÔZ »ž‚G‚ˆæÛ›j!¥ýlm­¢‚1ÎèÁ‚Mpî£öw¾çÝÒ‘žN‚Øônk ø5üïË雾U¥?|^à QdtÄEÆ9Ô»©:[@‰c¢¯u¾¶ cO`µ¢Bïg@õï:ŸøœWËrÔáU‹°†,÷%^"yh€æâ#µ\(Ø9Ä‚ùqW•›$‹¯¨øöž!u_¾Ê^åR/¨­è:'z†!PB>+Õ[pžõ¬4Ó¥®$œ40¸§r^ÿ˜ó®ÜÁö:üU°Ü_ÔÒæ%á{‹.‚³Ã-8 ö©u÷r¼çíBImë’”Ê×é•ó¡ü‰ õäÏÀÐì²­ F+]Rœyï¬(WZL?i”Zª×ŽÖN&Õ¦ùÀÛÝdSܵºÙ&?݉Yá,gé^!§­Â'yVÎ|.Àöî5xqtDëžÈ}j3Gaw ·ÿXBí8/cPò¦˜ùG4FœIÛTÈ8j[AI$çÌ ênÆîm`ˆ}Æ‘[_£ßJò—œýoNx¶…zE€ª$¡,ç-Ëéq6…V¯[í¦­Àtº'K*ôq–é-§Íao¿Ãü°¦h ¦à:ʰêfY¨0(J‚å@[ÏXWÃíÚ©=ç V‰ƒË SÄNI¶{Ñtw¿¾ ”»èŒ­´å)æ–ÂDƒ˜c-þMÅW©èî“rø`Z*^sž•»„6Ñ ÝσT,^Ðpëør±ºâm%ôÃÀR,š e…ˆÅÕ¨…oà±ùÆÂƱ s¬üZɯç<˜9)(΂¹B ‰A˜”@csBã0ÌÕé"¤Üì :µ±ñ·åÂx!¤[¨Ùb±,D¯m¦ ßlw4w+ H˜'•!ý"Ðzþ·ç¼„ñ¤tBJIò‡Êƒ! ÉZ_˜çWW ò§áÃ|ö¹1aaÀ‡xˆ]I¼—&‹ÖÎç„vR펜§^0™4ô5&La¨o3&+ÐÆËâh m€UF)¤Ð³^aŠ·œ/ëOãõœ97¶&ì g)ñ óï¥ 4OœßE“yNLÉòýÈáÄAym}½8Zý›åT`Ó5Ar>ä _öøfÈ+Η°¬†ÛGßÛ"éFŽN •¯3, éîÁ–òs²•Ç4>_âï1w›èÚyÝÎNy«”W8ZDª‡¼O#úó6yNó;cʬõQ4}?ÆórΛ씤ÖÃʧ\ 0±ªDš LZ`oǨd رÓè“ÙM´ÞPû]ý™h4SªK!¦ñ°ýF#›ltç+V]%'=ÚfgÊ á-Iœ±VœïÄKt™8¬_’+ ¤VJ4N—”¬Ê «—c,¦å|úGÈ© ¯í~\‘çUâ<+ÿR™Ç*yRidàÉ©òJ,{ º_± ÞüeÞ¿–óV ’f|¸h‚*Ž0²6ΪœW"úµ’ë¨w›\ó9'6« ^G£Só£¤!‰ËÐ[ÄJzè@¾ØùHI3»ä¤{å‹å4³Á0Ãn΃…Rkcò´×SÌ#›¯,‚¥'[8Ó$~;­7&¬U:è…ðvðk˜¾à¤•ˆå(¯aþa!cf(¹UÝáVŠ/[0.ÊJ4+ÙyKUõ´R_8l¦é‰7±´êÌäŽnò\œAW€‰¶‡|*Èù$+‹]Žýxú•x)çƒæ9ávò-4 d&SÛ@ >†Ijlu !4j *ÝvXÈ\+ëç&íD@þCN›*-Ã\{7‰ó0Ťa] ƒÄuR–œ”¿{]¼·è¹mŽXr}gWö±Äp/ˆ‹XN<ßÒLáÑI®ÜìÀó-HJ1»¬á’x³”’nŒ‘O ºË­| àÇ'CXÖP‚´i>à—uxÁÕÞ< ¥J„{Ah˜CP r?¤`o™A‰Sª¬X…`(ÖƒÒŒxl€?œ+âµv>hÆ„ûi•±Q<£ÜR¦£W‘é_„? i{‰Om½.5™Ì–Ìp4½”Rü³G–3šh.%´\Ê[´âñ+…Áú;OWŒ`_Ñ\Q¢­T¦ž¹9‹p6Eô¶ÑXZ£’1Ÿ -ÛÇ,‹÷;MëÁ"XI)iã—Š³òhª5N3È_ÅXü§‹›¶Å{šxÁ%¤j ù&q°‹`´ˆ^æ­·X0ÌWE×~Šý«,ÙRÈ[îhê\hZÖî ]oŽ#Y,%ÂÁ⦅%º`T·®ÓBx½??FªÕ´js£f…Gg+oý–…)Ô›Ë~ßûÕ~ZØkôÒN¸ª4áP²3‘Ëô˜û]p%x·.5çõÜ µöiÍù½Nû}÷1iùÛûê_oÌùÿAwöþÂcªÅç/Cû×üqLÎ?ìç»1/Á]Q6üôï/9ÝÅäü!ß>Úa韾ßÇäüDù}§èï`r~¢BPÿñâ‚Éù‰OÃäüħar~âÓ09?ñi˜œŸø4LÎO|&ç'> “óŸ†Éù‰OÃäüħar~âÓ09?ñi˜œŸø4LÎO|&ç'> “óŸ†Éù‰OÃäü£1S¾;&ç NþÿSÔ“ó†.¦Z÷èÆäüÃP$¾D¥Ôr’þ=19ÿ(˜¢¿š2*:ýú7Åäü£°¦ÏT&ûiéß •v'çE"³ 6(ƒû‹ùS0¨#=9ÿ(È$Ê®ˆA•kÿM°¿…¤µ<9ÿ(0ÌíæA¤ËòÿKüþILÎ?Ì‚­‡ì& -þ͆ gàþ-09ÿD'^gG>ýAȲËnöù'^ƒÉù‡ò5©’ j£þÂ*Ö›eŸœ{â%˜œ<ÃN1$´Bº§.À”Y4ÿýtÂÿ&çï’Y½ñÿ|ž'CáRrF0!Qb5ú,ew%Ë'H]¿=&çï!a5Édõ¼LD«ü–Œ»&@®ŽHn¹åÓÄÌž:„8±¥Uêš’Nóéæ?“ówøbÌ–Š•´zŠ`šÊÂl±pkŒfÉ—'Œ®]‚IéfcÇŧ÷îÆÓ7|B:›·Âäü9 '-Ýòð‰œø;Zq&ßh 9ä˜åÉøS®'ç9å Œ<î£U$àœ6x¹´œnvßÅäü9R&l&9hÁRba Q%ØjÊ™&„­¾¡2¯oTâ½ÖBY7’|VX-<æƒ÷_“<Þ›Ž 3ñ|‡óᘨ÷…‰SÑe‘ ˜`sRmÊ¥`é#"£ÙGε³FQá0KPAçkuì"ð»ÄW7ýœÇ‰&lortGþáäòoŽopÞmìgŒ¿ž.Úë2Ûðlú™Ò…ò £éoÒiÎ!=匋ØGXÎODtzht†â0á‘çÂRäMÝf[$4vsë7ñuÎ;-¸úHoaW°‘6²Ò/æ–üv>qžb¤2s¾ErðŠ8Á•Ö#Ä9•¦à{çÀ#Š_1?Žóœj5ëý'>9ÿkø2烕Œ1þf°ËBI±¤pLìq6 *Áà ]&²Ñ›YIO¸qVi¯9á0 VÉ8…[À|À(å4F^z¼«utÛ¦À¡c…d¯Ÿ¸ƒ¯sÞ¼?‚óàÊKM®—ÅzKFãß©u=yˆÎ¤Ðdt]¢å‡0=0ƒuFK)5ÎsIôòãtÖ¬e¬a ¿9#îÈ’V³6«]†•ÿ?ý«ðΣÿï}ÑF˜•²C2yMÞ:‚ûÇÞ—(¶±ãÊ6÷½ÿÿsU`·ºµÅ[NƲùIJ$[ X UL2ù]€r€î¼ÈNöA®RåWŒäŒ"¥+¾.Y"—"‰=ä¹y’œ 6óy/«C‰[Žÿò»¾v½ÏWù´B,/Å©×?M/Ê–±5ºHÜjcÒè? Oaq^‹Õ5Ö.fðs üš“°NX)!ËK1àÈ76,%Ï[ÇæJlãñ?/õ þ¿Zïù^sJù¥ MÝÆ·U©ã.uƸ^´š3‘@r¶”¶f¹Ü:YI熚ó#·ï ÁÅŠÆ¥_ë·ú›L x*üU£x¾_sï×®ô*G¯¥¾Ô'b·k  DìnbmÚGÌÖìù›0Eà¶@s°€Äµle†“ÑÌ¿mÎ ú°oïåh‰¸£r&`w \ä#ýê#á½ÔoøÿjýÞÃrz[³jÆJ;œb ÐXâ²±ÅåóÞm¼Ï‘„Ê(!´_#U,›—>ïõçA!ÁÏ^¥™¿I=Àm"uQr{ˆó ^Žõ¿s…mýÆ<;âŒùL. À±9Y¢Q¼dc“ ÃF›5n£˜íxWQ!%ã’`ù s7—Æúþ!½4AõÜ®´ÈóDwÍR2Zónù%žýµõó¸yReCfñCJÔŒŒãÜÜ`Á0¾”^9¹Ù9fsù~4"³ÙõK¬Õ#»íè£fíjJÁÔxñÜG®Â$ÏÑ»9×—¯ß˜'}Æ)ƒRm·IÛêuoË#Nk±×7­^+W_G“®*r3Êø ‹7û1“€ìÐБGú­Fý¨¤^â @ÁŸ}›×ªœþ/ÖoÌ-ˆy¦ô.Ç5ÁԀئŸòx ËÕ"¯Lê] Ë*aìò¨9×ä .§üü=5VºhÓ,VJˆÙ]šÑîìòvdY7ôÝý‡÷±ågà©ß˜àùîqAѵÉÙúXúˆWÎ¥D©+Wo¬‡K#}ã›ÆerÎV‚=Æüb.dÙš”×€È;£ò|¸ï3&-‰( èËrFH?âPùñ1?Ì"Ø=jUÚúš¼=!.Ùmñ»¸xsŽxA㽉Û^®˜°{r¾tîív|XÂ÷ýÀåÆB6è›á÷cËügÙ·ÿŒ{°óãÍÌbÔ¸Ÿ}h(<ñ)yĉöÍd»ôÔLd‚Ù¾ŽÙÏ¿ôÚ¢voŒü'““¼d»Ï.Îf ¢äÙ’¿Ì›/^?>æÃ’ÛĦ—Ô–þ¯'àXZŠ(Dµ«£ŠÏ³al#\àHZ̵¨Íè½%¯Ü³Æfs ‰=Üæ¢4ŽRÀâ}„9þ³õãcÞ.cuÓ;‚-µ| þÂ1ïÔ$æqá”þtþ_-ߋ׸Ď™Zö0cž,†¬b rê„}è°‘“æ~ƒþ ×Où²øuRël'‡;Q2Øw ˜—²ÿýãPä@«çø»LþY¸|-ixfñ²ÀæÈnTÕVPüÓSþ®·®ñ³c¾'’ÕµéÛœNuàÉl÷G ǿѸÌíÏɶû·h¦æÓâA( àc:Xõ†P”ÂPÁ;^\qy{¿Ìâ¯Z?:æçˆkY'[x"k£5ä\!/ #&CËÞŸLóƒ ü4Ó}˜\þä5¸Egg±8p™!'âYKÛß©©¯\?7æË,\ÕÄïÂæÈƒÙaðò˳ð«èñ³©ÿ<蛫, †]–8¤Úua{m_#ÁUp³ƒô‹n¾ný¨˜?‚“kKbgD€EÝÂúŠ(ÏñÂ'~qê’’gþì÷èå´‘Vøœ£DäV¸Ã¤ŠˆlèÿÚ~ÍúYئšKqѳšæ][÷˜·ærqºE`îÛÓýQø•%…ªœœ·Ýîd ÕÐ̾çŒ'¶—]1´à°?ƒð÷׊ùa%€æJÛT%w—N[°?£«²å\ƒ>ùš-çìÁ-Q$×¾ûû“rg\KÒo5Äàö÷2Jj† Ùß´ÿÑõƒb“yóÈ©Lž‰42Àï@¶3âñØ–¼[‡Êêl ½¡‘1¹:sÞÖä^"‹X´wšÍÎïÜÝyZ²¿=û®ó—X•Ü®À™~gÞæ ¼7Ç›¨ëѵTïUçû¬é7ÜÑ“8Á[ZiÆùMQjsëI;J~׊y·5?š]œ2¾J[l0.6jn_jØ"ïÝ ñî¶cpµj»ùsRj±6ªž=¶¨DÞrtö­˜>ô×\?(æý¢£ÞcêфŃ pƒ!í`!ºÄ°{?×a6|N[vZŸ£ÆïLƒô9Ug)bYŽ"Gn›¾3Iïlðßå4ü®·¬óˆ rh’ˆ1š‘f±¸]H!ך™ZâNÉò錉,f⺵ƒnARÏÊ:0PˆšSÔ©B¿©?¡Ãô«×ýñõƒb>kêÍ‹õW¢Ü€÷ HT}ÉJ‘øa#÷¹20§ì|yðÈ&gL„‡)÷^j”Ãb„yµ¶”&nò”ëöw¾ñw½mý ˜G¨”¾:S)ˆ¸ÀѼT#$–p 2Ô>øôè5š¨O«à¾é}À›äæÕzŽiW¶Çþéy“ÚAûÞÏ<ÿË©ÿøúa1ïS_|ÎešàÁÊÙ;f{ÅUuø{°Fëýñ Ž$ž2ÃÑh1˜Ò¹¹@}Ÿ¹5r~Ù-¾%ó-KÔK n©ŸX?,æ1‹W¤,ÑdÕkxáoéýçž$ùÂÜûpOŒ©e)I|Þ›>ËR¥¾5Ž_«*q¼1ô~ËGGå‘©úäø¨ß<ÿñõƒb>jCf©Ãç–àè„€Ês–[ÿó?Ö±Ep:PƒãN¶œã¦ÎЮâƒÖOÇëN¨_®æA(v;Ý 'QXÌ–DÇ“Ñôþ‡£/^?'æ'…7/1´.pX„áò¯Þ>QÕ÷ é!J´kî´d¥CºoJ„<‚óhÀÌKÔq•è:M&%žÌIíág›×JO*HèêÙoÐhýœ˜OhHš%JTSÌœÄ Oç\Ë¢“ªzÛžŒ®¨…óÓ¶M_0e{Äë…;{c\º6p¢²PwaI¥—€÷!t‡ýœ­—ŽùqŒâ€qCý¦ ÁÓr\þ¹ >ÊÜ0`X—XÀ½¼É±Ó!ðÔf¼·:zÀæY|G ææÌ轕1ZI*|ã=Úb+‘ú™r*Á§ƒ,?C›ãk׋s‰í1׆in í¤ZÒEy’õç0aÉÝÌÇØY÷&ÜX¸†Ã|É£:¦þ’µìmyOêfŽ-'…w­ß%_ù ¿]ú¬WŽùª5é gˆ†1Â]/9UwÈȂ佱±ÜØìˤYÞV(.Áóûf“ðùNò~·€¾`BâRË*…uòxBRˆ ‡¬½-Ù¦Q"-ÜäGqÏêäßõl½rÌmô5O3yè1§æÂijcÊ?ʹ ç蟒¡˜å-paMpÒæ¾máài›°‡‰Ú>•"ãá^ëÆåÈÄ6·e4ÖY_êÑ`½rÌCÈ@À÷¢)9\¡Êˆ~yãsÉP´Y–{àZ—u{Çû±Ö/Á7TódªYlå¬dýºN(ô0æ«‘7ês%*K%ä` ÙôNÕcþë•c~ö 5XÓ}s«¤°lÚ—9?ø›+ÙQÃ:pkµý¹†;4ÞCYMõ»lÂõ(ø8^BÝKúÎOcʳ ÔJç\-ÎÅg%bÀ6þ!Žì_¹^9æç¤E¤ÒÀ–ÔgPN·¿‡<0ÁÞö¨a›ùôµòÞ$ëOý |û(³¡ð&/^C•ÆJqz®šlK< ¾St]6jMeK¤ŸÏ¶«ºl£gSé¿ëÎzå˜Ï¤‘IÌïÊH|ßøZ\3,û"{ Ö>ÙÓ«Ä™ì|•W½X5ìú¬ºô†v›ÖbQZAÈõLäqŠÊñé—­`À{7–œã4Y>¿·SïY¯óvqÝ»%4]JóU5lgž Å¥š3½’Ç“O$ÎD0bJ ‹é‡\oÎmÐÑöè.¦íØfhÌrÐì{./“W¹u†ÂšðB«úÓþ6-ß³^9æáÒÒ"õª[¶ËÖ°Ëá<,óâê±ñ[þþã9žškð®°«’â!Ó/öþÆ6B íÎHÖ …ÒŒ~hÝ+û¬JÁF¨”!uu7…ÍŸ_—Áw¬WŽy“Õ‚6£D·$TÛ,¡´”=àB‚¥=öS"7É=²6½ÏFh‚â¹KŽG[wÅ”wgƯ’$•ò±-3¢îžº ò‚]ΖÊÊøWÚïë•c>,RÝå% .áPHŽK[ÌÛg ™P;Âo1Ù, ÑMspd%ëÔZËÀ±¢0¾öHzäV7ÜDý0¾Üá'DÙˆùÄP>}¹,6¤Þ§JÏ0òHçå-öåWÙï]ë•c>IFìÖT£>"A?.swOâ$ÂwžZ|H¦õ7—ªù3Öo‡FSÕË¡(¨‡;¯c{F¾!€¨cšç×oƒþë…c>Í>¼ïF%O¸èpq'·} ]`ƒà‰Ÿ;ÉB¯c7Xƒ‚_3|¬1w2}RÛžµõÍOj¡þBjÆaöö÷Tìh‚ëFÉ>¤+ǼÜm¹ð»¯×ù<†‘ôNÁí-½R¿nA¹+sï©yÀ©þò׬Ák§À«Ýíàþpóë œCwtàÆ Ó>\7†ºh´—|2·Û²R ÇCÈ -É8qIexàüý[×ëÆü¦úµÖèú>aªqxþJÝj%տ޴ûÑðH§{òÍD#©¥ØÖ1©iS¨ÃÒ`ÙçÖ{Ëц1â%ç:5,+º7ÓÀH÷À%®/kPä~~ÉQ“ χŒÞ%n–]¸ÚNïY?p’üec~ۣ헰‘× ‰XýØ+džb rRpP&/”z²'‰mfùKÏ¡Ôz (L ÀTCé­µ!Iþg\fI.'ŒÚ,C´,짇GÅ\ÉHXÌÝ)òæQ0ÈÉÓ$xN>–èÇÏ;^5æ7Ú®úÓtöù@ª´èc)962—¤ÍÔU]é#AS‰*vÙáø~ÃOúKľsÃt ýÒš5¼óªðwÂÁxŸ [™ûIsèÕ´éN¸ƒŒÛ®yUÇñGíÔŠÙÜÎYqj• o}¢aùÃÆj_5æËžXsòmhŸR-用B}î­Ý"»CU¼£ Ša·³0Q;TÃYr¹dò”rŠ ½CZAr¹·—Û(ÊÚëÅÍgFX«ÁRÓlÅÀzq6Ì—5|¹‡Í%/ m#ã1´(LÇÓ»SwùY­Îù½±‡Ü,‘4)6ã™ÚiÍ0 ®XAŽ´}ÎÇÝ>Mþ°;?I’ÃS*[0Oþ¤~th#p}®M"…ª+›ñ!óÞV¶ =bѪĄ”[{"°zä«0²Ôh'‘¯ò"ôr|¼Wsógaúù™TáSó6š­Ìùt5Y¤®”x¨íhààBäà^Èà\½&\±æ¤¸ügRÄ$9ƒ¥KÑ %‘(Á-ÏÂþ„C‡~c ~ʳ7®…!LÂ6IJq»»z‚ÓSAuÐ{½c–¤愾µÌM¶ý€óš1ßíöØrô¡Y~‹²v¸‘dÑüð¾ø5Z·ì ú“ßRQFåYÒO$Ä æ™¶–CY¥ÁD9·IX>wDKˆËµª_¢·Ïì&å1"°Ã/wùýá^ú-m z7+ö:o«~)gÏÖkÆ|˜q¾ HBþÎ,«€‹0‡ÄLò~õÇŒ 8Çù¾_Ûð¡V*XtXÂEíÝKÉÒmië1îš×æŒÚ˜\ÐÄ<åH£$ûöa^IÑœ()˜6ínÁf@P¿öjO׋Å|óä£k¨‡­Éî·¦ÉÝ™! ÞJrç6L.ŒˆG®fU¾G`G¬Ù½³}•ÿ Ù…ØÞQo"–бRuæ/TBIH‡T¸5ÒÖJ‚BjB»rd=Aý~[‘ë¾½Ö»?Í; ‰d©b{»£mPQç¨×Q’Å 9;æqåûÞå^”®ùb1àKc@¸ÚÙ¼õ™êªR]ÞoÉá>sŠÿÊ#{ô¨"=]’=}ŽsÍvaΑ8*ÈßÂXRyqêq¶Ø*‰4Þb%£uì)±Ù˜H¿-S*qøsŠ[“ƒ' ÍŸ,ײ9E«mü°¢Æ¶ø+ÁÜ9 öMèÕ֋ż¶`  `h•#9™Œ££Òæ^¦/‹7àÇè¾£+-jϯ |5ÞÐgJž½ÁØR‡5¸ d…Ièù€eTS'À¯Þªër›w° |a;^uâðÅb~^ò{ l¤T½œùôV½ÃÛ˜ï *â¶ÕÂYçâŸ9f¢1=x£í{ï\“ ¶»©Ÿ@î|prª€¹°_Ú6ß{vóÅ1úrèùˆèÛ&;âkà”‰ß¿$Q f§í­ÁbÇ[·5Þ –˜ÇhlÑFäÎ<E ‰@þœj’§*Ãß,Y9œá]h<Çðc†j_)擛ƢۑÍmëd—Ñ$àÌí0Þ•Hü*m”ÎC¯|cmRižœuðòµ&¯ÑÝ ÷AH½.¯6Á:œKØp,%æ³úÃ*ëÓøº WZï°·­Žý%Ý^ïÿõ½fgòv½RÌW†RÝtÊÐl±SØôövE‚Ä!i:ëÁ–,ù†9jŽÒn÷¬‹m­"áÏþFÙ'ã·¸GC^¡ˆ-eØÄøøâˆC.aT3À>Ô.u­“$¿‚ÅS¡œy„Þ&„,X^*pÙ´>QµÛ<Ò ü]X¯ó Y0)¦q*Rénfˆ‡,– &×¶DëÞ衆` ”Æð¼uM}˜½N`‹~97}š²7K\ôdxó÷¼ÆVE´g7¡ÙЕ\|%¦f³ÝšSµ: ¬”ÞU¿þ¼õJ1–"h¾¥]UiŸ ¼‘ÜöØq—–(XAÒi¸¹¿Eþ—²[xvŠ×{62Ñ)ù0c—È^»os&êŒ.àóÂ;'C þñUµ2C¿Êªü0‰WV‘¯‰}0O­–å9 gb"¯á°S"ÊÚ_^åÓõJ1ï–Ž²Ï™›BòܶAô¦ß“V}¹1:֤״!#ª*ùÒÍ¿ƒC] mBšÀºO¬ ë>Éð¡®h&.N ÷âŸÇ|n(Œ½‰¾Zc®´:Î ÜŲ®Ý$K.‘B)©cæþ.ýÁ}óïšë…b¾³R3Ü5×Ïk£k¡œ³Äà1’ WçC¼Þ­nöÖ>ó¼Äü0䲕Ã<·WUGºcbó(O?rÄÒpQjjz÷ô0æ¹ðªÁᦠŸÅU°.¡®,™|¯aîÄq£9¨1‚Æ?N»_póx½VÌ#j9ÝÇŽŒ…%·¹£³*ì©po ¤\½•@<º­è¥g˜24X”¤±ÿÅ|†Þòkì žQvetÁú8K F=¾¹ ’¹Ã°Ž6"O«‡Œ˜O»M`¼Ãø`‚ÉE›ýí¬€÷択0˜ºrž,8ðÌa³P9G*çÑm(³a…‹Ú²°ú‚¸¾~j{¥˜çÌѼÕtµ (È n¬×Ÿ<ƾÉcGÒÔa¤Hñ ÃF6:î~†¤ZIÌ[£¤áÑÖç&5ƒ[3Ž+ž¼´ Û'6‘®ŸŠ™”°žµoÓXóœ.GCÊr™÷dz­ \”<&¹Æü5ì«b‰Ü”w*»{Ü #¿âá•b3G&{ÐÏ–˜ý×ܦyktZvš‚Y–üÚ¡'LÙ2÷=_r³—$æåŸJ©cÄN¯¶4ITY%éEâ:hFζ¥ºæXp?,'·Ÿv8ÜÄmâÆÕË+É©dû(ö´_•{’2Ú¤ä¥æ÷vý5¿Ø[/ó `Á+ÞÀEg­@ÀÞ7Énn4~Í‚ ˆz£’ÝK, ‘ÛGŵf_÷ù=y‹’XN½ÊQ[õ†©-{ÙŒF$§Ç¹U‚뾬¾ /_%æ9Fx“‚l€Ü òÿá‹í 9Ñ…õ0Óï¹yy}öœ¾j`êÅÖëÄ|‡Ak^HÍ•=Pn0Œqì¹ ’y¨>gTdmò ˜: CȬ%%Œeã%4 Ìó|Fε¥16¢˜Ä-•Ê.‹ì èâÌ—ö©yÈÈ>XÃPþÙ•ÅHÇHÔÅšZ˜õÿèû›ò·dö¥Œ°é”Nú›æï®×‰ù&± -píúéݱ‡įh±"jP©Ì‚­n‘3r 8ò^ FIÍ|T'½Ý&8pæs¬}K†*À·ÉÁ¥¼ÄìÃì’â­tA@kÌ«ƒ›ñòÀ\JØcÎYÝ÷Æ&ß9Æün®ÒØDº%R˜¸ùÝ.Y*sç< ø;Î=Ï~}7Ã/»^'æó’‹r‚ò¥I<Ý<Ó²ùªŠ¬ 猠x>—õfM~ç”Oe›¡âb¹ÃüFzÌi;):]Lml×\9ãŠߺ_ƒÄ|˜'­^sõ“6"ô`q£ŠBø1.ºxÛDÕÑtê-©ê­ÍX+r=†w“×&rvúZ0´·Y¢rÕ%ãC¨öcžûëb^|‘‹Ïq7Á„ºKcuÚõ¤ðÀ5eH-­E°M.a*Û#ÂÂb ô3¡Úçõ ±Ä礙·‹®zAt\d%O ‚ÁeÁIÜï\¯ón±CrUƒ{¤dòR.±u½Ô0þ –‡÷µlÔc4s8-5)¶éÐÅ̸Ù÷âr2ÓÝ•‚b~—áxG–¤OŠC¦KÔw • àWkAÀ–†![fWè‚'Ï–2™x'Ïót<¸[c¦!nßà“üsàÌi½LÌÓ%¬”e@ØÝÎ>ý}y‰évÀ9¹’.`# 8m"ŽA[Ü/¥8ðš­eIÙNIáƒy”©ƒ®&ÎÙ©.&¨&Æ–j Öu°#b˜ÉàÏk³&h“ïÉgý‰SðÛÍ,Øb[é âç\âà|/?’—ó21Ï&ƒÁ ôY– iþ=—2͘ âÀ6vø‹~ö~C«—¼ 0¢ þðÔFUI›6pH ×{³ÎOI5lb.ó¾5_ù0؜͛$ëè« ÞrX $É?!›A ã­í„j@~x–³ì\ª¥½%žï ¼øz™˜w$Çf`5>Ö³yü AªÒ]ÕÕKø1ÄÝúëN²nL^R´‘ê}€ÿFà=‹OÂ/õáE«]Ü^\9§C-1ÔL*vvÿØ:'¹Ÿ®á¢Ù t=hÜ€p¸÷>õz§éswõúcJ×}½JÌ÷…ºLh«t‰?_©cÏÚjŽ™ 1H}€ û-ÐÄìM \ð#=À  LYl'Õážüi9ÂЇG}k%Û<\™j6úlm1Ðó¨þ2Ú=½ÄÿL$æà§.˜…•ÍS÷VýÛb~?ß¼JÌ©›Þ&¹ØS%|ûˆ\8¢™B0‘ÀЧ֍ó ´% ´x0OËZi–lpbº€ùÝ8¶lÐh´¦õí´°¬Eïµ%×[Ð v{:ôšæí–dðä«/¦C±‰×Uó©p}¶ŽÍ0¡${0ŸÊ h¹w啿õ/‡ÊÊ6Ä8%­$ã¿Ë>óµê_$æœ-ë앬šdÉw@ôtóGΗæºS['Ŭôá£ÕÐ{õõâHhy’„ØÕ9+˜Rñ¦8—+¾s{ÑS(¡D ùuÞ0ø÷²s’Õ§²ÓBHU°J÷&ódúáL©.­Ùâ†"c:À÷÷´jÇjZ¾HÌCÞ×µPA%ö†moÐ}DÛ6EÙ©«òh_G/y¿“寨í :¯5 :ŠY¡Œ²Ä@˜Oäc°Ž+ÞF²Õ àAMpãÖ ã†Üq†œ$Ì,ûþ=ù)}iÔ$ó¨ÙÊ4wQeuîñmV=þ½E°(²—*Á·å}ú}?f½@ÌWW׺x'ˆ9Òßôº&|“£EµñáÁÙz/4šìû(¡lª©Y0•ãe؉K•Ðc€Ì`KF~ª¦‘”Û~Â[ìåàgÓ4Láý·ÞLýíõÿDáüþ1Ï[¢Þ )àbFÖ¦5æœzç„QCÝ™=ŒÿðÉHíŠ{$:,Ó’T¶väE€ “-Ó³ÕXš×›sU¾)Pè æV¸ƒgÇ5NjõR<¸9^%o²¼á˜‰a cl_dÈä«À )/ô"õ8ÄE†BnrÉ[‡\+*bâwUAkáͱAñFdãÍÿrÉúÿDpøþ1?¹ûE0rIÖÝ÷/_+|ÌäÇY Çdb0ÈòËZM(9ö$Žaê‡Ç,Ñí@zb¯>atjQÉüìzˆ-æT ˘ϣHùÉÊæ­]ÎdA,±“y‰:v`æ6}›îTè®Üu@;ôs`;Õ„ÖIößy@RµÃ¿¼ µE«TÈù?ʱÿëbžŸmKJ’£m-÷ôަ‡Ìk$] u×V˜kžoh+†´f$Ì’,ÅkùNʪZ­kC%¤nºªUÙ‘0Ò‘˜O5¦’k õƒ”µ5e q~³·ÔáxÓå~¢$fd=Vú"0ÿÌ1‰mÀ„4)€¤£m§+Ó;ÁSæ™ç«”1¿1Zß?æµkbºƒ£]ÚæJ«î3ÒÆI棃Ÿƒ0rªÜ‘Å^°äáWÕwA¬diÂ:¯®¼£ôžʲ±c_} 5ݤpð+ž­¢ïéIÓEË&h¦×J6ƃåéž&‡–½ê·(xJÒ«K% :ÞÓÎÍ‘šUvŽç{@X û|ñ/üÿ §|d}ï˜ǘF÷ ´뺛Yóø8Á; q)xßè%ÙîVµ|-„Œ‰%uT뽕MvÏ–"1|:4hqÂFG0G–†À‡¼::L?Øš„×± òÇ"̙٪Ñha®n=éÔ÷¥…ÕÖ…[µ.¤îL¿e“l[ˆ–²¥„Ãl Ôº-§ Sön1Zý€åÈóõR"|x½9æÿ?yÖFÒ\R=24 Gpmæ·Ó嬇y1ôœ¬ÎÚꦵ×F6Æ“C3Ã%¸ç ÁX!ëg XóE¨ñÆH"u šÒ<ˆÉÑ)YMéKî‚…rˆÑÒ$ïIÂ9ÑFdãSÆV¤ü]î|€Ævn.RݵÍûb‹¡Ã£´J…›ù¼»5œøK‹‚áú¿½öZš`‚ñêøsíy{Ì·ÿÇímÒ¢—FÖÒ-Îy\X*ÛJ-$y(äîa³„ ym[$ÎRÖ;ž3Rr6Ôª—°µ(ïÑImƒ/ʆ½ àïÄÆñð’‚¼ g|OKïòRÑÊv1xù»ô®³gjéïsúêòsÏ ×»]ϨªUN“›ÇUôl¢©%%%7Ç÷j~|t\Š„7üpOT9åfÿ?i$olƒJ2àvuS \BÛ:ð{nƪþâßøÜ$ÃVëcaGO%7.§Â@Ä úPU ÖgH—å<@m‰æ" |²-}~²MMv£(p#XÇ fÜÈ=çH‡oMØ`9°ö¥'ãnè‡õ’üLj¨œõ1wò'”¥¢‘Š‚ Úÿ•æG èÝ#Ý¢!ìCÀÈnà˜þ/þ7ùĵx‰ú¢qæeë%}’öâ»s(\¼SïpdCÂápú(†yséïw‰!Ð`AìÁ[JjÚ7ÁKFÐl \q1–‘Êï«bM5çivlbl8BªÄ&ƒVRqž‘Ì0ÈpSTóÈÌu„Å9)&¤¢pÉHI+/þf™œO®}^ÀZù!ƒ Á G#ôVŠœŽö>Cî¿]/ó6JÕ¨—œTÑЋÈ˱ôoC;&äÖÅ7³Gº;B„È˧³›ìTÖÿBû:DèUÛ¶O9¯òé Nq-fêƒØNoß í}02)‹ô¾lô*‰8”rºpk/'õ2é3}¶6]Êò ×PÝÓìAž—¿8@Vû/’ko“ dmĈQÁq¶Ãº‡K$ÎM©Ã¹¾yÌ#‚ DœÒ†7i¥Kè\„åײH!Û ÇËIp޲jwEGÅ<‰>.«ÐvZknf²vZóè]¦,y"g’Ðàâ]"f¦Ø\$ÓAN›¡3„tÒMÐû¡+Ù ë‡1o2†^×m0†ðá,QÌÑïL•rƒoGL¨»úC FhŽë=sóÛ©Tf/ØøZ¤nELûFT?D; dµð£øÇQÿ1¿¤¯Ëéæ=Sò%×S¢s0ÿ ¡äGÏü¢™Vð| 3èÝZ ým‡—OÜq½AGà'l¡h áÑ®Y¬qè÷2ú:J“ÂT5ï…]—„ÍáÀd0neU…äL"k°'±®D’;È—,€s eGüaw´yX{Œ9ô"ûÝYþ ’‹)èúºòo TÉ:­¥øoqý+ÄáþUɘ¦wM÷îšÑ>Êv½D ð©Z)E.EŽ+Ún¶€­4FfI~Žyþ“‰Ø×aI!Iö0§ZÔ×tÔÞ |¬=YˆãÉoA^yŽV"=”¾åy÷–$ßÿ¢ªà7yµþ`n[˜ëe–K~·Ðï»Ê)O=ñ#/kÎb}pn’½›N}ó`ê(©w›” c]§$T)Ú+ó¥%?e<À™7hQÆ«˜#o¯#Åk“ÄŸ2x‘ôtIþéøØdêŽÌËBó«l®c.áhŒ{«g©Poϳ®šÛ=òÖõ …ÊÛ>HžpqÜÝ«®¬¢Ýc´b´ÑÞ…T“íæXzù‹uîwùuwô€A nø5‹{RrQC$×@ãxgP”%>ð%ÕÚJ†ö‡¡üߤ \Z*c‰ŠÉtåuº¸âQ‰2©å%ÓÆ HZ÷øš¬ ÓR¸õ !„÷›í,¿¡ÉÎ(a]6cªÏ—•bàq*³ÚìvEù5á~Z*Lk*D°'kËæ”ˆò!c”šrqg]å~0m¦O¦N®~pm¶©“$v–àè@QQø÷uÜ”©&ÊÍQÞ3˜e¸ö(¨qô'ò ’_fJ¥kÇw0Q\ÿ%cñÛÇ<¸QÉ0(ÐpHŠNÜ×c­UI³‘ª«çÒ6ÑØczÅW¥¹D©PK)6 „ùêÔ a˜õE Á+¦¸5Ñ;·.µxCÃåöfL[³Ýu5§JlÐKÕ¶:,þrÐ4vuèqØ·Ý~"¼.®nÏ:ö~Ö).=—Й淺äËÔüh&„ÎÓèµ$RÈð–RËÖuôÞ«c Ò!ëÔ©(cz!¸ñOçX¾Ì£‡±5UƒCGš®RùÒîdsƹÿ-×°/‘(Ñ3bà>'8În*„Ù0ôÃ$m1M“½Ì<¥"õlìBÊÑÎ-YÇ1-´¯]ŠÎŸÚAˆ®Jææ“Í†Ú^¶ç97‚ZcÝõ@^%ÓóaYüªÒÒIÖÔ¢ç‹" ºÏFG¿@­É|†LÐðS;"Ã弬s$ÉON„Ó}ÿ§s'ß?æqmƒcКæ&RT›ªÃg\ƒR+–8qzó)±•Vs`Ó`Sc€>³%–7ŒcvébLÓ®¸5RóJb•ô5¨ºÅ¼ [‰wÝÏé©áäEï£ÖÒ¯ ©¸‚É ÅkN5ÇPo:úûꆄèóWÙÆ‚†x¥jm&4öV܆<Ú³¸Ah‘ :·Q­JPã'“½ C1ïôÞ9ÿÛk©ˆù ªw‹ÝÃdà bÌé÷ª%œ& ~õÍ`(ê¿5ø’!ªÈ² ¶2¤-Ƭç8!X25—äæÍ¦n¹š0Ÿ(/ÞÀ¯ÜR`%Ë e†#Б/z9BxkïÍ<˜àû½Ù!KÌç€*Áw‰za÷CÄCšçú@‹( ï¥9!nûûÝ*‘¯XhõjßV #¿Já[pûå·×24!zNÍd¶õRj ‰þŸÎܽ@Ì£ ÇÎ{m:Á8µ.;}ÂÈ–Õ èÀÍ’™€võ5ì—„eJØH¤9Ä–²ú°¼ù(+Ù'⊩HÈU^ ïiž1ò{C`´€½²$žÛ0 ÜúÆ wºãGA/ ÊÃ÷œè«ìz‹Pª¾º  ˆs›ðeh¢CNdÖ h—vÀuô<°¤‚]ÑñÄxØ$×jF7ø ¾@ÌÃdùN°$½µ7|C ´*Àß'kNi‘Ô…Poɇñ ±lñ]ÖŽÁyéÇ(á$;l¨Y‰­’ïrö’ýÍôbÓ±oH;_âö ÉÏcÇïÍÿ…½Èéò\KB³Å¢„Æu§ßâ² «`¯CªK¡!?¸5³³*:åPY|]ÄCÕ % S0:æBo1ŸêäH]â`ù_)by¼”½O3º7*ä- IDATំüKÄ<îù)»1-¶Ñ-¼*añatñ§è ’Æc|Џ)¶ìY~'©c¤oíç.ÕÖÔüfæoXñ˜Pé9@?c>‚·9“¸U©?_ð¼¶k±äQ¶££ô¾—Þ‹ -Ø*G#¢ª?ÏÕê z—øÖË!àL’âš"—&Ò:ËsÜ»uþøÂ ±¦jÍâ8´Ð,åÒ„jVÎܶ•¸¤Á ßøì“1ÿ„Tü 1ï‡áV3úlPø»ÚuK¥ûJð7ö­ë‘Czƒ™{ÈKýŠ€A£Qw:žÓ ½ü ¥O¬ÇKÊ,^ât*×ê“Ü®ß>pSYJÂÁ¡ªK`Ûè¤ «c¼mX ¨žE¾ÛÛåš?‰ª\N“‡¯Ô‰¡Š—WÎôò’úËjƆ~*ÆÔKbÙ*Ýâ5¡\¾Q3F³Ù|þ fØOçk Dû7çbƒKh“-cÌ–e¹«o‘¨G|ø@k_ʪ–5=®}Ž™¶ýÓ‚=ƒ×â ‚e vsúpä`˜ &j˜¿æ¶J¢øßG•œ1/5îY8…šè“ª”‚‰‰‘z=ª‰¹ò“'Ím¹3ë›]{užM[7¨Ž8¤x#oÌ? MhQ¯c¶ ”~UÓþ-hFÎñ¬¢Ê*×=!)Âk–í†GrV,Ïû&X7;¡ýãáß=æûV´"EFŒÌÍ2öæ‘(XO¿“£¡EœÂ—Ò5]ž3íV$^Ãj”\‡×. ÁÉéÍÚšõ¤Oál‘<ŸbGStnØc^)&[»EÄ£ÏüÁ*“nkU±`b~1eíÜ,м¼“èe7Á âü“Üutp`‹îÔ´í«î_qï·j!‹ô¿¥¹™¶©fk–]ìÑÿb\~ô~;nœÿ"ÎwymOêl†äçÈ,ïÌmß&*Óñò+‚æCeZ½ˆ¸U°„5}k7ú1 ÀÑ“Ocm×1Í™’-McM·Éª¿Ž1usª Þ²Üa±@¾1†°Æ(ÛÈé=k/P×;ý ÆVô÷—‰ý%J|IHèÔs^üÁ•r#ÙTñ;ÈKÝ+‘/jÛ€äm]¸L*ÎÖhËmáéZÙÖŒ8KW¢ÒËþ>ŸWªeܾl}÷˜ßݾu8‰ÙÈ—7ÀШb^ M¨‚ÌÝë¡7VŠKÊæÛ*¨)ÕšR))cEÐcÂÂaW7¢ì ߯K¬,%c•§Œ‘ƒJK-²1¢OÁË ìÌŸS‰±\ÚMEg§› ÄÎt˜*{^)d˜—¬'M]·»;‚÷Î N“PSEú/i϶øêÕ>›E}2åŽ2D‚J¢Q6_h»/ݾÑågÜ–¶_½¾{Ì÷e¿Åœƒ±–B7¿8Ð'Oýg'çš±äÐâÐ4oý.Z$ÑK$ƒì^à!+¥,ІE£º¢Žk\ÚsƘžqáK¡ä½1¤d–f<4ãL_9„¥6;:‘ê ÙC%Ñ([ÖÁêGÎAH™ãÛW¸¼©bòÑ„'GÙ“FÞx½VÀ#Õ_É—ü¦å ±˜6²ü"мÜ=ÕŽ8Xç…“äúXY˜ßBú7ÈN}r}똯<LpóýtK w¨éOéÀ·(Ë ¶Áá7 ËÆOü7ȃ|’Ø6òÉZ'PiÀ8Ò×â¨RÏg…‘8š•  g­Õ6ÊT´”·he+zFiÖà ƒŒ£4nÄ+¬[°ë»Äc'hÈUÊTã&¿áƒC°§º~Ry† ÇZZ¹Ÿ•ËœeÑÞŒIÃ?šVéºjítùc¾#?úÅ.7ë^Ë ¤ïCû -!JîF5Põ7ç‰a‚33:ÇZ’ Iò›~À¼lÀªèŒkxF,¦ÁÁ2°* ájñ‚µF‘zð–ù•p­!9UbäP0.¡Pˆ[+æÖ*ÉÐ×0&¢+xùk@óýþd`#qä¹/ŠyЃä=Ù¤MX'ÙX~üGŠòãx½S3m¤_‹vjN·ã;Ñç˜/œQZ83 :û#(\’¹)_àÜL¡óyRÝgYçöÁ3†|®š(ºLÆ’T;Ly,ðÆB½Æ|d·Èƒ€ì §Hï}¨’ªP w{‰Â‚‚÷\’VÝŒ2âÕæ­À5gß6€n¾Û€´LK!3óB.VÁ:ëM¥0­Íg @ÿX…“ëtÕþ¶vñwŽyªÕ p ¡äƒòùýf°*˜îá–¬ÍrŽÖéoœ·'Ô´ˆ ßY_ìzó¿pÏÀl€$°ä#èפpS@Û”˜‡GWn > DÀÅX'OéÁ½½mJ[íÕS¦~™†Æji iŸG^ïzÚ¢ÿ š¨Ó¹ÛEå¤ÔRü jØDdÃá c >„+úΰdz û„²èŽBÓUþòÍÔwŽyÒk¢”ÎÆwGÔ‡­¹³Ïž³`|TmÆóó“à˜ŠwÒ3[ë¾Ït_œOòIf©d3„pÐk€1Ô¹Zîmôf}£ÀâµLàõ“l{{GMÖ†IA³÷è‘ØÃ¤ã ÞJ²_’ 2 µ•1ý•o%ªÎ½œÂ1r²ÕPBÇY(|^~ÀÊS~:ìÂP%æÁš{ÈC æ¼¥%Oó´s}ìým ÂwŽyÞ—¢àÓ]×ìu¼ÿD¿LXxo1ˆ<&žA)¨4Öº5~G™™²o“ÔHu)9 ¦þäå †”$úCžÛán׳èc¢òÔd@+£ºeß e gtõåÐòðweûEÂ]ÛG¡ãøuÂÎæ¦I‰@Fœ Ãô•>_fXs"+ÌÔkÆ4æé\z$ÉÉ@«&ª9<|ô-ïæÓï÷éúÖ1¿ñå“ ‚GôÔ¨|¤BŠ&†ßÂfÀ«U»nÚäLÓhv™„²Dà )Âý1 t‹„œqA øé*]1ž ­/sªñޝ¡Þ#쥸“±*´9U ¶?ŽF¯Ü6ælXØ›Ñåd‡×]ÿD7)¼cò’~à9n-­O_èwc‹ ñp€Àb,Ç?‰L\H¥4ZíÙùš}¶ÏÞD½Nìwå ¿l}ë˜×>‹±’R¤‚ìÁ‘ s­ùrypX.ªÀ‹±+Nßr.g­Ø³ÑÈ6›$W%æbvÊeh)×N‹¤x QU´'}(ÏÑdp=-n$¢|{‰Ïúî×hÿ¯’Š¿wÌk{€Ú¨0&.›šûýßî—¯H¬ºu#ÿi:uÞO6dlkÏÅ&?ÛßÈð/ÖX=‚”ÃÞ$Z0Ãöu‘˜Ïžy¾SÝÒÛ"%ü-W'ÐÆC'O‰¨†hÛ¦Ñá6’óiûJ=q°¼9q²ÓÔ2Ú÷×y¾¸Ûlˆ»ŸRL#ø-Ïß½¢{Ï’µ­³Œ(µú‡WLü= ¾‚E¢åoÉÈñ ÆO>®)•uó½c^¯øƒü? ³šRÏÓlçÁãÍ9æãýùyZUÙ5¥†èlÏIa«7¼¹Bðú*õsp,8„ÎÛ9KP¾”´J[PÀIž¼É$ÏNt_··ËRÁyA9hPÊFÌì(YÕüs!ÈYƘ¤z<¦õÄÉÆ7\¨ 悼qˆÝ‡Ývå“1ß‹eóÊÏØÉ…9T5Ljªàu&j<,×_û›‰þ»Ç¼ï${Yfç¾Î˜Ôû1ßB¬Ùíw:•ÜßL_MX£¡nK'“Óµòy£ý=ZŒ Kg+5R5³ž%†±¹èÌPdû]ò¼4nCò BΕ²ÕÞ)]0VmðAõUŽÙr‰m"e£H-ÈÞý£˜‡^ ¶Q*c âæc^0~3?øîU–ó5j7u/Çlè;´ôG‡âS¼Þ(Ù³wÑoߟèëæoÖ÷Žy·å©¦žMðø²·0šÇ %ÑíôYXE[ŠÊ7©š­`3R³fŒw‡’áw*•Y¨S°²^bÅEœì¯`ùá:°øKN*<Œ3®*«Jñ4cÕaÒÓ€aþ,!Ђ,‡1ï0éÔÞ€ÔÍdçLA…j>;3Râ9þâ½VÃUç`˵uÐåT— ¼<ÐXí“§ª¸]¾œþÕì{Ǽ2h8Œ¿Ù_Ú-÷ÖÎLDpHY¥D.É츃5*Ôì=45ñXŠdP§å¥¥£L³¬š›;Á»î0SAݾè%æmBâõ+#;†…:½—I'Y:šÞÊŽI}Ù¶÷*ضPdÛ<ú¹’“÷Ê@¬8RB®¹†­-”>‹mš©'%çvŸÏ¤¼z­‡Ô]G~¿£B™Àѻܡðÿtÿ¤ÿZ¢ÿÞ1_˜Ò‡U&¤¹ôÿøûŒ*è½ø¼NóAÀ´x„R<\pá#ðÝ_ʃFؽ¿1 ìäsõk0ÊË‘˜·0ã«+ø]âPveËî#fvæû¼NøJ ±+ØÄm³RÐBJ5÷Ÿïå2uE@ß´~úXù–-øHŸŒù$•’n{æ‡áb¥Úf qè¯÷LJ“‡¨ìœúfáù'¶O®ïóƒhTú/‰ó³òû#‚E‰œ”‹¼PsT —˜Ôº[x V2Vµ{yP¦k«šˆ½¬Út°KxT¨ŸSmrŒlÆ(1Ÿ¡¤75H«¤h*:yS§7zÌ,IÎ"¥2G&¨s‘ Q¹°gÄ™¸¢~¢¿C³Õ  ásØf ‚÷}š¤ZÊC4ß§øÿ5Ùa”dóÞºbÔedm޾>É&ƒv„½`ðÖ8/…XpúÇл€ìCé=G !`T0õ“ôã—ZãÊ%äóšAóÏÜ @iC&Zí<Ù¤††"UþÓ•éŸ$4SàF]R¹z¹¥ªª¿]¦\ëCGÀ+Ÿ¶þצÁ¿yÌn4=U>œJþÿù÷Ì’ 4–B¡*…ÞáÚÙKœÝ‡ ˜-ø©ã& DíëH¥³ÍC<ñ™’   4 Ìž¡üäLñ¬QrùŠÎuæ‘Ý C)qÄ“)†0Ès¯ˆyÕ$ã«‚Ë yù(fxòIŠ7uú¹yä÷᫤çôyÙƒ.Û¼Ÿ0Š”ü7Ö&Ûšн×]¦‡ëœß®fÀ÷P¿nWþ5-ËoóóÒÅ(˜Çõ'ì]ßÂ$„ze­‡ AÁú]r;@ÍzÙ°Û0„ô#±êôEäm¢©‡Ä¼ ˜¶t‡s?ã× Ü”ŸHmhCoÞµÄݘÅ<,_/À1\É= ¥ó ì$›0²µF+#çÍ;èYôÙ•¾r4”êÂÒú”zŸÑpÇR¶>¼üÐ ª~2wE…t>ðCþ¡?zc׳d_¶¾yÌoÝ ´ÃUõÀÁû ^aÌJ‚› ê­1c>]JFgIÀ†%šK¥QJC‡ÆJ¢27åfᨪ·~©n6`wmy>DtöÃóþ†FO‚±aî¤ò½'@°<,‚Éû`ɤ˜Ãöc>'$ÁØ.Îy7gðÆàÁg\2#ùmuþÆ@1Z4ÍÌuÒ븡QÞ[²õÿ¸ùæ1?6p#Q_ˆ,aÂ~«µ'jÆË(ZŸÏ¶‘mð4”Œ”"3a´Ô*蘞zmª×—Ø:—¯–&#Ryòf üc‡;°€yV?³Y£øp0“hf,'1 ¼ã#Ý94,u<\RkNR=èë>Ÿñ«RÒ°Ù8ò¢¢È˜Ñ#ÃúS§D7mqÖG¤`v)OûJj ü¤W—% ½¥%“ûú·xfß<æWÕqg»@Ùç.\{‰ô-c­ÅEJ…+MŠ—Ví†>QÀžýú°Ñg& to´ôÈAzôÈ'¾ÁÀ0ÀZÿàõów‡_ æqùHÓcjuHF4ª€ý'LŸÙò6¡f·$†•þÒ©¸2ÝT«„öí@à⊪ŽQ™»Ü/ykP;>tÙ‘Õš:¸ÍDÇÎ×+i~¥R-˜r§ ¸)ƒåë¤9ãúìÏi¾K 8®_½¼}U¸ùøx;ßiçåŠ'F×¢ìNK[¶ka¥tnµ*E|ûƒ´Á3æ¬oó2zÍ,bÀ÷Ç/4þ±h˜q3ÖEÄZðuÌVv#}'J™ZØiOëlƒÌiq;Ó½ñ" $/—dÓÒ› ’ç3š¥ Z B«ÒÆPp—ÅIR¯‚3Sf0p¶Á˜×-ÙBTÍÛ¢Ô×âýŸ'à¶k¾ÃoO( b¿|ÛèÜ@‘æó9æÑ{Ô¡› \‰3åk3ìИ•Œ¾Hè¿%¬ÿ’ïÈ7ù:3§‹YÌ©k&ª¬òþAÑv~†N0>C怄aìC>”`|gÝÒA$³ez‚qÙ'PåHÙ®Jbw˜ ¯Ô*“˜¯èë•%{;§wîp‹¶P *âÄH4gžÜ ÂäÚ(o‰} GÛŸø ‚a&à-{:œT–k<~¨Ï-7SŒÏ^Ë´6w¦”ªS[»TËJÞt+{‰!¦Â›ØßÐ~ÿK£àß<æI/+¶TïÒÏ;ÒògPˆÛüè<„M1ÞÄOA`LíÑ ˜.Fµ»r†tN¨ƒÐ£2þ%SŸÌCW/»ÂF Ô< >/Åd—J¡ÁÇAГàzyw¾eê¸Üмkr}Ð2UàuUƒiR¢ƒž |gÿtµ #9*¨¤S‚ÅV„E_ü¤Q&,HGÜ% ïõ<•£—Ê´ŒM'3ŸZƒ¾)4x +…‹œ?H›aõ¿C¹ùæ1É;Þº2gKÐ@@2À÷æM÷RçN¸¿¼ÄÔ[”ÄÀÑk Åd‚×ãþ NäˆÀLªA;2…êÂ@žk¤Ç¥‘êM°p4ðmLóÊ›¼¾%¦ ßåßjJ¬äŒñ4™%ǽÙ42€ I@±?Sä `(ñÆ6ô}«+ÙȆùÓß;n”oºP—D€|[&O¾…×ÉIB½à— éH\F¦˜7ôßÁõß=æW†`$4ÖWº¤b¿ç½/\ÆÖj-îEsŠÌGctA䆑æcΣºﻲq)9Up¼ŽžÕ;þèöÀ'ÒB>WRÞçVåýA÷IEk®&€`{8ìa 9o P†G`_sG{þ΂”ŽlÒŬÞJ=[1ülÐämk’å·®{»÷F¦ü¡ò5,LS—S³ÔOgˆöwrò’D|N!Óûvm×b›÷~¦Ï¼õ‡ëbžøQ4¸ÏQg:nÒéÝ´K—”V±ÔÖZ•OŠ—™™iÈæ Ù}”†¬ŧ ÇèvÇâ¡6‚Æîae×`P±¯V Sƒ`ep*õt°³ä²Ý°²è«%K¢·@MýÓËúî«6*;ûHò’›)ñ§”ûÊ!sHšŽË­€jÛçnúÓ‚~Zô¡´lR¢”a’OÆAåmnŸÿL¥ÿÍóË?#Qgõq²Š¸ßr x£Bì9ÖÁâ¤íë\‚^:ËIO¤b=…@ ’X±vMìqÜíz»@°RNò¾¢ñnü‡Üñ”EîYçJZƒ™‰—ã'Ma‘?× Û%ƒl––†×‹Ö„OÞ¸üË9Bàtõ1¯w¾Ioaµì7’1ÒÀ¹ßßËX¥ y¢ÿ+ëbNÄÙ›*ÃÓQÞ-æ „âu›à¤üÔ†cM¤ÔÂ’b ä@[)œg%[ô°CÀá‚«)yá5qð ƒèÉÙU k)úb(pžÅ¹pãa¼®sà©ú1Ìó8 †S󽽡ӘTÀ·/cÍèÝF ýÄKhÄ ófqÍ´ëñë×É.;ļ ‰’²ô|ÈpÏ-AÒ:$”Q!`¯Á÷ÿàëbãE%GOÈ/±Sƒá-‡ãnYmíCìd˜mîÆ°å÷ŽÃw©òüÒ:˜™ÌK`ÐU9zŠ’ç-¾^ª¶¤íƼÕ÷»Ø]œzçm8J‹¿)j³ £§yÛå6ËPyÉO%Óýû %(´7"ªõ95sl#<¿ÚÔÞ8Š.¿G=¡Fí¥Ê¡û€&‚ÿ»¢”OÖ Ä<ì̬X»ÜLÏ„7AÕîAwÉVj5ÂÑ Ö!CÕ5“[‹hV–ø¤¡#!¸H0ìÐ];d[û°“³à®_ÙrÊ©»c q õË[y³‰wM!h4C6ØÊÓ¦ê?ç·PvWAV=ÿØëÍMKsKƒ@\MÈ«’E ‡ýˆêغ UÎs¢þµ‘?®ïó›Æª[ì‚-îŠRÜ[ʹ™dÇE3¸‚á)—jäéHæíËÌÛr:¬¢fiiíËÎiNb^ªVhGI‘ڶˬól&xÜóùŽ”ý6eìv0Íß´’ä×€iÛÞ£¯"9Ò¼ ²ñÖç¸^Ý-¦æäïiΓk#¯KEqúZd·ÀÜΚªO¢N»#½öŸ¯ïóW/–²]më›Iá4Ú;\eFÚ(V'´™r%hÛª²ð¶ôDwhÌÈÿ_¤ê4è·¤©a ئú€b‰h£,·:d•œbކjsÜ8c…·+Tíjü2b>µ:¶ŽÊG jóÑy'ÅJÙÆRÆí\åF/˜^¡ܧbíqú³H¯?K£Ὺ^u}û˜G¾MªÝA ÑÙ&6³‚{Ç:pShÎAG¾1d¢*™C ª¶Ov^öHJÕ–ª#å¸+€H‡‹ðÍé´fL–•o’±ªî°ã+Çò®á8°DqO€S¢yI)P2ãìF’çC¹¬ƒìŒóGX¼wÛ¨)â—®6t°ÖBÃ&èOÜ¢ÀOý#§׿vÇú–õíc>k]ØH’´ ÛtÍpsy¿$ï¨Ô_8Âä}º‰¬0½9$^=PNHÜ ’-ó’ÁÀ&sòטd´’°/øèSÚ04¡ÖŸ¿rÖ1¥Ó¦WdzʭÁWïåíÌøÕW¦eO9þ½Å¶Žë)'”Cqt/v0U¤¢b†;ºz/PåÖ˜Ûú{ZZß>æ£Ö…U»ßÀ|> ßDºy¶¦ ŽdpΧÊI IDATvä?pÃrÙ‚+> EŠ8äŒ;xúˆ ÷.©äaçHÊ)þŠ/Ú ÊÐ9°ìw|ª®Ã$9:誥TŸSÀÖ5ºH(±±·‘Šë7:l½à*J”Íïrè“ µ9ˆ{âÇãt¯^¯–ߘÿèªnNÝÙY÷)„Gç߇mî.ÖÄÕ6¨O¶åÔ®T°\Ó@_ˆ®„ÐJÊ1o|ƒO,*KÁ²N]®ûì ‚òs÷>Üic¾u]vu´u‰a–ß΃ñYEbu?kчݖ{=uäð^`,èÔ>Ö ö7ÅL5 Î9-¨ƒÜÑ|.LõõÆö¿Zß>æçòþÖ˜§Á;ñüýOúá 5–|l6jÃ(¼¤d©j @%Ђ‘?D+1objëD稶[y°Ï›·úþžõ0{3Sö™·•£bTSÈŸv[Æ6*êè{±Ë½Ì¢*Û©žKQ¿ ',•”Ü{wÎïeMOÙ"ðîz•˜Ÿ£A(cœ&{ø>óœ]ÎãBå›2’´9u+už*WdòE0t RÉQ<[‡[Cž&„1fÙëöIß Ý óM88Þ?Åç·³g`FËt«7 R ‡O€sà) ¶‚©ÜÅÝ)ˆ»b³±)H?à áËòKÃTdiÄ¡V§^XÅMÝàñz•˜g¼¸œõrT~^SÎ'ž§u6à$wÜG!ÏÇSéS…Jü‚AØèZ¨ðÀ«tµ£†•؇ûå.ˆy‚1t^9[›ï}›}ëúŒ¤l—Ǿp*û?>–”§ ƒîJ}£ñO¾ôò˯±JWZ!8iÎÙ XÜå˜b¶Œùî ¤±Ö¿§¹ýh½JÌ#éz—T®cÝ„ä>ãúÎK”Ž©ýáÑ{¶9>!¯bƒì„Ü%æsK®å„vD `n!Ï»¸ ´uhÜœcÞ¨…Ô|S—¶5àóÝ¥ÓÐŽV3fQJ.ÙOÛÿøúåÇnSh4*ÞdÅEµŽ¾/˜â<Õd!Ct'¿Á²v‰ü¨1?äxDûß—²/óàï ÑÔðÆ$rç¦Cå’¹½ jJ¸•K9•¡EÎ@©¢nAØÏîu\‚w’ù "Ø~&Þ8oÀ!§?| ÒJ`$¸lËÞ§™±Ðö‰>”A• ÿ´ÂGKP]B}Œ[,w×+¤û,¿Áù;ç‘\1ÇK0Åî‹|rHìÐ8Ö0÷µý8ÿ:1/e¤`@’<)oãÑv¯ã­çŒ#1ïB‹ÞºC³„Q9E$o¥üŠ»}©G¥` –}ˆ?'  ;*9İGÌ• —É“B WBˆ%X‹ÉGÉ^vA­…¢•;ëüîÛg[dê-ÚÄJ“ût ­²Õ‚Âà ë²ËKzPq´<¯3,$l9¶>%ô!¨‚ñoùxj®nûP|nÿ†só1¯½Ža$êRín•XÞú¡+“ZÓÇÇSœ¸ˆ™µ,öÑŸ¨ÀƒÒNïiTï’`“Ø L1W˜b¾¢s“ɾ޽¦–Ú!OðŽú Å29#’(§ÉŽ?Rš?Œy,”dQ%¦Œ µ[þ\¯+ÉÖmqŠ_VÐ’ÒC–g!jUF5¨[õ¡­'8 õÒC—+oi#¤Ľùþ1Ÿ) âã% 9ë¢óæ c#×·ô÷+ ]ï²Á'L€y·…¶¨´U­!JCî&º"¯haK{·zɃ¸\‰Ø’À¼˜@Ôíêµ­¾l9¼îò‚ÈïÎЪ7ç0ŒnñRŒòÂúó¶‚]qÕG§+9sRÃY#,>T–ÐUŸwd9ÜlšÆßí¡ÿÙ¼BÌOé*(ŒqHøºäÍ–ìÿÌ=G!9 nCÇ^RžÌ¢6:Sfø¸À@dz|!EyŒd[ù‘)7êÂHh© R¸Õ]zÙ,[T Æ•×ÆMš$öå¥9`ŒÝ˜N-Ð0ñèÌ‚,¥‡~AG¤w AxóµÓs«Ãº¾9¦0Ví1?ÇI(-/«ñÒŒíRWü[ëûÇü>ÅD¤d‚¯!Ié¹™ux¾íî9ÏÜ€Œlz¬ ^¦Ð‚7订 Ý)V@Øï‚£GLÎX݆•F2—š»Í/Ÿ ¥zJ‚ˇyÔAFs$UÙ^1yE_á6™å ôZ00 ÞyqÉÑ7~ù#ݦØÊj5qÊx>çiÀ#v/¡ú¿bп@̯mʬ†¥¹œdÑ`íÆF?ÄÙ1QªÔ¼cÃCວ²68‰§À∠$ka£¾¬í}•<]$Y÷VŠ`ó&¨Óy ô¡²"AÖ’ss‰ ‰?ÇarÉ¿0—/Z+OTL8¼œàü™ø<½Á¥´>p—áíù«ðÆGžÒ¹ºS3Í£Ró} ¶·¼ªi‹†k|ª$hã¦ÜOÏß7/¦ý¨ÖÌÃ~àߘÿøÚtã—á{vuØlý†é÷¼ÒŽcr1] äuáŽ^G¯%Ô¦\Qo§n|´5 ß'1-» ´#ÿà.qŽ=‘e%ý£l Ý¥¢è(F‡®¬wî$o ó6WNË¿ã)Uz$æÑ¤\`Ãj¾jîÍY;ÕÁƒöÃJ{"”Í<Ÿz-èqê™Y©Áé& ¼|>»è¤1<ôùkë%b~7©±JݹJŽv‘;¸©î”óãâö‚²¤Is…$%Z¹¨ 1‰>¨‚ÁÃÛ©¹»‹Hš½WㆇÏEç‘¿¼ €õñÄâ4ñfôcŠ>v°2a…Ðæ§dˆ¯Þª1cÙ,Fª‰öž£åG¥ÅÐyXIê½Ï{TÞŽ!'Ïhò½òwÓ¬K1”Ïxþ|p½FÌ£;á¡dk1±ÃÌÏo]RaÉ~º`uú-,’Œ³3iì6˜õ»ÙfPPT6xHYšoøÀIÚÌãèá”,yúc,S‹„]ô¤å‡ž¯õ"ƒ ûÒ€c`öJÝÁ+éúááIp€+Õ¸Xîy›nbvXФ¥`ì°ÀèÓ>6Û~ÿòK1»ÈvËòô’VžPß‘|þAØÀé)¿yŒ7b\ŸDθ@Tߌ•ºë—WùÉ%E§Ô}‚¢/ÆÅzßìÎ'ZOu%…»=VgCK"âç#ÀcG6³ !O„w°ß±ŽTõ£71z˜_Ê‚:|‰å¨(ïeA3mø“…Û2œçì•|ðJ†¦d4ãu®²8À¨[`zy}r rjújU=SöYr¬HFKÞ}I'0á2mG{pé õfRêôxh£ ‰ùÁœÙf …သ“]jwº+öâ¸ðb1)»-ÔAåv´¬øõ¯'’¡ßÜs\:š ÒºÕÒ2/¬¸ Gœ¦|W[î-ø1]È͇0µ³ÄœF%ìÑc€:è7å1m‚dv otF “Ä¿½CBÍhµ][ä]"¤ÔÛæføöƒ+ãŠÁr~uøÜLŸ*ýRíÝ'~Wò…ºÆ8舺4|r½ŽÕ¹˜ÿ_{W¢˜H®Û÷Íÿîª$÷E7’ $×Û7“! ”eI–J°É>iÊ„¼©"SLÌ m§a‡ó'Ë £¨̳{š…'Þƒû=ÜoE¾òò5Cª®ŠÁÿá¬ëÈ›!/ ª-ȽC><œ!`ÿé÷8]‚Ú+Z'è!ä…ô½Þvç¦XÄ´†uÂèŽkRß>$ ¾ŸOµ¡'"—'L¬Éª—–x'‚_ýŽƒR8†uЩšà¸¹¬üáâ3."妬W±e‡NÄP*YFƒ||á´‰‚´7r†7&9iäò«tÈXTºÏÁûôÏ™kw}¦j ¹ož¦`„ùÙIÒ:„7rb,ý'Mã>p ü K{@É7ýSx·Y“‰QÃ!"© F‚êÅ&ð S¯Þ½Úl)ð$ƒÙ8ÓÆ+!ÚFiyÚ½’á€Ò†xÝ%ĸâÔ½Ñs+ÓÓ¶;{õª 5 ñ¸xãèH F¡ðxuZ85ÅEÈP7r4ß29ͳŒ=9ò†´“>«Û[M’¥–Ñaß0Åø¦p69pÒ§¿cûþ¼ çËNÓAˆùˆÀT$~έâE`®] 9Ïü8Í}P—9TMžü“@® JEöô<{ç³h1+ž‘a'ãNήËѱ½w˜•ÇPä Ý-æ£É|YYÛaN¶ÎÁ·N½çš_ÂYfó³³zf…ú€£,–VÊ 9ùï Uá9 5f™H‘Oe@×eŧ ¾ošÍVícÍh½9-ùAm§—á<}ûë|ä^6YÔmèsß×¥#Ücí¡Ø%Ëä(‚ÁsfΘ£ƒµ lªµ^Õh`–­›Í¼š%Є¼Ò-'•f&qNH'G™5ÑÍÞ@ÔÞõÒü[ÆÖì8_:¡#KÚóܾ ß9®h2ȸ6ó±¶7ûóé-|˜ì/¾pÑ(\¤ŸìÛà…8³#PT¸Öpž —|Ãð‚ýøº‰Ï\-$ˆ0=J‹4z—)脟Ӝ¢€ÍÇÛóJ¤¸Mc. LÓvëÑ(ˆØÓƒ– WŠÞw:nëW°¸B£â´×4v}̵B¼ŽÝôýÚxd-¸R¨›÷øñ»ç}¥ob¸AùâEæ mâ?çÄoðRœ¿p‚ü’H!¬eÅo¯õyâzîYf›ê§^€€ôúU0и_õÍÆ%î‰ÆPdôœpEÌ$G_¶;<Ø<,ŽîM¤'E*åSA%ŠÛÂN‘ÍÜž0³³&£0=“1ôNÓ[³µ¿ FÌ.Ìߥ•?î8„oCNc„0?â¦rƒj¹i%þÿfÅoÁ+qžÍ`Ä«q,¶G6Þ±€*á+X¥§'ÜTeUp-wÖqª­g¶{´wÃÆ"ãÆÖÈ"ÚS_1êh4£«æ1eº¶ŸÆ”kíý#æsÈnÕùðÊÊ„·©Ÿc}(Ž6¬SKAŠ‚Ää?pÆGÕ›Îù yFHù¥aç¿N*p7 ¦€³zŸ¸Ä…>¸¡™ëzÁ´í%ïî:È|_È®S(x2•ŠÅ\1U–¥êØÛ/ì¹Z˜iæ`Ò¨K4–˜ŽD¥¬çPÕ£¤\ó”ãko¡äP‹Ëë´/œªÌ›éß§”÷›'‡µH«X‘6;½;ëo·†9C¨ç±ÐƒR1Î…;?ŒâüfÄKåj=Mwt<Ò'§¡•Ñl„ƒÞ0ÑqnµºÞ­44‹AÕÞçøýÂêï˜ÓÉÓþ4Ÿw;µJëÓù°@qk)f¤ûn]p^Ý<¸q<Í[qå0/QÙ°yÿ1Nö~4Í!Kàʧ霿súz^©(Ç´bçM½¨xAxìãÁ/Äyqm9oÞë —e MK§•¸V'‹ö*ÐeßQ¿>æƒgçÔe¦hÁ@QUIb£LLCyàk,Çn¡Î‡)ˆ~  ÊË4¦æ¬²ñÓͤ]Ðø³sO™ÒŒç“©óè.ì]'|²`?Qú/ä)Úm*Ê´v»œØð¼7?…æû„éÖ¤åf¢püL¾þùx%ÎçÅȹZÌ\8À;s¢_žØ˜<-ÚÃzoÐóq>ÞEÒèV2‰5Ùà¥õU·d˜ JtÐþcelèØyrj2ªlÉãï'¾¨øµç ÷õÅfGéd?byq ©*OI^κ–ï˜Aù)4¥gL¼Dš ÞOIo8Â!¨áïˆóØ\kú¸±yÆæÅ,b»Ž™°Ì_íçSD:Ÿ=g×}ñÕ:ãTª(°Rýœ¨Õ¢pÆúñË¥Þìu$q?ÂJÁ‘c¯ƒŠ\¸þmNüh#S3é!¶—ëíî okÈP^Ÿ7Û.Xç5`xï©~fü÷ ÐïÅKq~A+k4‘DÑÕ‰ùK*fG–¡;øÉšrJ¡,~U2ä-!ÑHwªIª²:^±!  §ªÝUi­ÒÞ^M°{#|ætLˆÓfh7ƒN¤ŽäÜhÌ‘zD=:>Ë.úìR€°C,íV«bsx†h¯â3©>?ÚøÙœžI¥g's^“ó*Q<é1cæÉG› ²¡î<£oË:R>Õ’,ª'u?‹÷ìÚèb§;Sñ½ó¶Æ y Ÿ±ÊÌÀ:o=Å ÐïÌyºý‹rÞMß²ð'§®od2¼Ø¯{ ž ¹&Æ˱k ,v^¦N±±êXð=£†ùP^B«ÛÎEe”r—íÄl:ãY>®©åžÆ“«ãb{t™(Ñ ٢ϞzÝ‹:kô$L“À©næV»(][jDî4ñOZïÅ–’ùr9Ÿfªž^zó’œÏ°"æ¥tOh¸3ëÔO¦î0ó/¥ö-x=ûТzc[Æk`€Ø%œµ£¦JvØF–Ü(ŠuÛLxöYyÇ/ez§´ò,KJ+4;ÒÒ¤ȹϽr‡ök>»9¨¤ÿg»<átšßù64@ °5ŠP×>ðÃb (Û»Ì@)˜ußNŽ”eò¦´È Î ÔfS~£l‰K¢ñk' µë[ÛÒ2T<”Èp""c”R¦m;ów|âü%æþͨv\šP6V!ÕYKèç^ÆŠÉH„Y® ù„7€‘âžL9;vè#|•žq¤ÍDnäÉt§—…r’Å).é¹NÕE¡êLJRë{‘ý$âèÉãæµ¹0Í:û):Ø¡Îî š hO›;Tö.bÐȜźÕú/µîޱ,÷ó™õó•¸_œót#qe”JR¥á§( eêþSKìü­‰ÕÖR9ß–ÈÎv«M+®l×´> ^,[·~©åjZ&“&»é®1¶Fi뛄Æ‘‡RuèòºYcÿí0¢ñL~ÉN„då1r«o\³!¹X³Úù‚&Zø<Ÿ ûꜯQn´h |šà¸‰Dß.iK196aöA3»Õsy,R•©õjJS*Ç -ÍZ¤¬•³Á2 õh+O&äâ7"eÚdµé§ÌßÖ øx"4)¬]ÆZ„íz£Ï£6¶^jPÉÔ›ÊdÚexÓ7Z Š×æüe!I—$ÀölêÎ[ù`BÓ5P|ô„zÁŸÁb—FQYåLŒAnRï̷ĬWß0¢öqþi¦µn,–Š“¨^¥£È™·Rðø¤® Ð13ÄBÞ¸ ôƒ;ô´˜ˆóYÃêö h[jXßz"O>ßܰóßÁÜŽmÄ*…‹™"GW?ápÆç`J[Š}t*:ûkÆ\†¢äœ‰ø2s‡±–Sê×å&³>fú÷ª Ë~•Q^Këʤ1¦äl)= mˆ6ø©kš@zß¡wµôMSôšUEÞ½éž×¬ào*† ¨3gù÷ýÆOš9òêœgp¸¥\7JÅdœb"džËãFO5R–}(sÕ’ Åê½a.Ì— ³§µã˜¼Pè›çïcÁ§ºç®Ô:Q¢ÿðÀšƒ«Ë…•¤j['ŽÕ<&…ë´ø{-ÓnMU‘x”4¿i0^’òûI›Ÿ:0ùx γŒÙ^§¬£ÀÐ!eþݜLj7 Æ1»S…«Çº'xÒË8¸UÝH¬4N»·|kÊ·ªÀ•çŠ}ŠÊW¯^aØÉa÷x HO{føØˆÌ‘âɶvŽd+¶6ºh,Õ<–le¶¹JNsµoÕ[»ïÁy¸”5{¦¼²ÜÀ¤‰øæÎc)s?€Ä—<;÷]&V™”䈶-Ú_ 3eX`ëYyžî¹V/¸ç§qðñ 4±žmˆrX—Ó\OÃù,ÓDV¹òAtÅaœÝ®ê¤½¥ýá‡TÍÞƒó­g1t¬!/ÃÂBFqïy/ËŽ «Ü­‹ÛÄž,”–Öù„_Ê CŒ˜åée½ÂEš\ʘ!„9 Ï»×Å ÖÞK·Þ`®¹ke"²7‰=™z‘ .PÛÜ‹ÇÖ‚@øTºçñx ΋?@“{9uʬQÀÉ{>õ›¼’Ä~Ö<³—Îy/h<Ëd– wøÊ|§Œd¦â¥9»MUö¦LÊwM¸ÿ šçЦ9—ÌÎåsö=ЇPPçœùÚΦü¬®¦ÙÝqíÓ𜿴h”OÚbŽ79H•˜ÞÎú¿öWÇý¬°n^zµWá#ü‚¦_š­Üÿ‚E*—7 ¬§Ä1HYU"´ÿÏ»ø$–žˆ…æg!'e.<ãóÖ‚(;òQݲ ­:!}.\VÏ?>ñ¼<ç[-¥Ñ˜¥ª¡ÜÊ£ P9$rþ„bU%¬Æú©ÝÎ+6o-ÂËëúˆOnASN¹8ÑFAMÇò±·{=×F÷\Î3í%$Kì\g³çjà•]sv’°Z.ëfH$©›Q?ÿ}ha.ÁR’æ°)s 0²ž}ŽÿQ‚›'®Ê·+ÎË,ƒÌÇê!¢Ôž¿öòé6&4#’+¦¦ì‰c“ÖÐ?PÃeˆ¨©¹õñK=_F$Kqþ‚9ûà|¾Ä@›kœïøaàñܨäÅ9¿ÔÌs¢ÁÂ1/ªmK‘¡ç‹%~iªª÷²fá¼;*çÐ3å<(þ:+ŒŸ³óØ™ F‰šMèÃ@ë½2©lfš<}šv]Ú4.Çq9úZ’ 9—Xˆýµ·ÿãÉ9Ëç|Æ ×ÌëL~ˆãŠ.…yÙê^3ò‘ÆÌm$E®«Z8‰!Ì|¨1oÑZT8ýùvUÚ9x"ší%h†üè@ña’®ÛE*'þDibü vùÊO©CŒ|¼½0Ÿ­pó✴V +™qD‚£#ze _öv7?ë Mö[vÈzÀšE–#ÎS`çTJx&t‰~Ö‹jãë‡øÏó‘”Zr~nâÁÇÏ8Ô,ZòGݽC&&çZj"çÖ…>]Ôé-8´Œ©¼\·­'0uµú9}Þ> :]:ç+Es¨±'ÎÛ¬Ö)ð?Kþ ^æsv~£ï…®\ó>³¢¬)x~æ(“»èµóáM>WÞÞ‘Ë'Ó†¨qÁCñ6œgWJ“ùiËáÑ<˜•O{>ylä'rŽàÛTžœæK¸È©”ñÅL†,¬»ÏSá2„OfÒE¹F±þòKDðÌ*Å\¾Õ“6JŸ åoð¨ u´¢Cgvÿ® jêöšØð߸ˆ–¨«|* ,y“¯ob8@¹qvÓlP?-qÊ8¤´EM]QX4 á IDATÒ± •Òxv§6ªå{EÆ6µ3ÜÅ®½…”µ¥ <òu·5€¥·b?¨¸¡X×=h/Àº®y¯\9cµ»n§9¥vsÿRàÞ„óM³°Œ”Àv/™£0¯ÐEµ_àÝÛmS6±›‰@ 8mkÄLœØ¤‹Êð?P+•“üü¿©WÍæà •òÜh(3£¼÷ÉEWì¤\nÊcؤ¥><õ°ºKÈšøè6•Äáº=–o¬õõ­jÕÇâM8ŸÉdÂÈG;3žâW/R|–Û9”â ŽAyðÝ_„CEò”{‹ôOö(ÔWáâ|¶ìA% Æ´FßÑEIÃÍÑ/I2©žž<ÑóÓ[ ó¨nµâàÖ³«é>)‘¯!bʉ_r½<{èšâå|Êj­@~.Þ„ó"@Æp>±':Ù`á©Ðý­~¼þ5ª+mÅaê¿_©öɺî'6ŒöFœ_°ˆ·"9Å@”H¾Ÿôš»BNÀbÂ@)%"9Éå ê6¡ˆ}§o×Hº¢ôꬶp ã¢{£ ¡F²õ(“Ç\ˆƒ¥ty¦øqϨ5%K>tßZ­uî8(O-*»Âr~ñ=Iq"&á¸G‘Ñ+°îÉX3ø&)ô œM×øú+÷4]zçoäyßs¾_SÿØåÊÅmÎÁÙP2ÔlŠãògó‰$L“Ky¹ºŠ¦µñì”)ç³±råB°oƒwä|ÿ~0À»ˆ»=k@.™?§ï‰9(Χ‡ˆù+|S› žSé=ÿqÚÎÉI{6²W\1X凇Âe¬™.Ñ$[Ïüös{æôSÄž€–b·%&ÐŽäs‹™÷Ò ²–xLê'Ô=öxG΋M8Ã6O-XÎùn*u{fÒÙ.[õLÙÖŽ~·™ò:¸*ﳋMY߯EM>Æ@±±³>b– ÏŸ¨…s]„³á²Cž¥Æq‡±?ZC6úãî4œ®ñ–œ‡ñ]¶àäôJ{ä‡ïÌÊáM¿³OMJSÈdË“"GH¾sÌöû_ºIg7͇Ââ$UDÐÒ g‡ûE>a#:³/>·ÓºÄ°ßÊ~¬\ÿ,¼ çO“u a&ç[óË×d¸¹ºŸQqˉ2ç-å<8ÌRÊãËqŽÆÂ_[Þ vOkùH •Q÷9o>Î8“ ¯,w´‘ÖóZâ$:÷ÈK}œFü>°}(Ñw¤½Ò üo˜ ö:œŸ"Gîã{¸[BÆ©Î}Mܸª½,]VØ^¼+Ym =¥]…õjErº‚á±èõºŽ·5´æ–Ùû?š÷ÀkpAQ·z4¯ ¶Q#Hæ09õhGº±: Ž©BMV/œ××D¥˜ÓîþM¶–‡*4),Ãñ‹YP¤‘W# ÔP.^Ùìd8É€)ˆ©0e‰ö‹Ã%Çxí(y¨L/$§ÈÑï­)EÄ¥U‹•i¼çÉG)§“ÝqgÜoN.â/Åúäû™P³+£%WT/i”½øÞ5çq×IÃ7ÈÝPd)­}ø£æÉgY?™ÍnUæg‹¥çj+â¬Ql}·r“T°ÎXã”rJOÞïý¬¦m2xFë$yø#%»¿¯Áyræ |ÿ.O­i¿2„™Æ[æ ™W/ü¦PÌûàgÖïŽwúÜ‘åI'Ìv’iN¬ m±äZ‘Â,!²¤pà6<‚ ÚOz­æ31mC 1UQ>;> ezÁ§aìi/ÙEÄ¡Oœ¬$õÿuû ræÏÄkp~3ÿøóÅâµ”9„ß-eôݦ—‚‚LŸÙTÓ {ãF7"èN gîÍ mó6W4q>;à Šˆ^ibƒ—  Ñk Áp±RR D´¶Ñnr*ñ<ð¬Y^+á÷fVy7Ü‹~—7ÿf»Àkp^Žü•å“›[é›¶Éd_Ï>€¤¤AF­zÈ#·^îL·Ãßò ©¿–¯\v{y¥«T¥µSÌ:õÃÔIx )Áhlô}„FÚfIÕ(Nõ‘{e¹²lu¤,¹*!M×ì!1®¬ÈÁ/oÎô‰³¸Opü}ð"œy8V;9 ’ß‹‡¢Q=l,™Î«•‘õDFVl ™ZrBÎZò8“Ô‘éTЛg’qó·ê$«¾â™ñ´@0!Dü¤>úÄ¡j2ºØxH­ Þb<šª”Z¸Ï7.,Í(Z-¤ä<Ñ]G‹ûã"çmÇcŽÛ¦Ýñ±óÁ?ƒ&õÜ-¥«^…óâúêyñõgZ%õÎâÑB§«9‹•¬8õ¿’_ÝwÍg«KšÇÔÞZëO]á8«6rŠ:Ò`‰‹µhRÄÊs´¾TòôzÐäÓ³wU‰<Ê'÷¢æ6p^Ë +…5¦è–qÞ5”ío5X¾ÙõãåÇu~-Šø{õ'>V¼ ç{$çµ:Åžòõoå˜IFÂLûƒÒyØ)‘Ñ¥–•¦øÓÆ&6ÖÇ=ܓ㹥îºG‰§©"¯ó%¨ù‚ðR˜û'–L†¼yåd¦Ú”Z¢W¬5ãHظR—#XZO}Z•kÜ÷Ê[‡ŸR ¡¸xñì!YI›…ãxCÆ3ðZÁÜDAôÚTF%ªç¹k¦ý,ßWá¼$à¤;ówS³¹¼gxÆî,} ® ürÛ` È Ö´6ÏZ­e%ò£sC­Ô2[‡´BAIŒ>G~Q¨nêýµ‹S=• ­äÀcªOèçaäÝÏmªQ“÷´—ÉÌÆQ.³ñTÉLKº¸²É•Ï£¹û&xÚ/´ óŒJÚ¶Âï0ïè9‰ÚYÍ,;Úø§kпçÓ´! mê26uM.n;–üçh0®~ßþ×Òœ½AŒIŽƒÉÛ²ï‰[©ÑDÛW‹ù™®:€Íbñžëxö“Ì¡i:Ñ#=ÊùZK‚ÇæÈNã$ä÷ôz~Ú+Ï©…|j"¿&k µYŠ<%èÙx#|¤`èÝ<ác¿9JwxÉÇšQíkùÉãF^ƒó+åyW':´u¯ÇvZÖjG¶˜¾Å©ÞÁÚ—Rê‡:_x²Œ¦?Zì•_wÿ9(qœŽ<6\-:^›È8«r ‰ü¹0@S¼JÛ-Q¸)4(›x©ùª®ä€¹lö±ð*ØM›ªÉtU¹÷Ž^§<´óû^™Æp”µ4ùkOµõ/Áù­.5qZ!¿ç´-ó–-¥¶ CXy”9ôycÐÔê_Ãr‚ê<0#Rˆ2úe›hØâ{4Q‚Fr©Êd2jªm…ÐV°Ú”†¡±Mƒ#nëÈrnMÜ.[©®ñû,c%ÏݦhL»äÀ©Ž×IEß]5éiRžðîsŽ÷ƒˆÊS9/Áùí‘zg}®PeЇÛgî$±“A6{Ìk&D†âäf(-B¸,mʼæDÁ”É×W¡5Œ Ìž€4r?´-øV8ÓcR0s5dá DiòŸ|5ìsI+ŒùÞñŸVað]e<…Ñ®fŸ“±µj7ºeIçÏ1»6Ø ÿd[K‘AjÿBã¥äg¿ç¹YC›ÐŠ×Úk»6|o } ‡ÀrÙµWH0ļuh”w:5îzkÕ*ý-ô?x1ÇŽ‚æ˜Ñw…ÞZ‹&“Z$œ k )<òòxô–Z|ý|å4¹W?£P_á¨ôñhŸyý§¬‘—àÿ㣽ç +ô%8Ï&^uß…]Z.'î ×ðs$M’ú Q½­HãR^²ÀFk'ô&9¹n -pÎ —ÖÏ&‰J {ïæ8Z*≊^د¦\1×vI#²õ8н+Q»˜ežöIU L:gÛmÌ­ðè‘ã¡¿ _‚ç‘‚Û•»xsÊ©è<ÛÒ—T¸3L<ˆŸØPÈŠF÷‡fõñÎØkpbbàß\ ɲ“…\nŽÙÈ “Ýl`¼7»¬CyMû[qÖ#Ú5\r(˜Qr"+î\z­ˆìÎÑ ß5o&£,õ±o)‡Ä`4þõ•9®}zmEoˆO¾dºç¥  ¿ßAêâÑt½«%÷6Úéæ…øÜ*³†Ü# }Éöê?÷臯Ðá<è9‹¿dqh-™0³Úz.5ßÊè‰GVh|5Ä]H¥¦NaƒªV1æâvMƒ…¡—ç†q曑ñl\B4/ÔÚ£Ÿ.“e_ Ê› Âj»%SMÎ Bân ÉÒ¾Ó—³¦%ÉWõÓEÆ"N!Ï‘Â3cI¤Ú{Þ±bnÊü¾êa lÛßÒæ[|¯ÂùM.ÛŠ#V%™C6Zî‹”Šˆ…ª;«ÃbÁK ›’"£÷bĽ\§sMÂêîLýv$Ò›Á%yñ ­Íl÷ÍL¬êžmJ´àpR†ÚÄÞÆ7Ö¤’ òx¬j¸¸Œày¢K_ÒóY _Gão™ú4ëÛ°Û“È{lÈÙÊR؈}°2ÈËp~R.5NÃJ¸5–KÓ\¼ËÍ' hv*/h˳È<­OJδµVË©€Be©íå¿4zj÷'Nd÷#õ^ºá{ø]òC .˜›kVsašs1¥Ýv`O¨Q8!N>]eËä.sòózÀɱY uwÜÓevëå€|gãƒWâ=…»•—Fÿ¨?òzœ/låÙŸ',ÕV•—æ)ÔO^Ò¯ˆ“kòã†ä»c]΋(¥ÝöX©“ޠ̲ä\[ø¶¾@ƒ~V°1Ðzܼ´¨]²†o¢”ˆ¢x¬®íÕº©E5×õ+ºßŸÜ¶KwÊž&ZÉ6|þG÷f»÷à¼øb™•êkâ{V¾-õûu”‡º7¯Çy¿&¼KY9†,É컋Ùvä*p.å¼,syI“^I¿8í«ëbdj+sX×ÂÉšº©Šç\N?)ª¬N£õÁÁš ³Ák6ÒK6÷27UÜ9n”IÙóºXéR±‡=Yë#ï8ς̰ÚX ™]û"œ_Çgæù:—O´çé_ŽómÓ«¡ÍB4Dš«GÙ¤èµï­Hgê N0-ŠÀ®47S/Ì×Ó•­gu¨&ÝÜËkûÒ+ž»£æ¥²QÞ@K”²‡­&ÎWÑÎ;­Sæ ák-3ÖÖ¤÷`áb• M$´¿ô篴È%õôÙaÏ_fbÊk‰£U›´F±’%û.´ `áå×e¾#/Žgy9Ηk/‚Yè¸Ét åìD1¬ãü"D°õ5é0f»\2Š„c†Ð©Ž¹^zy¦Rv÷ür •œL,™w·ÚÔ›kWÌ9ÂÝRª}¼HÛ”µE¨¾Ñªƒÿ„fðƒ mUðhP ­0‹û‚ÉÉI9é¥ ôYeÅeMÓˆSæ"3ñ—¬?,µ6ÏJ.½ç7.¼‹<-^™m˾“[ͤÀ37wÉV­@0Uð>s*^{¤ ÂcÉÊ N†‹{Ø}‰HHŠjçpAt0yRÕÒ.oýUr‡·Àn&ÎxÎÈÀÝu´jnJœ&É‘‹f“åR©‡ÐûðâY©ÊëÓ Åþ^Žóó1¤r¹xmBÔ‹»±M±ÏDPÙï³yEk´‚7WuôPÆÓVò2®?äS-Ô,ùˆ?çê¤Æظq|ø=K´’~WÛ†J[0³ѰÔÒ(V‡ÐÓ‡EðÜj‚î@S84¡' ї¸V”>K­寬*Ûãå8ߥnŒ¯ C6ˆ‹‹ºü®,…£Nï–+‘ö&]d1 R„hì}VsÇ”g?Å-&†Ë/ëìø[1õâ`t‡žŸ}nrMµ‘Ú. jHùZõœeü8ã¸Ä€âlíÚ§¨<\ã5€’íE޲mý–ÖZ©åæ2h?¤Ðýzœïû(>eÐvÛÏþ]½º›v˜§ÐPŠåÈ7®2yΰ¢Ò{ÇŠ’¸;ünáƒyE’ 6ú¥æs*­ºwž‚5®Íí,\eÀ~­$ö³\÷ûb²8;ÈhÓEò¡‘.¼ý@ä¦ë8±2Ž÷XRKáͳ\ÎÇÔ] Š®¿–±)§4ã­Þ¨ŠVñÇ!¼ç9UAß{µ8G'j|×¼—ÁÙí ‡§8ÌJqfϤ’E·i„Ôub9ÍùB;I¯×4.ºï)ÌnÏ÷Wƒªµ¼}»Nòaž:hÍe­î!‡|$81Ar£Fot·igã Èrû¤De?Šâl帲¯Ìm<@­î†Ò&NÂó¸;íôÈ~ˆ9ô¨$ý r^ì:gÉÅa?ùlGCÑY¶\C¼ÕÄ­.v¶påš:èeóˆ)ÃE[nÒ³Ÿ#Ükw aÝMiäÚ·]ÆGqx«{1ðRêï­íiÏNúÞl¹jC.Ôó8 …óÏ©0kr¤Ä¼Ìœò£è¬Éç’…Ê(:ÀJ¨{[Š\Œ°¾§Üþ¼"ç¯ûc§saÞÀ“8#¢«Š³ƒ5¦°²²p‰¢BS_äÄ·ÓàåzΗ'Û“B)β‚m׫®&éÒÞz>!ýHUCNª¸¸–f~LÚ–éò‘D²½ZÙ¥µüÖ›ÿ~Èêe½ÖMzr=ÍòC’3ªÚY¦²>6Qÿ’œÇ GSFÍ{îrþÜAõ¼‰ÓeogçCröRën¡†§ ‡ÄÔž…ÙMö…äð_TÚëzôÑ$¹> ÖÑ{ñѵhäœéž:¸EËkDòýóOrmêbÈχº :ùëæÿëoæÍàÁåÄ¿Žóßøv娯œ„Pµ‡™\Ô[Ï%XßÝÌ"¶~â#%©!ãé5®»¬i[YßGŽg›¢Mž‚ Íœ'ƒM©¡—µéb"%|¦Z¦§<­]Îåžtº¹VËœ'j {òt/Üͺy¹ëÒ<Õ×M›Ÿë1—þë8ÿØ’ºk”>𡍠¼$̮߱ #{…Ø×0×·¥^lž /9©‰±>&(òLœª™'®}²r`¹\5ׯ=›ª÷­—‚ÍRêk2Ÿ¸Q¤ú"wŽÓÊn*e—³¿¤¼xBÀ¯ãü“ûô¥ú+·bLrÁP0ÉJMW ÂìMW36ÜþÖeš ¾ù õ“ý_…œ¯÷ÚÆ‹³Mºr 5òírBQo<ï²}ÎwSÞý¶v¿®dmóçrÿí?ê‡^Ò×ñë8ÿtÔ(y¾„–íÌõ/‡¼æe>bù•nס›€¬M iKþÅ8—'Ÿ&Ñöƒã²?1úæš“õA©›Áù ‚×ÙûåCÖÇs¬Î²¤[C6g›4§È…·ŠÇêiǨÿ äÚ|ê2ﱪcœïh5±>ßM‘™ÇcS¦ƒÓÚåÏ×êøÆ¼’i¼R¯üúÂwãv’l%y?—ãÔÓCˆòˆïcpþ7¡‰ìX1ÇT)!þ+ÿ Ðrœx9Üå”ö4ÞàüÀbÞÆÎTmÚàüÀ bqÝžw98?ð£øÈaooR{0ð-ø-z å^ƒüÄÍàükâÉ£øþ?ö×Û™žRb98ÿ’x¸Îé÷cs2»À¾IÙÀKá~3½žf­¶ý1'„ƒóÄ=¾‰~¼ÍÀûàÙš8ƒó¿Xƒó¿ÈÐÎüB”™ë£ÆlàM°„¾£~~`àÿcp~à`[YÓ|œ€ëàüÀ/À¶KjæüÃZÖ瞌³jÉ“–ðaç^w¶‰?ìõç€òÿóê­ }›¿„¯‘uó¨–K~PyèàüÀïôZ#Ê=8?ðCøGÊœ¾ÍÀ+¡ž0úq Ê ç~öœz•¯´¬¹ú5õÎü2´8kæ?ÈÑœxîêœïÛG®=ê$vp~àø7磓˘ûÐss€7ß±ÓŸ¾¥œÂ~ vÃdœãŒìVâs‡m=Çiá{³ƒó FE)u>t! ¡o)¦”dñÕoJÎ)^ß1#íJN¾TÞÞÔ' ^MZâ!Éú®wòq¨Vxpßep~ƒ®a,ñÙœ>}6gu™Ü}@+£Y÷¼ñü˜Ý³ÿ.Ãq®Bõ†¯y$Ï¡œß€˜Ú`ÑõaW­§C'+†ñøhŽ¿Ëî8QÓñ44w=Õ;LÏч!RvŸ^ïwsøyëöa<„dÔU>–}Œt2lž\ž¸0 ÞFUÇG´£MÖì®Twõe–“éôGÎŒü¸ýþûðµz]eM{`{œß‚x Î×7†½î£C_xâßõïÚq˜ó €ùÊ›,6œ«ÆKàìMåv÷,¶/ap~2¯¦ëÝJ…ÓÒÜâüEæºúóqhå„óúp=Øü9­á;pö–ê¬Åý Îo Ù¼Æ£‰­§fšwòmŽFøÈùŒ˜à¸e×SÎ_¯/Lx Öï‡}Ÿ¼¥–ÑÎo«ÝÒѳåw'ÆŒCŠóègŸÌ2NŠç_ÝzfçÕqOiîÌÍü\ÌQ¯cU¬r<œøN ί@ÜÙÈžºë_ÀB«³Ì ¡Î§ëƒKNß'¦z_‡»gœ?¹‰®ÂüÁµ‘÷nH×än "­(œ_¶Ö“*ƒÄº>ËܘI·|ˆgHlpêaÁ™osÊy^{'¯ôBhdö[½w®òW18¿9ÉÌ_`‰ù”*œ87Þ…°'aè|û•ý?#òY€páK ÛÿÀ &í±ÌâŸ\Æ‘^`18¿9ç©—Üe9qn8†m'ùyøó×OÃ_¹»æü§½úâ=¯ª¿ËLæ·‡²Çe‘m÷wÛÜÜÚã[¥çW ÿròg%˜ztÜ›3N‡(–˜|ÅíÆONOveÕÓ1 а+cnq=¸òeüzKã`jwóÁ•ÇÿŸQE78¿@Ò*‡ã(Ü̆5«`R?©ò‡"xd&y;F]Qw6ÙÝ] .ä*’F~^Âë“Þ߈rªN³€|µà_uôÃ>ž«½®mncb%HÝØ–nqê¿CõÚ&ϹV኶rÛUI²<ý>™(`ÖfŸ–¬N)åÙƒ*ñP~© þ‰k~Îþ58¿¢”t²µzã\ÄÍ%xâöQicø˜)«iW±‰µJ]y19øc®ÆR#ãòÃh)ÃÔç{HÏnM~pŠrÁàü÷ zc¯Ê¤Þ%ßYBÐx[xŠ_ Î< -Úfú/·”' Î<%×Þõ¥Û“wÅÁùÇ¢æ`Ù!v©wyü߉Áù‡#ç\o›|þ§6 Î<­•FÄ?Í>{808?ð$”6× ·çÛö-~çwN޳ݻ7ã8ß’ é^ñ5³=ÞtêP¿>0ðxçå ]k¯ûüO`6u‰MˆjlPS 1eÞm±.§ƒœZIÑÛS­ªÛºçeŸvtú­xç‹füûcÙ) è9ïϪV€f¼Ý$ã¼sÎ{gùÅiùüÒiá½í}^7ÌO½Ñ~…œJ¾½W¯Ï¤€~?çÏnñËèçIDATC( —ìÎÊs¯@¶}­¨2sþR㙤طãáâ«Q8(ž}u©áô§W T«½õ¹•ó>Û:_Û³T}Us—ñb<Žó^ÊfÛœ;·c?êÕ'©Î”f¾gêbß 3Ùˆ‡¾–¤>^æwiì"6G‹~ÛÄ­&Å*œš–И Nkdäêb¿~ôcYïbu¼âs°ñ̪,ÛS ü1åÖ°c¶Åjú%|mòɇ˩_ú ñP~²N¸”çþ:Ó›DÙÇ'Ô4>:3¥<é`-},Ü[”j1‚ª?ïͧ™c±Àîd\É™7 0•›Tý¼A»l‰‹»åé¡¥sÖ)î¿,­j^C>(ËĽ]¤™2mHVϯ—|{YtoúÒäž¾r©.Z ¼B3Ýò•†—.m4É`ë“fmì•Øãœl²‰ó†¯ ŸH` XNdn#œÌú ÍfÖµ©`( ½Éª߲ðØFY½éÎ7Ü•Ö {Fô8ߢ1À–Vuñ–wÕ6·þÍ4Ú´½ã5`]ü}þã8ï8‘U…/uöQ:ç#ÍLm˦w1:Æ¥e}U_å"ÜL& ÚúÝÒ"X‰ÞÕ8wbÃ8»²´.%2zsšá÷)¹,{Ô²¹4^Kn~®¶¬,¢×úU›E‡õD_õâ·ÀIËô*'ÞÂyÎF,^lmôˆ@¬Âî@ï5Ò¯ y†¹b¯¢.ÿ"Ÿ]ª|ˆ[Ö3v4å×õO/Sì¼Òâи¢Š"÷¥ÀäÐòmÛ¤ÍØ·¡éº1brt5iÉ5ÒÓÉÑ¿œHæ[ø¯ÖÒçT鞪É!ÍrlŸÄã8o¶½¥´Âµ©³IÖbY|gQ{!²(kàscOœŸ®9ß-–’tÍúð1ßyrô-<-S¤lq/ U°PÂ]5t1Þ»5ïWñ]Ӳ실-¹ÁºöoÓfö—åÛù:éÅt­g¤[x‰HÄJ¤™ÁdŸ™|Äu8yð—AB~Þ†ß#Nâç‡ëÁþ<ß ¯ÜDÁ®ñ|@®R‰oƒ‹/¥Ä†µ#öÄÓÂk±ÐÝtöÃLî&í4š þ’3V¶JúÒ°ÖJ¡M™œ(ZLô %$¬˜èÐ#Œâí'Ûß×÷ø0η¥Å?#U'"…ÏEÈVa£l–·rŶ­dįø•Øy£È!WñSSW‰ƒ…KNLçÂùL!ÁÊdåámϾMjÚ´e#jpkŽÇì”9:·ôÆO"Â+½á|ZžgqaÖ§ïáïâIeiÉŸÕT¸uõÐ[UÒjžð ži—jxºŠ1ññ>Æ+~l…Wfyiখí^uœçŸßËì€ááüN£¼Іög}8UiŽò&+~RÉ…Ú/hbãàk¿0Öß¹ðd§Å3ý…xçƒÈ4¤c"…¤´ ÝqŽ¡2ÅpI;.}ÕÚÓ¿b7c‰´¹¦H_|ÿBEúÁÙ­43Ëð-|¿bK Rvvq!(îm«jX™à!/œw›¯Ã{<Ó†óòÕaIõ2ÝÛ¬[Èjç/ ——°}ËBö…óIÑêÓg?›s"ø òD^drI ‹–vEf5Yå /ИñdQÖÙa^öAÜ+gS Ù}ÇÛÇ›ÁQ”·ÌöÄ[‹1׎ˆ^#š9f‡‹TäóÔëÍ¥ÿú*,bçé;׿°8áAœOý U}ä!±ÿÀ·Sü‡€IslÇ?ý,/cj3³€†•ŠU°7Ç‹ØPg¾Ê²þÍ`?׬FÃ_ŠÇ³¯{|Õ¶ìØhJì–—Hà6~|Sò×Ý?÷ôC^(×Ãzo-3÷ÊúûªçWKŠs$Âù`6ÙI»®ÂÜãÄñYs’)tOÏ)–iZüž‰bOƒA• /¾‰e¥Ö—˜¬H˜?'$jȯéÊ8ô‰»ç|–·ÇN¦$ð7­ØëF—dP¼¤úsÊ¿ö­/òn,ÌÌy¤µ~aqƒ8ŸÍæ\½µk™ìä}â6÷[åÂKü¬§!:üŠþ²Ž¿ŠD^f¢­¢X½òÄ#)±øˆ´¨~²E;е®z§Åaß 0ªn™šY=ìiqEú9À . HóÁ"?óÔ3/ý`KÉYÃå"ù Y`ЮÐa±úâu”|´mjÉlj‡Zg’B|9 áb·ÛG±E¬„j,—Œw|NÆ;LœW¡ËÓn[ û;‚»EÊžž§Â#ljÞí– oÜøu;*k $¾ ¹[ô`1Ý‘½FNÔŠU&äp¢å»±?@¡ÊܬýUÄX-qFýcÉñ[fšnžÂL;Ý¥[=g—K?6š/‰åùœ¦„\ÒÒk_vǰó/¡³å½Ü’hOBÌݽ¦¢õlí`üûr)‰>NãE_(w«ëÖÂÑj”Zм,rªûÙr¶ô²mÙ4uk‘“¢Ë Ùøµ³!+QsJ¸ôBî>ý2½ÌðÄ™š|çp-9•.'E—ƒ/ÍÌaÌc)tŸ…sÍ•ó½ðJ.MÎ\#o剪A ¢(¤''ô#i´ßv<û;zF>¼9jyŽ»ËÙÌ*RÑòÆ-HÞ.”Kþ\w»¯}\Ot{rß³{XX{¬…È7¤ïERÆ™…l=¶ÓеÆÊ/KtP³¢5ê*ï -ômq›ë žâ5ƒUÂ1Ú$!œøýU Ë?Çù?1;ïCØ…£šmjS‡³ÌЋë8ý?Î'>WËŸ*Âa·4³@YËœÕì¥ûÕ³¢`ãù娈(|¾ƒP´:)ôƒø{œÿãhöTü f›z”æ®â—ûCeÎê¯{!©×üx¿ã0?ç‡18ÿdT}îšÍ“Ûüt(;SˆPÃ!’¦åúO@¡2>ýÆÄʃ18ÿKà{d¶ë© 1‡¸êÿ¹+õ„޳_‡Áùß‚¥Pùø«âÂífÖ¯£R ý«í'ap~àÝ08?ðnœx7 μþçß.›6ðHü6Σx‚˜ ÞXgµuÎãw–þiC !¦, Ÿ¢§”“ÔRZ%`4þ`üô»ù øëÇÖß߯ùlŒóL·(Œ$X‹?¡R ¥(JãIMW8Þ€Af´~Ð G·Î`Ñ`¹rÂ’ñ!ÅsIôï€ÕàTûZDîFÛýt¶î¸mæ£Y«â´‚õLWPñCŽ)ÑE§0í­”Ì‹¿`µ·’þAoïoÒyzsd9&íèF”üåèé^ôP<ŠmCÎ0/Vñ„˜ç†çG'•Ș1#]Ñ?›¿nJ~ç·8Øi|÷=O¾òOö>ó×å;ñ:ÒL7ÑŸ‰þ […VÆÑŸúzqÜ‚’^nZ{ŠVôAx É2´X‡¼± ÿG K£î7úÉÅwr¿ã1ƒô·—Ò3òù¾tU¼¬±JÑtÀë[)Y¹÷^îÁ¨3KpóáoåèÊðÁÑÿõOêÿfÎ?0qRŒ<Ltˆ’ÓD枌Ö ­&2©1$˜ÎØÂ’á¤-ÈGgÉ‚:¬"úÏðÀà-‘;m)¼EYˆQšàxç .0`vÉÓ¤•@ÏÂwâßYÚâ|àëÀë²ß–aä±ó°?‡baº\Yý6¹Ìî]‘»ÖVçÚé ]žÌïO]¤ ¡Ï’ûè] £à#=¥ÅŦl|мÑò ¦ ¤%틹’øWŠ•} ïÉù»Áþ™N^þ¼nÕ¯ÃàüÀ»apþ›ð± ÞÀ/Âàü÷ üñ¸î08ÿ-8èü^ ΃~¿Ÿ=#øƒóƒó߈Áù3´²ãØ(bx) Ο€E›fõ ÕaHSv½ö'_ý¢òiÒáüØÛC(ucܶ<íª‚ø¹ <áy|äñÎþ*¥Œ¿Áù°šQ×`ÙÌk9 ¿žË‡­Î¥šoÜß½‹2Å®ñ=kv'÷ïJEŽøùù¤Ü@wQµ¿0ÈàapþyšµŽðÓ!Bm‘% óF•ø"s?PƒpX#5èþ|P£%²!‹ä<†0‰zÔ^g½ªl»ÀY½9ár૜?Ç<…‡çþž¹õN–[DüQ2ƒ¯d6Óò«8áÝÂy·”|-¼E³˜¸êKº¥ß¨.¶<ì8OþÆ-ïæ»18ŠÜ«&3÷.WÍÜ‹J|[†FÙi—c¹*.n†§=­™Ç¸Y vË+*ž‹Ü×Öíy*ŸÅàü0÷†A8 6™³ëïc?Hjn¡)ŽQ}OV&lÛÓÓ*S¸ÓzÂÔôâÞ‡uºÎ:°Ï8Ôò¤ñ—§ùÓœ?Ô”†©NªÒöpU~ocÂÀùÅ¡A…&×@lÍ»‰ÐhÆá!‰ÖðÖ%ã3Ï-zùmd1“,¯ääüöáoû]08‚¢”¶®\‚ÁœJ£•Û']* ¢¨ã¦©ÝØ«m1ò*‰TÄnŒïÅ™5Ä2Ë÷ÔTw2l5ÊçÞ ƒóï†ÁùoÃQ²œø.´88?ð^ø+êƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7¼ç+FIýôEü"`\Ûü+oêujñ­?«—à|±;}°KtήW÷럽õeþýuÅVòôÿæÓ¥·#ÑD«“[¿Ž’Ë<1çƒß¼ÓæÕN| ¥ú]7ê"圸·ü.ü8¹ªW-_rWÖkÐ"X €¡'ÓïaßyÍ·,…Æüôº4‚5j~Pž”5á’­Ö]vLDùíGÞu»6Éh)mÌkÃDµí*ËÁi¿üoÉž.¢âÁ𥆹ÍS—§BI³‹fS¿o6}µôÌNÿÝÞòú õ¥/Àù"£ìÂÌù,ãñáØM§EšYéO(›T¶+Mš™×M‡›ÖõÃ…î¦rµ{g1˜gFûkÍÊÒy¹[P'O®W ¦U ÇL*VÞ ë¦^[ßQéÒ+™öù¾UqãI[ß:.né²BÃVøW»úïEû½Úà|èÊŽ¶›€8…æÅdÇ=«}ÄéDq€žÄlDô.hòÎiÃù²mÚ`"©^ LüNùI_ËÑ‹»vY†š ÖeºÞİÇ»LT›7&w[ö„Ðûl7>»ÞôÙrzú«”§·÷ÿ›¿Ïù2]õŠVWsguXIÛ¬H 'µ5·Ëo¡W³åXáþ¾õŽ~û ®ÚiëB«­vM=H%”½eMÒ•·ÍOvY‰³Ä™=UP#'²Ü çù¥7«9¬èº]äuH)ü}ÎÇé(Æaú-f• #C ³v~ÁÐÌmÉ@Æt§4¦·­0Ãag„óîâaUyßE¬žh*dß<¦®¾“íá†;å|$‡ÊoDC‚™•ÔôÜ•#Šu I»wL‹^ÿ]3ÿøûœ÷GáàÜ}†´¥‚…_Æ(들…Ì·^)(ªó›üÞ–Ód¥/Yí¬éÞµ±‘??EÁ½«wÛôQ\¤?èÎüddÌO4‰´ßH=9ŽßW=c~{]ga~sëÅQì[ÌÉF÷Nøûœ':‘5oiC3'\v;ÝÕ¤âÞ é¨,'¿¹¬ª:)ïôÂ4BÖ½’ÙêXµ~{>‹;x5ª­6äæ´Õ»ï²kn“ƒZÛÎi¹‰].A¿­xÈKp~²Ál÷o2å¹Azf¡( Áë‘—.”½…šèᛵ¡÷R“êÊç÷ÐCÓ¸>ØE£Vî 6j«©žEêí©€±6îÕÎÔf<=ûë‘÷ˆå>q³v½r³2ñä4Xxü}ΧyÊM;Ü4“Lªj¢ú{ê0$µ:ý ý½-m×ÄQ¥¯ÙÝB²üë²y!Ç—²LÔOh·úâÆC—%§“ ×ßÚÆ7©O—¸ÒÚczÉ&¶ŸøXf¿Þ ŸóM+¸¸f{ÞÃîùâ~pê»2ñxâÓuÞ"]ÏlJ8áG™U_l¯V³'c5›äý¥€t)¬rô|ÂZËjލ!V’Þ¼¦ß^œšhNm*G#nIq6Jéinó›_ò4hñ,_ð¼pZø†¤ßÅßçü¥]ÚuóqKÖ¬™Äªùâ xr•¶¨Ö9³¡1/ Ùµ"w'ù—påË‹%]ßÏE×®z¶+Žs¥5f.»ßÒ+ì…7°¼:ËšnÍ9‡€Z‹­NÝŽú¼¦v½·¨áeñœ?Ç/–VÇQéø`fM ýž©lÕqè÷¶žë’RÖæÐæ¬u!¿±¬ÙY¿•@KÞnëù´ð æ„¢!ïþjíÀoÀËr~`àçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?pþˆ0ßœx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçÞ ¯Íùöî­Ÿ'xmÎ×Ñ6:pÀks~`àˆÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçþZ®?} ŸÆàüÀÿBûé ø<çÞ ƒó߇ömÞ;bpþûPÊO_ÁÀ=œx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μçÞ ƒóï†ÁùwÃàüÀ»ap~àÝ08?ðnœx7 μ翊šú ¾†Áù/ãï »¼¾Úr?8?ðGѾºÑÎüU¤/>npþÏ"ú7×Ӿͻ¡MæÍ9ÿU ÎÿU´8‚è¯ap~àÝ08?ðnœøShŒÿõƒó¿|‰õ"Õë÷Øj±ëòæßÒjN„œ ~Ýji j-ô_¹çÜÿÈ·%kú ¤¿×´6"caFÎ+…ÿÍ7´Ël¨AÒ˜ sµ”‰Ç1Ä耷Öyï£ÿÖè àg£Mÿ‰ÿ´ò€˜Ò¿Å¡çÊíó•ö…ïkF mAÆ” DGF…|`;Ë7Óí L¥[ˆ¦Áƒ¤Ä= KéÿŽ©¨V`„µjf1ßeú:èùé©ééZþ}:;8ÿ+PòÑŽÞ´¬õ«IÊš‹¸ì'ð9—!#Àhb¶%›ÊÖTÿ/>´bŒ¼‡ø}v¾½…Wùs(´¯ï}˜êƒüpmƒa^3¼×î(Ô™À³Ï;?Œ~‘éŽð »Áà¶eÁ˜…ֆ׃8oºsóOCÿ1çÙmÀGöÄýdø®.°b¯L$n“«ÉÁàl2јœ‰R”<òãœx âöÎÏd~R òmŒe3Ÿ?:vœï64¯™É_ÊeLÙL-,+ç )´ÕhÙ­ÞÓîpw„É¥°‘iñw9*Sý»ÔüƒZ0É?ʰßvèÅ ü;“¹ãdisplay); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.70/prog/weasel-4c.2.png0000444000175000017500000000107310400443670015103 0ustar dandan‰PNG  IHDRRIÓS™P PLTE5/+ŸF1ÄškÛÛÛà‰ÃŸ pHYsb&2ÕIDATxœ•Ô±nÛ0ГgP°C³diÆB“? €YºD@Û¥S‡ …¢AûÚÝ 2X÷¥œè¯0í’áæHÙŒïÌ!á`›§óñ(|f8È«9ʨŽ{žÚ&§`2J'—ÞÂLk}éá£V‡ÆÕZ{³Æ•Öh*\ê[#TøCëPï«-渧T î+W•Ñ! —,”³à+©.¢Î´Ÿk]ÿ‚°Š…Ô°«\±êƒàwÜÓÉ{¼a]‰®»j¬A*Œˆýn×iŠb‡ì<£4Ù"^JfÛÅ]õ¶Hˆ‹m Åç¤Ë”—[ie;é‚þÞÕÒBÌ{ µÈPµÛ˜&)Õ=‡Ý™R\ñËx4ÓÊu‘ÎÀh¹¡'…kP5pÅæ~ {æøô¬—pÓËz?îÏ[©ñ•l:…pŒ?÷RÃØ\Iéì5|ãy)ò]œó'x©î‚“òãRgŸ:—/Ž»x?(íZãµ:Š‘Þ?(©Ø7½£.~©®Íè_§cïÂl£MR˜Àƒ”Ò;îa3”±‚¤îêkCÍp L•\qÌôC-ÓÚèàÔÑŸišÑ<ÅÖ_þ“Ÿ–á]Ù®Mßàã¾ùÌx‘>Æi[\â*dIEND®B`‚leptonica-1.70/prog/chars-12.tif0000444000175000017500000000626212226572724014515 0ustar dandanII*ô & Z oÿÿÿÿÿÿÿÿÿÿÿÿù €Ìr‚Ç$‚‚›\uÈ3ÆA¦(†¾×ŲcÑ ¹ÒƒEr 0‹„4‡!¯d̆d𤠕ÃКI7¦ ÈePŒ&C8@ƒ=zP Í·Ié7¤¶ÁS? hÙ´q¿\ ÒmQIY馚X@© Ú7þŒEÛî’uVî–›œmmt“¤ßÖ–[Tž©´Ò¥ÑÊ‚‚ óئ ºÿT¾ž—ÖïZ¸]]:.º]$êß^¿ëô“†(¸¥q÷ÿ¤©ÿªÿ­$»5þ´/K¯KÝuÿ_Ò܆dW~þ—Ö¿·ÿãõi%¶÷õÿõÒ´¿Èm¨ýWJ¼ E@éWIzCÿùñûuZI%¥þþ—úV—ú}ýlPíÕëýiy¦» +ýH(‚W{ªUí}~©%áI0Ò×þ˜{itDÑqo_è_¥ý1 ý׈0Ä$“^þ¿È¢\ãxA«m¯µìé­p¿ô ×„ ªi0í|ka¤Œr!Ž—é# × â\Þ› # þȾ“lØ)ÿþ„6–7:A›þ¤H#sJßÈ2“!µ¢_¤þõj‚ µ[ÚQ.Þ“jÿõþ•¥ôô¡°ÒõáÒJé¿õ_Ò×,wõIÇÿýµoò QUúO~õ½tA–ÉFé%ö—â·õ¯ê–¸×ÿíÿÖ–—þ–õùãú_¶•¯þ–C6ëÿKÕ?þÛ¯ÒRƒ×ú_ÿô—ìS×þ•®CC¤Ý/Id ‚ˆë×ûoòPA‘×­.¿Ö­RÓM¤›I¶à©Õ®‘vþÒ}^’íÒþÐ2Ç´ºM^´.ÒÞ­*µ \=$ž˜0Bßþ­$ÖÐIØIºVÒAðxKl$ÄÜôêÃHz–H†n¬0“ $¬0Ki­C Ä&kKZ Å|B¸„ÅSˆ(ìDDX†i¼hv„A„, ÂÂ…È Ç©!u_Ûª_ÒJ½¿\[I!Ý([iÝuXÿÿÿÿÿÿÿÿÿÿä Áˆ xA €T ˜i@𠂃!°n!܇ƒáÌ!· eò‡È4— †ud2Ò\˜ d6jBjAõ ú}HJƤ3@ÁÈb„3d 2 †z´ •„MT!ª-H/É`2ðƒÃù‡á ÿýá á„xƒ†Ž0ãýðEé„|ƒRS'èØ$†‰‘œ†\ȾCDÈü#€ì†Ï Goäùÿ8 †£GÁC!²Â 2&Ja%4 GÏ`Ï‚²i M­hÛhØ#ØA°‚ žÂ˜@Ò;M4ÓH&ž¤m„AØA´ž\!Á4Ó´Ò¹ œ=Ll ƒöÒ|0÷Ý'ÿÒíoI½ÒotŸÿ×öé´©/m&×Òðÿé?þ—÷¤ÞÚMí¯ÿ½v“jõ¥¥¤÷º^ßúUÿ¥ëzOé?ÿ¿ÞÚî“ii{¤Üºúûéú\º|º~Þû{¥_û¥ýÕúXõkú_xâ¿þ—òë·¯ëþÿ_ýÓ¤éWÈn@±õ!!êÿþ‡ÿA}¯¿Wõˆã÷è«ki XX} ùjý%þ¿ú^õíêþ¯ÿî•ÿtúXXi*9:êõûÿÿKí~þÿ½+þ÷J÷I´’È $ÁÕ ˜Ý_¯òòÿý/ÛÒô’ÿýÒ÷Jë¯L ƒ U¼$»ÿ¥ÿ¥ö—·ÿþ”?ÿ¯umRìA†–•ixAWÿÿú^ÿ¿¾–úL÷êÞÅi%á :¤¿x¯ÿøaKí/oý/ u ?ºMýSt—„ ¢a†‚ÿ«ƒþ8øÿ_ïü%ùÎÊpiýýjú¥°‚†Z^¯8Aÿÿñi{ç?ðA¿Þµo¶+Ä °ÃKÒ^ò¿Ÿ|~p4~ýÿoý…û†ÿׯÝ, „0iI{Â?ÿ8ŸÚ^ÿãûd5ý½µé=, ƒiuûïÿÿíûþßÚŸú^ÚÛIpƒu~’W߯ý`ü7ú^ßÿí‡þþ½ÿïú\{ý÷ÿ·÷ýú^–Ûþõ«t•épÁ-ý$ýÿ}܆ÏÿÛ÷¯ooÿ_Ö›Òà ›ÛDu©€ÇïñÆÃÿíý¯¿¿íÓiz¾–dI„Ý…×ÿÒÿÿÛ÷¯oëëoÿ_oJô°ÃÂ]ŠÂG„¯ÛÿoÿØyí}½×mvÈ7õþºWò >< ¬0˜„»é^–Awÿÿo]Šûî¾¶î»Û¨ã«ÒðÂlZI+öôµÛÿöÿý½´¶ëµ_¨ÝÒoKÈ-9 0AÓ†Å-úoK­¿ÿo÷ö7­´·ëuj©_KÓ a›i-é6C8ú_·ÿíÿ^í¥Ú[zö—é^¾@­°•>a…Â_·ÿíë¿» -´¶î¶ôôßKøm°ÂKj 2i‘i‚ì5×öÔj×a„°Ã wa-ƒš}} »ÐxXgÌ E€Ð Å!†Y2 ê äЅІ5ÈgуC!„8"` °`‘ú2vˆч!—£ô 0d è‡Ò‡„Ðbj¸b ïíÖôíì1 Ûb°ºt›¿Â`„D Xˆ¸`„!`„_ˆˆô"4"$ø"":áêzI ¢ã5¨fÒ JoB p¢¬h˜jFÂÿÿÿÿÿÿÿÿÿÿ Xr Ô5Ç!›3ï!@ð1d°‚Å<2 †¬6†ÌĨë ÑÈyÃdÔ¼Èk¹@‰jš oœ ºªªªiÿߺi(²|EÜF'd4Y KKoÿÝ!ÿÿM/_ü‚Ø,¿ÿÌm}-¦¼ÿ×ÿÄÿz¦××úÿõëÿÿÿ¦×ÿÿÿWÿÿÿô­"Ÿä3? Ñùáüáœrs Ð9Á–y ±È`r8ÿÿ»É̃TÈeS á<¹Ë€\…ìx.d~ \Á \È5PÎA¼ÀƒÁAHA3®D¡ y „‚g ÀÿJÅ=0A„4nh 2L†É"zY óMCdÓGd3ÍÈ10¨Ûh "ÍÝtïwÿÿpŒ #gÙÂ6 úz覚¦‚ ª #eÕ á|0@Á™ `Ú `¦¯ÿJè>º4AÒ½&´a² ,†ÌÒÈ(´a´aÈ(Äa´œ†ÌF  ƒDÚÓ¨8;Óôé?Iý>ÜB «¤&Á›ùÀP!÷Ð\B B ±6“lBÒx—uÈl·}{î´´¿ýnž¥Óþ—Oú]WOÝ:\'ÿúÖ›Výþ›o×K÷¯ôºiëW¦×Çkö÷µtºªK²0ƒúýtÿ·þÿ„¿÷«ÿ«õ´]i´µ½ÐiÿMþ¢–¿ÿú ÿ×ô¾í׺Å7I ¶Ði~"@ð0}ÿ†ÿýÿ÷þP_÷[¦µH%†Ñ¸KðFkÿÇÚ_ñÿ¿þÁÿ¥uîô¡‡„?Â<þ ëþm?ÿÿý‡û~­¯}7ªA¯Ð/ÿœ Kiíÿÿÿá¿ôžº½R½*éÿ°ÒÿÛÿÿëðoöûß¶é'ü_«¿Ø¯ý¿ÿ¿[òŸþ–•¤‹ïT¿ë×ûà ÿoÿúëðÿÿú[Òÿÿõêú.Ÿöÿý×ÿ aßÕºucVï¢ÿ×Ûm}öÿþëI¿þýb©&Ý$—ÿõÒïoKÿoÿÿ­~½Xý+/ÿí[I¶Â0°ÈGÓÿÛÿöÒ´› ëv‹­4êú_ÿØK¸M‘†Øa.FûÿÛJÐPÂ6½Ögl%¿TÛI/ÿ± f ƒ 0ÂLB™†q`‹  È`Œƒ0È!0Aˆ™†Á°Ò†b@!‚QQS01܃Ðÿý®_Å4¬+m;¾Ú»»NØ…Âô!;]W»_ÿ´4A„Â؈â!› bM»ÐŽ8ú؈ˆˆFqG¯ü$ÿÿ«þ¿ùµuÿ_ÿÿú^£ézMüœéº]÷_¤Ü,EÖ¼‚Ø5Ž¢=¤—Ú[ UñXbˆ 0†HjAP4°ÁRíb"#ÿÿÿÿÿÿÿÿÿÿÿÿ&MMë ¢ ª (ÀÀleptonica-1.70/prog/rank_reg.c0000644000175000017500000001333312270122643014412 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rank_reg.c * * Tests grayscale rank functions: * (1) pixRankFilterGray() * (2) pixScaleGrayMinMax() * (3) pixScaleGrayRankCascade() */ #include "allheaders.h" static const l_int32 SIZE = 20; int main(int argc, char **argv) { l_int32 i, j, w, h, same; l_float32 t, t1, t2; GPLOT *gplot; NUMA *nax, *nay1, *nay2; PIX *pixs, *pixd, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa; static char mainName[] = "rank_reg"; if (argc != 1) return ERROR_INT(" Syntax: rank_reg", mainName, 1); if ((pixs = pixRead("lucasta.150.jpg")) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixGetDimensions(pixs, &w, &h, NULL); startTimer(); pixd = pixRankFilterGray(pixs, 15, 15, 0.4); t = stopTimer(); fprintf(stderr, "Time = %7.3f sec\n", t); fprintf(stderr, "MPix/sec: %7.3f\n", 0.000001 * w * h / t); pixDisplay(pixs, 0, 200); pixDisplay(pixd, 600, 200); pixWrite("/tmp/filter.png", pixd, IFF_PNG); pixDestroy(&pixd); /* Get results for dilation */ startTimer(); pixt1 = pixDilateGray(pixs, 15, 15); t = stopTimer(); fprintf(stderr, "Dilation time = %7.3f sec\n", t); /* Get results for erosion */ pixt2 = pixErodeGray(pixs, 15, 15); /* Get results using the rank filter for rank = 0.0 and 1.0. * Don't use 0.0 or 1.0, because those are dispatched * automatically to erosion and dilation! */ pixt3 = pixRankFilterGray(pixs, 15, 15, 0.0001); pixt4 = pixRankFilterGray(pixs, 15, 15, 0.9999); /* Compare */ pixEqual(pixt1, pixt4, &same); if (same) fprintf(stderr, "Correct: dilation results same as rank 1.0\n"); else fprintf(stderr, "Error: dilation results differ from rank 1.0\n"); pixEqual(pixt2, pixt3, &same); if (same) fprintf(stderr, "Correct: erosion results same as rank 0.0\n"); else fprintf(stderr, "Error: erosion results differ from rank 0.0\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); fprintf(stderr, "\n----------------------------------------\n"); fprintf(stderr, "The next part takes about 30 seconds\n"); fprintf(stderr, "----------------------------------------\n\n"); nax = numaMakeSequence(1, 1, SIZE); nay1 = numaCreate(SIZE); nay2 = numaCreate(SIZE); gplot = gplotCreate("/tmp/rankroot", GPLOT_X11, "sec/MPix vs filter size", "size", "time"); for (i = 1; i <= SIZE; i++) { t1 = t2 = 0.0; for (j = 0; j < 5; j++) { startTimer(); pixt1 = pixRankFilterGray(pixs, i, SIZE + 1, 0.5); t1 += stopTimer(); pixDestroy(&pixt1); startTimer(); pixt1 = pixRankFilterGray(pixs, SIZE + 1, i, 0.5); t2 += stopTimer(); if (j == 0) pixDisplayWrite(pixt1, 1); pixDestroy(&pixt1); } numaAddNumber(nay1, 1000000. * t1 / (5. * w * h)); numaAddNumber(nay2, 1000000. * t2 / (5. * w * h)); } gplotAddPlot(gplot, nax, nay1, GPLOT_LINES, "vertical"); gplotAddPlot(gplot, nax, nay2, GPLOT_LINES, "horizontal"); gplotMakeOutput(gplot); gplotDestroy(&gplot); /* Display tiled */ pixa = pixaReadFiles("/tmp/display", "file"); pixd = pixaDisplayTiledAndScaled(pixa, 8, 250, 5, 0, 25, 2); pixWrite("/tmp/tiles.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); pixDisplayWrite(NULL, -1); /* clear out */ pixs = pixRead("test8.jpg"); for (i = 1; i <= 4; i++) { pixt1 = pixScaleGrayRank2(pixs, i); pixDisplay(pixt1, 300 * (i - 1), 100); pixDestroy(&pixt1); } pixDestroy(&pixs); pixs = pixRead("test24.jpg"); pixt1 = pixConvertRGBToLuminance(pixs); pixt2 = pixScale(pixt1, 1.5, 1.5); for (i = 1; i <= 4; i++) { for (j = 1; j <= 4; j++) { pixt3 = pixScaleGrayRankCascade(pixt2, i, j, 0, 0); pixDisplayWrite(pixt3, 1); pixDestroy(&pixt3); } } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixs); pixDisplayMultiple("/tmp/display/file*"); return 0; } leptonica-1.70/prog/blend-yellow.jpg0000444000175000017500000004277611653424354015600 0ustar dandanÿØÿàJFIFMMÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ{?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷Z(¢¾pØ(¢Š¯y$ÑYÎöà–6hÁRÙ`8àrjœŒ·0A±ˆÖK–n3/ʃý¢yÇ`=Á­=£Ò±ßörMe3Ére´®C qæHÝKÁ㎜:U« “]ê±Û\´ kus"(ynòÔçõ<”dûsOmVßc¿ï0—)jß'ñ¶Ð?™i—z8¸»{ˆoní$‘Drùq"Œã;”àüÇ•ÁéϘt8Mù¹77>Y•gkmÊciîîÈÚ8Î23ŒóNÑ ²=?Ä6Úˆ´d·º†ÅÝo$ÑmY~]Är< Ô—zíµœÓFÑNñÛãíSGRFFóסà“€sUtO6g¦-åìó½Œ*©81G&Í…”í x,âp«7z 7’Üfææ(.¸¹·—dÿ(_›*X| ”Ž¡¨\5±Z×Äïw34®Ä'\<*IÎ;@ú·¥>_XÀê K+±s¶0£åW(_’22;œRY”¹RÓbá%VÃFùBÀゎ°¦ÜøjÎ#Êy-L¬Æ‘¶c‰ºzŽyëG¹pÔµ.©j–6÷h^t¹Ûä$K¹¦ÈÈÚ>œú2p5›uâ2¯Á #ï1Ï ñèÞdKŒƒŽ’ƒœF9­K2ì ^X~ÎU –6ã  ƒNj‘ðÕ«8’Yî%›™$®W26c98\õH8K”ËWš¬vwÝmî.fÙæ´p b‰œnl‘ïÔààRéÚ½¶¨ó A#ÅCçmÂ6ôW\w?+©éÞ‹Í,]\ý¦+Ë›9¶ynöå~uÎpC)IÁŒžy¥Ót»]%&ŽÕYc‘Õ¶³gcHÀÁQzçœÑe`»(Eâ«iÙ+÷iƒ4B30C‡ÛÏn:ã=³R?‰,¼µš(î. òRæIa‹"(ØeYÁäs€ ÀéÍZ¶ÒmíÑ‘¤ÿEŽHÐ1‡*XŸûä~uLxfÞ;H­`¼½†l–²¤n¿¾hÝ•à㌦ÓϰÅ{¨Iâ{(‘˜¤Ç÷íoü£ÍuÉ;I`01÷‰¶sÅM&µšΩd¦sNÂ<Û×9SÎ:^{gŠdÞ´–ÝbW’&Žg%@„¡|äÊT®0Aìz€jÒip&úqy)ãw;wÙÏA× ¤ÜVÁ©PxŽˆ4¶·!#Dk§TmËÀ> ìA;w`N56«©É§Þi‘-±’;ˆ†I2¸ŒÝòrÃû¹ïÀnø;[ÎÒ¯Ú®c·¸U6èWeÆ!Ý•,2 ´ŒWo,!½–Õ¦„— :11ºÞ£/3Å6q –[{È`xd¸ŽW‡å’4]ÌÃ#Œ`ž”“ø‡ì×¶¢{Ia³{)îåžM§Ë²Í’0Ýê¸8É‹ÃÂáqªj öhÚ;uwB!cûœ1‚Ûç+†lVÚ;góe‰ ž»p™ÕÜá@åF6àx§î¥7[¶Õ&’ÃÅ4`9ŠB¥Šœà¬Gc‘Ôw5©XöšÙ¬/nZI ~ô¬JUU³µB \AÈÏ=xب•¯ Ð›G¥.T€˜žô`zRÑ@)09÷ëKE&´P`g=ýih¢˜ éF¥-€LJZ( Š( ªjaI¼œGä8cè»NM[¬ýsþEýKþ½eÿÐ 8î ùVþ+x/dŠÞUš%?+ŒÕCƒÕåM*9¤,}kØJÇ0ÙcX§ÓV<9ZÖ´µ[É’™bvãt§ O¦{U[‹vµ¹x_nõ889?!FHéFi§<ÓâÅûœÔG®Ó×±¥ ´æ’rŒŠèÙ#­+iaô¦”ŸãØš†I‡LUØ0 ³'»rNÖE´Qchd—y#aõ5E—Ëvi%Wf9Û-úÒÝN'9sŽ„žµM¤nŽßLÔÆ%¢gsŒ­GO;mäîOjH"k¹q“µy>õ£³Èb«ÐqøúU;- zìZ rÄ.ÍŽ§ØUÛwÔ¼E9Ó´ËmÈynœR¥3Þ¸ñó!fŠÞ?šYvçŠ=ÍzΙcc¡Ù k•F ûÌÍêMsTqLF†ü2¾‰Úæáfy  p«eOÚ "UNìG­ LL¯’Š8ô¬Ÿx€ivKml¹ºœ~î%?_ð®mfõÇøÎýdÕM´RH@Vpy-ÔþUÉ {évÄ>QÁjÝñ£!ÊhÃ’^I8?\WCià‹ÛHÖXqÜ—ýk~xÂ:n2…ôi®U¦’5…9|¶I>Ÿ­w·úÍž“6ÅÇîâO™›ð*†“á«k6inÚf鸃´}Ƶÿ³­e\IoßB‚¹\Û•Ç{„Þ4Y-`ò'mòm? ­­¾·nÓý‰b‡qŒä“ôâ´¿³4¸K0³·ºƒñZZuž!cEkj¿;Hçb~ü)¹_`C ±¶µ˜2,z/Z¶ñÅo¹¼u¶€´ýz§{¯Úiã˰Pò<ù$ÿº§úÖ,bîþsuq¾Fc‘“œT¶–VTUÝ‹ÝmÚLˆZ+Œq™ðþÊÅÖK˜Vä9Ë4œ±?Z¿$–Ú|}õÄp îÇÓÓôª¾1Ñ®Þ!3@‡i—f77¢úõæº#K©×ÒKÞ=¶Š(®# ¢Š(¬"òVÑæ¸¼™¥h'¹F“h¬s:ƒ€ÎÕkÔöðÛÄÑÂQä+’~fbÌyõbMRµ€Ä]{QÝíqu ’Ûˆî·1Ú …a· Ç#¡`9æ¤>!º®Ÿn.gHáv-š3!ÉÁ ÁÈ$ãVít6Êê;˜mŠË²ÄLŽDJzª)$(à|«À㊑´}=¬Å ¶Xà´È"% 9$–R¤9fäÔÕ>AjPMrêyŶž‡PVq4rO¶8öl$ï IϘ„azvàŠYµ«Ô2¤Xw¶„KqÜ…ÚHo‘0fž»G#ž¸´ÚšÖñEövAb’G+¤€·,K‚“Éç“ÉÍ2iW1¤rY‹“µô¯Ô5[Ù4ý>[¨íÌî…@@JŽXIªã€pëX²ø¸-Ã$6Mq+™à/',ŠøjãkI\çŠÝþÏ„Ø 7iŠ2þk+“œçrAÏ=jáý,˜¿Ñv¬J¨#GeB«Â†@v¶;n'w3ÇŠ7ê¿gŽÆW·[“mæªÈX°!K ·`cŒîÏã^o]¯öUû[¬]Ô’?˜²‡‘âX%nM¼gb°ÚIìq[GH±kßµ˜ ”¸í°¸à1Lí-ÀçãØTIáý-.㺟¼‰ÝãØ¢ ­µIÚ¹ sÎiÞg[ø±äšm2tbŠÑ†bê™U·:ô$pyâ®i×Ú„úíõ¥ô1ÃäÛ[ȉžbí0$6Õ?ÀqŽ*h´.(æì»ÒXü¦I]¤?¸¡‰Ú=—¥Mc¤YiÓM5¼OçLª²É$¯#¸RJ‚ÌI8ÜqéšMÆÌ53c×îd–ÆOìå7³ù0Íçãï̸èvñ‚O#5^ÛÅr½•­ÍÖ›ä}²Õ.-Q'͹£@Ó'r1œã¥k.¥­ê]­±¤†TclG ‚Ê™Ú ÉÉœœõ©?±´óo ¹µC6æÖ4l±¹_§È¿£š©ON¾Ô&×olïaŽ ´"E'˜‡sJ µ[ø Ž1I±w5»_&ž­aµÙ%óÆò˜áN8Á'‘‘Ö®Yi6Z|ÓMoù³Y$’W‘Ü)%Af$œn8ôÍèºtW†é-ñ&æp¾cVlî`™Ú ÜÙ däúÒæˆXËֵ˘t{É,"AršcÞÆï' ŽŸÂAÀÉô8ÇÍK­ê³i0Åtè\¤LðÆÃk”vÝÅs×§Ý÷«è:d×él|«ˆ¼™¤fÌx $ª8Q€3ÅY»Óío×mÌBA±“©+ 0ãÔQx†¥[ ùî.n-.íc‚â%IJÇ/˜¥pSœr‘ÐzšÍ»×5<=w©ÛY¤V­e,ö×xgBÈÌ…pãí‘[ëoÝItº,nüòªX¨ü ·çTO‡t£æƒjJJ®¦3#”Pà†Ú¹Â““’ M Å;Ø ë¯O×Ù®ìD2‡hnù$fPO0(r£#‘ɦK¯Ý¶«ýŸe§,ÒæošK-Êä¤óæŒ#Ðäj]i–w†S<;šUEbƒ„%—$F4–Ú]›FÐ@£WUbʼnC>I9$•““Eâf>â'¿Õ0FÒ$ö°ÝÆ„Ù)$ç¹åF;2Eihúœš¦ž·2B°I¸«Ä±Œÿu² :Ο‹§Ai°AŒ!V`T Âàç#‚G¸'9É©,ìmì#d·FPí½‹»;1À–$’è Å‚-ÑAíÍ ) œÒæ˜ ER¢Š(¢Š(¢Š(¬ýsþEýKþ½%ÿÐ hV~¹ÿ"þ¥ÿ^’ÿèª; gÈ£ úQš@x¤5ìœÂçךi9¤Ò´Ä!4€8M$àU”PƒÚ€+ÉN21Pº1Œävn~S§J¦òyc“ŒÓCEFÀ8ô«–çowÀÚ:Z¢Äî'±ïWìøÊã!©TÒ:ÒK›QHûQ 6pæ¡•6¯ËÃúÖ¬òýŠÏlX8ÆáÔV;e˜’y=éBïp”“øM}5Úîe²ÕkLÓ¦Ö5Dµ‡ŽrÌyÀ꽌O ¡ò~lzUí/Z_În|¢û@Áæ¢Mê‘™ëZm­ž§%­¸!‡ÄÞ§ñ©mýäá@ÆrOo©¯/Ÿâ-Ñ`¶vqÆ{I!ÞGáҨͮøƒZ"Î[Ù$Y„UUÎO°®gJoY Ç¢ëþ%·Óì^H§ŠGh‰[®~•Ëøj-OVñM¾­$eáGËHÃåÃÖµô/[ÁKªÊÒJܘ“ úž¿•uÐZ[[¢Ã iH0¨£Y¹(è„Hfg|“Ó8§ Yó„ÏÍEæ*§'Ÿº?Í碯«;cô¬/Ôd¥È`Ïòú}iZ+›Á˜H‡Þ‘þP?T¤¸Š¸<£œœ…þõ ÍãÜ`O)“oEä_÷GJ› ¹ ÃNV`âêppþYÿõëPÔçÔ%uiID8è(”4„ |€zU>Â)~wI$ÒƒsŸ*5§Þ¦F˜‹6 Ây9ÏÈ[¥nÜßÃb бPN:W5«^%ÍÀ¶ÒÀ;÷“ã!~žµçÚωo.¤)ö‰ (0yükªyò°’Qw‰Öx†hõÈ”; 11ew'uÓâ[)†¤Æ0͈âmß.1’Ÿ\ ûWm}Kn×#fLÉ’p½jVqZE¨©gŠ`];(è*æ¥[osèj(¢¸M‚Š( ±´9Ÿûf’W™¢¹ºEi±ÂO"¨'¯@ü+gñéPˆ#²"GÜNÐrI'ñÎj–Àrx†üøh^Nör}»Mšæ$´fW„¬[ù;¾až ¸$ù­+][S–xK E¶žöâÊ #va°Ë‡'8ÿ–xÛŽùÈΞ‰§X[4Ù[€ñ,R±‰wL cç |ÜzÕÑmÚ®Ò/È8sœ°÷;›'¾O­S”Ef`Xêwv~ ³¼¸’+›¦Ž!½²‹™(-Ë äœô¥UÔ/59ïàÒžîÙ%K¸L“@ŽŠêË# I•`cÏÞ9}q]@‚€ÛˆA·iŒ(Û·Ó©–úu¤Iµ¼1£oTŽ0¡[¦@éó$25»‡ƒQ´•¯eŽÞ"¾tPHªéº@ÊŸ¼‡OLž^ø–{m(]$P´¿h¼ˆ¡=˜ƒŒ÷òÓ=¾nÜWA5­ÄÐÍ5´2K ݼ`˜Ïª“Óð¨ŽcçÍqö+c<éåË/”»¤^2¬z‘ÓƒI8í`±&µ©ÙÈÖ·Idnd4n»–8üÆuÃäå¶íŒn$ .sL]sSû|ºc>Ÿö‘t¶ëp¼±˜Œ‡)»;»ÝÓœö­«ý6 ø$ŠL¡‘B™#ÚäArx9ž*­‡të; lÚîa•·H³D˜lȪÀžzç4š°÷ »K»Y“½RâÝþr gÛÄ$Ï ÞÜzägŒÖ–‘uw/ˆu;[»ˆ%kx-Çú>Bä™NvJœcŒž€÷­qch"X…¬"5ŒÄª#q•Ðàqì)-l,ìP¥¤ê@CAœtúŸÎ“’°XåïµFç·Z’ÜYCÅŒòAY¢a0³ó0#æ\.9äâ­Þ뺖›ö¸g‚ ®[´~H!WÎv@'æÛ³¯Ë» azÖ¸Òôÿ6yÅ… –áJM'’»¥SÙñV$´·˜H%‚7(G  î^~Sê9<{ŸZ\Ñ Àñ­Ÿ%íàŽH¼æ‘Þ27XaC§, <`Œæ­®¹}–v—Û›ËÔ‰ Ø+dæQÉçbàûçµkC§XÛB°ÁemK¸*Gª€ÝF¯Z>Å ^[ÝCAÅŒŠç_”nhæ`2õÛÛ» FÎâ)[G IJÀ±–iv¦plõ«]뺭—þϹšæ4–à‰™¢Œ†99ÍÈn3´ñ]1†6‘$hÔº}Ö#$} T‡KÓí–A¬BG8H•w2œ‚p9 óš•¶Œ”Õõh®&Íáµ½ŠÎRˆêÒù‚<2ä|ÕÈ;³ƒÈ¨íµíFáôi7X,:«8Ž-¬e‡;üß7ÌAP`ñî:3knÛ³G|‚VÊ\c }ÆÕÁëÀô¨SJÓ£»k´°µ[–;ŒË ‡'gv3Бøš9XæôWU“OµƒíV>t6)u4÷ÀH¬Ì0>o—~gä Ž(ÿ„¯PšFš <­´B ñȃsyˆå”)fÚrTôíÒM¥i×1Åö²¤'1,«Ïû Ž? tš}”×qÝKgn÷1q­—O¡ÆEñ 2ž—¨Ü\Ý_[݈’X$ùcE9–`„œÛ‚ç#ä`b±eñ6£‘¤RÊE¼¶’kxpxJÆ\9ù€ÆÖ .Þº˜--­L†ÞÞ(Œ®d“Ë@»ØõcŽ§Þ¢]/OI'‘,m–KŒùÌ"\Éž»Ž9üi)+…Šz•î¡jšlf¹º¸òI„‰Ü°PÙþ™öÏzÃÔ5íJ=æââ;`Œ—–à@]\I Éó†Ï¼¦ãªä|Æ»†7dgEfFÞ„Œ•8##Ðà‘ô$Toci$F'¶…£%Ûa@F[;Ž=NæÏ®O­5$‚Æï‰'²—Rˆ[Ç/ظ %É]ªm»†óÛ*‹‘øƒS­g‚îZX’9¥_-ýÿy³#q`8ê:?²Û€ÙâÀ,Àl[;Ôäç×&¡‹IÓ ´’Ö->Ö;i9xRßU¥Ñì2ô‹Û–“]7rGpö·!ÑóŽ ˆU$í<ôÉäš§{©ê =ßÚ4óö‹:àvWS•ÀÜr|ܶs]%­•­Œ~]¥´6ñç;b@ƒòAQǤ鰼ÏŸj1Ì¥aP\õçŽhæW Wºö©c#X´0OzÓ¤i,QЬŽù([$…q¸g ñPÉâ}Ql®§[kek[›‡È‘£á@ÚÇh'’HÚG½t÷6—i"\ZÃ2J‘dŒ0ltÈ=qH4û5‡É[H^Y‹`Œcaþc§µÑì2ÓW»MY4™–»Þ²3ª•_#fL˜'œÆ{©­Úª-#‹ÞüÆF‰bèª <{œóôf¥ê4-QREPYúïü‹Ú—ýzKÿ ЬýpgÃúÿ§YôU ÁŸ ÿ¤Ür)Øàf¯i£KóIÔÎÁÐB£šö[¶Ç0¶Ú=ÝÖ›=ôQ“8,qüfžµ¹ªëÍår=)ë/cEÃ…^}MRTüÁkKOP°œüû ÎÀ©­Ã)c¿ƒÆ(–Ãe¹J͸÷¨5¨‘ÐÔ™ÃTHÏ`y¨[‰q]"Có6z“Y÷Ó,íVÜuÇz$9³…qÉÍD©¹ò~ê ýhK¨Ð§ˆàw"»‡öM}©%Ô¤¶!Ž{â¹ i$W˜œvCÞ½cÂZdvz4s?ÊÒäöµa‰šQ°ÞÇO5ÈÜOÊO¢Ôm"Æ»¤~OEj g~íBç½FHÝÈù«ÎsìfNÒ98Œ^ýØþ5^YR0Ä(b)ï«s;Á¨ÒÒIzä2Äð1õì*,ØÈ¡/#–aÏ\ ±µ¹gXÜ1Œíp;O­fÞjÃçÃgþ‘rcä/¹5£Áy¥Ü5ÄŽ˜rÈyçÖœ)ÚíŽÇb誓´r[·©®s]ñ"²ý’Á‚®2î;ý*?jwwvë—ÚpOµrí ¨»™/©­â”v*2²5ô«Â·Q3 ÛXpk×­ôö½º{y 2Ã3!…†D£8ʵtz{„÷LFØ#2sÜŽ‚¸§giZC˱Éúõ­°±´œ€’Ö8¯oà·–_&'p›°¯d·²´]:+cµ²(½¾kË4:ßT{¸äù^÷+–ã=…u–×SxgO¶Žà½ÑpÃfîqŒôêkZÎîõϦ(¢Šó ‚Š( .U¤µ•W‰™˜Ü¼p@ Œýkе¾½²Ñ-b:”öóCa ZB`Fû[”è~\·?.Ô ã’yw˜ªö×P^@³ÚÏб8’' ¤‚AÁA«Œ¬„ÑÍùºÔ·A¿´¥…eÔÛÉX#+{ È%rXÁ'ûµö¥à þ­-Œ(fD¹XPµÃ¤Î[(Tª§ bǺñéÇÒ“#·óªæòŽÒëT1G«îêM"ݤSn»T³ï°(l¨%¶çÛÒ¦¸Ö5à¸]?R7¶ªð†¿•Q|Û÷Ëñó°íÞwt㯒X¢+æ:¦öÚ»ˆäõþŸ¥$3ÅqwH²C"†ŽDmÁ”ò#¨>Ôsu°XäàÖ504縿W…îÌCÈÃ=“& Ï€|¼‚vœëkÎo4%{9fº·Ù ]àbtçÇô­¯ÿU1Q5EP¨£€Oõ'%{Øv9«‹ÛûC5¬ú”ÑÛÇz"{ö‰7Ç„8Î`Ë»Šà:œÖu­æ£w© ˆn$¼{hîü‰C4jö¬,Ãr8ÀÉÁëúšcIºÆÎ»Üü ‘–Ç7¦â7»yù@#-ïžßtê¤[©™¢xmÓ?Ÿ(eåà!@ ww®½¦Ž'Š7uV‘ÊÆ3Í‚Øøý§Œn0;{{vªæòŽ;XÖo­ãÔj³ZÝB«ö[e´R']ŠKá”±ù‹ ·æ0[ÜÏ¥\]j“ìöÒL÷ ©Ñ¹ÁÆ}ã¨_z턱´¯u2 ”TãéÐÓg‚+˜ŒS&ôܬA<aødJ\ëkˆôïµÿgÀoˆûS.é+vaœgÚ­ÔRL&ùQrglœú>¦¤ÏÖ¢×(\QŠny¦K:@…æuE±sÀýHarZ*6r*½¶¡oz¥­na™W1°`2¡†p}OÐQXûE°Ë”TbLž*9nRdšY8£Rîìp¹=±G´ˆ(¨æ8Þ4–DF‘Š cŒ %côš×ÖÉh·os Û2†³€¤`äñŽGçZEó+¡h¨¦ž;x^ic‰fv8’/åOÉÉäqNÌQUÒî .¤¶I£i¢É¶YsÓ#·6p£•€¸´ÒpHôÿ9¦<éƯ"©•¶ Óü=i­Ä²Ü¹ïÐ¥q為ßj0ßë`ÛʲGaw©â¹úW±M{ºœÍêtþUr4½ºäÕxSqÍNçhëVs8Ýê¥È2ŽO+Îiò>[4‚¬Ž9úzS@SïŠÎNÏâ5#åHÊÓ­àIó#H#*zôöÔh©‚­–«¶NŒÅQóSN{{tÈg-ô¦;Å ƒßÊÐn>@wqœf’q¼ PË·ñ¨ žI.£Üx.i$aØc*r3ëþsùT?t-b„Ï‹¡óå®ßñýjH¿v»®G½5QTq’XçqïIpáŽIàz{è–2ÓÜ õ>ÕßXø¼A§Áo5± l>Ð~µÅYÄ#Œ/ñ¼}jèF# ~Zç­Èl讼ozC}šÖÞƒ‚T±Ÿãnêe³+m+ÊØ´x)ëÀâ¹Ûœ[Â7 þ``xÇù5¡à«V“[Y‚hÙ|p½gìà¢Ý„’=âI…£ì¼ÿxî{Öëö-‹m?¼ÏûÞµ¶©æL2ÜM1ÆÂ 9 u®}^¢Ó-„P[†=7TSλX&CÚ¥•@²€zÕC…|ô :Ò¸0 #7ÍÎy¦Ï(ŽÀw©ÙY†sOŽßÎÄ…QùŽ©·`)jš GOH£¸xܨb d1<ë\n¯§&—”gŽK²rÁ„z|סZKµ §O¹.Ñ~äK³€q€G¯oμëQ´š×P’+õ¨Ä1'©õ®œ;iò°.hÌðCoC<Ûßý®˜_ç]þ¥£Ç©jIÃmŠ4fëÎI_ð®#‘›YÇÆîçØgÚëLVøH0@A‘õ§ROšæWz@ÑEÀXQEVN“öúMÌr#$¦æíÔg’­<Œ§ñÆ´Ù¶Œ·rMEoqݬW0>è¦@ñ¾*FG^{Õ+Û@98ô+ôÓÂý£T2e†9½“&ìÞë’xû½8àQ%®¿&¿æ5ņž6M‘9bIëÕ;6r„òqž+¬{¨ã¹ŽÝŸȌʤu @<ô°©†sȪS{ØV8å´½mGN2ÛjMwé’êfœ›}›\ª[h®âï“NMf-6ÞÆâ+æ¹–[¼âÙTV9Y·q’’äîù5ÒÜêV–h7ìû4æ_”’©Ï<}Lš·ôçú~4ùŸaµ¦‹tóZ5ÅÆ¦D²\ o$nòc7ËŽ1·ïš´–·×o‡¢¸ké*›¶YJ¶ûÄrÁ¾k|ä°ýzPIÎzúzRæ}Fq¶–~!Ë3ÜÌ%óff-†‡vγlÇ+÷SpÇ8æ¥Ó-gþÚÓ%{MUZ¤rÞN]<ÂL±›”y®¯œð=;ûÓro XåïáÔP¹+¢nšdk9cœ‹tŒûË»o6wNxê1iÚ”6Âxd¿{™®/@÷BÄDÆ0«‚"~¦º¼òrzQß‘Ôú~4s098­õ!sèõ·}¦2&³ù© ®í¿p2AmÇ#Œ—O¶¼Òb²½¸}BRmækÁ$Ï.8@RHcg½tçïyÜÆ÷’Ú†ÌÑ¢ÈêáX°^}Ê7Ó®û­ØI¨Üh뉄QÞ&1HQ•|‰GÞRùŠŽzÈ[kô*š„Z´ö©æÇl-®\4›wê[1ùX$‘ÁÉÉ®´óéþ[íöâ+¹3 RDÁ™ €Ë¤túSMìG+ai®ZXÚÞ¬3I ˜’dægºÈ¬}A`ÙÿgÜÓu=;]Šé"Šúî@¶èH‰#“ Îæ8™Ø?8+ÐzŠíwn@Ý½ÇøÒç±¥>w}‚ǪZßË,É%¾¥=ã^DñIÄ[DŠ~îí£  ‚ÙÉ5«­G+ß[™a¾šÄFÀ¥ŒÌŒ$È ¶Ò q×=«lžG¯jN8íœtöüés>Àqvú^­6›s-Ãêiq˜>Φí3ï˜üÛN‡îúñÍMªÚÞÏ$é%¶¥-Ó]ÄÑkK‡ÁÿqxìÀõ­Þ¤ý2MC ‘<—4(É&Ù B¡›jœò>nž*Óml#žLã_–di ºÂÍ)[‡ ñ­ž@?wÌÇÈ Bk]gû:E·MMuAm8¼‘î ŽW18_+æÀ&B…v´ÛyìoëKÈã?ýz¥Ø,ŽV÷G¼‚MKì—“ˆl£–Óuä‡uÆdÝœ·<,_)ù}¹9Ò×,%»¿Ñ§…_}µÛ¾á#*®`”À‘»`üO©­Ï¸öª÷·°Ø[5ÅÁ`ŠTªXüÌ ’I p4îÂÇzº®…¨KÕ ž=*àÝËqpH2ˆò¥2ÄÝ’ € g¾ÜÒ!5Ba‡QŠÐ@Ve½œÈZPË·nY±€8àäc88ÜÚ’DC dqʲõÔSŽz÷6í°$>Š(¬†C[Çö¥žŸe—ÿ@5~³õßùµ?úô—ÿ@5QÝ>B$L<œbš™•Oî|þuì­ŽRdPˆ*)lóR?ʸÍTvçŠ`ˆò^P«Ï=h™º'eýiñ7Œ|ÄäZ§;cåÏ5H{±²0Ý÷†{ –±|Ì7Èz(éIù±×ŠRhÂò6L„dôÀéQ·zóíLq×j†:Æ2÷°öÁüÍZ¸º#­¿$“zŽÜ-¤¸=J”úŸÂ¨œ†äŠ—f ^7AúS"dœ3àíè©a é…½TÖ¬C`ZBþb¬’ NqéY^×$(A2üVKÜí5\Ì¿&Þ6ŒsKnn¢Œ &ï©êe-ucµÎ†ÃÃ\¶[™ Çc }ãžOÒ»+=6×J´[kdÂã-êÆ´­lŸìñÃlžM´Kµ g¤x-àPIÜçœ×¦Þƒ±–"p9ÉéM%#RÜÄc8àU‰æg$GAT$b¤žr%æ")2ËÉÜqU¥'‘íS¹h׌ ¼—12¨%€È½Kv•¤Æyg|nXP¹ry¬}BÚÿXbæ3ŽV܃õëø×Q£i³éâiå` £fÓÖŸ&›fï¸)Fê qŠiMk0|nÖ×ú”¨È̪ÅOb?Ȫþ4Ò̰ºhȆåw&}yõ®Õl?Ólo RÒ¨h®\`C­ck™ñÓŸíD·ÜJ2‰Ç¡¥k 6î÷0ü5jòëÖkȈÞl‡¸QÉþX«úÖ¬ 눟?1é]F‡¥AŸl‘©IæPÏ'}§Ÿóô®/]Ðnô{‚Ò¦øŽÉ»7øÒ-KshTågÕTQEp€QE ÄÜ[K ±¬‰"•dqßPz×ÿÅÌZ|VÇK´ž_°Ç 3 ö)aŠœeFã¿r|Äý®Õ™UK@''­f§ˆtW É«Y2¨Ë2N¤¹Îze€Ï½\[[ ”õ½2[»Ý6v°‡Q‚Ú9D±Jáw ‚Xðx8HhS¤6‚ëK¶¿ÁlÁ[rϔۼ`€¿/û#îñ]:…ͤ—v×\B€’Ñ0a3×תÖzî™yf×^Û,i’Pe_Ý?‹Ó¡ô¦› <úeôs[[Ow>‘öQ#á‹Kó`n ’Pn<ü¢§¹Ð%kÙ|½:ØÈfí¯òZÆ¡FÅÈÆÓ…_•·ã';Öú¥…Ú#Û^A*»ùJR@Ù|n+þö8ëŠrj6RÝ}•.á{ƒ¸ùAÆâ*xëÁqO™…‘ÏÁá+q<ÍalÌ÷÷s]P|èäyÿxdÆps‚ ö­m)ì¬ã°–‰ ¯žY°£è¡sõúÖ“Éo;¨iOV ù£6¹¤Á IµHÜ’¼À¯¯ª}Á¤ÛY#ÛÂVÂâÚIì-œµÍÔ—YùÈîÌøùÀ;H 1ÐUI|9tl|‹*ÛQ±-¼i@û+ ÂG•;—æã§¶æñ-œW7P*¼²ZÊb‘UÔù-'BA<)9çɧÕ,¬í¡žîæd˜žk…ÏÇ=xª»@`A¡ÍÊ"ÖòoÝy7O( lJ‚Fåä6u'œdÕ!á[á{s/ÎÒ¹šçtJ®j“åù‡ï(*ÍŽ À®™õÍ>=’5Õ¸´xŒ¢èÌž_ ®sÔõÆ;Qý¹bÍ%ÄO±É d!²{c?‡4®û Æ,úŒÂ‹£Ú_@¶qà náE´ƒvXdq»pË/Íò¼UaáKŸìéa‚+—Ólmä‘6nÄÌdBJ‘‚»A]ªà0èG¸¯?Z^юLJ.a²U6Fkat%}:w„,ˆ€vÇ mÌiÈ;È"­A¢Ý kÖ)i «Þ‰þÏo™E U\ôöè;qÍu8”m”{@±ÍYxpZ^[Þ­¬ wý¥s4Ó€7´.eÚ¹ë™>^™ëPëú÷Ó^°Ò­u´[yVÒK SlØaÜdAܼöÇ×WF¥Ï­ÂÇ5¯DiZgÛ!Iíá‘~Ño)ý܃ËaópWàüøœí¬­;IóàûPÑ­®4ö¸’İØº‡H}0ß)#î±FÐzŠ|úŽ5ü=säª\é–º‘6â’ñfÛœáXŒ…”oQ»äÔÍ_÷·6º„Mao¨Ý\À±Á,,DŽ™0fxmä šíJƒÔgëFíG´ š¶‘.£ª[ÜFV6ŠÊê(§#˜esÖãkV §…o!‚áb‰¡Ý£FòB©pDŠÌ¤Å’V]íÈÞ~^kºÀ¤Ú))Û@±ÎèZ[Ùj÷÷K¥Á§[OG,§æV”±!@UûëÓ9ǯKþGÍòüôû6ï±lÜqöîÆ?¿ÿ,óéÏ^k¯ÚaKŠ9ÂÇ$ÞW·²ÞYÁ2´sˆ<Ì6Öy 28#Ž{UKŸ êZŸÚfyd’A K„’mö¢« Ï8;ƒ0ÚpKk¸Å&ÑOÚ41õ½6êõá’ÊEŠFÞv'ÂøÞTÿyp?_ZÍŠËswcm6ž<ß.92ŒÅjƒåéÿ,¤—­uX”`zRS°Xà[š”âÙ®^i®¾ÉK2Ém™c Øw˜À¸d<“È¥í¼2êÂ×ìÜj_ÚÑMö³‘/”· øÆÝØTãû˜Îx®ÿŒJ~Ô,q'÷^}—üJ­¾Óo,q¨ù£|ùŽE xÉ$²’á{dk^]&𥖒--ÊÂÖå¢* |²+?÷××ñ­ü 0jNac•þÁŸûD0°·ôN5MÃx‡~|¬}ï¹û½¹Û·œö­oé£IðîbbHžhÒ@7…?žkSÒŒ îŠ(¨Uf6›CÔ#–{iUG©*E^ªZĉ*pÑÛÈÀû…&œwä)¡{wheR޼2°äSáBOz[›©¯nâvÝ,‡$ûÓ³¶:ö‘Êȹ&«òZœîYÄH»¸´môK—Rå”`n#ÿ¯Në¨ìd¸*ÛsÐäT7 æ1~÷qW®l扉8aê½*ÊHéÒšk  †U ±øÈ4ö_NGµA.åOCZqé2µ‚\\1¶¹ ãæoe^§ëCifœ“ÆIôÇ_ «£N1 šøù:!ûíøv«Iq²•³Œ#Ÿùk çéžgÎ7Èd‘ÝäîÌrjy›Æ\Íç8ÀÚŠ0«éT¥9©·‚Íè*d Æ?Ñ"XüI—ÿÎ3vQ§‘.–ñž¡ˆãßšàpzŠÁüM¡tÙ*)9žÐ×¥ø>Ò×MHîH¸šIxŠâxÀNùàžyæ†ñÅâ=®<+p…Ðô# ÷í^â¦Ä ZÝÈXòxäÖ5Ý•„U›Q’|dã#îŽ+2VåŽO'½$¬2}j»Ì§žIÏ?ã\D€l1*@Ý×4ý»Ôíè:â¨\ܬQIûÅó>ìkœ’O|zcŸÊ²ÖÜÝ΢iç“=~z5nîÜ €ç‘SéòG²ª°ó]Ëï·ëõ«ÚF•emm˜Þà°R³þqXqBöz¤ÐÈò܆ö§É³ØÒ¾m¹ÀúûUHÁnŸáïO¸½K†-mž¢€¤Ê7-ëZ¡¶Ÿ${ÙQQfÇ^;{šâ5BÏÄúX¼U ybÿ¾¡)œ*mP’ßYŽÙf#ÊHE= ê½sÞ$°k?²ëvoµ.¬ÉŽŽHüj#+ͧò)‘jÊ!Šhcg„ UÚ2Onhb¹ˆ¤¨¥ «r+Þ)°Ô,ÒÝŸì³Æ¸1·+õÏaõÍm]jÚ}š¡º»¶ŒÉ÷s ïßñüª“¶J=fŠ(®SP¢Š(¦£f5 6êÉœ¢ÏDYz®åÆkï@Ô5+Øno®,XFˆ›"· 0Å!ÎXðDDm힦ºzÍÓõ nôÉ.f…"’9f‘²æ98$ÎßJ´ÚZ±Ø2>¦ÛÇúd›×¹û¥N'ñ¬é¼:ímeÇÙ-£…Œ•/Æë•|¿»Æ;g­Icâ‹;9.æÛt¸;¡p[äÈËüÄ žG#3ÿoY˜ºÜ$¡Â v¼Ö,ЩŒB±ã€²FÓMs!hT}ú[Ÿí¸µ‚Ê’"¬gÊQÓiç$‘#sþïs%Ž‘w§›¤’îä…‚©B©æ4²I빓¸øüGc'˜.šd”Â`Î%Ü\ü¸èÔîéÈäfKf+&mJRa‚)fV,¬XÝ—• ß/Lg¼°jv£axך3Úy;í7—yP²}ÌsŽF}jQ®Â·ÿf’97HSÊE…̃*IÜ1Æ?Nô&»o&¥åÙj7"Îñ²«Ê¹$#nRsÎyôä\Û‹B˜ðÔ¯<3OqH&óå=ª[ÎI~QÏf>¼Óî|8×›_ …V[†¸ˆÎÖ1Ä£#£ ÆIú‚0@"ý–µi¨J"…f]éæGæÂщŒ•Èçï/§Qê)u-Dé÷º\^ܘ¨ûƒc65†hæw°ìß±|ÌÀܦ}©õÎYC¥-íÈ”ª[-ÄíoÈ‘»¹8ô9ç €sSÚøŠ ®å¶–9RE¹’ÙXDÛ ®H]Ý2TgôëÅO# º+#O×ëE‹R¸íÕäòʲýÜɰgÛ§=ºÓ¥×¬â}‹çLæFR‹³Æò0:.@'¦xë€W+¸hjÑ\óø¢!©Ç l6Œ‘ÈÓ¹+°2ÜÈ #œúžZÄ6NÊŒ.ag)°Mnñï ÁA‡#s(=Æá2)¸05è¬è5«™–('9šH6¨û¬™ÝŸ@8ç§+ê).5«k{—€¥Ä¦Þ‚²%I ‚¹ `Ö¶äë—O1nÛp;S†®Áw¨Ãu,Ó´ò¹i·3¤×]gluïj6a±$j'ˆú2ŒþuÄ£† ö®÷À²­½Ž§3ä…´€9ɨ¬¬Ô¼ÊêZð÷„l4Í: —+qvê$20ãžp=«NûOÓïÑ#¼´†B£•éô5Éx3ÅÖñiRØê÷qÄо .Hm¾™ú×B×I*)ŽUenU³E:ŠJw{ˆ÷z(¢¹‚Š( ©ÚXGkg-²3yfž2 ŽÎ"Ä~lž &HÛ5KD5džìï- µ™¤t‚×ìªÓÝ6Á ƽxõ¿…mmb>DÍÇš²¤ðà e †QòªFÁÜ ùŽ1Æ7û‘ïåN?xSæb±…‡2ItšßÛ¤¥7DGŸ™ mÛ·n#CŒg޵b´itÙn'™ey$iœ¨“s9rÙ†9bµqKŽžÔ¹ØXÆw2Ýß\\Ͼ&8E*#pá@P';Ž2sì*mKF‡S $‘7ÚOhvc…—fOÔlúÖž)0=(çacPðüW×M;\Íù#vUTä§ÝÁ •>àƒU­ü!¦ÁzÓ„VŒ´Œ"0D1¿;†ð»ñósõ®‹`QíXçtÿ Á¥{ÂM嘣ÛB¥‘ÏÊ€±Àêr8u­{›4º¸²™™•­f3.ÞŒ|·Ll9?•[À¤À4sŽÇ{á@XÜizuÇ—eul°Hþr‚qˆ³/–NvªýÖÆ>_½]Ò!P I&VìÝgŒä’vý2kGŒéMÍŠÆc驃>ŸùêÑHв67nÝÁ#§\U)¼'kqacò—žÑ<÷Š9 —!¤%dVf²k¡£¹Øìsç– å«—0¬) Fª°U™NBŒ‰Üœc ©O‡ÒQ/Û/®îÙíÞÙ]€¢±ˆØ£-•S“ýÑŽ§;X¥ÅÑ…Œ› ËL½ûM¸}ÿgKu Ù/ÿ¼À&ãßbÑ6Æö{‹{û«QpÊÓ$A0ì\å”Jª©Á=y­\ \ 9ÂÆ^°‡Wûrÿ^× ‰b|Í»ñ¸“÷ºûqO Û6›obf”G›&šŒ”p€±ã¯îÇ·&·1I€höŒ,`\øNÂëU{÷2H²H¦_yPÞe,8Qœ§SZ ¥[ÿdK¦¹y •]_'‡$žGûÕ¡ŠL 9ØXÅ:–KËë«©Q¢òÚQØ©"È@ rȹúqN»Ðàž[«ƒºg”»Y‚«–‰c+ž¸!ZÙÅ£…Œ­/M›N±±µûQa “påAiÜä³Û,YŽ;ãÞ›¨x~ÓQ¹šæF•%–ØÛ’¼ä8ßSÐÖ¾(Åàc¾„¨Èl¯n¬‚À–ì!Øw"goÞdò=yÎ* Û†3wpË šÙ Û;oV “÷:G'Úº,ÒŠ9ØXÄÔü7gªÊòÎÙrÈÊZ4)PË÷YH9 s‘ééI‡b´ŠÝlîæ¶š àM q‚ÁÈ, ìÙŒªô£ÔçoŒ bŽv2bÐá‹D:c\Nêdi¼ö+æ2™Cä d1ÏNÕ^Û~×·:…ÕÌäÃË„QˆÌ„GÈÙÏXó’gHf·ð„€íòf¹P žxäOzÊÓížâs¸Œ[×5£­H÷;LÅÊɵrzJÞÓía1Zf1ÉP}ø¬=¥¡q•krÚ ;ÈÉ\Ö,ºŠÇtV"~çAõ­Ÿ¢Çe 1Î;×&à)Ñ…ÕÛ,ώ̤¨=ºÕ½#S—N»6#s†ÁÇãYó¢ F?wž WŒŸ99þ*ß‘J6;û˜mõ`¦CÒp9ü}£g¦¿Û¶º§æü*Å—ú­½‡AZô‡=ÀZò*ÎPºG¥ƒ¼§flBVöô>µƒ¯]Ž#ŽjüÒ6ž‹‘\V«4+å‰ùñ\¸JóælôêÍB7+]±y6‚ -ÍGu‘a’=*4ƒÜõ¥n$t+ÞŒR‰óõj9Êìï4ßé…ªÝ*Ë*7÷Ÿʬ·„Ž“:ÞéeþNZ9 =½køg„*8P€Û5Ñ”PîáFGµq·+ٳȥ§¹´Yáè‡ÐÕ­y Æ$l£%ƒî¿ýjn‚Š—×ñ(Ây¿wê¹5ƒ­jWƒÅÚm¨›÷ ŒY6Œ¶==)B.ö)ngÛL£—©ê­I®hÖÚôK-¹]*€­ü.cT•y”p¡›éZ–,C[óÔóPŸ+Ç 6Ÿu§Ü [˜ŠIÆzZïü(©m§N\„I-ÕˆÈ,rHý+œñÝã-C<í…ÏaŽÕ§¯Jö‘h0@Æ8ˆŽB«ÝSõ©¨ÜÚE®ç'ã ´ÿα¨X%Ĉ>½Gæ C¥jSXÇöy 1»ŽÕÚøà -ìäp äØçÍq £=tF~Ò 1=ÿÙleptonica-1.70/prog/xformbox_reg.c0000644000175000017500000002732712267401154015336 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * xformbox_reg.c * * Tests ordered box transforms (rotation, scaling, translation). * Also tests the various box hashing graphics operations. */ #include "allheaders.h" /* Consts for second set */ static const l_int32 SHIFTX_2 = 50; static const l_int32 SHIFTY_2 = 70; static const l_float32 SCALEX_2 = 1.17; static const l_float32 SCALEY_2 = 1.13; static const l_float32 ROTATION_2 = 0.10; /* radian */ /* Consts for third set */ static const l_int32 SHIFTX_3 = 44; static const l_int32 SHIFTY_3 = 39; static const l_float32 SCALEX_3 = 0.83; static const l_float32 SCALEY_3 = 0.78; static const l_float32 ROTATION_3 = 0.11; /* radian */ l_int32 RenderTransformedBoxa(PIX *pixt, BOXA *boxa, l_int32 i); int main(int argc, char **argv) { l_int32 i, n, ws, hs, w, h, rval, gval, bval, order; l_float32 *mat1, *mat2, *mat3; l_float32 matd[9]; BOX *box, *boxt; BOXA *boxa, *boxat, *boxa1, *boxa2, *boxa3, *boxa4, *boxa5; PIX *pix, *pixs, *pixc, *pixt, *pix1, *pix2, *pix3; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ----------------------------------------------------------- * * Test hash rendering in 3 modes * * ----------------------------------------------------------- */ pixs = pixRead("feyn.tif"); box = boxCreate(461, 429, 1393, 342); pix1 = pixClipRectangle(pixs, box, NULL); boxa = pixConnComp(pix1, NULL, 8); n = boxaGetCount(boxa); pix2 = pixConvertTo8(pix1, 1); pix3 = pixConvertTo32(pix1); for (i = 0; i < n; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); rval = (1413 * (i + 1)) % 256; gval = (4917 * (i + 1)) % 256; bval = (7341 * (i + 1)) % 256; pixRenderHashBox(pix1, boxt, 8, 2, i % 4, 1, L_SET_PIXELS); pixRenderHashBoxArb(pix2, boxt, 7, 2, i % 4, 1, rval, gval, bval); pixRenderHashBoxBlend(pix3, boxt, 7, 2, i % 4, 1, rval, gval, bval, 0.5); boxDestroy(&boxt); } regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ regTestWritePixAndCheck(rp, pix2, IFF_PNG); /* 1 */ regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDisplayWithTitle(pix2, 0, 300, NULL, rp->display); pixDisplayWithTitle(pix3, 0, 570, NULL, rp->display); boxaDestroy(&boxa); boxDestroy(&box); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* ----------------------------------------------------------- * * Test orthogonal box rotation and hash rendering * * ----------------------------------------------------------- */ pixs = pixRead("feyn.tif"); box = boxCreate(461, 429, 1393, 342); pix1 = pixClipRectangle(pixs, box, NULL); pixc = pixConvertTo32(pix1); pixGetDimensions(pix1, &w, &h, NULL); boxa1 = pixConnComp(pix1, NULL, 8); pixa = pixaCreate(4); for (i = 0; i < 4; i++) { pix2 = pixRotateOrth(pixc, i); boxa2 = boxaRotateOrth(boxa1, w, h, i); rval = (1413 * (i + 4)) % 256; gval = (4917 * (i + 4)) % 256; bval = (7341 * (i + 4)) % 256; pixRenderHashBoxaArb(pix2, boxa2, 10, 3, i, 1, rval, gval, bval); pixaAddPix(pixa, pix2, L_INSERT); boxaDestroy(&boxa2); } pix3 = pixaDisplayTiledInRows(pixa, 32, 1200, 0.7, 0, 30, 3); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix3, 0, 800, NULL, rp->display); boxDestroy(&box); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix3); pixDestroy(&pixc); boxaDestroy(&boxa1); pixaDestroy(&pixa); /* ----------------------------------------------------------- * * Test box transforms with either translation or scaling * * combined with rotation, using the simple 'ordered' * * function. Show that the order of the operations does * * not matter; different hashing schemes end up in the * * identical boxes. * * ----------------------------------------------------------- */ pix = pixRead("feyn.tif"); box = boxCreate(420, 360, 1500, 465); pixt = pixClipRectangle(pix, box, NULL); pixs = pixAddBorderGeneral(pixt, 0, 200, 0, 0, 0); boxDestroy(&box); pixDestroy(&pix); pixDestroy(&pixt); boxa = pixConnComp(pixs, NULL, 8); n = boxaGetCount(boxa); pixa = pixaCreate(0); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_TR_SC_RO; else if (i == 1) order = L_TR_RO_SC; else order = L_SC_TR_RO; boxat = boxaTransformOrdered(boxa, SHIFTX_2, SHIFTY_2, 1.0, 1.0, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i); boxaDestroy(&boxat); } pixSaveTiled(pixt, pixa, 1.0, 1, 30, 32); pixDestroy(&pixt); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_RO_TR_SC; else if (i == 1) order = L_RO_SC_TR; else order = L_SC_RO_TR; boxat = boxaTransformOrdered(boxa, SHIFTX_2, SHIFTY_2, 1.0, 1.0, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i + 4); boxaDestroy(&boxat); } pixSaveTiled(pixt, pixa, 1.0, 1, 30, 0); pixDestroy(&pixt); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_TR_SC_RO; else if (i == 1) order = L_SC_RO_TR; else order = L_SC_TR_RO; boxat = boxaTransformOrdered(boxa, 0, 0, SCALEX_2, SCALEY_2, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i + 8); boxaDestroy(&boxat); } pixSaveTiled(pixt, pixa, 1.0, 1, 30, 0); pixDestroy(&pixt); pixt = pixConvertTo32(pixs); for (i = 0; i < 3; i++) { if (i == 0) order = L_RO_TR_SC; else if (i == 1) order = L_RO_SC_TR; else order = L_TR_RO_SC; boxat = boxaTransformOrdered(boxa, 0, 0, SCALEX_2, SCALEY_2, 450, 250, ROTATION_2, order); RenderTransformedBoxa(pixt, boxat, i + 12); boxaDestroy(&boxat); } pixSaveTiled(pixt, pixa, 1.0, 1, 30, 0); pixDestroy(&pixt); pixt = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixt, 1000, 0, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixs); boxaDestroy(&boxa); pixaDestroy(&pixa); /* ----------------------------------------------------------- * * Do more testing of box and pta transforms. Show that * * resulting boxes are identical by three methods. * * ----------------------------------------------------------- */ /* Set up pix and boxa */ pixa = pixaCreate(0); pix = pixRead("lucasta.1.300.tif"); pixTranslate(pix, pix, 70, 0, L_BRING_IN_WHITE); pixt = pixCloseBrick(NULL, pix, 14, 5); pixOpenBrick(pixt, pixt, 1, 2); boxa = pixConnComp(pixt, NULL, 8); pixs = pixConvertTo32(pix); pixc = pixCopy(NULL, pixs); RenderTransformedBoxa(pixc, boxa, 113); pixSaveTiled(pixc, pixa, 0.5, 1, 30, 32); pixDestroy(&pix); pixDestroy(&pixc); pixDestroy(&pixt); /* (a) Do successive discrete operations: shift, scale, rotate */ pix1 = pixTranslate(NULL, pixs, SHIFTX_3, SHIFTY_3, L_BRING_IN_WHITE); boxa1 = boxaTranslate(boxa, SHIFTX_3, SHIFTY_3); pixc = pixCopy(NULL, pix1); RenderTransformedBoxa(pixc, boxa1, 213); pixSaveTiled(pixc, pixa, 0.5, 0, 30, 32); pixDestroy(&pixc); pix2 = pixScale(pix1, SCALEX_3, SCALEY_3); boxa2 = boxaScale(boxa1, SCALEX_3, SCALEY_3); pixc = pixCopy(NULL, pix2); RenderTransformedBoxa(pixc, boxa2, 313); pixSaveTiled(pixc, pixa, 0.5, 1, 30, 32); pixDestroy(&pixc); pixGetDimensions(pix2, &w, &h, NULL); pix3 = pixRotateAM(pix2, ROTATION_3, L_BRING_IN_WHITE); boxa3 = boxaRotate(boxa2, w / 2, h / 2, ROTATION_3); pixc = pixCopy(NULL, pix3); RenderTransformedBoxa(pixc, boxa3, 413); pixSaveTiled(pixc, pixa, 0.5, 0, 30, 32); pixDestroy(&pixc); /* (b) Set up and use the composite transform */ mat1 = createMatrix2dTranslate(SHIFTX_3, SHIFTY_3); mat2 = createMatrix2dScale(SCALEX_3, SCALEY_3); mat3 = createMatrix2dRotate(w / 2, h / 2, ROTATION_3); l_productMat3(mat3, mat2, mat1, matd, 3); boxa4 = boxaAffineTransform(boxa, matd); pixc = pixCopy(NULL, pix3); RenderTransformedBoxa(pixc, boxa4, 513); pixSaveTiled(pixc, pixa, 0.5, 1, 30, 32); pixDestroy(&pixc); /* (c) Use the special 'ordered' function */ pixGetDimensions(pixs, &ws, &hs, NULL); boxa5 = boxaTransformOrdered(boxa, SHIFTX_3, SHIFTY_3, SCALEX_3, SCALEY_3, ws / 2, hs / 2, ROTATION_3, L_TR_SC_RO); pixc = pixCopy(NULL, pix3); RenderTransformedBoxa(pixc, boxa5, 613); pixSaveTiled(pixc, pixa, 0.5, 0, 30, 32); pixDestroy(&pixc); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); boxaDestroy(&boxa4); boxaDestroy(&boxa5); lept_free(mat1); lept_free(mat2); lept_free(mat3); pixt = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixt, IFF_PNG); /* 5 */ pixDisplayWithTitle(pixt, 1000, 300, NULL, rp->display); pixDestroy(&pixt); pixDestroy(&pixs); boxaDestroy(&boxa); pixaDestroy(&pixa); return regTestCleanup(rp); } l_int32 RenderTransformedBoxa(PIX *pixt, BOXA *boxa, l_int32 i) { l_int32 j, n, rval, gval, bval; BOX *box; n = boxaGetCount(boxa); rval = (1413 * i) % 256; gval = (4917 * i) % 256; bval = (7341 * i) % 256; for (j = 0; j < n; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixRenderHashBoxArb(pixt, box, 10, 3, i % 4, 1, rval, gval, bval); boxDestroy(&box); } return 0; } leptonica-1.70/prog/hmttemplate1.txt0000640000175000017500000001315611707074233015630 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast hit-miss transform with auto-generated sels * --- * PIX *pixHMTDwa_*() --- * PIX *pixFHMTGen_*() */ #include #include "allheaders.h" --- This file is: hmttemplate1.txt --- --- We need to include these prototypes: --- PIX *pixHMTDwa_*(PIX *pixd, PIX *pixs, l_int32 operation); --- PIX *pixFHMTGen_*(PIX *pixd, PIX *pixs, l_int32 operation); --- l_int32 fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * pixHMTDwa_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * sel name * Return: pixd * * Notes: * (1) This simply adds a 32 pixel border, calls the appropriate * pixFHMTGen_*(), and removes the border. * See notes below for that function. */ PIX * --- pixHMTDwa_*(PIX *pixd, PIX *pixs, char *selname) { PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixHMTDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); pixt1 = pixAddBorder(pixs, 32, 0); --- pixt2 = pixFHMTGen_*(NULL, pixt1, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * pixFHMTGen_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * sel name * Return: pixd * * Notes: * (1) This is a dwa implementation of the hit-miss transform * on pixs by the sel. * (2) The sel must be limited in size to not more than 31 pixels * about the origin. It must have at least one hit, and it * can have any number of misses. * (3) This handles all required setting of the border pixels * before erosion and dilation. */ PIX * --- pixFHMTGen_*(PIX *pixd, PIX *pixs, char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFHMTGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with 32 additional border * pixels, that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; --- fhmtgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ --- fhmtgen_low_*(datad, w, h, wpld, datas, wpls, index); } return pixd; } leptonica-1.70/prog/barcode-digits.png0000444000175000017500000000115311025613424016036 0ustar dandan‰PNG  IHDRÜ)v~z†gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IžIDAT8ÝÓ=ŽÔ0pgƒH‡[Šï áåÔ+.Ýh^VS¸1G"KŠ”{[¹€#š‡düøgf2 Q"$"%Jò“÷£>’ù÷øg`!=\0ó|ѶÎM2¶u¡)Õ¿k°R«p[§hlWgsÆI»&U'¬’¡ç¶Ã'ŒØ/Üjbÿ>&ÕWäý$Ù-hû1IGÑòÖ VÒ‚•Ú8‚$íœÊ s¥4 Âpø©yëÒË÷3ªJYcy§¨{~ÉG¤ƒ•;¥% d#ºac¿4¸5ö œfØì+”¤%Ÿâje¯Uy³5uktÔÖî¸B¯Uþ¼¥ÝCÞ4Ya±ÚIfw¢C!žÝ]¿‰É=ZƒZð€TÒæÓuepš?Šf>d7j^òvèækƒ4ŽÈ£^Š€m{}ú Ý‚^à 7oKÅOéÇ-Qñ8 z/ýœÙ©¢T¬ÿö˜ïyÁÍCLœù¦N·Äذš¡bª€Öq‹Q¶´š¾1`™;Â:íŠâWˆ·xpí¯ü+ÿ-þcv«´fg”tIMEجÁ"!tEXtSoftwareESP Ghostscript 815.02 ÉÅÞ3IEND®B`‚leptonica-1.70/prog/colorspace_reg.c0000640000175000017500000002045312240303306015600 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorspace_reg.c * * Tests: * - conversions between HSV and both RGB and colormapped images. * - global linear color mapping and extraction of color magnitude */ #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" int main(int argc, char **argv) { char label[512]; l_int32 rval, gval, bval, w, h, i, j, rwhite, gwhite, bwhite, count; l_uint32 pixel; GPLOT *gplot1, *gplot2; NUMA *naseq, *na; NUMAA *naa1, *naa2; PIX *pixs, *pixt, *pixt0, *pixt1, *pixt2; PIX *pixr, *pixg, *pixb; /* for color content extraction */ PIXA *pixa, *pixat; PIXCMAP *cmap; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Generate a pdf of results when called with display */ pixa = pixaCreate(0); /* Generate colors by sampling hue with max sat and value. * This image has been saved as 19-colors.png. */ pixat = pixaCreate(19); for (i = 0; i < 19; i++) { convertHSVToRGB((240 * i / 18), 255, 255, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &pixel); pixt1 = pixCreate(50, 100, 32); pixSetAllArbitrary(pixt1, pixel); pixaAddPix(pixat, pixt1, L_INSERT); } pixt2 = pixaDisplayTiledInRows(pixat, 32, 1100, 1.0, 0, 0, 0); regTestWritePixAndCheck(rp, pixt2, IFF_PNG); /* 0 */ pixaAddPix(pixa, pixt2, L_INSERT); pixaDestroy(&pixat); /* Colorspace conversion in rgb */ pixs = pixRead("wyom.jpg"); pixaAddPix(pixa, pixs, L_INSERT); pixt = pixConvertRGBToHSV(NULL, pixs); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 1 */ pixaAddPix(pixa, pixt, L_COPY); pixConvertHSVToRGB(pixt, pixt); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 2 */ pixaAddPix(pixa, pixt, L_INSERT); /* Colorspace conversion on a colormap */ pixt = pixOctreeQuantNumColors(pixs, 25, 0); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 3 */ pixaAddPix(pixa, pixt, L_COPY); cmap = pixGetColormap(pixt); if (rp->display) pixcmapWriteStream(stderr, cmap); pixcmapConvertRGBToHSV(cmap); if (rp->display) pixcmapWriteStream(stderr, cmap); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 4 */ pixaAddPix(pixa, pixt, L_COPY); pixcmapConvertHSVToRGB(cmap); if (rp->display) pixcmapWriteStream(stderr, cmap); regTestWritePixAndCheck(rp, pixt, IFF_JFIF_JPEG); /* 5 */ pixaAddPix(pixa, pixt, L_INSERT); /* Color content extraction */ pixColorContent(pixs, 0, 0, 0, 0, &pixr, &pixg, &pixb); regTestWritePixAndCheck(rp, pixr, IFF_JFIF_JPEG); /* 6 */ pixaAddPix(pixa, pixr, L_INSERT); regTestWritePixAndCheck(rp, pixg, IFF_JFIF_JPEG); /* 7 */ pixaAddPix(pixa, pixg, L_INSERT); regTestWritePixAndCheck(rp, pixb, IFF_JFIF_JPEG); /* 8 */ pixaAddPix(pixa, pixb, L_INSERT); /* Color content measurement. This tests the global * mapping of (r,g,b) --> (white), for 20 different * values of (r,g,b). For each mappings, we compute * the color magnitude and threshold it at six values. * For each of those six thresholds, we plot the * fraction of pixels that exceeds the threshold * color magnitude, where the red value (mapped to * white) goes between 100 and 195. */ pixat = pixaCreate(20); naseq = numaMakeSequence(100, 5, 20); naa1 = numaaCreate(6); naa2 = numaaCreate(6); for (i = 0; i < 6; i++) { na = numaCreate(20); numaaAddNuma(naa1, na, L_COPY); numaaAddNuma(naa2, na, L_INSERT); } pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < 20; i++) { rwhite = 100 + 5 * i; gwhite = 200 - 5 * i; bwhite = 150; pixt0 = pixGlobalNormRGB(NULL, pixs, rwhite, gwhite, bwhite, 255); pixaAddPix(pixat, pixt0, L_INSERT); pixt1 = pixColorMagnitude(pixs, rwhite, gwhite, bwhite, L_MAX_DIFF_FROM_AVERAGE_2); for (j = 0; j < 6; j++) { pixt2 = pixThresholdToBinary(pixt1, 30 + 10 * j); pixInvert(pixt2, pixt2); pixCountPixels(pixt2, &count, NULL); na = numaaGetNuma(naa1, j, L_CLONE); numaAddNumber(na, (l_float32)count / (l_float32)(w * h)); numaDestroy(&na); pixDestroy(&pixt2); } pixDestroy(&pixt1); pixt1 = pixColorMagnitude(pixs, rwhite, gwhite, bwhite, L_MAX_MIN_DIFF_FROM_2); for (j = 0; j < 6; j++) { pixt2 = pixThresholdToBinary(pixt1, 30 + 10 * j); pixInvert(pixt2, pixt2); pixCountPixels(pixt2, &count, NULL); na = numaaGetNuma(naa2, j, L_CLONE); numaAddNumber(na, (l_float32)count / (l_float32)(w * h)); numaDestroy(&na); pixDestroy(&pixt2); } pixDestroy(&pixt1); } gplot1 = gplotCreate("/tmp/colorspace.10", GPLOT_PNG, "Fraction with given color (diff from average)", "white point space for red", "amount of color"); gplot2 = gplotCreate("/tmp/colorspace.11", GPLOT_PNG, "Fraction with given color (min diff)", "white point space for red", "amount of color"); for (j = 0; j < 6; j++) { na = numaaGetNuma(naa1, j, L_CLONE); sprintf(label, "thresh %d", 30 + 10 * j); gplotAddPlot(gplot1, naseq, na, GPLOT_LINES, label); numaDestroy(&na); na = numaaGetNuma(naa2, j, L_CLONE); gplotAddPlot(gplot2, naseq, na, GPLOT_LINES, label); numaDestroy(&na); } gplotMakeOutput(gplot1); gplotMakeOutput(gplot2); gplotDestroy(&gplot1); gplotDestroy(&gplot2); pixt1 = pixaDisplayTiledAndScaled(pixat, 32, 250, 4, 0, 10, 2); regTestWritePixAndCheck(rp, pixt1, IFF_JFIF_JPEG); /* 9 */ pixaAddPix(pixa, pixt1, L_INSERT); pixDisplayWithTitle(pixt1, 0, 100, "Color magnitude", rp->display); pixaDestroy(&pixat); numaDestroy(&naseq); numaaDestroy(&naa1); numaaDestroy(&naa2); /* Give gnuplot time to write out the files */ #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ /* Save as golden files, or check against them */ regTestCheckFile(rp, "/tmp/colorspace.10.png"); /* 10 */ regTestCheckFile(rp, "/tmp/colorspace.11.png"); /* 11 */ if (rp->display) { pixt = pixRead("/tmp/colorspace.10.png"); pixaAddPix(pixa, pixt, L_INSERT); pixt = pixRead("/tmp/colorspace.11.png"); pixaAddPix(pixa, pixt, L_INSERT); pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "colorspace tests", "/tmp/colorspace.pdf"); } pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.70/prog/binmorph1_reg.c0000644000175000017500000005060412240303466015361 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binmorph1_reg.c * * This is a thorough regression test of different methods for * doing binary morphology. It should always be run if changes * are made to the low-level morphology code. * * Some things to note: * * (1) We add a white border to guarantee safe closing; i.e., that * closing is extensive for ASYMMETRIC_MORPH_BC. The separable * sequence for closing is not safe, so if we didn't add the border * ab initio, we would get different results for the atomic sequence * closing (which is safe) and the separable one. * * (2) There are no differences in any of the operations: * rasterop general * rasterop brick * morph sequence rasterop brick * dwa brick * morph sequence dwa brick * morph sequence dwa composite brick * when using ASYMMETRIC_MORPH_BC. * However, when using SYMMETRIC_MORPH_BC, there are differences * in two of the safe closing operations. These differences * are in pix numbers 4 and 5. These differences are * all due to the fact that for SYMMETRIC_MORPH_BC, we don't need * to add any borders to get the correct answer. When we do * add a border of 0 pixels, we naturally get a different result. * * (3) The 2-way Sel decomposition functions, implemented with the * separable brick interface, are tested separately against * the rasterop brick. See binmorph2_reg.c. */ #include "allheaders.h" /* set these ad lib. */ #define WIDTH 21 /* brick sel width */ #define HEIGHT 15 /* brick sel height */ #define TEST_SYMMETRIC 0 /* set to 1 to set symmetric b.c.; otherwise, it tests asymmetric b.c. */ int main(int argc, char **argv) { l_int32 ok, same; char sequence[512]; PIX *pixs, *pixref; PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; PIX *pixt7, *pixt8, *pixt9, *pixt10, *pixt11; PIX *pixt12, *pixt13, *pixt14; SEL *sel; static char mainName[] = "binmorph1_reg"; if (argc != 1) return ERROR_INT(" Syntax: binmorph1_reg", mainName, 1); if ((pixs = pixRead("feyn.tif")) == NULL) return ERROR_INT("pix not made", mainName, 1); #if TEST_SYMMETRIC /* This works properly if there is an added border */ resetMorphBoundaryCondition(SYMMETRIC_MORPH_BC); #if 1 pixt1 = pixAddBorder(pixs, 32, 0); pixTransferAllData(pixs, &pixt1, 0, 0); #endif #endif /* TEST_SYMMETRIC */ /* This is our test sel */ sel = selCreateBrick(HEIGHT, WIDTH, HEIGHT / 2, WIDTH / 2, SEL_HIT); /* Dilation */ fprintf(stderr, "Testing dilation\n"); ok = TRUE; pixref = pixDilate(NULL, pixs, sel); /* new one */ pixt1 = pixCreateTemplate(pixs); pixDilate(pixt1, pixs, sel); /* existing one */ pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixt2 = pixCopy(NULL, pixs); pixDilate(pixt2, pixt2, sel); /* in-place */ pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } sprintf(sequence, "d%d.%d", WIDTH, HEIGHT); pixt3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pixt3, &same); if (!same) { fprintf(stderr, "pixref != pixt3 !\n"); ok = FALSE; } sprintf(sequence, "d%d.1 + d1.%d", WIDTH, HEIGHT); pixt4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixt5 = pixDilateBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt5, &same); if (!same) { fprintf(stderr, "pixref != pixt5 !\n"); ok = FALSE; } pixt6 = pixCreateTemplate(pixs); pixDilateBrick(pixt6, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt6, &same); if (!same) { fprintf(stderr, "pixref != pixt6 !\n"); ok = FALSE; } pixt7 = pixCopy(NULL, pixs); pixDilateBrick(pixt7, pixt7, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pixt7, &same); if (!same) { fprintf(stderr, "pixref != pixt7 !\n"); ok = FALSE; } pixt8 = pixDilateBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt8, &same); if (!same) { fprintf(stderr, "pixref != pixt8 !\n"); ok = FALSE; } pixt9 = pixCreateTemplate(pixs); pixDilateBrickDwa(pixt9, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt9, &same); if (!same) { fprintf(stderr, "pixref != pixt9 !\n"); ok = FALSE; } pixt10 = pixCopy(NULL, pixs); pixDilateBrickDwa(pixt10, pixt10, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pixt10, &same); if (!same) { fprintf(stderr, "pixref != pixt10 !\n"); ok = FALSE; } pixt11 = pixCreateTemplate(pixs); pixDilateCompBrickDwa(pixt11, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt11, &same); if (!same) { fprintf(stderr, "pixref != pixt11 !\n"); ok = FALSE; } sprintf(sequence, "d%d.%d", WIDTH, HEIGHT); pixt12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pixt12, &same); if (!same) { fprintf(stderr, "pixref != pixt12!\n"); ok = FALSE; } pixt13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pixt13, &same); if (!same) { fprintf(stderr, "pixref != pixt13!\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixDestroy(&pixt7); pixDestroy(&pixt8); pixDestroy(&pixt9); pixDestroy(&pixt10); pixDestroy(&pixt11); pixDestroy(&pixt12); pixDestroy(&pixt13); /* Erosion */ fprintf(stderr, "Testing erosion\n"); pixref = pixErode(NULL, pixs, sel); /* new one */ pixt1 = pixCreateTemplate(pixs); pixErode(pixt1, pixs, sel); /* existing one */ pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixt2 = pixCopy(NULL, pixs); pixErode(pixt2, pixt2, sel); /* in-place */ pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } sprintf(sequence, "e%d.%d", WIDTH, HEIGHT); pixt3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pixt3, &same); if (!same) { fprintf(stderr, "pixref != pixt3 !\n"); ok = FALSE; } sprintf(sequence, "e%d.1 + e1.%d", WIDTH, HEIGHT); pixt4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixt5 = pixErodeBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt5, &same); if (!same) { fprintf(stderr, "pixref != pixt5 !\n"); ok = FALSE; } pixt6 = pixCreateTemplate(pixs); pixErodeBrick(pixt6, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt6, &same); if (!same) { fprintf(stderr, "pixref != pixt6 !\n"); ok = FALSE; } pixt7 = pixCopy(NULL, pixs); pixErodeBrick(pixt7, pixt7, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pixt7, &same); if (!same) { fprintf(stderr, "pixref != pixt7 !\n"); ok = FALSE; } pixt8 = pixErodeBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt8, &same); if (!same) { fprintf(stderr, "pixref != pixt8 !\n"); ok = FALSE; } pixt9 = pixCreateTemplate(pixs); pixErodeBrickDwa(pixt9, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt9, &same); if (!same) { fprintf(stderr, "pixref != pixt9 !\n"); ok = FALSE; } pixt10 = pixCopy(NULL, pixs); pixErodeBrickDwa(pixt10, pixt10, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pixt10, &same); if (!same) { fprintf(stderr, "pixref != pixt10 !\n"); ok = FALSE; } pixt11 = pixCreateTemplate(pixs); pixErodeCompBrickDwa(pixt11, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt11, &same); if (!same) { fprintf(stderr, "pixref != pixt11 !\n"); ok = FALSE; } sprintf(sequence, "e%d.%d", WIDTH, HEIGHT); pixt12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pixt12, &same); if (!same) { fprintf(stderr, "pixref != pixt12!\n"); ok = FALSE; } pixt13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pixt13, &same); if (!same) { fprintf(stderr, "pixref != pixt13!\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixDestroy(&pixt7); pixDestroy(&pixt8); pixDestroy(&pixt9); pixDestroy(&pixt10); pixDestroy(&pixt11); pixDestroy(&pixt12); pixDestroy(&pixt13); /* Opening */ fprintf(stderr, "Testing opening\n"); pixref = pixOpen(NULL, pixs, sel); /* new one */ pixt1 = pixCreateTemplate(pixs); pixOpen(pixt1, pixs, sel); /* existing one */ pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixt2 = pixCopy(NULL, pixs); pixOpen(pixt2, pixt2, sel); /* in-place */ pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } sprintf(sequence, "o%d.%d", WIDTH, HEIGHT); pixt3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pixt3, &same); if (!same) { fprintf(stderr, "pixref != pixt3 !\n"); ok = FALSE; } sprintf(sequence, "e%d.%d + d%d.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pixt4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } sprintf(sequence, "e%d.1 + e1.%d + d%d.1 + d1.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pixt5 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable^2 */ pixEqual(pixref, pixt5, &same); if (!same) { fprintf(stderr, "pixref != pixt5 !\n"); ok = FALSE; } pixt6 = pixOpenBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt6, &same); if (!same) { fprintf(stderr, "pixref != pixt6 !\n"); ok = FALSE; } pixt7 = pixCreateTemplate(pixs); pixOpenBrick(pixt7, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt7, &same); if (!same) { fprintf(stderr, "pixref != pixt7 !\n"); ok = FALSE; } pixt8 = pixCopy(NULL, pixs); /* in-place */ pixOpenBrick(pixt8, pixt8, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt8, &same); if (!same) { fprintf(stderr, "pixref != pixt8 !\n"); ok = FALSE; } pixt9 = pixOpenBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt9, &same); if (!same) { fprintf(stderr, "pixref != pixt9 !\n"); ok = FALSE; } pixt10 = pixCreateTemplate(pixs); pixOpenBrickDwa(pixt10, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt10, &same); if (!same) { fprintf(stderr, "pixref != pixt10 !\n"); ok = FALSE; } pixt11 = pixCopy(NULL, pixs); pixOpenBrickDwa(pixt11, pixt11, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pixt11, &same); if (!same) { fprintf(stderr, "pixref != pixt11 !\n"); ok = FALSE; } sprintf(sequence, "o%d.%d", WIDTH, HEIGHT); pixt12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pixt12, &same); if (!same) { fprintf(stderr, "pixref != pixt12!\n"); ok = FALSE; } #if 0 pixWrite("/tmp/junkref.png", pixref, IFF_PNG); pixWrite("/tmp/junk12.png", pixt12, IFF_PNG); pixt13 = pixXor(NULL, pixref, pixt12); pixWrite("/tmp/junk12a.png", pixt13, IFF_PNG); pixDestroy(&pixt13); #endif pixt13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pixt13, &same); if (!same) { fprintf(stderr, "pixref != pixt13!\n"); ok = FALSE; } pixt14 = pixCreateTemplate(pixs); pixOpenCompBrickDwa(pixt14, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt14, &same); if (!same) { fprintf(stderr, "pixref != pixt14 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixDestroy(&pixt7); pixDestroy(&pixt8); pixDestroy(&pixt9); pixDestroy(&pixt10); pixDestroy(&pixt11); pixDestroy(&pixt12); pixDestroy(&pixt13); pixDestroy(&pixt14); /* Closing */ fprintf(stderr, "Testing closing\n"); pixref = pixClose(NULL, pixs, sel); /* new one */ pixt1 = pixCreateTemplate(pixs); pixClose(pixt1, pixs, sel); /* existing one */ pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixt2 = pixCopy(NULL, pixs); pixClose(pixt2, pixt2, sel); /* in-place */ pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } sprintf(sequence, "d%d.%d + e%d.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pixt3 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pixt3, &same); if (!same) { fprintf(stderr, "pixref != pixt3 !\n"); ok = FALSE; } sprintf(sequence, "d%d.1 + d1.%d + e%d.1 + e1.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pixt4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable^2 */ pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } pixt5 = pixCloseBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt5, &same); if (!same) { fprintf(stderr, "pixref != pixt5 !\n"); ok = FALSE; } pixt6 = pixCreateTemplate(pixs); pixCloseBrick(pixt6, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt6, &same); if (!same) { fprintf(stderr, "pixref != pixt6 !\n"); ok = FALSE; } pixt7 = pixCopy(NULL, pixs); /* in-place */ pixCloseBrick(pixt7, pixt7, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt7, &same); if (!same) { fprintf(stderr, "pixref != pixt7 !\n"); ok = FALSE; } pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixDestroy(&pixt7); /* Safe closing (using pix, not pixs) */ fprintf(stderr, "Testing safe closing\n"); pixref = pixCloseSafe(NULL, pixs, sel); /* new one */ pixt1 = pixCreateTemplate(pixs); pixCloseSafe(pixt1, pixs, sel); /* existing one */ pixEqual(pixref, pixt1, &same); if (!same) { fprintf(stderr, "pixref != pixt1 !\n"); ok = FALSE; } pixt2 = pixCopy(NULL, pixs); pixCloseSafe(pixt2, pixt2, sel); /* in-place */ pixEqual(pixref, pixt2, &same); if (!same) { fprintf(stderr, "pixref != pixt2 !\n"); ok = FALSE; } sprintf(sequence, "c%d.%d", WIDTH, HEIGHT); pixt3 = pixMorphSequence(pixs, sequence, 0); /* sequence, atomic */ pixEqual(pixref, pixt3, &same); if (!same) { fprintf(stderr, "pixref != pixt3 !\n"); ok = FALSE; } sprintf(sequence, "b32 + d%d.%d + e%d.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pixt4 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable */ pixEqual(pixref, pixt4, &same); if (!same) { fprintf(stderr, "pixref != pixt4 !\n"); ok = FALSE; } sprintf(sequence, "b32 + d%d.1 + d1.%d + e%d.1 + e1.%d", WIDTH, HEIGHT, WIDTH, HEIGHT); pixt5 = pixMorphSequence(pixs, sequence, 0); /* sequence, separable^2 */ pixEqual(pixref, pixt5, &same); if (!same) { fprintf(stderr, "pixref != pixt5 !\n"); ok = FALSE; } pixt6 = pixCloseSafeBrick(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt6, &same); if (!same) { fprintf(stderr, "pixref != pixt6 !\n"); ok = FALSE; } pixt7 = pixCreateTemplate(pixs); pixCloseSafeBrick(pixt7, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt7, &same); if (!same) { fprintf(stderr, "pixref != pixt7 !\n"); ok = FALSE; } pixt8 = pixCopy(NULL, pixs); /* in-place */ pixCloseSafeBrick(pixt8, pixt8, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt8, &same); if (!same) { fprintf(stderr, "pixref != pixt8 !\n"); ok = FALSE; } pixt9 = pixCloseBrickDwa(NULL, pixs, WIDTH, HEIGHT); /* new one */ pixEqual(pixref, pixt9, &same); if (!same) { fprintf(stderr, "pixref != pixt9 !\n"); ok = FALSE; } pixt10 = pixCreateTemplate(pixs); pixCloseBrickDwa(pixt10, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt10, &same); if (!same) { fprintf(stderr, "pixref != pixt10 !\n"); ok = FALSE; } pixt11 = pixCopy(NULL, pixs); pixCloseBrickDwa(pixt11, pixt11, WIDTH, HEIGHT); /* in-place */ pixEqual(pixref, pixt11, &same); if (!same) { fprintf(stderr, "pixref != pixt11 !\n"); ok = FALSE; } sprintf(sequence, "c%d.%d", WIDTH, HEIGHT); pixt12 = pixMorphCompSequence(pixs, sequence, 0); /* comp sequence */ pixEqual(pixref, pixt12, &same); if (!same) { fprintf(stderr, "pixref != pixt12!\n"); ok = FALSE; } pixt13 = pixMorphSequenceDwa(pixs, sequence, 0); /* dwa sequence */ pixEqual(pixref, pixt13, &same); if (!same) { fprintf(stderr, "pixref != pixt13!\n"); ok = FALSE; } pixt14 = pixCreateTemplate(pixs); pixCloseCompBrickDwa(pixt14, pixs, WIDTH, HEIGHT); /* existing one */ pixEqual(pixref, pixt14, &same); if (!same) { fprintf(stderr, "pixref != pixt14 !\n"); ok = FALSE; } #if 0 pixWrite("/tmp/junkref.png", pixref, IFF_PNG); pixWrite("/tmp/junk12.png", pixt12, IFF_PNG); pixt13 = pixXor(NULL, pixref, pixt12); pixWrite("/tmp/junk12a.png", pixt13, IFF_PNG); pixDestroy(&pixt13); #endif pixDestroy(&pixref); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixt6); pixDestroy(&pixt7); pixDestroy(&pixt8); pixDestroy(&pixt9); pixDestroy(&pixt10); pixDestroy(&pixt11); pixDestroy(&pixt12); pixDestroy(&pixt13); pixDestroy(&pixt14); if (ok) fprintf(stderr, "All morph tests OK!\n"); pixDestroy(&pixs); selDestroy(&sel); return 0; } leptonica-1.70/prog/church.png0000444000175000017500000017764211736161515014463 0ustar dandan‰PNG  IHDR:ÿîr¸gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœì½ï~ÜH–xΙ$¥Rw{º=×o¶¯°ágô{ÇûsÏxº»J%‰dfˆˆ{÷Ã@d’T‰jªT”ò”~¨d& ãàþ¿Áÿûÿùox"òàûgÏ5?»Ï¿οåg¼œézÆ/Ov5½¥÷Œ3¾=œ¥ëg¼<›tý6âZgœñ[ÆYºžqÆ‹Á™®gœñbðdeø©Jï9î÷ëà|Ÿ|Ýû|þÏ8ãÅàL×3Îx18ÓõŒ3^ Ît=㌃3]Ï8ãÅàL×3Îx1ø>骟¼ýͦþLîþMP`Ú!L»é—¿ÞO?þyûwm¿ZŸá§âùJ °Oþ‡ßÔ¦B4€ß¡€ b ‰™4àK^ï“îçùßôÏìIÑiûš‹¿ ôøÅ/n{2–³hH*€Àˆ ÉÄUJƒ8¿Ôõ>õ~ž·×öÜ«é%bõ¥P„˜ª2ËJ=×;~C8Óõ¥ÁdyÜÕ(:¿¯„XÔ • ÁÎ\ý¶p¦ë ;éÊ8»šæmu…™Õ¾Ò8Ïø8Óõ¥Á%&'5Øé æ>CñÏmÚAC÷Œogº¾,¸\UF3@©n¤Š»™@£P„î;>ã[À™®/ªè‚Ö¸3Y³ÇéŒoÒõ©M^žkÿoÏߦMʯ$ŒSzDPÔRLUSŒ…–óP‰”’ˆOlï¹úé¾¾çKŸ÷óú{Ÿ¥ëË HÀÄ@XÔ¬’ˆ BZ³tý¦p¦ë˃ۥ 1€PÂ¥ddÑAЊƒ c ¥~íñ~Søº­¿8]¿7¥÷‹ÂˆÉ³„`¾Ä‘¨„5ÔC-c@–¦ Jᫎ÷ŒgÃyÁÈ w#)LáVZ3èXÆ[{ÑAXChÍÚb™Ùà=ãðJ×s_âÏ… 0QJ0 T4[>”þV0¦& ™öÝe…£8K׉¥îÆc¯æ„þBŒª½UÍ ˜Aõ¬?+¾®qwvÿ>¶ëŸýÚc>¿‰˜ÐDLÄ&Š`J„‘jb0Qc@#F@hÈ’uºõO½¸çi×»~qÆG$+É{øg#åIû›ùk;ÙŠ|-Áþ´8ÛSÃ¥"bv¤é“$Eõáû3¿/'[‘ø =¬˜Ì%7 °B2’hê¶o˜«T %K®Æ)U¨JƒÒÄ ¤"&óV峂܇§Ý¸/|œç:ïcFܯ3ÎçÄ·½ý<|êñÍê²*ÒŸYöãŸæÍc®0Â(¬Œ@˜ÒHˆ0U±`(2å**0ÁŠÄpAM—ÀÆ'êŒ_gÛuÂsÙ$þô]?ƒ?îT{âyU@°‚ˆgª§ ‹QÄ‚¨–J ÐD ç’œo gº>3rú ’Ë‹ç9]n»>ë?Ÿ’A ,°J“ÍD%˜-’P½Fg%½¸gåR¦*Ÿ3~«8ÓuÂ×òø=鼄 Ýd唿O`U¦ *Ì@6PPÁb«0íÉ‘À™«¿uœ£rÏ ’ÎÀû/ž ʉW¨znhfQJUͦFTŠÂ”º­;ìÊYxÆogé:á¹Ò9Šž¼óŒ•Li$XH TŠ‹¡šÎp °c¢žRcY{Ö‡Ã8Óõ™áÆê  ö9 s‘ a"”€ ªZUZVÕÞ_¢â™«¿m|‡}†¿ìyt,Ý'ðç— q,0kÚ.…v(ÕªBØÆV¬¢dÖÒvQªæ¬18¶€½úÑ“žñÛÁËàê Ì@1#Ml„‰LfA³ûq÷®>„rh¥uÎcù…Úng|Mœ•á—”`ˆD0£©*‚DHÆ«6Ät¡´z!P0• æYP O/pI+ïvÆWÆ™®/ j¤LM`T‹)VÇ݇M;üþ*Éö‡”›:X]µP*ƒ·øØq©ë¬©3~›8Óõ…4Ph¬Vi mмö?«•í…^vB©ÆCoZL¶}ÊÑõX}ÆWÅ™®/ Ffª¦JÕ<ŽýuÐQû‹J(¨16ÛtÕ' ãtf{_Ñ5,±Ù³týmãL׆)ˆ‹j0 D8–~Üø¡E¨c´¡¨EBi$vÖõjrú@ØæÈùMãL×gÆÒã—Ktd*!¼\OìÆrwZM«©Fa‚Õz¨ãM·a B“Ú µ(AcîŠö@PøZuÁü`FÐô®±ä—ùêkïp}u§{¬ÿ°S‰}~"|>έ՞æ =ƒÁ—E† @Xd £øò5>Ï«)`äjN+ÍlЇ«²¤XÐÐH@­0¤$‰¹Œ;NºÛØv{­×.5”’“Ô×!wºË•Ua$¤‘ÐBB©¬ © !š™ëÄô5²¨˜×!õ‘¦”¨™Z1…AÍ jÝ*p¯þ8*}=¦«ñáTǧöõ}jàçÊ/øÒý‡ùÏð—Õµx`±©DUœ€T£ÀhD ÑÌT:UµR´økRALÉÁ±öZZs‹j¯ãÃuÐ~÷a?0ß2G–ÈB1U´5ü©h[ Õ­]i,$JÃÔª$J„¤Ce0¡Â̬ÂÌLa¦ ^#ë)– #…" ­¾ MEð‰±ó*[ÓÀgÑúwáL×ç„ט:c½F\¡ ûbS¢ðšr5RƒÚ\‡A iÉ„‰©Y…­ jw(½Ö¬µXXs´œ’E«ªi±Z¬ÒL` igÚ{å¼€`‰¢%06 QB€D†+e0¨/åAÉ¥êôˆ $! LókqeÛÀYœºy|ö]='Ît}fL«•/}HEÍæ‰k“Q«5©¹@!‘¡FÔb=¬jX²æœëhµ˜fŒ·A”¤X…š()DÓBk A…(( 9[RUÐÌ`€d£Bªb0ŠUª *•¨Ed|¥lB1$ÆÖù ¦XI5)0µ8E‹„Iljҗk—£®®/˜PêyÕÙÏùâóÃ-U÷»êÔ¥pfé´ËÜÝÁ[žRh‚Ô`5« õ°ƒe”ÑJ¯u´7¨KwÖÙ*u®Ó`5ÌÊaÄÐï¬Ã.‡<ôÐ’1†&‚Ñ'÷<4¢V-:µ\"ƒˆA`}ß“”èïL4 ý‰«ÞÆŒ€¶m`î±JUw\_-6I¥¡´RLk@ª&ZŒ¢ÂvÓ645ÖJ«•ëЮÒtéetñÙˆ¿µ¸èK©¿} µÉ(€¨ªªZ-B$2Q«–>öýaWÇê»È¡%·-Õ°Ì¢¦Õ  )ðO0a@ð2xÕ¢Šj5µ€äl7ÒÆU_‹I5@UWÑÑ»<á*V957B¯ÊLcÎ=C !Æ P1BÕ`Íþo…Íeì¶›f‹ØæÊ¬2*aA()HD°j†êM•žo/¥/ñןgéúÌhÛNUÍLk5+bH„ˆÔP³–Áò¡ û2ìuXo›x…â¾Ì² œêÚmÎ@«ªQl`š™ÙÜCx²M—ÅÓ ªröWÜM»õ§f0Òý·.iFX Â2k‘¤¦Vë‹•}(¶ÛÐ\¤´ÑÐÕ±‚c­¹ƒ ñÜêïÁ™®ÏŒZ„@‹¤Q¥Vh+6îó¸«ý­ »:ÄŠX ä€â½—¼§¡Á`dp¹ P&$uP­´É $ˆÅ,³ÛI:µ(]hI› /«÷e Ÿªs±:©‚gUšA+’LÛ`jcoùÖbgiô ©Kí«ŒhH`* +„`}âjîgÜáL×çá°kbŠ)¦(bµè˜ûÛ:î7ïXšoYÆ`cÙÄ"L3Q‰ ¾š‰  ‘¾Ú2¦æ¿MªÅ³Ž FRDHˆˆÐ×¹ÔbfäT ë-‰‡©B™kÖ!“ûÚ”¢J#Ì‚M1R¥T¡˜yâ•ú""~ÒjѪj£Ró¾Ž cWÃF›½¦mj_Å$U ЪµÔÔ¼lcçëâL×ç…uAr°Â±–ñP†Û¼¿¶qW÷ÄÆ`% 4M@ ‚F0€Áæ&‡®ß’Sí©´Zmò ¹44˜HDa)"B˜™@Œ‚…»‰a“ƒâ¨–õ®CâJ7U=ß®cM 0P@Šòàñ^$ˆÑÔª•J-ã¸gº`¤ë™®(M”P„fgMøóq¦ësB —— »q¿ßnòáÖÆ=ëtlm ,1 QÄkV«fU0(-RŒ¤‰43¢úºè¨“%¬êVD‰HŠ€¦f4µbjƒ8k¼žKtçV4Ê1u¸Ýì%:bœÍàY¿6›-Sçdš‘ˆ)x´™©²”¢#Ùo›í8–RÆ2ì™v²¹Ü¶–¶»¢õ¼†åçâL×ç…æþZ×ýíMû¡Ž‡Ps4ÑB¨KB÷›)ˆØ¦&só`˜Tƒ¯‹ejÞ‰TÕTUi  B¡)Ì›£sf¾Y5 Ý-Tu7Îêå§nZæ;wõq­F™Öö˜½_!ÚÍF+L üŸ¯§%!ˆå!g–ƒåCÐ>Ö}n®B¼ª<Óõ3×ÑOÙþ:xꨞ4~;ñ»œþ1ÃŽb\6g»z¦þ” k©fNípûÓ¿"ït$÷bc h@ÍB`ò÷ ýžWàZ¨{‚¬ÂŒ¦¦fÕý¡f4˜ h‚( ÍË_”Šã,Š jª žéµ@Kµ×ͬ×Ë™JrIry“wÁEÅ9½¦Ï.ú!›Z ‹Â&µ‰ÃXÐ M:d-×5\woþ‰R—bCôLãã__WsmùTçëੜø¡GÌ·‡(wôâö1Æ>W}«s=§K¦ùø°A%bˆ>Y‰ê9DfU+%t"IŠÔ¡ ×ãp«ãõøÓŸƒBkÅ f¦šb”9©×MB„ŠßRì.¯Ø;F˜ªÖI ¦s[%…bŒªª™Š…¹ÂHh03À³‘¨æ¼¤FˆÄ(""RJP8)·f°Ô€ÕBKXžB"ÐÃ@æÂ^ÍX-›÷z£©H6T׳SŒd h–« ¥ÀÊ.ìâ64Æme—ƒ†¬ŒiSM¡5R¢ÖšKÑ7Šè-å\˜s0æÊ'Ÿ•T¢bŒ/‚±Ÿ×&>ânµÏ_ÞâËËØåDŸ>ª'ÿ>î¸zÚX쮄™qrÏRLă)ëXǽ·¹ÿP†käëFÇ€â Á­<èù¼Ó0Œ:é®3‘–ÏQ@&O3$‚óÍoU­µzb†­àqCsº¹¬BÒía/A'¹dŒK1 ¸lÈd±ÎiÇ$Eªjd¨6U¤WsÖ{Ƚ\•TÀŒPA)‡¿"lê°Aº@zâe+›65^ècfZ« !&Ih&2åXë”u4[&aZðö[è~‡¶«N wù3E K¶ú´+X'…Sª'´ f¹×¼ËûkÝ_—þ¶Ž{è¡ãJµ&¹¨¾@Å‘ŠíOÙž%Ëj­q®ŠHÎÙy0¹v©îµ¥fIn¦ÞíÁÌŒâÒ8ÆèD­µ–R|HªzGBûXSšõ ]À´HÕÖñ“àÎ/桞yø¦P¯Mnk’t•؈mÌFŠÖ2ÃÞâvi X!Z•Qu᪛#¨wKû¸ßi:oT?¿|_tV’îÕ™ºxâÁ.»f®ÚYD òPó­êíx󣕔ò!b­„B](J›ò 9Ù‡ZV ÞåýÙжma!­¿¹Ðõ„±€¾ÿðŽdJ©ëºÍf³Ùlü»<Æú‚»uË#c­“bSáû\Ý3?­püÐqhL”$2g kÍDZ‡Ceó*ÈÆ Y ‰È"lqÌ+3ý¯ÿõ¿ø×—íâX~TÀ>„µf¾öÉ7O¸˜Ðó– f¦°b)£„–ZÆa€Ž€¦`!h¶(–â!Wßï(ËéMpÒ’ ø¶ÃO\ßu¹A7UŸãàžÔ%)—Y6oLŠ7‹ 1xåIAÕK y8¼ï?üÔß¼EÞ5¡ŠÎ= À*Mm„IŠí|\ÃÔÕ¡®/ÖÌ3–Ž®tí^“g™ë‹?ÉësÜÔ\Hiÿ4oÈ&rTTuùÒƒ©OÿÚ¿ZËVu÷NÊii!™ª[UK£ÞHº1Fcð¯1†M4¥¿|_t…I)ªUÕ Qh‘…5ï>¼»þð¶¿ýІ1Dƒ©’H)™y·$+¥( źÔÜ©»ÓÑOÝ?X3ä‰#=1J—YîÆÞ}"ùG>ï9ç]ˆˆ¯}¾pf¡Ä€]Îâîè…ó÷œÒ¿0μ¿x¶N¸½ É õõEùë _TÚ¦¾É ¨Vµ=×ìÐ4 l²ˆiP„bV~ùæ¾X|_tUB•¥ºŸA¬XîKÞ½ÿñßòîC`iBÔZ2i!H)żÅÙbñEkJ)¤M¬˜œŸã,ûtOìä•Yѕǩk}xí=á*ŽåöÉIý“?ÖG¤ëcé'¢~}œûRô¾C{ùbÖ €æ‰¨ª:”þC0 !AØæ«Jößè³Ú ½|_tXÁÊHµ ¬ÈÃpû~¸ýyó¶±±k$ŠZ-rRÌf‡8@Z@ZFW#%p•løðÔôOž6Ї¥´©êœQxw¢²ŠFz IDAT¿?5a1œd8bå:¾Ç‡ùüÙÒuyXpÕãd^èÊ9pïÒ|Áh˜˜„@!´µŒ|k´I§O ”ÑŠ¾éŠœ¯=€_ j ˆÐ1ïwïÿvóó_Yú¦A @Õj 1Db‰VU->ͼìÛ—¹X5Yº®$ܳÍhéaSÏÑ\h0aŒbsÔejM ÄYu…“ô5¨³/ìz©-#qÏY½° @x¤¥ý‰Ëg¶)]昙•2ùTÖ†ëz/[O!úÎk)ºØŠvê[rO•ɪÖ·~ºÊ­O·ºÇÓƒf­„/šðÒfÕáe÷fæïŸ8ÀÔl¥ÌH ªQlnÛæ"Àvã.ï>HØ„6Š ‡ñ) ÂÅSùòØþ>‹¾;éZËØ4͸¿=ô×o#KdÕ2 Üî±ýìüY •µNgFÝÙl÷'ú“ð zyÿ˜þüöPÀi9‚»šN,^>âÚ]Ò›O®ô±ã/ɉËcÂ+'-T'Ý~¾éf±© `ÄÄŠrl˜L{Œ·©‰m•d8êgßáß ¾/ºŠJVËùóÿú?þŸ—QfÑƒÖ P0·YòùêÕж¤Œ/ÿ›Ô²%ÛÞ»~Œ¸kDz:‡žq2ÝqÓˆÅïÇOº\þšæþ\=öôÏ1ø‹O'aÎÙ§»×µqŽÓ®ÊíÅ”ýÈ mvce 㸤1sv_à ðUomZ$Ç× èKMÞ@+.QêØÞ—‹±¦c¼ßÎêÀ‹§«+H21è'A*V?¼}÷ãÿù×ýõ»ËmÒ\ÃX›h¨ M…”É뫆©»Áñb°X*Wg IN/WùŽ$óB™žŒ®[ú?ºê¯×›Z‰[,0ÿb-eÉ=:ñý¬u×;}ÛPZk"Ôšêg§£é\×:W\5]K§uôÅÏ˜ËøàïÕu]­U«N«Ñ†~†¡k7‹µUMÂå奟hÇ»³G¬jVU¥ %®•$3Œ£E! ,kôª•ýOÿóêò¼úSæë6#‚Y5³à½ÞÝîÅal¯qö,x*/>¾ÿ‹—® Ä|e^ÀD’ ”-¥X-mLv7ywJ˜¤ 1PÔ+4@«€]"¨f50zGÃ]¹Jâ›pòؾ×mì¾¶lfά“Ýv"'9gGòyÙíijb“ùí.‚”¸W³ºÞrµ>å2žØ¥ñeœÀÇVJYž)˜m×—òÑ‚ZQ ›s¡Ìõ³ªŠ*Þ9ÎíÅLû÷¥ÙÆfЮüöîç{ú”䗭8Næ‹çÛ»!B(¥”šÛ.ööíÛý~Ÿs&éæÍ/[– átð¹QÃSy"—NÞ\¾¼XG5×$\\;˨\­9ö)ã\TÖ:ᘱ÷­ÓOÄš„Ë\^>òúz³Kû‹“Ó àDÔ/zû¬hF–:öíÖ!À|3‘yÁõ#¼0®â®nBždŠÎZ¨Åµ4¤ ûÝíO?þÕ¬2˜fPSu¯yyî¼Jãœ|‡{âqxXÃÉìÅŠ„XùZ§ŠŸy›«ÉN Óæ³cY~jSËŽý^«Yþ´'ËZ£^Ÿú#û?v±6+äKÆRAkY?ƒÖÙÂ'÷áþy—k4³åþ,‡23DXòXÆÁr/]@ èÄÕ…±ËœyIëÅÓõ1nÔZÕ46 ˜fɇwo¯ßÿüzÓ$TŸ(Õ“Ú  N»4à˜`'ï?ÿe<×9’º40ÍæÿæUÞ¦=Cë#§[Û·XiÔ'î¿x¥i(öÛ\D\©YTŒ¥Çã±'§³Çí‚”Ò2TW.&æÓ@ÓzÀ°gÛ322yþŠ[IÀâxðý_’ÿéeÓU¦eïæ¥¹ß”V§gt !$–þööí_ÿ½äÃæÕ6è`fj*ðBgìä‡\KWÍÉ8±å|zÝÇcÒu­[b5q9«ãÜq·>¸}mdâ‘L‰±˜ŽËñýP¦ÚÄjxì,'¹Ä‹2ÌxçÃL¶­{}«×#Y¤èr„õÀi5«11-yÇáF$"ÄZ• ÇÁ}iv+ðÒé àhá™ÕB(Zk.!2$^xûÓÿÞÅ"Y U…!Š@­ÔZñÀ´»ë¼à1=íñ ½z"ÁîŸk9#ºÀÑZX)œke{&Ì£¢Ç¤ëB¡µ4{ª¹¾Эo9µÞX7gòûc\®Ëeµ¶åÔàxu›ïVL©5¦Ø(†qþ¶k¯BÐ1¦-(î"0=£³2ü«ƒJ½‹z+÷‰¬UÕ”b2ìv‡›ë׿¿tV&£H@ÎfP³EPÈ’{Dr†!æ³*¥ô´1žäÞ“K'²èdÖÎ;˜ªMýÜŽµô¹çƒýP®¸z,++"ÞÆq†­Û…·íZÛôC­@'‘˜¦iþ,ìÍ9w›ÖŸbž×±Açè8{¹ýÓÍfs¬/L÷ÐÛ5-ªošžGºÛí–Aú‹å˜ë›°<7ž–ÈFHŽšw–±»Ìwê—'¥  ³óéÅà…ÓÓ©ó40çÓMp½n÷ï~þ©?ì/DñE7æšçãŸÊÓ_ÌÌ[1 …a*§^D¢ÏE7´ÖÚ ÖZ}Ÿ|KDtGŸÖ–7§ïܱqöš9ÇJ¯…Õeœ¾†:½sŒ!Æ@BÕ§>c qž£ Á¸<}œ-k‰zﺰÈáåõrO–à'Wî«ÅU{¢Y§˜íç…½1F’Ã0ø§ªã8n6ÿîÔ’r~8úêþ²Õòð€ÔšƒI— uÜ7ÈW­üŽUA;J_±¼$·0¾º =`Šˆ 1Êázýá­Õ¡‰m @Õ9α¤û W§GµÿòfPÌʉ¡õ‘Á8‹ÖÇCÎñ Çu9¬|þ-;,ĕዋ¸È™Å„³•)XJ†Á¿^kmSZÎkÇ>U]µ€Á=•ÇþáÃá0÷¯±…íã8ÆäOЏðÙ)ä|[ƹÈðaüøþÌZîÛápðÛâ¿]Ó4˜ÝËkùŸRò}\Ù^äÿdÐÎkfšµfäRó-,ƒi•Í—ÅÒ/ž®óÊGwß vØÝö»Û@t1¤(Ege˜X*ÕìÈ\\èZµÚÜWm™ë‹nÉ¿.çïΑžERµm»èŠKóËÇJ)‹¬ð)ØuVšöü¾ŽcÊy?à0 ®Fú´nšÆéêBiÇq×/ÇY‹ÍRŠ‹ôquÎ:¶¹ÔZ?_hœRä´qy)%’¾§'úŸ%×£jÑ™CMÓÄ]—ñ»á? ü+ËÈý[®ãLÓ`$ôÜ“ˆ¬RÍj_ó©Ó²àÝ4qðÂò_<]O°è:f&Jíon¯s»&¦e”øÒ4e'B*IT•;jƒ8ùNd®®æÊ…c¦Pó%:eØ_ì÷ûå|¥”…™}¿w1•sv?ÊZ3”ã°ª™ö½å<¦”®®®ü°žïÄhšÆåmŒ±mÛZëÏ?þ´Èöµv-"———v»Ý0 mÛ:ÿ]ç\¤Ù2æ®ëüZ‡Ã0 ‹Á\®³ß=ÿbÛ¶WWWùË_Nä¶ÿy±½t3x§%fqê6ç|8öû½?8üD¿ûÝïÚ¶õ¯øÅ.×»XZ!"‚bš bÅò8ì™®¦”,~™ýÃØo…®Ôõ¦ÖjQ†¾ÿðáƒUM› ZªzÀmùyÌ™rèÝ;å¬Eïyng ìNõµÜeâÓÝuTg¬™+ÖÙÀjÅ#C°Z!‚”BŒ±Öä–ö\Áã9•ˆQB  (Ü3\Ed»Ý^\\ˆÈõõõáppq§ª‡ÃÁVæ(fÉ< ƒ ðwïÞ]__/Â-DqÙîÆùv»mÛöòòòöövÑ æ“üáõw#õ}}}Ý÷½‹Öa´mÛu]Îy·ÛØl6777ûýÞiùæÍ?TÛ¶Ã04Ms?ÅbRøZ3T›Ø*ÑûörþÝ}Ùæ»â—ÔFü³èêÜøÄ­wÛùôýŸ´¢X²ÉÄ pÏD#yèûÝ­YM¡­u¬%„¾$dE×»©¹˜v˜‚Ôª0¥éÔë TUW¨çx€ f1…Zk)yGç¤Ï{Ÿ”NÂq‡ap)ñ»ß½ ³†,wžáz¹Ù.,­µ–:ÖZ­–Ͷ†˜RúáÕUJi“â8Ž1Æq}çÕ¶ImõrÛšyñŠÑ¡€ rÙ5o^_ øî­ M䶉cÉu8(<m¾g @øÃ«Ë×o^ XÆC>ìÖDQд´MjSS´©¹4]ûú¢{}µy}Ñ1ˆ€Eks5õ£ýé~c¬µ¾{WnQ¡YšÈ±/µV$iâ&0ä$$_]nþá¿ÿóŸÿíúúúÝûŸ÷‡;Ò//®Þ¼y3?2\3’©#ŒYBµZ ”)R­ŽcŸ´¨” ªE¥ˆUó7umJͪñ©mu÷;?uþ?uûØñ! >½Ï0êÔ<òxK!`¾$àzkVa ØÉ–÷Žð™Ûù’ŒPÆ™À“\]tÿúÿþµ?Ü´Qj­]»ÉZ´ä”¦5YµÎ~”j@)uJ‘™rÀ÷77ÝvSJɵBR šó”1äù„šµïw)bèw.NäqPÕ««« u»Ùl6›aÞ½acÚnÚmÛ5mlÛ–¦»Ý®é?þ㟬U5-ªŠªU³Ç'»®5áB~‘ÿàú¡·;r-ÝMÇZëúýÿu󇿋‚1 ÁTK­0CÙ›Ùú‡þøæBÍ‚èE×4ø¡ªÖR¦}È B‘«ËdyWU_mÂå?þ~yß·J­RÓ\lÛ¨ù?ÿéþ¾g3P¤kÛ¦mCÐRöøãï.ß\6ûý~r ýã~úé§¾ï[)W¿ÕMÊäö2¥öUáýûŸw»¾ëÚRëå««›Ÿ~¼¸¸zýê3VµfJÀàW@‘ëÈþvÒF%kìaa­Y%P£h®Yùä•¥1rJþTª<2ÿŸk+á1˜úDéz—è÷±šÉ_mëí`¢GC¨¢ŒÃ®ô{ÔQ‚"ˆ’ÚV„fÈ9Û]õÕÅ% VµÔ1j ±iš”¢$ªjE !†FLm¬ƒ ˜¨dËP‹e+”ˆáÕÕf{Ñm¶mÛ¶ã8¾ÿ¾ïû¶K]×m/ºív³½è®^]H)mšMÛ¶Q("eòÐk‡þöÕæÂABˆ‚Zë8†qŒ± Mòœf¶I\lÝeÕ÷}ŒñêêÊÅòvÛýéoJ]öÆÝ£#"®¬Ú*Fåâ½išµn¹(Ï‹MË9ìäªõÍÍ ¯Ÿû$ÿó?þƒÌuöî1J)¥”r­}ß—RÜÁ; ƒûºº®»ºìü…¿/"Ýv“ºm›sÝívûý~¿Éùþýû›››·oß]]~H©Ýl¶———1F&F1…+¥ÂrD ¨B H³Vuÿ¾N¶‚óôæ´±Y›4h°~Å9ÿ Ø® _-9ªFÓ »Ûý͵å1†ÅV›”ÔŠV5+_#œk%, ƒ+(LfóX†R¬´±¥TTôãŒ Õ è¶]“ˆš.7­³eÓm.7ÛMÓÖZ¯®®6›M×u‹×g.Á“¦iAr„…Æ<æœsÌ¥ŽVkŒqÓ¦¥í½[˜î^Z;¢œKÊ¤Ì @Tss•ÅÓë÷ÊVžm;®³]œØ ë܉å#÷Ãzº…óÜ#+‹mñ0ùw]i—ÝH)µmcôãø;§Ùï÷îv )öš/6Ûö‡Íðjhbssscj­Düðîý‡›ëï®›ÔýáhbLmr¿éR"SÛÄ€lÁ B9쇘ÁÔE)É8]½Ps @ˆ7Ö —S@äkºŸ× ñ úóS•í§c%WM@¥©@ƒ°¿Ýv7Ð$ ¦jŬ‚ƒ¤azˆˆ¤FPµïoonr©5»l©©or#"Tu÷ SŠ"H©¹¸Ø\n»€Ò¦0ú~ÚÔ´›îÕå•Ä@Ãæb›Bò¨¥†iȵL „NƒÍfÓÄpuuU‡¼ßï»ÉËm·Ùl‚Lé»þà‘Õ‹‹ w–ÃàFº.¾ú¾oš¸iÚRGKf ½Ø1–ËÅ¡½T·qœzJ¦çH¸7;ÆèÖr­µëºå»ÞœÍ3ž´üJ³µy¡ ç¹ËÛ¶mý[nG”R®o÷íf#›¦ù§ú'’CŸonv?þøöòò²m[2Ôj‡~÷/ÿò/×·®~wù»ß¿ysuÙ5©ÛtVt€Àýá¶ÝRû!T˜ŒV¨œ³‰—,ÖÊ¥'Ì"o…¦ö¥çò/áeKW#ÔsS¸´'œÜ}M”÷ý~Sô¥ª*¬VŒ…2-y3«TTšÊÐ}Ž1¶]2ê8no¯Û”&õ/¡Ñj×4]×í›è³Êæ&÷)P€®i¶]»MíXËåf+)æ~¨°±ïKJ1‘†$!„ˆªÅS !F2ÄØuštyy¹+×ëDwT«jÓ4Yë"å\й[Û=®NZ·]cì8LJýh.ÇHn·[[eð­3“4V^nOîõ+õ‘?;<®ã¯ë ’···]×-q`WnÍìõåeJÉmþà!,Å«.“SJÛíÖUè®iÛ¦Ñ2†C×n/..»ÔmšÍÕöâ/íß~úñííí>cÛ¶Û®3¹ø·{{7Û^]¾yýC¶ÐçÈtª‘h„‚HQE •••ÁîžøT_Òdòe ¦Í0¹g¾&žMºž6Ž÷íÿDÈý(ªàÐ÷%祉‚9–P5GB$¨YÇ)+–R:ô‡<ômÛví«ÍEÛ&¹Ø4c?¤(m»išè…eÛíåÕÕE)*‘¨ZTAZJmƒÖ¼m;MšJq3¬pdÕÕ̬ уºE•j)DÕ“éjÙívZrjBX„Ú&’Ìyì‡a³¹ é™·î|òé~qq‘Rr¡çœ !t]W†Ñç½KHÏ^ð ¾%%sàÔ=UË·ÈUõ\D‡E˜/)}ß÷}of.iݦ]²Ú¶Õ¹ƒqÎÙcÑëTaÏUZž#%çZ±D¿rÎûý.¥¦iÛ¶ý¡ëºþçÎc¹¾¾ÞívïÞ½{û~×¶ÐZß½}»¿þ0zJSØmã&„t –ChB Õ€j(FΩæÄT¨Ã¹°Ž¤A‰`Ô3ç_Sƾlé ¿ËsÄUPs9¥”í&¥”ꘅI¢™æ(b¥«ZbŒmjvû[SÝ´ÍvÛ^lšÍ¦‹—f¯ó¾7ÔÛͶM±¥XŠm·iLI1a•þ:rh›¦ï{ÏT‘ D}@ñ(eÎYÍÆq„PK&iµ‡<ô!²aá¶\\¢—ûýAdUn¶öô,Ñc'ä~¿WG»®[lN—„KâîROã"ÚÏµŽ»’tGŽÓ{G7/Iúaen±8¢‹Ôiæ‰Mÿ?uoÖ$Ir¤‰éa‡»GddÖÙhsœÙ…ùDÊŠPÈò…"üå|á>,G–»Ø™Á4€¾êÊÊŒÃÝÍLUù îžÑ˜L&%Ù]Y‘‘ªŸ~úéVõˆÁÓ]O\¯;x–Àpüð(µ!"¦ýɦ[k ™C—S|þÃO€ˆÇŸýâçªòþë¯ê<Öy¬2í$F8•Ї†qxÎaŸ¸W„ÖÌV9—Ý qáª^5TßëOÞ\Ùl¹SESak&Eçµ9ÑÐ%A‹ !±â0 7C_¦s?ô»ÝÎé;ÍTàÕË»išy7ô}¿sº"‚yç‡.S°Ôš˜MÃi‹#|ï^#=1Æ&‚@n'h¡ï{Ë9w ëFDL]L ‘›é–nÈ“ÇÉ1ƾïþ¹¿¿?ŸÏZ›hÝív›U»ñ8V¼Å¢î¾Dd·ÛÁÚŽs_óéý;~”¸±m°³»ÇaÞ½{çgг”6æà8϶°t*ÕÖ çW¸dª1Æãóçwbpz<ŠiäRÄ%ÝW‘&¥U©-„Û¾ëvCÿÓÿþo¦yLfïûÜ=žÎóé‘0¼}¬·—Y«ÞÜM»›—©¿E`"™‘⪰ªà:*»æ®ß'Ùø÷6WûÍ¿ùõß±ˆ¾ûcëoî÷³uÊ®$)bÐÊ<çAÛ8ºÛ|:Þ¿“Ëû¿üôYŸ°Í§çwîËo¾þ¢ÉÅRèºnÈéÙáfñ  ·‡ý~×ï÷{çÜ“YŒ1ÅB¸;Ü€¡‚-Báf >KGE´µ:!A )Ĩ"ãu]礅àêp·&‚±–2ϳ—sú¾ïûªÔÚL¤ïûý~‡ˆçÓãé|fŽ+53§Â—RnnnœNè{ýr¹0ón×_ާÃnc¼¿¿÷ÒñØÍZÆqœ¦éææ&ç|<îîîüõã8v]çìfÞ× ±î9=bGD·´yžß½{w8üqx{Ž1Æ8MÓ8Ž···Z§”N§“?‹œ³W›DdžçËé4ì÷]LEZ$œÆK› 3km—ˈv77aèO§étÌÃE†˜ú7 úWãùüþþCÿöÃÇÇË>R‡“ß¼yx:•˜÷?þñŸÿðÏþ<çaT¨MB „Ä Hͬ´fÚ8†‚èÌH¹ëNãø=Z쟒wÝlÝ´ñ¼‹Ú‘‚žÃLs9Ï‹ÈéxOVn“´q”ÓÙ¤§÷'SѦ Q …É"#"Á'¯_ö)-ãR`´€ÔTí©AÌûõBd02k„$fÖ¤h iÃf`ÂìèÎÖä¥W⺵Ža#Ù#¢¹s«µµkÀ††ev£Ó¯ÊI¶î |>‡—Æ` IDATx÷ÅßýÅOÿG‹]êw!ï±j“Y[•n· ̘™U2h*r¹|—HпÝú“1W¼Òj­Å[kïÞ|ù÷Ÿýím²ÓùA«cdš.Ç›¾{õü¶ VÔÝ0Ôilµ¼xõ©RÀrLî7B‘—º"“kªm gŒ‹íÙJ$ØÊ‚ê»Ù¯ST=D,µ@ŒQͦy6€€D¦ºQüý÷‚]زYýt@t'ã/Î9§Ô)Â&ÁUüâÖâI 7¦»I›-6æŽË!Y‡…6ߎÖâ*JèM0Û›lQÏáú?•Rœ³±¥¦žw]çw¸Öêä ·ÒË49^ÅÌÎ| ¢ÛÛÛ |öбעÔ Y¼lÎÅdÏD”"±´ÒZ—2U-ãDÀF€‘b ù°¿Ùí«Á_ÿä¯î/ïÞ?¾ƒc0­Uš<–óñ?ý?ïB¸9<Û^ »y¸íÒ®ïûÒ&BBM ¹ÀH‘Æá÷ýù×]2æºí?sΗËåË_}ö’ë!Y;Ú4Ç”‡ˆ»>´”ÀÚmo˜³íéîöF¤šÈÝËWc1ã@Dq%˜ 0!ª©.5IPÓ&µÖ®{*xl¶jëlˆ \ÙLwgE°&c™Å`fs«DLÁB3mµidL´ºJ3c|=éREmMU§i‘ÈÓªRÊ2êb)‹t]çöæ¦â¦ªLä‚É›ãµaÍMÅKp>ŸÇc×u^Ôõ»½5…oNøê÷£ÓßÐÏÇ·æy†aû\x²í¼ðW>>>Æ=úõ÷ô¸iG‡²nnn==‘¾ï½›çñññp8ø11Žs)s„HjÍ´ (¨f$¦‰ÍR án»þìǟ̵}|<¾ÿááµÕòðøæã‡/Aqs÷òîŇۗû»çEÐ Si5¤H1¢ÙŸXîú}­k”r+Ä?>~üÁ]}¶Hûù¢CŸsâ®KR­ïrCˆ¼‹‘#´Vb ‚hÛ»ª£mºMpm¦1P@@ƒ­öáÚĪF„O#sÌŠ4²@hˆÈD1ÄœªªTCh¦M ˆ ç^UË$ªJ`×x,ÙRU"Ê)x³´ºYÑÖìâÕ”¾ïÝPWÂ0-S)eš&]ûìrΞU2³G¤nÃp%ìvmŸ[@¾·#t]ç>Ö§S Îç³—…»w:N_~ù%"¾zõj¿ß{MÅCbwÔn? W鮿À™nlPóÖh¾åðî$ýömç…[û6ŽÙCô-ÓŽ1ΗYDÜåº/;¯0»1;éJÐØ¶ÓPA´ÖªR_¿~­*ãù8·ÚD(†ÃmÿòÕ³×/ï¤ÙXêñt¾œÎ÷_|önltªÐ°ûñOþýÿêßaØ9šÑ¾9\áßzýɘ«]éñ8­ôÝ»wÇ㫃ä¡O)•2¥¾CÐRËÔZ:Ñb'œÄˆ÷T¦†fË€I404D ä·ÂÉOt4#Ä©VŠK·É—ùNÝWX¹Df„U%Sk­N#!¡ XUADE0Bݶ ï¼¥{Ó¬ M—›h¡ï:Ž*«r7­ÚŽë8WÊþƒðMb°WMœ´¸Ñ’rΰJCø}öwÞh½°ÂŸÉ½Ÿãº›öDw·Û¹7ö*®]S7ò 6÷"­70¹é:f†ëÄiÍE_T¤Õu)·VZ™‰ˆ#"S­U­ISU2W¶$@®Å…© ¥ÀFbÖZ‘!wa×ÓÍÀÃ@ñ}U9Oe:}<_$Þ½¼3ýK‚®Öf!$ø§Æ#üAW@¡ù;}]«OÞ ð‡øêÍ«×\jï¶ñ¹oRgU“ãÇï¾üåû¯ó«OúáÀÁjUª™©ˆ)NcÉ}RƒqšÝ §”s522[dø :25+Í Ä ¡µ–b" º™+®”wÇWyŽ0³¹õ¶1„6—±Ì‘8äÄ>ˆYÔ˜PÉ@D·>Õe7«*%ŽM`#c-£ÖY@ˆ³Ç¨µVÐgÏžÏÇ> Únw³ÛõˆÜZ1Bqïís}¼}ž÷ý>æ>†œûÝ˯ûý®Oùt:ÅSU›¦ ÔRˆ†*µ š`Xˆ™§Ó)¥ä­ Î7ô`ûþþ~·ëcŒµÎNîO)å)$Ïe>~üøöíÛÂ~¿wjÔ~¿†Áþ%xG'EOÓä!Õ‚6Ø2¾ˆVв¹àXJš"šYˆÄ9 @ q.ã<͵V#D&d&¨ÇËÉO¨ò«Ûý³›Ý?}y.úŸøú¡¾~ùâîp{±<`€‚IøC퀂Œ‚"üÎ_‘€þ…_AÕ–¥ë¯Üj¶KD$¨­QÊ=jé/÷—w¿üôn÷âîÅeª·û˜æócK­Br×φS "P È JÁÆydŽDàITιL33·UóVU‘€‰C çð…ÀÃr‚¹L®rrÇQg] Vµ¢Ô&¦‡ýÍçãišæ@LćýÍe¥µ@ôñt®Òno£ˆxô8Žc)… R·=¹…Ø0!5c4.§VÕ@§IÊÜ¥ÐÅ[?hÊtaŠÎ21Q@&î† ÄÃíóóåòöÃ=ÝÜ=C¢Óe>uÇÁ Ípèvûa—Ó£¶ÖÊt³ñxœŠ´ÛÀh>.¥ââûýçyôc¶”ù|>u]—sªµ†ˆ¦ðõ—ŸÇ˜_¿~-µþì¿ü])ðþÃÿðÓŸþÔ*´”Üó3ó_|á]SoooSêO§Óe¼ø‹˜o%3@U#@«ÅZcŽ(¥)bá<Îs1&€Ü÷ððð€&1F†D‚¤w]Ò]úÁëŽpûhÏN³D¤h2ÃÚ¿Nj¿ã×¥ýýwù Œß!úMsïBøÝ¿®ïû/üªßõ}Xù$ßZ¸°##´rré o/ „È„Š¢ ˜-a$‰‰ 4¨ç&¥”®ƒ»¾ï—º¨J3UU1U0 $fbfŽZEe)œ:=Xu™£CW Öò#¡™yâI@à 2RÛ4MešÍ,¥”RbyªùrX·ÿ,’§‚äy< Ã0  L0MS›pJʼ4 ˜³“A ÆXZB[33œÌÃlŽˆh@D!Äœ8 ”W(KQU»nhs«ZÐÉÉmšj)}ÚmwÀ£ŒÝn‡ˆó<1³h5æ( ÚT¦Zk­òîÝ»Ëårs³0Ÿ?ÿüó­뱆ÿjqU*¶•åñ:Ô_ç»›9ØÀÐõu D [éØÏUA0Ð&fÍÈ” A§Ø À˜( U$€lú=v»ý®_ýá‘ýFû½å®ø]åf\Câo}1©Àô|>×ZŸßíàJ(Ín@æi,Å*«µ’?þ­†é ‹!·äӮĄ™ƒ§–Mžš’ÝCd_¯·Ž]©ln—äW帔ƒ@îÒ½¯E¯b]4%¢À´aH€HDº&±sîûÞ©‚[ºÈkÃ]‰’®wƒ¡FÚ ˜R3& ¼ô^`dÆ>ÇÄÈjdHÁ S ‚®ëK)¢Ô¥]Ì™E+2J­b4—i3³Ö "ºÔ<Ï* RJÌ¡ÌçZkßï˜ùÅ‹/^¼ð’Øãã£Ã×[Á VN¢®=:þOOüÄ•À¼áØþ㺌Ý,ßÖ–© âvdkC™™)£©jˆµ5!12XOO"Bý^[^ÿØ ¦k¡ºo¬íackítz”ºT6„%¥+Z°IÓ†¦­5Ö¥¤áfãÌéºt6_‡ë“!Åë"+ÂÔ<•Z³©øÙ¨ ›åë*Zí[ÐÛexÕm­‘Ÿ ""B`Ϥ”HÁ@ìªÇÍ‹Cî·d«Ú½_³£D¾‰ý¢•²ëg+ù¯h«Ê9*xð‰$XçVÝ©Vil1„¹™a fD#dv!¦€“ˆƒ^‘œÌLD½넇òìÙ³”ºišN§Ó~¿w, ¯¤êt¥4ù²+mä Ûtç®&Z"‘'˜}{CX‡‰ÀÚ{¤k' ß¦jÒš7æÀU5ëúJL¿gÍÄ?6ïúE ×ª.ˆH „4ÓétÈk­Õª­5ÑÖLECµ5—R 0U ¸PöTuš&ðæ”Z5o·‡ªªˆj "n~@þ5b4$¯·¸'T³@Oþa;Ý·XÑ­W}ÐZk"6iµVFxêb­b¶ì]4ó“%ç\eé\Û \ï&ÝÉ×U%XÚè½èšsŽ‘‰@¤ªê¢6e` ÕZO—s«*bµ FNÌöû}ŠÜÊ|¹L9DkµB$A`&Vót)^(ò3±Ö VýŠ1í÷ïwóNG§6ïW‡}sì2Ñ“*å¿ØÚrà§ç¦›W‚²xÅ<£µnì?¾D%H«¹°&h{}d;À hüÜÉ¿âÒïÊ}ý±yWxBÉQÁ3uCZR|"DìiÈÆ— !xš½,B@ „ÄO­ ˆ¢z›:"®áÝÀ¾½~#Ïñл^é-¢®L fd ѦiRi©c'[kf‰‰B ” v>³$q-;U­âè®nÅG<þ8´¥£fˆBØ1áꊀL­5mMb\ÀØÍì7÷µ™ëæÀW†à²BÁ›NmÁB¥Õ!æmœ›â"&"@Ë´¨T˜RêûÞ³â-‘Þ6+Ø¢–Ôu¢9¹ŠviðQmªZÊt¹œ.—‹*L§ §8.é: þâ—¿­‡¡ÿѧ?xùâyŽŒ)DDV­µÂª•†&%¥Î³Ä”RŒ½ßUÍyp¾¤ÛŒˆÇyž‡Ãµ•nÿãö)«FÔ „ušÎvDê:šÖbìÖÖãDK?"Ñ Å)%3yxx`æÀH€`FÐU’ (é¶ÙþðHÓSö»ÿoÿûÿùû½™ãø¿øÅ/¼®íEŽßôúoÅ-Û¢ïêwõ@“ÀÇV¬ºAèÕ¨mNØäÿ𳯿øÕÍÐk&õîп~õ¬ÕM´IÎ}mÒu=2ª55e¢#yóô†µ8‰Ü‰ãT‡UÝË[½K)¥JU5@l¢¥Š†˜ 0¦8Îãùr)Â\fØ7àgSU€Ö t²^£—¹ë̬xG› .Hç$4XÚÓcàœsq¢ˆãä"uíûñëöÿððÐZóÏe pžæ.g39}Ÿû®W05•ZËùt:NÇã-„4ô]L$R±é"¹p½Q ï{¿6"êûVR|â XJ)òSâ*")WŠ'ýE&¢úv5Ào»Ç‡›GòûPk­EX•£ 1xï;3›Éù2¹Zo)Ñnnv÷‡¡73Qšn÷wãüpšÎãåü0NgS !0Ñû‡óéR_½j?|ýrHè+'6ÑårQÕ›ýmk͹GæîQUŸâ7*GÂŽÇã0 Žû£ñþ¾Šì/¶ð¤†W­Æeó|s®ÑWn¶„èÚm,¬d„§Ì9F–5´ÙŒ¾ m|/ë÷¶1g“muD kcäw¾þ·8Þ߾ȷÝöãÚb Œx|¸?ÎïºN¦Óv[]Pßc¡27dŒ1"##1mI­ê˜þàieäâUøúôt(w]J´¥ô‡„jh€€R ‰dnÒ„a™bØV©Îåq´u‚Ó–y:îÒZc„®ë@år¹H-1ñs×'"šçÙ¤z« "vÜ9ù × W¯: ¶ôÌ?W«íÕ‹×"v>§iòq?Ó4ÏçÝ®÷jÊù|$¢ý~8}#©µÚ”Ü¿€»ÓT?Ü?Þ/_¿¹Ÿ«X†þ1ešÞÇ9ÿÍŸ"çÜw]w>ŸÏ瑆aO£‡ÇÌÑÌŸ¼"®õU\CS/­mwÉ<¥ôþý{ÿìWÀÁ“žÓuÙ ÖÒµS…õߎéo=Ü-Û'X~–F~ÚWÿ†ËÇü¦õ{›ëÆx ì»m;üþ…ËÙNJëÝ$3E5 RJ ¤ˆ?~l­fžËdM¶œ“™‰8¥”Õj"D2ooCÄH‹©÷šøÃ¾ö„¶¢ˆþ«}÷×*§Óqž¤ï‡ýþCOˆ@ÄÅuŸ¼¨¿º©lOߣ¾c¾µ™ü°fŠ1j(ç[[DtUÕ¶PV(Å?×VL†¥Gçy!yWº´—q¯r:J)1òá°Ï9»®ïû¥( ©C—r?ä›]ÿr’›Ýþë7÷Çã\¦:ìúÔ¥iªŸùîvn÷ËàŸÝ®÷6Zÿ€šnJè¸J"®×Ûp×ç׿9¹§ô~®9léYÀöįmïÚ\¯M®ÄÍ«#"­r4Qó'ÈOÈÅ“kõñ¡ß³sýýÍÕS¾ãñøøøøâÅ 0³yžý^ÿúú½§«0W×!kµµwïÞµ:ß¾þ§ib¸¾¹†ëo !),t‹Úér>¯áU×dkÒª¨P U¼”ˆlíÑõßë´-UÖuÔƒLÐÄY‡6MSjRÀõM[óN½Îܶr¢g³[T\×a6Ö&ÇÉ_I‹ "ù´Ž9å@´¨[2sñX¡Yb Кûù2^ΩÛÿð“»”bJéí»ÐÉ4íúŽ™ A¦iÊ9§”÷{ÇQÄ|ŸÄMq(Ýp2^‰û[¿ýÓ*°Ìžlo¶9F·p7õë“kÛ-.\^J‰1Ãàíë¦[½Gä‰éIäu*«ð•ªÚoRžÿìß^' pÕó»¬yû>3£H=îSJ9¦ïüDLhÑÅ…þ@ Á I艀+‹ŒÀ@ `ÏCîvý°ßïë¥!Mqªs©KäIDà{‡Yב­Œ”B ¢R«„°œ²®ßÕuXJ­ˆ‰I´‰µ&mæ˜cÈ)Õyjçñ2M§t.»±þâW_üÕtùä/ræ.1sH)í†a:ž1,Œ]yµVv¾úRÞd{ŽÃ0D΀>*01œÎ" Ôr-¦Zg÷©‹×ÿÂ<Ïã¸K¼˜é'NŒQš w7ã8z”(­•Ú$œ1¥Ðõ©ë"VifÊÌ1tw¼S315cd"5³››<ÕfÚžÝÞÔ¢!ž'U³áîÆŽbŠf*¥ÎS×¥”úRÊårŠnnn˜`Ç2Íçñr{sÓVª5d5Q1Q"ŠBŠ‘ƒ˜–i>•“Ç8*r`ŠfbŠDDÌTš‰SpYJCS45i^Iž¦R2ĨÆ8H€D¡µEÀшˆ¬5”҈Рè½dßÃâÿõÿø¿€h½~Dÿ®Tö MM¥õC_ÊüðððîÝÛ2O¯^½Ü ÊÓ€Zçq×¥.òÃý{n—>Éñó7¿ú¯o?ëpìbKІ..)©¡7ÄŠ(LÊhÒˆ€ˆI‰‰0„‰ÊxzõìY›¦ñtbjR_½zöé«;-S›.ÃÐÆË8]BJˆ"cæ”8†”Sê(ð4—Ëù¬ª)00AN Z™MæËt~$¬]D´Rk©Í†Ý͇÷oß?4! ÜïöETѪԪíõë—9w§ã%…92#˜IkµÌ*„Òj œSd"SQi„ඈè!«Š‡o¥”iXTWÀLTš"ŒÓè^ÔãOqNß0 ªz¹\¼ÒÛáo„ÚÚ\&fdBésúÄ„ÄHD@b ! b­¢SCÓ@‘E@6c"ެ†!w»çñ4–0 ͢奎h’s˜Ë¨ªVÛÌh] ŒÀˆÌ‘ˆê\†¡‹/çs-sÎ)§¨"9ÅBßå¾ërŠ„¦`h†*†È9eDž§¹5…œ1†)&D( K‘ ¦é<Ž£ª0320цÄ!f3L!2C)•b§fª !£C€$ ÌbÃ^0 gÀ@f ²ÊùÝÿü~ Á~ËŸà{è[~xƒ.ÁGç¡—yfÆÃÍîÇ?úTjÉ (…3i—#¢ÞßÿçŸý¿oÞ¼ùøñÃëçÃöFrç©™–Ó×7w/»ÝóØÝv7¯:‚¬&M°¢AäȘR$X~©˜©©6AÐDˆ.uŸr×uEk+¦¦M¤Jku…[Q‰‰ ¢€~¹@».:¸´§9‰DMšZ“ÀÆ.¥g%³··œnž]ÆÙjæÈ!Y-&¦†žne &¦Í¤.öOõ›-HóDk+€-ùqkËPcDbUm¨ 1UhUk­M*V ÄÌLm­ {“š§Ç°ð%Åý”ÒÐ†H¦j« ßpc—‘3µMs™ˆ1 P0C5QOç§¹ŠZ›k£©ÅÜSÎ}?@l#Z›gSS 4—Q¦bÄ»ýíáp¸¿¿5bbLq™Uëñ‘ˆUðI%Ì!˜ÎsU­¥8eBC 3¼’Í"o4ö<¢ÕYê¬Úˆ RTl¤c™û¾1¢™613TcäVÕˆ¼ŸÍ€ -˜Ó…·hJÃ@¿e¨ËÈޏüÕLÑ@™@Ϻv]ÿúù³VæD¤dµoß¾ÿðeoc÷ IDATö«7_~y|ü8M—ŒÖ©uœûn¸ÙwS™›4¨ÉdsÀÔ÷Cä>Ì€cÕÙT± „Öˆˆ­P|+s@L!uƒ¥n¨ód6«©^ÉöÂjm†èl´Ÿp~Éu…˜‰ˆ¸µ&Z 0ÆH°•}ß-¢3€0ŠQb51i9@uX«ã¸4Æð¬c»šòvý}Oh­ ’©6Ä%¿Ê93c+‹€¨c0~µ[õÈ˺ÝÐuüœÿunâŸPaÁÛ@càc&޵6% ŽIUAAm••"[®˜ˆÈ‰˜1¥”SÏ1›­Å_9ˆ¸¹–b&µ^&à`ÀãÍÍÍ870É®È`ßã'-Jn´Æü¼ó‡»¥ [Öªª"¶Í1)rH梪µTÇ«Bbjª„M1“«ñ˜™ù±ŒHFì»!Ø:èð{[aÑž€UÉÁý¬IõìÌÔ?´öòö&3Ô2ëxÒ2e$˜¦ò÷³ÞLçãÐ…Ÿüè6Ä;k’e¶ÀÐZ›ÏÇãùøñžã×S¥Oü“ÛçŸîŸ½†”ƒï^C+tåZ)"!" yk¿2¬MjLOz_ª Wc]D‡† ‡x$¼2îýªnHjBôáÞ‰šrzøp´RË|®e2‚cS°sަÕ´‰ÇWdf¸vìn6ék«m˜äv©ßB5ý;Ó4u]ú¾ë’ÔXk5"²õ­Ñ“X?­œ´*üž”:Ms+@E“bbæÇùøx:O#—¦¥Š"äm®Ä ˆLˆ@„F ªZ1ä*áx§R•Š™uZûi`!„˜sßíÆé R Ë=p Nã<û•oâÆ>˜Ã‰VÛv}¯leSðÚgfÞ¨«8&¬x•xO¬©!„RÎ(,jµV"ó°rf$`5k (>Ý|P5[ɯ¸=$óÒ+"~¿¼¦°oÔm-!¨ˆÿÍ(2CS0E“¹–_~öÿøÿM¥þàõ‹.óÃÇ÷RN‰ìîY¾»Ý»š~êBˆ‹å”é¬eŠh&ešæË$¿œæûÛ·ÝÍ3 sì÷»nè”óðüÏ  !‰BmR´`@b"U­&¬Ò\kW•6Š©™Á•Ræ·¬<¼w ÌèÓÓïÇN±È ”ULsîún4ä]ŸrB ‡¾) ²™4F HŒ™3…HŒ¨ßŠáŠ,±•Á6J]¶ê‚Š€ÚæŸU]%̈(ÆBx<½ ë,ƒik-ÄKÌ\J±¦ˆ(f¢•LcŒܱ¥óÃñ|‘„XEEìSŸÀÀ„LÌ‘@ʬª¥ˆQêJU1T3YèÖQhmO)ÙR¸"f4¶sL=2?>>ª‹i85r‹#ìª »=Ó Wó˜ÙÿÕe·‚Ëæ]½p8‰"ЉQ±Jm'‘z:@u×ûä;kÚ8d/Yù$:# ¸2™ÐOЧ¶“ïu…Õµê6zÐÐ4'i¦ @‰ˆÑT¶v~û‰œ¾þl¼ÿ²ÏiÀ››ÔU,jC—,ZiÓ¬Ò°K—s¹Ùß"q`¾»½ÙínZÕÇãE!ÎÅÊùÃWÇã8S û»Û~è&à?*yÿüæpGÑÓ"&0‘†¦¢Z¤5•L Mç©“Ã2íS»†w_,×@Éc-&ÄET‰™c ]îrŽhˆL…˜»A0Lµ~ø˜K3&Pd†Œ‘p‹L˜#ÃW´Õkÿ¹å™ÔùFL)m—¶Ô qè{3ïe-Ú 3S^z\7“—š¶­ì£¥\ú¨µæ±KkM&/ Õ"¹ìá\PÀÈ5©fVÍŒ€½¡µyS 9 4b 1¦.&¤˜ëV]\½¢™Õ¶ˆÑLÓxþø»þöŽ˜yš&çly¬ë¨Žf_SóqmlÜܬ3(<ðn»5^~ÄÌ °ë»iº”V·#²%53,¥š|cª-SdfQ¼”å:~ªj fb&j&âȯi(ü›®`€à£ÝQÑ”@Д ÖË$elu 91hmšÿñoÿã>…úðñy§‡C¸Í²K0g|ûp2ê æÀ]NˆÖ¯õõå<¥.—SŒq?èññãW_½Ýïîn/æFÓ4Á| 2Âãùýýi~ûæÃëý%ÿåw÷ìE¤Ô0Fl­© ‚,-]W&ºñT¶8cc§4‰ˆ+¬]=ÔE€Ç‰Pª&¢9Æ® }×3#§”¤ÕR+L7ÃÐçà4µR$­á(3fd@F ÄŠ ø´“ì›C\ÉÃË ÷® ?ÕVh‡™W »fùøô qZÿ%{Ë«#Æ'îB“¦ÌlŠM[©6Mm*,Ì:]Æyž+˜4d À´~™šÉ˜ˆ¤!ÆÌ9is«Õ`HÑ¡Q•Û:^ ë2ìS˜u®!w9gC¼½½Ukž`óÕÔÙÍ[ú¾\#Q×%?ÂZ­Ý:¥6«ÛÌÕ*†„«˜ã/E¥V+œ)b„!娖yHƌ̘´¶Z…Bg&M­¨.<Äïw¤€)¢AC††Pßüêçótló92 90c§v¹ßý"ÞÞî#öÏÃ00´VŽÚ¦W/ïú¾‘yœJ«]× Cßå!uÝîæ†™C Üçñ‹÷ïg°S© Zi‘m7äÝÐ=žÛøx~8îûÀ?xÞA¦S­ Á$&ŠÍFÂȳ¸-¾ÕEËMˆ8FS­*¢./熽Àˆ zÂÃÝGÅ41s#¬R˜ ưßÅýn׬aÈMjŒ¹”‰À‰0 (˜’#‚ z_i[ž©«’C[5Š›‹H…@D1F3EQõft !äÙ³5éwƒ'«Dä›qLJ|¹L1uÏ_¼Ünw‡·ïÞ(È~øI”ÙÞõñÍP'²‚2GÔ.2°VùøîíŸÿ*w©ËQë8dúá«ç}¦6ÌH)‹)"15b& ÖDÔÁˆHZ›¦ÌrŽ(&³Ö*˜¶ÖÞ¾yóóøûÛÛÃáp«Ês5 aTdd&æÚJ™¦¡Ë‰©M3š”:‹‰S”7ÊŽ­ z~àš©ÆSÎfbô*7#†À*:McdÛíRŠ`Zk5×LÉcÈ/åû²ëº­PäR ¸ÊöÒ&\æuPΗéþþ‘b$Êb¶ÛbLjF1rŒØšaŸ»Ã;â@!öý΀ß?ç"wwwešê󛎡µ2!¡)¤!‚Y“©”R¸Â,Ò3[ߥ‡°qBWâgÀãéì@½•|ì@XÕ$q `f"|8>ÞÞÞv}Wj5& ÄãnÙ¼3@k:׉ !çÔ÷ÃeÇ˹ër±-í[ègÈDÌaéÅþµõ› ì»^ûÏYþná/^§Óéë_~ùõW_œï§ñ||üp~¸ÿÁëç\/e#ÃMÞï¡J 0Žçóå("ŠB!ä!·¦EÚÝÝ]ÎYš™iŒ±K¹VQ5TDãRλ]î‡WcëòðæË·kàDçóùÇrzüÈþÉ_îîNçñÍ/þ¿‡Ç3§á“ýùáö¹aì‡ÝáîÙЧ¾‹Œ$RiE‰¾Ñrqf|ën^ßÞíÿrÎ!p nMžF°ŽãØMešäx<¾ÿXÆJE.—‹Jé2sß÷ ¬ ŒdÂK¬®WËŵ¢ÒJ†…í¼rh·éº.¥c$‚@ÀÌ>qËG${µÃ Ò=3a‰~—>XU5YFE€¸”YiM 32#,ÃÕTÀh•ÝAd0«ªqaäâ»›Ik-Bô™R CϱÃÈ#ÎMÊiº€¶„òâó‚0¡92ü[lòßl…ÓWwÿþËÏÞ™ÙMŽ»ÛnL·w7ÙL5…¸Û÷D4Ï£5 ÃÔÎí&õý>Ìc)m~öâ9Ì㤪¡K‰#!‚V11 ~³8ä~÷åWïC¿ß•VÌlØ híÕaOm|ûËã8ž=ß=Û.cýøå¹œ°Ü<2Eh L¤JÜ 9´0‡«h+ÆfKƒÎõ½FD/nß÷µíDôblŒ±ë†Óé’û±4nUÆ©Œ-1)’! èÓ|*U0å”`­ ɪðdÃA¿µæZä|¥`ëÞʈ¸0Ÿ|d^-x5«f™û4Ï®ŒÁë·ëgì÷ˆôI@ˆ &æH†j¨M@ÔUÑ ÌˆÌ´ÖsÖµÙ…ÉÙë¸J¿æZk7û››¢ ŒÆIç2á*®«.‡§{¾¥ ÌÜV=Q‡µE¤6¦ >äˆëG«‰x±‘UüüêrdfçàÅ\_ÈÕv˜@Û2EÅß­Ö™""™Ã®#ç¼¢ï¹îú_þÓÿmf¨íÅ>ìv»ý~@ıÌRJ‘Š6"·¦ý°7 >_ˆ(p¤¨0×â[JjSm‘1¨*Æ4[ ˆkf @­µaóáÃ/ß݇۾ëRHÝ«WŸhÇãÞîsbΤHmw7¼|õòþá|žÇrÒé±›ÎZ&c6„>­¼˜«5mÒi\ÛÖ¯-ö×oÄårQ 9&‡\¯¬ÖúË_ý*#§Û~8äKÐFŠI‰;ÂiTÑ2–y*“Ö9¦¸€ìë~²+¡ƒmfñf„`*öÍ °¹—Öš*˜*3/zŠˆˆ÷j—R.— ì÷Þþ\‰Vá…¡Þ¥ètE\iÒ¢@…s¸\ Ù#wQ% $ bj¢ ð«¥L£ª‚ŠHÕÖTæZkyÀU–5¥”ÃÑ‚aU›K|(.¯uõ5Çö'è ¬ž/àÚkq}œÑªÕkÖº…‹‚™Ù\Ûé2ãØwI´šÈ“ͦ]“b1oùáº_ýï¶Yµ­\ýƒCà²Ú$ȼ4[u]w8æ¹<>\úÃ>¤>e=•:ÕV­ÎÓ¹ÎcÀÒD€)æ”s$¢""öífwÿë5,mè>n»~Dd& ÁCA¿433[Ìu7ØZ2qÃàUQa /77è×à'?‘À9µªœRÈ\TI±V1¢`®8³U}L´Y©©X« â„§íúmâZk/sÊaȉѬ4‘E{]×Þ—íDÛ*ç+ÏÙüòJ•'ùN«¼Và_kÛTU1% ›j­ÝK ÍÄT ŸXP‹éµÖÀÄV9[ŠaÝŽ6A2DsÑ¿ïsbd¸9ìR 4Žç:JL©ëºàmÜ€ h@9äÂ<žýöªHÓFD]ŽÞÝÂ1€ˆ¡ÕÚɔР´‰#Íeœ'9ÜL»}ÇùåË—»ÃŽ™‰Â§?þóãTާÏow/_>Ûïòx<Öñ(jC´.§æÓå”ÌnYWï$MÍ6ÍÉÕÍ.%5³µ­q3¤_/‡˜ºá<ÍOösµc-¢Ae2P )g Q©³"ùIWÍâ^*Ü\ë– ˜g•ÛµZè¯efDS}’äôŸEDEcf®¾}„í}òSb+æ¿Õ™ýeº~"ø¦ê’ÿ5¦4ÍÕm¾ë:4Õ£jDbŒÑ (˜!Æ繊/]ÊXJ ¤k î§LÛŽwUý^Ë®(&#1E 9öÃà14˜çy¡×!“*X«,ZJÑ&ÄÄÌ€€j0²¦*úÿ÷n=’,É™˜ÝÜ#"/UݧÏeΙ!‡ËiW+@HzÖ  a±zDRäì3œÓÝuÉ̸¸»™éÁ"¢²Ï»Zh%Ð…îªì¬7·Ûgß§ŽØÔZefA(ÖZYÊ8#hñZ“›VÕü–pnæ*"-xF¾ÄîÂÖÎ!Âèýl^ñK¾LÛ¸E~ñ‹?ýÍo?/K%tu˜æ¢(œ 莤n Z¼´ÖúḎzoÔ{ûôì.¡wÜ%"BÌ´5fï÷®ð_K¾[åßÃဈ×ë5¦ç‚ÅocìÇ–WÕ¦ˆMUÍÔÁˆ(eÖKEf‚jˆ1;bÈb#D67Ue4`f°&„ÝЇ$'a¡ÆH¶‘ZæœO§ÄÔëqÈ9x)]ÙˆãÊaƒF€ÿ‘7‘¡û6L8IUcù"|Ði}†÷DÙኇ.‰P)¥•Òu)üé–3ÇV GÎ9×ÌÂÌãXÊÒ@¶ ´uÑ\ã¿{l”ÿÿ^+µ9õ}³†Ë²LÓ퇟ý¼”YÕÜwÖŒZêòþáQk©Z3ç”ØÝÔ £¤^k-­Eꯪ¥4DfF”>çãñøøxîûþÇßz÷î+LãmY¸ÏK-—iΩ»^®¿þÍÓWùûïÈ—[ñùêZ]ߥdˆ·yZ¦ Ô(8™‚{àÀ ˜Èàäh•“0×Xh¯àŠ&Á뎆îŽ2dÂ` ]ˆÀ‰’À?üðùe¬cKB]’”±óžSBroTkYæZk#·^„‰Àý­\©ã¼aÖîjNÀ´£azn®ÖZc’Ø3q>†ÃL,‹/èR &@N2t}ÈÖ4S­ÍÜÁЙy)Ó4E6«e^Rî:IfF{Ü@Ћ­[Ú4¦@……ˆÝœ9u]7F")¡4 ,KakU„³ªuî†þ|>·ºx]0%6¤¥è2ÏÑ+†­€¿gò»×õ­vUJ)e6#b6kªÕlmÛ¨jJ»Fz±»hwl›þúÐ%3¨¥Öy‘Zšc¡º·æ@ ŽC§­äœSê¦R[­ä 0¡UBWT#'ò‹è'"§°sLü£ßÿOûz—³áö2€P›rë$5u–ôp~¬m)óÒe¹Ü^«báDÄXUÕ ¾¼0A Z€@–¦”L-Ð³àž˜ûœ™’ðašæeªYo†]οþõ¯¯³¾ªù5ɧ˅8UÏ„½»~ÿ³ïÝý¯~óñáÐ3&gv쉱Kr|xt9\þîãmnùp^t¡Ü©#7‡yž9wªí|<º+Ú:î`f   ¢#9#QŸ2öæªu.óüÝ×® ´æt03$K1+þË~óO¯KMÒÜp0ÇVT ºÜIêcœ3ÆG Þ¨ÃW•n ø‹smY–yžƒÇh Ä®UË"á–ÛR´f<‡@Õj+C—àòò\Kiª„¦]–¥”¥V@Ì)!Q«µ,S×u9'†LD­aq³ñz;F4UrR-M‡ÜyqdA¦TŠ×yÑÆ–%ˆ–ë¥?Õ,ub¯¨ÌÀšê\ ¬|Q¨µIî¦Û¨e: =²¸ûñxüîáár¹DH[DE&ØÄõÚ¦µu<‡ÃAU_¯󯂵.­qôZ(¥Ž‘Âòͬ5·‡ÇÇRÊååõùùµKùx:€Ó8©dÉ¥´”ÍëéðÈŒc¹¾ÿð*Þn·nÈÒ§Z€¼.µcMÍ”'O‹zëhCìÞE Tb9+ï4Rÿ#_9Ô",ä.‘l'o@A@s·æÊ¦•Sfw‚µ—í à†à„^:ïì]„È­™­ð>&DI"Hâ†)%k]0W½¾¾~úôãÇO×¾fúaîp:MÕ,m©ÇáÐ8Íe¹Ü–iZÝ÷_Þ?¼ÓÛK3E« ²@6oˆ¤f¥µZ½–’˜2:X;Ý¢—ãæn®è¾™ÁõíLCp‚Ðn7Åà`°¦µ–I+š7$ y†øxÕuHÚW3S”¹v?Ü¡…÷ïìߌ-»±O¨Z³¥ªÕ,2œN§n¨mY¦Ñ6ñ¥¦í>&¤-× Fÿ/RßõÈx«fº;yÌ9¡+h À£‡–­64UfVWÕXƒ•ú9%„¦­¡¹7·¢MZu ìÏÛo‰XSk"‰KU[{}UUsÝÃõjKõ­ê¶/‘»w}´̦ZAp43ê ã~ü.‡àÀ{‘œHÈÜêf-þyž½@­ÕÐÍÑ@:éM`!SmÕQ„2uLP€ðÿÍWøOøŠ¾N³Zt€ ÀC¾ À˜vÅ+Ý=±ÔŠˆN¨àt?ªN ÌëL‘¹# ±1’¹Åw H d¦, ¹£tÃqøðí‰)³ô]êÏêèœÖÊ9?t]gàãx§‘½ú‡óñxR°”V§R"^ =UŒÌ°ÖU¬-ÉZzSØ6’ƒ«£šÊF—±oˆ-QDD¼WØ…=Í´ÖÚí­¿{·yÏÇSºîˆÍ†W!ð½r [Ã&²Ù½?±WTSŠ˜дʎ 0›VÙÊþìöÚscÕ¶ßæjNëM­¤f–¥”êª=“´ik-îž™CCÁý§Ü÷ ˆ¦°D†Á”%&—‘ÔpçUº/ în=Õ}‘ã²÷‚°)äL„²cBÖ¯wæzm+Ä?˜Ö73Žã)Âoµª®Ó4Ùâî‚MSJD½"T§æº×Ø™ùŸUsÃ"e ìè÷•¶òtÊ.Ræ†w,‡°,Á*©Söì,F@LH©ëbÒ$PàXÚš÷&@ÕE­š¥œóÃû‡ÑwS­¯—›™Ùõv犄̼,K—r@öL+2×Ú®·é›Ç¿\n˲Œ‹ÕZ 6;÷¸Z'Ú-ÎÌ\ßÌÔÀ܈h¯9ÄãÝoðmÕîz¡9çEwkÄݪ·J’FI–¶|•ˆæ·×“ðKôÂþ9ñÍ ï?œˆ8€²—vQ«®í¾÷¸ÕKÞl;>·ß®÷×}ï§ÜÕÀv«N)¹/ª*¹ó-« SŠä~YB5oûÆ]%ðêÛ€ ¬=g€PZp«hÊÌ”²WÕÇÇGßžÚ~°ñW¿]äö ®×ë~¶RPÃñšÁ¾=)|³×¸)ÜØêcTõ'xغ¾ÀÐZC¡ÄjëÈÎ0  (8sWk­º™ý3·qb¨ÞàX‡íï‚ Ô$"`ÍT½´¶žÓL æ€ ˆ€F“'a*¶’ȲŽðnç·›™Vp%€jµÔ…YÚ2-³?¾Wª±î]õ®ƒæšhn"r8Cך}þü|H„­5ÈýÊ æosνkÝïvê6Þ¾×ã÷MO_ú[Øî¢ëºE=¥$Tß<! ´µJIFîJ8éÞ9ìvxÿX6k÷Ü w®~¿"2G¿»Î@;ïU«(ŸîΟë25rA躮†®?JÎOOOo·¾å áã²÷1Ü) Uf6…Z«3íx]UØÎDXçþ™Y„ö§»žÍ¥5Cwv­wÌq0ˆº–Rüø´,ÓùüÈý©Xn­v‰…xÍTU56 S<»7WD ®¢Ý\ß,ö? —RTm߸Ѥ…ÍKD䩪4ƒÆ IDATКÕÂŒHB²îu»“„½÷xWSù§Ný½¤Û ûŽ¿Û{a´°5B~‚4ðMÛ÷ùü»ÏJ~Îyioá@Ji¼-~Çö¾¯Ì©ìoÞ? ¶`~‹|_ºZLRk­×km>)%‡ÕìAlš´1¸—˜ùx<ÎËÿ4³R fÙõǶUÝÿ¶¶Ù÷Ûéè¨ÆïnÆ6\”MË‚Ì`¨ÍIUDRP¨mi¥™ h5kHÀäHøO8õ?æ+¸þx+l¨K´un#v@Õ&("Ò"¬'tü"8|º`¸ ûû–Ä>.ËâÄUázoÓ¨&jVJ3êÆ©È8Í/¯ciÞå# »s©ãÐw’»lNTÕçRJƒe©Ì£¼ÞF-Ó4c߉Rõš¢þ†eúòÏZDزîÃÎýŽüË=/Kó/tGÝa:‚ï¶ä­a­)11"¯1Ý¡svº_:¿S¾Úëº$Nè>Ž£-µÔYkÙwBO,6®m,á»;l ï·]—ïÝ~_"Ò@åN³w)ðÈ[wS€Rа#©»G•!’CûÓù¶[ú¾_¦››DL^t½žãñ¨Vc>.üsœw§Ói¿}‰ˆˆ}žwt„oÃ0,íÓOÌu Ì‚Âq›¾ûÑæ½“ø<#¢¹—R°Iˆ¸7B*èàê­ZÓEåŸb=¾8®¼K €Ë´Ì€ÐLSàÚÊÖøZ³yB‘5 2樎::”ytw׈,$"Ët{~~îO?~z²>|L//ÏÓ¸Üêk×o×q^TxÈ]v#pê„Yˆ®ÓòüúªVç©KÔê4=ŸÏ]zõz™Í-=@};wïɈÌÁ1Lµ¹»¯Ä7ÇûO½†aðU £*‹»››zëû¾W-{ïADRbúáIØ~92¶§µ°åÿfÞ!‰ˆ(37Í­,1æÚuÞ ‹ÆC‰'ñ>‹ú²Û#ÀX XlµÅä]’S:NÈÎŽŽèN«6p³>‰[©mÌ9/úV¯êº~ÑŸÜåÜ÷½;•Rˆ˜( ¯@Kéz¤D"ó<;xDmÕDVU:óžçÇZkÄoÎ?P™""q@¬)(¥ˆSöÛßÏ”Èuãóò˜ãYHffÞTçœÁˆ¹Kªª€,Ôw¹&.+àáÃâeÛ÷ ! !9":ap»rk ¤Ëƒ»®šöèŽRœ‰$€’›7@fv%uGväÚU·¦®ª×qFÄeY^^^B„—™‘Òx°ˆ4×¹”Òìxê»ã£”2×RZY¦ZkŸz²Z­Kæ”Riõ6ßÞ»ß~ó…8ç¯>|×M:Ù§vk‚ÔÜV\.n¡x­B™ÁÝÝZk€ŒÂI’ƒ8šî³/àýYšYÎÝ´ªZï{©ÕÍ->: oó»ÝZkýñ[x_"ªÚKz«+CØ0 RüWÖXïút”¡¥áJÙ#0¹“ý‘XüÝê!€€[SXÛ¯àä°jP€D Î͉0F? »®ïûž„I$‘$‚ªÎUKYQÔ~'Cþ¿ÿ|>ŸÇcwzw™¦©8K…÷_Sü\´uý*æµÙ¸ÌÀT­`3+­5µÙlhµ¶¥P߉Hßæ~”ÜKî~õçr}þ M™¥Žó²,µ-D€æQ;33CÛÄÝ€`ëô8ß1bšEùÇ}Äó»_P»{…¯únS5d!f†”rÎ]סÔLt|s\~WÚÙ?–îp°ãö®=‚µÖÎÇ#"Ü^$u///{$ì›åÄþŽ϶±Ò(´†VU\ØúÛïÇ×iZ–q‘©,ʉ™Ñ0,Å™‰Ú2'”aY–]·0ò½½ôZJ)óŒ(¾ÿ]¹5«µîM¾ý i¹>mŒ|ÇŠHD¼,ëÚªF[køï3Ž={'¢èÛÅq°fvolqUf††î­³ZÇBBÅÛ<Ï‹/Ô¹ƒ^ÆËñøþÿ“™n¯ýö÷¯ëjLQBaafD¿^¯ð¦D›kOºî®Â¯VmÓRdYÊív‹%‹=!"Ÿ_¯·¥ö×§iÇ‘ˆº¼¼÷MUŸæÂyF楖¥ÕâúáÃëº$ï„a¾„¦­Ö¶˜läcÃptÇçççË»“pG–îuÑ| ÚPÖ½¹!¾Æ-94‚bÔš6ÛØ ¬TOoF¸ó®qï}ßw•¾k­†Ò–E<¦ÌkE­èMµŽ«[ßÌž²þäÁÀæ#’Œ„ ÉÑWxpð4†ùíhxâ7éÝDÚö–nÉ0l'1ۇئÕÖ^‘㊗Ê]×êJá o 0„è{m­ÌóÌÅ!’rFĘ‘&¢ZçR ‘#ó0 `ÍÔÉioêÆÛDh_U"šç¹Ö¡œn/ßg%ñÝzÍšYÂÂ#ô}΀¾E7«Zg`ÜcÁ`;õ|ý¡»º5rl­µÚn tì=eFæÞú?Š­îOÿ''ðÇAК»£WPõ¢j õr]ß5v€š!b…êñ8OÓ4©[,å8·Ç¯Vª—âq—V›¾ÿöç˲Œµxsq€SþøôTÛRkýüù³6·ªez™8QŸóùt:ô‡®Ãrì„ñ8JB™M—eáÔ¾^Ç¿üË¿~wì>¼×§½2ÑÌ ,(õÑÔˆ6ˆŸˆkk­:óZ QÆ7ûÙŒ\~*uïYƱzàcšmíÁ¾;LsM‚ª%¬µ–Z—”{Ç5î½ÿ4ÛDh÷ƒ`ÇÂ!V˜0úC‡®ÇRçͽ‹»Ct­`ƒ%ìÌý÷=^úƒn5-CÄ”„ÕŒ™C*7àž­CKñ!¥&fvÓÝ7m§åÝ/^©ÌÄRJuYÝæn®Çã‘™k[^__k­Ñ‰ˆW­u†ø‹m3«Õp§ž0 ‚7ß4‡ÖŒ·”.î+ð±æ±8²)n›G/2Þƒø÷ |3—åùõÕÀ»Ã€Ló<†Ø0ô‰Ì­6Dt€¯¿ý–ÓK{~ž¦©:C/H^ž®ómþÄü:U]–Ú ªV`f¾=.›¡æ µš"²`0ƒ¬ÒWØ:‚¡»ƒ!¤ûÅ$Gws¼^¯Fb&îN"yüððþØLË-NÇÃáÕ“K)¤ª´ÕàËvîþ``t ºàh!Š:¬íñZ+Ñ!1áä{‡Éï²å0­Aƒyç>&܇ JYáø:ˆ»²aJ ’Ì©ò¼„6Xˆþ)hè9!ºX³¹6¤JŒ([J­•ÊIªÖZÕÌsŸ»Äˆ\UÃTÜZ”mµÎ]—s./ååùr»ÝêWv8YR§¹ë kLD(LsYXÒ ì”ÜÍCs•ÝmY¦”RJ])Å)ŠìŽÍ´j+µít<àæÀ†È£o蜉_AÕA€Eëòïÿýÿþþýeøê«_ýçÿê݇œÁA a+y8lZDû6Š.ú&•£5€ž(‰ššš®³¬ËÓåÄ+¹!èÈŒ6ô›<½¼RLWšrÊ]î}œ§Ëâã “&ìßwÃ@)k©D¥Ôu7€6~Súüé¹ëºœúÖÚõ6^¯×ãñø§úóÖZ׺ãIú!"ùÐRê‚é˜ûþûøõ6õÇãüãïŸ>¿üüO×:ÞÚ·ú‹§OŸŒÈ µ”v«ª3%ÉR‹Öâ]7H†2ßZ+È¢œšbM‰@)`)Å«æþ@ kÓˆ @±.µ.Ö—#"ê^j­Usî›Ó8·Ö, ù|z,6gµ2Ï“¯"«>ä–Ö÷$!y#þÓ;"ÄÕmÒ6‰sa_ýu-ír¹u)q+s˜b­K@=?Tmžçaö’Á#įØèv®íhÖy9<$D¯µ‰¹À»‡÷/·[™Çîð`In/×$|~8Nã"’ÉÜ)‡ &ä^¹ï{|º I³ cßRêÌj+ srDD†œÑÔ¬9¡j&"DÇùz[œ®Òk­qQh€’»Ž0儨nÆ"ÔhçRÚ––‡”¦Y­åõõJ+¯2—2·ÖR2g7ì‡ãÕêeO‰¥´Y˜ƒ® ˜½¹¶¥&ff«ÕsöÔ™ðRšU¬Gº=ÿÝ¿¯_×ùå¿ú¯ÿûÃùkNÃd®æŠ± 3¢«¡Â^¹’u¹´êÖPk&w«Ðª¶ÅZÑZ¼)xe+Œ3ä@ŒÛ ‚€0£ãª{;Ïóå6΋Žs–䜀D¡sç†ZŽ¢pî¶AÜPÕ¯×QUsÎÃpĵ»¸™"bß÷)¥(H†6‰ˆˆ¤ØÄ€!áf‡Ó V‰¨¶úùã§Y~½Ž§wÜH‘ç¹ú+,Ñ·>0ÚV°æä׿¦ddPùÀ¯>‘œÀ)ps×HÀ™“¤u>.R)[–q/—É©¨CYnP–ƒ@­5 ºl÷}º¢°õÇï³,A‘%¨n 9qgÞ¢`r>ªªjµV–/Äcl«ÏŸÏçè[„FsX¬çã‘yÝÊ" Z[³—×§Uy-’s_õNÝ]„ÍÌ¢>¤#£_5Ãóq1˜ëd’;n-¢-ɌҚ[ep$Ê,®oGwT·¿ù›_ÿøé9"¯ÿö¿ûoš:3*¸j5t2UU °~Ľ潶ÅA9ªñ‚HŽàˆH€nàîÍÍ€HК¯Ï‚Ì›é:ê@è]×™µî$ 1’¦>Z5€”r—»wÇñ˜tž_¯Ÿó¿ý_þç?ÿ‹ùgñ_0÷?^F”!wý4MdDh‚"ÚРe¼€+”Ö´Y›µ,Ð jY¬²7%S„&fæî‚ÐB’bkï€ëJ'A}(’2±V-ã4-ÕÕœD$hG#¶ŠŒfÍÁàuøþýûÏŸ?_.—¾ïÏç3­rº’¥›çÙ7â\Û(ça£ŸÝ£;wG¤œóRt†®K×ë5Ä‹žŸŸsî @°·"R’·Ò‚í°–p+º¬ùa[­¸a†×\wÃîí o„À{â(¢ëõªÀÈÒêL­ªf3‹±pIÈAs÷±ûц°»¯1ìU_f¶¶DÈl%¶I±¨ ©*m!ñÞ_µm£Ü±tœ§‡c¸tÛ‰ͦiê†õ~£Må°OM²h¢ô:ÿƒˆ‚ìÍ´ÔjàÄ YÜÖwo®û‘d­ºÕPggmˆó<ßn·ãñ(]~zz©µ”R>þ¾®„¸2ÎîªV$,]×EE*¢bÜ*Òiûd¿+°ù0FÄ(Y¯› )âÒ([ÄÓéRZ–¥ª2‚ˆdu¯ª»l$ C×uiœu¯ÏO7p:=<¾ÿîçG…9#q²NœÜÐ+šº®ê•êM—+jQ­­«Í´ºtí…Ô¼¡««¡¯‡æpxدmO6÷ ¢€5$"Ê)'3{µFnœr+ ‰3‡ÅuX9¼ëO‹œaQlÈ9‡Fð<ÏçLJ€¿ÊÄ̆a8˲ì‹ËÛäÑ ï~||¬µ¾<_ äɤ–ó[p?ÅßÌõÒ•rF7v7BÚ/Òþ±ê9lŶÝ8£»~×£Gïzªq~FL›RÊY„]ª½¥©÷¹ë}<ì÷] æRж¨sJ’ÈÍJütõD9稙í©Ñþ[â¹ÜO~¯™€ßn·7K+F.‡–ÀÌ€ØÌÔ-„Ï×ЃAÕAÕ[Ó˜ªCDS ´ÖTÕåÍá»;˜ávqUÍý6ÞýÝ»‡”{U Ée™‰ÀA‰@@\ˆ³ ·¦Â͘Ýmà'l=- fvx0 ÔÈÜ ï°â¸UŒïãíÃ)Z«µÁÞýF'~wî?ýþïÿÝ¿ù_ÿå¿¶ï~ø“¹¶6?uæiD-Ðjkµ¶¥µ¦ÍÝŠÐLÖÌš›{Z¨gFgG ì>¸“[dÕ¶¹#ñ‰¥ìÚJ$IGk­Ö†€fŽ»p´ #Á¶—¿Ü§Óéx<†Úõz}~~¾^¯þŸýê|>÷}?MÓ<ϱÄv7S_Š&´Rà0œ¾þ@9õˆøððn†”:" ÒzB^º¢ÍvÍÍÝŠÂ;…¹®ƒèfÖ–Åi—ºø²ö´SE ¶µ[yåù àaîZÿ²ßˆ»«F±ñ‹½mýÞûîŸ6MS«Žˆ)§®Ëämš&f ¢Ç€®ëºÌ"Rê¼U›M†1ÄJBc{åœS’—OŸ‡¡;Ÿ"[“™H݉¨ª•RÜߺ—­5 Êrc^—‰Ä@‹¶ÒL È@ñ ‘Õµ‡ÿdÄ$)Éêýš¶¢:MÓét2 Ôå~øÙÒê8]¿zÿ8ô=džC·”R—¥¨ñ}¹ßƉù€[9`=ô ‰Èvnñ YŒ÷zì·„bl€{« ªr7¤”]kìh%6×ê‚C/·ëò›¿ý«¾K_=ž2óôúÜìpýýïÀ»˜#0:"4ª#z¥ ¥ûŸˆ–å†$H”e  `\Jîâ Ë8]>}8BYBnS!fÑÙnób€(LDÈ÷{+¼¡ƒ›íƒ ´!EâÆ‚ qw˜±¸?~DÄÇÇGfŽJ}¬QxW8ÝÂ$$ ºz9Ï}ß«úýCòœd(¥9³Ð¯f–”Vf†àÚ¬ªzJ‰×èqk‰ïw,+ê –`?SUCÔÕ¶øÓ÷OkÑw-Ÿ6ð`¿Î=ºÞ7ÜOÌUUh<à¶õ÷•‰ó4Š"Áç`w\ ûÇÆ;÷QXºËŸ£7(\R7äÌÌ¥i­Yh?vœ|ÕqÀí@C"”:míN¯Ñ÷ج5€=õ ”X˜¹m¶Æ_§ÓéõzÕÚNÇ¡kéÐõéÛ¯OCèªÀÍ„Í .˜·À¾TÄÙ/` %`ÑöÎM¼˜=Èq fûÛ·ŠÐ¦b¢$:ÏsIŒÎÒK~­åuZÎçÇÖÚßýí_ýÕÃ?ü`ÓøôúPfA#pFg&@vdF%l?Á”ÜÑX=hß!üî*s¿»8‰Â¯F c…T–:/µgIì@äMÌÍ Ã_ÅH»;°­Yýµï<ÏDVJ€ãñøðøþp<真_>þüyY–ãñšö»aì9¡o SwGt¢ÔÉátSXJ‹qhD´ÔVšV5³–$Ã{¸ëþUm!ñB¦Þ8¥ÔæJD«EØj³¶Á0q³ü¨ë¶Ö†ahNKkDÅî|øºKÞ˜ˆfh1K»ˆÞÅ(ï^‘î^)¥$}`qUU˜¹ÖÙÌî1ª÷vî[z?"¢Ý©îÚ¨<œ`W‘twD(¥ô‡Ð°kª*,ûÉ Ln1È`@Á[K@3ðª­jSsuÄ/'+Tu¾ö¬R[SGbéD›¯µçát¾ÿÙ·œhèó²Le^ÌÌ´¹{)íz½"1I½÷±mîM{2w¢ÅâË–ðï0߬ýx<€9Z17fv k­¸ƒ¹ˆ˜"%$F5m¥ÀÃãáòzûëÿëÿèÙß=ž§éõ¡Oè•ÜÀÕ’9£Ý ²9¸‚ g¡ Ü]Á¬ÏÙ›9 ¹ë$‰ˆ·%Ýé]l—¢K3dr£Ö0‡N£ÑúûÈc¾üK¸c,ßã㣻¿¾¾4ºö—Ë¥ëºëõz½^¿ùæ›p˜x ßâ+)q13†A„sΑâ>]^ZkïvNÛà¿{² ÷æ·ÿ AÀ…I›!7à~†çéæ_¾ÂþˆßèWöè."üjX­t]k²6h׸ÃG8h û:Á³í‡ý¾€{Àv:žEäòr­µr"f®u,} %š™Yîd·ÕÝi»ûñxŒÐ=ìvÛ—Âó<ŽãÑ23¬Å˜ý¬¼?Ô‰Üj]Zkf!Eþ,)p&kq{OãL‰ÿ»ŸD{±-Þд9rÊœû>¥´×·ÔjÎr: $˜O“…îmk«dÆóËëÃû=Ûß܃;jÀÊÎqãPJIwæ€lq"pÕ&r ¿j~>ž–e©s‰ÃÎJ³ZëqRJE«jk@ªê By8ŸK™ç‡áн<}z~úôÃ7ïiH  ZEwp% '`_Zð«dfvÞýÖªÈDA Bˆ誺zìú½­µÙåý¯þb*í6-s3n€Ñ7s a愈¡k¤¦à’OÝ0O§ãù|8‡ÃáñÝ;Ii8ßøp8Ôìéååw¿ÿ‡$ó²,ß}÷Ýž EåcY–OŸ>ýö·¿ýøñcœ—¹š ¦œ¨©!QÊYRê‡Á —R ¶6N‹-½·÷§îëwÇ>‘[]–åùõ‰ÜL§q¼¼^º¾—Ô?== áÚ@"’Ü¥$¨­ z—%T©$±#ŽãçÎëõÖ‹âË­|~¹ýþ㳤®¶Öꂦ§!ÿ‹_|Ÿ¬.æZkƒÍ†ßj0wE¬½F’ÒªäR*¥].m&ÂL`Dž³ô9!Â<-Ó4ÕÒZk’xHðë‹ÌÝcŽ–x<Ðý|>…jAXl)µë{¼Ž£9ªAmm.ušdq#õ9$&YëLîL³0!0±V­Å±ª}êȾyw~<L+³ÔÖú¾¦yË2çœxYj3ûôéã»wï¾úê}øym Ý%ñ;Iâ­]o×××Ë<Ï]×}ûíϾÿþûÓùŒˆã8ƤW€´÷#/–b%åÔ!ÒmÇej­V­Á|ߥäf®Á°cUÕ݉x©¥O‰™–yZæYRŠÄx½æ”Z)æà(/·é·¿âÔ×Ò8w­š#æ._/­óŸÿÙ/ÇËËÃéàÞjYúÃÀ’j«Ä2œÎ$9&úEK$bIª¶3K‰¸›Ö>§RæÛõ2O£icB"$Â.'f’±hm^0"‰óŽ"öµçÁÌ9 %^ 5åK2Î`ßÛƒmGæ§Ï/€kZ;Ïs¨žmSŪ9Àý¤¢m¯=€ÙýüÁk†ngxÚ”š¶eY„]|ë!…×µë°!¢mŽâ_{þPuÅß›OÌ .¬o©T„;9'N²²ªêÊ´Zpc*•Myuر›ç ÍÄÌJJo™B¬¿pfæÐÚ(ì.ÎÁÝãáVSàíÁë*£vñhrÎȹš«ó\ ˆà¼4EºÞŠ¡7G%'˜n—Ú¡ä!w)"ù:Z°!4E2§…îœ3çÔy©z§©”hÄ]ŸÇ”×)¢$¤J"rÌâîµèǧctk¢ã`fÑ_ØÃ“ýÙ­IJk€_ôº÷#l¯ ¿½ßLîºn[¤½–ÝAƒºxs㬊Ò9¯„£ IDATž(9иŒ/—ëǧÏÇÃiœ¯àÖ UU·”R3h¦ ˆL†XL¡ÕxR)%óè±9Ts5ÓÚ—ÞsƒÄ5‹YsWw5kîèÍ,¶B$™DÄIâHË9 §UŽw›ùŠø±5@fá2&I¹†¡;ŸKã·Û-ì*ëÂí„éÆïв–#¨ƒ:¨¹"E˜;yhF!2`Pœ½Ù¹oóʪ a5×ø´NÌ ÌQ|ªÙ»Oü%¸ö«¥Ö1íæ*"àLn{¾í·»†òþ#¿«NÇ¡†ÌhÛݽ­2sN™™Çqì6a(ftû»wï¢sæw¬{~±?ï­þÌì_ŽõÕ³:¶R!ÈZƒ‡ áôprTmÚ§tè;5Z.:•ÂkÞ»î1â'z«®¶"‚œd.“Öff]º¼Á,sYж&"ó2×—Ëõv»ýéŸýr_¥=$¾_äû‡efD ¢ ¼?Jf†; gܪ ˆf‰‘€cPÚs^÷ !QA" ƒİw©þùåúë¿ûÝù¿º\^†Ì©ëo·›õýPËR­s¨»5-­ÔZ3;`L;0"TSLl]*"ö9í[Å݉0:ÆRWE9åv†Bìª5äºsîûÃ.1§.zn÷Oz/–®ÙÛf Ã0¸?&ÄŸÆP^¢Mq¨ëºX÷½Œ¹–òÈu]úÝÁþ¡wÝŸY)…¨­'ËÖÀ¦ÒjÈ,¸*°m£^«:çÕ4 ÓiùÉ/ò£hY–jÖ,¼-â~~o×If†­ÖÚŽ MDÂP€·!¯¨û­õÔRtÕÅ̘ˆ€qo0ŽÓ-öbøÕ§§'wÿðáƒmj”ñÎm ÀR΂ˆÑp÷e©DäøF1¡ªÍ¼”Ò ú.2BBt$tq€$`èÜe95¼¤™á­r`ã1bmëÄŒ™®Zúžœ°´:M“«e!צ†` ¬54ÍLÂÉÁK^JȽFZ±Îšoå4½ãšÛݬ™ C瀔Ö¥ª1왉שÑ7Gºr9nõª8Ȉ‘ݺ!FéµVlÅÍÅÍÌ€8É¢ö÷¿ûñ—¿ø9H2‚EÉV!)¬Ü¯U­ 0º‡l,!Y@Q’,S~Ã~ìiÔê]¹^ÜWu-5@ Eda1ð”òñxì¡#ù¦˜àwõøÇf‚û¾gF]–½&ifËE8Üul,wO)¥®[–jàà«¶ÂGãʃ–8ÐÞ€ØZU~믬f„“€©•ÅM·;‡ýÙx(Ö™©!ýö…wu÷•ÅîT§¶7¨êª|¬ªêd†ˆ÷»{³Äkw)ØKókí DÄ5JD[_KSÉìfF@Xk½^¯¥”ãñ »×]bs›i»Ë]·£#'J)ÍêëT]˜¢Û4ŽˆH`¼˜ØÅn¯7`#¬)#X'rC€eY­2´7æZ5÷ZkÊ9g¦aªú¼¬¹O­•rÎæ­ÎŠxɜȀ›yêt8œ¾ûÖLŸö†»Ä­¼{Ôý§¦ÛzÞÄf«µs4“"`cfFWt]ÍDŽÎ°Ž%Fu-ðo­xš«¥N@¨¶fHýp$°çëå·¿ÿô³oÞ1Á8]²°¤À¡À˜˜›"xfÔjÌHè¦-v ¤”„—»ÝewënùŸþÇÿaiuš¦ç—×OO——Ëõ:ϵéW_5ÍÕˆ‡>÷}mªúE(ò“¯{)5~Yø1f,f‡Ã!|ÈããããããÓÓÓ8ŽÑƒ½¿²ø/¥4"ò;¾µÝJÒ‹ˆ¾æiëÑè¶’$xê2¶Vƒ¹?ʨQk‰Þ#;¸a­‹—€¶¾ÙáOÂT - Û†—Øî×ï‚‹ØN’låܽ,›öªõ†gŒFÑ~Žñ…ª©Ö=¸`¦õûÍTµëS¨ŒGþóððp»ÝbºØlÄÀ–Fºóáp0kãXâbrÎ!r:ÎuY–in˲4ó AðJqÕ‘!'tD8J ΰk3%·ûx»æ· —†aÈBµ GµWÝ=ZtØZá¾Ïîja9­©'pB·”R?œSâq¾›\èµÆó ðÝiÄßMmY–¦–‡¶ÄÕZSUØÌ7VO ´¹™ÂÚYdØ(© ÔÌS(>º~l²J Ê`ØURƒßüîwïOùЙ¯É¢»S ù˜š¹gBN]Ô/F‰b8Š#B'”é0}!h€w“˜òÝC<½kö}mP 8ÿåÿýëÏ—ÛRSJÁàLâÖÐß²ü2ÑÚý®ø[xzz ¥fÇñõõõãÇã8þêW¿ò­7¨ºkR®/„·ïóÉû“"^÷¾ÝÝÜÀ³ðþ5Sõ”ÒB0Ú‡NkEPúÒ»Þ{Q"‚àé×íÌs¿Ç-3°ÈiÕž»îm9SøUÛHââã|C2í¯ÕW€@ôÉ`›ö†aš¦ÈQ÷ó%þWÌ©¤”¢i²,‹¬ÊQ¬nã\Çqç6Ï3²¤ÜE‘ùÛ÷0€EìdHdbì'ÖêÅгˆªv"ç“°SbêpÞ³qfæ®ëc«smÍA (¥4œŽ·i,¥€³"Ä03mÕÝÉÈÜ·jÃ¥ì«ÊQN˜¢o`é-hZI9’ç}¯/Ë2ŽãÃáÀJNî›æ!8¹›!€é¦ŸRkEá5i9ÒWÞA]–ev¤Ô `)°äôùùùãçOÇþg‡ÃÁt©­¡j# Ø0LÄœ„‰Ñ‘€Ñ‘H 23DBv£åî¼NóƒÅ0žèò¸;&âääI€åß ,ðùRU]Õ£Ò²´âî»(ÜÃÛ²ú냛=½>i]†¡‹…s×”øt:u]ü‰{Ÿ ©Íš2#¢ƽµ`îêhèdÀaoڬ—4 ÷X„€bUÍ HNQYafW„JÆÑ‡CÛ{’``Q’ˆ)&¨¢Žf®¶®#¡VŒ„€Dpš+ùÊ÷»×´Í,šÛºI ‡»H)ÕÒ™ÅÉ…ïº>æÎÀ@(,Ì@ ãÍ’t{&,"tð[s!xkfÚ\DRÊMÕÉ‘Ôa©­Õ2–Ú‡Èߺ$œòétìSX'Ðã¼ €Ó@Ήئ¹k­k;øHYSïÚ¨jbpñâÆÓíâ}—!g4C$W›Ç©0œCßu`hµ¶”sL ±0q6 U¯Zsb"ªK©µ¶R0Kâ$'óøŠˆŒ¤h"Ô ‘œõ­6ϳ0Ëwß­ù›#Pó$°&\„ä@nèn¸Òq“¹‹yÇôÐ¥oŽó'_ œw˜¦YºœR7^¦OÏ?ÿÙw§×ÏSÓvêkê n¡2瘨y4Dp+•®ŽA­­)4 ’ƒ¡¡¹¹’{àòF.èŠj Ú)•×ç—¶bJDDðÿöf½’dÉ™˜-gqå.¹ÖÖÝÃæ4%AÂHéa ½Ћô¨ÿ+@¯#J5Ã&‡ÍªÌÊ»D„/ç3Óƒ¹û*’£@!q+*+"®‡Û±í[XUµU0ÂëpuóÅRŠ×·¥Î"•I+Ÿ?ÜíÓÚ[8p¦ÿ÷÷=óŸÿùï>?}ff¢@!´¦UŒ §qn"X#¶¹ @h„N3¤he*Øcµ±jDÌûCØDI(@¦@¥ÖÓi]ÜzC›[©]×ÝÜtR©•šív] ‹N;š¡("RÊ¥ÌóežÌˆ¡Û…&ÖÅhA§ñÄŒµÍFÝ8!v©‹)-B-ºÊ&•RîîîdÕ_gàÈBNª ÚÌW`)ónßµBªVJõu¿Jíûþöö>ÅNÄj]Ü™[S !ÕZÇqL)1ÇZ‘˜c™u®S­sêýávžg Ó4½ûòkCÚ ó_¤¾ïY]Gù-WûÌþpØH)agêDdškÌý4MumçZâ~ßs0€9†„:ÕVËô» z Q¨‘¡!¢‡ ˜[J€àb ½zeý¼:5'úƒ!1ÇÜÕÓOØ›Pµy®OoîßzCÄnEÊ”˜RJÈÆÙVM8FôŸÁ11m­s'µó$vsèwh“Ö:O+£¢(ªR‡dXà ‚ÖÚH•Jks-ªd*f&ZÑ€™»ØÇ†µ Õ ´Lz9öó<›TµVë µ‹ÙuyX„ˆ" Bd@@ðh‘qªMêìV|ó<"ïB),ŠPÞˆõ±7`DCb"!¢&Š@;d53«¥œáÓ‡?Þ¾ºÿòÝñÇÏgJq×÷Òj“Ô†!ÄçÓe˜Jä(Í•+°á.@E¦ØeD§ùÓO?v‡=^Æ3BVhʱ;==kÓB™Ç§§‡ï¿ÿîp8„È)æ2áÃãèKæT Y( γ1Q#—BV@Øh0à"ŽÈèHE"$ æØånÿöÝW»ýñöææ2 ³–5D‹ÎEØÝ™65j ºÉìÙÕbÛ%Ôh9{5`3VÔV´6fê¬R«ˆxÏ ËPté ›4­cìb€Vg‘ˆ–M : Ï99Ò<5Q@ÕVêØ¦K›ÇVæÖvc ‘ÚjEÆfFÄ[¸âª3 WÆ6[¸zDf ‚‚‚$ÅÌÙª/b.^òé‚:„­ÏwßdDdÆEÜÓÄ·KµúnTšjSc4D ` ¦µLÈH@ÕááÍ´¹lºë__wóã8nÓZ‡”òóyò·9Æœ˜Ñ@@Ú\j[‘3¤:—™9¬‚¬fBXÔ"˜ù0vM˯ÙDdÇqEd#‡à•à†égfww]·ßïi]é{Ïë `ëuÍ\pFÝAј«8sηàšRèv "ûÃͯÿì·ŸþªÖÚïB©•S¬RQHéã燯žŸßßß”y `b­Tërff€f†*0MãÃÓça¾ùæ«tšv M¨º¸¢Ö˜Q¤6©¢ b fFÚW ÌJµÖašOÃe¬v™ÛÔ¬yó¦àƒÔæ54lm¢-A‹®*``ÊBDÆRî÷­•”vµÁ0”RJN]¿Û§Ø‡”]×ÇSDÈfÄhd¨^mRWªBFÈ@Õ\Ü Õ¤1a ¤Ú¦i¢EgÌL«Š“¼‚ëbkmˆÁV•]Q…PšqŽÌfVD*HiŽŠŒ­A+¨SmÚ¥Üõ1ÑÍÝÍ1­Ð‹ÖZÒõ4o8mªÛ“D´h£z¯ÅÈË‘”€LcY‚Ç(¥Ø÷}k-„é/Æý×3-3cFD“Új­¡oP»}.¥ŒãàXHÏÿOOû®!äœpå¦ùÔ×UžŸÏoìûž9*„~—Æy*¥Œ³ÌePmÐv»Ý4¨ØurÕYBH]·«kØ#",2Ý„¸MÈ~&Âl@‚„º8n/©kgW/ôˆÈAræÂŽs~õêÕáp ¢‡‡‡Z«#À|s‹ˆ1F§Âjy9•¼” ô8ß§Çãñ›_Ýß½~HoÞ¾ÿòËÇ¿ý‡oexâ¼/m" fc~øüôðôôæî¶©€ºN‡J3R…iœæ§Ó0 —ñüÕW_ˆÈù|N™R Âfr8ì|ŒNý®»¿¿½¹¹ño¶”´¿k;sÇRJ)ujÒ„/E›‘!‹ ðJ×WˆZ äõ¦4â¥e4@5¤˜;8Q™™ýwx8ÜQ×íbŒ¼ËEgfŸ‰®¤- P4a6B15RÈZ@íc¨ Lš‰B0²¥ Wóåí:és_k­µ˜0{zQUjéµÏ9µÖŠÈXÊX*Æ~³VŠ(÷7ý7ï^7µ>w9ÇÀÒwÁw|!$Âp]è^c*ôg¨š—xÞ†Ÿ¸y tEdÔˆ™œ¢}žFC@Nà–£Öj«"²Ûí UTTÄÔˆ"wq|Öi­‘8‡HZ[gTã®ïSžçyšË4¥”ÀÃÕ×$ÝîP«4m D¡Jã\žOQœJ3ЮË!°ÈŒ$101…˜A‘BDto>æy.DÄàªü‹Ïe$ïV‰ê+!çÔ«"z¸^¯!~q©ÍLD‰È-Åóúð@ED¨nPÍõE Àšn#hD`ŽÀ°ˆà€qäý~Wëüôt²Ôýö_þù¾ÿþñùñÕû~žÇýñ¦Ue¢qž>?M_Î Š¦†cÇYu*µž.çÓpfæ~ß½zõêo~ÿ×?|ûÇýáw„  ®A…† ªs-s)†s N§Ó\çðÿõß5©2ORËLlŠ7¯Þb`%4E1%RG]±+núxXC]”üÜ6‘Þ¼ºG°Ó¶~ÂPkP³må¢àL"xáÁªŸˆ`­P@bæ„Ös²}ÛÕçÏ•@Kö}îûݬ6^ ؆·E«:‰™1F"b$Ýň n‚ņRˆŠÓ\ÆqD–y¸Û¿~v¹C²VfÑÙuÜ ÚK­ûÒÏ_-f¶X53@Õe‘øbH)Pkt®FHˆ&M穸ägi*µÖ*-ÖèÆ¼@9(˜©-ÂÌŒ­Gå M5äL1"¢QÞí00ò È P9ÄRŒÙ9XÊ{—ù}~ž>|øðí‡ï?üø“ÞÜÜ|ùþÍá°3h„’2½{÷6å= 3@à3§Hª ËAfëNEUU¼Œg¢HÙB”•ŸÁ 7eÓmɼ,¨˜sçÉ#®:ؾ†ØŠÿÁ7ˆÇýÁ列Ñ:)A@ôÁ,1­Ó¤ªÓ4ýáÿ|è·¿þ³ß¾ÿþÓó?Ô6ªU_ù3"~:ŸŸÏ·û$&Lb>]žžŸŸkks-UZß÷www¥”OŸ>=<œZs ÒůPUÙí‚Æq|>ŸÇ#p& ZP$0V`ÀH$>¹6QcB&6{iVU•‰±›\mR|PŽ&àji¦™Ñ¤‘Ì‘HUë8´ÖÜ{¹é®3jþò¨¸î @5˘‘€ˆŒµêŽ$% H 9H"¢¦ÌÑ[CU…ån€ÖZ@âng&.²æk,8ŸOO§K3ß+qŒ¦ÓS)e×ç91ÞÞôDlȇ~¨µæZgاì{T¾Úútm«+äÏbõ…íÁùÝKe[WE’-xfPi*m6BT«bjئ¹“45B&T 3C ŠTª€O’cÁSÜ !$(¥œ/cmc4„~—M3oE@À¦ibŽÒì|>?=>~øá‡>~úRµÁ\•æRÊ*¹ãsŠìL L)©aA&3Tõ§ˆ˜©‚!*©s·ÅTln„A®,N¶^wsÁ²+šþ2ø½ÚÃ/"ZMâýbºåˆ-¾Po` ØËfضá1ðùáòÝÇÇûû×_~ùë?ûõŸ>~žs>Ö2kErÕ”‡§§Û›·f Ä!™ÖZìpØS Ì\JùøñãÍÍ›õÝ>Å`ýt·³23ÕªZEÏÃ4ÖŠb.ÏÓìw9wdcÇø‚v€ÅÚÃÖ®á…a *c·¥bïou•VÛŽÅ­@#¢Ëå"¦ ñ—Ýôœ×AmÅ(‹ˆ@H®é±R) ü ív»»»»¹ÂwÿÏå¶<<>>~ñ«/ïïoþþãíM8]°Úº”§áäðø†€L5Dˆ‘9†»W÷!uÏÏÏŸ>ý#ÿê›ßÔ×oonîb Zç6Ä<Í¢c+¥Äš  ž/Ó4 ËgþŸþÛßþíßü]Šð›ß|ýöÕëÇÓùÇ?õÇ»ÿì¿úof…ªÈPq÷®ý¤š‹m™ ª…H‘)0aŒq—»”Ã>ÓéüX¦9æÔçn‘ej¥6FâL´´9ô}Æ3€¡ z¸²£XLLDD¥QŸ2Ç”òqž«Yí23ê<Ë8™™KÈ#úr“(qŒ‘vyç'Ëšú Ðå|væT åœ&@%EÀKRļ¡û}›ZkE¢Ø§£šµÖ"Ò5_OWÝ ]¥=~ñgÄe¯ Ö@ÔL‡Ž×1 bŒ€ÚJkÉý^í þµÞŽÄàÕ·Vw5¬¢ fÓ0>žë\(p ñ2ãexxz4ѯ¾ùúîæöñùa˜'bG<@äºJm)d2¹ÖVª¦W ½"Zïo··Çq:Ô÷ï^«606Ï¥´2¥4©ív8=»®{÷îÍíííñxŒ‰”;I^k?Ms«ê0}¯lçy>N}ß{Änü^DŒ9…BŠfæZyc9çåï¬üx¿bŽóɼ)έúTùñ鄈»Ýá2ž®?~úiëçsû?ÿí߯þå_üz¨ó§ŸªQ-JØív»ˆt~~º=äÿú_ýÅ×_½9==—K½ŒÓíí}·ëŸžÏ Ä??>ÄC Dh&ÒŠHcCšË‚SA4¸*ñår1³Ð£|ùfŸg+S;öéxw@h $fMunUÀTUcHª¢¦ b )P $„ȘcèRÈ9v)çœS¤óógMC@ÆæºhRI›LjUe¡|¨ê mu&4DbkªjÒHåhIæI¥1˜Ë¾1Ç”rì|ò…ˆä#¥@WŽ[I¾±pT³÷ ¤ªd¨fÌÑg—´vä´–ÿà\ŸàÆ“°¸ªo;¨­0þg¨¢µµ†*ˆËÙ`/˜d§Œ"5@2BO¤hÐ rÌÏOÃé,`dP¤¡Æx¸{í{3Çqœ%Œç¹ SNw¯ß«ª@8Mµjà´C&¿ 8‘)QêŽS­5Uµ”yßw€Qˆèþþ~.—Óù|{s0Co2¥ë:TÅóã“ÇÞn· !¸-°ÿ„ÜâSD¼Œ­UjmÓfQçÑåS7¿xte-ç… Ê -lcÒéJr +ô¨¿©ˆ˜¢ x'’BÌ9—":·:Ïs«âYºV=‡=üð~øðýë/Þíºþ§ÏÏjD¡j™•C ¥Öy\èrMjmW©¢Ë ÃÀÌ™ØáxL¹ßus«m.Ekä$&`l¨¡cûæÍ«HUîöùÍëÛþ!S—´L†Ñ]òTИ0„ µ˜!‚Æ€]Ї]Þõ¹áxØ‘)¡ÆHÈD†V¤\‚F$¦ÍZC2ˆàZ6@n÷B`¬Hຸ"hÌ#'fhM± ¤Ì€e #0æ—EàV#yuí’9  îbë…cêÖªJÌÐuÚÌŒ#!¬½, "Fßžª˜Ã>Eß뇮Ԉ2V}É)RAÜlî…— Á™ ¼-60ub”hSÑ&búÓ8}ûá»çǧÝa¿ïw¥U© c¬ÃV€¹j@D6Šbc<"2MÓT„R€\^Å{P Ó\DAZ)0å˜B »›Ý®ÏªRÛ¬Úp·ÛÅHÒŠ™ªˆªë’Db ‰ÏeŒ9qLÃpv³œÇ§KÙ˪ÆÌ^ß¿Þw©¯‘ÜWõf}1T }±ØƒߺU"[õëWx¼u B©µù¨U ™#›Rîú”vs1(o¿ø¦ üÛ÷==•·ïéÕÝý<‹ Ìs)ÓH9v‰S×K m­Íó\k5ˆ¤ªLÁSIàSbƨ@S­K×jÆ ÔPM‘€0h™¿þæ«Ûãáéé©ëºÝᨕƒ‚F¦Ð@[CÕ†hÀj SŠû®ßïºý®Û÷13k«B (1ŠÏ)†ÓóŠž5SESD$D╎3 IDATMÊÙ0+Ħd -2*ƒ@@nhM\®T Ô@›´Ê!DF^©Œ>0DÜ]Ç¢!¢®†%WẜÄÝ>Äõ[ÚÌP@qUçrª6ã" TU]\¥Æ¯»©ë»ä=œ€¿ê$›/ña›^‚ ^É;!ri* +YM:n­Ó4Mc ±ßïnonnZkÃ04µË8§ŽB!’(ˆÁñxã”W Ñ€*1ïv»Zg 4PCò´Æj™Š!bÎ1Pä1’„Ö*1Á營†oÏ·wûo¾ùÚ3À201k"¨û¾ç7o¦yØívNú†óªìŒYt[d7 .¬˜{¼M©ƒWÁ´ &ô3I/b·ï÷å„\•™WQ$&Ħ*Íš‚Z3ƒ¦ @CàçynU§qþôéÓa×ßß~ÿ·çß~÷Å—_ßíã8~õîý4M0w1f$©êÎj^8ʨµ ¥”¾Û™»¢sŒ‘šéeœK«Íy ®ù  ÍjkÌbà7¯^ñîI=ŸÏÈ„d‘ƒqhLJ@jhjÚœ±w³O}Š}Ÿ»]Î)"kZçƒ6ÑVjmuÚJæR ª…"GhÖ P­Öê; EK)u¹K9BdÛ$ÚVã)€ÖDÅÑ6 `jØÄ 54Rð%³ùw€µúB|¥ ¡ÁIþ•™]ý€,‚ôH°ÇAE 9¹É³µª€€¦ j¸Ô§ôr̯Õ^í]ñh­ÅÈ1²*cÞY©*Úú*HÓçq¬úBUñc»”rsss¸¹uÔ¢óS×_ÆIÁ¤‰ˆÔB‹,?캜û2ƒÀº½÷êÔЀ—QB ¶ß50#W*C”ÖZk³´¹Ï2"µO§}ßÇìWTÕDÝç!åÞMPº¾÷Uþþx ¢ÖÊ&Ï_k™Æ‘!úÅQ p¥4t*½6ö¯òCp¥ëïÛ×ëÓç©Öâ„'ÌDti„P@­*F0´¹67©ÓoÿÅŸÝÞ>öÝþý—_åœÏÃÐ÷ýÓóƒµCh­`™ërÐÖÒPÄTÔ´šÂråÕˆh ÌŒ¤ÞxJ¤èæ-¬¨¥–ÖŠ+˜†¿üËï¾ýö»wï^×y¾½½ýÝ»÷Çûn¨ðññܪ?ƒSàSfxsèSÄ.¦˜€ ¶©Ö2i-Ò  (†Å½ÌRJÀ±'¤"MÄšš4Óy´)Àa×sÊÑ"k! ˆlf¦Pµ©³«›‘¡¢€)ÍÉc A_ö%ˆ«°%‘j_Âc£íü"»:œr­€Œ€­UW7X÷ÌÎkG@³ª¾€¡I¢«+ìv¨ÿ'zW áE>†V +]˜€/`l™[==_\sË6ÄÀ0ÆÄÌÒT¥SÈ9»"d+e˜9t)a@É]$€ËtI!„Hmn­4CŸLI3bRCRA«dbf!ÇÈÌ­ P }ß§Àçóÿæ7¿Úïúy´è`^–ñˆHýîÐuÉCÎ壱ÌÕ«\‘åIpˆ‡îàÁi«cˆƒ ½dÛêa#G;l[œmüf«Ÿ¬—n!ß5 12kMM›HkŽ72Ź–®ëÙ ƒ©K¯ú©–Ï]×ÿçñ_˜bSÓf¨ŽƒÌ“S°Ñ@TÚÜTU´V²Åí(qŒ´ˆˆX«†hl »äúz¨ªRË\ë,Zß¾yŸ»¾þf? Ã<·¾ß¿zóî믜>üô°¯6T­¥ˆÕB×õ‡]ÞEèYÈšÔÖŠ€¨hÕ& ÙiyÒfÛ"„›äÐ*šNeV©€¦ÞY)˜´"ªf˜÷Òe TÑ™ © r¦(€¦È1RSæg " ";ÍNÛænP½-]¨Pþ•±I·pu΂ÿÅu_ fÂDèÂ>ˆêì@/”PEA ¤€[8VA®¶¦[ÁöO†«®´þZ+\ùšúóxŠrP¢«j¨êufFU¨U¦éìSMæ >åfjh-‡RÈ}ŽÅĤiµ2mžc&FS4e¨­43f`«ssŠ”iê:DE63Ô6O ÆéÒÊø˜cªóÔÌÌi6u Àzïä{?REª§@eæ¥%_7«¼j÷mAWÍ ¹âHÛ{ý–—’ØÛ]Ç0úáv¯þ ã8!æX›žÏ7sR ÖÚB¤yž÷»#Ç`f÷÷÷9'Ša.9Q©z9Ÿk­b ¬–2u}L"£ÑT¦&`žx¼Ãç‡3b !0› )’%dˆÜŒ- €µVK™š"Ê1]†“hÏç‹6¸¹9ÞÞ t8Ÿnî_ßûãýýãyüôðxºŒÀ&lJ *UdÞ[ü`cJS™½šªµµ"ªËöøøÌ±š™”Ù@bŒZkåU¥ ŠjmºÕŠ9²åÜA0d dàNs†hF .]Ušº,“i—,‹äaìÛ !³Å^ýgØ™µ²rd‘yoj )·n‚-yÂÊËPó%“êrü‹T©j¨(h AArì ÕûÞíOçˆ:ª¨¾ø£¬ÍêóÞTDv‡=Nó<£™·µ>…–ãñþ|~FäÃa·Ûæy,¥1c)c 1îB¿ë\8ÆÛZb”Ö†a˜ç9Ð☜s–²@áU¬Ù‚ÚsÌð6˜%‚­÷>y¿ëno¾>žLÔµ¸öû=:'Á ‰–ú<ÏÏÏ^îºhßïû¾Ÿ¦)F‡é­µy®­i)tRÕèu„Äû¾zzºQwÃSUC+MK©Û1ç›vïóCH¹O&0Œópyæ˜Í`œGPèã×ßü†™§©ìv»ª2Žc8úÕûÕ¯îç¹üôpªE|F­ÚB³ƒkß×*Ölžë8 @db ¼Wm"ˆ®ÌHnÍ„À)…¥T4‘6—6ĸ뺾ϵÊ.Eþf÷÷9ìS˜§³iýâËw*íÕí],ežÎ'”zèc&ÔyÎ!¶ÒS.† 0]榘ŠÐTl,6U”j—"º hF@Œb֌و(&å@ÇCŸ²Õ}G êl‚å6¥eoÂj­ã4µZÁ‰ñîæ˜cS‘Æ„!2˜•yêRĵiTqì§©š­ca¯lpV¥ÖZTýØöš¶v9«.»CQiµ”ZŠ´êxü%Cš™i¥C\ˆ@à "Äþ¼™´Rk™Žû]ŠÔj)ÒšŠs§Õ“17‘Úš¨ŽÓtºœß¾ÿÂÓ± ‹6i Ðj)ĘRâ@@ŒªZ[yóú5 —‹©ö¹—*e*9fFžÇIšÆÁ –jb®aÕT«›-æÌ1RŒ!çò\rç‚·÷ ÄP¥”‰÷»}—{©•_ß¿êr×j©¥ !¸Î-"0#Õ¹@$fC4ÀÚ‰Dmš‹†˜Iª>;G¤H1Æd*ã04­j}6fF„c5µ&ÚDK©E 9ŒEªØ0Wêö7 àtž¦ªýÍ«©ÊT”sNÝ8Ç{¬bN褾ß!q3+U§yžæÚ¼œ3ãÀ¹‹bÊ=qTãÖtçË0‘JZt‘:C DrIEFƒ&"b€C±cŽunO ²ËÙZ•RŽ9ßß"P" ÿËÿü?^.§áôðüø8—7o^ƒ¶ƒJ™‡Ó<Œ`’™ØÌç£Ó0à JXŠ``¢p™Æe5bb¦´?ÄŠh¬h d(`„$€¬Ë^D Í›ü ‰¼dA@!ߤ Ï|`ÙÒ¹3 ²!YXäíô Hä} Åe\±°v×·ÁõáÏÌ<Ä`•>꺮[ ÏçóuSŠ«œÏéñÁ‹=p…Û®ëRʪ jMË*N)©1nˉ­õÝöxå†RDZ֪&.6`f.<Àü¨j“ŠŠHBp½õqsλ~ÞáOÓ",裩Åå)ð0Ž“´æý¦0Å smbH!…$!uÈ}åº )§ËðñÇŸJ>}úôþíÛ®ënö—¤©Újiu¿ßã*¹¥ho2CˆfËÎÙvŒÕ@Mµ‰] >ˆúÜû²Äµ/‰°Ö:ÍåáiTÃØeŸÇbˆ™¸µÖíºZ«MMÕÎÓ,"Ó»wožN³Q ]`æÒšTÁRqœüû%¢”ƒ×ªS©°J̈¢ª¢ˆ˜êÜÚËw‡@ƬjŠËèj5S_oÂHÙÌ@mœëeœÝ<’‰rLljµµiüþôô÷¿ÿ÷ÿæßü÷)…ðÅû·¥}ýðéÓ8]¾ùõ¿@Äa:JϧËóePCJIŒJ“hM‡a¨UŒI00Ça¡‰‚"B × kåùf†ðÒ–l¡BKv]âuaجõ¡-2> `Q„ZG Á[·D°*ÿáb"øÒµ^UÈÛgð'·Ý)­6Ûpóù-\—… Áñ«¯jõ¡ýÒ2 ÃàÆçÛm88"’VòâO‹± hzb/¥Ò"l³Œ"ê“ÿ„>tñQÍ5n\é‹ÓU4ÕF)¥ý¾!Ô*­5C !´Ëó2„°±aü·ö'[k8 ‚:úïéááûï¿> 1Âùùù믿¾»9øEð¯Ëyq‡:BÐ'·ÛÆU.â'¦ -¨2’ËAE5Dw^VAùԩ4až ”VK{|~BÄœûišö‡›ãîxH)©Â§OŸJ9äiÒZk×un!ë;Ÿ·/P§u²°|›Ó¼Ý«>e_ÇŠ$"­-vx!„D®ã‘W+áíRͬÈd«l*3ŒÕæ.¦}ŸÕÊÍÍñíë›2>|w9?Û®¨Ò¥ðæöNk‰onnCê`.í|™.ÃÄ1+ÆRªf¦CN°ø|Áê¡nªÚõ=€ €1.¤4üg&,/›É­={¹ /¿Ú´fÖ@Å_Ñ©ÖKÚ¦FlK/¨N7xy5¦«ñÏuL^žíïû§Úånûœ°Šå€ß^סîÉ-N)ô}/«}£ìÛŠò¥Õ-ÎoâYW‚ˆChCÞ&Ÿ›ó #.VÛ¸ÅÌbŒÏÏÏÛÇÖ‹™¹˜­‹-u#¹CdBBt),‰Þ=>½4³n‰/ü¿jctr×1¾¿¿ïúä³.]k=8A-¥$"Û.©_o’=€UÕÛZ¥.¦­5аJ#¢œsS)¥ù¬!„ ëäÉ?ör„Åp¹\ú¾‡V§iR…RJ™¦ `¹Ô¶ù¯^½Úæ)ÛŠ»Ö:×FÛ}SñXð·{¹É›,·ÕõfÀ–×ÔÕ70ûµÍ!‰h=Ÿ XÛuáõë·9½;w)ÅÝ® ñSÕq8?>=v»OyŒùøÓãå2Í¥iŽØÔj“f™ï;/c÷W «+»Ÿ9ÔOÝ$ðŸ W¸J­ËŠÒ3ç¦Km¼ oÑŒL”И€¼ñ!¤b€Zk«*"1‡eš/Ç ¨¼ f~®?KòW®„xå[µý|½G½®žžžx{„„8¼XEˆj]là\Mº´sývŽAÁD‰81u3ИS\GÍ@¡65ü¥½­JÂye/¸­\ÑbŒuuF¿– "ÆŠfVUX…EhÊ2TS¶ÞM!ÓÁº¾{û–bŒÄqç¿ÿû?noüÅonïvû"2ǧӨbã8š™Có}8ww盬Π?ï›l=|gD$Z&…ª*MÅ»¸é¯¬Úfþ§r œâv([kc›_ÝÞ\NÚ$fÊ92Y`;ºœón—C@캎 ú¾¦qžKìb|x|‹…f¤Eê<B ¤²èS»m–Ùâþ:Ï3"2"ð? âùY¸þÓÙÕ€l…ù-4ZÀ¥ 5‡Ñ !3!nR K±êš5¯ÚòF/¡¥¨ÿd1¼…Ðv£ø*Ïšlzý¸>t^~6H©sòFšóÿÝ“•ýººaÃT+*fž¦IVwI]©*[´#kʽز¢ð¦Ôµ3œÀº2[,ØR ´h>³­ríÇÑÚ¸ä玑]Â×Óßzƒ(ØÕÖÄßNZó[9çœC¤®ëÑÌ.—‹÷¥žic~Aðê•çí–l·s9]îÉV"dSES`æyžç¹¹DªµÎeŽyW«”vò}üôé÷¿ÿýý›·Çã±”2\F_Ø Ã0 Óë·_ºA–7‹ÛºC4—H®×•·±Â®ªJĶöáËQnh¦ d ×í®Øî%f&&”Ö&ÕÚõñÕÝ16¨ã4Ïe ¶ËÐÂñ°Ë9çKJi×ZUÀ¨ÆŸ>?Ïb@Ik­¥Y lÈmµÚX8yÌB(ÕM8ÆûO‡ëò;ü<Q('¬oë"Î+^/8\Ÿ€B"ÖLÉŒÀ(„È1´Ö ÀdòòŽºç×$¬ ÀªaËùÀ/~ÇÛîjk>ñ+ z¡øK–œ­r¸›œÿVÝÍS߈È0Œ¯ëû~šfßé{=¬ª! 7}Yäzz^õüà×Ö±bßÇBJÙkZßÍÖZÝܹ¶ê¦ì¶ë—uÅ‚T^!A[ìW`Ù«ì÷ûZØÌrÎ}ʈè\åárñF×ë[¾²ó#×ÔV«¿°[Äš¹ ‚[ô²™º_ˆF6–:ÏÕjSDl­M¥Êy>‡Zk-²?y&¢S†µ‰›Ñ…ýñöxûºï÷ûÝá|>ÃàJËÓ49SgÃc,Æ(ËyñR—ÑÚ^™Ù¢/éǪu ׫q B3m®!ì‚;1À§ïÿTËÐÅ€ª ˆ2Z Ð:aGg]·€á~¼|÷á\¿º :ŒîxiM!s`~¡A¹ƒ»:ÖêqÑLt‹ÿßÇÏ*ŸEûPÑÀh¼]~QDDRDô(2 ¢ ²ìÀBŠ9çÓùìÿ“Kl¹”98âÿŸÁïÎm6»} µ”ë0¾®þñ‰ƒ€M*ó’ó}Q¹x´¤ä)t·Ûùp†RJ«µµ«Î†O8¼õjÖÃOý˜ºççsSñøŒ1vÏã8꬇ˆÆqìº.p´Ÿq²×z_0·ˆ˜SöOâñ³Å˜ز2<\SJhËVVO=U-uªµv»7oÞô9~þüÙ?¼‰ËG1À Hs«ŠK)þ1¼÷^êI€~»´„n1,eöˆoµÎóÐtá¬61ïœÇ¹(\|nüõ¯~ýôôÄ1Ýݽòåó0•ËåB„e~F óù|¹\ÜáÎMÃ6¶û^à8rö¥.ÃeîÓ4yu}U>¬@/ÝÝöÐ"E7UC4“ËåVß¼}eußu)'B°Ã®;vfòýw?LeäÿõøW1¦qš§qÞïæf¿ÿß~z¼PÞõ‡ûfxf3s\Tbì#J-µ¶¦BÈ¡ÍÜï¶ßïçyš¦©ïskõ|>qà˜²‰JkÒª´ ¦L˜T˜©´cŠÁ/ôf÷ "ï¤}ý»ëûÓé4—íR›Z©UUK«Û8mãn=­ŸÛõl¥‰k᪢oSÅ,åütº?ŸÎ€|ss‹@"VZ+µšsà”8D¢ÐšP1äÜD§©ˆ¨  ã%7÷“íêù‡ô&Å ÝZk©­¬'ø4Íö‚Fö9Ób6+"¦æC•¦"¥ª(æà|5U& …ïZK™Z­*ußÅ>…œ‚’)h#‚œÓÓÃâ8Í|óê9}øñÇ÷—õ0ÈþÕÛw_þúæÕ«ÜíTêßÚäT®'mþ#v=‚.(¿&DĽ4õ2aéoE1ç< ÅÅ8SVå$[f°v"vEîÉfFîÞcfß~ø¡5½»»#NÄYÄŸŸž=Ìöû}È©ïû32 㬪çq˜j󾆘sÎËÇØ$ tÝ{y¾n1RJ†ËVÿU†áx¼½nŽˆÈïsA\vUWV3c—42\Ô¹ˆ€w]lÑ“.4†ªRêû÷ï ÒÓó3îòé2ýáþ𽀟?> í˱¼{÷.§¢j%¸•ž÷uKw‡«6x5ëz‰ É©Qêð®Ké¿H¾¼,6‘(záäè&ä€hR uabI3U­¥p´ Éí)3»L333EXo/[Õ†Ö9_çu¹ë¦ÅQÎ{-/“ÌÜÒbe´{}ãsZƒ”‹bDôÝLÌÝb2Rê0ͪJ!îÇý~/µäœcJÓú(Žk Äȫٴº7ô2&°¸#"Îöö4å¥xa×i,—Ë£ª¾yóæõë7ó\ÿðWõ篾ïîî\ì7„d†"¢®a~Çlqbh@ˆÌ ŒÀ˜9Q ÁÃõºÿw­PwÓY ‰BŒ]×iÞl‘¿…ëõ·°ƒ×5 š!‹˜Ì¥•Ëô|:§”b„Ú$ç~·ÛíŽ÷ø6ƒi®cž[U‘2W1UÕÌ98Ùjíó‘'p›O¿È+t1ðϹ>°NjV(¢cÒÖ:ßÌÀ¤*®=v¥ŸÅÃÑñæžî„ÀÌ‘©K™P Q™8€Y-“¿~xæ©H—óTõÿÿôYºƒÀ?>œÆÙ̾úò=!á ú|CÛš£îÌ­.ŠÄèèy‡Ä/5ð¶)ôÏK§¾ŸˆÈÎ/Õ•cj@€Ì1Hks.ã4BíĘYš€mipi;ÉýÒá6y&d´*¿˜‡½4žÿˆ:ƒˆa½á\÷ÀûÏãçÏŸ»®s…^/ŸÆq<ŸÏw¯_yÌxQ7 ƒˆ8ÌÕ¡Kº"WÏç³™u]ïaæ›|‚ˆ_Á¼X ù«¥Ü-kÌu‚嵺¯p¼$¾N€óþ®5×L¨ßÿÃá°O9¼~ýv¿?ÞÞÜ1Ç´dƒ©Ö:óFë¿Îxžcñ¦DÄŒçÓ©ï³Ç§¶Voø¥ôpÕÞ«°|õêÕ?}úüù3ÜÜÜx[±â¶d WÿªÖSÉÄÀ•ÂRΆÔDO§Ë0L)u}T…ççg÷o)͹£êñ3‹©y×_ôöŽ~'øñêãH[Gbþ5©êÜßÓ¾ï]ÌÀ§SÛo!*óT‰yiƒ‰ˆ‘|l´j@¢AŒœ#š‰hÄ023/’ôÏÏÏ"¨?ÞÜoçÚþøíg„¾Ïóe~> çóEj1[¼9–*EÑméLlu‘÷Q“ ù:‘“!0Â[p]WÄÃJ³ðoHDÐP”TÍP½fVmÍ€ˆ‘BDjfÖTÔ…¼]æÛ%q›Šˆú€VìžooÝd]Í~iN»Ý"Û3Û9â5-®lißmlþT^ñ&p¹\ÜÈÜ'¢ždº®s±”ÒÍÍËyΉ·7Hs ýŸ˜»ÖÚétÒqWìE@âMûõ1+D.e¼f~jM>ŸrŽ»Ýn¸\žÞ½{óîÝ—»}—R¦HÄ8sÜÆ?×·/¬‚ W±Ê"VJY´uÖIïrM[k ÍïÝè‚ «a©^‘%®ßÈk‡åØbn¦fà]kS1CS¬UbʈH1äÝ>v=PÀ‹èX*S)­¶Vë*[å=cˆ!F¿½‘Õ^ôœ¶_|2¼Õ½Ûgs©qÿ~ùŠïÝÚ ƒOÅÔTD"ò²ˆòìæ¥žÓIÀ À{”R¬µ’U$dˆ‰ÐÀå@µIØn«´a¬üîÃßüÝÆI9Â¥@€.%§b´q€¨âÆ–ˆÀQ±µ@ý¿™·ómÙÑeÚV¯>¬àÙ”’)÷Àù|ÇÑ@EûÊf³=綺®;Oó”ò8§‡§½ÕB@.¶]Œ ù ªž0M£\ÌÍ-oȲDcM¨>ÏÐZ³AÖ x³s"jšæx<Ú‹´”ìx<þñß~ÿ탣Ø÷ýÃÃÓáðôø8¾~sõöíÏÇqôˆìÀ:«ªÊ9€C@ï´€Qm­¨CðdêoÐvÍù|6Œ­]!5|Î-®ƒóM ›nkéÆáp°Û¼š„רk?Ëj+îWLÁ©ÆÁ­vID´iZ-…—+Ù4 /‹´ˆ0"*(úõžVÁ½Z{;ç¬TYÐ`㬥lõeö~W4Á‘sK- ‹+ÄØ’Šˆ–bÓÚ¦ï³ÎiÑ"zˆd÷¹@6º5i#ˆøÿþ?þñ¯ßþ™3o7Ýõn÷櫯N™>žgR‡jeSçP‘¢º‚Dà¼Í/)")¡ØÇjäl!Ó"x&‰dX4¸E¤eP@!u‰EŠ(3$fMÙ@H“"ô!Ršfgzè÷¾m{‚ Ž ,*̬$è")‚*ªõuIH˜UQ¼¡Ñ& Å]? jÊœ…ÁyB-©L9Å®GTµõ!º|Ó Ò—ÏŸ>}út:†aøðáÃ8Ž ×`Uû.9gÌüœÁÚ¡1žÀÛ·oß½{÷áÃK¶ý…þu­`U0²(}<û¾70ÖBÖ~¿?e»¦Â§itž^¾Ù½yóêææfšFïÉ{_òìõm“s~x|4ûñU0Ó9K\cŒ•E«…ˆd.–n8çB‡ L„mŒçñØù`¤½÷c×u§iô+KUií*xo=XQµ?hÞ<‹²ªð2,‚Î;%S¼p.8Ú–(ç" ΀¦œSZÅÀ*9›Þ !Äè¨0;PõÑÁ: kaD‘”Ò8Î9grΩâ”òøù³÷^T‘È–žX«?çLà³ åDdYû àP ½Q"@GDA”É–#’SgöºéZá,…˜³±;•·ÃÀŠîËç‡"tÕuono¾~ýâÕMw³ ß¼}ýòåæÝŸäëo~µzœ¦ÓU^¾¾Kf†‡ýñŸÿøçÿóû}ÿñ#:jûvQ·A( lkÔD•\´]ÀËÛ‚7a=çPÇñènnn½ Š8ΣQGŠŠ°0( CòDÔ­BXÖ²"ç‹Ú—¦íº~ð>€A.YUœ#›ÍG¢}Ûõ¢*¬à] MÓÄÖ…P² sÞEC;£wÁy7 WsšEpØ ÎÅÃéx:M.øOŸNç“ƶAôOß~ûý_¿ýîp:ÛÐæþpdQ@J¹ä¢¦Q…E|ˆ>DBãEãrBÉ…HäClÚ®i»Â|<¦yö!öàò£®­E\É4Ön]²"Íf×Ûfh} !úÛÛë»ûÛ6Æ®»íÒôôøE$°pnšp<›®iÚ¨€ê£VöÁ¥Ÿ§ódYòé|Ê9Qp>zeeQIiÇÑ;g &TA‰PYŠç’s)€€„…ùx:yx<Ç\ضõX¹'¢0—4•T´åižæ4 ¨¨°°sä¼'#â"–”œ@Œ!F¯’SžÑ»~3¨:B"¤ÃîªßmûMÚÖµÁ}þð@º®õ¦qÞö›ÍÕœ’sÞo_¼Úõí/_Þ¾}¹kátzü÷âþNãí¯¿¹ÿ¿üøþýû®ýpåÛ@.ľy÷ñáÏß½{ÿáép=¤\þ£¿½Þ¢Ši… ©ÁÂsYHy²ì°ocBeG>Qg(³‡(¨Ö\c\ˆˆjtGȳ½O(°Œ8]xN¤´(w¡[Y3“JYZN%s)e"š`š§‘hÁœÇÚPÒƒq—q¿<îçy!ØÜ,ƒ¦"¬Y”–aÚˬ>¬}j¾ïû²l1œ‚*×>–µ7*¹*„°Ûí¼÷Óº¦Åƒ+¼dô#ôX©3M9÷åᓺF¹´]üúo~ö³7÷Mp…“LÅ‘¦ydΨ(%çœç’Mްr¼Ì0³±­¥i¯Ó¸ïMì!„à+Ëì”@MÍÃÒ§"Ì.¥ïß!4¯îÛ¡u3žÏ{D ÑòY‰×òDE„s>ŸÆèckз*Žç)AfV[ÁˆˆDF2çžcý;¬õi ë@Û/¼àðº§DÞûyÊ€uu¥[«$ x©UEë %(©©Þꢊ‰ØÅF„ËœŒ‚‚ÓEõFQmv Ì79BÎytG$E¤¶ïÐQl»RŠÁuÞkÉ(sƒÜ8õNEóiNŒ¡éwüë_žÁ‡ínÓ7±ˆüðîÃûïßÿÝ»’àfK40Oo^¿^&É hR5Yï°°>Àv$"š‡zr9§|ß·ÂÂ\Â3÷¹ÿ&gtµ^CñÑ ¨ÖÊA­?[Ÿ§hÃÆq4&ƒ•.ù@V/UbÍ bË6Çq´JÏ­ƒ55Å fâ%¼\s]ûÁívÛ4¶¬q,%+s)Ëlš•FfÒõÉ­¾r«2˜^ —¸Ò ʲ]È6Í嬪§Óéý‡Ï?|xÌÌ?œžöç7ë—w„0Ï£iÛª0"l†%…N%³ˆßÚ²²òì’Y¯)…‹΄äKJ§,ÂÂ%„°Š;S6…b€?ýñOO\rðŽˆržK)!Ó=3…*ˆÊšJ9I‘Ì9˜9Í©[Pbx¦"í Ô ž–CB+·¹škõž5Q}îù/WXˆJ¾„$œ‰õ —ó+ÕȽ‹DÎú°èF8›¦pÉ¥(:2š®ˆh‘âÄ裧]ŒÎ#!¨#24Äî‚Õ&Öís2ͨY§c:?]uþõ«äå‡÷ ºíí݇Ïûýá”sÙn¯å¯ùëq"pRòÕ¦ùÝø»_}ó7(çã~ú›¯^()Ø¢S g“þ‰=C ­|Tï0¥É9ìû^X4zº$XV{‹vVE§Ôû¨ÖR3œˆ¬ƒ&—·Çîœ÷Þ-ÖÒ¬ãÑëꉷï´’ˆŒTd¼" \†÷\ÚaýX/—[Gçöööúú­Û41Ï3óÂÁ0ðÞÃ`4`{‘PÇ—½Ïi®¿«š+3[a Ó4D<ÏóÃÓaw{ÿò嫜өÜÞ´/îní纾#DUñŽš¶k›eÃw.KÃÛpÜmpÔ¼†¬£æþ¸"xç'-œÒ$…Ö¾ˆäeYMNO>|øøñƒ‚ÐÍ\LºcëK9)œŠ¤e¼vžÓ4M9™0"¬u•±ÔÁÎCJ³^\Ÿj™õU×o^Ú(ÏüGëÛ•úã•ȇź¿f¥F °!dïÍ믶m Î{Ë£탩]çœ@´‰®oBôØß*ްk[ëÒ‹ºmpÎy¸Ýõ_Ý\ÝtØw5Ä¡êñðø9ì®úãqÚ\ü÷ïÞßmo;/œ2:Ð’Û¡}±» Pœ èÂÇG$!²„@  )  ¬‚Ñ2HÎ,¥*ùÚqŽK—ÿÄ€q½nÁ¢—Hhnu…æ°aýøò^Öç_&T.heb·láÅRAk¢â:A~ù<´.Yº´a–Œµo UDlÛv:ÍEáB[¸:ìÚ¼­<ŠBž— ;¹˜q7ã¹ õªÚ¶íËû‡Ò¶í¦ëq´CŸUJšº6²0 ùœ³H1¹o׫¯$GcMÁ óV—ß6^ƒó!’±D@öJZvÏ8GYÙ£'ˆè›·_—”?}þ ,¨‹ægc;²0€Ûëɰt’Um£Â³¾‡sÑ>]DÜù‚ûM뮚ÐJx¬Í^û/"²…Cˆ\ÍÕhõ¶âú°OK) –ñ)"9[êkt—qÛöõ¦œÑy_@²0x$p¨R@¡õÃдŠWtB)$ð]wÙÖ !Ø`"ºÀË|·oßÜ½ØÆ<í§H…ÿñýË»÷S:ÎÜuÑ9T–2žÇÃÓéÈÁsß,©‹ôó¯^KN„ÆÈE RD@Æ’…‹µST ‹OV»Â<ÏÁ»Ífƒˆäˆ`™½¯×¨Z©y¸5cQç\ˆÁû¨ë7ó*Ú`©ceÿTsåuÜåeµO/‡NÌT,LÙ·xkÂó"r>ŸºŽ˜U¥ îëOÌu±–œÑF+‰sqnaZ µP`=]ÙÈ´NXÔªU%^àÉ|²‹cŒM÷ýû÷Ó<}þü‘Yß¾}óÍ7oûa(Ìû§=‹´]kÀµª2K*É9Ï«8¨)¼,ÖDFvǵմ¸6ò6Ô¨ ÊœmQ!,² 9W2#QÓvÞû›ëÛ~h·Ûíëׯ6›>çl1o¹bºôä¸hÎ%1ω\e}Ž3–È3<¡ kó ÃÛÆ’vKjø‚ù\o>WUº„ŒRVrˆ®{a®koO5•,*kDŽÈ!¡TZW×Z©$©Ñœmß9$PÍóän·Ûí¦w Þap8S)¥íšzrŒ¯¦ªK£>œÏðôùóüÂC·‘<–ñ €™ Ü¥P›MKÞùíæü% Ãf€Ûën74/n†®ñM>Nr6¾« )ÕúeØOQQ9ÛrôEžÃ9±Án€g—vk+=0ÆHèLªÉBAåÊÙ[us6ö¿•XŸ×̹r€­wovbLCf>5¶¯Ô[~y.ƒíe€uÎu]g¤E\‰ çóQs‰Ñ3³UÅö¬5bE—û±öÒ0 Ö 4+Â5ýfæ:-d¹1"6]*Ót•¡tp<Ÿ‡ÃŸþð‡ý~wûw¿ùÛÛÛ[)1M#"6܉ñ³ÇÑUŒÆ¼;^dûfc9s™R+¡!oñG´´1ÔP_J©»ûåÕÝýnsÕ4aLcJ P‰É# “2³ |•™Ñ/í?EB[ºtkä#…Æo·Û¢Rÿ·2U꽸ôÑvkÖR…Ö=Æ?~ˆ«d¨9Ÿ%ª €Ë¨öb«(Ì"E‘Šs®mÛ6JIãiö„„Ú6®ïštÎÆKLÓÜöÏÚú²^"ú ÀÍ^ßñi:çÖënÓÌÌ^ÜüÝ ¶7ÿóÿát„×wWãy~sp¥è|çqß¼¼’tú×?}wssƒˆ¬ä0ˆ™@¼ák¸ä-ê dšÎnõC +M˜Áýtõ2-¹Œ´ôL@Ü.¨yÇßêû´Oíþ=<<Ô\ºÂEfÌ6’zÙ'4uÂJ}zzªf\Âe´'úÿÐBªß¹¾¾6 ã§ÓéË—ONa:D4À9\hŽY|3S„µ¨&X°šÔYŽJDU ¬j xïó›¿S1KÞl·ã8þþ÷¿ÿ‡xH ¿üê»»»»ûû{T\q@˯ѻ¾_{%5Ð…fÄ:õÞ7¡q^ká3ÃJAp"âˆNûCÛ¶ª\ &›n¼ªÆD±pÑRò”r)Âý00h¥%\¦W—¤½Nk™jÉF]ÇÑm#™áõþ\:¦z.TÒ²0ù•$£Øˆ8ªˆ´øb@±¥ìD4g.)m¸oÚ‘KNs@ðÁS<;‡Ê š3ïšÆ .眥6—þ·ÿò5h.ã!Ÿ÷-Áõ®¹z CÛmogŒŸç§s“îÏùx8=>|AT”t»Ý¼¹¿m·/®Çq|x|Dß´Ãv˜ «U!¥pNÌl'Vñò0 ž°Î) Z\^òÞ=GD4Ÿ!VRÆcÛ€ú¹dóý+~èpLƒˆ–qj\†-šÕrÔŽ¸9ãyž ¿­Ód§Óéx<G´j üävÖpVÅ3óŽF9!\]]ÏçÂýý}Ó4OOOÇã‘$å®kì…•Rº®3è¸ïûÃá`ò™Ã0ç‘™¥,òkö‡ƒ9Ë*,dÚnÇñÜõWÛëëqœðûwï¿ýö;tî/ù2 ø»ßþýíõõ»ï¿½¿Ùþöïÿ.Mó~ÿxžO‹mo6–DÔ4¾JaØa‘”ÒŸcÛ‰Hfçœæ\ÄÄÄ=‹…š\€Éq•2Mçê²­ªwÎ)(õWD<6ç†>èªÈÓ÷ýÕÕ•ˆûœ3ºu€B Ï3Ã6ìÉÌE¼£à…ažg-Ò4MÓtˆz>rN×ÛÍ‹7ÌyN#ç<眕\›¶*’Æ3 wMôÀ_ýì5—9Ó7_ÿâðøôOÿôO/î®ýë¯_P› ±iãf³ño_î8§§à4oÚŸC×ø-j¸i^ì6çùîãþÓü¹îo^½y}w¿ÛJû‡ýÓ—q•ËfècÄÇ_~øøQÀ7M,ŽÀ{Ú¶mB×5MhCw1zbs€¤ ÞyÄgc¨ýO{UÕ³â³ÂÓvãZnÙÏ>>>Ã`7²f¼"b’ªšVeõÓÕÂ-z¨ª™èn·«¦f€ÙU§~éVì*ë…¡ÑŒÀµ9s+Çã¾áõöf»®ëº®úW k–Æ[ð²®;çÚ¶µ1K}k´)¥œN'ë¾0³sP “"EU€noo]h期öGO0çBDtÞŶ]¢ME¿`ÍÏýª„h% "rQ–Ì¥LŸÃ96äW¥EÂižç)Sð>4FœTA´(›w›A §ètÑYVrÚ\&Y†Ú0ÛuÝn·®6{Ãá¬?Wµ—på$Úu3_¬+š/÷ìßg[ò¬÷zL) #"ï…”J)i÷Õ¿TÓÒ`Ëý𦱿°­!-ÌlùBÓ4ÛíÖ\LÉôËrSHBN³JqÎÙ ¾s.¶ÝÍ‹‘÷O釟?}ü¼»Úmóù˧»»Û¦ µ¹Z‹O¹h§AÀ¾`Vëªöæ| !HÉ5šçäbð¡‰1Jš¹$""Gªd:!ÞûbÚ=†É0Q.¢*¡u&/"ÏZYÆ-\T]Sž§y$O•ßo÷ÑÆ-Ì½šƒ¶„Î®?®’+ ÇRbDDï×´ ¾E˜ŠMÆŠ8 'Â\ðp8ŠO yúxÕá<‘¢'G QDÎ(r5 i:ú@€r8í7Ãößÿýo»¾éûæñibæÍfc5çlîÓ']!þU§C+½É`Œq·ÛYùg÷¸¬R=/Õ;W«šËcú“|Øb¢5 °”R/-PLÓÄœk§Á®Œ}YÅeå²<+«âž<yÿþ=¬åº=­ªzïšÖuC׌™K)JÞ[ª/@]Ó]__ÍçóáxN)N§¾oc³µ:¢þóAqÝDN«Ú›95$uH!,¥J(öªlUãˆäû®s!p.D|H`9ìBÈ… §Tæ\Òœ Å @Õ5\`9Ž9#"àÂ[""Dãß«@g+^¨ªåY6¨+îxyõÇl.zUÒZ»JÛ¶¬0Ïyž²G‚`)ì}´‰ôišESŒ.gŸJfæ.ø¡ë¢(Ê\œ ‘ÈœÆaè½wó<‡&SRÎàºê»«7±d*çì¿|zß¶ÑEgó¥yfžuš¦Ûís&d€¬ÑÇ!Ò&øífóâÅýýý«¡kÇÓžYÛÐ Ãõ×oÿ\æ4O"=¢ç êÉÉ9Ð*,Ȫ˸ŸêŠm"ª®FZf¨x|²¤…¦RÑ‘j9°JÂ3ô÷#?»+Z–`›)žÍþM³§š(ŽÇ£Í²ÑÍnks°5ÆÚe¹¹¹±|ØlÌ^¹hš¦s*s7l¯®ï~ñ‹_¼f|ÜŸ¦”ŸöÇãþpjBÝý›×w¯^kÉ]×ôm-6Ãi9¤]®ÃáP« ;Óvîû¾ŸÓ(…sÎ+ >zï­ÍH„Þ{Gá8ž»HÉ"!§4“Ù@fíûh ‡0« %¶¾zšÚàªöÀëZ×Oc×um×éJ焚r«¼c)ϲlã8õ˜Ùs®Qa©lÑÑœØ6=ç4¥4žNãñx<<é×ߤŸ½¾Û\]ž¦yqÙ÷w·m³Áýù”Æ)ìb³Ùl¸¤¶‹>ÐûŸ¿ýþ]apÔ¼~óæñññåÝõ0 †#‘±v£}Ó,ÙT.ÂèÁùf¸" Œ¸h*9¥i]à,?~Nó¼éÚ‹„ØOcö®iÛ2sIJ‘iÎs¢íµ s¢s¡qKÐ;M³}~L9òÞãóÒŸgº6_,)°3 ¨ð «²¡®MB >k‘óŒø›•Ò*ugI¦¹±œseØY®/¬®œ°OÍ\»®»|%µ‘[“‚”R]ømÑÀRKãCÓ4•’vÛ­c¶ŠÔ€k;Ž•Ï̽¨Šýʪ e/ ¬ZÖm÷xšmú¢sÂRX`JóœÓápúþjÓ£pÛ ›Í†ÓìPÓx:mËRGûí?± \ˆèO/óðÅÉæBfö.n6›iÎ"¢ÌmlÉã3;š|Yl{.eARp. ˆva8…·• ½a¼ãx:O77wM×3s•ƒ²ëY{û¥övð¢mSá»›Á/ýÏš—†øãÓÞG !HC¤Bã]Û4Ítþ”3ã8lbÓ4,“äÏ9ÌZ4ω½I±O ó°iE$ç9„¢ï†Ý¿ûÕ/§ÃçËÀc»Pÿ°x£'dןtIMEÜ9Š0,9IEND®B`‚leptonica-1.70/prog/flipsels.txt0000644000175000017500000000061110702065466015042 0ustar dandan# flipsels.txt # # Example file for reading Sels from file in # a simple format. These Sels are also defined # in flipdetect.c and compiled into strings there. # textsel1 "x oo " "x oOo " "x o " "x " "xxxxxx" textsel2 " oo x" " oOo x" " o x" " x" "xxxxxx" textsel3 "xxxxxx" "x " "x o " "x oOo " "x oo " textsel4 "xxxxxx" " x" " o x" " oOo x" " oo x" leptonica-1.70/prog/cornertest.c0000640000175000017500000000640012265247457015022 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * cornertest.c * * e.g., use on witten.png */ #include "allheaders.h" #define LINE_SIZE 29 int main(int argc, char **argv) { char *filein, *fileout; l_int32 x, y, n, i; PIX *pixs; PTA *pta; PTAA *ptaa, *ptaa2, *ptaa3; static char mainName[] = "cornertest"; if (argc != 3) return ERROR_INT(" Syntax: cornertest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); /* Clean noise in LR corner of witten.tif */ pixSetPixel(pixs, 2252, 3051, 0); pixSetPixel(pixs, 2252, 3050, 0); pixSetPixel(pixs, 2251, 3050, 0); pta = pixFindCornerPixels(pixs); ptaWriteStream(stderr, pta, 1); /* Test pta and ptaa I/O */ #if 1 ptaa = ptaaCreate(3); ptaaAddPta(ptaa, pta, L_COPY); ptaaAddPta(ptaa, pta, L_COPY); ptaaAddPta(ptaa, pta, L_COPY); ptaaWriteStream(stderr, ptaa, 1); ptaaWrite("/tmp/junkptaa", ptaa, 1); ptaa2 = ptaaRead("/tmp/junkptaa"); ptaaWrite("/tmp/junkptaa2", ptaa2, 1); ptaaWrite("/tmp/junkptaa3", ptaa, 0); ptaa3 = ptaaRead("/tmp/junkptaa3"); ptaaWrite("/tmp/junkptaa4", ptaa3, 0); ptaaDestroy(&ptaa); ptaaDestroy(&ptaa2); ptaaDestroy(&ptaa3); #endif /* mark corner pixels */ n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); pixRenderLine(pixs, x - LINE_SIZE, y, x + LINE_SIZE, y, 5, L_FLIP_PIXELS); pixRenderLine(pixs, x, y - LINE_SIZE, x, y + LINE_SIZE, 5, L_FLIP_PIXELS); } pixWrite(fileout, pixs, IFF_PNG); pixDestroy(&pixs); ptaDestroy(&pta); ptaDestroy(&pta); return 0; } leptonica-1.70/prog/graymorph2_reg.c0000644000175000017500000001401512240303055015542 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * graymorph2_reg.c * * Compares graymorph results with special (3x1, 1x3, 3x3) cases * against the general case. Require exact equality. */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixt1, *pixt2, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("test8.jpg"); /* Dilation */ pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); pixt1 = pixDilateGray3(pixs, 3, 1); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixDilateGray(pixs, 3, 1); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 0 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixDilateGray3(pixs, 1, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixDilateGray(pixs, 1, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 1 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixDilateGray3(pixs, 3, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixDilateGray(pixs, 3, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 2 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixd = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixd, 0, 100, "Dilation", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Erosion */ pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); pixt1 = pixErodeGray3(pixs, 3, 1); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixErodeGray(pixs, 3, 1); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 3 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixErodeGray3(pixs, 1, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixErodeGray(pixs, 1, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 4 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixErodeGray3(pixs, 3, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixErodeGray(pixs, 3, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 5 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixd = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixd, 250, 100, "Erosion", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Opening */ pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); pixt1 = pixOpenGray3(pixs, 3, 1); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixOpenGray(pixs, 3, 1); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 6 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixOpenGray3(pixs, 1, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixOpenGray(pixs, 1, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 7 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixOpenGray3(pixs, 3, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixOpenGray(pixs, 3, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 8 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixd = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixd, 500, 100, "Opening", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); /* Closing */ pixa = pixaCreate(0); pixSaveTiled(pixs, pixa, 1.0, 1, 20, 8); pixt1 = pixCloseGray3(pixs, 3, 1); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixCloseGray(pixs, 3, 1); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 9 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixCloseGray3(pixs, 1, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixCloseGray(pixs, 1, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 10 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixCloseGray3(pixs, 3, 3); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 8); pixt2 = pixCloseGray(pixs, 3, 3); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 8); regTestComparePix(rp, pixt1, pixt2); /* 11 */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixd = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixd, 750, 100, "Closing", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); return regTestCleanup(rp); } leptonica-1.70/prog/listtest.c0000644000175000017500000002245712242266177014516 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * listtest.c * * This file tests the main functions in the generic * list facility, given in list.c and list.h. * */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_int32 i, n, w, h, samecount, count; BOX *box, *boxc; BOXA *boxa, *boxan; DLLIST *head, *tail, *head2, *tail2, *elem, *nextelem; PIX *pixs, *pixd, *pixd1, *pixd2; static char mainName[] = "listtest"; if (argc != 2) return ERROR_INT(" Syntax: listtest filein", mainName, 1); filein = argv[1]; boxa = boxan = NULL; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); /* start with a boxa */ boxa = pixConnComp(pixs, NULL, 4); n = boxaGetCount(boxa); /*-------------------------------------------------------* * Do one of these two ... *-------------------------------------------------------*/ #if 1 /* listAddToTail(): make a list by adding to tail */ head = NULL; tail = NULL; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); listAddToTail(&head, &tail, box); } #else /* listAddToHead(): make a list by adding to head */ head = NULL; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); listAddToHead(&head, box); } #endif /*-------------------------------------------------------* * Then do one of these ... *-------------------------------------------------------*/ #if 1 /* list concatenation */ head2 = NULL; /* cons up 2nd list from null */ tail2 = NULL; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); listAddToTail(&head2, &tail2, box); } listJoin(&head, &head2); #endif count = listGetCount(head); fprintf(stderr, "%d items in list\n", count); listReverse(&head); count = listGetCount(head); fprintf(stderr, "%d items in reversed list\n", count); listReverse(&head); count = listGetCount(head); fprintf(stderr, "%d items in doubly reversed list\n", count); boxan = boxaCreate(n); #if 0 /* removal of all elements and data from a list, * without using BEGIN_LIST_FORWARD macro */ for (elem = head; elem; elem = nextelem) { nextelem = elem->next; box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); } #endif #if 0 /* removal of all elements and data from a list, * using BEGIN_LIST_FORWARD macro */ BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); END_LIST #endif #if 0 /* removal of all elements and data from a list, * using BEGIN_LIST_REVERSE macro */ tail = listFindTail(head); BEGIN_LIST_REVERSE(tail, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); END_LIST #endif #if 0 /* boxa and boxan are same when list made with listAddToHead() */ tail = listFindTail(head); BEGIN_LIST_REVERSE(tail, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); END_LIST for (i = 0, samecount = 0; i < n; i++) { if (boxa->box[i]->w == boxan->box[i]->w && boxa->box[i]->h == boxan->box[i]->h) samecount++; } fprintf(stderr, " num boxes = %d, same count = %d\n", boxaGetCount(boxa), samecount); #endif #if 0 /* boxa and boxan are same when list made with listAddToTail() */ BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); END_LIST for (i = 0, samecount = 0; i < n; i++) { if (boxa->box[i]->w == boxan->box[i]->w && boxa->box[i]->h == boxan->box[i]->h) samecount++; } fprintf(stderr, " num boxes = %d, same count = %d\n", boxaGetCount(boxa), samecount); #endif #if 0 /* destroy the boxes and then the list */ BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxDestroy(&box); elem->data = NULL; END_LIST listDestroy(&head); #endif #if 0 /* listInsertBefore(): inserting a copy BEFORE each element */ BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxc = boxCopy(box); listInsertBefore(&head, elem, boxc); END_LIST BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; END_LIST listDestroy(&head); #endif #if 0 /* listInsertAfter(): inserting a copy AFTER that element */ BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxc = boxCopy(box); listInsertAfter(&head, elem, boxc); END_LIST BEGIN_LIST_FORWARD(head, elem) box = (BOX *)elem->data; boxaAddBox(boxan, box, L_INSERT); elem->data = NULL; listRemoveElement(&head, elem); END_LIST /* listDestroy(&head); */ #endif #if 0 /* test listRemoveFromHead(), to successively * remove the head of the list for all elements. */ count = 0; while (head) { box = listRemoveFromHead(&head); boxDestroy(&box); count++; } fprintf(stderr, "removed %d items\n", count); #endif #if 0 /* another version to test listRemoveFromHead(), using * an iterator macro. */ count = 0; BEGIN_LIST_FORWARD(head, elem) box = (BOX *)listRemoveFromHead(&head); boxDestroy(&box); count++; END_LIST fprintf(stderr, "removed %d items\n", count); #endif #if 0 /* test listRemoveFromTail(), to successively remove * the tail of the list for all elements. */ count = 0; tail = NULL; /* will find tail automatically */ while (head) { box = (BOX *)listRemoveFromTail(&head, &tail); boxDestroy(&box); count++; } fprintf(stderr, "removed %d items\n", count); #endif #if 0 /* another version to test listRemoveFromTail(), using * an iterator macro. */ count = 0; tail = listFindTail(head); /* need to initialize tail */ BEGIN_LIST_REVERSE(tail, elem) box = (BOX *)listRemoveFromTail(&head, &tail); boxDestroy(&box); count++; END_LIST fprintf(stderr, "removed %d items\n", count); #endif #if 0 /* Iterate backwards over the box array, and use * listFindElement() to find each corresponding data structure * within the list; then remove it. Should completely * destroy the list. Note that listFindElement() * returns the cell without removing it from the list! */ n = boxaGetCount(boxa); for (i = 0, count = 0; i < n; i++) { box = boxaGetBox(boxa, n - i - 1, L_CLONE); if (i % 1709 == 0) boxPrintStream(stderr, box); elem = listFindElement(head, box); boxDestroy(&box); if (elem) { /* found */ box = listRemoveElement(&head, elem); if (i % 1709 == 0) boxPrintStream(stderr, box); boxDestroy(&box); count++; } } fprintf(stderr, "removed %d items\n", count); #endif fprintf(stderr, "boxa count = %d; boxan count = %d\n", boxaGetCount(boxa), boxaGetCount(boxan)); boxaGetExtent(boxa, &w, &h, NULL); fprintf(stderr, "boxa extent = (%d, %d)\n", w, h); boxaGetExtent(boxan, &w, &h, NULL); fprintf(stderr, "boxan extent = (%d, %d)\n", w, h); pixDestroy(&pixs); boxaDestroy(&boxa); boxaDestroy(&boxan); return 0; } leptonica-1.70/prog/color-wheel-hue.jpg0000444000175000017500000001700411736161626016166 0ustar dandanÿØÿàJFIFddÿìDucky2ÿîAdobedÀÿÛ„         #"""#''''''''''     !! !!''''''''''ÿÀÆÆ"ÿÄ¢  s!1AQa"q2‘¡±B#ÁRÑá3bð$r‚ñ%C4S’¢²csÂ5D'“£³6TdtÃÒâ&ƒ „”EF¤´VÓU(òãóÄÔäôeu…•¥µÅÕåõfv†–¦¶ÆÖæö7GWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúm!1AQa"q‘2¡±ðÁÑá#BRbrñ3$4C‚’S%¢c²ÂsÒ5âDƒT“ &6E'dtU7ò£³Ã()Óã󄔤´ÄÔäôeu…•¥µÅÕåõFVfv†–¦¶ÆÖæöGWgw‡—§·Ç×ç÷8HXhxˆ˜¨¸ÈØèø9IYiy‰™©¹ÉÙéù*:JZjzŠšªºÊÚêúÿÚ ?ïù³fÅ]›6lUÙ³fÅ]›6jg¶·•í4äúõÚm F›Âiwßü•½†W›6,8Î\ÓŽ8Gœ¤h ÈDY4zw<ðÛFÓ\H±D»³¹ £æN7™¢i ÛX]ÜÆ¡™j¾ÓI¿Zdv_¬^L.µ)~³:’cZqŠ*íHc©§úÄ–÷탴Ùá5!”:ø&÷òÈëý®02 Q˜ñå¿Wõb#âZðg†\ãôo~[„Ðù‘Á Ò/˜xoün2ÿĆ›iWßð0ò³f³ývú†›ý.Oø·cùxw–ÿÄŸöª¾ÿƒþ«å‰…@ý|+Óà‡þ«fÍú6íõ ?úYÿůåáÞW1×þ•w½* XGüÎýyRù§MµxWQYlVqUšu%bÁBK$lë%¶ä@>5ÊÂ[—õ¤rÇ’š€N>Ëp{g®–Aâ`À`>¡8ÈŽá#)WÉž=gcˆŠù³e!€e5R*Üã— F½ÒH:DÂ8A«XIñ[·²µ >)·~'$öa²¼•mg­¥ÛìËJ9ßû™Âÿdž?j›•ÖömhµÀ SàÉ×öŸÃùߌÚ\¸·"ãüáËö'³fÍ›ŽìÙ³b®Í›6*ìÙ³b®Í›6*ìÙ²™‚©f (Ü“°o õ-fÇJQõ—-3ŠÅmç3öª íþQ¢Žç.¼Í}}#Å¥ÄmmFÂú` BAôa5x;ÿÀ÷ÂØmÒïV’i2Ï+‘ÈþgjŸè;g=Ú~Òi´¼X´õŸ(Ûcû¸ŸéK©ò>]T!b>©}ˆ«íGQÕK†6–m·Õ!bÿL´?ìRƒÄ°ÄQ5Æ¡ETPì^lâuºýN³'‰©ÈeÝPõcÑÀÉ’y Èß—Gc£C<2‘Z8Còðü ®7)ך2×A‡P|FbŠº<ŽÇÜy£ø2BcøH?&A›´›ëñÍU,ÃãâjœìÀŒ[0 yƒOT È»6lØJâOJq×¢üÎa†¢ÇŒkØ’OÑOë…ù•„To½ÍÓÆ¡Î?s±²GÈc•£}¤`?AÇfËA ‚ ¸!¹ZÓUÔô°«kûUØÛÌÿ¾EU ôfz–$Ž’ëö” d›NÖ,5NKm%&ym¤%NÕd=«Ñ…Tö'"xœÇ)FpCÆyG"’ŽÓ’:Ê~G:NÎö£Sƒ‡¬F1·þôyú¾?7 >ƒîXý»øc?Í‘<Ï&–é™–U§×8ñ V³ª²õ«¼GPw9-5pFvº=nŸY„fÓÏŠ'cµžâ^\3Å.Šîî>æófÍ™-nÍ›6*ìÙ³b®Èæ'˜L.ƒhôšp$¼e;¬_³ÍÎçü‘ï“[S·ÑôëJê¾” ˈêÌ~E÷f á—·—ä÷÷g•ÅË™$§A]‚­e@ =†k;WWàaà©åØwˆõ.£¶õß–Óøp5“5\ãâ—è þ¯¨ãkzh:,Ä€³Tôý_.’\æ™!еÃ[+ƬdÒ)ìû1'§†pº½Þ\C~r˜ótºÐâ¬9Ï«”d‹Èù²¬Ùºî3f©Û;6lت7HsÂxýÕ!dÿRAοð|†a%”¾–£…¸FOniñ¨ùñç‡y©dâþxýíé4Y8ôøÏP8Où»;6lÙC’•ß°iè?e@?¯øà\jJ³ƒ"75,Öûñb¤ŽTØÓ™Â&#„ó{±€1}›6l,Œ’T‰y9 í•,ѵsJôÏË f™ç~MÓ²ø ³3-ÎÁ·#3ÜV®ŸëeÖQÊ6xœNÔ§¾K¼•¨´º蛇/q§…DcÕíÍDLOr´âß*÷Èv)k{6™w¥n¥Þ ózÉSÔ‹æ@¨ÿ( è;_ù=HŒbËQŸpþl¾QÚ:1› zñï>øü^«›·ž¨#¹·q$3"ɋѕ‡%#æ1\ïžYÙ³fÅ]›6y»]ý¤IÙ®Öhø¯.!¿9DuónëAÚU‡9ß”dzùKÏÍ”âsOºz’š …Pff=UAfcØ\Î/g"2ØÝܽ(+Æ$¿ÒPñ]½Éì2I£ùv-=ÖúòO­ê\x™ÈãuûKo'€=ÍKç¶_Ù=ƒŸ\FYÞ,õŸªUÒôòwØtòɹôÇ¿©÷%–^YŸRUŸWi-#h-`‘£˜Tç,ÑU¨ÇáC·rz±ù3Hx‰õá]FðøÿÅÙ"ÍÖÍÑàÅXðC†?ÎR>d—e!X ò–”¬XK}Sã¨^÷ó„ôªêß ÷úýåzS¼Ø{›-üž—ýCúHþ¦|rþqù° ´-g@>œ úKFŒ¢»§#Lª´ø“â û,r­î!º‰g·pñ·B6¡Àî;wÐ0›Sòí•û½Ì$Ùß°®áUäáw *°*ãç¸ìFh{SÙœƒ,ÚB0å;˜Ÿî¤ÞŸwÉÍÓëå Ž_T{ÿˆ~¶;‰Ï2À…Û~ÁGS‰j¡º¤*D¬cµ¼ˆŸ«É!ÓŽJ†xYÏ@Cò‰Û d–I›”†§°ì€Î?7gj4Ù|=L2;ÿˆwÄŽaÜi¸sŽ(Jâ9ŸÐÜÓÉ9é·@;WÍ› ;6Ù³f¬—ɺ¡†GÑ'o«5>jX~ƒñ¯±#¢äÓ9/)£xî-˜%Ì %Ï@ëÒ¾Çì·±9Ót½FVÂø6YA䇪:’¯{«3¹ìæ4ÞÍäÁQ=ò‡ðËô<Ïjé|Þ$G£.þéuÜÙ³féÖ»8ÿž5èõWж!­lKEýG¨ãÚ«O¢¹Ôu©L6£0­c¶™Å ÃŽpÁi"¢…*À;¯Ü7ÍjbÔåÁáéàgg×DC£ÎÝ´z“O5ãHÙþŽ:5ö…,Ùn­÷ŠTxÓo¼mPjÛK²†ÆÑxÅ …ý¦ P»žì{œ›6u`(lÛ»6lØUÙ³fÅ]›6lU©é–zÅ„ún¡–ÖåJH½³)ìAÜæ2[Üé÷“éwÛÜÛÆO÷ì-_Naµ>*|@t5ε„>hÑ«f'µQúFÒ¯lNÜÁûp1ðp>†¡ÍgköxÖiÌb?{ŽåŒùõºNogêΟ5Ÿ¢{L~ŸƒÍŽE‘­@=AØ‚6*ñb1ÙÀH“ ј!êÁ7Ù±6ž¨gEj~ስò°„üöþ¹d4ùgô@Ÿ>CæYF—!h¬9ò®¦týKê2ŸôM@Ž pÇå"Š|ÀñȳÞLÝ(£Ûûq–¯0Ôôéã5š;»r…‰§Å"ÆÕñøXæã²4ùðjñdââ">(Ëj.?hi¿”ö·–ß—ýã±7‚)*]A$SÙ©þ°ßÍ“”c!RƒÐîR2”MÄ{ÆÈg´Û÷NT×ö‡!OÀþ8‘‚áz aþCoó!¸àìÙ›²tYw8„|=?g/±´gæ½ãôŠdŸ—~^[듯Þ'îm¥”N(LÃg•ÔÐŽìW­y)Î¥‘/ËÓ]qátãþIÄr[“Á§Ç§Æ1cúc|ù“Þ_DìÈB?‡,q™ëê˜â6]›6lµÍvl‹èÖ¡æÏ5é7.­i¥Ib¶HQ=·­'&êÕo'×|׬Øêu·¶•z&þž )+;$ìY‰ûB±Ž*ô ØM£tþSVf[m9n‹ÐSÕ0z•ãÒœ»d/2ù·ZO"ÙØê‘é×>`Óînïî¬sÕàŽŒlP-yž‡zžl"ÐôÏ2ØÜI&µ¯®­'à[(íx½AçÎ7rv¨¦â®Í›6*ó;Fšn½Ú|P†K™V•Q$l‘—Zì9óûœƒ5–g–¦¿½iD ? •þbÇgL4;[\TöþòŠç7Ú8qGU9GA•Hš}öö=ˆ8ôXå-ÌL¢/¹Ù³fÌWnì}½~»dA¡úݵÿŒñã1k2£P°å¸7vÃï]§þÿõã÷¸úßñMGü*îKÚófÍCçèj£GÔ?Všƒo÷ÛxçÎ˯Tèz˜Qɾ©=÷>›mœk,Ç×àòžÖòÑûòÿ¼vlٲǓvlÙ±W¤þ^­4kƒü×NäœCød·"—l­£Ý©vÁ‰î}[o ä¿(<ϼ¾™Ùßâ:_øF/÷Ù³fÀå¼ÊÓÉz/˜|÷ç¯1i_ZdÓÅ”Ó JýP =6C|Cz`8ü• ¶±ç­ @±ú•®£¢ÁohhâžD¸SGrAÝ…wÛ:ÎlUæ0y÷L‹Ê) Ëg|¾dŽÀXêw±¸X½ +ý2…·çÊ”Â=g@³Òÿå^Xy·O–÷OÓ´Û¨5·‚{•Iý+p€ýUY¾Ø4ÎÕ›aIÿÃ{s”ôÙìn$ˆ5ÃKiyn¬ˆÀÎíI«ô¹7Í›vlÙ±WœþbÇ[L©ÿ{ŠöpÔäS&˜µúî—áé\×q×”²œÿiŒŸê‡²ì/ñÿZ_{³f͘.ÙØ¥¯¯XòØ}n×Çýÿ:bx¥°c{cÄÐýnÔõ§Iã'.Óÿ‹úñûÜ}oø¦£þ?÷%í¹³fΡóô²9hú‚6Ó ›ÆÝs‹çkÔí$¿Óo,a˜ÛËs°ÇpLm"Q^$×<Çæ­k̾^Õ®t[•†)mŸ®‘°/iHÏð¿Q™Ý›¢Í­Ïù|=™Ç+20db¬:049I€<¶kŸeÇø2ýau=±Pú…Š“Oô«sS¿IPä _P·âbʽþ!øïøä·É·wÚî·ki ¸g…’âY*B*DêÌÌhià=òx1ËÆÇÿ¬¼‹«í=L:=DæcÀ1Êå}âƒÞ3fÍ3æ®ÎUùßåaªhI¯Ú¥n´³ûú ÚÝÄOú‡•sªâsÁ Ì2[Ü ’U£–6Ü2°âÊGv—Q“M¨Å©Äjx¤$>‘äP@ ƒÈìø‡6H¼ïå©|©æ;½!Á0©õm$#íÂä”>ôè}ÆGsØ´š¬z­>-N#pË!åÞ˜;8‰‰1=›6l½‹²qùkçK¿'êsʶïycs ‹d`¿Ý$¾ŽŸ"roo%Ìžœ@W©'j ’Û[Gk;u'©9Ï{E©ÓÏO= lj<”Mîëq/ëwŸžf“§.>Qo“é¯-ù»DóM¹—LŸ÷È?g-xÿÖJô÷{žQ‚i­gŽêÖW‚â#Ê)¢b®§ÅXo;Ë?›³CÂÏÍz±ì£Q~1ï4#í|Óþ<û>ƒ&?T=qÿd>dð‘¼wkØ3`[ FÇT¶[½:â;«wé,Lká·C킳 ¥Ù³fÅ]›Þ^ÙéÖïw}‚ÿð9(ÂRä.‹QªŸ f]ç”cï“ѵín×AÓ.u —^PÆï,ÁZFQP‹^µ9æBþëT½ŸQ½RæåÌ’·MÏ`<Ø{cu JÿU¹kÍJâK«‡ë$†¦x¨è£À °:žÙ‹Ú:L²Ä%ÅÁ¼¢þñî{¿g{2’y3HO&XˆñQÆ9˜ïÌK½¼Ù³f…ë]›6lUÛSçòÃËGEÐÿH]FûSã3ÚX)X£öëÈüý³—ùË_â]z(§NV”ž÷À¨?Gþ20§Ê¹è@:›NÎÁ±Í.»Gô—ƒö˵8¥ÍÄvdÍ_Îþ|9ü›Í›6lž)Ù³fÅ^aù×åA­ytkVÉ[Ý"®Ôg·jz‹°ýŸµ÷ç›3ÛòÇѼR¨xäRŽŒ* °¡<‘ùå†òŸ™®´Åè¯ûû6ßx_슞¼OÂsµö7´ªY;;!ÚW“ ÿ8}pÿ«æãê!°˜é±bø½µ´—Rãë7`2­­¤ºGÿY»’[khícÆ>g¹9Ñö¯jÇK Í!ï©óî ¦Ó§Š[@}¾A«kX­c ý¦îq|Ù³Ž”¥)H™$îI=]° :;6lØаó¯å‰~¿£\˜%fDxÏÅœ˜/ïb¨ ׿;“'ç'œÇÛÙ·môÎÙ¿«ÍoüjÒ¾ä”uø˜Ù_åpe”§<`‘C»Ï£±Ðè°e„²fÆ%꡹½ÏCÿ•Ëæêwe_hŸþªæœ¾mîŸþªg<Íä4¿êl¿[™ü™£ÿQ9~´ó[ó­æ;‘yªÜ˜mcá‚ Ø~¿-Äâ? <1L×å€Ç9@rosÐ顎aQˆLE7fÍ› ܸÇ/ޱÍ/iv<øœâ?ÝÒæéu<5!ÛøIéä|›ÍìO`3dãòÃ˦µÑ}pœ¬´Â³5iFš¿ºO¼rú3Q‡Ë’0yù­¥®Ç¡ÒeÕdþéΙúcñ/Qò–¿ÃZ qN´¿»¥ÅéêCðÅòEÛç\•fÍ b#ì øþlÙ3ežl§Šy$e#ÞdìÙ³akvlÙ±Wg5üåò›kÞ^]JÎ'“PÓš$j]ž!d^* 4û_Ft¬Ùn ù0f†|2áž9 Dù… Gp_#ÚÛGmãíä÷ÅóÐ^hü¼Ñ<ÉÎáê:“oõÈTQÏü]Áþ{7¾qŸ1yG\òĔԠ­±n1^ÅñBÞT'Á©í\Üb×ÇQ"g"2HÙâ7ÄOŸW/à@ˆôÖÀ$y³fÌ–Çf͉\N¶ð´­½( îÌxªí^¤Ó =ýåÌÓv>”u§ÙN´§‹WÄàFŽ ®y9«9íɉf§MªqL·¨ŽþgÞy½&Ÿ‡†ª þ±æìÙ³dÛ•"4jxâØM8#5ºèTÄÿœ>Ðì4r¸ÿ4ýíæÍ›0ܧfÍ“ß*þWjú×½[–™`h@uýü‚¿±}õ›è¤",šqõZÍ>–yæ :â—”cÕ‡éZeö³{§Dgº–¼6‘$µ ô_”4òæƒk§U¹ãê]²ïÊgݾ.ôû#Ø`­ËúO—m¦•n!SORC¼’ûR9Üþ¡Û 3Z0áŽYäÇ.}ßÒÞ;¶;o/haÇ#qê‘år÷AÙ³fË+³fÍŠ»6lØ«³fÍŠ»šn"x.#Yb’7•”õ ­±¦lUægü¤´¹çwå—“u62’aoøÆû´-ÇË9>£¦ßéMe©Û=­Âÿºä¨´‡£/ºšg©ð­¢éz婳Õm’溇ŸæGŸps3»&:Œýqóú‡¸¶Ã4†Çqö¾]ÀwÍS ]ù°µTÜÐÓâãOÌ¿”Ú‹5Ï—œßÚõú¬„ „ÿTü+ ûÏ9UÂLšÌW¼2Ú‘G' Á¨$j£S‰ø€ú3i‹6<Ü<»"Áæ:îýsãˆ=lû£»Y³fÌ×¥vlÙ±W`„5QðE¬rÏ*ÛÀ,Ò1Æ€³1=•Fäæ.¶7‹‹ù¦ÛôÙcŽd̈ÄÉ4.ß/ùW[ó4þ–—nZ%4–êO†ÿÖþÊÔûg@ò—å%x_y§ì4èØƒ¿ûþEéþªŸ§¶uk[[k(Ö΂Þ1Hâ‰B"Ž»*Ðf–y€Ú;ùôuÝ¡í8^=ñ%þ¨~ýQÕ‰yWòãEòÙK¹¿Ü†¤´"æU#`kXc߉ÿ(’|)“LٳȓdÛÊçÏ—<ÎLÓ3‘ê;6lØ›6lUÙ³fÅ]›6lUÙ³fÅ]›6lUÙ³fÅ]‘gþU‡é9ÿÄ? JüZúÿÔþ³ö‡«ëüÝñ¥{S¶lØGÇà‘ϯÁüªJ~ãü?Ç·¥õ:uíÃlPʬíú ¿ü²fÍ„|YóÜåUÓÐ?OÕ+˜ʬíú èú¯LÙ°ÿ¦OúwÈ-©ÿŽvéõ\0ÑÀÿZ ?F}s‰§ÔýWíSÓø©›6Èý_J~“õüy|YlÙ²¶§fÍ›vlÙ±WfÍ›vlÙ±WÿÙleptonica-1.70/prog/1555-7.jpg0000444000175000017500000063122611402774442013736 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÀ°"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?æW‡>Â¥“Kåóš‘Tu¯=l1ÇãMaÅIÔf‘°iˆƒh\РiÄRÆ:ÓôLÓŠnàÒ ŸŠbdkO©<Ó°$’¬( ‚Øæ”c‰Ï¥1 «Æ)@Å"‚O§ìfŒ'4лŽjFÀâ˜ÏžÔιÒ6šRy ®y l„ÔÌsÀ¨ñŠb£œÒŽd§cŠj¯ÍÈ }iÅ ™Cš\ü¡½(x§¸bŒfœ eÛŒS×K°1§`ÅG€IúS°<³ïJWïR|³ìh˜ÂŠP0qIŸpÁ¤0ö¦!ÎsD€’Hô¦ 4™HtYÕ`¶4Ä]®~”ð)¡0ê@ ±_J0OÍNe}¨‡$)§’:úS{Šp r8¥’O¾=©ç4 yëPÎíÂõ5&Ò)UAëÍ$lÌÿJ Æh#q?Jph1ÁÅ®A§…È4ŠÛr(Üc4ªFzÐ* <‘@ÅŸZ;Òät¤ÛŽ´¤ Šo´áHïJËž”KšCcÒ‚E/ )¸ÁÍH84ƒå$úÓFE(æ€ïN#ƒšF¥Zu¦1On  /­&A< LÓÔH®CàšFÆüS½é €2 ¤ Ö“;3I¸Lbƒ»&“#4‹ÞüÇ€t,5`t¨– Š•F)€å‘8|ö§‘M€Hr.3Švá‘LvÂu¤ˆž¨‹p3éJ£Þ€&¦¤'dg4 °4²i¤néNo ù‹ÀòEE·Ó‰É!e5ˆâ˜Ù'¦‚9Í<°›òàR¶*&$Æ(gÉçÒœ˜?- ä 1ó’(HÛGZkzU4€›¼t4âÜóQÈT8ã­0!í£¨TÊñO€ 4²“Æ)r2=é&Œ4gŠ1ç­!Ž S[ä¥&€C&)€€ƒA]´2àŠd¬O€ÔŒ`Рæ…;‡ÐQ“š@9ØaŒT„ f‘HÁ ÈÅ0Œô§–ÝšŒf€fZ…ŽsS`àóP’yÀF\ ŠLdb—Œ(ÅFçhÅAœóS¹Ü*¾ÃÍFìM5O\Ô»A¦mÓ„祚†`´Ä[uéH*f\Šˆ­@ HÆ)„SñAæšž)ø§*UŒ³.9§#$¥9V‚9Å2J—VqÝÁå¾@-“аª¢Ó¶Ó˜ Ã3´ýi@"”sÚÈì(§­BËÜTŒ¦@Æ…Ü)Bí4 NEQ#ÅFiÎH4Üüôà8Í1£Ï|SÁ¥8#B{sQ««}Þ™ÅIÇOQŠŠ8ÄcjúÐÙ Ó:Rn ô cäÉB2A ÑeE ÛˆêiOlÒƒŠJÀR0ù 0f¤ê” ŒŒ´½0=*G\ õ¨ú“Œ3Å:ðséHÇæ&¥„pi;ûǾ)"C‚M=qJAÅP†”aëIŠTm¤‚)=ûPH&œÿÊsPMçŠC$ å1ÈÅ=WÒÉœuÅH9Í9†iHæ÷–œƒ‚ ?!4ª¹B;ÐF§ ' nŠEäf‘”‡'µ9[4ÀR0(\àÒîÍ8c€# sÖƒ’žÔå8¥#u5cúÒJdlé[ ÔÒ‚$/4€PsŠxTy+Ö¤R§¥ 7sHjxÀÓŠ&FH4ˆC¹ Úœ<‘Qnç¯&*sNÜ)9ÈšfsCš:Šœ§!½…Fw`í¤·ó 6àI '"€A£8¦“Å {jNäÅI½òF;Q‘éHÆïNŠ2d'µ4 ¼RÄ̆€%ž˜¤R¦«Ü<Š8\Št1š`M’´'‘HÒm¤S¸Ô€3† óÅIÔƒÚ¡ççÖ¥f¦€]™9§dv¤BMSU½iIqL<ŒRªç4€œTœÓIæ‚Ù RO­;šbzT‹@J’éÖž²!”sHêDœt=i Éé@‡g­ Ï$t¦/Ïȧí#­  »ª×·FY‡j² àôâ¡–6ºƒÍ ©uç:>áÈUåÎ{ÌÈÑ»jèíM)äÒœqšGà ˆç"ÉÈb”` AÍ`Ð3³+†Šr‚Ä7jY9✘ ­pÒ)ÊrHfMØÅYb½ëHTíQŠqŒÓvo&¤~¸ôcäÏz@”,I©BÍÏ`ñ@ Î8¤Æ©<Ò0ÀÅ ¨ù欤x4Æi«`“Ò£''еÈ5À4ÈØäŒRr1ÒžW¡ ©Ð")ÑPcwJ²ã"ª+áÊâ†:Ô,qS3UvÓ) ŒÓv|„šLí¡˜²â˜R8â¢dÅLG¾i¥I¨¥UÅ<¦)Áx¦„D0iàb‚0iÔÄâ—6hȨ c$ i4ÓŸ8`œŠ?ˆæ€Þ‚i9£ õ <ˆ>”æ8ª—CФ„Ëº{ÓKsUârè3JX’V„I»hç½7½‘ô¦’vbZ”×Òš9Å*¸Ég ŸSGÈôÅ2F#Œu§F â#¾iÊwt¤(}h‰ñqEÇbR(Š3šNJrH§äˆø¦]©å¸¤1˜Æ7PÜô¡þâýi RÑÍM Õ}ØÍ= hŸiõ¡2‡š³JÄ ¡X•”l.;ñP±?(ÆiáöÀ=óÅC$ÁHcÛs€=f¢Iƒ*VRH æ•— B0øö§±ù1Þ€03KÁéLSÆ *ƒH#Š»úR0=)À4¥³Ï½=ví4À¼RFÝs@ š2zµø•y¦ƒŽ´…±Ò€@»Å9G4›€âŽ>ô§ ¤'õ¥#(†À¦ƒÍ)9âÅÞ=)£ðGZ¸4ÓÁ i p¢€ÅÏ4Ìx¥éÒ€“q#Ò¤ 6sLÛ÷¶’:Ò8R›I懮vä´»Î08¨ã8úÒ+‡ÎÞÔÆHO­&qÒŒçƒP¤ŠîSpȤÙü)¼SCg4)àЃã*}À ôªñàjGÁ P!¡É$gŠg˜I#°¨¤—fO¥Aop×(Ü`äŠ.;•Kdæ¤LŠ‚ÇŽ*niR2jUëM“ƒR-0¸ RE1ºŠrš`#h'¨¥ sì*º±zb´â Ô_hÿyËH•ÕÂùù·îCÈ4Ül$ËañZl×1ÙZ¼Òº*„šÍ¨Éd«†Œgu.¥Ÿe>áœ.*,½i=«Iœm#wµZi’@­aœŠàã˜%¤‘Œüädmì+©ðùéÊdz÷åfô`ìÓ²7çµBeÓŸ›¥Fó…@ŽNõ¨¶¥z¹ Ó‰*¢H6dñqNÉ„î‹e˜y`úT~hÁõ«‰rx'Ô@•“viXw-DûæÛбååñTüà²mêîü 8Űקּ¦3Šk0Éàfª-Î&ØXOÓnüÇŠAÃ"„Dþ"±KYmæ. u¬ëZÝÜ,[Kk´›¨,®&•G1SxbÑ$»’IµvV&îçe´¬½*Øl&=ªŒŽ SœT0DPNLÔYvä A5Ÿmò4JáŠú5T—SvÐ$ƒÌ_á4Y…ͦbzS£rjƒ^ÇÑ+fô•‡ÍœŠVËŽÔ›È_ÎËÓ$f ínË‚Ajhuê¬q­À×ÓvÍE¨\Ëo¦Êñä’?*j!sE5 oµ4>p/éZr•æÚ5Ì1êK-ÃÙãë^…g,r&ôpÊ{Š%QFW,g¡Häõ^yD`œãëU­¯c‘Ž% Aän¤ÛW4ó”ÐÒ0⪵äiæ nß74ĸ!Èc÷ºR³eÝÀ"óÞž_Ôâ³ü² œæŸ5äJ6PMÔË™gޘσUî8Æd`é–¦‹ÄgݸõÝE˜\º­“ÏÓ.ãô♊ëÁª”óˆÙ› 94$;šö¤€üsYVÚå­Ü…"bàæ®‚g4š`Ë&CÕËÝø«ì×M%I [k…£i†[¶êàïâ ¬É2:Ò]Hœ»…c|šš0Fx Ô𻀛fb²µHwÈÀ÷­ |Nj…'r\õÉâ¨EŽéÜ1$óŠuýü64ŽÜŽÕSOÔ⿌̇¡Í ; Úæ¨>Ô+n8¬Gñ5¤W^IbyÁ©.u{{0¯#ñŠ9Xs#CPŽgµ+o&×=O¥U·†î=‚[—ažjåäwQù±r¦›,¤ÈÄðf…ØO¹4Ы“Ú£>]¤yÆ&°¶dme-£9ó«zž}:p„îÛÆ(ä×PæÐ¨Þ,Š+ÕŠ8‹)l®¦ D¡_³(5äAžòWæSÞ» ÄqÝ…ÀFZN]k©×îÜ3Ò…#5NIˆæ²õ-v-;^Iô¬’¹£v: Ò”e=ë'NÔ㽄H‡ƒUõ/Áap°1$õÏ¥w°¯¥ÍâÙ=iãÖ±çÕâ·µ,AR2),u˜ï ûBœ 'ô§fF‡’Gj"‘˜á¸Á¬Tñm¤·ÿe’v†«—zµ–Ö‘¹' S³ê+£h¸Pj ›¨­ãß,ÁlµGñÏ 2ýÖ×%ãg˜ˆp”¹Î)E]ØmèuvZ…µèaÁˆôj¶‰ˆË1漫BÔ³¯ÖF$+c5é6ºœQïƒdtªœ9Y1•ËnÙ\U~ÎÌù51‘U2N\Öi×->Ñös8ßÚ¡&[fˆƒ=M9!àÖuæ§ ´c̘!aò楃R W ÿz‹0¹vX±‚*©VI3Ú¦Žö9ÇÈC})¸œŠ<€°„ìÖƒaœ‘“Ò©_êÖÚ\*næ=\³¿†þ–¹ïE˜\‘T¯µJ‹„ɪ÷wq[íè¹õj’+ˆçŒ´Ä)ãÖ¸/Äñj1³«*HÇ®y®øàõãŠçç,aGJÎk™‘¤rìÄ’{}+bj:™ ˆqš¬á¹$À'Ìê~´Õ„Ñ«¥^ę唖ddõ>•‡¥ÎðêD•$HJ•=«b?&;]62@Û'ÜŠ¬K¬Ï@o~™¤†È×Uư_;bL®;—J½7Z¬ÞgYH*=1U´ë&£4suŒάøziî˜ýägÓ­7`ÔÍÔícûdßeÞñ¡ËCZZ¡'ÙfÎãn_®h6ŠöS³ÆF ûÖn‘‹U¸E¦|ŒÖ÷Mp¿yÎOã]eÍÛÿcK3¹”d}kAµŠââï̈1R6ƒõ®ŠE+¦Ìz)ãéJOPHàã™’E;(9 ô$z×\—í†.%TG`v õíT|7wή2ÊÃõ©÷šâ[Ü”(ªLc·=(m6ÌÒuy¢¿ÃåÄÓû¤úS¯u¦ÖW©ƒþ¦¦Žkoã#h'“ØÒêQÆ|I†Ó·ñÍ=.-JZަ×7êÄ‘l0>•ÙAr²ébeçåÈü+“ÕíãY6üŽ zW]QÇb#EÀÛ€*%k"£¹ËÚkìaqÈÉ)ìj=rt¿)&&oº{f£{Qm­ÇÜ£°#5{ÄvqD-æ…BïÈ㹪I ܯ¬ßLuÖò•PN•¯¡ë]YH×G>Wj’ÒÊ)t¢¬€ƒíÝ󎵅 G£ÜËœ+Hü(ч™^ûSšæÿÏR@Sò¥kêäËeoå)ÆKª:6–Ú„©3ãÊFù‡sV|U˜Í¼(˜@ Zn×°k¹© óßxrYY~uR½rqßζ¯`€Ç,º¨”GáBWŒÇÛ¾k3ÃÅp—º‚884–—C êÏÀ‚f%_–­]ºÁ 1óð£­s:Œ"ÏVtˆýÇÇj·©O"j‘Ì,Qvç±4ùuL/môY&¶Õ0 ·ß^î冩$èÄÇ­uš>’cF»œ‡™Æïι´‚9ü@иL‡Bi»…´ ¼Ôæ½™$s˜ ît‹¡}§Fà³ùWªÁZ ‰ ®îÆàµDˆa@Ï3µ´oreŒ’+_ÕŠaæGÅn'ç¥pzëºëìd(#Jˆ+²›²2šI’s+edÎsõ®ÏF½ŽòÄ‹‚û­šmîæ“$ÁFõMʹí)˜"(Ô»Ü֎ͪw`ÒÝÊm²)'ŽÕo@Õf°¾X;°Aí[šFÖ›“£1-ùÖ¿Zëñur”^úÌØñ.£ +kwIŽG½s¶sc©*üàñœ{Õ­bé“R‚QÕUz×E¦XÅgK/ÌÌ¥ ÙÉ\]L5]Ó3ä7>¸ÍI>¡wq|&rzTš«FÞ!¦¯h2–ðù'€ŠsøPÞ€–§!d/Õ‚’ÊÄ€=j}R[Ãp¿jÈ8ʃèj÷†#믻ž /ŠðúÌH ýiß[C§ðì>•`FÁŽ{ÓÚÐn&=¦¬x™­›2´ºŒžý* »ØÛÍx¨Ö§ì©¿â]R[UXeÚìq€ÔÏ ÜOsbí>[æàšç¯à¹–î;ÍGå‰Û;;]o‡.aº²ýÄ^\jHZ–’‰W»4NæhÇ5qj(ëÞ°c©õ™dlûN1NÀ W^ VgÆCÚ…8©xÆiŠC!`sF@ã!]ÜÓ()ª85  € Œ)ç­.Âøö4æã¥gËPo3“ÅXnj9NzP¨})„õ¥âŒa1@XM DAäÔœâ„\õ úÐÚ•Ô•3@ü°OÌ?îÔ˜â™;˜ŸZ”Ò$‰–˜2sR¿Ý¨ÔSF8§(úÒ⌓LÛ’­bø–6‰:¨%”†×¶Uÿ1Lp9éÜP˜žÇ¡B`Ñï÷ÆFTõ_½U4;;ÜyŠÃ±¶)îH®ÙÔ2m mô¨Ìj8PÒ´ç"Ç#áµ¹auRb`FãØÔzUž¡k©H¿¼¡%ÏÝÿ×]zG ˆÐ(ÎH ÜÒ… ’})ó ”ã,¢•,5–R|ÅÚ¹^¹4Ž“EáÈá)óI(Æz⻊P£n8ô¦mWÚå{ûQÎ>S•¿±–->?9$cÜšX-$µ××o@1˜þµÒÆ ³1•Sr‡m;ìñùí áØøQÏ ¹NgK›½Bá²p¤çÛ5ƒ Ô·®ã+ ‚dô9®ZÇÈcç#Ö§!@Š*ÿtSçCåg!ks£ÝËBÁ‰Oó­§é—)Õã¶ÙåRU»š×kh^o0¢]¼Š²Šy9È4œî§§I~—n¶y2¿ k²xn[Jxÿ~c9aÜ⥵±‚Ø»ÄKÌjæpF:%+°HóÝ2+çžX-˜©ÞÞ »Ú·¯436Œ,á8‘@üM^±Òí¬šÁny«Ê™ÁÃuÍ'.À‘æú|—º~¢-ÑI}ÛJš»â–žÜ2à*öìMv-el×F(yÝ Sî-¡•1,AýÍ>}nº½‚Þ]xaáFúŠÀÓmïZìÇlήÌEzZEÂT( Ž‚¹ýV[]ÒAn O.@õ¡Kt'Ÿk#¯ˆTóÆöÝj÷‰tiÇq’@olV—‡4Ö‚Ý®¦–LžÂ·È˜p ÷¡ÎÌj79?I²O49€!#>Õ—¥þ# «œþ5è¬j…T ‡¨Z-*ÒÚF–8€f9Í%$>Vq>!ÞÚã¬k† jë¼?os‚ ³—$ž{ ´Ûoµý¨¦d=êè==)9]Xu¸»@cŽs\§Š´™g"î!¸†ºìaÀëÇjŠC»p`µLefT•ÑçV¥ê£Y(.$=³]N™£%•ŒˆË™Nãõ«–ÚE¬S´ëÞÄÕéTì`j©Nû£¡çÐß_i7RE%w–´tý*ëWÔEåÚípqë]L6qHL’B›úgm\ˆGJ9û&§â]FÅÔ £{ w…¡ÔßÈ€»ì0A¨¼° ì9£ŸK—Sε‹I­õ†êX¶õÅnèÚn¡<ë{pæ5Ãë]YÁ$‹,‘w+VA&5cž‚‡=,% DÁØqÓçwVsÏ®¿–Ÿ3 ííšôqצ(Ù•@`zÔÆV)Æçâîöö꥙TG­Hèöž1Șwí]i‚3*ÈPdõ%y¥’å2†Z®~„òœG†,îdšFÁX™H ÕÒ¦À·Àß÷‚ôèK€€ªú xHÑË…4{MGÈyÞ«¤¼¢ÛGÉp1õ®’}I´4ƒq2 $gÖ¶M”] ÙZ² ò7vⓨÝ@à4›-R§†è½ž•R}2ñµF‰Ai7}á^˜±ÎªO‹häž(·H3ÀïMTÔSSŽkm:;I&2\Hܯzè4]`ÒLr <‹–Z¥£ØMy©I}{\U[§Õ…ÊqÀíJOKG˜jZ5Í…÷î°ÎPŠëtK{µÒä{¼îÚp oW?0É I€ÉƒCÐ(žo¥é×2ë(æ"1bMKâx]µ(âE'å½ËU\ñQ=œ/2ÈÑ#0½?i¨rèr¶ž’}64™ŽwA]5­ŒvvëcŒ ²¨O^pOj‡&Æ•ˆÄ ‘€9¨oìVòÕáºÃ­ oÉ©Jü™ g˜]i†—zßgž Öņ‡szé>¤å±ÑMv3Ûñ¦m"©Ì…Ÿñ—$úRGmJ7zVu§„ÜéM,Ù‚J×q㚘¦SiéIM¥a¸¦p>Ò'ŽîIvª‚k2âÂòç_ÇçÌ-÷z צCG52ƈrdõ4ý¦ á¡Àx¼K‹H6’ÅjÞ•¥]Ùø~í¦/—BU~µÖËe ÄÊï%yÕ¯,0q€:QÏ¥ƒ—Sμ)¦Ü¥ûÜêôWœŽñ¤Ë¨¬Ø%B­E¶·q[Æ^8>mµè7]ç"69¢5H° :)ûOvÂåÔm­»Cjˆí¹” šÊñ•ý¥dÅΣ孽Ùâ•pÛ†:T)YÜÓ•ZÇ“Y_Þè7xÁ•=릵Ó%ñêj3áS ªúâºý Êúd–HFõëòÖµ¼vðªDªŽ+G5¹š‹GšxªÎò+æyîÏ ŽÂ“ÃWæÆGó²21ë^ƒ¨i–š˜Uœ·¸¨¬´K=:±.NâyZ=¢µƒ“S×I¸×®Íñt‰N=«¦´±ŠÊ*Ú£·½YŒª ÚžH=*®RVŠH<Ô‡ ¦Æ8'5"¨>ô†0±íI‚EM° B@ @§Ÿ™E# ÓÆ1@Æ1ÛÅ _ÐAjz pi8§mÂf¤Ú1@äb€" 5F8=êULšaS戃ž)ä9®„t¨‰‘NJP7Ò•Í8œ€)à P{F*1RŸš ÇqšœÆycÒ˜0Aâ€*ŒŒ¹4ã»Ò¤àCALw ’&¤QŠ‘€˜š@ èjàóSä.MDØ$)€£ûÔL@“Òžx$úÔm»f;Ó0à×þ¢ð@Ÿ»Œrźý+P䌃ϥyö ’é:³ùR‚wná½k°Ó5$½Ó¼ýÇ*ïµ”lˆO¹j9ƒî]¼)Xä/<ž+"Ë]K˹a+±QK-Ö”kÖßa7# «UõÅ+1Ü5XX…Ws¸ {z’K©-tÑ3Œº.ïmư5§I®-¶®ðÅ»œâ¶ä¿´Ig( Y@ÇÞëõª±7¹rÆi$·Y$_™”=3Y7ó&ª-–À0RwsÍ.µ5Œ‘ymû¦á€ïX‘ÜG>±ÊvÀ±>Ô£ê6ÎØá€b;f£–HâC3œ* ±ªöšµäÍRñ§]Âf@~䋌îéøTÛQßBµ¶µmwq"+ya@ù›½Sÿ„™VÿÊÚ ¾í»«'KÓÒçUh\‰œß£­è–ðÚï¶B9`3Ò´²NÄݳ¤†u³‘}ªQ!2GÊÖ¹¯ Þf!sóGó}+fBÒX%™eÇÓ6e"{©¤ˆ.Üm'š©c«-ÕÌ–û~hú‘Пj™ï-E¨šYPGýïZ­ggmo&ûrO˜Å÷zÑŠå]ÙH#oZ¯}©ÅefË8EÍV:¥½6¿xN>ï¬=NèK¯Á®Dl8õ¡G]DÙbãÄ—÷f¶Â}k[KÕ#¿-µJí9¬¿›±(`<Â~_j½ ›T´Ž%d3m GsNÉ«Ø5¹¸ÒmŒžÃšMñ†QÖ³nõ{k9<©¥*qSMmkd—ÃË<ƒëSf/oMáKcÛ½*>âØèç\î¡|‚õ\…Èǽ]ÓõXî02]¹â†‡sTˆP@â†mà ¤9Áè¼Ó^dX]Üáuö zã ‚5NóL¶ºš9§@}*•§ˆl§ºèN}vñW5+ø¬`Èxè(³ArꉷnÕ„ œZ­¥lÖ r\ñɨQ‚{¸„îTÏZ,îE}CY‹L’5389oj¯gãe+к– >j££\Aqã]7RNO¡©ô{-.âi&„o`rv«²¶¤ÝÜê’Q(V^A¢Yc·BÎÁTrMWiHG8®'SÕ¯5;··ƒ– «ß11MØÜÔüS%ž^BqÍc·‰õ8ÝK¢»Yv´z¬Ãk{æ»ÙtûkÔQ" (úÕ»D‹¶Cg«™´¦¼dÚQIÁª±w¨_È$a° „õ£ªáÑåER)\®k÷0Y}¦yŸÒI4ÚÐî÷(Tˆx=³Yšuì¨Z3ŽM-þ±› i›,Ý¬í­‹¹pIË/zrÊGýk'ûZÑ`[‰haøÔz†±okn²îܾôr°æDk¯Í&²mQN V­Þ£¬j î•ðzÍÓ'²½…®¡D½ž¢¹é/çÄhw|‹&W-݉¾†ž§®j¶¡³,}˜Tú/ˆä¾qo*øàŽŸ.³©YGk%¤ç.EeøjæÊÜ9vGl¥U—.¾§g-ÂÇHã…Rk'AÕçÔ'˜H‡bœ)¨õvÒ̈Ÿç$á€÷­-9 òí”*8É¢ÖE^ì¹'šyÌñÛÆÒHÛTsõ¬XüU`îû‰P¿­J‹e]#qhbiÈ@ç¦k›°ñ(»Ô¼ DÜ)ï[Q¶k£•ƒµ- ™2øbÜv¥oãŠÎºÕ­,HYeÁ=1W­î!–2¸1‘ËR³*è³[ʦëÅs‡Ä¶iz G;³Œíãó®†9—ÉßžÙ&›Mp“;p½*)fòá,£,£5‡qâËH®Ähr¤í&®Gœd#qU=Äi¨B6IK•îÖÐèC„áéé‰0G­qz·Š^ÞìÇÈ_¼zè-5˜_Iûc/#Þ‡ƒ™ìëéÍ8Hæ!ñ_[¼ƒaý)b×íÖý-÷çp0n.VÈÖÕ5XtÛs+œg8SÃú½Ö¤²I2 ‹?!ïTüE¥Ë©Ú’¼ë\®­¢¿–>è8 Õ¨§9Yž°È³šF“ƒŒŒV…®Ã©…BØ”u·23FÁO5 5¹Iܙج}sJáu?ÝÇ©}–ݶÝk³‰€M¬ß>?•y–¨Ãþ·,pPIª‚M“&zM¤ÌÐFe?1"­nŠä#ñ%ºßÇü‚qÏA]7š o'‚3‘éRÓE&NØõ¦«‡kd޵Ìêž'¶…üˆÛ98céS›ÿ²èÏr¯¸Jžù¡E‹˜›RÕf2=½¤^cªå¥s–~$ÔN¬–Óò " ÐµÑo<Ò^1))èk¦·´Ó 9®Üº2osyp@îH¬}wW‡Jƒ,óÐRíZ‹)¥ùú Æñº¬¶ð7‰<ÔÆ:êSzš&¢u+!pT/8â´Ðçž•ËøL´V¾JœÉükOQÖí4ùHü“ÐRq×@RÓR=cÄ‘isyewf­h:ÈÖmÚO+n¸¯][^<ÀÛ·)º=êÓLÐãy%Ef\‘ïTãî‹›S£ /8æ–N#ÜÜÕ5(.ðÐÊÏ÷ªÌŒ|’=k6Zò ‰Ÿ¹ÁªjLNÒ¬y¢@$ì !–À& óŠe­ÁcE>¨*8§"/Ò© –ÍM< .9¦’4¡§€ŠÅs@ @wRiê¼R/4ŠAÅ?8ôÖ£$©894Ý£’9 cOÌhxÇ•r3‘A&€qF pSA;x <Ó@ÅKŒ ijnr Óvâ¦ØyÍV9ëŒSž¹éNnœš¡4‰êHÎj4÷§¶Ý£žÔÐÜñL#¨¨ÏéR1¨Í4ä÷ª—ÒìfqÕP°üjѹ?…P¼´i-nls$e0Ïõª[‰œÇ‡,#»µ»–àoóINj¬-7QŠ#À õ9â—EÕ”e´¸òIÛŽ¡¾•&£c-®„ò¸ÃM.÷åsÒ¶õ3°–ÊæûnÄXv îN1š«ýœ[I†rüÉ)=æ´>Ú&𬮪“Ãך‚þO#GÓcĹ­;ˆ³¨Û¬si¶êrAÈ÷¨ìzãJC ¾;ñVonk¶„ …VSØšKKÈ?á&™ä ”lJF·¨H® Œ„J«o§ª‹IúrIJ¶³&™â)|Áˆä$dö‘õá 7 ¤ÃÊgðê(Z Û¾•¬Âz!aƒìk³Îôã¿Jæu–†©i@î 7ášéÝ Z˜Õ¶–Ò¢Zؤrš:ãÄS?t·ãÍt7He#pH'¾+µ¹}'V2 Uýù®Žë\²}9ä‰ó#©U_âÉõªk[‰:/ÜGÝ£* Ei—Ï›ËMÀcûÄö­m'O’ÛN¹¸™r‡o·GC¼¶ƒí猰qž´ï»B±>£bm4(€rv°8ìsRÙËqo¢Há‰8ãØTÚýÌrèÈу‰#=jxÄÞvY„E Òè=™—Fy-Z™KfF÷Í:ó)¯¡Sóoñ=j߇.-ÓÌŽgÛ#0 žõê¬~#Œ(êË×Þõºüy»BÒ’ ì+SKÒ_O‘¯Ãa P;ñÞ²|A:›ár#ã>õÓAsÆšaŠPf1tJ5°u9y^;ôšægs;6#_J“PI“F¶IÏ(Äí>‡¥WÑç¶´Ôst¹ìkcÅ YA,|‡9Ú›ÜHσIÔoôØ™t`¨[¥u>Ÿö('`Ò¨É>™íYúN«ge£CæIógG\ÖÔ—6¶¶­xÇåeÜ=ý*dÝì4gøŽèÅj ‰ñ4‡4ï,ihØÆ<Â{qOÒ­$ÔîΧt8Æ"_JÍ»»o‰iÁÀ?CB@û™WmÍ¥òBއ½mø– £ÒìÃ1! ïYú¾¥$š”sF¥VÕÜI™ 'PAçÒ麔˜e'jTö°æ;Ϭ!<1—¨õ¯H…J…SÉšâ¨F? ät-BÊIáˆ_JèuÙÒM&á `qò’+ ÃwðÛ$±Jä+V…~]'©ZÈÍ£k ›ò–€ô5¡â˜Pùs–Îï—¿m¿€À~i8üiÞ(p‘ÚÀ~ðLµVíŽÓ@›P´Äø ÑO¥?Ä:q²´¶ÚÄìÊœÕ/Tµ¶°ƒÌ|ºavŽ´ïÜ,¶PycÀ¥wÌV%ðý¬i¡ÈáŽéAÎ;b¹‹`WVŸùhk¨ðÍÄ3iÏûë’çÖÿ„€EÛÌþT㻲,øžÔEt“‡Ü$zTš/‡Åä)veáNHïÅ'ˆÚÚ9„q‚d^Xö­ êñi« ¸VÜF7PïÈ\Çñ ´qêÁGFÁ5ÙiVé”J‡åÀ&¸ÿMkƒ f» ê ›D1p ~U3¿(Õ¹Œ?Í ò¢…=«-|>I7~vxÝ´­lxÂ!äC.y AúT÷qOá—„6$UÆßz#~U`{êTðµ„sݼÍÖ.ŸZ§«C=¦®Í’vå5©á UfžØfÁ«/XÖNG˜XŸÂªþð­¡—{¦ÜMköç“vFH6ƒ-Ýötõ—l<³ã® h Ûa¡ˆÃ'—Œnö¬ß Ë:‹K#„;H÷&ŸAëú1Òn£mÈÇ }ër[Ë—´·Óá˜¤Ž ¹ö¤Õ’McR‚Þ"8òÌ}«#_–k=Z2Ÿ/–£i+Uaí±µ¡¶Ÿ2>ssÏ\×I£Z‹} L6âÈÇô®o\½¸½·‚FGXñ´î}kCI½uðíÁæ5 ~44ìJþG:ܘè™âËXíõ c9g\œö¥ð½ÚC|ë!;äáMAâk¶¹Ôˆe+°m÷¦—¼ÐÖÒt+I­!¸|™ v6ËåB½ˆé\‡µe‘¢¶(äà.GJìö†Bè8¬§{— ŽÅpµÆ–U'pn+€·i­î—a)&@Íz•û,í$‡€+Ëçœ>¢Òžžf ÒžÖ"{›Ú‡ÈÓÎýÓcsF·7âHÄ"œŠ}æ­-ê +NV@ûV•í©Ò<0PŒ<˜Qv´ é‚þk˜|Ò¨9굘þÝKPÇh žàVïƒ w|aˆÖ$ˆ5Ó3ä…zkv#¥ñ-Ü–ÑEe æ(ù‡^*Òè–ÓéqÃ*ƒ)PIü+#ÄPÜO ¶ ÅÛ€¾†®i^!·—>brßJ„´º9›IeÒµ°}×Ûøf½fÙˬßÄ šòÔ±¹Õµ—he.IƽFÞ3 òTEK:]À¢A26ç8¯2>ßâFC’­!Î~µêW“$¯#¯ÈªI¯+‡Q‚oí.˜E‘Š)ŠEŸh‰¦ysBxc¡­õ‹øE |ÍÛô£Ä—Ðê\OIÎZ¤Ö³Ãá`Û/»ŸJ­Ò¸½ q[GshFûÇcÓ°®ŠîÆ[/ æc½@?JËðõ­Û‹Œý í]7‰M M"6PàñDž¶Øä<9e£<–òœ&ÜäVƱtº=¬z}³HÝŸ­Qðj–¾ô\jG!Õ°Ý6ü§Ú‡¬¬%°\iÓO{n- ge O`kGÅI,:mœr¸Ào­]ð¥í’@‘; ˜õÍWñÔ±‘È'"–¼ÖØUÕ†—¡#"âyŠÏÓ´)µè ÓÎK3´ÍB3sáÛibXøjÑðޱ½¿Ùe!NIɧk'ašþ“ý“4pù¥·~•mü={q¤%ÂLY6çÏ^Çuª«DÛ‘@×hú¤š\p£‚D`0ü(m¤ƒKœ&‹w=¦¥o;K"½\a Ä (ë^[ghn’ÖP8™²Ò ì+m¹+éLrEÎÖ.·0môíïÌìû”Ê;æªj)çx¦ÝÔʺ0Àœc&¨Ía$šüwJŸ"¨ëW>¤É"ˆta4‘Kn§|Œ°½Íié,ztd³n•† ô­U#xÏðò=Í5›8ýhæSš¿ðÁ¸»B@Fn}]Õ4bú2AÜñãþµ·£"¤ÀôϽ.wp²9Ã1Á²k±—8ùOASêvò^êPX„Ųì}}« $1ϵ x61š9› ‚†FŒ+'PÐMî«ÓbQóÞ¶ƒs×—¯CÍ$úŽÇ7¬èÆöêÔĸLaϦ &¹¡É-Œ+l2b®•p0“pê}x§ÎÐYKx~Xt’î¤Ü1°«I¢%Ž…póe*+­ž?0š§ykÍ“Û3dî)ó±r™^·Xì$||ìNµtœà¢¨XZ(RÏ 1õ«§îgÒ¦NãJ€³Xׇ×Q‘î"lKŽ•¼ÎzôÜüá—§zI´;_CÌçÓïtéö²:·¨ïS[Å©ßH°–—óœ×¢9†I:¡aJ r@Æ=*ý§K g[i0çi샻=ÍcXø~;Ieº¼`#%{WV¿0ÀëYšž›5þÈ•¶Ç»ç÷*Cq34¸©ª¾¡*b$â1Û¯ë:*jQ©S‰T`jÒ‚í­ÄQ * >&YÚÀÒrw¸ÒVÔËÒ¼=mb7È¢I1’M?VÑaÔcÏÝ}ÓéZßu=ñQðÇ'¯j\Î÷*±™¦éi>Ó¹ˆù­sLBy±?…w,a ³§¡ö®wF³j—¶ÎI }iõd5صâ->´æ•"ýè$£d#ÄzVÿˆôY5Ž[~^5Æ*ö›£Ç¦#Hí¾gûÌjär0“ý“úÒrÖèNGðãÃk'Ú€óJlÖCxVü]llÏßÝÎ+Ñ0ó‘LdàŽ))»ÅX§¥éðØZˆ×–Û‚{Ö~©áѨj+pÒámt  ŒŽôò£)s[P±Ïkz+^iÐEÆÀqWìtkk]7ì¥r~cïZq¯= ]ÄšžgaÙý„ ³¾7ÉÊJv³á‘©j1L¸XÂí|w®Œ±–bI¬ÙüC§[>Ö¸LJjRz‰¥±%†“ma¬H3ëÞ®dô=3\­×aIŠA uƒP'Ž”$¶Àö§É&Hì.-!º„Ç(ʰ®;RðNéƒY¸ O ö­{é÷ØVo-¿Ú­D»†geYñPœ¢=›¡xzßLLÈËýïJŸ_ÒŽ©d VÚÀ‚ ]s¾:sV8©rw¸ÒF>• E¦X´a³#™ª–™á( ¾{‰˜IÉ*;WE(;;Sãf"Žf¨«{§Gye%³p`{W3gà@·Ï>èÁÈÇzë.7¨ µ4–Q»­ MJä6–0Y"ÅoUV øÇJC·“œP“òšZ°4bTtq•a‚+“׼ؚÇÝÅv,q€j6;†*”š“9Â+jV[ý»/a]I´†ksˆ xÀðĸȦ‡¹b““cI¿ü!‹ýæ_Ü“*÷Š-R ÉCj ŠÜbØù³šÈñr͡ȱòOoZ›bjÈÀðE©h.$ìÄ(­½kCT· Lƒå>µ„l$³Ó€q‡c¸Šè°Î9ª”½ë ŠÐóý+Â7"ãÍ™Š„?ž+SÄÔcW‹™—Ø×\ûvtëQí`´œî (ÃÒ4´ÑžÒàäÊ>ojÈT»g3‘r®ØÆi’©¹… ln(á5/M%ÜfÌÀf55Í¥·†ì| wÝJ¸üë³F>Y+\Óh77Úɼ½oÝ¡Ê ¥'Ô—ÞÐÍ¢™Çï$çéšOè_¢Kl™”}ë¥Äq……àTòGTskr”t9xJ+Q÷k™¸lzWXÁUøv¦#‡ð¤Éó†î‚”¥}ÇbÆÃAàÔ„#5™ƒŒTƒã9ïHb¶¦à0÷§H¹#ŠEæ+À©üb¢* p)ØÛÍ0Ö•˜v¦–Ü1Š6÷¤yëJŠP5€Š}"ã=h€²N)ÁHî:ÑÖ€#ÛœÐp¨E8ŸJB€¦M7Td—#˜Ïj@§aÏzhéJ”.E1PóÍf¯ÌäçR2`šz)HêiFPŠksj\J`0Žù¨Ø†éJÀŽôÓÀ œG¥eëë;éS¬?x¨ÏÓ½iƒ€Æ³õ‰¼­.áÿØ UGq=ŽCL´ºÔ4Ù!Y¼¸ccÇ÷¡ö¨4x¦–êK%m†dúÕ»áâ"ÒÔÿŒIªz9ŽO^ã%€ÿ¾«kîgbž­§"î ­É yZëša¨žB ¥eø‡M¼w$zÕMVâ{ùOµû± ÉþÑÅ'ª ŽŽhVHþe`~´×‡2í\÷†õI#¸:}Ç,2ý;WLÒûHéPÕ™iÜä Mþ-“¡“úWJ0ËØž•È”žm~émX,„œŸE¼¹ŠõìçcÔõn„VŽ7D§fYÓ“v¿rw–ÚÁí“[îI òó¸Ö›*nõdòG¾)4­^âëV’c9Ƕ)5pLÑÛi<)+€Ia޴Еù:€8®Bêk”׿6 ³®v¯Ô Ôºfµt÷©osÅñÍ'ÕØëW¯Jl„(Ü;W1¬êwHöölBÂ7Hãµ_е7Ô,˜Ì>xÎÒ}EK•ÊæMØÒgSÒ›/±ç][<Ž[äbXûW=¨x‚o¶¯“þ¡O/Þ¤¢Û•ŽŽÜ¶yÅZW! ޾µË_ë3GeÁÁ”ò{ñK}®ÜCo‡p ¾µj ‡$u 6Œž}EQÕ¤’¤ðÀqTޏ‹¥Ç9ÿXãhA܊ÚÿQæÞ¥c –SØ~4ÔX\Ôð²ÈæiÝÉ$à×RÒ™&¸=>úk-:_&[w.W[ú6®u8Õ9zj%D™²¥Ö@ÙÊš™¤ÀÈ4Æ;W9÷sš‚ÑÏjÚÕÜZ‚[Dâ˜5ÐÁq˜‰C¶XVˆ¬­eŒÍ¼$£ îÕÏZ_]é’ÎÑü'¡­9n‰½™èFR0[8¬+¸¯®5ÈÙÄ ƒíM¼Öœi)uÞl)ö¥Ðu©/QÒ~YFíÞÕ*-j r#JI',?ä5_ÜO!ŠÔ”pHïZÖð}žg-"œ’{Š\Ž×7C¤VãŽç§`¯¸4ª8¦³€@÷¨,â¼Gª^›§·¤cc½6Ó[¿–ÈZÀåäô­¢›XÜÔžU[cvã[iÉs=yŒ)†§§ÍçHÒ#“œšèô]jKñåI÷ÀäúÕ½jÎKû‹ŒŽsô®SC™­u„VèISF’BwLô‹ “ìÖŸ¸å½«¸×'¶× >@nVŸoâ ›­aDjLBµŸ#4çFöªÓ5Œ‰oþµ†1U´KIl­‰rÙ#Ò¹‹½Vøj¥‰# €•ÕK¨Cib“Ü|¤òÓå²&é³L¹dࣩêKa`d?|ä/Ö¹ïøJ¦@4X…º»Å7Ä÷J°ûŒ»À÷4(j7- K Hï4ã4Ù2KÎïJçå´»µÕÚÞb;çwjÕ±ÔÏBBñ€vákœ’öæ[·Ÿ'{g§¥\S%³ÑlšAhŠí¸ã“V;u¬m&õÆçÜ.ÑW9sâ+çºi"b±)8QÐÖ|—eó$w‚AR<²F`É&¹ K\š+H!†Xö¦·‹&[HˆPòôÂ…M‰Ìéõ{¹aÒÞhŽFk Ú¥ÝäŽó¶ì*[ëù.¼0Ó2mgÆ©xXôû‰AœqT•¢Å{³¡×d¹û E-#¼vºl2[YD³¹i1–Ís~(ºmQRNa,(Zé®õícóeažÂ“´ËsOå¦y鑸W o}sw¯ß8MÄíÝÚ¤mkT¹»)´ìn€¯ª]ÇÙµ)$‘70€=jã!9™jáã\v6ᦼþÃŦ¤ÿ,E±Šï`’;ˆÖD9 :Ö2‹EÆD‘ƒÈíI$‚$ô©öü˜öªw|–Ï¡¤†ö8Ïø’if{8Õè[½:ÃÂÐÏM4Îw Ç…}k-Ö¥tbòÉ'Z–ÇÄ–ca¹5Ñ˦†W×S³KÓìíÂùrp ª—^°¹Œ¶ï!OJçfñUܤ9BmGP¾Òaþ”eÕƒh±}¢ÉiwL¿B+ªðö‚Ö¯çM.[À®Sw Ĉ{1Îk·ð~³ö¿ôKŽdAOqNiò„w:X¸Ƭ “‘\Kk‰j»¤#œvËiÞ'¾¶¸ #yŠ[zóX¨6‹r±é…@>µN›@àu¨ú8,¾ÓpÁn}ëˆÔuíJîã̳GXáHïIE²œC”,‰œàSSh8…qšÆ«i¢[gId3}*µ¿‰î#ÐØï>H-Ø­>Gasóa‰Í4̃äB7£usÔ¯oRCw–P2¬j‰u“k9ŽÏƒ‡¯¥ºØ\Ú¼®Í dÍp'‰®¥qo02F+SÅZ¥ÎŸiAòùèpw°)hu%º0j`˜ïö® Kñd°ØJ³’ò¸M7Iñ-Ëê_é˜NI§ìØsž!Ý Úy"¡¶ãŸjàî¼as¤L?ñî0k®·Õ#m8^’íÝÏ|Òph|ɳM˜B™P¯û½ìs^{«xÂæi[.ÔRF}k~ß_Œø}®¥åÂíühph9‘¶— 1`§¦i ¼Y.<‘Ø®ODñ\<Þvj–Èî*[[SË <¶<µŒ9‘× hËåëš…§†äGÎÓƒX^*Ö¶œ‚pÒ1é\¾âI4ôJ¦Bä5 «‡:¹é°¨Œ`Ô‡­gØ^}ªÅg“( äƒÚ¹‹ß5®£äÄ7B‡©îi(· Û;cÆŒc¥féÞ!µÔ£ÄM‰äU«›Èí!2JÁp)8»Ø|Äñ‚ ÉéÍLÉœ\¾›â¸õól±pßJê#g4œZܸãÚ–a9cÓ¤U,)y\Ž3B&=0)˜4ýè4Öe##š.+ ´i2=i€³œt§4xï@Ŧ)Ч®jE]Ô E,:S¶äMØéOÝ‘ŠB1š€©Ýô¨H-É òQš|RL°Å ÊȦÎqJã&\ŠCó¡QP¡`3RÛ{šaR,-)=¨ HôÅ0d‚)¡N*U!AÒ¿)4”Ä#óÎiÅ€Z‚ v*¿,É© $&£niã€j“šhCXæ`Ž(éFE0òOaŠæ|Y}v&Ø?ï‡Ýk¦až{wÍx“C7Ûn`¾ÆÒ¾ UÃ}I‘GM¿·³Ñ#3¿%Qzðj—‡na]YÚC†„ö>õ£¢øxC’ÞÅû͸U?Úϸ}I¢ R çÌöúúÖ¾î¤YØÖ…Ϋ­¬©Ÿ³[d+v,{Ön™8¶ñ$êçد?Zêìícµ·H *§ßÖ¹él— y$1 Øþ÷­LZ½†Ðí‘ÿÂ\žTX w7â:×RÈwqÖ²ôM0ÙÃç\1iäqôªGLœŒäR“ÔÇé¥SÄò.p»˜gÞ’ê?+Å '˜øŠ5½æÞìÝÛ啎ì¯U&´t*ãÌûmë twKQX§¥í> » ØÎp]#ˆ.£ê9üê;}6î©*pÌX°éƒL·Šú¹UqºB\íãnh K_êü\qœcô¨uHÏÄH¿òЂ@÷¦x‚Êæ ï·ÂÇiÁ$u\Qc ö±{ ÔøÇŒ½qG˜u*Û¤³jÓÀ°HH|úfºë+XmGã¦Hîk˜×m%·¿0pÿ\Ö燖øÀívO$mÏ\TÏU ã£\w‹K™—Ž0~•—v–Má¸Ý8e )ï¸õ®W€M¥\ 6ÓŠãc±•´9e¾ØØÁíïN‰õÚvóéÅ7QhÖÛ±–ƒß¥>[{¶ðÜe²êqÏP¢³§sé±É(Ì1‰êsVµ$µz FÂI?Õmcõ­íQ–m*YbQó ;»Õ 6æó@¶`¿•"¹sßgéq?Tð¬Géš$·‰6Œ[€KçúUÍÕïu'¾sò£~dÐô‡C$“™ÕrSW1¶2;â¤`1M ±ÅbZ8Û¢%ñ$I)ʆÕ^ÒásʃçS»'Þ¨x’ÆkkÔ¼Œ§#Ú mbïT²[‹,Ä Š×ͰË\I \+1ùp«º)¥]º ¿*áK>—&— N[ ÎFqÚ™áyeo6ØÅ˜_?7½7ªÎ9'¸xcP^O—Ÿzítí-2ãt­÷š¸Û˜®t­EðJœÞºÍþîòÜ}¢" toZ™Ý­;›ùýßáP"“¸“Èæ¥È€>µ8SXšŠïÒR–霩ùªO ÜÆ–†'ÆâÙ©<_k“ê¹n¢¹»´Ã²êp¾•ºIÄÍé#Ð.¦Ûe#)œÕÄèè÷°—“‚XûU¥þÕÖ *¡U ô®ŸJÑãÓ­@À2°ùÍMÔPõ‘ÈHŸjñq™ í¢³‚Ä« · \>¥Åž²ìϸ°÷®ƒL›Vžo:o’¼SNJèÔËÔQ¤ñJÞ}*oχ†&¸{Öeì—M«4¬›»íZúõ…ÍÍ…½ÑO™ £ÞŸaØØ¾¬ –UDŠ0c¾)ž#”Gq*}ÐZOj2C'Ù W8úUŸ(íøÁÁ4_Þ±cL3I¡¿š2»~Qì+7Ãq,º”Š@aŽõ·äÜ  ¶Ábœý1\„÷v×mölù¬p@¡kq3¨ñ<æÖÂ8bU‰ÝŠÏÑìVÔ-¼\çoÞ5£y§^^èé7 È…£ê—öx¾~R…{Ò[XosOÅq,[ĈƒÃkÃö6“i±aBì2[ñª*O¬“Œd|Àv5‘{©5’[ÚA’§‡£ì‡SÄ[aÑ$DMª0¬ï ÂSK˜ç!²qSøŒ^.‡N79ÿXGjÌÐ/g‹NºUˆ¸E$êi%îŽúøz›\rT™jŸÄÎ_RH÷üŠGµRÐod·ÕFØ‹y§kcµiøŸNgQFHp7azU?ˆFã¤&ÁI>^søW-áðV8Ͻ-­Þ§s¦½¸ˆ•Q÷ë?Mk«}ELj|Ì•"„´`høžÉ ’96îÎ~¢º \4º<`ó´žkœ×&¸»¸·± —ÀÏã]¦¦‹ 6(Ga“õ5øl5¹ªÉôª—d¬$c9gŒa{Ðë¸cÛ¦Ï,k©4ýqæ9Ú\äzŒ×U“¥j‘¬È€–98÷«:Ï…ãÔ£Ìd,ƒÞµÊÛMỲ’!hü+[ÝhFÌéº|S v9û§¥hXiV°9t…ªÖþ)Ó.ÑC¹Fïš–çÄZ]¼¶8 Qï2´*ø²Â&Óšã¦0+—ð²2ß½ÏðÄ¥]¿Ö®µüYZDLl@-[ZF‚tý6xßýdˆr ¥¢³Õ•4}F+Ù.Œ¹bIoîÖ3¥Œ~&M§ï¦j L»¹Ö8÷ª+|Íê)59á×Ú,’Ìüi­€t3” K`¯ò±ÜÒ´té6Éò¨¬ïh×Rhö¥rÆ$ù«žÒu{ë)кƒ‡Ö‹^ ïs©ñ»F4¨Ôõ,¤ð¼2hg̈2¹ ûÖwˆã¿»Ò ¼¸‹fÌåGlÕ- ïSò~Åh‡ ~ùíšV÷tõ:näiY6j'h¶k+L–ÎïB•î<‡%ÉëW5­6QáÆ7–5ŸS\¦‹c=óË —Hv’ÄwÅW@É|5$QëêÍÐä ÖçfG·ˆu9<×-§ÙO.¬°Û䲿_¡­¯³  ¶#%TÇ­Sø®%°h[®‰q4Ñ$ _JÍСIõµeA,GÒ·-!h¼)aµŽp¥døU Öcã#&÷ ø‘aþÖhâ@H§« ·ðå¼k)]À6=k3ÄK»_“Ë1lV¾µa=Þm"&Z5ËJ]ƒ©§£êv‰g *6^NõÒjZd:w…dŠ%ÏBI®CHÕ¥Òä .S#pï]Ÿˆ/–o y€mb”·s>°·¼2ùüŒ ­5¼ ¯ˆc‡ÌçZ~ „9¹w8ÂŒVGžÑkí ]ì²Z®¬:‹í¡M.çR}* hÖ—–ï=Ân`@—ÅÒ\KahÒE±Yy±ªžÖ$³Sj°ÞFþµ*üƒ{›ž!¿0Ü[i¶ç`ln>ÕCÅ 6ÖQÝ@P÷½OÒ¨ø½œj‘»|¬PKá©^x~;™ØùQ6zЕ’`Ù±á [k]:Kùt9öÅeß]_ë·Ò,9û>qíG†¤2Ú\[MŶÞO½:-BæBöl%wŠÔWЗÂ&5I!~eåWð¯JEÂsõ®OÃ~63­åÃfSÐWa°0>••MM! ôÆàIni±.*WíPY Æ1ÓŠ ˜ÅHpÕ\(°†8ëB’ÙÜ)åGjj€ `“š7À§ðÀâšäSsN,Hâ¹ZnJõ BWñ¤bÝ© 䜊QóÒ¨—°ÍJÇ`#½D<楖9qRàb¢\T¼¡!1ªÜãÒ¥È"¡L’N)Bw•BƒÉ¤ äÓ£aÑ…Î:P;+x…|ü§œÔ²'¡ëUJ8O­l â¡'š~sša4”ÂiäÓ0;zzÔ"¯ÈÌ7À=jÀõÍr6ªóx®é¤râ<‘žÆª*âgMò‘œ‘Hvž?d\Kxú´a3ödNHèÙªÒ¤šœw[ܺˆŽÑâ8ç8¦¢'.†ì sÁ4æäŽ„Œ{Ön‚&J 85YÝìj¦«s/ˆžÙð"@FßëJ¹Ñ(8ÔÌ/CNÆàXöª’Þà ¤³¸ùb?5 R®NdVp õj Šó»ûÉï¯d¹Âõ\v­áíQË<9` œ³U¸4‰æÔëÆ@ÊõïM%‰ã#w¬«Me®îæHÓ1GŒZ­¦ê·ºŒà©EK‹ѱ,(Ѳ0ʰä‰FÀÅX,}o.ä‚a ´[åpN qI]è=¥è‘B{UØþ^1Œt®kDÔn&Ôž…ÃýÞ•Ñ´sïE­ ®˜ölðy•^hcxÊ2‡™¨ëÂÎö;eL“Œûf´Ä¡Ð9àŠ¦šA 4Q˜ü¢2˜Æßj¨úl ‘ »‰·íVC†'žô¥¶÷¢âÐ,aqŽ(TULcž•”'9ÀÍU²ÔÒ÷Ì ØÅy  ZË”ŒY[ņ˜ã!x½iéÖIgh‘(Í9ÕYà  ±°žyÆhoKZ’¶28§¼bª¤Á±VÈ©ÉaŽxÚ92 Ôºe¥‘- !IïVA­1æE!sÖž 2hc¸…£‘r¬)-m!´@ Uô:ài¡ÇB{ÒÔv+^XÛ]º™¢ sÔÕ­‘¤ijÇÔõØlœÇ2Jݪ¶‘¯\ß]˜%ƒjàŸ¥U„Ú:GƨÄCvEI¸çµ9\cš‚ŽOÆ2(Ž¿$Õï “I\¯Ý&«ø‡Kžü¤ ²äcwcRCtžÒcŽä~ó²Žõ¦ñ²#íxjj·ÞœŠÎ]^Ú8íÞC8tô«ûƒKë5›L´ÑV[ i®<é" èMZD 1ÛÒ˜FÖëÞž#4] h^ãÍxºð [}®„Æ+6mR {ø­Xòt# ­#‚ƒÏ5Zír­ž™ik#Ë( É&¹DN£nÈ+Óêk±GA…=ꎡ¤C{q ²c4Ó³¸5¡jΖ1Æ: j­—‡í,'k„Ë99æ´“Aàw¬ÍGÄ6#kK½óÐRÕ½ÐÔf9äqŠ¢lm­§3Ç yÉm¼Ó_W¶IrÒa äõ‘Šm'ºòäWPN¡&6Ñ·y§Ç¨[ˆç.r*Å¥œ6‘¬P¨ æ*I1œŒSãbÇè)]ˆ[„ŽxÞ7PQR Aeamg• c‘ëV$ÚW­@—!7ùŸ.Ñ’iݱ²84›KiÚhâØç"®²£ÆQÆr*…–«m{$‹c8cÚ´,€â– ¬Eöxc‡lQ\ŒYIkiz"†ne¾ítËÈé\ýæ±iÓù0™çEþ¢šlL’Ö»ûdË™H•¾Œ #ø® ¼XÆp%‡bƒÓ½uZ^©m¨Á˜ä šrLF’ä}ê\Љ\3šzƒÖ ¢^<ÍT¸µ¶º–hu5hœÂMSyUcnsG 3ãÂZeÎLkåŸöj8|§¡šFÅlC1'åjêàió4Ek2ÓNB ˆ{Õ¹`i €ZV#šWC`‚ÙK´Õ£™Ø,Œ›OZÚérZ.q ù;MÐí´¤a,O$ÖœŽÀñÀ¦—ÜÑÌÕ/AƒÍXR@š§  NÄìç­!ز°¥j¬2€9õ«k†Ã Œ–.8¡œ“Š‘ŽqI·š@3yÇJh!¸4ì`U‚qÍ7fÁLÚsšT˜ù˜#ŠYGªN:Ðùb1P‚EH§rc½!àciËÀ¦àŽiÀ`gÖ€!hä$àðiÈ„ 5=Nriw hˆÓ¸P (}©T „š`*ƒFéKà“MbOJvFp5²N1NE"‘ºý).6f«†ùùJW}ÅÎ8ù~”À0sLjŒsOsÁ¨ñÀ4”ÇýÃ¥DÙ9¦19k‰´»6ój·øÎ…ä×k3Øó\Nž‘\èú‡š™Ãã×­\‘GÔçºÓ®^A“H>ØíPøM™¾ÔÇÌ>õ.”Œ¾‘”`•¯×š¯áâßØ×ž^CŒ}ñVöv#±6«â³›ìöч çúV=¾¢F³%Ô¨P•#oáýkWÃ;«[••CIæ–ëU­áx¢X^$Ú¥ºzzÓVZ Ýšú.¿¢íƒd ü£w­jŸi´šãxýA®NîÜèúü[Wpλ¤dy?Ä3ùÔI[TZ×B†Ÿ¦Ckaä0 X|ç×5Ãj0ýšþâ(³ˆØæ»ë«˜¬m^I=ÍrOe+i×W³æJw öªƒÔR]‹~;a“ üÌqU¬µtû»ÇpIÜp~MIáÉÜC*’¬çF•2jw‹"äãèMWWq-­7U†ý§ÊÀt5…m|ïâ6!r”Ç ¦iÑ?<#…9ãëÍ6ø§Ó÷§%0nèê•!…Þf'¾V³Ö`¾vÚÀ0c€z‘Tõ[¡%ìZ~HÞÃq ÔzVV§¦¶qð3íÏ_CIG¸Û®‡MuÔm$m>Õ³s«[Ú\Gä³àqÛ5“­8»žÂ@~úƒŸÆ«jcþ'hy긪µÒ¸¯Õ2^[¤âÜ0ó$U[]!Õ &ߘÖ/Ù$]r<¹Çy?JmÆœn5ÇŸ–ùþ””P\éæ¿´‚4/(Øý1ïV-­àˆ…@C†Ï®k”Ö4Ói±ÞXcn+fâäiTg%ÙÔ(ÏÒ‹vRkÝfMF;]¹É;ºÖgF€8<\mÆ,ö"øJZVP̾µ-…ÝÍÎuO™ñô¡Ç°¹ŽŽ ˆ&ÜñÊÃó|Ý*ŵô7{„O»aÁ®'JŠy-nVÚN3ô«^­û€ÿ&3 =èqc´f*²À¯0bÜ •Éñ×5¬_ýŠÈ¤'3ÉÀ­BE7c^+”›Ìr•üª ܤ2Hz*’j¶ƒk%¥–éI/&]³ïW&*öò«}¦˜_CŽÒdûN»½ÎCdŒ×aödÃìˆê+ˆÑˆ]rnÕ¹ ä>y‹ÍÏmÕÄxqÜßJ£«ÆF}j« \¦·ÇÏ2¾)ò]Šö=YÌ*ÇNõ™y,Rî´–p'Ö°í´Ýb}Uf˜”ÁÎwqY‚áu¶W”™ƒíV¥ƒgoi¥Ç¦Y4qYù-ÜÓW†ÊE¶–_˜÷ªÚÅüöLhÍ™Xcur—²<Ì\¼²1ùhQ¸îvúþ¬lô‚ñ6ÖaH¬ ešY-ýišÜr.‰gç»#°©<ÍþŠ1¹F½4­¾£üW¢H…p'c†Åt·µ´±D†T20Ë+„Õ ¸«Å<»¤ÝŒýk«Ð4´÷{¹åÜ¡Q%î‚z›s]ǧ’ò¸ œäÕËMJ èwÃ(e¯5¿¾›R¾‘™È†<œUß Gv<õBDL‡“ØÒäÐ9µ;vܼ֬M™¨IO!O8=nk€´yáÕ„î—q§i¥êÒêÊä«¿¶(ä°sõºˆ~VäÔ—3œ*#ò¸ÖgŠä˜i.!^x®Ê¹­k8xØ‚*ºÝ¨ŸkÊOµy¾™¬]ØÌɹ¸>ôëë}JØ‹™ÙÉ'!·nÅ_³'˜õ2ÅrsÆ3U#ÔmdvŒL›éº¹[M[PÕô±moþ° ¬Å»W;qmy¦_¯•|ƒ‘ÐСÜ|ǧý¤AI#£'&³áñ-•ÍÇÙÑðùÀ®{ÄwÓ5¥¬áeP^±“N–}EÖP9 j&ÎçPÖ"±‘D¯–=1WcÖ-~·K±­y÷‰¢–Ø’V%„c5,zV«©X@ëþ¨aQ­ŠÁws»KȤO:7>»»Veωá¶ÔL à¡‘ó ×9«Iq£XE§+ýõË~5€c2*%³‘N0Òàä{%­Ôw0«ÆAuÉå"@JÆðŒ3æí¸ÅòçÒ·%_Þ(ük'£-jG+˜ÐÈNªº~¢/#•Ôd#XÞ'×°ÚÓ?ÊØì høfŬ´Ð%ûíóÆ«–Êâ¾¶0TbOà(OV'±‰¢t¸†íÞ$zŠ’÷T‡RÒ’$ù®…ÛÜéî-`¹‡dÈMbi¾wòM&Sý] JÃiÜÈÕ¡û–1wF ‘éÍÔÐÿj[8ÏK}:Öî­£.¥4rÚS†÷ZÿÃâæxÝXPûâ©Iu+(I} Úý¼‘6àLúÒµÄ0xžC…û¤Ÿ¥Z¶ÐBjžicŒ‚˜þ#Vn´$ºÔ…Ë`(rŽôs ³(xšt“ìêŒ0~n=*Æ·¹Ð¡š#»ÊœzSõ®ü·‡¨ÚGµiØéñÚX-³|êT†üi]YÌßêpKh šP®ƒ÷¨ôëC j7‡pSUŸÃR YB|Ö¥²NîƒÒºK›Aý–ö°.2…T~6“Ðv±Íxd —^ÊRhPÅ1ðà^jö‹¥ÍcòIƒ#‚i4}Ë™®.×÷…²«ØPÚÔ,ÎŒ±‰ì2+›Óì&½Õ$¼œ|ˆH@}t§·±>Q£5 –Ъ¿»"«K#lýÒ \?Σš6Æ•õ‚Ñãß® ‰ü«KÅvŒ’Ep£äUÇãUôx|FëÙKfºÛËT¾µh$G¤™)kqö†CLˆþén˜ª^¶?h’r2¡p3ëTF‹pu&µ@vƒ÷»b»k[XìíR×…ëõ¥'e %vLWŠâüE :Œqnû£}MvÃŒqÍsîŠ÷:ŠIâSóJšnÌsZÖÓA¼QL°ErFÿìÞ&yîy›N{ éôÝ;]äÌþ§µA}áÛ{»ôœ±^Fà;âši1Y´sºåéžùîÕ²¤÷­½fto FÀ˜­G¬hsÞß@°Ä*–ª}gEyt¨a·Ë4\mõÏz«¡jGá°«¥9%söÊ­â4ÈÀó tÞÑ®tø]§?;Œì+&ÛG¼—]ó^-¨²$К» lCâR[YŒÀ Šë¬‚Í”l®#Ö¹cN—Q×ü¸”…e»WW¥Ø&h!-ódŸzRØåÁ•é^mâr5GûO\ü¸ô¯K'Ï¥p>-R5\gï(¢žã’ÐÒðæ± µX&—k¯57‰n‚Úl…÷´¼:Öl>’tã˜.à{ŠÝÓ¼5 œ‚Ie3H½ v¡Ù;‚NÅèæÒÑî¦ùdpx=«Otÿ„˜1n „æ½ XÄoâ]¼vÍpmáËë4PåUCšqwŽà͸eLt ÍyýÞ×ñ6 ãÍ×m¦h‰bL³Jò\c÷W'©x~ïûXˆ7‘#n éš#k‰“x¹yYoÝ‘Uô'ÐHóásØWOq¡Í--ntÊ8s\ퟄ¯šô‡ýÚ)á½i¦­`±«â°?°ã=aU< »-.d=AÎ~•gÅñ˜t«h‰Ë ŸZÔJÖ@®pº`ŠmH-Ãm›æ¯Hòm¡ÓœBÆãÆk>¹‡PÿF„º9ÏÝàfº=@¹‚ÆU»œ–” » §&˜$Î_þIÖßÌë“°×uä(þB̆\Ÿ”75ÃÇá›æÔ]#1ù½«®Òü3 ”‹u$®ócœµLšsZÚ3!%†psÍ%Õ¾øØcp=A«ªÁQ],k ‡ñšÌÒÇ”êPÇo¯íN88®ŸZ–1á÷RFæÁZçõmS†éÞD23¶A_š´Ç…®¦Ñƒ¼®Òà†¶mhgf/‚[&e©ò©üC¿Öm-âöòØíX:f§ø†ñ¾zסhÚJÙó¶û†4•3i;Ž*çâW‘o„nHEh5ÓxV]9,”FÁgaóç©5£âŪG•ÂΣúÖàë˜.Ök‰vªp­N!f™‘âë‘6°È¸?–ºí6îÚÏDµ2L*þ5…â\Ë©yÖ°ådôíZO„¤òckç'n ®î'nQ«ÜÄñ‘w«÷Jü¦áFÓ’M×yã¡5Öjº :”0TaO¥rIàëÕ»(Ä,@ðÝ馹l)'sÑmÚ7‡(A±X¾&ÕŸ$\Í' hé:p±µXQ‰Úɨ§Ñ–çU[ÉþeUEF—+S BÐJæúó-3üÀÙ®®Ü;Sü±£R**Ò“¸$yŸŒ¥Y5ÁØ ®»Nû-Æ—Œ@ ý*¯Šü<·5Ì ûáÄW#§jÎëìÐ,€·i^1Z+8’î˜Û¸DÞ$híûɑ튂ü<:Ãîà«g5Ùè~{K¯¶ÝÒ±'¶k;źÍ1»K)倪滰rèjhövÎè°y ŒšçXÁ¶’·0t5ÝÄrTu÷¬ßad™Î1Ðg½hjðL¾‚?(ïT^ðìîVæàì@rÖ––ac›šy¶ä*˜Òé]¾‡¡¥¥©šL<ò`–ô¬ønê ×¹µBÈÇ´ð¦H4óÂëIkp)ŒiXô¤<ÐcYÁ§bn‰“'ñ•ªA¬Ï x÷JëDK™åï\ö@ñoÞÈaùqT“%8'`$.ìt9¦;¡æ¨jV2j¶ Ûœw>”’*æŽáÉà÷Ö>¸¬‹¨nåÔ UmãÉb¯µiÃ…ÇÖ‚ãÃòöš ÔäUw•a $…^iužš?ºÃ¥+h-Žr3J0„TÊÆXŒãœV –²÷Z“Ç)¡ŽÑÚšW Øé#l9ã­OüŽ>•J2\š/d°“ÉÉ´ñJÀX •#ð§ö<Ö6™ Ö[4û˱ÜG¦kMXÉ`=ä÷å=ˆÆx¦oÀ¸¦»ªFÏ!¯$Ò(›µ `¨­î㺃̈åyúP¯»%Ž0iˆ§m¦ }Jâë²€^¸š;tó%p«Ž´…øÎ+œñS–üå2wM+°Ùö—v·gÌ·pØëS³Ü}z×5áï±")³4ƒæ˜«ºÞ±ö8V8¹’N¥:Ù =.k3‚[)Sž3Ó“ŠâîôËŵ_iv,7¥K jæsùãx³t§ÉÖâæ;5lçS˜3`t®oSñ³¸ñFò2O½mÚ\I$Ì9 ~¨qiÌ‹Ñàñ§qÈëžµÏ ›÷ñ‘‚E¬cð­„œr>SM« 2Ð`ç§JaU3 I®sĺÕÅ—¹Á`MihwrÜiÑËprÄg4[K…õ±§äËwõ¥ŒÈàSL¥ôéŠf!öµNÝùë\ŠÑ¿¶Çp@Åwb@2GJ˺Ò,µ ¯>`åÆ1N.ÌƆœ1i;E8ßÛ ,Ì›½7V^±©.—¦¶Ìn#j óù.¦2–!9ªPæÔ–ùt=vRÿ!ô“`Ù®'Úû,‹mpÜTš½©xŒ½Ôv¶‰¹ËOlT¸4Æ¤Ž¢ ñ¥P9õèk‘×µ[›brž`9·t›¢öfbÎ@$úæ‡+Žý G=r=)âà~• ¸X»Ís÷„šç´æ£ê}iY±ì?ÆqïÓ¢eåwcz»áˆŠhÑ$ŠAäãëUôļ`¹ $g'¹­Ô)Âàb›vV%+êI,1’Ðnt÷EV¿»k{'›ï2.@®KLñ¡¨k1Ç»ldò$›Ô±Ý6qÖ–zž´Ø×8Á§ù‰à‘‹$dŒð=M9ÔÀäÓPsÆ*&¸…T •7žÛ¹£q“#–Ï·4÷“jIªñÈ7 kĺÌÖ6ªL®{P•Á³p\o 03Ò–ÞRï°Ö~Ÿ0’È“µ]²ÆöõªbE‘ fBBüßÞ¡r9ÁéJ&PHâ¤@üjF41sž­Os„'­G€‘ÆiZAŸ­!؉üÌ)ê ïV‘ÕFzSåzÖV±©Ã¥@$—©àO}¥ÍS‚FÓ¤Qä–êkšðî³6«q#±Að£½t— `ã¡«îGæ0 àT¾~äõªÊÅ‘ùQ „>Ò ,ŒÓå¸Z™G4ä`çãÒ˜ˆsš†Xã½TêvB\~U ¬äô¤ÔOsA¡dzƒÌÜÞì;Ô_³‡&ÜSËQÅp¨wÅ:HaiöÀ çüG¬É¦Z#ÂÎqÍ;ÃÚ­Ö§hn'Øàm¢Î×ÖÆÙ@ãc€WÞ‰BŠª£h§nWÆ)f !r4®[‹±ŒœMVÆJá5Ý~[›¹-!1^;šØðºjFMÙýÉåAjÑÇBTµ:Ó­Œæw·F÷ÛÍ%Ý•½èUžÁzUMS[z(‰7ÎÝW-?Šukyÿ{E985)6;¤w6Ö°ÛDz4 +F"Ž•ƒg¨›ÛgÇ5±nÅ$ç5-¶. $;ŒTÊN@⦄½@Ã#)ìx©Ç¥4r9åPs@ŒžI¡Ç4åË) z jd¹µ+6Þ=)‘ž¦˜ 7UÇ­'œ€2E+qM@v#Ò€H‰qNÎE5ˆè( ÅqšU$ƒÅ IëHA=é0@¤Ð“L …-H¹Å(>½)€ÅRNiÄ`ýiG9Å4ç4€j&’jE¹æš œŠhP¯Á  d*kfž?»Þ£fê(ÞM/µ § kçiÐNN)ÝA´Àç¼WpÐéJˆØó/áƒ\Þ±£ý’yѰàzžõ»ãD?`…†6‰0~¤q\ýÄ——šnüà íÉêkhlg-Í­f!†ãL+´dþµ•¬Ç7öVžÅ²›@#°8«rOá.¥[xLúŠMNh_è­—õšhL—Y¹hôk4L…‘@b°jSYdÛ­ÂæB;qÒ›ª‘qáÛBHˆß/CÒµü=i-ª[À»fUËSëFÈ ]6ÜÅâ)“y2Ý?Š«Üý¦? íºO0ù»‚­éŒ«âk¢ÍÉÜzœÔ7œø¤sÿ-ùS¾¡b9^ö=q7¸2>•Ò]Nc†Y—ïF¤ãÞ°ïá&„Ú ŸJè®`Xì.7‚ŒOËíQ-ÐÑÇ%•Ρ×›†%òÝjö•»MÒ§¼Ïßh÷ºs*øvìƒÎOù¢UVð°*r~\Ö—èMŒÛ[‹‰µHåF-)#ñö«s‹†×fû6^O>‚¯xfÒ܃1tiŽ@ªÔ18ÿ„ª_0í?*/¨-†èÚ¥ÊêFÞá‹o$`ö5%†¡z·œ—+œ)õÍEs„ñLfÀ âjÖˆêWÍÔç©Í&–ã£êWw\Ÿ”Ÿ§¥QƒU½SvAwsÓýšÐÐäÚ7 árÄý1š‹DD—Q»nÜþ š@Cwy;hq‰ÞìT“è(Ñ/nŒënXù[N_J¹â8±h„p¡€ÇøUý. Út0Áϵ û¡mKq1xÉq·žžÕÊjvâKçJrœ¾ÞÕÖ\ü–²0ì§ÜV'†€òçflÈXg=éGK±Ë°Í X=lî2rNûSn|Arš¯–#VÁ{U{¤øŠ=ˆWæçñ¢ú2Þ#EaÕ—5VWݬt÷·QZY4íüC!}k˜‹Ä‹|Žä¬$³Ú´¼P´€t`x÷¦iú<š˜‚âï5Pþu*Éj÷:@ÞdjÀpà Ö‰ïš u·Qƒ'Þ>ÕÐÌh¨ƒ… çü[ûród þ1µË{ZFµ5ª%¨L¡''¿5zÛÄ Ú“Å(Aüª}ÂÓ£™¢Ë±8cX±Ú$šûBFSyϾ+[&Ù¤oiºè¼¾h@ « ¥¬êâAäEhÁ;‹/ï[vz\6ûž(‚³ç‘Yúd‘Lnl¥Aİõ¨Vè1|=5Œ•BL>õbø‚pÚ¨ ÂÆ§ÚÄlüF±(!YˆÚ«kHF³ þñªK[’Þ‡Gw}®—7,Ê0? ÆÑµˆ­dxäL‰\;U½r(×M‰Ù~|¿•'‡ôËk‹tžTÜêM É\or¾»þÛ…—&Þ+ ¾Õ#Ò­#t„abø€ˆõËp~ê…ÇçRx¥ÖD¶ÀàÒÞÁÔÞÓï㿲óW‚xo¨ª×šÜvÅ „‘[æããPˆ—†Ù áü¼ŸÆ¨øvÚÚê9&7J•]”uÛÁ}4r*‘Þ¶ˆ-ll¡·‹æp v¬ÿ¼bæ8b Wµ]. 4¤h¡ &Àį^*´°u7,ïb½µÄÙS×Ú±u,`´ËL:‘ÐV†äeµ½Rpª„­fiï'Ú$ ›ÞPP­%0rÐê4lêÐÌ”VìHÞf+BÐMûDÇ7P=+~1´ÔJ×Ð¥±Íë5Ö£ª¢nÅ¿>•bO Y%®Á\Œn-[‹»íýEU×5ìm™\lEri¦ú ÝÏ7º„Z]´HÇäb3[^XäÖs÷‚ÆN}é—ZcC£Iwp3,‘žÀÔÞU7¯·ïlÁ­÷Iê?Ÿk«mÇ€ÅI‰c³‘"f  n=iž(Œ¶«nL?Ÿ\°·}4NE{Ô­¬7¹sSÔcŸF–X~`˃íY>ˆËæÿ)ÁÅE§Î‹ ]FW=¿:±á9]Lª¸àSµ“ êuWSÁ§Y™$p »šäí¼VívÞxýÙí8r ŒG zEÁ™zzÇÁ¦(œŠ@ Í*óOàçéQ‚4¯‘ÐUp~MXß’j"pyõ  }ã­DÜšVà“L4páÁ͇¥7¡&”0¨òiA¦}FÂFÔÁ0%sž;«w¤FÚQ°‡¸>Ùþu©“Ž¡.©eޝp›×‚=*“d»ntˆ¥ÑÚÉaGÈO÷½jœÞÝ %’fO˜1ìOZÛŽpÀàäuÍ@ïAB“C²3cÑ£Mû=ÛváË{úÕM+Al#K¹ÙpþÖËHwjRvœžôs0åG+‰(Ö^áŽØÑ÷®?ˆÒ®›$ºûÜɶAõ8®‚\g ýE28‹¾H8£™‡*1£ÑÞ±%ÍÊþæ6WûØéZ÷æ1a2Êûce#w¥\ÉdãŒ+/U±{Ý9¢ˆå‡<ûS½Ú¸¬`išg™ Ì»‰‹ ³ý¢=ªÆºÒî­¤dî)P*Š¿*€(æÒÁmAÔI))w®Aä›BÔdÚ™‰ŽG¸®ÇÈ=ø¨æ·†ä(•2œŒô¤¥aµsN²¹Ô5A¨Kò¦rªÝk;Q’k<Å 0|¨ö®Ñ0„(\=©m×Wˆ£§Ï¨r™ÔjZ‡™s™Ûï5˖³¹Ëø†Qýº Ž#+Rø–TsjÑä¹ö­cÃßÚW«20 x|÷«wš7–°ÂÇhŒŸ\QÌ•‚ÅKí/´Q È©´ŠÂÑo›O¾h$BRB¨5ÛéöVÚpòáP8íÞ›ö vnVfÏZ\Ác†×\ÿlHv‘°Œ~ÓŨ ô)%• ec*Iþ#ŽÕzçGµ¼ºŽêAÊc ôãÖ³/]5K¨ôëaû„9wíÇjMˆ¼7§Hl®&q̪T çk&ÿwGBx5éðÄ–°"/@ b³µÓQ%xðF7c½5.àу­ L1me>•´S碶°¶²A_¥YÞ2*%¹HåµÿɧÜ ‹çÛÃzǶÖm¤ž oÔÉ*O¥v÷v·oºx±É%y®Zÿ‚â÷u¤cÏ ö«‹‰iŽñ6©ku¥ˆí¤ÌA8ì+'÷ÂÎfa™$Œc°­Û ˜4f·µær71«ÞÐ#ÓaN€Îzçµ;« Îç;âÉ.¨’¾@î)nuˆu 'ÈÁ€¢»kÝ>øLS&ðz{V~™á»; $p77P[µO2°ìî`ÛiSXøråæQ¹ÆìS<k©É=‡æk«Õã£Ü(솰|f|»‹€xfÀü(½â;jbøOšÇRk…ÎÉå>†­'ˆ¡ŸN{yùÌ» Á®ÞöÂËsªã=«šÒ¼)ö]A眣('ËQMI[Q4G§iï¤hWN?y"Ÿ”vÍdøRéaÕY¬‡½HcxLN « ÃÓü-me¨½ç›‘“±}*y´wŽO[ºOøHÌÊÆÃ¯µKâ-J;ûXD*áÎJ÷®ƒSð;¡~³‡ÆXoµ.¡á¡| ‚ xÝêj”¬ÌÝ&îSáV(ŽèÁüsš5çØuT™×+ž@¯P´Ó¡µ°û4J+‚}k&ÃÂÖÖWRO/ï±`AIIj 2¿ˆnc:•`Aõ5‹à½NK‰-æá¥#i®ÛTÓ Ô´ãlêÇÊ} bé^†Êág™¼ÆSÆi).QÙ¶bxÆÊH5E»Q˜ß5Nñ-¤ö m3m}¸Ï¯ÖÞXÁ{jaC.;ö®FÓÁá5ƒ#°6êr£Öš’qÔÔ£§iEou¨2¡X-Pð°WñyɯK–Ò9¬^Ù1ó)_¥`é>‹O½IÞbò)$b… ±Ëx¹Ãkl çjº¯ jFòÉc(BÄ¡Cõ£á¿Ö Ä’%ˆã½t6–0Ú@-áˆ)5Ë`¶¤ÁGË\Žì¤”[Ï’QHjì|²›@¨îíÖá2‚‡¨©‹³¹]#ÃÞ)†ÒÐZÜñ·¡ªÒG7‰uÑ4iû”aó{ èÁr^‰ƒ9(:è­4ûk(Â[ÄcZ§%º&Ìó_i²Z^‰1”`{UÿxŠÚã´ž-¬N7õÝjm¶¥oå̇jçì<iivÓÈw®rª{QÌš³ jfxâì46ðǬ7óKá׎ \ÈN-Zï†&ÕõÜK¶]¾õ4¾û>ˆöVï–lrhæV jqÞRþ#ˆûšŸÆ“¬šÀU< ×Máß 2Cs3—cµW¼ðdš†­%Ôób6lñ×ù—0[B÷…n.6 ¿•o0cÀâ™ccŸn sïS6GjÍîRV<ÏÆr·ö¢Æ…F=«gCÖlßC®ø‘äÔñ‡ Ôà2¢íŸw®;Oð¥ä·å$_*58cê+TÓD4î7Eµ¹b\ª£U=&â;me$˜ñ¸äžÕé6¶ ޾ðù‰ë\ÕׂžmH˜\œäæ…$¦/‰õîîÐDû•@Áõ¿¢ß¡ðÜ‘€Y£B=ªŸÈ÷ñG%snä×Awcm¤hS¤H0#ù­&ÓVLà|9‡ñMâ-Šé¼O?%Ìó|è£ ØÖ'ƒ¡ó¼@§uKWW«xh꺙œˆ” ¯­z‰#ÃÒ]jz¤s()C èkÑaa‚Ý±Š¡§XÛØÛ¬P¨Uä@½¸¬äÓe¢À?/yâ’"pE>6<†©(k äûR ÌmHs“Š‘xJFŠHÉ©Qp‡ši8…'a ƒƒ‚i¡@sÍ(@sGhîïKÎM9qÖ€rq@êy¤ vS³¸# ø"”6F)©\óOh Œ`Œ—“J¸4¥EŠry¤uæ”qšMÝý(„ÇŒâ…%éÃÅ 9Á’I'"ž‚˜„ ñNW¤!Õð <óQKÅ4jNjQQ¨ ôàŠ—ƒ@Zþ¢l4©$C‰äSèMdiú<7úRI6ñ#€Ìẚ“Æhÿaˆÿ~qSø~|艓ŠsøV›Fè‡ñí [hDJIUÏ'½H¸1àW/{yu4m}¥#ŠRGzf­¬Mº4Ê¡˜ŽÄÿJ|­‡2:­ÛI|ÖV¿ªIid¾Vs!#>•—w¯Ëp¬hXcüU«zö—:"Ép()Ž ûP ÓÔ|݇i‹‹U&bäX÷Íj8vÛOc\•w¤MÇ*$Œwú×gk¨DúX¼s„ ó{S”{ Jú2Õ´„ÆD€îsQ³0¯@k”> ½:Œrçl@ >l¨­;­maÔ£·UB§§¥' F²±.ÜöÈ4É.UÙ8’ºÃË~°[ h·~𞢤Ôä[§’$ c]ظ§Ë¨_BŒ÷kHÊR8ˆÅõ«=í„0ÇóO)*°ªž!¤6ñ€IövnÚMEíB©®}©½ì/1nuY-8ßtä~^õ©$Å!V I8$}k×R±½¿‘D#Ì^ÛøªÏö´_mK7¾zŠMfоS‘Œ Õ%Ôƒê-h«Ê®æ>”äÔ-Úõ­ÖlÈA\öª³Øj{ ÈfÉÿ J7ΠÊUÔsZH&óäÅgéúŒZ„-°â@9²j6ÖeViHf;x¡¡ÜÕìxã*4rzð3Š­s©[ÙùbGæBΞ÷PDè­(S'@{Ò°îZcß·jpqŒÔde:t皣©ÇaÝ˱/µ¸Ù¦•<ò)áÁ5RÝ–hDˆÙÍC%ÔàFfA!þ ÔY‰²çÛ­â¤tQÓ–©á‘'@èAV¸Ç*],Š?v0G¦kgCñ´±Åo6"aÆ;U8ét.n‡DpâNiăꉎG'#RI4QÇóʃ=‹TØ SiMÔ¬T1Ö«Æâ8Y²6šH¥î# šv –Mç€9ö¬;]:Ú]Y¯a†$¨õ5§tâ[cÝŒ©}+˜ð¨(ó¶p7M4´lMt×1Û!i(¤†XçEe9R3ŸZÄÕ­ª‘¬s  rà7j¿§Æ-áò×î¨}¨¶ƒ¹m¶¡f'¾j­¶¡m<ïL"öªš½È]:r® *ž•àÄî%aÏLúP£¥Å}N¥â9ãŒÔ‚£½è†VÈ"aÐ0íSq‘˜>FRx ƒô5R;Hmv¤ fµ]FÎzUBsb…peˆó˜sS ‚3LR AïQ\\/˜"Yl7PÒG““ÒšX¢Ìx媭õس²’p~eZ`O¨_[[&&¸ ‘ýîi–óÛJ€Á*}¹½>Â-^ÒK‹ÃºG$»îÒi¾»7bO´Ÿ!­ÖŸ*ÎÆöõÍHï´ƒÔZ¬¥"pOF2{ÓL„äõV'¤e—™cBìÛT “XM⻺ò„„äí'µI«¯™¥Í LØp7rk‰ŽÎI­|Ÿ%ĪÜ1銥õ%³Ó•unèÛ*õŒ·6>·13’ÌI =ê+IËGüÐÍÄ5sv2 k]wºù”çÓÔBçKeâûKÛ……•бÀ>µÒ~UÎE¢ØEz“¬8 ŒÃÞ·ä8ž*en…!Ûƒ{R21½W3eã'5i¥D‡|®c©¥`)„Ý0QÆ i"`¿ZÎ…„’\ðEK=ÑØT61Öš ëšd¸T'©VÚåŒ`±ËgŠËñ=ýͦ”Dóã#µ$µ±}¯b2G0iQ»¥>ÖY6É\†õk{YÜ\“æJܹ®þÑâšc`ÝÉR„˜ù7'ð¦,Eày§4Å2§îÔ uÂïæ¥ ’Ø“!5:6†9ëUí$ÉsÞ¤i•ç`GlS°3È÷¥ÉÇ4Ô '<ŸJG&]˜ëéSä2Q–*(” =kTÖŸa%€TtúÖG‡|O>©¨¼3¢mÚH"«•î+z‚Ç m÷¦‹€ç Õ#B´Š¨1éLœ2)N$Ú&Òä®8â˜$¶)ù$c4Á8®(…ÎÜ “qŠˆNi’Hz @JIê 652næ’7ǽ?̃ŽôÀ¯r“Q(ÃùÔæ@ç‘LfÆ#1ÆZj«¯=éÒ¸P§¹§0™=}iŒIaÔUMJ{£Í9e#j D›±Îi$eÈ9¥°Ž?Áz]ÄŒÒÈ›UF2{×o"…BWŽÔ¨88'­BÎ$LM»‚C-ç$þ_ûÑŒqT Æý¤w­0 'áH±721<"jC‘B æ‚@Jh'š0[é@Çå{š2px¤HÁ9¥Q‚O¥"ŒÓsÀ§y˜$šj±9í@ i þÔÙïBÙ C”ŽE&РœÓÉ×¹©v¹ ‚hµ.Gjsœõ bÚ›ƒÈÍH½H=©„Œ‘H¢NM&ÂN(.}… 9 Q‚hØIõÈ4¤m \¼is@—9¨Ÿš‘GÖˆ)üx¤Å ÷iÏø¸ŸìfËEªz(eðä„1%•«GÄʯ£LOUÁýj¯‡£i*‡ e‡ëZ/€‡ñü-‰£ž °áH! õªž$±ŽÒê7N\ñèG¥I—¨Øë%íUÈÏß+Æ Oâ¨ešêÍg ¯5k{‘m,CâAåÁg·î’qø 5Õ&=9åR:~U/‰¢’Qe hYÆxµ%î“w>“Jå®b%ÔõíG`êhê©s£È®9D,§ÜW0×(¾XwìçÛ5§ ú­Õ“Z<7)_0¶ÒÒ¨^éoý€;Îåî{мÁ­Ó-RdL2‘.@ô"§‹OKð÷Ò’» /lVe´·1Ç5²Å—ŸoZÕÒuÖÂh$R49sמÔÝĆøj$}Ác€vàÿ:¢Í1Ö'‘[‘¸±öéVtˆ×̈’› zŠŠÕC½ýÃgËÚÛ~¤ÓÙ‡BdžGq*“£ÓàI|G2Fþ;Tþ&yXgnWÓï<­næM„—ÜiuaÐ-l¢]}–3”F, v犆k}þ"hâ‚ïÞ•5„·$ùÊïÏqô¤p6ØÀúSêmìÑ£²ìÒi$ËÓ5GSðüÖVé:ÃŒ€¼ƒSëmµÛyú¡µí]]Ü‘¾•q*ò­þT^Û®cèš³¾–þqɇֹû¹.u’ñŸä°Kc=ô˜;[ šn‡W3ð€‰êi¥ÔMŽº»½mócpPã¡ÅKm}¨ –8ÉÞÞƒÚ´|SæĊ7ä|»i–çÊð£7BTŒúóKup ]É-ÄrïmŠNO½A JƨR ÕwÃÀG£\;ã “úU åxäïühî&K„ÕUbl’Ä0ö®‹Uԥ㱵¾—`+F‰†»"Ž£p5cS˜ÃâHdaòŒsíCÜh«q¦_ÁÏ4Ä \œw4i¦üé²¥ Ú ËÜ‘í]ºÃûB¬6¾0}MGá(±bàžwô¢ú£ ëG?Ø®I9'õ®ÒÜ/ŽüןêQ-¿‰–rLƒ­z º…AêLÑQcÚdßî¨ÉÍpzΣw~d–ël¤Œ«WGâyÌ4…s—!N+žÓ5hF,2 >XùûÙ¢+Kƒ/xOQ»ŸÌ·cº5Ü[žk:ââèx© „œ.=ªß„®#K™Ðà<˜l †w^-;€_Þp~•VÔD~#¹ÔÒù„Ç?  XÔ%»ŸÃöîÃŽ7Zg‹ç?h‚.ŠOÔÔ÷×[t8v6HPü(ì¨Ia/ÙÎÈcëZÞžåüèß&1É&©iw2(ÛGóÏ1#°®ŸJÓÆ•`¾g?3SD˜#žñ\×ãåL­¿MËIájWÛg0/ýÖ¤ñ»ÆöÄŸ˜žÕgÂ)iä; ̃®hè'¹“â'»þÖTÜ@)ŽÕg[{ÈtØÀ;c n+Ö«x™ŸûuF{ ·â;¢ºl1ËàŸp(]‡F\h×PçåÚqõª!u¸ÔžäzÕðê¤Ü o™ÁþU“¢EÿÔJçô§Üf׊5 »WX¡;Q‡ÞKûkQ:"$"Bó%\ñ9W°O0ბøb´4Y|8Ijtå nWðöºnÜÅr~tÉîe뺭֫;Å >L}qTlwA«H¼dnv§i),·Ï ÎIÞâªÝEsWÂú”ÑA:>XD¥”{ÕKmzâMEþÐå¢bNÏå]=¾Ÿ ”Â4ŠœµrK&³‡PÇÂ’³¸ö.Üø–î;¨ÕÅHþð®–]BÞm,\\|¨Ã•5ÉkÄl¢²ð1œz Úñd@hÖ΃bä ¿QCKK1ƒ6¢³ÝÚ¨†%iúµ>“| ‰Œ¬jéü+•OÃ6Èt빊#…ÊûQ§-í‰4__\kh’’RFÛ·Ò§ñ%Ö±˜›]-÷0ïY¾Þ$Pë’rEzEäPË‘Î)9©•“<ÎÒöëQÓŸN(òn t~ðÅÆuö‰äåä ÓÑ£Ò°é`e?1÷­Ð¼(Ï^´¥.À‘RÝî bp ÅX›=)È0ûjI—$Ú³e\XЄÚ˜ÏûÌS„»S¥5W.îIÁqž”Ó —8 ä 5äu# c ¯Ž•/”½C3+ßš{JcNÄÜR›M$ƒ8¥"™?PE1Ž\r) R:Ô9v`qK+ÉrZ,"̰ŒŒŠq aÑO$ìRÝp*9¢&=ÀÒOÊ1ëM•O˜¼RÆ äšq`Î3Ú˜ r%d §ÛÀœæ¥•sµ¤„@ „N*úp9¬ØäùþQÆkAE!¢eaÈ©ñ€Ýj$RTóÖœ™©¤0‘€Î)Wîf›Œ’iÙÚ(ã§$i7Jx#P2º¡'$ñK.B|ƒà~b)=¨¨àµLŒ9¤•Û ƒœÓ‚‚ç#žÂŸ6„ò™É£AƒYû¦®.mîÛUò!´¶UÇa^ŒÄ’AíPª–}Ç‚J#+ £–ñ,ý†Ò/Ø 78â–Ky!ð’Ã*0ãÔd×XÈ< ‰cV‘ïG0¹nsº.‘<:l¢RwȤ(ì3Yú6™wíÊüê*©5Úà¦1 ôâŽf>S°ÓõÕñC£|ÌÝ+¡×ôV¾µI~ý8ï[ª@Á=MH3ŽMÁcŽ}"ù´6ûD§1üËßJw†ì/aÝu$¥ %}q]SÜk7RŠîà%­¸Ø®q#ŽÂŸ0š2ô}=u=bk÷ËGÝ{×d½8ëÒ«YÚ¥´ |md0¥»#Ä;hòÆé Šç¼;¤±Ž{™ªB‚µÜ°YAÎ:SV0>P>¢š••£‰ðÕ“TyÙv„'g½RÔôûصÆDó7»Œ= z6ð!b Àš{ÁL$*7(À4ùÅÊyÞ©¥ß¥ìPÉ)šYǵ^Ö “OÐ!·s™Y·ôÙ˜!3‰Š àâ±üK§Ï¨[Æ€HlœúQÍ}Ê'…tøaÓ£¹*<ç\“õ®£ ×®*Ž˜ ¼Â@ùT ½–ÞvœqRÝØ%¡Îê>µ»ß°l—’qÞ¹I¬µÔX•´¯cW¯ïuˆ5™ØBŽØ­]E6û¯.n$%€ôÍ]ì…k³Å}Ä:˜±q/+ííR]é—RiÍ(‘æ|*§÷Ev†%ŸÐ6Þ™«Qº2:\ãåÔå4m&M?NšIsæ:—Ðb²|-K¬—Ç Æ»[¶d‚w8BqøVo…ì’;F—Êyö¤¥£)•ã;žUÀ~Ë·Ò²4k½N %ª»ÆÝ»V÷Ë·Q÷wÖ߇íÖßF€öò~µW÷DÖ¦VáÓ™g¼QçHÓ5ÌêzUÖ•¨…@äÿ õé¨J±cÖžñMÎMJ˜ÜNoNKæÐ.dºÈ}‡ð®Â0HúÎZ#´3^Ž€4l­Œ0Æ=©Ûà (‚P´sY)æÚÄs\xŽU‰™\Ú»"mWFX.›‘ZÛ]>Ù&’àBžcunù©C?­{Ö<ÎÊcK¾{[d,3ЯÐØxr[›á}©àÈ‚ºvU›·­:,˓ڇ+ŠÇ3â}ê0¤°q,`€+A³Ö »Æ "·;ºW¡ïˆ4èÙ{cšJNÖIœWŽ#˜[Û]Ö÷¨ü5æE¡^6Ó¤Œý+³¿‚Þè,w^ÀÑœ"?&4 Üõ§Í¥…mO1Ðío¥Õír§w-ÛØx†òúÂÜ̃w ô®†ÖÊÚÄ”†  õÅ>âÚ;˜Ý$@cá4œîÇÊp> ’ìêM„")âvõ5èæ2çêkh­BGÒ¥‘°Fy¥'pH]ªcšyÇéQ—ŒSÃ1H (¥ 9Ç¥9#ÞˆÂâ£t$SnSs»š'Ù GjVŒc¹†(<‘@X‰¡Ú¡…G(ÝÓÒ¬7?-FÍDá“*yïVB¡}Ø¤Ú pF:S~”üƒ ¦°Àü*4É+…ˆÔ0ç½5àÜr JÀ)§cèiˆpF«ÖªMn]ÆÞZf MYÍ!ØX ‡<š•2¹¦ SâÃ@ ¥bIÅ´â4¡ëI€F3NBÉ<ÒN) UQŒÓÇÝæ Üp{TŠ ãš0`?ãRàb‘vó‘JØ#€ €H¤ˆù4(!ÀÏý Í +8­9 #žôÆ h :Š`82q@ç&pi2@8 C•ƒÒ£TÁ&‘q§– `σHÿ) ŸŸ41ÉÒ¬ûŸ¥zSŽ7vH aH"šN)»±MbiÂ3Ó–=Ýiˆ7°(HDbsAUæœßz‘ˆc5VƧŸZ7n£i§Ú˜…R'¦(ÈÞ9Å7 :Šb¡.ÄœñÅPV­©çÄ‹3|Ñ@àì:×Uý¬±‰á0Fya\ݽœ:”÷¶³’ù›Ôíç¯òüj¼Þ¾‰BÈü໊»'¡îljZÕÙä…e;8ù‡ã\¤ ×ad!àÒ¶­ü)4˜{‰B ræ5µ¡ 64r–RB°n£>âª--.ïS¢±± Áe0î)¢öÕuc·ç KÕaªl°P1ëV ed=y5ɦ»±'öâÛn†'¹ªšvµvuã¯Àzg¥'ˆ¬âóHÉk‡ÆP:¥ ;0rºÐê‘¶ml޼w®Ä·7ÐV9ŠÄÊz7qYú&¨ö ÁØNÞ{VŸŠÀxm™[‚M 6bnèè´¶'N˜’ÛA9÷Ÿ¡}s¯´1)[xÉ ÅzÒI¬E¦hÐÊFé@Eõâ¬èú´7ÖÞp8aèiXW4Þ@‰—'8ýk”ÖµÛÛ+ †œ¯<ÕoÄ e2Å 9å³ÐW7©jCQ¸‚@›6à­TcÜmå¤òI eùfPM=®2åWøyÅsóx’ 9!Š<0é#JÙŽhg‡Ïˆ€¬¹ÍKVe¤]€i$—rW3}âU¶¥º í[VsÇa¨s‘º“‹JárâÈR‰sÇ­Q’þÖÝÒ” à ÕKSÖWKòÃ&öf8úP¢ÂæóH2Dd‚Z¯§_%ý™HŒŸcÞ²®¼E «&äÝ‚Þæ‹0¹Ò$ÊŸ)êi²Jðx¬]GY‡Oš%q¸ÉŒã°5-þ³kb‘ù™f|p:E˜\ÕI}NsS¡Wdæ¨ ¶és 0}+2?[U­ð@RlÐ7Ôé2G P8‡í1Ít`ËÜîàV5߈m,.•U÷ƒÃíù±BAr–£âyíožÖP•;I5Ñ[É,–±É(ÚåA W,ÑÞx‘f‹î<€Œ×^úõ¤7±Ù—°ÆáЩ+Y¡bBHè*U›ïUãf$` “í\Ü:ò¾·&÷Ä1‚;š…ÆÚGbëØæ«›¥7HSž¹íTßV¶Kr_÷xÈÏsP[jÖ²ÙIvœ*ç>Ø£•…Ñ·ä‚1ÍœgÐV‰â8õ §„¬>î{Õ½G]¶±»Ž 9gý(Q{’4U7‚XdŒR¡vŽÂ ¹Ôí¬­Äò?dZ†×R%ŒðÜŠ,%»µ†ùJ‚ò3V"Mˆ¨§ ¬{ívÎÂuµfù† #µS»ñu´.‹ßêvô§Êدc¨L1<ô©Œ‹°‚qYZuÜwð,°±ç­KtYcsÜ/­©W'MBÙgû8lÈOAÚ«Ýø‚ÆÊQ¬7“ùWm«\éú”²ºeœwvÖ)®jIÈŒ±äûU¨Ìzœ71ɺ¶UÀ#ñ§)UÎkÆÐ[YG¹`¸Á4íVïìLÏ’Ò£êj:Ø ½WÄ¥®ÎÁ ÊÇnîÀÕ-¾'Àe”qÎÑŠËðÞ¡µüsÃIŒØ×o õ«–â?_¼*Þ‚Üãn‡ˆ®,½†³F©ªé³€ÓHê­šï¦×ôû2|ÉÁÇ£n®_\×´ËäeŠÛsœüæª-¾€íÜTñ­Ï– Âû×c¢_É}d“È›9é\W‡I'3ó.‰zW Äˆ-ÀqÆ*'ÚÁrÀýjT`Ø­sþ'´Ó.Ò&mížqóbµ ¾Šïd°8`ç¥EšÔ»£Q€=éÛ®MP¼»ŽÖ:GÚfYx£Oº“ËóŽâآ͊æÔ±ŒqKœãÚ±u/XÚÝ-¹}Ìp;U‹ØiÉM.Kã¥;0MÒ)SÇÍ×¥W‚î+Ûq4¹ÈÅ`k~)‡HpŠLŸ™; I6:b3A1šÊÑõˆuXÒXØ<ôªZ·‰,í.űœœ6;R³½‡tt%ƒ8+Òœx#ŠÆ›Tµ±µK‰fýÙ´èuëKÛVž9‡–ŸxžÔYŽèÒ–@¯ZEmÝ9¬›mfÊúa3aZѻ㎴j„µ‚gŠIŽìvÅd^ø†ÆÞà[™ÁsÅK5ø†9›ä9¢Ì44Ë?…$\ŸZÎÒõ«=U Âøe<Škë¿mi.é{cµc¹nñˆÁQ ÈñŒö¬ý^ýlìšâCÐ| ÷¬Ïë­­4‘¨¡'a9$u{KŠ`BIϤ¶‘d!²½ˆ¥’XàÛfÜ|. lö6ÀAæ°tnJúh¢pWB«M«qbCTà95SÉ,AÎ9«*ã†:=¾f)Í“÷iŠ'SóÛÖÈðXm4«ˆÈTà÷¥ ЀÎHâŽi7­H"–ê(ÝœŽÔà$Ò29¥/" *sL"”žE êh€€ø(fàR.Î{ÔFwPp@¥SÏÌ)Ê9ɨæb‘Únx¥åœP[9tÉÍXÍ!ˆAÖ•†0qAɤ“?(¦$"$Žií ž¾½(ÎGÞÍ ¹®)ø¤¹"˜˜Ãš1šsMÎ)ˆÈÍFÇóÇ(£ 84ÝÃó¥$Qqœ¦³úV¬uyR`7¿¨5ÐÚÝÅy˹FpÝ :áthÜ­Æ sí¢]ÙHeÓ® gª–ëŸÒ®é­I³Z£¤wÁþuÎxšñ$…,£Id ;bƒÿ e?vÈÇkNÑg¸>eÁ9Ò„”uÛÐο°û'†ãWc¼0lzSÚÍ Ç‡fß(Ý´çTâ·.mc»·xfW½EsñêİÿG²O¯¥R’hN-`þ&@A‘ÆõÍE+/ü#1í$²¸Ü?»ÖºMNÌ^ØÉÀÀÊqY:~ŒÉ§M çæ”òb)©+j&µürø}ŽðDW»â«øa¢ò%Lä‚}Å6·ŸÎlɃ°Ò£´ÓŽ—n÷×_+*¨=hѧaj2òuÛ±!U˜…WÑQ.nž äÛ;Šÿ{lø~ÆAæ]Ì9˜üµ—©h—v×gìÊîŽ~R½GÖšiè u;‚8áU‰@^:W-:øKW$òÀþ•ÐéP\[Ø¢\9i<Ö2¡°nŠ2?S؆y6ø©>€~"Ÿ®‚š…’““œþfŸâ=8¬‰{ !²€íïT5xo\ZM"þù”¶:~5KQ|Md r£!Iúôªš¤ÄézsÒ*šú;¹ µ²š]ÒHÜØ{Õ­wF‘të n.Ò=hNÛŠÅ3MûH]Bì+à¨ì¦ØÉÆ¿u# ù`" ¿PÐu+ùn#¶*dˆ7°©u™$Ñõ„»…GÎ2W±4ž¬kb¿ŠÝ.#òЉpw½úõ&¸Û´M=ˆù° .®%ñ,‘Em @ƒséSx¢-ì-bEÌiÕ½Å>É€ºÎÙ<92r¡@>™ô§i6Á|>Óci!‰aßZêüÜxb0É‚@GN*} ð]èÒéã>b¡úsGAøvÚÞò;¶Œ`š­¬WUŽ! UŒŒú5WÓ/§Ño˜I*Çk)©uÛךõ'6Û¦å媺‡Bþ¹¢Æl…ͬAB€Ì¡ª¶zŒ‘xrHU®GAšØþÔ3x~Wh¶1]¸=ϵgÙirŸ ÌßÅ(Þ£éS}5•hyd,¢„¼Ìá·z ìô‹ìë-˜’NO×Ú¹-YþÉ.¯õcϨö®ßM¾‹T´2¬EW°4NâG%â‹Â]£H{zŠžÓH––g‘‰ÆCnÕ/‹o!¥ª­VÜi–:Ü)¤Çm´’@^þ´k`êf۵ͦ•v ŒÁF={Ô±ÙÿiT·þýã™­sM’ßD3¸ïÞçëÖ©hÔv¥må\.xaO}CaË~%’]ʸ#s\¬®l5Ç‘‡ú¹r@ú×¥ÙjV—h’¥Â@ãwzRºZõ<ã_€[ksF„ýàyõ­‘á=CQŽŒ¹ÞrÝdøŽe›Äc>?*îí¼Cca¦Ú‡”—*¯Jrm-Zä°[ èÅ7ï?Þ5Èk~¼òMü½ß%Ç ­¿]9±³š"B“¼Ï¸×æ¿ðæØ—çA‰OµLtÔlƒÁVÓ4òÌ®B ÛzÂÖEÖ'WmÎ\óïšÞðUð‚ym[9|5b_Hn<@ïÓt£ùÕ¯‰“н¬Ùj ¥Á-̹^0¾••gy§\Glˆýò{â·|_*®•m9<þ©¼$ðíÙž•MýÑÛS—Ñðë°ÇÃîÁúw®ÿĺ©Ó4Á´âIUǵpþ–8<@²J{‘Ï©­ÿçì–ìXíbM^ò±Ë\Z1µ‚àÊZy˜;×I¨Cwÿ|~qÚèA?J‡Ãv¶ÁòM¾hÏ Ý«¡ñAAáÙxH¤õHÇ áõ¼g,Þë´¶î•j³×K?˜>µÐx ½Ó¸•fÍ,mãLà ¦õh-¡§ãatööå±å’Csšæô½ûPmÊ0 ÝÒºßH£M‰w ÌÙ¡ð<±Çk!.’3I;D¬ê´‹'±Ò¡‚V˪üư|c­Æ s™Ÿ©¡®kk§Y7#|‹„ÇzÁðî-ôí©_r ÊP»²Ÿb÷ô™àyn&]¾`Ï¥w‘€ P³Pˆ@¥]¸æ¦NìkAÇ Š• ‡¨TdæžT¤1àüÄÒ©£ÚÞµ LRQ“ž´Ýä¾6ñN‘¤ÁÆ3Ò»Ò0N)‰–9íJàKœ ŒóÞŸ'^=)…h0œPr ÇJsgÌ:0?/zC"\6 æ¬/T@Å9[,iˆs{Tg Æ:ÒîíïJÔ‘ÄåüiÀø„“ͩ֎“å"‘ö’3Ö¤, Ç £$@r¹Èš\ŽÃÐ7íJ)€»}è4½ª=æhs–4Úã†Øcš#° ¾AµÓD“…2€Äp7TSM :Fò€ÏÐnäÓ°º“@QŽôòqŠc/&”r‡œ b$â GIÈÀ€qǵeø’y ÓvÇ‘½€,;T^ºì–#€éž;š®[ÆäÞÎÆà8~O¶)QÀ$­!RH ó\ί¨K¤¶Ò1H‡b½M%±·du''ž(lô&¢´š)áWGÊà`Ó§V(6޽Å&¬Œ’:p ׊Ž' ¹äš‘NpŠ6‘ÏZÊÔ¬d¾š(™‚À§-†å«\ =aë:ŸÙn£†$sc“ü ñUï ¸£XáDNŠúS &«[ùžB ¶>lw«G‰ÀAùRêX@€¨>‡ƒkÝ9òÔ(«Z~©&¡¨Ü"F>Ìœ+zš¼T+ 1äíªØÇº«eX=ê9—qA•>†‘¤ÉÇJT”;õRCf6k%Î¥q}:wlEnÕÑã8V知WfÚüqÞ¤I·`Í Ü#Žá,#‰çn>†­|¸Å>EWä´®Åc¼Î¥¬Ecoÿñ_+¨Ž1XÀ¨ †ÊÊÖÉÛÊ‹ic’~µmˆÞ8ãÖ›w ·^´š÷í_uG%BkfÞÞ+xV8@Eôé\ìÀã-r9¡É°±•ªiú’˶N‚Ô:W‡­´ò\Ÿ2\1ÿ ׿œªäÓ»°4…’ç£uHÁƒ…-#½3J›xÍtGk¤xÇOzI´ \ÇÕôõ(ÔÆvHýEM¦hVºZE!³UÓsFÒÆ3Ø·Zœ ð9Zv mWC•Üy€l# ÷¿¥Í{omkn¿$mϵoãh|dP¤ÐìeÙh¶öšWÙ\oÝËëUl|)kmp'vó9P{W@èN„ŠHÊ…c'8ëB‘69ËŸ Ã.¨×.ámø;EQ»…5;ø´Û@¬lÈ®ªþ®á6ÞvÏ0`Ṫ–º}¦•H˜nvÉ%¹4ù»…‹i§À,~Ê…Ú}땵ðŒŸÚLóä†%@î+¬·œÈX`ô«ãJJMÑ™ªéßiÆÛn ¡ô"¹Ý7Ã>LSË0 &Ò›žÕÛÉ•OZ`E û½¨RhV¹ÉèMö‹ÅËç*´·>¹»ñM&¾C»ž+­Ác‘ÅIó“ÔQÌî ö½¤Í©ˆ-ã;cC–5bÎÎËD°qÂŒ|ÍïZ“{žjµí‰¿Ó¥·Á¥}l;is‹´Óìµ rFŽ`°£no¼i|]d¶÷í6‘Œõ]ü1ª[NDóÁ Zö̳$º¤¥ö`ªÖ·KR,Íï ¡F$;s[›ŒúÕ »# £гJuíX½Yv0ußCªFÒ¨Äê>Sëõ¬Í Â& ¼ûÖ©ÈA]–Ò3M3šjNÖ•î>$˜^1øSOQè*l>•I'Ž) ÎÕt]Z,J6¿ð°ê+™—AÖ4—Ù÷%ãÏO»]’Höîɧ9$äÓRh,q«¨ø’1ÿ¹+ßmT’ê¯äÊ#sÈû¢»ØñÚ¥QŸ@ióX,ah>‡Lq4¾lwíMñ.€ú¸„BP2úWJ~î;SMàzÒçÖáÊsáèí|?5œs²äŸSPxWÇO&{…ýë=«¯1€ãœ c §8´s;‘Êø“ÂK|æâÓSÔv5¡øF{{¤–ñð¨ÙUVÝÍw¬wãß$ù™ÏŸ;µ‚ÈâüAáïõ–×` 9íïZº7‚­,ãG¼>|£× ®ˆ|²sõ«!·cS’ðŸ†d±/usć Ïo^O¬ÉpÅ0¸?w›È#¥"Éæ> ì9NGÅ:ö£öeµPUÕ½/C—KÐç‡ïM"’l‘]’ÀïRtN9>Ôs½ƒ”óÍÂW~'¼]ˆ¸/©®¿WÒ Õ,~Îã§Ý>•f[…„ýášprèïéMÉÞâ±æ¶¾Ô óGÞû¹×ëútÓxwìÐü̪3ïŠÝÙÇËÇ­+'qÅ]A#Œð~wcçO:” 0¹¬«mçR×唇HVBÅŠûö¯Fˆ‚J“õ¥x×*Þ—´cå8ÿiÉ-Œnr^5Âã½bøsÃ×WrorñÀ~ñõü+»’Ŧû͹AéÚ¬CT"…Ô½£JÅ:ksŸÔ<3%î£lV_ôx”ʺx¡X¡Xã*€1OUÚ9TуšWl,‘¾2}ªy69ÅF1ž<œt D±ð (É94Ä;±R¨ÍÅ‘ŠA._Ôâ¹ëÚ£á{sCL¯¸Ò>ò)±°<š€y )€8¦1;ø4ß-ŒÀæ¤dƒäÓØn¦ŸJr¯j„#g€´¬@šÇšiã­FìÇ­90ÙÇ\SÜã4à6“HË!óš^æ”dþTá '&˜Æ’ÅçéT Sâ8&•¹9íOeã4Ö8€9Ï%F´üÓ¦àzRš 4óÒš #æŠiȃҟeqn÷ÓÇe—¾£Ò¹Ñ7ˆ¦e!²~~ã=iú,E­Ï‡8#ëIÅX.·RÔà°EiNKpëMþÔµŠÖ;–*ÉÒ¹vay=ì“eÜñî9§^iòZèð´í‡Ü@SØ9PîvSÞÛùHe$ÆÜ÷«+ƒ ìäk‹^¡¨YZ9pbÀaë]}ªKDŒœù`dÔÊ6mŒ¸»†Æ &€p*=:îøVtã<óÚ¹kÄŸ]Õe[w% =* ‹Uò¦é¬;bŸ&‚r-øæƒU܈avâ·ôÍRØÔ£ø¯¥PñÔw’Eb©™_?÷+ž»³¹Ñn‘·Ђ½é¥t+êzŒ³–SóAYšíéÖÊNIRÛvzUmJèÜx‘åwªQf–¥á¹dhåµw-œrÝ+ Ò,îl­JÜ\2sÚ¹½N÷Q¶Õ-ß$GÁTšÓ×õ‰­,8Ðï•H/ÙA¤Æ™­k¨Áxd¶|¶ÚÙõ§w=:Wœi·×¶ó…µÞC0,6õ®ÏWÕ>Ã`¬?ãåׄ¡ÂÚ‘µ§¹ÇÄnʹaÐW¦xŠîÞü<ò»£Ÿ™OaíZ~ ×n­¦Hà;¨;¶úÒäi‡1pC}qªMy01 RkK7šúùÒHê„ñô®ŸEÔN¥¦“†ë\þ†Ïÿ ¤cnXS]Es¶0:е ö8ËjÚ¹¶sijÙ¹~8íYš½so¨¼Ž[vF¨¤ ìW1ßF@‘Ž;¯pÌ u®¼Svu°ûÊÀ=ªÄž+¹ŸUQn›¡,6óK‘î.cµŽN9§,¥²*4o2Øå†iС‰ $Ò+rlÍŒô«0¸!½Eq·:”—^"H­˜øé[…ô¶:L’††3[Ì®j7Ϙ0+‰ÐüC2M)º|ÆŠ[Ÿ^Õü%W²jJêÁb$ ~Íì.cÑ$ CŽø§A )øW ªø¶EtK5à}æ?Å]7‡5%Ô´âøÁ IÅ¥p½Ù£%ѹíR«–Áëñˆäµv´´0<¿jÃÞ){‹„¶¹\»)ù®ÚÁ(ª³Ü¸‚G^ ~™«kvúdmæ8iùR¹{_^Ëq"·£©Çµ‹z´Q‡QÔoµ„Œ\:åñ…jôز–è’6÷Àä×”i7 o¬¬ò¡[sWD|f_QPb 7µSö%>çk—$7®*#8K­ŒÀÐTqß@šsÞî Š»³^~Þ#“ûm¯¥Rñ€v®ïZ…ÊrHôÈæ,ì1Ö¥ <äç¿5Îx{]:»Ëû€¡0*ö»}.¥ËqßQÅO.¶6†­Ë³Ö›)fEÏÒ¹ ņñÚ;Ö "Œç±ªZÇ‹î’ý>Ëþª#Œÿz¯‘“Ì@Œã¹&¤E$MrÉâ„mûA¸`Jíµ‡Z«câ[c£5ã8`* #ÅqjzŠÃ=²'~õ>FƒšçW§ùÆÉ ÿë07~Tñ•9Æ+3_ñz¨;CHãåZ£eâÛk4ÝO„*q´7zžVõ)I#¥<þÕ*’AÇjã´¿‹ûçâ˜$7Ò¢»ñÂAªâ ©ò1s#µ÷ž <©\¹ª6ºœ:Œ 5¹Ï>Õ ®v¨ÙØ®—&Š2£&ŸŒƒŠŒ9Ï'¨§†; ˆPzŽø£Ë9É¡p9§œS˜ýª~6dhPNôÙˆQòÐÉ^ 8b«¢’A56ñÀÅ °7Ìip@ëCûSyÇ4ÀL€Üškd‘H@cž”›Ž@¤1ŽÁ\TŸxäT.„?5(ùqH SƒRHÝ0i€dЍDrd‘š Ú”õ¡ØzÐ1Ä”6H®>´HÃJ@qëÐSª2xõ9¦GjR1IÚ $¦šHg¯zI9ÒŽ3Ó¶)Œå¼E£Ë4†ê#$’;ò£°§èz!µ qq“.rІº2~síMllUs»XžU{˜>&‚{¨m£‰ ç§o­SÕ๸û’\¯>€ô®¡ÿ„žy¦…Ž9'ƒB•„âe¾Œ_DkYÉ*ÀŸZdz‡S½·m=ׯÊÎËÊé]¦8]½sC˜ÂŒ±æš–ÊUÓ­"°·H"è>÷¹®kÄ–×Z¢_Ä0Qþ5×2pÒÏ sÇåÊ¡”ã ­–·a$¬r ïÉ J¡!ˆò{ZŠ,Ä ò‘Û+«†íã „@8¥C&äeÊ“óÞŸ>¢åÐÊðõõÝýŒ«0»#úñ\Ý­ÍÕ†±&Äß)$2ù¯@Ž5Ž0€¨Ÿj·­p°9ŽI¦¤„âÈtµ‹B׸[ zÚ¹ÏFöšÂ^¨%Nq]“*°Áéž•ZòÊ»sË‘Ž¥$ìÇmfÿY½ŠÙÛDæYXdû¸¦j–ÿÙzvŒwI+îcé]™¤Zéñ·’»›»ž´jºZêVé ¶× ¹MUÑ6¹ÌË”–О2 ÿZw[ŠÌ]+R´‡I€4ÃpJ÷¶fMÖ´ðÊpEaé>†Ü n~yHû§ ®“4P*%kèR¹çú%ßön°DŸq‰G'ëW¼M›Q´’ä\qÜŠ›ÄzÛm×$z“Ãú,˶êì¸dÎÅnÕw[“fCæGkâD3/zgsÄéÓw•·„úš—ÄZY½´B š3‘ޤVE†—©j‘¢^9X#8Ãu4•· š‡œ¶!†a*k¨ðͤ_b âIdçªÔšÖŽ.´ÕŽûȱ³è+Ú}üzˆ$IHrÀô5WæAk5aøŒ‚]ã?Zí­ÍºÈ‰¹7‘Ç®+‘ñ•p5F–$vÜ/CZš2ΗWŽû×T7JRµƒ[š~$¸6Ú<…GÞ!:Ê´¸µ—Â’yª>@T~Õ±âXÄšà •s\æ‹¡›½*æYÚEQ“÷­(ÚÀïrׇÌm¤Ê‘Œ8ɪ^šúålgÛš“AÓ.ZÞîâ2W*Qbj†“¡oª<1!r®§ ÍP %¼TÀã;›wÍ7Q|M° †>‹K £â"#9òÜ—cúÓ.à7Þ&hYˆè£¨Žš(cÕ®ãvм›âÅQ¢8Î2Ê԰€[[ùj X>3Žgµ“;ïÔu+ xE":k¹Pd@ª–ò üM*\°fV(™íU<&÷¿h+ þç«“Û>”ÍNÚ_øIÊÛç{¸?]µ'¡6¥ œ>#…U@RÀÈ£¦jo§Éœ’•WÄ6ÞúB|Ùqš—Äfâ-auùX÷4º¡.…khm²äýk›Ð¯ˆ.Av:ÙðÅìÓé/Cµb\)õâ¹Ý&êæ }”!-#•aIu„å£ñJ«¾O0…»-'èŽ×—˜{†%½†k’×ôë?Ry€!]·«ÕÓxcX½¿„Á:}Å8ïS{h FsPGqârÆóm#ØíN“ ½ÂM )òàcÐ àïÍÍ®¸îà‰Bàzó]n™s¬_]Ç4‰åÚÈ=éJö¹ÑÆ—Çå\~½«\µÁÓ­F¸${×e:·Ùä1Ÿœ© õ®{AÐ$[Ö¾»ù¥É>µ B˜hš?Ø-òË™œe˜õ«šÔký‰pd\áMn˜¸ÉŠÄñL«…>'ó¢÷a²8Ÿ Ç j,&^¨¯¡ü@bˆm‹Ì гá8Dº“’0º©³–ñaÎ%þµ¯R:,´·³´´H¢ Oz»¡¹°ð¤—)÷ðj—Œç5´]J®HúÕ­&ßÁ÷i(!pJý*~ÈÖå2ÚÃRÑ¥yÈi‘U5•á1lšÌÁ†âØiž²šôÜŽÖ݇ÌG­3BŠKO£B@%H=€¦ô¸u™D¾$rç+æ3ØWu…¬âá Œâ>H^œWâ}"æÎþK’™‰ÎìúU›Þ6—%¢@]Ê‘¸zRjë@êC F³øÔÄ$V$óØU¿è±Y:ÝB0¯€@íXš=ìö•³g{šè|W¨› h6Hÿ6Îâž¼À¶%ð˜è—qÍó"œm5£ØÅ{®ù.2…º½M—KðÝÔÄfIP¶=8®CI¿þÌÕ’é”±åGZ[CÔ4½"ÛKŒÇ ‘“’OZ“P°]BÊH$èÀÕmþmL4òCå&~_SW¯ïRÎÑæØ\¯E Xõ.ÇMh-u³7A SôÍz¯¡ZM¡ŒÊ.ìûŠó»û©&Õd¹*UŒ…°k©†ú÷ÄÞMœâ…Ty­ê+i^×!nGe§ãÁ÷M0A-Ö›à‹8/.î<Ñ’€qê t%…4ÿ hׄ®{Àrù7÷pi'tÆ÷"¿³±ÿ„Ám6Ǽ.+wÆžu¾•jå¡Ç ®Nâø·ŠdºE/¶]ÁG|WUâ]Báü9 µ¾Ã)”ÿ j€Í¸× ç‡ü¯²–—nÒÛx\S|«Ekt,¤‹ !È>õsAñ=ŠÚýžé2Gû_‰žý"ÙX”'¹4=šb;é%Êã ?¥pž4ºÓÄ&95ÑÈu®ñЃÔθø:i^{øfÞÇ,PöúVpßRå±cÁºLpY ½û¤c‚¹O@‹â7Ž1´ó5§à»ë˜µ²˜ÙIÁìEeø†âc¯Ë$ˆч V«âf} ?Ù {{Y?Œ®2kKáÜ0˜î%hÁpÀíXž Ô¦Õì-åòJÅÁcÜûV‡žê9" r JOH©ÒøÞso ŒCHÁxô¯>ÒíäÔ!k8 Ë3/ýÑ]÷‹í&»ÑGó!±ô®CÕÎvÎèX”ŽàÑîè9-N¾ÛÃ1Øi³«¾ðÈXç¦Ecø"ÅfÖ$‘¹òº}k¦»ÕÞ–í"*$R0}ë“ð~±Ÿ¨ºÌ?Öž¤®âÃKš?¶ -¾_ÞþÕ‰¡ÛÜøvk›ƒœ‚G¶)oÍŠêr¨ ~5ÊxKR{Í9A‹jƺN%ÇÍŠæ“ÔÚ+B@¹ËgŠ8)Hc4Ý¥Oél1U¹ãš—’r*¢«´çÒ® ƒ"—BŠH8íBňB–$ûÔ«ŒçÖ—nðA¦! a×ppæ¤+·Šb|„ç½?(b@Æi»ni§q<ŠR@|ŸJiqŠŠL–¥O—–Àq~”Œùp1Òœîj= >sÖ‰²Äî(ÎixQj‡%rhò9¨ÙAzx$ŒÔy?1¤„ ŠYA8¥SœSI$Ð3’_»N^)¢œ÷¦Ç¦) ªñÆÉ$Œ_ ° }jpKŒâ˜†ç„å §ŠdŽ"F•º , @DAàö¦d縹uÛ”Õ%¸…‹FIž˜«Z^·sq« q•~6ŽÞõ£¦ír9õ:À¸ëYúÕçØmiýã°¾õKUñ¶¹Ô9÷¬­rñ§¾¶b>]€úõ¦¢F”C\[èçs”lnUnú].؃½eÍ¡ÜÅuÖ®ò –-ÊÕ(¦Kgb@%M=‡?Ê¢‚A$jATÇ,¥ICŽ1ÏZLäá¨ÚCž)ðM­œŠQŒ0üª³¹ÏªE”$ŽEK§ëQÈò8Ídë÷ÓYXc8bÛsõ¨ô©®´ÿ2v,rzÓ¶— êoFÔˆpädäÕ;›´²µiåûª3Yz6·&¥zùŒ,j Ïzv΄ª¶ca{R mù3ÉíHd±D‘õ*ûSÞ‘äUÄÔúÒ¬¥Ó¦)ûÁJ."`Ž2ÅTeÎIîMsvúuÂøžk™„݈5Ó$¡²z °c¸ò¥4ÄÐõ‚1šŽæÞ;¨Z9äaÎiv†‰é@— Œ{R¥´IåÂTöd[Cæy­yƒÛy¨T6üö©ç•"¤nˆ ~Tu°Ù¬í'š9¥„3§Ý'­-Ýœ7QªËaž3Ú¸6Öµ;ûò`r@o‘¦+µ7âÞÊ9®ŽÖP f©¦„š,[F°F@è:S#°´†í§X‡œßÅTôívNâDÔæ5 ÄÕ“‘šPî˜ë˜ »O*hîz’ÚÖÈ(ìEu*ÃÎÃ;'ҹ뛻õ„[ìA’InqM&ÄÙÑI¦ZMwçË4€ “S³ª8P˜L b³ìu«kùÙ |²“Á­'p§¡ëI܆†8©¡l‘Ú¢W,:b‡Í"‰‹2O5FêÚ+ëf†uʟʬI…'>”ÕpÀñHh¯e¤YZFé ¹&¡µÐ4ûyÞt„o'9?75¢Œ$`$g&جŠz •äÂâdÇJ¸–Ñý”Àª{vãÖ§R ,dØR»b½…µœ&8T*žH´¶=­¤òÎé$$–=j`ÁxZÏÔ¼Ek¤af9cü#­5w ’4îìa¾·h§@È{§m£ÚZFb·„ œœÓ4]zf7xШSŽ{Öˆ9 õ¦î†¬Î~M7KЄ·²®ç99n¹ö¬:ÆoêŸm¸$[¡ùk°Ô´ëm^1 À$)ÏbÂÂD1.Ô¨çÐ\º–1‹+©]¸®^ÏÂǪKsp£U}9®¬ߊqÆzT¦Ñ\¨D! #Pz cùl žr{ÓÈÈ5þH#žÔ‚ÆN§áKVDb<¶Ï>_zÓÓôË}*Š Z©.§o§Í›«„ Ü(­H¥IaYW• TÛ¶ ’"ÔtصkC½3Yú_†¬ô±$h i\žÙ­½ãZLüàÒæak˜:o„,ôûÖ¸bdrr3Ú¶ï, ¹·hg@ʦ‘öàÐÜ®8ø¼ §Çp]ÝÝ3¾•ÖZÛEmÇíEU®„ÊqíWcÈAƒCm‰$Esp …æ+€’+Ï?á1¹7·+p‡ËpB¼ŠôgPØWÉæ³äÑ´ç˜Jö±îÍinWØå|£Ì—RßÎ¥¹Ú;óWõÏ GªÞ‹•}€z×F˜ ¢à¦B[ißëIÉÞãå2æðݤöZÊ>H¹ã½iÙ[[Z@‘CE§aÔƒÀ^îx,mŒ×„ŠI¶ȹå«#ÁW1/„lR7D|¹ÉNÆ´ôíbßRFkv$ŽjãüØçœÑw«1m5‰¶eÄEpEcÙø?M±›ÎÛ½³‘žÕÑÄ22zb£˜`Œ)¦ÅdÌOÖš¤ˆò®6tÅèV×QÓâ4öïZ°Î*qJÅTŠ.ÂÈÇÒ¼1e¥7™Í)Ük.ãÁ¢÷Y{É¥ýÛàWI}oc™#àzw¨m|C§\mÅÂÜ[š|Ò…Ë++k+&Ý®1ÅHÀFr:RK(]¥yuômø$qPËDФ¡ÀíJ™ê{R¬ŸÂ)À…<óšd¶7î¾qŒÓØÀç4¬Á4*‚s@ O¤*r nbI  sHÀ XÁÁɦYÎ{PAÅ+€)ËÍšR›æ€#Øx¢L f¤ÆRÎ(6fà*ã½)Ni¼À  yɦ¸F)Ù9¤p@¨)¥:S˜Œõ¤b( °.(9¥`\h Åq9# §†â›úT¨…F1š`Wø­ öÞ{EåãQ»ð¤þZúœÊér\k2Ù™†ðÄ–9ÅuÚM“X[¬÷2äç¶k™µ½„xŽK™llÍŒ×gÇ !Ê0lãn.–Ò$Í€ƒ$úÖVf½»ŸPqµ$ÂÆ ª×’6¹© (x·ŒæSëŽÕÐF#„Çn8p£éS°Û9ϳ=ˆÊ` pÖ³n Ô-mm®üß“;Ù­¶P£;Î2âA7…‚ ¼zj–ÂêH5Æ] ]c7È1ëëYw¤¹&xÉÆî¹Trÿädޤþ•¹¡YF`Žä·˜ì¿3›Jz%pÜÀ·¼¹µŽêÝ‹ùŒ0>¹æ¶¼1s=ǘ“D``𡍯l¼D²¸È‘·~u·¡@R›1l{R•¬Áñ+Jº¨ÜØUPT }¾­©Ãdò²’8U%zRø˜mÕ“wB ŸÎ´µ4uÐåeû¼qíT­d­JpøŽK}8a¥,qõÍoÙë(4Ayp6žãÖ³<9§ÚÝéDK$±ÜOlT^-maAˆ×$íÒ“Jà®%·‰$“UXä@ÈØÿ —[×¥µÔR1±p\zŽÃLþÓºŽæávĪ¡÷±T¾´$¬JÿfÕô¶æ9F8ë\4Ëq¢êN¨Ø*ÝCu§¢ßIi£Üìp=³Ò¯iºtz†—çÝ(i¤%·¢…î†åí[M@–Tšv¯ªÚéä3 ÒvÍé¡´ïœd“«Or—ÜÒÜàÆ›€SíG-Ø]ØëthjI ±“¨5-¶µispöÊß:g>œV‹¦Ýn.)¡ƒÞ²ô›y§ÔdD`¬A Ç·©¥Ê‚çf5[CtÖ¨ùàãµ]ÞS*GQ^u ,ººE Ù3hzôt@ªÇ,ª\R’°Ó¸ç‘"…¤r¨É5ü7Ùò6 7P·’}*x£,§¸;«½:íÒ2D„”#uÁ»ÜÚݬ¢Ô¿ÎjÕɈÚHg`±2•f>†¸ ý2îÖ4»•²ÎrkAï¥ÕÒÎÁ¥*~ðúÓåê.n…+(按¦MÃ6 WSm"hÇ#!9=Ír—öé,räu{WN׿ÿï:Ÿ›Ê ýE9tgø?+ö¢zdWUHÓÌ/±sÎk”ð™X º‘¹Š‚]Bû]¸’ÆÛ ‹Ÿâô¤ÕØ'¡Ù›˜d #¡üÜW o/ªÎž~Ä!¹ý«VÓÃ×–ÖÇ-Æ×`Þ•ÎÚirÞ_½¼r€Ã'%ºÓ‚@ÙÐè)¶¿[0#°ÒÞêVÖ¤ ‰BvûÝkŸ±°:3Ý\M½Ñr=+Ÿº–]Rïf›6}ª\y˜ïcÐò4²óÃ/Èô¨ôÝVÞï2G((§šä 7g“,¤¬aCê;Õ=»›[¨-† äŸéG s†nÒä·”èÃýê­oªZÉ;Û G˜½EsÚv™w¥ØÝ\NåX©} szt“hïæ“$ïIBãr=/íöÐL±<À;œëN•Øžæ³]­ñ31óìÝ>•ßé­q=»\pÅFï¥3j@÷¤žO.6láqÉ¥l9ÇJä¼EªÉu"i¶„—s‡ÅJW ØÞI̶®amÙÎ+‰ñDr ˆæ“‡`WJî4}<[iÑÅÝFI÷®GƤýª$6œUCâµFÇ„åŽßFRìq<žõÑ¢Iò¼r–V¯1:v ÚTw(äÀeºWEàívy¤’ÒvܤûSœoª»y™"ÜÒ0@½I¢Þú€Ï¡±Ôî®SÔ®u­aìľL@‘õªhnK»‹{b쬥:f—³Ð|Úž‡om%ÑT¸œ V侂„rJA»šò’çIÕ‹;$oóSµ-BæúôݶõΞz ~Ì\DZ3ü›qT÷y3óÅeøaî¦Ñ£{¦-žV¯FZ ¥•ˆÛŒÖvÔ«žk¨Ïs¶ò]¡}ŽH ÓÙèž,´ºŒ[8òÜ=?:çu«Ä×õE·´„dîk7QÐïôgI$\(Á ¶åRD]­NŠõe»ŒƒŒJ·¨ÚéÐ .e 3Œ×%§x…@7$fxÆÒMrÆ[ïÉ,³ÜaP†n* æ=^BÚúÝd†PËê*8o!iÙ#”1@n•ç>–þ Æ·óïYÚUýÌZÂÍöYGz=˜s³Õ®¯-íÝ|é‚8PjÚÈv9äZíÖ¢×áï2¬He_A^ừ›½6¸\qî)J6W Ýš¿h@‚“Dò&OÝמøÎkë}QYYÒ< ˜è1Uˆ5mKM0B—©{7k‡1é°Ê$É,? ]è¨Xž‡€kÊ´_ÝiW['i,üÊÕ±ªÞjú½«Olªr1ÔÒönà¦wj@+ž×áäÎ ½[$n¬=;P½Ÿ@»bNø‡õ°ô;«ŸíÈÞ"ZGlê)Æ j7#Ðô}*=ÀFHÝÔ“ZÑJ­|¡µÆxâæê XجNí½r+&ÏWÔ"Ñu‘›ÏÏŽFÕØs[Dz/Ú›•Œä{T¾k:k–ðgÛÞ_µØOÉžµ»©Ë=½‹½²n”g¥«;z\²²y9U9'šPÎϹºW˜Câ-BÏTó§$óó)®ÚçT’ãÃ2^Z)ÞÉœÃÚ›ƒAÍsšñmáMnó·F¸ùCVZZKTÝlþ\nÙÉíô¤Ð´Ù5«ùCÌ€·âj¶«oq§Ý}™þ@‡ ­Rèfï¹ëÚx ie·íP3ô«ä `}Úä¼uu=ISå+žâ»¥x'$ÖZ›E”ÞFAÔ÷«P!wœ‘J"ç0\)#/™6MH2N)rñRàb€!•¤\lw 3¼T àôȦÈBãBMx>¦“ºÐ½@¦w•4àKu⟱sÅ/"„â¢fÃÔÀ‚˜ÀoÒx8¡˜.8¥”Šd¬6çÚ¢7˜žÔÓœg56y¥,0jn1à7Rièç½D¬>´â}‹JÀŠUúT1¦¦Šh“ŒAŽõ 9êj3“N_¸>µb‚&”ã"“óKŒ@ÞPÖ<ÅÒ®ZC„8ü*ð$–üi­–CÀÀëškAw¡jé÷R=Ê7ã-ÜV¶h÷ºÄú–‹qÙžäÖ´º&u1’KpNxùsW6ˆcB¢Ž«r¹)û4-2Êñ!eèÇ­ax™Ýiçò×ü+x±àµNîÕ.dÜgÊ;…Jch£âtCÏ÷XüªG²–÷E7Êêîè+OR²þÒÓ^ÝX)ãúƒM·ƒì°CAòÔ)ói`¶¥©£Šh o*@}«+MÐ!³Ô^èãnO”¿ÝúÖ…Õí½Šy—‘œw§Ãsð ¡`ÊÝé]†Œ­«i«©Y4D€à‚­éNÒ4ÈtÛ_->iÞz·çÒ4+˜ò7ž¢‹» ¥¹ƒ?†]bK† [1Ý´w?á[ž^-ü¸øÂà{qS¸ýÚÐ0^Ô7p±¤é‘é°?3¹%ÛÖ¯0ƒÔö>”0Ì$ç½ ‘æ†25í%õ+ux܇Œ«ØšætÛ Û‰$µË¤9Óý+¾äãÖ p;@š––ަMöæhâÞ.,2{šÏðí®¡Ã% \îSÜûWN¤˜Æ[ÒŒ`“ÚŽm,9¯[ù×öˆ™Ý Ûùé ˆE è«·ð®~Gk¯¢g‘]g?Zmèå|Z¡¯­€‘ƒùÖ¦·m,Ú"à€Üc¥Rñ$õK=íýk¥À1ì#*F1Eía%©ÂéW:ˆ…ímpfÉ# ­ŸZÜ˧@ø ÑŒ¹JÞ‚Þ+q¶‘sÅK"FFVÐå­ÁDå<=® c,%Îì#Õ™­yŸðHÏ×x#éÚ»[ "ÖÎi&…cÏÒ‹­>Ò[¡u,!œ´ù•ÅÊÎKÄó,—Và @õéSx‚u:=„xùˆÏä+zmÊîq<ˆ[¦î8§_h–÷þVòU"tÅÈ,Îmå–_ ¢sµ[úw¨­µxWF’ÑÁ Û…ëžÕÚ›XbµHB, m¬koZE~nXîBÇWG:ŒÝ3N•¼?tÅH߆P}ªok0[Àmn› Á>•Õ€ Ez`ÖÇ…¬î.Œ»9*)s'¸X˳Œê¾${˜FbBNîÝ1X×E¬u‡i"ÉI `ô5èVVQYÆ!6®9Çz£«øyu\:¶ÉW¡íN3W³Õm¯ô¹<Ÿ•£Œå}8®wÂñyºŒÙ#”#ë“]-‡‡£±±’(ß÷²) õCAЦӮÞyÈÉýèºW&ÌÀVŽÓ_f1™8ïŠï­ž;ˆÖTûŒ2+ÿ„^K­Z[‰ð".XÞºˆ¢XaXÐ|¨¤î49@䑎•çÚÔqÿÂGˆØ °$úW¡2‚„p?:âu Ü‹†šÔù›Ø“ž£4á¸3WTº·{$²R$–L(Çó®wQFÖc(¼F þ•ÑèšØJÜ]1yˆ¢Õí_DƒU„±âP8jAcZ¼·Ô´A*0ã¸õ§Û@Ö~‘äó8>õ_GðÜ­|Æà*6è‹ÖjvIw§In~P=hmlg#áà[M¿XÏïãò£Â…!Õ$óX+!O¹5wÂú%ÄSË5À)Ò¸îk;Zðý͕ٖ×{Æìv‘ÔSºz Çm¨ÍVR»¶0‡ŸÂ¸_ ´c]Vy@P§’ÝkKÑîÝKùË)B»¡¬Äð…Ó_Œ°çƒ»µ%d¬=Y©¯\%ΓtmÆåR“ØW)¡ÛÇs7•ŒÜ÷ÏjôA¤[5ìPab¸k¿ ê÷¢(а-ò0¢-XgSâ8¢OºÇ…@õàëˆaK¥v¿¥n&1ðûÚ\Ï´ãê+Ñ|-sspÍ;<=:š¬Ã[=ì–×:LþSïU“»œ×á” ­¯©SŠì›K†ÛK¸·´\39õ¬x~ößR[‰P*Ž´¢Õ‡$Ì­r%]|„9;ǽwv¤Ma@P ÉÞhÓ_øšUzG‘—ÛÒ»>Élmijê}è–À–¦_ˆu³§Â°Có\8ÂJg‡ôi!…¯nn$ç>™­94+9µ!}.YðN+V0¡`: W²Ð-v2×+^§¥p>7aöø×pár@ú×£,»ã¿q\/‰<1s4ò^ÂL›ŽvwC}BKCSEÓøX (Yc!½³\¯‡TÅ®I³øU†EC¤[k{[Ú ͪ‰€È”Ôzy‡R´´°ÿ–¥ðÄvºGš>â 8p5à%Ìßn~‚«EýÑõ;{{Q)|*€1Uob?d¸8ä!þUª¸\ñÒ ‘DâHñÃ+$õ®y…fXü@<ÂlÖ»y3hïa´A÷®3ĹÓ.̶À´lĽEO¥ézΫn¶× ëižKV®ÎҺЩÂWEWæi-YÚ,pO~"¹œ¤NFpÝkÓ?á´]ìv{ûúןj>¾²½òã…Ý |¤SRNèM3¿¹¶±³Ð'[uA”rW½p~Œ?‰#û¹8®š×EÔ,¼3r²±id_¸[îâ²<#¥ßEª}¡¡+ eõ©VI܋Ʈ]E%@Þhò*i¶ñ†ª€@í\6·¤Ýê~&•m¢8ೃŠì´´¨ šàÌîGÐb”š²ÜÅb÷GŸpÉŒ¿Ïx8Õ.Kc9šé¼Mm{>’âÌàÿþð¯>Ñ,56Ô¾ÏKI,Nx§„÷$ñLp§ˆ„¤‚qï^i²=5rAHü+͵ýöÒé¦ÚòFLJûƺO &§©Û¬W„¤ €v±¢_-ĆÈÚhÚŒòcdĔǥrÞbšü,sšôiÒÍ¡¼VÃî+Í4«=EuEè|ånA^”âÕ˜;gŽHm6Ü6ê»àÈèÈ£–9'½exºÖí´ëy¤ùŠŒH­Aá›]VòÅíQÌ6çø_§ìîw±@V5…PÔµtëvšfÀëV4Ý=ôû@)ެÕ£¦Ûj•œ£žk>·)j>¶z¶¶éq’Ç­w·k ¿‡e`(ˆíÇL\/‰t´¿.kvù$Ïá[z_ÚuO I $L¨>¢µnöh…¦å2E©OóòWŠÆñmÄwì¥vàUôÛmI5–Šë!; J/ô»¿í†·¼¤ŽOz´’•ÄïcÑüq éQ"6J(Ü=ë©`»ÃW!á }&{†ÃI‚@íŠê¹Ý¶±–åÇbPyúÔ…Oj†#“Ïj°H$b¤`¨8-Ö‰A=1Civ‚ri j¸Í+(=)X‚øö¤`TŠ@¤M.âœÖœÊJdS@Æ2i€îÄ÷¤ &‘³œö¥#"E *'*àOBO^Æ’dWŠCÛp÷¨å ŒTPïV?UÑofÓ5²œ¤”*„ÒäÐ|ÇZØ?!;KÍM8L€ª¤çé\ž¸×pê±Î[ ‘³kv®žlO¥J§ï4giü)r膙b±k—m8Ü…Ø¿a§I¦Ã$fbÊNUO@?Ʊ¼&JÝ\wh?­I«ê³_ùñZ9H`˜ýÒÇ4Úw°“ÒçDŒ"ÐβÓ.Ž©=ìç Ùv….­|º$D¹O\Vͦ±,^ûL±–eÈí{ÒåÍÝû€•f/Šå4ÿIoiq$ÇÌ|‚¯h:´—“IüÈ2Ê}øPâÐ'¡Ð©ÊÏZƒÍdp£œsTµmHiöŒëþµø@kŸoÜ<;D)¿³ú[@çc­ß';€ Æ1I‚T$‚œàg½eé:±—NyîÏú¼–>¸¨-üD.u%†D ?º'úš9Xî2]Zíµ£d6,{ð=H­å˜o)×g5Ë]Ï)2Ëòªß¥k麭¾£3¢e\t¸ª”ErV´·[ãv¼jÄ×é»Î9òÆqUÞö~ÖÌéœqÿ×4Ǿ±ûrÚä9`ÿ©Ç=õµÕ´ww`F¨+Þ³¤ñT‘]á­ñŸ”ÒøšxíÒÚ8°ùˆÝv k]H¥Ä©¸H€`ûUtSZ+…–4uä8Ÿz”L­·<Ö\÷–Ö“$ É¿!Bîõ«4v¡|‘†c³ÜÔ1¦h3íCïU^FrP`ä`R¼È6³° êi_ÉTF^w|Àz|CdxêsKç¥qÈæˆÜ`ƒ÷Q¿½†Í;px .\ß¼{Ò\¼"óŒæ GZʬ žõdɾà VÆBÌÌtëÅOÑÈX+ Â*¬¥–ÊWï…$cÖ¹mUKkÙ>Ôpò·,}iòÜMÄJyæœ0 šŽÞT’2êÙR8"›#ói!¶L[ŒzÒ  ÕiŒsȦI0ùšdܼ½yíNásžAЬ’ ‡¥9¥OaHhðIO\w©à61UÎGÌÃ4ù” tÅ0$'ŒŒR£ƒƒXZ“ÞÜÝÇoR,nwÝBúåR;+E&BFæôX:(Èlž˜¥8άäâòØŸSV¼Ùóqš@Ç‚QþZ;Æ}iR\cñ¨§Ý‚GŽ ‹òÍÇ¥O íÁ¯?¶Ôo'ñˆÜ>Åb6ý+¸µ˜È€7 Ó’°\´™2c·jlä,€“ȧïTÉîRáØƒŸzC[êh†½G§¦=…B%ùÀì6âCŽ;Ð.¥€ª0¨Õ²qž*œl*OQ@‘P\ІËXPùïQËòŽ;šˆÜµˆäT­!™:b€“rÖ¦B Uo65Ú˜Ç56Œ¹4€·$pqŠTbÁ»ÔLcVcAÛÆh1Å’ˆ=MD¼d/sÍ9®%Gnµ]¥ ÷z“Í&4´$eRrFsÇ54r)ãñȤfzri«"¢b£2| ’…•C8,zr•Æ: ÇNj¬²°Œ²(-ØRxߦ)§ ùÆF1ôªë9’5,0qÒ¥Œd¶(ê%©6àŽ1Aˆ%¾sÍGæ âœÏ‘ŒñŠF‚6f+÷Z•ˆAŽõ+‡cíD’*8:ô¢ã&fç'·µB#p@õ4Õ%ŸéÒ±5p¬ÿa²Ã]°èz ¤®EΣ£À+œàÑ}Ñ\Kâ˜fVbIéÚ»=>i$·C0Ã÷44îhà4$û`UE³†7ióÁ>µ4„…ÎxÅEäi ÍoÂä@S¡µ5¼1CHÐ*ŽÂ‡aô4ä!…5Ý@Æ{×1âÙ/£°Cgœ;¶úWJcäpi^5(ðô¡hÂ×<ÚÞßSñ¼VÒ£¬q—=ë½Ò¬cÓl–ÇAÍZHÒ0Lj1ßöÁäqNR¸’#¶¶†2Α '’E5­m…иhGšTñƒŽ‚£˜yŽ0qRÛEÈ×äÝÔšwQïIÎqS*ò8 b &¦BGR®jF$Š9P}éÁBÓɹÐ!rüŠyP´„î9¦à±çµä=iÄ´R2n Ò·ÀI8ÀR“Œ $í¦ðE!sŒàŠ„’ L9 c@'©§00sMsž‚œˆÜP"&ˆÅG³hÍYlž1Š”„¢ÃL`Ó”cŠ•v„ÆiÎwcR°\ˆ&A&˜>ÿ9P4ÀG8ÆŽÕ aÇJh^=@Õˆ@iwIFÜ­1Ú£rßtrsR:óPOšŒž@÷  kˆ$ñ_ÚÁ‹ÍwnZèÕ×QÖPÇóGn¹'Ôž••«øe…Ükf™†Öº~u»¤ÙÇan!N£ïSÞ´“V¹ ;œÕ­Êé¾'œKòÆîC©È«ZÔK6³fÖê ®C3üñVüE¢ ¨ÚîDÈ>è_½Iá½% ‡íÞÃåSü"‹­Æïr¾¬öÒêÖ–ÎSå Éõì+¡’5kv `Ž:W1â-$‹øf¶BL‡-ŽÆºˆÅb±±ÉTúâ“èÜæ|,6Mz¸ÈLsYz|óT–!.ÈÙ‰op;V×…ð./—îÿÎÖ´[›;ß6Ù\£¶ä#9SUuru.øŽàÒ`‰8J!ààjž³mv4kW¸}Ì­‡õÉéùT±Ôð¼¢tìc¾ÓK úŒÐb‹ûòFQ¿žJú w…¡ ì>øaÍE¤¾ßßàp}x©|)Èyn-ÛÞ¦›ê$)ˆÿ£3uÉSéUu»;{h-|¸‚–1õ­_ÂæÆ9;U²}«êk­GNI™?wàçø‰¢7°Ù£¬¤6ú-´püªøéúÒÙé¿Ú7q]2”†5 ™^XéQÏö‡†á•2ÒDAa»¦*mXiJY¼Gr¯ ÛPöÐB³xµ£~WÓ·J­uöo‰ËP°+zK»Ö²ñ#Ü8 È>•jõãÕu‹W¶Ë*Ì{ Ѩ´ Ô­=f"t¬ ÔTwñP$Qñ¼†ãÞ¯hâAÃåC²?b{ÒM<+âØÛvà1=0+ø¥]BHþkGí‚ÃMYcÁ1ÆõWÅÈÛIÝϸ§ßÚìÐ åÀlÞ¦“ÙS:[f»²Ç&ë¹X–ž•/ˆLÞ}´LÙÂížæ¥ðë[.ÒX‹€Ýû©¤ñJl¾„úŽžÀÓëaŒÖ¾ÜÆX‘€Ú·´iœé('zàqT½ö˶…Ðlì#ÐU/ .m.÷.Uˆg‡b[•F!}¹§e¨jYÖ5¶µÔ–×åL©µ/¬Æ-gÀ-éXšàÛF¼Áj׈,a²´·XÐ+žXúÓIÍFñ"G`“¶<æ ïWtÍhj–RH˵ӂ+´ëuðظ+™6†¦ð¼ ÚO êÜcè*ZVlɲ¹úÃÜ2–Ã7Þº]3ÅVítRhŒ{Žbèp«k“ ;sÁªúݸµÖªðÄ6?­æv$Ö>ŧ<ÉxÚ°ôO[[@"¸óÙºúf¦ñ<+6mr@â› øzÚìäŽÜTÙ%¨_S¬¨ëÐó\¶±â§ŠôGlª}ì×Czap£€„ à4»d»Õ)†W$µJÀÙ~ëÅrȊЦ×èIé[Ú^¤n´¿´Mòí“Ð×3­Z[éC (HüMhëóM.+hWj°Á"›Hßx¥’|[Ä0q“íZãİå¥ÑË9ãhõ®^Ö?í Hì­`Ë‚KHÕ¿'…ŠhM?ïïÉõš[¹j?ÚÏd×8 W’cPi~(“yþMÇ kœÐtèïu‚bv9ºš“_Ò²n‘­Û Ãrþr«Ø.ÎêûV´ÒíwÈÀ’8QÔÒhÞ#¶ÕƒÄ€Ç Ö^™¢C©iK5üÒJ ?Ãô¬++)´í~u‹$"·ÍíŠJ(.t:§‰aÓ]¡Ì“98¨ì|B—öS¸]³('ÈÚK—R½Ê—v'nêÖÒt‰müÛ™©*J©î*¹R ²†…rÇÄQ¼]ˆ5é"æÞ$’I\O¼My†óëðŽ‡Ì­Ï\¼RGnN€fÅ)+°LÑÛ-ð‰"&2ØßWõ}}4ÛA0ûãbšæšÒeí£°ˆ„@‘Êõ©<_f"‚ßæ9A³š\ªöÝŽƒNñ47¶-4¤FSïð¨tßÛß_˜Sž ï\¾“£K}¦É)œ,I’G©SD±7šºF±”ä0ö¦à‰»=k$ %²µwz,­äž@0™ Uá˜m>vÎæ&¸¹¤¹ñ¤ÐÙguõÅf•Í:»KŸ·ZG9oP²o|Ygmz-Nü©ÁaÐVܱÃq!Ú¨»@Âø³ÃÒYÈ÷Èsž~¦œRlMèu×µ½µ‡Ú̹LdZÌÐü[£t-æM…‰Ú}k™ðý´ºË­¬ó³ÇÈZ~£¢'X„Å‘¸{óUʶÙ×êþ*¶ÑçHq½Ï-†éP\ëñ¥ªÞHG”yPz×âkSo«c~íÀ1Ͻ]Ô4W‹BŽæIË`ûÓäI »¹ÛizÌ:§Ÿ¶ž£Ë$ëqⵕv{zŠw‚mȖែpéY×nÐøµJ ~ðÀÒI]¡\ôu(©žŠI5…uâk++áüóÎ: O]Ïk¤ì€æI8çÓ½q!»ŽÚÚÞ"׌s!>ô£.Æäz¥®ZYÚ$òKÄ‹”½E§xŠÒâÂK¢øT89®kÅzI¶ÒmØ’ )…cèÚUÞ©e:A.ÔB2»»Ð š¸]ž‰§ëº³·Ùß;zŠÙ\$}y÷®?Â~›N™î'l …•ÐkºŒ:]ƒÏ&r8_¯j†•ìŠW±OXñ ¦šTI($ö^µ-޵kh^A'Œâ'ðõΡ`ú”“|î …=…Rð½µÔÚ >Õˆ†oš´äM\›»žƒâ;=* JIr: ’ÛW‚çNûfý±•È&¸/@ñêI!?+¨ÇáV,´»»Ï ´²\ì·E%P{RäV »¶—®Zê‰"[¶Y8Á«Jgwç~¶šMo).ÕQóû×Oâ%¾l¬~{—NÞ¢¥Ç[ž—7,5(d»kU|È; ÚR¡À5ÀøCJžÞøÞ]¿ïH [žk¼ul8ÍL•˜E–ö¥Î:T0ÈÙ;iês‚:En¤p2H¤50M)óMrp)䚎BVÇ$úÒ\š~1Mè÷¤ –ëV!•‰Æ)F(84ÄFsß ¤Ü1‚iÏÇãYÚ¼“ŦÉ%·¨ÈúSJâdóH»öŒg¥B?w? äô}@K«4·s’î6®î„×Và ÷bœ•…rÉe2;P2SŽÝ*9~âóÉ©#]ˆZ’†¹ÀÁ¤Üëþ5È;KóOå\Þ“«__jE Òª×ìih–ÒA5ÌŒ…wNNq[|·#œT%ÀŒûÒ™6  éïK¨¶#”FèÊêÖˆØ4er cÔ’ÙõÅ:ˆò{Qq{ ymÜ XÜäªü´áoº$q¨1ºœ“eÏbšÒd€{Ñp±Ìø«P™&KUùae˵O]RÊãI{DʾÌmÛÔÖí¥¶¢JÍNÜU[}ÚÆãÌBî:Œÿ ]ÕˆiÜ“E²’ÏMòÝ~i b>µnÃN·±24Ió;d“Ô{UˆØ Ó5JûSƒM1‰Xüç<-EÛeZÈ~£¥C¨  6°èã­Ig§ÃaÈ”r0Ì{ÔðN’¢È¼«`Š•˜š.ökœýÖn5d»?ê† â–ëBK­En³ˆð /©­­ÃRÃÎ})Ü,®sž'L‹@zV·â·ŽK—#fÓžõ[V±7âÛhËÿv®MymbM( À§ºS/ *j!ħÉS;Ôšî‹=íô +´!cØ[–—0ÝÆò@èÃŒT¶Ç(¡‰ùIÑÌÓsž ±žh--Q °À'ÐqZz.ý› ûålkYÊŒ;rGJ‹dç­Ò±‡â *kø7E1>võÎhú]åۈغÛ+e××Þî-œzàÔh‚0Á@ÑÍdÖæ'ˆ¡ìO-Ú„ÀV}£I…f© ûšéš=èR@wÒ‰ ãº€))hUŽgÃzmË:BD<á=sÅWeÔô-FE¶G1–$|»®ÖÑ…ùP€*@U‰æšœQÏéZ\·WÚ7ÿëÜOJè%¡u#‚¤QËžJ£­•Òæ{f!ÔqOjW¸lr6BîÓV–P7™ÁôÅ$‘¶‘â™Ø±,¿KÖeÓî™çBÁ¾ù?z´¥]Ôaš8]!Œr̽kBJþ%Ó¥‚è_!%dÁÐÖ†…{{eõÕÞé0^Z­³ ±Š¿/Ju½”V¾D …zNJÁcÎ »šÇR3°9,KZ´¾!Ô£0¡  k¤Ô4kÇ à£÷#½iiÖÖ–Pì‰àcŽôÜÐr³›ñT¦ÞÆÞÓ’HäÕ¿_«Û­ Éq“žØ­=cJ]^ÝbÈNsè*Æ•¦[iQ>l`šW÷BÚ—%„6ràך¥Óišä®Ðÿ{ô=BìÚZK:Å WžÛÞÛÞë-q¨|©œÚˆC5K™®.ã¹’,q³Ü Û×Cj^¶»‰s°äÔ>&’Öù-–Ðï /a]V•§˜ôh­æ,¸#ëTݕđÁèšÐÓÒH·FNOµwâö 4–»9'ë6Ø­ÃI),¤ä/lÖÓY@m ®À!Æ©”“cQhóÍ#Q¶³ÖdšOõLHã­MâJ;é¡ UU;Iî nÂn.Ä«1òÁ R¶/ü9g©@×kª€Œ;SæWVdxÄVPh‰nç À_SZš|†ÖîéÆ&¸R@þèÇJ­¥xR £4Ì&u9\ôÒq³åž*[WÐÐòKK“§j^s¦v5ÝØj¶ºÌ$yçå©5O Ùê%dÉ…Éù¶¯Z¹¦évš\!_›-ÜÓ”“Nç£Aäøž8™rD„}+CÇ’}­& ššÆÎTñŒŒGÊIlýk­½³¶¾­çB:÷¡ÎÍ•ÎCÂúå¬";IcÁóOñäƒ6Ëê ­[ XÚÜyÀ»à‚ª{bè2êÒBmÈVQƒô£š<׬dèl‘xZåÛ¦5Ïhº€°Õ£¸eÜ#oÖ»_øGžÏÃòYFÛ¥‘O>æ Ð¼$-äÝ€Î9Òš’Ô\¬5û­jõ4ë\¤eCH}jèlt˜ìmâ‰Üëîjå¾›ok3K!]ðsVä@O­C}Š^ecn[xÅs>5Ô`M)­Kæf#åôÅuÐ’F{çò¬­KA°ÔÞX‡šÃh~ô£dÆö<ÿÂú­¶›4¯pHÜ+§±‰µíH^ʵˆ-O­gÙø Öû}ç­¸Q]ŬVðyQ¨ÒªMt%&yWŠ&ëòcîÆBº2ÿÂ)nWÛ•YÔ< oµg¸„ŠF¯­^Õt /´¸l ”F‘‘œô8§Ì´ 3›ðuúFßeÚK»vôª·DÏã@©ÿ=¸Û麞•Qæó?rk¶†I½´†é^| ‹`c^{i å¿“0WžÍÿšf lJ2\¶r玮#m&ÿ¼À‚>•‡áVÒÆ …™‚îú×e¬i1ßhín‹—Œa3ë\®™àYç½}¸?tzQ¹lÆÓ¹×hÚ½¶ªÂNàüµñˆÒáÀÈßÍtšf›kcŽÞ «ÑªéUÒšÞ%Á µ ÊEYØát½bæm [T]ò( }1Yü–ZÂN×;^»ïøgû6ÂDoøø“ šÌÒ<,ÃÜÝ*U‰Þ´æDY˜~3¸YobAÀDÉükbÝÚ?–åJñRø“Â7:†¢&´ÆÖ6{U§Ño-|+%ŠŸ2R1Ç¡¥ÌšC³¹Ìø6öMFE•ˆi@U#ÔÖ¦¡uc¡Í LOzäœúf¤ðïƒ sxJKÎÐ;ZšW„-­®$žñ¾Ðçj•ÁE”|#e}w¨RíPµOzô Aü¸ª‘ªF‹.Ð:b¦'E`ægA.£iÂA$¸víXž*„°ŠLô%GãX·!æ…oə߀­MY´{A8ýæAŶͻ[¤K[aÓrŒ´ ‚ŒA®í/¬LÇG—é]®¦_G7Dd*函=A2àš0B³€ç¢úÔÖò ƒœW -üæùnÏPß =+fmY¿±âÝq#­á>´œAKS~âå¬Ä’·Ý ¸{×3oëÒM4Ò¸rp tö¦C©Íy£]A)Üè};Ôþ” 䈎HȪµ›¹§ isi¢wvË—· ÙIY²Hã½TÖ.ÆŸ`ïË“…_ZçôŸÈ&ò®É`ç 詳–£ØëK–ÇFYs\þ³­Ëaw q€W‚ÄÓuO›w‰m”ÊšXîtŒûSpô¨–RùÏõÏ^xÈŽE{sZ–W°ß[£#m.:zb“M L¸Ò7;Ìg=6Ô¨ª··ÂÔÄ»rò8\}iX«»»’ Ivu zÖ_†nfœM$Î\³plUíU ²›Ü?¥sº&¥ …¬¯)þ,ïV–„·©Û+¯˜sÇÔ®AL“Ó ¬»+èoQe‡z¯zµ<‹ eÜð£5è ]:ÒgfšÞ&o]µ_QÔ­´½‘• ‘ÂJ}–­i{½"oIÎkÅ…\[‘÷ŽyªIÞÌ.¬oi:ƒjVæw‡fÖ;}Åj+€AÇ^¢¹û[‘c¡G+UÇ©ªÚ.¼³]LçƒIÄ:åáØŸJ¯4Á>lçš´3ƒʤÀ_zŠim♚iB†áAîi$Ç}KªDç·Z‘\ƒaTÅÔqC¸°Ú9ɍֿ;¸Ä‘·^„t¡ º4%ºç4íÛrÄÕ ìq†Î8§\L"³»õ¡ l¼ŒÒñç}: Î7ÚàÈáC>j–9¼é2§‚"“@™rD A<à÷ª· §^Õ`°$/Z¯&T3TP;“Û T,$SƒŒcÀÎsU`dRÉôâšs=´ñwu*)‰œî­â¥[§‚RHz6i‹áûmV4¹ˆ˜ õ]µ‡iØõ@.mËnžõÞ£†·Œ¢” 2[Óa-JúG‡í¬~oõŽ9 {Vñ`¡K+*Z´}‰Oï@ËU™¤.Ÿ/nõ›O¨î,†LÚ¡`F7óšÌÓõ˜næ–Ýr> = iLÄø Òµ‡qåÆÏ–¤I ŒŒr={ÖjŠ—mlïr9 pMY'ä$V]ÔW{„R†àâµÕ‡h=hê %Æç Ž*ÙqŽõ]Us°p}j`¡~\æ„ pcž•Ķþ4æ¤7 žÔÄ=Qv(cŽ)¤ n'4†NÌç­ Œc4‡%´Á“@ ˜½"‚CBÆpM9Pl;ºÐ(8Å4)ØrsIx➤Ž1Å F)0¨hƒíFC{P)ãÅ(Î0/Í qLŒŽÔŽÅþQÅ)q¿§,|î Aô§ðzPHŠÙvrÖšT4€žÔü ¼Rp{â¬B»8íIŸ—»Bô9 Š=*ˆDмdýàGçRÅ hç>Uö…~QAËtœ0®‡KÒÞ1=íÏúùÔ–€=«¡(­ÁœÐË´1È«r‰Âiz|·–Wa؈S;Fî¬)úD:=ì<ìvØýž·xU£¿/'­GmVù0.Ô8õ£›@Hã4Ûëµ·}= .å[gªäT:EÅÝ­ëà ;ÙÎMwñA 9 Ó·i¬›Õ³Ñ„÷!G›&Hõ$Óæ¸¹LîüLΩÄn ~£;[xŒÏ(8RìâºÀÛÚ´òÿ®œïoǵX»Ò ¼»ŽâQ–A»xo­Ú‡-ÇX^ Ø ¢@p›»ŠÍ¸i5}Kì ÿñ6鯵mØSm Žyv¼„>¦¦ã&H’0ªƒF+?Ä¡ÒgÏ@ Ö–ãÁ_Z¥«Ík‹‹¦Â0 Žç>”u†ky<*êì¡Ç¾sFœâO ÜÆ§7gßæ3C¶»²’brÝ÷}?O ÄKÝÛcÆ~•nÖºøtصÁŽáqÊéÿë«^)‘G‘Ç·Z_ \ â‘“äžwúUý{H/c ±‚ÏGr(º½Ä¯b{˜b¼ðè!ƒl‹#؊ijÿÂ9zªpý \†Ïû+G‘åcö™—b'¦kJËIŽ%­\|ò®æúö¢ö úu´úŒæ&@õ ðøÞò9¹FpzdÖp[Ý6í Œ‘#;ÖäºD–ú,« 3Ò{ÑpE*À½…åÇe*£éG„:«E4¾’i¼û?ùfêyþé4¾Rš´ƒ¨©üé÷¥-À¸ñÎÜF¸Œ™#šÅ†àñ0ˆQdàTºÌ/ÿ ØYûùNMC©éòXkœ³¹ ­ß$óBgÄÙ{øŒ| S|Cm"ÑTaö€H^Õ7ˆ›ý:Ì\(Ï¿4ÿ‘¶Õqóm-BèMb M6ÕÔ5€Ü{ž+sÃöñ&’’òsÜf²5ÂdÒl_ø°2 Õð«Í%‹,‹ˆÓîûÒ{ÜÓIÒ$™¸ &°´ØæÔõF¼Ÿ>J“åƒÜÓõ:ÿV|YXþóÐ×C¤vñªGü#;!™Ú³âÂàŽ>B+œÑôè5 I€‡ @jé|@ ZT®IP¤Ù®k@Ô£µ>K£±vàŠ¨ÞÀÃK2iz÷ìv’PÿC[“É©ßÉHÕw;zÍÔ¦ñËöv|K“€{Ѳ©®!]‹ž>]£Óž!‚`é3>bbº›[d“Ä‘)À W$ýi|Pë¾B8íBè6ˆ¯þÖšß!$zv^Îæëû&Híÿ²O ­=]‡ü#p?x¯OaQh‘¡]H’?…GáÛÛ£u"^3Ëg±ª÷×7º¥ü‘Æ1gj¯µYðÛ¬V÷lzŒ~”߸þß”ÈÀ3ƒ­ÆŒ{‘vÓˆgg/-ë^¡ÛI›JÙqÍrº‹Çÿ :Ê+€ßZî­ÜzqS7 Öç®j¶zÙ‘YÄjFÁÛ§Ôu›½FÅÕ Þ¿9 ÷}«KÆ6ñɦùÄÊÃëT¼,ál€#1¡mq=ÊÞÔ$K§³”œ08ÏcZ·š¤É$6*f¸ TŽÖ3«\_[cËŠ2[3QøVú{tÓº+ÈCdµêÇW¾†ûÌœn|ä«-uêw7Ú#Üq((¬O]ÚMªFÑJ6\ŽõÓ³¨ÒƒÂ@ˆ¡?Jo¸#€Y/&»s58ë]ÝßÙøsæßæ1 “Úªøb16©)'œ3]ˆPGáùOÈéNO #‡·¹»'m»8rrYzšíSSŸKðþûæ&v`=kÁÑ .¦ÝèǽOãë5ª• }óCÕØÆȼŽhïånd;ÔŠÒÖon›Nµ~cYÍŽæáëaªKº˜âlu¡ãTm UP<Cjöefûû8£ß€yz׳7á›¶¼ü‡a=ê÷…­àŸÃ讨Ã$œöæ­ë’$$û@åµCjö9ß;)º#œk:û^¾«‘+„V /cŠÓð& ×9ôŸ¨Á¾*1ªá ƒ"ªÞðºå­ÔvÚ7Úæ@PÌ=kƒÔo5 iÚkHd©8Û]Šî^ßBHW! jN†ÑáÈÜ¡©Z+œ­ïÛ`ò~Ú„’¸@Ý…jÏ©jVÚT+/jïYñÓ{l +¡±µ^0¤‹Ú©½’ÔÌð߉EÖ-®ÖãƒëF¿â)-®Ö̃+§Øšå-¡{O$DÑÈs­&¥¿ûrCÃoÈÏ­ªá²4,u+í?RâYØ€É÷¸5³«ß¾¤ 1Œ)ùÓÞº=#L-Ýáܶ>•Îx¦e—YeùTBµÆZÔuýBXááÕ0þ#]§‡®®n4ä{€D9ïIe›iV™Š2A»v­k|*aGjÎLi{ãÈÝoÑ™ŽÒ¸_jè<æM IãíXÞ?϶ÏB>µ¥á"éáÇÏ{š·ð ©'ˆ5É!ŽKK$/.ß™—økŽÓµûû+±½Ì‹»æV­Ï j6âþâ+¢ ’¹Ã5PÕe±Å(ÁÂŒc¡õ¡%°=u7|O­Í•… WsJâ¬5kë íÜóËW¤x†{GðÌ’áÚ‡ë\Ÿ‚a·žîëí* „zQ¶¹7ˆ®ïg‹í2‘dv÷šâÛhêÈyÅ€úŠäµ¸´»n8m6${±!3]d=¥¶2Àr dýíÙâ‡mv2¼3â[«‹©£¹bSip?¥P¼ñ]ãë ÊJ¬ÏQOðUºÉ«M½CR*¯ˆmãÅD(6e8³E—0kc¢×¼I-…ŒFÙvÉ*äJ©¢ø¶sc;Þ8fC…õ5ŒLb·B„HÚBöª¾ ´‚àÏ$чdÆ3BŠå êO¦x¶åµÅ3¨”Ûéšé|C­ .Åïˆþ¦¸{8ã“ÅÍ<} nx󟳸E8¥et?‰5ˆæ2‰Ü©$œü›o®êMª „wiX·±ü+¯Óìí_ÂhP·”NvóšÀðBFÞ "Eå$g¶*®¬ÂÇ¡Zùo“Þ:‚ÃÓ5âýdé¶ñÛÌʧ>µ»¨ÝÇgi,ÿóÍIü«Îím/ÕÎÞù«²DÞìÕ‹StáxÇd]An¦©êîéaâ<ä²ÜЧ¯Û}›B†8²R'¾†¬h¯öJDÊ‚Ç>ôº\<Œk='YÊÄÆ1ÐÜWQ¦YÇeÌ!娧ùÜ„µ,no,õ šM¶4’,½;“ŠqPP95«Mr¶êm‹‰ÀR;}j{½M¬4ÕfÃI€>­G(î §Myª‰®0 ˆü‹ýïzÔp7ƒ\ÅìšÍ½¯Û>×”Àb23RèÚÅÍô›$BTéM­ž¦ãZBó‰Š!”¼¥LT6GlT"RN9¦Ç!3³Jž*FÚ}µ¨s@oëŽõ‹áø kw®P…ãñ5¶fo;h8SéQO=½‚IrTŒ¸ŽôîÄ[{+wNÑ¡•yV+ÍV›O‰îÖô¦d^ÛSM×?´¤‘V"¨ƒƒïN¼×c²) ìÍ‚=(³Ø.‹bÞÚæàLÑ dö§\év——i×yP ©Xð¥F Õ=KVƒNÙæç祭ǠÝCN‡PÙ) ÈÇJÓ·mãXÕ@ 0Q±¾KÄY¬3Z^gÓÔV] ÂÖâIT|ÎcS# ÜQ£–U##­7*ǃ´àŠC ¸„–ì¬nk›µ°¶ÑŒ×7;7‚L@ÿvºrÃøºwªÚL…Ë’L˜ÉÝéT„ÑCBCsq.¡(ù¥?'°©5 ÞêIr_®2½Î+I"KdT@Qв”Í+…ŽoRÒ^ïUJ$/ÌÕˆ4I›Ë{Tܨ»qôé];Ȉrížõ p@éƒÓs1òœÚh¦?´N •†ñòô5ƒáÉ".®2¥0UƺbÁN;T¡ˆ9;QÎÅc—Öü=-ÍêÏnÇ÷„nžâª_h ÒÒ2í#gÌoL×fN_‘ô¤$gq=©©49m_Hš=&+x¾ÆËc®MO§YÜÙøvâ7{)ÂzÞry=±Ò–èy¥Ìì9½E–Ü4÷$€ãOjÉ—K™5b¶2îmÀî Êæ»»¸ŒÖ¯8ܤf¸i/ô{ç+±$†Êžj¢ïq4;[ÒåÓgŽbå÷à’¼+¹Ó¤’K^Aɱ#·¸ñ÷1y1ÆÙ ÷®’Ôb1÷U@ü©IÜ0üYgsubQ9a\΋¡3µµ¹tˆœ1¯H*¼©äŒUt·HŸäP=¨R²°ùJ‘iÑÙiRCÜ̧>ä×5¡øZk«ƒ%Ð)œí®Í[2гçŠJL<Ë^ÒŦ¬Ð[© €@ú×Ik£Ü É ²ì:zWHðG$åÂ&ÿZ”ôÇ_\ÓrHóÃP’ù…¡)´á˜×]­iI l–’?™‰þ*ÙDHwÔ.zájVã`~éÒr¾£Q<ÓCƒS7 ö ç Ý«°×t ïô˜™ŸuÌK’}OzÛ¶ŠÚÖ#Œ"ç'd¸`8È¡Ï[‰+Iae©Gz¤Ášé›m4“ñ]¬+s€õOs Ð2È4Üï¨ÔO<Ьõ©#H¡–Kxõ5Ðëºd‡ÃíJdxðI=Mt%DP0½¥U`òmÏ%¸¤åwpå±ÁxM®bÕš8ÔáÝíUu(ï­õ×vW3n,¸ï^›g§ÛZÈÒÇa†;zÕ±Û¼Ë3Ä"Ž ^”ý¦ £tssÙÍ­øl,ñl¸p⸛Xµ 𣬠ö^+Ø1†Ú=j6‚6}ÛïZJCq<³_²ÔÒâ9oIw•~R+wE“PҴ渼—褢ú“]¼Ö‘ͷ͈1ƒ·¥pÚŒ—:沺dq·ù<ö§ÍtKVd~Ó%ÕµY5øMăëQø»Ã—V÷²]Â…âl1#µwú}”v6±ÛÀ¸ &®O ÉÇ”Œ`Òç³*ǘxbmQ¤H¢‹t€%—¥Pñ.—sg«HdŒ”#¸5ëöqZÆVEÉÍ2âÒÚä£Ëy¦{QÏ­ÅÊpZ>‹­_Á’áá¶\Ï_ʽÎk Æ_qU'½9Æ¢ô©¥»#„øƒE³ž9"µ<+nÃ*¹ûêZ©ñµµêæº= Ô[éPÆTt¦ßº»<ÊßD¹Ÿ]h"W ²X/lÕßèfÛRŠ+T,YqýãÞ½)!…$fŽ03Ü.Ú{[FÎfòǘæŸ8rœ±£]Ãá;tÉaß 5…áË;빤† ¬n1#{z¼öÑÜ[´r«e æ¹Mví|3h‘X˜s¿Òšô/SŸÖü)%“^†ùüÊzýsV<5s.}o¼», =³U®µíCÄ)bbß3/­u>ðéÒ-ZIï¤aچ쵫Ðâ4û½;R+oye;H4kqß6ºX€¸bhí^ƒo¡XÚ_=â ;èjuÑ­ÛTkù>g*ö¥íî>S”ñ8<;j.yŒF[¸öª~ Žbnš0ví× ê:M¶­j°Ü ÊE6ÓIµÓ 0ÚD# }i{MóM4ʺáh|¾iàôWQãKy_II,ŒØíŠÜÓ¼?k¦ÈÒÄ»¤v$“ï\5[ØïšÑ¬GãM>f¬ X̲ñÌz;ؤŽ ävW×ÃN×"’@p[k~5±£kÚ]µ‘‚k}®Ãöîɪúf„ú¾¬ÒÁŨ}Ûþï¥Ö¤Úç{ªéí«éÂÛi|î*查çY%´J“ß5fJl@xPj^V`×=Ë·rX­ÂòMLìP»ãoLT®øçŒÒ+rØ~G9§º—½*œnTŒŒÕÅbØÇXÀ¥(1N+Žin  <“Šs°Ù´Ó\àp)s¸})€Ün©„š`lRnÔô¤À8 0\ûÓ@ei@ÉÍ!Æü 6‘’(ÀêzÓœ‰NIÝNg:SXŒâœSp ÔÍ ëZ¨%d ã‘@GAÎi9㥓ŒSÐ\)5"Ê7â£x·ŒÓ)Ú¿Z1ë@â”ëV!…xâ£9©LS6óº˜ IZ‚úßíVRAœ \qVs‚O4ÇdŽ2Ïòª‚sMæëi5¶­ö"Ø,â6#û¦´¯4³¦k†!$`¹-Èõ¬û‹ÈF¾n»B%ßžýk¤‚U×/bT¬Çrçø›ÿ­Z¶Ìô¹ÎÇk:ê×6з÷•ÛýœóSèLšÄ~ìÇô©ì#IüEy†,qëƒëMÓ¤[?ÜÆNÑ#2/àx¡ì°ŸÛ7×0Í *¤z笘<Ý[OC†÷µ´ë•Óõ˨®NÑ#–Sõª~& Ú¤&,3•Å$=΢ÝÌ¥ËpÄàý+Å­·ìÈ=KûWEiHF€Î{ñXþ,µ3Y,è3å·Ì}J~ðú^$mñÙ:ýÃZétÌ6•Çý+‡YðAo$ØU8Rz]Ý’Gm`‘ïGÍô§-¬JÜÌÕÝÿ±î @ü+ûJþ 6Ø*…9?жõK˜n´»¡m(r€ÇÖ“K„^xu#`PWõâšÑ îXÓoã›M’è劂Xw¬í7^kEâ•0ü˜ê=Cáýð_\Ú9ÎGÜTé›V]ß?wÖ¬jö6ã@†h¢Ô),:óQøO‚O*å.­ž=E$•‡ws^ûT·ÓÁ/Ë·GZ`Õmã·k¼þìá€÷5‡4‘M¬Ü‰âó]‰XÇ¡%Þ%¦ˆâCÈ`à}i( lÝKûY-ølFqL¸–+Ý6vS¹ “\¥´SÏa'ÎV8`;Þ¶¼:„éS±åW…6 ‘ø]É(G¥\KkJü7›™#làtªPßkˆpYqǾj-¾É¼Ÿ,}齨t:§"Ú7iÍs~#¸¶¼±†hœ1 G½´òj:ÏØ7”‰xã¹FÿJ6ÈÍ–wã”(Ø.tZd‘Ean¬á2¿.{“ZÈNðäÁ®îÚìØÃ;6c ãµmiÁ]&W—“üÉéCˆ“5"‘-îÝ‘^A»–äÕ…1A&YÀg=úšá¦i®P_;å̘ǧҦÕ'¹°™ P°rŽçk$£<äœÔ¨ÌgÝ…qw…ì·ñmÞ«ëšëÚS±à…ËT44É&ÂIëJ„sŠáumfk‹ÒÑHë—ñ[Ú^¹$ºTÎ`Þñ.sêi¸» úŽÖ­ï®g·Hxˆ–ÝÈ­`4@rv€+–Òõˉï™%$‡Î¥ø‚àjÛwbm¤Pâöc«v ƒ×½J÷  )qrk¼ñ!{èÖ¶o˜ÿxV´Ø‘ ›péƒK–ù>‰¨]ÞÏ;Ì?t§ Z^alçïÏÒ›msl,Ú"۸ⰥñU·žè";N@aE› "Ëû°Hé\WöÁñf•Â#”tÀ­KGwp`ƃߊç$½Xõg¸Ú<¸ÆÏQ9>—â7½¿xCÂÖü®¸#‰õ®7GšÞæá–(ŠJçqoAéZšž±Ÿ2FöÀÝŽÔš×@G@²à? –6Œþ5Ï_ë1ÚYC:Æ^@ô'ˆ¡M,ÞmËnÛ´÷5<¬w:ùhlTωöð+;K×"Ôb;>GQÊúW;­íØÁ˜ˆ#l>;ТØ\ìbÞn<äâ²u¯g\$KàqW4ÝJÖû&È^õÌxÐ ½ˆ¯ÞÚsN+[17¥ÎÃL¾ûe’\íÀuÍX[°Ç`W?£jÖÖšm¼7€Y@ÖÔ ŽÅ”î{RjÀ™1™S%†@ê*S (?ºyÅS»’8³ª¼œÕØÞ¹‚'îG=þ•6¹MØ‹_׆š#Hâ_={bªÛøŽéô ®öem«Š¯âèD–0Î;63õª¶ÿÅ#ܵZJÄÞæ§…µ›íFòO=EPk¬k€ \ç5ç¾¼·Óà»–âM»€k¡ÒõËÉ6#ÛŽw¥(ê4Π(ò÷ÿ]B®ÈïPB8¡&FÂs‚}kŸ±ñ7zÃ@í<=3R“clê%%FEI»_ZÉÕµË]-\1%º(© Ö,ÓKkÏ7÷`gžþÔY‚h×/^ô+. dišÕ¶³èŽ6’0Õ}cÉãÖ†¬;–0Äýî* i#Hª=MJŠ_’Ý8±õ]Wì·Ú.äp”’Íålmó¦Í#ˆþLzš¦× gjÓÌqŒ“TípVµ´­RÛRƒÎ‰²§¨ô§ga6‹änVEH1Œ™¦Oq0I+¶Õ@Nk’Òü^—Z¤¶î¨°œímÝi$ÚgSu§Û_Fâ áNFjÄH0Ž1Q •X »üª3ŸjdzñVŸyw%¢9ó žæ‹6ˆÃ‘ùÓ| AÍc_köv§˜+0*ÚÏ#Àe‰ƒ#( Ñf –®®¡´·igp¨£œ÷¬U—Mñ5»ÆÀ¼hzýÜ}*‡‰ìï5+Çî²îûÕÊézíÎ?•"à§¡ªQºº&ö=#MÑí4èöÛÅëÜÖ†FqÒ²tÚj(/óàd¿q8°íPÓ¾¥¦‚TÀÜ:æ|œšç®üOgop¶ÒJY‰íÐV¤º½•‚ÜÈãiäS³HWMšJç^¾”žaäc Y–ÚµÔ+t’æ1“Ïju¾§ow—·—pŸsKR®™¨­‚9ëT/ôkM¹„1É縦j­¾•h³\>ÝÇŠ¯e«Û_Âg†]Àuö¡_t'k™Éà2)™Û{'aºº "¶O*%TqŽõN×\±½‘¡Žp\ žæ¯y±ÛÆòJáFA¦Üž‚V-FÄœƒŠŽàHHlÖ$~+Óg»û4rüäã=«`¬„[+×4škpN娋TŽçè=êgŒ…°ÄñRÁ×9#ÚÉð¼Õ¥ pˆóŽüÕˆÀØx in´6)…ŽÎ=h,J `ñŠ]áPñNÜB9ÅEJ’Ç"€Ž»iJ.¢ °PSsòzP¼qRƹɨ±Š‘IÒ7Æižƒ¥<œfšœæ€:Ô‘óH#“IÈ| t„1Q¦iHb~”ý£a'­ À未;ÓžMHp_36Š­#¸>Ð\´žX.€8ò‡½8 Ò©Î)½r*„{Óv‘Í<ôÒô¦H#šcª²e §¨+OŠ˜Þ«á˜o6µÙèø^åZ–VQÙ@°§G>æ¬<˜•‡"»; J[¡%‡bk«‰@àôŠÊÖØÛY%¥š’vÇËØw4s\M4›A-Õíò™‚̱»»±×JÊ™#mu=ó]……ªZYG€ àïHúe´—ËxÉ™—¡úRæWÔv9;û™-¼Lg)“õUñÚÉŒn}+§–ÂÚyÖgˆî±íX~.Cö[bÊ š–¢qeMVK„ÐíáT%÷3Ãz¢Û²Ú,ÎÙ\{ú×Eon²i)åL`ý*¾¡Ça½ß!o”ú 9–Áfs÷†M/Ä u,A•ذZÕ¿½‡QЮ%„äp{Vž«¥Ã¨Ã¶Cµ‡;‡QUÿ³"kÙC²õ=Ï­[…µ14†FÑ®bevÉ#ŽÙgÃsƺmÄ.àOÀUÍ7Gk;¨c›÷Ò‚3éÇhÚ(³‚_?ò¤ŽÂ†Ð$Ì¿ K_\+0º{àÔz<ñ¯ˆ%f`Á>æ®ZxbXµO0°¡%pÝi$ð̃V.Œ>ϸ7ÞäSº™JþAmâC$€„Ý’}E[ñ-ÔXÛùlsdØ ×Õ´Xõ~»e~Sëõ¬‹ ôÜÄKÜ?Lve«9-.´)˜ec;Ç|ŠÀ²bºuð •e>‡5|éƒHÒ¥žfýôƒ`_­hé:P]+Ê”s0,ßÒ‹¤$®exnÒ™ÜÊrS‡¡÷§øŸh¿GdééσFÔ,µ$6y*ǃv©¼Ma&"ºÎ_ÏsôªÒ÷½´Iµ Ú0j-t˜4we8ÈóªN—7Ù纜¤QU§½kx‚ÔO¤È¤ŸoV}C¡ÊÝÃg.Ž—Q²*„*;šÑðüѦ‰p€bÃð¬»"K­6âw%vd ìqÖ¡Ò ¹hîd‡;B}êÉ.xb–úY1’£õ¨5#4C•gÓ¼3q,¡°u!ý©.0¾&%s“(8þtöaÐf­c¶¤‘"íGÅOâh¡{o,•Á?Nôÿȵ¢uùˆP@üj~V˜Û3Œ;F _@i.€tC·…^$80Ù¬ .t©.à®HÇ|Vฆ÷Ãr„íM¿ˆ¬­'T,%³uù°JüY¤›„~²Žy¦šA,qøÕµõ±\©©µ¯áI‚Ü\ÀëËŒô¬y®$µÖÞr¹t“Š¥{‹¡ÑÞXǤÁ,¶‰±ŠÜ¥d[(Ô4ﲨÝrîY˜ö­-Þ«kq,‘· ”õ¬­R‹O¸= W#/O­$ ›º®Š«¡"Žd‰:ûzW;¤ZBck$Å íšô$xï,²¼Å Çç^zñÉg­¼Vä†ÞUqØ"ÆÍÿiF´ÊNpJ;Zç ³šÉ·-ÒšôK8ÒÇN?/™'¹=ëϬîã‹_[™#iE·pgc¤é+¦‘å1l’NkÆr!»‰1È^sï]”°Ü§›nùFÇ5ÃøÆ@ú¨QœªŠQÜ:ÍáùÛNŽî&.qÈô¡ámRâ;¯±KÈÁÆ{V®‰¬ZKc ¹oÞ ¶¹Ëux©ü®v¹çÚžú1:»Ë«ß5œDiþ±½ë–¹Ó¦²Ô–ر X`z·e¨Ëg®HÒ“µä!×ךMfòfÖEá@¸*§ÒšV6µøä‡Ã°¤„± MWÓXÂ)8oCŠOêK}£Y²q¸ä¥%ƒÇ/„na—Œ’ØúÒ¶pð¾•m©Ú\ý¡rAÀoJÉhŽ™®ãþ ϵhx_X‡O2Aqò¬‡9Õ Ö5_³Rè\tôé«ßPè?_Ô帽[}ÅcRÞm¤ ÝV3a!1&ÛÐÕoÂbÕOË´•ÐøoYÓ㵎߈dR{æ“ÑhLÁ,:”lìX2¿…O“usáÁ4“„Š4%Pt?ZgŒØ¶¨€¶W`Ƕk~4ßàg*y1qEôCÒæƒ –mQŠJB Ëé^’‘‘µæÞ¾†ÆêF|ï‘‚¨ß\]ý–Õæ›*Š2jg½†ž…]cYG±gë)ÈAïXÞÓç½½þÖÔ Éåöªúu¬þ$ÖÝÂâÒ3ò\WiÀ6ªŒ(¥²©K]·{ÍH!?;Œ^\~Û£^ŽJH¤œn¯_• 6ì‘Ò¼§Ä—l×%eíö§Mô‘¯máyµ{ÔeŸ3H ¨õüjO<Öw·Q9>Z.X{ŠÒ°×m,<;2‡”(Pƒ®j߇4Æ0Ou*€×¶ßJmµ£ Ì{ýMüG¬®Ÿæ|Ú5O[ð}Æ•¹·”È‹Éõ›|²è¾ gPG—&áî+ÐcÖôýCC–F”1TõéF«`õ0ô]Eõ?]ZÊçÍ æ¸ý1gþÕ‰`Á”¶5ÖøbÅâÒïî]”íÊõÍhŒˆ¡çËŠk¨›&ñ›qe;†H¯íÙ»ÇÇç]…u8ntÔµ‡›Œ­)|#[×µƒ£Ùƒs·5“§èYÒ仺oßKó!«>9µ/cª¿*»ñ¦øcX´Øí¤m²D1QI|7@ÎL-Î…«(«+uõÓøŸ[š (bˆáæ^Z³§Úº_ øz}9™æ“æ$ð: ÎðEäØN³J†ÜséŠì,o­¯asm(;N*fÚvØÁñÆ•5Í‚\!ÿTI`=+€Ó®®bw¶…ðfyn•ì×Ë=£Fç;ƯÔ":~·$}rN›º°Mkr查ÞA¯Áå_vò}«CÅš¤òÞ®žŽD`ÄûÖö…juÊíØ™ôÇø•-~c nÏáTµ`ôD1é7ù!´1ø!— 5èºói>ŒË/úHQ»­PðåÞ¼f'Dœ»=MAâ+Hù¯5·EÀ‰>õ'¬µÑº4ú޵®G>ò!Œ‚À·éÑ+õnÀWœxbêkÍqVÚ–Ù$ã¥zbF@Ëš‰î8’nÚ€ÔŠr8Ç4ÆEÆ4"PPåPr)Ü'¸ ¯q@!éÒ+ z’5Üš¨jP6‚GZCû±ÔÒvO4ÂÅ4ÄÞù  c=ªl b¢RTc¡¥ W ÒŽ£­5]sŒR© [#µ#?ZU“q" >ãHŽô0;E1ûü)B€9¥ž¤ñŠTT¤0TÍ.ÜR ŒÓ6È%¸ {´»‚æ˜I¯z]¼àšä: ÓTg4sÞž¼Un0ho½NÆiŒpH '©¬ÜzbœÏÐi-æXøfRëM–ú¥±¿û"0.A'±Ú­\\D&7Ä€¢¼ðZ\I¨µ°âbÅyþõN¿kÒ5¤¸W ‡p¸=qZ¸hB‘ß”«sÒ„R^•Îkz„“X[\Ù³¤EŽãß"£Ö5K¸­mŒG`e \w>• ,nHéü°7õ¡ >â¹Ûí^á¼9Ñ—I‚’>^™çñªÍâ”ÒQa9¸?}ÇðŠ9[coU½}2Ýç’F¦hW—7Ö†i˜n$Н¦Þ&·`ðÜ®X ¯ïïXÉy¥];Û¹’(Ø«÷O±¦£ÐMßS½|4dq‘Ö’#·‚;VnªÃ©Bà)Y@åOJµuq­«O#ìT#-;”ÉÇË#3ëHû\ ¨Ü3·=«Mñ"Üߘ$PªÇ°ïõª·è‹\rîæRGL÷ªåbm:Ià w¤”‰ì¸ëY7Ú´M£µÕ«[åê &ªCqoÎ ì9—+e;_‹Q½xc‰Æ9=êMimåµxîx@F¡5‡¢ÇöO\AÆyQùÖôïi5ÓZ³#7R…©µ®‚¹5³áŽ0w(ŸQQ]j¶ö>7dŠuÉKHFùcQÉôÌx⹎Þâ)C(Ê7JQW`ô:ŸKˆÑâä0{ŠHÐùŒ àŽ*–—,cN·bØ@ç×yA9çhjÃZ¢H•|㞢–W  "“õ>•ጹq±yÈn)n—iqFПZ§o2ù"E|Æz¼˜)»9ÆO¿­ äâ’^N”ÍΤnæ†eö™-ö¥•µ‹¾¦µ6T`!°Î‚/hØÀŒÕYÆ"…0žž¿Z²÷#ކ£’ø C!·Ó­ídybˆ+¾wb“û6Ñî>ÒÐ!“9¬Ç Ë!¬ˆµøeÔ¢! Œý)êÂè·.m5ê]¸ËŽíLÕ4h5Œ}×C÷‡¥\žâ;kvžF8Ni-.’îäNŽ2´]…‘“<¶ÚŽÑåo—zš¡áï°}¡îœ#òž‹ô­»ø­å‚D¹`©ÝjçWÃöò–’Ú÷r¸ëTž„޵Aÿ K›c¹2I#¦ kÏá«[‹£rÌà–ɉ«Zn›Øþfn¬zÖ˜ CϽ&û !‘G¢Ælõ¬;ŸÙÉz&Æo™GJßR8㢃‡$uô¡I¦;…¦Ÿ§}ªåA»?p{Ö¦§Ç{©—3Ë’sÛ4“i“_jŸh¹8·ˆþíGsëWД;WÐU9\‹ŸðDu¶¼•ÁBwô5¹ M}«G"s1öÒ¨YP ŒôÍLãlx=@©æh¤‘‡¨hךrÛF¡^!„aßëF‹ .™e$Sï/ÞÅkŃÑFiþhß±ˆÈ£™ŠÈäîüd»ßo0X˜äƒÚº}AµÒmȈn”Œ³ž¦®!@æÇ¥Y@<¾¼š›F· C¬BÍ€’ÃV—àãkv³]Ê ¡Êª¯Zì9#=>Ò;hÀÚ€­Y+ºN{ p8#=j0ÇÌϽ!$:TFM§kнð`‹Íoó#+g>¦»s’ri±`diÛaÚçáÏy ›à SòÇØWq@F@PlSAëéRÆË°Šl±ÏøƒÃöÚ´ya¶U0õ®?Fð•Ì—íç)ñ79ÏÍ^˜Ì Žiƒ¾21MI¥aY\‰-cû [ ÄaJ€=+‹Ò|4:Ë\Üñ>äÅvPÌË#GïÖ¬<­%&‡Ës’ñ.u¬êPyxè¸b{zÖÆ‡¡Zi)¶!ó°ùœõ5®À”Àª¼¥“nÞÔs6¬H[믭dµ‘r² f¼òçÀº„wÛmÎbÏÞÝÈé1ÈXœb¥ÜN}èRh,™ÎèÞ·Ò@šF3\>b½*汤ÁªY42p} k`ì%Z© %ÈRqJî÷‘ç1øóí» §’ ].±áĹУ‚!ºhT'¾+l³Û¡ÁÎjÌu¹fëMÍ‚Š<ûKðL盩ö)ûʵÚišu¶Ÿ··\Ž}MYÀ/–5 ˆ/ÎZNM‡-‰0/Þ÷¯ Õíeºñ$°“ûÉ%*1îkÔîåhíft`¤­y’çÄÍ%Ê9a’rµtôW&Gw¢éËac®NUFk;Åž©Y¡;fUÇÝë]À#‘ÒŸ#—Œ|¼Ô'­Çm9Ò|t.[¦Ú»8oJØ»ðµÆ©ª—¹˜‹D"úâºÅ8#š&‘†6⛓¸XŽÃMµÓmBAO¥]ÞYô¨« ]Üb¦Œ‚6ŒÔÜ,XìSëÅ<MFÇ£°¢1¿$P2R¤¡ÁíPmb§&§l'Ê;Ó1Á ÆÀ z ¡¡Ùõ¤ÙÜÒcRCgÒšªF@¥ F{PŒNqLA·ž½¨O›p=E.AÏZM¼œ9})¿òÒœ:ŽsQ–ø(~éŒÃôãó çµ0Š8e‡^"ã8áÉÀ¦É“ŠJpON• ™ÎsÒ€NH40Ý‘Š@5±×4œ iR½iÎGoJç<-F­ŒÓ•X‡žÔ͹$ÓÉÍå ˆ>”ÖS¯NsOqÐÐTdg¡¦€óv¸¼Le ò}£;¥M¬ê°ßjQî­â8ÈïV/ô›ÄAXŸç'o=qïZºž›e‡,hˆ K¸c¨5¥Ñ‘k χKUýØ*ÀÞÕ_T„?…­åÎ6…8úñÍA£C-ï‡îí¢m¤0+žž¸¨í­/£Ñ.¤žgXÕHXÛ¿ç@–¥ØÐÜx3;w2/Ëø4H£›Ãw+´üªM ¨ô+ä”u&5ö¦xmg‡Mº&‚TüPØÊú¥]…:d’=Ç•ièQE6ˆƒh!‹Þç½exjÞóÎiC·Éܽڞoäðþ©5¹ˆµ³°plúRz½‚ÚìψPŸ-ŽßÀô£â”)¥£ÖQü©–Vrj:ÈÕ •ƒ‚€õȱ®X¶¡¦Ëœà¨÷7ª ¦‹£×K®RÇFä‘L¾Óã‡]HdȆR¿5>­I¥Ÿ±\BJî9õûTž'2%ýµØ_(Ú{ç9ª»¹:Xµ«hÑâ€#müõ5KÚ@º‘nÚb¾SôÕ¯¦uMä¬6Æyõ8íX¾Õ’ÂsÙÛ!Ç­-l7bä© ·Š‹³¼ŒÔ*Í¡³ñ2”5ƒçÓ'‘V¼Q:CnéÙ—¿Ôg×Ö ×î"–æÆæ1Êò¡{Ä—r4–Öa¶E Û¹¬ûϽœò‚$=Ôw«^"Ûqiiw'Þ#ÐÖŒ:œ†…7Ì7˜ÈuzP®zœëÚÞ\é0ÏîŽ0~EíŠØðæ§%Ñ6³ŸÞ àŸOJ‹Â·öñÛÉo+…9,»½ THÍ—‹BFIV~O¨4=FkøŽñ­,±ùÛõë•tÔÄ9i>Îßípk´×lÅÖ•&,ƒx>˜¬[L^øRXr7Ö÷ãš#°=Ìèþß„ò+ñ´†ô©bÖ59,D0ï&3‚ã©úÕ­)Òë÷víËD¤Æ¬ø=ÔÇ4.FâÛ©¶#N;Ù£ÑÅÚ0ü{W0šÍý•ó½ÆNþv·@=«¢ñ,‚=9a•d^Àõ¬=vêÒêÊ cÁ˜œý¥(ê ¹¬j— om5°(’ ÌG_¥G®Í•¿’¿3€ÌÕ%ôÑÞxd_VÇZ¤´gy¸•íéR?(3œµÇè¼±N¶³ÁÎk¶Ü<’Ä€1œÔIX¤îDÓ,;A;IME9'$aW®ÞO{vòEŸ*3±H­-Vždû<ƒ+îôíO–Êâæ)éï!ñ&ÓÆ «±ÿxÀ•Á¬³ËªÏ-§21m¤ö«ºF³so~"»;²Ûyõª”n ™g3AI&âàƒX^$Õª$0²È3‘é\çöþ¤©°Îø#õ©Pl9¬z$s´€¨<аŒSùjâ<5{sæHe$Äb曫øŠæYËY±XÐà·©¤àïd>c²’W|pþuÎÉswª]Íog7–‘z“M‹\gðü“¿2Ÿs\Í–§se;É åÎI5Q‹‘³mi«ÛkpE,²Xwb½ D ÏlÖ—©ìA}|AcÓHô®vãÆ/~H?èÁ¾îÞ¢“\Ã½Ž¯Ršâ-.ya!Tk•ðõÝÅÕì³O3¹P1šß:‚j:ó" m×é\ÿ„ãß$ùöⅳܭªj·×:¯guE} +W¦X*Á6HQÖ¼ÃR‰Ú1ÀóGó®þïTL±2K÷”aWÖ‰-†‹L£å óšE–B1íÖ¼óQÕoþÝÃæ5|QÓµ«øÛé1$ ‹‰T}.V;åÆ󞸩™‚â¸-#ÅFÞÉÞäï‘OõRÃÅ3l™çg0ÈqAK‘‡9éQ>Ç,iÆã2J޳@’â‡ãOتç'œf¤ –ç03šd3s“Æ®[Ä"H.’ÚÔæRÀ1©«\Íi¡¨GïBƒþ4ì+êmË!À+Þ˜'(6žõÁh~/œÝy7Ϻ6èǵWñˆîo. Ù³¤1’ /sO‘Ü9KK•~aNY6¿µp¾ÖÏØg9i#²}+#TñV§¨dÀÆb9Êõ9õ¡A¶Ç¥Ïpžý©ñM¼sØf¸-3ÅS>—/›’XW úýj–‘âÛˆïf’é‹FÀí_~Ÿ#1él!‡Z"pÙ8ç¥p:е íach¿rÇô«7~-–Ã^6ò(0+oQš\Œ|Çjfh‹r1ÅSó$”Çž+ñ‹_zǧ¸ÛŒ³UÅq\ÆÉ|Û_Z9ƒ™\í"B‘ä±ÍHŒàŸÎ¼ÛQñž —MöqˆT¤¯\WI¦x¥nôG»˜mhø`;š\¯pR[LTOáH²üëËu/êwr<Ð4À§/õ­7ÅRy_湌`\ÓtØ)̨¯Ÿ¥I„ zó½#Æ*óéC*Ê=êΑ㠋SÉ‘Û Ž£46‡ÎŽÊîö >Õçðéë\&«ãMFgfCA¸!zÓ¼W©‰5(å ³"cWäÔtËý áÒ K€ Ž*£+±IÜÇÄ:mÀ|Åjo Ûjvþ _b:T%K‚Ý+”±ñjK¤½ÕØýâœÄk6ÃÆóPµÉÿE €¿Ý£‘ƒ’=8|¨Gü*ä0†¥PÓï#Ô-ÃDÛ‘ºVœJcµfÊLF¾•-¶å ªO+E¼’Û” SZÙó±&£~jûQÇ_€##¥=Sµ"¡s’jFVSÁàPn ]¡^‘$–§`˜!?Zˆ“œb–mÌêWµ92I9è) XלÒIˆÑŸŒÇ$Šzüéó ùgÞ¤P Ñ·ô .z#ä}Þ´ª¬zõ©6àäÒ䃓Ҵx|çšvÒ 'Ò¤\“Î(*ç@Ü‚p{ÓU>r©ð3Èæ•ñ@Ž!•IšxÒ’FÁUü`f˜Àš~~CHOò¦d3éF9šqô ô^tv…¬T€} pñi¬÷RC<’,gï¾íÁ…wr8SÒ¡Û¼¹=HªNÄÚ쥦ÚÃcj"®NO©õ«SÇѲ:‚„t5BÃ+ƒR¹àùTÜ´¬90©€P8«í"r1Œö÷«gšc…qÔý+ RÕõK)ÚÖ&勃ëÍ4›&ö:`pëM¸´‚éÏ 9S‘¹jó^Ú%ÁB¤çå¢çYŠÞâ+M²<ÏØv¡^àö5cUHÕT``=)CóÔtªâ\mëRHä&ìqÒÊ’éö²Ý}¥ O9Š£½ÓáÔ-U&åÚÝ*ì N׎@¢CÉÇ iÝ °ÛH"··ÂU@à:¡…kûÝãyvÊ©^éZ°DlzU ½rÊÍü¹eă’úÓW„º–“mªF¢`C&v0ê*¥ß‡m®,¢¶VÚÑ ÛÛÞœ|K§Ç´y›·c¢ô­(çFÛ³0è{ÓÕ FT°Ñ¡·ÓZÍϘŽNìûúUKEau$»·‚Qè n©§Ö™+BIéJìv9Ë_ Ãü“Êá¡RYÓëF‘¼Ön¯Î6#OýlIºµ’Ü’UÁ#­:ÖÞ8VÞÂИ­©båTÂà€\¥qv%Æ©q¼ßèÊv¹ù‡¥v—‰ ’Î$R¿pæßUÑ._ÈPwùO½T6 `i­ÉdÀ…””#ØŽ)Ðèú„:”Á¾0ß­mÖ{뱩]„ÉTýk¤+´ç¯j¬+#ãJ1h[î39óß5‹e¢îÐî¥ Ë‚Päcük¶$ €áÃ)ÆÓ‘ƒSÍaØä4½6i¼?xñ¯Í!Tû©§Å¨IkwkË©i7/L‚»øTF›€½€¨žÎ/.DPIØ÷ïML9NGÃñO5…äXŶÖäâ™á~n® aèÏÒºë{h­ ò!]©Œ}MsZ=¸‡ÄI‘òç§ÖŸ5ÅkúzNº”út_vL¡öi3\éÚßÙÐnÜå~5ÕÚ[ÛFiÑ›'Òˆ4ˆaÕ¤¿',ÃmèhæAÊsWýÅeä÷Í3Re·ñ"JÊ~™®¦çE´º¿[¹A-Ǹª7žŽçTûTŽvнǽ5$0uŸô]q&á€z]aÑuK…享’}s[—Ú¿¾IŒ *€¥Jö>©áø¯l•aL€*±þF…$+3Ä’Çq Äd`ƒÒ¦Ö¿Ò´Hf„ä!±Ú®\xtÿaÇn˜3Æ2 õ§èº#ÚÙIÉÏš9_JVËÈ/tfC(W•#¸â³|)$iq4.GAz™<)"Þ¾éqr1Ö¡‡Ã—ê’R9 :‘F–WUU³ñ0ŒÁ€ú×ax3£ÊÃ#1?•sïdš—‰6Æs “ÜŠëYÀc+F1IôÂØßÛG¤ÜA2üà?Ú&—Ãw,’Büä ];Eiµ‰#š"#Lõè})–:dƒÄb%Dl[>µZŸGD‹Ä“G´d ƒÄ÷”îÃ7çIªi÷úeëݡʻiöeÖ»v.gÊ¡ÆæõÇ¥nü@…µ\œ‚£ùÕ¿YC›¨[pRGÒZ¼"ÚdTߨU FmBÿFŽybÄ*p?Ú÷¡>ö·ð¯ËÁ`­giv·:ŒfÒ%2C3úVΖŸÚ>žÝSt±Ÿ”{ÖN›¨]h—¥ \†CÞšê#¢»Ò#°ðäȇqÁb}ëÂv_^Éê(Ï5Ðk—&O ¼¥JãÒ³< k©åÉàâ¥=÷,Íqm'ˆ–Ç;m­ÆÔNÌk+Å6vÖ÷±´8Üã.APø†Þ[M~C%‹÷£[Óç†.î—˜eíM w:…ŒGái ùG'ð¬¿Äêçæä`QXiŸ \¶ Fx@{õƒ®$‹Vx•8q†öÅ&·RùZ/8'yóAýkkÆR0‡<€Is—òKo®I):ÊX~uÖëSëš½ÔQ~õWq^äPú ¹¦ÛrHîoÈXãáwÅ1‚RØ €x•Ÿ£ß^ÁµÐk¹ðûÙÀ»Z5~¢¢öÑŽ×<ÓI‚}AþÁd`_>ÕÜ6ƒm¦èwB/™¼¢]­yú­.÷*dBEwoª\xRéä_˜‚A?1"ª{‚9oi°êz«C0ÊI»Í7ö6—fX¢95yÞ}s§j"[tÜäÛë^ƒ Ë¬\^ù—‘íØp;Йߏâq¾-€[k/lppÇ=óZ?ØñÃàçž6$ɇ"›ñêÑ8Ì@Ÿs[–J_À„°Îb8§u ©ÃxzÒ+Ýf'\£­_i–šKÁª>õKÂøÿ„Žß<ÇŠì¼k¡I{n—° Í௵9;HÐæt¯\ëfXí·@'¾=+KÆÖðÙé֖Ѩ]™…`é>!Ôt¼Aλ¾á^õ½âé$¸Ð¬ç¸„,ÒuõùZÄÓ!»Òn§¸– QØq\ŬBmIb+ò´›Jýk²ð”’Â1~±€³¸ËiŒ7m ]ÎA*\úÕ-Ù,ömÊ;(â„|£¥nFÀZå|-ÜúJ5ÒÙ8ÏZêá885ƒF¨vZtdsÇZj19ô¥\jF9FâsÚ¢Ÿr•eè"¬&œS~rO#Ò˜‚6Î*b>öOQUrUò8á3oФéOS—Æ:Šj4pPÄ6 ïI´Fæ—|æ£p[4áŽ3ëšâ£X S‚”=i­ÈÅ"!SÖžªNi0A ¿ ` õíCeŽzMÈèZvó’ãÒ9ÏJx]©’9£‚(„÷'¥€ŠR ŽiÌP3##4Ò£½('f=èã½XƒzŠiâ”óÓŠMø Î\ý)Òã$œõÀ{d‚1Æ(“®ê‘i–á° ¯ÂS\®ŸâK«k¢÷DÉžTõ_¥[ñz*j6®äœ™O@ª^ µ…MµÔ ˜¤\(Õ¬R±/sfû]¶°Í nYÛ ì:ñLÕu·³ȃsHì*NÛ@·bÀǹvÕAóŠf¬#M& Û!ʰAއëR’£uëÑuec,c‰¶=ÅO©kvêÅ-¨œ KtÚ¨ÞêB; Xím‚&ß1w~U6¡åÜèv@C¶yXl{ƒÏçUa\é-Þ9­ãxñ±”c«ŸñŸsÀÔ`'€7cøqÞ·ôÛAg¦Å<€ Ï­bë×2K©[Ù†+ à¶;æ¥n7°Ý/ÄK>Ø®°²œã¡®”´~XrxI®OZÒ"K%¼2cp ·¯|TšŒóx~Õ7Ÿ™Š;wã¥6“Õ ;ht–ºÅ•íц;×={ãÒ¬­ÔWñ+ê9ºW“›øƒd…Ü7 OZzÁuk¯ˆb›2¹;›×"ŽPægc©!d „ƒƒŠÎÕ|= ûý£yWéÇJ©¢éwvºŒ³LøNxþþk£,6ߥKÓaîyþ¯§ >ê1ùHf¦½›Q…ínˆà<`vÿëÔž'>¥ ürj+»«ëg´3b@^1Zn‰{v•{%íºK*l~ãÖ›©ÁqqdñÚ¸W$ç=)¶3­ÝªÏ G>ƹë½fú-eA.#B³T%vUô:Käµ²Ž9s¨ I«^„u'ƒé\§ˆï®’â5RcŒÃæ<Ÿþµ7ûzúæúÝ`RÀÛ·ïzÑÊ÷c®É)ÉÉ@9®oÄ—÷vÓF°¾ÔuíëVµ}\ØÁåCÌî3Jæ¯ïîo­ãóâ!8qêiÅ ³¶Ñ÷ (7Þ@õ5uŸl›Oñq\œ~'[hí¢Tʪ#¥tbꬅÀ?&ÝÛ½ªZwe¹T0Æp@ªí”##&¹¹§¯ˆn¡HB6p_=³G#dt?hÚ2G#µ2;ääûÖÞ·7!É,Ab?‡5¹–ð†NàΆ¬;Ü•äúùÕ [x®¥¸;äá½*̪9÷¨„ÑE2ÆÄº) çš;Xd–Cµ&Ÿm}ÜHIÚNqX'ûCÀ‚ L\ïÛUt=^£KyIFV;[¶*¹n®MìιXüÍŸ¥5E‰¥FQ»­BÍ”0N3žÕžÖ_jÖ#»g@zԌ֌æBzTìOËƒŠ©½#Îö»©èr{J´’vŽ?ƆÀ“wz¬`}ÚÌñ¨mDvðœI)w Í4&m‡Wv†;aª rÈÊ­‡ …Írº¦Ÿ.ŸoÔ720–êO¥lè·¯`“:üà•oŸ/Q\±£é_Ù°¿˜wI)Ë0ïZ|”b88 Vwu=Á‘ Æ­„Ú¶#•¾\þT˜"HЄ€ÜGçH!Erê£wsÞ¼;Œ‡¥ Å  a$k4eCÔ¤HÒ*ŠìC‘ÍEs9Œ.Ñœš@q¾"½¹]Wl™0) ©ØÖ„ší¥îŒöëó˜/C[—vV·Ð‘q3c#5ZËF±³˜I ØÆMW2°šáM1ôûVyF$“‚¶Î™g<þ|#H£‚Vž— Rù¡)]ŽÆ'‹vÿ`HèÃQT| Çe,‡gÀ'¾+¢½´R²’8áI§iÑé¶Q ¹$ûÑ},ÔôëI¦ n Ç'Ú¢Õ´H5deÎØÎF+A6@©7 àf¦ã!‚ÖÞÞ…ÀÛŠ«m¤ÙXNóEï’Zµ Æ;šI€òÍ;…Œi¼7§ß]­Ô°0ŸCõ­bŠQ@qéRÄAã¸íëYÚ®£o¦Feö“È_ZZ½±¤EÌ0"9b©¦]iw¤4ñÛÓ5ÉGâÍRúãm…–äÖ”·>#’0ékn¤›©Ù ¹Ó%¤ÔÛˆ€ˆŒm£OÒlìrmàD-ÔŽõÀÝx§]Óß"ýTÒÛ|B¹W_6Ýÿe©òK ›=4…ÁȨȎ$ˆ®KMñ¬Z¥ò[,¬ÝÍugî ÔÉ5¸Ó¸Øä`„ãœÔ¥üÃUÔ»G­X·¾)SPÒ,õXÖ+˜·c}*;-ÇJŒ‹húžæ´LmÁœFäÅ`‘M°à¯CÐJ­.‹§Í*O4ò¯F5zEŽØäQ{ Œ ŽÀUX´kï^è@<×9-R Œõc'´&倢 žÆ È;„+ `ÔåAŒ1¤ŽD`@  í+C±ÓͲmv9'úTz‡‡4ýB@óÂ<ÁÜ|¹­X£ 6æèjI ‘EØX§§éÖ¶ˆí"JºÁÏAÓÞ©«0Éã4ë¨ÚO™\¨…+…ˆ'Ñ´ûÉÄÒÛ!pzúÕ¶Ž$ £f1·¶)mX´yµ"ñÍ4á_ ä÷§£©ù¤Æ<ߊq<ÒnÉÙ_‘Ú˜†È£<ÒÝŒ b‚ø#<Ò£í~x¤1øä ŽPÁ©YòàPÌ¥¾lô¦ªÃ; A|‘MXÀq©6ƒ@„ u¥K¶iÌàqI¼dc4¤íÆ)¡Ç™ÏLR¶šQ[ŒÒ¾h’f ÐSÕAO)a@©<šyÈÁÏJ,¬; ŒqÍ5œæž¸d408RòM"6zÓÙƒPÉæ£ àç½!âŸj± 9äk}Ú‘¸¦c#½ Œv¨ÈÁ#¿»ˆÔS$a¼qœ÷ {ÆPÓRp¹hßúÖ¹¸´ç“ò]’Ž6‚Ü(p+Ñ%Eš2’(d=AéUžÊÙíÜ 6C(ùx­ì„ãsÓ…ÀðÝÓ<>d[°»zâ›&§u} <_gýÜXIØŽÕÙÇi Ûù !Œ{T¤Û=³vC‘Âû\±ÈJe›Âйˆb) –nàÖׇ-k(.n_vÐDIÙGøÔºý²ÃáÙ!„b8öü£ëVôHÌzM°vÌÕ^èVÔ¾cúW%âˆd¶»·½ˆp˜8®Ä€p?z­swQ¼2 *G ö¨NÅô9›ýbÞï@FÃ{€¥O\“T.4ùáð²JèU„›˜B+nÓÂöv×FV”¶Ó¹Tô¹,ÍÅ(Xt5\ÉlMŸS™ðî¥b,–ÝÊE6vŸGÍS¹!ñj>pªîF+B×Âë¢'vÌ*wF½óïK¬xuï¯RxX)#güõ£KŠÎƬ7PÉpð,¨dQÊ÷«N9Ò¨Øé0YȤɷËsUµá¨KpXƒó±E.£ÔÅ6Ï­kîç‹hÛ»`Vα¦5帊5QNÓï\ôÚF¯ & IÄmßüýkCAij¡‘¤ñœ“¾=;Õy¡\§áÝAìõk.DnÅJžÆ¦Õ|Sä2ƒžÜѬiw]G´C™lŽ€ÔÜwqëi B[ËÇqLE`3ž‡ßþºÚ±¶U´µ‘B°JÿZÇñœóZÛÝü€#ëëNÑíµ;„‰§•ÒÞ/ºR)=‡©àø©‹¨b ¥Xñ4ŧEµa#ýj†»i-–¤.cá\† ;c×ëF¯{uycnÒBR#ßÔŠ}týÖ/4h%A‡Ž0p;ýj…­ÄŸðÝFO‚¡<Õ«]Bí4 ŒŠlCݳL·°™¼3.Å%¤mÀ{ =@n™jº­¬0‘ˆá'{ù5KW°ú§“pØ#ñ«^ÕÆO³<$™r:ƒF¾ü$}ÔQ­Ã¡WVÓ>Ãsœ½1Zúfœ¶6‹ûÄƧd2†¿¨5º¬j É‘“ÛÍ^éSEh—]Aaõ­FWì¯ÕA9úÕùšÍ% ¢ÛëÇJ¨è™6·³MáùÑ[÷‘3» ¥ðÌÓ“0$´`Iõ¨4xÊi×ó°ýÙC­\ðʧÝ×'ùSz 1ﮦ¼šâO0ìBF7vÍt^½’x7ÏÈp­rÖP ›åŸháwvz|vQ¬q1’iJÈJ÷/«“ÓÔׯ_-Ö¨dC” ¿…w›k˜ñNš‹ ÜEl6=éCq²¼úÍüÃp%c$zŠ»¨jqh°[ÃiË®ì˜÷¬]M]Jl3‘å°${V¯ŠáD‚Øíù‡öÅV—±*æ‡öÔJª9àcÞ¡_Cýš.d¼É]ƒ©÷¨e¶†/ «lÿ–aÿÎÑ´˜¯ôù؆ÉúTÙ Ú¹×â¶±Žò!¹¤ù@=ˆ©‰!:RÜÊ0ìOÈ:ÖWˆ- ²Òmá®êÌzݳùÀ‡4ÒM§Ui­Û\Ù=Ñ;pA©¢Ô­®ìšáU2XÕÇZYùš<Ó¼¤$yÚ£¹«Z"Òñ›˜ŠíÇÖ‡:+ r BGÒ½G¨«6×öÓÝI m–Œàÿõ«ŽÐ 3^Ë6ÝÈW#ÞŸ¦A,ë²ÈNO®)8…Îëí±Gp±—ý*ijÅ<ÇA»¦Z¼Ò[›”ÖL–•[§­;Uº½{¥ P¨/¦höcæ=2ÎÞsÜSÌdœn‹W7m©Mmács "P¸ï\¤k¨_™'Í`Ç’;T¨\mž“öû{Yd9à­ 6¸>õãð‹›«ÔŒ»™7\·¼s[à•26:çÐ òOj²éº¤d Ë!Aíšîu»Ë­P?NdV+ûÖÝÓÛ5‹¹Qz¶ú½Ìæ.Q¤ÝZ´Ôlõ«½zËLDûDÈ pzšKȤµû@|Ç·v}«Ë|E§_YIײ‡iA éŠè´ë[»ŸÈ­/ÌÊJ{(¤áÔwËÅÑͬ’ò=am☪)Üê}©r+zš`Æ¥o ÀÞ‡8ö®¯ÃÌ Ð­KŒ\¿Œm=©Ýûͧ?J»¨¼§Á‘½»•ÚOCTõŠA³7N§§êNöÒB:©­[H„(äþ³žóYV†]›éÖ½[×áÑmvòÒ²ü‹S(ë`‹êm›‹kp¾c€XàÝM[‹ b¼†ÉïõM^Ö{똜ãð¯\î(ëÅL£a§q—îÜ×ÕµØt¢‘´%ÙÆin!Ót¯2èª#Y¶ò~•ÌøP·Ô^ÖH+‚ÔsÖžØÅ"^Ù+ù$Š·½J ,j«À ¥o¨ZBÛùè%Àwz ¸Î6(rFjZcL·ì1šŠIÒ9Pd“UÆ¡lÓ|á猛©/Bµ¤Å*,46ÓV³»ºxíæÜê2Ãmh Çlf¸ß ìG¸vèp7zJëƒès‘CVw¬1ޤw¦žùàûR+ $Ý@¦Há c÷GéHcÛÁ?*€Gë\äÓ_k pl§Å!qÕÈëU|8ú‡ÚÝ$Þm×;ÃzÕ%¥É¹ÖJSÇqØÓ8?Ò¤ö©ÒqŒóAHß’ ‘÷O¥É÷¤Buêi€0FMŒ8ïF>Eî9ü©ÇjNU=i àŽTÙ"ŒµÅŒ1ùSD5#Ó•a8ÁïUdÔ­þÚ-U·LsÂôSNâfEí©Ô¯b²…6ÚÂwHG¯¥tD±B‘¯xP‘¨QBå·SQϵ ‚Eô»Ho^åbćŸj­u Guª¥ÜŒp1ò޼t­ ÛØla3L~QÅ.Ÿ¨C¨AçCœtÉ^hMˆÊºðà»ÕEÔŽ<¬ ¯sZÚ"„$K£ Q¼Æ{ÓÇ ¢àbé:SÁq-å×3HǶ¶žüŠNÓšq¹^ãZµ-6-JÉ “¿*{‚+”³ðÝùŸËvÙpØn¢»€Iã=)3ÇÓ²SPÓ3£Iokòm8ïŠÌðµ¥ÔrH\9¹®¬ÇšP1Ð=¨¾€pº¾‹=­ðke,ŽÙ\vú×I¢CwŽo%,ÄðÌGã[8 ÀT[H\–ÝRxWNhÒKÉ7|©šÜ¼°†þë¤5 ëpHçnnZãŠb…Â?ÐU-W6v²D”¾@×›…‰¶£¸úÕm7EƒOs±å;«™…âyíí ãÓ"’f<%7ëÍtWúD:œÑ,¤…Br=j–£áèîRâo.8¸#Ö’’°ìÌ{ƒÃ7½éþ’?°]«Žæý+bMJ{;vÄÕ;E†ÒÅ­ñ¹ŸïZwAc“Ð.a¶¾–Y[j€qõ©t«˜›Äo+¾H_|Õè|."½’Y°aBJÞ/Ãì³µÔÃg? ô¡´%r‚'ŠÎ{ÊGåSx¡cþÕ‡r£wçO³Ñï¿·ÖVO9bçÒ—YÓîµ=lÅ åCíâ‹«S_[eðçî¤fÓÇlS<±´«˜ò2XçÛŠ4E´Ð'·iÎù–,Ü+›Ñ-µ /šÞÖb‘“‡qÓ–Àî3MTƒÄÈŒw)êQ/îsýïÒ¼³R²“FÖS’vêOzõ;)DöQIÐ8 G֔Ǝĺవ6жn€j‹Ã:D÷c7r¹íBxfy¼G%åæK þUÔ(Ø 8T7e Ò¸ët~2SœWâ½.};X”•f Çb+Ñ¢“÷y^Õ^uŽõ7¨4”¬7™:F«gªZ¦×C02ž¹­x`OÞ¸ûßH.ŒÚlÞO$‘éô¨áµñU”ÁQÄÊ?¼ÜUY>¢³Gw{&9ç#ŒÖgˆï--4ÙRàœ úÖßø­FÑe_òk6ã@ñˆ.íøXÁé»§Ò…{°w9ý M}CTWAû´mÌjõ¶·&“â ݉òYÈeúît½ÛJƒÊŒ|ünoS\­Ïƒ¯nu¹%`Ëo-ÔUó&õ+1|C«¾£æ.V5ÁŒçZ:½Ü—Þµ—$¨`Œ=ñÖ§ñ‡æ–úÖ;(‰,›¶+~ßÃ!|:4é†Ö+¸°õ¤å åw1<~#K‹bØ$†\ÖÏŒ/t7y.ÀW)7„õ{KÕ[tr ù6Ðk§Òü-"YNu2Ë*í Ø%kÜ{ׂîà´ÔŸÏ;w¯µwöZµ¶£$±Û>órvñ\~‹à™¥¾Ý‚‘Æß.?Š»ý>ÆÒÆ0$xã½LìØâš<Îfm3ÄW^a%BSu«û†Õ ¾+¶!ƒ{Þº)|÷~ ’îb>Ì[~SNñ/‡&ÔnìÖÙH…FÇ>‚ªñ™KÅZ‰¸ðå³Ç²°Î}«7ÀÃó8ê~µÒkšçF†Ê Ÿjnƒá¡¤‰å&I ‚„×-‚ÚœF¡pÒxŠIß÷ àûé|lM:ÎUËaŸÇûoM=ûMsp‚2ÛÆ:žkcÅ~ºÔà·†Ócà‚ÔÜ•Ðr³™³²kÿ¹IŽb%™kŸÒn¡²Õ[ˆ„‘ƒóþ{W«è~‹JÓ¾ÊÀH\fOưõ¿¥Ô5ƒøåJJjí+±»§êvzŽ”ïÀª!ȱ^e¥ùgÄèKõàפh¾M/IxY†>¹Éé¾ ÔYYfM¤›Ãzѵ™[ÇfO·À…²ž_Z¿ ëöË¡Ie’$Ž&$Õïøb÷VÔ¡hJ ’Ý+gKð…•…‹¦ÐóH¥Yz9—(YÜóŸÜþ’Ìp #ñ5ÚxÂå.<0ÍoÀb+.ÛÀS YÚcþŠ­•ù¹5Öjš8ŸB{ `ËÀ÷¥)FãŠv<óÃþ"6ÛYˆ&0;ÎÒµk«-ä‡c¹~µÙxkÁ²YÎ×7ØÞ …QïP¯‚„ºôÓH Z«P:š®hÜ\¬ÄñÒÜß[íè#ó­x¯-ŸÁ0,¨»ÕÝÂÚa'¶!%T»â«Ê47ƒÍ?ibobGj\ÊÉ+¹“àI£U• ܼ{‘]>¡¤ÚG}.¡©Ü?"·AXZ‚¯-ï’{³å,lÚÝq]LJN¡ª ‹™ËÛ®6ÇJMs)ØÇ²’ëV× {hJÙÄÛ+ÁÇ¥z,Yš‚Öm¡Ha@ˆ;U¡áW§z†î4…RE=@ŠCŽOµ'ÌHÇ#$çɤK¿¦8§*|±Í#£1ã@@ æ‰9ÁíFÐ‰Ž¤ÔžXdU¦!¸È4. Á¥r H¤)ÏZz3¶šáËÚŒç$qR0(6bÜóRHÉëL8'8§¯=è7dô§ãä$õ£éHòŒ“Ò€!(Ny¤ˆwTqOçkgéRî,8  ,; `Ëõ¡‰Ç¥8HÒN´†Fñ€àƒNÀQŠ$ç4¹šãÜŸJ…²\¼sS–©9¤$šÐ’™Ç¤Ç\š{ãµEŽ1Š@4*‡b d÷§´þ"„Ï“L ­xŸìk¬uÚkŒðÞN· ’~˜®»ÄÏåh“ãï0 ?\ׄâÝ©<„}ØÎ?1ZGá%î,ÃûW_žƒ!Tʨ®ÅA¬éé§‹x9É,Ç©ÍHg_‰ÞG`s¸÷Á§x‡R‚òîßËå#9'×8¦´ØE}_I“N’9ÕËÆÿÅè}+fm^cᔸN%c±`{Óµ‹ËkÍc†Á^Gf¬V•ãðÂ!C‰&$ÒÀHí¤‡Q´{VyfuWoös×5Ù_.téò1˜Ø1ü+#Âÿcû&c¸ÿ–„õ5§¬¸M*ç-´ì852ÜÇÚÛßK¥Höçl+&Nß¼p+[LÖ.‰uŸÞMÜð§h3*è)¸•?JÎÑØG¥ê2·M„~uLC¬5{˜,någvv +sÆ{þê×wZ]Ú»`nö5>œ‰†n¤` |ŒŸÒ©Çˆ|1#c4˜õÿÙh²ÓµYl4¹–œ»¾s…Ñøvùï, “ï«H^µ`¼>-c]ÓÜ1À¹ê}«¦°²K$ܱõ4¥a¢Ž£¯E§]­»)rq¼öPiš¿ˆÒÚ <ŽÐVg‹-£GŽ|bG'?AJº\oá³.ßß0ß½º€;P’°;šÑkÐ(^JpØÛ´u$SÆ·ltå¼vÚp§©År—P }Ð1ùÝ™ð;TúŽ––š<2´®e|m¸£•ÙÕ[ê°Ïb×gäA'=x¤³Õ­ïmÚ`v¢œÝ«ž½´ž„o;™ƒ0õÍgEa0ÒÚâIŠDNõ¡EÙÛCy ä25³g‚ û×g}&‘©Êf]Ä’=zö«Úd¯¤é3^™e;cSê;Ôm¥]êÈ/üÌ› ÇÒšIne¥äwp,±0*J²ÀÓÜ{× ^Mgª$Á#meô¯@^H'°À¨’³w9¿H„k·¤ô«º K}*ÜF¹îMPñtå#‚ ·±n~n•©[ÞÙ˜nÙò8Ø»j«]Xç|ªÜÒc‘¸×9w­¼:rEÄË…Ç­`Xß]Zj©,¥Ü·,¾¹©ä ä·;$ýÜš°¬½q^}mªÏªÒÎÎW'r7jžÓ^ºmX–ŽGg §ÈÅÌw(B£±À5‹â-BâÒÉ pK`Òk:âXƒX{‚–¹«íZâúÁRdßÔEj6η@¸¸¹ÓD×.Øœø­<–W)ˆmtÛ+[tA#Øv®‡íÐGh×lÀ&ÝäýhhI–ÁÚH Jkäí[œ¼6#Õîò# )Œ/|W} )*¨0@…UB»ÈUçjÓÈíRÝÂÖ9 ’­Ú•”`íäÔ ÞH.n;T\+‚zÔ”>"Ьó”wÎ#­\#‚W©ªní@nYËB02OCNTq&Ô¥DU^ÔäšA¸cP.¦†N9÷¥û˜8íU’s’ð`ÈJôÄVe±?ZVÀ gå4Ù$Ó2ÆEcÐqŠHlpX”™‚ã½F—°\¶!ΰüiƒCs ÁãÐ×1à¢ÆþV-ØU(iq6îzzäF3Ôž ;p\''Œ ®“Œ–ÉÇ"žÒ«Æ®8'¡©õ'ØBžµ(Ù9â¢Iù Æ}éûü¬’A&€¹*åP’3Ú›·qzäŠ<ÝÀsÖ¸@ÐÑ{ ~ÐݳړÉ]ç>•Î2¾x¤ æ0ǨРTã9õ”ç‘Udœ†êiÞÛ™Ä~ry„ãnîhjƦxÜ@vªòÍæaK4Áp ¨Ô© …äÀ@«L  çëQ+"ÇI¢IŽ‘ŠÑÞZÀU¥“–«k"ºd6Aä^'«Ë+x‚D’W*&#»f½wOoôŠŒaR•ÈNì¶ÒnCŒäRùO°E®ŠL°‰5z)PÃÛÔÖvÔ¾„MŸ–£ƒ,NzQ%í½ÃȰ²‡æ¨§E($ã=Í7¸'¡eÎÒj•8÷ª“OÆv“J¯«j·ig¿÷ïÈ‹jF›¨#éQ€ qI$£«©/’OCGP¾…¸rÏ×¥[€qÅR³lɃҬ†mø^™¦$JÜóžõ,IÞ«°#æÏ<2c€$*K‚O‡8=i²^´N3@ˆÉ,ç8-ši@E€°ÝhÙÞ€„÷¥ @äÐYIéJœšS•ƒ÷èN9¤\þtNM;°ö  cõ¨äéƒÈ=iÛˆCÜÒ0;hÈbŠ0ÅS£Í9ÀààŠTÚNs@Å# ÇãPçnAayϽ1ãÍ ¸©‚9ëIœåM!àÐ4ÇdŽ´×sØqNl c9*Ä46: 2{Ðê í ž¢žzSÏËHqL{Å­åè“‚ò(GÂ6©”·$üÎv~Uµ­éÃS´X‹•*Á²(‚m3NŽÁ"‹9_\Õ_ݱ6+jº$:œñHýTçÔU-KÃQÜOÆBDŠǨžõ¢ºµ¤Ð4«0ò”•f=ñS%ÔwoƒFGR»CÐæn­b¹¿‡K´P°EóHÃ×¾koRÒ£ºÒVÖ?”  ö§ØXÁa¼Æ2Ò³§Ú®9% ž´9‰Ìhúð]%Äí´Ær¨+gX²}FÄÀ­µ³»ØûUäuÚxê8¦œ·zµ¸r£‚´²Ô ò[ÁæÍµý1ï[Z•Ó¼?äÃó30óXw®…£?)N~ozYcY"e`È5Nw‰Âz42¹Ûn_Îæ$Ñr—0iVöò·ßbD{y®¼ÚG**•ȃ:VUí§Ÿâ ]ËÂ)'ÓŽió‹ú6–,cGcºB¸'ÐVÇñàTQòœ¤Cžj/v Xâ¼Qvg¾HŠHó‚{æ­Z<ÚÄ1["˜í£P%?ÞÇjÓÖt¸ïÂÈ͵£û¸ïSÚÄ-íãŠ5 ¢¯™X-©Î뮳kÖÑãlaSÜÒø–`.í­ÉýÜj ükYt$}XÞ¼¤©mÁ}é²èÉ&«%ÝÁ{Pš¸¬eø†â6²²‰3´®ü{TšÃˆt+(6ýå «ºŽ‡&£}¢P±"…ǰô¦jZDÚ…õ²®º š.‚Ì©w‰|)LŸ-€cïÞ¶t‹èN‹,1a‡qŠ’ëNOì—±ƒÃåúû×;ká½CÎ)+âo½†ê? 4af3FA{â?5î.~«»{§z§a¦ÛØÆØÁ'­]Á žõ-Ü/Äó#êPBîrOÔÕÏMö:F,Ì0~ƒšg‰´c 7°¯Nd¿J©¤hsÞˆå»$[®v)êsW¥®™wí ŽÑ7Ã/µtÚ.Ùy3y’0 3ÐUÙ4oñ®"E qÚá´Ôƒq³x=þ”7î…ŒÿÂ!Ö7ž†üªþ—k ư×p¨D Œ{_Å1“©E·’è?é4‹²i)öS¿êh¾‚hçtwIüA;¿;·`7zŠ<¨§·µŽU6¹&³H›EÖy\²±8õÒ“T»žâùe• •#ËSØQÔ mkH¶ƒK[ˆ#*Ã×4º{$þž9~e@Hü(ÕïšãC‡rÞGçé— &™á•„§Í);Èì4yOCÑ“S2<Œ@F޻ȭÖÞ„tU®/Ú¬v£ìÞQg‘ÆþµÖßßGejn&lqÀéK{*ëZªi¶…Qœù ¢¡ðí¤¶ðI=Á̳ÍìRÒì_U½}Fñ~\üŠ}+¥áQÐÒòÏx±±b§?y°G­Má¤èê}I85ƒâ[É¥¸ò=¨„•>¾õÑxræ ô¨ãoŒ`ƒM¯tWÔÅ+hù#F s¶º”Öz¤Ó Õ¤–+’øP Õ[S²}X ½W"ØW{׈¹âHôÙ;|<ãø{ vâóyarÓª ¢RÛG¥pÐÝ3êÓ;Dgi7(_s]…ü.Ñ$“Þ 4ŠW`ô5RI-D®Èô¿-ÅêCu@ä€j¶£âù­õ½¨N sÞ"ÒßKÕ$U]¨[1š{ÙZMalÊÎnf` >Xî+½ŽßQ¿ŽÿÃ\F™VSÁþuÄèZÓRâEˆ¼œlùxÛ_[&á…¸ _Z漨ÆàµzjKG¨Bö(Œßë6ßZ˜"ªnéŠs°P«›ñ/‰¡Ócû4#}îÙ¬-sKØÏñ^º@þδmÓÈ@%{{WA¥Ç-¶l“ÿ®òþ|úÖ…<<Âa¨^|Ó?Πÿ­u—ð ‹y#V)FGj§m‰ó<«Y‰Ų †”>µèZ–·‰¥«°ËZZó;ÈÞ?²HÛÙeÆßñÎã“¡On7²3u[ÝNY-õI„‘²€t®Ž÷Ä͇xÕüéFÀÛzYš ‘ñ”qÜ>Øm°Gzè5û;{M  €)Zö<îÛS¾·w’ ¤Vs—#ÔÔóxƒP¹)æÜ>ƒÅiø,,—ÓÅ,a£eÉ%zb«ø‚=>Me"·!9]ÓdŒšüQhñ ‘Â…Àëšóø5ÄÔZò&&mÄjïmôk(4 !¼á"Þ=Hí\Ÿ…¢ð‘,n Œ‘Í(ÛPgEáírúé'’üâ8×;ËšÈÖüUws#}…ž8à¸ï]ŒBÚhNaŒ(v qé\—ks¨“g"¦rA¥ž£zhvž ñ<—IgvK;ýÖ=ñ^‚£( ó\7†ü-Ÿz—)y`ï]ÈåÿÚ¬çkè5q&@Ï…'Š’5®i@Éþu( zÔ”5ðO=¨ (p ÏzPÉÎ1A`p(bqQ*üù>´'n0A¥d'Ò˜ç8¥L`ŒP‚ÛÇ4ã•Rl Ȧ–ÇZ#du§¶f›Ýx÷§9äP25r =³³5’3œãÔˆ1–'#ÒU$sO@4åèxâ˜Òp)x=4‚síN½(!²=©3­1ÔƒÖŸ„þt›„”†q­Î*3•¤Óu× m,cÆ#PÉⵊ%²ºÙß2®aÜ[¯š>£%Ú#å±è+±µ„Aa *¼Šã¯íÒ]gÉvùŒ8÷4“¾à×c¹#z)^‡šŽYŒRÍÅl}++SÖM¤fÒÙ7N¨?ݪ ª\\xvã{åÃ'ØÔò²¹‡hMqyu=ÜÎH<A]ÜFzšç­/•¡ÆäfIXºŽÕbmuaÓ –EÌÎ2·Ö†µ‘Ðd@:ÓKb3üë95hßJ[Ù08?(õ§ ^aÓü‰‚}é44˪̱äw¡_–žõºŠKD¸,Dl»ÇÒ¨¶¿§¼nw‘€6óBAsZ9³íR+ü„Õ 6þ;ØâÈ ‘ÏZmÖ¡oi2C#…f8 ö¢Át\võ¥)½¾”ÝÈB6Aš–9£”íGò0‹àÀ>è(8`F*"¥ öõmðœPÆ–AçŠ^/©ý*8³ƒšGÜî¤1w3ZŸzš‰G y53c¡‚%È­*ÀÕO1ÏÒ¦¾CA"°0ÀéQ¨ÛòôÏzT~q*0.  É岆\ò§¡¨žH Sƒµ#=*Y$ŸZªñ¥Ìn¬)ˆç Æ·â˜ŸÝDZì!LþU•¦i0X <¦9sšÕ?(Pi·qX‚[+iîy!EÖuõ½•½Ój8;ÐAô­e0j•þ ‚9‰Úì ŒK(¥×/þ×(ÛoÄiØÖ¶­g%ÞœÐÆæ#ö«–öÑYÀ"„a@©É €ÔIfœå 1êÔýVÀêOn™ù#mÌ+Hd¸&‘ç=(¿P°± £å^¤‘Ç8§cÙ¨&šC±Èø¡Äº”i€v¨Ï¾MBšN«g"˜üà«uÝOý'\àü»ÀØWsmsò€kF쉵ً¦hrù‚ëPrÒƒÀûÕSű»G«-8Ûï]`PN1š­qeotƒÍ@ÀrG6£±Íh–š”⹎ÈÀ=ÅUñ47 ª‡9*ÀÇZíTŒ*Œ;S$¶Šåä@]Ê} >mnÐçïm®ï|9™z˜8ö‰£ê¶³ˆ­×ybÓÛèlƒ`^ØäzÕhtÛKy™ã„+?SK˜|§)âìµÅ¹nÆ2=*íÇÚG…-VØÜüvSÅä6£N& uÚ]ªcÇä4Xüé·¢SÎt½Dé·Ë>ÍØÈ"ºùšž‰ouX^¬=*/ Hš‹Év’•QÞ»/&#j!+û¬`Z%%{Ž1g›hzÛi0(…ŒÖß‹äûN—g:/ûÕ‰<Ú©‘_m±9Ùï]£¥A{¤µ’€·ê(rW¸’g¡ø…´‹y#o'‘õ®ÇÃz´Ú¢;ËÌ3ëU4¯Cj·Ø–MÜ(è+¤H£µ‡÷q"¢Ž‚¢m=ŠŠ}IáB]òr3Ÿ¥s^/»´·²{f(Ï'E=Aõ®ŠÖR9Îîj¦©¡YêÙ3&ûýéE¤Ç(ž{áVßL½‘çH6Œv§ø§QŽþþ9Q +´šÜ±ðG•«$¬á­ãlàõ"¶5¯ Zj¨Ü™FûzVŽJ÷'•ìbCâ{VÒ–÷›…`P½êÞ‡¤›}:âi×ΤíôÍXѼŸ0žgó%Sòç ®„ÛŽ€àqÓ½L¤ºc¦§$Óiz–ò¸’6<â½Ã^#‹T"-¥e§°¤Õ|7cªÌ»ÿs <²÷«ÖÚE¶›Hl`“Ôþ4JI¡¤ÑãÈ#m*9ÛýbI€~µÎx2ÀÞkî Š%,3ë[þ6»ˆé©läyÎÛ‚jÐðvœ-4˜×6Y‡ò§{DMj'Ž`žM,(úW¡^ÝÛ_*[Ädf#ä÷õ¯b¸Q$l®¹r;W)wg§xm&¾N&“$/¯ÒˆËK—S'ÅÓ\ÜZÙÚ¼@ÜÉó0^ÔøtûÝ3Â3ªÄ|éYG¡«>†}[Q—U¼;¶©í]»"°eÚn0i7m(ñÿß]Ù_¶‹{Hv•§kwq¬¯šŸ¾À ôkÚXêR]Æ¡žBx?ÃDzÛ’jâGl” |Ê÷ŒM~;¹¼$¾pÔ`=*—‚¾].í˜ 9íŒWsqmÔrDü« jÓíí­~ÍAbpU€ïšž}£©åú:ÝÍ®—²Mï¸OAšì|K¤]^èÑtiâ!˜ç½oÙéVºd?èž¾¿r6Ôõ8dŽËÇ.ßZ|×`Õ‘“ >«:K¦@?vÀ‚OEõçÞ³-¤›F×T· •cZš7‹¤ÓaÉn îa÷K§irx‡X{çR–û÷sÔÕí{“¹é;Äö±ÉЕÈü«ƒÒ4YõËux„LJ»ã ®õ# Ñ@ñµíwã½eÍbì>(Õ ` ’X‹ÆHëŽ*-ÛFIãÅ<ÊDy‘´xž«Ì:̦U"_4°÷9®ÓSÑçÕü3oq"í¸Çzê/,¬®%šÙÐä½é¯8#håWVç°”u<ŸK»Ô4Ëâ–ÁüÌà¦ÞµÛëöº…ï‡#~•wÌ¢µã²'k•Û«mäÕÇA$/.VE ý WwË<9i}s|`·Þ±É…•‡LWEâÛÃ`÷V§l‘›æëN×uC k¦À\Ï·ŸÎ°æñ©©Ø­Š©wo¼GV«Wnä´–†·ƒo&¸µº±‡ û²{W/"^éºÁx_‹Z‘¡ßótëJM1ÚÄà“œR¨+j&}êPÛ°ÞÕ ‡#ëR66èi¬pê=iYNE<ã`é„b‰01L,q“@`f‘·ŠA #¤sòP—î)IÎ3L -JH9 ¾…­EɽÆÜqJë½ã¡§Š@|ôíNL´dãäÅ9À LFB¡sQyy|Óº½©àŒy¤o LQ†À'Ö¥†ÎzÓ S“@©“Îj¤Z°‡ƒQ“@Î1NF{PW'ŽôÄn‚¥ô5dŠ0Ò‚Ii3׊dŒË´m˜™n:R8Å( ƒíLc×ó]ißûrå˜m>a#è*å…öÆ«%ʸXÃ#¿£âm[›µÛ©f ZæR+ÛY¶¢Ï‡Œ ®kdîˆ{žƒsw¬$ÈáG§sí\Ý„DÞÝj.Í º¼FjΛ¢\8ŽãQycféZ7Ö~m¬«Û#©x¬Ó¶…YØæ´èçÕo®J¸U‘²íè¥X×-¡°··¶¶Îd9aëŽõCI7Ö÷Æ;tË©^?›\k™5´R¿:å‘Þ¯¨‹Ý·•ialÌ?:n¿1ÇkkûÂ0°ªúÕÌš´a¢&H°úã½$ÒÜÝëq -É1‘ˆÃt$"}nÔZØZ@¤Ž¹¤ÔZ­‘·´¶_0¶ì¦­êrC_‚×øb cÜóPkS†×[”ˆ¨ÀêqB]dMi§ZÚ+Ÿ˜a¿ qYšŽšl¦… »Ì‹Ÿ¥ië·*Ú­¦ì…M¬Aô&›­OºÅ¢©Ê®Ð߉¦€ÔÓ¬¿³àØX³pì~µƒ®[\¥óË/!É G§¥vÒá!,å\µÍý¶¥¬Å„ýž2>…ªUïq숤¾»[ØÄq+(ýit½"ù5Dy•ÑU·3v4—,±øª68xôâ»EóŸJˆÃr*EÂÂs\ãø#ÕŒAƒ%Xž¹®ˆ¨’*x#"¢Íà«û³D#®zÔ±!šc!q@\Fǘ :A·æÍ¡“Í,€4'ÖÜf2€úÓ”u盿la{ÐNS¥ EËŸ­NNsLÙ´d)D¡¶ÐÐy„šn ÉÏJŽ)¾ÌÆ“È5 ùä#ך=x“§fV #¯ÍHAaÏjbŒÌqéš|@äóÞ’%ݹ‡jXs½j#ä­#äºÒ·Í&=êCŒíHhHÛ9>”Äù¦&œœnA÷Ú€ÁÆ=j‡¡s‚EA8 "‘MÌ ¼:í&IÈ`8¦HF‹ŸtT—Sù1«¿NõVY$Gùâã±ÝK*Kq Ü¿&:_¶•]I^âšY'9õª(®8®” sÒ†™•Jf«–8ÈúR<€ Œ~µVV+ûÀ8ö¤$Ü{Õ±†B=ª£d‘Oòdàƒ@Ž+Ä:ýζg·ˆÈ„‚ n†»;ÌK(’`›@aéÅ!ÞØÉééM,wŽHÅSwV…éÑëž+\ðü:ÚDÒJêSŽ=+N@Z“Ò…lAÇZWc§iÐi–©#ùÕ¡–jª ¿©QÊ‘Ÿ¥&ÁÚVCƒÅ<¾Ä$sM‘¸È vo—¥l‘vŽô7ÌÿN•˜Ê#5 WÎØs“CBF‚^õRëO·¿CÄ!ǽ8ó¹è*Bå2G4 9ɼ1¥<ê°Rn•¯oe ”++„ÃV "äsÖ›1Úø¦Û ‡9&š’d©QÇ|Ô±•òÎáž+>Wf“jp3H ƒïRžSFtA¸óšµ+Aí@6C4` /J¬ˆ‘“À©Ébƒê3ç¥ /ƒqR >n*²¬ŠóD^cn$š¡ªévšÎ8ö©ô­ÆÉ?q+`}qS%»¶âÞ½êí¤{PÓ»2¡NCÖšrxíScp¦„ÇZCÖ‘‡Î9úŠyêÒn=¨å@$ûRA(lç·z˜à’ëL[`¯‘ކƶø;Iõ§³íÔ`S¼±Ò£•WxÇjKHì*RØšŒ`0céN,3ƒÞ€#yp½sR…8æ‘‘TŒsSܘ (µ(Ãxâž«ŒSvàŽ NON)œ„$ö«Gn›ÃÇ€@ÑŒb®I4æ@GÊ)(‡ ;îf†”¶:PŒY@$|£f˜„ˆnheË/JXÀ9¤-É ®H<ô¨Ø’zÓÔŽy¦“š@"œž #78§Øi®GZá×µH­“Љ[¥=NjÄ8±Î)ͤo˜b€éQM.ÀòjUùF V—9ö¦!ÛÃÈÓ~O0qó ŒgÏÏlSf¾Z¾ª ¥I9â™lidcò¨èOZ"E" R~ñ Ö™41Èá‚À}í£ T3]¥»ìv •Î=«žÔµ¹šì[[¶À+7|ši6&Ñ¿%¼bàNPq´7|Sì¬b¶y%_šYs1ë\ÛëS›Ø µ`Ã!X·ñõÕ#.8¦ÓAtÊvÚ÷ÏvIy‹sÐgµEo£Çì×—FbWýšÖßó^þ•ÑÇ4ˆä)¥v9k™!Öu˜âÈTˆ_ûاjkvpD¿)§p&™sáÙÒéž £U$²’ÜÖÞ›§½´‹=ÌÆiÀÀcØUÞÈV¹¨ì¡Ddg#W¤L5‚°Gû¶`ÃÐfº÷ɘj7®G Ç>µ Ø«\æ¼C¦H’%ÌYc€§±Zº:ˆM÷ræ=˜7V“©?{¥I gŽ9§Í¥‰¶§,þyu·VÞ '~í¾µ×CÃF½BˆÈà sëM$‰Rnã±1úÓw‚séPÈI“âš®W#  ºŠ å3QÆÛÁõ©€¤àdqÚœ=ª92H§d¨£¨Ú$Ú0F)ˆª€í§ãð¦4Ä,ˆ²r=MF¶ÑgÍLäü´ŠzÐ0 ã¥<¨4)å9pA Cb‹lnëBFpy§nù¤ `ö $E_“N“&jL¥*2M5'½2T<åƒSa÷  6îéP˜Á˜ò*Ï I@Jî¨ÛG Tp³0Þí²ƒQ²„p{`Ñp°€ã,j&Ì ;Ôï·ÈÜ{ö¤HÁE#€;RÙœªc•7s2ŽHÅY†"¤tØGZÚ&ŽF,rX“ùÕÉ0P óH 3çÚž!ÁÏåH‚ÆùL*6ÚÏòš–XÆTzuGtê)€å]±ži¶î"¸ãëR\a@¨3 l€sëH ÑΊR11犯aæàÓö³9*{R)"Û?ÈqÅ6äàö¦F†æŸoW9 A*ò3ÈïVbU ƒÓùTL„Ì=)eV*Ð …¬ƒVâPQ=ê”P»Ü6áÆ+B5Ú;SR¼çlý8ÇJBBÆÏŽ}*y¢èÇ­BÉ»‚jZ)2Åʰ8Í\V]„=V’p)d·€§a\iíéM|™©ïV£‡jsÖ™å€ãŠ “±Ø0{U˜0-ùª³©Î{Tñ¨hðµ0H"%±RI òÆÌy¦¤yàúÓÚ 7X”0Éô¦LFè²)®0~´†ö"ìË;†%ÍÑ,€ñÁ«Yßc¡+1âªÂ-H€`Ô µyÏZ’\°¡òÎ9¥aÎɃT²¦þj¿"`´é¤‘\8 D‚:Ó­¢W|žÔˆ»“ž‡½&LG@ì%ñ0QÔÔ€–µ9ì*«#Ï8cÐV‚FL{OqA$vˆÉ5gfj™‘þ^•8›`æ“)hJˆI#ÕM®N)è}î„T&áåÝŽ” ±nqu©m” >õB@Üy©¢;ºP+ÏZ‘T‘ëQ³l hi‘Ž>”(>;ÒûÔM ÎO¡šr€zÑ`¹yóÁ4Á'ÍŠ‰eߥ+0R­ – 9aL¾IïQ‡Úä’zS£Ÿ943©(¤zŠ‘”b˜ (ôàÄ1L+·¥ææ€cƒ9bqíOc#½5²HÅ '$ã# BõÍ Öš¬gÖ¤_š‰Ï‚2 )eFK’ޔ䧒Hç6Ñš—;“ë@+~ZVbÝ1Å…©©‚œƒ@2w椀hgÉÆiK€ mÏ^ôÖR¶ dšŒ8¿FÌ…°pÌÍVÕî^õ÷¨X‡zf³¨:ÜÈ‹¹Øàg ©íâKrØ'sž•¡nnaš&PTÆX1ìqMn&ƒ!¼ºšyÉ{¤ÿ>•E’)|A.öù…¾¸éRénöv77J¹bÁTnµ™ \=Á’-)$’v h‰{öz1›Tk¢<˜•·(Mlß_ÇandnNà{±5ÏiË«Ï}‘åT,JíªÚãÜÉ©2?ý³ÓÖ¦×cèvŠþfÂxÜ}ªî#šâHüѤ×3is}iot‰p€¨?63TôÙµr¾A~XúŸZ9å›–šärG˜07tkV’è[Æ–€ù’¹þî+ÄÉ®»;•Or]Òµ››½Ec›•qŒéŠΆ(äǸåöÇÞ³u‹¹¬ì™âl6à>™§jôvÛ¡·I±Ð-sך¼—ÖKËóoݺ’‹zƒ‘Ðè·3éÂI‰g$õïZ¡ÎÀq†«–¶×bÓí ˆ.öçö­ØnEÑŠæ?õEI?Z$¬Ä™yfÀÏ­>&,s\ö¡âc¹Xá]ãwÌ{ ß‚HåDu9à*ZiqŽBHzñH¤üÌzb¥™ýäõíY7º½µ‘òä9fê¥ P¿sB) ¾àÕ¢àæ³­'†{q,gå<ý(¶¾¶½‘ÕJáBBl·ç©œ®zzÔwz…µ |¡sÐzÕP¢K© Ê€8Ã\–£)þÙÜeI‚=…4®Á½@ŠU‘—@#ñ§1šÏÓî"šÍ»‚‡ŒÕ|ä #¦p*ZbH~qíHÓõ¨ó6Aä vâÜþ€'W"„l†ªK4‚Lm8ÇÞ©„¤BJþ^ô*‘ÈÏЬ&Ç­D¬ Žy©FYGÒ“³àÒòV’BdFµ0˜°¦+ ­ÔŠy¦‰4ª{úÒ7 fš“D²Å@³ çÐÐ$HK™0:y?!™{¬Úéò(•ŽO¢Õ«{È.Ð4lc&‹1Ýp G‹¹‡ËŒS²102&8¤2rH+O™¶¦M@ïóŠ’V&‹…‡#EÏzXä_0¨<Šdm¼'RyA'Þ$b„ {¹2J—q0séUæäRć¾A¡‹aåË0ïJT‚qšK…ÉÈúÔªÃåâ„6WEo0õ«ÑÆŠ€‚wJ‘M £!d<{Ó™Á~*2wc”„•Ïõ¤2S÷ÔÖ¬Üã U$`ìbÛ¤ëÅe€G^ôìüµoœžÔ°åä<ñLC]ˆp Í2D%r;Ô“›æ!ŠŒÇëR" °äb6æ ŽLN\S ÓRL`aÞ{R¸ì‰<°cÉ"lSŽ*)np ÈíSÇ"˜Ë7´ýܾ¥vŠq€@aÔsTbŽæÏ[`´¨Äàzc­Xðôó&ªÊªYdʹô§Ði‘°ñÂì ËŸ\Tž"·†aرojOÕíïf’ÎOç\m¹¸?c‰ö¤œššÁ$±×c‰ŎÅW*&çorD(Fg’iñMÆXÇ'wÆêz„Ú•Ô¨®V(Á8ìj¼W1èóF7„fûݱK9ŽæIb—kFà€pHjÍÕæ6–.ñ¾Ö?wë‘·ºž;'Ž2àdŒñVnî.n4x|ÐpŒžâŸ%˜Ó$µÒîuˆ$ºi‹88Pß6k[AÓî, ›Ž G‡'Ht™$»$‘U¡ñšúf”…€^(wz Mί–Œc½ ¥dõQ¾[ I%È¢ûš‹t*åɾwE$¬U70àW¥ë²Ç|^æW(ǧa[Þ Ö--R–”djlĤ_³¿Žy#”n^ VœN[n[€zšóVM.á¥x˳Œ»¥uzÆ®‘èI<,VI†zSq³°s\ÜkÈ%%QÁdå€íK «Iœõçš&²šlóÍ.ù@=k®MfØibý¾@W*½Î;RqiHÞ˜™ïŠŽ)¹½sšo‹£¾¸[yâ ¸áHïõ§ê:üzf¥G%[e´¹Xsht’KÈã4ýáF3ÔV=þ¹igh³—Ü1SSéZŒz­¸UÆ ù})4íqÞæŒ|û}{ÔZ¾¡›jóÉÎ1Þ–1‰0Ãß5âË9.´²SæpGOAB³3m|[s}¨¬0[b"zú êí·K&z ò¨no4{µuà{Šìt_%Üéo<^[·ö­%ÆwîvÀqQ¼¢21Þ›5ÂA•Û£$× ©xØý´‹XAN 7ñVi7±mØîŒÁ‘R*åÜ×\…4©G˰CT4=ëÊ.€ðG¥7 V:Ö¹¸ã$ñŠ˜He‡rõ¯?,žmo`Ø-™ö~µÞÚ•x“ž)4Ð'v(ŠXsšÀñ£-•ƒË pFÖºW·WNp}«×â†+Lü¦3êG¥Æö8«Oê zK—*O ôÅtºwŒDúŠÚÊDß*¸õ®Ê(f½D™ö#“éZnm5ò»\¢ ”¹85¼¢Œ“g¨jWßÙúL×Qನ+šÃðÆ¯¨ßÍ3ÜÑã+ޔ𶷦 º|¤È²­†éZQ]/GiaF€°÷¬í¡w5‘üã†nE$±ˆðs\®âÈoïŒ,† ·aIªøÂÝoâ·„îpÂ¥ÁÜ9‘{]פҭĉo˜kCñ¥©ê)XÖå±ZšÖ˜º¶šÄ6B®õ"¼åΗ|LnUÔõ Åi¬&Ïe‘×*;š|äù#myþâ÷.ßà’GÎ?­v·wÐ[Ø5ÃÉû 3ŸQPãa©\³y˜$ã`ȱaY¹=+Ë/<_¨Iu¾ÝŒq);@ïŠÙ¾×&¼Ð Ô£—FÁXôù1ÙÈáò‘L¨Ç÷Epº7‹'–I~Ù€¨»ý©Ö¾)“Q¸’ÛÊ vIÁŽ2:ßé¶s™þ`z ÒŠö+‹U’Ê‘šñ˹¤šåÚC¸ƒÖ» ëÍqq‘€*mäoZr§epRÔï£o25ðqšÃÕ5”Ñ´×›ïJGȧ½rgŒîc»oµ±xœŸøÒ¥A´7#Òã›l‡Ò$Œ¸+Ï5Íkž ŠÏJKˆç”a gxsÄó_¤ëwÇ”7îö¦¢ì'$wHLÉž2*¡™-÷¼Œ0¼×¾8–=[?ÑsƒêEIâ­]¾Â‰ à˃‘ýÚ|Žâæ#ñ‰nu :pG;™sÍsÿÛzœð›%.®vínµ½á]gO·†;Y‰¤o™ŠÖ6¿ux‘¦…F# Œzе½¬'µÇ W³òÜ+Ç*-óô¯N´YãÓ­üáóìúâ¹+?µÅÜý”e˜/Þ®ââ`,$—Ú¥³éYÎ÷±q±Eï"ˆ=ÑA=Ú´ vÒ§åÆExýåõΣ~ArÀIò(õÍ{&›Ë(ß›`üéJ6õ'bqŠ#B¦¤xÁôÁ‘ÐÔ[ÎbPà ÙÍ<ÑšbT¹¿ SÑN{ÓcnlSBE1ÔªÃfF R«H ¶wPŠ3Jæ”`8Á /°Šo™“»¹§ ø'½0P‹»pÝCüÙ³dД ãš@D€Ž´–©m~(Ú÷ . ÁïM#)ì1Œi`À‚q@\‡ÉéO-ŒqÒ•##zÓ›çJjxóUã9{Õ…àUˆq=© RñŒÒf˜„äcÒ¡ Rb àÔ¤ã½dkZ´:tx §O_­4&k9ù ¬ó1Þ¦ÚêÝØ •<$ûYZn¦oÑÙÈVߟ(&h¾·h“,!÷JNÜïVÍÄh;Ç«W±ìñ6Â3ûÀJ×Õ4ó©È­ Äm;JžœPâ ênùŽä j]Ùèj´fÕ.GµdêšÔštÉi¹‰ç4’¸Û:fÆ3Üt¨RGqÍS¶¹y`å8Þõ«{±:â–ÃLzà‚î(Q€@ YHp[ô§™%³œÐ&#[³‚#à·’> Kh¼P"3rHîi›÷@•¼Â¾Ôõ Ï ,C:‚Êr¤¯O¥VºÓí®¶=Âä!ÊÔêà’’9¨åZO!ý¾”j_í½QU8´· c±Á®¤Æ‡ÊWiŸk.ŸnÿfµòüÂyPÜæ´ï®zŽ´Û‘oá»kk¿?q|1!OAZÀNyÎ1íNÞŒ ¥F%1éIúÞ›=ý¤q@Æîô¬Û­­ô1 ÓnÄw5Óyƒg¯JL‡L0¦› \ã®´Ùí´xá îîû› Ò¤%µðâÀûjé¤'AOŠ`¹{ö§Î%CѤ·…¥¸äȤôÖ±Ý/tP­¸™² / =+¹;A>üP"_•±¸©ã4)*9û âòëíúÚr'ô¬MV´ýY¦_”.„zg¥z Æ@Ï$f³$¶†áñ2#`ñš‚Æ-Ííõ߇%’XB‚Àdõ+YÚ>©uo [ÛA½··¥vV‰sdöÇ„+€EW³ÓaÓ` ß=ZŸ2°¬bx¦9ZO"òT†±©ô-rÝcŠÖEÚäàÐÖÝí¼wVâ)W!¸ÐÕ-?ÃÖÖS‰y•òq¹x]X,o(]êÊ8ô¬íU [I¼ç2nµ{ºžr:{UGJ‡SeÈa¤vÍJzŽÇá÷·ŽýÞv ¡H­;X£ªI}íŠ%#?Þ8ëTbð½ä·Íâ0OÏí]……ŒvÖKn½O­[bIœ„Bæý¡i¼µ|äŽâº}n`ðãG\`zóXZ¾‰5­îmдlÙR;f´ï´ëÙ<:žkfHÎò¥Ì5á«UŸNœ2‚ ~‚F°XÁ *‚O«?E‡Qœ<¬Q Ë1éZ%‚HtëD‘÷²’~)} [øz&†àó1ÏÔVV‹gºËÆêUl¥mhðÉÿ㈇ïb½sZn úmûLÃqÉ >½y¦¯­„XÕ­#ÓuTò²Ãj[›Ãªj‘B͘wŠžãwˆ5Xº¸hV;zõµ¦&î9mÁÙ€Aô"„Õ‡ašÎ–¶Ø’"3ò}ªã$Wž¸ùá\)¤¹Ö¡¾Ò¼¢‡í /Þ>´O Ö~ò6–2ÏŸá Ð4tÕ&0‰ŒûÖߊtȡң’0BÅ…QXžÕWO¸xÝK  ¹®‹Å·ŽÚ@DUe9 ¯+ŠÄ c˜Ñ4ˆõ3)‘Šªc‘OÖÜGwˆÈŠŸ~ôï jÙ]:J¤‰p½;Åh¶|Ý…UÔ{Óט]Ûé‚ÿUÛ`…0Yþj¾·Ñk¤„œ0Æ};WkáÝSL{(á„$ràÉ®gÅlˆöÚ¹ü)&îm[L¼‚Þ+‹‡Xv­?­Ñº•”ÿ£¨ù‡¹«¾'ËèíÔ? НàÝV b,¤RZgãëIëés´ŽyçÜÕß¶—§}¡3g‚µRÞ ŽjÃñ´’èå‚J°ljÉ-Kg7¦YÿÂHóÜ_1ȦÞÕ“«érh×Áî\nC[~Ô-íÃÚÎâ7ÎäcÞ«øÌÆ×q$RùÍŒœ{ÖÚóyº,ëZ̳xfѬ|V6éua0!kĶÕè;UíGOž? ÙHèx%ˆô™á­^×K™þÒ„‡î‘BÑh'æYÔt?Èò?ƒ2îéš§á­6MBâHÄÅnJêüQuï…¼èî°¼ÀßJ„ôBß• ¾Q»SÙˆuf´Ü@Y6g¿Zõ­ÜZé±Â\¶S^Q8þÙ’có(”·=ðkÔ<9|ú†›ûgŒ{ SZÜ×rQ>QŸ_¥sþ#ÓΩ§I;Já–º%ŒØõKW"×Jž`3µIw¬£¹LñÈmKåµ-³>•×éÞò'Y®.2ákŽIÝ/„熭z5ˆ­®ï¢µ·…æg3võ¼›!}“¨Ér‘º»»»6—ÁÆgýÒî,{×1â³ü$N"*+µšTo \Ýÿ [xäçÞ­øÖád×ʯ)¶ïaic¤k“¤xSËʱ€ õ5‹á=6=H\OtÕ˜Ž{z‘V$¸›YðÌþTLX忈JËðμºT ÈÄoóè}*m¦ƒ#ñ>€ºLâH_0ÈN¦*MZöi<3§®rœî>¤Ußjvú ‚ÚÈyå¹Êö4šæ5·†-.L4€u掊àcXY>¥`––З›ÌË?÷s]…ƃ•áIí¤;ŸØÿµ\n®K¢Ü ï)õÜjú³j¾–æàƒD¯pGáÍ>ýE¢›>XRN;×}ká­?N‚IâBY7Q\†õ4Óu@ò®cnÔ}+Ð4íRïU7%ív[ ùlsÈ¢Wgœj–ˆšË@£XcÓšôK ÇMµI"„ne›ð¯9Ö¤™µ9L€«+p=‡Jít^ãTÓü†·!cCÐÑ+Ù 2•¼0ø[¹K©wˬMsCLÖåݘ縪pMq§ë Ö­ûår«îzUý~ÒúÎú+›¶ÞeóïéBVaÐê|C¦Á„•QÕ(Ú~½kÁpÇ=ÅÔR®Uô­ íVaà¤I¢,ÒaX~ÕáÓn¤©o0Å h:”pxˆÀƒ÷f@ýkoÅ–p¦•¯ÊѶÅưu ¹d×ZâDua !vò1ÿÖ®¿ÅQÏ Cz®0ÅOj–sÞÓmï§yœI ¸jÊÕíMž«,Dç y>õÒxß\àtAX¾)Ïü$W@ôIûÂèvz6…a$·Š˜˜(`GJ‹Åúø†Ý´Ûb|ç¿°­ 6uÓ¼Ë),‘ä Èð΋&§{&¯¨ ïc±JðIïøV}nÊô!𯇚)ã½¹n¨= ¯K¶Ç–;`qXÉY° 1Z‘ LÁhZ\¶sAÂcŠj‡õ¥Rrwv5)n&…REÈ4æ;HÅ„ £$ 1¤v?(—h#“Ía:÷¥E P®W9çÒæÎhtìgšl}Å*1ˆ~bÙåÈ šPI~zÐ>n§¥8=è¼ æ…FÉaÒ•Ôf‚HàqE€iääÓŸ€)¤)dL"äô •Æ æ¢pXñÅH¬Zy°Àâ `€v`ç­2i’Ôô¡Îà ü©çô©—&¡\ƒÍN¢¨Bò}hëŠVè= äS7ý+Ìïî úŒÒJyÞr=½+Ó‡Ö¼Òì‹mfS2n )fSÜf®‘¡oiw‰vè]a|mº¯z§¥é—7n“DØD|1ÝÓÕË©Y\hò°p±ˆÈ#û¹+Ã7PÆ“Äîæ ¹nµWmA.äñI9åyÿÇj +›˜u’¹wÜÄ0ÝVÞB|\¬V¼S¡ˆ:0‚F:}Ú[Ôõ“n 6ÃtÌ9>•ÎßßO{opƒr7zÖ»(ÿ„´)o@? İ,R[ìP¡‹;Ñ z¶×ØRx‘0¹ôÑ\^G -r§1ªŽpkžÖt°–©uÂ(Àïš‚âi‡í”žˆúãµ+'¨lhéÞ!^¬sBá[ëÒºâtý>MFí>Î¥U@ÜÍíé]mÌæÒ9åa ҒW²+]êö–w\Œw)ä ¼ÓB°} 8T6kŠÔmgÂÝÜ™Žìz´°ÝŸ ³–ùwEéO—A_S¥¶¼†X$›Í3‚wT0–Òáá}ıƒ{W- ܾ—"Æ…IgmÝkWA¸tÓ¥2`GÈ?ÎŽ[Ê>¡ …ë´ñf nô÷5ÛhHÛ*FàGzâÎ&§ Åìh ~_QV|="ÌÖNß ƒéCWرѮvÜéÍ1É#ëšæ5 Ë@H°¯î!l±i%Õ.SI·’’¥‡|RåcR:ÂÀXàƒÆ*Bçq\Ìúó³Çn¹ÈóÜ÷­ KUû Ž8Ótì¡‚žÙõ¤âÁ;d>ÍÍëD—KenóHp€O¡íYºN²oáxæJ¤tî*§‰îŠZÇl.w9u èU¼¾Õ.ÓÏ‹zFzëø×G¤]\M§#ܬA•E£l}"&'ªã늂ó]‚Îuƒ;Î2øþo] ºñ$‘j?eŠyØIîkU3„’rKlj„¬w¼Þºm?Pµ¹º’(ä;‡\÷¡ÄIêiZ3ÛÆÂ…ã‚zTw—ööQîžP¡øšóÃäG1˜ÏñnëSa¶Xu*³Ç¥Jì{ ¯pêmÑã`AèwqJ®Æ:ñŠäæUk†âò`ZYB¨èMVpÅÃÔóšæ|Op%’Ý2pÊûÓJîÀuö÷q]Fí£QS,€c¿¨õ¬ ÀSIÜÍ!,}ëLoù0Ä2}èz '$}ÑÚ’uY#ÚÂ0G±¤2A» Ô&rîv©TŒKUH”Ç€Ÿâ˜ChûÈùăz2Fâ>÷SS.ÙÓdªg<ÓÙÜH©¥DcÑ#^CyYüë˜Ð¬¢»Ô¥Y¢85ÙÈJ|¨¸\míYV2iš\î‚LJç>ù4ÓFÝ¥´6ѲBp(»´†ê³ u<jdu aqëR0ÇSRŠ9M;Ã&DÜÈFÄ$¢ŠßžÞ9à’'P7©\Ôìê˜3M‘Ôr[8¢ìV±ƒ¦xZI„òɹղ t­›Ûu¼±–PX©ÙžÆ¬@Ë.vŽ”è3EUÄsš/…ÅœÂkœ4™ù@è+gSÒ"Õ­ÌS.>㎢¯¹D|ç“U.õÝ>ÊEI¦ôÀùª[m•¢Fnáìg[‰Ÿs©ù@éÿëª:džîõ rIP¢Âp¸ô®¶ ئYUÆAÙóƒœÑÎÓ &axƒK»—J¶´´BàŽØxÃ1Ø•šošã¨ÿd×PGÈ tÇØÈ/‘G3µ‚ĈJ?'ŠGO4ÈŽ# Ñ&89Å=z‚M 8=WÁ7?j2Y°drNÓÚµ4ÇlVâ÷N8°®¦Y8ËMC€yÈìES“hC'´ŠX<–Œa·•È?€d}E‰˜‘Ž¿Jí²ÀÌ1ž=ªQ“·š”Ú³05m Káñcl1°|¾äV‡4K.âI®#hÃWsq“ ÛŽ+=à$†<‚j“¶„´q0øRIoä’àâ@ÅwjG ºCíTÀ¡ÑTpyÅ>ˆÃ9©m²’4ƒÙÒ¾le AÐðAª77QY¡y–«VWÝZ‡…Ã#Œ‚­-P+.­à‹™µ–ÓËX\ä‚ßwé]6‰¡ÚéíE å~v=Nkgk‚WpÄ6:Õ9;cŒÖ¼÷wþm› HI“Ìn„×I‡Ò/>œ’Ì„n=7}*ÔD$áweÏjš'.äg4st Ÿ‡ü6©›‡O“;6Ô·~“Rñ\ÌÈ-ÉÎ+±s¸c8ªó\Alè“LˆÎp€·zjNàÒ,­ííż+„ ŒW#ªø+›†šÚ}…É,¥z}+µ%xÇB95ZâP¼/~õ)´N‰á«m>‚I’åy­ÉaŠthÝ\ëQ@ÅܽÍXáH ÁÏZ/ÔG97ô罎àª%L×Aöc±6Ȉ#ÁBñOšê;XZIFâk˜oE0xí-.&ÁÆUj®Øi¾±ÓîžvBäà2𵿵mPú®Zo\E–Ò§òYúÕQ|ùdµuÁþõl.hꞃW¿K‡r›F¯¥lǦÅkd¶ñ.ÔUVmŸ‹´Ë6Ü?Ýjض¿‚ù3 ¡À쓸Ռ?Áö0j†ø¹gÎà‡ &®kºZÂÂŽÛDGwëM;•zÓŒœã½&ÀϸÒa–ÄZC©P=+—Ò|- †¨óHîÛ˜^•Ý Úy=j„Â9Í L,rv^Q’ÿQd}ÌYUz~5{ÄË~ž ÿ.Þ°­©ÔìUóÅeëcjZkÛƒ´àõ§~â9¯‡sw7=BŠçüS_Üs’Íšï¼+¢6‘‚GÜdnqÒ«k¾}WQ71Lˆ3øUsZW hjé–ÑÜèÖó( Ƶà‚;x(Æ«ivd´ŽÜÊ\¢ãqïVËûsÒ³e"BpFzÕ´sÚ¢ƒr)ìÇ`ã4 ŽÉc»wJqšˆON*bÀ<ŠLhXW ’y “Ž}iÊÁF:æ†ÉÀ bGÓ­õÚä~4¸Ç=F=ù§Ì;ˆ­f¶»Žõ8ȰìERÕ§¼¹‚Ú{ˆBÆ îOzíçQ"rÆz­WkXn-V9Ð:)ÈúÓS ä×÷è.#Ú˜TFõª÷–s®…háIEÜÎ=3Z—Q¦¡ªGhƒýØåÀ­á¼~S€PŒ`ô"ŽkŽ[B׺Gi,Y …qúÖLjˆ]Sî?Mk¢ZYNò"‚XœgæÛô©¯-Eå”ã÷¤Ú¸’g6¡-ÎŽ¶ì…Œl}¼«Þ¼9<s{‚kLè†ÛG¸·Rd–A¸•îEV]xt P¡3ÈC; « ³ ¶&/ NÝ|Æ?‡4i¡Ã÷JXrÁ{ö«Y\Ûxa¢îf TvÏo¬hú‚ÖIgæIP©^ÁMAbo ÉÒ•Aù!¾µ‹¦¿t‘+6 ŠmJÂûɇ#v@þéº 3GKTÌÛ§•Hfö4¶w ]Xçt{¶O$&r‘€êàv«Þ!-mmâ‰BŒ–üªæ—w§_ „’X’Œµg_ŠïÈ´{žË´ãÖî-«-:"ÞCʃîkæâOøH%uMò)(¢´´yu[¯%ß nœsÔŠÉÔ}?\yÊ‚w—Cêjã{:.’`ßq&|Æê½…Aâ¡´[>c»ŸjÖÒu!¨@äBP®ÏCYž.û–ßR?•%ñB7¹–ËÃvíÁa·éœóL³Ñ`ºÓc¼vrÇ,ÃÖ§Ô­e Û²|ʪû TZ6µ¾œöóœ4@•÷ö§ÒèFTV¿jÔ¦ŠµFqô¨ÕgÓuÎC+Ê­hW0é;ÌûÔ®OL“Rk·]ÞÄ-Îâ0¹¹ªòÏ‹ÚKVΡüÍe]Ivö6ë"•·PU=ñW¼HÎ&µÁÊÄ3Vuÿ.ÊÁ ê@“5¯.[GHP?”Œw7©Íièzœ¶öSÉ)-`Or{SfPžˆ¨ÆHÏ¿5McdðË2ôy~o‡f€’çX½y£¼_’ܶŽøëIâ)#žKyc|yÇÖ¤ÑôéµH#W!`‰³îhñLqÅw h»vÆ-.m·ˆd´Hb”ªÝÔŸZêlï#¼·I“¡ã•‰{¤¥Ö‡Ò¨Y’0~ª+3K¹’+¬9R«•üx£•06µoÇo0Š;§µ]]VÒÍëœÁ®k‰c–2›IžGö­ ûl4¨ÖIrZBqG* N¢ÏS·¸´’ã~Ô_½žÕ%Ž¥my¿ìç…8&¸ø,nfÑäœË¶É%}M[ð´½ëȇ÷kà ޴œws²»Û·–pØ8¯?†åìu_2á7•'9ï]ýÜ‚Ú+ýÕ5ÃÌ$×ïŸÉ@¨½öõ¢ A³²°Ö-õ&ù‡QÞµ™Ç–£¸æ¼¼¥Þ‹|ŒÃk ;ŠífÖ¡DKÆÈiÚ¾¦“ˆ“,]\Cö¤ŒÊ7ðqº­ÉhÉÇa^iu5ÚÞ‹™rˆdojì,uÇm î§\4cýªBæÔElŒÒJ‹õjž VI²„2õȯ?»µÔµ+O·3nNHEô«^Ô.VýmØî¸?ÃCŽs²¸É”žÝëÏ5µC¬ºGž[æõ5é.{<°é^s¬ÄR¾`¢”ÎêÚo (;(*y##c#¦:×u¬êV: ’@ê„‚#=1]F—­Ûêq™p0Ùô¢Q{‚z›q’c*y"ªÃ0ûC*¸,¼¥fjúêiÐ2ÂwÎã ­rv¹>|óJ„ù‡çÒ’ƒcæ±é7IÉÆ9©ÊÇóv˜5{yìõ_;«ÕüCy06¦H¡¸ïB‹aÌXñuÕÔz¢m™Â•@n=ë¡ð|—¥–RåÊa\&£qwu Ý0BÞµ Önl4(RÕd 9i6ñÖ®Q÷lJzžƒrò«¨õ©šR±®OÍ\~“â)5T[i¦Ùqž{þuŸ¬ø‹P³ÔÚ9ÉXÏ·5Žö*ç¡£óÇ¡ŽFHÀêæ¸[Ï]ßYF–~fð¤Éµzb Ð|M%Œì—®òFÀäÆfÅÌwÎc äŠu´ùr3À皥æ£tòêÞjZ“ÇÍSèZíêØÝ >d±®ä'¯½.Gk•ÌkxŽÂûSºŽÚ<‚Asºº­2ÀiÚtp©Ê¢ã5æz.­x5Ôfß!‘°Ëº´|M¯jpê"(æxbPÛüUN-èJksÓ±L“ô®cźΥƒoÌØ,;W5uã-B].$·YT dÛßùWE£Þ ÿ É.®£`ÝÅ.[=G{œ‡‡õ]š šòõÃß¡¯G´¹†oÞ+F;טÝiê7s¾•´1óÿꪖ•Þ•{nq°üê}ªÜT¶&í¾ò“ Aí\–¡¤êŸ‰Ä’¶èÃwaNñ¹<:]½Å¢ÿ®2ÞÕOÂZÔ÷Wg¸Þå‰!ý>µ*:\.w áPDÝj7]ø#µr¾0Öd±ÙonØ’AÉî+’:æ¯ä`Ü\Ïš/¨6zÝ­Ì29Š9P¸êQ«ß :k•Q¾5$W™øBKçסs·#Í%»W{âÀëáˇ^r ÏšN6•†¶<ñ5«½^üC}vë ‡: × é6ºu£Gj¼7͸÷5åÑi7rX5ôC(ŒAÇQеmâRX’w*8­o±©«%Ì É®UÓ²¶!rNYTW;q­êw[•îd!¸Ú¢·Óoï\ ‘÷¶ÿZmÔwf® C¨ì‚ù<±Ï¹®ïK³·ÒŠ<õcÖ¼ÁíotÙ·’9þ½w¾Õ[WÓYdm·10,}V¦i•vkão0f}±{ö«"å' ñ0`z\‰.nug‘l‰x Æò;šÌÐ5«ûK¤‚"]Y€+éSÉupoSÕVR„ $ñR4ƒøaëzÄ:UªË)Ì¥~D÷® Oâ Jà]@×àmÎ)(ßQÜôÛ»ˆíãYPª9Éj¯öÕhüÀÀ¡ïÚ¸?}¾,Òy—Ëÿz³-îõ;)­íÕÌqŸœŽàÕrhMÏQµ¹£å=EL÷f˜…G$×/à¨o­m${²V¨¬ß™¬ÿê—¼rÇb®má?;/ñTòÝ•Ðî,îá˜î‚t£RN[Î'µxî™y}mv‚ÒWX £½{%¶÷Óc’ì”&æÍ(“¸è§Øà±àÖŒx0ä5y6¯¯ÝÏw-½«¤í;¥zO‡¼Ó¡Ú r`-ž´¤¬†™}Xù8« äô¤ÚqÖ¤¦)U`OLR`å\¡¥Ž Ž”+cŒu¥ BŒó@aØqFñÚÞôŒA@ œäæ…bO&’8È'½)P òëJsɢ˸úÔ¨Aêi b©žriCütö `R.9õ¦!FïP@$Í#?Ï‚)zt Wi¡T)Í.ÐÞÕe_¯+ ªÎ™<TŽÛˆãŠáäÒ8Æ—ü)§îšty(™ë´f¬Bõ§ BÀsùšAƒóf˜…?-VûJÁ8BÙ qùÔî0Œ3É~5ç0ÜHš¦ùerRL·¸ª1¹,ôI0sQHXC•×'ˆoeÔ“iòbÜÃïëV.|PÿmT„l÷4ùX®tQ¬€å½M,€c¨jööVªìrî7"zÕ-#[7òIÊŠToô÷ÍO+Ü«›qfõäxŠÎµÖ¡»º–‚A=À«6z„rIO¸ÇÉ¢Ì.÷Fõ¥…§ó¬½cXPP–¸p:¯¬%¿ÔÍòD“m‘ˆP£¦M 7c²t`,3ƒjØ!¸DY”2«núÔp½ÌVëö– .~b)Ä™IÎ NÌ­Ñj%TU :PÝé¶×ÃE¼¯"¥f(˜µ,r“ø¦.‚Go´j‘€ª; ÄñR‰!µA÷šBk\ÞÃijf˜ð8ëTaÖ$¶¹Œ‘Á¦ŸQ3b#]5 #rƒíYvþ³‚âG9‘NplÖº0£5'CBac–O Eo<“Ü00&YPw†¢Ò,Åþ¢×b$KhŽcQÜÖæ­e%ò$KpR2x=E\µ´†ÖÔC á`{Óæ•ñ´÷šÄ1Æ„€f“Ä1\³ZZ,EŠ ù‚÷®ªT‚½zyE(1ÔP¤9-Nˆ<;inÀ†Ï v¥¶Ò®dÐ$ Næ!•kª ·^ `f`yíG0Xàô»»ë+³Y‰Bµ?‰ãœß$²ö®ÖKu¸{…ˆy¬1ºªê:lZ”i¶ÝŒ >epå9Í>òâm&Um†(Îõ$ôªúVŸ4úUã*çr¤úƒÍ[¾”]ΚU’b#Ì+Þºk{T²²"ü¨¿ ØI“z–ŧ\©;[Ú¶|G<3éÐÉÌŽÙÕ«Ast³†Ú¬~uõ§jGÚì’Öß °ñž”ùX¥hÂ?JÇœ“Ÿ®j ßCivé)Á— £éZ‹£˜t)¬Ð†‘¹ç¦iš7†D..4Êr°¥uf$nj‹çiW@ÿVN;W1á ¡Iç†B` g¾+®(%âl…qƒŠã5 ]ÚÜ3ÙtìGQJ:«ÑgÆA[a|œý+&òfHôøäÎÔPÄ{f¶l<1srV}NRvµ7n8÷¥ñ>•$ÂÝí!%UJœzvªºØV(øŠòÚâÞ„|Ø‘éZ6ÑG}á-ˆÁJ)ÏÔV}þŠlü;­ï÷O±íWt&ãûë9d!‡°krމ©=¤ñYãËÁš§a$ún¬#wp¯øÒÚ_jZź†9ØWƒ[Úv›q®ê‹¨Ý WWéCv®u/DÝ[5çšÜBßÄMƒÕþU銂<ÇŽ+Ï<[böú§š2D£rŸ~õz•-ÍzÊ;Í4È2*Sô®[CŒÏ<¶à\`|Ý1Zñ.¦ÚKpäEå•@~S€?:o…tÉšé¯$R.{æ­hµRމ8‡Ä.¾l’€·ðÖ߈´A4m7ïYšþ…sm|×6Ê^79ù~b Ek¯ê3Û7`‘¤=E]Pyã·‡äMØHåŽÇ5³àÔŽxn¢w´¯V¬^ŽËlß4®7èkŒµ’ûK¿J¸“v6úÑtÖfÏD±=¨DÚ 1Ò¶´]:=CÃpÂÃåt?rÞ%—P•íÚõe *Š×ðÅÖª–Œ¸ k-¾E©ÖÃês±DúWˆ3Ö9úŒ×Yâ­)lüYŠ {Ö>“i'ˆ7On¬ 8RIö¬[(/íõ` …üônFÚÞñ•¥Ë¥¥Ü£†P¤Æ®þð¬mø6ÊÚ] L¨ŒK%½{Qãi<b‡ ¬àq\Öƒ»=«[Ù—HIÉcÐ}+°ŸÃÒ]x|Z]Jd¸ ¹XúÔ=$5s;Á/i’òdy›ˆqü«žñ¼QêBh•¸è*’ÿixrõ€§±ÅkÛiz‡Š®ã¼Q ÷Ç\z­¸¼Äàdó ß/çW|…㺠8 Õéíi¡C¬?»VÇ ¬ŸK} îÈ¢-$nÀÑ{Ä-f?ǰãU†LÖŽ­'Á±¸DåæµsÇZd×¶‘IˆÃwcX:5Ž«¬é­dÎVÒ0vœþ–×Ü—ÀCöëˆä?3(Ú=kÐõU¼Ò§µ'ï¡zf¼‡EšM/ÄQäÂM„}k×’PnëS=%qDZå–³xsQ’Îés|®§¸õ®Æ?J¾·K›{x˜Ô-?Ä~‹ZÎÜ(ãÐ×'m»á²WÈ2Aœ‘÷‡éU£ØVgoi¡XD ‘ÚD÷ÛR”’'*"ELpB×;cãËtB.m¤Fݨõ+ [;bXž²t¥fž.¸4vŽ@†ga´wõÎé–·xròö*­…8ôïSÛiŸˆµ!sr…"$'ÓÐWks¦[Áá™í!BFpRqOšÚžç3áMBÜéÓ@àPIÞ°4Ûô³ñ¹ B1è iøOÃ÷¡–á!$ƒüTÝOÃø¥íáCåJáÃvÓº¸’d^2¸ûF«*m®ëCùôkO-†ÕŒdQ\ïŠ<+/Ù –Í ˜”+×±4MC\´v´´Wl‘…+Ò–Tm|@˜-µ¬'ïn-ŸLS¼ "ÿgLŽçñ¨õÿÞË¢%Å˼—QÌ£ÐÖg†ü=©ÝÏœÉonÃæmÛsFœ¡­ÎÇÄÁáÛ™à”nÇnƒ=k˜ð–¡ÚÜZ¹˜Áþ!]|ÞŽ-æÅÛx',Û‰5ÄxkóÜjŒnÖøu?.ê˜ÚÃi˜ö×b×][•*Ë»zˆd¿Ô ‚&+ÈGþè5ÆjºçÄÒYÛÄNöùv¯cý+­Ö­ukm&ÏM´RÛ†AÚªVÜV0îî­4Xžž¢K–I!]Äô/ <Óh–ò\‚$* g®kCð…„kqp¾uɲÝu(z"ŒÓ*'+”‘eY@õÍ*òpj,vâ†b§­@ Ï&£ š…<׌ԛC¸È b+äzýÌÓp3ŠS…˜³šrâ˜È¥ŒóÖ¤‚y¡°i@ç ThÛ½¨&Þp(PCâ€qŠWp¸8 L>ñÁ ¯ÀªA§mP!¥0sœÓ]›# c»$ñR v\Ö¢•ÆÜ’qȨ]Kàz@Y#€Ù¥àã&£l(ì)åX)ÀŒb×>ÔÜäÓ·gŠ  c´ÉÏÍíN ŽÃ¥cš\‚ 1ØT,Fx¯9²S6¹`ÊIÏ¥z,Ͷ9°Sü«Î,-纾)!Žyô­ K$’u¯´c|…If‘ke‹îî 1ïRX Äq“Ë,¥IÜR_Hïâ9ØÂ@÷}D«2j¨’(-UBúñíVm4K¥‚k‰’¦3ÜçúU}pMm¬ ™yá“=oZëCRÓ®Tǵ㈖¿-´u9Í*ÖææI–ݸv>‡Ò­xr)ŽªÞ[aUNï~¦ð¶3vOdÏ \Ç© l5HAïïM°3¦¶¹¸Õ$€Ó9ËuÅuš5µÍ¦ž±\u*=`Ù\$¾%iä!C3c=½+±ŠHæMñ6å.=ªeØks“Ղ꺡··T ;¤õÇùâªéWiú’Á.B±ÀûÖŽ„Ѷ±x„m.H¾3PøŠ­k"rX ýA§~€I¬jÓyÍik¿ÌRw_JÏŸQûV†"”î™d1ô¤e‘5Éb„ò@ǯ5{XÓÓOÑâˆX°,ǿ얂).µâ-&Þi¸hò û•Nyn®í#'˜¢~÷Zj(WgC¯¨:QlðXïRè G¥[ò²äƒßšÏ½I…a3Î'>õ›ui{kkmte%J¸þj-¥‡}NÙséVÚEQƒŽ•ÌÛë$hÆæQ¹ÐíÇ©¬KËÍOzË4’ ~WÓ”BçmÌŽHnªÔOµ0zÖn‰3Od’ȸb0EQÔõãc©$;ŒÞüÒ°îmȤƒïNFcÖ²u]v䈆‘À(=½ilõ«w°72¸8#Þ‹0¹¨2gç ¾aó8¬ý7U‚ü»©Â©ÁÍO ä73:BÛŠõÅ+á.¯mkr°·Ï#a{U¿–@듆šán$›JÖä™ãÝóg¸5Ôéš­½úb@*i¸ÛQ&I§é0iÎÌŒYää±ëS_jv–XY¦ Oj•Ô°Êž­r—þ¹òd¹ó÷I+ÎqB×pg]o,sF­7B)<ûu¸ò·'™éÞ¸WžÁÞ&Ãp«èiš”zœWkyp¥]ˆ+Š95ÎîEϰ&•9ü+3G¹½¸µc{ÞI®râêæ]u"3»*ËÓw½·ô;ØÛŸqÒœZ=ø%3ïT/^xtÙd‡j© × ÓݼlûS™`®îGëIFàÙ黆ÀOJkAEfi3Mw¥ÂóŸi'Ü ¾.F¸Ž“cçHåŒ$ŠœžTÑqÚ¨™ ãoPjÂÌqƒ×]Œ|¶ñÉ&ö‰û´ÝÆ98íXšßˆR°º<ÇŒné\ºjz¶­p#Žà«€XòÕ(¶+¤zY™ÆFj9­-ïfTaÊ“ë^në¯G6Ònwûgº{CPÒ¼7ÒàÜnÃgÐô¥Ém‚äú–›>§} »+ÇgÎïS]6ËG *€ö®;úÕþ§~Ziÿtƒ”¦»?0à1ïD•´Ô%Ž6“ ‘X6Ú¦ŸveˆvbrÝ«jIAEFÇ÷ˆz”À´Š<°Tc·i<ãfí•éI<éeœáTMQÐõáªI2¬[R6ÀoïR³Ü.\¼Ó-.¶á·‘šË×¾Ó-ºi–6ÿ,ÊUœ/ øÔú׈`°q /pz"õ¬9¤¶Út¡p¤·zìUËÛ†l 󊦭¸¢õ%@H'øqJ¡P‘°dóšKyU“hüjWuT¿J’ˆZÙ<Á2¢ 1Ûy¦ºHNO#Ò¦†pÜ’r(iQò3@¬Ëò?J™H\zUìIö«–ådÊçC[²Bf˜­¼E<0?/^*&ŸZ±ÇJUã šŠ2W޵"°9ÏZdÈúÓÔaÏ4.[Jp<ó@Å >ñíL¥ò< >Ô@‡£8çÖ¢Êg¡§‘× ¨ŒdàÒK*¸¤‘ƒ8¦ìqõ§AÐsL`T/Ò¨$ç4ð 4›A PmI¦œ®Jc ýM ƒ"€+ÉœsÅ b>SÒ¬•È÷¦˜ÂóH•œî1ŒdѸ7šFÞMyðÀG­=N)‘¨QÇ4àEh!ØÍ7¥?5(‭@¶ðDåÒ „ä>\æ’úàÛYM2òcBÃ>ÕÉøR¼¹Õ@šgu*NÓÚ©&ÕÄÙÕ%•´NÒÇjç«Új”E¬7­r‰—9<ö>µ¤#ñ¨Œ˜jWSSÓ!ÔaXäùpxaÔTPèÖ°ØKk*dR¬ýÎkDáªs 2’TBÇ€[­ °ÐÎÒ´C¦ZÝn}òH¤`tÀéUô=Ú³\Ü®&9 ?»ÿ×­älƒëš7öcÖŸ3ŽJoM>±(Œ·-¸?Öº{8ì-Ò?*‚sß&¬ð Te¹éÖ†Û †»i5ž¤·vÀ¨äìÕvÇN¹Ô.£½¿À*ÅÝë¥`¤`ïI°pWïcš|ÚŽ#[¶šËT{…ß°Uý*mFêæë@îWÌ\µÖ¼k2"†õ°õèÌšrÄŠK Ð)§p°¾Òã†Õ.¥¤uùsü"·vƒ*8隊Ò¤qžª ~U:òƒ<ƒRÞ¡mK[Õ㺜Y«…™×ªvÚÒà‘k…o¼Û¹ÅtƒI²óžSn…˜ä’»«VðÓ<‹-?y *¤ÖÂhÚ:•µÍ»,S!i…Q×¥rš-ÔzûBðÇðÖÞ‰¡}ˆ½ÄØ2ãáÍC}áÆ¸¾Y"(‘¸ùý¨M-ÍšzŠG}¥Ìc`ÊP•"¹-5|ýÖ |Ìàþ­v1A ¾œmó„HÊç׎kÃ6a¤žäýÜ•\ÒOA–B:OÊ©w'co÷ÍshÑ‘†ŒøT(°Qn·@|û‚“ëW<5¥Éck$“pòqéLñlÅ,#ˆŽ†O¥/µ újPÑ´Èo´ã$ùg9E'µT›Nx4I·‘˜çþ˜©t­cìúwÙ!LܳOÆ®êÖÒYøqa•³!p\ûšzÜF.•mqu Ìp¿– ncëŽÕkà :ê,Éþ­Tï?Z›DýÖ‰}69ùS|3pK˜IÿX¹ø¦újàÞÍ`,pŒ†õ>õ†ÚN¢2pèÀ:Ýð½ÂÇ5ͳ®Ä7=ýªŠ<¯íEÇß óÒ]€ìm¦ŽxQ—8*ó§K (ÀŒc¯½C§ÆVÂߣʙ«\-¦›$Ç;ÈÀ¹¬ú•Ðá„¢Û[¾0’?]Õ5‹ËÙUGXPå~^3ëV4­ï¤7lXä/v®¤ØG$f£f0@ô­I“cD×Eèò&â\ {ÖIƒ.P½<ÀߘªñZ½·ˆÅ¼yKÀUՉϋ¶¯ÞÏåE:î½%„ëm AŽ2Å»ƒéY’ÞØÚÀ$Š×3È2 该?ÅÎQ…6“ßš~¿·Ò­qÈ*£;} -vhhºïÚtéVÛ$YfÂõZÃÙ:É»‘œDP=ªÿ…ìÖk Ç`à5¦éÂûTû.í I¡%¨µ±Ýhz¥¾§†% ¡çÞ­Ý5ž4«ýÒ¤°Ómô˜ pä—9b{Ö‹DßÙ¨B“a¸ŠÏy} MO[½.úî\38'±Æj¿†T¶¸™çå5gD™[F¿ˆ¾×ÚXZ©áÅ‘µ¸‚ç%ˆèiÑ“sÓ£·+`f³|O m N®>ï#ëZБ°AÅeø°…ðüàòN9ük%¹g!áK«k´Üܶp1ê+­µÕmuHÛ¹NJž¢¸EMR²î ?«tRFkË,® šââ[ü³26ßâË!î);¤øŠÛV·rv#(ùÁí\æ¥â‰­PÌâÚ9>fõáU4ßNDî qޏ>Õ“s¦µ¶®ldnw„ϱ«QÄïcÒ,¼Ai« míØïÚG5ÄèPªx­bqÈãê+®Ð¼/“1¸—‘”é\œäøÜ»c?h#ŠQê3·ÕuË="HãŸæi;ÃÞ®éÖÚy‡íq§ïFâÃüñ^}ãeoíç€È1øWG¢–Ñü×A‹;!|zf‡澯â ]]·9+Šñ.¿k®XÆÉ•–6äCéUô[aâZV¾.à©9ô5wÄ~¶Ñô¥hNY¤ûÅyÅ4”X=K^Õ­4¯<· ù‡ :šÚÑüIm¬¹Ž1²Qœ+w®oÃþ´Õ´G–Fq1b«†¬)`¸Ðõ…BvÉŒéÿסÅ;‰;·q›d÷°TQÚ¹ø€ ègı»wëŠÊñ–¥%Ì–ñˆ¼°ØìI¬¨4ó«ÜCo§ÄK„óØúР­¨Û»Ðõè%†öÉfWÈ¥†&sÚ³ü5¥K£ifÞgÜå·{¥jÃp’–MÜ©ïY[] +ªª¹f} rk’½ñ´6ú«@±n‰[ÃzS×àð>èJï–Fs‘Q¤@Ú¡JÃjçŸ\EªZHO=JtnxúØÓü]%¼l·0ùœ|§¾k¬XÒá9e<jðΘ$.aç¡«\j ’W%~¦²WP–-}®™x‚?Jïìí ·+h‚¯9½g§…íôܱvbÛðzf’š¸8œÏŠ„ÇTYJa@SØÓµ;éïôh[Ê dOVojíoôë{øV)—p+ëøSgÒ-®lRÕ¢Ä1BZ‚Ç%áe» s´³yd·Ô ÌÓ5a«–RP1È@5éÛ%´+ ˆ½zŠÈÿ„nÊ=EîÜWlªmàSRNⵋzF¤ÚŒ/#@R5l.ˆzÕëèÅÅŒ‘èWQüéѪ¯Ê«…Ç3 mÍgÖåE47r:°xÛ‘Êõ·áÍ^ÇNŒ‹„"Bܰô®ÞûJ¶ÔÓ¸®jûÁ¾m&Âÿuš´SMjO-¶,^xÚÝ#ÅœE˜wj~³}5烖i“#ÖªØøâš9n¦ Šs°w®¦òÉgÒÞÜ(ÚWjåRÚ[Ìàü/­A¥Í"ÜgcAˆ«^5tº{K˜úH¤ê)úg…ÚÕÚëP`#‹æÚ?‹´°[Iâ}`ÌFÛX  ªÒ÷ºì.¤Ò<"%`Bþ=*Ÿ‚¦·{ùžváùR{ƒ×Õ_é‘_iÏfà @ÛíŠáôïßÁ­§ú<‚8˜eöíàRM4 4'‰îüO¸#eð®ËSòæðÌòFwƒ Á‹©ø.kÝDM ’œÈOU?JÖ›M]#·PÆîûP’M ­fr Œ>¸é°Ó|_8›YuÀZ„㹫 ‡v¸ÏŸº‡hxÓCÈ·ÐDJ‘‡Ç_­UÒ­¡{ÂZ•´4bIÓpm¸=bøêq.©€>èÏãV¼-áG˜¥åâá3ò¡ëÅ_ñW†.5 ˆîm8F¶þ57JCIØÔðuý´ºL0‰“ÌUÚS½jëw?`Ò¦ºTÜÈ2¢°¼5áDÒ.ÌÓo”—t³D·´7tmÁR½j%k”“±æz—sâ Wí7HZ,å‰ýzu­’ÃÐ0 £Ó–¶‘[G²%ÚžŸJµ‘ÆÓJR¸%cÄÖÆMé#˜¡Àä–S-­üO*o¸,µî.ñä†ïÚ¹-WÁ6Ú…À’òrÙ|-T$’³®jhº½ž§ 6¤‚‹†Rµæú¥Áÿ„šIf'ýnN}zf‹¡Zè ¬,ØÞÇ©ªï„íµ;Øîwy`}ð­i1Y´]³Öl®l$šÝ¼Á`=¹¯2ŽþñÞºíC.â`Mz~¤Úéö­o €×Þ¹¹ün÷¬ëtDLÙ+·µ8´® 3#Æ×1Ïwoå°e1îzVÕŒÑßø!­¢pÓ¤Dx«ZσâÔ „[8YcP€·B_ð÷†!Ñ#,ϾwᚎeaXómQ}RYX™Ä‹ê+¤ñf·i©hÑ­¶öù†æôöú×I©x;MÔ&a|ä•ïOÔ<-gs¥}†%¨ÁR={š|Êác‘ð–·œ-k*¾öbWjõÍEâ¸Íïˆ!†BOâ{×Ok¡XøcNyÉÜÃ7¯`Cá[‹Ùu‹õýã±òóÓ½ÖàsÞ0Ó%·û,Œ F# "ªøcÄcDr%„4mÔŽ¢½VêÖ Ûy-ç@Qv¸¥ðQÞ‰Zã6êÙÙ·’(SMY…ŸC²Òuu[_´ÂÃÐ5Zh”Æ2*(#†ÚHT*(à qœ0úVc<³Æ°Éo¯ùËSô­ k횟„­/vÇ€ã×ÞºíOB´ÖÌM9#Ë=»ŠÒ}2Ýô¶° û­›>•|û Çðþòr“[²î‚5$0õô®GQ“ÌñÎ;ÌqøõÍ'FƒHµ{{qÄî#½`?!m`Þ´ÄD_~Í´)+…Œo(X4ó“÷O_ ê2^io¢¬.K«0t×S­ølkæóà‹ ¼œÖ¦—¢Ùé0­¢2ÝÍ.e`±åšUéðο"Ü ¨%ük{ľ$°Ô´v‚Ì–žRzbº {Á֚̂}ƉûÁzýiº‚¬ô—ó¦"âaвýß §ÍÂÇ3káÙ­¼#w4Š|épËps𥓩,÷yÁI{ŠööŒƒæ¸ÍWÀ¶××þ| !æ@;ÑÁÄuö¿eªønòH „ªmeú× jQé:Ê]H¥‘¼×®XxN³ÓšÖ(FÉžæ¹…øp¢ý¥žômłޏ4FQ³@Ñ^ˆÍ~ª–9„£ ÏÖ½*Øù°Ç/#r޾õ—¥ø{K²æhÔà Ýël(ŒazVr·AŽÀ=©»ÿ‰Ÿœž”å ôÀ¤4É0If‡P1H9ïJxõ4 +Úžÿ5d9¦D ’[Ö09 Ú•ŸÀæ• ŠŠO¾  bAô¦˜ÇZj¹É8©7gŽh®ÑÍ5@_˜Ô€dj‡'8Ç ~Íø4æ €iQ±Çµ#‘‘š F}éä}ÚnἌv¨È“ΔX.Nç^gdt©¤R÷ª—(xâ‹É••Ƈj]åN;ÔBÚ@¼95h.2hÎÅ*Ðy ƒZæâšOãÚ›A FWˆEÑæHý rÞÔ•Ûs.Bú×xè’ÆÈë• ‚¡®hiÖú¼—O‡‰XWÓ=\^–%•V?Ų¼db2Y¿,U]7T:Úáu%›%?Þ÷®D°’Þ9.&¿œ—qéè*®Ÿáç·Õ$º¸`Ë’U}3M4fG†ï RO0…óWëV4ݯâ{³0\ÄÓtý IuY%pé nXºIíY÷–×z6¤©fʸþ,Ó²a²-Ü¢Eâ ¼7éTâOª\Çj¹iX¨bÝ<ÖΙ¦\Ýß Fñvt!{ž1YW‘ÝhÚÃH£«¡š u5u2ßMðû¨we,ßígùVtVþ{£þµX•;¸>•¡ªÞK?‡ISkHàôªøÂ9,WžÝòÝ)+Ø |1l&%É\}*î³,³Ï™ …óÞ{â«xRRÐI^Þ[ÜÕ]rW²ñw#80út4­y lf˦Íoª¥ l9aµ‡qëVõ»G‡Q…Ù²%¡¨ïîçMe.¥R P²jæ»:ùlJ‡¨ÑÄêGö¹d³.QIôÍmh™ž·™²È >•‡áIl¤—!³T¼¡m¬Ï .ÆþùÎ*÷ÐE½G_¹‘ØYåcˆáŸoZ±/ˆ éQJ4ÌHlú޵‡¦Ç5Ñ6q–FÛØV¦³gŸ¥Ác'y$ž¼ M-‚ìÑ“ÄC[vuÂÿkXâdVu°­¼; öö²d†3\ÖôJSä œz‡a£Q··Ó¬gž8@g?sze™¼’eycilö5Óxž]šiÝ€¹ë ,ÜéÓÎ3¹Nv5qØí.ÏQK†’ÐaAÚÄ·ܳ¨[’9®7@Ô ½×ÙfrÏìk ×Äzkýœí#—?ìÔËpDŽ™ý¥{ Ë0)UükYT1àç¹-[¡ ɈP2?Þ™«ÏkqpÓ9|©Â{ÐâÁHíã'yj92$ÈõÅsÚ³5Äóƒûµ²{UMGÄIt ¦DHÜÿµG#Ã[Õ/£ÔŒ 1Eà(^⺋0XÄ$rX($× sr÷:¤rN¡I+Ÿa]ø–½HqùwzÓqºzÜ߈“š• té†XÄ>f@\g=«ü[j—{\íßéP“e]Xß„”›Á5aÝA9úVMæ­mew ä†å@ïS6£m-‡Û7â-¹úâ‹0M¸C¸u©"”3ãJÍÓn#½·'C‘ô«±a‰ì)ÇË8BÌ#O·“ÍžØÅgBÓ,¢x÷ƒÈÜ8ª6:ü3j­i'®ÜS³ÍÉ$Ãà”3 ñëQ— ]Ù€QÔš”MІ…Ñ—¹2U\ ÇQÒ™=ÂÛÀòLpj»jÖñÞÃhÇ÷²F*¯ˆ”¾pÑýí Ÿ¥ jNñ%•üâÞ-þg'•ãŠÙ@ï\ƒQMÄ®GÌ1ÏÖ»ÍàÀHã9§%f$ÇÉ A·¿Z\ù‘†XÆîÇó©|ÀA pGÞ©(Ä×ìõCe¼,‰¼%¹5³¤ééºp†.02O©¡³ 㓚V™ãPS¸Ž½¨¾€^nryŠ•ðÃðªP»³œÕÇùciäÖ€zˆN8'“Ågê±5Æ›q®YÐS©™³»f< S6S‚zI°G)àÝ.{Y®e¸…ãä•ëŠìÜî;ŽF*##ºì})¹]Üv'Œ„gíNic$a»Ò¹oO¨XØ m¦Ø°Äu ÖGƒåžê{©ä•ÝöãqoZjW%ÈïMÜ0‚dp£¦Kw«Aà ƒÇZñ«ùoU0ÜË#0—n {׬ةKXœ€€`ûR”l‡j[Á?SÞ¥dÏ5Q\¼™$ •£‚™'¯Z‘õ3çSÔ}áT.58ôØL×/µ_SRxƒZ¶ÑíC¸ùØ‘Íy¶±}¨êÖŸlŸå¶Ýµïš¸Æâlêeøc– „tb­ZxßKºÄr3ÆýIeí\&…¢>µç(p› š¸ž ÔÚëËýÙLýàÕn1Z®ç¡G¨ÛOºŽdhV ÓŽ¿§jf w- øxⳌú?†îá]ŠlôÎ+ÀQÆúĬÜ8C¶¥EY±¶zÈRp÷XñW™27ª?–ÎF0ÑV‹…yíÍ@ƳÔ¤„¾j©4…³Ôíæ¬G&!;øã©¦#>þ>þö;{‰A˜ Â=Ýjã\Acj^V ©ë\½Žx¾#—U»`PòðÝAâ°œÖn™§C¥YGm üƒ©õ=ÍYyJIžžÇ½CßBºÜê¶Ö“šâ$oBÁjÜ/ñ VèUº×ø¾I¿á$›sg8ÇÓµz‡Dvš¬g¼±×¹«q²¹7/Ço$Sî/˜ÏE©œe ü¨n%$ øÔ…ñéHX‰I$Ö¯!2ÜñYjVrÝ"¸ŒËž‡j׈×°ü ‚1É5#ÅžG¥ ‚E+1@íb8Áäš ýéAÏAG1‘žôæ•A>ô¨ÿQJăŒP!¤€ù#4ì ãŠSŒýhåz@7…$ÒnÎpiõ4*Š`)?^8¥*@ïLÛž(N:ZFBÄô¥+ŠœP› €FM+qFàG5­´¯4V ~•q;s!æ¦Þ1ŒgŠÅˆÍwíHìËHĨçšbÀÀ3‚KŸ¤ž)Í;9SBñœR¨<äÖ‚»SzRÒ@ vÚ ¬ÍBÖÒI#»»˜ˆâ[‚}~µ&±ýŸbò€ ðêkŠºšæîÝ®.%8 ŽÜúUÆ$³«(ÓI#Íp?Ýâ¯Ûj–—ØÌ ÇJæ,tx5IÅÊ’ ìM]Ò4,nelÈE6jtj៧ò¤–(å*]Pí9\ÔQ¯žç­!%ä8íÍ@ÉÁ`~gµA=´%T Èr¤öÍ$’¶6ÍH»Œ}>a@ÞYA}‚eÊdÊ©Þh±½‚YÄÞ\Aƒ=*à‘‹áª_0,lHÎ=@e­¬v,Q Z£©é ¨^Á,‡ !”/Z¿Ûз¥;ÌR&•ØìdjZ9¾¿µù@†5!ÏòÅVÖtCuq[ö{ 胂r)®vO™ŠÇ)u¡–¾‚PùKóÞ‰mcŸÄpÀËÀúÞºÂFÀ3ÁëYPiâ=bk£Œ:€)© Æ’a@0è;RHÆÈGsøÓ· Ÿ¥;†MÊHáâëC½– äóòðqЊÓÑôÙ.ä’öçƒ&vçÞº)m¡’Eg… ÊÔ»…·AéWÌMŽIs£ê³ «ïŠÒ×çžâÆÖg€Æ§$C],–\L$–$wS÷7Q³Šò&_ºqÏÒŽd1týrY…´[vì+¤‘ã„o~ ­ki ”(®«Ýé²@¯µˆàÔ¶›G-ª^fýcYR8#ÈÜÍÅiè×61À`óИÉÁõÏz¬¾ݳ>d#€:f³¡ðõó]ž-ªßíW¥…f.¿l-µ5É&ë[·w¢óÃ.~`›\ûŠ5)ŸJŠSÌ’20{âª.‹y‡e‰ˆÜX>ÁéJé ±'†bΛ;ÁÜOä+?@¶Z¤û°TdäýjÖa| ºÞ q¼d(=síYšz_ÚjL–ê|Õ%§ãO¸írÎ+M&Al70Î;ûT~ЬeWPÙsW¥hÝXÏq <3fÁ9ë”Òn®ôûÖH¢.ç+²…ª$ÔaâCUÞ«oJ±â-";_.âÝv£¤Õ™%Äñjž|©‰•÷?ʺMfø\hÅ<§€ªz;Ó»º(^ÝJÞµÚÇ Å[è+ D“CVèZb~c·¥lÞÙM†à$ƒ½‡ 5WÃú„7 &WèÞ”-‚Ä:­¬öÑÁÎmùWÐÔóYÝ9L¿¸QÛ5/‰œI5»§*T‘ô5£pÛ|˜=€ýi]Ø:ðh¸>qßû‘Œ¯rj׊u líÖ(‚ç–¨|q[¼#k1#éVü[n¿Ù^g•ƒð©ÖÇ)“uqh×jA\ûÜñÖ—DµšãRGS´DC9ôºHO†äù¶²+íš«á5IEäDòËÁèÅdV¾Ô§ÕïžÚ ] äzâŸá{¹ážH-`EcÅ KÈ2˜òû½kÐôÝ*ÒÆÓ÷$3 0ïIÙÁOuzu‡3ý 1ÚQŽÂº½>Kù´;¡¨‡Ýµ±¹yÆ+*Ò(?á1pí…V,¹îk²Ôþǘ€2¨qùR—A£Ï´‰îà†ílá.Ä[Ò¯é^(¹ŠE¶½%œn=E'„¥Vº¸ŒànÓü]¥¥»Çw €ÀzÓ{Ø-¥ÎÝîá·´»aÎá^{­j÷7—Âh‹ˆ#l¡í‘Vuk©ßÃ68b†Ö¸­ 4ë­ %òÙŸ*AêMJV ܳáß.¡G Äȼjçõ/ÞT˜NØãm›;7Ö©D¤øœC8ó6~—Y…Är")rõÍRЏºŸ‹¤K(£³lLàoîûVö®ZÀ3¶.#¾?`ø¦ÂÒÇG·ÀŠÌܼò+KÀÖ‘d¼ |îÄ1út©iZãêt¥ˆýçÖ¸‹íbçRס¶³$2 •ïëšÑñF´öè4»RZiN _᫺ŒºmšÃ77HO_¥JVÜw_ñip„TÝpà•žõÇéÞ*¿³¸>so‰Ûs)ëøUÍ6xïÏv¹ùvƒJÞëªÞ-“8ëõ®Ó\ÖÓB²M¿4²)Ú= qzÈ?ð–?cç ¿ãrÂöÙÉãÊàS²m ö2¿·5X®–åç“,w`ô"½?CÔäÔ´¸æe œ­qÞвñ^Þ:BˆÇSZô8m"/LTÎÃGüCŸR†>TRsë“ý)·¦3àhp<=j_ˆs-Ü7,rŒ¥µsk©‡ÐΟ ù•ái^(Mêkøÿâc*ç»ë^‘b`HãÒ¸OhòE"ßÊ0¬§`®ñ® ¶@òJ‰ŸV¬æ®Æˆ5èüÍíWÝ·ò¯(Ñç¾·šå¬P³•*võÔW¥k·Ñ¶‰u$R†VB»ƒqšâü¡õiIl ½?pÒ,$õ!Óiq‚§v0}ÅbÞÉö’Ê óÂã·Ñøø Ñ"Uê%éÅt2§†ç»‡Â7/j¹‘KíX¥©?ˆÐÇ+´²°7pÕÒx:C‡%wl)fÇÓ…á #ñj󅱞´w‡}¯ëË¡é«+.雄¦¸;¹¼G¬¢_3ÊcòûV—Äg%í2IPþµµà›è®48mÉl@©JVÀóÝjÖæÖýîS$ΪO·µjk†³öut’ÞÙ@Úÿ‹ÑG‰¤òÜ6ìW¡EeÖ†JÇ•ïrZrz&4ŒOø†]C6w$#‘½ESñ޽}6©ý•m.ÄÈV ÜžÕ‘áUkˆ×±eª:Ôò?‰.d ±Ä›wzSIs ¡QZçN¾$¹Y¢=Cwí¾¾—QÐ"žeøÁúŠå4? é…êêqu+(bKp3]ÍŸ•k *Ž•hq.(#½!‘MFç>ôòÅÜÕ‘`ŽAÆ{SŽ Ž”™¤U!Éɦ"@ÁHâ‘òÇ"‘p϶Îý PoZLÓ™Kt¤Ú¶h¥sGJrÇ„f€ áˆö4Öl“ƒŠVp})„ æ€AaƒNÀWR±Ê Q@&€ë»88¨ÚÆæ©w†ç¸V9" úT Ò;„àR$Ð1Àg9éÞ•àJž+c#øGcFõ <S[=ªB:S:Õˆ@iÒô¤"€9Ï“öqÓÌüc\27†-Ôýñ)çéšè¼MlgÒ˜¯T!ÿƸøæØ­–Ò[ÌôÍk‰gMá”S¥œõ2=±]‘"¤vÂɬ­Áì,Œr8,çv¿j‹_?±å *pÁH Ï&¥«°L͸ñ‹ðbOÝC6î£Ö´n|A ´ñD©¼É‚Äv¥`éú|ºœpÆ"òá&I=~”ýrÌEª[à Uß8ª²ØV{ š­¹Ôc´-ûÃùV.ïà±€K3cÛ¹¬K_¯Rg˜².®îùö¬mNæKÛé]ÛåF!µ.]Gv‘ØÅy ÌxÏîÈ$ŸJz]ÁqjφQÔ†®HEuo¡Ê$Uœ`{wüê g»].ãʇƒ)õúQÈ;xöÉ(zŽ)x7NµÇX^\ÃaÞ"vi3²L”À­s¥Ú=×Û$ˆodöâ²`…µTÜãý!µG®?úõ½¨\AmbÒL?wüC×4iòA5¤onFä|´îÄHñ+-”yeH#ÔzV"øVÈ_–˘òZÝsûÌgµ‚¸9¤¤Á£+YÐø·HŠ'–pO¶* KJ¸þÃŽÆÔ—*Ã9ôÐäo$ž1H$@BŸâP¥'=ƒ”ò &ÿTÓî6 bØÙï^³¢Éxúlm}?©£M>Ñ&3%¼k)9,«É­=N3JRLj%-cL·ÕlžÚqà ƒýÓë^[«xWPÓ]›a’ rk×å ¶ãÐv¦"‰,¿)è(Œì7xªêÚœ­Ôª©Â¯¥LeÕu¹’'y&`@Ç8êóèúsNek(·ã©Nµ5µ´xમھtO)ÎËá釄¿³£oß½³ë×Âévzƒk Ré*± ÃøkÙ ÎNëXº¬–z5”÷i ,¯Ôެ{ ˜Ë ÚG=âI¤¶ÒàÒdœÜÝJÀ±=¹â·´ Ûx|ZÅ/—+Yûî5á%¯'þØ¿žBv©è+³W1Ô©ëJLã—Öwºf¸Ñvœ0`é&ºC}>‡e+.UFeÇ®+­—M³’ì^¼g¥Z™hv:‚„r)óì>Sƒð$zŠÌùZí<7¯µ`jÀ7‰æ€n?­zäQưlB€úWšê™ñ¸Wäi”ûiÅÝÜM[C ñ‡äÕ,bheýìK÷OC\n‰¦êsß´vlñ•8wô¯[ˆ@OÖ’+mK˜bEÜI8]¹4”쬷0µ ­î±wi“,®[«àßCÕtíDD‰ U£Î>µìÁ@ cš%.Y€$€))¤ršì7-àö†c¾à*–õëXþ³º¶½’îH‰—nMz̶Öç>µ@¹\m¹ô°ùO9—O»Ô<_)±“%Êô÷®Åz%åî• BÛÞ3—ø¸ë]Tkrgg­G<щ.1žqÞ‡'¸’GàÝ3P·²¹ûBb,e»‘\ìvÌšûÍoné?˜[;v^¬¬ù*HáÂ0Þ´ùجsÚæ‚ú¶Œ±ÈC^F™ ïŠât]´Ô—ȆDe û£ë2Çó¨ëNŽ1Õ=é)´7y7‰|9}ª$çóŽCè}ëj8¯<5£½ÍÝÑvdÙG8ס4 œ²äÅqóèwúÞ·»PM–p·Èˆ÷ªæºÔ”о ðü‘»êw$of0zŒúÖ‹|%r·Rê¿:9˼ŠôCGáéN~ï6žµ*n÷*ÊÖð©¡Ónl¼?s±åÛæ|Ýx©ü3c%½¤6@ðžƒÖ›hZxYÕ…ÒHAf!›=ê¤VæÓÄæ8þãBûšŠñgеf–"&%—Ñìk_L¶’êáµK¶F»_A@Ì»kHnüG<,£`,O¾ -¤iâI#N<àSôVk÷Ržûæj6àÅ®ÌÛL›Ù²Ã·=h¸‡Y@­â)¾Oõl̾i—S-Ö³r%'h{ÓôÛõ:ü²tó›hüM4Ⱥoˆ¥–uÌeŽ2¾½èên¬$³Ñö³r\6¿APm»:e;mƒŽäšÙ×çŠ]-¹da‚=ª¬üxR d#?™¦¶χŒË`w ÇŸ“úÕýRûɱ1Äs4£jךƒDxãÐÃÉ@Iöô¤Òmòéµ+ŒÜ¯ ìj^ãFf§<ö:tDäȤ±¬yaž_1]Q¹ÖºDzKw#®*Ä1¯Ø­dWã Û¥Tl+  ÌÚ}„×säBØ=jµÎ­|×Þ¾õ…ÏÊ»¸ UË݃Ãýpp?S´{95;xZçÚ/•wÅ-7}W\x-íÚ o‘CsÚžþ#Ž 6v ÐúÕoÅil@`ü*¦¥¦Ci£Ã2ŒLH,wuÈéI$=M„Öḱûd£i ´¨ïW´ûè/­KÃô õ®RÛLy´).Låyؽ¾µcÃÒýžÞêr~E\cÔÐâ‚ìè¯5H´äC.~sŒµlIÕ¢4lnAÉj7–-~͹˜nÚ;-Xðú]›)dþëi»¿Š•´¸]š—‚ b±ùøhØø­8àŽÊÝ!Bï\6Š.¿¶FÙpIqžkSÅ—sùÐD¤¬asÝM:Ø:3‘ Éüi[+0'kŒ¹Õî΋z Yÿ¼qÚµt}Y¿²Ý®•ˆrǸ¤âÒõ: wa©Tí*Ǫœ×«ß^ïš"ñÛÆØù­túEÙ¿´ù ¬|Pãd;šÓÉÑÇ¢$68È5™­êGLµV27 \ňî­ï¼Û–wCœƒü9ô¤¢ ì*ò~÷ S89éT¤ÕßM{ìeväZÍÓÐÏû²»³ê &™JH³“$yÍ9& „-øzTZ­Í’Ë £hnIíŠd¶7³¼pÊHúŽß…+ å³u‡ØG^õ« àB»¸µ‡¨j6–—PÀó ”·MÕ¡{{oi§ ®(ÇôÂèÓÖXI*%ÛÁêj®wÝ¡š)w)ý*3¨ÚÉt`Ž`Ò.7.îh°\¾Ò8ëRÆKGɬËÍ^ÆÚu·iãY_åµ_³;£ÝŸ”r­õ$*U3ŸÎ£·–à:ͼñ6™k5À¿—çX×¾,³¶­¹ó·œtr²¹‘Ù Dcž” ¹cœñYö÷)sj’£nV«BhA\òy©°\:È:`çó¥Y|¢Û»Œj¥up,­Ì÷S,O¥E¤êqkv*©P·´Yîè^IŽY‡j°|§Eæ†Ì—‚FSYvþ,Ó®ïšÖ"FNÏCBWÔ/c¢ 2=ëRñ=¾2Å wv<"Ö’²Aö~NOjÉf™¬jK~Ž&x±Ž=j’Í 5˜Î–/dRˆWq ÔTzF±µ Ýi¸»6¦¶¡¨Å§ÙK4˜Â@þñ¬_ ]Ë­ÝMs=º.#m¼Ö~¯¯éS^‹IÁx•¾b:fºkI­--Ñ¢!a E² Ë›‚¾<ãò«(å‰nþž•ÄÏã[/^8áv@OÎ=j–¡ãÉ7…±LìÔr6.cÐR \`þt¯(R3ÎkLÖ£ÔtÑt~T ó’¾kžºñÈŽø­Ã@7ž¤JJ,nHçpÁÏZƒZ¿‡M±{™1ò‚F{ÔZmÜWÑÅqÍ|D%mm×yÚÌx¢1»°îK 7þ%ÒÚî+·‚FÎÄ_”`v5ƒëz5êG$Ò†Ô-»p­¯ _‹o É3ž"f5›ãÔuM—&Y± W®Ä]¥„߸O3ï‘ózU¦aÈão\Šá|Yâ1e XÛÿ¬‘~vÂ?Æ¢ÐbªÇ£RµÐ&‘×<‹Ôö¨¤:+ÄÞ&ƒF…1$Íü5‡‰í[D:”ØLdõ"’‹°ù•ÎŽ1½ªÒEŸ¼x®Eñ°ÔuF‚q07ú¿þ½wpâXÕטïC‹[‚’dÊB¡Td–#;Õ€€Œ nÐE!è9Š•‚“Ö˜$…â“oËžôz°${P˃“P‰I;Te©þ\ŒrdÚaH UÕFI¦ù±ääõS8=MFÛ·‚0qÚ€%IÆžAÈ5Ö•Ù‡j•Ï"£g @4»‹HéQ³n< `J@Á8æ£rŒiÊÜtÅ.A;‰é@eBŸZ†%¹^žôÜrhV¤/s@`Ë…ô¨ö¶yäPväòjeQœJŒáN)VP§$RÏ ’N0:Ò+”äg¨¤x–XJ7CNŠ$‚E• ‡IúSzTƒ‘P°4$SÆ1šÇ×µ tûÐ%‘‚‚W ªðkètµÈ?z¿)_SUÊÁ³}ˆéUË3f©éz¬Z•»Ë·cF~`[¥Im{ änи`¤‚OjË[ð€úi‚æ7“ËÜ7ã;{Õ{¹ÉÓf{c½ÕÒµÍx{Q‚ Ú;Ž$r~sïÚ® ì°Tç¿z0Mƒ`dcE(9 }ê xÉöâœq°zE0ýãH Æ)ˆ{°Ö…PIÏ\R”Ž+ \Õnm. ŠÙGïÎWÞšWmMiÐQ* Ù\ÓUFР `N‰É‰w}ìiŽi0+%”1Ĉ_ïc©üjM2ÚËy9rKך¼Ä¥y§p2âÑ­ ½{ ¹rÀÙséF¡¤A¨¼f@C'Ç¡­ 1>ƒœ÷£p8 ôçëEõRÑÌÖPÚÚü‚6ŸJ‡SÓfm&ÞÊ¿Ë#$Öîãœæž¿09§qÐèqÇb+pHisüXíôük]1F;Œ¥)P£Öœ@ùF)64ŽwŨ²[Æw€êsŽäƸÓ/¿²Òâf%PŒ!ìz½â[;¶½[ˆÕÚ<òüØ"–ÞóQÔ­›[ ¬/·n«Z!=ÆÀ¯¨xeâ´-ŽàT:¡wâÖ(‹£7 ÿ­u}ŒV‘Û¡É-îjÒ[Ç –DEÏR§™ŽOÅr–¿O@ þ$Ôž'r¶¶ˆsø[si6×Wßh•7>曨hðê3ÆÒ»…Œ(¡IÆI ž †?‰ª–7ðíÜ`êC6;g¥t7ºH›KVÏ䯤­54xâÑ嵃YFÖsÜÓº°¬Îr-Ráôi-ÑrÈ-è ixjá[N’6cò18ö5rÛF6ºLöêA’@rݨÒtF´±–9ˆKJö¨v 3'ÄnrMã¾uªrªp}ªµ®ƒ¢Å¢£}ÿQV¼QiqqqnQð» ëF— 2=^_Ú:Ž›Šs·—àõeÀ=çSëм:¤ á€@ö&™¤I.„ð\“ºEÊîã¥;«¦F‰i&§ºØË¶Ýò£©®ÒÊÒ;tXãL*ðq\ )¨i—Û!,Äà¿z»ý*[¹,ƒÞ®É²~QJa“×nd“ÄI ÃfuÚ;`ÕýkHŽâ×Î…1ŒñÞ¤ñF”n¡û\*}ìw•¦ë÷(ŸdxLÎAUËsŸzªè…Ýe›F»‚C¹#SŒûŠ¡áý>ǹóxRÓêkZ.m7B»lnšQ’£°5áíQl'™#—ÇEç#ÚŸMc©±Òmô{y®#œ)$ž Õ‹¥1Ö¯nn®þm¸U^Ã5ÐXÍy¨ØN·y9R=NErzUïö6£=µÎUXàŸ¥LA‰â éӭź‘Ñ«JïW‘|3’ÄK.ˆúsVuë¨oôè­­K,¬Çj£®Xgh‘(%Ãe`H染 Ïm¶VË–»ãÚ¯ê¶w–ú¨¸”a O¿OÊ¦ðÆ¡¦Z¦'. ûíÓó­_¦Ð‘У#0`E ëat14{;»ý&h£”GâO©4Ï y‘kgkpªÁ¨­ 8D•ÀÎ gð™áic]nQ!Àe#ù¦úS[‰á×\—-½ƒ öÍt>)Óä“NŽíî0ªöÍdøšX†¾„  »ð­êP]hÖé¨K08 Ïv .'ƒà¹67’¤ÅWiU_B;Ö—öíÑå|ón¾µÓx*h×Mš7“ç,NßlV>’U¼`¦ºÒ?*WÕ‡B޽cwcªbå÷K º»i..l|îä´ÞX@5ÌxÖGmtû¨ƒmtMÿƒ¤Hç•séÒ‡²S’ÒtIõ£<‰(Sç9ç=ê¼Zi}XXîïØÖºêöÒ]A3gÁúõ«2{˜m¼Nn‘ŒM¿;}MUØDÓ4õÓ4Զݽ}ë^ V;Gvý"Š_1ØŒy}s^“âE¾·±‘ôåÞíÃ»Šƒé^eæjuÚ]H’,Šr «Ôþ5P;Xí5<-,7S3 Ã=@gxÎyï¡GÚÅ@SèksOÕŽ¹ JçeŒ«º3ŠÃð6ȵK¢îàCG@ÐÀÔm®ìuÉ"i‰¸qÔ“Ð×g­ßÝi¾CâvP…‡©ë\Lj.ľ+’S÷R@?*é¼S êZsZ·˜"!˜/ÍÔS}gèž±Õt¸îg.ff;˜·|ÖGŠ´ø´ýQ"…v¦À@ê熼A „c»vå>„ö5ŸâmQu[Î@UQB‚zœSWæô:[¿ []h+uñ0Œ7׊Åðä‰|l–êNc]^‰â8/tß-†Ž3» ǹ_ÀnüI$°©å›;}i/0e?Y ]Yˆb|ßœûd×UáÏ [@#¼;;!ëî+–ñ\¬úË©yx\žø®ãÕ½ö›Q8Eܧµ¿*¹çš½ˆ´ÖåµSÀ“û×wwgäøbH•‰Ù?ˆ®#^¸YøÁ æ)kÊL¯ÛÂ&†`•ò§Ó“ÃÞ±¿Ó¡¹˜9rNì7gÄ8¿1Œ©úÔ^ñYA’Z<Ì[¾†‡~Q­ÍŸ_A ņš¿,(êÌ=EOm£[kº²ÝE·Šßavï#½fx í/ ÔJn€ùOE5±á¿CzñÚÍ I µx4¾Î€÷9ïˆ6& V9÷edLlS4­=CÃ’\\O"¤A¶¢ôÈjßÄyCêVу¨IϹ©lY-þÈèrÍÃÓ&ýÔ.§+¢XKUŽÓÍòÓówW¶é°ý’Ê+ub|µ>¸¯ Òï[OÔ£¹EÜÈIQï^Ù¢]Ëw¥Ã<èGPÌbiUC°¤àòiA'‚j$89â¤g‘L]¼ŒSÏÍEô&œÒ&¤ €äÇ|Ô’ žjŒg9!Î 4ÀdjI š~Õç¡"£ Cî¼áÆhIëHä C)Þ9 üÇ>” ]ß'óH§sOW?Æš7'AÖ˜NòoEr3óJ~Â9&”¯ñSÏAš@!b¤Ø !ÏSÀã&P( â†å)àƒ=(P¤Ð겸P¼qši"B9À ;SŒqÏ4ŠiÌÙª€õ Ž(§œ b25Ý?ûCNuSûÈþu÷År:=ÔnÞY\"‚Ø ß¥vº¥äV6$‡¯ =Mq:6£ÛÍ)8e#ñ&µìK'‚Úki5Q.ÖXóžÄ•7M[Ïìë—µ`ª¹iúÚ´3iº†¥ ÚÓ‚ˆ§jƒIb¾¿ u~”À³áÛ™#Ó®^lùQœƒëëT&Óf¾µ“Q…Pncûµ^ýXÓG‡/có>|“n+sE’txŠcpG¿z]@ÊðÅü’Èö“¹ Wð­»ûá¦Ú<íÎù®gF`ž$pŸuË(úVŸŠIûôÞèi5¨&e]¬’¾ÐVB6†íéZ^Ôdž¦¹9U`åAžÕ©QxnÝ„I¹¶vóÓ5%Ò}—ÂIäü­"øïž´Ý…¨KâBšŒkfØ ëî=ª¸mJÍÀÞÙªö¶2êð[Å>\1Ï|õÅMªF­¯ZÚ¶Y.TÑeqšöZí­ÍÁIÎ zíZsÜGaå}¨:“Ò¸bÝluXÚ”0t£ªN×—Ëlò…sSŠN7¡Ð¥Ì2 ž9PÆwnâ–ˆ§,nqÒ¹â¹@¹<ªGª÷ª¶’ÞÿfͰ>^w9ôrŽçU®\ËšòFqÈ޼ÔZ%ì2ÚGlK ÃêsPÚù–Ú!MCÈPz×?qgw¥¼s ®â ‘ïI!jw¼`Pà zÖ0ÖDz:]º–v@ÿj³ôíbèê^EÙÚ$à/`OJVΰrF8¡‰œ3èy¬½_PeÓ®ž6°@}Í+1Üf§®­¨e…Ì>ùÝÂæ³£¼Ôïtמ݀*ÄmUä{ЬKá™Îf•²® ]ð‘&ùæüëN„ŽÐ.u)®Ÿ¼Â%½k¨l‘L…O”qÜS¤•Pc€åY½JZïJhmÄš‰eŽrLnâ Ű”žsHm“3€4ðL޵Xƒ†üÅN£÷uï@\RA@4¯Ÿ$c“Pî#îžE3Í/:ªõ  W=H©WÐ÷ïUÜ•“½hGc7×PábTæsê½)  ¯oJI¤H'$Q ¹[‚¿­J"~ò€ÓŸŸ»Li88ô¥†@àçµBÇ»ÌÃÀ¬û]ÚJKÞK¶p;k@N¥ðJXä^An¦„Á’:/çáY¶Z-•¬í:¦é\’IíWåp‘9¢ 2réŠ."Dm¹¹ÍfjZ –¨|ÙWYzŸ­_–xã!X€MHŒdççëO`(iº5®X†æ<’ÝjõÄ\[˜¤]ÈF4£”¢ˆò)\9#à¸þÖÎ×È'åU^jÞ±¢›­.+h_+sÐ×IÇ–¹<Õix¦å¨XÊÓ4Y4ÝH£”4²Éè [Bð©³ssvA”TàWN…Dj¬zЧ½=èæb±ÍkþþÔŸÏ´dYp7çÒ«Üø4gF–ç3ƒ—cÐ×X¨ã~~lU¼)…‡s4=ÏhÞ‹M±r¸’唂ÇÔŽ•“¢xfî×TŽöW #$•ïšìmÇaOtÈ8< 9˜’8=wF»Õµ·ާîŽj+»Xîíä…°c”moj.<ËKþÎÔõÉ%¾"˜îT ­ÏZÛMohöåÆ*·%O¥x 7˜ùØBr2»¿•mi>¶ÓvÈÌf˜ dôJ·%ºCü9¦›} »\“–*{g±ªrø:Äj?jêŒsåöÉë]DhBÝ7p¦{Ö|Ì´¶Ë´~TJpj¥âˆþÓáû¥8LþU ˆ Œ÷3EèѸÚG­(·p’9ßÚ,Z{ŽD™lz»‡4è5AKœãw=ëV+X-Ñ‹À © ¨9ÏAM·q-ŒoA‡Y…"•ˆÃd0ê*]+I´Ñà[¦ Àf?xÕÓ#6BœTd`¬I4®ÇdQñ.†5Û„®¤2µE£xzÛFV%Ý7ñ¿©®‚1»o4×À‘)6ía«\§{koshÑ\ ”÷Z©èº ŽŽ$+–c»-Ô{UÒžs’ >µ`!òÈ` $Ø4s^$ðºë×Ü´þ^Ñ´ü»‰2ør¼?&›nÿë9Ü}kyŽ@ã+6÷[°Òãæ`¬IÂŽ¿•Zmì-™ øÒÆA=Ë}¢Ué•ùk«EÚƒVã=i<±q´ò.ÐkzÖxçHX:7qIߨ“E‚ØÂޏ¥I6¨ßëMÁÎ@§ — x©(™o´ì îïP‡ ûG8©U 9Ï!1$“žõ,„ñšaý)wò)ˆf~~ K‚{Õc&Ù1Žõ#Jã¥L9Ófˆ ÎiÙ ·ži$s Ò˜ˆCãŽ)ÎÇ çŠŽrRG$S™¾Dã° d¨FÓMgŠnF3ŒQhõè=3Nã¥F7Ô¤ €—w Ÿ/”&Ò‘Î9õ dh7c<â”æ`tïK }âOQJÈ@4çáQäæž*„-£½7 ÓöÑ\¡IÐ:úæÿáÆ¢$Wßp8ïô®Žâq lîp£©4È/až?Ü8b¿{ UwmÊÚ¦ö)í¡ϱcÓ.­¹§Ô/ jºÝÉEts¸ü¤ÿõ«¨Óî„Ú\s7Ê å‰®kÄè«=ºÉ*y«ô²C£AyX Žø M] ¡ªêóM$¾±½û5ñ.…9íU(ßbS;ø×½1· ç85Êx›Z¹±Ž4¶r¥òYÇ¥T¶ñeÂè’4™–à6ЭO+*çn’`f°µp%Äve ̇kü5áïÜ DCvÅÒR'±5SWÅ·‰ÞP þð7Ô´ÔlìÂúz¶Ÿ­@#ºŽéæ‚öǵmøZMbg‘¯œˆHùU—’k[×õž(àW‚ Îß¿ÿÖ®¿A¼7–ËY”GÌ(–ˆ7f„’–8éL;À85¡,¶ÐËvóR¤ÓqïÓÆxßP½…ã·… —>õ/ƒu©¯–“’Æ5Ê··¥O+µÂçY)-À4Øá* 9'Þ¹­oÄEì4ÄßtÀå‡ðý*‡‡î¼A.¥S<¾JŸÞy«Ú—.—Îënä tÇ8¬½p]ÿaÎ-óvŽ®+jN1Ï$DdöÆI¤´ãQK­Y–*ncÏ^¿Ö­ÃâíZ܀̎ ­u§‰í¡ó!³ˆ\L ’Bð+ÂKgªj7&õça¸ÓµÓÝað|@¹Wkte#œ5lé¾+´Ô$ !òœÝ IqàÝ*ëyØô+ë\&·£É£]ù{÷)å[éR”e õG¯,€Þ‚¢7 øiPô-Í`iú¡ƒÂÝ\>_iÇ©#¥pÚ»jBëíW~b´‡tgÐÒ¦1ÖÃlö#rÐ1êižtO?Ë(%zÕÅèWÚ–£áÛ’¿<ñ‚ˆÞ¼W+§jwšf¶%o2iCd-»q§Éq)ÀÒ¢O°*Va•cë^^ðø†÷]ŽfŠtv`GÍÂŒ×]â bKxm ùïå±õ©åÙ´ÚœhG&Y[Ka$ ÜV†ïíí]á— Ò6wzûWA¯Þ½–œÒÅ‚ìBŒ×#&›4šp¿V{ʦjÒ; ¹ýæOcÓéLã׊Éðþ ÓØÈ&|˜¸Éôq­Mý¨&V"Ü/lzÔòêÐëN]Ç=)ÙÜâ±nµô†d‰2ÒŒóÚ¥ŸY‚ÜE(;Œ zf‹1ÜÝŒ`“ŽqTnm!»ÊÏqž‡ú/5XlaF˜˜Œaj)µ+hL\2>6ïBM èu¶Ÿii2˜`ç¯qW „HGaLIJ#(㨤¸–y–P¥þèfëGQ’µÊ¨Ç©¡eÜNxïUòÒ'ÍnáqÞ¤F³, œàzÑa\Ÿœ`ñšÝ੨÷ãµÞ!¾ölRrªWµS‹ìuîîž¾ô‘Áq”D 8ê;kƒ-¼nË‚Ê Z›~juâ`F‡,reù©Xnþ•ôvü¨î™i©Ï•q¸VøRp䉣Çð¼×S Æ*VÆEW3 :^ºXf'|Ž9>•VÏA+ª=Äì ’YTzšèÊä …¿× Ræac˜‡B–]qüÅý¹r}sLºÓ®dñ*…“zÛxÀë]Š d$~4‚>§Óæb±Éø‘d¸Ô­¡„3g{šÓI–m Ú\±2¸{ÒµZÖ=âRˆdÆw*‚@ýisÇg¨]è·&'S·<Çëô­í.À™§ÔgR¯!bª[ 5rïHŠîú9ää¯\V‘ˆ°Úßw¦Þ‚±Ãh›ÄIÀÁ-éOÖ¼¸|E¸©*¬¬ÃÖº+}"ÒÊôÏ>þNKtÍ+h°ÜjFîP\’=)¹jÐÆñ*ý¦[ÄR©Rj¿¡ë¶¯ V²’¨¿/ [3ÛGv†2U; O·W.§#=±éIIX2µø­§Ö­ãi|·`w· ÷÷ª:ÎŒmA¹Á‹/͸þu±®øu¯d70Þ÷RÝj®ŸáëÙö¥ôÄ@‡>XmÙ¦ŸPhÔðº¼Ú2‡ÎA#>Õ“âëC‚lq‚¥¿•v6VñÛB°Æ6ªŒUõ+õZ €+Øú”õ¸[B‡ï-õ 68ßDXµ…§Û<^.t •RÇŽƒ=*ŒúM曩,³†sòºúWq¥i‘éö¥‰Ý+c{¤Õ;-P¬Î{tQx­Ã<ƒêEhø‚_GrøùWå÷¬ïéÄL—¶Ù-Æð:qY[êÚÇ—m)qò—µÒ㦼‹¡_ÿuðÖ¢Ñ-俟ìk1H˜†z]­¾‰:wÙGF\ê}kŠ’ÏPÒu-±‡ó2v°þ!M0±ÙßYÅe£Ü$(ˆ½sþ´K‰§fPX `ÖÄQê·À»ÂÊTí'Ó×/¢]ê—-Œ[Ì„+ex–Àz-–Ÿojˉ\-%òyZUÑ-òˆØþ•‰g©Z™¤¿¸_T OªÛÜ]éSAnxàŽj:Œàü-‘©H¨y)‘ø“Űù7ðÌ8iT~•Aíu=ëÌ(Q¿¼:Ø‚ÇPñ5í»ÜBcŠ5›±kN·&Á­+¿†-e”rÛN~¢¦ðí´2xrêV‰ !%}Zñ|3Å¥ÃâÚ0 ëÚ°t)µ'†[;Q˜H&L¯Ý–¨oB? ª7ˆ"Ü2¼‘žØ£\šI¼E>ó€$ °éPè]¾ª¿dqÔŸáýf“_xøóKÄzš®¢èuZ¢E¬¤t$4ªA,?€WC¥XC§Ç ÷P`Õ= IN€–Aó¹êkr5T#+ß­c'ÐÑ.£.0Û'ò¯$P—>#ÈcÍÀöÝÒ½vî#%”ÑÇþ²E!O¡5ã3Ãqc¨”9Fç®jéõ&G­¦Ÿk¤«o˜«€vô¯4ñ;ºøŠáŸ¬0>•ÙècY¾xnogƘÊå¾µã- Wõ~`p{ýh‹´¬ÅmдC«Ô/NàØÚƒ¾)¾;‚8¦´ ¸ù~^+;ÃrjëvÚ‰{†ðWŠßñ­…ÝÅ”œ7•’øíC~ðúvqÂ|p©·9üEaxb ¶êÀ€·­WÐÿ´µ *Kqm‚7çéT¼/q%ˆ’²1G¾(¶â¹Rúiˆ¤’Û!•‚ŸLšï4 ;·2%Ó|ÅþµÌø¿Fx/Mͬmo™ð¼ëV<#.°÷A_Ì6Àe¼ßéM­©GÆa#ñ•%Tµz„Ŭb ?¥p0ÓîãÖ ÃÉ.c¶+¬ð·ÚÛFQwùÂî늙l†ž¢x’x#Ò¥7X ‚O­fø;MXMv2J¤`)<_¢\]FבÊJ æ3Ò©x#í~uÄ-¼@W¡èµ4½Ð{™ž$x™]›¡n½ëÓm¤2»(\ s^c®iwZ6¤fˆ¬ÅÑ×·Ö¶´-{[Ô$Š·-°HœQ%}„tšÏŠ-t‰#ƒÙÎ ÷jø—íúsm‘z«r3\ˆ<+x—Ææ"f?/#>¾ÕÖøwF}NÉ+»²e=AI¥ÐçÑÃ.‘â³Ì3¼•'Ô—ââßÄŸ¸Cò±ô¨5mJyu¶»(ž`8Uô¢Ó]¸Óš‚Ï!-$Ôÿõ«Mзo–?0É#ò®cÇP[ÿeG˜¬ŸL×5޵8° ÀßU?ãVí¿µ|_}ž¾]¢rH]¢³å³»emA¤±Ñô|•>v×5¥â=nÖóÃñyq‚ÒàŒõLT¾4Ò¦k[U¶„ºÇÒéþXü1rg¿‘wŒõ\tÓV˜ÿÏÒ]áÑŽA÷®NóŽ&¸y™% Äöú{U‡šd-k-ë 2î*éE×([S[Ã^‹OÙ{2æí”“Ÿá&»”Î0*¯Íæ`TçvÂOV-—bÀ ðNsJÊUHÝ”Š•$Üsކ"Uû§4.( »½ ÅÂbU1Q|Ù^x53)9íLÁVQ`¸ð8Æ9ïM)Î*@­/ð~´­*àN³ÆjGÁþÀ ôÅLNÞõÒ1À}M$ƒIã43‚6L6Ô´üŒ’yÅC. c,qÈ#ŠKkr»™ŽjMÚRÁ0ëK€:Ò`DWyÇmŽsS1*ãh¦>·0¤2Î@p*7 s€A¤iGjóðx¨ÍM¸b¡5 †âšWèi㡦t ‘âX¼ÍÏ÷5VÒ%‚mPã1†VÖ¶ç&‚Hœe\`×ý©[]¼0dBünìAõ«‹ÒIJ½»íÒïAÚ]A#Ó5gWû$šmœ‘ã×hëCQÓ–ÇÃ@» çך¸²1èÐÝ>Ai ÿf© —õëxb²²dP—ÀRúÁ­àŽI9iÚG÷Hô¥Ô ŸÙ6 &wáˆ>ÕkÄ >Ë`¹È(rLx‚ØA›,û0sëÅSÔ-f‰#‘Üê éSëWbé- CƒRëäm³N€G}FöÉkœÙ%AÏ í\ö¬÷:®²öèGîò«žØ®£KºŠæÕLG!pŸ•s–Œ¿ð“\å°¤°úóIn>†P¶¸ûrÛƒ™ƒ |ÝêÌó\ì ïš2ð*åOøIÝs»æ;OÒ‘¼¶ñhÚr¥À?P)ˆv™w}.·ºRø'½€«úæ±ö\ÃfVá÷Ei\ 'š 8Ç&¹Ýõ «¦¹PXŸÆ§}Gäi蚊^¦Ç$Ê£æÏqYw—bóÄ/T‚~½jä°×Ä9ÀÉ_ÀÔ0Æ¿±zy¸4µ¸2ÿˆfVÔ­¡þàú“[3ÁhÀOp€ˆðA5ƒâ+xíµDebÆEsÛš³¬Þ²C ªü¾`lQØ ;MRÖêìÛÅœ¯B}*t»®ÞÝ& ëÔW;¦ÚÕ>ÑhØ…?ˆ¯^9JØÜ®¥"ÛœÊÛ²vôõ¥Ê;ˆî#xäÀ•8 Q¡‘×#å<Ö…cw³M?Ȭ1ƒÔ‘TµË»ˆnŒ*Å@!Á^¦—-Øï¡×FJ¡ eß¾+•¼×nM¬ õ,¼¹^I•-LjdƒN#`nC» qíG+ \gq+ž•ŸZÀ]y×IûJ€fÈB;i,u¦–Æ{›¢7£×4r°æ:häÚ1ëOYBpÄzZÀе´¾‘Òà"ºå”JÇÔµ‘.¶’«N0>ir»…ÎɦÞ–IŠ\u=kvÞh>ÐàÆ€í9ïW®5 eµ[’àÃŽ¾´YŽå©fXÊàd憸®zœ U(n¡Õ-ZKBC/=B÷CsÉ<~naº‹ æ±e`Wø…$w–ÞyƒÍÂå†î‚˜¡YùÆFzVM¾Žþ{·›™ž=$†[‡W²{ö‚9räàb®Iumnê¯2,…ºë\V…u‘ž‰“OP&ñ>EŒ}*¹I¹ß¬ŠP·PE$%|ÂsÚ¡†h¸¤E(sÅE‹/9U“õ¦)FN ŒäWâ[Û¸nü”¸u”õ­í+qÒâŽâ ýsMÆÈKsRä)Ãm€ã5b$/n õ#Q—÷9sÈõ­û8Î=©R ·,žÔÔ_+8ã5iœ(aíÚ«† XÒ0*8#­Kƒ÷”:5U•„iŸZÌÖü@úTˆ“&^‡éNÝ…±ºÀ01·9$sL±°¶³ bˆ&ã¸ãÖ³ü=©ÍªÙ‰¢ ÛˆãÚ´æ—*väÑ¨Ë Lç©àúT[™IÎr•$7£3ÀÏ­2æ&ã·AGAIo±âT/\2Ôöà$;TaGaÒ±.uË{+O:½œZ¹»¿j‘¸a Gå^¢Ÿ+b¹ÚÝÇÄo Š`ƒÜTZ~—icÇn»VL†=ÍføX:Ä ç¨‡Ž•ÑDŠƒi9¤Ý´)jQ²Ñ­,‰6Ñf᛹®^M!›Æ¨v»BX9;k»LŽÆ•v‡ÎÖ…&†Ñ:u)#•¤}¤r:ÓĨ\ŠŠÛÔœ RË¡s‘Ÿ”ŠÈºÒlZ´Kj.~ñ«ÿkòRG`v¢“íXšO‰¯<èÖåR1}hW@lÛÛœ3€@Q" « «b¥·O^ž•Ä ð1¡b†8œ²(¾;×ãžY£uwû; :gÞµüM¬Üi6‘›dÉrrÇ ¬k››I¤Ô„l¨DØ>b~µQ‹ÜM­‡i>-·ŽÊ;iáu”.UàúU#D’]qµK˜Š#1hãú÷«Ú%敬6ø­#GNH(8®†L O¥V`¶) {B¢àžÂ¢’UdxÅF×AF8¤ž8ä‘•äezR(ýßé\͇‰&¾×^Í" ÈÝߊéL«”r9†„óíB*U!°}; ò-/QÔ¥×mâ–êV>f8¯QˆÈç½9FÄÅݧ˜• Óž*HP=GqQˆCàç¥Y…$gŒR²}î>¾´ÈÕ-ÐúÔÒ¼ ÿf£p\¦ [Þ'ÒfÖ4—¶·?>AïNðÖ”Ú6’–ÒŒJI/S[Ñ¡÷8¤ ¸±Ï籠,+ÆOZ–P sÆ6"q‚8ìigËÂUH-ïHc†äv¡T¨'=éê»Wb“£n ΀€˜uâ§ 9¨ Dá²~•2’8ÅcÎp£¯zl›°0:ÓfíÚ§íçË“‘@ù¶žqQE…ùs–Îy§—'¥!PÇ*?t¨v8æª5¤™ÜÒ=*ÜŽWo|ñÍ2Vâ¹ “•U=;?ÊHJKTçœf§1åÔ`ØXö§Æ¹ž½((#±§)A@b}EG¸ù•#:Sb''­ 6x=)³ÆeÆ(œH€sÍ ’Ÿ1 dqæ`qíJö°nPÑîm$²HáÀp¹e÷ïXš FÖdw8áº÷­½+FLgbû݆3éYcÃóɪɃåÁ¸•näi¡Y4SEs4LFFEqúðÚ+s€O¹®ÂÂÆ qg·{šåuÛ;†Öw,NÁÀ*BÒ‹Ômñ¤6¶*cå& ¾·Š ÑÀË9Ú±âŒïµ^r#Éý]<3dùŽ1ì1UØCa†5ð¤’ÉÎO¾it8c}*rè Nn)¤Íÿ–6p\êFsTtýFK{ ‹t‡%Á%ƒtnï ÛÇ-ÅË:ýÅÚ=³ÅQM>)5dzrBï*~*φîdŽâá#Œ»ºçñ]ožpÜ\Å´†;‡¥ pf¾«¥…ÓV(8Øõ¬­.ÎMN€Îê##jöÏÒ» ‰!}9æb6ì$¨®W@¼¶³’s<»s‚§Ö”[°2­Œ·z}û[Dv¹m¸56¯§IjVãÍwf9f>¦–âîÜ×E¦Ï®•ò¶Pþƒâ°VKe“;ʜԺ̞_‡mPp$þB©« [•î¼Gy-ÚÈÛlÞ¢¯j^&º´6ÂÔ-9÷Ïj«¥[K«Ø­²*-´dˆšÕ×4(ÿ±ƒÆ˜’Ýrî(v½€[¿Ò¡»ˆ’O”ƒØŠ~“¯¦£¹+"®Xv®[H‚ÉÚáÜ.ÒɆà]‰§ÇeiusŒ†'o¨‡‚åÝ[Y‚ÊÜŽ²öZæµ­Mu[¾2CzdúTÚ$jú¥ÃÜ(`Fp{}*÷ˆ´ëm'Iމ%ÜInhVNÁ¹6…­YéZÛ÷„œ êy­ëF×U„ËlüãÕÎhÞ±Õ41+‚’œá¿¥ci’Ϥk¾P'ö0=ù¡«Šö:oP—2bpŒõïŠOñ 7ö)m3ÿ¥‘ƒž†²|]dÂe¼-Ãð¦*= B71ÇzgÚ¹]¾”YX:•üAx²^Ç?êúúf·4ÍSKÔ`ŽÒè~ð€€þ•ÏxŠÝaÕdÛ› ŠØÑ´X£·‡RË’ª\÷r?Zo`ÖæìÒi¾·Ø£ŽUGSZZ?ˆ-5;WuùBg;¾\Wœ­ÒêW³Ë7Üö>Õ©á}æïÏ&WŽB£ý¯þµ.UmF›:›OÙ\êÆÅl’ÇCV.õû¯~Æ.›ÀÀéÍy¤VwëbÖ q2HQX7~™®†ßÁw¿Ú*÷mÌû¹<óIÅ »6|E­&È$D‰sŒÿõªÚ/‰mÒÒ»¸Ý+1Èî2x¬OZÉ£ìÙW_”zÚ¥Ð<1ÔpÞK)#p;BöÍ;.[‹[ÿˆtÍ>AÌY¤ |ØÏ­XÓÒÜ#I¡pUœ^à×-§›ìë¡rspqåz êõoD¾Vˆºù+¼/÷³×5ÌèÖg–?0¡rõô§$OáUÓmÜ¥¼ÆiÜ ÿÂt毑d%eßî êMbišL^†ây¥ÞÀ[oaYëc7ŠRkÙ§ î+{¸TZì‹KÖìµ{p»öIÝKTZ¦§i¤‚· Yœä*õÁ®LÓ¤ []û^';ˆoJÒñ´%uç ‘"c銧qkc§Òm´ëkW¾´W™‹Zäo|Dóë*ìÇìñÉ«ÜWKám=O‡O˜Ä‰Ôäzâ$°OíÖ³å2ìãÓ4Ek¨t;Í;]¶Ôäan\*•nµÐçàŽ@ÍsÚg‡­´™žxÛxÇ=_×uhtÝ5ܱó]qõ5W Ñx‚(uHl<¢ÒÉ÷ˆè)§_±‹Xk7r$’~îk;Â:dÒI.§x M Äe¿„V‹t™-/ä¾C˜¥lý íME7`èwúŽ«m¤Z}ªFÜ; Ý~•CLñ…¦©1„ŽOá Þ¹- U³ÙÜjºô:HG›–sòV£Õm%°[ó(H˜“í\?`1ÝÁ!rw¦1èE[J7ÞGóöÇe‚™ôrŽç[£kvº»Ì Îb8ù»ý)𾽋’pLŽpu®?À–SK©Ip%!#2âÏ@j¤ñ…Øì;v@G4¹UÂîÆáñÍ€C ŠBøá}ê}ÄCYºt™AU•‰¬øzÇNÒZáKù¤¹næ´|!k4·»@˜†½æ›Šk@W4µïÅ£*M8wwªèºð×·ÄäGpN;jà=ÕÛï%ݘíÇÌIÍwÞðÁÓÌww¬Ägnâ’Ûw9˜±aãdÀXå,ÄuÅtðŸÀ÷¾[A¶ß }Ü“X¬ŠÞ<ØøuiŠŸB+sÄþµû·¶cÉxÆâ«ÐúÓvz0:Û+•¸…g…ã »%ô6Ö<¬4êÍ^{ðþòLÝZ3’ª(ôõ¨<[«Ï>¶ºd¶ÑYwÜf§“[ô&¸ñË·‰¥È°RP…è}ëÐtýJ×Q·Ò†Œÿ:æ5éW:Xû,B9IV^­õ®sÁS^Ùx¬å“ä:ŸoJ‹ØjèÕñŽç³ÔE½€bb$-Ü×Má¿ǯX í‘$Zä¼{¢ØÛ@—pDòÉ´ü^õÑ xfKë•ijÁ;ŸAM¥Ê.§Q¬ë¶º.œÒÊãwð'rj ëÛºt—&/,«"¸¦Ó.u»§ÔuÉ…­¶Ô-ÛÓšë<)5ƒØI¬(Åyþ#ëRÒHi³¦ŒÔRZCƒÅ9w´uõ¤—…ëPP ‘Í8(8&—%¨Á\f€Ê‚EÁFzÓß4РƒLÀsÚ¥ÀQPí0¸dåO}*Vp9lóHö ȨåXåºdS˜‚£œ)ˆlj‘`"€3Sœ‘ÅWS“Àã=êeÆÊ.d* 9öªá³’;T¥9æž±«'ȰOCÖ¥E­!ëH¸Œ‘š>L‘ŒTy#Š“×5°í@ÁTçÚžÇhÇ­1ry¦oeÉcHjÍ9‡ÅB¹­ €j´ŠX“V FÜqë@ˆJ•@ ëßë\~’¦ßÄRÀÜ’Ì¿•vmÎAèq,M¿ŠÉó×ùÕÄL×Õµ‘bR4ù™ŽXËR Vßì?k òq¹} íY7‘êz‰w"XÇÊ=€ªvЇÐ.H<Ç oÊjtÿÚ¦Þ;†”*IÓ5;—ö‚ߺ‰¶ôÏz|ïxÖ¶·-ÄH6FGr(qÎÝבéÅFå#“sœÇëÚ¢²§²†FûÅA5©_½åôvptGÈõ6ÍýÄðG~1LØzžÕÎ6¹5®­2É—€1R¾˜î+Jó^Šá*›üÁŸ÷E>V5àlðA8 ¬þs(.3ÍcËâ8b»TDߥhÞêpÛZ‰$9 UNhåh.XŽpLñUŽ¡7©hùß''åãšu•ì7v¦PÀ ãæùqPÛXÛÝ_ý»ÎÜq…¥@ÑóFr1ƒÏÒ³tk#o{w;tv;~‡šz_Ç.¥-¤kŸ,d·©«–ü9 à9<j[Ê«f&Ö~ÛýÅõ¢ø@>µÜ$ǹ4ɉr8óš/q¡dbYJÔØÚñÍ`§#Ú•&.û}ªÈÉ#š.ÒÑå´JɇI†æŠÜ|Ò 7½iI0$絺°´+SN±ƒL•do¼ýÍT:,Wz£ÝÌAF# î=kY€bhd…Áïš9˜ì…žÖ)¬Œ0Œ6œz À·ð³A¨‰$pÐ)Ü w®›®>”­Œ‚9ÛB“@ÎWWðä­p$µËùóÚµ4 X~òvsÓw ö­f ȸ<šsÆZElôëO™ŠÇ5â­6yŠ\FÎÀ _Z—CÓî×Jš9›oš§`ôÈ®ŠUöÏãLŒm|æ•ô°­©ÃéV7Pë‚1#l;sÈÍ%Õ…õ¶»²LŒÅ”­wM$íçÖ¥Ž$ØY—2þ‚Ÿ8ìe\iRjwð5ÉÍ´j _ï7z؆1¨P6ލ¡r]†zž,ï5-…Ž3Æ‘Ì×É.ÃäÚ½*ÚˬxU0?{ ùsÜ ë.¬¡¾O&t ¥§A Vðù1¨U^Ÿ6mO?ÐõY´›²†-Èä+/p{b½p¹Õ‡.§ Ôév2݉ÚóC¶­JDQ± 'Ó9]ŠÖ<Å-œk&Ö2Cy…3íšô8,c[O³‘•G=ø®oAohƒ½tf±ðæœïo™¸]ÝXÔž°á¯/GúL‡?NhºZ…Œÿ0Híàä‘óƒíRøWT²K´”…”±âÉ­Oi˩ڀy¡·.z}*-ðéøÀyÿ‡ÑOµMÕ‡c”ñl-²ÞŒ ×I¤‰…EÛc|Ö/yÕp‚ºÏ(MÑíÜiÉû¨KsÍm-ukˆ÷"?Ά½3NÕ4û›)%¶)û¤Ë*®Ò0=*ž·áHu e¶T†~§ÐÕÃpé!Žó$’.×ÏJ$ÓWM3Ïíouøî$8A(b}«Ñáñ ÍêZ@Þc8ûʼ æ.üs&­û’ÙØ’wrµ×i:5ž“—@»csž¦†Ó™ÃxÊìM¨¤“å}ó[þÔ­KŽÜ¸Y“+°·\óRø«ÃßÚ1‰mbjVí˜TÞðÂi‘ù÷* Ñ?ìÐÚµ‚Ìå’èã·­r>Ö!ÒnäyÙ"ã!zë<7`.<0-nW &qŸzeŸ­-îÄÓNdNUvíÉ÷ö©ºWC³ïQ›YÐîäû+Âr„ÿîk—ðö§qk3Û .%(ìô5éRÛ,Ö’À *²ãÐÖ‡á‘`vÊÈmÌGñc§?þª@Ñì×:^ºe~eŽB_ß×ó­¿]ÃãÁIw¬½Ã¶†*¿{4“Wc³4ìõ»°šç2yQ®IeÚ=±XšmÇŠµ{v1g"4Ö®—i&–Ö  ÛŠ¹§XÁ§Z¬&Ø×57@ëh„í Æ+‹ñÜÑE§-º°ÞòW¿Ö»§gîãé\þµáËm\3°ÄøÚ­éŠQzêSZWƒu+m:K–¸—`Àaï]6²ëÚÃê2ŶÖ,ˆA^O½déþÎÆòp#S¯zîm¡p¤H1áU9-Ð’<ïÆæoíĨ* zzÖöžˆ|HAd ±â?¶½uѸUåqZcFC“O¶ýØt(§Ó4shƒ—S…ðV¥Ž©"H €U×4ÿ¨‹ÄÎI;£ Nk¯Ðü5m¢& ffÉr½>•ÌxËRÓîõ³d"HÛkÊ{ i݇AÚî©kªèam·¼œ3 ¿wiÞ ŒIawlÓ‚d"†éšÖÒì´Xt¦Š)‘–Dñn¹ƒáM:aâ9&‡?fˆ°-ýìt¢ú Ç9$shº¸gŒî†MÃw|ô=Å©¬%­r¡Ëƒã[:®i¬@‹:r¿Ä>SSiz=¦• ÁmÆâzš—$ÇÊy ÝÍž³%ÀW†A!uSÚ»k}cP¼Òn§½·ò-Ö»’GjÔÕ<)iª­ôÎB —±ÅeßÊ|A¨Ç£éç€Ó7°íT䘬Tð“9š[óòÆFÕ÷ê·ŽtY¢¿{ø”˜ÜÇo ûצYÚGi¨ ÂÒ‹‹t» ¨©ïQÏ©IyáÿÇie¥ú;…á]~lŠßðöš&»ŸX8iXùKè¾´‡Á:tzÂÞ%DŒ×L›!M cåÅk $y_N«¬é±bac«{@ñ+]èò¶§ .Þ8-×j¯ZÂUB¨b¦Œ‡äö©n㵉ÖOCɦä™9¨”áÿ•ÊZfíE€œ74㌃Q&wóߊ/2€z–Bw¨àBñQ;pZWl}}¨Fp8Æ*³’Çþ4ã&î´ß(‰3ØŽ(@ I+¾Î:SÊ’ƒš`¥ C•±½HW÷yõÝ»qR  ¥ ‡zR–ÙÀ¤Ppq@{P†Ý‘LÛÁépq‘M Gl¬x¡S “JÒã±n%8ÀU‹†è´H£4ôÎÃL1»g€áÛµ4ž 8ÄjfÞkBFM#pE;ozNZ…º’ âõ¥Xµ»ß#Ë^›°$qZŒÏ«H~ìeÀcüëW[ÓÐéÐÜ[r±€;Н­h«læ&Êç,¾™©ìî¿â™—ÍË {ÕßK¡[RšiðÏ¡•e%¾n)¶Ö }`ó;’c(ú ÒÛjL4™m Í´’G`{Ôº^§®4Nq’ ÷Ïaô¢ì $¥\ûQYxõÍhému‰q,<§w#Ö›q`öš˜ç+†+ìzUÛÃ.þr¬Oµ ,söâîY™á2NXй-ÜÑk $ŒG–Ãǧÿ^´<3oÛŽ~aÇáUµÁñž]ãBñØšÔÑuyn&Kk“¸“…nôåÂLêÇ™øÖ‘HózŽžõa—äUÏ®wTñÓnÌúE±>•)\w:vRKqÅL20Oñu¬«MFJÕ%C‚O+èj}CU‡L·30®UV¥ml;“ªìŸ>ôøçýþ0N+'H×mµ$ÈØÊ2C7j[MfÆæùá…°À‘_¥asid8ëš`~N}ÏÖ©ZßA%ó[$ È¼;V¹®:êImnøXØoaëéBØ\ꢺAŽ1Ó:îÔ\ÚÏr¾bã?Z§m=›à¤Ñ–#$æ§´Õ­®§kh¦*r@¢ÍÌÍ*ÊM'”:Æ?­mÄÂN¾•RX9Å:kˆà û‚ êMƒeÏ´Ž:NÄŸ*œ÷5W̆tFR:†§@QC~a@¯,-ç¸W˜xùU-À©ca¼g×èTÉ3néƒR˜Ì, tî}h –^ÜIR0ÎiÑÆcqƒÞÀŽG<¡É¿ÓuHîsž,ÑPx¥·ÆåÊ·ÐÖ¦™‚;(R>•`a÷dž2jEh €[ÜÓoKa$îo¥N0Ø>õLá_¦A§ùÅFÒqž”²ÑÆzô¤àÉ‘U£cŸ¼p}i¹%Ù} -’¦@1×½J~o”b©dàõQÁ¢ë1v`­*å‡R ç<œ¯k õ¤¶²€U—§õ«¿›RL’FÒ¸ßëW6 , µÛ‚þ¢šZ‰èfÝø"î)™í猯bÍÈÍhéž›(úŒþr‘âÃ5WÚճå.çq3Ÿ¼ÍÅvˆwÛ¿2ž„UIÉ XpQáÚ¥r¨Š1œžµWçzñO2Ýãx#Žõй"¶âxÀ^j¹ & M(6rp;æ ’<ÌX ”ÄjQbÈæ•¶˜AµRF"%*sSD‘œäŠ@Hc“ïŠy*ïžÕN]Á2½})ŽàÂp ;S@Ù¥>[{sNÞ<³ÜDzՠ¹Ã»ž3†µ\¶@`íÆ3“N¹hÌÇAŽ´Õqëžµ˜²±U ‚;TQáA<íÈÁ©e§¡fRy ‘UÓÌhÎGµ8bÞíLÉœuÍÐ-ð§’N?Z¹%Á3Ò©Û0ó6ç'ùU°Þ[ìs‚pVÌýoZ°Ò‘VâOÞ1áWæc\UÒi>%Õš8„ð\7 íàýjYMm­ý±X•“B+_“ÙeLVÒ—]Ò;'ö5ªVW3Öå[o:\ž÷÷x ¼ý+³²²†Æ5†E@ÀϽexƒÄQi!³tòr~¼Ö¤ÂeŒî²‚ê›¶UÖÅô8}½ªU*}j«ˆm 3ÎÁIéYÖzÝ–¢XYÌqS¨]W±yèéÐ0 ãÞ¨hþ¶Ò›`w1ù˜·-Eιi ÜVo08ùsO—Wµ²tYîcMäc-ëOP¹® :ŒS¼ÀÛU&œJêCeàŠl²”1Tçq¥a¦It¨NF3Ú•cýÞ}«ÿ„ŸK¹¿q\æNB~µjûÄv:Dió>ó‚@Z,ÂèÙLýáÀ}ê)¥á²3šÏ“ĺmµ¢O-ÈU‘w îi"¼¶Ö#ó­f ƒ¯ÿª‡$Ѧ’éR«MC0B89榶"\º´ ]l bØõ^jhÉC–ÆM9# [úæä‚H9$PHá’â&&É4¡v6)HÇ­$«æIøRˆ|°MJp¤{ÐÀž†‘Éæ¦Ü0݃ÍH@ õ CÊ})ÈFO4ŒÜd T}9 vÂzz 7#¥=àŒ Ò`9XdñMp{w§Èö¨Kœ±=¨ ÛQ°8&—Íiyí@†g¹)䂇¯•© ó@ÇB 1Í)Îx8¡/jV`ÜŽ´çäòiG4I¤-ƒŠ²@Ó\O>µóŠ`RZªOo’,%*OcW&²5M^ßNtI&Cȇ­4 ÐbqÓUmå_'¥S—Z´‚h¢-Ÿ1C=JžææQd•ÑÊOz,À‘Ø“š]ÀœŽ=i¡•ÑX=éFèØü¬Œ}w¢Ã!Ž  €„¤ “XW:¥ÔzÊ[&Í…€/\Z¸›±O[Š÷í®‘¢“ÇC[m‚ÛX$ù·ÍŸSZLILõ9èj «¨­ 2È~QTÛz ó+Úi6Öi(A»ÌÈ`Þ‡µT‡ÃðÇ{æ1&0ITô¤OÀÁÄ‘¸ÛÊûÕ›f+é4GVUÝ͆‚êÖŸm²1.C§Ì¸öíT´6xmçIÉ *íU­Î©æ&2G'µÐ,s^r× !g…»|¤àÓ5Kã×€–y0êÞÿýjëó÷–õÛdŽ1KQÇ(P3œá}i©G¢ZM,—«ØQ½ =ª; ©´]E”¡a÷Jú×h¶°ÛG²3œ_ZŒÃ¸y!F•z1^GÒŽ`±Èê—ÓIªÅq4`…>•>·4W–]murv}+jæÂÚâàÜÊ ”ú+.Þ!ªêÛ‚‘màv4&· ¿‘íü7o‘òì¼Ô¾Ô-’ÜÛÈÁX7÷ÏJÖÖmïK6ñ»lU-@ŽËl÷4ÜEÿëÑtÐ4o ‘ß ®Xdë”Ç ¼ý1]îÌîRON£­qº×‡æŽ6Ü<‹+uïøÑ‹Ú̱Ïn¶É‰&€ vÏSY~ ¶[T³…‡Ì‘üØïŠÖÑ49-¦ûMÉfÞ¥SñTSK"s”qÞšzØDšÄj¾µÚ¡yRqß"¤Ì~ÝÚvqêO9¨5ìÇ¢XÀÇ àTÚä–2G9u‚D(Š}Oµ—ÃIiÛJd;ÿZÆÕíņ¸E¾G!“ØšvŸ©M£^¼.„Ÿ‚½þ¢¯Çe6½¬}³iKtÁþ,Q°L$Éäãšç¼IghÉæJâ9?‡[ð®‘UÕÀŒ=+™ñy,Ò]y»×)Üj˜î;èTðH—-)\©ù=~µÏßO<÷Ò´î]ƒ3Ú¶<1¨É𵕳€…±¬É—ì:³5ÔE‚9ÊŸ—?þºµ¸º‘q<ÆV!*TžæªXÁ"ëf‰VÜSwuÔéšÕµÈaU£BJmèsº]ägÄŸh”…GcÉíšI¶ }A¹·¾šWœìÚB²ÿ=ëš¿µhuIm™÷È_‡rkÒ ¿¶žiÝ·l¾:~}+Ï/nÖmuîv(”>†ˆ½AØßÓ|=%½¬ÎÓ~ýÓj‘ü9¬="k›]aVf$ ÏO­w‚âÙìšá]6ÜpÕÄhSF¹«Ú&Šúú$×sá"G ¦’KPÝ‘kZííÂÀQž(Ù㹩dñ-äš4Q² $»z~5/-#µKHÐmÚ¤ {V¯… I<>ªè3ÿ…--p¶¡áMBúöÞUºÞÊ„cß5×Û. Új¼0F–¡!P«è­A‘ÝÆ1Y½JG âýzæΟlÆ0¸,GSšçRïYŠÉ¤Yn¹Ï5{ÆpyzábÖÃÛµt”{<6œ¯–»kMB¶§=áõ 5’Ü(ÿ®nØÿ·«j÷zûéÖ2•ˆg8o½Žµ¡à'_ìûôæÎqøW+o4Ðk. mŽîP1^™§Ô“SÂڵݮ­£¹xݶàÿ õ§x^½ì‰ ÏÂÛ^œw®¿Eðìt+,Š“\’Xɶ¸_ÄÄS€1¼†¤¬Ù[:lj®çÓcX|Äo”|¤švâÛ›}.X¥\Ïÿ,ÈùŽ=êÞ»OF6Ž«úÔ>‹0\Ë€v°ãKNP¶¥-ÄÉâÄòÈé3ìt=³éVü_¬ê0k¡gE@ x¬í;øÑxÍÁ ~5oDZ4Zämœ†ŒÖ—0õZæ]%3bª+“duÏê××7nëº,d·÷}«NþØIàõŸ›ìà“é€+À’Æ·sÅ#…AôtbFG‰~ÜÚÛӇo¸»º/jè<-¤jv×ñÞ\9ª’2Û·qU|wå&¿o·* ßwV2[MdžT ƒù7 ìŽûV¹ñˆ>ÀÓm 7ÍTÑ-/mEªï/$€ «óÆ“Ò!¡³§Y-–›¹%Œc†n¦¸Oë3Qt¸ªÈnI=«Ð%2ISìû×”xÎ  ×ÝßïHŠr‚qÍL5c~Cn4‘6¹:Y/€ cøO¹«>3µš'´’wÌ­ÖÇBGzÝðÿˆ4Xmà‚”‡ãO¥&{kvÏj9☇“·h`5À#<žÔð Žzõ`pqRÄ­FäAN¨48朤p}ª6b¥}êLó@(9'×SŒÒ®?:7 øÍ ©©À …‡jd€qõ¥åS½ "2TZpb¼Ž”ËpE(R£À“Ì, TLÁy4ô)ô¨gBÉ@9¦ž¢Ÿh+VH„ƒQµ< B¦Ãaþõrž-´lEr¹Û·cCÔW]° ÕƒâKÈmì^Ã<˜ žžõQÜLç-´¯¶éR]‰‰’,€§ØS¡¶»Õ,Œß-°Â/sþEK¤jÙéw8&GÉ/¨§øzòxî–W À~}=*ÝÉЛJŸf‡3¿- ;Czž‚²m/.tëÒ[ªžù«ˆï$ì\Qì)u˜ZúÆãoÞPîO~i ÑÕu‡¶ÛPæF@ßLÖ#^™õk‰aRÐãÒ´§Â ²F{Šf»i¨ÚáÄØGך:Ô—/¤3ުꓫj¶–ì.ì•>§¥SÕ­WN½†âXç±Ý`Ôm®ñ"†ÐЖ :úS\UV¸íÍj[é1Y_=Ê6Žž™¬}b)!Ô£›víøaíŠÓÕnä)š¾a×Ð{Q®ˆhÔ,¬›{T„Ÿ&¹Xog²²¹¶`K!À`½3RK®Éý›Jß¿<±SÊÁ3§@0xíštyåj§¦\‹›å'jšîò;+Y$sÓ¹¥mBúúî®Ö±ù0ŸÞ¸üEbXë—V“†–S" žÕ²4ǺÕÿwîö‚õéTµ(`qÏCSa–Aî8 u¡X2dœöªz•á³Óž`¹# úÖF‡q{<¯,À/EOJ«iq\è™@€î(TÜ€7QIÚɇÅMÆ2kh§ÛæÄÕ>Ì(#¥1äu¥VÞ›_­@úu¤Ó‰¤ œd•ô«ª¡ ŒíÚ¡’Qž×“­J1æ}kŸ¿ñݪ/ècF·Ãa¦üì?•m\6d'²o[¢’<²ÖûSðõÓ@¨ø'ý[)Á®ŠÓC¾×ïRÿU4\ŒwÓJ˜;D™é“Ö® QvŠ®qXå•;c‹ñ¶—5Ë¥ÔX!©QÖ«èÖšž¯£5¤®RÐ}ܯ-éPøÎ Øu0y']Êp¾ÔÝ+Å÷vñ­¬–Âcœ.>R?j—ºKÜ—Á÷Ï[’É×nàSŸQU¼U¡Oa}%ä+˜emààÏ­tžðð[æÕ.ƒ¬¤’±·ðƒýk®h£˜‘©©^)sj8ßK­O0k’æÏoEçð¬_Y\Üx‘Ä0» ð½kÔcb*pj«vü…ê{Ò½µ8,ßðŽZ¨C& ¼ô©üesn—q X˜ ¡—ïWOó‡PG®Ú°„ƒ€9*y´±Mu<ò=úóÄÍ5¤&–RV@»@­/h÷SÇw ™‘P#ê w°L6Õ‚ 'ž´ùÚw&Ç™/^oËú€yq¼G¥Yð—…$(·—fE;cû¹Ç­z¹´nçëÅ''a¤ŽÆ>šêú+«Pîò|¬oOµ<7á©tgY§—|‡ ì¿Ozê $ ùSò8Èç=)s;XvG-âÛêa®-“9ÉaÙϽ3ÃÞ tñ]ÜNæeÁ½®ÉT9 OJqæcx ×s°²9x@j÷ qf#Ž\þó=ýëS@ð– 8]÷Å#JÜpŸpI¸l\v¡Éµ`±Ìþý+3YÑ-u›VŠX€‘Âò+@¹nLÔ‰œ|§ŠIÛQœ™àH,îÄ·3ùÛB…àýkWÄ~Z·M¬h‡ÊÝo:9Ž d²íMÜñÛ¶(æw $ŒÁÖ:|î.'ÏVè+OUÓ$¾ÓM¬3}œ1#ÓÒ¥·Ôm.à‚t2'ÞPÝ*Ä;ÆwÈ4îîJ]Š:F‰i¥ÆVñó1êßj®¡ÅV’`“¢¯sÍ,Äá_;pÔ®RW-gkŽjÆí¸ôÍ»ñ#Òºçn8¨¹§ÌÂÈÈÖ­ éF(SýY@ëXךsC¢Z–_Þ+ò½ulrqÁ¨Ë ½#ý(ç{moQÓn!°¶”fŒaˆëÒ©_MvÑÚÜÎ>ï JóÁ®Ð²¼`ðV«ÜÛÃ:F² páìiójO)Îj—’^XÛÆÖî¬ÄOsÞv# v(N!R>˜­=†ïV)ˆm†åêMC∂ ,­·óªOd ü@¤ZÙ>~l`þ”š¹)%¥Îí¤®; —Ä(E®}¥[¿Ó¾Ý¦Æ"‚¿^ô'°!&‚Þ=Ce] –=IÿõÖ?—ü#âO(yð¾3SEoy•t³ýÀ£jš¯öÐ¥ÈàJ}¨B: U4¸öŒ\µg\†Ö5d‰?ãÞ.§ÔÔw7ƒIxÒ#´aQ»ó]•i•ªÆ_ïïIè4ZH£°ãÚ¹ýzSu4VQ¬c–úU½kX:~5 +yíUô…µ™Úå§]8ÉÏU¡wޱ,äqû®ªjç‰_tÐGÜ)9÷ª×’â|üŠë“ô«#1·Ù¥Cœ©KtÀ‡V\ØXÌFǶº=àbFO•`k@ 7O AO «¯Ê ¨c­'ªPÔu{Ûæ‹xÛåÂñ‘êkgCÔð8o–`rÃúÕ É Ö2Y4Dï$¹=9ªQ/, Ð9_¨#Š}Ì)=£Ç& °ä×4ocvÿgrÁ.µÖø‘š=)•s’Àdv¦h–1•K8¤´@.‡­-ðòdâe^}êî£} Œ&Iÿ;×)i°ñ"Æ1…r†´gˆø‚þXËìHIEÇsCZŽåË~ @˜Ù|·€[­l™ ó[/s\ ésCª%¡l1o•‡LVÕíË\_¦”Ïå +·v4œuб­ý§eq0T¸BÙ­1ˆÑs\%þ‘&Ÿt‚7ÜŒ~C»ù×mgæ ¼Óóí¨’°\äüH·_,ŒIƒ‚¢¶tMb²±’# õ¨õ›øŒÿÙ ò¹'øsXzއ6˜h$.8Ý…û¾õ[¡¼¡”–ûÄ Â³ukÕaHUö0!Èü:UM'TšóJÍÔJ@'¿¥dhÚëk(X¼ÅŽzZ›ç[kfÖqövާ¾*ë#«©"±üE­4¢Ä€Ìü‚{ æÆ£¨Øj«,ìL‡e ÁSE® ô]Çå>õGTÔaÓÓÍÈô½Y¶Mj²¨Àe ^¬Nú޾`i ˆKµG§51WcoBΧ⛻‰@L1ß©©%ðíì¶±^[ݤp–9üê[¤vÉ`€Ï®+±ðê†Ñ-˜pU¶’º*èq_Cë¹w7/¥rž(Y†µ"ÈîQˆd¸Á¯A}¨äšà|XçûeCqµ(êÁìuz8k{EipfŽ™®Hx²cIxÕ@-ºº 7Q·ÔMgæÅKL/ÐД•±“éN Í ËÔõû:dŽW,Äòøi÷Ŭ6?jß”##é4Æ™®kWzuÔ[(,ç'+×Ú¯ÞkBÊÀO0!ŠýÞäÖn“¬ZkdO ,¨tMcøÂ辤 SòÆ£Bj’ÖÁ~¥É/¼Eqj/¢p" ²¬1Àöªö>/¾‰Ê\¯œOoºk¡Ò¯­­¼7o$„( Ànø®>çU·¹×ã½òBD¬ aTµ=H¼ûU¸–HÊ•»V¤ °¯¡®HÕíu$³±>^7gµC«øÂÒÃ÷P>NŒp?ͧ{cdy‰??u±SHÊ ƒÈ=ëNÖ-õ<Ýgh—õªÖ>)´Ô/L+·îÐ↘\Ô½Ó¬ny¶ñ±$•¬ýBúÓÃÖ‚X­"ÜÜ :ûÓ¯æÏÝÜ=h’ÔÅ7RmRÔ\Œy8·\V¸pNxïQ‹h"QË·¦+ûÅ6:\ÉlÄÍÝŠô_­%®Ã+k46WR[Am–^ 3qùVîŸq5î›ÄÑ"Jê«Í|Awö¬g¶9V»‡ñ%Ž—eRs&ÕG§­T£¡)êj4˜“äPXñ“KF8wnùOÕ¬±]mš"‘zf¯ªZéP€ >UîjReÜÐÃGÓ§zXœwpkžÑ¼OmªÜ5ºÂcq÷sŽk¡ÙåŒGZMXIÜlñÇ$g(c¡Z­mceÆEµ‰d?Äf¢Ö5{}2Å䑇˜Èž¤Öw†ü@ºœ$NQ&ÜvQNÒÜM—µýiôKq (ìX/=iž×.õkI¦¸Ø¤6Ѷ©øÚ0úñÁYF­dx{U¶Ðt9d‹<²ˆ:ôªJñÑž†’î/§z’\$Œ×;¤ø‚ÓW!>\¤}ÖnkNóR·°µ2\ÌŽîN=*e"HHón*T%$®RËÅ–—ZªÛ’œ+7Bi÷þ2µ´ÕM¶Ç`¬˜7š9]ÆÚ±Õ͆psŒz×%ãmOS°Ž¶¹Ùå[ Îjþ¥â{  ‰És& Ç`{Ö_޵WÒ`‰pÏ#CèTS¹-«ZŠîôý ՙ幒BUÛæ +¨ð׉N«—0"á0åâ¸]3Y¶‡K{ ›|‡n$Ú€}3]§…dÓͤelñ¦FLIªšHHê÷ƒÈê)¬Ï#¨3É®KÅ*fØìv4Í÷‰þƒÃž47Òy7‹‰I ¯ZÏ•Úåsjwl¸°3Á®GHµÕdÕ®µâñÆIDŒúUOxÎóOº{+H„{@>c.ïʶ´ZmSD3EµÓ%¾_½O­²¸-Ybÿ_²°H¼ãóHÛP/zÕ·@2NHâ¼WYÔîoµ†”©‘ñŽ£+²ð„šìº—úi¸û:¡ÿ[ÓÚ©ÂÈ›»›×šÚ]Ç ¼Õ›k6Ó[I"¤;Ø… sž•D#;z׬ê³jÚŒz-ˆ%D€ÊãÐu \½Ž²Vbàýá‚}ꮤ._J¸Kn.HO­YHÂ& ?*­yfµâ-Uµ—S4ˆœí@Ý9âœcv)=ÇÂ^“Ló.oX‰ä*pýzé7†;÷±“U»‹Ã {<¹U/¿­qZ/ˆ¯¶åº¸•ÝUIxýO`)ò·¨¯mF”Ç Áæ` -·­K<~|&4n7Ÿ¥y¯®j÷Ûî ÆPåîâ»ÿk’êÖí±m’ Äzýh”,®8ËS ·iVëË#n~•xe-×4Å"°ŸÏòȼ|¤Š‚›Ô”MK]ƒ ô‘0ÓÒ‹œ)ÁÍ&=ic;JiÎhóž„õ§>šn23éJä4Àš\àŒSLœŠv7b€ ñšAäb¥fàBxÍ7f>”ôPF0Ÿ“èÉÀñH$íâ†`cÃhPpsš7eÅãÚ›‚®I=E93ƒ’iÎÀÜÐäÝ©ËÀ<Ôa├t °õò]¥Í4®y«$Šb€):P‘žjÓG $`£8É«ŒÄ öõ¯?×uI5;¿)òáTu'Öª*ìMØìMÜ>[;:^§u1eÃ)HàŠóçk˜“És v÷­ ‹ë»[{H÷`€ãÛ€V‚á@QÐ k`ã4˜Ý‘Þ¤ce%F†TŽj·Ø!û+Ú…ÄgÆ­IÇ~”ŸÆ[Ú˜‰`#…cP¨âœTê{Ô*HïJÒíô\ ÷ú]µîæ•q :ŠÀOÝ­ÖÕm±÷Ãv­ÛíN(¥,x©§Øjpê ˜HÈ4Ói†úÒë8¡)Û—ç¦9?Z³¬è²KMÝe?:1'Øè,íÅÆ†‘˜¨õËin´åXÔ±óOJÒµ_.ÕTq´(rÐ,pÉ%·¨8o.pk{E³yî¤ÕnP+?(¾žõ§y¦ÚÝÉ²Ä €ŽG|UàSåáq€(r X­ª@o4ÙcAó•ú×1¥ëÙèÖ—HøB@#ª×_ žFj¬š=”óùò@ ç¯ùâ…-,Á«œöŸg%þ³%þ‘nܾõBÒæM;\ ’\¡S]êF± ¸þYC@·:«Þ³’Å·m4ù‚Ç+{<öúà’s¹ãpG¸­=n.uM“y.Ê3•鞇5«¡ý³VŽåÀòÕFG©ª¾%Ò$¸. Q½ úNé…ŒkGšÊ4¸<ÊÀDZ®“ÃSI>——-´•ç¾+ÂÏUÔí´Ò˜m€Úw/$ ë-,ã±²Kxz(ýiIˆãõ+W|Ôdý1]eähútíœ/–À‘TõÝjV»ã\'Ý÷¬‹]#]¸„Ú»íó‡Ë àŸZ7Ô,Eá(ËIt›NÜ Ÿ¥U>#—`àÇç]<:\vzt–ÖŸ#‘Ãúšåt{ Nß[ù"?+#•àƒÖ‹€ž02 ]7.0ƒ•£¤iBì&£|D²H0«ØÕ¡â"MFÖ6€fh¿Q\îŠu¥¸ÖáÀS†I€(_Þ‡zŠ<°ªã¼ÎüIa®É#™%-^kÓ⌢.zàõ®WÅú)Ÿ± ÈŠ¯¨õ¥ ìeøžHîÒÒåNíéÐWaáõ#B¶v£"¼çO»W°Ëp†Hä)®Òi­&Dã¡_ðª’} ¹º¨LÇŽ+ñq?Û„‘ü#ÔÙø’ûØíí"v;ܯN+“ñb\mÈÒð§Yö¥¨ï¡¸t [  Ö0ÊÞµÎè7rXj›ÎòQö­ïj—SB±¼;¢L†ûvªÚ»ñÅÒ òbv?‰¦®· Çkú5§Ù ü ᙾ`[©5,ZK·ž>uEö¨¼[s$7¶Ð”>RÜôzÖ—Z‚o Iq³¡Œ¯¡¥­\ç¼f—:Æéú ½7Æ,Zã²ç.ªXÒxOP†ËU>nG™ò)üjïŽãUÔ`pyxùªûAÐÓÓ4È/|1Ýâ4fPÒ¹-*Ò+Ýn;iÙ#€Ý+®²žX| J^]…F;dõü+ÒnÅ–¯ Ì™*–õ¥ê>‡o§ÃáýêK-ùuÁnø5ÆYžÒê&]÷20òþ^}ë¹¾Õ Öô+´³I(ÇÝþUÃèÚÒuA<‘nQà P½6™áÉbÐ.ĬVI!Gðâ¹­Î[­TA¾[`彫¾‹Z¶Õ4«¦µ.c;_Q\o…·ˆd ‚ ê&A¯égLÔV”¶à3uæºí^Á@JK0A&¹ÿÉ»\[¤h9õ­ÛýM.¼ò"º«(AžøïCÙ©_ÀŸ5Ôx‰?Q\²ÙçÄÌ“ƒ)޽kkÁWâ ç·c0oü«1n¡_‹ßºóKgêiëv#§ñV¥5ž 01\¥‡ OAðÝŽ­¥­Ä¦O1‰ÜCzz±âÈ„Ú4sÄ7(`I„U ëËh‚Æw !ßÒ¡|: îRñ=½µ¶­ë°*Äw5§ªøD-omä‘T;î=«Ä÷QÜk’`ݱTÛIìå<¨ËëÚ3„nöÇZ¯©Î·Þ+µ>m’B0ÝãRè ÏÉq í… 1Ðö¬Ýn&³×æó1ù›À=Á4Õ¹„jéš4—šçÚ,†Ò6,ÿ!]Õíà±Ód¸~|¤={Ö⛼»h¡’90]¼Vž­^é×G˺œzVr~õ™KTqšbEâMR寜çncºUM_H} é&‚à•ÏÊGPk>ÒytU]²¥§Òº­_QÓõ=£ŠPò’6¯psÍ[m /¯Æ«à³+Ê }ÅVð­…–¡£\-Ô!¤.@}¼®j7‚m;Áþ[BçÌ'y gøg[]5äŠbD.AÏ¡¥­´ ·"·…t¯¤;Ž@ úæ¯x¾èvf%"ÚqQI ÖüL$´9‹pùϵ7ÆVsCª‰›˜@éNé°f¥¶|A©GyýšÚ2>nïAY>/‚5Ò°  Ÿs[ñ,-nŽ$áÕàÖ‹H:ã¥XqI_šÁÐé-¼;i{­ÍÓHòíþn·Ò¬ø¶ÂÍ´&™"Ì‘(ŸAš§¤kÞm¥¼Á$ÓÁÛÛ/ŠEáц#°ŒÊ;Qv¥©VV3ü§XßÉr·vé#& “ï]v²`Ñt åµ_,¨;@ìMpÕ®ôù¥†Ò×Ï’NG^®–ò-VãÃ:ƒêvÑ`9ÇãW/ˆ•{ ðö•¥êZ’ãJì^Rz©¬O -·Œ-û‘ } ¨¼—_InÖ‡#µE‘=¯ŠÅ¤Lw >WÅ5Õ Úø„‹¾Ö@Îyõ®·Âûá´_âòñŸL×'ãø.ÔÚ†LÀ«÷½µ| ¢¶L.F-ÈÄYêsý*ƒ©ÆëIåøºP‘8Æ?Ïjõ8„‡ Fz®{Šóh70x£…$4ïB:óþÙé:-õž–.®îK¤ˆùkÙ8þuS³Bâ=fDxôë&?i”…cÍ´õ{@СÒc. i¤9ySY¾Ѥƒ:è-w1$çøEu`žÙ8¬ïm DO´ù5äÞ.B$”ù ±ýk°ÓãÕ-¼3"Ý÷;À>b8ÏÒ¹ŸXÞ.·,ò[ºÆU”³.ÑÖ…³3õÂxÁg›Ä’(î›#¶+¦ð>‹}kq5íâ:]Š­ÔÓks½$1cÞ¦%pD`ùT€(ljB•û \bšfŸ‘Ò˜ ݵÉéáÕ†æ†Fi±¸sÒ¨Àö5&КŒ±M ÙÅ04(t'æÈ=¨ÉÈ¥npGA@èGZ­?ïÔ[H<Š8àŽÔ`ëQî Èõ§/Ì2”'<Ó”•ŒúÓ¶Œ ½3AO  F8;ª2ÝH)Ûœu¨7‘œ÷4 •à–Ò–'œÑ ‡<Ó”`b%#ñFìRœV„ ­7šy4ÌS½ôÍoc4ª»Š© zסF³ëïà)-R+·Õ±œM/–Ž¥Czàlà¹}IRÑ‹Jíeéõ­!±2/ßćÄé9@ê)Þ'µ"æ sU.-å³×Qd—Ì:±aÜ“SxŒI³æs– PÓ³‘#í;˜ˆ0;p:ýk+M¶Q±¸‰ðfn zŒô­--õ×iç`+´)õõ¬h.$Ðõ D%QëR†YÑA–;›IIÂA½*®•’Gyn§ Ê3øÕС.—W¥v‰‰Ú=RÐ7ý®èŸîãñ&Áð۾ў€ ¨n®ÍÂßç(hҦБžk±ê¸£Aµ[‰ HÙX{ûÓêÆZþÚ+© RqcæFʰ>”ðàþu‹§k0ß; R6ž£Öµ%tŽ3,¶5š^¡rH¾û}3O2®B“‚j½•ÌwHÒÄÁ× " v’ÞýŸpóО7t¢ÁthnSÞ¤ c'­@ß/Zséä Øïéšl¼¯AÇz§uv,­d”°A*sïXz>±=õ뛉œ|‘ŽôÔzŠçY3Š‘>Rq×Ö£B `JEÜw WaÁäõ§‰Sz®zu®CWÖ¥šùtûGÙ–Ø\zÔGG×,®• œÉ»}ßÌ| vøŒp3Æ)’3QÆÒFˆå°TÅÁ({gŠL©$ýE.ÅSzTC!ØŽ•$l óÔô Q“&"‰8Úã<ÓžP cšk8n 0u? ÚêDa|—^Öcx ¡n¹œ§λÉsÓ½:B¡Ï°Èªçb2ô}&×Iʼ# þµ&­¤ZjaVuåy:ÕÌŒ÷íR9÷¤ÛÇêò¤Ç£i«ó“ómÿ=MtzNœº^+÷ðÏ©§%¤7¦t„=M_V' Ðß@0õÝ'ûn#+d1ZžÓC·‹K{€ÈGÍî}kL€®NG¡¶ŒŒu¡¶04ß[X^´ò?˜AÊ¿v±ÉèdŒchëÅi´œ/<Š—6˜ÒºËMµÓ-LvÈHù‡©¬½W–ŒÂ]Æ6<µªï´uÉ4¬ùOÂ¥IŽÅXt›k]6K;”2‘¸zšÆÒ|/›t.e—|ƒ‘Ž‚ºPA„ÔÔlJ\ìvF¡áÑ©j©u,£ÊÀ{ñ[2ØA&žm6Ý¡jP ¥?8Œš9˜YÎá£a}-Ìä#ÐÕY¼²j-*ÊÙ›8Fz×bä-Qíü½{Óçw¸¹SEu°‚³Û¾-»pÝÅbÅá+X5t¯û°AXý+£ƒ4(-qùЛCÐæ5O ®¡~³#ˆc ÂÔZ¼Ñiv1é:zæI>VÇ¡ÿë6åf=+ÃâßQ’òwóÉ$Æj¥.ä´Yðe \fi0Îǵî®ÿ«™xíï[` œŽ¹¥—3žýý*yµ¹VÐæô C¥;ÎÎd —h·# `üVmÖ¿§Ø#,—aÆÑóƤÒõuæ@À©ãÜPîõbMú߆¢Ôüˈð·p1Þ¨x{ÂRÛÞ¬÷xÊr«÷¹÷®Â Œ}©êJÈvŽ1G3µ‡d0[«†ŽA¹HåJñ\Ýÿ‚íno„°Kä)<¨_å]JÉëNA¸üÔš "„Z=Œ0E pcÊ`ÊGËÈõÁ%ö›m Gqu<ç½]ô“JrN+»Üzz_‡l´ÉÌ‘‚ÌO»Sõ½ÛXti>VVp¼â´dž8¦X˦æ8 Z§PÍ€:S»½ÅäS±Ó-tøDVè×Ö¬\[GwÃ*ü¬»Xâ¥(TëRìé“RÛ•§h–zVï³Å†s’O_ίÜA ð´S.åq†Ò¤*GGcHÀŽAíCmŒ£k¦ÚX‚BN)Ÿo÷ÛQœF3Wö^´ÇR>¾´®ÃAþdrGåÜÄŽ<­^ƒË1€0jÌwXŒþ¢–)^.PðzÓO¸š¹r_(Ý+ǘwüêÈ-ÉêQURå$å€V7 ƒUrmaÁ9#±ŒS·¾*®yòžG#Ò§ä&æ'¯Ò˜‡ôúœãéLhÆ{sÎiwÏEF·ÄÆzš,‘`WÔgÖ”*©PÑžÔå 7g˜Òuãšw¼¶VÏp.L™0ÅFF*Ô|Ž)‚ƒiÖëÔšWP¥@§(9ÅqÍ(Àpháˆ=8§ª…94ÅÚ{Ò–4 RIcÜSCÇ$àÓ²21Å&ÀÏŒf€ϤS¤$p1À§nÎ6ö Cö·CO/9â€I?ìҵɌR¥ˆÀu^E"±qÈÅ0’ƒÅ#‘õ©H.™¦²¨ÇLšB ƒÖ€ÆO¥5ÛÍG¹—pÇQJ~p2q@Xk&1Á¦ÁÁ9¥XŠdîïH ÐѨQškd)QŽ9¤r¡¤¬sNªö˜c*O%‰üÍOÒµ$:sM º—Ú»Ö€1›žñúeÀ­t…rÏ8¬í2Áìà‘dÆ^BÜzvªB2ôŠÜ_ýìΚúEܧ›høÎXú{V¶cö9®¿å«–ô«LÊ è3ÅÔcW7ZÌwXÜ®;UëÉg›C¸’dÚ[1ßõ¤ðC4‰,ˆ£ÎÌö4ëˆ#¸ânŒ0~”\QXÉ×rÉ€ElhKQƒû±ÉõÍKq¤Fö?f‡ä]ÀþUjÚÚ;hQ`mÇ>¾´ÛVŽzÛ÷ž Ÿ €K­7Ižö ýðGó«qiw1êÒÜãäÜÅO®j=#J.šâL 9=IªºýD’Ò[Y1òœ‘ëšnŒŽöþ­Iªwöwm÷› $HÇoÔÖ½­ƒÁ£Mœ‰¤RÍH ÿ[Gq4¦Xƒ*ã¯|Õ{ùD웓zÆv„N)t©á½0Åu€ÃÓÞ™«,–ºÄ“2à ¾ôÖà_°Ñ'XäžB#!zÏÒáy¤¹Š9¶|„“ì+£³Õ¢¾²•‚cBOËÇ"¹k[“j—$®µ$ØhZÐb‘õ cl¸®ŸW‚iô—†—gHÌøvâ;{æi]£ÜšîQsÈúýiKq£‚Óµ+.I¡UÎï”)ìEG:]ØÝ¤óådfß»×Ö¬JŠX¶þUcTXâðͬL¿;þT´ÐfŽ2j::­ÂîÚ ±5ËÞÙ¬Ïöy~l®~_ƺ 4á—?pìbHîhðÌ!¬œÌC~'`±[Añ ‘ȶ·gr1·ƺÐáƒl©%ŽÈí¥Û+œävCÕãÔ,b0óÐ|ù5¢é‘kP\OvKHÍ´6îê½ý‰ðî­lÑÌY >^Ù¢ËayN¡âKm.émÝ^G8-ŽÀÒ]ø›N·(UËoÁm½Es~,µ qÒœ‰“Ÿ¨¥³ðÛ_XÃ0Ÿçp3žËG*µØnÎÕoá’Ñg<’7n>•NßÄzd¡Á¸ AêÕ‹âXN™¡ÛZBJ£ Ö²,|>×Úi»…` Áö¤¢·Ö'‰m_VŽÖ"‚û¸­kÛ˜ A%â(My΃§ýQWv2ÐÿZ½®ß5ö¸–NÛm£p€ßZ|ºŠçam«ÙÝɲÚtvš–ãQ´‚Hâ–dÿtë\>Ÿc4zîës6ýEWñ$— ­Éæã ¸ô¥Ë¨ú„ò*1Ü*úšXîW*T†Ó¥p:™ÔÞÁ&””¶Ú.î¼u5©áY®dµdq˜Ôü­Þ“•Á=N®[€ “Âã&ªÛÜÄѬqK¼×vãÇ­bø¢êh,—бö®cH½šÒwhUÝØaT|À“J0m\mÙžŽ²8¹û©O–Fà¥=³^v𦣬%˜»I¸+F•^ñUÅÙ»@Ìë (*Lãš9ÛCkEðü–·Ïw4»œ±ÛŽàÖó² ùØ*÷&°ü;wq&Œ$¸$cz€+žº¾½×¦˜nÛ `º¯·ÖŽFØïdwŒêøØá‡@E?œ~ÆxJ{Ÿ2H6“ sŸîšë5 ±ca%ÃdJ‡h4É^dAµœ)ÆFj¼×Ööpžå$ó^q5Íö©zÌ¥ärI!sÀ¨.b¹‰ŒW "¶2f´T‰rìzÊÌ“B²FÛ¨9§4Šk0ZålžçGðܒ܈8ò—ïmÍs÷’jWö‹¨K)òÃmõ”.Øôå8Aƒi®ñ“ô®)u{´ðp•YÄön¦øŽí¬e¶róMÝ7z^͇1߹ܘÈÍ1¬mæ7Ò¼É5=KN½Jò«ç%<Šè5VãU·1i‹+¡¥1öüiºvk„Gq9ì(BÊä¨5çþÕoíµd¶•Ý‘Ûk,Eiø«ÄR#›2C‘‡aÖ—#½ƒ˜í"upÛH8®gÆÔ–Véi Úòçsz æ|7­M§j[%ghåÂ[¡õ£Æ 3ëoç©PWéMS´ƒ›Cv Xê:Ü® ,j•ž»iªÒœGËgÒ¹ ]*úONìå¶õSÝG_ΰô(.nŠ!dCæ1ÏAÖ©SL.ÏMµÖìn®ÞƒH@©µ Èl­$¹áQwW- øRm>õîç}áîü¶Ýº·5Û¡¼RQ´¿Ë× Vm$ÊW<ôø‚VÖÅô™ ªnü«²Ä‘Í¡¾¡åld%vö'µq„7ÚÜV³Q‰ z ïõ&ÞÜ[ÁTE,¸­'Ët‰W0´¯Éuq"^캽½*î™â‘{©}›fØÞ˜õ®SÃV°]k9×r€XS]õ¦“ei$’CVqΦj1»2GŒöëil‹˜ /ß5©âE¦l†ÝDÓ7ƒÐ á58!‡ÄŒˆHÍûr+sÅö°ÿfÅ: Hî~´ì´Bîu–Úõ±ÑÆ¡$»cÛÎ}}yúø²î=q¯y’0HX÷qƒ[ú6·^û=Ì[ãådzW#¤Em>¸N¿¸• õà–¢’gO/Ä6{WŽ;R’vÝÿJè<)ª>«¥+Oqæ\!óÔÕÊx“@Ó,­KÚ¶Ç'åFn¼ö§ø;H½Žþ;¶”Ü·Í÷ñM¤ÐZÌô¢Û:ð«É5—eâ‹[½péÑÄóœW9â?M~ÒXéjåþöE^£½Aàh­ßUi`BΑòìÜ‚zà Ž[+•sÒÙÝ#©Ur4ÁsÔT›€¨ÎãiHÏ4¬Á§F@Ïz`0óÎ:S”íù¹¡Ø âš®\òx  HgÉ¥Ir)p0p9¦ÄÎàô D™$à 9ïÅœ´Hæ‰&@š‹iÈä–\¯s@ŒP„(Àê=i õ=é|ý)ÌLŠ@"·µ!#"–6'ß"•ÔñØf€’p@âš §ðÁ¦3äЯœzS•GÜÒP¤YƒÆGMß5<ŸœZŒ¨tÁÏž8+šÔ9ßš Ç”œ9÷¤T#®žâtß4¡KRyÉ$bTpPŒîíŠân¦“SK›ÉeÀŒ…‰=rŸ$·öšDÀ¤NÅyëŠ\£¹Ù “z°e#‚)ã®kŒ¶Õ'µÒdŠ%|³[²ƒ[»k›'ÉfŒäß4œl;š:•в²y°Ôšç/aÔ@Žín$u“«Ñ}±W¼NÌ–¢Ž² ¥§ëÅnRHŽ4ÎOËÓ¥4´¤ˆ g‚Àõ§ÿ)ì+)5»f´I¤;YÎÜZµ=ôÈ$–Bò1Ö¥¦2ß\ëAúTQ̲¢²Ÿ•ùR{Ô›°áN3Ú\wAúRpqš 3Ðö¤#ŽôÀI#ŽLeFTåiØÈÛÇTH™ç"›{coz…%@Ç8ê>•%œÿh$eÛ¹AÁíše®¡ á•î‰4jkc½©‚%Ú¬cÜÖ|~ŽÚÞdƒI*•¯ÖÊåcôîjíK7xÐOb@uaÐÍÒ<>–ry—!%(ì+}“tn ààŽÙ¤ÀíÚœ3Cwa±ÂkDöwÀÆ^`íÝó[ú&ä ºº&K‚8øGøÖÓÆ[ö5 *¨Iêi¹h$Ž3ÅqÈúªaISm÷©µ¥1xrÉ%”ú êʆÃ0ɃUï,à½DûJnÚr¹õ¡H,ch¶÷7:‘IÄl…Pwæ²tíJçC¸x¥€”f‡~+¹HÄhŠªP*lá¸qçCs–£™ŽVçí#¿F‰ P*à–ù~µ×Å·#ë´iâ$"…Uè=øuÅ ÀëâC®¸= +-v—–Æ÷C’ eÌcQÒ¹½Ûö…P!x=ù®º#¶0®hlç£êRh·¬“©±Ã¯õ­-bê/]ÚÛØ휖+Ð××ô8µ̱ ûPîԾѲàÌÀ¤9b;{f›h,cxÉZÞÒÊßnB/ß÷éRiZô6ÚU¼B)$™F±¯a]ˆ4“ªZQ°`ÀžÕŽ•m¤Ú,kƒ(f=I¤Ú¶ –¥,w:NÁÔ† ƒü«'C¸µ“K’)'xÞ0Çø J×ñ©f–EÌe¼ÃòÔb°´2ÒáÚä¾àXâ3ØvÍ~î Ö¤>˜Ã¬ú âªë¨Ñë³™>|Ÿ¡­ B¶ñI»+)ëZúÞ“£ð¸ƒØýió$î¥ý.âÁ¬¢[VA€2¡¹Ï½r>)u×aÝA­}ÃæÔÇ<ò‘*6B†â³5Í2î}aÊ¡;±ƒÚ’i1ÛBÿˆfWðý©þñRáRøVhÖÇË,7N* nÆäiV .S±×¥YÐt&²+<ìL„c`è¥&¹A'rç‰S:4ž˜‡5ÏøAâc)$å}ë¢ñR60ŒdàdLÖ„­§ŽîI™H‹o9êMk”$Ê;–Odƒ>ZØñ³"Ö,rİ5‹„ú†»2ÛåBÊIoîóZž*Òî[Éy#UÙƒób©ÚèZ—ìƒCà¦qócñÍs2Ç=Ù‚k“RHï]'†ìu´’;®-¤\*7½dëž–Æd{E’häÎ0¼cBjí ¦w¶pÚZ¢Z€øÒk0‹t=Ðð;*—†,®-tÑö–}Îrÿ i_'›c:n’¤ôã­d÷+¡ÀøM‘5°6œSü[:¾¸¨(Š7{V\6—?Ú‚+Vó%VÈeþu¥®è’ZÚGw,Åær<ÜúÖÝH顥⻜é6iÌn»·{â¨øjÁµhÚ îJÚǃåîïZúe±×¼0–ò¶ œ#mô®r=3U³Ô¼‹tJ Á^†’µ¬-Nþm*),^ÄDD`ÛÞ¸:±ñJA“òHTf»Ý15EÒÝo˜Û!qØb¼ïQŠþ×Q3̲,Å· ×” ÷E3£ñµ´+k ùÄÄ‘ÇR+CÁ bd`‘!—w£êþK™‰žäᕺÿÍÐn5ˆÜÚXçk˜û´íxØVw7–Ëí4y£MÑÂ3!Ž+›¾•“Äó<$óŠÝ2¥z.•§ý†Üåî$ËHç¹®'Å͵췱ñ»‘Õ~´£-lÆÑÓhÞ¶´?lœ¥ÄîIÈ^é\ïŽÔ&©»àþ5'„›W’tTw6¨wH¡üOô¦øíqlr3°€=hŠ|Àö4ôâá‘wa|§ÅrÞîïÞÐܘc”Å[®;Wg YÇ7‡ ‰Žcu!½òkŽÕt;Ý*íž4ÆXìx×§¥8µªZ\ïàÒ-­t©íâ\+! ÝÛŽµÀøpñ%¼d¾G+Ú»?.¨4‰_PmÙBc¯ãÅqº=•Üþ ŒÂ ²Ë¹›oAJ=FÍo\G£ B€–îyé]V•¨C… ÔŸ$K'ðÉø¶)/õÈm Gi€qV®<9©E¢%ºÌóJò(*>Pª(v°¬î) ã=`·Î¶pŽùîk¤Ôà1hW0F>ä,€U½#MƒM±ŽÞ$ ØB;š¶ñ‡Ü ZͽJQ<ßÁvÖº«Ç1 Òšë–xá(òDp§ß­6Ú%ì—S8HÅ‚•áyô­³XÄjQÐUÊiØ•!Ò.d²Õ£’5$†ÁQ×ßÃq©›¯1 Õ†wÖ¦·Ðm-oå¹ç9Æ´^#(ìN)Ni•XòÍZçü· }§¾+OZÖ¿´4¨WìÅPœo>õtÚ‡-µ+Øf•”áˆþ!ïR_hpÝAL6ÁÈQÞ«hÙ<®æo‡ähü0^$ß"‚B7s\e­Ô–Ú ¸DÜá³³Üö¯T·²†Ú*5Bð=+žEŽ‘$šñË,¾ƒØZ!5©R‰ªhºä?n”äýã÷EÖ¦‚ílä%£íÿ ­ñ”.’퇟ºªz{ÖNƒ£ÝÝß%Þß.1 }Åzý*¾Ï¼FïCzûQ†ßHÒí·Ï.C•þÿZÜð‡$ÑÑç¸#í ¯ðñ©tÝ6ÒÖîK„’–­°ÌÉÇ?5gÍ¥Šå.™7¼ŠrÊ¡1Þ«ÆFp{Òm ¿Ÿ˜ô©ÄÓco½*¹è*Œ Ø4õ–4qóqEÂĸ%Èö¤Á E p­§&•[=MP’G8§•Â*FsJÄ.h’±ì*D`@Èæ£“~FÖÞì<çš–BsÅ9ÑÏZCÀÆqL·àhîKLbJè|ºDM£š2ÙàãŠpl‚IÍ Ó P …óš€n•!Ssv‘Ê:ö¢ÀMÊ%DÀã>”¢GÇÍúSC‚ JAëQçéO^ÞõdŠO4’¸HØã 4¤ðyÅ5¶¸ÁéÞšÌï¦iïæ’@~g9¯ºmRê ¿ ,‘‚9P¾ÄšïÃq]_›…}±“’…zš¯¯^AinšqNX ¿t{V—¹;²_A/‡Vß8–3À«zkáK¬qÃêI-4èô LŒ ‚\u&¥ðÝ™[ Lã++`!è@hnÈ724´’è¥Ùù² )éžüVŸŠQzo'ô¨Ï…¯ŸdÁ`ÎsÜ{SüAcu1¶·KÇñõ÷¢ê÷ˆN!ðy;GÍÁ?SÚ¯xqijØÁf<úâ¨êö“[èÖã 0G®*ÿ‡ì®m!f™¾W éõ¤ö·*x¯"GmƤ…ü2w±ϰ¨üUþ¦Ýq‘¸Óïñxq#(öZ:©›§i }d%.êÛÓ“T1¶£$R’(¶§×TÚ&¤À-Ú'w,p{Z‹P »¾tÌD†#ðªÖâ¹ÿiKKI Ž!@ì*ö¥us©jä|€ Š;ç­.·$mklÑ‘åîã¤Õ›v¥bà`ƒøÒÜ z¶§4%`¶ÏšWy#ªŠŠ=sËÒ–wÃή=qT®|Ùuù#Œíòn*]OMŽËIB ³2}sE€Ñ}r±Žlüòô_çT¼BÞu½¬ªr 8?ZËžÌ&—ÉrYˆ®_FSC´Þrsœú)ÚÛÐ}¢ÞÞÖ8ç}¡”/׊ŸM´†Î#·œ±®c\$6r“æ÷Åj›é4Í7c¹Ù@æ¦Àl¼±!hŒ£y.îµÆé¬šà Y‡áDv:Üép7þôn; †Åî ¸¸1©yáÏZiYèãfN9§¸ýX™o…½Ón{ØÕµìð©Ý4™ÇÍÓޡŧa¦m&H úÒ3)èz×+¢k·/|mï;óÕGTòøU`E ü§=sëG+Ή‰QŠŒ9ÉÏÖBO Õ– ãÒ±4 ¶“ g#ŸÃ&¶® KVvGåvœÆ¥$ §juaž:|܃Œúôö¤ÐÓ%#pàG9ïQ²^uéU”çéÓŸZ6"‚8dß(¥ÏÌBõ©¥PF[œP3³‚{Ó¹3 b 8!qØT„›ÏÓºOZ•œ,$M # éYúí­Åî‘$0;cøºÚ¬ÆBãvy5l€Ðã4lÀòhF¡¦NÆ5’6}Þ+r(µ[¢ÌȶÙ›¿£â˹í,cX› #cPx)¤0\bW /õ­Û¼nE¬ìoØÙ¥•¨ÔAÛ¹«‘H ço'­6MØlŽÂœ©û±ïX²Ó.çäZ¯=¼3]‚ôÊîçÚ•"­$÷)¤“mÎÀN^%@GRAm¶çŠ$Rß{jõ>õ·‹ou øa¶‰ RØ9mÅ…jø‹Ä7u¼1ÛI"䱪äd¹FãÁ=I¦°S¸8ÜéÚ±<;wu§ ®Øü®=+hå±·Þ¥« 2hãHã ŠžÂ¸ª}ºßå$”?5ß qéT®¬­/\5Ôå9RiÅÙÜoR-Ù-´«hÇ&OãZ ŠàäqèWŠˆ…ŒŽÃÐTÒ>ÈÆ=:Tõ‚ÄÙàõ¥ŠãveTôZŠç¥H¬Tœ÷ : -áóšQy˜å¶òGÖ¤ƒ{œœÎ8éL†@]÷±¹WÀäx .Y gާ½D¼¾} <¸ÝMrþ/ÔoôÛ’Ù¶m¬Áy¦•ôΑ¥ !PCåR’sùWàs5ÍÕÕÜÒ<´/ÌÞµÝ3¶ñÇÎh”lì$Ó,HS#ž)†ÈǵFg'9<ã•[ÌëÀ¤—QÞâ°ü)¬¼c®)—¢c$zS7…Bž^ôÉ’B8ëN-Á-Q«ÆÑ† µE<›P³¶ÕQ“Jùd“°â¡‘ˆLô=ê¬:…½à)k:HW–Ã+/Ä#‡L _2WØ{ÓQ{ êæÌGpr{)³@Öm¾¯i5¢ì¸Œ1Á 0⢰ÖST»žÀÛ;·}ê9s#WiÝúT»O—מÕN{¤¶(eœ.ãµw7_άùÑ‹s#0Ø$Òå2¸Ç=IªZž™©h`”ã=¸5f ¸.`ó ˜:ôã¥G-ý¬r-³ÊW€ïŠh.™ƒeàËyƒM+σ íúWH±$aTÔ’M¼m$¬ŠŠ3“I ‰2,¨Á£lG|Óm½ÄšD‚¾Ð8Å8»qƒÓ¥rš¿ŠM¶ª––¾^Üî[ŽkZÏ_Óõ ¯³C6dÇeâ—#ZI3v9óRÄ7­6+‰Ð0f ;Ö¡ ´Œ*M¹jC°K;2n-ŒTq±q»44·)û­RE–0;R žÇá4 “ëOTääRmÂúÐ- b»–5¶jqy¿†*³ )Àä]€ãéNàhyàHò€F9Íg•`:ÓŸzw'”×1Í>>rMQŽer7¿¦"C‚ƒœi]½[41À¤#ä>ôRO8ªÏ+g« œsG–¤‚E+²nN})ˆzp*ÞÐr08¨Yv犀`´×#œPpã ž*"±…Ê>òÀà´íOLƒT)#eѵ‚ó\•ÌßlÔŒª›7È(®é„Ü \qVÕµ$Á¶ðÌI>d˜²ݼÝ\(£ØíOV84œlÊž=j¹Cã“9µ.{­Gq×tÛŸC@qà2‚ÀñíAÇOÌv¨ÉÉÞØê}ª…¾µÝûAE”gsö¡\ ~#_5ìâç2+YáV·12åpdöñÍâ–òú9´{h—#iù¿[zX¸±†ÝÕˆƒ‘Þ£¿ÑÑôäŠØ|éÈõ9ëỦ±KX–6Ó­V6ÝùqVµœI¡[<|… çÐb¡¹Ñ&m:@<ä'wÐÕøt‡:I²‘ù#9¤Ú 4K¸fÒ‘U¾h× µbèN$Öd,@ ×&™g¢ß,Ò.⊣ƒuôªöZuëßH-Î69º)ÙŠö#e«:¡À¸Tº¬çûY¤ë‚¤ $v3]k†)>Æc˜§x†É­¯|ÔåsíEõ°ìkiZ<’]h\ Þ_ašÄ™úëÅÈC)QŽÃ5­ ê³ÜlɸÈJÊ´lø‘K“ÒêêºrÚ]Ç ’Ky÷5ÚZ[K¢HdžõÊx”:ksdmé]F“voôäwB d ÷¨–À·9]gJšÎfº năÜ´¶Ú}Þµ˜Ó8@{šÖñ\ñ¥ªB%Ã䯠Çz«¢jPÙéÏ#¸ÜŒ~^üúS»° ÐÄÖó]ZHÛv©ãßÖ°¢•ãÔAó2¾G¹®Kïf¸ÔdL‡åÕƒ«F¾²ñùИ2}_í¢d–윰ÈQÐ Óº¼ÔDŠEùpæªø’BnâLœ*t÷&´.æþ€7|ûUEOD3 {»€Ïh®b½3] î§&—¥Á |Ó²IíU<)(uwàã ïPø¬¾„ñ·ËëMë+B¤²ÞÙ_Erò’ÒãЃSkw7o$R9t‰”SúÖž…¦ ˜ã»¹8‘…øG¥Eã5 öƒ#O˜£KØ] ·šÝܶPÇn²"€?rj[Ë©àÒʤ\H0Xz{ÖÆ‰o£@N;õúѯ¤1èÒ3õ ÇsJêö°ÎVÇU¾µaåI¾]Ç5©âo1ìm&`ó‘øSü#8¹ßަø¼°–$Ü6Nߥh] k7¶¶Q¥ºmDÎ[nàÕÑéìzˆH6L£8 WЭ£»ÑÒ6Ë“œö¬E…´Ÿ$@çcþ`Ói0ÕµõêYÙ<¬@ eAîk”´ñMÊÞŸ´бÁy_¥_¸‘.¼GsŸÝD¹ zkÄVpYßËæÅ=1þ51HmdºÜ1éfõNs€÷¨t¿®£‚eHÞ0N7qŠ£©ÛC.€‡"Œ2ïXÚŸöù¥YÄjeÅŸZ9U‚ìêm¼M Ú¨³ãÊ'j¹èM^Öµˆ´Ë@_瑲k†¶µOøHÝ7=±V&²[-Pª3Ê>ôíì…Þ»oØóz¯z± ë1궬ʻm-\Ë鿆å™Ú_,0%ºJŸÀÖªò\LÇîá@©qV –ülŸñ*‰ˆ¼Ì`téYZ.±•¡;·Í)“å]ÝF;Ö׎cGC“…”V?†ô›MKN‘&OŸvÝõ8Û“P{‘âKmU<¦9º[¯Ò¶TªÂI8\g>•庥”š&¬R'?._½tÚ†·rš=Œ –ñpǰé8í`½…¿ñ}½½ÚÅ yȧ– ùÖòÝÚêV;ãpQ“ »ºW®ø|ÙZEuev ÷­?Y†‚k¢yÈ]¾ßãMÅZáÔÃÓG°e|Ó·•±ã„ÇØ›n>R*‚ŒX.óÊ€=ëwÇ1±[1<†8Z}PìŸZ«¡x¤]ùßl­î㸮RÒíF«<÷?¼Ào”÷'µt^ðÓJd¹¹R‹"•T>ô8¤¬ÇvØæñš¾ª‰#ìå€,ß{ê+g^ñ:e¨ÆfjzWž]Ú‹Mm­¡l„” c[^)Óc°´µs—ž@LŽ[¯OÒŽEt+³²Òµïíc™q¸˜Õ¦py'Éø&ÄC`n7òž {ÄÚÏöu¨Šy~\wÔTrêRz‹[3xtø0c@L‡¾G¥Y×5¸t[;ƒ3ýÔõ5á=Ú‡Ô.ÇúLŠJçøAþµ‰nˆüS#\0òã;Q;0©$ìü}v·í1#!ôùH­¯Ì5‹‹sº2Êÿ…qºõžŸ¬˜`”4{ ¨®ë[[x¼â߈Djœm%f…äc|<å.sÐ05§®ë׿h–ÓK„¼±æ0þjÈø|s%Ú†OåT®Æ«¤xžY»™X¾øÔž”Zòô+Aâ}VßQW¹y†ÿVW§á^™g!º·I”Þ }ë˵é/ŸR“Ú`q±JútÍw~Õ¤Ô´ÝÓ¨ ­³Š$´¸-_Æ—7i©,nα*ƒ:g½Uÿ„ªy4±äÎ~R忇ük¼ñŒº¶ ÷»K&{^c£\&¬§šˆÊÆÎ8íÞœlÐ3_ÂZ“êÑB'Ùùg^Ø«Úî±.­¬.‘læ8‹„vîk¡Ñ`IæúLpWnWœO+Ûkòɹã"VÉWš›†Î‡m}§x‰íá%Ñ×eézÎñ-­Ì£µÜ¡šL¿™é^‹¥ZØÛØ$–¤9‘C3îÜI®ÆSG.°<¶ÈJ"ï èC†59ãD™ˆ®àÛºþ?†/eÓµO³˜‹ X+â´­|N-4H-¡„Ér#Ï ÀúÔñ0]¸¹€y²¿ žÔÞ«Qh/ŽRe½†Fcå²áwCߊ»©Ç{/„­$Šm±$A¥^rõŽ‚‡µrA,¤éZqðï ù 7zžˆf?ƒfº—Q’$|FªX¯cYz¹»MnO´’[Ìãߥlø"{hî&0Y €¤ÿk;Å3ñ PŽ}0WÚ>ººŒ¶Þ]±çb þZ~Ö…ÜÃW;gáÙÚb.~DÏ>§×5ÆàWðÆ!@Ïz9šVPì´0ÆP0+‰M:çûPF¨ùY3»o¡®èŒôãž1Ã2)FVŽ3ÄIýªˆ ’Tbµ‚?±™qæ ö8é]ÛBάñ¡a¬zŠqPCÏô§Î§¤XM{|"UÍéŠéüC¤ ôäxÁi!܊ׂ!B"@¹<ã½Y±ºc¯Ö‡=n 'œè먛€–O $ŒúV¿‹-˜¥½Ë67¦Gø×W¤–’$ÌAlw4·–pÝÂ#(Á¶ióëpåÒÇ ¤ÛjÑd™ã¶±úÖψ,eþĉQË-¿-ž§ë} Ž("…AØU{Ûsuhð/ü´R¹¥ÍwqZÇ¢O{ІÏ¼ 7ËØV¿‹,¦“˹ઇØÖÞ•£Å¥Ãò’ÎßyZ’þØÞ$–òpŒ#ëUÍ­ÐXã´K{éͦ8#`]J³ gÄm"œ¬l0ÞÀÔšÞ£¬?ÙÖclh>|uÍiøjÈZZ‡aûÉ0ßAM騼Ž{Äâ×d ‘ŒÇÒ›«[\ {k©Ü³Ê¿1=±Ò» í Öòõ.œ>á‚W±úÒjÚ8Õ-ã‚6# ûP¤‡cšŠæfðÄÂS¹A >•/ƒ¦U»™ã|yü«v÷AD6ç 0>¦©hÚÖ‰;Í+©HÏÔu¢êÁcYÄï ʬ¥Ž>µ{ÄÖ Ï¡>]Â>›…]°ð…ÏÛ•ï yhwqón®²÷L†öÀÚIÆ0§û¿J\ú…›8ÍÄÏgvo1#¯4ÏN%Õ#P1²1Ÿ­lè^ûÓIz¨Ç¢¤ñ†noõUšÔ& 1=ˆ§Ì¹…gbœó…ðlA{¨SõÍQð½ýŽòÅ[ÒFý½ë¦¹ðÑ“C†Ê)d#-ÛÞ¬èúzD;s¾VåßoZ\ÊÌJ>7sý— ÕÆGá\¾­Üé²¢O1dlï^‰©Z û!* d!sêk“·Òáo®ÂyÛ¾ï÷G·½jÖ–·(ø®á¯/àAÆáG΢×íe³·ÓщÊÄ8÷Í^ðürêºìš„¹!2A=aøV÷ˆô uháò¥ÿ½7+4„•Ñɽ棡…#0@FçõÍMáù­õ³¨-§Û밃é‡dÓA ì§-êǽTðׇdÒÌòÝ29Ú¸n8¡Ê6 mÕàÄmuŒ…˜°nøÊâKÍ:ÆtS亖ϡ5>¥àÖ¹Õ<ØG Ÿ3{}+¢“H‚mt÷åBè}is-Ìä4?ÛEd¶wYPªB·cíQxfÖK›ë‰Ë1²«öу®EðYœ pq¸7$Wy§YÃih¶ð Hרýèm-†‘䥤ÓõÄeã~C{W¢xÄQjiäl)2.Xö" ñ…â¿&kPq×ýª¹áÝ t«R!ž@|Æöô¢M4±ÀjŽGˆ§~ïÉö5«ãË™žÚ9lh”ÿ{"¦>¼›V»™¸?sZ^%ðýö¡5°·¢Š0™-Èõ4î®…fWð¾ª!ÑåUBM¼lìݽ…;úlÚæ¢Ú¥éÜ|ŠzA] Û[híh2 ŠVFNEiÚÚÃe C lx.]‡aÓÆVÖ_-@}¤øñ¸%¸¶ÕX³æ¬œc®s^ÝÀûŠæað…”ZÙ¾,íóÙÛ&”ed7œ7ˆtÙ¬.ãy[t“©sìOQ[7¦í< ÊHS >û{fº}sÃê÷vò¼ä$Cvõ«·šdWšsÙH?vT(Ç·J|è\ºžgá[Û›]fâ'l¬ÜUÍrþÿLñ4’™Km9MÝ6šêôoŤÝÇteß*œ¯­\Ö|;i®ó Y£Jnk˜9t8½KÄ-â+Xìb²>nàAλ iI²’L®C1=3Rhú¦¹c]Ò®ÝMk6ƒž*e+ì [rCÀ`Ý1ÔWjÚx$šÒÜ—Ý/Üó^›­jƒHÓdº(_Ôú×áµ}SÅFîR2`w&œ4Wz•¯Ù-aˆ* _ʸÏømÚwÔmW*FeAëê+½`~Sž¦*®•=sP¤Ó¹VÐã|§ÜꙤù …Tñ7†Ìº´FÉpg¾:du5ÝÚp?JkÆZ3ޏ=}iókt+u†›£F°†ŒÍ&nÆOÒ¹_Çl5XÅ  nòýMQÔ`ÔçÖ$Y}Çn;ÕÕxoÂæßWà4¤ÿÿ^¯mE¸k:$Ú–Ñ/çÅÂûVTz ¶>¸¸¹g.W n€žµè‹…héG”®˜q{ÏØ®Tpžðô…ÓQ¹QNbSÞ£Öt ÝGÄÒ¢"6 ï=1^$cË ÐML+ñÉÀæŸ>·Tr/°¸’ÆÒÕ݃;W§©áß Ã¦Ú3ËóÍ*€Àô·dÃÈ9þTå“ÏÖ—3°Y\òíCÃw®ÉiD‡;•¶íð®çEðͦ–ÙwÜËŸ_jÝA‚ž•&GLry¡Í½$Fœtõ¤À$Ö¤ÈÈ¥LrqR2!œ•ö§B˜'Ž´öb@ëK‰Zv§+f“pÅ ëHç4Ð}ƒR(Ëà÷¨Ø;·æÈ;OJ¯0È4“Q²àry¥a•OÍŒŽõe žµ„zSN0§è©£Î0¦¬*ì'šË‚vW 8É­ã’ RÔ–L‘ɦ²÷=©T\Tœ@¦"“NÈ'§J`M‡q4ì‚O4†8ÞN;R62HïM ¹ žÕ0É ?Sšw8¦)Ň×[Z‹Kt‰y äŸzÇÒ-cº½ŸP‘0»ŽÑßž†º p ö¢LfŠ•¾Á–ü¨Òu[fÒ‚I ĸ õÀ­=NÜ^Y=»ƒaáY<ânÛ¯*¹o𦚵„ÑOIŠIµ)n•p‹¹É>õš‘Ýê¤\$ÙÚÃa´â „sïšäî´;ŸíSHDEÜ:¦š`Ñ7ˆç †$þ#˜­M:ŸM¶ÜˆY@a•è}«Ä6²AäwP6ç×ëMÒlïîI"nïøQmìè/‘ZÂe~›Iü«”°´I๕‰ îÔ⺽MŠéÓá+˜°ŸÊ°º-÷vãñ"ˆƒ 4zÌ„€ÒÀÔVhË{·ÉÊ~ó³K™4IÓ<¬€Ÿ¡«ZÄ }&-ÉõöŒwW0¤¶©’_ ÔöZ›ÛÀñH dÉO­Y¸‰b×" €sUMºG®Ã¹³Ÿ­-³Ôî ðIòVN+Ò§Ôuw‰¼˜ :šeü%5Hz¸äzY,ÆIœíË6M4“ΊÓRC¦¼òõ4ûmU'²’gùDg§®k2M;ÈÑžg$HÅH_JŠÎÁî4Ù¥òF ÜœRåC»:M:î;èòœsƒT¼C[,•ÉÏ©xi[í>ï“V®¼ÙÒälwüê-i÷E¡627£¿%ݽ´ƒÍ”)=jÉÒî>É¢M'£õ˜Ñ­Í¬·SJLÅ‚¨õ§Ëv.k#g\ÄšpdÁRÀçëIáéɲh±÷OãT@—þ÷Y”€Ž ~5^ÚK´Ó‰¶R1ÜêÜý)Ûݰ_S°ÃäLR³e¬­UŠ-åâqÎ}jž«¬ÏèH2‚2z¯ZŽW{äuÛ B[¡Å:.QNyCEÔÛS²ÞˇŒ…lt«± „ã×¥+t “KÓx¨°HÏæ*VGÖÏáH.WBFí¼ûSàrå³ôÅ9±5)s‘Å1ßÀµ嘠 æƒ»#Ðë—¸¤ v&<Áâ‘ò¨¡;w©¥PÑ€‡*ch&˜†£d¨=HÇ4³b<ÔñI1é:aº5$s@îaÚÉ|nY‹îbåLšÖX‘@ Št`dlS’2d8”˜&I‘󚜸ÙÇ~*Bè¤S‰*ƒ&„ =<r¸=y"S$õ¨Šœà=¨ Œ'W/â]SÔ¯ã0`ÁÆïº}y®‘Ám÷«X,Ž(½µæV‘¥E£Ù$*w;räúÖ©!n€Ô¼T¬ÃŒqC×PD£æÛƒÒ‡`Ñ•8™czÔ.’ÝÏÄM¸`ëÐTm(Á暊\ŒŽ5cM£¹¤ Œ•Ë1š¹o'å88žXAóŸZ’q@!ƒ!سgŠTaó÷M5¢s8#î÷§ÉL•éB¶²zpÊÀ¥643Îs@ Ñ•d‘ú“Ö¤@$öíLìA»¨æ¤‚™õ DçrsšPàM‘Ϧj5ŒàzTi¿Ì1&^lžO9¨ç&¥ó­S”móœÐîYfÆ9ȨbeÎà俤 ûœLµ@&p}3J¸ðÊ_m3ÉŽvŒ)%ˆ÷4ªƒí ¹Å/8Îzõ¦#’ÞÀc–$x˜}ÓÒ™ga&ë{Xã$J­[…G—¹¸ S¤‚㡦ˆ8zbšò*FÄž} $¨!ç4ÃÏ‚y¥`¸àäÂïRY=xüª<Óiü)V`cÆ9¥`¹T¡.X/9ëÞ¬,eºñO„oÎ*ÆÌt¦4@ÊaiÁ†WÖ‘ó½GLšQòçÔT#´ŒUYd ‚NÑœW1„'Ú˜‘†È#œÓ³µ÷ôýƒ84âp¢£Vùéªû¤cÓ:œŠFQíšQ&:Ó†sL;T Þ´Âê¥HÊÎ*Œ±è) k¶þióÞ´Œ£n )êÞõ¨— "½k5”b›´gڋع®§¹ê*Bß&ê§ÌnIÍX-»µ2Fœ2g~¦¥\‚zž*)ƒ6Œâ˜„Vë)­ƒœSü²ÈAëPG‘†SÍ!œ(椘¢ŸV ZW¢‡â™,lMÁSÚ›(%(ûŸ,§äZÂþµNòÓíÖ¦r ‘úUÇ8š¸<šAcn-!1ïÈÎjË>MFÞ)À`ŠbÍœzš˜ÈƒéQ> ‰CÎrzP̼‚z ‡Ëvj´¬£©¦y˜B9€–êÒ ÐŸh]ê‡rŠBR!òƒŒT!œÇÁéB† äõ¢ã± à{‹Y"þòœVRi2E¥¼·Àñ['=é…ùÆ(L™g¦¤v/ ƒæq‡úÖ~Ÿ¦4z£W{P¤ žð^è“I³o ïUôBN“¨Ô/ê1Z—º™¤›h#ê*ž—sk¤Ü†âI…Ôî¬+2§‡¥g’&lzâµ¼DLzY¦áš¯¡hû.§9$*žÞõ«©YhY4àõQI¿xÍØÆ.4 ¸óó£oªÚ3Z}µ>×÷W•;¸Þµ¼=¥L¯rg¡¹¬»ýâÖïÊD,ŽvGOΪè ~EþÍ_+€ÈéG‡B6šÃƒ½ˆ+íEÆ‹"xtÅ¿÷‘Ÿ0_jÆÒà;ͺCÇ<Š]ÔWìuÕP~a äzÕñAö$b£Îf}Hªv°[]k„RaV Äþ”ïÚÏÒÊÜÀÀ*{:ˆÚðÅœ¶–.òqæqèJ¶5{S~m± Àö¬/ _\Ë3Û<¥¢Ú0OcY÷:]ëk©.ìY[úæ—.º…ô;Æ<ØŽÎ mì#Žwß"¸ý*Ó((Ve¡*ã>´Lå\S„gÒœbYÜPv+S'^TúÔÀgÒœÊÔF×4Œ Ê85"È„n§Š{¯Îa@Ne!TqëRÝaØ •PÈë҉ⓧڌÝjH¥Ý ô4øí‚Fúæ”[ùG*p 0:†ÇJ…ðñ­X|²qMò Ø}é C;SU?yž„ô«€¡Ojdq”#wLЦùO^)ÜycOJtð‡L­6(ðƒ=¨ArDÈ„õ¡€ 9pP;Òl€xPЊ…p$Æqš”ç@¦ÀL Í0]¹je` Õ ñÖž0ŒŠÈ/Çj°h ¨¥P¨vŽH§£nëH}Hà&2sÍ6RƒƒšrnòØ7cU. %ÖDcŒÓ°‹1ä=©±ŒL KÄc=zÓ‚y€‘Å XE%ºCQynÖ¬¦ƒÞŽgØ›ˆ¨¤”4eS½Jv°Ú{ÕwŒ¦í´X !B!*zštØÀõël°PÜb–XÈÜTæ€;Æ)üô¦[#Éç¥J¤ŠCæiÐFE5ã$åzS£%HÀ 2¶<’8úU[‡&@¡yÎkB@§aTeRNTP“ÆHŒî¨à9sÖ—vøÂާB™4ÄW'7YéSJ@æ‘àS eŠ&Q(±@\|‡B)ÎILïU-æwâÏåVZBwcŒœâ‹d3H õÅ6Ý€CIĹãjHa*0Ƈ ‚oÞš¨p}ªWŒ)àÑæCÅ.…¬"ãÖ§Y@^µ]¢i}@Vmü ¡rÔ„ÈàñNLO­F°»ãø ¸+ô¥~cÍ#óÍ<¦PÆ€#céI)Î1R0Å4ÇŒ` €õ§¡ïŠ%LƤv¤Œ’{P˜úR¶ãëHAúÐ>Xöô4€œ"â•@\äЙ0縡³ä“ŒÒ€qääzЋÀ春Œ'#Þ¤î4€\Uy¼Ô\§ Õ–§;¦"²—m¹ãŽ•hÇÍ!@4ðûP1’(À¤EÂdÒH>LúñB±1ŸöMhPDZÐcáGZPý)›€LP{ÔÑü ÓW­=q@†rO)ÞPbãÅ) ô§EŒ09õ¢D#kÏ4¨4áÈ" Ll-èièÇ?/J2±œ÷5*F?J"dÏ&™“ÈÆ JžØ¦mäÐ7“Öš¬IÅHs°M@8QÖ’( `çšnЧá¸pÞ´˜gcš4¦× ¤A´ð:ÓË ˜#$Rg$PLO9Ï^• …‡àô«÷‹)ãÉrÁsÍ1GFGÑ1o0mJ™G :óLn\ð Èæ¬>v'ŠŒcŒä€j)b’GL9â€&r ?)¡TëÖ”€¡TuïNWÇ\ÒŸŸîïX~ ñ:$crïš@v(þµÊ[Mâ/Lïopð@=ªý8ïMDW=[˜Sƒ*?5U:Þ›lÝÁ‘×çÍo¶"ëQ¥=Ãp e^øx yçÌÀàÚM5ú…™ÞÛêV·€˜.#÷XUÇŒf¼<=æ›pvù°H§§*k¦Ò›Äú¼Ñ´SÈ#\–Úö¦éù‚g¦—¾sM?9VúI-´©¥ÉdãÔþ5ËxIuV¸¹»»i ,½}…E´ÎÙ°È1ÔTQEYÀùÛŒš_݇lsÛ½91Œ†'¥!Š"-לzÒ§ZTuïO$5Dƒï;T±(_Æ¢PÅÎ{š²£oS1 ¦ÆEM÷qšN<ÁŠCÀp@â(=©ü–eÇ8¨€rà(sH0ZUÁÏ­(>”…pI‘2&ãÖœ«»ð¥9.8§í9Æ(›I<ô¦ˆÇ;j] šŒ²Ž”€‰â1Tä·}ÿ|â´È;1U›åâ•V"½óŠ’Þc„ôì`ŸzÁÈÅ.£{‘eGÞëR¼Ác&¤ œîJ²qE8ÖÜŠ¡ F(È4„æ°Ä§u¤f¡E@¨Ü §4ýÃÕI¦.p(+¾ é@b8§í¥ RÞM=1ŠsNÛŠUœŠ)ÀbÆìRìÀô¤»ŸÂ€3»ØT)Œ•õ©‚’P4E\6iˆi„*UB0Nx«òåzŒ¯"˜ óL'÷©º\”â€$ÈòÄ~‡4äÆsMs‡cêH§¯CLc—®îÝéÌwFxç‚£ A4õùÑé ‘2Oáš”dŽ*bx¶*DE€\`e©01C1òÁ>´ïOqH.Ý€{´ŽÛ#8ïJ%ñHNñŒtæ„§!O¨5#|£5#ƒS60¦Ÿ¸ (Q'áLP¤ô§”lPëCdFO½H¸縦ðÉŠV¡$sS/9¨Šp„v4ñé@w­5Ø ¦•ÎcÔ…8P{ÐÎ nö§¸”× Ô0%f˜Ÿ.)OÌ€Q(ù¤¤¿ªûÓÁ%j‚PrŸZ”¾ÑøP¹*2=*ƒ"‚iŒÀÇœT íÜP[wøýš±œGÉËcŠie8ipœc€PÅ£ÚxÍ,kŽ;Sw#Zt}C{Ð7gæ8À£ŽùÍL,&8=éäþî˜F9Î# J:DXÃgêh$y8õ¤ŒœžÔˆpì{•>ñ÷© z‰ˆ~GjPçM9Ró³ Óvžãšx朧¥.Þj·n”·‚E"¶sS( 5M!Þ= ;ø? j¨cŠrùZÓAý©WäGÕÇ9 îž:v¥ÀÈÏ_jB}ƒÓ ÅhêÝÏ&—oðúP¨ ƒžE8¡?04 ;¸ô¡w xÑsŽ F$óŸáÎ9É\ ‘ÕHÀÅGÆÓ“@ fÄ£ÓñÈŽCöÅ0Žô1…<÷éOÛ‹pÄri ‰AP¹Š–"Ä1=)81äu§@Åcló@ @ÇF½9ïJFôféÆ)cPcr ;$šV9ǵ |éJáŸJ@&@€–•£%3ëOEýÙõ4^M"à 7–Ï4"S§©¸ ¤‘Šz±ã½‡yëL€#ÓËr2hU ‘ÔbŒb€˜’;ÔÉÓŠ})û€Ç½ ã#½’)#_œŠ I€SÜŠ#;†sƒLßëJ¤PxlžÔÄ“œR BÉŒŸš€JÈ"€# >”å?>MFHÝÀÅ*š¡€|Óߊ—qÎÑLRrHô§ê@ç† 7šA^£5瞔윃Úa‡^´1ÀÕÁ}¼ñE‚âíŒÔæ”.yÆ(fÆÞjLüøö b—­9IÈÅ1ò±QH H#8<nÃëÔTA™pOsO YèËxÇAKÛº†,ÜD3ÂòÃ<×)áïK£¸·¸RðIÖ½O—`¼šÃ»ðΗy!i-@9$‘òäÕÆJÖd´X·ñ.—yjÓErœT¶ÓúÕ[o[L^Gx¡xåÆOà+.ëáõ™Gh.%W#*§ ªÐxF€ý¢÷ήáùñE¢bø£Å6·6g°œ´ŽÀ1àU? xjK©…ýÐ"5æ0‰½k Ò¼§Ùíy—태·OʺuV1¨UzQÌ’²!ñ4ó?ˆ§iT¤ˆFÌú•×Y[Íâ 쾋ɑÕ·÷°:ÖÆ¥áëíF+é—s¦» ÑŽ0‰„QÐzMËD+-43éwïçŽHØ®FTœ~UÓø)ï®uV—ÎÛ ;‰n k°Õ<9c¬fM³(ǘ:ÔúV—k¤Û¥¼#sxŠnI ±m˜“Ž*b0‡Öœ¸É⇠gq‹…Á/ àqLÁý)ªXçq©ðXqžô`ùíHŒGÌ:SŽ€$`“œÔ™ÜEA»iéJŠLqšs0T-žðAÇ&€°4üç½1ˆ'­8s@éP<¥\+äTRÇŽäí¨¤CëÚ’E9M g_¿ƒHa€iÆM“#½ 7¦Þõ,döà'¥ON)‘E¶<´±1éïT‰gE4} ¬CÍ+ŒS)ˆy`½j'¸Uy¥$•¦šÒ±~iLÓ”b—nPŠ9{{Ó¿éH«Œ{Sˆêh¼S±“L§æ˜€àR‚7âŽhèû¨ÜOJk³š3ÏãNp4€´òÙÏAA4Àrž[é@éøÓÈ4£åûЛ‚=¹§Û¨Évã*3–~:Ô¤…@ƒ·'ë@ÞÞ[«T(>ù§—ïÛ¥)ÀÁ­FëMä4‹” M ·\Ð0ŒÊ;æ§Sɵ®I5*0Z,`e¹¥ #Á=Í4(˃éOP6c) P7#g§jIAMO˜cµH>QŠq!=iŠ¡OJ‘q‚Æ™´ç4,~¤~• Ë ã“I¸0Ï¡§Ÿ¸1@ w܃ڜ‡8û‘@òȧñåãšGÉz©P¦”Мu"‚Üjl§R°ÊlB2žÔã÷Þ€ßqE!iì0ö§àlúÐ1"^´d°Á çÖœH)Å#Á7qQÈØ {“ÍH qŠd‹ÓÚ€%g!éš®§˜îÐU‡CÈç©Ãm0¸y9AÜf e0Ã'Ò¦ÿ–kŠŒ0Ù»Õ".äÏj…O—·éSb9ÆÇ¡â Â:w¤Yõ9B;c­0`‚¥ÈD4ü‚ŸJÜšbdþ5#cœ@É*íH Á¤BJir0hÀƒ“íMDXÒ+a2Gz˜QŒÐàw§”å7$ŒÒ–Z)Ý‚3ɦ ©ÍHØE7vFÃOEí5c€:ÓÕŠýh¤•rj@H žæ¤IïQ·çH †4У$R(+N ‡'¨‘Æ­!fíRddtàÓ üý1CªäzÓ_œR)(`hTÁ&+ r¤Z“9¦?ßÔ±œ’i.ðÃÒ™‘ÓŠY6)¬L@ u!Ôô .×$äSec½~”«š`9N†©HÉü)„‚UqJä†P1Ǩ´2x´Å%H¢L­?Ž8¤_F{RžF(*çÖ‰ÈÐÝÏqJÏ4åP£ƒLumÊÃÏßËãÒœ%Gzdœ¿¨ ÏËAB94/ÌüðqNf`qÍ }óM'ž•!Ï­Iô4Àb•pH*\ƒM*@;F)W$/µ çhhÈ ‘Ö’L¸íM\ãPË€LcZ0qÍ(`p1E€bà†R`(ëRŒ4À7v :zÒª•—ñ£:Ò©mà7oJ\’Oµ86zM»O®M‚híØÀ÷¨X~øÕ>ÐÝE"€2 BGÆì´O¨Ý»H€ç-Þ€%'xúSHšs)ÙH}Üu–Ï)ü„ëÎ)ÄÖ°$ãÒ€#óB8¤, §È&£ÈÈ Å! w ýj2ãÌëC(ïÖ›\PÍ–#&šÄ`ñÒœHè=* #¤1F0sM,3HzÐçÞ¤bsÎY¶œôjª$D g/M¥&‚p+R“ÔÕYä G¥:Y¹**œÐTÀSUiãšÅ¥éH)Ù™#hZSÅŠ^‚…Í ¢˜‡f¶(4t ÈjiàI‚)7b€ ÜŠwPi¤æ—Þ€ü¨ãJ€"3÷4Æ;†)X–ÀíÒ€OZpl#¸¦úÒ)Å%S˜IïK¿äÈê1…8°ñÚ’­ì)­âš®3Rd2çÒ€à ¡ˆI”Œâ’6ÜüŠ~å¥4¼°ï@ÈüibÈN}(Q’hå†À)W„úÓÍŸjpfì8'Ú…9JBĦ)TmA@ :gÒ•0³Ô»AŽiUHìhE;¡Å+á“ BR8& úÐ}iäþçèaº5‚“n=¨L¦ž#ÒÄ úÓŸ˜E+È´ì|‡=) C»4 Ò0Ü›~†Ð┩Øi63@ÁÇî¦ùÓÛå4Šr™¤›ÀŒg©éOÎc%½)›w"ð09§2¢˜ ü¤è˜ïJ§÷{{Ò€{Ð!êÄ}ïJz‘ƒQªš‘@(I=(ä a!3ƒštgp4(ùáŠEÀÈ=©¡I;…<šr6Ô$ô pLÒ&>”oÅ8àc‘ÐУwz „Ò¦9ö Œ0 ­ÎO‘Â1œÓ‰$´ ÞW¼g<ñQ…'4è÷94 |„Ò»F¢&Šv1Å4®3@i=é3—Ýž( œöéPüï?Ê\ ‰ ÅÃàЪLƒŒPÇ8¦Ç¥&à®M.ñéN\o\622(râœÄÒš0P@Í8azÒ(">SJ ÇJ294¼m94ÃÖ“9pdv Dí€A"šT`àpiß}OcQ¾åŒšPÀ”¹äsL\`{Ӥªíüi y`zœÒ‘‘×¥0`ço\Rà¥HÚsÖœ‡Ïjh'£R¡å©  ¼äP ßžÔ„œåO¨Àžhã<óLepx§ýÚ2=)ÄMƒ#éN`{PX Šb“Lm84Õ8$1¥RAéÅ ¼Ž:š@9N})KƒHžª2ØÉÇJy}ªM';œÔdvRÇSš™I^;bŒ“JÃw~”ŒƒR€ p)šLg4»YG¶h$«ç@íæ‡#§†ÈR”Ü„Ò"fô¤õ&Ÿ³¢ÁSHg,AqŸ$ÔÇ9ÍG(ÊЂ¢j*ŒP6Iº“¨Í!  dŽ9¤Ï"—¹4¼j0ŸÓŸÒ£ ˜u¦"@rqíKH ŸJPÀg4go&¸œðÃ4ð2‹@'#4„w¥):ŒP7$SX€ÿ…+tÅ ÈÀt"3zЉG<Õ‰pÈèµU›÷€Ð  õ©Qs‘Mwn4¨ÛMH aŽ;b‘I(Ëßµ*sŠ@2(')·½/TÒš:~4â1Š@<¸úP§÷€ö¦784ä{P÷'ËR)ÚO½D²ÉÇJpË@,y=~´èJ˜ÈÇÍL^ÿJr”€–1žsÒœ¸Þô‘¨©Ë÷ 1õ¤™ô¦óåã½"å¿ M4Fpj$b2*Uj*“°ƒÅ*Ôö¦îésé@Ý õ4çÂÆ­FI }jFRPPø©óÔqQî <Ó•ƒŠpa×Þ”r7APp{QÈa@ÇîÈɦ¯­ ~B´åȤ¿§z'>”ŠÀƒÇzXÛ¨ 8@ÀŽœÒÅ pJöõ§žýécdf€ æ•sâš§"¤‚M0äR)Œu¡½hš(!iHÖ›œ¾iÀÐ ÇCO~:TjÁ‰SN(9æÆ øTŠr*A˜c¡R!˲öï@ëÚ¦«|åI&œ8ü(QÁ, )&£Æ 5,d0 Žóš°Gò¡©äf€aéJHô¦Ž(ÜZ€áŠpçÒš0Nyâ¥88äŠD¹;˜Š]ƒ­H@ àÓGãŠ]½À§+qŽ3L “špÁí@…,}8§giHéÅ''"‹HÍ…ÔÓYI #<~tËH#³µFNÑëTÜ`Ó”|™¦`0äÒ€ÀqÈ©À–ÜsÚ•I>•â œbœŽ®‡#š`?¯QA8 Þƒ +Œw þï@'§\SU²§Å"9Ý~iLa²¹äÐ)¤rIâ© = ¶ÂF3A($ö£r°Ï­7plqÞ¤RIt¨ÂgîãéÀã9êxü);S˜†@G¥0®zÒ–‰¿jç±¥-œc¥4àÑé@Åv£8ÆqO~phà zÒŒ&˜ßpÒ–¢‘À⬒!Ö¤y©Wšvh”) Óòy œ`ÒQÔ☇g”R/¥8ö¥"™NP¨ã&—(ÎE @íÜR¼)Å ò• AòZ 8ãø³Hß5:ß’ÞÀÐÈHȨYEHÇ‚ZŒœLˆžEH oäSU2N)S94¡6–Å,mh ‘B ½ ¼d{ÓºƒK·“IŒPÃåsCg9íŠ^¸:T°äçšçð§ÆphAò“žhËmùx4æM¹>Ô ù3@ÚÅ8‘Œ’ä•d¹¦ÄÝ»æ¤uÝ@YzÒ‚0qÞšÊ1Óµ*•ã€Uu§œv¦°SPc$š“ž#9"¢Üȧ+ü”¸ã¥.N1Aa° A¸t cL„˜8PS"›·œÓØÏjjw/¥:;u¦£©ïÍ=N¨Ï’8¥B94™Àâ–>àР ’Jz‘ƒŽµðN:S÷Å9I§F~öj5dçÒœ‡ç"€ ÙÈôÊ©4å#¸…"ž Kc½.1Ôæ… Œ‘H¥O\ÆC9ôÅ NóéM^¸3ŒóL,;‰ã“JªAÅDþU&sÎi É.Zh#4þ¤hpLu¦ù²jŸ˜MR3…Å ¿6(Ê“éMˆÎiGÍT€\sšrž0j,r:T…ºqHº}iP$Bv•8æŒg«ÐFϩþ=j•(?\ÓÇã¯z•s“ô¤ÎãÍ‘’#øïHc—ƒ×¥;p/Çj‹?¼9¥ ©(ûÜR8*âšN§ç=h_;ÔnêiìT}“éŠc°=Å*–2Ú‚2iHãŒP!dù°)B²¨ÒõúÓ•­4±ÀïB±æâÛÞ—©Å&GjFãœÒ‘‚8Ï=©ì€ûP¹ Rd‡À¦Þ¹ö§d¼PÌ<ÁFáæŠc}ÿ­#g·ZVËg…:Òo#R³ŠzäcÚžIØ}j䑆5!ŒÐ0VÊàÒ(È4¹zÒ¯ òŠø89§§äÒ©'­)Æ FA9ÁÍ3Ó‡c@fSŒär^irŠj“Í9py B)ýã{ÓòsQŒäÒrh*±'¥46šfîù¦™ é@ wÚhlR¢QT1ã­.ìýi’†2Œš°¬¹ tÅ;.jAêÕ30;ÒÒÜ})7ç×`FÞô†@¬±ãŸZ@Ç8§@® âšàã©JRŸ"—Œb˜8œÒà`“@Î å$ñQ–=éþ^y¤ÛLCÅNçŠzžœÓîh¤­þ”ÉÇiá‡j’(õÀq;€4˜ÈȤ)è(ÓóÁ4ÒFqKÒ€OÀý©1€ PØ‚8â‘ÊÓyªw@dælGúŠ@Î}©ñ€°süDÓ9=j29J’N¸üiœ#=¨žièpI¦ªriTœÐÜÓMÏ"€$ÏQCª´€d}x¦ýÓƒ@8Îi²pêi[ŠGù†hàoNj%c’)êp(\u¤„Ü0>hO–1õ¨ÕÈíRÅH9ô©•¸'Ö¡EÝ“OÆÒJä¤\f‘¹S€àzP1Cn¡‰¥¤HCC0¼zk’§Šrö ²…õ©zP¹â¤2 Š(Ô¹ ‡“ÅFr~jtg¨õ ²p©cû„žÔ@ÿVq@Á ÓÑG>ÔÅoŠlyó@‡Í:2@8ÅäéJ§ b‚yõ§GžM"½ô¥@ "€$ÈÎ@Å)ÆE!¤0VÁ¤gù¨Kx=è/žµ-"D”«œž´ðÈï»=* ñM ‡"’c±h°ÈÇzQ%V ƒCJ.ßJw‹MŽ)U±Ò¡I Šr3¸{ÓB°àÙrHíF|­&îiÁOQ@‡ƒž¥ sô§)äS`p)…¾­À8ã­# “Zl«á¶œÐnIïQ“”ÇzH8$óÅ $`IsI¸’F1J^PäÓKÇž´À\ =©ñžC‚)€üàqÞžUDƒǶwä÷¥8ß“éM*OÖ$c/Þü)V@N; lxäšsà.#ÆïCÒ€ž)¹Í.Ó‘ƒÞ”ã° Ù~uÅ ÅQ‚Œœ2AÈÁÅË@†BòHv¶G¥N™SëL ϵùÆ(@~|ô¡ÀÎsÖ£pwþå%¸4»ˆãùR³¾”Ði®¡+@ó@|úŠs27×µRq+09vÛS³ €·€ŠBpE7=9¥$ Sƒß„ 4a€äPdŽ‚šüóšc’¥ù© •H ךvO]ÔÁ‚0E&ð¼‚ËøÔnåN3JI)ËȪ<Â4<ö©£pà6:Šå9ŽÔy€|½) qÊôæ„Á$š`gžƒx4ýÜÒ1ÃÒ°óÞu&€œŽ9&‘~W&šäzS"ÎòsÆhÒ0Î)ÄœóQ$àö¡ÎNs@©Jp5MXÇÔæ¤w<C"”<°èjFÆA=iˇj<àæ X±•²1–¦0=iÌF'A¥#3m QdÅLäǯÃ+dQÒ¢VÅ?5H9Í4‚)ÝiÍ2AN2i@ÏãH£iwS¤jUÁÉÍ4œÐ¦˜ i})<úR„ cç¥VàÓbÇã@”¤Lœ@ ç'éH¤“øÓÈɤa‰ŠVb*yOÈŠ;sP(Ý0ô©™ƒ9úb€#g Î)‹Œ’)ÜoÅGƒ“@%# l`JhGsíJëIÓ7a(V?tŠiäæŒÆ *ŒàzИR/9¥Æ3M-Š@(S­,dÃÒ(O˜8 æœàqAÃ&? #PƒŽ™ãë@‰TñJIL^þæ¦à¥&ržÆœŒƒj@ hxðÆ‘ÁW8¤'n¤fç4eœUˆ€#š‰—=)êØÂ“Í ê~ôޏÅ+¶}hÎð=¨Åp§Å5› S‰ù 3³GÂb•†PR(ÊÃ…Å"§Ö€ñ@„ÚFæ¨@ëH¬JQ)Ë1ü(aÓ—ïTQ8`Ã*‘Ú ñ¥f¼sQM&RÀ Ôhx9©¶|œ­ cš‹r0qøQËÓ– ÔóHàïE‚â}Ò)Äò*M€bšêI¢Áq‚C¼V¹õ¨3>‚–G9ZhL” ¿Šg´2ï|笑ïK+“ך sÍ0ämǯJk«yÀƒÒ¤8ÈÅ&ñœRáóÛi…°qJd€sÒ¥,lg ôi"’OÍøS\øS72u§“žOd‚iûˆ#™ÓNAµ?9§¨¤SŸ¨¦ç.)s‡Å3î‘N=EKm“¤y3Æ) IæÞ”†.@Æy£pgšFÌ kžF BËãµ/sMa’7œÒÁÆJ\=)íœòj¼„œOGãæ&ˆÏß©p6õ¤$ëCŒŠUã­#(4Ÿ6ÌN\ÁÅ3IÓ4®£I4Á–špá8¤ì'S@(9©8Ùõ Å—çµKÁäb£'‘êhŨYŠôÒ–Á ŽÕur1Ç4åBd<öÍJ©ŒTjvœÔªw¡ Î\Œö¢8ÎNMFC+œzTèÄ›¥!”à€9§8,f‰HNix8"giÆiåˆ#Ò  ƒÔu©F~´¯œýi¡ÂðI¥“œb£a·“H±ýçµMž2j³ð@üjElœP NÎ)™£5HüšPM3=i})’;u jht4 piˆr^£Î)ÊNE0xÍ!ç ä1¤ 4 æ(<ô  1Á4ªi‡JvAæ€?0´Œ4ŠF9Ï4øœ ÙêzSœ –ìF¸TUïœÓ˜à}h¡†x¤'4§@}©§‚hèv¥(é¨r˜÷¥4üåE Àô€üƒëHNöƒÒšTäb†Ê‘î)XáÔЃNÀ4æÁÅ5¸¤1ƒ'4øò8¦¯5 #i=èAÔv©yòxƒQ&NiêN=¨õ9…9Y‚“LSÁ©ýÙ _pɧ‰ÅD¼ R7Pœ’¦’}8¤O"€ø샃Q¹éõ§tÅ NFÚ Ø¥5€±”À|mÆO­O·ä¥s„ZC?»ïJM+ 4!Âë@l†\ݨQOµFç­*4²€*dS“Q+Ïj–64ŒÓ—8¦+RØ;h¸äŒ{ÒÆFv°¦ÏNÔ¢@xÇ4"÷÷¤’´Õ$¸4«ä“H.;%9Õl¿ÍN2V˜¼š?îõ¤Îy•+° ÷ (S•éš„ü¹=3NL1¥œ4Šƒ¦iXcݰFh,£Žf)ÅVWïT¶4‹ë&_dlš‰\äJ—&€h²§“JU'#šŽ.5 â@*ɳÛïR$ŽÔÂ|úR“¸äP!CIíM߃’i Æhdºq@ [Ò¦Üçu1€\sB•ÏJ.;1úõ§`¦­ 󯃤È܃ŠrämúÓdÈ“ŠdÒägžôàIÁdisplay); pixaDestroy(&pixa); pixDestroy(&pix); pixa = TestHardlight("hardlight2_1.jpg", "hardlight2_2.jpg", rp); pix = pixaDisplay(pixa, 0, 500); regTestWritePixAndCheck(rp, pix, IFF_PNG); pixDisplayWithTitle(pix, 0, 0, NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pix); return regTestCleanup(rp); } static PIXA * TestHardlight(const char *file1, const char *file2, L_REGPARAMS *rp) { PIX *pixs1, *pixs2, *pixt1, *pixt2, *pixd; PIXA *pixa; PROCNAME("TestHardlight"); /* Read in images */ pixs1 = pixRead(file1); pixs2 = pixRead(file2); if (!pixs1) return (PIXA *)ERROR_PTR("pixs1 not read", procName, NULL); if (!pixs2) return (PIXA *)ERROR_PTR("pixs2 not read", procName, NULL); pixa = pixaCreate(0); /* ---------- Test not-in-place; no colormaps ----------- */ pixSaveTiled(pixs1, pixa, 1.0, 1, 20, 32); pixSaveTiled(pixs2, pixa, 1.0, 0, 20, 0); pixd = pixBlendHardLight(NULL, pixs1, pixs2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixDestroy(&pixd); pixt2 = pixConvertTo32(pixs2); pixd = pixBlendHardLight(NULL, pixs1, pixt2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt2); pixDestroy(&pixd); pixd = pixBlendHardLight(NULL, pixs2, pixs1, 0, 0, 1.0); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixDestroy(&pixd); /* ---------- Test not-in-place; colormaps ----------- */ pixt1 = pixMedianCutQuant(pixs1, 0); if (pixGetDepth(pixs2) == 8) pixt2 = pixConvertGrayToColormap8(pixs2, 8); else /* pixt2 = pixConvertTo8(pixs2, 1); */ pixt2 = pixMedianCutQuant(pixs2, 0); pixSaveTiled(pixt1, pixa, 1.0, 1, 20, 0); pixSaveTiled(pixt2, pixa, 1.0, 0, 20, 0); pixd = pixBlendHardLight(NULL, pixt1, pixs2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixSaveTiled(pixd, pixa, 1.0, 1, 20, 0); pixDestroy(&pixd); pixd = pixBlendHardLight(NULL, pixt1, pixt2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixDestroy(&pixd); pixd = pixBlendHardLight(NULL, pixt2, pixt1, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixd); /* ---------- Test in-place; no colormaps ----------- */ pixBlendHardLight(pixs1, pixs1, pixs2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixs1, IFF_PNG); pixSaveTiled(pixs1, pixa, 1.0, 1, 20, 0); pixDestroy(&pixs1); pixs1 = pixRead(file1); pixt2 = pixConvertTo32(pixs2); pixBlendHardLight(pixs1, pixs1, pixt2, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixs1, IFF_PNG); pixSaveTiled(pixs1, pixa, 1.0, 0, 20, 0); pixDestroy(&pixt2); pixDestroy(&pixs1); pixs1 = pixRead(file1); pixBlendHardLight(pixs2, pixs2, pixs1, 0, 0, 1.0); regTestWritePixAndCheck(rp, pixs2, IFF_PNG); pixSaveTiled(pixs2, pixa, 1.0, 0, 20, 0); pixDestroy(&pixs2); pixDestroy(&pixs1); pixDestroy(&pixs2); return pixa; } leptonica-1.70/prog/dreyfus8.png0000444000175000017500000010423310256452147014742 0ustar dandan‰PNG  IHDRIeb}gAMA± üa‡PLTE###$$$---333888BBBGGGQQQVVVWWW```fffkkktttuuuzzz„„„‰‰‰ŠŠŠ“““™™™žžž§§§¨¨¨­­­±±±···¼¼¼½½½ÆÆÆÌÌÌÑÑÑÚÚÚÛÛÛàààêêêïïïùùùÿÿÿlñ-ª8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœì½ W#¹Ò-*ð…W†‡X¶¹Ë^ö³êyHýÿßwcï)•i3Twu5çÜ/O åŸÅÜU¹þ5Íü :ê–Ýó lœo}}ý4¿)$»ñïß?¿$¿?ÄÞ»¾$Û+‰ ‘ÿ‰<Áõo¯æ³ë»B2ÍI/ý÷ß^Ñg×·‚d­ÆÑ–Š¿(yß;‚Ò·óÄ}+HîíßgW—%Údõ¼OËïñ»!éw‚ä^œë‘OMÊþ¯}`øH¾‘&7t¡d *{¾ ¿$'oäHJ§±ÔŽ$òÓw#ïïIõø$òæBÿ .°þ¥›wÿ´¦ú )*cy鎀[ãU?»þ/‚d@^ê6a [^‚•!Ïÿù5ýÂõ ‹0`O¼¾B7ëÍïq}#Hæp`ßQÁS ’}—ëAòJð›/_'â'wòÿÚõ} ù±¾kúYžþƒËùåëÛ@2ŒVÒå.¥ÔQº.vÝæŸ_Õ/\ß’$Õ”â1™ù3ç}^˹øw£§Ç?nè|ä’ú6To$ì—ájÓC¥úŸ))xWú‰ÝvµÁ[ü{zé÷d¼~àéR®žbÈ¥=+>¿óþ·€dŠ­=ðî¦r¿1£Ýÿ1RÝxH–;]?¾ïÉâkDÔ:n"ÃÖr%8½ÇtΓM¦tÖoýäÛhý­mÓU ÿLP& Nƒw'¤üúªÌÔ`ýR)Ó¶þ–C¾Jß’ñíªP|NëиØRðæýÉóò ÍßÈ(?õp0Á½ëìw€djpQäYsö|ˆÓNég¼ð·ŸI¿—ÐT„ð$r–ëÇ÷ ‰µ…ðBŠMàHp䎣 ?ñêMQ:Sù^ü3"Ëgò¯²”ïÉ\ÔIÈìYÎÇ"”»ƒ1FŸ¸–Ñ—*ÿOÑÿ#8)J¬ù:ÀB±»®=ôÛ@’W‚d|Â:ü»§½7•ˆéúNEu™HáþÏÀÑ?¤ŸÙG_¹ôWØñ÷‚$®]ž³¦¤Bâ&ŽÀ„•ÃIÌóáwq…,ÓyYX]¸pt#ÞÁªŠw’Ø¿$ÏD· 5W\sÕ±GÙ_åS—*{[¥ò•KôT½êÈW:U!ý<ú°wôûA2 n£–ê@9/`|xyÈ?‰:¤§òZ#i¯0ÿ‹i<@ið™U-BËVúƒ‡ *ü>HþÆÊ (n¢>â×cîù¡èqW‚¸ÍvñjL-êúמâŪÒ_æ@Ë·ríöq k>â(_†¤œµ—·JP`€8qýÙ?©ÁXø)VA`s÷à ª’´½.Ûû}›oœëýìï’9$Šó‚à"¥ñ‹¢åÞŠÀR‚t»œ”%­ËÒÞ1«>‚d¿Pu‘å¨fì±ë5öüÁÍ>¼.YORÿ„E¬Hw‡½Š4"é^$häùÓ¹ÏK!±™˜n ^œÈ–xŽ<tL6äõêêz,k)¼së/à$Rãm§n”Ç‚j€ðN$†71Á1†A:©çÂ¥AÒTdU#.;~ ‹·$ÚÒmºŒÛ¦!lÝEÜ÷XL>a ŠyS9'd-` 16{ Ï}R—_·ÞÉHú’nrl68f)ã÷ éåM³ †ª43MÝÄÒ°»úòYG¡ðÃAøJy4EÁèAC!{º€¤Èœ>’òÂ’ëO~æX2)·ÞË©x8!•7k²Ò2¥N=,©¼6¾>…¤‹å¦¼±èt­¦Ç1Ü>Åëç5x¹†_äUÊŠáF´²­‰!~º leµ^­)u p [œýÃáT˜õË< yß l©Â2¡è/è "kâÒ­êEÅ+Zêbê4·;Tm_ïЮSÏ€Q\nÒ¡0Ž|#h]Mb)ñö…%±W¼‘ÜB², xòú4ÁÛHæè“Üo¡ á­¡! sÈçà¦j©?ç°Õê\ᢑJ|ФØÔÖú;ݘ$ÀS\Á~e)` "¼¼¾ðZQ‡¹ ªŸEÙg8ù˜{À”«¢°­[S4õ ƒïíÊ=„ý}Ç7aLîFÊ}ùmÑxb®Y>ÞÍeQÆ9RxRÏeÅOE¾­[¤Û & KÉóSÕÏ´Cãg×°`žÖëÂ+@È,€©ªÜ¢œ¬ÜMNœ¸~É–óàH¶ŒôG¥Ñ´»çÞ’ç>¡ÓvUî¿×Ò¶¼=çV ®‡ ¹’mQ5ð?!uÙøTÃN »%pûAïÅŒÕļ¬j˜©=I¾.ü]@Âkåœäžåi”.&ëox†ªx…e͹ԥ.rß>†ä 𼉼)_} }a%ÄÂZëñeä_®pºfÅWpïÞðê‹ÕŸ’È¡ÝkP¥üX¾Ùv¼¬!’ ŠÚbÜàÕ¸Öy"‡åû½*ˆ i£*™8/néÃÅþDþE9^ñ¢]Cr¬;ñˆ:…\œâ†Ç˜x{úøtéåj¢ˆYçÅKlQ¢ ­%ÎI“ ʇ0§ˆMµZáD„ÖuQÙ\(dÌ‘½ Œ³øØ"´bW ˆ;«äçºz-ó5Ñ"°ÿqIÝkƒ}ùx Ì!9Öjjà^YJ¨¢àë2 ³~¸Su\»Ur&Æ^z'ßÚh xîÆÄWddžÔ/T€ †·²MµLÌoîI½ÊÃèÓö‚$c‘CÂ9â¤.Ô°Å‹»·í•mÊb ´q×u•³Wù—!yñ ¾J¨T÷s`è·ÖãsÃÍÅ7°-S(”¨em{‰Í{($·ŽÐɬ;®\í™ßŒÊÓ®jǯSèû Qleähr<-ËúGÕ°0ÂLeL¸îTw‘ŸâÆyCÐÙ^EÏû™ ¶Ž%^s®}ÉôØþdJÍhmgZ£)áÑ> 4f7Ù‚.wÛ\OZðs-ˆj›:AY—C6áàŸ€n’NP@[­ðÄEŠû‡uÒú%*ÝQu/–JÚWü)”}AeÈBÁ¬‚Nk|k^Ÿìƒüg®ºI[ÚB)ÿ"NÆ’‚F"ÎžØ°Ž€Çw±¨½ªÁû+ZP]Ç~kñ×´s%RÈêèùñ sgÊI}¬ªèææ.}¤“Í£ÉâÀˆåñ î7<~oî!P  ÕŒ+ÅË;8÷âI"ɽ†ÙH´A®9k>„ä²AÁ9ц+®l(ìˆÄ»hÐOÀrªl,t`jûzöÐ:=ªÊrÖf" lŽ¥=fÂaÍ›¦­*I$¡²áCJšçpޥɚ¿Ü™½9Èù×θ/xA°¢ó¾q+_±@>„dëçl¼Ó¬ŽK ãi*;y4Èï œdqËׄ þ,¼g§>C>ìæ‚éWR,Aj+"VºõÓžD+4U„øÍ?‰xÁöc [Á[å3vâÜý´”ˆÂx‚rGrcZHÖR˜Ðz}Ì'{œŒ~ ¦à˜FM#$9-¦EïõHÓrôš ™×h´pÛZŽúÙ~ÚöÄë]K䀡Én2D‡V—ŽFÈ3ì_€AäL­œêQç2ÈRg…iÑm´„%ÔGšo-,Oæ¹`²Ól–¦Ò’}Z{ôò\H:bËr³xŽ=$M|àV/ÀÀtZ0‘º ¿­ôƺa’–ˆ o"CÅDÚÖÍŠ!¡~Â%fÍ\U!?`²CqX^ÑxšêAso¶Úˆ„4Ò¾£)"êo1KoãÝÑÆqѾh'¨ŒfÄ-*ÜôÃJ7ºî™ú´Ä#÷ñT¹×Šw2Ìj©N5%³nDeíÝËñ‡w?êŸ"Qº n“ÌÈ‘Ž€aJyÈ”pRŽÊB¨×¾/©ò›ð4=äEˆývÔÏ¥Ár½ŒXÍ'v7:K †ð±‡$W{‘–Ö©Å0H³?NíËô伿9 ü:ͯ÷Fß‹"SÖ‡#ñQ½[åF½‚>VÞ=¤ç”«G‡€hÚKziInàÜ‹@E¢ÅÕH8…ŸdNÇŒ = Ú8)U\ºËœ Ù™™,pëE2ÙMe£ê¯«îBd[ØÅت|›O8@-ÍTJ޽©1ªì>ÃC ¥OCG¼ð€ML÷…²ˆñ&_¤âIðƒ“]˜ÌpsëC<Ãè:ÅÕJlBkøä§ÏHö` Ø¯k@c`-¸Òxé üÌ«–|ï pýý‚¿G!Rˆ–¨“ÊÆ $[~Üø4O Jx·hz1ï’({øzÜ H|®žpJÙÃÍÀ‹âûˆ*Ý ÁÎ*ä•X‘Þ¿yR‡ yà¢Ù2v@B‚¼.ÚODJèd^C?òŽÑÔ0d ¼Ï>Ìm.cŸúÌ…yUg5â¡x2ˆžûÑ÷’rúò•“ºÈšSbgÊŸñER‰t vñ²Ã½ÔÕ7£³O5X•7~Æ_Û‡É%Sß5Â$p i d —£ý) q} ÔôŸ™þ‰<¤Öœ’CF‰˜pÐsþE»[×éËâ•Ðd Ô,¼¾[бy´Ž¢)¶žÉÇÐÿ®É ò±‘áýHÊÿFâÏTÖŠ-`Kój´ÊG~"?áÌI©]ÂѪ|’Ô.k;½Bz:O‹^7ÍçT¼Õ»÷9v”úôÅN­( u\ $•®¡_Ïì7|4€4UŽ„¾cäÄh­z¥=PЩÀhAƒ %¥eû’ëHǃ©â&Md²Ðl^&ó!Ò£'üî®Üåç æ×rmC´¨Bâ%‡€´(Ë=08Dí21%£¢€‹4`Ã#]"ÎMÖ0»ÂcCÔ°B /õ°c±lÅ6‹ðžÈ*Wrâ1ÏB<§Ï€¿d˜À~i\Å1J~!¶(Æ ?§¨àk^þÉÔã"ÔãÏ2cæ -¦Ø ÈÄ)D×(J}òY3J&¶bÁÒ5~<,¢—=FÄ3cQÿTÊÝÐLö qä%I+ö÷BnvÎ'œ¦ñ’0kõÓŽ;1&Ô‚^vòë\C5ÜòÍô"²´A w\d~™ò$+ñ"Ôî54â5ÖJ~.gHnYZ§€dd±œ%!š#FvšÍˆýSãŽ^ÛŸ´ÌœyáÔÄ‚?]ɼiÒ¼*Èꦠ1–°»µœž=7KG‡è#X€"¤uSxùyåVϳü,‹£|ÖŽŽj»õ¡ Õµ>Óçš¹gŒXEd0XM'ýú[µRd¥'}Þ)ì¹Õ/zŠ$ sðÑ(‹-@fzäV=“.>ú¼ŒÛŠ5!ÇcÚ8Ôþçê¯tñ¥ þoDx#Ð!ç;‰j”0Éo¡`§q[FÓ6ÆÇ¨ºÂW êE†¿ I§Å0ž‘‘[3™²c;½Y)ßè#‹/NíxÍÞ½ ‚t%¥Çi’"øh‹iÅ6ð˜jW0¯Í:%àmìYäßn˜ tL–£A/K(b$ËíÎÁ¤%>½™µ·²F6Èb·Ôåi‡cŒË’ß dÕfJ¯Zc﫜Tnn…K4õ¼PÞxJHÀÅRíD€äÃÖ…]=Š®âÐ$i˜ ¹BÿeÕô—}²¢‡pT†))³„±>vƒ€“cP±£T'_ª»0Œ¥ˆl´Ì]áXGD¦ºP ©JÇÙb¡Aô£Ã¥oòSH³mU`Ýêvsº]Cö%wV  ý¢3“Ö÷\…7óýôì”ñÞ$™eõëºÜ+R0’ä­³hF¢D§Ù:núsS¤ËzAÙì„ ”ÿA ô‡bpËh’;çAkúç`‚¡¢<¯],ÎNn,R¸šIø$/jÔCa¶3R^ ¼‚ª×¤•’[Z=pƼÂyHŒ Õ¿{FxÇ~ªë?˜…¤(i>§tEmzÉLЃƒ–"ÑþR˜Úväsî4ªæP<Ñ]ºÐdΔºê'ÚˆÚUƒ­ƒfÛ-úœ‰óõä§ y‘¦(pþìI^ôFäGeåo§ì $ »æ'U‡‹T™b#!DÑ(B´X®BÀ*Ûn`ë!C…y§©0Õ lÊ÷ªäKžl)6ôÎÅop‰Š çÝZíêùfƒD'{NP\1„žJÔ‹R!{ò;+ÊÃØ¯ô¬•˜`Ч¨8Íà~€­Üõå ELÁs=òdã‘öu[VÂÖ©”_wA!óÐh²(íÂ3Dnß< ÓBÀò’ÅT÷”Ô+~=I+ _D1“×—c*EQíµUöaä Œx·ÉÚ<¹çA=DÕ¿£þEê~¯LU´Œnˆ¾FΞ…³M=®ôÌÞKTcc’ònVhLv+"ÒÍb0…; ~ØKÅNPÖÓ rcN›ÜoQuÜw ÖoáïK2ß7&‹0ÁåÊnè¡çæ& Ü«<¬Äƒ7!­³"ÍŠåå­òG|?¿˜½ÏkrßüPxùö‡>Y\P]ô4öÄÆb ¡Âç²fHše r#²ÆOΓ&5f W¶üWHŒÐåæIû¨¦˜ú}nêÏywDÀl‘U•}õî " á³Iõê§;s5Äãñð^ë“w!y¥½G°ý¤ ÈvÍ\+Ð`¥GÄ”]‰\ÈÛ¨Ž¤yêKˆ‹[Óz2?¢¦Ä‰?I)Ž1°¹»fÁÀϽ}oͺp 2äv +âÙ~6§;[mºÍØ’Á«ÞïD­l; u–4I•ï—!ùÑjù#›Qà÷õk¸Óg;=œš;±Wâr™ò0|dŽc`èŠéF–é?FT>ÜRõÊ|pÎí–®¥ÓÍ/õ¤½£2²R™!QYUgù}@X&Š/áµÄú¦òq8‘j ¼iÕ@%ÖM¢*ã×Ó—!ù^†¿ÝV92tÔ#84Ë.Ðû~å“©¡0GDDÈš—©¤B&¨î–<'V¤Gè³XœÌg“Ÿ¯÷àP•)5€Ý‘öÈKÕ(¼æ›]\÷ø0 Á§Æ½*$!Šqnš_GΞêh6ãcŒO½?¼Q7å·ó#Ïçzè»ôÇwÞ(»ßú•I´:õ8§’zÌcPŸ_ØÈû,e¶g\G×0úy¾šš?™hUN4ƒïù ÕÉJc=_-Œ<áAGøS° O‘wFÜ@ØŸ©l ®ðS‚ê•oÝþòÚ“h±¿ ÉЮïúåLê¦j±VÇcN jq8fÍŒ};ÒËý¡›˜ëf;êE˦üÇ1CÆðBÐ'ÜÛMë%_¹˜¢U\(É21ÓJðp8F5Áy[rÎ%;39"ó¦În”vÞ/÷úõðÎëåYË-tS@¸ÇÖ€œ[ˆüœSnÉžE}òîÞ2lÚ!ÈäÛ[*q#†ž|òUªE‡_FȘ´w#üŠ×v$wÚ h¨i=–À2¨±ãÉAeúE¡%Ì)= õªDš^Ì}ÞƒC2oãprœ^wý#ÅË×ÑÆŽËÖ$ra*LªØþÐ4‚”awSùð·^ùeH¡ð„jË„°ÔWɳãÈbDoé}&‚¹—[€a™:8ß eWwÄÓœ•µ[Ü8ÄІÔ¯)„É¿aà¹Y:ýšcö¥‚Îj›Õ䥲)Ñ_æZ‚!8(ƒûÏxZrþŠsÈÓÚsÊOpúÏ•öÎäªëS P>ØG ô%eÿ*Ä!#µ¶`k8Q¼ˆ©höLYðk OTl`’·qªSTë3ðïªO@”³ J,Ë'É2§Œ¥U1õ*fax³_¿I†ˆi¦*ñsNWož¸ö%­¸+°„χY,JT>½±´Ãí AÆ4ȰHΠ‚÷9È r<(…`,óÎàô08¡2ÎJµ1<û¢÷¼bmæF†–_ áa‰M™ m€§ˆîëCnp¨˜i°oÎøÑ¯A’=âa¢µyÔ9¾^ý¬~Á‡¿ð:fY ”·ªr„:5,«CrÛç/ÊÊPBÖDw’f !Þ-k¸¡XÑ¥û†> û fõýsÆtÃ+ù¹>ÇŒÚkÄïú™¨ø•ºk‘‚ù›jG¾ÿe-h£H¥¶0€¼òDQ诊!ÐÝÌM†/šºx¯åÜóÑì½mó%"ÊWpr«.B–Ú5=jüUÙ¬Óè.vuaæátœT_ˆ²Å*D—GYÌëÓ!íÕÑßúÌp²¥mÒò²Õ3„ŽÀðO˯@òZ¸ùûÜ5‡¥.%¥ÙP±Qƒzß|&nË—“ªi•¯ë„Ô´ £7(‰Ý9µ䬰ú  GKôRH6 bZ^ð·^Lî»Y¶ü†£Ö¢Ð˜6Íÿ˜è$ð˜4É%¡+¯îÊÝ|´¤Êæ‚…ôUœC²ç’^\×î1¾:gn´rQ„8¹šeÙrØíö€ÍqCnÂàUÐXµ'áv‚f0¡oEà?ä›YÙ•zLTÈ{U £2÷! ¡‚2öÁB]K{@jÁÎ3S‘ø*ÒÏÚgôÌôðãr[g¸˜Ä¸ûŸL­ŠÖ6’I<Ÿè®Éô‘PgB™P—ö·µO…¥ÚœùÚdIòßæ12¸ÐéM½®wïò>PjxB±´‡”¯3\Áb"îéHF§h“7=’ÀÅ»`µ#G…dÜË/}y37}ºß‹ë&?Ðéõùe³Ü ÿ¼"½-¯ãÉUŽ×N‹æ™ì .FMGý{ìUi Óî@Bž…¶Iâ‰8‰‚oí*IÑïgò¨Ç5>…2´Ùé"ŠõÎt3~q9Ù’«†{ ík+!ˆ¾ó¯ã¤½4€äeGÎ AÙ5ÇV‹Y¯'eŠš?Ô#ï é-4è ;u‚ŠæºÛ˜Ô‹Õ¸‚·Ž…[…ÒI[]1ê°[@òD{ÑnK©l©«€ä¶WÛ!ž”º hΦ:R¡)Ø¿ˆ“‘$üóF=yâ^L.±ŒU=\êÁ„ëQ¡ÌôÑÄjMCï7Nׯ B„¥‘V„åÅ­’ÞÜ¿•y§sSûp§%…+K7(:y\`É¢ØPŸÔo›Œ°&$aè7&TÞ´Ñ’ÂKÙÏ«‰2Ú,c?~oÉ#=Çàýè½ã›,kf3äk{Å3ͺ ×8¦»£®¬ %‰?‘dç3îÙi }E¡HG´À›Á·Y­XšÈ….5`w[ù)TºŒËED<)qà(MÂN,¢ü£†¹[÷5d¦÷¶nöÛézoÿ'Æ–C>õ$gÃ×ãþÈ…eXŠZÌŽ‹þ'(0b,fiÐÂÏ]=úÐë£)mN /¯h±Ý dn0h„ù<å¿{­’<émU y a>×vŸJÓš™œ§sÄ ƒ’»ÎÍ–çú̽ñšÆn9ãõtmécH.rvC©Ó‘8voª!Z05‘1ÆúÍ`齩ÀP°‹gø!èÜs^¶°¦«2+©Ë‚2(Dól™PÉì5“Ž®è¤3‡<Á¸g‰RÚÃ0œ4õTP2üCï;eÜ„‡4€SÉC­}”‘ â•ù;Ì{¨ÌæcHÆ ç…pÉ'D¶p3á‰Ð£(Û~F©w“bf=‡"¤¦0jwšâêS}3nŽÃî={1L¼¿¥ZÈðrJÍK„s f¹ù¶öB# Ú¹úLa:›ñnBbt›x`Ÿ•´ Ìß.¡¬y¶[½5 yèµô´Çɱä)G<„<.G&.!9«{Ä×£KóRl *ƒÛÀ3Ÿ]l i\‰: O´6°˜¦ÅÁð6hó|3ÄðÊIkä˜Ì%ßY”Œ´Q ¾Ï…º}\'ƒ$=ÛïÉ'9 ½6¡N¹ºR×D—~m<ÌIs¹„KHºplDÙè½áŸpC»¡s÷¤m5ÂUîÏÅÛ!âE`D>™JŠÙ IDAT(*c ÎÈ>" šqîÖ?ŒÎ Fxgö˜“`=~ü±qÚ©+šØzTÅZ›ÅÇðŽ;¥n*“øÿ¦²tD؆¥mƒ¨¦Ì:PJÐf-#„c 7Æ2>ÎØG›‰qˆÒÁS&H*ÛtÉL—æ¶HjÃÄH¤Ü¦Óœ8™‚õSO꣫í9h+:ªÀgæ½Ñ“0. ‰ÆWˆ¾wŸB²£†±Üƒ©Þ<ÞKƒƒ._zäÐ×ô_ÓÚÕ즰]ö)6(ÔŸ¼Ö¦©ÓtèØKü0 á"E)+ÒÓ0ïQÍÓ?r•8B¬kÕ±ôtrM3rÊ›¨±J°ˆuyI 7;æ…_ y2}LÝj^;#¿¡"yˆÅ÷ö3ºrˤ1:…$ú"ré:‡¤ÜÚ'Pv/Š’¤_/x:,½G1LÕÉÍŽ—,ëÉßáæ'pÀé/‡ZÜÒ½Òy$Lq/ðžæã6>{M·¤biÖãÉšÌ!CG‰3³’¾IìâBÇ““[øµ•§âÚÒ¬dd5nœºâ™|&k¬}±ö XS¦ÿŸîkÈC­ $º#$E¶ö HûØxù0\jZÁnÄ‹&BÖ"³±ì bw¤¿õ¬9FÈüŒÆëT–=‚•¯GŒ‹PžTÍ@©*yp"}¬O6Éâý…æjaÍZrÛ]—ïª9›û~1Ì|€ð•S óF›ššà]s‹MÁÉf=©T!-¸ŸòU=]_eÄí¥df´ˆ…i€!)ß;MÏ÷ÈZAGçC± b\¶˜á[€ì! $Ͻ/íÙü²-h£c6ްÌQÏå¯@’\dÅ>;•ØŽé• Ã^D󸶬SwÜÖ“²ÃM6'ëÀÒ<Œ4œ 9•útD¦ç¯7Cbx÷8X/´þ°b¦ =«é„mûe_8*Ì 1c$°NQ“mR Ip4â>.äÆj;+à¥ßŽ‡Ï©ûÒžFBÊ ɧCÒ&w®·b:ÔoTObäî% ‚hƒ«Žzt“u I;4#nOf+h aÌ“ j©„Ô@RÝJÖ©·,÷|IÙBévâ»$H¼ÌôN©GÙçãzI+ˆÑ®´t­¼M‹ïGξ ÉļndvÚgÉ“ö¸&6 æk¼ô*<ÐáWQùNIã©pô³P–¸¥ãâ£ùG½ðXÃÍVÍl ´ØœÁÕTYZ…䣖."ÃÊp‰ž"gÉæéÊ'…Ð8Nb Ýq§)?v ­£›ÕаàÁf‚ž|g_M3Rw¼š…vIˆëœ4°Ú—ý†ýŒyÇÇ„¤#28aJ°ñmôðœ,ØëÕìŽî®ŧÄ$ ˆt}òŸÆ\ B’¯wQ{ñ0 hå·–LêÅoˆ“ŒA"ÀÚ•µŸ‹Y­`É@µŸ‰é1ôÆõ90à6¯÷¤ö  T]Á×ö1!ÄÅ´â¯å` Ûõ€P‡œb‚¾$£º‚¶w°ÊGÐcó{§¬ÁªCÞi7-T°)ç)Ì"q^ëw*£MQ|3}JZÓ—˜ ëÝ^ÙµÕs’€1!ç³´¯Q²§:üÜŠŠª' N¶·Ž^ØJ‡s_ãÞ·Îû<[sÔ]e×ëhÉ…p>¾®™o7V÷fr²#h¶’8¦cÓLkÉlm!äXÐ}Î5{O9Dç“àõºÓÌW#ÇY³|=p á(ÂÖkC‚6rÀ0…WHîI=÷’¾Î(Ï+ëÐi×O´ÂGÍ×TíÆv…ˆ¤¢a‡š»|+wŸš$*#CàU8•¿T³MŠ“µ™ûæïòë¢z°ÅZé{@"n‚_vý&Ëvœ)(‰¦`9)•¬çÉ,›p×1‹rŸy+Q8*;Lcê&ì–A&ÝŽ±ÊÅ )¿–¦I¶§ÂDìt× íx²Óž…KQg:½gÊÖÛu ÖË„‡º‚ Áºá‰býÕzœ‚“5÷@ÒRÊ_ìZ³ÓX¥j2%œõ‚´š ‹ åN²þƒ£@†‰ ¡³+Ü&æ¶²š±qr‘븻èà"Nî–üÒй‰6ô„.“òàÀž‰ˆŽ°¯Tp¦-þJÂHb¶æ!~Yâì’ûmîk.蔲ë’õªXŠ ‹þ¹ ºhòô?Tn¸<ØÙ:'ÝSY ŠDR÷R—9¸/ºo}SXPűƢöÂKrEȼØAkèsÄ ÖjwoŠû3HRž¥b.€#:舀Ž"””S"Uë%MEYqKVÍv:v ¤VvdõÇ«' bŸê2N8B°J›y8 \k§Ú¯hÊÛEŸ Êª/d÷KÐk’[WéÖmŽ·Y;ò°¥ÄsÙ·LÌ`ÁSVU9Ÿàà˜´Ù(»7hNxmíW ¹O•vÁä½è5ç.^@’î4°Iì¾:¨.ùpÉæв¬èdqq;NɃGK´ghæ4nUÖ:ÀA~˜ìžYXßàŒ:VÐ¥F—kÒåg¾SðŽ`)°ëuÒ1'wk~$ V£}̨KÅ“Q3¢ÂWq²lrYjH™ $$iQñ{eti’6»Ou£ø‚{î»|'Tgšh絋IÇò©¡×á£9jÂe¥þA‘‡Z² R=bƒå%¶S³ô;ŸL5øJæ$BRç3Q}@'H6Í»iüK„-Ò¯Ù‹AýáHÂòˆÝëy=˜"5úZòã<>€Æ»æíAQY7ÍÊêܶO°MáV‹A£h@".Rð¸cT'µ a‰’÷ãKFÔÖS"€fE<5.^bØï eÜ[m„cÚ€ºgù]ØPKlq¢‰ˆÖƒõ“Ú­'^jBcHžäîoúE {sÚ¿ Z4“T[’‹oÿ,×Ú¦Yܬ|ȳ™^ÒN–™Þ¡ÔÓ×IꎵЊwdurMÞ†‚Òv^ç7MÙæîý¢Š'=R–oÖñ |E~üu¬¯IÊ'oʉ“¾ ®³B»õëáÏÝïâdÔ yÌÄù'Šþu]–]Í”;ʽ!Yüb>‹zWá?Ë’tR=…KŒ’˜q‘˜„úJHîKÏœLA¢ÞrüPaŠqêºu±SAèP7šO*Ïi1vA»‘³×) UÍ býƒa†ƒIœsR'ZjBýÙ/Zðƒ¹~¢8ù©žCßפ+&¸C‡FÍœ*(u„L@VjJ:hÂfÎd<Î^ˆ«Ôç}Œè®µ[PÛ†å V𚨠&õ×ê P×’h«î̉?á'pk‹¬ÃÕ¢…+Ñ;ÙœSº™ƒNaBü•½5¥pÎpXÚ>laë<ø™ÆùàgrÚo@aPGÄ}NÝ¥‹Ó¯, =ö0¦ôÓ!Û.>Äfâj§é÷ÁYî—M¡+ Ò óz¢úk¨ÊŸD1$ìæIÅ4öc-‹°‘ÎÁ.-N§d)t¹¸=—˜s˜QÔ”&½ömLšÚйšŠW#+‘SŸ KÔQ ¥«áó9»¼]¼qééem\}n_ÕPÎfø‰ºl‰Ùœº²L-üÔ¯$hrl[eîqöµFäúÁ}égÙ±cŽ@ÏŠTò½² ÿC…PÕ ¡‡%k`šò+‘¥*+ı^§á1mK‡GÓÉ@ÈÛÐWøku#м IÇÓîÅ»yÍhè:@’C qýŒ~ª %/ù ê[ƒxºMuCdWdlŽ@à ‚9“Åà˜±ªG3dV÷£ßX·*>.é¤Ó 5áÄÑŠËœ›Õ;Û“_‚º©ÍûL›5 ¹È×4Üç;×’t—ó+ª2ùñÐ_©—«ý—K4«åúö©t_œ¶)ìiR›É, Ëü`Æ+qƒiÜ‚™ª“{êf(™*1/ôSPº"}“цuɯ-oôêMoù4‹¾õ ܦ$ž^‰Ò|~UHšGLÙ—åÛ ùûÐ :€ t6½¡¹JÔ&H3õ7Ö7…ŒUÅdå£|‹O:EŃž’$j]—L›z9’ïŸÉiк=z^Xa¡ájQV­XaóHHîÂO_qšÞPwþK°â$#H¼a*öVÁ…½W9Wç† M5D.«Sݸ:ÌÚvBŽBÀñÆ[¨š8©vCu„v€ä+UöÓô¬J_œf¢=qÓ¨=0p¼ÈÑӠĉ qD­BO6ƒtòzÔ£õÞ’Žc¹ÙÃß…äSÚ\¡èyVgœîš¹>²Þ[ÝÚÒ Å˳)¼‹ôoôGÆuDˆü´¿W„dVpi¦8Z:'1g7©Õ|e’µV%P#c1-áç0KuÑ#Ø50 yúé :Æ”›':Íng0Ü›ÙÔ’̃£w:<Î{Í0¡QgÉ0¥ÅºfßñÔy¿²¹Ÿj•§è}AIÜÕÓѰ– †‰Ÿü&Í•ãÈÅtGÂ8Ž˜ýÚ ™Òö…QEí ä„u<øøtPíÊLhRt-ÏcÇ(mA¦¤7ó™ÏµÅ¿ I`v'Öë +õ¢Ð2v‡-{üCޮ˧Gµµ¾³uŽçd´¢G½FÝ™Íù `ôSaÆ¿&rvÃI…"<å“LI}LÚ¡_ðéJo4œ„+ç1¡Auì)xöó–j?“ «4V}ü/¡ã$™t°`¡„8<¾bú./§¬IL–}óÞ z⪓á”÷H´U–eQ¾^¨>”u¶¥/æ Iòê|á­Ye =@]íú…އ 9uøýѨ¯1Uš"—»>ÿV’¢Õ§ÁßëÓ{¥Ö¿ÉÈ®¦’*d[y›þ÷ÁYl}¢_\1Ê–;F%`?`ëAÒjsôfÞ>($“jã|¸NK’.¶jüÊÁ=±?kÍW—ÒEÐ ?gY£{‰(Dt“ø*Û­á;ë:†î^e7›’pÌ*›ùÅ ™Ùß…$¢‚y‰Ü˜¨Ý²<4]ïmÛ€ËÉ1wš•›Kjñ;°„6î°Æ›’›+ª¨5èLŸä)yrúÐ>1׆Òeä[Éõ1Z­ pée ³Rí–“#ÔёҫBRíØrî"àŽ÷òcßY” ÚûŸ‚þH2”;QE2Ëùƈ !À5ÃjA­äXÈûzÓŒ®hc‘Ñ^ü÷ÙRCl’z¤ò\dw¤BMÇ? Y»ô ×}?ºLE´„;¬ŒÁM=B‚ùAY9åF_ ÷t $5îku§ Ü QÃØ)Nvj¥¯èDC-È1µu¿w±ðd=Y}9H«;nfq—´É}ntœkãv€Ò€kÉɲ“òI†Ü§ñ¾ÚQžnÕR$GH‰î‘J™¬ütÖi©…jÎÝyeµq!Ø<6ÕB;TžÂ0òµ«­šÇ^Ö¿q]ÑÌ3g\B³F9ŠÚ±fþGfæÞR¨ œ»]¿®øà•Î0Û‡.YÕeØ,vèÚ“KÃ=›S }þ¤Œ‰ÅKâØË¤×턽ä|QTâ”™@—ÜÂ^Ì5Êu/Ç}ÆËÎÿ>†°¸[ ð´j%¹‹éúè÷¯w?î†a!$HMrc,'˰Á±ïnsŸ5V®ƒJönqæ„©²P1©8Ì´Öèƒoá<GcsdL"]!™èÕS? òÇ:K'g,s„½È‚?wkU¤Â-ôbó~"¼ãq‚ª ®ïšøWŒì!™³’CH[û$n#êF÷¦gô>IÃÑÍ÷3û 9Îâæ p[-#´äwá¬Âȯ¹Œž Z7”˃ ŸæŸnªÂ1u ™ÔãCZ<ÏyµAǀà ˆcÉcpÏ!Y\gñÿz'ù[·Æ‹»È˜¢w»QÏÒ5–ïÉèf- œmh—>¹*žŽè,Ê–ècè4ƒÍÂ$Ÿ6»H¹Db¼ÀÌBe Vþ»5Ó&­ò%°G?$t§/õrþõë’,=¯ØXþ%x#*3cšˆ–r×~ªdd~?IéžlÒ ‡¦ÅÛó‘6¦£7•†L ¥ð ]Å‘éï©´ã´¢$ÇGUlß07ÄslÈ–éøþ1ø’÷&ÜqqÚUf‡k€êþ®yýîu '{HP’8gT4zôÄ}/ºGº{Lý벚GÞ×…SCÂfSã™-nÕ­Š:‚a¤K’Æ„^ !aBf êŽ'˜–B,ÍÐ`ôq’Ãw÷H`Ã-À3µ¬Å6¿rãëHZ‘ª ã ÔMŒb>ÍÈ6"Ð÷uC@ò‚«‘ Dòúiiá2&ƒÞzE71 ü„Ô Ylë€7Š=æn¤W0È@0HÖuð&ÂS0‹.Ô.éo¹Ë¾x]…ä¦G¤êû^éˆvÑŽŸØð/4…ÊÆoñ»'jÀ´B”æºyÞ@ã_ª> <ˆp î­‘ R “¯fŽ='& l.¶4w¡Ëo‚JŠ’TÄåvs7;)$¯D.þ±ë’Gä×?SªšùŽâa"ʹÛ3ó”P¦žÔˆV6¤y7Õ+a—Êj? Éxãµi©zmc}ÌSêæ4râ6ƒ¯å_a­g MŠñãÕÛ@ƒ>cZ8÷ÿÚ,½*þ&»ðúu 'çëñQ F¬Öi¡Þ |ôjwÏÈ~þáT«NEeï¥g½"°— '§V8¬þ-5ºÉqÃÃðÚ[ÎîæÆQýd†‹‘Ä6êÉ"þlÂNI•ÇFþÙëRv $7±Ö)å¬ ”2j¥ eÝj¨:3“³öZä¹y¤£áDÞé4ÄÔ´%¢—'’ŽÈ4r–7df÷{oS•ð‰H¤M^ yh˜¯Éæ—Z{Šm©"šškYË?¿þºÉc©\ÊeY $Olô¸Ð¤âª»xv^bÿ%“ Ö¯œÑQÞ§£­Ûæ ÎnWHœ9Š(ÂF©ƒcå&’fd2­Hpz¤V6l)S…$#jòŸ@¶\¿®CrÁªéø”I±¨j-|™ù4Τ©L0.  †lµQ]BímS¾ (xB^ŸßˆÔêhã,ì¬K0 ñLnMHªF6™7°“€&®îó\?ùgW*þyH¾ƒèïà$CSÁ,•ÌôgèÈqp–ñ{¨‰-R`Eë02sþGÿÜÎ’2)|í•kLœŽ_!í1#Õ§IÝt„2íÜp™(¯µ‘ÍYjáçÆlÿíë=_Æ5»;¤7z z¹›¨"¤¦ûŠÁ2æ“uÈÝX.õ$Ä•s#ŒÌ–t`.ÑcÌO«ŽÌö5ó}dãßä $Ñ$6¼ XŽ˜Vxø*¿uF݉Éz’3¯Kœ éÃJ Ñý K’“ð_‰$òÊ‹V‚;ÊOŽuN[aÕF²2½é({)Â`~$¸æ±C¢-|¸<ùÈ“A22;7–òêÁÕ¾É'iw¶þ÷åºôŒpQ­3‹B ï×y–ßž­Ë¹¶;×N ýg£¥tM@U¯& ©–·FÄ\w: <ª¨Ñ‘^ƒd½ë—¶éÞ΢»hdýǯk>¦ àƒ ¢5ÖÆ(©m¼LjÑòTû¿¶Û(ã+<+ðdå±*£6‰™‹’ŽöÙ¥uéÞ;‡ÿ ×5H^ž.s!×€è?Lçºà‘å¢>ã %x™ðΧ‘Öþ˜ªù+<ÿû™¯CòêÕ±Qcœ_Õ·|ïtR‰l!펭cüÒÑ5¡dòbP¯Ú× ™ã–~¹¯n⟼~en¯wt~꺢ä!Zþ šä}ú~dƒMFÅ6ép eþ >ùEH’5ÿA7Å×! gþ¥%[;’ 5y³¶ž{îó¶Û8D’E/š=`ÈN‰ó4ìß|}'ß>rqÃ+)¸^µ)ãfO-îÈ'µ}sÔÞ‘ÏöMÅÉÿZH–ëó`åÅ©½7)Ç쎶ÕΑBÔ Ç´ªò>ÀéôuHþ{ºøðúíÌ:g¡Ô2>°@C9àäÖY=alíå'¦?ý×ãäWn9ÐIÆáe´¦ºeڧ̇Ù$¥!ÖÎ< ¨ÿ¥Â˜éúºôå;Z<°£_ò‡›Æ¶xMsМ›ÓUâÈ}/ ÂÐYç¨ÿ¤ëoàä;°mƒ³ê%ŠÁÝú[8ÙWMŠØ¨>¹~?$sV™ ÞUžMynüÊß?pýsæ;*5¿7wt$ÿAœqx½k"þÕëù»Bâ¿’_¸>ßó,TþÊõOÿWù_ Ý¿ É_ÆÌ¾ÐýqLÿ}7û©Ø›ws IDATäê®þúÏ]ÿ½üÓ× $¿)§ý€dWØggöWŸî‡ÖmõóŸk®Ú®ü½ëŸä‡¾Ìq‰^í^Ãëc}½ùeǾ™‰5‹<0>¬íæü A“>¶÷ÈyßBò¯5xçú' ™~¤n?|äWb[Õm磅1ýõ ‡õ)l¯APüÝÐÝ_¹þ Húvñû6nÍä¦**õÿ˜WÃoìéX?ÉOj×5vR+^9Ž)q’QsAcçèÜÊR`´ ·©<M«ü3+i›! ÚÞ%ëø;óÿêfõ/":Î=q8Êïò½#ÎZíæÝœ%(› L@jÐßñ÷vʬB÷è’LúuùU3.˜-„7PN·8M·üÝí’·VAøñ˜Ø.DZˆÍNå#iár['ó[6ý{nÃŒ‰ÒGš`y:¼²6(0+ø· EA¢³àГ®!ò#øï†”ŠøƒŽG<ñ½U à–xGûßñÙ¼9Ê.–yo+‹à Ç;f-gñgž/HØ¿W ø=ÔAØ>°Å±®öM‘ðÛVaT~XG_Phi² úKO˜͘ÃñtÏ\uÅâl£HŒëàQÅ}`4œînzÄ•÷~8Vød¾ÅzOõÄ[ÕÅøí׬Ôñþƒ=ýêõÏðIYâÒÕ[“À5® •À„mA-„RŒE Øå7Ð)Þ‹;-“?Ã;œÙ†Úöí9GQã½$qdBËstÅÄœP¤ZÐÂ=ËÌò»|X[^úï„¡^¿’#:ÙøÏiÔ"á4|ÛHhWzXý…%å¾Ô?tý#½ñ ?úX-©*ù—ºŸTïóÏIßÀƹګµ¹~¡SÅŸöZ´×7€äÉõ5H~S§Á·ºþ'×õ¯Cò¿ÝÿuHþõë›Á7ä¯CåÛÉÿUH¦mÚ^ÌfçUA£óˆöeV0+ÉÊ›¬j<m ù›£ëßÅÉ´;}äÊÌYç5¤»ŽT×›^f³¤ÙßFbì_ÿ~sýˌÒ»Ú½Ù5mÌv!¥ðî‰ý#?°¡?7°Ô½ô{ÿ>$ÓÝøÕpo+éµ4§çšÈÎ&׉5AôÁ,×uxÖÊêßÊ¿É#N¿vmOl¹2¼C‹<;<°¡RR’ŠÚ[Wgsü¥«Öå¦ßáúë8ùUH~ø9"ŸUŒ´ûÚ¢ž ÑH‰Î¶ßéPi‡z[÷ÝŒMCÆ›¿tƒáõ/kA6>x@]bÅp tþñÉÅŠQ}àÞ…ë­OOºWð[JÌþ$…uíE5ù[~*¬sAÛU¨->¿qÞ±c§šÄÞ^¼Tøh‘Þ»]v?\_Èeb×;ݘ0ÍÐi¥Ðþê×_¤ÏœQ¶þF”ƒå|xYKãÕÚ²[ÁÇ­³¹UÚ[h«-sr˜‹*ªƒ%Üäjß¾O9ÆuàuM,hSK­ü\(¹_NÍ´1Jñsâc}ÍØ~ª@tͽ”nbnkvpì$GûÕå‚û¿â{YZ äµaÊutÀìþËŸvýœ,òõú”ÚékøRû‡ «* á.ÄuÛ;ª”¥ÌF/ãϼÀž}¾¯¸’0R~p·lÿŽÄ À§òý:$?ÂIž¾ö'ÿø$VÿØdêGb_s÷·w…ÆXm2jíb³DuÓ£©ãa™?¼t©ÏË8J[A M¦q¹`xìêyL‡£^¯LM\_ÇÉ®]¿j"oy¡Z÷WÊÏÏü'ŹíF<çzäiY)lé±w¹VeD.à1Ão"g¦ªU~¨H&·ZÎï8öã®…’×°†ÂÚHš¿†“ï_ª¢ØX"ÛÈûú\dÓGäX`µcŸ ¾·JÖ”¡ÜÚÇɧÕ%i;¾·^Ö£ cW/LÅ+MÁŸXç5îrÒ¤—×OÑ=—§ËFZÉÒoñ—!©Ï£h¸µ''ÿßW}´lC+RiR¢Á#š‹ý°éX¯uÒÑÉ‘Ö0‚Ûrä“h{[t†÷Eê~0€î¶Ýgg+Y»·u¸S¢¶eïÅèÇc—Ç×;ï¾'õ5źóôÕ±W‘² ù¤4/B30¦:_ˆýIOœQ¢¼"ÏÎúmèB^+¯÷@n*¬/¼WºžÕMÐËí¸ùÊÚ2ÞPS’cÀ(»Ÿù§KŸ4S½Úi6Xº6…>6†ÝªúZ.„ÈÙú…Íu8XV+Y¶”²ù`ºÚüÕaôÏ‚ç}•‰í²xÀ¬XN?øûô¥:82Xö´ì4kht…x°e—iƒmhG³XYqø¬-íH&?‰lLxe‘ër¶qÚò¨‹#?õÂ@é¶'ÿ¬íÐXKF: Êï“àÏVôëVï‘Z<°©I¿Þ.Ã%ˆ2{‰Ù‡8ãʵí­h³ˆU àŠuêb#ãKS|“ŠÝça÷+ý‚Ø#-Ž:Ùåu178•¨t“½Ì¢ÐZ䤵²Úš+Ûbâ»Ko9$ÖV>ñ: мèèœï8È×ÇQñx¸Pšìut";õeål 1Ñ»rªVpÅRMËמÉÏ=ß ÚZø}澄¤'¡©i»H› ¥ä°ƒØ¤¹ ź— n¢³_]ÐtÒl3 agëlØòEŽc`#%êÒ¸æiÍŠ36‰æÔm›(Z{‘/÷d3Ø2§«@ÒÌ¿[}oÚ«ŠÛz‡çHÓf;lØØHñÚ„ÙO iß †4,›C;:íÿÎo@iÛüJi±ÈCmžFHr·‘í#}:yµý 79æ™]^bM®Jª•T¬”Öì’êØ<ß:óEœ»I3ås®f}ûÀ4JãXr²•á÷r9ÃæÑÕ™#½í+N×ï0ä÷!i4`‡Ñ;iL‚ξõÚ 0 =8G}h‚¸_Z£CÛÛ8«þ‘v‰ýÌ[ëâ’/'4–×f¥ohL{”?WWöÄ›àµ?»0«çXõ˜ÐÐjðµu+€Jìã m—qì¹âS÷©7yÉ`L#‚TÍ)ËîUe@iÜbVqô—OÁ@7ŽkКí˜$ή\j£Ä¤¡Çö•ƒC06"ÍìuýÐþÁ_ç“T].¦ãdípÈù…K':8£))C= µG%ÇÔ?;#õþû[¶;–ã^o14Ñ…"fáÌÊäx_¿»\‹(—ø/X(_™˜S®ã¬Òt!Zªò—ŽÉ¬ƒ˜Žkİì65twˆ=ûÑ®‡ã°_>åØä'ÌåÖ±Ýý­¦ù9X‚N àßÎJDËö‚Ìè|8ª/ ¾s¸¿OPƒö©œ™›±‘Ðc˜É’cáT0¹ÀÇ™Ý,Ïßpo½¯‘°Ù@¸ GÜ“bØâ¼Ù¹»Ôò$_:pBï+)#z¿¸}ßú¾`Ûî–Ã"WM|ˆã¼–Õ°SÈì†]ð†­×8H 7êœ õF£“qƒ._|öäÊßñ³ G;|HàVÛY6ö¦ë<áKn¢³ã×GêÕ’Ü|.g³ –ÂoåöüYÆV#P‘ã#ã]q™HqFQª§_R+»IâwqOþŽa¸Íû3\Ùs³}lk½"¢ö°ðt&CÙAÐhJw‚O ‘&ùNeŸ§]¬¾.|­ž\U-îËSàÅ¡ˆ‚W‰º¶w¤¤eD?. MÆ#:Du›*¦4öË-ä}º(S,ëÉ5îxZw±x´(IúýO†Ä?A¹)¥ÛûqÞÉPgT²#: ‚ª,|ÂþY޳Ć'Íic×98}c¸9m&}¾g~5PŒ¦¥)åØK]ËA9«Žc³àºb/3؇bÔ·fUi[ n<k`2ëªÿg¹ãk»Ro Z¶BS5¢ñ‰¾›¹3†¤¹ Öé°ïŒ¨á¤]/^'ÀàH”°(H‘2g¢×è:‰(lwÂI´¬™*ÒþV®7½î –1…X ŽÓÅFZ„¿ˆä@{_uömŽÕ‰Š^ÞÏou3šóÐé ñöhˆÏþÐYZí¾‰ö#Óî.[¯øBær´S Â{2gIå*ÅѼBy(Ûe[¬H ù¸ÀLùMž óeb‚”räJB:ç;¯îÞ“?œ–êÙ†'mC[è&^ëT°ƒú>x‹3ýôª¹Èf8þ1ýlÙ7¤––uáž„9ôI÷ !bRö†TI¯.º[áPI?êÙf$Dûè›ZHÄÆ|WE—àÍgõywרÛê×êÅœžØÁý9z€Ö ”)•nÃ28N„¥Có$4’€›ÝÁ‘“֘šD©™å­³YÌ]kUh²AýÛŠrÌ Ípâ {Ýê‰å÷·{µ;ÒhQ(6­j©~=ã ÓIÏyÔ×Jn‡0 ~nœ‚Þà?¦çô|–ײY,žÉ{_ ÅD –ZL /Ÿ0Âsæ¶â_IŸ`q²üt(*·Aü·]d2¥&ÉÁ¥ýæ²¹ƒÝ4ëðÌÖ€3†)g+,äÎiôšP,0f»ÿؤĤbâøSŒªÀÆqùkŠâUáråź›iÖÜgÈÀeªœÁU=6ÇÖibZªRζO<[h§ícÀªÐg$9ƒ”#W—©£ïñPؾÊöÁ”Y/ˆèÁ‡“F4•.9!˜…V‹Jy‰ÞO z2~OËÓxDWAyùZSðCÒÓÕÁQ»1HîI~^½p¥Ú¨€|4{cÍžÒaõLhñƵ»!(C²Ý¯.¨žO wåÓžðÃ+„ 'Z4i“@ZËÇ ÷h­¦J6¹E€«–N½UÜŸ¿†lïµÃ½Ò\ÙÐÍ(Ü2äçáB¨­‚¡Ûeê€È÷ÂÔ¡gÇ-0ûhÔWÊFŠ.Ì¥8bJje`P³Oã ê—ZÎá ktÁ¸ä£òå ÎRGÛÕÏÑôð`€[´ÏŽž`¹rV6øˆ²CQL÷WÓù._»ÉòÍ ‡\›b¯`A𦉡KN'EO›ïŽüHå/‹N€`,hsR+¢ö?^bBÒ žqFˆrÎqœˆ¯Iap.ã‰gü>Õ܉À¤w³)ë£ £@‡d6„œs†9ÅmÇefÝÜ^1Ž.^©ß4ƒJSz(ÆU‰LKÄv¸¢.Ôè`l”Ѝ6÷HÌ̯5Þ7ÐéÜaàǰ™·œ!B©à%=!«ôI|SåF÷'½/“=Š×|3‰ENÏ¿wpà0æèœ_X5î–VÄ%R^ÉŸ,/Íw<Ï'yÄNóø¼…tøµŽ ˜æó…xÉþÐ-º}.DD&úY»Bʲ”hh0-£~na»§Q”Õ£»"â–p§ªo°T<óD­™Lbâ(j#&<:°1ïåûœUNÄŸ1Ð.1Qv1ç0ºÇ5}²ntî-Y³žómÐ$slÔèTð †-¨~ch@‡‹÷ð¤dÅß鱃_ŒÆV°”W‰"‹~Ô/Ù:Ý0¥1Æ'źø˜ÊÙw 9pLçáÌú§EãAs¼Î1šª6ÚMÃpŠÖæ®ù>*$+F…¸ÁçO©PÆ–0\e`\•¬i¥+ q‘¦ 3~øÐ‡ð£ª=‰µ®)Ît.‰`Ltå$é&îâ)ñ¶éÁ qúº`u%¿KHÞØ3£ešAMr®S³mÊpÍ-1ƒÅû–±Ó¨VÎÆâ„{$7UžÜæ¶€=¨bÄ4мû×Ü,;ôµùåšÞÖ``!—^ý`LLÌ4v%oî |½ÈEP#¡¶º˜—XÂñÈY*vu•îõ~^ùIuöåå,̆{INÙö¶*‰6@¼JÄjB …¯¦"bfi¥¾§lz eQVøæƒe¬ÆHÙ@²¤"iòOÞte‹YÌH¿€Qa©§¼]f^ž 談2j¯4Ííý<îŸaœÙÃOæ^t~Ÿ³U¿P:•ve ½Á"TH¦ðÐb–æó[PÁª§‚­ÅxÏž®^]]ÃÏbàÌçzß)ðëb€]E½±|WÓWy¬qœ´à†¹ÙÚ¶öSwLÇód§~òCÖŠnJÏcj.ŽerÉù  )+}¦gÆÏp7ùþI`óšúñÛð‹¬T´(‘QÝÄY®Í¸G"=í@´>¦•ØÏW[YRJ›ù…wêO+RwkœÇÐTCÏÙ£Zön ¶X˜!C>C,um‰©‘ñ‘+8Ù^§Þqª]råÚÍwqës¯G¸%܃¡½YµyŒ%›š!ÒH'c¶Ú*ý‰X&i27†òU~©©7ØÕ™*‚à‰½CQØKÕã¨ëh¶˜ÕѨ‚UY­7oN¶uWv!ìý¦È`Mšr¦y&r‡[åh½A‹m÷$ ÀŽ^B%nȘ×v¬ô™&c)È^‰ÆèÉE`SÀv*¾@MìÔŒ¤†b²Óñå»Cä¬uØ"¼ºžY¦\xµO躛¢obf½Š©é¶•®w¡ždïRF:a£Zœ“YäÜk?>åAÖÊ{ã5H‰Û—°ÈÖÔe†Ñ·•C—‚JA³_}ñ¶DD§mYŒXâÆRó‰ë}ÒXÚÙ)£•™-žÜþëX8®}ºëÎè0•¾¬…1ÌÿNÊBùçãigFMÄt‹†>ÂÌ‘±*¥½í;f’a9…§–ûÔûÉÖÖ%%p2UMËÅ|Á e«8ñ“zÕjµ§'ø«6¥ãxo/{:Àõc1.¨c㻤P³÷Ó½­§ÝÈÔ§’êmC|ÂÔ/ÏAwÕG;é]S?´Vìeê×t—,G}aJå²ÊcWÔs­{W™ØûÔ­Pì)ø§›ºíÏ%Ý©gƒ-b—4LBë¼wá욤ۤÞSº«’ÖX<¼Õ~¯ï–lW*¸Èøj\xöuÏ;j§¼*8{p¤1k² ð§BÙ¬C@Z+Qt{Š©—²ËÔç©Þ¤‹ÚtuéF²{lãÔä,p‚>÷l¥K&+…¦6¸&”mB\@_ð Íkx\½–?«QqbÉÜ ›}º¤ä'B\[uí4¿ULg•xë‰ôå+1¬MSé󦶅*ÌYHžÎM9õ+ y˜VÕÉïø€e ¸óæ‡ÓÈÿ5†ä¬Ä{4Òß¿Žé¬†³á^P>ä¦Ä£`èŽÀj±ULXLûìææÙ,Yð'ã¢7»lMC¼³P‚P¥;xÓÜn‘Tðâ™=L \„ñõ€L6–Y6Ž.Éù—Qñ*4„ÒÄÓ°U1œµb¶¹È•ãä¡Ï?¬q–xèaúÜðOr*ø£ca!ïÇEhk9Ü!‚«sWÁc€Vd29‚av_ÊÔ ’)iÅ|qå1wú,•ZÂ1-¹`ðí5‰þÌ/dq,[³š¢å¦äaÎŽ>¬½zö…úÈîa½÷Åh!ÙõX˜^ø·§OõÚ’/¦æÅ‰Ð²Ó dª&>³ÂY÷‰øÝxµ°aö²<À¥‰•½Æ|P[{$Z…õ&Љ³Cר1­PX•ïk×køÀ2 ÕÁt<óZƒq}™€&§â×[›ÏqPÈ4B€ôá°ý'ËÒ‹~Ð+\JµsƒÒñññÎ!äM -4¼ÌÏ¡ö.|Oå‚&‹~ 6™mY´¶PeQ(ÌÿXÀê?¤uœ”‘ãÝ42»@‹Š‰ùÎ÷” )‘Pì’â”%¨¼ÙÊ_øéi¦í‘½ÚÛ²Ñ&¯Æy-#HVœÔŠ.e7Oú¬0ðÕ%Îs@Þ(5o¥bPkÄÐ{=ßI¦Óò¤þ{(ž”šÜ¢²‹X¾Îz÷¬LHöŠtž`y"gY”wµ\ \Æ·Öe§ŸÄ1]‚’5'ßdTö ñ XO?†dOý\1¥{ÞÇ…Û2ε^Æ=¸ zÑK]ú¼s~•8à™i£ß?–·Ë‡Ñ'N»Š¡^pIú «)&zœU¾جwŒH2@à#8 ©ç¬<|–ïbÉZçd#»Ô澌ä4úä©Ïã,¶WO³Àœ¾Sˆ=ÆvI0tÌòŠêÌåâùdÍ‹@Ùlu Ô.çÄ¡–­áŽ©ZëüzB׳5 ãØ{ Å÷{cœ‡{¹˜¦-V0rî4÷‡©ƒà%û¸ODZ6Ѽzd§³Ñ9K˜x²¨/5z@g”B_Ö¯´§q²äˆC<¢_Q ’¦ý„’'bƒÎe‘µ™£Œ]¨ªí™.îªã?Ö¹¦o¼pð¥^tÉÊ,næøiØý“ÚYྭî”Em^&¬u¿NknÒxŠFR\.9PÛžý{ÔÎ=£.ŽÉ> á¨t¡ !™R/¢»+0H{Î;}ùf¬QEËÞNÑü,„9“+×íÃú§È…«dÝ)ÿ”/všj/¿2CØŠøkÚ˵~á-†®XRz¥*«L¨èÁ«LØ´1£~_>GOˆ¦nœžál@µ~”ý,j9 ŽvβŸìî˜ûÊu¡¢~>XîMg°R1SX¤ÑÙ;W0'i±fæ/ÆðdŒ¤Œ ã,,¯áHq™ò ¹@»CFëÓTfp%ުÑYR41&w/ ì Uî/ªÞÃ<Í[<þ„™O‘Õ©³Ièzª¦]ƒ$–¼.X4ì“<&j‡úÕŽ!)@2($gWŒ‹6’ò1Ñgªï pfèu¬ à ªQ¾M4Í œÞWyÈ9¥«n›£ûŒ½%’ݹzùz: K|YG¨ $P¬\ìsÃØ+µYg^`K(@‚¥°?bÊÃ.:ØLÌ_zý{ºçrâï¦f¬þ¿X IDATàX Ñ„l§>ŠVõybAfw)û¿½Ú*®ÁÔËý-A©ð¼èÊ… p¹¸ÕhOTß)-$çÑ¥~ëÀ3_W¯I½Æ®²Ì¤½…ÕÑÃG ±|¼v0u†Óâ’œý%‰ 6N§¾‰øCÞN‘!pO—_i5‰]D:¢¿4oÿë÷‘²¹ÏäxŒ”£«hûÖœ2>³”‰uˆ$kÚC€×hUZ×…ïM#e¬3¹ô³ßUƒêÏ»–½5êé)€ÃŠ¤Ý¿ žtÏUõO†0p—öÉëü%ÖÚ0òÈ0*Ñ>V¯#ŸTÖѯº,À•¤ÍÂ3·ºaš3dþ©‚Ô7|¢ú1ËO›Ë:Õ±Nºœ•G:†4‚ÉÏ.?Þlfy¼"lèYu²C¼$dW{‘%ßXÔù8sÊ*ér,ŸËIÌ[Q/äb¥°¦_–Œð·Mtõ$^kP³´ÛÜ2ò ga©™—umpÇ} Àf%_*Uß³þ±lHµ4={Q1ŽÃôê‘§7¦âÓ ˆà9ër~0ÕKÙ‚ÒÓ‰¥!É®¹[…ko ß³÷µ&ªìƒ~O‡í£ú.`¤ÖZÜX• ˜×`ÃZÌ®}‚°FðÈy‰º!@ÀþZɾâ‹G¬ÀióM8ì(˜X•N6±žÑˆ­ÙçÔ!xÉ_†T™ ü:¢g·ŒZ{?Qœµ_ßW ÷rëýuÖE=¼”T8µ†~ÒÕä”u@¢•£Ä"3-íJqf]±È±®Rk`d{‚’À oßkç\<|¢x‚æ=sÿá-:M"H YÌIú±‰Žkþú”?¦nÆ©ñ Ä)½)äFÝòïCO4m¢Î«3áÄîaÞo¬FS®Ù“Iamï’l댇¡¸Á;ð“t¢ŒÆNù²†öý"»×cö—W]¨Þ¥¤T8æAð~dEW’ÜnžÖ[£+ú…ÏG¿Iw…On-ÃèpYÂxÆÂ[Å.¡ ‹l&ö\†=úhÒ¤Ô¦TÅ©’F«(T-¡B¡=¿Žµ@˜cí¸çÍäqà]í×ÛtÀ,9gÌ‘dk§”ëj{]晇âÔ',|yÇ!…Î8ˆÅÝ2âóíY,E‹óxRC«v—IA…žÅ´Ñ}é¥.,f¹i!þÅŽƒ®$ø©úìš[Yo?…g—[qsƒàŒØ£AJ¸úÁÒ¯J­:P5€T:’9/Eÿ8•Ï sÈqÖ›æ MÚ_5U§8^Þƒ}PRL1{9?'$IÑ»^{È“ßo^çy$p†8©qó×Ã='X ™Ö«Fa|‘ÖM€‰Ë~È8¢úüz{¼„Ç_6Ú2“ÚåRŒ—{zFÔÕЕ ‚Òö¤Å+ìKšïãÖÏÜa~ä1¹T}þ ø–Rí 8¤þ™f3©à™i5¹~3P[dë„÷dwf Pö¤­ˆŒ”94L{€³¥3íç쩞ê ë Í—¦,Y'Ó‘à×ô8ùàÊpÃ-–ÌÿT{Þ΢xÀ€X°5™I.0ñ¥—aZ‰ì]“3uW}[…Øè¢W<ƒ™”„5¬œ[ˆ«S{#ã»kš_Þ-FŒòÊ´¤ê1;÷vè?P”€Î ¼(9÷‰Y’9ÝrˆÙ’ *b ŹtVt}%«Ò 1¶.M)ºF…Ï('Ç€øÊpEMú Ãj”¯AýVcn$6—Ô™mxf­•¨~KN¬Ó$P¢NÕ³L„¶|Éþ%&îDmfâŸV¬’ëÁ¼©ˆ ó‰ù·½³÷¹¿²%ï+QÛÜu›k¾Å.7L?{8‰Bôg¥ š4ÝhÿÊÞ{è ÚàщÚu56£Î«¯Ÿ48™s x“‚Aéx·Àª‡ØC’˘í©öC‘:øq Õñ)äáÈ« ã1ŸØZx@2m”ÞˆeöYÁ~.`%ë‚-¨Éàé_èÍßÜ虌TûÉÝè‚æ[-–:_Ëý[¡Žƒm^iˆcâ-X€? š9ÑÄíH¡ìä`eøÒ‰*%‚Šu²¥´Ò’„,Y›Qù“˜µÒ‡p¦û³V&@܆ú\ëL@³ˆ.u •›µÎŠ’½Énà›(˜yNþ"J­³HJˆ˜rø?ÒÑšNÌTG8Íír¨°8V}«í;äVŒ= ë3k:ë5H/¥¡M`SWv¬½®#‹šâñ ¹RV/,k8êm_¼EÑãÁi[ñ«=r‘ÈŠ”SÁ·Yb#ƒÍ$˜ÐÔÆHÀw«m fTëˆoB…T àn ƒÊap ¼ Pd."ü-Ùpž¸ÕGÙܾ¿. I£× MU)¸÷ûZ:GûÃY w oÒC>èöf.óÞ‹kºmzºI¼h]%±:ïdÍ¢goTKu*dåQ;—j„¯*í©–ÙôWšUþו<ôåçj]«‡,B´^ðÆn…ÚØ.Z;u}<`™jØÝ_Jé«T›ªù&FHUd¡îVVÿy&û!ÿ ×3jSG4*ü¦½s˜\m÷N²|ÉkæÒã-}c®ù8a•vä×ÌêzÌbÇßÞòìÊß(]œZë¿XÜSU3,¯‡Em)²8P5 mŽŠ4MV›ì¿º‰+ÔÝõï©t^ÙDFHÆ“™ûàÛ0ìY4Ð@1 š­-vÃ:åA¸=W4XráÕÜ–‰E—"†Ÿ Náµc}vÐn²VÚ{F`³f+t#æ Ayr¬ÔÀjžŠ.n_ a'› ͦœÂ|bÑÍ݆{¿>¶àŸ,WRO@K‘¬w1E—6Eóv¬î¶õ*&úõP5°x\¯m½."“ó½&ŽAhwÅg¹Ü²2Š#ÓÊcÿ*`ùMF{r#‡¶­‚+k‡›ÑÚ¨ZÚyÉæxV:wNû3ÞN½jÖm425h+½>^ä:NvvƸaqʽP;A˜ ëò?! ø7ÕÚs’Ô­¬_{šñÊ`‘fEÍM:-Ýké_=„hÛî\ß]³k 8Øalª4OáMq–Ô™ijªÌÿÓÞµ(·‘ëXÆ*§ÌHN‰Ù¶½â¬´v‰©¶Üüÿï[âà«)Ç™›™ÌÝ]ÖLYV‹&A<„nÜÓò®Cʸ ¬.±Ç(šAèõ5 {«ÑkZ1'éÇd£³?nòëT¾z;["˜§ôÿQäv,ÂÓ,xƒWÔXœ”bñAmŽhè¨>—ϳÐôu Œ˜BU¦™Î’d <»ê†0lVÅX´äufó+i.Q4¸‡ÿ:ÅÖwë©¥™¯æ!D’DÊsdnÜ$'p- “L[ïà-€ê §n&Ë%gŒ¸9/ùö ­K6ê­0‘¥µ³ô±Êé«aO®®qv\FÇf!ùTó‡^éõÍ–îmÏ.Nw!n”mçÞÚxâ²ÃïÕ5é*_3où‡•QèQI»¯Iذt²pY¶@ùn±3ÂH?Q¸ºü+‡_äƒ!’$s^¼×©Ð±£š©’Ï-¯«8óîÑ~Ò3 Æg œ†+„ÁÉò¦s'ÚÖÒâÔíùF_¨nº˜¹Žù\ËÌqr(Fn»G@†…ÉÛÞ¯càNP*Hœ^ÊìÙ`Yªg ¿´# "ò Êï°Œ«ýyÆÒv,ÊLþ£Ì{t0“()ÿ±å¬ZwÙò¯ú} ºM¬¥(R÷v§÷•A¬ 1tD+Ë%,Xü§ª6Ð-XDü£·Šåß×Ó=ÿLëß!A¾Ö)a›^=ÖêÈC WÕ/“æÚò›’~¬{¥Ç0“™¯s¦e¶e Å:”{Õ$Vr©fÒ¥ºî.ßïîÛîÉß_í9|§FÌ&r² :'€“›wvnáζ1*´>¢¢®»\cÎ{cz1u÷Í ·áô#«Ü§INØê*•3!æ¨Ü"Íèl HWzÙSriGªŸL²úSÆ>ñÓo·t o9K,ÔLž2*cQê>å¾1òQ¼ ÈòsÈ—ÏS'~·@ú'Óµv= ­kÒ΀‘S"`©|À¡¬_'÷JO²(ËìóÉX‡PÖÁ7žbàŒ›ç¯³¡,ìÖsÕ5?ÝQŠÆwµ:†hnNàpÌ,°­cÒ_Ž”^”·mƒÀèÌúVØÿ‚7$ ‘©Ü~Z*„Ç8—WÓÂáú™[¬e3‰°Õˆph÷´ÝE§×œé¢Ý`„©ÁHfy## í³3Oζi(¦»— õVà šüòa—4—²ýö¢¼Pd¾q ¸a©N98Ú'gôù¶ ûp¼Ñ‚\JÚ^Ò\8J\ü0Iqÿhws\Ú-A|wÃlÊ:i4&S”¦ïE‘uæDï»G^:Èéa¨Œ§›ø¤F-‘Ž]ŒVßgÚm¿“œâ'ã=Y—~`mIŸQÎGÆwpJ§: 8jÆé;]óE;¹Ü×õê4L úI†¨D«Ž DFŸ ÒoaGŒö<µð•C¨Ô>}“¿‡°ñ´HÇç]÷ÞR39b#qú`7;´– 0VµRÊa \¸,•‘fdÇJ©Xà¬zsᾊÐ%XÛƒ+Ü0NL„©xov;êÏ_ó~do…¸¶Ó¬£Æ½p›} 0¾“ 鮄ª‰Á’:A¾.¡ä¾ËHò¥·I’›té(©ßÈg‡¶Y¸unj…{£œ ¼èª eŽöˆó ðYŸÂ&os ¡=[ò£­Q73|Änø`ú‘×$Kó`€,‚ë.È=‘†ËÎ…:â‚`zPîºr׺OH£V7¿;9ûÝ¢,–[W ”eZm[Ÿ»É°{°&ƒ…f¯O SÓ·œ:ÕÔÌ‹I?šÈ¤žç6Ä W¯ ˆ>KeGT†„BjÑ=Kr¨>w¥¶vRIÊRÎS¤“Rïqš»$æCÓ€Ñ Aš¢hÀ%©¡½ãÂLÂãè~¢p’ÿþÅÅ=—ýúLî ‘±ÿBb/+®º d ¢Rã4€¸ðr«NÃ*°„¨$æH¿ÊÕ½9ƒËY6JVrQ€£P3UÒÀ0ó«-F^Ì™ßЧUõSD¿N&œ¢òË-wüaü²Z1 ”ēФàs› ôÍÆùìJ–¯=´Î¥®úY.oUš„>3émˆJP™åçæƒgIF’½wR–žüì@鬰~jÜ.û`•¸Ÿ„§%»—‡óMçLÒó,w½ì~õ)ƒàµàÑÛ~C¯‹ôÄù“xp ^¢l;ކ;ò]qŒ‡VÙ› ÖÚl¢Fl#ýÒ¥†Ù» ©ŽcÔþ¦ª0è jâCÀ&>Ûð5cU“³ÉàQ¹Fô@¹|Ø;s)wIö÷Ú0­ã&EO….œæÛ ZÔôÓî‹LœÃ>®Y:f>‰óÖu|¤äƒ_-xÃÊoÙXÑVéîÈøD¯ÉçS+“†gD4¿Ó++ˆ]UâÖ!ÛIß´ÔE›SK“à)[1`•ºUi˜ô²éìÐDÉ3ϱ£à…»>F©ïÚÄÞ}6•$Csð$ʃ¢µ=»é1¢]2¡DDü >îM­nMj[T‡:ÅϨ>ß³ÈÖô+Á™{£êN%±Ä~ÕÔR\ò/‡RDqÖþ'DlKÆ;CVÒ2}S^ö>òO©^“%n¿§ºXàMé[·ÏâÌW’,G™±VæÉéÕÚ_EZÐ_m楫K`UÉÜkÁ#¼«ƒÓHã »ÝV? W/®&Å>}ó¡6GùÓ(ÄÀþóV×5 ‡rÈzzä‰k¾åµDWµ Dg'31z§ Ó/>çGì£XŽ»…¯Á…¹I¹± „>ôΓb.ß´° NXïž©B-m‹{÷ø`-É3c…/1—[Ž,â0qR«„{fIú¼"5 ae{øm›TóÏ-Jß³‚²}î´ËÜBu€P1S ýAݬÒñˆ§¥ó?ýÇÙÍa%Þ¯Æ3jÂÆÏ»<ÅpykèÕÌì5«žðç쀲D#ðFÌÝ"É*K1`¸…EoÂ]>y û0»ìQ´yèó´ëaQ >°ï@™Kj3¸»Ï7ɵ#+Âû@öÎaÓ©Lìjnl";Bâf¨!óa$K˜³a*sÒì1„cò¨4v¢Røª¨%pó˜y>Ø}_I0Lì¹kÓŒãÖ^ÉòÑèV—{Õ9 U€CʯCµs#ÞRzþ%¸äÃJŸ¼3œ_Zö $ijîö–j\çêl ~¥¢©wÖ·î©Z$Ú#¹•t wá+&ú#aA°ì&PSúYZB$(ÈC¾}˜¼ÌÆq;¬ë£ÛÝÅrãÅO½ôæÁÛ¹1Šu µå„Æúrý›0Dñ—¬ßí]Yl!„³ÓÙ4v·é¾[.CAÓ’/¾ dø£ =ÈZO~­ÉgRu>%ÝiªBòD€ÿóLôMmwóNIu},WÅÎêØÛg' ›8kÙ A†L€~`EâæÃðÑ®øriY¢ßÝÔ[óbN%ÇX·¹fÅ`ãÁÁä/)ǺVœQŸ §0©K½?M x z Ó„ΫÈ”8ÒçëÑfÄ„'ÌG&+G“mŸöCEï¹VUD©d»ƒ¯Ð]É!™—ñ±4ó[îÀثרòsI¯s.ƒA—<òPM'Pâ‰s`é~nÞÐö3>ð[ñ…²i—‰Ñ‚»ZhÐŽF’gpŽj Z{²E±7ç‚Év¼H(ñ!ÓEöcV“A(6ÆuØ3ŽŽ«Û´ Þ.Ô³ªýDöpâ$úû5r’e‘Ž#ìTK²z/±îš„pÎ3±!K@þ×%ø¹ Á$Z^ýhôd¹€ì —hof7£± ßͳAµ½÷™¹"ð„ÔÆ­t xbñí®ÎÄîBlžy§®²¢û"–åص‹ ž&2 µ•ž±’ —œÑ²0H‘‘üŸ/ññ6Ý£ÁQ¨j¤¿® O¸x ƒQ6SÃ"¤š˜êX.tìm¸W4,|.yE^¯Q ëüEJ ÞS¦¡?u(È• V©ÊosÛØ „âÙ,&©¾•d·sT¦j²•´ÍË…i°±¬ÀU ²݉ÓGÄÀAÄÛÒ! I>S¤@U*ürY +FhÙ´â2l~0¡Ì¤v¨±Åæ+³µÐnÞ–;€N°Ó4—{ä<þ1½Òßz;×…¹òü·0‘Ž'ß¾lo5Âê¿9ÒFðÒçŠWŒ4ÍÂùÈÑ|œÌ/®7dç÷áwçͧ¦Ç«Nᆣ1´Ç0£óoùÊ Ú_4< W¡ò‹Sü¾DžÛ›HXXƒ@‡£cohM=zZ9`N_~³·Š?x±“G‚äÙ‹µ$Ù”îûìžgÎç©·[V•¹aYzÁPsH]ˆ•/ów¹‰©zpÄ $ÁLÄñ¨àS1GVãªn¨$5,Y›N™þBb¿™¤e_å¦B]ŽÓ¢Œðà/”VÓQü1Ô¾ŸÛö«òž‰7†1ùŸv1tH¸£ä#º>‰3›$)Í.jåF _v̬û.K\OIïWôáÑy‹±î•ÑC²äðCâIeâgr°"ƒ9RšW{!õÁzZJ#ÀN·Ã )i]ÞT€>×AÅÊžÇ7çÁ²å9c2U>jÓŽÙŸ›˜9ggy¯(ŒrTVˆ¦ˆ²J,TãfНyßøãùÚ)rÃQ,^ÙÛÈYÖk3ï†>8p+'Ãö°ŸJˆRjm’î|Fyo†jjÚ(o[Ÿ\Fsk¤W.Qå]g6þì2íüîXÑʇ0*}µÍn @;¤X­ÌZÜgïÞ³†:¨ÙA.ð ‡\éf]}ÕVÖJ“œ×ØÕ¾$ĤP¶(‡ÏîË®¹P–+±„Y7ýÜ®¯ç-Ï0ߥ?¯ö~·d|»¤¨Ä¨ß)šÔ÷VîwaB·ºÍÚO´@! 4뱺²r»ŒH¯wƒ%>)<– tµÝꬑeB±4&g œ“Ýc?:+(“|GØ7_7g' ‚”ÁÞ!3¸ÌmŸÁ%Ó9½V¥ÆjTM˜öVø<ëÖCÅ@DÉ"ôÛ+•!XâOÅ<¨#’zÞÝb\p´û'çW!¨‘7-_Ný'¶°Hï}lèWGm©<øYç´~L——!" ÚœgÊ“¼¼|&oŒ{È©y•E· äÞ‹÷{L'ÃL¼, ð‘!üôñûËsDè*èîf {…±´*Œ™ ì·È-S¹iÏÏE0 Ñ+¢ûœïíÿ…büŸü}к†e.Bõá1‡Õ¯‡í$…;9øe¤$¢¿Fµy•!ž±7-÷(ÐæT’rîs’1ºdõ('L—e‡±1ü‰Xê6)|>‡Ž ”P°3 ~¶Í58•$K6ví6ˆ©»VäÝí´I¬ c‚C•˜ò5 †H À:BK/ºM‹e§µŒAk]½„kú¹àAy…4"yìa¤ãÑHrÖœVis°JÒc"+ngG’D»„¹˜ˆR®N²ínJKõgù×…7xõ¦uQmŠ~Ô!Œü±=³Ç€M ’dµÄIŸ\¥òª´ «HàBÈp„]‚åŒñN™Á’^Î[Ô'Äì!0϶–…W¢~(f¥ô6õSÐ0¶J¢½$<Ø®,l¬ Š›ø­ýÝËæ›õKãE¾ÅɃH^àHå&r ¦C¼ÍËòÔvß@)QU_fÄQIwð…Cüzù°ž\êóUt‚°0¸ §Ë.e²r·€(?D…„,Wã²$§úØküéUo>·Ë—U • 5ݪ”ží³•!g†¼§´yHÏM«™¬Á¢¸É»UHeavýóåž"Àˆkº0æêG ŠÞJ2ŠÀyñ{˜žf IÆÆø µ Y©K? ýÚ¾µwÞŸ˜©ÁìB ã>} º%ëYg¤!™@¬uQíbOX"~³®ì î=6^k¬à™~ Tn3Ï× U•BòÄwá+º–$Ùþ/PR‹­³býàØ2šNž[ó¡_;a•zÐË"ñ îïÁƒÜ^”³qOû²)ŽuþÔÀžˆN‚ÒFÒŒ‚èΠ(AÀ%W·šA¹C¼Ú)íÖ‡¶vÌ’lpý©ÆILÓ™OÐ ¡>K=mýסsB ÙÚ]öÆ­ä¤ý¼ æ8E»/ÉF"Œ˜¹Ñ™ÁöQ)”…%Ç—daX„ˆœ$Yç¯dâ Dl_¬;#-jPØu/8IDATrsøüíí2õe-•µTׯàÅÇQÝ’—˜À8ÛJ_²”ŽÑKw0ÎnÜ¡ò^3GåŒh8yÇñzÅÁGõNÆ4¹œþ+GþÛJ«KÄ:‚Xøœˆ€«YtõÖIý[‹æÀ…µ·'I2œFU WÆaU¿Àó“̶G‹71Ö0+PŽa„=NÒ7êæÎÇ<Ù޵¬Ãé¨$:‘Zƒ•is,ô~Ù­ íßLèžàÚ×ÎÿA6fã:3¦0æôŸø¶øí£ˆRKkþ…5¹´Æ*ݰ_P͈ˆJZ˜{£t¥¾Ð®xö£·+¾SˆKh3Ôæå‹,J£¤ ›y4mî;̼;DýT®yÜr Qáóט³ýMÿÀÕ³ùHÀ•Å^‘ Ÿ)"bë¥ü¾7”dþFlêMÈñfIù-z÷ªžmcÔ“^åTmð'ç>ÁÖO^ˆ¤¥{Qß'OÍR'BЬçp(Àwÿ °m\‡tšáí·ÕÏܼõeëñ1€¢Ë ©&zÒ4¿£”BÑÓîÕW7Fz2…uJÿ³=V!‘ííµ¨K´KKszk&mË™DÅŸ´aöƒÔØ´¶CÆ=ÔÃòH¿ïr´ú6mÃô.Ö0l絃°Å>w'Zß2‰zŒå€ÓË¿üþÔ>¨™ÊÌv$ž!ؤñŽ~”¥ˆjw oÔbçgÙ.%ñWz–È/QëDA$ðý;cêÍ ÌF¹ôfóÍ×SœVÉ.JÓCœä'í¥ç ÿûwg-S[ýÄ‹€BÇ>Xþ»|UúJµ¡3“ðlLÛ\<¥:üX–cp_ˆ]ϧÒÉÞ@¿¶Iå©•>GP†¬N“çÅeå…³ˆŸïÚ/Mkà)( Xwrž˜a–º¾º…â7óûjrÌx#§VJ†ÁEËîàöÊù£ö{IÊôÔ=C.ã•’G÷G­ìs^ûü‘QÄÝ-©5êÒû•øŒPãd4ØfÁ7ÕµTEŸäºçìtA=$Û–k(3óGŽCM§&Cû‘ôã•Cžv˜Ô²$€Mqfx•9ƱÛ= ÇÒ"H-_ üPãѼplÉûwš\7ž%uj3wžI“¼ø/8éó'Š”û­ç ðº5w½TéN§WW8KÐ=ºëNÇh¬%Iº.0?oÔÇ{¹0b@š'‰$Ö‘€þ•WÙ¾>4¨GˆlÆK`¿»ÎØ”11õ[;‘¼”Vg™D:ù²$M¯œ¹L¤ù°´Å=H´¼¿p“sôvzt77ù- ¶Ðß{ÃÁòà®ä9†c°&YáU£ûQ8í/ú‰”˜¸G,`Ûþ0M;–j7x)ßX>»†{©3Û¯?ñ1Tø¯ýšq¦ÞÈl0H2³o-sdÈØÿDPKSö9Ë¿cü%’ìý?yGË dð÷ ç§Æ¯ä?øöþÆñ¯HrYýãÿòø›õäÿâñÿ’üUãÿ%ù«Æ¿µ$ÿQúùßZ’ÿ¨ñ“äšôÚºû ký÷„$q(¾7.D?bìü}ã1™$F­-þ°ê3ñ‡q¡¿wü6I.±. ')(½ø$¹=â ý¯-V,jßo  JX´[ìþoŠUŒÇo_“\ÅNuíFØ ÒÇScŽÍsú#üÀ\ôN¼¬ ÒŸ_ûäëñÛ'CQ Z“NT¥‰\(’ÿyC=òþ“ÞJë–ehÏäï›ôhü¶éÜciÏä½™]F&9€-Çÿ6ôs€)é5¯YÏò¯-¶ùÏ?øº¿~ü6IzˆAØ1 KâÙ£¹E™¤ºß‚|óA~/.û8§øÈl[)vúX1û_:~ûÉ_+*»ê*¿b*ÿÚøí’̇øR^ ~%. ¨?ÆÅi?ñ0þÂñAIþE“EjòòÞµ—ˆNwWÞÕÿü®ñ?´äVx';6‹tIMEÕ'\U‘DIEND®B`‚leptonica-1.70/prog/expand_reg.c0000644000175000017500000001274412270122643014743 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * expand_reg.c * */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define TWO_BPP_IMAGE_NO_CMAP "weasel2.4g.png" #define TWO_BPP_IMAGE_CMAP "weasel2.4c.png" #define FOUR_BPP_IMAGE_NO_CMAP "weasel4.16g.png" #define FOUR_BPP_IMAGE_CMAP "weasel4.16c.png" #define EIGHT_BPP_IMAGE_NO_CMAP "weasel8.149g.png" #define EIGHT_BPP_IMAGE_CMAP "weasel8.240c.png" #define RGB_IMAGE "marge.jpg" int main(int argc, char **argv) { l_int32 i, w, h, same; char filename[][64] = {BINARY_IMAGE, TWO_BPP_IMAGE_NO_CMAP, TWO_BPP_IMAGE_CMAP, FOUR_BPP_IMAGE_NO_CMAP, FOUR_BPP_IMAGE_CMAP, EIGHT_BPP_IMAGE_NO_CMAP, EIGHT_BPP_IMAGE_CMAP, RGB_IMAGE}; BOX *box; PIX *pix, *pixs, *pixt, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixd; static char mainName[] = "expand_reg"; if (argc != 1) return ERROR_INT(" Syntax: expand_reg", mainName, 1); pixDisplayWrite(NULL, -1); for (i = 0; i < 8; i++) { pixs = pixRead(filename[i]); pixt = pixExpandReplicate(pixs, 2); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); pixt = pixExpandReplicate(pixs, 3); pixDisplayWrite(pixt, 1); pixDestroy(&pixt); if (i == 4) { pixt = pixScale(pixs, 3.0, 3.0); pixWrite("/tmp/junkpixt.png", pixt, IFF_PNG); pixDestroy(&pixt); } pixDestroy(&pixs); } pix = pixRead("test1.png"); pixGetDimensions(pix, &w, &h, NULL); for (i = 1; i <= 15; i++) { box = boxCreate(13 * i, 13 * i, w - 13 * i, h - 13 * i); pixs = pixClipRectangle(pix, box, NULL); pixt = pixExpandReplicate(pixs, 3); pixDisplayWrite(pixt, 1); boxDestroy(&box); pixDestroy(&pixt); pixDestroy(&pixs); } pixDestroy(&pix); pixs = pixRead("speckle.png"); /* Test 2x expansion of 1 bpp */ pixt = pixExpandBinaryPower2(pixs, 2); pixDisplayWrite(pixt, 1); pixd = pixReduceRankBinary2(pixt, 4, NULL); pixEqual(pixs, pixd, &same); if (!same) fprintf(stderr, "Error in 2x 1bpp expansion\n"); pixDestroy(&pixt); pixDestroy(&pixd); /* Test 2x expansion of 2 bpp */ pixt1 = pixConvert1To2(NULL, pixs, 3, 0); pixt2 = pixExpandReplicate(pixt1, 2); pixDisplayWrite(pixt2, 1); pixt3 = pixConvertTo8(pixt2, FALSE); pixt4 = pixThresholdToBinary(pixt3, 250); pixd = pixReduceRankBinary2(pixt4, 4, NULL); pixEqual(pixs, pixd, &same); if (!same) fprintf(stderr, "Error in 2x 2bpp expansion\n"); pixt5 = pixExpandBinaryPower2(pixd, 2); pixDisplayWrite(pixt5, 1); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); pixDestroy(&pixd); /* Test 4x expansion of 4 bpp */ pixt1 = pixConvert1To4(NULL, pixs, 15, 0); pixt2 = pixExpandReplicate(pixt1, 4); pixDisplayWrite(pixt2, 2); pixt3 = pixConvertTo8(pixt2, FALSE); pixt4 = pixThresholdToBinary(pixt3, 250); pixDisplayWrite(pixt4, 2); pixd = pixReduceRankBinaryCascade(pixt4, 4, 4, 0, 0); pixEqual(pixs, pixd, &same); if (!same) fprintf(stderr, "Error in 4x 4bpp expansion\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixd); /* Test 8x expansion of 8 bpp */ pixt1 = pixConvertTo8(pixs, FALSE); pixt2 = pixExpandReplicate(pixt1, 8); pixDisplayWrite(pixt2, 4); pixt3 = pixThresholdToBinary(pixt2, 250); pixDisplayWrite(pixt3, 4); pixd = pixReduceRankBinaryCascade(pixt3, 4, 4, 4, 0); pixEqual(pixs, pixd, &same); if (!same) fprintf(stderr, "Error in 4x 4bpp expansion\n"); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixd); pixDestroy(&pixs); pixDisplayMultiple("/tmp/display/file*"); return 0; } leptonica-1.70/prog/insert_reg.c0000640000175000017500000001230112240303027014743 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * insert_reg.c * * This tests removal and insertion operations in numa, boxa and pixa. */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, n; l_float32 pi, angle, val; BOX *box; BOXA *boxa, *boxa1, *boxa2; NUMA *na1, *na2; PIX *pix, *pix1, *pix2; PIXA *pixa1, *pixa2, *pixa3, *pixa4; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* ----------------- Test numa operations -------------------- */ pi = 3.1415926535; na1 = numaCreate(500); for (i = 0; i < 500; i++) { angle = 0.02293 * i * pi; val = (l_float32)sin(angle); numaAddNumber(na1, val); } numaWrite("/tmp/insert0.na", na1); na2 = numaCopy(na1); n = numaGetCount(na2); for (i = 0; i < n; i++) { numaGetFValue(na2, i, &val); numaRemoveNumber(na2, i); numaInsertNumber(na2, i, val); } numaWrite("/tmp/insert1.na", na2); regTestCheckFile(rp, "/tmp/insert0.na"); /* 0 */ regTestCheckFile(rp, "/tmp/insert1.na"); /* 1 */ regTestCompareFiles(rp, 0, 1); /* 2 */ numaDestroy(&na1); numaDestroy(&na2); /* ----------------- Test boxa operations -------------------- */ pix1 = pixRead("feyn.tif"); box = boxCreate(1138, 1666, 1070, 380); pix2 = pixClipRectangle(pix1, box, NULL); boxDestroy(&box); boxa1 = pixConnComp(pix2, NULL, 8); boxaWrite("/tmp/insert3.ba", boxa1); boxa2 = boxaCopy(boxa1, L_COPY); n = boxaGetCount(boxa2); for (i = 0; i < n; i++) { boxaRemoveBoxAndSave(boxa2, i, &box); boxaInsertBox(boxa2, i, box); } boxaWrite("/tmp/insert4.ba", boxa2); regTestCheckFile(rp, "/tmp/insert3.ba"); /* 3 */ regTestCheckFile(rp, "/tmp/insert4.ba"); /* 4 */ regTestCompareFiles(rp, 3, 4); /* 5 */ pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* ----------------- Test pixa operations -------------------- */ pix1 = pixRead("feyn.tif"); box = boxCreate(1138, 1666, 1070, 380); pix2 = pixClipRectangle(pix1, box, NULL); boxDestroy(&box); boxa = pixConnComp(pix2, &pixa1, 8); boxaDestroy(&boxa); pixaWrite("/tmp/insert6.pa", pixa1); regTestCheckFile(rp, "/tmp/insert6.pa"); /* 6 */ pixDestroy(&pix1); pixDestroy(&pix2); /* Remove and insert each one */ pixa2 = pixaCopy(pixa1, L_COPY); n = pixaGetCount(pixa2); for (i = 0; i < n; i++) { pixaRemovePixAndSave(pixa2, i, &pix, &box); pixaInsertPix(pixa2, i, pix, box); } pixaWrite("/tmp/insert7.pa", pixa2); regTestCheckFile(rp, "/tmp/insert7.pa"); /* 7 */ regTestCompareFiles(rp, 6, 7); /* 8 */ /* Move the last to the beginning; do it n times */ pixa3 = pixaCopy(pixa2, L_COPY); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa3, n - 1, L_CLONE); box = pixaGetBox(pixa3, n - 1, L_CLONE); pixaInsertPix(pixa3, 0, pix, box); pixaRemovePix(pixa3, n); } pixaWrite("/tmp/insert9.pa", pixa3); regTestCheckFile(rp, "/tmp/insert9.pa"); /* 9 */ /* Move the first one to the end; do it n times */ pixa4 = pixaCopy(pixa3, L_COPY); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa4, 0, L_CLONE); box = pixaGetBox(pixa4, 0, L_CLONE); pixaInsertPix(pixa4, n, pix, box); /* make sure insert works at end */ pixaRemovePix(pixa4, 0); } pixaWrite("/tmp/insert10.pa", pixa4); regTestCheckFile(rp, "/tmp/insert10.pa"); /* 10 */ regTestCompareFiles(rp, 9, 10); /* 11 */ pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixaDestroy(&pixa3); pixaDestroy(&pixa4); return regTestCleanup(rp); } leptonica-1.70/prog/sharptest.c0000644000175000017500000000462512242265632014650 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sharptest.c * * sharptest filein smooth fract fileout * * (1) Use smooth = 1 for 3x3 smoothing filter * smooth = 2 for 5x5 smoothing filter, etc. * (2) Use fract in typical range (0.2 - 0.7) */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixd; l_int32 smooth; l_float32 fract; char *filein, *fileout; static char mainName[] = "sharptest"; if (argc != 5) return ERROR_INT(" Syntax: sharptest filein smooth fract fileout", mainName, 1); filein = argv[1]; smooth = atoi(argv[2]); fract = atof(argv[3]); fileout = argv[4]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixd = pixUnsharpMasking(pixs, smooth, fract); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/sudoku5.dat0000444000175000017500000000062611465606421014554 0ustar dandan# sudoku5.dat # tarek071223170000052Easter Monster (rating 99408 -- whatever that is) # rating: 4m19s@2 GHz (by tarek) # Actual solution requires: Req: 18.1M guesses, about 2.1 sec # from http://en.wikipedia.org/wiki/Algorithmics_of_sudoku 0 0 1 0 0 4 0 0 0 0 0 0 0 6 0 3 0 5 0 0 0 9 0 0 0 0 0 8 0 0 0 0 0 7 0 3 0 0 0 0 0 0 0 2 8 5 0 0 0 7 0 6 0 0 3 0 0 0 8 0 0 0 6 0 0 9 2 0 0 0 0 0 0 4 0 0 0 1 0 0 0 leptonica-1.70/prog/morphtemplate2.txt0000640000175000017500000000725511707074233016171 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: --- * l_int32 fmorphopgen_low_*() * * Static Low-level: --- * void fdilate_*_*() --- * void ferode_*_*() */ #include "allheaders.h" --- This file is: morphtemplate2.txt --- --- insert static protos here ... /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! --- * fmorphopgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fdilate* and ferode* routines ... } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fdilate_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ... pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.70/prog/pdf2png-color0000750000175000017500000000132510257405631015055 0ustar dandan#!/bin/bash # pdf2png-color # # Rasterizes a PDF file, saving a set of 24 bpp RGB png images # # input: PDF # root name of output files # output: 24 bpp RGB png files for each page scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # need mysterious "primer" # choose one of the two options below # output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=png16m -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${inpdffile} # output fixed image size #echo "0 neg 0 neg" translate | gs -sDEVICE=png16m -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${inpdffile} leptonica-1.70/prog/testangle.na0000444000175000017500000000047210613043265014763 0ustar dandan Numa Version 1 Number of numbers = 15 [0] = -1.000000 [1] = -2.000000 [2] = 0.000000 [3] = -1.500000 [4] = -0.500000 [5] = -1.250000 [6] = -0.750000 [7] = -1.125000 [8] = -0.875000 [9] = -1.062500 [10] = -0.937500 [11] = -0.968750 [12] = -0.906250 [13] = -0.953125 [14] = -0.921875 leptonica-1.70/prog/smallpix_reg.c0000644000175000017500000002031412240302421015274 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * smallpix_reg.c * * This is a regression test for scaling and rotation. * * The question to be answered is: in the quantization, where, if * anywhere, do we add 0.5? * * The answer is that it should usually, but not always, be omitted. * To see this, we operate on a very small pix and for visualization, * scale up with replication to avoid aliasing and shifting. * * To determine that the current implementations in scalelow.c, * rotate.c and rotateamlow.c are better, change the specific * implementations and re-run. * * In all cases here, the pix to be operated on is of odd size * so that the center pixel is symmetrically located, and there * are a couple of black pixels outside the pattern so that edge * effects (e.g., in pixScaleSmooth()) do not affect the results. */ #include "allheaders.h" void DisplayPix(PIXA **ppixa, l_int32 x, l_int32 y, char *fname) { PIX *pixt; pixt = pixaDisplay(*ppixa, 0, 0); if (fname) pixWrite(fname, pixt, IFF_PNG); pixDisplay(pixt, x, y); pixDestroy(&pixt); pixaDestroy(ppixa); } int main(int argc, char **argv) { l_int32 i; l_float32 pi, scale, angle; PIX *pixc, *pixm, *pix1, *pix2, *pix3; PIXA *pixa; PTA *pta1, *pta2, *pta3, *pta4; /* Make a small test image, the hard way! */ pi = 3.1415926535; pixc = pixCreate(9, 9, 32); pixm = pixCreate(9, 9, 1); pta1 = generatePtaLineFromPt(4, 4, 3.1, 0.0); pta2 = generatePtaLineFromPt(4, 4, 3.1, 0.5 * pi); pta3 = generatePtaLineFromPt(4, 4, 3.1, pi); pta4 = generatePtaLineFromPt(4, 4, 3.1, 1.5 * pi); ptaJoin(pta1, pta2, 0, -1); ptaJoin(pta1, pta3, 0, -1); ptaJoin(pta1, pta4, 0, -1); pixRenderPta(pixm, pta1, L_SET_PIXELS); pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); ptaDestroy(&pta4); pixDestroy(&pixm); /* Results differ for scaleSmoothLow() w/ and w/out + 0.5. * Neither is properly symmetric (with symm pattern on odd-sized * pix, because the smoothing is destroying the symmetry. */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 2); for (i = 0; i < 11; i++) { scale = 0.30 + 0.035 * (l_float32)i; pix2 = pixScaleSmooth(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 6); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 100, NULL); /* Results same for pixScaleAreaMap w/ and w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 2); for (i = 0; i < 11; i++) { scale = 0.30 + 0.035 * (l_float32)i; pix2 = pixScaleAreaMap(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 6); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 200, NULL); /* Results better for pixScaleBySampling with + 0.5, for small, * odd-dimension pix. */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 2); for (i = 0; i < 11; i++) { scale = 0.30 + 0.035 * (l_float32)i; pix2 = pixScaleBySampling(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 6); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 300, NULL); /* Results same for pixRotateAM w/ and w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateAM(pix1, angle, L_BRING_IN_BLACK); pix3 = pixExpandReplicate(pix2, 8); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 400, NULL); /* If the size is odd, we express the center exactly, and the * results are better for pixRotateBySampling() w/out 0.5 * However, if the size is even, the center value is not * exact, and if we choose it 0.5 smaller than the actual * center, we get symmetrical results with +0.5. * So we choose not to include + 0.5. */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateBySampling(pix1, 4, 4, angle, L_BRING_IN_BLACK); pix3 = pixExpandReplicate(pix2, 8); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 500, NULL); /* Results same for pixRotateAMCorner w/ and w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateAMCorner(pix1, angle, L_BRING_IN_BLACK); pix3 = pixExpandReplicate(pix2, 8); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 600, NULL); /* Results better for pixRotateAMColorFast without + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { angle = 0.10 + 0.05 * (l_float32)i; pix2 = pixRotateAMColorFast(pix1, angle, 0); pix3 = pixExpandReplicate(pix2, 8); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 700, NULL); /* Results slightly better for pixScaleColorLI() w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { scale = 1.0 + 0.2 * (l_float32)i; pix2 = pixScaleColorLI(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 4); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 800, NULL); /* Results slightly better for pixScaleColorLI() w/out + 0.5 */ pixa = pixaCreate(11); pix1 = pixExpandReplicate(pixc, 1); for (i = 0; i < 11; i++) { scale = 1.0 + 0.2 * (l_float32)i; pix2 = pixScaleLI(pix1, scale, scale); pix3 = pixExpandReplicate(pix2, 4); pixSaveTiled(pix3, pixa, 1.0, (i == 0), 20, 32); pixDestroy(&pix2); pixDestroy(&pix3); } pixDestroy(&pix1); DisplayPix(&pixa, 100, 940, NULL); pixDestroy(&pixc); return 0; } leptonica-1.70/prog/barcodetest1.jpg0000444000175000017500000004662610770123127015552 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ®‹"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷J);ÒÓ,;Ði(í@Å;ò¨×ïšwñPÐZJ(Ã¥7½PÒQGj)Z(  NôRjmPE©(h£½€ óA4èn´¦Š( ƒ©¢Þ€–ŽÂ“øÍ-Qš(£4PKIš(h¤£´”b–€Gz)E!¥íIüTƒ­:Š(  âû”úd_rŸH€¢Š(¥QL íIKJ:Ph¥èÅ´v bQ@¥ Bv¤ïN¤ µ%-”w¥íBô aÞƒGqJzÐ!3Å%) LÐsF(z€“øÍ:”t Ñ@êhí@ Eu Ð:Ñß´ wje¢)h¥Å4ÒŠ( aš(¥€ )qE%´P!(¥íIÞ€Ö—Q@Éâû”úd_rŸH€¢Š(¥îÑŠ)”QF8 ¢Š(¥¤¢€ïE(éMï@…£µv ¥¤¥ï@Jgš1EHhïKÚ€Š( Š( <Ðiæ—PE%´QEQE¹¢Ðæ’ŽÔ@ý.i1E;4RGN(hë@éøÑÜÐ ÍR÷ QAá¨Å'‹îSé‘}Ê}"Š(  ™£4cŠNôËisÅ#zÒÒ{QÈë@ÅíIÞŒZ&€ )[¸¡rGC÷hÏËFëHXQa‹š3Í%(¹£4 1× 3Eö£884PM Œri´„¥¤ãÖ”S¤£4„ó@Å£µPš;QŠLP æŠ2=hê))2=hìÑÚ’©€(êi2=ii€Qš;Òä2(ÍQ@ š)ZSÒ€ (ÈdRÐ!W¥!¢ŠMÜ©)‘}Ê}"Š(  ””´v¦X)»‡<Ò“ëXzŸˆãÓu+[3c9#u6³žõËxŸÄséSÃgcw1ùAn\·ñ$wôšZÄC"d½s—2-×Ĉc>TdóC胥ś\ñ]œFyì"0“±¹½uº°šÖÜc¸#ÐÔÚŒBK—\¿€¤òí/"+ÍšÍí]‹CÓÞy@/ü*[©4ž¿¼Ô´µº¼€BïÊÝ«Î!Ô#k­?M&ÜŒ·QZ~>·–ëC %ƒ>Þ˜Í]Ðum=ôHLrÆ¡TR–ƒê3þ+]bFµ¸ˆÃußOZÄ^)—M¹K +o:îOº›¸Ìi÷ÝüG‘ìˆdUä«qZ:Ò¾“ã }Rtjãk7e÷§Òà·d²k¾&²‰n®´ø¼÷—w WS¢jé­iés<Xú߈tïì‰Ög‘v…VÎIéÅ/ƒì%Ótôƒå»’ûvôŸVÄ[ñ/ˆ—E´ùtìvÆ‹ÜÕÍêæïL†{´)#®Y y÷ˆã¾ñ‹Ë-´—1[Ý¢!ë]¦‡ã=Fajе¬Ã…ŽDÆjWv3O]ŸT†Óv™Ë7uvâ¹_ío)Ütø‡üÜ ï™ãÙ“€+‹ñ/‹£‰ÎaûÛ¶ù@UéïTü€<'â­GVÕ®loR4hFNÚíÁœ×àÝ}2 /oqö¹Îö5£‰•µyì|³º¼ŸZ[ jo3 þµÊk¾0]6ìYZ@×WG)â¯èúúkV÷P§”Æ?ÇËxA ojtβu~Ã4uÔ«¤jž&»¿FºÓã†Øõ%¹®¼°XžçÚ‘H ozçüe­®¢K"$aµ=y¢M[A¢³øžâçÄ©¦ØF%÷®{WW’$vÉö¯!𯈣ÒaiäÓç‘¥lË9^+Òô½ZÛZ³ZÈHÇÞäSòg?«xªôkNÒ-|ùWØ·JãÄÞ#тͨiñ´‘¹ZŽ9Ãþ/¸–øl·º?,­ü&¯ø§Ä63ie·‘gšq¶4_ç@%ž±my¥ øÏîÊnÇ~•É/‰¼AªË)Ò- ŒFëV£´—JðÅ0Ù"Âx«^…SÃp¶1¿$ü´­­‚åm'Äš”z²iú½²ÄÒ}ÆUàÖ·‰“´DÎk¡¸C ÊÄrOµyÿ…a}CÅÚŽª~hÁÚ„P÷ìÏF(Ï5åȲµ–b 3ù ÀƒÅѾ‹.£å±6í÷¡îQœ~5òˆbgbTdÕM#R]SLK W\é\ÇÄlØé«k :á¶àzRle½#Ä·zÆ»5½¼Cìq ‡¹®°ñÖ¼ËÃþ&‹E³Š)tÙ’,|ÓíÈ'ë^‰§ß[ê6É=¹ Z);ÒÑLdñ}Ê}Gݧæ‘ÑM.£« ošŸÞ  ÒcŠ©¦X•çþ0$x£HãøÍwæ¸/sâm'ÙÍ Ok‘é‡þ.-ÎAÿT).‡Ù~#C3«$xôÝ5ÀñýÉ'þYŽ­Ò¶õÍ5ð“Y\ˆî! ‡´—pZ£rþUK‰é±«ðdnúmü©Æù[mPžÇ^lÚÜk1èß7$w®ÏB²¶°Ó#··páG'w_ZkQ½ÎcÀö–ëq|÷;ZëÍmÀ¨ã¥Zñ¼6ÂÖZÜ WcäÔºŽ‡ç_Ëw¤Þ­½È9|7P±ÑRkøîµ}N;“Ê o”: c¯³‡íT1L›Ë ݹ}«‹ñ7‡ôm&Î[³+F[‘±?Jïâ Ð,åBð7W/«xpjÂÝßÝ)µŒ‚‘nϽ'}€Ëøwáö´‰õÑ„“}ÀWµ[ñ³=Ô¶ºR€¢å¾gîŠë!kh8ƒF Œ*«V_ˆtDÔ¡GySEó$…»Õn c’Ô¼§-õ¤Ì&€åò­uVÓj^óð¦G‹µc WÕ¢\êˆlÁÁØ>fú×S¦Ãmoh--™  ÚÜô¥{¿¬í„Îêsæ3åÔ>1†ÞBÂKEE¹3qŽã5bÿ@¸ŠþY´}@[;s${¸¨t­"u«jBæá~è,0­+Ý Ì¹ã=NçOðßîC‡cýÜ÷¦ø;@±µ±KÉι•w g¯µojv6Ú¦•$sñ°ûÙÆ+†·Ñ5KG6úf¸¿gçäÎ⢚ÐOsÒ<ÈŽåbjà-Éÿ„×T'Ý+SÃö1é’¼—z£ÜÝH0rÙÇáÚ²­Ûwu3œâHw/ø ¡òðnøh×|'q.£ý£¥Ý›{’9xn*/L±ZßÉ#* œä³T×Ö^!ººy¬o‘`qòsºŸPFD7~ Ó|Oek¨y±ÉÔ*Ö—Ž ûDÚy”fßÎPùþµFßE¾OAuªêp3DxRšëu•Ónìͽܱ…qòÃB(¶—ÄVöi§l •°ð¶+˜ðrù:î§ñì*¶9ªk¢jr#[[k¹´ÇMß0ÕxsIµÒôí°È%-ËÊ9§»s&·“Ä!‡Fùc@wel}jž³àûo¬:ŒŽ$ˆÁßvA­ÏYZÝ\}ªßP÷‘ð>ïÀÕ¤ßêp£jz´OhŒmÒ»©1Ô|',€ÏJ¯à9³áèаßÁ¯X= IT‰ƒ†é\HÒg³»•´­b(¢ç`è ¥Öã4»ë÷Û¯Ö‡¨lw^ ãÃvþZÃñ¬røÞÁ®×÷»½ksÁÃþ)Û^ÃmZÖt(uk`¬Ûd)"¯JHrD—–¶ÙÎŒˆ#95Ïør[]¬nín'!=¨dðžµs¶ õw6 ò6õÕé:TZ]ŠZŪ¼“ßÞ›xgŒõÅ:Š(eS‰<’iì?v¡¦b øRÒÑ@hÍŠ#WâÀá'Ò°8ó+¾<æ¸å|K¥Y({‰ìS¶ù|uxz~ë°ÇëZ>foíI?¿l|û½k:ÜgÆ÷€ð|š»àD*º—?òÙ¨@yÇï%OÜ3Ç•èŸ æi|2KÇ'û«Í¼p¿ñTܱê1^ðÅ xeþ­R7¹SO”W_Žyà}yŒ3L5>e3ÝÇZôÍ9Bjž näŸä+Ëã`Ú®r%éøÒ—A#èí#qÒmÎ@ýØèÞÕã÷ì´äfEÉ ï[Ú7:U±ÿ¦cùW=ãíßÙQ ýêÿ½PÒÈÇÅzBùŽI' Á®ÛRcý›pÃ#äjá¦_øªôv?óλ}LgJŸýƧÒàŒÈ[ÃîrIÞÕ„Y¿´5Rr|z·µIà¬.€øþûf¢ð‘ΣªŽÞaþT[VŠÈÍâm`q'ûÇŽ+Êî'·Ê<×ǘßÅÇZõÿ„£Yôò«ÉîیʽLÍŸÎ¥ü(îq3˜Iòz¥yÇžw×.A• Ägê+ÑmÿäKQéô¯6ð3ŸøHnF?…ê÷!Ñ'•üváår¾iã°æ»+Cê?õËükŠÐÇüW‡þ»Wofü%ú—?òËüit…ƒøEµ\±_Þ¶1õÞxUŸþÛL±'`ë\’‘á}WóÔšîü*IðÝ©ÿ¦kTƒ¢<¿â²¯‹c ä;têhñÔ’-¶›‡ÚLjr3ÍGñ •ñr§þ…G3öM5h‡ò¨µÕÆ×½bǧ•àÔIrvxô®ÛÁ.ÏáÆ$îÆî­\€ßt:€ÿ¦F»Ï¾aîßÒ© nyˆg˜j÷¡fuO0ðXþ•ÕÇ$Ÿð­÷o9Ü9Üs\o‰H"¼9ÿ–? ëclü5'ý¡Ràé¤ojMæ±!V®:Æi_RSæ9O7¦ïzê<âÕ¡Øk²uFñŸ7úÓìqñ”ð{2±\D:ÖK&ýÈþ.¼Vÿˆï°ÿ¦k\ë|=ø:}ZC{Æ Â]7o¸\íozêË´$àǽr^.gÓý7_ç]^Ðû´Õ®ØÙáWW.¾8)½ñöŽ•kâË®®$Ùûµãqôª@7Nr?V~ ˆ×\ˆ9, cùT; 6iøi&Óõ0îY«öþ({¿÷š³ü"k @ +„=~µ§b¿ñD^cŸ™©Ç§ÌO©Üø;þEÛ_÷k|W=àî<=j?Ù®‡¢; ‹J)´´Ä)”´P1àfQTè2¦ =MAKE”£¥%Ò+‚ñpÿŠ—JãøÍwǯá\‹äcÒ¿ß4=Áíb¤*?á6»8ÿ–U{Àåq¨àËfª0Ÿø­îÿë•]ð9$ê?õØÐ·aÔó?Þ)¸ö"½á·ü‹Më“^qãusâ‹“ž8â½á±Ç†nMLF÷(içþ&Úÿn¼~¼Î4OívóæÿZôÛ¯¯P¯3.¡ŒóæÿZ%ÐHú+FÒm¿ë˜þUãóLOyùÖî‰ÿ k_úæ?•axô¥'ýt_çTTÇ(ÑÇý3®ÛTÓ&ÿq«ˆ˜øJ4~åw:üƒ'ÿq©=…Ôç|¸ÐŸýöªþÿž«ÿ]*ׂÿäÿïµWð‘ÿ‰ž«ÿ]Oòª[‡c6?ùõŽÿ¹þ•å2ÿiÎc÷‡ÿB¯W‹þF_×Êþ•åÈ´æ8?ëùÔt+¹íðø¢—þ¸JóoøŸ\ÿºÕéPÿÈ– Ïé^iàDeñ ÖOðµPt!Ò&ÿ‘Žð€Ö~ZìÓá±Âäd×âF?ð_cŸÞ×]sðäàž£Š–;‚ŠÿÂ?ªqÏ–k³MÚ¬$ÿÏQüë±ð^G‡5vá®>јjqdu:]l{Žº?âŽlŽ‘ Àf_ø§øôþu½¯7üQÎ?é’Öÿ™{ýáMnÅÓï6ü`3.šé°®§?è£ýÑ\¯‹ÿÖi¿õÝuMÅŸü©nÆ÷G…](ÿ„çqêg©þ" ¼yëå «tÄøì¯ý*Ÿ#+Ò>|¾ r2yüjbs>ÇO^ÇLä+ÌoÔxè%þµê68]O\9Èæ¼¼ø˜ƒÍçó¥.Œqê}¢ø”[×1ü«Çüi1úh¿Î·ôOù[×1ü«âü‚ùè¿Î¬] ™—*Òþ™Wm¨È.÷¸—$øŸHÏüó®ãSÿmÁÿa©=…Ôçüÿ 'ÿyÿ•Aá%ÿ‰ž«ÿ]MMàÃO÷Ú¡ð‰ÿ‰ž«ÿ]Oòªê¡ŸQâ}_þ¸ÿJò›©1¨M’ïø×ª§>(Õ*¼šðgT”ŸùèßΡìŠî{¸ÿŠ)ë‡ô¯5ð>ˆ'ìµzD?& 1Ç’•wþ epvæšÜ•ºÂ[ã¯|øýP¬8O¼?•tîWÁ§Ž|±X €IÜ)õbé÷›>1ÿ[¦×uþuÕä}“þ\§ŒÖé¿õÝuòè1ýÚa½Ñà×Já?s‚GŸÖ¬|HPuxAÿžB«]ÿ„éŽr<ú¹ãñ¿Wˆ?v*Xüе :l?ʵ´âÁ7€y«'À+¶×Q¶5liøÿ„*ïýãüèO˜w;óáëQþÍt W;àïùmÝ®Šœv½- ¢˜…íIKI@E÷i³†ݤ˜e  ]HSF)OZ)”!4f“½„¯á\‹äcÒý4®óµp^/ÿ‘‹Kãøè{ƒØ£ÿŠâëþ¸Z½àlyšžç½Q„cÇ—G·™«Þù¥ÔÏo>…»¹ç8¿á%ºlüµßü2xcþ#üëñ¹ð“]ªHü+Ð~2ÿÂ8Ê9PqŸÆ”PÞå;W\Ðט¡ÿ‰_I­zu™Æ§®óØ×–†ÿ‰ ÿ®ŸÖ¦]nÏ£4Nt›cÿLÅsþ>oø”GÏü´_ç]ˆâSiï®â ÿÄ™ë¢ÿ:¶#.Fωôúç]¾¥ÿ éÿÝoå\4Ÿò4hÿõλOþA“ž¿#R·º sžðF?°$çøÚ¡ð˜Úš§9ýïô« `Ú Ÿ.0íPøUv꺡õ”Õ-ÅÐ͇þF½XôX¯&¼ÉÕ#Ì<þ5êêOü%:·p"¯,–G:œÊÀeoçPöEw=¶  ÿÏé^ià\ÂAqÈ?+W¦B?â‹þ˜ÿJó:ÿÂGrÉÚüþ"…ЋH|xð¯¬Æ»kCßúeþ5ÄiIÿÞãÏï?vö¸ÿ„ÇPÇüòÿÁÔϰÿ‘oWÿ®­]×…OüS–™ÿžb¸}?þE­`“ÿ-Z» ÿå®:ykUÅØò߈„ÅÏaÿ¡S¬—±»ãõšoýw_ç]IæÏŸîW/ãn›Çü·_ç]I胞©Bî7¹áxÿ„á€ÿžõoâ #UB?çR½Œ¯YàÍV¾"¶Ýbñûº–‡€˜C'µ©¦ Þ »í5dü>pöZËŸÿ3Zúo »#ûÍG`îvÞ?ñOZök¢Zç<wx~Ôÿ³]ž)Ça±OZZm9zS‡­-©(xþí>CIݧžTŠDõ*Å-&0H£5E ŠÝ¥íIH?v¸¶ßi?õÒ»óÓçþ/ñ.’?é¥p{­ùñÅÞx>U\ð@Ãê@õóÛš©øMîyêM\ð[6¤¾“Ôç›øÙþ«¬˜É¯Bøj˜ðÛƒÓ'ç>9¯‹. ú+Ѿ¶ÿ ¾F94Þå+»Y×Aÿ¿ÈW— Oy¿Ö¥ôê}¡ÿÈ×þ¹­axÿþ@ëÿ]ùÖæ‰ìk\tòÇò¬ˆèÉÿ]ùÕô*Oùôúå]¾©ÿ ûŸúæÕÄL6øŸFÿ®uÛêéóçûG@[œÿ‚GüH¤í·ô¨¼+Ƨª/¤•7‚”.…&?ç£J¯á#»VÕ³ÿ=E?´%±Eá(Õ½D?Ò¼¦ðfö\®H‘¿zœ`jãÖ*ò«íÑßN ðdoçPúÜöû~|¾¾Gô¯6ð T×îNߘ†æ½&ß®ü°þ•æ>ÜÞ%¸ÉþªB¶\ü@e'äµwV‹ÿޢ鑮Hù|{Ç9”óø×khþ=Cž<š•°te;ÿÖ°;y­]¿„F|5h?阮#OÁðÞ¶O5«¹ðdžìÀyb®#ìywÄQŸÄì?ô*‹Ç¸R‘Ï–?•Xø†ãþ¸þƒÿBªþ?æËI?ìåR¾[’|<ƒPêw¾ ñO¹ûíÀü+ø|ÄÅ~?éŸô®óÀêG‡_æþ6ª[“‡x•ÉñØ#¼éøWa?á\>H®OÄ`Þ‚@ýáþuÕ ÝðÞLsȤÆ7Áÿ O¾×!hDšŒy‹¤ƒÞõÕø##Ãú =×#a)7裡”:]‡Ð÷ }¶ø5ÛÖ%®|WÃÇÔå]ˆGüQ®=bÈW;÷aððô#ùзdËc{Æ+ûÝ4zN¿Îº“ÿCýÚå¼_÷ôßúî+©?ñéÿKv6xeûãr$ùÔÿˆ¿ò ÝŽ´Ë˜›þ—bp<þ”ïˆälD½?v8ü*X¾Ÿô-Gü§ùV¾šü!WdŒ|ÍY_výŠøãøMkéüø2óÓsR]¹Ûx9Gü#ÖäõÛ]®sÁßò.Úÿ»]ô¦†Âœ½)´´Ä-æ’–€&îSºÓbû´úD•$‘©µ,ãçúÔ[ªŠôRÑHšàü^?â£Òë¥wg­pž/ÿ‘‹Kÿ~€{"9ñÍÉÿ¦5oÀÌ»µŽ|ãTáÿ‘òëþ¸Šµà_õú§ývj`·<ÏÇ$ÿÂ]v>•é? øðë y׎ÂYrI‘^‹ðÌÿÅ:øþóT!½Ê–?&­®dã#ÈW“¿R÷ÿZõ{Cc^ÎùW•|«©d09—úÒ}-Ï£´/ùZçþy­`|@ñ&LÏEþu¿¡ÿÈ"×þ¹åX>?ÿR×Eþu}dOÿ#Fÿ\«¹ÔŽ4ÉÿÜjá¤ñSèÙÿžuÝjCþ%—îçIì sœðCnÐdÿ®ý*È_Uÿ®¢¦ð@A¶ßÌÔ^ÿ¾ª?éµWÚØÏþF­WŽ?Ò¼¦öUmEÀÿž§ùתÆ@ñn¬_$ב]‚º¼Ì:y§ùÔ>…w=ÖߟŽ?å‡ô¯2ðÄw¦Cq^hsà G_#úWšx ³ø’ãp…~UÔ]4—_øOƒæµv¶§þ+}@Óñ®7I<|Ä 8Œþ5ØÚóã{ÿúãþ5(:2•‚mðÖ°é«Wsá?ù­ÜZâ4↵qž’5wñNZçû‹WìyWÄvÅñ@?ô*oqö $äsþU/Ä §ÆpOOý ›ã͆ÇMÜ8ò×ùVdkq>|°ßÿ×ü«½ð?Íá¶?í·ô®áé]º€)«½ð8ïï·ô­ä­Ñä^!(Úýêàgyüë©@?á\¾ãÞ¹/’¾#½ãŸ6ºÔü6rp)2†x< ðþ¥ŽÑžµÃZ<©D ýàÏç]¯‚ðt O×!f¬5(ˆG›ýivCÛõÿùßùb+ž•¿wáß­tzÿü‰²×%®lÝøwýáü¨[±=ÿ’Nœ?éº×SÒËœýÊå|`v¾ï:×Uÿ.Ã?ݪÜðË©b6nN|ìS¾#2rqÄUZí⺑ÿ-êïÄ «A¸€|±üªX"×ÃÞlu9]§ùV¾šøðEîxùš²¼»mur6šÕ°Ãx"ûêÔ»¹Üx4ƒáÛ\vº5é\σ<;l;m®”u8§…QLC—¥!Í/ðÐ(X¾åILîSéC0ÈÍAVdûµ\õ¦R ;QEž+‚ñsÅI¤ÿ×Jï5Àx½qâ-+þºÐ÷Ø­ÏŽ.°úŠ·àPV]Lùî•U‹Ü?嫞 ͪÿ=š˜-Ï5ñÊÅOs’1‘Íz'ÃEQá·ÁÏÌÜלøëqñuÀ'Ž+Ñþ€<<Øþñ©C{™öëZð#×ù óˆhp¤þ÷®ßzôý=HÖuóœdtüyŒrm¿l|Ü~µ/ '«>ˆÑ8ÑíGû X?üI”÷/ó­Ýþ@Ö¿õÏúVÄ?ë¢ÿ:¾‚èdÌwx£Fÿ®uÝjCþ%³ÿ¸ÕÃH?â§Ñ¿ëwZ—eÀÿ`ÿ3Iì s›ðPÿ‰ÿ¾Õ„À][U笢¥ðC Éÿ]ùš‡Âgv±«ÿ×_éT·ØÍâ­Õ[Ò#^Q~¸Ôd|ËFçñ¯XˆÅY«úcý+ÉïÕüÇ9k:‡±]Yî6§þ(é‡ô¯6ð&?á#¸9þ¯H¶ÿ‘)s×Èþ•æ~;|G>}©n&3Kù|zºg5ÚZŸø­µÿLk‡Ò_wÜöšîmá3Ô_ùcý*b>¥ ¯‡5Ž?å£Woá<ÿÂ7iÿ\Åqþ)Ícþº7ó®ãÂò.Úÿ¹Wv<Ãâ! âˆÆFâ?­GãßøñÒûüƒùS¾"¨ÿ„®2zàèU‹ 'óÌ*…ðn/ÃÜùWøÿž'ùWà£ÿûç¿¥yÿóûCþ¸“úWàrO‡äÏ?;cô«[’´±ä>!*ž!¼ØA%Íu€ðâPEq¾$|C|H#÷§Ú[Ÿø·,Xd“IŒ‡ÁeWÃú˜ ŒFk³?ñ1U?óÐ:ëü?âE©ú5ÇZ‚º’'LÈ1ùÒìoñð†¾çÇä+@1èë‘üë]Ëx%óÿ<–¹ãòÅ qüê—Ä'±½ã½¦ÿ×a]Rñh?ÝËx»®ÿ]×ù×R8³ÀÁDwc{žz£þBÙÿ–õ/ÄP?µà ÿË5þU^ùˆñÓúmV~ ¦íf{F?KË¿‰6·ùþéþµ«¥< {þûVO€qöMDîækWJx&÷ÓsRì©Üø4¯ü#– /ð×F½+œðiÃָ鶺1Öœv(("Ö”Ó$?†’Gj–/¹O¦E÷iô‰à Õ\UÃÞª°ùÖ™HJ(íIL`xÀøÁü$zOÞW}ÛÁx¼ÅG¤ÿ×JOq=Šp17¹ã¸5{ÁMºMS<Ÿ8Õä{¸ÿ®oÁëµ<Ïf¦·aÔó¿m&¹c8¯CøkáÃZóooÜuê+ѾÆWÃÏ“˜ñR†÷)Xgû[]Àíý+ÊÔãPoúëýkÕ¬‡üMµï§þË^XÀAÃÏ^?:—ÐKv}¡È×þ¹åX_9Ñ×?óÑnè'þ$¶ÙÿžcùVÄù¯ýt_çWÐ:2Ÿøª4úç]Æ¢s¦ÍþãW 0ÿŠ›E?ôλ­DgOŸýƤº‚Üç<?âDùþûT>\jú·ýu©¼ŸìIë£J‡Âg:¶«ÿ]*–â[±øªõNÿ¹ÿò«œ¶¡6F‘±ù׫ÅÏ‹uaÿL¥y-ì¤j3ã'÷¬?Z‡±]YîV„ÿ¤ù`•y—TŸNHà«#^j?â‹Sëô¯5ð1ÿŠ’sת–÷"ÒcŒxí¤¬ÇÆ»[RŸðš_qƒåtüë‡ÒüW¥=%?λ;^|o~¿ôÆ¥h‡Ô£dâÖë£1]Ï…üS¶¿îW`?âœÖ¿ë£Woá1ÿݯÀµhK¡æBŸÆIüê‘ö ,ÿÓ/ý–¦ø3âØ”œ.þ…MñÌa¬t±ÛËÊ¡í øzw@v5zÿä[÷›¥p_¯öóÈ×wà’O‡Ÿ?ßoéV·'±ä>(8×ï4⺫`ßð­['æ +•ñ(ßâ Ìtk«ð­Ÿ)1ø,ƒáýPõ; rm›ø»~÷ú×_à£AÕp:¡®2ÐãQQÿMGó¥Ø:é¯ÿk×%¬‡A$ò téð…??òÈ!\ú€`ðþHê?Rø…-ßtïúîµÔƒþ‡ÿÊxÇïiüÿËu®±qö1ŸîŠ#»ÚGƒÞ:·Žœ›ïTÿ þÕƒþYÔ…á:eÇü·©þ"È­Çü²˜©6š†xùò­K<z:üÍY~$Û_ãûµ©¦ÿÈ“þóT®ƒîv¾ ÿ‘n×ýÚé;W7à¿ù-Ý®ŒõªCè8QÞ’ŠbJ)­Ú—½ &‹îþ4úd_vŸH‘*_˜ÔôÒ¹4VŒqEªŠ® ÆX>#Ñÿë­w™â¸/Œø‡J>’Ò{ƒØ©cÇ×8éäæjßNéµ?úìÕZ5Ç3æ³àU .§Ÿùìi­Øu<ëÇ'o‹n ôO†­Ÿ·ûÕæ¾¥[g]íò×–Ùµ&9ÈóùרéÌN³®©ÈÈþ•嬘ÔYwùŸÖ“Ù nÏ£40?±íqÓËʰþ ÿÈë¢ÿ:ÜÐä kÿ\Ö°~ dè«ÿ]ùÕ=ƒtdËÿ#.‹þïô®êøgM˜îå\$ÄhÀŸùg]Þ£òéÓcûIlÁw9Ï+ QœfFþ•_ÂòÕ‡¤¢¬x “¢ËŸùèßÒ«øP­jßõ×úU-Ķ(CÇŒunyò?¥yÒ«JäŽeoç^¼„êœg÷ ò;ÿù Ìzþôÿ:‡±]Ït´Çü!J:þãúWšxPÍT)l†i £Ç.qÉ•±]•¯üŽ÷ùòƸÝ5sãÃýÑ+WimøM/Oê©-‡Ô£§ÿȽ¬öÛù×qáSŸ ÚŸö+‡ÓüSÚÉÏüµoæ+µð‘Ýá«LŸàþ•I t<¿âN[ÅPýþ…KãˆÏØ4¬‘ŒþTŸ”ÿÂ]9éüéÞ7`–^p3þUö†ü?o’ÿþ¸šîü3áçÿ}¿¥p~ -ö?ç‰þUÝøÿÅ9'ûíV‰[£È¼@1âÑÛÌþµÕD1ðâa\¿‰~]~ôç†×Uÿ‹q#ReüÆ©ö q–£þ&q‘ÿ=Gó®ÓÀø:&¥Èû‡ùWjÔç•—úÒì.‡¸k ·‚Ý{˜ýsäf ûŠèuÑÿ[Ÿúeýs¤þãAÇ­WÚ¶7|g÷´ïúîµÕÿˈçøk”ñŸüÃëº×UŒÙ÷hŽìiv¬|})Ïü¼UŸˆÈͬ[ßòÈTWÊWÇoß÷Õcâ;*êœsåçIˆ¿ðùH·ÔáœüÕ¯§œø*ùAΫáën‚ÿ?Ü­}4Å}þóR]Ðí¼ÿ"å·ûµÒ÷®oÁò.Zÿ»]8§žÃ»Ó—¥74¹¦H^Ô™£¸¤ÑýÊ}2>‡ëO¤H”gQ@(ÇQTPÜWã"WÄ:Hõ–»ÓÅp^1¼C¤ŸIi0èP‹yñåÆOE^ðAn­Ïü¶5^%Çn¯î XðIçU;q‰šŸpêy·?äm¹ÇN+ÐþÿȼÿïóÏ|¾)¹qÅzÂî|8ç±cR‡Ô©§ÿÈo]öå^`Í‹ìÈ—“ø×©Xýµ®qü#ùW—>>Ü[?ò×îþ5/ —Sè ׿îÇò¬_ýŠ8ÿ–‹üëkBçH³?ôÌV'Ücþz/ó­:p?â¥Ñëw:Æ/û‡ù× +gĺ7ýs®ëQÿ|ßõÌÔ® »ç‚üHåÿ®üÍAá@µ«×_éRø?Ø2ÿ×Fþf¢ðŸü†u÷ê–â[øK5LÏé^I~qªJüõoç^³'Åú®?çô¯#¿V:¬Äž<ÓüêÅug¹Ùœx%ë‡ô¯6ðlj&nä5z]˜ÿŠ!ë‡ô¯4ð7>#¸è¯¨º Ó]GŽöîüó‘ùWelOü&×£òƸ­-WþÖ8äÌy®ÞÔÅk}ùãQêfé£þ)­o=|Çþ•ÜxDcÃv™þçô®+Oÿ‘Zÿ®¯ý+¶ðü‹vƒýЏ‹±åÿc2xž=§nãñ¨þ ý—¥üÃýXþ/j³ñF3ÉÇEãÅÙšVx;…GÙ)nGððŒ_úˆOò®÷ÀÜørBzïjà¾Gòž!<í®ûÀÜxyóýö«[’·Gø”ŸøHo¸ÿ–¦º¸~I\—‰˜^ã?뺻PÇᤤŸâ¤ÆÆx cEÔÈòÌŠãlð5÷ùj?v~ÿ&¦?é™®>ØgQ‰OQ ÏçK°-q×9ðdœg÷_ÐW3ôo½]6»òø)ñÓÊÍ¡7¸þu_h]>ówÆ_Nÿ®ë]V?Ño–¹Oîߦúyë]n1iöhŽìotx& ?â¼›?¿«¢-¬[¶8òÇóªZ‡?ÚjÒø‡ŸíˆÏŠ–Ÿ‡¨~Ïü'úÖ®•ÿ"Uøôv¬Ï‡Á„7ù=TÿZÔÓüQ—þ»š…²µðYχmϱ®‘GË\ç‚ä\µÏ÷k¢hOA±Hæ–Š3ÍPƒ´RŠ@KݧÓ"û¿>‘!EP>Ô”¢Š¢†‘Åp^1È×´¬tW|Mp~19×ô¯úëIƒØ«øN'@8ò*ׂÁjgþ›«Gçàÿ©«^ æmSþ»¡Öç™xø–ñLãÓè¿ ?ä]÷p>9@|Ouž¹ß|5ðûýM%¸Þåm?þCzàöþ•å’.u6ïûßËšõ;>5½wýÚò—“þ&„ÒÿZ™t´>ŽÐ¸Ñ­ëšÖmå¢ÿ:ÛÑ :E¶ç˜þU‰ãßùúè¿Î¯ ™“p¸ñ.‹ÿ\ë¸Ô¿ãÂúæk‡œÿÅI£×:íõùÍþãR]Ans¾û _úèßÌÔ>Cý±«ày*oœh’ÿ×F¨|*ÛµXzKý*–â[ñ²¯‹5B'ÉëøW‘êFÕ%sŒy­üë×þF½LôÌ?Ò¼žþ5þÐäçÎ9ÿ¾ªÈ®¬öëÿJúùÒ¼×ÀJOˆ®F¯J²þ¤îùç^B?,Gü¶?λ{qÞãþy • w(XcþýkýöþuÚøKþE»_úç\Uއõwoç]·…8ðå¨ôJ¸‡cÌþ"qâ„úZ‡Ç̲ôÏúæ?•IñÿÅO>ƒùÔ^=ÿ^—þàþU [‹ðøþîôú•wžñO8ÿm¿¥p_[r_Úü«½ð9ÿŠ~SþÛU¢ñ2â+²?xxü+¬µÏü+YAîk•ñ1Ýâ+¿_4×YËðâR{T±ŒðRãBÕ1ÿ<ÍqvÁ¿´ã9ÿ–ƒù×oà¹ö&¥Çü³5ÄÛH?´ÐcþZçK°Öǹë7‚ÛÓÉþ•Í¢ßÃøù‡?t:Î?á úä+Ÿ8û6€=êþÑ=>ówÆY#N8?ëÖº•9µîŠåüeòýƒþ»­u¿ÑAõQDwc<QþóÇü·Í_ø‚âmÈÆ3ùU=I¶øå½æ«?ä-n3ŸÝŽ?–4^ðð#oâ­=7þDÛò½75d|>è÷ãþ™µkiÀ/„/ùèZ…²™Ûx3þEÛo÷k£®kÁŽ[ÖäõÛ] 4E Ž¢ŒÑš¡ Š(Í€š/»O¦E÷iô‰ (¢€)âÀ"—µ%2Æ‘\'Œ†uí'óÖ»Ã\'Œsÿ ’üõ¡ˆ§7ü'?òÀÕ߯Õ:“暥oøNfç#Š·à“ûíPÿ- {óÿ UÆF:W¡|5Çü#Ïïó¿dø¦àÈȯCøfü#Ïõ5=J{”ì¿ä=®ñÎÑŒý+Ë>í37y¿Ö½VÇw]ÿsúW•ÿi?ò×úÒ}uGÑÚÿ‰E¯û‚°üÿ aÿ]ó­½ þ@¶¿õÌ*Âø…ÿ Qÿ]ùÕôæ4¿ò2èŸîWy¨Ç„ÿõÌ× (ÿŠ›Fÿp*î532cÿLÍ%³§;àùKÿ]ùš‹Âcþ'¯ýuþ•7‚rt9qÿ=ùš‡Â`cVçþZÿJk¸–Åÿ‘¿Tïûé^Sw)„èP ÊÜþ5êˆOü%º¨ÿ¦ ò‹¶c:ŸçRúºžád1à¸Èÿž5ç^ Èñì:Ù¯F±ÿ‘-qÇî?¥y¯‚7ÿÂK8Ïfªê.„:\L||Ì:yÆ»[aÿçýr®'Ir¾:eÏËæµvÐ7üVWÙÿž5+T.ŒÎÓÎt dzHÕÛøSŸ ÚàÿË:â4ñŸk\ËF®ãÂ|xvа*£¸v<¯âBŸøJáç¨ú'¸Ó4°Oü²ÿÙjOˆÊá+‡ÓÿB¦øügMÒý*]B|=ÿhcþy5wÞ_ø§ß<üíý+‚øt»VøÿÓ#]÷‚üH%ÿ}¿¥R'±ã¾(µÛÅQ´ù]EžÿøV²mØjæ¼LI×ï92êa]¿ ¤=Á¨‚#?ØZ™'»5ÇZ.u%ÿ®ƒù×eàÿØ:¡'Œ×gƦ€õY?>À¶=Ï]ñF¿ýqÈW:ßê¼?þð®‡[$ø1ø?ê…sd‘‡¿ÞþÑ=ƒÆ§×tþuÔøô rÞ1ûÚoýw_ç]Hÿ!þí8îÁ¨‚|xÙòÚ­üD8Õ`ì|º‚ý·xÙÉí=Yø‹ÿ!8N8òêYH¹ðüÿ£êÞÛZzhÏ‚ï¿ÞjÍø|êm¯ð?‚´ô³Ÿ^ƒýæ¡l'±Ùø,Å;kþítÉÐ×7à¿ùmǵt”âSôà)£­:˜ƒb–Š@KݧÓ#û”úDQ@3IEÏ4Ë×ã+â #ÞZïÂxÌÄûIÿ®´1ã?ñ]Oÿ\*ׂx¸Õ?ë¹þUR1ÿܧþ˜U¿ôSþ»â<ÛÇn‹.r¼ñ^…ðÀ±ðóŸöÍy÷\ž?‡šô?†dÂ='9ùºÒ‰£*XÈk^þè+ËSSlœ~÷§ã^¥dH×µÎ:¯¯+hØj%™€ýïOÆ“èJê}¡È×þ¹ÿJÂøƒÎˆ8çÌ_ç[ºü­ë˜þU‡ñ}|ÅþuOaÒÿÈÉ¢ÿ×:îõùÍþáþf¸y×þ*=þ¹×q¨ŒØL?Øj:Üæü âG/.ÕAã÷Ò¼Šø(Õ'Ÿõ­üë׿â¯Õå‡ô¯%¿U:”ÍßÍ?ΡìŠî{…ÿŠ)Gý;Ÿå^mà–ÿŠ–t·W¥Xóà”ÿ®Ò¼ÏÀÃ%¸ìÜÕu…m(cÇÇþ»í­[þ+kîÿ¹®CL@Ç™|GãÅq×ÿB¦xèÓ´²ÇŸ,*>$µà•?غ™ c5ÆÛ®5(ÿë¨þuÚø cFÔÆsòJãíÓþ&Pÿ¿ýiö±íºÑÏ‚ßÚ!ü…s’œÅáæí¼WK­qà×ÿ®"¹·ìþÿ|U}¡=‘¹ãšv?çº×V?ãÌc'ä®[ÆC?þ»­u_òçýÏéB݉¨‚­üD êpúyUGWó?á>eÚ&â Χ?òÌ:–R,|<ÿMC ‡ùšÖÒ¸ðU÷ûÍYWýQÿrµt¯ù¯ÇûMIl'Ôí|sá»o÷k¥Íx$mðÍ·Ð×H*¢6-RÓKšmé<_wñ§Ó"û¿>‘!EP3E;Òb™C[¥p~1ëºWýa®õ‡VV¥ Á©^C<ÌA„îP:f€8ÔÏü's‚1ûŠ·àŽnuQŸùlÕÑ[]õ æFM„Sô­ &k‰!$™Ü— G‰øöø¢ä–ÇN+¿ø`¸ðóŽÛhêÞÓµ{漚Yƒ¿ÞÚÕ³¡ø~ ÓìÐä©îzЕ†ÝÙÆÙ.5Ýp±ý+ÊÛ)©¶õÎeãó¯ ÓÃpGwu8$½ÏÊØ¬ðÓMy¼âîíØÝÆiXÒÇM cûÓŸùf8¬?.t @ÿ–‹üë§³´–‘Û©Ê¢àU}[I‡Vµò%b0#ÔÚˆ¸Vÿ„‹Dmßòλ­CN›?Ü?ΨŸ Z5Ý­ÎóºÝp™ïZ³Ä%‰÷¾˜¢À·9_œèrÿ×W¨|,âsªúi]“£E¤Z5¼$•/¸g¨ÏZ4í >îææ&%®s†ö¦ lŽ5/Õ~o#úW’ÝÆµgù¾S+:úþØSžÿwï&BŒ¥s²|1Òd¦ÁÞå›ïRåºAähXø¢Ð[÷?Ò¼×Àë·Ä÷á¿¥{$:TPé_a |°»xúV6™àk*øÝÂï½²>ôÀòÝ9Oü'ăǜv¶ù>6¼ãþYVÄôø5c¨‰dóKîÅiÅá«eÕ¥Ô79–T*i%dnpº~Fƒ® ËF®ßÂþ)«AþÍ6? ZGgwm— tK9úÖ®›§Ç¦X¥¬LJ ïL;?ñ%1â˜óýÑΓÆä+KÀ9ò¿¥z.µà«-rþ;©ÝÀLõ¤Õ|eªÛÁÎvÀ¸6ÒÃoÞ¹ç?ÉÍð?óÄÿ*ï< ?âC(óÑ¿¥ZÒ|e£‰<–9‘vœúV¶‘¢A¥Yµ´DíbIÝý*‘,ð/#/ˆ®ñÿ=MuP)ÿ…k)Á®ÒÿáÞ›w%Ã<ÜäúUÕðm¤z+iÜÂÝéXg›ø?Øš¯cå×#°¿RNx{ž—à«-"Ò{x]ÊλNzÕøm¥‰MïÛ€¢È.]ÖÇüQ¬鈮iÇú.þõw÷:LW:AÓÎ|²»9ëTá´òìÓ{‘jÙ\ÓûWÕ¾1ißõÝ?u bÓÓ䪚ž¨°‰‰S_­hˆÇ—µ³õü(µ‡Öçêlßðœ0#?­[ø‰¸êp€3û¡^‡7Ãí>ãV:w–Ý~µ6±àk-jd–gpʸ╂çŸ|=B‘_äã)Ò¶´ÆÁz†;šº­'ÁVZ?š v>hÃgÓb Ú[é²Ù);%%‰ôX£|sá«o¥t³ô6-"Æ;HX”N™«ô%d6î-«ÒІ–ŒP±}Ê’™ݧÒ$(¢Š«Ú’”ÑÚ™AHE„…þ­@ Š*(® –gEugN v©Š4Šrž1I8¦± ’œµ8ŠB+5uí5®>WÝŠ™zRL,-&(¥ï@ N^”˜æ”P±ýÊ}2?º~´úD…Q@h¥¤¦Xw¨/d–+WxS{…à­OHü©ž”Äy†¨êé®j2ElŒÄüÈ_¥u~×®µ9®bšØG䜖¶}«•K¹ÓÄú•¬dË;ÎÞ‚»Ý+M‹N³XÀùÞ!zžô€Ï“ÅvËvm|©ÃîÛþ¬¨¨_(~ïÞÍhi„Eáhþ×er¸ÜqŠ`fhúV›7‡Vi•Yt’ Ô¾½i´û˜D…Ö) ¡ žœôª?ÙúmŃ]E},0rZ0Ý=±ÛéW|gö}2i6•ŽI PW’8¥k *èØÏ~Ú’+ÎãÍ=¤Ñ<¸õ{š4º|W3"Æó„ Œ­SðŠÙ­œ—%ïy23ã"¶ôMaõ9îvÇûˆ› ý44`éC¨øšý¯ö»Âq3vëšÖ¶Ñí-5µšÖê5ãæ„6* _G±’ûí]‹kŒ|Û[nk?ÖÀx¦r—r\„N\¾êVQ|]¨DúͥČ\*ýïj[TÒ®µ+°–·š3¥1¼}iší´ 㫵ÄM‘–Æ3RxˆZ›ý9mBý È¼ÆÝ¿Â„€›Æ.Þm’HÍö6”y¤wõOÄvúTZ\oo±.7,ÄÝx«þ6i‘[@YC¶î‚°µ"ÆÂ++›9|É„‹€_;‡ÒŽ¡}Ðjk§èÐÏv®[o8ŽiÚv¹o«3˜VQ·Ÿ™6ÕØãY­P¸^@Èuâž-Ñ„h«‘ü+L>ÖÚ=cÅ7v…âƒäU-Ç4Ù /‹lÚØlŠç*è­ÅI¥H4ß_Å9سèÍŽqF¡2ê^-°†0ƒ,äR´tU=W#MœŒPýGmÕŠ§ªŸø–ÍœŸÐ3Ï|%u>‰*M$Œö·RÉþÏÐkŽ_ĺS p¤œáª#NMKÂ^VÂd>â±­¯å¸ñŸi1"{bC{Ž”%v.—5üZLÚ…¬ÌñÙ³|í»ö«Wz&‡—)†(Ù‚¥Ÿ'ëQøßoÙ-¡`É*†œZ¯7†¬IsÌ­µ23&áÔP·e3GÁD'‡”+‚ßýjƱû%ψ¯Æ¯µ¤Ýûµ•¾P+cÀÜxz?cÁõ¤º‡FÖõ)¬¦Œ¤ðž¹Úh$‹Vðí­Äi>“²;„ ‚¼Ï­oÈ&]$‰›2„ùˆ=ñ\f¥¦ŸOÖrå¤ÊgÝ‘]¥Ä›ô–s÷Œ`Ÿ­A˜>-ö+ŒÈ[÷ÍÁú×aÜ×àÍÏývoé]Ÿ¥$0=)qÅ%*õ5@´‡¥€š?º~´úd_vŸH€¢Š(µv¤¦P´Ž¤¯®})iGJͷѬ­o¥¼Š™ܧÒ$(¢Š­HFy¥ïJzS(AÒŠCÖ–€ø¨ïAb€ôQE©)h ïKE†’”ÐzSW¥%*ô¤ï@û´w¥Å%袊@†—µ%0íKÞ“½- ŽôRÐQKÚ’˜ (Å%;øh))h ¥ïEéw¢–ŒS1E-¤RÑGz\ÒZ;SW¥ƒÖœ9Ò(ï@éGz–?»øÓé‰÷OÖŸH¢Š(±é@ëHÝiA¦X7Z;Rž””JZ( aÚ’–’€ JpéI@‚Š)h))Ô”ÀLÑKŠ1@%.(éÅ'zZ( ¢–ŠJ)qÅ%QÞâ¤ESïKE”QŠ1ŠQGz´Q@ Þƒ@¥4€n(Å-À©¥¢ -v ŠÀ–?¹O¦G÷)õ$…Q@¨¢Še… ëE(  (¢€ (¢€Ô”¹¤ AEv aE¢˜ƒ½/j;ÐÝi JZJQLBLÒÒb‡^hÏ4Q@…¢À¤¤‡Jm(éI@ŠSÚŠbÒ’—µ% ’–Š¢Š;Ð ¢”õ Ð0R´´ÄQŠ(b—øh))êCÍ%( AéNjozZ’/»øÓé‘ýÊ}"BŠ(  ÔQE2ÃQÞŠ(ïIN^”†ÖƒE+u¦ÿ¢€ Z;Òâ€))hí@„ïA Rž” CÒ•zQI@(¢Š(Å'ZQ@û´ (í@ KŠ¥QÚŠ(þ1E-&(¥¤ ŒsE/ðÐJSAé@ E*ô¢€ 1ÍPãŠ;Ò¯JOâ ½ õ¥ Æ(¥¥(ñýÊ}2?»øÓéQEÿÙleptonica-1.70/prog/blend-red.png0000444000175000017500000000755111653424354015033 0ustar dandan‰PNG  IHDR?{¬$VcPLTE  ##707?:@@9>q BþwõàøÑpþ8Vpœ?ÑùÕ}ÞˆéSÙCƒ[ œ½ìíRüôw¥gõ‡ùS:©¾ªÀ¹|(k:¼ n5²°Â9È'Æ=<ÒñWqÜþØP§2ÿÁgH=d;Lþð¶žÜ%Hƒ™59%«"X·QaÚ¨$÷ý¢ ˜ÑC]{Œv-9²Â¨ôÒùs!Nó§Ui:‚­àq輪´OYoWeRgУhµª…Zü‘&¥ªa2þ4ë]Tëp8$£ÓL¡Ak¡j+i›hm-Ùô1E;nΟ qž?ôa5³¤Á>t»üÑ_åFŠ¿&…‡jö¥°Tdú/«Ê.’Õ©ûs+³ŠöŒ›RÙ–]d:Óâü¹§ùƒ!«jKšÂÊÆá6ÿÑ:7þèügCÝ­ƒ\RGãþŒ‰oMþ”ŒŽê˜Bi 5PÊm˜­ \øüçRœæÏ@•Í&&°±Ã༴?:ø™Ã&x’Âû3'Qû#«º¿dU„='Ìœ´ae‰öÍùs!~ÓþèÐnÓ Z9ÿ©[üiö#÷ÒdÿªW;¤•Úvþ¨â„JëÿÔÚÓ|Ë=Ñ­öV9ÿéað]À“i[Ÿÿ\‰ãü³Ú8N“]ëïIi~šõÒü5nì Ž³tk÷o3 ÛÃ#j¥%£í§/BŽ¿ÿþìXóDZçcÎÇ œ?Ž8+8Á¾=GùªJ>ð.?çlÈ“2ÇÀqþ0XðEþ°ÈÅyo(±zÏÏÄaþ â ~!ER&Ÿb)4HRÌ€€?¥ Zd©øe÷æ@lžÀԌ#Äs¼!ó§C”?­$麎{Ë™á I…ôÚRl9U±¢žakÔ´àb U„Q³^2‚YÝí· žæüù™8ÊŸÒJg¢Ðÿ¨ñé#$Öƒl)%z -VÑóhoÀËß°2›:e0M¢üIÁùósq”?3U}£é2Cçú«Ô¢€mÙbÃi±<x&x®yŸ!ô‘â±å™{Q«óççâh1à¿pIþ é"u»Aã²13UÏid oƒ1ÃjÁ¶Üs/šóççâ(ÒÅI”‘âeY<éH£@>X ÇBbW²"L™H™Âój=dËÛ»ijüýë§béû!ßÄ¿|¡wü˱ğ„ô1O¿ù/ÃãŽ8+pþ8Vàüq¬ÀùãXÁaþp)——co\ÏßëåYã×* ¿^›“¿L(q|3ŽÇßñÙa­£ë=Ÿ“¢>ãÏk üZŸÃ—Ÿ^ŠsëÁŸÝ®"@.# –#˜!¥ÏMBíAyÜ(°#X°U–‹-øãAŠä¢…hi«Û÷D2©ÕÖ {fí'U ­5Q;qûs)Nó§ÌHå7"×£—ЕذµÇ<4š,èlÁ²ÍÖÂ'ÆQµ5Bò•E›üAdŒë Ç½Žµ…ÖbØ[ãÇu8»~9—ÔøÉÙÒÃäÕIB°àB½¥x¨AbVÇf‰âj˜, ­….¸žíoªSãÎM©Ù1±µärû;×à,ªNŸ-™pèG}àO°42³0œš þ0é ¥äOI¹f:‘lÄãõ.ÆrÇ»s§ôQ£µNyd’8®ÃIþÀ{Ù¿ø+´Åhið"{É| ùƒB阩VÚši™2ÐÎN~r¸M˜GìÞ„9ôÛäÏhMù!÷_—âÙ`^&Y†P£ÃHãàùÈû±¤IóR+bê›˜Ò±ó‡™ ÊÉ–‡Ì”€$v‚ƒ4NÞµy´ätRœ?Wâ}?<­ƒùþ>þ“ð~üqü$xü±çcÎÇ œ?Ž8+8Ê lz·Þ%:>íU(ê+¥[×ÏR<ü#Ï›â(l×!™•]¢Cuµ/ ·/åÉZ0_$ô¦8ß4l„äÊ2áÄ 9K³¨B‰q. Tª-Wfü¡o‰ßKÛ&E,i£$.gÚ…àûvDÖÇxš "®…ߥÅÔÂíÀ€‰¸~ø•8ßa"b/1·*S?^zFDŒeäOOj®b˨£µSµ`*ÒµP¶J5ek‚ ’–c—(¥šò*Ù†,èq í·ì‘Ê(=HÑÖMLóÞq NÌŸÕ{™Æ7Æ+Ö`:“?ˆŒ ]WÞF¥’F,kχÿ2WH?†(ãjÜè"Z­-Y–¿F¾"Ì—v†`|) Ñú"Üʧ›ÏŽ.à ýùbŠc2ÒLNan•bû $sV¼OþXÓüá,jñ«X¦F½Û…eK{ƒÝæF%1ïG]_Å!‘<ãÔqŽó»zuÎ5 „dÃ8u4rûR°ìÆÊp§‘L¦u¸ÏL»)aà2ᤔ?LÚ ýëÁøc©XúÆÝF?>ºÇ÷¯D¾DµôŒyñ¦£aïêjS˜Q±ó'S†#3‰£Zr:¨¼ÁܯÖ3»)$Bé Ëé¡åR;³>ÓEÔaüaÝ™:"­§™E⸿ñýðqGSÇÎÇ <~áXóDZçcÎÇ œ?ŽÖïµu¿ª6÷&øT|wñõëÛuçÑú‡Rÿü|!NÅßýâ^Rz&°ñ?_‡;ëiþË*q| ~#þÎÏÉÕ Fòüœô1` 6[ÝWùÑ9×&ÆŸ¨¶¦TZcÐË‘ž‘)®”?u.ƒÏ½ ·ìmÈK'-Íw¥Åùs!Nðg' o͈•Æz«Ö[Hð_Ùî3X•+çnqûR”98®Ka(­ÛzUÄAzÔâi®²egHåréÜ3B$,­Œó'+ýÃÿMÇq"þ¾…Æ¡îcðç%ÀŸ¡ˆÁ]/š¥pXî—„±¦Ô0õ ’lƒÀ”Ž]…cl³A”m9ÒLié¦wÛö :®Ã™ø»$f4ůOü©¸ç¤œRxÅû¹“Õ @Œ”Έú(_%,ÍÚyvþ\ŽSñ÷Á ó_0p=Ûox¬;ÿmËs1þ+Lþ ÿeÃEs…ÀðT2»É ^kú¯âþëråODÞE3å:Õ/0mIsþ E:áü¹îóçÈùsù0¶ÌÅñ3æÏvI1HÑÒ´h–™rÃü™“î¼Ë~ØüÙß߯Ãò÷ÃoJ>öœžŸeþx2Ç¿p¬ÀùãXóDZçcÎÇ çoà…úë]n¶¶xñbÿyµÍã÷¿þ$‚_㯿”ϯ‚¾ÐùãLüý[•< ßáÁz¤Ë³z¦Ã»®œ?ߌ3ü™ƒÁE‚{ük¬ ÌÊÀúS(Îbâ=/ó7Fø|ž7ƈ…ÏGÄ4Ýy‘ÆÅîœW îïñyËê(jÊêjˆÄØÕhk×MdnÅA«‹‡Jþ`•õÞs [®îÎþÎäodÛ9eæoèØÄí^j…[ëØ$Û¶Yc?òçîŸ}Z[Ý>u]Æ(sÓ§)7øs?÷nû_2Šá¿Â.)CÄ]f4üÉNÓãöë8ÌÚˆ‘¿!15ˆñDµGROc× %X2Pð_9WS|ºçÏ–’‰J=ßøƒ~…þkÈG±壿ûWËÜÚÇ´ƒx—IÚ07ú/aÏ¥ðœRW1ˆP*¤`ó§ÌçÒÙ9q8Cl+A^HEâV¤bÆd”&JÍ©Q‚ ÎpøB ‘;¡”åKK’t]ïHœºv{)0Z¨au­íóyï¸;õìt®”sÉóz³iö”Ú³?=óN?ŽE¼eþ(óž:/Þ÷BýëXæÏ· ™ÔßJJ})ìø.xü±çcÎÇ œ?Ž8+pþ8Vàüq¬ÀùãXóDZçcÎÇ œ?Ž8+pþ8Vàüq¬ÀùãXóDZçcÎÇ œ?Ž8+pþ8VðÝüqmæ7ò'âÉ­,e½¹+÷W‹„å¶T‹gü*‚Ï·or¼ŽÚŸÔ[JdHCqå”2e—«¯øsǺء²RzÛÜPŸ-nžtý]pØaŸ&®§.A¶Ý¿zŽÊ3i ~o&‹abÈŸ<„Yˆh>Íj³³ÑªwØÊtî'È}»ášú„NÐ(ö’jß»p Ÿkq‚?IJ–•ê–:å/:¶QitaM†Ié]7¶À(+bÏ Û¬ô 2bÚDÿ¯=h•­ˆYRdËj‹ |ôÊ"LYêÊ–jl%Þþ±çf’u׿¿ÇùÓ uAÝ cÔÖŠ+Ö8|U‡ÎSéÐßZ¦ÃLÓA'4E]š3Ù½2 V&B(ªs·žÌ‹WÈzx ô¾Y¹Vä?Ëq:þ&Îù/¨¾Å^ŸðGmG6_Bc¢†£ãþh•²õ6ëB”?©s¦sÏŸºO’Y3îr¨Hì-Ûþ@Ç…8ÅšphçO¼Ù‰f È“Š2ãNdzUÊÔGþ¨ï‰6 ¾/ÝøŽ;C%²bPqòÇ»K¶\Š£ïï­“3ê™Ô‹I·aKjYt> m›•±"DœJ‡ÝéP]…(f>òÕm}“N®ÌÙ ‰¨×¸-zÐÓÊŠE'DZd´úZ8(Ú¯óçR¼û÷çTsn.tù¶xwþ´}{gÇ;âÝù“ô]Ý_±ÞïÎÇ{ãÿA”&Ô'ñIEND®B`‚leptonica-1.70/prog/printsplitimage.c0000644000175000017500000001043512267652424016050 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * printsplitimage.c * * Syntax: printsplitimage filein nx ny [printer] * * nx = number of horizontal tiles * ny = number of vertical tiles * * If printer is not specified, the only action is that the * image is split into a set of tiles, and these are written * out as a set of uncompressed (i.e., very large) level 1 * PostScript files. The images in the PostScript files are * scaled to each fill an 8.5 x 11 inch page, up to the * FILLING_FACTOR fraction in each direction. * * If printer is specified, these are printed on separate pages. * We do this (separate, uncompressed PostScript pages) because * this is the lowest common denominator: many PostScript printers * will not print multi-page PostScript of images, or images that * are level 2 compressed. Hard to believe, but true. */ #include "allheaders.h" /* fill factor on 8.5 x 11 inch output page */ static const l_float32 FILL_FACTOR = 0.95; int main(int argc, char **argv) { char *filein, *fname, *printer; char buf[512]; l_int32 nx, ny, i, w, h, ws, hs, n, ignore; l_float32 scale; FILE *fp; PIX *pixs, *pixt, *pixr; PIXA *pixa; SARRAY *sa; static char mainName[] = "printsplitimage"; if (argc != 4 && argc != 5) return ERROR_INT(" Syntax: printsplitimage filein nx ny [printer]", mainName, 1); filein = argv[1]; nx = atoi(argv[2]); ny = atoi(argv[3]); if (argc == 5) printer = argv[4]; lept_rmdir("split"); lept_mkdir("split"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixGetDimensions(pixs, &ws, &hs, NULL); if (ny * ws > nx * hs) { pixr = pixRotate90(pixs, 1); pixa = pixaSplitPix(pixr, ny, nx, 0, 0); } else { pixr = pixClone(pixs); pixa = pixaSplitPix(pixr, nx, ny, 0, 0); } pixDestroy(&pixr); n = pixaGetCount(pixa); sa = sarrayCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); scale = L_MIN(FILL_FACTOR * 2550 / w, FILL_FACTOR * 3300 / h); sprintf(buf, "image%d.ps", i); fname = genPathname("/tmp/split", buf); fprintf(stderr, "fname: %s\n", fname); sarrayAddString(sa, fname, L_INSERT); fp = lept_fopen(fname, "wb+"); pixWriteStreamPS(fp, pixt, NULL, 300, scale); lept_fclose(fp); pixDestroy(&pixt); } if (argc == 5) { for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, 0); sprintf(buf, "lpr -P%s %s &", printer, fname); ignore = system(buf); } } sarrayDestroy(&sa); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/quadtreetest.c0000644000175000017500000001203512242265746015345 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * quadtreetest.c * * test of quadtree statistical functions */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w, h, error; l_float32 val1, val2; l_float32 val00, val10, val01, val11, valc00, valc10, valc01, valc11; PIX *pixs, *pixg, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5; FPIXA *fpixam, *fpixav, *fpixarv; BOXAA *baa; static char mainName[] = "quadtreetest"; if (argc != 1) return ERROR_INT(" Syntax: quadtreetest", mainName, 1); /* Test generation of quadtree regions. */ baa = boxaaQuadtreeRegions(1000, 500, 3); boxaaWriteStream(stderr, baa); boxaaDestroy(&baa); baa = boxaaQuadtreeRegions(1001, 501, 3); boxaaWriteStream(stderr, baa); boxaaDestroy(&baa); /* Test quadtree stats generation */ #if 1 pixs = pixRead("rabi.png"); pixg = pixScaleToGray4(pixs); #else pixs = pixRead("test24.jpg"); pixg = pixConvertTo8(pixs, 0); #endif pixQuadtreeMean(pixg, 8, NULL, &fpixam); pixt1 = fpixaDisplayQuadtree(fpixam, 4); pixDisplay(pixt1, 100, 0); pixWrite("/tmp/quadtree1.png", pixt1, IFF_PNG); pixQuadtreeVariance(pixg, 8, NULL, NULL, &fpixav, &fpixarv); pixt2 = fpixaDisplayQuadtree(fpixav, 4); pixDisplay(pixt2, 100, 200); pixWrite("/tmp/quadtree2.png", pixt2, IFF_PNG); pixt3 = fpixaDisplayQuadtree(fpixarv, 4); pixDisplay(pixt3, 100, 400); pixWrite("/tmp/quadtree3.png", pixt3, IFF_PNG); /* Compare with fixed-size tiling at a resolution corresponding * to the deepest level of the quadtree above */ pixt4 = pixGetAverageTiled(pixg, 5, 6, L_MEAN_ABSVAL); pixt5 = pixExpandReplicate(pixt4, 4); pixWrite("/tmp/quadtree4.png", pixt5, IFF_PNG); pixDisplay(pixt5, 800, 0); pixDestroy(&pixt4); pixDestroy(&pixt5); pixt4 = pixGetAverageTiled(pixg, 5, 6, L_STANDARD_DEVIATION); pixt5 = pixExpandReplicate(pixt4, 4); pixWrite("/tmp/quadtree5.png", pixt5, IFF_PNG); pixDisplay(pixt5, 800, 400); /* Test quadtree parent/child access */ error = FALSE; fpixaGetFPixDimensions(fpixam, 4, &w, &h); for (i = 0; i < w; i += 2) { for (j = 0; j < h; j += 2) { quadtreeGetParent(fpixam, 4, j, i, &val1); fpixaGetPixel(fpixam, 3, j / 2, i / 2, &val2); if (val1 != val2) error = TRUE; } } if (error) fprintf(stderr, "\n======================\nError: parent access\n"); else fprintf(stderr, "\n======================\nSuccess: parent access\n"); error = FALSE; for (i = 0; i < w; i++) { for (j = 0; j < h; j++) { quadtreeGetChildren(fpixam, 4, j, i, &val00, &val10, &val01, &val11); fpixaGetPixel(fpixam, 5, 2 * j, 2 * i, &valc00); fpixaGetPixel(fpixam, 5, 2 * j + 1, 2 * i, &valc10); fpixaGetPixel(fpixam, 5, 2 * j, 2 * i + 1, &valc01); fpixaGetPixel(fpixam, 5, 2 * j + 1, 2 * i + 1, &valc11); if ((val00 != valc00) || (val10 != valc10) || (val01 != valc01) || (val11 != valc11)) error = TRUE; } } if (error) fprintf(stderr, "Error: child access\n======================\n"); else fprintf(stderr, "Success: child access\n======================\n"); pixDestroy(&pixs); pixDestroy(&pixg); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); fpixaDestroy(&fpixam); fpixaDestroy(&fpixav); fpixaDestroy(&fpixarv); return 0; } leptonica-1.70/prog/jbrankhaus.c0000644000175000017500000001603612242266300014753 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jbrankhaus.c * * jbrankhaus dirin size rank rootname [firstpage npages] * * dirin: directory of input pages * size: size of SE used for dilation * rank: min pixel fraction required in both directions in match * rootname: used for naming the two output files (templates * and c.c. data) * * Notes: * (1) All components larger than a default size are not saved. * The default size is given in jbclass.c. * (2) A set of reasonable values for cc or characters, that * gives good accuracy without too manyclasses, is: * size = 2 (2 x 2 structuring element) * rank = 0.97 */ #include "allheaders.h" /* Choose one of these */ #define COMPONENTS JB_CONN_COMPS /* #define COMPONENTS JB_CHARACTERS */ /* #define COMPONENTS JB_WORDS */ #define BUF_SIZE 512 /* select additional debug output */ #define DEBUG_TEST_DATA_IO 0 #define RENDER_DEBUG 1 #define DISPLAY_DIFFERENCE 1 #define DISPLAY_ALL_INSTANCES 0 /* for display output of all instances, sorted by class */ #define X_SPACING 10 #define Y_SPACING 15 #define MAX_OUTPUT_WIDTH 400 int main(int argc, char **argv) { char filename[BUF_SIZE]; char *dirin, *rootname, *fname; l_int32 i, size, firstpage, npages, nfiles; l_float32 rank; JBDATA *data; JBCLASSER *classer; SARRAY *safiles; PIX *pix, *pixt; PIXA *pixa, *pixadb; static char mainName[] = "jbrankhaus"; if (argc != 5 && argc != 7) return ERROR_INT( " Syntax: jbrankhaus dirin size rank rootname [firstpage, npages]", mainName, 1); dirin = argv[1]; size = atoi(argv[2]); rank = atof(argv[3]); rootname = argv[4]; if (argc == 5) { firstpage = 0; npages = 0; } else { firstpage = atoi(argv[5]); npages = atoi(argv[6]); } #if 1 /*--------------------------------------------------------------*/ jbRankHaus(dirin, size, rank, COMPONENTS, rootname, firstpage, npages, 1); /*--------------------------------------------------------------*/ #else /*--------------------------------------------------------------*/ safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* sarrayWriteStream(stderr, safiles); */ /* Classify components on requested pages */ startTimer(); classer = jbRankHausInit(COMPONENTS, 0, 0, size, rank); jbAddPages(classer, safiles); fprintf(stderr, "Time to classify components: %6.3f sec\n", stopTimer()); /* Save and write out the result */ data = jbDataSave(classer); jbDataWrite(rootname, data); /* Render the pages from the classifier data. * Use debugflag == FALSE to omit outlines of each component. */ pixa = jbDataRender(data, FALSE); /* Write the pages out */ npages = pixaGetCount(pixa); if (npages != nfiles) fprintf(stderr, "npages = %d, nfiles = %d, not equal!\n", npages, nfiles); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } #if DISPLAY_DIFFERENCE fname = sarrayGetString(safiles, 0, 0); pixt = pixRead(fname); pix = pixaGetPix(pixa, 0, L_CLONE); pixXor(pixt, pixt, pix); pixWrite("junk_output_diff", pixt, IFF_PNG); pixDestroy(&pix); pixDestroy(&pixt); #endif /* DISPLAY_DIFFERENCE */ #if DEBUG_TEST_DATA_IO { JBDATA *newdata; PIX *newpix; PIXA *newpixa; l_int32 same, iofail; /* Read the data back in and render the pages */ newdata = jbDataRead(rootname); newpixa = jbDataRender(newdata, FALSE); iofail = FALSE; for (i = 0; i < npages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); newpix = pixaGetPix(newpixa, i, L_CLONE); pixEqual(pix, newpix, &same); if (!same) { iofail = TRUE; fprintf(stderr, "pix on page %d are unequal!\n", i); } pixDestroy(&pix); pixDestroy(&newpix); } if (iofail) fprintf(stderr, "read/write for jbdata fails\n"); else fprintf(stderr, "read/write for jbdata succeeds\n"); jbDataDestroy(&newdata); pixaDestroy(&newpixa); } #endif /* DEBUG_TEST_DATA_IO */ #if RENDER_DEBUG /* Use debugflag == TRUE to see outlines of each component. */ pixadb = jbDataRender(data, TRUE); /* Write the debug pages out */ npages = pixaGetCount(pixadb); for (i = 0; i < npages; i++) { pix = pixaGetPix(pixadb, i, L_CLONE); snprintf(filename, BUF_SIZE, "%s.db.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixadb); #endif /* RENDER_DEBUG */ #if DISPLAY_ALL_INSTANCES /* display all instances, organized by template */ pix = pixaaDisplayByPixa(classer->pixaa, X_SPACING, Y_SPACING, MAX_OUTPUT_WIDTH); pixWrite("output_instances", pix, IFF_PNG); pixDestroy(&pix); #endif /* DISPLAY_ALL_INSTANCES */ pixaDestroy(&pixa); sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); /*--------------------------------------------------------------*/ #endif return 0; } leptonica-1.70/prog/pixmem_reg.c0000644000175000017500000001551212240302657014761 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixmem_reg.c * * Tests the low-level pix data accessors, and functions that * call them. */ #include "allheaders.h" void Compare(PIX *pix1, PIX *pix2, l_int32 *perror); int main(int argc, char **argv) { l_int32 error; l_uint32 *data; PIX *pix1, *pix2, *pix3, *pix1c, *pix2c, *pix1t, *pix2t, *pixd; PIXA *pixa; error = 0; pixa = pixaCreate(0); /* Copy with internal resizing: onto a cmapped image */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); fprintf(stderr, "before copy 2 --> 3\n"); pixCopy(pix3, pix2); Compare(pix2, pix3, &error); pixSaveTiled(pix3, pixa, 0.25, 1, 30, 32); fprintf(stderr, "before copy 3 --> 1\n"); pixCopy(pix1, pix3); Compare(pix2, pix1, &error); pixSaveTiled(pix1, pixa, 0.25, 0, 30, 32); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Copy with internal resizing: from a cmapped image */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); fprintf(stderr, "before copy 1 --> 2\n"); pixCopy(pix2, pix1); Compare(pix2, pix1, &error); pixSaveTiled(pix2, pixa, 1.0, 1, 30, 32); fprintf(stderr, "before copy 2 --> 3\n"); pixCopy(pix3, pix2); Compare(pix3, pix2, &error); pixSaveTiled(pix3, pixa, 1.0, 0, 30, 32); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Transfer of data pixs --> pixd, when pixs is not cloned. * pixs is destroyed. */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pix1c = pixCopy(NULL, pix1); fprintf(stderr, "before transfer 1 --> 2\n"); pixTransferAllData(pix2, &pix1, 0, 0); Compare(pix2, pix1c, &error); pixSaveTiled(pix2, pixa, 1.0, 1, 30, 32); fprintf(stderr, "before transfer 2 --> 3\n"); pixTransferAllData(pix3, &pix2, 0, 0); Compare(pix3, pix1c, &error); pixSaveTiled(pix3, pixa, 1.0, 0, 30, 32); pixDestroy(&pix1c); pixDestroy(&pix3); /* Another transfer of data pixs --> pixd, when pixs is not cloned. * pixs is destroyed. */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pix1c = pixCopy(NULL, pix1); pix2c = pixCopy(NULL, pix2); fprintf(stderr, "before copy transfer 1 --> 2\n"); pixTransferAllData(pix2, &pix1c, 0, 0); Compare(pix2, pix1, &error); pixSaveTiled(pix2, pixa, 1.0, 0, 30, 32); fprintf(stderr, "before copy transfer 2 --> 3\n"); pixTransferAllData(pix3, &pix2, 0, 0); Compare(pix3, pix1, &error); pixSaveTiled(pix3, pixa, 1.0, 0, 30, 32); pixDestroy(&pix1); pixDestroy(&pix2c); pixDestroy(&pix3); /* Transfer of data pixs --> pixd, when pixs is cloned. * pixs has its refcount reduced by 1. */ pix1 = pixRead("weasel4.16c.png"); pix2 = pixRead("feyn-fract.tif"); pix3 = pixRead("lucasta.150.jpg"); pix1c = pixClone(pix1); pix2c = pixClone(pix2); fprintf(stderr, "before clone transfer 1 --> 2\n"); pixTransferAllData(pix2, &pix1c, 0, 0); Compare(pix2, pix1, &error); pixSaveTiled(pix2, pixa, 1.0, 0, 30, 32); fprintf(stderr, "before clone transfer 2 --> 3\n"); pixTransferAllData(pix3, &pix2c, 0, 0); Compare(pix3, pix1, &error); pixSaveTiled(pix3, pixa, 1.0, 0, 30, 32); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Extraction of data when pixs is not cloned, putting * the data into a new template of pixs. */ pix2 = pixRead("feyn-fract.tif"); fprintf(stderr, "no clone: before extraction and reinsertion of 2\n"); pix2c = pixCopy(NULL, pix2); /* for later reference */ data = pixExtractData(pix2); pix2t = pixCreateTemplateNoInit(pix2); pixFreeData(pix2t); pixSetData(pix2t, data); Compare(pix2c, pix2t, &error); pixSaveTiled(pix2t, pixa, 0.25, 1, 30, 32); pixDestroy(&pix2); pixDestroy(&pix2c); pixDestroy(&pix2t); /* Extraction of data when pixs is cloned, putting * a copy of the data into a new template of pixs. */ pix1 = pixRead("weasel4.16c.png"); fprintf(stderr, "clone: before extraction and reinsertion of 1\n"); pix1c = pixClone(pix1); /* bump refcount of pix1 to 2 */ data = pixExtractData(pix1); /* should make a copy of data */ pix1t = pixCreateTemplateNoInit(pix1); pixFreeData(pix1t); pixSetData(pix1t, data); Compare(pix1c, pix1t, &error); pixSaveTiled(pix1t, pixa, 1.0, 0, 30, 32); pixDestroy(&pix1); pixDestroy(&pix1c); pixDestroy(&pix1t); pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/junkpixmem.png", pixd, IFF_PNG); pixaDestroy(&pixa); pixDestroy(&pixd); if (error) fprintf(stderr, "Fail: an error occurred\n"); else fprintf(stderr, "Success: no errors\n"); return 0; } void Compare(PIX *pix1, PIX *pix2, l_int32 *perror) { l_int32 same; if (!pix1 || !pix2) { fprintf(stderr, "pix not defined\n"); *perror = 1; return; } pixEqual(pix1, pix2, &same); if (same) fprintf(stderr, "OK\n"); else { fprintf(stderr, "Fail: not equal\n"); *perror = 1; } return; } leptonica-1.70/prog/converttopdf.c0000664000175000017500000000571412263041543015346 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * converttopdf.c * * Bundles all image files that are in the designated directory, with * optional matching substring, into a pdf. * * The encoding type depends on the input file format: * jpeg ==> DCT (not transcoded) * jp2k ==> JPX (not transcoded) * tiff-g4 ==> G4 * other ==> FLATE * The default resolution is set at 300 ppi if not given in the * individual images, and the images are wrapped at full resolution. * No title is attached. * * This is meant for the simplest set of input arguments. It is * very fast for jpeg and jp2k. * The syntax for using all files in the directory is: * convertopdf * The syntax using some substring to be matched in the file names is: * converttopdf * If you want something more general, use convertfilestopdf. */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 ret; char *dirin, *substr, *fileout; if (argc != 3 && argc != 4) { fprintf(stderr, " Syntax: converttopdf dir [substr] fileout\n" " substr: Leave this out to bundle all files\n" " fileout: Output pdf file\n"); return 1; } dirin = argv[1]; substr = (argc == 4) ? argv[2] : NULL; fileout = (argc == 4) ? argv[3] : argv[2]; ret = convertUnscaledFilesToPdf(dirin, substr, "", fileout); return ret; } leptonica-1.70/prog/convolvetest.c0000640000175000017500000001534112242266571015362 0ustar dandan/*===================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convolvetest.c * */ #include "allheaders.h" static const char *kel1str = " 20 50 80 50 20 " " 50 100 140 100 50 " " 90 160 200 160 90 " " 50 100 140 100 50 " " 20 50 80 50 20 "; static const char *kel2str = " -20 -50 -80 -50 -20 " " -50 50 80 50 -50 " " -90 90 200 90 -90 " " -50 50 80 50 -50 " " -20 -50 -80 -50 -20 "; static const char *kel3xstr = " -70 40 100 40 -70 "; static const char *kel3ystr = " 20 -70 40 100 40 -70 20 "; #define NTIMES 100 int main(int argc, char **argv) { l_int32 i, j, wc, hc, d, bias; L_KERNEL *kel1, *kel2, *kel3x, *kel3y; PIX *pixs, *pixg, *pixacc, *pixd, *pixt; char *filein, *fileout; static char mainName[] = "convolvetest"; if (argc != 5) return ERROR_INT(" Syntax: convolvetest filein wc hc fileout", mainName, 1); filein = argv[1]; wc = atoi(argv[2]); hc = atoi(argv[3]); fileout = argv[4]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); #if 0 /* Measure speed */ pixacc = pixBlockconvAccum(pixs); for (i = 0; i < NTIMES; i++) { pixd = pixBlockconvGray(pixs, pixacc, wc, hc); if ((i+1) % 10 == 0) fprintf(stderr, "%d iters\n", i + 1); pixDestroy(&pixd); } pixd = pixBlockconvGray(pixs, pixacc, wc, hc); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixacc); #endif #if 0 /* Test pixBlockconvGray() */ pixacc = pixBlockconvAccum(pixs); pixd = pixBlockconvGray(pixs, pixacc, wc, hc); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixacc); #endif #if 0 /* Test pixBlockconv() */ pixd = pixBlockconv(pixs, wc, hc); pixWrite(fileout, pixd, IFF_JFIF_JPEG); #endif #if 0 /* Test pixBlockrank() */ pixacc = pixBlockconvAccum(pixs); pixd = pixBlockrank(pixs, pixacc, wc, hc, 0.5); pixWrite(fileout, pixd, IFF_TIFF_G4); pixDestroy(&pixacc); #endif #if 0 /* Test pixBlocksum() */ pixacc = pixBlockconvAccum(pixs); pixd = pixBlocksum(pixs, pixacc, wc, hc); pixInvert(pixd, pixd); pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixacc); #endif #if 0 /* Test pixCensusTransform() */ d = pixGetDepth(pixs); if (d == 32) pixt = pixConvertRGBToLuminance(pixs); else pixt = pixClone(pixs); pixacc = pixBlockconvAccum(pixt); pixd = pixCensusTransform(pixt, wc, NULL); pixDestroy(&pixt); pixDestroy(&pixacc); pixWrite(fileout, pixd, IFF_PNG); #endif #if 0 /* Test generic convolution with kel1 */ if (pixGetDepth(pixs) == 32) pixg = pixScaleRGBToGrayFast(pixs, 2, COLOR_GREEN); else pixg = pixScale(pixs, 0.5, 0.5); pixDisplay(pixg, 0, 600); kel1 = kernelCreateFromString(5, 5, 2, 2, kel1str); pixd = pixConvolve(pixg, kel1, 8, 1); pixDisplay(pixd, 700, 0); pixWrite("/tmp/junkpixd4.bmp", pixd, IFF_BMP); pixDestroy(&pixd); kernelDestroy(&kel1); /* Test convolution with flat rectangular kel */ kel2 = kernelCreate(11, 11); kernelSetOrigin(kel2, 5, 5); for (i = 0; i < 11; i++) { for (j = 0; j < 11; j++) kernelSetElement(kel2, i, j, 1); } startTimer(); pixd = pixConvolve(pixg, kel2, 8, 1); fprintf(stderr, "Generic convolution: %7.3f sec\n", stopTimer()); pixDisplay(pixd, 1200, 0); pixWrite("/tmp/junkpixd5.bmp", pixd, IFF_BMP); startTimer(); pixt = pixBlockconv(pixg, 5, 5); fprintf(stderr, "Block convolution: %7.3f sec\n", stopTimer()); pixDisplay(pixd, 1200, 600); pixWrite("/tmp/junkpixd6.bmp", pixt, IFF_BMP); pixCompareGray(pixd, pixt, L_COMPARE_ABS_DIFF, GPLOT_X11, NULL, NULL, NULL, NULL); pixDestroy(&pixg); pixDestroy(&pixt); kernelDestroy(&kel2); #endif #if 0 /* Test bias convolution with kel2 */ if (pixGetDepth(pixs) == 32) pixg = pixScaleRGBToGrayFast(pixs, 2, COLOR_GREEN); else pixg = pixScale(pixs, 0.5, 0.5); pixDisplay(pixg, 0, 600); kel2 = kernelCreateFromString(5, 5, 2, 2, kel2str); pixd = pixConvolveWithBias(pixg, kel2, NULL, TRUE, &bias); pixDisplay(pixd, 700, 0); fprintf(stderr, "bias = %d\n", bias); pixWrite("/tmp/junkpixd6.png", pixd, IFF_PNG); pixDestroy(&pixg); kernelDestroy(&kel2); pixDestroy(&pixd); #endif #if 1 /* Test separable bias convolution with kel3x, kel3y */ if (pixGetDepth(pixs) == 32) pixg = pixScaleRGBToGrayFast(pixs, 2, COLOR_GREEN); else pixg = pixScale(pixs, 0.5, 0.5); pixDisplay(pixg, 0, 600); kel3x = kernelCreateFromString(1, 5, 0, 2, kel3xstr); kel3y = kernelCreateFromString(7, 1, 3, 0, kel3ystr); pixd = pixConvolveWithBias(pixg, kel3x, kel3y, TRUE, &bias); pixDisplay(pixd, 700, 0); fprintf(stderr, "bias = %d\n", bias); pixWrite("/tmp/junkpixd7.png", pixd, IFF_PNG); pixDestroy(&pixg); kernelDestroy(&kel3x); kernelDestroy(&kel3y); pixDestroy(&pixd); #endif pixDestroy(&pixs); return 0; } leptonica-1.70/prog/scaleandtile.c0000644000175000017500000000676712242265656015302 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * scaleandtile.c * * Generates a single image tiling of all images in a directory * whose filename contains a given substring. The filenames * are filtered and sorted, and read into a pixa, which is * then tiled into a pix at a specified depth, and finally * written out to file. * * Input: dirin: directory that has image files * depth (output depth: 1, 8 or 32; use 32 for RGB) * width (of each tile; all pix are scaled to the same width) * ncols (number of tiles in each row) * background (0 for white, 1 for black) * fileout: output tiled image file * * Note: this program is Unix only; it will not compile under cygwin. */ #include #include "allheaders.h" /* Change these and recompile if necessary */ static const l_int32 BACKGROUND_COLOR = 0; static const l_int32 SPACING = 25; /* between images and on outside */ static const l_int32 BLACK_BORDER = 2; /* surrounding each image */ int main(int argc, char **argv) { char *dirin, *substr, *fileout; l_int32 depth, width, ncols; PIX *pixd; PIXA *pixa; static char mainName[] = "scaleandtile"; if (argc != 7) return ERROR_INT( "Syntax: scaleandtile dirin substr depth width ncols fileout", mainName, 1); dirin = argv[1]; substr = argv[2]; depth = atoi(argv[3]); width = atoi(argv[4]); ncols = atoi(argv[5]); fileout = argv[6]; /* Read the specified images from file */ if ((pixa = pixaReadFiles(dirin, substr)) == NULL) return ERROR_INT("safiles not made", mainName, 1); fprintf(stderr, "Number of pix: %d\n", pixaGetCount(pixa)); /* Tile them */ pixd = pixaDisplayTiledAndScaled(pixa, depth, width, ncols, BACKGROUND_COLOR, SPACING, BLACK_BORDER); if (depth < 8) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/dwalineargen.c0000644000175000017500000000605412242266516015273 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dwalineargen.c * * This generates the C code for the full set of linear Sels, * for dilation, erosion, opening and closing, and for both * horizontal and vertical operations, from length 2 to 63. * * These are put in files: * dwalinear.3.c * dwalinearlow.3.c * * Q. Why is this C code generated here in prog, and not placed * in the library where it can be linked in with all programs? * A. Because the two files it generates have 17K lines of code! * We also make this code available here ("out of the box") so that you * can build and run dwamorph1_reg and dwamorph2_reg, without * first building and running dwalineargen.c * * Q. Why do we build code for operations up to 63 in width and height? * A. Atomic DWA operations work on Sels that have hits and misses * that are not larger than 31 pixel positions from the origin. * Thus, they can implement a horizontal closing up to 63 pixels * wide if the origin is in the center. * * Note the word "atomic". DWA operations can be done on arbitrarily * large Sels using the *ExtendDwa() functions. See morphdwa.c * for details. */ #include "allheaders.h" int main(int argc, char **argv) { SELA *sela; static char mainName[] = "dwalineargen"; if (argc != 1) return ERROR_INT(" Syntax: dwalineargen", mainName, 1); /* Generate the linear sel dwa code */ sela = selaAddDwaLinear(NULL); if (fmorphautogen(sela, 3, "dwalinear")) return 1; selaDestroy(&sela); return 0; } leptonica-1.70/prog/rock.png0000444000175000017500000024422311736161511014127 0ustar dandan‰PNG  IHDR›YkÓÝ›gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœL½Y¯¤×‘-¶VÄþr8cÕ©™£$^ÝV`õ“Æa?ûÕ0ìÖÔ¶—ýl`Ük_á¢Ýív‹­‰)q(Åš«Î”™ßŽå‡ˆ¤Ô$[¬ª“™ßÞ±b­‘ü[и°iÕbÛµj“³MÀ‡ž¸®0mýÇ8If;3;M€Ì´ÉlÚX‚ä¼sf•6B”AÆlV¿AŠ 0gƒ &K !3 ÉQßžIGF‚F§å YÏ^X¨XA5#B€H3HFÒŽ‘«Æ§²ñxJ¤@—yGDt@aAÒ@I­‚¦Ê+c˜&vJ³ù.V˜}šŒ°@ò-Fšõ¹‡’ÀètPèÙf[kêÑ• . Þ ÖMfìž±B²B²† D„èÕiÑmrЦ]7 1¥Ñà$¡®,S!QÙèd['tF¯šQ ’¦ìÔ Q(6ÛD¢«[öˆ¢±3)?E«H—ç=ù Ù§¸Áh– M€\y°ÈSbdß®“[0Hª“ ƒ€–™¦"`ÔFK³·×&¬ÇìÓèkFf Ð4 !2š4‚¡|MÅ æ-uƒ9ØAõNÁÌ[”¡Ÿ +³6;;éØ -ÔÍ `E+ y=:¨Œˆ¨ÊÊJ&õ€ʳˬÏâIFë•Q UT-8É z@‘g¤° ¸¤uT=…!{ÒA…+[ú9#`‚ÊcJô¦`Øl R°ä<“aÈ7}鯹KêÞ}ëÍIʤ0AœúŽBX$GÀ03Q¥v]‘Ñ¥ˆf¤;åÜuRál ÓÕÀÙi˜5ºÂkB`ôáÊžDP$mf6.¦©ÚÈ ª ¼Å×(DâkYšªé'•x¥V‹Qù£hŠì`aÁŠ 2…™S’HO4ˆf¹‹¾cRŸ,ƒR•[‹ E§…õí’ˆèŒê”c¦é¤fG'ëZ¨"Çò‰Y]ÁήêÍÔ'IÇy˜Ðš#C-3K¦v z‚fãT,äEÖ£± )XáTDˆ„¨>‰‹Û2Jä-AÙM0.šŒìTD¾ÇN1ˆ\@Y}´YÒ hF,EFÊeæßÂŒùæ3ìÑ‹CÕID/ÈØ#äÕSê zŸ 3&õn ˜­en6#!E’¿ŒÄ{ŽÈGá€sd®nB«i|$óž¥ qëÿÕ™\òàkHeѯ±ÛhÑÆ<Ël–öÀ%Y0³Œd4Z–OCd›šG›‡o¥ŸH=±~Ô ¨ uv¥A v:ˆ–au2 Rè’cŠè`PîÜÝœûÜ0Ë(£LÁ0ËΟ‚f½úòÌT"€Þ¨ÏN ªWq£ƒ±ïëÑóf6F‡y–èYDÈKÐRø£› RG‡BÊWSÀ"90T­J¾.J¬è‰‘# ˜ìÒ¸½¤Y“$è«$XDÒ+¢Uæ–º¢T» >'kŽF×ù€TV Ü›Iò^/4ð,0óÔÊÈ™Ôìî˜Ì»¾È®ƒ&˜‡½C“F'mž·×JþÐŒ ¹@C²œ™“""”Q8- Ur-UßP½U²àeC1(hYƒïÌK¤z³"üóÖ `ª64‰s0š‘DqnªÚžçBt(ð­‰­òÿ8Ëâ^$Ø·°6ÚÙìW¶xcµ½Æ³W/Nt¾;“·l T×–@O…Ç@½›™™Œ‘+ÓÌ wˆ¡®P†8a=±Q¡~uÙ®¼ôp§¹$Α•U€æê™Äf¢+FÑüTêΜµ!an¥¬ìß 4żëU*öp œ 4sšpo7dwSy%6WÚÊ:¤Q>8ƒºp•n-åpÿÏ=õ ËÞ›{Vœ0Gf^yùþ£8Xãzuü@äõúâå¹{lqz; ®Ð¿÷²o£Ð#½bhDd]šÕCXZ½bøÕç¥`¥jÕçë«](¢?°Ò´ëY“Vést%[‰cÈh•Gi ;KÏ:s6u#$DìfU‹’¡Wq'²Y³djܼ™ÃÍA/ÔóhFê`9ìòŽ¤Îž´ß@Øb[¥WH€Aìè!F6£$Þ ð€æO®Ö·¯®ÞÙ]Ëž¾}zåo¼ÿŒÓËëþõÚ&t]-êF²!U]ÅàSí0êÙxË‹b†2ÄlîBo-aL±Û]ÍŠd_"µAC—BæÒ egéYA¬'ð @ðPqÂÅÜ (Š¡2 ¡èh&Sš‹}6@€H35:Íè°pË –ÉF‘•ªH¾äÆódb±ˆOdʘUEqÇÔw¡m¥Z"Û5K6°nÝ!Zp¯uüן=¾ƒõõ|rýÅÛl÷ÿ‹ÿíÅòêøb÷äà­ÅU”™F]ví v! .Xst˜ÑbVŠNCÚÇ•Âæ€`–ˆzÞí"/x “I©!Rï™B’9H%-óF„°Òß>¡•Ï4å=Y6NÅ9» •vŽd ŠO0›Œ4F'Ì2ËÄÁ¥‘,î3;›"ÙåšLÅgÁ •”‡ÿ—ôDöõÂ&ÒsЧ±€l°'¯ØÎÏO/Þê}qûøba»{Þ}·=ìÓéÑn7 bD9F:ÚAz£3TñŽf àF&]"½´gƒ(qžû®÷‚ìIºZH‚,‘Š‘†m` — šEpT¦MjË2kš•r¢ýŠÓ–4D÷’i 0›³™§/ÎÊIgùÃ(O˜bVÀ¡`bb€ ík[æÌ¨.šeC"ÿ¯Ò‘(½~Á,qIä çŸóúòøEÕØÖ¶»=]-ÿb:û˜wÚæÈ–ÛTc䨀Hš¤Ib¹‹Ö{k’¥F˜EÓÉrˆ™Qs&®´K€šµ tP°R´Ñ %³EÚ°”þA+ÆÔC}ߦt}§5HÍy0Ô…òœ2A¢1ÊÕ ŒµÖ,3ÍMæyÓŒ%Gç`UmRçÈøU¤d£*é¬r¦¾ªÞ€Ú‚Œ°mY2i)[Mv0I6@ôÏ?šmZì~ttðÙ£°_/·—óc{ïñ {öN|òÆ Z„`i—%[$3ô¹n vKG‹;f ºÁ]ÖbWëEL±‡¢ Å\dbs!ˆ° ‚´’‚ ÂDu”víòIç%ª‰°½U,óPÉ;1†âVLaú iÈ£r¤Ç@NŒDöå8ÿ.½ÊaïÈ[âûÙ‚lm?Ó ¤óßËâniÝÍrÜ SzÞ’l"iOÿY®Ö/ïßyðøùYL²·åuuãæ'7Ž"µûô‹$22=xVBS¤k/Ì ‘Ñ7Í–)<²4ACtKŒP„•± zšU ãàsM’úœ#dHQ"E ÿ…¬YT] ÖÓ%e‰êRZÉô™Ÿ <[D–¸ -Ãérª!Mß§ï?ûÈ¡øVÁM[_a[?8¹¢ô Òÿ‰{ó4F¤~@÷ô¾Å¾½‚“¼üç Ÿ·\,Þ|·A­Œk{ö!nèñ­eRÙÆò…×ÇHé¢.¼`fA'bÎ …°É@Yö«B(†Ô©˜¢D×ð)«l#Iº¥  ‹šTSÈŠÑwÃSÓªø ¥¬§ˆª!# é‰J¤ê•þÊÙ˜”Žç“§[Ëœâw ù õ{5覓£Ë´ArGŸI‚¡Ò—à#óÖÜiî‘Ã{Î{$UМ˜ãþ÷vÀ »ÙŽžÙ´0k»WW/o½>›/§³…² “„Ó8ê¬Ý,˜SV¹Ò >Uc ½Œ©è(`BgÄ%C±rrÔõÈ0zšWÒ?›QYb4‰0³Ad÷1Tâ”À‡#½úÑ’ÄÊü…”jêÁ‰š˜Åo°!U¹È4'£û~øED#ÊŸ”.Rs‹A—ÒJîÞV‹ftË7\“Àœô§¿¦uXŸï}ÿ›Î#;õ×O¹\½ÿÉ¡ðLÛÕÓ½j u3¦A©ž•Rì€ÉÒq&³æ¼9}½DÒf­† Æ[fÂü¬Oª²©d¶¦ dJNˆU\2¹“åà`jX‰Æ TÍ‚Ue©„Ç2Zä˜VÒ îhu}iN!i˜­YÚáÒèü-IS¢P/,)DôRžÏÐJ1Làÿi2 Í›Oî‹)k£ešK\bÖh¿}¼š¯¼a»{p GóM´£ÍùÍF­ÞZ~~}h›ß?:ô3^<»2Éÿ¬©9+–)[‚z´ÖÖÜy¥ès옟Ó9ïÒ™”h]./º²é3ˆ™BPˆ2¶{ÊÎùP0K»&‘ýR¦™„Y/ã£Y¬ßD§9ÍšsPi† éz †¨ÒVÝŠ ЬaФ§bhV˜ µÁ(ÿYá673w3w÷fæÖ’ŠO€èóo¶ØÎ S×Ý{Óéë8ÝÜâfÛ~ç—_ƒßœÞ°ë8‘nÂ|!jFž|“Y7Ù fpBŒ€ê»9’.B Ï‘Ù! JZfež°%ÛËÔçDÝ%£3>mÝ˰äÙS/Î_òo-O@01„F÷ÍÌ«¿1è–:¨› É"ñ[$nXŠNfHDÍô¥s}ªéiÃm*€&ùß~ ÝÙܬMÓbZLma–É4À_Ì ~0r½¹¾X´¶¾ž<–öO'ÿé»W_Þ\ýñÙæ¬ØDÏi[8aŽJêF¸îp Æš9Aõ9TاgõHëI— J ËÑØÌ¶æ \#"¢g3‚PÎ}·eTÙ‘R^Öè˳›O+tu! ¦^c´Dm—•ÉÆdTÐ’¬)ÆLu€óy’DŒ6Aú€"IØò åkëHáÿmN\2˼5¦‘FLÖ|ÖÓO[8·»Æ¼õgŸíÎÝßœºû¯¦7ÎÞ}û½O_oŽîÛ¢XåÑXò”ÑrŽÀÌÓZMdõaA] Ý,§¦KöLÞ¼wŒ©$KõšFš &Ñyóª‘(7k‘­eÈô5„À$/RËj<ª‘ ›¤9ÝAšt+öט3NLfÂ)A½£{ßw°U>ò\FzΙÇ.düìY#8æ¿øN#<Ìøé¶°Ña°×_úŽNùÔß{ëj}öÇå ÚôâË/ŽOç'þ%žÞ|{“¾^dMÏ£ @23ʼ*n棧sÄa¶S>¤µ~Φˆˆ°èBâ$šcp‡n^¥=óE¢ngš5‹œ¬ú‘7ÚrÊYß*Êe9Ù,~#1žŒ5ÈFÂM, H@O°‘MƒP K"&RDÌ`Šç ½w%JøN¼ûÏ«²ňÈD iÞ<©VòaŸø´ÚÜ»uì:˜Ždô£‹§m{¸~±»±zòÑkõgnÎ%·Ã’žl o–šhæysÏžÈ0¼[’猈 {?Rz̉§ßÓÍÆGHæU>Æ\n&M$tòÑþ}[îYF¼´Ð°¿ ¸;ŽŒ^ 1s¹Š"3KcC ÉÊeÈJ ‰ IRôdŠoë äoH'³ÿíÀÿb¯Ÿ’8ÙþÖ¨m—0›Ã¶±lÿIwyµ%2Š^3âF’=RëmFôf0ÌæÑ‘ªbæbÖݘcß=)/åÙKsΆ‚™ÆFyÑ0 $<5äzâTFN–…ÊL†®CBƒaÐ6ƒaýi(Ù/:`Q½B¥àX¨­b ²Þº¦@ýçãØ¢ør”‡tüîì†ÛÓ‡@²—“ŽOÖ·Úワ땟nãj}pyL­<ýÂúu<àe“<¾z¸yý‡ßmn%$p Ën¡hY2ò5IŒ–îE³$oÒD‰Èqr#ÙÒÂàFgñÉV<Ô^›GrœÃø€ÈQÞQõ󙎲_¼V¾¿¤|Ç_p7JJtèÃcC”©(·ÇؾT½©’„ÌC ¢D”oe¿5à?SQ‘e¼±hÃqCzþóãyaˆ°Õrõt·:ÜŸnç¯O—vùúàÕÚNžÀßûÃsPwV1ë÷ÿï¯_Ü8xŠÝâtL:”ÈQÕ´ôŠëË4êPÓ„H×̨°šˆ­¹¹º¨Eûʘ3âÉ\Æ©”¥ iDd%ös+ 6±õ ÒxaÊÒSºá,bpOîåÐÈ¢ç¥6ÔÓ.ÞÙÉ$S$R‘ŸÙÔ䶃±;§²lÖ›ŸÅé)Ñ3ÒÌ™Sa‰‘Hêà“W“IÆ'oñÆâ`âöèøÄÍødµ¹yqÀÍtÙÏîÿ:b~ûõ±ÇÅÿþ¨c³<»ñätsÐòÒç æ¨\ºp#hBÌI¸‘ ƒMÔnVÔQQÒ¬€žm²FÀ²ëšKû/A!èäNÑÒžbœ’4V”Ij°”â2OõÌÜZõÊy¹&IRL‚)™2šé*ë{†!——$ÿY“Z¨RWh³îýoÒAì“`ÒAÉR&ï ƒµã/·$È>éðÖíÇ·ÛêZ›“ÀúëëåÓr7󢿃'¸žx¾Üùæ Ö‡Û‹ë/ýê8Í"¹‘ìàÂPÈÕBŠê2WlRcW‡£X¢T’237Áœ¦Ö–'H3Xˆd˘ÅaÙ¹F2©àn~hû41 yðæîÍͽ¹¹‡šþ(Gë- †£VG¤æ‹rW¡Æ‚€tß•JzY.ÏA4 IDAT ½'ú£‚‹y F‘ª²ƒAGÃû(..¦ë“û§¶<_®¶s¿ž6~çòý¬4oçé\o|ñêûï΋~ïÅSL¯þù“›E´dz …²G@WO+oŽ8—/*¯›ú6'?¾ýlè$j6.Dš'Po çC†è<Ç“MËr…ÒÊsSÄ1ÒDº;Y³4ZsÊ ‚5"B¡0·” ‹7Ë&3«û̳W¤X7¨ÐúÍù6Ñ3(Ó´Vý×¹#)Fƒ8Ð}a‡´ÇCÑþù·“I;ó~ïðpÑÐ'Ì>9ÙðèÑêÖ⥷E{½:9øüåÑ›ëõõ|ÿË‹‹×çOßþS;ºÒB¢Q=s RÊ‘qîAœ)Ë  ¥j .„5–VÁaîÉÒÊ,™1€9tX2]€è¬~$Ke7d;‰l°È*¾f.¦÷Ø8MÍá ÉÑçWi0SO{…Ф}6oV–Ž$¸9³Êü6–¹Ub3 —¨Hswó¿"ýÿVTòŠþNvŒ}î0-ѧ݃íA¿n3–ÝšÞÙ]·ÕNÛCíVúìéòì°éòäÆqøàú££édûüÂ#¹Ö#"XyWØ÷äùŒbÌaÑ8÷œ˜ï©æ¶le?bÚõPÍ„æïËý •ܰA4Ù²„R$4x@KÝ31=ñé¿VäT‘›!`F)}‘Ëtª÷¬vs„…B{Ô¶O€9_°g +‚ „ÿt߆jdÛb”l`†ÿê©™L[øö°]«5ï}ÃÅná~µ¾qöøÅñå|9…Ž/nô—_mï=}²{ûßÿÃù÷^Þ¢6' Ëù??×媂hA8Õ;áÆÐ„wR=„>¸ûÅL½¢rc ª+Ò‚íEn¡@DæÇÄLžýC4%?–>ñD”¹ÀÀš›91Ý&Ê1+’ 8A©÷1¦šg–”CÝ›êSjn[ƒ¸, ŸÊ[´aD‰Ñý'¤j †qTÍ ’¯þîÚšú|ò½³×ÛG¯v Xt¿ŒõõÉ®ÏîüÓ¥-¯Ö±Y-þÐçk³œ>ÅæÎù«³ÅQ{Ûϱô´Bå~FFp4ÎÑX623ª“nP¸o%zn ØWTYPáhŠžý7¢«—óÈ"™¶¨ L¦Êi0˜!G ‡Ï¦üy2¨Aˆ’©C»€aîÉ9&Ž3Öô}ls‹^†)kõ`ñ TbäÒ¨TôZ¤:„@Á¤•1ÿa4c#äŠZјקæXÆ9ÑÉÅǯ€`ãÛ﮸më›O.鎘WW¯Üðþñ_ÞýêèôùòΟ¼úüî¼üÑ–ßÿrz.<ºqz¦Õ|¾´€å;*Tb°šü–M.k¹S„±WµûÑX~ª”U³! D l‡Q ÂôJ‡IÀÂ{‰Èu<(/’r¦c=˜>Nfë–¶é`¼ õ˜B†²ƒ]–mÁh93ee+—†e„˜k§ MSÃ6•ètÜŒL‡ˆTb“Á£"-€˜‹Z ­]ÎÁˆYK{¹ÁóW§gØíÔÚ‡[ßü÷úõ×G?Ú]ü%ôsLGÇ?¾óÔ—Oq£Î~új¶]ï=bsA Á-W ÖÕÌ þܯá9X–}x’ëÕ5Ç೪º¢÷è1‡""Üঘ‡qMIåðÄjF9&¦$„ªM4˜êÅç¹GôyÞÌsä¾É¼sô(†ßˆ˜{Ÿ£º­|ë¹E$:$DÎÁ”! êy17c[$Ý=¥mÀr-ÖžOãàý*¯™òìü2&êß<;¿zôü“‡§Î-|ÚÐgoÿÞÃG÷æx¶[Kíêþ¶Ï_oÏCÓ÷æ«ùù½•c9­×Ö_ïÜøâÃÏ_]>¹Tí¼bî”æêà%]æ`šu‚ßĵ^,ËiÎzf¹QN(ç³…°\#7EöHìË”Ir!$s´Êž¡¦å ÑPFWÔfÃ{˜WÕè=w“öÁ Ñr» ÙÜRdWôÂI¾Ž&Pݳ0HË4ðZ©£µ¼Ž•¸ZÉHR#´ÑÌÖ¬w׺{†ç×q縅l’#®ßiÿß‘_¶¯ýpëþÞùßl›Ç;wOÚùƒÅkL\b^µá­¯>ªÇàT Qè½BƒJGQqÂãQïOd,8É·lZ‹¤Ìg I9®ìHkî.¸sðQ¬fÞó¥û¬T”\æèÑ{®. 2Å DŸç`–jÐ ùTÑû¼=rûqß7É’«“'F°•|7ìPòŸ¦aH&»Ê!M¤qúøw>Ŭãï½ñúÑ‹iq¸ŒyÍm°9A´ë‡ËO§·Ÿúj±[l¦Ó¯7·þq}Ç__ÿî{ß|ïÆÅjÛxÞ¯_½^ßÂúÎn¾-Åtx†×a.¶¬•fLÚÆ5Šk&È­¦9õÌTkRyË](‰:moDG“UF¶ £dñ˵X@T§,Hß¾€ä’â29Ÿ3÷‹±ŒŠ˜cråoM=Hµµ9ÑòXWÏ{°&Å„ÿdŒ|¨š_ÎD§oþ××X`níÆá´Æ—ýÖÍÝv}js'trñÁvã·ŸŸ`Õ}skûðäèñ»×ô¾º³¶óƒÍõúñ9¾Z¼9ûçv˜ÚÁxZ6dK‡´ÄdC(R]5w«ÊFZO&cPM,k Å2fòj2ª•Éæ0ËôhD½&zæ¾ÛâÖ^xIM!rÃËäO‡dÆj.£ís„H *=V„’÷£U‰7åHz…!Á†½M*áEºY£† ØÚG?uÒx|zþêôêâä¨÷Å› ëØ> \4-±€Å Žn|§Ëoß<ÄæàlúüìèÙõÉâÑû÷Îv·OÍ̧„c s¯4Gc+á}øpÔå+YbBàdBU…|¤ÆüS†|aÀœ A°@ÖѺ£N¤ZîÚóË6˜ú½¦\d^¶'FÂBÖ¼‚0í ±¬ÖiÜó\è•» ‹àOm.oŠÀBø/’Mt†ý‡XÛ7Ú¿ÒdøÉÕùéèþúÉ«¶ŽIkœ/ŽÙÿt¹\~ÓOµ˜lwÜ_­/Î/o]õb7Ûêd§[öàÞù×ë{Çyr »<æêâÃ>™h°fMp’FŸr¬Ñä.ØÊŠL1å ɶÞÍ¥ÈÙÿqÝ«d9_=……¨e²B§!G$†n“…ÖrW°²qÐôcعF ä­™:ôÉ=º„ÐÆ±ˆ>œÙ1‘´()×hÊ—O~ÇÀÿ;”¯°klš`j É­æŠÿòµ¸Ž¦-îµWÓíÝÁÉ7vªY ~¶›bÛ/g6]/±œm±üøùõ'vÖ>šæÕjþáûí]Ü8þµn-ðÙ?-¾7}ø}û/ß|kÖ|r2(iÍ'ÂÌó¦À@s!§9$D—Õ{&ް«ŠlÊkõ~kS –Væ~O€ÌQÍ´òU¼©Ž& “ý²1fŒ4¯i®ï- ÇwdéQÑ™[Ë2’šN&µýÔF:C*¢Àÿû!]g”~!Öß3÷‘ÄÁ¯.ˆ¹øÙO· ðòîJ¦‹‹Gg ½í^?½Â¼¾xÆÃÙ¦ç»U\Ÿï>b¼êwîì>{û´ùÝçïŸ>8X}Î{Xýö>zqûîå|º^úØgMˉ§U‹tL:I“¥T™¦Ÿ0Ї'8źìŽò¿ó ?¤êìYVžtþîª8å@ À^Ï'YËŠ•Å’‡\fê„ØQ‹’„Ã[[Nð\Á›ôæØ?Ú£âûÎüV?ëœÿ"y‹Ê‘ýPŸt8‰ GÏ?ö%ä7î¼>¾·X-–—«{ß̧‡óîWWŽõÚ—_üi½Ç£/ìoÚ‹ ít÷Æ^ÛñæúìøÉ½õv¶[ÿŒ·ûv½k¶ºûÙ«'ZÞ<Ù\úÁ–¾ÊÙ’dïÛD´æi–™MiEú)jÄ"õ°è R‚6*× '?›ê[€2Ï•Vƒi¤Ð3½³U–|ƒÎ\"ûPPÊn‘S š‚–ð–‰ézïu¼!ÒÿS{Ý#—v–âAÐa•FM„ö”@ÿ9­Ìm…mJÅÉ&9Á ¼õ›ópùúÖ™âd}ðø²ß|ðõõ÷Ÿ^Cëõj:p<~è8¸ûüúðòÅí¶ÐÁ³W‹7vô¼ûùú~¬´š¯Îž}vü»/ïnÿáÖíõê£]~vôÁùÉs.— ƒáͼ9­Mîîf"½yDKå"!^&3‰¢ÓŠ„ãP-ù¤9Ìݨè¹É¾n² Í™¦K’UFqRö»ƒVÎ[ÍÆ­7!Ù<Æ[R§™"ò›yЉ†”«äk‚ û€)tžaCð_”»»€ ˆMJ#›WbõûÇ‹YÆ«“î¯ôwŸÛúÆß,¾xqýâÏZÛ´¶ÅŸ¬]½4<þàÖëü5Ž._œÞÿôâÏVŸý`½Ù-f=ùæâÙýó«³éàÅÃåÉ[Ÿ=ÚAøÏ‹a¿Í*š9¾›¨¦p.ÿÕå¼k˜ìEû~Ûá¨ßüæù'ÿöÍwî}òøÞjRLϾÆÕù ¯®×öÎ×¶à >ãõ[ó‡ïžÌO¬Î¯×›ë[Ó«çýàÙéùÉêãë›7?9¿x²|óÆöWŸ9¢¾ËÈ­Yó…OSkfRöþA¤·¢–PpZíÅH™"·ôf\%'#ä—`VšŠå\8³åFIΕ–ªÁ¨½ÅõkéÀI5†­%¹Þy®‚@ýˆ'¨5¡™’è®%Þ1¾¤(×àðŸBŒä)ê}P’-Fc{ñ¯w³M½ëâð­•ÅÙ[«»Oÿñ׫['7>ÝÝZxßüú%ÞÒùܦ‹w¾úð½iûü“Ë=Ÿî~9ëðbñÖÃ/oúøä®}m‚»Óœl6§{³1kÀ¢eÐaééÌè}—þ( A•p¨Æ•TJÙ8)„Yš8t+ãÔ¯¢îÔ.ž®bÇ$JfSË¾É ÖÒiZëÀ¤é ž=ÿLj5Eù<ö×"üžãoÙ•E ² äôè—±d`çwÞìô¿þý¿\ÞœÖßß½X­°Û­N?ò£«Í„xëäì¹n~Ðÿò‡/OŽú?žlßä/_Þºw~ïÞß.ŽÎñêòìÞ×7]áíòÅ—ñæj§UŸœõÍK™NÇW$¥"ÍFåKª €‘n!'ÓR¼eºD¢×b…$K3ºh¹ŽòiÕ€¢Ùø‰lªr{|J–H7L‘„="(«e’D%­V´¤8L§CNàÖwÝ@(ª},}„$øÏkˆ£Fm ,1BÒòßþƒ/bwÒ®õÞ[x¹~vÿêO«E;:оº±Ùpk¸yþÅÕl»xû‡¶ùÝæüÞ­£Oû_½¼Å7—ÏñW/ßú&';_ï¼ÅF/_Ý<^~(ØlkÛn¼sóñt ë5åd.º34 ‚‘$<îÍóÌ„} ml´id9ëÖÅò§\*&,·)ˆg*°Drì°OâWTV†¬É ƒFÎù»»7&Ëòµ¯Å¤^ÙO‘3%‘_b”š^ÎÏU*PGÁ^-v!áÁo 9 ðoþh²Xß‚ï½sÝ®^=úëùö7«c\ÛéÑ5]ÓâÍ?½n]|ëß]½ÿõ«/Ü;þÝñ¾þâæê“ýÅWŸž¿¡ã¾CŸÖúrûüùƒåãݸnÑ8Çtkµðvu$"º`tF:´lfŒf¬t_‹% ,•=0õE¨²Î=«ÉïîWͤ•¤—ž²:åÃÞÓjµ¦R¨‘ªñE+7’%öåe"¨/Z,ÜUn•︿PŽREN‚Sÿùàgò…Q¿d,\rr—ÿóËfx×qÿÙ|øõ§‹³Õô€‹I ‘š¼õÕÙf@o¼¹úÝ×°oî\¿uÿÙéºÏaß?šýÞƒ‹‡ço,º¶Kn^¶¯¿\½‰?M}žú5¯WwÓb'—BÉË “§ùÞˆh>YC)e'¥k¡È\“žão×-³¤cfQÙLµd¥¸`å>ý}NÏL㡲­å¥Èê_š0žj¢ÄäQнP™`šŽý©¡B`Ï›%xöˆ4­«„ÿĆ)k"Fj³ @Á6ÿçóEkè»ÃÓ;[ë§Ø|ò«¿yv?®§6/1Á¶wúCluû½ó_]›Ït÷æòõ ËÞo,N?Û½sçîo·¬m–mj_ô/ÿÅÑ'¯Ù õÆ8"ÁHzÎpd×dÔžvÂÊÿ qZºÊö™_ŠÖj¦Ý9Ì$ˆPïlE­x^ñ\êYUÂö=O9¬¢7BIþómØl'÷W¶­ü¿ÅGÿºÏhÝV'ïÜXl^Î÷¡Z»Ûý„m»]/ ½Ó®^¿÷Ùkàèíë+†m­îj±›ŽÛeï›Õӣ˓կ¯Î3——ËÃ/Ÿ½õb÷/ŸºÝ¬I¯x¾ÐéjŠ]ƒrK9‘,f(¢Gû§÷ïÞ^¶ˆâψœÈËo Ñyãù?=ùÞ÷?¿ø3ôååæÖ£ßܼóá;þÑörÁ˜ WóÁåæþ±3hÍh†f"-z(4‡?ÿåùüæ´ôKò‹U èªgº Ô>¸ýB*ŠùH/¿7Ó,ƒÀÈ2Û@ée«¸R±Ù˜`¸—Ò‘ÔŒÆæeõs—bD(·Û>Ôƒ¬(õ¥<Éížv!¨üë4Ê–úÇ^¨¨ašh ©]ÿXöE„­Ök{€võñW3l}übuzÓº_éÝ'M‡÷ÞËË;o¬ïüÕ›ß;»uûööïû]ù4}vý†úÁâϾ¸ÿÞï.¦Íôùòø7çyï~t¾ÁzëÄÕõ¬—Ç·Ûj™û;ÓSlšCó¯ÿ§Ï—G¶=æâÕ¤²‡Ö*…–sh"æž2K|‹yÀZØKå,•wôh…³¦È+ÝçWt¨ÌG*úΑyÏtàº'ìÎ[Òû0 åˆ}R¶’¦ ›ŽúR¡ä½3W&P%ÿI¦cZÃáh#XB0—ü/“i~yØ®Øîh}üð—/ÜóÛ§×ËãÃÅŽj+ö¶µõs{xôc[ƳõÝ~ü/Ú7Ow‹S®6Ÿ<áêöó/ôÃÿ¯æûMëÏ?úÑ­ßÇ_½õêÓj w}^Þj·½MÄ¥O‚I2ìfôÞ{øÿóobyö£Ëg:]wFnÌ/ÙËÆ2 _½×c©¯Þ7yž¹%‡zi¤æá¶Ío?N(Ì$ó+½$æ.¾&oµ¼¥¢ÁqjwÁÚŸP„(ê+a¤è(Ó>:žº;ªš"`þÓê7÷Ò'‡Ó ÿa$ÛÇÿ`ׯãh©éÁd·Vö‡_£/l‹?¿1/¾R›æ«izÕn>ëGþö¡Ÿ-þ®ÞìG¯$»;KDÜå[sÏd²HÖÚ«HÆ~0`{ÂXjÉêØ00Ðÿ8†mÀ€Û£–Zê.©k¯b‘ÅLæžßv—ˆsüpâ&Û®È*2™É¼q#âœßv.תéèâ´¾ØihvëÓª×É(µGî,Îaë÷³Qª~Ö~7‘†; ÞýñOþ«šXö”'KKI½@’§/úò¦ú7ë¯7G¢"jì1ø?Ì^€ Ãp”SÒ[Ô p( بý¬ó¤[0-¿¦8ÀóVB™˜Âf(áÀ-˜u…!1dµN%Ñðr†k»d•³-¹Š(‘ã[j`èG•ÿ. o9lû€|°åîá7ßµk˜Ô¢õÜáA “ªÐH*R팼ƒb­M_"ô±Ü]ÖÓM¨êW{Õ‹‹?]ábõ ðöd’NŽ.öVü°=M>ûîàøtŒçˆñ!xÕ^˜ϹšR¦“˜k«>JŒqñÛ¦`lµÞ[óÈõšG+©’îÖ·*k†ŒuV¼½‡”²¬J͇÷0º-ÿ“»sÞXμ%ÖrDybót%㈬ÎHFdK%°Ã,T 1ÏÌ@DrdYÏù±Í„üwF„ä¤Á¡7*m+IºÿãÍš§DÆwF}údï ½¥Å¤öEŠ‘'¿h /Û½öÛ…­9<ÛOºo‰4TsÍÏF;{ÿ¸³¼;ÑÖ¿øó›ï~ýëkǸ¿ºÿ áäWÍH˜ C¯¤1¥¾ïeõ»ÎAQ/?˜VXHѪjJ¹±ÝàÌç `êP[r€¢âÌlâû!÷¢[Ì-ªbþ7÷I9BÐL®É;T4(VŽŒ3ldÔ^Ž…ã ·D&v¹™Ê~š|Eòß çd$#Ñ·¢}E\þoWUåcê™w ݤxlVÓÝ:„M7Å6Äå„$¸EÍ;p¼w¸žŸ…óÝ4rhïnNél-Òáöh£úìçOå0Ñ3ER–ø¤¾ÊY ó«—ço\°P|¥Ç—açå{³X;)R‡š¢ï:b`.©òóvŽý.e1ÍáÚ`(¥<Ú%rÒwt£€d_wn4s,m.è€]Ájå\öCÎÖCbfdOƒÖ›ÐÕ #A2ò‰Ø™ÄÀBXòq Èÿ)ŸÃjr„¼0Ù-a({ò«à1‰ÀÎæõxêO©Ì¡‚kÕÙx\ƒÃŽá¼ŸöÁ»êëÓ½Ô¼=¨Úëd·8à7ÝÜw‘k†ÝÍâÿùõ«ÃÊUýñr6þü'—³gc†¤íîÁùÕøN:Ù)¤wªú6;õ*±ˆˆBüf‰ Ýæê^(z,p-9iÍþšƒìs†³· Ü2€þ€«±Å&N‚M!ƒAó”1uˆ¥´YæÔ ç‘ÛKÚd9¢¨(¢ ’eÑh¾ d¦¬_‡ÉrUt?ý§®ˆîã¢ÞºŸ¿íiOÅ[7G&à¨IOÐ#WŸiË1Žh(û-Äß=IM1µvÛç± –9`ºÎ{»zT’&5¿ÖÀÿÃР#€¾› H·kir%"MöK˜u‡Dèœ Øð±ðQ†lÌEvÎeá¬Ñd&FíZ¶Œ‰ ,zA$‹P’‰ò-zY áôãéîŸ=¨ή·ËÝî1èFYÛ›‡¯®oHH‘¶é»oÏÏÛN×7¶ðÚÜÈ$vÅsþxº«o¯v·OB:ª=Å>¦¤Í&Î.O¢š§­&¾¾^C‚F8ê5à«ë“Fy ÐÇ5dèÝEÅ‚¯ìH"D ‡Ér^CÉ4©D±AèªHÄÁ‘¢Ål)*$ˆ2˜4×fÖWä“ÑÂQ²—0ITÕ”lz4"±ó¹ÚTÕ£ í@VÖ¿ãc‘ˆ/uì,LˆùÕõQÕ!¶Q!¨ª ÀÏ#(UûÅg§ã :ªY¿ß<¨gqsUm‰~ŸÎþ$ðV¼YW³;ž;÷*º•²r’é2•o´l!N—¾Zû£"îÊr¢Tÿægý×즛@¿};ÛšQïJÖ1<¢:»Õ7¿âÙ¿ž»Þû¤Aã|ž®1PM ȶ%Ì0d2L:™Òàê"µ3."ª¢˜ì<Ïw­oõǹ1ÊG?ØÙ¦µÄŽq+m…6110Ę¡lÀ’ˆˆ¢6;ƒòM–™s*«)À Eþ_2, Y?e×è¶‹*¢ûô $ÂÚwËò~ÙCy÷xsO·SÛ¦-—!¬hVø"ê²tá™]]´uW à6"¬wS™Nv®»Bç1Ä´ûèòƒßˆ)eº÷Í´.æýº›Þ}Ûï§U˜¸.ŒýÓ³­‹ÔSŠŸ½ ýmP× 5&x[Yfù…ØEiì¯ýžR¹1É4ªhRI–šÄÁ—lB©¬‚ÁA󫨨C¬‘ónŠŒ€lpsJ¹[1a@®Ë3ŠƒxQ5W&åÍ(·"(ðÿ¬™P̲5ÌÌO>Îõÿyɪ¤GïC3¦q[s¼>¿×u/Ê™[8Ö•Ž01J‡ Úw7/xç}†4-­çølZÒ;ïXÓ§/ÜüN§¸u™Ù±ˆ:i]ÃÃöøyjWNËקŲ:¼z†L ŠZÞþ¦=ùvy´Óâª}ÒÜ©W®ŒTô0Ù}J[/5$rnöG‡çiv]¬|G·5¥f$@MK€ª9ÝåfDa ¥ ›ª$i zÈ?Ú|–ÜŽ‚æ°(4¢`àÊÔ _ÅØâ0Y5„HY jW‘Øm—Y6tÚ4 bΔ<2K5ñ/ío¬ÙÆžµ÷×ä"þù„¬ –°¾3¿ Û—”|Ÿð©Û™„ñ[šªG)6; šŒ_kq&ê çÖk–²÷]píôñÁ÷èb‹æÅå´¿:عk@@lΗ—½6úödójùú×gýÞ,‰ï{°Ý9Ñúæï-ÒêâðÞóècBMTU3U€q¤ª9@M Ý û5o !h2"8)Ê GS@‹<‚Aÿ·š2¤.Ç~Zæ2gL‡•HEEeàÑ!‰Maar;«û)Y%c±a`Æ;PþåpøÝîæÓÉ„¡¢ûü™³ Q¼9b—Ò­å½Â㾜9\ÔžQÊ^«ä£ßÿx÷IÒ£IèÝ“É$UÒ±Pª’×Éòô:ö—“òt>;Oa‹O~zwܶ}¤t{Û]çn^Nž}ç>ÚÞ-hÓÕ¾’jïéœ?kD(“#®ÌN£jŽtkpXRòÙoº¼byd”3^G9Ï 8sÎBLÅrE!á»®0Ÿƒ†d¢ —”bÖ&¨ ªÄ¨ ¨ü×C „ª¤ÅbbC îÍ7vŽ"èþؽ:œ¯¼t~[ïNίï0AY`ßn¯¿Ÿ‘‡"–]S;x;vxå~ü´ŸÎ\W œÌÚj{ùR`kûd¾ž1GdçcêÇ÷w¯–PØÜã3ÝÛúîd´5¥›«ß¿ØLµw SÚúhÿ½‰?‡öõfòdZô"}í¨÷‹™•¬ª*š$»?L¬dšï¡  ,>xß ƒf0, ftÓö¾cSMK sÉmÃɼ©·œ˜Eá ;4A5ι…¬SHùîç_äê$‹µô6Ò-7[€èºßBbñÀïï¶ðjrÐõÛu;’XŽg?::{Ì“=—í„ D-ü‹«í5ëÎÝ϶ÝÍ&¤šMªáÚß\¹ãªßéË$u !%¦—oîºbkï«ÍdôäÕ5¾?¿Š[Uý$Œ´iý ¶š³ý½Õ¿üü~ZT‹G³Åz'ÅU5£%Oº„‚H(”såíÛµ9ט…‡dÁö( Úxø.s‹b…ƒÍ¡È‡Û€ÑßF X€¹PEAm,Ÿ"* p4022¢].¯ÒÀšã€ašÀÆ3E þE.”!3ІÃÙýg§`ûO!bG?Ù+&OŸýˆ97ZК0½ÿãøÙ£ý1_î”NRÅ ýVÇNIÂÎjöÞ£ã*mÑ‚Qlå|¾û}*ߣÇGÄ2kF&Nˆ\Ìq'„o¾§ÑwoeìýݬÇa«P zÄñ2Âï.æGÕ·³f±;GtÍ+ê¶6iG;޳"Ýj4‹>EB6¯ €ˆÊ9b£T2† ù·0)©3[™+„\­å›H 0å‹G )YÄæ}ˆÄŽò¼K"•\+Øü8ÊÆ AÉ×ÿ5þ¥¶99ë Ýg7€¨šRqoÚÐù›OB€UÀµ¡u›ñû;Ïúú‡±w©[ ¤qAˆU±x~XÙûª¸ÓxnÆ='tŠ{ú‚|øü|«ïuFà[!i²µÙÐß/ðí2‚?áH/×õŒ\Dfžߚɳ­å¤‡ŸlÅ(4j¾óoŠ®(ÊÆ\þy¢¹¼c¢Ì)“µ-šcšATÅVM3ÿl[È(RD»TrKd…×ÀÖ›|Àn&fÇvBæp(Õ„Ù÷MšÍÔŒ‘· 3çe"ʃáÙªEþëÛÙG4Ôùz³4Äâë—H)R+a¶“|ß¼WyS‚¬×UŸtivܼsU¼ýÈß\ÌñzìÔ¿¼Ü…‹“ÓB‰å³“-×¹Öe ¡ ¥í›Ÿoí?õ¯—Ç;Ј©¹Cñ»VAµÑÙÞ÷û[—#îY=†+ñ©Žïî½xûj"Ôù›ilëtðñâË÷ÀA‹ƒóØðŒÒd^Àª‘[?%À-x†ÙãaãV`8Ð)— ôÿûy¶<  09šÕ9T!É̸„˜l/! $“òæJ‘‡$Ý|Óš½˜ù—¦Ø·õ*:OW±ê¿~ì0aìÑt»xÛß+T›¾ÿ¸õlL¾ÀTß©v'ÁÏ·®®‹rã«ú'»Uð¯šùtSÄôâCîû‰ã:J­2—{þôaw~uwŒ>ª‹.%r2á»çW´µuòÞƒžoDæR¢”[n‹jùâ|ù`.®öÇ>ÌËrzò»í©o%3xŒŠÙ ‚¹¼¼:f¿°µÊò&¸Ã2Õ\æ}ëgÊ5Zöð°óž±œ@©× ‘«‰²Ääé)ª°¨4qÄÎ"Ò­Wr예ÑñB¶]iKa+MLd1¢Dä¿û&çÚrV=£”hÑïUÏÆ[Ñ'Ÿq LnÄ\Òèõ›÷ÛÕ4¸ƒóy³vâw{Lè/úÑÆ©ˆir^Ÿ]ßt “ 2°ttãÊv㦇Ý;»9:¤×‡ºª"×>Íú•8rÀýöáº=<ÞÿöéîÈq„¶ûÉÉ÷{µä–Š”œ?)Í“£Y,ƒxKìJÖæ Í7ÜŽæË-Ÿ‰pqPV"Â` ÉÍ ;‹J eEИ@5Z½jÎø¬.1¹`N2'ó p~þŽcOò/óö`sµäíE8 ˆˆÂÛO‘DÉ«ìg÷§®èõíh²þâ“Qd!©]5^Vu«rùÍŽ™ º~CÎ}~p4i•¡ÐGw›©/Ñ—~yqvõgoåât4Fp Øè8rþ?~Ñ{»5ÊÙn{±%ä5\-¶4¤ä]Ý»J3½û"îuZÄFë£OKíàVš¦iP »ÌAÄ”1šegà •[È*REDA%RS°‰Yìä‹+oEÌX5Ø$?ñh_­F ‹l͈8 ˆ€˜’$Ã<ÁˆÈÞ,ÈŽù?ÜžbªZMˆ4TóH€¸þ £b£Îï6×W¥¦ ëõÈ·¿›î%U¼xx]"ð.u!,¿êœúêlýÂhBœ¬|ËÕùÈ7Ž"Œn:Ÿduz·8¥æM½Ô‰ï˜Ùw¥C)Iü³MÂé_Ÿß¼ñ£&¸8V’X°Dê늿ˆôvCØ|¦:gŽß¦ßFœ»N4)¨]a8H¤su‡æG×dbGA@Õt «Ú0Dº&6ŠÀ²Ë1 “#fBbrމ©9ÖÕn¾,u |¤ª Š×¿N@Ðw>¸ý›Óø‰w*±Äך½y{Ǿ1}± GQÇX®¾Ú:RN¨ÿ\=Û?»“š×ÛKröÉ &l]±i¯º¸ž¿òÛr\Ÿ;ÞOV!”}wØ>kwJþýÖñ[?R*£) …q??Úü*ø~ãµ"ÈûJÚä•A[P4”™2“9Ìœ„,¨5JÔ@7 ,îŸÛᶺ°¯0Dðäë #ˆ.€šò¦ÑL™‚A2ÁgPÛ€fŸ*1©É€ ùoMÙ€8”0hL4qå×Ê ”&}QÅiÁŸL}yª%UXÇ¥ôs=Ptàî9í¼_~:vº.Â÷Ï>¡X¸D#l¢÷ÐT¬®›íƯzš³{pÅ5ô‰[I”²ÇóÍîøjQ»ÓƒyÓ©÷©èQœÉ:›Ë™Æ3*˜SMÛËf*1Û4Gƒë4EC½…x+ßÌÍìØfg– Úré|+VÏ%6"k „:4& I’˜MnK 2°lÐ!Â0„!/uFÐ!;Û²Ÿ]‘ˆÿv`isÕ’™\o(ªüí§€®‡RK(Æ×㽦—H„Åè³õñõ¨÷ÊHTtŒ½ â†êj ÔA7=÷oÞ¸ÑòÙÓž”¢Œ6 ÏǺó—á쑆.®®Ž··×‰;ÕQ%$N0ëï§'/èO¶ÏŠ£já¸äV“:H¢¡[uÇ|u}y€EOÝ•Ÿ¼¤-iÏ,OM¤:Àê†ÙX–q˜\ÛýCù ‚AŸn!Ç«<ÀÁ0jŠ^ÌÅ5l%Õd5 "[Ucë’å²¾4ìsð/i.,Ql¿d­€!l«I БÛ[—½Ûé%öåýðpZË ª@ï‹Íº /а)Ü 0†>6¸¿¾®N޶¡wyY`JHÃÅ¿|t%€q–öÚôà|’T¤ÍÉÏžwí—÷«¸’ÊõúÞÞË4n Èw4÷·ƒ€pб‡i=ùpÉg¯`Ƴ3XcGf|Úž¡æ‘¬6UϬFæÅ<ÔD¥–j`'!¼shv«'‹ì@M*I’åµ€€ò$$Dµ9 "IdÚØÄÅo#i"QŽ£Yód²3I0îŸN=Ö/ÞT3ªúÞõ\[*—Z6ºŠÕKQ_îì~59hÊWp¿åX}³å¤KŒ/¾>˜?{Ø‹0º½rLkEÀTbh)•ò¤¾sðâ¤Þmš9ÝuYâÆ£(`üÔíû½ÏžÏwš“‘; :Ú|>«-‡à¶ZqfïG›‡%°Çmf ÍJ̨å·Õ,:d–ƒ`ò•œÁO»H³­SUÁdÍ®%¥(jÏ2•jº\´(3¨JJ)Æcþ% L¡£55–A¥@×ÿÔ€ÁƒÚÞ™×ßéÞ‰›³‰KîƒûêcÞ;ê{S‰— üupR÷ó‡Çóïf,æÿºï ü¿¿8ß =ñE»Ã¿^OnR»ž>輫{•‘Á§žÖãÓ;³‚ß©û0in&¼¬PúÎ3±D¦oÎîßÁë§—pçbâÃNÛµóõn™:“-ËmÏÿŽç·š9óoùÿóÕ=pr&¬Lˆ¨Lj£§•3v£:(º2ñô¯ÕIôâ:nÏës7:M÷#3¸ó‘OÎ']B¥”&› X´Ð”Z›ðÅO.?]¶{ú–vÜY'ˆ7¯Î…ê`zéš?8ÛŸKåëM¤Ð °PÛ÷Óuò‡oÎövµÁ>ü€µß>s&¢àhñù¾èw~=:húò‡ñ6Öºf͆'T"Ž ;ÁòÍ«$Lë T’,t&ZMÅ ©ÁG72öŒ²GAØ$11  ãW›'c…gV€n±ó†&þŸò#¹Ù…¬ñÌj{Q>ê0"‚s°n;'¥b„Ë#í¡ò.&rîSÏ,N¥Z5ƒ«Sìª5:ýÝþÞ´ÀŧߔŸè7‚ª±˜HÊÞ/ÿô-DÆÞ+"óÚÅR5l¤îOõf<[¼>Ú†Åx}õGúfâ¤UÑyDÀTHš,¿¿Û}þÉÑïŽ1í Q[¤9_3)ßòm‰FKf@9ÇÖiÛ0Ÿ€ÑjbÞœl 0“Çä–@ŽA°p]Æ<Þ:gI›òs+–³Œ`³Tòî¡ÜzwfÊ!ó•Ü~BU›u(HÄIfãœ@5ZžDwótÝôÐÎ'kê¢Ô¥‚ãzÙ $Œ:_)´’‚¢1»•ÌÆ/pëÏÿ(œÆö–1j×÷ 8¥øâ!úåaRÄãÜ,6P(”ªEÕ^Ë\S"Ä™¿¼÷ñªÓŸg‘Ò:ú“ýï~ô«ô“ßÔa±ý mܺtöøÒÓŽ,Û1œÕ÷ÉXƒhz˜-eH ˆR~ŸqðRåõÍוQ™¦yf²2Ùž«ˆJŸzEF‹Ëe "ÞŽy±8c2 mó)@Ž‹}OƒœqÞ‰$ÂØˆ@S‡( )F)]³änͼÛê,·iuRjä¼ñìÈK1‹êQ‘t•F©w>*BœüèßÈò¼šísÃÛ@ï•O‹ÝUôÛ}Bu®ðª-ô?ÿãÔ?ÛùÙjìW´×èö~æOÎ-}¦² îÌËðN弄 -3 ùíµ3.78·¬‚ˆ1_@Fõ…Ùó3œŽ }×GÈ’t«6T’Ucb´çÌ=–r¡U%ñßHŽëÉ碡Ò@h9•örýþU®{z ŠwC˜NÜb"*É; qYºÞ׋by½©($2‡¥cJ9¸3-ð¢¬Ê¦årâ‘LðQà>…qt‰$‡‘¢÷-ÌÖ§]švDmWHÕJÙTƒCiDÆ¢P®© ž¶ë>û_IÍû1Œ«F*€|}“‰*8Ç…€±æÏäLui6@÷Ø+#DÀ¹^Ó€Øt߃¯b™HÈŽù ˆ¢·¯(Ú,±)EýôŒ#ê¥åãd~±ÜÚQ–Y¥‡P¨º½“Å{¤Â ¤e—®…©˜o\¬¡uo^,"jòCMýä½¢‡åovvbô¸,tž¤º’å¨ÔUéÄ{Ò™>9b$ì;)UH´H)ÎöÞÜ; @ðq•’ác`½¡],–Á”çÛ×\…eû»£R¤l7€¡àUDPGŸQ+³¬hÐwpñà•CÍ••ŠEŠ9?×n~™ B4M ªƒ¥Hù}e8ƒó)Éi½€îÛˆ@˜©Pÿtþýéx·/1ª¦D(¸ð ŽÚÖœ4¨”„íd¥]å_À¬WÜ ëäb¬¿ë0$%M‰ÆŒ}·u@7üþÉWVP@(V1ÈH©ñÕl5>÷Ë7]tZyíwš›Y_¤eC¥ö%$&t=ù]Š#` Üö;­ä*dhü3/Q£‡m–$@&63Õ“§eÝ‹†j³Ëejþ:79~Ò !¡aåmŒŸU|CÍLÙƒ(Ï—á¿B"¤Ü`Ázš'Ê+З¯Ø ‚$eõîO7^ímDŽŽ™|wELù¢‰P ;ñå²Ùuë‹€ržÜl•²97è]ˆ¢Ñ #< R#ë…ÔGÃn kY{Éï&q¼›å‰¦ÙÈØ¦ ŽowS²É=`jŒ„Yt‡1ÛúÝÆV!ØüÓ (‚ÚT$m¯‰$¡M2-Fîà(lnJÑ•<¦ªx±„šú—O=•íg˜!U÷$ƭا¾×ê(TqÝ‹“(mr”¢Å¥H=ö×5oôûÖ ‡¶GݪýýððM\klO¾~öö§mjp=P¢b³JˆT2¡Ah÷'E«_ŒÓFqÜ œ@]͂ݰšO4s @fŸykC’³¢ÆÂKU³òü\„ˆSUä«>§ Úí’4ý}@Tb.JH•P ¥˜Ñ.#²á 6e6G¦¨ðßä4Ì@h¡”óŸ¬Ò äå?¬ƒ‚D ñ,mu¸;k`ßÍ»7ÑqDIZÌ«bTOœ‹ÿE¦®á¡¿1r$ÈnèÛ‡“8‡ äѧ¸uÀQf_º½ƒÝUЋú^«Ë‘p—ó)‡××]]E׃J@O%€+DäZ¨×z¬Ü~µøt‹¤­®fŠ h3`’mgBñÀÙdтַfy íƒlG2¼Íåa(qžë”²¡DÌFi±‰Ô2ý)ËEƒ±yd×»ÕvæëPþˆÚ¬uʇ_ÎH´î …ºÏ—!mR‘X“Ê6ŽÂŽB3 7‰ i}Q;üÖwß^½<å’±QŸ‚:à ‰¼úŽ}zñÀ‘s*P¢¾-¸W7Ý.VãZ¢s­‹q<}•fŠã?y[Ôêç›Æ-^ÜÜ «õÄ£ô¨è/RºÞwìIi¼úúãÔVˆ«¦¿ ^ §É"‡õ–ÎÃ|kÆ 2㉈B¦v5Àtm²}"ýóïæp°ú$ƒ—Ìve 7YâiýªñÊN³=8×vþÿ++ŸÍ$ï¦'2Èœ¿¾be„ Þ.”*Ápw±âà®ûP|9˜üw{ŸÓÑœZ¸(8 é^>íÅ1ƒ:ôΑÀÄ5r0FA¤DØi‡XlÚ˜nî× åè‹u¥×oÛûþ&©„já_þzFTPBÏ©DTLªê)%PçyÄâc5¯(!¶Ê­9¡ë#?¼ùÉÞN5)®v6^&°¨:×_ÜLáÕc›] 5ÀI¸Ÿ*X±XHAÚûäÚßÇ¢ 韷©û­Ë—‡w.×ñÃÛÔñX©^~ýU{D§-T]Dªv¶“óH±ºMÝÈ­%Ç–A ˜ßx _«µ`X˜[uø°p†Þà09‰TiXTºãbT„Þ.OF"0‡žf1”±G„d÷C¤zÍT3ô£Àÿ£ÍÂMC¤ô@ç(Šî®žÙVVÅä–uPWD,j‡â7K)Z¯Â]AZ\ŽßOäKÝôWÛŽ|”™c"Ðþ—­Ùãç*àE ì™èìåÍÖÕqÓøj,a–/¿¥c ¿®¦7E•v¿.¬ÎúÝ­ Rª/kbò'Û{ÌÄ =-+M uä᪛‡”0:ŒAµäà°µc+×b8‘t ÀÛüc½{VÚ¤*#;³¹"S::¤~å{Þ¡¬ù~T•$I¬ Ê•‚ßþs=@‚üWVN‹ùåÅÀQKè5ù‚øÜG{Uœ‹EOÕü¦ê|•¤ ëžœ¾3¹M?_v£BC)+§ë ¤‰XÏýÍøÁ³ t˜¡¯\Çm„óW®,‚P“ÆÀâGÕ7{Ó~9?\µTÐäê±{à8ÝóÒóÞuú«Éî¨ãQ!Þ­]eO_}¶ËÉCì]Ýöc$n;Θ‰ w)²M5¤„;VvðéÐ ‹–Q4kM3‚Cp¸dÌÔzKÅÁ®fŽ9“–‰…ó ’M2Ãìí¶SáhÃa†_ÎûøÄ Añëת€‘ˆb­Ë^h‹{mB` kÅê¨@¡ÓÐlw7e(ƒÛ4RJmÀÁÙ—«ç7—=G¨@<ˆSsÒLjM¡õÔ«çÔââ“û7rU~ãÐ'wX®_Ïg÷&Á-]9îŸÅý݉’Â^GêZfÿúËÏÛ÷‘û›2ÀÛgÑZ¾û¶tÑ8½ÞÕa¶Ã-Ц=£KcôJÀù$ÎÖuódÁáÐvf÷AÞkÙª‹*éV´Ãy¨ •DQUE•øß+a¶•u¼q¤š4ÛséíÌ$ªD‰P`ì¯_õïI!RQ´¡ k!i8ˆë‹+·©ªž–\†e\7ä|ôíMwHRÅPƪˆ­êÎ.­ (úÀQI€i1;î_ĢêbýÞÞΣ§a«bç`¡zñâÃ"à%ŠWÂ5jRéŸ7—z¬u“&©œö…zj:;@ MICtý˜©ÈÛipOeš`0¬åÇ t{H)Ù¬×A8KæÆÌe@® 3Ì0ÔÖùLÍ×HB°$Ķï@UsˆAþà¿„Û¡T` 6IjO@EQŠ_%NŒ1¤D@q)]¥ ½kâH€ºèVe£¾|^xò›’Ö tïd5úõ›»×iFåï‹)šI"/^B+:Ù{êîlx3fT·úÏÝÁ(-³,Šlä;«"€ÓýÂÍTI³ÅÉÀ_Ì53çÓ‰vfˆÝÆ¡.† P1%B–ÉfñímÅŽ¹Å±M¦ê|§€ÌcRä_¸àɺàLâ¡ ä!<%¼|ÈN))*Hbî/×j_õ‰ ³ßÎC ‰=rl(BQ–oê7¸ýÑ«ÿ}{w™¥Eø¼M¢‰œ°ˆs‰–|›Od¢.…Nü©«Ê¢Ø @X”‹«Õè4@Çðôw×Õ|¤SœT/w‹4Ž)©ëH$‰Àó Ov*‰/DWŸÍŠu/ËÆc@¥³tÔ|1:ja8pPßiÙO HÙ7®„C8"š(Ó„¦°XnÍkz2j…áp l¶Á)äÙ¶›¨˜Û€ù/2£Œ€èÙÙ¶ÉtX ~ ¤œ€IJw ›ã­µCk¤®˜{â–8p„i¼Le£ñ´‡Óâøõï«ò§A§_Þ`õ&€Š£½€Áá¿õc åÙ Oh}éÜšêµ£ÂóMápYp­ó¯ÛTm#bÚzýùÝQ‰Ê ìº®–(ýôjo[Ç"FØ<»¢Âù5©˜¾=ýI¾¹~Ò>1¢ž2 …`¶N{69ât8þn1› ¸Å€šéÌÆª[3À ›²ÌÞD‡윱;¢D ˜€ù/ävØ¥ÝzöRd¿”1Û€:úvé’ |Ìln i|I€n² 'P–  ¯•ÁUx}³åb zõ:ÖÄ׳;œŠ>|sØ«w–Ýç¼*)wQÃ[ÝÙí{.yáyºñJîE]N‚_ºƒi©Eããû{òx¶Ï+/ãߟ¼_èAâ+ï H‰#‡¦ð굊Àõwó­¦ßê†Ñ4¹ÄxúêŒîß!oSÁÈ`P@A$ÁÛQ8<ïLŠ æÌvºƒÈ o³ÓÁÈœ%€9ùÖäh(™óL̆“ÝÊ þF"þD4%Ëз99y‰rm¾-·ß,HyÀÒAë÷Ó("W,.Ë)®=ˆJpžm.äÍ?ïTýv­~òþÑõa ³fõä!‚k "‘‚Gô¯—ï»yÙ!_h´+ñáAÿöa]_SËqËüt¿ýv|XãZfÕgå-E%¢ó«²ê4¨†¢/—êUïu2úc<:ªymwßÞÜÀ—ç'{Ôj1iCM…‘Jƒ„ŒNÁ,´Í+™M1Ñ ‚¶Üù {,« 17¼À†V¢g-¡šƒmB‰}bå ) ’¬<: [® uÿ§‹sI••‰!‘B,9·ãRZ×k)Ž¸Í™Îi|Ùî²ö‹z?ÑÉvZž=–™ 1+wPˆ"¸U»<:LÄ}ŠBEŒ¸UŸmo•qÕ¢`êœK®™TÈWûë‹­@é`ýøÇI]ï:¾œ]ã˜O»fº^·5Õ|û)T]kƒš(¯ß¤ÍìÎj/ÉðTÑÔ0–œe=‰b2»Ÿ™csK™¡fä³iZ‘Ü)æ¢,wÞBjgèôɽõéò±Š«±Røv³ž;` ®+à³î°kë•ÜŠ4HIyñJãöì°Þ`ÝÓ핼M!K0¯‘v;]2õi+`ès®—AQ…À€QSW[ €”+."b@ÍÃÃÑ­îÐ"ÿ¥Ýv¦i@ú‘L‰•@R¶„(¤nôò¼ï" ³!Vð@oJLì/µ.SèbÑvÞ)ëâ˜Zî¸#©œàêlš/{VIRˆÆ%*2‚L«ÍòbgÒ‘Ãë×í©ë;OúÅ&Õ¸ja3ƒ°Ùôy^¾<¿y}TE.×<­<úVÖÜC×L˜Š®è&ÿÈûkt®¤ ¼ülv'ÄMZ˜|Ýhq}eUÕ#\½) zS†Þ ÍuC¹œTRFÃë @¡ÜÝ`æÐzwÍ~’¼™à]_ŠŒÀÐak”Èâ»Ìé`›‘ÿ}æ’È9ÎKDìÔI’bŸbåÅ E磢DŠHî®ô£–jTX-&PcÁNýhIrUÌPŠF´ZUç]1*|ãéæ·­:”Þ‰ ’S!m×G>ºyò0Ñ|ö©¨WÕH o¶·_÷+ßïxéþó…ý–®›þ|¼[ôu_î¾Þb¾aÔàÈQĉ__ûňSÛ/¾x8£M?D£f,Jjÿ$ò=pü"n>ûrrtu2@cmAVž((d÷L^ܲR~åó¦ÁáÝ7˜U ÕôRfþ¥Ü´7Ô^·OßfÌ*ÿ…1Lžó'³Y ESìc×ÇØK‘$)éêR?$}­uÖº ·ZkÁ§Xø6ŽRë"qÜC³á2huQEGîë/@T 'ªà<GQæí¶§¯·‰ëû/ÖzéÕWþ ÄÞÇòå7ã÷}·:ÀY>š ëG“0k9Mcä¦v¨êio«£·@»½Ä³gîþèªãÛÎßDW××+*œÖñÑÝ/¾HÅøè¨ËÏsC’¡¶ìžÎ-kT3–3¨D³4Í„ vöÁàn¤,LGÓYÝn;‹©Af‹yÛ~¦¦çgúP´|uÑÔw1Æ»®ëÛ.Æ$)‰j o®³ªC&N¬û&0·±öËRÛrL«•_xyÚ ¢ö ,\ô€-¸^FýË„“U}¢®ô’€ÆíƒøtR£»ûÃŒõ+*Z–Vpk„DtõþëWxHÅh¶ÚÚe‡õLæ%j¯­Ã^U7ETç]Oоòà°¢ùUP•ü„ùúúUµ:…»Eüíó­ùÕÖN¿&3d½‹™ í.6<-£Á&HDxbö/[È©ª1*¶ÊˆF÷g‰\?±Ü5Ì ¡õ&l8· ð¿CUÔœ¦žD$ÆØÅØv]SJ}ËCD(ô™»A€Š;AJÐYTHOgE,xQ¬ÇN«¢Œš~DØ·Ôx[F¢«GÏ- œ7QÙ1B)|¼ÜÏ ¤³ÅzÒîÇvÊœ”ëméÊ2þãø£´õaü*$ò]oJañQ\ËaY†y#áÆ'–XöeýÛíÑ xMŽôò{7V˜ß>¢W›vòÑÖËœ8€ÉÜbÉFGZ½–Y~ì"Ùˆ‘O%[0(²ùY)–‡KŒl‡›å®JÆì%Dà+)B–†Š$I1ö1Å$±ïM9‹: ÐéÉ’bŒ Šߣ:b¨fár1uØW°ž3°,}Ò³wmXŸoñ¦ÝéCùÅäËWhm#u‘ ü©zÏM’äLЄ»‡|Uê,]-G‘K±KpzGù¸¿º8±GòÈÝ%9Ã3­JËÔ™¯áîf÷!"²úº«ºÐ]ýV&ÂÃÝÍe(‰¥À¬P]—íòg;Ï_Ýyÿ¿ÙÀ6){]¦XϘóÅù³›d[IwoLÑÔùivŒñ:»HH'².8âè5 IŒM’-wŸ?Ù~ÂmŒ,""}ûÏÍh¯ «WOž¿ÑÙƒñæí‘YgQûg(}Ô)ô-M?þ¦‹½Õ¶Ö>0à¶yìŸÕ…vì3,ÞÖÖý]*²ªÄ] ßÍÂû;• ƒÞÇØEæKé¦É“ƒ×€†•º™${Ü©8‰ºôF5Ô´Yݦâl{2˪PK£3YÉ^œ{û÷MwàK4"Æ b[$ŠÀJL›Ùx÷¨ýÙá‹ú~.¡Î”\c,F\/R³Ù‡Ó×µ¹ïüxáïmãhPõ)Òÿ¢ß]ŽÈÚ­8 kƒk)âz¼¸ºÿôÌ=Ø@w´üÝ‚òU냆-dž4q>mÇYCrÛÖõ’hÚ¢Ûò¶ï.û!ƒ?§ã±±“bw}ôðWÓ|° ó-zWcß: ùïñQ$xéÆËuè5è é=w¨öeÛÑÊ Ètp°r~'¡–¦Ô˜u±½œLâx©`0¦øªLÚV´Ò"Ƙåÿú€ˆ"iDT´U‹ÄST ¡mœa´ãc¬•Ž+U®&:‰YÛÚz›–Óe™Nfœ'Íwù¢Z«…ܽÐW^=;/לQ€Ìê*ó¼y1ÝùæÅ½ÿ{{£Û_yTµ ÀoÞ äŸÜ4•ßB‘L.¯Üá8-“¹ÉúÜ@O6„v:€®Åì®­~°ÄЈt-=v’Ñl RÃˆÝ O½ ‰T¡·Kõi“=Š×?pâ¿íúXÎÚÖ—îà=BEâîøD@È–—¨Þ"¡A´»á¥£AðMAM _ž‰Ír¬Ò±b!PªlȬ„¬oåß_w×hTV"â\Ñ!¶NÊÜ‚ÅhvguI²µ7Á´UÃo·"A¯hB€¾: äNÜ­ÿ­ö6öEû;Wwß Íª‚2½DdíTTq;ó'É>²i*ÊÊ£ÝÃùõn¦dus½>ŒÄ‚0eP¿|ÓI¼T™˜½ ) )ÅíOROF ,xÝB J`™ÓÖožM÷ Ïðf\rëbRk6}²9•??ÈŒ&&§$nîPD_ÂÙÑî^óðý ÕãÇ7Ø'«‘*^ƒÇÏ—[ÆX$†ï÷ÛL²ÅuÈC·ˆ¨HC¢ÀBC×ëÃmkÓkÐtèH{t¨¯±Ïº…?1v2è»'ž{_µðß@GvÃ\n÷n·½h(ó{ï`ò¼Æ¨@(‘"ÎËÙ3ÜZ«S Óû% ŠR Ï*7kv©nlêx™°‰ËÔmÊ2‹’nÆofŒm ²Y‹Öó?^Q?c  @e,‚P“ÛGä-ITb¡ÆQí¬Åhb-‹Y¸à‘­Wæ¼YBÍŸ<äm5™^ÖËÉ#ÙnC¹F÷ö¿m&œÖÞŒ~›¶Ó宿?S?œä¨9ùôùPpj„¢ðQhyEÉ&™ vSÓ?@/]ÇÙ÷òݦÂgœöSGp"özœzQÔ!ÂZA» ¦ÚÝ&„h¥Ïd!@à¿Q@ˆ%*@79¦‹¹î¾#DîVV@¨~‡"ÚÉ‹×Uµ ™ñ–¥€6¬Ð/v æ)¶±c}ôVÚöù?U}ú¾*±*¦É;­+¶»WöHÂ1:€ÀèxmÔ5Î…QŒ¹HQ/Mvíç‰Åñ¼þÇ£C0™ÓÑæø^šdš„D“Mõåû;û¬"³ü+³‹áøõ.“ƒ~2 U?4޳r•lËÕHCn’&-ÅbåŠ*$c„Øi؇ª©“gjo~êÄ·*肹ím¡«ì»»ÐÏU….š†hØ<]õ×J»lÄnDòß 6¨n]ûÚCú«ªëÄ:Ü<*‚¼RQÂ(L ¨D`øêÔîdV ¡Ø&†â#G¿>ù,ÓÖ¶×›¿êÓÝT€ŒBDä£Hª‘Ûpl«LÔÚØ2›«‰\Qk#v8ÝÜ@ÞÀÈ…$ìlšïõþºÊØ:i÷”(]%‘·åbñr¾óP°a†Ë]±ÙÕ{•·/íîðœÛ§ÁQõ¹¯%I´¤&µ˜U`C‘ [W…Þ½þ“ÄÂî´é];]]P!ô„æ gÜŸÐ=þŽ9è3émUûèúŸ” ½-‰ˆÿ7é=«CßÔnuzX #@Aóó¥ãFm³hAˆHP´J”gHmLî›…/¡Ù¦XB",§‹´½‚oT ÏÂ$Fdt#!*…°?*Áõ$ À›z‡Ç[;ˆÙëe´£‚±6«òüNuvq\Ì©æXY®v‰‚n¬†üxä Ðqr™ºznÞö;©Åg¶ë´=…”ÙH3ʰ•âŒw ÐüUžúšu¸Oú4œNfÙâ=ûßõúÔ Ÿ~J¬* öþ5êÏ1ºÁ«Ö}–zŒïÖH]B?Ñ vG@cŸ–]1Œ;€®ž`8Émq²©ÄR†5ŽÝÍr:¶I» *M¤éõâéj|úÜRâ/Ö³óÝ·çÓïüðú0k"“†H™@P…¦¾›esJ¢„@$uÖF"_×¼˜=yv$¸™-šë_m/çvt`ZªF¹x¬ÇÉ›Ë;¯f ·“ adÉÀ‰<¯U%\Δ‘_¿ÀVóÄžYÔÁÙÍøŽ¢.L2{¶:Ä'Îv±Ò ŸêAƒp@÷»^”°G„²­7sBïžï9À.¥ª·Ówï|gà¾(þ­ôWP?øB¢ŠtUßP() Œ.n"Q³ucÚV N1U>œ':Ï©°­Šì:³35Çi4¾uíÍëñ⨩/ž#NQÉ &Š ‚Øf¨ ‚ÓYºÇÙ35³ ‘©XiiE¼O}•Ô«úë»N·Õ¬¢D×ÖtÑ{ŒËLؤõÄ•)ìmôõó\°$jX¼¡6u¨„BZeb“åˆÚÄapÄࣳd6«D]^Ák{/yúv¹U:M¾{^oϯ?Þ–°’QòD³êÅ«ôòÁú9ïóÎg›æó/kPlì*¿¯ˆ`ÞœDò‰»Chvž¯Ú‚l°s>Ù-Ý–ºý€ìš¼îR‘¾®îŽ.¼µcJ/˜ºµòtò§”ëO¸ˆØ}v«Ü ®€:GAQ_- öJNéù8QꦔÄ4ŠvY# *SL6Ã6b©7>F¼z{V<ŠÛ „ÆzŒŸäï\ž4m¶1‚ó^­3ÆÕ„Òs†ŽU•…U¼0c‹Ð*"¡{Û\µ‘Êyb C¯&wW€.§Z›ôp?«<g/G£¢](h¼>ûæ['Y8sÿ~6+¯Ÿ./«ç¯Oþí Û¨ˆœØ•-@#¶ ù~͈Õ[QÐ(j£9jÄŹT•êƒd+Ùn`ŒÔsZ½ó¿»ØµWÄ€R—{ÓÉÞ¸÷‰vþÄ.rfP®õ B§·ê¼ÎýŽëþ^u+ý,àßôggÇÑÁÀ }¨í’ }!Ο²QŠ M ¶†Ù,ÑÃI m*6á¶LŽ%3-¦7™[«¸X£,ûÛNQ# ;"%T£2ò1U”G%Sж®Æâ5 €Ñ—7Ѻplõ‡ê>¦çt|˜'( Ž'öúïþóåŒpÍúîóË{ïãÔÿihl£4ˆDupòîm%õÖx®ÌCÄ'çqeóÊ{‹ÑªÜÝ£l2å6µœ´Åëü 6¡0^º>~ø»“uÈWW4+!ÈPgiŸŒÓq?HÂŽjÆþÐè<ÚŸ‰=yÚ“xKôº*¢v™„]¥6 >  íf¢ëRc 1ŠjÍ&ø gÓ&åzÛ´fµtöí•·pÝøÄÁêMUÕëÄJ‚êª\!„Ølã@FBJH‚Ä(^5B£pžUnÙ Mª¢´ë&ê¸^ùl¥Üzžëh’ÈØ×˜%ígÿõÿxtøñŸS\·¹+áoÀl~,Ôÿ—¿ùÅaE¦`4Úàþó9*)©×/Ï !¦¼‰•a0ÕÖfèÅÖhjf¨fë'}¾=*t7q§Õ¡íõæØ‡stÓ@aö›Åìüq]›ƒVPUI»3«ëU„{ë,íëhí¯ýNa¨xSMóv–UBË?ŠTøOþì#¥IQ•Ð8ª“âÕÅÖÇzs}¿öµ›eª‘ý&Ý–2öÿpŽ]¸!*°Á„Õ«SHQ¶—²h”25½„n­yrmMŒÜØÌŸ?ÝŸfÔ@ hq%éè»ä¯–²kKRT£±à›¦ü¬M­Ý™†ku¦Éë¯UĂգÇ@ÕÔÛ(‰ Á:D!Sjwì«qÚgFÌu·YHB¼ Âíîcng‚¾íƒÿŸ*­;·°DߪԻj»/† Ò-ÃmtÝ€½ ! €ðoni"Ä[Bb¨ìx±¹GÓÛ4¨\97]É Ù}ú<= Ä &ZçeØ)a«ïÆPû¤Î°mcV_DÌ]½±N'YýßW}‘fT2*Ur £ŠN¸eIXII¬ÿŸYrV‘j±³yõî³}ò±HSÇæ IDAT‰I×¼Ú6‹VÖ@™Ny3>zL­3~; àVÊÊö䛀€º ‘~°ùƒÔ°ÔM,c6E”FöŰÓ8ȼ7ÜI[¡Û“g8NºäZ.ü¡¡éìÛ"ì—°£ ªïz²n19ì Ø[²• zûAéÀæN BÒ}¹øíöa›’tĵ,¿¾F¤ˆénu(£½Ç?®’̶L01¹k`¢3Ër”¤Þhmöt+ šWÿè‘…Á`QlH“„@L ¦Ý®Ë6$È ÎTkcÙ¯fg÷²4äÈ}uõ§¥¹¹Âd,.Ê꣸Õ+ç ÞÎ/ž´1•Êé›eKÌOž©¯˜B ø`&ヌÚ—°…Q–•¦ÉL bSÇVÑ@å’U›ž|¿Kqà3”@û;¦_¦ÛmЛڳ*ݵ#·)R½Ø£gxú¼›€¤ýGIoqù׈`Oº ^°xõªHÒŒ§yØNGxòR”óFñþ.•ÉÅáWùÕÎkœoC™6ÛåQàÙ¨ ¥&s'‹ÃïÏëÙr;[fé×ÿŠJ Ì à‚a²¬Ð²HN~n¿i>] YTG€–øîÑØ~¿s–b´IÓ¼yä\’ýϳûŽ]ÑøOa-Û×íᾋ1p÷›„6mÏ’*LG}RcE‚í›ÇO^phJ­p4ýì󇓷Ã6uÑY´s_†0FMŸ¼¿ëjÃýHÍž €žÓêv„j0€À>¡?îº#‹z˜L´kvôv+‘*Š€)ñ¨·pw×õøè` :9iÝÁÄÚ*+wʽã°Eöxxñù<ƒ‡åIl‹ÍÎVL»œÌøT,äÑÖÉ’ÉÚ£;W—P/v.Òìÿz¡(À† ›….Ѩ`8B‚" ‡´˜þâѶŸ·ÉÖáÒPäíÅ}smÊ0Š{Ïpœ`*4ž¼`ÆèÆòûüN¾ Á¢u€Œ%˜À84^FØÑ³ˆÞ¢®Î>yóƆc‘n\qsÖ>~lΫÆoyŒ`’y òa„æîF§N×þi äôÙe¡ÖÃýêÒ’ÆÒÝ;Úg#Ü ço¹¾>ÖÎ#'¢ŠÈ¿é4 î Aì%†úb¯öʪ®ùæÙöî´Lm–„ëKzx]¢ÞÑOOZ°«¦H£\Ë’eœ˜2oVÞºô¨\|§ç‹gyžý¯²,JªÄA1Q¶ˆ(.«ÄŽGÇŸ›]{eí5Ã61µÞŒZ¹7û÷íazúö>-Ú©¥l3sD¹mFYý.¸ƒÕ×ÿÇ÷øõ{’Q›6 5åÁˆmZß<ô=&«§‹ÖTµ¶ÉÈú:å{í˼lfPh8w!¦>;Â8 ¼ö°K_îêÍ ös·H Ú?ÉþÆÚÒÚà¶®î'í jÔT·M®òo†³ û@"¼EØPhó¤å¤Ž Ô7—ϱpå8a¾7Ù{äNÓœ­9<øÒæÇÙ Ûæüz—e×ú‚à†RÌÄì m¡©Ó²þ>/ † ¬ªjI„¢µù8û|6ýt¼3;oÒ")ö·ÖºPF{ýîØèÜnrz÷üÏ~÷æ?íÌgƼûöS˜*Ç^}û‰¼é W?îùâçë2ÁÃõfÛ*‰)¸Y\ûÅ÷BÐx£$$Zy‹•…¼* zb6‡q! 7nÂ’%ED‰6¦H³6­@£O_Àîè'Þ–Ô]J&~ôÕ[·ËPºÔšVè™0v ¦hþuÿ1ì7d¯i‡¢ó— tÏŒ˜ÚW2™ŠØÄ´ùôáÎççi;q.ÖyöøÉ|/~²wŠ MÀóÙhN¼›¤$h´Z«»ß=gcœac1ªK"»btü}öëýwË‹_g™˜bîòë„·³:&YMyìÍNvYWW¿Ì °‡m™¸¹­Ë/Ÿÿa6ñç‹æó£½#ÞòM“>McK~½Ê¼€)š›×"Q¢ DADZ 8¢4°Æš÷Ú_>x]lw¶798MÊzÆ\\†ÎÈ5¤²vwKÏýw vã#zºMûœéŽ)¥þø"„Î×á—(]:w Ô§ô\Ñ/ê XÔ¡uUTÂW—(cŠpQ­Îšl¥µŒ èGO\º·M+IÇùìÛ½üÇí.ªH‰SDÆõRqbç²…GîÛ·,iBi‘%™õÀĆ ýêî“›÷WI~ú|vN£Úíz`)ÚÍ%û5>+Ê„Rlìø ûfóIÑQ¤=Ma vômÖ,ÞùÕãó³´x¯GǓٌϾ×Ï—m›ÝñF“å Qñ-!fÒ(ÏbBÁNÝÝñ³èÖügÞÒÀø -c;òñ¶Tî+40Ø“Ÿ„Ø£Ô B:¤võ×õo|ÏÜ j7ÃýÒ|è\z›òýù5¤Ü g"ôÐê»9Û_Ù›Ïiþ´4ð¨-JeZ™‘õÉÙÇ>f•I«öž=­FiåƒÛŸ,ŽÌWãªmhèÍ9ü¼|ý&b’ª€ImaeGisê1ƒ»óï_}Ó&úĘ ï¦èßSýF’ˆ—jyg÷äÕø¡6£·F4¬sýá(k®ÝdÒ¾ÜÝ\U°©5îß;§Ã·ÓIK‰&[>?‹ mPaÎlƒ(4ß 0Tä›tjµ:jÎ.r²ä¦ÀÆKR9¤ ;e:ݾ³Êø¡kÇuÓ~Bí* ö-àÒ—zÌlnaìî"ìgþë.4¬/?Poøx¹Â£#œÝyùª< “Cu‰OÕB2ÿ8ƒÚ`¡ëìÝû/Çò¬Ô²†UeÒÌ@µ•ººU§÷²y×&Góï}‚¹™ XÀ°ªM5Lf©ýËÿîF_ŸÆ:6…m|ÙFÈg«:¿ž7K}:¨KæÑ%¶xwùY¦« ÅHž‹ó'Sg4Ÿí~wšµÇ|Frg~5á_Òv6âMŽ\«‹ÅÓ÷$ª- ˆjBuã(Á²i¸14=~º¡Ýyu-1#¶ÜD͈ZˆrÛÑ(ghQÿwÕnw§ öŠ›oé&† ^Rbf²,`LÇ•r‡ñô])ÿ¦+±¥Ã†5îWˆV×éƒCsW^ÂÁ´ÚXƒÂU¡oÉw½–1§ŒÊÃwŸnª%7¸ÙÐ4ßæYå<}QÎ^&›9˜§/cÆøW.xX«5I˸9=¹“KïÕ«u©Ž å Ï·7Wþ]óØR´ìÙòÁÅ»ÇÓ´m‚Í|Ñþ0Í<øâèÇ‹ ª $+³ÙæÛÙN6U)lO_¢%¢F†ˆìI²èe»+ë:<¦çæè,XŒÓŠ\ˆ¸1®M6&Ä #SoÙìÇ¢ ÄÊKB7 é j‚a­PûÏ“1dS$—01 ºUDƒò:áƒÈfPÚ **òy;Ÿ¯®&¦˜ùÓqø‘¬ó„×4¶Mš'T'šù .BÄ̽m–´Ù ÙÉÍ[Øß×-éK1bÂø8Û‚4µb4 ‚l ^6i;ÎÑÛËLlY„š¢}>EOïîÅ€x±š`ûè¦,¡~>N›­´Õ·£ ªÐ¿{»sÔÎ+m³0IÚvÄ67ærUl9S³þ®UQðj»‘ÚJ÷Œ±6BÀ89ÖO“õ£æõѺq¥½Ê`SÐÚ…Šžc’VB} ê M 5¼ÍòêD:ÈÉh(ˆ;éŒôpL26ìŒ3qwÝkï^SQþ뎃.G¨WsK/Ý%Гæ›;>ø=äÝéæí¿Mm±ÍùÍz_\<%k‚u!2LžÞ\6œ !+Ös™ð†¯‹‰{s‘µfqbÌEVwz7¶o‚P¯œs4.7Ux?_“u»“{Ìæ”•žÂÓ÷kB(Òì@›Mšßĉ«´Dx•Œ1›í¿f×p·üúýƒ½w‘1Mâî®dÎßÛl9smh¹¬Ý‹§±Å@¾ƒô# Fà P]DZï·›ÏßÜØäöY‰-ޏEžCa4Ñл5û÷¸ëôå*Ö·4à êŽ_Ã舶ÎèÙIB 6Î0c‰¢ÒQÐ¡Šæ_² PßO"bÏ6(¢ _WD˜PJ ŸüØ®&óWC›œl t‘ò†!É×- ùÚij+|,|‘|x?Ïoˆc2Þ4² P|ö0ß¼¼éÂó´°ê‘Ýágß¥ÍÆg´<Ù$Ö…4ìÜH®«W7uÕÿʇ—ÏÃgóMZIR øÆh¼>ý>K q·ÿxg¶Ü0ah¶ÃûÃkž,שm3\d­{ú(jˆ‘PQ@$%c00ÆÊŒ%µ«_|;÷ÍAr¾±äŠ6 .C«$@M n^7 ¨1P—Ÿ ·”tƒÝûêºß60蔺’‘ 1BQ¢G‘ޤ±G“>ØX³Ÿ~¿9¹8B†›põý(3ÙÿQ“¢ÁÙ»¾X_™£o®Û½¸ƒÀ2 ¯g³*^MÛïÀŠh ‘" Œ ÓC¬3tÙx•–œ}–†-¤yQ[<)B†ÞQè€àáîì”z]%Ð7£·”@wk¬òíjBFf"²„„1D Ú#HDl óÃTXºí¢°¯²»ªb9W´²4-ä¥XIVï›Çª‘³åNúú~¢(dˆØ®ÏÔb¤P±Êýtƒ¯«üÍ«ª6J~î\_Š¢n/}‰É˜ÕÞù³éM4hüvã!^_/–ãš·³¢¼Ö1\üø2(µ¡Äöðha}vÿêêûƒ£€ú³?jØLý8R±ÛïnÚ,œ FDlâìC%¦y 6è¬x±¼÷l-"»áM dl GЄˉ¢Û½¼Óª™Ò=nöÕ™ÆUE¡®"L<È0šµKºëaKÀ!DZ;Ûú˜Zêê‚®ÒìEgò¬û‹‘ †¨]®So'Dg™HÙò¯h;¸_êùB‘EBzŠrƒ`ï¼›ï— J6ÏÛ¯ðù @³OéC«ÆåÅ’Oû­ƒºUÔ9ÜùäÝÆ¶èãÕ«ù§Gûïí=üÙ'î¤E‡¸]%è›&6ªàvf$m¿:%Y-L†‘›<+}#9½“»l3óüuvÌÑ”«721ó‚Þ_âiA" õf×ód‘eE¤Ì…Ãõ?ÿrù¶ …lP$ReM4K‰À ´ÞMRK£à¿‡éæTê|¯Ù‹!ç\ÒЧ@Ò½ùÒ_z^ùS=9ÐÛ< ±S5!õ!j]ˆƒI?ÕÚqꈉ˜Ýã«ØYAaàúx ÅU| ¨M°óvôì$–™5 Ž~?‰ ÄÝæzûŸë›"m3l§“Õ’ï®òuË“»‹õ8ÍÞ¬‰´átõ®_½Z–å•îŸ5-«zâ¶¡Ò²îºã½m˜¶‰C¾ª©ÍDZÊËýÀ©’;¾·$›±óžÇ%‘|=÷SºÂ½É2k6 J}3"Çi¸Ú±çf²üä5$£^£H7 Î²ó‰#§#ÒäNž×™Í¿­J—›Âj.ÑÖUP uqMýÁ¥ªÝp¢Á¡DйnHHÚe2aY`g#DC"{ßà Ñ`ÃHd ÿºoc ­0ÂÀ‚òâQE¡ÎgÔ9i_¦\™4ÁàÈïÊù M ‰Q\§ÍßÑ"Ã&ñdî›7Ù^ËÝ?ý¸ùOzyÒ<¿Bå&¨³'gZçXwæ+o|¥9ý|ßæ‡crá·'‰oc5ò´·'mL’¦Íä«g&5õT.÷&Á¾û‡Ô¹Y»qïWp"5+¼zïgXŒK[ÅdÇë·‘<‚Š")0Q‹m’y2>¢7íÄŒ,—ͳË·[k÷ApëŠÐ¹jêëiT BdDwB›®õ!Gn“o»ÂŒ¸WK(ˆv#ˆ"ôâ´Îe‘4FAþ€û‹¬ géð°Þ\1ÆÀ€•";ÎOÚ"6&CCñÍ$ç¤å4 ¬þúû³¿}°GìØøzópïæã¿8j^ÝÙ—û_êrm m›–È&x¼·<¯¢e\µÀŸæ³{±½Ø\¼þèÁ¹SïW-ÖŒ=C˜Ž½ ™YÐÙK÷sÏÞ5×;Ö–Ož@awèr4ÿÎjTƒ¤FÁ°ú†©–f#–$s—?6!ˆˆ¨")¦!šBmm+‰ÅvWd’’ÌžD³:‹f‡¶‘I"èé;òKÊ­ƒÕnúP§Y’[ŸóÐqÂpŠu’v9]ÒJoÙØj;@÷nQþ¢ƒ½i`€Hn¿Bÿó $6iš· `~ï{ðÃaÙä„Tç×Û}o @Õ®§Ç—Ë™ßܯÒTÍÞgÕõg»Õùû‡)î}¾y%9¦Ö›T#Ü)'0_!‘¨ÈŸýìû|T¿_o¶é:¿óVÜxu^*GÑ=N#¨R©þ¼¸—4\Óg'y¤=½YÝÜ(ÆqOu œî¦¶n”!ûìIŒŠ‘ "’¢&X«-ÔFgTÈÂÚMÎw1`v]-^H̦›¢„ ©“Øî\é¾ø´ãi:\’©h×G @ue7(b>)ˆJ~EÕ ·ƒ û/Bâ/º¶óVᆽ‡:SH<AP–kšTÖÁdôúãÌPLÕ¤IÃŽ”\VïÒ ¤Æÿ˜ÀÁÔß½v?{ysr¾¸:>ü’‘bBH$³ões„í…@÷J¾?²|¿iU5.ßÅ­¶u&É æI•$1ŠIø©Ûo÷ã¶8’ÕÑò_dðÆç K*½Š’²FÛOôT&h„“äÍ7(I) !)LCÐ4GŒÖˆ‰é/R¸!¤­?]%¦-ˆs£IRÐxœ«4“.̺SŒ˜z Ä­À™»–³wBs/Ðì±  ¦¨@—pßr@}ìaWLóCcƒ·)-Ýï"tì5]7*" H¸½hSF‹ã«ÖœOJ5l®"R15?=ÚŒâÌü¸î÷îím>=Þÿ¾¾¸š¿ŽßÆ)1©3’f{8M®ZÚÔîîëÅýÏ'môAäÒOË÷WmdñÖíäè;7«n¯Ÿ=Êl ”ÅæïÏdÓ1¾X¡’Ç™ƒUশ;Þ¿Û/M»Ì]þÕʨ’$%E¡Âa+IJ$Ýl&(>;¸,‘ìWw7kƒ»“ªô´6$jaêNNÕÕj»í ·k`ÖºZ—ˆ M—¥E}æßj2‡dvЮýQÒ^}Øÿç.Òø¯©öJƒ.¤ÿÂ0ðÙxQ)F%&4³¼ÝNŠH®|ùx¾šø<ÅlÕ',scÉÑËýÕqutoñèÎxßý‚Ýþ•7u¬w†•Y ”9Rˆ×³r¹€:rðD»ïê’ïä÷ÚbûæYJ¯°í®“äøÏÆ É•ÄòÑsxÐü°ƒa9û§meyqgçõ3UBˈÈIQ¢™Öãyu\Äirôíƒ$Æ{IRŠ „-’Ê^áËl“áäý»¢36Îñ2Jk«ŠŽwl$]&ý…ÓÇ3öÿ ÆnG7NhÐÊ­}¦£ÅUI¥{Ärk©†®DîÆwª'þ ôýT_©÷v(½…ü[/ªÊª¤Ó‰oÝÈÌ÷^ï_laæ¢c¹ÍªÔmM+4ž3ÕÙÛý{ÍþRêù~êÃáâò ó$Ú$* ˜PñDDÃvœœÉFóLÒ4¿hŠv1Ý9ˆÛ%œ—ÅZŒ¦¿ÝÃì]™‘B4»Í”ËÕúÙË´æÉƒéÉ)ËÚ 5IT$ŸËr¿|s—Y>*~‚Fo”¨ ârU4B³Ïà #¸ât±û³ìBa댜mĈ‘䤽·&ªl‡UÂ0Æ RX÷÷vßËko'è¤}Q×ë¢{¤­¯Œ;ƒmgÐATá/Pû”“ZQPàúZBUäuí%•q"8‹öÁ®‘Ö² m“·sŒ‹R<â¸ÊÞ®æYYTßÞ}“ã)Æóu)š7ј–8‚#4~êqJÕ ]¢M†W{÷K¦ËvzgÖjlŠ;Ç®NŠQúø`¹…ÃZÏ'dº7^¶mö{¿Ù0MîàÓ5s¨µ!PJ3Ž*j?ËÚ¬hìpûQõ=a0êY#«^)·ô ¼q;ŒŠñcs1-ge’›-7!H](s;9»KÏ2•¡!…~ ÁOt6½S{ Ùg=©&?©®XZ;ÿ†vZvEUþB†ÅÔ^¬ÐÅéðÍDDÊ\²?¯G¸4…HÞìñ(õ ‰´`¶Iꃡ ¸Öä»ß¾šM÷ñ»;‹"–Í%Ú{Ï=:‡6Ö¹Qñw“×ñ*QBV/ñýÍ^«Þ޲I(£åéb÷ÑæéΘ‹T¬‰Í›çG†A8ФÑgïÞ4åÁ¤yºÁhQ¬Fa¡i¾ñœûuÙFr™cÑø'‹g*‘X€ƒª1è3k#³R Eb5¤bCógòn³Ýe5áÖ€µ1 ÉQHå²Îmìg…"tƒl?0ÅŠ[ÃÝš®#E¼½$úÐήèFvõøv_ïAçJã_C«Ò+H w¼u„›\-@Du´ïåÇÅ\F±%"vßM,gÞ0®5¥+à’7ÄQ9O–øs7#•‰÷Ñ…»Í™“b” #3HH)¨6Þ=»†˜p_oµ IËQP¿;MòÏ÷³úIðRP¦¬[K›Í¬‰ïCR‚ñËòõE4Êp´xÒ*«d“Ș؇؆¨%òÎeî\coŸÎ_‚€ˆ^@™½¸Äpd$U3k£IyôÆŸ5PLýå+¬UÅJ×O¿û~ú"#!ÆÛlŒ*§NÃ|„^ÐÜÿF¿ØÍÉû©œ½'§Q‘¿¸»Û?½/ȇ}w¹‰Q„,owx·¨Ðš]mK:ÛŽ£qÆá²)°$•Óè\€¼¡G«˜¢›ïqc×?{ï‡V`Ø8ˆà–7&.ý¼‚o9ÓëEñð(šÍfÖÞ½[lgìñøhR‡¥52ñ†17ìjý~ ¤l—o£©´–‰’¨ÒÖ)6ï7î®IÞO“L³0¿hŸ’yAëbPÌÉA–8àØbÎL¾Þ1Ï6w§ÛíØ€M7äˆTù?FÓöóóÏöÚÐ ”Ø+o`¸ˆúj@¨ŸM½–=(Ä¢rŸ€ÛsÎÀ_t™x·a×1‘J÷ç“´%E¨ 'ʧ7+[”ÁÛYzÄtã³°J¸¥´Ê9FF ‚Ù,{{:Ѽ 7Î5†Ÿ^Õ'1XB€jSRD µdÖ7*RÙ†´žÛ}Ì–ï³ÞÒdç^–8È„.µ#>3úæ”Õšã`oA ÀUD€÷jÃfy·Ì–~b 4ÒÎÿêê%›ˆ* PÍ­OŠ"D1-9Øà<ùÅÁ•${Eµ%D]tõéο5Ÿü—·ìã¸;…X­Ù=Àn2Q× Áí¨1ß{ÚÝNý,K DþíP&GÔí=´† 稒I¤-Ý.¨09ΖóÙÖ(¸‹‘++Îä[U¸Jœj8Œ0«i{];«¯Î^g"X$ÖjµªKT"ð¾‰aÜxE¬A‹WïÌávšílò䨇;&§âFÓj…1š4Dãä*§wO€jÊÑ´¸ð‚FRõÖ¤- ÆÈ9HÄ,üòæß‹±[½qùåÜ¢QÁ16` dK¤8ÖØ”VÅêèõìøérÇÄHÜ~Yͪô¡¼ûrÿÒec °Ë}ì9„^è1ð¤:Èe GÔLÇ-àO ¹=˜MWw_âV2 ¨xQk€¨Ê.9Kã|Ò¶.q†o|š¡ú²0ŠâZ«íŽÀ<´Ù¾¥¶›4¹®SН_´j•Fk¬Ä­´MaÔ¯Z‚¶Ñä‚ ’¼u-w~XÛ³G“Q^¤–K—{ µkHKþÝk%h4I~4Ã+!‰LŽj+Ä-" ª¨½Xó½Ó§wSú©v'Ð0¨:DOœ3ªb‹ Hài“ëÈZ{~ŸOûÛÆqõ¯ß±ç5‘]þŸ¢zÇjC´CñÕõ¢¨0D ô? Qo'b¿&Ú?àž–Cìza÷ï„üE_\t4§ÞRDÃyIWÛ h'z4ßž¬wC;áÙûn6ÖÖ15ž 5[Ó>y0JC(<ícV!ß¾ËÓv^¼³1¦ÜF1‰qA¼`¥ØÔ1{‘Z¨ôd¡ª1»3^§ÎwwßÝÌŽË‘ÂÞ´™ç©›ªX%¢Kž?ß+ÚÔÔEb'÷Ƨj9XD LÒ%lc±ýÅ®ì'ÉŽ‰mxo_¾b0е<:‡‚ „Œqۅ˨Ø\„|1‹iLDò¶vóÍçÕ??–eYºí¦-¨hOvÜÚ­c°ó-„¾ C„žîÿðƒzðºkqzÖ•Ó•ã}aÑÍ~GÔÎ@t³RÑ€ŠPÚÄÞL÷7Ñëbì#Ùeææs—(YøÒÄåú^²DtIØ&…nÅŒ¡™.Û„Î^ F6ÔdÁJmœË 2¡Æ t‚­V4&Në×Qþ” IDAT×ï?ùþÊUÁŒÇÞûh â„E˜|Þšy»eí¬Œro}5tÊbÖˆ Ð F{7|ô¨ÜÞ™Öû/³«4ýÙ×kŽ"˜iÀ Õ±R‡¦¬AÍy¿ÚµqN«’ÙiýÙ~F‹ÿ>ÿî‚~1Ú™ž¬N]ÔFaƒ:„‚j?ÊKoGë‚U\‡‰b-Ãí0¸¾«ì±ìî aèF©±öݪôk©ñMC*ªŒš®³6)²XêhBÁ'Öå¾2Yš˜H;¾³i²ˆV7Ë‚†­°XbÚ|'1 V³,rV GO{ÚBT\Ú7å³§µI@êÑôÙ‰Âì°ØÝx­-sô¹#KŸ¬SŒI #¿åä¦j*‘ÇH$BÀ±ü«›»¿6ÙåHVeFqÀ{ákˆª†£RPgÀ@d@Õ†YaÉÇé«ÙH“ðdµ»#çRªAìéWfµ€£úOÓkÿé9e–¡fîfu ÊíŸ{­¢»þ§B¤šêÖhõ“½Ôí1þ5`?ù²‹Ödˆ½ßüUTQëâ¨â•ÍϨ” Éõ&f6u‚ÀAJbgþÌeÚ:Yffâ•§b#è‚×?4Æ‹¥V)WÃÁáØ¥\#Sª£I3°d‹$Ýø¿8‘Ì&Û)NÞ N>v‚’ L4ÚÖ¿¬(ÖÓ¶ÍK+•á«î]H¡Q7¯6ŸÝsï–wnJí‹¢µÕ§ç'„hÑÕTÀ a¢4‡›é±‡™6»×§ ‹=k·™¸ÝØb~ôË—uqvç³í7ÇÓwòµt>‚~n›ÿ>P«¿ô;¹ `?õ?äÓhgÜèjclÑCüì¶ ô÷te!"oÞgD1¾.§«—³rVAðVÛ!iÉÖ€ŒRŸ²³Û*›Ô Ä€ÕÔ㯷ÚJÊ5ET!Î 6$ f°4œYMq[»Ù¤à#W/Æœ¾zQì8Î}šÛt‘@U|õc-´[ui’¾a$Ȇµ›âÕ®ÛÚÜÛÏò{KBôMëJó³'gi Š@®šI`!d3]¯Ž’Ó‡éÍúø×¯Ûýq³&±Áƒë;÷ï}s“n~µøzþçd.zÅØ¡4ƒ\/[_t³ˆnÑþÞÃ…ƒ±Û2‚PQù·]è7Å¡ü¦ñì¾ÚÍ9 t.7¿ ·¹ÚKöÐl+£Këêœ%”sÛ&•0Unlm¢-n¦Ækm½—ˆ³´üýÄ# –ÐD„m˜€QM.5X"¬`Úa¾_ÖµÙqÉÙÍÑÁž«ŒZ“97ÁØS†oBðQÍìfoyÑÔŒÆ)¡1¢´’90hwÊ—k•ÇÑÖÕãítúž¤ÛîàŒéØ’àhÿj­»'ŠMs¤ß¶©-°e³bcŽ<ý[ é"ù9|9ÛõRRÕªÆ[h >°Ÿ0`lýÔÛÐ{Aç¶ŠHÝÄ–®f»ð¦ ü[è-£p[šõ>®Ÿ¿GA ff¯V³ðÿ1õ¦ÏqeWžØYî}knÈ@p+’µJÝ¥q·íî»$õØþä¿Ø‡'fÂíé–ZR©Ydqˆ5‘ÛÛî=çøÃ{‰RD#€+‚yñÞ=ç·¾ÚÎy§]Øù$ENe>0„軺g†ªïRž¶‰k4urszX~¡ÙVF‘ ÀelÊ9 `ç20Q„Ha=hz©‹Ü­è¥bs3–ív7–èuž|]“ !%³ävôn Üu)¤@‚€JŒà ÔÜñìb:Éò*”I—F1;úñ”»¼ëÀRô΃*ú¨†Nó®jW÷=årP]=«o1 öÖ ö…ZÕu?ü°ú;δ>·ÕßÓœÃ+îgúx• æÁýÑõ‘Or ýßÅaÄä¯zOÜp¬t73 °!¶ïû“"6Ûõýê<{öÎŽN®kݶ7«qªIÍaTX184·…˜Ö»y[£š B'®žgÅËF;MÒ„ â¤ó™„ÑUd‰4蜃úN‹Æ‘–B>ñ©?¿ùVœ8µMRK|ã8»…+‹|2žž[~£1 ¤ê@MÐRŽÛ]Vs*¡ðáÝ®G£â».š‹–9t  šS$ªï¥§î U©ËÀÔw»o\b-XTÏ™õ%Llˆ²: ùÜØ”ó—©u§å´Ô´;ûø¼T2¤àæ—£ƒ¶nº.ÂÝ<|²ƒJ‡í¤w£aßD¼_ö¾Íýmw?Ü¿ÞLø«!uu„îǵ½”m{¦}ì ƒ )@½,:Š«‘Ž Mwm«GuuL ì|4{ŸjŽCùç5p–IȨYŒ€Š®Ý´+´«¢O”‹Ùgx’æÁxž„wzöᲬkïÊf׉ë$e‡žw>ÁêÅ¢Œ+nfÓd||v±þâÑ®‹]ÿïm‘PˆUÕØe3/# )ë ¬á‡ï/U£išå¢äP= Dç\9óNв‹óƒÃÓ.ŸTÕô]| Äß™‰A8žÐãW9Dîá¤aƒ˜}oeê?HÝ¿¿†Ge²qHWÛËÏû“ÝÇà" µ_™úWXÿôs…!4€P"ª:3G‘¡K§ÅtTÌ|öÊgÒ '袄rgÜÔ¾T%$ÅʸÆ1F^fË7 ˜a—'!“.@â.¨•]Ó¸Œ‚?¿¨o$ PnsïÔ^· ÞÖ«´k×QçÑsí"Š2ñôÀÏg˜0( û¡8 ç:Ç€,@1Ö›ÕtR•Áõ¢‡mwïák,*`æI !ö* ThÒIR² Ó·OÕî.V9N¾_qŒ þð¿=ΣˆDܧþÁÏi*+sgmº /ÇŸK>úÕuŸ™cËýîÙ+VWïOjN 5"aDRe‡j¤$å êx ³›ú„I)ˆ7C”˜³Z" ˜!Z¼nàM‹œ#øè²6åβ "—±?ê$z œ§·÷m3êX—ÚŒh[—Ùøý‡Í.wõ8YwiÞ$¹Ë;åðbY& ʼnL:y8ûé'ºÕhŠŠ f¢&B„RvÕ dn°“Ãj+ðàúG‹f6ÊPØb/ûWcvÅ ‘Atź^¬}ØM”Îv;ÎÓëÛÉNˆõá1þÉ?¹‰^ö¯ TÛ£h@z—H¬@п¯îæ¸9è“SÑú§¢Ÿ½l_ðÈ_õâ zpÐú݇¨Šh ±¢Ò⩆ív„~ìÌyCNª"«µƒ®Cˆ‚¨õ(dÑ”Ÿó{YáÕ:µ˜)"‰¹"­ºqÞªãh‰¬h>Æù2)ÂhF?ÝÔîà°¨h5^¤ìÒ«8âèbjN«ÑésuÔN›Ì§ò'g?higD#D6´‡‡åC×tÍq;Oê´¹¦Þ1fŸß1ˆ”¥ª&fÄŠjæ âÃ$$F’®­¸Àl5Ñø_o懥vÿájÿ±¸.ñê nÇVãP…Ü_îûè¹ý“2DDô ?Ý­;ûûðŽ2½ÓÝÐ@õð¯axVö)Ÿ0Xzûòcô—;,' @Ì`†¤Æq>æªÈ·m‘ˆ@ãUAT4I*ÌC¬!Q((\ºÙ9M2 ¨ $!'ßy1L\Û‚ñ¨ \ÌSRË %V¿_¦¸39|T\7ÇIAãɪMœó¦±h7úƒf'-Ù&×tùâì6cŒdQ18ž}Lëfzr¥mÓm?ŽFhкpðÙ۷΋N …ˆ¢2GŒ{˜’©'›©ÝÐçÓøûÍ££X}ÎÕÇÏJ?+cQ¶¯G™yé!™»¹‹áî2éCÒËá@ܱmý1˜7zdž/‘J}Ê@h„Ö§íšë.£9Ñá`²™‡–9„㜉*C-3âx›Ì4I"¤À•ú&Þ:Þ‡x6kñàú¢¤ 8v!ï´€f“iôl2– 5ó£Ç‰GbÑݼ˜nwá&Ïܦàpd!+*J]î®%+oòur–j?jLDCqèÀ"Þ6Sº\ÝŸèíXíÄ50ÎG¿3g~ŠDJ€¤ä`l›ÉÃ^~è/&šÖÝî(£wïï~ÖÉ“YƳt”°Ÿ`ÞnÙçaÂ&Ïa;`Bû(¨;ƒÕ~ÑÁýâÚ³iý,€ƒMaü€Hfˆ@|Þ‚ *0¨dV#Ríš$iÚF¥Ù‰îpB‚È(ˆÎ@£*·ê=UM"ÓwmÛL‘óp³v²¥$Ñ…À^@“ôYÝBh“C×’U“.ã¦/—¤ÊÏR^WÑ)’ð¶ƒû¾)Ç]šÑj¹H­G = 12èfòp¹æ—-Éí¯æî¢H”š¹í(Ÿ¼yçÍ4ÍÙÌÀ€MÙ~Y½}rÔAíbzSÔ5îšÅ"¡o«§G!w·ï_öN×Â|È.p1£DË|·ÅI4×b’D/€Û»xµxÔ²;`ÚE =¯HŠrð¹Þl¦[ží%è¦& ëPÆ?}~!M˜³ˆ¨ˆ¢êÚ}~òü^ …€ºŒ·±áã|´}½lžr†÷¨Zü9¤ÖT…ëΞÇg)nö³³õTìßX6è5°ßG{ ùgÚô©ò}\ á7üëazèÍÓƒ¡öýãà®oˆ €ÁX±obGFFé´0Ýt‹îœ’¬S,ók=ð­˜7Pj0c´.¨i8é”@³ÃŸ® [®Å3QÊM“¦ª¾ˆAsS©ï­ó“ƒq¬'‰ 'Ÿäó"pÊQ¼Í³iÊM=‘Ð(%|ýï®knç°sÙÍêŒßÕÁ¹¨„h]ÜÖÍò<ÿ§w+Ç £iySç,¼cfˆÉþ1¢sH½vVšDƒË›ÙƒMœ¯ ÈÅŽpE&þàûŽ*\ÎÚŽw'¹»mæq—¼±{Ežlö5E{äkà ÷ñªûí³‡Þ`’Ós½¶öN>üÕ¾'d¯¬éŸ©>p€ —×` Ä¨ÔS=½·G0Ÿ¥^]‹EbÅîì;gæ/•8ê:…kÍ|´Î/älÖ®Zv9e Z¡Zd-0FŠf€iÔö!‰äpî•U »âÁáxW•ÐùšÓQÎ@ bê㫦Pã¤<ÒW0Ýf››Þö¥`†Z¥b9›QÙÉt´{¬Ào:WçèpþêÌ4CÌ…,©+F&“‹£¸ÉÀ"m«!¤Ç2ÇëÕS,ÏR½ú¤} ™ÛúóÜÇõí(£ ò¾1bxÁ_I—hŸ¸†wŒÀžÇìÏ eˆÁÝëkù+Ô!—}úUÈö ÄÕ¹¨C Ò¡TÏØ0ÑjÝå$‹²m²e=†”¶#£@€l E- ”jCH1ZÍoŠä [Ms6ã$I2Q¶ŽѬSt ¿ã#~PçmSÌÛêý"OKûiÍ~¬\9b¡ºI¸zå8V’²˜—ëf´¾pȦÒ* ª#¸,禓r6'ö—‚¹¯òùÿ×`îÌ€ˆä±"H–U›-êdºéRF¾­,v›ÃCÒÅËKLo§åa øáéu½°7O5M³uVJ€›. !\“öàóp]ô¨îqÛ?U=¹mŠÀ_Ùþï0lòû©×§ÑqïýÕ½e Ф>rÛëåä`›©™¿‘ËÂ1C+HÍ1Q]@›7h~¯ .M¼ÅœGNM(š"`·Ó±eãÛÙõ¬û¯%\·ï_}ÿS(éõ«GEÖmN•° $)…«CÔ×Á’{;­ãˆïŸ_‡°4%B3‡à$0 ÁÛª©ªŽGL›9âà|¥œiýôùë¤t(j`"î@kô°¹Í§£­?ªÁíFuÛÆ°”'E=zšWââƒ_.ï;tg|=Ív‹Ñzš4Û;cÌðÆýþ¢J6$çc_€ CÄÚ_ÚÀà„€P ͆ûö›Ð°=݉ªÁ¨>ëÇ@~"CìÚcL³¦(Ûi™ÖÓ]ɘߒç$DdV4Ïi‚ ‹gj²ÚfòÏi¥b¬Vµ)¹”‚õ–ã¶ÉsõasszuóúõÙ‡Ë&4ï«ÙÃËícp1;””ü×'r~Éc~»Òô£‹] %ÑCùñ¢2ï@‰ÈÀ£cÐ$+Ÿ}ôEÜm[ï ÎçIŽèˆ¶µ»ŒœbåNþ‹‘D]Ôô¸­ðà‹ÅŽ8qY;½FÚF‰M|â­Ù]|úø3OUwÉÑú÷÷ÉΞOŽ(õn‡Ã‹ý¦ã‚Ca¿šw/@Ľɦçé ‘c{‹Û^©3ä|#ö®\jÎ@• ,š:‡C¤$5ãôâ`|9ç]ØJžAšu¼o¢ ’˜zB—Þž9'U5ñ!™ú/ï—´‰Á§ÆŽ, ©t>‰¸\×»ëÓBbˆ ì}¼|}Yžïžä©ÍÝh÷Sul”f§GîÍ•ŽOÝ(ï²”ãË8$U¡£§'³O>}úe¼>ùÛdñ?})«€ú`\ÞLcdÙŽ©{öíiÖÇd±¹s€Oï¯N\†€tß5³ÛPMK¿=úéúá¯v~§Vßè¡»œgí¶ûæðxUz×í~.ÄŸe„08u÷ìeoå€éÎP ¨'Fûígè=ð9Pwk«"Ðí[0ŒAM˜‡»wÈ[7ÛÄ…æʶN:&À[Œ  ƒŠªuâ(mómÅ–fÿ¹^¬töàcßÿ+®hʱEpÑ )¨EdÆ‘ÐÎêõº¾z2‰Õ(e?þ¿ Ì:g‰´þö¢›ÎCä$óËet¬=þ1zpóŽK/κódòù?}‚éqâa]$޳ÝúéÍ&Á‰ÿ7dt¨hŒ]qôÖ»{tVf)‰Þ·7±®WÓqºþ]—|ô¬9?Ÿø<œ?sWx¯;•_mvSãZˆŒzýX%¡# D2† Á0Àõ& z#5þÇæ_k'†ë!œm8&C æ½˜30D ÷‡ÇØoºqœ‡õtª+8¨aÅ–yâ:%ô›&ó‚Þ™:t§7?¾^Å«¹MÏ—]óø±C‘­"±vsjb´Á †`,‚­Ó&LnW4Nò0ÿ¥n`,Çø2L²Tvš­/'÷>œµ¬éüqÒL>,«wgP\Çínyq5{òÉè¤âñ›nžªŠÞ^?lpü¨zLl¨ñ¾{#(#Ì 10an¶Áƒ–ïÜ÷÷~6;Ê^¼UOŸ$%]æ»J¦WO§Y²­‡›€#"{&"bâÁÝFƒ-­²ë0ÆõÄW< *6þõ0 /´~D'ÜŸ­Ñ»Ö Ô”œS23èYLH³hÇ9¤‘½%âO·¹›k. ë*¦¬‰²´ƒ,©`úÓó™ÕŸ@”Ø’.Îëæz—±CuEgB!¢ÕF]Ï䀵aü)L¶×c'X™£mÒ‹ ‹§=H.Ÿøôý{脼µpÿnfé%v²ˆWGÕí¶jaÜÌÜÕ¡ýå`«4¿y7›Ÿ~H§ü>0t@†ÓW;Z“:Ÿ+Õ# ëÈàwÕácWýYÒâ©{õ>]ÎǤôÓýrY¼(Æ“,1h*ø/bGDì™z;èþ¥dÝaw—ÕC6@Ãù­l6tNC¿í[zûå(ƒ‘ô:j´÷éL9>Í‹" s3²ÃÍY›¤¦ã¬cÉѶ´kFÐÒlºùà4vrÅÎߨßÐÒÚí.°„ÎÒ# uj±C3é€4!}ù¸êÚ6³€´V×”;ºù¶í>þbÇ~úÌ{çèöÖëãGB´ÙìÎj¹}þûó=>:7ç­+Äß+âMçY7«%M–‘‡óÍ "©ØEÍ´ît2/Sœ<‰›Û*yœœ7$Kn$Òêÿ¦rÞv[BÍR$ê=êÃã‚DÜSÍ}´ÀÅ3|¸½r¦gÏú¢ÉAþ©:´ã ß½kéïýEÅ÷,gC0p"qÿÓÄõõG‘.Zû>½?éPVu&¡ˆ!"j–’“¼¡‰o¦i­]ñ!?éŒÃ%ÓæÏ¯—;vU-˜d¨hìJ§Æ,F``j^º¢4àP-‚î¤9K6Bð—¦éö:¿>/_7ň¬©#ˆú êú!ŠÞ¾ ­žýKLV·_bwïÛ린p˜6Ùl|zQÍžÍ#±ATK6à°U£6T`…ql0sHÁŒ?™w1[äÉšã'Ü}»ìÖ—O)ú÷'‰vÎXܤ93DDBfÜOm¦Ö;ûï ¿ü‹`=$Ý¿ò¸—«ÿz؃ì¯"Yz”z€;ª÷Ð÷"1t†¨D€`BZéIáŠÕ%nÃøwÙÜ­CLY}“æu‹;ͰL%OŒéŠ!ÌÊ㋊Ÿ¦Y[2. Ž»i,‘ 02i›N±3œÄŠ ™IóÑT£Þ¤$;b‡::8ûp2ïF“Ã9ï¦_^wÁ$*LOóI{])´bâ:x: I ¿;üq|h™Ëo¾ØÊÚæ³£ê¹G´Žèë:Ç”ûp2‰c«7±“üÞ„Û.ýÃ÷Ï®äøqçœ/u~vÐ&yD\ØjøüÉ9î·ƒof?ìKõ”fRþ÷Á¹qGCó¯uïî€;„aêô_ðî½1 ™Sb„@ŒÖ¾3ò4l¢®h–U“IØÖÄ o)± H5ç"¹µãm—Brªò‘·õ“§÷áCˆµñ$ aÌÒtÊ"†e°Ø`„=Èø%ÛcÚ– Ǹ´¼yño»4u ŒŠƒ®[øn=iÚn1Ÿœ4u€hüð õ6ûóJ&%íôë2l¦·‹?uŠ œè…zig ºRº’YbÕä^ÄÜÏ~Ì>ùKøðÞG_„<…è3¨½‡NéG,&&âx""Œƒ}c¶Â`“ÄêûDEäþ´!Ò_Tt·ù §>‰Âƒ˜¡¢ª˜FîiZšR8.Êùñ_^úC¼jêh—@>J:±à<§[t~žEêºnò¿|ù6 Õæ ghha0NÈy—`Œ`êŠÔ´è}» ·1øÖr6LÖaþri1ºzíÓ.'´m¯y&Â켚[ß®œ @ªb‚ qµ1‚ÿ%f—W™ªži°%â^¨ €ˆFtÇüÜÅh/ÜœºŸþöoEè£u ŠÂŒ€©ô¹+ý1ªŠ" oÜðLòñÜP†Z IDATíøSÑÍZ¨n˜)Fñ1‚I|Hh Î{RqŸ~ü&Æf›ÇßGÇ ¬ý>¥–zÌÍŠ„$ñ ƒ¡i\îFéGˆ 3O"UV‚F¨…¯g“?³£ÜÖnKf–3¤¦á J\ªjf¾¡pö§øì1VmÞ¹öÁö¦`þqy”ÿógA£¢ì>þ©´/ß'è/ ;ãdì³îE–óä݇Ñí?þêK{»'ÓöRµ‰7;ääuk)d¸ß-AAAU ¡ŸšØ;牰?¥>Šˆ÷.Á>E€‰ ù7ûq†x Û3CB@r»rfFbÄŠC"%0«™Gµ»·ëÂ\l…ùìÖµl|Ì@ #ÄLL(‰K¶Í¨0‡ÉÑ­?_Ô¿ƒ µâT-T3Ou«%2`TcC­qw•uD¢Éæ÷5y?Ïiäê·žr½Ç"N­˜ëD6Uèÿ•Ò»~½¾ü´=¼ ¡8¬nÛñäù®}`ß"wtüIxo CÊÓ,[朶Îï°«“Í1X6úfþtR–ø&z×õ¢ÝMýf9'+9ØFIÓ¾¥¸§6aÆôƒ3q·#2ê­8¤r"ñ¯÷tL}%"ÚPÏË·W¨†dýœnÚ N„ ä j2!ŠE­cõ<§^BR’Xd‰3è0à|´.b¦õ­~]†ÜL†p*!ß©0™Ñ!ë„Á%@§awðÝ×¹¦€¹ˆ¬”¥[dõ½QYŠ.¯f±ÜQ’MÛµ ÷ïëØ&_ܼë'a±€­ÜËV/Šâú;}R­ìä›G$œÛ/6–£ÙH´¨ŠÛçWÛt6;»XTï>óí“«ú0ŒîûiÝœp¸œduŠ»ÄcÛUýa:ŒSw:Û0@BfPÿ=F0ü <ÏïÙ£ÒwZo¥ê¡‚þ=7B5TQéáRrfDN ÍøúE;ûdQn]’ä±Í|ݨHi³K­YNyNjNÃ¥cÌ’0)\â0´Gq¹rÆÞc‚ª­ "vš°óÔ¥¨ÕvÓˆbŒèĽiþ~ü^hÓPF1”NPp{¹­ßޝsdSè¬5q­†Ä1*29@Ú§^Þ_ÚÉߌwgÎ׳Y*ûxù¡kÂôc1Sè6Y÷Ï[Œ5ˆ” ¦²^µ9“լƒ*žŽàËæR/ÒGÅ2ˆävÓe¡èÖ­äc`**ª%F53QS3¢¾“°Ïñ“=±£°—| :äß Ù>½è0) WÏú=Z@Pã=þÉF¤Ìš €k6kÞüåôàèÆ ó.u®³®È²Î7Q9¸9U¨ÈÛ:͸—è–ˆ›±ðÅKåŠ1¢)ZÇ cÒ6`4„B–þv‹_vR¢ ˜Ã¯3MÁÐßn8meF°ÆÄºZÑ‚™‚uä!°L~·Ä2óóø¯ˆ*M}’…··ÉA•%Û¦CÊ× ‚ĈØ\’eësïª=~žê&jÔ^|t–-Y}85 pâ¹Ñì{J,»ç w‹¹îO·î]½‹©¿¿=Yº©‡ÍÁHÈ4Ln].º«÷t‹Yþ¨{ŒÆL¬@ ÿ!á¾<‚†0C$ ä_× +ÙŽz÷Ý\€‹êXTÙÅÞ\…ˆC0‡™oü<“nŠñ•GC&5ôªcÛ±%5Y¶±ÙeÒ ¥Õ6V=¯© 1Ë:óˆUÒ‰åÜ2‰ªY&ÿ]»FIsËö‡ŽâèjÛAã$+ZÉ×y‹'t”•A‰Hœáìïç_#ÈGo¸ùìì=Oî‘‘ºÿ÷ê?6Û‹_~ †Nu{”¯ðá‹'?™ä~,ˆ(~¬8‹²ÛÅÍ}}7ßÚ?ÇYÝòÌl76î&[ÍÌbÕ+£MÑÄ@û¾ôž•4¶{kZoYG‚€zFVño†u³¿öû Ù`¯œêç†ú¢içYÐL0S3`Ss ½ì7ˆø¤Z_¦©¿%l¥È»è@A° eÈUeŒkJ3“É9l+u.&‰†Ä"&£æ‰°îÔÈÐ! ˆ;öêIÔ9s”–¯n ËCqM…µøÉ¡íÎ')Ü®H{7˜™ XúðäýÆ‹ëOÝ»G£ç '©Š_Aùž?’{Ï×`¨ðÉŸÌf?:¢iVD—4pê—0Y½½/ΉۻÙi3)G»wÏÎ7qÒUÛ¹K;³ÃØ H™* šššéþxþ `i$fbFàþ<†{„t¯Q¿Û“~¦ƒ°½!BîÑ ¤d L=l``Ôg°©Rl:“wë§›jüqüúE¨ƒl»0gR„m•%öÍm–­6ØF—º–çÇÄëÁÔ,€‰9QCâ Ú­[r!ŠFç?¢ÿçOÅØ£r£$À›6Yêf~Â×·r{~»Š«S3B24PEQ åN¢¾³—ËOùÕ³YÖì @ˆ'ÿGR®wUþ)ACn¾úYMh<°ëZ“îÕô7_„ñ<¬î½Œz´ÜÞÛŒ£,×m…oøÆ<èÈAÜ6 k&ÒÚç$ª"j¦ Öç©‘#DvŒÎ3:rž úd[ìÕëý™ÓUÑ,qbBÜ#@œ€ n* 4RDaáóóçÏ_\J—§«lÕrr9s°;ÝÔžLrªyÒµ|Ó¥G£ýêx|ðùCHÑÒ> ¤—%¨@tÎ÷£&j'1BB"þwWeæ26"œ¨!€§2üd鵓«]íšÈœžE5€I A³›×‘›ï¾¸ ÿáÁ®òB¡ ÙÙãõï’ðYÖ€X÷áïxûæž0TÄ XºéÙ•}ª£O¤^w‹ºYÖø÷ÕèÒ'GŶuÒ¡oƒeiÁ}C*š©¨!˜JTDPѨª¦*jÒ't‚1õqúŒDˆÄÄ¿ ¾| <‡<Ø«¹z×õMºhÀ^@“8ì£  ¥ cw{óì 8+ïEX´Æ^Á’Yˆž½±qÌCL*Þ¿¿]wFOF dH­ATÃRQSP"Ÿâø¨9º>>·BÔ§•dð& ‰_Lo7coŸg|mW8²@‘ À¹ú>Žñ¦Ìù~›ÞЄ$b’M>ìv«£ñ§sBoàôo²—­KƇÙX/m;Bµéêü¶&¥…\þŠæßlž¶txsïÇù¨.g@ÓéeÖ庾7ú½ šÀ°?†þ¥Ö‡Þ! ˜ªî lÃ>¼ê~në߃ÀÒÙ7ô+ªôˆL£ù>ÒÀÌ TɈQÙðãí¹ÿ¸à|ÜEowÁµt°ÕÖUÞøÈÚJŒQbö¨¨ÂH"StÞ™!‘3´>xÏ) £*‚&„©ãî:†v#:Ó¦yôK¤$q&ê©€n==ÈÒw²^®Í¼82° C³³]ƒüÍ÷WÕhf¿ØÝJ–S§£¿ßeím˜þÂ!‰n_ÿÃÿ«4Èh·»lAÇR›â?¼7“?¼¼ù•άNNh÷îRôÁÒj/ÊÔ²ÑfÙB’•¬6¨ÐLAzæFÍÔdøÐ¢ªªŠ˜ˆJŒªQbŒ1Æ 1DÓ^ñ©ÙÓ¯ Aûƒ´̈™’jܿܝ³ "y$µ>syo¨Ó…—»xÙu[ÊKs}RÌ»¤ pH ÛZ Ï-鎋mňÜ)’aPdïÈ Í•kñèh÷#³ÝëXChMFtG“5`#uV’—ÔÇLÐT„YˆQÛq JÖ\ÔÍÈ^f‡ÝM×ä„]»˜fíÛeòqn LÒ]\üö?…<Æi²0J2ËBòK . Ëš"þ¡:éòÅ×ÿ6ÙooÇ´%‘X×ùrLCõ“éI©`Š ¦¢=CETÄÀ¤?«CÐ ¢*1J½ëî[A­wQ)(ôѸFάk'Pb¶h =e‡;$t¨££ì¥¤YÝ습¼íV}T…B†H»Fr Ÿaà˜¢†QÒ>s«š)O(-!j@ö,[ñŒì‰A1¶N>,·MZXôçÏ×8¡èSZ““]¬ ˆuƱïI#ƒY$‡¢Ž7 Ö¾XBñ²ØÙVbÂ>²·Rªö£Cet»‹ëõoþGõÛUÞµ™æË®°6 óãFýü—cùÕß³ø«¿ÿ?žÅç“ÉO'³zÝ%ÎÀÅ&oÖ…À-Üa^wRÀýbßOm´ßQz}§ÒžšÚׇòo†Øb¡ïN®ë€?¯(Rß d€Œ*‹íoªe‰ÑÔ1áãw//—ßmÂ1+fi¬=%Pyþ瞃µy{™ˆCä]Ì<¥£Ë÷‰¡`1'Û(&]àÜ)P×ó¤ä¹zÛ}rü_W¿¸ýfr/M{tú Ѓô2·º8˜žÄ·Ò7ý ‘) 0úÏÛcþ€°¾'þúøþóxÔ9F§£"/·_\õá ‡³q–Ü,#.ð¶ýíèú?¨ÎŠxw”ÏÒ‘jS¯>K&«ë'+´œ½£eöû<Õžš^Ê4´ãܹ×úK ¸÷t ÷€2Úöžñ$þ-ôæö>ÇcÒþ˜û“⛥©™ï àÀ”A“.Ÿ6±ÏñíÉåµR—@u|D„íj” Š¦6-?*•Ûée£YÛ5¦îm$E<‚%^Û@b¤4‡ÖP…Ìœº 6ølõçøÕÛÓt!ÌW¯ØMÃ#¸Ê×mžÌ‹Ûí‡ ‰FöXY£Ä×owL÷âa†’\N&ã?~Ü&h v ïüÅí[c€‹‘w‘ž¿u<ŽÙ:ñµ$±ÈïeÆìå¸ÜÀ³vyu”¼þôÕ`”0xÛêæäÔ•@ê,ØÏÇrW¤»Ç:iðôú3´Áµî¨ øŸ÷!ºxG×ÀÞþ¹·¹áê‡ ]òhD`Jà„@ÒÛãUëÍŒR8åŠ)$Ùj^ñr›ÖݸíÍÐæðªù²UÏã¨i-E¡ NèUDmÒL,]4Q©'q 0q€è®“¿=+N>ÿŸ’›Î7/];›ùå >H’'øâ&úØGôšª¢‘nß®œƒ“¬(tSÅÙñö¦ˆÞ‹7µ«òyH_‚‚µÉ¼Ìq¡ßºÃ’¼D¥®šT–µâ2ödx»Õ4Æ´ÎgSMgŒd$™¦Û<´¨w‘u<\÷ýÙP㊶_„H÷Z´ýƒüÄ>ö8tOäààE¤êÙ Ù é‡0jÅ”P&ÍÑ:­>PM5ú¦­g®í¼*2OýgE–|SæÞµÑe-¦/+TÒ&ÓÄ4tFÄ”B/25s`Äû9fùw‡©ùÕ×·Çn /–ÒÎãR½=|²+«æ*2öCRbPD"”Ñx×™DË`ôwŽíS~ðÝ}Í8­ÒS;¾8|Ù d£i’¦Hßär 1à Ù$6í¬ »ÊHǨ5í®šËKâÒyÄÞ|Bš vû_tD3îCz…ó>C 7zô·ýž ¸ûž†øƒ½ûªJ€¡<‡sûRVà'èyÊö»éAÌÆDÚ‘9 ßÀ@è´a Ž„„&­Ñ¿þð‚„›·aœ[x›Ú5Zûmé ##£Ë“¯þézQA«ü­ß÷ZXR°³(ÁV³a¥Q;‡äëýeÊ ©ehÛ÷é$T»Æ®ý‘q« TuòWã÷mlw¾”¾#øLÖ±ÓÆ1’rÌL ‹¹Ž,žð3¯1ò™ÙÕyÚ5Œ_u§ ÄxJUíD¹É;}UØV€ßçÐç\îÖ¡Ý‹¦gÚtŠÏAßÿ®ÙX¢¬YÞdìdcÝB¢÷õñÃA­Æûw~ÊïÚSØø2t0N³ø»Ú¼¯t¥ƒéjÿ=¥t ÜÌÀnŸ‹/„Cv€èíß9‰èÀ´Ëp¸–`‚5³Éo£82Ì)Ximc+ Îý«ÁÅÎF-h’Qä5y󱩨.|améÓBkœ a9m„pH޲•Š¡/­ýi;JxÑãWÔš –iøºèºÊ«3‰Î™pÖ6QÇ2 ²N–Ö±Õ¡/Ï¥Pvô¦«dnzf›`µO¿}Öö^Lc­°ïvÐ#l="ð,xmˆ¯Ô ÒA˜…—*3Ú(«ßÚ·³¼'„©BïèYu=Ô ]?=ãðÉÖtØBñÓí…OjÛOуb“QüýLCÚoŸŒOÍÔ¼‘BFtJpd÷ü="9`ëùAd¡›+¹‘®›Z‚ £¡C/ ;B̧žlŒRܤQvÞWQ5lʘLn¹É¼ömSb®Cg„S²egÙBè‘ó4;n÷H;ô Ø)!9_?ë5³áÅP_;½h _?F³aAÉûU`á¨ø3ÌØY$² |ç,æŽÐƒ‰KøƒAà0àÓÅ÷ð´7ÞÀþíÿ÷^’pè²\§…sèˆ4yD ŒÛSzVH!ß^-VÆIànÔN§ó­Íç4m3 X¿øø½mT ÃhßÑýï0+Ô=e,°uŽ%3 ¶{òÐZv Œ ­a æÿ$¥| Æ—g—‘¨¬v½à °³¹é9O:G$\YM©X䊪A¡BeÕ¶iZÝ– ÓáãÿômìdzúwÇ„™žlûóÇ$p¯Œ"ÚsÖsKd˜¬ÓY&IB8ác. ¬5Ž‘A¨òÕ¾.{ÏN¤ü?r^Àëæ¸›j «Mi{ìó’þõÇÿò¾éT›õ½^uo¿[ NúhµsD©„dÁ’i¬ˆ¦*ØëØ÷þôÏñÎ=ö^þo'¿Î¤¤öyßû)9o‡ÍjJUÇ ±a„yT y#<+jÿî çL±æ«ÅÓNK‘`ÁÝ ’¢b¡œlÙû4Vl²FjºUÔ“8¿9U]÷Ð:Odk H#ö™LÔ(D`k›Ùäh=%½VY!Dcâ—­šè<€¶ú‚2‘ üh|¯†e6¶:ÀÊc³ét¬WÖv´‰¨±9C$ÿiO¿_‘÷L9O¨ßÆc šÌ'Ü<ƒ2›ùíAˆû/à°nÂ'èÿðìï ‚¢ö„6‹ €CËÄÞE¾#`~U n™ K åëÉÖj#­ÌNÛOnê»N«ýö Õ·å¹,òa°¬;­n}Uìü(=7eîçº]¬';‚£&÷â=¬‚Ä:Œ­k §râ IDAT,Á@«Eïs¾¿/8ëöÄ (ñu±{] Él “`B@AÈB(¬…r1êè¼hz–@SDL-%IËkÓ#háèQv«ßñ6(yd0ú¶;ÐY‰¶3l½2¾nðþíêôâ‡48[¡èÿ›¿lXõÙóc3ÕPÙÆŽ‘÷øãÓœõ4­í ã!¶ïc¼÷–ñ{cÈ!]à0ñí¿Ä=Ôïl_`FBëÀ ´à‘pÌÀÝÆrN"8‡I”›¹¦94ª5ÏÇ ¾—ú»0^DÙ‡/‹rF¬\Ú9k¦žÜ`PżВŠDZÇžeã „L`8LÖ9+IóþR&ÁèöÄ“vÄë¡ù~ÎëÛÌxN±èTe¿Ú"£°{b‹}dáû ZFÀÔ(φG¯àȼËeäX" Hazóv²‰~Êà7£ í†Ö´2HÏ‚!º €(d43N´~SeqýmÿÙÿc០VÁÇ/›ÐÛøX‡±ÍÓ*BµUD‹ü¤%ßO‚~Ús?;¨h?ÜìÄßÓh£Â)å½øøÙ»Ÿö² g@2x„Ž[¡š‚,°΢¨Îu£|³Ì …°OÛ­÷篂ûÇÊ÷Ë!C Â7×W¶ua*oçEéÃ\ÙZf qC# AŸP4–Ì,"’lXaY«Ô×1<š®XrC²5¬%W" ú‹¥öH Gû&Fv „T{¾WUoäë÷ {N­Ô°D.ODøz!À _ä~â“èU[!”B#¾éöÙ×Þ»åiâ9Q»Føºû×Åüó›k{rÄ׉Ê_fý(nAš ›U2Å.Œƒ}fà§>CDv„pˆyüÄòì>y©‰ù00³ãÑæA‘ŒbñzìØj'É:`÷"E¨w% ²ìø™²ø¦s숴ñ© ½…öÊñKQØõC½XÙèþ]–V-yÓwË&<;)¥Ä(R­S(¬a„“k#¥€@pŽxh÷&V ’Û} Ž#ëº\ÁdImw „*cpÀޱV *ÕêÖ6(§8(oÓ Bñn™¿½i¡tH «VYa¹ D$Ò†»¦U®ñ(…u€¡"ÃÊÚŸ…åmµ«/Þæ4Š¿¢yý¿ë7Ö½®ëÈnȺ2ÍKu4¤ zÆØ(ÔnZ‚{ªÜÏÈOU`ûð4€§ˆÎ=n³|ÒD!‹·¿ß¹}ȇ 6à˜l:ë…@<ëI+ÎôCtÒ6èÍd“]Ù-õX»FT?˜ÍOO½%¢ß몷ÃÎûjDÌ6ðÛ†@E{w–Dô”‡ jé+l ‰½dXXc‘€ |~lîñxä¯j1ÿX{,;•“ï*l“$”"¦‘°ë ²DkÙ‹›’OžyéWËo Aš Õö}m\´-…à²LP”]Ñé0 ë 8Wy=ÃfKZé¶âjmoÿôîaöÕº~Qß}صv:p,¥Þ6©v˜eq7l6¿· A =µÝR†ÃÓ¡Ù'?îPrâ›}¢Ð§åõ0Y[”Ì@@ð“3·‚Úw± ãù°—„:”dKðD“!°¡ ,íÈk}×^ÄÝ8Ú âQ_o‡!ÚÁQʹªÌ`{¿öou?2Ì,±© Õ ÁéÒ‰5 6ìA °ìÉ8ƒÉ¨¢ó丞îÒ­Zˆöijÿvÿ¶3=qpO‡ Å7ûŸñ›p Aõ< V²‹™½&4Ì„D°¾d&{A[´«ø´ï%¶_ªpV{uF³&3_ÄÅ)%¨~|}ê"cÃjÖh²÷'Ër}RT}ßIF `Ø jÀHÇŒ H/­¤ai¬¶ ‘yš#2ZŽž¹Ö Åh1]f˪9 æï›…%§ˆÀ:Ö#YÔM¶5iOî\~;/FÉò.èó“[ôIH±øÞÏäæ*åVÄå܋ѳàGê»ÏrjTÃ¥í&K/n^;{ÞJ3nBÕŽŒá&0Ñ™JB™:J€#±õ¥Ý#Ì{y_QÄŸrUŸôfø$Ì$ñŸÈgü$±F¬KB¥›çäz£Å“­Ã Aí3ôÄþ€"# 0Ŷñ.fúF^u¯ò·;­f3|X‰¬Mvþxq¤Ú¯šñ©ô}oåUj®¢íÔb[*j ë<Ò %]ƒ •ïi" `FÁV8‡Dö[÷¾íôÆf‹Z— `£,€†ˆa‘‰¬h9®œpR:„«ïS¿­­ú:f3¯õ øõ†D º1ý±@ æxqiJ%½}'¢‹¢…9q¥´UýÎaêíڟ뇖Ê—a2»Ã¿-×t#\˜¬·åÂwÙ°ôDžØÚ¶‚ Ø=!g2íPBO²Í=vÃ{bÅ7OÎhp© “Îú;Îw i­-!p‹5:¼wÄûO$ÃV»åm›7êN—>µÏ^ø={½Y!è¶½,̤Z–Q´ìkožâJÏò!Š nH9"í)d¤ÙAåüPh'‹=ó!€A8%ŒÃ°/|Õ«C’dW•™Û›%, J´P3: FŽR -ý‚r&*F_–öÅ ‰m¨”÷ÛIÏü~‡ö´+zªíDä‹X3ËÄ)ºë'̱•÷e–7§a½KfCHÛíR¯Úx•ä˜I)£ }îEmW‡e‰6f,À*{ølqÏY27÷ý{Ä™ß|J 'E#°ÈäRuÌÊtÞgY˜Æ!£‚‘!8rhI X" Ò!Xc >e]û£ñÇ «WÛW¤IwÏ¿Gp]ßÞĆªú¹~hÒö=Ä…$³v„$`g5NlHW€µ’÷N9€Î1& q³«k;èG$s*Œ±²!³c–‘JD‹`­†F˜a¤ 49G š³lö¦ç|Cä¡ÃÞëòYøî‰ú9‡ ´Ðv¢›0hC…\/êî»Y±ý—lK£çú»îÉfnË$ñ~™Q¿ãÃêºÓ39ëµðI„­|Z6ñɦþ´¶²¸˜çaB`@ñÍÓúCx€xìb08=}ó0:vþǶmh<„CH4!Ë}$‘! È +‘<ûeË›TeØ‹n¥/‚Ø+MÛ¾ðœOuRÂõÀ=fùÊsU)2B²µHìH Yj¸ ÿò²¨9 4£u­Ë‚Q²,‰¬ƒp<ìpÖoã,õ|NÑŒž F®pÎ'PXD0ÀB;d«Ÿµ£gX;‹÷1äΨvì¡ôàq¾ÑQèuçÕ~kTà ï/„¨ÛÎà[TaðÍîA_lÌ•Í_ÿ ¨srH’Ýg«;P}¿ñ? £+sÝt–äÉà¶AW:SÈõ&ÒB ¬ï< , n½'uß§ nÞ›×?{|‡@|svžº?‰ÜÇØ}÷Ø}i£wM8lTûCe˜,[ „™å>ßRì«Ë -€õ™ð>öÆòM¯ó3/m/Äb[':îâ«yÑ+½$§îýÛd`ÓNždR´„Öh²Ž$"Ù†¹UQ‡Û£`¨5;Íö„%p‚Œ–à q“£°ÖÔmê‰gn:Ÿy©7²›Fk…D­“ÀN  ã )žÉ&+åì³­D…¼U‡j€tàÖÿåÝ‚=cËÇ뛨 ~ñ.P~‘†½]íz|»"¯—õžáæU{Qg­ŸŸ†%li—8nf£õ¦_®¶Õ£ßãØ}ÌåÔ,Ï=…wcÁð§2iÀ´G)3 ·ŸÌð Ë€½ÿiP8Hoįé6 VÙ·q¾ÁÏÿõMïE+œ¾e㡱Æ tD–À)tB€Edf+؆jÒ€Ž*ñâÔîâ;Iƒ¦ÊÂF©Q‰ñÇa¡Uºê¼ö#ïß‘6œø,mK †‚’d,Ö"ï> <ë Ü-7hÑ!Hg ĸ`ŽÈ÷TnË0â@søE÷ÁÓÑã6êú2ÓB±TlˆY2J´Ž,J1qÕÉ}!@ÈdÊþç7(’X|ønhßßlšç4V•'ãXG£i ñ&rª#—¼z•<}Ù6æÚ,Ö*r/5£ûÙuƽκ’sQn¤ˆù¹§”q…jž•­OlÜ•µ:꿵}‹wGø°yÛøþÁê ,€Øßbûe†ÂøõÌÃîuƒGõ‡™Ó½Žùk?ÑYo¡ï5Î0 @Éè£C@fÁN²ºó²LgÓpMöwe*eK—gœ™~$;Ü—2±ù3Ì>ºÕd‚úæ¢*`LuÀ‚€„e)s [Ñ5ÝØð6‘K Úì €Î …[H~E…«{ËþšCep¿… ^;Wø]±i}ËDË>’gP™¸mMÏëðrù,¯ó°}¨z´÷ÙÈoÝFŽá±E)ç½×K‘$•ã⣃aãË.¡ßx¨ôÞÜz×QŽl\~@õQx™Ê[ýÂL0Àë¸ÆÜO'MáÌ’Vù&²É}rû°˜ˆ»­9Q°—^ì§¶}'¹OEû©Müö´ýÙ!\·[ù¢æ~¯ÞÜ~¨5:g‰P‚e$e‘Ù«4äÁÔn •¬‰ÜôæM0­7'‡m dÔßžm/xß÷ãW‘»Û|T.ÉgËÖµµÌM$…TV»PŽLl/GçÓÀ  ˜]qY5•ë3ºÆaRnðlæufiÚêµ …F4èYÁè¬', ÔA²nOž#¶£‡Æu_Â(_ÚªÂ4Ïž/þùÝ4°?ïu`™ÔÞë9éé–w ffU†ó£vól&®ÏÒv±U/‡6Âu]¯ˆ!É£ áàÏ|lªÏš~x§=û±êD^¹š{‡›NèÙÀDÃǼ]翾ô ì1¶§(´O‚ô'°Iüz¿Ú¦€œŽxçc6ª—¥Èw*ï?n%[`pä$I° -¡§“‘ 4šãÛxé”1ª®Vš²¾ö½Æ‘sX³ö? áûÙ_?üiò³ë³þO­…Dìš²öZI`W‘‚ÞEž”ä¹ÀÒñ$¦í‚Z`$çȼX*ˆ ©£:jÑÍ\›N1è/J±)á^% $˜\cI€sEЙì\*¦Å..tãÔøôþ_¦ hS—Ïúïw/ÞÆ¡GòvÓ~Z‡¿›jl{»ÛÅzg ç=ÿÅêÎMK6±JMs*ϤAaQ¥ÜeDm³µ]×fI‹be³^ˆŒÉ[w»]Ÿ]…û0hØ—¦ì}H´ÏLÝ‹5‘Y|ƒû°8ˆBøÃý·–¯“?ìœàÍøëY+KÂC¯ àÄ‹KOµöóJ>ÿPæáØŸ=ÌÊéÍü—óªÚ5Þb=†<¤GM(Eü~3Xþ^Ÿ½¨~÷Mý#ã1sí2ã¨õ¹ñYÓñA´ c%9ßõÂí.ªþ¢Î$CÒR1ó ð¾×F®´§ úiÒòn3ÇÌŽP0 ¶÷É™ªX@Ò ¨j§ßÔßISi¯;CûªŒÔ‘3ëÇ£\}XQïó?ÙI/¹®Æ’[9 Iµ®·ªæéŠ´µôy˜lëÐúrÐÈ£‚vwëdSE+%'xâmÃr§Ê[=`>¿™&¶[ íÊr¾K½9EÛËÏ÷;Ë“¾sODãAP‹Ozt`@ñ냰sO00¢Ò»µ?ùlsŸO/[?½CÇÀL¤!a,’Óm~ÕÜõâîô.ýÅâ!σ[7­]¶ëN3¦d…séWm~Üøw&üsòüªüRï†vlõ®uä)cÕÈvGãQÕ}ôçåÐS³ÚSõ(Ûæ,-€gçW;RƒÐÌÅìz\oŽØY]7œˆv²hX*iö=B*6’€=´¶äcY‹ªù1eÕ5$\?8R_úŠéô2L‚?•7¿¬WewÅÕ´3±^V£öÇ!Ïîï1Ë%'òD¿P“ž?Êcs×Q©ª«ò-ö3Ñi»Ôz–wÕ3é3Ù>N9”·Õ›•þj;q“C&Þ¯šðéJÛs2ÿ}š7ø†ŸRk+ëªÈ´Õ‘ üÙ„x÷ãµLàöµTè„#0]§ç—ÅCM=ŒÎÇ’$Ä…qgõÊá «¡Dc‡¶é¥bQ÷@çó»<ýÕÚüñKoÓB‘®-fÈʳu"Ôñ_æ|ÊèÇ  A<Í»iY™ÇÇGÒ8Æöf×ÉxÙé¢\®T&kuaê†ËrT¬ÑՈ蘃Ÿ œZˆ†fd¼úakyÙ?n'•G~uéízÓD“@@æEþÝŸ…ÿºÆPÜÃtr´ÖëBµŠË7úz•°IŒíº‰ËÒ8Ì`à¼`[F}>’— còe¢³H.¸jú _ ©u;˼âÿ|.Û/Bj£xJ(à Üd{ÓÀ!FŸh4$ß ’C W¾2#½ãîg6óÖG~…Xÿt,È:Á$Á‚Drz4Þ ¶ùe•U0˜ÜÎ…BàÉâA½…ó¬f‹’ºíFozß?2žNTøñÅdRÉü÷œé”³g3i/’ÂûÊ¿ÔÝÛu{±jBoѱ@+3dì>Üi'öR6ÉËÁNj*¤/×õd¸Þv/Må0jn6>:à½À@0)?­“ãMcmb93çÔæ€m”ÜÙl–{Þî]>é”—éç&;Úè=û]ùí÷åóú–"µ\~á>›×£j³¸Þ ¶ÔÑ00öЛ5éã®Íã8oòòdÝO1œÞ7ëÚg·¹-fÛil¶•èWÁ`ôÿU!O?6½È=’÷DOôžø¤.ûâÈM¢Šô$˜°‚ýRÎÄ‚œT nZ®ó—\èÕ‚€à¤M:<ì4QkT”HŒE[AÏ~ž;(6ÁºüûÍËóãúö¨]•øâ¢÷Ñmôèñfzþ¥êD¿‰^d•²‘T `ƒà1sëÔÆz¡ö”óýMB¼vÝ%¶U‚M:Dï¸CQ&]ÙÌo‚¸»ÝUV(µ%Ù=Në`™Ë8(½[K2Þ6Œãþ‹ñQRx"nzíg‡ºÎƒ,ðà~zšÔzñkDó§× þ¸b8šz¤t<¾½oôvvÕPúF1CÛ2F²@dyЇç?%ÝV(W†Z”'ýGÿ§;Ú´Í0º²0NˆÑ`ùl çInq³»ùY÷Þö?|ñ³û…Xï SŽS­lBZ¨¦ªrywÒ"¡·Y*B#oÿÑ•£±_;Bn×Ù@2læç}Û~òñòz᜵Öy6NêŠ[êKW¹¼n‚Д„[ãÙ$²|ͳê‹K''çòz‚Ú§/¾KNËûwmúX\ë-e€®¨R”‚ Çn8¾÷u§º§°Ylë¶ç›wr8CO~oF­¡펎u\ԃŨTyÏ3× àåg_Z’7ùé½øqÜß–ý£ó)âþÉtˆO„ø ²Íò[¤­2ÏÆ,–^w÷ú­©Mrjõ^1p @H,™ hè\Ó’e] ÌÌrö£‚ù¯~x¥Œ<ïzº$vj÷¬ ‹# M}Ô”/eûïQ ¡—.ù`ge’×qãdxÅÚTá@‘®W¾ßt¯ 97× ‡ï“=¡q_äV‹H’Ùi91B—£Þ;NƒÊ ² üŠý¦¶Vxª`nlŒlY›Þ±a3Ì“ŽíY$ŸÏlÅ ÂcUn†÷Å«7Éõû^£EÑ1å‹AÂÊp¥üE£ÔÅÈŪðÅÍCÐö7‘«‚„—º™Šî Û”Iw³–vÛJƒÝ wkHºÉJ„eõú²ÞÜ&évåãIßs°—vîËRð)¸“Ÿð$ñ9@ê÷¯û§]åÇZ8d.¾çàHtñ]¶PlœeKè<ÁpÀ¡« K¦Ñ$'tŸÂÔŽ›‚V§Ëéí´>Y•Dl7É×ötn„ë~k6ÇÇÑfù—a`‡7›0@µõ5ØÀÔÚ.‡ëÐT»:ÞF[ÇãI}1Ö“›‹¿hþlXd[·SÏ:&˜øvÔq»~WèÖs.ÓÌÿ‹…/äXCoT0¢f*ä E')HS?W?l‚Ït^ËÞbÝ÷Íòb!¼°<‹WüãñŸ7³•d?Ÿ¬ö‘ KÝ\ÙdWËS»^ªD"bªâ¥§úYRo‹Ô†­Uõë‹©åüÑøí‡ðy#jyÛ(ݘ—ãÙT•¯T¸4ÆZ7÷ÍŸL¼7wÀ“‡@üäôl¶?½eBe7ƒ7ÕIôrûØ‘o=²Õ¡2–  DÇÀÚ9¥kbAÐÌ.‘znß;]ïf¢Ø¬¢ÉÆ:MÓÕù¦Tˆ";jUùÓôE¤Ú÷ú@¼]4­ëÒšví`Òpqõ¨9Ú˜Xø––O;­/"_¬ÔØË–ãç}Ùg”ÛÐyÑ0ÐJw*ÿüý€w~0ÒZÞA®ù¶f„Z(tÎyiŽ•–q’j¹[Ç?ë5—'•©Ç}Ò†?,Óv‡1âE_w¦gÙŽ*j¸1Í–¯t÷’Ôk¦óºá×ë ?sy½ úãš XŠSÕFúM,9ä<6yg`·÷ß­ô´ß‚ü· ¨Ê~8ÁûP ÖH~R>õä´›ÄD,~Ã$P¿Ù…ó~ îßô:kÝ Â6þü±^?ûü‹lAC!ˆ‘%0 P¶ q7?~S;¦‚ÞÊ<¼<^‚1ÈÝ]¾v6èuVÝ€ ÐQ"ÓŸüSOÜý{N†e›û[u1µ š¶MOárqEapÚ¤QëÄ}ßß]Vx5ÒÏáè$åPaŵ ]ÛÙn̰îÍÑÕmf‚‘t¬“^TØqÝXÕ4$>FÉÙÕ£m»‰¢‡ÖëegÀu¼e"Cì;ŒýÎ|ƒT´›Ý½§G5˜ ûà¨ör·¶tßøsiMˆ»N˜'Ý2\7­ ü>åÝ”GƒÄ0/î»±~¸¹×ï?dë`¥‚¯õQýzÔô÷ói70"¾é+8P΀ûŠèó³WԈߠ«öƒ:ïäûÏñÃë­Û$Cµ¼™|Ÿû?#ñÿü¯Ñ‡ÿ ãI(ÑòÞ.öúj«•pf¼™géZ>¿F²*\ ¿hîò_ÎÜ¢þÐÏk=òB(½büæ•·‹¾\g¿»ÅI.û72ŸéîÖyµçƒ#ǰ»[Ï qÉèèã׫o [U0¼Úå%®%÷f.1QZÀ”–ûe廟í©ÖfƒRHœ¡~êdÏQŒa°v±¦Äß%¡mÇúp#»Ô•Yçìr»s^–ü隇÷Á×—÷æìÑiÙM¤AGÑñl׈•†ºÓ‹{iY=SÑðbàµa©x€€`}¡Mß)YºYÞýñ¸§¯uy9z/dÖbüx4 ’rwÓ™ZØ-9”{õ,!Ó'_ç·Aÿ#ØÝ¶w2†X~'?¬Ÿ=Ül"ÿm4§¹Yyá=ü¶§æÿÇbWXÞG±[rÑ ÌÈÄ(Ù²µ‰lÜaÕA¿^Ða4ÜÄÉOÿþÁ;ÂСm¶_í”Û%=5ÿɼØþá¶©ÜS}9 ,28VŽ…°ä‘ݼ̛nºôMª~U¼ûÅ0»à•)6ïB.ŽÀEGïÏmòÊa OóßÅ$â³Q-¢´ÁLyMÀßÝÃ]Õý…›ídVÈ#ÈíúøÇðHU?+ÛcÿµU½ÈÏ¦Ç©ì ·´ÏVèCÒÎÇI®cª—g¾ÊÖÐKâÓ4£àTP´ó¦»ê ㇮(„7êUnpb”*ߟŸ§½Pýà¸7Æ›w׿¯Eç|•«xÚÒvUtÕãsÛ „]ƒžŒÏ¯]kÞÞI‡Á*õ\  uÑÈz§Û`™Ò¤Ô&™›¶šyëîQîóëù6ðFÑÝuUa`>+^ïZª“4¬–Ê?äkÀ>¨‘@üu¨õ#ÌäýñÅÀô¸ªü¿í½Y÷áîCc›?ûúÿedR€Š¥°„,ȹ@X¶VÖgÞm‹PɺüðîïÚw}zóû´‘+ªŸtjÿÛ¹ý¼º ®¶a@+”ÁƼØ(vߥ¨rXåÐï}m\Û ŠŸgÞ;OËc½^^Í¿*Fg±è¥Ëãå}Xž|° IDAT OfE$b4¿žôU©¿¢¼X¢wë²iuãXwå6Õã[ ^˜x¥À®¥¾åéÇÖ^ÝÏ« ×?>Žï^mGGy­¦­«¡²­F‘Gñ[žÕ©¾Ý®óANÃÖï(æ‡ç‘ßöZ÷Ûº¤bìšóÖu¯çéÉ¥ï—Y$ÓãŒÿòÏÖm§¥dð&ž²=(+m×.X§ÁX+½¼!{ä†i!¼"+Ä ïSí'§¾©L(›Sê?Kã_T‹1ÿ߈~X×eÿ*Ü–FOóí:Ÿ «œýYåÚBbÊK1ð½ßp~þXÏŸ«n޹ú³Ä9#V¢Ê.nŸí¤s—/FËmÜzè[¨,•u ³l&'nJÿw˜ÍStªøHHØ=>´¿_Æíç2*χåÏÎ&—Ï û,{µè#MÖÃà¸j¬³Ö©!8Ƙb,Qì„CßÎO£Â‚cX_&wÞh]¯îz[³Ø –NÆÕßôš{þlÍ݆ ÛŽ'ºÌ]ñb¾ZwÇæeY¶Uax0X«›v :ÕöçniGóÚ<[ykíY×þk†Ž¬„W¶ÊÉa:2´ n–Ù(ŸÓHÁšëáNŸ{› 5`cXÛ 5.¿N¡¿¤áíÍv*#ý/ް0ÞégÝ®{óLJI`®þ‡¥Ñ MÞæy¡wðƒâ¦‰ Ä®<^ ‘0Wm';Ó°çb·à¢eùhœz6ûNZ‘ÊEÒÜÞ}”¶ž†¡æ¡ê'¡ˆäoæÿ¼;;½Þ­«^ïÉû úì'â7dî·Ù}>3ó‹ÚYôü?Í{׃¡Œt»j­ù1ÁžöïsÓ*f H "‡n¯S³V€ÚƒB„nƒ mŒ&(ŽÃw_cÓå{HЙ(=~¾&Çו „Ó[3ÒP=fj(wYöÛØNÜ›ûô$(ÆœM6Ó:o"ÈÚ~¹Ö›$ÛÙÒŸçJ 0ÅÜL{évMP)ìÞ®ç)pylMr„u›ƒváû슲B&”®lÍv6,»¬Vº¦´¨›Q°ýUóm“e׿}ÕñÑíÇ‚¨Ì£¼Ñc*Ïx×qáVŸMй—í–‘€0ªª¨Z—c‡‰Ü´zW'Ò~TgVyÅ}BM0j~çÝ6Û¦i.\sü‡ªC‹«ä¶ž«£A9ÿèoºŸq"Aà¡øá`É@ñÔäZ¾8ýpëEEmÏzí—îû—´q5‡B¾ÿXÊiü榗×H¦ÒCËÈ ,¬&ä,`Ðc÷¼þðÙ•è4T/¿|˜ÿæMS6&©ZÕ-üi®‹ ˆü᫞×ãN‘ç;=¬:ÝÓÕbØv†âëe¿ÃÁxç¹A»V~s3>¤Ô e¦úø<îRÕL’Ûr6Ø8/¼ l”›,dw¡Î+S «Qçwþ‹Á»ÖAÚnä^>Ê‘ßICÓ«ßzñTuuü<t]Y_Äo…Ùüëv—k¦û4ØVo\gø â±Ð»ö˜fùúL|èûÛ%¼0(zKÕ^ËG 6þ÷IѼJ#W¸(]ûÁ6êÇífú¹ì}5‹/ÊMÿ¾7¬?ü±8›üÃ&z[$§_G[™ZUzO1…OgYü#¨á¸g³EØŸdáåí;qþæÕ5}¹vßf®<mªŠO‚fcr XqšZd,»5‚‰‰ÝÙ g»r>ÇãªnÌŸÛÿì_9l»¦šˆµ:woMoð˜_HòúƒAy† Ý4^l‚ódï¸è¼ìî<¬YZ cÛ6_¥Û~1XkåOva¡wi,APPUúóUÑiU9Íã`¾RWµ±ˆW;OÖí®_•êýMë4¢J“â6Š3ðá·gÒ?­—=é÷ÕÀÙùòñË9ÝÌF‹×9Mžß;ÐëÐe˜-ÏÞ'õ®¦yZYÌ«%aæ÷,Wõ\l•îf¢mæÔy)zù~"ƒ]v^¶+ŽpÛ¸,³°=ëñª‹w**‰údòå÷G>ÐúÁÇv¼¿Êà“v Ä?p[¾þãÖ*Hµ:Õb¤Þö×w•wLëôWÏãçðDCñ@úˆÀda¯ÞAm÷ÙÑZ@–¦’ÚÛ;ñÒîªÿ6› 6¢yš«)‹?¼|™Ü=,ºýEãD·7|h³qÒ¹ü¶¹<¹ z•[ùýuŸ—mm`•ÁÊ©dç伨”¹ÆfÀ»QÎ<üÀ=¿¿‹Â¢¹ ó´@aFË/îõP5L1¶ÁuÛ¶Ì€‚•Ÿ—\ëN·Hã@L«+hµrçÂÓ~TUuò«ìzT¬ëŽQU[„}õ C2)¯ØvÝ #ƒÕ¦qa캽ö?ð<ªÂ­Ÿ·Ž’© —QIÖ1¯¼_ÑÆÛÎg_Êò9ÿ2Ê… îòo«ÞurB°-v³ðÆxGÚöíd€›ÿZ,¼ÿŸ©÷X¶-»Òó¦_Þl¿÷ñæÚ¼i€ÌD%HU¤¡Ž õÔPC/ wÒ#°!)J,¤ .‘æšsïñÛï½¼›VL”ô #b­ÿÿ÷=!ÿ\:„„nÿÏ >Ÿy›Uü$¤igÝd{8;/ OìѺ“9°4EK‚FÚï5 @ÿð|$дš ƒCñ~±‡OêRT/?ä¶syô°’(þýÉ7W_AO>jëI»mmv™m¸]ʪè<¥éà EFƒZP3^Ñ ° ykÛX‚©ñSti÷ýÍÎb¨MðÄÛ%­"òŒä” #Až AYD$%¶W* 9v{{±l^öû?»‡$ñõ¾Í——Ea i‹ï v×˳`«€tÁÜo!©ýðQe;RÛÒÙѸBM=5$(ÐðnsÊ}Tz1±¤¸«‰+rÜ»õpZmªŒsÈ#&Û-Jv›=¾»yø²·Îf“‡·Ì|üS¬þº©ôW3.þ{!Ygîóó÷š=.Å~üvÇã(iü[þîÍ¢+u (Œ«0‚†@Ãu¯4 AD$Ú`¥Á)×t bcZ )ÁÉÃÔoüñéäIø¸ú²?ç»Ãº;úîÃɧ͞õ–æÔ~,å~ñPõF{‡~2êE[lr ňÌMT¤ ºî]ìê®»ôòõ :V&í´-ƒO¯:S<:9ãBKqSUã^äyŸ"‚¨öƒÒx ³ºÄ°¢îQ[xkÙÀÅ&Þ3vðÑ츺ËG’û‹’²ÂÁ–åTµÀå­S!ËG+bäÀâþzkÊ –6ÊAíî-y<\_›Q¸%ûÊ—ÂÇÛÚm¹e™–øÜ³‘ÊŽ'n÷]œo,ᢅ!ýò‹áÓͼ÷ìâð±ó?¶¥Í=u€ÿ¶z€Ç }|užû©U´±vžB&yÞF#€V^؃! MÆð1¢½p¸i«Ú—¾üsô±ï¯ÐR»ó-k³Éi³+Tœw¦g¼@uôÖE€Ew¨)¸8äýÁú1<›Yð»3ü•0àÄ|ƒÿ ½“¾Îí³–d×Ûä¶bƒ'–‹iü]CW8Z•?77ÈXZÓpoF? Ak` ‚Phxµ‚u?( ¤ù®,Õ/¯ ða¾>“Dob¿zý¬úö¨V™åk¢7Aâ ¯IqÚ&/£AöátnæÝ¤—Ãü_æ?÷ÿB °ú‹à¢â ´ÊS—¾ÃìóÅ=ä©–:Ɖ]Ã^©mÖ*¯vef "¶ÛÙeQ3ÇáÓ‰ç µ6A®·µsÿêtocÙ’l‚f”ŠùÉEãÛGuŽ%l ˆ¢. • Îʉu\æd*;8º_;&AÉ´¸|$¹+ªàê>û®ëkƒºc÷šžÃï¸ov®_"‡k7X$z¹Ý•T»'EûÅ¡ÒÙãÑ)ÙY»¯Å80æÇ2î_ñÿ=4$>>V®™Ú²âª8¿g/^N`™Ûm‡ D…g…œ-rlÔFNbÀZA•VHYÈI¡êµŠèàDp¤1VcDmÿ|A‘¨÷[Pt'àÍ0]FÖÕG ®>;yóxô,ak¸¨Äàîhãšm Çþ- ¿÷ôèäÝ€?†¦Ýä³~Y¤nß®|àMVfe?©²óðC‘QÜ2§ „ ÷z¸v¨€^Ì›ÆÛ’wúӕÚÆ>ÉÛ°¨õ&zÑ}μÄìÂöö;õµ­';ð^-ÇÍyع `êÌÿOuþ!Ÿ×g~~wŠ.wÖã6úí›ñv÷ôüÇ‘üÈì€Bˆ Àâææ¾Ç7>}}t‘~À'?=„ @êyoÕ@E”Buc=i®^å±ÊÒ’# €F@Cf1*!øƒ^GIäÿ¼ÿ¾Å”Šô¡€@¾?×*¨éeÔl·g–(ÛÚ2i"ràÓYù€ãg•@6Gl)KVœy yÈ ˆtûí]íTx0švÁ!ú«m ›bïvçúƒ…Ëm $%M)D´Ëð.ùT žb¬ÈË$S!¯¬ª ¨l*rJÅAq'•˜…Iÿ¡DM¿(H%Ð…sg̪º×ã†ö¯/¿+%šìÒ'N#hò÷qFM¼_>eÏtÛÛ wÅУpß²§ñ~VmÅåCŠáª©ELy@šºáƒóL»Þe³ÁlI!q #&›(Ä ‚šõF;̪ÔάµNü=ÝÒ *WïV»´ßê'/6CžÃÐÎa‘:2Žª‡,ƒS—'Â,’ãn¹"£ Ù õËQ׿cCWdz7q¸]`¥å%=õ„.sdφ+åžs×¢}e³Óã5ƒîõŸÉý{m£Ö²h^¿Ü믺Ïæ|ãß”'n¼n føz]•Û¾ öЏ÷7M?ê²ýx¤o‡æ>q}{£OÞZÍfö,ef‚÷Ô)“Õ¼ÓÞßW™h“†§”µ™å·±)Z[+Gçb+X—ë¯ÎÞQ”hé ›^‹Þ4A~_sôå»Ö^ÉÆÌ´l¹©MÈÔOêj# ­;qÆYé:OVw^÷QƒZ÷9©nÃa’k«u ¨zxÑ “óƒu¿Š¤¥ zÚ¼‚ÍH ò‹ýmœŽ“eå˜îC;¦?¨ ~¼¹ù1³ÑÎ0¶ß»þôɨŽ?-50V«>™2ÃßH‚0j ‚yõîP#00Lu¡öY® GæÈn›5l*BvHñ£¦ ZQW<ŒÒ´ÇDy;4ºÚÛ-›c‡ëÆí€¡ß}tþ¾Ø‡Ëeé]¾(è÷܆ÎñC9ŠkØ/Ai-#C~„Ȟ¶G©m?ð:#×vrÒ6¨VvSy:ðeG‚E~Ò+6d)kÎraÅùN3@Ñm²ƒ'<°V{sŒ‹8¢@¶{·8@¤N ¸:.×TÀ>õ0@ âe×¢¤ íѨŸ(/å‰gð÷ÙØ¿Ž{lC6S»X„‹ZÈëNôoÆa¹Žâ×44lë$mä%V¹3|mN첋®ºœì~ŸöÇòÔÕ?^©Ã¿kâß5à׃OO†¶Ñôfö©ª¶kOzXkX½`¡1Ð q[Ìté·Z# ÔTB ͹Ãj«$K£§…4Kc}¶0‹X;Òa.•çÿ؃m·EQç>;ÿêaÉO¢v^דZäRvM|’œërz*#«}i§mÕØ©³?Â:S(âõšOË9n¡oRªoCT¥9UhM¡[S_ó}õÕx“M×a7†¬ÂöMwhòµ-—•û¡âéƒcQm’þèäÃ;ð³ÒäËÄoÛÈ¡ïG½f ÈÔìô³ áÊuq[ê>Ö–ËÉeSE?˜”Þ³¨tÑ„Ù݉ãooÄ`·9f<â1HÝ’žº¸Þ&„¶SÉYîz‘þ!H3ýs, !€ Ù(øpd+gÚ§ÐhˆÐý †i©!1  Úäˆ*e€B1¨ €x‰&Hâz•Δsk’þìJ…ë¦>*ï¡§×bÈúäæh¾÷‚‚(Uvïã|—ªß® C“GÍHòÍÕxJØ}ÙsµpóMeÜú“d>è-µá¹ ª>lxÇûL °VͧK 6C/ÔЊ·B·€…k çs+“LÙno,]°’ÆÖ@ÐÊÀ²QT4MB×ꦱmÖ‰ªž|0DM£oÝFË’ÅE¯†n »’èqžàfì<ÈÚm3°ulsǼön˜·ol@8î|xò” È÷VT¡IMã̬.ÿðô¹ØÔM䘜#‰ÓË";¡\¥?=¤Ô"?¾ªýp©öÿíè@Pöš9ƒ™¨þœ@ˆÒX¾Ðm°Ö§‡Kmuhh4лÃÑñÈßö{~³¡u­ŒyÂñЮ!ª’4ûW7Îçÿíñkc¶]s¾±œÜùЈ'Zj1,.Xiä%²:éo{{gÝgzŒVäȃ·»qz| ŠD9'vâr\”Oz¦Þ!cOÐ\‚œ¡h…6A`Ó›4Šu¬guVÕð¶ÒMˆºŽslÓ@ AÏKeï¡"þ£9û›7 »·8@E´Ë‡­Gq¹nžñY°K½9Ü*Z'C=)ÀÎÔ›™¤þ‰×ËkVÁzvPà<û}w<ÉÆ†ÇSÿû~Kèè1_û“×Í¥6Ž•¿úܼ›·ëüìBŒ=ou @?øº~Ìÿþˆþ†€ßí~9&æ~·¨ú½²0–%Ð&¶1JBHðͬBA 4Ò@ˆ#T FS²c I ìz㇖”C§ÒõõÍËðñþì`‡†e×££^ˆI‰éV^ç¶““ÞÞçFåPÄ5`ü§§m¹Æqôð¼[úzm&ä^ïŒÂ9u@mu(( éF¸-? ·;¹Z'Öh2:}wGx-ÈÐԹ౶Q-6•+häÃéÁHòõ÷7ý¼¹*\ÛÊ­ûÑg’ðuÍyE^è¾!wgÌ€Ì_K¹ýáàóÔ ÔüÓ“s¡€?´ªÑ·shi¨¤€ävÂðïwÄPk¢ ÔÊš´cQ ª®Yw:çÏYïœf[Bt~„÷@Q¶Úü]²^Þü1:ë¨W>+¶y>Žäšâ6*éîÍÙߨî°K÷Q ßë=Æù±³EVÖ±ž›"ÓºëJ;•eÙÊv\© ötªEk‚0RÝÊñq]×™9L¤²g§¡uW1>,›CȼTJZ·Pû@ÔI¤˜ÞÓLr!ñ ;ê–f88PlªÉhíÜîP;ƒMNO'áën­ ¨¦Î}Ý€é¤L·›ê2œ7w¢;,Ò¸ãUÙ» Ï™$ÇåöËêO©Y¹*³í°·Yú_Y•ìuÛÚ¨1ïTo4:ø«XúGFÇôA€ÿŽ€¿º‰¤·éÏh€Àóÿ(1ј ƒ Æ4kxÇü˜ÐÞP³¥ÑöÄãÒŽ:aM¿kú'|Áè¶" n¦üµ„‚7Ö³9ÐØÇ;ówi³ÖU5Â?æ¦óÎÓ©8ò/›rA™Ê¤jƒCýÁñ\V¡ý”KM]¹ïvLõ8*Yà£Pí¡+2¥1kcìñÙä&Dp4—æ§å ¿0]"“¶³Óå>íVa ŽéCÙ´ÌE‚Oàzô<ðŽwºS°‹ä©Z4ƒ£®Ä ì [[H¥æ“@ÕÛðOþ¢ûØ›BÓóÓ¦TXÈqôJ\á™/øgXꋚâ_Úèý4„˜×—Î_%-@ókf0P\#úêE¥ iY6o{,èI;VŸÕ3XrµÛHÄ*Úù‘ë!’¿ßaÄ$ìZ¥Ü¡W[šé³76ª³fõy½¨Ž§¯OY5^ï['·Ït¥.lçæ¥?¿ü,Íu˜±rÙòàŒ—-³TtðHÝg'1è'o Ñ—{Ttß ÂÒ÷–$³Æ @€Ûˆ˜Ði¼yŒ‘Àj,¦€¤¡¬­lÃx„“ûã'TYµøpWöœ…ž¾#´ŠÑJ½kg=[e®ßŒ©_Ÿf’°!£4áÇúŽBÅŽÄæÈKÜ’2C¸Í‚¨~ØKûÝUt„“N³ÜKšI»ãÎi©•žODׇDªq &­€?HSþ9¹àÛBò›ÉûÉC€ ^ÿN8€!  Æ ­Pd„è£8QнLNçÑ Ž´"²éѶ»øÞ²€(êÄdµBÜ?Ùþa<¾«–k¢7ίÿqóñ(1)ox˜°Ë­éìÚwêΛ‘Û n}r–ïÏ߸‘%´·†6”‘495ñ'Î ü>{‚—[öÒ™ã¨óVç•LÙ†ÔÐ~8׌òe²ÔY왂¸m¥PÇPî[b z††¶ÆT:vJh›?èÃšß ˜¸¾Ø?ó‹LvÊ ÅøAãO–Ùí囉"Ò·{ZöÞ§‚µ²}Oˆ±·±àıŒ8.šC=½^çz«QûÔ?™.óåúi­f ÷¼ì G’RÔq œŒø‘ÛþwHV6„†%ït4ï740?¢ÖÍy JC­â§ÎC7HmÄxUÓ€.ÀèòIô°1¶’XÓùC!N“Gð¿¦ËÓ«Í›uÞ¨iêÅ9îá¦îõîâfCù³ñîÛ£½;k±oxés)ˆm?ú/ 3ÖóD®ó®7/¡õ),x’“°ì´½CäŽÿÌSû¥8e 3[*ÀdØ8÷,ÀBP‡X¬î…*Q=öE"Ÿ˜+Yîw­±}Ü ¶M­Êm—¶ˆ­ŽÐx×^¹œâ Ù)r‡ ã Æ{×Sõæk ˆ%«~? Êk=|l<+€e®×ïÖÿö¤x=o•½ÁÇÏ/ªíú”·L€®þ¡;A2}‘@kâ_abDYø»‡§ƒoŽE[À@`À«ä%XK  ‚òtgq¿´¬^ìе»©éR‰¨lPCå#p6_ò¨Ó"Ekµà PôèU¿Kƒ¸po ´uý0ìõšgt–>¯ök®{U&êÿ<Û“ýpöÉÍŸ/{klÆ+ݾ,¨gNñiñ—…ý)¹n£Q¿p®–N¶/ŸÊÞmÀŒr׺ÐyötrWžQ¼Øgöy•Ñ Ïðëù‚%3yluÖžÔ':iðžê£A ßï‘D˜§Tȶ†N[²«kEQ-èç²ëG3²š¬t¢6›,F¬#‡"e£ùàñ¡é xòe›Ã.]gušJñì‰0W7dÈ¢f>ùîŸÌ¥7ìYݳW%¡¢¢Ì P~[L’wÿÀÎH# þ7Z[–Z¹›? Ód–!à€|}7->^ËbØOá·n¤IA …Êj¿™#J=OÝ_tf²ÕÀhˆµòx›½Ñº(c·’ iÃ@{²yÎk»:ÌêÞCôTtstÎoµ3mò‘}°Þ¢8«ºXªÎÙ”úl«“uE|ݶÓTõB&à‘N¦N’¯Ü£þÉä:1ûZ¶„¾.¦‹ 2qôýáG#õ±Õõ cÛÁ_3B¬ Cd”¯‡?G M ”Ƈ‰`Ùnæ²höpWŠð#C5D hõMõåúïVUM;Ãâd‘SDºÓ¡S Oq„4¬æÅí~Ô%„Â,qûÌ0•¾øßEðµvšâ¨j$&Cïå ¶h¿<¼|V?ôaÿ°Òÿw;Z ¼M4²²©ÿ:p™zÛž_€ì.8Îø[o:›å÷· Ù@?Äðl^ÃkŒÃuÜ@A-„¨›FtŸú6Õ`ò“§Î;¬V©bΔ5.äºa0i|sâtµ4±ãm ¤9Îê¤üó}`jÿ$X¯¿i³8ŠšñTÊ Ä>w™›Ìè²¼.dz잀øb _߇—RûÖ¼‚l¬VÈj8UsY‘”EOàjЯö‰²Lµåc—oºªSc7\ÿað´Üág«28«"ÝJƒEæ¥{ÏêmÓ°[}ìvyøb ŒÚä#ºùøºOUË´Íb&¤=Tì§&çó;uT“~Û_—Ï_.ÓݹY‰ t—mô$MTøçqÊ©¿RøKñõ·—¿¼ü"ÝÉÚSÏ6nË®LýO»=¯v—êØm"¥ÑÚ&È>©ýH9<¿èWC¾Þ)›AÁ€s²£¾E~Ýò‘éšcȽüíª$™uñ²[;lSCm÷‚Y³Bɹ†8q>óÖùÀJQ ¸lIÂAÕ=½\ãÀãwÈMIî¶ò·%`›Œø­‚ó_ïïwÊØ?¿20tÊ@Uiœ']z 3rÔˆ«V{³Û u,Û@QøÕ¦AO^¦ TñÚo°¿þ ÛØ]'PG£w¼õy·9R[”4¶)|Ûf£F„¦È.R­/Ž'oöbÆÓ¶…¶?}¬GtÄM“o~}’:|n½W/ò²ë¼g¸ìzhwS‡ö°0«ðjožüã+¿Âè©Ú•Of-½O_õEú“È#UI/®º¾zWðuÐM_F°M¥ïx±4ìœb’±ç/(Ès2’U0Û>)ÿbésßɇ é>k,&O§æýÔ’‘î—mêGçàþmyü[™„äè¾Þcï„ÐZ¸ynNN0­¿ÄšŽаés.mұsŽ›!^V;§[Rgé¬ ·ìÛiìgæ˜ð'7ƒ]™T9­…YoörWJi’íS•ñ ¥± ò»Ã\šÍ '-éì]¨µ=ÞÄÔr`¸aF5ø_°MšÅØïkќޜ¼qí…n¶òd³~*þ,L^FàðeìŽÙ{TòB»*•Bêêø¯¡S$;\%™ƒ”½M/É륫¿å»^Ô–›BÔ´\`Z“»°Úv4ŠÑëª×\Çf‚¢ÁɺHúË?))Nê“IúçßžweÑp]ÊmŒjºkyß­/l?Äþ8ȼýŒ¾–¶½ÎíÙÒá½~žçKt8˜CÕ½-ÈÏïwv¹< žˆ»onD1]~=.«1Mó ‘g½wÉt|P–G¨ÄF TOåA×n~òòÊ ¶‘'ÏŠ?â³}ž®õE”û:³á„®W#™ÿÄ,[xS¥Üœ:›àæw¯‡Þç÷Y…NÊGœVn»)…§®h¤ˆ*2ÄKжßé¦p{·BX7.¨6 éb¢kvºÉó·&fG)ßG¿:ÔNõ|a ׿_Nf· ´é?Æ:Ô³ª›rj7ˆZwK ([s‚qæu ^iÝje!a`”åy£Q¼«fy,šT Ö¯“Ãm»À‡3öa¨Kj•bö—d.q‡N´¬J0àšºŠ¼«F¢*¡íSœ&ß×Ó½0¶m4­-üxËGI>ÔIƒC²vÐe*´[q†A™a±vW÷ç³ü zeUÅ–xœ!rO(íÑ%¿E]H/è°©ÇѦ++_ó´>ÿj3¾úºÚoØ>íZA¶´³ae_´Õ“ISãgÞ(íªô ]¯€bƒ„ƒÒÝo“÷)øxÑûéHÝðpKŠFä ƒa>·¥b[\—Èfýö£ÄZïúR>¨-ï,ƒjfiðÿ<ã»1¼^®Ó .Zõtüà©GñD4ièß“²î²9Ë ?5夙#až­ GeŽÑ,XJ®¤a@µµ†R(:”•í;@ʳÀÕÛ/?"rsy°ÚcÐö&Ÿ#ï`‹4ÆGÞ‡ÌíÝ%nP!jw¦×i”-ÿ2s7Ns»À3„\·×w8#àÚÜÉÊ€„õë&&bô`+|üÇòe^ɾÅM­XM6c«¶Xï­ºˆîÎþ²þ†zMÎL¿ñYMÇhÛõS`Ê¡Üp 7³9š8˜šgZèW·yþlã÷o¥vÔp¶(ó¼é·K ª’³°¿;Œ­›BQÓËò)ªöïèWj§‹Î=<¦ë÷¿k¸ÀMkú.ÊêMn]¿÷Ô¾Aço)dûîÅè`±¼¼öe¦®ŽYØ@·6´Ä¿XµÇ4¸0õÜ;xcKÛë³×`F\]Oê×4²yÞvS?9n@’¬¨µsK™çËc 4Ðn* 1Ð6H9ÂD#p§°7‘À‘¾oâCYz!2í¼<†ÇŠtÓM½™srœ€RŸo0¿jz@I§T¯[%ùĺ}9‘Ëâ9MHërѶd`æñ(uå«YÉéõ Ñ•üi1Bç3Š jp¶ÉV èƒ"üo¿×ðãgWSÝÁ¼ÿÙñã4|Á{†\‘øªÿÿTM"„Mü®½Úen²MS8ŠGLpÌò¸ n5ž1p´¬=ïë„à& XŸ¼ …×e—C;¡,¯Ë†g®Õ.{!îÑQ?Ü–¶<ltŸV õbÖÁðîè¢ì‰pãéü’±™¨’ãWFç' ØnkÿßÄseô¸ºw¬­ˆðW­q-y좪=mûk(vÍÖZÃ@­ QJ­ Ö@Tš¶¡²©SäὉÈ®’4oQ”k<>m^SÉhE¬naœC¡NE¢|ÛhÛGï‚ûëÞ§æ“úuîÂvàå=³›¢f_â-0nÓ;p¥JExV/váÞΪëöÄúC ŸÂ²Ýæ~Üî䈓×÷ý×WMOmð·#·³ã³ûÛbÝæ'·;h‰y;òó'×ÖOÛÿ¬“9'Rü—_¸X6¾iÜ&+JÔ·cð|Õ‡õá%|·Ë†ŽT¬Ø¨±ÜÎÌ"UÞ°;"û…ROx6‘ìYQ¯w£$úįuÅz¶ÃíPÁo»Y*…[F®÷,/°ÚG³¶’vI™™+Ÿåø²3}h£ãô[ö…=Ñ‹Ïõ;ypÓàé[âÆ¾Ÿ´Žœ‡C1;lÓ-÷q?¾·=¾ÂÜåaMRÔ@)ãáŽ` ZQ‡#äàT`ÖÞèî…LPåŠæ]t¼å å@í^f×®‰£&=³æYßH bYÉæPœ}Ü;ÜgßÝ÷KgèÆWò´¥~Ý~5þ/ [¥†“ü 7·mœ»iÁ‡hoê=o¢ŽÏËe+vÑØ·™IÖjŒäu7Y[°ì²ònÒ™Í& 1<„Ýë’ÀåÇb}2½ú¤ïÏÓ««% hŒVçæÏ|˜mè´“M [ùô"¿ Q”Z0ÏëYCMª¹>NÁÔn.ÿ¶-Q»óÔÁÙz‘ 5›Á|­ý«¢_¬9mÈ¡ÌÄaý]´1ÇdÞ÷­ši»’uø'pR1¸&îõQ¼m°Y¸™t-˜´ Æ®F»Ñ¬F/¶w=LlÅŸ=DÖGw†˜OÍÎ÷„¢4D!&-¡!$@ÓbTjœ!v3× ÷ÏöDy}Úé8Zž¥[Ãh²<½Q¶’eõPvSc/™Z™£Õ0ø¢Ø•‘OoßO/1’…ÇÇÆ£•VÅÿ´O;i°ÇÙh" grôWõ~4f²›?,_¦*ÞCUÿ6¾.Ÿ÷Fã8&«qBZF#P=Ãoâñówo&pÓ=îlÃáÑð6é9ëq¬VOLe)— {cå~HúÀóŽñ2;VË'ÿj¬o/Ç~.å ¶ä:ô)Ê—)ß7MsæÑiS¬_9ã#®¥øÂ±w¬5ñ0¶Aæ13±gb—j:ÈÌ@Z¤ÏsHlôñO hÇßV«|çÍöÑ~e®ò`›S^Ëí›ýš_Ô~¼e !Q•Ä'ñWoÇäräϪ@·ÜSœ+‹‰.vjäT¨9ˆ…JN:¥’æ*Õ}uÖ7ËUÖÔíêb4>q¬1ßí~‚…ˆO/À._ÔmèÊþÉj3²z÷ÝQZlÞE¿®º»V Ÿ_t.ÐÏóµc K­óýþ}µÃèw#ÏÆzGŽ×€í]](ËŽA½$Ï)Ýk¶â¡²½¨+ ½_=èi±€geßæxŠw18úX†åô4ÖÙŽžG^€µÍ×É8³?Ká7âËdk,¯:Ãkôß\¿µÓ ®xAö][NìI²wÝ´ ¢Æ®Ï•Kö¼ÁŽÑ~ž(5t\æ;Í„JÕ¹Oy÷:|U#æ³¹v³šÐ¦Å¿¬Ã“tKâ·Ê=é°ÀEéáWxài|›Õ1ù6è¤IP,šÀR€`üÝ?å4xiÛ <å+´4°õÚf"`.é€7ÈpˆRw®eËN¢ÜûKÕÖ»ý‚Vëïö_×CøÉ/rðæ)k3ÿ‹}•¸Ÿ;šÞ%Èê×gÈ÷5ÝŠÙ]:mðÿøà¸#»?e‡|]_ÌaâêüvtÒå½—¢fô|Ôýjþ*/ÙVCÕ·°ô}¤4x³jAì“Á~CEó6vÕØ@e§¡FPÖX!È÷ ¯ô®› CìqRZqÓ|¬AÙ¥;Ûòû›2ÿàälиâî£Þš>¬`\v{ï{¿ßžœtËÝjwÜß—ÿƒ½t^%ʾZï ïÞ]>ã p§7óUç„Ó[:«J/'~½¼ SãN&RfÀð&ª‚r3órv×MèËîÛûþˆÆ’ìò¼%)—^?™µê…èžÁ³ÝßW¥û½‹­ù@l^Xµ,ß&ÚB©G±ËÜ£fá_,§×tËm§àHcÜÿ´(n®†-yËÆ€½4–±ã—½ÛÝZõŽ!õÉéÿÅÛ]V Ÿ`Pãˆ?ú·?3—v«ÉKûct? #[[µ¨«8éfd99W÷N‰‹ó‘SK4ÐV"”B†±B€€ø¢©4Ü¥¶ÀCâ&í<¦°hÿÝ—7“‹´³KY¨t?pÒ‡èúœ ü¡j»Q‡_'z3³c°7Ü m’¼gUãåù€{óù’ Ý/ Ëªñh §ÂÎÝa½#ëUÚŽ·&†Ú¾Un3ðyWJc#K­”/ÍÐ8¹);>¾§/jS"Yª’EÂ%ø¯×ðèœ&ŸØÃgûÇ}˜IÚ=/ƒuýÅ‘êÞ >ºWm3é=âhË<{R@î©£mÊ\“uhd WÈtÝ ¼Çïè[NÓ90ŧž,›ÉìðEìíE~¯žÐæúr ¿DúDlð/Ja5d›¾sA¦¤ß”pÉONzà g-çOËzP•/>nï;3­Êv›³#Ñè¤7H¶NO² jh”¸jŒH 4 i"šÌ&»ÆiõbÇU5ë6ÃËÿBá³o—`Ô¾W_„ß‚Ž_ ö1‘qÍŠÉ·ýgö+ïÁãz~uþELf%ÙÙ#šyƒÝ,‹v¿ÏS`déÊå+h†.ñ{ÓÓEBh?G ¶§«!v+¹ÞÖV™×mϦVà f=7ß 63ä¶öÏndW„È´õضK öOwGã÷µH-ÜB[Gïc.Ú£‰Ÿ?ÌSkÚ@q0¥÷‚®T«Ì¾lcXTc(p¹žZá7v­í®¬ê¯É1è>ËØãIÓ=YË»=–þý˜ Êùa*iëm«&ø¨{„Go-èØmáR¼x¡ðÿv{ödíÞ²kÙ§çÙ7°îŸÓMQÔÑ‹ù÷÷õì©xwîâ:úÀ|fyð™Kú‡Â¤.Ï=ß *ïêñÚÆUœKˆ°]Cð”(³÷x6Õ”–­Ð‡“ý»óêÚ ø•¸·ë¶Û±‹»Ý?®nÎk¿c¢˜Œ”¿NöwO¥mÞ&ž;pníc{kt‚*©VÀva8ÕŒÕÃÀSùhË„sûÈÛVë¡t7©±m͘dƒXÃI zou·t´?­ÿ’jƒ÷²4„KþXþwª\ÿ!)êÈüëi½¼öѪà¶MŒ#X¤çibÉaþ¸„~Þñ¬ë¸âÆ*+¯¬SŒí‚èÒ8½ÓëÕeÀ!„ÈÒû3'¸¡ãïÍP¹.t#CAda./Ú>4aÿÝùA¹´Ç¬Ùá#¸.Mú{ü›&¥ÍC]/f/ïg»•ú‡e>özñIoøqYÌïÖO2Ÿþûë»M.?0Ÿ4 ­Õ“$ì`™–yRµ¯LiÀ¦¢ªŸQ Z[Y¡È¶Çx²A¶DAãÆ¾ýíëîø0XC÷b˜‹óÙä£ñÿòfƒ£§ve_VÎ=™òÅ["Va,œ):kwÍ{kÂÒ°Z&]tä6Ù'ÿ½ýd›‹¾ß%©™ÅëŒ8YØ_¼HíÛFŒÿß‚à«Irã0p4r“gs¸½ÛãIÇP$Š%—^dûÍUöõ»ËUr‘¶hQò…ݽ½Ý ;À Ôíïc6'¦ÙÊ4- ½Íp%E2ª'õT¦¾(§‘j®[SiF€QcöÈî*ÎÁ3=úÄÞÉöÿÉSkÑꌬMôjøVzö}ó¼_9®Ó†½œqÖg£8Îb€©nˆÁ5ûýFâIŠï‘éÐòv•ӫưۘ¥ÿzÉÈçSÿƒH¦äýåe–LûQÖ©Û¼A¥61í•£}°ß©4ÜâÓ?,æBm%DP‡>)ò4m+1?¼Ì«MyY±>lÊ® ³R¿XVLjÅéß&êlý‹É‹G`ŠØH8”µNÓ¢ê~½UvN¶ŒóÏ\…N*…\¹ž}‘Õñs¬ÿ!_©’à‡Bîu• IFA¼MX#Ù®ðÜ%@¸m˜Ù:pÔ¶.ÜϦ°_oÀލ8Š)¬äTrŒ“µ×ö:°¯û*\ÛÆ‰’.ŽG·>uíz/ïË8—§céÛàðŒ Bÿ tÕ‰,¯¸šÑŽàù£ü¯Í™ºÆ)%¯q‰·qnFý´˜î¸‚kä–¢^)7 .…Œ¤Dú¸ÞÊúötŸÈ‘ÀbY,ß]&Éΰ=°t‡W;»QÄ]Ô§¥´(Ì"–Qù¢\ìÇ3ýã«ôÃK÷á1úÊÓz«Ù¯sEÍI^³Ð9å >™Å°áD8óÖLÊK\…{¿DµFª”iÎÌæ‰6~±Èl[¸¬§P?»EEµ°f> –”D·‰Zƒäcw­jt¤ûN# É= ·È|¤#õBtúÓ»¼´ÌàTÙô復<L€MX1òó*•PZŽáðpI¯05jmj[®Ô)BY‹MÐ Ø} ŨÕ¬ž«z?Š-%ú„lg‚6nçB®œÉ›]+pÕâ.U6Õ'ÝQ>µnQq ‡0~=Ôµ¬•¶‚©Û?DÉ3ùov ´ª¸#nÿÏ"Y“áF0iޛŕ *еƒ²²6D‘JTLiT=Ý{Ø–¬,–ÛÃÙ}S×ïu§P"xÂÁ;Äõ²}Õßkbzì[‡Pž˜ùq ˜×éÔeûûïƒðˆ†½ð”ÞZlhF¨jÙH‘5,à¨qU¹[s/ĵSvŽrŽÄ¶ñl– K×I\obmLW5Û¨ìck,Út;{;qVŠjðÊÐy%i+¶F€-G§vBn‡§aÖ²—DÉÑTbÁ:iUã\ Kh„ó|RpeunôV›ê}t;&>Dq»=ûrã¶»,¿Òÿ êrRoUYŸæM´±‹šÅØßýÌ©^‘kòttÈ;·|å¾ùaólâ䮌ÿe-7Úì®™‚5…¼‚v¼ñ™•Š<'Tèí²ÒKݼy=š»ë7{IDAT¿)¨SFmù ¯æ®«»ã†& Ö ´<(»¢KÙrõÌz³ÜTÒQž·±áÅYMoG¡Ï(a CEšv±¨˜›{õ b8¢#ëTGMƒ ­…œTý³‚ˆ¼Îìû›íÀN¾nç²þÉãÀ+Æÿàç²åy¿¸QÛ¹8W3WP 7ð!¼rÅONÇïœóÿ¦ÎöL¿Ë¥ @BNŒ04v¹æ«]jÿh!T’¸ÝSÞÕƒX=gÎ|Yq¨ã‹û¬të"ÏÓ@Óú™ûXÇWnùìô'ÓO8¢øSAP5<6%Kì÷ƒ="ÍH ›³ýÒò«©YÉÈg­[‹¢Up¯RœTȨ¡µÃ)s»»¦íjF3_å ‡D:ÊšŠ„ÁZžÄ»H?-N2[xÏ÷­ú|î‚£1øN&Jw·ßw‰Å\Qó­h<žà-Y•ÈßüÙ V»úâ/ÇŸtoWA/ƒ6®ü°P50n¾&ñÆÓšxLj¬4Òö[ØÂéJ–\Ôx³œ)-SpŽÛ‹OswÎFè~ÒóË<7Ô5 t#®ÊÁ_ ¨¿»!ÎãJ¬;Yœk%ê÷‡òC~0J¼p?uogô'ÊÆPÄ&¨ð©i KŠ¿Z]BïÅ«GÚÄÒ¶„"àL+J©90 fÉI&gk!ÉêÇ ”²}ÖÝÍïÀn•¹Fºƒdx#bI†ƒÎz+ApÞí½wµœ«;[êt»O4«âÔ*Z,5…ª& ŠÀТC~6Öéo¶¯˜k ½D y\ €CÜuî¾eɃ)”Už8"L^)k´K£ç§ó§lÁÉ>â{3±ø/uômsÒV±éôBCÄ'WóüÄÎúŠ¥¥›©ùóšŽ^Š‹ÕÊ¥8y<žÔé.ÁNÔé‡L‹4µO¹P¡ƒ£ïá¤5ÓõÍ.KŽœg­!9EYMûr) J†ÖGê>ÙƒEéšÀGÂ⸦¶kô«­?ÕÔµªÑ¤jy\ì5žÞð@þ̃ ¦06ÛȘì³íÔ§ÌQšÝŽõ9ÕÍa¶-ˆfê¹ZcC7¥(/ ï}ׯˆâÖq6~Ü‚½òUȆr•u]¢ðzòþÁ¡iþìÜ3¸ùå ’´|±ßø=½ Z¿+ÇП0ÿV†ä„%æ3uú ¨¬És‡JŸÂý—rñ¨Ï`zTË‘Š˜|Üã¥+±r¦Q:DýÞÿÞ¤:E¾>éù«Ç¿­8æŸ3ý‘nÄŸÎè¶øáÛ?ZÐó¥ \òî‘3N†‡%d"£m ‘6 Ù8ÅFÄÓö’gM-Óî’ÇýÚ`ÒîJä¨ÜÖØåªE$E?i"}’0²®00¹?N)£Lº,WËäWG’;ði:š=£dŽté—CþYäûR2ë(Ô×H:äÐIlqÒjÃÙ#š:uÈp~tÃep:ÄÇé]+ô¤AëÒŸµböHåü™Toʃ ƒ!…ueU—Aü)Œ¨ )ûPöG.ˆáIü(*Aäõ®˜À²œ••ÚÆ™Ü ýhö¢öG0G< 6žãŠêü¨Ô’ÂÅq´sGµòeær¸WC6› UŠäöªÇJ‰Ãíü)ªˆN›2¿ZÕM%s€ùÚ¦]yf§í½›11ÞŽâ¶ÎèÍIý‘yfü /hƒÙ³½/PEmdEê3Htˆûøš~Ò!ìÙŽ(ÆsŠ×8?Ä:ŒæR0(ö‘g##V©Ñˆ8óú C£Kü.ÖŸ™8^'éQ>ࣙ+*âŒUŸ±\Êb°ÜÿÏý)ó!r²¸TÂÚbäeõïTèïTN§E ÑÌ»‘¨.äË×ñ¬›s ”ydƒíW¹Îây5#»ÃµDNMHýi¤s@ Å9hÅ8 ­LF£š”h@§ )Á@ÇÒ¥QëJéNP< r(4ìr(Fô£œ8£¶iÌÚP£‘JWŽk(¬ëÇáPžÕa—¡ cµÊì:ñïQ`zb¬@# ãŽÔÀ¸þ´Ò ŠiðGZ”SÅ7ùúÐ$äÑŽzSœRªûÐl»°Á#š­ Á9íW€sÖ¨ÊÙ<hÕ<Ô€Î)ˆ HŠY¶šb$EýÞqM*jl `t¤ÛïJã±^)Bf¤ ÏJR¼c4hÍ<œPªIæ¤ÛÚ‹ŽÃ1Í< \ t¤š§¥UÉ©¥pëP•ÃqV}3QÍ*¯§ZLâŠæeÁ¦€IëÅ<ôëLç‘@>3N)Ú–2JóNnqH¼°{Q³¥KÅ! ¶ tæ—n)ûsHËÆ9 ØsïQ·© O¥4‚9‹…†ç¥CÐT`eªU硌^¦œ«Ó4¡@<Ó•piÒ š]Ÿ;aéNÚAÍ #Å4Œž=*`8Í4¯˜Â~0x¥#ž´£Þ‹€˜ÉÍ 84½3JE8)§¯åÉš@r(‡“J Å;i©~œR `TerjÀRA&šTõ cqOÛÅ(Z“o^i6çš™—Š6ç‹-3o5>Ði¸ù°hÕÒŸ´õ§ª gÞœWÓ¥ S‚sI´€OZ”­ S@íéK·§­<®;Rý(zÓÈÇ=évŽ)qŸ¥ ±8nœSÁÏj níO ÍDÊ2zNƒžµ#/j=äœãÚÂÃqÀî= &òRí#”¥2}(¸¬3`=‡¥FU@íÅNšW#E+…ŒÓkæÍ•È¢¦[VŒ Ç°Ô 9Î8¥ ƒïR*ð9 -`ð*]£n{Q·94€„dw§)§~4à½é@ ëM#-ÇJyáM ãµ ¸8=*@ ÇëR®1ƒ@ÑÒO4¤v§:Òmœæ€+·)U{š ÏãKJ €/øÒ2ô©QN(#µ!ÀÅ!^çµO·éÒ˜ÀãšEŒ‚)vôÇZp^þµ" Îh›=)TqÈ©f‚˜ c 2OaNÛ‘Kø r¯^h= äâšž*v^•'“@­)>ôà9ëNQ¸± ñ†ÁRqÏ6p06ŽED8Ç4ÿRÇ~iÄdç­ eÀÎ2{S1øÔû}O2çŸZb±X)ûÝ» @§®8íOpÈ8¦©vz6dp(ŒÔŠ=iÀ{â€"ÙëHW‘èjÆÚŒŒãÅEjœçõ©ç§4c§ ·Àã¥8ÒªóÚ€ØÒÐôÍ<Š0( JëNAÍ+Ú€G^)Ã!†E"Œ¶*WNr)€Üô§è{Ñ·¥9G<‘Ò€{S°3Èâ•W'Ú°ç¶(2»[ u¥ÈþíJëÀ Ó6ûÐ!»y£¥#š°ÙÇQTÀ¬à梓žý*W$nõÅB­žz@FË“Áæ˜Wžµ9¿¥F@=©ÓϸÎjfQɦ?`(ÐF3N€8©AÁþtÀ‰²xïô¬‹‰Mm0ýଫ|âqÖœE-†Ä8éVÓ…õ^ÉÍ\Eâ›C Š8*"†_›üip1ŠW€€:ʘvúÔ€*28 «¨õ¥rÀšŠXñV ~ô`úäTÃJÒ¬c )ô¥p ƒÓõ¦³Œô«AÒÄ¥³ŠC)ž‡Šr¯Ê2¸5i”c¥0 ÕUº)HÎFÞ>´îž8à C"#Ñzúš~ßQíOÚ;v§lùz}h¸…;»`ô©‚îÒªñÀÍ< +Í "|tÀ¦¨s·õ©ÊqÐÒl` ŒOÝ4»—û¦”¡IÞ€ Œ–£`¸ÎÒj@ <Ò°ãPuw+S CÕM"Ç’x«* ‘ÓÒ†16¡õ¦–QÆ H‘JcpsH•Cãð©ÅJ‘äqON( F6ç#ƒQÀ«%zÅFËϾµ íô¤krø=qý+.ë‰pMjã2cž†²ïïŽiÇqËa n*êŒUKaÞ¬± ¤–ÚêMS$VPÇ­FÈG äSå¹ÇïS=ùÍÚ¸y÷OøQf+¡Ü‘À£cTgP¶9lºiŸÚ¶ùÈYÑi¨±s"ìk´b¦ VgöͺýØä'߃­.>[wüN(åaÎ0 u¥*ëYŸÛXñîÿëRl±ùÿõ¨äaÎnëKƒšÃþט“þŒß™ÿ •uiŽÙûdÿ….F>dkÞ™Ž3Y‡V¸à ‰ÿ ©txôÿ…>F.tiízÓ‡³F£xGüƒäüøS†¥{›L“øRåcçFŽ;ö¥ ÏZÎþѼ=4ÙçþŸÚ¿Ã§Éÿ|9s£Qš˜.xéXãR¾6FÙÒý±r>þ(ÿ€±þ”r1ó£X¨ÁñHcÍeÿlÊTÿ KõÃý–“ûqñƒdíéK’B牦ã#5Q޵žuÁÔÛãþÚgúRmÆzÃù1ÿâhäùâh¯4­¹Ï>Õ—ý¹ê¯ÿZœ5¨Éæ#Ÿ]ÿýj|Œ9âjF¸ç½N0§¥bÿn ÿ– ƒèÿýjkñdæÝÇüRäsÄÙQø{S¸éXëânž[ƒøT‡^¶aK’]ƒÁ28§qïYK¯Z©7Oñ§oØÿyÁô8ÿ9%Ø|ñîhɨۯ<ÕOí»ãÍ#þLþ×±ëç1ÿ€7øQË.ÁÌ»—pëI·Œ÷ª¿Ú¶mœHsÿ\Ûü(þÒ´ ÄÄÿÀü(³ì;¢b?Z‘#*¨¾·cþ°Ÿª7øTé{jÍ2/ûÇΕ˜]?:'éQý²Õ¾íÄ_÷Ø¥ûDÿ­CôaF£ïF ÆE"HŒOï÷ªmñ…8eüè1×­7#qçÓédŒgÓp¦)FlSÇ­LÊ3×®iÀt¨€ç¯áš•Aé·J@?sHzP28#½;ƒÚ‚úsS(ܹ'ŸJ—ŒŠr’:sŠ”œΚFЧì !޹>ÔÖ>ø¥Úx¥ÛŒä àç¥(C»ØSÊó»µ?*®AâÈynFh`r?¥IÓ€8 DasøÐF*QÈéA^x4ÀEd\ {Ò¨$`Qœ´†Fã‘WqOžG4ÕÁê9 CD6GsÍ?i¶i@*Àix-ך\dd;Q·æëJØQœàw¥ïÓŒPriXô©qéšMÅNé@ ÙÎ9ïP¸Îú Ë3 ÔOM0#9qíRèO\R@éO¦{÷  î £“‘N<Ƙ¬$ ‚1œRLw3œS6«Œ8äTÒ'¡Á¦ªñÚ˜¬Q¯ð¨'“NP¸#aN ód÷¥ÂŒŒP¼±Œg?…4F…ð HÇåRýܹõ _9o›ÛšqÉÀ* µ(ä’xô¤_™ˆÇ4Ä £8<ã­H.84¡xÎ*@¼½;€ô”ªwõ¦÷ÎÇzyuôrÆ™üjCíúTkÆ8©ƒ‚{ÐLcw')}ÿ:0#Óê(Ýì(U²A ŒûÕyq€3R+’ÄϨ¦Ü`.@&¢·VcøT2à*° $T2 ŒuJˆcõ¦¼€=éPa±Ú—tÆhQέ  ž3œT„x=hÆI=(_/^iá~”­ò©;sëŠ~1ÔP4DçcÛits9­yøõ/3–§ ÂDöËòÓ5ÑØçŒw÷©í×å*-H H}ÇóKr%±¶ŸhÖÑË*õ@I.iÆ -zØûjI2º*‘‘ûµŸ¥S¶°ŠHÜ1,3ËðªZêÙM,oÓ£1'ýû?áJ·zr„Aô@)œ ÷b_Ïÿ­Oû,'“yìÿõ¨Ð5j–I€ ñè¢ý¯l9 /à™¨þÍyŠ?sƒþñ KÑò4h=E:ݨ‰GÕ(þÛµ*p$?€ÿo—î£ýÏñ§¡ûÁ™Ú«E¢ Èoö½ +!ϰãõ§ jÏ…ËþŸã@‘£¼Gõ§l‰sˆÑ}@UÇò¥hör ›\· ÀvüøÕc­/™¸­4Qqò;eF?.?• j€çn? éOÝì+ÈXüAm°nI=?þSü~•:¢íÀÏüÿ€?ΞvÀ>…yþ¦—»Ø/"¸ñ ®q²_ÈqúÒ¯ˆ,ó÷d8úZ €@>¸äæ•!X‰Ãª}HúŸåG»Øw‘ñ™Û7·üißðY¶£Ü/øÓ¼ˆ€ŒcÙp?§ kr Ä}Ù?Ïó¥î…ä7ûvÀõŸ¨ÿ?·-=Xý ŸëIå[Ž‘DNŠÆ›öH&þ¥úÃùДBòý·f¼àP?ÆœšÅ£tcƒéñ¨M±0Eù/?ÎìëR?ãÒ3Ÿöô_ëE¢‘9Õ¬”dÈÀºh]kOÛþ¸õé°Ô aoEª{Áþt>ßvM¿ãÏøÑh…äY]gO ”ÿß þ(ÕlOIO?ôͿ© 6×§ÙºúÖ”i–]ÐmäìÔ­ÞEá¨Ø–‘Hõd?áOûf›Že·Ï¸Et{yFzv—5 ЭÙÇ=ØéG»Ü~÷bêɦ7Úû®i :{!¶#{ Šª4 AÎ%Ž.)ÃÖäü³Î£¯Qþ½Þá¯bרlŒ[@~Š)­¦Yôû2ãØbªŸ@O})‡@x[©ÕTѧp×±déVDóþ<ßãJ4KçÈ?÷ÛTþÁ|ñ¨ºÿÀGøÒ®‹x¿wS#ë?ÖŸÌ_öédè:yÿ–Mÿ}·øÓá²ì®>Qb_7?ÚAýsÇò4cjKÓP?÷ÓëEÿ¼;tyðý¦xyÇÑ¿úÔÓáè ââé~Ž?“û3UÆî~²8 iš¨?ñ÷ÿ‘ž‹¿æ—`>‡?ñõqŸváH|=?4óưkHß-ìx÷vÿ ¦¹‹¨ÉôÏÿZ‹¿æ ; oDÇ?h”lR'†ãÿH ¦˜|B§‰ð+ýE8.¼‡¨?÷Å;Ëù…eØwü#‘ò~Ðàý(Ð]H>€ÿCNó5à9‰O¸d O­)ù­³øéJòî?w±ö-Æ~[÷ÀõÝÿÅRó¶¢ãéŸñ¥ûn°¯Ÿ±ÿlÚ“ûWTîÓÛ>Ñ7øÓ÷ƒÝh·ã¦¦çê[üiãJÕ ùÈÃ4ѫ߃óiòþ½Hº½æyÓäóÉ…/|=ѧMÕT.ÿ¶ÏþÓe¬©ÈºPG?ÌT§ZºRsbÿŽEÛÒ7Ùc?ôÓÿ­G¼ïr']ýv¥ ®•$ýDu(ñóºÛð?þµ/ü$P.7Bß÷×ÿZ{°{½Æ#kè1ä£g¦vCNzð<ÚEÓ®?ÁªAâ;Sÿ,¤ü8xŠÐŸ¹(áÆ‹>ÁuÜ‹íšÒãuœ\ú+3íúÀÉ{ÙÕ£¯Yp~įøÐ5ëÆö—øÑgü¡§óF«¨rZÄñé Òfû<éíÿ|¸þ•qu«¼Êß÷Éþ”æÖ´þ†~?ë›…/ût2ˆ×/1Ξÿ\7øS¿·§ÛóYcýé6ÿ1W“WÓú ¸÷¿Âžº•™Æ&ïÐ#…/ût5þc)¼BÀœÚ/ôØé@ñ@ÿEë0ÿ ×kë?ùî£ê¡ol†ÝÂ=‹àÑuü¡¯s)|D¹Ã[sê%áNÿ„ŽÜ|Æ > Ö¨ºµ<ý¦ŸI8KlÄ:éóE×aëÜË_Ú“ÄŸ¢ƒN ¶Ç0\óþÇÿ^´Ymw}¨­‹ˆ-¿ï•¥xö{¹HkÖÀœÇ8ÿ€ñ§oYääKÿ|ñ«†ÆÄŒ›[ûö?ÂìÛsöH?ïÁi”λcŒ—aõZ¹§7>yÿ¾øU§Ó,Ë/ú$#Ûm3û&Ä“›XÏáJðxŒjÖî7ú«éR.©`F>Õ=7sL}Ncÿ£xb?­3ûLc‘nAö‘¿ÆsÌ=òí !ÿ/qßT}¾È ý¢!ÿ_û ÏÔ{6žiƒAµÚCI+(9 ÇéE ‘dêMœ\ÄGû¡…™l âüXTm¡Zú¸Ç²éH4;]¿z@~‹þýÐ÷‰¾Ûkøù‹'ý±@¿¶V¹‹Ü*3 ÛàfY·Ê?¥@t;vs‰%üÆ•/w¸^Eï¶Z±é0ßcš“í¶œ¤Ãÿ}Š º¹ëçê¿áAÐmÆ14Üzíÿ ~ïp¼» q‰¢?ð1Í=™7¥sõ¬ñáèXqq0Ï _ð¤>‡§Ú$ý(÷{Šòìk«ü=jUÝÔ=ë þÓÿ,®ÙH=ÃñTá \àâüÿß-þ4íâ»ìm`‡éÁ柗œÖÐïTn]EÁaJºV©—Snz|íN˸s>Æêã®iØõÍ`¦Ÿªc-¨úaS-¦°9[¨Î=XÿQG*îÞFàɸúV*C®—ÇÛ ö+ŸéRù:¿üýÁÿ|ÿõ¨åó?÷$–©£\§LÐ"RNpGqRmTè* ¥vç P¾I9ªÊ€Až;Ô.NE0+²áx¦œåR²ázöÉ\dR¬”88¥ “Öƒžrh"¼?ZR¸Ò•‡Ó¥(\¯•.FAÀíXø>iúÖÝÙ*§×‘Œ?ÔÕGaH¹ ü¾•_S8ÓäϨþun0 Uueÿ‰lž¤¯ó§ˆ‰l%À#Dv'ô¦Úmû¹èøS‚¼gèsähƒ©Â>}ŽqNîA»#>¹Ïò4ì.0Jd{ˆ§®Üõ\{þ4\,A$eTÜ??ž*¹|¸)9ö­™å#>‹þ P4,§›>ùÿ>68–û¿úÔÙ›Øâã?¨©B·BÜãÿûTÇ‹xã8ÿgŸä?­ +Ã!b@úåçVáUÝÂþ ÿCPù+a‘ëêM9\{ó<A@®0ØÜõÇò©S'…# ÿ/þ±ªÑ’$`èx?¨þµh.3•´sXV¹Š-­Xóoûƒ·ùúŽô6ŸhÊsm ã?pd~Ÿ¯JÐkL6õ|y¢0Ø,@=3þ«˜V)gÚä/Ù#íü?çüæ°Yž ´|œp?Ï?çycu'ßçúSï÷Ïp9>ßç4ù˜¹JM¥Y !C“ê/óúTM£Ø6ËÈÿ|ÿù÷­.F0ßSóþ{ŠC‡ç# däàÿŸóÍ>f.Te¾gƒû£Žÿ;ˆÿ>´ÆÒ,°~G_\HF?Ïù¨ÊA$ 0êÆ?—ôüi ü¸î;úŸóš|ϸ¹Wc,höÙ <êOŸüÏÒ¢—HDÁÆN[<~_¯ó­|d0< qÇôÿ>”‡rŽFW9ú{õýAü{SæbqF ±Pn&n;ÿžÏ¥0ØÅŸšáùé€9ükx¤lÈ=ÏOóøñìj»Û'ððxàpGùÿ"«œ\¦1³Œp³8Áùƒ/OJh†E`r9 |£¯ùôÍj›p7Nœúé¦Ä¢ÙÁ?þ¿þ±üió¡r³7ý#ßAäm‘¤ÿI&á€'?.y«om SÁcÀ9íþ¥#Âç9‘Ï¿^3ô§q4U&ã%VæRG\1ÏJz½ÊEäÜýßœœûuþ´’!ݼN˜ôçúMVcœdñבøõÅ1j'±‘¿Éýhºˆ;’çp÷cÏ·ãMUÉ=Ù¹õäzã?®)åƒ)NÞyüÿJZ£¿´5.Ú8$ޏ{âšo¯Ä¸óóÏ^zý1šBQœ•à1 ‘ÈÉÿ>¦¡9uh“¯§^µEÌ£ H'åŸËƒþèÊ“F !›Ã?äÒå]…v]]bùFá27;y*A­ê* ~P•g<¾§ïŽr©þB—qýçåŠ|«°]÷4[_¿Š!‘ÝOøÒ¦»v#ÁŠ3Ø\‘ÿVr°Â3Ê[1õî)ùSŒ37Ž.´ùcØ9ŸsDx†Rr`R~˜þµ2kӰȲnºßýjÍÙƒ• ‚3÷OO¦qô¥Úos´ý})rG°sHÔ}~HÀ-dËèI8þTÏøI¥ÿŸh¿ï£Y³ ÙA8Ï¥CöE±i¡ךiÚNïOJ“ ŒŽi˜Âr:õ®sr&è@ªç$ŸN¢¬äb¢~¸P2žÝ*r;÷« 0yäÔe@i{æ“#ÜRªäg§JqR:P}TýhŒxzR²€9⟗ƒž(c)^§ÌeºáÿØ»žqÀ¬§\½TE"ÔYÀÅVÖ8ÓŸÔ°éõ«‘}ÑTµŸøñÿ¶‹ýj£ñ"e°·¿.‹×«ý*(qöxàgéî*}LcIéòÔvÁ¼x ÷G@¡ª[÷$~‹ÿÖ'ùPûãÿ­ü©Ç!°ÁŽ¿Ûó&ã¼3é»ü ­€`ûØÿÙ©à÷-ŸÇ§þ=B–Ü9ÿ¼Gõ!cо¹ÇþÍI‚+ÈÈÎà?¦jDPÊ ¯ý“ÿÄÔrbAµŽpxù‡õ&¤@ª¡p§ñ_ð¡Œv<ÃAMhÉ9?¯'ùŸåKJ¨üŽ?!K¿Ã= gÓùRݧ$aúsÁúUF·3zœãž1ý3V÷¨Ž?öZcMÈÀfÀàäÿ>)ê†&"BãóÏÿ_úÖ’øã'ôþF¨y›…ÚqœžI•Mm0(v!bØÎ3õ=?+Ë„Û;Tg¹?Ò—¹9úêj–<…W=’3ùëL3¸ÈÛœp7ÏæiXw,€G cÇýó¤ãƒüEOøVY–>do›;~ïñëúTûîâàñÁ?âh°^à¤á±ôãù)|ÁŸÓŒÿñTÖ#1CŽåš£Úfl*ð8, ãüh°É –e × AþdštMì©x8þB€p>_ÇÌSƒԃÇC´ÿZ„îì@ǟΤb©r=¿É¦l8Cÿ|ñýiÈ«ÎàüÅ!‹ßîàÿ ?©«!¤î?Ï­Tx÷¹ÈëÊ %T`!Î9Ç?•!ܵ溦â2{ÇéÅ3Ì“¦áQ…ÁíŸ@øþ”ä;N7zÙ,s•Sœþðÿ•fP­ýçPì$nñè¨9cŸ^Gô¢ÃØ´Ò Pw/¯^´Ó"v²ž?½P) 8ûàŸý–ŽO8lôäñþ”¬;ƒJÿ0EúÓVwÈÈðÇøÒ0ÏFë@ˆþ¬~?¥·«)bqŽÔy™ÈUn{í5 ‡/‚sõæ­Éà|þ½!¢¹28Ál}?¥ Þ£†n=yþukË#è|ÿ0qÐsØR¸ [¾ßûê¤F߯?Z“gÒ”Žx]ÂmÂÔDóR¶sÀ¤ 0M <ÓˆÎqKŽéø›!οlÓ‹*‚XñÞžqT/f4?;ªêúÔÖ¢nÄÖSˆ<Óјãéž*ÒàtéUl­šŽ¸'ùš¶ qD·°/Í)éÇjvLR1éJã#ÆáÖ¤P@ç4Ð=ª@ @„ÙÎiN1Öœ 擯NÔ†GÐñÖšê1éô4üã¨üqIü]F(¸˜ ÈÁõÅ5mq÷qާ"§#*0;Ó³ƒœqNâ±IàlýуÎAéùÓE¡P2þý0k@ãâ£o]½©óНnæ0©ÇLŽ:ŠH*¹þö ^#*8ãÐTH¸lÔcó¦›EMŒÍ…ÚØã þ–yž:ã·éSî}ÙßÁþðÎϵ;bžù~µWPÆ@È=¿·ÿ[ó¦Ê£9#‚­‘ŽëƒùÿŸóŠÊ« ž}øÏùõâ‹’@1¼玞ޟçò åyPõõÿ?äÔŒ¨Èþ}¿J­¼öý@<Ÿ©¦+ùOÞR1éÛôþ@Sv†÷Çù÷þ¦¤T%Æd®0?þsû>•Y$ÈèH¢ö F(É8@_n?úÝ>µñE½T''• {úZÔ}*L“æ¨ |§¯ÿª k9Ðóâ9üOZ‡o"ŒÖh¤–Ns’xaõéùÔfÐ×rœàƒÆ}½*ܵI‹"½³ÔþË«2™‘(l’§ŸóÚ…S 8isKb d2>SØô8¿…@À©³3¸Žãÿ­þïéZ’+ ,ޏüþÆ0E†Ãžxýúõ¢‘ŒÂ –vÓŒgõ÷ýj"¥H ªâ#ƒŸ@:{b´ $’b¾¹nN}èû,¥Êˆ·çåé×=ùª¹6(íÁ;—õ{~¥"Ûp¹èN:韮*Ì@-ÈÀÇ·çý*¡¹‡¸#õd{Ó@ô$_¸£åT¶ ÏÙãòëNEPÊÜç’£ü_ËÈÑ@;eýæÉ89ǯò);sÎàúcùs@±:)ù‰àÄÓV?•çqÁæO ©! ‘±pT1R<þ4°ª` üÇœþúÓ€'™FTc«güþTàÁTAÎs¨õÏÖž¨©Éž„õÿ>}ib¼±Xûý(@4O˜¯óüª@£$ärO8ôÿ?¤MÜ’ÍÁ$ž;zŸj™T€7ã‘åþ:Š]›i ’zcþÏ1`úΦ•ˆ2Ä‚Ç9=>SîiÞXõ1fÜ(éQHÛW9ÈÝy¥Ù‚}:ÓñžE$6BÀžµE,š˜ƒŽzSq…Î)@§9¥Â°;HÎ)ØÚO¡41Œ@í'¯Òžª@Æ7¦îô©cç¥+NárO8â³@ù‰$œV­ÎïjÌ#©õæª,$I§üi±¾ó….1×%¿Æ‘~dqWvúàS‘РŸ¨?ÐМŽ2GÔÿ‰¦ñΦr ÿ:•”/p·ù™æÆˆêOOÖ„ÂÃ*O÷Gõ¥†~vàÿ9©ÀóÚäÿÀøÒP§s£þ†‹ŠÄmnXcœä®øS‘’ÇqÉ8#ü)¥‘T±û§ýœúéê¯åü¿)=óý(¸ ó€ =WqÆ=éè¥(QРÏéOà3yúÿJy_›•8®Ì*M"&DpAÁ=ùÛÿÖ¥H#è#$ãŒÐÔ¡[? |w?7øÓˆfSòŸaŒÿJWŠÂÝQ²Ù,œ‚?1SgÌÆTgÔ`ÿ*q"2ÈÏL¿Ö‚w&2‡#ëüÅ ‚§¡÷ЧeGSŸÄŸæ ±@{òŒþFž3À>áOô4†E…,p§+ÿÖ©2pÏ#¨ý•;c‘È~û_ÔFRÎïËÿ± øà¿á¸ëKŒcåÁÇ\`ÿ*0¼`!ÿ¾ÀS¸Æ1ÇOóóP.U¹r}‰Ïô§7¾FGòZp úzþ(Ò¥G99õÿ¤1CÛ2OpÒìÉû§ÿ¦ðíÕN8éŸëN!Œ¢®(`#…ÜuéýM U{ŽGðíÍ) çæaÇ7ÿZœ»?‰³íþ› •YG¹"¥T*FãÁë†&žª„ qéÓࣧéŠM•aQp3ïRAúÓJàtúõ©ÇvÇ­K¤€1HFç𥞠Œ{ÒíõéH#9£o‘ŠyQÆ>”t ÈéQÆ _Äÿ:›çÓÚGLsš.Ü1N8ÿ'Ö¸=h¬IR2W°5ŸöEB$ÎcRK¥­h »A’~•[O‘æ<³·_aþM5¦¢d¶ÑypªäÇâjÒŒ“Öš çƒR¯é B£ ëëA`ô¥ úR•$`Ž”Þ)äã§ZB==iC``*Ö…gšL’xm­·=N«K±B´xˆä2¯{þ=i«"6œð1…útëQ¹ÁðÞ£žŸùéN‰`Û„c‚ùÿ ÕÔ†@P‚*8'?‡ùüê% yŠ uQÀýjËchbý>^XôÀÏýo©]Ëó°9Ü q×ü?Î*–¢zæa&Ò^2;zÿ‡½ P ð8#úŸð…@ÌXnàÁÿ?LN ç€Ny 3ž?/Ì¥Yb€‡§<œ€OoQ߀)»Ø„váœäïÆ>``À“žTŸËŸÓšF!<·cÈ8çëþÀ<˜`n;pßÌSÙYXgû Œ¦qŸ¦úô«€&P3óduöÁ84m_(ÀFIíßµ*® {ÿ…? H”`ŽcþÏÖ”m Æâ Á8út©W,zöìyúŸOóÞ˜ XÛ+ÛŒsõ>Ÿ§ëOF ÷HÔ¼ãðÿë}z¤Š·í?ß×ÿ®¡:ð1×y?ãþ?Ò‹€“Ð/ûàgóãò´ß<‘M˜m1ðs¿?CùÕn=èb;Ã…j']˸sÅJÝi¤2ÿZ¹N¢ Ø#ñ”ÓÏÓ¯+ À7è*&8'Ó­!‘¸cÂ?CÒ¤VÉ>Æ‚7s@ è1×Ò¢bÜqéSÖš~R{ƒÍ nGAÍ9rúS„ã§õ©QqøÒ*\ýóÇPk;µ¥sÀÃ$Õ• O_ ÿAKçsÕŠuúÿŸÆ‹…ˆT² ²¸ìÍNåß>^þõ0·V^"PAÁýzŒ[.H¯ÿZ.˜j†nRpp£Ó8þ”¦@xÝíÕiÑ@yßM¹æœ *pe?î³…ƒÛyRGéMû¹¹üƬ"ˆ ÙIbJŒ*±?tœuÿ&‹ŒTèIÈœšxï´téPù œG°ŒSâ×9ÆO¹À¤2P›{®jAÐg9¦ùn1†ÿŸz‘SŒjF%8/z]§ž«h¡{äRã×¥8¨Î28£¾=©p§§4¹äsOÀ L#…7RÆ*@  ¦”€8¦}ùÛo·Ÿ˜àãÓ©©íc1ZD¬~m¹orzÕkœÏ} ;¸$ë +Híž‚©è¬JÜf=*]Ÿ)¦÷ã¿zUÎpOåPP…q×­)Æ3Ås7zãÏ;Ç †4ƒ‚Üã?Ϊ1rØ™I-ι9Íe^jÒÆæ;8Ö@:ÈÄãðÇZ£s-Ü‘²4ì`d ÉžOÐþ)mDÅ‹BªPa¹'§ =½ÓÞ­BÚ²\ºê·­)¤äqާqLƒ[¿´ •ó¹^0N3ÁT÷¶Ÿn´K ¤ào'ÏëTo"¸ˆcŠ%Xˆf!GÌ1×óëžj×+ÒÄ6ÑÓÛ]Au rÅ"•qÇ׸©ÆÚ¹¯ß"Ï42ðd}Ñ€:9ʺ… Tó×§ŒãÊìkt5”nžž†‘XàšV^;dUxÕãRŒxƒŒ’;Ra¾§•*O='U~tñ‘@À’ëH8=:Sû~4’8DÎ{qßš@Wi–’碊ŠMÇ,øÏ§`jª®\+nêXõ¿_ÏÞžšL7-NÏåWk ÷ ’:gŽ˜Ïùüª" /N§–GéR å¹ï·°ü1þÇ,üàÛå'üGê)¢YlfÜJq×;IŸøR§˜ê7“·?*õ8ÿ"”í‘YK66Hÿb˜ 6òÌP¦3‘Û?çüô`Nß(< ñ‘þ•"¤î;Iç,qýAýM'eÃcû¸'ü‘5›±XŸ9û½¾¾¿ˆ¦+މP€/MÅ~cùôúdS<½ˆ»×aì#?Ÿñ´ ¶I¯ëþ"šKo-…@N:㗀؎hØÄ[-õ ¡ª[÷8·ÞÉ;˜ãçþzV“ïáâÎ>R ·?—øU@€cwÌyÃ1ÈêqŠi‰­H’M€¶âFbsMÈG”±€;Žqÿש r cŒpAü0ÏÖ‘Š•ùØœ ñúiˆ§vã{HÈÆÑÇÓ¿ùæ«\È9b³ð{ûÿŽjäŠQ÷½»ŸRO?çñ¬Œ³319~I’}ǯផQ%Ürî-òŒIŽAŸ®9ÇçøQ€€Œüà“ÀÓê?•7ÌÜ6¸ì¾zv?‡'Òž¸9 Fî‡QÏLþœàU’8%#}ßtŒç>ÝÐFÕaÎU°ðGüõúS•@e@ BÄíç¿9¥*<¬p©»ù¿#Ô~9‘‚°î>¼ŸJO7nº2~f¤eæÀŽ£oˆÅÔ˜ÑRï9w'5FlqŠ»tq&3YìI|qÖª!"ìäíYºÿÝ´rd#ôÿëÖ¥¶c®+7_#ušìÜþ´‡ÄDþþ û>ïóØsù •°l@ÀR¸ #§~åúôí§OÐñ&žXu积ÿeM2)?0SÿôÉ¢ãË  ú†Ïô¤³‚ß©ÿ1¸ˆÃè¼Ó‰ rvõ=Q³ŸÈP AÓ!±Ûïcÿf¤ÜÎ~¿ý•9‹‚Xd è ‘H ¹”ã=Ã…!‰½A8{dÿìÕÚ"lb Ž¹Ã&ÐåÏ|yÿÇk)1ó'9ÆÓÀüª’¹-›_¼X™¶í¦ ÇøSïî\uÃt/ ¶Œ;|ÁFI` 8§ Ëm8èO?©â¤cB´j]àgúÑÄnñÈýêÔ¿.Á·púdLR18làû–Z.£É]ª½pwõ©FX•7¡&0#îÀÇ98ý*E`‡RÇ<`ÿU&£9RpWià Ü~¼S‚ƒ¸ z <ýGļÁ˜Ãz¡Áú{Õ„À@ÀÄsœǽ&RÔŒŽ;㨧0Rß(Î~¤S@epH.s׸ü…*¨’BŒá9ýi hRª…qØ•ãR" ¼?*@@AÁ>‘)øÇR)\„Ÿï{õýiUœ÷9©Á´ nÜdÇ­!L.1Rª ç'ñ4a”œƒH€oj ÷ì`^ô…~n‚€°ƒ<ç’)áw! ž´ÒÞ:Sðyô†…}Ć$w§õÇq@à)~aІQLN?Z—Ó¨¦•äzPÉÍ#ŠÌqÀ§ô~¿VÔ\$Ac–Ç÷GZkQ2µ‚´·rÌßÀ¸Väþ˜­™à“ÍUÒ£o±,÷å&Cž8=?LUÜuð¢OP['^ÔŒ1Î3N'òõÍ7>üR…¯]M E !öãs”ëŒàV=œJð±`}Œpùüq»Ðêq‡™~`®Ìä{ãõ¬›)"·E(¢$ü£ýg¹ô#¼_»¡Œ–º•®l›cÀ¶Œqô$ÿÖ¨n.Ïo*åVÙUnì}ðAüéuY"ºP\ylÅp6·'§LÿÖúV}Ο ½›È[ ^7d¨$qžæµIu!³«·™w¹wȰHì¼éùY÷ú’ywÐÈ–@lg–8úzçbRˆÚ$‰ÈʆcœžÕ}Ò¸Gf%Áa×®@8üM%I^àç} m(9È[8èôolvÉý+½Sòg¿Ò¸ :CÔm#ËÐgåü¿­w°?HPêQíYVÜҖćõ¨eRàòC„T¬oN”̆ÈüEbj©T’O©§ƒ€2µ(ñÒ…ÁÏ€N?WžE@nHàc'>µ`Ùæ«Ì 6íÃ;p~™¦„ÈÂa ,~i¼ Œ`ôùOOóøTnÛNF2X`zþ_çùÓã„Èû˜ª3òô?çü曤åIo›êÎ*1ƒ4iÃÆî3ù“ùÕ³€œóþEVP»Û`’G Ÿ|ÓB`;§ÿ[ÿ×QåØ†ÂŒp1Ñ1ù¥H˸21Ç=ý¿úߥ1°¤ y+ÛëÈþcéM0°Ò¹`ÜÝ9çôçò?Zd‘/›÷NO®z€>¿çô•òëTŒ€ØéÓý}úS6ìùB©$F?Ïùì)¦Iõ §§ _óéÍ<Ÿ``³pyÁúp˜§·Ì~öáПÿ_ù÷¤‰7LHe''ŽxÏèhžX  ç;zãÓ«3’r9=Gͧ{þ¿…]yQcs’ÄòJ’§ôªJåÀ là·cíß?çŠhDo¼`|ã¶ÑžÜžÇòý;Ò)À ¾F$c’z÷ì?Ï­$€`/ÉÈäœþ]ÏJ†âe„ º“· óúÿŸÖ«rz’?(Á~S‚98íùþ¼}+ ';HùO𑎾ž¿Ìã«F­êÛ¢À<îAßú÷ÿõU[¨<‡ÎÐòëñÇéW4&Når»³— Ô¹sžÿަiG]‹ÉçH{‰ÅFHvïnxëÓNO¯°©B –ÆÒ8é“ÓÛèqвzŽÚ0+€Å€É¹ÇŸ&‰MùQÜŽG¶èz]ÇŒàR1ƒß‚˜$úSØy›‰ ó7vöç?•!‘º‚Ò_$gœœ^GÓž)U‚6Ü¡ùq€£?Ëü~¢”óä@8üóü)Åv¾Ò;A7Ÿò¦ǹyS‘žª$ö«#Ù,?½É?ŸÓÓ°¨ ýï09Ës’Oùõ«[@Q›ŒÀúúõ¤ÁmrÿXNI§ê;œbžÜ`8ñVR?%À H'ægéþzíTð #'éíþ*.;gSN: îç“‘ëõ­o²ŠÊ¼#r¨#æ‹=«{ðoΔ˜#DŒûÓARÇÆŸŒqž”0Êã5ÌnŠÛxÀ階EÏãš™—§P2j98Bh`A·úöÅ+§?{‚iŸ1ÝŽœR(06àSz=iÀÏB¦±;xŠC ÀzÒW½°xþ”±®Ç&†4eÝåfÀ=°*ž | ÕÛñ¶\ŸAýj´ ³Öª;.ÁU—⇲ãÿJ؈€9Žk#ħÛ°^’uÿ?J¨?x‰ü$Þ%éŠé§ëƒPCwEV]´dðüsV¼BâV‡$?¬ÈÊ›TSƒò ç“ÓóþuqøH“´ P¯ 0yc?ÈÒn'8þdÿ!TQÚ9Føã nãô«K{e$täƒçCC¹`3+cçéÜœ1RHyúdSLyÊÇrôü?Í*Ì=ðÇú °0Áƒœ*ƒü”ÓÓ<¤í?Ý?üH¦%¹#žyâÔ¸Sÿ<ÉôùúôŠDŒä?Ùn?­0:óLöNjEF lR£ÈSÈ`¸Þàÿ´Çú@ˆÐãZŒzÿú…I±ÉàèXþTÁ·¡Ïsù±§ÉÏÉ’äÿÄšG·,I\Ň_ÌÓ°øŸ¢óüêM¤`@Wú icœy«Œ|ß7ÿe@ T¸ÇÊÿÙip0¹ÏûÿÙiã‘„ °÷ÎZ Q˜·PŸý+ŒŒèªW=p¤ý²bf“PóC° Á²OzãéíZR Ž&0R~æ?öJɵûÒnÇiÛþ~•qÙ‘&l>UÊî*ÞÝM9KùaÓ'sRO–¥•Up9Æ?ð”H)‚ƒŽª@?@*F.æ± ÿ´ÄSÖ“Ó®$ÿëRa³òôíò(£´üÀsÜ­(|‘†ÇL–?©™Ü>¸§×°¦‘Œ‡ÏP?¢ÒIÁSì3Èü;~4€‘d]àòIþ.NqÚ®­Ê<Á·¶AÈ5Ey'wÍ“‚Iÿ95"ÈÊÙ^‡·¯ ¤ÑIšc›•ÃcÒ£kp?Ïÿ¯šKI"c…UBðjÐÉ玢£bŠˆød 9Û»wüêbHw˜y逕:ç/yLJZã¤\1Î1œòh‘ƒÇއüiàp>^}9ªêì+åsß9ÁôÇøTÊåØŒŽ9cO¯JRÜÇ¥Œî=3ïN]¬:}é EÉ;úR`ä)Å@>æœA\{P;Ç—_Zx ž{{P3»­q ŽipIÁ´ìtäf†ÈëH¥!À=éHãß5Vêo+b(&I íê h@÷=ĶõcÐW9sçj7ë´²DÎ}_”¤ŒÊ”ç$s“IÀêEdh7)Î=é’°Ž|}Õ-ŒûT¤ü“Ò º*-Ù•K)9?…09Ù™o¥žÞ_ùfà3çÜ’GàüëþäÅtöÓÂÆL‘¸“ž¼sߎþ´ã¹þÏ»¸yÐÉÒnF¼1õù¿CUïnÚú%ØâF'<¬H0zn¾õÕ‘Ï'qÖBIaI]·3”0áW¹Ç½WÕ¢o%.±éÇùþU} À Þ\ ““ïQÈ¢þ#s—n»x¦ž·Kw+ºæ5Úwì鳩ïKag*¬§8 1€Iè:}Ì-ä8Â6àñb=}úõ»‡îá·Wò•˜·* nqŒœcüûUJI"c³2X%/"Ž:6 ߎ—5ÝØ†þÏ·ÝÔ '·ÿª²mü7›"¹œí/Ž3õ>ƺUB€ ç©5+$o´ÄaëIŒpOje{àúö¥líãéY €0~¾”ciàR-Û&œW§ë@ ãµC3€8MÏÔŸŽ}*VS“ØëÍU™ÿtÒgŽÄöÇÐЄ2%77’{SYóµmóÏåŸóšq&W'øsÓ§ÿ«ëýi¡‰•ÉÆÊ01þsþxª$k‘·æ‘ÜwþŸëO1º²’,>á'§ÖŸ@Ë—ÈP>P{ŸóëëD§23Cq×ÓùŸZ.2%S,™À wð¦·Ìzu^qùŸzylay†sŽƒü)Æe‹;®[©¦"¼±b=ÛqéþýUò)žÈíþÏZsÈZ}‘ÇÈ<¹üé )»!Q›¾$úœU"}V,dŽséþÏZ†73!Ø¿'=IÿÊœÛÏ͹sž@>üûúö –ØHUÀ^Ÿç·¥ÈšM¨R01èÇåŸäj«Lï1ÆÑžzå¸ç¯?áR°ÜànbÄŒsùc?§ãYèdYeVÁù‰LqÜÿ_óÇ‘/sGy|üNãïõþ¹ô&²nòò³’3ßw?§ù>µa¤cí#Hb2?Ï·×5MG~Iç óü¿—&É!›ËËp8wàÆFAþ\~5àùz‚QÏnx£ð HLì'€§'œò¼{éÚ‘q³¸]¡K˜>¸?¡üiAbÉœ©ŒcæSôàÿ‡­Zµ Iœ:m#r=O·­&´î_ýæ8RG°n§üÿúé…sA¸‘ŸÔÿŸÒ”ù RrWåÏùÿ>ôðH Á˜wçË縩Fñ¿|ò’sœöíí]7¾ÕÍ] ׂ(ÙèOã]fÓJOaÁnJÀg"£-”Ýœc>õ#çô¨‰Ú»OJÀÞÂ3£& |î}*C€A#>ÔÖû¤ã“HsÀéM?*ãûR `dzÓNzdŠC#aòÏ=(æ“ïJÊœóÇcQ†Éã‘@X{.W®sH™8ö§L|â•F}h¸ÖæF§þ°ãÒ¡„`ëVõ@<ÃúÕHº­ZØOrô# “ޏÅeø”¢CÓa}+f@>•‘âB œOÁaÆ=:øXíu‰Ò“rÃ?‘¬{{…1ª²í vüþ£®±]:èú®¶é"Túduÿ?krêg$ù´åÑÔä0Áç4ˆˆí×®zþŸÊ¡[y“•l©=}ÿ—çŠjÍ(âPÜðØþµB.Ä¥[÷d©Á$sŠž+×Uăå#$¡ªqÎŽp¤‚:ëíÛµ<sÆ9àã¿ýzVî;šqKØ+(ãèëÍXPÇ $zư 9å[•àÿž}*x®®måa!§]Ï·­Ka©w6 ˆu=+ŸÈ“ü©Ä¾vŒ;dqü–ª%üD€äÆÁ¶üÄõüZÊH®3ëÇõ?Ò¡¦ŠNãÃÈ8,F=sÏýôi3½ÁOcœË iá[' Ó¸ÿë kïìAþ¦Ç8`c¾TŒ~@Qæv, cŒ7ÿeQí 3”,O@úiU¤,Ë“òñ€…@ëŸõ‹ÿ}güiL{˜ˆÀõ þ$Ò!m žFþô*p‰ŸnøÒVùV;fBª¥†2GõÀ¬¸+»+‚ÜίêGdQ‚yêÊ;~ªÚ‚ñ(e$ã#Œ¼kXèŒç¹vØ…@\rpAÆ MJðà|ɸ‘ÏÈOêÕ´¤BËŸ”@Ï\lzTè ¨ýØõÿWÿרc!,!`5Úz7ÿX˜2í“Û*è £ÉÊãËÏûª9ýj3‹óF{à3øŽhÑ`î*wþ,‘ÿ`S†J`‚Ëê¸#òà:]”3lQŒ“·þf¥C½C²©9ǶNF~‚ÅÚ¤nÁôÜ1øðà)Ñí<9ÇoΔílqžçÿ²þ‚€9n}8-üé .ò ÉŽãeYY&à‚G÷—¨¨#Ü?¿Œõ#oçÍI•fÝøëÿÖ¤ÊDßiÛÄ‘=W~4õU• !r:Ô%÷œgÛŸþµF»ã;¢ rÞŒjGrfO—•{güÿ/ÊœŽCylÛJŽüæ€çhÇ9€OãÏù4Äp´òö#ùІ:ç¡GN}±MÁÈà‘Ú”§=zÒü€AïïK÷›¯áQ‚7uŽiÙ^}sÓ9 iŽì}8™ý)å°HúPnxÀ4„qžho»úŠ~8àÒ™<{R¥•T³rj±Ã8|õ\Sg•¤¨ÀxÏ©è.iÅ™°ÀgŒóþ}ûúUXEû>“jí#¼ˆÎOÝ8ÉõÇõ¦hWBi¤o,¡•CœœœŽôüé5;Ù ð„•N|Ȉè;‘ïKáëd*×…‰cò"ŒaAÁ?­hþ²/ïY„tëŠhçžx=éíÁüiqÎsÅdh0oQøVÌ’-ÉbìªòܧRHÈšÞ|˜Ÿ' ÂÕ‰‘P¤›>ã)ô#Ÿ¨8Í\7&[}ã»BAÎ_Œ÷àÖ­µ²iö[—$·òæ’X¼írR Qåã`:(ÇõêA_­hÃfo¯ÙgÀµ€e¶ñ“ØgÛÒº´F)kql4q=»]Ýí ÈSü#±Íf\ÂtëåsÎNÒr uW1ý„ì`ÇoðŽŸ—Ï\YÜߢ]ËÆ@ÇTEÝêT•–…}`o+…!F%€8<×è Úðæ ×0}šW,è¡£v<²õ«?Q²Ÿìdy,qBŒqÏ­dèò›f†rxW “ÏËžjšR…„¤z Á^sô§dàÔx#œpiÝOOJå7¹<“ƒéOƒƒƒô¨ÆIã$Îiÿ6Ñ€y¦!@‡ÒÆ#4€ñÿÖ¥gʧ4†5ÊHÁ88ɪwDíX׌äóþH«§·j¯*üûÔ‚ç ŒqßÏô¦˜™WiŒUzãŽ;ÿ‡âi`ˆ¥Ôî##?Ö®2f'EÀ,½qøTPƒ·$(#:Ó¸­©(LÓnU;píÓÛÿ¯C©ËpqWŒžÔë`“$¼ñÜTŒªß*à\þ_Z.&S ͼ碟Çòÿ>•ós†f!‰à{{TÓ022àqßÛü÷5CeˆÈÈÆÏéúU¡2¼ IpN£Ö¥áX( sÁld`ŸÿU<&FÕhp8ÿ?çŠlÈ#@6•ÜqÇBç ‘ÏPÏùújIXíd@zryÓüûTq8ŽReUºeúŸ­1q»>\ƒÓÛéüwñªrùk(PP點}=»߆jü’ß0êxfP£ðê*âiíÂåÉÜ£oéÏO©ÊRåá~Psïøãÿ­×ЉX²…ÏcôãüÓ5 ßå ¹˜rdŒqþI¨Š ù]¡Û…lñødþ™ÅZbÉ% z8#‘ëÀþuÈC°‚¹ÊœtìGÿ¯µJUs€N匌du‚•†2c‹È?7ËÆGŸN+ªßõü«”þ&(¼ÿÁíýk¬ÜßäTÔè8-ÉY°£"šÊ98§–$OçŠkôükb»Ž*6ÆÒ9ϰ©˜nUüi¬™\JW+ËcÐóJFGL­#`6SéI¸àt¤1§ƒÇõ¨œÕ‚3)9æ£pvž3šO•‘Þ¤ ƒÏjjdDiã²sHhÌÔFeÏ5Fw~5zÿÞÜU;UËdf´[ [—ã-ÅdxŒ7Ù!Ë1̽±­@pI=+#[%籈ƒ†õ?Aýj©üDOáÄê"P9ý1J‹û¶ ãØÿJe;AœíÏОMN›$_™¿ÂªåãØË™Nânö©e‚¤±õRNE†X †àÿyT3R!±ìÿALV\Ë·ŽAØ)L‡C}~r–*Ãq-ÈaŽ@?ÓµHã׎;ÿŸð¨‹ eWrŽÛp?1ò«ÜtúR#FCV Ê:öüiñ••w€x;¹9ÏOóúTjð;ç·ù⦑’ÜŒgÒ‡hRŠp#$ç¯4ÿ¼9Á=FgNvá½Ôp)^H³óø<þ@äÒ9ùzô£ˆÈyªîÒ£6ÖÈŸoæJ|vO–Uã‚1œ~|Ð$ÉJ¶rŒp &ùAÝ´8#ŸóúR†q÷×?„dð§’Œã¸) ïµ^ànuLôäúþT *®p~_Ë?çŸÌUMRüAlêoÛÎO'üõ¦k×kn¾P!ù;wc·óÚ©[h& ´_?šò(Ù' ž¹õ8­c»3m쌽 ÚòûQr±+nâãŸZï,좲·Xcè9=êžn—8ÃüšÓôéJ¤ù‡Ùj4Ž{bòôïšy¸"›´7 A“Ö², ú÷‹¬$-§ÌÌ»üÅÂ…ÆUûçØ¶ˆÛÔþ¹ŸZ£H|¨ÀÈËl8-Á'òõpÜ™ìfèiý¦õ¤).ïA×8÷<ò*kCi›{K7nOÏ)àþÿ…P¶¶¸òÞЯPÍ*p Q“ß§ë[:?‡árf¹,îò¦0éøÖòåNò2\Û#)µ½NX÷¶È×”„ù‘õ¥‡PÔ%„ùWìÃÚŠœ~•¥ªÞ-œ%ÚI?*B=±\å‚1˜È$À?ÅÙÏZ¨¤ÕìKnö¹fçûBâ3›©±Œ.qצ‘Äd´2íË(+*È>¿çÿ×fêõm‘Iù™¸ ß5LêïY…¸RH ã=>´ÕÚ‰žƒ ù°Ç.áó"ž¼TŒ¤ž£“Ú²¼3}ÉýÑ#i¨<þ}+`Ž0k’JÎÇJwW" { yùT LÒão¥ÝÅ!‰€TŽGãHNÑŒuô¥ œÞÆšÀ)S@ãëMe,¤ Þ´ òxã4áÈ8šoQÁÍF^¹Ï<Ô£†qAlž¦€ ‘DE¤ y cÔôî€úÀQ4bHŠ’T qÓÔ3L¸Ú¬ þ.ôÄPL ó\Ÿÿ_ëOX÷’[Ûü?O­9 ŽAÆ?óúÓ¥9Vc®:þ<ÿ3ùU1X—FÔÇ?×ùþ‰HbrØ#§Ë“úÿ…`Â6 2“ÈÇòsþI¨™Q¤£’[Óü}@cK\³õÜ_ÿ¯þ4à‘¹V#ø‡Ãüôª’£ù¥²ª88àwõ§# psœ øvýEU‰¸æ•Ý“J©^>£ ýI¨Ûkó¨ãíÇëäjY$ä3¥º“ƒŸÏßT;9VeWž¸;›ÿä~&˜Š“"*eÝB¨ÆBƒ“žøÏëYîXK§“¸qŒ÷ê1Z7Q³BÇË`Àd( ? cÒ²„ÏËÜîÆrz÷÷«ÉbÜrB€HÀ zœr?´ésŠ^€Æ¥I ÀÈõ¥Çž4¶ )ÈÜHéR:“8Ï4ÄÆ…ǽ!c¸ÖœN}çMeä@ŒÍAAf$ýCoÆ*Kãûò(¶O˜f¯ =Åaó<ÖN¥Î§¦®xó?öa[’ƒ×¬=@Öìlƒÿ º{™Ïaþ&æ[5É™ƒ$s ËÆ@å€þu»¯ãγ ÜûŠ«´‚HëÓ½kdŒ§»(Ç4…7E>HçcàŒ}­&£ âhðÙûß××õ¡íâ|—Oœ÷=G>´Ñß1ÛèÜ÷={Õ;1Y¢Ó^@¤p7äØýzœmrHÆ6ç§ùüf2«‚l“Øûw? ¯_Ë“À'ŒsÒ—(ïÜÐu"6cÓlc=HýsùšW t(Ë ñ¾«ð:ðsóÒ¥_r•mÊÇòÿë÷©ã ¸ýÞ¾¿çñ¨žL°CðŽ1éíÿÖ§{…’&áðx'.8ôÇùô¤TÊ—!Çà?Ï­G$*9PWiê½9þT e„üêUÏ̽ãE‡t[ŠêxCa•—oÝ~qøÖŒ:‚º²H¥I rÃëÛŽ$Œãq Ä‘ƒÇ§ùê(°¿ìñÏüñIÅ0NÅ»¶ŽI£dòŠc׎¡F]]x#·q×üÿQÒ«ÆTN˜ÁÈüñþ}êA)P›ÎTd.O··~ß•+Éʬ6ž™í‘Çùö­Só»j±ÇûLGô¬PûpÀôÏâp8õþ¿JÚ·4(|ÀrÈùÏ"¦E!1&Õ*¹'$`cØsQÉo$r°†èÈ@ü9ÅYi>Gû˜ïþ€3<çœÃ¥EÊE` “ÝpHþ”¡rÜä°ä‘ÉþJÉxÃ"ç¨"±°»ƒ×$ÿ`þ´ÄÁÆIÜW=>m§ôlÖ•b$çËÞ&þ„Ô¥P/$l3¸ãÿB‘7£{m_èGò ËePíÓ–<‡P?éž?™¦ˆU÷ÿЧ&ÃʘϰòÇøšCÈ$ÆÖV=ƒÜýˆ¬k -Œßð¤U rC•õ$‘ý)@ààqŸá<~ŸãHçvó#ü) #¬Ãž˜ªFw|¾üý?ZG\¶à6{ gñÿ Hd[äI—.¬Ÿt7B=²*c((ÂBæãúS*WqÁ“FÝà'$xGãTć­Ê:1 Ćùz~­J’J©æ½‰8ý*2„Ÿ½’:dîý:~´åPU¹çAàÿŸjM ÔÑ.S9ÉR~÷ ÷§ðX‘Ž{ÕËä°\Ÿ˜ÿQëWÁGÑìê*^…!ü.KÅR‹-#HÇÎxöè?J±rìbÚN tôãšD&N8õê}¹ÿ=hC9ýz/6x¡fÊÁúñýkCX“˜áSÈ@øþ•FL\xŽÕN6©ÝÈÇLŸ¡íùU›|^ë˜|©™·§ô­;÷6íâò`Hÿº f¤`i1€0Ý;i«.[lŠvÁÈ5‰ â2:š6gÓ=( 3ϵ(qŒsõ Ú2N*…å”w,ðËïÇùæ®–Üp ü(²•a¸4Óq—–2Ãv ±W „hÉàç·§ôÆ=ë©·‰£;¤rÍüGÝõª—‘åSt[Q‘×?Ó£.åä ©éW's8«/í-µ :†QïóÒ©.b‡6à«÷wdSï.n¡•DVÒÊPqøÖúô¶ú£+²cpA‚áHòϨâ®*ODÅ&–æUÊÜÿhÉ%¸Rªv£0úÕ]`{™”9, üÌ«Œ“ÿÖ­uG6ê€obzÉÍmi6PÂaó!ýîK“ŒžsŸ¥jçʈQ¹sAÒO‹ÎÚRYQ|ÄOZÔ#æ,§¯Z—\QM^zŽ;W+m»³t¬¬†’9õx£8ùîýùõ¦W9äR¤˜Wœuâ’ÇŽ”n#Ã4 \Œ4¹Ãd`zÓˆ9éëQŸÀþÀxìOó ¨ÝÎzÓ9Œ½iëóÀüé Ć58-À'·©ª›¾lKíþÏÖ§¾;Qp܆õ¨CvëÀ¿ÏøU­‰`'9,xçüþ”¥H??L÷à~9ïúý) 0ÜHÀÏÿçüóN-·åÀ<}0}9ÿ<šd‘A€ã?º8üñúÕ+û±'—cÈ%¸wÎ?—éVÙ·198þ£§òüÿSY7-1Þ²[I!\@î=0Îj¢®ÉoC=¯dšèùO"‘ü-ÈÀç·ÿ®¬ ÉŸ 亜ŒûöõOû"þeóâ Kd¶Óø{ñV!V´>\&æ,ÍJÕÛ¡õu)m$hîK€£`ñ—J¼pd`H;AoÄ€0j„šoÚâ2yŽ„(à®r;‚)BMimåÇ*?—Ñ Ç¿ÓšO`Ô²0¼BIõLéüª íÂÈdTC 8ûtÿ=éöò àyq»9àývŸçV6‚0 œ*AÇäŸÈýhÙs"@!þÓÀ÷9ý;Ô!ËÞYÁÆ:ñž˜=¸gò­I"Ýód9;ƒã öçüjœ¶¯ 6„(àà qŽ?ÏZ´ÉeuiwäïnÆ ì{zöæŸÁ𛃴=~îiÅ$ó”¬, ŽØõ?Ê¢-ódñ&xàO©õþ§éLC€ó^ÎNF08ìz pÃní¡›$:zƒúÓP(r3€ª{õ?Fÿ=iÿ6À®ÜÎzû¿…1X]»P+dq 'ÐoñÍ9‰B¸8\`þG93‘¹†X…*‡·Ó¸Ï½?rá²Æ@ÎôÇó íÚX¶28Á>ã§ô©7mŒŸ(f%cHØÿOsM¶_?#î£6X©ã<ð1RHæyƒ´cbÜ…í9çéÎi +òá†Þ=G\ŽÕb)rP1“ŸÊ£ 6 ±*Î}ŽOåô§ÄÆ2¼årxmØã·ÿ[¥7¨lO-®ÛÏ :žœ·½uÜúŠä¬ÆíVã!ñŽçÖ»/ý¡XÔèk%ä`õ"£$Ó•útã20ÀïX³R'õÍBÍ‘ÀÏz²ÊJô¨v¡©-lFFArJ†-ÉÏAOÃnÆOŒÐ݈Lš4¯Í÷xò쌎:R)S&ÜàõÅ9Áëé@ˆðëHÙïN @óškcò()·DµÓ t5b#ÉÀóÜ÷Í>3’=ªº%‘w'=EsÚ†N»§Œóœκ/c×Ö¹ûôLjlÆyàþ¦´§¹•M„׈k«^OýMD2Œ§wãúÿZvµƒ óÉR^æ¢|HÁ9/>¼ý+XìŒå»“#jv¸ŸOýIº²,Ž~lnã‘øš–c\1Û–'“ÓÛÖ”¯”Y×&6ÿÇyëè(¿`$*ŽNÝÇ‘Ôw8é2£IÏÿ_ü(ïC 6>bsëÜñQ´±/ÈÇERǰú~U,dw¬ËnªH È×íV5óBƒÉ=r9•W½;“îlŒ€þÀS£žÚFæ(C`¯:þ´ÞÈ.ÇùGj²É±WŽ9Aß­2k‰-ü£"ù€Œ~çµNCcq—²÷è*7Hå™#çk@qüè¿q‘-ìNSq*FT†äþýz‘6Ê„ÉËì?ý}6k`ΖêG¶?úõPÅ=³Ì‚"z©È=?Çõ§döÚ46çÌÁ$ 뎟—_jTbKàðXß§_þ½SŽíÎÂãqúð1Ž•X†òÝ¡ˆBFãÎzúûúÐÓÑ+*° È>ðû½øÿëz„FÑ–òÛwƧãSB I?Ç¿¡¥è£æçœtã?þª@B&_ùh °O|~¿ÎžÉ`FÕ<ô#üñßò§y¸ FyÀÈȸ¨¾ŒM·§¶(ºqò“×!áÓüúU¨n„0ˆÛyQȸü±Yë,‹÷Šœ ß—ÿ[š|s,ƒn~bz\¸&t\C#Yá„mÈúš‘O–¸Ü Õl¯JÀç$0n ÷`^\$™,² ÆCÇL÷÷¬ÜKR6IR€qÉÀävÀªì¸f ŒðÛ ×¥6 F cRÒ‹ƒ÷GõuT2|›?!€Þ1õ5¦=ÈÄ Ô`‘è€Ñ…)œ“ûÅ¿ÄÓšÖ0 l©aòäçô¨ ª»Œu8ÁÆG?{\{”œ‘ÇÉü–‚ì™ÿˆ¦ÉÀ ÊÅr~W=½»þ”‹TÚé»a9üNæ1g ·9ë¸gÿf5&A9lŒôÝž?ð¨†v•/ø/ÁjE#•ËþÏ_ÄêhǾî,AÇ©þ¹?¥"žGÎI<ŽÇóå8?ÊØ`qÛúqùš@ÇnÐ~SÔuøï™¤1OÌI9 Ž.µŒ0Ý·,;Ïä?©©0HÚ3ÿäËÌÐÊ8PÄ“é‚GáÐP&Bc£øOoӟ塉ÆGéÏùì)¨dÆ[ž;á°~§úTª7 \óýi0#xöà§W¯è:Sã•¢FGÐîãÓýzÚÉ…'8Ï—ZG 8§lc#éÖ€%YDî°P1ž ëýçVá1ÉÏÏZ¯o€Iù³žyéþx«R¿É¸ SƒÜqïÍ&4rÎ=CyûØl烎ýhé­$V²N»CJß)qÀQÇøÕ=Sj¬²ôÚvãnOBEL¸ÆŽs@Êí h„íÛ­·™nsÀ<jK‹ûheT/¾F8ØœŸÇÒˆ%¼cÀÆ3ÇÒž¤ér¥åýœ1ížcmÃ×ë\«µ¼²Î’³«ž$“¨úWC«XEt»·‘𩤽(6­âŸ:2çŠË¶•Š2§ 1þµ?ÚX7Ím /l>üÁ©kR“-Ũ]7?g‚áûÖÓ?‘©âÔm^MŒZ)3²¦³]¬æ;™6þñ±øŒãò¡ÚQÄ«s¤Ÿ8ÿ¾ºÆ“Š ³^éœc#¸ëþzÔ  d‡ùþUŸ’¨ÒMÓìóò§ýÖþ•%½ô39”Å2ðÑ7_ÃׯéK•¡Þå½ÅòTàw$ŸóÍ?˃ÆÒ‘\ƪ¤ ž¸=OùÇé@,Náœc©¤Éó«Éÿ9>õ«‚¢#†ÞªqÎy?—ÿª¬¹]¿)àÖ×Z•ÛT’ÙÛ ínOB}1ŸÒª:‰Øjká5il¥…„Y ¯» í‘ŠƒU`®Ñ^çŒgÕõ·ŒÁ ¸€bC¸ºXg#5•©Ê®ÁÔW88â´¯¡›Ø“N¹—ÍXÏš†66±¾¿­3YšxöÆ…tÜ™VùÖD‹&K#Ù'éMÊñ²4ŒÜdl’G9öãüóZrër[ÒÅ«{ÆI!|ªÈ샎GLûu?•mH©Ëäá~èé߃þ}kœÛ¹á$‚äíÎ@ÆF+¤•Üg,s‘œ†Æ_óÚ”ÖÃC¿x§rUcŒî#wêAýiˆ.2~óÔcô¦y˜Bå‰ÉÇÿXþ•?Í—hV Lààgô§Ò bIºƒ «ó/Cϳ/ëÏÖ²3½IÛמ½?úÙ­‰%ãl`ƒò éŽç?!U^٪ƊA?1<Ÿûç§áøÕGA5r€+¼.À=8'¿+çÅ;æ1î`Xn,9Ü ÿ<ž¸éMh@e 8o˜¾1È÷ç5##(gØœORO¿©ôö«¹"p¸eSøsŒ·ÐñùjP›n çƒÎ}þƒ·ÐFÓœ¿*îþ=ýjÔ*6˘ã9|r»Ó©üp)ì!§t(`ÃdüîvÿaøŸ§AB°q–ãpÎ uÕ%Œu-“ŸZBy÷ô§78ÛÔ÷Å'|pri›yPzzŠSÛéAûãµ)é–íÚ˜ˆñÁ翌Ç"•Ç=!ä &Q“/3?|·­>!ŽOJl‡3=MJ çn:Õ xð? ÁÔW$°Çã[ø#¨‰¨ oiÀp6ŸëWMÙ™MhT×—…©ãî÷úÒ[ 1ïÁÜÝ·=©uâMý²ŒçÛÓ&¡W0Gµ¹LàrOnþµ¼~e/‰—0 *À9íÀü8K¹ˆ\1_âÎpsžÿÐTlÄí_wÆ1ùt¨¥¸.0K‘ÐëJ× Øb‰æù±Ô±ÂÓ¥máUA*y;sƒYÄÉ S!nœzt=3øÔL‘ÓxÏOçO—¸®hŽíï÷O gûŠ_$$8Sןä?úþÕEK¨n\ôäóÓ¥H¯ Á,çœóÈÇ=h°°u9$¯R6ޏ>þµ$7^ffãëÇjŠ Ç™´áK§ßÿ×V•Kp @ÙíÞ“óä\P³(‘On œgîóUÜ$dÈ¥C1 rß7?^M0LÐn WbŒŒ'¿¯§HÕ@KÅ¿àGž™¥kr·’aŠmbêíéÐUS¦?—º2Hƒü>ÿáZæ0ñ»“ ÇSÀ÷÷¨T· ¤P~_ÖÂ×2ÚÚál Ê Ó·_ð«ïÑFã´ã$rF@8üjGÛöf );xÀï…ãÿ¯M»ÄÁˆÛs± Àúg¿à(½Ø[@3쉷xaß§ùæ¥$¹¹qԟ¡Á€ÉÚ r8Á<õíÐ➥e)µ•˜ Qþ?­!PQ ò#åÿ?ãM’ÙJ¡FyìONÔ€0RØ''ÔóÿÖö§- ¹OÉ÷IéÛüâA$LFNÜ’1Ïâ*_´Æ‚Œ£žÄ{ÿú©ÌTÈ07 úŸ®i¬U¢åAƧùíFⵇ´a…å²=9ÇøÿõëzÏp¶‰rXÀ { ¤ºt2[#3÷ È•yÀ÷?Ê´£ \HéØfþXœÍ(\¡*®3Ï÷DAhö¯OoŸùñS.ÚXèBçõÍ,Š\ÿ6q€Aþ€VedŽU”Áë¹¶çò¨œ±V„‚£'€=rsVÙLx!•yèH\~dšS:eB“žÿ>iÜV+«†;Fö9û¹Èý…KL•ê$(~œ~f’U,ÈÇ!z¨Æ*&—k°s‚pÀþ<ôön0î• {çÀ¤wRIÈÝÄñQ‡Þ¥ÈéÑCøš~NÝäŽäŸø¢À=r˸Gc×ÿ­I•Ù»»ç<éüéÏÍ|žÿ‰þ”,znÏõ4 z!— ,;çùd *Ed’W=ÉÛúõ¨ãs匀 ²3ýiÉ…%A žÃÿ­“H ]¼î'ð~}ê)9!‰è¿-HYƒŒ1í?úôŒžbïãŽK»$ [@V?›³?ÏùëVÝKGÁÀ$U;R ¸À†SœcÚ§¹PÑmy„.qž½LÐ÷Øæµé±1!ÇÊÓ¾8ÎîéZZuÄriQI$Ñ‚æ$í\‹‘QPKg"L¾A rC ‘êÿ=k+ô4°„¨Bd‚0Iýh7Y)i&2>^Þô½2åL(e2³'Ýc£è8ɪ±ÚA§¤—׬fé¸ãð3MY‹RèÕVqk"ŒrÏ…éÛ×ôªözœú…ÐEQä“´`=óê}*;ùÕÑwí–ÅN1Çùüê]’J䜩 ôÀÿì©ÙZáw{" ֤߀H]ƒÐz~9«³?”E C©@«Ã'Ì®ƒ•õ'ÔRAz¬î±È$ûQSº¹[;§/y/—µ‘@ç®MP¹²HH@›NÎ ƒ×ñ=Ö¶d˜KÎz0ïOóŠ‚xü•‘˱còŽÁG§ãëT™-Ž ÇÎY”«”ÂìWùH',útªÆÝcŠ"A‘d?xFÓëÿÖ÷«ºª3Ïoq’-K¶ì’:“éØUxÄ‘^(xò0@löçsÿêÅt§¡ƒZŽŽÐù¨fÁ?{ÓRIÿ<ôÖvQéAæ®î'§ÿ_ÔÓ´ëT±´ûLñƒ1Ï–§\ÖUõÓLÅÉ ¸áFxþÄ~¿N¹6å¡¢J*ìlÑîf¸ó0Xä0äŸ÷qÓæ>œfˆ#`˜lSÔäŸsß©ëRÀ aåQ$‡ÌzU3mÇãÿÖ§ä.¥IP·Ëº@¥°=ª½´û„Ö²³ÂJÊÉç8#¾G·± ’ß²>eR9"­^Z[Ûüñ L2Á÷çÖ§žÚÊr¿¾µy#WF†T`ã ô†›º‚A+\…Ì RdzŽ}9¡¤Á6‡e’ÙŒG{0#ߨå¥KÉ&šXn%Pì¦>VçƒëZ~z1WòÈþéS×ñÿ=k>MBêÊà %»±Á'9ÎçùS‚h$Ó6â¼V²A1ýàÉÉîqþÏ5…¨È¬Y¾Q’ræ®ÍzÓÆ®¨„œãi#αn!™˜Lr?>•PVdÉ\²Å²x–)à¿> ~`U&® ‚>÷\Œc?çó¦í €á]õ«ÖV°È Ê®d\púô¦Ú;KÏš)ÈAÆx¯¯ÿZÙÚÈØÄª“œЃÿÖ¦@±D¬cÎý1×ëM,ФíL•ÿd÷öÿõÖmÝ–‘6_ 2Ȥ)9ù€çþþJ^1ÏÌF;tüÆ,T; Ç)’cùŸZño)»o=ÝGËñ©͸á¶ôû7øŸ­9YXaÈÉa‚÷ûßçÖ”H¾fÑ÷~öWÿ¬Gô?ZnNJâPTNsøœ?ÎØŽâo-X#~õŽyŸLç9úäÕq'šSœ‚@ àP2öëIq¸É’Ê'=NÇùúšj‡ÁeÇʽ=ºãó­R!îL‘£]§xÉÏÔsøô÷§9|œä!Üä‘ËñëמsNSäGæ€óµ|Ýr}‡^ýª& ›†ÊF{õ$îéšz©Q—ÇÌNÂ1Ç·Cù ìuBx#,ûŒTcŒgø›9 Ž=±õô©œ· ~~0p>‡úŸzb0ØáÊðXœz¿®)À)ÎÑ¿’:gÐv¤E2HR0H#o¿ýtåU<¶=úãñŸëë@"{-©§N\{žõ×~5ÇéãŠIsõOð5×cý‘ùÖUw4hà6;Žõs“ÈùLÙÉäÓ ü¼~uƒ6Ìt${ ‰ÏËïRÈÇ÷…DØ Ž½³P22>SŒüS߯#`š°çŒP1Iã¥ÏN”„ôÏJnçÀ$|ñëÖšÞ ´„c§rGZL¤Œ£‘1'‘“S©Áw¨f^}Oó©—†çôª+ +äçÄ–KÜ!ü>õl6vàV,¿ò4ÚHÿ£UC©•B¦¼ƒûJqòqŸ­*FÛà®~žŸäSõþ5[nyÛŸÔÓ…³ôÇáÔâ¶_ 2 –CÇÞûƒ;{:…v‘¹¶19ÉÉñHí¼“ÕN1†íô§|ý×ês„ÏjÒÖ3ê)À< u/׊)Üp ãøyíëšRpÄÇé½i Ü o¼ßONM!‹RëÆrIù»Žý1þ{Ò"† 8ðð?‡¿™ÿ>´´ä0{qÆhz«4LP KcöýoåE¬§ÍêB“»$çúrOcQYܲ¦å' $¡ühtCÁ$à–`08ƒÓ¨¨·BÊHS’@úp™þZŽeÁØqÎSÇÖ™³K4[…Ã1ÏËéÿê§Û¤ÛŽùØ’˜ c¯éù –nD ÈÎw×#Ò¢–@ê­!mÑÉ‘´mÇ©þUjDÈAùpß^Ÿç°ª@7ÙYû qõ¦»ö`ÓHÞZdm#vÜã‚=‡žÀ¤à`õÎçךQl^ï{ÅyÃ.ÝôéÓÖ‰bXSŒª¬›²9àãžü⚶ľäØòÓfò¥Æw!xãñª¦Ù’Y<ÀC®w`ò?Lù‘œ~ó%•Gœtëß­"JR $wÞàc9ÈàZ5C £|ªÙ ÃÈü¿ –ó¶Ò‹W$¹à“øtªow33EŽ'ÎIÁö÷ªÿhe£‰ù‚çù“è*v¸›:–Ôb‘ÄFІrUzcÁ& kùa•r·ާ'úŠç6¼Œ‰vÀäþYüÿ6èäcÐô¤©¡ó³­Z¶$ó£ÈÈñú Ñ·½·ºU÷ÙyÇç\Tw·Q®Vàpã“qÏùü¤Ö|·0=»¯ñc ¨çü÷©t»í;Àc’U¹=ÁþBƒ€™äsÈ?ÔŠæ­¤» &´½y"=·—_Ävý>•r=bX.â*‘xüAéY8>…)\Ô1÷cøHãÀS%P$ØT’¹?¯_ÐSí®¡»‹t2¡^F7瀤™iÊŒŽ„®N½JèSÀ3Œ0\£ŒóéNÞË(ù ŸUa“ïëúÓÑ—qǸŒO=}zŸÒœS+€8çîœË§æj®+ ߎAÏŸý˜Ð@Î3óØçúŸåF\ŽqÐûœqùšL³ ÷9þ\RRr2¾¼Œuü²2)K•À;zò2ôëPoÈ ŒÃ±ù`Q`Šœ.š,&Îrçõ/ó©ÐÆw•'¦ fªï àeo]±çŸÆ¬FxÉeúÛú ÐÐÄ·fø Š yÏëKªÎb·•—ýh]¨vnõ¦ê9УvJ–8Ö ¹hÔ­¡ÛÌì}…?Æ‹]‹¥ŒÍB†É#ŽÕ ÛŒŽœgñ®q£ar½€ÀÉèyÿëë/!ß!\œñ×õüzVL–ˆ¹lgó×ÿúù­á#)FìÜÐož},ÄÌ»­Üçœôô­K‰ÕmÝò«*àœž3Ž?\¾yö(|É2Vâ6œöû¿çÞ“\ÕZâs …1¨Ï¯5›…æZ¢kÚ^Ç5°2åÑHò“éü_çÓ¥T’ÞMbí®f¬âb£n{Ž€~$þuJÇuÔ ¬pÆ€Ë!íÎ0=ø®š1q%´*«Qþ Ðý× ×½¹Ÿ,Âie,Ë» ÈUÿ×þqZ[-bye;KqëßSÐ~R Pg"5<3ž‡?¯ÿXûS¯çY$_%±±Õ@ÛÃÃåäõÏ•/]´ÔKíDù±¥h–G ‘‚¨î?>ÔÇÖc·Ã#Jã$WöíLº|ÈâÞSYŒË*‡Œæ³.c·–õžÕ$&XÜË» ÓŸöpERŠÙ¢\žçOk$WÁà`WŽ;‚yæ¹íNá®®"Ó vQºgï·®?OʯhñEk¡I,.Åß,Åÿ½Ú³ì^µK‹™÷šS.ݯðÿ IY±·th“iÍnÇ Ê=º\õꎕ¥oÔY¤UXà;ˆÇ\ǸÖѧ“ ;ñJáf_²¸³yiqqÕCgš©©…ù%n-µ23ÉÀàzÕ+7¶»¿Ê2Q‰ày㌃zÔKT’Ûtñ4JpÛ³´ýjl“*í«úK$’î\L<±¤­óƒóúzqVôùü‰¦·•$h¦ËÜ,8$}EE-˜‘åaˆªIß¼î¤~UgO¾‚wahÌŒ©#$ò Çâ?*Ñêˆ[ˆðÃi¤E#þñ6®üŒ€ àƒùVÒn¸y£!±\ÈO-Ûÿ­ŽÕ®æx }9±!(éÁGç‘ùV-Ýžs3²–t 27`÷ž~•PÜ™lkÛ\‰£WeÙ‘ÐsúÔà¦î â³tÒEš‚ràžsW@'ÿ?&µØ–˜˜ß•øO§õÿZ§?›$!”P%Ž7vYýÒ¬€Y°¤Œr=ifÛ¹'òÉ R"w‚ãÓ𤭠KÇò¢¶˜#B#u ì ²Ò¦DR¦Tä`‘€{T·´¸°³W1’Ò2r6xã=3Ö¦š'hNÝ™û¸Õ§™ªa”ÈV'1‚zö¨™"‹z³´ÒÁcòÖµ¶mþy rœp{ò3íI%£DA˜àä” ò3õ§ÍÐ,eZ´?lGŸ„ qnõ½å*ùFu®¾I¬©íH%¥wœçœþ'ò©-/’%òäa~Bê žzgõõ¢Zêh_â ¹ÈÁ ´©Î;Õ›{wq°:«ax¯nÄŸéVšçç߀åM§h_®ÿ>µŸ)”ýæq’AVïÖˆ®àÙ”6][ç<ì9üsý)a’ádiAäc Ÿ\ÑÉÀl nnØõǽ^‚Þ=Ùt‘2¿.[=F)²mØ|-ÀU‘B»· gùUÅ$Ê•ëžL—ãI^TŠÈ‡?tœgùJc?š1òœŽ„‚zûŒÿžµ²Ê×K"oerH#‘žN½ÿÆ’Ä’áPäárX}²?Ï_J²à´‰É “€FíÁS&Q؃òq•Çʹùˆúôüé¦&¬FdÜÿ( 6GÓ=yn}Oè)ÌÍÙŠœ§%G'òþT›°Â01Œgn·ÿ®¸8 ÿxu_§Nùæ˜ˆÉ œüÄp0 çß Œþ´åpÀ “´`sƒß¨ÿ IF`yÀÉ#€Iõ5P*œ¨Èé¯ùÕîV"<©à€r§×?ç ’KH#$•éøçüê.‡ïNpC߯ùô4àüÇpÛÈÊôéþ~´.žÇû^4 ‘½rsÓŒÿJë³ïú×)¥G·XP@pÿÐ u{G÷¿JÊ®æ´ö/Å÷ÚrÃŒjy9' ÅFp­Ç\Ö ÔŽy#µ1†áœséR°Ç~ FäŽøõ© àœÛ¡¨YA\r*rs¸0à÷Ïj‡ŒùRœ€2ÙÇZÈ4¡p>¢àdg­1‘88ÐóNùÓ[vx?.9À=©Œç#Îõ52øÔ8ýî~µ4c<ÕüqÚ±%?ñUÛ€|¾&­ÍÙ…'+€çŸ,ÿ#W¦U:ëÜêÖþ›@ü÷T-‘÷ÏoÖ§Öqý³ÏTÿBª÷mþ‹…P¤Ò¶ÂŒeñ2‚‚¤¹é‚1S…ùNUŒôoóþqQù`w 88?áR ;Šùž¿uxéZ=ˆ[¤9éÏ 3ÛÞ¤ÉUaÓ Üàöì(;†á– 2HSÛ¯4b>U$Á/qÜÒò›vî]¹=ÆÞþ½i …^¸ú`¿Ÿ~´ÕPX‡çbç=Í*çË8ö<ý:CWï`óÈãéúÐFá‡#æcÎzœŽýÿÏ­9Æ=qߎ6úvÿ>”ÝÅw`ñ“ž£#ÓÛü)‹¨è[Ë“‘ŒðHêzõÿëUâQ°¿{qïÈÖsgÊX0ëÛ¿ùþU§$K woem£>ŸçÖ“ì:ÂR— ±† Ð+nÇzt­»\r1üþ÷×?©÷¬`ÞLÌÈ€FÀŸ›<ÇØÖË:¿Í =Ç9üÿ3ô¬äŠDw_9g$ÓО¿§O~j™Œù  C®9*qô¿úõr~„1Žƒ¦y=ûþ*³‡eXóæ9=}(]‡æ>ŠßÜt+ƒÐöéùÑ2®÷,[ƒƒÏ^¼gðè<)EŽySÎ8nçãLfc!ÁÉS“¹¹êÝOaô¥}BÚ7:…V%Bçhþºõ5^W,áƒüŠÜõ'9ã'ÜÔòÌñHŘ`ƹ´ØmÌ­´ä“ǯמžµ¢Ð†UXw8æ^×þ£R‹]Ã×'þ¾ýÿ^õp ÈÀ_rò¤|†ÚWÁ?Ìþ§µE_#ƒœóÔã>ßçÿÕ†ˆB¨9 ç×××üô«n@!o¼qÛüçõô¥e%ÀçjóÇçŸóÅŠ~IF 2£ž@OåVÎ+"1uËùì=8ü=ªxaYg‘ˆÇËÇéþÛ"¥½Úñù HGÀñù ¤å¨XÀ*ñ°x›Ëe<8ú“W`×&T yÏ·nŒ2hÀ$õŒôÿ?þª«äpá€ÉôõôÿõzûÕÙ=É»Fí»[ÜŸ2ÂàÃ)( úŽ•¥¤Ñ([¸öœdH£<}#ëÒ¸ß,¡H œzÿžGù£g«º/•v<Ä#%Àçñõþ•Jv:‡us½À–H \œõ©ÒXÙ”Ý鑸ŸÇœþ•‡˜È¸³bIÚr­ùÿ>¾Â™y­,j«`ÈxmÇpSø Ï‘½§7s}Ê•n‡æ?‘Ýý)²(Y>eŒËÇê¥rP¾‘LFYq’ ÿZs4²G¶IäÎ2£qç×üýE5I®¢ç¹Õ»íEù|öè*´·ÂI–DTrʼýšå¼¦ÏÎ*qóþ{Ó«; ’zúñŸóùÕ{4K™¹'‰-TWàåÛ¯õ­KËkˆ÷Âà‘ÉJÿ3\d¶A•™²H$2çù‡z’Ãαºm©Ÿ–U…?áMÓVÐJnúÊ•vTV\³ãq#?SŠÎž{–¸žîÌ+3ʆAUZdzè…í¤éÈRT¹ôëMÒç·kZo_0>Tñ‡=û}k4š4½ÊRk³4›'µùŽ Úÿx~=i'¾2Çåňíòd°çß@:ÒjŸeWXåVIáqß¾qÖ’Ýq¸—fÜaP0Àöêqü«D–ö"ì[©A·µ@¸*™$gÛÒ«*´—’6ãnwõ\ä÷ô§‚.%;H1¢àŸ©«-Ž?Þ6$)ÜõÎqü‰§{ ×,iÁ¥µ±·‰pò\ùÏ“÷•Jã#óü«£ZEu*²„ófÝ«&ÅVÑ-&HÎõ(®?„ãß­Yž}ÍäùŒc‡÷“2Œå½=:æ°–¯CHèµ/A3Å*¶@àzr=¿¯µU¤!„ÅYo 8È?–j{iŸí*Më¼ äªð9ý?Z¡}p±^C47U°§ÌIëïÉü=*Uïb›VââÒ{IN {X7±¾1àdõ¬xnüöM•„„:ã 8cÉ'{ÕéÚKÝ‹B\1;RÝ•wçb}=9«{!²·fÅÅÁ9ù“œtUà{g·ZÑY"¥[›”‚+}6)“íHöœ…‘¡Ç\gn{¹ÓVö‡åÐƒÏøÖ™`ÒM{}sÎܰnå·‘øVœ× ËK‡Ê—çÀ?tô¡«=;êËóob±Éu ~\sÐÿ?óš‹Z|È"É ´ >€Ÿ›ÿò¨4û§»Õ GÉ Kdûþýuµ&&™óò€à{à'þÍR•¤Sz,[ΖYÛï3õÿÏÒ´]¹QŒýúÕVÐ2Ú§ †ääžõ#1SpO¿øÕ½ÈDž^˜úÿõª{}Fé%Kxl¼Íüù†N8ìAöª‡$Î1ר,4°Åç:äà2„Ž)4ŠW¹Ñ, »{}æê+¢ …lžIíSC‘ Áˆ$÷ª×‘´Öü€JÅnhôG!urÖÂo.gÙ6T¡ÉôÉëü豆8%ŒÜ 8f Í¿iÆWýÓÔæ´"F“THRH2¡1Ü8àã§åŽ´—ÿk ,~M²Lí±eEÉsÆ3éÇÖº/ÐÆÝFÉy<Gq<3îŒLœ†çnìv<Xú™ž“#ÉuÀûÌjý¼¦M®VT·ù˜¹;ƒxÈìFk&Y¿´n’YÙ¶;`yX9üȵTU‰zèiX"­¸ $ƒþÿÖ«€íûÌØÿwÿ­T£•mæŠxÙp¤‘¼ýà:U½ÎNH c<ŠLkAÁ¾lƒíÊÔ±†1È †*ÂDàŸÿXZ…YÔ‘ó`þ4Éçh#2žFÚTFđ׸©°îs’[˜ì'Áf·v_p?AþMo,›£Û;ÇL1œõþŸÒ¡Õ<ë«E7h±Èä,±œ‘ÏSþ “Ü›p€:1V$súñŸð­/tBVv4ŽØT}¢áQ˜}Õàç×ðî*´÷ ³b†59-üGñíüþ˜¤Š4ˆïÚK1åˆäý{öè?:lë¾//z«/lã~CùÒ[Œl¦Õ¡Éþðž1Ôõÿ=*½Íº²àÀГŽÝp8çÞ®€cE ª„¯¦Ò=ù<Žß¥S’ñ ’+¬¹$œãׯ_Ô~4ÕÄö3W͘“’œ)8üûU†S* 1Ä“¿'¯§ÓëP4Šÿ½èIäý}ëFÞúÜÒ2ÜaX1ÆyÏqš·rP¶öí‘+epwdqØwéÓüõ­—>Xƒòîéß×ÓÚ—pŒ18ÎNÞ¸ÿ<Ð@$ £Ç+Ðÿß8βm–¼†»eÎ6ç9ÉÚOô4$%~PÀíhcß¶xþB»$…' 6ž¿øñýGáV!–Þ; 3 rWOP3‚(lv*¾È®‘Ì~NùM‡¹ãÔ<ȤU'lnÚEÇ^*8¤Fš+I›kà ã Âþ|ŸÂ¦cxŸ,Èì¤àSÀüGCU±;ŒH9|(三þµ Û áˆÔ1^; þ4Ý‹¸È’¸åýssüêe`@ }ç#>Øä~”Ä7ù¡Hç$úz ŽŸ¥2Hƒcq‡8lúñÔ}ZrÊ™ 6IL1ô¥%Ú0„ sߟCôÅ0Ü„Âôé»Ï×Ûÿ×OC±‹•à|Ç F=:tý)60|‡=øSùñÅ€cóŽ»r?.).š ëc÷˜ÆØÿë×[ÿ5Êé*?¶¡òyÏðêò=JÊ®åÓØÐã$½j)8$ô53ŠŽA\ìÙÈpç$f£`:󚙀ààšˆlƒ×ÒÈØIüª 1œäÔÄ— ã"£PƒéÇ¥!_›äbýâHëÞœêvex&‘ùÀ={Ó"o™FJv…!ù@¹ö§…ÉÅ"Œ³Üô©Ó9íP°ýç¶MIÃUöäŒV+Œø¦d ÿß5¶kyñ`9èŸû)ª‡S: úÞïíËr8;þÍU¤Yd·# HÁ8ïøtþµoX-ý¿»Ï©ô m*‚q‘Û\lžˆÆJí™ÊŒc$«d÷cëô¥óPìXœ€zp*ˆ• Ë•àc•«Öªì»ö«3?L•£v"×"A3 *ŠI‚ùÅ8#Î$ðrõø¤2ïT±*Øþõ¹ôíO/”éóðxÝÓ ¥}F5pÒ.á’?ÚÏñzžn¸c8É?{¿_ÈS”åðAHÏ9={ «B»O\{ô?‰ý) 6§ÙŒž>ïéøÓZÜnbsÎztÿ?J\a²8Ú1×ýÓùÔ¡ƒ;®3óœàñž=z~94µ*<Ã8ÁÆ9=jÌ(»†rHn÷Í2hÎ÷ çû]?Ï5$fH¦,¡'g0s×ëMìJÜFB»@'Ø ŸÔÕ«y&¹´GóTà·uãÛó\¢Èq¹ÙÁŽI?äÔºpÛ ÆÁS¼“ÔeNžßZ™lRÜŸìÙVY3´íç¿N¿§çQn"ÛÍÝÃÉ’3Æž~•}€9ÁÈÁçׯçÿUã;aqµÏ9 GéïúÔ¦SB»yhùAÜ@aÀå»R}¥%&B퓎ýÏAÐRœfP8;¶tþ>¦¡ŠÌß2ýó•çÔóL‘²(y™dÜçf'}+NÒ0¡zÈ3‘ÜóҲˑ”̤Œúf­énÑÜ}™›÷re‘°@<ëD¯a­Ë^JFÄ€½xÏ_¨ëõúŠ€Û’áÛ'q8Oùä~cÔÖd—q]Àœ{ëŸÖ ˜þøœåAíÀ?ãÇ» „ÆÑžÐ¾ §~Ïôõ¥• qFƒýt‡ ¹ëøú_ñ§Ï{k«$‹+“±ž§üöô éRX@âV½¸@$n=½‡ùþ™«év- -í¼Èàlþ#ÀcÜŸËLŽÂ¨…ó%sžîxÇaþ}=êÝÛ³µ dSœÁú}8üqõ¨â·ÚÄtôÿ?þ¡Bî¦â3ýÐ~¿ýÖª]BFЧŒgw¯¹ý?JÕÚ]þT%@éúþ|þ¾ÕBá¡ ¶çÎЫÉ$uúú©§¨šFS|À†zqþzþ]j9c`y^ÿ×üûÖœ6ÒLw:xJçÔž½úóÍ2il­Ã"ò¯ îÎ?ü«E-H±VÖyí²mß$ŽF8úþ´Ô‰æ¹+xbGç×ß?…$S0¦+;np?Éÿ"­Û4OµTäŽHÎxÏ<~'ùý[OJ³dvY.N0@äÖ…ýŠg”!,2xÏòÏáê %œ†a–P?Î2??CVn$T´ß!=ÿúÿýc\í»›$¬sF=Ýps€3ùóHÊ€l÷¿\gçõ¶BÄU†^& ‚Žä_Oþ½9åŒÈc@I>€sùþ~µª3`€Pºg¿úvÿ?ZpŒg–S21ÉýÏçU#*ääsÎSéþsBÜ6í¬½xÇùçÛÿÕNÂ,Ã$LÚè±Úr’g@OçùS®t)C/̙ܯãþÆ ñIò±ÚHèzcüãó«ö·8‹2lŒDä{©ÇÔwÔ¶ÖÅ+39m|Ò]$f—‚SœÇœ~_áH1¼l“¼¬N?/óë[REo{oöÝ9È“9b#×ÿçÞ³®#ó@p N pqÓùóè(LE» 4´·if eîòG þç­Ë}=¥”\ϸŸ¾!8ôÏ>˜â³ì5Y"|N¨“û×Ç 1Çá[RÚ^ìþÛQžF1çÓ®j$䊞Ä2/˜Ïq}¼-ƒÉù˜Œã®1H²[¦œíÐÃlÏÁƒ;Ÿ|g­[èv÷Ó^¦ì s“ùÓ4Ú&˜Ëµíclô;qýj9£±\¯qÖLŠZï›|¡Ã‡$’028«Ÿ%ɘ¤/6 òí§¯kô‡³,ÖûmAóÐǺžµ™u¬T“sç@[æT•Ô0ôÎ3ùP¢¤ôcæ²ÕõíR uÓ´Ö1»±gÃdÔç¸'ú{Õ6ÈéZz<»šæRç'œàË5[OŠÂ;W3ØGoœáœþ£ŸÂ¦¼¿Ó‡“'ÛÁe]€FÙãŽqÛ§ëUÓ•æËWm-µ™rÎŒgwòÍsÍ/—&èܵ»}vžàÿžqZDÃpŠñ¬².Á1ŸJ Ð”™ŒPfB¤4~j’G^ETU„Ëú:êè· FÛíÇZ—Z*<ጱäÿ¶•GEíõè!–?(±9 Û*qZì%„»;1ýT·óQI¯|iû¤Q9kdàr£¿µI†+‚ZŠÀ¬–qe†Bã¦3Vv ýåÏ·ACÜŠ ßûØ© ¹[sæ¼d…<íúRm*Á#¶Úf ï¡KÔµ¡ÊîBG±õ§E(bèOáÿ׬~€ùlQñÙ‡ò­›4(Ý‚îî‘YÉ$Zm“E@pøVv¥n’+ü¿;(9¸ö'´pP r+2éYÜíÎF@•1z”Ö‡4…&F3I²v‹=}ÿ!SÚÉ­ÚËnˆÖèåT …X£¹=j=FÙVò%ÀåñŒcù“Væ°žO6 qò2å×#ŒõëÓ§ºŽ}nAbÐ¥üžZƒæüùPALö5«•#£géÚ¨Xà *Qbeu8`øU®ƒ´c ©–ãŽÃÌx>‡4Ç·iŒqÆæ7$ñ OON) ¦s€=÷ ’º\¹XœðsƒŒz{ÒÕsŸ.ôë×¹‘ƒˆØäq’õ«Ì x$aê2OéøžµríOö%óó©R}2¿ýz¢7 í Û¦sì=#Ö®÷%« ï7ÇÓÓ¿L㎕Rõer¦‰PvëŽxöïØSI!€ff ÊžëþGn*͹idWä$¼ £Œäp3ŸóïOmCr(w«7ÜÇ]¸ç¦3øòiæî ¨ÈqÛx'ÿ±Åo%£¼FU`Œ°TêGq*'ÓÿѶ¯švíŠ2¹ÿõÿ…G:+—CžžÆ8“ÉXä,3Á-ž¹ÿ=«=m'´•¤$—ªºrGÓÖþ£¶Aå\ÉmŒŸ-˜ŒgÜã"²^ø…™Ü`’£ú9üsZE¶fÐÛ{•Ÿ{Ê €0YÀÀç§ÿXVµ¹·ò•a‘HìCè:~5ì×m`Á»Æ?/óÍhé²F×»ŒîÉcŒãž1•朢f–öÀ\ çð3øœ~Y¨È"›j¹ ˆÑ¹Ë1È=zý $ÉpºÛÉ # 7óçç4ZÃx÷ 2@#EÎÒǹêGò¬úYÒ´µ¶†á®‚“#¡çðçùSU·Í3”w$8é¯oJ‡P»¹HÄSáºÿ/ê:ÕQtÙS×»$‚?ï¬~”ÒoV&ÒмÄczàsï×ëȤhwüùŒç¸éùJdS¤¬@ÜpÍÈïÐãô«B±rO8ç?ÒžÂ+ˆ—3÷[ùŸAJ©Œ1a6玿QéþEXTëÆäœq埨ÕË®@!G±ýzŸÀþ\,Bц]¬A\€­ÇOÐþ”…Fã´—RÛˆÿP­«Æ¸“Æ}1ü¹üéT–|¿±àƒïõý ¤&;Hëd’8ý~_þµuYö®WJeþÛbáºg?Àk¨üJΦåÁhj· *";T¬2EFAükœØˆŒqŒT.}¹ÅK!*„ã§5`ŒŽOj,2§h+MsÜ:˜œôªì2F”n €J’þOP=FÍ´gƒN8Ùß4Âx 3ŸJw\ö§†óMå°O¥v=¸â¢„£~´!ÉÎsN˜ü Ž?¿×¥P=Ëy=« GüU¯ùæ?•nŽFy¬4ù|`}âÈÕéN„¹Ûâr@OSŒwõ§ ÜÑ“ŒñÏoϨuôë1¡$/~5Q‘­Tm}ÝÏ¿áZ¥tŒž™$¼ž:ÖŒ#;vñ¼ýuœÙPYWoÊNsš¹hà"–ùOÅ[Z}ILª.DL¤£,FO·¹ÿ8÷»8Ú†Q¸ÇÈÆ9Ÿç½W”+F0 –r:{g¯áÿê©-Ÿ Êq·¡¨ÍC)ÑÇ©äp0çò•66܋О;»ƒøŸÒž˜Ü©$‘œôcéÔÓVˆŒñÏà{ÿ@*…Ð uÁ‚{|¿¥Kî ˜Ür8ÿ?Σ0²¾9SŒŒq·°ëøÒ³8Ü äÄÎN?SC$¤obF# ùùÅM„¼xÀ%8ÝÇÿ^>• …p@ôoq÷ãSƤ̥H6ÝÏýT=nÅ3ï±ÎbN×ó¥³Û·ˆÔ€ÎyàuÐñ¹]ŒÙ¹nBqø -c%ZTd¡ÆŽOÞÁÇçSr™ v!“¨žzÿ{¯?×ðªSBß!€y­ÎÎHõÁ©ÞS}ÈÊÙb{ñózr>ƒËñÙ´v°#óÏ©¤®„õc‚7s•=Hsü]t¥wËá†ÖÝŸ›¯Þþ´ÍÉä¨(*G]ªxolš0®¸@à‘ÜòiŽå`–Cpw§¡ëÚŸ;ªš7 Èr9àòN=úÒ!XnsʲáHüòzúR¼xØå€# 庞{Õ­Ž–ÚušÝ%C¸§§¯õZ¡«‚ºtÿ/m!zN úsúJÆŽk«6ÀÜ FNà:zt<ö­{=rÒä.ÐBç ç”oϧqϵfâÓº.÷Ñ·€Åqƒ¤1¶NœsëútëN1½ÑùÕÒüTzŒ…%Ã;¨ÙÉ<€qßž¹íýk¥¾µŠös‚ÈO#‚?Ïõèk,–Îaó§ÆÝÃ߯~”FWÔN6І³Û® 1ÏON>½=}jµÌeJ±ÎAùÏoZ¿b‚Œ!ƒs•ÉÇ| sŽ*ÍÕª– õnFB¦1Üvô÷ªæ³®Œ@WÜ0éŸó×óÇ4°\½¼‹2ÁOÜÈéÎ?óÒ–hLÇ'up?Éþu^Xä\œ’¬ü;Ÿ×е©7±»i¤Õ« A¬„i áuÉC×#ÛüûU‹Ë@–ïÃhbþGÿ¯žõ–¨bgu çlo“–ô?—ùíKÞV%«3ªƒX·¹gòÆÀSúâ¤{Ør‹ÊÎz¢D üÚ¸äškH˜n„ŽX|År9ýkFë‹Rd³•]sÂ9;};ó“YºilZŸsf{õ þðŒs…`>£ýjÄš%Œ ’‹W™“Ù÷úÕkn ÆYÍ´£!ÕçŽ:~—´QÌÛ¤ŸÂe™Ë~˜¨´¶-[sV9<øÂÄbUQÂãîþ•Îj+¥5ÖfŒÜJ¹aˆl÷ÉÉÕrçV†æ†òÙûÛUÏàsî*¢­‚Jf[Ü©G¹SwõÅ8+-JV-"µŽÞò[9 a}桚îÓBi²EÉQ3°ê ïìMY½¿¼veˆ˜ÓHánOÔÿ…Tû%ÛÆYãTÜpK“Œçœäàð=þµ²îÈ}‘VîæöÒkYÈóHa0# ÎqÇC][M%ŲÜJ‡%Ǯޗs)cç>>ÒŒG%SŽ98çðÖØ©¹Ðü…ÁšÛåçÐ}ßÓõ5:2¡ØÈÓTÃ$öÀ“±ÎÖõ¿çÖ´Dx眎ج— iqçv#“·ðŸÈc굦  ^¸¥.á—PpQ²Ú§nOÉš`Œ–°éÜ qÛ´Ž?*ŸAŒû¤a õÇõ­‹<•?3“ŽOJÂi32CÍ+?Zè¬aòmÔVsœ1Ïz™Ž#䔉°°<`Ç|þ”ÄŒ…bÙÉõ*Ä©Î:bð‡$Œuç¥Ag+ªÃ¶í&ÁÚ®r1ŸNj"ø+4Q7™n ¤ŠAÜ1È#®­Y¡Øó ’vއ¶+ •Mä¾\þH ½ 0QF÷ô÷®ˆêŒdµ5¯%ŠúÖ=B‰Ññ¯µB€cv‚;Rio$zF¢$‡Ìw Á‚0ªƒËœD»Ùg,x£— 6^eB'èièBA4¬xÀ\óÛ“úí¨ÎÕlaXöQŽOaVÄI °B»rZR=É?‰$~T€¥«ÿ¢è–v»s$¹•—œôÉþ¥g!Îr£q¯lzŸÏùÕaÛRÖÂÄK$ Ú¤÷9þµ_ „™0ÙɆôúŸÌ ÕÅh'¸±™@Š ÷Bs´{<ãÓÞµímmȉ¤ÚH-ûÀ} °ÏåYqN Â+p[ÈëÓÏã×u¯KÜÇ$h!r[h$¹žzÑ+°FìWù« #9!qõÉãÿÕQÏ}73Ã’ŒŒŒ€Øgô¨¬ïbwb¡°ʪ8ü}ý«2ey&–r£î³ÃÛÔœVJ*å¶T½×,#`‘#†t ޽:Ö*#Å$¹O˜®zpsÈÿ íŒ ªnŽ8äØ7sÆz~5ËêLD›Ii~Q× õ­¡+èg(õfsÃåÀî’f5è9Æk¢Òl,#•ÉA0ûۈ؜ùñ\ú«EæÂí¸`õþuÞ\ K%Ú¬éŽ?¼ÿõš*JÚQ·3HË{fcÙ¸üóTÚâày]îÞ¤…òÆ2;wV·œ5h›hV ÓžŸÌTWW1Y’DàŽ wôÍbZ2¯4Ñ~E‘zB‚qúf²æß`5»*:®}A­;Û±öf{y2èz§¹öõô¬k›ö¼ÊgxÜã‘~u´.̧nƒìdX±òÔ9Æ1íÛñÈ­¨,Øá›ˆ8àdþ|zæâ yåùwû¶l{àò9ôÅt±—ƒLvÊ}BŒ€02zcÔâœÉ‹-Å{KmÈS·ž¿ŸZ«-Ө܊ˆ˜à³sùU)’Ü\£+pwÿ^Õ]‚G&"!p2?Ê8úñõ¤¢6Ë _vH ~ñÈ9ÿõT€’0Q—“ÈúUX®R’шÆ}sߟ§Ö¬F8ÀÏË–>ÿçZ¦$î?JQý°åŽ~l“ÿjé·-szVªG’y=tu•]ˆÆÃrGJ€˜ôŽMLØ$ñPº’üvklDÄ?9ëÍGÓߎ´óòöðp)­ŽGJLdDíÎî™ëޔŵˆ¸>.ê##ÿ­µnƒ5rÛN‘Ôo89åG9éŸoóÖ›jÄÅj:I‚Cæl`.pÃ'8ã'Ú’7uO-cíWs´`“×¹ü}êêXÄtK“’Jã¹öÈëVÕ"·Rr?ÙÈÏäk.d¹œ†WóX™T©+OaŽ9¨îÛ ¨›ƒv¶1ÉíÓ=8É­I%Ü `Î=\gÿ’«Ç¶1¨\ŒŸ¯ÿ_ÖŽn¢±–²›#$0¡ÏÌsN3'Žzã‘Ôž\þË{«„Q£ Œp¼ôéõÿÔƒF¶‰2ßx3Žúý)¹Å‹9XOïfe/ÔÊ2WæõíÒ¤e;€Q·Ü‘rOLsÎ:WIsm À°ÎcŸÎ¢‡KV¸3ÈiÚŒ ÀõúÑíS: *kµ\Õ#ŒúqùÔÒiPÙ¹ÙÔq‚3€?§&·X•J #®Ó’>¾é’Ão:fVäÊîÊ‘øüê9Ù\¨æTm1”[*“Ÿ|ätíÅmXk–:XY„RîÁÏÞÇÐñŸûê–M*ºb²I’C‚¬ 'ýÏJËŸO¶3F I$˜çtg3‚Äý^õ~ì‰÷¢oH„̰’w¹ÆGaœüËþ•ÈøŸQWÂ’¿ÖüG®ßÀÖ䬺‘$ÌCÍ·žäžÀŒ× 77^c.pK7R ëœöÏøÕRŽ·åбo0ÁV<àuõzqõüjô(Íœ‘Ç,xã§sÿêëaQB¨SÔÆ;‘ŸäOZv|É$‹>¶NNqÛ¶søVŒÍÝ8k| ˜+c·×äãòíŒV…ü^Uû°ù¢’T¨àþ?QÖ²ïFÛ+–€³¤c=€^‡óý+nÕVûH‚w¤ Ž; Œc¾ÏzOEq¯"¨Ã1-½—vs¸2{ÿWoCPM9ÛÉ¡ùÏø»n¼R­€sƒÁVÿ=¥šÔfU ŒÝxútý;RæÔ-tgYËåMåÊ>PH''é×òý>•­xÍogn»˜*¾Öeþô?Oéô5•{k2±#pêÁäs‘þ}±g¨«Æ`ºBÑ8ÃØ8ÿ?¯®F¯ª¦„úf l˜[OrÎTàù‹Ç|`ç§n}q߉uxš £¾@JƒµÁëƒÇæ?À÷¬íVÅ`´‰„ƒ®Ø¥_ãƒzŸ¡«š5Ù¾ÑÚÞRsòÛ¨==oËÒ“_i»1—¬cº†áH(ùF<žOÓ>˜Á?ίÅ.tFv·ÝÏLôÆ3íÜóÅeö¨.lÁgeS´ç¡SÁägž?Î),.EÝŠ¾GŸqè?ÃñïšÐIêM©FªDƒ!ºý}Ïù=qš¢äß§æ=ꮢÖm¿%ã'ûÃŒ¨ýkj9æÝ¦¶‘†wwÈôǯ_óšÅ§sK§¹•Ç<{eT""w wã·ÿÔ~•Y섾¶;]–^½ó’1Ûôö«Z„J^@Tð ã9aÛŠc¿Ú Y£bŽ£’0}1ÿÖþ¢­yb¶Ñx2Oý>? ³irÒÆVHßÌn #×ÿ¯ùæÅr¶÷ÂVïòº°æ¯_À›˜·d àó»>ýóëþ5M >¥” Ìw ê~aîsùäÿœŠ÷¶ìQ€KŽƒüçòüX—̀͜ã8ÿ8ý?VKK‡$¬ŠÈy8Èý8õý}ñEµ„¢Þ8X•¹òOCózúcüŸÑ¯xdmòL'EëÑIô犕tÐb °‡êOO__åù9t¶2Ò#¦í¹ùýÎiÝ yÛK&(ÕsÈÀã¯CšÑÓï£Óï„™Añ ôÉçðÿË}¸;›kIlsîsÇùüêO²ÙÂ7(Ü}1‘þzž±+= W75{ „°PbcõŸ^„}½gX<´¬r8þ%õ­"þ9âþϹۂ?tÞ£Óü?*†úÁá“9`CnFQœQëî;ýzÂv÷YNÛ¢QìdŽØª÷möxÊÆM|ÿ!Å÷.îC€²¡¸p{ŠÓ†ÎEÞÒ(;~BýCrIïÓ';PôܸºrYÚ9Øyò ùùVƒ^ƒsJ•oiì# Û â¥Ž4ove{‚Aaíêi6;ÆÑÀ¦éÃAû¼÷ìOô椖fÒ´É.¦À»¹áWûƒ°ü>ÒâF¿¹!-  <#¡õsÚôš¥þòŒpªzcëÓüûQÌÂöF·…l‘–K×™X¤yçdŸåùUÝ~Ö9´æ¹ ûèyWqžGÒ­è‰åè¶ê2r 'Ü“KlѼ Œ—Þ1øœÖ¢OÞ¹J>êG  È#æSÁÐsøŸz°·@‚ˆ6FÑÓ>_ÓÒ‹"m6GL;@X•~£ñ<ûœõª¦PèÃÌgîÉÓòç§ùï[èö3Õ¬®®$¸‰$””lùaƒøqÇÿ^·.5 kH¦PÒмãžk×Lš]7ÌØÊƒæY±Ç¸ëù ”Øo14²²H[jO뚉Y±¦ì>Ml¼Þ[ÚÍÎ<ÃÍgjŽ—+pƒ÷dm,@ù}ÿZѹðô÷rG-Æ NÃéÁ tÍWÖosi%­«Û$jÁCù™rGû4F×÷BW·¼eMoo,aÇ'æÉ<÷®»Jœ6›|°UÚ{q\^›ÊŒdý¤ÿŸj³ý­v†c`JDà»wqÀïëŒþ5S‡6‚Œ­©ØNaýÉç€1ÛË5“©?Ù sÈ`£‚zúéUíu‘un¯1ToTaƒøu©^N6ÐÍÇ*Hü·?ç1†ºŽRÐË’êHn%¡çœzÙg™Ž$dqÏè*adñE¿wΣq\ç¹NÔD›ÈR>ñíßü⺌YzÆ&-•Dê­’ ò~=ÏjÞŠÓþ%ò¢ÚÛ¸·¯ÿ®°­äžÖBñ‚0A{¥lAr“ºÜyÈ®9e“QYÎåÆÅKÂÏÄ‘²ܤuÖ¨GŒ7Íï‘øU縛co±Ü …,{Ÿ¯ëYêwŠõä|£¦?ýuQØ—¹c™Jçà×Þ¯Û;:à Á<:ãüþ[ì嬃ŽK`ç†î6ÛrWnÐx8à{Žù?*£ó4ô‚U`@ÇéÉÿèñí\Þ€„êÒ1ÿžoùîÿë×MíXÔÜÖ¤`œô¨ß‘Áä{ÔÌÞ†¡›ëX‘0Î~•Îpx©8Ûž§¡¨˜á²F*JHa ’5 ž™úÔŒzƒøT|{ÒcC Ž´ÖbH Ôð¥9œžôÉïÐw¤4E ÎÓ·¿4ª2=08¤bB r䃎½¨c3xT×¹Ö¡‡–«[yrWœâ°œmñ|G®bçò5¼LV ñj“ÐEý?úõPëègS§©WVùõÄäiÿ?V»ÂŒd©¦½ùµ¹;í¨_ð¨/GŒ€ ÁtEla-Ù0üÇœçüÿŸÊ§·'˘) 7;pqü¸ÿëUxÃe~lóÀ_âÎý~ŸçX¹RÇ@@õ?Ãþ5aþeHù+»’±ô¨® x²ð°ÈéÔõE(öcÎG“ŸöOþ‚›*I†Uùp’2ž)ª¬èoÉÊž¼>•µce1ä®é9ÈíÏjrv®Ckfë#QÎp0Oñgüæ´@p¸€uÿþ£jkªp\ŒsÓüöúTHÞaÎÜ@玘ýïY7r¬‘4’¤ißpO·¯ô>µ’„¸ä¨Ž9È?\gÞ¤]Ä*8ã¿sƒîqÁôª§tÒ¬G%BüäcënrhH­pN|²­'˜#2 ÀÈVÍ…ªZ¢`¯'B[“ƨ[Øìvžc“¸”ð¿ý~¿ýjÔBrägüÿ*R}QÎÁ²ªŽ ?§4Ç’+hs4«œ–Æï^;ÿ:Ž{¨â´wó(2XŒ…Ïr+™–e’FaºF–|ÓŽ¿È~ôQÁ»Ã\pE¸dfàç“úõê ½z)FWˆð¤Àôätk&FÞJľY 9éÓ×ðüÍA[ tÞøÎÔ]ÙõÎÞO`~&¶TâfæË²js]H£#ä´„sŒû®j3-ìiµn‚Ä<ž¸öïP.Xd”‡8RÜqëšÐÒí–f7’°hs’ ë€3޹¦ÒH”Ûe»c¨ÝÄ¢IÁ·êæDé×óÇ·Ö¤·’ÚiLDZÕw4·©ùÎ÷þÊ®ÉÊËûŸ*Ñ[yÁ8Éè?Ü•‡®k1˜M…‘ʨّèÈý+5ïh‹vZ³+_ÕRÔÚ8Á1#€gžIëÍ%™‡¼ž8ÛÉ#§¯¯©údÓt×f3KãÕAà×§¿hO ·ˆÅS!à¾éëÐsî=8Ù»{¨Î×Õ•.ç0ÄH@ù³œOÃù~5`‘ÝVàb¿$€‘Èÿ?ËéV$••Øm«Ûž™‡ùzpEVp‹É@#Œ€G± õéü½i­„îElñÙ¼;p›{Î2£üÿ‘ZšOî4­Èq†ÉãéŸóþ-5O¶I©ÂcÁLú¨ÀüÇëRh·>™fød‘7*‘߸·n?/B¥¬lRÑ–X¼7ò‘“¸(<þžÃÓü. "oîõR}8ïþèŸn'$²aGîÜdä`ãëÛù~ÅÒÛl‘×tMêùIúûƒÇùʱeLOHÉ\ ôéþþ±Å`jYFíËg<Øaùb­\&†È%a˜˜0þç×°­”-37-ޤÃ%·‰"“aÚãs0‚ ýük-%v»ÇvùýÆ<¯·áZ÷n,m..þŸ‡õ¬[”Ût[Qž1ÏjP]ÂL•㶽̊ê²9*W¦>¿z¸`eÒÌ,ÃäPç¨ÎGl÷ý>•ŽÃË\µ<þçð«f"@ÊCDÙ íœþõ«hH¢bx¥Úr¿Ýb@ÁúÕ6îÎA¾@ÊT²Œ‚ùëÅHaY ù‡F+ÎiÖÖØÅ8ùºncÔõý})¶+2kMV2 :r0[ä^8÷©’úf%¡€Ž‡%21õÇ\šK{1%ÒF6üç4ûìO·QþÂßIµ-Ñä•ë·ñÍe)F= Šr8ƒ<¬Ëp̹#€WúÿœúÔñDz,Í»Ã6ߟùë]üvvÖ‘m‚ˆ° ~uªiêrï…ÖØl®TŸ¨Ç?Jª›)Ó²9Ьûdm£¸8úœõ¿sdV—¾Þö<œT¹\¥:Þ¥(‰8m“"ÉÉ÷ z}xªÃÒGÇœ½s¸ŒcÛ¯°®œ£1SÁÉZ…â‹*6F3Ðú{bš¨ÖˆSÔ‡L3ÁfmçæXòT©ÎáõöÏëTå»×PÈ‹”‘Œ€Ÿ~}ªÌáâ"H³û¦Þƒ ñÜ}ÏéEÜòÂ'ØYpX(C`ŸÇ­%kÜ:X·˜/¢ÈdGÕ•'‡à’à’DDb_{gëŠ,.¢ˆÏNÁ€Ü‡³Ôþ7@Ù-üD:S%EdÎFâÜŠÒ¶ekd‘@ÎFîsÒ©½ZwG•‹Îß•AÎ_þ·ÒœUXmä÷géƒéþ*„2®ò1À*Ù9Çè>˜üjBO ä…<Uÿ?‡Ò ¤Éô£P”ûÁú¥tY÷Zç´L­ü¤ÿÓ@xï•®ƒwûCò¬ª|EÁhk°À5I"¦9 Ž• ¹íX›¾AëúS1òéÜÔ²|çð¨HÚ}9ïQb¬1ˆ<ã¥FO°çÒ¦dO©ôëQ9ÅB>´Éˆ8Ò¤ Ÿ™…DH$‚zgµE& Jr‚«œv¦¶@ŠqÜSf“(ͽ#cü¨:çßÛ·õÀ⥎5ŒmŒ.RyÏ·ùü "þì %x'=Oùþ›ÃädÀP:zÿž¾Æ¤±ÉùSƒ‘úsÏàqQÅ—&òI,s·©'=3GÚ”gÊü‡ï8þŸ ç¥R7OÈg}Ü(u둎~¿þªijµÒ¤y €z{ÿŸóŽ•YîZY?xŽ‘´`å½HçY%å›{îï\z}ýf™)Áf!Uþñ-Ë{îêüR€¹®k<ð91óæn¬W¶r¤Îxá.ñû¹äÜŽ£µBÒ>U7^HR`œ}ÕNj'$BTü¡T§ϰ=æ~•J6&â²—Â…èdã<`ÎqŽO¸¨¶n\eš|™ëJ --îk£ù:;ÁÚw_ö¥QžBG (8ëÜóùŸKº‚„Ñâ‰Sîíëêj-6Ò[ɾ΃q‘e»gp$úãñýR²W­Øm½„·çìöñaÀä×Q§xY …EÝÁ-Ž‘Ç~¦¶4ëtû4Ž ,ç«\úSÄÂ@f%ÙrQ޾¸õ>õ„ª·¢6ŒÜÍo X…&'ÜàßÒ¹ä‡ÉšVš5wAÃpK·l~Ÿ¯áÙÄLò3$hꥶŒç²}kŠ»wyæ%FÉ¥,£û ôüzS¦ÛºdÍ%ª'‹Ä"Ý¥xâ6³–Ïó'ëVíu# ¹›÷€±È ÌÌqÉ Æjž‹áמáî<õ{qòüËó?ýy­9´[FKH»†`ר8õª—"vy­r僶¤‘\ÊsBçø»W. ª’²7Ëœgðö5ÏÜÞ\è‘ù@n@Ì ‘ž¸€?‡JÌ„’RÎÇVqÐ}1šMŸ;L6g+ß>ù&³§¼iÚx`ŒloùlÇàûsô4Ò¸›±lj’>æ‚HWàd“ØÇ_ò)Ž5 ”/°Ù™²Oòòüi–ºxšõÏš¾Lh l<6IÉü€ZžöÆÝ#më3c•HŽÀ£êp?:z&-lsz­ö¥k#%Ê•bGõþuJ à†9bvóÓ[#€:ççÿ¯Sêj–¤}’êeväÄç=ºã¡Fk Šà±Ø\ñ…f<ÿ/Öº"“F2m3­:êµè*Ò²|ÕWUôÆ3Ür8ë[0.ΦGR6•‘ŽPúØñ^|6Ê#O˜?y”Ý8>Ý+^Æ3%(¾fnÊ‘ÆxõëÞ¢tÒØ¸Í,Ø.Pò9éùæ›ÚÛ¡†]Ïgeàz{Ž•XMPUöÝ£Æ<ÓþGÜWiÈûÌAãê?úõ›EÜŽKu¶™æzû½óÐàζԒF3YA²h!l2©½ aZ7`ˆ¢Mò7làr{TËQ­M/– íæ¹6Ôn®µã¡òÀÂã¯jßšÞâb ÓÆ‘ŽH ’}¹¦ZZAe,·*G•Øääõ$þCðª‹I$Ùö’É–å¤UQ'üûÖ]Ì–rÛÀÖŒê2Ä÷·Žr{ÿúënëP[eyd 4' |åOCŠæqæÌ÷-Ç.Å@lasÇïÏáW õ&VÙe­ì7ÊáFTö8éK>iqàŒz ô®^×P6“äœFN'õ®žÛP†hU‹®HÎàsS(¸ìRièÌÔÐÅ£³Á0‘ÈÆÙo¢C›³â :4c?AZ÷ÅpÛVB’„6*I"ŽPžvãÁϸ£™õ*[à²[ÌûJ2œŒþf®4¨Ÿ}—4×¼‚>Ns·¯SY†¦’/Èp¼eE^™¤“lm¤ŠÚ¥ú¹1Æêr l ÷ÿšt‹©ÆsË{u"··¥`hcý&|ï1[[©¬§¹¬6:"8<Õv9Àâ¤Pʸù±Û&¢só äàÁ›!­ÇÓÒ£Á,rI!ç¹ïP£îc•ùr¥!ˆÊv’O^ƒÒ£ 2Oj™ÇËߎâ¡<ãšCLçŸZ‡~0©¯Ò˜ªÃ,ÝHÁq€qšU$duÇëMá8<zƒ±µ—#u2.§LAaŸZïcФ —äV=§'»í˜¿øšÚÛÁôÇJÅ´$øžðqþ«ÿ‰ª†ÌÊ{¢”„¾±t0Iɨïþ}…Hçϵ?8ÕnˆÁ ¶r\ŸZmûüñqÏà+¡nŒ_P·`þëF:­Mo]ÁTçž*¼%¤·ŒÇÀé‘Ûš±Ë$ K §ëCBñ·˜уÏÏoÌTè¡NÑ}ùÿ?¥DÀocžý±þçùZXÙ‚†Ç#'¯§ùÇÿ^[NrO¯·ùü)Ðó2 œžHä{Ÿþ³0zwŸùü¾µ""ƒÙ^¸cê3þ{{R/1À]ßN¹é»üþ>ü:,8v†$ÎxÒ빤cžŠ'ðþõe`ÉW|ã*©!~¾ÿç¯J†Q"VÏÞ< £üÿŸz«stòKåeÙN~½ùçùŽ­’> >¹çëÛüûô¬Û†eP„—^\·n¾Ÿ§õ¢:²µÔ¨—òNXõcôë‘ùrGZŽ1å:+$lTsœ(Î{ôéïŠUÉ‘Kƒ“åÔÓœŽ´àœmF`€¤ž¼=óÆ:V¦c"ätÚ_, Çžç¯>€ƒõ¤E8; ù±ƒÐàgԃǥZ„^.O*[$žzõ÷"£"Páqà ›Û¦sìJábI%w}Ò#ßœvîTŸJ…–@§Ìݾ GÝ#ß<úZ’B eONWqç®I9úœR®Õ/1®F éžqƒŸÐçéT#CEµŠ[Ðϱ„’1ôg2x¬j’ßÞºE+-°8P ]ÜàŸÄÖìͧhn‡âìýÑŸ•NÓŸ^‚±nc…g‰X”3†ÞsøúzúéCWqËEb¬~`ÜÌ#NÄŽN;ýšŸÌ â;dÚŠ0òN}9걡î¼àÊ‘3yÝŸ¯Cøsš»ae%Ìk)ã=Ëu˜}=ø­­¹ k ÈcQR6‚sÇ#üóî5¬nl…1Å•P[=7sü¿!ëU¯£Ž mÞØïéÈûñVm×m»;/#'•à‡ô†²–ªæ‹A÷s»«¬Fnÿç¿­dI¾êê;t'ìSŒüǯ׌~gÖ´.IùåÚ9'hã©/Œóڮ鞒6Ynò1 çÔúòB}(æQ@Ól© In‹€ éžzþ_–zæ‹X U ÞBsµzs€9Ç¿ŸLÖÅõ¬–é Ü¶ÐÆ¤2ƪÌLŸjˆÝÛiQ,pÞçho~Ÿ§Tó]Y Ç[²€]Ì©¸ŠîI9d zõÿžµ"ë:dLV×N–' P[?Ìÿ*­Ï‰®Ò_Ý\YîHsݸ={sYÓø³TŽ4Q,K';sƒüÏ'?Z¥÷2FÓk3„·‡O· «‚X}?>¹ïV™/fÁ™ÝWáW=úÿ>}³\ˆ×µk’åÞÃå~_^ƒ5©&—stê÷2JáŽAv …Ç¿Lþ?…˜”®[¸ŸNµùæ¼Üé’y„úäãôãÞ©Ïâ9Lb-=¼xååù›˜íž9çðhO!ÊmÇNOý:wüûÔrh0®åÆpU”¾Ç¦:ÿõé¥ânCWO–úO>öàÊXŽKup3ÇB?/Îy¬­Ö=Þ_–3’  Gשü¹éÅX&¼Ó¥hÚ'Ø2Y@<vôƯ½[º†;D ±9R=}ù•S½Å£E[s&Doä§tû÷Ç¥tC P1`¥Hã$Ýy9ÊŸÓØµŸ%ÊiÖñF\<¤pN÷ž¾½¿&$×z—,9ˤó뜟©É©w~ƒVD—²K#­r@ãv0£×æ$þ¦³³y§Üli&rÃ?ýFµî4»ÑØ‚[ð§×®=+žEófN䳜éÇOQÓµTuBfÍ­å½ãyrF‰!8+“‚zŽ?úþÔùôç‡GÀáùÀôÈú~†±®2߸üÕ;Œ‹œŒsëÆ*Íž±åÆïvÑü[yÇÐûâŽWº ­™¡¤]µÉµBl®[À§ùÍ3Ä1ySDÑ‚‹å•Æ>é_oóý*)嵿C»•q•‘m£=HÏþªºˆ.tÙ-¥½Šcƒ‡ïÛ¯_ëRô|Ãéb;“¾h¡ KEfî?Ïõ­ß@b2Å]Ê.{„Q“ôäãó¬ˆârì„n‘€çòÿ#PjÒ}¸Ï,1î‰X!ŽÒÀã=zgÛ½L––*;š×:£Ï4‘G÷YögÀëùŸÐ×yqF¨Ë€6ögÆ”’ÖáCd¬g4›0Z5·Ü®çxÀÈýp=}êå´r+#Ä ¹cèzw?äÕ{Ø\yrIÓ67c¯Q[:"1’[h¦@¸‹’I'N?¶“÷nf·±ÓZ¤ÓZDŠ®T’Nç®r2ãÖ§M=Ö<•,C (ÛÆ>§úÖ]Þ·và-§î°ÆÕÞ}89þU—=ÍÕÑÍÔ¥Û´ç§f¹”[5rFìÒºhåó#r0žjŸ÷OçBÝ”å;Q³¸Œçþúæ°â¸Ô R&×¹·ÏÜ•–OÐóVlâ˜J°¬D‡ËÎà=ÆN:v§Ë¦ ¥©bi7ù1™/"¦CÁ=øÏµj­ŸŸ1P?u»ç ‰Íc’Ëp±|­*üÈ:m>¤{fºA( ]*¨IÁê~µ3ò*(§u+ióG¶ÖÅvHAÁ\tü9ú{Óo5Ò#æ6ÐÄ!IdduOéL›Î»ŠâpÛQA3•$n'è®e‰¸–ÚK™ä“q ¸I#$óþˆÅ0rhÄÔÀy†ð@ør£þcúÕ_&C–ÝŒÄ?y…v:½¦tøR(ŒŠãw˜'w¹gšÅ:CìI&L¿ éÒº!5cCSÏbAel–n‘éZr2±˜‘µOÞçž½?: ¸†F¸†"ñ ÎÂÄsŽÞßε4í?ç.»”oá‚‘À$c¯§5RjÂIÞÆÊí’!'îûX“ÅY¶·7bW‘ÜB¿.9Àçò¤;FS8Ç/Ÿä*Þžå¬Y#ù]”ät9ÈãèEs7¡ºÜËÔ¡KÖÏ/8!Ãþ$HúUüJë)m1ç‘vœúàÿõ¨ÕõIÌÞDÊп(ø<êqíX¯1bË máO †ƒÐæ´Œnµ3r³ÐéUŽXÕòBãT滺½mÑÓc÷#§ROåXÌàïÜ¿ñ ™?ˆü+{GU¿Žßžáxν7q)9m4›9ƒ]¬E··îËNyïדùTòűܪ3¿S÷Xþµ£u4–Ñ ©› aqÛùVšÕÇ›äK¦¸cÓËpÇzVkšZ—+- º…ú¢…–ÑÊÿµŒ}p+:DJKc7Ë×a9ÇøVõôMwí‚äÛ§ô¬) –Ô´a_Ë$sþI­bô3k¹ö„Žè&icm¸Þ¤þ}jòÝ]´ƒÉ/}ÌØSýj}*}FM±/îÇ ìxŸSW&ÓE¤J ä·Põ÷ªml$˜Ùe¸p|É"|.Hžã©8ÏZßÀô5Ïøtîžàÿ²•ÐsXOâ7†Æ±äîŠÀc´ç8ô©ˆ<ôÏÖ£>¾â¹Ù²!pr{óõ¦/Ê¥OLÔ’|Ü“ži‡*0yÍ!nƒsÞ£1Ó)òcÉã 5`žOzC’1žÜT{ÂH#Š•y>âšVÎsï@Êòt=éø%éNpO8Îzçž” ó›¥,C-I:ÇØÓ ûÙªèÍÐOÒ±¬óÿ =ßòË?ú m6rõ¬[ŸÞ’0|³üÅT6fsÝÊÕïH'ïøî{ÓoyòÂŽñmÎsŽýjb‡û^ô®O8<}*Žùw´xnäõÏJè[£Ô†Ù‚9P223øÿúªÉ I …ÆsÏR2Ë.rÚ@ìÎ3V¦e¬ƒÓ œñÏ©úS{“±j²íÞÍ´“€XòjS$–Ò)xÄ‘`Àò? ¥†G‰>lHÆHÇùÿ8«2ÈY0Á³úuþŸ×ÔÔ5©IèM*ˆä< }G¡ÿ'üZŒ Ú3‚@;†qøõª;ÉØÕ—éÎ*½gnÊppF èx#Ûõ¤ôE-G—ì@xTžãßÜÿœÓÇÚ7r0«ÎsœõúzަZX*€ÿÈþZGqŒ¡R¡±×ßÿ×ÿë5ʱÄÈ¡rÅG#êzöÿëöï^qµÁ=ˆÁÿ¾O•8±ò×dAÇNüÿZl0™rìJ¯c©Àíøúê¬IUƒaIBÒŸE$žqý?ŸÖ§[ ãæ#Ÿ—€¿‡Aî*âAe(ŽÄ‰'luüE>Rn ‡€qþøí>f¥$·GPÇøSîúr:b8¦’¢=ÛVè Ïò þæ˜Óo̬+|™¾ÄžOü ßÚ¡–FxÝNxQžwc=È?N¼û v„rmšM˹ػd®;ö?ŸÕ­„âr²¿>f?ÿ&š±ÊÅ”1fà§’=äûøwªíöEVsöPØÉYXî?÷ÏùëB¹Sš„ÆîHÌî>úm?(°9­jQG.™È$Í»m%™Ž?Ãÿ¯B 4ºu¹áH ¤sëÓüö­ °©¥JI÷  ѱ|œñÎHU7ª´1¬¥Ûsþ’…€ÈÀÃŽF2?õ®‚ßSµ™Ä2 Rxó‘Û'¿â§ëT,í »ˆD>K€sS€ÞÃÿ_jÕ±o2ÝŒÊ<ØrÈÇaéÇ·z‰´Ç”®–òVäg*¤ŒƒŒg¨æœò¢¯&ØÁÉcÆsôÎ~ž§0Ïr–Ñ4ÅAgc[ðüŠÉxæºc,ÙÏ,m«§:ŸW}Á»)®é¶Oû˜äº¸*ÄlŒöÝéœE â{«¹#µ•v-´ÝFZÈŽ/3…P›ÈùT`¶;û} 8Èû^U2H.÷ÓüiòD\̵ ¹îßdû0ýÚ=yíž•Y {©–F•Áé)9ý}óW ²Ùó¸E䟡«\^=Ñò,áo/¡ çüŽ{úS^BwêE;¥§ ¡F?þ¯óÅQXYÁc’9lžŸýrjG§[@ÌnîrGQ¼!8푚½ ý˜ßBgêŒdzdž}r~”ù­°Zû™ZR^ZÞ ¢†@åŒyÛžæº[¹£°µÓ´lNB¦~cøqüþµ›e¨jÚÝßÙì T ÎÿùäNGOÃò®†ßÀðÈYïîäšFêSåóéYÔ’Nò.mhrqÜ\“%‘h“~0 >Ù;¿úõ©iw®\ªù:|raA/oÃ?…u+ám=WiYAʆlàúæµ,1ª1$´qÉ5œ«.ˆµIõg$r,ñ0°{Un+¹ÓžN?ϵRh…ÉQKô1®pqÔ ú. wÒ¬Ó'É„QÁúÖdº^m»¬!ºÇ÷•½p¼cùR^àéö9*K‰<ÃL $ ±>äÜg×Ñ©ÚÚÅÍÖóœ7– úüzõö/ü={ ™¹Ž7Çʬ1õÉÇáU¬¼ °ó.æir«à7â9«SµdòÉ=ÏÈfÕnwEnò.s”•Ïþµ2xzU$ª¾b€HEÝùž+­6ÐÛ[í*yþ}i°*PÇk>b\¾Þ¿¥ÓMȯ©máë‚XÉ($¯'o_ÄŽ8ãúе“ [¼á¹‡2ztÇÀÖœŠÅö V t˜õ§‘r ¼ðIþG8ü*äËQF`Òì·n²0|ƒ?†ãJ4‹ 2D e9ÂHrqëþE_3l[p Ã`òOn2x§[Å%Ë• ’@À>Þÿ•NÀ’*Åa °,ˆ²?C$œûõê*É]ŠÅB8`F}ùýkDØ«>Ñ*·rµ^kãÉ‘Ï^IGä*y¯¹\¶1µ YR5 ±“å œ?á[Úd¬m!· öÿ& ºÓ B¬¯ºáu$`duãÞ§²ž9£ó2²U9÷¥'x‚Z–.¬íîáÄȧ=¸úµÈê¶Òi× ù‘³o]ÙèO¯ùúv|ÉûÕ;í:ÖþŽxIÙéD%g¨å˜øÙR"?Î6©ô'·Ö¨kzյݬ6°³%ÇWR§ƒèCÞ¥·ðõ×Ú&¤ Y2®Óq‘øTIá·KÅ€ÞɘŸ;1ÓÛðö­—%îdù¬bI¦Î!óí\4‡’0>¿Ò’hÏp©¼sòŒcðú×nž¶X~IæS·å`Ýýkô¹ôÛ–”ºÍ"ë¼u=¸ïTª¦K§cmÖâ_ßnQÁd|¿€5xC}Å#9RŸ®:ŸëW$×!½„Ûê6ͽNVXTyÆî‡¿j KyíÞ[Y·ªýåtÃzgüÈšÜj+¡ETIlª›ã?ìr téëV µš*÷ ÃèàÕô°’$•‡+°òO~žÕ W‰X|囀çèj9»ËÜÉVD’B¤ä rG8鎘§†Nw»6;N?T50ö¶ZsKû±ç³1#¶02?†ãÄ0Ŷ Hå//ñ7N:wúP¢ÞÀÚZ̰Áw½Ð3Ê`÷ã>žÜõZãS–éâ†JÆ £€qóËnü,TVrÃq·œûÏQ+eß~Hö©å±ûDþrl 0 ,{²ãÁ§dž¢»ètöÑE ªC]ªCU?±4Ðí „nêOøÕH.VÔ%¼“K©PàŸþµM6µmoÛ¾á×øb¬­+è]ÓZ–f¶ ˆ6ª_l×1©_Ú½”ëk8Ö”äÃÔñ[êk:té É«$‰‚?Jöðý•ÞWS&0Ð}¾µpI?xRò1"vŠÆ)CŸ0žŸçð®M†a§Œ ®K_Ÿ·¾*ž» ½­¸Ž €àqÉ&³#Ö'°‹ÊÈiTp;rkV¹Ö†Iò½N•ïRÙ¦/nzm•~´ûmRÞÖ YÕ¸|½§ùõ®&KË›—.ìí“ÞNœTqJéŒK…ãåê3ý(t{T7µ+ˆï‹¬›NY{Ô;ö¬³4âE‰7Œn ·'ˆüêÈg¸€¹8_©œñúÿúê])?ׇÀŒ”ÁÁ&«áD½YÊÛX8Í9µp«*pc’̽}Iãü÷¥Ô:³ÀÒ>íU ÷4åTEÛÀÆsŽÝjä¶ìpTŽxþg¨ÿ ƒBœgœr3õý}ëDÈh‰“¸= ãüÿœÓ¢ÚDƒŸ\ÐJî‰ù}?Ï_þµ,xšác 6O§ÓÄnxq{]©Çç[Ø>Õ‹áÐwÎsÿ,£þµ¹ùW<ß¼m v„Ÿ—ŒŒúÔž¼Ôn7zÖ,Ý ŗœqÚšAJqÁSÏj˜ðØ95,cdŸ¨â£“Œjs¥rpqéQ“— 08¤VàÜgxóÒ™!a€HçÒ”6AÏqƒMlœ?€CáF{ž3H€€ÙôéïN|ì¾ôõl æÌ›ƒ‚yïIÃqRÜ«%Žr}*¼æäU¡=˧±´ÿ›Z¼$yqÿ|ÿl·ÜÉïíXºIªßú‡lþýj¨ìÈžè¡ÿ1‹åßÏçš/›89n¸àç°ô j×ùè_Žþ¿Zm섺´u9$ŸN«uº1* ÈQÈ9éVd i(8\dc׊„üÈNá÷O^¢¬ Õœã•ù¹äzÕ2IP-ƒ £äg§éíP!k’¾c”?Ý sü¨³b«„ef¿b}j4vYn퓞¢ÀlÛÁp€Èó÷ºgüçóéV>Ð7‚@ÈÁþDë9.q‚€ ¨È§ó«|ÅLlXƒ‚ ô>ÝqÏ­fÑkBÒ´¬œcžPà};¯?ãSÅn÷³8“}y'>ÿúõX(RQ¤%Šå‰RIïƒÅjÄÎyù†H?Ò¡»†5´`®Üw `þ„T n‹¸îIn¿ˆâ¬³Æ™bÁ2q»8çê?«´²P{’vŸûëåJìDm+Æ@\1#˜‚[ú©,ÈN –eè–Sø‘ÀÕ¢  èÆÈýA¬ù7ÊþYf\ýôݼðJ8öQW!€™Ùò¡FþÐwQÛ'ÔäÔXf”3fÝ·®âO§fϾN:TBeoº í_¾Ö9ɇ½C."TF_›<+Ÿ/å'§'õ5h]WC’Nârv±8çŒgœtïÐ Œ«F‚ó´¶[‘ŒãÓÓN¹©˜H£x)=WÔdž¾ ô]¢l/ ŠxlF21úÓ5HD LÌx ÉRsß®xãó+B+Y¦ðüÖöæI¶8(W¡ v}?ƨ†E wÈ~é’Fz޹Ç×¼V¬°!xaŒCŒ’ËÿÖÈüè“ ³nmFèÌÝž8>üœ{g·ô“PÔcŽÞKXÛÍ™”n.qÇ¿§°ç¯j­q§ "#Èù'êÙ'ò¬ø4kɆ`ìËçõ8jROVÁ·²&†ÞG™IJ€>V*yÿë{ÿ*¿ö9¢dø<åcwÈõúÊ»ôˆ-íÕ‘ ô¬ i¶L#n<Þ‡ú~<Pªs;"¹9UÙ€îN┱œ’{g·5sN´XKuÜ>fØsªÓ!A,¥ÈäLägòüêÝÖ"µmù] Ÿ›¨÷çò«}„»™z¾ ¤x”¶0FÏ¿j†Ù\ÀûTGä•L¶;séߨ¨‘šFa ,Ä ßtœsßަŸ$m ò]ÈÚ 6sÎNzžGJÓ—K}nH-ã€Y@˹Éç°9úþµ4i”°à`剌#ß¾=r*hÆ»Byj ’H'q þµkDhcNG ›ˆ?\dŸ| ‡&ŠID+ ŒpAŽ<åŒRf8ÇÌ{~}«f8’,2çÕÉ©®f=Em°aWfû»S%ò:g?Ö­E«Þ2|ð(`>T~ üsý+šQoSx´´7€@÷Ú0 7Ϊ¼¬®BÌÙùj« SÊKÏ"ãw£è3úÖ„0›XHQ¸c€ þ¦¡èUî"M;)2Z…Î "¤Ü1Ž3¥&ðª2ü÷Ȫ“^˜DwÇ;OO^˜¡+ì;Ø}ÕЀmwc'=÷¬É/X„ÄŠÄ·ÌpOà>Z&S%ÊnbÛNàÊIþB¢€çït™‡óï×ÿ­Z$‘ ¶#¤Žªß´Ò÷DÞ¦ƒt#=¬ëè2ÂÛdèJ½ì{çZEAã=x™}jÏ•I>|`rO=¿•(î(u¬ÁŠéyìàgôëùf®iúŒ7òÉs+p>aÏ2FdÞ¸ÞOc·Cǵ\%ËgØû(ä‹OWò±nƒpÅGÔvÏ8Å>7Š%IáxÕ… —#ñäwïV.¯ekxç³Ø!ILW1È™#œr=3ÀÖ.¡ ½Ù’{86E+$@›žHÏ|*KÞÜOM»[‹W±y°™<…' ¤œtÁHÈǵb=2[Û‰.ïÝdKgÛH>LŽŸ‡JêTªGÇE‡jR¨Ò²`›»1ï|;i2,mÇ8Ú95É_éÏjÅJ€r@ïôçÚ½™vƒÎ¥r> )$Í’pœí?¦Í*Sw°êE%sœ‚f…‰ µOœcÓ§zèa‰¬ábRÁÉ*Áx,yžqþ®fUòŸŽØýoÒ´ôSb‹IðPü±3vûu÷ü+y§m ¢Í²nµ’1¿gs{ÔöëT#Ô0"t9ä ÷=?ž+T'9¸û™Á¬›ÁäϼsòFG§¯JÎ:èS4-µ6NrÄ7Nxÿ´íF÷ÏÓæKnaÔ~½ë=gàwÇ8ÿ?ËŽj8ß3d…¨è3ß>ÿäQʯp»Ø¿f>Í c‚篧¥VÔ5°²D㦮xýøüÍ6yrB@ýO>¿¯¥gO(ØIÜÀ󙿯ùïT•ÝØ›ÓBª±2îi q·ß}06®Üúõꕤ[¤ó ’O?äÖ”J]YÂá#Ïð«‘ R¤éÙ$ŠÃpùF~÷á× îqÀéßüÿ‘L»M·.Êä¾2zgŽ)ñ.mc)ÏL㞯ÿªŸAu4t«c&W,s òþ—½iKàæì{qŸóî*¦›"µº®Á‘ò‘Çóçüþ5'šÞ~U¾P=Fâ1Y»¶h†\Ï oaÏ#äþ¿çÚ³Þuy S‘ü'=¿Ïó5=öÙpp‘úûVtAâ}Œr uàô­"´¹ »’y…K烎•zÂÜÆÏÁ'Š[KUˆ}¯&yÛÉCÛ§ùÅZÊçpÆp@ïþÏj» "߆ðVcÛËûèV÷™þÃ~uƒáÁ˜åaÀØŸÍ«gÛó®yüFðØÜ`6ãäÓ@)çæŸ¥1¸ÿ Åš¡‚øÔz©ƒÎ©x<I¦sÁ¤ÊDrü§lg4Ò2¸`1Óô§ÈòOoJŒ€GN•% ¸ tè1Ll“Ž)Ä\œÐù¹õ>”Ãa„b1Í4Œã'ùR» ŽO8ô¦g–=)+j€úvªP1õ«’yªsUasT¶¹p}Î9¢u=LôÃúûµlŒl†±´Lý¿Rã?¼ÇêÕ¤~g=Ñ@aµ;ÖÈÀ”öϯ­%Ù+2üé8=‡áMOøþ¼éþ¸ñ×ø:ï"H÷g¿`㎂·[˜=Šë†ÏÌpGSÛò©¢cö7²JõÎx¨•ÉŒ½õ©`,fU uäcê};U1-HÖ',6òyù½ýºTà ˜p¥:ç‘ÿëü*AÈ< W¨— ìsëEÂÅÛt’dTín ÓŠÖ·±2@S¡‰éíÔ~µZÂŒª}ËÉÏùýMmàÏ*¸Îÿ=«½t4Šî$¨°œ‘–m¡·QšK™¤vU‰ÇAýÐ=úÐÎÎ쇠’8ç§?OÖ—–1´hÏÔ3·§©÷þul¡éÀi2ÒÆÏåßëI+˜ÎÞ+úE5̨JË*ýÔLÄüª#6Ä%ƒ(¾Pÿ…¹™_vq?ìü§ò$~bª6Èâ! õåT§=ó’÷⬿ïq#óR DIJ!êåܹË~$gó«Bdo„‡$ ñ€{Ž«øäLuhŒQ£læ?9‹+êA;@ö©Éq,¤ŒûB“òþD`ŸÇ5bÏLE_2r»ÏÞÄ;çÛùwKVM¯¡ÒýàN–¡sÏ øjͺ[¼¦iP±þŽ:ãŸzבБˆÝ¹Sã‘õçùR}•p’ˆX±è1ü‰ýjNcå*Ç$3±UP@…/ã‚:{àýië ($«$Ãuä÷Qÿ×ã©éW>ÊeLgwmàäsý•<À" ²¬p®v€Ãn¯Óùðjyб›—WvÎcÈä²Hþ_Ò¯é±õhÿçœ?9®ý}§SÝZ‰r¸,#Ÿ`ÃéžG_­_Ñ"Ù’ãÏËÛ#×¥-£©¡w!HXŒò1ÔWvòÎÒ`’ÌB œõÁéŽk¬Ö®6ÛɰPñžyâ¸i®c‚જ„8 `œÓó>©ÑPªËÊße‡t Co xëíYšòK'–²‰÷“ŒóÆsPK<·R°ÆÄOÞ†P~r1ØŽÿ§ç‘W·†{y£eÜR¡ˆÆG‘y3ÜH‘¤™p¡—žçó5r s¦[$–ÄÊ ’Û@ëŽyê?úõ¿*P±‹ošçc$Œ±æÜø;TœgëXëÏgt Ô4â…ÎÕhÎw};Ó£ÕÒcæCp™þ4~‡éŽ•Rï^¹ˆn’×pŒõÇù"³ŒìÑr—TÉõK;iã|êÜy8Œdt¬¨Œ2ÞGn›À±þŸçÓò­6³q;îT~znéëü‡äGá¼L¯ºWN1–Ï×üúVÊ -L¹“gq+,±\[õ;F1ë‚xúb¨_\5´¡T+I7–Á\t8?Ô  šœÃOŠe7ífÏ2©%y-¼³IâI圖òäaãŒ^Ÿ–=+%9“(ëvw‘Û}Ž9p©3Ióta´‘üå\ÌP³Ã¨.øÉþ {פ^ÅîUÃa†8žœd˜¬°ÛE0 8 £Ûðÿ&´…M”50•>Ï»¤#¦O>¿_þ·ç ÌžtSMóæùÔ íúýjÕüÙj/r±™T®éÇz«ko3[ù“l Î]— j­¹ëC¦‹[ÒB;Xsîù­;mJ(ãA mM …ž¿§ùÍyÜn±\|Ä•ÝÈö®ŠÚæMB_&Þ=îßÜÀã¿l óùzVS¤‘q¨Ù¹{‚]¹ãå#§ÿª©Ý«kb&LË$‰2H[…eê¹íßó5¯c£ChË4§ÌŸh˱áÝô¬FóûCSÖû];ç$ñ ÿ}Vqµì‹–ÚçšO´‰(¦P²'fäô=¹üêo[2´èv¼I-ÈåägÜr*¿Š§KH-ì¡F,Bà/\­]Ù¬ô¸Ô¾ù$ù³Œdv?ÏãMüøŠz“$Nu $>]µÜhø*`Sš….Ú×Zµ–R]†%9ŽGåòζtûxgÓX:ÀÌ‘È:žõÎ+Xd¸Ôíâ¶¶yd„€S /Cþ}E}®¥MOI¹²žâæÝK[³o`‡”îxôëÓ¥iYj( hä#,ÀÈãÛ­l ·¤ ´epIúc½cÉ¡ fgDp¿>Sœm>Ø}ÿZŽdÕ¤-;¢ÅÕ¤³˜í­¤eMþdÁãÓëþ ‘,JIäõªºeµÕ¥°†gG ä·R½É'µD»Œ½FüE ã¦yÅqú† c-½ iåBÙ™éÇ{Öÿˆ/-`ŒÇ„.9ÁÉ#üôÀI$—R´®Ù ƒÓ?A]c¥Ì*H™åËpÛ‰,Gùÿ'ñ¡£rIƒŽœ’.¦šŠ¿Â;sƒüÇùíJX’AœƒÔñþ?¯­nd_‡ZuÊ͸¡#>ýëNÒîÒù|¥Ü[q—Ô×;\Î3Ûüó׊hÞ’)Rv©;ºT¸'±\Ï©ÑϦ”š6‘qÈ“üþžµF‘g¤\l à“ŸóƒOµÕCÛ‹y¶ ³ò¶Íõ÷¦ÊḂ +ôÇõÿ?JºÜzt¥$.Hë‚xéýý~µŸ,ƒpÁàäŒ^}y«Üp p{zzÿž*(`7l9À8…ZÐÉì|Ä”eSÝGOð55ܨ¨’¯ŽˆqÏùþž”Çe‚A.ÐÉŒ`•P¬——;×F@$ãŽÿJV¾£Øtp™]–5<ðÌxÀúŸóùT©òŒ–@¼Ç?ùrÄQ…P@ç Gü¿?Ëë3F“ °Éï»ü>¿çŽƒb±F;‡‹®öSÉÁ57ö’HKK¤‘œþ<ñPÜ£#íFÀÇñ¹ÿ=ê³FÙ]¼·QêzwïNÉŠå°áƒ0,rHóÅ8€Sðƒœzþu 2aGN1óÚ¥, Xäã©á»úýqþ<еi/™Öl²œÜœuü?úßÀ˜* Glß úõ«"ÖFŽUnr±Çñ­dVòÏ#wÇ_OóùRc-xdbÚoÀ~­[˜᱘f;Ÿûé«kⱟÄk…Äã€SœqÏJy$ša °ƒ6#$Ž9¦¹§±ç¡Æx¤4FØ$úÿõª5!—å>¼ {–œŽœzjeT.pHç¬PÍ §ž)IÚI9>”¸®NIòœs@ÉÊçŒT\maü\.>„ùÓØÄ·ÓefýãD6÷êHÅk%ªBç<Žçê1NŒCŒãwÊIÜ}ñÖ‘™3´ÈR{穬Ûmš$‘h`•ˆ»G ¿áMdi¶æˆmÝæ<ð7M[XÙˆ'-×.Øü&Ï)Óh^Ê ç>Þ”\,RxT2–~£K+`þgúTéd­#DpCÏ õæ¦PÊ…°È^IúÔÄ1S÷BŸzWDMj…¶_¹äˆ-ºÄ)èWñÎãÌìŽ* ­ä®ÆûÜԭs"aY\Ž™òÍ!’MìHãzŸ¯øSÔZt"Èåƒ#;ýÑ—4Ö.ËbÜg¾ä’2Ìùòøá”c'ééQ„fÉÚqé°c4ÀlÌ€3o*Ä »pëYq^ÜÙ;%ú¥TξyZÒ’M¥Q”üø'’OÆ£šÆD·XNî›îzþz}*“èÉi· ç•fT*zC}Æ*‘<¯9³´r@ ëþaG,º]óª+›WìFà‡ÔN¿‘­ÀQÚ0ºÈG®Òzã?J§ ;—àÓ•öÍ:Œc;O¯éÅ\[Å1v íùBô Ž{UÈ$ÿEÌÃ*ÄžCwÎ8®V’y5Fû:©ó†UèG¿áQ¹2¤ÔQÛ›€Aà÷ö§›¨Ôƒùg5ÆC-ô%¼å9Q06üŒõõÿ?\ Y./Ñ~D— Ã/–r8ôÿ?ã^ËÌ^ÐêÚ{{¸ÕØù‘ÏîžÇŠ»Ç!"ÆÑÓÚ¼æ=JúÔm–9–'ÈÜÈqŽ£>ŸOj±gâ›Û)S,@œz⛢ú T]NÖ{µˆ3d++“Ô&73:ÆUÜð€·ôžøê{š§{©Í©• …ÝÀ`ijOÿõÕË[w¯"€¹À’1ôïôéíUrjÉræv3#Š=6ñ噃—DÎIàgp˾zÔš{j77†==Äp È»Tûã<õ©-ŒWwöÉ,dF¡¤`_ Ç¯¿øýkOOh..mdß°rÕPöTuúšnz\J:ØÃ¸ðƦθKW}ÂUºö8úÖx i)‚ä]Dê::îüGP~¦»ëËxL¼6;Fyüqúâ[…Tæb$ÈIG#¿>¾½ý)B£–Œr‚Ž¥­*Àj…,UK3óc<{sŸç]5œ6qÄÉl‘„ÏP:öëøVvšßdÑ®n•OÈÙ#í\qüê;“Nb®ÅàóC#ãR9èx#jÎWeFÈ—PÒVÙþÓmå¤{–#œ¿­`Kæ,É=´Ä]+L9$±ÇaÏãÚ»hç- NÜîÎxè}*¿îîn›z‚°‘Õz·_ÓŠ#6·Š{ý̺”±,wHÊ[•Hø8õ#Ó¡¬M6Ââ}`ýšÆKdVùÚnp?•zÔ)qlUÂär¬yŠç¯uµ€}ã(Tc+ÐŒÕÂMè‘2ŠNí”|Cukö -¬D²Ý#áˆBzuÜk˜k£å;Tm 7ž+R‹W¸6ëö¹wœyq(÷9úg&ºk/ Y@é%Ò+˜È‡=Ï©ý+NhÓVdYÉÝÖá;½H nËCnÜäcsývÚu¶š¿f³„*ÿ“’xî}zU™ZG`óc°éü³Y:¾®šm¸‚2 ®ylãnOR{sǵbç*ŽÆŠ*­â dDæÚ·`ùà~`õ¦xvÄÆáãUgŒtA?\¯ýóYZ^Ÿ&©zìêÊz¾zpúàÅ=k§½™-l]Á9;WÕzãñþµR\«•µ|ÌæuÿµüE9>Z°ÿõŒ~L~×Å̃‚3ÛÛé·õ¬ ß2ù’ ðG*§·åž=k …¶;ÊÞ„~§ùŸÊ•GÐpîTNóá-¸ÂL€c¤dçôä~4q>] €Ç Å`kY}m|ÂÛFÕ|1áHÿZm奿ŠHÜËj@õZÞM ©àž@¨Ç8?€üÿ8Ü¢ãÊ¡>lÆrQŽŸ‡§·N˜¡îŸ!íÎÜuÎr8ç߸櫕 ¤§Û’qÿêýqÒ…ÃrÙ=O@0;ô=}+ ±êç†!KtÀ$ÿ?¡‡Ò¦ãh ó`ä“»žÿNqùûšˆ³+eâÀÆp8ëõÇÞþ]©$+µ¾ú0<Ééý?Ÿµ0$YX±,ÇïÎ3éN0L„z.¦yúöÿ<Ç †8Û€:€Øç˧øÕ²x€@'Œ}·8àÈÓ`2Hƒåã 8Á8û§ÿ¯þ}*4 žNOqLÔüÚ_8ù‡ ò:vê>˜ö¨§ ·!ÕŠï!†yÿ?ç¥5ØLIHÀyÈê@ÇOëZ0ÈínìXnPÁ‰ãüöÿ9¬ô—‘ºwgüñõ«qãìÓuæ È@ÿ?þºL·áÁ¶)úçv?V­lÊðøù.¡Í«cÔþU„þ#hìfã¯j‰$ýj| ¹ëP³+cšÀÜ‚ÍÓŠhè2:õ¡“æqM.)äòúôÕÇó4÷Écž•çcÓ©éH¡NylÆ’C…ôî)ùzzS$ q@7~zÒmù_=¨b¹ÐAßÎOJÑ•#$™æ™‘ïRËÕŽ:œÔP.Xâ©lrÓ÷¬Žo}LŠJ×|®9¬g˺?íåW…™KâFe©Ì’ñËIœ\ƒKu"§–~ïlnëÀêh²àºîÜ:Ÿ÷}9«`€‡#ú{ZÚöfVº3 È\ôä.þ¦Ÿ¡ýñ ’¸QÇ#éW¼#ËÁçÛ¿ É¤6q†e@*FÒx?‡&›’%E•Ìäf^„~#þÏ6`T(¼)‘Èãÿ¯Q}…£;C.pA,Ûi!ó"ûÈÁzƒIÙìRvܺ³@p0vóÓõãùÔö,X³ç#®åà§ÓüûÒ4D` ü3ÇôõéR±–Ú`Hàðéùv©­#·=Áó?u q’ÿ¥EìU®6ÒÆ•šbk6®ßNüzÖ‘–8ÔùJ 0'õÏáÏãT'¾Ã2Á×-– sŽ>›ºûUp ánesµGÞa¸ óǾ^:Òjú±í±v[ðHÊ‚§î¾?>üUÛI”çŒÐ0úõéY>Zn•ACŽ=óÈëžOµ[Yä‚a±Tcî¦ 8àŽü“ÇAI¥°'ÔÙWRI îOçþM9B®Í““ƒŸÐšÍ‚vݺI8l1 œûçÊ´mùØ7ׂ+6%*íSŽôðã#$gëLŠBËó+ÓGó¦\JaF!Ûv `c€;ŸÎîE82ªGµ2`e° yç¡8«Œ€ðÁ[#<~?γnf·Æd‘’`AELo|äñŽƒ®jµãjºž-à·6°“ûÉ$#?—SúUr²y¬\’ñ®dk{0²HŸ|öLúÓ$ÑmŒ{ï¥2€z3íAíÁüj奬Ë :“ÕrOsS®ÂÅ¶äŽæ•í°ùo«)ÛéÚdEL6är  À­ñÆsš®ÓG“‰‡¡ÛÉÍ5¦@ ¨8üØÕ‘ld±ƒøSYÛg̤â³f¹•pñ¯Qón'·¯iÊÌñ†ÜÛýJóóïE…ÌLÀ´‚ q»ø€çÿϽ+Û?uÆ€ròMD…^V mB¼q´Ÿ_~çIa¨C$pÀ$ËìÉ=yÎ1ùŠvauÔl4K—UcŒhúÕpíÆÚ_ñ5²ñÆèQ•Þ¬ëÈ­í—q¸H $ƒn=³Ò„î ÆÊèA]À“÷WwëÍJa8ÊýäË(Úýw ‚À™A÷«A-"Œ XqÌI4Û°’¹&Ý›YAVùX±cÔ⥞Òk†1‰[tX(竨úž YšÑ$FYyàzÎ&â #ÉiX¾ýªBn{ úPŸ`µŒI†é¡†s¶iï_»‘íØ×ê~¸†Âá¢i-¢gÀùUB3´öãžµbYep„Y¡ÆJçÇ¡?§"«YF°Ïq,ŽˆÒ¶ýìοà­l¶1êj ï&fÞ’ohÌqC;TŸ~™õ=±U#²ØåK1$±ç' ç¿ÓóýÖÉò0 Àn;϶3ÿê÷¥LòHÊ‘ó ã°9þ¿Ÿj[,‡÷y²AóÆ}x9ÿÞ”'Œ¸c%XŽ:ûOQO\¬…r«_è=}‘ö4Á—'Ê›8pÆ{{žÔnbV‹?1V8 ÏÔœÿic´µW?"¿ŒøÉ÷üêÀ´¹EbÐ9\`ý?ßüâ«¶à|²qÏ_¼Äú~Ÿ§~”_³RU¶HŸËH°9Ý€;úôÿ¥<) ¨†î>^N{sÛóÏÖ™ ²±@1Ógqÿè{â´í­â·•VbòÜ}áÉÓ=ª[°Ö»¢ÒmP2%‘øÉuãòè*Â[EýÜiôD×™ ‹Í˜ð§€UµÕ­n‘JOà? ÷àò+-Y¦ˆf£ª¥Šå!irBŽúþUÂ]j:¾¢¡ÓäS’÷sÏáþ5Òkú‹¾Ûx—,ß ät#ù×# }ÿfµ`áÝXe\út®šQ²¹IjuþÔúÎöØŒ°bá;²éúÕC̲³ò7³ÄX˜†s´c#ò#ðɪþ1Ø_G!p¨pÙJåH8ÏoÿWãQêqvû|¶‹$€A+בÈëú}2rûìMû§Ca©™âX–0× ld$€NzÿSéšØŽm1ËÊÜ»ã–?Ò¹ýdº*­µJ¡•ö“Ï©üqRÞj³RU²›P´”íÃ.@êx<ÿ*ÎQ×BÔ’Z–umXÚI¢dyN#dÕÆLwüª•¿†%½“Í»­¹9Pk°÷ºŸz~Œ³Þj@l¢ýòEsÏgVôÅuŒÄü±C—&ˆyµek[ {DvФiŽ€u©J¼óžE)rHVfÏ~¬§¢ íÝíÓ?oÒ³³eè„Ôul¥bù¦íÜzÿUü댎Þ]SS .æV;_ýÓÜ}Tçê3[%^ù˜ ä8 GÏåÇýóÞ®ZB¶¼›?zÌNIëÉÀíœþ [GÝ^fOÞô,Z@‘ÿ£Ä$íôÎñâß7Qˆ^]¥¾F¼óÓ#Û¸ÿëúUè[Ùq# ÜãëT¼¨Ë|ÉIQž¡G_çÄÖiê[ZXm°_6W÷|('Ðu?9«[rŽ~÷ÉÉþMQô[ô䓟sßÿe‰¨î'0ÆÍ†b8õ'ý ühÝ‚0µ¹|ÍV]»I\¹ÁàvüéZ>*4ÛxÁùZtR9õ¬Øáû^­È›‘¥Îþ½?\0ü=…køª6k8vàâLŽç¯9úÑèâGFcøªÎ3á«IÖ0%Pƒ8ìEqÍìíUÚ#Síþ}+Ò|IjÏ }@È*>€Öe¿‡ÖûD†XÉó¶¸Ã·æõüÿ:ÒEêLáyNžËØ= =þ½1Ú¶aÝm7œ 6CÜzU+Ûcg¨‘*ºílàc8=?¨>µgy¸ ëPp{qééÇô­^¦IXÞ³š+è†ÒNq˜÷=z ©s¤Y# V1wìäÔžÜVBÅäÊ%ðØ$zÕë}b5/¿º>QƒõïéY¸µð—{îZ7 Œ  c×qéžõFIÄpK’6®Û¿'ƒžÞüTr=”ÇÌ ¬O8ܦ›…‰Lvèž2ÝÿåUÊ"—–e»ä'Ê3óWä@Ñýð_¿ß×§¯ôªñ mnVYÉÄŸ+0ÚsÀ­é0íÇÞÚÝ1ùwã¯aM±%s2DÝ„G êÃ'>ƒÓôª·m(Ç<óôÿÇk{fW!ý2:{§_ʲîʪälßžüóÓ×¡â… hŠÌù*èK‘H\1àý*iÙGŽÞ=å°Êx`¤ñƒúþu@æO3nÙ¯ÿ¯ü µ¿päqŒ‘œžŸòªhK°ã”?Â0r@QÛÛð?(%FÂΜù†ÁÜœžƒüŠŠF áFÏ#=GN½ÿÏ5:°Ü¦0@ÎtÝ=¹ý{ýh ž§{€Ä’q·¸<½Ïù4ÕÌuÁ$ciñéÔò½ý½hbrÊ‚0A>™8ãùzRª þZ”<ð¬üñŸSßùP±Q¸(ž¡ºa½ÞÞ•,ê‚Àà€Ã¿# çüŸJ«îÁwmê§Ý?AôôÏ¥X_ä£vO9þ/ÔÿžôýÅ[!Ü m ýÓëþH÷¨ç;˜e ÛÁÚsØóíDl6pÉ÷xùO§ùý) óq"ã8ÊŽ£'üóíN€ÌQrUsŸ¡¿µ[@…ÐÀSü8íPÀ|±¹K­·vAüúæ$„«ï ü§<`úŸ¥ : ]GúÏêƵr}ë+D äÜãŸß‘úUÝÇûƱ’¼™ªvHß$ˆò§ŸZˆŒJ”œ©ÆÜw5ù:£=+›¡„g=pj&œu㊕ø=EDF[h.p<ŒS[€xéO/÷6à¥0±ÎG­1£>ëðsPÛ –æv=ÔSmŽéT¶¹aðzV7‡Žm®XôÝý+e†@+ÃÀ.àñÞ ¸ü,Ê_2í'E^[œôätÿ µæ çÚzp}»çŠ©`‰Ûv>~Ÿ—Ò®ˆ•ÎV5<çAÿ?nís%Øz³`’ g8Îô"–ò›aÆÏ–8úÔ oÚBüǯ<ÿZrÂr¶AÏÊç ëþx©Ðz–båÈ.¼wþ¼TMó6FN1•Èì;œÔAÝOï˜mùw‘ôÇøR¬ë´7Ì,·øQa\RÝTœžìqúVŒ 0$SÎG$篣c_ƨÆñIœJwðüç¯åS0b¤OÌqÏ~A¶¥Ñâ¤È>c· n¿çò©Ih¢DF@IÁÈ9ÉÇqïU v2¡f'Ž0ÛºéÀç°÷©æ9™[ï)ÛêxlqÏŸ§­C,7Êïå¬e™‡*8 È${}ïaǵ8¼1ùdTä.1»{d`zÓ#®O,ìÇ… ¹öî:™#r¡•…Æõ sòõÏ#'>”5¼{@PÏ‚1…@€õÎç oΤtrŽJé,7|Ô~©¡±rªìg©Ú?Ç#õ«±YƃîPW ŠÍÉ¢ÊH&,Àd¯rñÛßóëíRÆ’’y’œ+’[òÁ{j¸Ám€`Ÿ_ʤ1X3÷H©æ(ËpÆ2#dD/J|Öö÷›EÄ>xSòî\Š”F8Aüµ‚Ðê×Cm5¿ÙFÿ–MáöLøÏoʯFs|¦%P¾fÈ›nK>b}‡êk`¬¨ÌK{uª¿.ÄÛ›r¥¶› ¼…‹ŒeÎN?Ç5Ÿ«hv󯘩‡PHÀcœöã§áW,/ÅíÌ1¶VÝÊ6Aϰ%Íœ3ʯ+€ v?RæiŽÉ£‚žÞæÚ/ɆTÎI;÷À75Ði˦”Wºžý¿/¢¶ðÕÅÊ,±É³$å‹`}G¯n•\‹y2yžÈµgâÉ<À—–ãiÈ=›¡àñõ¬™oõk‹›8´ ÈJÉê{çò®’Ó‘G&ë˃9v€1éô­ht­>4‹dÚ=W¯¡=©óÁ?t9$÷8k‹Ç)i„œòÜ}€ê8ïšÕ±ðÍã@0¦08ýâŽÝ<û{ý8®Ñ!Š%Äqª…qO㽪]gk$5K[³œ´ð U>|ªÜR8ÎqÖµ-ô[f ŸûÌ£ó­`pyÆ($ r3Y¹¶Z‚[ ´1Ò›€jp烌ûRdŒ† Ò¤¡ vÈÓÁÝ£ÔúsRI(Œãø»Yî^B‡^žžßãôI؆sŒ»þ¿Àú“Y‡uÔÁ‚1·ä«S3\L±DI¦HëõúŸëV¡¶ XÆ Éê@è?š­hC»!†Ô[Û< á‰9ï}XŠ«oÛ5¦ÞµjÖØYYm8g-ŽçÒ‹éqÛ —R˜!áTdã×·øþUŒÎòHîóžä×$~¡pJ©;ÁlrØèsþ<ý³ãP÷1Dà…=¿º t?€ý)Ä™0©ò†ù†ûzæT¯Ø8!çíÆå·ó5 Ä>ìŒgïÔp –ãUõ¨žc)o,“ÜŽOë‘øR[ƒØÎЭËj{Ù1¤±ã§?øö:ÖÕ`Éi©˜åøðMGáèY-]ß%˜¸Œgüµuÿ{ ÷ÿ<Šr~ðE{¶)ë…E’nS*ŠM Ù1à¸?÷ѨüE†´Då³ùV´¸¶iÐã<‚Øú’­/²hÀñ¦™öˆb¹…˜¬‰ÇÝúzä×'LMÎ8ϯà1^¥}Ú-Ú3ŽGá^S ¨¹S·89ïÎ?úÿç·E7v2¨¬ÈeI"cHcÔƒÏùïRE5Ä„(Œ¿¸^ ^!ZO˜+8û¹Ús×éVã*wI¯n?ÏùãG-¶¦EŹ\;[‘»¯Cú~uS`vÊ/?tm^ŸçúWLŒ²vû~_ý×ðŽ-)®˜O³O~GéB·-Ìw¶2"eÉÛÀOçV º1ÎŒì\¸Ú ê¹ â´n4y¡\FÂC€£öÿ?Z­s¥]CnÓÉ E<·#'_Z\ÉŠÍ2ùmÃ'¦3Ðÿß_áééX×1²±yúŸáþM^ÓîKŽFJä0ãw¯¿OR5bx‘—#‚:ü¿ž~•;2ï¥Îv QòW'oCùTe<™>VÛœŽ¥i"V˜’‘Æp~¦ª´jøa‘é€Àõú÷üj™ˆ–c9=;sž½ÿúÕiŒñ·¡^¼/#O×úÔ §vv…8'?×ÜΜŽ!*„Và À;»ñÓŠl È NÓÉÀmÃøºŸçÞ¤Ã)xÞÎ?‡§oñüj6Ü#ÞÀmÇü$õgŸ¯AR±ÃCnê±ü;Ú ƒ[k ¤däãåœz~žµ&ÀB ¶N6ÿ·áÏÒšOîùÝ*?º;Ÿ¯êj’6ŽGù¤Œá¸Ì}ùÉ o1S‘(yÏN‡òÿ>”‹.dûùaÔ7Õ³þ}Í4Û’–ü#×ëúy,I¼ÿ_JpQ¹r Êãž}}sV-WËPryåW9>¾¸<ŠMØ,O^Eº’Fð :g§çÈFå~l€Á¾Vbq´3ù~„zÓË­† Œ‘ÏLàþ\§ášƒåy0…÷àü„õéƒÀíøò*EˆãóNc]ÜíS?!î>¸ÇJÐŒ‡*Í»qçåp£ÓüñÞ³"›£ß“Œ÷ôçŸÎ®+ ¦Dûwã¡ëÍ&y¨ŒTq´>åÿê©÷¢FCqþùãõª h‘c÷Áœ &Ò~œÿXc 9V'YXdþF²f‰’ •¶€Wq8ÁaGÛ2p‹¹‡ñc? ÿ €´AÀPë€~laOþµ?쪨<É ž~ƒŠ4 ²ÃÎ `Jvd‚ –SùTÜmÿ6ü0OŸðüT,É’X.â‰@?¨þ¦šî3d†=ò'6õçó¨d…C) ¤)ÊàŒãØà¾¦­Ì$ÇNqÇþ”‚!#c'9ÿh`lANâ°†PÇ…frùGOnI”/œ¶à8ôüøüÍ;(YS=žOáÎJ̈9<’yüsHv ¸pØeq¹X·<ôÍ.¥p†É¥FŒã¸ç•Ѥ‰Ôîd#»êj«ZË#~óø .rW¯Lwõ¡X Ö:’à6àÑ‘»ç‡^‡?þºØ†ü$‡$àý;žk™½±–ÙÌ*LG;‘+éý~™ÍW¶ÔƒÈª®¤nÁ ûsZ8)j‰R¶†ýÕÜn¦òñËD„ù†!N8Ü}I=«”º»{¹cºuTV›!*ò:Vã=Õ¹Eaµ”ŽÏ_lqúVb§•• ÜêIaЏ$‘lît›ÕkTî”^>™Çó§Å~³_´°p8$W,·Ïncu%•FÇÏSÏ×®Iÿ9«6WMuÛ+»¿QœsϸëïÚ³pê_´èvG’yãò¦ÎS–U-òǹà~4–ðÊZINz²•\ŸÆ²g½Ž[Ø©rЩsÏ ÄqÇ®3ùÖI\ѽ5O"Þ )ÄZ)<¡cÔþ#õ­Im˜Þ[Î žrÿëUYï…Ô¦h3È€cŒäc©÷þu|º«…fMïÊ\úÅ6ÞâVµŠrÚ¤:¢].ÈÔƒæ`ãqÇSø ©©jÂÓÄò©d •hÃûßOϟ¬^Ý9†eO(K#a9©õç§µyÞ²¸šgß0D8PĆAýÜíÎ:úuïWNÏR'+lYÖ5¡¨8óaçk{ üØÿ8¬ûx…Á\Ë 8îdç¾}9?Óš¤Y”üØå;zdóé]7‡áÚ¤0Jù]†G qÐtñÔíè`½æ>=*KgŠ]ÅĈd]ƒaã Œôúÿ=ˆ’c|ÚÎ¥l#D“«(ܨ üÄžƒ#§¿½tâ$eXöð1…ǧJY’9"hæPÑ‘È5ÈêÜèöv8*KÉZç_K9$IigsÈ]£°Áëõ§YøsXšÀÈd†ÞâåÕœ6r¨ 8#’O¿×µÕ¥°*dETÚ¼ôíÒƒ,—,?¾ücð§íD‹«2lô ]9MÍõÃÜM¸1w8PÞÀ{æ¯ÿhd&&qܰ#òjD°W—̸s+ç€z ´‘,mò¨qPåwvRVØÎ’ââ(„´gŒc‚ÏòüáK™œ¸×Ž2~žŸçÖ­^9™Õˆg8ûŸ×õô¨Ä`ã#¸#ùúAÞ„'{‰çÊP—¸ÿ?çõ*“\’Ç“€ùÿ? –üÃ#©îý×éKåŒyÆÓùÄÐ’,íÆFOcéN3‘Ôt8éïP uî÷úz{ziÛv®IÏ~ü8ý>´¬cÌò3œ|£®ìÓ^y6°Àù»ãÿ?§àh ÿäôÏCßÿ®~€R2‚ $œœc¹õÿ?íSƒžrO=ý¿P?HWsœëþ}©ìäœHõ'úþB§…$p#ç¿ò¢ö %¾ÐN:œûÓù:•ÊÇvS…9ºŸ\uõªz‰‘áhÓn6’[²Kv=‘YHF{¶¤p¤ªNqÛü÷ö©¾Ó%Å…¼²,È»ˆÏÝÈÏè9ü+;Ãsy¶÷M<¾cI9NOl>kNeËP: ÛüN?W%gbSº¸ÙFœòº“üA@¿–V±A$˜‚År[A<þ|Ÿ£U›ã”Ž-ÄeÏò?™ÏáU-_æ‘—…<`vþ¬ß4-„÷.ˆ$RÊœ|Çž§©Çãʳï7yl™ÁÝ¿®NêÒ‹¨cžíþ~§ôª7¨#X¡VËÈÄ“·=?ÏGph»§Â±XFŒXsž;~˜¥¶BÞk‘È;rÔŸç¤8ŠªF0Ãÿ­KùQ*dÔŸRjnQ­·0ó€X)ÄÿJÔ¶_*Ú€T§µdkŸ<¾X<ãÿ#ÿf­{uÿC‡ŸàçÚ©ü(•»$-žNq^?|+ÙÑVYYrxèH¯^nVF+͵H”ê·ñ•l,ì@$Ø÷úÿœÖ´›3«ÐË‚USüLèOÒ´íæY Àééúûgðüj‹YÆÜ"à©Ü|¼œuü=?Îp-½Ä`d«c¥ð,ç?ý~õÐìÌ–†ä¼yý½:þcüðw-!ŒÄÅb‡MÜÉíúþ•Æ(»L~ìŒð3Ç\ò«ß^¦$ôÏÿ_éù~Q(7³—‘ÙYl–yw1‘À#|©íõÿ>µâKÀÄY«($‚ÙèZþÙ†È[ÚÊ@”¡‘Ø(Âç-ƒëÁÇÏs%ìÒL27È öÍg7+²ç-,*0Iò¶yÏÿ>jÊßK‘<Ö‚$þ§JƒË*|²v©8SëØwëßü)êNÒIÊäçøxã¦8éŸóÓmÌÊ—WW2H®ŠÝ³×½2)IEÈäŒòqß­^Qå†ÁäƒÈ_Ï“ùž[ö}á‚á9çs_|Ó§òöªºˆ€r¤/Bm½øöô?,«€@çÌH'Üç8ÿéJX¡ÊHãþÚdw=‡ùçÖžx ¸ÆH;G«{úã‚r6僑ØO@Çñ¤27˜`—^ùlú{JX¢b±èH'ýnÝjAvÃ…-Áê3ÎO_ƤE)æ¿ç=}:ÿžh¸Xm²K˜ç'üÿZ:çøÔýGùü©ËÔçœç¾3ïŸñÇl‘ʲz}áùP€é|?‘¥¼äÿ!ý)|Åþõ.‚Ò¢ãø›ùš§¹=Ecö™}Ûñœc…=ê=ª3€:úT§>Üõâ£, {úŽ+˜é!q»kóãµV8Gùæ­¶HÆ}*³ ¼1ŠC" î<õ´Öá@ÉúŠR1ÀU8#™ ÈU9ϱ vÀ*OÒšç’¼ ¥Á*2øS=qŒÞ¢[=zñÒŽ‘œ‚•Ã’>ôc·n: ʼÁ*1Ú‹ {Quמã­Yôªè'¹rRA®sHùt›“ÇSÿ ŠÞ»b¶îÃøTójÂÓT àñË?òpøLçº1áŒ[ƒ(\ÿôïNKïÝq¼§µ=‚«Â¶Ö8äv«H»Ë#£tü}?ƺ0KBˆ™Ó’Òd‚>`åÇb+§| Ø\uÉép*bx%€É?_Ó­$–ð9%Ð)ǿƦéŽÌHï”ÊC‡#_þµKÄE—i x§ÓU­P…FÞñsúSf·uá“n:/ñéÿÖ§dfœ>[:²’NÝ9õõÖ®ÚBí0=F™ùéïÓ üª¶Ÿ§´‹—S°Œ<{€8íÔVÑ·dLÇ9ÿ먬§%±q]JÅ#Œäº{âNü?ÆŸ(`V3ƒ¹‰@úþMZXT6Uض:nÎÓ“D³$`)t,N¸Ÿ®z~ Vw*ÝÄ‚8¼Ò¥1 ç Î*äq¯;[ž¤nÇáÇOÄTh•V)NñÃÆÃƒôÏ­;íqw“¼çnÒÄ¡ü©jVƒ¾Óà¾cr0Ätüª©E;í¥ò›î¨byõÆ*&äw’1ò*ó“Ñ}ùüò}ø§4ƒiÜ®Žr¸Æ~œ~$švÉ&¼šTó|½Pì#ŽÝ9?‡å@»ËûÕA(䑯Ñëê?*¨`Û‹¿îÁËdÔŽGâTTà(‹‚®2 ÿ~´Y äÒJT…TD'’@¼Ì1üê %ÚÈlqËzä©þ†”¹Î|ØÃtÛ9öÎ[ô¨åC¹X™ ëóçóØ1õÍ5 =IÝŒlȬù!K7òûÇò§Gà˜÷nÈÚP`œ{wöÁªù@v¯–9ÿ¾OÖ§UÈù›–à(8ûuÈöçÕ#&YG”@mÞ ¸9ü9þB•$vlc°Üß-FÁ ¹8äd“úæhk3‚wz“Çþ?E‡qêÎNý³‚=xSÀ¦E"ÈÅYHÝœ}FOêE7;‰U™þò)'ðÎH¡ò±QÇÈr?œ~”˜X”]±È¡¿ùãÖ¹gDmÍŠâdË{ pk¤R¡ Ç~?¯þÍB‰Pƒ#ÜñøëDdâî«îp±]ìu ͵”“œzõÇLÿJ¼Rs)`9Àb: tôÈÀ'½tWz5Á2¼[d'ptb§¯Þ²›G‚&c Ò*.I CLc¯©­¹âÈqh¤‘(V OÝõOoùô«z4 o¨¬þlq//;tëý=«BÛGVÙ¥•N>XÕpqîÜcéZ¶z]­„Í2Æ#Œ¼ÒçóãŽýêe5aÆåè=ªèþfFíÊÄ«~µÏiöŒþ7Ô§PÆ8ÕæÄW§åš·â;kxÛ친ªüÒF¿*ý~•‡µ˜/n&‰^B‚F`~ù<ËP£$›)´ÚF¶£e¡e$O— Ž{}GZáïµ{»BÖ²,´ïB\nR;ƒõâ½H䌎kϼq§o!ÜFBñØ`޽;úñN‹W³U¥Ñ™sâk۟ݪ©y¶àžØ c°÷¤†Æo³©žG^2P?AôäóïU,.®’}‘ʹUëü@wâ¬FæéEå£c‚zdúöÿõWK¶1½õc–ÆÕvŽÇc<~ëÁºCÄdÔ%l—%¾p,T'ƒî§ˆÜÝ]ËnäaH^\zàô•Ѭô %³„™NNöË3I'ÔÖ3ýÕ©¤#ozFÊeF5CP³¸œo†F÷\ûö®v_:Sçã¯QéÔãÓ¦FMoh:¼zŒeN7‘Îsë^Aéžk' GÞ5按4ø¡`CDË"x’?úÕ¥N§Ú‹»w!©?ÝäVmܤ¬B~ï¡ö¦O'˜òNÑÇ'Ò§#ij»ÄÓ:–áFHù!´R_ºÇŸ_Ìû ‘@ã#·9ÿ?äö«+mÝ›>™¥h[¯Jw&ÅS€™íëþ—¹¥‘ÇäóýN°Œß¶MIRÛº^sþ{Ñp±û¤“€yëþ!B(ÁÎI#¯ùÿÚ¬,D¸žNN{ýh0€2Çgò§p±ÆÂ6Ž:wÇ·ùêj-›°sœ™þ¿ç×Ò®Kð¨1×ééLƸ.q¸à94®+€ 処?ÏÓò$­¼{¤}ŸSY÷šÁ²¹'²xíØÿ­È8çƒþEZÕ#ˆióLUY‚pÝOàj­°®:Úáoców•’ ÷luýiט6’ò1°Œã§_F@š5«Fè÷Œryþ´ýJA›pĶ3KíXwÓS Ã֛죛í.ÜÆ1ƒÉ»ŽIN6á=OóëT4Y‚FRÎá˜ä±$œ ·¥ZÏm¦Ä·X2’Îýù$ž¿T÷l˜ì‘[WdùF01Î:óŸé»ô¨ Fع# Ip?ˆä“ü›ó¦ß3›¥Q‚AÎ=øÀÿÐüÓ­J… *8Ôñ ?ïª}÷/[ŸÞ… îþ¹?•V›2jÐ 6Œ~yÿ¾Z·oPX`嶃ÓüóšŽÖ1-ÃË‚N?úùÒB[ƒµT±\v,¦;ý^ÔÇ* Ý ä±ëÎzzÿ_¡¤ˆc…€~è<}xÇ>ãÛž“p<«¸`p¤õùyÉç¿åÐÒ#ã·Õ`Œ¶v¶{€ wèz~cðê¯`¹›o.ãy#îÐgùäS'ƒ äãvx88­|ðd'æÊ¸¿bsþzRM{°‘‰ÆUxn3ÈüzŠ®aX| ^5#iÎ2NÑØgŒj,Úr‚‰ ØÀÏNG®?ýU ebË8 ªyÜA8ã>ÇõúÕ«%¹ØY—r£ô/MG¡3i[s²dó Ë/½Px¤†LH¸=˜ß^õ­u"Ek¶6*sØî÷ýk5.ÅÊ$r2ªgæÀçê?:QlˆݵvíSÐgÓþºläyD㑌ÇüœT €1ÀÁãøSnN"éÆìtãüþ?δDn’…tèÀû»ŸÿB5Ïgý£]œBé± ðAþf¸¯5«(-Y¤¶G¬õ<Q㜓Ÿlt©6œç¶y¨ùØà×)ÒDǨÉ÷Á¨É~•#)Þ>¤Ô,]£4†G'8<õüª¿ä ŒäÔw²¶ì©èØàc±ÿ'þZ¨;Ê QÔ7å“éÓלýê1'}ŒÊÌÙ^sÏ]¸þ×½3Ï"T QY:+9sü¿O¡«‹…+¸ð1ŒôÏâ1žzc¯ñRIl0w…y9Ç~˜ãýß©¢è,ÆÛÉ s»©€r9둌ã¾µ`OŒÇ€¹<¾Ü¨õÏ@Z†;hãl‚FG yP?¨ õ¤.Z\;n,c(sžÃÐRvcEÄs!ÌnZ,•ù Ð?Z@Ê媒7ÆÀdýF?ô:‰ÞPÈ2#q#ñ$ûäpºÏÈQ–AÉù¾aï“ýH©°îL®¡ `êG,ÇâF?_üz£Ü¤³Ž¿1ýsÿR°~býÐ?ö_Æ™”a,Hl1=3èröo‹ãÁcòîv•\êðW‰@Z2§þ+<&P¨ ƒ†Ü•ô©£>P ª™9Ê'¼)Çó§a\ÓIÕ~Rùlp ƒíÓ}68ð§fžªÁú?3TD²8Xq»ÍÎ=° ¿ ɇÞyó8ëèNOê*Z°Ð¢L˜ïeïÆçÇä)ÙeÃ2‚‹g‘éÎOä)Áö‘±Hˆüòqüéâg3J@€¾™öäþfÅðXTç•Çáþy¨›aNÍ»†w àç<ŒO­R›Wc#%ºEn¬¸ý \}xúR¦¥v6ùQ4ª2_`Áöÿ˜ÔX¹·‰xgV“Sœ–RVeP zwöäÕwJË’Hÿ7îÕåê~‹ÐþdÏçcí ;cý ~O¶ ¡#á£ÜÑ€ÜVpAÇþƒV´Dõb‘Ð]Žà~U,{úž:zUV¶·³¹‚îÖ"’×uT ¹?ˆ{ž©ó€{@sÁC¼ { ô”ÅpX(#h]Wœÿ³Ôþ MfïöÀÎâ¡è?ÏOóíXî¦.ã)“òç–93߯à*¨ÂF sº7Häg##v}~„vêc˜,‹Àƒ–ç¿^‡ÿ²SN0IÜNM«Ö%¡Õ! 8Ý䣧l ݳ½šÂE’ÝÖ5)´äuêr=ºŠÇ˜*H“(ÃÂààœ‚;~£òètæ‰\0E\>cƒ‚[ð ZÊÏFBºØ¸þ(»hÙ§#;OsÏ å»tõëÆk*ãP{½*>âKdàsꃑ’j“¬ˆùu;[9ÃeŽ=ðƒÏ?‰íL]åÃc~Êz‘ÔñŽ­ƒŸlŽF1IA-‡ÌÙ(™±¸œ¨1 ¯b}p1ýÜÖº ]µ¾ ‡v ®¤ŸÃú>¼ ç÷’"ª¶H*Iäמã°ë]_†4´7PÊS…\Œð1ôtçïM*(ê8]½ÜœƒØ{;=é`‘žžÔ¹µpb`Œž¤Ñ€ŽôåN¥ zm>”àZnrÅIéÒœ¤}áÓ æ°Ü~”@r={S±‘œ}*)%ŽÝ,‹ç«*@ #=Å0sÎ2GJ¯5å´ùÓF€}ì°ª1]6£ª\À®~Ëm„}¼oöÏ ίÉok=´–†$òŠìd ƒNÖÜ›ßad¹Ž;6¹. ! äs‘ŒÔZvé,’æei×yÿdƒòÅex¨ý‡Ã&™€Ú±ƒ‘œëøVíº*[D«ª€sÅ6½Û‹­ŠÄ]&àjîQïY-,«à˜ÈSä¨ùºãÓò­m|ʺ<É2ˈ”{±ÇjÌ×mÚÛÃöúlÒ̪ª¨‹’@'PÙz“-ÍM9|­"ÕoË ç: ¤MGLÂ>{?$œ*çÓUô·w€A/ËÀ§ûÄcôÿ=*Ì1Co Å…EUS{k”,´ñal‘)wØ»C9ÉÅY;€$äúTüí QȹV óƒJí°µŽzà4—Q¶ØÉý2ÇþRZ.w:¼~U#8Æ1ÿ²þF™"‡‘ø`ƒ¨ÿgÏoW«¶ÈvülÜ{äçø÷éZ=ˆ[“JÁl™W—j jKtÛ@ÁíþG’!vXñŸÓüæ–ï‹i2zü¹Ç©ÅAEXÌœ( wŸ§_ð…. Ì‘ 3Ûúqõ"¦³‹lÇ Ý}‡§æMRÕ%S£sÇ@;wþyü)­É{ÖÙkˆ™W«ƒƒéÕPEu™Ãrsvqn½Œžq†qô ŸÆºL{Ž*¦(l1†î€¡®CÆ”ûÚ+²ˆ^§pÈÇâ+±=Æ+͆ïBºT ^0%\ú©Íݤ˜M]’NzîSÛ§_ÈžNKïCÁçåíìO¶GOè)Q<€@<ý0?Ï_ÉÛCB;õãØcÆ??Lvìs p¤‘Œ 7tãßßÿÕVìldÔ¥1'$©,[ŒŽƒÓ'üò*£ØØ+‘÷°G“€z¿ÏÜVÿ…Ó3Ë•bå‡Ý^zsì*&ÚWEFÍØÆ¿O±\¼3Ü]x㜠žƒ“Óõí €T€ûù*ä={Ž¿áU.õYnå–Ip[jœt×ôý(Žãy)•ÆsïÜúô«QvÔ‹«—Wü¹ôÏ\Œ…¾/‘÷–ã r1»hîO_óøÔLÌrÎvn1Ç üOç"€ªäq„Î}>¼ ƒBËÒŒ Ð$žsëê?qMD\ªŒ’#±éùcüôé*·Ý(ÊIêIê>‡üúõ¤òÁ È;¹*Nqïõÿ'Ö•Áî,+½‰ù@÷Ç$ñßÓü÷«@lÆNrŒc®sôíý1 'LgÜüÇùàÒ0K0 œt_Ô÷ÿ'Ò“Þh(¼àFCß§'=}ÿ­_Ó´ø®˜Ë,(ùq€3õ8ÿ?¥RB]¼°Bî8 Èöǧù5ÒĆÞ×ËŒ:û~Y5vEEÚµ­¢Y°TD•y­,·±U ç«o^I<ŸóŽÂ¡TKAʰ cÁ5ni¢U?(ñÇòãÖ•ƒ}L‹»–U1l+ópsßòâ³£ KóA9ü¹«—ÅXªñ×?:Š(·Æ¤®âO=?.kXÚÄ;Ü–&vÆùzü¹8—Z&Äô-ŽSŒŸ_çéJ„xúrGõížý 4¾¼|øÛž{ÿŸÊŽ¢:Û#·IˆðCœãÚ¸~}+¸µ]º"âÜgþù®?þ*)õ*}W= Dx<š¨+òõ¢ÆàrÓڸαŒN:œTrÝ@Õa¶W•àôÍ!ô"b}G­0IíÍ<¨çŽ3Ÿ­0ÈÆ1Ç\ÒÀñÓÔ⣠…#®=EHpz zgµ#Æ8ÛŠ…ÿÕ?~EX“‡ë‘ÔT’äpM2¦)`äQ1È8§[/5§A ÕŽ4©È?ÁUT”ðºdñå‘×ýªµ«)þʸ}ÞÿZ¤Iÿ„URTuÿ~®;/S)|_#.Õ?ÑPuXyFI%‡_”0Û ´-¢îrÊ£'üZŠ–ei1=‹Œ~]ëfõ1Z‰I+ÝùcŸáäõþ”ðŽ‚¾æêHQŸÓŸÊ´Ö-ƒrޏ'ÈO| XŸî©ãÿgÅfæ_)Vvf‘·‡^0zÄ#O*ç;‘ØžÙ$‘ï€Î(f¬ß.0çœþ´ól§†}¼¶'ó*Ô† ¦V“q7Ì ?‘bGåëJò³?“sÔd}ß|ÿ²­6$˜ÆÖ=vðI÷Çïü&œá˜m@NÓ–^†8ïÕGÖb¯!ÆÜž öêsôÉÿv‘a Û€ù^9Ûÿ­Žßv“ÌÆÖf܃‚Oøœ~,8§d‰8FmÃŒc‘ÛëôǵIÚzŒH#v>ÿçzTù1ŸÝ‚qƯ§CøpÞ¨´ É¶2«#1ùAˆÀ'1‘íÒ•£†Tò¥ÞªN>dÚ·LÈÒ°ØÏ?)…!SIÈQŸÁªAnÏ,U~`v`…>àŸ÷MHÀ¼§Ë eƒüÃОGR>•uHŽ?ùçŸlgëÐûäÒo°ìRŽ9 ìe+×ÄÃýÐüv‘BÄcúp]q;Óý>†¤3*‡Ž$s€«Á>˜8øíMÅP8“¶ÎvLŒ?õ`Vx\ñÎÔä`zŽ8úíZ†æ²ì}݃œóи€?à4û†‚âàÆeÏÌWŽý{¯'Ú£04‚v'hlîãÜóÇ=8Í;âQ²a‡Þ!Fâ{xòj¼ŒXàÜ3:Ÿº›wùn磒áùiŒ‚!Õ<ÎIIU8ÁPqë ÿß-Ly£U‡ »<0ƒÏ·vP} 3í0(š/3Ë;€žÊsøgëBAq·j¦7–eò³ò“÷—éÁú| {Õu‘AùK!o›-Á#F1ïßò~³C¹FàÀ‚ϧ%³ÀõZŠÛNQ¬¾dP´.­÷‡ÀÀëéô§{-DÕö1ï,ppûXö ãó<ð= «6/>Øg`ÓÇ€?yy9ãzél<6òY©¸áÏ`psÏëÅdk: Æ’ítŠÎ‰–ßÁã¾?Jj¤eî¶.*ä_dûSU ‚Bç'dýûqÇnµ2øbñÆV&*Ã9oÓ>ÙçÝ;ÔÖSˆ.í¯·C€s’ þ.?*ï†NU†r=+9ÔqظÁKs‡´ð­À¸ЄÈbõç’1êzðGJÚ`šuÑòwpïrA'ëÂŽkrfÁ#÷TœÖ¹3ºe/+òNö#Üþ]óP¤ç¹|ª;m¼‚HAŸAý)øÈÏ"³ôYšr«}ø˜£ØŽß­hÛ=ºVOGcDôùýi@ç´u*PpF• QÅrú桨Ûêöv\ª­Ã¨b¨2ª[žyë][}Gå\ÊÉy㈣Amã/óŽ˜éõjº{Ý“=KÝÃR£–6iG"M䲞ǓZr›KI§'Z“UtØnc{¹.ö_”¨*6…piÚš5Þr‘Œ³ÆÛ9ëøÒ{Ø6Ô¡àÞt•ÏÏ<²JÇ×-é[ã‚Er^Õ­-´Õ°º˜E,,Á7te'<}3Šèüç»]°oD<4Œ¥xÿg?Ϊió;Š r¢Ž½cý¯£È‘ ̧*=qþ5CGñ[ÚCa¨+Çq‡X?§AÁ®QUa@ÀQØ BˆX¶ÕÝÜãšJzYƒ‹½ÑYa3ʳJ¸ÿ«S×'ø½N‘"»: ÜîiAóNuên;¹#Š`ç$”Œ‚?‘¨ xé@Çd98úTs²ˆX¶vàä{T¨ÃÕkç1Û4˜'©ì?Šâ{Sn’AbÙ>€ƒÿÅgðJÔµ@ qÏ?çfDË$‰‚N1Ôuýý©[Vñâ<äž¾¾ÿ&®[ÄP|ñÏ©ª—ò>Ù,qþ}7¯–ç ô¬Iäi.%l†sßПùéJ;Ž[¶ÊVÙ '$óÞ±u&Ãg•ÏŒ*FHïÇ'Ôö§åùvÆWŠg3Vv!9( g9SïݽºÓںϤo¢ßÊýJ“¡}OÖ¹]™2€r2:¡:œ×Ee+CàýI€;ˆe䌜¨Ö•MPá£9;"|´9#q,NxÇÿ¬Tvê#Œ¼ŽBp¹d!Ž×§Üˆ*ûýU‘—(\d„>¬xãéÏå[–ÑLœ+)ÏÌPvê{÷Èÿ‡ÛžÕQùW=3“ßüö« )~à÷€ÿ?åVÉZŽrU6RO¯ÿ_üðj2@1î°ëØcÿÏ);—hÈ9ãïßÿÕõ¨›'iÁÀ=zúz~¥Õ$zJ€2¿e;pv×¶O_Ö»YÛfŒã°·=¿Ù®OËoJŠ]GS¡ê,Áp¥±Q‘Á §×Šq`ã'’1M'98Ï5ÆueÀ< c¨qóçS`€89úÔlqß>@ëÐTYOOcR±z‘êjˆð6äà“RƆ6s‘ÈçŠc)<9ú’Xg?⢘ç<ü½ !‘ÈA ƒÙò¯JUñ·­+ónøÁíLfT£ŒŒt¢Û?•cŸnâ´"Õ[Täqýjƒ€ÞˆgªŸü{5¡«].\`gÌV{|¾°så/ópÙz˜ÏwèU²DK8ÚWÉ#!HÏØæœú—ÙO0¸Fç°ý;Ôšry¶&>fL#üý Gy ¢°(ìF{ú`þ•¦êF©hZ²¼†é±¡dÏFUÿBeHWayèsÿ×7²Gr ó ®A<ä~5ÑÚ^ â ç#‘¸ðïº%eш†íÊsÃH9ÿÇÿÏ4ÀªåT$J€?ª·?jžK² ¬’á‡dõ÷ù…4έ±%ç''¯ÕÍIAŒàFOlùe¹ÿ¾H?új˜*$gl€Œ`I ~kU–V›$er‚sÀÁùzÊÛò§ ¡—¨ç§ÿ[>¿-¹>ç]å·cÁ~ ÿ\qHYÔí 0FXÏ>¤wŸ_¼*4FØUXo‹Ðãaý0ïžžô¤¹*¤Ÿ{ ÛÜûsÔã¯Þ¤ÈÏ&çʱÎw±àuÆOáŒÿãÆˆÙðWÊ9o›`Ècæ=FpÞ `3>æHpHln=:û˜ÒîócQæ Ää ž™À<àð§ë@eó[!C7BH Ãë–8㟨¦2㇠7í\ž{¸#ÐðjH–9ØùŠÄŒü¬Ä™ï}F0H‰(V(Ö3÷wwägœãúgÐÒ¸ÈþÏ¢ ¬,@R#éœrü²jQTXÄò°\ñÁ?÷ÈÏê)~Ë–8 €ß0ÛÇ_lqõÚ=ªdÙƒ»kªðA;±`p)\+ˆXUG‰Aà˜Çó&•à"L‹©Œõà?R$o4Šëò(ÎСA'=r¾Ý©²ªI¯,«É@Asž¼tì(ê2–øcˆ¼8Ãg>^U þ˜çÖ©±™ä*ü¬U‡·óƒßV¦—Ê}Ñù’7 3¶vŒ„tèý@Ô>hÞU¤SŒd)ïÉé鯠­ ‰c•Uwƒ€ª€ÁÎ1ùÿJ6®‹©S†ÇUl¦WèpSÅ2IB€ÌŸ:’6O½Ïªœç·~§Ò$¤’Fî_’ä)b~ ûqý¸0žY³öy$rÃ.ã'×ï2zŸåÅ6[[ˆçÙçß“Œzø«bä`¨Åˆà°$“Ø3Ï~ýÏ»ò»Ú%'?+ž¼çŒ…Ï8õçéš.ÐY‘gA–æ2rÌçOPz}¹8ô©–GVp]ò~@ Œt<68ú`{š ¿¾,û”ޝ¸¼?ŸÇ¿aHóG¾5R¶ž®Žx¸“ŸÃŽÃ½€ÉFUà ·¨êË÷’xê8üOR{UdóÔ"HpIíÔóôëì0j{‰@þ4*sÁ+• ö*Oò{C!wÚ23µ¹G9ÉÀÆTõÿ“Ò© ²±ÞÇqÜd$óŒ·×©ëõôãŠRfbrÛ‹dIb9çŸOR~„TçäB¸!pT€*êp?\ý( ¬Ä‚¥†âÌ@9éèñÁª,ªîäHlç®1×ëÉ÷âɰº°`0~`svã§N9Ü}»Q$å"ØÌËòmÌFA ô$g±î;⫼›Ü€Ç$‚NG’8ã¯\ߊ, ËC–i9 ¶z~ýoË´týM"¼IÔ’à\ÊÙ+Ã’pßÂO×±) !v¾3”\`¿áõ^€¯œSCM£Ö –;¨RhH1¿*EijDÊÿ2·v5çº?ˆ'ÓúÑË©û¿äð=ºWi±isSDß+7Ì3¼ŸÒ¹'MŨš9û½ûžKe2Z»nhÈ»ç9Î:tšCùºd?2’Ñ‚§OlT×6Ñß"«™gŸ‘±Ÿóýj‰“MÑÙPM$©;ÈöœžÝqIË™[¨%Êî]š;–˜ž ûÑ:}þ`¥bÏoäÎй$6ì‘Áàtö-ýkVÓR†í¾GR®~F–ã¸íÞBßz¤ˆ(ç¿Öˆ¶˜ÚºÐƒFS¶V#‡Ä˜ÏrOÿZµ8 ’>†ªé1mµVçs(ÎzñW[Ô€J™nTv¸$u§çœdñM64`³)mØ Z‘ŠÀûߘé\–ˆâoê÷2H¡PRp:±ãÿÖKKW݃ÔdŒþU6v¶«û‹hâÏ'jÍ\edÉi¶ŒýR{™l&‹M‚I.dM¨Åvªç¾N+BÎÛì¶PÛŽDH©×Ðb§ ÓŠ~WÚ“zXÖåTµ…$ó+¸òXš›wò?*w4˜^Fy4† ÇpëÍ!'“ùRŒqÏ^´zþ¹4jþ¤Rœ±ÈÅ5€ÇLÁ9§+…e<ñ@ãoQœT8ùŽ:÷©PûŠFUÏ$dq@ƒ#'‘Ç¿J«©cÈ› É$u“õÅY _AT5&QêíÁ=¿Q“즪;Š[-y¿2í9'Ÿþ®Ÿð Üv¢ŽGJÊÓãW”²’xžœõ×ul·œ}sN[“VŠÄXvɬ‹ÞÝEŸãn1Øuÿÿ­G oÎqŽ@=±Ï隯¦Æ>ÒX¨'f±ïúŸüxÓZ {šn@‹ch8ô¬´­¹r]ð\ËxüEnËòÄÄŽGóíúÖM´^là±È9>üÿ ¿™¢,R,Û¦ÉBB€~½ÿÇñ«==0zsPÇ’|Â0[žŸç¶)f¹ŠFTÉÀÜ@É¤ÊØ—«G…sŽ•âAgœD„/†>øÇOƨÿoê`yÏž@ÉýÔ@‚=wsú µNL—4tZ…”WÖW²ýÙT®}c^hEßÙó#%uÁüÿ1êk­³ñtLvÜ€Àœ†AÇrAÀªZ†šº†¥%í£ƒ¥K?‹àt=3ÏÖ´ï $e6¥ª9òu c®îF}ýO··Öº=>Ý®<7<<æe•Èè`1ëÀþ´±øa‘CÉ1 Œ|§‘þsW¥´[="[H—ýdû{p ýT¦žˆJ/©Êdˆåœ)ùN¢ÿõë<#9`ÁdäœtçÇ­mÝÁäǵ¸g*s²‹F„#p>ñÇ<÷ŠÒ2"Æ¥¥¼³M0Ÿ%pìJcÀã½n!,>d ‘–ÕI®N¤<Õ—»o˜~üãÚ¶RMf{VÄFH%.Þºš™&RhК³…hч`s´åMIBíÝÐaIÏç’*ϳhç+ÊÍ/ÝØO_ßnƶ(ÄPztÆr}Ç|~?JÍè5¨‚<ã¹À‚yïßù`ûS‘2įä‡è}6ÞB‹(rHœr0?§Oo¥Vº—?UPsƒsþ}ÿ3‘w•zî«…#–Î=χ¥U´ºÅ̇q¿ùÿ>þµ,“³çƒpyõú_\âµQ³3½Ê,íÀÚH>Ù?OéO,Ü'ñÉëüÿúÔÕA#ä€ :…XŠ3c/ÐŽ?ϥđ$pˆÛs²ïn9 à~=úþ^õ(_˜ p\~?­&ó2Fp7qïü±ÿ÷§¸îáp@#ùOnÞµ7†09#'#¿Ž;þô¥s‰+ƒõç¨ÿ?þª— :~¯ÓŽsÿêõ¨\~ô <*Á=r) gYw‘¢È2yƒ˜Ås>§ó®žÿ"U=vü«–Û'÷k:{1ÌôÇ=Î4‡$íãϽLÜ(éš…ñ×'§Zä;QéÓ9= C# ÷äR¹¸Q·|§ƒéHL…¹Á’{i…NF9Æ*Vþ/›“ÅFrz;rqHhˆœzŽ})²ŽO'½HÙ8è1ëQ¸Âv¤2)êF;sI)Ä$ã¨|Üô470šc2n03ëš}°ÊŒ÷¨îF_­Im€:qWÐD:Ï:\¿†8ÿhUKž<' “Ç•1W5¦+¤ÎÇÛùŠ©¨a|*¹ê"úVÙz˜ÏwèGdTXÆ6È'ùä [¦% ‚;ÿLŸnÝ©¶w¥´"B ˆ×ælŽÞµCQ¿G;».wþÄ÷éÓô­nD6¬Rb¢ë `|§±>žÕ¡k2ÀÒ£1 A@§¨ç=+%ŒÀ‰›æ8oË·ùçÔV”eU¤ßË·89­%kY;ÊR&>gß9d ûÒÛ΂pwë– ç·åUnK†Œ‘’½·O¥3`l)ÆUˆù˜ã§¹éþ{ТFÄ÷©4r9@ëœr?>ƒüôªÖ· ŽHdr@Ï#ÔÿõúU ¬S ùÁÁïìÈ©mAYÐe‡#8N{{ÒqIíšñÝ&åA„-Ó'~ƒ×§#ÔælR6y ~gŒõ=2pj—”çc“ƶû½?:•%;AÞ7•l“×·ÔVm-Êò-ùlcÞ m¹¹ÆO±éØóï×µ'–êä– ÎÜêpzäuàuô¨~Ñ"³ÝŽÄŒcñõ«i—WdHv¤?qH=ïúRÛqî]¶·*W ¿6z×'¯ÿ\Õ¤TMªCü£ÁÈáù H´© ‰q8G#'ŸlÒËdÐ&Pºäýäo˜ûã¿çY6›-&‡»ÙçÓùqPI?O¸TÎzñúTé´ Ai?~GÛÀg#êjKxž —så²ÙÈõÿ9¥{×ìê$žaaÓ*[?VãTÞÍ"$ó݈Â(r¸üÉïÐw5³$ PP?éUe‘v”ûJ&I1'Ì21‚?‘¤›F#éÒÇ!€ÿÌ ú çR4Ä¿èò„+ÎÖ‘Jÿèdþµ9-›Íl0ÀR»½³Ðçò¤Y¦*Åí=SÌ#ÿFZÒì‹" [$áz~Ÿ0?‡DÁ$}„ãª2–ú÷éß¿¿J·ºEË&åƒÆeÏäÀÿ:‡ý!‘#WV=̇ôÇô4l¡ ¹¶W¶ãSœãŽœ~~•IöÈ…B‡lämŽýA?ŸóíjYU•4‹pJ,»±ŸQÏ~¬­äšfSy>YçÐ\Ö‘DÉ–ç¼x2Ë*¤I•-½²Üò1Ç~ÿŸ­gÉ«NÒ9Ò •‡<÷9áÒ¨‰$^TÏ,nìB/$öãô«7Ó?“Ä[¤~ ™Ïä=kUó²O+ÌX2³g8’äþ=ûÔ–º„±f'@rN`%O^ãô÷¦[Äøo5TÉ,I'ß¿øóU‘qp‚>yääöÉÏ_JÒÉèMÚ7#Ôaœ•ÜP±æU@sïÓ¯N£¿a¤ âÄ/s•ôèNr~œýEs²íö`)èTúVÎœÆæÅrrã*@\±{ôúôTJ6W);»”‘µ‚¥‹‰’qÈ ¼õÆÔ†Œ#·Ý@ ü­œsôëëê3J µÆÒ›‰Î%Ãqƒƒódô=ùô©$¢…Ì„(Âå˜ nÊ‚I3‘Žs@ì9[kôÛÈÀìF~¿7_öÎ>”Í(V9 ãÏñǧ cŠlL±Å¹v‘•ÉåÎwdžAõî=EH$ ªû‚‚B‚ÈðŸâ'å÷€ÁRÈÌHŸøÿ¨Š³]ù„çs)íòçúÖwoVU•´/['—nª¤3Φ8#µåŽ=¨ dã#uAvT`í#ŸjpûÀ“ý)½(õ¥äS•‘xÀÉ!bJòÎ3Øþ|/ýôkb\¤E·m?7¥c:$PÈH-Êç<ß‘ÇÕ¥TH‘6•j¶Ð¤+»,r:s×õ­çƒP[œžKrNqþyÍLÄîàœŽ´Iê8ìfj¹vÏÞÿà“Jåû ý?¨§^&æ#׌þ8®hÒ³öc#.7¹o§ù9ª¾„ÛÞ$Ô2nã‚Ktÿõ ŸÂ›kynò PF@ö<ŸÓð§].e@Î6Ÿ—h½Ãñ«,Û#$á°:Ò¾ƒêU‘þÏf÷ç9ú~x®Qà“R¼kÉìײ¾d€äv0mßêÅû„EðXƒ’sÏ úr* i6F “ƪìJ¦AnO׎ÝÍi5"Zèc\4ùtÑÛÆ~ò¹ù[xÀãê*ìQÚÉa"Á—†V%_Aì8ý)×v±Î’ÉåÊrÝ·òÆ3žŸ­rò¡¹x#RR7ÂŒ{qí’=+X®n¦Rv!Ôm•ÙH=õ^yÈñç=;U‹ ZãL¼˜Â*ñž0F=T ýyÇ­GªÜí‘ÊÌXdnã Üéþ5’1qq dã)¹}3íúÖés-Lïg¡éZn¦/áß«!gÛÀ#äV‰§Í&ÐÁ‹€[8ÁÏáŠó;JâÖXÌw.dT!Ž3`+®Ò/—Q…K«ùè§æ,FG­sN—.«chÔ¹zòÓN¼‘¦fBÜdnãÓÓ§Ÿyáû)£Qäà«)'P{~U¯%º¢äü8N§Ûò¨¶È1MOñÛ°ã¸Î=êS}Úîs¶þ¾IÚHeü»É9ã§øÔ°ßÜé× owÔu ŒuÏR>¹®’=BÀW¹±ÓŒŽ¤ÿ‡åPß5­Ôd8V98'ŽsÏQíøU)·ñ"\WFbjšrݬz•„ŠHïpÿþzT:~¹ÑùwRe\ž¿'׎‡ð©Ûv›]ÚÊ%Ä»Cú6?…±žõ™}kë}²ÉÇ™ŒÉ B1úþ5jÍY’ôwFƒ\ùI,…ˆbp ?—'ÿ¯ùWà<,¶Á¶ýà úŽØªVë¼¶ÑÏíÏ××¥k¤DË0+í!w;{‡éëþ~·#¶œ‘ÿ,ò:p[òÿŸ¸©a‡ÊQ²÷<×׌ÔÒA‚0[‚ éøqŸóß¡Ì ÀxÜ÷™¹ÇóÇùïNÆì…V<`åsþ<þ¾æ˜4€œc<ãÓçÓ´˜b Œçž¿Ìûÿœš@Îx\sÀÿÏ~zóô§®áòœôÀ`_§éÓÚ‘ÈÝÐñÇâÏøXXvŒpzþ?‡éô ‚äc­è1‘ü¿Èô¦K—"¯1¾p¸Çü*âDP³Ó”GcŸåþMWpâ,‘†GùqŒ|½)& éµS.^AÁ_ýW-…þñ®›Wܺt™þ&_ÃæÊe½*i­ žç«¿ #ùUr[9éÓÖ¬ ¹S»±ã¥BA$‘\gaXœûrGâ˜_(íš‘”†'üõ¨  œŒu÷ @Ã*9çéQœ‚T.!8Ê“Çõ¨Ûiž=jKDLI'€¨˜Œ°#…JÁXîàc'µ2N9^h';IïÍ,›¼ƒŒ`ö ) “Ó<ûÓ_!œ‚x¢àe\`1&¥¶/5Éç¥MnŒŠÑì"¦¾?âK9ÉÎó¤ðʆ>Zg…;_?ñ)“БFªðàì'ò­#²õ2–ïÐÀ2ȶ‘++°lç·z¥0ˆ0f›hîç‘é[l!ÄAáTƒœñ_J£«Xrv9äpï‘]jö0iÚãlã72 Õ›ûþY­çj‚8c<ô­VÒ¥ˆ PÁ\0ÈüzÕÖRG™’ ŒÆ3øžiIë¨ÒvЫrU%I‘‚˜új(§HÛ÷€œ~?í ºÑ¤„Œn9Ú7ž¦²¤o)ü¶fm£€Û¯S„Ç‹FW$¼Œdð9?•O§åî™óÀ9ÉÀãëz¨¬%esó ÎxÍmÛ@‘F#ŒbÀ– œóùS“²UÇ•'¾cÛü+jÇI’ç÷³4‰AØ«³w>Ý?Z«¥¢Ïsp£vÃŒ€1ŒwÏá] ™`Vw€Çø 朞ÈÚ1êÉV ‹lH¨Ç_Ç×ëR;,0¯™°)áT/OǧéXÿÚ2üÍû¾£i\×ô"š·JaÜýÔÏß 9¬ù_Rù—Cv)L˜1Ä6¬Î?.)ò\¢6Ý€>ƒëYëw$˜I“ÐÐ{ñŒÄRï ´ïÜ€?§>╇ÌYžäÉâ\|¡ ~<Ò3—…ef<ŽB÷ÿ¾sUÌ„«|ÏÓ¥¾_©ÁýEW”È[hu( õ¿?<i ä÷K$Lk!ǯO~HýAª rÌŒ©µÕ8—v3õRâªLÊÎÛOͰäa“õÍC:2‰Ãì$cÎ{oþ•¢‰ ²U%Ø…a„í }“ú‘‚ñò»‚2ß¹çþú(3×Hñ|²I´Ž±œ çý’0iÂ2ä¬aq€KyHÃÿ'¥0D¶òÅûÁò/€ˆqø€"´ÖØ‘<ÁÉeØ3õùHüÿ*k™ÃF‚!Â]r~¤‘úŠk»Â „9 2YfùT}{ÿßT$ ˜În#{™9PŒ¨¡JÙÈÇâÿZ@²j6óGØPäÏï8QíÏáVuŸ>?6àIó|ª‰8'¯¾k¥±ðå¬Ñ‰bIC«F8#˜ëÐô­%5vB3²1¼7áǸ·»MÄrG*G þ_çš½q£‹÷·—/,²çqe$*ç€8Ïò®²H"0!À^ H'ëTµkË+@%½‘0ƒ!{ú×?´”¤kì҉筤N|Ù¦Mª8ù—§çþ,Vlo34ÒÁ”§cŒäë]«­Ç{]>5E=db¸¨‹)U »º‚qÈÊàûnjÝî™uÇ£dà§B é·ñ$U9&Ü…ŽdÆw†ùŽp$ò8úò:SVz ~c".bcÉ8èr3·»ü€Ï'&œY“r• ¡#¯À|»äði—æ”ô` 1Îp=ú޽)ÑTñÉLppLäcŸ`SLBeÄJͳ’F@íŽN @©T»+„]ÊKÚqêG'œŽN)¬Ì“I¸°É}ÀÍŽ9<†ãçåéOR$tQÉÝ€ Œ¯Húþ˜¤3½Ó_ÌÒ¬Ž"OR=yüêý‚î*Äü¡G=?‡Ÿ§DcÓ¬Àþä}:}áÓó­k<¥ª» qø á‘ÕØèF?Zã¿àk6=Z!0Šâ)-Ëœ#¶ 7üd_Ö´ pqÚ¡«šcø 0IqÜ€iŠùÆZl’ÇàÖɉ `ôúV|Zµ¼÷¢Õ ó m¹{n3üûÖN«âhm! *0–FP— ž ì>•{F°x]¯o6›éAÈQÄHyÚ=údúÕòÙ]‘Íwdj€wŒÏN´­Œ‚G|Ð_w@@úSFIÏ ~•†à¤‚A÷¤ä‘ÈÀëHGÍœñéŠkÈ#^ƒvqÒ€cŒ¹89^ÿOêiKF\.{ÿŸjز°ã-‘ŸÓù“ùTWn P?ôΉ¹n<³°ã§áO'iç§©¬ó}kkoæ\:"°Ü98ÏJ•^äÝë·*Ù–#¦h°&,8ÁÀêIªd`Ô‘×j¬Š0e 7^pið Ž ˆdÀà.Pë‰r»ǦWïøuª£J’Ü÷È¿ÿV=Ì…›cdñ’¾¹è?þ¢´ û¤ë¸ýãß¾¯ä;U-Œžåôc\c§#4c8==Å9¢aN~”Ó Œ~"¤¢éÂ9éƒù~¢›b£Ër¹ ¹<Ç‘üé·Œ@!>ör¿‡OýþufÒ0–ÊS–àúŽƒô«¡=F6ï´FÙ*ÙÀÏ×ô­>YO'=²*°ÏmÁÿ?—çSžFÞ„÷Í&4ŽY´Pëtñ,˜\m.WëÛ½gÛê±Û²Æ6E8U}ãõÉÀ÷ÀS]5ÊyÖo–*„dñÛÒ¸]_vƆBêËÑ •'ÐŒœþ•½?{Fe=†Þ£|éí Œ°yXëÇÿ\ŠÉµº²š7W’ˆ¥Á— cŒgó®rÒñm$o”¼Œ íÆ‰|ÃŒc>ÿÖ‰¯e¸XüùÐ’ ž˜#ùezzVê•‘—=Ù_R¹]>d¶þ>f¢‚G ÃîžrGlãåTH—c ÷ ñøñüªXì.fž3e²H«½Ð#5¾‰kq¶±‚¼/\ŒQþ5ÓxYöŽz §7|cüŠÇ“Lº†Ù…Í´Ñ„£2‘¸ï]–ƒ¤Íf‰,¤#ÎÅäö#ëXÕ’å4„]Í‹„…¢"P¬¬HcרúW8NÙK[$¿+|æ;†S¡Î+§‘T©ùU‡AŒò=…yö´¿d¿;¤uŒòdçÛß·lZÂ’¾†“v:¸u@V[VŸ# K Èý:TÖéo~åÛITƒ*8=ÀÆ%õì`=îc0`œ{úþ5³i®‡Œ„‘|æRH§øbªPkbT»›W:»ÐI-´‡†È=ðGqí\–¡¼lrÓD~b¤£&Þ¸Àü*[7{zÖ(î î“?+çf=3è)Þ'ÓÌšì²îX‘•ýØÉÆ;UAr»6)4ÕÒ(Íwr $"^Z²ÿºÿä*¥ Ý©œO #,Ç9ìAèMY–FÓä3 ÑÁ`ƒŸ¨éŽ ¼‚ÞXEͺªñ—A€w#Ÿb*Õ$C4VDhĈß)çÐŒ~]Ç¡þ¤èYÈŸîÿ 8ÿ#Ò™¸·‰~rU€qŒðïÈôê~™§-Ñ7 ± »—tݸúÜRJá¶åÔ Ü’9 œçêy÷ÿ=Ü2íÀÜ ôÇÿ[ Çñ¦Ep‹/ïT#ïpÜýyéW× ‚ƒŽ9ä=Ž?×°¡» XŽ_0;`*ŽùêyÇzþPcè0=û}8ÿwÞƒ2–!Bîç?çòãè*<8$äppyúúúúަHÈSŽƒÔvçüô÷ª×'uÒ’GÜ“žùÁþ¿ãÞ¤W ÖϸçõÇj©)&~rð"š@uZè ¥¿_¼¿ú®?Ì÷ý+¬×¿±åÎ7n^Ÿï åwŸîŠšz!ÏsÕÛnpGÌy¨Øzcð©XäpFj,“Æx"¹²³.[p3Q±1Èù‡µLÁ›<ö⢠ŽûÒcHˆð25-žúÔ¬­ØàÖ™ÔñÇ%‘œr:æšÃ˜üjFŽÈeLœ2àqø~Ÿ¥ m˜##€X¯p?”ZTÜ)ÿCŸ­H–òȸãW ŸëÇÔR‹t Axäg¯å·“õÍMÇb$òãv pÊqôßü²>•BIR¡ß˜¾U† þŒ+U¬<Â¥D…ÈùÙúý3ÓØç¯j«ýŸ/›°©…ñ*¡ÓHVfsä“÷žS6p®»O¶FU­ {LFÍ A¨'”Æ?à øÆµ¥X-ÂôbÙ¹òxÆsÔþ5BkÒ™²ÀÏCÀÿ€7ëG3{’!¸¶Žñ™Þ?4cÈþUZH£mÎÄ1p¥ÌOÄÿõªÂLó±u FpÆ3¿'ê€øæšd•Ø©Y8ÇÌ[säãÔ¡?ç­5pv¶ÑÈ£Œ2¢cxSÉÿyw~¦ªÏlÇNe´ÉI8Qr?‹PgR†R#7ÈA·ñ)üØUŒÆdòÙ‘UTæO”dãžr?ô*­Q;£¿šâyÖ,H²üÈ€£ƒÛŽNZï´Ëý9tµ¼‘ÄI(;Ë9zäzôÆOÊ“1f¤!=“Žy™=*Œr0Fµ™Ø‰ïÐîÇ©àV²‡:!K•ž‡kâ-.âäAepÄíoÈ ¯ùâ¸ÿÃ9Ö \ò¥N8ïÇ­V²†yç‚àYùÓ,qäÍ§zê¼WnM½­ä€’åÊêG½f’§=:–ÛœNJ'{{…6©oC·j ŸNNs×Ú¬.“(ðÒ]?˜$VnzzŠét}FÛgžD¸|dnàÇ sÛš‹Ä.áe¾UêeToOJ®wÍa(«\âJG ççc63õ铞;ÓDBYDCDƒÏ æ=zº¶±\ù;01€qŒ“Áéþ}k>Óu½Ï’ Þ0@m¹ú×Bf'U Z´ú„òÆÎŠ?x@Ú)Ï>½G_^õÙÛªº °ÜqÓ'üãÓë\,72Z]­Ä[2 3/›ü'‚29ôëÓ jÛx…¬ð>ÊdL’§Í߯¾•ËR.[ÂI#¨óЂ9`zãׯ±ç¯¸®;Ä:qµºŽXYü©˜›w9õë€~ÕÑé-̳ß2ŒÉµÓ¹F3ÀÇ\dr=OJÍñL©ö{dÚ‹–ÚHÁêGâZŠzJÈ©ë’U%0™ç)ÂÍ×ät=EJ2a>a¸ $gzüÀsê>ñ§4l¬ÇàŽIÀ\û¿;V…–…synYXEW‚÷ˆã¿ŸZérKs$›ÐÍŒ#¨Ê°Æîzœð;sƒÀÏ^jÊdRs³{0Þp@üA¹ùkJm ö(ÆÙ#Ÿi“iÉÇ?Åž¾þ¦¨XG ½‰rT‰ dä~¸çÎ:ž*nžÌv±è‘DR(ØÆyô ÿJ¿l‰Wû£R1Þ1“…ÆxÿdÕÆ FAéÅpÈêŠ0£³TžöÊ8·•‰óq»h8Ç`*}?PZÅiy&ë¤ýÙ ràŽ´B—QëW±ÆådWì+ùÿ:´m-ÓRWh“s.U¶ŽþµM­™)=Ðéfx¡&8]ˆÉã“ødÖ]Õé–K‰‚¶ß/äÓì YÖdR‚v†<ພXŸáõÊEö}6'ÔÝî “|¸çž§¯¿½8F┚f–‡~ Ô$֮іÀAìGoSé]r¨<àgÚ¸Gu.«wu.!óc8…GîäŸÏù×t¡€Çµ*ºJÅSøn7€z~´ªùàƒè9§Ç;”cµ/–:³(Ž»Z«Ü?ïålÇùü?Z¹³ëTeVóÑù*¿1PzçúS@Êó]E ‰È7óì;õ'ð¬·Öo– -¥ˆ;®ÀÄ‘·¡ô EÝšÛ,j¢E‰œ°œü¹ýI§Þ[¼÷1cnùÃã¾?ÉWó­Fm²]}PØB3¾xÓŽ03Ò´­d’U”Ë”C©œñßó¬ýmÏö†•Ïq¿žƒhÍ]ê]IYT‹TŒ©'ÌHè;€çÞ“øPïïˆW;Ž0}éÛvƒò‚;sO;Áár{*½ÍÃÆ0PGqŒûT%r›)Ü6æÂÉÎOaëøÿ }jհ€:N¯óüjŒK<žfÑŒõ?Åïü¿ =kAC*ôÉO±+¹9L+ìTj@ä“þ4ÙXª¼‚xԌωn1»Œ?/Ô/ýõZ0Â#ˆÆÕ¯¥QA™_9î=†ÿÙ?*º<Ì9ŒóÒ›oÌNÁ4Иn} 9ƒ™Í5¥Ø¤ää) ‰ÛãÓüþUBÿIŠå]–0ÎÜ•.p}ûùU¢áÛoéþHüªÀ9éúÕ]­…¾ç /„nfg“ µcpO—'ÚOsXÐhÀV¶)óàzHõì8'¾zתä×ëHvðãéZªòJÆNŠ<îÇÃ’Ý Y«®XÈ?1ÆsÎÐ;ÿœ·Oðý®Ÿqö˜ƒ vOL“Ž¿—ÓšÑwO´@é‘þ{T®És´¹¥:²ãMDæüGpZCmâ %} ϯ?LûV¼L·¬±’QÀ ûñÿÖý+Ô/LÚ£\Æp'ÈG9v'¡éÇ®=*Ö‹¬G`òY^1Xð6ùAíôÿVáî«¥®§UµŽrÙàŽG_åÞ¹?éeæ†Eäo•Ç×®?Ïa]m¥ÔWvÞ|DäÍ>âÖ;•Û"«r=ë8Ë••(ó#Ǧ‚}*é£!Ö ~ï^;ÖµµŒ:•¾õ#wMËÛÓ ‘Zž-Ó”8¹Dùq‰ç#þŸÈz×;i$Ú-×ÌCBßuÏÝ“šìRçÖç3\®Ì×Ñ}.îA,K*“½f ȃ‚z“Q¸„“«€åAaCÀ<ÿ/ƪE+NBÂLvªwäß_LžyãµLp ;¹êòp~›ÿùŸJž·)mb2À«)åvíäžORã?AèNk2Î)m'h†×ÝÇ'¦2}?k¦Æ –PÇ8 àäÿÈÏ>õͳʡ×z´gäXžzŽ€g¹ü>´Ôº ¢½ä²;Çm@¯–¹ÆG±=*4²»iUš¡Œ—wQýjÌãlv÷±ÛIÀê×Ûšwž—,cK•u\8—çéU}4Z—_HŠKu>~ò+ #íÛþªÎž«Ÿ"H÷|دùÿõÖ­¡M/IW˜†Pr¤.Xg×Þ™sp/-\Á${vÊTd¦2éP›¿ÚEh%2)ç•ãÏCÓ}É©G#vÚ1€ Œ~ühĦ8ƒ’¤r¬Ou?×üjô`îÜÀœ‡'¯~ çÓ¿ëVÄ„!cÈé× ?æ?ž.븱Î]T¶}sR>粂Äc‘ƒôçž?.>´Ôº‰G I½Z€{›ÚïÍ¥:úºÔW-äzé<@ÀiÑúùѬO+Ûõ¬áð•-ÏMqÇ•ßÒ§?NO¥E†ÉÁõ®C°ƒ$–¨Û©ã°&¥ar1Qãoðóô¤!b$pzqQ6w‘øT̯^:óQ“¸ƒèzâÁ8QúTrvŸÂ¤' ¯¥1¾ð8"‘òÀìECp’;æ¬1$mÇjŠr¹v< 1¦8p={f§´Ê±A73â­À9Æ*ÞÂ3¼Lâ[zy£?‘¦xÄ‘Aä–_ähñ/:bg¯š?‘£Ä|èÑï:ÿ#ZÃì˜ÏvLˆ~Í;[å‹víòšÁÖ?(9ੇҶ¢M¶Ñ)\üƒªÛÝ+Uä©<à Ÿî ÒŸÄDö3¡PİÆì~=?] grÈ 0Ž3ß»A\ý©ç¯NO¶;Ÿ§jÜçæ*§ŒØÏêpk5} àí©RvÝ6Òx Cœž¼} —N€´ ’¿(á[¹ÇºûfªÜ7ï¦,Ù+ŒdƒéïÖ´4°¢7wȰ uïóZMZ#O™šð¼‡ ¾Ñž[v=pwãÏZ`ÊË$ë´€IVœö¹ïÜýE[ŠÚeŒyX1ûÁ‰þ™Ï·Ry8ëVa³rÄ˼’ýÛ¶={žÝa\üÈÒÌ­>cg%•q´Ó×Ãè;Ô‘@ăµF=>ŸëÚ¯‹Vù›fq“†>¿†Oõõ¨Þ)<´c»Ks´ú`?ä*yб$LªŒ¬yä¯^=¾¼qÒ®-§–w†Ü01Œõ%€Anxe÷>ž€€?LRÜÊU ެ3Ï=ÏùüªÔ´•®JÓE lÌvŒàŒÓÜÆ<ÁÔ,l ?ÿ ªJG*–mÌÇhÉà~ à}3øT­öÁX£Àõúu*h²Ø-äâL$f0FÒcU$ñüiešìbOßcž<œŸÇñô¨ÜÅdˆ?s•9ü<ÊÌ–U’]£Ë*q¸”^G¶úÕE\Mسs92˜÷ä 3þáÁϸ5WÏ-#°YˆØC3>­ÀüSW6ñ¼¨)èw²üxíÿǨ]²ÈbR\®Xùg9>û ÒÄÜdò*;J …y#Î?àL­ÿ¡ÓJo‘s‰p…SÛ¹Fàþ4È¢…f‰ßÍó Ÿw#v{q÷ºzÔ€Æc˜°\0Â0Ãó©Ø‘T¼×_08(îØØ#ó<ª&™%%Üí e þG'õ¤ û+Ã/ÑØvï’d~TBÑù•“t$Û[(O¾@_ç@X£ª[Ïrè±F]c#r ÚÍÇaÎy5BãMœ‘n2  b[<Ž;ñß¿9­õŽ5²ì æä–L ús„ýjhÁ6ÿÝ#á¹ÊþŸ(ü^©M¡8¦iè÷©`>Ñ5Ä}Ød–¨þf_ëZ…ÔVÖú{ÉÎs.̪¯#¾9ª÷LÂöÜÆ„…M¹ˆžFOR2=:f¯\=Ø¿³²µ¸x-Ø8™¸ ÉÆF}±Ï§5 );²®ícŠŠÎæ2²^©H“rª‚7°öé$y˜L2Dâ¬òéõúÖæ¥¥_\j^EßGcÜ;uÇbÍý8ɧK µý½#<}öÉdŽ?ÏóÝLÍÇ¡JÚ=± \•2.à€:uŽÙÍR»¶"åUApÉG^œv?äUûÉU`Hc*¸Î76ñõ=ý+1¯^o,Ç!GVm<€8ëÓò¦¯{‰µ±±¼*(e%ƒ¢œ:à?ÝýléúÝìŠì+f,|É Þ3ÙWŸ Ç±©´-½+¢šö+hi¥ ƒŽyϰþŸ¨®iMì£õcà·ŽÒ'lH¹çŸ«ß'¿ò®]Ô…õép¬±'Ê™æ^I8㸓ε/u©ï_ËŒÉ}äUÆæ9ÔŸ êj·G3lÔ"ŽèŽ7cÊ“©‘ÇLðqÒˆEÅÝ “MYøoJ[ÒòÈ‘Ü(yºžG^}x×Ms,pFd“ Øco@?Î>´í* Ó”[«§˜ÆB²( Ÿ|}=†+Ä×[¦û:¹ù"x9=Oôž:ÒožvCK–:›Hå¶±D(@Êçúßþ¾k+S†õ;k•q³l§‚=yèzTV^$·û:‹ˆå`ÿë¬CTþÔ¿ó#ÂC¨ÙÜÜûzñþ4ãMßPrV=6(ÌlëÔc®MMÇ_×# ‹È霞Ô<Š€–*=3\¬ÜÉ»¸¸M~ÒÝ.ïåväçèrC«\Ii4SÉòƬAp8Yɶ2ß]ãÎo•sÀ÷>¿•bk—ÒÞÚÃjˆÍ‚àöç§×ò¤UÚD7¡ªjÍy­;JÛ,íÎp™;Ž8ü“ÇÖ¢½ÕžY£¸û.ËPÅ|ù9ØaqUn¦ŠÖé!¤_W`={Œ¦=(‰µ X-Š '“j—ä„ Î8íùú×JеÌo©©à«;«ÍfMBY€XP ‰A:ôp¼0äôÁ¬}EMM0<æW~d“îóŽïŠYo†øÕT*¡Â‚rpœûô5ÍR\òº6‡ºµ6²¸Ç#Ò“p*xúl_êÆã–æãÓ‚ŒqYG+â?¯•Y‹d’ÃpöïÐ~§ô©æ)#9þ={~µVTbU¶åx<EÇêi¡3ÚXä×õ ’Åc„,*äô'éšÓÓ£77’^¼[UWˈ0$ãé´~È´ûK"$±,I;˜äc9ÿtÌVµ´A" HÜGÍSÖ®R] Š}H[O·{±u*y’òï9 ôl°#± ┎߅!E$íÅAZÈâ8ÙÛ8èı|¼®yãÿ¦W®›{,JxC—+ÏÓõ¦G™)#Ðdç§^ŸçÔúU-õ$¶…Dc ‚zóŸÿ]LÑ ¹ÇNØäÓÈ㦨Ûrñ‚>µ# Bsž=¨n! ƒãôÿ Õ”ûœΡ›;qÀ>¼gùÑÔRÞ  €p8÷éøøU‚„Ÿº1ê I ,û™Hùxö=qüªR7NG=)±$UÙ¸àþ^êÑmùŽ+DŽ} ¨gÁ\äm$c¯ùâ„36‰¸è0£·éú*žá’Ò&’FÚ~JKya·G–gTÆ[×Ð~9©­ü«ëq9ÚÞrœq´ú:§ÜŸ!‘bhRUk¨aô5 M¼Œ÷÷©Ä1Á *Œ"£Ø•NÊéoVrc S9Î@ŸÖleÜ\ÔJ’ã9ÇcóÇçT5mU§·h‚á €yëyíÿÖõ©/­Ì¢5BÀp½sßøéÿ&²'ˆåJn „8%HÉ'ýî¾¹=«xÅna)=‘I˜É:¸ ÊÁ˜ðw ¸÷ëÓßÐTwqy–‘É bhÔ|¸ ž ¡þ«O+I(vÁš1œq¸|Ç 8éè­ZžRIfPp~ð>`ê=~|ãÔÚ¶l„? ê1$Ù°±Éó Éá±Êò=«¢†åLï ¸‘è? ó»6’Þáâ$þô aÚôéÛÏÞ»}ÊH‘îå/æ\v±è½³ž¼b±«µ4ƒoAuˆã{wV 3¯O_ ÿ=+‚·T>m¹RU÷sÇQŽ@ãúý+wÅ:ŒÖú´C˜ÁÉ?ÉýkžÓݦNãp.9esßßó¥(µ‘6¹‹8°)ÀÎ0¿‡Võ'½~’.ÕÝI9$n~$)ã=}z}_¸³d àùåWsÔö¦H¥Èó2UvŸGeàŸÈwý*îI!y7œ™p§Ýsôfý1ÀäÓ;‚ǰ»€È1ìó>Õ*$Á‹ g ŸÏ<“úv§±ù¶ˆÐÇ.„(ôÿ:ô£`"6îŒ2¼å£*¬¯ÿO_Ö û8óîYu žäóéWYö}ð÷ ¯L8âÁ;Êm±•Ï¿9ð=~•IØV¹-ÕÜW€GåL!QœIòîì0ÎçÉÏ?íšÖžæsØ¥gº4' OËȾƒÒ·7);9 ¶ïåXvjm£ž@<þCú×M§ZIqpù›Ë‘òd~\ÕÍØPWFjé·—²¤*J¤€;×K¤é+aV ×.Û‰ 8öçð­‚8‚ì •@Éÿ=…6K¸mÇÌÄÉÓ’9éž•Ï*’–ˆÕA-K'(ø ^[nr?ϵ5›Ì¼ç§Lá~µ÷ªËå3äñžGåœþ”$ —Uü”ÞÌÅIêN{þ•Q®åfb±Â¡ò[ßÁÇáP $ƾ~Xò¸=°QùôéV6àªìp~ðG>ý?@O©§k ã7y²9Ž2£¾ÖÜ¿Lú¥8É$p.cµNÆqÿ 6*˜À€‚XðÕ‰ÈÕiAgR¥÷’{‚"GüÓHW'f•s)YHt•~¿R3úÕI‹È›™‡˜ã’È3ù²ƒÿS&Tw ª…9#þù?Ö˜’±W1ïÙ8¹ü‹έ,q0™K:(ä‹à4É}Ó™[sĹ>kÏý´ OHËG±B’Ëó4‰»ƒèWwò¦ù\ÜG§[¬»_s´)õéŽ1TH¶–×W‘Çå Šäï2Ÿî¦qÛ®^‡AÔ&,$¼[Œžß(ãò­Xâ?ÚÖ AH ûA=øš~«u*Gµæ ŒÉ$kÏ$p?–k76Þ†œ©-N{PÑa±·Øî0ÇIp6Žã 8ý=«Õd0^n†èà©Bë‘õǶzt­½J$™Ð^[ÛJII%Œí9¶ç®zâ¸ûÄònq›”ã)^Ýq]4¢ú³ ±Ñé2ɽdY™•Ô丕¸Ç'ϽmÉ3|³ÈÛX€C·\Ž8fäÿÀI¬-'rÛÆ¬à&Æbxú‘Ÿʺì;¨ÕÈxôGl·¯`:{TT²z•í¡QËÌp¯µ÷“¸®Iè@þùéWìµ h§’DþÐFl ‚ÇêíTb·¾”˜þÈBÕH##¿¹úb¯Úi±ÎÞn¢%B@ óc×hç™ïPímJW¹Z÷Äû, lëm+Q.K0<óÛµrO=ýü²É*ɇS‚}Û·à1[Öe ’Ú3ËjÃiR储Ï@~¼U”@‘™W÷‹µˆWÈ#ÐÏà>µq劺D»·©ÊËk,qís¾BsƒÉÉ#~_TH÷;€ÈÆN=Ï­mj+ÿÞ³@ç9B¸ü3þ~•œ"XË2ˆÙI;võηOC6µ:Ý™,7ºš6W(Ns‘óÞº¸´{kØ”Ü<ŒBðæLO§§ÿZ¼¶ ÞÕåG-åJs•=ÇsþzŠÔ´¼–t>np @ú…ÕŒé6j-™èIáÍ Íó9.ê7ó·Ì>€óÞ´l ÒÜŽÂЮ¥ŒWÛ<â¼ßN´È72îòÔ~íqܸç#®3×Ö’óZ»šsºfrN1æciÏô-ÇNƒÒ²t›v¹jit=[Ò]íÚM?d.;§è1þyüøK›™ ÑþÑ\¸ ËÁOq’:ç±§éž!žÁÇ—#¼#‘—r·à;àÌzUí[TÓ¯DM†{a†{u°à"ª0pvš–¨Èò@É*v±.Lo´ƒØgO^§ŠÅmÎ$œç•<¶?YÑ·Øî6žPd¨L ;ºì=k^ÊÚ{©VÞ8üÆðJöã,qÆyﺮZ-D·Øô "e“D·‘ŸcÆ85$»® I'É࢕ “Ó'Ó“Ò¢Ò4“cg S°+•@Nã×¾;p>•5ÉY¦(¡³^‡Ÿð®¾‡OCöfšrÒªùJx\d7oæÕ‰{ª}˜ÈÊ"7Tž½øàý2kOW»ŠÆ³ÃˆOrIÉü Õ h©Îºµð ’Ì àûƒõ·ŠJ7{;ÞÈo‡ü5(ö±æ \;¶’8ÉnüúzWam™¥(³¶X¡#N§ ÉüÇ_Z]_PM.ÁçegcŠ«’Í‚. y­Ö«)’i]–YÉ%ä !ãg8rväç€N?Ls߯zu„l‰‹æ–¦£ØçÒ€G¦ ¥qò“ƒž¼ˆåcnN÷í\ÆäRÿ¬Âœ0Ïø š‡pLóƒÛ<ÈdÒÈ|Ì«qž¹üØþXBò—ec@R=yÇåøš¡£Ì•]£!±íÇúäkLcçÕJÂ<£JÄv8úvüúþ5w) &\ g'×5^êfˆ ¬K1ÂÕ‡lœ?QYÎ<Ç26?{œàz{‡Ö» N@+¹™Ëž3žÿ?‡5~8¼¥P9÷ª¶è$”Éü*03ëþGùÅ[¯½ HÇ'ƒÜPW’r>” Ùç¯nE#d÷Î})  µR|™9'ŸëÿÖó«R¾üÀqšª fÊ©=xü¿¦ãBh“%@=G>¼ÔŠ aE1WG·Zqfî’:c4÷R£¹ª_ÃiI+azÆIŸz{•@<9*ç­rÚèóà·‰pZi•pzÿÀsWÝ‘'dXÔ_þ)æ¼`¨ìœ ’@>þ§#5©§¤ûl—Ëd‚° uc€?Ƴõá.B€d•#P9àâµu[—³ÓÙ¢ù¦$$j9$ž€U=¬$µ.G¹NrSÉŽÊÚE+¹‹d÷cÜÔà”+ÁéŒf³µ©G”‘n7,aëþ}*åIÙ]™° ÒÁœ)8½ïªÊ¸ò¼À³#7—¸0W·ÊTûŽõ§#³Dí÷c?ïýáÇ×vçYS©‘Ú4uû¸^N28¨9'ÜöÑØ€FÏ12#³ £唜©8éÔŽ°©ìck»•»Ê€Üå8ëߟ\ŸJ[H$¸ºaC»q` §ÇÓrþç©®¾ÂÆ->Œd¹áœ“éúQ9¨¡Æ-œmΛ<)´RR˜V'¨Æ}:~cÒ»ÅM¶Ê¤c Ú£‘ÐÜÇ#f0:Œc×ð¨î¯bˆ·ïQ ŽI”¤äh¢¢r>.¶UEuÙ¸pzŒkÂ/&É]”l¶â }OCî"¯_Þjý°1©ÚvûÜàõé¡–8Ô«à*©›ž?ÙŽãqç® tÆê6f/WqŒ˜ãœn¸ëóêǧn)"Ž3¶L®zã9Àé’ï£Ç¥Hʱ¡òQÈ@^üϹ$úP©&~E•›nCøQéÔø ;ˆ„º¸¬6ŽéßøN=ÉäûÒ£²nA#?67°Ü§ó§,o´ U×8Ë0ÉõúçÐ œÛ «ç 70GãÓ>ÝÍBZ•î|ù…†H;˜ò>¸©•Hd™\úzŽß§æŸc˜Ê!åÀP ¸ŸÐý1Z:lŒ…¢rv‡Ï~xüé¶–¢I•å>Y,NOàÏéR9‘Ž7tüøÇCôí¨,…°!<²OËó?ò§-Œ+òˆH9%ãñãµè®Va©DÏ ž6ÿLç§¿ÿYñ•mü“ËߟõüúÖè·‚ !È`Û»Œ{©Å8Zà‡2}6QÎ;6–Ê–M ‘“Óßÿ×HÅ6£ƒ÷{ç8¶|–èÞ`Ï\/_ür³#Èñm°e+…ôÁõ„ïv ÿàÃlé£ÿ|‘Z»_Óôª-Aö[||ÿ*ÝÚ= %ð¡õeÆÏlýj>¤9Èêy©†ã¨ö¨Îï½·$×1ÔFË’¬ Ï=iŒªAuéžÔ±Ê_=ð;R =})èqÛŠÁàÕ‚yù{ûuÍFFæ' ­F£n‘QË´îà÷õgÁfÁÀ´ÙdãÁùO4*1ñÖŸ6>ÏɦÅÈïO¸ @sÎh0gȸpjý¿)Ï œU ’Æ¥_¶@bÈ=r*ÞÂêgx˜cJÝÝe¨5ζ^›•ôZÃhú™Owè00G“ÈEãwNûU‹¨;‘‹ä†ïŸ÷ër2É*X¯È:¶ÞÞì?•Pþθ»;£BÁŽ21ëÍi“ÔÎIÛCÕ3#…ÃsÔ œ û~uÝh°ˆìØ„³Àœ`z~5•§xušb×,B®>QÜþ&·˜Ån|´Â69leˆÇ©úTÕš–ˆtâÖ¬†k¿6O%GUÎàr8<ôªî>ê’ß1£ïéíC:îܸ'§µ"Jc‘^EA´Ã#ýk›·Õ~Ëo M%¼lªòD›‡ÏNsžj£v‰•‘£ M&ÒâòGuó[Ã,·ÏSX×ï¬ZÍo§¤’m>k»  tÇôÏøV­æ­i,SÞ<Ñ5¢Ä¤3&H럔÷ÈãÒ¸{϶3Ä’È…q‰¢XŽzq· Ç\u­)ÁË[jD¤—S6ûR½’g¹y˜ã*v6mèb™$ÚÆí!Ɉb>QÏ ëÔÔwä—ªcº†'XKµÍST®m«3Íú_3,÷- }4lßY þ´àšIšH03’%PN=ˆ?κ#oom "4T@7aqÛ9ÿò+P¹†D‘ÕŸp ýG#þ¾Õ ßb­mÆÛÿ`Ï!D¸¶W~gŸËjçIŠÌ™c †‡F^£oå“ï\…í³|ÒFÀFX`ž~Ÿãõªv’Ma'ú%ûÂÈP )íóG_¨­}ŸfG:ìu aq>ø‘VHÎ~WR¹ãû¹Ç¿'ð¬ûŸj‘LÒ[ذœ+.Î{Ò¦±Ö®!ùn`Y#·}¤õê:võÑÛxŸL¶Œ™/$ð< @üyþu-ԋФ¢÷<úïL¾µv:|ª«ÜÆBž;céþsUmÚ1»Í*!3"’ ž»Oýlׯ[jš^¬ ¼‚fÛ‚¡°ß‘æ¹ígÂð3’=˜9.¿.O8Èà~$ÕB¿I+*VÕ3ƒ»¿2Ê#B>•# À'ýiwK*+“裒xã§voÒ´æðÔ‰“ù@1Âî1÷ÀÛúœU)ôÉáÚ0ë“™wnÉùQõˆ­”¢ö3iõYK`Œ¡{îãðj{¸EƒkHí-P³p=É8ú×M x2[´Žæä½½³‚ÜàÇÔdgЊî!¶Ó´hÊ[Dˆ¼NXýXóÔαee«56õ<çKðN¹w"¼ñhöŸÞHpz uÏøW¤éZ\E¢F¹°vþCÐsÒ¦Kø8¾’~¿áUígk÷€Â8ü?>A®iÔ”÷5ŒTv-Ò.T€„}ïn?Ƴ/.í¬à;øŠ6¹êrozÔ»r–¥cã/^˜À¯7ñ6¢ÈíÉæaóµ[ …*pæv Ë•sâMnUÀ 6‚0WûÃÙsùW}%Í·‡ô¸`a 8“Ødÿ:å| `³µ»½vY.œlŽ!׎§èI•eëZ¥ÍÕï˜åP’Nƒ,G^:(ü1[Ê<òå["¹Uú׵ѩÜ;2|¬"ÜaùÀàžGé\ë¹?$!%‚ø˜p99ùÎ(ž]Ì"mÅ”mÃ8žßÄ}I¤xX©(§‘¸»T}ÒãÐ{ñÀ÷®ˆÅE¹6hé(ó],þVôU6œÀn§ž¨ÜçûƽoM„ÛØCYö®7c¿LW“Z¹‚Uàt*ÎVIÁÏlc#®0+Óô«“%œe‰ÜTgœÿ?Ö¹±6¥cKÌÜÅ@Ï?Ïü*¯—h#9#Ûÿ®qRgi,O©ÿ?¨¤Îw“ÉÆ?*æ6+Ê2ËG±óùœ ¯0`ÑÄ÷®vdûèÔÿÀEZ «C¹Žgž úäÓl”KpÓ»g zÿ^?™÷¦&XTF¡z*ô¥„`·>ô’0ó99<€?Ï#Žþ¼TÜ¢¥Þâ»@Ꭱÿ=ý³U™p»I'¯¿®={þB®;åòsžƒéþF~‚ Tg›a“€O_R~¼çñ•D“ZÆ#„>õ)AÔ/ëN¢*¯ Ž”œœ‘ŸjCn‘Ç­(PT)ÅF1‘Èô¨•AŽ{úP[¦ û¼°QËéßôó¥‰2yRz“ƒß¿êOåQæHNgèíÇÿb?V×dHu' ¦$.AeôãŠÊÕõƒ¦ÆJÀÒ98ÜW õ5f[©N¥on°‘¡É‘Ž3€8ñ¬Ÿ¾Ä²€½2ñž¼Š¨Fí&)=43üCh¿Úšy…™®@““Œàþ„ñíN½"oiñƒ´îF3´àžO| ß5¼’Üx…äº(XB˃ÇÞù¸îO?=žQ⨘îqå¯9?МþuªÐË}KšÈi.´ÈP;·œ®Ê98Ï&¶Ò XK*¯˜3ŽûúôZì™§“癆cî¯÷EZ#$ç¥båucdµ¹ —×=¨:ÏzAÁAÁ9ãÿñÜþUÐHB#7 êV¹ ZfvÚAcóq‘Ôñú0Àþðª3ìDš&w3Àœœç˜oÏÒ–=gýÙ»8Wú óü¹Õí6Ý]÷¹8ƒœ‚sÔ}Bçþ['æ ŸJnvÑ£r­®  RˆK팟_ÌóQÝÞÛÛÀÏ%ÀHQ¶ÈÙ䘠œ=óYwZ™}x·ÙÄóÜò}û„Ó~ñM;h>ÆæÒëÌ6ñ2„8 Ñcw¸Ïã\O#•õh’Ð1”)"ºûçf£e"ÆV ÛÈ}‡Œ‘ò?:äüDÑË®±, ¡Ø}7È‘ŽÕµ-%teSXا±µÊŒÙÿ3è?¥K¢–+ód’Ùœ]¤ûé¿ÂšcPÇs)?x9Ÿ½´˜èiÄ»íó÷e7F²)$ìp¸éÐßs2M¨U3±‚ñJàÛ%öÖ¢EC€†/—?)Ø=ó’6üN A½wÀ`È@}ÿà4÷Žcq´¬¢6^x ×# þy¤2º¯’ÁRUÔ0Áôàž¿'=…Zþe\sœtôÈàþ‡°¦@Ø0òÉÇÌXŽ"ü?iìè®!Üw©ÎýÜÿ zgÛÓi6+Xʯ rN±Î9ú{“Ž8æµ Q*‰å“œüÌ&?äTVÑK8ÏŒt20Ó±ó©î펻¤àÅj¹I$dÃ6:*“Šk¡F*0„n¢«Os9ó=ÇÇò¡’ú ‘3ßÂaã×ü÷©³*âiÓ³¼‚H É?|gn?à'ýj¾<·`#PÄžøídÄ™Ž Õ>Ý;Uˆ5(£.²‹‚XðX§ þ}ëGìMû—Ê©µAÉeãóéYP²@Ë¥sÇЊ¿Ì ¶R<¶À•<ú|ÜÖxbüTyÝ‘¿ê1ÔT¥Nÿn•R eFkœê"gN0i$$óŒw§2çóŒäþ}i¤:mÇ4€fÎ8¨H;˜~Uc'8íQ?\ô&€##ŒðzÓXÀ`€qÉ©V-ª}I<š“ž@ÝÛÚ"£(ó†Þ$툉aÀ¥u+*Œö4O‘Æ2Ozc9éÜ3nSzÕ´ Õ“p?Ò?Þä Ø¶À„px«{ ©›â†Æãý¡úsý+3]h¶©ÐáôWü\Àé‘Ái@ý Rñ Ÿ²ZÄOpåZÓÙÏv\µ‰‹")+Ç8ãŒ{üªìD6ì•Xà`JªãÉC kóun:ÓPÊU|Ãòõ‡åIê5¡¢.+pOEäþYžC&÷`Fzgh?ˆúþ½$EÛÜŸóõãÿ¯M-!2ºŽq‚zû~¿äÒHä`#4c‘ÑW9éõÿ=ZIXóœtïéίãL_“w!súûÿž>•6ÑÆAû¹9aÀ=ÿO§ûÔ rx•\ ʆ00~^?Ïæ>”­”ÀSÑrAç¿?®j7–%`…îrqÛ¿ÿ_>ã¥W¹¸P~ï –û£§§?C“ïE® eÜr$g#“n¼{Ž*å®=ëæáÆ*9ìoä}*=>ÌÞÍæ°Åº>qžŽÇ#éϵjMqöd¿¹#>Z¤wã§çI¾ˆ¤º²­…Æ’—~LhûЕY¤\†aÉžŸ§µl\s§ÈÐGÆõÊ«•Æk€ðþ¦±\?œÂHL›Ù$tãïóÚº«+¯ì»Ç±¸|Z± „à.‡>ŸãJ¤a Ýúêú…¬jòÉnT“œÓ“Óó­­2ûQV¼ÿ>'äç9ü3Qk6º…œ.~ÛdÍ“‰¸¨ôþ°j :"c7ÚtÆÏÏ 9AÿëúöÕ»5rÓ;(Ù/mÆà[¨=©°Æ-¤Û‚»ûÕxâD³BËž]Ý•?‡µËˆ,³ÊGÌ£#©=pO#†µ~ÂÍí0Ûb1ìåO±<ú}}nëéª1Tµ<üøCT¾ ë` é·-ŽF2yägØÖ’h~4²AömEØáiCãþúÚ½Hö™ëK±zçúv¬Ýyv4öhò[ÇñT7;®ãó —6±œ gïã§\Öÿ‡-.õ©Ñ¯m(cÃ3œâSÙA9ÈÏ'ÚÉn% 13ÓüýjÔK³jŒ R­uk S³Ü†âXí!i[!O¼öçZŸW¾òmÆð¤=yè:w? ®·Äº{À²·›(Pxþ¿I¤h–šU²¿–›Šá˜|óïÒ”b®÷®ôègØhr\2éÙ`TŒ1û¼õÈ÷#èk^[ˆàC8Î < ÿÂ×¼] m,ŽnnFÐGé\õÇŠ’ÒÝ£ŽS,î|ãЃ¿L“ŸaÒš§9ê.hÇC¡ñˆ’ÆÝãC™œ²|ݳקç^u$ï}3ÌÎHbHÏ'Óß§I5õÚ™çÚ]†çêÉè1×?Oʧض¾dv˜ÿ9'Èç=t ÆR“âØl£S;~Ò1€:ã§ýõ׌ÔzÛ Îâ!ò 63v‘ÜûýxªñºDáPp Vù@\÷Î23Àü&´µšþæ8Ö]Ùm¬Ò± /$‘ù“×½hüÉë ë{Yn¯ÈË+¿0ý½‰ïž´ýFk[-:K;mÏ+.ÇsÏl cüŒVÅÚ[iv…-¹wl‡?y›¾=±Ûç\[‰Z´+±òòT†äaºçS{Pzhl°dKyÄK± 6ðÙž¹=Y»uÕéú £[³?˜ä®ìãîÇ^WpÌ‘ðªÍè ÄÞçqǦ;׬hl²éÑHÁO'9ùGøV8‘­-Ë~c,ñ'IbsØõâžû°Ä}îŠ}þèýsT„ŒuRz¤c-Ðxã‘Wªg÷…Fxèz2Mr½ Šò2Êäì^‡Ðcôþ5rÎ0䤸c5ŸÄ·(‹Ê»>ƒ¨ýþuzêàÛZ3ƒ†<.yç×­°yŒS›Ö;‡zzŸéVÈ9 {J¥§G‹c9ná{œõúÓÞ\‚ð§“ÔzúzMj aÔ9,8Ç ô_ëø ±d.â0O¯§ù桉<ÖÝŒ…99=}1íüÍ\ÙÀÇAEú/Œ~Õ*s‚r1RHJ®JŒtÕxºéÆAÿ?_Æ’ù˜boÈ ¥r[–äîùvûdgó8Ox"Pìê€àÇŒôÇâxü+[Ô.m,MÄ>Ìü±8À÷ääúŽ*£݉rHÖ„o“p\àcëןԟÄV>»%ÈÔìíšu1Ë*~ì nüÏé[š]§Ù,"BXË´3’yfÇ5…{^øÂÚÉŽ(ÌŒW‚8ÿ)Ãâb–ÇAÂæ!  lãúW-â –oXZ£}ÀXã³Áü2àkZîít¿²ZD €ŒXŒ~dXPYI6©ý¡#>л!ÁqÜŸ¯>ÿ0éUoxSwК{)¡Å¡Ê„Æÿì‚;ãÐc¿ðÖ¶Ÿm¼ÙTù·9nIúŸlãþQƉ]ƒhŒnOÄõþõX¶ŒKxbSœrHã_ÏÿB¥'pJÌÓí'¨ô ýÑŒñO`pNqÈ?ZÌÐÌÕ¦ò¬ØËq‚qŸlÖh<Ÿ‘‰`õ郎Ùù>§5£®HL©p k»=ýÏõÿ€ÔÖ§f÷Ú˜€?‡9ïß7ýò+Xé™=d]ÓF„/LgŽü ~€~u|ŽOJ¯l€vŽzã¯Óù­;HúVmêZØn2¸ÏOÒ˜ƒÃJ“nNy—$v<ô¤2í²]Û´r`‚AAƒ\6¤×Y»–XãIò¨’0Æs‘Ô{Õèdc•'éŠçµˆ¢[¶g(ðº±$ •*AäSZÓ•™E¥Î\D凖²?(dîAà~b¬- U|Æo›GAŸËÞ·÷[‘ ’Æäõ‘Õ‰â ä4€œôùò5¯´3å2¤çj˜ÛîàôÇ\ü§×®*1Q6MÊN½ŸL?=;dûÖÓ% ùT® ûëÁ>ƒ#§¶)c`©°m#|Ë–ÿÐÉ….~ÁÊdª–¨&&ça]§ñ$ÌŸ¥Z¶°†%§GÀê„ǶÿóŠÐ>kýÂÛ@“¼ìÕJâÿk4pÎÁÁ%‰=yÇÍŠ.Þk’å",ˆá¦_˜ŒvÉÎT’Y&9y&Û»…ݵOü Î Åó—XÙ‰l¼˜,}Gÿ¨ÔÊ •Ù/˜Ç–T]­øœ¨4ôÚÇ€BŸ»Çýô2*ÊX± ª½Wî¾1LòæŽRÉŽ@Áß…#êÊ„þµ™ƒ²†ÛLù#=þbOj7 ‰ 0¤˜’2[9Ï”ÿAj]ð ]± ÁýÚÿSUdmAHd‹?(_õd&§í›t°ÄÌüòÇçÏ5v&ä¯å*ïû4™ÎèŸÊ­y>æ³_ 4êΉ8äã¯é€uÉ<àÔÛ?tŸÆ›Œ ãÎt…\ûsüê"¬Å@Ü1SãjáWõ¥ *@§=iU2¯CŸ­7`p9Ç'=jFËÏ~*%müG¯½!‰¸ŒðOlŠcsÎG¥HÅCd`öâ›!\sÉàP¢üÊxíŒÒJ?qÅK"üä}0*+¼ uÇÓ9éð×$އֵ-IXÀ ǹ¬¹@3ãßµj[ŸÝ㟥i"Lo|ÑÚÀ d½ÿϽ3Äc2Ú(çç<~TïgíÚbö3sù¨þ´ß®ë›8Ë7OªÖû?3}¢`IJ–ió’Oùÿ>ÒïŒ:g–è6õ?6Àp¦Èá è¦2Ç¿óÓ­¸Èý…éœ>¿Ï±¦‰KBJ %}F=qþ}ºJHÀ¶âÑXÐþEPÄ"‚áqœóÐ}?ž? ,&833¨v;¶1õǧnp? P±]‹2“œŽ€öÉ'Û±üj2…›-·ÁßÉì=ñú~*ÝŽœnçûLcœžp}:žyÿM»j 6WʰP€`–ÏÞôôþý{¶ÚuÍÉŒËÉî=º{ÖÕ¦ml2±‚{³’Oך•¥ŠÒ3»‚Ç œóY:‹PêÆ»¥¨X€\ õÿ>µWX!4;‰J…ÈRýóȧ‘çÃ,±«nW Ï÷qþOáT5Û€4å´Tá£à¹ÇOóýxQZ¡ÉèrZB<ì yDH÷èxç¿Oÿ]u–ñ¦¯¤ÿgÍÍÜKºÊpW·· ¬/(›p¹2!#pÆYOlõàË9«Û&µ+傦6óA þ¹ëÏlÖõ5f1vFމss %³¸Ø§Fç;8ãè+BÿGI%å˜ Ä~ñŒŽ¹õ4ËçÅv‡‰GÎqžq×=¿,úWUisçÙ‘¶…rzäÖ2ºÕCUfSÒïÒd*Ì€ ¤ÿLÿ’kEà|ù°,ßyIà÷®|Ê!ºvmÈÈÛŠž÷±õãЯ~žÒTšÙXߌøTKMKŽº2‘Ìg.ÊØÊ'9ÈÇ¡ÏCíUµ=.á¤7eÞI0²£67c£=ÇÐúVð@ $Ê” à zÔ©5©N)œ=åôþž9¤ŒÜêW ™ZR0«Ð´ “´U»ï G©YˈJ_Ì È¨z3´g®8ëÆFi³Àš…ÔòÊŽGœZ9 _•Hü‰÷Ïjµo¨jùÙo"xsìF>ß­mwöw2²¾»ÆžÖ ® 2׎øõÎ1ÐŒ}*½Ì†;w”Ψ\Ãñçšëõù ¿UÙ½%C¹‘Æ0=xéîGã\v ²5»Ä…ʪäŽ1Ž¿Ë?ç5ÓN\Ö¹ŒÕ¶1öÈÌ%.XžNãþ*ÕÓç ‚2Âà®x#ƒÝ€ìxªqðàp¾e$ã=O¾µ`Ÿ²“$+¼:€@鎹ÉÿëÖ¯] Ö†úa CôËž¸ÎxëÁ=jÅtŠê ±)œ£>NNT‘Ï=‡n+›†ý^3¬÷@Éîx$$õãš_µ”(æ á·ŽÎAǯC·ñ¬\ T´;»]BÚ+wT9B7`d‘ŽX`ãŽGO_­,š¬qÊQT?!eRqƒè2p2qéõ5Ä ùDlÊ ¥BñЀpFIÆ:zfµtëw¹¸n_#§ï07¯N+7NÚ²”ÛØë-k‡ØªrIÈÛÇ#ƒÛÿ¯[‰nãq-ýãAұΡoiiåŵ²ä}3׿‘§r8bDwBÙ¹ã©<~Ò¹Zmèô]M“F0ÀíÀì? ¨e½¶€_æÆHçüàרø¤«np»G2yÆyî9㧪zÒ;‰ç¸á>`ò êNsŒûþb´T¥kê+ØïWr±ãvIÿWô«R2©¼ØüÕÈ\øºØÐ”àn\…ÆO·<)„Ý}?JÖ8o{R]4*Í-ÅÌûägbîHÉØwøô4ÅŒ Ìªw\gñÏô©âO0º²‡#î²äcOÇÓ¥H’¬êÈé†Q‚ŸÔWeìs„R+æ'P®޽õ­ k¢Ö¥J!¸‡ ÔÉÇÎ{Ö3Å岎ýˆlg8ãùþu"LÈÂçs‚ÏþÐ>õ.(i]¤V—p¬–Öq1 #ù®NÖíŸLÏâ}1£`«Ë±#Ü1œaTðxúpO¾Úåí.^ÎàÝ@D‘l;ö‚Þ§ééZ­¯DTI›¹ “¿NÝ:ÿJÆQf±‘´nžY#º³— p£ùÿçT4èw3uC"òØ*lu8#‘ß5³³dÓfR€¾F2:g—æj•c¸»++6ì:º¼ŒóÈÏcÇoʪ7JÂvܧç0ºI˜oÚë!upr§«wÊ·ã“^‰áKÂtï-_qX°[’3Ûæ^•æ¾^$RH"FÙ»'‚1–Çg¸âº]8ÓKî,þYÆI*ˆ˜Œñ…aÇøTÖâ8=NÊÎ_>öWqœ±ç<&ÿhá‡=ºV‘w*ÇoÌÊO¿Oæçò¬‡žbó<Ç*Fí¿yFTaÂñÔÖÌŽ E äŽ=‡óÇ%©¼^‚iÊdžYB€£…ÁéíïÆÚÏÖ¦3ê–öŠØËÈÎry'ôÿÇMlØ[˜-¶žIrFF0éÀ‡óµôŸ<9b?‡ ~ü‡ñ4–íƒØÞ“äŒ*dq´ÆUQ¼¤m=1ÜtÏô€±rpBƒòà“ÇAþp?‚ÅËîÇaÂÿœ*”QpŠ'#4ýÜvàf˜Ò*!•Ø*c9n1YšÖ®4ý9n’1,d»vO®hI· 7d^–`˪¨ç‘Ž?ÏéU#¾Žàɱ¬ |„ûüúzUd’y¬£ivý¦áz0â<Œ³cýžƒè9æ›xæÖÞ;+x_nݘy üGëÛ>¤úU$+˜Z¶íORµ€±hdasË É'ò}jÿˆ¡y§Ò¬8ýýÀ.û½ÿϵ&œf¸ñ{4‘íöåJƒ¬HüûþU-Ô‹/­F-âgŽø èU¥õ^HކìÓ¤7ðKO1Û$ÿŸZæìeÝâÍB핊G–'$qú~µ®ÖSÝê¢ñœÃBÑ(# KKN˜¬ýDEqØ[E$hÝJ©mç¾yÉ<õojˆöîTˆþ ×N?‡ ßÝgŽzõ?÷Í\…|§ 2»FÒ>S“øÿ÷À¢Ú/.4l $üÛNsü‹zq…©JeöÿI]݈àN¾M¾‚·QŠ6#?`8n¤Üûÿß"®éÐìƒÌaŸ0út‘üóøÕ1JQ9)Œœ°ä ??ZÜÇ– †Ç$t/°ÖàOÎ1‘J̪ sO 1ü_PÔdÛ[# Ô“éÇ®qùÔ­JlÄy Ìû÷ ¾ î\Œöý³õoJ¸B¢¬`ng ÔôÿìGüÕxZVv.Àœc¦ý`ŸoœUÐ ¹²Ìz¨é×$ãÄÀkFB'µ]ª ù²xb?_汌O\ô¢55àcÔ €NqPZ‘ŒLSAާëDŽ‘£;”UL’ÇŒ{×/ã½ÍŠÆïpÀã÷KÆ~§ã-œ’ÜéØœ`ü둸º“QñCµº¼YBb ªÄyŒFy^¼ V÷Œ5]_0Ø[‹H\íÜ[s·#Ó×°­ý?J66‘Æ^7cËd®Kœg®}1[(8+Ës7>m‹.KääŒõ“?‘SHÈÝH—ã*[?žÊ˜YĘ”d«~¾]ÇòÈ7?Üüj¦è,È8R19Œ~›iV9lÄ’\§îè6ûN?çÿ!Òý£]â&ç©Ø¿ünJÒvaƒn-»þèõêº&áó8Úzà~œŸÔ{Ô×eÓfG–í”Bà Ï9ÆÅåGëX,i%ó–9 © ŽùÁî\UÄÙ«&¥emû°b/ŒlLsüÇè*3ªÊÑí! ÜßÓô¥hw[¢@$8!|âšÖòHOÍ1=‰„œ ¤‘7t× Å 6?ˆ&zã<€{úÔOsp‘¢,€?;Áܸô?xʦ‚ß*H ÂŒü¤þÆ ºb.¥XòFÅà >¿OåT¬'r ‹;‚ÓÆXò>vü¸Ë{MН†•ùã’:ã9$T0¼î›Úãœr~UzÑ‘1uÉþöŸ_Z­¬A$™YAÉáŠãŸ­%”N5Ø‹éœöÚMNR4š\*c#‚àƒØTvÿ„…Ê1ýÓ‘÷)ßF+j^ñe†?ÄHþU³Ç¡¬_µ<ÎJÜßìJÏì£E»7òÛNA­3§8=M)_·ž¼Z]£a÷®c¤T‚Cúv¦³b>@#<yÎìdqŒŸ¥DøþöG¥!6ì1€:⣠µŽSéÚ¥q‚9éž•88ÆsH ±Qïõ¤Á#æ'ñ§Œ¶E#0ߌõ½è³®‡SU¯Aû:à‘ƒØu«Œz’sš§|»­ÀÎiÏÉþ¿­hÃ÷sÛ¥g¹>xã½iCÀÛ«Œ{ ¦Œ™¿ªÔ~$U6+Ó%¸üV¤Öˆ:¾”O3ÿfZoˆðu ?qã'ù­m²c/´$’,Iø2\T;<»P1 Œð3ëÔuÿ>“0yf)«³ó€=úóùÉD¤ ,0~9÷õ ã¦]€.0Ä ±AÏÓÿ­šª°/¯åþ'îþ_ãR°Ù¿{0P6úÇÿ®?ôÙËÁ9\r?‡=ǧåŸÃÔ@Ëö:|×*²3'–y9???¥m,_gS±ISüOþ½p’Ç$.ÒÚÍ4gvâCöàzVÖâ7–Hì5 ¢fùc›# õ÷÷¥87ªI-Ó[Ý,²ƒ8?ïV”»®dŽ8'q÷p “ŽÌr3ëúž•Í+ÜÖ*èÇþׇiÚÃ…',zäþ};p1Îi]j–Åd{£œüÛFn‡üñŠëÓÂ,©-þ¦B1Á@6ä8ôÿ ×OèÑ[¶øÃ‘ÅÈù~´½­8•ìäÏ-þѰ¤$tfçó皊]J7rÊŽA9SëÛò÷Åzø'Ã÷º‘µ·šT“a—÷g*W8êsÓ·LÕð긛Öi cj¯ p9üóôSZ*ÔÈtæpw+€¡„j8ÂŒcŽ?¦*²±8Áær+¹ŸÀ Á+ 1î8Èë÷p;ôÿ'ŽsPÓ$Óå $c ïü=¹ÓÓׯ"µHËc7 -ÊH6Fq‘œž3ùŠ´9ÚXsŒž¼gÿÖ:„2+…<€pG<ŽÿNŸ¯µN›Z0]˜±\c8ñ×?SúžôØ" éfcÇÔ~*?à=éL±°‘ ù”÷çœ{ý=êVV9*¬ ué‘Ç匷OséVn¸ 9Q ðH8üâ)6>o›„™‚È ˆá‡ÿ_ü:õ¤žÙbÊ6A\c“ŽßÏüš)`ûŠmÁÝÛóÇãTÇš¡Æ3ŒÙÒ€#±»X#ò%?º-“×­X»·â@äÆÀœîÜÞ'¾ÏJ¯:s¸ç*¼?ÏùéE¥ÎÐbs¹p¤õ#qÔzÇVê„´Ñ“¶’C&ÓÈöÿzàæ´¬ŽŸq60K®ó‘ŒzsŒ0ý+=–æŒõeÕŽŒmêtš…í¥¢ù“Αä€78Oê ±ɵ@Y<‘œçŽ˜öʳo,lõã¶h×ÊV¡Gpr?@ü ®ÞNmíÈ…C\1 lÿ.§è N–²(ç¼_}#Y‹(ƒ#ˆÙƒs¸öü2 úЉ0˦éK…J¡ûmEÐdÕyã’oé¶Òùf(AœªrzäœKcµ:þ'¾ñ\8e0[Ä|ÂOvô,‘ô­••‘›»»6c• =â¨c"GÝŒsŸëÿ|ÓíYcY®fPNãÈÇEü?™5YÅÕìÑ,1$8,Òp$î0:õùN‚¶DûͼüÝ­dô4F‡m:ê—@Ëçclè3Û¿&¶-´Ø-ÜÎró1ËK'-øzUÌdŒâªÞÝ­¬LÎê¹ÜyÁ=ð?øRrmèH¯ª^›;r,ûÇ©ãó¬»Qæ1w8gfÁ9üßúzr* K‰]Ig ޏ<ê{µ^tq)` X œò8ÀëÎÑjídMîÉŒ‰È…|²02øÇlg¶:`zšŠI8ÜFáµ7ôrqÔðyÿxÒä1`C±<ò9ÁýsúŸJ‰‰è£'–„î'’yúç4†ZµˆÍ>ç)åÆpHþ&ì?óÖ´ã;É!²Tó‚qTcCn‚5ÛmÄÿœ}ô«‘2Çnƒž§ŽXŸñ©Ñ;.HãÖ±õ"–c ;œ_—>¼úàãêjäÌÐ2B»=2úŸ`+5á‚S`Ň#=@ü{óù·µ8ƒ5Œœ+p½_ßÿ­Éü¥† òª@qÆ0z~€À}ê$\d/@sòôü?Ï@¾µ¥kŠ2p7N;{~Ÿ¥ ‰"V=5ZêöÚÊ6–æUÚ9ÏÐw©Ýyãƒõ¯9ñV› ë]ÝMæC#ŒvÈã·Çê3NRvl''tgø£Å3ë³5•£¼v,Û"òç±8ê=éY6fWÍš"»€Æ FG<ûûúqš†0MÆŒ1Úsžäw'ÍÆ:We X¤“µÄ¿2ÄV'ï1èzöýúôÇkjœlŽUyJ컡èÑÙšT`Ÿ»LÆ>£¾+oÍCÊ®áîÏ‘éÆÚpt*~rÿìÔ¹VQƒ‘õÏþÍ\r“nìèQ²±RHó"°Œ7Íœmϯ.šËæB¤Á†Î1ŒçîUÓ´ €G<õýi™ î3Ô0ëùÑp±Z( ¹Ìh¸çŽçþøÅ5aU, \äp?_–­™HK’Iç{óT.5{xT’Àñ¸pæiêÁÙnRÖí’!lø_šSΜ?ìóX[m[÷‚5(p7ŽOÐWAsmrb™e4YùvÉííÅgIK9r§w%‘}zç“ZÅÙÉkrI‹½”{baI8íž«ŽþµQÀ[²“ÔIŸ¯~jÓ£Çcˆ¹]·a8g?(þuVIJ€Ì¬£?wÉøµRdFéФ[•GL6>÷\梼_ôÒÒáAÉm ŽxÅY±òÃÊ cv9P3רÛõ¨n÷5ô®|µ(åK9ö>ôú‰ìeÅ·Ê1Ó¿­hXlò܇æà¨Q÷üë'^;µ-;-Àl}2GøVÆï¥dߺ‹[³}×+€;ö¤#rýãAÆiìyÆzò ùÆ7t8¬”FÍÀñߎôÙ@üÝý©NPåSéFAV,y½Eõ*Ä;H98äsQ ìWîã®iQ¶‚RÎ ê1ߊQÓ‘È´3«éc<‰Gãó-Gâ3ÿ; H(Îzp¾Ÿ\~5œéÅë±q¨Ö‡w}i ÄÒåÈ¿u”ãÿ×Ú¹ ræIÞÙgÊÍlfÇÐŒþ}½él5©4DÁ+Ó‹ùn Üb9ÆG'Ž}ê׈ì#& Hqƒ¸úôÿ950,µŸ2Ðælîµ)›œ çŽqQŒUÛ‹cmtÓû‰XöèØè~¸¬t&|{’FA㯠ëõÅu6MÕ´Ë– Cýï»Áç¿·ÿZ·š±”u5r¿fhÕpŸy ñŽ=?µ»´ácT²4lC×^:cØšeœ¬Ì-e\K sŽ>A‘ùêjHã0]¬…ð3¸lþ½ºžØ5c_A’];X[C‹‹y<³‘Èx>œtíô­˜ä£B$ùX r??N#¶{©®sVv·»ºH¦?69uOOSô­[Y™Ñ| ½žÃŽ~ŸŽ3Ü£¥Á3U¡’UB±·oB1ß:ä{Œf¶¥*WMžaþ‰$k±_î¿òä~«‚D¬ ï!íŽ=0ê:¯!5›1%‘@¼¹@RÊ{g?0ü‡ãÜ®†•ƒïÕu #lâ;d0>\“Ƕh½ðý½å‹ÀC*LÓA2˜œÛïTô©dÞ6Ò>ÒsŸúi·kãÊ:éù‘«qš†Úz•ÑÀø¦-ÌW¶©)m¬åÒÎÞRA#×ß­yõè‰Ë ŠhÁS! Èéó(ÆO®?™¯qÕ´ËmBÙ’um»H8äÿ#\v¥ám&ÎÜý²æu 8HñòŽNGò­èÖIY™T¦Ûº<ÒÚ\:1 †ù[=ý'ŸOJ±)Ü%,J‡SœôêzzA[7y’it)d¸¶\0Y“Ë|ûÃtú×<²9nÁ2eO·LÿZëRRÕí5¸I‰ 9ã¯4À6nç#4[‚Y@#ïtýzU‰À?t)Ï?SÛüš«ˆ’Þâkb<²·;{qùWK¤ê+,­ó…Ã}Ù[Ïß=ú×- ,0wcøyÿõÿž•³§ÂÏ,gË þb¯¿'O󞵜ÒeŴλÄ0¯ ´q¦@~wÐcƒZúž§ý“¤Û´“ù—΀DómãïÆõ¤4¸`´Ž%ty(YÝwc˜ ¼z«Þ,2ϨI² ²áã%ŽxsÓú× ’z6d#Gec-ÝÜM%ÝÇü|Í1©árOO§µkæ]É0…‰¢+wÜA?ÏNk•Öõ+ˆu ‹}!÷ Ëtí»kô ƒ ÀÖ·…ôÉ­ žinÆ¥s‰'f¿„sÛ¯OSNQÓ™‰7²6ä*ŒòœàrÀu÷݇­qzþ—ö»¶2r $Ÿþ¾‚»Ø¡ycÄñ¦àzŒu·^+Y•"‚X£ei¶à:óÔËž*iÊÒÐsWZž=u”€·àmÆëÓüý hZ[»"„R~èäŽ{)àœ¯Lòxè [’ÐÝjF-¬Ê«Ÿ•A$ý=8ÏÖ®-XüÀã?>ÑÓ€Ü{qÛ¨滜ôÔæQêdÇeÎÕ-Ôm$¹Û¯?ï¨ï •Aff-‘ÐÜŸÔnkzTØŽÎ3…þ>I?Â{|‹‘ì­sÒF$¼*„¨Ü|¹ç gëôëÍ8»‰è_dF}­¼îãžG ÉôÁýk.P©p@Ê“÷KÈ>§éÖµå‡Ë@ëÇÂÝ9ÇæOZ¡sÄ…r=^˜s‘ŽÇÚœX4gݳ,‡ˆÜnúœ}:õ¥³Ïž¥ws ;AäüÃŽjYmäœb7rU~ãúStÄfÔ!K_’¹È#דÅ]ô#©+6Ë£´(d8Álƒƒê99à`zçŠÒœîÓ¡‰¤´B‡äŒ°8è3ž§CQC£¸1Úëpzzóùõãð«BF{;suÛó`>0W$ÁÁ?äÔ½‘kr”Î"ä ]Å•yàv'¾åäûš7»9#Æ2AÇ®1ŒuÛúf™>ÀÌ©¤íã‚äö=;SL7˜ãpp ÉìIï•=ª’S¢Ñ.L‹$`áIp1X#!p3†®÷M¼‚2Ȥ  dî9MÜy?*t¯?ÐDæiŸ÷a@Q¸.F2H-Ðm^ r@®–Æäˆön/#ªÆ ‡mÛ™T„äˆÜ×-hÝ›Sf¦³¨< ±ÝI“¿î‚¡N®x1ïU|"OØNÓºS3n>¤gú˜ÿJÍ{±|ÑÌÙ;ó•\ð§.À òvÈÃwµXЭµM6ya‰à’عTg'‚HŽz!&³q´,UÛw:æ¹ò'Dˆ•Îz r}°Wò©bÙ4çP“2\[…äí黬J¤–>~æ¸s)—£€辸ÉõþÒˆEmKxÒ(À¨ßÖMlc[é³®¯5ü¥SÌ]q¹”wÇaØw­·†7‘öí÷\‘Æý?:°_jäüª=:þ¸Ïæi±ÄfÄE~Oãöíý—þú¡Êû‚E›Uʉ˜îÜ>RGQëøÿ,U¬sÔP¥FÀqQÏ ‚"îxvü*FÉ<’0 cÇ'ð®u¯. åÉÀ]åIÇ1Æ~éõ¥žyu9þaˆÌi·ƒè}û·a÷jU f…A¨S»ƒè{zqþÑ«JÄÞìh‰¢@À•|åŽÜã¹oNO<ò ‚F`ª r1ÇŒg©ôÿ¾©0»UHÎöÎNyá{çç°½L°eryb:~}êMDà×䤌n9íÇn ?V©á…C‰ *£×=OâsødÓüœÈÍ‚¯©üN@öæÈb­ÔHèNŸ†zAañ ‘À#æ'$åþp>µaP8p9Võ=Ïó¢Ú-€´™ÜøéëŸóüª­ÍД…îq·ùê?§çÐRÄ7Nf˜),‹ÉÀ8zãÓ‚}ð=h8Í»¸n¿CïëïŸJPBƒ³°¨±®É$kç®à# …‰UlcÜ“èsÐÖ´cy_±%hØËÓa’{ ’ÿt üݹèqÓœðzÞ‡e-®h¶æå  n“ʉc×€ÇÚ²´­ìí›s#I &í¥GN2:þ•­š¹c—ÜdõîKqúVµf¤È„ZÔI5hלHÄôÚx#þûâªÌ²âKYlW'^­JѬ1‡uT$`¨SïÀ¤"N DW†zg¯zËBµcŸP‘Ѽˆ `³1$~þµœÖ³8/½™Øòë!äÿNµvK“<(±¤hK(~ ãÛw“~aä† N99#ÒšÐ(KlðF»Ý”?÷°Û»ô<“õæ¨ù‹4¦8ãÜTüʪÜñëÛùÖëÁ粇 èA;s•íÓQå–•¶ªEÇ$±RAó§Í ¹u3$µw@Ë€TÉ!Ü1ϧ­WŠÐÎìbã©wúî'?–k[ìЦâH‹gå$ŸlwýjTxm„ÄŠ:…ö£œ9o¹R ÄQ±ó ± 1Ù#§½N¶¶¶±˜âUQ´’óõõ§¬Ñ.UeVÇÌpsǹÇ4×XTÈy^N៭+Ül®,ãžB´[ñ+)þ™¦I`¾a•Šžë}}3ZM!W6žsœÇ#kd,ÎÈŠ~ê“úÕ)2Z(Ib²1ÄDœýâ¸{t4­§ÁÐP19~¹úãp̨ÄEÕêÍŽöõ¨³ÌÃË@‰ž¤àÂØ¬ÿ*("Ý ]£Ÿ_N+2İñ,܇ïþåiÉjîñ´“— c8ÅfÚø©.Hê9>ƒÖª;1=ÐýcçÖtäåÁéþЭÏ,ÿx~U©nmrÈó.ßý ÿ­[;¦þóR’Ñ nΙ·nÎsކ›·å?1^ÓÎÝç‚?:aG̼çŠçgIVL´rsMhüùú@ÏzðAÚ0>•r¾Ÿ/LT–Dߦj4!A<ãÓ÷ê2OP+|ƒéØP"6!GNzTrTàúJF$`Ò¡”ºŒ’I=ºRc@ ÉÇNjµø>Zœf§,6n9Ïj‡Paä)=ERÏ·úþëRß…ÁéY½fúÖœ8Ùô­$I‹«ÿÈH’Ê¡ñ …5K6Tvþ!þgS%¼E¥î’0ªx‚@5Knx+ÁÿV±û&RûC €’ÌĶyïþ>ýÇ󨤜ª°BsÈ=?,Ÿ_ÓØUiWÍp×xÀóÛÓúPŽæ3µ³ßhŽ Æ?û_­ic;Œ›~öïç'qç>ýý{Žiƒ¢ó´dãåoSœ€,SÝüÈM¿w=‡^‡ä?­G“ b€’7nÛ3ßßýïÏŒZ!²dÝÜ©ó0¯¡íÆ:Œu==êË“‚¬Äcæ+Ç OÿUH#ù›A ç!AúÁÏ×üJ©ýé ÅŠÍ»“œ÷Èluïøó@ú . ¶eêKå«(›—‚@#Òº='U±Ôce¶À ÷®?!þ¥`¬PæKy†VdòÎ0`xã·'¡éøcª^i7†T8to½ÔyçÛ.*~¡Ìât2ÅË©¹Ã‡ž¿ÓÇéSiZ£\é §I’x”ùûÈG#<ôãðÅ>;è¯`‚G¹Óåš<ä®9äuÇ¿ÿ\S¬ôPg†÷ÍhãCæ_Žq‘Û9'ÿÕRÚêRO¡ÉAò€JµòBñŸ\zž¼ô©5´æî0®€e‘['o_Ïüú⤡ ýÀ;RÉò“•$cÐc¶¦-YÜ*²+F$xïÛ®8úq[KS5¡»°jLÒBëö„L‰ í ûç“Õüò·à‘š']“!$¡G±éÐc©ëÞ²#„,æâ'¸à}xÏÿZ´yX®V3ç£ärøê>…ã\ŠÁ¥±¢cï¢Ìlî°ùùÎsÓõ'ôüÖÎYâÛ2 @8 3Ÿ]Ä€OL`ðjÁd–ÔyaŠº£8è0?]ßç¥[|Ën‹™ q†w8Úr3œö8õ¥Ð®ºÏ–+¨F£=>˜ÏN¤`ôû§‚*ë\Gö¸¥-¾8˜p08äzcztô'6Âe“tL£i\€î@úü ¼8ê*ÍÀ3Ç%³±ß$D$ˆwã€}}qy“Z•ŠgQŸO¿FŽE{ie¶ïÇMÈ{žœwì+­B¢Èº°1ž2£±äq^q=ŵ枆)$†s!Úrv£õÃwööìnxc_Í&¢­kx8ˆI‘¸€OjsƒµÐ£-luð܆DÞ¿3’¤c¸õªj–ä²D²Ëq9<ÆÚ¯·‚sƒòƒÅ:Ýü˜^1¸²8¿sÈÏ劥•(ºµš_.mcUº9<úœg5’I=M59ƒ ßꆧ©OÚeFÛ [™¾²8QôϵR³ðÂ]jsÛKºîebd¹I<¸ãnà.2Äzûþ5«®xŠI®N™¥ŠäËp¹\äôF{ã?LûèhšLÖΓ+46h7üÌ¥n¹lu§ç]òQ»ÐÅ$Þ‡qᛋ Ù-^HY‘Ž·ÌÀsÐwöÿëÔ –9‘Ç^1‘ïú~UÒéˆ5_?šŒÊ»˜í= _¡Zî’ÂÊß>Uš+(á‚óùÕʳ“i)j*´Ñ5 ºÚÚ\ä(;vç=H'óôÐØøb[R²]ʆHˆ-:’8'ôÿ$öò8X‚9Æ=yíXšž£º€ÎGËÐOÍŒc= ÍÖ”´Eû(ĆMÿg¸ÚÜþîBFGÔç¿õª–¥²Ê7’†2¤¦8?‰ïÈü«“¼¿¹¾½=ÅWŸ˜ðÇ<þ]jí„ÐZ\Å%älòîÚXç Ó§^GÓëZ{%Höèj]êBÊÖÔXÙȲÛ \FœŽÈ1œúâº_ ÛÞiº`2¡’ævó¥f,ÇÔúþ½rdwúìsÏÝB™9Ç'ß8õ?_AÜG®I`.3ÀÏ< ΢vµŠ‹W¹²&•Á2Fª¸È$ô÷®[XºÝ …óÑŠ€ÀulgðO®1×_{©Ï"»0`Ì»UùÇž‡ŽHÀ®sP»žy&ì¹ÝŽzrÀÏùéQN•)!¶6ë4³GòI¹þóŒŒõÈ ätôôéÍt­gF ˜©9Ü­ÁÉÇÎ3Ïãè+"äÑ,®Y<æËÁÈS“žÞÞªí­Ä²™pÐÇ#-É#‘ÔôãŽj室DZ­"ÇŒªs…ÚIçqÇ\÷úŒäòqX–ÖÊ&ûHLdà*œàž€ž=x®»Pž9‹/—$`•Øàm9äõ8?Ôö-Ò;RISû¶ goÄöÿ9­!;+(ݘW7@L¢@ÛÏϵGN˜ð… ñ–ç$ð§Ô{Ÿ~݆j§5íÉšBØ%°Xcpõúg?•lKl¦Ûj¢•ÁÛ“Œà·PzŸCZèˆÔÅ’2®Ã ò8n˜üóúÒèö¤øÇÈ(²1bÙ<“éÜûT—C÷ΣòØ,ìqŽÝOëéZš<;ÉîfCX$Àd•$ôÎyöÆzSnÑbJìÉÔQZÕdu[¯ã¯áŒã§ÞcŒâ¢´ ÖL,À·LûàŸ÷½;gµjÝA$ºkB–²mô‘ôbäô¬[ÿa~sµHÿk{¯nŸAN: kP#vݧq+´úŒer1õN*·ÌIÿž„ãN<õ­NĶâÌ:–ÜNÏSÉêF Im?ßà÷Ü0Ï=x_»õæ®ö'skLDŠÚ1#‡’Ã'hëómäåQÆ8ûÕrmåqtÏÌß¼2Âñ‚If'†v8ÿg5N©#Ë€ª±>\íUÀʶÁÀÂÉêNj é¤YY ²¾Ã¸yjAÞ9ärι<œŠÇvk²—kö¯0ÞFRÊ3Ôíàq‘¹p=EuúD©#ç!•#œ|Ä`(éÓ+“ö+‡:2«I‰bØËpAÉ=Íu~”˜‡–2 . Èþ“׿%àUWºzŒ_(*Çk`†9霂=çð¥Ü×xÏ?w·=¿ôø5@³«P7ã®0?1ÆJWíÜø,:ã¹ç'òÏýô+Œé¹g*ÀËÎsøçù·åWmaX¡û¡YOAØžùª–‘™dPÀ÷˜ú~$~J=jüŸ(Ï _CPßA¤2îãìðä¶ èzÿŸþµ`ÊäòåI @Ç~Àã×',}*ÍÕÏÚeÂð™ÇÌp1×§SëǰïUíÕ!F6˜…Ü8À~\“éWdKw$UÛ³,Áñ¼žy<ãŽãŽý– vÙ>Ó–d$H:±'Ôô·íSç°UñÈ‘F6{õúc¿Ýäfª!ivŠŒã§=³éÐÎjÒËÖ±™i%Ëõ¹=ýñÇE«`D Œ…Lô~@çêÕ+UÊ¥™yãü?H÷¯[«Ï‡@v‰Ï~_¥CcD9]»w|¿îóÇà}EZH£µWyìw`O㚘…‰ ªŽ¦³'»óÜ–â5áAlg×ÿ®{RÜz"k‹¢Ã¨ Ù;}Øwüª«‹9W`sþÈÇ<ö>¾ƒR¨1ƒ$ƒç8tÇçÓéÛ©æšvîÙ’;õÇNþÀgü’)“p¸)œ¨ÿg:~˜ü=kRÕ<¨€ûf«Z[î>aáTðO¹˜·Ôš¿¿·?¥&úæ8R0EE’}®ø–ÛFamÓ’ëìO Íp×–»«ÈZâú{d Ÿ³Ûþë¾1Ï'ëÉö«…'%}‘2šG_âm~8¥£G5ôß"Æ[„ÏRHé\îŸažÈJ7žN|ÅRqžÀg {÷ïíVÎÞ;RÏnÒ0S†lÌ~½ÿO¥^K”iãˆ:’Xr}Oå[(¨«#6îîËÁŠ1£¯û#?©ÿëš½èð©ßn È*H¿'úVUµÁ|7Ùâ)ž\°Âôõ«ýØèp+Ic_Þ)Ó€ì¤þþCÄÌWU¶#d[¸ú‘Zò6Ø/(œß_ãYž(8Ö!ÈÏîFüûÚô1–ÌÌ7Ž6ƒôïôÇ¿AøÔ€†SÐÆs½9înãµ@€Ä’¨O+þ<ûu9íÅJìnN8¹ýyÇÐ óõ­´2C¸vY #²Øg¨$ñßo_­(T Ì;qÁ$u#¿ûÞÜÓ"fgmѰÉõǾ9ÇԎƤ{Ìa¿'và¼õï€}yäg×2ê|ä±ààôèµBF¨;¤y‡Þôÿx˜è=¥%­ûZÌ^2ÇÍt=N1ùwúÒwè=:•ìšêÂìý”l~U׿áÓúÕËýNúê —"O'vÆ¿ ëÔLž•¬º•¤ƒÍ2]× ½q×ùð[– kÔbÊ› ç’?<ÓéIË[´RŽ–LãÒvHVˆŒ©-Ó¶6שýzuh eUÜÛÃ\cNý=½ç¸úKÚƒ4` rçõëô5b]2É¢E™P³)8²x÷=º} _:#‘™p]HñAœ®×Pws¼zñþz½itfˆ0iùÀÇvÚùÍg®—åç¡2cŒsôÏ?ÔT–¯%”­±XFã%HÀSÔÏû¿N;œåg±KM˶¹´•­†Õeà ,â8÷?—µýVŒfN #}ì¯øn'ëìEI$Kò´xsPNAøçü‘O‚ÎkÉöƦWCÊñµ€ÎAö$~¼óƒQ}.h‘Ò$ ! >PvÊÈâáOׯPkWÅ:{&£§D–²Â›œ¢Uq“‘ŽE6mÉ´ÚÒ5Ìã‰@‘V(°Ib sîyÅrºÇНÞxìíõD—Ê FöÉ»vx!¸ìG4E95Ê)5îCd´ežæw{ˆâ]Go!N¢Lwc{Õë] Q¤—F¿K§n†XÈ9[=:qXú Š)5é Ž(dU+d$1<‚>ïOq]•Ýü~ÌXÃwiv7,ˆÆ&o¨û¹ç¶:ô­'tí"®®Î¢–ãÈ–tÊcÈ£‰,>‡ó¨µy¥&xhòŽpåºnÀÎ=»×'¢x“KûkY=µÍ•´ÇÌ $áÄn1‚a×­z B/³åX1 ~ðwqÁâ¹gª7‹æG ÚuüºèV;$jHTÛB? üh×5Éæ˜YÛË·¶É;F ±?(ôÄÌ-c–wò74H¼³Õˆ99þžs©ê«>ûH2¶ë€BÍoN<öfs|ºô]PÚß½ñ —s·çëÓ“]‡ü%Ab%Øä^qížÆ¼ÌLб ËéžHÿ§éCOy8gYA9 Û=¿­m:*NìÊ5Guw¯É1d.±ç?*räîä{dW?y$Ó»I+º« ¾,NrI=¹#Ó“X tèy@¹lž£8ÿëæ­¤’y¼ç ܓLJ_óÅ5MGa9Ü»Ÿ"E Ì`ðéßðÇó¨µ ‘”.þ_ûƒ¯ÿý|òj¨½x¾Vù‰8R8Ï'·Ô ®ŠòÉ–ÎqŒõäçþ¡V£Ü›‡‡§Óo¢–Þ÷³¸Äs+·Û=1õ­«Ë-gL!š'¹¶rÍmïܨü½z×-áÙ žW·¹Pr»' NzôõïÇ=ù«7> Žþ-ͨ „–]‘§9ç¯?ʪC¬êööQÍq%ž±¥MÇžiìxÀ>Ä~5VïQ‚Â䈿´´Àv°p»¡äý쌃ӎ1ÇZÎÒÙ§SJ?„e ¨‘·§îútç¯^ÿ¨bœÞg‘”jw¾Ìñ’F}ðưuox«L€ND—1Äxœ;þ« xây˜½ÌfR0B±ã?L~µq…W­Ä奎ºãI´ÐÛdV’êW{3I#÷ÉûØààgùb…ɺ{,Ë!Žòãåo,ù{Ž0íÀÉÀã7f˜lÈœíÜpÇo”ñøñU/¼K<–¦%ÛÎÐsó1î9ÿHíëWsêK”z5iSìòA–É(­œå‹œÉ⡹’PffPzÛ9#ô«Ö(ãKb aåä°ãŽÇŽ{Öܼ¨Î÷dR£#!‡ÊÙ þ§ðjÑÓF ˜¾NS=9N PùÎßZω ­²!¹d©n¸ÛÏ®p+UÁ J“0Ý´¾@1ƒýÙÀçzÖ,<ŸºF’S;ó(•³‚Hè£ Îîy8”VSH¯1fMÊÀÉ»i'|Ø,F[ާºÔšƒùY€¡H-±”ŒâcÛÉPUHέ”à }áŽqïrN8n(K@oRvgÇ–Ì¥› ਠ’yÎîwŒôûµ¿áùÜÝ¢+cÍçxbÇ'’>Wãƒ\ë¾d'çñpA,vqíü8Ó)Z6r%o>`ÚJïäúõØç *d®‡©è ù·*­øl^qù ûd*Är7Dyçý:üwÿ÷¬Ûk6Ò 7å±÷Øç=O'¾þû«6ò±…ŸËe åWpήO°Ïû¯ë\-¦oZʪ…ˆ’Hôöü8…gjZ™ ªŸ”| ƒÁ<Œý:þ½«:ïQû0û:ÈÂ^”$çî¯×œž¼‘ïIiûÂòÈëÆ pÃÇp8ÿt`n¤¡Õ”å} ¶û™.ˆq€äÿõò3íK,ñDˆ~EÏÝ ê8öãØ1¨Ù˜Fo8Àç‘Û¯¯QŸ÷Ïj§q´Ç¾IÒ4?w)œŒrqè=6ŽæšÔD„ɨ\¢‰•bNG°ïÇbr:tÈF*ÂÜ:Aj‚WR6ñ×AŒñØ/­S 4åílá!enˆrÀsËÇ''ÜõãÓiúT6YB´…³÷>§üöœšBI±m´ôŽ0ò3<œ’Ûºþ];ôîI«Å‚Œã¹¤ )=6ã¦+'RÔ.›lvîf”pX1œgüþk=[/bFæk™¼”R‘ƒÏÍÈÿýϺÒNeáTöüú};u95:uþåy|µŽ<6âØ»œû3Ðvê÷ˆt½&'ó'[ë¶ác„ü£Ÿ_ðÉýI´›Ñ{nk¤rJ~á,}ñóþyàS›UÒ4æ+y0þw7 gÐZæn5-[WKöPÄñ³#Óÿ×éU"Óm¡|ª‡f?3‘¼çß'éíV©®¬NWÙDþ;ÑâÛå‹©yà$GŸ¥aÞøÃW¼f–Ïa}Ós·¸öǵÇåŒib§aù?©\ÀL¦FX•ƒc÷€Ž?/çÆª0ŠèK“}HVÞÙ\J×JÍŸ9ºõ%±Éî3ô¡Bçrƒä©#zuu Õ«Ë(v¾÷9#žäsøæ˜²¸þô„‚ŒõÏ»V„·Û$ê’½ˆAÇÈ÷xÛÛþì¸mRrà1v‚+"7‘CLöŒŒÇþZI¹ÆsùzÙ²³Â7cfÿVÅ ‚zuÀíëJCE€Ï½œ+ ä~ Àö š ò9n¤– :õõ==þµDè­Æ×¶Û&Gï"dŸAŽO_Cõ¨ÅÔÑ–UIIÆ`©ãÔ÷úÖv¾Ã½·4ÞWWØÍÖ'à3vÎcŸÂ£»–(¼>Jª’YÕzcå$ úâ³ÜÝ?ÈÐÆ ?. HõÚ½¹¤·±™Ë(Pd ¦"­ŒsŒŸCøSå¶á~ÄŸo/‰7Ä[ªÈí’ä>ÔÉ%Iö„ƒ–i#?RqW_Hf&@G˜p ¬Y˜ä:«.s gBÄCÆI_lŒãéÒ„â 2 Ň(Îù ýÿ^­Æ‰4f8¢ ¸ç2øÁô¨ÖòÎÊYƒµr÷ü©ÓÊ#I NT£)Ã~gùS·`ML­ #eXÉ ó+ Üð+P%ïä$+…ùä€;ã$ç¿çZSJ¢0æÞA‚p§?‰)ŸÂ©Ì¡¦qƒ¹ÎàXsƒùzû~ Žš’ÙL.çù;˜eqœœŽ£¹öàóÞ›:î·À.7nÇníסãëS©ÇÊF ;gè:c§J†wÌgæÊôÈ=8ÇåœÃ¢$©lظýásÔ’§ü;þŸ…n+ÆÖñ¬¯#c*û‡,¿õÏjç R&%6…êN8õÆ;t#¥tÖv²µš8Û‚Kà¨ÁüOÓÞªvG@‹pÀ¿Î0êqõÿõTŸ) « †÷Æ?¥ÚáQ¾ü»‡Ýý2E0ÌÞYFŒ†ûñ’1í’F ȱÒ/È ‹å\€úý*¾†›µË¼ ‡Àãæ”é‰BI¹“ƒ¸¨?ÇåK  ]fp9R²èKŠe‹ª&¹ŒÂUl@þŸÀñ­½«Yá¼YÎ6ŒgꆷvûγŸCHõ6ÈR Ï'Ö¡TÝœœ}*wl½{çµBIàð9àŠÀè#ÈPy<œc¥D~e äsô©ˆ$dŒwÎi…8É Hd,rF}ê&ÁÊŽ½óS±Æ@ϧš„žqÆà9Í #Û”Nzæ—h “È<Ô”2¸ÎHí@Êí‘×Û"©ßäĸÏqäcóªw¤mU>†š`ÿËn™­H¾k1OïÊÖ¬@¾:Õ²LK³ÿfœHÿ–oüŽ+3Äüë7\Bã¾æ­+Ö?ð•i½°§ù=gx”©Æ3ÿ,ôþ&­áñ/Cž{3QFý¡¸Î~™äžÀTà˜ÑŽI¯»ý=99=>•ÈAqÔ¯QÇÓÚ¦RX)dð0Höÿ#¸É­Ù‘ ÜB6pN™ã¯ ëú!¹rةԎF;¤;aR1S¿Fz€r;ñ‘øwýGlóÚBzð¼ŽzLNègžblH3…!wm8Ïr!Š˜I½ƒgŒç99oN¹=¨¨öy‚M²íÁÜà{ð3ô÷ý)Ëåäyl¤n ÀÆ8Á(ª,E#L¸ûç‚KyÆ8ÎsÓôçÙËr±[~3‘¸žyêqëÿ×ëUÖ9Õvð¸8ÿX==?ÉúÒ‹S"…,£ï(“‘žøõïE %m¨£<·˜c Æ«ýšíc¾ ,E.UÃàBWxïç½*BM¦A«xªí7û/O[ĉ§ºÆONœúý+ŸµµÝÏp±,vöм€ðs´GH÷5ÒŤÙÀ±K;-ÃF»°pF3Óñ'®{T&bðÕ¬1-Ûï•øû¸ùTtàpqê+X´½Øõ!¦õeO)í¼j k›á ç¢ãqüI®£U¼[ÈU®UXêÉÄ}cÛÏüŸÊ²<‘jz=æ‡pþSO‹‹f#î²ôaœg‘ÛÐÖ¤ÚMÛÏqmt¢µ£ ‰ãÈþ½þµiI¦8Ý«£7Ä·´¹ß§«¨þ,ÇŽxàãީˤë±ëO›u,~M²Hê’·nH9ã9Ϻ G¨±KçÙö=®ñû¨*TýQùÕKVû]}ž"úÔjó0\ˆä(#מ‡ñâ’œ—»¸ÜSÔ⦾¹ÖÂDùFŠ&xá,Ò(ã8ìyúUmJÞØ@ŸÙÖwQÙ7K1ù˜à÷{þ?—mà[ssqsy"çj„\ u$ãôäœõЈî-¤…£P H¥1Áãó¢U¹’§Ì¯sÁ¤†8²YŽÄ¶L÷çÿ¬}ÅUòÌl®»£eçv9þº÷¡¢é‚o1lmćŒ¬`S[úLÈ6ØÀ„.Þ}?úÕ_[]…õwÜðñ,Wq*H£ÎîØûßày¤$·Ã(b«—*Nu¯FÕ¾Ú\¿›§J-[ø”©(Ý1ô¬ÏøBu;|–XîÂò6ðÞçüúVмÑ™ºRG.Ñ$0`½9ü{ vþ¨¢ù¡YÉÇ\Lg°ãúó[·é ’&³.ãýd!Ù]û¤súÖBÀ.¦¶Ül nûÃ#®}8­T“D4͆°“ËÐgrd¶>Bfó í|+xnã{YßpÇÝ+É]ØÏ®0}þµËxjôË£Æ|Äo™AÀ#éÜä¹ê=ëµÑ­ ¶ºÂCá úúœãÒ¹k=,Í鮨«¥jµÜ’¢¼G: Üò@ë€1\Þ£¨Ûê:žÍ2ÅcEV*Hìù»öè>ž•ÝXYýŸÄ7ÊÇ^Ædý pßú¬ËoXøfþid™gkÒa‰ÁTÆç=y8ݽj#5}~E8¶y„wú”RºBâ2‡ÈxäÔàt•½ÍœHÿifb†Ã¾ãüÿ-i³$§Tƒq…¶“Ø‚@#?˜ý>µrYí"Ïðœçë¶6–¨æwZ3OÃÞ-¹Ð®K: ­eâxOÝqÓ8õ÷®©,¬ï þÐÒo<›y ©¾{‚JuôǽyÊÄÞ^ý§ß?çüâ´4bûAº2Û0ž7«{SRõŽãŒ­¤¶=VCWÓ-¢ô›k»\Ó‡ÝÏû`þ²o¼£ëÑ›&qm>~t)´Çz©ÿ8ªö(ѵ"<™dÑoŸeoÝ“Û#¡€«ókf…¯Š,¢’ —jj|©R\r?—µsZqzhÍïµÕ}áký>fŽP / /¥e:I;Ô¨?çŸÎ»[èn³çé÷_o¶e$|Ùz‚zç§=ø¬®à¸ÛÄ{Nr ò£ééÿÖë]P›kS E-ŒÕa±•yrOëjÐRSDO•¹cÏBx=}O¦8Öžöù ägÆ×ý‡§aÖ¦š#¥´{‡ÜsƒÁäö÷ý:Õ6˜µDšrfmÏ$‘ü£'÷®F9ù‡n*ü¨ÂÈKä€ãzíð =ÀeùGTF/& ĬlOºO¨Ç±aÀ<ІisÌ™þwyvÈägœuúÔîÆ…f_=XØQ“×=ðsƒÜòi¨DP²>󟘂O+È vùÆO¨â¤dd1±,®rŠßð,nw>”Ö|£nÒ¤» ÀÛ½Él@ïÎWޘ̅ٛyÜ ¹ˆ*0Xà‘Ÿïs‘RD¥™vÆ6ci í=O¦ìdð>_JªB)\(,nÈ\q’{œääþTø‚ªÆ?1ÚyL~ïש=>_J“;_7K¸ùG,@ÂðN[é¸zVÃMxÊ„$ Fp}1ÔôÇü¿½Xž¹‘´¹U3‡}ÙÈ9nqŸ¨ÇzÓHRáw’¬§»}ÐF}ø=Ö¸§ñ;Øj[-˃p#lÅÜ›<àžàä“ö97Ø$·Ëc Œ}àŽÐq’@þ»°2Tc"­…RŒÎŒœ²àv$‘è8ÈõÚ½ª;«¸íód%¹À. ä÷cèµ7oB¬Œ™u{‹vu½Ò¥hnc`ê@ÈÁÇ p8þ÷­XÑâþÙ‘dK…‘³—éÉÝ©´û uI%teòs÷Oeõàzö·ÝŸA†IV[v{K¤û·0à1ÿ{³b)JIiÔoSJÖÖ+HÈŠ0 ð@?ý~¾õ.U³0U’ÇÇêž Ô|1k¨ÜZjÏÊŠc”ŽÄŽGò®GRñ&§âk¯³HM•¯U€gsSê8<ö¥ “¿@•D´;M[ÇÚnžþU¢½äÜÝýÜ~ÿ‡ç\ä¾-ñ£(1Ÿ±Ç’p¨ôäþ9¨Eggl‚0«‘ÌŽÁŽIã¦ò«fáÂù(Ò7®UUNyïÁç$ÖêŽÈÏšMêÄš9ïVòþíðrWvâ¾àœþ„zjiö)+°FDbA}¥›ö³Ç½:IL%¹prG†>   }yüj(‘Ñq–i‡ç>Ùãó"š¸®]W€2¤` €pX©Ç_ËÛžôùîbù¼ÀÊì½ùb²¶FÓIˆ¦…CtF.G`Hú»TÆ2‘ȉ6â>dÎìúvÈüͨm²äW¢o-X‚9dñÜýê¸å À gvÒë“Çòü*'~ý¨#H#Ÿð9ëS mçt\acº‚ùÐ’+m*ê­•ùC€¹> äÿQÇJ†Kˆ…]#nŠ0¸>û€Í^_ÝJ$†V Œ)9oÄsÏjkóÈ>rØÌN9üCw¡0±N9`XäÆñ“¾8ùÏäõ©-õ Ê4k,‡n@ ëŸâô=ªi`1ã1Àª,L¯'ñ¡QŠíFÜå±`àØ~bººËF6•zh®~b‹€pÇü¡¦’òn9—x^½Ï#óKr^Ç?4,«g~zŽzõ»÷ã°®Èþ^Öêr 29Î>žÇ·­t•¼_ei$hüü 0%XúäúW9hRÖð=Ätc# Ã#Ó>Ù­ îŒä­¡=…’Èï´ˆ¹ÛŽ`OÒºTÆÔì à}ŸåT­¤·•ÚM¼yaÈ+Çl’qù ŸÎ¨U.3–•ò äj$ÛKQ³J®eŒ³t%³Çá·ü* Œg  ó?Ê¢íË#<HüI?Ò£Ùå®Á”œó’úþ5*Å’M7ËûÀqŒðØÌ¥¡¾5˶Ï?oö–¤Ù. 9 0>ƒ‘Pè¿¶.·äÈ?ñå«û,—º,³ÅZ=ˆHÏø×EózŠæãÿ‘­‰ÝÙëÓ÷cÿ­[ÜÿÏFü«9ô*=Möϲ}é¯þ¯ëëÞžsœ€0yÁÓX€Î1ÔÖI /O×Ú[ ƒŽ©ˆPÀî>¾Õ3ѳ¾jF5œãiç¥AŒòO?Z™ÕK«dœïTdnãî¨ô40dy8ü)®I$w?ÃéR ÙÇO^ôÂ2CgÇNÔÎx䎙÷ª—Ëûµ=}jár]»qØ{ÕkÜAàñÎ 1£œàV¤M…Îpò¬³“qëšÔˆü¼Ò­’d^a¼W`¸äFIüš³|Nö„C8ýØÉöËV•ÇüÖ£y]sìÕ›âl®¤‡¯î1Œã9c[Óø—¡Ï=Ÿ©Œû`s‘ØuëŸë“Oùrìž}O^¾Ÿäj?0©á°2pížßŸcëK¿ œÎëžœ vç°®ƒä+rÆãŽ:qž;éíMS“–BNÜý9'·ùè *“’A˼ǂsNqÏséô¤‰Ò31ä·àqßÿÔ Éæ’XŒ¨$ãüöÀý:Þˆ:¹`r“LÚ‘ÝIET;ûú’?­2UUP¨ƒ;BýÝØý:Ñ£¨²Ì`$ƒ¸ ÃŽ½j&Ÿ. ùTõRÄŒÏ>žõ‹ Gå?cœäñœŒ¨úý)ÈY@8“‚0ÜäôÇ9ý?•qTK¹2Û‰]2I9Ç1ï“Ðöõ4Ï3çP;J©lŸ@9îã±çŒŽiÃËfÁ µGuÆOAÉSƒ“ÁéÈéŠnÂ̘©\`–ÀÝëèG^˜ ]Lls¹¶ŒÌs×wÍ‘íÔgÜÓ&cƒ8‰ÀàŽœcqÆO*¥H­•Ê:ïäï8Ææê2§ž¤wô¦°ÎÈœ÷! (õäϱý(ê a][åGŽDQÔ¶@éÀlt>„÷úÓMÅÚÈXÝÜ"‚2èÄÃÓpqùç½?ÌÀ+µÔ9,.ÓœàäcLôúÒE yƒiAŽF7Ø“€@üÿ:aèZ‡RÔ-$ÙÓȼ£¤ìq€=ÆsÓšè­5îíYLqÊÍÆì0È?ð!ý}j¥Ÿ…¥1‡£ÜŒä»zÐÿ\ïÿféö%ÓËRQY··$í-íéÏá\õ'±¬c$eÝÊ%µ—ÉŠV‘„™}»PŒç9>À Žj¯Œ­Íþµ£ÚBÀ —bžË–ëô?•t7·gÜŃ‘)ÏÈÁÿwÿ‹sîúøPò&ûy7gºrûÿ¥LÇ%¥‚ÎÎKx Þœ ¹ÑnÞW´=› îõ®Þý£Õ¼4·ñ9GL\#ªW¯éšãSmÅ «¬déúÄêpr ß³~‡ÞºÍ#m­Ôú BèÏzÆÙÁ÷ô>à梥ô‘QêŒ[‹+»øbÕô•ËÜ.£ßÿþºÓþÍûHÖÕ¾v“de±Õ‘ãØš³áhôÉàe`c˜ä’ ëŸÆ¥’ãû/Vºó×t73)F'ÅÈý3RäîÒKvUð}‘³Ónc.3ö†cŽÇÒµ®­ÃHeÓžþ_Pµ §ë2¬¥Œ7$•Ïb©•j^*ÎnXîuàb¢nò¹qÚÂæ7Š7“Ȧ¥À3´QC:U=9Þ87bÁeeÏsÇÇ5 ÝÇ•4ä0Š3_˜ŒTZîÃoBƦòŘÌX(ÀÇSÈ«¨¦5TûÞ•KRmÑ[®IráÇnêÅÝáÓì¼ÖßTâcÀíÐ/Ôå5>µâ9eŽo)a‰s/<Ó‡½r­¨ÝèW oymo—ehYPC©Ç·n3ï^¥¥Z<6í$îZævó&>ç@: WЭ5«F†î1¸q€r‡±¶T¥ª3”/ªÜñã*ÙêÞldPØ'åpr>Ÿ™à× éWKö]A<—ܠǾ޽;þxôóFÊM:²J¡ÚÚSÝz‚;Çõæ¶¼;ªKÿdrf†Ò¼œ’N3×{cÕÑVѺ1„¹^§¥¤ìÓZJàWe8€Tÿõ½«?Ä6ÒLe”„GŽ3ß.pOÔG½V7öRap̬$;ÏãǧëÖ¸mWÅ$–vI.¤¶ŽDHÜžS\ôé¶ô6œÒZ}ÂYiz,j3Ç Ê¼DÜ’¹Sœq…ç„0Ƕ8%D¬ •RArp=³ÿêéSÛ¤²Ü}¦iiîä±èIä÷÷¨‘‡ˆ$âç§‘À8âºéשÏ)sÁh™•ãÂ.HÆ{õÎ0@=}AÀª3¦.r¸'†Ó¯_ÄWg>•¶–. '$‚ðÿã8ÀÇ5ÉÏK‡ÉÃçÈãÓ§Ð~žšdI4T1åsÜŒàvÿ?áZ:n·>Ÿ‘0­ÿ,›'oû§·ò Û»QÓ#<×ô'¡íô¨d·ql)Î1»ù÷ûvµZKF-V§CkU7šK3.å;Q@=pHÆx9äw5Bþê ²"¤‡%€ûªGaÓ·òõ›gvú|¤Lá'ƒ×ò«wë”ÆU!sÏ'òÏ|`G-™Wº ’O–8Õ˜§®:þ}†?ú®ݨŠªTò®á´ÇÎ=@Éô5Bß_Äq‚H#ŒsÏAõü+VêÝ‘[r°Ú3å’9ç<Œ}Ï4Û°·*‹‚™óç<ã–îÎ>b8ÇSL°A#n~fbFTçž½°ÃýîyÓÃ<€32¸mì¤r <ç<ž¼ŸnõaQB´`ŒË‘ÉÛÔHà`ð:{Ñ°ÈæÖ\È>r2s‚NÜî$nÏ8$äÿ{Ši½s…ÇÊ2W·ÝÁ¯Êò:óR»íX$R¤ü¯û½¸ .À§§½!,¦Uۇ˻-ê œã8ùxɽ ÐØË!„Fè›H<²íBNTôìIõ=zT¶àK8ÛÐdçߎÝ9õ«1}èTÀBؾï$ú}Ó“Æ:0ÍUxßz’7d œ>„p~i¡3°ðôÓI„I!“-ÊØLã9'éƒôº°„FFJû:ç§©?NÜZæük™f(ù70^êÇðÆ}‰®™Œ;¤ÊóÆâí϶OåŸûi\5_½¡Ñ ØS#<&FiD*yb¹åä¹¹îóÙvO¸$¾9=Ç=2qNF7p³•çxc‚Ù¿­2uòåòà˜¶Ð*98©"®,Š-|©²ÞYe#>à©8öÁÐí¸%Ðaܪ#–EH„„ìc‚8#%ôÿg5 lg“ì¢DD<ê0OÓ5bT¡–4à•òry÷Ú<o¥I aŸ,e'–aç8'óüsŽÙ¤;ÊÛJ¬„¶Abçø gzhLíÎHT`²n«ëÖƒ~cm©#3í< ýíÜtîj3<¸˜6ïÞ8ùÉ só‘êv±¤…“ ™ŠB±¤`n'w?øîGçŠW1DjD¥“*6³ü¾»A8üA¦F7™åbÊÖ.ÜöÁ$Ÿ¯¦ …l(u‰NÖËg'Ï_ÀŠÈòoŠ"w3)d1ÂÊÙÎ;ààAùPÊ#‰<øÊ‚øRÛ°qþϯÔ|¨T¸?*¸ÞFþsÐp3ù6ÐbVX¦óÑ\ºL|¼úuíÆúÕÔ„H">výÊ,è˜<{~€Õ¤Ôb’=¡B+dÚÛxô$Œÿž*¼ª|äiHWˆš\~ñ?Js¨ur‰—Û¿$-ÏrG?LR²c[Š·vêä+*·a¿aü9?­KÄê®ïŸLÆß7øþuIÊQ´.ù‰m¤þDsìqS]m€O.Nr’0$ŽØÿë©¡«ô57³üÞXòññ¶=óÏ>†–Q¯«,Œ½` læ± ‹ º*Џûõ>Þ´ÕÔ¥²@Ë%YÉÚS¯¿øRä}u:«k92/ÎÈ\ä}98ôæ².uÈẒ/°@ÁIÊǃ϶1Ó¥WÅW¾PÞ"8éØg¦1þqY3Ï–IÚ52³äâV=Oö¢4Ýýṫhh^krÞ3³Cj8 ®yäõéëY,<Âìa„‚K“ÀÆSSy‘mÝåõ_º%|“íJ’D¥T¦àGyóéZE[dKz|’ޤ*<¤œ{š½cu5©Um¦&9ò÷qßž½j=Ñ>$0°lýÑ+c•!e,T›GÊ ·äx«ßrmfkÙêÝM‰‰VÛòìÙõç9©ÅÆò¬ê9 oËùÿõ«:ÞQ¡EØq™sœŒž¢£mM…Ìk!R®~n‡ëQËØw¶æ³ì/Â8:†'ôçùÔZUºդ펬?«>¡lUö÷ýןU¿ ¡{ëÉ=I'w»õ©5h±ÞòoÏ‹%õóÿÐmú~•ƒh›¼Wr:þƒ]'“ÿMçYÔ{ ¢Àž3ôÍAÀm'מµ)Çlf˜v¢‚Hç5ÎΔC"mLþ‡ÖÆC.ÜràsR†ÝžÀÆšW 0zPR¯·€ôéëQ6Kàç#¯¦*{ÝòI#W;‹Ǧ(cä “ë“Ls’Uàõ¥ F@À‘÷½²)9881HXAÈäŒÕ{Ìy*1ŒŠ³Û¨ãò¨/Ž =n´ âóp{àÖ¬c嬨qö¢}MlÄkFIƒ1ÿоÙsÿ, ÿЪ‡‰@:¤D`~è3þÑíô­+¿“Æ~ðœûê©ëë·V‹'­Î9Ç9oñ­áºô0žÏÔçÛPàÝvcŽ£¯nÔÆ3–‚@Oã1ëÛÅlYÊ<íluɬËÉQŸ†nH^Ãß5ºw1jÈA½»†@#'ðÿ?kE@tùON½A¬ÔÇ‘·9è0OéŠÕt26B`gŒ¨'¯L€(“•HîC³+·%Fî€þ~µTS¸äžÄŽär1Óž¿¬’…{Ùrã#w¦­#ÀHÂ’éœ$óÔtÎpzZHo]ˆ3äü…Ïa·ö0:qèÇ¥K½¤Œgs+üÙ$øN Ï÷ŸJrý¢PÉWô,A?¯~œúV…¾…st$ƒf8bûN=Éã¾sëëMÉ-Ä“{èc3*ó±á¶Žý˃ŽN{òF9idQü{FOÌ£¿sž~•ÕÁ¢i™_>ìºÿBÒdž¼¶¬¾¡•ò¢•7õÙ±oéYûTRƒ8¹Г0O8“ò{~qŽëüédÆÖ .Ûdl’p:“ŽFqžTôïÍn d?d›åVÿW4Ÿ.}íùÔM¢Ü$›gŒEÐ+— ?»ÜcŽsŽž˜«ç‹+±—m]È-¡D>fcÿÇp8ÿ ×k§éYAæäË!!²üã![ŒöÎ_ZI´KI#‘ÔaJ1B€r –âèZ•o(Õ2Tž2¸ú|Ñ•ÿÖ5&Û²4Œm«-Ipˆr2ì œ}îé"þF«y9>æÁ!F8Î[‘ôÞï‘Q[£ÊIRΫû°vàüÇ`ÿÇ|Ï|â­EËp 8 „“ócßîÇ÷gkÙ¶oxk ÚYWÌÝ•A¯Ói÷!ª}FÑl ­þÏoÄlÍæ´Nóªðþ8Ï=3õ¬› SYÕ, å@…×Ì$“ÕÎËž”+¿@ÛÔ¼÷Vv–¯e¨ÁæXÎà8ï œA?‡^ã½[ñ\o§ëzD™}<®×Qñ㿨ÿTo¡ýÕÄrF$\´ÓæŸçü*l÷E]lÉ.%7:½¡ØIRz1ùUct5o-çì¶‘ïu#†|ŒŸ­3S‰­uü¬®¢d„gïáß½sÚmé>4¼Ó#<ÝLC>9 ÷?OOZ¸Fêë±2•Jù@óÉ+Ÿ¥E-ÚÄ„³ªðq¹±øõ÷«ûsÏoþ½r^*½xln£bH;{ÿŸóÈÆ+™ØÒNÊçâ¢/u nQ†â ç’§Ž¿çòã#Moô«yB„U*~^Bœã¾xúþ¼fí¼©s¬Giæ(+PH6y<þ]N”ä°{MD|Žu-Î0™Ï;ÿNý=¢å8÷w; lËtŒœÄÃÞƒã×ùÓu(ä†_43²0¬‹ØñØäw<úRŒÍ7xc‚äúö~;ã,+KK¹mÖTªƒµ ‰Ý[éòù¹[kTnµ9=zûA²» ebíq´Iº)Œpb>‚¨øwK:†©Π/Ï1EÉéŒ `ðI÷þµè×z…~KÊ‘ocóHŽTçð=~´ÍÃVºF£=×Ú<á ÙaÈÉÉÏ©È^Ù(µÔ^Íó]˜zòºÛHÇ;²I眠ÔmüyäÅpfÖF™ÙC¹ù‰?)sÇ .¤ë:‡‡ÍÀy'd( Gƒ×ÿ­ŠÅ›G†ØnŽPœIänôìOÿ[»§U%aNÝÎÈX§ØàlÈhøã‚;žžœtY-ܧñaW Üd}þ?QÔv.±¥ÞÓýÜóŽNÜõ=yn¹üÊ)ÎRà³ÆTG¼àmqÓ$¯n™Ã=7êcäbËüèLyL‚w/<ã9ç=úzƒPÃrbV–…ŽHÝО¤c±VçMÞ`Ï!‰å‡Lz{žžþÕMÎÉXnPw7%úäãžß•h¶!¢EÆc¦CÇÿ_¿ÿZ§:£ÂH™Ø’0¼r;vã°ö¤Š&D. íQ“œ·ø~”ÂðÞ ˜”)Æÿþ+©?áKpØz\Û\0PIu'(~„~˜Î:Õï)ZÙÙ_q;IXò3Éäçødã [9#ÆäÆzùö©íî^‰hþélnÎFGÿ®‡ÀŸsj`yä“Ì“Ë`>fJ¶Aêz|ÙäŒç§'¦ˆmXK¨¡˜íbx!†qŒn=†}~jša‘¶Ý„|§{mã¦sÇSÏSO’¢…L„m¡ŠŽWŸU=?>”TD`[(’§æA‘Ó ÉÇ>¸ëŽy©lmúíRÔ•åNå “Ïç׌g£ž’2£!9Éë…äûûþÓæ‹h¯q,q*õÝ€X÷ÔóÓü¢u-¢Ü¨Âåý:Äi–Éc (S¸ðzç>ÙÎ}ñØT—Ú•­œ--ÃDˆ…#æbxéÔŸ¼~»ÇJçï¼aß+M‰XŽ ³ôd‘õì=ÍróÉ5ìqqqæI³ø‰Æ08è+ÒmÞFŽI+"MFêmjñçšPˆ¯ˆà`[héÎzœçQyL®ª.ðz,|úg§Ò§KB³²æ¹N¿Ûð¥h{m1ÜAÀçªú}k¢éhŒÒêA!™w3•äˆÎG²ñÐþU$aWkÌyáGþî*dŠJæF#ŒŒc†öëS@®œ¸~öïùæÆ“cI¬%ÌRΫ–”ãp>ª9­í¥M¦Vä’F= 8ÆÎ;VEô*gžAŒîqŒdç99ãÞ˜Ðå b‘‰ c#¸6Уu¨9[ca¯®|Ö‘I?1ÙÔ?Ø÷4 Ë…t!È Œ”9\ãì÷ÏçY_g Ç àe†zåO·µH–’tø@Îܳý=½éYÔ½q,ÓDz匈rI‘3ëÇ)ïPC=Í„{"‘d‹pÄò7`r Æ9ýê$tJdŠ5á¾îH? ö÷§‘2<¨Ø…í!ê7uÿgõ§ä\pÕ呾[æ1Á_›#à~‚ˆžYÙcPÇ–+ã—­W’ÓÍ#t1Ÿ»æ ¾¤c§µ@ žÎF’$†h†wæËÆ{zûÑh…Ù¨/¯÷˜÷ÈÐcxÆ=8ÿ8©K–PŒ¤ãî’²sÏqX¦UyLÅ*0,%íJ‘Içâ-§ Waê29ö£•“4Ëʳ ¶àT0 úçoKu9*­q!lƒË7lŽNßÖ²’Þ@XP‘޲9È žp}»U„ŠeS¹ ásÎæÈÀ=Ͻ' ܼ—’¶ÚQÍצ21Î=ê4º–7-ì c ²‘ü†3U^'‰Ñw„%s±ùùŠóƒíQá‰,ñE‘€F×ðŸ*Í?µ0ÚRáМ“ûæçš{^±‰#ó°1ž¿'Ò±‹JbÜö2ysƒëþÕO¶`9lÂa”œsŒu¥Ê‡v_–õùin08séëj®/Ý|£gpX1ЬF ·%˜gt|ŽHõö¨ZÑ”ŸÜÛ€ìã'î†Å5‰ÉÜŸíΘ®erà'˜õ§>£)”²^J#gŸÃÞªMfäå g€Ç.=ýéÚE"L"äŸ@=è´A\¸“ìƒ!ÉÈþöIÁéN†àº¼rlSµŠŽY‹c<óÒ«[FÓL«6Ó¸mùXƒì3ŸÆ¶ÚÙ,šHá]î˜É>Òt'ŽÝ*ed4®f}­”«n‡ Î1 ç?_jV¸ßÝq±=ãß’j×ÙÑUÃ|«d¡b~r==ñUóiŒGÊgýFO1ƒÖž@nd˩ۻkñÏ×ÞŸ Û<\BÅ@#;ý¿Æ®Dm’Ge+Ç•  |ßýjaŽÝ˜ÈÇ7(?ÁÇó¡ú̉¦~BÏÏ Íþ{ÒEræ@«,¼ê>BP+¢òÏ¡üëš³y?á*¹b8ØÙt^wûCò®z‹SHlk!räê1‚àrÝ>èªgÀ$¥E’wdã¯ÐGæ]Ù @¦dáãÞ¥eÜ*6ôš€.0¹ä pqškäà8éêj¹ ’qÍLîBîà7½EœHúœP1Š»·ªç¶M<•Á䜯4 ;G''†$ #‚Iâ3ãžœŸJ«¨dÀ¸z²ÄdðöL*Àç1£·QöœŽ9=«i+"þ—×½n¢†Aй1Xç5iÞ›1úµTñ)#W³ÙÁòÛ×Þ®jª_ĺª²‘ôÉÍRñ2†Ö-Çú³œŒúÖðÞ>†ÚE9[y ÂJägoûÕyòÈHÏÞ=2§÷Gçë[¬åX€ÃŒ Ý{.kెüÍü,¨­éîc2d`ÊíÄm8,è@­`ÎÄ¡p¤žƒúÌØÂ¡Ž©aú?ZБÕí±%AÚ ?J$µ½ ~qy’"òUzðQÏUË+uÅ´DÉ‘±ÂÇB£œçòéUR"6©Sœ€ž»°9ç×ñüû½.Ú-#N}á EùÆæ aN}±þEEIò­Ý™ÆÊÞ8mâó.¦ûªsè=Ïå֪ΗH$º?hea»ˆ£>ƒÕ¹è?Þ·máE“í7|Ï/øô>€W9®x˜Ã/Ù¬¤Œ,yýâŽÙÇÿ¯YÆòv4•’Õ–“¨6îå4û<à OÍ'ÑãÁ$ûšÏ½m3M•aµÞܯùG~˜ÚZÇM~íÃDz¡9y[™Ž›¿„{ bî2dÌ£a@Ƨ\ÏSéÚ¶7ÔÇ™t7­õ[Û– ö+qòødúìLúV­žùü™¥ùºAÈP‰Á?Nþ™ì+›ÒâQp\,…†6¾@äsŽþÿá]]¼F(ÄaUر¸à sÛåÉÿ®‚¢i'cH6É<ÐUÝ gåö§¾dP;’+9É$`n1¤2ŽN];»·9è@©çs1HÑÚIƒnݰ’vÙìOÛÖ§µc€©,)`§hIg˜nˆ¬ÖŠåo¹5¬r5¬'æÈX[¶Gâsõ'¥oÛÛùw.æð6éÓ­A§ÙŒFP‚0¥‰=v²ò;tj Ãn ÷Æ:òžµŒäk¡›©i²]ÚÇ1å³6Ò»OÝm Ûv dØèéúÁ_2#h–ÞX•¸-+¶N8ê;të]’Īÿ3'?+c=Çõª÷Q"nsÍ3Ž ìßJ…Q¥d7õ9›µh™‹p|ŘTúò2¯^ˆV,Sɧj±\¼ß1 JŠà·N Ï¡ Æ0EtwË1¼Cï3»ûÀÈ'û§Óƒ\åèRÊ<ØÃ±(òr}ONrH>¿'¨ç¢èc=ÚßFuc¬DÀ(ÄrüJ{çGùöç¼[ MiªÛøƒL—ìÌì«+Ƙ*N0Äw¢´t=A-¢6×?=šœ“gŒ¦@÷ãֺǎÚöÓc"˺G²MÂE4¤Ž J_í³Ø®‹n‚è|Ñ6{g9Ÿ\{ éõ­!um6HTª¶ÜÆàr¤Ðtª2Ú¦’òYÝ[›½*^HeÜcö÷ë+ ôò•uö« HL…_îƒéü©»hÐ-4g=¥Ý5Æy§Î„O܈x(Ç>•¦Øõ2(1£fcÃsØúg?®XñE·Ø&:ô $d²­ÄXåx<ž{þF³äÜN2ú€?.ÀV©]_¹ ÛFt~7™c´Ó.ã-”¸v%q“üª§´•77úÌÊY¤Ù ²:ŸÆ³|Wt²ø{MˆÌ¤ùŒhôcÛ®?.ÕÞh¶ÿdÑ,¢;‹y œœòFOëPß-;µÉžP®"ÚYÛ¡î}kˆñº8+“;ÏÌŽ8ëÖ»9Ó~£98Ïnx§vôíé\oGV)=O|~Ÿ©â¦–“ETøO*É難#ç8ØÝÏö—ü21ž{9ã?§^¹ä‡ÛÉç#ßÓØÕÍ:ãì»Ä……¼ÊÈë·<ãƒÈÇ\ôgÙœqv= Åã½µYØî#ïçqŸ™çëøš–DHË´‘áOêC霅çëŸaU|8%].ÑíyqeÆã•ö`r}®ŠÚÙîmðʨA¾ö>Çœûçé\2vléWhÍt½Ž6šË0Õ*Œ£¾PÔ–ž%ŽÏÌ1ÚËæFqå»yëóè}ùéH5 2w‚I¢Ãs„8ïÎì~[VZ”w*ìÛ”ñŸ*By9벓óW)k¥ÊÃÄ3ÞL#‹pgPU–>„úÿ‡øÉ«H!…RMÎ[ç,HbG_ÀñéÔp mEg ;ŒQ„.w gÊø‡Sh`¹]ÅQ™¹ç±Œc¿à€ßãW yòI17Ìrp={~"¥nWQËŠ2JàƒƒÒ¥y»(·‡hü¤ú9ýêÊÁ'–˜+¸˜|¡Ï’[îW;{`•Ç÷Ú…$ u#–tˆÊ#„+ ýÈÏÌþþÕ]®¤ÃªZ€Ùn¤“Ó¯QW%‡Ì›f`|ÏN9—ü*M¬¾hÝ0Ã68çÕ4Öâ×c%ÛÍÏŸj¿3ä€Or¿çñªë ð!k)$*LS(eÀð{wâ·ô`ZI%Acø£¨ƒˆðÆbr‡å' µ @âP‚î=¥YœJ eJÑXéRKpL_'˜äü èi÷–fîCå”±‰Àås&8üÿZªo§¶‰¢Ô" »J¬É# ^F8û¿Z~€¼ÉZîHÜNüä¾}Ç­Omsû¢M£ïùOË’z?=ÅH$Y6˜¼dðU@ë>”¨v;$fi)=B̉î"¬ã¸äGþ*W¸a [Ì{áý7÷ÅŒÄÀ.Üyqé:F‚;ÌCÉÈ/œþðúP?4D.™BæÙ‡Î§©é–”ÉnWÊQµwl#÷gR¤Å[•è:;ÓX™—ÈŒ.02Ùìž”Y\Wv!ŸQL‘±1óŽzŽGøUƒ>øC‹»yŒãåÙH ç/ÞàV5HÕO™ópö@¦í°µ½ËVŠ+,©TmUÎNO··ëZ3M>Efuq'8çGZδ‘vä¼¥¿v1€?¯5£pDºd§¸ qÑýzt¨–åc]Ð"ðXHÙÉùÏû^õZËY#0AÀœ~åO kä€ 8¿Þÿz«ØGþ.A!ÉÆßîýj¯£&×eé"ˆ­ãÈg(s&:ý)¦8üç_³F6’>ì`}äö§3® ?y³÷=dç­3NàÌÈwåÇMëéJáè(ˆ$ÆÞWŽÚ–â0\:ýöÆ ŒÃÓ¯J@á•Á-»ƒ½ºæ‹¶—l€NOÞ?½ß!²SÄÈÐò$¯?¼<ô¬¸÷Þ›0H#ר«ò¹^K6Sžd_ïç·Ö¨on ·Òª"~c–g.@( n·á†mÈ úÖl2Øqì8ô®ƒÃzܺœp˜?÷Õ*Ÿ jÑjÄîñ=É'øX~µÐgëù×9§®uæ$ä0“ÿaý+¤òO·ýó\õ75†ÆëÀõ#8S Œ žøïþqR¿ ˆôçùTRvõÿ>õÎÎ Ê±çžø¨“Œw5.H|`ÀÖ ËÛ‡n¢€#o˜F|Ó~eÜJ~´æÁlñJIªnCg¿ni1Œ9 ðÔC! Ê2qךb•V䌑’éM2äa°ô¦1ó6HëÅW¾ùPpAÉ«hG\ôéT5B6†$¶ÑÚ—R‘lŸé™ë[±°l Ö%©Ý>;õ­¨²1ƒZ© €ßâû 1xÿ…Pñ _í‹AÁ>Y'8ÿk׊ќoñ¥±'îÆô?û5Pñψà?ñîzgý¯JÞ¯Cž[?R¸Ùœ®q»¹#†Ýí\íìKç—Ú¹ ÈÇøœÿõóé]£÷¬€rßëÎ7ï7·¥`ê ªÎ7®00ßè8â·§¹”öÔ•ÿAÇæ ýEh°,2 ÎAÀe#ô÷¬ÈU0¹ w?‡¯Ó×µixã;?w zçÅ9n%±gGˆ%âLQÕb9Œ ÄççùWB—çV°+aæKŽ!ïøcÿÇz¥áȈ3IÝF7ŒûqÛªÿã¾ôí–ðü— ÃÝ\6ò;(ëÿ ŸÎ°ž­šGdU×/â’Ws±£°úw÷8ÁIºFÙ[ƒ×8Ínë7âK¹¾}Ë(IÎqþ?JÈŠ&óY™6’BtÎsøs]4£Ë »²Õ­º© @Va€åÆOSœžõrоB,@<ã{‘ô ޼Ó!e Ò•ËGAÈ'¯>ÝZ–ES7 ýìsŸSǸxÇ41¥ØÑÑ6„±#~Ó)$àätüˆ?^+váâþ_Q³+º§ x‚¹ô k#G‘„1qå0d*Ga»ŽÄð§îŽõrñÉ…È\(É0£Ž0[êw„¾#Xì…`*»C°9pNCà§^{ìbG`+¡Ó-e #É9[æöÙŸüq?+æî‘™UXïa¸‚ÀœžO\‡u˃]–ž€ÅS$cå^s€¹Á÷UoƳ¨ìTvÜõ Wïc#×w\ýE\†%ëŸLœã?‡áQÂ7 €2@þGù9©âR‘åØîÀ‘\ìÜs2pIÏ Ôm½a˜íÎÑÎGû§†þu3²ìÚHäg&²õ ØÞ<3åC„!G|~j}½$µÐLÅ»w’2ûK3åT¦H}£vÞG@3•<óÁ¬¹cŽWp|¡ Ú¸ÜG‘Éù9ï€zг=À(d.®€ÅŽ„Á±Ðq÷ÇëKi Qʬ#PÙ¡‰ËHÿ¾²qÜïWBÐËvM ögmŠ0xÏ?7×>€ðH=1RGuye‹kƒnÈçptù$àÑI>?Ý­­V8_˜”Ú¥XÞǧç9 ãµQ»gµ“|’1•ºã¡< ‚zÿ½éÏ÷…$î6Š“øêâÒãÈÕ´­ð²®e‡•9õS߃Ǩ§™íîà}O×+"ðÓÚH~èîJõϿדHЋˆ_!FùJ²ü¸?/pz÷Ç÷y˼ðmȘ^è›íîS•T;wgßžÛN?Ú#µRPôü‰÷½M»_YøƒOžÎê?Þ4Ee‰ð$®O<8ôÇZ⤴¼Ñ®~ÆÊX;…Ôñ(äc?ÌuªW:¬ŸlíOÔ#ûÒ¢àîø‡|ÿŸJÚmcO×tÿ±]J ¸B9£*°ã+õôôú ÕAÃm™üÛî. «áÿ´Ã6 ˜ŸÄ wçüñíéz%Ú]èÖ²‰f%ç߸‹+).š)g1‹‚¾TÌuÇ_¯¿·ÖºÚÍeg=”§" Š¡õR/óý+¶qô4‚³7¢Œý¡åÀ Çüýkϼi?˜àxÈË à mÿ™ª±"Ò;yœĶs€sü$uÜ=Fx­Ï G¸˜ÌØ}¤`#tèNá‡#úŠíœ½ÖÎx¥s¨«à6Ö\}Œý}ðy­í6Тƒ…Qþ‘ÇóýXUH<¥•7É€›‰UlçùÎÞIÉÆEjEuEVR¿6wd.y=;{Ÿn+Ï“:—röË™ÊÌ0)ÚN;kžI¸Ò¯Ì¾Z²}àÏŽÿÞgÎyêMwŒ™b¨¿x|Ç<Ð P ·%6•Å3?O¼ŽêÁŒ¿p®­ø¤×3â¿ K¨ k4*Û‰ ¼†cŽqƾ>•×lU˜¸~z˜ñøgªI9ç4£7t7Õ™âx_V¶S‹l66‡yUHúsÏõ« ìîD¡eŒçv `N8¯¡>Çk)a-¼DõùgëUÛBÒÁ?èQŸ˜7¯>Þ•Ó]·F.…ö<gD\ ÆåÎHãÔôÿë}*5<„dÊ‚Ð:vüy?­{­Ïƒ´+˜È}6%ÝÉdùHü«Õ~M§Ü›Û ×1 §ï§à>ö+hba-•-O:Òá²`K§¡úð9©×Ü3º§#æëƒÇcéøSõ ym¯É*ÊÜ9ç¿øæ˜Ñ™Š‚ÛCapN2GË“ž½Éà{t®‹¦cbt_-—°T¯¸+Áõû½9úw¨.ƒù0v€ vÛ}?ÄßHþe¤r8%ÏÔv?Â?As4‰·ž1œíPzŽ}qÔÉV+®žË‡q´uýOóœu«‘Ù¬c(ÂSÑ•N{ž8Èþ¾Ýê#æ.Q‡D^=xôéúUûu¼Ý¡S´™và\uéCl¥iàxmƒ°&fr[×'°=ý?üÚ·ŽXìÛ™2ƒ†'$*Ž¢ H@’i#¢>ÔDáO—œóÔò>˜ö"üöo–Œ¶ªƒ»Y·tZVeÉ’Hî g™Q_ËŸùhçý)ŽÌöÌ´cÏ1§øSÔÜ¡Qw¿ÜþƒŠˆ¶mX$8ܘᛴcÜ}zT—rY $l•Pí“å¶O2ñÅ*¡[ˆÔ²ˆ·ó«yy9<Ô̲O•"oÜ>ûùíß¿zM‹ó09œ}=óÞ;ngÛ _Ýmä“CïWj a9AË8ýÛ{ûUuæâ#¼Ü·P=øU xi§–06týÛuR{XQ[™nêÒ·Í·sÈq´œ}ßCëL¸ÛövÉSÓ¨þ6íš²‡qÝŽûYÏÝQ×8¨®š`„²¹=7lÇÛÐUõ±£•T<"vÚ9Úr§ßÜÕ¤™VBæPÁ‰Îb§= BD‘ÌK ~dŽv=½êdK¨ã˜8œ¨f<yçô5,{Ñãx‘ƒDB° g¬~´¨SÉ*Ȥì8 àÿ«?ãPÙ±ŠèG –$iA$¸Û鞣ڮFUàùP9(wGÏîÔzg½L´**äW’IJ¾å]¿>$ÏSýiûãa#*0Îàp}ßÖ’t‘üÙ²C¾’úb‰QÉ?놺ãšOJVÐ/© ],S®f(ùR3ÐüÑÿ…VyVTeÌnJõÎqò7¿µ_ZGs³`¯¾9‹ÛüjBïDuòò¨8ýÛû{Õ]™E¼¹h€È ’gø×±úÔÑ«B|ÄО2f‰$XÞDÛß'”+¹=1N‰6¸ï'½¡'©Ÿ&›‡¶š[Y@_º8$.îGÔTqÝ‹vÙ~€$,Êß)88Ï ù…k£±‰š=êYI MÿLÛ±üiLÈ’G$‰¹Iz'_^”)_qµmQJuŒÆåV=„1 2ÀýÁÔqSɰÎHr–HÿX}~´ÇÓn, i¡ŽC§¤‚7Vä¡,9Sßîôí]¯£<&›=¥³4ÛÜ:1'o©úöéŠNKD$ºœºÛd1˜†ÈT?íõ©øÔ†™WæÁ'Ýúþ•Nѵ¤B;…t¸F]Ë < ®zÌTm¾n9ì=ãç­6î X¨ÎVݾ`Äc‹Ÿ¼hPë®$Ú<Î1ŽÊ)_cÛù‰)œ€?¾hÆm¼Ï)ðÛȽ)ú  Û1,s°"Rp¼ô"´®E™sš,çOFÎqׯzÏÓÛý,2È9@d,ÞYÜ3ž6ŽÝúšRÝêUFQK;Ôóöi¼k ¾Ép<²~÷ý3Sýß\ÔPJÍh¹/Ü€÷oZU äÂs&D=xcáUa²áöÊç†|‘Ö_öj44…¼ÓËs‡=ÊûRù{ÚL¤„ù÷~¿9:n9QÆÿpôÍM¬ nˆóÔ`åÔŽâuŸ-ÈÎ=þÿ²Ó‰MŽ àíøË³&Xr>µ{É ì€`•`6‚ ¤U(ÑÄjw 8ÜLÕ«ïpd”2¹#yåöÑøOä´—ð:úgük 2@(f<¿ªŠÞð¶Óc+)™?*Š¿ Pø„Ò\Éâ+€Ëþ©dUÇŸ?û5uúættƵpáˆÉ—8ïó-t~hõý+›šCc¢+ò1 Àþt…pOQ‘R‚@ëL‘—î#µsܬGÝ ŽÕk1äžy©˜öð:‘øÿZŒŒªò3Š +àŽJãqÅ SÁ_@*fêw1!yàñP°%°28æÈJàqøö¦¼A¶ã–ÝúÓ‚ ¶ ô¥$=°1LA…1ŽO^¾µWPP`#¹éV†ìc<V¿Ï–Wdu©{•ÐífëŠÚDçØsYªDÄŽó­˜ùM½ÈëVÄsÃçñÁ9á"<ÀV³üF|ßÂÎÈéž»«BØÅiwžÐŽqìµ›«8o±ÜUD'8ê>£Ö·‡Ä½ymóé‡Vù€,G—ø¢\Õðg}ͼü àîÁç¿#ÿ×Åo³FÀ• džÊÇOö[ÔÖîl…aGCÛþÓÛñ­éÞæR°è¾P>Y6¹á¿úãùUá#+b‰NwcÛ·½Q„)uRHŒOæ þµi#Lz*§°ÆrE6$u Fß÷A†˜²dõ öcWä³ZM¥¾Þ"lÿ'ócE‘Šk{8@°.Ø=Øãúš±­€ö7J¬w¯Աà~UÉ)7#¡%ÊyUÑu†â2T–‘C9É$ÿCùÒ¨V „*0]ws€yÿëgéV54ú¬£vu¶8~™­U„”DÇ?)-qžùö®ôô¹Æ÷-¢€ª»‚rm#¿9ûÃéÛð§Í0{`Ú›ÎHÏ_L?¯ æ‘wa o”¿@Ýx?{¿ôž”’ô@¾èþ`Iéב€;uì)u(ßÒU¤·tœ6Á9à¤gõÅ,奫!Rä‚PI<úüê§ñÏ\Š«¦Ê%Y°ÜKГœž§¯''è>¢í㩸T.Ãç`r3»•cúŸëŽçñ-=Ê4þY寙ӄ í¹œg¾Fk±Óü£n±‡b¹?6>îsïò×£ê”vùv¿ðBîä>ñ÷ÉÏZì¬/#Žê£ q£ŽsÇÞ'ëŠÂª5¦Ñ¹íBÎyÆî3éR,e—$àôéÖ›Šá¶°ã²ÿœuÍXÆ,¹'Ð×9­ÊWR6RÙ' 3ž:W5«JñÊ圾Òsƒ´õ=uàŽ•Õ^©0¹lzãµ2èç í<#·¿=Ž<ðr+J{“'¡A ™bšQ¹O•îNìOOº½E]ÓÕ¢ŠR²(7gL¤8Ë)»+× d‘ÈëØu®jÇÄl ¬Ó8  ÒíAƒÎT"‚8n½Ž:­n}½oa \nle‹È\–#…b8è8!OzäpqfêIЫ©é·an]&ñ–ˆçŒàþ'ßëXڽ;É"¼w»Hóu 1ÛÇQ÷GÓ¿z˜Ó¾ûätzÖ·oš]G,…Vˆgð[òÎ>£Ö—NñuÒŸW8ó™Çàǵp×>»xä]:ô^'$Å,e 8Ïžxêqù`YX±";Â’‚FÆîqÓLþX£·3u$žÇ»Ç,7Y$VSÜv&÷ ¯6Ól5»=€Í’ Æeœ ½>¹ý}MwV"s󷜜u?Žzb¹çX¶Ñ_YÐ4ÝZ2·–±´ƒîÊ¿+¯Ð×''ô–KK트,Œ2K u9þx¯@’@ÊŸö¹¨>±`Ê~Ì.bSÃE’OÔzõïÕª¡9­£º9+ê¶èÆ$Ž`¤¶Q0ÜòÍÛ¯Qƒ\ö¡¡^Á)70Oo±®è› p8ÏCcÛ é^…gâ›R]•Is±Ê/~‡òÆ?ß¶¿´Ô"1´ÌåxÉ{Œ×ÛN;¢=œ^ÇŠ[Ú%´¸—{8N ‡¯NÜÖ­¬%Äþ[¾O g¢?¥wÚçá»Yn4Ù Šÿ¨ÝòcÏÝþ^Õçïk=­Ýìw1Oæ®åd“‚2§ü{VѨ¦®·!ÆÎʼnc•ÖFY$û’ŽU¸Xö¨ö¿ØK32ÿyçî{{Óü‡&@Ñ:ì‚Kz üªDû#‚“.ïVÁô§`ºèZù…Ûe£TÜN Xç{sÒ«É…àÄFÌóýØÿ²Ê Á]n ÙŸõëô¨UÚ8]‘‡–˰óåŒô¤Û%p¦gèøRܨ8?ë},VHÜ4JU»1^ñSä2:«Ì­–þ ½/µ9]Rá73³qéÝøQ°u)‰6^ÂK®ï/8Þzóþ5uL†&ùòY21>1û·ãçëY‘¹¶Û¥Ú ¨Ë/#ŸAšÑE\33Æïå b<ÿË'ôÔJÖA¦L±$Å™› æ\ î95ÑÄ ‹†à\ðw7½KrÒ]ÈŠÂI>G|©ÿ?Z‡¼ŒK2ã‘¶,wcÍh¼ÈòÑB±G,‰!r@ãäAýjEHËI*¬*à¦æüã>Õ3…ŒÜTpXôýÐÿÒ«¬Ò´`¹èÄãþš{}ZJàírAi7Ì.dç?Çõ§ÛMJŠò)ÄXþüý*õ•Íåʤq\³ù½>fç'•´¾ ¾ŽÑY¥œŒ ß Œcø{ÔJinRO¡pÈÆM¦&ûØ?ÝsÛëNs‰Ÿ ‘±Šÿžµf]'P¶gI‚Á_Þ¨Uɘpz÷U¼[Ôi_ì°8PKÆà cœc‘óõéÅ ôA¦ìXdo>-ÞxÄ‹€­œüÑûž*4jU¥ÎÃÎ?陨íf†yÔÑÔíè@Ü¿•:5’5Råœá¿éÿ^¬î>dfi0ÏË‘“Ó–O­ +òÛ›æ¦;—©‹Jóàö3ñóç?½ñéP¢·Þ-3gnn:1¦®-^0<À>QœàõgñíOÚ­ Ý“ûĉQ±*ŒÌebTdŒÿ^žÒ—€ŸvXãÑqšv&÷; Eow§Ü[4cN$m¤mnN>½?ZÞ¿‚¨9QŠ‘ÜŽþŸþªã4]FKÙ£)#¬û—s‚åÆ>¦ºÛ{9a·>o–Á$d³g¿ʸê&¥s¢6hó¯Hö7h#–YUcò·7Ìvà®lòp{f ŽY.&S(/‡ùyêËéôý)þ7ŽtÔ“teCd+uWú÷Çõ¬Kɬã‰n#?f‘‡•!È ógNµÙx#»IÜÑ2LÐ 1ùGV?ÞjŠ,›E“ôô57—ºÕ ,yÚ¼—'ø½W¶ìqŒzãÒAëÔ–ÅT^C § ÉÏ«MÈk9#,Ã)ОØ^ÃéYÖHí{°º7ÊOg¥iM"‹C^vF{ì^Ý?ýu2ÜkEs&Ù“ìê‡Á†sÝœú})-#ò-‘>Pvnãqë{qSÄ¡YIo,ÚC1†Ïðúæ¥ÊpB íõCÛÚ©¾Âëv8"‰ÎUHÉ\ín~cÏZa yM•LýÆîßüæ¦ùþÐÊ ?9Ï,Oß5¡©Œ 9 ñÄ~õ7¢'ffI@Ü£ «úIïL¼LG&zÏÊßÞ¿Z•ÿš<ò=x’–î5XÜîRw§Ì?úÕQZ’öd·Žvž¨ç˜õ5švˆÔeGîÎ Z³1Qo”€½dà§ÿZ ò••óHzŽ£üj® G–AdÆH/¨®—ÂQíÓ›=7å\ä{0Û'ßq׺Ÿ !:|ÌÇ™Óð~¡ñ Ѱuk¬c3ø®ƒüŠÀÐQŽ¥~p@Þãýá]÷OçXTÜÒ C¡e`g'>˜Å1Õó“Ó(éƒRÁf)8¨äÀ Ç< W9¹)+™=xüéŒq×€qʤqÔú v¨ÈÊîÏN§=è(aÎHÀç­F͸䑀1’*GË­:S ‚ ç#=zÔ°+d+Ë7$Ýi n`O\œÿŸZ”íêËô¨cVI,ŇþôÀx%NÓÔtÍVÔŽÓ†^ÝjÖpG©ê|.„ sK©kc"%;Ȫ¼ ³í¹|àb´Ux#j™&‹gÅ÷­ž \¡Qý+*ñ‹x¢èÆNAP@ÝþÀíZZaó/‘Í'§Ì|²‘l¾8ƒÙ{çò®~ì£LÍ”l’xÚ>½ý:ßH!ó1³óÑ{qX“3™ˆýáø½8Ç?•k Ìåª'·9Øv¾ ^¿R [i°gî‘éÿת1e¤‰|¾p9ï×èó«–¥£št(2à ä?•9-B/C¥Ñ¯|‡! ²Ûq]Þ§êj6ñI3Û¤EÉÞXžƒ*çαï§û+­ò½»/Ž d †Þe’é£Á`®êNÒ§ŸÀÖ|‰ê>f´3üWCâ)KPíË(Èààãôª¡Ú$û@xÏÌdõãú~mZ¾+"ú(.×,ÅqÇ|moÔV%”êªROõL»ƒòŒç#üúÖðø”¾&lÁi$‘3'ÌÛÃ猞üž~£èEI}kåZ´JÈ«½˜ÝqÏZƒM¸0;[ÌÄ.Aû£ ȇÿ­¥lÝD“Äñ‚¥œqŽã¶³m©jk¹NvÊçË#eI “ÏøŸÊ¶u?gŠHÛqPÄŽ¹çÇLgó®x«Æò«FѹRGQêOáS¬¯$*€†çIëÀ¨þf´q»¹švV.YHípr‘»¶ÕPH$Ÿ“ß#8¯ñÛÓõy-Ò?0¹F*s#62~Iõ'žŒúW/;·ò©VÊw;ºñß©äv±&x|¸ÒBUrÁ. U\“é—#ý×Ïj‰Å=ÇÏAÒµd`…ßmÃã§s´ú+¤K…o—qßœ£;Ojò˜¥”HUâiBÃc0ä»í+G]¿õÒéZ¸ ¦`Ïæ©Û¼í$î œÀ½½rN•µGDeѹÙ2ËÏOLæ±õ}'ÎÂgÐN}ýóÚÝ­â\CªÙ\’]Ž6Ž˜>ã½]l::–ùñÛüþUŽ©—¹ÃÇjöß!LCd‚ ‚O9ãúðÕ ±ˆäÊ©OÞl$¶ÞpSêÝË{ýv—¶‹,!Ù Ç'Œ}~¼æ.¬(ÛtAflôÇ8ÎIà0^¼pkU;îC‰5…ßÚaBXd"í, ×7·¡5ÂE=¹¶»Y‘±‡À Áõ9'žø?ZÂ|W©B̳ÜÄcg#èüŽõzÏPD…Ûce ³mÈdq’;FV†º¡ß¹ÏkÞº´ öCíìÌíç÷|ãÓ¯LƒŠäãšâÎC‰$QòžXKF ý ý8¯nӰЬO(”2ž„wÃ>§Ïéö²Ø™^Þ' «F¬Oæ=«XWkÝ‘œ©ßTy¶»ˆÕ’R§k,#h#?*©ëןâÆGm=¯üÈrw8À\‚spvŽp@Èëž«òñXÒÅmpѲ¶•ષ|ǯ¨ëëT?´_nsŒ®Óžã©úçüŽ•Ð šº2skC¡šâ),› Fzdãg ÿxÿ»ßûÕÕø2»ûDrÀ¬±þðÆÊËdŒQõç¶+Í“P‘Ú™pÁŽ?½Îß§$ôÇò¯Gøyp–ö÷×;«•D ‚xÎIçÔŽÿ¦+:ÊÐ*›¼ j 7XÓÖXì12ƼchP¼°+Ø wá^d—„“9UFf'ÇÏ×§|ú ô¿]Ù<ðÞ}ª-6ä3¼Ÿëž?‹ÿ¯^S;.Ðq9r{ú}sÿê£~P«¸“ÝHÎѹbÁ¾mêädwúô÷öYŸ<ŒôçüûšM€·îóŸuéÓÏüñK*åCn à›’=>¿þºêV1¹-½õÅ´ÊѱÇ##8Æ:}õ«Í®JÑ•t$ާß>½ÇCŽFWž:võïÓÚ”F'îàd=¿'e›BKK;’z– ÿžúÕxåžZ) 7ãÏùÏéNŽÏ‚G''=êí¾“,è$‰AOïnÚ1Ó#üšI›*-õîÒÎC zŽ¿áù{RÄ/ d!y ¼ã?oţà bàÊw6B € ©ÍXŽÞo-6A0å{³ŽuЮF·3ôÍnêÊTÝ+¡<í8ëÜóî}uƒÄ:.­&ýFÊcò†Cž·Ç$öéØñÏÍš¨¦Þ|í;ò ÜG¥Uû» Ì. nX=:T¸FZìUÜt;ÛFÑ2­¥$°Þ G®~€ŒCèy:ðKa JÿÚìTœ¨Ulã>ž™Èé×߯™CgÝYåBvŒyá=¿ oØöÆTÉpÈ@ùDë{b±t.÷4SilzDú¦ž¾cŬÎ[©!±ÆIöô?.q\íïŠ5}>Böú´S*¾¾yç“€=½}¸®ut˜Zr]wçžnß•dêèó0‘7Æö?çŽÃš¨ÑŠÜ—Qþ…ã›M^ê+=cL¤fÀ˜Fç¾OŽkoSŽÒÂòÖßJÓáÈ|¥9 89ã¿é^S¥Éu¢ê–·èá„r+²õÊõo>!×ìcõ³Ú°µ7TñÏéí%·W)ÇPOQÇ·CÓZö¿™‚IT6øÝHèÊzuàÿ,q·š‘‚âh–6û$è]P”¹8ôèxþ•ÓN ˜NIoÚjPʇdr€Ás‘´žG_j³äÊè)1ù)Iüó“w,—D²e¼°WÜ£ŽsøÓô‰ŒR:–ƒ«.èqÅt4ìdž¶6´ñÜ.ØKÿÇ0òÐÿ…0¤Ž’Û ò\ƒòïV¼Ïß!>IýçA“ÿ-ÿJì,|!ú|R\M"Ë,hÛQTùqÜçXʧ.æê<ËCÏü¶Wr-OF‰F>àõúÕ²‚ê-Û+¸œºsó(ô®›RðMä1HösErÜ‘ ¬A¡â¹Ô”´ò[ËŽxó¾&—_ÓÞ©MKbym£:? Ú‰õf’â ½W;²Kœ1Ói®Õ݈ù“hïÏ8¬-XiÚls\KÍpIßœq’Bçñ5µu2Á±v W;@;×%GyÇDp>9t–„åÁèN6ž+žùGfÔÉPÆÊ›ÄÚ”wwbÉn‹øúcôÿë†U@ÆÐãk®œZйÏ'vìVŽpcUŽ6l2qÔçœÒFÁ-îßøyëõ©T”·U8)Ø{ÔR:` Ç…|ƒ¹«µömذó<þï¡R3Å]»_ôx™ŽåÛ!pFqò k:Ø&é–;c$r?•h_6Ë ä…;Fà2¼§åRÕ˜nR•TDª5;@$Ì:Ý:d2—¶Wr½ äÈsÂSIs Œ>K”æNû‡¥@°ºÄnP ŒJ’TÏ­4÷/†&lü„?òПã¨dvTÈØ à9ôŽç´€}±v‚ŽÏÿרÌ3´lðF2Xw(?Ãò¥`½º—$”ÃÍ$pL¿õ×ÖvÅÕšOÍõƒÕÆ©´s·Ê.3“‘÷ÛÿëþuaD¥ðòäHޏ?ʘõh†èþíÔdœ&3 ?ÃôúUiåBcaÏÏïV¤ Ñ9%SøÀ1éUæ-BŸ0¸pÇZ¤C}H•#Ûä8süYé]…2,.OëýÙZäM˹³’Yˆlf»_ FEœüœy£é÷¦·Â:{ø}ƒ^߀w~­[þZzûê°|43y|AS]&=ÿJç«ñSøMfpNÖRÙÏ p( ®AûúSÛ|Ù§LgÖšè8ËwäÖÄ=àöÅC!TR?9«´èùþµTä;œvíß­#Œ³)õÆ3ŸJd´à Ëüô§ÈpWž;÷5_ ìIVôãHcNçÿ çïuúP —àïÍ;#r P?ýtŠY²6€HÎù÷ b©ÆpHãŠÎÕã€Vš©V䎘â²uFýéìÒêRØ©jNkEAT#³ír Œæ¯ïBœóTÉ9íU¼E¬“ýü~lÂ±Š¡Ô®NäR.$ûÛzy‰ýãŠÛðñ-«ky”sø±¬{pÏ«Þíb?y»9aÕóÛük¦?ùÒÙ|Èe¶`8N .>êõŸçXw ¢^WŒ¶wÉŸá=? Þ¼ۯ˖ ޤÿ ö/X7|õ(ÀÆ9$þׯOZÞ™”Ë6ØVG*6‚@ã>ø$Ò§/å^¨1óƒÔÀ½3U ‡†pØÂ‘ž¹Ïû\þµ-æï³ù«•掜 ñÿõÓkRS4¸ºG#m»A&xÀ|ß™û =ígIÛJ&Óœ7B~¤‚?­mvì<ÄlW`§*zsÔöúÖæ2Ky$S–d z }ùÅg6Òe«6QÔ¬L7ÒÛœq’~düðGá\ƒÆ`»ÊvOAéé^—uf)lfÆå­É鼃Ó+ÛÓé\f±k°ˆ”-·’¼ãž=~}éÒŸAT‰EÝDIp†C"¬vðÀduíë[»Ü²“pÛXî ¬ ÿõW>²­€6â@ÁèyÿóšÕÑÐâXÙ¶.ô †b>™©íõ­d´".ìMFÜZjbá4nH!ŽwÔ~9ýjÍœ6ÓÌ®ÎLcƒŒ…$)<“Ï'<ö4^[¤‹åÆ»d™‘¸‘‚8Ïê=)–‰ÕÝU°Û•“gõàgØc½+Þ%[Qš„?f»w \`Æ£r°#·zþCµEû[°•<¼¨ K¾r ® ߯ðñÚº[˜士Yç‚ÊKßçëþÝq—Kk²Œªyáxá†8ëóúÍ|Ú ZjwV&ÒþÝUv.J»ª¬sМõÁõnƤ±´û4°íY‡"<œìvüzr?ˆr9®.ÆwŠò#© Ûµ?0#‡^ý3ƒ]E®¦Ð¢´Û ¤;©ûËéœí•céYN l\džçE§ÜJ›–'ÿ+ã!·‚£ÐO'¸8<[ÖwÛÄ\_æ@ç<Œööä§5ÇA©Å+CóßÐ0Á|˜³òw$GFÆF jÙÜE Ϙ ÷“?6GÍÇ#wQŒ0=k @ÕO±ÙÂÐË ¸!cnF:tèOL~•CP‰dO™2MÃíÏA׆ãÐÖu½ëmˆy»IUÁuÆÓÉÜ}åÈõ¥<É<*l¯!\ ÙÁëÆ;lP+&r3YË’“©…]ä dqzg§=ÀÁªw >t•ÚP7¦Áót·Nàg uSÍt-»!T݇ߟ,’1·†ã‡Ò«Ì˜™Ù—h+¹™Ü„å†ràÝ—¯SZÆL™<2Ëæ„g`ÑÍâr¹È<äc$àóõ¿­ Ú\çbž;à玘8çÛ#ëXzPz£9Ÿd%g<1ëÐ/^FH>µ?ˆuH¿±¤Ãíyblm<¶sžÞ¸#§"¥«Ë@Ù+©™ ·˜îÄÌK1$òsÜÿúÿÍŽrF:úVÝݶÈ7É2’ÇË“Üÿºzuæ³™b H0 å{ü;tü«Ô‹Ðâ’Ô®›÷(<|Ü~?Ïá^¿áÍ2[OE4€ù#s)S˜³€Ð㞟{ë^]nˆr¾8ßœ›®qÛüûW¯iþ/Ñ›B·€ÜG­¸Is ÎsØW>&í+#Z6OR²®°\YÏec¡Èù[Ó ç‘Îs+Îõ[1m¨:E'˜ŠÄ)Ø3Øžž¸®÷í–zÅÞŸp7¤O?Ù$GaºHÎJ“Ž@ÿÑñv‡ksk ´InÓO.0ªX“Ï¿þ”'É+>¦’2Ðò3!¡2mÚJnØ*£®:Ûôéˆ,0x!JŽhÆ:vëþsZÒé²Ú]Ïi,GÌ·p’äãîa߯ÿ_šŽ 2ÅPÈ\8Ï<çbÁÿõ×Z‘Ïc=í‚©Þ7/!p6òîôÿ=jT´i”´»üÄêÉǹÿõÕײ‰ܲI&NK6'°¯?‡­HiQå |˜õéÚŽn÷q‡NØvÉ*É(PBÅA=qú}jÙ·s­…ÚåX¤ãœUV¥H¶¥T 2¨É°¥RâUŒ´…”^¤Ò»¶¥$®YxfY2eXØc›v9Èúw2Å+ÆU¦‹nT/}R‡ír3³|î8  gç4‹׬mÕðq…*HÏbMHË+k MÙ‡$}Ò’AÎ:{Š#†@vìBølðàäœvÕ†l(òx9'kŽ^F?s[Ü»¶ l,È~a‘ÈÁ9ê(¸"tYZgÝK´ä >xç­#G(}¤Fx]»r:qÎEPT¹•6²1佺óÐsÖ¥„^ËpŠ–rïFÎ<ìS·˜¯bxÄUÀ®ÃnÁ9úVUáÄó¨RQ¶’w{ƒž¾çüóZßéfD2ÊbÚ‘æ–?Lwâ²/’{Äî;wuóî8ÿÄ ×zçešÔ©b¹sg 'œãýÕÎO<äÖ·à×­®í’{¸Ï4’°'já—œs•Ïù5Î^H-ì›oþUëŸo÷AúôïTc`UrJ… çztûæŽE-ÁÊÛˆõÕ¹Ô®®£HÁ"ŽìJ®9ã ïëYÚ4Kµ¥lî‘ÑA$ú’O^k&Ú5 ä·8ŽHÂÏRq]DqùvÁK’!8êi4£T8¾gÌO)ÊTùºüÿýaN†é8Ê"³”&Üüê}½)ûB@ùq‘÷~hÇ·­F@rŤÜxÁ.‡ÓÞ§G±V}I¡œK¨t’OIyëïOYÐHÌDo`ÿ÷ïLËŒ).Ã`o^\P€$ÅR›´‹ùÒweh‰¤¸‚(™‡”£kÛŽTô÷ù©ÔQH¬ìD™¾ê<Ïðå yó[åÁ:óÒ€Û# —&pN$Ÿ_Ò|Èẚ0³í£ÀY±“ƒéŽy¦‰aPÁ¤S Œ/Í0;±úÔá÷ZÇÃp¹ÃJ§·­1å·±Á'ï§Z,+ô1åHÉ*Ï´36ܜ߷jaKi ß3A< úÿSWor‘/Ë»$H\ŽGqÍgD·Jùäà’­Çéþx­SЇ½ÂÖóR@gm¤îg$|«’:êkÒ¡1«ùEöÃ2£&Pà¯UÇç‚+Ê´Ó=¤‹8GJpFyü«Ù49ã¸Ñí䌅Á=1Årb7¹µ>ÆT7ÚDìE¹¸HGW2“¤{qdzu„ÓÛËyo¬eo#™ØF¤œvÜϯJì/ŸË¶y6dŒrNäþ òýnþïRÕZ.d¸Œ)ŽPØ*ŒÙiôÏÖ¢šrc›²9GQw´k;Œý¢à•àܯ^Ç?­cÉ2Û,ŒÒÙ9?0=ÿuw^¶H÷×Moq3áUˆrF'¿'ò÷®^úÖ]6ýáiCI•ܧƒÏzæ»á(½Í$Öã‹€¥‰by “}=jå¬2G~›â7•!‡áÁëïøS-ô÷¸2LêQG%qøÿ*е¸¶I.!"@6–Üïåíßµ6Ä–º“HªbÆAÜ猞ÿS^£àýHê~´ŸÞD<‰3ê  þX?yrÇ Ê È*ÙÀÀœc'šë¼®ZAq.’dXÚàù–䂨Á§“±ÚÇa¶TU Tƒƒœ‡'µSÔõ–’…®›B€ƒõ=ÏëTõûq¦ÞÉ,{Äs™KdyŠ>o®y÷ãóå.®¤žFu#¼µdg#ÜŸsÐûWT)©jŒ%6´`-ã“Rv÷¬Gs¶ ì?ʵ”D«·l` Úç{šm®™ h#ŠŒ3¬O׎ɲi±¤ Ìí¿qXÕ“õ\œõퟭi&˜£tC"@±!ùCnèòNôÈã‹Ì cÈg pëSïRI¤ÄUe72ù`íBw Çñ“úûUa¤¬I$Æv”©tr6‘êHÏéB°93HB%TuØ"`í@3éþJ¹wh¥'IfFålðy 1é÷}+:9e·h•ÿx¤l`¹ç’Õ~êö)P"̘Î$ 23éRî c<\ÆŽ¤)`¥~ñ^À÷ǽ q–8|ì#ïƒü}=jI§7=r89›œóžÞô‹2•8˜ ßuëÓ¥0¹$—¾[S3œ`f`1Î}=ª¿Ý‘¶^Ç,à÷SÇåSIt˜­Àº~üàõ¤óÀ(í:®þwy玴$ ¦3íA_/ î%1ü^Ùþ!LKÐ%TdŒì±V¼ÌÂ1p±©þ!3çҢ{–ˆ“,ªÃ.Év÷ªBdk!mŒ¨PAQȤhÎý¹)Æï3­XƒP·6.6‘’7HL ‚ö]ó)Š]û±ÎsÆO­ »‰¥b»(+¸Ä)9ó®ëÂÙ6W9>jõ=~E®!UÝ$ù_hSüÈÛëøW{á¿aœ€9‘OþCJŠÏÝ*žå “æ^6 ?'Cõ5Ón_ֹϩò.>ðŒò=tx?ÝÏWâ6§ðšíÐd(ÀÍ ¹à7bœHß÷pÛŠN\àç óβ5!pÀÈZ¬.íŒ=ÍX|÷ëƒíþxª¬Ãsnp03ŠC#%OL¨ÁÇÖ„,@ÇÞ9<ƒÍ`:ä¶I gìi…d“€y¤4FäÜ qƒÖ¤@8cÅ5Bãq^r ?¦>œ Gë‚OÔzVf¤,A=+Pd…çµPÔ>`àcñ¶e#:ÙºzŠÐRÅHÛY¶œ8^kYF媙'3ᣛÍX‘Òe5d·7lvÝ€ü¹éÏ÷úV×…>í'ïÎæ ÿZç­J‹ûÅ·Î;Øÿ²k©+ÉüŽfì—̳y³nͬX‘Ô}Ñ׎•ƒ:²Ï‚­‚AÃq‘ßå?ýa[W@ºœårK+pØ?…aÎTHUÆ9 z9 ÏÖÐ2–„ª¡TBçŒÿœvãqöïq…`Ãܧž˜ÿ?T ¾TNK˵IÎAÏoס?J»ÓpÛqcŒ å}ÿ_zlH£n‚ÚüeIFB@Úx8éïÇ5rÞâkAm4 $xX…ÊðWƒúþf™:«K‘0;#ÀÎ=ˆçžàz~z{mae †y<Ì?]¹$}20M¦¬éõ}‡KµÔSˆÃ+Ç(år}AÈ?_zã&ÔGö¡“n-®IIc€ý=ŽAü}«½°HæÒŸNpLýÂpB•æqø×kÖ&Âòâ5`T•Ôc ÀÿNÕ• ]£J·Ü¡$¾l'‚¼çÛ9ÉÇãùÕ‹idŽ\`…8wÏLŽŸaUÒ-D²gÊÎ<Ûó±‘ó@Wr–*?7\qÛ9ÔÑ‚Ðé$À•¦FeP§‘sÓ$¯ùïŠÆ¼-ÓJ›•&““óãžp3Ï#ð«¶»J9pì"$œ!ÁP;ŒúN’%»£áa<9o§è{~ÁÎ:;õE­?TKvÙ(ïp;)ÈÇqŽÝH?ìÒêÖÜÚy°8s° €·qç©î=zúŠÀß=¤Ë®ÊËÎTã `ô¹üjÌz„Ðo Éå¹b œ‚ þ@Œurkt+ôe y^hŽï-¸*03‘Ž¿?äÖ´L “ .À¢C·?)\7 ŒîäŒöÎG5BñbžF:¬¤±~wnç#ñ÷è}»ÖYæ„òNÓÃdäc_¨«µÉ½™³™â‘¢Ž2$À]¿Þëè@õ?)íWmõóšHägó·7uwÞr‹Èç±V$724b7)òüÊzGN1ø¹Æä2Ž_?:}8Ç9ù?†¥Ç¹Iö;‹~Ý„c¼È‘ˆ$d1'oC†<¦{åEi¥äKDˆS~û°lrÈÇ9ùŠó€÷A3¨À¡³¹²s‘üG‡9<jøžörììA<+KôÁç?2z·Óµa*HÕMÈi%mά³lÜ+îÁê0~b7x.9éQù¹*ÑÒ2ˆ˜f9çå=6žz|§¡Pk–‚ù¢ŒD'$rì@%WƒÛ'<ÆÓÖ­I|Ρ JÒäby#==ûß);”äÔ{6S’:+['žG)ràç €FòÎÑÔã`<õª¾­amio¶æä<ÊCÏËÐXõ8ãæôϽaØøŠkIbÚàml†Ýƒï@nrO,‹ƒŠç¼C®É©Ü4[¨$pxQÈÀ±ózg=)Ɣܼ„æ­©‘®£q?’¿¹sÉèLÜN=°. Xú`ðsïÛüñ]UŸÙ4¹mˆäo䡳Ç@Ø'æÈ®RU̬U÷NïÏùÿ ëƒèa$BÌ@j±fFÁ_Ï̟ǯåD0´®“Ç^3ŽœŸëøV D‚#"î$zeqÐg£Ë߃VÙ ·¼žÁ‘ã®ÂF~RGCƒ×òïÖ»-;Æ—vÿfÔ5‹’O•:€ØÚƒ×Ž `i:j1}¦\%º „Üœÿ=½:~•ÑdÜ$äýsÔqnÌÚ*KSNÞÛIÖ./uV;U9H|· ¼ãs3w=¸úÖE̱és{Û¡ Y 7 ¬ rÊsARÇ Ï„v:Éh“Bçæ-ÌoÜžXçÃÐTSiŒ!¸´?jeuLªUùCc êjˆ¨÷)¶ÖÅ·V‹"Ͳ»É  ¹ÆsÈÏ~›H÷ª0N×0+‘‡~ÐTõåBóשN{T¢[”Ha xRƒnX.Î{¼ VŠáiDyÊ&Ãôì>CŒ²*’ì-zŽš[rêÏm „· SØcèÃÖšo‘Ùã,¦%\]v©íȧ^?Zs\9”“6æ1êf ¾‡d}MJÍ Ç²)–\ª®æÈãûÇ‚:`~þBW¾„w3/É’H‘ˆà &CÏ$íR=Ц#J7l*¾ àŒàõ#½G²9RXÑLjw!‰TprCÇŸn? mÄq­Ä* ›xFˆÆ[ò8Áÿz§Bºˆ’Õ¥V•‘yÆ„ô_n†œ.XÐKÞÜHÉ úòsØg¿U…Ño0PF0NÅÀÀ<òÛÇÔž•Q´»µœ[MË ¥âÛ¸Žr'žžŸ­5Ê-H嘷ú‘žüQOŒæHϘ¿+ãqÀÁäýOEktòl·BÍÌxÁô0ÉúœÓåÒ絋sÚIŠ@r#ÿVOüãòô£@ÔU™X®c@Æa?9ý=8ãéYš¾Lºœ¾ø˜‘´ç½O×·ãÞµ$°–8\ùj®Ê6³ pé’AÇ>äU IÚ V2ìVM¾Q KwãAU!K̹˜É*!l#bŒt#‚zûR¶ä¶-ŒdõSžŸLô<þ4––ÆIBHø,cëÿÖ©.cyçŽÝ,ìIä ôçñ­[èf‹º™uIž3µ‰ÚÅIÂŒOZÖŸNŠ@Wy €1.N8<‚x«"Î8-¼†XJ¬[7ˆÜƒÓ®¯4Æ €FÞo(U.èxÜ9¬y›wF–²±ÅR/&Áœ*—$zä~=þ½©ßd‚DFgWØ2ä` ã$cß=é² ‘‚0_“®]Bã6>ùöÍY-f™d-É<XëùÐî;¢cÅVicÜÒS ö=:ð"¥[pQcŒ)Œäüœ`2AÎ?š œ dƒøf Œ¾î1‘÷Gn™9§´ÞXPAÉ=ÜûŒ1ôôéF¢¹ÙVTýÓ¹vʰò1À$žý—ìÎ…’dBÀ©ÚAãºHëÔTÈò6ÕópÃ%Ìnà§>ÙÉ㦻1‘m,Î2‘¶ úä ŒúQw°ZÃMŒme˜•vã9#§'úÓÿ²¡w?¿+"’p¥Ž}¶ž£ð¥e¸ïPeŠ,ã¶[¸ïƒ¥X{‰]Šv©ù™¼Ò@=›Ÿ^r:Ô»ôe+X®ºtJÿ<ÌXƒj°#ßåϧùÔijîͧ8?*Ø?@sSÊæSãvŒØë×sqŽ:ó@˜‘¹%pÊ$\ôÆ:ã¡§¨´C I>XÉ#wœ~xçñN+cFÖÛH¹ÏýÃà2ÈÙ_¨ÇôÅ¡ù·mb¸ùÌ£T~4y· YPÊÁ—“z}ø}j$¹–£ÓÐõÆtšo1^9Á<t5ÊIáˆ#¾Z‰7`žBØÆpFz¸â¹t“PòÍ.îb‰¾òG(®sžß®¯Ã¶Z›Ü^^Mw!…ݤbÛQ‡O­`ãÉ}MSæèMªé‡LWºV’E¤n©»¡Ç#ÿ^kÊ/mæŸP½»ºÅ#Ès!Aý+Ùµ×hìä%°1ò9Žzý+ÍEÕ5ýD½­°ŠÉN|Æ_—ÿ¯øV”%dÛdUö+éöŠˆ‘0IJ`ºÎoðÎ=½öí¼.úȓʢ Ã‡ÎÇ}?kA´xtpœÏ?ü´•ø$ûûr=2;бá˱a­Míû»Í¾[>øÎñçŸPiÊ£zÄJ)hÎ?Uðþ«áðÆòq§÷З3ëÔqøVØš+ˆ.í%ßõmùù¢äuÿ=ëÛ ó¢’k[åó"-û©Èu8[ßœ{×›x³ÃRx~ý55š;IŽÒ"&ì=Ôöª¥[™ò½É;jŽßSž!¼/±!ÝϘûŒuô?\rz»åøª=>O-¢( r§!ŽúÙü+"×_¹–³HP•80¹Ê°áv©ë޼N:Vi>wñ6%…ëQÈÏâ:S…&˜J¦ºßZ&Ѿу½'d“ ‚WðáñêåììÞ}—¦èÁFäŽ3þH+wTÕ"×tIV(‚ ’ÆLoÁ?Q‚p}®k>+ˆåµŽ_*2Æ5$2pX 7sßü(…ã¬åq— -­»‡2#. ½íÔƒŸÆ›!™°Å×q•)À‰î}rßÒ¦FH[ÈŽ)Ѥ*=~l¸úb«G ˆÁ·«—‚3È‘ßÓ<Õ“Ô<ÖñÂc`œá\¡*Ùê7Óž ©–4J®‘ye÷“}§Ž:䯿~1Ц×*n Â1ÜyŒ»GðÎÇò§+Æ]ÔÛ§•) ² rQž;óëÖ‹0mä ®d–(ãwQ‚Ùã“ÉÏNø9íMŽÖdcm Y¼¼®wdôOáN‰*ªƒÌ’•ÚÞ„¸ñçÒž¦Ú-ˆ»•›äg‘ÜR2?ñÚLdM§DIEæþ.ìzãïtú}j[míwm-má·*¯OÁ±õ$ÖŽŸrËwwþ¡[ʨó®>Qìy­è¯·Ì°(ÕŽH%È8'œ`…g)µ¢-E3:PÒÏ·'?.¯^3‘õüª Ÿ×å*µÐ(´Ÿx}âyÆuÎ9â¶tË94Ûyµ †K ò¡q±G|Åã\Òž·5Q¸ÕÆn!c³È^G® Éø­ámî µÆ2@ü¶ŠÞÓæ2jž¦6þé ÅŽGàq\ÏŠ˜³]¡"ØOÞÎN?*ªKßB¨ýÓÏ3B~h†ð6ã O†i·®æI`3éÎG>¦¡´™¡–L1ù° ?Ý-ÉýZžïy´‚U?À"b½Û†çßæÇå]}N~†¾œŠÿéALd«˜É.ÀgsÇ £Óм"bÛ—î¡Ø|Á.²1ó?¡è:äi,ž«œˆÛp†:©öôúŠÖép>Mà1'^ÿ6ÞÝNG\gÛ)Ý3Hêˆî´ä¸ˆ£Ã(ÙÀ-ÇN¥I<ñƒÛè:×?,Oe8ŽP¬à€yíÉí]:$‘Ñ–ÃŒˆ“¸#=ü³ýj9¾Ï-›Å;†‡ðv¶v¶^=ÿöjQ‡(\åX0NÁà~•ˆ, žBã9Ï·áÛËnÿO’ÉŸcù°ƒ’ÊN}AÆ?ýužq¸?\Ÿñ­•š2i£ZÅT"h–d'æ'±9ÿ#ȯÛjV‹ r 'r…Ç<[ҹĔ(Ãzr~œ_éSn,ÛƒÀîÝœäŒwê?:N5ŽšÁŸ¢üùW ƒìqÔH<Ž7w«âédV `RC•IwvA϶+‘€åÙIVÁÿ‘ìÆ¯Æ÷3mó·rç“Ѓœòp:ôÇJÍÀ¥#¤6qHÀ©E˜6ÓÐîüÄa³ž2S֨˱۲d˜Ùv:ˆÏ Q{õ!¿‡Ò­Ç GhßxÉW$qŒ`’O\õÏ¥fê—w·Ùäe >[®vŸpŽ0sµzVq»vFb•ìæu†9Uù†×Êò8)Ú:ž0wVv™jnµHä%²÷àtïžôéåVa˜‚äŽùç$u'©æ´|?§‰ïÃIˆ„óÈÏN9íÉëŽ? Ùég»,ê¨ZE¶´'¡'n~QÉãn>NõÎÜB!ef\®2<õú~c޵Üiv2]]Ü_\Ç‚TL7dã $÷O#5Îê–Ѧ«:”b±6}G9ü@íõ©„¬ì9Ç©KÊH£Î 1@s߯{œzV׆´Õî>Ñr¬¶±:g~;dñŽSŠÆ‘âXöK½÷™5èV²>—aᇔ‡9äõÚ Ï9îŽ3ÏT“KM 7vk…±QRU~Pè…LÿN>†¦[ ³%Ëgù[Îaãå¯óÅs {xQaK“Í–9ÚÃ>¤AÉ?)#·J– ™D ò#†»íÝ€x*Oßñâ¹\stüŽŠM:%–æHåVeÀ bÕîGw¹Å9Ä4ê냸ˆëÁRK}k5ÛþYäEMÄmwT¸Î8Ïû_Τ´ñ8>P¸ ·—þã8Î6àþóÚ¥ÆCæFÑž ˆÃ»†Y¸Q $0pr=}ñíQ›m>|O µfWé*p}W¯×ߊ©öû+ÈÕ¢0¯šáƒ˜öþöçÁÏ8õô©¤{7.î-¶‘Â%ÏLüù§~©Y…É#Óí¯ ˆ IQ¨bÁð3ÈàŒŽ:7ýóMŸÃö*y·‰7@ö_ï}qíUþÃÎ Æ#i8I3×8à)ú¯Ò£….¢½_²ÃrTî;v°LŸ«Ï¥?F/T6=&Í[lp¢´œ“ˆÝI#Ÿ—ÿ®Ö˜ž…^E‡ýõ5e÷\(ëùšÒA©y~\²–Ü7&ó#ž½2¸Ÿ7J%‚ø¡•¦ù¥W ?Ó…Áí÷ÏÒš“¾ádúÃOu!ø´•NQ™xôÝÏãÆ®ÅÔ;X'Ú#•X6ÂXî§ó"£Lf\\Nïn ÊÅqø1õÛVÚIþfŽÂÙн©-Èî3“ßøºPÝÆ¬Šó]$­ö†´EêÍ²àŒ›Ûâ¥ûrFžXù\¿ÈŒsÉë…ð>ýêVžpÇ̶¹›nà°Ææ>” ™²À³•%‚«`îôá°?µ(êWz~›e$·…9>Z™Ÿ8áyoo_¼ÓWÕßQ›t`ÇD¬(¸À'¹Àëôô©|Asw¬k 6Ä[v1…S€yç€NzšK{H\ÆÀ—Ž<*’~ñòz]”à ®ÎyIÉÙ gÚZ¡U#£œäsÎ9®2ß…T²XÞñå™Â“øž¼v­_½ÄVÍÜÛFR{ò9ðSýêe¼j¶ÉɃ±ìA#ëøvüzU§£dÛduí¤ÝmV‚8¶|¥–QާÓ#·ãÒ©I§ÞÅζs±ÜU³goçûnÏ~•Õè7s¢Y‚$mÊQXoÀ‘Ôg;uîjÐX‘‰tÚ¤” ! ´BÖ¹=£Lß‘4pctN|¸g‘•ˆÞùQžCïÿÖ¤Œ“‹gŒ£+ ʽ9êrGObáÛ·…ѧLÜ8E †ëž›‡^=±£Ì…›ÉrŠ ‚RC¹IéÓ~3øÍ?iä‹¡À³”,æ’r#Ø€8ÇëÇjhŒ$*w6×`AÚ¤¨<>o»ã§–°Ú0c÷@R ² ð}ÆÖ«OáÛK…Ì1Em"®Ñ¶¸ãÜpsÈ'ß“Tª­™<Œåc;¤ÜÓË»&22A»³ÏåïRDŠ$’9YÃâVl£>úŽâµÃÓÀÆSs›:™“ G~3É?‘õø~Xö ®Y–@ ÙnWÐã#Œw\Š|ñî%s8ÜB²ù…š6Áû¹ÈõÎqúÔ_k2*°q™ì+zÿ²£ü;u4úd‘7™m 1ª|£&1ߌgO΢·20áº+?™¹äóƒT­k Öö!ÎßÝ¢™dcÈç¨æ>½iXnMì œ Ò2Œ}¯¶*òi_3í`¸NÛûpsÛÓ­94;Þṙ>[ðXŸqƒùš\Êà“3Zl#´qº»pP(?ON;d“RºÇ&Õb£n~i"Áaþ?OÿUèôÛÓ"“.í‘ofQýÖ÷úÔ(_o9Æ©9ä¾ ÷§ÍØIudqÍ$oµ6„ xòã=?ŸLv­mBæ Öê=AÞEAG36Ý£øq¯5Q¬gš?1aÛ´ã÷Ìsé݇à1Rô©RΨªK0c‚ õ'×ÿ­Ò¥òµ©Jëc ±¸¹ñMçØïb1Åo—cðÃ<™çλ!¬H¨ªªÕUÚ°<#h`ŠàC³$îÝŽ¹ç'¾k¤r£ùæ¹gkÙlkÜæu¨—ÍO•Ë€#§üÿZÇ{'–ÁOÞ\pxÛøÿ‚÷5Ðj ÷WB5Ý€QÁõ= ©¥·+l¨u\…DZ#·ÿ\úSR²µ.¾çhd „ä‘ìGÿª³ï¡µ×4ËÝ=ðT®ÃžÄýÖê ]iÖÚÌK(ÇeŽ9ÇøúW"u -¼Q{häªH##?òÏÌÛßÔ6ãøšQ‹{t 3Ìïm™C£ ²£tnðp^ÉÈn¥òÚ ±.Ïá|ä}oþµu^#´1k¦VUD½E‘¾Lícò>úÜ×)} Á:Ísòœ©8ëeA?‘55ÛK©._~ÉNÅØFìä’ñ8Ͻnj:e§ˆ´ˆ€r…pñ¸íãtü*ö:éútžtÿj’<¼Y\=GsÞ²RL·™«§ÜƶÑåÂþYä¼ûÔÚ¼÷n7H™F\ªðÍÔ~X#ñ®" nxô©n÷¡’C±±ÀRrü²}yÏQX)®Ý´­s;™e8 í€×·ù5q Û»&U´±Õꯉ5MF2pc0)½>¿2žÔ"3rV&Cž)éôà÷èr;Öw4k±Rý%ûÒ•v]¤o`9ÿozßðÐ?Ø$œ}ãøü¢±o—/Ì`.cô’9ç }h(ˆ‚§n0xÆ)ͧ''ÿ].Í­’zã­}ÖèyëC%Pf‚Û‡vÅgêgvFÈÍj'`F~••¨6 ð Î{Š]J[l™ù rã5¢Ì<¶$ðk>ÓžÃڮ̧ìÒðOÈ•[Ü“Ÿð¬ký“s&Lî3í\åË„*ç šéü&?âœnx2Èz{ ætâÏíR@lul•º…®¨ï#–[DšñÙ”‡T ’1Ÿvëòž?¥s†EY߆à‘ïÐ}JéïZ@üŒ@$0ê[ß§¯Ò¹©A3|ÌÍžŸýjÞ™”î_F-…!‚¶G͸cžÙÈ«>Y"»Æ7·Ÿá'Ø6Ú­là°?(Æw~øÛëèkKN‘mõ ÛËFû‘¾läžýp:™ìÆ–¨è¢ò4»¹$—(D®¿ÆùÞ¤ÿ¼Xø+=õCZ¾UË\H6D:"/wǹ’硨õ7’} ¶e^F ó÷‘Kã>àŽ(°š-'E–þBq3y`gþYŽþ8üõÍb–—êhÛ½‹—ÒÁ¦XÃgk"µ­ 9Ÿõ²œå½Àçñ5ÀjívÄ9ùT’ÕË•XÔµiõ«ÓÛXäÝú`g¤;¤E'ËFæ=Oé]áÊ®÷0œù¶,Y€“Ç!}™Ëå¸ÈPOêGçPÛetRÀ{ƒŸÓùS–IJG’Íû˜×© ŸÿP¤¶")›;p¼g¨ôüºŸÂµó ܶòT\;`¡ ÀŽ9Üp:sÜŽjѺٷÍ*Y3€yÇ£àIëÈõ±]ä}ÄldqƒÊž:óž1Ú),w(BÇï€UAÈÏ¡Ï~yíøâõf«bi.›.©+)p˰» ÀörFAú~´­xè“2\±Ã ¿æ¾sÓ8E”˜¦Û"«´ÁT€‚:ãÓÐzô¢ÈFZhÇ—‚r÷#¯ñÎ{þr ¹­åÎÙTÆñ¶ÕŠPàeèN:zóžý+:óEŠxc–xžN²“¹¿º;g ú UR‘Ç"¬i‚]“çÂû‚Ç8úýiþb~íY eGd†¦?ÏzI4îêŽvkià|J·¦ìqÿÖ¨ÆÑØ“Œ=«£hmnüÈ gÎy#åü{wëT§±¶dšX˜Äë†ríÏ #¦•ª™.=‡i¶“Ü9 ió`<‡õxçxàWKi§Ghñá™]A"2«¸½ 8Ç}‡Ú³ô¸Å¾œÒ<›p§vz”œŒþq’3WìI¹¹óDŽIuRY¾ï?ws‘õ$pzf±›¹pÐ[ëé7ÁÚi;ˆ-\ãƒÝ¾•ÎÝy,Ÿ*ïÞAB m$ô €ðµ¹wB4oݪü™*À£Ï-–PxÚ²'C œNGŽ~lsØ‘íN[¹˜Å„Œ brA9;²~¼ñêÊ[ ²ÄXœd&:c>¹!{zW& Ö¥^Úí“rôÝ€p:ÎF>•yu«ä`&[ËÉ#iÏ`Ô}ê6W9ÔǮ۹¸µPå¶£æ ØéÇËÈ>Ùq/-d‘ –Ö Àe ©¯OÈ}8ö®U5KW–cĦB-4¯àd® œ÷'𩮥Š`§UQÚ»‰¾pSƒÆ~^+7ORùô;‹C§_,væPålÙ#•ü0qõý)Óé:|0«-«ÃI ¯ '<Ä×ÜþU›™N·˜¦—!ÆqôQœŒœz³ö‹»‰I›ˆ[˜½²:ƒÜ/ãSÈï£5ÎɾÎÞ`{«füľp{d•ü³ÅX„ùÇlq@øûσÆO^IôïŠâ#½P±JìÏ® ˆç?¦ztv=L(%¼ÝбȈ”Î230Ï'Ò§Ù²¹ÕŽ®8ò$Ü+¸üÙÏàWÿŠü*IfCØ’26™>FR=Žñ¦ Ͷ֑Š#ÃÉÔhÀnÚ!°>§4º¾»…»]42ÉGòá·? #'áYÙÞÖ*ê×¹?š–b9näXaN¹À?NIéèÖ²5höŽÎV{­çƒû|ùÍr·ɨÍç^U,ªŠq àÐt¬ù¥ÑF`¡¶È2@÷éŸé[FŠÝ‘)¾‡gk┊(ï5 8m¡;Šùë8ãÛ'ôëӚĺñÕÒI¬+eb–I72™À}2EWÔÔ\ r ˜Ê+.2I'¾=1þqY³Kq3¹üÀ猜?ëZBœw±R3í­¦š@@Yîîø'‘ïÖ´Zö;8<Î }ÕPNìô'æç¹ú‘ÅAö¥ó#ZÚÝL¥Ê©… .qŒg•ÒiÞ¼¸/w© ¶Ò|à““ÑoÃ8ö«œ¢¾"b›Ù°‚kÖùÐÇþ.ËÇO®Ö®„ùPª¥À)€Ë3cúbºÏZÇgáøc·¬i:¸X{#;øñ×µrX+×mÅT·'d`wÀíÉ?¨#>upq³±ÜxrT>‚FS!W~3¸õç¡î?Ú·{Ye+ …;@Q"ŸM¼ÿˆ÷Íø>÷ʆîݲ¾S‡Jqߪž¤kbîîÝž2ÒÛì*~WO`Œgóük–q|Ö6‹\·-\MšFUqóó˜~€œŸÄÔ×Jé̪Ñ‚_ƒÏ£§ðý+9ãšdÎJ’ç³£¶9?­D–Ó PŒ’gøŸ$þ`ž=ø’VÙ¾eŠTg[…\œ8iòôÆ\zñúR,qÈè͔ĊªxQÇáƒíYH×v“¯–æÇ&W;†=1­_E†U ëÉ@Wp=Fx‰úRµî^˜F±’íþ-­€F'œ~uTÜAp¨âu9`£w¸€?—ãR›9duiÈTårý~¬­U›HO.CK?{ X÷ ’~œRÓ`ÔY¢‚h™înOÌàùàÿ3õ˜4‹(nH a“*ÀûŒžüv?Z­¨X]¬!¼Õœ€ÌèAÈϪ0™ÍeÛ]:Ä«-ØD ´fB°zÇèò­#ђ亣¨†Å—ÌH``æiÀêXqøÇéDSÝ[*«¬dƒ‚»ðþúô¬›m^(# ¾YŒä+HžYqÜ‚Çú7àjý·ˆ-VTŽâˆØ¢Çävç·JRŒ—@Mt-»´²GÖ;%x÷ˆYqï•ëÏbGµ>;(d·HáŽßËÁ˜²O®OÃè)ÖÓÀTKlpH°nxÆxÇò«ÊYÈ23nÀdÚ=ûž¦ ²¢ÂöNÌ"Ž8¥r6— óc Ã!ô©|Ù7©y6 þ­Ç¯ ¸Ëž{Ò–óda•åþe“Ó¿áëU'ŽB®„ ØqÇüuüiî-M&ñ-e•%, @6Äg'õæ·n ˆÊ޾¹é\¥µ²ÜÝÆXPê_+’aÐãð5Ö=r3ÍD÷LÙÄ6v³Nß1ç8ñÏôïQ[jp¼`F9Î =3õíúUOJ¦ÆDê1ŽCÔpxíþz×-ÔçVÓíFà· –È 0~õp‡2™ë BB“Âð¢¸ëË@—SIgžY76⋃Ÿ@NœôïØ–!I%põb¼"{“"á€^¹'‘ž˜?¯ðúTEئ®s>+hµ+:h‘w ™H<qÏó®KTµy›~Æ]ÙedäÜàãùW{ª[” 2ŠHçs~®{c>ÜÖ¡åm»Xd` °=ÇârGóï]4çkÎ'# G 8ׂqÓ9õýNWÔ#L ®Å\¯#uÿë~õgU;gGL(Ýœ¡<x>§üã¥5ÐKn¤ Ù#ŸQýGµt®æ/±™z›n7pgúŸËüš³¢j÷N¡ ÄsmFIz>Çü*fµíÖ7unÖӑþºÊxžÚØSÎû{ý=*´jÌ—tî{|«ì <$çWBTë‘ùš!µ;J“\"7+ð}úŸ 5äº^§{§€ö,91õSÈ=‡~G5èžñU¦¨´èb¼¶«’Lu#Ÿ£~uÅ:2ŠºÕ0¨¤k˜y¹b7dùÌà.¿ÈŠœ,Þ_Ê w ­Ð{gp¤Ž‹">x0’©õ!Ièm#ˆ‰’ãÌfR–_˜÷H˜‚?à+[GÒ²|,wi÷1?¿#o൱·Üß5•O‰šAû¨Þe’yþµ „1}Ç T¹bzôéQKܱ ެ^B¥Ê)=OzŽî±\ädö©ÙAeQÅV <ª0YHÎIÆ)1‘I¸È UÙ»g8ü)¸lAu'½,™Áé ž  ñÈ”º”0¾Ù9äR°Î1ž:šqÚ $ãОiŒàƒ‘Ÿ¥0‡8üþ••¨4‡#9ëZ£‰0 Ä¿oÞKÏRx¤·+¡ åVîm…Ã/hØþ•VÈár þDM6ïŸ!û{¾¤t1ü7ˆüÎ8?¾l©ÿ ç-#ÄR )@ÃnqÁõ8®—B|Ç$Ç1ýZ¹í-<Èd–o4¡72zp§ã]QÞ^§3Ú#ov3a#BAë˜Àêǰÿ8Ås¹pƒ ©ÆA?QÓ'žžþÕÑÜ3‚r#¾ÿ~û‡¼v¬æ2 .Ür}Ž_Ç5µ3)î^C$’JÎnâ OcÁäU6äµåºˆÏúÕ q‚Ý'üúU6Q¶ì ÎÜg©ôÇê*½œMö­Û±fÜéÉsÜþít Ù£~ÆK—A+)´ ¶áÏ$þœ°üjŸŠ.6Yi6ˆUmVM«ýæä“ü¿ ~‘vlõ9b\#À"˜gvA Ó±üê·‰!‘VÚ`¼`g·,?BGü¡/}~ë1„U³3) U ó–þU-µfb8 UFzüY+‰ +æ&AàdÿúÆ? Ec¬¤†(y÷ãúf·2ʾ|cr„H·zóŒþdåN´DûPW;Q€'ä~b¶9c”œ‡È“ÐòCQÈ¡Q}Tã=>_\ÿžôü‚èÑŽHâ@²á£#‘ÎHn1þE]R’¥ƒ.ÒªÀÎøø=õQ–pûʧ˜¬J‚FÖǧ¹ÿÙªänãË0Cdz{çòì;úVl¸ê5æ0ÌÍŸ3z>üè á±ÛÉúÔLò²ÄÑÞ*Ήx zwpOà=êÑŠåŸsáL ¨˜dŒò;ƒÇSǽ7™3)ócyŒd°-Æ[8ǧqÛ­$Êw(ûÛÌV\w!qëÜdôÉöÍH‘È›#–™“„èHïÏq߯±ªÍ0¶‘ `ÅÂÔ{Œÿ/ÇŠ}òUXc~Õàc ôÆyãM¦MÑemÝ.:mDùK20 êyž¸¥i.Ây ò+‘w2äŒyî8În´˜bª%tEj+2ýÓÛ;8äÇŽk_b+xâóÊpÕçóƒ’= Jܧbúº¦ŽªdR¤”ç¯tÏý£W,Vo°šHÃæ$V(G#îÀê çïUI Y4È*d‘‚•+Ê‚AÎ~ž¸Z™sbb¸‡äÆÜH[¤÷`AvÊq޹¤õCE«‰äIK>M€0d*Äã!Èê=9®~þéZFu9dàèßN@¢¼Ô<¥Ùd, :¨Ú÷âyæª,rI&ÀA,ØÀɼôçùúUÆÕ“)v/i±­Ýê¬ÎÚ2CÎ=¾è#'Òµ€1´öìâyYÔv9^ R[žÜŒIi 6P”S äåžBGB7£¶G׊BÀöèRAö_›#Žñòœûôíš–îÇm®-–ÞGWe s9ÊñÁí®$ãÒ ò,ÂÚÞ+¯Ê¨sóuë´“Ÿl}{Ô턪H"#;B¨àŒœ ÉÏÒ›-¼¿i+•hS)Ø®Üs’ÙçØŒ{P‘^YZÇÍœq3ð±·˜ê¹ôç­FúkÆî3 Øò¤}Îx9à }pHíÖ¬¬Ó؃ $¨²¹0ŒqžxÇ®iûÞ[¥f•å˜EóW ̽䜌ƒÎ)¦ÂÊæ ñÉA#ÄdžGù{ƒô#¿oÆœ%>øVUÉyÏnrÐúVôɺ×t¢B²%Œ¼˜ã$ƒƒØ£>–· çCo,0“€ðÆZ=Ê1ÜŸÇ“T¥Ü—Ð@-Ü¿z±n•å…®BŒ!°A9êO¯oþ½O¢^4Ë9À:‚wN ¥(ét5-lÍ™¡–ØË 8Œ263¸8ï–Àᩇý&E$DB©ó†$m@7O=qW$>TÒ)BcCJ [·tÝÑã×±Œwª’ÉyÆdvA™$$lÏ çgÐÈàÖi–Ñ¡jf!›ÙàXúg#[Å·s4ªYd@ÛK8fQŒdàñQÛÅ!í¼*˜.Ì2ã¼3ÛCQê6í©@ ,*–R nܬzüÙÆñmqI/zìmû¦dš«$`(b ‘È$|Ç=óíYò_±ÎÓŽAÆp¢Âú2SÊg óœpsÈàÐö:ƒ©so!\ ÛºôäVéE6ÙfçUûU¼#Íýêçp+€Aõ=1[:^ow w𮢉®UC’vŽ™8;xŽ ÌÓôR—70»ñòFQÀs´œ/O§\×DßkØÒ@“C"©rª’ƒ=ƒ´{’k9»i⺳¥‚óKE·µ±‡Î ùc€6Áס@Oÿ^§šêK“ºo0¦9ßcèIúW¿h’Y'ÇÈ8ëXîcÐ Rý¡ÐFžtld`»”¯Ó …@Js޼ý+ÒÔÓœÚñãIáûÛ[–>jFoÊ੹'Œã§Ò¹$u˜Ä¨[/÷Á9‘vd–-¡lÆ‚ÆN:ŸÇë\ô2‡ŠÝ¥f”’IÀ“éëÐzûóµ8Ù7v[Ó)2,1ÌžS’7l\ñשÎ3íÛŒÐZÆñH¨²¶P1ÆÊ ãÒ<žÜb¸û˜Õ¸Vc+Þj(Ï$ëÀÏm§=8±£]µå›$þW™ m-"¨Ç\„$ôÇ&”Õ×0Aô7£½HB®åÙ¹ŒSǸ×n'òÖ™.¥$>IhæM¢g ’s’rÌö¬É.&»·‚Qç<( ¾iy#æÛéÑ…UºœC"Ï `v¦Ñ²zç,üÿúŽ)r' ù™ÑÅ«NöìÞRµ¸‘£ù­Ø¬˜ïò gêÆ¯ ‚æËeÄ)n®AUŽÈç×õÇZ\ÉÎ×lóî@9=[q‰íZú{ÜÆ›íA*Çr¿æO¢¦O^ì*e l5+îm0À<á:£ni-ÕzœŸ¥[fÔ-aFóRXÂä¤>ÎǧÓJÀyÙ$‘…Ùˆ¨ÎÕØŽ®ZBÿÊ´Võ7G<!o¾¡² ï»n2je]Kzï Kq`ÁY²œŠôßòŸø>ôökk˜ù*ŠÍ„.›eOýõPKskfuhdQŸ3”Ü^r¬3Ò¨Oy41«Fn ?rYOqÎö¤•Ð\»>‹f<Éâ7Æ7Çò®ÞLcùU)­$µ·*¤m"@GCüJ1ÿ}sN{¦ŒDZ%l¶[í*w“ŽÎO¯§Z¶·Ñ°&h¶°;„™ÈÓãÓ¿z~ð½Òµ½Ìì¨ ù¼Ìä“ÿÈt5u·I vå¾mÄG¯'ÿ­P%ͼæ9¾Ä¼e„…•Èõ ùš± â6äYØ0n6°sŽ?ï±IlJW|D¤NC6~éTü#?•$*ÑÆ nòL˜¹SÿÞÛ€füØ~#,Å.ÒgU/('aÎKÀ½úpç­tˆ;T¼(Üx<÷¬}Ù^âIŽÂäç$7^¤ŸçùV´²F„)9ä#?ýz‰˜×ã“S˜¨VE˶ÓÎO¯'§ãíÂj7Ûø·Neq¶%V#ã=¯'ë^›âŠËDº!vîS¸ÿOóÿÖ¯9¼ÑF«¦›˜sö¥áIlà| wþœõ®Š-[S*‹±ê:µé¶³BöŒœŒg¨äu¢Âo:Ò7%O›Ó*x<’}óí\Þƒ~úΊúuÐÙum…*ƒzqþŠÛÓn.@ȶ,œîI<~u„£m ¸íBvWb @O†ü=y#éšäîšæ}œ)8Ž>lðIëÇ^sé]}öZ'`ŒHRBôÏsíÓÛ­s6ºxX䔫2¾J‚§$c©Nsž=OµTI&¾™‚àØéÊž¸þž¼¬‹»L2E?tpHÏ{sÀV¦·jÍzÀ †* dtÈì;~gš«wEjñŒ¢1ÇžCžÞ˜õ®Ø½ÊÖ¤ˆe·ÃH£T1ÈÜÄU{´K¸ÄlOšÚsŽ:ÿŸJÙ´µ+¦Ž Þß8 a{8ëN•‰|Þ]Ê·Cßpþ8÷ϧji݃VE[¯*Q¹†¿t辟QÏõÖ*ð¸Ã”•v¼n§ 1Œ|Ýr:äñÒ°g*·lyÚàƒÓ>˜«êL– ©£ÇóÛ>ÕrD&zΉ¬C¨ZÃy4…fu1¹øÆ:~£ ðjçÛQ™Ì’S8 Áyì9ÀüÖ¹/<fâ QeVQ6Öç‘ÁãñL÷®ÖâÞ$™ ½•¹qŒ¹P6lw¯:¢Q“Gd/(¦Sµ{™‰k8÷É$“c铟cYw>³—̼… WlwïóY@|ô`Ÿjß‚ñßo› ¢³`ü{Vv»y …‘»GP[€6’ôëþsD[¾€Ò¶§©]êt±\[MÞ§9_^£‚?Jí¼/¡Ç§XGq4a¯f]Ò>9ôç½eÚE3ZÃks:4í"™²s’_‘è:‘Þ»> ÈÀ' éWRzr¢iÅ^å+Ø7¡<óôÁõÎx¬[˜ãò{ï\z¯NùÀæºWÆÊ}+ÔSý.HÀù8ÎHç?‡ùëQOV\Î{QµDl ˆñÎÑ‘ŽçßüõéY)ºÒáY[å[ƒ´ú}3ŸÆµï±"³p  9ÝŸlý9ÏøV<¸’#½q×$tÏùÿ=«¶’ÜèRðßXK¸¶üa¸dœü¼zÝÓHo Ýr>äƒÿ®ÖR%R»äÀnês‚p:ôÍvúa+ák£Ø¤„ ÿ³ŠÎ¬RF”år dió:ÎÇŸB·¹õ•s¾liN $‰??‘ks/êkž§ÄÍ¡ð£}s•FïQÐÔl¤0Áœæ¤I Œz{ÓfÙR'#k¦…+©v02rqÇ={ÿ:‚DÌd» çåÂóRJù$/O?Ò˜BHÀd¨^:õägõ¦Q "0Âçv Ï|gµ.âGÊÀÏ_Æ•Tçƒ^¾ôg~pFÓÜR°Æ;HS“×$u4¡8%€_¯ZT°ùsÈŸJL9ÝÈàüÙô h,@ëŸÕHó›¦sÍoEÝŒt®sSbnY[ îâ…¸úØr§ê«ÿ«ÁÏú‡þF< €t©uX×û.í¿é‹ÿè&«íö14†ÿŠ(˜Šn>¥«œ±‘£·u+Æ$#k1ÏSÐŽÿZètP_ÁŠ0Fc”~­XšZ3[¿Ë¸ù­”dsèOáÅtÇG/S™ê¢4Ã4¸(#Aóc 0çôúVzé’ÈI&AÆd;ºœCë]@P²®K’„cÇL ãØ`ôèàg`Û'bIUiw¶ßöx>À~5jMËs˜“N–'·I&vÜÄ(PvŒ{c'¨üêÌ·#"ÚÒÝäEpU˜ý¸àªŽ³Íi^Ç,W°Üm”)ÌLòîOe8 Éª:\M¼†=Í 1ʬ 0Ý ‚>§&¯šêì›kbk&µ³|Ê®’»…šØ–ʯ`p·>¤ñRÝym=³s„X5HÊ;60? {ÅÖÞYrG,ÊÌŽ¹ÆèÏQ´€}ù­[6ŠÆ)Ö@²vF€«(ç;Iîy©}ǦǨ]Á ÁN_ëùU[²¾b˜ÉÁ ÿŸçW»®¢¢0$Œ‚HÇЊ§2îvXó³{lS×ÿë×B0h´JL¬äb9žyVgó85W'kBÇçRTñÅ:YŠJ6á€,äsÓëþ4Âĸ•ü@ëM¡ÞDÖò‡|åe`àpo^Xþ5}Ô;ÆR7U+d2y'“éÏOǽg˜Ä1oa‚¾IPêH8ëÇ<‘øcÞ·Æ"Ù±×÷k¸H¥Õ±÷ˆ?Ôcêk9>¥¥Ð­mlÞ[$Ê‹ƒ¸Ä09 ’àr3š|ÐD?q¸nN¥ÀϦ@9õüMM.ÑÄ&}€«*`yLþ§£aÌP£”TsÝ·§?(=úçœã57êW‘ ZEäã$…'“é€ÃƒØô÷5 ˆÙXK$6 *”×ïqøþu§lîcÎìaÁvT/Loϯ8SQý™·ÊîUÀÚÎ P=??½Bab+kv2ͽ3)#h`Àg$`‘ëÛ·½dÞ87±Å ¹>ê³9玞޵·2-¬Ë4Dbx8ÆsRzüxÖ²4»§n_vr:óŸóý*£ÜRì[šý’x%Ägœtï‘üúþu.¥ Æ…ˆ’5 „çîñƒì{g¥fÇ™v¤ím¹'ß_ê*ö¸Œ†##«z^G9ÈîqƒÛµ;+¡]Ù³"-ÌÁ‡ßl‘‘Œ{ð{WGšÙÂæV‰$ýco ?s€yúw'šÊÒmþÕ1/̤pªÛqÇ8þµ»4È&bQ…`!laG#§sJo[V—!k–Vó%‘L;ó,ß9Ú@aò‘ŸªçÞJg™@vU#÷‡%¶óÊ··ÇQïN[hƒ1|¤žz© “ÇR†=‡Öš ŽI Ç(B›¶Ê 㢀_Œ{~µ%­F\ºÛÊ¢.ý«å°_˜ vÛ´tëÔg½=]eœ¯±\ä™Q‚0OÁàØR‹ûB8ˆyOµ$ó•ñvrO w«,KA4b 7ÊË*orƒ€T4gh2iŠ:}¥Ëo†V#Z('×€ c°©‘`0ìò™†åùç€S¸õŒr9§\-£E ´r:© q=yfŽ9#x§¢Ž 1aWçdv ã•Ný:Sº™Y^1,le‰™H,£ 9êp8ãëOo!LŒÁd˜ü[“ÀêA@úй®±!UQåïQ½y,m£ž¼ñŸ¥Uo<%º´¡%f2âC¸ _^‡ç­ †ÚŠè·H±Ê‹åÉ’¨/Рݓ댑ÅgÍ¥\$lƒiŒ—ätç’3Òµ^èö’îæMê’†s ã $qŒóÏLÕ ]ÄH#@QF<çl¹$só`qÓñ¢-ô [©RÚpÐ YPaú>Ñžýò=M:Âú=‡çV8ÚÄÁì9ü}ù©4¶‹ìì² b¼œ”Áç¼3ííô5$1Ö#DTbpÀ§Ïà>§§à*ž„¥±¦ñ4‰ ˜.¨lÿc÷yü­DÂí¦àÌŒ0‡Á#ågÓ®9ÍK<‘¹.boñ"° UÈãæ-œuþè¨8£–†! [ÂCné¹¹{ç¯QY¢É÷Îè@‚œ"‰ðTõǶ{æ£2¨fbޱ…så³2¶xÀfÔŒã©ôªæÜ,~LO -°ÊzGŽ)Ë8 æ+eŒ‰½VEÏᎾ©Ø.XŽI|Ö“‰žá™²UI#<峑ӱ¨•ã‚â#"ÝnYQ‚  ñïÓ°ïÖ…òÁD” `Hp&ºœ’IÚqøžOjf功h.ÕV™ žyÛÏášV˜.I Ã0‘¸‰‰À Ÿ×Ú§3!Ý ˆ»åÔÆñn+Û;FìöÁüªº’)™^LN2 Ÿh;Bž~`¼“Àð§À²²¤hòå(-$›prA yþcµú.e#a3Û¡ ¬èÀç§Êr½ùãê;É+;eÜÿHÜäç<•ný08ëLŽid ¤ïYc*è†L–ÏÊsÓ¯?…=n® rÈVGPß¼_ߌsÐö÷n”ƒMË U£œ!©äFϰÎæ,Sï\çÏ ·dhÙFKd‘íè?Ï×oÌdM¯eM¡eòØíSцæóµNý1™ã(7ñ*‘óÏ g§OÏŠ¨è)j_òDö‘â‰É]Á™ðξ Çû^¿z¾œÌš«Æv™%‹‡‰F7gø~SÐdpG­E§]‰aD|ÈÑ’v³ƒžóì¿—â$D:ËýäXòÁR7/`ƒOrÝ;Ò¶è<Í;¨À’ï̇l‘íu©i8ör>ªÂŒË´ÁP¼R2»4`F¡Èþ,`pIãŠh•o"i-Ag0lhBeºŽÊ¸ïž~™¨L)í#îóqPFB…àp»Š÷?{+±E¨%E~×På %ˆ*:ä.î¸þ÷åI²ÜȰźÉûá¨í–9÷¨¦™6ƒÌ_¼ˆ H<“Õùç¶~•+ùmÜq¢oM¨NÍ‹ƒÆî×=¹ù~´€šÍ®%V{`# fÛk.N2"—èXU¨—ÎŽ$òFl–_”0ôqvãЃYÍ3°•ý¢HJ²™\7Ê:¨ž?}*Ô§rÈ“Ûùc"eR…@ÏS´àwëåµ&†ËŒè‹åª|þ\nŒÀñ‚UP: Z±XPIºÁ('®~úƒÛ¹¬ùgŠÂrcŒåAfç'· x÷?…0ÉtÒþè¤n±%B‘ž¬:~9úÔ¨ÊÅï²y6»Æè¡*pYx8D 9ЃמŠ­sö×—öñoxâ˰ČF>ª1ç±úըʗ[|ØgE<’0'ܰô&«’L\Èì!³‘yxªIÊ¿cÉüÁ•a¹nûÎ$eÜÉc½síŸJå?·-`o‘Sp;D\ÏN ÷ÍhÚ]¼ð™•e(Ç1®åNzãð©”%»d|­7mm¨7!rg?ˆò¦Ï%èæRЮŒ¤IÛ“¹@üEAì»Ýc^A…‹!`{“€éSý©Û÷™”îl€È€:m-Éü1QfUÑÒøtÈ4Ù<Üà¸* ê6¯¹ãñªWim|÷·JF2¼n'×sÐwkYâ;xãwyòK[=ÃóÊø¾ñcÏÌ Á^1ù{žõœ=é•-"szÿ‰[]ºŠ|âÉ䨮;ó]Ìf_ ø~Þ ‹8n÷4¸pvÉÆ0s×zW•Z,Ð^G2æîó“ÈÚr:ç9 ãŠé'ñ'Š‹4"ò÷ ùK»žà`“øs]3§{F;Æv»fÞ£çAum;¥¥ÌªQ@XÊ2qÎçü;×e§Ù  à|ÍÓszâ¼Çöm»mu+Ü]—!üÑÈ#¿<ŽN:ô¯VŠ]ð) Œõ8ÅsÕV²5¦ï©BöÑœÑ]Cu#¸éåùU{˜~ÏnX*€Çj`㯠ã«hoe<¼šÆ×£´l•PÉ<ñß¿¿ÿ®³ORÙÁê÷¬ÎìG×åO¼ ûžOLU=:mZ?*Þ)ÁeÆxÎ:÷ïŽýq[zw‡/5›‘=›{El«¯`£ñ#L æµ§×m4Ø×OЬÚä©Ã4yÀìNpwS]NvÒ;˜òõg?q¡jvÖ{î-äÈÆY$qÎp3Ž¿OåÇjO´˜oœ›¯'þùïׯcë^‰c«Z™mïÌòEvK%ÊNNH8#' NyéQø›C]VÁ¯¬¢H®”•@ÿX¸äŽ8<ƒN9eï QºÐó…Y­Ñm8ÏùƘ§X].Làú?,ñŸz–H •Ì1–ŽNK¸`wÀ½P’'GØëŒœŽ£ñýk­j¬s½5;ï†ê"×®ƒ\,WžªHíÜqúû×tÓ´ª­ ÓntÎQêOn½=«ÇôMZæÒò)ãbgˆäe¸ps}±œ×¬h×Ú~µ¦Ë%¡efùevJøíî+‹¥ÌuQ’k”†îäk[œ f Ä£gq¶÷#ò±µHŸ[Õ [UF‚8ŸjÎJƒßÇ¥kj1Gac5IJÜ9Y”F™ÿ„)Ç9Æ_ÚjO"\¼‘I1fdV"9 ïÁ¦’¸M¾¦Í޶‘–Âh¤ò¥Üñï,¬r3Œ“óõ½µÜWVË5»G\ŒòHîc·´uÞ8#w#èk§ð%ìÒËèsÍg¤“(±Î;Sùr_HÍœ³Oø}i"ŸlT¶ìô zç>¿çó¯A#Žã¬Y¤W8b°ã¾G¥w6D'…nFOÜ—¿ÔWk!ÉÇÍ*öèAõú]½¨?ð‡Îzü“Ÿ«VUºK©'†T­„„¨Üf#ð ­¼¿¥bøp°ÓÛ1!ëô·“þÍsTø™¼¢ŽŒ¿3»8äæ©I 'd`(ž:Ôå=y9äóUålŒsî@ëYÈ,rAÀ89ÿëTL¤rÛ¶ŒƒÎ1‘Ö¬:ª‚®p¨<äõª¥‹`ƒŒ{p}iŒFPTF6äžßþªpÀùW…Ôþrqœx¦±§#!»ãŠC@6•'oç¿¥BKÄ‘ÁÈ5)RŠ™`ÇuVc±AfnHv¤ÐŒþÌjÄ Â3ÔæºhÏ9Ç^yçŠåõ ÖGb{{ÓŽå=‹¶#jß•K¨²ÿdÝ’?å‹çþù5ÌŸJ›Pé—({ÄÿÈÑÔ]  ðxPs‘6?瑩oLŒ4Sà~ýŽqŽÄóô®“çg…"çOý «Ÿ°ûB$Ín<ÉÌv#+ž˜Çç]1zËÔå–Ñ-—M¬£Œ‚åÚ?Ã×þùô"U*¡}Ò2‡Û Æ}=ÍWMRØÊ¨¢¸äl‘˜mƒŸ»ž}ýê²HñÌ^VuóNb2¡F[®zäŒúÕÛ¸®i<0ÝÅå4#'cíÛÃ{}—>æ³%Ó¥²[‡FŽGŠ2”‡–;qß©Á­Ü\‘TÏ,„`¾îqÜ ºãò§Éo:'Ùf"R©±7=xœýsR¥mãs—“K[[n¢ˆ9™””$–=1ÓüŽ•-ŵ彈‚îâtÝC7"2>›€?¡þu«8ŽîÉ’¶YãpÇp6sÎIcøñô¦¹ž'…ï÷°ƒ=pÛIÏAŒqÚ¯½É²[%#º•´Ý4—F“É ¼÷$œø®zçG >ùbÌd™Î cž=qþx®Ú[‰¤·¶´uþF(ë·Á(ôè4é,läÖÕÀ$„ÄÎ@u<ž?´R±›G?<l”¼Lìi¹ÁÏ'œãæÆ9E‚In°ùÌ¿?–wa±Ó§=ý«~ú‡¶`f‚ fù„‹—fqÆO?í\dt©£Ó£³³µ(’=ÛHªù1ósŒçŸË?ƒçÐ9u2Ò®/·'d~ha gia×9#¯N¹ç·&d¸óI‹”3ªã¿ï0§±þb•,âŒÈ"Bæ5æDÚ2e}zÔŒ²9!a“pûÛJ:dž›BŒ“úÖmÜ´’Fl‘$ €Œ"¾Öd ïRrå§òÇÖ„Ĩ°¨uŽ@ÃŒ‚0O 8>¸üjüˆ]$ r~W·Jòù²6ý¡ŠA–xH!•`É tl¾P.Ù¡0v*¬Jg| ·pv-òŒô?)ǽxÈãÛ¿5ÐÉ­Újš{ ˆ‚\7 ’79ÈÏíŽx®bòÊú) ÐIçÅŒŒÅFxÇR|ÇàðÛ›ÁÇÓŠÍÆÅ©›Àðª©a´3Ž¸ê€ ƒØšl3"ŒH†I$£ É'!Gèzò*Q4¾G“0/V‚Üû©Áb@=*´†hîŒï(†Ü:¢Û®î@ö¤ßru¼ *4|¯—!ܸ ü¿¼À϶zqNîÙ帙 hÁiàpX½>f½Wóî^V`$`à@$€ð@ÎG®zTfà†?<Ÿ?ÊT¸žè Sí“N¹¢cDE„ Y ùˆ6‘ â xSƒJË #¬ªÆ¹DfŒ¤um8?ÄI¬s¾ƒ¿Ê­Y"¬žÚì£1x¶K·ž ‘ùdäõçúTWšŽnwÆKá¹f8#ën}=ź§%†Uøã¯QØuüi‘ W[‰^~Pžýø ú{}h²Ü.öGC;2BÑvعq,'iŒŒ– PçŸâcßU&r±,ódH1‘x ~ìƒôükÝk)åwwi!8‘²x|±öÏZcK¨‘@Î0ØÿõþœSåcSí $á‘æão—°·î€ãÿ ñÞšóF¦78÷‡ Aü}ùúUïeŽ}èFÀ€YI.?1š®]™¼ÆvgΜ‘Ž9Ï4r‡1´&ó„ñÆFí–@òrHÝŒgÔžÕ:„þœž8¬§%Ë‚lÄѼ»Ûé,îb1¼Jv™ ääç¯S’Ažëf}#ìQE2šeVX7à¹Ûóe@=O¿ÐôZ~ik7œNñä&È€XÏ 8çÓ­T×ÊNþLöâ@” ÅKÉÃN85Îê^Z¨é©ç:„Nú«ApÈ¸Ý 3ªê0ÁAÎ=Ç󺽲IæZ€‘¨ÁrÁ¹õã§áZz®šïqGmǾ5ܧ;ƒt'ðöÌÞÙ\ÛHQÖlƒ€$R¿Ì 쇩Í"¥Ø¾P‘SÁð<~•ÓZ¤SY»$!U™Tú€ '®bX¾ß3ŽžÕ×hVSŠÙ¢,òK”ÆF22z­:Zá×Ù^âåÒX¸E‰A,3ž2²qøÝ“Ãwznš÷lã Ñ£ãvO'€3Œõ%«KYMCLÒZãOH- …7¼*¤È{žAÁ8õüé£^—M²ˆßCÖw « ¤d‚ãŒqÏÔ×'<ž¨ß•-ƵõÌR™‚¤«‘·víÄHõìGÖ¸=Vý®el¹R~èÉçíÅhx‡Ä6·d,)`¸îÎ:ãü±ÇãX6z”` Mæ–ÀpHØ;ãkzTÚ\Ö3œîìhXÛˆí¦.i†ÑÉ ä€W ߉qí_Ë\(Ååž8ùxàgßqªP_Å+ä4^im¡]qžyÁ8#±'u\†@0öóᘻn>c»¸¾zr¾â[Y´ëFR±9Uuýà# NzcŒõõéÖ½)UmU·ŒtèN8ç­bh:lgIŽvB|×$6p9=óÉëß­hjÒù Å‚œrÙ?áþ5ÉQó;ÅY\t:ЬR3ð¸ç·1ø ¯.xés-úÚªá¶G-ø’AX–Z‘Ó‡Úïtë‰"'rI ×n3ž¼óYÓ|Kš+Ý·0[PÄ ²øééƒô§roÝ@æ–ç]}mñì¼Ô%h”äÆ1¿=¨§%õ¥”K E.9{Mc#éþ*¶Yt}^KiåÑp½ü_©—uàmFHL)¬¼Ñ¿-–žyäŸò)(­¤ì{¤\Ô|QáÏ3Íš I¥BOð³äcõÈõí\Þ™ñêoÇúB-$“f<óÆryôÍgj~½ÓX)ÚèÜ©^ÇÐàžzúûf¹»‹YmåœrNAéÏ Î+²©µ¦¦©4ΣÆzRiºÃÜÂ7[ÈÙØv¶9#ôÿ8¬Y£ŽH2¼!å6ƒÏ®1žHíþ:–·ég™Ö?50² “Èägzÿõó ´ÖRÈ`%£`I_Á»©þµpºV}“MÝ"ûÐvnÆHÇNJê<-¨%¦°Ñ“W”gvÀW ý:޼×;É Ã«€Sp7¶Aã¯æ? ¹š·6ò[E¾d‘5U-‘€;ӝ俹•…gsÒáºwVñKfÛÑÊà¼iï‘Ó¾3ŠšöãÿFB%ŒÏD§|ð9ºv«£–²²ž®1ÔôíÇ4ý3SKû‹± ŒC›C/VìIÿ=«Ý|޽ËêZU…ÐÌhQÆ>dއ¯þusÂÉn5 C2»aŽãÖºÁmB« ’NTžÿãX÷zKدlà”îsß^¾µJ¥×+…ѯ © lIô®OÄ·ŽQЩ%1ŒOn3ÿ×®­w4qÎ9Ç<÷W¯-ÿxò+ljã§§¿oÓ¥—¼/c¸fk™cç;ºžI=)cS+$K´3`.~ŸOzŒü­¹º“ÎN:çÿ¯þE\‚6·‡Î6{÷ÿ?•z#“©3…ìq€Þç<~‚»XJ ˃ÃE7ójóûvf¼I0OÎ À8é]ì/…¸ËA#~y5…e±­'¹7‡ƒf™#Ì$þ mïOOÔV?†³ýŠœãsÓØ ÕÚžÕË?‰·*:l@æ  8À8ùyÍH[e›99õÇéYX²ˆ<ŒpA(SàóÏŽÕhü¹ß>•]⌨m«ÆpØ}( Næä’9ëŸÊšŽÎ̭нȧåv“œ‚Höüi |à…íC(s–` ›±æ -ó]qùÔîHÛÂäçŸJ…ÕHc•nAÀ) á[þ½s·à¸ÇS] +…=rGZçµ0EÖW##¦([¡gKv9É«®á¦]v"'9ÿ€š­§‘{Žâ¬ë¨ÑoYŽ·ýÓûBèa謄7/8IN1ÓæjÎÒ#¦”c÷ŸøºûcùV­ˆ1x/gt2ûè¶?bؾÝ&Þ5?<ÎW “ŸáëÏq] [úœïKz žÞ+ß6k©seýÛ@ÏBx'¡Îö=ë›kø…ÉQž ¥Û]ߟ\Ö‰oÓ|Zl3En0Øà;÷ÿ?ZÀFÃF@ œÃüÿ…uSŽ—g<å­‘º.n®÷5ާ*¶2ayLrOâ験íPiëòaoîÄ£«;Ÿ|ûÖj9À\‘ÐàqŒÿ_Ö¯GªÜª¢LÑ^D½#¹\àFá–Ÿ-º 3JÛÅ“K".§œW!gÚ9S<œyúVÔ1Ê›£“ηÆÐû~e>¬¤6O¸ý3\êI¤]:ïY,¥á‚Ÿš2zãzô÷Sõ¤û>§¦‘un®ñÌи–6ä#ŠÍÂ/m R~§dÖl'Ù÷ÆH#M«Žä“õɪRy[ÝÄÖÑÃÈÊÁÉãr€õÏ5™§xŠ ‰£†æäyl±,Š >„3êMtBöX¢Ä²)uêï2e¹ë…aùgŠÉ§ËMKb„qÙÀ)"@‹ —õÉÔ÷#¥BžU‰g ,¥þVmªÛÓ‡=ë]n_Í+¢&e9XîqëŸ;'éÚ¡žQFy„18™•™?ÝQ1üø¤›FCÝ#q°ÉØdd„gèAç§è*<ôÚòy(Ówn…°BÏ”s×½l&dÚ[Ηù‰–d?í>™üêªÞ'–.Avb«2rOrwŒžü~5i®Âh„yæ?ôu‹Ë ý¨ ¿gõü)ðÃsu*³ÜÄÎÀ…)¤.;ò’?AV•]¤܉#ûÒ3TÔï'éUñ-ÂÜ4wå!$™1*rÝÉË߀ç¥+ô u(NM¥ÈIíšFCº]ŒI×zÿ,ô¡oä¸,ÓGq CÕɵ 9ÜÀ.3ŽzŠì¥bG»9RíõõÐþuI¬ €HÁ#’QÂî‘Ç'p›õæ­5Ô†»;­¬›UcbJ‰T•qý঑Û$~ë2h´ë«R|ÈU™Êƒm ã‚XF2=ºý*áŠÜ!…`¶óîcîGã9-æ’O€1šv6ñÎâeâ ÓOã~1ŽçÓ¥5¦Ã0.´BÝ¡ŒaFâÌ‹>¼6ÁÏZ¯&™¨³2î6ÐX$é&ï çðé]470nòcž4Lîò¢àúç»7¦)åU6}ªM¡Š°i¥Vó†ÀeP9㯵ZœˆåG9 Íõ„E%C$yèÿ2ö'ž©ª-.w%ØŒ÷“ÐgÜ¢ºT £5ÄÑÈÅTþð½,É’:qÒ«^iv­²9l¦Ža݉‘@Îп^¦Ÿ:bIc*ƒæ)\‚‡'qÏæ1‘KöU2©ÜÊXß6N::žëDéon¢K[Øü²ØLÛý‡AÉÏ ãÖ«êGÈv76Ø™”íu“p<àsœôúö¦¥q5b¶/l‰¶ó÷dPr@Î0¢’í$ww·@äõ^ƒ·B?Î*ä,¬¶rcWû®§<ÈÛŽ9Î2?tâ#gQñ†% üú€y0 ëNúì"´þG–ÈU÷‚­äƒò÷ç>§ÿÕW<¤'ÎÛ"ùch“~‚aœò?:«"L£ÊYœ¬$ºG~}ýé¬ ¶Óß}›ƒ“‚sùÿú©Xw'@Ыƾw-ûÔ¸EnÜîÎHõêYŒÍæ´O8‡PÈrÇ‘‘Æp½S–æÚ]ÛGž6´hp éçÅ4nŽª¸eãn‰ œÑa\Šëj±Ã°uÂîÜqxÀÀ<ðsL7ËUP:9ÜqüúÔ¯ )R¢7 ¡÷‚NñÆçsÇÍ®WdŠSàÇŒg¯?‡óªDêG…]Í'9ê8ãüúqRJÅdL¨p­ ã¯ã×)¦68ù–9$.:uÆ>µ–YKtUÇ#8æ˜ó\!Û÷`ö#ßð¢K†}Ù‘þ¼w“Ǽ“@Œàž  6zóÛµ0—r6à9uý(lbÛAçŽ.iãïØ 62è8ôâ˜S›°è÷ëÒ›Øpwýˆü©ØW&ó3ÁLn6#>ŸÓ¥#&åÎÃ÷@åN3õÏ×ò¦®¹dŸ”tü©è£€{$Ë?•!òò*’œB3ŽÃŸzO/9ÈÈ>SþsVW’Pýá–? }=*ÏÙV ›qçbH9ÃçŠ\Ö®f²àÈTmÏC“èzÒ>A%TŒzð}³ýkal9Ù‚x1}àÌ8<޼õ÷§ 9B4ŒËPT·˜UyÎÕäqÓ4¹Ðù[1cù±€ÍÔà7j”e<ô¯ÓšÔþÏÍÚwý¶‘“õíJt´`P² #RJm·Ïz9Ðr³#q €Ü£ÛÚ¶ôÛÑ'–¬ËæÃÆõÆ99É àœ~´ÜâO+*èêæÑbØÄ¸Ÿ,'ýìW¬I¨ !ç^ãcN®9bvçó¼ö8™·Ä«»n0%‰ùFœœzçð®½/cÓ, åêábA #°grX\‚?ýUË[Þi›ÃK£gN$[6í2Œ;ìà7u¸?…aë:ÒYj1ZÝ2†ùX2¯Êéu_OzÖ»»–þ\ y¸2Áî“ù×ã ï´ÝX_¢«C„„Ú21°‚OÕ°+*qæ–¥ÍÙhdøžóìúŸd BÇnsÁ÷<çñ5ØßÚkxzÚî[pd– ̘è}wü똱ӭ¼I¯Ä²ÈžV>îÿ¿Ž¤¼à×m­Ê‘Z­¼hŸt|ƒLtéÿë­fí˹ٳÈïmÞÔÊÁz«ôüýzï|¬Ú: +–Xîö„³€Øê=ïŽõÌk–확àÛÆz“ùÖNž¾[ÊZQ™NF{ÃÛŠÚQU!©š|’=ËR1%«$²ˆãˆòÓ·úוÇâil´Ã¤L¾`·wŒnä`Ûòü»Vmï‰5&1[M;ì~F'$ã§óý*®· IâM@¢äù„þgçSJ.’êsj‡Ë¬2̯ I œÂ€qœöÿ8œÕ&‘~Ð|¦`ŽÙŽGOnÿN)¢Ù‚ƒ÷Tu$tþ¾Ÿ—çe­~ÓnÒG€ðçž@'ÀâºHÊíŒ$8>ûǼö¼®¦Ž÷—WKmóÌ\0ør=ÈÇN:Œ­b™1qæ'סÁaÛ8ãüŠï<¤-ÄÓj3G€¡Œ°ÎIŸËƳªùcrà¯#½Ò"ú=œ°¨Îχš/l¢¾$ñÔÿŸ­YŠ4„sHà Ñ}øô¯:úv ¤0‡î§@s:tÏÖ¹}kLÒÖÞfh§rTØËqïíè)þ&ñ#éñUN§AéžœŽ¾¾Õçº§Š®¯‰ÈrOsOÏßð­éR“ÔÊuÐ͹췌#“Ë+‘¸À=Ålh>/Ö,o)n¤º´Ç9Ý×шÈ5k£êzšï†Ú@œüåH×§ô®¿Ã~H®PK̲d¼@Ú£¨\ŒóœWUIAFÒÔÂ*Wº/^ÞÅ©@öâM­Ê²åXgƒ“‘ÔþŽ8R,\®wNUœzœ÷8ï×Ö½7SðÄ7×¥öÕ€êz¯§ý?,ö®{ÆvF“o·R4 íåÜì¹ïŒt{àzV¦“IÔ‹³lóéÝà»GŒ²Édzäû˜ôõ©?´„ŒXÉ@<~YUÜ×7CŒžÜ`u÷¤hH;‰9Ç#œsКí²9‘¡ÇrácMåË·ïgŸ_Jô_ øf=&¿ºÁº ìW9X‡nÝkŠð_*²Øãlý6‘^¥¨MäÛÈp@ÛÆR}sô®LDš|¨è¥nfbê°=÷úu“¯ÛÝ 6Üä}y¬M:òãLžh¤„Ã’d(OðñÈ÷?lxNéï¾ÔÓ`(b¡¸Ýœ~#õ­-gD‹Tˆ*àeù5Ÿ7+äeò¹.d?OÖí¯"R]w d+r;Ò¦± —@ìr¹_½ž3^{w þ™6˨—¯›óÿ>õJ}[ÎZe”»yïß?ç5~Á=ˆöÍnzv£«CkjX²ÿwh#’•yÆ¥©K¨]H¹b»¸Tù¹ööÓñªÒk2Í…Bç‚nç=ºžÏkÖòÁä+¼J;r¨êO±ÿ"µ…?g©2Ÿ9NÒÕŠù² zdRGåLº”O1E}‘Ž@#¯ãóššêi&¸ ·åN½1ŸqÏ·CUŒe-‹€0<çñþƒ§¸­Wvdû ·?¿RÙÉ< ~Ÿ‡ùé^ˆÿÂ$}<‚zzןÚFÏ"¸—‚Ã#¿Þÿõçð¯Co—ÂE{‹`0+*ý )uá¼ÿdÇ»1ï[Ÿøõdøwwö:Óqç­»Ý*æŸÄΈìÐ çpéŽÕ1%HÈ=HÇ51P¤}…E*»`®3Œý dh3xw ¤7 ŒÔ,FT`“»tÏ¥N@˸sýʰ'åPÜ['ñ©Ê'ôÏþj2O@ã¦Oò§¹ÞܰÇl~#ü*3´zz ͸Œžlt¦¶\púTˆ>RI‹‹s@ÄR0̓Í`êCý#‚q[ÁycÀ=>•ÏßçÍã×¥ rºY  óN×Ûo‡¯‡À–Ì6Áœf¡ñ#”ðåÑÀäª:Í/…H<¯@Ù+‹xúÇâkŸ[¨¬lZg\ý™QOv,Nzž˜ONµ¿{¯‚¢(ýÄ=}~Zã59OÙâ·nY™¤ažƒ Ÿî­tÒW¿©ÍQÚÞ†1•Œ’YÎXõïïNgÛ`¸ïõçüúÿƒä µHä ê{Ÿzlpy×);r `sü¾ŸvèsZŒú­ÐYD›Y¶ª‚«sÛ¶?*ï-ü¢ÛBdš }ì·ú ö®bÒõ-g·Š/™ÉÂà*}?Ïëß²µ·7¶á¯dxâ'åWyô'¿Ð ã­)_{#¢”QÊjž¶¶¸Í„‡`“kÆì8Ó<ÁÇn?Îx=9õ®?QÑ/’æFŠËýªà‚Ê{çŸÓß íTê_F)ÂÚ¡¶zœòqu¦Ç3Äy»·q «Ç\Žþ·c¨[^J¯¨O»²á¼©ï¾U¿Jv³´Ä€Èÿ3ùfUlž™ÀëŒTãJþÔ…&žßdlê«$Œ]¹8'o=>ž•2’˜¯4±M*Éö³u‚CŒ`À‡!Éì½ýªÔZ åâþþ#Y ‘†úÚ¬\êš6„©cžãÌ#y ß§È}+Õüswq"ùPXÀ‡„L;7Ôàúñ€G½DT¥ð¢›ŠÜê.<1cHîïÎYK3|©»1Œc½gɠص±k[ÑÈÙTy#*ÃÓ%Iʼîmz\““HJì/+1céÉ?ÐUÔ¥Þ6ÖõV#5¬hO«!ÕDz,ìm-­'(Æ9˜S)åžÃb8SÏâ¥73¬Ç)“,@0Ë!c8ÜeÈÇèk€´×n£G‹í$Dã•eÏëÖ®Eâ ÍòÜ2ÜÈ02ãÔzðzStšh™ÕpÖÌtÛ€á]Ìj{òd98=pE6îÖiY>yµi“`1,±·–HÊíy6€ñmÿhÂBñœà“U¡DXâ»oæ`eØ2àôh†ãïrj̶¶×)+f!¸‚\ùJ2 ùB†ïž¾µÈ…HX´F=›„ÂB½ÂoóÏ@:qM0HöË›8Ì ! ¦T8äÏRyè1×­>ETˆFèP¿Í¤Ÿ*“Æ6‡ÂýXõíH‹Ó‚E‘*…ZI' Iú‰äv§Á™yL]âmå'i\õU–i_Q öÐ$.¤ErÒ.|¹wŽdó‡æ*aÓÇqÙ.àd“l ѺpNâ[œ`ÔHd[xàeA3÷2+r1ŽWÿ'éI§ïZO*\¼Ø2\z®èˆQŸS@ÌÛ½! >Ô$"Æðíç;‰¯Ö±nŒr6_1MŽr»IéØqïžõØD‘™]íùÔvÉ}z·à :æÂÚî‹É“ËF@ó~îKŽø{ ¥RÛ’á}Œ+;Í.K/³êZyóUOïàA’3œŸ~˜×5ÑéºVƒ¬[G%¹‰áù›~S×ÓÓ¿±>‚°SGH'+0rR"€“ŽO˸’;Z»°"”'Ìmªè¬60SŽ9œeŽqÒ”µÖ,jësRÿÂCs•£›‹‡ Ò*Ä2^syÏP:ަ¹mKF:|Ò@ì†h¾ó.6äx9ëÇN¹ÈÇúö«®Ùé‘Oɤ¹±0ç)œŸÏô®S˜I¨jWr²ùwH#aÈ8ús€Ý@<ö5*’{—8#•–K5o7’3ÉÁlã×wïõâ²Ãe€rxþ¡ZBášáƒ’A9ù¹8ÿ9ïëÈÍS½·û<åT|­ìùÁ®¸œí K)ƒŒchàÿß4èþ々SÓÓ…ª¤(ä~ðŠÙòѹÁÆsõíTNÄÀ©`ã%DtýðGm Óü÷4‹ç+´7fÇóâ£ÍÝÇrŒŽCDXÀ•Ye /˜Ò*ºmÝûÍ¿/»yƒë€3H –l¶Í ÐìŠEË΋ædc€Èàž¼ð{j­Þ©$oÇÙ­‘£,°§Í&X}æ\ñ€}}à¿j@†@ñY@ÛH8Îܰ÷$ŸjÍÕÁ²¼`𛋀ÞH`v¨$s‚ª3ŒóÛ­Wz¶–„2øºw3˜šy®¦Â4²€¯p’~¾Õ•u~×!­ƒ±Ë ðj•Ä׃Ì.N28 })¶qy² ÒÚ/Ç>Ÿ_JèPŠÕ96v»L½I$‰ Œ¤nT`uù?ŽqÇ\Ó¼Kâ « ÿfGkÚÓ7%›Ž=?aÆ÷¾C`–d“ƒ×üsßë[š†î5”He˜ac•N}ɬ¤¢¥ÌÍ3VDÓj2Ã,d‘Ï;?ýóíSø²ÓHÒîáK—QgíKàzc“]u®ƒcáÛ9çi0Á ¼ã¶}¿ý^•çs oÌÆ2 ¶i‹¼¯÷¤<Çócžyô&½wÁÐù²ut¬ÒÌ=ÇòåZÁi.a›aRp{”ò=Á¯YÓgû?†ôÈè/ kƒÉ·ç]‡î$eGâgC»ƒ¸gÓžjµÍÂÛÄ[!yÎXãò*h€ êô¨n¥R‡;p½sœW Üé{uâÝz4¶Ñ—,IcÉ :ô÷ÎzWoÍûçW$ ÀÛèO?JÝñl¶Íª²Û  ¸L7vãåߥgBаªd®Fg‚G¿ž¿ýoNšQ‚±Å'yµÍÆ—t$¶|1‚3Ÿ¨8⻽][Ÿ#PO(I,^i$!ààÝÿ â%‡8 @@{öç°ã0þïÔt©,/O½IâÜ ûê<Á‘Ÿþ·ç֔ं2å;-cQ¾ÕüU.• Ò¥…¯úÅ€°2œA+È Wâ­9,¯X#XápÃ~?Ö»‹-6Ò5{«o-ÇÍó°bAç¡ôè)šöŸý¥¥ÉjۼΠM‡ÆáþóÿJÆQ’KcYG™jy·’ÑÇæ³»Ôîú…VË39;Ž~ÃéÜ*¹v²E I¬‘±VW?0>ô-¸,¨ô,ç8ïÅv_©ÎUÈpÑìG^‡qκ;Ä÷3Û :úc"U&Ï>Àž¤vþu•utʰ©!ˆUˆëÛ§¿§–ëJ¼³Íš—qÛÎÇaÓ隉(ËF5̶:½ý¬5KÂŽ m $±ÎHü9þ•ÜÃr³"ã'#<ý?ýUåP]/"¸u/(„óÏ$qøœ{ô®²ekq%´­"2õ^ÏlzòÕËVÝÍéÎÈêåŠ)"-0ýÜãÞ¹ÝCÃ|»™UWyÈ#¾jx5&žÛyå nOSÓéÿ²šX5(nslîÛÓ (<úpsž•œT£±mÆ[œ>¡£CdÌP±Ž˜ÏøT°„0Ä6m@žçž¾¾¸íëZZüa\ÈØFätÏòüÏÐeÛ—0#| t9'õàöç½u¦Üu0jÌŽ[d?3žAÎÑž¾ßNïz­xáÚ>c’>¿×üŽÕfâB¬F9À†zöæ ‰K³Mæ¸ÝèF·ùþ–ˆd¶©ûÈIŒýð7vätüÿ•w“œøQ8àÛÆ3a\¬æk˜˜ XÑQŸAÏ…w— ·Â‘"Æ?ïšÊ¶èҞ̓Ãl‡F$V¶Ñþ×åY#ûÀÆ[ÄÖÎ?Ý®iüLèƒ÷Q´Ì sÞ¢6Héè)P³p@úS‚é‘Î+2„©#r𣞕§Ÿ¼£w8#µO.N0Î95\àB|ަÊò0ƒÆzÓ6Ž˜Æ}NjYXnãœã4Dþ3S ‚ãSŒˆ¢ààwZó;¹^k©7Ÿ(Ï׎¿ZôírAÿŸÜ‹üŠóêI_™‰úœ×ffrWÝ"Tg‹iÜYy\/QþZt¢‰îˆS—o—?ÌÔD¡byP/'žƒŒr=qü½iŸ²„V ²¸!F3ÿǽncêZÓ™ceºŸïîÊî ß#Ó®àŽ2Em§ŒZy b2íÑeÎÐ=O°öàzƒXÙ·‘ÿ£ÄÞ@¼…B¨ú‘ùã¯å]]—ƒ²[˜É¿%„k³:å²z÷ YTt÷‘¤yº–:½›ª¼’´}8íØqÏ^¥\–òKœ$#ªä™ PzŽŸŸÜÔ m¦é ŒñÆŠ‚§$â<çŽÛMaj.ó“NŒÀÌÎp óúþµÎ¡ÌýÔlåʵgB$°Òm'šâXËœàù‡`ÿWÐõ®SñD÷6±“+ZÛ*ªªŽÇäôèNµËÜjþav’A<ä’8ù@ïŒ÷ÿ€ïXZ=ñ*Hº¹Ž0{ (`½yuÈÛÓ&µd3Øî¸»Óà–2 ìQˆ<‚PåO⣭sOâ6‹Ðµå"‚²HÏ18ó<´9ô&^zAõ¨."U@"½ÀŒ|».UByÚZaÈ•5¾µÔÊ#Ô",¤m†í^SþÉ PŸÊ§¸‘£B.Ã$jAY®Kº“œå™w'§NjÓÔ½Å/-¤y¦Šì‘8aqóp;“pOóö¨å¤(ÒJ<ß›s¼Ì ÑOï²<3èk}¬Òò¥ù|·b[ïb\À§N9=½k2{d3©QÛb„CœŽ Ý7vü)©\MX£ù…­Û2£vdí‘–!ç¯ê vn[¹Rpø 3¸‡\€¡'|ÄÏáSKgæF ¨ y»r9iXŒ0û¹Àöª?d+&Dq¹ÈG0ü®½ÁÝ2=OL֊ıewó‚ÃjÒÂ_,À¬^2:®a¨Ç 5ViŒjÉo”Ä|ß0E•ŒüYˆÀîx犂îÕ*Ì!Ywà(  2C0L7^¹À¨§Xgh¤UY$ªBOÔ®ç¹ìzU¤‰¹5Ƭó3 “`¹œÈý=0žÃ·aÒ©‹»Ö‘U&–WÌT ½@À'øâ:úúSÙ'û?ž•‚!ˆŒçî’¹&‘¡ñ«Jà„ÁÁ*[¶TesßÜz¤‘.åK‰$(yÈ“”%Gôoò8ª­2ïázr$ ºc‰S1²YŽÖ 8lû0Æ}Hüª9mdŒ~dS’À’}ãb­X—s_CÕÉ’Í(^v®üsÈüåVõ¹òŠªÛFs£÷õRy>™Éþð®i-¦\‘Í“•)ÈÇÔTÁj1•Â;mÈucR ã¶3Ž•‹šå©»Xb8óÃÉ8äu_qþ{jåä 5´l»7³…öéíùvãŽrk®œ`‚g#qp}xRr8ê3]™imk “¤šU 3HÈÁO b¤þéÍ•µMèfEáÈpei|͹ޣ0NãsvãÖ­ Z¶!ï_žVdÝô\gôZèV´ ˜âeïŸ(=6íàà}樞u‡VÓIJ}žÀ~bÛÂ/# ®8Æ;uéY{I3NDŒxü9m;âÞ?•‰ZBK æ®Ç¤ÃÇû1S$eP§=H ™c]}ǃ|÷Sö”~F?v©Óè9ý?´<&åúLQg–Q1'Ô£§`:VN²}JTßcˆx]îv‚%2“'™4,îG ”`{p=éUw- Lq:°oRί=5Ù\ø^é QÂWRHA3F¬sǯó÷¬5½Ü°\4ä±;‰20FÆæþ¦…;•Ëb“¿™ß2)¢`¥QÙ˜@¨²:õ94‚™¦p7H[; ¹˜ãÊUGlñøT²É¡wÜÊ“ÆbÓnóO×ÍãžÃQ"¬Þa–(Þ]ßv4g¶~Fß\㎴Ñ%rÏ ol*6É3¼ãæì:Ôí"G`Ç"#Ž"‘Y!ãÐ/-ùþÎdh§ŽÜ¢«2BªtÄ §z¸-í<æ¶¹ŽHnc?4SŽr Æ:zóV!Óìñ¼K žUƒ`õz{Žj¹¹LÖ€,Ä™V4”ü±³ ¯=Ë0lútþu5¬Jï< K, ïXÚFÚI™ÍjG¦Á©CpUXåaÔgÓ'ùÖÈ´Óãy$q²žCʬÝ;€™52Ÿb”FíRG˜ ¿KÍÆ?ˆ¹nÝÀ Û[ÉpË !$Û÷Õ—–# ±uþ~µÞ*ü¿¼£<.}²NMTÔ-`x‹µ¢Îç…3Ÿ§ÉÏãÅJ«Ü§hKÚ…C±m؆ +ž€ãËÿо)ûXyç3‘æE)¡ö5ÒA£O,h]ÖÞ Äkæ(ð¥_ Ú P^â(èdëø–<{OÚ!r>†=¶{¨ÚÄøÝœò£“†nÞØ÷ÍIuáRò s#$0eAÇ~C§­u$F"TD*…Âmoä E;­¤O$²´h£Ÿ€=²ÿ:ÍÔ•ô/’6<ç]Ð!·²¸wpг0P¤Î^üóŒqÍdGáËç–ÜÙÇpóÈÜ+GÓŒœñÓ'é]ï…oOˆ5»Ëë¨c1CÇm¹wÜžs]¤pÅo¹âUVîb¿Çÿ¯[:ò‡º÷2öJZžv¿uyÛ9qÈw8^䊗GžóM¾Kq Ü»:‡A÷™FHç¿Ê~¼ô5Ñë1Ót‡hî';ת¢nÇœqƸSX·“]Óµ òGn÷jþd‘œ…ÁíêsŸÆˆ¹ÔøK–;þ&›Rk(Ø1…*ÇsÏNW Ö—o 3¤ŽÀOo¥wW>&Ðî¡,þ$PI< Iz ÿž+ûsM·ôëW¹™G—¨û©œ·Nç¯5tÜ¢­b&¢ÝîI žûK©®wEk{ŽGpªûœë]†o¢¶„éîÊ’»cCÀ8ÚÀwåÏ<ó\-åİ\[ÜÝH'¹yw—h(;Ag~ñÒº?çSÕ$Ô™ñ1mHÊ2üžçÓëÏ55#îÝ•MûÖGvÄ‚N=ø¯,ñìÚ¦¥/–¹Ž¼ÃŽqÁüõ×¥J¬êQ¸8=«—ñ%”z ˆ‘ ÈÉ/×óÏ¿ô¬h´¤kQ]y¨Æd²±‘pF$BAô;‡þ…šõí$Ö|ÌaŠ<äŒDZÿ>•åòö± 3¶;ƒœœòʧÿºkÔµ-fÛNÒ­®Üo¶uè —šÞ½ì‘•;jÉŽ¦°Eà‘’'§r -ôôü=…7Q׬¯CÇj×xuÚUúœñùóéÒ¸«´ÞlÙ‹s‘ƒŒÑJŠÞB©Qì‰I&=•¶ö#?Ÿ?çòÍ:¼Ž´&I=O?¯æ~)ghž5EÆr–ùOóéœöÿèã$äƒ:cr>ù}:®ckНµsŒÚ8àvôÇôüz–<„ &w¼à`rF?§ªŽ´ìev1Æ:{g¿çÙ%x°AÉxÀèqüÿÃhê†v¼7zs[K![b-Ì03´}ÏcøÖ¥Å¤KkÉ]ϘŽÃù× ¦ÜO sÅnTa™ðÀœŒŽ‡ŒtüzV¼zܦåsãåÏà1éùþ8N›æº5ŒÕµ45½*=f#ŽåAb÷nÀCú â£CÂ9cØÊpá‰VÎGn†ºy59Îÿ%T°ýæZ\õê8õ?fÜ[M –F…]«ÓºÙõþUpºV{+=Q×øRÊ´Ñ8UÜÛ‰'¢‘¸c‘Ž9üëOT´†êÎEtCÆÐ`uÕ‡à˧o´Ø¾ ˆ7£mÀ žHõ÷ôõ®žîc ˆ”ošPÂ4^×=€®YÝLÞ6p<¢âÑáš[uVïmnAû¹ŸO^‡­%†§w§`Âä¡à¡ä‚3ù~ë_Ò.-¦ûLñÄEÙ¸HHBH瀧ñÁë϶HØ¶á ¶AbîÀ«ÔÝýyü+®-Ií8³gHÕÉ,[Œ¸lwéëŽ:E;R ³4‘Rm#õ鎸Áÿ&°<±WŠL%IáIÏ=uÚV×Viq©\¬0‘«^GÊ:ÿõ…L’‹æ*>ò±s{$Êãpe8É9ÏùÿëÕxå3,¤à’Û˜ãžþ¾žžµ»y7†ã¸1[A+J‡Q1þ¾ž•ÏI4I)ÊèHaœ÷nŸçµ\ú- ^k_,œ©çOùü?‚I^ç ¤c ïלšÇÛlìNå㯭1$ºu!h9ýu¢DÜ–Ý¢à jù¹Ï|+½º`Þ^|¸º}V¸[hZ c˜î““ÔóÅw:¹xdÏ 5¬*îiìÉü6ö@¯9oýÖ®äôoγ4xÈÓ#  ÿ–ãZ{ sOâfñÙ¥pùcÇÖ¢82Nr;uþu>žr8À͸/´€:b³.ã 9à¶;ö¦68cÀ=séO ØÈ ã©ÅFO®qœ}Þ¢•ÆBð«áˆã=E6àvôÏó©ñò“‚Ò«¿ ;§CHhaØ~lGOåMnNrA޵#’#àtáß8‚‡¶<§$®zïn%#Ê'9¬ ÔË1çÒŽå=‰,I¸ª>/$x}Ê‘*¾õ~ÄóŽ8¬ÿ“ÿìû@Ýæ'?ð*Ö3ŸÀÉ5• á½Ìqvÿwü+Î5wÃqŒž¼õÿ?Ë¿£x…•<.0:ˆþ`+ÌLnÃr>Þ2ys\ÿZêÃìÎZÏTs‰—£<ãüÿŸÂµ|)¤Kª^gak<Í­ßìñÏ­cGçUrKuôôçší<){kk¦_B‡|‹µðç89>œw­j¶¡î™A^Z›Æk;>5@|®Ny'îõÇSÓÓ©¬ GÅ73åµ¶÷o;n.=Bò=ðÕ‰ª^µÄ±07c'Œ.sÈÀêp{wàÖkFÍó>o+‚„œàþ=¿•¢–².UȱuªÇ0ÞÆk™úy³l(é߃žõ˜×Ü6ÒØRGÊ£ÓüŠVTT ŸB#æË#Û=MIl˜†ÝŒpH`qøÇ¿JÝ$Œ[lhƒç ùçh?{éïÓŽ¼Ô«íÛ Š¥÷pÇCÏ'ÛëL2+y‹½Pã9Á!›§qž}¹­ I¯LJQ<Ñò€«†o›9=Éë“Ø °%q4í âáKÇá¬r1“Û=#ò­û»›_ ØQ#}Cï·ÿÞ9콆=¸4ÝSRƒÂ–æËOÚÚœ¨7Ì?傑е¯\’x®JšæQ!Ý#’Hg9,GQïúÖjóÕì[´t[“E´²3rÇ^{òG¯>¸#µP é089Þ®M!?"Êà ‚ź¨ÆÑü½;tªŒ¹$íÂã8ôô­Q›neË;ºg4®êßx|ÝϯéV Ц"â2à 6Õ›P±‘ ˺°XÙ¹VõÁ$ t¯4Yä7ÊIÇÌ:ÖÑ.¤±áo”:ç‘÷‡uÆ2AãŽÆ³«(—NM3¸¿L½Q¶-ã,Ãß—ÿ«Ÿy§"Í¢j7‘näÄê0G©PÇr+³³·Ž;wµÒÕ\y·o–ÜÄsŽ~cŒ{žÕ›¯Ú[iÖmÄš‰<&òÆ Tz}{×jkc¦Qº¹‚úÅöž[ûSDˆîšk"mänù!x?ˆ«6ZÆrè-õ?%ˆ ±_Â##žq"Œ~cÒªÛŤjƒcWÓnDe†&fV#±rO¥`Ü‹«i•®R Ȳ›^àv5²ŠzlfäÖ§s%¬¿e2½ŒN‹Ÿ.KXÒd žÌ£åã©"«›[)cÃ#Á‘R%A•èGgžäŒÕ;Âvךt¦‡w¤´©¸*ÈXg¿úûÕ{“â‹-ªéVº¼1p&EÛ.=™yÏáX­tLÓ¡ iÑG8bÒæFí+ŒmÁ#ן¥Lš]³4eдŽ~þü3´Y“8é€:ã?JK«hSÜF¿h¼Ñ¦R Šå|ÈÛ8,>n¾õ}¢¹ÖîÙ"¹µ,K=•Ã7'Ø$søŸj§u¸“EI´]:íÔ€%Œq±•\®2I'h$ýO½©¿Ù’“Ì)dG‘x„g9!×ÔúT–Þ Ð£·š×U‚úÞ䘭ʃ0~^µ¡¡á¹ai-EÙ¾\K ÜØÿh cñ¢ó]ÂÑeì›FË,$"¡dTq¸†UÈÏLûTSx~Öàcì$‡…¼aϸ.? ƺÉ/¼?¤Z[NÖÊß»So¹óëÏóÏ5m¼M£¬+"ÞÄdu&8X„rGðàô9õ¨çžêårÇ©ÅÿÂ(˜ÚHø;TyXÝž»‚¾WòϸªWz Á*¨¶DS‰!PX…QÔáYçŸé]QñI[ãÆžb#çI†+ýð.W¯ ׼I¦ZÛÛΖ˩I0ÝíÅy ¨×4Ôê^ÌV…´9“¥-RHv>S# aÏrÀÏ`qüªìL¨‹3Xº2§Êl#¿}k{þ$]KP62ØÁ æ=çÉ'oá‚:~"ºèÃYc#Ç¡üF}ª]N;¦’ÎKXcyÒSÄ„€Vê@8¨f“WhY.4ûYõHæÿI å5.þÆt–ªA ¸²{ãŒzô§ø:+ æžâE§±åÔ>§×Û€?›qÍ|ewZeÏ‘/ !d§ Ï#ÜŒýk™Õô•·–K‹Så\Æxa€?¤ñŸ¡ô­“ºåd8ÛTz ;GÍ€;{T3Î- ýãÈvƾøÉϰ5áÏJ6‚ñR;ˆÈŸ”ƒÓ¹þu±v«ö÷EIŽêÝʆæý?ZÅÆÒ³4½ÕÐó Ó®ã|Q½5Ûú‚ZHå“íKo8Ê–GUÀp:ýÏOò,§–Ø`À¯l½FeI.|YÎ~îxêy?…$GˆtÕ`®aÔaŽ@Jîi?Qß5ÉA©^X]5¾«i:ÊTL[òÇ9ÇC‘^žPvÀȬý[EµÖlZÞê<‚ÇÆJQW –Ò[(ßTs±\ÚÝ᣸‚L¨m¥ä{nÚGýôMiGy$h±Á.{‘Ë‘ùÀ¯(Ô,o|5«Ihí\HÍÊOQ‚3Á÷ǵt:N¯Ûó%z—qæu >>¤çž o*:]= £S£;Ó40âV°# UØzòã•A$r™$UÚ¬ Wnß|œçß8ªÖwQL0¢HÙHBTú6ÁœõÈ©Þ6û0¹DˆÄ–+†ôûîÜþ¹“ê[ÄC6ô`r~i†=²8úŠ”0VàÏ-†vä(ÍP6© ùjòr¹o³©þ ¿ðÔæBªÆ(œ2‚2&È_¡ÜþDÑ`¹q·¹c£¶?Õ8þf°i-._ºõ9WÒb»Õ/ ·-¤G.Â$ýÜjxÆG'¶=y®ÓÂtzeÄ)9”3sÇlïÔ×1y$¶š½åËKù'Y"FŽ ¡½8Áÿ>Õb,GQ•®GÄš|s B‚I}{q߯¯¤RÄJö‘U(«]f®ÒÆÍ¹‡AŒð:Ãÿ­N2Œ)l÷8Éé×ü?жÒÄÆê"ÁBɼÿ“Ö©ÅnMè…Èá¶~œO~üfºîŒ,ÑnÂ1y1FÐÙf=í×éßׯ\ÚžÂ?/ ÉŒ “Ç\÷àžFzgŸ7SœøõÞ°’ #iÚˆXÃ<€O¶|g¥Qû@”³ C .pðä{}ZU9â/0#íÎ@#¶S¸öÀªyGrx/&°¸KÄýÜÃ'• Œ­÷xÇ~þ•éVWÞEm~IÅõüOJò„”ÉpͰ©·Ó§vòã"»¯ Ý‹'ìåÉžÚO1A$™#$Vÿʼt¹¥)kcǬ*Û+¬2@8•¬äIÉû×4â•æºŽ%wQü@³gn2sÐzÒkšýÌöh¤dEp8ÍAm(‚õq(8,dtç/n¿þª¯ªCºW`s—;q铸Õ$¹µnÄ#Ìc’Fyç°ÿëUÄ…fFÇ/#"¡°€l TäqŒ‚}3Wô]BçJû‚L €€sùqU/"P¦6Kx¨Ù(ß3¡ïü¿*E‘\ÌøÆäÜ=}ǵSšì´ò³ÈÒ $ÞFsÇ_óøÓÖê"¨¹)‚v¨>ßþ¿ÿUvËÎ΋hÌ‹œG·‘ì í5¬7‡àÂ>þà× »îb$áTîç×ük¹×ACŠ>ŒH’“ý+‹XšCf]ÑÇüKîÆYú¼jößö›òª:B…ÓbÁH'“דWr=+š[›­Ž‹åp2G'&£989çñMY ‘þpa·¾ZýöÝÈ?Ä~•‘b‘¹pÝRBT»猜šœ°cŒ6ÐsÒ¡$ƒ’Ü`õëøR ‹€}yãúÔ Îì ` ¸æ¦™²Äwc“š‹¨ÀJ D|Œ}­@çƒÀ©ßnHøªÌÁ™W<2{RH¢V$A€ÀçïX—‰„'jÚex8î+"|IaÊçZKqô Ó¥ÞpT©þuŒ|ô.£fÍrGÕ/·üSLySk fŒ¦ýÖMâ@à m*áà8ÈÀ ¡N Éî{ôÿ‚ªäÛÓÞ­Á9¯%ÕNÃèIëùSbа!ßsq°¶Æ-ÀÉÆOluqW/m-­­È‹Q‚iC*”‘Ó®ðB÷èS]€+gj ô<€:õ?OÇ5™å³FÀ«tãœ`Šž¥t#¸¶1ãÆx$8ÏLuÏåSÃ"ܸ*ãcýÐzuÆ=ztq,Ð…B<ÕûÜÏp õþUP†ŠPÀäd0õü})ˆôÿ kóßÇ¥iÖÅbŽ‘®@êTr#ëÓÒ¥¼ñ¦¦íoµ×–Q¿yÏBäqïßñ® M×.´P^ÛHTL¸p9 ž ç=ù®¦÷5ݕĶÐH™ò­3n xÇðF+’tÒwhÞ3mX¿(fŒÀ«*üÄ© 0r1—ÀøÆzy¬ ×W¾@ÎqçÏOÇò­™5F••‹gd’£0ÇBYPzzÖ&¥IS‚3Æz}O¿ § ÂFÏ…|C>$Ñd’̨ÜÎ#Æ>~89çJì5ÛYYù¢2XpÁ¾c“Ù@ûÃs0G<â¼£I¸šÚæç쳈äu–Æqœœgè;v¹m¨M=ÊC{s#‡cÈËólÇ#¨ÝÛ¯OЪ”“wÍ¥cRïÆš.­¶=OKW\ãsÁ´È±þTË Z]3]øgR–Îà¦c‰e;I“‘œŽzvïQ[x@Ô‚Çauv²»”O3a2`|Ç ~9öéV4ûô)ÌNÞ_—>ÈX£œch*žùÔ»/…Ø­^ú˜×Ú¾«¦O%–½¥¤á‰AŒ¸ïdpßR aÍ6,…£ jçЕÇâ¼㢽:âHî k…$å¬öÅ™Aã®æ¼ÿUð›,²M`­J§p”AÏaéÏ©>µtçº8¾š‘E6¨¨>Ǩ5ÄJ›B± õÁäñÉêZYµV+µ¹ˆ˜v©'¨ÎwwüëD–ÊåÒd1IÁàƒýkJ=^â•%óѹtqŒý{~³c+÷%‹Ä·6×*è¨Q#Pë¸`uàž 9銻Šm®!Ý,ð2¹t•¸RHÉ ô U^ãO7]Yl 9x”¶>P? Õytý>áZ_–nÉ"‚G°#“ÿ|ŠMEîŠNKfu0µº$SYN£c"Ü#wäa‰ôëÞü Ù°Õ&³”Î×O-Ð-ûYƒ8.ǃÏÊð\Ã,VóÛ±H^go¬î‘÷[éøñ¢Öñmç·O5‰D ÌŠ02§zœŸCŸz%Ñž)'O¶–E+ìrõ¬ýš¾ås3×,¯!Ô-VhöÜ0VÈV‘Ö§$¯8׿ZnŸ6›pí½ØòÙLŸ)Ü6‚8ÏŽ@ÆAÿ Œ>Õf²·¹¼ÔcÂgùC½³<þµ—²»j:—Ïey‰{hgF"GÈå BãÓŒóõí\æ«-Ì'eÆé0x+Ž9ë݇ýô+¡T†ëG‚þÕ É:îŒÏ|çéƒùVF¤R]©5Љ×d·-šÎ7¾¥ÝXåõ *LOKÝìcyUþ5÷ôö8SZ¾ñ´w¾]¥á+! d–!Kß¼N¢9³„aÈ'Ó¾¿ŸzäÀw¤gRϾ3©ÚŠmÐG÷Bò>œýk/KÔ-Ö5e¸+rŸ0àòùzzÈV”·-åiЮܳßÄ9`A'’zW;Vfɦ:ÆÌÜÈ€«"/ÎÃÉÚ0Ol¯^:òyëY^5Ú·6 aR5 ŒÿvükªÓ-VÚÐ(ʳ|Ägº\Ï­͆à6ç O§˜™Ïä(ƒ÷Ф½ÒÝγs-«Kl‹h@g“p'·_ó‘\Eµ¼ºÎ¥wwy$…Sr£(/’>ºÜñ·T°²*ä¡P3CÇΪYÛ­Œ(GÁw Crr7p:gŽEkʯb®Å]Zââ5òá 6F$d‘~iU?Ÿ®N+}í®¬4ù¢¾s-Ĩò¶òÞBqÓŒ—ת2À苸¬Lce]À''8ãrúõÚ¹®KPºÔõ MOq-Ê/–>X(ëŒyé×5j<ÚÝŽ«Cs&•d¢2TBå7`Ž8[Ó=ÏÒ¯Û§š±£J¡<Ï™p2A(àXÐýErú^¯º%‚&‘H@dJp8e*yúõ®–i¥¹±M4¯Ù­dÏ+Ä’“襆ÁÇ~}DâÓ*.èÀñ…®÷‚êÒFÛ ’qº¹õÈç5ÖikýáO´žWB—Ú3´wüë•Õãt›lò[Ä«,°bCã%²ˆéÓ<~5èpX¡Ó-íIÜ"I=ñÇ>üR¨í‡«f†íîÚçR½/¼ä¢·p3Ï~µÂëWßmÔnËLëJßÝÈÉÏåúW°¼±”^õÇWꨣ_UYcqÊõb $úÿ‘éNƒæ“bª­‡êA¡ðÜŒÇíq&p;+ž™þuAï&±¿YàÎYp§Èzb®jø:B ÀñxÎNB·QýáÚBÙe‚O-ƒ?ßóœgÜçÓ©úŽ•¼vÔÉùzGŒ¤’/Þ‡Èzg$qÿê«Zž¯ñóç…êzqôíþsç0¶Ö£½:ÿŸÂ¯#‚/Þ#sÇ`O¯§øRtbÐ*«3^ÂeÙ<„ (ã¯L‘‘õè?JŠBŸn†`Û¾W  ;dcµA5k ‘ãæ$ Œdwª‘ßJo"’Y(nùçŸjµ{“Í¡ÐÈá¯6±-‘÷[žséùwϹï+d¹*ä)9$g-“Ž£Ü~œŒŒV}Üm4ÉSø{{q]oˆ±ýŸnGBÍûôõ„Ýäb¬™KÚ4«^1˜Ôçð«xoAÿ|Õ]'H´ã'ÊQŸÂ­e}ó®i-YºzË·,ÎO\ÿŸj@ë•RÇ8»+äsÍ /ºcŽÕ‘ ²nÙÆOz¦å˜ŒuÇj¶Ê¡r}ÜžIÅ@O8à÷¥a¦W+‡lçGÿª¢É$–ÀÇjžQ•,G¯­Bà òF:Ò’B’sõ¦}æÊüª:â!Q¸’OÁæ™Yœnã&˜ôˆàçƒÍcÞ±8íÒ¶$ °7jĸ$FùÍ(î_A¶ƒÓ¨¬Ï:\ðÓÆ1øšÓµË ++Åÿ6‘½Âÿ#ZÓøÑ•O—|e£*žò£ºÕË¢#ثȧqU s’p=ןÑÜ]?Œ[:T@äî˜(Ǻ°¬O°m±ó! ¤¢œ Ë»ÉÉüúzÒ¶¦ýßR8åt ¡W,mÇçÓßÔU™t52#¼ ›ažøãyûâ§·O6r™rs‚sŽË}zúZñÇ·i‚9Îîþ¼~ dwœ¤ÖĨèb'ƒ¬<Æ–If*'o>çøŽ:Ô¿ð‹éP¹&Ä|Û Ï=¹ÏSÉϳ ÝFù ÷+·œèW·Ó#ØPv¨R‡ œŽ öÁÆÝÁö¨ö“îW$LŸìK1 }š%X΀¹èsÎs‘õÞ=ÅJ¶«n<ҼʻK1ØÏÿÏ#Ž€°ö­$y·ÎFx?^0~»¹©#²º.ϵÆ3»'`>çüþj9ŸV1.àY.¡¶†!Î]Blà÷áyáXd§ë\¯‹ïëWŠþbÂCg“î‡@:~UßÙé‰äK©]^$p"3”Tºèp{g¨äšòkû¶¾¼žðïÝ;’»˜±Ça“Î@þ•½zWìeWEê430rʼn'®3ô{ö¨®I2NÞ‡ž£Û9¥?ºˆm$;|ÀƒúgÛü(²ÁJÆÄô, ®«n9è~”©íëÒ§«'ü{«ž~Lœ7äsZQ®Ÿb˜»$¸ûÞL`ü¾Ä“ÇÓ¯¨¡ÊÀ‘˜®á•¸;úT¬Ûâ^~SÀ'¤ûVƒÝÛ\È;KXI?u™¸?\`õªe¡HÐàªcÓЃ×ߦþC±šŽÑ8#?‡\U©$Že‰'©çŸS×>Ã¥G,N|ÕòÃd£lᇮið§a³ÁªÜD‘áŸÊ•€VànçëÚ·t]NM2àÙK¥¹ùyNùçüàV ºÈô ÈÎ9§Ì¥rr9R3ÇéïS$žŒ¤ìtÓ]j——ÞPžáØ}ÄG8ÒªÞ¼q/n¡wôC¸À U;rH"•¤ŒÇ»¼ŒzŸZ§",áFIç CP¡¨Ü» ¡Y♳ЇBA®*e»ÌlJaùãsŒþ'Ò³LcnG®9©¬£f»Œð` ô®}¹«iX”ÞÅÔºhY‹–ˆŒ©’ÁçÓ#?…lYx²ál¢°’åå·àÙ&¹gR-YF-=M|d€HÛƒŠà`xÀàÿ,{WD©6Œ”ÑÝC+Å46Æ]Bœgœù'óÉúŠžK˜À³7*e‰äMÅØ³ãpmÀ7';qÇ1¯?[¹RHœyLÀæ6Ú9ö'G=lV¤w÷z]˜•æešQº·g`'cv8þRsÚ¡Ò-Lê`>v§¨J·–#·fEÉÊ/Ì~éèI\îw­M4È&Š7gMˆYUAL{à:€.½Myä—M€3´1¯´¶OÓ¯#ü*x –âædk‚±©>|&PGÌÞ½¾:G²îÅÎuÚªÂÖQ}¬Jmc4àu 䪌¹ä‘Œ pIÅwzWœt»cp?~ÈÇP çó¯)Ó.T×´Èa‡Ê±‚Aä£)%Žá—oRG¯W­´ñ$›E zØÇùÍaYr¤i;Ý‹3ˆãi¦Q^Kz±Þx‚iTp¥ˆSœ’sÐqü½:÷ëüUâA—,0 ³€Nîz½ÍyËZÆÎ¥å Þ©*ü¹ïÐý1ôéZPƒI²jÍ7djë›}-2 Mq+La=OmÅÄqù<óëϯ_Ìþ=©5k“i–±‚ÒÁd®{ï¹§f%ÝĤÂ%?Cœç°´c¦¦M»‘á„ÒylAØãêp?ÏéVa…¦$”bG8e?à}¿Î U¯Ø‹ýv@`vã¦{VŒH`mÛ6¸äü«ÇÿÏõͶIzqvÛÜ@ˆÁü*ݰü„¹à2qƒœúsÍ:úä5Ãözà~_çò«H–ÍmYíä;”²‚ n<§­M&¨×h"DGA–ííŸóéŠÆ¸œ€s£ò£# ²Þ”r«ÜžÅ¨ü¦`^Uêp3íÖ­¬Ë%sΑÁÿëvü«5^=ª00Þǧù?JXÙÕ‹DØÂå·ƒÛ¿Ö›AsMc!„PK ú`ò1Ž„ôý;ÈHÙæ¿w%ø=¾\‘Ž‹×Óœtªk“xÛ°ÃÆG¾{Rÿh9d_1I ó9ò±Sf;—³náŽpÛX€s‘oþµ2M<ùnÁ‚0xïýj!©±+yòþ½:í--â]:0̬›ysÈ'<ÿMD¤âTcÌr2[ÍoY €UÈ?)ÉÆÞqØÖ|÷ +6_ ²’:g¨®úâÂ)ŠÆ21ƒŒã ûLõ®/Y´[;£å—õü¤ÇCÈì)ÍI„ãb©“‚Ä Bïè –P0Y¾aóý}Ô{Ô\:àËgè(h,úƒ»±™cÌfbÍÐ ~tæÈ+“ן¼0ßD®(Ü@=ÿª—æ“k`þ¸þF‚Ë9 dº‰3øqŽ?A¶³Âg’Ë–Àü‡4ásclÌ#ˆÝq€_åSèqÔÒ­†8HÝ‚Þ#$g¯ùôª€{çëÖ¦º¹’æw’Vð°À¡"'•bݾ˜ªè&D;NéJ$éîÓÖ=ÑÊ㕵c§Ã¬óD]™CÁ÷ä ™Ï^4¤ÒM–­<=ut…¾ÏpЧ9pãÊïîs“ÀŠîìlÛF‡2±³¦Gó[1“Žžßcéš„9ìÂD‰€E†f9ã;Cœò@Èk+Åv·)se=ãD‹<@Ã|4|ä–¡Á½1\²¼åÊÍ•¢®Çñu½ÁŽi%K‚ÛCÎ0Tÿyˆä㨥ðþ»&ª“$ð¤FW <£yǹ9ìfÒ-og’(¤lˆÕ ws´çå^=sÈâ¬Øk’éÖÛA;DXïØbNNNF88Ç·äÝ(ÛÝ›¾§{«È²ÇnpÑK0=;œWC½J´ìÇHÌxõ ù÷¯3¸×n˜³:Ä@<úœ¶GAÉçÞ }VõÏšK‰2mb2Ý yôÈ©Xvúƒª—CÔ\Ûù½Pž§îàúœù}y¬ÛÍ N¾=¢Vr¡C}¢<`tùJ€+Ïã×ïãB‚òëh=VéùôçÞ´!ñ…üQòÉ"'ýcÓ=ϧZ~ÆqÕ0ö‘{•õ}ãLu‘^&9ß ãëƒÀ¨­ç·ŽP“©½àt牮ž.»TŠ;0ŒI»=?Çô¦j¦ŸtÒ¢YB³Iͺ6ôîWŸ­hœ¶’!¥ºdZåÕ²ÙiŸa—f`ß7^dÉ ÇÔþ|礂@¡åG]ã*Ì0 <ý;þµ¦Ò[Aù’yÈÌÂ2 *¨g÷ÿ&¶Å;¯¦Cì‘“:ùE†R5'‘ž‹ß©É㊤ùDõg; —îYÀL&\—žþœúR ÇXcxºeI8õÇãM´Q3)ñÏ`3Ç1èr¥g»’ÇŒôëø ´¯©7±·g*Dþe­É‚@0¡À`=¹þž¹í[Qê÷ªÁ¥‰p«‘%ª…“>ùúÖ¸±3do!‡N}*ì´,rJ™ê§%I?×S( JÇUq Å«4w3HÛ°a‘Xû“°qôæ±<æšçpˆÎÝy9 óp¤ÏsÍY[ÉɤófDfù›+¶pp=ƒwã–õ«VÏo,jIHÀ<äò{wϯ]¾§0´+rÅ ÓþS%›Ø3ZÒ]ÇŒòQ‰?}êí—†4íEÉw<áAÌ•Ìö ýß^qYÒJZȧÉpw(Çþ:~÷p:ƒÜ‘W3Ç$RÛ¸I£)QÓåìxéÓ#§ T4ÞÌ«¥¹¼¾Ò°w;îÝ“¹×8ôÈ~š|~ ÒÕ_ËŸ8^…žü¹Ç§?–jîâK{µK{…Ùpã‚Z@®}@U cô­‰×W’#ŸÒO™†3î¬%:‹FÍ`ö0!ðU¤ ¾Ku@Ãï(Œë‚ÍÌ=iG†,÷’˜Y8Lyˆ¬=1‚3Ϲ®‰ÿÇÆ\&XˆeôÁÔrÝÈ–@‹Ô¤ÒÈâÒ’œŸR¹WCZßNxåM>âèDr‹‰·e$gšÊ¸ÿ„ÓU’æRÓZ[ÏÑ¢µqÐÖ·ÓT‚\!¼Žw* V»^_§­ME(ܲB9<*BߦsÇÒŸ5º ×êsö—Ú6‡ u}sªÍŸ.;qˆ£c÷°=G½‡Ä‰^³Zi“üa ¯ótëùÖø²³* IÝ„X±»=OÎ2~µ<‚ЍòƒµB)$gûÌ}qÖŽh^í\V—FyeÖ“®ê·ss ÿ¼ù—h<ÿõëJËÂWVÌ.M«ÚŰÃi#Œàÿœ×¤=ê>α™H¾V g©ýæ1ÍCzc–ÒH­çxŠ/Ê;Žl“ϦsWíäôBöQZžo¦xaõ;%¹l^sÄAp< äðG­j7…-- Ý<®"PÎÌÈU€Tf%„ðIæ´<3uöÛûpæù±•V8çºóÀ8#5o^’C§ÌŠ¥VXÙ m!SwRN1Ó=Í9T—7(”cËvsqéÍo‰U'’â^B\@ÁõYôŽ:àTÍ¡B±Ë%ÕÏ™tHwiT0|ƒÆGNÀúbº]>á.ì#»¸@²7É"°|pÀCÛ5m Þìè3ˆP©ç®v“š—QÜj(ä?³-c¹u1šY0댹!ˆù³Ðuç¶=h·ÐgÕK"í¶±€ª´—Y”77sŽÀ`{šÕ—Kc­[^J¶’) …ÏÌ΂FNvìǰ¨u}®ý¦þåí“,¶þfÄŒsÀsT§æ'gH‡K´µY®¿|¯?— Ìç‡#€UOÓö­Û‘Ì1£ü›ÇȬ¼Ãè?Zâõ /õmÃè¯%¼AUnç¸Å;Qñ$v×¾"¼¶î‚( „HÇnüØ_óÒ²pri–¤’0|GºÆþ%[ŒÛ«‡Ž>ICÁÛž gùVn™ÚÆ®–jÜ<„9@ÕÏÌ}°9«zôIOšME×Ì•»²Jçòâ®é0Éá­[ÉCQÌV°ŒePõn=¥u'hy˜Úòò2/ïaoêɹ£ÎÈ@lp:sé€)RîÞ8ɶàg`cíÔÎ?[–ž·uógO9˜“!óTòzñÎ9õ­ƒ£Û¢Œ@«€ÿGQýFMK© rKs‹70n+£í9ÚGLútôê*Áx&RÊ+Œ•äs×üöüºWðÖ—3æk$E# P=Kõª¿ð†é«+‚ó.%UÕp:àáÉõþt½¬Gìäq°…^1ž ÀëÚ©Ãcs3 E¸Ü1ø×¤Ûx;KYpËewLÌ ¿Óò«i¥À¾dkÙ‡%TúŽ;_Z¯¬%¢²osÎáÐ/3—†d;CÝä~´ù4 ÒKI6Œì›Ïl“Çã^“ýŸ¼¾\q•bHÝw3gÓ%G>*ĺq‰Ûórê2=0M;ûä¤XQ—Sò—Qƒîsúôö³eåò¤VÎ*ªzãøAý? I,ïW£}ÅA.ÿú ??ʬ1{$y’iWk€>Bü‚YBÔcëÅ"i×.ã ͸+ÈHîƽ.Heò¼ÙÚUQòw}÷/CþMTÙ dŒªóŒÂÄ~¿ ~݇²Gž=„ÈrªíŒ¸;F±ü¿ÒÑ%¿°¼†ÄnÛ\Æ7`˜8®¹­íˆÄàœGþœTOl…¥œŠÃœ¤ ûäóÍ7VêÍ BÚ¡ÓH`¹šÜ)3Ê Æ²g êá¿Sø×!â9à@#S¹A æ¼0§=ý먽´¸»,a'b¹•-Îñ÷Xþ¿ãY’xig™¦½¹’BN3±—ôÛÅM7»±Í6ŽB(攋{þqV“K¹v%Ähª71,Þ¿…ufÞ …½·’ð¡rÇŒ÷j+Ûfx𠃟¹º8”ŽügúVÞÒæ|† XÈ „•¥9ÆQH^{dôÍ fc`¿!<\ä±þïÿ*»9"]¢Ûò’ª[hú·O¨¢%‰s#¬¦\mQÌ‹ÈçGéš®g¸¬Œõ„ŠÃù–Mǧ<ã·øT¥^C!b¨äÄãÔg¦=êã²H¬UL„¡€8úÿ1OÀG²Ÿ3Ÿ}Žâ?ÏJ9‚ÄvÑÊ=ÀãË;\1“×ð®óÄMåCl¹È,G?Jâ!*n˜ª¬hdd@+²ñ9ݨÉÈsÓükŸ4Ž‘f­‡üƒ­Gý2Nþ¬l>µ ºªÚ¤c®?*›o¹®W¹º:0¾ Œg çò¨£pIÇ$`Ò¾cŒþ4F è§Ðõ¬™¨ò7}Ï­A¸ò{žp?Juÿ@9ÀùÔ2d€Uˆ…+Œg’NHõª§€MXå²_’88ªùÁ'qÎ0xÍ1Œi03Î0HéB“@þT‡q'wr}hM»†q»¾;RiðÖÇñ?¥sw-—Ûœ×G#(Œ„c5Ì\nr}¸¥ÊèYµ8Àu¬o°û=‚†å§Æ?é[VËòzÊñ2n:dgþ~:~­/TøxÑw鑌 ù¸ÿÇMr—Úl.$‘bàüÁ–2˜ôqGZë¼`ài1¶îDÀãƱdwgË$lûÁ8Áê#>ŸÞ­èÊÑF5W¼r“µì‰@ëh÷Ç™ïU k« ˆ¦š)ÔðN§ÿ®ºKm<Ëk‘£oaŒàòü§€¤öö«&ÒLåŠmà2Ÿ4Þ¿ÃÍtó­Œ9nhèž#²HbmC g!ج~Ï't?죷nÕÒî’Ò´Y\‰í±¸0;Æ=À==×§¥pécc'›n&‰ã‚ ®CpØÞOºP躆­áÒÛ6I3 ­±µÃ;óŠÂTÔµ‰ª›[óÊæí VqmmÏŒätè¹üzœ1ßÍ|Sâ‰uë %”G þ/sþªMRÔ¼A3;a-#û¬€…í’ùÐW=-¬°0YŒôÇ¥J:½È©Q½ÄñÚ”`§Š™íf&HÊñ»æãÛÖš°Éžœväñ]0#ØIÀÇãFÓÓ“¼*Ò[I¿c**xf‘õ<ʤ[RÜùsí\*»¼±Üž1Nã±UvŒ÷àóÓôëR‹Ž˜Êž2rsO–Ïc2¯Ì*G;½qÏéÍÒ7 NO$£ñn¾Ô®‚Ì„¾Oå)9ùkRÏFÔ5U/¼Ò)l; Ý0z¯oiŠÊell%Ôg>Ùàû½ÒØÄʦê8Û€–÷rp:œz™7Ф»‘Ýé3iê­{•Ïq9`;ßôªš~•y«LÑXÄÒ* ¹ŸSÓ'¥)™f•Úùî›h(?BIàU‹}FÞÕd‹mÓÂG’îç¨{Q­¼ÂÊäòiW:l*naå°Ž`̓ê2i,ôk‹Í;í2!VØYI##¯¼Žh:¥¬ñH§KDaË$j<1Âôü¥gx±[²IngŒØ-Àà˜?O½aérWÓUBÿ¥rNcd~Ù×~U\ŒsÈÔ‡R€Æ›É*Ä¥[¶ñvÒþɶu8 Ž_ tÚ~ð½Ñ‹£È#YC·.`s¹>•^E/°LãšäV©ñbH¥„1AÛD{ölž™ìr)¿ð“À× òÂîŽ ˆÂ€?•çØ¯t¡s§Mk‘fŽXÁêªÜúŒÕ­8[»€òÛ9ÚP3Êd<`àõÆAÞ¥…´=FULM` ü£?LæM\q¥"Ì$ž?0Hc¸‰±ÀÉ` tç¨â“–€—c2ED̆þ<ʇ9F%5ëî?:lâÆö9'–úk‹ÇrJCl}âH^õvïL±¹Xæ‹Q†%ñ` ã$‘ÇåIšþ_—–×Q/˜B´¤íÚ‰HÏßïÅ$ÖáfQÔ.ήçº_2TÿHHनÁǹÍ:?´ _0^F9ÂvÆx8•RžØB);FX‚1ïŽüT–z\÷¢SåH¾V71ížH«²HG=´ìļ2P`€}:ÿúª«)Ft*ëœs Û ~•ÑXXO·_¶ÄA11—PH\àwç&³/ÑÖsçÛËlIÆçñùIJîóµÊ%W »Ê'o8)Àü3ÏëRÇ6æˆÉÎÓÏa÷xëÚäNcg@YT|Ïc×§ztrAÄ–²‰X|¥d sŒ‘øóTHD¨SÊ.Š„l$=Îzg‘ëô©&uÚŽfÃÆ2~p2Oÿ&¢[¹U¶V2  ”,@ëÆ¦)âîò0Д‚Í>¸Ü9ü3KQÜjFÌ“*0;€?)l`}A<}jcçr„fämP¤c·w¦›‹\¬K‡<ª†+Ÿ¦pOÖ¾êWŸ,6ìmXN{ô©Ø.W¸’YdÜÍýæ?¥CŒôëþ}ëIãHŃ8¸Î}þï?Z|ڥꇊE°8fQÓ®éNâµÌ¶‚AŸ”íŽ?:j‚‡#Óv«ÂmBfû‘íëÏaÍ7ì××N7E$¤ÿ=(¸¬ZŽu:q·e£mäþg8út¨Ì“DÆh›§+r§¶÷ª?ìÍI ÿ@º }"o𦵾¥lÃÌŠH¤€/|ô4´ßRÐÕî%—'¡aÁç¶F=Xsž K«HIÊ»6â[¹úŒ~x–ç¥fI<¯÷„{~ ÿ<ÔhC Þ9ãÇÚŽT>c}îc‘U²n2=} 3Á­3]º±Cte…Gú¢Å€t~ æå²”Aç!ˆÄs²+g“ü' ßÒ©îØÙÆtÿ’;Ôò&¬>fÎÞçźµÊyac‚ w«F›ÊcÜœ~†–ßEÔõR—3A.þ’Kz$={*“¦k“{©gHÕKã#êOáþ:é´ f I–{é#äµø°9Î}½3YÊ«ÝE'w©Ð[ørk)UÄzc ån>a‘ε¢¶³HdÒ®íÜ¿Ë.™3åÿ"úd×3/4Ìýü§®L‘’òþu—?Œm ¶ŽÈ@i›ñû»k/gR[šsÅlÎäM,dCzëî"îU@ê¥Mms,Rùr Ã(ÃÜ–áƒ`‚£Ÿºr äpzW—'ˆ¢O!þÊ®è[s>ó»#«vëZºŠ--T}²J XÂ"c¯,KsÏaD¨É Ug¤Ë)ÉoÞ¡é¼4ÄÏhý@ªhV,pIõy‡é™ùV]¦µ¥^0 F¬½7Lªqé€ËüªÿÚwcËœ6x ç“ù!ÍsµË¹ª×c#SŠD½¶XeV¹2y– J¥U¹,gp8œñŠe¥áÖl®âºˆÅ{ò剔 § 9(qÏ¿øÔúŒ¶—Éö;—w ¥“kúò:ÿžkùï4딽Iâ‘ÇÊòù„»Ž‡~ã®G5´}ån¤=úSÁo ÚÝEn‘2ÝÇàù$0ÎyÇ+Ÿåگ̥XBUƒ‚OÙð˜*JEe[«éœ´,˜ÇlóÀü1YUµåý˜kk>;dûÑ<V>»˜Žµ_UÒ5+)Lúhµ|íxr®Ö#ÛšJ:ÚáÌí{-ƚ˒ dlu Xß8æ²ãh·» )ù³Hö1ÕM+ÄÊBÀ–³E/ñ¬P—>¡AO°®‰ícÔQ!1Ïí2BÅwq‘ŸÀô=?ZM8é!«Kc_%×±·Q–Ø8ú_Ê£Kx«$HX¨LC‘éò·ÓЇQ—QÑT ‹s< æG+ëß$ÀÖUψ#vòÊ€Wïɵðéúçð­[Z'mÍ[›8Ò-‚$°û¢4RÙ¨!Š)"FF>U“èsúÖ0ÖVVyÊ.î¦ÈÇ8îvóùTsê’ç Á‡jÐ1Ÿ¡­$C’ÜÒ–&{‡[iÔïû§›ðå›òª²·ÀcnÛÛçbŘR®@ý*ºê‹(R4$Ÿ°Ççþ44Ѫ4yc)âLƒÔ·ý«Iõ&èž?(»ía$ª2² Ø ƒøb”Ç2‚)3)ù¤Á€ÏëøS79¸X£Y˜ìÎ\²þƒõ V5Ï Œ~gxÔ–Ç 'ð§aª¿Tò˜)VP[v~QžàzzWWâV,-ÀÿhóõZå­FëÛm» ÇpÛ–ÈîO¥tþ$ÜÍl˜$²°wù’²ŸÄ#ð³p¨€à¾”™oAM|…äôéLÝïúW5ΰ*®OBG9ïGÊyÈÏ ÁÃc<ç 1 6qž >•…›5#“òÍîN ¦óŽ€ ð1Ú¤‘@i'#ó¨Ü¨ùsúô¦1ŒSÏ=³U™Ê¦à‡ðõ©ÉýÛ0=‡ZªîùÉP×ÒÖa“޼’iÀä’zqÔR7ËÄéNVwÉ=ºÐ0”(ç9Ö¹»‘þ”Tg¯×AprzŒ‚1øç%*×,Üÿ:#¹Obý· }k#ÄCý3Hþ~GóZׇ1óV.¼?âm£y3Ž3׿ZÒŸÄgSáã7 §Ež¹þDÖ2K ²¬’"‚Ã9s?†õBkWÇ:TkÿM2=k’·Ôgµ•ñ$Y¹Räa‡\屟®MtRàsÔ•¦Yµq“ÚÈÊHÈ$*Œ¤à‘¨®®oI)§À±Fx%cBì{ÂçÛñ54ӭìÈÙ¸tØ ‚AägoLsŸöj­Ú¼´I> `*)…uë÷›òÅl–·fwèE'ö|_jlθ"ÆF·Ê>Qøâ´%æ™b #G™Qʇ£ÁÉ=0zõ²¡µ¸x|ùllzÛ»ÙGÞcUîo!’p¶û£‚5ŠT`9Ï‚NO㊫\‹ØÔ\¹F–ƌĕ”1댱 \j¿Ú!TùXÇ8ª3žƒå>ýê²\}šä¼HÊAùe“aÇ|ŸNß•>-Irp…œ€­¼ƒí,Ž´ìÂå£äùYV ü€1-ö±Ç¾1øÕfDUV11ÉäíG×=>¿áO k3:î‘Øã2 ¿ŒöàÔ@¡mŒÀ1÷`.{AÝÇoÖ’ib³‰Óçß6ã‘•#¹«¤ð…%Rp­áOLçæ,3É› ÿê€ÞÐŽ¿3w…ý)ÿhy÷#ýã#n aÏÖ…t(¤–@Yº‚…@làð1ò÷ÿëRì`ªÂ$ØrJ1ÓsœøäÓ¥™\#<§ p®ÌI~;¦æÇAÏCŠbÄ>Ö@ ·’¯ ㎅D|ô¦#—f*J·—¼M¸°äËò¾þ•'Í,ñ¾YãU ÉÁä‚H?Ÿ8§ou”†Ü‡¼YuϰhÏJªÒ¨&9”„“¡ä`ûèhÕ‰“<HÆè›jó–;Pä*ŒZylŠÀµädp>çSž¤Ú#ù£d€y ôÉã?¥,×QZ—Ø!ÜG˳¶O'Ž€q@h6à-²°XH—8u`>Px £œz}j)fB!Q†;ÝÏäÚ©¹’G'ËÁ$cuþµ"ØL\.Ðr2v¶ìÃ>•IwÆÇ¾Vò‘†ì2ÅAöæ¦ò™Ty„ÃvD€ŒtÉÆ.µz8%†-‰±`I`²u g#*3žœ˜I!ˆ£³°PóŒ•ÜŒ(ã“cI£·ŽHÌ…T ÉzöP6ñõéR6P°±yªì “×wæ§ýäêÞdk¸ùó/,Äý㹺ût¡–i‘º,ˆ§åª“ÏÞ|“þÎ)\¹N[H„lB0s®pAîs·ôàÔEnGÎáTRá‡r2ëWw?šs.ز¬r&2Ct÷¨EÊG)š8ÞV_˜ íÏSÐú æÂÅu7­À¸làu“™&§Šö[r‰t¾h$†±r>œS^êi›zÇ(zäŸÌS·NÊžÛg^CèÍ4µ,žD‰n²€|‡ üVuíú81Û¼„7\åš`YÆé&rä£içØ1úÔmm&7¶3…,ÙÀ8Î8þ’ŠLm¶‡Ã,Kµ"‡o÷Œ{¸úžkBßÄ7*uß?4NK)ÆrGN Ö2Å$LÌcs·ï §­—< œ“ØUr¦+³¡¸ŠÜùz‹‰ ?)ùÊz€8?¥_³¶²¼W˜å`ß4Gj†ç8ä`ãúsËYÝ4,кõn ¡öÌw®®¿âgËBÀÈžT¸«68Á/Ë)E­‹‹[”ͪ4í1JóÇòËÓ¶àIúÖ ´ÐD_é?o¶º_¿ ª˞ßxd{â´.õqc·Þi IG#“´¡$÷ÎÁõ?RN­#j:Twr7‡!e$ãœò:lŽœf¥6üŠÑtðÔr$~8ÿ¾Z•¯¼7ʘ aÀ%¦¸<lW.‚9‹'’…È*»wõë»úJy²Kq™‘Ó “è2:U¸.­’¤ú#£þÕðì jOao¼û芼C¢§ÜÓá t?`sÿÆ‚(ã1¼ªeSœ"ääñÛÓÚ­ÚÞÛA¹¦ÑÄÈ͘÷9FtÓšN9žÅãã µ´h{þéÕ?¡¨'ñ¥ä½ZFé#+ýŸý»¦H ˆPx[¾qÿ~êªh/¹N‡r¹ç+tþÉIEuˆÛí"³xšù—äsÜ1þ˜ª—w×—¶qûê¤?ðŽ1ÜooP‹M¸ôèÇç¥W?¹Wsœß(0°(if‘²ò#ûÇ5¾môY0‹©H06åíäÉÏ<ã"œº~‰*Œk ¤–9hfôÀþ|é Fûè–Eg§dƒó“ÏPx­é4½ gËÖâ3 £Œ»ëQÿfé’F€ë6£h;dÏ^O>Ÿçs¦,Â'}x§Ïðuá[ãI±ÈÙ­Z²å³—#ôϽ/ØbG]—–eNÂÀ^€å³Çj9Ðr3#=>@ çœ:£,jÊr6àíÁÇÖº°Q;.ìÔ6A¾õxŒõç§<Šré— nˆ.ÅVõ\c=Ì?/ÔRçCPlÀi§ŽFhåa‚§å~‡±þEoh:¥ÒK$‚{ƒ.|µ”€Ü€9=I†jvÑå™g܃ë‚.Cw?69ô'>æ§—Dº³°‚Ý#Œ‹µ2™üÄVÈ'åäŒÁÎ:Ör”d¬TbÓ¹©®¼Zm´B[×k•,ÅX¬Jägh^˜¿'8Ïz¦š¬2§™g‚XOó\*òGAŽ;qÇn'ˆâ¹Ô,¾ÑäÌ›>оb8óT`Tž ž½Åd[_ìé" æ8ù>aƒ‘ž¾ŸJˆÅr«î\¤ù´:Ûû¯ HâYϘ„¶Ö{f;ó×’0qíÒ¤OèhÅl»€±'°ÆA\KÙ<ŒÁEVS…ÚsÜsQ¶”ï¸å(Ì?v"<`ûûtæejÃÚ;宋y2ÝŒuba$©çi~*§%ÀKxÖÇ^,Æ%fÃ"ä`™ˆúá\Tú|°®éb(7™¶ƒÓ·=i ®&¤X¢R“´}BúŸOΩQKfK¨ú*èºLåïZûT² í#‰QŸSÔ{œVüZ-¥³"Ú¨r©ÁPÎ1øGþ5æ¯g,(­µ°ª<³“¸ý8öÏáéVíµ{»!å¥ÔDj£ƒŽÁ—úsÏZ%NOfš]Sk_"F Èö†,¨FO¦†/ʳõcL…’;‹Â&+“JÆx9 Ìó^~u‹¹ £ÊDe~pÀà÷ôïYïpÿ+(9ÚßN9àTÇ®¬©UÓCÓ¹¤¥îmË…܇ө_ùÅrzŒÑ›û™Dƒ »€ƒäíÇ@? `Ž+–ó8ÁéÏ?N)ñËŒ“×  €O?§zÖ4Tv3u·7´2î‚ʱÎrƒn~WŒzž•¯§kÌÊBȽ·uëÓ߯áÏÝ®zÞô4â;‚9! ã!†ðyútëïIå²›Ë$`g#kžÝ~½»æ‰E=Ó¶Çgö¶Tݳzò¿˜½?‡¸ã‚Õ˜7gtz{®£eÊK¤pÀýkŠñ‚̨÷[8òö原á=¾†²Uº¶™RtŠ"Nb–7+°õÚN}8ôükSNñMßß¹;‚‚J³}áž …ã§^ŸJˆÂpw‰Nq–Œâf[Ë+¯.à\G:ð±EFfËg''»}sŠô»û­'Y‰ Ôm¤Ru¸Ð}Ñϱàתh2XÈd·u¸·$áÔr€uÜC]0©Í£Ñ˜ÎÛb’3ˆ-å¯Ì6“†#Ôcùâ¤/lˆÒJNX³v¹_äjš2ï\Æ0: }úÔû#•,y,¸Èü¸­ˆ¹>èÄÎá|›@Å\ pá d¢gsÔñþ5WUݱJu(Çþœäþõ˜Œ±Ønœãۓǧ4€ÕÒ²omrîËÆ2=Ç5ÕxqšÑqÈG?NR¹-çÔ,ù9VÇã~µ×x„ÿ¤[žø?ˆÜ¹®yühÖ? 7]É òpi»‡µ Fàr:ž 3zz æ:¦L;m'Î3QœfÎ[8µ,óÎ}À¦b9-“ÇJÄÔW?6Üj ¹n€ö1þ(øãŒ÷ªÎAœàõ `WåÛœç¯åQQ•àzgÚ¦9|qÓ§J¬ÜzõÍ!fvv$œ`\PNСp@ô ’Ý“ŸÒšŒØPN‰ŽržsžÕ€«óîäæ¶ïŽÛ7'ƒ‚+Ë·Ž¼ã4D¦_LíéíŠÄÖ¾}kGÈÆ$'òxÿÆ·SîŒÆ°uŒŸhÙ齺¼¿áZSøŒªl'·fG‚8sž=«ƒ•Àb¡Â¾ü„`÷uôçÖ½ÄZuî¥l°Û”+œàŒ’qrøO\…›b@FIøfº¨J*6lç­å¢2ÃFï$! ,رô$gŒÔͫ߬¿%ÇNì\‘êXŠš]TÞYôÙÆ?é“6?B*œÖ7+!Ýk*)ã.Ò>™WBqf’"¸šyÛíÊ÷’Ø>™N ¨V9R!›‡‡x ­¾r?ßÎ08ÍBnIæpÇ æBý:`üÝ=ZzÞïfÞÎdf%Ÿçf9þóò¸üjlÇt>8Ýÿ}+î’x#‘ýï¥=Òú,ȳ¹Ëe$c…£™I^û>Ô®‡fA$àÇÈ#ù`ŠÊG=àŽü©ôíUåKvU*à ê\sÇo”céÍ_Ke`beu*6ŽpÓƒïHÊŒÌÆò’G\‡ó¼7¹¢èMë…nsŒÿžÕÕh¾Mäq´×@aÆõ–P x>§¿@z޲ͤr¨q»åÚìKgwïg¹Àâ¡›Nh. G(ߎk†Ï÷yQÏéNV’tÍI#¹Õ Hª'•?åÏ'3÷±Û5Ÿ}c…ç¥K‰2'Þvîàï€ürprçŽÔ°¬«J%pªI <О2NFô¥qدÅ$O#Ê™ÛÔ0òFÌ‘ôçšB«m!,ˆ7¬ñÉ×¾~:ñŠ™¤‚ª1`mq#©?x…bOJp‘àf9‹˪guÎwóEÇb„ÑÂ\”R…ïõª@„`ŸNjq;?Õ‚Ûb>o˜þ¢ž¦wÝ#>Q;Qš2p}½žù¦‘4mþï&eƒOºœzŠb ¹ŒÀòâ@Uœg9à{§5 Å ²ª¡ÎÒ1ç¦{œç¥_i'·«KÞs¶B˜8Àw=zlÈZ,4ᢠ‘(ŸÓÎïÒ„ÄÑIm™‚”WÜ £däô÷õ¦Ånä%(wd8wÇ?N•*«°Ý %É ïV=†÷©üæl ’y›f'nï÷†p¾ÄSl¬ÑF[í’€1ÇLü¼g¦}3Iºê%+¼nÁoÞ.FãÓ9ç×ùÕ™^xäcåHæow*G=²GO™åÌa*ÅHgËï` 7¹lsúW³Ãz^U™˜yk¹¾lã=ëP´|êNJŸ˜cñþB®²I½JüÛ_wÌŠn™À<#K*’La°rrXFòHΑNâ±AL°à…qÁ‘[=ûÓ–îU$ùPò“ëéïW¼R|Ñ»1mØhØúƒMËl>öŒŽŸÝ'©0ÿ Ó¸X„^[» îvƒÂµm/ ½K{I&cme÷(ʦy ÉÇ5žæ)>v¦rJäàå$žŸ‘¨ü‡fÛÉÎ#sëaß<Ô´˜Ó:©TÊÆTŠ+a)gDŒXöcÜàƒX×Vöÿ,V·w21º˜ dÿõê¼ŵ±ŠK}ð“¿+•Æ8ÈíõãÝ*µÞ§öœF‘˜cÇàäL`Ó’e¦d*Zò`p2® ãÛŠEŒ&æû|˜¨t<ã°.?Ïj¡å§Ê¬Ù9çóéþE<†@ŠY†vç {ð«°®\1¼‡d×r•˜ïÁ™^)ÎG‘ã®ér1ôÆH<{ÕbÍ&áö™Y˜óŽz“‘Ò˜âE'lÎÀñËŒsëÏ·¯j,"Ϙñ®O–Ù!ÀNzg8Ï?…C Œ°!‹*© Á'îûc×§Ò’=ÑÆë#áðBáÇSŒç‘ÛõëDì²±hòüðy%TÀ9#xÜ´e°­³x<ƒèOÖšhÉ9(nFxéR7š²oaûÀÄ1d<œzªÇ!³·ß§üª„Ç;É`AÏ#õ¦å£ã ð:6F=:ûÐ@R3Ð œzÓ—î« œ¶9?²Žø0ÉééבS-Ë*,XÓ9ÀÛϷ㚪O—9#îݨÁ¥ …°Açëúðh°îj;–E‘[õ'Œç“Ø:ô¨á¹hdÜQNBðÉ‘ÈÏò~œUXY×€ä0É à¶Iý)Ã…_”¼ŒçQëúƒøTÛ ïÔÖ€Å6Z%Ê“ó&<(nݺwú`ñP^Û¶Ô‘#]ÛC2˜‘sÎÓÐÿA@k<¶‘ gr¹ÆWŽÎAýGó«Ö÷èÒG½U_åþè!öþ_IjÎè«ÝY•¬e·IÞ9c ¾=§x©õ=;ãügqý:zgð5‘DɸvŒq„ëžÞÙõÍM‡rÄöNþfX±¤D+0íëÓÛ>Ýë9’XCyŠUŸ±Èõ«±º‡ Lc÷Š[@tûØ#?‡Ò†Ež5ó$ Ã19ROæÜÿ?­ZmnKÔ¨$áÇ#ñíÍX<Æ¥1ûÃÂINzŽ8ü*)!h£ÊÉÇW!ÆH#¦4Õ#c·a÷2:óOq\×ÑAmVܹ;ÖP¬rr~a×5Õx‹hµÉ8Ù&!\¶†¥uh oB8Çñ/°®Ÿ_ÿ] a$ïê+ Ÿ5‡Ât9=sŠ2?º*Bvœ1*õ£qõ®S ß?–:õ'µ.ÝíÑŽO®1HªL  uÇõ©7(iÀ“ž;ÖLÔ®å› ®x'< dªÀP â¥'¨B}qßXœçžhެ­ØÀõýi… p2Ý)ß>IP=ÓpÁÝ×±=*Gr#„sÀã&—w_|ޏíA]ü.Ф.Ë'pr9¤Áµ'o+jÓk>²¦åãÖ¯êE¼®FN:þ5M PªÃ·SÞ©l6ZLeAÍs&YåÖ´¤¶G6æØì8r×N=8®Uñ>‘“À|~¹þ•¥'iÔøJÓÝx¦Â@†Kkƒ‘÷W$dàgŠ’kÄØpÚDRím§`'‘ôc[1ÛÝGyzãÊhåpêÛŽá…Æ;u÷¦éÑÞX‰„ªfáË[1É?«æ¶F|­=Ùþ-¾·;nôWŒúÊ?•H¾6¶^f€¯¨Vê•~öoõ‹+¤1ÀÑ+òX·Þ+ø­Ú…á vd X•w« ¹;‰ë€:ã­ë[½Ü©Œôyr$çaÏëš°5Ï Ü’d†"O?=¶qúRËuü—ZU´ŒåÄJqû͸ÏUãœãÖ£¸·ÐÙFÝ)$-‘¦ò¹ÈÆxèzâ‹G³ ˹+?…%6–ønŸèŒ?öZ†}?Âr Ûi {ù.?¥%§†´kÅžqd¡ÈVFQÆx=È'éUo¼9¦[¤e·g‘å.^žƒšk–ö»¶½åðËćÔÜ"jÄ~ð¤§?iÜ=èJ†×BÒnc&×P¿] d,ÌÈÈê= [OÆXõMG9ÁÄÀÿJ¿¼Æ£²‡'€ôÇɸ/9b°ýA¦¿€´¦$G<Ü0±=•1ðrKjWì]¿ ª§Á¯’WP@@›Í%7üàãýÑÇáþ˜Éò]])ì¨?Û ¹b€þ£þ;òœê߉µ^Z®wüâQ_ÊðÎÊN$¿¼>œ)ÇéM ,Båoæ#ý¨ÆJ±ÿ¶ ­Æ«\ æ)ëáUrWVo¨•‡ò{I88/å*Ÿ…ö˜oäQüAcäÿãÔŸð¬ òjŽ¿ì˜û,ÕÏì-fÞÿÚ77P¢åÿåÒ<@­·DÄâ¹›òëKÚOùÃ’?ÊgÉðÃ-¸jà7§Ù²?V5ü0”·Uˆíç f£?­kÿfx…¤!®bîÜOÏþ?Q=‡Š2Z9ã#þ»Ëý^i?æAÉå3á”åpu8[žÜþF¤‹á”¨ªWR„çœ`HüI5sû;Ådîy )Ôî¹›ú5)Ñ}¦ìrDî3ÿŽ×SãإݜfŒþ¹¦ãå ”ÿMã#ùÕ{I÷BöpìÌáà qT"Ü@Ý£RgŸvš~jïÃÍŒpZé‰Çýñ[$øÄ޹yˆqõÝMó|a…Ä7º‚²ÁÖ—´©Ý³‡fc·Ã­aäÞÒÀÜct—LÇße9>j|Ÿ´Z¯¹•Î?ñÚÔó¼d7·­Æ1þ×ò÷§´Þ5 …Šv÷ómÿ–Ú~Ò§tΙ–ÿ5väêÐ1%Ïð¢?‡z¼X_íhrã­hßâ²0©r½pvDßû(§ÏSº$;34xRROÇ7'úFß5ãl¶Ê?ë©ÿâ*üÚ‹Ð|qŽäÚ)Çä)"¿ñcÍö£ì-@ÿ4sT™SþÖ¦î£Î´¬dcÿ²Ñ'ÃmD¸ÛyižœÈüÿãµz]kÅqö{¬“Þ5ÿãtã¬øÅq²ÒFï¹â ü–Žj½Ð¹aÙ”á»´#~i$?û-Eÿ çVÿžö¹Ï½8ÿÐ3Zo®xÀËp>–ÍÇéOþÜñZcͶ@ àgÿâhæ«Ý,;3"çáî¶B·Ú-X ί‘ôÊšŽßÀ:»"HnæsÿÆø­ßøH|L>_ìÙÜ[?øRÿoø à 3æÚO𣞯ù)öfø{ª…'u¹¦sÿÄ iøu®ââÍWnÜoc…ÿ¾k}µœìð¼ö…€ýj'ÖüQæÙp¼DÝïš9ê÷AËÌÆo‡:©ÜMÝ–[’zÿß4'íd.Eå˜nœnç=–¶¿µ|NáwÚÊ­Ž«ÿ¥þÑñ ?ê¯:tü…G=Nè9aÙ˜2øYŒï’æÙÁ}ÍûÇ9'ŒôüêUøs©"0ûL`¸!¶ßžkm5/6GÙoŸ=ÈAÏýú_x¬Í35½Ò ÀJ¡À÷ù=~”ý¥Nè\ìÌ?øWºÒ7îä¶ 0A߃ÇJrøÄ ÞÂË·iS;cnzqÚ·>ÝâuZÞ1ôÄCÿe£í~'l‚ê?m¨’Qí*wBä‡fc¯ƒ5Àå™âGÜ[)3?Ó£ð>­»] px$ýrkHßøŸqÄ7÷ˆD£ûOÄøùm®{ù9ÿÚtsT}PùaÙ™+àMU¥bVÁHÇçÅ<ü?Ô@ÜZ"}®+L^øµ²vN=¼ ?œtƒRñpù>ÍpÇÔ¢cñùõ; å‡fg©ùš5õ!†A'ÃÍSÑÉ籓[ŸÚ>28Å£ñ€ˆ?¥!½ñŽÐE¤Ã~þ&Žz½Ð¹!Ù˜ð¯u2ܹ?Â[ÿ¯Gü :²‚ @F@?½nƒ§zÝ7~/b¶¸Ûß#ÿ²Ð/|ZÍÇø’*~Ò§tìÌ5𨆎ÝU½%'Ö’_j$°#oýoîñs»0Ç¢CÿÅTBO+0xf‘Ly(­Ò§tìÌgðVªFöV9ôu'ëËu¤ÿ„'Rq†ŽB1Ï1ýš¶šóÄÑœ½µÈ#Óc$¥þÒñ&ì­áã“”õŽŽzÐZ™•ÿ®°*‰Â¨Ä«Ÿý™'†5}Œë°iSúà±çÞ¶[PñQý‚Qï‚ÍÿÆ©T©ä'yœÊxrô;ìë•äw\*t=J1¶;)‚‚XÏ8ÇeíÚ¶ßÄZš^Æl{Ù¶?ô:hñF£ÔéÒcþ½˜gÿ§ÏS°¹`d&…ªÇó»*Í?ݤn¼Àﵘ)Ûž_: mÜ)lŽóÑJ'éÍ?þ»¤U¦IŸpFhæ©Ø\°î`¾›©™wÉ»·nÜÑÎN{t©Ÿb¾Ø#{[Ž >T¤ ÷ÿ?•tCÅs±!´ÙýFÐOò¦Ÿ]“Æ•/ÕÒŽiö,;˜a½†û5Èä|¹1ǯ5šTó¶ãÂã‚VÙ¾cêk£oÝé²'*jAâ ±ÁÓ¥_ûdÔÔçØN1}Jz4Wþtáð0À´EyéWü@¥®­Óׯ½"øŽàœ-›1SÏÊxª·ZŒ×—¶òIŒ/çÖ§Þr»º£du|Œ.ìãŠLOÖœÇ<曼{Ö§I³•ãÔõ§ì~ƒŸ­+±89ã4œ ½Àç?djŠÌÀÛ·s×=j68Éã *±0‘øÔ ƒéê) fÕņÞ¦£ÇfbYn8§äX¯oJ@Ç9@Ø$žqíHàÛOÈ;ñ¨Hi+Ž4òÅŸžf˜§.Ù9ëH¤TÔIdîGN¢xp½±WïÉòsþØþµFO¼¤qͦL„nì0+ÿŸi#8Écùf¶C™Á#=+S|øŸEn„³åZÓÜÊ£Ðè˜äœ Rãå Cœž3‘L ¥vÔ<Ï•=WpRûŒÔ!ñÒœŒ ö DÛÆ§y ѱw;ÿ“B»©©1¹yãëEÂÄI+ØãŒ(mÃj޾¿Z…­” ±€ùÝ…ûÙa²¬0Ù÷ö¨Xdçßò¦ [1r¤m够{nG`89ã€:UÕO«I“ØŒUrfb§µMR9ä(z‚VË»‰"Ý+[ù¢`2¨#ùº©8Ï^ B»ø[ŒíÿÖ«]¡p3ÔT¶1„68<ç·¥ 1Ï'±ÇÒœ g”åùŽ?Ÿõ ÿ #d(sæ¾1Øý(Y‚Ì,Ô„–àý})œcŽ¾Æ˜Ln[k{Œç4c'©µ0Ù»’@íɦ¬ˆ@q‘ÝM ×€ ½·Ò˜UOO^8ýE?'Ó“ÏJBÇÁt¦€%r{qHPr0äúS²G8#µFÏÜž´€HÐŒäŽz´Tqòn=» p`AÁÅ!QÙ¹äóLž t8¦Ï<q™n.$%Üà=éünÀàõ>õ—âyü#: 8µ~sÏCN*îÂz+—Ƨ§ùi:]&É …/ ’ÁÆ9⬘Ûz¸™×æåF0JÀðúÜ]èÚ}´ð¢Ù-”{HrK¸Ç^1Wïµt¶º´µ·‹í7%¶ÛBªýæ'ž(q³²z]š 4»ÇѼ±`º+W=3éœPÃ;xQí\ýÃÁ¯ë÷rF↕_ƒ…cÁüjêk>dšNmöF"ãçæ2võ¡Å­I#…û£ßšØì?0#9ªqê¦êöòÞÞ4chÊ’3±r3ÇÓšIïfŽÀ\,¾ÂΆ@6`‚ QÊÇ~¥°Å›p|ã¨ïNó›¹$pk }fVƒI–Öc¿‘9gÁU+¿ˆ¾”æ,rªFqÀ`kœ}Gû7R×îÒŸÊŽd €„ŸÒ´Úòßû^ÑDÍs1<ª® þúÜ”‰šöŠb—0¯’vÈIÈCŒóøTñÈÒF²¬Ñ²²†a¿^•ʒˤø©Š®LÓ à~ékVmHXéúj„2=ÁŽ”p2W¹úM𔻚Çp$nB½ð§ŸÖ˜|ΤýуTì®nç’á.­ b268|ùƒª¦—«&¦Ãb *›ù‘6xV}yö©åes2H nÜ0 C$ÅãܧŸPzÔ…Qp¸O8Å `‘êjDŒÁHÜ8ïÞ”Ì{ñÈÇð cð¤jŠh‰¬£–@e”Îí„•bǯ¦%Ѹ±’i˸ØÑ’6îùvŸL`ñß5¡ýžñ^5ŬþI“ýlew«žÇ¨ÁÇz´ö|Ì¥»œb«˜‹w1£¸Ô^GO$$H¬T˜ŽO (?_Ò¯ZÍpÉ#λ‰ÙÃ2zýF*ÎÝØ;Ž3Ú‘‘Ÿñ¡»ôV2niæI|‰A"¼N¼2‘Æ=Éó4Ï:þ5‰RÜ” moAŽ¿_Ò´÷dôÇÖ—'œ*¯Ò±“e%ñi0Z"X3|€å‰Ësì8¦k &Ô,ÉV]Ù7^¤VÄ1*.и_JÇÖÎÛûRG(÷ê®.ò"JÈßÈíÉ"—°üÅ3’Gµ/”?»YšH!›§éJY·`` qL.Hšî…ÈÎדYLÀd3ŒuïU¤/°‚Ç>çñ©å(ÔX†,&ŒBJcœu4ŒÊ#P ÇåL•Á½¹ëM.rOJLhe\“{JNé ü*0Û†$ÀúÓ”„r=zõ&ȵ"4Ëó¥R*¤ ¥OzItäcž;ÕmØcÁ¡"›,D2?ιÝ~TµÖô‰¥$(•³Á˜9®jO Û•ýÝÄ úm_èW>Ul¥Ò‡ÚOþ…O’ÉæŸcºL•ôö§©ÈÆ:sÖ¸¸¼1~Ã÷:šçØ•þ@Ò¯‡¼C f;õ8fêOåŠ^Î?Ì>yv;ÎÜãžœTG)»æ$z“\öoŠ¢;…ûè®ÿB4Öo§ÊL¬ªD•Ë´{NéfçÁû¾ƒ5få(À2TާëR!9ÈeäŽé\ü'2Œ†¶IîïŒ~†¬EãuxðÖ±¶;,„þ›*}ŒûÚÄîL«’ £Í\Æ?,WÓdÓî6çøW¿ãбÿ •©}žå}7*‘ÿ¡Rö3ìWµs¯B¤ƒ€Iã=ñK½˜êéŒö®N?ØnýêH= üjqâý(¶L®û”½œ» T‹êt…Á~÷lô»È'# z÷®a|]¤4„y²óÿLÎ*Ä^*ÒY†û¹S·ú¦ÿ \’ìñîty`1úäÔÊøÎr½s©â*Cvä㧔ߟݩO‰´ÀØ3¾?닟éK’]‡Ïæîõ=ÇçMvã¨5‡ÿ N•üWMŸ{wÿ añnÞè‘ט¯åG$»”{›rp7duÍ#8û¹ZÂÿ„§I`H¹p;fÿ ¼W¥)9»oûðÿáO’]…Ïæû1XÇAŽƒu4¶3ÔVøŸHsƒtØïˆ$?û-Juý+fápÜ C ÿÙhä—`ç]ÍÅ$¶G^)°Pö¬øHôŸ”ý¯uÄ/åMÿ„«GÆMÓœq ÿ…’ìë¹µ–\rO¶)FN~f>جfñ^’2«3œöò_óû¼P¼{—×OMÛ;Hòݨó]›®Ð8ªöšJG57S³X«,9e<‚«ÂW¤0ÿ‰oõMþ ñ›¿wÚœãKñÿŽÐ”ÄåEt‰aÔnnìï$·7$ãØXÃ=éSÝi†âö)Í̉å£Fc*ÙÇ8#¯lûÕñn– ï–`!ùÿÇi?á.ÑÛŸµ>êb~ñÚ->ÁxA„XZ[ ‹€-$ ›—ríÓ‚GJ³ý˜±êfüK/˜bìb àzã=I¬ÓâÍ.ÓäÿÓÿ ÅÚA@>ÐÙäHöZ›èléÆ+›»‹Y^¹æU nÆ7Cú{UwÑíãÓmlá–Xb¶‘]–SœœZjø‹GßòÎã=Ìü©ÏâM€cú‚øQiö ǸÉ,?Ó¦º[Ïž`¨W€¹ÇãÉ­x›l@bØÁ8¬´×ôR5(OçR®¿¤sB,ã=OøRq—b”¢ºš\2œ1üª»i–Ïz—§zܬ~Ydã+œàöëUá"Ñ€ÿŒE½Áÿ t~$ÒQƒ5êí=¶·øRJK sEõ/iºTVe¶y#ÁfÛybNIüÍémf’s$­#2:®A?AT‡Š4¢áÒëq‚?øU–ñ>–£&éˆ8ÈX\ãÿ¢Óìr=3C‹KYÒ)å–)â©PO\>”ë ò š³£-&U;ñßô&›'‰4°ÙYÛèbqÿ²Óá ÓÝ'¹*Æ)ûýEî —B†eÔ\Mþž¡e+· xãŽ*fÒÔßZ\µÄÌö¨È •ÃŒçaU޽£6s|‡åÅ9uÝ&<…»b ÎX9þ”{áxÚ$&Îö×턼‘žRJç'ƒ—Œ€*ÃéPϧEi+I"ÄT£–ë/BÇ5Lø‹MÙ¸ ˜‰°JCâ]+<ÞÆ9Ï1¿øQi…àh­¬pÄàI3ä`»¹fÆ=i¶¶ hë1y&˜F#ß&7¸©é{ëõÇP|·8ý)#ñFŒXƒ©FÞû[Ò’Œû ¸÷5ï k¡o²icÈ$"3÷ðÚšY—9è9ª1x£G(T_&pppÃðéH5í5”Ÿ·ÅŸS‘ùQË.ÂæsE[)¸s‘Ÿz@ûÓ'±Îk4kúZ“»Q·r Añ“´•ÔmÆ?Ú£‘ö4{š‰ÈëœÓL»vü»†q‘Ò¨JcŸí sÇfÆ×tÂ9¼ƒÓ;èå}ƒ™w.ÜÏö{y$³²)!d±¸¬»+²$“Ü.ëƒgqÉ'§'ð©?á ÓúdMŽ€f’?i˜ÏÚ2ý2cÒ©).„·÷ UÔ¬äû:,ΞdJ]O/#©ùyéœÑnú„°¼m ÖóÞ,’<»yGà"û1Ï}µ3x—JP!çŒC'ÿQé.IÊFzùþV—ò“î÷túŬޫ:«*Ä#Ø|Çk±ÑÎ)"—R·²žuó1â |”h=~n9¤oéJ?×Jí™ ñ^”9ç¿ðÿSE¥Ø/ã.¥ÔnMͳ%É‚Yš06¦2Ì8ïœsÒ¤µ»ÔóóE2Ä Cnp 㜞8æ˜þ.Ó…@õhÇþÍQéåˆ ý?ç¬_ü];K°®»šúsÜ‹|Þ;4ÎKÀÂ{ Ïšòöîîvµ’a .ª  Ãíåù=s÷j«x®Å—îH Ï›ÿMOépYùQ4‘ìMª~FÇ¿ Í ÷°s-®LoõµG#Ap"£!*¬Ç“ë…ñÏj#¹ÕgB°4›.743X#-ÐçžØ¨†¿§2ÿ¬—éäIþ×lIÇ›1öû<ŸüMBO±w]Ê‘Àë¦[Y˜§†)¥ywÇ&ݹ@^Þþ9¥všÒµGx%X|á&ÍÂI ;È=ñ‘ïV¿á °ŒróLÀÿáPÿlÚÊàÍpæ5lª‹i}3Ç5~óݧsQ¤dŠ3!mÌB°Aœý*FÖç±#µg wN\þþAßýKçùSÿ¶ôòH2IÓ<ÂÿáQÊûuܸ 0ÎiÜAï×5—&»¥Æ9¹o§”ßáKˆ,°³HÇý˜\ÿJ9_`æ]Í\€àþt:Î+?ûf×?~¯Ùäÿâi±hW9ŸÖÒ….V+®åÓŽFf˜ÌG¿j úÅ ÄÿøÿáQÿmÙn'2¯¦aoðªå}ƒ™[qó}©àƒÓëҳιf82IƒÿL[ü)£U² ꟟ҩEö24ÁÇqXZÏͨB¸ù¾Qù–ÿ Ñ¥› ù®=ü¶Ò²of†óĦ'WÂ.1êü*àõ&M5¡Ñ“Ïÿ®ßZŒœ“œ wš¾ÿ•fQÐÅŽîqÖœK2ž9ÆáÆ*8‰’C‚ƒš›{2 ×½fÍH°pAã©cÍBà’£9Ï'TÌ%°IUæb»ØŸ™sÛÞ AK9¡ÀhÊãhÎsš‰bœ–'w¤ yëÍ&4>˜õ¨øóA'¿ôâFÓŽ€v5mŽ䎦‘ßðS“TÃØÏà \¾9·R3¹_'Û=ë,1iI>ÔE͘nëÓµsr==*~èÉäw*1à d„˜ÆG^ TG…Î;çžÔéÏb¼cµA¿g' }j’&àÇæäqÜŠPHpñÇ£ó3ÈýEKn¾cã `ô¦+—íÎ× s’3È«/€zò8ªÉò䆧ÜXgÒ¡”ƒwõši;”gíÍ;4Çn:“Ö2&Uàò)ê8õôúTeçæçÞ¤GëÉäSîJÄKeS‘Ȧ=•£Ös楋ÛëÇëR:p}é]”’)'MÎ[O´Çl¿áO:.Ü.ПO!­€O ¤TàƒÍ.gÜvFshºN2ÔgŽ"_ð¤] K_ùq€ tÆ3Zr ÃqnsP³¨±ÝÅ>iw*ìT>ÓsjpUÜ#Iÿ¾”ÃD„Âæ@?ô*жÚÎØ'ÕŒàªI€ò]C–=Œqá$!—Ÿhñ©WÂŒ²IÏ_ßH?öjÒi[¦¸©„€€;gŠ|óî.Xö1ÿáÒ,_>­pãÿf4£ÂÚQ6ì}TÏ!ÿÙ«gxÏ?.¦zuëKž]ÇÉÆ#x/G›È`eÇ+x3HTì’ž:™äÇþ…[`õtæ¬Âá¢hÛG#žhö’î.Hö9Gð†’X~âA´ÿÏćúÓ„´¿•Ds=ÿøªêdYIdõªÍ `g8ö4{Iw${ùðvŠAÿEoß¿øÔgÂJ‹yý·ñ®‹[†#éQ²`…ÞØ÷§í%Ü\‘ìsƒÂzRŒeK‡ÿ|)§‰I"àƒÛÏqýk¤pS'wSƒòõ¨XHØ*ÜÛhö’î‘ìaKá )¹1ÌO¼¬­5<¢d±µlgœÊÿã] ù‹÷q·¡,y©Be Îi>áÉÆøKF1jý?ç³ÿ'ü"úR¶D¡öžL:ß`@ùX3Ò¢‘Hç#ý¨ö’î>Hö0_Ã:s1.ÓÛÏ“ÿЍÛšOS¼ÿ ñüë}P‘ò;‘M`¿@(ö’î‘ìaÿÂ)¤ ÂÜöóŸüjDð–ŒzA/ÓÎñ­€Ž9È5$l 6â½FpEÒ}ÅÉÆ!ðΓÏÙ¥àDÏþ4çð¦˜ûHIÁ+ž&ñ­ràæ ÁIéƒSBpª €89ühö’î>Hö9ÿøD´¥`¬·ŸI‡ð–“ÿ@ƒƒóŸð5ÑA*¹ù½ÿ• 3¾ü =¤û‹’=Žpø+G$n3±=‹¯øT‡Á:>ÌyR_ž·Îݤ±ÝÛvisŒvú=¬û‡³cŸ Ñ‰ÂÆùÏr§ùŠ_øC4µ?ÇÇ;BÇÿÄ×AžF9ú haIý){I÷Hö0?á ÓKà3°ôòZü!úJãzÊGCóã­áœn“Š•ÆàÆ1Ó(ö’î>Xö9ãàÍ%zG&ÜtóM'ü!zK,S=ecýk ÈáN7p0iÂL66¯¨ö’î±ìsð„hùdÀwcHÞ ÒgõJßf³ã9÷¦7=³ÅÒ}Ã’=ŒðV”r$3•éÕžÚ¯oà}6%cHØà`/¿^=1]8?1ÜGE5œç©³š~Ö}ÅìãØÀi}H—éòñ4èç?»“?Dãô®€ÝõÝô9¤.2§{I÷Hö0‚t€¹ öÂÿñ4iY%|ádû-oåŠm'œb&ÁƒÛô£ÚO¸¹#ØçOƒ4Â8’ë>ÅGþËL> Ó°O›tsêÈš×EæŽBþéœà7þ´ý¤û‡³cœÓÆ6ÍuìOþ&á;5a¶{€1Ýbÿâ+¢ó7 õ‘ÚšIê(ö“î.Hv0á¶ï4­õHÿøŠið–›üK!OÝþ‚·³î? ’#j~Ò]Ã’=Œ1á‹w'ÚB1SÇá)OKŸiÜZÕ/ž)>aÈäSKž]Õv3×Ã:OV·rO¬ò?þí)H"ãþ›?øÕó!ÀùMœe¿Z9åÜ|«±œt-0~ÌIëþ±ÿƘú-Ž@0±+ÿi xã5Øã½Òî&‘šÚœÃÝ›<€eñ¦ÿÂ9¤àŸ²uõ‘ÿÆ´ÙHÀQŠˆ±{úSæ—ryWc<øwIlæÕ‡=¯þ5xcI/Å»a3ÿj©Îqõ¦’GB? |òî±ìghìëV88ÿZÿãM>ÒG+nëô™¿ÆµƒŒç{Ò;ïhç—qò.Æ1ð®–†ásé1¦ é¿Þ¸YøVÈs€Au4×qÓ8烚|ò•†¬#ã3·§Ì? ©?áÓØƒ‰‡ü¯+ap:÷¤.xãð¹åÜ9Wc5¼9§ç†˜·»ƒý)?á´?Å&b©Óþù­`s‘O Éãèió˸rDZ“ÿœÌ§ê?Â…Ðl\|Í+v?0ÿ Ò’>8Ï'šX—kÇ=sG4»‹–=Š+á;(çÓ/Šwü#úz·1Çý4oñ­•8ÝÓš ïϧÏ.âå]Š_ØV|±7ÓÍñ¦ Äžb`?ë¡ÿÑó œZA’ô§Í.áÊ»ßðŽØ²ä ï‚?Â¥¶Ñ-m®t.ì£61ü«CiÛ’x¥ŒôíÞŸ<»‹•!qøçQìúÒ¶ <}ê<öjAÌk6Z,™ž½Å5Àe#"åÚ7œõ£Êß•ÑAêy©bܱœœqïQI[Ôîù”ðpƤNß½SÏj‰±mXÆpG rŽpsQ(8áÓ?Z”+Ëÿ} ’‡w¥ pÙÉõÍ4‰60Âð{0¨öÌxž¸ê !–`àç8銎hÃmÆF<ö¤eœ`…'·¥5„̧÷l3׃@2hö©ÊõéVUÎÜxüj´@À•'Ôm5m ޱ²ñéÖ•Æ)A¿vO×£ç8úTNYÆÖMØçæ9b›°H  ÕÉèpO ¥,_ÌÕ?5”œäSÄÄëô  ËA§¥ˆá›#¯z¬òäŽiCžOX /4!Ç#éÍ ãœcŸz n0xžÔ«6G̹ tô¤¯ .SÐsژ̄’ÜLÔ-)8 ¸ÿ G4Œ ãƒøóL.Jò¨lÃÖ‘0[o;Nô5\d•l ñO, +g>œâ€&2÷^€Î¬+ù‘ü¤ôô¬ÀÄ0“ÐôÅM ÁÛ“ËzàŽ(̇‚I9Æ@Å1¹ä÷ë×4âK3‘ÈéïH¥³pF bÂmm§ž)’'\ŽO2¶Tü£=°i–8ޏÍ+ù<(¡¦Ãä¼w4é#!ñ†?¦*»–Tl®FxÍ1w˃‘ìjXÆA篥SBY³Ï «"VÈ ÇÐv§a¸!#å=Ï­:6ÀÆT•w&Iœbšdí £"ärr:Òù›¾l:qÞ«ù„‘£>Ôå8+»“ê§ ”>8ä{ÒóŽsõÇJ®eÁ˜.{ŸZp|ÈœtâD™0àÓ”ªärw{tªÊÅW ’¾i¾k Túht°U'°àSK¢¨9ã×™yâJyçê(I¦=Ž3Q7îÆ7sŽ´žk’A<Ž˜éI¸‘ïùæ€7æ ©gvi7®å 䊄Ž—ÆmØÈÇ\q@‹(çÔ^h¥² $T Ã{Ҧܞ˜ïíL ̇í4ÐåŽÜ1#¿¥5¸xƒŠˆ1/ØúqÖ€-$Lc £&£'çÈaŽAÑ9QÎvQ—%‰4 Ä™ù€=)yÏΣCžr0=iK?±/œvíI»×;…&ðsŽôÒùœÓ$•Æpxö¨É'’IÝÁlñM9äñ@üž¤S!8ÎÖ¡v=ëJ lx§`%ÝœŒQœrG~)¡J‚NOÖ“9\~?J¡K|Ã9â˜ÌsúR9*vúÔnWÁ¦I!äu ô¦;Æry¦‡QÉäQ»#±CŒ÷ÇÒ£i8#ÊœìJu♀$SÁÉ^HçµF\‚AÛוƒ³ Ç’MDH®¯«DÅâ$zœsÁ/Ý•F}j‘ü. ïÍyLW“ÂÛ£™Ðÿ²ÄV¿Š5;R»fY@í"æ¡áŸFTq ª=Fe9*E7ÍpHü뗃ǒaVâÌv7_έ§Œ´¹ ßnéõ\ãò5›¥5еV©º¬¬~•f&Œ×8þÔ-Àˆ’Éâ `AèqíMRÌåZ<íLEÑ eÀP7d’zE¸(ûp õéÒ¢DéØÇ¥)8ã$ði)˜¦rŠO_º)ë.>fPF8ÈÿëT g®3NV (Î)hPHC°VÀäcÔr)\²Ž1þè§ ¥ŽrxÅ!AÉ8 Œh@ÕÈÚGà`zí“Ìcü 1þÈ¡Ny ‚Z#qžßZ5Î06(ÉÂòjKs‚4;zezÓŽ;Æ1Þ•c#8©ˆ—íÁ4 zeO&—íˆÇJìMU”÷ˆÆ: Ò+8QÇ©¬QhʪGȘ¹" ¹U¹…£+°7VÇ1A€Û†Óê)ª˜_¼™Ïéü1QxË'^ø  ¡tb[ÊLØÔ›£ÜG–=Ç5{U‚î Ý6†ëøS™‚H}}(æ•@9Aƒ÷N­0H…³å§äi¹Èá[Žzðj5?1=):L2v˜í֔ʊ82}ÏÒ¡þ?rrN;fc1®NM4°îÁEÀ9ãƒÞƒ†8zÓ°‹+*n cS¼w_6-ã÷#'¹&«ïÙó6éO#œÛ†Yócäù`c¶M&ôaÂw<Š¡ÄSÉ"£î1­ŽÆ§É>ãÛš,Áâ £œÒy±´ ¾*Ä`dîÏÒ2OZçñªùÉàzžüÒŒñÈA@‹ñãî¯ášƒx4 œdgühÂõôÒ3É8þTödcòƇüýhW#bÌÓà~ ÓIÜIÎGp 0,]Ü Àúæ£iP¶`sÞš¹aœšœí¥`$óT‚ @cØŠcK(0 ïLçnȦàô ÔŽsNÈDÞld•GcÅ3ÎQÕ#çÐhXÙ¸$ƒõ BÌF0x4hîR£*£·JE¸ŽUqÔP Æ£8ÙÊš`XûPi8T˜¥àqõ .N\d|œŸÒœGð“UÎõüiTü£4,AþŸ¥G$™§=j'p=N:ÔD‘’(,+ÉýJp—“œ0ëœ ˆ Ã=©Ê€?N½è0”äôüR™2{géQcaÆxúÐ=Æ Q,·®3ŸJl·c®@öÅ2N¹ª²sœ’i¤"+ëö‰íÜzpižû_­2u)G©õ¨ÿwíZ$ˆ;¼rÇž)ˆBsÉ¢ŠÀ²œ¬TdùÖN¡w-º“Üã©¢Škpg!ªkW‰†¥°pHé\ÜÚæ£8ù®X˜^(¢»)Å[c’m•d¹ž`³Hãјšab¬1ÒŠ+mˆ¹ýöúÒQE2B”QE1‰ER¢“4Q@àÒî ðHú(¡"Ý\F~Iå_£š{^ݹîfltÌ„ÑECM–#×uX× ¨\鼚µ‹5Ä<_¹öeSý(¢¥Â=ŠS’êZOkC¬°·Ö!ý*ÚøßUpwÇjÙë˜ÏøÑEsJ[#hÊMnhAâËæw“l1­ÿÅT6¾$¾I› Ï8 žþæŠ+;+3TÞ†‹x‹P•”ï œ.@þu Ô®^2 ‡¨9Éÿ(¥ea6î$—²yY!N <æ¨Ü-²Ø°Î?,ÑEKE¡&ÔfŠ•BnëÈïR¶µtJ±c$ãiÿ(¢ÈW.¹z„VP¡°*Õž¥s$›™ù¢ŠV.-›Vד¹sÇëWîF|NÙ¢ŠÂF©–DŸ»V(„ý)áÁF>RdzQEfö,vüº|‹óu⑤ùþâ~TQHe“.jãƒÒ©]\º&T(8¨¢®$°I™ß,ÇU¸xL¨ô¢ŠlHlê¬: š#hL`ã袑D³Dªœfž-“Ë~tQSÔeYdòÝP"sI5•$òùlûÏ8íEq$oW~ösšyžWV˞ܥU± %pUÁä~T¶9{‡ÞÌÙ$rzsEº’@YÛ W·ËM±\£;ÌzæŠ)-†:iY'Ø1Œg¥ KO"ÂŒŠ( s¡Á Ó"š×$+Á€äQE:]¶ù1Æ€·$ã­%´"¶ìqE4`1R@ù5!:bŠ)0#u¡CgÛÒŠ)¢áN>ðæ—b‘ž”QMÖPˆqÔ Õvœ¬ DÉ<ñEЂivITO™€ŸCœQE!3*k™˜oÞAVÈÇdÝK Ó¹ïõ¢ŠÑ­‹ÎÅ‹Ž´Â¸ÑEAH‹$¼GÒž¤úš(¤ÆWÔ$xã¶3Î{ÕX¦‘ˆVrzu¢Šµð™õ%feËn9 ¦w´Q@ÐåvVl1ãÖ¬ðäã“éE0êH¸ª÷(*§’£éE"Bì\ãÖ‰x4QL¡J(^)®ª‘ä(È¢Š‘¾6¯Ê9<Ô¾l`` (¦IimÈíJ8|õ¢ŠY@àâ•9Ǹ¢ŠhÇäŽõVDVBàä(«D•n0«dù­íE´LÙÿÙleptonica-1.70/prog/removecmap.c0000644000175000017500000000542512242265732014771 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * removecmap.c * * removecmap filein type fileout * * type: 1 for conversion to 8 bpp gray * 2 for conversion to 24 bpp full color * 3 for conversion depending on src * * Removes the colormap and does the conversion * Works on palette images of 2, 4 and 8 bpp */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 type, numcolors; PIX *pixs, *pixd; PIXCMAP *cmap; static char mainName[] = "removecmap"; if (argc != 4) return ERROR_INT("Syntax: removecmap filein type fileout", mainName, 1); filein = argv[1]; type = atoi(argv[2]); fileout = argv[3]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); fprintf(stderr, " depth = %d\n", pixGetDepth(pixs)); if ((cmap = pixGetColormap(pixs)) != NULL) { numcolors = pixcmapGetCount(cmap); pixcmapWriteStream(stderr, cmap); fprintf(stderr, " colormap found; num colors = %d\n", numcolors); } else { fprintf(stderr, " no colormap\n"); } pixd = pixRemoveColormap(pixs, type); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/lion-mask.00010.tif0000444000175000017500000000064611330622220015504 0ustar dandanII*èÿÿÿÿÿþV€ðVù0ÖØÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿð¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿõÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿò¹Pdœÿÿÿÿÿÿÿÿÿÿü@ì€€à–ž(xxleptonica-1.70/prog/topotest.png0000444000175000017500000005456307475271234015071 0ustar dandan‰PNG  IHDRÈ ;âp©gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I IDATxœí½M¬%Ivßw_¿ž¹crÔw`€âwR ²hfcp ‹=ÐB+ÄaÙ€ ¡%hå•f!cdˆœ{‹OR Ðb¸Ó’Í… ˜Ê"lÃuË@sa` ¶º…þ'>ò¾ãÆL×Ë›¿ŒsNDœˆÜôÿ¦†ÍŸ4€®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáJV®dåáÿÿdëâ áR²¾qøÅ;ùÿìȇËÈþxCÃÍþa˜æpÙ'’í²ÿBýÊü§~(°KÈšäoöÝòóû÷&´¡Ã16›/‰ÈFÖËxHd«Ÿl7›­<× ´7ñ„°žì°¹gO€w]XMÖÇÍf¿6NÖ’½4NTÕV’7›uíð0å¹’,&ÚuI«žêye_=?ˆÀ]Eöj³y/vý8¨©'k"¦aÙ)Q\£vø¯Vá°†¬Mê Ï´Ÿ]ƒC²Cº†VÈϯˆš„dé,ë§6k$aÙ1+ÉíIyä!”“uP_êÐ^ˆVNvÌÕ‹¯7™ï€C1Y›ŸÜ'IÜb²SAjçK2­”Lײî‰}÷ñ‚šVJÖ¨,;UöÝ!o?ÍH©”ì Êç»'Ü\¾²ÏµøZc-–}_ÙYÝߎd˜aøÈ*ƒš›áÔcóvuG£ìÁV‹ŒS%ëU!‘ edg]6§:NvZky—‘vxè£õ¬oÖ Û"²ÈÿMÏ”nmE+z®#·]¢¸ÖV´"²£]í6EvZÙû,"…Ùîº*þÐÚŠVBv…éÕxSµÕ&±ò1"f}F5»¶vçöÆc5>ŸdT6®rwKød¬”hd ¹—÷Ëáñ—ŒçÖ Ñ–éÉþhwÚ»ë?·R¢³ž¬ßÝŽzà­Áv½³ÈêxH2R& ²»ö«CQ?>O®«hٵĢ<(%wüÖÀø¨1þÁažñþ"ÉNDÉ<î;OöÕì¶Ý|»ê›÷U-›Œv5(ÙØboºÍ_Úõ³¼Juæ’54C>ê;ŸÖˆs×mºÙªŠ–ûŒë-º['`Gâ§ýÍ 9ߨ¬§×¨Î‰ìIÆ}sªí$ûÊèÓîf(Þã_4ÉÎ+l´ÌÎIüAí' ß2mPPÓ¶p0EÝ¥d¾§}ø›ÓŸsåG^v‡Mÿáð÷Q?êÏ>b¬hyd®ÜÝÌ=ËSå{ž»óf?S<ícbÐ…~2§3ÛÛ9+NµW8»n®q#òÝ¥é?ѹê>Û3çý©?¹k»Þµ1²cõ…ùF?/žªû€C+ÐS;Šr‰–EæëïœwÇ!ûMrß=9Þ÷,´År#‹ÌµùEÿ2ßc¢áœëÙ£!çk;—êÍû¦7¾ˆDRl£åùj67€QEî[$ bdMUÄ•Gæ«ÙÔÚvûäô$û­H$miÈ!óªe*‘ó·«÷ÎU§EgWGêY¹D˸?TÞÁ̺?7ƒûùí¢d¥-ƒìLí×Íéïlêÿq¨p@ªÞD$my¯3gz×÷z¿\u›ó¯nþý×C*êõü ¥–P™7•Û·ªf{zgó×Âà `H²0©²ÛC5kßÙ«æÍO{<š—(¯BÕ™&k}5õîT·ÕÆš›ñc|84er#MJ®ív‡}W­F/¬hédèüå[7ýz²B“; os;=*ò!6G«C’Œ•Á8»¹ûßK‰\(ëÛ%ÉX½ûÃë}ËÊf“7³^Ï8BöƒR òx]ps’ŒUÛÇ}tÆ0°€6B’ŒÝ0*ÆÈŒa*™Ü)²–ÕÚ1¿~\ DRÛÜ›¸Î jLd„•"ãS6—’•ÈÙqO]JVÒƒJÝÊGÒ#]ݼpx/ûÖ™0÷/ͳÃ6A&ºHçY›_ÑdçŠý¼˜¬ ¢%“(¨™˜Jݶÿò½ßyÒïs†Ç§?ø˜ êD‘ýz¢ŸÛg¥—_Ñâd²'..¾ËV;e±åO'E¯ÊÑ Nöä_É•X f›ÜñÈÎu„ìó©ÿðøä³_9x¶”JP´öµd~ö~ ´cþš/ ûé__*Ü“x‚ÙcBq2kþ¹_r¬f§>þaF‘f÷íâñDb ð›êì³MÒ[;·¢EÉ:;çkiˆö^,Ò\-J±ÛíR{w³yã#ãÚrÇߣdv;:ÙÎâݘk‘ʹ-JÆÍFöXL¬žÇ%‰Oì$#ÒÛb-Œ!Ë¢ErŠ´ƒ}nE‹’™ùžZ:÷þˆöŸ3­Ç™)OÉ•(Ó bƒ S©ÇÈ+ýœ G-O©Çðš¬Å;ÏLë#oü=Ff5ÍC^»ï¬EÃç¬åc12c¯É]y6Äqû圧#d`g Çlãï¬V_O¡½}’ñpŒÌhšH–Ѱª0ådF”c0´f êugÉu¼ËÖ-ôQû’¡5 þê=>~t%k(9Bf¼LÊ^ž…2-kÎ"B†kt§<~½þ}…î?ágµ-"døqèT˜&üáôf‡LN°ÉŒ¦‰ºÿÝÍ4E†'^OÀêÈi6nšp¸ÝNdx «‚9§kg“á§¡­ÜÌïÆèXŒ•3ün“ɾæà*:²H„³v‘®6® 4ßÏ[Ù™çÏhŽ ›À&ƒúœU³³;8mƒ?GÍ‘Ñ8M2,sXåó=øûÛ(Zó»6¬¤,Æ@vwÒ·ÒU\Ó$k೬\<æÓÛxéh½‘1îb’Á:Í‹ØgÔwñ­M‘ ýd’ÁšÀ;dþ–ü^HÊ]œé)o“ –7_|µÿY -íÿJ‘Á—âñ²'°“ ç©­~Yš Ji1XBÈætÆöŒ{|Êhàm9d°ñˆ“žìGËhÝx“)Û)Ý8-²% ¦Gö|!§/o ™2QÒÓ"ƒBCt®ƒàÉÚúît;ú[átd|ÉÆi‘A}.Úk žšêÑé¦o¿ 5«“lœrÇ—æä×ÝT‡GG“LÍS'§E†ª´÷Ùv$; ê³ù6®Újú0©9 2XAeÝ ~È¿~;.6=ßž¾×|Ëhtrº½fÁçdÝ d‡hÚj0 ·Í»™¬hI³Ö C†z'ë!$iW Ý]³ùËFŒ²Rbà CõS ÇæÛî¦Ï·Cž5ÃÿÚ1o¬*ZJlÉnSó­j9j·CŽ du÷^{c9oK•êsdHÚÈ¥«ç_ôd»AewÕ´âÖrD–CÚ)±a¬VÅqú®O«Ô¥3̬<“Ã,)±a†ÃMæ§ŸõGj+·BìÜA$•˜ 5in.<:î´ó}Þ%ÉÄôaJl`2ô>\'õ݆”ùðD “³:‰Þ0&k*uJT³ó¦:ÜÒæåŸ0Édx›k4Éj}ŠJÆc}Þì6[8·´©Ò Hˆ L:NìÕùËon*8·e’ÉâKôÓ1gì 7ƒ:¼»‡•Ø&™”˜ ˆ3¶‚³mv#=ò­µÉD‡/1ˆ†Éô3‹Ú¯n›êc#F›¬á{&Ä&Óϰl~y ׈M¡5Édˆ[ Œ1-wÞGÈì<“M nmàÉ´Jb éÜnÍœùÀf– +ÞIdM…ïûíéðiÿq»ëÔKøq$Ï„y˜¬–gæ0W¿»þ'‘ÿa„¬áEw1™ÛœìÙ¥1Ýô?‰ì2rú]›L¨ãdzlsê_¸E’h=$¹&zdMUL¦«æÔ'›m¿!úS¤½7†Å7Þ8ãŒGÌS·iî eÛ2&º€¿r|G+H¦UÀ”I§ŒË‚‡7ŠÈ¿¹&gT ,dŸÅŸ˜Ëñô›cKh«®–×sCS±ŸQ7p”g:—g)ñâÉh¥µµ$~ýÆ?ü«q+ÐQ³î~ûb²yPb(‹óHÖð»¯ÐŸË J¼x¬VNó¸Á ³Ç²Š –·Ÿ;¯¡Ñ™DÖH²eäxÀ÷Ǿ}›½jp¥Íq}᳜¬';Èì§÷b·ÕÑeêæ³?÷hBû·’d\UFçÑ™z`±÷‡RþàžOÙ7×÷æÃ?:däWH³“©L^Fåf2:®þÔk°ÍØ.šWáèFxˆL5™eàlhYoÙî±4Ê+YÞì‹É¤­é¦N²ßc«™Ô¥ÑXŽª'D&•ïÜöÿËöµ?ýJ)à_$?SÁÅ~LÐ 2y¿ïÝ 5Ž BýPcgŽCÄá5ñžÕïÆ«—H1õ„ÈDÌ¡›xêOß÷Eý©!#–ªf¨xyL 2)hÃ0æ©?aÚ5jh°·¿f¦ÇEL 2ù"a8â¼®´V–Å¿û!*qL 2YøA Ÿ÷Á)Äʲ~þL…™ kø1Q›ADCó^¸ÿÑDhˆ LPÄvd"/HWŒd~ûEiŸì½cJÉ©’ð4!‹ï%Úl­ËÜŠ(M&߃Œ„j‘øð @ÿšq‰7ÇH,šL Zò’ìYÂÞ9™ú“7Ǣݿ¤“Jhšm Kún›2…7LjÐ)Ø í¯ºKm²;Ò@_ò^V–Èš&³'a™ñYÕ<Ù;E†Ð™ôÈ"×ö/9²øþ;óÍ–"`U+¢ž™teoªpéíÊÝSõɼ§ÀªVD=)29ÊDz;Ý›K6d-÷°V«0µQOŠì,öY¦5ÁmÑ™·ÜÃàgXBvü"~zóϳ¼O¢œñm¬#êI‘„ˆ¡u}™¤ÏüÄ ôr—ÙdK•È ÷j`®óÀ\Þr§Þ’-|¤Ênä’¬Ûò}Z˜®útIPFÒÈ ®,›lõ$Siwœ 8TjenI%¬ÃØã¶z’Ï65ŸÔ·@˜Yd¸ÜY6Ù}E&Ñ-ÿ¤O™’ê –Mùdb~x{ö¤>\èÃîØç’‰wÐ.œhi“½#j ÆVO’L˜%M%@êì¹·Pô&ŸL´åVÔ•}-ucÍVO’LúTÈûíuj8þ´:Å4’­ž$™¨Wj°O,œn^«s4l21É¡šf'>£Ôýa‚¬b&ÐLÅ)ÈšŠÿTÏI»2Y¸³À–ܱºlª'ÛNœ~Vâv9GxL6ˆ“î©0ãßÜNG e¤š¦ðuìÈœŽ±Ëc«;óL ™ŠS ÇTÕ4E—¯!òÖ̾–L†™êI‰¯|çE2çÍïo9ã³z “af¿Ž“IWÙ4U5Û†ÒÀ_YCkP˜0''“BC6Íß'U ³ú `¯DKSe‘ -¦F¹…óõèaxïÒ2»z“`aÊÌ/+LF>%ÖGA<‘Ãßæè®h´=šJ€“‰†¢j§óm¤I%fK˜ŽbÉXJ J&…†Ü‚e,‰Q†wgh³&™Þ¸…YšV ±'¤›ò¤«åøÊçoÿâ¾»5{¡z±=a‰ZPbòu¤/èÐâ§jrÞ|·Žì[«VÇ0·Š<2QæjÒ®æ¿Ïݼ‹z³iªî«æ˜šÚ…‹Ú,2þrÊ£H®%9wu3&2®Gï¾ò5‹LW4±¥™hÁJœÉz÷“¶åLÝÝ Onþlmõ‡'â- Ë ‘ ©'ŸQvä§m5¼q»ën»]½ù–I¦6n¡ãV%F&óYwñÚꦟÈú7ëƒÝ RËëi­·”#qKq¦Ý´ÛoŒUh;º¤íïíÕòê•r”'Û³k²{¢G_Ú¯i>jô!:~x³ç13Q›C&,Y­ÀèË×FšíùÓèåòI–¡-ÒR+±F²1‰Çó>"S‚2·Yµ1ú(ŒŒO(q¦ãÜ_ZZ„LÖPVð†ˆ5"%ôˆ©4™Ý’M€Ýj(FÆé¥8N¦í×w,¶G¸ÌîR2Þ÷“â ¬4è¾±Í#{$⢢Öè 02>D«ÄY­žnß¾Í#;‰÷h:B¦Ä ›LŸù±.F&;ûL dñzj‹3ÿ]5žœ¶ûY#ÆhÝ2$4%ãK5µP‹=sW’*ƒL¶kZ·Œ6ÍÈ*z¥a¿˜•å+èÖ“Õ¼2Øéô¢n•’)(”µ—ÚmÝn~¹žA&ô+Aü%ã¾m Oø.S'æ8x8WÏû妛i>aõDÉxó•Bƒè>ß²†fåǺ»*–gRÒÆ†Õ“M¦„ÆÞzÕ>…§Q²io½ï…ßô^¬(YÜý„X>;GQäïÛÆJSFGK°Lµe‹Ì‡GÑQQ´±z¢d|î]¦C^Ú“±5 zd…¹Ö©ˆŒÕDei:kU12¡Ÿ( Vœ&™Ô’´qùÆÀVŠÅ—/5‚ŒÜŒ'%cUAVK÷Îズ¬]EÆ#¥ÁÆ0%cÏMowø£7NJƒ'%còHYËß±‚¤7ûAôoM™ê¼ºˆÇü²·qÝÛd¢ lã$™2­]ŽõÏ&³>—5„óÀ~ÞÇŒÐTü¾.u‘Ý5ŸÛd èÞ8†d¬CSóû|鎳nï›dl“‰úAÛ>œ‡·ÈÔž-Æ’öŸþ‡?}b’ ³–m¤È˜X‘C›T2¾Æ¦û?6›Í¿ý#“Lô9©€*Ý ÓÛ|ˆàÞ¹óöß±ÅÜà£* *NƒLMÑÒm‘›¯ûd…½¢‚W]j@à HBÀî•ïNåds£Éžù5l•º¶®W©-UºAv–dl‡É´2fš·þÃß× kÌN#ìqR²:Ë•À¬ao¤:ùõ~­½(QŒÇ‘_P¥yvb™»î݈Þ˘c®>n²ý½û»GPqy&'x›Š’Ýòfþ.[!y6×$rNó=AFëá(ª¬º?ó˜»C‰jÿÚúP7žh¾£^—AöFdC¤æ†múÚ©öØ57Nšï)²}8~“§Å^ðôî–ÞzÔ‚ÂØäºa÷Ñ|Gî$˜¬ûŠHŒZ¸Çî ·¢5'–'-_QDÈâ$dä%ÔŽ²´A1Ü"T:"“;Ùè¦r÷ªŸmÆOI†ŒíÔhÂÀxC ˆ½tHVñ{&I1ö……ÂxI ³5öñ²–EMEE™l(3Ùpò.ˆ(º¸è¼Å³ºàÃtÌ¢¢B¿iú&ÙTÆ¢¹÷ZšuŽÎµáªs&'éè™{“ =Ld•»…îSqü>Ó3{uŠÚATTh•NÈ|4RUL…2ý u¹ÿð@ë/I 5˹E×TD&Õë˜#ݛقÀVJ~x;7æû¦lûH㎫tD&ø§ZÛ¼5»¥æ°ÅuÇíŒsË™nÐüÂØ(2Í"e>¯6o†F5ñÁc5—Úé¯oEhzZëãÆF õ^´“¦“}g"›¡ùn’Çj6ÚΣð=ü2}T7N6Œí¥2$ZÚôšÇ=1øÂŽc=«¡i@oÖuèÆÉ„}´—ŽÈ´¯ýØÚYLJòŽûôyÿòvÈì[¶–S7N&jIáDÈö¾J6©€ÛQv,dbkÐyߥ»AdïSï<°¹4­zQc#äY 7çï|eëOßßÍd»Ñ„c0Ѩ¨%B@€ŒâwK\Cwý²Åq'ÆNûÛ)•v$Úòª¥'ñ% ©Ü dÞ&‘E>Æ>4)_)ä0ϱK÷¾ÿ¤RÚq2m¢Ñ¡w*IJÈȳ¯ös jª@¦†°êQ¾”Í©ý–ؘ~ß‹@E-bªÜ™/t¡Ð§Ö4Ä箫\ý~}š:ïÝ~H髼ÝêÆ9”ÈLbR#i²IÅœÂuµíÔ£‰8fùùoÊÝxšJÜAc™“üÅ´YK3'6æÈ„sû¹Ä¨+ŽPy¼2h±A™sI“¹t—µ™*ÌQMUµlÈíaÌW›A€L,ûsOÌd‹€ú1%ã¡#×yŒÞîM£h2‘ï™ÍÙ½ŒUPËU< šÿñ‰H‘–/%“UìoÌdKÓ¤#0TH„,6Á£Éä‚Äš__i”âAÖð«=+ô^ÙTYÍn^½3Ùü3²ÌQ”¦äYj Ic#9fAæ¥Ä<Þ«£dCý§‚L›Ñ§ÐÊÈ„0æòËI7sï¢þc9¢Ä¯'‘Kc#y¹Åɸiáʦ€LYD Ä|64™P­¼ádˆ½iÓY¦ 'd¨ ú@€Œß ü&—¨"×ùŽ8¡œ¼›ÊÒ:-_V“ vNæýÊm2µð¿'H[Ž9;z²“ sÙ•íËÚrÑVÃÆM%Nt;ßE¡BZšŒ×“Ïÿ°¶>o£Œ -ÐÈL!“ÆÆFÝ$È@‡clÿkÕ[Aùú*;OØKcCç·ü¸C眃CßÐdæ>Pª'INÐU&™»ÀÉø p3ýhßþS"µÑ'Ôp"TbƒÈTê *J=EƧOçvÖl»¿¸ có}#ÙL‰ ÒÆ"ë4ï9·ü3¬izð’ 3H“qÆb}¹ÜsßýúÍo„ó?Ø·€’vÉD*Ö…‘âÉÜ‹t2?`õ´?܆zL>*pBË”@#^ ä¬0%YÈšo²$˜ÓmÜyÛàÕŒBïÚ½8î¡&—0¿4YÅ"­é/×POÛþÝÊ“i‹D»**;(´BF¶g7)2ÞÆY/àµKõ´tƒ· 6tHYNŒA ´P×Ù2΋æH·;ô¶Ú LOþˌ³¸«ª™”P×)x<Y`í½f²åFá…¬7¯Ó&[¨ë”Lh ²Û–&êÍÞºÿ‰÷êKŒÔJ©^…ÚESºB•&+ínKÉÞwÑÐÚ§¼£h! šO™Ï3NFÍ}DaÔ~µÒ³ºøç#‹rßÜœVçÜ«Óö§w®ùSë´ýïÈ¢\MF¯6äÁ Cé6¦àzŠšEÃxX>‘ÕäG±}+ÄvqT“,}+¼÷Bî02n)2¦½X1ø¢=¹ï¨)õù!=×$Ï„ß4Ÿ,²ýü—i|¾®ÉAÌÓÓó9 #@E“rÈj@Æ¿;»ÜÑ¿ ÃÿôŒ©ê=§g¤ØŠ“’qÓ1žg¬h=æ>>üY]Ñä$BPœd̲<Â?ãFx¹‰f·…×§%ÈZEÆÀÁ;ÿ½j¼¿ªv¯•-”mܨUõŒõ`ØGÑy2cY“VrÝ}hY4ϸQ«ò ÂLéù!æÊ?ãŸf{CwÞµO=+[gdµ¾•åu˜€òéŸr>̦+š\Z»#šܨ ¶Æ^“1MæKÄWš f;î­+š!ÛiµæF­*MšMŒÌù†F–špÿhåÒ¡Ü1YMïQyf.-ñyí+*éˆåEª¢ '4¬2 IDAT±^9ƒÌåÙκÕKK?Ô:݆çÒiûœ“Éñ ÿ$›ÀŠ’á¤@¯\NÐÞðv¥¸e÷ “Uô–8ÙžüðEçR%…y¾ý.KXI49Œì[„=©ÈèU¶šúuw¾ ×Ç/ùÒ'¬o¯;vÁ iÊ>3ÇYºÓ¼[Ÿø“R©KQëu°½ƒ¨$ceMºgÎýì]R˜›ÑÉ‹ÆûLÚŠ¢âùw^IF¥¯Ã‹€M:ãƒd}ÄÉ”õ(ƃ|=aÒ5NV“‹”̵Óù¬šo$Ý”æö£[±–I6AæËèl2—ÿO—*DÇiÛqï\·d²%üƒ| 02¦³¥F7÷g=N; wõqa§®«óò1NRñß ß-ÈW–Ù^“Ñj{?ÕÖ¶:üGÓO6ÕVjÚKZd 'õ ™‘1 LåÙž\¤å~;e[»[*>tŸ7·fAN&Ê/øž}ÙÓ*Ï,²í¬Ÿ¶‹Ð8r›D¹™ÉÆ)š'«ÖÑØÆ—Û.yÆ:MÝN +CHº¨™|f¶R¬4Ùìãn×xü÷¦“£lv;å`ÐI- >¬‹"óÌÚj´©fÝw÷xŠêD² ™«-¥oŸÈUWp¬Qc²År¤Ú‚íæPpCC˜‹a2 C¤;åsªš€°}•J“-¥i‘ Ÿ«þüÍÙZ|=Õ¢P ·ªž)RÑz¡+)ëÖ©Ò$ׄŸÇ`ÔoçæÔòº ~¶`ç=¡ÎÜ.òf·N’QlJöh"ÛÜÎMsÞ>#T®­ö2SÂá?=D6-jÚNo§v¿¹™ÉæTCåÚéžR*Ä2,a;z³Ã#ko†Zýèe==5]!£ƒPiêÞÖ-¹F’ÿôomv8£dápHyxévYï´ìÈB¹©ŽïPÛG:“󟾦¬"#u®üŒ›e9ä2ÞIÇMû¬j¾½ÙÉÉ'º…¨õúòR²Qb dK‘,º“®*mÚæë_ÛC~ÅŠ“¹70;œ12ê¸m¿ß_È^ñnÜLq×~íÛ5ýrßW }0Ù’ÆÄöí±î—…šn[:¢3ܰk7¿Z‹Qè'ÑMw?N’<#5ã8eÔߟ­,×dO§½ºM[ŸÑ8E79âñÝ­DÔ<š´ÍæÛÓ£sïi¨v>¢§ãñ¶¿évd>lhœÏ)M6HØUdD<ßét_™Mì)õANYútl¹#Ù–N¼rÍ)¬Ú|²³&#¥q;V®vþ´ÎÜcHC;Ⱦ¼EÇÆ¯$Âñ=Š":1.!fb²ùUÄ·n(ºÍó¦šî^FoIÿp´aùp|“¼ŽPó¼Ú¹æev…eiÒ•5á¾QÊ~ë¿>ד‹ûÒI¿d£OñLvú I_hNî÷ãšZšl)MR·ÙèÜrþ»K,ÍïQÿ1Í…ÃþƒþG}ó5¢„DÏN,Pq7Õ)²å›ÀtýE¢?¿·Mröǃle“r³Äo7™Dð³Ï) WOŒšD‘<dM=®³±út {AÉÎ ]ÎÄ•8WO®ÍNº¬gtLÀ?ÓÉ6ÕüÒ³¡5Ô²ý W>Ï{—ç-Û„ò ¶ù°0Í&[ž£Ý¥ðÌøºÍ/Ìds½É>¼SÓ8-Û„R”ßž‘-±›ß8ˆä!3¢}k.gÏž÷OÊÕ¦ÛR2¾E쵺üb2Œ6YÏHž‘w+O» ²–3ƒ±vÔÓ›-3.К‡‘U€ŒÊy™gìÓñ]ÜÄÜ'Û¢i™qÆÕ¡'^.Y8¼íý,ÓÒàî‡âØÿ¶žß¤dµÿZAjÌ<ô2wKñyêÛ·wózo˜ÏRîA‰È¨ &ÈðÆóÙÅø¯Æ?lدW'°aÓ6œû¸”¬Yá,²¹Tæ†3ë¦GÙWêYM~p±ÁÕ“ãü9!£yn›ëîñÜ4ÇýyÆÒU~ì<Ï88ÿõXüMÑ< Íù0ý^RnÏ3ÙsEÆdº½W.&£"'‹lnoÓïeði¨?î-*ÿ$/#ãŠÓµCšíÅyv ¿—nÇãsÿGÈ©·ÿMžg¿ÄÈþ."cc!²Ê&›þ žðvª?byö’þŠÓ囨É# ÙÎîád.¬»,²¹Ö71S›šÚÕ!Üóäïh¥o*zÉ‘ÑKkbÙ6ÔWœöí±Ò`I'â)Ì —?gp.AæEà‚3þiÜõöÏî„?ÿBÆæN>eßQÅí!MVK2¯j—“cu+­¿VA2á‘ö>ý±–l:Ië¯'[ (l9ÜÕmjH&ƒrâý¶™ÙÉêÙxbÙª7èÈWˆ›·X6 &‹ä­¿>×b»=ÎíÜP²ß‡Ô¨‚BUš†fL„Ì× ×®»NÀÐeò&½þµ'=í/Ð_Ìfrê†ÒäåYxCiv3Õƒf÷d¯6›¿j µoÑ_¬¤γZ\ š%èÙ°o¾\ >[N~~×­ýÓ†Èx~‡][â§ûÚæ•&"›»'ç·÷tãöåƒ#lK67jY•"«Å¥ðD¨ÍtîôÎÐHC*ËwPn÷ˆìŽmü‚Î$£yÈæ€q˜ê‘—fÍè¯w$_÷`áÞü>ušGÔA ›í¡ê¯ÿój¿qÍ«ðìšÚÀYk“…º2GýhÌP§T>™Fþç‘ðæ=Mv2 n]ŒlÈÂKiW;²÷ÝxÐkíÉnn;[…’Uá8’g ˜E‡# ‹ŠNh]¾Â’áaÎHžyH²6c¢X¦x–»ˆm¡­žsõ„ɈWHnŸåæl -dtQQ«šç§ý™šñ±=ÐE¡R7Mé‘Ì[Ëx²9·Nõ(Q2–M`§f6„ÆíÝÅßÞȳY|‘<óbƒäÑãgœtšÏL…ù‘KYA²9nn¿{.uÍ3wH6û­úyÚi¨p³XÖ÷¹ÍÄNÃy¦81‘%«É¦ž¬ÖG‹<_a iÕßuå‘‘T<Ùž'ĺã²ÿÓ"ÌÜ`!"óScd~…ÜP2Õ|&‡sÓ©Ñžn–‹nÞúŸ»;ôBDj-ò.Š' iæå ›”ÓXsŽË9µLïÛFµ8·ÖV“ù&Îù´·šÑ[l3û’AËK‘‘vœ¾'åÔÜÿw»®î%ˆªhLq22W¿Ö“…s· Ùy×Lwƒ ¯>gÀæÁX̉’I8½òÇ÷ý©šÛ Ø]mdÍT:$# “í8Øyr©À÷½sÿ õý¹ON¶ ¦‘Ø ' 8…d>ó–FÇ·§ôÀNßj#JFÆšƒ/Å,2RšžÌ¿è"ÂO¾Ñw…e£`rŸ …x²ÐÀ!ÙLNõÅâÉ–×?ù%`Âk¾Zñß¶Ãl.Y·Lõj2Ÿy~ëh÷<w— ղހ' æv™1í²%JôñŽ¡¢½â'˜»Ó‘s‘õ&™pšÞÍ]}sx ‡wøo6{³§d•º×3AJA޼xe‰?-+%㸟êS…dKGÖËüÉï󖟦ÒuÙVÜäÉü$CM³W+ØLDM¯ä’‘ÙU~“'{$¢‡S½üqš,ÈL6Õ€¯V4úÝKPÓì•R§’‚O°¸ˆ ɼìî¤øð¬°i*ëñÈBi2· ^äóuÑk!·ñŽ€#;Áë%dùÜ4ÃÜÔ“ùû2$ R.B„OÖðw‹AB>F÷8°ÉœV:ÃëìÎ ™çÈv€±Õ(IÏwj÷вÿÀ»u¹dwÙdsŒÐùf¹sOÑn #Ó®Û˜l¼¯da'Nfг˜£œìÉ!#yæ•Üs~|qv÷2Å™Ôõçï‡cÖ­îîl|ˆä™»`\oÉè{W>4ýE1#îî$R3Ï •{Ž“ñÔy°•XÛÈ%ËÏ³ÏØixIÓ;1™¿×3‹ÌW>Ž´b²L² óL§!µæ‡Ðuib²IjTìgŒ,"h…鯾z²'þ¾fAžñ]€L»‘=,“cd.ÛIqÛm³ò?}dÚ“¤©’cµÓMx§òLèMƇØ#*@*ò>(É3R%dà#£$ð†û˜|kª¦w9²êNÆ…ަ|ž%Èžr2åãÅÉÐ÷é óë¼¹yö dì*©’ ¥ª¤FŒì@“‹)'YÖDÀÀ/Ð’TWæ‹5Nf9*ñ’ôÉuyÆÉö1²ÞR˜,䔩ˆ„¿“EÕ¦vt¢œ³“´—ø»1Çõ¨rÂ"yf–&ÒakŸ2¦8O¿'ëW–¦¯ël¸)ªœ$Ù>'ÈìÒô‰'ÈÀלY`Õ¶c8£R”gáÈÇËV%ÈÌ]nyF™•g”lÈ¢jS*øáJœ<ƒd 5k\Û__I–QÏ™ŸG¢uçeÕG÷Š&7£¹ž,I‹Èôà8œ§^A¦y`ž 2?%ÂÈhÊ 0ÍMÉè‹/ò„¤dþømXˆ†‰×,Í3ã Åü6€ÃÈ‘A©1’5>B@Fåº5‚`XN°™;MëÙ”g€Lûmôð;ö2R{dfž¡Ò|ªØcF`½™|²¢<ó@´Á'ɘö"êŸÎ#ç¶M+ÏîÔAߤ^'dt8¸’däYXˆL†V†;ã%:À®gžŒî¤Ÿî]"ÀáõÞ˜!Αgž ìˆMê€þ@® ÖŠ¶ó›K£(Ïd óLÍ –zþ›ÒèK±9ÙÞåY²ží1™ƒ ÂS¼@†“ñƒ=yÛfSB–0eG’¡™dA‡ÜclP3Iv6~ Ut©Ò´òìÉê(YIžu+Éöø%õ j'#Ï™¿6¥=O±.ŠAV’g12j@ßëÅ’ŒP2´ò0%Ï&2ÿœ¯a÷]sÇFùPàƒ‹„¬÷¤J³fy'‹Î h²žG¥Ù!²=}ÎË#H–T›6YîIHñ¾\2f}a2r7^­Gò,œÃ- ¦Qx2¸ÿtR9q2ò­ÖLµM#Ï|¬p ±X·®AdŸ"2»²š\wç’‚–“%òŒÌÃå"£Éf}'Kɳ$ÙÞßÚ¤Éx·Ž‘óÎq›\.i›(Ïâ(€l‡ÑG"KJ3 mïý­©ñ–1°µa„¬"§ku¹$ÏYbe ÆÀÆCæÙ^¨-$a`Â8›,#Ï¿£@KîÊÉzÔRyVeçYRŸK2RéV”æX7Á¨™Ï*±íÞ í <ï¥ù däÇÅyV"z²ðPb:l lÈ…¬4!ÙçUÉ¥yf¤šC¶…‡Ù¥Y?( Âd_@ž¥MZAF d.µŒ<‹¶MûEdU&Y' â5Ãp´ÉÃ˃•fÜó‘‘Љò,œÃöYEMÂXž“–ïÁ"dkó,Ìß僞!³òŒ’¹xyf‘©r×ëÿÆRdy–´¶ ²ýr€òÌH[¹ŒŒd r¬Ê(Í`qÆòÌc¼ö‹LóÉVÖ3D¶·ÉúwÝg.5B¾ƒ‡_`žõ‡r²xžUá*×ydÁÚtK†}CÇzWšaÔï¶œ,^šU¸º¦4Ã/Ûî›"LF :Dæåö(ï;‹ÅÈšÊEÕ(Y®ÔÀd+òì\ùU¦ŠÌš#d¾ ¤ò¬*γãÞuÌ4™•gäÐ+Û‡/Í£_/Ä—?*2#ÏrÉÆ³ydîà‘_ý•OFKÈBžy-##+±•ad•& ë-`ªÌþžX¯ÎSS5AFpˆÑ¾Ey¦3ÏŸ"V÷JÖa²Pš{ym¸û#w.Nö²‘ñÒÌʳʓéN‹UÏ(™;È(M@É3¸™­ –}†Úf"Ï&^Ÿ@ ÛË´JÃ=øÚ7 +ÏÈùì<«Kɨ±7á[ÚRC{`õ¬bd (éµ]^´0üÔCB‘ÁÝìDžéŸ¡K! {(²zFª}”,'ϲÈüW^dÅŒz–MV—’ÑÁ÷9‹ˆ‡‰e!2ÿÜ3™gºžQ²9WÈâKÄë$ãR#+ÏHÚ/¦æI<ò,yFÈüv­©<«1Y-|¢|™íèÇGæ2Z€—L©<Ïú>—žÔ‰×³CGêCª£2Z€Ï³ÙtV¯Yyæ"gîÒ}{ó:|•Qšþp%Ù^øD§©”îÉôèyÿ‡—UYvžU˜L„<YG‡¯f7‘½û]ñ–gzÂU׳‰ì´Èšýùæø‹þ{œör²Jms\=<Øì–mk9²n%Y-¸Þ4ÉpÛÌ&¯‡<Ë!;ôw·ýëãî¼yÓîÓzf-]ˆ“í!Y ɀϞ'ÛìOC7®äÅ~(ýÛ¿BÛ#%£«=‰v·“õ‘v›fÓvª=U ¿>\G–UšÁ€vU#FvÞlµþñ©ÚíNìØÀ<–f4ÏàWGfÞ2²fsÓŸêOu;’ñU€Öâ5¥9^§ÉN“u›í`Ýd•¦b¿ LÎË3Mæ’#òc/®ÝÜž÷ÝWÄWmV’m³bd.yà·Í œv3Kµ()ZBöŠÙȳªGÆ~˳)†ñ†G’¬ËÈ3×.RdSÊZ9‚õœ¬Ÿûñš<Ë%k9™2Ò-²%üˆÿäDj 2ŸhVž©4]¦A–&##y¦:³È€ÓÞçÙj2a„Œ O‘‘<{¬–‚ÌËëÑ%\Nv`ˆO"–“%™¿”&c]§Ž”&Z‘^#FFR]ðYȘYë ÐÒDë‹V“é© fäÃÀî ƒ¡B¶´¯´–,1UGÈhK‘…œw-_W¯‡É³R²P‡™žH“m­_`B,—,<êzÖk¦*8‘Ì`r§œÌ©¥d\u˜ Ì/d[AæÔ’¨ý×M&ó̉XM–œÞá¶¥Aæ˜iVd!?\ôþE‚ Íó2*Â#d.B=¸vç†cC8ÑŽ$~$ȨӇ& ©Þ 2=Âa.ð0Y8L’ý@¦z·šŒ+VºC_œŒ hBöX¦ºt}ùêm™dáv4¹CÊ>JF^ð^p€a%#p…Nn‡yVN¶ˆ6=žšåÝ>¼mh¨}™d¤ºžÖ’ukÉÂÕ<2w,üÀA A„&w²ÉÂUEæRÃTb¸ô¯€½‰˜k˜’g$Õ¥ô ™ÈS"wãyf‘=–W™;Ó¸ƒ™h»„ n ™KjïÒÐÞî©Á ¡ñ‰F€3P¡4ëpg”¬d ·žEFlhJæ“õlQôŠL{!§ÈñŸÙd¬åDÉ*A–;ä"ú£dXã"²j»–L\&VœMñyZJöœOtÒ·æO4Qñd¹Ãr´‹Éî`j|i']Š;š Ûc²Ç °¥çÏøª'“j5Eæã·Èž&É2ý¼ÄrTJС–Í"h2’+ÉÄUZ¸h¢b ™ìpú(âFm„ì:|²LŸ%¡ŒŒ¼ñcq&,'ªcd·ü'ýž"yí@æ¥A>™ìÖe’ AKoFÓ$ÏècYdûå·ͨ&­ÞRBúÔê5ºà UØÁƒ=LÈÜz$ ìš…¿ñÔœ¤j’ôœ ì…-4ôeZÚ™Ãg`¯¤4™ì´?âCÖÆÈªràPzoLéÊÈ‚´L‘Eº(lrKÝéÖàÿ%ñ ( s•Mët›'4¢áÇiy6Ø ‡‚òÉÀêqÄ3t›ª×¿ÈË1ä*¤bd[ŽC`¡ïå雜l‚Lï¢?—cÈ3îÈÀP0·u8À>(#C^Ž9dî"šN{ó$üØ…É;Yp(¨€L¦G¯}¸ÖñÒ;!™!:¦º+[Fé°–v ÅÙm°•KM üµK'¤bdwâoïߨgS §›>ü|† “ïjW¡COÆ\ÙS}‡4·™Ül6u7=”96¿–L›ÛÆ¢ÒOö“ÍÆèLч>^%d¤&Js›O86a>øt³ÁõŸ÷K¡¿Rý˜d.¯"ÞYŠðgž_`Æ€ZSa2j·¯#ÛÏQºøÅ„Óa@úÇŸþíá_Ü0Yo«3VÌ{26ÄÈ^È[µ¹-æ.Ç-V§ð†ÆÅ 좑‘§jA&êùa!«³Èðêo_DEdÒÜVNïO`ö¤"S›DS!2êÌÉÜ-ÚÜV¶Ýl¾´W' ï/‚³6™»;fn§—íðÀÞ„ˆ#´*—ç<"£bg!óy™ ƒ•>y-=¿›EV)2_9s>¿LŸ7 B#DÈöŠL™Û9{¸ð¹EF Ö噸z"‹ÍD&éPàƒ¦D䔑éoTùÒÎüñTà#FD`’ÕËAÄÜÎX¿Oñ¦¿H¼ O\Hv+É«"ðÁ!òl™—‘Ž@Ö×gqôì­™ðC‡d‘Ž@Æêeøè(}+bñ¸Ô ɤ¹]FÖ2AKë(pv‰ù‚ŽŒ»g¬w%ásfšdî°lÑFÁ4ˆøè L`’4pv$A²HG L¥ÂȨóžLQ2O¤#P¦Ò?©ÈçTçg—B2¹â#kËDø8ú3Læ#dþžÈ¸{™Jç7?I‘üXGäsÙûìf’ÝhïI±ö’‘ù¯ý)ÕÈÙ.Ë^)IÃBã¥dËs9~7:Ü[¿KIŒÌK–@¦Ìí"•Îû€Ô-¤Eô„ ~7%d\•a2Ÿ}|`Ï «ü)÷F>Ö¨[¨b>ü¥%óö!“ævÔ-T„ÿ³b?)Ù>w¢ú£»IDATÕdÞîÕr0ÔÞ•ÎmmëCIs»D¥óî s]"î&>L‹ÉÀ†¬@qò[-²ýrÀ‡9™Ò¤F(£¶@qòA5æºDŽlßgáÃ? ¨!cdhŒMµù}á‡$sÏÆ:M•K&<¾h5@d|`“¡Ê¨LÇü¾°pÅ¡R½d‘Ý«ÈòÕ“˜i§â½ÄȼУ]ûùRåÏd«§ÿy‡}ZYd´,d!§²Õ“É”L71µß'«–Ú¨§?zǶdÎs4¯Ñz”R2gÔ†xsÕ“ð’cõ“ßsЬµÓRvS'sùŠ&W=½_³ŸLÚ µôº$_ŽÐ;-e÷ž„ãU›ho#1|–&SÒ¹êIº‰22B‘Gæî¢e:6" #H?išÕ¨»'óFä®…6ØZ™ê饨ÑÌ¡¢.%»wmeÄ™êé™H)IV÷,p2?˜«k(ñÌÍSOÒ­• Ô©“»+s2Ô¸“d™êIhM¦:h%ÌëK=rOšV–PŽÝô7$Û÷,p2dnk2™0(¯VúuêâdÞ¾ÔV u?qÀ =­ØxêÔÉ}ìÓdK>Ò=q¤äMLÖ ®S‚Ì]ÕF-݇&béÔÊ*'Cæö i®Ð1Zµ„áYM~è`鳪ÈÜãúQ"ÅršÔM1;@ë«á3Aæ x)‚c9´ À+f;éÊ’$«Nò‘dB†ØP‹+Ø3Ú,› ì…Dš+^OÁAÄ-¼Þ¡®“¤d2—CÚy W ×ð°z‡ºNq2ðq;Ÿ¤nè…`2(×iÞj. ‹8)Y¸j½V’½ŒkZCæâ¤3 I±¡WðlF]'1$É\6— ª-“vÐFž`‚–¦¾`3ÉÀü#•);¨Q €uk€1Ÿ$kH-Õk)±qRÅͤ5}ᬠ[i¯,%6´×/L†db(H’!§ö…Œ M«”Yþø¬ü馘¹d/ÔÞ¿‡Ki8iÅÊàv¹d¤%:2ÒÔvX)ÀÎÐ sÉNêÀÓ²µøQk¬ááDȸ—£"C›–ºx¨¬˰H$š[xU“ µ;’O’¹õþ¬@¸÷–`AVÃÈH%é$ÈÂW4­ÄzV-ðûåãGTg“¹Iö»s´á£…šžTBó+$¡™V=‚ }'Æ‘Ñ ´¸Õ…#h¸|ÖŽ4CO&‡‚™»N»J5ˆÝ&ƒkx8]—K†¾,¢>Ž5%U[dpu/àËÈBŽmøa6¸ ‹WKò¬T}L’§võ¡§1˜M.•ä‚–f )2¸e£^×ÑGT˜Ü¢¥dÁét Ùr®©èÆb…®áù}ö(…dûYpW縆A+o{k Ûo°dáövêc‹&©UŽŒ± ÕÊ}ÿ /Èâj–BÜ¡“ ݹœãÕ­ð×°¡¬ryYÈÝZãâβŽ÷hh#÷e”OFj•«¥|b)¡3^+# M:¶²E'!rjw2G¼9¸ W’ÑÞ¸“$™Š(N×LùÄf«õãÉX^$:4Ô«Ð?À—/² ,¶êœ˜Ø<ÈÖi®”³{Ä drX#B§Ëh1±©D×ÁZ‘%æ`©ï^•M†\ÇÝ9AÖ q¶²Lº_ólY¨U®0¤ÃêaóMò«Û Ãl ¯D[^…rð@‘±^Ô=.'6› iНæJɈ{Ä*²Pã,²!ÓnÂíö‚D!4hÇ5´$Y°È_w:Êù–°:¸1W½ªÁS6@âI“ùÇô·hµGÐa@{2|¾1«¿Ô ‰ÈÁƒðžÒ~7ÓêÍŸù'ÿIlq©œÛcÃ]þ(IìÍÀè =ÔøÚ-ǵÚåÄÄÕÝ%d;pôååøÝ´ XlpH´Yª!ƒPBZÕ@ÖIÅCÒ™ÀbCÊRhP%Þ5M¶G®~áÉàÿëðÆSÀTÚ‡š›& å­É —H:²Šÿ¦ò!8ª‹›Ù8ºß/iÔ+ÀÔp3ô*Ì ot¯Ž —H.AŽnÑñ…d… ™ø Éô÷ÃYà9©£’U >ȦIs‡lÞš& -‡8D»£5drœV‰•dAVû6Y´ÑE#ªmFR h2mü£¢å~.šÿ¦¢‡hé4114™è£d9{Fã /_DV©£ÂüSM“éÏ*2²kf¨žÀ›5;HœÖüet‹¬ö‡Z¹¯PjÃZÚŠ´`Ê# ÚûŒVÅdÒ“IžÀ£:ušŒ–ðvÞçµ\ Hg&­CÉæ…˜‚¢ò>£å¢V6MörÁHÎ #ʬ¾*'SÝÆšüuPuYx§ðž±hÍ÷ÔV™Œ,¼hYhɾ¦+5¯Íœ¤ÃÅÒdÄì ‘x [¬”·ÔiÕudá=ˆJß˃ܠÜph®“’Í! ÷ÝᎲœ/IгÌ9iq¤É£D¥; Â?À^±´Þ‘È! ­„¨tïcUHv– €IDb ä…Š€úëkqÇp¬Ä –é¡5èJ&Y(ƒB¦FáY—5$²&#z"ä¼Ïª2¦«kܨJç‘…f곪L iÿ!¦FÉŒxI›ôÒýUE$è9m–çDtæ‘ü}Ϧ*!ÓÃ}´¡:ËÉÜÉ"¦å,Ô[%‡Œ.QðG¾IYhzv–oïÈÀwÍ£dhqp‰@;¨ ñˆ”ôÚL¶—,hzN‘‰3àI–K†gx“ûÇ£ yßÅÉ€¯RO ±@lœtɳ‘^B¦MZDVùC’}>‘;ŒÄ³!"Û²Èð–À¾zå‹ äÀZ6©²`)ú4!óÅ`|ÔP˜üµ´Ÿs6±ÞGž@á9¤€ ÅÈ´ctO[xÔ-4„®~Ü鉃*’MæãÌlœŸ&Ý[X¡cdhaMßT>ö¼&ð}P˜Â¯ÜG‰LZD†#‘ÔßI‚ás4­Èl ´3Oœ -à¢ù±«}—ÀIöR`Ñ{‚Œˆfòph=yM¹; ïmBVg‘¡Å•ôuU…ÏÑT,¯è$ÐX&"Û£'‚ÀÎj/¡»cE‘æ Ç)ÿOVPNCSÌ5ýE”.d`kžÕŠ -­x=“›ÀpL‘zO^kô?fièp†ŽhÜê$Íõ\DKbì«…_0ÀÂäBƒ6`8¦ÈBŽ7álsÛwO¢`Gè½Ágí(êù2úHÈjÀlâ¥ùú#ì¼ÄgíhÃ1E‡_úõîásì¾ÁGFÏYÇÈŒªI*Éégãdϰ+ïÜP2`8®#Ó úD¤øºíU‹²‘QA§ñFÜ“ú±7µ„°Ó©¤@÷'ÈH–SÛÊp'wqfyÕ’öÇX\ôÃ8X8GÒ1¼„Ä„:%«ÊÉèPBM‰§QÿeO•”L6ôîò¸•-S8*¦ºIÙ"ó ’‘ºIl=ÖW<ÚÅix•K1jE"#’A_tn6SØ^år|ËØw2AFn$µÅ|°L¡Æ*h1&ˆ=DdôˆÞ`x²ŽV–‰쇙"#‘vÊ/ÚÍæç{ZÓ㱩ÌD”$#¯ÃÛÖû›ÍßÏšY&ûöÉå툌VÜÅ›žDåùÒ'Â}“63dj@2*øpGjº²ÙüÜ{òɈ_­ÈZ· ‹$à Zv¤Ú#:â¾*Çݨ «&lü”¬dj½ìfà µw#Y&Ÿ¦ùE3$£Š#$¥FGÿã/…ŸG]‘›Šÿ¦j3Ÿ,<õœ¡ÒH?¥ÞÇ Wdé FÞ¡€,Ô1ó_ÝØßœúÞGý?ùoMNÒ6˜œG Û½¬V}@ßí¨ïôŸžCX`‚Èð×åYhÑ²Ž ˆ¡ `*Â¥fÒ’jÓ ó·~Ê:€ÌçÚ Òä6Q—è7 Èè­É-oºCj}À¤NR¡c2C¥—º‘Ð 'ÒŒ—'!IF^(gw1+H‰C…H™U= ÝHhŒòѤÚÄdl­Ô>ûÅù ö‹¢}:\˜ ®/+ÿˆXÊ ¼d -6f¬Õk¨Æ ü0“jÓ £+,iÉV븀ÊÅF ˜ÌsHlÆcÕX}©à3I2övkÉT`›íá3˜Œ¶iòºñÍx"A6f\ô˜Ìè çκª UÁ†{–AF¤B¬ÀY#ž MÀE˜ÌPœkņ®Ÿ´Å-˜Ìèq®ÀAŽ‘=ÎŒM aÐ/”ìÓ™d†â\µ UÏ´ °æÝ Å™9SLä5EUæCs°D´î>e=!š¡,2¸5A¿RlèÚ™î9™dp;‡~¥ØÐ €™¦F”™eØ­jœ:£Ïɰ`ŠsNצ0mï–9jYŠsN~aôÅ-kƒŒZ&ìÑÔ€ `’Õá˜ÙÑ öpP}^¾Vý0ÈLûÉÞ]Ì àeh>]@Æ?×}ùZ,Ncvü 2SjÿT@.1éþI{6ÓÍ1àFÄzµñœ•™ßjS*€ÐSæ *‹Œš)ÜkL' ïÑ °É¨c¥´Ï‰d3míæˆ„EF`Ú¥‹ŽÆê€ÞÄŒœ‹Ìß2§¼Œˆ€T 4æâ{‹ÌÖ¹Y΄>t¨‹š#hM2¦žXä…²6áDc/‡³ÈlÛ®¹y•Ïw¤¤4öدEFû \ƶYÕU³¦ÂÇ<˜ÉØïu0#Cñ×ú³hÁõåIë‚­tKÌ ¸·"íLØ‹hM2S D÷óáÜòdó`’Q™#|@ *ôw¡QÛkÍTè#BNǽÏhÀžMôEí]NL2šÍB·Å½ÏØÈšc=[8šd´jŠñJ¼™)Œ½mP‘!“,²)?Za‚§Ø­©HTvöÛd>C®D{šæô=eÌ$˜dT=É7+™PøUì‰F"›œ˜dlë{¹åOžÜ8áRg¿ðŽ)ØiPƒ@ÔS¸?4ˆfíZĶ Í#SRíM«^#Àm"ó’6¥‘¤œ§p2ÆÍiÕˆl'e“Ñê »YÅid,ç‹ä½MÆôî^\Ä+X°è©Ðˆmð!Ûãã)œÓ=(«Äi\±ý‡l2:„¦ì»vó^kìš%EëlSÙDÈŽÁrçõÁh™|J!¶ùŠMÆ”€žÒJéN£eŠ­?"Ød]Ô$°½S—',_4îd}1ð!9ÄÞy¾U6¶;^DÆeµµ·vßÍñZ²˜YT1Ù!£/²=æ¡÷ïó]ë®yå{g¬Ñ‰e×çQ¨ÛF%uÂb¾²ì‰)kšÑ©¢L2h®XÒ4¶]3ƒá¿Î&ë’&Ì´¡#v%½÷ˆõ5èƒpü¡Ó ¯G·òÚŒ’5͸GgŒ ï IÃAUõÿxÍ26Òý»ÕZ²t÷ë,ªÔ딓4kšñIùmÔÆØà.”i“»•óŘ 'c~78½–¸Þ¿Lƒñ¦w5’ÕÁZ’6Âü§ýë¯o¾6ƒÅêÒ*øÑz2jo›Û·lXØGã ád#c¢Ö^-ä±¾’às 7ðµ¶&ñ«R\ý§lr4áÌ–MÓ¾?ÜüÌÑ?IqBeO~%¶.޾¨±ÃáêÀ'ᣖF‚ŒÖ­õþÇ!ð¹Î„z”Œu§/X¶à›éNmÖ%£ù}ɲøghFÉXÝZ¿lÁ³°jÖTñ»£dLY®_¶àŸ°J}À!JÖTäÇZÿãø$_*¾(ß~´^ äwBI•A”Œ‰Ú‹Å†˜ãKÕÛ¸J¹Ø‘.Í’NÃq2šãù›ÅW³¤|Œ“1RìE%#«é¯äæõñä¸#á~N¢š%õpœŒ»ëU+xBÓï }ž$«iÔ—iN1“nœBœ¬©È 'ï§ýùãdüù‹§˜yL¯¸Lñ+Ö¹ f¡Ò•6! Ù%S~ÿ8m"'ÈX *vq$An;–Îÿ²ÕËêz=¹—ž MñM+×7Y˜KmRd5ýµvYž…Ê ²¦¢¿Ö.«ë;Y˜U6AÆÅÎjãñ,‡!3šy‚Œ×‡ÕúI}Ì:ÃnIÝÂJamPÛŽåØz)2î¼ÒDSâä¨àTZÜXY§Ÿ:5ΜS-Rd\‹¬X…Ò£mÇršRŠŒ ´uÆ£YËÑÀ)²¦b¿Ö4ΗzP9§¿Ÿ"ãmÕâj½íWV7,E&ÜŠÆ ¼²LƒdRüõVè'àÙ‘U]“d¼J¬0Ñ€sSVO’q–¹Ù6 h¦1«N$oâ­\?¡mï²ÚQ’L À®Bé?Sêy¶q’¬©ØÏ¢ÅCø0 ›'¯“drq@Q_àŸ=GÓ°yf^’L.(’h¯ˆ&óDO:!¹8 ±Ÿ/¿nû˜§HÒdBÇå»à÷öÊÜ¢ M&†“ò]ð§,«õÙL³ M&êkgû¯ÈÐýt5Éü’sšL¶ñ¹·ÝÎI“Éñ¤cfq޵ ÖõLK*M&+ì9Wn µ¬B§3ß,#™u.øýëwñüuîÐe™43åÆiƒ=çrûdr}èDÓ¥*·ÿ•A&‡刓ñ”åí’ÛgÍ Sò'ÿÿÜÚ3»““AÖTâ„Ù Á/:=á- Æî3ÈÔykïú乻Ŋ8Û^ÏNŠÃܸzqŽy‡fû}䩚aî\íBkû.e÷ sÈtk:$¬´÷m‡Úì^~™.€&îÏqÛΟ¿Í!fKØ(´S×Là1äÙ䨆ŠôK‘HíXó;ù9dH\ê?e§?šR,ŸÉŸ»Ê2iPݰ]-ŸÅ|äò=e²ÈPtg«4†1…‚ч,28çm¸ôþwQ?Ì‚Iµ,2Ø©ÁúìçÇX–}U1ç&ÜÔlð9üaÂuµ`ò6‹ ÛÞþøœr-˜PÈ"3lªÚ:O~g«Ë#ZOf½êèIûÆ{î×”añ5Š%£öyd'#½ ægãÕc†?yÑLG™iî¸Ûö›‰xJf‡òÈl1t¦`ª©®K­äÞHÍýÜs½ñ<MÉøsæ[<ÚÛ×þé_ÈØ×} EÓV™d—;†Ž¡hž#“ì!¼¶ §G3ÉÂk»Ðß#“ì÷–µ‘ä¶ãKÝ/ÇP6–›âj÷ÊfásÉ.ñðZB¡OEîÝ+öq”¡`o¦1ä’=@(œÍÎáË›@á~‹Ù ^¬J]w²o¿¸ V³|²Kœ§PºKk6ÙÅËJ}Šò ½“ãŠ=Äòï¿P ”Ì>N!ŸìÂ&P¶Ae_BVîDÂÚ—>}çeM kW&òÉV>c å;;´˜âÝ|/{¸€lņÖ>”oì\Bv‰!ô0›a[a­7íŠeF™q³^ÖvÅ2£Œl7íJíŒ1”­77Ö4ž² Ì¥R¯x¦èæ}ycXÕvŠžYѦ°JÞ‘[2KXe¦‘Á½ƒsÙ¯y¨èîRÿË9¬ë«–‘•ù_^öTY–•õZžXg¤”vOW$²²v>UàéÃÊ]H–çGÅÚ·é‹ÉV kìŒ1”ÖkÏM;¬Éæ1”’•§³²0‹Érw´váužÅ-:¹•©e.è4¡ÒJ‹³¼b.¡˜¬-¶æf°ÉPž×9^Ž!¨•›Ù¡üÁóæòoŽ8¦B9Y›žú ÁÜ 6Vdö1¿êБ£Z,¬Z(—Ý<#.rɰ¦‚seZÁ;è°†,¶/( Ø ?3¬jÔǼF`¬\È «È†Lû…}ò®g)—xX'Oåù‰åSžÖ‘ui–6½‡b<¬TMÂij̱R«D„µjí}äJÂysaY®'ëbÕ»Ó~veÌ.¬6ÎÑM­£›Ôæ…õ£Â-µIm^XOÖàšôêÕF{f® Œ¤?Sµÿ|ÜÐ=íS˜.q)8©öú?ÿlv‘»i—uÁ­÷ñ)|ç¦þB7Œv£Ã—þÑÀ]è Ò(°çƒÕ_ìºÂrí­OþüÃ@Máb§šãÃH/Âãí‹ W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òp%+W²òðo.Ùÿ„‚8wÁßitIMEÒ( ¦² IEND®B`‚leptonica-1.70/prog/testscore.na0000444000175000017500000000060610613043266015010 0ustar dandan Numa Version 1 Number of numbers = 15 [0] = 9090650.000000 [1] = 1837561.000000 [2] = 1648841.000000 [3] = 3320445.000000 [4] = 2573805.000000 [5] = 4926207.000000 [6] = 6150297.000000 [7] = 7065168.000000 [8] = 8679735.000000 [9] = 8093272.000000 [10] = 9742700.000000 [11] = 9711060.000000 [12] = 9275647.000000 [13] = 9825966.000000 [14] = 9559469.000000 leptonica-1.70/prog/ptra2_reg.c0000644000175000017500000002050512240302547014506 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ptra2_reg.c * * Testing: * - basic ptra and ptraa operations * - bin sort using ptra * - boxaEqual() and pixaEqual() */ #include "allheaders.h" void BoxaSortTest(const char *fname, l_int32 index, const char *text); void PixaSortTest(const char *fname, l_int32 index, const char *text); int main(int argc, char **argv) { BoxaSortTest("feyn-fract.tif", 1, "Boxa sort test on small image"); BoxaSortTest("feyn.tif", 2, "Boxa sort test on large image"); PixaSortTest("feyn-fract.tif", 3, "Pixa sort test on small image"); PixaSortTest("feyn.tif", 4, "Pixa sort test on large image"); return 0; } void BoxaSortTest(const char *fname, l_int32 index, const char *text) { l_int32 i, n, m, imax, w, h, x, count, same; BOX *box; BOXA *boxa, *boxa1, *boxa2, *boxa3; NUMA *na, *nad1, *nad2, *nad3, *naindex; PIX *pixs; L_PTRA *pa, *pad, *paindex; L_PTRAA *paa; char buf[256]; fprintf(stderr, "\nTest %d: %s\n", index, text); pixs = pixRead(fname); boxa = pixConnComp(pixs, NULL, 8); /* Sort by x */ boxa1 = boxaSort(boxa, L_SORT_BY_X, L_SORT_INCREASING, &nad1); sprintf(buf, "/tmp/junkboxa1.%d.ba", index); boxaWrite(buf, boxa1); sprintf(buf, "/tmp/junknad1.%d.na", index); numaWrite(buf, nad1); startTimer(); boxa2 = boxaBinSort(boxa, L_SORT_BY_X, L_SORT_INCREASING, &nad2); sprintf(buf, "/tmp/junkboxa2.%d.ba", index); boxaWrite(buf, boxa2); sprintf(buf, "/tmp/junknad2.%d.na", index); numaWrite(buf, nad2); boxaEqual(boxa1, boxa2, 0, &naindex, &same); if (same) fprintf(stderr, "boxa1 and boxa2 are identical\n"); else fprintf(stderr, "boxa1 and boxa2 are not identical\n"); numaDestroy(&naindex); boxaEqual(boxa1, boxa2, 2, &naindex, &same); if (same) fprintf(stderr, "boxa1 and boxa2 are same at maxdiff = 2\n"); else fprintf(stderr, "boxa1 and boxa2 differ at maxdiff = 2\n"); sprintf(buf, "/tmp/junknaindex.%d.na", index); numaWrite(buf, naindex); numaDestroy(&naindex); boxaDestroy(&boxa1); numaDestroy(&nad1); numaDestroy(&nad2); /* Now do this stuff with ptra and ptraa */ /* First, store the boxes in a ptraa, where each ptra contains * the boxes, and store the sort index in a ptra of numa */ startTimer(); pixGetDimensions(pixs, &w, &h, NULL); paa = ptraaCreate(w); paindex = ptraCreate(w); n = boxaGetCount(boxa); fprintf(stderr, "n = %d\n", n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, NULL, NULL, NULL); pa = ptraaGetPtra(paa, x, L_HANDLE_ONLY); na = (NUMA *)ptraGetPtrToItem(paindex, x); if (!pa) { /* na also needs to be made */ pa = ptraCreate(1); ptraaInsertPtra(paa, x, pa); na = numaCreate(1); ptraInsert(paindex, x, na, L_MIN_DOWNSHIFT); } ptraAdd(pa, box); numaAddNumber(na, i); } ptraGetActualCount(paindex, &count); fprintf(stderr, "count = %d\n", count); /* Flatten the ptraa to a ptra containing all the boxes * in sorted order, and put them in a boxa */ pad = ptraaFlattenToPtra(paa); ptraaDestroy(&paa, FALSE, FALSE); ptraGetActualCount(pad, &m); if (m != n) fprintf(stderr, "n(orig) = %d, m(new) = %d\n", n, m); boxa3 = boxaCreate(m); for (i = 0; i < m; i++) { box = (BOX *)ptraRemove(pad, i, L_NO_COMPACTION); boxaAddBox(boxa3, box, L_INSERT); } ptraDestroy(&pad, FALSE, FALSE); /* Extract the data from the ptra of Numa, putting it into * a single Numa */ ptraGetMaxIndex(paindex, &imax); nad3 = numaCreate(0); fprintf(stderr, "imax = %d\n", imax); for (i = 0; i <= imax; i++) { na = (NUMA *)ptraRemove(paindex, i, L_NO_COMPACTION); numaJoin(nad3, na, 0, -1); numaDestroy(&na); } fprintf(stderr, "Time for sort: %7.3f sec\n", stopTimer()); sprintf(buf, "/tmp/junkboxa3.%d.ba", index); boxaWrite(buf, boxa3); sprintf(buf, "/tmp/junknad3.%d.na", index); numaWrite(buf, nad3); boxaDestroy(&boxa2); boxaDestroy(&boxa3); numaDestroy(&nad3); ptraDestroy(&paindex, FALSE, FALSE); pixDestroy(&pixs); boxaDestroy(&boxa); return; } void PixaSortTest(const char *fname, l_int32 index, const char *text) { l_int32 same; BOXA *boxa, *boxa1, *boxa2; NUMA *nap1, *nap2, *naindex; PIX *pixs; PIXA *pixa, *pixa1, *pixa2; char buf[256]; fprintf(stderr, "\nTest %d: %s\n", index, text); pixs = pixRead(fname); boxa = pixConnComp(pixs, &pixa, 8); startTimer(); pixa1 = pixaSort(pixa, L_SORT_BY_X, L_SORT_INCREASING, &nap1, L_CLONE); fprintf(stderr, "Time for pixa sort: %7.3f sec\n", stopTimer()); boxa1 = pixaGetBoxa(pixa1, L_CLONE); sprintf(buf, "/tmp/junkbap1.%d.ba", index); boxaWrite(buf, boxa1); sprintf(buf, "/tmp/junknap1.%d.na", index); numaWrite(buf, nap1); sprintf(buf, "/tmp/junkpixa1.%d.pa", index); pixaWrite(buf, pixa1); startTimer(); pixa2 = pixaBinSort(pixa, L_SORT_BY_X, L_SORT_INCREASING, &nap2, L_CLONE); fprintf(stderr, "Time for pixa sort: %7.3f sec\n", stopTimer()); boxa2 = pixaGetBoxa(pixa2, L_CLONE); sprintf(buf, "/tmp/junkbap2.%d.ba", index); boxaWrite(buf, boxa2); sprintf(buf, "/tmp/junknap2.%d.na", index); numaWrite(buf, nap2); sprintf(buf, "/tmp/junkpixa2.%d.pa", index); pixaWrite(buf, pixa2); startTimer(); boxaEqual(boxa1, boxa2, 0, &naindex, &same); fprintf(stderr, "Time for boxaEqual: %7.3f sec\n", stopTimer()); if (same) fprintf(stderr, "boxa1 and boxa2 are identical\n"); else fprintf(stderr, "boxa1 and boxa2 are not identical\n"); numaDestroy(&naindex); boxaEqual(boxa1, boxa2, 3, &naindex, &same); if (same) fprintf(stderr, "boxa1 and boxa2 are same at maxdiff = 3\n"); else fprintf(stderr, "boxa1 and boxa2 differ at maxdiff = 3\n"); numaDestroy(&naindex); startTimer(); pixaEqual(pixa1, pixa2, 0, &naindex, &same); fprintf(stderr, "Time for pixaEqual: %7.3f sec\n", stopTimer()); if (same) fprintf(stderr, "pixa1 and pixa2 are identical\n"); else fprintf(stderr, "pixa1 and pixa2 are not identical\n"); numaDestroy(&naindex); pixaEqual(pixa1, pixa2, 3, &naindex, &same); if (same) fprintf(stderr, "pixa1 and pixa2 are same at maxdiff = 3\n"); else fprintf(stderr, "pixa1 and pixa2 differ at maxdiff = 3\n"); numaDestroy(&naindex); boxaDestroy(&boxa); boxaDestroy(&boxa1); boxaDestroy(&boxa2); numaDestroy(&nap1); numaDestroy(&nap2); pixaDestroy(&pixa); pixaDestroy(&pixa1); pixaDestroy(&pixa2); pixDestroy(&pixs); return; } leptonica-1.70/prog/w91frag.jpg0000444000175000017500000041447310234634063014452 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ tLÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?õÔm¬sÎççõF{⣠ѣ$‘ÈÁö¡rÏ¿ çNvü¹#ž>\ÔŠ¼g$þTÜF$ôéLó¶H “ƒÁõ¤y0ƒ9ôô¤EóFrHùSþ‰0ëCRüŠ™ÎÖ{T{ò”|¬=i›]Èvl óÍ,äÄJí+œR¼˜€}GJnTºŽ2@4¤…\Žçªg%†3ÇÞœ‚ =ɨ÷~ù³ƒÉýi¯¢œ Éã5"9Xò:2 .ìÛŠŽÔyûÀ$qÎ3Þ“Îc#…˜Ò[Î Y=ñÞžù-¹˜ƒÜQ.w*<ûÔÎW ò:cõ¨p#lç!‡eêÑØÛM}>ï..Ø^@j 'V‡Y·6âæ$#ÎB›Áî=G5u.`™™–MàeNpGjƒí¶’\-°ž—<Ǽnüª‹x‚Äëë¦Ñ\@V€l œ•¡$…zŒÆ[‚=˜n/*›o$ÔΩÌdWPHùHÀ§¬Ë&JŽ>÷ÊrMJ¡šE qßŒŠ›w˜ØÁ@ç4Á(ò°rª§#ò)ÍÖ9T’ÎèzÒ}¡e…ãü§ °5[IÓtý"6vë“—ÚNÞ£»Òl5+乸·Vš/õo¹”¯Ó¬Û̸2dŠE*Ý û@|cã½$Ø «w¦E4m•A'Ô6ó¬³''?N*k±2²¨.1Éj5›Ì€¸USëŒt& ·[VÔf¼DÍË(C!ç¦>QÎ=ð*W•£˜ ryíN‘ó"FŠ9<’8Ǩ§Éó …ÎTö¨‚ERÈÁb}Ïù榉¿r\yƒ$/ ÷ü3QË&ÔGØJ–Èù…@.‰ó$T2 ß(8ð¨L­»Íå`Æ@=(¹–9m‰TÚO p?•déºtrÏt’M<̇ç•÷è8õ­;id€ŠJÝE:æy]Æ0¸þ,j&U{±wîb~`>_óÍBÑŸ´&ÈŠHN . U‹a4Û£]øÁ9õïIw!XÁÉeCÀ `{UXer:DèT ޼bŸ4±ºEm6À’ ”ôÇjz%¬GËHãòr¡FyíÒ˜Övd[x dç@ç§¥W{<îe‚š?™AAújÅÓ4·óî.>Ïpfr麇=‰í[/^Ú¡¹†9ÆåÜ? ŒÙZ³6p.õ@P ÷Ù,¼©£ŽÒ3Nc ÁÁêET¹±²Ùæ-œ"%9Á@:ÿú¨Ù§M§4ièÏï<²¼'¯Ò¢[ ao"Ejd‚9>•LéÂ1‰63Ç8ÿ8­EŠ{jcùŸ.Ÿ̲Έò—qOøUMKFͺÅc @3n'œÓÒÆ;ka7•²p@~{tçµT³Ò<¹¤7°« r„“·õ«“[ZÍVˆ4HÕÚ~SøUAkj X…¸ºç?7½Cö T˜ܼŽO­ mWŠ#¸œsØqNK dHÜs·æ Äã4öu™O àÕ!om‰™b2rpMKýž®‘gÆ2'"­*£!pÍÈÇ¡¥*0ˆ ‘N;B« ç SQ”]]xà8h•‰›$‘Ô f£ýÊ Ì;“ž´±.ûJqõ"´aHŠÌr0X€?Z»‰ãܰé ÿõÙ[ægž¸'¨©¤º\( Nîb¢Ü’±ÂŸ—îàô¥17ß–NGoi!Á£‘ˆàcñ©YÎШ6íàñJ¨Ctlžâ¡œDÄ‚ûGOzV¶ýÚ `œäž´©’ÇqB1À=³S"ïEÛÊIÎy¨$?;‚Ä–SÐ Š$w>xç$ûô§D9¼¶SwëL“lhß¼R±ãç5$ŒX¨8Âõ!ª2 M÷Žà ¨µ5åv\‡yþßÊ£ŠYGbY8õ*% œ¿éß§Ö§}¸-³ýâßáU–RòÊxÎzÒù‚<»nŽ2Fy¤Ver cÓ SZMæ, ÊOcV]örr{þT$›˜,l1×8êqRó¢¶I9Sÿ‹hÉ8§uL7\ô¨ Ê»°ŒsŠÁñˆd𮣴d g“׃NÐ좿ðf àˆÍ¬`íb¹q\—†¥:wÃínâ&ÚÑÍ>̘UkøâµøOeubéY'Y€ù·—äçñ­KéþÑã ÈËó5¼®~¥+· ‘óãòÐêzt–Ð\ü±I¼6ô Ç«Âqö5åÏödÁmfò¦Më¹O¯Óõj×Å)tš¤qYIX‚]$e¿¿·Z­'‰­Mµ¢%œÒ\Ü'ö}ê…S±$œsŽ*FñžŸý&¦Üyhþ\ˆJ7¿oƧÑuµ™å+kw\8ySj¸#µh¿ú<¼Á‚;ަ¹Í[]žËÄ~ž–ÒJ&%Ü€ uÁá­eË|š_Ä7™­î ¦L1‚äúvé]5Ÿˆ4Û½&]TJÑD®T‡_˜7\zôéëIoâ [Ëűtš ›Ò9ÐãÔcг.øÌjH•U¨ü;ÖCxËEûÞGÚˆr¶§$öûi–Ie#\’.+"FYsÜôëJÕ“wcs+²^DòF…€¸=½è‚öÆöeÏŒŠÄ*@õ¦¦£cqyöîc-Œá[œŽßýjeÕÝ¥º$2\¥¬¡hr? dèwוœ·W–7!v(äUûÃ"éR®£†nyxQëøÔ‰*$\_D¯µI…'ãùÔÈ.aßþfÆÛ˜Ê9<ÔÜÇh·Nï²Å»úœÖî©$ú!½´#(yÜ{g*KIˬxt/"†`¨úS {™n®Uš/$1°l°íÏ4²4ÒKmDÀR¤ã½!‘—`“Ñ —Ž•!ˇç'õ¦¬{»·)Î ëžÜSÙ÷eÔ¡xÒ!‰ðH(1ÛɤPr!Wóšç¼dßñHj¥Ë@ØçÚ¢Ðu8ŸÁödé¢#x e'vÑÁɬO é£Ãz†•¨YK\4§~åaócœÕFÒõ+ß Ûxjk)!’9Ud¸gYE9㜜àqй¨Klÿ4m%IM´R¡Eaò¼é]>—ywd'»´6Sî*ai7dù¬¿¥Í׆ï-- žæk‘U;pGZ]Í´ðtOap·6ðùmÐYˆ¹é\EŽ…¨Íà›½*[Im1ùƒ ý±Ÿ^µ»«E{â«M3NK ‹vŠd–y.j <çÚ«êÞ¹»ñŒñFÆ=2ö5–à¯röüNçOðÿ…ï—AÕa½`.å‰ìà/Ù8#Ø“PhÒȶPiOá`ºŒ@!¸– #?|·^ž•/ˆ´ÉüS Øœ[êQˆo Ž\1I­éˤø±/æÒšÿM’ÙbÛ{Ìl:qøRëAåðmôvÚ3Ú­Ì‹äÁ_9Á³Ó¥lɫǥxVÒõ­.ŸdhŽ«Ì I§JÛŠXg³†à)á]CǶ;W#âf’ÓÅ:& ¶òIk"“eŽHî?¯ÔGâ$·,’$_cØIˆ»©‰ •Äþ¾ò­¤f·Ô¾Òñ2^>œõ½¡]éWzÄiz4ˆÑ©ó&–2¾^Aàrrk®iÈ$d ã纫ag¢ë¶ÓÒÍ<¡"Ù’ÙõVæÔézg†-î†&IüéS*…³Ílk€i~5ÓuI ûEåïÆB6_ÌsYwpI©êZÞ¡cº[o°”gAÄÇ×ÿ­M”Ûê^Ót»UY/K À<ÆGÞ-ÇŸ1ÅZÄVò+ÊÖ>\{OV 3øñT´Ù´I´Ë{Iíï%Ô‚ýœ;à°îp+RÖâÅ|}zÒ•¾9a€À óùÖS@¾»ˆºy­r ¯ê?¥z5¬Ð\é6¾YÈhÀÈôÇ\Öµsio¯ZÁŠÖqsy7$Ÿ” ã5ÍC)o\$NÎc½:cŸþºÖÖõ-:÷UÐ$³š&!Àm £€¦è÷YI®[jF8îZF'Ìþ%ÁÀÿ<Ötl~[/ÈfDy$ֈᵶƒLš~ÏjÓ+D1ÈçIq¿l’-B{™'·a3¦  ã“€9ª0N,–];QȆÕÖ+¸HCëëÒ5ݤmg,K4ÂÍÅ­Ä'˜ïùRYE¥É¦YM.§ –&Bˆ»Ãg ïW4©­fÖµ‡¿*_$(“ûœŽ?J„ŠÿcH‘nóFÎ; ±âxÐøjà•W]¥¹=@ë­e_ZÛÏ«hˆè̈yœŽqÓ4ý?+TÕc„b“5lzô­+èV].ð273 ýøô¬/²¤^iÓn÷¾Þ¿{Ò5¤6ך)|¶•˜G~sùš®`¸Ö-üÓT“ßÒ-Bß,2ÄðOåõNŽ=Jع‡ý`ÆÔb@lvëÅsqÚCýŠnü× 7O⥑¼÷‰]äžAZ2pß5–m |æf+÷Žj{¨Ÿylmåf2™Kg>õ]_Eö¡4jå‰.ÎA\OJ[¸ZMNÚwe’0I8ü*ü‘ªFˆ­ Û€Lƒ‘õ¬ðŸj¿–)ä*±®}j9ãš+Ÿr¨%™OSÏ‚Ib–h¯³ËÞyTGÎKh'ód,í·¸"´¾Ø‘í·X§'¡`?¯¥J͉q}ª;J]Á”d3ŸsÍ$„€3“Éùp3Im–@Î2Jö© DâNOþjg>v 7.ONÕn(rVÈîp·ãV¢u[}ëØÆHò¦,±¦U‹gžsúâ»Í_ÂVúg‡u‹ãy4‰4çoÝc'ž©ÀcUK›¥Ÿû1Ùˆ°N2^£­CÝÝŇ„ôeºš(u2\Jï|s·w½lx…ÂÚ†q¦M(K‹•¶žÝ¤.²ßõÖ²cÔuOë:–¡º[o â,Y¡`Onk§ðL©=ýÄ/4/y Rò3ü€ñŒšéž@å€Ü>”ÈÂí–eÏ&ž¸#,pGNœÔr€°%³ŽªE˪‚p£‘Qùa2cgqžôª®í‡'·\T27”HÀ½jHq—a–â–W`à `ŒpzTm mè~Ã2‰sYr ™~çŽx"…ÆÞxÁã”íòö¨<ÆE{MI¸4JÊÇ9"‘Bí' 68㯭U–»¸dy€zÆ¿Æ}Ï¥-Ä~d2A2”©^¹¦Ám²¬pA|€B¦½+!ÚÛW+ž¸ýxúP@hNOðýj¬¶Ër×ke Säþð"î>ùëW¾L¨Êã&¡ŠSå ȧ±+  ¶}z­DP0fòsÎ)ìå…SÁêO^è4J$ @\³`¸c¥2&2•‘²=ú uÆl»rÄcšEF* žxPqÏJ™Ê¡³œŽ¿ýj…åU‰70f=9棼µŽþÄÛϽ¢$U8ߎÇÔRHÌ‹ÇʉÆôíCIxÜg'?{±ëŒT^\(îHÝœpGµJ.ɱ†8 ž¾Õ ®mç’B™ù8P~¾ôÂÒL®»Âd¹ÙÇôæªxA‡D‚R—RO¬dE7r+L¨$–Uw qŒT7³ìU2$lzË×éL…×ììT '+Óo­9Q·yj¥ÆxQϾj³ùM,±Wgrª©;O¯>ÕIÖ4 2F‰:¼r=:ýiÝï%‰1'ÌIŒþ5+AfÀŸ³ÂªœàÆ1õ"¦¶‘P"ª”Òžñ[Lç‚)Z?º1Æ} tªØ‘}3( ÜwÇ^õ Vv*²ÚB6Pª( Ÿò*W´·¹džâÒ H$dêjô«m¼§µˆDŠþìp}‡ùéMkXä³û+GBÆ}:Sm¬-2–1Å0Êa¿­VM7NrGi f@Œvô© °±°¡…"‘Æ28ÈúöЬ#¿3Eo;üÊñqQÞi–—S,×VjÎ7íëìjxmm¬ŽÎMß6zùRÝXE¨Zˆg1© Ê_Œúãñª£éæâ2–á%‰F–ù>‡>ôi–¶Wr<:;–,NêŽ` rråHÚÃ=G¥T“DÓΚmã¡i˜¾zvúŠšMÓe»7šD?*7˜A^k>]Ô‰ØnËw199êi,í­c˜s .Gb}ñô«×Hëi2cÍšHΟQÜ“ŠÅ²ÒŠÙFnã“òc/ò‘ëÅ\½Óm&ºûI.—iUÊîô¬kË ¶‚ÞÖXwd°þU~ =bž)¥iL`#åöª«¥Úù’HRŠA+ü&¤¸´?mó·Ä R7‡­ÞêÒ÷Q»¸¾– ˜<Ò¡Pú€  ýit­+S}\KqܦIR]¤dŽzÁ§hÚe®‹i%’²Cæ3[8É«#ï!Ø•#hÎù‰,È7mgVéóc+;4ñƬG<ƒéQ^¸2msŸ_óþEI Ù°mýˆ'¥5–G)– ó Óâß7÷jµô“yÑKŒÔâ`°üüg$Œâ˜ w"5ôëŸsC~ðgpWô 1€¨çš`“iÛ€qùzzÈÎw |ØÈîE9IF$±Áã4Ñ+I)R01ך‹Ìu_òN08ÇùÅ24ÝtÈÉócp9éíV !¤nÄû‘ÍJ"²¨É_j„3ÉnÍ'ÝSÎ$SGò@B³wŠw–û9nBœ1šTGû®Å²x=1S´cŽx#>µ ܱÚZKs;ªÅrÝ€®b–žÇÎÒçK;æÛìAÏ¡*:QÜxâÜ¥¤¦¤¾KÜ«®3œ©ïRjž.µÒ58l#Óîîdž?2/)2c#µÞ8‚)í­?²oÒîá<Å‹Ëù:Ô°øÒÆ}úúh¦‰ìßË– q|Ö†Ÿ¬ Nækca5´Ñ"K‰1†VèAÚ«ê–Ú-„sÊŽK¸Ž8ÐrÎÜÏõô¬][ÅOkáûûÈtûˆî­¤2J£Ä ç‘È« âXíôK;Ëû{„–à¬iÁºGÀéÏJTñ<Y_ʶ×h°ËnGÌ?XÖzìZŸ‚î.µeº¶²Hb $ãiöÅl¦¹¦éöVéstò[‰•Uw9y«3TñŒv‡Jû¬²Gxá³årS¡ժ엖+±ˆÜ]Çv!f[vR¨ÀŒüÃÍ2oé÷‰–_-$òŒë1«zVîüG¦X4ð$À•㌲Þ…ˆéšÈñMܲj^x.œCq:†Tl#¯?­tòÛ‚»™¸àV=߈´k)ŒS»,…•Õ *Ð1‹ÝgM¶¸t’g‘ʉq*½‰ÇAR¦©¥Ëbº‰ °àHXcß½srëæoiðÙ]L-dVó!dÚ@5¥§ê6bïRº“ZY-Ãgk¶öÏz³‰ô™î£·‚þi1°ü~Y§êZ®§ÌÝÜ"»(;3œSè*Hý³¼—±Æ« ãÿÕL¸¿°°EûS¬,ÇåÞFOà*q¥¼/¨EsFûò«ã8ÎüèQÒî;D½¶y\åB°$ŒVM¾§$>'Õ-µ  m A³p ·8ïZ°Üéì!csÉ YÆÔ}jä–ËÙCrÃßÚ›äþçk 2Ûsž=ê-‘î2œcn:‰mŠ‘ȬxíÎyïÞ¬Cpªû2H^(WÒ¤FF,ªÙ œc8ú~Tf—1òNëŽ1CDR2"9'¹àÕi!hî[æe2NOéþ{Tm„m!H8‡?5–äù"GerpžŸJXÐo{o9Û9`r~• ¦A¹ŠŽ ëŽj2eÌ@€UÓ‚G4„–¸18L|ªséÏÒ€ ï2³«mã#“þ­SEy¢¹rî# ‘דښ²í ,xà`ð?.);«¶Ùsö1éDóÊN9OSŒÿõê¤Ïæ(ýd}6ž´ØçV;Ø“ _ºÝzÕç,Ê2TFFNãÈöª’ÉÊ#yÍT#b £“‘Ó¨éÚœî«0R9+ŒÓþµWÄŠY7€ŒñÔÓœ@a)etôÿ"’0ázN?Γk%Á9 G!¿§ZŽQ"©qŒaúÔ#¬Xg æÃ!BœœâÛ`í8ÆIê)©ÚÁ²Å‰súÐG´( ‹$óBy€¶F?.{UƒF›Ò@X¡•_œ’ÊÇ­9âËîWáŽ@ý*ÁËà†\Øî9ô«fÙ,«'Èx*84†F^uõbsü«Ü|…eRYŠî$g¥=£(Fw2Aþ5b8±Mß>>÷Zdð€†åG S"ŽF@rUúá¸ÅVP®‹,OÆ£uÛ `Ä…Þš°3:8‘•ÍÉÏ•),8'8ù»óM–Ü cïKXï8„† 7:ùœTuÇaPøÁP1èy¨d‰Œj‹’¸ù½x§*Ê•\žEeŒ1;ÀÜ+Ž3UÞÝ–7dp{àñšX•ü°¡¾cÛßÚ¢hËÜ4Àm;vŒœÒªËö’p¤pO b§ÎÄlŸ“Ž´Ì·ÞápprilLjÑüÇ94¨¤¾âFóÇÒ¤Š6$™rzŽ˜§I€2§àûÔd pÜ:ö¨§Y.JýÐzU€Çh“zçÿÕK†a¼sÈÏj‘`à’Ù¬oYK©xnöÎýìÑ™=O\W= êº¥Î™k£¶‰u ÌH"–i“lJ `°=Î=+'CY´>M÷²^^G#,SˆGäç þ•~óíkãÝim%d··)+à Õ˜ÇJ“Vidø“¥OöYÚ!ey( ãéX¶h­ÿ 7Úô˹๺V ä8,…ùaÇPk_Á¶×vZåå¼3ÜÜi c{…*Q‰û£8Î+KÅ¢ÒïM¶µ¼‚YbyÀi!´'Æzç\™‡U›Áúõ“4÷–ðº Yš3ºA¸î@­=_Y‘ô=-ฎê“Ür^ r sϵPÐÔ¦£âh"Žðý¢ÂóFÙq´òIõÏ‘^Æÿ æ±)0¸‰<²˜¶p8犆ý-®­4çK‰,5 kh®!_¨(}ò?Z/.n~ÉáMCR„Ä#•Œ¥c#Œ=ÀÍ]ÔîãŸÇÚ{[ÈrÖL€AW`qŸCÈü꿇u;;]´MBÂYu¥aöfŒ“!ÎAãøÕ=kPk‰5ëf`uP¢Þ4ùî1ÝŽ2F?JšæöÔÇàÒ&”ÉÏ+€£'ñ½I^D“Ëà…à‘ê+Ï•8ÙK0ÆOÝëøÕèícÔ<]â;YÜ’^9ì?•RðªOy©Zi·Q€šTŽïÇÞ=ú×w Ý•ÛJöó,¾Kmr§;Z§’HÙJ¡!W“Ç_Ϋ ÚË“•qúÔ3æFÝ ýáŠÊÑî(ÜÒÄvpHܤŠcíEyÄh0@_Ö£•Ñc ²…p>UQÉ©¨‚‚ë,€`“qÏùÉ6|¥HT<0Àã²ÆŽ±]àr=½>µ""E!v—ï8÷ª×1¬¨ä†MÇ©?‡UÁBŠ•Ž3íŸzXcÅÛÊH;ý:梾"VåT{Èæ¡„žc!\ÙÛ×òªÞKD»Œ½óš•â2€‹ò•Á÷=*ù4`î-ÈëÅ:4Á'ʤŸ›p\§,")"9LcÏzœJ¬ÀëòÕi\ù¸hÙW$ã­W!•WüåÉ4²#1iY`c ÷ªñDϸ‘·y½*Ï–°Ä¨¶F0*¤ÜUBîàqùSÄ›sºbF<³wÏáFF²zô©–]àçoœt¥yV8Î$²†»cÿ é Ïö×R=›ü+EgRpy síR Ü–AqŸJM»X“:ƒQ»¸m¤)$œâºžrqúR;å3ëU.ïíì,仸}‘ÅË ÀJm…õ®¡f—¶²†a¹Igð©–CÉΩU5Ö´ù5wÒVekÅMìO×==*øù¤$ŒLÓvÀFì<ƒõ¥$õÎvñ–ô©VRW%qÎ+:ÿVÓôƈ^ݤ>k@Ìy>ß\ópÎ'4Š»·†\/\äÔ|6A8Ï{Tü`*ghsŠC¸•*j”Ò‡+Îìx4ŒÎ»Ï$ž¸À¥RJ’\;ž;ÔGx`dl¨äsÐö«*<õª(:T|m!‰œgÌ®WË}åNÒFË´Ê ’vœƦ2~é¶œpqȨá Ð)ÊäœÔ»UrçpÁôªÆxaETg ëšcì#$ 79#ô¤dÝ’¹v¢„Á*¥Âcœm$uíVƒ"ÈO–»ÈÉ#ƒPâº$ilu¦È![”jï ýßóÍ8dîÉlç°éÅWŠ qp'(¾gEm£?ëQÝIo0ŒÜ[¤œpYrsþE5¤„E$jÈÍÄj ƒÔT±ØÙCµ¡‚$9à(é[G±ò¸´€‚9?…Sû™*m’Ö¨ÜeÇáX²x^÷ûBâk{ËQÇ <Ùxè*öŸ¤6jöê2dË;€âOQØS.­á¼·Xï-#‘£ &ìU¥éÞR[X,“‚€Œý(M Kž$en|¬ìmƒuÅ$úLQ´²éÐ[ÁxÈvÌÉÜúàsQèöé¾|Óížþàï–E€-XÓâ··yE½ºD_æbï?|Ó ºvŽc¹N>?*IZH¢Zs¼¸'¡¨!™Ú69eR2[©ë‘Hr²¬Y,_¡ú}1K$×¶é1†3ƒŸÿU;í!Œ‰ç œž{Pí/3¦ÒSiaœ…ô=³Qo!HàEœ`œqM3'žUPíüVÇY=;³îkÑ<ÂbŒ©XÏVÝ\6©¯k¾!Ô4Í7íJ¶j µ¸BYØgý‡ ªÚֻ⋠YÝ\¬ïžq ˆP6ðz7\¥Y²Õµ}'Æ#MÕ/ã»¶{&¹$DËÆx•%Œþ%×txu« ècó&%,ÝFÁ$`·RiÚf£«x…µ9moÅœV“bTŒ6öY³ÛéTm|w¨jv:u¢¬PjWMlòã*›q–Ûߨ§q§üN¯/~Ó³OgY ;Fx8ãÖ’/ø“Q³]OO¶•ÖIÛan 2dŽ_9Í\ÔõïGâ»M"Ê[h–êßÌdd˜Ï9Ï<ž+­³žñ4ô[™#–áW:Œîsúþ¯¨ÙÞ©K«{ o9Àv’LðsšÊ—Æš™ð õ¼VËp$òå ¤ƒóc gŠ–?k6$±±ÔZÖX/`2)1ãÜžj¤ÚÖ§â X¹³šm"Æ‘˜Ë’[k=üm£Å5ÊFn¦®« aqœŸ§Ö›ªøªÓOÑm¯tèÌéw HÈSµqÔANÕµ¯ôóÞÃ0%â·XÙ|Ïb1íþsSÛx›Kº²¼½‰å1ÀyºòûCkÚeŠBß¾—|~hcfeS܎¶m&µÕtŶ•$‚E8luÅd^ëZv•)‚Vs:§˜V(ËìPzœtBÿŶ¶š„]Öé<ÇqTŒŒzö«×úÞ›c*E-ÉóQC¸H‹Sݰ8íU5¿ÚhÖ6ÓC¶v»“åÛСêsEÕíµÖ­¥µ¾¬mÝŽálWýpÇNÇz”kºS^5°¸Ä¦CN7ç¦qŒÖm¯ˆ¬uj}5‡–±ü¢AŸ˜äçð÷«z ðÛÇpÚÀ»f?? ëŒÕûmsJ½’xí®ãr©¿j¤^qùÓÓYÓµ ¥·²»Œ³”#r@ëZÈÐî¯Æ¥Ìë,6Ø03üÎ+¢»•m¢y$š8À –s€¢³£Õ,ï‹-½ÜSìOœ£ò¾õ^-KM»G ìo1<ŒŒŸ_¨¥¾½·ÓË+]ÅÌ?wæyÆ3ŒÖN•{¨x6YΡ½ÓÌBË.ã<Ö·¼ûK}–ó]F’ÇÀÎ9'š™n!¹€Ím1Ϧ(hÚ;IdŒ¢ÈÛ¶3/Ê­Øœ{Ô6r4›y/®áó™~ôM…=ºþ4F Û,v÷1±'!:d~u$ó'ÚlˆÐƒŒž™ÅU”/ûû€›‡ Nr~†²õ‰.ôËý8BÖæ@ƒ#‘Ó?εÍ‘&‰.ûÌãôö«!7¸;X1ùv5£ªE¾E,ùHÆ@«Bå¬1¹Øy8Á5Qa’&"I|¿œ–àð*ËS¹›_žÅ–0P»q9ãÿ¯Z•%DŒ}ì1qëÖ© b%¬ÖUi…W¿=3O[y.!.p£Þ˜a”)ŠFn9ÝŽþ´×ŠF•Øi#=3Ö˜%h÷evp[ý®:­5åÄWK·Ü· µˆ$èr}êymÌÑÇ$ä£éT/®d·hÄqˆ#½F{Š’æ6`ÍÝ–á[šoïZÛ2œe±“ëþçŠ`¤åÉÉ9Çÿ¯­5×vï”nîr9=8¨„~YË)ç’ÀŽ}ªHÊìvf;€8Rxü*«Ëòë3’ pj0U‘¶ \ñ×úÒ áJeN žiâ6t.˵³ýÑÅ$r39 ú㊊IãiÖÞ0ÄØX/¿:°Rh‹Ú u›ùsK”áŽÌ‚¹äþ8f Ÿ+§ßçÖž]b`VÍ€j¹pùÚ¡°rI8¢Y`Äà Ý¥;qwƒ;°2OJÑH‘öæ4až7Ò¬#ì@0³ð®ëT𦫪Zé¢MR’ÊA1f€Œ°è0J²|)<Þ%ŸTº»âº€Û<">LcƒžµZÇÁ:µŒN^+¥JÆ#Ä›IÎÝÝ…v+j7}k“¾ðž¨ž$ŸXе8mžáBÌ’.õoj‡\ðn¡¨éöQ߬’}£íÏ0$³cø@è=ªÃxZþãÅvú¬ÓÛ4QÛ}žH‚°,¤ŸÖªéÞ ÖôÅ}:ßYtå”ó*©<¨=¾µ%¿†5=P¾:Dð5½ïï w¿vÞ Ž½{Õ)>˜ô»E²¼ ¨ÚLg8áØãp#ÓVbðƳuâXµ]JêÍ¿ÑÍ»G 7*sÓ'ß­E§xSĺDo¦Új–饗%\¦fE';U¹¼;©Øê±I·µˆDŒÅØw$ã¯5Ñ ‘¤‘v'<~f¹=WÃúµÇ‰Î¥e-¤‘›$-ÎuþÒŠÌ> ׃ÿ°Ä¶-‰üÀûØqœúuÍh^è:¬ž(Òµ3 ™ŽÚ ÈNìŒqÛ•ß‚îµéõ[ëÕ[Yî¢Ã¶à›pAb:äŽÕR÷EñV¡£éútÖ6¨læG2yÿ|.@ãU»Ä:>¿u¥Û[ÝÁ|¥‰ß[Ž´ßiZåþ‰ik$Ist×ByJ0DŒàë]Õ²¨ŠÉå3.Z2AÇ·ìíqÀ8ϯzˆ³7OByÍ#e˜+7Ï× H0XáT·\NxÂrvŽ;óé\v¶S\ñ=¦…ºX­â&iäE#,>êƒÆ²|e¤Í¡êv¯kqwsu€mn%G' éþ5$š¢ØøÖ zXfm:îÐF$I‰»‚;süê•®¤Qü[{“̲•x–h[k ã‘|⡵¼Šx~íæ¹ž0…ù%Uº ƒ5£¡jÚnŸ«x™/%E/tÅTŒïœëô¬™ôë‹éò\Àñ¡Ô–b¥yD9ëþ{Öι¨XÜø«ÃÛJ¾^]˜²•Æpç×Ukî\i!þÏÕnŽÊ\Lž?f¢öš_ŽoÛXóâ¶È–'u|µ×xUmHa§ÚI ™•¼¡1$¸?ÅÏL×+â/)µÛëÍ>õ-/­`d3cdéƒÀÏåŠmÞ £\ð­þ¡YÀmŸpÆxÆ1ù~u_[Õ-åյȣxl¿Ñ¶–+—¹Êðz~µVwµ>ðä›X®ÐLÙáO$çÒ¶õû›)¼aáÉa’6Œï;Áê8Ç?ʱ6ò«KÍ6âôfÕÿÖÇ&îÕ­áû›8|a¯ÇtË“:ˆ•Î àœb¹¦r¾Ô *Zªæ`½ãíøgÓ_Ýøfà=ìqµÄÂÍÕ–€ÅއœV$W+ý¥á‡k‹xà]ÅcŒÿ©ŒÄä“]‡[Æþ!ù“°†Ûµ?Ça ·Ó$“æ¶‹öŽ3Ç^ZÉñWöSZ]Ýi2´—’D¢c ʬyœp3ÇåMñ 6‡ÃÚMÎ 7HÖLnÆ=½Å;@6Óêzòjf1pæã!q€kˆÃ…ÈVu¼àõ+“[†›msãm.)"FYm·H1ׯ!T-TA¢øž;wòcŽb'Fz~=)tkhu cO¹H!‰- EiçqЀ9÷®“[„6~î]½²Gë\äÍá¶?xfž¼‚M^HµOÞé –Ï”V8ÝÆ÷ïU4•kַЮ!ÏØçg˜…ê§æOä*Ö‡gm­i:Œ×Ìì»îgûÉ‘ATâš[« †,ßidõ*Å>ê¢jú†a¾Œ}›#ûÇú*˜iæOÅ£™­Ö(-†Å™Y•ØòN=h¼Ò®aÓ¥ܱ\òs·#Ø2V—‡/bšÈmákYwüñ·"#áüTÕÜÜøŽÓLžM°:ù®ñ·8×¥eÆŸÙzÖ°ö§ýE¾ä=pp)öš}Ó[ZêkyÃI#;ÀžAŠl6(Éá æ&Âð#ò¨.läümœÃå¸ÉÏðªJ·i·ò ¹öÛIòçשõ5bygó4™ZWÝ0Æx=9ýi¨—WšŠ}®`°.ñócµ6k›—Ð-n7•Éå—SËzþT·¢ê]QmÃ"ùAñÆC¡us‡.êû7c8Qi$¦þ5Šá䈨w=p}*ýÌ„[M$rœº ¡o3KìêÒ4mpã’qÛ½Y¿Ic²gn\sŽø¬Ów¶ÎI#rä°UW?2sJ‰x%@þ[ ÄpqÚŸ¤Æ_Ïvƒo îÆ½ZÔ®¦„CJHø²\~5VFžÖõpxç@Èý)tXÚI¦&lbCÁã&´“{;¤dòÌǵ)’ìÊXŽ0H§$¬€ª½±ƒ“Ö¥LìqÑ€ïëQ~óÈfxžÊj2‚\ð*Q |»Xg¿¯åS‰ÕK³œç„ëéJnІ)ê÷¯wÚ#2¤ú Ôn1&Aê£:P–Ï<Óˆ8Ü1Ó©cÁSµ”ƒŒMdÏâM. Hi¯r«;0@†=ž€ûV˜Èe,Aàç½8«( 8£µP:µœº³iirv±ïò²sЏSË+»1€O'¤œðyÇ£UÚO'Ÿ^is’Š3É'µ#p:dãœ~RòöÏN·2ÜMQœ(w`¥ÿ &†ùS²$Žòñ£ûgHœÅÔ-I¶G¶@w@+X(MØþÁ¨ãw,CAÈ¥5ð‡,Û±J‡s ¤ç‘ÜUÔ4éïZÖ á’åI5pXcÚ§™B©ãoëOMë†È8ãñ©„¿Ï´1@nŽýtÕ˜chïýê0X+(çœPÇcÆsL’F‘ Ó9Á⟔ Çž¹íU€Ú@'àR&ÔVÎ8È^iê@G=©"–#9sÄ£Ÿz’VÞä8 â<µ8îû½)¯Œ†Ç–TcwsNhÑB•œu Xú_‡cÑ®.®ÅÔÓý¡üÉÕ:žãë[$)Lù GŒm m>†«L›ö…À«dqëSmE"Lø ·OztÑ[Oï[ž7(<ÒHŸ½P é€xªanòIçªJÌÙùÔ*yíäÄÓA†òÇ©ÔrŹVû4%ÏÝà>¦˜ö¶¦?!íáhW&Ñ·?J‚[Y7šÚe`(2 ¨D6V×Ï"ØEæ*ï,Cv~¸©#²´–èÜËFgOšMƒ8ôɦZZZ︂++x£<8TP{ñÍ$6¶¶Hಂ8åÈeHÁ 1ÐHºV› N™gÃoÚ"_”úÓ­l¬md7v,Òg2"…<ûÓ®Iš3Õ¼S@Çk†sÜ)l-,­Ëke Fü4H Ç~=ê¨Ò,ínÖK{ xdÈ ¨/®=)_LÓõ£5Å•¼²Ž ºÏ¡õ¦¾ƒ¥˜E»ØÛˆUòWŸzyÒ4Óuÿd$O•\ àp9¬]SÃK5µÔZ\i ’0.¾WÁÎ5ZÓÂ×/o5Õ½…’ÀÊçìÜ–ö5»¨ÛÇqÙM‘d œq?ËþÂÓ¥’+qÄÄ….À)õëëZ6ú%‰¿kÐn€Â¿šN~¹«XCfóÞyiçÌFóŽH²C²–þI^)¡s*ÆåU³ëƒïVo4{ ‰­É‰‚À£Éì¡ô­O µåäW«Omò«sÆqšÎ¿Ó,uk¥óâv’ˆ©öi ä¿èãîQǵ,ZdpÉvéw!i×kgiôöúÕ#¤§Øã´7Rya÷(Ú:ýjC¦È.ÅÚÎæP»xQÀÅQ½Óå´°h£2ʓʰœÜÿ*ŠÊ¶¢[IsöâóFßµ/ ŽþÌ@eÚÁ ×¹ªk¦Êš€™îs"® Úú{TÒ‰.c‰Læ&nR£&¡m H'ó_/)°LmÅWŠÐ[²´×&m¤àƒÜÑkhö“±ŽlÆäñŒ~µ-ì"æ¶:ÊÀõê·–K•šWVx×( à}O4¶6ío$ º2¶[Ž}¹«q#uÈ#vK`/çOfsv¾áÇ­XuûÃåÚqN85¾×ÊÇÑj ‘,ANèòq’¬#°ª¼õ©b*eÊüÜsš0>cœà÷8¦’I;£e?ïšôKísÄÙÔÒ™d¸HlfP?y»¹P{cñ«>«®6¸¶—°Ë=”‘ïûCÛ˜¶?u#<ŒWH„¦~_”g5‡â/˧Aikf¨×w³"Ü8_R~™ýj‹kº®‰®ÚéW³[ÜÅ~¥a˜E´Ç ìFy+?Àv÷óêÚܳKnñ-ó‰G—Éqœ9àWróo©½+Ä:Õæs§éÖK¾Ô$+|¨ rO¯Ò¹ËGÔSâˆ7²Ã,ɧœ4jT8Ï¡>¹©&ñ®«a{d÷Éh=Ï’ÖJs,jx X~•#Þkñ;ìÐO †+]ë)ÆÂF~­L×üSªéS_Lñ[[ÛÛÈ¢(e?=À'Œ?*ìl.šÿO†í#Ûç m§¯"•ß.$›qÇËýjµî•k©=¡¹dpMæ nA Ïçšãí¡‰¾/Ov-–íãµRñ…ŒZeæŽÖêZMDÊ£qÇöVÞ“âë£yªÙëñÛÉcžZ&, c8æ¨Gã۩粑¡‰­n% 2ÆHè[Œ»s6ÇPãænëTõi%¶Ñ.fµØó*ªÍ€?,ןøkQ‹HðͶ­wcŽ¥ã·‘[2HîÇ+Ó¯5ÒÉâ{Ý6öÂßY±†(®þT’-±ÿºÃõU|cªÏ­]iÖ:#I-¼Š²8û¤Ò/µúŸÙô6°¶n7ΣhÏòíšxñÜßñ/¹}!âÓï$$æQ¸1ÿdv§jþ2Š×Qº¶¶Ž^ÝA”É8œt^94믥¶‡a¨Áa4Ñ]7—€À|ô>üÜҮžK˱u“hI6åìr*üŠÃs.wþŸÎ‡RÉœòO$÷¬ûëø4Ød¿¼E ¥Žxç¨^ÃÄ]ü³B&xæXŒ›%B‡g]Ø#‘T"ñ¿†âŒ·Û¶¶„NÀ{ž:U‹¿è6¯o%Åôq™×ÌFU-}0(¶ñ.“|—Mgv¸…7JYYGs‚*_è·[Y^ žlŒí+ŒI$Štþ$Ðåž2×gæ}‹&Æ–ƒc­Muâ=ÊêH.µÖh×;FNáßÚ˜Þ"ÒN}E/•á¦òxVí‘Ö©Mâ "ûJ»‚ßUŠò²fÿžyàž¦¬[ê6z~booÄâTLW™OÂŽM>ï_ÓcÐßRŠà<12½KtŒg?ZN×,µ DÏ yà· } "¯Yjz~°\Z\,ÞW,ŠÄúг² iIQ°rXøúVU¶·§^ºÛÚ]Ã4£“ƒ‚GsRîi|°Ø<òJýáÉôüéÒÞé0É3Mwo „Á¤î3Ê©[OµÒßR–î9m×pÞ„xÞ¥Óo¬o¬þ9“cÆ÷¸;3ØÓ¢¼ÓîPÜ[ÞBѠöåÂäô5Z+û&v”_[üÄ¢Ÿ0sþM&•­Ùê·7qE0/o€N@ÝêGµh ¬¯UR¨]£ ™äzâ«Ï‚âÝ€yr3Ò4­kfxö¾ç8Ë’°³óRXØ7Ì®mzôª×W±Ek-Û]/£26î‡ü{Uiïn®t8îtÅ„Ë&Ó‰oøÖ‚\<`FÌ¡Õ#9çÔ¦`Öë#ºm‘øËuª®³ÁvÅv¬$ž§ô椚ö8,¤šâEF2ç³o.î%°ŠóN€Ü³*_åM^g‘úÆ‹&ÐFXóU£¹¸ª[×%F{ÔîÌÁQ™™Âü¤\SUnà ÷™Ï4‰,†i!ÚÜq‘òñ×üúÔªÒ!ØÃaò2~¾õ–Þc–Ø?ÙRÖµŸìQ-¼årKtÍ]i§1ïTRàõôÈ÷¥hå–]ÇæP£$œrzñTΠ’ë/¦wY[ÖGa‚8ÇÛ§šËO󼇖EÇʇñôª²êÒÃ{am5´±½ÈÎ[.GoLSâ˜Ïq4 Ê!a‰X|­ô¨¯®ƒÄ×p#̈˜Ä}úŠ,ç’Xcf íŽã¿4³<ŠzîçñÖ«:K Î>ã@Ç­0ÜË(•š6dVÆßSI.Û•U¦ íÚªQ~ÒB¬ß1Rç•$uæ­G+ùM;Uè¤ö*»*Yþ]­´ŸÒªÜ2[F²¿ÜÀlqéJ—Q^ƒ(ä<äõ§Å(HܬzqÒ£¸œ™˜pøÈ9ãÿ­Uå"£¸'¡ºš|S3)yàqŒtÏJŽ{¤HÝØá vúSÅŸÚÅÁêZ•Y.AÁaб¿ÆxÀÆG½Uy—gÎ8ü©Ñºc!œàåw1S.Y Bãäm>¿Î,®’'€;Ó™$ó$ÁV#€4‘g: ŽžüT±ï,v¦Ü6FÅ÷æ¦iˆ‘ˆ-ÉÏOðèú—…õ]sG•uN!¨¬©,>P"8Šç±çœž~•wI±ñÜÁ>³}oå@Ø­ACÓ.Ooa[®C±÷y<}+šñ'‡§Ö–Ò[Y#‚êÊo6&`vŸcùSdе_[°ÔumâŽÅ£Ž9 ïsŽIÀÀüéþѵ=*ÿS{Án"»¸iÃG!%IíӚ褌´ BBÙàž•Íø³D¾Ô5 7QÒæ„^Y9eYÇUì~ëÄÿÚ÷"ÎÛu¡· ³<óÓžk ø/Ä'K³ƒìöuµßÚc)Ý9Ï~8ë]ú.¯ŒbÖmÒÔ£Ú¬‡‡9$qÍa_øG^¹[…¢´¸{¹7¥ÛËó!Ç1]’ø†Ú"Ù­í|„M·_9$``c𮨠Ó´qŒõ¦¿*ícóÖ¸«}7W_ˆë2XªÚ¼^OúåÈ|ß§J±âÝ'PÔu ì6‚Xíe;— ‘è*ŠxoQ¹×õ§žÓ˵ÔmºKæ)Ú@ÆH£HÓüSgfšI±¶…b~Û¼´¡{¶+´XJá”TP9æ¨_¬çI¹Kx Ò¼g÷`€I#çŠâàð¶¯wà«}1í¾Ï{c?Ÿw\Hrx>õ¥ªiúŸ‰&Ò’].KD¶˜O3Ë"Äv\úÒè:¯‹u[ë½>X º ÆÅ”㸪ÚXjˆ´¼2§Œôõ§p£+ÊŸözW3ã[ÏìÿÊïgÓPD‰¹W'ïß®_C¼€|@†f¼’å%³Ø²´[AlýÕt¾Õ4›o ø‚ÚîH¼Ù.&ýÉûÎã¿5PÁý‘ƒcÔ±É$w¸ gó®ïkwãÙµ+6_±[Y‘s2‘°ŸLô'ü«7Ãp}«áö£’£^“ q¿žÞÙë‹Û φqX¡Cz¡"Hýç˜vëëSÙ­µŸ-#ÔÞ0ñéˆ H@ËëÖ¨¼6âÏÅ×]:O’Ð;Ž»}y­6K8¾4±$!ÞÌ+¸$ú뚪5 H­¼/ %º\˜7-Üäì‹åñžOê–›$Rx_ÅQ,ÂiD²>áüKýìz—T»·“ž1Ê~Ï‘}­¡Á)ǽ¢A¢Ÿ-Åž£qu,$HT©U_ö°5cÇÞzøJsn¬Ì_4»3Ídk’hwÚT7fÙ5jËÀrUvó¸ÿ«vš|ß ¡1´~|j…@Æá&îÍ-¶•m?Œ´Ø/âGwÓ•å 2sÉ÷ª6¶ñ/ƒ¼P€°Ý0»ÈäTú»Åo x}b•c´‘ãûC*‚¸wîyô«özv“©tÒj v.-˜ÌŠª# ùŽ:Äð¤VK¯­ê;Á†{"à0'¯¹ V—‡ì¬E¯‰Ìϳ¬ÓD²ã5Áè:ãéOÐÏöV±i§êV±,‚Ý„¶HúüÃðë]vè®LS[N³CŽ©†r~$g¸ñ~Ÿc=ÄpÀ ߟôg$ŽFyª—z2[é—ºd¼o#Ü#ˆö@Ç8N§ÇJϺxdÒ5›yì>É}ÆÒÆ9BAÀeôÎj}ZÒÒßÀö/"Ê^2Å-‘É5bëI·¼ñäv³3yOj$uÞFN:qXÐiQ¿†µ{¦,ßeœ¬$¹ùFGAøÖĆ+©4X˜½íË[ä‡+÷˜þ~½*¤*føs¨ùüù7$D»¾ï#ôäÔúͤV¾ÒšÝÙ Ip®y,¼ñŸaV/´Èî¼u”ÓÎ`k_1—Ì`3ÈÇÓŠ£§´ðøW\ŽÞL=´ì±ä.Fp}jMÈÞëVrؽÌv©n­pK2æN„s×µnøŠ ‰vâsDÜ¥N ÀÏó®b[lü/m®Ã}8º2 äOL~Uj{K­_Åq[=ýÄk5 •‚¹N:AV´›S«ëWöw· ’ˆ£_4«g¦óާŠÀ¿¹¹›M–ÎâV—ì·Â˜õ#9öÅmK Öƒâ>8¯¥–Þó†Y$ϧ?­e]^]Ûº†òâw[LÝ"?ìžkBîÆMCÆ’@×ú(%â8$qéT$¾Ô Òõ;W¹½œ $ÙÉ98ÆjÕç™.¯ ™Y‹´9%Æ;~µ–éÛZµ{‰!\‚àœt¨m~ÓgáFº‚yјg±P3Œt÷ý)%»»¾šÒÎ%%ü‘#” 3 zš’q«ZéN®¿2È0T‚û9ÏJ±¡Ïç[ÎËre@FÕp ÷¨µ+©RæÚÒÙ¶Ë;d¿]¾Â©Ë-Ͷ Ök:Ê™F8Êœ~½*=9ÞÙå Z0ç)Ç_Z›^ó³P‡ÂïÚ@=AäUg–fž c»žM£q—“´ÚJÂM±–VÀÏNôÝ2Gž5ŽTòÓ÷›€%Ž{f’[«›©Û#yq¨¸þ{T“ÜÝ ˆ÷hf^U†qP‹Ûˆá¹‰Õ^HN±À«ZuÂK)d–= `®=óŽÕ§†ØN7ã"˜óL²ÛÁ‹.íÄšÆg¹y"›j߆@?Zº±«ó¿9t Ó%8XºwlÔÆ2ª˜C¼z¯€ªÂêÇ,ÅyQô§´°ˆ—ñ÷»þB£wP«°ŽNAI BŠ\²“Ÿ»ŽŸçŠš+…E+"®þ”žiêc”nÜžœäæ½µõ-:Öê+)îá[©îãcó?Ÿ…NX"†q…< V‡÷e•Nzã4ÞIn0NSK”`apxÍ.Æ(TŒgÅ ˜uÜ-ɤXã Ï­Pw˜8ëJ9ÂõôéI"¼‡pz€*&¨PÉœtì*6Š4e;@=ùéO @ÜÇp4˜ ÁÈã"šT*äÏQÚ¢óQ¥ùˆÏÛA×`Uê¤uÀ4ÝØçõÍ “î€ð8¦¢l`Ìœ/oCHs#ïQÆzr¥*Zf821éëJœ2£/OÖ€HøsøÓG+6Ù qô5(Ü3òü v皌”.÷éN+Æ_iǨBÌPdç8'…Lv…fnj桙âw”Œá€9¦É¶XÜG嬊VÛ÷k ÃÞ‹EI÷È.L’FøÀecדWðñÖuk+ϵˆã´'do`s×<úZâÚÞ;c1¢DFB€?*†cµ?¸·HÔüÅ‚Ž*H­lü÷ºŠ(Ö\Œ9@ô<ñX3èMâwÖ.Þ ¢hü“ç*=Éëï[ëgk%‚kxZX™ÓEžÓl¶y Û„{Üúâ–}7M–Ù#k}±QZ1…>¢¢[QÒÅi y‹‰pƒ=­E•½›Ú­œ+‹¹¡6ŸÃüô¥Ó,ìô×t·¶‚y;>õn-£Ù+)Á\>#§5BËIӴ鬭ã¥l¨9ö¦.‰¤Å}ç DÁ·nUèÞ¸©GÓ%½7Me\0?¼þ/óŠŽ=L¶‚x`²‰c@•xo­@š.š-$ÓE´Kfy0‘ü_ÞÏåQÛøwG‚ÂâÚ;dòdo˜s–Ôõ¤—AÒÚ[V’ÝD*¬$3e@î9¬»ý­ôk¨4¶–áneV–)8,ÎAõªšV‘yo¨[Ì–·6QDÛ¥ßq»pÇL Ø×ZâãG¸‚8I$WoS‘ïTô\é–ñj\nÒ°‘ëÇLö&¶?²BëÃWóçY@Úå*Ó§Nj9ô•:±½´¹{[™Ù|²nœà޵džíM:~d½ó̪w;?©?"X*Ííì’ÞLÄ/ŒF¿@:u¬ãáh<³köë‘n­çFœ¾ý*äº@:”W¶÷rÅ9ˆFX€wã×ߥCs¢Á&•-”º—“|Ò0 ÎsPÉ£³^YÌnäÝh¡÷ctýjH¼?äÜ_H×^`»dM ŸCŸz¡.‹ršCØ ÙÃä:gŒÆ¡›E!š;¦Žh`•Wïz°4¼F“%ëý°Éæ4®23Æ3Œ`ÒXÛ-¬—W/"¦9`©µG¦?Z§n·)ÖR³Dsǧ­*Y\]LדHrj|¿(ûäÓôÝ9ôåh¥H,1ÏÖ£Ô-ÚöÑ`…;ƒ/Ö {+‰fŠígQqË»k…BÖ39–O1Zâu*NÒ¯µ2=&{y ’Œ:Œ7Êpß^iÒx®œÛ\lI -•Î3×$ö ×6í ƒd#œ·®j·Ù®¢yØJ€ÊÁ²3ØÓ­¡1Ý5Ì­™R±Τ¾†[È Pºm,2O¨ÿcZÜ}º ¡ò”?áSØ[Moq<’Â\·ËžåR)`á7(ìI?çÒœb%ùpŽ „TÞP•÷‰Ã1–ÿõS,#ˇ¡Ç9ý=¨iABT€½ ”àõ¨ /ï1´mà|˜…!U1‚|Æ/ʨ y1«#)bΠ᱑ÏZc2ƒ€Žøþ,õ¯Añ”÷pk¾ŸÉ‚KÐdÊ£„ñŽzâµ¼5®_êZž¡§jq*]Y°Ï–rŒ#¯zè®.'‰$xcóP²);AöÍrz'5MF·Üi‘C¦Ddóçò»Fxý*¼_¥óí%kkvµºp¢8å&hÁèÌ1¯?Œï¦Ö/í¬m sdáL.äK&z•Ô\øÃS\éV: {ˆ6çœ( ô'§|EƒûæîîÐC}o0íÙºÈzsé×ò§i>6û^«%…ð·R"ó–[iw¦P}¨ÿá4Ô^;}B!¥Óf›ËFV>i\ã~Ð1Ž*= ^Ö¯ Õm|c¦éö–ááxÚB»À2ðzžØÅfOw.™ñö[-5îe{%cdN $Ÿ¥mÇãKiü*ÚºÛLÍG$>qŒÕ‹/›û½6ãOhµ!ó–5pD€öÏëT|âGXŠækÛfò„¯å¸#jãf:ñë]ö¢–VNñI(…w”AÉr±|DƒÈ·º}2õ,¦}žvрރץiØøº+ÍYôÙôû‹9–#*ùÀ|ÉëíU›Æh,ÛQNº“LGÚ×#3Ûz‘š·}âXKX,ã’öâê?6$ˆòcïz æ¼'©Åm­x–òàIoeYÒS’sÜ÷ô®Š×ÆÖó_ÛZOm=¿Ú—÷!Èä­fxEÀñGˆÐ¼…|õ ‰Ç_Zì|ͲcžO ÷©(ünç¶)Iá°ØèET–X-âk‹™aywlYÚv­¦jFT´ºG˜ÛÁè{Sc×´inÔß#Ï»`¿‹Ó=3V5 SNÒ‚ ë˜ã-“µ›æú×-âi­5m[mI³®‰ ©QŒœús]7š~¯lZÆé%òÛk4o’¥Z_-'òðH__óÍP}sKI<–¾ƒÎ Wip}*Ä—v6|Û¨#b y8ÔV·6÷qy–ó‰áÝ‚ñ¸`?/©Ǫ[Þ_,÷ 3!åA}kIIüÌŒzãÞ¤}ʉ¸:’xÁ¨a¼¶¹¸1[Ï„÷d¯5ZK«d,—7)Eù²àqVRS%‘O¹9a!Æ®qµ«¯øKlìRkg¶¸„¶å99õ?ZÚY'w_ØÈôÇ8©!m«¹¦R±×‘ɦJÑ/›1”¦TmËãYº£êQÚC5„°•i\Hx+Üæ®ÈŽÓ(idsŒÔ1£ ßpRy#¡ã¯Òž÷ ÄåYF>P9 Ë%‰ ãLj_oŠél^[~9Âä ã"³4f}ZØ\Ì¡ 1]©Ïл$ÆyÞ YU±–Ïô©nc›/"l'nö¨Ò)¢e O^¹éS\ïh|¢ß2‚ØÝŒóP¬¬³cí~Y‹ŸaІI¥f‘pƵ<²H€‹hƒÈ4§Ìa"¬1¾a¸~Ÿ¨^Ë¥Ù5ÚÛ™1Ë ãÖÄ·Ö×J›YÆò09t©ZægŒJcÚ¡xãã§áTdÖÇS´³xÛ78ýèn?Îjù»-å,¦h”F01Ó󬫟-¶ž·¿Ù³CæÉ°ÀÆ:uÿµJ×RûDFèE$ åvIÇOëJn]PâCµ‡$j;‹€ÄQ¶îO˜ƒŽiEÓ;)`q ÎÒ0* ^pzœÕY˜àº/МӷÕcmÇŒñÎ Gqp!Oº ©FJyˆØbx;x§;²HÓØœþ4¯)sÈoSZ|l4Ží’2 n¿…D¤',~ùÇÏÖ¥‚ܨ'9¨üü¦v!$wïS­Ëý‘cMÄà•n{V§†ã…<{âc ˆ0‰Àá—ÙþÙµv ÆãÄþ&G´ŽD‚ QHáI\’+. ¢Ïç3ó¼¹­W‰Úyˆ˜¢ºíÈ è_Ò¸« >ëQðýýûêWt9E28äš’îò÷R·ðñ{Éã’à”}­€ppëÍ[{yWÄVúÞÜ5²Ædw.C?¶}UÔ$šÆ]cH3¼Ö¢ßÍyÜPñÆOÖ šÚïLÐ4ýJ+é‹0E1Ê•# ©ÚÍÅÄovÉ}4†5VŽ8 ]ݽx¦_4úŒÞv‘„ÒÆx£ŸZË·ÐtÈõÔmí“íNN郟Z¸ }¡¾å'ïsVP›¨ôô¤b¸Žæ£h€* ^)LlÃh¾µž‡¤iÓÎövG3†ß¶zU_é+¦Ë}9Xã–ê\”ˆ|¨£§ãÉüëfp—)%¼ñ,‘º•e# ƒëúÖ;xKC‚5 ac}à’r?Ï¥,~Òa{‰"à“÷Œ7‚{óPÏáý&ÛOk³dÇyŒ±;O¨9ȪöÑí/î uY"\£3Ççßük\É;H»˜a—¡>ÿbÝøkH¾ÔešXä—‰DlB“ëÁÅ=¼5¥¢[Æ‘Iƒ"6†B8Ï4Ká]2hmìÂÈ© —˜‚ÿõ>õ#xjÒHßù—tPâSÈÁ¬mCÃ`h”’:Í2É4¹€äàž„ñPé¾x5(/VÄéðÄNô7a“»ŽŸuépf¶ | 7'¿‘ká«+kË™á’xÞã' 6–ê@ÇZŽ/ ØI¤4ÏxmüͪÀóùS¯¼7a©OžmÚÝD¢?66*Ì©ÇZ’ ÚÅ œv²MlðHβ+e™ˆÁ'#š¯u é†ÂkIÄÒÏ,¾d“ó3z‚M§h¶ºH7ž|×SãËpåŠAéÖ¯—LLê…𥈌?™í\W‡´‹››;«K©®í"yIxJ… =‰ýkcQðàžk'·¸x¦ 0×'éV/ôq©\[],­oyùg’GpGz„è–Ñ[Þý©žââìly2±ØÐtªë¢ͤSܵÄäbe 2:À梟Ââk›ÆŽöXRì’ðªƒÏÔôèü.ÆÖÐ}²UšÏ,’2qÆ=*Êè„[ÝÊ÷&[Ë”òüö\á}€öªønq¦Úé&ø£“ÍWóŸ~}ÍZ:L§^ƒSkÐÆ5ØUbì:÷ïœÕ;m"Dšûìw¿ºÉ$xÚO­Vÿ„WQÙIv7Æûâ•WIëžjèЮe¶su©´—6DápœÿN´‘i®5Aw$NñÇ婉6ï÷>õ¡$ØPÕ\ç GN3\ô‘ÛÝ[\K±Îwâ0Cê3ÇjiÓ.d¶†ÆæxͲw"Ì@}*wÓ®“V:€òÌF=…Tg «qy^c T±8ÇnzŠË¹±ºŽú[ë £jâEdPÏe47sÅ6ëµ{J>R:ÿZŠâÊiæ»’Y`®À«œ(ïü©_L»¹²²UhÛs¸’3ÏÒ›-µÅ³^ÞÈaÙ${6†9qÚ©Ù[Ïy¤¬A¢–Ã0'v3Óiì¦MJ)áTòãŒ(Ëvô¨§µ¸KÉ.­™>p7£dÒ4S"ÆŒR\ƒæ$œOLqÇJ­œñmŒ,rݘ˜œÒ“ì“}Ž(„‘…Y á˜ð}1ŠtqÉÔ’FÖNHÉOåM—Ou´+¾=å÷¾N1íÒ¬Oò^Cp ©·ïd÷ö¦B%hH•‘ü~õ+© ÈXwçõÅ,2•Œ²3qÜšU$€ Æzçüæ‘Ù‚d BOçPr `¤äóŠUbìD…óÔqÆ(,ZBá¸þ½L<´lc|Ä1ÆMH…ùÑÎ;× h÷gI×^:†ç¾;WM«kvÚF™5íÞï". ¨žÀƱ%ñd‰¦ßMý—t“[[‹… T†SžAÛšƒOñ‘‡Â1jú­¥È#øÑ žãžNµb/ØOi=óÛ]A!J¼±cÍÝÐ/­-Ÿ‰-/µo²Mk5µáÌT—tääMV·ñʼn¹ŠàZÍ9‚;†Q±›Ó®J}ߌôÛ=RK/"öK´]Û"€’ßãõéUOÄ=$Û ´‚é£á$o$â#žŒk¨0ÉjŽ•uÞb²"ñ„÷7–[f7‹ºdòÎHõµ ø«K}2 E$˜Ã4ÞLQ„ù³ÐU-KXÓnt=CíSßYÆ“‚$mÁÇO¥_—Åz6‘ö;Y®gy!°ùLÅÆ89Ç'üj};Äú^«o=ÄH‹lH˜J6àõª+ã]Y#ŒÏ,^o0™!`$##ŠÞ¹½K+ ®äÑÆ¥°‹¸=«ŽŸÄ­®øþö?>Úê4w •pœTÞñ•„ö:eŒ÷$ß”9TP[ž¦¥ß¿åU㦬}dj‹ueo¥˜Àvc4²©*€@G&°týgÄWž$Ô´t¸±Ýf L' Ó°n:ÖÍìÿÙ"m`Ågr$el|«Ã‘ŸQK¬ÞËm \jštÈaŒÉ–åH'¡§i‚ê%ÕãÆ“Ë9 ã$ŽÂ¬Ï41¾b†eÊlhR7FÒ6Ö‰j’ÚH®´R)Œ284Ó*:-÷8ô˜ÏãPÈñíÞ7©WšŠád#djFyRÇ ÷íÒžl¸Ün9úšz€…™‡,Ö«"°Ähy#éŸÿ],Á%„†v+º A"duÛ€qíëߨªÒLé þ³$çéU·`;«| tÎOjbI†RÀ’~îNO¿ÔÕˆ®K¶Âø9Èéšî-$f„\F̼•#ŒœSL¢°@pJªãÙ%ŽWAæs’j´’í¸(œx{Srv±-“Œ`†–Lì;@Ø:óÎj ŽÖ7¡Ç_ÿU1˜Á!26‡Ê ý)Ïp¬¼ŒŽ£#¥Hó‡+Ç#ñ¦'ÝŽ;æœÃgñrG0?‡÷²Œ¨\™ˆ4’Âãnˆ$céRÞX^wç¸ëRJ ²XŠ®0ù!HÀÀÏþ´‘CºFa»# 'šª¬›÷ qÔâ”H{"°ìOÿ®½'J·¾—Rñ^û˜~Úä3ÆB·cŸ\НnoÏÃI´–ÒoÒå"ò€1‹g×ïN½Iä—ÂN¶˜µ çþá¾NçPjD-ˆüO{wi2ÚKkµXÙ®Î8®{FžãN‹L“XÓõ°´2倈XðIêG5ë70™må1£2º¤ŽœWœéÐ]·dðêé÷Ú2;.Ö„…P[ïéŒU¹lÛMñ—‡mü«‰!³¶òQ F8©¼7Öþ ñŸ5µäMypì—¡Tçw¯?ZÔ´ÒtkǸŸQÕ¡”*½¼Òoà°Ër:þ§ÚÞGi®iÖS\ÝéFÅŒ>td2ÈAùG4=ßÚ>=Š[]ùê©F„òÛ8üª÷ˆ­ç¿ð.%µ»Mög‰Ú¤ 0F?“F»°º»K@dš8ØÉ4ÑmÛÁùG©'Šäïnå¿Ó,帆óíßy“Áb2z1ŸÖº;{ËøXÓÝ>V#`;¡wŽq\í´Ê~kåH™®·*•9l²‘Àô½h§Òí<¿õ^JŒÓŠäg¿ƒEñþ±-Ø•æÙ<­¨[q 8ükH²²ÔÌ®ÛeÊ©ä†Éã©××÷MàÝnÖòénÂܤp\ƒ>É÷À£uyi7Š|(VeòÒ"X“÷w(ÄUHg³7¾3]ÿ¹‘ 22À’=y¬ßêw7z(Õ&X~ÔˆØocÓstâ½Jý7iÓá‰cm§Ýé^}¦êv¿ð«îì¼Ð&H]O©cÆ£»šÊ-/ÁÛ$rJ¬ûHã¦søÒyöºî»m­½ÄFy‹ÆD®D=x¯@ðè·þƶ[ky-íÆ|˜äÉ;sÁç׃øÖȤP£ r;RUX¨'<÷ëL'äÊù¾¼u«¿cÿ‰ r,Ò+ý¡@ÚÄdÇm"Þ/Úiêf×»çA3fB3Ôç=E3N–;xŠ o¦¶³ŠðÅBY”g úð*M.9ÛÅÑéé–6—6´BL—Ç©ií92xYÚ_¶ý¼fRÇw”9-Ÿ ýkÐõd²•@V?Jó =5SŽæâ;¨rèC£çÆéÿë­8ï5k"ÕŒ{c´š'‘£™Afùzõ®Ã¶—vV-íäW3DÅvň õæ³.]GÆ¥<æ+x­üæPå|×8$sŽ•—â&[ÊÖMA®OöŠª¹?2z¿§­Ö›ãiìþY kO4ùÒúÖ4š…ųÙKmysu#^„’è’±I“÷'ù ÖÖ-îïœûŠv«ÝIªÜ[ê!´BF)üàŸÎqâ F¶¹žÍã˜ÇaÇ¿ëY°jÚ´×zlM,R-Ðóäá1Ô ”õÔu«FîÖµgòã#ÐT7úÅõšÊîñE‰ŽÜ —^äœäU‹ÝVüê66¶þ@¦õÜ2TŸ\UÖuy º]е'{íå±è*kzižNÛuš=æW®Gaè+VÊId¶Š[‚ŠÛI;ÀÁüzÓon”³ºîD½{V;ê7–öQ^ËR[»Ñr ôç¿OJŠK˹µ7·³†vùŠ\õäô«s.ÛV•ÈGEÔƒëü«0ê¤ |°ÄÐî8FûØõÍ$÷O©Ûy$¤O1U³ÈïœT$Mbql‰¸F Àè(mHµ²\<×;Tg€E"ßI$²(@X)ÚÊH­×wÌ ·]ŸÄùéïRÞÍöxVT‹*©É8æ‰'?Ú –¿:îvj¤·Ó»Hâ_,á†if•íKĬ ôü*¿Ú%3͸.Õà‚{T±ÌdXˆŒm<|§§Ôb­‰\»”ÐøSþg\@ËíÓpéR¬™{$ôç4’ @ u#'ŸZ®üíWÝžç✱0C‘ˆÉÎNzT;€ÎÜ•ôÏlÐóV]§waRG EÚPñ_DÌ»ù†áÞ˜îëõp8p?‘KÉ‚~ñü@¦_Ù[êVogqx&R®¦+ÏÁ-Œ‰&'œÆÁ£YggUô Šéù‘ÃÎ2x>•ZEs¹ˆÉç4ÂU&AÁ¿ˆTªË 8'8ÎáÅ Î0=Î)¬mV^9ëÆik·r±8' ŒÓ²Y~`¡ëè*9C.иÉíž*8—yÉH`õ4ˆ¥Få ž¤Š­•D(àÞô`ª²€0©²˜ËuùÀ%E7Ê!Ô`mé‚:k !€ ´tÀªÌB„£¦*¶§¤E¬éWŽ91‰äsÇâ+2×Âî²@ºŽ«s}L¬°:…\Ž›±ÉÆ+ `ĹXöžpsÅB°D˜©€£7Ù¢b Æ›ÜR5¼38ó£ÙrËÊšYwDI9| sObHP–Ï'4ÖP&i:€¸ù‡z“ƒwûñY^Ѭoåµ·—9<ɽ>üÔš¦c«L†ê=òÃÊÊ„«ìG"¡o éŸÙ¯`öÛa‘·Hœ¹÷9ɪ—Òmd¯›n""VsëP^xOD¾¿ûeŸ37$+¿ê;Ô×Z&Ÿ¨jv÷M‰-ò¶HT.=…U_éRÝÞ°ŽV3€.A‘ÎìàóÏ_JвÑ,të£s’I a¦rå=zSµ]&Ç\ˆA{æã;‚ÆåyþµQt«C¨®¾ÓFóHÀªðŠéKkwo'Ú Ý6é9?>r{ûÔÐøcNµºP‰nÞêÞ2#ß9ùøàoÒ Òm®gÖîuÛû³¹hÄImÇ«;ô…txŽHŠHû‘ÆÓžãÎÃá+8@€Érö+&å¶gÊg¯ÔãÒ£Öµ«a¥ÞZê·SLöäIó1‰ÛíÒ©Ká­I่KlÉ,›Ä…þfç¥[];Pþг»qj~χ-ž§§½U:^£·P-ÿÓ `‡åÏáïL6WÂÚYRÞX’†?3¡ÉÃ:ÒÄ·:LvFÐI¸‘(<’ ý­¨ÙÛßÙÏ Ø³¿@§¿oéY#N¼ºÓá°–â]˾Pù, ¦¼r }ä–%˜„XßÉJµ:£h÷”©Ãôâ³’Òïû8éÞ\l>ýt·6Ú_ZÉhT† ‡sÏ­B–×CQ»í·Œ€ ŒŽÕQl®– ©¶heȇ9ÿõU¡-ñ2HÂLÔ‚[ñ¨¬b{k*EhäÐu9úRê¾°#˜8m£ù Ä×ëvÖ¡Q)…T"UŠèõ‘?´Ë5’GŠê[häò¥¹Ž<ƯéŸðbëÅ\ImoÍÜ‘ y…´a¼µ##'#òëP\øãEƒIŠüM)¶™ö©HÏ ÜCQ/Ä Iä‰þÔ³¨Èìçtƒ¶ÑÞ/Œ´Y4'ÕÒYDI'–ÊÊwôÇj­§xßEººŠÜK,m?ú¢ñV>€ššèpÝKj×ù±®«sJµ{â­/O‘ÒG™Œ`š(‹þñŠu߈´û³¨y&iÐÈ‹l¥ØÇýìÔ“x£JKkV‰¦”ÜÆ^8Ò2ÎTu8“¬k~«ŒÉ©ÜZyÓ†‹jeãÐf´î¼C§ióÉo#É,Юéü˜šO,z¶-ÇŠtXtèoe¾‹É˜â6 ßþªnâ-'U½k;”k„]Û • ;‘‘Ík9 db ’8¬Kè÷wÑCàf-¶&*B»Á±ƒE÷Šôm>ym®¯ãIPÉ“•¦ßx—J¶Ž/>íWÍŒH…Ac´ônµ"{{»Xç†q$N¹Y³»Ò²5ÿÚhW¶vÓg¹pxØšÇÔ5öÓ¼qeçê4¹íL¥Nô8÷ô®–ÓVÓõ '¾¶ºI-Ó;˜6Ç\ç¥U²ñ•¨\ {{´iÈù8Üqž¿…L‚¯$¾`\:õ ;Š2Áyãµ#>æþé¬M_T¼ƒP²³Óì„óL‘öªÇ'ƒëY~'Õoukí>-.ØÜZ¬ÍÉ ~‡mGoâ›»­_L³–Ñ­…Ðw'ÍÉr#¢º‰¥1Dò8-´÷ü)]Z@Xªž˜95“¦=亥ôw°´pÄÀA&à|ÌóšÖ·‰<¢#bT1P´R+0W!IëÇ^Ý©¨¬]‡žà¸ÏAôþ”–âTgMìäÄŒp¾üS‰|3ýá¥yü(hÌq³I–ë‚ÍcèúçöÍÅì o,/há9'ŸO¥\y®äŽIOÊ£ ÈŠƒUÔ%Òt¦ºu–e‰IeŒŽzÓí®gÔtˆ/!`«,aö¶8ÈèqYí4W“Û}ŽáÚ(|Ï<(*Ãû žõZu/´GÕ"µ¸•UŠy[vçc·?¥k[âÞ ȱ<ܬnlã$}j»a¬e¬S‡eùÁ>F™m#ÌÒ«®ðÇð“øÓã‹ Œ•/ŒAêi—žr¼LF$^½HéHVF•Óhm¼ŒðHö¦*„„ @’q×¹¨’ÒOµ»T%xP3Ö—N2ù²©`vzR¼Ø+’ ld(úY"2‡u1ÆGùíTÌnêx` ``Z•-#ŠxبÆÊÀ*wc‘Èû¸‡>•—cqm},ÐE)2Àå$,9Ï·j·9UrU#Â`mÎöRW "íw‚~ðÁE"ÇDöò“•ÈëÓ?¥X3FáCF¥ÔŸ›Ž¾µ‘áÛ>^Jqœd橵¶æs>÷ç PXÜCvÒ7FPÛ{gëô«e# ÚJí-ÏáϵCg>rÒà $¸zuÆ{søÓÒ(Éå¢Bå@qô 4QBVRdeûÅF3QÝIÙÀˆƒ¹¹aÍ@UD`Œžã ïÇùë@–åu‚â°€vàHãñ¦ÉodhÙ×8Ëw?E¶ØÆ®@BØà*à÷Ï®j4ò¦T–%Jít9§åÍåq’Ëì2x£òã ² ìôÜN|Ò0…Ç#pèOcôôªÁåQd ĨœTmB}Žø;I#yùyô¨¤c2HŠ\ŽO\tõüi‹bVr@fù·nµ ¢‰ÈG,IçkgÖ‘à‰Y·K'¨ÇኄČ0‹çŽqŸÎ–H—fèÙƒ{?Z‡ìÒa¶3ü£®x Ã˜ßdùeàáª!nå¶–m£œƒÍ @W9o¦zÒÇjJœ±^z榌¤'˜þ‡œlL™>ñÆIèiE®y¸”sšCj@¼ãŒc=é8Ë•ÆAëšhŒFÛ˜68§K°f'KY‘v®Í£’*Ђuᑞã5Þ^ßG¨ü=ƒDŠ ?´ÿwÙŒd0e#$ñÀÀëOIÇâ–’·ü{X‹w“iÚgŒÿžµèï%Oºì ÝŒd‘^qá½n F—ú¦›<·±L؃ÊÜ%ÉÈ9éøÕŸÞ§‡uÍv _ÆêO:);YNx íšæî­^ÇÂÈÓ«EÞ®.!ÔäD3Î=+¢šòÈ|R‚a"[´y®YÓcÈTcÀÂõâ®ê6ÖŸiÓþÇ+èwðYï€ÌùVq¶{àgþÕLNu5Ó.Zãû#UKf’Ä2.ãÆ¯_Æ›y¨ »? Ü^G ›²Ìª0 îÆìvóZþ¹‡LÖ|Ckª¼pI,ÆeiNÑ$g8Ǩÿæ^ØZøÇlW xðL~¸ô®¤ËkÅ[.D#ì;r¤I8ý+¯Õ.–×J¸—ËóU™”ÿÁ8¯#“Q¶šÛÃò íà/CHºB»¹,O9®Å…çÅH÷yÆlqƒ‚7dñõÅeÊl­üc¬C«^Kb®ª *p­:tô®ÛÂ1Ú¦v+2Ú+?”eêÃ?x{V?ŒÞñO†æ™Ñ"8g~t¨ug}ñ/I¢–#dÌA®+”¸Å ø¢+OõK¨ê¿óÏqÏáÒ·|T`ºÓ´ÓŠ}¤Ï·žBãŸÀqYá¥Òï 1ßésj’'ùeŠ`ýGâ)ö²[_jzý®³©ÉdòNÛ‘¶ éÑpXƒÞ»Ï h¼;j°4ínlm(ÕÎÿ ×S´ƒ‡sL ckrrGJk"ï߀ãœæ¸_ E¿Ç>%aÈW½Í3ÄvßxãDµi4{y 11SŽr3ÔV]¶£u¡é~&ŠÞwt´¸ÀdmÅ7¤Ö¾¢êwúv¢·öñÀp²ÿ¤;ùûºpÜgš­§‹¦F×÷ [¶c0î\#µ\ð6òiÖº¼ºÛË"8hÚL¦3×ØÈ®‘CËs¸z× wí÷ÿ³Î©w¼¶¾kØ.9Æ¥Tõh|M¤iLâÂ/6Éùúgþ•Ví /–ºñÕ.'¸¸" '+{ý@«®¬þ¶Óu+û™üÙ)Òg,²îÈ«7IÓ.5-cÄOo©OhÑÜdŽ9<“Ü{T–Úµíÿ†lg¹Ô »¯.C&YÀèõZ•åÿ‡üOms$ͪ‘ŸÌŠxcøTSCªèžÓuhu)$‰Ä`Û6aÓëÚ¶¬.ï$ñv¡c%Á6Él²,l Î§½`X]^éß ÝÇ”â䃀rØïøUÝRÞâïÆº,BòTó ,@;NÓ’1Î*亥ޛâÛøn.¼Û{[6œ&À ­s6±5’F›P4¯/Í´°û½ETð{-u303mùzfµYCÆÜÁ'ë›¶Ëâ=Ql"‰˜VCŒû S¡×äÛH-•VY R–'ån?¥lÃ<·:Ì ˜ Ú»†y<Ò­‹ ¡‘Ï–Ý7·5ÎE=âø’KflG÷I=:óYö×—6š¤–Ž92åŽ0kFïY…í¬¤«,ë‘æ7 êI¨?µúeîëdsä2?Zl·ÑÚYií †á2Œ.îôõz?´º«MmögÁKg#®jÙŒg*¡Šƒ…ô®z RkÇÝöf†"GÜÑzŒëJfGTQv®\níOEã*´—P{sR5ÉRÝ=êºÝ¤h¸XNíÁXäwïS¥ÉY IQz S¨FÌŽbÂ;‘ëÜv©ãÚ#ÜíÀ=*•ë”¶gŒýჃӚ§©lŠÏ|àéSµÄb˜[{èj[gIG–™à«™5k€JòƒÆ<Ðü¸cŽ¿…? ä¯#FW¯#½6o•ƒà·¥C!Ëdˆp:ýi©”„g–#éŠ]Š]XxÃÚƒ½—(ôâ§Ž)2ÿ*ñ÷‰<Ôeã ×ÓŠú9”8Ü«ëœõ4ü«R€QÚ‘œ"¶@ÎãÎMHSå?*4‡¾Üb˜‚'`®€°=*¯9s#*”Æ# sVZ!IT'oaXš÷‡“\ÑßO}š6`X¢‚Xž*ÖŸ¦-…¬0‚‘v™aKc¦qW#† YãnÏ$ '¶‚WBñFì½}©$´·•Á’Ø»”l–¶Óed†7 pÐ(6vò"³Acî ôã¥E5¤ò+KLG÷Ô}8¡í-ff·ŽEQònP@¦‹+1"Íöx¼ÁŒIå®G§8§²£†YQ][‚zõª_غli±4ûe˜¢!‚G~•!Ò´ôœLlíÄ¹Ýæ¾¹Å2ûMÓï$º¶‚bƒåßlTТ ‘ Â¯JŠîÆÊñ. †u •®ìØŸÙ:sN·/gln>sÈã­6 N·YM¶Ÿl†Náè}j½¦ƒ¦ÙÌ'‚ÊÞ[È€ôô©?áÒàNl ówù…½ž¿Zu߇´‹ëϵÜÙC4ÉŒ;¯>Õt¡„]Ñ0 â‘óóß\u©B1 H'’Gjl°HÈê+Lð­ž™©M¨[]]yó6éw¸"Cïǽ2ûÃÖ÷šì:«Op·0..Üt÷ªqø>Â(u572& ?|­ƒÏ÷‡i4ßYirÇ?Ún§XNbŽy7,~àb’ BŸÚF+û°º‡…Ï=Çu5¡¢é‘hv)eÒÉ ga—Üžõª‘|À1Î+€Ômï.>#,ö¢êÚ5€Cö…·Ü»¹ë‘Œ{Öáðµ¸Ó/-Öæo>û&âä€]óÛ¦ííJ¾µ_æW¹€(TfùJútôªñøp¹´ŽúþK¸-tP2‡’8¡¼/äÝÞOe4ß6é‘Q[ÔÓõ¤ºð¬¶ÚpÓç’Éô÷&' »$õÈ=OŸƒü¦ÔÒ}FicÔ‰”ª‚[{ {Ôðx]žÒÒÚ÷Pk«+68V ™+ÓqïŠoü#·0ë·š ÔUå [!…\qßÚ¨Gàë‡ðÁÑ"Ô¢3oßäó×8ëëW¯ü1wq¨é÷_ˆ.ìâ(̱gpÇ8¿Z†_Í'ˆ®µ;»¸æŽx 2DaÁÙŒc9ëY¶~¾¶EµË3v|•L>ðçü*}C÷W–÷6í}ÚÍ *²ÆKÃì§>Õ¹lâŠöâ5 …Û°ã?ʨk®é—6‚)¤ ëœþÙ¬¸ô-]5-?P7°o·O'dpávú\óÍ_д«í7TÔnîæã»;Ü*0*yÆ3Y–þÕl%ž;TŽ+ ŸvÖ]ιô÷÷®†Š%ŽÑ$•Äjçþ,÷͆myc5‰p"pT°ê+"ÇB×á·ŽÂëR…l!èb¼e=…gÞè·ò¤7lò,ÅãºÜD‚<çÇ?[=í¯‰îo-¥­®‚î[ÓóÍfÿÂ?«G¦jVϾûé|À|ÃòŒ“éRO¤êÍ>‘”µ#O^G™Ãtöö¦Ë¥jo¨j²mx¡£’TÇnâ ‹DÕmî4¹ÅµšRT…$–õf©!Òï`Ö5Q´º?3Ã~ñ¤ÓìuûþŰ nv\u*§“ëM}7R´×f½°òçIP,ßÏùõ«>°¹²kx±©–C"„~ž¼~U¥å¶Œ–:úõ¬5·Õ4ÍfúêÞÜ8œåX¶6ýsQ_ÙZXøvK;›”7NLùåý¹éZzJ›(Ù˜Îù’Lõ$Õñ3"±Ú %~•„"¾·ñ4×Q@’Ç<`nV.ÏòªQZßyZ°û‡»$  ½Ï×Þ¢—KÔ"‹Mš;f3B…#$gµYº’úâÊò9-•d º`‘ÏRÕN[;æ±ÓcûÁ`p_§oƶd`ní 7áÅ" räÛ §ï~_JÂÒ­æVóFcó `°ã‘Ú©Ù‹°«h-T9ùDŒ8õÍX1ÜǬÜΑv’cÀuüꌋ+›iÞÚg–93+1ûÜð¥X•f‹YiQ$a"Œ=½;TöÒ»] "uY ²ã4ÛKg6Ó,غMÞ‚’XBE/Ùx>æ­¿Ì„£*CÔÕ’VÕÑT’Øà ûÔrîx-‚¬„!çåÕ]ì ±™{äçÿ­SË1‰6—;OSþs@Ì‚2èTƒó¥ó°6. ùNzšFºS!pÞý*ÌÅÓ|yܯÔcކ˜¼—Kº0«´0rߟµC.ý×2JÜ*ïÛŽ¶*=*òÃVCsm/˜”mËÀ3Ç?jK9T¹,PØÏ¡éL$°Îü ôúT«œ¬`c,Ü~^´Õ¸|.æ`1ÇÍD^(çt2'Þ°Jt“£ü…ñ€p0}ª¦á ܬ€:Î3Q0òÞ%2n%¸ 2qSI**6ЬWå;{SúÓŠùf(hæ¡vU•¼¶fÜ9¨ˆS!•p7dÕPwgq sòð8§Çóäg¯½ªd\îñŽ)›¢¾ìnAŽž¤Ô ÙB[ž1É ¡ž^»T žù©chÀ$¯@9úÒ¢«§ƒŒ€¦œ¨{†Òå!Řbä`|À3þ⪌¥˜ínûùâ¤H Ø8àš†Et`ƒŒdÁ§ ‹…$e›!Oj™åTƒç@Ì3“ŸÊ¡ù¿6SÓ“^‹¯ë];Qº³Ó’ñ'’1$Ø"6~£'Û¾*¶…}øŠd¸Ô­îL–;C¦7dƒéT`™á]qö¶8Ï<²â´uØäÓ´ßxžÑUšÖ4Ž`ŸÅ <Æ·4}BÛÃZ,7:´¢õŒ²3gßœ~º3(òs¡ ’„wæs±lå2 hÊÛ‡nõãëokÿ ¦I¼˜¼ïµ¼»ïé] üÖÞ3ÐEœqÆæÊLÀçiÆi¾–Ê_jv×Ä-ÒþÒ$á·ó‚sߥfÚá‹ C†€Ýv’1úbµ¼5}d—ž(Wh’íæ|‰ˆÿVÆ3ÔW<ÆøUf7!t½Ç^FXÿJèu+;KŸ‰z\o 2FÖ{˜2ç'œëY¨!ð׌ Ša irÁ@ÎÏN=G>‚¶šßˆ´›­¶Ð­¥²ÆÑ™™öë^’®{¸dϹψ(à[Æd]Á¯}¿0™¬BÚÝüUá1qf6¶!÷ƒ…ã5ßËIÅÇ—´þ·j¬Ê%ŠHäUl¡Þ­Ñ¸ï^kbæÓá]Üö‘¢\´Å$‘¾={Ö‰¬­-¼;¢_鈑Ü,±Z>ò:{ס|²íµH•íëY~$X®<'¨+`!Èϰ$~¢¸´µ·‹á,³GhòB¦F–;ûÔRYÛiš§„®,"1Ë:þõ³’ü¿™¦ØiÒx¢]i®o­¢gd>|Ež%‚§pÅz.†Û´;UŽôÝ@¦ró1ÆJ¼Á¤$l]¸=ÎiÀ¸+…ËÎ}=k–ñ^¥{m{¦iVó´¨M±¦SÊ ÆqïÍf…º³ñ°ÒSP»’ѬZM²K¸«gý?ZÈ‹XÕ¤øyy¨>¡7Ú`¸ÂHdÀ`úõ5©}ªêWúÍŽ“‘ЖyÚ)V7r{=)—âß½íËEqlþe¼™WvN€7¿½S[ÍnÊ÷Ãwê²Ü& @’&P ÇçVí¤Õ¼NÚ­ÅûÛ4-âBü½ÛƒœÓ“PÖ,<[acuv/±eDQ´qߨªº—‰ukí};ÎÿZ|¸‰ÊØC“œã½I¯kúœÑŽîêM> _³É‚žaî8=뱈Ü\XÛÈÅ‘Y¤C‘ŸQ뚩⋋»Ü]Ù:$°Ç»{.sëÅqÍ©øšÞ çûJ7:™#18äúõ«Ðx‹SÒµmbÛSo>Åo櫪Î@ãëQZê$¸û ÑŠi`•%TT=Õ³“Ç­EâMRþÆúöq{+¯Ù _¥ËwQùU[ÄwPÅ£Êfû%µä;åcßµˆZuƱ©[K ¸¶•o$+!xaž9î;TÖº¶¦þ!Õ4¶’[hÃÂ̘Á c?déZηwo&¥;Z‹+y\ÌŠ¤38§Gâ-vêæÊý-$– &·l*ûûšÒþÐÔ5}gQ´±–(Ð$’&âäÿ3À¨>ÿÈ"í]s'ÚœU|iö¿í !¢ nUÚOÏžþÕ=þ±«Øj¶º]¥‰’x‹ñ3ÎN;sŸZrê:–£©®˜‘ÛÅsmk—l²î=€ÈªW>*¸‚Îḭ̈„^ÙHQ¸„ œ=üA«­ÍœØÛ1¼\Û…“îžù5FÕo5ÛÈ/£Š9ìÜòú04šÖ¹.öXÔE™Ø«<ƒäÜßš¬þ#º·±‚¶…ïne)VùÅŸCÅ'öÅõ¾«ý›}mã/!±烑ÇCY)âkõÓ¿´Â5¶I6ßÎO§¤šÍÃj–¶wÖ+Nžj&ã~=ª µYu6£2)ež=ÈÅQÆ}j†©(ºÑRVVÌSùjN>n¹ü8n=CÏZÉ‘JpR£‘׊§Õš[]JŠñ–©-íSÉ;ÎâY FA»¿¾EfÚ^›}.(Ìr(v*%Çy§—K€Î7úqT’êÖ´IR€ÒmlõϧZ–ÙŒŠǰ`«^{UK¹^€*“½ºàzô§%ÁyŰ ä†ª‹Õ@»¼ÃœíàóV ÄR™ee^QÁÉúUUò’Õ¥BÛ m\ýâ})ßhÈd9VŒr9¥3,̱ªøÎ1Ö«+9·¸&FÜ­ÁÉÍ>)Ò0ˆà±eÿúêÜ'W(¼¡ÁÈéÿ×§•¦KÁ'ŸÂ¬$JT*2“žG¯§‰I|cºÆ¡¹Þd#ùI æö‡`HçŽÆ¢ÜæO˜`Ÿjp…ÏϸÞÆ3ŸZ´–<*ÆÒã-ƒþ¢ äS·“ÆìW½®Ÿhm>ÉöXM³cØþX¦®—¦¬Ê¢ÆÜlRùc€OAÅ Ñt³ Ætëe8ˆ‘ÜŒVV§á¹o®b·‚Á¤(]öiðs×°5sZÑZÓÒĈã„8-”ÜÅGeô=³Z© ÀqíI4QÜÂÐH‘Æx#ÜV{xoGXGM´1†ÞPB1Ÿ_LÔƒDÒx§m°–,o,eqÓ¡»Ñ4©§7si¶Ò\}âZ1“éõ¦6“a}Ôtå¹¶²ÖZ-2V.aeÔz)íõ§ßx^æxo ‚ò²¸UEŠh˶¨^zñùÔÖPj‰4ë [Ç—O‚Ô,ñ´x àîõ'·µkøŽÊmWE¸²ŠxÓÏÊ–a}`ÉámB[}MÕ°iV©ùñAN“Ã]kú­ÍÜðù7ðJ(;—GnÕ—†õû[8´û­V#¦ÆA_-˜ÊÝÏaTï<)©oÕÒ+«sñߺD&Eÿd{v«_ØÚ¬v–pLöW0%·’öï•Cއ<òµV>¼ƒGÒÒÖâ¹±¸i€“;['8ñÅ\°ðöµk­^j²Ëi$—Q…ò†áØcžÀ~5‹¢Oa¢Þi·æ"—%¿yÂ8¦iº?‰-íJÖÉdœ%ƒæìÏAéI.‰¨éž!º½Óž `º½Žfe}}ûÕ¿ éwZ.Ÿ:Þ˜wM)‘6O#Þ ñ.}q§Mml¶JÍ,˜ÉÏNœt¦]éZ…ljìõ4µƒÈŠ=¬<ïQÉéÛ4ÇÓ/,uù5‹’hîT,´H Ê¿ðþ¡qc0‰$¼¿˜Dn#U9ëÜÕÉôÝCûSB¸?-¼{\ ÉÇ?N*]&ÂöÓXÕ.®­ÄpÜëóƒŽ}ª_%ÅÊ@Ö;›FVY‘Žì MbÛxkP·µ²»‘§‚v’;f~‰Çõâ´f±½¿ÕÓVžÔ–ñ‘ à´Œ}úÍb>•©Â.ºq³a(œ¾w®ëZ·6W÷õ…ɳh¢†.B]xϦlÕ{u&Ò]9,ãš"ÄÃtÎ\÷Çô®‚8œGóÈ(O–Fà±Çé\Œz]ë_ZÜ V·»ó³,¡‡–ËëŒõö¨®ôJîå–É¥¹i7¬æA€ ô´%´Ô¤Ö4ÙÅ”¨–Ñ…rŒ¤Š­­Ñ‹Xf´™MÑcÈç9ëÍDæKY<>­jþlDæ0A-Ó¥^’6¼Õ.u-¦Ž$·1D…F÷'>ŸZʃK¿þͶÙý¢ÒmÞKëÅkEååÁÙ½Œ ¸lýçíŽ1Å+xjÈ੘…9Žsõ è ‡zÎ@D„c󦦙n«,*Ò¹™<¼I!?LVÒ.þÀg%ÅÄ2‰@ê¹?×ô«Ú”2Á¥ZX¤-/— v(7sß§Ö‹«3ÄßhX¦XÄ[X„$ç•”-æ[&ÄN³Gqæld#p­i5yîm¥f²tE„ÎsŒqëYy’i6èÑÊÎ%ÉùON}½ëm1¤UÇSõÅbÄñ›;”– XI>@£×Þ¤ÓÖDic,í#c0Æ}©ú·É5¤» ‰ téUõs,WVÿ+7ÈW¸Î{Twˆ–Ïb»²«šsÿ¤_=Ò®!DÆâ0 ÅTEe´†`–7%Æ:T÷W«$La€p ²õ¨¢x¾Þ¬Ò9]Ÿx¯oj`t[;¡»æ-•õ4éHk8&AóÄϨ«¶p˜!Oœc’=Í^ÞŽçŒà ¾ßãLË C1 ¸ŒÄ ”°YrYyÆj)2&ì•^w×ô¥Þ€åvˆÃrÇžjÆH9'œæ¥Y6c'àj›Î\gy;sòàö¨Ìò±-ØôùȯH>$×m"ðÜ·3[…Ô$TX°BñŽIô5ÜEuìnÖ·1ʈH;{Tpjv“LÖËq•8hÃÕ+ßYÄXÏqíˆgÆÐ}i«:²nŽEhÛ•*r?J‚Kèà‰™æH·%ÛmM ÊÌû÷’ÀläʹïøŠãMÔ4¨ì%·’9î– ×ï0ÉíÏÐëg%Lˆ¯¸¦ Ç"¤tU@Ò0lôRpj­í¶¡ ÏêÑDJ± àƒUmõˆõ]:òãK˜Jѳ¢oû¥‡ð«Z4—Ÿ`€êBxËóˆÛåü*Ù—ÌfWp÷éU¤™Xß’ ?dm†àíǸ¨‡9*ÜdgÃN{€UFà9ÁÁ4±¢æäœõéD’†ÙM àdúÒ JåK1ÛšÏÖnßMÑn/mâI ™6+¸¿¦jšjú•Ö“£ÞZië'ÚÙ à?úµ#’+ Þ¬›@ÜxÎƤòþEÆÿ×P‚'–Q‘ßGW–æÒÊyl 7 ™XÃ`±ÏJ³e+Éi Ï•,ˆÑŽvr? ±ÖÏ̹žÜSØ6 03Û¥Dv¡]çnsÛ©ª¦Y ÈW!1Ëf«KuŸoqq&ß*!¿jFIõcîk*OéÐijadò„’AÇ>•½ óC3`gœŠ[‰þÏÊ6@Álw¬¯í› 5‘¤£°¼e2`!ÆÏ^õ­$Ë(^2Õò–˯'§^•…žeeÀFrGzyP…ÂÆ¾gÓ¥"Ëûð¡T3ÿ …ä–6a&Ï)‰Æ8"«-Ô“Kˆ~P–2 µŽF,FæAÔtÈëM¼wò± †ÎÓ×éYæy£Ý8Á Œäõf xØ4 Nš­Ô|©UŒ‘»$ŒƒŸj˜NÛvq´õüê†û)eÀ$ð8椊w†ûƒíõ¨¦!t}àg9Ⱦ”Cw$³´l†ELp§úUàѶ(9nþUy¨ZØmi$H–B•¬¶tÚNà8>˜5VÉäT}á¶ íÓ¯jжrñî!:N{÷>ÕUæ1-ƒŒn&¢‘¡a0i"[\c¥F.-Æ œ ¸#ߟ¥*Êg£“p9zSgˆ4gh?{€[—m²ÒÜA÷ƒ`þ±éUb’Ü;0–VrF2púõsN—¤J!ù€GåVctdxˆÂíŒõü? PWìÑXÁõ>õ$“îÊ›ˆìÙ gØvªˆ¥€7tÎsÎ*¡Òì®%[‹€hÉ w•ÇÓÖ¦vù Úäª8=;Qo2G9VÜK [ÓéV ²¨fË9ê„H¤‹`‘´c½W•Zo1K2‘Âç=j%V`\à¯Ì¬Oÿ_ŠÜ 3œ0F}ê%¼\²chÅëQ!¹ ¶s’2HíU§$¹?#+pÊ@ÈüéÎsî‘(ëQ2©ÉÞ…Æ|ßçñ¨rüì¡[Žœþu¹wIsÉã?ç²ÈÌ[. çŠxU=è[ üê ˆ->Òf™÷tÏ\SeµŠGo}È~Pãÿ×Q™QÈ8äö©U•"+»#©¦HGÊËŒcH8ü©Ûлn\1äòü*9æù<²£×¥0ÛG;),Ø_”&xãžjâ…b‚·NÔ!.HÎEDÑ…,¤s׎߭(rîPŽÙ¥tÜ $€;~U6ÜVÆQÇôɨ÷Få22 ’Áÿ"£1’Ìväíǽ;ËÚ'váɟʦRŠ ;`àpMzŽÖḥŒ=ºÜcëòñÅRºf·âåÒ€‚4±Y#Ž/”´r¯Zn™£ØM£iZ“ëQÄѲÈ<´_4¿u$rrjÔZ%…ïÄv‹xäm–@¯Ó$ Ÿ­hü6Q/ƒö™ŽVWœí¨|P–Mâ-6Ýbk½Cc4p;b¸ûÏœûô®bÖòîÓáþ®ñLT­ù‹÷lG–¤Œíôþµ¯â-&#áy¬b3wó#À,¼HëT¼B-®nÇ:]L\\ùrJïò÷zõô§á¸eºñ•ÃÚÝÞ>•A4ŽWy#ž½ÍjøÚI¡ð½õͽİÉ]=qÉükŸÖî/mdÒî®ÝƘÖKç-¼¬7#ïœî4 b—B²{{ƒu”žßyûsïZE³»§t¤ÆàQÁÆO¥s~$–úÚcm<дÛfšB2©þÈ=Mcé:ÕΡgâ Y%óÖÍXG+Eµœ=zzzW;ÏÆ7ÖþÕg¿X庳¸6ÈUp‰ÅM¥jšËkvö÷1Isi0&IM«Eå7ãÔWW(S*áŠ*Íü±\†™u«ÜxÿS yŠÞ%Ê8Øpp¼ð}Ꜿ.Ôîê6ÛáYJ%¸¶v2 <ã€}ªOø£UÓïmŒGÌ{£cÞ­¸yëš©­Ï¯Æº/œÐA%ÕÊHƒœäsÈõ®èE,pFgd3ó,|kž×uÉtýFÂÙ(–ã~n.ìè:޵KQñÝ­šK I}v[e*Ÿ½ÆI1õ©tÏÉ©K©@Wìk”tVU”Œ÷Î:úÔÞ(º’îÞÞâÚ)"»ÄÂÇ lŽjñ^°÷:…½®› ‹L›¤ÏAôç8­.VÕôQªF<±PvçŸåTu½M¬´+gÚË+̱‘'‡±>à ߈'‡M–[¸•™bƒÈl¬äŽÇÒˆµK­/S·‡V¶XôþêHŸ;O¡èýuÒÂp¶â~c˜÷8®+P†ãQñãZÜXÅ,Iýß™ò„'ïtàûU¹|@Úg™2جa—ìùfÞÙ*Ƨ¯› ZÚÎßMy͆O˜ œvÿЊæâ{çžÛÈ•†<¶þü*™iéÞn¯‚nç×Þ¹ÍoH‚ËÃ3J«’ù›ŒãŽ[¦z÷«ph–·ºU¤«n±ÉAتàÉ•è1Y:¶ÚVIbí ”©›pûw®Žû_[ –ÞY¥Ûæ²—qŽOSíYzž·m¨èks-¼¯ldÚȯÇSô©¯µß³]AkŒìÏ1…ÁÏÓõ«0L' 4¡¢w‚°åEE¨kQØO"‡iW(P㟯j† n ̰ËoqÌ8s㸀;b«Å¬Çu'œ±]G R^iWŽÆ”kFÞÒ$·’8elGpØ8γÒóìzýáHžddS„íœF~µ©³hlEÊy§÷›v‘– 鎔{ö×Ð4s$ñFÛ׸àðk>Ã_ÚM´SÇpIýî>^¹ÿ²n¬e×Q”ÎFpT¤ÿ­Q°º†=+PûCNbyJîC’j™µ1šm½´r@óSGöbsØd/Ý=úV]µÒD² ¦“p“Ž ãëSIu¶rJžTCb¤©æ)CƒŽAþTŠÄ«ª¿9Éçµ5nÒgXÕ°ì@Æp sœ†uldzÔ-r³O"àpzÕ›XÐ@à\y¿7gŽ*] » qœ`“ƒÖ”Aòƒ„}ÿ¯N–2H ’9ä“QD6ïó §zÀ;Xç^™Ç,l%;À^3ÚœTp yÏBãNW§›è¹þ”òŽòX…$t J’Ç]Äc©ã5ìwÓµ”¹»´W’?õyc•>Ø4è|;¤Ûês_GYä;†c»>¹5„tk-OíÖö0Ç78$êAO‹ÃZb^Ý^5¿úMÁ(ò$¬ )õæ¬éšŸ Ã,6ù19Ü@%²zt&¡Ö¼7¥jÒÇsynX‡Èà° zpj;oèVbå ²ì~ñI%qÜc Ÿ€´šÁn¯tÿ´ù³&å/û½*ç†4ë}n«q¨ÚÙ*0‘o&V2q…Æ:ó]6½£ wMk æ–(܂Ƴ7Ûm¤:‚|Û£a† SÉõíTäð†®þ±ÑÄÖŒm®<Ï0–äg t÷5ÝÆ[ÉV“@»[iÈÎ+˜ñ‹¨êzŽ™¨iæ(岑Ž&ÎqéQK¢ëxÂÛV&Õ–+s]ì¤úžœrzVl ¾ŸLÕloe·îî>Ó ‘¹m¯ž‡Ž•±¤iž%ÿÛVßg·ä ½)è7J蚇i6€N2Äu®j=S´ñåý·ÙÞÆíQe.~e à~—e¡xHk*ÂkWÓÞBÑÉ.KD·sF«á}SUínè`‡m¡3 ´¿ßjmÞ®Ýi@š(ZúÂpüËÄŠ;ç±®Ê ò[Æ÷;v:£d= súå…ÕíÜKýž·º{ÂÁáÞªÊÙá†zV øK[Ó¬´ëËi"kÛsä;ñ±¹Ûž‡ÿ¯ZWf³âMñ/Z+1"…Š;`s¸Ÿ¨“NÅ‹[k»hmcƒo™8`æP8À¦}j­¾™«%׈æ’À¶¦!byóÇ\Ö¿…-n,Õ“®HÐëÚD’)|e¶Æ7dqÒ•`{^çRH%X’.5uùœž8{ÔZu…ÍÇ…ç°Pé>Ö%mï‘Mn/tôõµœ\¨ÁÐíP;îéQÃo.—«Êó@í"…*7€8ã>”ß&þÇN3$l­qqæHÑ©ä`zÓmRT¿Ô‚Ã8ÀU ‚s‘ß>´,S\hqiko/žæÜ˜ óg$ÔÅãOF ²Å¸ˆ0F9 sÚ³V&:%Úyry­6Bì9#Øb­È½ÆpñJR5ÃáI ㊖gû_‰$?2ï·dL®np*•·Øâ³kYì]µòªáŽzæ™{ŽY^ Ñ]+1€JËô­á³E‚eA¸8'­c]$ÛVŠ ™ÞqÀÏ­W‰âUÕWpË·ëÐ~5›VÖ!NÐAH% ÷§iñ¥Â_BOÞ9 Üvþtið¹I/H1®9Í^„,X{óYP:‹K”“hbÇjÉ'Ú£xZÞKo´†T É^ܓڭÃ/½ Wò²ç=Oõ©/­ÔZHcÜ_hä.3ëT-Å©X˜³É.︤ŒSŽÈgGݼœÆãsRÁå‹Ûµ2þ”c­6Êd³f‚Eó<ìa¹ãjô~”#Æd'¨«‰17ͼûð3õ4‹yjOÌä“‚ÜsL—p8¿/Ò£’fIIÞ»GDî*kHÊðÊGvôæž ƒÀ)òç#$NI]™|ã?ùÅ);ã :zLÁr6rsóM{â°dówç>žµÄÿ:˜ðéÂâ¬C!ÞP’6ƒŸjà [;JãåÃu¡\HçÃæ )RØ {¨úSC¯<úg­7–:õèsQ4Í(ÀRröÏÒžwâ2ÒÝÑÁ>´Àûc\ÏÀ%Ž)¤¸dŒ¿ç4ùÛËuëÖ™ó‡l•犡.¯v7÷x¼û!`ñ«c摟ƛ êë­hðêfÜÅçË0Û±ƒŒçð­PÊÉó˜ŒàÓ‹6íœsP± HH ¹éÓÅû€Â«t©íçR"¶öߎ}j «“k “yM)D-±1“ß½Sðö«·¤G¨CD’‚FÓŽµ6£y”“Ȳ?–¥¶'S­GáÝV=oFMB^8ä$ç$`‘ý*m_Pm7Lšñ-¥ãÆ#–n??Ò¤†Cwi ÌŒŒêcu Ne@<`õ#¥<)WÃ(b2y^åÄYv:>¿8Ü"¢;’l_ja(p€ÆÅV` ù$º7Ï^iï:€JGЀçãP¥ñ‘ÊÃ#<Ôë#:#fqŒóQÜ\ÃmÏ6Ä摘>¦’ËQ·Ô¢Û8–Üç0CsŠ[­B ežy‹¹Ïe=½ÄW6ÿh„©GPÊÀðA¨¼Ò]“hSêyô¨Õ”¨ubAbAõNûK›É#ŠUšHœ«€rPúT²O¾]ž^ÁÓw¦:æšÞsî1ò¤‘Ò–9 ¸i IÑÞ ª0%}2;TR:©a¸"õ8ëþx¤‰÷*ª šgÚ!“w–ѰWÚHnþ‡ÐóL7/æùr¸Oº@ç§_z³ OÌ›FrTŒcÞ lBÌ™ÎX‚tÿ=*}±¬ Ë‚ƒŸPj‘¸†gHv»/ ǾœT¾bZFŠ7*‘·#ñçñ柾5PNpqx#ü棛Êh²FP’N梊RÒ®åU@y`øþyéRÈc1nvm¸$å¹5Vhð­b™ø†FjáòДË>z±9?OÒ‚ñ0€¬09?J‚yU™²„ó‚:zý*²á@ vëɨå”G 9 \àmÁúôúÕ)åW|@è:äð}é³è–÷„Èî®1¯ (ÇÖ¯L±1ó ?s8àZ‚Øîe.Á› ÆÔÉCG4Ÿ;€ìž8?…G9ØÜ>òÎ0W Ç©§¤žabeä˜2ýÑžþ´5Ìs\í#«uëšbìI¹8m«ÜœŸð§m‡-å‘áÆHÏ¥2æ2;†ê3ïÒ˜X£‰ƒ©“ÛýAǽ'šV1ÉÉÿët¨cØÈFXŒ ®Hú~tÙ¢Mœ“ËíRÇ¥T`#$Ê@b2¾”*FK¾P2£Œ`w öó4j 7©ä3ÍSØ’°& ¿7'±³Áö£k)ˆ>3 ÆF=Å n¶ðíFÊ®O'æ=9éQHÂHã`Œ¬yä’xúÓÊ/nÖç¸6$ ˜›ˆþg4ÿ-$*1€:í/ô¤wDú` nÛÿרaŽ5lj£æ8ÈÇãš”, ™]#w'ÿZmÄ*· £Q–ÛŸÃ4È`F¶Êyq¶îHà縧‰QÌ»‡L)Ïnjë[”´gV É$óÔPÐæCñ‚G_jŒ.dæ<…ùIÆyªf,JÍó/Àã¶iZv¶: ¾´ª¸l!Áè§¡«ÖU*|̸ÎOµF ª®§†ÀÈÏ$ç<úPÈåŽO#®2y®šÛX»ÐìÍÖÈ®/)drHØ pAÇã].‹¦¾‰â#^Æò"VÖÈ@W0Ëê§ŽWFìÌ’®Ö*TcÔw¯$ŽÈŸÞjísvnàºÄNfl/Ì?­o9tÏø~K{‰Ì×±9¸2J[Ì!Aç'Þ©ØXê~-‚îø^CÀ¸*%,áàðcÚ­µå½ÄW“ÄÛOŠÙc•­ä ÄÝä}:Ôz­Ä²Áa©!¸Ôt„³XÜ$…d»¹¿jÝõì7Sh±Ãwu¨Dm·%ª’¥ñÆ÷ ñŒ†ÃUÕÿáZêWNæHg1«%‘22>ƧӌÒk¢ëJ¹½þ͆ÐM*»¶ß4=}ê.ÓZ×´•Ö"¿Ž+£)s;\8Ø?.Áòâ½Þ‘üá÷ %”ýïqI2,2Û]HÈ8+øÿZóïÙ$~×nCÌ[3¦ ‡c®:gÞ²íá¸Ò¼!¡jÖ·÷K;ܬf/3÷{IÙ0÷¤çwáÐUµß¶©{¢ÓšæÄ¢l¶Ð§œc©<ÒÛxQ¿ð¤z¤6H÷¯1€ÿV¼ýÿ§JŸEñ桪éÌö²Ooøî#ÉFÈèFOzËðæ»{gá[ígR™%€Êä(Îörq@3WtÿÞO«ZZÜC°Ü¯ n<–ìzz}Ƶ¬iú»éñÚ½œá&l–”Î=¦iÞ ó?áÒü@ÜåðqŸ˜Ö§Š'];@½¹ûw1dnÄ ǾzŠÊºñ5Ö›‹ke¦FË{ùCÌÚà|£ŽÙÕïë×:–¥¨iwÖqÃwjT±C¸0#Ö¶s1ò£É^ p–zõ¾Ÿc­j?Ùâ)c»òž4nÏcŽ;Ö²x•¬tûË­BÝD©å<¼N[8ãÚœ#’+ëu[3j·G÷2£†\žÍéÖ¢5r÷ÐŤÝLög2¶ð¸^äÿ…ké÷ðëvÖúŒ¶H¥Š±Sô«Ó`òTmÆN9®oU¹Óλ¤A=´íq’a7È=röª7>2Š;»Å‡O¹d·ÿXÄ Ï¥nÙjð^YA,H#ŽtÜ…×8=ꇈu;#Išê(òB#g!zaˆúÖ¿{%Þ¦jÃ4S‹”VPq¸c9À=È­»O%ö§%³ÚÉÉæYF2=j´Þ)²• Ì2Àñ‚sÜg8ãÒ¶gvk€±¹Ü2Äàt¬{íV+2¶­ “]9.@ÏÔÔ2xŽÆãNŽHâs,Ž"òЀů8úTŸÛ1½ÝÕ¹†ki¢‹s)±êëÖ¨Eâ½9-†Ë{€…öù†1…ô柪k/o¬ZØ‹w’6@ìÀ_#Œ~5nóX³´»„žQƒ1‰AXǽfjzÂ#@#/$2üжΟzdþ h4Ù¯-íåݸF“åFçŒ÷­«yMõºM;Îy.ãTïf·µ.óÈJ& r[ÐU;=N–H\lÔb³-µdÔí;I1²‚0î{«¥kp&•¼ò±™ÜÄ9=ÍhÝÞÛ[L°¹$“±I8õÀíR ŽñVkp¢ä>ì‚·_Z­w,6†I.|¶o½Ÿ›Æ*5;¢¶ðϸ¸?^¾µR]JÏ2Á4ªJämÛÐçÛéMþз·M’1ÈQÂç·&Ÿi¨Z–JÁ° 3œU[ÛÈ&j\¶¿#Ú­5Ô6›VYCÈÎGLš‚k»F]þp)œä÷ö¥ûT =ëæ‘€œtëý*®c¹ŸÊÞÁ!TúÿZ°«äÆÒoÀPôÏãTeÔbûQUåŽ € ÈâœòÛÇn”ØÊnªóÊË-¼jvÆÌCß§Æ®«Á1%É\änNjæY‰U‘YÔóƒVâ «È îÏÞ‘ÿê©NÒß*ẖ#ð©üùÔ”—vÜžô!+±Y Âö© ˆ«¼7ßçúÓ¤.eTÜ!Žr§­VP¬Å =6©Á>ãô¨Ù0 pz‚85+HnŽ a€9 úT!¥ˆ2²JíÃ’jx”˜Çð‘׿Ç5ê–Þ Ñ×D“KžÝü†0!;b èiÚ'†,t—ià àI,›Øzg°é[RÚÇqk‚Ò.x&6çëšÀ‡Áz[hòé«%âÚÉ&ö¥<ŸZ´|h×–7&k­öcl,eÎåTn¼¥MªIt«s”îž8å(’sÜ šïÃ:a¸2C=Õ©–!%³mWQœ c×ðnŸ g5åªD"p ÏQƒÏ'š‚_éR9íݤ°G䯑!S³Ñ¸Ï¯çYZ·„Oðô¶zTW71Mr²\@òó°™èr½G¤h·pëVr[ZêvP!&eºœ8qŽsúÖ¢xÂ+©+›Èí¤}ÒZ,¥boÀvö«1i2Ÿ­ôm4v‘A²EwÄlÝ‚/·_­t¹¾cÇUõ®VÓ–֧Q··¿¼Ž+ÍäÆŒ6¦î¸ãíÍE7ƒa:-Ž˜u+¯³ÛKæ r_NÙ4º§„á¾ÔÍõ­õÕîÀ²KÇ™ïc½lØi±é¶QÛÀK9•œä»É$õ&ªø‡B]~Î;y.^у°@9=ª»xjIõË]TêsyÐEåQpGÏ&ªEà«'Rµ»»y¢½“ÎbÊWë¹qÐÔöþ36Ôïä¼ŠÐæÚ0 ‘бêqPMà÷S¼“MÕ'²Šï&xcPA'ºç¥F| è–úR_JÖS$7@dcØcµ\°ðµÊÚÜõi®®å„À³È¹©ë…­ èÍ¡é)§} ÜܻؕJ‚søÓ|I¢Ë¯iX ¡HAv » q×Ö²nü9":iÆÉ5ºA*Iåã8 nàó]‘§G¥èö¶P»Š= ÷'ßñ«Š7(Á9 ÎO5!;‚I=+œñf•©júKÙG Ei8˜ï“>*œ:µ¿‹5 TÚBÐÜ@"Uò1ŒñXçúõ¿„c±ò£Í½ÑšHD™¦rWåÞ´4-X·ñÖ¡5•´—vêÿÕà`1׊¥gá­PøNûC¼Xb‹y{yÃä³nÈàwCO_I É ´Î³FÙyqü#·=þµVÛHñ…«§[XÅsgx]¢”Ê¡aÜw­ßé·šnkg}E,$îÚÛ²3žqõ«^2‚æûÃV6þtÓ€C·œ’sô®vm;Uš÷à ý—.Í=AŸ÷‹×qÏ=+CB·Ô"ñ޵{-‹ÃmxG#²‘•ç<×Eu+À20O%‚ã“\•®©kg«¬Ú,’­ÝïžÐɴ{ðj“øNþæÓRK(ç¶´ “ZÛÜ62ã¨êqÞ·5;kÏÇ¥ZfÍh°Ì²ÜK&0œæ©Û[êö÷¾&ž 9K¥Ýlò(çþ¼ñXövº€ÔôkÖÑï${r~ÒÒœ³±ïÏa[Ö÷KñÖª~Á,ðÞme‘GÏ׿Ïbê—5ú9¢¸ÿjEtÚ$ð?¶õ6›Åi‹)àò&\I4[àr®j­¼w0]xžcevåL-óðWúÕ+W›Ã¾Ó„šlìÛÌr»vdðNG9Íu÷ ºä½rZÙ–ãÆD«i;¤ |Ù!ˆ°éÚ³!’D›ÄòK·*D! bOQÇæ+gñð¥¤rÛ²<9V!Ÿ^ÜÔ~-Š[¿ LÂÌÁ”…Q“ݱ׊Ç×.Ö‹¥y6—A¢]Áˆç 94ɵ]ºÄè’Ù˜’FŒ€¯®*¦‘"¥ªÙÉ ¤×CåWx~_©oJîY$‰—f̰Áìùçô®OTY4-ßÙ¤žÖH6nA¸¡ïþ}ê Øn$¾Óõw²•tõ€rÛ¼@õþ•,Û/µã|¢Co±C&Â778QÜõ¬qjëá¤Þ{͆‹aè >žõ·}r-üM§^½´Í Ú…\FN[œ:Ïb–z¦¡¡a$¾|¥ãuŒ°ÁçýEã»Ó­ôÔµ[YI.ˆ@Î9õ5FY^çÂªŠ» K©ŽÍï]…¬ðj6û•çñ¬o@ëö)㌴0HD8硦]G£®iÒYb„& pOçÅEáÉ"YuÈ&F™™ ë[C%¶KÆ¡œîËcÈÖ‘s¾™©A1+1w;JäcµžïðŲ`y¢|‘ßÿõªàšÚziu!7‘*ƒ«Ç¥lXH¬wÇ‘[†Ê+gæÛ“ÅfëJ±æfûùcû¹úTÏkq§éÚ3‡V;„cœúS­ÖÙõýMˆŽL(ÙœO–¾Dwß¼üñ¹§^F- µ¼·G@B¤óƒÒ’þµÒ퓃#8wÉäóüª[YU5‰ÞiÝc'¡Q•se|PŸ/ÎxàòsÏåN•¡7Ö[\žzS y£hŸÌ‚I3âS]¶ÜŒ­#yMƒ…ç­b…„kùŒy_.ì ž)–Š’é*áw‡%‰ëÒ«HXÚÙÿZ ë׊•¤VјDв+bN>osK6Åa“í,Î ŠO·Ò¢Ž4hï•2¼·§^ž•£c1–ë´cn <եخÎÑ{sëK™Kð£8ã?AW-$&u‰üÀ`÷íQHÞsíl¯#¡àz)aZ38ýáo—¦eWbŽIê3)IùÄ›<JY™K4ƒ9ÆÁÇqS}™Ø)UXà×¾›˜ôÆ3U*L±…ŽH I P]Ñ”}ÜsS<’Æ„øÆ~”†F– ¿w€I…oâ6¹×µ-+ì$%¤{ž]Ù,O sÈ­=6ñõ=6+Ño<úG*íaõø–-„ã y9£) Íæ`‘Ôɤ“Tí<·êöÔûW=iq5¯„µ]f¹…åõØŽ$`·Ö¶ï¯uØ|K£èÖ7í,«j$ºÜмN3þEU²×u«}Ä:¡œÝ4LÀì:ÕïT»ñ-¬Ú­ÅÕš@$¼••JëµN8í^‡äòŠÚ~)³Æ$€¦ “ÓÁ¯5ÓÄz½†§tšô‘½¥ËňÀ W×Ú¦x®ÿÄw:6˜%kY%‰ÞâhþómÈÂúg{ûCT°ñ æˆ÷ÆU{c=µÌˆ §±õïT4)5íc@mFmmÂ4R©‰"P{àç׊‡D7¶? çÔ`¿u+HŠÊ¤)sŽ3ÍhC¯_j7ú> ËÛ´¶Kqq2¨Ü~^‹ž0jºµ†©¬h­x$–+csoq" €9 ã>õššçˆ-ô'W}E%Žâáb{ `‚OSëÅzCÿ©B„¯¨V^¡©#K»¿u2,QîPNyþ±X3êúõ—†"ñ'ÛRLí–KCØ@zädsš©to5Oˆ\ÑÞ¼û:2cbä{ýk½…Ö$ í.Ç@ôÇOóéXþ-y¡ðôö²˜%–.N;jåõئáE¸–áf$@SäÛµxã¯?ZѲÖu?ÄÖZ^¥qö÷0DÙå3€{ôªƒÅæ©×Úm´’“?gÜAÁËçƒô®îÝäšÊ6hÌLêÆÇî:ŸkŠ…ïÉ4HW‚>éï\6®Zû⑦:)‚$7N½7 ~XýjÏy7ôkUµŠH@‘’'r‡nî8Ç>µcO¸µ¶ñ%曊][Zf7FeÈÂnj-3ÆW×ÐI2èÓ HYÄÒùÀí 3Ó½\Ó¼My¬ÃÁ`ªì®%ÎÍ¿ÂÜpOãPø/QÔ5KË‹Å3;ìu|í#.=+KVÔ¬´[$¿tq¸ìÇÁ‘A×ëTgñêÙÛjvl.¸ŠHäܤÿtä u¨cñ„—:Œ¶h×R4,rëòäö÷¦_ë)¦ëÖ¶/yon¯ÌîÜ;G|Uk‘èÞÒÕK,ò2<œç­#I ¬žOͿӎ¦¦‡ÄPZ;;Û+‹iî<Ö1ô$ QÕ5ˆ¯4ýU ³¹š£d–xˆ ’õÉÇÅG j‹¦xONóCI$ä¬Q® 9êzð>ëV¶Õ´=WË3Á5º7›¶ ñïU­ ûG蜾٢„Í™ä2’ré[Z­ý± ÚÝ8ýédxÝÓ?¥Iq|¶¶77k’-¼y1¨ãÖ¹mGRŸWð#ßÈ×óCŒùRL¶0=p _±ñ%µÂØXìž9L+噓 &8?Ö®_xNµ¾ åM ·`'–ʧ¦MO,±†–hÿyà 7îãü+oé@<+ ’ÉÎÑ;1þ1Ö4‹}&·¸Ã3#''Ž¥BºµƒÚ¼ñ‰‘ûÊI‘ˆìµVOÚÇ#™„ª!]Bmd'Çõ©nµa¦šä8ò®äŽäþôªÚmÝ´Ýj)¨K剾s*“Ï\ ⯾©kup`e–'™wƳ!RãÔzý*¬ÙÉo4Ûæ1E&„ ¯ÔÇò©n5kXáµx¤’W¹ùãPîaž¸Äx®ÖÞkF+9þ®ôÃâþÔ9DiY• ÜcžõVïV²[y.á™ÝY‚·îÎwê=êÔ·$P#Ï"É"y¡6²~ƒ¥QƒXµ•ãR¤ŒS´ôÏ8­w·Šg1€}ÑÎxíY:n«ã]`pÁ‰$| g$ôŠlz¥Ä‹ÎèXáû§ À&›üºˆnPÎßgHƒ0<íÎ?•9µ” ˆå |¬yÇÒ–)­g‘®Ì{aûÁº{àâ«FÒ{“w ’ÿ)#ùSo.!´™ã–nHÎÔà¨÷ëÖ§û°7„D9%¹Áþu—cpn^[™ð­ˆòØUõ¯Ô7A„W &cË…S¸cëLµ¾µ‘ -¼w梚x°iãf“¦öéR·‘öWÌáÔÛƒçó5̱Nso"’ùÉà}j­äÿf`D‰¿ö“ßÇz–Úõn4àó" Xýá׿ ~Ô@瓃“š•_ìÌSæ<8`yçÒ«lUùU‘Éç<¥U¸¿’-‘ÂÊÛ›±ÈçµNÌnw8pyëVO)£ÚI8$:šž¼û…ÞçjžvéRd)VPgsš•ØùÑ™‰ûÛ°E:Ü!’0ž3þGzl–Áe;ŽÖc…±A·ò-ÿx9c€ö©‘&s¸qÓÞ¡dˆÊ³2Ì9çÚŸfÚÌxÜJ‚G×5r# i´¬ÀŽQÒ½>×Âö6þ:ÜÖåXœn$÷Î:Õm+Â_b†;yu+««xTÆÉ…PÇaÏ´š_„’±Û.¥xÖ1?™hç8,Hö¨í¼ ¶—wkiª]ÛÚ]JfxhÉ=pÝ@ª×†[ÝBDÔîc‚û™a\|ÇÞëjª~Ç™ieý§t<‹(nຽZÛÓ|/ŸªÞ]‹‰å–æ5‹sòÑ€1×¾k‘Ô¼/.‡¦Å¥<÷wr“u•[[Ò$Õ´{«”GæÄPp+™¾ð¾¯{áH4i®ì¼ÈÊá‚°Â/O©üª[Ÿjw~#Óõ-Ö‹¤^[)c“‘óc~*¦›á_hóMm¦êvë§Jå‘KI};f»‹{o&ÚL¦Bˆ»œ³c¹>´æQƒÀÅIÂã§“\‡‰¬¤µñ›â+d.°æ+ £'Ë?ĶMTÖ ½ºñ†“©ÚXËsamfhÝ~}èÉíMû=êøòÿP“N¸6ÒZyhÀ®[n:sQøFÏQ°ðæ§ ¶,—fG’$©V$p85[GÑ/`ñ%­Ý…ΟÆßm‰±ågçÖ¦ð¦“s&“y êVÇ‘ÜÎnìFÜsÚ—]ðYµÐ”hí$³Ár—)$-»oéÖ“S[Ÿ_é­Å¢ZKçÜ<É·iî^•/…íg_ë²]XÏw.)$B ‘øVUŒzžo«èÒiWW pÒ<B¹V ;ŸÊ©.•©ÚhÚ ëéROö‘fµu²±[6RMs¤j3ãKc"¯“ûé\ôÀéZÞ߃ ·ž a–"Êë*É,OúÖgc{«k(á·žGŽé]„q–€rN¸¨Ì„|@[Å´¸ò>Ãå‡ònìçҹȴ­Bã@¸0ÙÜyÖÚ™º14EK§¶G'Ú·õ`ž&Õtac ÀA/›4¯_,qÁ'¾k?N¸¹Ñô gBº²ºk†óLO%–@îES6Ûi~Ô.ôÙç³¶WŽxá“מþÕ²Íe>¬]Xi-glöåC3œàéïO²¹ŠÏáÊ‘pÑR2¤1sÆ1ß­Ga1ЭtX'YæÃy€ ›‹A5ÐkÚ™¥ßmg w¡ëòôÿëW -äOðßìI¾r…V3÷·çðnêòݵ¿ ´@Š2¹ þµBÝl4ë½FÇYÓ¥’àÊí cæxí´ôŠ=$+nÀ À‡8Çoʹ=2êÖÃÄzû]MlìV\î<ñÿÖ¬»«l|%܃\Þ D,ÂúãòüëgÅ¢8äÒ/Õ{'ÌØO·¹‰ÆÆV!Éê9â“ι¶ŽæÙÕ^CmˆæOîdH#ÓžÊÕÞêC*‘û´sÓ¥6×È™o£º™Q‹ÅˆÎ§­Kc°êS/’d Wã øÕIVÛRŒ(òÖ@Sœ€sƒŠ³,QEu¦yq…-ÌëÇz­ $ð^<Ê|ÐÄœö8§Ú} YCöh”“œ±8ü(Rójû.F'Ýn€Ô-G¿Œs¦ñ· =©ÍPèkP Pž3QȪåIbPt>ôÌ•ÜìÀ÷éíÚŸªØ$…\sÍH ’ çgÖ¢B¥ˆR 9ž(Ü$²¨Q“Î)‚ux\|¸ÆCg‚*$E8½Ôýê†E´ã¹hTÉá »ž¿J‰­-g¼†òvgh9 ùC­ŽçÞ®N<ñóR§/'‘,jŒ”à`½ê¶øÒ@ÁPÆSëškì™”L‚8ã¯øSÒÍ+deµ§èÐé—÷7&âYËnrʸÝÛŒ}kJh’EÃÁýNG½T”Ç€Œ”¼¶ð?OÊŸAæüŠª g8À8§9eG§ÜåêsMUIbx˜F¼‚vŸ¼ÓëY÷0ÍomÕQóË(ÓʧŽt; ŒË Îí¹öÅV6Ë,‰ª°¿('>ŸÎ¦XçÞ»p@ùz™¨Ã!–­†!Nϛާ–1,ÁäŒ|€øÉ>£éUábŽXÑcQì9n¿ÔÔzzÛÆd•a„áX =òJ½0™£”ƒ³…cÓž•RÛh“—û:$’(ÎW¯ä9ªM¨pÑZøùßf=EGj–²™í£]Ä Å_מÔ}–Õfò¾ÍY1”$cð§=¥’¤±$mbp»O¨¨gÓl& ÚF¨¤îFrztü)F™k8È·‹z í(Ç­\˜¤APmàãxäu¬iíV[©J€¾b™1ò·¾=iÿg†ƒÚÅV\;mç¶i¢ÆÍ|VÑ+€X·¯^9ü(þÍ·’V¸x#yr8#8÷4·V\âgˆ” M,ã”ùRC±!Í!i`Aê£:Ö—ƒõYõiKU.áò¼lª’G&yÇJÒñ}ÅÔ~Ô^Òs‘Dͼ ð#ÿ¯\>¯ Â|$·y®„»„% ·`ÈàóÏÖ·,5ÍwNñ.Ÿ¥ê3ÛÏ å¹‘DhA‹¦{ô¬æñ>¹¨%Õþ•nï Îc†µ,%Py%ûµÝÛ\Í5¬É‰ž0ÌÁSŽ•ÄjRêÓüIµ·†î0‹jdE1ä"“†g“ÇZœë¾(ºñ5þ‘hºzµº#‡“v6œ~§4šç‰u}"{ù¤û%¼vá|ˆäšãÔŒʦ×@ úõ£]·’×ÁZv­m»±Ž)@y à}Žkª²¾[ý&ÖùI 4JåIΠ튱$±˜™™†À¼ýó¬CâÛ¶7\›=Û>Ö"&0sŒúã=èºñf‘§M3É&ùzyq’c9?…hÁwm©ØEy ‘be ?Jâõû¦Ó|a¤É%ÔÞC#îEf`HhïÍo[kšN£¢ÜÈ·3F¶êÑÌûIqùóFŸªiúw‡¬$ût’Á'îâ’@ZI ì3P^ëZn£¦ßÛé÷OðÆîʕԨ÷Ö_†¼Kb4í2+Û·7L­ùˆÉ'·Lô­Û½BÂÂF·¸“%WÌx∾ÑÔ1p*½Ö»¥YYÛÊ÷‹äÍŸ-òHaø ·a¨éúÔLöo•ˆ•cŸÄ{Ñw{™&é]cWb]¹fbO@:Ô6Úþ,ºfWY}È"¡·ñ.•"[CtŽòÀ†s“X>'×#—NݦÞH”Bùç Œqìk¡¸Ôôë4Qq9I°»Üàv¨gÕ´˜tøn¤¿A™A?6;~&Ÿ©ÚêqÌÖ¬ÚHíïô¦K-¥³És2 ŽpǧâsYÉwi;ȰM¼jK†%p=pyÅ;OÕìgž8#Ôcf‘J É$·ô­$Ûk5Ä’6Ћ¸ç€9ϵdJ/·í°(‘œç{Ó,nì/åkx®Á›%Ù»Ðzçvm~ÂÔnccðNÒ}N8ª7:•”sì{¨‘ ê)ƒT´‡lëtžK¶AüXþ´¶ÒÇ%±’ÌÂGê`ý;ÖŒó´VÓ©v48/ÆßROãT´ë«+‚Z¢–dO˜óÅ$W¶²L;ˆV`=ãŒn¿•V»Ômmî%¹Œ<|0 ?ÏÒ’-BÐÛ*µÄJî C¼dŒcŽjYš+k¦i'H¦h°C¸Tn/eƒNº¹³š2Êwï0>´Õt“Oµ¸¹œ,…gÚ2G5aïÓìå¾ÐŒ„eX¿ÊÇüЬn”l™%KpGÓ½;~ö¾ c‘Ç4×0Ü´pyûŠ‘”Y>æ²®%g*”HŒq†÷íVä?*@ì˜sK"î™_1ª|Ç9ÇøRZ][ÜFgŠBÈËc°àRF›]¤ ¬£$0nŸýzƒîâGGÌ 9ÇÚUä’?0yˆ2BŒu÷ü)ö¬Á]ƒ#gäýjÛ8 ‰NpwÕFâæáÞ4jÈÅ7-:le>oEæ›°î&@W¿ÿ[ê(‹/#©¤KØu&ï…A@ ‘‚éMµ æínì=yç;Êû‡Èã€xõïVC¶p$Ü2¬xÍ,÷L˜‰gvO"‹Y“ŒªíO˜›ñüh.w$ãp{:C,°‚¡vÛpØäŽŸZž?1Ú$Ûíþ½ªÀFvThòC íTf9J7“Âñ”~N3ëJ–—…Å€¸èî<ªÉ¯k§l-o¥3ñ 9Èç§½\¼ð®±=î…,×VntÑÏÈËægŒ~B¬ÙxbþwY¼¸–ÜA©FP¢gr``uëÅfEàívÍ¡5Ý“+ü‘Ú¤’I÷öªÞ HßÃÖ~¹õeXÍ»@¤®AÛœãŽ3šî4½14*ÚΡ`@¼ž§¿ëšÄñO‡oµk:êÎhD–’ï1\Qþ¸ïY¶þñ­î©r—¶)-öÙ o•Áéôëõ­=/ÃGâ–Öîc´·& †+f'ÌsÕŽ@ÇÒµõ»!¨è·šr²£O vÈ=q\…߆|Gyàøt)O @¬†yã’qW¦ðö±sâ7S)h©k•"ù¬X’0Hù{U=7Ã>)Ф»´Ó¯,>Á4¬èÓd¼Yê@Åu¶Ð}–Æ+y%yv¦Ó#œ³{šæîô-Y‡YxkUÓ?´ç°³Š;[—Œ ¤ Aùý@ÈéPZønö(õϰY5µ½í¹†+3(?9-œà}jH|5«Ú&ƒ©AÍ>/"kvqó¯<©éÜõÅ\“FÔ/5é5¹í v¦-Ù×{œ’Gs޵’Þ×G€ цž>гï'ÍM¸Ý»=Î+У Ö°´ªÑ°PYO$¨úT‹…ÀUjxr¬KíÚ3\GŠÖI¼c I­ÌÛ»"bªäU7’-{Å3Éit#¸ˆ˜Àß6©Ç¦²,´ûë}7ú²¸#M‘Òâ6wÞ¶u>oxnôä‘!·±–#4ˆSs²° 3ÉÆk&{ûøW²xzM.ø_Å„eX S†Îr*{Ëaa­Xjšž‘5Ö-‚D@‹sDãÕ{õêθIà}DÙhïc ò/‘Œ‡”äÅ@ã§ô«¾!˜]øÏO·žîö8¡†2>lðIÇ`0kOKÔm¬/`ðÃ[Ì&†Ù@‘“äl(Îz¿«XÉs¥Þ[Âáeh8ÏNHõ®Þýáäú$ð²êJ¶(w³Á¸÷¨L_Ù¾$ðµ¥ãö¶ågôRGŸÒ½a·|(`ƒŠâµÉ­ÇÄ K¨Xã}ùè¹}+ÂòÕ"ñ› cnãŒÃÄþµJîâ; øjhI7ÌYTW=NqϧJÕѵ 9ôßÝIv‚öê&w‹i@œÏ^Mf^Mkÿ7‡âó#óèä ¶sùŠºdÓ¬|Sª®¹%Ä1\ª¼ÆîÓ>SÍE¯.›…,Ö¶Š[ÐcŽS–1Œå¹ä•z-²D¶Ñ˜dlî=x®SÄ l|i£_Ý« % …Ûõôê?*­+EqãkÛø6´†Ä­Ä ü…°p3ëÓòªZ§ŸðîìÛ"=ÞÉ@òã'œþGPÕtùügi‘}¥âÆyü*Üía‹n_Wškx&·ŒÚˬ¸dT:âiø=RÁ-ÚìL½dØgœ…vÖvè/Ù•J:ƒ˜ñóŠæ¼Y˜u-îE?fŽoß6Þä`š–îkïéïfÑ´qÛ³\²T&3LðUµ”¶×rˆÑæ7Œ¶ä¨ìsÛÿ¯[W°ÎYp«†6àšó°-G$ Gç›é»¯øVÍŬÄÚTvÅT½£‘´ÎÓŠn‘-§ü úŒL«*y‚Dl/Îò¬ˆ­‚Káøn@ÜìYƒŽÄŒ~«šÕ²YxŠÖ9%6¶ÞWîÝ@[<öÿ9­-ƇO¸y"F îqµŸ®Í7ÅÞriöóH]¢¯ž½2=ÿ*««ÿg=¥Ä¶8{Öƒ ÆÛ‚ÇÆsŽéššÛËàû) `eR‚ £æÝÐŽ;ÔqXCwâ;äž8÷­º’æÚ2g 8WÁBì¢y¦ãh~ãšÓ–ÎÚïÆÃ2§–öàçxàò}ê«Aöh|C '¨hÙó¦`.£¤£J‘#@ Èê îÆ;ñVÛO°OÔãk¶™pPç÷>•_@†9%™.UÜ`tP8Å[ÕD±ÙÉu ù‚‘…<çÖ¨ÅkbÚeœæUYFJ„foCQYÛÁsáë™e?¾ Ì[ätÉÿ=êºBg—J7#"lƒœò ñRÁ‰õ{uCå„$(Î5Å¿‡¢xÊ£LÁ\É=êx´ô†æ)LÐ:H ùh>ðæªZAÔþÌãt[ØÇžŒGlÕ»5‹PÔrB Ø5ž+Ûxg‡l£vÉ‘&}kEæ¹*[û>\gŸÞ/zj]]G¶S©ï†ü³HÒÝÏk0’Öh!>`õeè‚ô\È.àãíOŽKJñ•ˆ$F¤+9^Ýx§^Å-¾”D“q »KFÝcïV!¦Ê›©·.NÓœsúÕõi%³Žà‰"-¯~=O½[ˆ4Ãb`ägŽ/óš|Ñþí˸Rüœvþtûh¾Î1ŒÆä’@Ç=3OŠÝb•·„Áùzõ&­¿š\ãsάŒ®¤rÅ€@yã¾jD$_/s†ùHþÎÏ+´›H[ø¸ºôýjxî™ ÷Åz¨W¡ˆ û°I8Ͻ.ò§2{í4Ʀš±[ˆ¤Š8ac%Uý)ðaÝåD‘©0EÆ*ˆÚÚ¤û’ÖÏÉcɤ˜As [˜b•?‡zöô¨f·´¹tŽæÞ)QxMÈßoÓõ©ü¤ŠÜ„Œy|ªІf†é¼±©È9x þ•Aoh0GG‚ÝÇ¥I1X¶#¶†Ù,ÊŠ¿@qQLsÊ+¥Yz‘úô¬¹tû=ë>¼¾PÇ^¸éÒ¥þϳ ®¶0‰w”2¼ñІ}2ÖišY­-¼ÐAß³$ýsÞ¤}6 ñ,öÐ;a@‘ãÿõ»RÜZÇ|¾]ÜIRÀuÅeÍ£—×y mQ**vö?­l5ŽšÖK·_)¹hÐñœ÷ªï¦Ù<)k=·™d„P~ï|gÒ£:vœ-bƒÈ_-dÄdûÔçJ´ûOÛQÚKgx$S¼½™‡Ë¶IgµgC¦YZNÓÛÛ(|g{žŸAUÆÊYˆœl¸¨'>•¡&›§\ÍÍ«Ä]²qÐQÇ¥Z@%ž5&IA ûÒr¨Ï¥SƒN²Hå·Hƒ+ýàí“éNƒE±µ·2#©‹ò£Ûüi­¥Y2Ĥ¾mþ⇠óÍ)Óm%¿•Ïœ]Înàäuü³PÛéÉё淗•Œ1È\úU¥Ï’ÊëÏB}G<cŠS… ’{t¦Îò•œ²•P£¹úô¬›5š×Ë»2ª)Üb,0qÞ®\iÖ÷2¬¨í _)°HÿóQµ}BCJÛ±,„ï¸ õÍZ’!pÇ0¼güûÑipAeGœã#Ô!3"®ñæ:’»qê8«1[¨.ò.Óô<’éš|’ªÎdMÀÀQÛ'4褿 sÑG@®)М÷•Ýœuÿ Ѳ<µR¤¼ãڵώ5[˜×P´·3DÓm[_²»8ÈqÆkК[dA À­Á¹ßxƒUÑu=.Πgϳ2–û߇AÍWÓ<]o}¬ZkqÛƒ¦D&ó-ÁÃ)Ç?…UƒÆz¼×63 užÞíÕ^íä =ò0}é/¼]­éºåÞ-µ·Ú$ lŠÆØ›'¿<`g?Jn±sâ¼g£i¢æÑI…¤ØªÁ `çw9>ÕÛò²B᫉ׯ5µñî•akqÆÈò*rp~ö:ûU¸üA«_kz¥¦˜ Y®óÀ¾:Àã­s¾"×£×¼ $³Û,–שè9 Àóƒ]f•­ÝßO=ÜKhÐ.ú@%G 9æ±áaÜຊÞµ–]žRn3*vcÆ? »wâMZK£XévîþI™Ix+ž ãô­_xõíçžÙ`š)ZU9é[3#—`XmÆzW?âá%µ¸Hšk‡Ä~cíAŽ¥§JÎÓüg%ŦªZÖ9g±ñ ™IWÕN*¤><¿š~£6"°»”Cæ òÀ“×éÁ­=GÄwGTº²Ò,ÖîK$1–B$pªSU¢ñeÅù²³·ÓÙ5 ˜Ì²E3”¨ã$ã<‘Å>ÛÆ–è/íµ[sisb»ÝAÜ}Tþ_sþ-Ôoµ-3J¹ºÓd¼¢“ÌÌŠ8#dc¡í]­ã?±_Mci2Ël›å3Ì#^FB¯©¦Âo iºUÅ´§Ô\¢¤’mT+ÁÉÁö­í*ò]JÛϽµ{iVGŒ¡mÝ2¥Câymí<5y,öÍunù‘«m%OZåµ~òÂ/Zi6&;{­Œ¨\r¸ËÉéÔs]Ô@«+/–Ì È„çiö53ºÈa'hàŠhPzp}+ñ•ÉÒüK£N.fŠüõF$6Üc*:õ­í7Ä^¯ku42²}“ýpu(P`òAúK/é—÷PÀE3å­ÚXʉqÔ©5ZèpÉq ^î’ÁU˜Ž¾‚¥oé˦Át. Öó¾ÈÄjK3zc®jΟ©Ûê(óÙn*’e(T‚:Œu­y],àyåp‘€K3œÞ°bñF‘s<¨·%!qº6RÈ;®G?…-¯‰4™t«@\–·Cƒ&ÆÂûS.œúT’êV a¹¼Š6wù|ÇÆF{dÔisæÜ$L¬›Nv°# ãŠ{ì†ËÏšuEÁÜÌÿ/'­6ÆæÓP ¹Šo-rv°;xïŠ}¾£jÇìñ]ÄX¶ïRI뎽k+ÄšÄzu¥ËÛ\Áâ&UN¿,ÿœU»MD/‡­.¯¦‰^TVg‘€¶;Q-ôW\*y ¸YC‚=Ži‰$/æCÉpÀ†%XqõÇ5buD»]ð2ÙéY÷-«Mª,P,AÞgBrsŒG5‰cªëšµ­óÇ%¶mœ _,üÝxëß%†±~ÚòÙߘãìË)mÚHI=«~+µhË+æ.u=@ëQO)œÏ42#[ˆÀ;@b=ê8ŒÞL±¶[åÜ7>ß\ÓÔE,dšÿòÑ_xãÒ‰˘‡eT'·OçUícGVžBÙÎÒwtН<‰cq-¡V‘l’HAYÚTÒ]ØÇ<“$ã”Æz1ǵ$÷#_-Ú3&UpqøÕ©Ÿdèžag<…Ï_þ½:gýÛ‚ƒ€NrsÞ¢/¶/08?.í¹~”<Œ ªHWø¸ÌåQÃŒsÏ~zT/Üà•Üì3¸Œ­OHC!-׎3ùÒÌX±`cƒÇ5l¤$»›vGsN;Á† AÀçýïØmd”C»+óV™lVòÞ;‰Ü~r»»¯zŽÒïϸ¸¶0²<ŇùÍ ±10ÍÕq‚_¥Lñ$Ìxv Ï=y¦G2ܤí\ŠQ y‰r»pTŽ¿¯àjʈÒ=Šê›#ÓÒ£¹¸ß¨‹o._™ ip;õãõ¢ê'B»†çÏ@¨ò"‰AbI¯CŠ‘FŒÉÊ9ãÔáÞ(öî<0zŸÃéSÛe#bËóí8 Ïÿ®¡‘·:´‘å%çŽã?•?zE ­pÀžOlçüþ4¶äK7`ïBÀôéÏJ•Ü ‹€2£§áøTÒ/ÙÖ¡²pÙÆ#ñõ¨RA»÷ãÙr1]•á¿hÛô«Iì€vò®Ÿ%ãS× ë]Ìq·XK;ocÉW5â}+S¾×´k«Kd’L®Z@³ŽÇ·ëUÃW×úÿˆ^ê4ŠÓSƒÉY@Ì„Å3HÓ¼c´:MÇÙ"´ƒo³# èõÇ5S_ðÞ½¬¼º™‡ÊÔ`™>Äqµ"r}Iþ•rÿLñšö‰­Ge O ñ°ªO|÷ö®Ù™J‚F ^p8ÅkºN°Þ+Ó5{ xî(Ѻ46美ÛLÕ¼?â FêÖÍomµ%dIhßœŽHÈæ±µjÇÃsB–~}íõïÚç þï'žµwGе6ê÷LK)±oc!wH¥­Ù—œsÓ“K¢[x»N±] l ÄvG¨"g®Þ¤ÔçOÕbñüš‰°í…¯2åˆç8ÏzÏÓ\ð·†õ [L "Ý4àM"à£cÐõžõßÙÏ%ÎÃÄc–X•Œ}v’+–ñv•©Iu¦kdkq=‘`öä€]®)äë:†“¨Ü]ifÙÜÅ¢ÎÌAù‰è+¹Ñµgð.‰§¦™qö«k¡$‹òð'=}êç‘®øÄ×·¶ºT—ÖšW*¬#c¡ýjVÒõËYø†{cuæBb¹‚ß–ˆHÇ÷€â©jÞÔ5ûcQkvµi Xí㓆r¤:gª÷òëÚ¶ƒ¦X¶…t³Ú\FÒHv…;AU¹!Ô´OßÞ MFÒø#üŠ£p:J¹©ZÏ{gg³£‚c#ºZ¦çµé³ï×5¡à»KûM!£ÔP‹3}ŸÏûâ.Ùôúv«^.ógð¥üE$²L›#]Ä’k—¾´Ôb´ð¥èÓî¥û <+]x8ü+Сs=¢Èbdv@LoŒ©ô8§·iÛÇÝ8õ§+ ã±®#Ųۯü8»“÷r9“?Üc?eZÞCo­øÆâVã1)Ž,dHÁúŒõ¬¸ï¡›ZðÅÔ·~j«24lvù þ½méwºu—üJo'†Æ=¾a /8Ïò¬xt«vÒbK™eÓþÕ4ö3‘´FÎq€q]w‚n¯'Ó®ÒÄòCtÑ‹ˆ× 7O›=þµ7Äî®àø¯ãÊ\£edÜr~`0?:¶ÒÜy’®f[ ăœdÕ KotÔ¾û\1¿˜Y¤9Þ¤zœô«?aŽëį ¯#ÂÖâBÏ<“ŠÍKEo Üݳ¹xåÛ,~Q‘Ûñ®–$"ÊgÜ^ 9’qYZÄ"ÆâÒè+ù@í™sô¬»iØ‹dÞ¿h A¸ž„Ö›Á5î¥5š²‘o¢n‘†22[ÞµlmæŽÐGq4W-!б8éŽ~•²<½6U «mÎA=3XúmÕÅ®£¶!*"Á¼¤‡©® §y_nðýÖ£qZƒ¾ÒT·ÊŸ =_S‰g‘†c–õÆj¤A¤µóÝÈÎ(Œœ­[²MF'·¹G6¾ù²®·j®³Iö÷Šæi"”Ëò8?# ô§Fe†ôÃu$–Ó™AF$ˆÙsÓÿ¯]Å"œùî:šÎ/sÿ $vrþ_—¸ ”ÿZ¢“êÙßÝ5û«[HB€¿xä ÙŽF¸µ·žcûÇ ÜwÈøKóBF9ïÍ>E]À£«Œóß×feT‹ù½AìLÔ¢?ª–f9ÿ¬p*)Ë+lÀs“œôÅ:Ët²Èä2€yù¾÷j»+D‘…\€ %ˆ÷ŸJ­#o*¨åç&žã{–$18ÎO|W©ÛjVwÍ/ÙgŽvŒáÄlÒ{qR«38XùoÊ¥|÷~ö "º`“‘“Ž=±Ä„ Ÿ^sM•’Œ³KqŽä€çIÑJ†HÜJ†F+ŽØ"¡–uS·i;Ž>^pj"þcPø$ç°5!f'pUe<äžG4’M´©Àäç¦)̳6ø¤I7)ϱ'šVV0ÒŒŽ\ƒ‘Çù¨.í ¹Œ-Ì*é¸0g‘ÐÔû†pœÔ/&ÕS€ÇŒÓf¿…ÀÇ%}}©b‘eŽ)Õx=ª_9Wn9'…Ͻ$sl`i$@ᘱ*=ãhluëÇZ@3äàŽÔá…| ÀŒ|ǽ !å² ã¡V=£np~”éHU qß4¡·6Ú:sÇ4ì R›@‘ïïMãh$dúúÔYÜT°?.âvã°â†HÚ‘ +Êü W9eáçëwº„·+p×d3£ÄtÁí]¬3©“p^6í§[¬h¥v„ôúT§Ùœ¥VŽÞ´"³˜¬{rhM¿ibÈ¥¶ã!~n½ÿZ%Ó­nI<ÈËÊ—@qLŸO´¸ $ðE.>ë2G¶M'ØìÖëÏŽÖÝf<™vŒúu¢VYåJ‘€œçüš­>—§O$w3ÚA,œ|Í'ó4^ØXÞm’æÎ F´aˆ*ºÁ¢ Àõ,PÈeEtqÑ— ¥S¹ŠÞí µÝ´2DBº‚¾ÜlZF—f[5”Æ0€eOo¥2m=,ígGH-&uÀeˆ`Äã­7EÓ›OŠââút¹½ºmÒÈ«€p0˜¦&‡¤*–u¹`8›žô÷Ðt‰­Â:X¸÷`€{â¹çðåêêWRÄtë˜'“vë¨ 4c ØzVÞg•¦ýq.Î[h“× Ø*±4q^Ûù70G,Lvíp>cþ%®›¦Ùù¢+$PëµÈÁ8éŒõ§iúeŽ–$û-´p³ç~8$U+Ÿ h³\K+X@]¾ñ}y—ZF™s´–Îof5UiîF:R¶¦É§ÅdmTÛgp‰>¤u¢}2ÈiÙÿgI-ØÝö¯\ç­O¾[t0Ç,h»QAãµ2D7V£í vI@' ‘Yv¶zai,-FHýáV8÷àõ£ûÖM@ܬx2®êäÝ~Ÿ•,N“mi=§Ù×ìŽÿ2³Ï¡žøT–:f›¤Å#ÚE±ä’XZ¶ñùldi7y s>‚ò]ßÜj1H‘O#0Ù1þŒgÿ×Z·º>{1y¢ˆìQÊ„÷Àª÷¶Vwq¥¼ˆ]co•™Žå?Zu•…˜W` 2íy'%œ®8ôôðý’ìEvH›zE$„ oïÒ¢}ѵÔÊ.Náç 1ú ΋ú{Ý´ÑÆË†Þѳ¸ú}jÑÒ­…ä—Ë=À¹uÁ`ý±ÓOþë_°}‘f¸´›¥MÃÿ8«ÑZˆ!‰2Z5±ã¦j9¬’ö ­.0€O¿ÈUUÓâk‹iü’¦ѧ˟ÌR]èÖ÷s}¯Ì– ”Íaˆ÷ëW!µ†ÆÜG mP9%²Iõ¨/täÔ,DRÉò6[ÌîŸò1TC…/¢™¯%wUÁÜGÌ=:t¨WÃÈÉ(Žêh¡‘°b\RÏ ®È O,MV91ó`sÏ­6-Èy¤[É]çM¤•>ÿΖ=-t÷µyL‘ž1€'{nÿWÉ=ûÖ­­«Å§ªÎêÒ"„]£·o¥,a£Ø‹¼ü½1Å9/F]Û»ŒUËC?# ˜^{Í@°"Ü7ÍŒR,¢6" NNr'Š2Ÿ;3³¶FŽ1Ï$ÎÏõÀC€¸ãÓ8&ž’„y{‡N\ú½:Tðº',xÃu®ƒÀ8µìWûA”c'ð®æxóîžÏZåµ_ÜØÞ\ÚÚé¬égoçI$²yjÃÑ~S“Uï¼p¶¾±ÖíôégŠä…#x]Óž{U;ÆW3x…t­KJ6RICå}+3^׿׼/ªÉi¥¬¶¬‰ç<ܳâUÇ@yê+w·‚ôÁÀg\“ô¨bñ#Mâiô6±eš8 É q‡ôíÇZÏO©ðõÞ®4é‚ÚL`–0êyã'>”Áãö…ìžûC¸µ±¼!c¹g“Ó"­^ø€ß]ßXÙi¦ým£ÛpÆ@‹’3´qɬkÑh¾Žco,Î÷FK1àg°®–ÏÅFê}NÔØº_ÙF$1 Ï Ågx{Å—>¸ÖuX<¸ÝÄÛná@ë‘Ò¬ZøÆ+RÚÆêÍ­Úè·o1\v8è}©ö,]Fæ&ÆV²’á Iü3É^ q[7·Migq8…¥1¡*€òÞÜ×5Ëx T¸¼µ‘v¤ª@^3€0s‘ôíW¼?âä´Óô-6âÆæ4ž$Š;†QµÛ»þ5«¨øªÞÆîhⵚóìc}ËDTøô'’lØê6ºŒw–Î^ Ô2‚0kSñµž²Úi±¾–p›ÂÅw}?ƳÏÄ]?ìBææHÎ&ÄꎈôëZïâ;[imâ·Y.®n“ÌŽ‡Í³x’p?4ÿi×Kxfó-å±ÏŸÀ€w8ÎGÒ¹okk¤¼S탨{¸·òå€%½=êva%æuEc’X€ldÖ6«Ï}ªj¶³LVN¡>„òNkP5¬› ¢˜m=>•XJ †Y.%Û[·³pG§õ¬»ß”ðÁÖ´ÔF1àbCÐÇozÙµ.!ŽäÉûöˆ;Gý*7ºH¦WiAbÐ\r)g—ìÈ|ÙÔÈç;ŸŒÏãPý¢H-¼Ö1¢Œro_éM’_–1 òt9£½@/Úæ'Ÿ 1Ø€r㟧¦i³4‚HÓÛqp9ì*mJâêÞÚ'³‰'“ÌPÁ›nsüª›jó¿ˆ%Ò|µ_J%ß»=8ÅZšéÕ]ä'nIUoJ‰ ‘IÀ(B¶Nãô© 6N2äŒçóÇøVUÖ¢ö‘AomçÜ͸(-·yôïÍhÛÍ4öÑ¢—dÜ*¹I®ÞÒIÌx\dŒqÆ*£Üí}®å žHÔUkÝGì÷VñÀÁ'l+©àþµz–7X¼²®NIóìE$ªè™vÙÀÚ:döÍ2+¦ª°6wx9hÌ’§ÈŠÙèyÏÿ®I#ŒnË? vßó4¤"¬™ãåÚI<â‘eÛ˄ؿ(\úÿZI×kn(w À Çáõ¬ë;ÿ·žèÈÜ¡'¤…›lr|Çß”±î`p{ƒŒA4"‰*¤ŽsÛô§$¸qˆÕOžæ«ÈË xšW\à†Å#FÞLeжN1Å:_‘Ù–dAÁ¥T$x$V%‰eVéëVQãS+‘ƒŸnâ¬G$n¯±$än>”óCåÀ7Ã?/½Ct…äV8r0¦øÔ±>å3Ž0ïš…6›–ù@ ’Ì3Ç_Ò®*%¼ B¸'9ùæS… ¨ÿž}{žÏjY w<¢ž‚zÔ 'î$òö¨Ù·“ž•bÖôGÆÅsœßò­Íu­×ÄW‹¤¿-Ë\²2¨e'¦sÇ×c¤ê2êº-–£ä˜LчhËgô®'^³Õ¯¼C¨-Ö5í£ÂRÌ#mŽKdŽAõªWf±'ÃÝ3L]*ëí1\`?*’wu÷¯wk{?Ä ÏìûŸ²ýÈiJýÒA>½³Yvúæ•áKâÝ\%Xn"û…[<šî|+gqiá[ {«f†á#ѱâ¹­B-CJñójÃL¹»¶šÓÉÎÆ¾ztëïX+m}gðïÄßXMlÒLfC&9‡½h\¥ßŠtmK‡O¹‰chži刢¢ªö= >Ô¶êÖµˆ%Óo.`¼”Ío, »“ž§\V~¿¥x2Þì/" xMÆÄÌžYêTuükC÷þ.ÔÊi—Ñ[^[…‰æSÇ–$õ'ñªz~©Þü:ºÐÅ…ÌWP?˜<Øö«û¶ƒÜâ´4K¶¿¹´ŽßÃd¹‹|ó@.:í<MRÓlîaÖl/4›kË;™î1}fѰˆ/ñ>HÀöç½z¡šÊdï²ýñ^m¦OsÃCI“N¼YÑ$S˜N 18ÖŸ}Ÿ±x=E­É6Ò#Mû‡ù09ãÔP±ÛhÞ#Õ“YÐ¥¾Žîc5´É™ßÃí]Þƒº=2ÜKb–ƒiaoâ5Ïû×*òƒñA® 2ùQÙ÷ì`dœŽx®z?ð…köÆ|ù®ÙãS e#~F´tÆ:Gˆt½bâ9M„ÚzÛ´› òXv#týjSH»×¦ñ.«¦Å'Ùä†8ãH3*[Ó Šnµ­Ã«èºAt.-îâ3D o“h ö©/E¦ã-JMrÂyíoIo2+ØÛÇòö¤×ZÐôxá°60IeŽßpŒgæaÛ¯Jõ(•*Èr¬¦”i ŧOñ¨|·]Ñ’xðMq^$’ _ˆ×G"s#à/_­DV ¯‰÷ þ\tðFpyÏoÀ×=’ß õŒ²©‡jç§Ì¼V¾¡m#Ï þ‘yÛíôèüëy@),Xíù*ìü72_ø[O¸Kqn­¨Œó€8ãò®cŶ¶²øÛËql²—æÀñª7+ecã=^[XŠØÇ¦±»XFcÛŽ„ŠÊŽ}·¾pöööÞc¢Œå£C¼Ç’MkéZN›sãoG=´ ‘ì* .á’EsK$öú=¼^t‘éUp’uGÝ'=³“øVß…ôó¹~º•ì7’Ü[Ÿõ$šœpDÚ‚K ŽGíÎ+µ¾·†ky„ HLL0yWŸh–ö'á…ÖèayL3;p7dÁü*K-?HÓþ®£qmµå¶ +Âpﹸúâ °IŽ4¤[À¦Çý\]—œ?Äk=4‹‹Å²4ZÙÜBq÷zôüªaiwq¥hWOÅݵ®ÿ²KÈtÎ úÓtíFÎ÷TЭä‡ìÚv%>L•ó²zûŒTž%ŽËHˆÚØÜ”K«Äk̪“@8Î+VÏF°MkÍþÐI^æÜ¯Ùâ@ªëŒäíéõ®ItË_ø@nu„]%ÎóÐnκh¤KØÙjç@–*𤜫¹œ§¯åY‘YC$Þ*µµ•m"y#DÉàð¿Bx­ ©]n[;Û±ê+ çÊÀI½më¶«'‡oÃê-™ˆí¸ ƒù×)-µµ·Âó$jiãBåGÞÃŽ§ñ©N—âÈÜ¢âÒ峿åïUìôçñ*jwßAÂÎÊCÇ–‰AùvœŒŸ«$Åíu1ê¶Ñ[§CÃÏÎl㯵V[„Õõ[ eQg¨hã¸MÁ|€FOÔh:!µ³šÍ¯ÅÄ‘±eD7SéTüc,öZ2"Ü:‡b‘†FøU CLµ´ñ‚¶©å,ŒrÈs»sõæ«Zi÷~$PœÝC©; ¾íñÓ²n®>Ü¥ó„Aé ªpEý£®èò]4€ÝFYÙ\ƒÜqéÒ»&IPùJrŠ8fäö®Z(ÏŒo‚I+ˆáÃO§µEag.µ£__¼Î%RÁb¡ÀƒÛ­fO©ÎÖÚE܉–›‘Á}¤V¼³µ¿‡äÕb¾y§—k1ÂzíïKoi©­Õ¬­.Ø'›>ðxê28¬÷3>­»P›m±%0ØÏZÜÒ|ûÝ4]~þy8?áUõ7¸€Û~ôÛÂí±öríì¸æ©ÚÜ\Üéú 2È¡&7u†3Á÷ªÂæú7O¼7NÂiv4l«´ŒûUä–]SV¹·ódH­FGÁ-ê*o† ®Ÿr¡rÞyVný¿úôýWP’ÖàK;ÆG)U®¦¿Ò¡–G¸óíXaÏ;óíPßM}cgmpó"”ƒ*ÉçŒ A=õÆ©sw^RDž`!;c?Ö©ÞÝOu¢ÇpÒaä“c€¿xŸÊ´nï®aKK,]–uA¹8À隉gÕþÏ3Ù%VʳF?x=Ç­2ÒêúîÎ{¥…~öÀ[~9ü*4ŸÙÆGº–,N‡ëøÖün<•v#Ì$‘Ðãµ+’éÄ|¹'Fê H¤p¼„êqOeĘ‚Aݹ¨¢cçHÛs·üÿ…_VFÜÌNvŒc€=E¼ÇÏpÇP¸"ŸnÄP“#dŸtu4D£xo0âúSQAןî€zôöðÞÁ$W ¾)̧¿±ö§íŽ(¼¥Bcpÿ F$äu§€Fçyi™žx5$ƒÊm d2{SU] ,Ì@Ææê~¾”+ àààö=k;WÑìµ›#iz­ØŒª9\ýqO°¶ŠÒÊ;[Wq#hß–8ÇLš™cÎ~n;jäG'â¤A»;F8ô¥ÚGÎqÆ*2û[GÍè)×+Æ>nTƒÁ#óõ¦bpp})’~P01Ôczty8ROdŸ\Sˆ;HUäðz{ÐOR »ŽrE5¹‰ö ÝŽ7dÑå*¦q‚=éܪamÇnÔÈðÎHgÓŸ"ïݹ”‘ŒdqL ª¡B ëÞ¤UùR;ŒžM’ÀŒäôÒ7ay'=}ªµÆ›gw´Ïo (Ò b¨'¥W:Fž×ff´µiÍäÇ>øúŠˆèzB«ÆºmŸ’~b†Æ}z{Ò6‰¥H 6lÂ5 ªbSÉÀã¥jÇC **¢*àà: å5ï O¬ëÖÛm^Þßwî¥RÛó×8ôí[ñé–6VÒE ¬E !ÑcosëT“ÃZ«¥Úa[pýÊõõéXV¾aâ=BûSŠÎx¯m\’ÉŽ8ã½t§NÓ¤±:{ZÄÖǬN€…Â’ßDÒ¬¬e¶µ±‚8¤8‘UÞ=ýhÓôë>7ŠÆÕ-ã“’©À'5a£ˆNw|£"³bðþ SÄ4ø9¸‘Bcw|}=©ßÙºiÓOû,bÌŽb *¼Ðã0Èšt^l\£„äSLJ4tŽæ5³P.e]ççúóÍA'‡4€#E¶òÄ …1±=5^çAÒæ°[YtøšÞ,”U\üE'ö^œš{iðÙBö²œíÛÇâ}}èÓt-2Î9RÎ×ÉiFec¸Lç4æð¾Žt¶´6̶åÃðõÆi.|?¦]ÁÜZo0 ±1f«ÛæëŠQáìs*ièåK²¶I ƒ×9ëSXi–¶7 ,*Æf^I»môÉ=*ì$мn¡|‡\uµb/…4o³Éb#v€J XsØuéíO›Ãú[^Apé0–؉šg;@üj­ï†´‹A®M®ÙXn`¤…“ê:U©|?gv~ÐË,,Ññ†0Pt\ÕVóÚUãC [öe Œí+ß©¦Ø[éö­´vwdÇԞ棻ÓaÔíæ†î{iêÜðzûU  ØC-½Â™æ–Üþéžv!~œô¨®|/¥Í¨=Ô‰,m#fDŽRóÜõ¢÷DÓ¯šHh~Í‘ŽMœtÇâ™/…leºšêi.N H©! ÃñÖ«Íá[!aml&ºÛ ï‹÷™Á'éR[Ùäxü·o3†SÛŠKMÖíggšU…‡Î`BägëùÕæTíJÈ6~\qÏãÒ³Ö^cZC=ÊÙÈwI¸Ùž¿\S.¼;n×_Gu4-Ȉ˜Â¯·>µ©5Á•Œo'ïcžÕ“.— êm©Gq4Sìù㉶ƒŽÇô¨FƒåA3ZÞM7G2B˜#ŸBG”·>·“ì‹ÆlÈÔ SÈæ¢O ŹˆÎí ùÌ[@çŒzb§xz8¦Q5ä÷1Ä»¢ŽOº§µW—ßgŠì­û1¸8“1ƒ×®+GItˆ£Ï¼¦@.£éüꮥ¥µíŽȼ0½»|Œ=}ªáÉ—íB;éÛI|±ß’O"¢mi4Ë;_¶€ mã1wçóSI¡ÜA|×VžCÊŸ¾Êd19äóÖ—MÓ—Kµ•ZVŸÌ“r’›H'¿éNÕt„ÔÓ é¡²¸c5Ÿ&ó#E¨_«±pž¾ç¥6çK•£¶µ»Ú>ê_3Î*ÓçƒTšU–³FW%Nt ¦Á¤Í7‡Í§˜¡„»Ðyç½X½ÒnîZÖåVòÀaX€TréÚ‘·2ìdàœª=½1té¬oÛ<f˜hòOnON½iltýB×O’ÙF|’£'$÷­ëWf°ÌÑ4ÁFÿ—‚yTÖíà”ß‘…þ‚£HÏ÷Æ<ñÅ%¼,Ë9,¯'µB»?v\”ÏÌX§h€y\³‚»¹<ñùTÞJ›F_›pî$ç¥F°Éþ°–èI$hŽcg ›Œ˜“•`OnqVb•öq’}­vøÎÊK»(g¶¸·KÃþ+ª•ú`FsÜS ñ…µÍĉ¤òۥȵ3¨PªùÇLîÆ{âºò;S¼sÇ¥r×¾*º·ñ½¾‘„­‰¤“h¿`FOsšÂ¶ÕWEø‡¯9†òày(Â(”ÈzO ÖÇâÍ*ãDƒV±‚VÙm˳ç@õ©, Õ¦Ôµ›˜ckÇŽ+Ÿ™GÀê+¨oèÚTv·wçÍ’ Q™>ñÀêj{iš¬7YÝä[ÿ­Ê+õ•QGzl’(¶(˜.W?Z¡ì\ÜY¥Ày-Ô;ÇßžƒëÇ­]Ui"ËÞÆ8ìJkèmîm­Zeó¦$"ŸâçùU;]niÔ·S¦Ÿ •¢,np§%O^)ºeÔZ•‘ÔÄl±€FXò¸=J¦2Ÿœƒƒœ÷¦£à¾Ú~÷$cëéR‰!û@à.åË8'üzS>ÊFö^H$¶îsÍV‘Ü žÃȃÌ:úRÙßŨbŒ†C¶T?yÿ]Gnï,’É PCc…# ¥·*¨å÷,UN?J§y¨ÛÛ”†I'—CÉϯnµ2‘Õ²eÇÞÏÍ‘L·„D“3ȹ݌z“QO,QÛ¤$‚ËßÚ£B’ÊKˆ—–Rãˆ"íBH yÆi~ÔQxL‚>R:‘޵Cut–ñï¹t¸'$§?ç*™-V`Ä nÿëÐ]¢Ü«ò£ÛG'ëR‚Än`Àc¹õÿ?­9ó´›Ô«q·<аÎV³Ê…Î1ù R¢¢FD‹–õÏ¿ùô¨!mÛÕ€ßÂóÀéV­î#¬Îìwè)ðnžUÄ‹³iç¹ü©ÓK€wnŒàsÛü)"?PcµclsŸ¯j`rŠMôàt­m â ¥²´Â~^¡_6i ‘•Æ[w\úZ¦¶ÒÅ®&¡¡Çyi5ÞÛ›¼¹w/œcçñ¯U€ä q޵Ák3I§üN²¿’Úáà{?(41–Ëîù¤º¶(Ae'¨ø®×Ãséwº€¹Òt·A]KÓü ë]\®­„Ά8¯4ðήt/4 SL¸žïÏvDH‹‰·ž¦¬hW'ÃÞ)ÖŽ´­l/e†R¤¡ÿdvÎ? Á½³žÛÂäí¢êWÂKhöÌ¡óœvâºÏŸ öÆsç,b0–!†,UÄÓøWG½·ˆÜÚÛM’¬y \Ê›cu¡^‹«½/JžuKYÄÒ]¿pnêOµgx~I¬5›[=2ôßéSBòyR.^׎„ö犧£ê¶ ðÚòÁÊIw#H«>vf<`wúÔÚdSøgÄ=Ϋ¹m›O,¤|±¿]¤öÿëÔÚ€ŽçPñV± ªØ½$þe*8_^•Rî{wÐ|¦E&q ÊÔþu±a©Á¡øç[³ù+v ™ÇÊÈóÒ¹Ønm‡Ã¿3 %îcÀ²‘ÈþU³¨ÞÚ\x‡Á¸š6݆PQZIlú‡Ž§ù^,ƒ9NqëÖ²ômJÂñ´¿»Š/ìðB€®ZBq€r01õ5ìy{NNµÂ[OiĽ]îäŽö©´Êpàg­s×–‘Ûø_¹_ÝÛÝ߇µSÆå9¯å[zå·‹|1u<¨–ËjùŸ—;}kÐc8IK…r8Àæ¬#mwdõÅ5ŽÅubyï^uñmÔ¼8Œ cy»ŠÔº½µ³üMÒ~ÑMÚ¹!ÀÁ uúWq³¸%q•ÞÕÃøÚq ÎÃ0Óæ»ýùnŽ€ûg'ð¬ZéºM½äúd¬·F1:Bß*GœgŽ™à~uwÅ6VÖøzóH"¹1Lj`º‘Ðã¯OÖ©A¡XÞø—Åbæd·Œð¤©9úñTà»ÿŠÂv—O‹)¥“Î,~Sµ¾PÞÙ=+CÅö%ž£&™rñÏvbÆŸr4Î tÎ?Z»¥è¶özÍòê–è·ù+omÁ0#Žçëš§á麆©«µÌnæÖù¼‘æ0 ƒÇzÉE´›HñUË£3Z\ȰäìÁíÏÒ´/-ï®,t;åHõob­-“¶X©ÞJë|/scsá»7³óVÝrKÉ'¬köÐËáëñ&Öãè2?•q––Ñ|&¹¹X•e–‡S†À¦ }+Sð¤Ö$s\§ïع;†ÑÁüÍÙÜø¦]ašâÙfŽàĆRÛ¡U?.Ü:~5ØéªÏ¥A»K’ˆ™ÈàUõKx¦ÑoRåIO-Þà¶2:}+Ó¡´µøz’µÔÖ²\°Fh²Í&ü€gŒÔúEõÆŸâDElÖðÃ`fû+6á¸Ï &§Òô¸5oÙꯨ¼7‚S4×!ŽG')Œà †´Ëy|_­²ÆÇÉ™BeÏ|ç9ëø×c$f*VÁëõ®+^°‚é©&ï*H 'yÆ}ø¨¯ô¤¿ø…ujÒ¼Q}‘Y¼·+‘ǽT±’Y<òÏ©¼X¹ò”೸Â=ÎjÞ…¾oêV.—¶jÈy *N9c;JêG˜H=vôϽu2ÄvHFxa·¾ŸqzVÞ?ÕY¤˜y"9$×ÛÚ±ÒÕäµñ5ôw·=½Ëº,RmäõîkHê××ë¡i‰&ß´Û‰æa)C)ÜGCNžÓVÓôMM'Ôp"S-°Iwºž #8÷¬øžÿIðçöÛßË-ÅÌJˆ²r?Åõµ4» VÏR´ŸÎÒEa%ÆýíØ¯jée ›ˆRP Éíú×%®Ïu¦köҽܩcvŒŒ¡°ÀÇEeiZ¾¡}iËuqý£5ÊÝŽÃÎ!ú×Em-Ðñv©i5Ä“C¨*Œ¦rO?a”·çåÿhæ»tŽBaX+$`e½qÞ°¼f­Ÿk 7îžu Çnp ikÿm³²GŽê X÷*³È_öqßÚ²,/ç¿m^ÑÞFTˆ´rJ 8JÍYu?éïo DšS+œäŸð«†}beôïíÌ!1 ¨€¦C¯Ý®Žï##ݵߓù’\Õ.µ#S³Yçk¨.NܲÁ³Ž1Û¥G¥j׺†¤°Ët±\yÄIk"@8Áïô¨4!zÚ¦¦òO¸¬…vã$g@) i­ oyy 2­ŒÊ¥’t2°ÝÀÊW«”( ÎiNæ#•Âõ>”ÆPwzÔñåù† =»RˆNÒ¼Ò ýäe•77%±Ú¥q”<ôê³êw õÏùúÒ‡±i3œ)PÊ®rHÎyãÒ‘ŠùœÏPiÌ7ìÂnϯ4y!€>\ò 1"Ž5 @^˜¶ûâ‘ylÊ@ePH÷¬Ã0xzÌÚ¬¦áwF‘W=yµž(¥A¾5 Œ3Å)HÚžR„¶ñLò¢(¡¢Œ‘ÓåéJ–Ñš`$<Ÿ™7ö§ImhЈü˜Ú.¸+LKKE‘[ìñåG`â³µ}×SÒ¥µUòà†’çüŠ¡…%¸H¢Ôµw l¬"$`퀓™oám3λ™c•~Ø Ì|öË{j'ð¾ý’4×¶&Ð9dBäícÜäU›_ é6š|Ö1Ú/‘*þø?Ì_Ó'­E¢øWHÒ^I,íÜJT¨‘˜±P}o¦øLÒ^g´£Í̬Ó1Éõë×Þ«Â-¥[ÛÝÚ¢\y7-ºaç12ÏÞ¥ÓÔÂa7<‘–v =:ô«–vpéz|V–ˆ© t_ÇœŸÆ¬Ì¦â7ŽD)©QܵÍÇá)4¹ìÚVÁe“Г§õ§?…ôùÚÒC-Ø6÷½èAwá=îþK÷óÑ¥a½b¨—ë[v¡"·H­£)Œ¢) Ž*ÛhïlÝä“ 6»Gò“øÖðÆœ4ÇÓwÜ=²0’2[æFÝ8÷55¿†--uHïÄ·RNÑì"IrµëÇáN³ð^™iz'‰®|€ÂaIû¬õoþµ^‡ÃöQkrê°Mp²M‡tY0„ôéÞµ_:r²00TrGÖ±µC­^[^¼³Ã5¾T_N”/† Z¸ÔEíß›$~QbÊFÜ`q·µgIàí54Qf·WF¸«‘úqòÿ?J›Nðý¥®µöÓyy$Λd28Ãv犱¡èÖš2Nö—W&&9òäo•3×~¦´塸Xw}òO~É“CCâ µ8®îbyy«Ýb c”ë+ .öúëÎCi+™ m%Øç ?Ic§\½ÅΫu²;«¡…Cü?¯£ÀÀ8,KíëÈ®}ôKédÔQ'¶)t3½ó¼Aíþ^hÚ‘‡LÚ¡Û•›æéííN¿Ò¢Ôuènñº0€H«üXé×üñF£ E¾Xe]ò’‘¹<¢ã#ùÖBø{Qh¡T¬ÑM»vó–9ïV5ˆ Ôõ›Hãž7¸%À8rsŸÊ­kmäòHÒ) t?˜+FßçùU«tµÓmâù’®UˆûTµ„—:\ÇÁ‚¨}sP› «Ø¬íî Hb¶!˜«î.@Ç~µ 6z¦™s:ÚAÐÎåÑ™±·ë[ÑÇ"[ªÜJ®ê3#mê}©È"g88Ï®qšßyŽªäàd•r1RF—1ì^{‚ZŽ(•§þð󕿤™ŒŠ#hÊ·\œuÿ?ʈ˜º¬lq´ÄåI&a…äˆ!z ™\*T¼˜ÏAúPÐBí¹ˆf=IPs^…¥øšÃT¿6%e·ºò÷ˆçˆ£2ú€zÖ¼of^~µË_øÁ,|]m¢ý’VFC$®°±?ìíÇQêkJ÷Åu¥ÌÖìÓJШy¼ˆ™ü±êØé\q6‰¥êZN£ Š[ÈдO´2’r~Õ½»§ÝjÓX¤ò½Å·-‚ƒ×“Œ)Åú4·PÚ¤ì ®V'1°ŽB:…l`šŠïÆÚ •̶Ó_/ù+1ëWôíFÓV³ŠúÂO: Áíž„´ø »NÒzëXž*ñ>ÑÚòX˹ D€™½ÏaX^*ñ‚ÃCÔì5 `‚[ÄŠQ ¯SœŒö®ŸMñ•¬I46‰4± º`Çž¢™ÿ NŒnÒÔݯšÏ±z…-è¡>Ù­"TnqÀ#ò*¥Öµ§ÙMµÍâC4¤,JxÉÎ0*¬éÒ]Ïh·HÓ[¡i#Îþ•HxËÃè¤IªZŒªò*õγ§ÛÛÇ5ÍÌH“´–ûÝÆ|×7áßIyâÝmÿÏÓ`"@ ™äô^¾•ÐZx‡H¿™`¶¾…ä$”E?{ÜzÕOi—^&¸Òc”nˆ*‡-ÿ9P=°*üÚΔ—‹c&¡n³–Úc,ϧ×Ú’óZÓtûŸ&æî(ní¥€À=ùéWãu!Xe#!½EføŠi!Ò¤0ê‘XLÅvM óÖ©Ýx²ËMÕ¬ôÛ›˜ši“.ä…Tùr úúV›ëúu½×Ùg½¶YIo˜3ÏOή•V<‚TžÝ(ÚXIž)X*©eägž9¨f"gÌDÇ©¬Û™5%Õì£H¢ûŒ™¥ÞC†ìôéE¶¥i©Kv¶“n’Õü©ñƒ€zÕâ6…ç¨Ï'üûS&òÖl3¨ñÚ¡Ô5k )nnfU¶Œe˜óø}jž©y}nÖ2i°Å:É |mSÔzÔ “sºƒŒsØÑ2‡ǹqÜw¨ H‘X1î3Û½ è»lûŽ)üº8lîïšÎµºÔ›VºµšÈ¥² 1ÜoÎöêF?:¾ÕYÇ|ŸZ®LŒ²öþãBXX~HÇŸþµ:`Y q“ŸóÍdéúпׯô¶´1 EV ¼6ìûz`Õ_PŸMÓž[{V¹¾ÕD$“úUÅRȤ¡PT1SëXº®¼tíNÊÅ­ÖêM‚@@8üs[Ësû³ÏÉèjfWäÈÆÞ‡Œb¨É©D,®¦¶vµxãÁ#ŒãÓ¡ª6²ÚÝ­µÒ[¼I8b=iÇ'Þµ!¸š!™ØmïÖ˜’Í#È¢5 Œ±è@¥’Ù‡Éôõç ⪙ŠM'œ78mªÇê77+Tû¹•LÒ ˜,‹˜A+ž8䙤òí&]ÇxF<Ô+$ÊU|±·[’j޳ª[iWÚäÞ-ûv¢ä¯¡5i'B¨YQ‹€ØÎJd’I$Å ©Áv,yÕ¶Å ó$\`ã ýi^}÷„.7+68ëüév´Vñ:ÀØà¨ãõúâ­™#fóvƒÔEFÒ¹aäˆþBzŒnÈ9ÿõÒÁ,i$»”.ÌåÏ úŸjv"™ #àqÅBÄ áÁ㑞™ôÍ2è;ÜF…FÀ݉ô¨Ãˆg‘#_º@ÏN”øn _#>T|Ùã'Š&e¯9V%†õëõüé%’4ƒq@Kz g?çôªìVY™Z;qó}O?9Jíy4™S…aœúãô¥˜¡pª¤ÆS¯Lœ÷.ãA°sþqQÄí4;Tf8†HçÿÕRM¶ ‹ýãN8öª—Q[ÀÍ9Û8ó8?WƒÈ–)eRe 2£¨ö Qj“ƒ 'nZtŸ»“jª± A 3ƒýi ³Ál±¹;/V=¹¡ EöKåzðoëP™cg Ñȫ•íÀ§]F“g/´0­ÈÏêHÒ8ðôü}¹©e”H˜RÌËÉëþ~”’@¸99'$2ð(`þVݤ.:ßšŽx–}»·HëƒÉ àõ«Š’9äƒÔTDÉçg‚©ÀÁ9Ç=*[Â…bc’ëËmïÇ¥V³%³žïØÓ‚Á·šx=1ñ¦Ç œy›9eÛ'õ¤œ$ØÉÆÎ˜ü«¦Ðeðþ£¬Ú]è¶SÍr ‰f“~ \¥»öÀ®Î%À}àçéí\V³u›ñJÂæåŒp=[å·¿J«á»Èt-[ÄÚ¼Ÿf–[–¸¥ùD±ž˜'¯Ò¹+Û)m|31¶û^­ç[«ðV,•Ðhº‹Â7­xeÊ]c“Êd?ñó¸{’*¼9y¤iö¯ouq«CµE™’L¬€ã8ÎïíZV—6Ÿð´µG‘ã*¶!NXaHÆGáPø^ÒôoÍ=ìþ\bñ×* *[§é^ƒ 2[,ˆæHÛ ¹ôê+•ø“nÃÁw #$ "%ºñ¸dÖ?Œõ=>÷OðëÛÜFñ èÉ9ì úTWî²ü@Õc°•LÒi%cØGÌøè=ñYš7ü#·:µä·m €l„¸È û«ë^¬Ñ¨‰rHÀÏ#ù× ãy#‚÷A½m¶ŠýK±3ÍTÓoì¯þ%j-ÄrG-˜D;²Œdg½ghgIµd¸0yÆIA\Äÿ¿Ò£ÒLš&½áçÖó¿öyHÚ\€ŒI8ö8ÀüjÄ7Ö â?Ü7—ulÖêÅc9Þ6ò>¸¬ø®‘µ¿ Hnm"rRÛ8ÀfÎI>õ»£O·Ž|H’ʉq!AbfÛÚ²4ì;¯ µ¶¯©ÜÇp’±žÛx dÝ‘Œ’jþ»¶×º†©¥Ì³*Áj7# S`Áünù®ëK›íz]¤ðGä‰QXDÃ$ t¬‰[?á1WÌFFGû_§KS{h¾!èrNÑM“|ÎxÏ=ë7TgÓ5SP´h5 "[¡öËi8xÜ2¿¦+ÓÁª¼aÆå `ý)±Œœr sޔǖ °9Àæ~&…à×5;ë‹_í.EXåxÎd´ ÆzuÏãW‹C?Ä}6H¤†}4¿,pA ™á*Â[?¸·Béq4hO𠳦-'½>c12Gu´œ€\×A®Ãm>¼±Ä$Ô.c²9µbqÿ¶Iïú×;6n¾ÚI?ï;­ªÌN@-åÅnø¦Ê ;þÁeº8ÍâªçòxÍ.ƒjž ÕõÅÕK\=´¦•øòן˜ÄúÖ÷²ø2â).î ³Ô~Ï‚B LŽ­oG§ +Ƕ¶Ö—ˆîlšID’–ÜFy9ú ¥ 9ÓõË }^)¡¼i™¢¼VÝÐ`x'ñúv¯L0$q0åŽI'­p–«3ø›Äð ›*(SgïŽPíÏÊ{s\趸OiºÚß]›ÓvKJJãqÇá^´">PÞ~v\1Åyö¿!Ñ|WÅÍÌßÙ·ëí³,Ÿiò÷+œ°ÉúÖ҇׼S©i×WSGmg „Hœ¦æa÷‰qùVV»¥][ÿÂ7aq¨<ó}©ÐÜ)ù—îàgž@5­áueâý[HûL×Т:™[qßñ®Âx¤{SI÷÷¿Zá<#h#ðî³rÒÎÇÌš2»ÎÓ×¾õ‡oæá 'W·¿œsåˆwa,r1ß8ë[×rjZ®½¨é¶¯7—j‹…K‡s “žÿJè|=k}.•Z» ½‰¶nR e÷ǵVñ•Üú^Ÿj–ŽÂ[›„…X°ÊŽ{ž?ýuŸ§iºÕ¾°ë+O„Ñ4áÙ®GøW½-ޝ?öŒH4ÙYvˆGσÈö¢·w·²èö]纃ϕ¶‘@èõæª\ϬiŬ®Ýd–îèEo4˜û¹ä? žEÔ4mbÓO¸¹ób¾\E.Ïš&úztªÑj:£øbþøLígÀm½p@Ç^:Ôš…æ±ks¤Gm4CûATüÀðø§"«Ç.£=αis,_h¶Pâdã¸úT:eíÞ™áU¾šE‘ˆ…6œ—,s“þzÕë ­IµD‚XšxæB|Ãnȹà稪¶wºåÝĤE ‘XÌU÷g Îqþ{Ó´ÍjçS¾€n€b³B±áãQœ{ÖôÉÄ p©Ý$àž•‹­ßÙ‰dŠÞ(àm‘Å ù¦ìH浤ݟnefÞ Ë7©õ­…äôÎ88¦Zã ›×Gõ`±€8ôÀ¬K¯ é×·7R¿žÖ<åŽR« #ð§7†´ÆÖbÕÊ·0¨6ÊBªŽ0L{Sm|1¦ØjwÐDË-É,êÎväõ!zVhø} 4&ɇÌÞ#óÛjžà Õ›iwÝ4sG"Ä",“‘½nri‚4uÑgÒãýšV߆”¤ñéQ\x7N¸ŠÖ)f»eµmèÞqÎsÔ“ÔÔÓx^Ò]BKø..m.$Q­€$üu÷¨¯|%¥\iVÚxÅn¿¾7·«95,ž¶ºÖ!Ôd»¹óâÊ_œ`®9;äÔ6~²´š×Ìžêx¬NègPôÏLŸÎº$$ŒmP3‘ëÍs‡ÃQE¨\¥ýОõvMµ—vÇqÅB|g&•ö˱ko/šƒrç?÷Ϲü륉OÙ•»•.p úâ²õ½ÇY·ŽÖç$G*̸öê?*ŽÖK«"‘;Â"ã`õü°? ¥†|Bþú=FäKz»%ÀRӎ³n<-"Basy©¸)Ç=ÿSVõ? Ãy©¥äW×·ARË Ìî>”³øB ÚÂH¯f‰,õA,äòÄ‘É5> =jëT{ù ·C/(Á§jß_+Ë"#ž3Æ—Zåàð›éɶ§2ÁtXùd·^;œU{ç@¶Ò?´˜Co'š1ÜOQÏçV/ü*&Ô—P¶Õ'²¾ò•'•S‰1œzñúVÆ—g“§ˆQšw,Ìò“—v=Iªþ#Ò#Öì>Ç2²àÆéÖ3ØÕ+/ÞZ¹žëWšòê(Ù`óˆ‰ã8îk:J4 (j@Çq(‘ŸÉç¯#¯¨vãÂSHöwöš“ÚêñˆšE"ErµÇ„èÛÜG¨·öœRy¿jrǸ#ÓŒcµLÞûUìך¥ÂÏ+Ãöp«ÔXÎsާ>õšþ¿môa¬gO,ÙòØÎqœÔš‡…oÔ7ú~¦Ð^ˆ„2»'ÆHè: uÿ†.o<>lþùf—͹žd9b:ð8ÅnÙ´±ZÃ̦` 3"axö&ªkšTzö™-›Ÿ(·ÌŒü§<ÎÒtUÔuUž+eÝ J¤d€q¸õã5RÛÃÚŠéú½§ldÔ¤-Ðü¹9?…>ãÂ×âÛMšÚêµ òÄ€Žƒ×ÿÕÞ›wá‹ÛûužçPª$¢XÝTùkáÇõ«CIžïTµÔuI-ÂÙ«*GnKeÏrH•e7†µ¥Ó56Þ{E´º˜È7îßÔtÇ¥Iu¤j“K£mkVþÍ$³.ÿaÁìLš.¢uýJîSn°ßDW ìXq€zòj¥·…5 <7>—uqn¾Y FI;²O9è9íV­-uÒbûuĬBNéHé¸úw¦hÚV§iý¤&XTÝHdR¯¸©=OÖ³ ÐnßT°–â8 ž 7Op’s&=±ÖºÏ&)Ô§–œô~uÆÜ蜑jíæ{—Ü—!Üít®‹MK„Ó¢IhÁBØ8ÇVf»¦]ÜEfÖ±ï– ƒ•v?OÆ Wö:ÈÔ’—͇˸‰$ÉSÇ Ÿ ¨ot{ÉSº0>õ@Ž%pv/©?…RÓìµæ5ŠÙÞÞT 2Rޏ9ÅZ±´Ö4‡žÎ (®bw-…À ¨§½üºÖ›#Û4Él¿½”‰î=¦i0Ý[êš“Íjè';—8=óØÖ¬ûD2´jÌá2Uz–éßë\ºé×?𽡳ŸíBBGM¡rzÕ‘opº¾›vös¢M²d‚sÛ5Ð,jQ‚¢äŸˆÉ?•rWÖwÒÜ_C=¤ó?ü°)÷g¯×WG£}eEÚQ°Å]¸•R-¡wq‘òçhõ÷§Eæ  œ;Cð8þºµ€Ûä`ÈÀñŒã·5²´Î»˜l,zIá…RIÛ¿†ëNÞ²À»˜(P?Ú-LEƒ)'hQþqšrüÁc`è˜#Ø ×Ù†À ‘‘þx®þÏÄšúÎÖÚ”X¶Q$§8 ¾¤Óí|C¥ê7‰goyûÙz#¡BÃÕrGÒ¡oèI#[¾«n$Gãw$žÕ®eKkv’gS,ǨW£øµÍZîêMq--íîX}™lx¡$ò{æºË_hú…ÚÁi¨A4¦2à#d•ûoi7—âÊèžfÎÅï×½-߈4:óȽ¼†'àícÓ=3éøÖ¤n’®cÁ 8aÈ"°¼Iâk_[B÷|ɤTŽ2q‘ }©ÛÄzDI“P¶E—%7H0ÃÔSÄ:Û%ÐÔmÌ2äFÅ€ޏõ«‹©Ø<^‹Ø>ÌÃ>o˜þuZI»ºÖ·ÖÒÜÜd‘×§Ò™ýµ¥¥á´’ö¹fÛå—Éè>¾Ô·æ‘nì²êVÑìÀmÒ€TŸZiÖtÄš–úØÍ0Ìo¥Aæ\ÂBCê¦Ì@OÙå¨lõöг§§ÝÏäÛ^ÛË2çr, ž:ñN‡UÓî¥x!¼‚Y—ø@N~•SEžá£»këëYÑgo+Éãbú7=j復§ÝHñÛ^E4‹÷•$ÒO¨ØÄXÍy 6ç)üjÜD¼;–O01È>¹¬ÝwZµÐtÆ»½—!Uz3ŸAXž"ñÍ…ÎŒlžÝí¯.V''’냜WGosmx“,oåž|²¾)âÝçhæ30éa‘øU—V¸=i¤1U$ /qùÔR«)!qæj°•Þí@àmù†*p[i*rIÉ¥}çnߺOQÚšÛ”3 3ŒŒf«.¡Û#°yGÚ$C"¡êgõ"™w$åz+lÆIÛÛª—š„6p%•cŒ¤·©8©©]›ì¢M9ëÖ’Þ±²°AƒÆx©Ž$ÈÝŒqXÚˆV÷ÄÚKZïG·áM‰Î0bÏrÇò©÷PexSYíµ®«iare¸lE„àƒïZ“ÌȸÆà§ŒŒÖ£ó[¦ `2ð:R,ÆQ(PuÝŸÒ˜ÑÜ $zT5™•~^ªqüÿÏzHÝVP1‘ž~l‘øTMpÿh1*í-ËǧNý*Ò¼nwùK¼1=ª-†l¹#%SüšÑbÉÈ Çrç$úþ{T2ŠÈ!9có`޵_P¸û$?h¹™cH°‰ãÒZI Í¢ÏUùÔ`‘šF–@ÎNå;H¯—Eežâ]‘ò]˜þ•^ÓP·»„Ío?œªÅrœãžŸ•)&8K)&@pÄg·ñ¡‡%Œ¬¸Ë’2Góô¨$òÄâHШp0Ǥd.ö³s´ò;S.æŠ-ªÌ«p;g#ò¤‚X®QÞ'I 8 Û=ê)Æøó1ç uö§=éxY °áöñ°q“Ò«\αvHA,Æ*ºÝ0w$F£»ç5gí%º2„ç%›÷"¥2²³Ý”À>ß…W2)v)Éá:ŸSø‰Ù£Þ€Þ@-È`~•cÉs0)Ñ3¿ƒ†ŒS%Éqå©DÛ¿õ¨7 q°e$aòqëÛÞ–!ó³6ÔF.ìg±ÅK +¢>Ò¤.#8ÈÔN’7Ç&Qˆ<ýOµ\ˆ˜í±?Ú8Æ}óR*¬q²–f`„dÁë’*#'”ämTÊ’’H«X™•psŒ!íQ‹5·rèYzù}*³¤ªŽ]Êî|‰Éç×µO«¼@ï8è:qWdqÔf¯x´Á©Oá†ÒäŽK¯µ+!ªÅŒ±ã·JƒÃvöwž9ñ1’eÚñ”R òoÆ·ìm¼O¨[P¿²’Àg1¤XlsŽ}«Á¦Ùü9â_0¡_µ\œ`ŒU-Î%øG5ݺ CÈ”Q~|9úTúkxvÿJÐåmBæâîO"Õw¬œ6œ}{Um4i·WÞ#±×õIl¦{¹ ‘³ª‡øy#Ðvö¯@ÐÐmRÄÌ TÄF_¼Tt'ð®wâ9Ck¡ÈÀ]R ÌzƒT<`šu׊<,6Á,RJêä`†ã56¬,-âïÆ^mœoädÅ•û‡i9œŠí< Î<¥»Hsåã'êkârE'‡­Äª¬âé0N285,lÙ¼3kQ-³^…dAƒ×øÕEŒhž*ñDzLbN$qŽqQéM•ƃ¥ê’k+ Äâbéù†Lò¥ºœž+Ó˲°Uþ!ÔŽ)Ž7 çiÁÈê)\pãŒf¸ Xlj|C¯C{s0¸†Þ4r»8??“ŸZ¯iľ)µðÝÖ£5ͤ†G`åL¯’9 çÓ=ª %¾Óõ_hðß\}ŽÞÍ®`"BLG€ æ¨0¼µÐ¼7ª¦¥z÷wW)›æ%JœñŽ«e4èeø±tXË„´Y‡ï˜|Ù‡§·J¥l5Ï®£wm2$¢å’NžNÒ06ƒøõ¥ñTºŽ‡i¥êË©<²qÔ 9 #÷€Cš¯¯é@x{A‘ï®.d¹¼ˆ<+Áä ý1^—kn¶–«gm«ÖW,Çñ=k‡×ofÑ…­_jvè²Ý].¤÷ ´…Î勉ü¸üjëiò^xÓÄb+û˜#!¡l3ƒ©¨SÄZ¼ÞÐá3ÜßÌñ´»‚±U$c=‰ãšÚÓ,µû{‹ä¸¸h-&‹÷AæÉñœ9}kB¸ÕS§Ä7µÄâ›ýãiÀ8Ï~¢¬iëâK›}.þr$*÷[…1ºÁ1Åw­üİgž 5ÄÁw¨Ï«xªÅïeò „4ep dø~kÀv²Çá[yÚáÙeS„r0‡stúÓ¼jƒµ#¸•rÛzüÃõ¬hn5}XÐ!—P{ˆo¢*Ñ&Æ8ãÍs[ÔlUœjyš_" t ¨¹ó28ÏÖ¦ÕüEs¡§Ëq4öztö¡„ð ;f>¹¥uzS<º=¬’\¥ÓÈ€4©ÑϨ¬ zóWÅ:n™ez K¥pËä«ÇSÏZ¡gâ]GI·×þØÿk—O$20 ’N ~fÎãÅ&òÕÂ]< Dí*ÄÑ“½T´ÖõWÒu;{›¶þ×†í ˆí\äœ tàŸ «3êz½Þ©{af÷$ØÆÉ HKÈG%è=…¾³â/ i÷mV—’N!•0KÇÐ:WI¥[jZLšµÚO#>õ1Äé\Ç‹b¸—Ä~ŽÜˆ§i,Œ„€xçé&ñ.«¡ê÷Ú~±2^F–æâ0„ãéùTZ¿ˆn.ìnVÞâxæ#ÎÈÚ‘©èTçž=i[^ÕgºÔŸKYU-œÆª–Þ`‘‡]ǶiúÞ³­[ÛhÆ8£‚kòHåBYXàsíSøzûSmvóI¾x¤0"ºËíÈ8À­­UåÒ´›Ëԋ͹… (P@?þ¬þ•¥x†y-¥Ôg¸·º¶ŠÔÉ!DÙ$rw¯ëE—‰5rö%­ÚâÚå±$IjàÄ¡ x4—¾'¼2ßæÚM æf{‘ÂŽÔš§‰5X­t‡‚Î$kß—l¹Ü=1ýjÖ“ªêڽ擨, -¸W ;H>¹úŠ¿®3ÿ`êhøÁ…ÈãÛÒ¹M7ZÕ´oØÞ4ÒiÊ0V>b‚O5zóÅg¸·²0m‰C³Ìîb3€gx‡P¼Ôü=§Î°ˆ’YÕY ïÉý8ëZÜMiª ÚÚÕo%Ì× ¤ùkúg=*(¼@æÛRŠK@/­ï-[ädHÎÉ¢ÏÄ÷c-ýæšÇÊÇš$™º)-µØ§¿´µ¸ŽÝÌÊJ<2ïØyù[Ž+cz,sdä“Àpã§õ¬ÍUc:eÄM?îY·ÀãËrncl@Içùb®Árò@χ@HÀ*AùBÏZœøŠ{S Æ›JªŒ‚OÞ>ÜÔ7Ü^l¯S=¼,U¤@6ZÙ¶hîlRXåß•Ê6ÜwéSùBŒ6An˜ôÿ>Õ ¼²(Ü|µ$*gñÍ_—D…”È1£ÓÚ¡Â4bITäúçŽ8§;f…K—UÏj_(+16£Ñ»úö¥>\·0HÆìýà=¨Ûd^=¿Î¾øÕºg°þF½6+xE¹†;x㈌UÀüª;m>ÊÎF{k8#fà´q€}è¶±±†WžÚÎen ,aMX(gŒÆà:†uªÑhÚdQÈÂÕ@UÂÂ9Ö‹ [Kk|[[ENsµc Ÿ¨¨ Ò´Û+•¸·±µŠfÉ-jþ"–ãIÒïn’âæÎÖi‡GxÔ·æE]!vâ0j¥saoymök«xî#ß»l«¹sô5 š—$°<ºm›lùT´Cå±éRÝèÚ}ìñ½Ý•¼Ï Ò 8úT'Ãú9‚X›Nµòämò'”¸cëÓÞè:;Z]>Õ¼ˆÿvÁíéQÿbibçÏ6Â@æMÁÞõúÓχôç2éÖàÜ.%`ƒçúúÕoøEôy!H[N·0ÆIDØ6‚qÎ=i?áÒMÃOý› LP«>ÞpF0M¾ÒmX¼v+ì(\…SÔzzqV-¼9¥[ºKog0RŠ?º\ß…EmáÍ"Ò˜#±†8æâEÛßPim t©,gɈ0rrÙ<“ž¦¤À;ût½?kÈØ8½k˜Ôüa}¬}¹&º´€YÚM‚AþѧÝxZÂw´’Ýä´žÍvÅ4$nö9ÎàyëïH<-hlïa3Üý¢ó帹b<ÇÆ:` z ­'‚meÓ¬,šúñb²I(y3ÇoëV§ð¬SøuµÜE(caíósóqëéT'ð=‹êS\ÛÞßZ-Ãîž$ÚÜûÕ·ð«]I!žC¶kxáÚ¥"R9ÚëTßÀÖÿØ0éÚlÎ%…É]Ñ‘žœ{ÖýŒMgj‘´òN@Á’VÉnyÍT×t+my`Šë,!•eUçGÐ÷¤µðí¾»>®±bw…b+Øc¸÷ÀðªPxa­ïõ+õÔåó/ÆÇÌc Ž>ƒŠ¨<f|?’÷²“m!– Ôaâ'ŸÇ½X±ðãÚÅq,ºÅåÛEå¤îòëÚ—JðÚi~¸ÒšµÛɸà.ûÝ>µGNðgØå[gÖ.®,"}Ëfq·ŽÄúgµuò…1䎽Aí\Õ¯…äƒSÕ/¤Ô|Ô¿R²(L`r{S¼;¥K¢iÍj×ísŒF¸U3üù©5­MwA}>;…·Im»²ÎNõB_]\^é7O©Fœ6*yßÐâôFÝ\.§o­²Òòc3!ˆÝž…‰é‘WÃZ¤Q$#QŠt6¢ÚHæ‡r nÃuëŠÜÑ4È´m 9¿’¹ÜÜdç“ôëY×Ú Äþ"³Ö¢º#´ 2„–s“Ÿ­QƒÁ³Oý®—×1K§óæ$ £FMM¤økY·xbÔu´XÚÑÅí-Ž›\8«máx¤ñjkÛÔ¡‹˜ñÖAÀoʨjÔÓ_ŸUÑ5¶k…|n¹ôÎ)ºÏ†ï/´ëK85ä’)¾Ñ4Óç,ãЃںˆüà 1 r¤‘žäVˆ4k­CQÓ¯-%'²º¤ í|ãÓžß­#øtj2ßÜj®su¢!òľÙêsÎj†‘ ø‚“M»Ôâ]:Ä‘”{ cxZÒ5‹É´[ËakxûäY>Y<äTÚ§‡u ìv†xf’ ^K‰tÔñƒÅIe¤êþ/¹Ô®ÒyjÛ#c··­nj¶ÓM¥ÜZéïåÝ2åÇÈý+‡ÂÞjw’ÝÇ„r[!l‡sü^˜©´/Ä¢tÉîí㱄ìó£oÞ2ËøqšjèZþ¬Þ¶”-§´»s.&b ßiÚ–ƒ­\M£²"Ý9L²Èî±'$ØzU­7LÔàñŽ£¨Íl‰Â_Þ‚A`ãÐâµµ‹ ï4»«uud(8êçó®^ V¼Ñ-´ íÒ#`&›Ì*î©÷§5ޝ¤k·wM¬wVw{wFÒ(Gÿ¨Ô~ ±Õ¯4{HL&{ÁqçIµ”*œ*ç“×­%Æ›¨[kÖúä6í&õòç¶Þ<ÁÇ×ðô¨N‘|Ï«êb‘d»‡È† Ãpc-Í)Юî|ö b0\ÀPî0Íœö=êÖ—6³röÑM¦Çf°%¸lØì½Y³:Œ×Mqd òä>_Íë늇]†A§È‘DÒÌ¡q$©ŸNkœ‚Öú\iæÂçí ý<¾Äç9ü*ÅÌ7>n€æÊè-¦<Üǽ_º«‚<Ö‘¶‘·²ãŠãty¤Ò῵’Òyv1¼q– ÇÝ'µS—K»´Òôø>Ï+Ëö:@‘–Ø= ëO[Žé5 ;S†&X“ª§pÏ|uõª†+­K[¼‘-n¡K‹Sm"ÀàûTV‘Èma±þÅa}Þ´ó÷‹UÕgÿ„ÄKäË刼¢Â3´7¦q]Ùãxʪ 9ÉÏ~k•E’ßÄ÷[à” b ŽŠ~\€2}ªµÉ³Ñn´éâ+pÛ‚®ÂKä}+wCµk-%N b¤}Þrh†Ûƒ)ÎXàôf[Ÿ˜8ÞÙb §¿ZÓ@&iÃnÐ:}}*¸% ‘’Ä|Ëêv©m¢¤W(9äöÿ­Ohá3 ¸"<åO sëÿרíáXÐn`¤v8{P¡Äx\3ulc*ÿ®‘íÆ_ƒÔ©çò¯UCž23‘‚&œ–猎Z‰”–ÀläoóŠ• IÉÉéI<¸Â…À÷íP7f$ñÑyü©J–\¼{TÈœ‘µqÖƒÄ``?Fò:)`¼õÀ©cpä°‡ 4Ùä;‘G~Àw¥ùC€{õ¥|)ç+žÀU|r¬HQ“œu5cݸ…pBTBW<ö¥pÄÓ<úÔE–4V`>\ ôøœcvsŠs•v穦´{w/`2)7ù1±`J)ÆBõ¤ó€u'iíÒ–98ܨsЃÅ/PP±Ü£$â‘Bʾdg“÷} 5Ó–ÜqŽ:TyÁROcŽÕ"r®pHÎFx8¢i DÞXgÿeMUhÜ•‰oRyÏùÍ:Ê0X±?6;f™,¡ÁV<çþµ4—•6…zÒ¼¢O1ŽÞƒŸ¼qFö‘ÆàsÉÇãYöÞ$†ëÄ£¥[¤ˆÊÌËò•ÏnkJà:Œ$¯9¢ƒ{&[M(%P•Ú:Z|gljwx© O™8#4Õ ³.@ä/jÌÓ5ÛVk»{më%«yr«Ç·Ÿlý*ênŠ-î]º’¨ÏjbND¬SròFFpiÒLÒ„p¼`z}h î¤áp£åRsP:.3ÛvHÛŽjt˜¤‘£ NÅ^ôdÅx¡NÇÎICÉ·ùÅJ‹O¼"žG#Ðuªºf¥±¦¥í´€Àÿ.YHèyàûŠ{Ä‘Œ §ç-ÇåRÇ(ƒÊqÔz})ìJaˆÇ-ÓÓüõU1Ž9Èæ›öŒʳ0}MgK©X-ü6uŠòa˜âeäŒgòâ­¨h•;A9¿þªg–ÿhó‰À·çþ4¦h¤ÞÀ€êxÍ$ògpU Ê©x¡_@Ñ’0>”ˆ"‚Ü ãÿ×Q%iab ’ ÎF1M¶Ô-ï$˜[\¤žWßhÛvÒ{qÅI$l$Þd%ËàrqQ4ËŽEP¿/oòÿ=êx%! 3à“‚IíE¼ã ÅòÍÇ\öÍ$µØ©88#<Ômu “µ¸¸MT?#ßÌ‚07·ÎÃÏQɨüô àÇ0OLûÔ‹:îNåùH=MY¤ŒÈ °õ'k2î{‰TÇ ÈŒU¾fþ÷oÖ¥k£²ÌUÜ.×bqÎ3ϧÿ^¥Y i,ä†ß€9çJ¨îêrp ò§¯·ù柼ÆÀ¸Ú“¸Ž‡·4ϵ"³H²»í8úþ˜×ThÍМ þ4É…¼q s±ç§^j$˜[Âcc‰ É¥%ÄŒX›qæZi$B2Ì0qëþ}ªXßr( (ã§½HS—rC~$Ÿè* ‹²116ã׎¿ç¥2';mä@þžµp\%ÜÉ#ïŽBíÜ:hˆË3*"–»<ôç5y &Œä•QœvúšfØœmÝ€[8Ïÿªž‘ä,컩ÏAÞ¦™–(Äi÷Êà äg8â¡XØË¿a1c g¡Ïò«J«$gxÛótëÇ©Ç JÑ<‰…Èù¹#¦}¿Vž9Ÿ-AL)U${ÒÎäB ¡ˆ Îz{T‰ €£<áÈLW§оæmÄðqô£yu` ƒž¯åLûQY•%˜M;x· §³`ZV}ä¨ÌñúSBæ ìÁ[>£4èÔ£|¤ãûûTŒ{A\‘éP $„qMV•bRv“žý1NVpÅIÊéÞ†f1`EóOñ©Þ¼§Üö¦HLc` ôªñ,þbzš°òH òúSÌëÀÊ®zÔm33¢¬`©êIéøSfž)iVmö¦Û°#œ‡Æw•<.û[;JƒÁéŸJTeÛ¹†3ïD’dŒöïQ¹QëŒýNiѹÞ4ôéN™·o\øäú †Ôˆ”#r `c8©\‚ÉÇ\t¦mØå”IäÔœ€üÇ?õ¤!|–Ϩõ¯:žÿWÖuÝZÒÁî-ʇʕPþódr3Ú_øŠÃ@Ò[Ámy5Ê[L"Îyý:ZŠ-JÿCñ&£ew{5õ´v t£•#ÓgN·×uM"ÃY¶ÕÊJò $„åÿºÈµ…Þ¡â>÷Q[ù-™&hí¢WhÈ-ž¤Õ[êÚèÚtr}–âåg8_îSúT–¯&‰ãíRâk‰.¾Ï¦4 ¾7`pH¢ÓPñ~¥®§h“8•·)°6…p„íI¶g¾*£_éñj²]KqpÎçÉvã×{æ§µºÙ}¥VŽF(˜S†'¨ÇçRÉ­ØYÞ"ÊîV#ó²Ç•ö4ûÝfÂò%¸ÀpYO$yíÒˆõ; ÔZ¹cæ6O±õ©–V–í1¸å “žƒÛš¯ýµeo|OœPªä);OÉVÊÌÝå'±"6lŸj§ ìW…“a‘’A©î$/œ¤23ÛÓ­Û6##•I-ó óŠišÏÙñûÂù[©Éý–$Ðyk´‘ób;Ï5_jùÎár„²“ô…÷q±¼ÀA*â­%Ý×wÈãÏÏ?®)c{yiÎ{`~5éHíæçfâ:àÔ±Ÿ1IdU“'u*ÃÐ8oBO4×älžŸò+EËZiÎâŒ3Î@л· =€ãÖŸ»l˜G4Ò€¯Ì Ö‘—'iÁˆÔÃó˰qŽ8=)êYÉa{Zi.„`?( 8à‘œsê($ƒµÜœƒÚšû‚2)Ú§µGå°“jŸ”'§­5ت~ï#ži1’ªx$rHç5 Mä–Y0\ž´ðá ÙxàÔª"ªœí'œr) ó/N0j UÁÎO5,NYJ’r9ãµGÌ~sÏ=Å8 ã¿Ö™dR™Gò§åùƒ§cŠ{;mbžFww¡·¸/וKká;6K´ÑõokvŤ‰âßå·r§#õÍEwàKHì´ï컉-o,›1M÷²IÉÈ>´ëOý±q©êFí® 6ò¨ˆ e?JŠÏÁwÚpŸÛ“6’­Ÿ³ˆÀb¤ýÝÝq]g–®À•ÂúÏ¥ax«@}nÚÕ-îü™­§¡eܬG¨öªžÕmµkíIuHÞk¨BH<Œ …ã¿AUOõð‚è_oƒjKæï1Äg8ëëV'ð½ôZ¥¾©§ß¤7æ†äÑ4-Ü­11 ¬Þ•Š| «ÿeýŒ]ÚŽãíÊTïçølM¤êÒx®ßX–[/ÝÁäm”·©öäÕ+k¶_¦´V¹¼ûAäÀõCÇLüzÖÚ™…líšûjy+#lŒ­Ó©=±Þ§¹Ð5iåÐútåùvÞ?Ùã¥Hº&³«¬_¤vgûBоc|¸îóUdð¦¥ÿe–ŸºÔ]Z\‰Pï;XryÈã­uVBe†3z!i° yGåÏãÉíÍG­Ú\Ï`âÁQgÞ»<Ãò•Ï*G¸Ísv¾¹‘õWŽ8lb¼¶ò–Ý$,¥ñ{UI|7âIôýÚXlÑ,dXÈI w8UÉt={HÖ®®ô±o<ØiF#c‘×õ©¤Ñ5¯è׬©t-U¼ÙK…Þ[¨°ý*MÂòËÄZÍÍä ݾä"@qŽÇëšèZ%œ¨^ ©ô>µÁêžÖ..uX䵊ìMŵ̒ªQÎ~•Öèvs[èv_Ä"ž8Âá c¡=ºSõ~Ñ£^[ Ú^PN:Çõ®.맆#µû:C>Ÿ h²ã.rIúu­s§ßë7šl·VMi”žt†GRdn0«ƒíXðŽëk¨Ýê¶¶SEz.|è>d!”žAæµo¬µ—Õ­õè4Ã#4^UÕ£ºäc¸>”º¶­}á«Õ{-²\•ZÆW1¨=X÷'ü* ì/ÚO ”ÓnØÆ&•×is‹Û8Ý ‘ PdR >)×PʺM∈ @1Ôcó®J)~×á(ôh szdÆÂ‡åù²I=‡½W¸´‹FÕç‡S¶2Å,jbq’2µoé0§‰RÈ[ĪA#ÜU™Hœ?#¦}+ƒ´ž&‚{§u¶†S"â2OÓ=1[)47ž0‘Q–D–<Qéz}ÀÕO•XÛÙÈd@{“÷z~uN%±¶7–ºªÌ.D¤Œ3a‡ÐT’íMSHYF ªf`=2Æ­i ÚÞ¨7.7†_›®jÝHŠÊ1‚:ãùýk½x¤‹R*ën¡D ÒzŸn½+³Ó'ÑíäH@È=ñȨÝ]ÁVMÅv¨ýGZ¼ˆ¯ŽP¦O¯CùTÄlÀÈÚƒ 1×­Ud™UB®ìý*ߘIr_ƒœíëþ‘¨¦yHÄ œ°†yü*h.FAݳ¨é¸òjD#`•ÈGÏïëÇøR$y"`õ«³¹×må¿Óã²Ô¡„µÓE*4D™6ŽTg¡÷­iw32Çp…fÜA Bœ68ö¤µñ—{#AovžvÂê­‘•þðÎ2=Åaj~(ί¢C§]G$W7\¤Ävºú«t#ŽÙ®‹S¹{ .êù!3=¼Nè€òØâ¹ÏkÚ®¨,.â¼³»†lý®8ÓnpH}xæº(µý2kÔ¶[Ø|ã?xŽ ‡ÕXx³@i‚ VÐÈí±q 7×¥Goâm=µ»­]–[e òÇ œ~𑾔ƒÄC[M*êâ8¿Ö³8Iéœô©´ýWOÔ‘žÊê)Ä|7–á¶œdt¬¿k—Z4– ªËÍÂDÒ³ýÝǦ=qQk—þ ·œ2+%³Ž Ï-Û¸óœc°üê߆5 ½OÃÖ×—ËK7ϵ3¹ã¯·5vùÚ(¤0ÀòÈ!Ÿ©5ËCâãÿdÚÜÖȲ¬Æ‰_Û¶ŽišŠî4In ÔcŠI#µ[˜ZT?;vœç8æŸuâûÄz´pŸ2ÐÜÄÐç’:¡ÉëÈæ®XxŠðê–V:Œ1#_Bf„Å‘´ŽJœõ8#šèJ—$ý3ÏÈjþ$×ô{t¸{;E†[¿³B®Í¼‚H ,Ñ©x—[ÑÞ½³´[y.b‹ÎV;J¾s׸ÅlÜëví£\Ýé×vRȃ†y@Œ7¡5a5kA$ÜÝ[Grè§ÊIéŽç'¥iPŽ™ïFC®OQOÎW©ãŒö¨[ÍNžÃ¥C¨ù@ɨegPJxΧ!CŸ^Ÿ•#1Y0AÕGI½‹QWº·ž97*­8õý?:ÕûB& –$ü¤g§z­.'R0ÏFQŒ} R’EV*!b£8Îyç¥^Á”üÃæškN-”áÕ"y ?§«wÔPËk"²ò¸WíÁÏ­(o5سåS€Œš­q} “Ä—ÄŽÕ,ÀcéP^\Ê%ÿFÛ€àȲðOõ©`½³u’æ;¨L pÌ\mv'<–ââÖ6$• Ë$)Îã×åê@ÎTœ&Ò¤ÝóÒ«ùÐB¸g*Ï’œœ{SVõUB®psÀ Š—ÏI!ÀfË~8¨VvKµ}ÿ&GÊ9üÿ:±4Û ¦Ðq“Å"I @HÙ¿­W¹q¼¼m»´ÅV°H,¢› ‹,½ñü^äþub¦Y×Í‚)óséQÉ<ÑÜå£û§!çŸoJ[©ä1ð ÷˜íê)HÂD7ã|c¥-ÅÊ¢“# ÙÀbzZ¨ó»ÃµT€[æêqC0ˆ”î|ÌFH`có¦ËrÆ%ÂðpÃ9ãÊ– W{*•²“ElHâÞ0:ti²Nÿi œ²Ç8ëŒTqº³™¥@Æ5$dçëI<~kÄ„·ÍóOnõ"M¾Z¬Ç© Èü}*ç–òa·©n :ôéCÛÚÆØkd2²å™gÚ…tòßËŸ•T`céPJvLa׸þïN)&y<ØË ²w!AžÿZ­FÌÏ´–Þ 'IG™UÑ›ËùNQíD0ùweýàsÉõ©åòå¶®a'åmÝÉäóQ¢í¾êªœ;7½Y3~ñQvì>½|ÔÀ3ª••qŒ|¿þªÓ¼Ð¯,ÛÂñÅk%Ã[LÒÝJ‹‘¹‡$þ$ÖLz¬æîÛN‚æÖÚîÖa-µÐùaôÞ„ÿõêÆŸ¤Éu§´è2Ùj fð=ÍÜn*Wääç'ð£†-Vá|1jú5Ü/¦Ü(™ö¨\ÆAÏ>µßj“]Ûé72Ú[™¦K$gøÏ\WÚMÍ׉m/46ïN–D¶‰c1Ç‚?"séG†t¦ˆÙZÞh7o´æâI„`ýå9äŸ@*…¼šŸ†µMÖÂI.¦ÔŸd¢?‘>qÉnƒÒŸLÔÿ¶|An–³–½²Hᜓ!0r{sQhvª"ˆ·‡ïa»‚Ùã–k†b£å#2wdûU 3N¸ŽßÂq¾Ÿr²[Ï!Ÿ÷íñž)£O½as²=wíe<’•ýà1ÏÒ¬êÚþ©.««ØYL°HÐp‡,@ê;c¿jk{kŸë3Yhú”s\[‹\oi$~À.IÀõ®¿@!Ð,R8 2ylÚÙA¬_´¯š‘Ãq3E}Òyq  œœW|Uq-Ά–v«1kùÛOÈ­÷‰ôùsÖ¬E¨Úéú•–ˆ±N­,_»'îþQ÷sëZ77)Híò‚Oä95ÂxvÒÞïÁWZ~¥Ê!–I$S+rÙR29=:RXøh^Ý__jæéì·Ùà?ëv’Û@ãÛ½fÞxZ÷U†öu{·† Q’Ýðîr ````g“[Í&¡¯é:Œv× 2ÎGŸtdåq´ÔñÒ»K9ÖúÒÔŽXÖU UÚÃ=ˆí\§Ä'2YéÑ¥‘…ìr- aGSÀ£Ç-톌‰’!¾ŠF2pƒ9Èǽsw𑌡‚ÒA’«Á=8õ$Ë,z¤7v+$’7Ù’[Iâ8— ¤2q·<ý+Ô÷‹Ó§#Òš7! ½íÒ›#Ëæ*–Âu8î}«…“Wñ-ωµm*ÖöÕÚ1"3DIO^j½ŒïßÃ:Z/ûGP¸6ÂF*àà±Ò´nuMOBñ%Ž{t—p_!XfdÚcq뎣¥b·‰¼M>‘ªß­Å¢G§Ü4eDDï ŒŽ¼ ×Õ5ÍR=^;›k;Ch²¶äÞï!çhPø›[´ðõ”·ÑGöíJP"Fv§•î}½Å^Òu=uîïm'·gˆEæAs4 X Öv“âmz}%µ»Ï±.™æ¢ƒæ63Œv늚mo]ƒÃðx•ÞÝíò®Ö{NDlp0Ùäò;WeiyõŒ©¸G*‡\ðpF­fx“Z6™%äœàÕ‰ùÖN“â=OûbÞÖâÛζ™ 2Gm$b&¡ÝÔ{Õ}ÅÚ†¯x¢7µÎÉ5£©D£8l“Ï8íQxNóV¸Õõùn$·“Ë‘•²å=¥CŒom|ý«o§Z©7M"eG^¾õ$Þ!×·"Ó%ÓìÄ÷Qù°m•°˜þñÇ =)ö^$¾¹ÒõG’Ä5öŸ9ŒÇùdnœgó¥ÓüGqq¯¦‘y ¬“I”IÈB?„õª±~·Zõî¢ð›{i$Uvvƒ€ƒŽ;Ô6ž*a%™{hžÞâPvÂXË= qƒïZ÷^ ¾ºÕnìtËX¥€ žfà“ü#ó&™ðݳá©ÛníO¸ã¥tÓ00²ª8ã#‚}둃Åz­ë_[ØèÅÅ›pf¦xéɨîücÐí5[âYü§V` >z{“WÏŠ/ –k4%ôòì·„È0T¼Hè*;Ï‹‡¿ÑµK%†àÚ¼‰µ·¤Š=À9ëÛµcè^$ºÑü+§K6œÏ§FÄ<« ÝËvúsë]ψöÏ,6V-2$iyd}ŠWNM`ø¦þßTÐô]^Þd’ñv©w|®~¢µ-|Dç]†œöÒÈ¥â]áƒðr3Ó<¾¸±»ð6¨ö–BßmÈÞ—Ê凧\V´—¶ yáûk»'’rŠ`”£=óéQXø–øêúÊËdò[[õHã(FyÏrjêø¦ ­ Øígy¼„@ê[q­ÄŒI — ”]£×ŸëÒ¢U‘€vuò.}‡$3ŸçN–$2 ,ÌÄ)ØyÈó®o[ñ_iº’Cis5¼A¢’Q€ñÇ|œµOFÕ"Ó<-§«ÆòKrJƪ~ñÎ{ž\‹Å{X\¼‹$2Z`Ia˜ö9æˆm•.丶¹O.5”©E9\ñŒÿÖ¨í|g§£ÚÍ$7I‡jÎÑaýsÍ8]X·ÇÚ¤¹Šmªr¤c½öOCe²FŒÆ<ÃåÏÇÇ'ëNŸZ³In¥¤u/xRT1ãօܯjÉ ¦ð 5S¼Ô!ÒUi•ò9RsÅVMgO“Ìž;…qÚåÁÇ=1ëøP·ðêvsEm1ó— äã=_JËÐïÙt¥¼¾edIHó’sZ£QÓæŠSÆ<°Kî0øëúV|ͽþŸ<‚u¶)ŒéžþtëKûxí`µ“PI&~ôÈõ©ÚþÌöÊ…Aýà ÷zuÏÒiukqq)¶˜Es¨éÚ¤ÞÑ£Áœ÷?c꺰Žk{{k•€¾DŽyؾùõ©–õ!µ1^_Ã$Á3½Hæ¬É¨AmiiãRë¹I"¦ æ'ÈÁÃü䯯­YUP€œyò‚W…Æ?úõ]‹ ÈÉÈ|F1ÇëÚ+–v’LÈþ§§ãJ´% êÁ°òpO'Ò«o™aÈù™”zNGJ–Ø‘e ädÆ?HLΡ¥lp¼vïüêÄ•¶–-Æ@ÀsŠK’‰0]ëÉ%±Œ7¨Ç­ oö…&hÀÈÁb3Žø¯WóˆFßòc‘Á¨¼ô‘“kgðsR‰>màü§°ïB_÷ƒæÏíMf çå-’sMó±ØN0~^ø¬Ý{TƒMÒf»åG‚æ c8ãÒ›£ÚØXi^v›اy“’FsÉëXðøÒÒêâá ±¾‘à.]°gaãŠÙÓµ;}RÁnbܨÌF×B¬$ŽÜÕ&ÈÙ²dŒ/QïUõè´Û/µH%‘#]ìrqÐUèæ‹‹™w Ü`Q桎ǯJc\'šG`?Q¼˜¹*Ì •Ï^Ÿ…SþÔµþÕ:fÙ<ᔇn3޾µlÙB.–ð…3„جNvƒÉÀ¥‘‚œ¨ÝJÿQµÒ­d¾¸R!AóRÛG®PƒÆEÍIJ2}¡G”òÆÈ$úk\aqòä('4±ImrrzS˺Àpp=Í( -Ž•"”Ç~•lŽ $ÉÚ¿3w#™i«éë}fwÄùÅHÎê [ÈýïóÞ• ÛÀ+ÏŸª¿‹l5SdÛùmûÕ$žŸBk3û_û¼CäK{qæ¡YFpO*HèqK¦hú¥·‰týDivö¶É貌¯<±ã’j{]QIuû m‘,õ du¹ßÈ ^µ&eâ‹x!Ó¥³·…b ½.ä6¯sõ¦Ç¦ë:.½¨\ÙX‹ë;öþ°!F÷üê÷ôËÍ+Fž+è’&3–8lçµoÌG%J‘Çá\qm©x„ZéòÝ<—M±ãÆsŒäþ´Ûß êVžÓl!µk›uö¹Œda}G'éZúþ—}.§¤kvvŒòÛq-¶àƒúg­Aq¢ÞkšÓê_b{8â³x‘%`ä`Þ5RÛOÕ.|‡ŸN–)IÄ“>6*nÝ‘ÎIö¦êZf¦ºœ–Me=æž–Þ]¨Â m¸ËsØç­V~¨|¦DÖ£Ø^  ²òrã[&Ò}c]µÕÍ”¶ööq¶A‰$cÛ•Ï­øð®«dºuО{ ñ®ÃÈÈÿ ¿{mu.©áÇ6W,¶Ê<ãå”:þUoJ·¼Ó¼c« l¦xn]HœÝ…ï’~¸ªz.,^1¹¶kØZËö•^ 3Žà3]ÿ†-®.èÞ_!vÉXç#ÀVzøVÞX]CRàçi¸éRÃáÄ·ºŽA¨_1^@{‚TŸCí\½´÷zV•©è÷—,îîé$HX8*G_ÈÔ-§ÜÁ¥hwÓXË<Á’h@'®=+JG´¸Ó¯%µÑ<»­û½²Hwº`9ªpml5{KIä¹Ò…£2Èñcb>è?΢k»}CÁ–zT Ó^’ .ÃòsÔŸLUèLPxÞ(%RÍaló83Yúp’ êúbÂÿjÞòcaà;þb¥ÒŸJ¸ŽÉ!ÓžMEp¬ŒX ˜“À®Úx †GddP¼cƒí\—‹Ìi¤Ä„(v™O^¸Ïãÿë¦ÞÝ[ÛxÂÒéåýËÚü®ƒ ’O™%ÃYÝÜÝXH­æ]–ÎQ»$7 íg¦†#–Î=qX0(º×s¸*;õæ³5Ûx­ôÝ6hÿãܺ—(yé×5bËû)µšËΔˆ[{³’©é’k2ÚX¡ð´%£YîŠäíCØš’Fñ%æûˆçf‹Ô°:øÑ¦KmÿÜEã€çi<㊂[mš†¢ƒ&‡º“þ?Î’öÖxôø/'VU¸˜<¬ÝîÊ´lã²]]¹.&xñ”ÀU_ö°>•ÐI€œî+·Ås:¤!uý8¶ÒòAP8ãü*íá¸ñlˆÑFñùy*xj¯¶#ªßA,Þ@Ç–‹´—Ðg¥^´7PÁil³Â 2—¡è=¹®Žf´iDYBòŠr?óÞª¼è…e(Û7øÇO­K3D±ÈÀÚÊ“ìÅ.B®¨äÉëHQÒuã®T‘Èæœ­˜e*»²y9«HÈVG–?'Óý)'?¾ NÒ A#ŒqùSL^qã™Q²FsÇ^J`[„UWv2p2+WOÖgÔLJìµKÙ’ÚâÎGy<†Y`ÞÀf£šYß]·ÑmõÆh#µfK‰œ©‘÷0?2‘’¿j5KÍNmdmF]FÚÚÔ­ÓZÊcqóæïŒzq^ö¸N–·k3ZûÈçÎO½y^¾»¥Çö»‰-n­æ,ÓI“1oðûb³¬¯õ´ý/Q:ÓË.¬mÝ^\©'‚? ›T¼mWCñeÅÕÄË, p‰TP@^ù¯@чüI,ùDøÄxrËPºÔ¼JlïÒÙ¾Úà)Œ8-Î^*[éî…ï‡tèµ)"‘ »ò$s¿ÏþÛÔ-ü5t­{+¤ZÁ·.Í™| yõ&‹Ë½VÏÃ辺oÚoo˜E»¾yç=ùéW5k‹÷Ö5´MNî(í4õ¸‰"`|}:qQÿjjz½Å†œ—‘ÂϦ$ä´†2ò7|Î1œ{š’}OU¸¼Ó´oí wwµw’d¢ÊáŠð@펞µ äÚ±¹ðýœšË™&–Kyæ¶#iÛøu©®¥¿³ñ£b5+‡XtŸ5öîÞ?‹§µA¢jz¢ê’MNi–þÞV–9À*¼cŽ)º¥¬jš“‹Ë“™åûr`‚©ùB’1íÅv+Eÿ„;VÛ‹W ~瑼÷Má‹ `%¾å¤°Êœïp8V'§ÿ^·õÍbÿÄžŸ¦\Çl-"Œ¦eØ2Fw´îâ¨Ýë—ÖÚÄ2]ÞH,ŠÁ‹‹B%â =ùb§µÕuÍVk»ËKÈ ‚Þð«#͵|µ8 ®Þ¤sœÓu]~úÏTy-/åEôpª<¨ÔõCýæï‘Ò®¤ú•Ï‹µxµ&Kkãb¿0Á%zt©|?qªYÙk-¬aeßçÛ0®ÕQØÆ¹ÿ Þjn›áÉ¢Ôdû5ÕãÀöÅFÀ 7#Œç>õêËå•ÚÉÁÚ¿Jt®Bœe›¨ÇOÆ›Þ2áZhXÓ 6sËzšˆH$¸`‚ž~Z_”nÃsDJ¹gA^™Sü©ú/žíL/## ¶ÓÆÉúÒ(‚ä÷8¥Rc8$`‚F9¥Ff# p8¦‹ÛO´‹6¹„\7+Ḍg§Z›sT1#€yÿit27209ëÒ«ÅÄòC‘4‘cÌ@Ü©>£éOi‚¨@zóÁêi^så+ó=>´Ç¾FÓÜŽ‚š$@…A=~m§¥F¬ „)݃‚?­S£MÇ9ÏQÏàÌdPí´u¥2ÈÉÉç¨ö©b|Á¹ˆ;9éšiAµŽâªÜ78Ç¥R³Ñ,t¡5Åœ*“I“»qÁ>üÕÍÇkºäcž=Í'™‡?1<û™© 26íÀý;úÔçp¨¥È ß' OÉ*C’I=9¤'ÌŒ°BvŽôÈØÊ½ ©d’%“iRùúsM1¢áÉãŽ9ü¿*†h–î…˜4R.Æç¿Ö¢Òt»MȤ„ÞÇs3e˜ôêzÕæedPBµ²´KVÒ%aò©TãðéMm.ÉYÐÛÀAó,~þº-íc·{s,.0Tc>⦞$¹m¼´u#k(éÇ·ùéP[YCnˬ)b $qÆji™˜ o—ŒtÏÿ«­R}>ÂcºæÌ›±½½ W a8+žƒ'šAq±‚¿ÊÅp8Éÿ<Ô‘ÊWRr£1êbI¤f‘€1ŒÇaLÖRä¡d ;v©çò•€nTrqèERB^å[äÁ†ÞG_CN•q!V“i\ c5êsø{I¸·ŽÕ¬-Ú#º8ö ª}‡½&¡¢i–ð%Å„¤“xÑK-”2Q±N‹éô«ÌQ×ÉHÆ °è:JÊ_è6¡d].ß1ÊÉÈ=ñD>ÑZ(ñ§Û¬hþj.:7¯Ö›qámæò[›>Þi%8%×­hCko Þ5Q €°|+ FEÓà ç,yÁ?JžÑ¢’¶¯ÙØ´XÈØO'õ“­ø6Þxb‹NŽÚt‰*I[ù†sžjM+Á60Á2_E¿hug†$1Ä»AÆ'šÕ—ÃzCK3ýŒnž1„±ù—Ž î8¨.ü1¢ÝEom5„l¶ËˆAÏÊ=>žÔûÍJÔíá‚òÆ'Šˆ€\m튑¼;¥ÈÖ¤YôN Jˆþ€Ši3]És<,fž?%Ø; ËÝzô¨dðΗ p›h OlŒ–Ͻ–H=}ëžÒ|-­Å£Ü‹DkwæÛ«‰%ÁìotëmNÅíoQž)~R¡ˆÈëÉJÏ—Ãz[é©¥›`öŠAÈÌqCÔR\x;G»– f±óƒ¹²Àv<óøÓçðÆ™5Áí9%K.öJýܨàã˜þÑ[Q:“Z*ÝÝœ vb3ІïÁÚ²Ëq4šY’1‚—þððj宇¦ÙêßÂŒ.'HÆF ê ÅR¶ð¶‹et÷6öääHp7u*3òŸ¥øOHH¬áH_˵“͉DÏò9ôæ·”,ã>‡Òœªã#qô23’ª‡úb¹fñ.£¨M©I¥Ãoö];r¼“‚L¬£1ÀýjŠøËP]/C¿[85 ¼–Œ•;ˆãò­øIdÿ„ªóJ¼‚‚+cp%çÔ}+?^ÅU²Öb†ûÄWQi¶¤¶:î“äþY¦Å㉌:}ĺ[Çevâ/5NœtúÕÍCÄMi{uee`×-mÚ.0áv¼uÉÅihZŸöΙìPËlÅP9ž:ñô©/ïŸa<þSLçbrIô¬K_Èuø´çÓ$ŽêEš§bú¶:T=¶„ïHÙ­<à/˜»¸8È^¸«ÚŸ‹"³Ô!±ŽÂæækˆüÈ]ÃñÆ*8¼K5ÃCkŸ,ׯ?:KrU|¥÷'¹ãн¢kVúÒ\WŠâ+=¼ƒ œÕÏ5Úì¨9Œ)Ê1äzs"•#q W¦O¥p+Ö.eÔcº°bm´©ÊWÎÝG¾‰®Î}rÞ-!uŒ3ÀÈ$ùN1T-üohóX—µ¹Ž+Ì,sIvzgúÔú†±lngÓ’Ú{Ù¢RÒ¤#î8$“Ö²¾8>¹m¼ý©ùcÈàc?•u7hˆòrBe‚u’ÚŠ$ßgY„YÛÎN¿&›}â+h ѤRÈ-ðÓ´Qÿªúô矨ø²K;8Úþú;Ç d Ÿ“8 {ÖÿÚ Fd1†Œ„`ƒî?*kÏ*Z %œ½œeø®ZûS]?Çp3Ms$Klv¤¿ÍÈÀQô­¹¤÷K+°Y$b äq޼UÛ}sM½u·´»hÆNHÇ#'óªšv¯mhÚ•ôú¡¸…[>Xòý>ôÙ5¸5= g‹RK Ø ç?sžƒÔâ´®ïíì¡íW1±š!µÈå½ð*«Ø>˳wŒ|¾fp¤ÿ>-gO¹Ô#·†t‘Éù¸$ñÚ¤¤Wt$ §ïgöm„™Ù÷ÉŽ}k1õk[^M?ÌIS’G³÷G½eéú¬‹u}o¨ÝD¢Ø›€Qž•µs}µ²4f0ŸxB©ì}3P>¤²Ç ñÊŽù˜?ŸÒ’-R9%1´ˆàÊ^O§áQE{Ì‹…#%ˆRÑïRÇ–ˆ¶7 ƒ‘ü8ëÛ¯z†öK¤–ÛìòBˆóL}ÓéïVÚâ4”‚è§‚°$;URø!¿ˆ&'ߨ¦‰L ¹m¼©ÇáÓó¡î¢.Fóq÷Ç^{R¢dº‰q’0çoóïR¬cî€y-õ¤ ÀÉV^N[9ÿëÕ„@çtŠÏ è¤þŸ­0©™HópC<ÒAFN×a&pG9ô4õXÅÃ]€?6ÅõíõÿëTÑ,rvÎàß.óªS¾àn9åx­JÑÆÅ|U²@cósW#ýÚæ@ÝHVé^gÍc–8Ú:T²¶Ë¸þTô‰CÊŽ@?4I¶\uÈûÀ Ò3m‹‚«žœòió9Š Iàr)¯2|¸ã#u¦mW‘ócïdˆàâQ‘ëCov‘• `:š‰ZBˆ®Ë“Ô_Z²' $óêhiÖ_eìAëP$Š“7›¶ãQË,RD„F7Ó§áV¡”/ÊUñŒœÓD¥áÁNAÇJRå3ò’£§|ÓImÛÛ!½œtíJ$Pœœz:ÔrgR“'¨éSG»Ì /®jG œ†>õ „d)òci5UU¼ÕÉÀÀ^y©Ý3»8éÜÔÛÆcUE ŠwËå~ìät)»™eVrY‡@Í[È' ¹àö=ª¼»\€¼gû¸¥k>‡\†Ú;yôë¯2d•ä*cÈç#Õ+-&÷Qð‡¥Ó¼öw^xF}¡¾cÆ}k@hzÍçŠnµ Û{x­î­¾Îʳ’ÊáɤѴÿi–_ØË ‰#½/÷Ÿîã$Õ÷Òõ%ñ¼:£ÁæZGiäÜ719Æ{ÖøSW¸Ñ5 w„Ap÷ÿm¶%ÁØã¡®šÊëV–$›[·¶Ó¬¡R&̼Ì}f±ü  ÇoªjW©0žÊ B>`œ± ÏÖ»\$•ÆsÆGQ\¶«¦jø¯NÖ µ70C#¤lÆsÎëëTu ÞëƒY¼˜-½ÍÚ"[ÄÇ;B~b;’;t«zLþ!™m ¹Ò£´XJùÓ³+o®Ð=J˃OÕc—ÄìÚ]Îu|€2zŽ~oqT§Ó56ðÞ…fº|Æ[;…yè ÷÷¨u·ßx»Q›K¶™“Éóy2*ç#wqŸ§¥vžºŠm V+gµŽÕÌ&&9åzò:ÔúœÒÛY]ÜEÜJ) Œî9ÀýkŒÐáÔ­YÞm.å¯ïœ‰î&L$h}9èWÑb¾Òc:TúÚ®CäÌÊ<²y$Ö¦¢—?ð™é3½œ²Åk—4±DB#{sC[ÜèÞ4¸Õ$·¸–Âò0» RZ2Æ@úTz_ÚôÛ½gÄ gq$s:¬váq#˜ŽÝk¯HMìpÝ•h™°Å\`¯ƒTµ»ö±Òæ’(åšuL*¢–,OLã ®r×Âö²è 4Ò^µÅÌe§]ì¿1êJ÷þµ•£ÜÝÛøOQÒîínÁTqlßgb ŒtãŸçN¹W—Ã~…m® Á:´«ä±Úçµ^´¾ŸBñ&®×—ÃzVH¥Š2Ü ñíéøUÏC(ÑïažÞxY§iš›AcÕ†(í,¹ SÒ¸+ 2Uñ„ÚP`ÚkJ/ö¯Nø_ûë•WO°éºÞ©o«é“OçÜ4‘Hˆ[p<…ëïRë{íNƒpö†ÖÞ9ÉòTnò—#¸í[k®[Kâ(-6Ü«ÍtgRÉ=8­†0ÚÄ)ÈÜp õõ®cR+eã›K˰bƒìÛ|âÖlž¦™k¢6´úíØ„¥­à F aœ{gúÑà˜&ºyoo/kÙQXœñÔÿ!øWckˆÊ“ϯsž™úW-Âhþ8¼“RcSÂN8#óÍsʯu¤ëonYÿÒÄŒ´y<ÿ*ètit+NÎkAw=Òò »$cÙããU´K›eÔ¼BÆX¶´ŒT–w^G¯Ö±Ì·ÃÔÌQ ¹û¹äò¥h”·1Òü¯/i‡ðÒ«Úº­¿Š=„1lé“Ȥ¼{i< •23ÆP23“þM]³‘bñ†ëÝ =¢ý+÷Gÿ^²%„¼A,e °a·#‚Ùíï×ó©ØAlÞ–0¡‰™é]j^Ãq$ñÃp’\ÆNøÀäTbÖ'WRcÉܤqøÖ³Å/$v‹ £fO~1zÎ[h& šeI$Œ±F#‘בUäyÛFŽWò ÚpìϽLmm£]F19Ÿ÷eÛ ƒØñÅT†Ù#ðä—‘FDØÚÒsÀ'ʯZÚZ§Ø®…üyP¤q[Øà×@f.â$(GV9þ·ƒ¬•ÆžY¾a(ËFýz©?—mws,è·6’OÌÑýøÈ=+­"ŠJŽq”sÂ×7âHs¼››æ.¸"¨Ë Óõk„·Ûlg<ã­K½¼žkÃ&/CîgæÈ=+¥°intˆd’æ=Ç=Ï®*ÓHð{F8ÍHÛV"6°]ß3sšª²rLQ–êxíïJ®ØÌŠîžV'å<÷üªÐ„lxFH'üúÐ$H¢d2õÿ=h’VFÜvg§ùâ¨4.ÌþSíW,ÌÈ:}(rªådˆHÃß0í^Äåc·fc´rzÔk)|F@╤,ŽèXíàåOP¢MÞQ;xËS¢ ìí#;ˆ yâ›;±P[)ãå÷¥” ʨlpGØØÊ…ÉéN ¡¼Ây|u8ÍG1à) “ÔƒÍAÇöl($’HSRÚhTçkð=ª¼°y¥£™Ãgžjt±pÐdžØéA8Q!¶g*G~ôìß&w?¡éRýÕ!ão”ñŽsLet“iÌŠéIÈ#œd»„詵—’Fyô± v‘²sס©JÉ4‘•Xc­5¤•£ •ù-ži¢2DAX‘’H5bŽåùÃ|¤þ>Õ*ìH·ªÀp_Æ™23¹v‚¾”d"Ãܑ֦Xšc䱤”¶AÛÐcœÓ݆ ¢¡žÞÚæ‚æ4–6ꎎØ5vvÚm¯“inÁ÷ŠF Ê™qu»†Ò!ÁÜ/\Ÿ\Ô¡ŸyÜß&2×­-½Í½Æã+2ppsNmpœ±'ãüÿ:mÕœWv†ÚñhÝpñ²ä5Gœ6¶ñÚ["G ¢5àb¬Ã…8 Ø75ðéäŒÔ+,‘€Þ{ú þ’biäÜHÆÐ9CånMÊÄw4Ð±Í ä¨@rsÖ±n|'£Ý_Éw-³_ ì%+¿ê­Èmí­-– xÄQÚª‚¢6²î-êyúRH@-N=GLš‡h(S(~f=©".Ý€ÞŸ¥HªÇ 2œräþ5£)f^œtÍX•¶… (©l~URk?‘“Í8Ýœ1×ý*GÁ€Tp9ǵác2|ê28ôõ¨QáÈ(@æãŒqR)‹rR~fÎwqGÉ(9“Ÿaõ¨çŒ\Äɽ‘@ ààŒœëšÌд»M Yv¼“Nüy“¾Nlþ5¥æ,’'žþô¥„¤€Ì@Ç_­e¥Œ/«. ûå!JF¹ÂÆOß8Åhcå;ŽIÎA<}iÒÌв®ÂF7{Öv¡×¶qÚGu-¡Ü¥Gäuà{Q§Úŧ[Gn„MÂBÇ-#rO¹þuyUTÆ:H9ö¡âI\<ðFÀ’`óéQ%œÅ@¤r¡p§4‹§[ÂÇQ3Œ‘÷ΡK V¶ÚÂ$8Ø?oömˆ·Š7·…×?ºž=©&Ó¬¡O3ìp–_•UÇš«•¬ ìl!‰\žBH=øT­¦éÿdE¿–rB˜—~•JþÆÊâ4ˆY#G ;T¯žÞÔ“i–óÙ­·‘ÅÉT •[û6Ê}‘-•±XA]Æ>zöüé¶öQŪÞ_nPò ¡Q1òúû“V|Õ Á†r1Œç?…Sþ˳kļž’CŽGUàb¡“LÒãWxíAG8u yúÓçÓt÷Óc…­@…+'#=yê*Ó,á´6ÂR`º†Æ~§½,vvöóA%cèûÎUºôÍÚFŸ`ë$6ê&aÌNT{dÓÌCË€@àðx$òj "Îíãk‚Ù_¹‡#ßðªÇHÓ’äù們ò±™8c×¥kF¡0Ê;1µz`}k>þÆ=JHÖUs³¦×ÀϯåUáÒ`û[\³ÈÒd–Èú_¥=|;r»dò‹îò·á3We—Ë·UÝ·f Ïà?OV–6Vvàci=½¥Jc®ö”瞸íÓùT{Q`22ªrW¯4Ð7FdV, õÏô§ƒµ|ÕÝ>÷Ì{g¥;Î…¢UšF?>áë€sÛò©KâEi+†'§JB+c¨\ñ¯Z¨m sºE%½xçõ¯TÒD­¤¤·×jî"FË;sÀ#qX:=þ¥â™.®íîËNŠFŽßdAÈêI=^³ÕeÓ¢– vh̾q[sg2¦ÈQ“žµfOh‰h—¢þ$·y<¼±#æˆ= Fž4ðú©—ûV¥ö´äé×­I}âmÎi"ºÔà󣕨TßÛD“[…½ˆ½ÂˆûëëYúŸ‹ô‹.+˜¦Ã$Â"äÏ<öÅO6¹¥Z,bkøãÜ›”F8ú~4O¯hÖ_º¼Ô!IZ0ÛY†p{Óõk¥éz„Pù¬‘4ŠàñšÅÐõWPußÚ­nì¦íRhi uõâ¶½¥Kyöt½„Ê€ñ»w¯±ÅCeªÅÖ£k)f`’ÃÂ7'ïÿ꥗\Ò㵎GÔ X¥æ2dÀ§­[‡UÒîtó}Ü/mÊÒ¹5kšsÚ´ñÞÂÖñŽÁ‡Ê} \±¼µ¿‰ç³•$ŒœVÝ“éíP^¤ÑÛÌöì‚tRSxÊç9¬¯ êwº÷†Ž¡p`Idܱª)Âà‘ÎO=*¶­‹).u;«x[Ïx‚P;žMj^êÍ¢Is¥ÞÙy‹…I%—ä<‚A©ÓPÓÚ _[±‡á–A„=9ô¤žŸÑ¡¾„Ìø©dƒÓ´“]éñÈñ\ÝÛ£±‘œ“ÐcÞ£]BÊh®Úò’(ËmóFÿkž9ªÑøŠÒôûMVêÜ]Þ!lÂÀ¢Œg9=½+E5 -’â;èCìæ7Ò®ud.§ 3Çj—,Ár0¤cÓÞ ,ˆ»œW¨øÞ+[«©lá†xm%Ù!y»žå¾*Ô^.ûf½i¦‹¹.ša¸0Ä_  ýsÎx®WÄÚÄWvš6«n.¡ŒÞm` žx¥t:‰ìõG¹‹Ë¸†ktÞѼd;/\ßÿ¯T´mkHÒü?%ÔÉ™±çä³1=¨uÛ_éÚ¥¨V×pÛ4€9(ÃŽ#ðªÞñm¤Z~›itÒ´Ž¡D’!([ÓwsÒºÖ‘•Ô£¹ù@éœ÷¬Tñ:?‹[Kû4žLHá'y=~˜=j{Ÿé±É>LÒEÉ$Ñ!(èHü*úJ—¬ÐÈ6J›£“9í\¶·© /iæ{©M³Äí$ eK €sÅmÛx‹MÔ-î.bœàÿXm1þéRézÖ{sµ¼‡s.õYP¯˜¿ÞÆ ¦þ$´:¡‚¤ Ò˜UÄgfüýÜãÿ –çÄuÁ[‹¼º…$ ÿxøÖ‹ÉªH…Jœ7¯¿þªÂÕ|S›­A`ùÏ×5B]}´¿KÍû}‹ìûÂH8RN@ÀÕûýFÆãD–êÛTKe”ìŽaü©U‹fÏO³´†æõe•âV,Fw®>÷ºSÒF–/µ++BB˜Š±;=j jÎÝöOt‘;Œ²9ÉÎ)!Õ,çVš;˜$‡~L›ðzô©aÖôù–Úò&“Ë.¨8õ¨áÖ,/í–ò6yðO¨¬­/Ä=QµÔ¯cû<,¢"à(ð®†KË1 Ì÷ örwà®=LVMö¨æÆþ}:ê3å)(àïJEÖþÙ£Ú-Íäm{(·¢ØÚ]º=Ôà+•à1œö®LöÎR‡Ææ*?Ïó¦À‚Xb²ùdã#·ñÒªËþŠ|Å çï“qõ¥R‰I½N äýãϧÿª¡ººµKcpn|¥°AÆ=?¯=ÝÌÖ°ÝiF2îÉ@Gó´étÙ­$ÛÙ #=iÓÛj£Å:ôúk›uâ0!Ý$`Œ†#×=qYWžÔ¤V»3ùwZº\ùrR5ÎK{œô§ßiÓCâ±™9k·ìÿ»ûØÆHô¢ Ö×Å÷JÚl÷Ú\hbH÷Þþ”[h:ŽÿÔæÒk¯²ùÂxàŒeùéÏZ‚-#V>KŸÌ‹W r™Ïñ«W:t‰âMFKýòúôâ±ùÜ|šµ¦~ ؤÖbŽÃËl!(§¯SÔ™®³Zšâ y­-ÄòD2°žwûc½p¿Øó\ø’ÚãA±»ÓÖX¤ûhxÌQ‚WƒÁ9ô«ZÚ Ó-´ûÍqsb²¸dù@ÁåñíXÖºmõ†ƒqs¦j[Û,ÑÏA–D,Ù €AÆ*ÍÆŸÆŠ-ô™á¶Kÿ8ŵ¤(ž­×=ª ,õƒQž :á¢W[¿#Êeó¢Ý¯5w]Ž[ø,õ Mò;tºI.¤Òáq»ž+FÂöÓA²’î=+PŠÒâuV2n23÷ÙIàgó®ºñ°:,›YÑ€-ôÇõ®'Âw¯¡h/¥_Y^-ÜLûB@Î$çå cõªZ–ñ^òwxPÀÙ!¿ jÛêš[èzÌ}Ìé ˜µš„g?ÏJ¹¯¦­¬i–×ãK‘Òé%KYç‘qó^Þ™­_Í%ÚÓ¡E&Ieˆ#1#…\v÷«¾&ÓfÔô‹ËH‚¬’!ÚAÀÏa\¬‚{ßG¡­Êê$,U\0ù‹cn8õ«0A-¯lËÃ;Co§ w›Ém¥€éœU¯«ÚêÇ$BÍvò)’2¹SÐò*î¿¥O@¼µÉÈBÊͽœ¯ë\šf¶Ö–Ò™EýÃf\¶2»A>Ïã[ž ´6cÃÖ(®ëo:3lRÛTpOG2CãÝNáÈZÛbɰ€p@5ƒk ÊxfÂá-åYji¢Øs·Œ~­tzޝk¨iwóZÙ>Ƴd72DT–=qÍb]¼Má¿ ÂU·E:™T•©"½5a†1Ó=që\“:ÚüBÔ’]ÑýªÕRÚNæÀγô[‹{ ß麃˜®Ðºù.eÝÓ½t>¶–ËÂöPÜ4‹(ˆÏQ“œsYš±†ÓÇZL·'d +»($ýUŸÉ·»ñ³mj·&†5 ”™¸ûëTtëØÛÅ:-ÛÎ%S#M¨‡ zdRAplÓ&Yí.nðú|Ø/稾´Í/û.ï¬uÖ¹ŽàNÌÑp%¦ã¯ô®öÖK¶1Û´(!QùdèJæuƒã]iäAGË7Ý{úÔ3=¼Ÿ¥utxŶFæ9¬[smÿ.¬Dý¤yi»ž«ÐT÷E»ŽêÆê8Bco»$xéÏ~+¬Ñ¤ûn…c*Bö10;XÊÂ|ocç@‘ƒ$IÑŽN:þ¶„kZä"}…mˆ“oÜßÓ¶sU¡µÀ&âÒk‘4Šƒp]Üó×¥XÖ^Ú iæÐ'ž1Áî8çÿ¯RiPZK¯ëGRØÌ¨¿¨äóYV…môˆ’x^Q5Þm±Tî}¹«v¬VóÄ‹,±4†Üÿ«)8=*¼ö–cÁ¶“Äo€Bƒæ-»óéZvq²øËk€®,rùîØϽbÀˆ||Äò·ÀäU™aC©èžli±£ÁÊŒ0ÅM©)ðö·,ÐÄ’E{nR=£#yãùÿ:ìt9,´‹{d –<Î:·R:åµróxžÞÒY£Š$˜¼Ä sÛ8ª7– >Ku$˜‰Ãˆñ… Aã®9ôöªrKiz„rÛˆ®ÁRËØõó©µ’/ØÉ¬mæ&â¹ÈëN’Ùo¼Nb}áZä3“TÞ#¡^ÎÒ9–¶ÄwŸ”dtnñÄ¢ÁL4þH&‹Ó©5D»ÍቌXÅ0ÛÎp=?Z»|æ-.Ö‰2ÏÉäñÆjÖ™k5¥ä±MuׄJO¯¿Jؘ]"‚2Íü±Š¥’9¦sž9ÿëVN‚›´ûÂÜâAê}©²ÛE.·|¯#Ƕ WË8ÉÚ*·Ú&>Þ&‘]eÛ•?x{ÓïZh§>y”Û²6#c`r@ïõ®–ÕÚK;r®J¹ÀëRɽ+Ÿ˜7*}{f¦‰ž®W*è=G¨Ëpå¼²!=ÎÏåNŽYŒ™’¼zõ¨3<Ñ<Œ…ààžøÇh¹‰pH¯pr3úSXMÊÁX6¯_|±*Å\cýÓœœÔ"³ä6ìq—Æzý+ÕA$Áú~5™i«ÚßêZ…ŒQɶ%UÌ€c$g#šÓˆ¬7PAÏéR)¢'8攪òŽœg½SM°‡U7âÚ/µ:üòã jþC«2¶}Ȭ¯íë®É¤y„]¬aÊOñöªz¦¿e¤kö2Ãs$×+û‘gqG_zv™¬ÚjÒÝA›ݹıH 2ƒÐý+ZÝ Ï¸ànã“Xñx‚ÓûFæÒÒ ‹¹!âSePúHö©tÛè5X¦šÍ¥")Lo¨P©È ýEZh|Ùˆ•ÀŸëPI³VÂ! ‘Éÿ=*Hö‰vÆ2Á€ª¯­ZjϤÄo#„HWn†{©©'¶ŠxåUvŽU* =Ž*-KU´Ó®`ŠágyîTíXb.xÆxZσÆ:DчCta3|Æ·`º`œ`sŠe¿‰ôCU±HÆVÂZ6]øþéÇ=*æ‘­Øêâf¶—t¶çÄT«!ô ý)-üEa,7~l‘Ánû¥“ :Ž{æ›7ˆtõÓ!Õä‘ÖűµÄl}z€8«zÝ…®•ý¤ffµ²"ëÐñÍj6šU’ß\\ùpIƒûÅ!ŽìqŽ¿…kJD›`A8ôªºN‘a¤Ã?Ù`1´­¹Ù‰bÇžçñ©NEǘ§Ø$mû­Ö®Hÿ»à/yâ o0¡•ó‘Ðb¡˜V*Ýn=*E@¦A’è*9Ã*îžßQQ†CÒO¯­*¡U18 ‡îqDQù\+R2 vúR‰2è¤ä“œã­>ü@(\cw|ÔbÂŒcž~•6Ù±òáx=†)ÎCF ’;úÔiÈ$¼gçdRBŒcƒÇZŠQ½ÕBñêÝ FöâL ;žÏ¥9bDEEêsÞ ”"Ê<)$s×Ú¤•U]vU— çµ6EX‘N6!ƒØÓ¼˜Ø€ÛJôé¥#B ¸ ”ÁãÎ?ýtØâê̸ì ã‘M¸‚6*ò JxVôÒ£’™vñŸP}iŽ"”e×j§ÝnÛ½)Þ\%Gœ¢@A ¤sùSJ(Úr¶j ƨ†(²Àlû¹¨ÍšÉ4’ˆ#ÝÂàþtyVÿhÞÖé$£€í€Ê=*Ӷ쪀Ä.·òȪrªù ÏmîìV\•?ãLm>’v¶‰gqónŒÃ¥2="ÐÈ嬡ÚyÚpqéQI¥Xìí\ç(úcÔÔö¾Z´‘„ã3qÁôü`êšó_†öV¶’Ò$òÂH>òó’}ëgû6Á¬ž´ìÄgnÞà* kK{Q’¹ÉÏ™§µ”ö^Ó¼EíìïŠk¨žáˆtã#ÕÕhVñY­ÍÕÃDú¤í-¼2JxSÑ@>ØLñ×Ö¢ö¡g¥jQ™df¢–âC v…¯Íß¿5nEM7Åú„‘ßHˆºFñ4‡Í)óu÷õÅOá‹ûÉüH-fžv·{%¸sÌÛ±»ßJí®-âšán,j@~àN?!\—€ ŠóÃ7ÐÏÉ^Éà ÷ÔÏ ÿˆ­'vZS2‡Èùä<_`xú×:4»«o¶ø—JË\C}:Íxš ç?ˆ­]C¨xGXº•qÓO")‚E"ªËðŽÝ*a@N?Û‹®Û^øRÎm#æ¹Òo°mœõ‰ËTþU'Ž.¦“͆æÚé!´hÒÜùGc‚Í»§Nãë^‘c,WP[˹ԘÑNáŸ\ò*à_)de>ö{šoÈÈ70ñÓ§¥?c|±³œsì*)dÙ…FÈçïW §ëúM…Ö¿¨‹k¨dŠAö‘!ݹ²@ 3Çÿ^º=#\mBymžÒ[k…‰eË•!Î0A>”Ïk’èºÅÌp<’ ÂÐSí\Š/d¹ðŽ“}<ÛºÜF¬ ÀpFIA÷®žËÅÖZµùÓ…µÌ2ˆÄ‰ç¦ÒËê*)¼a§F»ÌWÏ’nB~ì6q×?¯JÞòÔF_p*S!â¹(®µ¹f×&[Iš@™²¿ÈG`«ëÔæ®ÛkƒJÐtÿ¶Ù]%̹_+&Y ’ŸãN²ñf“t.ŒrÌ‹l7Jó!P‡=½Ogâ‹»Õ³a^*ÜRÛ\Eô&FS¶Lð}qþ{T­éé*ÏwHˆI¤åE7ûWO6ð^Cä4°#éšrkV7#-ÜM 3“î‚:ûT6z¥Ô² kÈfŸ¦7Óå¬Oøš;ˆï†±{—í DœqÒ¥×uk­7TÒ#·š?³\K†rH¿jÕ»Õí£M4h_’>Ò~‚¦[¨íÈWš4ßýæŸjŽ]FËÉ3}ªƒ8yŒéšÉÖ5KËK(§Óš IÛÁ<÷§ÛjÒxš[Imf!ݵFYXãƒîNiX’{‘ÅRÓ¥¼‡Æß`’öIàks.×P0sÓŠß™Ö)¹a“÷FÌÔfWP•;œº3Á§£""í ŒrOQš®dPÍ $®qõæ’k‚’G*!“#ÐÒ¬‰4·$‘è@õ÷튮÷q¬Ž¯ªpÙ<æ–YÕpE8;xÇzœ,>dx ÊSb¸óGÝ•9ÀëÆqøÔ“Ïä íséUŒ¥›v@*0Wƒ×Ö„¸ÜÅÁpv²ç¡¨ždîmÉÐ9íU§’8¢/ËP\¶iÐ8šÕÕ¤}ìŽãô¦#„™‘n'kÁÿõRŽIØÆ2p #ŒR¼Å¶¢àsHeUr ™ÿÞ‰e’aè*åEs lX.rOoþµ&v¹Ébz·Ò­Í$ÛUB ÈW‘Š„Æ ˆñ¼gærqíý(»O³¡AKc=sš|S¬V¬¡vô z}(Fýâî ¹‘·ê(Y•nL/ó)\t=2©fýÛ(Á@¼nßJ˜‘°’ÌÊÇ¿ù7›f‘†UÔ³¤FRK®O¦?ƽ èšTŒí&jdfÞï䌖KU𾟨Z´P´•Ýdy#‰~rFàG#Ú“Mð«Ì÷ ÃK”ÿ¸TB3Ÿº¯­_>Ò£·liÖ€•àD>eÎqÓ¥W¿ðò\X%¥­ÃXÙœ‰¡‰«©ê£Ó𩯴+;ã§,ˆvrEÇ99ì8þUoRÓm¯í›tž0så²ädTÙZÞZˆbšØ*…ÔÅTŸÃZ i“L¶]£ Ä·éM¹ðþ•6•5¥­½¼QMÔˆrGséšÐŽ;{X ¶‰ˆTj&9 UKßè÷7qÜËhž{¬éÍõÇZm{Õ^Î-øEÛƒ֫§†ôa 1¥œKäHdˆ.p=•?þ}KYa{Ýf“ÍdýáÐõàóR¯…4E†hRÆK€<Õ üØèJ¯oá] 5#µ‹{Ãå9$’Töæ‹/ é:mÄS[Ú*\D6$›‰;Oó­[ˆc{vI7m‘H!X޹¬í3DÓ´«k‹k(v$¿}D¬~§¯JhÖ7Ζ!eW,Íc´ý ­KÃJŽXí!eGmÌ­#8ÉÎO$ÒÁ4Ù¬’ÔGı1]ÄžrGòª‡ÃZ[iéþL«fz ™ÿÇ8ö«Zmµå˜µºA%ºù’r:sœç=é÷šu¾©bm¯#ó!È;2{Ž”G¥Û\êJ¤\DD†8ÛéŠÔ">˜®0FÔ“•ÁéÅ(Rcq’: †^$!‡ÝmÁzþ5åí2øœÜé÷Á=Ê6Ï)(_‡ÈÎk_Á±^Zk—6–ÓËw£Ç*ó¡û šÖñ¼ÏáA ŒÊ ^v‚ þF¹¿jßøCFŠæù."Þ¦6í_˜ý9ÅYºd—â Ôô«ò±ÝÆeY"¼ÄôÇ­_ðö‹¯ÿaجZ§Ø¶'0Éc’I}ˆâys_t´¸¹Ú;FŠFnî*ƒNóüDÕC¬rH5—lökºÕž¹sqle˜‘‰,‘žƒlRË=¾Ÿ­èRÉ ÐikˆD§;I' }3Á©–H¯|IâI,Ý$ì€Üƒ œÿ#X·ðé«: Rä##–äúVÃ\Ãÿ ¥ãj—²[Å%ºiUð¬˜õô<þµWYNÂ>^ž­–øyNKú•öâ´.ÔAã»5²EI ƒ´ !±Ò¡Ð.tIü'=®ªWÏŠRÒFççwÝÁäžÕ¯Þ¯OkiÖ¡P .6¹á¿™?zkµœñŒE A0=†qYˆwKsm QlVLÜsZÈkx¢ÒüLY¬ [÷UpyÇò«úÍ•®Ÿàý"khRv‹ír"œºã8'ëšÓñ%¼k~ŸOLgÆSºpN}GøÖN‘§é÷Zˆf»Š"Ë<›deåp20~µKmÂÚøY.>ù‘ÊîôÈÇ銚 xµ-GY‹P¾ò%óŠê¤ì0O#¥Isicq¨ørÙî!fhüÙƒ"ƒõ-¶‹¦Ë®øŽa¶ˆ“²½qõ­Ÿ.ïi¯#åT¹RÀ|¼‘Ç¥l‡RÒ:¸L¶r$ôÉü?¥s¾/™§ð¼äÆïNÝpßýzÛº@<5) -[Ÿ–©x: þ´mÊ[9òk+JF“ÆÓ~POÒ®ò¾"oaÒÃ’~µ¯$›•Ù%%YˆÆxüê8˜Ê>O‘þêdäTQ¶ÖeL—-‡ü…A:»@ÂVÁ`B¨Ï'>´Èf+~켟óßùÔ®E¬p‡$´­€T~xª·°É9‘á°„qõÎ?JªVFʪ’8‚ ÿõš‚VhÖHÎñ“Çæ•E!1R’,¨$Ž™ëÖž§dr>bN[‘íQ>Éw8+€8<ÿõÿúõ ±Âãi?6y'Ö–P~ÈɸŸ–ɨ‡™pZ$Ì„võö&“'Œ)= =zþ B Þ¹-’_8Ï×­IqnH”7ÌA¥¹"(‘žW¸ôúÕ<Ë#Xû“ŒŒæ•Ùe)#n…víç¿sHضMÛSvOç¥OjŠ}í½G°=jæ~Ð…‰Ë $•5“d¤mÁ\mÿäÒNDÁdd;XñÇTQc1yä‘’9äóýjDœ<“:ýëÁõõéQÁ DÃa-ƒœÃÖ¦‘šIšÁ¹ÎBç¿…"¦DcÓÌ?CL‘|³ 7tùpJ°JܹãÔZé[Å•¾‰a­K»Ø]ΡU;ÑI çûb¨Üx¿\µ]Væ;[3oat"u,Û˜Nµ{þ½b͵x.m-¼ûKAv›íÚ{÷¦Áâ­b4翵¶úœ$Àbf;_³ëM³ñÅôÖš%ËÛEÿ†Ôòá°üªüO«Zj¾"¼¼t–ÚŬC#ð }Iæµl|E«\ýµ.tÒ±ÇjfŽaÄ…»¡,?QéV|)}©k }{oV²¦è|¹ lä‚ֱƨCãIOÚeÓ¢û0¿6ŽDÄÙíÇJÓmPº»¸›LÓ–æÖÞä[¸‡fþ&ÐTPxÖI®céÒOl×ܺ,q¼ñŒgÞ» P6!@Æz× â"oøu\`M¼JFÚ8w5±¯ÛFþ И¯ÎÒÈ=ÀŒ¯5‘7.§eš]1’Ñ/>Å$‚`Hlöæ’÷Ä £ëZåÄ:d’Kn!9Ÿct`¸ÀÇ~óÅËd×´hâX•$I8w~BNséŠüjë¤_Ü>žåìÈܪß+©îÓéL“Æ—Š–‚]8[›’|£4Ê€Pzã‚r84˽dzÕ†Ÿ0¼6TV”„þ¿¬ý+Æ7çKÓÞþÕYo§òüðàù¸ÈÇùÅv:>¦÷ð]$¤qNñ#nÝ¿oý3Y2øœÇý§5­ƒ\A§¶ÙäÈäíñÞ³'ÔgñŠ´ûHÄÆÂ{O5|©Œd䟎ãÇÖ½ ¡ F÷äÒí(ÙÜqŽžµ»à ˜tÒ¨ÁýsƒŒŸzˆRw.Ò ÚsÉ©Ãï\>cFiÛ  '¦GJklo”*–æ ÀbqÃŒ°©#hfÎGQ²l ôÀëI"¦ÿŸiÚ?ˆÕi„P÷@ ãTp¬Q (¸SÉ€ãRÇH¥âŠ48#*¼Õf¶·•„ïóáȺÓUÜÌQ·.HÁÿ?Jt¶6§40–có1Œ?J!±‚ ZD¶‰f9>h@'Þ–K G -å¼2J§åy#Ž{Tw–ö74w1Å:Ò@¬-3ÃÒé¾ ºÔDð¼W å˜b‹nÐçÚ®Á¤Øn º}ªîrÄy`çÐô«WZ}•á qco0L¬{ã ÌqI&—ep)ì­ž4áâ/°íL]7OW†á4ûQ2ÿ’7ŒtÁíÿê¥MM{é/>Åkö¥|—òÁ9ãõ÷ªvÚ-ãkßÚ:Ôwkskݾ^{ŸS[SmÚ0X}çŠå[Âw^+—V¹†ÖK9FÑ’XÇëþ5·q£XKgöV³móÄeFÑïŠ`³µK/°µ¼"ÜõEFÑÇ¥š~›¦•–4ŽM¸«¸è3ÐT3hzQ’I…ŒËaðœ1÷).´}>êâ+›«@òE€„žž˜æ¡½ðö‘©]µÌÖåúý}jy4].iàž{dgB2¡1é‚)ŸØzP{‹„ƒÎ‘Ä—õj[;;; soioåÁ»%I$ ýO<дÑ`:ܘ^;Ö­¤]jž{D)¥ùº®}‚[m5&Ýz‹rÈ ôä÷¦Xév–V³ZBeXóÄo) zcž)¶¾µÓ®ÚêÒ9wÆI™¾cÉù†yBîó^¹»ÔþÍRÛ5¿—„õéZö–¶z}—Ù­‘„( †äçü“RFDN…Éäõ>”ÓnP Œ˜Hϱª“B®ª磎žõÛ U‡Ü@G‚ù7’fòÑøHÛÓ©Ç"¢Š"$vŠ6x>ŸäT©i jŠò«eH=Gjdªë lƒ•ù”žNj1Gj¦5*0žœBÄ^@¡Ž@Á zœuþT›»Fð˜*ª1ƒÉ¢0²ˆ²Ä`óïŒúÐñL"HÆÑ•ù€9#ý©m-Ùž@>S÷ä÷ü³L¸ƒyAÎî/‘“Ò–D;‚ÈHgOaøT0Úæ]Ê…—®_zK¨[±bI^‡}j$ÃDÍ ŸNÕŽÒCÕ#kާ¥%ðÞTª³‚A zTðæ5XÎ;>ßέ:„P‘¸cèzóQF‹,ûË618ŽÔÇ2*fU;ÁáÈïŸéH­§nÖ@zÀôïô¦Å[¸ w2§€Õcˆæ ±‚•Ã`õ=¨˜d‘woâÀÀ©YQ g Àéß±ªè¦ãt¬¸a*ÒA$‘®èŽ@ÇÊx®Þ/Å 0XÙdÓmçó£¶eäÝHÕk¿¬öú¥«_Èþág‘¼±Á8Ü ZðÅבªÞÁ<—7WvBÔD±ž0;ýjM Âó½–—>§;;ÙÂR(ˆØŒpy=ªO‡æ)mûZ_³XÜ™ ŒF§iÎH'½\ŸÁ0My«Ë%ì¿fÔ€2Bª>VìAï‚)4ÿ\Ek<7ÕÅ̆#NêÆëâ=²k[FÑÿ±´+}5îÌë¸M¹ÏNj…6±5ý…ø·YâXäŠH÷®@ê9ô¬Äøz,â²}7RkkëmÀÎP07'+ŸÊ­·…emWN¼¹ÔSl’,žjdË¿;¹Ï°;U}/ÂsØu™fÓ"rÐÛl A8fê@ôª‹à{ƒ¦›_íHµ÷ÛCyÅé÷½jÝ·„îlµƒg¬Ï}e!’6eÊz‚? žÏN¿¹Ô#¾Õ.a–[U"`BKpX“É8ü«¼~úlÖ¦î ï¨ ÒÂ3“œu­+o É&§¬O{4r[ê1,lˆ`c©ª#Àâ? ¦á[¸¥­Áƽ éŽ? }LJõ½GAº¶¼Ô ’âáU*йÉ8êI©u öïM´¶+e$iIâ”À ŒΪÙxGP·Ô-'q<ÖmjXçsg'8ôÏ—q¢Üi¾ Ò‹™¦söCm¬AcÛŸÒ»#K:vƒo`N$Ž=¥»1îkøcRÓåÕ᳚٭u"Y·ç13 ëÆ}(±ðåÞâ=>ê„ÙÛÚ aæHwNIÀëÚ»$vbÌIäpÜsíJímüžÀuRIv¿˜cŽ9õ¤7â8V\ýïj"”Ȉ]9lcšÇñ1š?êQ]K ÅtØ@ÁPcx\·µð®¥«ê/ºbÅšL·98ì+fÇÅz=ýçØ-owÜÊ‚¤ÿtãšÓó]™1œ/cŸ­UÔ5Í3K–/¶ÞÅ HFÄs‚}þ•_Lñ&‘{s;Û_Ç#F¥˜1#hùíïUßÅ:-åÔVÖúŒrÍ,›TOÍõ§Oâ $Þ}…ïJ\¨<íÝÓnìcð©,uÝ:æIàŠâ9ZÌÃ?tÎxª7ºœ—z[Xk–ðFÓd¸c0éÒ¯]ëúm×—w{0ê­Ÿ”t䂦›V±…Óuå¾&¹ÜãæÉíëKý´·/kÔM$ygˆ8ܾ¹¥¶Ö¬/fh-¯`–qœ*H2q׊”;ÊCl`鯌ȣý¡cfóÇö˜U$•Þ2  óHu]9l «yrdÞ1ŸCúÓçÕôëyPMsm÷“{‘K5å´h³Éuq1à–ïÇzçüMâ «íäÓîad7"rÐEwo1òU:«üÙ«Q²ê Î>`N?*‰ïmceûD¨ƒÆÃÜu©á–ÔÈ®¦!ÑÃeE3}«Ë´Î…ÜP²óÓ°Í-Ã$Šß(Ü]¸â«³Ç$N&Ú›ˆ t§ÚH<†!ÕÓœc×ü3\÷е{MûE¸…ä+žFN1þy­´u¶Ó—8( +‡43'•¼•È;yþ!Þ«ÜË$·&(m)’OéTl¯"¹»º²´^K^X;ö£Hžùìæ—RŽ;yw•TFÏËØ÷jäò€„1Xòzc9«Q>Æ 4˜Á#8šŠFÈ9 gê1ÿ몂ßs;™ Vê{…J’ºÈÑ®Ö Íž¾ÿʪ5¹ÿ^H9;—#$œzÓ§òÕTÈã'¸ãug[k+.»ýŽÐ²…ŒÈdg ‘×§ù5£û¸åU;ˆrŽÆ«Í1‰'•S{ ÈEÆOãڨ躒k6jØc%ðP¶sŠšïQ’ VÞ {))—s?LU[Mf-Iu/.ÚhþÌ~eeÏñeÀ9ë¥1&‘1…g%xãñŸÎ¤ùfQ&ÖYÚ>n£×¿­Kæ"Ĥ*«““žOjŠY‘“nìóÊŽ?ýu™ü2Op‘ÝÊÊÀŒ}*ÜJ^2Qž„qšwy›|°p^¿J™³)m¿)^3鎕˜¢°-»8ݸã Çó© –G“nÅtQÈUÁ·4ÉœµØ8ùñ“ÛëVAXãÎAWå²?Ï—Ac‘cxÆÜŽ¿äS£`_¯ãPÏ,“ã7DÇZ±˜Þ3¹3‘À<Å5v³€\U#Ûüiî·ˆåat*;“ß½u¶ž!žïÆÏg̶¦ËÍK F¸ ò:bº¥e 7)$ðp8â¥s·ŽÇÇå ªå”¢õéžÝi†,äÝx¨à $l1µTéJ˜o3b99'“JŽHEØ>nI<ÔžG ¤‡œž)¯4ºž§ÿ¯QÅC²°fþ.Üv§<ãÂÀqÏùúÕ>"ŽWd'iÀï@ˆÛJ°Ç#°¥1²¶@<çÓñ/–UÕƒ0}¼úcÖ¢?'V%sžG½$"T,Brp1ɧÎq±òÊÌpB÷ŠªªNœç¯ùÍGÌ"¢ }àqÖœc ¬xs×Ú•ƒÉ`:w¤ Q¹=F* »9Œ©aÈ¥v]¸†^1×Þ•‰Ìad#œóëJ`ŽR2¿*ƒÎìSÄJê>VcRŸá#ÅBbRÌß!Átæ«IDÏ™A€ô”¨Â^W$€ÈãŠÆñľԄ̱´–?x‘Œø×4–Çàôh$ˆÊ¹ù³æg•^ºû8ñ¯† ͹‚8ùx×£$A@;°=@®ÇëoöÝ¥Ù³íÃ{?o}ªBÚ ßˆ2X„+«5Ó¯Ý ƒ€ÕGÁöðM¡jÒ[ÃÞ ‰|¦ÀÜ>_—·ZÉÒŽ‰uáØ­õ+ûµš%­C ÆLñ´c95¯ª¥×‡üHeÓ¡f:Å¿”<¤¼N??ήYŧêÞ³ŒÆ•ÝŽ{r_ ˜[û~ H¨¹óÜÊ$î¸Ç~¢¹È±øsD79û8Ôó7Lÿ.µÒ<–sxÿTÍÂyGM*dB2:gêqQhm'XÒ,gH/-åö ÈøerzW ‡ò¥) N§Œ’kƒñŽt_ÙëÉo¾)•­ç{#óíXš=•à»>¹· ¯*]H@é7müð+_ÃqÃyy⯢G¸óŒ{díÈ{W7$&O~ûçŽ-GË·r9ØzãÛŠÛñv™m¦h–ɧđï½Fã<œV—‚¥³˜\Ï4XÖCöÊ7Lz é÷7Éxb1’¤‚2k“Bº‡Äwµ¿ ñEn<”‘~SÓ$ÄþUyµÿ„«Oˆ–±ˆ #…G>Ÿ™…JtØ,?ẶCÅÃ/˜àòÙükÑÒ"’#k˜ñd–çO´ŠS3¹!Œ`ÎßÝlö¬;»½;Rñ3Å@b€:ÃÊ#mÏUMGL²‡ê@y—ŽÊÏ)l³Ø95¡ª´7¥¼[MÜâË›bØŽ>>ù>¿…cÏ$ó|<±•§”:]òýÜ÷õ­ ý8hZö’ÖLMÛyS«9màãŸÖ¦ð–“f÷úîUÃE3FŒŒAU9µ¼Òø4j(ey-nØ·Î~xò2ãýjÝõÓ\Úê:ý£ºD‹0‚OSÍlâµ4í2÷O¸°Ô£»…!}© óXùÛ¾½ë®1© °Ô»X~µÉx­.TÒ¢KÉ Žy¼²±¶ç¨÷æ«ÛÚÍ¥x¸iÑ]ÜIounÄï|²qœçðýj†–“ }fkë¹d¶’@ù™VÀ{Ûš’Kiåðšëböãí¨¾irçiù±·1åPD‡ZñB<-³Ë`®L»Êmyw–«a6£å‹w—2 œg•õÍ&‹q3k’Zï¹6æÜ¸Yß-Ÿ_lÕ )ÓÂòjV÷óE,R«|¤jØPÔ.õÍ šb©söˆ €F}ýj+:ÞÏÅ‘^9 ¸ãõ¬ëó%Þ¡<·³Ìà>zôëWïnnôn;k»ÉÚÊE$o# ã¿ç5£áÖ›ìî&,fÀl|«ÐJ±-Á·Žòm¹FNÞ„ãŸòk´›]¹Ž Ûu™šFåK(”vé5-Bí5kˆ..Ô >áòqKöyŸÅËÚvÄÁzjú÷ÌÖÜ){¸ØÆÍe‹­I--.>Ôf} Ö¼·ÐëVsÌ—"/»ÛéTãÖ.ḷ-r“4ω"UÊ '±©­á¹>,™Rs•@y\‚§ÕšœÐh´¡Y¢"”\ çÒ¦¸»½°†ÞêY’hå ®ú#Ɖ§„RJ™g ý+§²žâ{în­ÞÞà®æ‡vv{f­°t¥UºÔáß-ONqœÕ¿·ûTÖ\£\ªîhÃ|Ê|~5g ÊÙÇ$sL1ˆb嘩#=?Hп¨Úxv¡Â¨ r' 3øSZIM§äaÊ‘þ|ÐÆzðÙUXnþh¼°ÄHrHúôpÒ,¤¶mùºð9«13Ç`*°b“CÄäž1éNi )Û†*pÙ=­F©$±nbvmÎG©Õ$8ÎIÜ1PÜ+yX%~`OZV‘JsÀqÞ†€) K|çz÷¦Ì€z‘ÔÒ¢ Éu¸*〠ïSýñðKžsÒšŠˆÒí Ô :ˆ¶³.NpsOŒFbsȆ5n5 òF:F)|ÒFí§®? o˜«Æ#ÚšJ,Ê›ÀfäààTr(9ESÀÈ'ƒÍGo-‰dÞŸ…G$qÌŠ²B’ŒdPÃ>´Å°´Ë%´;Tdüƒi8ëQ-7£ý–Ü)(¹\tÅXŽîF”ÂS’ ÝÚ°¼Má›­nkûT1¥³ïØñÜÃמ•£¥¥­‘Hl­ãŽQµÄh\Oñ¦YYZYÍ'öu¥¼lOÌQçñ¦>—¤‹†ºûi9Ý!A¸Ÿ\ÔòÇóDæc .ú¡Æ8üê M½&¸µ†i—£È¹?¨/ô½6éÖk>fÛ÷öäŸjšóO´¾ÓÞkH¤v‘P1ïíPÙèz<ËoìÚÐIžÕ¾—a¦ÝÅ5µ‚¤¸+Q£¾=? ¿q0b©gã-è?‚èG{Åyo¾a Þ:0<Σ‘-µ¥¼©¸òÄbNy·Ò«]èš]õÛÍ4@Ü2áŒLP‘èpyüh¼Ð´‹Ûxm&·"+|ì…IUøçš‹TÐl®míàš' À„ cÜœòjkmK¶¿Køã‘/e˜ÈÄžgšÖ+pIÚ³5NÔn£¸¸ŽEž%^6*Àz* ÍN]KX¢Ã;îrîs×,ÙÉýj8¼=¦ÞEd».XÚ ò—Îq°úóÚ·žHI…‹• €ƒÛÖ²µÍ6ÓZš8.¡‘67™ˆ ¸>Øü*­†¡ÛÞIuI,»vLBÀä`îÿëÕi<£&è]Á,Çh9ôüÿ*šãÃZ\·‘΢æ'HÄ,R»”=ÿ:È×¼-ömiúE̦K‘+f@BŸzÛÒô;Hn ¼¸ûD³ÇÔò³ÛŽ3QA iðê·WPËw³nwT“€yç>ÇC³±Ò¦±†Y 31Ê9ÝÛO½:×GÓâÒ†Ša ˆçwV=sŸÌþ—á+N^]JblÅÒ|¨Þç­o ãu2år2=±šä¼[iu{¨ifÖ)äŽ)<Çž!¼Ž™î1WSJ‚ÒâKæ¹–k‰Æ%p¹Aß)ú~…i¤YKh·qo(bÉ1Žz ÕE𥸱[_¶Ü}„¾ãoÇ9Æìg·z$ ¨%å¬ï¢1ÔPÊcÇüñU®|1c&œl’RŽÌ&iÉË;úþµ¿‡R HÞÞ_Ê[ËØOˇ”[xN?³=¢ßÈlï1àüŒúT—¶¡iøìÀ$0„/çU¢ðûEoê$ý·;Ï•È<翦i’ø]›J¶€^þòÕÃÇ&Ñ€:ôªºÅ¹Ö'¶Ò¼©æž2¥îÙ@\wç¥nÏo¬A_”Ôt^(â™dŠàíóAV+œàŽsùVu§‡î ‰­ÿµ˜ià“åóc®3þÞ=óÍj÷‘y2¿˜¡–ŒzM¸ÒBkkqit# ƒ žoªǥÞ/öƒ,ñ»Rä8­2Méí,íÖê!;Á ޵9ÐîäÕgšK„HÌlP; ¬þ¿ˆ[Eöˆ?pû“yï“V›O»]e¯mî" *„}Ëœc·éúÕ1 Ï;ÞÅs$j× `‘†Î´ù4Û»¸ ´ºšmt-é×¥=t›¨µ «ŒÂÞ|D ËqØvúU6‹PÑt¸àGf2d–Ï8éÖº‡lcz)rlzõ5ɉ|ÆwŒ7Þ”B£pVùNr}=­Ý•B²ü¹+íMŽ&c¸tçsõ¦‹+uš[”Ž5™øg7biv €Àƒj¢H£(ê$^î*epÁHêÇ 9À§g|W 1ŠŒE'–ƒî“Œ·ô¨§¶–e*²CœàòsøÔ1Z­¼J£q îÿëUˆàe`Î«Ž  |£Ìǯoj¥åpÞfNAÅI °@F2H#$óì) ¹ c :ƒØTü|¤Å2t/ÈŽ3Ú£dÜ¡Iƒ“íR®í‹ˆÇ’½ê¼Èçg—Ôc9ëŠ-òëJÖä")NÄçò§HI‚xÆ8¨žT®W$󞸧y;X2È`†íøÔ啺ôˆP½»Š$ "ç‰êO95Jy’.w'%ØðA¹¦Éo%×Û-„ Û ¾`ÆïLÔwÚµ•µª1º…Dàl/ ùî*+}RÎx·YÞ[Ì!½ep@>þ• kR̉ý£gºL¨aÎ8õ©.om­DpÜÜÛÆíÐ;€qþFK¹fÖtém5U²%„‘pLƒmõúÖÄú¾kø  `Óežn'iÄqìÃoçY÷·.“u6yoçc #È ©ï“R@L6p›Éá{™# ø“†8äŒö¨îoÔé·sXKÒE “•ãœqU|;¨O¨øzÓT»Ç˜êÛ¶p  VÄqO›FË‚ ^‚¹ïëÓhÚk\ÙyS"««¶HŽ€ÖÒfM5˜•3±Î=M+È^áY”¨FAã$÷¨¯ ;çÖ0ß§ÆB$(sžWòëXj—iã+m*5‰­æÌ~»•F­t,Â&·;úch:åί{©-ÄQ¤6²y(Ñœï99äþ_¼’”+pH%NpA§˜ÉheSÂŽúU€ù ‘!ùˆó=BðÉ+cx ÉÎ3úÒ³"¦J•$(m'§¯ZŽBí$ù‚3¸‘‚ØÈÅO+ •°#s§?äTosæ^‚Œ Œýî;zþ4Ûx¼¡;ƒ™$sGËíA2E*î çÞ’GY7É6GZœ62î,NJ†k•·‚âCÊFXF‡—öý++FÕ×Y±”q4dHÑÄ޵`Ïö”Ž8 eUŽæƒŽ£ëV‚<’ÂGVÛ{SäX%ÕP—Iæ°ïu˜´-<ÎâvR•@úöæ®C2I¦ šAûÀ `1ùsëïI hQv¶Xg'8õ4ù–?µ¼†_›  ȦÛI3f@TG¿*qÛ¡úv¥¾]À +’Û²£§­P¾ÔaÓíäšXˆŠ ໲·õ¤†Hïc·¹:H”0 yüêqò¢7Èpy=NyÅ2òØ «uTSHê1ê)‘³‰vd ã8ǯô¨ÜùìÜP³|Ķx¨ã’q|ŠXä²ç€U{“¾ 2ì_$ cÈÀïEÒÈDL#xÜãqêÉéP]jÖâò;=åg”cnÞƒÜÔ€÷g ¶è~´Ám Ž­–nTéKM°Ã‚wÏ6dxå"FÊF1‘‘Í1ä”Z.wpB“‘Ÿþµ<4’;+c »$~YªÉÈp$JG™»“ŠFv;ŽHà‚{Ón¯-ãž#4¨ªü.{ô•[3yì³€ò(?0Y!8ÈÈ©¨À|ØŽx?׊‘ö­Ê±ß‡ù»œS·2£6Ò»xéÔБ˜1\”ê““Û4¿åGÂòw(Ï?J¸!&à‚0@äÿŸëY× 0¨Ê’>•7—¹6 eÇ#FhRÂçØmÁÇlzU¨íÑ×q'8Á=yô¯b.œzœŽ{Ó[vÓ‚ü©¦B-÷)$ž)#}ÀHÝÀÝjSœ†Æ8Æ:Qå(`Jž¹ÇQQÈ£ÍÆ3»±ç½=È÷ïŠp*S–^i—¥¼;¾Å^rFqõ¦ &EŽ\šF}²°hÎ^)’¹1„’þµ0«§ëN}±®òóùÐY\«ýzҾˑ»oåJ¡|²¿Î*$«©bFF §D©’ÊÙôç½9“8PŸüG½DWt™S€8ÙÍI¥ºxËÄÖéyÌ”ü ôúÖ]–™§?ÂÙîåHþÒI(à ÁÃzÕË9nüGá(u(š[l\ä¶Õã5¡{§Úéþ?Ð`‚R¨:pqüë2ËHÓ¥>3ymb&ßx‡õ+tôæ™g{¡!þϱmßtÈ ?N+SÅ:n‹káíu¬Š´òySHªr¨Å°1Ø“ÅS¾Óí/àƺ}cPK&k‡Ò(Ø’Þ½‡çÅy’Ù_ÛørÂG¹’)o®…¶ðNK¶? é#imÆÞéL·×/-¼5¨LeÍ ßÙày>fŒSß5ÒZè÷6–׉©ÈÐIÇ3î262ÏOþµq¶±ÝÙø,j¶úŒñ´WXXP€œžsë[··wÚž¾tëq/—ol–Dd±-“Øf¡¹¹ñ †‡]³3Eq¶cƒ/”r:ð®‡Ãé{¦M4Wr¾iHy#…'¿zÍñzíðeÂp H¸Àì\Vtqjî‘k%ûÏä ²:€§°ªº®¡s`.çû~ë¨g P Ñ¢g£uüsW'½¸²ñ$K}vËcqš›€Â693ÿëÕÕu³ÓíRYžkçyáw¤C ÀÉóZj"îâ+õ³©Dd*[¯p¦¥ñQA¾§½sVö·w>3žv$AŽávõýj=_XÔ,d›Ìš1M¶+q†%=IíU5ëÁ¯§Ý;Fr=*÷Úït7í×O’M…Ž$ õ óPÅ{¨­ÀíÝátÜ¡dÚØéôªcVÕ$²º~̱ÀáJà’~•ÑÃÛìcœ±ˆÈ¡ŠB:V>¼·6ÚŽŸ³‰äÜ€Žà÷=ÅL/i--ü•–(ðîêH,{øÓ4Û¿·yâXÂ^Dá]Td7=JÄR46/$2Äc··N=ë?TYWC²3üÅ‘„Ï#or{ÕËMRèj-o¨Æ¨D^`)Øc¿áP7ˆçeY„HÐïÁQ»v3×Ò·³•-Ê`8¹äõê7˜—{æàƒÔ{UœÉò…Ú¬ÀŽyÆ}Oõ©!P U‘[åç·O_åMWa!(€uûÔË"2ÀcƒÒ‘!áÑK¢ãwaš|H†ŒîÇs¢’ÕÖYeÎA;p§·ô©~ÔÈÇ*…3ÓÜW®¬ÌÁ¸FÀ#½JÒþè¶ yÇZ…ˬ%Øíàb fÜ ýÐ3‘ŒRbÜ7A×SâEA„ÜOÏ­.&ÎH§LÓ‚yk´î@ TeåQÃr0Fi“Ì\<^_w 72ì 2¤|Çõy.$Ë –ã­(“i#h#<œãËþ¡ŽâGÜ'iæN~`8¯{~`æ=§LEPO¡ù•!ã äžŸJq“íÊã)¦î‹åÂõ'>´ù…ùC)çÐSKHØÁ ŽqQÉ;Ú¤’=¦´¹u ¤›¥‘¹*û§ÚŸ¿Ìum€îŸJ<õÉP¼c‚?•ªˆÁÚTŸÒ¤ue#'æéœÐü€¬rH㊬«åoßÂÁ#¬É|9£ÜÜIs.›nÒI÷Ø ËQu¢éIm:Ù¼¥< ù·ãU/t[EåÍ•º^ʬžaã;¸äõ¬Ï x>ÛKÓ¡Q·¶{ˆÜ²Ê¬Hcœ‚AÈ­ÛÝ M¾Ô–òk8ÚuÆ$ÉÈÇ¥Eq¥i—w‹¨Ok›˜ÏÉ&㦠økHˆ\„²8¹_ß vË÷çŸZü3£Ë§%ƒÙj¸!'O¡ÎEOÿ¾ŒtÏìÑjÏ!݈ÜÞç9?sÚÏ…¦º×4³®4Ë PfvW ú£w­õðö—ka=œq8[¯õ®]‹¿Û®;SÂÚLš*ijM¢¾å]ä”obNE7‡ôÍ.  †ßåœrìX²údõ5œ< ¡²¼¹|…}þY™öƒžÃ4ôð⦢˜a†(匧n€ëu–WÇ £¿ã\´ÞÑ~Ç0ò¦;ÛxaùyÉǦqVOƒô»»¨eÓÊŒB+¹zá½itýKÐ.n^Ú979$9Ú§¨_AÅ]Ô´Ë]SK6Rï &ÝÞ_¨8ªú‡†,5F°ŽW–8ìò480!Q]øVØ]ÜÉiqql—D ¢„€¯úd~=ï„,§µµŽ&{W³mÖï Á_έ[XÇcòç–[™÷³ÊÛ™ˆÓÐU›È"¼°žÚ@Ÿ ‚úŒ×ÿDpÚÚ+ê7LÖòù#€=i–úEõÇõ ÞYÇ0 ¾NUð9ÏNiÞ(ÐãÓü$ºvŸ óÉ,áÝ–,{±?•liÚ »{KýJök‡¶_ÜÅ,aHîzTžðÜš^­}xoK‹†ËÆP|ÃúrMT_ f»]?Q’ÖÖñˆ– €=ÓÚ–ç¶ë-„º}ëÙIeNÐÙúýOçTmü'n¶š£jÏËî`P|­Œ†¦§´ðÜðF>³%Ñ… [îQˆ†:ã< W_9ðãéiª£DÓy›¼¡œŽÝiu?Ê÷×jMm¨Çå}3éREáÙb† ¢Ô.„­,—¨a)aŒžžÕ§£èðèñܹ”K5Ô‚WhÓj©ìϽGâ-]kOû:Î-„Ž7î]ÄàýGz£u Þ6¥§ßÉ 6‹³#ó`rzÖ5Ï„®ÅÕºêHm¥”ʪcÉÎ{œûVþ„5.ÒÞyÃKl˺]˜Ü½Æ=ÅI«h‰«[[=¬¿dº³b"`3èGáO°Òe¶¹k½B÷íWDmUŒmUz~5ý—öž“woÄfeÂ’sÓ¥aI¤Î-llµ˜~ÍlÀì\Rh“Ã÷©qu¦_E¾eÁ _§4ûÏ Nmí%µ½ÿO¶<Èç†ÜsøTséz…ÄW+sy·71„ã!}‡sM¸ÑoåÓôË6×u“ïݸóƒô⺠9JItsÁ?ZÉ‹K¿‹_mJ ˆ|¹ã !xÆpÒ±®4ß³ÞÛ™­ŠÍ'˜&|ïnzTwÚ-íýÝ»MösQùd#>¤dv¤B¾—JûÄÑe[| ¬Iv#Ò¯u“勹¡!÷"$y‡±'ÒªÁ¡_dÞÀ%Ä›p;ú{VÝ„Xiè·EITT`9ë;\±žòæÊæÏË&ÎÇ8È8ç=êg}g«=üIÆtda±µ±Û×ÿ¯SiºT-Üòº ®I%$'qŸÎ¡Õle¹Ó&….@`N>béY·VWךu²,6 Æ©'Óî›Tó^<¢K‚AÆ3úÓlbÕm-À[C´’faǾ;Öÿ–Él¢L´¨¸;G ýb„eIº—®1õôëJª »ܬõX@F oÆå'¥'œo-_vs‘ßÛߥ>GH QÊÈãvzóÒ¥ “C±YUúÆöÍ2 wü¬Ë°t©=>´È<ÈîÉ”â9G^œûŠdNUâ.Aê1^Á Dy€J§œÃ¥;iîÝŽ˜â‘£‘¢d-…LsŽ{U„GmÊê{çƒíL©Iôâ¢uÛ0vBwt& *œeÇNµÀ˜÷|t©#S€û¿6jFÛ”lœöljÄ;’!æ`»GzLJ€Ã IQL`YO,O©íPÌìs2¸95 ’’ÀÛ‘÷³Óþ½1ä1>Årã<õ¨X‰ }ÊÊIÉÒ’ ´¦F^5lAÀ àöúÔòaœ',rçò¡€Pl9<áGn½j/?3Ç*p0Tÿê©D¾J±dù Ü>žÔÕœÝDò*”eê=:?Ï3"¦ÒXûp* s%Îà¸P1‚:jŸjùE—a¹=*×ýåºýÜqžßB¥áˆ«°Gç©ïR,±¨Ê©+˜~•9ie>KFrA#øª+¼[Yïo—oaŒš[ä ¥°zN•Zôæebü¨éÀÇÿ®‰$ÌìæùFîžÀT–†w21#“Æ9êÑ*&R·sòŒTs4›ÈÊIíôþuY‚íæ+;ެ\b§¹L¶p“ê(…×ìK”ÃÜ8ü¨‘Áœ?*vä`õþT‚8źïb$g?•G>wá#VM¼G>Ô¶¬pê6–Q·jvÏ4— ±07îp9¨Ø¿›; v Ž3ŽõXˆ¦Ž1lØüàã½ÜÜÕÖ$ÎäŸz«$,F$8!Á88«2±wÆàNRª¬Ãr¸tœ‚h‘j6€Å3€qëO•¤ØT’x8Å)áŠVB7ÇFÜóŸ­÷Œ3þ5!^ƒØç„ÉœÛÒ¡ùÃaˆ,Ĝӂ(ùÎ}1íCB»U{(ëš#X“€gUvVlqÇÉ9_ÞmÉéž´ÂS ®1×q4²>{“ŒŸZ‰[{ ñÛÞ¤ ±@ ç¿"‚v?Ê}†iÒïÁÇ"£%IÎÒqÈ€´kóçœ(ëFüsÇ|­7*®ÛŽ;qI”QÁSØýhLG;TgqãšjÊÝrynF1Nb>P ù‰ÆqPK†gÀù±ÆW5\«cŒ íŸn(fVÎ% y&•LsŸ)#ŒqÅ>0‹Jâ1œž´ãó">Ä#'¨—pÊ3Üœô§F¥Ûæ8UÆ2?¥I>ÜnpqŽ€r)! $*íÉÏÖ’D’%Ü¥Uˆä7R+;G¸ªõéQ–^ÝÃ=@çüÿ…6B‰:ØÞ2Ücó¨® ­ê6ðêªFÐ;ŸÿUKj–È,8úsQ—òáË+`ûçÞ£fIãˆ0Pã Þ› ÇtC‚Jž½jeLã#,§<Þõ Ç,›¶ñÇaV"?¹(}qœñŠ‚fd(‘ʪà/]ßÖ˜€‚É+;†§±«°*+ìÀPv“ÏáUæù68ÚÙ8ÃóÚ¥w@Û›ä×§áLBŽ|ôÏ=3Ç_óúÓ]îÈ‚1•í·üóP€¢IFÓä©ý1ÔT¬UaU û6îR[¨ ™>l)+Èò)#@|Æ*Ä8¸¨å€Ïn ó îýM6E`H 3Œzþ”O qÜo„í•מOÍÒ«ÜZov´bHeˤoÊ®ÛDRƒòýÆü¸¨7FËò+}בÅ6?‘„Eò3ŸóÍ\E0#‚ª¼åyê* í¢eóLl8PG½A*™.°²»ÊW¥: hü¦F+µAÜO¥EåùËC·æÙ½N0ÿ^¢X1(Å8ÁÈ'Ðõ¦]ÃPmrÌW©ÓŠjΓ‚!R¸€àd~TXÇƱ‚휓ŽZQhÛZ]Îv’ÜtJ§Mç®É™É`Îiï16%}Åöò:ŽØ¨ÝÎWq FÐr*›,âÜøŒuQÏþ\ÕˆÑÕ“/ˆÝIéøf£¸Y#a2”Ü2BdÿœT‰ã à)R ô5Lêìθ‹ JŒÂÉ;`ýï”wÞœÖxƒËrZ5lŒóÞ†WŠFeŒ|¸Ècɪó’6Ü~eÆÇÒ¡‘ä Œ0£?‰ý*å“`'å (ÆõþU; ù]ÐýÃtö§DŠ€¨;²pH=O·åV.SÌTYømÇjR‰/™ ’ïýüãqÏáU’wmÝæ߯øÔ°€&}›¸'õüªræÒ2oE=3ßÓ?¥G)ócÞpU>ª=?$HâžTöF}jhQ”âL‚y$téDNí<{ãr§ °b0=jéØ87Gl¨$ûæ½>Y˜¢»ó`ñR@Ò}¤¨èFHõ©d”…?M¾µwÞ<†\g?v‘g.¬»H=Æzq׊_,KÞÇÔóœÓI{kw 2݈êGµ,(!ÛÏ?ÌPÛŒÍìxëQ‰¸%†ÕQƒ‘Ç,nNA\“ô¢6@ª$çsÒ‡b2Iç®j›ÏûÄ ì¡äÒÙ9#ÕpzR쌢ícÈçwaKqä9l f£Uv Ü{žôݲ0q¸ îEZM‰»—½±Q‰"Ú !R9éCI–Ú£œzr>´/ʪrÌǨìj2äÍ»æ' xç4×+¸’v†5,ewíù°§Ô2>²Æìô¥ŒŸ/àpqÏ4åbÓg)x}iÌß60wã¨sP4€°PÁ¥œqÒšÈ ‡Á$€3ÓŠ A@ïÖ›#eˆ'½+ùJårÀ¶AQëN’0m…<õ¨ã`(2Iá¥Uù'œuÍ#üÄä ¤|£ØÒª¬czç8ÁÚ>•!–5fcëÚ©‡ ¹~ò©ÀÏñ uÄi 9ëúS¡‘8p2àê*¼òÇ)Æ9þºCÙ H~A¸\iâm‹–`ä}Üæ ŠÜ6Ö cŸ|š[ÓDª>S¼ ËßëQítlE ]½{œ}j`ëà SÞ–Ú&X‚Û #ê2i˜G¸Š’¸^ji ŒÊù ãø‰Ç¶?I–ªX‘רì)â äÙLúç«ìE‰‹HŃrN!V2]¢$.y?•ys ^ýzÔ’(1ì)éLšÑÊlU@ÆsÓüšdë#'Ìn›4ÆQ©ÉlnÀÈëÚ¦E ÛBíÇb:ž9ÍE4 Šãk’¹c´óôªØFŸÎÚY€![ÐÓ£Du%É c©éÒ¥+V9wÉÇŸ!É ~\eIašÍ»šòÙA¶‰evÂîXÕdp gŽô8òbÂtéÍR‘yÓ7ÍÕHéÅ_â;l¶OZ¨¤ùHЗbÈ TRºFm 3Ipr=›úÕˆ%vPÄäç=)°³$W’à‚’ÝCÎÎz–çJuÔJ>nrG9èpsT`wži·1oAõ©cwQÜ®qÛ¥I;òqOˆu {›iœ¸ÇøÔ’ #àç'¿ZSF‡õó׌ЪB³olî5I_0ï*»÷gv9ê¨Í<Ÿk<ð`væ¬$¯‰Ž~`p~æ¦Ý‡7'>ù’ktK$p[vB䞠櫈ÓËÎ9f y=ɨdc¸ë¼ ~5~7'ËÈ0$ÿŸÂ ÕX‹A"’¬%Uqþ4É$•šOÞ¸Æ;Ô–ÀI±°Ê¨8üê7‘ã,Šä*°5±C)ë•“ß$O¶uMªA¯ãUn%cÄ“Ã6ÞOËô©áɳˆl¸ù›<ÔR62Á‰#¯Š ×-°Pq–ä÷4ÆÅÃc"ü :[iZuŒ¾ ž8î*½åĤ³3dò™þ¿^iº}̳Z@îÙb )÷7’¤²Æ»v‡Ú8ÏÆ™äuf9ÿ#üiŒ|× €È«…È$Ô÷s¹Œ’'Ô|ýš/]ÄçÔÕ;¹-iÇÌGáše®RÄÎï ““þ}©!æ…‹ãˆËzšUYa· £ ÄJkÌñ`®2ÃóÅEvÆÞغwã¥2 ^u íÀà÷«6è¯:‚0ôLø³ÌÞùUwj­èê1ùU+—p1¼ü¤0=óSZ±(¤Å9¤…̑ɸ‡qO#hÀ' ÿ>Õ^Fgù –#¿5,’hrïב`¸ùW$N9àq[ e¨®Û²G­ÿÙleptonica-1.70/prog/livre_makefigs.c0000644000175000017500000000716312242266161015620 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * livre_makefigs.c * * This makes all the figures in Chapter 18, "Document Image Applications", * of the book "Mathematical morphology: from theory to applications", * edited by Laurent Najman and hugues Talbot. Published by Hermes * Scientific Publishing, Ltd, 2010. */ #include "allheaders.h" int main(int argc, char **argv) { char buf[256]; l_int32 ignore; static char mainName[] = "livre_makefigs"; if (argc != 1) return ERROR_INT(" Syntax: livre_makefigs", mainName, 1); /* Generate Figure 1 (page segmentation) */ ignore = system("livre_seedgen"); snprintf(buf, sizeof(buf), "cp /tmp/seedgen.png /tmp/dia_fig1.png"); ignore = system(buf); /* Generate Figures 2-5 (page segmentation) */ snprintf(buf, sizeof(buf), "livre_pageseg pageseg2.tif"); ignore = system(buf); snprintf(buf, sizeof(buf), "cp /tmp/segout.1.png /tmp/dia_fig2.png"); ignore = system(buf); snprintf(buf, sizeof(buf), "cp /tmp/segout.2.png /tmp/dia_fig3.png"); ignore = system(buf); snprintf(buf, sizeof(buf), "cp /tmp/segout.3.png /tmp/dia_fig4.png"); ignore = system(buf); snprintf(buf, sizeof(buf), "cp /tmp/segout.4.png /tmp/dia_fig5.png"); ignore = system(buf); /* Generate Figure 6 (hmt sels for text orientation) */ ignore = system("livre_orient"); snprintf(buf, sizeof(buf), "cp /tmp/orient.png /tmp/dia_fig6.png"); ignore = system(buf); /* Generate Figure 7 (hmt sel for fancy "Tribune") */ ignore = system("livre_hmt 1 8"); snprintf(buf, sizeof(buf), "cp /tmp/hmt.png /tmp/dia_fig7.png"); ignore = system(buf); /* Generate Figure 8 (hmt sel for fancy "T") */ ignore = system("livre_hmt 2 4"); snprintf(buf, sizeof(buf), "cp /tmp/hmt.png /tmp/dia_fig8.png"); ignore = system(buf); /* Generate Figure 9 (tophat background cleaning) */ ignore = system("livre_tophat"); snprintf(buf, sizeof(buf), "cp /tmp/tophat.jpg /tmp/dia_fig9.jpg"); ignore = system(buf); /* Run livre_adapt to generate an expanded version of Figure 9 */ ignore = system("livre_adapt"); return 0; } leptonica-1.70/prog/blend4_reg.c0000664000175000017500000000722212266543170014640 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * blend4_reg.c * * Regression test for this function: * pixAddAlphaToBlend() * * Blending is done using pixBlendWithGrayMask() */ #include "allheaders.h" static const char *blenders[] = {"feyn-word.tif", "weasel4.16c.png", "karen8.jpg"}; int main(int argc, char **argv) { l_int32 i, w, h; PIX *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* Blending on a light image */ pix1 = pixRead("fish24.jpg"); pixGetDimensions(pix1, &w, &h, NULL); for (i = 0; i < 3; i++) { pix2 = pixRead(blenders[i]); if (i == 2) { pix3 = pixScale(pix2, 0.5, 0.5); pixDestroy(&pix2); pix2 = pix3; } pix3 = pixAddAlphaToBlend(pix2, 0.3, 0); pix4 = pixMirroredTiling(pix3, w, h); pix5 = pixBlendWithGrayMask(pix1, pix4, NULL, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 0 - 2 */ pixDisplayWithTitle(pix5, 200 * i, 0, NULL, rp->display); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pixDestroy(&pix1); /* Blending on a dark image */ pix0 = pixRead("karen8.jpg"); pix1 = pixScale(pix0, 2.0, 2.0); pixGetDimensions(pix1, &w, &h, NULL); for (i = 0; i < 2; i++) { pix2 = pixRead(blenders[i]); pix3 = pixAddAlphaToBlend(pix2, 0.3, 1); pix4 = pixMirroredTiling(pix3, w, h); pix5 = pixBlendWithGrayMask(pix1, pix4, NULL, 0, 0); pixaAddPix(pixa, pix5, L_INSERT); regTestWritePixAndCheck(rp, pix5, IFF_JFIF_JPEG); /* 3 - 4 */ pixDisplayWithTitle(pix5, 600 + 200 * i, 0, NULL, rp->display); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pixaConvertToPdf(pixa, 100, 1.0, L_JPEG_ENCODE, 0, "Blendings: blend4_reg", "/tmp/blend.pdf"); L_INFO("Output pdf: /tmp/blend.pdf\n", rp->testname); pixDestroy(&pix0); pixDestroy(&pix1); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.70/prog/pageseg4.tif0000444000175000017500000034037611266777657014722 0ustar dandanMM*Àþl¨†H)Ž|(r€XÐ1 ¶dÇ0 DH-§!Sj"C$W* qΙ¤DD‚؃”Ù5‰¸r°Ör `“ãÇÿÿÿÿ÷õþÿÿÿ÷òßÌ>Ô†Pþ‰"#¢­”€æÃ˜Cdb<3ª*ÁA´V™ÈÜ|0z0̹À œ l5ʤprì¬Èè»#çd":!ˆGÈâ iÞH¸G±i,¸”†$M†cbB‡(r¦t9îT`¬¡Êr‚È"4؈°CB"""OQÑtD":#¢:#¢8:a3ºâ™‘ŸD|Ì4Pd#pÎGeÌÅ6D˜ 2‘̾l aˆˆˆˆˆˆˆˆˆˆˆˆˆÙ‘ÑQ(3ä\ŒÌ‚£ˆDtpŽ´Xˆ¢‡ O!·Èæa—PYˆˆˆ‰28G;ø‰Ç]ä·At"d‘Y^´GÈêßN­…žB $„I&œ©+)¤3ÛUÒoÔ4„Tȸ·IHtmºÜÿ»ð‚nôŸ¥ý.º} »ðŽí}'e;ÿ_ݾþ»Kéêÿaý÷ÿô·ýŠé8nííÜòÿ Ãýûý:VÓzðøvÒµü0ÿ}‡÷Õ¼0ÿoaÛ׫°ßíá‡ÒAÕ7ûx|—@Šp‚ÿ··it„E½¿#-¼7ý/}þ÷»¾ÿ߆öôª­þî¬oDuÕÝv¯øÿÊä/oßúUÚ[û™'U[ N#{imûéDF¸Áp϶A}¬DD8Â# lŽ‚ E†”DFÈøá†(ˆŒÿÿÿÿÿËz¸)ÚÛ)#±…ÎÔ ¥>Ï “p<Ÿ‡°éºhÎŒ„ð ¤ÌŠÌv7ÿߠ骄É4 d•Þºô‡pèñOÁI`Èá æ [•GuF—w}C C‡xÓpP˜):+‹Çeõ¡ßtOÉÓ»Ó¦ˆÎê/þê÷„íû†Ý{åp¤K¯ÈÅþ=õ»_Nî¡ê¿¯ÿ]n?þü®yWõÿüqûÅë‚xG(‡˜"Añ¶C"@Ï‘ÿ.d…šy,ò1~Kÿÿøôlt-°,#X`¡n #;ÎÁbŽÏ  öG¨4E\f‘‚(ÄNŠ#fxÈdQeá—è4‚ †MÓ%±*é6%@• ÜZ£»Eàhhù¼hE£àhÐ4? ‚  ’3ˆÞxR Ê#tFFá ‘œ²s3VHYY.µÔ/¯ûúé´­­_×w¿zz[hZv›I½ØA„ÚM†Op“¤Ødž­¤Û%ı¥„aߣd"ùé…»|hÑ ‚„Â. ¡0ƒLa A ðDQyÔÊÎ A  ÐI*t2©›Ê õίÈZ_­ÿÿíö£cïÿ­?VÖ–ûTêÝ>“¤í5ôÛU«ßÕÓa“¬œ/a$Ú<8è'‰V'ˆFv„§¡Ñï¨EÃðp‹€Â`¡0ˆ~3†˜D9ƒA˜#bèˆ9XE¨?>fl¸ÁG'¡vK èF ƒ>Äõ'Ns:¢++ k¿ÿ¡ú[w÷Ú]ûïiÿz_÷öâ¶ôë¥×êé[N=? 'H8aÒl0˜M¤á„AÙ.'Íú¾è&öè&ÑíÄý Ú5øÑ±£åßCGÆ…£X~¡ FhXMÚ0ì Á0A„Âh…È `¦l¹]„f! õÿüµxl?ûÿ_þãÿûß®Ÿ×WôÔ4·ö*ý:úî½k]jÝSµXIô›Ýo„“®pÁ8eZNb)Z¸p}’¯I?¼ˆí&XùÄ«aÚ:7-ÃN,(B5‹Öô[Ñ¡“oÿÿõßÇÿ^ÿþ´‹×ÿúã®ðéõãÆ?ûý!ÐV?õþÿ¿øý5¥éAô½ù;[ÿá¡ðÌu~á‚uÚ &Ó«¤Û1e4 a ÂÅ2£{LŒp‚h4Ø „!±({ $pÕ†@ aŠŠM; 6NöU»KOV×ýÿûÓû?íÝfÿgóiþÔÇþæk¶ÍþŒû4[ÿÿ½ێ""#B#/a`„XL111 |†x‹A„A âƒlˆá±AjÄ4ÐpÓNí´i¦ºÚduÚZ{ %ß°ÂZ}ì5´[[õûøaúýµ!õ×í™úëáÄÑg—šg¿Ðˆˆˆˆˆˆa†0……;‚.ƒ ± IÒ 0Ä¡é„AÄ¡Òa0ƒA„A±AØ\0A±A &*!„M‘0UðËû«h>Á¶)5]ný†½µþÖÿþ×^Ò –áKøˆˆˆˆˆˆˆƒ ‚B"$è2pùb^Âø¦™'ZtÔTai†ŒqØI‘za0A„‚VÓ8ÛVÒO¶*Ë÷úì/{„rçÖ""""""""" aˆa0¥e…™(ʸj!4_÷i§†¢˜ ƒ0ƒiŒ   r PA°Òb¶®"""""""""""#b"L Â'Aª˜¯m,SMðE¶ˆˆˆˆˆˆÙ„0‚ôƒ³Î"5¯tƒÂ¦—ñ„~—µý¥ib­¨…`š•Å¡ ³qP¥¹ã!tkCÎÌ£#\íUBÉIÑ™zº¦ë¨P §jâ ⿽»£Ç;+‚…;Š¡%d)â—ÿ×uiðÿ…&h·2dÅůÝú<¯â&mff‘s!Æãã3üÛ'Æ#6¤3$fâ+f–¯õó½?û_Òþ‹°ÐâF°ÁT&Fv‹‚ÁAS ¢‚h‚Yž<)›8¦q‚M\‘›2L¹tGLê×8µÿ+yÚWÿ„¿ ›y(¤Ü\h Ú äX|Z;µFǦª°š40Pš!Õ¬ „Xø†4BaåÌ Ñ r8Ê+qƒ'Š !Y¸.B/U]ÿ¬ÕäW k¤áš:XdÝMá.ƒ°›pÉ‚AÃ.ˆ6È è0‚5ßd°JÊA¸•¸´7'P‹Æ…£[AÅ£C0Pžpdã60L h…¹‚޲‰a*Á´‘Ë("DC5(Fˆ„× ìÇúZê§c/ßMý k´ï5Û­²ì.’wvšm+ Ã0Õ°ÉãK¦Ò°dÝ$Û¤Û"ޤí¤bU¼"ì= áâî,#XrV¦âqÃ6)±B!m„& L¸Á.gQ ‚\¸Â )ÉÆt ."dèäHFˆäteB3Ï" Dù!­uUëþ·×Ø÷â¿O‹ý××N­míÐÓa—i+`†-¦Ã¤ü'vO¬“äí¤ð›I–;‚ †ƒ FÆŒ;F¼hZ.‹°Â„ÑÂ5‡% Â.· þ‚al ‚`ƒ†.3Q‚`PLá‚eÓËŒ ”ŒÔƒ"†O›5!ùÈO·ü~‡{ÿëÿÿÚõ×ëët?ïÛNõõûm &ûÛÝ]­·h2æ› Þ2NTYÒeI¶'%z éÐA°‚ª64kqaP´\U BÓT-CÀ´ÑxD>„Á0š!p<Ø¡f‚ÌÁ"‚4Œï_òõü?ñÿôšÿô=ê?_xÝ_µ_Õ­/jýÒÿüvý×ô¸Bì&ët„ ºÚÝ6©6“uÆ“i;%Œ;%”™cÝ‘Ûdx%g‘^‚Ñýl#;Bí?EÀi£;B-0PƒDK#6ÿ¯›Pÿý}ñÿùzû»~ûúô7øöüt¿ÿýoôµµìÕÆ®·ÝêÕÒ{ô­§v¯pîÓ°©Ã†m' ºÍ&Ù:á–œ+IÃ%zGdž ØF†yÈí„hqa ×ÿÿoüþè/ÿ_RúþjûòÕþ^ßþ—ÿè{_¿Çÿÿ­ïÿíºýþ©þߺXíoþþû®îêêÝ8eÿÒÝ'Ü4Ó¤á“ËU¿ÿðßøEÿÔ/ÿþ·­ÿÿ×õýEÿ-_ÿîë¡Ø?ÿßýÐý{K^\ÿ¾×ú_ÿýW»ëô—ºOTÿNõÿî»ÿÐ^þéhÿ÷ý=ÿÿÿÿ}õþÝo¯0L?ýÿ–¯ôýþõÿÿ÷ÿëÿÿãU_úR1ߨÿûß×þýÿÒÿïKÿÿÖÿÿÿµÿÿïÿÿõ÷¯ ßÿÿÿû¯ÿÚ/Bõÿëÿþ»ú÷µá$?‡þÿ¥zþÍ·ÿ¥ýzA/ÿþÿ~¾ýûþæwÿýÿº_káCíÿþ¿ÿë᾿ÿÿÿýýÕ|})cvãûþ¯Û_³ùtýî»ëûf‹óN»îúöýÿÿöÿÿÿØiuþ¢ÿt¿×ÿßÿï÷ý¿ÿÿõÔ/øVü,xVá« †û[K__ºëÿû_ÓVõVÌõþÍýš/þÿÿ¾¾+WKÂXø¯ÿÿ÷öûúöÒÿÿÿÜ"ÇúákÂÞ¿Âý­´¢A±AS Uö’í„0EC]í2:ûö /ëÿkÔ5Ý.ÖýµÒÛ4[oÿîhµôtžëºÿø/ÿ[ëµëöß×ø¯ô¿ýü ¿}XE¾Xï·†ÿ±ÿÔ1 ¼4„QQAJl Q &alRi°Èöš m´í&*ÛIXõá…½a…Û¾Òþ×ý.£ìÏóiÿÑÒR÷ÝÍ?^›ÿnÿ¿‚úßþõÕ/ü%þ‚÷ ü ¿ma”ªˆa0¡ ¢i„b™YÃ&äÇÇí Šp„!„0“AÃH l&, ì$››v=&ý†ÒmWWV¯uþ·ÿí¥®ÿM®Ý™í™ý~Ž’¿ÿÿ¿þÚV·¥öÝoý¥›e±gDD2NA„ÊÄÅa¦Hwµl ƒ@ØàÂQ Ø«J!È=m*¶)°ƒµa—Ó_t¾õƒ uÚN¾·iC^«×ïÿß_ûSÿÿ Ùž¹µþ“û¡`¦p„0„d ó™'xaâ²(êàˆá ÚŽJ" ä8iÂ! Ø« &I†a îªkߪ§kí­ÿý¶ž·ë÷i}ÿëÿÇ›p0ƒ. ÁP†'1LŒÛ“MÓ 2‡›Ä&0@ÂjH  ä@ 4a˜Tá„á‘ÄN!Ùy9 ÔŽ¾íHëm[ýoú-Ôѳõâ"Í q ñÎ&œ„0A„8íÓ(鄈_v©¦šjš ÄãØ†lŒ{nÓ ‘‚ ¨ƒÒ ¦ƒˆ5Mãëè"z™æÄDDDDDFX\DDDDA„Á2i „-™8-Ì?…#u«L“¦*i²N‚ èx"‡^¯¤û<؈ˆˆˆˆˆˆˆˆ0A„„"-0„~þµIôœDDF½¥úOÂý¤ ©Wþ—Õ/µJ¢!80Im/×5Ðq ¦+°‘dU8ˆ† ¡Ø¥ˆƒ1°0áTDC‘o+¬â,()ov7Œ®NÌ‚`§iLÉj¦í#½NÈ‚ga³¾ŽÓÚp`• éçgi…ÎÃeN#3!•ú¡|>iòUPPR!2Ù› ‡]ëQp÷<]ðž¡Beq6JÚ³ÿµµþ»‡Ý8FyØv[ Sáãcý{û¨h=4¾™kÈ„dj¿¤¼Vý®‡Q÷v~/ýÿ^:û_Ö£+ú9;ÿ^Íÿÿ¨´ÕAA 29åÅ —EGÌ#¸œ#A‘ƒ'×#3qÐÉó~Cˆh‡‘?Ö½H*ÿÿÄV¢àqhCŽ44Ñ„[†lfÆu „(M0L¹˜A' F3Ù¶OæÙ êC‰óˆ„FˆòO𿑯!zûý‘ÛzeŽä£†A„¢‚‚ ‡ø”íÚh»aPˆÑ¡£\&c°L ÁAB '¢&‹«ÁMȃ(Œy¦b43¤jþ¿ùÙ4Ró¿J@—ÚwWjƒ2{ÒM®®øeC6“² Û1Èð–4›'ÑA‰Pô0ŒïPŒ8q8ïBEÛ…Ô0Pšx(L  ËŠpdc?$ÉÆHȆŒÌF.yƒ$jU£Z*Ì‘‘š…ü&«¯éÞ±¦ûÿÝ&ý=[' ›•²p˜U¤ûÓ{†l8dù¤Þs;vG˜xFŒXGŽ…£cM÷…XD=–ì"Ý„CánE¼œCˆ`¨"R\‚a3â ¦q‚³¹™8òA‘,ÜKL†yNjHލâ5"¢B$%]úÿý/ÿ¾½½OÚZÿß^õ«»»=8dêM²}I½­°tƒƒ0¹‚ „z ÐAÐÂ0îNÓƨZ5°†´\0‹º5°„4Cìv…°gØÁBfbÀ '›&™ ÌÁ0Si‚`ˆ³4œœd²MÌæâ4e>hŽ%¿ÿíêü4¿ý´7êýõ_]GwÝúoí+v×Ù;¥¤é~„àËŸ« º&ÒpÉH7Aºmðmôa &äAôÍuEãÛCiªF¶oÂ5д\©„,&Ñ¡‚Ñ œS6@¨…¸A¢ ƒ>a ‚„ˣšM¸þ¿ÿt=ïÿÿ¯ºñ®ûuþýÿýjúþ¿B·ë·TÕéZ»ö½’ë­Ã,b¶NÐdá+¤éa„“ݧIÁ“äØ8w 4I6•á…·H Û#°ÑžÒA¿»»×hk¡ …„-./ß_ÝW`ûÿù«ÿ¯Ë˜^<>ÿÚïÿºßøþ¿½ÿ¦¿­¡_ooÕ·¯û„ÛI>õOÓ' }]&ôN ¾¶É=§H6sødñ†_§ 4ÓÔ•·’‹Ó¶È®ô›IºþßýÎ?oÿÿþ÷~‡öÿüzÿüÿýÿøñÐÿÿþ¿__ïÅÖþ†ô«þ¯ë„-6½i];ïôáš8f A·§h0ƒ†O“¥µ_t¿Ò´‚,xoÿÿÿ}·¿ák ¿ÿëÌ£úG‚ÿ¢c¥õö¿ÿ«õzÐÿ®×ýÞû#„DAúXê߿6ÿ»ÿ«ôÛ_¸ßâ¿ÐX~¿þÿ×ðŒ<7ÿ…ð^ÿú ëú¯uuýͯÇÿõÿ¿®¿¯ÿ¤…G¥ÿþøÿ·ÒõÿìÕ4«ü/☤°Ûÿÿÿ_ÿ„ÿF}èÑë¿ð_üõÿëÿ×ÿ÷úþjÿ°}_í¯/Bõ„˜zÿIÿÃÓûÿ}†ÿljn±Wç¯þ“úûÿ~ÿýúXo_ ¬%ëÿÚ4|"ßøE¿ßûÿð¿ÿÿëÿ…¿ÿÓK¨áÿúüÕ}ƒuK¯ÿ‡ÿYÐHT¿kÔÆÕþ¦wÓš%ï×ðE?_ëô¿¯úÿKôú ûJÿþÿÏÿýïÿ ÿÿ8ÿì7ÿázÿnÿßÿ†¿Í¥6»_½¯m[I½ïÖ×Ý/ö·ù¯ÿýýëKõ´·ïÿßýB_ûÿ÷ýþ¯ÛWþXðßÿ„XýýöùÇkÿ†ßÿÛ„A§ ü9µØ@ït¬ á‚(vÓÖë×°–¿}¤¿÷ý×úÿúýš%ïb¿Û4Wÿ×ÿï_¤ÿú[ö¿õÞØ}ÿ ÿ\ÒÒÿÿoÿÄ>Ðì&þ%:Šb˜”>7A b‚0ØIƒA Ø¦6Öÿ»Aíè½í×ëÿ¶ïÿîóE¶g·ºý^½þÿÙ¢ü¡%·¿¿¿Ûÿú û÷ ÆÇ×ÿƒÿøÄ[ ‹L&0˜PA…Š!§±I¦˜L4Ä¡ìJ|TPB âPðAȃŽH ÂvØU†}è?bµukþÂL4îÞ¿k×½{í«kö\ÞÖþ»µ ϳ? œOº_ÿÙ¢ÿªÿÿûɰjÏ8ˆˆˆˆ8Í+0PM0¡AOrQ¦UÚdœ(„©„Ø„8œxA„ØÂ ul4˜M;b¢—ئÐ~ƒÒÒûTöÒí†þõ׺¿®Òa¯w÷úKÚ¶¾§½ß¿õßþÁñ¤ô¢""2ö^ÔaB“µ<-á¦IÓ‡TA¦a Ôm1„;JH&Èš†°ƒ°‚`Âq Ó°°Ò· Z _cŠÛ´•Òï×»_nêµÿü߯ú¶gÒuz¡Á‹ˆˆ†aaIÔ¬²N‰Æt´Ä š`Å1)á„M­‰ÇQ„b´ÓA…¤ƒa„‚a&!űI§¯]˜]Ãþý}††¤Û?¯ãˆˆˆˆˆˆˆˆˆˆƒ"AØM0B„É8)ì&°Â ,RlBâ¤n›  ‘GXA±Â!„AØH Ði¦ÆÅ ëUúB."""""""%eŽYB ÅÁ°¡mvIÎ8"ëdcãb“M0ƒa5íRþ”hDDDDDDDDDþ"" a5l$?õˆˆâú_h we¹i¥ÇAª\JáCÄZâ,â}r¿¡)Ù‘’Þ  ŸFGÙ’Z&ÊQ1Þƒ‡Ó!L§` ¤Ýet‡ïü®teÌìhgˆ·W]ª÷t‘d¡2¤2¶ÎðÎÊ¢©Í¦íÂhñGŠgkR…S±´…Ý|D} Ò†«‡ÓóÒ–KïõµøÐÖîÒné¿×;^8iUßÛÝ÷êd _ˆþ×´üÛ:#1Y"ÈÄmj´kÿÿ¡g‰0@ÍB&G@¨„â]>ÏF f#XÊšR36g™ ÊÈÌë.¹\º;ôJ—ÿúâѰ8†è» ! (Mp …£@°‹pÍŒ4BœXA„Ã3ÆpÁ Žfdvaž®Z•uUüÈ«;¢ÿüžBM†O*ÚN‚mØ‘¼ÙÚL±è Ø8uDHŽÑ±¡j†‹B4h`ƒ4Œ *y‚$ ”DQœ‰ts:GMS]}|¥yØ…å)zzzm/ÕÃ.¢p¿Â»¤Þá—XLt¬2WÈí¤ÌöBH:`…„]ÑÂ42â Â` ™Ôˆâ„˜§…:É’ã'ŒÉsl†ežn)ÏSB3Ì2ŒÜ{4G³£Uðº~¹Þ™+û­î·½^Ðÿµtâ¯îÖû´îÓÕ³Ä3SáÛ#· ù!ÚA°h0‘±„aÃBâqÃM5°¨‡ ¸ ! ¸LpÑ A„(P˜A„BŽB»0ALá‚aG$Èèó'ј4É!š, ‰Ù‡æÐÈ8%(Y¿\*ÿþ Å_ÿ÷_¿öµºo§ÜÝ-§W ºûIh ìŽØaGºAÒ~‚7">Ð@Úq£cP†xÐÑvâwhF„0‹±¡EÀah‡°Â„Xá—À¨< „ ±0ƒ3Æ4BCˆ2@¤0§™ Í¹‚$9š’  ”‘–àŒ¡þ¯¸á÷ÿÿéÿï­ÿŽíZ_V•ºK«°ž›V÷Ü8fN­‚pËš°ÉÌž4›pé6 ¹“S†l‚<2W¦gÈW¤‘è¼hÝAh4Eã‰Çkm4!¡É@apÂ-áB-ØMï „Âa™tƒ „Ì @Ðk}æÔ5ÿÿÿ¿ÿÿ_ÿ‡û¯î¿¤×ïºÿ«´ÝSµOÛ²í%{C½6Ë´í] Ë' Û'4ÚN“a¦¾“a„ÉFNé6®È±ãá6‚  ƒôFÊÆ‹°Ñ­£cˆhÖѯ_¯ü?ÿÿÿþj¿ÿü6¿ÿãüÿìoûýoõúoñ߯±§«§t›_¾’½+«hiÒuv†\û¤Ú»¥{†N…ã§Ý+h%{é;L/ÿá¿ÿÿµßÿÿýÒý†)ÿÿ$8N–?íµÃ¿«ÿoÞ?ÿ¿ÿÿVþ¾¿m¦öý½}¦÷¦×Ku÷j+Iý—4ôØeýÄ~ÿàßþÿï_ÿÿÿuû /¯ø!¾—ßëÿÿþ¿ÃÛÿÿýîŸÐþ/_ÿÿþ›®¿µìVëµ_ö¿nûÿÿa-ÿÿÛ_ÁÂýÿïX_õaÿÿùªý¿ÿÿÿém~ÒKýÿV¯ÿÿí¼w¢(ûìkõÕ¿_ÿñO_ÿüWá°ïÿ\+낆Ãÿ×ÿûûÿÿÿÿù«òêÿÿ,mÿ¯ðõöQÃÛÿëš"éÝ}ÿùÕ¿ÿÿþ ÷Kÿþí+¸ÿ„h‡ßÿÿÿ׆ÿýÒÿÿÿÿßÿÂ_×ü½ß›PæW— |?¶—¶¿Úÿ¥ÓÿögÿèÕýÍéÿÿ ¿ô°Øuþÿÿÿÿû«ÿÿý´¿OÿÁýðÃÿo釰÷mÕ¤ÅZN’¯Þ¾Úß}í¯ÿ]æÖšÿöh˜«_ýwoî¾ÿûý}¿ÿcÿÿþúþ¿ýÿ¿ïÿðÃ_o  lT0“Pa&H ab, Ði¢¥ r"¦Å'§vŸ}¥éû¯í¯úý%›NGúÿý/ÿ߯ùÇÿû×ñÿÿøAþÿø7‡ðÜD0¢iŠ Bù— SM†Ä&%œ ÐaÐA„!„ÂAð6!Ú_iííÞà Óg­_µº½ë÷ïÛ3þõÎ~¿é "÷þí[ìÑ4Ù¢ß×öëÿÿþÞº°÷Ø|Ì_¶—í¥kk¶–ÿÝöÿí&ûöÒ/ÿÙüºìÏìÏ.Ÿ=ý óÎ"""Ä8aL¡¡ “„ÅE"Ç´Ä š´Å1  L Ø0A„TB  âGÖ!¶’ ä$4˜i±ME&ÚV•—×c >×§IÕXa[¯W { vÖÿËrÔgt'ÄDY¤`0ƒ, !3ƒ„Z¡NS©Y¶¶!M Ä&6¶‚ ŠŠb!„ Œ  ‹†a¤Ä4Ø«Xdy=Š´¢®*Ò»TÒt±–i(B!‚ eÀ@ÂhB(L“Ÿ²²’p½‘Žå@¦)¤ÚˆLD0ƒj(4È–­&!¤í~¿^zDDDDF\‚Q8C ¦L@A„Ó „ÓÈÜPUÒ¯WÄDDDDDDGÚIëõð±M„‰ºÒÿ !/ÿeÉh*û^#AÃ.Õ„ÄnAÄn2¹"#q•2­˜É"¢‘`™ŽÅ"½¯ˆj¤P  ƒ;ª+j›º%D#ß\8>‚x°‹Çú5´k„,"c´ÁB-Å‚„L hˆiËŒ d@SÑ™A“‘9¸‡ÿÿÿšó#_ôé=6Ó‡ êø2çðôé<žRl4LM¤E†5úx´l„^ŸpEÄ&c°‹pÓ „ S6AÐCâñ‚(3HÙ2AeȆd3(ˆÑD6jßú®d?ýuº«[ýý/zm+{ÒÒà ´›IäÌöK)i6=¾J ÐAéA6£cFÆÕRhÑFº.!h0B #@abA‚ ͑ „õ óaƒbæ‚ÅÉÒ” ¢.ò !9ÈÏ$4"ÔèeC)ׯÞÁ;¯ÿÿô¼kÛÿ×Ý_}lZon®~×}÷I÷Ki¦FºM¤è ÃdWa,‹bTRm²ù£cEÛ Ý£^|¤l "pý­„MÞlPˆ{ <(@ˆì ÁABa ¸DÈš‘`§5œsY±åÈŒŽ3ÆJIÇûö¿ÿûô·ÒLŽ“¯ûÇÿ±[ýÒëÒÒ´Ÿû¶õm'õvt›a0›§KÛKKF¶¯ ’nxf´Z6‚ <5„_8ôl ƒhÖÕ™­£eQvÑpÂ.Þ…Äh‡`˜  À†Æˆl²-¦ÊDçüÄÃïñÿÿáþ÷ñýpëþëÿ²>©}Ýâ»é}Žé[Zín¶“Ö•¤Ú_¥i\BI´¾ŸÒ´Ÿ„ ¾NÉ?IÒ°“‡IÐM¤îm&g¤Û0™qî'N=§»z‚ÿØtÿ¯ÿ®Ãþû©ªû­Ã¿økèGý¡×hýØþßþ¿íýRýXþ¿á--[«Ò®Ú-^·K[KeÍZVé6û Ã.…ó aÃL*fsBv¿íÿà¿ÿì?÷U×ýØûùa>Ã‘Ž‡‡·Ó]ÃVý¯ø×ô5ÿC—µŸý_AZMú½*½×ëû~;í®û´Ó½vû†ce€¿áÿôgÿÿ†ÿíw_ÿ°þ½‡ÿô¿`еtÔvÿÇþ]¯ÿàý¿ô¯ûïJ¿þ/ô?Ò÷JÛÿÿýq¿øo_Â_ÿøþµÿü›_ÿ÷øaà›µÂ¶Á×ëý 6ŸØs$¿®ÒÒÿKÿ­.×ëÿ_Öµßû¯ÿý½ÿ ¿ß þ“¿î¯m¥àÞ¿ÿ»vcÃ{s»H+a¿ð¿÷ÿ…ößÔoû¯ÿü½5ókÿÿn×ý×ÿ&Å'þÍ ?_ÿÿßûõ]ÿtâ»×ÿø>‚Áïü#D ßá?ÿÿÂûû~ßi~ýÿÿÿÿÿ÷ÿÿÿýmïÛ ÿþ¿Þu_ÞÖÙ¢ÿÿGÞÿöÛÕð–ÞÅ1¥‡þ‚ÿ¿ûÂ.>P~ÿË?ÿÿþÿÿÿ}}ÑÇ¥¯ÿiuÞï±ZZKÿ~úuí¥µk½_9ïÿæŸîÙ¢KvúKwzð—ÿÿè/Þûÿm´·_fwÿÿÿwú·]^ÿÿþëønA‚Ô5†’a0ƒˆi÷Óm7ÓÝ/a„›]mzÿûKý´¯Íý¯˜êÌÕRæ<¡;¯×ý‚)ÿVÚÿÞÞ¾ÿÝÿ¿ÿìWéEoÿ¶“ /ÃçîûLTBM>Fé0„„ظ`A„ &¶)†a4ÛJÕd=7i6’ßpÁ_»ØaØa_ÿÖëÿöÕ¿Û3W¯›Oš-·¦öãýé[Ý[÷ÿß…ìÿÿøÄDDD—RÜáaBNÊPN1 ó¸">…ÓLN=4bPAÃ0ƒŠ P@Á0ƒb˜0A§¥ÛIЧl í(tê½éû -­¤Ø[=þ¤Ã wugþÚÞ­pßuŸ}ÝŸ›4]í™ÿÚ£ÖêŸÿö)Á`‚ÄXA„3wøa18ôØ Ó#½Gki0 Â"Ó6)´¬S°Âö)[mX­ºí^»Û®ÕöPÂ÷ÃVûéuëÿþ‡óGÄYž"""" &U`ƒÂa0ƒ ¶NbPb¯‘¹1Ú{ Ž!4‰C¨Ø¦a°ÂM„l$à 5l*z †œS­¦ÅZn¨i[tÿ~¿K­©6,]Oˆˆˆˆˆˆˆˆ0„DC2p—0aM48A„DfІ!0½­ˆLUÃ@Ø„xA±†š6-¦.6JAæÂÓIÅ ïMäX(á ìO@úXˆˆˆˆˆˆˆˆˆâ 0B"Bâ'4• “„ Œpš U†!5„Û „A ê!Çÿkâ""""""àÊ4&] §*#¶ÈÜUíV¹¹ˆˆˆÖ""Âþ«@üÓc»J©/Iàƒ† *KU\X„Y£š^«Ã kTºŽ6‘‚¾ÔUXH›ƒ¬&Ä.,B7+Îáƒ(Ü·Õ¬²èŽçàPL·Õ 2©ôDFªw0ç{[D¸—C½jv–)®/ÂÙ.à¨>à V…ÁBfUŒÉb2äTÑVž«möé̇9-‰u …;*ÌÑÐ0Lï È8ìÇß޿ãZG€ô/UP¤˜@Xï÷Wkô*9Ùi;»¨DVa“;º_ޏk§v°á¥0÷&Õ’DÚ^Ž?èwýÝ'¯é¶µªë÷á Ýu+älÎ Ê3‘ £™©R’=úð®PúÎý­"…ÿÿõŽ0¡4ÂG`˜ Ï‘Â Èæ`Ñ ùqÆA0d2(%c#hâ(Z¶º¦Ÿä)•¯ÿÒ~ƒ6)rAк‹F±jª‹ÖÂ&8q Ã4C—@¡3›C#å!“ŠD'!”F÷!¢:"iuý5ÿ¬’" ºøi„&Ã%—d²“3ݧH?' &Ð&ôƒhÙð†ƒÞ3˜ š40‹w„ha u‚gˆØÂ˜ ™AšGãDèÁÈ*’ÑùDFíW½WQ"¿¦ŸºÝ§[ì³÷è?¤òý¥{†ZHt{†ƒM ÚN‚n’ £Æ/uÑvá ¶ÁAB & 4$&Â!0†GŒgŒÃ'‹æÑ„kdãLÏ3Ì3ƒRž0Ï Î0d”fäʆ'‹­WKÎÊïê­?ßÿN•ÿ¥¥îË´­µOÒé:Mý„› ž>ÒÐM‡"ÃÑíñ8ôlĨ "ùÚ5°‹ÊhÐãÑ­¨M 6AcÂ&˜Mô¦nÁB "c† HK`¾\a$"Ìã øÉt E†™ ’3 2Zäk ¯øÿÿû¿µUûèWºwÒ}×Ò×§ßÕ·pÂl3zÆm+ ¦eù9¦ÒpÒA°Ða$Ûi¦GŠ7¡¢ïÇA¸•7.Ú7x°š.!<Ñ 0˜Râh…æ|‚h…àÁ2y™Ç̹$fÍIYëþ¿ÿú‡üuèw¯úÝÿcCwÿ­ýOïÓïM¯ºW[/–õVÉÂw¥ Óƒ/¡’}8eÖIéXh6­²1Ër~i:ÉCF†‚ŒïÒm7CA¤k¦4lhÙÓñB  ¢ ŽÉppÿÍ_¿ÿáÿ1>ûGwŽéz_ÐßÞ´µoÿÿì}&ÿÒõ¿^‡õÓzm¡ß¡K«IØMWkð'KA>8¤éim4“†Nf¶ÈDzNZO„hn»¦‹Æ…õ„NÙnYÿÿ¯ëö×ü½CÒlœ?Þ늰þ[”#ûuÿÿÿýÿ¡ÿÔŠ?}/Ǫǯߺzý×]^¨VÕµwKv·h4Э¤úNá“¥Ã'Ô› –Y9 ì&Å‚ÿÿÿÿ¦…ûº¶ô+ë¯ÿøÿÁïÿ¯î¨}û]ÿküÿ×ÿ¯×~:ô=~»½oºONïêãÿÿí/ÃýëønÒmð­¥£PI¿Âÿýø_Øÿ,?ÍU)zû¡Ø>ø{¯ïúÿµÿßkü=ÿC_ÿö¯·¿ô¯ýÿ[øíþÁôœp›Iðoð‹ûßÿ…ý¿úëë~½UXz[óTº¿›Oøëô?éCÇÿßÿú¯öô·ÿ“¯ïFOí½{¿ß[ÒÝcŠKö‚ÿÿÿÂ4 ÿÿÿ}í£è+{í×ÿÿëëóûì?ùzüWþín¿º[þÚ÷×_G“›æ‹öߦô»ßKwí/÷ÿÿKü7ÿ}ýú_Ö¡á¿Ãïÿÿá|/á/´›Âý/¯ýªÿøjŸÞ½úV¾Ú¶gëgó¯¯M.qwæ‰3úõÿÂ_áÿÿú¶ÿŒ °úáÿµÒÿëÂ3ü#ü/ÞÞíû ÿÿ^Üã¿é„ ˆ^šöGDt››IÚ÷{ /¶¿¥õë}™ûj¿§U½ÿûõÿmÿíRXÛ¿ûþþü%øIëÂ.>éxE¿õÜŒA?ÿÿý-/¦ƒM aa#Àã8iP i„ئ!' Š´›1„á§ ÚzîÕ†ØaUMîê×ïÿ!¯VÒöÌ×ögíš{þa{ïíôÿàŠú ô¿´¯ü>‚ÿ}Ô Ÿþÿ¿¿þ" Á‹8å>PåFçr‡µ8ø¦´í¦‚a6˜¨ „ ØÿbÓb˜†šzêÚÚÿOûK§_°·ÛjÔ4º¥ï×3ë[?ûÿ [ÿöô»ìÑ%ÞÅzÿz_ÿ½~ÆÆüDDD\DDDDDAœ˜B!…L!eqN§ãÙ8 ©©' Ši6™'„Ðma‚LD0ƒˆ‹  íl+h&†G˜¦×b¶+ß_õoøat­.Û^ÿÿÿµ÷ò1w_¶gûk¯ÿßýV–z1qC „Âh^TÂ# Ä&J ‘\““CN*!1QLm1 m;Akb4“»´˜dzÃi6’m—ئ_ÓV×_a„µµ«­?» 6­¯÷ëõ^Öý'¡`ƒDXRÇ0šaƒ$áKtÕ¾¤cØ „AÇAµÅLC;4á â Scˆm¦÷Ù}ÂÛ0˜í6_W×ÝWö­"ܯ'DuõDDDDDDDC ‚ !a† ÂeVš “…ªr7A‘Ž‚ Údc¦:ŠcŒlm1l0±ƒ‘ 4í6Vœ2ÿ¶·J¼DDFeÖ‚h2ì ¡a0š “…Õ2p™cè0ƒ#xb$é7M „Ø ƒM­†BßëÄDDDDG$ÌŽ˜L!a‹(˜C0à‹¦AФ½ÐˆˆˆˆˆˆŽH› ¿ÅVzƼ›êq¹žužGÌPƒ `”žô,ätf‘A‹Yš9O&Êk[¡ýoýñxíÝ}Þ—ÿëÕ÷¥«®ô뺻B­ï¿¤Ü¾a&÷§ô›d²ÈÞm‘]£ÛG‡»I½£sиŒ&îpа‰Àvš4SZ!ÇÈÇaBB5\Ù‚:Š`fÌù“ŠS‘ó.d„a ¼[”Œ ÿÿÕÿü?Uûø¾ÿÝ(´×¿n®¿ñýéU÷ß­ý/´ºv›a [:XIÃ:Uú¼¾jî,²Cš(÷ ¦Ù °àè'Ñ¿‚ è¾ha¶~ÐÑ­ê˜&ŒôÂ,xTAìCBïå¤úÿüÕïǃôºïJ/ÿ_ýïõŽÇkõìUýoôÝôýéÕô[­+zÚNVî’vÓnë¤Û'Ì2éÛt› ºaZMîÈí¤Ãh0˜HÐÒ¡ âFðp‹¿ëëÿÿö÷ºVþ]_þ¥”–åGÿíØ{^­ÃÝGß¿¯ÿîŸ~½·ÛÚ~‡ß]«VÿuÝÿmê÷_}ZuÚv·KIÒpÉŸ¦g°¡¿¿ÿðÃôqê ¶ ¾ëÂÞ÷ÿþ°ñùu ÿqØ}®­þÕ}Úß­u¥ÿÿ¥dq7ÿ±úþ½oé«®¶í%oú zÛB?ÿ§ÿü>Ý=Xðÿúý×ÿÿÿ» û †¿ü=ÿÿÆÇÿëÿûö·¨ý·ÿÿßÔo÷²úÿö+¥Ðÿÿûÿü?¬h' þÚA?®“ë_ÿø|Ûo_Á[í.¿×Ò_ëWOÿ_ǵš¿O\1ïÿÿûÿB?ë·ÿÿþßýöû–þìBKö?¿ÿÿðÞÃ꡺ÿÁWÿü/ï¿á}¿a­ÿþúùii Ãÿgÿõöë³<Âú¥ßí:þ›§ÿúðøKðáÿðß÷þoð‹ÿ¼"Çþžµá]/þö_ÿÿöÿÿ°ÿÿÿÃ_Û¯×mo÷óßög¤¿µšgõôßï¥öáÿô°ê××è-ô£_®ÿ*þ¾ü"ßÿáÂ,ÿÿû}}\§Ð+ ÿù\áÐa6*Ó¶ÒOm&ͨ`“{uë×°ÒýþJ·ÖÚ鿝ÿlÍÿï×úÝK]+Kþ·Ð_ÿþ‚ôŸô¼6‚ÿÿÿÁ»þÝmQ‡º0ÿý´¶ „A°ÂAl0”lU„¤A–¢Õ;ŠD åQ„ͤö+îÖÝ&öÿ_õí|éï¶f½sÉ÷ÿõ¿Z_ïõî÷Ïûþ¼w÷øt¿ßÿü;¯úQ„ƒaÿö”DCBÊH!Nr  Ba¢šªdc¨ ˜A†¢ Ž0ƒiÜ`í › &ÂM„Ó^ÒlÇ vÇ}÷Ø_û_Û¯úýu[tû×®Õ=KjÌÿͧ_õÿ_·zýŽ’Ã¥ÿìqD&!Âv]„0ŸYÜBMŠ Bc0ƒ ,qÈœ› 6”A†)mÂé:· »zßýûúûu}ÿý¯½kÿÝo^ä9CKÛ4÷_]¿ôhÄDDDDD„9vDbL“„Ó *)‘GMAÆÅà°ÐAr%ˆaƒˆq [Lèƒ;A„Óm/öÌ}©4Å/jߥ­íúö“k õéº_ &¿7¿ÿô9Gˆˆˆˆˆ’a • !]…y'AŠö¤XM’tÈÇA4‡Á±±(z 6*`ƒˆƒb= „ØaíbTäGv’m¥e䨅ia†펫]/¿oRÝk>p“ˆˆˆˆˆˆˆˆ`„D0˜LD!ÉÀ Âa† ¦U r¡2‡GL”ìœ'av¦¢™' ÐqSŠ †)ˆ†Ôtà A‚ ­¨‡kal î ä¸+þ""""""""""""""Pƒ:r‹„Á†X@BL˜À˜N B½§Ùê)‰ÇL`ƒc±ˆˆˆˆˆˆˆˆˆ†C „Ðdœ!dàóuHDDDFö”çØ2æ—ˆ_ ÔiX2犖ëyØÞ@ðÁKrR;³$±RˆV=TìÔ¤Âfh&ÔÌøpáÂ%Äaó³Hì@ ()]Oï ƒ¨|;Û”©T”ä 2£+žþ‚w÷|38p馥o v&ý4Jóh©¯ê©¯¯æ÷•ŰR `† é_ÒÇký÷àõRcP_õß㸰¿_)ü·®S­^¿Ôqï­Ô:‡zúäY$$N¿ÿ× };ï+Њ ‰£É}p¿úùT_ãëµð˜Až#ƒÁShè.`‰Ñ¢5 slé'<†—#¿®vh¹C¿ü~l"ð6ô- FŒZ.Á ŒÙ#;·¢ ƒ4B‘0P´}‚˜,Á †§2 ˆaœÍ²ŒÜ{4<ÓõÓÕÎÅEQkÿá&é°àò,tžJA0à ¦AÐAÖ-ݤ !â!qi„[¤ÂeÈàÍ’A‚„ÁB \Ï O#6h)™îJµ"£)ÑåýZé¥;O–/ÿÖ¯á„Øe×m„›wkÒpË¡>„“ªmëvE‡' #ÃAÎѱ†ÃÄN;CTláSEÀ`¡0¡vƒÔ¸†D*A‚a(ô_6‹ÆÙ —#HÃ<2€¤äQœg™FfŽGL‘›‚ä[$#ßÒêUþ¯Wôúû¯ê•¥½i;Z»†].ÂxAÕÒ´ÖîÈÇ&àƒaÃÕìiâqÞ‚mþÐuUF¶…„\…¡ÃC-‚ 3„ „@ÁB —#ˆlPƒÁ® — ž`ÈmJxÃ!‘>mdùÄi) ’¯ÿèUÿü~›vÿÿ{¿]ÿjý[WWWöƒM;' ÕöN °Â,$ðÓ Ø"?¤ìŽ)Ã4‘mºM„_QxМq8ïB¡p÷Ó]Z!`C ¢ƒA‚„ Ñ ðA„!p0ƒ04Ê5³p‰(yd2:\"šdHEZúßþ߯j”kÿ]ÿÿ¾ÿ_ãô=Ðøô+Óõ¯¿N!– ¤ï´vF=+§¦Ã áÙ,£[dvë ñ²,Uäxùì#CâwhÖÐѱ¡UF°Â5°¡ öNBÂa4gh… X —ØÂ!^lŒ0@ .0CÿÿÃÿý/ýª­¯ÿþµþÿÞ»þ÷ö¿[ÿ·ú¿Zm„;¥«tÓí6–ÂpËõÃ7í6s'dë ´²XêÃ&æz5·I÷vE†è&ä[­ ´9éÿÇþ¿‡ÿz_ƾßýu_[ÿZÿÿûÿ¯ãoú~ÕûÕ=^õ¶­ ŸÁ›þé:N“†6“ÿÿÿ½uøOÁÿÂø+ÿ°ï×ýöÿû}ÿû_ßõü]?¿ý¡ï]è\}õ¿×Çô¿zÿuïýÿ·ÿá¿êÕÿÿÑÛFÿøF… ÿþßÿþ ö—ì?öúþ`×ÿþ+ÿi ßùp¿ïÿ»_?úÿÛ¿öþÿþ¼Wõ÷×þëüq¿þü§Â ûÿ°‚ý!¿úðlÿÂÿþßþŽ;_Öúÿÿÿþ´sû¿ÿåëæª£\½ÿÿþ߯¥ÿ¯ ¯Òû¯þþûUý{zÿ_ô—éaÿÿußthîé~ÿz÷~ÿûÁ~· _ïÿÁ¯ü'Óÿÿ­ƒ÷_ÿÿöÿöþéûóWý¥½ŸŸý{mkûÿþð–ÿÿ‡_ð—÷þÿkÿÿÿáÿ¾Ô#>ôŸ¡ü/ÿþÛÿÿý¿ëöÒÿþÿàÂN¶¾úûõ¶•­ÿí¯ý~ºïùÑýç÷_Ýzé~ÿñ_÷ÿÿè/ÿI'¯¿ý?ßþoìÿÿü7ÿÿÿþ ¿Ãà DCAȇui°ÒzŠm;0»ÂÛ Z¯þ­¯ÞßéWzïKî¡ÿ±ž¿1þû×^§ýú_ûz_ïéuÿß ¿ÿþðÿ·û¥ïþ±úý„„ÈܛӦ(  ˆTá¦." ØÙ80±lZa4í6Ðv„Ò°ƒî­;K톿ôŸý¥¾½«{kÿëÿÅ%ý_þ—}ú_aßÿÿÃ_÷ÿþ ¿øˆˆˆa2‡DB!„82B'4 Bdà+‘Ga4aƒ‰N˜âPû 1‚ $0¤a´“A«ØA§oÿ¶•}l4µÿÿïýõ½}+õ÷VÿìϽ4EÖ¿·ÿ¤a~¿ú_ÿ‡Kûâ"""""""""""ÁB]‚ &ÉÀ&V(…Â#¦)lR ! ¨ˆaXAȇ ´“A¶“MXTئm¥këÝõwß}ö¾Ã_ÖÛ ÷¥ûëWî“{ÿy…ÿ¿¤`ˆ0ƒ. ÕzºÅÕŠø„m1l0A@ÂÁqÓb &õƒ´m˜ÓIŠ´â¬Â¾¨kiûii_õki×ߺß_ùnª'ÁÄDDA˜(†dà b*Ôè¢/…öIËv›$=¦IË~·ńؔø¨¦0ƒ 1ØØÞH&a"[Iƒ0ÚM¬„C 7MÞÚjß}¯¶¥¸(cÖ2×/–çÝF0 …4ÊAXƒ ’s¾J¦¯Ú Ri¦ÅE5Ä&70ƒˆ†Á„ì%a†¯ÐˆˆË\€( Âa† &Fê¹cÙrCØœ{É:Xa‰ÇªëÄDDDF„D@@„X&ˆ`˜.«¯â""<®—¤—_ô:×Ò„WÔÿ§ZÞMøâÐ@éu‹)qˆ a¨ˆõW4Œ€±•ó v+‰2Yê·¨(L#ØñØJzaÝÂ伡B‚‚Œgi^·WRž }•ê(iþ…÷pî]<ìÆJµ&ÀŒî³>Qýwýß{tÓñ+‡)àTËz£°wÿýßV“ôaèãʬv©‚‚ÿ_ÿ¯ñp÷AÒ *uÿ¯ÿǪ½!QðáÿÞEÿ⣵ïß+ú(_úÿÿ⸵ðPL¸Èb‘ÍO"'›f¢:F#ñ¶}š¬—Îd]_¯ÿ…¯õªpˆ–E"0ƒ ‚„A„ðP@ϑ Øä>„h,AÛ:yÔò9çL—_ë™W©^‰ÿüŠð“,wƒA…Î8”âSÂ3‡¡½„"äí„h *a„BE‚;%Œ ÁB!|8ƒÁ4"k+Qƒ$<Ï6Ê2x£9•k"zë¯ä+û†zÚÝ Éõ&Ù'†aÒ|2Vò\K4H7A»i… -UÜž=ÃFÆ® a„Á#ž`¡ 0C8g… Ð>4ìÃ!‘O›gÙ(Ê3¢!¥ÉtA5ýL•=ï·ãýjÛAªkIú~ƒTýÖÉ=&Á–1;Rúá“: ÓxH6“ 'bU´xxF†‚¨îа‹ºHÑF†˜E½!ÜC ‚„A„)ñ2æLŽÈæpgAPafJd_|SY™³ ðÓ(œÈ™’ƒÉRR!.«_õotÒñ÷þŸ÷鵺º¿Ûv¿o§IÒv› >“i\¾‡ ;%'Òm ØF‡8A6ríŽ'„gj‹°Ðµ¸ av¸hÐÑ¡„Â…·h…ˆLfØÂa0ƒ42ã0¦‚‘‚Ú” †5(ˆÑ• ègDCÉÑÈé)WÚÿÒÿû¯ÿÿÿ×i´«}/õµ´¶ŸÒéÝ[iéßuº¿vs/©6Á:Nè ßIÝÚ=éÒ ¤èðâÐA¿FÌùmѬ4k„аTh£[…r ì"c†ˆw›À¡Ã0ƒ0˜)ã0¦GD}!Î[“¡„ƒ–å¢ÿþëÿüÿÿÛ·ÿø÷ÿÿÿ_k¿ý-×­}×ê›]ªtÖÃ'ˆeþ’pËÕjÞé{¤á“„–tí«‡IÒt|r,RwI´›é Úþ $mz.‡j†"ÂrPT &¡ýÿ_ÿÿÿëùiÿÝׯ÷ö®¾ßïÐÿÿþ)¯ãßß§¿ý=ý_Nºþºô=Óþþ•î¸a6–'JÁ˜åÍZM†YíRáI–ôodvÒv‘áÂn4_4g„^dü­?ëzÿÿÿÿî¿­Wýcé=_øøÿí~¾Ü6¿ÿÖëßVõÅ0Oß×ÔqÿÇ}þñÿIÖ·éo÷ôûl±‰÷ “Ò´žœGý¯j¿ÿ„Xÿÿÿúöå>¿ÿÿÿ××ñÿø9`ðÑ,Cýkµÿý¥þ×6^‡÷~‡Zõv¿­WßZëï´Ú¿¾Ý M«iÃõÿþ‚ÿÿÿïõ¿ßÿÿÿ …ýBÿì:V!ë™GÅýëú‡,0Çäìøuý|4?E÷I ú¿ÿþ¿Õÿ •µÿÿ/ÿÿ¯ý÷__ÿÿücìcÿp¿ûx+ý_ÿ×ýXi0ׄ#ðØ?š°Åwý‡-?Dÿ¯øþ×ûÿéëúú8ŒoÿúÿÿÿñQ_ïÖÚÝ ŸAá?øo·ƒÿÿ…ÿûÿÁ[Ûÿ 6ÿa…×ö}íÔž…‡·­ÿþ—m+ÿÿ¿¿«4^•ÿýÿÓ¯øK –ÿ„¿üÐXoýÿÑÿý/ð‹x7ƒa?¿pßí…¿öïÿõ¶¡aáõIvºívõëëÿÞÚïÓ_ý™úÿïõ_]ÿ_ÿénßÿá/ÿßþÐXvÝÿàØÄ[ëü7ÿÿà‹áo ÿ…øL ÂAü>Õ´—´ôîÛ4Öí& M´¯kû´´·§JýuþýWöüÚ{4K›^i›ÿ½ô¿ïí/ô·Ã¥ÿ¸oì:O÷àÿÿ¶• ¶ÐAÃxE¿¯Áöí L Ø „A„‡@ƒ ã4AØIŠ ¶’u„Ó\Ú w[ &Òm>¯ïlõÿþ½í…ôûTïìÏ×ý´¿×¿0»3Èë_lÑ{ÿm¥ÿïûwñZ[—ø>_þ‚þ"68ˆ0B",&ˆ²P}é&¡± ôƒMÆÂ†  °“ $Á„á…ˆ4Cb—¶Ð}·k¤Åa>˜i}ì0—úïÖí]mŸ×½µ¿^Öóžc¯s<ÇT¿ùïlÑ}™ïýš$´x—ÿ×®Ý%¿gŸ$ñh«#V„„Äãâ$è'#tÂBàˆ ˆƒ†¯Èò±[liÚvö•­í¥°`­ íX«ûØ`—û~œ5¿ïo¿µûVÌ×»kéþq>¿ú×ôž„DDDFh8a†!ÅÓ#rcئ$áD&ª „˜MÄ¡Öa0ƒ‘96’ ŠŽÒ¦ÂQqÈ–ØiZL0ƒbm½¦¶“ìT0VÕ¦ÿ¯÷ßõ·®ßK\DDDDDDDDIƒ8Ò[PÙNS¦„˜a2p˜„ˆL““NŠŽ6¢£0ƒbÂÕ „LTˆïb¡„!è©­¤æÖ=wJ×RÜ~±ÄDDhDDDDB"!a0™(90™'L¡Ï¢­ˆA…ÛL&¡ÓQ8ø8 ƒ40±Ç l4¢ Ö—¬DDDDDDDDDA‚(Á‚ ! (Npu5åbšdJqI± ‘½Š­äaýˆˆ‹b""""""{Á ‚k; /¬£ÄDDlUu«ØM*¤—p%tL‹â!•*QJ­c°ÒŒB°R¹IŸŽÃÎÌÒ;¡gd2gO—ûê ¦¢™™ÙÜ;ÿ… …;öeßwãS\¤”8)ذË(ëþþúA þ,#[™Àˆ>´‹YÙÉd|™ßÿÿ‚ÝB%á§jPL2NˆŸÿß§§ôú<…‘´Ó•¼§“$”†^ÿúã„ÚA>ßAß{G„ÿ&ŸÿÿŠ»Z¨¾úŽ‹™9ßÿÿ^ºN©8§8ô•®©ªpß+ÐÉ憿ýçezäÉué}{ µ[¼ ÂÐ0ƒËŒ21˜3æyŒãfpò8ÈdOf³Sq¨ó¢ý}uýñKøEÛFÇá2£@apã, âw "Ü0TÂ@ϱ¨!åÆPG³y¬yd2!‘<`ʆ¾ºôòŸY\ÿýoÒm+ýä¡IEÛ#ˆh<‹bU¸A´n4kÆÛp˜´fÆpâw ñØ(L&ˆR@Èèø§ÈáŒÐ!®3Œy¶ut@â8‰ Q[]|­þT±ÇÖ—þAµvm· &ž¿ “Òy>i6:¤òwG¸h0M ƒaÚ7¨BÂ.ÃðBÁ ¡ˆ[a=|Á3âgÙã.2‚'FȆd<ÜfGèïä†Q›ŽÊò¢__]j×úé_O¶•ÂëV÷tº ¤íU[MYH64¤‚ ƒƒ†G Žâѱá4-¡i„[µ±Ø `˜L!`¨?KA‚a{"îÈ™.0A’R†\ËÄ|áFáerBz’ùÐɸÏ$yJ¿¡‹öýäAßÿþ¿Žé?ëúwt¿¥{´ßµ/÷ì'K>a—Bú•èùp“«È±ÐÐAéh¼qh»xG‡ß„añ´t!£C›´CÅ8ì°˜A‚!u 0š!ø0P˜(@ìÖa2ã²ÅR†P2lÉÛ0ΧëáÿßþÜ}ÿ}uÿ_~Ý꟯ûý7ýu··­²v©½Ã Ò÷I¶’–éÕéëH6È è0’vK)ÐMñ†ÃÈ'†|ù|Â3°‹°ôlhjž¡ …Âà0‰ŽÑƒÂa| Ð}_†p5ÿ™%ÿÿ‘HÁ¿_¯ûVÚ¡¯~ÿ¥êÿõªëâ·û{ï¥Ól¼[‹¥­®–˰Ÿö›Jë ´tîL'I°eŒ¶“i;&uaÜ#_yý:7¤‹æ…£câÂ6?øaÿ¯×ÿÍ]†ºþÿãZRdú'…Lÿÿ_¿ñÿ]ÿý޶¯ŠW¯þ¾.–;ú¿CõOÝV¯[û.Ó«{†l¨­,2ÏJÃ'Ýù;íÿÛ!0¿õÿÿÛÿÿü+ð¾†jÿÿÿÿÿã¿ÿ×y >ÿßÝ-ÿï´4šÿJý¿V´®‡ú÷ÕÒý&Úÿ§KÿƒˆÿßÿîÿýzÂßý/‚ÿÿÿÿ̯ôïø¬6Þ¿üz¿¾þ?ëûÿô<ÿý®Öÿ·OÞßß÷ßÿûPß·ÿþ£¥oá?ûÿÿÿðºÿêÁæ·6«§¯ÝÒ<Ë×ÿÿþ?×°»ÿއûûûCöiûÿÿõáÿÿ~ô·¯ÿÐ_õÿ¯ÿí…__†ÿ_µÂýawðÃúÿ÷ÿ]}Ÿ_è¹…úOðõûf}ªç>þÌúÿÿ³Eÿ×÷ú\oýøKßÿïÿÿ#FŽÿøFˆvÿ÷¬#â°½¤Óý{¯ûà«þÿÅþôY¶°Õ†—ßûiZëþ­®D&½Öõÿ^¬ÑtÙ¢Í?¯ßÿÿÿ¶Õ-íÂXo÷øa, µ{ÑüCÿ½þßÿ¯þÿÿÿoþÄ(¤ÓÖËú±ûwë¤Á‚]¯¶–ŸûÚëkÿû¯ÿþÿ'Mé_é+·ÝüV—ú_iþõÿKÿÂ./þoÿ÷×ü7õÚ Â ˆLD0´0ƒˆaah&0ƒ´“AÚL0ƒ¶Óü&G[Ó"a‚KÚÚºÚûÿÃ[__ÿ¬âÍ×Ù¢ÒçO\Ítëï¿]¿ëÿú]ïè/ÿÿuðî 0B4ÉAH8å˜SB–öFà¾å@¦Å ÂlTa6,aÄm0¡„˜¦)4âˆJí+@×»½uÛ ¯¶—ÿô˜om_Òü&¿ûvuêÙžëÿúýWöiú_þÝýþßï%ñ`ƒ.ÊIÂM“€© bA¤Ód8A†IŒ a`˜&h6DwlS [;n¯^ÐwÝÜ0“iZÿ{KÿuðÖÏïÿíתög÷úëÿšõî{ûâ"""""&¬Ö„XL Áb%(±;«Tè Âm*%6H&aqØK 0¬vNA?jÁaµö”S }…ýÒí-Xk°Â_¯þÃJÌÿÿ9ÒkÓf|DDDDDDD!a"AˆC)ÁÎ9ß,{$ê)Ã1H8h6IÓ ÚAÄãÂᄃLT‰± ƒ6A2:´˜†Å6^ŠNí¬l0•Ûi/ë÷ ,DDDDDDDDC“`™# ÄD0˜BÔBˆM0šM‘GI¦›‡(qR1Ó 0ÐA‚lPA‚ a´Å2$6ÒM6Zv¬W#Œ²ÀA‚`„DA„" &A¦héÏÖNÎþ¡ ÕÃiÆà„Aµ¤sÿ0A„!„#ІU¢|0©n©b""""5Kªõé}%I#°…ÆÒªìt¢¾"0M\De~à¥pâóµ<·¤dX®›šÚ”()Ywߥq;¤¡H@æaHèȵQ^yÚu÷ÿuwâÉ\@˜TC.E³½ Êq‘k}÷Ü80@ɾ÷µR‚‚ª3$¬íIqǶ½Úý¤\ÉÎÓÔ)žd@¿ÇéªúpÞÓ2²ž%P^V¿ÿ­ÿ÷ì:«õ¿ýëKý¯ýú…\®f¿µßÚÿ~NE œiäY}~‡üG×Â,vM¨ DÁìÌ@ƒ#Ì\ÁFc0óDgãlˆ"s$fÙøègH‡réy*òT¿Çè Ú;°”Ö£EÃÖÓF‡ ‹qq  „â0„ `¥Æ2#Æ3æy®\‰s4ŒŒHÈioõõ;Oÿý+ ÷ DœîAžáÚM„{¤òoÒe¾-áÄhØÂ.Ún8´4C¸°˜(L'„ó.2@W£ìû0Ï Þz?2x¢"y#9¤ó¦¾«ùªÎÅWÒöšéëí[Ý ‡IÞ_Ý’ÊN“l—æ–a²;i0à  ÌþIÚ3¸¾/ô,"ïj(T[ˆ`¡B`¡0ƒ!à™²ã3f3AŸ¡ slèDPÍ¬Û õ;t¿§•=<ŠßÕñöíut¿Wìi½ºv«î„ôîô2æt†OpÉãÂ;#¶‚~¸ÐL±Æ‡„g &†ØBÂnÓ±Ú ˆX‚ ϱ„ â*!Vˆ³—@§Ùƒ:ä™”œeLˆ晞r:Ä-.ÿ÷ÿø¦ »ÿ¿ø­û¥­¾½õÖÚ½?OöÓ«º‡dž»3Ã'ÐN‘ÛJºnDÈ£¸A°šxÂ64Ø´n ãcÕ0‰ÀhZ-ØP¦‚²L& Î `Ø¡GÀ ƒÁAA0A"ËŒˆ#HÁ)=‘ÆOOæÙÒ^£Ãûë¨Úáï¯ÿÚÿÅþö×ÿÿýzëºÚ±zw]v&õ¶;otž¯pÉÌžRwu–ùxÝ’¡ÂA6òPÐMÆM4£cFÊ/ô‹N‹¶ª„4kh5M0BÑ>!‚‚ ¯0ˆ[„A„B· ):ˇîšü±¬?ßÿáíÿ«ö†ßÿþÿÿ¿º¿^÷ïôéV–íµ¥þéi[TënôãM¸hE&Ùt ÒpÉ=ÞM¥¤é6gÀƒ$Ë„I[»#ºM„kÄãÂ4;ù›;I´Û¥½ƒØa/ö %zwê¿õßíž¿_-Â'\DDDDDAÄDAšÁ0B"!… a5r7Î<1 ‘¸WþÅ1aÐA´ñØX¶I4±TÅL Â+ˆiÝ wÙmvÒlÚá„´öÔŽ¸uùéÄDDDA¡± 0L± §¿Lœ&!F: Búa;VšjÙð˜N%‚ ؈pÂ Û DCb˜†q"7-ê©']žqV¨ÖÁ; „&› §€Dti21Ìó1v!21ᯑº¡ú¯ZOŽ"DDDDDDD£ ƒ€‚h0¶’UªI>¸ˆˆˆá„ªô—Ò¤±t¡$«ë +Hjé$’ŒPØH›hD êÁ1T£ j§ˆ°¥t´M³£Å[À!I‚’ˆÈU™Eo¤Ö.ž}ØP¤”guÄ^ã Aðún¡BaJøÌ“Çjú´o÷p󯰧a(&d&Îëgfwv¶¿PÐwÂo… ®é8âzÃÛ´úšÙÙ. fºÿë¾Öî>žä·Iú×ý®ÿð÷Uĉúïþ?ûýrƒ!’”#ª:£‹^³_ÿÿâÖÔ"Ã4BC4 d“ŠjÌd‰ã™lI¬†—4ÒÓ×ÎÆþ8Õ.Ú6°˜EÅ(ÐÌ`a „[†apƒD-ŸŒ§3HÁš3HA“Æ™Â) æuþµÌ®üŒ[ðdùZW#ÑI¶G{h'A: °Â *xá6Œí‡aS‚(Ñ ‚ÂÑn 0‹…D/†@ ˜$A#:ÎF±O'×KõÔ™äÑzúpк¶Ðm/ÕÕ·h$Û$ôêú ·kvEvt{lŽÜ‹ á1 ƒa”ѹ¢á¦¶NÚ40ˆ_|Ž ( Á0ƒÁL À¤1I©Pe·›f¦CÌDæBdùÉ<æk~¾©ým*ôºÕ÷ô½{hVÕ÷ÕÝ–{† m6“i6'¥i8dà • ›ÐäGÓaÚ„^6ð…¢ñ'¡i£XhÐÑSC­« õíÿÙŽˆg÷†» ÿY¿a¥ýÿëþ¹:KðE?õÒÿß¾ÿð‚ýÿÂV¿N–¿ÿÿ·èÏ „XöÒÿ_P_ÿÿÿè/ûÿ°ÿÞéiêÚé0Ö­{[^­WÿóOý.­}[Wíéºÿ«4þ¿ýÿ ¿uŽ+þÿ¿ü °è-´¿ÿthòÇÿ÷ÿð¿÷_·ÂaE¶A§íobŠV*Ð6A†­©}ë·ëuÓ .¼4›û¬Ïµ_[]×ý¿×÷¯Wø§þÿÿÿKt¸¯éÿ ~ÿ·÷ÿöoÿ×ðØÙWa™ì1 í’u¢š Ð@ÃQ(u ˆÂ ˆaa;[ki1 Ð;c´ìÂmX0–½¶“ .Ò¿í=uûSŸÿô×ÙŸ¶gÿýš+×6-ªºßª[{}ß[¯è/ýŠüÐ6I[â˜0®—¯úv—ÿ×÷–éwÄDDDDDDDDA›PL&B-=Jë0ö§ˆjSùÇ({ V•6F:b¤QÔ0Å1L[@☠ƒ@ÂìSiƒM;a—ö;AÙíGDtÃ^êÄDG L&A„¦Ïdì&›A„Â0°£b!„N"H`†voâ""؈ˆˆˆˆˆˆƒ!—`„IÐaJ.™8L”nÛdQé±_JzDDDDDDFÁ” ú»?Äk¥N}Ø*ÒO0ƒ j¼YWí-b5 Õ¦!C E‚Š•ùaA3±¢;ÊŒíU I¦˜LÉ>J"7šÄêêžß…ÁAA3ƒ+‚«ôPÓ¾~Ô(R¹&d'“ú¨Ð»†”8yãFóC%Ñȉg–b5ÞºýkÛ­pËûíéX3V]t›dŸ^áü2vL$n‚´ƒî‚–>F?Á Â ÃSEÛFÇèZ!ˆé= C0L ÎÁ‚—Àâ fl¹šÆ¤’"“™@ÈÆQ›ŒÈˆÍäæw¤jÿÿÿ§{ëmõMý?´+jÿµ»·Kl¥뇂 †].Õ82æ_éµ ‡dvä8âF8@ÂPŒïøÑwF¶…·¡'a£[ ¡pÑ  0A¦0‹ƒÂa;0˜@ œSAb“™š#ç‘tP2qÂH]šŸ &LLäskô¨›^ãP¼~«ÿjµøÿãø­ïýŽÿ륥o†œ2èNú ôvF:¦g¤ì•ò\JÝI¸ÐAµEãFvtl ƒ„xÆ‚ 40ÚhÐÑ 4[†ƒBA¦nÂÁ›ØÊØ  ƒ83c‚64‰>%„ŽEƒqsO# *ɵ™âïQ}üzÿߪf[ÿ÷I'ÿ÷ú¾‡­_Wh:â•´ö¡=ZXdâ“`Ë­i:N•¥i6ÈÇîm&Â4RtááÁѳA´lÉói§t-ÝþänîÑn,'‚æÅAêhdå›4Âý,zy«¦¿þ‰«ÉÁC„Ãÿ‡z[ÄwïÿߺŠWûûõÿÐ÷ÿþû÷CWÖ“ï¾ë°šJÙv’ÒÒm'JÕ´ƒo¥¥i?a Ðpá’¸pû‡G¿6“,|ýþEÛÒUP´ÿÒ½ßþ¸B,?ønŸ5y”_ÿßþ?ÿý¥ÿÿ¡ÿÿݯޭ_b«b¾+Ð÷Ú÷î–¿îºNÓéo ý'ð­ôß¤î¾øjžÁ%G}#¼0‡þûº;ÒÿÿØì?ÿaÿÿé/õÿýuµÿ×ûþ‡Jý |výG¡ køªt×þ5ú¶ßîÿoÿÿö;ï ’´!#ºWBœÕý÷ëÿøoü6Ú;Ò× ß¥þõÿÿÿnºâ¿Ë&ÿÿ¹uǃ[þ6¸q¨×ðÐ×ý+ÿ|ý¿ûÒø*ZKî¿éuÿÿaÿÁú¿|7[×ý«ÿÿÿß…ÂýUÿÿê¬9zƒù’fÔ‡$,%†‰Ì,‡ÿý}ëÚÿúïô¢å»i.•“£‹~ØØÿþýÿÝŽ*×ìÿÿÿúV ëÿÿõþá[ØaúV¾Ã—¯÷^½öÇÿþé%½i¿j_f}SÿîN·'Oþôÿmü/öÒÿÿÿÞ°‹ŽqÛJÿÿêÿð‹Äaÿía[ð¾Ã¯û¯évýûØ,µJ‚Ð>é†M_m_´¿Û^—ÿì÷ôÙžög’èéÿÆéÿÿk ½ìWÿÿÿøAaðl ¿ìpE¼ðDÇøÿ®ÿÃÁý&þýþ!}(­4øªpÚK¯ l0•÷¯ïÚ«k×®¯µ™Í·_ÿ¯¯£8&ÿÿÿþÐXnÝ/¿´Ð_†ïýµ¿ü?„hÿíá¿¿é*ðDp§ a =6ÂlR”CNM*v*â­m¾/[?ºÞ¿MþÙšÿ×é³Eézûºýù:×ÛÒü?ÿú_áý/Ø oåŽþ×Qˆ0„Â5¦aˆNÈÇvAC ŠtœSÓA†A„‚ph9ß $ïb­+Oîöõõû {ö¶»`Š~o«3F?÷3öÖÍYÄög¶—çÙ¢þ¢¿·Ýô½„ÿ»¤õË(BuÉf0 œ5+­E"ÇÜ5M ›†)nÐa„0ƒbëˆ5ˆ4ä=/aº}1Vél0º·°Âé / Xao½µ³5ïïjß«ú÷œ_¯éz9?íÙ¢íK­+ˆˆˆˆˆˆˆˆ¸ˆ"!„„É8)ß²1Ã}‘Ž‚E6‚ ØÐaƒ†pA°ÒMŠˆ;V*ûlRlS©ZPa& [[I†¶¥]õ÷ßÿúšµý»O}s‹o=8ˆˆˆˆ6Á0„0˜Ca„ÊVIÁL?4Í[ƒa21ÔSQLJt6‚ ¦˜ŽÕŠb˜‡íX¦Âv“°ÁvØAÚÚÐ}¤Úí×öÃK´+ M—DÛ'¯qb€˜L  "†Âaaa™'LB 0¤n™|SLl¡ÅTaqÄ&60ƒ´¢‚{I0špâ‚·Q\0¿Znz1`ƒ „!?2pƒ†]E’€M2p “…;ÙN!2(êRh0œ0Ð@áÕt4ºVÒhDDDDhDDDDDDO!4„DXEBT××t¼føˆˆˆí"¦I7ú>ÒH®ZmÞ—âµnÒװ𡆠uCø°ˆKñ ­(ñXL)\º!hC-”ऴÈ+2ÊV0ªìÕ“&K¬Ð徭 ®b;Ê~î8pú3óð)NŠ˜ÁAHC;T/þáÒp릪…+§ÈLÁ•Ë2¿ÿãáÔ"æwtaä;4ÐðRL‰b;(?ÿôïº ·wH:mÉA ÈF¼‡ÚDwPs±‘T_ßõQô›ÿn l:‡pÂäÙ_×ýñ ßõM¥‡ïvƒƒ'mÏ¿þE—ÿÓþ£uÝ×µÓo‡þëúúWþÚ[Ðÿï]Jü<Á›gHêy.ˆFCНú™*~ßëŽ;ÿÞÒÂ3âÂ-ÞaÁ@͘ Îf3<â#Ê\dƒ å”®¿ùؾߖd…þ¾= ö‚ ÆŒ;FÊ8î|„]†‹F¶†`T8°œ‡"nÁL Ùa`CF ™¬SAHaOÆÈá™ÆÌá,Û:™#7) ξSÿþ­ú§šÿëZíËïÉó'' VÐA¶K‰cI°Ða0™'höëAÃM0´la¦‘­áa„Ch„]°‹ˆ.˜! 2²A0A‚„Ñ ‚Sì¸êüœó êDŒÙžgG3ª_¿UÿªûÓ¥uíúOëm0µß¨ éa–ž“{Ö•´ÒMè Û¤A0ÐAðàì¨q)ühj‹¶‹¸P…¯› Ä0ƒÂah‰ÀÁL Ï3N5$<`‰šóC-Ij"‹_ý~?û®—øÓûÕïî›u«oúOÒO­†]]],=»Pœ0ƒÓaÃ'0­ï"?|0´gv͵ ¢ì0š¨Pš3´Cà`šavnña8dÈÕMû(ÖAL *åÆP.Eãfpˆgdr"gIi´M„ÖûÿþÖßÓVÿÿÒ·ë×õéýê÷ߦž›I¶]ªÛKp ÿ A<ž4›d¸–B5·I¶>'¤øF‡‚mí&l( avª,"âˆx:ˆl „Áα„ÕM ÐŒ3dn4tiâ=šŒäi Œ›+<Kì/Ç¿þ>Òúÿï^-ºïLUÕýõè]zÿ­^l4Óî~› œ\0ÒsN,¥öü¾i6é£BF†È°ÐOé7†™1ÈGçç'Ãh»¤š¦¡0š¨CÌ. ¦|‹šØ}Ë'Çþÿ—]uÇÿîºÕuöûßÿûßãKÿð—þ“þ¿ô/Oÿ°›­ßë ³šv§%¤á„ÚNt/ÚO´Â zl8zf|BF¶ŽéQ‡èÎð¡õNqÒ£‚aãíÿáW ߯ÕÊÓáßô]~]^øk×ÿû­ÿ¿¿éýÿúMÖýŽ¿á¯ÿT××Ò¥é÷ÿ½újÖöýq¤­tª•'¥…Z¥é-S3É´Ô7×à‹à¡¿ÿÕ×ÂÿÚ8í~Ò¯ö®ÿ÷ÿókÿµ´±ÿÿkÿ×½ÿQCÿ$ª¬V—ýu_WÞ¿ë´_~’•5£Ñ/)ëÒÒÿ8½·4Ô÷ýš/­i%K÷ÿýÒúÿؤ¿®²úÕkÕt2¿â Á°˜L”ÂaE…•ˆC ¿’…¦¯60à 5l$Å„a´› 'eö*Ó][$Ûõ÷IÓÿ×½ëöÏö•'û®sSmyUKÿ_ìÑköh¿Tw8–ª–ºJ•KëT¥õÂÄDDDDDDDDDD!hCCX„Îø„„­‘Ž­;ˆAŠ8ÚbÂ0ƒa„“†8ƒNÛI5N¶ҵ﫵^V /ßà ZZXS£Ž+ý¿öÕw^Û[ïQ!½uªÏ-,ºÒKIQÇULBˆˆˆˆˆˆˆˆŒ ÁadnØbhlŒtƒ ±H4N70à  &a dGp Šb¼ Âi±ÅE* :â«M?M½a‚ØJ¿mt»«Òn©mPÕizTºZÕf‘P!D0„E“…²žÄ.þ)änO &’ ƒj¡E1H*¨°ƒ6.DpÐlB: ¦œU¤Ã4µ kö¨¨¨«KI ç6ÄDDCˆˆˆ‰ü0@Á0„A‚ „DCT„ÕS$ëÙìi†·†a6¢£ˆßë×ÿýé¥ÿ|zü[uÿ¡Ö©Þ½Û¥úµ·MZ^ôÂvšm¡ ëtÛ†]6•ƒ.¤á‚w ¤ÒÚ蕤~Y4hh&ÒÒ Þ|âѺŽ4lh»þ0¨·„Lvµõÿÿæ«ÿ6¤/WïþXå·ú×ÿÿãø÷|bý!¯û»¥ºþ®¾÷Wßýßt´ºIÓ.‹ªEBœu´'êšÉÒ“²}êÙé-,=Z ÷§Ãƒè Úï þ ÿÿÿ÷ýÝo¥ô#þ‹¯SUÿåëä‡.”½xkúÿÇ~¿ÿÅïñÕûïú]~ÒIV¢?ZêÚW¿Vï«l&·îNÒºOÚ†\îáÒ­ÆŸ÷„Xÿÿÿÿ¯ôqëýÿÿÚÿÿ_7Í_V]_Û@¡ýþ—ú¯ÿûê½-zý/þ–¿ë}é>)kЯÿ_úO¼$ÿáÿÿþ?¶¯ÿþÿÿÿÿë×¾ßÿ¯ËÔ5öÿþZ¿òa7ÿœ —XǤ¡Óî×ÿþõýë¡ñkî¿ÿxë÷ëÒÿÿþ÷úŠëÿ÷KÿÿÞ×ü7ÿÿíÿÿÿÿ_…ÿÕkébÿÿÿÿÿýÓÿ­C-ÒÕ/ý/ÿÿïé×þ×÷º¿ÿ¿·Jõpßÿ_á¿ÿÿÿÿÂÿïJºð©WÖ«úþÿÿ—UªýWÿáÃÿ¶«û¥ÞÙŸÿ¹¢WZúìÑÜÿÿ±þ¡ßÿÿ×ÿÿÿá?ÿekZ¤ Rü/ÿÿ_ÿ¯·¿õVǰ¿÷é] ^Â÷U_¶¾ºý™ý™ÿþÙ¢û4U{ïzþØoíýÿþ°‚üUk¯¯ð‹ÿÿßÿ÷ú_÷ÓañaÃ8‡iÒ¶MŠÿV+uzÒÝ-†¿{i4Úÿý¯ºí™­[<»3ýÛÿÍ:÷ÿÿÿmþ¿þ²þ—Ò×è/ÿ¯ëÿýÿß_ûÃcdœ%M‘Šb‚ ‹h aaA¸A°Â í$í&}ŠNýâ»O»cøa&› ýí¯ÙšÒ_µ#ÿ¿ÿöié~N¿IýkÒ^•ü%÷úÿÿÿ¯ý×ÿáá„ ØUaA„!’pA„CR³*ð°ÅSÅb£ia60A„A„  šl|R}„ Ö+Øa[¯Øa+Öí/ÿ†•ý°ÂV—ÿªõùÏË£ííoÛõ¿þûÛ×ÿðÜDDDDDDDDDDDF[˜h !i ÂŸ?ꆃkh  ˆ´š0›ØTÐab­+VÒMm´ö=/†ëÐ}ÿaqN’U}Gÿ[Ó¯ïUžjÚ[îiögþÅúüDDDDDDDB!„Ð0™ï5äp!–LBA„ᆘ ؠƒA„âAµiäKà ńMU8ªµÖ)i?[îïþÒO__V[jÚÿÿy¾Ÿg¨êA0„C Г¦F?i”ânÐbÈÝ&˜A„AÕ1UµIP"ÃAÄ6M†špÈðL6– Û…·qñWk_k·mÿÂ(œP&ˆˆ°©…TÂØNª›$ö60›lPA„ðA±@±´6› ¦é§jÚv·ÄDDDG°2ì²eÁ‡Âebdnƒ i‰O:A„Ü Øâ¿ˆˆˆˆ¸ˆˆƒ'LDDE’‚‚€¡?\DDDCúªú¬ }qH$”¦…šB–*„1•íšâ•Ÿ5¨PPPR•¶W«+jî«…?‚‚ge1Ú†vGwæª ‚d‘™vV~þþªÃò’ ‚ÿýöÃi{z&%%7ƒ$Ìû25¿þ=U îݺdØNH§Ô(Rºs; Ê•ÿÿþ÷íÓw̧(LÿýëCõ¾Þîêèïÿÿÿ~8Õ~û¤Ðÿæ¿¿ül}GåÏ!ÿúú’Ίuý~?âh!@„€¥!šFË‘ #g”„i›qFSätD4kZþ¶Í_ÿדǣ`aŒ"î`¡0‹ŒXF† ÁKˆ`a;Âapˆâ‚— Á.g†PIÈã( 2Db­uõ̃ÊEÿ¯¦ô›¦ ÑîÄîÐOi7¡ Ò7;¸´-Ú…L"à0‹Š!ì·q*3²@…Å0A çLÐe©@¥Ÿ(,íBUÕVÿ;§ÿoIÕ×IØAÒy|Òm’~¦’m’vK%&Ñí±Ó ƒá ÚA°Âa4xã¶‚!àÖEÃD=šE»BÂ82P)˜#ÂH ¦‘8¹¨S¬~0eHÉ IQ›Žg2 ©S®Cÿ×ÿëi]ií?ÓûCúKÐkm¦Út°“²p’mpËôÝZM»Õ6ÈÇì'§I½&Â=#cÿÂ.ØDá„]´0››AAS: \S`ƒD. Á0ˆ^ "$Á‚"lÔ¸$A3—3Ù3Íw”Fo4ˆ”HÍÄbR_ýÿéëúß»ý¸¯¾ß×÷·ÿJÛ ­ Ëûia—4ôá—6—°ƒ  ÒA¸A†“Z/FÏÓNŒ"î¨ÖЋš„àÑ¡¢Þ°˜PL'›Âgˆ&l@ƒ2Pƒ(ÐU6‘£0Gž3ŒÐeƒÌ3©’ÊΙ/ä&tEºÍÿµþ¿¯ãß¾:ÿíý*¯Ó~ªï¥ã µÒþ×Ý_…½U«Ó†\é|$›vGm¦˜I];¥l†Ëi>I´vGmµú68¹¡¦…„]Âh¸ ˜BÂ` ¡0ƒ<  ñLÐCC åÈ0Rå]ôž›ñý_äÇZ®•l/¿øºõêã»­¿¯]­V¿¯I½%m+J÷­R÷a>éo칦Ù;<é8eÿ ¹§ö›IÝ’ÎÂI·IÂ5Ù ÑÞ£"Ø•~-Ž'wŽ-ö]†…Ä4\Çûþºÿ~j£ïòÁôL?ýëª×á.:?éGKÿõýZÒ±ý»ÕUÿ¡û}oz×v¯A?®ÉÂIÒØOº¶–“†\Óa„Âl8dñ¤Øa“ÇMÈïI7ÈÞ‚úÿá/ÿýî¼/ïK×ÿ¼²~—ã4¢ôònPå:_ý+ÒKWÿÅÒ¿ãqÐýïúÌ c·þú_ý ŽíZZôýëÿÓÓtÝ:á¦Áši°É:‚o°É?û÷¾þ¿ÿkà¿ê ÿý}£Ž×ÿÿ„"?üQ˜kº}õüB‡ûé,?þö¾;Þ¯¯Kø¾ÿõÿþúÿëtú¼!Ývÿׯ oý:º^‹û„hÿÿkßÿõÿÿ׿ÿ×ô¬?í>^€ùªûË ã×é]µúí|{_þÿ·ñßÕÿ‚(~M‡].éÖôúýÚ¼~‚ÿí/{ÿýÒt›ùc±ÿÿû(ŽÌˆîÑÞ—ýÿ»ÿ­‡ÿ°ðºM®—|WèºìÿãòêÿêÛûÿÿèG¯ÿÿ<¿ßû4_µz_Zé}ÿÿqÇý7ÿÿÜÎÄDGïÿÿNÃþÚ;× ÿï­ì? ÿû /ø^µÿÿÿš¿ü¿þ·§«Ðkûÿ¯¯f~¾½Y¢_°E?ßéÉÓ_^ÞÝ÷ÿ÷ÿÿÌì7þ·áÿðÞ·Ó‡ð¿ßþáÂþÿý_¯þ‡]¤­¤Ú·iê·kì_ÓjŸÿ°×÷[ûK«]­}¿4ï°ECÿÛ}ºt¿Ý[üTV¿Ãé}ƒøEÆþXïÿÂ4}p‹á>¿ÿúÿÿß (A°ÂL0‚a„ö!„Õ†˜M6)nÝŠÛAÚV“§Á‚O{ujà VÝ}í¤ÙšÛ_öÍÝ?ýÿ}¿îí¿þK½¿Këß÷Ã¥ûé}áßýÿÿÿßÊôãæ%:y(PÐlJƒM „!ÓAG(iZMDA±L0›"CKIŠzm%M¾ ,0JàÂÚÝà ¯Ó¤Ý:~æ~Ù¿þ»3ÈÿÙŸùúû3ÈþnzKïØÞá/ýþ—ÿî’þÿÿ¼DDDC‹D!‹†´ÂˆQ „É91á¦%¦*!=;0ƒ@Ð6)‘ BmÈŽØ«†ÓÝ:·¶œ0»zþôÚWÛkÿëí¯K¯_ÿögæžrÿ¿Û³?ÿõÿþÿÿˆŒº‹Ú @Áf Ð0„YYPÐa4Ðc‹h àß 0¬0‚a§Å'I¦Tn®¨zv•„Ðwzj¶ž¾ßì4¿O×uû?¶ºÿþû¥ögþÝ~æŸ_Ï "Dv2i¡U1 ŠbPöà …Âa»PÒ ƒAà Äã‘-0Â\4C šaa¦±ö—aµm;R:`Áb›tÿþÒÿa¯úÿieº×¯:â!˜@BC1kBi©3ÝìBa2pšj)ئF:A¦š,&m -Æh8‡±5"8°ƒ4A Âm¥i*lW{i~Æš—ˆˆˆˆˆˆˆˆˆˆˆˆyœ¡ÊÐ ÂÂ!8eÀS¸":•pÈÜ&NM4É:íU4ÃaÐ Â Øa „  ƒÿˆˆˆ‡ ˆˆˆ†Â &WC(u†!zµá~´#ˆˆˆˆˆ‰F1úü~ºK4Z¾Ó… ¸ˆô´Ç ø„ÎËQnÉc"q$É¢;5ÆWÈ)ž&BÈ¥)‘Ú†v¨©ºnÑNýAJ€C2#°Lì ™ ]÷oý xS»Â…-Ì«Oÿî˜#¬“ºy‚‚giDvI§QØ^×ýt/‡½BŒ28Èù‘Ñ‚èet\z÷u~°èñF¨)–2*ÿëûWZBy~KáÃå</ÿÿñÇZA½ÞÝù”}?Ê¢ÿÿ×ßÞú¯þ¿ÿÿ[ÿü¯ÙžlÈfo#,ÓUÊ+.Âúû땟2õýãðPL&"8D ˆW!.8ƒ3i˜Yq’ јfaMgk˜2(Œ2ZÈ—ÿ®¶vùØ<¤×ÿ‚ ±ØGwª£ã“Æ ‹ … „\Q…M°! ÁB ê3cq›Aþ}˜4ÉÆQghjNgVy)!kJ¾¾w‹þá—Ív’¸dà«' Vé·y(höãA Ük„gqaÝï„ÿ aö\ ˜! ah…‰ ”xf:³ÌÁ‘3Ù†t2H5!²B×ý<ÈÓÎëü”¯½8­ïCC¥îá˜`AÒpÉÂKðɼ2èO Ù,¸t›}x•H6Æy»h×C¸z¢Ý…  ƒ8FÅD,aaˆ\ ñ2æ\e8Âe(˜¤(RxÃÌã øÊ3ŒñåFâÝuÿNõúÿÿ}ÿ¯BºWCÓ«´ÿ¿«†ƒa—é¶IôéöXöB¾ƒvH õŒ"vlmMé£Xq„[´CÛD=µL&Âa0La0ˆ\ À†ã.z— flÁ®lÉ4Œ33*q Šts5Ë‘‰áwëëÿþˆ£ëýÿ¯ëûü}}úúº+IÄ3R—Âðì–Ráw ›©}KG·NÒO ÝÜ ú3½š60‹àãCEàhN8Ú£[}Å„[°¡4CÀ´[°P˜FpÈb„L†A —.0Sñ‚G5!Œ¨NJGRÜÊþøÿü}ÿ¿üÿÿ ÿÿõºõm_K}¦÷[ö‡¾ÕÕÃ568<l2æœ2é½éÃ$<I°Â a’$ØhI6û$; Ü_h&ãH6i¤wh×BѰ4â„ÓE¸´Cá1Ø(AÄ3c64C·$ßÿÿå«ÿãë¢c”à¿qÿív½}õëÿ¦•ö4ÿî–½Ž½ ¾Ó«zékpƒ “°©ØNí _I;' A¥lŸC.…õ+ “Ò¶ “áÃ#ˆI¾J/½&Xý 4^Qx/›ÿÿP¿ýoþŸô#þ¿ì?zÿòÿÿ¨á+þÖÿô?øºûõìR|z¿õ·UèzÒݾ›W¦—úIÒ¶nœ2èl8a6“´t·N“iXpy¡ÿtÿ_ÿÿýBÿ°ü/¯¯è‡$ÿÿéCþÿû\=/»ëã¾ÿﯨa?ßÿý:÷«»[ÿ§ìt´´Ÿ ö„hÿïkþn¿ÿÂÿ·á­ÿÿí‡ûÿù`ì>]_†£ûu‹æÑgµÿßÿzûCÿããm5¯þÿþ¾›_·ÿ± /ÿ¿ÿAÿº4Á·Â-ýÿþ?ïÿ°ÿaÿÿAaÿì=^mY°T÷Òûù«k5_¯ÿ®¿~ïÿÿ¯]}ÿýŸÿþ¿Ò÷ÿ\%ÿ‡ôõzûÿ¶—òÇaÿ ÿÿ… ÿá·ðÃÿÿÿõÿ—WýU’©Á×ÿÿÿú¿ÿ_I/ßÛ4_þ¿{f‹ý/ÿô¿_ýâ¿Ûÿÿý„[Ãÿá½¶JNõßÿÝ/ÿÿÿ»ÁXw¯ÿ÷ýÿÿ¾ÿÿ†½wýÿkßÿ¾m?þ~m/ô¿¾wíöÿ‡ÿÿK ÷øo'ìëûÿ~ÿûÿ÷þqøPÿÿÿ¥ô¿ÿûTä*vkٴٵ±V—ë®Ú°Âïúý÷ßúl5ý¿}é!ûÛÝÿëm-÷ýÕ/ßýõýn7ÿÿÝ´´‘¢÷ÿýºÿýá0ƒAÁÆ0AÇ « lŠ€ÐlC6AŠ켚v5ìv• ì){ _º]«¯~gí˜ÿÈk´¿û3U›_fä4úýš'zõ믶­~Ÿÿ¿Œ%‡ÿÿÝÿéÿâ#a—a†ƒ&0"§ZrP“bqÐh ؈aÄã ƒ68¦8Œ ö( Ði°ÒA°Ðm¤‘Ñ…fÁ„¶ÛJþÕéµ»Û ÷VÚWú¿í©µýþÿ3êÌüÒþÍÿš}“ªªÿ×ÿX_¿¯ÿfãÄDDDDDDDJ²ÌÂd ¯Lœdà- ÂTÐlR ŽJ" Š’anÒ†!Ã#ËÅXAßfj½Õël5÷KûKýµv×Oî×ÿ‡ö®ë›ßÞ¿ý%ûÛúþ‚ˆˆˆˆˆˆˆˆ”! œ Bm’â‚h0œPb± ¨ì$ÆÒ &v”ˆâ‰¬$ÃI4Óm$Õv+b½;ØÿöÂ[ %UúýÕÿëÚWë«þœDE±R0™89É„ÉÂbš /âžJ†˜¦( Ðh6(  6š à„ ¤ÓblRlSöwK¶¶azÛtûuu^U""""""""uÁ•0˜A‚a" ÂXaPkkµh&¦ÐAµ[‡±AlS  a ‰È–¶ƒm%J Û1×W|DØL(Bi† ‘¿û¶˜„ÆÅ1Lqô’qavEY²ps…´ºgœDDDDlŒuªObk¼®R˜`’\bðÁiFÒÅXRÜ) ·,2²ËrŽ¡AKFK"¸j9n"@ÁLðLÈ•’jýÏT]5#0˜&v´ÎÁ#³ýôÔ>é…S°<(PS ¦w]úV•ýí.Ÿšå vYœdÚÏãµA­®¨_êï“F„ˆVmAOøãŽ_ýÜ>µLïYe~Îæ² ½|}…»¿íé£Âë¯ßøê?Ӷר®º×ÿþ>ÓM|ÖŽ™³!ÊC=sˆ×Ñÿÿ¶"="Èò „!x<À†Æˆ[‚31LÅ%ÈÁž§f †2Fq” þm ë,Oš#Ú‘ ÈË;¯òd².¿Ò¢áÐÑݨFÇÖ±aÚ=Ñ­¦TkaBh‚`š`¡`‚„B'" ˜ ÉO°S(ŽgwÃ3äó‘#4G³RU×ïLì¯ó²•k†].ȱI–>x’è׋ …¢àXA‚„A‚a¨!lC ‚ Ó “‹œEãÃ"Q2\y®3ŒæÌ‡)Ù„¾º¤¿÷ï×ÛýÒÓ×hu¶›öŸºweÏXf„á'N®ÒN“aÇIä­¼‹ &g¢ûÙEàkz.EÃF¶ˆw„\= „L&žl@PBÑbÐh…S"Á’àÑ äN—dñ‚:!l‘'æ’e ÊÈÕˆ/ÿzø¿ÿƒOµÿ_§¯m+Zý}þ¾›ìw®N×ü'pÂVé6ÉcJÒl2C¦NÔž:nƒ¤Ûè&ð›(¾qh×pÂÿ ßá4ÑpâÂ`š ) Bâ˜$*!RR4BÄ& „ `„LÌdA•Ï9Æ‘BLDˆÅÿÇzÝ/â›CkÐ÷[ûøè~ñýÿúìV¨}_ßüjÚ§h\iÒ]—Jý%i[%”Ÿ„2xÃ,åãGÆÉ  “rPÑá±£t0˜L ŒïOÂi¨FÆ…„]´kaB40™ÔC ˆg²:;D' ƒ-‘çÿõE×ëùµ0ž¥“ÿðû¯ê¿×ÿïìw]ÕÕ¿]oýWÝëÒÚÛjöÕ.Ÿ§ ¸½ÒNt  êì–RwzIÜ2Ä©#\21Óí²;iZOÐtha„âä;Ãh ÚhØãÿ‚ÿû^¿ý‡è½?ÿÿÿïÛÿõÿ·÷‹N?PÖ‚±IéìtŸþÿý}zÕ¶›_ôÞÂI6ÂKa:OØu´ÚvF: ³Ý+ $Ûµÿчÿ¯êÂÿÿ°ÿÿÿÿÿa¯ðÿÿ¯¯ôÃÿ+ïþ·ýÿ}/ñßë­Ûûø«ë[þ’ýÒ½'a½­Ùm“´?ü ¿Ý/ðÞŸßÿ†ÿÿÿÿûI¿öÿÿòÔ'æÔ4ZOé0ëø<%ïøýÞ×ÿ_ýª]|üC"ìnŸñýV’èúW·ßû‡°—ÿþÿÿÿÿn¿öÿ÷¯ÿÿÕ¿Ö8{)ÿô‡ëÇõïÇùdÿî±ðë´ºþ?oïúTÿ¥ýú ÿÿo§ÿÿÿö(=þÿÚÿÿÿ†þÃúÛ¿ÿ ºëþýõ_×Ñuý’ÃþýWÿÿ¯ÙŸ±ŸµìÏ.³Eûf‹Þ½þÛþÿÿôoøýŠÿßÿÃÿØðÝÿøFÚ0í _ð¿ú8î‚þÿ_¨jßÿË1ÿv«}Û .“¿m+í~í~×Íýögæ‹ÿýÿѪ+ç?Ýÿø_÷kþáÿynÁ»ü–íÿð‚û¯·ÿ„[ÿÛ¯[¿Âÿ¿Øl.—ûú_dKÓNÂËìi¿›WqV“©+ ï^Ýi6a§û ÿ¯Úÿúmî¦ÿÿFI_~¿íÛÿ·ÿ}×ÿKØØÐ_~‚ÿõb’ÿF·ÿ†Á÷¯ÿßí2(雇Lm[a´šˆÂ Š „ $ÚWQLBOMƒ¯ÖïOî»8ûÿÿ«¯³4ÿý™åþÌÿ½·ê÷Ûuÿ_ª_ý/ßAWá/ÿß‚íÿ¿†0B"A¦0C»&4 (4ɶi±AŽ(4ÐA„ Ø ƒ0A„`Âa0˜AÈ'4¶*á„k§}¦Ú^ô—öÒ¾ÂW¶Û8¶×Ϋí]}¯ûõェ[ò¯òuíÞéTëñ ˆˆˆˆ“¡ÁKaˆ†*2 Ê»'}Ç´l\A`˜A„ƒŒi&ƒb›I6M67V;0•†Û´/´­¿»ÿö»Û?÷ÿ~ÿÚzþÚý™«3ó‰ÖÚþ÷ôºXˆˆˆˆˆˆˆØˆ`…’ƒø…+,ãÙß8áÖÛ‚i´¤E„QMFŠ8v“ šv’qadGi± ‘~ƒlÇ _aHëÝk‘Òê¯pÂZ¶¥ÚÿÿÙŸ·åº£þÏ8ˆˆˆˆˆˆpˆaC,l(A„˜xkN)ŠMÚm Ódcé­‰C¨Ã‚ ؆íDa9ðDB=;Šb»«R:¥ï¶Kt¿Ii<Óˆˆˆˆˆˆˆƒ8P!F „[TÓM[ÉBöE5L“«iöF:bÚ „a„˜Â`ƒdLؤí+¯½8ˆˆˆˆˆˆˆˆˆ0B"A„!„"A Ë.‹ …;â™7M]µM 1A-ÉtZZN""""""""" ÃÂzøˆŽ‡ºT´¥} ƒŠ´¢,&C¦……ËZ¬ì KX‚;ÑH·ÿ… IY)fJœ8wÔ*„Ì#°Ü;¾§tÁA{û»ºzÿýßÿÿÿýÿÿ«ÿÿÌ«Y,Kïÿ×_*~RÑÜ/åÆud1I7”F"ƒ5E?æ"2]}uR¥¯‹5<&ag6,A„ Rv`ˆ§Œá ÉHq‡!õ$‹›e#R#4ˆ¦uÉ5ª¯äc´xhØÑñ£c Ÿ’¶­£CXEÃNÑ ·`¡8aˆ\„Á 2@@ˆ‡"\‚"ˆhÌÐ)­—#¡¦QFlÓ(ç#Zɲà:N‚}‘KF¶“ƒ@¦Òm&äAÚ °pz ÃŽOEãN!£e.EÛ ¨Ñ … „\BÂh‡xE¸`˜M¸Ñ LÉaÈÜËŒ¨2ˆÃõïêû4¶“¥õMö“†:þ‰¦Ã$ö›I°Éœ¼¤é6‚zH7M£Þ'v‚vG  ›‹MéÅ„]»Â. =þÇü~íô¿Ý/ÿ„;íÕ:N­®tV;[…p“´$á—JNÉc œÓ²P¤­¤Ø8:LÏ‘»G‡ÿ¿øºëÒî4Óü¦õÒõJÒn…_¶zoéûié]¡„é7õo8IÙ(_`Çúöëuõ÷ooõ÷ÇKñþëí_ÕÇßo×h~­¯¢Õÿ_—Qc=ÿ¯¿ÿÿ°m}¿ñû·ú_ÿïü+ /á}ÿÿÿí×ÿÿëÛì_Å~½aÿÿÿÿÂ,xlcÿ ö—ÿÿÿÿúÿþì_ÿ_™?Øÿÿ”øA8p‚~°‹ÿÿÿúÿëÿÿ¨l/¸_ÿaÿ·ÿáuú[×î‚ït¿oïþ¿÷þý,8E¿ÿÂ,õá¿ÿÞ¼/þ³é×ûÿ¿Vÿÿýÿßÿÿà¿ÿA?ßáÿëí|"ßíoþìü·|WY§fÛ}·Z¥¥¯úûû¥ýú„»û÷ÿ_b¼ ¿§§k¦ªÃ jûõ &×Û?ÿ¯ïÿjõ}ù:Ö½þ©~Íïûÿ ëáœ]¥Ó¶*Ðm êÕŠbµa„­m´»JÒoߺlÿéwö½ÿ¶¿güõýþŽ3¯ôÙ'QL“¤Â ¦%˜ÞÂOAq±DÒOI´¡‘û¸i¶¬U˜A´»[Aû­¥ÿ }ïOý/_׈ƒCL!Âa4ÉBÈØA¥°Â‘ºv)Å)Œ  ‹b‹a„‚ÃJ0ƒ6!ÚQ!!±Jœ2?®Ù¶Òa„ï¿â"""#B ÊØ`„ `„ìÔà ©UC#tL&˜®(2C«ÙuÉ:h&ÐA ØØ«Œ  †‹~ â ô"""""""""" Á0RÜ „B ‹L'jgáˆLŠ:»VIÒ|Gâ""UÄXL!¯C7±}–Êé%Эé-k…úLm(„Pe›‰ZæYß)k à¤Id¾ ´IYn½ ?tëíÿ»·TïZK~ÉÅ'WkÒzov’´ŸÃ¥´ Ÿ ØvF:“º·H&är, în7–á¾/Qõû×~ŸèW\ÿýÕ´žÖÙx«¶]ØCN“ƒ4Óa“„A„ÚN'Œ· ?õëÿïÿÿ¥j·õdq?×ÿU_±j¼tºn¯Vè^†™Ù¨‡kBÖ2¢êòôÿãðÛÒöë¯þ:ýý½é û´?Ûëã×ëôÚ ×M3$¡ X¿ÿ×ÿì=?õ}Ñ{øÿÚTzýÆäé-ûþ»ûïÿ~y$ÿÿ¯ÚñðaX®Õµÿîº÷«ÛöÕ&ÿþ­W6µlÿî¿ögïÿÙ:SJ=úÿÿa A´0Ä&˜0›à¯a ¾ûOiÖÚVvÅ'iÚÚ[°ÂZÚÛk÷^½®éØ]uÿþÿ™ÇA…´Ó‡Ói„AÆÅC t=¦J,u ôâÒN˜«AÝqKmªÃ.»b–ÒÓö .Ë"Êž^ûÿ¯Í±`B8ˆ†k ¦!5Î9Q–Ã$à°Ór(é’p¥8¤»‡QAÐ@ ˆAb!„Ú A Âh6)?ŠëÿÿâØˆˆˆˆˆˆ‹`Á Â`†ƒÂi„!„"Så’sS©‡†«[Vmÿïÿþ§œDGaÿñ®¿Û­ ô>ÿñ×ÛT’׿ÿ¿º_ÿÿßöÁÈM.’ûÿ¯Û¡Hi©Ù˯ÿøAŠÓiW×ÿý®))ä¹ñ 6D¹‘CO6gc¯üj¡?ß< `¢$B| dâÁÌ FB §EÑâ5"jEªDÞjb ͱ‹÷x^-tÓí`‚Â`š xO$( Aý¬_~š|ZiÅöÓÓ¾?v÷Ƈi§~ž†zÏ":#¯ûÿµÓOôõ_‹ÿ¢-ÿþíoÿ¿&ÙÜŽ¾BÃðûʰ¿¢~ˆG÷Ò"CÕ_ç\޾ž^Ú˜þžBÞämm™ûÖiÙ¢KlÏÌÓï_¯ÿÞ¿ÿÃÿ¯ý¥ ;KIºÕ†½Þ¿«ýá« u´»û_ÿùòõ¿ÿöÿºÿö8kiCI´›¨¦Ó†_´¡ ïb›­ˆLRI1­¤Û¥ßÿáûÿÿïþ¿ëÓšŠŠbPiŽ6*8a&¤OTõAµ‘,4‹P¤¿ÿþ«ÿûçÇÿÿõâ2à0L  œ&a2P )¦¶ƒ5MlU1Oÿÿÿ¯ÿõÿÿúmË3„CÇÿÿÿßÿÿ×ÿ¿ˆˆÿÿÿúß÷ÿÿÿúõþÿõÿ¯÷ÿÿÿÿÿÿÖýÿúÿýõÿÿÿÿÿú×_ﯵÿÿÿÿÿÿÿÿÿ»ÿÿýÿ_ÿëÿ¦¾ÿÿ÷ÿ_¿ïÿýƒÿÿýÿÿûÿÿî#í/÷ýoÿÝÿ×þ»¯þ—íÿÖº_{ÿõþýc?ë»÷ßßí­ÿkþ××ûõ¾Â_Èuý×ÿûÿìqý§Úßݯ÷ÝëýÚj·bŽ$9\®?Ã>gj¨’ÿ¯_ßÿûßÁB„Â`˜S+»_ïÿò~­5[¿¾ú©Ø9B‚öº}…»ï»ûMWÈ ýãݧth£Þ÷~B"!„!©C„õµîÓR ý¦Ÿkd8ýÝ!QPî娫ðd¤°Oi ! Ó šÚýýÓ¨ˆˆâ ÁA„!‚ þ;©Ø.ÿÿðD ´Ýß22/Õ}ÁFÑ«6ŠÞS«®ÿü a YÐ!à†ƒàåXCÀÁÔ!Ô!90*ÄrR„Hy‚ä"R]õîû¯½6‚Ûá¶´ƒi;Aº„ÂtÃ0ŒÍCA‚j¿¡×· !!` ƒ6!Qì<ئA—Yq‚ 0A Ó'"@ÔÁíÿ}é½ÂºÝûúWO¶õ·Ö½/úL•ÇôoF¡m:.>‹|\Zh‚ØDÜ6-9C¿ñíké»öý[Wþ½~÷ÞýíÝý&Á—2õ8d® &BA7† ’„ht£„hh&í=¿ÿ±Òå;®þ¼wÇ÷M´¿ÚÕûêß«´é—:ú^t“†]pá—Bý:\¾¦·úž]7ýíûú·ò‡ûr‡ûýŠßý/þ¿ÞŸKzÿ×zëOþ¿yÏIöÿÿoý_ýÝ!ÿßÿþézŽ–:Ú¿ÿê×§Ãÿõaê—÷ÿ¯_«ýnÿµþ¿û_ßþ‚‡»¿×ÿŠº{ñØ.‚‡¯ûýýÂvéÿý­8âÒ–°ÿíªW×÷õó¿ògà mu­ûý}udz¯TDuÔ¿eȆ36lÎ@ÉË dNJkGbÙ kX­t­nþ„8°l!i„Â6)±„Ðh…ðf±MŒø¦dla —!š™‚!Šƒ0Ÿ fOÌãLÛSÄK‘ Έäjyž¤ŒèK¿µ% &Ùƒ6s]ômêxaaøM FÈBEØhtL÷8 ˆL Áf@ƒ0TBÄœ@L¸ÍY¼Áã(fá“‘Fm®[Ï#UÙg ¾ÚiÒt½„I´œ2p’l4 $›nEŠNȱI·}?öt]´^…¢îª¨¸ ŽÌ "ÇGaBa0ƒ8@˜@Á‘Æ2Ýiß§K¦Ÿ}½é_Ú­é&ßW ÚXa6“a˜Ña&ÆYáÃ%zt›I¶Gtwá‘bMB(Ù‹F¶v˜qhÖØDu_ïû±UîµÇ¦ôªý^Ÿmk_a6­¥¥a¦×ygÓ†nô•†H~é6ÉcI´l9(i6#ÿCú¸ýbïÿWÿúý-ß÷ÿ{­éê¿[ÞúI¸B¯í:¾í—åÕøu¶’PõÝ/ö¿ÿý­ÿÿº¿_ÿÿ_ìVþ•,õº–sAè ÕFvœ_ÿØs'ü½Aÿøþ¿þÕÿð×ÿêý¿Ûî?‹Zoxÿi„õû~þÿ_ð¿ÿ·´áWߨÿ«þšI{ /K°ßÿðŸ÷øoí,7ÿ^¸/ÿëÖ¿¯°ÿþÿÿý‡.¿/U¿Ìmf§ýÿþ¾+ûuï£GÿúÃN·þþÿÿÿíz_·ÿx×ý§ûþݰÿëþÿÿö¬§Òßÿý¯õþ¯ü7ÿ÷ÿË9X¿_öh¿ìÏ^Ìÿ}þ¿oÿÚmRÕu÷¾¿¿ÛýÒü=ÿÑH«ñë©Ù5ž[kÕ©í*t½ÿmp¾¿ÿ([¿ý×ÇV–ýû¿ïý|„w ¾»ªwQ[°Á+íºï¿þÿêÚmWßý{3V¾ÝÿÿOù¢ìÑ}Ýÿÿù0_NÆaÐA ÐpÂA ƒ¦)µ†GÝZ ¥aaí¦žÚV_ &ÂÚ÷ë·L0­×Úíí¤»ÓkÞÚý™þÿfynH;þ?ì&Vˆ5üSVÓQ †*b˜Ø”<aÅ„A°a(ÃÂDpÂa0ƒµb›I4ÛNäHm¥û½wý†m>ëØj¿ÿˆˆˆ‰šˆ0A„ BÃÉÀ&˜SäÓ Œp ˆü±áˆM1 ’zº§ bšb‚ 6, Š0ƒka„‚ ´˜ šlm§ØJÓbƒ_ÿñDDDDDDDD ádÇ+@˜! ˆˆa`„Y(!¦Žƒ ËTÄ$âi4 b‚ ÚÿÿE¹s†ƒD48 ¨Sâeb Wßÿþ—ÿýÿÒ¿¯ø"ÿ ‡ýÿýß×ÿö¹g H©VdËí1éè0ƒp@Èbðx6eÄ"™*¢£6et¦IüXO ß§é„Ð?•†ôé:âÖ-ôO‰{{;œ{½?·°¾gÂpïÚ4Cú÷÷•ôˆ&d…Õ*èwÑ¿öžvøPPL·4gay É&J:Ûô¹‘(I Ÿ‘!ýýéêv©\³ vZ@¥Hˆ˜ÌÄOõûÕ?v—ùá$,Qäá7›§Š=HǦŽ?ýkûôþîフéV¾ªÿþ—ò>é>?ÿïôÞÿY¯ôÿÿÿß㵿֢ïý-þÍ¢ëÿ~—ÿÇ/þ`Ά‘Fo427!c¯«ÿÜEÿÿçkkÿÿëÄ0Ù±MŠ'È Ðf¢ ù„@Á4Œ5Ì ddlÈý¿þ¿ÓÈ×™/ÿû޽h0£ØâqÞl"ì4kaèÖÂ!ÐCØ´h !gˆØäuÿúÿý-tò¸”÷ÿñåóJÚh2Cé¶mÒm¤Ý8H7òNÒy.ÿÿëïùÜ㈾K2^6ÏÖ:r]pºÿþýÕÛè0—i·JÕÒÕº°e§,àƒ¤Øa? Oÿëÿú­à±fÆ¡Áa Ä4ËŒ†)¤`ޝ#RåÈ„Î# Èœa”¢("0jQfÙ3«ó«*ÌÓ"<—¿ýÿ®•{ÿ_~­þýïú_ÿÿÿþáÁѱÜN8£^и´h`„0œ‹pFôCسPˆ‹Å»>FÆ A‚„ä+ÎAž#c0† àÂ`¥Æ œ@òã'dã.òãRA³(Îfl¨GDyŸ“cþ‡úèj(ˆ>Åõ]¿¤¿íÿ·ýÿvL`@ÉóF·O'w“†‚vGbU¶A…öA„A†ãEÝŽ-x÷FÆ›FÆ ^ѡŅ›‹‹…ÀÍŠla „@Á Êqrã$ ÿÝ/Ûþ8uÿÇþ?ÿïÿ׿ïí5ZZ½6Ë@AÖÚiÞ¨8eœ¾»Tí4!é6“l–0ÉŽ Ù°áÒ´ž’m'dvß`’nøL±ÝèØúF·5Ða ¸„[âÑ 7ÿË­üÉ?6¹ªÿ#Wé¯ÿïÿ×_üoýñ§WªvÛ¯Ûõ¿„)i6Óл Ý÷K º[ݦߤž_C®òú9Ü0ƒI6é8F¼Š=ƒr1é6?ÿ¯ÿø=¿îdŸu‡Ù¯×úþÿÿ¿ÿ‡þÞ›ÿ¯_ô÷ýÿú¦¾—½?¥Ý_N;´•ô“²p¾„–“ÁÒ¶¿ÿ᾿ûõ¯ÿÿÿýøíwÿǽßÿ¶’ßô?ÿÿuºo¤šï¯ÿ¶–´*ë»ûÿÿëÿü7ÿ׿¥_Çÿõ×þ»üUƒÿå×ZtÒÿÿÿI¿ÿÿþØè(ÿýô?‹ì×±õOÿº÷ýö_þ—Òÿÿÿÿö~¿þ¿ÿýÒÿ×ÿÿæ×ßÃþÖJÊ/ÿþô¶ÿë¿þÝ×õþ÷ÿß¿Ÿ_ëÿ¾ÿ¨{÷ ßþ¿oýÿ÷ÿÿÿÿél=Ö*G÷_å×J]x1ýv×þÌøöÍ»f‰¶Í„ïúù:ÿJÿÿÿ¿÷ðÝz£DÿþûGv—ý¥×ÿÿÿÿûßýÿ×û 'ÿè³mØi?aµ³ý¯½¶·ý%ÿÿýzþïþÃÿïÕÿÿÿÿÿÿôÞþ×þ¿¶Ò÷ †ÿá5¸ªØ­+b›X0JÖ×oá„´¯_úÿÿÿWWÿKÿûýŠŠëÝ/ýÝ/ÿûÿÃûËvßì0¿ÿá°‰ÿoþ4AµAjA6˜„«I°‚ND†›iXA¨_ä!Wëûÿüçßþy?ÿšïßÞõýßÿÿ·ß¾«¿üBÿŠðtþíñ s¹Cà !&ÓME)áoÇÿýÿKÿÿë}ÿ°õúÿâ­¿ÿÿ³?ý#¢öìÑ:îÞè/ïø¸ˆŒ½— °B!‚„ÉÙG* Ø?þ¿ÿÿ m¤ÙyAÚKÃ^Â]î×û¿®Ùé´¾ÿµmoÛïëíµý/Û3êÌüÓÖý÷û4],DFi_ÿÿïÿbqðÂQH0ƒ8á…L äHi±Iè:Ö}o´˜`ìSi/›_vƒŠtíÒµÒöá‚K÷ü5í/ÿï:¯Ýÿæcÿ¯ü0Lª jsÉÓ$éˆW´ƒM¤A„Þ‚ Š0ƒh1Q‚M„‚ ØÁ0ƒ‹i† ÈL $ÚPÒL ᱦšh‚NšlS±÷ê»­ÿ /ÿýRßÿÿÄDDDDDC" !¡™Bö%ò·!v×xdc„bšbTPAÚ ¤a6aÓM %ÓA°Ó°’vÅt¿ÿô¿ÿú  `•À‚:@–8B"B#sâe_ SIÆÉ=5bâ‚ ÚɯÿÛÛÿßÿEÄDDDŒBQ4Á†N0„C åu²ÿýuÿÿúÑ©ÇÿïµÖ¿ÿÒôþ“¿þßßõýkKí Âÿÿÿÿ¢lPzüGÿ¿ÿÿô—×ý/ëþþ’]×ÿÿÿÿ髆lÿïµ×ÿõ½ýÿÿø‹ &8DtWBÿöýÿù_Ì‹ÝqÝqØ× ÇÿýûýU$¸ âýÒõ"ï÷kÂjGdOþÕ[Kÿm,ìÆøw´xé¿Æñ¿ë ôviõ(w}ô‡ÿkkÞÿPR£#hËrˆì]ÂŽ¿Ý÷¯úv·ÚaNʈêÔÊØZ “G„ÿˆµí[L‡~úÖîß=Âaé„õ ÿö¶˜TÓ_Vá¯íRÑ­ºxtxÿÿðd”Â`˜B!„¦íÞX{^h=„\–DôR)HDD­b$TÇßZtŸ§u¿ú¯¤¾¢?iâõâ?Â(qæDžH,¹*çOi.K"§í£ï¿üz ŸÐâò64BèBäŽ( g62œ9@¥ ¹$¹<¤&i5:Ÿþù§«ë®^^t›“Æïkop‹¸EÀa CC½áÁB ¾ /¿j­üá%¤Ý6áÙ8O'”œ4Té‘]ÿñ¨Dí®\ˆÖlÏ`í'Õׯץÿ´!™ º·Òt› Øe—.Ëd±†Z ¢œ±‚a0œ_äJqmI3Œdãû:F †F‘‡‘ÈèD‚(‰ô} —F™¸êf™´QQÑ3R5/ÿŠ^´ÛÿëézW½~í>·ØpèN8œw'ÝZ4QpBBÙn Õaa œA„ Á0La0PPƒÁB 0A‚"dóDnN&2ˆE'D`òDæuyd¨áÿK‹õÿí_Kÿÿÿ§ º×pÁzoÝ&ÐMè ÚhÎѲ¿"ÃFÌryF¶‹†c´#F°Â¡h¸ F¶EÄ(BE¸ÞD¢c°ƒ0ˆ1d|A‚g?ô¿ïøú_oïÿõýÿa7[­¤é6~]6>¤û×´ÚM†H}6“i: ¹Æ“»#ŠO¤èÐÐOºA™êA„6‹Ç¶”]´l¿ý.Yÿè´íÿÿÿ¿¾šý¾¼UßKjÒþ½§ú m«¤û†šu·aÒÃ' m'ðì–jßv’m&Ù,`Éô5º ÒvÿW÷ßÿëÒ÷ÿÿÿÿÿ´ûïïß|Wéµ¶‡ë­ë§¡®Ûßa6¸þ´“m=>¾écþ—ý÷_ýkÿõÿÿÿ‹†—è÷_ñûqj?úê×"ûûõÿÿñ[ßú_¯ÿ÷ÿÿÿÿÿÿ÷ì?_ñá¥ýëþ×ÿþ:]ÿûtïÿÜkÜzßÿýô½ýïÿ}ÿÿÿÑÏaûóWÓ†•ÿ5S@þ‹Ò?òÉÿäàÄ+ÿ_ZWïíõÁ Sÿwÿý·ý¯ÿúÿÿÿõVÞÿøPÃK¯_ÿ_ëÿ¡mÿýÿàæÖ³È(é}™þÿþiÅ7õÿþÿ_ÿý{†õ_ð­ÿþÿà¿ÿþa¯¿ºÿÿ·ïází¥¥ÿö¯ïÿÿ®ëÿÿê¶ÝïÂ. éøÿ„[ÿÿü"݇þÒî¿ÿÃ~¸½$“cº†·~Á„©µ´¿ûþïÿÿþ·ÿKtzmÿÐ_÷ÿè,ý†—ÿúøo·üh6­& ÙR$4ÃM´•6öÌ%[si´¿ÿú8é]ïÖý-Òëÿ¦ô¿ïÿÒ§ýŠÝ+zÿÃßì ¶qʬD„E@Ùà˜Nš´Ó ƒ8 ‚0ƒAÆØJ×}~×û1ï^Ùÿõ1ögß{fzëf{þh¿½³Mð^÷µÿßü¡ÂRÌvV€„Za2²Îé”àˆé Ä'1ü0ÚW­ëj­°×þô)´´¡¯Õ­Ÿ×ýµý³ÿ tÍïýqVf¿ûÍ®ÌýO>#ˆˆˆˆˆˆˆÄC8 ÂJ©]6•Ã#ñIöƒuWK¦+´˜¦ - þØ×¸av+ô»Óݰ­¥ÿÞÚ·å‘=Èé ÉÁU&JL8":å>T uM B66‚ Ø”:†V8¦‚ iŠc0ƒA´a›ƒ¨‡jM9÷Q¶’wvƒµŠ»L²NOÞ""""""#‰ÃXA¡4Új!0ƒ ƒ xGz  &I×i0­4ÃA0Ó#E ÂiÃA»LPA„A±l4ƒL[BÆmRB""""2×"!‚`˜L Á‹Ž a2 §L¨SºdœBi‘ã‚#¡T¨DDFèDDDDDDDG6$:ç>¶«®¾]~ ¤µÒˆÿGRŠv•B ŠJypŸˆ`šät#òÝm•Ïü)‘@fe*ˆ¿Ky~Kî™h*"¡™'ɸè&ƒná0¤Ï+¥ @È£2¥ëFtéáNGMB™à§aHú;£%¯ÿ‡ Óî’JO; &C Öû¨¿ÕZ†Ÿ$zoüqÖ¶RZáø0M?&Y#ú\zõÚýÚmúþ¿ë~=»ÿ+Í’#Jóq9,ˆÈIBgXèŽ/H²­¬—_×ó±H8¨A‚„Îl`¡0˜Aà¥Æh…‚€Á0ƒ8ËÌÐtQ‰É=<©}Ü~øo^®0Âi FèN;Ma„k„0©ñhÎ͈lb 5×[ú½r,‰ _¾pÉãvƒ$ô´x`›×d‡ÒM»¡ö‚ †ƒQ£d²$œfŒÁ©PI®r5JH_««é«Õú~ši+Wz ¤á¡ ³í’{Aù|ÖÚi‘I´40¡4CÔD).A4Ë ™ö`Ž \¹JÆq‘ñšF Ú«!æ™’Ç’ÒR!Í^«¨Kùëýú]~ÿKhk÷Kza½m&âôlwqhÖІ!a4hqapÎ\fÈ"Ý¢$0‰ŽÂjÂÁS2†Æâ64Dàž0P@ÁzÉз#ÃAððPd8d¾™ Ê3u «!3¯åºÉáoýhnÿ÷Õ­_ÚãÚ Ò¶K!–!7(rc¦¤î“nì– VÒ{@›a4Ò °ÐaB Æ;¡£c}opš5´hz„4\0ƒ\Z Ñ9 ‚a>«3AsyãÃ( Å~×ëöÚþ/ßô=- iõlZYÂt­–{L'I¹}I°ï ›i¤­‘íÒ°Â $›‘JÒoÙÚL±èѰŸ4lÅ¢í¡â8MïˆÂ44[áÞ¹•ÿôZÿ¿ÖÒßzOûÿÿß«þ½él ÒNÉÚW}&ÝÃB“i6áØA×t› Ÿ_¦Ò°Ë² œ‚°à–á‚H6‚Âät ö¾ð¿ÿü´ÿ™I ÷ÿ ÝW~ý/t¾‡è{ëõë§ëë÷Å¡ÛeÚ<.“{év•Â,¿á_Âÿÿõijµ_ÿèoÿZ[w¡údpé_èh¿ÿëê¾¾5®¾’êÿA?éz3×Â4ÿûës!\Ž|Õÿÿ¹dÿò1×_þÚ_¥¥ÿûÿ«^íÖÜ_ÇÿãÖ]uxÒ_ºì Ÿð—ÿÿí¯¡d\&·ëÿ×ÿ0¿ûT¦Oå×G¥e¤ÿë/Bêÿãÿ^—üåv¶B5Ër§„GI¯kýWíÿÿý¯ÿÿõÿÿ~óý*Òß´»þ©ð¾ëòêóW¬xzRCýCßû¹¢×ÕÍ?Í?ìÑ1^N¿ßÿ¿¯ÿô®¶ÿÛÿÿÿþÔ/ëÿÿ¬8¨B>Þ­Øaÿ»†—éþÚûkíßÿýÿÿ×·ºÞ•ÿö—_ßþô1ÿuÿÿ‚†×aùDM=8¬ }¥„1Ù„Å_éü0µÃ š}}¿ßßÇ}>ïÿýÿ±H/ßûÿ"ÞïÇì“„š  µ)‰CãbÚ ÁÁ4b67ìÏ¿½µõáŸßþÌóËÛßlÑ4æ‹(K}±OÿÿðH/í/þý‡–;ÿ`˜B4 Âj† „L ×鍊 ‚ ¥Øa& _ÒÿµúûPƒOt«µíl ÷[3ûJý†³?ýŸøô›3ÿ'U®nÿˆâ#-zb ±LV›"hÒNujÅZÞ¬Wö»LSL~·°a*Oµa­ý¯û_kÜ5²‹K6½óNúøÐûMtÅMÔˆ8aaÕ¦l4[[@ƒ´ !ÆðÂQ 6)ŠûY …#­>Òa‚]°Âªk÷« †“©n³Þ¿Ä‡†p D4ÓÎ?e; iáŠÚ 4W¦¬* BtM ÁplF0ƒjLS"A —¶ÐwöÆÞƒëþ"""""" â""""" ,A—g0ˆhYU«dà'•b†©¦76$pÚ‹{Ö—Õ ˆˆˆ¸ˆˆ`‚![' !xaFñåqBëÿžu•Òªé=a}zT–ë‡AßH%ªU¡;UõEqËÉ.¼GÄ{IýC¨´NÿLB§ß†˜T=O„<&`B `B QÁÎÈVL²”ßû ù ÿð˜Oæ¹T«Êó—ÿM=;¨pÓÿ¾Ó2VÊåKïô=ÿº®&W x^úÿÿȱW;1¾B°¡pü|_ÿ÷‘!º¦›åq‡ÿõÒ÷{ÿÿÞ¿÷ýýõÿõ÷ˆ†¿ëú©Ïþ×éñö#¥Î#UúKÿÿÿŒuÁPŽGãtfD¹dadæCÎD6Jò¦’ÿÿµÌƒóºò¶Žõ_!8‘Ñ¡çL"Ç„Xì Â!C ÁC É›‰Y‚- L¸%4ýë¯]SOÎõÌ…–¼Ò ì., ƒ œ"ùª>t]ˆÑqÚF·¸EÀi… Š!ä_ÿÝúç(J—ê¸Lº&ÒøAÃ'ÔÐt¬u]Ò–ærVá6 ‚A°áÒp'wÿÿÚ¢ “Š `Š M#A™Æ 2ž3"œÉð¹¸ë#™Éx”ÅÕä×ß¾¶ŸÖé¿ÞœZm_ª·t›IÃ83I'ûßôâÑ­¡a†Œì ÑHL ÁQðA‚  šÁ‚—Là¦`a¹„‘ƃ3eÌÔA2\RxÙ’S²æt;?i–d-~šé}¯b¿ôö=+T½ûÿÓÉCI¹†Œü$Ñ®mx´khmèZÚL!aXF°ÂD>¥¸a0ƒFp ((A¢œÏãÂ_×}÷÷þ¿ê?¿ÿãMì¹ ý†ƒ¤ ¹êÃ'Œ2ê¤é6ì“äò“n‘Û× & ïW' 'Ñ£„¸Ò"þ|Z|ÿü²t¿ø{ðõ¯†úWûÿÿÿcÖ—Úû¥ÓÓî®í 6•²qö[m¼$ìÕáì2n’l2Æl–4­¦ÒmÃ%pɳ#_ê+õØÃßöÒûñßÿî–ýï§ÿýÿÿþ‡ëÿJï_K¡]ÕÚ}¶›íá;CÿïÿoðÃõöÿë×ÿ÷Öñýÿqñÿßÿõ·ý_ªî“ûÿþÿðßí÷ûm¥¿áÿÔ&Ãý£è/øuþµûµ·{_^»úÿþÿ¯îg¾ þ¶—ƒ¯áÿÿø,?þ×åëýƒEëþ^¯ü}REî<º£ýï]ÿþ¿öÿ½ÿ~+ý?øA™UøVÿü/ÿ{ÿÿ…¿ ÿëþ³¿zþöh·ÿývùÜúwµº¿]|Êß[ÿÚ±ÿýa¿ÿÿÁ]Ýÿð¿ÿûÿá~ÚíÿæÓ½g_Ô|ßÅ·_ûÿz·ÿáÿû‡ÿÿE¿õ·ÿøEÿÿ×ÿ‘Ó~Á„¶ÿo´®»¯ÿwKìÍw_þ¡ÿoTíýá½ÿÿ鱯‚ûÿAÿý}ø¸†q„ 4í†w¶–úÁ§Ú]öa…µýþB=‡þiÿÿÿÚÿú]4—¿Þ—½}é~ÿÙû $â &ÆÅ( pÂA ˜AÃZ 0“بƒ0œ‰'ÿô“‡¿†•ëýŸ¿Sj¬ÏÿlÍoúþ¿f¹¢×ïû4^þ½è!`„DC'˜A„1†¡ÍˆM1 ‘ºa2N¦úÿú¾§Û KVÕ†ÿ½´¿íÿkýÕ{_ïKí~Òÿ3|DDDEÄDq%Ó /ýÖ¨6ÄC ±V“ä áÅ&›GûØöÁ>ØøiéØR:¦­Hê⽃Õvÿmt›ÿïÏN"#ÿƶî›QR1ña¤Ðq@ƒ†h â!¦ÂD4ôÄaÒ Ø ƒb‰£ á±V“i'kfÒt¿ú÷ ¡0RÇ,€˜A–0!Â!¨é´¬ËwÉBw‘Ž“ &­'#{±I„ÚŠb‚`ƒA±øDt—ÿïY ®#B"""""""""" Áˆˆ0BL&0„C a2‡(p@¬îS©îÓXÿÿÿ[ÄDDF[4.—ÿ¯OûÒ*‡ÿÿÿá„—ÿúÿìUîx/ý‚þ—¯þ,/ÿÿïãÿÿøAÿõÿ¿‚#á„GZþû×B7ëÿÿ~¿÷ü·pÂÚõÝZì¯Tüv.˜ãßî×GJS§ýµbŒŠ¨û÷ÿĆ22¿E$vµÆ—}ö¿÷S"¬(R!™+G²¡ÈB"yìí9‹P‚Úiý­éúxU0¼Ö“MBe ‘Ö"Ó!ßû´¢®ö$ƒ'’£^Œ„ƒ=„Öû²ínïõMža݆? Žt&ƒA…UõªM}»ö>å‘!‘¼3Œ.E‘¼zÿpáúÛÂ-Æx½â#×ZþTû|ÈÉ—#F~6dç‚å †güäugXÅFMøýÇû}ð„0¡ LB-à¡0„0PL0A› ‚"L›‘›ëÌ´È5äoîÿé~Èíö ƒª;´khØÑñÐFº6…¯ê¾¿þéWüXN2ú“¤áÂAÒfsA*ßú„zðãA64lhZÚ£cêNØ[F¶‹°Õ8°š41¸â"t¸Í’a ‚ ;#ˆlh0¥Æh)|¾qÙÄG Î0~PF™¸èd†©Ç¿ë_¯ýnû¯í$ªÁ™=Ùô'JÃ%–La:Rð ÛÒV‚mŽJ44ƒÞVš Œí6n4^4?Âa · C˜á‚®Lƒ4![™h§—þ?ãÿû†·íª«z»{]v›vµô¼8eÑ6®É„é?Ǽ¾fb†„“ï'”›t›dvè $hȃè38A„Ò>‘­¦l&£áÿëÿþ¼=‡ûÅ%ÿêµý~é>‚¦ÿêèwõÿÝ[^›W“´•´ÿ¤ØaÒßk°É?I&Ã'Ô›F»C÷ü%øWÿØ{ëÚ«ëãQCÿñµÿCWÿ~êõëµÒ¸Õ×½/O¿i.Ðj!+íú[,Ø'ÿ„aÿ‚õþ ÿµKãõÿýh/ÿ¿aûûÓwUßÇ«ïÿý‹o÷CTµki¿ü ›ý,4½ðÞÿkõæ×.¿ÿ¥ÿ-Gõ‡ÿó|Saúÿû«ÿÒ“|_Æ×ÌÖ¿¥þâ¿Ãíý¨j·Á?ëÿãÿ¯ýXÿV«Ãùuû¡þ®—¶–ýëÿþ´jÿO»×°‡ôaÿÿÿÿû…oÿ÷œwAXÿÿKì7¾]]¹zôX;Ÿ ýë·ë×¶¦>ͧ¿ÏÀÁ:áÿßÿßÿþ¡ðßÿÿáCÿþ ¾ÞŽ=/ßý?ÂÒÿ]_ûWKÓ­*ïÿûšý¿øA`ÿþ-¥¤oÿÿ·„L†Ûÿûÿ üŽ®“  Øh4ì äW=7iZý]ÿ}š+oÿû¿þ½ÒßÿãcIÃÿÿúH/Áô˜¯ÛýÁõqA4 ‰C¦0ƒcˆaa†M¤8j 0ƒÞµûW³5ý÷mÿ¶hó‹ÿúªßÛÿûë÷¿ôŸòÇDZh2p²pe {±Q aìBbխ붆ra…÷Õ³þß_kô·ÿùùõÌÙŸºþÅ/æÓµÙ§îßÝSüDDDlDDDDDE°X†›Ÿ ¿fÁ‚JÞ6ØÝ/[[TûOÓ§×þÒî¿ÿïÚµÍÝ™úÙž¶¤ÚíóÒ„ƒdc ƒi¦‚ ãb ŠA á ‚r&à  ÐqÚH0ƒˆi§õh;U¶5m.í­_a¥§Ý¤Ý6º¶¿Ü³aa4!„@Ó*« …µÜ¨m4Ä-Sdœ( ˜A±aÓNÄ¡ì4‚ &Ð@Øa A‚ 'Ä0šÒiâ“Óa±éEiæÑn±-ô± &‰Ð‹%šzi…Ÿ ,1 î™' ÓŠª   °ÚA¤cŒF¿ˆˆˆˆˆˆˆˆˆˆ» „" R¬«L«A…š’t×Ö”DDDDDe›é]­°‚þ6)/bÁ~‰Mj~3ixk«®Ò‘Ö+o\®X®‡¢:,"â ƒ¹g5¿”?÷u “c&W>@‘JDYcôŸGzÕÄà¦NJ³&2¬Á3%<ÎÿúA§¿MO=5RX0_ûê/¦0ûØ~ë#@ŸÔÚëßã36Ü_ì®ü_wýúÓ°¿ºþ8ã‡ý»ÿð×ÿßÿÿök<`Êx¹’ Î0e4FåÍÇFA²B)%;.Š<¥¢4¿_Ãÿý†pEÀ`¡0TL&˜&š!^0ƒ ÌÅ##™„c8Œ#†h=5Õ2ÜG’ÿœ_×öA´›‹‰PÑÄî5´-8´kam4hhÐãBдÑçDuGX*뮽¤¿é×ÿm+I¶K!„A8aI¶ƒ' O ÐXF¶tƒa„A„¡¤8‰IƒDQËò-’Ò0Där:dd¥u¢9/ åé%üÍ/ßðÃVé¶›í^›WdâÐÓ«®—éI7NF¶ "àZ.BBÙ 0¡0œN8a3Äph…D"z  ƒÂyq„Á ÌÅSH ‰ãfB3ÉŸͺ\Û:<Ízßâ6ë_éÿéh[¦6÷[vÒ]v‚A¶:eŽÐA½ Üa0ƒa†Ã¯j°‹h‚8°‹€Ñoð‹v‹†0˜A…6AAB Q °ƒÁKRŒ›F3Ã3ŒžFÄ^'?Ëu3Â# ûÿÝÿq×ñ©!Õßõb~¬2q]¥¶NeÓ²|Òzm&ÝÃ']“€‘Þ™cÚ‘ŽÐN‚ƒh Þ‹ç7t^$5†±á~\XE»-¸´ë.!{±†Òµoü}×ÿá]Çõ]êô5ŠM¾•µ­íÓ~Ó¸‡iÕÚ Ô´·Ò½Ã.t›d±¥º[#¶8Éßodw°¬&7áÂ3¿¦¶»ÿÿ¯Ë×üÀâ”9j¨Û«¥õöÿ×ÿöž±÷]_Ò×Þ­§IÝ'iÚN—´¦» ž0ËÒƒ  þ¿ð¿ÿô¬:ïXzÿ¤ÿ¿¾ß_ÿßø"Ÿÿ®>·ÿ×_¿{^Þ—Oú·ÿE¹Ÿ«ûÿÂÿøV÷FVÞëß×ß÷ÿßû¡þ†ßïZÿïö‡íËþ’ÿÿþºÛ+”ªÿÿ¸ÿÿá<7ÝxFxs²Ñ?ÿþjÿÿÿÿ×òc”#üŒr‡P÷þ¿ÿÿÿïÕ{×Ðw·N—Ö—ÿýÚ Á¿Jé,ÊæÿÿÿÂýÿÿýüŒ?ÿÿÿôO_îÚÉ?ÿjþûúœ_ý%ûuÿ¥½±ÆßOþëÿðEûëÿû_ÿü7ëýý}ÿPCÿú_¾ð›ÿéYŸ™ßÙŸköh©ÒÌ'+"ÿÖÅßH/ÿ¯ÿm/ÿü7ïýÿ_õýcuþ¸/¿^Ò•Ú_¥¯¶´ïÛVÁzeúl/^Ÿ¿Ó¥ÿi}}ßÿÅÿáÿ÷ÿÿ^þ÷_}ð¿ue¸'á„›JÛI4í+¤ÇùmŠcôö)ûWK3DtG¿¿F©ÿf‹××^¿'_ÁzÛÿ¿þ¿ÿþÿY©i^ºá×®Ä&+ PMÄ㨄Â؃6˜LD 5NÄ8k¡û¥Ö»¶¾—ï]þúFIݳ?ý³Dÿ¯ÿÿ¿f‹ýXïÿA~ÚX~W,a‚b’ÇÂaPh]“ƒ5%E4Õ2C¨„¿÷V›uÛ *÷éZM÷þ·ßÚM÷Ú—ÿn½µÛ¿ÖÝ~Ž=w4_¾½ÿ÷Ç`Xˆˆˆˆˆ`„_ð†Hr6dH"X¤Ób¤J!Ã#ë ¿iß!M­6;í6;[[Kîû_¿†¾«íZÿÿìZúýˆVØb „ƒNFø"8FNÆltapq ¦6!´ÚLC ¤6Âi°Â 42?{Ú]„¶>Û´õúËr±_¥Kÿˆƒ*³ # &A‚ A2ps£^ÂjhSŽqÔ¡ðÙü0žE5Û±ÄC ±„A´pa\†é ƒND!ªÐMú_ì󈈈ˆˆˆˆˆˆˆ‹ˆˆ“ DŸ3"88‚pa`„C kÄ*§a&žÓ#A¸@Ûén¿é<ôâ"""""3lB!‚ Ú‚hF„·º^—úN“øˆˆãÇÄô¿ý¯ê¿õÁ?ú]õìâ…7Kü0•¤½qبa/2[/û ŠO¢m3ÿ‹aÃòÎ'—@ƒ/g ˆ"4ˆIøŠÐô ‚ 2@†$ 2 ! C‘ƒ%Ëåt‘øî¸§Ìò,¾á„¦š =h{ÿéu÷ÿûÿ×÷I¿ÿ\_L"ß‚‚ À¦ÆlfÍæ‚”Ò5#R õͳ¡‘Wœÿïþû¯ÿÎÊÿò#ò²¿óãе}è×Ñ­„\t!uz!b0œ#„ds°Aÿÿÿýëþ¾¹3ÿ«†]• Ù Xä ŸJÐAâpuÎôãFæØl"ì\_ÿïÿë®p ùysÙÌèÉ—ý}uÿø·ì*ý/}&Òí· iðÉÌž4¬;Ó3äíÿ¿_ïýú{`˜ `‚ ›2ãO.2qÈyÍHð©Ÿfá“™œlŽÜÂŸŠ HÂ7šy¶C"|æ§C*"FK¢WÒõÇýéýt¿þ^:ÚVö©Õ¿]¨Oÿúþ·ýwèh»hÖÕ D;‹F‡$ï4[°‹Š3УC ‚a0˜DÇ‚„4!„!CÐ`˜M¼ ¸Á‹°Ÿ ašÊÉÆAF3Î3ÆQ›òˆ“DtEÿÿýª¥á‡ÿº_ø÷þÍOú¿ÿélŽÚZOȶù(„pƒz70‚ 4ƒ¤‹A6Œí‰P%@h ú7B.èØïF·„]°š‹i£C,(D-–ìÀ¦l‚‚‚`ƒLñ„ ‘Á,%@fb–ëLøïÿý~?Ûþ¿ý¿«ßüW}ÿ¾½§I¾Ã††\Âo½¼+i:Z¸eÌ›¥´ ÂN'¦g¥lšrxÒwt›F‹"»A8a0˜$›thz6ÕBFƱâm÷hÐÑ¡¿áÿÿÿü½>ýcÿÿÿÿ¯Ò×KÿßOÒWÿº]?WÝЮ“mz^–¶+½:VË´Ë¢m&ØAûÝÒvIéa—>áÚ]Ù.'ÉçI´œ8t›H8°»ÿÿ_ú_¾õÿÿëÿ×÷¿þ»÷´†?îûÒt›_îÿ×ÿ÷üumv¯jí%¶…'t­þœ;TôÞ•«»¤ß°¸oßÿÿÿÿð¿ÿ÷ÿø_×_ÿßÿÿøÿÿûøë÷¯_ÐëÐýÞÅþÖ®õ_Jǯßô¾¿qàþ¿ÿÿÿõá?ÿÿ_ÿïãûüÏ"ñ„GÿE¨ûü°Ÿÿ­ƒù :¿×ÿÿúÚþÔ}k¿zú Ž‚ãVÿÿ÷ÿ·þü ¿ÿöÒÿõëãñ/ÿ×ëþ?áú,¿×ßþ]OåÕü†Ú¬ž±§û¨}ÿ¯_Äpûÿÿ÷ÿÿþ‚ÿÿدÿ ß÷þÿÿÿ¯ÿ®ßá]ëúÿ ì>øZóWUaÿîòÂ’ 3á pJæJ~¿·ûûfŠó×_ÿÿúÿëÿïï}×þÿÿÿ‡ü"ÇWþþé]wÿ¯†ÝR\'íûõõ¯ø&kÿýï»[_]~×ÿt½?ÿ£ÿÿý´»ßÿßþ[öðoÜ ¿ß_†—ýÿ‚&?ÃÜî÷Â3ÿF¤ýýûÿo®ÚL2úþÚm­¯ ¾ÓK_^þêÿÿÐ__ÿ¯_wÿ÷ÿÿ¿Ú]}ïìWõÿ ¿ ÅGá/¸¨ÃõÿßþðÂÄC@˜A± †l0ƒA†!C…1DC4ìÇi¶­„§ÿ¯ÿë[¶©ofÿæŸíï^a?æšWùåëèÐ ïÿô¿wjô¿wÿë¿öX„ÈÇ4ʰ@”÷ÓäQÂbqá‰N“h18ö‚ v'aÅ1È&õþ²G‚;i}Ÿíý†·K¥k}ÿk÷è;öúÌÿ¶ÿÛÿͧ®Í—Ù¢ªÿÿþøˆˆˆˆˆš!(´0„D2ì¤ÂhY- Ð&NCÿúÿzöÐW°`¬W÷ða-v÷¦ïVöK_ÕÿMXa/íwt½tצÂÿ¶­f¿ïô¶Ìûý³DåºÜ}qqõÿúÿ $aÅ4†8»b­$ÛJVÓ´¢Ø¨‹T톃M†‘Ç2é=lÚ´´ýé­Š»^]¯ýµÿµ/庠PƒóÓÿÿùžGµü1á„Ul&”âlPbÃi‘ŽÐh=68†ÓaÂl4¢Âv»X'Ób¾ÒM{´¸ÛÛN›«^“ÿ×ÿ¡vù˜õÎ6†ƒA—`˜Lµ0™…¡“€B' à ©‡Î9CÃ[AŠd|Sì+dc ƒi®0ƒ0ƒ8a ƒ 0kÃiúÿÿïú_ñq ˆž„A„,&ƒ i…;ÙNPø">Îø«a1²7ME]ÿÿÿÿ磖–{†ƒH¿ÿÿÿÿJøâ#í/ÿÿÿÿZÿà ÿëÿþ’×ø¯ÿµ÷ïûÒÿìÿÿÿëãiÿÿúíþ%õÿÿÿ½×دÿÿ×_ÿìAÝûÿ¿þ¿|l¯ÿÿÿõ¨Ëq6W|ˆû7ýÿ{kÿü)‘™ñû­¥¯_÷÷uÿ‹ŽM®í«jd…ÝÃÿÁñǬq™yŠ#²–M˯¿¿½UnÓä´0EH)Ù„d–3ºŒÖÎôŠå‹ÿÿûýn á”YÞNƒMUBeq ¿¾þÈ ú¦½Ù=è°Öý¿áV¾»[´òuM{Uûÿû‡ÖõüC"L*aHG0uj½º÷ªýÿÈ_â#Ž ˆƒCÖ*8þÿ_ñÿÿõæK("FqŸŽ¬¤ò¿å¼ÿÒ"H‘¯þü(& ‚`ƒ2\8 d1$ NË™ÁHy¼¤!FHSçЈђÏý/Mr§™Ÿÿÿ>9°8‹F¶‹°Ñ­¢ °Â¦300‰¸g‰xP˜&6!„&ð¾µ®ª¹ þÿ«„›d°–Rm'A6½'' &ƒ  ƒèÝBÑ­´èØÐ¿\Á’ ¢u­Å©H”½~¿ý=4ÚV–­Ó†]†NÿI[¾–Ée&Úa%m|…q ô‚f†¦ œÕ32? ‡$‚;dãË™†\Ždxó0FÆSŒøÔÌTÍA#H"¤y¶t5:C”ŒG²“½~+mWÿN¾“t*í½$ßë´Ú»Öìœ}tlê=0™€à¦Y´Â&8h‡‚ݡń-0Œôg ã°ˆw‚ &ðL Ñ áà† ‚ ØÁË‘ S6\αƒ:2ŒÙž2‘#6ÍW’Ëßþ™qW[¡÷ñõßô¿¯×¡ðË™<}¨ •ô>F…6¢‚cAè8<‹bTRn&¾’/œZ5Ñ­Å£[Maát"ѡŢ݄,†,&0P˜!æÅ6ËŒ Îds1‘ã‡á÷üuÿ÷Ýÿýqn”_ý:O¥:IО>}ƒ/®Œ:KjÒ´™n\û$å½ö Ý:N|œ2é« ž4Ÿ'm&Ú 7 žG„qI»A7áÚ!Žæ°Â¡h»øBÂ.Ž.õ /ùj?¯û餗ýwÕéÿp—Q…IiV4µ««¥ëm ~﮿»¶­Óïô]—Dß»Pƒi<¾i8dON “£[dpÐO†ˆ>› ˜]‡¿õÿõì?ÿÿô]z—_ýÐÑ7Šúëö4©oô×ÿÿØéö=$ÿb£úéz[µ÷OÝ :¶ÓN•®Â—Ðai?ÖÃÿúûoÿÿ׺ÿÿÕé$I%Jú_o¨èõ÷ÿ·¼_Ý}zeÐ_µ¯ÿµö÷_AV–ÿÁõþÿýü7hïIÿþþ×ÿùjî—H%.­j¼úÿØuÁÿü8~—½¯üGè×üÿ¥ò1þ—vúþÿûðý_ÿÿýÿ_ID(„ªô«ëóUþþ ­ƒÿ݃6 þY?þŸË&ù8)ý…ýz[Å·÷o¯íÿoü;UÿÛû±Ýú_ÔUê—…ÿÿöý¾ÿÛØÿÿõð‡õþa/û„½9Zîªd©Ó÷íŸýëô³EÓõÿýÓÞ×÷¶ºuú×á?ÿÿÁ¿ÿá± ÿÿí_ø_ð¿èŽ«þÒ[ïoµaŸöþþ›_í~Ìö¬ÏÄû¥–?÷­| ¿¾þ¼?ƒÿøpÿÿÿÿÂÿ…õïöçù!ì4›Kö;Mº† [¥ÞîéZ«¶ÛKþÍëÓ꺪EÿKÿýÛÛÿößÿÿþþýÂ.?Ú4}öÿÒÒÇ`ƒ6ØIŠdL ¶•m¤Ä;m¶Æìî«yÎ%¼çFÕüÔ¡õÕwÙ¢ÿü»4Yåý×»~߯ëÿÿ¥ÿ„¿¾gÆÇØ ÂÐdnƒƒL Ä.)éŠpƒc0ƒaS@ßÃ]ãÂ^aZZéø¥ *N¿fkm~ÿíì.µÓ¯›òW×ÙŸ½mÿÙŸöh¿¯û4Uÿïíµñ3áJ °B!¡ &VŦÅ,4LR„°•ÒQQ¦•« -°Á}Ðiþ“wݶ—·_ì0—izwì5ö_UÿmWÿØf{×  °êºâUV”Cb™ q ᫱ dGm¤˜AÚ°ÒM66n•†žžÅ'±ýگà ¯mëý­5Ù3Kp™P©„ÓA…L*¦¡‚2Nš¦ì˱L&!:lPM8¨ ˜A°£blXA Â ¤AÐ@ 6!¦ ±VzÚvÃM6+øˆˆˆˆˆˆˆˆˆ`˜@Á0„A„""uG]›Š Á0B,&ˆh0ƒH#p™‡G\·µá…Úr1Ò ;i‰Ç@„hXM¦»ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ†aˆ0˜M ¦'[Økªb""""""6½½}ù\b¨&d7u% R¸ÇÜ ÓÎÇŽÔॗFQwÓ{¦ “FeqnkïÚ}7 ¤« wY•ò$±ÜòHµ°¿kFxFŠ~vW*‚‚‚•#;¾#‹ZOµ»Û¿ª‚“bÏøô4;¾î;¿õV¾Ÿ÷päØ ¼©dÊÂ)kññ÷}Ý/¯ªägÿÿÿS%–t<þr3‰ It…-W_ÿÿÒá0†`0M3* ŽŠB `‰N¬Á’ 3HÐf™³R‚5G#ì£'<ܺùØdŸÉZÿõèÆyˆ°’T Âa F¸BM Ø(M°ÁA`¡ÄAˆŒ_×Ô“ÿý.‚“†O‰õÝÚG¼ŽNÈí£ÛÒ ¡jxœq8íQvâÐe™'•(è”Α!¿)IWP¿ÿõzê· Ã,²iÚ“´Ú¶s¥a’ÈeúpÁ;¥-òxÙ(‚a°B ˆäX%C `™dìà ÎJxÃ4 d2:<Ê(f Pž`ކ©åÈÔEhŽ™Æ}š£¢<²å’ÿõýßûÝÒé×­vo½Vq§hQx›MVyEÛEÄ! !a„Â.! ¸i„N ]†´hh‡áh0ˆzˆ|Â,vF `f`˜ Á0ƒÁ‹>)±lŽ0A“³A#ÖV#«Ê¶tGÿ­ÿÿëþÿôÿ±ßêÿI°ÉÐi Ó¥ ­á’Ë œ#CA>‚l#^té7";IÞF;ÑûAÚi„‹Àâ'„й;j,#Xa ‘»E¸aJqL Ù Á— ÌÌ êÐë¯ßí}¯»_Çýûÿý6Ô/Iéö÷i¶Ni:N7ö––h¤ØaÝ–@ é6j A>¥m;H'd° Ú5Ùº †š“¶“o6‚pÖž‚h¸qan?¯¿ÿÿãú.¯°ÿÿõý¶ý/\khRÿèWÝ®µw«_ë]¿VÚiÒvÖíB}Ù8UiZ»°˜AôNôßð_þ¿ ÿáþUúßïõK]ßëÔ4ÿVþÇßÿ~þ»ÿ¿ï]ÕZÕºw½&þm,2ïÔ"ßÿÿ…ÿð¿þßý¯æUÿ¥Z_ÿþíþÿüwª_ýo»×qê¿¥z÷Ð_ÿþ£ÿáÿÿß޵̈W÷¿ù«üµÑjéü?Çÿ“Ýwøÿ÷ú^Ü~÷Öß¡Õô»ÿ_Òÿýûþÿð™Úp„/þŽ=/ö~üÿÕ‡ø_ôº¯þ¿ú_,gäðßÿë¿ÿøKÿô¿¿ßþè>ÿÛÿü?ø_ð¿ÿ†ÿ_þÿÿ ÿ×ÿ½RX?EŒÿ__þÏ¿öý%þÌÿϯ_ž¿¯¿úLWøo¯·ÿ„[ïÿÂ-ÿKÿ ÿ¶¿þ¾Üãð­ÿ¿Óm{î÷¾×µÿ½µû¿KÞÉHLð¯Çÿaÿt¿ôŸÿðÿ¥ÿìTW_„\ÿÿßô­ ¡¿ûñ ƒA„ ù‡eþÂÕ´¥…#«â“ðu­­ý§ÿ×µ]ù:íß¶–þÿ¿é÷¿þ‚ÿí/¿ûØü"âííöIÂbPêÐanl{‡„ ŽI‰CˆmAÄCPƒA¦r ÎäIÌÅýë÷ßa©¿ë³?ßìÏûûKÏyçýoþiûëÿL~þ•¿LR[ÿmðÁ4 !°„ œšaHdž½‘G¦ØA„§ßö¿^ÚÁ‚éZì0—·í¥«g¯ýmÿ†µZ_ÿê×ÙŸý™ÿéoù:¦øˆˆ‡—±B·6"ÁHKÿí¤aô†›ki' í4â­b¡—Ó´–í+Í­ma·¦Å;·ÿ¯Ýk¶—ö­«_žÿmvÉñqW×è1 ;§M¨¨ ƒ FńġÕ1„bƒa«Q„ äA„Hiµ[a šiÄ4Óµ¯;IŠ´öµÕxal6¿Ñ©§ÿ°`„DDv&†™8A’€§xa wMW¯d4Òi´ôÄ$ÓM ˜AÄ,   ƒ´ša„ëˆpêö)D º\'ýþ„DFceƒ ‚ˆ0„E—hD„&™G;à ) 18÷¦F:b‚ ÚÝ-~ÿüDDDG0ƒ. 0„ÕmuÿþüDDDDF”/T¶¿úãÝx®>½ÈÇ_ÿ]6!”¢Ë9Å‚ÿ¤Ò¸ÿè5¯þµÿñk®HtØlÏŠ}‘ãcÈÆ<È–*¬…~š~¨Z‚„Á3±&Rï ÿŨOáyÑáANô^Ÿý¤ƒáÒ}ÝÓ%«ïý3"›ô>ï¯ý¤¦\`¤Øx®˜k2°ùu ýåë>ýþÃùeôÿÿÿÿïþ×ûúPï÷ýßoý ¿ÿð¿ÿ×ÿÿôoMÿíõïÿÿü?¥_¿ÿæ×ÿ-C´ºñßa×K4ûÑÓþÍÙ¢ÿ¯Òÿÿÿÿoûúÿÿ¶íCøo¶ÿÿµÿ†ÿþûÿÿÿ«_°¿­Ó~êþ’ûkí­û¯ÙŸÿšî¿ÿÿÿø?†ûü7ãûÿö?îÿÿ¯ÿÿýÑß^ºàº†þ¬RýþÚ®ÚO÷Z¶¿úú!_ÿá¿ÿßÿûvÒ¿ÿÿÿ¥êûÿÿÿûû_Ïý?Iý„š@ 9úl2=iÆÚva6¿h?´ûý/ÿÞý³Eÿÿûš'ÞÍï·ÿ_·ÿïöö¿ÿ¯±Çá/ð‚ÛDz B *a;4âƒA›L[ a¨Â lˆ<&Oëÿðßð×õÿ_µ:-¢tûk^C_gÿÝÍ:ÿwû4___ÿÿý5è/oKÔ·%DuÄDDlD0ƒDA“€š Befx´É»§M4þ¿ÿº±éúû~¬5¿´®ÂßßÃUûõá¥õùÓýµlQÿoÿ³?_M³Eÿÿ×ý–9O8ˆúÿþØ am ÓM˜A„CNa*µ‘0RªvMŠ´Óm&Â(~Çv¶»ûƒ¡­¥­Úì5ýûVµ×ï]¨~OBÿÿþÿl ©¦šA0›QOí 8 ƒh Â Û DXA´v“äI°L&ÆÆÚLFÚv› ºlÇúìt×ëozå¸RdYë¯×ÿäM8ˆˆˆˆˆ†YXL*a0ƒDZ*i˜{(pDtNƒ›ØK*&F:j)4à „… ˆ´q†‚ Ðl/0›Ù„؆ê×J«ÿÿÈÛDDDDDDDDD Á`PˆaaY2à‰„×Ý4õw#SÕÿ_ÿÿWÄDDDDDDDDDDC  Â œaWî’ÿýt„DDF½„«ÿÿëÿ?ÿÿõWjÿÿÿ&Æ„¼2ÙWÿÿéj?ÿÿê ÿÿö—½ÿýVïÿÿñ«Zëÿþ×&Ô­oïþèy\žB V+ù/þ½ByÚͶ¿þÃZ݇M¨Åßþ(›³+ŽÊ£± ƒý5ûÿû…*H(L쥖æ½Ävšÿþ´õMB•)‘«+âÓ ƒ÷ÿiíÄhAÝ<)í4û_í>þ;ï¢âüÉel ÂhZi„Êa…×ÓîáÐAß©-ò¸’DB"" ,}}¯IߪêUqÿñýþ¤KR!³¦y‹U-ÿúÿD(䬋”BÄ0Rã5‘qääxSc6)e‚"#LÙž2ŒÜj2a¦CdŒâÓ%—¾S¯ÿý—0uµEÛBâôý(0P˜S„a0BA…TBû " ½zõ\Šez—ãöN—t ƒlŽÛ%÷ ÂH6ï J†ˆŽEàhZa4-2È3lêD<ät"rS©y¸×•Ÿ%™“$":!æÑ‰ZU_UÎÉ/_^õ­°§Õ·kÕ°ÉópÂa6AÒmÃ$é#†á0BA‚`ƒ  ÑÌ" ƒ  `Šl‚ †! aNÌ ÊXõÌ ÈQUêBó¤A¢S­¯y6Ëÿý·¯®ëÖí;´Ý;' „);AÃ3!3]¢íÅ£]Þ‹·qhÖÔ!z„Â.áèXA„0‹ˆDÇ "d;ˆaP!qL Ðy±AQ 2#‘Ù, f¡™s Ú1Íg$óH"Ÿ6g™Ö!ç5͸nmÍ'/ÿº¾ÿýøÿý~·Cý~ è&Ù+¤é;$:H7RQIºdWa„ #CIÒoF‹h'AkÚ66šjk£[ÝSiôÂ5Â.Ú‹v…¢;40…¢„& ` ƒD, o0ƒÎ«¿ÿßþ×¥mÿ·_ï¿ûjÛA¿[hR°Ë8N–aé'­l2p’m“êºV ž…м¥a¦˜I6“ì²C ÓL n&Ý ÂI»»FÊ„^…ÝÃÞ?ÿ_þñ߃ÿïëýF­^¼Ûöû¦½%ÒzèWúÕ¶º}÷T­oIÚ¤µn›dávúM²} ¹—Úm’â|ÒvGm“u'm‡'m[`ÿõÿ}n˜ÿú¿ŠþßÕýǯúeÐ_m¿×µý§^¿WU»¯¯§÷÷é^…/¥ëªmv¾›a;8nÓõÿÿÿ «`¾¿þ¾¿Ãßþõ×Äé?è{ëþß¿þ‡öî¾Åo´ßÓßþúu¿÷aöºUÿÿÿÂ3ú „XýÿüøÿZOwòÒ~ñþ?¥ÿúZ¥ú_ªµÝzuÿ¡ÿÿøoxÿÿ»ÿú[jûÿÿèÑý‡ÿì:ÿúýõ®]uÿK_¹jßË ½iâ°ÿ‘ºÖ—ÿý+ßðëýÿÿ¯ë } {ÿûþÿÿá»þ½oÝ ¿áýõý5®?m:Vï/SUÿ–ÿÿ†ßE·Kÿÿuýcë×ÿî½/öÿü?ÿï_xF}þÿÿ¯œ}}ÿ8õ z¯j«ÿ_ÿÿþý½{[ÿô¼Ï×õÿ¯úÿÿðÿ×÷þ’_øEÇýÿýµcÿÛ®‚,{ÿÿÿÿÿÖáÿþm6«Û¥ýw×ÿëú½w¯ïÿï{ÿ÷ñ„¿ô¿¾ýÿЫ廸ØÐN ÿ¶“ÿ÷ÿÿÿÿcˆadWl4‚h; &Ä7a¤ØA­ßkukö¿e‘Bõn¿sEßf‹ö«½³E×ÛúZý×··õ¥¿üÿÿÿêAÿÿh2Nøba8 ›$úЉCÂa0„ÂA°@ÙÄ "2 ZùϵÝ/Û]Ým=~½ÿöÌ÷i³?4û÷¥Ý¿m«ÿÿÛ¯ÿþß(xˆˆˆˆËpBÂa`Âa0„Dg¹¢ŠbÓ$á ½¥i6•íìmÝ %ÿ÷°Â^½¶¶»~Ú_k -¿ßSkÒìÿÙŸ÷íš/ÿïÏWK¶gñ¡’ʬ!Âma¤ÃHaa&¤La&Dv›¦›Q †œRlC´áÛh$ìO¸ÚØØöÓºû´›]†˜iðÂþééëú–åâ#…ñA„Ðb©4ÃAƒO‘½Œ4ƒ‘M‹b‚"Aµ´Âh á¦È𦢫h$âŽÐpÈò{Úw_ÿ u`ÂVu_ñ—em(æƒ""L eÀ ˜B!’€ƒNøi­ ×jÓÓ$ê(1H0Õ0‚a6"A´i„a„‚ ؆ƒÛA Óbƒ”?׈ˆˆˆˆˆˆˆˆˆˆˆˆe„A‚ ††„Y,Îð×ÓÞ›QIÛB?Kqg " /SÔD~»þµá¤Å ŸÄSè>?ò¸;3øR«‚–ü}ÓÌ€àŸ|:hï,ƒL·33'dÎ2_ý&‚‹a0L(( d´Î֙؞D™Øªû](ºgdHïF©×S¾Â‚a MÌ¿Žß´šI î¢›¦úªÿ¾”qÞ‡}ãÚÇÿׯþ¢ça_ã¯ã´ÿpÿ™Uÿÿ¥U2XÍăÈl©%×Ê’_ý¨&< di‚eÆ0¬¸Îƒ#qƒ!Æ;5ó£:²S©d1ëùRõÿüažl*¡‚„(P˜@Â!ò@Áµ×õüŒÿ¾É=&ôÙy(¤‰VãGvœ*.Ú5°‹°Â!ÙslêóTD³LæuˆFuDnüÚ_×ÿ´ÒßVì ᘀ›¬4Û$ðm+dí¦Òtƒtˆ[‚`ƒ…ðfc0`  ‚¹ÁM ÌÙ‚!L'|G…}y‚$ ì›(<Ó7ÉË7) ’äCι«ÿ&æŸÆŸ_ïÝn ×®ã¥­¥`Ëd ‹F·hت5Ñ­…UF¶°‰»‡‡ Úqˆ{‹pÉ ¦l‚`ƒ…†.4Bà0L0§Œ `ˆƒ“‰N>mf¡”™A3q¨ˆÛÍÅDKb(#«"D Ïï‘»ÿ­ÅtŸuëúdÜIÝ' “mS²,4&g¸aM¶‚ >¡Á„ômUgs]Õn-Q­¡…BÑp?¸°¦ÉO6(D. „ÂeÈáA60@ϱœ2ヷ]â¿ïo¡†¦÷¦û º'zvúí}-“êN º:o Ë9|Òw 0’tœ2$^™Ÿ'—IäXo"¾™cÜ4Âa4ÂA8Fw†£pq£]ÛEÀqkáot-ÿê‹)ÿ\²ú¡KþëzÛuÓãØýw]_û׿½é>ì¿'iÖÆ›eÓa„Û°ƒ«º»O´¶“ð—÷dcÒpáÐO't{a„ $‘a ™ž[‚Þ»ÿûzëùbÿþ:öÒû¿ÛÕwÿßÿTýüý}ÝÛK÷Õ][Ö’¸MmúôÚïI[» ×w3^ÿÿõ×Âúÿ¿íÅuúQú·ýÚ_Æß_c×þñÿÿºVß§ú ¦Üqú}Õ»Kiû_õÿûÿ…ÿÿþdŸàïþXåbÿÿúïk‡ý­ÿú¥^–¿~£ÿõßÿÿÿÖÿ·ÿýfBb”¯_û}mÖ"ºÿí¥ú/qT‡aïßë.¯ÿ÷ÿ$á¥ýCÿÚÞ—ÿÿïíÿÿú ¿í4D\ÿ¿á‡¯­ÿÿû~¿_×þúºMú+öÁÿãëßÿðzºóOÿìÑ~¿½·õÿ½úï‡oí+íÿ÷ßýv(o÷_ïÿµúÑÇiaöúü%ÿøÞÝvÒÿö×K­½|Óoÿû«Óü7¿õÿö’ûmÓáÿÚûÿû¤ö¯Oá>ÿ¦ûë ¥ÿïSÉzÚ\W÷í¯ÿgÿ³>ÒÒÿÿÕw®ð¸ÿÿþ¿ãްßìBÿÿâ—íbœ \±ßö ßøE½ºëþÔ·2ñ@à ƒpƒ4‰¦Å6’ØA±MÛcn¯ÿ³>ú§ýçi³Eî—éGýš* –ÿ ½oÿ…¶”}¯·ý?÷ ½ýŠù’Ú Bš!„ª®6 ÄãÚ‘!±M6'ÿ¶»zM÷œõû_¿ýßÝZüâçO÷4_ú5xÚ¬Ó¯o~¿JØßÿ‚øˆˆˆˆ2ŠA a0°Â Ä$·¬U¶’ßú_PÁ/t¾Ò«î .Öž—ëíÃ[×ëk{U÷í,ŒOíúõuþŽÜЯäLjˑh!ùÃ6™H&˜A„Âv² á»  $LŽ­.D‡±_h;^îÖö5õÓê¶ %®Ý·W­ÝŸÿým}KuIøñö» S»^â4è4 †)4-”âšpƒ6šØá¤0ƒ È=†‘-A„M øí1LC ÃVÕa¤ØA±_jÓui¯añÿˆˆˆˆˆ‰šq`„A‚`¶ˆam2ì( e>qÊGíöƒ »µozÚ‘Ž“A Ø„qLm ؇°ÂLC0ƒFä‹&?ñ›¢#B"""""".""""64"kÃB" !i“ƒ &x³ÆJ)‘¸WáÿôÍ6Ï>"""""""â""ÿÿK¤¤ô”Þÿþ–«¤ëÐÿÿUõ¥Åðý¤d,W­*IT/´«JÔê`Šuú_â– Â XIB¯ÿa5 ˆMp â!¦TWóŒƒxˆ´ÂÂÊê« êè! cR‚8X&d5é âÓpƒÃ¡êz*3³à±a;COŽêšçdDÊ"+»Tü":ÞõÓÕ3!c+ñïß§ò ÿU2[JvªŠR+–3(f@lˆÎí˜X~"½5è ö¶é£½4šáB`ƒÁ?þ- …¿ÈXÈ‘D$^Ò{WMÓ I%]zxÓý>õô þû£Âž;ø"?Ôãÿÿý÷êŸõ…]â=Õç`ˆ•¯^ºÿÄp×[ïõõ_ÿ]'ÿU¯æD±³<ÈdH (3LÏ8}9Ñj¿ÿ¿ëÿÏ(Dt&aà `  ‚ØSH j™Â<ˆÖg›5#ZdùC!ç—¿ÿßçe?ëñޱLAѺ¡mP°\°‹ˆB lŠx(McîˆQáÿ××és²2UÿøDtÓ Òm,:M»#·V–ȰÐAäX¢ - DwªEãCÿÿë#‘2†Q³'2ƒ5£<çå!Ìò5£®¤ùJZ®¿ã¦Ÿ÷ëv«öOì&´Ðl2Y œàáÃ'zL6E‡ÿÿ|C63c†!‚ α„ & 0ØA‚`ƒ&\` Ñ ÌCHÁ?"e“’3fxÎŒ‘›2*¡:9õ:šç‘¯ÿ-É~©¥º×ÿõim;wí6×½ Ó°Ÿ·þ¿“Æú.Ú5ÑvÂî F¶! ôhXL&…N!` ¨2J)›$Á0ƒ0ƒÂaB3d0TBûD&KŒ2\Bs'eÌÌdï$2Fqžd?%L‘›mBÿãÿt^÷_ýkÿým«úÿþ›RÜS¤Ú5°áÒ—»²;mPF¼‹dväx'¶­ðƒlŠ;xœvi„<'N=|Z6Q­£^'ªhÖqhÖÑpÂaSF†7 "? ‚aÍŠlP˜(@ÂsËÿ¥ô¿ŠCúÿn®¿ÿ_~‡ÿ¿ouwtµÿûWÓ†_´°Âa;L'ì2çVØ@î ûÔ&Ø ÂÂ6Éc :M¤ì Û†’w’†“h&Ñí±¤Ú0ü#ÈœzûI¡„]Úþ‹Óÿè±oÿýWÿÿÿ¯îØþ½†Çöÿ÷ÚÿßÕ÷JÚ·Ýý]Úý§­'ݦݘëeœ éZélœ$›¦Ã,asNÉ`A·ÃA m‘ÃIÃ<¿ÿÿþQßÿúÿÿôßúþ°ûõúûÿÿÿýýý.ÿß××ýoßꕺ×}]¦œ>õ»AéÇÇÿÿþ¯ÿû¥ÿÿþ¿¼?úáì/á«_ßÿö¿Vÿöý/ÿúã‡ÿèj?é¤ßÿÿªõ¥ÿ÷ÿÿ¯ÿûÿÿÿÿ!‚ÿ÷¾íì5ørôÿ¿øÿÿÿußã ýo¿ÿö¾?ÿÿúý×-ÊhÂ#¯ïûýµ¿ÿþ¿ÿïÿ þÃÿÒaëì:oÿ ÿáÿ÷Uþ´¯. ÷ù’~Z´+̯øÿût?úÿàŠwïÿ¿ßû¥ÿú_ê¿ßÿ†ð¯†ì7ÿ‚ëþ ÿÿÜã¿ûÁkýƒÿÿ¥]ׯõÿØqÿm_[þÌóu_ÿ÷_ÿÞÿú¿íÿ¶o\WÃøEÇÿÑoÿÿô´¿ð·þÿÿÂÿøZÿ|/øyä_Ü0“k¶zý†’kûñÿÿÿ¯û«Òýðÿú_ÿ„ÿÿ±±õú4ðßÿýá?ÿÂ0ÿþÒ þúi Ø«Ob—M»On×ß¿½_m%ý¯ÿ é>Œå Ý~Ûoÿ¥ÿý~éõ¿øKÿpý}ÿ¶‚}ÿ îÿðñã Â CLah Áma!„0M „è*Ü2<Ä;†G“t­{¯ü?úJÚï›Ufyÿÿúþÿþõôþß~¿Þ—ßú__ºIûÄD@Ë€B! &ˆ„Ê "?†'t·n„0›Ä6"Ø ƒAô—þÒ¾í&ÏZÞ» %ß÷ÿúÝßëõ鯟gã ÿ·4_¶f­k³=ë׫þô¿¿AˆˆˆˆˆˆˆˆÐ‹LœA1Nr³ÿþÞ”A¢ ÍX«AÃ4¢­$íuÂí~ÐncVÂIþ»M×÷úw°Ò´ºøaoì+gþöÖ×þÿâ—÷Ëu…‡øˆˆˆ×þÜSL8¦ÆÆa„‚a8 Â Øâ!¶‚0ƒ0ƒ@ÚÛ 4Aª{a6;ì*p˦)²ÿlp`–ƒâ%õ_]ÿíQ*B¿ÿÙ'e{a™v™;+ ENåaX™áJržËòNsŽMü¨GRPœ1_ôÄ$kAƒv-…“cj0ƒ6Æ6˜i Óˆ=;´é°ƒM6ÓoëëÿŸ"."""""""""""""""""""" ˆ†]„"á’€A¦ A¦«Ž¥Ph0¤ ,4¤ÐlŒta0˜A Þ%<&l`Â_ÿêóÒ"!ÄDe¯e$2˜L!¦¡ +d µÿÿí'\DGžC–L/ÿ×tºë„—ÿÿúëǯÿÿºKþÿÿÿ­i}¯ÿ¿á›1Á~?ÿëÄ-/ÿÿøa_ÿÿñøþÿ¾ô-GÿõÔe¢‹ÿþùÑc<È”ÿþ×Yä)ÿa?mbŠàò“2Guq>·ö þ7ÍL)Ø; Žû21‘4TÑN¾ÿûÖª(P¤4 # ¦ ›dI©ÇH¬Ä-Ö~?¿í8zwч ÿUL(P  ¡9åþÈqþÈqï»»‡A·wwwUÔb;[Oíl/Ôwww§8y75Xˆi¡š ?í~û¿üò>“;;+òR„HRe®5ýüoÿßßåpzªê#þ¿ÿ§ÿñ2SÀÍ’N)¬Sh¾yE7šˆÐ‰¤ŒÓ6ÍRš²M.«’¯}÷ÿãøM(Ñ‹BÑ XE¸°‹pÂ3´C¼ ÁÀd$ȃ&ld§eÈèÓôý;È/ÿëüò>ƒA¦=ÐN“‡I–;I–;„Iý ½0‹Æ„XF°ÑbA¢–ê—ÿëÿïÿè$êÞß®Õ;K¤á–xdñ¤û$=&äxK;ò1èðòÈ™r$)š¤`ŽA” Ä|“$#–PgA‘B4ò'<̳<â<‰ÌŠ,͉Wµÿþ'×Õø¯º¸®)^þÓÕ‹CV§I°Ë8 á' ¶D ›Ñ¢,&Fa¢ÜCÁ5'À¡8i Â ¡‚ Ló.)8pDZˆžE™pJ„pÉÈû.IåÑ¿.F¤uh3"@C['ÍæryŒÕå¸YG~»ÇëïñýµõnŸ_¦÷¤hv‚txr-‰VÑ¡¤Ë ›Ñ¹ÉãÑxÑxÂ/!ØH è×ÙF·£\!F°Âp‹†7a€Ânä-°…¢èYb‚D_… *  ÂpŒÙ—@\¸ÉÅ \âHàÉÂÈl£i¯Ûéhwÿýzþ“†_:ÒÕà §Iµv¼2çn›Òm&éØA¤›I÷IßwI¶Gp“Ó Û"»AÂ4dA߆aaÁѺÝl"òC»~…„]âÑ­„.FíDßwèx8ÿPëÿ×þ?ÿýÒt'ë_Å+¤›ïKIÒ{ûßÒ½&Ã/‰Á£í=>ôé6Âá›Óa‚ †\îòúÛ¥¤úONwH6‘ÅòPÒo„I´pÍ€¶ª­ÁëíÔÕ‡ÿßè˜fñõë_ï÷ô®ýooµÝ%Óìzvu×Ý«ß_ê›ôŸú´-“„•û6½K œ*l%uˆg«œw‚†oÛ_ØïÿýZíëµµú_é¯ÇØÅ¯üÝ׊MUïõþ¿þ¿ÿ»C»ÿO_t?N“KH"Þ7ý:á¿þ¿ÿï õÖ4þ?_ÿúV–Ýl6\?Ðýxx¯ðö»n¯õë¤5ÿJÿ×Ý5}í~Ý1 °Øa„­+ÿ ÿü#×ÿÕ}_–£û~ßþ³j9uXËÕW°þþ>¿õÿ¯þ×ÿÿühkΊ:Kwö)ˆXö+ëÿð‚|ÿÁ kÿÿï¾— ‡ì?ëú‡ÿ°õÿt¾ºþå±_¿ÿù~ÿñõÏ'wÑÆ·èÂÛÿo­/FýèÏü#=Òÿ¥ÿý¿ †ü7ý÷á¿ý¼/þ¿ÿ^ÿô¿H–G´ÿyïI&ÌÑŽ¿èÿ4ÿKÂ_ßáþ\Wý×¥­¯áÃêÿ¯ ÿá¼#?þëÿÿï ÿï¯ïÿÞ´ô´½vÂßþ»¥ûúéþ—ú]×ÿüU‡á¿þûÿƒéïÿßýú4~¿ïÿÿõÄ8}ìAÈ$È!Å>Ù^ͦî¯àÂ]÷Ýÿÿ=LÑûíÓï¶íÿ÷þÞ½¼%ÿÚ_ÿÿá/ÿÿöÿÿ´É:ˆLUC†ÔTP Âq$0‰Á„‚a0›Èî ì¿÷º¶«þºV¶•¯kÿVg‘üögæ×ûš~Þ]}ÿõÿÇýý„Sô½ÿ÷×­øˆ‰ž Í­°a0šu+6Ó“»i ˜NE1ÚýÝúúê› %¿ÖÝ:MîÃ[¯´»¯í/ûÛSÒòýkÿµ^º¾­¯ÿuúëöh½[qùî",˜í˜xˆˆ‹b""Q†ˆ`˜L(‹M†l â ;A±AüT‰m+JÛI‡V1V¶¬Wìií­« ½vûÿmtÿaí¯jÚëºßíþÚÿkj™n§QÏ„OM8ˆˆÈܱÚlll”$Âk#tØiØ… ±L0I‹Úb˜a'P@ÂmÂ"Òb› ÓM(ˆ†œ]ZlCmiìU§ kiZ¯Ã v“ $ú–å]ÕÕéÅ„" ÄÍ L!  à „EA2ºAˆA’€š BˆA…&é¨Ô5xdQɸ¦b4"™r1è6Ü&žÆÄCi‹ˆƒ 0”D0ƒ`Ði ØÂi1L0ƒÅ­iib"""Ì0áÁ’°ÞÔí$Y£±(ìO!hªçhè'ÿw ¹-9-0   ˜)*ÈLìÂ#LÉJ"±ÙeVÚÚúoõUBÔŒä2âeÈ(&eãíö´áûÈ=ÓO ê µÿýg/î\Ñ›~\ÉÎ='ÿû¯ÿAaþ¨?ÿß×ÿþðÒW{_ýþPÿ;Ïÿ­ñ­ñôºD (K™£5úêÚZÿã[ÿü Á4Ó0Yr$ 'D‚!—þCÈšRFYÿ&y/ÿãÿÑÇjéÂaÿAæÃǽ`ˆ˜JÈú`“36q˜5õ_þ¿þw‘c#v IÉšíp‹Ç¸!h‡†(Aª’œ‹Ú¯ÿþ¼òÂNì¹Ü0ž:N—a“i^Âh5]tØp쎡ñ8í2>åÆhÌ gÌàÂG<¸É#„šåȆ<Ž2Î|¹F…æÙÐÉNn42„kGThf¿$f¿#ÿÿöý]'ˆ[ké?¶ºVîÐpËäáÃqa "íÞv.-ÝÚ!ÐCÀ†Œî, Ñ1æ0/ÁBw‚alSb‚„Â`™qA30L`†!…03” K‹d@ÉDŒ£7“™ÖÈ^jˆÌ› ÿûþ÷þ—MiZKú·í7ïîÉ¤íº †¥¾JH6úA¹< Œ AÃ5ú5ê-HhÖЋUMèÖÂ.à…¦ "á„BêXá‚ à†";0˜!Å0FÈ ÂG0@ÉÙq“ŠÇkÿÿ­ypöñÒÿK¯ÿÿÚNÉÚW}]¨AÒ¿ ±…П4®&ëv¹·_þ¿ôÿÿÛKÿÿÿÿÒÿ_õßÿ¿ÿÿú[õ×÷…×þÛ_ýûoíרuýÿúÿéÿ¿ìWÿÿÿÿÿá»÷½ÿÿ_ÿ¿×~ÖÿwG[¯ðÜ0×Oo¿ýmm¶ÒažÿWÛJÿÿýúô½ÿÓï¶—øý/ÿÿ¿ÿ}ûúûÖ÷Â-í×ønÃb!¦M4„h4áÚQ[muoV_×þÿõÖtþÿÿo]/ó5ÿÿo¯¿ûÿßÿ±_ߥ‚¦+ü96Å ™7JÄZa0›Ž˜Ám†h h‡°ÂLDMˆƒPš~M¯·Þ¿×ÿÙûßoc ÿœOý™ñ[fŸÿý™ÿýš.»ÒÛíö=+A={ñÏ´Ðdàˆ10¥b“}m+Èßr+’t°ƒäHiÞªéZ¶­­þÃK«­:¿û_Û_†—ÿûjßûjë¹¢³?sOé×F­þq9ψˆˆˆˆ‹ˆˆˆˆ0A¦Ž¾Èƒ†š †”CN Øa(†Èš¦Ça&°ÓôÓOº¾âšØ­o톰a+M~IºXktÕ„–Mý¥÷ ËrŒÒûWi± ‘¸W¦„È£Þ, ØQLBbë 0ƒdÈ ÁÖ<   ÂlCb˜0š &c°¶Å6–DZV­>»wÿ_ñ®"؈0L°ƒ,mL”pÂòʴ˘L«*á§Ã µUM‘G†˜ÓM6bA´ØI¦@݆ƒê!È%H&°–#¯ñ›â"""#B"""""#B"""%A‚l" Ðaa!Pk &%šÙ'V„ƒN*ÿü ýˆˆˆˆˆˆˆ†aX`„C(pƒRÉè/úZJ"ÍñxB¿×ôÿÿÕ-×_]¤ *]Zÿ´‚@–©GÇŠÖé/ì*«Qþ-5¿ˆ°¥˜–è)±JrÈ@ÎCP@™´ æã ±®Iɦa=0A‚ ! eºY ìi³*QÆqhz ôqòy Ÿú|:A¥ßû]?+ã$±Ù$wVvY©®£5 ͇pîºèˆ=<(PR.dHŽÊ2 Žþ#q$ïÖ}ä[~ÕÑþºÄÏ ‚ý*oÿä-äH”ºÁ‹‡wèÑ·OÓS¿‹"O­ý=iîû¾ôÂWÜ:= ùd׿úûïúßÿ¨»þ£¨@„e½äëÿÿõºÿýGýÖ¿ßÿÿôÿÿõ¯»\¯æO›mTÕ¯ÿÿîÿÿÿ慠P˜( ˆKfÐDR*Hì«"Fn¬Üj<¹æ¥ßékêÿ”ÿåezþ‚£ãBw N-Ú.á¼kr$ñn(OÁq$têÿõûÿý5ß­\0ƒa&ê’mý6A„‚ ÇÅ£c“°ð‹ÆvEÝÿÿÿ2ª!Ä…”3¤¡?×ÿó²]~×Nh2– ºmúÙ'òú—Aô›I´ÿÿÿ‚ —h2€è2q35F´^<²äC'\dIAcL™ Î3Ì31æqžm ÞFDŒÞNˆñÍÆ§©©%’5×ãºß­ï¥ô»CïÝ_M¤Þÿÿÿámv½ØMyeÛ ÅÅ„!„MÃÑÅ¢Ü0¨…Õ„B¬ l“ à ¡†`¡0Bá› Pƒ0ˆ^! Œ<œfq‚!…# FóH‘š#‘ © È“ÉÏÞßý…_¾ëN¾Ò÷ÖëKi}ÿJÂA¶GoI°tÒM£Û &Z7¤°mspz/¿ÿø`—}ìSh6Ó³ ÒÕõÛ­µí¿]µ¶«¶uÿVÒ¿Þûiý/ù¿×û3þøˆˆˆˆˆŠÿïøb˜°ƒ0ƒj8¶-†”C¦“A¶ ±I„ÛJRF‚MŠÓcM;TA*a¶“a·km¤Ú°a-†Ø~«ÿíªá†Nýëû “€¹Ç(| 2pƒ#u1LŒtÖšaŠ†Ò 6!1M1AÂ0ƒi4Ø”< l0”abÙÚLCb‚ Š Ãl ì ä? 4öÒ³ ÂMŠì6—ÿ÷ÌÇŸ"""""""$Œ0A„""!(B$ó0ƒA„"!eM´Ñ¤„È܆Fé Ä&E¶“ ±±8ø6%0ƒ8ØØÁt0˜Œòÿÿþñ±|D2ì „ì&‰:„Ô”.aÐ5ßÿýùÏÿûÿésŸÿÿÿt¸ þ¿ú¯å¿ÿÿéj#þûÿö—ÿÿÿàÁm/ÿ¯þÄ(¯ÿÿûÂÿ¶®Þþ,_ÿ[ñ“a¶S²¥‹äo¿õÿ«… ÿþþ² &U]üˆÖÓøÖÒoîáÝ0ìAûñÇ÷ÿÿÞ²ÔöR™–Ÿþ·÷zw-%@\ìÔáM/üyúÙ ü4Ö†/$­éÿßþ×´Ó´  ƒáÕå~È'ÿ°˜B-°ƒ0¶Òýþ¾Sÿ‘t""$'ékÞu_Ô}+zÆh*” ©H=NŸzíÓ÷<‘³[FŠ!àÏ!Š`fgÈØð†ˆ^œÈèº>).F¬ÚË™"Ê N¯ÈÒ_ûI6“zA¶šannú6S^"Ñ­¦…—²ˆ`¸@ˆí¾ éR-ùÝK²Ï´œ2çvšiXnIÃHöðÁ$ØFˆa˜Wè Ú„^5U××éýý;¾“Ëš}$­'}¤O¡ô¬2tM–²¨ÉãpˆÅÒäj$k“­wý‹ÚKÿýzß­í$Ú3†  œAÒ>FƈPàƒÑ pS6\f¬ÆmG„fdâ‘…Ÿ™ã:‘ i–åaÍž´;íý×ÿ kïtÛ~•þn%XØh0˜§uIUp¡ Bд,&‹vž0ƒ0š![Šòõþ·ÿ÷ôë½køú´œ4ÂÓTáÃ.ÖŒ?¼‹ 4A„„h|J;ѹ£eYxO±é‡Áé­_õãÚ X—þ¾µ¿ªï—aÛ¸ë¸ežá„í=]'¦ƒ6opÉ›·†ßKÿ_Xé[ëþdŸTýô”ûþû·i~ÿµ_kµðÞ´wÿø-átqÚßëüþïÿÿÿë¦*ÿé^?°ø¯ïÂ4oÏzë÷y1×í¤í×ÛK_ïôîÛÿ¾íþÃîÅ5kûî—4;.Õ׿ýPCÿúûÿíªŠÃý~ÜÑ^õ¿ÿ¨Kï^*>µ½ëýÒÿð·ÿ÷ì5¯‡îÖüÿ½=¯ûmš*Þ¿òuÿýý·ø_ÿtqé¶ÿðÃîÇiOkk··ûv«î•ý­Ý?ÿÿ¶Sáÿ½¼"džÁ?ÿÛò&+VDpÂ^ÚPÂm§`Šv™&ì-­wû %ºßî’×ï¥ÿþ”h,: ÿü´LB¨§ Ä&0ƒbØØŒ ÑÄ&!»Zi¦ÅC#ì4¬Ñiþ½ª_ÿ±´–%ÿðüDA‚D0ƒ.ÊJa2p;ö™'UA˜MÓ›_ôõýµ®¿ú×9ëÿºüDDDDDDDDDDDL aC¿ }¶¶¶ÿ«×ýkýÑ¿ËrDh¢"Å u‚Ĉœ[Ã/éýzwßþõ}ß *kð©Ãq‚ &0ƒÚˆl4¢Âi„ $ÚR!³ƒ"-†]”@@ÈT • L×„íµ²N¢™'&ši±QODDDDDDDDLÓ ¡`ƒ0Z®« ™RÕíF[ŠeUAHY‘¶v[u Vð·?þ¶tf¦da]ÿ -þþ×ç $E0^¸î÷zýßÃ{ÿýª÷þEò·þ#µÊèDioªßãÊþ!˜ ¦lŠdr$ —.J@’ÿôkaa„,&nâS†˜AæÅ‹63dˆ—Ó\¹ ×#†H"ƒ4ŒGe_Òm&Ù VÐA¸A° “ÀÞÐaB!ÜCF€ÁBan`¡?R-WK¦Ú§ïm'KáS‡d‡O#·ÉE'‰V%CA6ÅæÖ¿ü/M:]Zº¿[~лNs Òl0šº Ù,e¯ÄyŸÎdx»4þGG2:#£1© –Ì2“æh—Db ‹-ʪ7ÿïw^—ÿM?MÿZV®Ó„\9ááK‰¢Ç ˆ°¨‡°Â!Þa l‹˜)q‚eÌàψ–äEò3è{&Eƒ+ÿC^µ%¿]÷ú§ï÷ú ‡7á„ · £cѹñhÖÕ !ha¢ÞpBÂ&;F€Â`¡‹ÿþ\ï}wõÿñþ‡_«Óáù£M»[†_¦Ã.¼¤Û‡dv‚xAÐOh ÚNŒí AËp¿ÿô>Ÿ„¿ïê¾XOÐþr#ªooÞ]õþñÛWy;´ì”vÕ¾Ù>¥¤Ú Ã%•qÿÿáxÿú[¿Kùeû¡$Ö ÿ_Ž—ÓÒî-6Яë»uö®Óuÿþü#?¿þÿÿú ö·õ¶º_ß·ßûúØÿ«J¿Zûÿÿ/–ïû÷ûÿì.¬›„d`BÜÃ)ýû¿_¿aÿýuú ñÿÿÿ~—½õÿýmÿ„\wÁ(vC#å‘lýýëÿƒÿô^¿ùa‡'§äQÂÒûuûš/]µoÿÿÿý/ðƒ ¡ ›­ ÿ×þßÿÿþáô¦(ÿØgýµ´¾ÌÖÙÇ«ÿÿÙ¢ý³D—úh?ÿïÒÿÃÿÿøoÿ ÿ°I´µ¶õ­®÷×ú{ký¯þ«ÿë÷ÿàÿÿ÷þþð¿ó¢ Si ÐaÅZØA†)8}¥a;þþ%ü0ºz÷½uìVõíÿûÿøÞÂ.?|Z BM<5)Ä&%:i„˜¶D˜†lC6)4Â Šˆ4ïU÷×ÿÿßÿïÿmïý/þ"" Á0M0ƒI AˆLœa{ᤠ0Ó#XA÷!~¯ÿ¿i^c­´¿³?ÿÍ2:w4ÿ³Dm%ûñ"""" ! &<2ûßÚZ]Òmýÿ×í„¿­†·ÃKÛwjƒÿ¼·(F™¢â"==°Ò†A„Ý6ÂQÒdG Xdyn=mV+V *ðk tïuNùÑþ©N)“b!‡¨ˆaÐ ÂIÔ4˜¤ÐlSq Sa¦"1Kÿð`„! 2vW„ &HsŽxÐaw“ E4š†a;#CA±t¿ÿ˜P f ! 'a3“€T¿ÿÄDD8ˆŽ¿ÿÒÿÿÿÿ_ý~—äŸW¾—Ç›‹®3¢ÿý8ÿÖáÌ —ƒ—§F„Pd¹•-V½F[™­ƒ@Á Á#b‚ †!ñ †r᜸¤ƒ#ö@‘B#æbÅ*‚24È3*È™uò¸Äv253¼É,eRŒ&˜N-4ÓAßh] „ 3 €‚!Æ!ˆ|CÂÔ9HbeôÎÇMT(-ö¦œ_ýÝé„ A„á0˜AÐA þ ÁaßϲS-¦šq§ÿï馅[âÐhRa»Vîï«÷­­ýõúiý§öªŸ•”èºÿýíbˆ‘#ȰïäG÷þ©Úw^šI®Ub:#£‘s5™³!J#ƒÿ´÷!o¶“urÈ8õyÿÐ?Ký!¦ˆý?½dXª ’³õïˆõ¥î½0ž®ŸÌ”þþ¹úôD·"FþE¾ºàÁ;™;G¿ýÿß÷­ÿýªoß]é½ä-ý_õÑ zy;NúA ò¿zÿÖßÿ«Õÿÿ¯ôë{×WÿÓ}¥¿¾¢ÿ¯U;_¯ßõþÿýK¯õ¯ÿ!__¯º×µð¤„h´½Ý?ý/ÿïÿßûÿéÿt¿§õÿûñú —±” ¤CD<Ï7‘!Z’™H„½ÿÿÿÿÿÿÿÿÿþûÿ^¾4,&oƒÁBa4C0)±„ ϰS6Dñö`Èf¤‚!„þÿëÿÿÿÿÿ¿ÿÿúêÿü”/žRì– í¥zAÑáñ£cÃÂ6wØð¡ 0P¡D=–á…ïÿïëïþÿ÷ýþÿýIÿÔïO%+‹,ö˜N“é:O²OI´m' _²<®ñhÎôm¿þÿÚÿÿÿ×ÿúÿÿwëÿú®Ÿ:'ÿïKWÚ zþÿxv¨;†_PNsé?ÿÿ×þþÞ¿ÿÿÿ_÷ÿæ¦_0G ̉Å:̾i"äqåS©•lè‚’2„«“eµÿUÿú×Iô’µÚjý×ê×ô¿Ö¿ëÿÿÿÿïÿÿÿýøí0¨ÏN,&œCÓD/†`ƒA—@ ˆ¿6f¼Ú[.GB'™Â-ÊAGÿ_þ/×û__ý^¾¿ÿïÿÿKÿïÿýÿßÿÿ &a#CH60ŒîOQ°4h§¨·aãD=‹Ð!a9;#‡ÿ夸¯Ðõ¿ÿîþ†¿ÿÿ_ÿÿ÷Šô¿úßëUÿë÷A-]ðÉãIº}+ œRm&Â4? òav“r$ á´ÿ½ú,'í)«ï×ãßÿý/ÿÿ÷úýÿ_ýÿ¶õ·_Ó«íé;B­î“†Yé`Ëõ²g/©8a0œDgEþ¿á ý*ÿþ¼½?úÒÿÿþÿÿÿÿï_ÿ×ìÿ¿]'Wß÷Þš¦Öé§ÿ_þ‡þÝ_ü¿ûñÿÿÿþ0¬?ÿûý}u׿®ÿþ/ïûÿõÿÿ÷øA?¸F÷ÿÿèÃÿþ<-ü}×ÿôÿ¬~¿_ÿ÷M!àÿÇßKöü?Køßÿÿþ—ö—úNÿÿ„ÿþ¿ûý¿c‡ÿýõaÿVé¯òÒ~ÿ~þF:ÿýûf‹õÿ_ÛïþÿK¿ÿ×ÿÿúõoÿþ°¿ûz‚†ÿ ¿ÿ°ÂûºþjýûÿµÛÿÛ3뵊Í5ÿý}³EÿëúÿÿøVþÿû¯ÿú;º˜ðßø_ÿÛ íúÿ¿÷_Øa+´õøi^û°×ÿõþÓoÿD(ÿþ¿õõoëûéuÿÝ/Aaÿp‹ÿá°‹‡Ý*ÿë± Â âÚv5MA·u}ÿýðÒ×þ¿ÿÿÿÛÿýmoÿãŠKí/_ü ¿ï¿þüÚöÆÄã ƒQ±{A0ƒL ÐiªvpÈóÃAü„/KþB¹NPáÿú!"õÿïRïÿû¥œOÿ_[õûÿÄDDAœ,œa0„C “„ÈÝ4V©¦¡0ƒA±8éŠ 1çÅÿÚÿzÚ¬7ÿÿ¥ÚUý×÷þ’ÿÙŸ¶‘Ñ:þy|Wöh—â""""8ˆˆˆˆ°ša0ƒ$à¿^¿þÿï­pÜ„/¼ð¿_ñÈBÿÝ­}¿½z[Jþÿõ­¯í-Ô‘:""#ÿ¯ÿõüáþ¿ïëÜ mqQ ;mklva6•¥ ï¿õÛ ùn.“X¥ùñÿþ¦cêÿý/ÿ¿ýzýB}21ñ¸A„âPê ‚ ¨Øi6±l‰ µMÙMŠ´Ó}ÿÿÿ½È8ÿ:¦ó2ÿÿëküDXL& “ƒ¦‰–ð !E2N¨'ƒª ¦Â0ƒLûûÿßÿÿù ¯§ÿõÿçÅ÷0˜@Â`‡aƒB#_ÿ¯÷ÿÿú¯ÿÿ×KÿFMÔÿþþÿÿ÷ÿÿÿïýþµ:%ÿÿ¯¯ÿÚÿÿÿÿÿ'ÿ¯__ÿÿÿ×ëÿÿýüˆ£¿¯k¦ÿ_ýÿ>ÿ÷ÿúÿÒÿÿ¿ý¿ÿÿÿOÿî¿ÿßšɺ³÷ÿëÿþ¾ýoÿßÿý}ÿ®¿ÿÿ÷^¿ÿëÿýÿÖþCfšýê?÷ÿÿÿÿÿÿÿÿÈ?ÿ©Ñ~®·ßõÿõïý¯_ÿ_ðÿ]ZŽ—_ÿÿëÿÿûÿWï{ÿ¸Îˆ›«;ß÷ëþÿ÷ÿoëÿÛõþïoþW2ˆ["%2,íoºµýµ´£ÿÿW_öëõ¯oÿXÞ®œTSHbÿiGý}wà ¥ú¶±÷·®¿:*÷÷iÿ~Ÿbâ›_mb»m7n£ó±wÚi¯“t×þÕ÷µñüWñÆþvŸ [ññÚªÚÞ¿ÿöšý§­fÚý=H¯ñÚ &™ ÿÚ¦C¿ÿ÷¯ÚýÒ¿áõø†š &ƒ»NR{_ý{!ÞÐkÚ 2û ƒÕÚãöEáÓåº_ˆŒ ͳPT Âgí¦˜Xa5í0«Ø];Mx‹^×\DG¡a5aDA„ !Ða%†h0™Ç;‚#ãïÌ–3Œó:>m’¦qYÕ/‰xˆˆˆˆøˆˆˆøÄ0ƒ ‚‚‚29‚¦fÏŠS™£0d0¦¨Á“ÆÙ ˆr3ÍqÑÈ~v`]_çD„§„lhC …¢àF†P˜EÄ& A˜±‚‚ 2p‡È0SBÿÊàvW.‰BâA„pÉ\;%”™c–=£Òl#Þ%;A%”ƒlŽú4}|®_\ÜD#Ùš%z®MÖï÷ßþ“êëïôð/Ú¦Ò¶œ:Mýy‘(¦l8D;ˆ`˜ Â#‚%‘†ö\f`„v`æƒ>Ì3cR§˜2“æˆâ""*Κþ†ïÿãþ»û÷ûôÝ7¯þ¿ö…„ü&´[9+3†&š!l4BÄ&`  ƒCÁ+#˜gÄ¿õÿý~ÃkúÕ¿Cÿ×ýÿ ÂgIFG‚xa„HÐäGh&g0˜Iê‹ÀÓ‹FÆ¡ #gÑ­¢ã_ùuÿøcúÿÿÿÿµðÂW·xp˘M´Ðw¤œ0ƒîûIXd‡á—4ᑺ“ƖI‡Mþ¿ýa¯ÿüÕÿñøÛK×÷zß^½ýw„O}&Ø!­l8dã»é{ÿÿý¿öÂÿÿÿ×ßë¿ýÿkûâÝê¸ØýûÿB¿úþ×ýÒü6Ÿ¿ÿÿßµø/L0¯ÿý?è?J/ÿý¯ø0_ÿÿñ_‡/_ïÿÕ|"cö¢¯J¿ëñý‡ú\=+÷ý/Ðáÿïÿ…û¯÷¯ÿýè/§µÿÿm%öwËÖÃÿÖ]^ÿ— gÂÿÜÏÿÑÓýë÷ÿÿÿúÒðÓNŽî¿ÿð¾ÃÑÇ¥ì?ýÿÿ¦ÿáÿÿù¿ÿý/lÏÿßïK?“c(MG¯ÿ}ÐEðíÿá¿ÿ¯¯öÿ­±]§ëßúûkÿ _û´ºü&"Ó±ÿþê_‡Òb¼?þ·÷ý†Ç„ aÐA„La üä á°ÒˆiݧivÅC4×m+¾× U_ÿê—á¸ûÃ_ÿÿ‡âÊV¾þÂlqR7A0ƒbâ6£4A¶L  ˆx`¿ÿö*¿Úß­ÿ{÷ÿ~"""-ˆf¬`šNBgÉ>A’p¿ RzÈÝ9i”íëúý—ëjÌüÿ÷_¶gÿûfˆº~Ïñ{U(&Ž×ý_÷Öà wÛ­êÚ^ß|5¼·TºAñ¬lC4ÐaÓ 6Õé7VËö•÷w°at˜}'Þ¾Ó ò7a8ªvqQ† &!„A0A°aXƒb¡¨ÿÄD÷ЙXOA„,&˜…#†ìr(á4Åu\hDDDDDDDAžàÁ FHÿ^8ˆûKþÅi~@ëàË•%·¡|GýO°‚|G–ïì¥üÉPøpP ¦E,©Ü0ƒOáBðÂa8iß„´öîå²7ÿw-pDvž#ˆG dÿÿøMµ ÿþOˆòÿÿðšÃá×õûInüï;òQã]ÿòHÿ]zßáø aL9I ¤1HaH“‘G•!ÍiWþ‹†,“½4LpÔ&ƒýS_ï¿ßÒøÿ¿õÿïÿøFßÿÿÿßëk8øëëŠô“ß8ˆˆˆˆˆˆˆa0B!—`‚ ± …½Õ{Iµ«VÖß¶þ­R¿³=³5Ãâ""# §i&·éûÝE1KðÂM«m«a%o¦JÂå¹Q²ãaˆH4V@ 5Vi¤ÂaÅ0Ó‘-¥·kÅ6^pÔèƒ'T‹A¢MÙN9üãÚx ÓIÞbPöƒƒI§šj1!â"Q† aÂa0‡â""#,Ü×þ—ÿj_¥ö¿„‹+&Ãâ<+ÄkˆžBÑÜÔR"P(()- ™-ˆ#2 çD<óü((PR¹$Ehø|;‡wÔüV0PRÈ®4§EµûîáÃÚ~~""½À ¥qq‘ ÈñÚÿðáÓTüì Lþ?×õÿîöŒ÷ÿÿøµí;»ôwv¹’ÆJÖKÿññ¾”]Ýú§ÿ‘U‘Uøø¥ÿÔ륯ë§þIÿýô Ž f(LÐS£0FÈd0„äSêD¡ÙF}‰Zýý?)ÿÿúÑ­£FC¹¢&ƒL"Ç„XìD) 0Râ„ èFÆ —yç¼ðôóCaHÂÍÇCÎ#Vk_þMŠÿ2U_ÿi+Ié'‰V%D#;A ƒz£]5´"ý ÂèhÐìŽ!±Qð˜Mèx  ʚșˆh2ˆÁ¤`ó8 ÊR„CŽˆöCˆ”H^«éÿý—4ÞØfôÛ „&ÒÒ¶ƒ'ªt­'dxK!ÁäWþI7ƒA…Å£ôkÅ£[‹ £e4\0‰¸`…¦CÁAD8ì0La0L¸ÉÄ3û.Yq’?&iŒ“Œ2FmÌFÌó:#6ɤ›­ Ë™|ÐA¶N¤Üž4žNÚ44œ#[A:7"Ø•E‡è»iÆ¡hÐÎa DÜ4\0„8°ž & gˆalfÆ 0ƒ Ÿ ƒ00A‚§AA2äfg²=å;0GèÈc0ÏäcʳL—G‘§f?þ«c×ôÿû¯_Oû¤—oÖáwW§Já:N—N•¥m44t¬#]£ÂM²8¤8MÈA: ¹Ý£;ךñ;¸Ñv~#´/M´kh‡ânІš„,&hX(A„ò6(D*ph„ ‚á y ΂ç‘#Œ†gA—e¸»3ñß}þ¼_ØÇÿÿéké^ÿØÿïzëþÛUÕî“«lºiÚ ý«a‚m+ðÓrú“áÙ9ÒvlŽÝ;ƒ²XKš ¶GG»#ÂYJônE¸8‘ Nì"Çh»ª/(¼nö‹¶œEü”„Â-ޅŦ…¿^€ö¬zÒøz_ÿþ‚ÿúãõºýZIÿßúÿ[¯KÞšJé÷Vý¯v›a:Wí5Ól î¶«IÃ,êØMïá„‚t™ž+I°áÙ1Ê$ÝHð–CTÂ44ì)¿ÿÿý¯øúoõÿßÿÿWÿÒý~­-ÿçEØo þq¿ðÿÿÿm †ëü'à¿ÿÿ…ýý‡òêþ¿ìüÕÿ|Ñ4•ÿûÿ~¿ÿoï}!ÒÿøûïU ½_ÃßÿÿËwú_„há¿ü#:ôgÿÿþ úûÿø_ûÿÿÿ×_Úÿmÿý%û¯ÿÒü xþ[–]³D]=žOÿ}¯ÿþÛ÷þ—‡½ý'| »¿ßÿE¿ÿÁ¿ý þÿÿÿßýýÚ×zú¿ÿÿþ?ÿÝ­ýÿ¯}™÷zlÏsOÿÿÛµc¿_¿K½-ÿÿýûþÿÂ5ÿÁ¿ÿÿÿÂ-ýoÿ¿ÿ„Xöê×õÿý¿ð_Û}n¨ ¥é/êöØI+¾ÃKûÿû³÷_¯Wù§ëúÿ^ºûkýÖ­·þ¿¯þÿ½ÿÿú þÿéõ-°—¿¿ÿú_„Xþú±ö“S¢ˆPÕˆz¦ƒl ÛMŠ»/¾Å1]®ƒ_öØ4­ÿþÿ†—éßí™í¯¿_š$¿ÿ6³u™þÛfŸ_^þýwoÿ¯ëÿíÖ®ÿú\VÝ®¿ÿ½~‚~gê[ !í4ÅH£ŠA„Äã¦6‚ Ž)¦‚4  Â ŠN™ØM ³ Òö)}7ON $ézõì0þé}ÒÚ_gûK__[S~a륙ÿû×ég¯ìÑzÿÿþŽ#õÿö½a.ö×ÈDX&ƒ'ƒXPƒA©ÎTMËŒjªÒ|Z ‰Câá„6‚q±lCb›I4Ðv¶±XA¶cض•°ÁWa«]ëß·W®ì5¿ÖÒ×ôÕv׿]^µìÑ?û¥ßÅ_ûíúèÆÕˆˆˆˆˆˆˆˆˆˆ0BÐe¤0˜LPÊÄ–ý’„êI 1H4ÓŠ0ƒ &8ˆm„pÖ˜¤ ЍaPa8†šÃ#×kÝ*lT0A­Ût­„ÝÜU‡K«_û¿Û´»ïÿ}/[3[é/E¹+?GaYh!' ’{¾)ÚUa¢i²1ÐL ؈qW0ƒiŒ a0ƒb‚alxA„ ÚdLiZQa0ƒA§r ;ÚLC†G›I5_ºOØam¿}Kp°«¡rS" 0RÜ‹4"ÉêÁ†'C8êkLœ'÷ PbS"Ž•=4än­Ðb¶(1Ah0ƒ« qÅh¥ä¹hA눋ˆˆˆj\‰""HÁ‚ [‚ ˆˆˆaB±  œ0™Ye¾kšo*-’tÕÜS$øb:×ñÄD\DDDDDDhDCÁ:& çD¾½hÔâ""7Ñçõ¯M¥9õô´µ­/^º_ÿ:&¯½Jøk] ƒ¼{H%üg\”0§ÚQ …LTE‚xQÁKwŠÉŒ® -핬ì SÍmä-™aA3µdd®"ÑÞ†L.I­6¼Õ‚…*ì›$¬’oý¯ÇÜ;ºn×aB0@ §iìC<ÎŲž%¦|Ê×kiZïií纻îŽó6¸P§@@P¡0˜)’wqkíëQÝÜ3Ã[û모_û^þýáÝÊrè÷G¸wÿøéúµîôïÔ‚#µ¥ÿÿøÿ¿þÿUÿÿÿÿÿù]Fi›Í,Œò«ÿÿÿÿê¿+Ž)±‚œ ƒAáO3˜ e Í"qIãB"0Ó!‘É/QìÖ¿ÿü˜Ì‘”µÿÿý¦–0Œ;„!„CÙ¡„\4C¸`¡0Ø(TBðg….@ „DÆG B@™±N‚—D`ˆaOÆ™3ŒñÏ)ÑÌÑäj×ýW ÿÿ•Oí0ƒ†Hz>á’½$ÚMÖ‚ 8ÚqvxÚuF°Ñ¯‹°Ñp£@‘n˜PP¡á‚‚ &yÁ—3@à˜ Á6ˆèŽˆèçf„ie$a™™0Y¸êÍwêAéÿÿÿ÷ú ½éÁ—éÒÃ1êá„á' “ Ëš ¼' :O't›IðÂI™Ðe¸´nÅ„m P%CFÇê…£CB"Ñ„-°\Á*aƒÁ y±t i‚G3ã!‘ Ér/žŒ Ï2æxRs ” .`ÈdO›eEù ,‡/òF¿ºzö›û§úº~á vÝ=A´/A$îÐdò“²7TØai7°'dpÒl@ÂÂ4|60‹Æ³‹°Â.ßè5D9¸°‹€Â4nî0BãM ö[†o&b˜²‹ œ ƒ?ÁBq+#ø!‘‚ÈøA‚à æ38Ù"¦É˜3TCÈ7×ÿÿA‚¨úûÓ~“ºZ¾?V“énéS®ÓKmoü'Kh:Møeòm÷põï'tƒ¤Þ.ºI–=ÃIº‘A°Ú;µÚ68°Ÿè¸ oÔ"„A„\0¡9EÃZ è)˜A„ô `¥ÆvÒñÿøÿÛõÿ¸üoÕ¼z±ýë¡§ë_K÷é×äí-ýÒºô°Ëªu'iC¤é_°M†\É:]&Ã.wIÚv _5l2WF¿é:M‡té¶:’z ¹îÚ¦3´kÅ„]´!£[ÿÿü½¯ÿþ×P÷ÿ Cÿ[ï‹ÒÒêÔ+×ÿô5¨þÚÖ–ÿØÕ­îû½Bµú¿Þ¸N“þ–“Ó¬0eÌ¿NɠǶ`¦šIÒyyH6,i7Âÿõýÿí{_ôK×ÿúÒÿãµÚÿô;úÔtµÿ_[¯Ó_{Uþ¿½ÿúzÒÒ^‡ÛK}ݺI÷§JéÒ½¥áÿûÿýØõÿÿÿæØt¿¾^µQÿý‡ëu ¿ý^;ÿøÚÕ¶õô?ÿÔVý‹ÿ´ëï_Qßm«ÿ^£ÿÿÿÿ¿~ßÿ·¥ÿÿZÅëý7N¿ï0ü{õ_r3‡ÿòÁÞB÷ïÿëÿÿuûýÿÿý¾Ò÷ŽÇéýß¿ÿþŸƒÿܱØ6ÿÿÿÿõÿ…ÿðÃÿÿ«µô^¡«ÿÒóißK櫊ÿ_¿é~‹«ú/Á~Úiýö¿Òÿÿý/ÿôwöÞÿì0ö—ÿÿ·3¿ïô°‹ÿíÿ÷÷õøaëÿ…ÿ´qßëá×ÿÿÿüýXÿ,ØÎ—_ÿ³=»ß÷ût’ÿßÿÿÿÛ߮۬ ¿þÁ÷þÿÛKÝ¿ÿÁþï×Kÿ ÿÿÿÿÿþß…oÿê÷ßÿ°ÖÏÿuö—ßÞÙ¢$/Ý&ðÙÕlW·ï]ù:ï¾ÿ]/ýmÿ«–ï_b¿þÐ_ýÓ·áíÿýÿßÿýé-á¿ÿ»IÛ„jŸ±L%jëí¥ïK|0·ZÝYÿ»ÿþ×öÔÛÛÿÛ3ãÿýóDþÞûÿÂt­÷ûí/ýÿÐ_ÿ꿺ÿÿÕéaÿúúa‡„A„A„ ¦)ˆl0‚0¶A²%† +j¶¬Vݤ×l5Þ—àÂ^ÞÞ¼5k_ÿo0d׫Øg¯ôz½š"éõÿÍí‚;óÛUöh½zÿßÿ¯·ý¿Øâ[û×ñ 0„Der 0™',1Z±IÓšØVL&à 44ávi°ÂH5MŠÓ´í?b´õöÕX`½þêÃ6ý?õn˜a~ÿöÕ~W„éýµÿý°ECKöý~Ìõÿ4ÿÝwûþÍJ"""""$ºÁ"bˆbL«²Ç± ¼18è Ø¤Ði†°ƒˆlXA‚ ªA± &qƒb®Ò[a¥› ëf—E÷X¨ki§û¶Å:ß_ /zv«k÷ö›i}¯kÃ_ê¼ßÿ]6~ ÄDDDDD\DDNˆ†ˆ†Jœå9OiöIÒ{#qmlPA„ƒA4„ aÅÄA°Â ì% ؃iˆr$a‚}4Ø«X†¶›ÚVvÝ·K±]ûŸ»ëzîºÚW¡¡ˆaahD0ƒE¡ebe†(0¢"Ž\oaIBh4˜{ÖA´0ƒ‘G„A‚Ða‚ ‹6-† ƒ6‚Ä0ƒh Âa:â µ½†•¤ÅuÄEÄDDD\N¹Föœ&0@ÁC‹B!„,¬L(L£•Òa1L“‚˜{"Žb§Ì<0¹wµÜ7¦F:Š0ƒb ÂMVª§œDDDGe L!ˆA§ë¤øˆˆŒÆé×]ÒåœÒI©n&Iz^’$½U¨ðÓÄ."ÒËeZynŒ¯°à§Œ®ˆX†ªE PLª3½25™ ¨2s»ª¨PL@¼;¾ß?*gcƒIX¦± ꌗ#"'Šéó¿D•i¿}Ü:aì28 ï;‚¦ÖALŒ wTŒèÎË'ÆX‹rW·ñ}êŸh6ä%tw¸MÜ kšå wøP ¥b;ó¾ÿý¾îÞ·H4öîsaÝ]Óü”ƒu`¸úþ8õ}G§tƒ}ÝC¸pd$\ÿþÿ‹økÒm÷w}½“=ùõæDeS#’ŸúïNqëãé_M{ ¯mÿê«ÿês_œz_þ“øøÿÿΡ͑Â'?"ùœlΤáÄhøh5ĨĨhÜеÏBÐh\XEËMÅ¢àƒ± `¥A2ã¥/ª” †?uÈl‰£ÉI„/ÿ^¿¯ŒüîkÆ“»¤ßµAÃA„4 6ÈdžN)6ÈíµÈݤ“,}ñsã§»…»¡b„7 ‰¸a<Ø.lk}„ ñ&GGˆ)æ\e8§¢ã$ 4ÊPIÈ™>a”æPÉógšÿ""A+zÿúùô¹n§äóÿþôõOWVÓT)l'e—@AÒnÝw—ÐË9yJÁ ÂAtȱ}$h Þ7MzZ6º…„ÁB‹vXE¸hH{3µD&`S„Î A ‚a<Ø ¾a?0eË.2ŸfåÈÒ?gÂfE9#H)"È åÍæ¿× éÕý¿ßÝz}ÿêßIÇ}'Vú÷IÃ6Œ ‚H6—Âiª 6;#‡£EäGpƒ²;h Þm©£ã¦‚.ËEÜ#;B÷_Mþ„8´gaBh‡q` ¡0±aX*!ì< Ì lTBD dâù S†x2æËHöÿí¥ÿÞß÷ýn¿ÿ~ëú_ÿÅUþ“uÚôû°œ2ý6á„v›VÃ.dæ¬%ƒ/îaS²1é6“†K.Á?„ki?ȃí þ4nÚ75äXÂ,w¢îÓ‹F‡¨"Nᦠâè3Ÿ¿ñÿýÿj¿¿î¿ýøÛKõý]tšÒõzÖÿ}w¯v/¤ž½+é+h4–­µj“þûø`ƒrú–'A—2ù‡ é._U´„îÉ=ÐNl4 .JMëØpxö›õÿû×þÿâ¿þ“þ¿¯úÿûËŽÞ=×ÿÿûØ÷Mýªÿ·¯CUôý~¾?½ZOCîðƒI=6“û¶íú¶–ôs ÕãVÝÙ'. ™|Æøÿ‚ý¯ÿ×áûÿÿßšº_ÿûkøIÒít­ýö¿ïu÷‹þ?ñÿÂ_ýÿïi×þ?ýãOÿ×¾—½^“}4ªßÿ„gÿ_ÿ…ÿÿÿÿ÷ÿ_ýý(«÷_uÿøþ•>½z°¿Òý®ÿÇÿëú]ÿÿ×ÿê²}ÿÇì·ý¥ûkÿÿèÑÿ÷ïm/ÿ´¿ÿûþôªëÿý`ÿ¿—§åÔÖjø¯Å~;ÿÒÿÿÿ‡þׯ[ÿǺÿ^ÿοøKý/ýÂ_ÿ_ì4¿ÿúßý[ÿëÿü/íþúúÿ_¯ßáaß¿Ë×ÿÿüøÿŠÚF_ÞE/º¿¿Òÿ×ìýkõÿ÷kñ_ýº_ÿÿíËvÚ­zÿà‰ü?éÿkø/ÿ… ½kÿÿÿîßø_×ÿY‰ýÿþý«ÿÿþõëþO}uèã>¿ÿþÛûßï·ÿè/ðýûýÒü"ãòÝþoûÿÿÿú†ÿÁ iøÿÿµô½µÿ¥ÿ«¯×Û_ÞµüóþÌø¦ÿÿÛÒµn+§ëõëý¿ýøïÒÿ¿ÐX}/ÿÿÿü7þ‹à‹‹ãïÿßøðC`Ö ìj›Vºv“k¶§§ÞŸÝ¯¯Ûûjýí¯ý¾æ‹m÷_õ×ÿ¶Íí½«uþßénÚÿßÿÿø{ü ¿´½/_µëúôÙê'z '„A„AÅ6qal‹DpÓ ¤Ä‚NŸ vÅm­ÚkÞÝ¥ .Ý~éZÿÿúÒ´¾ÓþÏôæ{Úÿ·úæ=ëýÉ×ÿÿÞõýImÿß×ÿ|Až!‚Âaâ"0ˆ)Ya2N ˆÿ[I¦Ä)u Óâ  ¦˜†b äEPØm¤Å]ºuwÚkþßíí»i7ö¯ VÏ_ûz¯ÞÃK_°¿ëßïEÿý}»ø¯{4Tÿ÷ë—´¨ˆƒ&U".ÉjS”ö¶FáAðÈÝ{PÛ SA@¸ a†b!„"!„A„¥ 'JD‚%Ž Xªb­Š°ƒOîþ մ½v_þÚ®Ú·V–ßÿÿ«koÿùn-¥ÿȈˆˆˆˆˆ`„#N:b#›í¦IÔiǘ„î h[„ Œ  hX@ÂÇ $à * ›±¦šm ït­u[ „à i»~à ÚM§ë¦—ýÿÄDDDDZ a0˜A„É@Dº &ƒ UÃLœ8åFVf€™c’pfp@»' (1 ÓM6 á¡ØÂ ب¨„q!Ä:ˆh8 A¶”CN-CD3éi$ëT#3&„÷Áeª“€„C ªS„ÉA(-˦IÕ:l$b¢ #ë_¥ñ›jPÌ4†2ìá ›+Îàô–’ZüDDG¥Ö©(t¾•?JÊæGü è Ø29 /ÔZžñ «ÎËRÄD2{Tž¨‹„|E]¨Œ®U(S²´ ó± !I`¦± ëfA•Á’¶Ðm#±F¡K!K£µ¬ì-w 6ÃÁm#-ÎÍPSY–™•‘ ÎÖc"ÿßý´ƒ@„]HÜvò…3 ™Åj;øï¿·Úµ¤*{‡{WFç`åR¶R`¦y` ¿þqãZ.L4‡uäOaÜ"XÞ×ý?uü«®í?BÓîáWNýÎôïå_Å´¯ñ~½'ݭ߯ÿYÙÑÙ¦P½÷ÿûK•ýJCKú¶ºª×ÿÿ¤ãˆ‚‚ –GÐ@ÉqO™äGD}tˆdtþt“×_³²_5ú’ÄD—õûô?ÖEÛ´#D>µ±Ã˜áæÁscÞ°@Ï‘±žf 2ƒ4gãfKŒô`ÈcU!™ .H24eò¥×_M³±5é}}ñt&p¤6‚²pžµÑv… ¢à °ŒðBA„CŽCàj ˜ÀÂgˆ;5fá¤`ȹ“—çLÞudùÕWÒ_é?ÄŠzþN×ý¤þeá“u{Mu ›¡Ò=ùvnE†‹Ç5°ÕF¶Ó£XqfÐBL ÁBf6*a5ðP„RäpCŸeÆ™-§—"AãP2‚'Œ<Њ}2œ”Ò7òœ‰Èïšù Òô—¯¸þ—VïÄ%´½õ¶º·á„2æœ8`ƒî“a—2SM«A’“´ÂIÝÈìO #>,4AÚ5ëа‹¶B.5†´C†[°ˆYî!„(M0ƒ ô*!PCÎ ƒ „!5ž#cͳ8 ÉÅ54óC3HÁ“³ †2|ÙȆ q .iš°—dÛ½zÞ¯þ“jÖ–«ýoï¯ö½7Mí$ém ÛÒÛ' a0 Ødñ½$é?Û% ­'IäAøAèØâwaŒ"ùÈŽðm(}#[F¹¸"ì5ÿDKP¨‡ XL! !˜(L&3æ‘ü)ö:<.\d34ŒÐ)áKr¸ ÿè}ÿ&ÿ¡Ò´½-]ïéñõÿZúþºÚmzwÕ÷KÝ÷dž“}°A°Ë­6z—2xÒv ºêÃ?N2õ¸dü‡°’tPMøp| $ghØõ´gr,9(ØÐ´lhÙÓT<(TÄ"câÂa ·¢Ý‰ÿ–£ÿMÿ¥ôÿÛÿ×ý÷¿ÇÞ†Þ‡×ÿý~){N·z]ß]úvÒµn¯]ÿjNÓô·ö­ƒ0ÞÐA:N2c ê ØM´JÙÒ´ž‚5ßÞ'w=„hØA§ƒÿ¥×öÿŠ¿_ÿöë~«¿¥ãý{¿W¿nW¦µþ›ÿ[ßÒ}þýGh}*÷×ÿÝwþ©µv«]§WKöÜ2Ïp—/©6|é¤ßÿþ¾ÿÞ–éÿ…þÿåéÖ]^]UñÿHj×þ=Eõÿxþ/¾ô>¯ý‡bÕ7ÿõö?ÿ·¿túk뿽{u¯º^áÿý¾ÿ·ÿt½~»úþßÿÿÓiVþ¿~Á×_5^^¿ÿúí/ÿí‡þ— ÿïÿþ®?Ž¿ÿ÷±Ûÿõÿÿîýÿ,vÚñïúô·þÿÿÿð¿Ð&ÃK×ÿÿÿæQå‡ÿ–£ÃÕ⥆ûþðÿÇîýî¾Úÿþýÿ]†ŸþýuÛûÛýÿÿÐ_àßÿýwi_øE÷P“¤ûÿÿ÷ÿïþï]0÷[¦úõz°ÿ×ýV‘zó€ÙÿðüøkÿlÍ:O¿íºUWï¿¥þþÿþ»ÿøAi#CÒÿ×ÿëÿÿý ûøoýûÒ áþÿð¿þÃõÿa¯oÝo×·m+Ûzt½{_÷ÒÒöß{Š¿ôþXtºûÿßÿïÿþü>¼Îì?úûà­ÿ…ÿÿ]”9Ü·(sÙ¦Âÿøaø_öúv· +Õ÷¶ôÙëºÞïÿûüéþÿÙŸw¹¢w4Y#ÿýþÿßo×ÿý/ÿûºÛxo×´‘qßÂ.?îþøˆˆˆäb·ÿûøEÿ ¼ ؆b› D‰£†ÚLR¶éÖéCO»×¿K«IûJ׆¡®šúÿK˜N¦{¯ÙŸ·š/ÝïÛý{÷÷«·÷þ½¾¾‚úûZnýP_ÿƒ~‚ÿÁÚËÉ8VLBdQÓ@°Ø¦A t:>ÃIˆalˆ8†a4¥ ¿ ¾Å7jÅ;ÿÿµé¤†Ýi6½ŸÛ_î¿Û?ý‚;´ºÜÎó§úí¶fó—ý±Fzï_¯ýdéÿÛÒÿýý/ýËu/ˆˆˆˆ`„0„C !]•´„É8+Úd*h6*!*66˜Âû„ƒM6 Õ?^•¥iE+ ,Š?íë¿´´› ?ü4—û^Û°êM¿ïôüçÛÿðÕnÌûÛ ¿ÿ”'õÿì·Ó¸ˆˆˆˆˆˆˆˆ`¥Ž0A„ƒ$áMp ºPƒNF8†{‡$8­Š´šÅh6D 0¨6-6;J*Ò´­ŠNµƒ»Vا]´—´ö“×_ý;KI°—°ÂO¶¾¯ÿzëûy¾¤°ñÄDDDDDDDD0™Æ“ „ ÔPka5jÓ‚m„j(4ÅA„‚ ¤Ä&!„! mA¥°ÒÂâAd"N!ÚV“šlm¦Ã avm*þ—ÿÚw°ÃÄq™TªŠ ²`ABhQ pÂ2CyТœ1 Ã#%§dc¨¤I¦ÈÇQQMM¦,2+¦0ƒŒ a pÔ ÂlC ¦ØMµh=-,DDFZ©rUˆÓ"áÃA‚ & a†dà Ä' kþ*Ódžš ‹Š×ÿ⸈ˆŒÉËo@B,&ˆdàó MůתñZÿG`M*ÿäØsýa¥¥úµý~ÐAÒøÂ¡|F5ØJ7ÚT cJœD®aMi ƒ8ˆˆŒ®Îêu W[gvɤSåj!yþ §Â‚…2Y© ‡týW2+e¸™™ ¯ï»‡ú’„Rð ™Em™)™ó2©§UßÝýß ò-0õ … „È–GÁ&JŸý¯ýĺèδqáz¨Rm ûÿè%Qz ÒA dkq¯ÿÿ„ª´‡QÅ îïýïÒ”Šëý7´ÿ+©-Éþ½.¿ÒK{¿“Œž1,åš³™«!H‹ ¾¿þw‹HWÿ÷þ À`¡31˜&<Ø8 ÉÄ8)˜\f¦a‚Nfƒ4¤m“<Û!𛉠IÿÔ™z•~d?ù_ãýPMÆ Ø´]‡ñaBa &nÂ-Ø(A„Ñ ƒ ’03 …Àä<æ‚’$5ŒÐ¼ÌŠY‘¸-WIRUõÿ;'ÿ_[džîÉgf²;h&à „àŽÛ6„aÇ5î-꘵´krP8 "à0‹ˆE¸a„ÐfÅ60‚`Y03h¿‘Å(¤`Ô£0Ì̆Ԇd3è)ÓÊR_×ï3Kÿ§h5í>“ Õ÷ÚvN)6“«Óa“擆\ËÊXa4H•·¤›„ú ´ƒh'I´˜~p m BãF† h…4Â!ð44B'!|ŠbS²äH&\ÏŠf)›.H2 TÍLÁ’ ïFQ›2U$2.\άëâFyGX—ÿ×òmo­ãõ}}[v•m Z·º½jõN•íðÃ/ÕíôÚN“ 'ôŸl0ƒ &äXa„ÐaHÇi7£cîôka˜vv,#Xj˜DÝ¢á„!¢Rà4BœCA„& ˆK 4B†!‚ Ð" ¸Á0Rã8G"$c9eêtEðÌã¹r!‘<ÜB<Û:92§¯ýú u÷õ¿¯|}¿o§^›ÕÒ¿ÿït·÷ 'Þ ƒ¤Ødñ†] =+ 69§AhŸ6Ié7Èð4ž4p›‘c„odvÂ44gqh¼¬ÖFÀÓ’¶ml&„hÖл´-ÌÄ00‹‚¦ˆxœ#b„CAÅ„ ?ÓÿøKÖ߯Ðë‡ÿ¡ú¯ñþ·ÚêÒßX÷i/»}m¯NôÒûÒV¯ÛB“iŸ°ÉºK l' ±ŠÃ.´é: Ù,Ó†LzO»TÚN‚Â5Ù,%+d±ƒƒÂ… Ò7ØEå·EÛ‹F‡hÖÃ*ãÿÿ×þÕ–ý‡þßOÿý{¥ÐÇö‡ñýëú~´=¯ýtß¿Ú]õ»n®ô֖߮ХiXf›ím'i§I¶›ðf¡¿Q»[†Já—Bù¤ÃLÏ“ºO'm'ÿÿÇÿßþaÿ°ÿ™]5ÿ™Fÿÿëá×®ïÇÿü^•®÷éU¯õkï¶—úÿ¯M]ÿûÿÿ¤•°ƒûÓ~¸Ðtž÷ÿúïýÑÞ—øVûýÿÿÿ×þmvÁÍ[J]_Zù7_ô>«­ÿ^‡â‡úëïÿþ‡Ü0šû¡ÿû|¿¿kßëÿ}Øí¥ÿþùc¿ûïÿ·‡ÿ ÿÚ;Òÿÿÿõ_oë÷×ᾋ åé÷ÿî]^Jû÷àQÿÿþ=¯ÿ¾»ÒÞÒCÿ×é¿Cö¿þß¿¥ú ÿÃßßßÿÿïû¿†ö×ûœëÿ…ÿÿ×ë¨Cÿþ¶¾¿6¦¯º/Hþ²Õßýêïÿÿo¿ûÿ¿ÿïý1µþ–ÿáëö*+¿¾¿ÿÿÿúV—ÿø"ÇÿÿõOýïáh/ÿÿúÿ_ßZÕ7Ë«ÿþÿ°,Û]ëÿÛ÷Z¯Û4ÖÝÿïïûÿþû¾ƒvÅ7«û¿î‚ÿÿõº¾ïÿü"Lj/ÿÿø/ÿÿߎ—ÿÿõì?¢mëÚî¿ßÝ?ý¥åþÒóaþÙš¯¯Í[~“ýš.ÿ÷Šb¾÷ûKÿuþµÿÿ¥ð‚ѯÿßÿ„[ÿÿÿKÿÿÝ}¿úm¤œ4 nÛUmiíUƒ][I¿ï½v»K~à kn“÷¶ãµèÚvÌú³?ÿìÑ/ù:KÛþ¿_¿ÿ}ý-/ÿï÷Ð_½ÿûiÿý¥àÿcA†!‡Â„0°aÐL ab¢¤ØA Ðm¥°Á>*»öÂ)Å]v¬:u†¬0–¥ ]´µiþÂëö¿ÙžÞyß·_¹¢í³Eýþµ¯íýÙ¢ô­µÿÿÿK:ñÿÿûáÿˆ0BÁˆ†)®qþL”( ÅÂq\C6ž‚ !6¬$l4i0ÐlBcOµb©úö /½†½ÛKOzwZê×lÍZýºK×ÿþÙš×û3ô¿VÌý/î3÷´Ù§ÿº]# ß웢"""""" ˆ0ƒ†LÀTóS—ÖƒD`ª¦!1(t $!Å5ÐA malRpäHlVpËñL5¶Ò³jÒ]Xö+ö•ÚVºkߨVÝÓiC=ÿö¾ÿM'kÚÿïúCçOöÌÑn 'q¢ÁCMñö—h ÂlAµŸLCبÃipÒh ئ‚ äMCIk⦠¦Å1PË­cb¬ ×â´¬'wúÓ $½ý¤éëÿØRÜRàøˆˆˆˆˆˆˆ0„C-XM0ƒ0ƒ$àœ0˜AˆUƒI°˜K´Å'¤n™éœXA´Ó0i¦4A„ 5"Ž¢Â ÚÁ x¨i±ÛiCA¢ =Ú¦¬bïQ"#.E…¹ƒ ¦D7ÊÈa˜D@ØA¦Nω¨„ÈÝw´“A špÂ Š†a8a ƒA´#¯ÄDDDDDDDDDDeíâ"B!“2psöVX…,pD~S‚#á…I/èDD\DDDDDF—ÿ=Rþ’zU꾿Jª7å,¯„ï­-„ÈÝDV¢D0¥z¡‚Xì]žf@ó¼]2¢)"2 ìªÐúÚ»¨Rž PR ‚•ÒGﻇª*×ña0˜B!„!„Âh0„C%„FØA„ÈÇá„É:Õ”â‚lTC EcKEì."""""‚`ƒ,@L'“d³ôsÄDDC×ÿÕºN¼ ×êÒ¾’QOKÆ6!vF[ƒŽéÁAJ汑_Ô³S+Q‘Ô8}B…;)Ê„ •$Vc°\ïL•¢¾÷ãTÁAA2,a2ÈHŠÇýÝâNÝ=u?…)\0åu£ ò¡™ß÷ø#C3o‡wtÞÕcRŸ;SÌ×ÿú ýïO¾WÔ7O+MÿÒÛßÛßéåÌœï‡Á‚–èüНÿü?ýoôá½ü0«êvS‘ÿúýÇéo×ò¸ª_U_ÿÿýëñÇ•ÇÀÌ fâ:#æózåÈD !9&Cd¾s3gFt”„KÿùÒúõÔqû„â8ÑâE¸dq Š ¢‚‚ i‘ðD_yq” Î0ÍŒ¨ È3$Dñ‹Ë¼Šuþ¿G²)ÿü0ša#[…ÈÇ ƒf 0‘ºÁÚ64"EÛFŠÂ.ÃDqa &nÓ0˜A‚§‘Ä6,CÌÄŠFó ë…HúÿÕWuS²Oîô—ÐeÌ n·kt› ¹¦Ù.%”›H=$ÝZ ¸ˆAѲ‹Æ§õ'aè» "á„\|  °"(gƒÙc•eŽTKŒò7œÌ#¤lÎå˜27›2æ&ÔÏ$<ÍJKšY1ˆã<Χ«ëûêßúÖý-^•¶¡iöÃ.¤ØeÌ¿ødܱúZM¥„k¾ ô›A=E„ìQ¡¡hqÅ¡hX&a4D²0Ä3„lPL&C0P† „Bè!x3ä0L Ða<†)„G3hŸ3AMc3Œ@ÍS¢DaŸd‚7@_0e™H‡.s:Ù6(?¯o_û¤—Þ—»÷Ö—úWC¾ÚN•¤ìœ-ÿÒuuù;hÖÙ7I8a˜RPÁ„ &%@žh5‡‹½£eQ²…£]B/‰Ý¡Ñ­ühC ¢Çaì&h3„ˆ± „BÓ^!œ ™8¦l`¢ ƒ¨Sff)vn0y dã†PvïaU¯ºý~ÿ¯cíûÚö8÷Ðýmõi]}:[B“¿Pƒû0›i©|ÛÉc¦åõ'“²8´“l•Òm„Û%Äò“xa4HöÐAÐA¸´]Â/ƒF†‹¸Eã¼þ}ðš5Ó‹¸hÐÕâ0ƒÈb˜ÁNkªCo_ËÕ¯­ýë×ÿÐû‡V‡ÿÿ­ú_º¿oÿôÖíÖõ´é{¥él Û2{´;m6Õ:WïK{ødò“i;ìŒt“Ó3êéÖO¤á¦˜HöÒ~J Ò} Ç´ÂahÍpÁ2¨þ_ë¥ÿýÿ`ÿþ^¸p×Úý×ýÕ¿ý×±nÒÝ¿ýýZýÝ/ï/Ûé]t®/¿a­Šé};îý+øeÌ ý¤áêg3“Ç»ÒM¤ã{œ~ÒÿzýúõþÿÿØl?˜î¶ÿÿý¯¿ÿK¯Kïú×_þÿúëøë½4“}kÿjÿoŽúûþ·o­>þ¾ÿJÒпûµýÿÃÿá†Ãü/õÿÿß°wþõûÿÿÿºÿPõoÿöúk†‡ê?¾ÿÇÿðÛº~ÇÞ;ÿü{øKÿ¯þÿü7ÿþàÿ…÷_ÿ×ü.ÃtÒý{ïþ·_Kÿí‡þßò÷5‡$ÿñþ«}øz«\?ûÿ~í'áþ*»Kýµ}ëÿü?ÿø6ûFÚ]ÿ^~qÿßþ—÷ÿßÿì?ÿÿü,8_÷ÿè°ÿû ô‡aþ‹ÿý õ¯ûfœwßõ¿{ý~û½Õ„ÿ¯ï¿øFŽ ¶—^é~Ýêÿÿþþ¿öÑÞPßú×x^¿ÿaÚ8ü+ýƒÿ÷ý‡Ý­7þÒj÷«mz0Ÿ×û4÷7ïëûúé_ú^6?¿¯_êŸÿÿðßÿÿýáðßûý`‹Ú÷¯X¼+ïº_Ú8íA[ïè:oØ0JŸµÝ/Ým-¾þYšÂdÝ&ÏÿõûÓÿ~¯½¥ûÿ÷ß¿ÿá÷¯ÿâ¢XÿïAlSÿøm´´‚-áÿÃ}¯úZA<7ëbPéâ ãØh6Ò‘-¤š¦ÚWÛi?°Á{KÒ½†º~Ö—utßþ¶H÷¯ø­õ¥ÿöÿÿ]o},?ÿõ„ž¿÷‡ŠcAaÿÁö+öö0‚Á×M4ÖövE„ìPL aÅE2(l ¢@Ø ƒ´»VÒŠ°ƒµî¶Õµ´ÿÿéý¯ý{¾Íëÿæ´ûÿýŸºuöͶýþ¨ÚÍ?=¿ÿK·ûo ¿KwˆˆÐ‰¢ a0A„B"L&ƒêN)âbi‰ÇÐ>$l0I°‚b nÐpÈý¯ZzÞ×wû *íëö­Ú]io^cí~ÌÕ¥§Ö•æÓ»ÖmÙžOüõýª¬Ç¥Ç'AÁ‚0˜LÂH«! A!F:0ƒ6%c†“Na6‚ &z{¦ÅvÚvÚkvcº²ûiXUÓb®žÖö %ì0¯_ß°ÂWßëk]÷_Úþºôÿ師Pâ"#ˆˆˆˆÂi„Ä.»îúA„H4 ÂlXM‹0ƒb¢˜Ø¨„amPG؇a(Â ØØaX†ž‚x¦AàƒM4í'­öcö*׿^¯½ÍJ«¤"""#ˆŽ"Ë(E’€B'Êë+MB (L¡ÁS“ ÓÕIBbƒJ› ˆQ'ua¦:A Ââ©ã†b!‚ «H äL_ˆm¤ ‚RõB""""""2ä¦0@Á†A—g¡6d  Ј´ôÉŠ{ 1KiÚuÈßÕj¿±`‰|[h0¡+‚ßK_="3;ÒI©’Ö“¤Ok’K^¾ÖM•H¬ŸT•Fkßñj«Òµa8a+JÓ TŠ:ˆˆaD(† 2oB2G|¡L„ˆ-ÏQãeÊëCAíÎÒ˜PS²dUÚœEãì–GsŠ–v h}îx™Êv ¤ÂŸÊÆ H0Â… „vœgdŒ®ZÎÌÕzéCJ"\F ºwÿþj”©‚áL¯ÎÖãµCè }ü9¨ÓmǨña½©®;ž¿¡WtŸõ÷wþÒ O›ª4U7–åÖi÷Ž“µµ}?þÒ‹·ô>õ×+Kô±Å{_ãï´¯ò¹ãª"ˆ.ºçjH¥¥Òoýÿ¼qap@ÌÄ8GÁ&h2“Æâ%ƪH"ts%ó‘Ö:"× ¯”µ×(wõÿÿãÑ­„]¶ì!h‡sC0P¨Î-ÃH[g0L`‚eÈ0FÆPyÕžšyƒ$9²38^P‰!õHH—«úÿÿDYdY}&Òl8;"»Ò£6Mª68´-aªxP…¢„[†&‹@h„y˜€™q ÌÇfy†fEÆxʦtÈh­uêý/ý}]T­ý.›öpËþ“a“zÚMƒ/Ë´“l–C%t›bF9‘ÛG¿Èƒ¾áѱ£[‰Çj†m ãšCL Á0A„ Bã6G \2âó™…?"—3SÈã!ŒÖ“ÈHK™æy¶¹8A:ò2:¿!¯ôõ×ú·Õ?ºô;Óo´Ý:M²p˜L'Vðá‚ ²è_5÷IØA´{l„}7#½Pt0‹ç¸Ú}a„""ÐŒ°‹a¸a3c‘Ù xAž$BÄ'¸)PZ óA ç„z?2@Ë»("ˆÃÒ\ÁÍH2 C4Í™FgœÎ¬Š­zB¿ÿé&¿¥~í×Cúÿ»î¶–•´êìÔ«´á›íƒ/ɦØ&K˜i ÂAÙ‚8@ÍÝ2Ç„h  A°àéÐFw®¨ZV…¢óúhÙÂ.ûB(BÂ-Å„BÙ1à ¤pC¢!š!u À†˜&˜((  êÃLÐŒÙö\”§eÈÑžfõÿö×Ç¿Çþ­ûÿ]ýÓkú[·õ·kô–Ù;A—pÁ]¤&ÒmðÉëI· œ-ٽٴžë×Iôƒ ›Ã äAÚA–?Aqq4\XFv¡M#c‹T-Ú "ØP…¢âÂ…<Ø¿ÿø1øK_ÿþ×þ‡qÿü]}¤õîßOCOôâ¶ú¿×»´;°ŸØO]^“¥õjý;· ¿V'[M\Éå' š{´ÂJÙ+aÙµ–ðÐûäX /ýþÃôX?躿ÿøÿÿÓ }¯ëûþïïIo¦ÿý¾ÿׯþ¯×ÿÿW«Ð[¶¸¾Ü&¥àÓ¥´•¿í>Ó¤íaÃ/“‡dúiÂ2|úÿ×á°_ÿÿÿ×_ÿæÔ9j8ÿ5OØ?þ½ý/×kô¿÷ÿ÷@Â_þ¿Ú¾—_é>8oZÞßý%÷Ú~ÅoßwûëÒÿÿ¶cÿÿÿÿð_ÿðÃü/¯ðÿÿoÿßýñÿÿ±ïÿý¯ô¯½/ÿïÛºþ¾?CýzÿUû÷ÿKÿƒ„¿ûÿÿú3ÿÿ¶ýÁü7õÿ§_ö’þ«ÿû¯ÿ£qCý~±Z͇ý}/ÿÿmë|}[ÿÿÚ÷wÿÿÐ^ÿýºûzûúÿü ºÿüÕÿÿÿÿyǪÿï÷…ýÿ×ÿè__ü/ÿüÿ_Þ¿¯.ªRêÿøøª¯ÿ¾»ÿt¿4õüÿ¾—ÿþïè/ß÷ûûí'§ýÒßzÏÿÿÿú¿ÿÂý÷ûúÿ¿ø^¯ëþè.»ÿÅ[=:Oþ{I~÷þ×ït¿þÿþÍߥßuïÿ×÷ÿÿ_Û)ôh×þ¯¿þþXÿí-ÿí-pŒ?·K¿P¸^¿ï ´­íß~à 6–ì0—¯uë¯ÿûj_ìÏ¿þÌÿ³ÉÍß×íSÿ¥¯ ýÿ¾ïÿï_ý.ý÷öÿb»ÿýð‚ÿÿm ‹~cßÿÿ†(0Òˆ†qi1 6*ÒNc_Û_ïR:ÿ¿a¯¶ÒÿmSûUö×ýí.ãý_éÿík¯ÿoü%ÿuÖßð¿ýÒý/دÿb^_ÿÿ-ð˜„ÈÜÑM‘¸¦IÐA´ ƒ ƒ0ƒ0à   Äa4ä á¦ÅZQZØAَد°_º]õ¿Ó_×êôý¶¿ùæ•ÿÿÿû¯£õšzQÚëíš-¿×A%éú_ÛÄDDC(à˜L!`„0ƒFR r‡ ˆS¿¹Cä¡*i ØÐm1A¨0‚ˆ¶‚ ذ•&›i*ïÚZz÷ukjì5Uïÿÿ¾ïÕ¿t¯ÃÖÚéý¯iögÿèÉϯë_ÿún""""""""""""!˜h*aE2p™!ÉaN9ß²P)Ðh6( ÐaMH aÐA„AÈ&¢„›AD9°Â¶ƒ eëOO[í´íVÐ;Oºt»µÕ].Ô$ÿý¶“L0—ÿ§ÿëÿÿq—D^˜…4~/¹'RœPbØ…žƒb,&0ƒÂ"xƒ6,œ Â6, à $ÃH âÐiÈ"wi'¡U ]Ĉª~îïR:íHë¿ÒþÛâ""#ˆØ0ƒA‚ eêP#P…’UvˆÎx<“(r¡Fá *…@": ›„­Š BÕ4ì à‚v"A²1Ó´íBA„ƒõˆÂa˜A²!¤šh4ïÓ?ÄDDDDDDDDDDDDDDDDDD[ÂÐì“”&˜A…A„ʼ¨-Áù‡(uß% dœ%O¨ ˜L!pþy1؈ˆˆˆˆˆˆˆ¸8a0…„ˆ¤žž©çÄDFY¼kézA×é.®¿^ɱrÒÒIuáPÂ^vP^—ö*Ò­(\i…ÚCÄ2Ú0*Šâ=…&‚"3æ[š²ÎÆge(FW ‹ˆ “&@™ÚßßÂGDž¦xS<)3±·MÜ8Dæ-7MÓÓ™ÌÑ—2ZÈ&Ec%<ìbûá}Ô>îv³! ì Í‚™‘Þ¦efLD*2I÷_éÿßÝÔo ü§½B‚‚‚erç¿ÒqÇkoö•ÃîÝÿ\ì£Z¯ã†½÷ýýÜ8páÝ?8ÿÒÿ§ÚúÿÝ«å?ø‘oõßÿÚzO¯¥ÿG²•çe×ÿÿýµêΈäjzçKýUôó+ÿÿÿÇîN@„4BdŽ) S380@˼Á)2‰sLÓ6Ê·šd;4G4•u×\ŒÊ? ~wËÿúÜhÙN,"ì;Ñp.!Ò`¡÷8@ ˜C3†:LŽˆl¾pŒ.\ˆfFÉslègy¯ëúëÿÿÙ,¤õ't›“3䟄hèZ6UèX¡˜F·!t™Á &ˆ{„ ­0A›¤žjDHe†{7ŸÉ êò_Í„òÍ¥×ÿ̇úNÓia–tôÞ·„Òpá–xpÉã ;„vGmÃTßaÛ ¤l|Z.ØB0TCëDG#‚2€¤@Éكˑ f‘†K3qèДóqªR#&ÂË×úëÿÿÿéz[Oú_¶­½{Óû ¦Ã†Y{½$ìŒxwJÒpoö°‚z ü‰x ¸´l†š a‹í,#ѯMpšІl ¦nÑo¸ !-ႦN)˜ ‚‚h‡†0TC36`†¿ÿÖÿÿÿÿÿÿ¥ÿÿ¯«öôïÿ¥m4Ë´Ý-'Æ] ?º°á–0&tØd‡¤Û½KçÛ%“¡|ÒmÒ“ÉÞNÚ=ÐN9Òl#F4l AÒ ö‚xÚ¦Lq¤}é¡atмô~¿ÿÿøÿÿÿþúõ¶”_èÿõMÐãjžÿïé{ýV·0¿ëuÚv«ö]„“ýá:¶ºNv›[H8dáWéXdñËæ“a’ÓL áÒvHzNG 'ÐäXzÿÿÿÛÿ÷_]~Ò—_Çô¿ÿ_oUúãUÿþïý'ÅWëëÿuOßö×K[íÛ¯èVÒt›§ßá·Rv½¶‡Òm ôé8a7ÿÿÿÞ¿ÿÿýÿÿÕêZO͸ûÿ~ÿôõúü}ÿýñmëè{ßÇýÿ×ûï /ö ÿþ©ãz¸¾>ëÖ—}=oúÿþ×Ü"ÇïúÿÿÚ_á+_ÿÿÝRÿæ×ÿÌOþÿõßÿ×Ö×ý¯Úûô?Ð×ïþ»ì׫òljdu¦ÿ¿ÿد²ŸAîÿÿ»ÿá=/ý~ç÷ÿá}ÿÿ×ýb©|ÕÿÑ{ˆ«üþ\3É9Ý}?úNÞ—pøm{ÿú}ßÿþ¶¡/_ÿý}ëý-þ¾¿þ•ÿÿáÿÿÿûÿþÿÂÃÿU×~ñ^¯ÿ.¾ž»aŽÿyÀ¿þÿÛýgúÿý¿Ö×ü%Æß÷ÿíú]Þ£ëÿþÿþŒ;ÿÿü(oü/‚þô ÿÿú¿½0ö¯ëëöõ¿÷«_ÛU÷õÿ¿ø¦Íõµÿ¿ÿÅkõ~—ïÿþ¿îõ¥÷õíèÑþ·ú3ÿíÿ÷ÿïhïKÛÛÿ ûÓA®Úm›KÚZk{ ¿ûÿöÞ×õ®ÌÿÛ3ÿÿßÿð—ÿß_ÿ÷ÅÿøK ÿ ¿ Öÿßÿ¿ïðooÿ±þ%º­BA±q„A°ÂQA<4 %Ó²ú®›i« {ö[_N˜i Wÿií~ìÏ×ÿüÓÿÿüßßÙ¢Òßývô¾µÐ_þ¿ï±Q^øm÷è/Ûˆˆdœ&¼1A‘¸PÕAŠdcÂq„A„ Å„ ä%IŠ‘wݳ›ÿý7_°Õ¿_ÿí¥¶­?¶f¿ö×ó‰ÿÒþ½}³D¾Ù§ýäéw÷ÝôŸÛˆˆˆ†UQdRaaˆ†IÂÓ#uì*iÂa6F:¦£  ƒA„"í¥¦±W}ëol0•¥wûü0—^à ¯}¥ë¯ÿÞ¿ëký¤ÞõþÚõ®q>}=}^¿Üf›#0Á°špÂaOU«_h:Ø „A†ƒ '"Y;b­ ¬ˆC´ÛAlo§qKröÇØ@áׯjGM§k¥Ó"ÓØap®¿ %½ißÚKû®Ÿ°ôøˆˆˆˆˆˆ‹"Ð0„‡Ë{LÓ$ávÓ 6‰qm&i±@µXA„AmA´v  ÂlFűV“Â)†›iíScº{í&Á{R:ÓoûÞ–ˆˆˆˆˆˆˆ‰> °„D0„BЈ0„XB!„vjƒ.b¥ŽÎ?Ù8LŠ:dEE0™'I†˜œxb“0ƒA´oA à DpŒFh8¸†0ƒüDDDDDDDDDDDDFXॸ a˜B Áaˆ†iÙX¥ BaS$é<2(öI×kÇÂú^;H·¬þÅ/à«àÌÝ_âÂøªÐ4#+«PRÝ(R(GzFA]̨ȴ(P[ê9O)nC#Ù¬v¦ÎÖ2K™(_õiÕÌ–" & u3$³;*ÎÓ¯Nô/ºÛøS²©TÎU@Á3°Ì¥2•ëqwpáÑ¡XwOpžªÖI·æ—üwÿ¡÷Ãnéáÿâ?­?UÐ>áÞèó´ˆìëÿü|}]ýý¯ÿëÿýk+Ðó™«:-uÌ„¼¯kÿÿÿa‚0L¹Ÿ"ªC£0Î31T¢$› yË:­U?ÈÌ…ßÿõ»qª˜EÇãC  ˆw‚ &šàƒ@ÌÄ>G}˜"Rž3Œ3Æt"b45ÍÆ¬è%ýW;üíÿ_ýi7'Œ#[Â44zL8ô›ô]´0ŽíÜZ nð…£D*a0ƒ „(L Ñ A„ &Jœdñ‚$ ÎRFF1e)këë_åKó¸ÿ]:Xdá$ë†YÓ†Iá÷ ³ÒpéÒy;è&8;"¼ ƒñq*îÑxZ5´âÑÇa F† &ï6!„Aå4É“Œ) jH1 ‘›jHòäu#XCLd‚S©ùDCÿ_ú­~ô?[¥Â'~¶]¥Òá83Nß°ƒ~“ëA‚m&ÚI°ÉÀRñ„ƒ²8¤è&ãFÏí:69+xEØhÖÂ.(‡ãC·ráø(L& h…ŒC0 ˜A Ñ 0ìØ¸ Á*DtÍç8Ìãgãñ³$˜gÌ ²æJ³lê!9“æåÏg_)Òþ‡ÕÔ~þÇÕªìwëúÒ~¶ôìœ$¡§ÛaÝl2|öÝ“¤4¦é½&ÂA´é7:£cÑ|âчhi¬´na”‘±„l¦xëÑ­£CN4G»DÈè0˜L"Ü0TÓ Ä3 Ì 0Pƒ ¢ ƒD¨‹Ó™„Îr æ kþ½ýcûÞ‡ûý_ý}ß­n‡_׫W]¯Ý§ézoIºµpË:uÃ.—\Óm†JØdí Ú¶“‡J÷dá$ÃäÚAÂ40Âa ƒqA­ A7Fv{pÚ”lhk‹†‹w¡!ÜZ,pÞ¾>*“¢c”ç/a¯ãßýÿÿÿ×ÇíÿãW¶£ßéî¯_ûûý²ñm´ô/ZW_þãO¥ÕúOµØdœ·T ¿†O©;$ô'—ÐáÃ%•t­ÞNè'IðÉÆý/áèD}†ëûßÿÿ¯úÞ¿µû?¿Þ¢ûÒ¾ÒõO/êÿn›_[ß[Ò×ßßKh^·þé¥o}¾«Iü2qeÑ7Ý? Ù>†\Ëæ•ßð´ ¯ì?õaþ¿ú[½÷ÿ-'¡þŒuì?íkÒÿŽ~ßûÿ¯_ö— -Šö—×ý?¸þ?ûÖ½ºûé;·[ïßÂ4p‹¿á¿ðPÿÿýëýÿaoa¢Óø·¢Òû_®¡ðÿÚÿÿ×z‡«éhv×ñ}¥ý¡ÿý¯âþ¼Ž‚iŽ•º¯ý/A;{øðßïÿÿ×ÿÿ…­¿Øéÿÿ5aìøÿÿþ³TÜBåèàÖ´‘p·ÿúúëõüFÞ•ÿño¿KÒþü?Þ–ÿÿÿÿÿü#GÃÿÿÿÿ«{áÿ¿u >¿¦ 5ùuuÿ™]Xï5_Ña´è‰×µ_Éל_úïÿ_ïëþÿþ—àÿ†ÿn¿ÿÿpÞÿÿþ½vÿ‡Ûmuû¯ëp¬:ÿýoýƒÿå·vëþ½³?†ïû4Zç?÷_ßÿþëoô¿w÷ÿWÿÿûpÿèÑÿÿûp~ùcüB3ïP‹ÿÿýïÿÿ­ wÜ0•°Â_÷¶ÿþûýµÿ¿®Ìýuÿ³Oßø«ÿÞ¿ÛVÿÂ_ÿýíoºT߆Ð_^ÚÿÞXÿÿÿ Ýÿÿ @ã8¶*DÁI§iHؤÛ;I=]'ONÓîÿuí+ÿ¼’ýþsÿ{3ô¶êöþͽiuÿûÿÙ:îýÂ[úÿ[¥†ÿúû¯ÜgÿmØ!S É¸JÉB 4Ò &Å8A°‚8 Âà 1a› 4ÓM©°ÒØïðƒ^ö $¾¿Ói]zºWí©µ¹ŸVþ¿ÿV“ëjc÷齆g—_Õš{ïÙ¢ëÿïÿþÛÞ¿÷lˆQDLðÁ0„2ì&š"_ B‘¸Za‰OM4Âh4Ø @ØLŠà Œ  ´˜¤ÓaÒ°Èõ»»i]:· º»û¯ý»µn›öWö•·ØK¯íU¶×\Çÿößfý™äýl?Ï_ÙžÙ q`„hŸ•i“€¦Ò 8 ƒŠé¨a ƒa„ƒ $Á„äL¥"CI0ØKl Ó[/­¤ëa;ÖÌm¤­«­©; uÿ"]n½Õ{M†•¿¶¿½úwíì4Y"""""'LE„,!pÂ*,xbÄãÚ (§ŠA±@Æh60ƒˆLSa…ÆÅÚ†”FÓ60š 6)Ä6Õ4â¶Óa˜IñW§zÿÜH0ÂQé0„0…—a°„ ‚ ”aB ÂgÌøg)E2p¶¡ë $äc¨ šlC ±†@â!„L4‚! Â؆lPŒDDDDDDDDDDDDD׎" ÂÁa²ìãdà&™DÈÇ3©‡†W¯øj4"""""""""" àÎ$ â:ªúJSe$—KC«Q•ëes% 3µˆ„}ABepŒÈ±C„gáB•†GËà™‘<î¯ÓA玄ZžŒƒ"xÁI²†VâZemuD80Oñ"IX¦±Æð¦¬(L+3%fE¿õ´é‡ ŽpÚIÒz¨SµF"ˆ›réjïµ´ ¸x,>èöíVÇÿÿíúÿ¨»èðe~ó %þ¸û÷µmuú‹ÝuS³åï»ÿŽ.»Ý}r!/®¿ªßhïÿÁ¥Ö™Èₘg…'&2xÃRF#ÄA»""t«ÿÿÿÿþ ‹ F¶„[Ì ØÂ`¡Q †v  ‚ †lËŒ @ƒRJÙ9"'ÍÄc$D3'2¾ÿÊ–wñÚ×ÿÿÙ!òwcI´#Cˆ´ƒq£c¼ Q­¡am f¶q…²Ü2â"Ü0P˜@  ™ŠS‘›.2@\‹æÌó!™ÔþOåëVýW_ÉF§?œwhiÙ8IZMïé8dàÐ]²OÝ&Ã&:IÃ' Û¤Ú ÕØh0A´0‹¶š5Ѭ4{a0…„\Tè!°p˜A„C däh)˜ÈÂ4Œ /’è_ù ‘4sRDHÌólˆ#4o5µÊOý4—ÒËs'öÚí'õèt¦¾¡ún¬3P¹­'O“´×†Iéaé:N®m‘ÃAph1)ħhØÂ.ê ¦‹€Ó0‰Ò0ƒ³aƒbî–3ƒ60L h…ÀÁABa30A¢y6)s0D€¤`ˆ3S.gÌœ\¹‘P3<‰Œ”f̈9Ï.jTD=%_tÿU_ÿýqQ[÷Ý[þþ¿I+h4“¤û­¤êíKéžÂ é6‚wIÒl#CIºl#Cé^4ltÉkü"í¾»Fª”'0‹Æ¾¨XEÝ "ôÂaø´D²;&á¢;#NA‚a4Â â ØÍµó.:Si3A”«ÿèq¯ýü}ö¯ê¡ëëmÿC÷x×n½ºTÓþáÕéÒutžœ2xÕô©´¾A…WZM‡dwh ƒnÉc« m&döx`‘ÛA:7Q£ÃA=†i`áÂ/3¸´k£cF·'mûœ4бBѸh·Wÿòô6¤,Ð"?°ÕÚ‡·_Äi|~‡¤5V‡ïýÿªi~é.û¥«Óוµ{„úºé7í;/û´êôôíi;Nº¶ ÉÉÂV÷—פŸt°‚vK)6“i7M‡‘GH&Ñí²+¾M ›ý…ÿ­×åÕ‡_ÿå‡ù8N•{\=†×é?×ñÿcøÁ¯î½$õÒZ÷^ß»Òÿؽ­ú ®+èU÷Ûz«ÿݧÝtº !­]„2ÄÓi>•ÿßü/ûí‡ÿõún¦¯ŽÁͨ1ÿý¥û¯‡þèœ>ÔtºõÒÿ»ÿïuý-íÿÇúWúkû±¤ÿoéizÿû÷ÿÞ?á×ø?á¿ßÿý~[Û ÿ¶—è°Ÿ`Ña,4XßëÛþÒn©ÿÿ­…ÿöóE¥ïJ­û\?µïÔî4?ÿßÓ#¥M}?ÿáÿ†ý ×ïý¾û à /ÿÿì<+ ê¿üzö—ÿÞ?ì?¯D:À¯ÿüxëþ=piúµÿÄqèÿÿ_ýÛWoÿÿÛÒý!ì8E¿ÿ:oý†ð­áݺý×ÿ¯÷mÿ_ëð¬?t¿õöåèY?÷CÿËЕOÿa™«3Ûý/Û4[õoÓíþÇ~[xt÷ý¥ÿø|#DÂ4~ßnþî–+ÿü"Çú†ßì˜êûÿ… ?¿ÿé‡×ýaêóÑÿì+kï÷Ý®gÿ:ׯlÓþÍf‹µÞÝ/õþ¿oðøK„¿ý¿æw¯ÿÿ ¿ÁúüFXÿïÿ·‡þ¿ð‹aû_ü/ÿé=†_[V*)‡ÚÚîÃ_ÛIÝo†“~Úí®àŠ}˜öÌÑÿõIü_»u»u¾ëßûo[ÿÿ„¿ßí/ozÕºôöÕÿÐ_†ýÿð‹ÿÿb!„ÂÐj ,AÄ0œ‰b“m&ÒÛJÒm+0›bµ¸¦˜0» /Ý0Âúþß­~Ú¿›û3×7ög®¿«ôÝ·Ußéý¿¿íÿúú[þ—_¥øwÿûA÷é]“‰Ði ÆÈÜ% ÓA Ç $Å1È–˜†ƒkb‚qV6Ö*Òl í;MBÿpÂV«öÿ°–¾ß¶ÚÙÿ}}Òõÿ!¯Kú¿ïÿ\Úý×Û_ÞÁ ÑuöéýûÄDD‰B  ­aXQ0©¦™t˜jšA´Ä㨦˜¨Á0ƒ X!º Ób›Ní Ç„ÒcÐ=;O·IµØom[ö¿ÿ÷ûi]·­¾õþ}^ýŸýs§Ø[]_ïÿÛ3ìÏÏÝ–ë?—#P„! ¦0©“€„Y…Tša7c6:c†­DCA°Â`°m¤Å“Ðm¥ õ†CM;°”4›JDÝÛ[VÓmoÕõ÷J°Âë~¬PÖûöÏ_¯Ú¶º~ŸÄDDDDDG`ƒ$á Â’€˜„L“—bqÕ»Â[pƒ A± ˆ†ƒbw#0ƒŠŠa„œ Іh6-†@ƒíBaÓ (ƒŠˆ4Ó´˜Ãh(`ƒ²ôU…#«¶î*+Ößô"""""""" ÍXB4.!„ÉÁÆ“ „"-B Ba2ºÊr‡&8@³–=‘ºbµ’…¯Ø„È£„LŒtšqL&£ccj#ÂD@a ÐAÐ@Â?Äq›§#”øg „Âaƒ„)‚a' ÚÚjß_ÕcB"""""""" ˆˆˆýWÇýuO&âæºÂ ‘6.]E>²Ý(£KÕª‹]DZŒ®•¨FA\()š& ¦CÄœv¡Ý¦ì]‚‚e|È7pêÄü§”&d+8’åQ}ýðáÕÔ(((& “`FMµDšû[ÿî?©^#±@`)-Ô!غÁ25¾8|5ïô!ûØdWðš…%aÖ>>¾Óì l9 $ thá~ÿÿÿÖßÖô!æïÕ#ßÿïx»þÖºAÿªçjÿ YRÿÿÿG?­Êü<Á¨ji’,ÍÒR]í\ì&^¿ýö¾½<#? £8`†p $B˘ ϳ6D™³p¤9Ž{2s”eå̆•u_×"þd´¿ëÿé‹AÑ»£e TÑ­„,&¬0¡0œŒv 0L&h…x@óbÄ0P™@×.D2"#ñ“’© ÿë¯óŽüí‘®H_¦=¹}]'t’ÆÉÚb’l2X%[§‰V%[‚ ¤ÜhðÕQ±ü•°²Í¢0‹0Pš-à ¢T…Àɦf)†_8ŒfÅ3Œ3Q²|Ùž2AeÌé/.ÍIs*%ë­uP¿õéÒ´·KiÜY8¥pšm[ &ŸovIé6t¥á‚„ÛÒMò1è Üh'FʨFƲ·†‹v    „Âq ÁÍ‹Ág0²ã:f&38Ã<3\`ŠN)Ïfl¾mEÑñù gRÕë:ÍÊt‰¢9h£!-N«öø÷ÿý½:_]:VÐiWëmÃ5†]ÒvIé^Øe¥V“ºM†a ›‹FÆ ÜN;FÇ%a„aè»äì4\„8г˜$h`©£@`…£@hÐ0šCˆ4[‡¤1Ã<Ø0`^ûâ6((@Ñ ‚œ ƒ#.0@Â"cE"¤âœG̺>3HÃ5fãH†y·dA[øµõ÷øÿµßí|W~¼%ÿß¿´;kì!W\¹}$Ød%i8`˜ é\&ÐA´†Â7ÉC  &M²,4› 2ÇaA„‚oT6xöJkÒÑvÛt-UP´k¡h» †¶®eŽÐ´-ØM0L&aÃAáú"Ž¿Kÿ_ã÷øë×Që¿UýSÕqºþßøB®»»{{®¿ êÃ.a6ý$ì“Òv¤õ±Nsµ¤öI7^ÂiªH62Wd‡£ÛvEŠNÉcIÙ =&Ò ƒa„AÐâÂ3°›†vìËQÿÿ—WÑuëý/øÿ¿C_L¾¯¯Õ}z¯ïO„©µÒè}«_°ï]×q ­/K®Òt¯á;B®á„ö›I†Žj+K_§v–Ã$öF:I÷“ÆÃH7oÿÿÿÿÕ~jûþÿ–)Þª¡ÿ_ÚQê;ÿÞª=_Wû¿iÒ§¾ ïÿÒkKíi~ÿ·îúý{ú_úÿzK´Ó ¤ŸéÃi7 ÿÿÿÿþÿá~£ßëôZG6¡ú/N²õÔ±ÎGÿö¿K×þÓJ7ã]ÿµŽ\=µÚK~—ÿÿøï¿ákõûµnÔ|7ðÿÿ¿ÿÿºÿ…þÿÿÿaëÿN´?ÿ2Ž>á#0צMÌ๟¢7*uß‘G[ëþ—ÿû_|>ûô?ÐÛJ:ê¯Øi]ýÿµÿÿýþð¹c¿ÿ÷¬>ÿýÿ…ÿð¼kÿû¯B*‹Wà…éJmé×â´¿ÿûÇþù|Ž¿¯IñØ~ï÷ûÿïýÿý¥ÿ¾¿߃j¿÷¥~±ÿþM”ëÿûœv¸"Ÿÿx/·®ß®ßM¥ÿþ­¿Kú_™;Yuu‡áþWû3Ûÿÿ³O÷'^¿f‹]o¯ý~ÝöïûÿA?ÿ„\yc±ÿý-/ÿí ‹úO·ïzKÿÿá{Ãÿÿþ¿ ÃÞÿÒì0–»ý¥ûa/{¦×¯ïoý³Dsý³Eäé÷ÿد´¿ïÒý½.¿ccqßÝŠA÷¶ÿ,wûÿþoü?ÿÿý~7ïû[ Ü5´ý³Å/Ã]WXk§¾Ùÿ¾»µOû[a©û3ïÛ4NÙ¢Ýòtô—nþÿ¯ÛßÛI~ÅþÛ¯ÿýi}aý¿ïûmFˆ}_ìPAà 1„0Æ„@ ŠM4 ˜¥t3 Ø0»v¿ $›~ØK°¿{ _íj×°E?ýµÖ·VßûUf‹³Eöh‚6·þÍ»o¯nëûÿô¿ÛëÿãoÒÃù'ÿa†dœ! ”ÍÊ{ aá…~Òh4å8¦‚E±AØH ÙqiƬU¥eø`ŠqW{ l.Ø]†«V°Ï{é:^ôøUuûZ¥¾›UVÝ[4[Åmoÿõþtýt½³E~Ù¢¬>–ÿÕñ'„DA„ !dáIÊèa|¨–ƒNÚ 46ÇLX@âšb“঻k Øûêëצ\IvJï÷†ûº†»oû¥ë÷Ý{}ö¿Ú½ªëœÿ>í^¢"""""" Á˜l!&A ÈÇXkh ÃQ8è ÐaÔ0‚„pv“aX†ƒkc¶)lhƒàƒ‹v+A¶ØIŠáéÒv“ ý°E;A뿤évÃm{ L0—éÿþëq|C,&! "\lœ&² PbŸL ƒi=„ÜŠ:nƒM6) A Ú<à Fa`ƒ0ƒ°”4›JD²& a¦›ñWÚ×µ†•¥HDDDDDDDê2”BB Õ† „b€š Âg¡ßˆºiÃÈÜ.g´É:þ*)Šwi‹AµA ‚ †0ƒx`“ ."""â""""4""""""""k幓‚ `‚ œ&†Ž‰žìœ(…Žž˜„…TsñÄDDDDDDDDDF’½z­xê¾èú¥âáRpe®.q•ÄÙ A0RÜÕâ£PLîÎÝÒ :0äD¸PL&W$UI·zGdªaA+”æY™gikôfní¤r…*#¿ÁJ¢2üòÈÚ'FÐ)"¤g`qßEFv­kV·iF\ÉÍ¿iæèD6uPΧg­ä?ÂêBìíkëÎè´œ¯ÿéêIÚMÆÐi N'ĨxEÛXMD;¤C–ˆa;A… „GvÁMÄxøÉâïÍÄ<Ÿ!¯kþŸŠùRñ¤Ø2Ó„&Ã$ô­¦ƒ@ÁÃA°ÉÂH6ÈðJÆ“ÿ ƒ #=(ôk4k`£[¸Â5°Tø†0@Í'ŒƒRœSú‘6¥AóqVÊ3VHò_:2t@£¦!¹š^—×ׯTÚ\!ߦõt)[M>àË› µ2ú®‚m'A6y;i;¤ØaMÇØThaDà0ª©7 "ˆ* E‘Í„C¼ `¡aKŠ0RãÈã@ 8ñ$%²8 ™ hË8ˆèŽŽd{#ç?©@ÊtHŒ5²ä¤ “ëŸæâ)Ñ­)îE×®MˆýÿwØ·ÿ¿»ú¾ý7ZéjõÓö ¿Vú[$þNÞz‚n#Aôlª‡FÆ »aи°˜Eà h×FŠqaØDà0‡Ä\[ŘÐg b®/ ‚¢  ¡3`‚ä`€æƒô4Éü eQ3N¿ãÿï«ÿ«Ö×Ýuzuëúí¡á6צÙ'. ¬z«9ÝØeÙQI¶Gzm‘á+lŽÜ“´hÓ¼ýI´ƒòPöÐMȃ¼8>µ¾ °xïF­úƒXEß›°‹€ð‹w#‚„Âh‡²Çaaõ¿ápÝ/ÿ_öÿ®ïqðÕû_ÿ}ÕÚVëwkÕñum„Ú[ ¦áÒowJ–ü2èitÛýªŽœ4ìŒrÜœÉç áÙ;[²;aò,:}è'ÐA¸ ÜhÎôh¼áûþ‹O`úÿÿ‡ùDq‘Ùta_CûK^ª‡i!þýuÓÝúþ—ýí;MÖºï¥O¿ºº»·¿õ­û4Ô&×½ÇØO¸aIúû^öÙôœ2æ›A;-'ÿíÚÿÿ}l?³ÀÙó(Ö?Ô²Œºüºÿ÷ißÿûú ý÷ülVËálzᦕÿêß'šÇýw÷}o×ÕÖÝ/m„ÒW¥®?ÿÃÿÿÞßïøUÂýëOU_ðáÿÿíÞñýÿפ#‡üÿÿN·ûú×÷û×¥Zú׿õÝðÛ¥ÿÿ^ü x_ÿµÿö¿¯`ÿÇÿÖ^¿ÿ‡¥/Gú'³_ÿ¾—ý}þ?uî×ëøÇÇý|~M”/_¾ÿõúüÿÂ-ï„[ÿßÒ»ÿm¿ÿØá~½ëÿõaþÃþ¿ÿ§­¾ïëýûükÿ县ªæ¤žÿïx¯ÿ÷ÿíú ïþÛÿü ÿþü/߯õþ½,7ÿÿÿk×ÿ~áü'ÿé/_¯,>\5û×ögäBßþ»«ó‹ïû_Õmxÿü87×þÿ·ÿýýÿ„g†ô°ßÿÿ÷®?ÿö ÿáÿ_ð½{[ö]õÿ[ªýý™þýw}™ç&Û4M6h¿ößþü?ú ÿÿëü%‡× ÿÿþ­×ÿÿ‘‰?ý[ÿÿð½øÕ´‚§±§i:jÝ×÷éþÃUí}³ú[i'ÚÕ®hÿ÷oþ·ÿ_ÿÿúÃôîßöÿÿúÿöô¿ÿAþÿøEÇÿ†! al ƒ°•A„R'0’ ÂÂI¦È…ŽØ§A¶ l%|v¬0» /ßæú!¯¯ms¯ÿ×î—¶h¾ÿÒͯK³<ºóOÿþ+oÿûT¿ÿKûþÿôþ°`„D0…ŠÙG+£˜LRûƒM ƒ µ\SAµ Ø§Š[ÓöûI×½/ÖÛÿïû_úõïô´¿ö¶—÷¤ÿ_þqºúþºÿëy§¶iþ¾ÝäØî¢#ˆŒ½«" &Ndn' «PÂtÚ Ð@ó° @ƒ0ƒ´­&I"hë´®Ì+; GM›[¥Ûëk}­ê’±Ú]ða&Ò_îêÝuÿØj¿ÿïí‚)ÃUµºÿ³óðÂDëXˆˆˆˆˆˆ‡`„!þ±QLB7 P@â‚ Ž#ˆ†Ã‚ ' Â 8a ˜A±ÂA46­&! Ø¦ÒM>!¦á;I†ƒXdy=0à ØAݘÕuÔŽ½µ¶V %°ÂZú· /ˆC¯q4 a 0…¡i’pLœ&F<1 Ó $Ó¸¤í’tÅ^Š‘G¦ Riì] 1QlD0ƒv*"؈ˆ4ÂÅ‚Å1Ai- ì1°Âcú¡ Â`š4ÄIЃ(P­À!“ƒ—ˆaNŽ '‚‡)‡69pqÊÅÉAcÕ‘G« « JqAbPê0Âbëªâ"""4#ˆˆˆ8ˆˆˆˆˆˆˆˆƒ"GHA„ Á ¦A’p¤Ùôº_¬DDDDDhzIe¸T–´«A¥®‚ GŠZ½ôJ(ŽÂZ¦40ƒ¨µ7 ™Û³»ˆµP¡Ao®YG`Ù…páÓtAA +Fd7Œ…³±¼ìžwEÿ]#9B…;0@ ¿ýÑ£aüíj]BŸŽÅûôg{‡°áÜ:ßý§[§ÿß×þ=cýo»ÿÉ5éûãþÓÿ_ë_üFW¶`ŠáñLÆPdÆlÏ¡äæAæ¯!=².²P»ÿ… §vŒð‹v ͌À„ „ %Æ31sA§˜2'ŒFdoýu;-ó´êŽÅÉJìJˆG¶mGŒJ;ÃhØÑ±èÖ¢áÅ„k ïFpÑ Â`¡0„…²5Ĉõ$‚D‚g8fÔ¬=e𺮺þ½ Ú¾ôý¤Û „Û¾ézNl$Ü”:té»Gw‹´áp h( `˜ a’ã(;0K™ÅåȆJJŒèÉö¹ÌÔÊ´tG•h芿ÿU×þºX]Ú_~¬%Âá[ßJÃ.eó 6ÒRÜàÂA6;am4|ª5††Â-ñÃXD‡‹ÿÿõéÖ¯WÖÝ÷ÒÒºwÞºK[h_¤+ Ã,è:Z¶8†a‰°Â Ó†_4› i’ÇZVA´›d±¥¥†Jé6•ÓaÁÚIÝÝ2ÇiÒ ôYzzü9`ÿü?–7þL0ô¿ý-Ôq¯þ×ö©ßïß{¯ÿþ½]mzKÝ]¦Út´Ÿ~Út´­ Ý{íû-?tµvx'Ô'®? ìëéÛ_ÿ{ì%ß¶¿Òö+_ð_±ÿÒÿú×ó_ÿð_ ÿÿÿÿûëÿÿÿ«uÿ¬2n«û1ögÖqÿæÖûš/ÿ4ï×чÅ?ÚX}ÿA?ÿßÞÿÚN—þoð‹ÿÿû¯ÿûÿÿÿáuÿ »ký]}°•÷û­íŸû_lÏöÔÑ·ÙŸ~—¤9祺[÷U¥ïÿßÿïÆßúú ðwýz_ïÿýÿÿÿk‚&=µÿ¡¶¡q!ÚQXAÚ iA…V+N /Á¤ÞžÃ zßõ¾Ý­›_þ¿oýWþßþ¿Ú_¯ÿ÷þ·ÿÿÛÿ¾ú bøoÆ©²N™¦(4Äãðƒ0ƒbئ! Þ!± Â ŠµÓb¤ û°ƒYåkí+?¶}}êô¾½š+KÿlÑ}fžõf‰³Oÿ³D¿iu·Þÿïí¿“¯öÍ?{ë×útûï 0B `˜&qdàüaOÂd´ÃQ Ðm1 Ø”< q$u¶“ ÔNþÖÿV·_wà v°ÒºvÖÒÿÛ ÿÿß½_÷ÙúÕµ÷[þìÏ×Þ×Už¾ê]?›‰¹U„DDDDBÀ‰qe“L&V¯iŠiŠb6ÂAa ˜AÄlSkkª±¶_´˜§6ºƒ™uíÝÅh;»Tû_µý^Ø4–¡¯Þà { æÃ iiÛÚú_u~qj3×DD_ ÂdáE[¯dc¤ Š0ƒA„ ŽÂOìSA„ˆ;6˜ÁÈ„alC4a)†œ6lv“šl4R 66;I†p˦Öì h2:í´´»«¿óÓB""""!‚`„0‚Âa &© ÓKmZ†™8VÓ$ëÃ"Ž•0Ä&‚aca1M Œ4M„Š‹8¨‘p0ƒm(jv–#J’|DDDDDDDA‚`ƒ"!—`…0B!“€A„"A¢ ™(9Ó#u8å=’„Ú¨b˜®)ªI/B""37Õˆƒ(¨ÒZמq ­Mžxôº^ ¯ìB×ì L%¶PƒŠ‹ 2Ý/•ÕLŽ()6N±¤CP‡bèÉA…KO §ËpfvMáé]ÒfDà˜)Ù)VLâ(ËpNí÷»ÐFŸ‰9B‚…+•–àLí$RD5ýý}G´wµä •ÄAAABËßθdñÖá—BxÒ·F¶“ÉÝ“†m ôAÄ×öýcÒ]¯õýƒ_½äƒýöÿÃHxÿëÿµýkÿûUýýÿÖû}m—ÁëúÝ}º]zMÐÖôþ=?²v•½è78KK§\{ÿ·íÿÿáa¿ÿ¾‹¯Í_aì?¥éU¿­ Ðýâûÿãø÷´£ðÛ×ö\_Râ7_ÿ÷úÿ­Ðþ?ûÓ÷Wïùc‡¥Åÿ…ýµÿÿöÒ_`ÂûÑuï–£ÿËÓÿ¿ú[µþ»izõÿü{Çúþÿ÷üßÿ¯Üý·§ÝýÿÿÂ.?ƒÿý~Ûÿ×ÿ¾¿¥ùb¿–OŠúË'å×mR›SW÷´½æWå§_ûÿÿ_ÖÂáþÿ_¡öíonÒëû×Òÿýû¶¯á´høoß§ÿÿÿ¯ÿ ï_üã½ïý¯þ¯ÿÿÝ®+þ+ûËÐ…6½þöãþÿKÿ÷ÿoî*ü8A~úÝÿÿß÷ÿá¿ÿÿÿt¿_ßÿÿýÿ_ õ×ÿZÃm&Ïý´­[¥ëÿù©?W^Ù¢ÿ'^N½×÷¾Þ½Òÿÿÿÿü"ãÿ÷¶“ÿýþïúÿ¿ïiá[þÂÿï¶Þ˜a-¿÷K_½Wí-]~×öÕí|çÿ’_4×Û4Wýÿÿíê‚ý~ŸŠîëý/_íí/ýX¯ß¸ƒÿ„gÿã %hžÚLCµa‘ûÚw¶•ÕÛÚðÂTà ÿý™®í™öŸÿ¶g·÷ûfˆò×É×KþÞ¶h·«4Vh¿I¿Þÿ•ýÿÿ„ÿzXoß wëÊæˆ†ƒƒ aÞýaŠ‘‚ ÆÄã ƒAØJA† 2%‘10 Øö)5´¬ iö¬0©°`•Ü5a¤ÚZßý³ÿö¡ý¯ýýŸý×ß]⿳?ìÏ[ÿÿýщÿ4úÿô¿êâ""#B" õ‚ „"h˜¨„Ä&ši‰ÇI†MAÅ1(xA„¤ÅؤÓb¢›K¿b› ìUÕƒ ß°a+K_ízƒ [[a­ê®þÚûj“ÿ·Z¯õýúæ?×ÿ÷4Ëu$gqšXƒE„Âa ¬±L+ &a˜ „A„LCalU²#†b­(ƒƒ#ì¶*IŽDž˜Ø¥NÁPËê±ZÅ-¶Ÿ¸_ÓÕ6ý†õn¿_mz†ƒ ÚÄDDDDA‚0„3À)ÜtNƒ ‘¸[ ÖØNÒiµ8â™'LTaœqM=;  ƒA‚ÄC0Ð Â  äJa†‚ h0ƒAÈ=b Š»;×ûAÝÚ±B#\DDDDDDDDDˆ0„M0šaa0A„CA a‚# ¦F9cö½¯kç´¯þíÓhlN>(  h8¶.ÂOñ¡DDDDDDDDDDE°ËXL(BN¥r•IÐdo•aRýŸâ"""""""#&ĤzZZúTªžá4‹ éuŒ1B–¢¶–˜«P¢6…pL`ƒ+§Ê~WÍH^ ‚ehÈ-M7êÈ-¢[•Ö—H4¡Ýó±6„˜³;ÑTv e)•¸·Ó¾/´áðÉ@eš íb2@™oì‹3¿2ÊY•ŒìŒ©(­UþÓ¦UßCDè*¨P˜(('Æÿ|7[»»è@Á7õ£½TÕ­ÇÃKUïM4Û­;¦ÿý,qß÷~…ß~Kÿ¯úÿ×ÿ¯¯É/ÿÿÿ†¹_³<Ùåt5$#¢:£È–¯__S´¼¬ÿþ¾<L"Ã4BÄœ@L2\@ƒÌ›3ÆEÈÄŸ›Dñ‚(:; Š‘œg™ÐÈ8«y¶µû{i{þék÷N•Ó¥¤á—=†N a:’;Öw»#ŠOè&4gqhÙTlh»qhXDíá€Ñn#Bð¡ „Âf6(E¸˜J!L"ÇeÄ.3d0‚‚aaa ³b„Á4‚ `†`ˆ´šãxR€¤Á“æÌ†×®\ÎŒé™Fs-ËãÇt¿Çÿë§Òÿö÷¯®‡ß® é5 îs†OšRn]IÙ,i;%­.JÜ‹L=ÚL±ÐaqhJ*h0’eŽÃuì›a4›74"Ñ­„aØEå4>‘°8ѯš6Q­„]†HTkhÏL © ‘ @†0ˆ?0PA§ÿé/ÿßøh_Þûî‡þ£Ã úïË ãUú¿×U¤í:íôÜ' Ú¿M¤ìïk žC „íU;3Ú šN ž:l;ÒZ»%IJ“¤œ#]ðÂKÒy;„k„&ÐMÓM„pŒî,#wNO5´ka4-ÿú/O÷ô?Ö9ñ/÷Kÿÿ¡ÿûíÒÒ_Øûê×תk_é^¯ØëÓ´îô¸û^•:ÿ«¥m0+JÒÒvN:]†N?O·ZZ¸2ê$ô´'d±«¸dÜ*m&ÂRÞm‘Ûÿÿ×Uö#ûzÿ,Ÿùuý-RH ¿o×ǯ×ãHwÿÒºÞ½ÿþÿô¿ý*é¿¿·_èt’èwÛ]~êö‡¿VÚzÞ‡m/v’Úqÿÿõø/·ÿ½^¿þÿï^4ü?ÿÿý[ÿÿÿî¿úÒô6ïQ_ê?¯ý(êÇþ¹z¿J«ÿ¯ÿýŠ{_ÿ÷×ð ÿö¿þÿÿöþ!/ìïë­z,?ÿÿ÷_ýëÿ¾ÿÿÿV»þ‚[‡í~‡ßÇ_ýºm{ÿÛ¿ÿm/Á¿úÿïÂ4÷ÿõI&½ßõð¿ÿÿÿ÷ëÿí¥ÿ§óUÒÿîX×Çô¥Õ‡ã¯,ú\z×þÿkÿþþÿé~ÿêézþ—ÿëúW\±Øþÿð‹ÿÿÿÿ¤õÿÿ×ýþÚ8ï­ÿ×ÂñÖÃð¿_òÃÿÿü½xý–åþÌûÿýÛ4ÛþëÝ¿ ú¿ûýƒÿøAÿÿûukÿïºÿßú]_ÿ…ð½øoÂÿÿ^ ÿÿÚKéÿØjÙþÖÒöÌÿó}ZÿÇþhºööŸïÿÚûþÿ¿ ¿ýïÿÿcÿÿÒ†ÿ™ßÛ~¾¿XF„h÷x·ýÿ¯…¿ÿÿø[Oب`–mmÒðÂZ¶›{ +ôþÚëgÿKõõ^8–ÿ1ÿ÷¯ÿßþé ´¿ú½ˆ_½¿ñLÿ¥Þ—ËôÒÿÛ¼"ãÿÿ¶’-ÿPL Â6˜¦"a š Šˆ8‡iE6v•C0µcÒøkl_¿ý´¬-YÿÿW4_ï`ŽÿÿÛÑÆ ÷ÿúHõÿÛÿ«í´¿ }7{~‚ÛÿÿÒþÿýŠA/ÔDJäA…#…jd21ÔPiŽ)â!„ … (ƒ S"X¤Óˆ5M4Û¨­ŠO[ÿá…ÿßÛVÌ×ûþ’´ÿí~ϵÛöý÷4V¿æšïÿ¶æŠÍÿíšo_`Š_ÿõ ’ýGQD ÂÂaJe†IÎ8"?´AŠÉ:a4ÐA„Ùtƒ4AêÚCA¶“pئ~©¶›`ŠqR(û¿m%mOÿ­×¿¿µ§µºþZßþݯuëý¥kî¾q¯ïþ­šhÕ~¸ˆˆˆˆÐˆˆˆ2´A„ ˆa2¶€ƒkN*,&ÔlJC6.0ÓC8ih):Á0©¦«Èz8`©§iÛÓtµØ®®ž±ï¯©6¬0“×à ßzýû}CKï¼ëèDDDDDDA–, „ÍLã¦Fé¦ak†![{¡  ƒjħ‚ˆaÓNƒ @ ã`Â!„ '  ƒ°©„ÃAÆØI4Ø«Mm¶Ú}˜V“Ì-5PÁ|DDDDDDDDA‚`­¡Ù(=²†ŠãØ":e: tÐbì&IÓŽ™énÚN!'ÈÝ% 1A6˜·c0ƒbÂ8jÅD— i‹ÔEöœDCˆˆˆˆˆˆˆˆ0@ Á0A‚ !3ÄB!…A„Ê 0„C2PÉ@^È®¶bµl“ûON³Óˆˆˆˆˆˆˆˆˆ‡¯l!ªN–“®,ßd*%ô¾•'¥õ¥¥Töµ0Kê«ëª;+J_`’Õ„†µ&Â^!W6—a5L(29 DF!C6'™U¸€Ý·|¥ L)JúÅJ;UCMçt-<ÈñÂaA3»ek*™ þÒØtÃÚ~ ˆp"†0L¯ìînJguÄÏ;õÿö¿î.#óõ)V •ˆ(P˜(&væw[!ì«‹ Zkk®Â=‡MÆJÃOtaþ¡B‚Æ„qÚ ~‚i÷ áÝ Ó¸wFzÊêòGøúN_¾Û[뻤áêªDò‹ÿ§Ç×ÿéRÿ‘eëúïÿú]r ÿúùI?¿úÿü¯28 @Ï û$ S™¶y”59%RvO“ù¶HɛжuZúâDïüÿý0Mv¡<*ªx&f˜ aBe@…Å08† x Â!ˆ˜3âŸdxÆ_6g†Sæ™¶Hø )9®r:½U/__2ÿÿ¥íSª ê¡ôŒ=þª 0­B.ÜZ.!B„]‡aìa0P¡ˆ[`ƒ2J)ˆ¾o.²äH5¢ÉyžižYÌÖ¥ê¿úHˆºX3 Óº)ÒT’HïG$ñ KYËå=tÕ5/!é¹<¤ÌðÆ‚m„A„‚¡£gFê65‹»|qq E ˆ[‚‚—‚0CÔäGG"è&Dfqƒ%ófp³Ce³!…>)"ŒÃ>IȄͳìêÈ›ÉÑÄHŽˆã3óy¨ÊqÑ ~¿T¿úèkÅ*KªQIR÷J›u麷dâ®ý{†Ožî“¥a“ŒÐM†šaI<#CðŒíoT.,&wÐQqh‡" -3bL ª,y Bã6Hœ ¡ˆ^ ÖA`œÀÂˆà€¡3à„σÈâ‚ &\ˆaLÆD2ŒÙÂÙ9 Tèy¸êÉçÒU±Ò¯Ht©iU»÷Òk׿]Þ´·ÿha÷z„ ¤àÌžpá“p·dväí£CA•×ßÿÿÿÿÿø/ûaÿ¿ÿø]t‹œzÒ«fª­ŒzK©ÇÿߣŒºU_ï·ÿôÅj—Úa-ÿ w÷ÿïî—„hÿ†ß×úÿÿJÿÿÿð‹øl¿ÿÿþÅA¡ÝTRÓiS„¨ ´¯ŠB“ký³ÿ¯~æ‰ÿ8¿ìÏý³=ÿWÛªÿþúÿKÿÿºô¿|¶ð#ðÀaŽ­¨`çþýš¾<Ý–%|9¯`oI?žÁGF*Úî–nãÈ?|¤!_î®>”á ãîÊmä?cæ}D|sá ¤ÿÂQ¢à ñÿÙªø‡àäBÇĺa²Ü+Ès_2yC7Ë_AùQí|…ì|Ï¥dø¡à¨—-âSÎ>@Ì *¬¿<7kêsýËY›ù!¯ kÐ _(ƒš=¯ý‰ôŸü…Õ¦u²Ÿú ªÏñÏÁ*åVâú@?‰lß® x/”3Iå€x—¶òcæ{›||ð€b³z‹aƒùµV?´'…À8Òuãÿl"ÿãµã^{Rù}±G¶òcæzóþÐúBSAÕËv #óÜj´¿´U‚¦cðÕó7£Ìª?<òÏ(ç¥/•ô£Ûy±ó=&_Ú5@W„äcß}ößå¨öŒ»'÷~E÷_ÿÚb¼èû)D\ô{`ö>gy'í«—ý׆­Uqѧv?žÑUŸö…ñ!s³CÓU{ùîǬ@æ—ÊÎ(öÃö>gNh;tÝÀÛLHÿȵ]¾;øá˜¤¼-#ózçü°OJQ9âmäÄÖ“ãŽÙ ‹›T'ø–Ñr?<Š«/Æoˆ .°±œõK(sú¡ªB’qŸ­(·RO{a{2I>.|@—¼C/ݵ…’Uy~'øêVÜÞ#¼ùU~AEKä/ úRù Œm•/mä?cæPˆ^3‘Ë·‰µ@O÷g*?!ÅWox±˜±ñF·’{jù­snœüƒò¤û,cøåOÛy±ó0[ĺû‚]ÕX ÞÉÏþ=UÛVÔäR¯©^²žªÓ¹õ®”Û¡ÇȸúS~Íþü¨öÞAìNYçžPIäpFrGëQÍuÂÝ:ì_ʲÆOÜ•/käÇÌävÑŠì º÷GåGÙÓ …ÛÈ=‘Çàô Œv®ÃìÈ€ _²&1±höÞAìN?ÔÎ+±û,DçË_ÊšmaÿžkùQí—`ö>g#Š+­6±ˆ¹úP-ãÛÂøQí|ƒØœ˜bºÁoÎ~Tï³  ?*=¨{3‘ ô /5×}•?¸1ô¥û,}vÊkäÇÌäqþqEuâÕ1£éŠ_²&>èçÚmäÄãÈÅ.?*ëŬ}vÊ”ÚGýÁ“íG¶òbq­ÖWeö(¿ç˜ü© „YbþT{o ö/¹ÇQŠì› 9Ø)Ÿ?t~T{dÅœŽ8¥Q]a²‹8 }GöÙ‰(¿•Ù±}ÎmˆD&¨;dœ×mýŸćÔÉ4ëcƒä§åMVBtYÇCs$-”oõk[jQÉ…“äo~•¤úd%±ä¨J‘tÈqÌIø-7U¦ÌËû‘i›X]Mv_Ù÷ŒcÜS¿³-تOûæ—¶H&Î,ÑŠìÿ²­H?¹_Êšt›nq~Tý²±g/kNóÚ­ð9=«li‘(ÿVôƒ¦C´ü‚jƒÙ3œšLcžÕÑǦÂ~íOÔSÆ›ÿ–j1ÏJ^ÕÙ3šÇ4`WR4ØJUÓ-Ï>ZþT½ªdÎYÍN>‡ó®¤épã"5ô8ŸÙvàr€ûâjƒØ³—Å.2zWP4ÈH×ò¦6™Ÿ¸¸úQíP{s8¥À5Ò.ݳ„QøPt˜H c\ý)ûTɜأ®‹û*ÜôŒ R"ß$”#ñ£Ú¡{&s S€ãšè†lßÁN:°?s4½ª²g<WÚ—Á'¥oÔ¹iW@´?òÄ~´ýªdÌÜ~t¡”º|=dA>V>„ÓÃv tûèÑíb/e##+ŽXS•×¹Ö»xfÛþš£T2ø~5$’~&Ÿ´‹fÌÿ6-ܺŠpž,ýñT®­ZÒrœgƒPãšµ©›F¨š%?|W´|-~%$•hú`‰ô5࣯jýžŸm߈£ÇÞKfϦ ¿ãM žçEU(¢ŠùFAæ>ç%˜õ-ɨŒc<¥XeÇJa¸®vš5ÁàT[<Š´Â¢+š"ŒóHÉéRGzv8¤Bƒ4Ò¸5; fÐOŠ¢Jî¿.1LÛÅYeô¦íö§p*²sL‘qŠ¶Ê C8ÀZnA·ŠU^ù©ü´¡9éEÊhhJ~1ÔR…÷ëÞ€TPIÑœÐV¥ÛK·ž”î!G5"GÆ <..Üõ¤"26Gz”(R…ÃçÔSÀö¢ã°}iÛr:S‚çS±ž8¤;lÛÎ)1R‘Í&(R{ÒÇJ\`úÔŠ½ú b2¹»pEI´tÁ¥ÛÏJW†íÇÒ´ãÐT‹4â¹Í!•]‚Žh\ïO’ ã&œ‘àtüh¸•>”Ï5`§¶hÛNàW1ƒŒu¥á¹"§ žqK·§€ˆ'¯JpNj@ ãýiØÔ»pÀb€ ÙM)éV¶sÒ›·8㥠*mÁ çó¥)ÓŠ³·µ7aü0+íÁéK´jqÝN)Ç_`#‘NÙÍM³ŽivŒûP^:SÄ}3Ö¥ OÛÀãñ  b˜c9«DQŠ@TòÎÞzÒyukg4žXÀ¯³Û¥ Sãš àŒP%4áHW©§*àcÚ€#ñJS‘Síã­&Îô€‡Ë玴·>µ>Üž¦®3@„ÉÅ(9 M§+ÈïOÛ“Ö€"ØéLhùàU’(òûÐ2™ÿÕHPqV]Ûžy¥ öŸ@1Í#E‘Ò­y`v£e•É=i2jæÂ ¨ÂNiŠÄE(ŒtTÁ}E9“"€ –#°¥1Ž)ʧ8ã.ÌŽÔ€¨cë£dýÙt©È¦4yR;ÓœíOUÜ0>*P¼{÷¥T}h0˜'§)ʇhéš/$œóNTé@…æ§Œdõ8\ûö4…0) Œ©íÓÚ˜è_ž†§ Ï^()í@Ò3’Ðæ¤Uaòž}~•0Nzr)BäçP"˜‘³¬:zvÑê?R‘Ͻ4ØÅF#$“ ŸÒ†SŒAµH:vÍ0 êiÀØõ©Ñ·žÜP0{SÂó@VÝÎ6þ´ð çŠ`àçQK*x«ö¦ÈCŠ@r:´9|s’k,ÛpX è5Sr ¬—E Ï­uAèsMj@° ò⽃àbÖu¨Æ µ¼lO|†?âkÉ– á›Ò½WàS2øŸRL­e’1Ü:ãùš´õ!­y¢Š*È (¢€>Ye5U¶@NGåQ¦?â;J¤pj2X`jfÃï@íÍ8Ž3Š(ïK·=© ®Ã'¥FGa‡µDAÍ"+MÛôÍO€E!\v§p+•=qUîG)WYjµÐÁLS¸$Bä§„â•GËOQJãcB=ø§l*£Š‘WŠV^”î+í£¥Û޹¦•\,0/•V¤ÛÁ¥QEÂà aºÓ•yÅ;=)Ui\/Ny§müiáGáK‚qHv"e“Ò›Œš™ïI´°Ô\DJ¹'=ª@:RªäóR…öÍ"ÛÞ€¼Ô»8Ïó¥UÁ÷õ  ‘ÆiJqš'&¾œR^Ô¡xÇ9©ŠÐ£¥E·ÔÐWµHWPA#Ž(´ ÒŸ¶œƒ@ UÅ8Žó§è9¥ÆGJh†)ÁsÅ*¯nõ ^ýè0¼Q·Ô›G@)vb€" žƒŠpQO ÉüéBœP1q@\T€J©ê(˜ (sRmÇ4¤qJàEŠvßΞ«ëK³‘@íÞ“o¥Ç¥&ÞM #ÆqÅ&Ê“oš1Ò˜ìÁ¤<0©väR•´Üþ4¡qRc R…ÈÅF&”¡Ç&¤UÀ霞´¡Nrh-§=8£g.híç§ÈÍM·9ö /å@í¥Û‘R•çühÙÍE·"œŠ/·Zr§$÷ ÂûPWªB½»Q·ƒ@•ç¥zt©ÇÒ†\ö Šàcµ*óÚ·Úœ«Í4/9£mJži  ò %F­Ü äÕ’¹SšjÆä {R2ü¹ïíL^G¥N=é0:c­1•Ò™åüÝñéV6á€ö¥Ú W †§æ¦)ùÐWoZƒÊPû»ž¾ô»zñSȦíÏ4 }iŒ¤©Ç¬âšWz`Bjp#ð§¿¥.28ï@„*xÅÇ9ö§ã¹*çéHbª€7/~Ô˜îiËŽ ñíOý CŽ ÛÑK}*R£¤ ów4Ì Q°/qÍIŽp3N*}(½éƒÒ¦ö”¯~ô–=©Þ_ãíO Šx÷ ÂóAà  JÛ@ÉãÖš±é@†y|d7”*xÎ*ajR3ÛÀ=ù¤l`y©8äSJç¯Îj7=sYŽ2Zš˜ÛpqYÌ£©÷þUÑ Œ%¸ÈFÇùë^—ðDŸøMîÀ'iÓ_#jqÍFÃÛ­XaŒj6_zà;ŠÌ;SëŽ*vš‹u!ˆ¢—¥NÇ~8 ˜Td ™¹¦•÷ JñHËÅI·ñ¤ÇnqLpk7o2}kYÔcŠÏÚ’gð i€©PsI·¤ˆs@‹1Œš‘—'Ži"íRãH åry4›8ã5`¨çÅ&3L6ñFÑéSéI³J4F8ÔŠœ÷  àbž0j ^ÿ•.=zÓðzPA=è3ÇséRã­q@ O iqOÆ'¦)À¼Òí¥)Oµ´â¸Ç=ñ@ipO½(^ù§ $àv£mI´c¨¤ÁôôñÔd] äw§í§sHã®)6ûÓÔŒÿSAÔ§•ËŽ• dÇZ°Ã늅ÁÆ:Ó VÿYœv¬¼aGÞþU­ªŒ°Ï¥dç§Ôÿ*ÞKr§qýk¨ø`Æ/‰Z)Æ~i_X\Zæ€ÌdÿžÕÐ|=sÄM”ûí¿š‘ýkH™Hú‚Š(­Œ‚Š( œNÎy¨Ž? œŒsÍFFq^yÜŠädZŒ§99ãéQsÍ:ÑŠ^†”㠠ȥ!ÓØqFÑŽ´¦õéSm¦²J‰“޵JTÃkA†1ÇZ«p ï@Öå=¹&¤‰pyëJ«Íô}&ÒE(\L)àzP#³“Ó4ìÙþ¥ ÐHÆiUOÔRìô¤20 ŒŠP¼t©D}EÑŒ~4Àh^)—GŒòÜ~u6Þ?”¦0Hb:tÍFˆŽ˜©1Šr©Åɤy£g4à½évé@ `@$P£ ӱϵ8í@…è­;ç4ð3Ú”'L Œ(Á4¡F9ü*B£iéï@^¤Š@FGOÆ”(n¸Å?hÖœ=(¸ˆñÔ‚=§lâžãÒƒÇ4 `LÓ‚€}þ”ü`R‘Œz÷¤x9ãš\cð§…ÏÖ€8 Šâž)ØÔõûQp#+Ö¿0©H÷¥ÙÍD޽hÚ?€3ô£n;Ð,¼`uõ¥ÛÅHP1Ó<Ð{>^¹÷¥(qRpçŠeqÞ€"#¶)vð})Ê Ž¸¬8Áf€#P9éøR*’ +Š‘€ÏP98 þ4†GÊðJ‘yõ§m¯'µ*®zÐ!©É9ÏZTP½8 r¯N(4mÉã¥)qHG nÞ8ëHTä)ä``ñN ãŠD=)àw¥Ú=)ØÚ:Ð1¥r94„c¦©ïÚ¯oÖ ô¥xÇóáœôãŽGÐS,‘žƒš<“úTdíRv’O Àã'žÔ§•È4i!—8"•y㔃Øô¦“Ö˜ ŒŠb—Ÿñ¥ÇåHrh ÇN”ý¸Æ¤<…€ÜàÓsOpOJN½•!üÅ*…8çðÍ ±$ð8S€Á åÍ&9ö¥fuçÚó×ùPˆƒ€)>¿JqÀ9¤äÓÚ˜IÁäš:õ@È€ž ÈÍ!cŒsM'Ž@úR¨Î9í@9ü»ÔN TÌj7^9?…bkêð85‡»îç®á[ÚÇÜ_¯ZÁaÄgÆkxlc=È{0ô&¯ø|íñ.’ÙÆ/ 9ôýâÕ#Õ‡¹þU.šáuK&cµVxÉ'Óx­ úîŠ(®ƒ¢Š(ç—Ï=ê&w«.£$íø¨H8ŽÕçä ÏΘzãùTØÁÆj2:qšCcKŽM(QƒçRzsCêh É8©6sšB¸üi "p0iùAïR5&0)\zÕKÕÌCŽõxŽj­èýÐÏ÷¨ܪ’"¯Ìp})ÿ¼»òäõn¿•*ggLš” ž•%°Š ‡®Iê}jm¼æd¥?Šd Šp Æ—ïLB׊\qÒ”´¸8?­'¥&—oõ÷§/n”ivœdçó¥Àã=M(ÇÖ€WŸé@ROZRW=hå¹4„gƒŸÊ`jR{sKµˆ„eqÎ(Û¹sß>”àZ\r8¤0ÛŽ”ÏO¥?)x¨1íÍ`S'¥ ëŒ~ž¹?ýjSÂóKÜði1ž£ž”€éíJWœf•F)vú~&€ã¸4ª>´åS·švÓÀ ñ‘@QyÇÒŸ³wëY×ÚÅž—"-Ë”/œ|¤ÿJmØ–æ†>`r@éŠ ôÇëY â]2I¢‰%rò°UÌlOÔVÀ`GLÓi­Á4ö c ÒÙì)N4ž¼ @rO ¥qÅ&yÅ(8 Ñq‡ÒœGáš@F\eûb‹€˜ïÒ‚)ÄãŒ`|ñŠ@8œžôÒ;Ò–ÁŒ”¤œœÔ\cÛµ)È< la±Í Å™Á¦ôúš\3éAÂÝ9ôª­éd²ýº ©ÁÅ-^À^À$`sMôâ™ñÜD²ÄêèÜ©SEIÆHíCp:~"ŠÎµ)ç9Îh¸ 3Þœ½»STgâž§'†àç‚08ïH[h'›ÎsŽ=)\L‘œ`ÐÜžÔ›¾oLÒ9Ágßî¼dbަ£“ßÖšÒ çÁÅ &@\J£4ÈÝd¨žG*ŒqEÀ6†ëØÓÃŽÝhÉÆ);`Žè¸ Aǧõ `PA'=>”x£© qíJ-Àæ #ž‡“Jå=Å8ô Œúv\`ç/§)ÁÏê)xãÖÀ¯áúÐFŠR˜ƒÁ4cüæ #ùQ·œŽôá×$œSC)8=G|Ó}iÀ1<{SÀäzÒcŒš`7ǯҙŒd`ðx©xä}hÆOA‘@ ÛÇ==i…rxâ¦Îp 7äãÖ„Ä3&Õ~´ÖÎBŽýéøÀã·À8J:Ñ“ø})@ã4äƒNãŽô}z})xÁÇAÞ€ÝhëÛ4g=³j\ät Ž@ô¤9Ïðià€1Ãø 9õ4NsÒ‚qÖ€yÁ ׊L7¯J2Æ2)¦Þ)€¤qÍ' ´Óüi{vüig$sÇ4À=éümÆiŽvŽE1˜ÚÐ ‚2;w¬Á… ÞÕʘzV æúé[Ãc)îFØà_Ê’Ë·ÝF ØôÍ;~?Ê£?êûµ¢!ŸcQLŠA,I PÀz}táEPÏìwdƒP±Øy$©öéVHrGSPI–'¨¼Ó¼w`‘éÍ6F“ŒãÒ–uƒ×=ÅDÌqŒóŒÐª8ýƒé@ÈÇøQ·##¯ÖÔç@9¥Å!*§œ ñO Æ8 •ÉçJLñÀìsÛÞ/¯…yÉ…<6ôâ;ŸÂ¤E'¨ë@ Æ(Å;nGANט ß¿lÐzñN#ß­!m$ÀN¦äšy<` BzsL$ž !0=qÞ”(8æ|@ {R…ÜÀúR€3ŽØëŠx¯¥ì)Ta³JÛÔs@Öƒ°@Ì{ å¼bU´|‘É‘q]^Üñ޵ƒâ-.÷U€[[É Cͼ’:`úSƒ´“dÏá*[»^>™gs¦ùPÞ®äYFFÜ?è!"1#¸ I>Õ†m[‚½ŒË+íBÛQ¶´Õ"‹ý#>\‘1ÆG84íkT¿°»‚ kX¦jî|}*Üz}ÍÕõ½Õð…M¶|´ˆ“’xÉ'ùTZµåÆ£c5µ¬r%³o,Òcq#éM8ó [îû23aœà÷…ý·© ©•tô“ìò,o‰y!¹àw8­›%½o5¯8òÀ$hÙ×8ëtýA.o.ÂßΚ@ð»K“nzf”m­ÆÛ¶‡G2Œg$UY¼Øà’h#ó$åBÛsøÕíŸ( rqÍE:È–ì!Eg …VløÖh£O†Úk˜nE”68äu­mJüéÖÆãÈy”cvÂïÍcÅ¢_K¥[é³Áq«æI•÷1²p1ÆkO^·ž}*K[hLŽøP9䟥hùo¡)»]Ó¯§»y£žÍíš0¤!ƒžãéW‚Ì}ª†˜· s*ConÉ» ûÙŸ§\ž0+\( èj%¹Kc”ñ}Ô‰okcRmsÓåãÖ¶_K´Kh pÎ:uõªž%Ñ_U³ŒÀÁn`mñîãwµHš¥ÃÙ¯™¦\‹Åp/ÊOûÝ1Z^ñV#«¹.™eö$¶,X 1Þ™m¨Gw{wo`öÄ+ñ×>•4^}¦–qºiÕApœ’ÞÕ‡ekwg¨ÛÝ47yñ2Ü µ‹dt<à“øT¥{Üwµ¬m^j)¦Å–ä¶ÐѦB“ÀϧZsÞ•Ô–ÌÛÌX®ã hŸáS^٥唶ŽN×\ýÓØþ¨èâêhâú=“’#DzñŸÄäþ4´µÇ­ì[Ô.ÖÊÑîd$E,ÉÅIo:ÜCé÷$Pè}PÖb7’[Ú*L˜4ޱ’¡G8?ˆ¾2¦–¶³Ç*µ¹1‚êFåÉÚGáŠ-îÜ/­‰-µu¾¼kxá Wß‘ïRêðiñF÷.U]¶‚·?…cØ\Éi>¥8±½6mÑ/ï ¾ý*þ¾Z]WÊÎì„$h_OAéš§Ía);lµo^A 3ydÜ…y>Æ«\ëÖ6÷fݧèÁ[(ØëŒ —O½ÍÀÛ+ +y²G³9ÏËŒ˜ýk#TŠIõKÃRI¬LÑ”8—fKqÔqõ¡E_Pm¥s ’á-ak‰²¨«óaIÇà*;øoáií›| ýâ¥yüiZê4·¹Râ0„c;³éŒfªxl“ ÛÆU•med+ƒøÔÛKŽú…¯ˆ´çuŒJÅ™öõÎ=+`8i3ÊàŸÆ¹;aw÷Wo¯‹‚ÈŸg?¼Á#Žyü+¤‡QŠ}RâÅQüØQYدËÏ`iÎ)l(¶÷.`c&“bz{R†ãsÚŒü¹ u¬Ëä0ÇãNã=ésÎ{Ò¶ÜzoSŸ×4Ö”ÊÎ ü¨Ã<~´¤‚:ý)½Æy£i`3ô '¸¤<ô©ÉéIÉéë@HPF:äçÛ­IŒJF¦{ÐaŸ›ŽsÅ@ ãIç*éûõÌ]µÓx,亞Þ¡ÙqË{¨«’ÝŽ‡#$’(Áç¿áO·qIÓó¤1ƒ$v¦Cu!äŠh<ÿúè:g1ž3NÛ€ íèi[œþ”ÄDà O\zÓòHsF8þbƒÐzŠ.ƒÎy¥#ÞƒÉÀŒôõ¢à4óšç©¥çµ#© 88ÇZ;v.9ÏZù9ôc Ç­94€Ì:÷£§LPHÉ=A£ç ŒÙñ ‘Lëü©£¿_ÄR‚AàäRwu œsMßéÅ)é‘üèÁ#Š4‘ŽX~U‡äÏKŽ3ÍC#*“Ô⨠}Xã­a›uú ßÖ÷b¹þ|‘é´VÔö2žãe8f>„ÿ*„6ält"¥'.ßò¦•¿/Ö´D]i²´»IÁx±é•j³¼>í/†ô¹žÎ&8õ(+Fº Š( `3Q08æ¤$ôÎi§“Šóò¼‘ç¶Iªò(ܸ8Î*Ô™\c¯ZŠAÆqÏ^´ ‰°;T›9ÏûRªñ‘š ÐzÐpM?sLU#ƒ×4€cqL=L@"¢+îiu¨.ÇîMY" ¹„š–RܪƒŠ•j8ÇÊ*d‹bÏ\c<àÓÁG5ËA µ¾»ÀŽA”9”·38»ÖÖU2#`P‚Hç8õÀªQV±.NçEæd)#<àÒ-ÂI,¨Œ£À`LóÍehÖö~|“Y]¬›£U( =Èõ¬”†8¨ÑHÿiIʰÞr#;rØúÍ.Tô‘Ø{u¦±ÈÇLV–¦¥%½®Ýí¦ Ùå?Z‚ÖKî´¶#9µ1¸ßhO¿&Ž@æ:Hnbž/6)änÏ‘dûÃðs\„ZE¤[ DgQxGÍ´s€G¦qVnímE’¼7P˦ÉòÆø^TÀõôr«‡35µûû» 0\Ú„,$ KvãÒµU¾A–ñ‚+œÕZá˜ÄžS"ÈÙaó| eÒ[\ëq]Ý´M O²¾Ðr˜(}séG*h9µ: søv¦ž1Ï^+ž-üJ›äóÌÒ¬¬CÆUy ;­I©Çºüp\ݼQIlÄ)E,{õ©åÔ|Æñ\Æœ‚¹˜åéö]\ÊÊï*¨-µ¥A¬[#àûÑÍwc¢‡½”‰ŽR’àŸõ÷éG ùŽÊ7“k6ÅÉUŸÂ–6D®Q²†*Ã{ç5ŽMq–îU!|ãÓËv>µ7Ÿs<övßiòÁ²Ò29㯷\{ÑÊ.cxŒŒŽiPg¾+Ÿ¸žöÒ[QqxÞHæ„„õaèjî©sqå¤.#ÞŶçhû àã9ý)r˜Ò<6OnÔðzw{£okm3\™gŽlÑʉ”Ÿ»õ¿±¨ oF%#{#‘š•Q™d€+í·)®}’âE…‡”¦?–UÇ8oïgµIusq6¡-…»,e!32nÝ’@dqÅ.]GÌ^µº†úÙ'·ÄÄàãÁÇz”#±9®wM–{=#GŠ=¤J^7]¾›ˆ­ *âæ{{³&ÒñJñ©1Å7 HžãT±¶•£šá@*2Hø¥P²•áŽ+˜¦£ s»O•áEEßq4ÌÓ¹ç=áO½¶1jztV"sç°b»€'ñõ§Ê®Ðs;\ß]§>´ x¬(5K¹­4åUSuq»{ªpç$G·zYµ BÞ9."Š ÷T»8á[ƒÆ}=ér0æFÞÔþuZ{ëki!ŠiUfÛ÷cYñê7Íeä#Θª¹Rœ3sßóªWFýô+—UWk³½2?*jê'# žx-cif‘"Là»ËŒÑÀŽæÑÙ˜¶ÓÉíÛúÖŒZ”6I©]-£îK’ܹ }ºŠn„¥ÜÜ]àe‡$Óº ¬uÖÜ-踳hžÙ€n ¼ã§C‘Q¦³x'–+=£‹Î8Ÿ!‡·Z\Œ|ÈÛ$ŽïLóí/qæ»n{zâ©&«¾âÞ'€¤sCç#îH#Û"«C«Y½Û݈a,$ëµgvÎM¬9‘»ŒläSåN=3X°kW/K%“D 2ìÝ‘Ž€äHô«šm캅·›ÅrIL@‚¸ 21Œ÷«1ë±Ii<Ï Ñ43Z'Q¸¹Æ\wõ£‘‡24=Hâ²ZÆk­^+ë¯-#¶ ±$ðXœݪÉÖ`{]ùs*¬žS¡L²¶qŽ=È«6ò­Ýˆ›k) ð뵇8äSWBvc¶ƒÈüé;Ó­8}ÁÇ$”‡ç5#Æ;#°&üÉ£¨ä) :`Ѝ{R•;väôÅ'Ý óÀ¦!Bôõ¦•ÇQúS±¸‚Oµ!-׃ÍsƒŽ¸ã"—®*PÜžJP2zâ ÎÜÛ¯4½Hb“ç$çµ"Œ9l¶lô <1Ÿ¥ ÈgŽ´ÎZcž´˜9n1ÓÞƒìx ‘޽)¡½¸Ç­(};R`†''4™ù¨ÎOQL0ÈÇåLîIü)N9ÿnÎhçåI»žä}(Ï#>¢¶I¦’1ÅDÞ  Š\äzRdguí@ÌXe ®wnO°®ƒWÈÅ`0Ä#é[ÓØÊ{‘c.Þ¼ÿ*Só ÓúÒ Ë¾x?ÊœÜôÛýkC6}Qágð^„ìrͧے}O–µ³X$øB,I?a‹¯û¢·ëu±ƒ (¢˜ÈëLÚš´pr<Ô-‚µy‡ C2Àš®áƒô®e$ýzTŠÍ¸0x¤eî8¥±ö4ÀŒ¶rr;QÔsJ¥NéÆéL5#~tÞØ {ô¨nAò­²úUiù…Á¤ÙQ)F¼dg=*uð¨ãG5(Ðp_QN#‘Ò›ƒÅKÅ2ãÓéOQ•#¿Ò‘@´ü)’7µÍ8àt¤’q@ ŒšÎzÓIÁÍ8r(¸:zjGMà¦XéÞž0A­;9â€Àô†%”t §¨# Ô~\t¤•Ö^V*©'ðÀ`´ˆýÌ`'#åj”Eǵ#P¹û qY6úµÔ¢Õå²ÛÛmÄœŽ ôÿí†Ë8¶ù ÇÙÜoä6í¹sMÅŠè}•¿Ù x/ ³Jî£9ÜX“ŽzÕņrc…É EfM©C& 6ZÉ/ÙßÊA?1À$ vþµ'öÇ›pcŠÙäÍò‹Œç= Æ1€}èi±&‘ÊT(6õÆ)¡Ê qØb¨YjO{3§ÙöÆ…”Ÿ0R0Glö©5 óa N¶ï1–A€äô¥g{ërÜq¢tŒ.y8§Go‘塘aŽÑÈ÷5šš»¬w+qk$sAµ¼°Û·Ђ(md&Ÿ{;ÛÖ¯†@Ù€x?>V+£Q!Ž|¸ÑSµ@¨dFo.% È8o©Í6ÞâKˆI`0å°`Ù¼V}ýÜ“A{¬!–8È‘¶à•Ï9¡'pm°ìx²¡0Ã9†÷©Ò5a±mô"°íoÞ k+KxwÊ-–FùIÇsSK¬Ïöð-¦Ù¥ŒHRWØIÏ*¼`‘C‹¸]{AL«ŽUNÞG(wØ¥±ŠÎµÔ%Ô¡ŽX¬Á´•ŠîgùŠò7cÇãR“e]ˆœ s1ÈÞ0 ÕôùeÖà¼ÄFâhʳòAÎ1ŽÕ•£]Ég•¯Ù—ìÒÍ4háù3žœT·W[t‹ö†Õ‘¾ÕåÈçw+“ÏLƒŒ{Õr´ô%É5syâ‚}ŒËÊÄ´ûR-•²ªoÚr?v89ëY–ó­•ÒÙA¦üÀ',ƒå°OáŽÕ-ž³ö¹“e´† •$<äc€yïRÓh¼lm$–IÞ&w]®ÅXzdÚe”ñG ¶º'ÜRƒ ô¨tÝSûEZD’å\¸ ŒãµI{v¹#’yÊn1ÇŒ…éÎHZW°î¬#éÖRÈŽÖñnÞ:c¥Kyem}Žî• v>µ‹£ÝÅaáû8±–fp  ù‰9$ãŠØ²¼‹Q·7Ù¸¦èAÁ¡¦4ÆÿfÙ:B¦ÖIžBëƒ+òÙëŸÎµŠåp gÞ™³½Ì9Q“w¤ ˆm£Žáá6쬅@9ÀÇCUWÃÂ8àE¾œ%2ǧi?‡ùÍo`çŒQ·žhæ`♕s¦ý£R·½3¸hAPF=sõ¨áд5˽­»ïŽ" c=À­‚OËÈ=)UNþ˜£™…‘ˆú$Íi$m}ÇžI„uÎìuõ=¶›%¾­=Ê\ ÇsGâÀý+T±ÈúE_˜ãò£‹•ýæ‹rRé-ïŒpNÞ`“8bAëéS.›yö¹n>×’Ka Ì}ï×ÔšØsÎÎ)TnäzÓçaÊŽsûþ§47q·Fœ§ ‡³×ŠžM&ê[{øÄñfâe‡åÆ8ëì+g'î8£8åÉã"Žv (ÆÔâ{o·_KÒÒ´lóI¼¬kµŽÂµ7pNr>” Î2@ÎhraÊŒH´ËøK%¼º{³IuRrTvïÖ¥Ñí50öó´/k"»9>ÊÚ]‹Ô`÷¦–¸ç<ÐæØ¹Vç=‡| ´¤µÌFàœ79$ãõ?¥Lú~¢‘Þ”6姸®—€GNZÜÊ©ç¡ç8§cò4s°äG5&¨¶™uh‘ÛaîË™qNxöÅiÜéh'7wp8 qM„à瑎kD$ýìuÆ)NCd}ß§4s°åDJ¸\OãM`qR7œÆ@j522Ã8è?¯ëHc@ØÐTƒQÍ;í“F9ü:ÐçœÒðGt¡ºdñBŽÜÓÀi².î:jw=I4ãŒt4À„ ìm=y4ìyÏáGÔsHDg‚?•7©'Ò¤8è üi§ê}i€ÞHÂã&›’3šq<ñøSNzrhçošB{Í! u8ü($ ÀS3“M.¡À$‚zqL,rH#”Ò9S»8èhSÏǸþTÂÇ‘Å!~G ;›øvTü>Ñv@· ú]=r? _áÎTä‘#ƒúŠë«u±‹ (¢˜ #sÞ¢8äce†j=§‚kË=³IõÀ#ÌàŸ¥[ j·Aõ¥p Á#“J0p}ñO+Éi6sNà?g4¢Ž§½3Î8¦‘ó”Žzf<ÒlØІ~!¥Y ‚aû¹8ìiÊq›½J¸ÉÍ21ÆsRŽ{Tš1ÊœL üêB>Oz£1RŒõ Œ‘Úœé@ ÜâšÄí8â¤Àù­ ¹4f2{R…ãéÎjLgÒŒ~^´qÍ=}hÙÆzSÕGŠ4Œò ,°,Ñ“i=úI ÌvP¥T)'<õÅOq¢ßÉç%½ì+ ¹(¯$6rA9é[ oβOo0à3 $~52nÚ~µ|ÉN»·¾•íï‘a™„’ÄcÉ Ü©íšKm6êÒþO*íE¤’L&<•'“ƒõ­F',{Ð{‘øTó1ò£&ßJ’-SíÒÎ$qŒb=¥†s–ç“Px‘ÂZZþñcauV qÏ\{Vß\ñÎj9mᕚ4|tÜ ÓRÖìt²(I§M$S°ºêUUª`*ƒœŸ¯~õhw&Þúw[°28ÚpÇ>‚¶6° ØRKsÚŽv…Ê™VdŽÎ8epÒ*í,£ãÚ³çÑî^êæ[{Ï&;”ı”ÎNÜ=+e9äŒR®xàc¯J\Ìv1£Ñ®6ZÉ a¹†/%b:Ž€©ôõ©õ ME" nŒÊœäÄ÷­@¬Àœt©O9ɧÎ÷)Pë´Œ‚0k'NÑ.4ç) ÂÐ34p˜ÁÛœñŸLšØSòœcÖ»qŽ•*Mdõ0£ðüñ%®5E´­*æ!Én¹çÜþté4K©m/aû\@ÜÎ&Ï”~^œuö³ž àý ?a{SsbåFjØN5T½–x›÷KF±|ƒŸZOÓ/ìÉ[ØÚÅwyjcË®z ûfµTœÿU)fð)s0åF>™¥Ïi©ÜÝLa 2*í‰J†aÕˆõ4ûÛ+åÕ£½±hxÄS¤¹è !†;ŒšÖüãÖ–ùæŽg{‡*9Ø´­F ;GSoö›g|+UÑ9ô5·j³ u¬k)å„t~u&OzÓÁË.(ropI#ŸMêhuhg0¢^Hd‘‰(xÆx‚¥{]^ãHº·¹†i#òЦFsÁb~«opÎ1Ç@sIËzz|ìQ“•ØÔí.(UÜÂûd$äàç§û?­6ÃFh/õ %#È”‘ Žª—ýk^I„Ax<ôàÀ…ãÜRçaÊŽ~2øÃe§Mb IþÐï…?( ŽLÑöMVÖÏQ6ðD³Ëuæ§Í¸$gñÀ®ŒX Pó·ø4ùØr ÑH;S¶þ)AÉÆ9õ§W`‚ˆÕs‚A¥Ú6uÁ'ò¥c9â—2OÒ§ŒqÅ;m=‚°ûÄqÍ€zša±»"€¼dv§à’~™¤`L½xô ÎzSJ¡G¯­J0ÙïŠ |¹ã´ Sž¸üè+9š“b3øSH\§é@†”çÔúPÑüÀäçâ‚qÏ­<õ8ä@ªÄÐ#žý©Ä€¤ƒƒÚ”QŽ(ŒœŠXÿu¸óóàö¥f•àâ†?('¹À¦!¬£vá~”(ËIæœr9Èúx=h¤äñúTˆ¸Ï¡íHp;ŒÓ¾£b€¿0ÏCÓ„[œç¾iÀüÜô£’:ã½ ¸†î=iv‘ŒuÇçG<{Rœúôé@ r-ÔRc#"‚riÀ=(±nÆéR(ÀÇZk0y§µXŒgÓÖ€ƒ¸ t¦²„ž§rôç¸öý(*‡å½E&ÅUF ”çÓ‘MÈ'¿µ ÀÇ•5¸lŒsÚ¥ @¯ZB˜'ƒ‘Ú™$dèx¤ÆÇéNè}rsI‚Æzç¥&<÷ t©Jçši};ñ@ Ý“‚¥‚¼¾ôpGBÒŒ`pqNàFØÈ8LÒ’:m4æÏùÀx=xö¦!­Ï öõ¦¸ç8õ§’qŸ¥0“žq@$úþÖäHö1=)„ŽéL'⑘žóÅsÈÔynÆ{Sòçp^NzPNPúS ½ǽ n{sÓšpâŸö­9>ùZÄqý hf}ðÃ|8Ó(Óÿ\ÿZí+†øG'™ðþÕq“J¿_œŸë]ÍoŒ^áESá…Ûy²3MV;ðÄcÛµ?ÊÖò)¦>r1Ïåädáøõõ¦²ã ãÖŸ·¦9Á¦º¶p:R(`8Çë‘Kõ¤Ž¹Í'”À%¶OJmëU¥Õ4è¤d–òuᔸȨ奃·Áÿ}S³Ñh§R[9¤+•Á½©À|Û²IjÏþÞÓ7cí<ÿ¸ßáJu‹¸aß[…¯°ô."’C6K*{)aZ¦º­˜9óŽƒ÷Mþ>±hP²´§´þr±]Ö £œŠxAŽüUaªÚ2ãþ¸?øS†¯i´'?Ky?øš,Âè´ß/–0}zõ¬á­Z·<Ó³ÿ…HºÕ¨<Çwÿ€²súRåcº.ª cœšV@N9ªgY´àìºÿÀi?øšsjöœN1ÿNÒñ4r°º,3“NÇP Gûf׆Ûq{wÿ qÕ¬—¼Ý9ýÃÿ…+>ú-èsǬ¹älzÕ/í«—2H¹é˜_ü)ˬiÝ<òûŒ?¥auܸœàý=¨ ôSÓ¾* Ö´ßùú\tû§Òƒ¬é„ÿÇäCw©¢Ï°]¶ ŒqíŠrFN? Ï:ö–ò>8È$ÒwJfÛöسõÅat]À-‚xíF'$ ôÍgÿoéjê~ÛÁÅ9µý)T7Û"äâŽWØ.‹ÅO^ JeØzžõN=wJ“^ÅÏ©§ oK, _[óêàQgØ.‹†2Ë·$õÎ(†6X¶ðGjµ4šúÜÿM5õ½1T•Ô-xÿ¦‚‹0¹uc¥8‚c zT†±¥ñBלËeÿS¬é‡jŸ÷ùÆ•˜]P€6àž)ÁNIúUXµ; AÛ}lNxÄËšzjVN¹¶ùœH´4Ç¡d±…üé2:ã4Õ¹·a'±× i·ÜÏŒ’?¾)j1ãîõ&šÏNÔªñ51܆§€ýáùÐ!»vÇ&›–füÓIÇ&îyèE1†{ kéíi‡+ž¼ú¨â›’8úSÂiŒ¹M=†xô4ÏOziÆzàÔn²qR@æ˜r#§Z`GÏlzÓX`ðjBAíŽ i_oʘˆñïëŠFuÕ!Œdþ4Üä÷9÷ ˜g<Ê™ôíV6“êµ4Ç‘‘“LëM>àT…݇) 2µVŹã¿Ýöÿ×Ö—ÏpkyFç¥m Œ¥¸G“/ÿÖ•Ô®àzüéW‰H÷4a\zëTIôÁ×-àm¤î@?Cýk¿¯9ø,ìÞ º¢ß¸M‘ŸêkÑ«¢;Ëp¢Š)’xe¬†âÒ [†tV8÷!¥r+$vÖWÚR¦K8$“I$3u늽v­id—Izïw #y.@œ:œŽõç8ªFö:Š¡ióܪ+ƒ¦&ܸÉ•Ÿ-Íå•£µÛ³We`œ–ޝ­I¤•k­Q·cuáÇoàJž]Ìj°½FeO0 e,¼#ëUu„h·Á¹?ˆ…c4Z[¼Â7‘šÒÕv¯,ìÛ‡sJ1º•™ÖtŒæ›ZHdZÇ2†Ô0 0yö§z‚†ÓH=¸§“IŽ1@ lô¨fæÇ¡©È㨤\ÄÃØÐ4g[Œ úTè¹9÷¨-AÙøU¨ð~•&¬UzyÞ¬*Jh†Æíã§…ùqÛÖžŒ^ÔÉØ{PG#ÖcÞ”|{Pûô§xŠEéOPM æž¹ü~”£×ÒŽ<CsŠ1êqJ¦@ü)@Áé@Ž*yu/í+†´qDâ"Œ1í§ùÕG¸¿.嵨q€q“Ÿý»Ò¸Îõô¦íÎk_iägÉæp¢kÖMÉ® ö%þËAžíÉÛȬFr àû滢:t9 /Lñš~×Ès…y.Ýóý¸ØÇEI?‘íåùµÙÏËÑb—ü+º“€>RrqÇo­(Lzò09éGµ!Ä1¸Ù±õ{™8È rj!áñ©Þ€„[Éšô„ ₞¸ÇLQí|…ìÎ68® J?µoù>Í52++¡ø˜j+´“»ì²*íuÆr)øÈi{Qò1·Q˜_ê@±ÇüzIÏëBZÎ%ñ3Õ1ùö—òë]Î3œþà:|½hö¬9 ,îb N¥ªd¿ñé/ŽiÉÚ)Æ«©1'¡µ—Œ×t£šB|KÚ‡!ÅGi>ݿښ‚ÈzŸ³K“I=½Æâ¯ŒOÙ¥®ä)ç=iO.qøQíâÚíOË­^Œ ÛËÇéQ0»‡jzàã®`c<ÕÝÈ»—æšS ƒÉê3KÚ᯶¯üOY·GŽLŸüv¥oíGÛ­2çƒû·ÉÿÇkµdwïH±•Éc“ÖjÌâÔA k{: í嶘Ï|Œ7ë#…~¿÷Íw%9Å(œsZ~×È\‡ ¿P®Æèüã´Æšý£$ø‚"IÀ[üv»ò ý:ô¤3Ðu£ÚùÙùœRêØÿ„‚ŸxÿâjX¤Ô—þ'Ñ0õ*ÜãµÞtúR€•äÑí|…ìÎ*iõ#Û®Ûs×ÿâj/´j6Q­Ùä‘Á8üV»ÃÈþT…@==~´½§ùÄ õB¹:Ö™ÇA¹ªÔk-ð*N©¦1Ϫuÿ¾kº ?/éJСþ>اí|ƒ‘œ™¨boôÂ¥¸§åR¼xÈIt‚sÁ-ËúWlbCŒÆ½;ŠCM€mãüTRö‹°ùsŠT½°Ct"?)‚õ±‹-$ƒÉ‹?λo±Û[ÂG`PR >öpÜÄ¿áOÚ.ÂöláVÞûs(Òt¶\v?èÕ'Øõ/ö6œñíÏÜQŸüz»S¥iäÖߌKþö6–ügZçÿR¿áGµ]…ìÙÆ-BE8ÑmPœœ…ëô©á|?÷xnñê쎇¥““§Û€}"ø{H<}‚=…?hƒ‘œ|v÷Ÿ;Ká•6Ï0úÓÞápG†äSžÍ(8üë³þÀÒÁÊY¨ã±#úÓƒ¦|£ìÇ#¿˜ßãGµBägË?ý ÷'#÷“sAiU>¾§Ë]“xOb1Š{bgÖ£:“uû@çµÌƒÿf§íPr4qÆYU¾mP ‚ Ê8ëéK Ü‘ÄÒu§ ‘s/#ò®±<9f¹Ë]î ÌŸãQ [C,Mi5ÔQ ù‘­Ë€}ç­Ò"ä‘Í®¤Dd›ITª>Ó'AÛ¥L.ÔøõÕ+Óí.k¥_ÚžL×¹ÿ¯§ÿ“ûÜ/ü}ß­ÓñúÐêDj,ä ò‡eúš¿L ¶úö¦Ûê‘¡(cÕ²?éí€þUÕ ,`^_ý>ÒÔÕÑB1ÿ‰†¡Èéç“OÚD\²9£¬Gæ`ÿjmÎ3ö“×ò¡µe …}Hó·™ÇøWFú>AÚ7ãçgúS¿²HB¿Ú7¼vóAþ”¹¢;HæN«´íiµAŽ€LüñL]TFìëT'ÓÎSüÅtƒL‘œ¨Ô/p}Xü¨þÌ—pΣzAã‚¿üM>x‹–G<5±´m¼Ô:’ÉÇéJubÚu Dds÷={VùÓ'#Jì}Bý–”i³ÿÐFäúü‘ñÿŽÑÍåg=®bR¿ÚZ‘s¶7ýM8ë8o—UÔ:ÿÏÏÐ&—(ÿ˜„ÍõŠ3ÿ²Ó[G™›‹ãŒã›hÎ?J\Ñ+0ãÖŽåV¼9é›hÎjÌ:ü[„äIkUà~´†‰8|ý¹G¼ ûa^~ï5;|ÊaàqúQp1uÔÝ`üVÝ¿®+¤ÖŠ ©®q@N:šÞ£)n ?zIõ4‘Ü ÃŒëR.w“îi¼˜SÞ¬ƒÜ>³ _‚Né À½6¼³à6¨3Ïž§ð^§[Çc nQEP6ð·ÞŠ3•Ç+ÛÒ 6«i%¢ÛÆ8!‘Wh9úUS¯F’ˆåµ¹Œ™D%Š‚ªHrAèsWn¯a²ƒÎ¹p±dpO'úטԎû¢­Þ™m{&gFÈB™W+ò“žÇÔUÿ°í<ÀÙ”âu¸Éü`cù*™æQk{‹Y,2!É\ r={:|w–ò©hçF¶»¡ëJì,˜·¶¯uc<²£H…70Èã¦kãB¿kic m.mâ„d²Ÿc“ŸÂºdeؤ8`zÞœæü84”œFâ™VÆ9áÓ ŠæO6t@LýãëSžW! n½HÈûzÓO#Š{ ž´Ò7øFi÷OÒ¥8¨Øq@#&Ô§Óm?#U퇵eF Ôz¯Ì9Î*EÇOÆš¹'R.Ö™›C‚ðG­#ŽËJ[jä“Ö‘ŽqLÞœ§$uÇ¥7vÎMH"˜‡cÒž –ö¦Çzx ÐíÏojx8àPíÅ Å!€_›ÒŽqÇQNëŠB¹g“@³§ƒÁèj>’ œHêIyÍ ¿4Ä ^h'sÞ”€ `u¥)‘מ¼Ò7Çäg¥;gB¤c½?$…5· r3žôý£ƒÛ=èØ  b‚IψO½"€_¥<ž?• 'wµ;8â›·Þž#°H >´î çÏzCò㔩e”€:çñ¥$à{ÐGéN`sšC"`xÇ>”0ä{Sö‚Ø&°¼W«I¥ijm¿ãâgÆØÎ=OùõªŠævì®ÍÌdt¥=Ï5‹†ÐY »»¼–è€Z= íƒWt{[«]68o$i'³!l–‰þ¡¥Ñ‰7عïƒïBòsÇNÕÌX‹ïøL/,[Pº{[xÖTV`rN8'94ÝtÝZëºd_ÜÅ Ü›]C98÷§É­®.m/c§9+×9£%AäcÖ•! ˆ™bÆXòkÅMyöTƒO™¢¸+$„©ä¢¯#ë’)E]ØmÙ\è7§æïÖš[0ëÒ³¼=vš–…gr–ØòyÜ89üª¿Š£škÛk¹íårdml9¦£ïr‹›Ý¹¹¿å#½¾RqÏÖ¸éï¯ôË=ø^I:]”Y¢”@9^2+­ž'’Ù–LR€ûCcßJ6+’n¼f‚[Œzó\¿‡ïµGS¾Šæüyvrì"QærG'·NÕµ©Eª0¶t©˜Î»—n2:õÇJNv`¥usC9Pr)Þ{s\ƒÞkøŠßG7Ö¡æŒÊdçåàñÞÕ»¤ØêpËx·÷~|NU¢u@àîsŽÔÜ,·+šNJ0<‘ü©wdÏN+žÕ.u|AagèHo ðbRShƒÞ¥±ÔnÓ_›G¼1HV/6)£r¹ 9çš94¸sjnàŒ1AnHÅGp—ÝþÍ"$äaZEÜ3îszF§®k3\#XÄñHÑ1± F9Îî:ÒQº¸9YØê[Aǽ!†HçëT´Ùç»Ó!žæ/&à‚$Œ‚6°$¯`)5aî <zÓs—ý)åJƒÇÌzñ\­×ˆu Mj=5ô´i®2bÅÇsÉ㎔ã-´–§Päp58çÔ÷¨¦{•²%¶ù° ˆH=À&²t rMk|‹dñBŒQ™¤‚¥®×Õìn¯¸´ÒÊËÇOçR¨u Äx¦2sŒb¤€ ŽqÍ1œõ¥\€8>üÒK¨Æi€Æ`Ÿ¥';À'µ=†AŠn>`qß‘@ ?/^8¦¶vnÖ¤uÇEÎiŒ¹ROj`FW+‘×i ¨<’:ÔÁrà0;÷¨XxS¥_ñ¤Î㎃×46ƒ×ÀôÍ&FqßÓ4å;†8üé»G@==¨*9çŠ`<ž:qJ‡åã$L'h$çJ$Áõ BHFr6ç­K &%'ñÍWíe8>¢œBგGm,g‘œf†lpzTi¸F³1Ò‘õ_Z@RùÈéMb8ééNã¿ò¦‘¸c}(3žœñF22HÏ 42áp ϵ.ÝÙ= Á4=é:68àPG<ýF)€™Æ:Ñ‘ÔwèiÍÐúcÒšN×”r#Š_Cž½x¦‚ äÝ©r÷ë@ ü޽½)œqŒ{S· ý &:~´Ä3pã#ô¥;OqùQ´}zÒÇZnÜp)6‚"œÙ4Œã‰´œS\j“ýë™SãÞºWþ<ßN•ÉÆ0eÀ­éìe=ËàÉÿþ´€|‰õ4±ß{nÿ ýR¼¥Y6=‡àƒm­.FàÐ’=¾ð5ë5ãÿÝDšâ,ðOñ¯`®ˆ|&ø‚Š(ª$ùæçI¾•'ÃBÆKˆ¥b8LdtöoZµšëMh`MîJ ÐƒÞ¯ZLnm`œ¨S$jäÓ#4óÓ5å¹;Ê*ÆE´S õ-ð2¤® ó€`žãùW=pŽ–FK»)%{bQÓ ÛJŽ¤ã§½vÍÀíZÎÕ¬¤¿µ[xäXϘŽY—?tçÔwÔµÔn'5¨-½µ„¤e¦{EaµGÊ#<ƒ»8ÔÕØ®IÕ5Û3-Û¤Q4p$¿+àtí]# eù€4Ô¶‰%2,H®Wi` v¹ôR;亲Ši­Ú e¢~«S8 Ó•x¦‘ùT0Žy¦ãš{)1ƒÒŒ#µFý*^´Çæ“2íøéëVF?Ôvãæ¥PCަŒru©?•1G4òF=Hª%†}xŒÃ>¹í@9—` »œûö¦ˆGONâ¤QíH1õ枃8ÉãÖ†I< S‡NÔœ“‘Šv1ž($ôõ§…ÁçŠM­·v)K/–ÎÜ2sØ ;¾=) a?V@WÃ#ÞŽ Œg4€ŠHù È÷íOÀÝÞ˜cÛÐ9=êB>nyùiˆ20¼`g‚iqŸsNîo¥"ƒ´’h…3#7m¿•8`p~´„>ÓÐñŠV …ÏË‚I º‚wdãôu$ óŠ&=£“ÐP仯iª6“ž‡¹¥Üt94™ã®{R•%Hד@ƒÆN}É¥2nçÒ”ôÒ§?/OZƒN$'ŒŽÔŽ™éjUBqž84žb`{Ô™EDªqÈÓ•[•#¿ÚÆ)¤È=kÆZ\º®j¥¦·“ÌUÄ;ãߥt[I§¢‚=zUEò»ŠJêÆE¯‰tÙ,iîãŠU\Iœ2¶9êjî™u5朗Åå¼›™T‚\¹÷Æ*³£8snêIÔÁ ^˜>ô¤×@Š}N ½6çÇz¸ž#‰V2_˜``sÉ£^“M²ñ6Žax£Xå>v;9}+²}´rKhõN07P“ì9­=¢¹<« ’Æð £uhØz×,n¬u_]ƒª4k"8ü™Bî³óŽGº¿/ tÆÁÒ OµHò–ÆÀc„úŠˆÉ"œ[9?^ÛY_jBÜ£Æ&-lÅÁÞ9½üëoÅÓÁ†oIYÓ [‘ÐVöm¬!Z+HåŒ À{Óå´†tSqr•nPqùÕ9§.bTZŽDƒL¿Óì.K,÷0À˜ .áw8#Òº=è‰;UG,x^ÚÂÚÕá·Ž6|±@$T×GqÁq¼N¸*ã þ2wcJÈæ<#4©ë€H…šì•ù‡#-ÒºðÙ~•Ÿ‘a¬±ØÛ£¡YcÒ´ våqNm7tM+måÌGâU“y©±mÈ-¸`pýk³WùÏÊzsÖ²‡‡tŒàé¶ãƒ“å ÓTAqª…@0cNIÚÁÕîs>##þ}ùžX/"–dp=jðiþ!½°ÔJ›Ùh®_¬©Øztô­«K»î'±‚IY²]—$ö§\hzuðŠ;‹("]±‚9Qè Ršµ˜¹]îiîOõ&¸ض¥ jqC{$ × ¨Ë´ð1ž3ƒõ®¾âÆÞæÕ¬æˆ4B”Éè:V_ü"š*‹d¨1Ž ýyæ”d’a$ÛFµìq¹·J±¶Æeè[8=êÉr=ˆªzu’iöim„2@ôç5e”ç’j¯¡jö$,[5Æëˆº+Ö&úu¹Âœäâ°ï<5iw|·syö˜ÏÈâcò}=:ÕA¤õ&iµ¡¸„àŒtê+’ð<‘®•¨6à.ß,N8À®¢H –¾@žT æ©øïÈÇéY6¾´³µžÚ;‹–·œ7™8!‹ Òˆµf˜I;¦Ä™f]]d9Ž:žõWLÓ¡Òìã²µÜ Œn9=sÖ§u%€ÈG] OAY€#ô¤ÈÉÁ⃫ÏCFÒK7AšaçÏZzœãÔS@-´:BaÉ”ôb<þðsÖ€ÈàQާÓÚõ²i nÜdK×åíõ¥ÇsÞ†Q¹yüq@ aÛoë@ç$8òØb:zRíx" zsÖ‚F1ÇçNN)§“ïLîyàzš3Ç>ÔgƒØÐA sœ{PppHô¦îÇ^™¥fÈãò¦;ÐŽãµ.NqÏÖ›»žÆ‚@íLC†O¯åM#¡ ä‚(ëéŒR׎žô߯¤ÀÏ9¨Ï-ÏãLÉ9õ4gŽ@{žy¤$õçÞ€\‘éùÒg¿õ£'9˜r:(Xƒÿë¨Û‘Ðþt¹çÿ­HXcÿ­L íO‹)s“šåÐäJk¨ÕAk7Qƒ•<× ¤ +ž•ÑKc*›—;þþ)ï…5N%ãÔS£è?ߪ$õ_‚NPÕ£Ç- g?Bƽ–¼OଧûP h?F_ñ¯l­éü&3ø‚Š(« ù»íA§´wHí°ŠÄ mlö9þ•râI®5‰m#¹h8«´¼’G9ì1ÛÖ´åÒle#}œŒ}ÁÀÎ2óLµº’9g‹/v•b¼wuÕæó#·•˜ë{|ÆDi+Ý e1òq»>üqD:È‘`ýÓ2¼Ñ³òʯB i6“lðJŸ¼_2Q1mä•qÜgéUn´§ŠŽæX]Ù@%÷}ìÒ¼^ã³*·ˆf[Xåû8ÑÜLÈã­œàN0jÇü$6¤,Õ7fO+ÌV{nï»×ïTãÓ¥þÐ}1.ĶÅ+äÌ8ÁàãëVWO»°’ûÊ‘>Âù”aKJ­·pzf‹Dz›ØÈÏ8Å4(^©èŸjþǶûvã>ß›pÁëÆ}ñмGáŠÉèÊDdÓHõ§‘ȦŠfx¦ãÖŸŠB1Ö†RÜ¡B;äԸ䚎1ûÓŽy5/¯½A¨å^O4ãÅ ÏjVûØýi¢ÕîsÖžz~”ÜrH§ä‘L›=r)£ pè;Óþ§=qN€i¹Ç9ïJ:uéÖ€¹ÆJ «®ÓÐŽ”c·jP¤1H·8ëK·ÆIÍ.ÜœÔ}Þ{P“H:t&¢B œŠto»!}rhLg­{c¥!œ.OJF`ˆñÇ[^äó_cqNâ3Ò‘¥S'—¸#!r3Нuy ¤ÜÄíTQ–fìîk–kû[­^sì·aCoÄ’Hs‘Œã:#Ç)$vGëIÛÚ¹™|_f¶·`ž;¸GüzL;}?mXÝ­õ”j¬‹4bM¬y¤á%¸)'±p`¨é@<„UK»Ëk8Œ—˜à»ÉükòAk¦ÞkR"¼˜ºc…A÷@½hQÒãr³±Ô3óŒgŠ\ÀÅd¾·¦Ä-˜ÝŒ\¨h¸'p'·GZÓ,~QœqI¦· Ü\/?0Èéš8aG¦kŸñ5Ü2iMe¨÷“ºÆ‘¬˜l±Æx玵m®-ôÛ8¬Rî%¸Ø#e~Xžõ\º\\ÚšëÈÎr)Içq?†+“2Çq¨[èßm‚·NÉ.×’B~îAÏ\“ŠØŽkMCb÷¬Å¾TɺBIàzÓq°”B3ÚŽ#ިɪØÄfY.áSl¸ù3Ó5R_ZG¬[ik"—u;Ü8ù \zš•Êm#`œyàö¤É J£g«ÙjM¥ÊJð¶Wµ[ÜüiZÛ…î<–?ÒŒ19Îr8ÎëfYµ=*ndG{Œ2Æøù@ÉÏå[_inE·žžp\ì.7Â›ŽˆI–7yçâ”å°AǽU·¼µ¾2‹kˆ¥1¯±Á÷ª:þ¡s¥irÞ@°‘å¼ÜóØŽù¡&݆ݕ͑€01HpGÝæ¹ÛMkQMGN·¼ŽÝÒú"ÊaÜ2y¶+u¤ W.1rG'Ò‡„¤™0QŽœÓ8Ú‘d …úõªvú¥½Ü—QÛòÛ6ÆCÆN;ÄsE›Ñ «´î==)FsÅV´žY­#–â…rÑ–iôÈ«D'i8cÛ=iЛ8<Ðz㽩§>‚˜ÄèyÈô¥ä¾´Œw{bšB1Å%çþnmÜô¦dÇáÍ.~_~£šk7ëL'œ~4òÁ—#¡Á¨ÏN€ãÞš'¥4ê>”18?ãMÎ=ûSr;cŸzL¨þ}iïƒA8ÿõQaXÿר‰ÇAúÓ›ƒüª2r0éNÀAzÑŸ§C\s©&Fèvx6Î0rG¥rG˜fükjfu FDÇðëI#”Œ`€wž?io߯û£úTScËîIsZ%© èz_ÁÜøÆò6¶žìxî$ŒS^õ_>üܾ8˜ƒÃYH§ÜnCý}[ÇcnQEQ'‡Yj°_±îV©$ÇÒ’ßQ·½‘ã…Ë2rÀ©23ÔdišMµÜ ¨`_-B,‘œ—¹ãµfi0_C¨¹¸³h‘¢( •ؘb@zçùטÒÔî»'×55´·D†åcºi pI€<bj÷› Nb¡‘FJù€úV¬ÒÁ-ìMi+¬Æ)c’8Ë´€AÇLc?Fɉa…£a:]K$Œf& rO¦QíG*h9µ:4‚ÜNgXãó¶à¸Q¸Bi÷­µ¤“°ÈKmNA\¦Î} •úðOJz…Ï=B7{N§ŽÔ ¯Ç™01Á籜 >´GJp=³Èì*‰9§r0ò“Ó½H¿{4_|zSñއð¦ô$šx·jv9õ¥ž”ª:ûÒ¨ÀúPƒC&îzxéÍ) é@ìàŸJ1´d ‘ ç<‘Mû í¿ª[]}–H,,ÉtóFÖ™ûqØ ƒÃV¦iRK6T’=ï,׌ÊOð/N™æºÀà z ^îW>–N¬ÃñJJÚ7Ùà‚YMÌ©‡!s–ý?£s5ÀÔ%G²‘¾Ål$Š4Bc ‚sžäpõÍuA‡LsNP!ºRS²°8õ0¼5`bÑãkˆB¼Ÿ¼Ã®'’[ܞݸ¦x–40&{f¸c eˆUãÔàWEÀ b™Ÿn: \Þ÷0Üt±ÄêIi ´×²G Ôê$ŠÝ4Q %Ð’y5<‘”¸ÓàþË” €×!Ën|áDè'许Œ u4¤Îj½§‘<‡©yƒ35Œ¢âþëòÎñ’yÇ`žüÔÐÚÞFú½ÂÙI˜áû<*±ô õç$Ÿa]’Ÿozw=}hö°reÒK§YhÖÓÙÜ4£¿-æ`mþ$ýk¥Ó-ßK†3l>74jIÚÇ“Éê}êçPJR@à™NêÃQ³0£Öºÿ±Û5¨µ6ñÀˆ +ÇN:P-ãËÈ#E2 R ÓS².§¥ØÃt/õëˉͬS´Ñe±¿`ê}»õ¨­’Þß±:(·¹Ô%)æ NN] ~x®æ;X˜¶ „&Ý›F1éŠd–6ó=»¼7ÙÉòÉs>”ÝAr•Ôi¨Þ>“%àŠÞ.Ú(&Fàøõ< ³V·~4rÍçù6©%¼«&Bà•#ƒß?¥t±iÖ‰~÷©BâUÃJæ?Ei¥ÙióÍ-½¼Q<¿| ÆhsV‹¹Ÿâ;Ë‹{{[{i)¯%ò„Œpq’sÛŠËû´z Âl0iåó—d…›ã žNHê:×K}§ÙêQGä *£ºHúm¡¸†äÛÅæB»ãîoJ•48¶ÎwLœj $Ô/¥ŽæÄfKdm à—õÏZ©¥È`Ó㻳g7š…ËF HHE#<äà£ó®´é¶l÷NÖñæäm•±ËŒc“PÞh––°ZKn¿g€‚Ф®8Çj¥R"äf캖š¯o~ÓÉ{r ¬Ó‘ìrjkã«ÙkHï–[›Éò ; chçŸq[¯akçÛH°(kpV8ǧj¯>mw«Ç©Ldyb]ˆþAƒœã×?Ò’šê,Ì[GT¼ŠKY…µ¢LT—÷ª¿{ß’8·5Dj—Ó3(¼9»ºÛ(PüÍøã¹iá«#9·†•A/Šy!}(‹Ãú|[2DßèªV0\‘ŸSêxý)óÄN21¤»Ö.µ›èíîb† V]ÌWr€9#>¤U«+ÍFþín1Y[û¥A»jsqÿ„šòö{–c§Á1†!\Ž¬Þ½¸éLÖ4ûM+O{KmÑ.¡r¡”tUæÚ>ƒó55¦™ªè’]¦˜-n-g”Ê«<… Lzô"“ûVó­'–Kk‰í!&3)%L¬ùb{àiu}ô3ÖÛj[MfÚ yÌÐI Á"Ä!$ÌÀ:ôªâ§1;*Y6—$E*°¼n'§'?•2ëAÔÑíç¶’Öâåe’iÄà„f`ÀôQÓéZWú}äÞ6‘N{µ2åp¬CŽ:Ô½Ò½âGÔ%…,KÚ0{¹e Ç•''×UîüA¬ªÛËrþhƒ1ãnóÛ'úgZk71Íy{öt»Hm`²±±n'¹?¥Ai£ê‰6š] †(#;Ö6'iô­»qÔ¼acRš|^cœs½¾è'Øs]$`òr+œ·]ZÂÏRÔZÝZww‘-Ôƒ¼ç±öP0oióËs§[Ës“4ˆãþéô¥1Å“È7G´ 1èi˜à’>n•)ô4„üÃACIÁQ‚I^Ô² ÆsíK“ƒJÇÖ€WäÉ“?)b§“R0ÙÎzö¦ƒ’x `0raéHUY— Î9÷¥nW©J@Ø& "®T’ÜzSBŽùÆx©OLñøRÙ<5ñ°?*  c'½!N ûÒm€ sž•+²–ïòœàw `gŽ ±H$S8ÁcŒzÕƒ·v8ÍFĬƒ+Æ9¦&3m¹?­3;;ŽA© ¡ê2i ®8ô¦+l*¿xå|Îrp!TÆ08ö¦ ØÐ+H8Æy=3PÎ’¹Àô«GnÔÏ)H/ç˜ã×ÔÓpC `úӱ޹Òt=è»)Ù ž=E&0p(!»žh¤àg=(-Àà{Ðx\àœv¹àõ éùÑ»ƒŽ(ç’) ã½8¾ãÀÇ4ÜrG?ZúÒ¼Ó@ Æ™_Ö”óÓ&_Ö o½Ï1Ž:çéNcÉ=©¼`œûæ©|Ã’(bÇÖšNyþ”™Áäçð ÜNzõ¤f<õ¤aמE&xëúP dƒÖ“¦:‘F8ꦱöüiŒCÔdÓNéÖ‚@#¥1Ž3?:bŒö¨ÉüéÙ'éL-‘Ò˜Ü6ØXšäTäÏž»ë¬—>YšåXby”{?¥kO©œÇ+|ëÏðƒRãå'ý£UÔæ|È*á?ïЃ®ødÁ~#iåýaq_H×ÍœGãý!˜ûò¼{£ë_KÖ°ØÊ{…QVAáãEÓ¢etµTeÉrÏ^•ö-šÄ±¢º"ÄÑ7 zŠ·y}Œ>e̘*œÉéU†¯bö_jûJˆ·Ér:Œu¯*ò;ôØ‚}bdóæƒ·aÈíþsPÇ¡¥†Xï%6Êås’½:gšÐ{»TÚÍsÜ»°X \~Èî…ËBÖòDÖïmÁ¾bxÇh¼‚ÈÈÿ„~á-Œ\ÇûÛqm)1‘•Ãx8$RK£Þ¤¬a0íûZΙä(@§·^?ZÞ ¸›ñªBúOí‰,J¦Ñ”>y<ã¡JC²£‹åÓUu K€Ì (ããô«üæš§9éÅ8T7vRÙÛ‘œÐGâ¦à¨ääÒÐ2EFÕ)'¨¨Ÿ99 PßIõ§ŒsíL'÷òc­=G¯­eÔß ¨žNß­ qÞ•†3VCϽ?i˜9 çOœãëL–‘ïNÆ;SFXSÀçÅaç g=)Êp &“Óš~¹ ¤éŽzö¨Ð• “RnäñHƒÔÓÀé×Þvü¸Ï½ªÇ—*Cž”3s€x4€sƒHŒƒÊH÷éJ²Çœ ú|ÔáÈÀ= ÊÍÃ)?ZMàœ’ }hÎIê3Hw¸9ö§nCÐŒuàÓ£­ÎÑ“ÏJ§Cô¦î?Cšùãµ#OÐTr4‘Æ ¡wãåçRqž¼š\äàÿúè‘’v–8è{w'POã´œÐR?Ý€Xð1MÁoN´òO§Z^üõë@ ç}OZ9 sõ§(ãŽÔ*òO§…~mùü)W'ކ†m«ÓëK»h'ö È&L`ëFÝÃßéSdr{žÔ=h"¡ïF>\têLmlÓ3Óµ ò Ž½éAûRðÃÅ£zR ̘9?Zs)@m­Š6¶ðêqƒL W^yÛå€{6OAVp«œñØTŠŸ6 ô£nьБœ€p:ÒÈÙá0w/Ëš6ኞ„}è˜(IÁ÷§à†äR2–8ãÓÛ“šÌÊ g®?\¥")Þ¾µ0bS9õ ;ìaúÔ£è)¸¸`£?Zz’HÈÁô4§ô¤ÁÝÒ”’zóJ:g9æ ûÙìzÓöñ‚9Í"­Èȧ³ç°Ïz`0Žæœ‰×Ž}hB$}3J[œ¯JFã€<Órr¿/~jRr7)½³Æ(I#ƒJA#ýiçÆ) änN;ÒHÇãN9úÑÆ3ïÚ Îqõ¤q’j\ ¼â‘P2ç=8 ðJNØ=ªO½‘éFÐ"˜çq'·­5¸##53q‘Q¶2¥cÏÓ¸ç­MØäqQ£ŽÕB"ÇÌxëFÃü_IÓÚ’8ñ߈òÄà`Ò½éà¤ã?J+Óš`0ŽA4ÆÏZ‚×ÚšÊAÎE#'’;Ò•#½)ûØ¥ùäÐ婤n”ö¶GéQFÎè Oíž)€âp1šQÏ?iúŒ{RnÇ>ž”üŒzzÒ=)ªÙ$J çë@†g×n-žâÊåüù,33,ÊÛ—qëÁë]ìk+Pƒ©ÀÅS]ŠÊdKhÜ„îëùЦ®ÇÊÊÞâ³u{ô¼RÀ©R[b>\’É­žµZÂÊÚÊ´™ÉXÔŸZ³ÛœÝËJÊÀÜÒšßtg­(L¾´d‘Î{ÒÃÓ4ÃÎrjF¨Ï_­!¢™ÿ‡ãÞœ§£r~Ðàû*~yö¬ú›t$1Na’i‹Ïò§·PJ²ÜSÀÈɦnÁæœ2WúÓð@Á¥À´ÁÀæŸ‘ŽžÔvwtÆj0^õ ã§á@…'ÿ­OÇqŒÓAïÐS×$tÆhñœq\ÿ“þ);¾¹RŒ1þð®€}Ð1ÈëX~4þ;ÝØ ÔãøÅT>$)ü,æî4Í+¯ isHë3HnYFXf¢’ÏI‰rúD㎢é¸ý*Ö«6ÍJr¨ ªÂ¸e >ï½3HµQºKK‰ä1•, Ió)ã¦Á­õݘi²(-®Œå é3r3‘zßáHÖz!g\)mýWÞµ5ý2-ìímdŸtÌÍæÉ'Ý“€b$ªÒy QÊîv ’pO^øŸÒ­;ꉵ–¤‰g¤È?u¦_cÓíx¨§ ]&Ç™k~3Î>Ø¿áRÀ86±1§ÌÀ<™À댟J¤§”S6U¸m­¸13œóÏó¢÷~Cµ–»’]Yi²ézŒ¶©¶±«2à2ÍŽÃë^¤/F³Wo»n…‹öFkÏeùt]x §lp¯ïšîî¼ã¢Å 0´†UDp˜Pãqê;f³ªî‘tÕ›+hz­ÅõÅôWXWWY"P8ÊÿõëRí¤û,Æ7òåòÎ×À88ô®~]8èþ$³—N²ak$f;€‡“òõ=k~à·“6ÈÝSŽ‚²’WMÌÎеX®ì-cšî)oZ‘ÓpÝÓÐUøµ+9§G:@¤u÷ǵaé¶ÒϘ²ió[Od¸y$ ?€®9$¤Ñmž(á‚ïI™gµF ;>ä'ÊóÔý)¸­D¤ÍXum>ieD»‰ž%Üã=sî*Q¨Ù;Äî Ó Æœ{z×=¥Åw¥e#éóEn-ž˜‹æ“’8ëU-d’(ôhO»Î儇É$rãš9s³«¶Ö4Ûµ”Awy$‰à6ààŸ§½G¥ÈÞCºYåiYŸkd&NBþ¹ãói÷‘Cc)’+ã9Âí§™» Þ¸þU·£ý–{ˆ¬n­ŒŒ µÇßrÔž(”RZ.ì½qu¬bK‰£… Ú °QŸÆ±4»‹ëí&Æëí,\\7˜Ø]­f?€ãíIÞß_·¸–Î[›F€Ä<´Þc}Ùä{Ž3íRø]¶éO ÛË$Ò|¯Þ ’1ëÅ´n¼¬hFÐydÝBDÇlxqóô´ªØÅ(®à3l æ îôúó\º4°ÛÛY¶wºßR3XIR…Ø‚=zÒ^ZÄ¿] a1’[ð å¾ï+ÆzƒO‘ ÅÂÛÄóKÄq©f>Àd×?c{«ëV¿n¶{{[f'ÉŽX‹³Ýˆ#…k]ĺŽ<r‰¡*r¤ÈôükE¾“IÒ“NÔ,n–xFÕ1BβŽÄÓñÅLVŽÛŽOTJš¥Ý¾£Ôd†Ö´2:ž¸`'ô­™/­¡'y£É÷w ‘‘ZÄ™'¸×¢¸ŸOŸa±u ¦à®yÛž*¯“sko¤\Ía{"ÁnÐI9ñ†À<Ž >Tì.fŽ‹ûJÈÊ‹ö¸CHyƒæ_QëH5{²›Ÿ¶Áä†ÙæϧֱµkG·ÑìnôËWIm2BÙßµ¸#¿­KwhÖ#J‚IdòÃ!•T°L®@êO©àQʆäÉu ë…×4d·œk–}àwar9ô­y'H#2Jê‘’ìØ¹;dž!áä{;¥6…Ĺˆü¿)QúÖ·‰¡¸“M‰­à3ùS¤¯ õ‘Aä{öü©8«¤ [³J=BÉà{„¼ Nă }Í,z…´ùéqEœo6çëXWDÝ;è´ùü¨î§W‹k¸ pÛz¤ÿ…WÔbûe¶¯:ÚÌ`™àX—Él»/Þp¸Èã>Ôùs3¢›Plî."š)*Kmpp@è}*†•{q(Ynï-ØIn³ù »Z,Œœû`ŽjäkÖ¬°ÚIåM`[° ÝÇN¸+M€˜.‘嵟hÒ–&>C¸rW§¥ *ÂæÔ“OÖnöÆk«¨…½Ü/!‰¶¯—ƒòàõ9÷ô5ÐýªÝgX ñùÄp…ÆãøW!fËlÚ·Ól[g…¿ÑÉ*ùb¦²‚¿š×P‚óí?ló‘ÕÇç*Û€ì1Á=©Ê(JLëwrryÎk2êþTñ”f# é&ð:‚£=sïSêžsi7Ÿdí&ã®qÚ¹ËK#ûSEšÚ%ʼr~ì© ´pN99ÍL#}J“¶‡]¹YÊ«èÎH¥)m¡=‡õ®7N–Ú=^Þb²"Ëѳ²6ö;aG?OZ‹J‚ÎÖ åSeѸ)#`î*C lí§ìÅÎwEÉPFáÔf±uûûËbÖËó®R,2pOoʳ´$Ž/Ë q¬ÒIÆÂ²&_”“±>•kÅ’"&˜»¾e¾ÏS…“Ç¥ )I nñ¹Ðò‘œg¥(lãœW©ÝZÿkùÞcf ä/+™o*0>çó'¥iø’I—GB«#@Ó'Ú<°säçžœúRäÛÌ|Û›êÙ‚=1HAÉôô®ZvÓc¶Š]9‚iòÝF·&<ªmÁü8õªš“Ãȵœ%ˆX|³˜U—w!H>˜È¡Bàåc²’UŽ&w8 2OµPÒïïošFšÓʶdY Hàyäv5ŽÑZ[_ê–±Ü7ÙÞÈJGžOÍ–ç9äb“J¼zEšÍ'Ùg´2ßš@ÎxÀÏùU…Í©Õ&0„ŒŠDn8î3\‰’á¬-¡ûlâ!©5¼rÇ.âär{à÷¤¾¶)q«FÚ¥à[käf#æºþ_Žhö~aÎvˆþÆéR‘‘ÿ×®N?´èqMß,óŠÞíTmb£ Œ;wä×JØé¯%Ô¯;ƅݶœ œ=©Ê6ØJWÜK‹û{ià·š@’ÎHqÆ¥GÏò®~f»º¿Ñ.n|‘ È΋;—1’=J– Náõ˜ídŽ5ŠS ƒ½vô$çŽÔùEÍ©¹ÀÔÝØS´žä×=·~æ ¤³ˆ[=ɶve•·méSÚj·ZÄö¢8DQ;!LH6ÞàûQÈÙ'$r?ZoðòNGëN-Ç^ý)9ì*FF3œô™Ï#&Ð~”ÜméÖ€OQqI‘Ïó§<ý©½r;Ó­Œri¥+ Rg=ENÓÐcëR©#ŠˆñÓ­)é×…0±ž;vÍ78F=Í/lc8ô¦žh¸¥7<ŽiÙÓIö¦HäíHH¡R€3ódÐÀ9çéIÑÓÚŒs‘éJ@ïŒÓHçð¦c9Áü©»x<`t})2☰ÉÁõôëI‚IÏZ“_Æ“iÁŠBåëúRc·¥K·œL Î)Vä~áùçi®NôæâB{È®Æ@:“À®JéGÚåíZÓ܉38éåS[’ÖüŸãnOÖš[¡Çò©‘qÐ9­LìkømŠø›Ie8e½„ƒï¼WÔÕòžŒJë6,¤†1Gc¸WÕ•¥3:EV†gtZŒó.G<`Ôä`? ˆƒÚ¼ƒÑãß½&)ä^FyÍ0ò8¤0@>n3MÚ#ª 1#ŒÒ°ÎyÅ Š@ôÏþßZEëíN=¨‚‘³ßŠ^4@ =ý)‡¶jCQsíHe 8»l{S»ðzS&ÿ¦ü)às횎¦½ SÍ9ð8#ŠHÇJqç9 Q"KŽFi{zRŸ»‘Ú ŽsKŸO_Zh94 “L‘ýN§p=)€c¥H9 pð?ZxçƒúÓ@éR0}M8 Âñ«…ð•æìdì×çº23×5Îxïð‹L É ÿ¼*©üH™ü,æµ&“ûSPEU¼cq+òŸÎ®è6æ/F±KјY·¢íRx¨5…hõû‘æ$i$¡wè¹Eæ¯h*ƒÅ$¾`X¥PøÀ c޹®‡nS~aÞ4ÚÚ¦™˜ÄÁcrÑ~aÆEb¬ áßÌd9aÉÐ|¸ééô­ŸËk*ïµD26}+) ¬vþ{°2yÄ òÚ _L€AüéÂܨ'~ga x—6_"‘»c€#ÔƒïëP²-ÛM4Í*]–R‹+väãŒtíøÖŠ®ø˜ó£ ¤ˆÞ\òᚢU^[‡ŠT‰A°ÈÛI¸ï×½¨OpjÖ¹Ò4&¶’]múÿ¾ÕÞ]ê `šz29$  Ó>ÕÂßèzºõÂ[€Þ§Ìjìupz>G?mˆÈÔKT®ZÑ»$1ew¥\ÃnA9ÖÅÕÒkà\–F»02(ýØM„ó‘÷tJ@OµbÕS¹7 u<@•T–R§ àõ¥–T‚&‘‚ÆŠY‰ìæ°¡¼¿X¢’K¢äjMnû‘~dÜ@8íPêS\K£øŽ™aùP• QIsO“Ry´5¬µHïnf·ò¥ŠX‘\¬ƒï+t#Ú¯åŽKè3\õš8ñ-Ü¿hp‘ÚBþPÆa¸éœwüj}&çT¾W®ÑYÕšDÈùA.Ü ät948õAw6¶m~}8Ž@€y5Ÿâ;ÉôýâîÕ•$Œ) ËžàZ«öNÛSkY®c™'¶’XYbÚceÇÏ#šJ7W•´69*Ç®iìÊ`×7c©jRZé‚k˜ÚMG?”–¡2ï$Óîõ[ËK{Ø–X̶·F%hòFx#4ùÂæG@Ã9ïõ¥n uÏZç.µ-GFšö;¹"º"4nܾÜ0 ÕǸ¾µÔã´–t˜Oo#¬…(ëŽÃ¨çô¤âÇÌC¸ÀšažnÜ0i£™{®så\¿Ûuk› *c¨7s `Æ89žyvçUºÓßSóY%û%¼NŸ&ܳd}²)ò0æGGŒc=ÇZFnG‹5åõì6Í*Nn`‘ДÀGPoá9ªö–¤Óèò\ËÅ&4i‚nçžô¹s$t 9RMW›Q†ÒâÞÚRÁî XþRA g©®¦–—K£i Žøâ¹Â.®¯¼?qqÇ33‘0´lx9çŠ#ƒv:fÉÅG$©<…DRI=k#O¼Ôïü«¨ü“NÊèH $zgw¾)|Zhoµ°žlaÀWx¡G[ô¹§a{ôeãݵ V …H?CVÊñXrÝj3ßßZØVµT Œ30ÎO|vâœúâkëg;¤±_)Z"VaŒ¶³g· ÷£—°s…4®9Ç'Ò©k·“iú<×V剷ï®G$ëQ ­FÚþ[iž 2Ýæ€…1íe m<ž9ÒQm\±§å< SUTÀrqXpj÷Ž·ñ´©+Ån“Fâ.0n:üÃŽ Õu¼Ön-4©EŲ5Ü€ä·O,œ›ÔJ|Œ9–æúOÉ$(êÒÇÈÊ瑚‘‘%ÚY•ädt5‰qª\YÍ«Žks UÛ’àu9é“RIª[Ø\Ï5²1ˆ&ÖU듆%Cç­¬\ÆÂ‚[îôåÉ ëU´Ëƒweç†Ef;^ò‘ž¼ô>Õqª_ɨÝÚY[‰ ¬jHÀù݆@ÎáŽüÒIìUѲ:äŽi»ŠÈA ã¥cÞê:…­òÅþŽ©p [–RyÀ*Ç?Žj6¿ÔcÖ.RG¶6¶¶ë,€q${ñÒš‹26â¹’Ù‘;¦:œ*]ÁB’vîlrq“Y——®äXF©<bäãʤä“ÇpUþÓ»¸Óô뛋+R—þrÛr>ö1Á4ù¹‘Ò`Wh+éHca*"P¾›F?*È:µËÞ\-¥™–8&0åŽz g¿¥2ç[»‚ßSZÄÍe(\o8u*Gy¤¢ÆÚ6FFLc=9QÒ‘¬íå€E-¼o9 Êøõª3jw#Y|Vˆë嬬æ]¸RÄ1ÔTVZÜ·R@éi'Ù¦f á[åP8cÆ0qØ÷r½Åt_}:ÑÒ5kXp‡ ¦0Bý=)eÓl]¤”ÚÀÏ Ã–Œß^*¦•¬6­u·(„nVó`䂬;7µjË`cŠփѭ GM±ó‘þÉåB ˆÇʽÇëMFÓ`ØÑÙD¥AU!z+;S»¸ŸÄVz2Jñ@ñ§t8,9Âç·J¶tè´¹~Ý̱[DŒf‰¤gVë‚O"ž½Å§añèút1©n¨°É¾0¬FÖõëN}*ËÎ2ùG&O0 ì/ýí¹Æh]R=ñÇ%¼Ñ4Èd‹p¼ÀÉ®;©‰-fKiÚì­Æï,ù=HÎG׊- ÷IæÐìf°›'t£Îa¸þJ±qg Õ‰³˜"e An?_z¬Þ ±K.ÜL©,ÞHS,¯Ó¥BÞ$°y“íˆäòä  „ô-Çæ‹L^èÏøFí ”–ÓMupmWš]Æ?uô>õr 5‚Ì[e˜6w´Ï¹›=h»Õ--^Dvbb]ò”BDkêOj’éÒ;9&iÒ$’%#!}½ Éî %±™o¡-¼–ø¾º+—‰ `½:b›„‘N³­ÝÈhçgQ‘üG$9¦™'þßÓÝ·–Ùœ…Pð>½ëVfŽÙ ÎÈ‘ŽY˜à ¦Ø¬ŒŸìV[möÇÀ¸ûFãä¶íß–iÒiu8u .G‡pŒm݉îj—PÕ ‹Jºº†HÝ¡^z1èüES´½’=ZæÂâú9xŒÄhrÄÀc­5Ík‹Ý½Ð 䎴ÆOz2~Pyu=j ƒÓö¦°çŠx/LzI´/ÐúÐxã×ÌóÁéRcý;T}¥nÿõÓ]pN:Q»dœÐy$äãéLCIãÎ’@¦÷ôúRôõÅ0Ì£œëQƒÛ¹§œ~?Jaã9 p?ýtÐA<ñN¤LZ(¢´ ñ!«YIç„HÀ,dx==jš6ŽH–Ded``x#Ö¹Ö‹všÍ6›=œ±´cÍEw.pp2JçùÖ¾›æ¾ŸnÈÑÑÀ_lJòåŽôîOõ´ŽR9‘˜ ÅCqëŠE¼¶•]ãž6T;X«´úät{x]- µ±K¨'™f‘“æã8ÁŒQU|ûfÒ5(£PžeŒeWiÉ*Xrq÷³·>ôýš¸)”·Ñî–r’Ý,~bÅ»ëŽ{dа¯•€#=¥qw1iKv©o4šhx㸃ۨ©à– ] ×Ë ¢Ã$ Á.›y sÜäNjG_ÝœûŠ3)Úvœw+—ðl¨Õ±yd`ÎÅ÷#ƒ’}2:Šêùɨ”y]‡uq®}é|Ùö£<ã4c9©(gjiÿ­0žý¨3g8¼?…IŸÎ¡ºéGŽÂ¥øVOsn„ñ’}ªF½j$펕+7Ø«$ilbÎÍ0t§H­–/påNœæriAð4Ä?¸ñR ÝíQ޽>”ðMI´?ÆœÓÁɧ¨9Ç4ñ×<æ¼sðŒË€3Fr}ÕÒ þUÌøé¿âž Îæ0:º& 2õ­­]¡ÃÑ.Öo¼v¨À©ô8ßÄê˜]É›¶¨?/OΫ^3¾¹¨’ªGœ Ž›§Òµ2ÏQ3Kum IŒm nbAè>kg~S.aÞ-¹g4ro³º®ÞÜóÏaÍb¹Š9<ÖŠ5RÌvHpHéžW#°«¯]Ùßjv÷Vº•–"…^BONƳʧ•òÝéÛÉ!ä7,31ÛëN? nDh@Ι˜,Фü¸8ëéPÀŒXÈÓ!2˜z1ßL“ùյР'ónõK(¡EVÝ'ð1Œôæª)ÜÒIäáÈPA$¨O¯|ûÓ²jÁ{;ÔX+T}›ÿCc^5•­ÚGö˜P˜dÜ3´úŠóK¿Øz®Ç ™mÁÀéËW¥Ir¶ñÅ•wwùQd¹ÆxÿëÖU’±pwnä2hú\ò9–Êg0–\üÞµjáåŽðÂeuéà¹ükF»Q&¯up²Æ>Øc“ïU@qÉ?JÐ:ÕªÛ5ÉcU›Èe(KÈ gÔVm;Ø´Õ®-¾•–ÛßBçLÓ´yȶqŸj_ì /dÑ‹P`<ÅØl~>‘u‹s˸–&¶Ç˜’FU¹û¸óQ®·™:KÐxÃÈdA€N„ç>Ô{Áî“Nûd7Fß÷ШDbíÐtÏ<þ4ËM ÂÆõîm£dbI ¼ìRz¹À5F×X³³†ýåy·ÆÂi·.â.0O@ü*÷öݱXÙûå,3ÖžN8÷÷¢Òt‹ÄÑKsáûËh if‘6¢''=y©ìôëo²+¥Idˆ#™‹ãŒ“3éDZÅœÒ@‘ÈïöˆŒ±íBw(ëƒëíQoÙ}ž ‚Îcžo%Ëèàã žœæ…Ík—¹)Ѭ…”6ÊŒ‘ÀÛ¢ÚçrcœŠÏ×tá‡îmí –iftvÛ–g`À’OÐ~•§e¨E~®Ñ,QÊ錑×µ—â N4Òo¢†i„ÑÆAh–ݲÀqN<ÜÁ+XÔK&³d13,èO8³1^ÊI9ïMI¶‰ËLîËå‡y 2¯÷Aíüê«ZXÙÛ‹¹˜¸…B¶ÑÀÜÄtïõ©î5‹ iä·’Gi£A#$q³§¿•¤éšŸ-„vM‚X<`HÙB=r;ÓÛH´óg,ŽßhŒG"³’ Žƒý:[°D‰Ì…ÖhüåòÑ›äãæ8j§Š¥qá«¹íæ’&E^6Áê×5ìîè¶š=°mû¦f˜•žBJ¡êíüê%ÐìÑ­ ™ÇØÏîšØ_ñô©n5K[Û+32GæHUIؾ§õ«ÝÁ™ºyU` Ì'Œ”¯ ´I˜BFÒ±`ðÞŸ°4Mp¾K#vÚ¹ìxô¨õKÌÒä’ÖyíåâiŒ¡(\ÔtëÒ­Á¬YËÔ¤¼"ÜâQ,eHôàúö¡)% ;0‹D±·¾kÈQÖGrÄ,Œ·®Üã5fúÆßPˆCs¹£ÜÕr¹#¦qïPK©[ç¦â‡Ì+åá¼ÔqjÖÑGg5Ćx|Ä•ãÆðI'€µ–á¦Ä×Z%ÅÜwl$ó•BYXQÙ°yüji4›G½K·Þ]$ów¡ñØéœRÚ]Çqh·jŽ‘0$y«·_¥d\ê }â &;yn%óÖDmàŽÇžôÕØ‘oÅOqáûˆmâye“* ž ÿJ±™m%‹#¤Çχcù®ÅŸáÉäu5^ÅâÒ– $“Ì™ähP–|“·qê@©›]°KEäuO;È9²¦1Z5Ù›²4Ðl£!”Üo1ùFC3d¯oËšY4+w··µó.-\Öckof«çÌŠÝEÈß.kêÈ»6i3^‰L®·` ŸŽ”Øt¡mmä‹ëÇ!ƒ+¼»ˆÇAÓ¬íTjÚ}ćPß4F9Z5Þl:œ t ç©mªXÝ$òÃ:•±#®ß~{Pù­¸h?NÓâÓmŒ130.ÎÌç–brOTh˪ÔšâÞRÉ}¢@:gŠ‘µ8A$ír8À/½J•ÏBA­K§bÒ:}¡wüÆÉ# Ôž‚—½¸ô±RÿEûl’®ç "6áyÎFFAÈõ¦®Ž¿nûQº‹B!™” ãwç¥&µª¤¾¿¹Ón—Ì‚2C(ÎÓÁè}«BÔ³ÚB_–1©'¹8îÒI³:ÓC6vïj7 Œ¤q¹R#ÓŽ`ÐÔiÖvKy6ÛYDb«“Žƒ§jÕ™Ò(šYQrXàsX¶z‘»×oãK´–Î(—iRIÏ#éÞ„äõ¢´-.’Ë©Iwäð¤¬HWiWaõÇj­ ½Üצ;ùaŠì.ø‚)€9<ö­K{û[§òíæGd\ã<à÷ú{Ök]Ë}ªÜ[[\$1Ù2–]ÛÉä`¡6 +bÓ5?·ItÏ'!e(#9Ïõ›¤O§³Çü¦Ônòâ(¿&sÆ{šÑŠêÚä7“2IŒ³Á¬ç½¹_C` ›fµiNä0luÿ=h»adˆCó­ùŠêå?6(ö`â#<±îkv%xâ@\» ³ulw¦ b—zÇ23Fy ÀàûúVmÝõÊ%²´PÝÞ9^˜¨’ÄtÏL~4k VCõ-%¯/íïí¦òo-ÁUf\«©ê¤Qqc¨C,W—ÅÄÑùp)9$}âO§¥E Üß]+ÝÝÝCäüñìDÆ[nìŸ\+mʬƒÓƒCmh '©’l¯dkIfh Z#lÚN$r»rxàuãžµJ×G¾†-*7h ÙHîÅY²àäqÇxÖÝýÌVV]HO—ï8ïíUãQ0.ûhÒV•@ÚÛ€ŒòI郌­ °i\ÉmRka¥¿´>ÙŸ1€ÆAÇÝëO¼Ñï®mõ‘ˆ7^¼f0d<sǵlj—Ma§Ü^"0D[i8Î=ñV-Ý¥·ŠB¸, ãÓ#¥>g¸¹VÆš}ÒêrÜ}‚Þæ+µMé+ŒÄÀ`à‘È­;ä'L¸‚(‹3FÈqŒ‘ŽõbI¶M ~[¶òAe Æy§°`8=}ª[e$µ9ˆ`»ŠûBy,§+mlÐÊÀ¯ÊÄëÓŠ¹â;Y¯4²–ñù’G*Iåg`$Vß•À>ù¨Šçž7gÒ«ŸTÉåÒÇ/¨ÄeЯZ .æ9î©Y>g8ïÔð)m¦{Ü;ÙÜ4wiŽEˆà9Ü{WHÊKç¸æ£ea´pÑO˜\£ˆÇ^ri½r:TÎqPåªF/(ä{w¤-ƒ‚qô§ã$ç­FS@ Û+ëL#=)åºã<{S Kji@@ãó¤ä ├Ô“ÖŽ¤ÈS€óʆì)Ì3Ïç¦;ÔD`pØàš˜°È MÏÍÐq^Aè™:>>Ÿ±Í"I¾f”2)\n9i3O „ϯZ``9®_Ç|è°'!šê1‘Û­u8Ç"°¼_-áéf¸· +ìó sœg#ëUï"f½Ös÷:n¡%ýó¥·š³I¸:H€ÀÛ=ª¸Ò5­1°N0¥9÷Îê݃Á:°Ç ‚EÜ íó›üißð‚h£mÀÁè'a[*‘[¸9-L4½A”íÒÝ]@êc?Öš4]GËO3K“pëóG‚qÉ<û;sëZÖ¾Ó.ü¹¢Šo²Ê›„¿imÝxãÞ­?twRºþy£Ú%ýÁFÌ4ÒõÍ¥È3ž–xüê ô}Jc6“#q‚Sük¡oixIxzùÆŸÿ&”eàç?ëÍÑ7ëó§$¬rÖwv^ÔÍÝ«A¾xJ)#Ôç¡úW{wmy4Vwv&/>NɉÊÃdtíY§À:4…·=ÓŽû¦5ÓÇŽ!“€0*jTOb¡´g9¬¢ê Ek‹…”sÓåtãÖœºUüv—VÁmÙd»K•a#g ñþÎ+vi’ÚÖYæ}±F¥ÜÈdÕ{+ô½óv#¡M£ç@ ‚:Žg¹\¨ÈÕ¢š#¨ÌÉÛ”Ž(ƒ¹ûàœgR1Ïj‰­î®¾Ñ¦][¤w—ÂQp%ó>á 6Œ ÿZè®lἡ¸D–&ê¬2 2ÖÂÞÏÙáTfbIÇNhRÐu2/,õ[ýæÖKk§™&BÜž?J}펠×VWööÖóȘg·™ð0H9V#±•´]b節94ôåG¿<Òç)‹{m~—úeÝ¥¤.ð$‰,BMª¡±Ðã¶=*Œ:~§ýŠ4ÙôøÏ™pÞc ”…Ënüñù×NÄ™zvíÒ…R­¿žhSC#@ŽþÚÏì×ЪXˆ˜8%Ó¶qÜ }j•Õž§öµµ½´sÁ|Ds.ÒŒSOôâº/â“M‘Œ1I1W}€¨2ÍÇ@=hæÖáË¡ÌêZn¥{n"[ÔµšÆOš¹Ü*Ç#ÓsZQ[Þa¯šÍU^ÌBBÊ Þ 8éøfµá&HÑʺníq‚=½?gæ8§ÎÁC©ÉͤêCI±Š+DŠòÞ ‘Ü$ød9ç>ªGjØ×í.o4 ì­bW–`%¶…ç$þu¨c㓞zPI9´œÞà s²Ùêê-tº}½Ôw1"Ê’ÈÔcƒƒ‘Wµ½>]CIòmv,ѺK?t•9Áöâ´ö²€A•P¶Ôšæí¡†ÖSn“í »—¨Æs׌ýhæo^Ád·(^kê<±µŒ1ÎΘS0<ól †ãMÔ.¥Ô‰†5óÚ)"Ì™æÁíy1áäY†åuRŸå]'ÍÎÏ¥¸Àùsš9Ør©í÷‡¤µ¿TŠêHZ&1¶FqŒû}+>Ö%¹Ò¤ŸNUû+29Y—Û¸{{u®“ô)‘ïBr™:¼u§ÞY@³5¬ŒZ6}™ ¤pk,Øj²Ø¼/b¡ÿ´EÉ"a‚»·qü¿éc”›™ 8Ú –+…lúý*C¸gv2GjÚVfeé–×QëºÄ¶þ\7 6ðܨÇëÖ«Íi{¤k·…”j·»Uó¡ Õ‡àÿõëyAÜÇ4;ˆ¹eÇZ9Ôçµ'Ôõ=6e]8ªHÑùqoRü6X·88õíÑÖ•mDëE¸®¦2§#=+~ÞcqoÊ®»Ô6Ù« úІù¶àSOžÁËs*ÎÚ»;Ÿ?K’ѧŒE'˜Á‹ 2 àf¨XYÝ'†nÍå§Úo$ŒÆan<ÅAµG^ø'ñ­˜µ(®59´à’‰`]ØŒ) Ó¦¸­mSò êIÀÏaY¼Ð_K­Ø®ÝÛ Œ«ÈqŒñ×ò­¹.nm|>³Bˆ“EÜ·$€09éßÖ®ÛÌ·1EqÊ:†ô§É¿ŠëÁ†yìhr¾èj&>¬nnô[[ˆ­‹J¯Ä–ç«É_¯øVeÀŸR¸Ô¼›+˜ZêÅ6–<À·öÎ@®¬‚ç8¤ÆÔä~t)ØN72tfIÿ}&™5¤èž[<¤ÁNIÅeÏow=߈V²¯ž‘ù,Wh}£ 3ï]N1´ `zS-®!¹G1°!Y‘‘†E ZÜ9zºA‚áä¹[«i™6k‚IÀ=Iéýj­Ùh¼X%û=ËĶ/d±¸¶àéœV›ê-òÙís3¨J©Æp[ 8«|ÀÆh½˜[¡Éir"Þ©–Þd·—OÙ†±NCrqÞ‹Gá·1¿™2H|¶;AR0xãšëŽá—Šì3Ÿj~ÐJg*Ç¥ZnY–ÞÞòO<$g!X¶ÆÁŒûU½Q,cÓ´Ó–H$¾1•[;I;¸ÀÀçÒºƒÈx¥¶ãnHíš~Ð41|Kµ·„n`P©Æ«î=A×¥S»¸¶¸Ô$Žòõà†kxÍ«¯B?‹iÇÞÏãÒº‡a‚ ñU®.í¬ÑZâHâ@p¥Ø(©Rè6ºœÞ§sk"jÖ×óbâ4&Ù]ŠîMœòsš´nícÔàó®Umî4ÿ—÷¸F`GNzý+xˆä;š5lŽ â£&Ú[‘òžH¹ Á+øv§Ì.^¦Ñ–/ ¸¼b\²Ë‰IÞv†ç’*#w4z­â_ÊÍÛ@»Ÿr"–_› ÍuÖÜ"aPåÁòŸoJbÙ[F®‰o¤ƒç õ£™++iÉ£<ÓMjÄÖÈn¡¨ÞEp$TPÐb²€müq׎{Q#ÞÜxškT¹D‚Ž]¾VKF ½s£ØÝ<ÒMw›Èv\‘Ðà£zÓÆ—gá¼\îÞÄ: gs+™dÈÆM5—c§j‘ÁS“Á¦IÏZ‚†d€GN:Ô]úԧМÔYG*O qLC”úôúÓ[ qNEsJãâ€#õ¤÷úÒIÈnžÔ ô>”ÀU#‘íÍ4ò1ŸÖŽ8æ¸ó@†ž¹¨ðppsŸSR˜ýi¤{ÕxÍFr3RòCƒž:}h° Ô”Üäú­8‚¥y$zS9×4=ÁíȤ uãš3Ž1Iœ `; dcƒL;h$tä{ÓzpsŸj€œŒg8¤?Z3õ¤$qÖ˜Ä<Œu¦žiIô¦×­0Û ‚{W+©?üL Á\WQ!ʧ5ËêJ é t¥=Ìç±_}ÝÇëVP,ØñÒ RU¿ÏZ|[¼É[³þ•¡è¹çÚ¾¤ð´†_è²{¶cZùr?»øWÓ¾ bþ Ñ íe@  º{‘PÜ¢Š+c#È[“MÀÀþUR]VÊ-âK¨  ùn€ô&«k×7ú×VS‘8p¡¸üy*.ç¡ti²ƒÁÁ¦0è1Þ¡ûm²[=ÃÜÄ#NËŒî{SÍÌ å*fA”ù‡Ì=½jZci8¡+Ç_JI ò\©€8ÏLöªZ%ì×ÚEµÔû²®HP@ŸZ,íqܾ¼rË‚\æ”’@ S|Ä‘RE,¼08¥µ"„¯z  ÜqÜÒŸ§ÓгƒRTg$œÒ›x3t£ýšzã×]®nSvÒðCÜÕlI5!ö¦'žrE2X¼iÄS |ØàÓûb˜˜Þâž9è)¼ xëÖ˜…Öž¼· õ¦NjDÆ8¤!é“Oã’*1×9©`ŸÂ†@ëÇ5‡ã'Aák°Î‹¼7§ à{ñ[¸çÞ›:¯– Pü޽­T]É–ªÇ®_[›F0ÞæT´)ÏÞR9$ãŸLWOq<:<³ ‡’ð³ ¶ñŽ ÕÊ| Ðʤa“ œcNI’¢ÑÉhÂÚ3¢´W<–N\Ks…Çñߊ›J{KÛËâñ£ TËóNÝ›nsêyçšé$€2²Ä6*v¸@všÉK¸™í~×öe6Ò 3n„ooSžž´ù“-Œs©ÛEo§Æ÷anaÔdÞä2.çá½±Š²%’Kv{IZK»r|•cÂçGç]°‰_ˉ†ì°eç=ˆ©w„ p“C˜ùY…¡Igwp“ÚêO+ˆ6¼Žr9oö¾µ«ý¥ê릺L’²WdÂ6:€jxÕT–U ¸äàc5[Dצè‚ÓòÔœü£¾½Ki±¤Ò+øŽá¬ôÂãDŽR†6`þUÏ]ù:d-kop—TÌà†k]Ä Û½=3Ò»EmÁÀ ¯#T1Y[%±€[ı8ù“`ÁúŠq’HlK³6‹öŒÀ¹Q埗¯<ýk˜’{½|K©ÜÁ%»‡· pFÓ°¸ÏjëcHáŒEaF¨À²4í.h5FòâJ\hÈ;™p1ÜqøQ•Å$Ý‘­ÞÊmKÉs,w‘ÙG7–³Êry'Ÿ›=1ƒÒ¯Nßnñ=¬)}2Àöžhò&ÀfWö9ç5µ-½›¹žâ_Îè ß’:RC£,3C$`luAÂöÁôÅÊÛ+ S.ïk²°‰™J1VG#Þ°¬oÄÚ†ˆVø·dÆe󲂮23ŒäšéRG#µU]+L_œiöÁܸ…zŸÂ”ZKQ´ÛÐçíÞî+m2õõ‰$’üÛº³‚Œ›ØtÇ^5ÑjèãE¼e•£a 2È´‚G4ßì½<ªFlmʧ̣ÊÔ{ñMÕa»ºÓͬHŠed•¤ÎTŒ¨i¶›šLÄk©g½µ³’ü[Çýž’DÏ# îx' Œ‘ÇÖµæ£k ¬1Z6¡˜Ó}ÒȨ îp}¹©¿³,å··†âÞ9Ò<Ô«M "4wH÷¶Ôã'Ò‡$úMÔív¶šÅÓj>eÖ" øP0§w‘ÍMys5ε}ju$³hâSv#‚2X`€p}sÒ·…› CZ@D‡sƒù©õ4I§YNèÒYÂæ.´`íúQ΃••¤º¾[”·û ’ÛáA»IPœ¹Íai·k…§D—&(&»–9&-Ž2Ä{gšë6+¨GPÈAÖª:Ù,æ†ÞÞÕVLŸ,Ä6ÇñÖ’’µ¬ 32êP–¾T“ºµÒ®ÕbÏ‚?Õ«ç©ë’xŸöÛ‰tm5ÍÜ‚UÔD/ûÎY7‘†=øšÙÓt»a¥˜§†ÒhÚf”,k¹“Û=qVΓ§4e ¾Ó&üyC“ëÓ­W2Z Í•f¿¾ŠK…l»#Ge˜º•b#€sÏJ̶™n.´iSQžSt­ç(›ƒû²z í]8‰ à üÒÞ=~ÊöÒÞŽ þnRK grE(´9&Q†õÅ®žZúap5…˜òÛ†ç€:ÓçžvÒµ-D]I Õ½Ã,håP§ ¥zç[Ré:]ÃI$¶P<®CÑŒ“Û54š}œ’ùÏk ”`ïØ3ÇJ9¹Ye4íâ[襖O,[Ââ2rœçð©ë#‘ÅU±×.®ãIØ@#†Ý¥»*ÁˆÚ9ö?—½[´Ñ#±½BòòGù½—và3ŒñïSÙipYâŠJÝHdpÞã§Ó¯çJñ 2¦ŸªÝÇÃ['Ù牤Ï@œeFrIÏ~G§ê·÷ÙÓMºÃ|a ÜŒ·ÐƒƒVôý=>ŠÞîèôªFÒ±çÐcùÓbÑc·†Ê4»¸ fÛ¢o¸çŽx$Sn!i Ðn5¸çšðÂcÈ‹°AV#éŽ* öšAmöhf·6½d<XdãÐUý7MþÎ’}—SI®\Däa 98üifÓ÷êÉ~.$W˜‚€»vžOlõÅ.eÍqÙÙ­5Y'»ÆÕ"&ÜËn;—nÖ㨪Z-­žžñÚ¤ºÜo#JØ\ß1-‚q’8«v~{[ˆf]FrÈÌ‹È'<ñ×<ûÓWÃÏ‘ÚßÉÖe„Rì*ÝTŽôï}âÃ]í]>;›“?›µÄ™ ·¯×#j8|@&šØ}ŠtŠyLAØ•#ê*Ãéwweu%àsj;£ûåºô#Yt[¨mmâQ ɹɈŒå‰#ï{š=ÑêIý¹¹òÖhüÿ³S“»¦qýÐ{ÕoD^=·0ÍôJv±÷ÇZ±Ÿ¨Y_H-®â6RÌe1¼d²r@9èOó¥Öìn5mÒ‰ 3¤ß>y*zqBåM½˜“k–p]´ ĘäXØŒ`;tÎOQÚœº•´÷†Õ …·²nØv^ QQÛi÷öZŒæ3löóÉç>üïF=@õUx´ëøu϶ йBVbOièqÔÑhŠìÚ$ää)˜çô©HPǘÃ" ²&J—žx÷©Øq*6Jb#ÆÓJÄöïHAÈÏéOÚ£œt DEp2)1¹r?ŸZLã­X`¡qíëP0=yüꀈ¶y#¯Ö'§z”ä’♌Žþ”!±Èö¦Æiäu<õõ¦ß\w Cr½39ã#"’1€i§$tëLžã4ÎBŽAÅ)ä`ñHOJhCYºsM'’I¥ïÞšO^H¦Àç§­4‘KÈäþÂO½1pTæ¹ûßøýaÐm­É Úx5…vÃíg>•pÜ™lW_¸¿_ëV£ûÍé…þ•MpAÛqçñ«ƒ†~qòéZ2ÆsŒÕô¿€Ø·trNÑÀ@N+æ(;GlúWá¹ÏÃí'œüÿ£®žäTwGUEVÆGÍ·W~U¬Eà›7qvs¹zƒúÖä¢ãÁ²IXm¡H œ tÇ­t,”†ô €1ÀéšòÜîw¨Øã§šÇìòÞÅ¥«IŒ¢ùƒ9%qÓâ¨Esi¥Nq$±2Û˜$B¤âN¨{08Èô®ý2üÕ ‰0ÇhûÛºwõ§ír˜šä¶ñÞië´X;8rÇåß—wþ=ø×=nÖSý†‹á+XXóó‰pOFÆßλ{‹h.Ô$ð£¨!°Ã##¡¦.dm!ÚŒ]Áò±<‘ïR¦’+nç9á×|Q¨"üÒ˺_1[!—yá‡f#é]ª‘YÛAróEoI'ßuP }OzµžíÞ¦R»¹QVAîM¦½qKߦ*JGZcv§·JŒõ¤2Úþý £ži÷_4ËéŠ@2­f÷6[ÏP}iÝ»ÓsúSÈöªD±Œ{ÓéïMažiçÐS$Pn¼S‡CéLèÃ=)ãàIÈû½©'8â³õ›Ùôí6[¨mÒàGË#>Üç¡­­,"id†3o )trI' ×Ò¢mfí`¹i,qåCç– ÇUÉ^¿Jf™¥ðÊZÜ4‹ö„ù‰ûÊÝ€Àü*Ì:tâÊ[K­E§ó#1©(ª@Ç_sWî‘«59ÞúÚÜ[¦Û›c2±ü¤Áõ=j MVîæê+V³Ž9C0¸Rç÷`ãœö¦[è—°]ÛNÚ—˜mâh€0•8÷ö§.‹r5 {Á¨fhà ÉæU'8<öíéE¢‘²X ÒHënÒd*õ>ƒÖ²õ-:K»½>HK£Ã0s r^¤c¾zV£Æe\¯ÁƦÅÜä-îǵR·Ðn--ZÁïÌšaʈZ1¸ü%½? —DÓotô0Ü_ ˆc"P˜Ú¾ç¹«“‹Fqº-júšé¶Fãaw,#WbpSŸ\¹µÓîneÓ˜›v@J’ªáº‘¸ÅYÔôÁ©ÚB…\I‰ÕƒPÝiW׺Q³ŸR¤#tžHQúÒ/Rï¡YüEtvƒJrÖÈ& ̼ÆsÏ׎•bMmüÛh­lÞw¸·7 p89úŠcè·æòv¼M×Vâ8Û€y7¹ªRÛËm¯èö^F²Eg"hòp6ç¿×µ;EìMä‹Û0^iñ«G"K+˜ž<©Só}8#ñ¢ÃR mmi ´òNáÊÆÀ&ÔVÆI=ºëK.ƒ$~DÖW†¸åy ®„…þðaÇ)÷zUü——¶÷Ñ­ô(ÑÈ^2c‘XçŒ}h÷Gï®ež=rÎú šåí&S¸^U—©Î=yr*øñ -i§Ê""KÔÞ‘³2IüiÒé÷­¨ÛÜÈ™£â ÂpŰIëêF=Q¶¶°6·‹›5hÕž#¶D8àŒõãµëµÃÞ[ú}êêQݬrF¯‘²A‚0qQ\êê—_b¶¶’æáSÌdBÑÛ$žõfØN"_´:<™ùÊ.à9¬»ë íõÕìîV&1lš9#Ü ‘Ü`Ô¤›)·bkmun ˆ[YíŠå #‚¹àþTбø‚Õ7ÇåyX!ÀfœÙ#¯¥fév³Þèz=Ý”ñ$ÖÁ›¡emÀ‚c­kh¶7v\Gs,2+Ìò¯–¤±$ç'Þœ’[›{ƒë¤&çɔى<³?Îí¹ÆsŒ÷¨®¼B-Íáû ËÅi I¤@\àä äõ¨°n>ÀÚgÚ#&o0ü§~ÍÛ¶uÇ^þ”ûúâÓU‰n opÀ˜ÏÈ0}…ˆ^FÄÒˆay¶³RûW©ÀÍfØkñß5 6—Gx¥¡’@»X’89gëWÞ;‡°1©í=¹ íÝŒ}qY6º-õ½¶KnE;Îo+ÇàjR]FÛe¶ðâEf™.æwTL"/çЩ©$ñ$S›iÞâCHçh²G>Ç•&©§\ÜÝÚÞÙN‘\ÛîÌRÈêÝAÇÐSu ýF {i$µxÉÝp °ßè^:~UK•î-VÄ‹«ÈÐ[ÊÖ2¬³³¡Ü2@äž1ÀïL—^„Ca2ÛNâõ±Eƒ‚pyöªöú^¯­´·°ºÂÇx*ß:cœœ~´Øt[Ø`Òâó­È±”È>F†Ç^¼“NÑ È‘Í#\E&pÁç¨éš{êpZ^jÓ. ÚÆ'Ï냂«œùªÍ¡ß9áómƒMz.÷mb6?AÍ>ãE»¸}TùÐ…½‰bFÊ`c>ýMˆ^E›mqsÅ´¶Éä…y ác'‚qÔqI§ø†û¸aH$ :3FùÏÊ?½»šˆè³Ë{Í$&´kgÇp#ò©t{ GN k=ä3ÛB›#ýÑGlœã¥&£`NEÛ»Õ·¸Kh¡içug©åÉ$ôøÖ§¥þ–¤fBI ²‚ÈCçŽaô­=CO»›P¶¿°ž8§ dJ›•ÐyÁê¥Ñlnôø.VêHdß3Ê­‘÷ŽNi&”t¾£ Ö-î.Yq!q„ ®Pá€ç?˜í\ìJšÙn®bc-Æ¢ð°pxˆg÷l=>QÇ®jý¾™«‹ûk©¥¶s’ó7Ì­Óõé±é:ÀKq²Ø²^½Ùq‚OË÷}ÏåV¬¶bw{¢üžgåØÃ¸C‚ÙX`€ýäçÛ=(_Ân¡…m.ØÍ+Gl[Hç8´Û-FÒúHBÛIfò´Ë#1Þ›ŽHÆ9ç¾jœ¶šÔš¥ÅÌ1Û—ÊÞC˜—<œmÆMM£qÝØØ¾Ôíôß$L’Ÿ=ö Ž2ÜþQ|Aeö›¦ƶîXÚ" 鑸õª^'i‘ôg‰TÊ·È]°G8§_èw—vZ‹ Ý^ˆ×fó±÷Î9?€¦£+ƒnú.ï쮵Èy’X™å c*ÛÊùðÅ=u»&’%S,ÑrFHUº[Ó5冠u5x-fcoäÍÎ@älqÒ£¾Ó5 µ{K¨"†R›æŽB3ûÈËü^ÔYÙ¾X``óíX¾#Ô¥Óà·’9 †|Íå€Ò’÷ÆM:ýïcÕôõµ¸[6Ù`dlç,[·`* Zø5Û}FÎØ]§`–… ÎAh0fÆON+M¤X¢2Hʪ£,ÌxW1ž¡¥ê‘ÝÚiÛáºF j² ¶ís“ÀÎ9À­­jÊ]KGº³‚I"a 鞸úPÒ¸&ì55>iÌk6X!“iFå}G¥LºŒ­k2“r›¢àáÇ'Ž=+ ‹›­~Ú «Qo2XÈCn,£n*µœZ”-¢$º\ê,7Ç!VRWh#ž•\ˆ\ÌڱΕe ¿º}­1yÄ3íì8êzœZ™õ+ L×P¬NÛÙ° z}}ª¶¤³.·§Ý¤RK) uQ’»€ù‡åƳe²¹ß}’B%ÔÒçËÀ%2}Î?ZVOV¶ˆèmo-o!-mbÍd*°à×=*ùQ<Ö:ï60€îô9ëTn®§·ŽíÖdŠ"3¾ž1Ž>µÎjïlÊëmo"µF16æÎTc‚9'ð«w·–†þþmáV]0°+¸äã¯~E%¹—íuYç½Ó¡hP-Ý©˜•8εÊtäñú×!à[ìò£L4æLÀrûä_Ëm-Ý”¿Úlnö2ÍÓ¹›ïúôÜz‰K¡Ö¶3Çò¨óš•ØÏÖ£RqÛµfX™ÁÇåQ÷èjVè1PºÉç)Ü»0Asž1ÍcGäIüè#KƒžHüèǧNüÓ¤ÛÁÀ9<ñR0ÏCÎ8Å0’4Σڌ0^Årz}i@ÀÈéëLqéBª–'ŒSŠŸÀÓJgúÐ"9*qQãŒp? ™¹õëL+š "aÔÔ{x럭X+šˆàtÍ!=zŒw¦0Æp@ž•.=¹¦Žy¦éøS dãNcàÿJŒ¡ ~”ÄEÆ9ã¾?:¯}Mw9ü©{qL cµNÊyë¥1†G  ì:c­`_ü·¾Ø®‘—žG5ÎjKºüjÒ‘5¡R%ÀVÆ>cüêÑn[à]†zo58!¤?îZÔ€·¦E}ð±ƒ|:Ó9!¦Û÷Îkç[8úšú#á,Šÿí@ê²Ê×y?ÔUÃâ" ÜQE©‘ä p3“HO'½)µ1cAÁ¯ ôAó’7b˜Ät>´áÁ$Òã¤1¹ù¥/µ0(VÏzS’àãŒRÄ“Í<;SâxœÓùühƒÏO¥sGAÍ sȦ0 jCÓ4ÂÙ eKûÄúSÐrh¸ûé×€iF0 d÷6ŽÃ@Á>§Ò¤“ É¡y\f­ÆWõ§Ž@=3M,3‚qN€)ˆPiýh u9Ç¥o§­bMª¥¤ÓÜ7{çkN»Ãxv)-®•­â”´ …m„Óži(]\9¬iÜjÓ}¤\Ev‘ÛÅ~-Z6Æp7ž‡'ô­¶½´c‘®¢ ã(ZA†¢¸û‰¼¸gsk6ȵq9CÝð2=ªÍÔ¶òjÒÉuk|öw–È4°ùyÊ:g9«pD©3¬vŒÂYØ1bxüê]BÎæØÜAs‡»nïéQM}í¡Œ…ìDnONÏS\¾’©›£Iö7Ž(%+x¾A~Ò˜c ëP¢š-ÊÇd·6ÛC­Äe°§xÁ>‚‘îícŠY^â0ƒæÃäúúW+zŒm5›¨`-jna–%T9%Jïeøý 2k»mFm}a…œÏd† aa¿ÉàŽ¹#ý™<öÜëEÕ·ÙÖ´Çå7Ýbãÿ¯I µÞ“?—¸ýÆ8çèk”•íãžÂí-®£ÒÚEBWË‘’TüŒÓ5ˆm¬c²kX$˜Ç-n!f#0àªã¯ÒŽMGÌvŒ?ñêÊPº»Õž;8á{kiW îCnÆNÞ;dV¨ÎÕíë\2N¢Ã][bÆ3¨,’y\±„íÜG¯CSÜrgsÕƒóù÷ œç+’¸N›GžkCäšhØ™S’£î þ¯áÙãŸB¶™mͼnˆËæ==½=¨q²¸)]ØÕÉ=ûÒIH¬’d#æ 2 q÷°é³x§S·Ôd"9 ‰ãFnyP;ÔWò8Òmmï·Kyýžä,£€sÃ3æp>œÕrl.s´‚-Ç qĤä„P¼þÉîÙ'{fŽYb;v4›FïB{W0Ëi©k;L|å’Ùƒ¸dŒmôîåTf‹N/ˆ£ ½Y¤Bœ¸mÅ ÌweÔÞB“Æ3ÞŸòºl'ŽÇW#xm_Uu¾žT·žÑÙÖ=ÊAÎà>SƒÓ§µ2â8­|Ki´It]â‹Ë“p’-£!Ô÷__Æ’€ÜŽÀ€0 ÇZŽîvµ°šácó<”.Wv2Éçéš©3F5ø2×^a¾P?sŒŽOû^•>©,qéWfW¦'RO¸À¨KT;èe[ë³ÝI¢´VÁ ÔL™Þùu 2v­Ù[ʉœ“ò)$úW§ÞD¶Þ *¡Œ8p[ùçñ®¯Th²®…ÈÄÁ˜¶ÞÞµsVv&-Ù².òöóOovÒF²Bé&Igc­h¸#¡öÅq¶òØ&‹£Áæ†ó lÄï˜ËíäžrEêd½µ[ßÜL6ª43ÊÀýíך2îuM/–EPíµw¤ö§Â²±Æ?:àwéóØ[4Û ¬Z¬žh*q1l;wPc¶``TÎãÒ”£Ê8Êåu »½NHìâ…í —ÉÝÈmØíç´dÞC@¹QÓ'3\4 øsZØsåj>jíä„Þ¿7®1ŸÖ¯Í6ïSÖü¹cò¦°R¥xÞp䟯Njœ R:È<É!¤_-Ê‚ÈvÓÜg½=²pkŒ»E·Ð4M^’g¶Ž8Ý@ÎåeÛ¨b?Z~£§ÙYG éÒ¸ f+6$+»(A'u8¹ùŽ»hç'éíKÎy#Ò¹©_XÝê/i4r"ÚƒËÀ\l'¹9Î+¯—>[É!Iõ2ŠNâ‘ód3M ¡ç“ÛŠä¼:ðÝ}’iuL_£9¸„ðìØ9SÏAÔqÚ£µ”¥¾}öùÞio R¸, ~'œÕrt9Ô]é¶·æ#u™åÈrFÓëÁ«C<.}ºVO‰/&°Ñžhyˆ²È½R2À1…gêÐiï5†¤íÍNþiD„òÙÎFxÏ4”[@ÚLÖÕu!¤Û$æ—tÉÇšÐ휑Æk“ÕSJ —Éuß@T!ʠܹäýzÔšµëŨ’—ͺ;¸j¾Å[•†pÙœãŠ|—Ñ šÆíìæÊÂâëa“ÊC!@pNJK ¯·éÖ÷…<¿>5“a9ÆFzÓub?°¯ß*PÛ¾nTÖ7 4Z=£^‹HÁ]Hãt½èŒnÊÌê@,€(# ÜÕkmöÚ:¸ûcÇ>hÀó0:ñXÚmÔ×,z¿Û¤–sÊðäm$víŒ~)(Ü|Ö4ÿ²¡:§ö‰i>ÐbŸ0ão¦:UÌàã&°£¸»‰4kt÷õÕfC¤2–ÊŽØÇåUí.u/*ÎîkíÁïšÝâØ¡Jîe¦sÀïUÊÅÌ©5㽫²9!\Çe##qíSO*ÚÂòÊq¢’!\Üw“YÛëR£þñõ!˜ü sß «z“ê–:]äÂé2­„œ¨È ’@Îhp1£¢’j—zïB‹#¸\•s%Žp>µo´xÂÿ8ÚC“øµOª]ÉÖv±H#’êS˜Fv¤ôõ8À¤ã®ƒOMIíoẸº‚0áí˜+†LrFxõâ¬Ç‚9q\ÊÏ>”ÚÄ›Ä÷wk#(Q–U8ã5µaöåšqxQ¢|£‘¿§9À¯J%j ô'žîÞÓæx¡ ™.OãGÚ"¼Ôò¶†ß¸c¹ô¬ÿ[Ç=¥’H¡Õï"R§¸'¥aleÑï4Y2M™“Ì'œÂ²~dø¥Мšg] ñÜBd…ÒT'†FÆžÀ¿ÊGÖ¨húxÉOéV¯náÓì'º”e"Bäõ-kd4î®Åk‹uº[V•ì7*gæ wÅ)Œ+—T‰`5‹+\§ˆìn/¼€¢ÚfQN>é æ¥³Õ/.ç¶f²"Úá î,c+’x9ö¦ãØ\Æéù‡RE3FÇáR|¸â™ü]* œœâ˜G=ÅJÊ3ŽßZ„Æx昌ñƒÇjL{S˜dðzv¤ãŽhç’)À$ïRŒu¤w~_ÔÓ ÓŽ( ‘Ž9õ§‘ŽqÖ‘9ê ö¦€n@à¨úÒ?w#('Á¨Xx'" gÖ¿pzNhSƒÞ˜ eÀÈïP°ã€9©Ø’úô„äô4Ä@}x¦‘“Ûó©™IãúŠ(#ŸçM|~8£f9æ‹ÑÐEGµO·žôݤgp>Ôî"¡Å4¡ÀéSí<ðsHWžsŸzwTŽOøW;~ _Ÿq]C¨«šÔ“mùµpz‘-Š nÌiý¿Ü R»øšnxsÏÈ­ndÇ@0Ãë_B|pÞ ‚ ]H§ß…?Ö¾|AÈÆzÿZ÷Ï‚òoðmÒã]û¯×÷qŸëW È–Ç£QE©™áS.¢no˜¤m‘+.õÜ™îïØšÑœÃæ&…ȧéYÝÀþ‚Vfh¿t SÇ»»ž´í xÎ*« C,ªz€£y#¯lb¼Æ´¹Þž¤:^£|¶¹ŒÇ$R•PŒØÓ²fM¡·€ àóúW3a37‚&û+î’4•HN£æ'óÇ5GQ†Ùãºû+[­ž “Ë$Æã´‘ÀÊúPâ›ìŽÉŽy¨h—³_i¢{“Í‘@qò±þ••y%·öfŠgVO‘—Ì¿(J†>™ÇåYl§ömŠ+]÷J$c¸,›ò¼’9Úr ¤¡t>k3»W!Üg<ãéR½óŠä4ÕŽ/\«ÌÒK*1GWÈ`6‚v#©®Ãßœ£f\]ÄíÖ—hÁ¤è3FüjF1ºSÞ§ûÓ^h Ÿï'Nôà=:SnÜúÓ—Ef÷6_„dqHž´ãõæšsÏ5H†1€aÍô G·Zs`¶Å\c“Uï.cµ€¼Ò"'³:ûÕŽp¬_Û\Ì-'²Ëqm/š ‘°$ÇéšqI±Kbýž¡m—µš)ÐpJ08>”^ßÛé±,×LcGqà–=…§jÍ;ưÙÇg{spÐÎgiEÉ=²zT:ÍäÒÛ\Y\ÒZÞ[1F«0##±ëWÉïXŽm.tºwÙîÚîIe¸¸(cS&ß‘3£wõ«Ê0¹ dv¬KKRšöò+U…«ª a˜€NI ƒØQq©^Úk[ÎЋsleƒ rX ç<‘Ç×4œ[iïµm8y·r£<yÏåRIsP †lBªX¿ ÇZÃyç‡Ä¶xÈÅ4é$`Š@ݹwq“ì*{+½OP‚$·O²ÜBÎÝÌ”çߥ>P¾¦äZ…”W6­¾)2Uˆ# J²ŽHl©7Ö/„ Åá;ä(FXãøn‚3Ð÷©’³±QÕ\‰¥ÏXK¨‘—pLòG®=)äÃhä‘“\V£s4~$YÌ-b˜[™Ž6¾éIéÚº7¼»̶Hðùeóãr„Û±ƒÏ#òªp±*IÜÓ%ƒ6å gå¥nN'µÎ GV¼þÅxä·íP4²)C‚@uÏz±k©jw“­íÃZý Åƒ„RT¶íÙÎGLRäh|ÈÝãÒ™Ôíí±$Öob³šo&Ð^ f\Ÿ™K(Èô?5NÚ•á׿°†Ú "6y ˜m¬ cÔRåathÈcŠ íTQ’NǽF— qrÛ’&_£ ¥S¾¼šY®lí IdŽÒ™h³€0O³ô;ÖµÒ´UYnaa¸¶ •Rzc‘O—Kƒjåë}6â?Í©;Db’@FA­%x̪ªé»¦SI¾›P‚F–4GŽw‹älƒ´ã5Ë‹U˜kðÅbe¹’í„2F˜ØØàîþiÚï^„ÞËCµo—Œc?•.ÞH#¯zùÕîôù"Žh£(¯ ,ÎNéK`O¡5aµ ÷Ö.,á‚Ý£…Ë4„oQSÊÊæEØïí¥»kXæFš1¹Ð0ÊŽ•;º«¨l œN3ô®sDžq£ÚÎöùÒA0ÉÚ¹bKœGëSPÝÙé7OiûEÈså·Ì7/Çšn‚–†ñéÓ'8¤£1Du%z¨ašÇÒ/5+«ëå¸X>Ííìc¸ŒœŽzÖ=õ²Yk—ZÌ1lk;¨„¥7DÈp=ÎhPÖÌ´:ýÈbnƒÖ¤ä`rsÞ¹€½ñ¦—vê¯3,YçåEàãýíÇ?JÙ´Ö®V†Ö[Tg숑B¤Är(pbæ5,>Ö Äƒ´ S°Üb+"£´m÷Xu‹oâ ±equ5œf%˜ÁII-'™·ÛœT«¨Ée·]<£=ÀŠ ÄªÈÌ 3ŒŒsŸZ9Xs#VIí­”$y§1q>ž´í  àô®][™!²i­àóâ¿‹É*ÿ+gðÈ©íµ[Ù,®ÚkhÚâÞëìÄBINqóàyúQË¥ÇusNêòÖÉbwdžÕØ®OX½þÒðéyc@ÐêÆÞ[nVÃ}5Öž2sŠN6@ØÌg†Ps‚¼ P±²rƒv¬»½Ràj ccRLùÒ4¬B¨Î$àÔVšä÷+¦³ZÇß,ŸÆIF\‘Ûhå{…ÖÆ´‘ÄÏæ2.G‘ÍJ1ƒÇÅs³jí6—÷VH¢ü@ÀÈp¤I´8ãÔt­{ëÑh Œ¼³È#‰7c-ÉäöÐâÂè’!jg”F"2(Ä»q»èÔæµ¶(£ìñGîÇZåĆÒÜÞZFä¤~d).C.Â>öojÕþо]f++{Hšßìé+fl2‚ØÏNqŽ•N/ “]MWEhðË¿=AïQm`ÔGp —@WøéD—*º„v¾Lĺó|ƒ¡>µ—âÏ…‘b°]]¤S0=S“Ç¥&ôij:;½øÇfŸg˜”Å…$uÛ‘‚~•~]>ÂWrövîÎbу¸™?…s×ÓOy5…³EϨ^KdÐdŸÀzÒ»ñ½½÷ÙŒnR4gšn‰ÌçЧД×SZDI!hd.…Yr§ðªï§Ùk+pGÁ÷©´‘WL’9``V2…c;HS÷O¥S·Ó,`¸ià´†7¼ê¸$žµ™¦]Ûév Änng"æãË^#27n ~~zÒ[‡·XçÜ’Üù|/Ë»q=‡¦j¹ZØWOrKk [yÜÅ &Ñ„ Ÿ—=vŽƒð¦fX¬QGöp72 ÜØ ×=zÖ0û-ô ¨jbF’íIµ…9x⠎ǹoz׃\Óæû.Çv$ùySÈå àóCO “CãÓ,<»ˆ…¼e.@2£d‡÷Á¦+O[v²À[¾ @O$zœæ™ Ûjë08X¢Iy$oãé·©Ï~)§_°h'˜™ q(}ÞYùÔ“‚¾£ƒÍ÷@гý—gá½pÃË’HôëEý…¶¡•p…‚ÊCU½A–šµ­ìòÅòcA!b¸R§8 þ ‡]²žs‰Ê\?’ÁJޤr(´ƒÝtK·1¼r:\æ+ÊÌŒsÉëÇZ³gc”E#2c<™¹8éÉ5Yµ‹%ŠÞ_7 2‡_“´œ}"¦mZÅ ¡®S0ºÄýðÇ ÷4{Ì=Ñš†›£åù’Ü(· …~nÇëIs¦Gq ©æI•$‘opzXukYµ9´øòd‹©#åÝÉÀúçS^^ÚXÅæ]MHNãÔûzÑï-É•-ôh#û /35–|­ÏÐŒuâ®\À—–²ÚÌ ŠT*ã=1õ8§ŽÝçEšLa>½>;Öv…)ž{›™®A72†~V!À!sÆzþ4õz‹M‡ÁáùbžÖGÔî&+&ÉNä8ùz{uëOÓôY´Û´ ¨Ü½¤yò­ØŒ.{g©°«2kzlVóNn¡hàûå8=€õ5n†òÝfŒ‡V7CøPå. ’¸øÌ2&׌ž3Çæ)xiýù¦0éPPŒŽ8"¢9ŒdÔ¼úýi‡“ëLDeØðOÍôíJŠk˜(aÇãë@63Å1ºôö8 z´g§#4ÄyôëšLàûw¥Þ7Ò9äúõÆh<ÃÈÂFcKœœö¡°ßáLD N{þ”ÓÁéR0ÏN”Æ0ç§·ZNs€? PDZôgÔš‘ÉõÀª¸±gŠ`ÁÔTŒ0N9ã4ÞAÍ&a}©8Ž?:vpqÆ($ý(¸Î A?áJàgš ÈÀÎhŒ¦0R´âÀñéL=°qLÛ?æµ|ÿh=8®•ñž+™Ö25úV”÷&[ǘòAûÍÅFí¶P3Ï–­Hü/8ÆæþTÁ–ï'¦ÃÓñ®„bÇFäàúÿ{ÇÁKx_RL` òè+ÁÓj;dð {‡ÀÙ hººgäJÀ{•çù ¸nD¶=VŠ(­LÏ"(6ctÅW–â$²¤lÀ°V8È“øUK}Yî5I­‚þ`ÝÐJúã>ÕOU#ûoH$ ³J ‘þÁ¯+—[3о—F²IÑ,‘:´o‚zzQ$1×krFÞ s>$t*ÒÚ9] 16ƒóÁÁÇ©ÅiÍ­˜î­c†ÖKƒsœ¥Y@ ǯÔQÊít>e³4žåË’5tÇÝ`üªmf«µ „+>à¥@½~µg­‰¾Ëu{jð¹µ’`áÁP )<ߎµ§poN•,ö [Ø] rN‡¦E%}G̬o%ªÝ5À‚%†Ó @­YþU‡¥øŠCRkUˆ†)"° í89½«pŠ–šz”š{Gf›ßüiËëA<‘R1Œ v¦qëM8 h‚~CJÊ4“ž°£9QÍg-Íc°Aäu¦Žþ”½AãÚš%ˆNGš_è)&”`Ž Q,vOtïK»Œâ‘pN;t§¯ iˆHç$äóR¨$œõíLÈ'"œ­Ç|ÙÆ8'Í<ÄgÒš§šx~”†8ö¥gê:DZ“A1š{y¡ÎÉ! 0 ñW”Ž¢ Ôµ4«/.[ ÎV>ƒÞš½ô%¥mJ©áû$P<Þh—ÏûFüÉæ{=:qŒb‰¼=isE,“–’Q4’‡LñÛNMvÀÁÍ: ŸA䃜sB@ÏJ|zÎ$Ë ^FÏ$†%PÝXuW˜­94;wÔ>Ø%ºŽVP’ùsÓv:šQŠ+ý^ÆßÊbÖÏö‡b‡h zdœ~U£qyolð¬Ó¬o+ì@Ç ¨ÿµl~QöÈrÅ”|ã’¿{ò¤œ·É4¨eÔãÔäócCPÃiSÔŠŠÓB·±ŽHàžèDÀ…Í%cÏ÷Gj·õ½Ý¿m*É⻇¨ëY0ê7šÍýÌ6R‹kgòžpžGB瀯4×0;¾ƒnš šTdÉ)T|Á?ýGš¾¶ž]‚[$ά±ˆÄƒ†3ÏzÂԾؑ&Ÿ5ô…®.AYØÉ€X’¸£ñ¯q«XZÛ$ò] …†UÁݸzŒu¡ÞÂV*Ë A.ˆt©..Z»+»çÅ,š2Ik!¼¼YaÊóM¦Eë†Àæ¬gM[ŵ{ØDÌ@X÷|ÄžœTñ]ÛÜxeGTfV ðëEä‡h²Œz Ãd‹wuºÌ‘î*q•ïÃñ^\ÜJ×wf(ß.ߦ1ŒƒÇ|zÕ¸ôß+P–ñn¦ß,K´Œ/CÓ¯'ó¨5ké–k}>Å‚ÝÜe‹•Ï”ƒ«úz~˜0Ó©¿mÎÒÑñÈ8Ý…er$ÐD6vÖÉ{q¶Þ_5X…ç9àñƒÉÍ  ªÚÛÀ·—-çóãÎÒAÉã§NO½]“S´ŽùlžtYʇN8'ó5*]Û™6yñݳhqÝqõ¥Í ´J¶ZcYj“­Ô Ìžg’@±ÆNzö¨£ÑH¸¾’{¹'†íH–E x°ÏAR\]N÷›bxá‚&lÒ‘ƒþÊêzU¸ï ‘SeÄo¼•\89#’áEØì¶3Î…ÿ+±tR;5)+ÀR0yü)°øì÷PÝ é™ã’GEÉÉã'·>‚´þßiûßô¨s<Áòý})¯ynVeŽæñŸ.ÏMÜñG4…ÊŒõÐc:]Å“ÜJË,Æ`àѹmÙ4ù´i.ìÚëPžYÒE’+€ª­„`}sš½¤*'ž4*‡*Ø>™=ûTù#$š9˜r£*]!¦‚çÔgw†a?˜UFXtã nŠæ1:ý¢à\? FáŽ1ŽAÀàÕmJæúÿU–ÓM½!Ó{‘æ‚HéÁϵtˆ×.ÊêsÅ6ä‚ɳü4$¶šÝï®<©nÇ ™ }=@«PiϽ=÷˜ÛÄùÇÍŽƒÇ¦ º¸y|Gew(!ˆÏ1a_qÂ)õç'ð­fžØOå4Ѭw,3\Pܬ$‘©é!î[Q†ê[[˜âÚÍuë‚5›¤içPðî”ëq%½Í¯!ÕA œ‚#Ð×Eå¬ä$7HÅwá$íÏ_§½fEy-׉ž+k½ÖP@dP¤œs× =ý(MÚÀÒ½ÊãÃŽ,¾ÄoÝÐ\}¤ðwnÁõäÖž­¦¶£mÅ9‚xdÅ*ŒíaÇNã’1SM=½’gcRØÝ#€2{dÔ¥»Æìná¹Ç­.in>U±‰ÿý̉¨ K{ÞÆ±±´ŒŽ};U¯ì»…Õ ¾KÀ¦8V F6È ç<ýÓ’}kE'¶!ÏRì \8É÷´Ë{Ëkµ-Á€r™eÁþFŸ4…ʆÉÏ{ây¢•h66OÞ>â±u×Ôæ¸’Î-9&¶*¬ŽñïWoBw ¸õ®¤æUÃXsJpr9”­¨Ú¹ÇÙÞ¾‰x_YӚؕòãž¾×®9<’zÓ®,4íTÜÝ&»)c¹HŽ1ü g¯^O©ãšëˆìyŸ5®•i××–àD»™ü Oõjd¸Ùúu¸»ŽþÒyc‰G“ó¨c(V'p' $Ö†¯e6£§xdH·H¥÷®àT‘Ž:àS,_Ršt–à@–íï(¾6'€Ny㯽i¶Ö ÈëÏJ–ÚwJÖ9ÿìi¥¾wšá^ÕçYÙBáä* Ý¶‚¹ª÷6Siú$ÖÅ•ïu+’ºäe¤<þsùWJã`X£'ç\þ+êSÅ{qe™bó–ErØ\ýGO¡ªR{’â–ˆ‡\ÓÞç‘%À¹Hí"æÇ@ ç…çqúS¯ü}qõ«íj¾}Öø£´uxâ¼ò2Aãéõ­b3€MmXS1¥Òd_ I¦‰¦Ìô_ ô⪠âpÂáãâD¬u!L‘ñÏ=O¹®‰Ç©íQ†cq³Ê“7y‡zôõÍJ›*2ôí>âÞkÉ.Š7Ú%Pp <ðöëU®,õ/ÞÂ8£³h4“ºÈQÜœŒsÚ·Êñòð=©01ÅÏqò˜VšL‘êw½¬- ä³¶YB®ã ç'>õ‡¨ý¢ÉåŠ?–FžP!ôã¹ÆqØ`{ç¯ìqÅcÜjíÓÁgi-Ԗ陊0xÎÑž§ØU)IìKŠBè–×–ÑN÷È‹4ó4„)Üyà#¥_u~´‰Ÿ+šÍîm‡€~^{ÓIÚ:1Nê âšJAŽhéÇjP½óT@õÆzÒ¯Þçô¦ªŽ´õîM0Æ8¥ù¦…Çzw=¨ëÛžHsÏåQ®0:óR ,ÞÔ€QŒñX¾%†úî‘É2™É8G8>ÄÒ¶Ê`œu¢HÄ‹†é×­8»;“%ucln&צšòÓΈ”1>ñ´^}wdóOðþ”mà–êò[©¦iv”9 §žµ¸±Ú§Öµ½ºÓsbQHäµÛë½Iç‚Ñž8-ÈGnf$äzãl“éU£Ñïâ·… ¦VÎñE‘óÌÙ ï·©÷5Ú•8 šF¸éÍR¨Ò°œw2´[,´Û{{…C ùˆVÏ'’I=Nr¡¦Ûêº<7VVÖQÎg’)Ú`n9ù‡^*ý¶°·W1¬ò˜Ìiq·(ìéÎqÁçâµcR“‚ÝOÖ•Ú½Á$ö9»Ëùo¾ÖЉV%‚º„ Œ´Œ=7cjlz<‘êPÚËh×iD%2íä¾W©%±ÇJ襓ìð´Î2±©vÇ·=êµ½üwzdZƒ.žgï8!O®?:jNÀâ®fÞÅ.—soö+.aÝ,¬7 ¬¬F 'ø@-Uî,u·û*Z¬‘ùMq#)<Ä’FÓ×¶ã×¥iÝëÖ–Ñ¡1ÌÅã•X‰dBq–«TrÍn%ö9]6ÃPŽm.ÜÙ„ŽÙ^WbãF8ËÉlnà{¯§¥êS_j×𕉭á#Ê‘äó•9à‘ŽÞµ­8Éá¾é6±lð1éÞ“÷E(ÛcŸ×¢šûSÒíRÖYbI<é ÇLžΧðøŸuõÌöÒ£\LHyÒT| ×ó5²4cå=Amu=ªÇmvm¤ÜÌc<ŒÔsiarës y&—WÕu·iÍ„B.w¹ù›øèü+*h/ßRk¹¬n¥’ v`Ä`î`xwé…3ë]†`4ûO)$iYœË$Õ™ŽI«E\õÆsš®{l.F÷8K[ë+«PöS2ZÂÓ ò™O«ðxí‘é]hÖÚ,Bke‚áÉg ÌI'œ{“ÇjÚp{ ßZ§{ouqlRÚso6àÂ@¡±íƒIϘj9écº¿mröÚ9$péf‹„jA“o¿&¶ô»XmmšAÂòaœHÛ›ŽÓØt«zU„ZuŠÛ«3±%ÝÛ«¹9$þ&›Òi÷IĬŒ>¸â”¥}:SZœ½„?Úú…äðÛ•·šè;Î@¤g€½É, 4ñc-®‰©j‹hVù¤wve¢_º¸æ¶ô)týÚÒTE‘#ÚBôÏ­jv#Jnvz…ÕÎ[OÑí¥Ó’ò(.igXn@ýî J㎹õç5ZÍ®o4Ä{M1á’ÆhÚDÚÒ\2à휟ÓÒ»%=8Æ:Sv…#c—´aÈrsii.‘moœñËu"Äï8ËGå‰Ç@zûäÕV´¬¥Œi’ªß],h˜äDž¿ÝOv'µw#  *+*ãµ?hÃٜ͎‘î·©]][‘c†6^ /%ýù8ÕkÄosöK{h!šHç˜$þHù¶rH™àgÐÖî0q·Œõ¤tÜAü¾µ<úÜ|ºXåü+кÔ{n¦\ a~UU€sžùª:×ÛõM©-…ɉ®¼¡Þª¤óè3¼}xï]¸/ûÐîå¾´ùýîk —KtZUÞ¡¬\µÍ‘Š!p w#Zcb ÷ }*µ¼’Á%ÛØLL ,³ùˆwÜNãhP;ªŽ=+ºÁÊñ׃BŒ mï‘OÚ!È&k 7MµKgšI~[·N†7l'²–ãè*×…âºD¿yí|‘$ć+´±`î€?éUrNG4Ó¹c ('Ò“›jÃQ³¹Î;oËÅœ“Ä!U‹)˜ÕNK±=2xëXöÑÊèoEú[¿œ^" Ò¿ëµG•ÜœŒ¹  v9)ØN ”Úd’:ÙÉ7Ø­J™<²D“8çhÇ d ÍOý“·Z%‚[ Q™nn>P1‚qÌO>•Ù£ço^ƹäŽiûF.C’±Ñ­îõ™¢žÞæ(¬äÝí‰QpF äå²xôæ·dÔLZÌ:y€‘,eÄ¡ÇìW¯ãZ<ñŽ*¼v0Gw%Ú«<€|r@÷¤å}Æ£mŒ½gP¸K…´‚)°aiãéžßÏÒ±mâØš}Ô ²\܉|ÑómQ½° péõ®Ìçk|§'¥déÚ}ïÛþ£"I:!Š ‹€œ’}ÎåN2I Qw04›O¶EY-Þò宜ì+åFƒ9Ø`sšÕðš—·¼»û+Æ·îFoâQÀÀ<ôÉêI®‡$Ži@ ˜ÁÔ9ÝX,îqöª÷CQFwHáqo.F3€dluê@ÄÖÆ©}ý™á˜¤µeÞ"‰LƒýHl ‘ì?ZÜxï=:Ò4BUÚë‘Ü0ÍËM•êrM2>“§½Ä÷ pæêO¼>Pòyäö=ÍWŒÎº~¥¬ý¦á£†å ó S“s³žqí]¹Q•m¹ cð¤TSO,þî8£Ú ’æF…j!†K¯·¡(6^3–$œóÏOJçÞþäØy‰}87÷lbÁËy)ÇËéœvõ®¯P³–òÍ­â¸{`Ü1E•Á ôúÔÐYÛÁo1D¢8PG#8Æ)©%«±Çìê7p–Sö©ð +»dj¤íOV8ëïíS9Ô!{]>k÷Šââ/:_:_¸wmTBOÞçžvõ©oíu/d´»T³e%‘@¨1ŽAÁÏ\Ž•ÐÛG$–V’ßA»T°3µˆçµS••ÉI²åþÈÐÞyå3=´<»urSõ5Ï/Û-"µÒàx£¹–?>êiqÌ’sÎxÇ@:V¾¯gw¨¼vbÝ>ÈÒ#É/™ÉU9+|Uùlmd¹[¹-ãk”RB>eÆ¥4‘M6Ì;™nmõ8EÞ¢ÖÈÎ‚3 cÔg'#<úÔj7VÑK™/^IUæÚ»"-…>¹‰ÅoßXÚ^,myl“ŽäÊäƒíM›L±¸¹‚æ{uimÉòØö¦¦º‹•ô1<ýGûJîÒ+ÄŽÞÒÙGHFØØ àRú ±¢\jz„âöâHÒÙÓ+ ‘œéÈãÔ÷é[ÚÛÃçì‰WÏ%äã;Ž1ÏáQØYZØBa´!BwQŽi9+Îæ±­Î¦ê;6E‘â7%nмðFM6»Y!Ótµìö^\rJØ!Ï Ýyè{w=kJé—rðe¦;Ç“œþ=jx´›X5/c€ YBç°è8AŠ|Ѷ„ÚW4—p?JB i£%O88ê:#µ@=Ž:æ³4Ü)¤ŽI©åÚzz‡¹æ“síOôýi |§~´Àfî1K°yÇzFï‘õ¦ÁGÖèsº˜Ì2““íéOaƒÈ¦’ÿ®˜ }ÅH^Ž(î)݇¥8 UÝÅ!cópO51ëSN:ÔGc­7-Žizäñ@”ƒÐqÖ˜ =qÏ4ÌžNM9€<ä}i‡Ûžø   È4ÜÄóïNà€8ü)¤ä/ON”ÀFÈéøÓzŒsøÓ¸Æ8¦œdúÐ! F2ix98÷ šioÈÓ@5Áâ¹ýlƒ<8÷­òÃ8â¹íyÏÚ-ý2zVÜ™ìg°èMÆŸhõÖþ×ô§dï‹ÓwøVÆLd+—Îz×®üe–²„üÍd`ÍŸæ+Écù\é^©ðZ@Ò`‘ÀŽ'ÎãÇ«ŸAUu> ô‡ÍˆKåHUŽG¯çN-'©2ÛCœ–îçK²k;;ÝÉo‘”–Gû‘Ž:w$óÍ6ÿ^Ôc¹¿x&]ŠE¼9P#G'æb{‘ý t¥ÚK|·’Û§Ú@v}:~>ô&›d±¢ XvÇ!‘Ppǿִçb9deY^]ßêñÀ·ÇœI#³. ÖàFHÇ#5sÄ,ïaŒNË-ì«W¨SËûäµmekeçx"ç-°c5—göOÄÞÏi=´6°²"Ì0LŒy#ð}ên›¿`Õ+²žêâtkFH4è F‘œ ê¹_¨ù¾;æ­èwSÞéËs<™‘Øå6òÈ8+ï‚5*éÚh¾ÉŽs™T oç?Τ¶·‚Ä Š4È(m1¤ÑÌk:´šŒoˆm§—ìè@Aù'¢ð@õ«öW3ßÝ*Eoiöϳ/üAF29ìp:zÕåÐô´hÙláÚŒe^úÖeÔ nn,t» æõúHû‰¸üÙ$ñޏW‹VB³Z±4éÖÚÙõ)çiæ¾fhÒB«¹áI8çÓž™¨_Õ_H’ë}¼o=ȆɊ3¹ˆÏׯaï] Ò,·Z«[£ý‘6B[ø1ýG‡¦Ã¼kh!fd<ÔûŸ­Ñê²1'×nï,/ŒR }ò%µ¾W 2Hg>þ›jý¬÷Qj°éæñZmüÂÍL£%HÝž6ü¿Z·ƒ¦EH¶ŠR L¨ 'çõ9ê~´E£ÙÛ ¹V0$¼Ýæ6I$£Ûð¤åJ]MeKˆXeI#oºÈr )á±ÏZƒM²ƒN²ŠÒÝvà =*ÀÀ›“’JÍ `rHô’0X÷O¥æ#=9Í5º`ò7`PóŽÔ¤@Ç‘X¹*I yǘ½øúPAÉ'œƒŠü¹üéÑ.åf¿4Óå{õé@©Ï¿­;#šn™œöÆßëNeù†?šÝÐõ§tÎ(ÀŽ8âŒdë@¿7nOiç-Mß©ü)y œ÷Çàx¦Ï׿¥9yb)O¡íÜRyÍ*ž£“Å"±äg­1C†bXOCØzSà׿µn äLR. 9À¥êG9ÍJ®¡y¾)ŽCt€ç¦É P!ÜÅ)ãæŸJjsÎriYy#?Zãs´ý)Ì03M¯CÁéŠqsëš4œŒð{Sr~QÓ#ò§)Ç$óéHbc¦iK Ø•& Sš2Q²súSå xéô8¥r¹Å3’ôIïÖ Ó#=¹˜Ç§4É©Ïn(%‡9'µ©3ÉçúRã-‘×ÐH Ï4c<àZfFG=}©ý½³ëMi¾´¤ä{ý)Kç¯lS\°ÀëHpÆ}sLÎ000=©§§´»»c‘ß4›Ž@ jN@äⓌŠ7s’\qÚš\ÃÓ4 ã†qŸOjR7sŸL O3 Ê@9ëHåÈLCJœwÍ ’¼1'¿4æl¨ùF}5ŽÝ¤(úž´€pF 1ÉþT òˆ4¿Î€ÌJàŠo½;øxæ˜x¶=©€ÜûÐsÿÖ °Áù¦°el ×4FSéÍ4dÏéOÏ~)¥}1LCrr2N)ŒI$wÝ©à àŸ¡¦œ†ä b=89¤;½ñO<~4Æ#o$rx sŒ1éLdàþU.=þ”ÓÔ(.€uëÚŒzóR²`߯"˜W=¿J`FÙëšaçu©O\mäçµ0aÀ#œr(,œÑòõçó§í†;ô¤#ž•0#ä±ÏAÀ¦¶1Ö¤$ÇÚ˜yéÈúP"2zzTl8©Ž4„’sT"#èsšçµñ¶h?ÞþµÑ¹ï`Ínr~÷õ¤>"e±FOºyî?•;pÌ#Ž[ ¨.lRg‚qŠŽò!rN?Ê·±õ-–_½/à¼Ùñ…ì{zعÝôxÿƼ̘zàW£|}ž5™=Œ€ÿßQŸéN;¡KcÞqEVæ’äí55çŠ~ÞƒÒ›´àó^Aé <9ÈÍ5°G<úÓÈãŽqLÛòóÏãHb1‡¯¦)HÏ=é¡@`{Ó½GCH¤(¤ØHµ"£ÚX“ëRƒš@5”/©¤z {6áŠnÓÉí@· M3Œz•ŽR¢ cŠÊwÜB8î*9AÅO}þ£ ÿªÑ}Àk6k‰×šzçÓ©ëžxÍ4K€.i8õ¦«?˜C †ÏZ¢Xñž;SÀùsIŸÊœZ8 ö¥g­4d €y©È rsš—n8ÅF™ÜjS“ƒšÔUëŠxèj1–jQ æ€0Üpp)¸‘Ðv÷§É·zjŸï (ƒšVSŽœŸZAò€¡@”ç~™^0  Î)Ì8ã­FÅ·‘Ú…çc æŽÎAæÀ댚wìiùÊ‚@ã½KLàã'Ú›&ÝÄdfšq¸qøÒ:aKc ŠÔRN1š gҸǥ<Ži `à…(6N9®wSñDZwˆl´¿$±™”<¥°6@üxÐîFÕÙ^ÆÒ¦O´¬£ÐgéH\„ÈMd>¾âúîÓo&X'™ †Rp äãÍJMì ØØ.p0=)‡‹óÈÁ¬üVn¬¥º³Ò¯'†=À°Ú98Æs[0],ö°Ü#Ì@á~£8¦âÖञţ"‘·v‘úÖ>'3j‡NM.ïíJ7:±@xç9÷ºeX†÷ÀP2Xž‚‡·ÓØs/ËÏn”adPr=ë ~ïW¦Ò´¿6Ù`šy‚#©Õ­#Tžþk«{‹#m-±PÊ_vwxö¦âÖâRF¾»ZÅÖüE†Ð‰í.%0Ud ´±í’zÖ¥¤òMÉ%»Àç Æì _ÄqJÎ×ÕìK·9>ô`p9õ¤™™QÈBÄ);ò}…aÚx•¯¥ž(4»¶{vÙ2–@TóêÞÔ’o`æKswoÊH8¦`.}{œU]?P›ORlj6IH89«!¹<`PÕ†Çm,çÒ…Œb‘ðÀŽzòa_xŽM?Y‹Nm:gyÎ a"áÇôüi¤Û²inoþt¸ýk+M×b¾Ô'±x&·º€x¥§¨ œŠv½¬¶‹d.Í£ÜC«·8ƒÖŽW{2ÜÓDœ(ÀëÅ#€r{w¬SâO²ê¶šŒ¶¦èâ‡B} 5¶r3ßÖ†šÜLhìÅ2>eÁôÍd?‰ ‹U[Y^}©²QB. òìcеk«Gsy-¤–×6òƪÇÎP2 ‚sÈ£•¤É—”1ÞTc½fkõ¾„¢K˜.ž3ÉxbÜ«Î9=Z»g¡e ݹýÔ¨IàãÞ•®W±?{}i§-è=+Nñ=®³{-½µÓ$-µç*õÎJ·ªëvº2«Ý¤þQ™"ʽ¹#§Zn-; ê×4zGOþ½PÒõHuh<è#¸X¸*ÒÄT8=ÆzІï_³³¿K’àM/'û§½®ö2±¤Q 9íGæüÜõÍ?¶sƒï@ $àg9¤'äñN Ÿ½Â›Œ?µ11§88þtÜ*C‚ǧ4Öú~”Ä@äç#ñç¥ðrr:õ§ócŽ(*ØïÇJˆ°LnèN&ìƒþ5!qL#O˜ $ƒÓ¯JcdçžO½=êFi1žÄàúPuïÎ=i­ÇLtîi[åçŸÊ›@äÐväv¦•ç·çROÓXdsLD{xéëQ•ãŒ}*br¾þôÂ9Í4vSÖ°5åÄÖÃÕtg¨ëô¬}}lxáJÒ›÷‰’ПQµÏÒˆA'×4“Œùƒ<´è²#O@@ý+£¡R\â\A]ÿÂ|w‡¶”7Ó ˜çìAý?Æ»…‡Ä ŽP}ÿvœwB‘ôUQ[˜žSŠa'šxÝæ@)„Øä˜Ó€0ðÝJ~^™¦`ŒñÅ!ÜBA#ž5ŽTàãÞžÝ{w¨ÎyÂtàÒc>cœñN¢0K9#ާ®Oj–qŠ#Ž‚”óéMÀlgð¦X=ª&É=jgl¨õ¨Üc€LϾÿvô5V."®_mëýjœcä&¡šÇbtÔ´ýKSÓ/ïcµã7M:ÜyØm±ü£ öO~õÜh·¿ÚšEà“ï gB?<Õ{/-ž”Úzj7¦&î]r½rËÐæ¤Ñ4(4({‹‡‰Ží“0!O¶­g$Õ»Æ-3;ÆHÍ¥ØÊŒ/¢! j•´›ühë þ—²]±°9éß8÷õ®‹TÑmõ…‰n%œ$lV7Ú7ÿZ‡Pðí¦¡ ºÜÉpÒÀKGp²m½@¥$¬ÁÅ·ti²d/ÍÀ9Æ)Ar€¤ãÛXM´ šYvq¾VË©¤¼·’ê±ÜËnIûñ$ûr gÔÐæ¾3ÉáÇ%†>ÐùöÓ˜Ùƒ`ŽNEfhž] |¸/ndƒ“åI´‚Çä ö­f ÁÈéÇòª›NM¢`­3•´þUöp ²dÿ»ZÞ#ŽgðΠ!??ÃŽã¿éUãð܃U}Pj—?kxÂòÐ zcÐ6D{@'œ÷ÛWLI;4sž •%𥟔Wå,ø·Ü…¡ûTÈ… ª00qÎÜþF³-¼7…ÌÒi—sÙ¬§s¡^<ú€Ãнc¦¥ƒM(’I§˜ƒ,²³ã§N°¥+6Ún’G?ãÅdÓŸ•oS#õ®­xÝŸ®}+'\ðø×„QÍ{<0ÆwˆâUå¹ä’)×:,—‘®uK¹"ŒPààásƒÞ›iÅ ÕI³_aÃsÉý+ÑEðÖ¼H,Ì-'Ú̹88Æ;WZáÞ'XßËv]ªÀgo¾‹aáÙ,..® Õ.÷'tÌè¸óÎ1ÇSJ-$ÂIÝbÊ4ës0Ù;D­>F }£9÷ãô«6$ôíUôí7ì"w{‰.&÷¼²c'°=*ØÎGOj—¸ÖÃv79=z×#â,Çã/J0Ùf ¤àgŒ þ5×à¶zÖ%ÿ‡SÔ ¼›Q•^Ù‹@©€‡ƒéÏNõPi;±I6´OÑ.S_ºÖï^4©å¤Pä„^:“Œž=)¾5Cÿ­ÏB‘ŽFŒVíºÉ ²Íæ¸êåBçðG[Ѷ¬þÌ÷“à }ô‹nFrqÚš—¼›´²0'&ûÅ:}¦­²£UšÐ/"gã‚ǧN•Ø:œú“Ö²o<5£¦%ÝÔò¼L 3«$x`0zzV••´–¶ë·2ܰ[xg é§þ=“>Õ“â_0xŸÃ»]ÃÈTÆxësF°¹Ó4øí'¸Že‰BÆËC~NJ¡ªhºŽ«kz5âû+—V ã=wsÏOj\íƒMÆÅ‹I..ï.>Ùe@‰•÷|Œ99ú¯Oj£ãt-á·'ýáWÓOÔ_Q†âîþ6‚ H†Šlc-’sÆx¦xƒLºÕôæ°·¸†¥‘ 7ŒjI¥$Áß•œåË®»«éº\è,ź¥Â³}éxè¸àtý+¹Qƒž¨®vÿÃSßéö±Ëx©yjWȹ†2¤Á9éSOo¯ù6*š„"E¸{¬x¦9ÿ&©ÚV³º½Ñ´ä–Ûµv‘ÉÍ“Œc¥J“×57qÈíŠÈ´ –'Ž1Ç4À¤v =©ÌÁ#ÞCmñɤë†ãߊ4‘‘ÓÚõ, ñÍ<“óoZMûP‚8úó@†t9íôÅ.þÑž¹üh<jfëéO%ˆ…7pnA Ð-ŒûÓ/±¦Œ‘К€zà1èF(T’rF8 g°£éF{w Ò8éŠCõ4­òä’?*@@>¹ CzTg®qSqL#<÷¦"5Q´ziàoz“v'ð¦ì1Ž¢€Ž2¿˜x=à}©Üã§#Ú›Œ“LL@ ÏëNÈÎ=»š :ãß7 Í ÎàH‚G4Ö8=9î3ScПʢaósÚ˜ #åàΑ@9É~´òÏâ*2}åÚ€"8qi3Œà ôëÖ•ºœ‚?­3qÇÿZ˜9ôÏ\f™œ`Ô˜9Èç>ÜÓŽ€Ð[øˆÅ7ÜcéJAǿ҂HõúS¤€N=éÞø ƒœñÏZaÀx¦!ŒÂ׈cnÀçæ­·9\šÄ×±åBÄÿ¥\>"e±…sÁ=¸QRF…!\œå³D„1~:JOîA÷®ž†=G™[Šì~ÉDÑÎp7L¿î$®4ðí]gæ ãݘ€<öúÆÀ~¦šÜÌú[4QEn`ya1ɦ0sÍ('#œŽiœƒ€sÏ¥xç¨ À8Áõ¦¶IäSÛ†ÎqPù…·nŠ@.9¥éH_ Œñš@Ðsžô plƒIÉ=p} "1.Aç4óœç°¤YqùÓGš{ßZaŽi„p*'æ¬×åühJóþ=ÚªG(‘Ïnï›yjœ_pŒcÞ¦FØz·hëSFFÚ‰WŠ–<¤’ ¥<Qg0px©TsŽÕD0=3Šo¿Z“šL~TÅ`EH§ €GZ‘GÍži60Z‘}O¢ó=*@@Ô€”àŒRr)2G®=)ûr}èÂcåÔc8"˜Ò.ý€á€¥'šàñFI'šÌÖ5uÑíMÄ–·ÇÎ| ÁêrG•Œ–I{ý©Fó‚©zà6j”WD¹$ìΫw=Ojnx=ÅTŠö ëh.­¥Ã(}}jÂcÏ8ìjv+AùÊž1õ ŽAÏNõ}¨ÞA¯iÖæK€Í(e%•W©ÎqÜÇZÙ#5a\SÏ ö ¼îÈô¦“×'Mcx{P¹¼°–îî_27Ö.cñëƒNÏp¾¶78É“MF*Èàûz1ïÜÒ äzâšQ]pà0Îpy昲,ŒBœóƒLŽîn¦¶YCODW=3E€³ŽxÒ“)Ÿ}-ä·––v„Ǹù³ÌT¨ÝîOõ­R«–?SE„˜¸\c‘L'‚3YO{tÞ G§x÷FÊÎ~Ò‰e31 ~êð9'úP•Ås\œöƒ<ž™÷¦[<­m\F‘ÌW.¨Û”cÞžAc‘@Ä`=sŽ)1ÆHëúSMÄ>Ù¼Ôìßåîù¶ôÎ=3OO_j@#*玸¥ >\·^ôCtê+6Æþêã\¿³eˆÛ[*€êíÍÎßÀ:i\.id(=ûšyásÒc8Í(l§ÿ^#v3øÒg…éÎ`/ˆäkû‹DÒ.Úkt"†îžŸÅßÒµ4íFKM†îÜŸ*Q‘¸`ŽqƒúÕ8µ«i–óÈóüéLçŒ÷¦»²¦à…ˆ=3Jî7HÊ™À9l š‘‰ÁÁ'œÓ²¸ÛÔÕg½·Šú6$M:³ ÁÁÛמ•`óõÍ0 ƒÏ~hž4ƒ8=)’ªÌ äFNNô…aù_›œûÒ É oγtkéµM.+¹íÖ&vª¾ì®x9ÀëWÑŠç¯Í6¬Åº¸8Ùß8àÓ#ëÖ²î|@É}¨Z‹7²@&f¸lô_lŒõ«ÚuÚê|kF²¢¸F€Fi¸´$Ñ6GMü繦’¹Àÿ ­&£k©ô™PȨ~QÜúU¶1Èöâ–ð9Ï4zäÆpE‘Ôr=*0 ï±ç8úP;p:JBä+zuëN!Tc)¡'9ï@ÅË’xúRdm?áO*v¿1ÂTŒÏZ!$¹íéHîe99ÇJF` ¾†¢ŽXÝ™ARÀòdLÓÉ%Ç ø pcžø¦á{sJvíÏé@ãq$Žhge €y4ÅEv€ cNíÐq@œç?&Nzþ´Âz ö§ã#'ŒP·=yÇò¦ôïõ§‚9ãšnz‚0hœý½iœ`ñùšq=yúSNzŸJ äòGJiqüéÄÃ9çÚœƒvâ d‘ÿëÔoÁÈéõ©ˆ*y úS¯øÐ;óN´½€ÇëFѸ‘ÏCJØ Æyö¦!‡‘L8Ý‘Œô9§Çô¦ƒœÛ Øàp8ìi½zõÍ9²€*NqÁúS91·°÷ÍBWI?­Lÿ2ûj‰e#úP=üi|tôÍ&ý²*²žsƒŠo͸ƒÓéL@ciýM3ŽÝýéøàsô¨ñŽƒŽ´ÀLŒ€Rv çžõ'ÔþH@íÆ+[;’1Ï_é['¯zÆÖ~ì|ÿ\7&[2ó‘ד'ìã=sþ4²œ³ûŠa? _ö¿Æº“$a’ç½uaŒôbOíñ<ç\¤¯ó2/'5Óx4˜|S¢3I¾€~n£úÑØ¨(¢Šè0<š0c…7°&œIëŽiÛrмO5ãÜõeÈëÍDã€1Þ§Àç=ª5ÚÙëøŠ@E"‚êsøSÀÚ3AC¼ ü¿J\ã9¤1‰†rz朂sšplÆh\£µ7Â2qŠ~Þ½"ŒëHçÒ¢s‘ŠžH¦ºME+¯õôªh6¨úUÛŽa|úU5û˜è;T3Hì*’㊞295=ªHÁ ãSCd‹†ç¸©ãóQ©çŽ´üô¦C$?wñ¦6O9éC€¥'šKg=y4ÑÃqO_½ì)ˆc=²iËÛÀwwöõû½èLày§çN÷¨Ôæžëæ.NôpUó²y™óò03Š“ ž§¥@çœÐ3ñýÜñè‹kí2,LÉ ž‚µçž×@Ð9™8  ÿ÷ɨõo Yj×h¸šäŒ$rár:zÔ°xoO†tša=܈vne2lúÅiÍTˆ³»g/§¤öÚN›¤ÊënL2]ϾO/XásÉk­Ñ¬EŽolnãjçÌlääç¿nio´;Q½†îîßÍ–!…É8ëžGCÍ_Ù» ç”§pŒlrv¤÷VÖfo3ÉÚ^»AÿÙ˜øTO}%߉4ë[‹ùK!ógŠ,ùeó…E¨Ÿcøt§DÓ „¶cŒA3ï‘Fãœä‘Îr*Xt›+k…º‚Ú8戃*ôQØSçarÈÏñ5íÅ®…#[ô‰˜Bœã–;Gó®v)eÒâš{K’Ð[F¶‘·˜|£30L/sß5ÛÜØÃ{ †êš,ƒµÆEE&“a>œlÒ#jqû ¸^>”£$•¬-»œ¼4µ_Gz—wR¥ª—rÈrÌOÀÉ8ÀÅGiuë7—gQ™þÉlv4‡?1wÛÑF{×Nú›5´ÒYÄmà}ÑÇ·åS늒M"ÂX.`kH¼«“™•Wnó×’*¹Ðr3‰ÑîßéÖ,™2½ä¤¹bY¸Uúr{piöQÅgwªÛÞOyäÄòHÅT”gœO|f»(tm:HícI!à0vzjIt 2}94Æµìƒ #^}hö‘bähÎðäæÝÝ}·íÜ#(feVQÎ êy牮¶\é¶÷Gýf‘¤P$*¹T> “Ó¾+¡·´†Î··b‰ÕE«jZ]®«j-îв¹J’¥[ÔÐÔ).k²­¥ŒР±Ð`I§ŠÕA=Â:CžªAêà}*_Ç©YO4SOigs'É«GÆÓœdŒÂ´!ð~ž—h÷æ÷0ûLÅÀÇN:è .8ôU9öbQî2Þíí£‚5!#P«“žÅqÚ¦¬ú…¥Ø7¾LotlàŽ7 s†v=q×Ú»\ƒÔ½k* èð—ago—Î;¹ù¹çõ50’NìrM茉|ÍE¥±³¾VP¶ˆ¬…¶ÐIrxàsަ¬ÛºÝxÎD{‰ž8m’{}’„r­'ùV´:&§. –ê.¥ûÒ{cŽÂ—NÑ´ý)ä6vÉ?Þ#©öÉíÏJnhXjú‚é:]ÅüªD ?ˆöËGv³kö¿o¾óšÖq*gäYEUÝ¿.k®¼²·Ô-d·ºÍ‚Q†R ·ÐôËfÝ œHÆ/'!yÙÏ­(Ê)j9&Ì=&MCVÔí¯ç¾ C?Ùc”œ£ (eéÜžsÒ›¥K¥ö²|Ù$ººd‚3!ÄŸ0Dý:úf¬_ŦxgJžÓO„ÇuvŒ°"f‘úž}EiÅ¢YÉ£Yé·yÑ©ò丼{æ©É|‰³0VöK¤GUg6Ð4Ž£>QƒŒ(ÇÊ£<“éYz~«us-¤^Î^öïÏ‘·‘¶% *ÛqÇÖ»–Ò4ân ÚÆq•+(Á+Œ‘ÐcÒ£µðö™mso,6ª²ÛÇåÄÀŸ”wÀõäóÖŽx‡+9Í8-î»®^Çs)º„´(í×±è=«cÂMçø~ÖéÞg–eÌžk–ù‡Êqž€‘ŸÆ¬Ÿ éKbÖ?dKIæ°Ür_×9Í^·²†ÎÞ-£XáˆaQGJRšjÈqŽ·25TÃxÖ±ÊaH`7ʸ݌áUsÜœþU§]ÜÁc¼›«¢÷Ws;(02xÎGN0k¥»Ð´ëÛ缚ÜI3Åä±$ão=ºg“Í2ãÃzUÃÛy–ŠVØb5Ž#¿ãB”R°8³úˆ­ô‹)/ç1ÝJË,ÑLwe+†< •uŠ6€¼“ŒzÖ{h–Oª ötã¡Üp2=jÝź]BðÊ_c® F*1ÍLšvV8Ý"ýZÿ[¹·ž;e¸¸òZ`„¶Õù{t=jôúŒZM¤ÖVl°[X ¥8,òc!TýÉ÷­/ú~#Ib%MÀ‚¦VeúàœgÞ£“ÂúTÆäÉv¹2Bdn¹Žxè:U¹Å¿"yZF ·º¬=¼wžmíÜÙ€ <å—Ð(èqéNÔ-îßSÒ´«ÝMå5®EUNù01×'…té¥YÇ}Ò°Äb‹_@:S‘huíB„Ýyb5br{ÆŽt>V`ÿl^[]êSÊæk;0°GPL’’Ëw=3Ó“íRïÖ­ìõké.2éîáe_ÝÈ$ñž9ŸSWÂzzØ\[y—'í Zc/ﻃۚ’_X½¤v% vbVbBFqï‘G4Eièñ•Ó"v¹–ãÍhyH݆ä=3XZ¾¥w{o_ª.àcÀÏ ³g Ëk¬O¨hÌí1Ĩȸ`¦F3úSO„ìÞþ[¦¸¸h¥K%©Ý3ú‘Þ©Ê,•Gg¬ÞG§Áæ7½hLóI'Ê¡'i`;ãÕAµýV"ÒêO%¤º¸P€'D$| g9#ž}kZïÃÞϨK-äûnÔ-@00¿ΆðÕº‹s®¦Ù_f@b]†7œ÷)@-#ï[Ô¥ÐõIHÁiޱDêO <àœíV­u¨ô—v'ºœÚÐÀHÚp9$œó“Ÿz˜x>Ýl,íÔìHd~pd8ýoÄ‚(„k…U På(¾§+â{ý×ÂÞ8£Ž¡7!fÜIÀ`;ž83V`Õî<˹.€ò"ØŠ±¯Ìe?À9äôüMI†o¯uæ8šK‡Ì|<§…n½tøZH ·59‹Ç9äeq ôRsÍ6à+Hu¶§¨Ï«Ë °BÁùeÜ1û©ž™Ç5VßUX }F ]ÝØ™3¼¯^¥[ÿ„v[kMDY]7Ú®‹i <ã=:œµ*x~o/OCô„¡á²= 4‚N8æ¤n8'ô¦Ÿs†ïLöÓ ±É#õ©vž§_Jynr?*¦GúvÍDAëýjÉP ,xëQ•4ÄWe’z{Ó:€Aà÷ÍNëŒdrO¥GŒú©€Â>ÿZŒŒv<ûÔÄçûÜûRúþT[ƒÇëQsÇZd俢 tæ©€©Ç^µ‘­) ëƒ[Ey"±µ¬,)ïg5¤^¢–Æ<Ê<ÆúbšÈp™þðþ´éA2ɯó¦É¹cdínŒXõˆyÌqßük ðëù^#Ñä%/`lzâAX17,O\ÿSZÚDÍ­`èe¸†}CŠ:¡õN(£WIÎyYv@âšÙ DR¬ðG2 "††Ϩ£*XkÇ=1à÷üi«Ôà”C|Ä ô¦´ñÆÑ«ûÆÚ¤)<ã?‡J@+dœcõ¦“׊Šîïɸ·ˆE,žkì%!8''ÛŠ—*…ê:Ò “ONzš‚y£ƒI70UÉê}*AÀ¤1wH9¦Î{уÏ#žhï@ž¹šF=ý©HëÍ!é@Ê·÷Mô5M@àÕëŸõoþéª þ슆k„‰©£9{Ôxæ§žZ˜õÆ{ýiTü½é€§q·­Q,2Hõðê( À#Šx<3MU8àÓ€ œž3‘L¯^*”ÅD3ž´æV`±õ! 0äŠBsžZ@6>ÒI" »¼†ÂÑ®nœG r·šLÃ/~´ÕœœŒÖ‡¼Ukâ »Ø ‰Ûœ†'!ÆqšßŒ’‡rþ½©¸¸»0M=P¤rJžÜÓC“ÔN fkúÆ•£O}qÈbÁ(äá†qÔUKMfòMBÒÎúÚ8~× ’9a“pApzÓPm\NVv7Ç<~Ts쟥gj×W`'Nž*à» ¤ ¤öÈïV Ü ¸’XÒ">ùqŒúg¥M˜î] R>‚š_ €piˆwlÇ9ª1õ»¶Î|ø¸ã;ÇZwÚ"2ˆ·§™Ô&á’>”É0=©ÀàdUTšAu:Kä¬1í(ÂL·NwÕ4rÇ(m…_iÇÊA怸ðFpOÌiXŒã#?Ê£’EŠ##Oö› ¬­P¹½ÓçžôÆ \:A´mSŒõ¢×Wõ66àŸ¥ã<ÔhFPêêc<M"Nó+©©  !¢OlñNã±Å1I)U#åê­R¶–îMVì; ¶jƃ‰êXþƒÂæn´€Žç­bëZ…íö–¶ÞRÃur!—x$ã“Çà k¢óe—Ì#!r3¥ 0¹.@=)ÎÉÏÖ— œr8àâ²mu;‰¼Gs§²ÆaŠ•]AÎI#Ÿj-q·c]@'¦}é7aˆšÌóÛZê—E ³4Q¦2Gr;’ 2Â}Mîf7rZ´LŠÑ$@‡\õ“ǽê+šêA<·Zí9w¨ÑÊçª {§*Ÿk„[HÎP!pÙëŒù4†]b$br)çÕx¤¹’k„{fŽ4#Ë“p>`#ž;b¦Ï$€yö àHæ”»éQ —“éNœPÀ~ÜgnÐSOÌ:ò:ÖtšœÉâ(4Ñ ˜d¥2nä`ãüjøÀcÇ'½;4$Ç‚1ëïARW!†sØTo,pÆBFæ8”›sÇâp±=3MÇ ŸrjP›˜‚qŠFÀcÏéL@9#µs­NÊ:çðÅ0Œz„Ï\ûÔDuÏãS÷ü©ŒXvÆ)Üäúýi6ñÛó©™wpzjM¤d~´ÄW`=³õ¦2œà}jÏ–8=}é¬óúÓ@SdëÈȬ]tj¯÷« hýø>õ…¯ÆÞBƒÓ>µ¤7¶0ؼŸAzd¬DjsÈeéøÓ¤b¸¨®Wm»ÿ¼¿ÖºQƒw¤œ ÿ:ÐÓZe–Þ@v•`Tûæ¨Æè¬ù<’^QþŽv¶Ó´àƒÓ­ Hú×4T~lß_Ίè1<iµÈíÂêÄ$Ó~ÐL`döèsZÑê°C¥XÜ^ʱ½Â&Ü÷b§Y& çd&ÌÍœu¦Ï£E%¥½”m¶Ú6£|ÇhäOÐ~åIÅžŠMjUñ<Œ4ècóžšâ8¤•N )<œöéŒÖ=‚Akypc‡UòF阂àóÏ8®ÂâÚ›s è²Fã ¬2 sºV%MNÖûM g-À–v€è:c­’哾…(.æ[, ÉŒÚÒ¹Fý ç¯AOñPhÒðŠ 2GŒîR€½ÎµÓúM¹Y#²Pé/𼓇õչ졻·XçxWWŸâ þb¥Í^è®Wc†ñµ¶’¶ÀÊæK(á‘rĘϘw·^Kz{Wy Ëqs!ù\v5^ûH°¿v–æÖ)$hü²Ì9ÛéVãb#@   t¥$ÒCŒlÅ9ÓyçãߌÓO™Cv÷ö¨Ž~lúÔဨŽ)Œ¯1ùÐÖzôÇåZ7¡Ç¥g'ÝÔKsHl:>µK<ÔIžGãRÆ>\P†Ç‘Ëdqüèäh>ùæû¼qŠ¢1Àúv§XgÞšÞ¥-Ú FÑøÓÆ ¦‘ÞžàŸÎè){ôö sÐÒœ @çœTËÀÍD:{ç5)8'½F¬9'=x®wÆw9Ò†™î¹Ô]`‰~¤dýt…pä–8æ¸;-nÆ÷ÆS_^\[dhmc#¾2ÍǰýkJk[ö"oKw0<(íáÿ­¤§ËZÈ÷»Ìνh6Îq^1â;¨fñ—Ú}Ïš®Ve)[ñÕëÚeòjm½Ümòʹ8­k«ÚFt]¯fø¿ð‹Þ¦Öfxöªª’IÈãŠ4Ý>Íôص DŽæÓf%Ëyk´nqÿ×­²¬ÀgƒÞ« FÛûLéâ_ô­žfÌs·Ö±OK#Vµ¹ÈÛ[ _ iW)c8XåSz±E¶B`‚9Á Ñ©ÁhšlWpÏÙ&¸U»·gI˜¸0<‚sÇã]Ãp ÜN)ã,Àæ«Úu'“B†˜OöU˜05¹ò“÷G9NÉé/:ÅŒ©op!2ÜDÌð±—,FŒNO°®®ãYÓmn|™ïíâ—û¯ ÿ µ õ¬³¬1ÝDò²ù%}~žô“jú êrÖ:JÅây´öµŒÙA!¿Œ•\m øÇð£6“ufð¿öÏÚÉFwæeX7÷B÷Ï»‚[‘Œu¦uãwZ9Ä¢qš—æø¡Õ¤ó¢@ÄNæØFzsóbºZÛÇ£Û5¼ K´ !\¾bAïÅi(#’x5R}VÚÊþÚÚiÂÍrJÄ„º““jÈv¶¦V»4vz唚”-&œbtË.©1#žÙñ¬‹9aHm×Êqc¥7Ú#1"Û7 tN+»p²/ÌxmY™‚ªŒ’x…;+ ÚÜáµâ{]VdB,$½¶0ík0#Ìe·^}Ky”?ð’Û[B±ÂöHÉj@/ó1ß;k¬}BÐ]Ciö„ó¦C$hK/¯ÒŸw{oeupÇýæ4ùØrœ¬ k§lºj¬W7:d€²qºL)LúŸ½OðÀ°’{6O¶ è 1Ë‘xݸ…óÓ$×W ‰4QÏ‚H¤PUÔäØŠx[#®i9éa¨œï‰¦]è»ÿ†ý$ )8P¤xéȬ™nm£×­çXå=JA#˜™¤åÆ@áIè9®éƒÔðjî"´¤™Â&å\ŸR@ó"…++Xz™ž%ybÒˆ’4 4fåS¯•»çé×ü3\ÿ›k.¥ª®‚ª­q§)ˆB›7°fÎÞ1ÓŒú×}*GçL` Œ`qŽ(Œ¬«³‹ºL»ðî¥=¨¹y>Ê#Û,Ev‘«´(ƒõ¦N–ÓêqÛ,q#éCˆ†Ü¿Ì{wä~•Ú° g=éHaÐÑΧ!b–6Ú¾–"dC=ƒ‰°Ü9ùÝïÃ~µŸÓN¢Iuå›t»š7c“€wàzòvþ•Ý«y‹˜äVPO ç½<(ÁF;qG8rœÝÃA/ˆRÖFÊ5¾õG%–<äaž”ùÞÞ;ۯ칑lÿ³¤3´„ü#€Ý}ë« ËžIqHˆˆT]§¨ÀþT)”ät÷†ÛUÐÝ.˜½Ý£ ƒL[yÚ¤×9­ívyítKÙmw’=À ËßøÉ«ÞZËPáÚ8úS”ß^ôœ®î;hr–òi‰®ÛϦN’¼–Rã—,ùR'ïx§øy­.å²™5"×iyð¼Ì@Îÿ¡é]2AoR–ñ!Rv€c=qõ§¤j¬ÌªªO$€?ZnDÚÆŒÜévÏwþ ]Åæ6âRÃ=?­TÛ¦ý¦öÉZÇoYï“#Ë*Ie$ä¶î㞕ռBXʺ†SÕXf“b0\¢œtÈ}(R²°5ws’†å-¯4s«J!k=Ö_9ö‡`SÿkŸi÷¶>kË¢#Ý2³›†R­‚@$5Þ<)1S$hÛNAeεF–vË¢ÛB¨•P€}E>t.S™¶š+½Ránu!ìW¤,$áÊ©ùTdýÒ=»š4{µÿ„™áyÃL%š)㘲²î+¡èGA]O‘›æìC!Ý´gZX­­á’I#‚4•þó*€OÔÒçŽÆ—1Ç¢(’HÑšê ž¸pOä+>êH/µëè.õ5´“1ý•»´d õ'=+±p§”àò:Ô&ÞT‘¢Bê0­°eG±¢2²°8»œØ¹ÙâåI'’ežfɧ÷e §LwÈï]¦HÓ.YY”¬.A^ž)ÂÚ!rnDQùÅqæ#Üõ¢õe’Æâ8‘ZGBª°9ã¯4›»Af‘Êi0Ã÷°j3O5ÈXî!yw©]„“ŽÄúÓ´ÛÖ:å˜kç™.R1šL$„8Û±IãŽ1šÛðþ™•¥ÛZº[-ÚDF|w'š·™a –6ÊÁ‹±(ç§Z·5vJNÇ cøm®'¿ºp×¢ÍÁ*ª&À?—ô­y§{-VàÚ]Op±i&h‘æÞƒ~•Ñ› 'àk8 /ËÇå­õä²·ŽU‘-àVD  ˜ÒipåhåìÌ– ym­Àò=£aYó™0Ç$…ÁãŽj÷‡'k˜.–InšheÙ,W,ÄáF@aÔµªšE„+0ŠÆÝq‰Æo­>ÎÎÚÊ&ŽÖ‰‹½Éî}i9&šš0u‹«íû=5gX"’&—%ÊyŒA\Õ]H_éÖ¶?m{»ˆ÷,°Fä —R¼}«£¾ÓluU¾´Šp§)¼gOJdš>Ÿ1‰šÎ=Ñ!Ž2 ªzŠÖ€ÓÔç^=ö„!ÖnY%ŽY|ÐÃæ /¨?Þ#•oM¸¿ÔDw‘¼ ÖDêB@\mÈ=&´…¥¡ˆXÄ#·¼@dmnøçÚ¤EÓá½’ò;UIÝ·3†#'¦qÓ>ø¦ä¬%s›KíOûTÔ ùg·yc +•ø?—zòçR»Ônlôé9- Fä½›¹”{b¯OK ìÖ°JÙtYn=ûÒ\hZmÝÄ3M ™b@›Ä¬¤¯¡ óøÑ͇++«ÈõKëg¸P"²I×j +e²—õ¨óS4Há»H¤¼·g‘Ì!²ÁCŽÝkBûB²½ŸíR$›Äf3åÈSrsÁ­%¾‰eؤw6«ˆ‹ÌÇüqŒv£š!fS†çT¾º–{iÁÑ…£;BíS†'¾îãðâ«é—ׯÍmur‰ËâÕ£Úvƒò²·ñqֵƑc¢÷ѬË+Ϋ3fõ+œ¯im©Çr‚Wt#!!Îp ÑÔVf²ã äÐÜiÀv#­&:àsšÌ±ùº`úSñžqÏÖš¤©k¶Œ¾À0 ã$?SXpÁwŒ’YÚÜÈö1¡ËÔÏ_jÖójÚ<–Ú­²Àó)Y#ŽMØãŸZŠÇA÷Ð]Iw<°ÄÑ4Œ2œ=‡½e’w-ÝêRƒXº–FXê RD x8' çÛ¥lêM%®—wqfh vAîâ³G„íáòLw×Ámä2B‚@DyÎ@ã§5½Ã&91JM]XjýN{Â6V§Ã’…Iá “; —bNAõôª—v2iÚÕªi) r­„ª.J€®¤ ½Hüjúxa-…Ž£}i±c.6 õÆA+Ÿj²4t’9¢žé PxÀ`@VäòA$çœÕs+ÞäÙÚÅ(õËË»M)máCs{žR0PÎažHïDú–©jšd—pÛ[¤òù7b„ç!±ƒôÍKÿͯح!Šîò'³$[̒觪ç#ê*åæ‹§£>—4Ò²0Êí—È9Î}i^7¥bŒz†¨Ú]¥Ã¥´opÄù¥ÈSRAl’xè{Ö}ÅÉÔåð¦ Ê¨ïpÁ‚ŸöNqíÅt7úLWÍe‰ç€Ú6c1;cƒÚ¨¯†-¢KHÒöø-¤†H~e;Iú¯§)E™¶Ûw*·ôæ«ê’t»¹R8ä) 6É>ë`t5_RÒEö§§ÝD6¬_ÍÉÞx#`ö9ÉÏ¥\º¶K«)mÞFE• Ld=Á¨VУ›FKøzcÆ[O‘‚ ÂŒ…à{Uen_Ä:JE»FË0ĤàåyéÒ­Ç GÅŒéwtßc‹ÉŒ„ã ü½ð?*žïM[»û[Ï´MÛgb&ݧ<6rQÅ_2ºNÅuiãÕ­´ó¼1Je"<{ÊÇHÒ¡]jüØÃqåÛnþÐ6r.ŸŸnGU#Ÿ5©}q>£sgaf·2Y"Kó ‡;Fw qߟ§¡k£%¦«=ôwW%gåáf7` Ý:à ŽûÃÐÜêý.®í&*ͼ|Å€xëïJñ¸ììS½Õõ;;Ô…ã·Œ]F¢Ø²’¤Œ£ÝºñOÕµ›Ý4»´0ì‰b,ï‘ç8!=1לÔ×þ[÷¸yo®„rD±* §Ëƒò’ É#­G?†Òé¥iu ¢f…#|…9(r§ò@àšPÔn¡ªjpj¶ÖÐ[4vÖ‹rY9ϺilµÛÛ‹û;[‹XR+ëSµr×\šïK‚t²Ûp󵻦òR2¤‚KÓåëŽôë_ ›OìöKùˆ°#R‹‚§ƒž=)‰áÒ¶‰o¢ä “q—‰HbrH#§Sš¦à/xdÚ¬wz~™q-Œr ¯V" œDáˆÜ8ç})÷ZýÄ"þDÓ÷Cg8Šgó€8;~`1Ï 8¥‡Ão¥½·ö‹0‚ïí(^ qÉ;zûžjK¯É=®¥oöÜ éDŒ|œíà yû¢—¹p÷„mRö-bù$ŠìûXVIÌ;Ôf'ç§J-u‹©´¶«öv˜@#BH’QS¶æ^Í<—Nb¹·Ü@#rÏQÔÑk¢Ï™%œº¤óFc1E¾4lž¬qG»`ÖäÝÍÄúz\YÇÐ#t—s) `v=ªK=biïá¶šÐF³ÂòÆ7ãk† g"žº„錷ŽVÆ3ƒù]¼úpåPØhÚ\Ú\=ü’Iå¨óˆ?1ëž4>Qj6Ã]ža`òXyv÷ncVóƒ2° Ôc§Ê{Óô]KQ¿–í®­aŽæ’4xåÉùN1Œ}y©-ôO.+ÍÙd´˜Ì1Ï#ŸöI¥éré’]td·–V–8а±Éç½ ÆÎÀ¯rùÀ×½cßk[êOeoló2CçHpÇ$(AäàÔº6œö y“ ŽY¼È£’C!A€:œõ ŸÆ–ïK3êK¨ZÞËk7–#}ª]AÈÈ=ÆM$•Ê»drk7tµ‡K™îÐ\”yBmçI=Å_Óîã¾Ò­ï’6h„ŠŒyÕ°“ûI¯–ègìþ@W=󸜌óô¥Ó¬¥ÓôXìVuw‰ ,ž^>‡þ´>[hN·04˜ÖËK¿žÔI{}4‘5Æ~eÉc‚{Œ.? ½yª$šUë\ZO¶ •ÖpIÊA㌑MOÝ[é6v°ß šÒ:9L<îÈ+»ý£Þ‘´ké4ûëf½€µÅÊÜ0Ÿ—I}TU>Vïqkkßëmgyyoöf†H”5KÀã®§­Mw¬›s%œÍåF’\maˆÕ›Þ<”Ûý7íÚ¦xf öf>bŽ7©ÁþúU5[YÒ/µ[™Ñ/áÒDª‘È…Š0lärFxà qøÕ«m~ÒâêQ\­Ã2ÂêÊÛ°3’ÈdRßX\Üë¶WÉ$+ º:2±`Ä8ŸN1Å7E³Õ4¸¡³–âÕìáQÂ7˜ËØÃVW©“êz”Z_’²C<<…QaMİÇéL“Z´Ic˘tÎÞ#w…nr#·z]^ÆîþëN–Ý  i?œÁ؂܀}J¡¥jwW²J²[²-ÄS@¬ì£ Œ«:çœóÚ„£mA¶Mu®X[O2¿œÍnáf+prN1Ž”ûýjÒÊi_3ä@ò4q—BHéU®ô»éà×c o‚ˆÏšF>@¼ñÇLÕøn®u äŽÙeµò.–)–`3‚HôôÇ^M5ÄÛ7'Ôa†Á/%gŽ£†Œ†ç Ç\ÕTñ‰¶–F2¢ÂTH3Ó# Ò˪èúmÞžª¬’Gq2œÆÒ~‡ôªFOÀ8îBŠ…ò œŠP6Íéڛ™íË•’üÇÞ¥@_\žÜU[MNÖöõmã–E/ÍEhÊî^™ŠË¹Óõ}Bâ÷ϳŽwb & ±cÏç=ªöŠ—Kp æ‹og"ŰÍ«#Óõ¡Å%pMÜÝê0¬qëNê~i‡#=Í;ߌVe€÷ó¥Î{QÉô¤ÝÁ8?Z8çŽ{8¦à–#?Jp n!hS—öÍ À8êzQ})®x=MÄÎ=óRo$Nj»rN0x#µ%Ûæ8éLCøçŒÔ-×w8Ánǽ1‘Oø ¯ž¼œÐ ÆüMHP Š`};S„žqŸz ¶ÜŒûóGPxÆiw »sïÒ€#!³ƒ××4ÂHàõúÓˆ$õ•FÇׯӭ3æ'œ •lSŽFµVÚòk­"ÒÒ+¹-ŒZ`Z2v^:‘Ðcõ¥ÈÚˆQŽ‚³l¯..oomæµ yF»z‘œûozçoïnVÆêOí Ñ›L‚æôCiä Ž½9àV}½áð‰·6²G{læXwc,êņ0{ôüi(«\mô7Æ­c,rH·1•‰ö9£wÜûS†©eöf˜ÝF‘£mvvÛ´ž€ç¡äVGötñÚiS$M#Áqö‹ˆøË ¸p[¥C¨i—‹«ÜGk&Û¡ G`3ì<±§ãéBŠÙ³¯crf0ÝÂën¹˜ïûƒÔû{Óí5+køØÚL³*œ1\~µ‘e$Ú† Í§Ë-¼öI ‚îÃÏ\7éRxv+ø£¹[Ôb‹.Ø%•@‘ã[—48«\i»šw·¶Ö0fæá!-õü|VW†õV›Ã‘^êJÅ¥‘D„HÞ@OÒŸ|o,¼Eo¨%„·–ïnmØC‚ñ6ìîÁ#ƒÐý+*ÂÎþ1arÚ|Ê–·—&HˆÚå°ê3Î3úœSQ\¢mÜéF¯aöu®áXwùeÙ¶ßÝç¡ö k:l¶r\¥ì o ÄŽa½s÷eÔïuöd¹¿·–8N7Œ®ç ž§¥M«X\ÝIâ5M>V[«xÖ…ú‚=}Ç_J9cÜ9™¿mªXß4ÐÚÝÃ,‘ ¸V¨õúU=:å.5+‡ûzJ]• “€ƒ‚Ã=rIÉÕFïM¹¹Ô Ãjð¬šSÛÜ+’ëR躴_hÑ$´º‚)§’@ÀôáIÁÆ{Ri%te½r"ma¸Žì[\A hË9UsÝHï‘WmçK»džDqêr Q×VrÖ“Ü2\nß-Ê~`23×ñÍEáx® ÒÚÚîÖKvŠi9r¿>æ-‘ƒÓ‘JÞèïïþÐN-…ÜBãîmÜ3»ÓëíY:¶$Ž;=Bò¨™¦PƒŒ…vè:TZ¼±Y4«½.y6\<ŸjLr Ńç9ÏN*­µž °iÎÚlÆHµ9n%û¹ØÛðzÿ´?*¥ªbmîtÃP´{ß²ˆÅÇ8Œ7''ÿÕI.§eÀ¶7P‰·1ïϧֹÓo¨ b —L¸H"¿•Ê!\êW~Ks’rzVôˆïmé—z\®áåûVTÆà±`ù';ºqŠN(jF°Õlbqy YŸdgw Àãß4KªiÐL#–öÝw—´ÈÝÇ^Es%o ¶[6Ò®ÛÉÕ¾Ò]2¼fBÀŽzóVo¬§šÇÄatÙËÜÈ­òÆXìQŸÌ9s3 »Ôm,ˆαœnaè¾§Ð{ÔòL5Ý5\—c€swv²lÜKq¥]ÝÚßÁ_)ö”À £Ãœþ&´uÛY›N€Ú[M¬ÑÌmÇWE<¨÷î>”¹Vr¶—ªÏjˆ·‹5œQDêPÛ¹ü;Ö½µý½ë2Û\G)Q¸…`xíøW/wî¥s¬}ŸN»…®ìâeP¡Š–Ê“ž ­ žStºeݬþRÆÏrÄœ£,NÒœ’µÁ2ýÍåµ™i¸Š"ßtHásùÒK¨Y[0Ž{˜QÊç øÏ¡úV,­q§øŠúIôû‹¸.âŒBñGæ…ÁCýÑžy㚥ä"j·Ö÷º]íŵۧ–öä˜ö#a€"…:Ñwl·"Ù§‹Ï<ˆ÷Ç¿Nµ“ÛYäO41 %Ü/¾Â±#¶–/D-ìä{yf2N'‡åˆªadG÷銓ÄÞ?i2OlgG·J¤>aþ0Iir+‡1²×6ëh.ež%ƒ¼Ó ÛíÍ>K»ql’‰áÚã(ìã :ð{ñ\ìVakj ÀˆêIo!o³¡‘}rxè7sTှƒ£C.pÞF Þr5±`ÉÇ<|Ÿ*î.ftßÚ–;ÚÇuoö…]ÛL23×è3O†õc°‚[É­•Ü ”“äfÿdžµŽ¶ðŬ꾖þT§’ëo¹6ˆÈ ÐöÇZ¡ ÚØøzêk+ƆS‰ 0’)>_›hÁÇÊGãG* cßYÇR=Ô ²Ý³Ho§­XQ•û¢¸ýVÈáÓ4û é*C,>jH®Ùd~¥O|šÞžþæÓP±¶û›{Ÿ“ÌY>e`¤ýÜtã®i8ö ÷+ßÝÝI¨Ç¦XM 7KNÎë¿h1ÇRJ¼—–ά¦â’0|À²1×éŠÉ¸‚câö1A*£éíŸË;|ÂÙ·Ò™áëXö[¤Úeô¶²™˜Æí$àîÆxr«õ6VîÚO-Vx‹Ê7F¢@wQëYz-õÍÅä·òÆL7rE¼€Ux¬«¹Ž= t«Õûγ!ˆRU€#G=i½çÙ'˜Ø^c©e9 ¯zÌ]*Êô½Ü–rÅ$ÿëF*[|ʳìoìîõí;ʽ%ÓØI¶c‚ã`çïc>õw@™ÿáŠãÌ’æuà±,X†lr~‚‡.kšÖ!€pƒåqŠ©™mm}%ÜqºË7úÆÞÄ1úŠËÓoÖã@MQ5 gÔ#Ûù †p§åÙÛÓž)Ñ4Ñ6…47ÓÎ×í‰Õ›rc-¸‹‚;SåatnlÇ^‡Û¥›äR¿uz‘\Öž×izú•˼·­¡ÜdËãŒuùG5©oªÞÍ«µ£isEÍ‹‚ÃÞÿZN6k—ˆ$Øl󎔀~SÉIbãÏ>™ †ÁéžÔŠ9çùt§ã gžÙÅN>Ù§cpyëJ6’sü©@ÛПzjŒ©Îy…ƤÆGÃ÷°zP}r( 2x;¾iBòAëÚœÂh£’3œŠ_˜g©#µ)ÆàF2{Rc'#çÄ5”çœÔR|õ9õàç¥FxÎ4Þ;çÞšG=ÍHËèqÏÐ:‘ÓÚ€#*z÷èy¦²eÀÞ¥eôÀü)sŽ˜¦"\éLÀÜ Ô®2£ÚšW8äcùP;sÓŒ{Ò‘Ž>QíN*2:óRl' Î;Ó®ÞsÍFñøU²Ÿ\Ô)Ï9zÓB+0öð¬]tf͸ƒ[Ž>\àŸÆ°õÈÊÛ³c?CíZCqKc uäqéüé 1‡-ŒäOŸ†_ÃùѰ¬ ?Úù×MÌ…;„Œ{Œÿ:k>TÎsÏ5<ƒ÷¯Ðõþu aWå`sü¨BdyoîÊŠ˜ßäÑVEÏKðÖ—lt­+QÝ)ŸìQ¯ß;HÛÜwÆMZÔ!žëU°D¶c 2yÍ9a·£¸ëžEKá…TðÕ‚.HHözðHþ•¨@ Ž2:Šà”š“;"—)„<1¥¥àT|³²°ž½øÔÛŸiÑiÍYy¾B±‰ l‘Ðdô>+xࣕeMO3î;#›³Ñmµ N‹V±Å̈¾o¼00y¥[¸Ðtë‹,ÞÜxÓ'‚:×Ç+‚GáM“)9;ŽÈçî|/¤IQ›5Ùp˜$m ×ùÖ­¬ÚÛ%¼)¶8Ô*¯ g§^”ÌO¨©m½ÊI-…?tñŠhä~´î1Ï4`f #8=*2OáS*&Î=è ƒÓ°ª?0üsWÞ¨®2Ç×Ú¢[š@EïżúR÷À╆&‚™+{÷í@ä L’ýFÜ`}iàªFlrôÅ<rF9¨×8ÏQR)$à€ 1 šRqŸÖ”z~Tc€{j‘õ÷§ŽÒšƒÎ1SmpE“À?#cæ#PÀ‘…lG t¬?Ë%¿‡'’ šÜ€²ã$3Û­4®ì&ì®tù3»U ­nÆÅå‘ÏïDbCž€þb©\F;Í?MŽÿ™â‘ŒÍ“•*z:*®¡q-Ý¥üWRÆZJâ`¸Ú7F¦©GR´:§Q»“Óµ7œçÔW;©jZ–Ÿ¨­u­o\Ã0ˆÉ £ªÔú…ž³{?zy¹Xˆ>H tⓃ1°8AËg4¹÷Æ3X:gö´ÐAxo!’ -‹·Ì.pAP`r2išuö¡(Ñ®'ºWPƒÆ"Qµ‚n½¾”r1ÑêέR‹QŠkÙì¤WŽhpWwIÿýC±Ü=„·ßËp­4ªE)WaœŽ{tíL¾½ºƒQ@³FÉöØ òãPÊ€ÎâG žx=£—V…Í¥ÍNö-3N’î`þTC,“Š’Îá.íb¹\ªË¸Vë‚3UµÄßáýDÑdíþɬKBæË@´1\¤ ºx•6€Î\(À ƒòûæ…­½N’Y´›]»£'ð ôžŸ å»0Š@Jï=qÓð«»Om ‡!™Tœ{Šæôuº±°ÒÞñfµ–QÀÑʼn ŽrBטît§%4å|¨Êã'½súDÚ–¦Ñ^­Ôh†áüØ‹ä—fÜpzæ›gy{ý¿mÞy±ÜyáÕ@òÔ©ãaÀ<^hqaÌtxà‘ƒK߯ã\Âêë¦ÚHo[Í©µ“å\:y¥pF:à˜ëP›ËËׯ…ü’n|•Ž@»"0¦@(äbæ:;+Ñx'*Ž©­sÑÈêG¶r? ±° Ï$öªšd7ÑÜOö‹ˆe·!|¥^9$€^•™q©]Ëo¬ÝÁt-ÿ³ÝÒ8¶©VØ¡‰|Œó“ÐŽ(åmè; ©Èç¯<šURÉÇLšçâÔnn./Ú(Ž›ÜjsÙ#‘ÀëšÒÐ.g»Ñ,¦¸mÒI;9ÜHÉãµ'·+ŽÓ¯…ô ^3ñ¹Ibc’Œ?¦0Aô4_jpiïn—fnfǵILžÕ“¦êWrë‘K:Ê—ÌdƒËRŒØØŒµgÄ +h¹\í8±ù5¾õ‚ú¸'­ <äþUÎÜêwpë–Éö¤(÷¦…2ù{ ¶2#‘šÕÖõÓ4¹nS`}é—ûªY‚î>Ã9¥Êî—p¸§R€êí¦ aó‰ÚvìÎ:Ñq©ÙÃb—ÞD•s–„³ðO¯@k*;[¨c¡(‚±ôÍâϵÉÍÚʈ õrWÝ(åÞýs^=wK‘£¼SºQX碑ŒÆ¯<14©&Ô2"­Ž@=qùV'ˆ-£Æ{tnå«;79!À횯&§¨ØZji,±ÜÜAuÈÈaöà=7j7Z ú7>¿­(Ê’Hø®zs¯G¥_H¯Ï‰-Ë*³8æ zb¤·Ô¯/´Ë«ûYaxRX<ÀYö‚ÌǶ Æ=.Qß¡­©jVÚVŸ%åÛË-Œð8õ ùÁmýqŽÕÉêóÜ^xcÄV“ÈÒý˜ I=„© ÜŽ<×]Û´¦ ñ™‚hò7êE7!\SÔòËLfܧ-ÁÈ5a£\çg'ƒQ´g¸8úTŒb’W·¶ *HÜ‚xÏ­.Þ@?…&ÞpE ŽNOZPÁØ©aì(ÆŒR”éÇn¤óLB%—ô¥8.ãFÀÃõÉ¥+Ÿ›4lb2®!ù±ëïQ¼(ÊQ‘Ys÷YAð«v!àu¨Û°Bƒ@ÎsŒt¬k; äñMÍñ6ÿež‹hÎï”’§9­¶ G ~T(FqM;ŠRéöHÂQkn yÃyC#=qÅI µ½¼dAp®sµ(ÏsS2gå cˆw¨´õÈ÷⥙Œq‡1Ÿ™‚íÇ<œf´0ÂLžF:Ôf5TÆIÇ<ŸÆ‹U—äh\|ØÛõ©”’HnGQHç#§>”†@ ߟ֞ÍÀëÏ~˜ Œrp5¸ÇN‡©€Ñ‚xwëOÉÈÈúŠCÎ3N6=E ÈÀç©qš‡$ddG¥#tà‘JBõïL9 éëR wǵ4޼޿€@9ë×Ö—oÅ!úfžŒ§Ò€0x<@h(Or{b—j·LR…1@ß©Æsìy¨•0NYŽîqš´FA$`gµFWžÞüS¸6C  òž Ò£p©¸P~QéÒ‘”c;zûP"».:ŒÔ{{cŠ€##za<~½)ˆ¯ÌÙç)ÊÃqùT…xÏô¤À#¡úâ˜41ÝO•FB¶A#ò©­3•ãü) Š6ð3ôâ jT7Í‘•ôÍt‡•=óïXÚò§ö{9ÍT¢–Ç-t~pO}´ò?pxî?™¤¹•ï• IPÏoκLFÞI²bpsúUhY¤ç=êKŒ«*Ÿ½Ž*–ÞèJ‚9ïV´D»¶[û yÿ:*ÿß¹‚Ç øs`Ñ£UT–eA+éZ-€rzçÒ³ô,}‚uP¥õÚ€;q%_l±Æ+ާÆÎ¨|(F9-òž=ª7=ÖÉ•)ëéSLl6IÇÐÖe"6$àá²JGÉQϽ8‚8¦’Kí ôÎqÅ!ÁÆN3NÚwãÙeKxšI]R4™Û€­8þ9 ÖŒu§(ÇÒƒŒR ‘t±±ž+ˆÍËJ‰åƒ$ìÛ‡=}z֨Ϛ?.1Š“»N{óK™÷ +™¶z›b“‹[`žjØvà sÇáK‰§Æ¶j–ì>É̽|'ëÏãW×(¸ F2FiåJí# bŽf&Œû"ÇL–âKX =Ãž½Ïê<=¦ÜI3ÍhÎáß,@,;ãð­m»G'µ‡±ÇJ.÷Š·6‘^YIk,gÉqµ•XŒLƒÒ³æð¾—:À²[’ C©‘¾éìyä}zVê¨ ´žÞi6q•9>´&О¥{,mÒÚÞ1H8U&©XøwLÓ®|ûkQ‚pK³mÏR$ô­UI9É>ÔФî9ëӮƑœšŸ¢úŠYÄ—D–2(ç'©ôÍ2?éQÜ$éd‚DÈ­¸¬y8ç§JÕ9Í*ýáúÑwÜ,Œ+Ÿ h·w2M%¦d™üÇe•ÇÍê0xü*×öš·WdB×)å͸’`A8ì9ö­&\²àà¼u¤äžOÓæ—på(éš=†’’-²Å¸ÄIôäö¤¸Ñ4û™ä–Xw4D 1 &:nàþ5¢ÄnÁþ#ÅsžzÒ»Ü3oü;¦êwQÍuoºUM€«²‚½p@<­ZÓ´»]&Õm-!1Àq¸ž¸ƒiÎsÚ¤rHëÓÚ‹¶…Ô÷ðÞ“m, ¦ÝËÄÛØíÏ\sÓÛ¥O©i6š …®’Fò|afeÚÞ¼ϽhíÔò®qEÝî= ; h÷m$²A!g›Îoß>w g=ýkJòÎë9ín# «±”÷gaèõȧõûÇœQÌØìŒ[ ØX\¬Ñý ²BbVk‡'iê:þ^• ðöž‚Õ9qi“ ùïògÓŸ|}+W×$ûRïÅMõ #8è–&V‘¢“kÉç4AÛËgïéœàÓ—G´7W!e].ÙXLüŽØãÝ+D2Æ‘€:sÖ¤E;I$äô¢ìVF,^Ó`ŠÈ§0;ü™ëÞ…ðΗgXeyÿhÛö‡âAÎî¾¼Ö¿–03HCÀQÌû…‘˜úš÷“É ¼M“©•¶·¹À<jm3H·Ò¢)nÓ¶@–f€:“À«˜<ô§î¿….g³‘{ X^êlL’´f) S2 ®*/øG4ó¤$Ü¢±H'p࣠ôà V±É\g¡àâœ2<äÓSbå3tÍ*ÛHI"¶óv;"I “žéÖ’óD²Ô/~ÒâH.‘v‰àrCëøÖžs’xéLþ-¹ü(æw¸Y?ðØ›3nñ\8i¯'žÛ݇BÍœœ~\SÎ…§J—¡á‘…ç3Hèy<OJÕÂ*©ÛøRªâ23ƒŠ9Ÿ@±›¦ivú\"(w y3JÎ~œž”G¡ØÅ¢#ÉcdÁ]Ä»¨÷«êW'¡§¾~œqG0XËo éL—!Òãý!TL ÃüàtÏ?OʬÃcmË\¤!n ÚBŘÐzÕÖ?!ýqÍ4+ däúâŽfÅaÈÙ6F)X|Ä™¤@Ã#üŠcó23Ðõè¸Xi Žp¸'’hfPÙÃ~Tý¤Ã­§O<Ð",ªH~R~‚¤.ƒÔRl=ˆÏ^ix­ÊF¥Ü ô¦í%HÜ¿QJW P 2àñß½!sžHô¦¸ÊŒë‘ÖšÀã9àt cüÁ°œ0ö§•Î:s‚iŒ7Ü~Ts´€H㩈F” ÜÇqPHVL\äçObç1Œ÷¦¶H\°ô¤‚3 '8ìh28'ÉÐNæ=¹ î-ÀÈúô dêãã9üé¹W$dzf›»È9Î).¡0Ù®hÒ»z …$Iì'åb§*G5g†'ž}3M*¤cnh\ŸŸsíÞœxôæŸÇæK¹æ7lw ²LXo #ÓƒÒ»­;H´Èc±q%²‘ƒn“ž~¹§®¦ª…6À(1û§·Ò¬Å vѤp¢ÇŒA€L§ua¥f?€¤~TÃNÎ@#½4ã, fPÜ„T/×#š›sQ¶1Ö‚ˆîÕ(Ø™\c¡«Î8&¨.|÷皉À ø#ƒJ«†ëO#æÎx¤^OJ”6# £ŒjF8©NœTDàóZ"X+ö0;£ãŒŽ*4<çÚ¥FÏÉ%QÇ=‡çRÆÀGn*ƒÆ9©”{Ð rþ4å8¦Ž0;ô§ŒƒÚÇóNûª0sŽh\÷Æ)_€>´&ÈF¡ÏZpÏ Ë“ßÖ”¾8Á,z@î/Ìen3šŽ1Ÿ­FH2Žvõ§ª—ƒÇ^(%†ç,xÍHÄà€?GäýzR9ùóƒý(`8–2q´zÓ°BõÉ&˜6©äÒžƒpôçŠã¹d玔oà‘Ðu¤$mêy$Šiùƒ`P!Ù8Éêy¥ÝŒw£ߧ¥ G™ÓŒu¥róŒžzЃ9Ý×?•.SŸÂ€ zÒí8Ss…çgŠ“¤éøÓO-Û”Ä Ü,x=)ÄGö46:œñèh`.Rà©Çt¥$çž(Âü¤‚sJÄdçŸ~´Ǧ)ÌFÜJh9ã¥9UwÓ\sž=iª¤““ŸJz°Á¯S@“ ŽqèE; »2õ˹l4››¨®!„À¥ØÉð@€29éÉɇޟâù$¼DÓ"²¾–9¦ŒÜÉ Ê#È$ÜñÚ¦Õ>Õ®!Òmìç†ÊR÷¯–HU<’qJÒ)$®#lßZ,‘+ÜD6 h͆lúÆ­–e=Lq\͆”×ÕÛÞXL)CC#H<²©rqÉç¡®—záŽÒp¤œš–­°Ì¤žæëÄòÅÌ,í-ÔH›FV$Žzð£õ­Ì@pXcrƒÈú×!a>¤ÚouÒO¨O$²9ù ŽÁUÚêpqÚ­xJÖXtÉ丳kY§˜ÈÙP¥½:€óÔÓqeëÝBêMTivmâ/9ä¸ÉùI PA=9çŽ=jŽ‘}¯êð¥ÆœRÞá  `q¿n2x~?úÕ¡¬Þæ[½ÚZK5Ñ8Œ08Î8è8ª>AáUÉv7¼«,,„ÈĞ㞣šÃpëbí¯ö–Ñ.oRQãrÊù™ Ž;òýMh[ßÚ\Ù­Ìw ä“€å°3œw®*ÂÞTðýÞ öš„š…ÈòœI!œ€ÛWÉô«z¤²é°ê0Km§Nå…7/›ÀÕv矯4ÜP®v[yÆF ÎsH›c«;NCý+ž>-²fòì­¯.¤hHá*x-€*ç‡ìf´Šîæâá¹»œÌñFxL€ÏsÇ'ÔÔ¸Ù]Œ×îsÐúQ€8Ï&£v|ëøõ§æ3IÉæ¥”4¿ÜSºçúS̸ç>”3 Äs’:Jà*çiqúÔƒ9ÀÇLõ¦ŽüqéFå'9==)¦„8r29¤=±ŒSWïíÇ$piFÜϸ"„&<0\gÖ¼ õÅ Œ`þµ1Žä÷¦+#'œúqHØ^‡ò¥8ý:TI0‘lùsÆAëÒ€£$ü¤ 6ñó>´Öù\.9ÇÒPÆyÅ#®PíÆ}3B€Ê4Õ|°ØŽ„Œš~Å)gÛ"€fx$gµGµùÈž*]¸[‘Œ˜T;FÌr[4Š ŒñÉÈ$u  n¸ FFE=€ÈüÙoµ…É+Ïÿ*ˆ©Î <€ŠsÊç'äPqŒqÁïL$ sϵ?à©É<ã5ƒò0vå½hEPq&”œcÊ’>zžGjrN9ïÏJ¯çl*Ió¨[.Ã9QÓÒ¬HŠìœwéQ7mœg‘@Æùç±ÏõRzÐc‚N)TGB@¦1ë ö§öÐÒªã#ÔñH1‘Œdv4n9çÞ‡VR1üêFSƒÎ;ð*7nÎh2DdêM(<'Ö›üXàqÀ‚zA@ÈàçŸçIüX _ÔJrƒÏ±@¯Þ™"Œ÷¥S·%ä3Hç#íšC¿kÀÛš^­‚¸Çzt‹¼¸È'p8äw  ŒNiŒNFiòœãQŠa'Üzc#8Ú1Ï4ÓŽ„ ö§| pHúÓOÝïùô¦!‡žF8¤úr=èfg<}i‡±ï×­#À‚åT¯W63ç©CÐ{U³÷¸ãš¯v@µ”CÞ©n#†›îDsØçšk6åo¡þ”Hwý#ô53dH½~Sý+±+˜6Z:tÊž_æÇåP+ü¨G þµ$`³àžr1I ¹.ÑïE.eôhMV[ˆmüEâ8'ž$q¨¼›K€v˜â9ýj–±©E<66ö·[Ë,¼lAÚ –ŽGLS5¨vø«Æx³73 ˆSÞΙÕHG}˜I±»bšŸž_j®PŽN3ïYTKÚ6mM¾DO Ioi¤Ç}<óÉ5ÐbÛ™œŒÜã¶3øV…¶¹kwªËa ÊYQXKåŒÏ^1X¶¶7ñÃm3é>p†K„h%d¤¹YrHã#Þ®4¥¶«-¬an-“ÊvmIHŒtäsíYI&ÝËM›ý\sé\¶žŸð’ÜjWRÜ,v÷OooR²l Õ¸#$“ÞºhüÓn‚`<Ý£~Þ™ïlÖéZž“{|ÚOÙš Ç2ùS±S‡« z㊕³)”ì|Msž°Ig5íä+0v•Cˆ›i9=ðAÅtv—1ÞÙAu>Tñ¬‹ž¸aŸëXÖ¾¸±KU‚hÇo:Jò™$‚[¶V´ô{)tíÖÊiG‚1õ¯¶(—/A+õ.•Æ4÷ÀüjAןΪA<ñPQ*6ã¥LzœTLïšE"Î1T 3cÖ´vœÕ@3#}j$m8Ï@@ 1œf‘ù%AìeEHØ0î @{äU†Àg>õÏz¤Èc”gžÆœ½M4 cž”áŽç?Ò¬–JÔž,Á& B1޾†¦JÉ€8ïNc§jEÇ9§.‚hì`Œš {ñL>†žJÉÆ}è#-‡ [oð8ÁǦ€Ö¤^brEŒ€8ÀàS•Ô’TƒM2´àzSÑrìèy¢ÀÁˆ'oLuâ¿Ä)ÅOu÷¨öî'§¦MqÛ±ZpÈ¿4„¡›1““Òœ1ÏCŠV-ÏSõ£9ü3M2*†geT^I<­F.`i#gˆ¼©¾1¸e‡¨õíq\±¹J†ëž”Œäcð=)v´Í$r;òqHb sëÞÀÉ8ÅVžò ybI¥Di_ˈ1Æöôl>AÆ!ÜŒ2ô9” a[¶xÍ/ð÷´ÝÄPþ”Ä;®sJƒæÇ¥ êééORFr1Jøpx£h“ü©Àáy8ª÷wpÙÛ™ç•#@@%ºsÀ§a\”°ÝR*½ßQž6?'ž;[y&™Õ! 37@)Xb®3Ó½&09 õ¥÷ ä0Èãò§³§=0ONôÆ«.pÇ“HîÏô¦Ã4SÑJ²YXô©˜Œh°\çšku ÜóÒ›=ÔV±»ÜOQâv úš|n®¨êÁ‘—p ä¥ÃgƒÏ|Q³` u§nŽhÝ€Fxô&ÜnÓ´ü¸ïÅó6:ÓðJn@:qÒ€aT“ù“A\öà{н8íÅ.y$u­C5¬71”PÁ¶ç¸9ó¥ âX Ð,j1¦ŒüÙÛœž´¬ )#‚)w( žqÍ)êOИ €sØö¨ä!‡'§Ö¬2ŒqÁâ£*ã´ Œ ¶y¥§ë@ù³Ø÷¥ ŽŸÊ€gÿZQÈÎ)Š=xôÅ”ÀkmÚ8ç â˜I})[9<ýi„œãúÓ9éÒªÞû;ãƒJ•™ùLUo$Q—5H“ŽûÁ9èHý QŒíÝŽèsùUâ1ûõªP©Ä…†NÃü«²,Á’Û–hž¸ÌÕÈÿÖñíU­Gî@=ÌÕ¨€~~T=Á- 6·©¢Ÿz*F{ÂñljðI/=»ý?ÑÐìµco5GW7|EÖÖÞ4hÞw‘˜ýÆòØ)Çqòã…§¬ÜÙén·±ù6†XKm cú©üëñ½FiIûˆéx§Þcl„r‡ŽŒ:Š\ œ‘\ÄÚ¦¡¼Úùñî“Sk`ÿspÁç¶}éòÿkG«iV“ê ¤'”‹‡ØÊ@$CƒŒV.ŠGBî®1ëC2ŒßÚ¹Kq}äß¾¨®Î®%¶ÜIݸv'åÛÓÞ´|E/–tØÝÊ[Ív#œîÚ6íb=`'zÁ}.k7¨¥1HrNs\D·ÖÓEö¹qiç^ZÆÒ6U“ªäõÁÈJÙðdÑ¿„ôåV R ­ŽpsÒ‡ +‚•Ýìcÿ¯F{v¥9Í!& » < ‡©ý*6î(úU<…˜çjëzÕ6éã=ë9ÓÜVPXœRcìiý9í@*Qlkc`¨±€EXdàTdc>µhÍŒÁÝŠA÷ºSöô¥ ÎN*Ñ,rEML~©-Ž*D[úP…(ÅHj%ûT ÿÊ‹ˆUÝÈ<ý)Ë—‹.Ó“À9úR gÉæ¤íÔ~4„ÆãæQŽÔ£ ¸4˜;ÁciÀ˃oZqÚ-¦ßê–Ïww$VÑÇ" &c‚Üžø#𽕽·‹î¥Ará-p¾k°ÜYÁàŸAÓ¥Y»Ñ®¢ñÖ4éáI¤‹Ê¸Žu%dQÐär«VÖ7(n®çš9.çP™U!Fp£¾2IϽjä·ò!.ä6Þ![ù¬“ìW0Åz… ™öሠ€Igò¦C­ý¢ê(ÒÖW‚y%‘yÆ ˆì¹sM¶Ño­­´xþÑnWO9sƒó¥q׎ YÓ´ëÝ6F‰/¢}<;2Fb;ÔNÝÙÆ})>^©‹!iü/~ˆc¸gsùñR[ê‹j«Y­ŒpyÊò!Õ@ÝОG{ÕÍBÉõ-6îÐH±ý¢Œ1 ‘ŒÕeÒf¸·1êW1LÞC[ƒ E Á<“ÉÀ¤šåÔor­Ý×ö–“{k5‹ –ÍåËetcÏCš­go ëZÊíFm5‡° €âkRßLÔSJšÒçTŽbÑyQÈm°@Æ2~o˜ãéQÁ¢Moq¦Î×Ѱ³·0cx8'w(§t•…n£í5¶½–ÐÇc7Ùî m“ ò¨ ß.0qØž¢¦Öu «d––É3O8Œî“o\œ~ A¤i7ZS´Þ[$EB¹PzýH©õ6mBqmp-î fI=ã€FÈàçÖ§Ýæò¶(êÓ$… [Èó[´dˆ†öV,­ÏAžG«¯O Ú£ÝY„³³r‹"É–fÂàmï’ÝjÃéW©©Éskª¢—iž&„0f ©ÏË:sL—ÃÍpu8g½&Òøî„ÃDøQÙÿd”Õº†¥;R¸¼¹šÚk…QÄ£vÖÎr2Ê9þ¦,õ+k8`ó."ä¶ì$Õ½>ÚþÚ&[Ûÿ¶6R! êy95OSÑæ»¾ƒQ²¿kK¸£1–($WBs‚¤Žô´¸t"þÚ¸•¬"K›íP4˲ ´€Cd{úV–‘{ý«¦Ewöv˜²‘bú]‰µ{6éd”0M¸Þňê{“Cå¶­ÊZ†³qi=ävÖKp,àY§/&ÎxQƒ“…>•VÿT+gO{™"…/4,Ã';ay<¸ªú³E7ˆf-©ÛÛ x WP†d“2 vûÕ»k+ëÿ²êñ^6w4";ˆÄ[•Ô´ín‡ŸÖ©$…¹-Öµt&š }9¤’t¹+$¾Y*Û¸èyqL¹Öb¾û4 f×hµl¸€¼h9$þU¥Lš•Õäw¥žx^,íÁ89Ï?xúUoøFgŠ;i«ImwgÙüåˆ0’?FR}ºÒ\£Ô”ëmwglšky“À'd’`¦1¸Ž£9§Ûk>n©¼–ž\sù«»äÆyÊ‘À8$šzèó6±i¨AÛÈ€ÂUâ|I$c tU|5qä7_Ú¥¦Šg3[‚Y[ª’O¦#·j=Ñ]‰àèãƒFš(€—s®Ð8ñW¯5³ê"Æ+všQœø …À(<’§JCÑ&Ò…ÀžñnIeÛM¥‰'øŽzþ”·Ú$Ój‰©XêirÉ“÷aÖDÎ@ ÷<Òm91슗’ý¯VÓ<ËgÛ%¬Óy3 ÛTm ô#$~5?„žFðå–èDh"Q/¸°÷©ît›‰õ{ÿµ®Ëhž"†>_v76At½jéwÚ5µ½½K‹x¾XŰªäžNyëMµË`ê-Þ³s¥qci¦Ëpöñ¤¬Dª «gžü?á!Žhí>Ë ‘îb3lrWbŽp ÎxÇÖ³ó$Þ:¿·´»HXÙE»+¸’ºr0FG¯Z¿7‡ä·k'Òï~Ë-´F"dÌYœÃ#œóœ÷¡¨­Åv5u›Éu môç1\[™¤ódñüÊ:Lþ5 j†×MwÓì$gkö…â’PNíÿ1žý» ¿6™tÚò^ xb1N­DŠHÙp•‚0¼sÆ=:RØéÚ–§r+ìf¹7 3’%qË mçœã‘NÈ57ŠôÈåuvœˆî>Í#ˆb>@Ã60:Ö¬Ò-¼3\J͵T±'ì9®rïGÔî4rÖ;hŒ——žt_½åùyÄâ©Å+¡]›G]°m:°îVwÛ¬d»r6œŒ¦*;­FÝ:H­ne†i÷" y‹¾vã#×ÔVN»cmep–Ð<ú}ÌØˆÎ14RIÜzž3Vu;MVkëTév÷#Ã5¡˜|ªÄÁˆÁn­BÙÆIüiŒŸn*2rOô)\÷ú{Ó6ã9ȘîÁè*i'#œ~÷\p­žÿJiäcŒzæ˜gדJaaÀÏÒ‰=‰úæ ÞzztæšB˜±9ÏåYúŽèíKTš¸íϯãTîÁ6Ì9ïV·Ê1ù'øò5Z<„lÿs¥OŒõþ÷ô5å’z#ô5ÖŒ !oÝGŽœùš¹$Àª±¨HãÇ9ÿ:³–äñqCOÇ÷OçE?h¢ ®S×µ¨7üHÕ ÊñÿľԕSÃf>à*„z¬Vö1 nXYÉæBwãŸ|F2?××N>$Ý à¶l~¸šñ Ž{uõ¬±÷Œº?1çðý…ÄW1O’Çq7œûœðþ£Ó·åO]Â7µ‘!!­†Ø‰rJg9ïß<Ö› s‘MPrù=ý+ ³[#>ÛF±µ¼šî hãžbwºŽNzÕ››hn hgŠ9cn]Að©þ]øÎ)ã9½ª]À£ö SpX|¸°bRƒ AÚŸ¤6ˆ ‰#AÀT\ø~5+7ÊB± Ó8éAR0'µ-F`fš@ïÞžG4½€ë@°ÛLo½ÇJ‘ÎN1MaéEÊDŽõHŒÌE]qž{U&ȾžµœiŠ£2õéNÏÎÃÇëLRD›³ÅJFy©)Šë•ü)‡€*RN1Æ}*‘{yÇJ0rE(ž±+GuI?ˆ0ÚH$`gÚ¶5Xílü$h·eŽ ¨Oš#O×#¦jeF™¯ ©,{âu”g«Š“͉]UäEvûªXdý=k›ðÄ jº´B#™Òhö@É2qøàÕ{G¶]cT±Õìg–æ{­ÐIäß6°.ßÃÖŸ&ás¨ó%1îA!• xä•¢WBã’7 ¨®^Õ!}fêÏS[Å»ûwŸÈŽÉ¡ @0=©4¤xæLmÎw+‘Ö8›ÄS°’Tx7ZÏä—EAÝÈi íÖ¤žKm?Xµ–{y ,C”€ÈÁ)À<ãÖ… ÙÕ bDc·F,1Y7ºÜ&Òl“Ë6·I)—æÊŒŒôæ¹Ë³Ëáí/³Ë#‹yc Ñ[hÈ+Ž[Ó§~j]:Wk¯ ï·ºSoo$rïþBP(ÉÇr 5 çV÷pÂ"’ûìð<Çg »œ.:ŸNÕoíVþ`F¹ˆI'(¥À-ôõ® ˶]%—oµ#H†ûc,üíÇLWDvãZ¿µ½³½X.„FÙ­ám¦0£ •\}(ägOu©éöÌb¸¿¶†Uê²LªGàM\Æñ’¥qºçÙ^†7Ò®d·ˆý®âXmšC,¸ù8è:õÇJÞ¹Õ®-tû¦ÓdÙ;F³)€¹pGÍÉíéPᵆŸsFIÒËM"F½™œúÔÐ…%—•Îwñ\î¤ÑÛx®Öæý?оÈÑÄÌ…‘%Ý“ŸBWúÄŠÊ'};ØÀÚÉŠ)á``ÛCÃ;x>¢šÐ®zåtÞ¥HÇPxª±êmóulq€H•N3øÖ/„Œ1¶­kn Ã똣ÚB„`ËžÙÝT£ÑÄ>1’Ãìªtù\jJÁUp¥ ôõ!¨åWa©×â ‹æF¹ Xdýz¯-ˤ·>p·ÑF?™Ï|îàp9Ír·¨çK×lå…ÿµe¹sk…%Ÿ§”Pö¦ %ýªÉ{âLYåÒ£,$‘Cçry_Òš€\ì-Ì·`ãpeçñ©<ÈÙÝU•ˆá€9ÇÖ°´øâ> oì8Ö)Ý„aSgï6ã$qÎGZ£kåLÞûF9âæëä*Q6Áøê[{óK”.uk"6@ù†1ÁÎ+2 Bæ]vòÉM 6é,dpK1a†<ÿwÒ¹«+t¶ðýÕÜŽdKö…ƒµ·›œQ´çéš·ºtš¦¬Öpí·¹ÓTñ*¹@N1ô§Ékƒg[nÒ xÚ`©#(,îP}ôŠq½ŸÎAŒW)o­ÜÞù‘®žñÊ+‡N¡ºúS –ÖÛDÓá‘eò~Ý4)ƒå•Ëí$®ÒÎ)8βif †%‘]¹iÚ¸<Ž9íÅ;;X–Âóž½k‹‚DþÅðïšXIk¨ˆÛz•(þ9öÛúT¯Iyâ™­bc~Ê븴@6Þß{?>@¹×¤ˆw2º:óÒ•¦ˆ®C.ß¼I#ë\]¢h×z%ýͳ]Íþ€a’ˆ…CÙH 2Û»òiš~™§É¨xyMÌm§:݈gÂà6G'!±Ÿð¦©ŠçlóG"VuTàï$íÍ?ÌGÕÁR20A¸+o2ÛAÐåž+IJ´º™gbbÑd·–J‘Èúqš¿si§¼Ú F³=¼—r±«Á•³• `#¶9¤á¨\ê%º‚Þ%’i4f¥V'Voˆµ;+@º¿³HžH‚$Œ<zæîã²M1ÔÛ --5¥;[ÂDH'û¼‘Zþ*òcðMÌPG±d‰Ò2P@ ÔqBšô: òÓ~ÍÄ ÆOµ8³œw®>öK)õÛȵ9®R »hÖÑÒ-À®à§i*Ùúv¢èGoâèJ!»3OeXKÕáÕ»¦:öÎhä ›°,s×Ó֣ʶIÀ­`øºÚ8¬áÖD*óéÓ$ÄmÉxó†_Èçð¬»ëtÒ´ÝOŠÑ§2ß¼1‚È$n9PÇŽÂ’õìu—3\Ç,~E¿šŒê†j÷nzãÒ¬‘–Jä¯RÂÚÏEkk·–)5U‘ÎÑ‚I Ûž•[P0›_\µäž}­â›vûC ‡jœuÜ1ìiòçf\ï ÇcÞ—û¿_Z㯦·¸ñ5ý®¡ö@aAdåF ‘ó2ïnÏéRÏqöoÀ¯<—),©ysx&HdèTŽI÷£\ÇXä‚yœšRp2ãÞ¹Í^æ&ñ zÔ¶º|¶ÌQ„¦%yw`‚ÃAžõ—er¶öÞžâöO"Iî"yeœíuùöî$àô4(¶‚ç[stmR7K.æ DC$dã'' ïRJ‰qnоB‘ƒµŠœ}F pí{»ÃóI¡0òµ‘Ÿ´|³(]¹ÎJã5ÐxÆi-´4’+‰ae¹„oŽM¤‚àî0M;ú’Ú¬Z XiÖ¶¬¶R—PûËßïÏcÏâ=ëT« .3–Éâ¹;­ÉªO£É¬ÉivŠöòÏ!ÜÄ–ËîÈ GœÒêMwsyygm}p×Ñù&Ý£Ÿdj„ —“ó\cùn:¶$tϵ1¹\`ä{u®[P²ßx…bÔî¢KXæcaò¶Æ<’ #Ö‹‹ÛýKXŽÆ+ĵ §$ñƒ)Mò6rÜqéG# C/*¶@ô¤hÆÕÀbHäb¹û˜õ9µ†±þ×’ ºjͺQ™O ðO5šEÆ«¬xzY5)­äŸO31ˆ®ÝÃa8wÏ4(_¨sx8¹ÀÛÒ¤Á#<ý)6¨Ãó“G$ýj #898úÔdüØçÞŸ!äÁ8Æ:Ô-Á*Á祄fþöqÛšD*_o ŽÙ¥lg<~"˜¤y›€Ça@#¹$ôÍ4ñÈçžiäž:{œPyè:ô cƒ€S°08Vd9Î@¾ôx?ž)ì0Ä峎˜¦ Ÿ\‘LBÁÀüEBI{œ“ÇùÔN½ùf˜: ÅV|/ œÕ™>`:çëP:AôÍR$„ã×Z†à~áÏ·j™—èGÖ¡˜%Á§LÕÅÈûYäoæ Œ€¥1ÎÓýjËÆ7 ßÞÿ¬ƒï¶pqú×Z0e˜Ü¡ãUõ«Qd1?Jª€,PúÌÕÈñ’CÖ†4Yù?¾´T^Zz~´TXgµx“#â2d|­¤®l‰›üE5ÈÜ:–Ï¥OâpËãûxWÒ¥û‰cÏþ„*6Pp}=ë,Oñ ¡ðœ uïÆ)à&’Yá…âŽIZfØ€Ÿ¼pN? jB v5ÎjBF0qšFÉâªG{)Õ®,®"ò‚(’È•z¡·¸«ä©I!'Š•y'ÕFIå]NÔ½»Æìóçî0#|ŸÊ­P… ÷¤àœ=©ÝqH@ÇJ1¿ŸÏÖ¤>é‡=i1¢j›ߟ¥^u8â©7úÓÓ ‰ÓŽüT€óŒœS …8ÀÇ¥ Æ{óR['ÆxÏ&™´çæ§ãÏ4ÁÍR!‘ã<Ò€9¥ÞŽŽ*„ œàôô©T®:ÓT}1O Ï{Ó%A†ÇnÕ ëÇJ9Éè~•)¯NzS!ÀsPÜÜÃenóO*Å s€2j~Ý5‡ã(c“ÂZŽä,[Ǩ#EWvÑßh:n©&ã’B\BÈä0jÊšË^Ócfÿ„–ß쩚öÜ»3WX°[Ú[Û=ıÙ$ìcÁQò©äàúS¼DEß‚¯ä’Œ½©qƒ §Áô ÖŠé¤ÉÑ“ÙZêe–K½R)† on0í’I5®ToûÞ¼V<Òȉgh‘ù±ÚÇ+4¤ã,>UãèyªÐøŠ{Ù4ñif›îá‘ó,¤ÙVS€sÉ©i±«#£ÃºqèqMØQÛdp‡¿qucc²Þ(ç»’X˜ÈÄÇGœôÁ<©Àãô«Z¡q©X¼×ż`FXçi*NOPHâ“‹Z…î\¹¼‚Ê#=Ôé k½Î{U¯¼G8ëŽ rž#ž}SÃúŒ–«µ†S–c½Š8Ü@éÔwëíWîu{¿¶ÞÛØÙù­iä'Ìv xãó×ÚŽ]sFêþÖÆKu¸¸HžâAA.Þ‚®`„ÝÓ¡®wÅ=Fk N8'9=Ö³{oªÁÁÃ%à·s¼‚¹ c9ŽÔùtÐ.m9ÛÉ$à õ¨žþoã´$‰dBàãåìObp#XúµÖ¤ž#Ó­l¥·HåŽIdŒ¶â»z}ø÷ëI÷¤ñÝ[Ù†‰n™<Æ`»v‡Mß{'œü¸ïøÔòŒèX™2U±ž”s´ïl‘\¥ž¯¬.o<ím4×·LSiS¹òNXÂð8­Ý:[çYÅô ¤˜‰²>tÀä€H¯zZÓ«éÿÚz]ÆŸç´)2lfTÉÚzÊ¥³·’ÞÊšo1‘BïØv=¾”ûÉž Iæk2D\n< Ö¦»©4z<÷vÖ¢ÏQÚ Ä;'eÜ3ž8=:SIµam©»q7Ùí¦¹±)fÀ”è%Žxãž ˆHîC\Çü$WâËR¼¸‚ÕමkUE-¹¤ó‚sÆ0ߥMq}¨èºdîö0Çm‘¤R`‘·ßfEbp§¦åG#ΑÈO^ TºÔm¬^%¹œÄgq`ƒó1è7O¸k½:9f’Ú]˸< ¹g¨ü+š¼šïW‹CÕ?Ñ–Îkø]" |À !rÙÁ8ê1Å(ÆïQ·¡Ù.q‚Äq×Ö“ùO*(K)=›¦G¾ `ũ귗³5¬fÚ¿³b2B³» õÀÅ-†³wqâ;›å·„DÏ‹gF4cîÈ­œ0=øâŽV:¹ç8ã 4Àd¯8Ís÷šÅí¦³wg3Z$Í®-ŸÊf$ƒ‚§æäAê*;WXŠâßMH šøYý¦áÖ,®I!PÃÎ{t£‘…ΗÁè{Ð\ï#Ëv9¬(5JMVÖÎh¡·yì åHÞb2‚8<›ÿ¯T\ÕŸB°Ö‰„@Ï‹Øãˆ³*n#rsôÈ£‘…ά¬ÍžA4Åš&ŸÉócó€ÎÌó§Z£¢Kq.•ÕÝÄSÿx¦ÀzÉÉÇZä¬ì:Šø†kc>“s$“Ç2.é-‹€2øä®n™¦£v&Ï@ÎGÞóœU;­VÊÊx!¹ºŽ'”…DcËÀ¨4Vº¹·7wÇ$Öꉷäí'“ÉûV!ºžÛTñeÞ"’[XáhÕùV2Ø?¯ãIGWq~âÇî)Y¶#1à(9'µbÁpúÌVa!ò¥²ûB‘œ«d yžÔï ê7ú¾–.¯Õa”|‚"ÙÈ,9ú QËÔ.\Óµ[]PI%•ÂΈŠS‘¸‘úÕ°çx\î ï\V™z4»=E­âYg—Z–Þ%ì ú ÅtšL÷Ó {h°•—°®8ÉÇ9iÊ6©¤§zAœíÏZç-Ú•õ°Žá# ð+ƒ‡Û¬E¬µŒÍeµìÞâ6XÛåe ?7#ž¼QÊÇs pq÷‡Z‰."™¶Å,nÁŠ|Œ#¨ã¸¬[]bæáô&òàTÔ¡g‘BÈÁ7psÈè:T¾»’þÒéæ‚Ú)b½– Œ¨%N õÉõ£•¥q^æÓ.rpô `xär s6šæ¥~âæÚÈ=—Úš ù„jH2nÏPGÝÅV“ÄÚ¬V÷½¡ŠÞÿìmûòä€ãÜ…W$®+måݽ¥¿›s4PÆ0 9~´ÈÚÙõÇkzŒÚ—†õûëX㸳Ø3›”†Ã)ɮͯM§µÔWö CÚ!0˸H7ÚI ’?:9\ݺ¸†ÞØÏ3ÇiÕä üMD³[IwµZ'œ&áÈ.ù⹯Myuá^ »=ª-<Á Rw'n9>ôø¶Åâ–’8Ô¹Ò¶îÆì1þ@P¢íp¹Ò“æ P =µei:pÓ4,5O²J#r2Ü©%‰xprk6ËY»Xt8ôí.*òÝ¥yÛvŽ#Üz¹ãHRm&ܘD’-ìGÉp8üèIÞÝÁµ¹¬të2#XÛç{~épÇÔñךž{K{´Q<HŠrÔ0èk üKöe¾[ý6[k›_/‰‰D„Á¤íR§ˆÌV÷Oqg"¼-/,Ž_Äçž8¥Ë$;£Zk+{ƒšÖ G÷eãgÓÒ¹½GAº¾¼Ô}2Âå§ù`¹‘°bL‚1œƒ“‘Ö¯ˆl®..,eEص™Õ¶Tqó šÁmq©%Õ¼°­Œi+0!ƒ†$.îqÒšRBvm¡ØÃ—-½¼Ò4+Ò<|Í€>÷¯J’çBÒîb¶[>ÖD¶_ÝùG öö¨ÿ·>Í’_XÝÛ(U)¼+y„¡FÒ~l0}i· [e»Ù\¤ÖÐùïP“9aó`ã#9¢Òa¡sû2ÌÍö—·F•âò˃³û¼vªw˜ëgºÊ?ôVÿG]¬|¼Ÿ¯NjEÖb7±Ûyå­MÔg‚F29Ï#µR´ñ…¤÷VHöW°Å{"icÂ9ôõ¢Ò £p/Ïž3ÿÖ¨öåXŒŽ0jÛ€ÙlT ¡={TŒ…†}sôªÏNO>µi±·$úT䟡ÏN(cEs í$ð3i uÉøa‘ÍVúãåŒ áh$^§®=sAަ„\Ç×Ò·8=Ǩ¡Ý»úƒÀ§mÚ p=éÝøò¦y;Ð"]ÍÓµ#¿^ÔˆÀp:})“£ÿ¯@ˆÕD`á;Œw¡Æãôíš\ŸÂ‘TêGá@ÈÈV<Œ{Óà»ó«¸=Àªç9ïŒ{S3ž¸³ýêc•còïƒN<ñŒâ£ÚCgÿ­@Æ’ n¼ÓN1Îvõ§²ås“­2(öF³6ÑÓùÓÖéÔ~Upyú •€'99÷5uëšb"e?Ó•¨Y ϶*Ës÷€ÏnI¨_g8¦+0$ "©\“äÈ0qŽ3Ö¯ºàqŒuªWI˜#±ÅZdœ“/;÷¿©ªª™]Àÿ ÏÓš¹/näòvþ´–zì-çöƒK$ñHÛÇnKG’Ø#yHŸ­i¦…YØÛ% dÊñí d¨ÀÏ椃Iµ²¸’xw—‘BÎ[ 3€3ØdÖ ÄÚÌÁºÕ._W³hæ‘"yâS\mGF$Há²29è* vê{½&k¹,ïmN%ÃI´Ooœ|§‘Œõ­ËŸiw—Msqj$•ö–$žvô?Z½5¬RZ¼ŠÑ:•e#‚QK™+4g-…´r­Û[=Í…Ó3¼ŒBnÚTàžÙÇá[>¸Š]&UŽ#—rñ²‰7¦áŒ”?ÝÍo}Ž”´‹µI@Héô¢;xmáCFƒ¢¢€áIÊêÃQ³$Á, ǰÍ)¨ÆYy#œ^jB•&89§°ëŽô¼û}h(…ùM†gÏ=*óŒæ©:âOÚÎF”÷#bsžM*Ÿ›? øÍ: 5(Ñ’ŽëÒšsÈ4âsÁíÒŒf¨ÌŒuUº“+‡oåNòl”‘J-XJË¢éqä­¼’”‡UÎÓQ“ÏéK¬ö/mtñ%”/&Àwå‰>¹ÔÃ_Ò·ÛÂoíüÉÁhǘ9Áóç§Ö§û}›ÞU¸‰¦ÎÓñ@Î>¸íCrêG'ªéQiÂÊÎ}Jâ(žêKƒpÑ@Ùθ#’ÄŒÖ÷‡§»˜]¬Ò´ö©([Yš:íàÀ<ŽkZYá·]óÉi»»€2~½é¶÷öwžÞî £‰ JÏ®:t4Ü›Ak3 ›PŠ-Næ[Ö.Ð")Pä‚H$gŸJ´Úëáw¥yïÇ3Æ ±Ð°*@<õ«°j62ÛÉqì[ÆO˜ë(*ŸSÚªËâ-&'€>£nWdV nœžßýz/!Yêz4z µV»¸„A(™LAyuèNAªSxb å–S|’=ȹYF×g§åÚ´a¼_>饻¶0ÂÀœ†ÜüÇ?n*{KûKÖsÌr•Á!O v${Ò»[È¡¨hK¨êvW‹wqo%¨ ˜êqsØâ‹_YÚjÝÛ\^"HæSl%>QcÔãÞµˆ*À®ÞéáþQÀ JZX,sÿðŠXÿfM§Éuxð<¾tY“’~B“ëWJŽ&[Wiu"œ‹Éwoö'ð­3žIäã>´.I€â‡&ÂÆY®á?³Jå„0fPO\ð§8³¼§Gq i—3\ÜÍ5º|±Ì~X_8Ç9®Ñ¡E¹‚=EWd!v¯nù§ÌÒWf4>´uõ”ó\Oì†IC°ÈrrYp9Áü)"ðù‚Å¡‹UÔ`á–Y%ÜFpF òxÇò­Ô8^yÇNiŸ9fÚŽy¥ÎÇbŽ‘¢ZèÚ|vvÛš8Áùœ‚[''?‰¬xü(bT¾Kxîöñ# °sŸrz×L™ ÈÚGÎiãæëLP¦ÖÀâŒqáøSUmB »ÈD­æKIˆä~>b1׎qÖ–ßÃöë«& óÜÊñ‡¤¬ Ç¼å±Æ2x­Q€½I_ZD]¨ÇN;Ræc±Îêék©ø—L± ¾âÖCu)ÁP ž‡-·j¹ªxz Vö 廹²¼…|±-»€Y Î ‚+M-Ñ%–`‹æ>2@äâ¥HÉ=½©ó5kŒ}GÃËwqg:ß^Á5²üȤ2‘ÎqÖ£µð¼V¶V–Ë©^ùvÓ¿PÇ r¥nüì 1ëŠnòãääOb£×s»XV3t Íí ¸žhËþøƒ·=píïYv[iŒQêwCJÞÍöPW¯ÝÝ×oµté‘bÆ}i¨®‹±a’@ôs±ò™:ƒýˆ%E¿škrH‚Ý× “œSîiéáû_´ês½ÅËhFc™NÜcãŒ+Y²7´wéHÁÀáFIÏ'ŒRæ{ŠÝ [O ­­Ô+ªßI$0˜?xW•=ÝíÖ´ô}* +Oû ÜâØ O²5±Ô®vÉx/Š¡,ãŸîôÈ•uï/LAHÛÌ º:ñÖŸ;AcçÂépº°kùÉÔ‚y¿"ü›pÞ=)âk)íµ;Ù/¥¸‡ÉóJÚ½x¾prsœ èX0PÊ{óÇ8¤ft—¿<Š|Ì,Žyô¹´[6ëWžágQ‘á\…ôã'ÔÒ¦q§%ãja™í>Ë´Û€2AÎzäæ·¾f9OsÒ’PDžǦ““ Ô~¹µMZê{_NGˆ¹·’6ÆF3ÁàsWüI§\kZ[Z\f$¢B»¶ì9}@­B›ˆ-‘´gƒŠRŽ0AëG;½Ã•ZÇ3?‡o5 –Ô/Çö”¾YI jÃ圦SÉ$ýj[‹MvãD’ÞMF¼.˜xã1 Ààç‘éŠÞÚÙÎáÇj‡˜W%º¨ëG;‘ËŸ ê-¤ê¶‹shs2ÏØY@pTœóÓåS%ðþ³&£ý¡qf«o—€6c’>WöÏ_ZëX1Wåw™¤`r=1ÛžiûFˆÁ:v±ªi ¡uf·QɰU€ÜŒ[>¸è:T²éwš„÷÷M3KdÖp¤n]@l’Ä;ãŠÚ!p¸#§aÖ¤TÊŽ¹sK™…‘ÌYiÚÚ]Au~Ö ±{f;籑ŒüµCÃÐ]jžÑîhc³´u™ JÍ#”ÎìÓ9®²öº·– ´R­×‘PéÚm¶Ÿn¶ÖðˆáÜ[j“€OÖ«ÛÌ\¦¬r†Aó¤g¦ E!,^iJì”(Ë{ŽÔޤgƒéY²†m$ äãéL’6Ào˜‘ÇZ˜gòíž”Žß»Úÿ ì©"’¸>£¥0g’¸?ì“S²‚8ÁÇlu¨þñ%QLb}z{Ó™x ŸÖ•T© qN`p:sLD`‘ŒtéŒÓ$èxÏ?•:@Cdð=»P~t úu#¥GƒÏ8üiP–ÎT¯=ÏZw@>oÒ—iÝׯµ 2yr1IŒbG'Ò€¤uõª“ȱ•Ü2Xí«7'óÞ o› ~¢˜•çæhÔ³!q»Óè*¤ÕÌÑË£€Û4žQ 2ÙöéŠÇE:î¡$V“ÿ¤iб¼‘‡Æ2z0¨n-.õH­”Y\Û™t©m‹J ms·ývŸÒ¹ùQµÙÒÙjvº‰@Ϻ0¤«¡R ƒƒØŠ§©ëði®Qíî. jS ‚"Rp dûž”ÏùâÞC>‹œûTŒ¤È@ëòŽŸãY%µ½±ƒW¿€Ûµ­Åª¬«&C©^>\prz•ÍaÝÚæ¨×”Ý,BÎQþ˜m³¨ÚÁwÇPE/‡o"¼Òá¶6È&’?,¹|äŸsÍeÜé:´º¿Ú-¥µ[_µÇxV@ÛóåìaÇÀÍjøwI¹Òôé-îeó;ʦ0F7ØçÜšMFÚ ^æ¨ “Ϧ)ݽºQœcƒBäÔ0šaúTŒxÎzu¦ŸZLdN S—ý`¢¯0ëT¤œz¨‘¥=ÆÆzäQù¿Zq=:ñMÏj‚Ù9 ŠfÓÏ¥Hp;R7#hÌÈniG“Na’æhæ=1T€vO)àwÅ0š˜sõ¦HäÈÅ9^¹4ÐFyëRã+ôæ€$©¬Ïý økQ6ÁŒÆÝ¶*žsŽØ­>{Žõ& ô稦ž·!£‡‚ò-SÂ/—§Ëü6-c B‡ ŽIÁþ´³GcªøgRšÂÒñî ”XÛŒd…ŒzWlQ³zÔª Ž•N§a(èrqymªè×éS g‚Hú6<¦,„‡Êy¨t "Xlõ "õîí®Ar\˜I,He±œ˜Ï5ÐI­é‘ ×ñ³Û+<±FC:…ëòŽjåÜZ…•½Ü¼¹H™8>Ô9;l #ÆÄ'†ÙÌ{Â\ÀÅvçv$^*½Í6§¨Ã¦OäI§ù-jË{‡ÎG‘Æ{æ¯_=‡‰Vm$\Ý)dfDÀp­Á À‚7Þ•»dœÜp7{ñG5’@ÕÙÇÄn¦:â˦]yf¾[6.BÛ‚sœžþ™ ÚÉomáû¡£Í!‡+sPáŒ{rG~{×h3žs­Jþ=hs …æy:x‚;kI7M,2Få ¸ï´Æ¯Å3ŧÝêÖšÚßyj¡.ç—žtAîI$‚]Ê3RHQ–Â¥¦Øïbá$€F6÷æ”üê1ÅVÓ5}WOŠòÙ[É|…Þ»OŽŸ…]ã©¿QCZ€žcËÓ4Å;Œçš¨u‹Aª 8yÏ6@b‘3*20Õ«»ˆí-dº™cw6Ô,qôÑf+’6OÁ¡²ch=ò)U‹…e9VuìçœÒ £y„–àvŠ ¤JƒÁŸ­4/$ôÏjãJ<}(³Û¦*9®b‚æ$^rU ¡aÀÏ$ ƧÓ\Ñ`¹!»d:šrǹÃgÜ{ÒðÜÓ†ÒÀqô .4®äøõ¤¯P}éÌpp§8(Û…VÀö ì#ÛŒç­ ¹m ÔåÂsôæ£de—*O8ëÒ‹ vÌ19œ ŒŠ»þtõÎF3¨ W#%G=©% YI¾EH“Œ‘ƒýî´0NSLW+9•vŒƒè:TÅIù€þUKWÔbÑô«‹û„wŽÜÂ1¹ˆÏj±ÇkÀBÑ[iŒóýh×p¹!\'޹¤w \ñK•<’0}©YUY[$ŽE à+ó`xæØmÇqÖ³µ-Wû>Ý\Æ%Ë|Ã8Ú½Y¿ý*ú·?{½h°À†nAÏjp\w?•P¶KݹëHà3ncÜšCŒ?P)INdzS‡8뎴¤‚F'9ëÍ'Îc$)VùKg4£åàóŒô¦´±Ç;ºª®Kôõ®aüo`Á¼«;é¿aÿYy<¨üùU(·°®u[àŽ£Þ˜Ê@$Ïjfð̌ˌt9§)$f¤b0#îí>Ù¤?2àã"ªÏgi*E5Üi,…G` ϵ[‰Ã3rAçš` N6Œc¨¥Ø8È­1ÝÈ ¦23ÐÑæd¯ÍÐtÍ9ÎxôÅ4àŒóǵFÏ‚sÐŒÓZMêW ìsŠC… OŒPp¿¦«¸ìAª——Ñiñ‰nùeÖ%Ú7d±ÀZkÈ gùî{S•A*xóU·ìV%°psšym¥€aŒq@ÁÏ©B1ïQïýÙÚG¯JŒ?ÍŸ˜uë@HiS–éÖ¢“ü]¸3JóE;Š’Àu¢ábD ¶IæžÎôíÇJEbÏŒ}:SÊÙ³BÖ\7Ó ’ÊB‘õéR¾ñÓüÔYù°9õÍFÄ×ñ¤Tê2´ ŠEãÐúT8b¥Jv–j±Œd}3M Œ|gQŸ®EJñžÿ^¡aŽ£ÀU46æäçô‡Øœúç­#m¨ÂG$ƒÇ¶i€Œý9àûÔ¤àœŽNiÎØ0=qU§``q“À=© 9+ƒ´(aÚ’Ü~éryÿŠ¡òUr “N·?w>¿Ô×WCØ"âÞ<u¿XUî{ƒQ(ÿGCÛ üÅJ  ¿áI·`²¸™oîŸÊŠ~åõ¢Ø÷‰1³§†|²‚Oí”ÚÌ3ÿ,&$~•^G=j÷ÄVÓC` W‡$v\Z¥’r;RÅüHš ('Ž´Öcå¤f#½Jcq“Jä:Æ3üª¦£ak¨Ù½­Ü~d-Ë.8ät«œŽNNyæ£mÛNAúÒØc"·ŽÞÞ(¢DPª¸èžô?& ?9NTž  ^`7iÝœþ*¯ÊIɦ„ËŒN`PIǽ0Ü„ŒqÛ=ÍFFHFXN´×éRÐÈž•Na™Gl ºÃŽEU—™ÏðÖrØÖ‘¾sŠEËtænƒŒŒô äâ¼dóIÆ´Iÿ ¿ˆ”ðdÓõöÅlølÈþ Ó¼–E—ìhˆÈoŽõ#xrÉõ›ù᧸CŸ9‡È„ÐUÛ=.ÖÃM¾r@ª5‰PxÀ$ä~¤¤šûˆIÜæ¼9s„ô¢nb)7È]cÃD 60¹;Îà;tíV­µ›û‹-äÉý²S 볃…~G§+WâðÆ µµ¼?hŽ;Y ±¸l© ‚3œã“Å8xSM6Kd‚xãY¼ô+;FõSœŽü{Ó¼XY£òóS“N¸A¨ä‡UŽÕeX€,¤§QǩϭnêwSéZ:3̯pÏ>s&30]Äz çŸð‰i‘[ÝZ²Îñ\¸‘÷Ü1!Æ0Þç­_“N´ŸN6D%¶(Ç!Î@é’~i7Ôç®n5[õh¢fhlÔ Ð *ÙlƒÈùZ±íÓøƒN·7 ö÷š{ÎÑì 6 ‚{žôÝ?Iû'‰oPXH4Ùm#¾àH,Hå‹c [·ðžk=¼ñ[ʲ[ñ}¦CÁÇ^GŽ”ß* J—3[êÖZš<•[f°F怹$÷¨öÞ'‰ô¿ ³ip²ù|®~N•±©h–£À÷Q$1KŒŽ¹ëó)ð¤“C°yíç)(’Ù DË;ªzô?Ni)$9mþêCÓ¬äX互|Éòä*; ŒþŒ×[¤®¢¶!uV‰§Ø1ž©Ÿ—tPx,ëìjëøwM’úÎí­w\Y Žf$¨;ó|ÕØ\ê^¼±´€Ë4à(”È<’G¥-kcâëTðýî¡Ûæ¿´énãÆ ‰ÔØ”çíH#Ô£ðÝåÿöÁ’Ó^Ee“{1êv£¶+§Ó4Û;K|Ãf¶ï*1X†cìNN@ç¾)°hU’ϾŸK:•*ðêz§µ7$1 kûFðì ©Ë*Üï>aånQÀìGãT ºÔ¬ô&¸:»K%Ö m•ä ¢Þ°'8îWQ¥Û­¨·´D¤˜>f; ëÞ˜¾ÒU/£6HÉxû§FbUŽsÐôëž(æAfG¥C}h÷o»Y£.»s"ã͵sϵ]³¾´Õ­Ìö7qÍ%|ÈÎà¬?­%†•e¥Ûyvëg’I?Ri¶6+b.]Nùg”Í&Ô ¸à ÓP*OQœŽŸq¬6‰c­¶­4ò}¯É’Ý•BH†R„` îç?…_’êñÁ§»]Y®¾Ñ,ŽÖ$$‚yÁÅ\oiO#ÈöjÎÓyÇ$ýþìxÏZ¹I\KcžŸUÕ-?·ošøI Œí @Ñ.Ѹ!RHçåÝøÕÝQï´]2âôjtWÎq3Þ òàž{V¼z6ž‹vÉnH»'í İ\‚i¶¾Ó--%¶ŠÌ}žeØé#ܾœ“ÅO2 2-*ÓQ·ºœÝÝ í™Ë ÛÝO9çjðx¬½Bòòâv[mF[Oìï’8R4%ˆ@û˜°'œà`Ž•»a¤ØéQencVÀ$¹cÇA’Oô¬¿hâûL½šÆÁ%¾–`ÛY¹Ç<€p=i¦¹­{‹ÖÔo­þÛ2¡Ó£¸Œª®QòÀqß®zÔVúýÔZ-¯Ú6É=¸’MÁ …)õ$€+Pi6š[Þ^ب¸Hü¼;Á{©ÚpZWðÞ-”g†Ý³]²ŸCœÎ•Ð+”µÈîÓÀwñê/×BÑÖWN›iy=úiöS¬+‚L °RÌÄŸ”ä =ën]2Ò}<éó[¡¶%F=8íUnt.é`i¬͸ÛÙUôÈ9#ØÒMuŒ›ÛÝFËW³û]é†ÙÄ1UÌOÌ®Ìv#¥Yñ¡q ¨ŽæKp×0!d#¡×óü+NM&Âk”¹{T2!VVŒòœtÈíéSÞÚÙßAöKäIb”àÆãïÍ5%tÄуr÷wWZDI,Š7Üã2ÎY€Ràp1PÉ{{g{¯^5ç™ ŒJVØGòŸÝîàõŸÇµ>…¥Ï5´’ØÆæÝBÄJýÕô÷Z“û*Áµ)oŒ¸–/)Ë1î1‚¹Á㎔ùje‰5謮'_*èý“|jBäÍÛn1òã±çÞ¬x{PmBÍå{¥¸(ûN`1: «¯b TöÚŸgm,E2Ã(ÚTÎçhë…Éùyô«ViÉ7™¤2ÈòI¹ˆêM&ÓÐÎrÏQÕ®¯,1tU¥žEºµ)6ʤ ëÎÉ뻊Oí^5;¹&‚Hà¼k8¢òJየG-ž€7#Ú›¦éóªÅö8µ;;³8–t–v0(Ý—<0#8Ç?JßCÓã¶¼ƒÊfŽíÌ“#ÈÍ–=ÆOÓÒ©¸¡jck7wð­ö’×"S>›,ñÌb£/ 08Á ÁíïT4éM¦££Ü1ýÄ^gTQÈÆÂy®™´;CÛäžI%‹Éi^S¼&s´ÓúÕx|7aoqk25Á{h¼¨Á™ˆÙŸºGB?Â…%kÅ;+ÍvòÞ;õ·…á–ѦEfQó‘”UÁäu?ýjw†5 FÖWºž't`­ŒÆð±«)?‘ïWl<7§X¬ðFn¼ªPBÓ¹DVêgбa¤Zé¯s,-+ËrᤒVÜÍøI¸Ù‰^ç#ªÚO¨k7z¢ÜZÁ,v×Ví÷çòÎâcÏLŒgœVÞy6¯5õ½îtèÈE„ÂËãæõÈüsKqáÄ“UšöÚúþÌÍóOmI®àž2E2ßÃÖöÄ·ÖW1¬˜v¶GÄEñÄwãõæ›”Z°$î_Öµ¦ÙyÉÉ4Ò¤1+p71ÀÉôïøV-ö©¬X¦­§É-¢ÝFË€À–Ê‘»ýž¹ï[×Övš½“YÝ)h¤ÁvÖr#¡°l-"—ÄzÞ9½šÚkHíÄÓ;€ ¸#ÅJ6°Ùf;ÛæÖÒE€Ç%‰¹Q!ƒ£i$ôäÕk NýÞêÞ³<ñÚ‹…T÷lr 7'8#¨üªÜK{Ä™õKéÊÛ5©órÈ{p1ùæ–×ÃPÙóýá?dû',¿p8ÛÔdþ|Ñî¦TZî°Ú† ÐXfòxc2ØÆ}÷}x©¦½Ôî.d·O†{«2ŽPÌË“‚HÀžpzÕæðĤØéÂöña³‘^6 »²¿w'oj’ïð]jßÚ1Þ^[JèQíÓpÁçÜU^"Ô£&¥q}yŸf’Gi*Dã»ù²àCQÛj÷mâK>O³Æ‘ÈUa‘Yd‘1Ÿ1OCÏaÚ´¿°#]j]FÖöîÜÊTÏ dl‘‡BAp9ÅFúm¬¦ ÷3Éä³´P¶F½Ž3øgŠWˆõ/–P¤à}3Ò¹»rù­µ BÞ •„¯«“æ>Ìo#°Ço\V–™¤5ž©wåy+r@©-’2KŸrOOjŽ+›Ø–êhí/$ó'·a˜ãvP9+•n=z§ÕnGö D·ain—13ç ¬àú–¬·ˆ4ËH-WSž.'‰c)léÇ®hÕ<9öén'ƒPžÙg¶û<°ª©V ué÷»Uˆ´H^ÒÚ+åŠòX*Ë$+»Ž˜ô£Ü°ýãS•”.AÀÀâ¬ÆK('銬·d‘ÀÍ[ `qß5($7ã±£1*–À`Äö©Ø|ÝFOQž´Ò˃ÀÏNM>¤‘Ç’*¸ùXŒ}*Á ÊñžÕLtÇ^x dg¯ËÓ¸Í'EÈ}iåôÀ¦äŒš‹¨üñJ1œ’3šnqÉ=zRò œõÄ;)³Aç ‘Ÿ\Rl £ŸçKÎþøÇ<Ò˜<©ÁïÒ”N}±JH<ûóL!cl¨Æ=Z]ù\J‹''Ÿ\T·cëLeÎqƒíš3wΠú°ãð§!&?ÏÖÿVÁùÛúTˆ6´YéÅ;Øyoê(§ïRßþ þÈÓX …Õ­7{ ÔU,Iô«ß2¾IxÛ£dÍ“Ûí1ëXâíæšÝ­)lå Ï0»ÀÛß9£µB¡³%pÛ~öçŠ |cv8À¤Y¢™™DfS† rEVÕ®¥±Ñï.­ÓÌšYÕHê@È®K\è%(w}ºÒžXýkžÒüA)Òàžõžõ®nZ+w¶ƒ‡lŒàt=}*__*è·–ª“Éq5¬¥VÉ@Þ>€PâïaÞèØ+ó(Uf?0íõ«; õë—·×í´ÈtÍ8DÓ~æÞ6*ã*\§iäôÉÇA[é{ÆHâš92ŠŒ \úŽÕ-X/rU8çÒšÌKsžµ åO­3¿Z@ˆÎyÉúR‘N#qޏïWXdU<Ôç ¨–Æ”÷N;ã­9}3ÅçÍ ÜíÁÏ\â¡2L€yÒ6œ™©;R6:zûU™1ämíJÍçµ.9ã¥4 xù½jP3×5 ¦ J¸#Ÿ¯JdŽæ*jT8Èüê0r:ÔŠ?”Ôö¨o¯¢Óle½¹}Ä¥˜õãüj\|½þ¾µK^†Yü=¨Åã+ÛH¨RvškrY^ßÅš$šlÍv±G.p! ¸Œø«Skšl$´— Tfp¬U}ÝÄ äu®zÖ-GQÐü5*é³#Y̆Ev@vÊn#ƒœã¯)Ón!×ïLºÑXØïAŽGõu¦'‰ôİ·½2¹†w1ÆD.IeÎF1~STï-/áÔ´«û>X"– Y‚ ·8è úU4`hÖæÆ4–ÓPûK´ 2fãßæ(­Á¶u‘_Ãsh—ˆÿ¸te+òã99éÅsòêBûÅú2Ú½ÚÂÑÎX2:G Ú ‘œï[Z›j:EÝ–ðx˜n9^>o½íE¢“Ùêë ¹Íuû2ʆ5<²ç‚I9Ϧ+k#i9ÎøsOÔl’Þ Ý"Æ·O+íp¸Ý(·#=NM^ÑßT{ýF;ÙÅżR(‚Q—ž2Ëî?ZR[‚'Ôµ«])í…ÂÊíræ8„QÜØ'} g˯éz†|nx•[M‰²Efà vÎA8ïU¼dg‰ô  f¤jŠä…åXs€MMyá»›Øo.¼ø¡Ô¦’cÚ F†/ºy ä‚qßÚšŠ²lN÷ ½×Õ´˜¢·2´{ „³üÄn`ÊHä õ5iu/Dól‘ç‘ ]ŸÌòÙÈÀËÇï™À¦jN¹©é–ÑO&ž.c»Žàì.¨@Î $úñŠu¶“«Øk7’Ûý†[+É„íæ–ó"lÀ`|ÃŽ9ýÛ žçÄ–or¬·-öWT¸dˆ IôÁÒŸ ñ Ò–ÊíðˆÆdŒ•‰Ÿn5FçEÕ%‹ÄJ‰mGf<,&[åöÏzµŸªCâXïÂ[ií#†à3ÈÊXü¼s×Ú•¢š7WñiÉȤ•¼¸c_¼í‚p?zÕFñ Œv—‰¢kiV)ã*KÆÍŒdÜŽGº®™sq{§ß[il¤vò¤;UÕ”©ÁÁEejÔî¬u†O!nõ)bÄm!ÛGŒsŽIǧjQQê6Í7Öàh—my$1b"EPH$ƒŒr={V‡µ5HÐ"½–äIs#ˆ™ *øÝ•œýqíZ÷VzÌZÜZ•‚Û¿›n°\Á$¤Á$2§8Ük:ÇCÖ#³Ñ`¸Ž×6O,€LÜ© 2>^¿1ãØzÕ%©y|S¦ ±yÆ?´}˜Ê-Ø"Iœm$Z¸úíŒ:ˆ³s&á*ÀòÉD‘†UI÷Ȭ‰4=TéW¶é¿.£ö´Ì§Dð~^ühÕ´­nòþY †×Ë[˜'„y¥7lÆàÀ/'9äç€0)Z7¦Ö,ìgÖ¤’k·ûÃ:÷,cnA@;É¥!±¢´w>l²7––Ì%¾b^G>õRïD¿º#-ÀÔ¢Tˆ™&Ì·Ëø÷¤¼Ñu9$ÒïàK'º¶€Ã4±1º¿u±r½qE¢“Eâ­5…™®íš¶ìÛ¶õw¥‹Åštëjí.$0«É*‰3¬zI>›¨Ë«è×~UªÇh¯ç*Ê@—Q·œ~öªK j‰¦G¥¯˜š§Û¿×6 ï-·îõçZ6 ³E¼Kaá·s )"ÛÉ'UÎ^¹<‘Èâ>'‚G¸Ä3yH b‘·Ëc¨¤±ÒµVèÅötû›´n“p–"y`<ôäUk½RšÇ]…#·}p$…¼Ã…]ª9ùzü¹üh´Bì¹oâ:ìú9µ¹Ý›å’§ ž}õ>¯öv¶‰nÇ;KþŠè2âL6 9™¤ŠÖúÜ_€ÚÝÅ“qmèÈ` `ƒŸZv«ìâ×ìQÛ8i–F*JàýÖÁÁÉ´º°É¬/aÔlÒâ) ‰ò>e*A‚1ÔƒX^¿~yžâd@C<’íÀîx¥ièZ}ö›¦½¬ë2Ë#ÄQÉ‹ äqË{Ö]ž¬Yi¶¶Í £º]É,„NAÅÊÅrÌÇ8§eªÐÙjߨGwÝ ‰¹NÓ»Üc×­dÇâýa$Ò„˜²+i0Xq׎joi×ÚfжwqÃæÂ[aIIÉ9$Ž2O½bÛèZ¼Z^™i%µ¹{mA®œ­ÇrÄÇ_Ÿô¡(ÝÜ5: MrÂ{7»IÈŠ9<¦ 6í#9$Ž1U¯5«i4ƒp·³Û ˜BÒ,z8`6•#ŒôäwªÙš”PêdXA)ŸP[˜Á‘XìùFyà0Û‘š¯.“©Ë¥jveBó_,ñ·žåÞ¬s逸¡F!©³wâ?N’å'¹mÐm2ªFÎcÜ2 À8§‰p‘É›‘€e ðAïXØÞIu®8³,·–‰ @:å˜+ßý¿Ò­iñê¶ï¤Ù­¬+d¶Án‹¶]]@.:ŠV]spü½œÒ09ýzÓò¸9ííMØ “ŒóŒTZBØ FAÏ9öéL'%œ¨Þ@ÁÈ5jDVîv‘Îi8ݸpÝÉâÜ7H·eò*LêJõàJpŒyÉc’sÖ¤Æ×?(ô9É4Ä7 Ç¡Å4)g$íS"å>nqÜ÷§ð?(üé®c<BE" “œ²cç8:zÐyëÈút¦vwuõÅG$|ýúÕ±÷ÏŽ Ëtõ£p¹O` €¿5®ìü™?]*ëQ9ÁÆ>”†R–S9#ÈsÇ¡ÇZ³ònäþ½(ÆzôÇ\Ò±W"UíŽEJ£cðÀ ©GÁ÷¥Q•ÛÄš¤KGáQ1m¼ƒéÅLxÜ@ŸjŒp¦l ƒÀíQÊ‘÷A÷©É=‡×ŠiRG÷\.Ð:}hÆz‘î*fxÁúS_îgùS= ç…¡pž£Ó¥);±œ€=és€Ï¿4€o‘Œç¸£‰${bÏ9Î>´™öÿP@ÇñŒškýÐ@9úTƒ$ÿ:ƒ¼{š¯Ÿ›ø¿*p$c‚¥#¾€Swgû¿•TXgÞ£e;ºøÔƒŽÃðÖŸþµˆ‚ÜÖ£•O_ÌÔå»çô¨Xäõäb™DLL{cF3¸‘SöÝšiÉÁ;¹úP"Xdðj»¢Æ3ì*ë#duüÅWxœ‚qÏni¡^>íÍA4 ÆÇàÕß"hÀó‚äŒå[Šd¨|—Àþ‚*®+4¤,N1óy˜éî)Ðåyì 1QÜ.YÆ:98üEL§ƒÁ-Çâ+«¡‰d³þÙþU``<`çi¨˜Þ1ƒæŸäiìpœsÅUɳÊ?ßTøö4R¸Ïwø›—Àêz m˜P.#8ý+Í4·³H|>Öl±¾Ù£‘WåÌÞ_9õ9½Gâ*†ðªI "#ñþË«JÊ’· ±Gò”p}ª±NÖ"‚Üãü"Ö2 –´I©GmåϨ]¤N$¶y$š–þöïUð­äÐÙ2]E.$µ ¸¶ÉåÈä]Xˆ.p-Ýj¬­VÞÚŠç¹'¿|×–·:,p+xö÷ñëšV‘zÖRHÉ5§–A28‘W¶>é>æ·5‹mSûB;Ë DœMlmg‰äÙåäî žøÉÍtý½1Iò²ûT¹ë°Ò9 6Ã_³’ÎTŽÑVh!Žò)\–“åÜ„pr¸ük[KÐ,ô¦º–Æ/-®X3å‰ÉÉÿ×ùzû÷¡ Èü'+ŽÖŒ.9¦‘œqS* ¬@9úSÃ`Ži 1œúÆ£#-š”‚ztúS~š¨ÜÞ/8⯰ÁüjÏúÄ=ù¬ç±¥=Äó£ç'ó¥58}1¶ ÑŠ:s×Ö†à(ê7p•R3!ÏOñ§ócÛÖ›\~]iøËd}*˜åäcœu§tSŽH¦‚1ïR§$}=)ˆPcR/×õ¦½“ü©à|ÀÏ‘yj@29ìj4`À'žyþU&ü.ïAÛžõH– „ä`°îq‘íN8tR0yüª6fùŽÇJ–É›Ä6ßObVêK˜@gŽ;Y€z0}iS^†MBÚÖ(&qqf×q¾Ð·œò+ ¿okÿc¹··qm3F_±Æ0íY³¸[wE‘®c¸”éóÇ$‹ÀgVv?Ö¼ˆ›ÜÝѵ8µ½-A"x¢™I ü‘‚G8úVª dÜÛ¼ßLÔ%Cðõ”sÇmoqçvb*[ H ŒžzŽ•Ûhi4{E5ò^°‘ˆ•Og…êrGLÒ”l š.Â(drI–Át[GÔµt›kõˆ¢Ïp‚Ea_Ü Ýz÷M»¿’ÕÕ$€G)Œ¾íÛ˜žø {Õ_\—´ðþœgd¶k|FÅLŽ¥F7@sŠ9t ”Ó˜ŒxŽWó!ò×;sÜú:ÓÇÍžøúWýóÅh¦îB!ÖM°—8ó¢o_O¤ð¤ ýµ¬ÊúÄ“%쑈$›*WjüÛ}{fŽMçZî±Ç#¾B¦I'Ð Õ]2êK»fk¨–)’B¬£ Á=?:j=?#ÐÇ8>âŒd€y5Äê×q_k檶vçOGµw$+Îö  ÃÖ·®®³´y_Q`±,{®|£)uã$Ó#¿j—®¹U9„’£‚3מ•l‡ù[ Ÿjå<3{k«ySÞê2¦¯Ó‡ƒÏ*T‚@O/¡]¾Ô’¾£:àG˜FI4¤€9®KÕ#_Ùƒ©´‹qáåyð&`ãn“´Ž@Æ3ƒÅhø;dð]Ý›»©åŽækrrãh•8ìpzÓq²w:CÞ2 g9§œs\¾©ø²;;û¹-ìžÌ¼@ÌcG“qÜ 9ïYúŒ^;[½`ÁdtðÖ“ÌÙÞÄÌ n3“Bˆ\Ú¹×¥ƒX½°[ÖÚËíjÁÀ2rFÜcŽAæ´4‹³©i—Í„ÜD²lÎí¹ë\É–ñÄ×jäè$4¥†[ œŸ¨çñ¬û;ð¶Þ´›Q[k'Ó·w!PHaÎ2qš®K¡\ô"…F ç…Ú‡@®YwÓl´ùŽ­&¡i¾%0\—æpUÁ!ñÓ=+µfû²1Ÿ~• Yµ$ vä’8ç¥.öÎ69Éç:– ³Ûkr]ßÜ[êVÓ‘m ÎÑíL „(8mÜžõ§­ÞAew®C5ë šÂ9`F˜®_’œõÈ*¹s«yn£ˆC##†&U#jcsÎJ|×[[É4²mŽ5.Äž€ Ÿë\¥¥ß™¯xm—PgIôù6U˜*òFy9È­*7…µ3$›?Ñ›ø¶î8à~4œlÒ –ôÝBâþ?:[·‰Õ^Ò†2)ç>éö­TmÜôç“\½ŒÐÞ]ZZÜ˶Ûû6)!Mªç8r<‘ôÍgYÜM¨]h×··K‰tdå Ñ©Äe°Aäcžôù5 Ñ(€ne]Ç“ÔÑ"áF0sÅyäþDúf•æ¡/“±4srT„öå³×sþ5Þ;:i¸·v$`ÆYËÀãžÿZN6î:âqmi,æ3'–»Â äU4NcL‚ú8$7(8Èç¿åX^¼·Ôìm.çÕ]µ-çD׆w!8lñXÚ 0Þøm¢½”GsÂIšJ¹+òôSäÝÏBèü‘J198ÏJâ´}By5«1.¡,ÑÜÇp$”¶ØÜ«¥éŒãßÞ›k%ݾ‹w}>±tÊ/ʤ ›¯|Ž)r0¹Üà¤ã½U°¼{Ëvá1)vå²YÀolã8÷ËÞO}§é××+up–ò]ER\JXÅ#sç“בš“T–÷Oµ„0\ÞÆ¥Õú[´a2cW${×Gá˘îü7e,SËvÇFðÍ»ðN’î±Pοuw)u'¯8¦¡ ®wEH*AïÇÖ›!òÆ6$yàqÇJ«¤[Ë• SjöDc›ï ž3“œtϵ`øzãûLKus©Nº’]H²Aæí'—Ó@ç÷¥Ê;›Ú¯µb/aŽX”» I0å89ZÐRO rJóí)M½Ö—{ ÔÙŸT¹£ ò&C‚¾¹æ¯Û]Ü/‰,ÉÔæ—Ï»žU[÷!UI ª2G|Õ8k ®u¶—q\™¶G*ˆ¤1èW$wê9ê*Y" {ó\EÞ©‡u‰ÿ´'2ZêžTr£1ïAŽ;žÕÒ»OéŠÚ¦¥$‘#óæåŽO ;};T¸X.^[„òP¢nF<éOVr·EdŠ)!pñ8 ¬§‚q\&©¨ÞÝG­Ý&«%¤úmÃ,v±0І2Û¹ö¤£q¶wnåPðÄN¬—Õ[ûn 8ZÈRX™ÖcŒq׎½ÿZǼ½»†ï\„ßͶ+$¹‡‡çÎ8é•n[ãkáGÖ¶G-âY+™Jýã´qÛ<Óä¶QŒ¸Í;vì½¥so-åž¡§Â/šá/¡”·˜ ìu]Á—`vÁöª:]öªáû™µž=L2͉@R° ž¢Ÿ#$vC*px Žã#˜æ†b_ñLÑ“‘‚1늑=9ñ5Òb<`<ƒÒCúƒQM"¬0óŒcùÓ±<Û!×ùŽB$‰ ñšÑ#;–¼ïÖŠg—íE=}ñ U¾kûº-”ø‘úŠË2î9\àöÅløéC|>ñ ø•Üž}|¦¬K=¬/Àܲ}Å,^ÈX~£·§­5(NÍ riÛFî£âįÕÂt‘ÜÇ$cÇÝŽ ôâ¦1óÁ<Ž”†>ìsÆ:Òî#Ž~•$y å‰÷ FJ þtÈ7”!Ç–IéíH¢us´ÿ…4ç$äž(€/÷¦Iœ~utíüêc֘à À¤R+¶}ê•ØÉB8Æ{Õ÷ûÙ&¨ÞpËŒu5œö4†ãF^¹&žq»®)ç#ŠVäp8¨FŒwÉãøÓ”ñÎx¦KÁ÷ôÅR3IO#½.sÜŽôÜñÀ?•8 ž¼¤&tMU‘F3ŒÓ4Gâ{\ÚJðÌ–—ryP\»]¹ÇÈ*œ]ÉM '…´Yo&»šÊ)fœ1¤³VSCÒ£"]:ÛdjB%AôüÍeIãKtŽYN›~a‚ëì²È~GÈÙ9ÈüéïâëUƒQ’{;ÈeÓö™¡e¶œàŒcñ§i…Ñ º–-Élmų6ã–6“ëŠÐ´·†Ò†Ö8ÔaQT°®wþ ežX¿³ï‹¤à.Á–Œ÷ö÷©¤ñeƒEhcäFXƒƒo|’ 9eÔ.k+O¾¹ŠâæÒ)gˆb6‘Æi"Ñ´ØíVÑ,!ÈÛ‚mVõôÍ7P‡SÓ"¼‰H+‚Gô©u¸þ̺k ×’Æ,ñóãÖ–·°ô'm:ÅâŠ)¬ádˆæ51Œ!Ç¥,v:}¶£ö¤†¼¸p;zšâuÍ/N7µ"òòå^w‘Ùä( ³ÙïÓŠÙ½³Ðt·bÃ;\³.áóm ØÏªÊÄ"Çi{nà )µÔlô[ÜCiå#‰å\+“Ÿ•HêAªÍ⸟FÔo­í¦ÒO!Ë´É/(õ QÊÅsf{kiv¼ÑDÅA‘Ûøž”5¬›ØÁdfØ2kƒ’ßO‚æò}dµÐ†5µ”3çϹq–8'(`÷A>•ÐéšüFÏNµ‡N¹WJ¬'“hBï$‘•éïƒMǨîo=•´±*Ko ªò£/ÓÒ¢½°‹Pµ6Ó—±Õ7/÷OµYRJ€6óÏJÀñeÜði–‘¢—W°ÛÊGðÆÎ^zqëRµ`m R˜i\ã固UŸßÜéþÔ.mU¼Ä„€Àà¯mß…;=Í·³¼Œ‡HfÚÜ«(l0ú÷§ÉkÛH£lr”lÖ=´–ú}ãYXiѤÏl·_»m‚L|¼ñ×Þ¢]iofðýÓiË‹½ì’³äÀ|²ÄŽàVb¹´Övï)gµ„¹êÆ Iãü)e$>CÙÀÑîݰĻsëŒu¬Ë‹é ò,e– åhã”Ïù HÀ9î+5¼O«I¦ÅvšJo–ì@‹ço+ëÁã÷ö§Ë ¹ÓIcm/”d¶‰ÌXØY1ý=*}»‰ 7¨æ¹éüHðÏ2-„’Oo4ñ!%ƒ0ÎÅÚ'àt©Æºòk²i±Z1XŠ _x »†íÛ%z}éYŒ_h­«è÷–«\Jù³dmƒÔ{t«ÿeŽâí¼0]­ò†=@$g[TÕNšðE«ÜÍpÅ#Pv¨Ú rݸ¨/Ša£Ê–N#ÔY“æp làŒs÷O9§­…ÔØ[+(B"YÛªEÊmŒ ŸîñÅI-¼WP˜åŠ9GR® ÿ:ÎÒ5yuG¿[ùYN`m¯¼1ƒëéXÓøÎæÝoe<¦;+ ÃÔpHÁ_S‚8÷¡E¶GPú}¤°¬Omnѡܨc†8ü)³Åg BiÒH—GP6©éYxša.« î$2ØB'’ <Ô ã:Vnµª _Âzý¥Í¢Ãqm%Cù‹ó.å àñéÚ…poC¨u„°ˆÍ•³Ä~l”©>½>•c|f_/ÌU”.à€ŒãéTMôZv‰ÌÌÂ(áNÉ$€ÔœV ¹øM>×yj-|5ùÜ‘¼Iž”%p:Òly¦[+a4ø‰rãÜãšô]8)§Zܘ~^s‘ÇF×ıÏ%”ɶ{ëóaWœÙˆ<j»¤êGU·µ£Â¥C#oVVVà©##¸íI¦ ¢+]J†E’=:Õ\;:þìd1êj+í!§µ¾¦X”y•å‚D ’Žüààôç©×:ض׭4Ù,n?ÒKySMŒ@É4‡ÄBbyí^)'™£Ž6uçoÞl‚F8?§­5Ì2+ ®nf{§‰a6‘á‘€9,ÃÎ:v«’èºtZ|–é¶ëm/ß…b[ê?*ªž!·ºK1ö;—“<*Nr}z§™/‰ŒzmÝâéÓºYÎ`¸Rê xÆ[¾@ÈéCRbб‡4±j–çJ·6ªwÌCnzgëïZñA¤pB#8Ú«€>‚³tDßË;ÅnÑÛR9|ÀË6?ˆØzÖ¯™µ@9 œu¥®ÌeK­/NÔfï,ฒÝIb¿JûKkhº}£Z+nyjWw®=kžÔ—â¼ÉÐJòƲ°W+÷sÎ*×ÐG¡Ù£–O6EdY¿¼AïÍ:òÂ+‹ l¢e†7O(•LöãÚ²ßÅ Ûkqþ‚Ë˸¡ pxç¯j–ãÄqÛÝ˵¹wŽÓík·n8õÏ­–ÐEonÆ›"‰B ô`VŠ´ÔôÙþËc š„ "ÌʪTdI>®蚻êÚz\½œÖÅÐ0tl€r¤uÔþ&¶³šîÝl¯n$µUi1n¶yÎ}æR ŸC°ÔÖïôèÚqû’ öÈëÖ¬A¦ÚYØ}ŽÞKm¥L}CÔsÖ«6½fñÀöÂ[†–=V%Éòÿ¼sŠ#ñÃÙˆD’-â¹…Õ8%FH>„c½ðô mÊßý\L¸ŒÄ›¦bU=“ò¦)¿ðŽé™µ_³°[6ß¾ûsUÿá(²Ktð],_iû)QægÀ'ŒÖ¾£ åºÎXCã‰cØËìGZ2 hüÄž3·¥#Ê‘üÄÈÍ<Á$tö棚(*ÀãÒ¥± GYãù œ)ß¡“+ŒïA+°:Z Æ2\úP?ýT¹G¹¤QÉQÖ¨@GlŸÊ˜7gžHö©v’TœǵEü^ô¤\oÝ9læ’q·Z3à Æ[ß7ÓÒ r=1OÇ#‚})¤vÀãÚ€ŒüÊÍ~)wœã×4Õà‘œ¥ÔñÛÒ€''åéŽyéQžüþµ(`ÈúqLaÏ{óABnnÇðÍG»ù¾µ!\ Œã d­0±%qÍ4±ÝØã§4÷<à=)ŒÀŽÅ#f9*Ê1Û4Íİ Ÿ¦)]¸À#?ZanBî ;Áû¿CŒÔl1Îß8§!À ž â˜FyíøÐN{0l¼ÕY˜”8'õæ§lsUf`cq· î R%œµÀ ÷N áºÓ.?׸Ýןҟ í#ý¯Lv¨<Ï9Ù±Ïô®”ŒˆÔfy‰é•¨YÂFØ\á¹§Èv4Ì`QL`pËŽ¼Ö¨È—Ì>¦ŠfWÒŠ@}=â¥ßá mqœØN1Ž¿»jå´Öè֌ôÿdìõ„i4KôQ–ki§i¯ Òom¡Ò4æšô‰c»´eL~XÞ(Éê~ï_j¼Ln‘4›:ÝWQÔ„6ööñ­ÕÕÑ·ŽGÄ€(ïǸJƒÃ×WbÅõMWTˆÃs‚¨ØEˆ‚AžÜµ,–pßYÉ=Øo'Y–!¾R~FSêzr?:©i{hÚ^œ&yÚÉVæÙ²Øìãh8à§Oþ½rrû¶:/©ßÞêv†îîâ(à|å¸9éŒuªø—J€×Aƒí ²6lÇŒîàtªZ¨ŠÃCÓvZ]:ÛÍĪŒÍÁe¶¡tÈÖÅEæÁ+‰S×§ãØÕOìë±â ä:|2ZÝáÅáp/Ý„+ŒdôãëKá»-vÚ$¶ÔžÓÉ·ˆC‹%¤€Ì{qŽ)4­¡]N™Nyãñ¡ŽN1Æ:Ò(m€qœR“œcŒT a?LûÓIäÿ…8dçü)¾¿ã@ÈÜ`÷ÅgÞgzqÞ´Õ+ž٬籥=ÆcJR0£ž´öUëÏzVhÔhÇ\ÓeçŒÌSÐûÓX| ŸJ´fÈ:wãëRøÓz:ñ@'=þ•HLœ¸ŽjUô¨TA½Xzb™#”ü¹ÀÎiÍÈÉǵ&÷JzõÇ?J[ˆP1Æ}j®±m=Ö‡{ol¦š;GÌ1ÏçW{óiw§-Ó¿aT•„ÎZÛFÔ’}͆ßËÓíž BÈrÁ”/{Í,>½};KÓ.ßìÚ}ÂJ²);äT$¨+ŒÓ'&ºˆdYbWƒ£ ÊÊrõ.ÐËŸ›#Þ«“drx_R¹Òõ Sqnw¨ Àv1ÚS·ÿûšf§á}Nê}fA-¶ÝJâÆÓ˜ÊŒ}zŸÒ»'hÐì1 762OAKŒäcëOžAdr?ØZ©Ô䵨#O6Ëzîéê* ëVú\¶·‚îÂ&¶*êÞ\ñ“߸}CýŸ µá·³´B¾JGÔàAí€>æ°>Åm§ix—E4··€*,Fqó•?\×G­q}¨Ê–ÂÖ0LÐM+HC‡ “µq‚ uõ¥¹Ñ´ÇŽk„ÒmgœŸ7nЦFê}ýéÞۈȱðíÅö“¦_¯²ß ñópZPr0OPöÅk>s?ˆ Ôg» ²a0ÁŠíl¶yñ޵¨²Å½`Þ‚b¼ ÜªôÎ=*Ž«¨Ki-¥­ºD×7’2ÄebmRÄœsŽ?ZWlekË-FióC,ñAk¼Ê|à#”@]IÎOLTšþ‹s¬ZÁo Ò@b¸ŽãsÆ[%à8#½_±’iôøeº Šþð[¾ä ßÖAÕuFúítf`³v‚FŸvæ&î1Ð@9÷¡]?A sáÛÆ]B+[èáƒPbgWˆ³)+µŠrÎ;ô¥M hofšÖæ…ì’Ò8Þ2J„Î ;†~ñâ· ™f³I lÊ‘¿„ã¡úVV¯ªM§ÝéI Q<7w>L’ûƒilßîšW{ ηðÕý´úDñjQ³·û,™€Ÿ2<©ãæùOËZzö‘&µ¥ÜXEt¶þzìg)¿ zñ‘ZQK Ãæ¤¨ÑŽC†uõ§¤‘É‚¸*zr(»ÝÎÜø{QkË+«}V8eŠÜÚÎßgݽ2TàäZγ³U¼Ñô(o~×>›)3´qòÓÉeRǦrÿzí€P¬JŒûw¦ X·q‚~bióŒ-#ÃÚ†‹'5U“LBZ( zä“·~zséšÎÔ˜m?µ#çÚ¬ßÉá>bÛXnù¾÷µv&é_ˆ è{Ö/ˆ®o“Fiôyck ë´y~``N1ÁïëØf‹»ˆªú&¢š»ÞÙêI Ü*‹¸ÞáÙ@—Ÿ”ã×4ë¿Íy¯Zê]DzÖ_1ÄLmÆÍàò¹ç¥m,ñ#*I"$Œ2ªN a\ž¥â]ZÎËÄÒ"ZnÒä`Ü­ó+Nîzᇥæ{ ›Þ‘u©ù mxD’’'BË(Æ0pA㯥c/„o¡Ñ¬mâÔá[› ̶Ò>\sà ó÷5׬è‘G沓Œ1òƒêy5ºÄÊ8-ÐÕ-:KÇ[—ºPÊÞZÊÆ8÷8'ñ£™»•â›6¹Ó`XdHï’ê6µaÉX/Óæ¬êz$ò›´éã‚æÈ‘• #)löëWÚ.."¹xb’X³åJT¹ëƒÚ ×u)´{øã´ ŽpN:B{$¥-OHÕ/-,¤ŠêÔ_ÛN&ÜѰ‰¸e#'£zÕHt]z+=J¼°Ýy1“Ìò߀ÀíÓ­u3 ã GLÐrpA#¹ëB“Ac–ƒÃºÅž›}ca¨Ão¾m#.mÁ?2óÛÓÓ5Ô$eaE.YÔ ±QÉúS‡'hê9ëH ´•ôëI¶÷Ÿ¼Ñ.î|Se«¥Ä­š:Ù\0ÁÉÍYðî“u¤ØÍÌöòoæW‰H嘱'±5±½G§" ‡Ã×ú}–”Öo-Õ¬ÒË"ÊåQ¼Ìä ×`v õöªãošvŒ—ùUÖíwC¨?àj›.ÆŸ½´×B2d.ürcÒ£v'pèA«¼úl€wqº´FlnÑê:*lZ)ˆú¾áKiQ~ó!êEy?…ôm2ïÂú5äÖ0I<–áãœ"õü«×+˼|Ÿiræ+tŽûxþ”ñ &†ìÓ6ˆÁ…¬î-Ÿ,uõúÔÈ›ÀéJJÉvóžôb¼u®uÝÇ!G2j&êG~Ø4΄à öâ¡ÈÇ!°sùR«øÒ…Áæ %ˆûØôÅ,,NðNí¹ÅHÙ8#· QמiW!T¶ô¡'¾(-ŒÎÚì7ÄmYY˜GçÁ†xM¼Ñs}kŒ#º‹*ý¢–Idä)B6cû àzšî<3£É£i­gq$R9ä0Ì[œúZMAÛ÷qüÇ$…ŸSTæ“%#‰ÑY`ñl–í7Ûë4±Ü¤ìY@aòH§¦¯øªèÛÿe½À—û8ܼۜ#åÝáÎ3]0‰–TMÇ© ƒNeÎÁì:Ôskr¬y¼‹i“®6œsm ü¡Lüƒ–Ú=:þµô[ûñŽª¶—*éqN›åb7î"¶´Í"âÃVÔ®&š)"»”H¨±È@ Œ“èjˆbVÜgÙy"©Él+N¥,3ø§P³Õu)-#h#6_(s¸¡#ïgñ¨õ ‹vÕ¼KlnÔ±ÒãU20É ?æyw?$Ф§Ì¾£4*¡1þðñ’4ÔÂÇžI{o"èƒQ½km9´ÕÊ:yÀÀä+¹ÒÖ;mÚ8n%–Œm’lî`:œS®¦¶±Ž5ºhbŒÈ<Âæ'€=M\ãm9©”®4<Ó/Q4ÛõØZÿn³\í<‹wîÙÈ>™©u)b’×Å&Æqýš,£`Ñ>\s„¸Ûœw5Þù¾£§ª¨%p¸ôãùõ¸¬qêºKøâÚ[­$út2Z¾ãó¸f郂qŠ·®Ml³pÚ´—iguh‘ÚI ¹pWz•жqèkOÆ ð Ü ÛÈT„:–rÃ÷ÝÅuD2¿7ŒÓZ2Ê7wûÔ¹µAcŠIìdÔäŸYUkGÓ¡†tùz0GßÎ=úUM*Ù¢»ð¢ê7Ú­Äoæ.NÃ÷ÓŒôyÆ1è ¥-É_~hçŽ3ÀQØ 2a·“{Ãy%3ó¶ÐN9ãJ¯©Yh³øÏTƒR·WYm!1¨RÙœdü]+º ’pœ§®k2"h¼Cqª5Ò2Ë Â"T)$ÛŽO'µ ^ódØå—NG¹ðŶ­ šO³J“ùŽ2ÀÄt9ûƒNµÑ`Ô`ñE„`-ÛI *GͰa‡¯Í‘ù×w’rGéHÌ%‰Ÿ¥ã±ç°Â÷>¿Öí­Z;›³RùÒ$Ú®×kþ•%ìz|ºíî•=Üé,±[q°Üvœg#ž+³ºÔlôå…§¸H„®#OrzjºYØ8>†Ž~¡cŸÐ¢Óš;›½2êIâ¸)»1mEÀÇÊ¡@éÖ¹]n}:[]zÛTܺ¤R¹€8?ê² í·×¥ÙÏ?Ja‰]ÎðèséB–·‡ÔNŸy¯Ï¥uÕjBh¤c6zPŠ îÑŶ2í¸±Œžý+’ð¼ñ]Á óëhóynmÉÃnÇÍ¿-Øã°JîHÂ’ Ò«¦ŸkHÑÛB'ËËZ”ì†ÑÁéW6Æ/“4E‡š˜ó:¤cÛµVÒæ]OSŽIµ÷·ÔÒé¼Û@¬ˆcòuÆÜ t¯DVÄ#}– ŽGî‡N8 ÙÛ-Û\‹x|ìcÍòÆì}zÕ:ˆ9IYW+ÇAÀæ„ø@Z\äqÓŠN^3Y$Y"àd×Ö£rW9éNÎx=>´›\ c¦„,vÓpqÓ©§¬|gœ*B §=(‘+ÏãïMÁÎ0sõ©™XàqïL nÀþT Œ†QÉæ›Ðç$gÔÔ˜8íéÒ£#'oôÀ Ç˃úQ‘Œþ´Í§Ôç·jr\R ¹Î~¦šÊ2N1š™0¼Ódm݇çL:•Ùx8ééAÃ2ŒcÔìpE2N¶~´ $@£¿ó¨00•!ÝÏëLÚpA#ž9 9ÉÎ*#žç§¥HËì1QÈêzÓÒǦsÇ^•3žþûªC±AééÒ˜`àãŒ("ê?Ú¦u·ãÒ¥aÆy_ê+¢&lcðy9;M2NPä÷éøSßÛ×gõ¨ääÜü«DdÅóÐQPî>Ÿ¥V&ìúò¼ÃÂèS¶q/Íå´©œc;eqý+ÓëÌü.Thïë¸×'ïq'?çÒž+àDÐ~ñ¬Cm üÔL²ydnBJ–C³#ΰõmNæÓPÓ !1]LRRùÊ€¥²?#^}®uš'qùI þT¥A]¹÷>õVãPµ·–(湆)e F¬ÃæçRZjvW²Í½Ôr¼ª7Ü?ä~”¬Æ[1)<‚21OET®OPÔ ¿ñ^\N±@g3G UÇ^‚ON•{Gñm†¹=ªJ4 ¨Ã¯LŒŽÜPâ÷ <䑃Å'zUÜPn9éž”„mÁæ4‹fc.yÀcÎ=ªtÔb\Í WL lo~ÆäÜ Á÷ìÎ1Ó8ïZÛ7SÜ}†Å&†Úc …¦ÚÌF7mížägMü5ptï³&¢ ›ß¶nû?}ûñŒôÍ=4 `Õî/-uI`·¸”Kql#R ޤÓ=ñUîŠÌeç‰ V:¢Z,ºu´¦9I‡ 6ÒÀcæS,‘òÃsne ž9íÞ­A «^^–tº…ax ( `õÏÌ:=ÑtnëQkG6$_~±‚ÜsžÞ•6«¬\YêvVPX¬Ívc™¶Tgž)ú7‡®teRââÎ1¶$E@ c'¥dø¢ÞOøH¼<õmåóä€ PPóƒ×=?,®>…-kTþÕÓ­RâÏì÷6º½¼s#>í­¹H ãC~µ­}â‹Xõ–‘Ód¥?¼B¥½8ÝY,–è0m¢NJààz¼Õ{]XjoáÛÆÓ` zŽæBÙh–[ Ç9¯5׆çžîÞêVX%[cm;,*Þjg=úµGM²6·š6•os-ÙÒÙÖiÊ*£ÐýáÐúÓÐZ–´ï^ê[MobM¥Ë¸V!—bv»1Á# õïYVþ ñš%•Òŧ‰.¯„1±™¾é‘†ÛÇ yõ­ÝÃm£\“§töJÌÉfáJ!cœgÀÉÀÍ@<SKûê÷;bº6­å®`!‹cý¯¼zÒN!¨É¼O©¬ÓÁo¦‹™íÉv#J+ŽO¯J×Õµ «[X¤µ³óe‘Õ6±â0Çï6;õLø^EÔò×W¾·’eE¹‰ŠŒù‡ÊØô«:Öˆúµ¬P­ìÐäG`†+Ùàj—k¡”‰.¥Ñ–õ-íÝ’üYÌ’§2܇ӿšŸMÕîîu½OO¹Š-¶f=¯9`àœ}1QÇá‹I¾°:•Û-ÌÂto¤ pÀë¸gš“LðÔš~­u~Ú¥ÅË\ªù«" ÜËÐð?AMò­­êVšì:e•„s´ÖÏ:¼“liÆ:QYúoŒoïJy´´Kkù1n2É"îþtùMkêÝë‘ꋨ˜ž;v#‚0ÝOæ¬è|–ÖštIª8þÏ™¦¼¥ù‰Ï ù·çíBå°j\‹ÄwXµ´žÑaŽæyaMìD™@Hb¸ÆÓƒ‚=ª§‚RÛT‚6£Õ.&1›"¥O ¯Û–ïûVà:]=Êa‘¸T’FÐVމ¢®‹ñ¥ÔÓ¬³4Íæ„á˜ä‘€(mZÈkÄ7ךƆ÷0}•tŽŽ=­¸ÈÁ& »9Àù‡LtïZ·:Χ.¡{›b³­›¤d²9˜n,6àØäÒ^ø> ¾Ò‘jWð[ÜMç#eد¸1` ç’3Ž•e¼0‡XmF ûè`¢uŠ@b¼Ãzbã`Ô«k¯\Üx–]6HmâXߊÊSn|ÅìÃ<`Tú¦£¨iÚ¦œ«»i÷RyRJCoG䎘8À÷©ßÑ6±o¨Éus+@îñG#.Ô.0yÆqè3Š‹ÄñCu¤)‹îØ$%AùH`KdtÚ9ü)ipÖÅõ½V³ŒAÓ_\2ÀÑ¡ÀA%°[œ‘ÈëR¶««Û>›ö»(c7ße`ùË!Î×'ÇCšÐÔü?g©ÚZÃçOlmX4[¸VB8È=»R_xn-CK†ÑµÑ,-ÄWEÁ8èzcðÅ ”ÌÄÕõ›‹-`ZÅj×V7Z 6%P¡²ïÁis5ë ^ö(¯fYÚ TH œŽ3ü"vâÔ]SÄz…¥Æ¤–Ö6ï„I3¼³,¬ 8x=})×^!¹7moabf‘-EÓRs»;Tc¦py«2ølNu÷óŸ·[¬‹ÑAéדùÔgÂÛ.-®-õK»{˜ [v–5OÞ è ŒûÒ÷FZšúìèox¶‚;oæy¿ÜlgNk O×/ï4Ý5/!‚K‹äYTÄI K uÎ=ú×U5šÏdöï#ñ™Ž F ôÍ`[ø8E¦Ù[¶«sö«‹kˆÕU‘0Üc 0;ЭÔ.Eîµkq¥YZYÁ•fy#¹”îÚ®†õM¿¨^\A5¾æY½Ñ€‘BTɸñÔtÇãWçðì“Üé×Kª]‹›0ÀÈfeb ã‡AM°ðâX]HöÚ•âZ4¦Qi•òÕ‰ÉÁÆqÏLÓº.·ªI¦ZDñDygHÌ$"–8ÜÄv'‰5;]?W¸–ÞÑÛN•"ÌnÁdÎÜœœöaǨ5{Åöþ~öc$ðÅq*G-Ä+»Ê^¹aƒ•àÇÒ³ìt©u+kí.KédÒÙ#òî oÉ%Tc`œw¥­¨/µVÎÛséö¢Xà’w>kylðŠp>b9æ¨êWÝø·Od‰<£¥Ï,!É9c· ñéøšÓÔ¼0š¬ˆòßÜöf¶d]¸`ÝO#†úS$ðË›[…Õ.°Z5²åP‚SÓ¯ò§fF‰¬Éi h¶vÉ-Äö›ËylÁQp9 ÏVö®“Jºº½°ŠæîÉ­faóBíÊœÿ“Yø@Aga­ÄW’ „EÜã(ã+FãCk‰´ù[Q»Í›ï*1Çñ(—+ØÍUaƒ¹N $m?P(yÊžqéRBªwŒÝ "¥ †N!N Æ Ó¹ ¸ÇJ 1ª1‚£ÐA8$±õ8¤'bT¸=ùÍ8waœŸSÒ¦)ÉûߥG‚PÎG­»œ=M4‡¼M9ƒöîqQË—B 08ÏÒ˜À-ÀìhÇ9µ¢ù þµRh³Ÿ»­4Á£‘—+|FzŒ~µšÙó¡cÑF?ñêÒ»]º‰@`ûÖs˜Ç þµÕž[ŠGÿ,Ïó¦HŒÏò©Šþôöó¡Ôfì þUw"Äx”TÞQõ•\,}_^q3Ec­B·O&«©ìŽ7*ß,ŒF<y>¹îµåuÕþ´ÓÚÅ!W»Û½Æ[ŸÎµÄi ™ÑøŽWvžòî_í+¨,¶ŸjîfÁ<{søÕeZ̶·²´–Qês¢‰$-åð=z“ù×r4«$­…°Î >ZöàvíR,0£nX㜒½póètòœV—d‰ymöŸ}2a0²«mUVbú•85«á›;˜ŸP ™-2¦qY$–L÷ž¹®Ÿ@ür)¡{T9\«U¦—­I…”úqŽ+Xç¶i|åÃ+.ÐàuÿëÖ¯…lµk8¢·¡óVâ&guWª‚Np3ÓÖ“QŽÝ5£4Ö7˦]Ùaû, »ã¹YTdg#ò§Ê˜\íM겆š,¸ùFñó}=j@W=GLà×h¶zÅ™°±’u?g¶{Y­ËŒrdt¯|×_©Çq>›s©)tаˆŸïqÏÖ¥­†‹Q²óÚsÎPÈ3ÀÏJQd,]Ûþû"síëøW g%²jÞ‡û2k[ø|Èæ@TäDAùº7<õïQ\]5¥¥“é—å¬õ“;ìµb<³#°e `ðÃWÈMÎòÒó}ÍÒÉqjñÆÊª"r]8ä?¡ÏOj«¯k)£ÙG"˜Äó$†äof'؟³4DhÔôÕ´çŠIEõ¾Èñ¼¬ªBç¦yã5ÂèWV——pÝ\Á%­Ì–Ö>Èê²`n<‘†8¿Z46[= A”iR«Ú܃|Ÿf+#+Œ¶ ßô§È–s¬Õ¼Kkaáû­FÖh¦(6FwîS!àz̲[éüGuk>½7“§yWå@8%‘ñØmãÓ=ëX±¹¼´ñöú}ÓGyä%º vÝ$‹’ÒÆWŒ œt«W°Þj¯ˆa‚Æí îŸBÏ ";($©'€NqøÕ$¬'¹ÚcIxe™o-ÄQ¦çbà 9Á>Çœ}õ¥ü}œñN€à´d§µrBÚOC¼wÐ5H'xÒ)|Çýá³òe‰!O=9­/ Gûáµ8Y.áö»Çå¼Ê0ºŽäÐT4’¸Ðx³^KÑ®½ìQ_ ¦$%K°þíš¹^[k——3ݸÓ|…;e*u*}09Ïsí\¶§êéZö—&“s=Äó<ñ\Eõ‘K¼çï˜ë[úü7Z·†•-!M¾)¼‰@V+†(rp ½;+fçÄÚmå็±ïuÏ=>^:òzW+cYY\k÷Ë%Ξ·ó.É2¸Æ ‚~^œUíbÖ÷Q½»¿‹Nºò†™%«#G‰%w9Rz/¯¿^MH_i˜Ó¯#F6Rɵ~I1œàm<ÓŠI \Ö;¼qÞÄÁ˜üÜazz;‘Mÿ„—G8 «X¶PÈž¿twëÒ°|;d`²‰.|?w 啱ˆÌX:1ÆÏ›ø¾•KLÒî­¡ð¼Ré3ªÚ|ó±r…<ó’A¤â†v «X>žº‚^Û›Sÿ-Dƒo¦3GöƞФßm·1³l dÝÝyïí\\ºeìz^ÿì˦K}Yî¬#uDð¨ylâ‹PùÝR_Ý98gÀ8$ri8èFH9$pxª×—ÖÖ*êæ(œfG 3õ5SAÔäÕ´{kÉíÄRÌôS•b2qÆGÖ³u. ñi¹“O{›)m"D ÞS$’ èAûR¶¶`m®¥g!R/`mè\bUù—¹ô÷ªÓêh-£žÚöËËy•7É&Tó‚ïZäì\Á¥xgPwÁ™dx!ÞT6vü£œf¡Dfðäjº}Ù–gÎt6¾ilŽ:môúUrÎþ[Ø¡…äšD‰e›h_©¨­õK©Ú+{Ëye ¤r õŸâe?ðŠêÃÊ,~Ë)Áû¦°ô«'ÔeÐo­4ù,ŵ£,³:<1÷89튕«°¹Ñé·¸¸º·–öÈ•žòøàýÓ‘ùSuQN•{.›sk-Ì´Š¤ïè3‚ö®cMÓæŸH’Åt›ÛmfÞÆHâf>Vâ1ò18ÃAVmnÅï‡%UÑníîlìÚ ¯ûåv•\rÃ>ž•\ºÜW7´mb û(7]ÛÉtaF–4`J’n£­Yœûâ‚úu傸ʌàšã­ígómc¶Óî"•´So¼ÀÊn‘ÇCLÒ#´“G¸it]B;Ë[7¼åwN€@NHΣ•μjVsÌVÞú åRE$/©ôÓ,5­?Vvû ìs%YU†F ?+‰ÒáHn¼(ÂÂh`h®Iµe9+˜ãûÿֵ|">[W²šÞêÞyŽðVØ€|(”@™Ò\êÖWb ›È!™¾ê4¡O·ùµKkƒm-ì+räb&”nç§ÈBÓXøƒX³½ÒnnÖþá^+„ˆ8d*žõZþ+„Òu­[9ßPº»v‚O)Šº±~06ýF1G \í¤Ôì­äÜ]Á€…*ó(9=*7Öl¢Ôš×q¥Ó&à…ûgúûW!¨ZC4þ'ó,¥•ÞÖ4ŽAlļ;N:ç)ðµ²øÂÚYì&f¹Óc(ÿg,UÁ$“ÆAw§È‚çYý£jðÉ"ÝÀV5˶ðBûŸÊowos{{ˆ¥±¶áúW«AàØf}Ç™ è7а”’HUØŽÉÆA®ŸÃGO˜^^éð]Æ&“s½À ÈÁG Ëð¤ãeq¦A¯jz…ž³£ÛÚKŠêàÇ'É“€2qøfµdÔ-…е7âá×"2ÃwåÖ¹ï]$ÿ‡~IÛɤ“dlÛQ†ÜœZæn51ÿ „Özdϵ젂¬d•Ùˆ9lcñØU(s$.k3ÓÁÆ6cžØàÔØ8°¡Pô¡‚²x¬Ë(?FÛ±òç=y4õù¤È©éß4Ž€ ÏN”2Túþ4ŒÀäôëH€‚ ߟ~haÎÒ÷ŰÂÝü=i`¨ã§4ìr0[ç‘ÄTœï>™"€°T”ãŠBF3òôëSˆÉùyÅFñ¤ ŠApÛ–öÆi»Fì‘ô✙Sƒžž´ã»o?1•ÏB@t¦ã çò©Žõ4À?»Œv9 Á##dcó­}] j£·õ¬¾ *2þú®¸=i-IÊ#c¯–j½ÙdVêz⬱%³Ü¡§lã¯í¥4ò§–ç>™Í5€ –4BÝÁëTîñåã9Á*ãœëU.°#>ÄÖ¢[Cr»3àNLô·Ïèh\Æ+4lËC.3žôˆsÇ­(®@ÏáHÉhɈÃçi1ò®zûÀ=)Ãg:dˆ8`ÝýêUàŽ¼{ÔxÏl÷éR/Ì™ãò¦œÁæ¤åÈ#$zÓTç‚2Gµ=P²ðGâ)’Ç+`t'Þ¢¹¸†ÊÞK›‰6CË1禜œôöªšªnÒor¥ÙäÆÝ5K°™%¥Åµå”wì²A*îS‚SÐóSÑDkŸ\ ä<;}¨iÚf†—ÛɧMhZ,ï„e†rpA ~•¡¥êÚÍèµ»6*Ö—4ØSÆP¸îÏÐU8™Ó¸Fqž”ß(:ýÕ#¡ÕÍéºÆ¥ww5œÂÙ'6Båv!>Sdƒ|Ç8õ¤°×µ “áÙ?ÑÂêQ1™B•„e²¼ôÎ8¥ÈÇsj =ãÔæ¾–v•Å@KÔŽ¹ r}*Í´ðß[¬ðѱ![iÁÆ~œW)a­êãI‚[©`º{ë·¶c‹i\;䜷#jð8íÍtºD×Ëk$Wö©l±9HBóFÁÀ'˜Í=ÂâÍ©ÙZÏ ¤³"M3mDÁÏ=>^µhžFÎyâ¸øõ©´û\°Y§Šò Rp>d@€þ-ŸÎ¯]ê:Þ¤êwrÅ‹h„´˜>g÷Uccš|s¡¹ž+($»•Äpƥܕ?*ަaso¨ÙÃyjÛá™ÆÅH$œk öúæMFûMs @úcN¼r¤’¸<ò?*¡¢j×1è¾Óì¡ÜòiÂfa·p pÉ4ùtµèztýhldcêx®VãT×–óC±ceÅäR™Ã)“i@FzŽ?Zϳñ.¸bÓ.ç{)-æÔZÂx㉃¹”8$ÿ³Ó¹çv0 zqQžk}kž‡WÕïn.ÒÑ ¼7†Ûkª‰Ýœõ c°õªw"ÕãRº d-ôûï!£*Åä)Èlà>zJ ums“íŠM£¯ÝÁÀæ¹ë+­Zoj°=Í¿Ø-ü¯ÝÎàI9ëž¿NÕÐ$‰!*9æ+Î¥ Xf6­aúÞ—xú’ÚÉhÌcˆí&BÃiûqÅlü¸ÇL× «Ew¬k÷׺lBæ#´»´b\a'È„‚VƇªM¯jW¶·’¦Ÿ ›g‰̸ùƒddÀúçœU8»\W: œôtÁ4‹Ó'úY>$Ôï´ë;Y,„&Yo"€ùà‘‡m¼b³æ×õ 2=ZÇ·žâÚX#‚DŒ¢‘.,2qƒžô”[Ô:fäåyíŠU)ÉôÛ\Ýþ§©iw—vq Ám:K»y]6ídÀ*Àr1MÓõMu­. Ù­å‚þѧP‘•1º…8Î㜆ö£“¨îup$Œç<Ó/mP°¸²˜¸ŠxÚ6(p@#±¬gR¹‡WÓ4ËSo|d-;‚ÛU$êsßÞš×wñ_[i&æžD’f¸òº"Ûœnù¹íǽ+uf- ¾Ók=íü÷iŸ :ª*±,B“ŒÆµ÷‰$t$×#'ˆ5]°ÃÛ µÕ „®èÛÚX8ñÆ2* GRÖ²/¡Cyk©EjÓG Dr„7p~~yì}i¸6;˜ð§ƒÛ¡4ÖÚ3œÎNjæó[_Zék}lÊ-âf6§/‰6°7ËÇò¤ÑõoTkMB$¬ç•üÅb¡V!6‘óÈçÕ.“hÚv“kc,Þo‘Œ1§µ]É?LSyÃ6ÜŽ:”牢®q€ÖœH^qøŠgÞ$`ã9¥YÈ>õ "ÄÇ'ÛŠS•¯_zŒ2ó¥9œñ×é@ dÇÞ âš&÷È©½¸ô<þTÆ-¸:óÎh%Ž@=óM,Àdõ¥‘]ö” ´Ž~_Ö•ƒ˜Éã~9sÍ42ÆGJˆá$ê2xÍ=|ÂÀŒŠg— |ƒŒã޼bˆp‡õ£2Tgð¥e“j÷¡dß”`~âÄ-Í¿ãÛQ˜ Ô•ä}Ü®pMN+ò`‘Ô Ôl¥™y_Cõÿ"†ã•cúf¤à€=F:ñP¢’ùnÙ©@Êã§ÐS’ÓƒŠkÐ=iã‡!»ú dŒw| ãÝh6àÿéÁŸ~´,…‰à÷íN# ›Ž¼ŠC!( þu¦ž{Ž89öÉn8Ç­€OÔÐ×('1Ö˜Ølñø )éÆO¶zRíÜ{Ó„8ÁõÛAÇP=ÈÅ)À$@ôÒpAÀ$ûЀÄç íŠjç’AÅ(äç©úÒ1o¼Ç~(P—œüÕSÔŸÓÝËŽœ})ÊØsí@(sŽß5Eónu÷©GÌ»F3ô¤+·ƒÉÔ Ä‘Lóž½zÕƒÊäõúTµzqH¤Æ•yÏ­3g ƒjvr8Ͻ0ð}qLc[Žƒ?E¨Ënp}ªIvž0zóQ°ÁÏËíÍ1ÃŒòÛ}qP‚v‘’I‘»Ð­@åÆà(Çë¨?¶Çs·5ˆ@R ‰ýksÄ ·UÈãËaõ¬ Ã9øO_­uSøQÏ=aœ–dÿ:™NKýsU6?ç‘þµ:Kƒ5l”XÜ=(¨¶ÑSÊUϪ+ÌN›øâ[÷ 笰*Ç ¼`‚:u_å^^y2ù~9ñ'Í÷ÖÖOLf2¿û-ub?†ÎZ?wsƒÅGÉc’? È°Íø»þæ3°P@$ñÖ—pdp98¨Ô.Ü€ØÇzpþT€Up Ô±È$Ý·’>´Õ\1ÀÏ¥IoÄ•‰·zÒª8Æp3Q•'¯Ö¤Û·†9ïœTmžx8úb‹€„rH$}Fy?ÔšœãéLÇÌ:ñI2úã8ª·\DOn:ýjÑœž¼ý*µ×’=¿g-!¹X‘3×?•剿cJÇäמ)àÉ2“ õ¤óýi@êryj@u­“€’9éKƒŽpE-Ž(v˜‡cåôô§©ŒŽ´ÁŽý)ȧpÇNôÄJ22ÅJ£ò=j%ç¯:gäóL–"¦ÜüÃù¨/mžk  ´É&óÛ#ýjØS“÷ºzR• r=éì#ŸÑ¼7’±+]Üݬ*Vò±1ò€=8çµO¥xz--%ŠÛÆ•’8^\¤@ö^3Çl“ŠÕ1ß»‚8ŒgƒøÕ9;‰$féÞ¶Ó¦¶/.ä{{³…g2u€pIþµ·…4ûI-9rÐ/Ú T‚ zS.µ«è¼ga¤Ã,d¹åfhòë·°9ïô§xBîæëD^N×çLžcãqÛ#íÐU>d¯qi{7„´æ²–Ô=Љæóãýñ̸¶Pÿ$Ö­¢YÛùj¹¸,rÒ\>öôǵaiZÜõÍÒë;!´šHšÔ(ê0ªÙÆzäñÖµ·tÖ†;•½_³É!„ùó§Ž}iK›f Åsá]2C©y¦i¡†Yø$}Ò08#ô©ÓD·eÆŸ,÷wΆ73È]¶ãµ:ó_Óôøî¤¸¸Uû2†•;”ã|u†­gªÚ´öò¤g~x]…ŠxZŸÎû~¡+›o³1’Pw'_J{xVÄZØÁב5KÅ]ÝÜqÐÕ”×´¿9`ÑœPÞ©¿…8kÚký™’î&[¦Û Hs“À?…;È4] ÖK«+–k‘=š²Äâfþ.¹çœûÔ+á;³Kek¡w&é?|Ùg9ÏÔ“øÔí¯iëwöw»O3xŒŠ[Û5Ÿ¯j3Ûkº1ÜÉ2ܺKãlƒfFxÏ\{RWØ ôHµGÔ{¸šWK N˸JŽü~5þ³šÖúÙ§»^ÍçM‰wqÓŽÊ?*°š½”—kf·µÉÝòcïc¨¡#¸¡â]7K½·³¾b–pJ¼=•-FNš ¼Ôš¬w^t‘¢HžoîßhÀ$c®)4½7PÔnáŽ(~ÖÊ|¨‡h?1ÿh’Iü*õäI¯YLoURy>X$)ܬXžá¯õ5¿Št‹È$š+Á²ÚÇžvŽ;äŽ)ëa ?…lgÕæÔa¹¼µš|}¡m¦(²ãÔcõ¥‡ÂÖ6ÚãêVÏ<[Èf¶I18wîqZ6𥸑`f@Û$VR¬‡ÁdqƒXW:ªjÕõ¨Ôf³´ÒÒ)$–2s±$†Èû¸~&ØWIµÖ †;ƒ X¥Y—Ëb¿2ôÏ®5 ž°ž[ÙfG˜^¢¤ÊìH!~îb;RE®iò¹!–/8««))ýàJÉ>*²°³Ó7ÞMv×hÌ“¥¹>bŽrT Å%ÍÐf‰Ð­<»„•î&3Åä¼²9,#þè=‡_ëMMÑ.¬ç_?}’á&R@SÁžz¾‚¬Þêv¶vMyp]aDË•Vm£×š¯¿`×0Û4„<ðùña““œc¸â•äõ=ÇYX–édó!}ñI…A)¡Zm·1™ãžÛw—8”™0ß{%³»>ù¨m|Q¥^]Á½Öãsþ¤ùnÈÎ@b1ž£=ÊÛÅ,òL"Ž5,ÏÈè¼–€P>Óñn?z¾EÁº æ^SÕ˜÷<ŸÎ’ãÃZuÔw±Èó‘zë$¸˜ä:ãk/¡•:Çĺ^£p–Ö׊óHžb®Â7Žås×ð¥]~ÉæB—rë!de`§7CÓÒŸ¼E¡YA¡Ü5Ì0ù*Í;6WÐŒóÏ<÷¨,|/§Øj2^Û “s™"gò•R8Ï4õñ>˜ðZÌ· ÑÝJbˆˆ_󌗃‘޴乊Þši8£]ÎÎx¾M+°)êZ5–±,x®ínwÆ«#  ýîäzÕ'ð†™rí#A6ZàÜg}¢CÔž3ßÖŸ‰´Ùf{ƒFžaiats€Ë‘ÈÏZqñeˆŽãzÊÞ?1ãh_a?x2E%Ì;"æ­¤Úk–ez¬b,¬Ê®TœŽG½G…§Gc5‘€Ë ÀyÆiG“ bsÇoJŠ/ÙO{il†]×Pùб…‚ºí pqÛ#ŠÎ¸ñÞ‘„—6Í5ÉWT*–î¿y¶õ#·?§­ ŸdK iˆQsŽC$îÌÈ?‡q9Û=êTÑ4丶œBâ[hÌQ;ªFÆqé×ÐU9]­Œ~yýŸÿŽŒ¶ §¥·• Íç&Ù›r7L©ÎG•ut-9Řh6Ne…™ˆ~ä“É?Z¹*4ѸY\+®2‡uõÉxG]K/YKw<³ÜO<¨‰y$míÇ'ÐwéM]«Ú± ÉqŒIÜ£éX‡Åzk@“n™ÞHü•‰™÷'Þàg§­kCw¶‘ÜFÛ£‘C)ïÈ¥abKc·Ò”6G g¡Å`CâÍ:æþöÔùð›F!ÚXYW’sŽ?µ³k 6©y5ËÉæ˜¦x<—½²2 p>ÔùXÎÜ7'9ÁçšBrÖµ‹ÿ ›å£™eù‘¤* rU‚Ì1À÷¤ŸÄZ\Z‚[ý¬³Mn¥™@oºI=³JÌ ­Í‚yàSwœ÷Æy¬­wZ·Ñ4™o§2§"ÄöÇøš£ÿ –›b÷†œeCBã?6ßOïRI°:-Ì_tíÞ‚ÊǦk$øƒMKÁlÓ¿2ù>a¼¿3û›ñ·=±š§?‹ô(d’ÖKÁÉ|†ùmosŽ=zS³ìÏ9©rr1ùœV^¬ò®•vmçd‘amŽ{zÊðæ³·…t™/®%–âxwŽIõ<OqÍm\¤‚Gâ%°GjÅ—ÅD0Ar÷XK’ËÛ™—ï c9†”x‹N—MûlWàß倱¶òÿÝÛŒçÛY°ÌNHäwÅ4œðNA+ßÅš\€7™:!”C™mäQ¼œäuÏ­Y݉{Å7 Ÿc¸óP®ÁØò=JVk Í?,"(ÁP:iw–àä`cïV x§MŠÖæf’u*³+BÊÄ1ùpÉÉ«ú^©§j·9*r>e äu‡Ú˜ÈQÈÀÉÇÑò‚9õæ˜ÎT–9s“X÷þ*Òl'0ÍzE`Ì=2@À¢ÍìÙQ÷HàòÒG¾G§¥fÿnXî‹^ôLŒä³Ðã*¨K‡ÖSSûlƒNKc¸3,ç=°I'ÛÞ€ÝYpÄþbšð£íßž5µ`ï(Y°b‹Î`èÉû¿ï ‘î),|G¤ê7‚ÖÖíe˜§˜«ƒ‚=‰4Y††®O ó{‚zÒ‚1Ûìi2[Živ¸à¥ ã¦;m< Ø*dã3×#8õmÈÈÁÏjŒF2zzÒB‚zÿ:xÜ1œÒ$ïš®à‡ÆyôÆiÀdnïÓŠs*‘sIóç´º±TƒŒzPHë€3ÓÞ”—³ÔRuSéLCs¿ È4‡œð}èbC GaHYŠðs@ ÆÖå†iè7eI惒G^ ¤Ü#>™ ×]§½ø®…8$Ÿp:SY™ÀÉûži¤w @ûÅyü©K`O”ßL“=AïH¡ÝGSQ7ŽpxéObÈÀôæ˜T•õ4 ÃäŠiÈ ’OáFñŸ›ŽœÓnhæí‚xíÅ0äôϵ0Žüý=) ç˜ bHþ!íš§+|¸$œûÕ†*玕^^‡#ëë@ÎS^ùï"';¶Ö°#PHê§oëŠEÌgü­ý+ 6¯²Ÿç]tþšz±ØùÉë˜Ïõ©#'Ìn8qLÝûÒüòoëR ¨ªC÷·¥»¡¢‘GÕç÷¡cñþ¹Ïß³³sŸ¬Ãú ô ó]ÛÙxçQI‹µi6¨6 c-Àã'å]5Õé³’—Æd1ÈŠêÁ‘—!àZd7]<‰ü·1¾Ã¬:ƒT#Ôá:5´ö–äÇ6Øá‰†Ü“ÀÐ uô‹c}}gÄ)¥åΧ*íSæ*‰+ž·Zó¬v\ì _ëL߸tÍe›Cþ©.'Há¾3•2«{gúÖÝëbÛÍ}MotÓrŽÑ„[v]¹ Œñ†÷äR³c;…p qŸÂ”• 0Hî+ÎÞK‡Ñ…¤šò¤zÂÛ46Ù|§a_âÍt¶rëë±éñ[#èðÁ±®ä“tŒà~*N m’?‡¸äæ“§¡úTÛNAàzqP•ÙœqëR1¹ŽÄTdm§’@Î0sHOÌFÞé1‘H1Š©z£È9ZºÙaš¥yÄ ì*%±pÝœ:Ƹù½»Ó¢98ÆZk´r)Ñ ò{w’:iF9ì{RœÇùÑ‚¼žéÇ£c”ÜèO¶ iœuì7røöÆößO¸’ÚÚ #’EU–c&´|!ksa¥Ék}g$,.$‘K`UؑКèUJ|ØnäÖD>)³šÒÆqØŽöäÚ dPUÃósÇCWw%k KÜÊûü~¢¿ÙI$º‡Ú!”áK 0ºŒgª +UþÇÔíÛM™¥7Âî"·Ì”ダ~_Ö»ä\äv¥Ú§îž;šجq¶z–§&ºSJ¹¯l8YÊrÀ?ÊpNÍ[oy©ø~X^ÞKK‰mšF ²É ãÒ­ÞjÙÎ-Äw1[Æd*BqÀüMR‡ÅVw1É$6ZƒˆË)Å«¶YzŒŒŒçŠ5k`ØÉW¼þ×ðíµîžm¦†9”êÊØŒŒŸZ§ŸªÛÚé6m£]°ÔšWut*Ñ’ä3þÐë]k]KX°’[kˆ®ã…¥\¾<¬íÊ0’A°éŽ3ùSæ ¥Ž‘=•ìÐ^h¢íí® ¼„ÍŸ˜Ëì=*Þµayq­è’Ão$°ÛÌÒLêÊ0 O<œ×Hgåõ¤“úŽj\µ¸ÓÃ’%ˆ‘ìc–­ÌÈÜ0„qÒº½3Q:‘¼…­ÌKk9„¹pÁØN1Øg¢ ƒ’AÀÇ4ùšÐHÇÔì§Ô4{›Eh^>HÂäb¹«; uu-)îtèãŠÚÍí’å[’néþÏOzîÛi(úVN¡ª‹Kä²¶´–òã`–Hâe\e¶ä–#¿AìjSè3™·Ñµ;{ ÜX‡kŸ2b³/ wG¯ ŸÂºMR7“I¾96î0[ùMhV@:P*;¸b»¶’i6H»_aÚqßžÔ7}Á~‰ou«é¾™ì¾Ï”AĬê|ÏÝ•@9ÁÈ'8éV<7¦ßiëoi{£Zîµ,ý] aÎÜ Îã]&›e—c •¶ÿ"%ØÜ’è2jg8$œôÁþt9?oˆb‚ÎÐ飳ÕèH.S÷ªY˜c=>÷zé¼I¥Þkz%å„"y#F@Ý úqƦ²×á¾²ûTv—;~Òm™‡ †Û¸ã8\÷§Ükk¢–‘Y\\è’˰îäç8Àü(m¶ ‹«]c\ÒÞ}5,nâx¥|êË##+òŽàuüªK­*ÿVÖžò{Sf‹§Éjªò«´Œç9ùI ~µÔY1’=;R’£œ€~”¹»ÂivZüWúÞhÁ"±¶kWeºFênú½>´äѵˆ¼-‘´O¶& .c‡ÎR$_8IŒö=Ew2 Ÿ+[+¨Íy8Y÷!Õ€žO œz­}kkÒ%–.¤Õ~Ñl¾j䂸$ àœnÈ8àæ»Ul†ç½j팂D'GýÓoŽHØ£!Æ2#±¡L,rRÚIw§ßÛ[XÎ5(nâ¼–9Ù?zKùH;G F=©÷Zn­©É­¡ÓþÌo#†HZGF\¦ÆÁï¥uÖ¶°Y‚°«çs»’ÎÇÜžM?Í-ÈR1Ó&›‚Ç16˜÷º%ÂIáèíç“`x`L÷ƒ2#&­iVú¥¯‡_Ë _ª3y²€ÁFN cƒÇ^k^þäÙÙÜ]23ˆ#g*¤dàgŠ‹O½]FÂÚéPª\B$T~¸#8ýi]Ø,VÑç¾¼Ð!žú8ÖæElù`…a¸€pyŒƹMJÛQÒôj›Xå·º¸¥È otJžx=+¾Ü28õOQ±µÔ-žíÞFàÄ+”äŒãßšjV`Ö‡9«iÚ¡¹×ÒÄÜ&£h±Ç ‘@FUa‚ ÏqÍi^i—Zƒ¤°H¼‹¦€"£°ÆåÇŒðqúÓ—ÄvF5¬ww‘ä5Ìp³¨ מ­õ«6zͽåüֶ削$”³! Uù46û XϺ±¾½¹ûcYÉ‘c4B"ÈZGp>QƒŒ u8ëT!Ó5n|*ßٮŽყÈYôÏ<äñ]›($~•®é%s“ê %>ƒ°»¶‘œûÒ† ëÈÅ6HØí àŽsJ¬?1Ï>ô†+)ÛýsHƒ#içÖœ ûÜg½ œçŠvÜsøSxðqì:Sð:短4ò3ŸÖ·óíM wJÅIÆîE0uížô h¤äQMÏ8çÒŸŒuþTÑ·<¨˜2@Î?LÓz€:ô«xÜ£òuî 08éÞœ~ï§µ Ý“ÔP~t==è3»¾ Ï¥“×Âã¦(Œr© oÝêráA'=O”ŒFpZO”òh(S’§æ>´Ðì Îr)¥F1ŸZBAaÀÇ­!Ž9Éëî ¨_ƒÀ9#Öžvƒ×56ãÏåŠ`4®ÓžÿZߞا¶9ÆMG&3üY¦LÙê0qQ3­ßZ‘Ønsõªò2pOãLs^?¼‡#€ÂAÀôÛýkc[vó#ÝÓq¬ÌeGÀ™®˜i n1x¸?õÉ¿­>0C0>‚šÀ}¥Gý3oëOFù¦ÑüªÄI“E?ÐÑHgÔ•å¾7²º¹ø‰¶w›€M®².?ß$W©W ¯œ|D´8}&N}q2ë]u¾qÓø‘¨i·š–ˆà¼ŠE™dEÊ«ƒÇò1ÅRÿ„jIâv¹Ô¥YÚãí)5ºÚ7Û´ã9È#±®ˆ8.^½ê†­zö°D‘Hk‰–Ù†B–=q‘œMy‰³´YmV"X™æ˜,%Il³·ÝMeè³xZÚÚîÙÕå¶X§Žrû¸¯'*3ž+V ëxÂ[\^Å-Ò!ÞÀm @ùõÆxª2x£Mû-åÄ3µÀ¶€ÎDQŸ=Tãž{Žé+쀗þ½%Så°·p\HÁ£ ¹€À'=N+V—ÊWèÜcÈÚ«éú‚ßéñÞ$3ÆU(ß‘çé\—‡u×TÓ$—LO¶êbìÉvÍó¨Iì#Û ? VoqËö?Ö¡r éÅI»<`ô5œcÒ¤Œb‘‰ÏëK“ÎúQ hdRè29UK¾!sWù}ªéųŸjÎ[Ãr™ ·ŽÞ†ˆ£Û)“/ó xü©Å—h yéJ§hìïY&lÉÐg×éŠr‚?éL[=9ȧþ5hɈA#ŸåGÌ89” àžŸ;€:š¢F„c'SJô}:ÓF_ÌSøÛҚѷƒBzT«Ï_Ï5#žâœŒs×隤K,'`{šG$BþYU8;KçëJ„18Ç¥>UFl†yÚŸRN7A»¾7ñCs©µè¹³yZEQå‰ÕsÀùpÞý*¾›wªÇm¡jrêor·’,3ÛÉógæ\Açñ®–K³ò^nÊÚ~eÏP2úÕ—áM´Ý2!wd°^«¾æ%[« žÄ ѵkŠÃô9õ=D苸¼†žO6"ÙÚ€²„o`Iõ¬›6Q¤i8ä&¼ê餟ã]D:› óÞÇh‘Ï)%ÝxÜOSŒã>ýicð?aSÉæ“€çøºõ÷¥Ì‚Æ}¥Þ±«Ï4Ö×6ð¬Æ&ŒœíÛ÷˜sœ÷ÒgØü+;ûKmDßÅúCÁ$t$t$qÍj@ ŸNj[¾ÃZ—É€5}m§—B$xŽ †EÀ+ÜgU|2¿ØÞ´¸»$íÚæbG?6\þ<ÖÍö•a©ÒþÚ;„@p²ò?*zi–QYHàm\1/ ‚0F=*¯ ºœœšž¨tKFi-ífº º.ÝÑ<„u?îí'>„ñVVMPÝÿei׺³XÖK©Yw;0 ŒIÂzrIê+ut-*;h-–ÂÜCo –$Ç ßÞ÷<÷©—K±kÉ.ÖÒ´H64»~b1Ž¿JwB)h÷³ÞÞê†i¾[yDi´)•Ãwܤ}*¦¹¬5­âZE"ÄDF{™ÎÇpŽîÇô5»cei¦ÚýžÊÚ("'”03ïUçÓ,n. ÄÖ±I.ÃgŒ´öÏâ:WW8P¹d1ÙK_j-íÔìè .@$mÝó èqƒÅw:}½Úi–ë{:Ív±+ Àfî@ª«¡é§ìäéöÃìÃf!ò çÇš×\`‚ø“ËùT稨RB³8kûfÊÏ\‘5ë£ý—t‚=û?x)*Üs×Z—WZŽ«âûuQe%¼qýœ#;†Kà}þ˜çκ™|7£Ì’¡Óm™f`ÒƒÑÜúš$ðþ<–ï. n›"i# Tƒ&‡$+-õÕ¯![Ë놷žt†Ýíä á~hä¨'®~•Ò^ëÚu†«i§ÏpæçRíb 'ŽqžjÁÑô·ÔVý¬¡7c¤ÛàqŒýqÅ:óL†òêÕäfòmœJ±iF'¾3Àõ©m1ÚÄ·ìŒ6Æó!që^}¦ßÏ}¥iš³ë—Ÿn›QH¥¶áÁMƒÐ ôr[§®k—×¼:³^XÏ¥XÚ˜oê岨̪ã9'ùSƒ[0f-õýÕ¾®—Ô®Ræ×RHà&c¸+lÀ>£ºÖÄóÜßÜëÄßÍkýž‹ä,n/î÷ïaü@’F«uá­òi..´Ûi&”#•Ë{Õ™4=&UPl b¨#oðŠ}@ô4ùŽ_NÖµ õ+;‹‰IY´Su%ªà.ðWwÉÏ­Ee{u<¾¼]^i XO ²ìÿVÍ…d`ŒWbÚM“ê ¨}•EÒÇå,˜ä/§Ò¹Ëí[x›I¼ÒôˆÄqHïs${%”¯Ô‘œÑtõöÓì$MBW”k jä—ŒHFcÐ}êkiõNêæh/’Ýà¿ò¼§o•#R8+ŽKsžõ¹/†tYn$žM:#4Ž%f·¯$Ú—.¤šƒØDnÆÓæ•玄úãúRmy‹(9ÇÁè3É…txaº6ëqq:¸N$` Ÿ—Ó 'µw“ÁÄ/‰¹$Rw}àzÖrøoF0à i–þ\NdEÙ€¬F ¥’Ô[Ãw÷wþ±º¸”¼Ò ø<ã'ð¬É濼ñV±¦®¯sk6ÑMQÚÇ99+’¼?Zé¬ôû2†ÎÚ+xË)àzšç×Dk]j7zdOhöérHUþe'œuÓWcèQµ¼¸¿Öô‰&ýÝÍÆ“#;/»/#ÓÖ ²Ô$•<1x×h÷3¸Ÿî‚ÿ#dœt?*ʺùt˼Kƶ‹í(FÙ|¿˜{gÒ«®…¤BâHtÛPâO7>HÎï^{ÓæAc–šóRm7RÔSX¸k›-EâŽÛr”uB dä*{íNæ-i _1TÔ"·hÕ±£/Ì­ž­Ôätâµ<5¢Iow©]jt1ÜÏxóÃ( 쿇=F9üëVmLšIm>ÚG†v0©,GBN9¦ÚLNJöKÙ®¼O!Õ.+>\1‘º,úgƒ[¾·1hvŸérÞ°m¿(ùFÀ«ë§XÀóºÙAœ8ˆÀßž¹ãš’ÊÎÒÂÜAgpB9Æ¡G'š—$ÊG#¬] B}vÒçP’Õlá8c}žb´y,½“Æ*µ¼÷RI£iÑ_¥²)$PÌWÌlc¨<íÆqï]Þ¦_L³ÝY[O*©U’D @=FjÐt—†dÓìÚ?Õ#FO§¥>eaYÜæµ[ÛÛÛ›Q•í„pÁ,Ö¬¹YXý纷éÍkøª†ð¶¦–{–A `)ÎGqùf´çÓ¬'•.$µ·i£ÆÉ `•ÇLµµ0ˆ¥Ì´ ^žÄøVÉà‘VÖ;uÉÜ\›?ŽsXšÌ'ûGYšÊíí~ͦÃ"ù €q¼¨ú` ê‡4´ƒ¦Áæ[÷|1õ+П¨©ŸIÓ§’I^Êݤ”v1XzZ9’w 3Ÿ’çQÔ5gÓmïc¶òìÒEÝ&ÝÌùËt9zžûU¿°{;!as{)ò¼Ë˜Ô³õÈõÆ;ÖÄÚ&“vÐ ì­dÿ,[£OaW6 #*£:qI´4DñîÀßѱÀçà9Æ?1R0_ÀžÆgç¾M!Ü@˜Çîл”ã }ñR° Ô/® ¦“ós´{æ€ XœñŠGS·?¥)Æ:¯”܃À*GÒ ÁϱۚiSž2yÇ&¤#=‡åM*ÑÓéÖ€’;gñ¨Ý¹ú_éR0= wÛQ¾{*ŽZ28Í0°É$âŸrM$ªW8<¸ d} ‡éI“Ê㎽) ‚sƒï@PyÈüèvÿ>”wcŸÊ‘Æà Æ~´Á÷³ŸÆÉÀqM9ÉÆqžÆx;FZiÚr¯åÖ˜UÊòÍß½E¼R:u£9qϧZˆì1@ÐgIÒùôõ£yö¨ˆläûfŽ.¼zšŒœ‚28¦““œvçÆr0ÿÈÓWåÝiOÍq<›×uJ²I¼ßz* Š)ØW>®¯5øu5‡ˆtûˆŸËݦÝ'™ýßß[äþæ½*¸o[Ç?Œ<<&$…­/£enAÏ’z}®ª¿9!ñ#‹×²Ó¢ê_¢Îòý˜ÌÃzìj¶IÜ3‘“ÔÖ׉ž8×HvF%/âm¡ 0AجQ»%Œapô©3éLLíè:T€8­°Æë@ÆyÏåQÈû\ 'ùSÁÆ« qÏ#ð¥ý=8¦ƒÇ sГN=Lzæ€3ÎqÒœvœ Ôc‚nø5 ûï^µH’exü©×-¦˜+HQI¸Éã ÉÅF ‚AT².èØ GJ¤&cé~'´Ôâ²híîº2ÞŠ1°€Å¹àsMÄVWw¢ÞØLå‘äˆùclʧ ´ç±õÅgxÃ÷:F¹©\ÊÑÝɵMÙÚ—údùU[='Y¶Õ,®îÍüŸ9$çî»ÈxéŒ~µmD•sløŠÒX,%‰'Xïfò¢cGä79u©‹â»7šH…µÑ™'û9ˆF7ÆrsŒsšÂþÊ×#ŠÊÝ!´xlïšážAu%ø#oßïS^Øk§Ä1ê¶v¶©$l#ÁŸ‰!Áá¾_½“×·rÄ5:Ë«û{’i˜üͶ4UÜÎÞ€w5ƒ¢kHš§‰/nÞk{hZ²|å>Nx$ã'Ò¬ëÖ7רÜXݤâeŽGù_‚¥IíO5˜ú>¯©k ˜mmMâBñ˜¾Ù#9Œr3ÔÒŠVsxx³LUº4©$ &Ðçç8\m$O«pjIqn׳"#xä„«)F=~k[=WPÑ&·»Òô½óí LÛ\ÉÝ´`÷qV4-?T°ÐÎöQspÌ{¤-„þ/ŽqëŠVQðx¿J¹­Ü•¹Ü!o³¾ŒåGxéSé“i’Ý«¿–“] ¸“8Û´óžEbÙxV†ËA·‘ms§ÎÒÊRSó |½~Ò™ƒªKk~® †Ô>Ûnd|£ôXcŽüý©Ú iÝxO{'o:ê/.xà”ĹtrAPzŒŸCXÚän&ñ‰Žâ`>Å ‰¶V0ŽNßNGJÕÔôÍWPðïÙÖÖÒÞçÎŽALv ¬ïmëÇ¥VÔ4^úmvDû* NÙ-ãýó|›A#o}Æ…dÖìô›h®7³­ªÊêƒ%P–<ý}êÔzõœ³aÊæØ]G²2wÆHåO~¢²%ÑõKkè¯#´±¼ZGmœÔš6«§k²Eö)l¯%óÛÍÝæFÇ€ìz{TwÔ® ñhm•µ'NéOÊçåëÆxõ¡(†¦ü$ñifÆà¨D>z®TnÏ_AÇ_Z±«ëPi+jòÇ+ ä Ž"ß1éT Ó58|J÷ÇìÆÖâÞ8å]í½7tìFMUñ¶øôý>XŠoP€¨rv“¸Óž¦’IÉ!—müUg5µäÓ$öÍhUe†xö¸Üp½ûçŽi’x¢Ò ›é¡¹‡ìrùSÂ@,¤ãÐGÌsUäÑu&‹P¼I-F¡t‘ƲcDC“É““Î8ãŠÏ›Âú¥Ö›¬Zy–J—ì$OÛcaA‘“ƒžùíE¢U–¤—ö¾xŠâ X®ÙÓc ¸5mâX/ rÅowöF‘£` „Œó×v8<ã© Nm;…~Ì8BHÏ|\Þ…¡j¶vGI¸žÒM.=늜Ès€{ g¯µ%m@šÚܰòâš@ñÉ$^Y ]S¯åsÛ5gÃúókzzÞ=•Ū• «'!Á¨ô}#Y²°þϺ¹´{X¡0Ã$q·˜Ã]ݸ™ÍOáÍ;QÓtXlun^Çä‚€c-žôß/AjBž.·“Pkh­ä’5œ[ùŠrwç ×õ?Z…ü] ”·öuâ·diˆ]«&@g8ÉI¥èº–“}r"½·m6IžqÆLˆXä¨l㦠_˧\[›ËmÓ_‹ÍÞ[0Á¶õõP3OÝ J~.Õ^ë[YÉ*EŽiFØ‰ÉÆFqWŸ\ŽÎò×KŽÆæW0G!hÂíDÈ]Ä“ÛéUµO j·Ú¶öººYêvŽX‹2¹z ºšÑÖc¿¸¹€¯ØþË"$dg'$‚Oß-€ŠE*ÛÌ-ZÜÊ!ŽpàåŽ@Êõ‘Á÷Jmy쬧žÇLžIŸTû4‘É89c€HÉã=f®YøbHm-4ùnÑìm&Y¬X‘ö cœqÇ=ð:Trxbõ´ûˆ£Ôa-¨‹øŸÉ;Cg;HÏ#ŠK”ÍgÔDVpÍy [Ë#,kmÄ1è8ÏçÒ®ÅËž:ª:¼ŒšBÃcu*ê¨Y#‰vç¾àÀá{úÖ«#¨$›ouÀ'ޢùÊZøÊÞêÞ9²¯’&¹6¬øRLàów8ƒÖ­[xšÎ[Û™-§¶k)|©¢‘FàÇz9ÈïUbðŽ¥ý’¶}o•Ô~ÞH°NíÛzú÷©åеkUÖä´¹¶G¾•$!†Ð0'Ü£¡5oI±/é8=–§#*GO\Õv#¯4‰ÙA$uÏ#¬O#>‚¦`9†G=j¬ÅWŒtÎjŽ{X}ÓB?Ú=½ªªýÐsž~†­jĈ@Ç •VUÃ(Œ°®ˆü&oq~úÇñ0¨†wGŽ˜ý*el¼$ÏNßAP)owúÕ"Y.ïaEWóÖŠ,+ŸX×ã#Å“ ô¤ ûÆþË]¥qÞ4@u¿ Éœ¥Ï>¶òý–»*| ä‡Ä€0íÿõÑó‚ ‹1út§:–sÐ`Ù¯$î¥ÏÞàfŒàg¾N)ê…~ó““‘íOXò9=É4­pHØ8ô¤"3#2GJ“ :…À¨ähaŸ¨\ªŒ°\âŽr@É¥~v¨ÇçJqÀ=© iáIAíMsø{Óûã·jùçñ¤ØÑŒŽùªW ý–LŸà5tóéïÞ©ÞàZÊO?)â¢[Cs7!GµMÔΫ£ãn{õö«(àóëÇ‘ÐËŒIüêAÇF<ûÓ# wN9ãÚ©ÈBbzæ”NpiÜd©ùHÂŒJ²G®F ‚qÁ9ëš`Á^Ùô§)¨^;ÓBž@íÍJ§œàñQ©ˆ÷æŸÏ÷zcî"`£$w56ß»ž3èj!€ ùG ¤¾¹0iW3Gƒ"DÌ‹Œ’Ø8ýj‘,–E*½zõªsnVyR0rAÅr|ë&áËë§“U¹¸n¾rÏ ùÆzON01T¦‘bÓ›UþÒ§‹XòÆnß/ήÜà¤Õò Héµ­I´¨ `ó•î#‹ö…ÞÛsÓœfµ•Ìx,Œÿ s¾5òáÒac*¨[Ø †ÀÎ$ùsøV<×Ku¬j0Üëcš9ãû>N•… §ÌÉÈ<J7Wõ= B¹É'Žž´psýkÎõ½Kì‰âxP‘R9mÎT©+ÉNsŒçŽ•©17¾(Óm¿µnR,Œ¥`ŸhfG\wÈ$\SåÎЬ:àþ”í¸+õ®ÅÏoáB{[‰!’(ÑÐòäsYÖ“O¥g$¤×ÞZI$Þs‰&PtsŒT¤Ú¸\ì¾\'uâ¹9|O¨Ý5²Øi¹½æ³yn6ïTë¸c‚r0=ùéYÚUßÚî峓VšH®tÑ)s>79$PI*ç…WÒ$Š¿ ʲ©s§Ë¯›02¥ZŠêKg¢…ÊneÚØ®sOàdãŽàWáé_Q[[™5åŸ9¸¶Üw³ó”`[€§¦éV5¨WÅ©a©^5µ¨²ÂÆs Ë&â,É ÷ÍMµ°Îº4 6ƒ€iZ<˜çŽõç·sùº»ióëŸf€Y£ZÍ$‡÷™Îd Aa×=kOÄó\[ø"y¡Ôî>ÑH~ÓÚdé“ÇcG.Ã:Â{õ>¹§¬˜`9àÝk€¹†çûbþÄkº‰Œé¢ì²Ê2$ @Ç sP]ê³\ø{F’{ù|ùtæ•£‰ü¶g ¿¼.À·|ô§È+ž•·—žœÒr1÷<õ®"»N†Ôg sa!¸Js¨œŽù'¥W‹S‘´*+Ëù…³ßMo=ËKµŠ£>À\tÎ'ÖŽV|nçzšwÈN\õï^vnE¾•ªË£p`¶Õ!òåûS6ÔýÞñ»<® psSK¨º?‰MÛLéoÄc&Âwoeçù{Rå óà®~^:àU]Fíì´Û›¸Õ¡‰¤ Ù€3ÉÅs~ŠÂKû››-^;´{uSo|«ÏÞ ±;»Vf·saqªk6ZÕÃD#·CcÈUJ”;Šú¶îáBŽ£;-þ]KH²½•â••‘œ ]RùôÝêú(|ç‚6“Ë/´0'žk€´Ô­å@·¹Ô­í¬N˜6<Œv4£‚C@Î3]%äk€î!ûc^*YHÞdNhq³ ·N½þÐÒínˆ f…d*Nq¸gõ8u ŒþµçL!K[¿ßÍs+iîn-üó*©‡ü§v>µ?†ÚÙà:”:þ[ì,eˆrÁ±ó;‚Ä–Sô¡ÄIž€ (H#® +#“Ò¼ÇNžÝõ Û4¹}—ZZH˜¸;å“ —qÂ@õçtÖÖ³xoïü½AÞfq î|26‚q“Æ{æºÍ4¤}ô–z€¿PÒH¬+ «×lšRV©ÑïRA=ÇJòÌ:ã§½pÞ{;謮ÿµIÔ#ÍÔ ìrÄ|Þfy8=?JËÒå[X|3©6¥+Ü\Ý43´—,ÁЇ*N1´rŒïµ-LX¤j‘y—J"‚2ÛAb äàà`—Nžî}>)/­…µÃæD8SŸ_Ö¹Ÿ‹c>Œn¦ò—íà|³2¥['‚;ãžÙ÷¬‹íFÞÀâû"ßQXår¾ZÿÕã<¯}Ç©=é¨Ý ³º²Ó¬,ÚÆÖZ^\¢ãw×Ö­– <óÁ5ço¤ù^0:JÇ(·»’;ÔpÍò"Þ€ç¡;ïª{yWºÞ§i}¨‹+˜§AhŒ˜aÚTÆIîsž)rù…Îîb+Ÿ\y`Xñž{Wk“ZÙ¯Š­n. I²)mciH;ŠuLŸ\ô«rµiÿÚRˆÛO¢+‚¡äGt<÷Ï®=¨äêÇló²DåT3*Ÿ”ô5áíkûoIûcÀ!>kÆ6~éÆsøVN·uk¶ö­ÃAi-³M.+¹|>ÐA=ש8í9#¨ãð® ÃQXÞ_+]ÞMµ ä’I  Ý@ã%6öÎ* B"Õï XC Mâóc#üÌNÉêãi¸Ø.vŸhRIvQÜgŠS2…Pg'æ÷‚Íío¡jÿÚ멦Ùd‰¹C2…ÚøÀ]¼c5?‰VÊÑ|Ok%©i®9àA#;0\1ÁÎhäÎýæXY72 çŒ3ÅcÚêדøŸRÓLp˜m`ŽHÈo™‹g‚z•Éx¢âÖIe’çžAi ‘»FXF“˜ð88êrJÑ3ÛÝkž pXE6–…©Cõ(uÎÎ+¢Ë N+‰p‹x$Ôg¾3R9oKw9® Ó¦Õ<.פ6ý/6ò”Âðzõâ¤ð鵿šsy4Z¼725Ä}İäã%pG|p)rõ ÊÜ&ý¾bg3R€Çšó[8ü?mâv–V[7[hSïI4ì@/“×ëõ®ãOÕmµI/’×Í g1‚Më·æž´J6GfÌ€ÀñéU^Y—÷`—8ÈSVHR3î)Œ¶l8 ƒøTŒv9¨ÿvœØÈïœQü'œçÞšs¸ƒ·§MÔ°3ÏåL,7dn… 3òãÓ4Æ+œ2M0Ä`äàž9ÞXž9ÿz¤ÜŒôÆ)Ÿ.?•5‰9ÆzÓ2FFϽ;!›>¸¤ €|P2"Ãp0iŠÜàmæW?1ü3Q’ÙÉÏ¿57Ô®‚“œô=6Ðzg}FE7y9œqœÓ°H#ïÖ˜ $Žsì(ÚOñ1JSÀ÷úõ¤qòçÓ4¬ Q€ßFăʜ}jGnsÁã‘PŸ]Ã'ÐPB9ôÉç¥Fý:)õ9§œ}Gµ4ž‡8õæ‘COQÇ·j#;r=ªR6®â£=:õÔ2ì ¼g׿çKqkÊí¸·Ž`§*Aþu¨Ïk¡Ëw⵺Ĩé…%AÉ$÷=:önmmWžÀÚGgöµu9ܹÆÜz憯ªjæÆÒéí°Ë°‚žbÛôÈâqkÔb;˜"š<çlªdtàÖ&Ÿâ•¼žÆ7Óî PˆÉo,›pø à’=jOkrè~ºÔaˆ4È FHà18üéYÞù¢ÚVœ9û¨;vgË_»ŒméÓµ$zvž‚%û ’ÑíŒ|„õÇf°¬ü= Æ‹—W7o©M-z'`áÈÏ˃€=:Vsê>Öµ›“k-èKKiga(]ª‚p{œïO–û0¿s³]>ÁL^]¥¨1±íˆ  úqÅIœ6ï6°Ç9(±àýkûĉktm¡¥t¶ûKøàýÐ89cƒÅ%ÇŠ–ÚDŽ[)BIh×jÎáIU•Áä0ÏJ9X\›HÒ§µŸUûZÛ4wr*±l¡v@ô_‚×N‚åDq[E>Ì ¨ªûGô¬ÙüI=½¤R¾›!Û5ËÄ\|‘Œqž…¹éTÆ~$[]Dƒ÷ÚK=ÛçSÏàhI½X®u1CXbDRy€~4Km޲I9^…3×éGšØR@ëŽkºñ=újz†a£›©,‘$'íwÏAޏ–£ØèZÊÚHE»ZÂѦ ¡@@ü*Ç’ G# §G¦+›¶ñKj é–fie¶,’>À‹¸''9ö5—‹ÞþãN‰,ÙEëË of# YHÇû=sM&#¡Ha€‚â\òŸÊ›­´o#¤£?aÏõõ®zÏ…s¨>š<Û[ﲯw|[Ë.”+p9ÇçŽØ£•…Σì–ûdXí¡Û)&@± 9õ>¿61gl#·-aÄq`.ãèsóx¶D½¸‚ ˜[JÊ#,͹± .>\ó’:T^.}·B–(RYSQR£pŒHÜztý(QwÔ.uE#Ë2ªŒõ!?Z`‚ ¿êcÀä ƒÉÞx„Ka:_iCÍ·»Š mÚ~æRŽFHüª{ßIm{s‹]‹R«(@û™› …#€sÉYÒyi&wŒŒã$üé†ÞîÆ™››`É#¡>¸®wQñmŤºšÁ¥£Ó¼Ìf ò°Î@ç'¯£©kMÑ$Õ’š$ˆM³![iõ¥ÊÕ‡sD¤k œíÞŠTHqòޤdô XÒÞðEqG"ã) ñìk›¸Ö¦º7]õ€·û]¤’@|Àâ@ àpyªš&±>—á ";{9͉—s¾Ä$ÁäçÆŸ+°®uSØÚNìÓC°rÊíôú{TrGcg™üˆcŒ”(QÓð¬•ñ^Ki¯›quj.м›ã8<“Ç©jšØr¶“iòK<—3[ÜrÊ£î9\ö I1Ý,ÖðOµf†)•Nà`úŒ÷¦-¥²Dñ$,nK2ˆÆ <œŒu¬KÿÉÓ-µ„Ó4$“( ¸ä À#8ëœu´’«üÅYNÁàŒúÐî†J¨±¦Å01Š… œWi{q;&D|eõÇ¥Aªj1é¶s]Ü Çd…êyà~9®q§»OØÝê1AIa3.MÅ@(NxŒÐ•ÄÎÂXcxÚ2 ÆF •Ç¥D–6ª‹CÒ6UpG¥cKé²Ü[Æ–ú“ˆ«’ÈÅw.áŽàvèk?þ ¢Óíä±Ó#YgÔÞÝã‚ ;ŽOsƒô§ÊØ\ë>Çjc¼%•Pƒ îjs"2|à žüÖ'ˆ5«Ý3ÃÂöU7d¢ÝƘÉy8¥Y¿{ƒf¶‹¸ãNqò¡%¶¨ ’>ÔYÚássÊNÕ$qÏj iÉ ãŠçWÄ—²iƒL³ŠU¾‚IžR†6LñÎ8ª¶^)¿”éoq§Û¥½ô¯nY',U×wlt;Oz9X®tövwq;ÚÍê¡’6 ²*×ðä’A®KÔnôx.gKH¤°“S˜LÉ&<É·!q‚Öµ£×u «¦{:Î;¡oÊœ÷gxïŠ_@¹{_Ò¦Õ¬¢¶Šå`òæIK÷ýÓ‘À#¸®¤ˆJrp0ükžÓµmOP×/­…¥¢ÚZNÑ;‡mÿt2:w9§ë:­ý¶©aa§ÛÛI%Ôr8yœ€¥ê9ҳ؈°P‰ç¦ !ºñô5ǧŠîäÓ`AgÕõ¬Ý—E*7ä¸5,úö­k¦A<úlbioŲ+±Œ2±Â¾9#'Så`ubb>T%~éÛҜʒ1ÈÉÀ®aõÍkíM§Ûé0µê[%ƹÂüÄ‚ íäðqQÇâ§»‚Ålíî.!i¤ ùj§ih';¸ü(åas¦òÐs÷€Çzz„Œ¡Tœ±Âõ>µÎÿÂA|f²µIeºº·i¼¹fiƒÆ{úSí|@o,ldŠÑíߘ«nÒ`)BCØû£qÎE.V6b»·—Í 4n#8p¼í>‡ÐÔ»”œŽã°¯>‚àÙé$ŸPÓ’HÎ¥‰-–\(ÈNàsÉ»µ[('†Õî­cšL¦Žz:Óqh4©ߦ3N q•'¯-W» ãÞž¬‘èjF8òIùëÂÓH'$géC6NT/ãLn£+íÒ žqŸÇ4Çȯ4§ü⼂? `DG¯®OÇáN›¤îPßñ7´L¾?­u•É|Fm<+Ô„ˆ Ô,ä‘€Î\G“]ÒÙœkr§ö.œ%{°Û ]·™ Žs×5u#Xã@ì«X£Ä¶ì¤­¼çdÑC&J¾aNArI—Œï þtîÀ’Ù."‰yD³`ïd`9ô®^óÃZ¼¶š…¾©د$iUeŒ–Ff à ýÜûw®š9ãu¯/LƒIn­m­šâi#H|ÌO„ÚØ*jz\Ú®‡q§Í8O ¤TÂîõ=3Û5˜š&ººÛ®oí%w²6¬PFI|Ýs×ùWN$BŠÈÊËØ¯JõíÅÍŽv?Þ¢h8»¶ÙIµ¿vÇÌÊlõãÖ¶u .-_MšÂàÊUò?QïS««ÁR@ç•]K(,{qÍ&Ûƒk¤ë¶¶cO]RÍâQµ.^ó”tÚO½6çÃWw/©ÄÆ /mRØ–·%”.FìîäǰíZ—‚ú;«ImX¼(Åg€7)þ Ou=³È'Ú´Û“Ž¿Þ§w¸ŽsûPŠþ;ëmN(®>ζó†¶,’*“‚vA=éúï‡Æ´, NUí¥Ä'úÄ<:Ÿ¨­ÒÑž8Î=sY~Õ®µ¯þÒ°£[^Én‚§ÜÛkŒ¯upö“ì1Ç,»€nKÂ9Õ‚ •~ ÞÛÚjkÉavØ’Œrx è'Õf‡ÄöÖ% rZI1beeesŒa«cHeÁî3Eíóž‡Â©e4é—Ÿf’;clÞd~bºä°'‘óIϹ¨Á͘±Õ W¶—qö†„6÷|†ÊäpwzúUßëSi‘[%¬°}¢K¨b1¹ v3`2ëÖ¶þÚ Ò=Ô*ªÛX™@úCNìLx*âM*ïN“Y..ÅÑakÈl†þ÷9 WQu`/tÙlî\mš#ŽÈÁ"®ïIüƒžA\í¾§©jÒ{›4Ómî$·¸‰óæ1Pelÿxã”]°+[øWPMãG¼Ö¥¸…íšÞ"-ÕJ©ž­Âž<1x?±¤¸Õ|×Óœ7Ù@ߕ۽Çük}ïmc‹Îk˜D]7<£ôÆjC,Aw†M§wäRrac‹ÃW¶Z¥ÍÍ–³,×s ¥… W;»ícÓ Õ?ˆ4iõU³0ß=œ¶Ó‰Ñü à°8õ­KBÎÚ–kˆQ%a1?y@=jO>-›Ë!SÈ=±ëG3Ü,`\øiïôéc:ûT×Í-Ç”b„A(ïëë@ðÕÕ¾µ5ýŽ­%¼w;Zæ„8f”Ÿºqõ­¯µ[0WIâen 0iéq fQ$EÔá”c¨£™ÎÜøZIŸ[ÍöTP¥Z3û¼ uÝÏSéQøŽÛì¾Ô-ngVòìÊû™GgØqW5b{ oG¶ŒÁä]Ìé6å9)`AÏ·¥iKyk%¸v–#vb þ¼Qv¬Àç´Í*MCN¶¾šù'¸kM?–6Ä ÜÉíÔTiá—N±´mIž+Hž¾@ë gsÏ¿Jé…õ«D’G4Q;U•† ô^ïT³¶Š[‰.£XáæV ߨ£™ô†>¸·67º¬ÑÝÚÃövÂd²•íŽÆ¬]xzúKå½²Õ^ ž†ä´!Ä g ŽnO·5­o}mw’ÖTnŒŸåY~!tñV›¦Û\[Éo"ÊnS«!Q‘È•t"îÊhŒßhˆ¢ýç•SPkéžD—?m¶¡ŸÌA=9÷¢íhƒC6/ ƒ-€¹ºkˆ,9¶Œ `9äÓ¥VJ,"† D,ÐÞ›Èåhr7rÏ#“[Ö¾™¨¤Ÿa»·Ÿ`ÌLnzgJ¸ÅU°~÷û¼QÌÖâÐÉÖ4'Ötw±kŸ*L£,ÁÃ) œ}E@šŽ䗩|>Ù<+îÖùV#8`3òœ;ÓuÍ~ÿKÕ4ÛKX-¤[é @É!R­Ô’äcÞ·$¸Xãó'’$ 9rp;´‚Ú˜¶ÞŠÕì ›„14q¦ÕçwVÛÙMBáídœÜf ~sÔ ã88Ïj’ÛÃQÚj\Ú_]ÃÒ^ÕYLlÝÏ##=À5r+ûX 6w—ö¿m*\û.}{TÃT´Ø]Aµ›`!†3è­+°*Øh«§ß^ÞGq4xþd‰&ÜnÆ20`cëÖÏ/‹´ İ”I÷Éh*0Akbumªê7w¯ýå¡UŸhXØgv]¸Ç^ù¬ßklš+Üéwj$[ˆQÙTÀ#¡ÁªW¸‹3ø^ÊæÉ!ŽiíçŠsp—Q8ó<ÓÕ¹ç¦1ŠMCÃÆúÚÎ)µ †kiÖàHÊ¥™Áã8øStíFåüM­[ÜN¤ „m p$’{ô­+]JÎùŸì—QË·ÃzM´=nàI7Äg‚Þÿìä髼¢«D„ÏCƒšÐ›Â‘BöSiWrØOkE¼ “ÍF9!ëÏ9÷§ëZœ°ÞÙi¶Mw·»Ê<‹¹QUrI“ØuïWm®Ùb†«»w»‚3Íì S»²°¬A.#êÖz¾,Ö°¼D4C/¿$‚=AëYã·Û[}KʼµžYbŸÈÊí’ÈËžG>¾•­s©ÙÛ$²Ou ,JK’ßwr?’¤¸„M¨ÈG E.f‚Æ øVåìõ;9õ âúuŸxƒ”#oû_ìŠÔ}Mšú;Û‹($¼]§Ï1 ät"³ïõ§ÄšMŒÀñ\ë·,¡T°ç<~U©öûC7Ù…Ì>wh÷ß—ZÕ‹êA<žióß§Tß‚_ðiå €:ñÁëRìqÈÇ=i2xéÛ4¸à>œsHrzñØP8äzÒ•Ï÷&œry£=;Ó§û¹÷¦F8ô§œ`u#ëMlsϹ `xM½}84ÃŒtçéHøäóǽ4ÝùúÒ$dçóÅ1€aÏU*£“ÔÔxÁã÷Áâ€9ª›¸ÉOJÁØõ+ǧÐx—÷sÂ[ûâ¹Ö ‡ÕJÞþÊÖ OduŸNÕ&#òæíçG½ÞÖ8KùK°ÈÛ˜ŽçÔÔþXü£p9ŒàúÕsjMŽ;ˆí-5™§µ¹h†°&]¨À%0Ç•ÈäµRIÈðÖ«nöÓîWYR1nÜ)”8*:Ž5é9*H#õ¥ÚÜœ‘øö¡LÛÇwã}EÒÅ·µ¤Mo3Û«"îä1È ¼çùU/ %†Ú+Ý?QKí6ÞO7ÌŠ)#ç96ì{šô@00 ­LeRrzç³f—0Qaol4¯ #é“oK©ÎëF%P†1ÇC•öüªH‹[é7B;;¡im¬4Ò[¬EsnIÁPF Î¥zƒ(ìñê‚HÉ$ðqÇZ¯iä8Hi’éöÓÀ.š;N)ˆ‘XÁŽÜ .Ú¯ªEf¶^&³¶·CM ÂO”cð:gŽq^ƒ³®zZ2W#nqÐILmvW6é %Îd$·*^(‡ù¹á±Žæ¨êš”ú·§¿Ó’HäžßxŒ¼ Àc¾3[·V©yhÐIŸ-Æ.T‘é•MKiqìH× ª€; W[ÉÄöWšý¢héÚ›ðD¿&6ÞÎx<ã5‡§ëúS LŠ&µß˘Û(ÞYP¤ã× ¯L\©ÁV…+YDP0…r­¼|ƒ úÿõê”—a4s^)¼±KÛ {̱™eTFBbrT˜$·<ަ¯x2U¾ðƒ‘Ú8)DˆAÜç¯Öµ@É;·|S/e¸ŽÊo²3lù7ä®ïp;T§¥‡mNB‚ÞçJÐçÓ£jÎÒÃ÷[ˆpìx+€qïŒRÅ©DÉ|¦\Û w̺ÿË ÙÝŒöà×Iàý:óKÐ"³¼d,Žååp Ï^äþ­Ã‡Îà c¹ÍS–¢HónKi4Ï}“lšs$ „e ÇRoÀ\â’æ/¾»© ³‰­ÛF€D~iNz}í¸ç­zJ¢ Ø zÒ‚­» F:ç)Ø,y¸ÔôÛ[/ÜjvÂh†˜ð0šuYFÎÁÁùXt®³ÂPËmáø‘ÑKHðÇ ;£˜•Søb·XÞm½i p3žz­L¥t42¸Õl†Œm/låMfÊý&¹Û–lyÀïÝŽ…NM¯ê6ÖçÅVmm3>£wÀ[¶ÖV³ŽÇzôE]¼–Îy\,Iàcîò+«ñ)ŠÛÃAV ~Ä«T… 01ƒòñÈÇJèXö÷⟴¸`ÿf‡+†Ç˜CMáj±˜4Wkvˆ! *|‡*ön:Ö¶‰©YÜxâöXa–1wo‰š_0‚Řäqõ=q]¸BmÎGµ!Éô9yŽ?ÆFµ=kËgžÕ'“Ì ((@$r+6chlîÅœñé ~óˆ|–cö«mÆ@Ý“Œq‘]û °á€ëÀ§: ôöâ’––;ÔcwÓõÍJ;I>Æ÷Vò¾YìÛ½ÕN8ý*¥ôñëðýŽÊwvq¼ìäÛ»'žüñëÚ½Ib ¸íßS ç“Î*¹¼‰±Ë{ßÏým%´²@Â4ò„.[¡8õ8¬Kkè®Ô9\is§^i³ê~’ÖÍ­åE’Y *L¦€ý:RÇè:RnRxo¯Zc€_;€ã@ צ(=G»L,3ÉÈö¤9ÏÆ}(„Ý»9ù `$’2ÙéÛðÏ_jfòOjq©çž{SäÓëR9àŽA?Jh'$çë@!œ6IÆÚÞ˜ú‘È9¤QÏñùØ Ž?Fx'€?à5aÉÛÔŸlÔ, úrÔ!oÈöi 6Iõö§”ùpHÈþóTgޤ~}((0Ã}@V*pX~Ÿ·xþÇsQ¿1üèŽ ú“Û‘Qùlr:)÷éO+ÉÎÜR… ÉÆ{P1ªœž;ÑòƒŒ u¡ðORaCçòéÆ(ŽAªçŽFÜwÀ©Û*2)„e¿,S™ñ:¨#̱¾‰@Ê·|AòÉcœ:·ëXŒ3æ~κ)ü&Ü'åO`oZÄê‘}1°zýh$÷^”ØÏŽ=€:ûU#81ÏŠNÜ‚)Cd ㊠£Ö´$OáÁ$úqO¹Ï4‡€cß4¹À%4„<õÇNÿZv2Ș#ž;õ§à‘€3éLCש Þžä×4Ôþ¼Šp`n})ˆ•À ž9§î9,ßwýÚ‹=Î>”àÀpXß&†Éè}*@¤ç ã=ê$Qœ’¸© G¼ ƒëÖ GB1’qÒ£!¶r9úU°ƒ‹àGò<Ðä Ü‘íMe-÷ ;â¥ÚãJcƒŽ2G h±@9È#ëP µl©ØïÀ¨Ý=CýE! ò‚¬1ÛšF äý@©0ù³õÃ×@<}îô€œ zT»ÉNvƒØsPò®î}sNí\s† cŽ9(ìx4ä$d6:) €Fqùõ¥cÇ<ñëÒ€N€O°¥ ÅN†ˆ×+ž:ý)§ŒƒŽ}©ˆ~5[9äŸ}Ô™ €OéN#¡¾¸ äfQÇ @mÄ×4n+מx£ÛŸñ¤—nHë‘ÓÞœ Æ?˜¨ÇaíéÞ—püèä’@ÇÓ¥&Ü“Ëò1Ši`9yõ¤\g,ÇC@Ëã¿TdÇ“ø58 #z `VRX1ÁëòЙx뺜²ã#Œgž›Œ°å³î½iÁã Äc°ÀkI¸¸ßY¦nõéœu§lÿ½¿âh§ºƒøS€ 9nÒ>`@ÁÏ­ ‡  úf’t%~\÷êM7$ 2ç= 4îsõÁ¥ ÆÜ§Jˆn ‚¸ÔÓ€Ë1žÀSö`c#¶;ÓLÉÄ­dmªêpOò€·ßÞ”‘’0¥99”’ÀsŠb ?•FI$íçÒ¤ä.{c¹Á£?0cŠoB^?»šqBŒH9þêç§zvï—9x4€rñÎ;R>XSëíFC«œõÅ(b gðÍ ¤cŒ¯4ƒÐŽ=Zž¨> DÅ5Î8!ºóŸÒzr¤}i2t_çN%óŒiÈÿ7¨9 =8效Xƒ/'¿8<’?½Ši%TŒŸöºÐ‘øwœ¼ç©¤ rsƒÓu©#îgŽ2Am߉¤# ÛÔÒðOlûPK4d }1LçpÚÞ½3IÈn1޼\Áäöâ”9ü¨¸†H¤—å+·žqÇjQµzä~×>Çòh¡”6=x¦òFHÔ½NAçëQI/•Óï‘Hh“ÇŽ qJrzuÏ`)Ë(m qëHÄÊ}³ÒŽ;½sŠoÍŽ¨Å)lòœúši ‚Z0åNyéNlퟕ•äçÞŒr'Ó­ 1´‚Üú⢠õëýÚ~Ò'§»SYÕO$ÄÓÛ¿=€¨ÙOC»ëŠ˜íÆr¼÷ÍDã H+ùÐD0w}M7øÁ>ô7ÌMÇñ§ª(\cðéACB¤däZi Á>¹4ãÁÈ4n¨Ï·¥ !<œ~E!Î9~4Hˆl§j@àrzŠ`1Á* šŒàáëÚžÇ>µã’·zaø‰Wbœ€U†0=Ç€ùüqšÚñîŒqßÞ±\ýþz)þuÑOá2–äs·ÊÝïþ詤8@ÿôÍJ¬Ä21?óÏ#þù©YÉ{ ÿ3ZÔ—Sr=çE;Ϫ+ÅѬ¾ ×cq•}>áHõ6­šÏ×U_ÃÚ’°M¬ ‚8#a®ã„ÀÓd2i6Oœî·²}ÔT¤[#CÃòùžÒ_<µŒ§¬kW™³Œdâ¼™nv­†·Nç¼T µˆ }©ÌsíøSON*Ë^zœuäâc' RŒg#Ÿ|Rà–''‘IŒvJ¨ÏJAר'½xé@@–ný(pJ–<Ž€ûÔg#´˜1 9ïÇJ^£ny³P©ù²0}ñÒ¤/ßúš@LŒCm%±éš{(a‚ì1Óš­ÀíÅL¬§œ~&˜˜ŒvpÙðh*IÏ^¹§–'©ÿ€ÓC*œ1!›ŒzÐ8R£îði¬›‡U…ÁÈ÷H^¦„2ŽÂ ¤ãÐSd÷ÿb®4aÈ üǾê†DØ?xw-þÂår™RqÉî.ÒWŒúð¢ŸÂƒ?:nQ‰ÀÆ9Ánô•Æ ü)§r’¬:{S†ûRñœ`îM¾µ @9<æ‚px9ý(dœžM7ÏðqO-ŒŽ>„t¡°€“ÔŒHãž´¥‰\ñÍ&à{ŒŠ@¡ àöÉëHq»éèÔ† A8 àE8IÈ$S\)Æ}9Í9Æ€&V=H÷íK´ç8?‰¨#P£œø*ÊÈ ƒôéL[äëGË× õÉ¥êI¸¥Îp~sØâ€ s•\÷ix8<ŒŠpB§u6àpq×ït  Œ"÷éM?zžG'®>´¦<|ÁÔqë@†…ËÍŒ÷Å(ÉàG½#Aá<Ò…ÈÃÎ88 ÁÀëŠP§\âš8$m_ð¥åzmÏq@ÈÁÏZO-K©8Êô8äR&Û»<úsR€Aü(Œ£pîON:Ò/Ê99ÇLŠ”¸=úzSåROô&Ž †qƒžx¦|Á.å†`;ÐÌv:ñ¤Ðp›©ÙÚ tf¦žAù—ž‡ï¼:uç…ëH¨ùqø“Q9Rq€qÏ¥;qQ›ŽÛj7 WÔpiˆvG ÅžîšU'Õ‡ 89èráš2}yñM,Bñ“ÿ¦³…R8Ï÷ºP‡ÎåQ®à“ƒÐŽ´„‚=}sLÝ€?¨¥`%rxëõéLrI…Ç\œv ’:sŠ€3Áž´ÃÉK’GCùS]ÎF ^¹¦ÝÝàûÓdõý)ïËŸ˜œŽCÊŒœþx¤Æ<’ ²®O¦*)N}G±Zgvrq階F'$túÐr2ñ× zS²År»³ô¨¶à‚Gþ=RŒŸF¤6<ü§ÝFû†1»=ùžvž8?Zi*yã¦!€ew|Ùý)¬} É÷¥r¸ã—J`Bå±Û§ pœÓŒc¯ËϨ ¡ª6’~„Ó?„˜Ri\r1·ýÞE7~Ú2Lcç`xÍFÎÁ€?\g4çm§“ô¦ðF>céŠFcÇNœZao—c½&0xÉ&˜øÏ@vi3ŽzqPŸ˜˜ŽqÎ)ì@p{õªìݸSê( ™ÿË ON¿ZÄ~D¸ÉÌmüÍlë²fݲý+ÈŒü¬?S[Ãc)=HÈÏQ·¥=¸†?úãúî4ŠOÝŸãJy‚,õòÈýMh@yýßÖŠ¯¿ýª)õ­Cv YÎ$˜Ø;ñSQ]Çç^?ƒ4&=?³àçþÙ­jp嘆éíX~ lx#DG2ZF¤uÁùVã…aÈ 3ž{Ðד5ï3º; |rä÷4΃‚3O ±àg4#Œ`pjBy§)‘ÓéMÆÐO'ê)sÜqßµ eŽNiz ãAF8ÀÆ=MÏ€pq×8÷ý(õ~„Ÿ¥?h\€:uã…Wq_^y¢Ã!`1·5˜@ëV\¨\çóÿ ­/Ý5.&€©ÈîjH:ô=3Þ›!Êr:RCŽ"²GSØÕ„íôÇ¥+‡g1ý=jÛ"©1ÀÎ:Zkª•ùïJ:‘Ï×§,#§áTH‚=½7~b¥º‚O>‚˜¸`ñÒ“¹S޽*€”¶lŸ`h ̤¼=@Å `:c>ôðÄ‹ùÕ ¸##¤ ýÒ@±Mø…I€ycÞ‚G&í¤ ÃßÓÖQЃ¸wõ¨·rŒõæ…S’´1ÁæÆüúÔ#<Ÿý4ìû`п1nOAëƒNS‚zŸ|â¡Ùè§=<6W ¸”È1ó“·¸ÝPBá¥óI$žr£úT‹—#ÓÝj]ª¼íïÔ <À7†ÎÈã,´z~‚•7lîÆHçÚ¦òBÊNG=©ˆƒ@Ú3žyZ—8Ü ÷ÛS•8?­D݆@úž”1•™F ÃÛ¨˜ `‘Çj´#P@1Ú™±¿„öÊãËn#ð ®ì`àÒ”SýÐAþé§PN>êh7 þU§$뚘)qõÆ)¥s× gÐS… œÓ@è9ã¡«"P`³Úš¦pM ¹ ”ã¾1Ö—'Ž~•&ÀÜ€;î§yc®@=ºâ€å·np:TdÈÏçVð¼ìÁõÜôÚ;ñ@!ª |îךRÁ”Ž}(ÙЫ©ÉnYIS1׿ÚÞç­J˜¨ޛ岞 ^”¾O œóËô  r§¸~\f¤q?.~ƒ‘UÂß§mÔþA#r‘õ DS @À Q’;>”Ö9îÓ4Ðp21Žü(ìH~NxôÆ ê=*2ß>@})ã*0x?JkƒÏR;zÓHj³q'=€ÅFT?™¡¡\Œ §ó€Þ½é¤qí/\‚1ëHbd uÏ|ŠCÇÊAÉö¥À'‡8'­P è2i€¡O`@ɤ* à®A<Ò)©#ž8ÍHÝ>eÇq@€Yq¸ã­&p¼uï†æœTOà8¥Á,xù»|´€nÞUyëJQr1ôÏ»‰þ÷?ìÔjî]²[j{ãà~5U×ã=‚æ¤'#¾;Ôepäó“ÇZ`4’Qê§ŠV`yǾvÒ36OÃ&é‘Y,Bð7+VÑØ‡¹ÝûàZ@IŽ.¿pK8ÿw?­63ºqž~aZÊÙ_z(çÖŠwëÊ(¢»3Ì|&®¾±Ž oBGO–FùVèÁàçðkÂé³CRcº»Œñ× Ü`äþuåTøÙÛÞ¹úÒ`Â…ÎàPIÁÆ}* Œž3Nç'h¤bO HúsšQþ5#öíÆI49sA'q {’Mœxì °@'ƒéPgj“Žýªf'°qUÆÆM h~)<è*¼‡†ïR0ã#ëPÉ÷~µ –·0Üœžœ×5$9 œRH>WÇLæˆ{ÕŠ:™£Je˜PVšî×'S¢éëC€['ý*‘‹0.?RŒ.{üÕ’>^µ"¶;ŸÄU’ÇÇOçJrSùÒíÈàgÒ“*ßšdŠ íÜAÎ*E,v’ÈäÒ¢Êqµ—§ ©§©ˆ/.£þx4ÓN3À<¥($ò2j5u ÆO°SN,àçþÕW$x<îüñO8ùwqÚ£+ýàzät§`Hüq@‡ì%·Œ8ÏZ$$`z@SyéÏb:þT¥qØàv"€X«dgëš’"I$“žyÍDy`þT‹Îx ê6Ò°2`sØ{RAãÒ˜1œ/…Hy<†H¦!Ì:€N1éRÆå@’1× àòç'ߥ'ƒèiØ %ÁF=0“‚ìÚ£V1ïÏ4áÐà©ÇN(²aO;À?J în?SŠRC)Éút¥Ê…Î;àR¡›øºò2(‘v·ƒßuIÃr7â4­ÊA?QLEr¤Žƒ?^´ÒéŒý*L…ù€o¡iåF ·×š,1ˆ PO\t§’IõÀ£ןMÔ½ùÆ>¹ l9ÝÏåG\O¦)å$äøÒmàÇs@ å‚AÁ>¦£*~éã×­Mº@ö£hÎ0@ô¤  ;qêjL^@<úT¦ ýî= 3äÓÞ«`܃<ýÂAèvÔ¾Q cÎqHÀ&89íóS÷³lcœš4›W` œý¿>àP 9Ú;‚Z›€¸ù®h3¶6Ýqž5€;‡ãN*¸û ~7Ë…>´€ErWæoMÜTÊÅG9#ÔsU‰ ’[>”ôqßð  ÃmPADZ4›óŒŒ~ÍÄñÐý)ªHã¥HFzcò¥=:zâ£Ý–ç€N>´£*Hb£ŸSŠ“œwÈíI†-…ýi¤ã¸§#mbq×¶(yS‚§=òÔÖäœqÇÌido3½}ª2~î=íÇ88çïriÇq×·&š£$’ä)à’¸ã°ˆã$  Žœç4ÜÝy¹8ÎXõíÚ™óžÄzæÇn Œ}:R†ç¿qB’CŽŸz‘ÏPô*`†N9õ♸äžqšAÎAÈÆsƒI•#Ö€ Ÿ'¿cŠzœ†ù¸úÔy\äFz…¥ y9ãÚ€9<{æ£u¸Ç'žiÝ2G=þí£8 ëŠhuJaÈld Žôâq€r~”ÖÃgé@ÃpÛÏãÅ)e*ÒrðsŽ9¦î;°Ccë@…%V=Í´c¿`)v’qÏN)øÚ=GcšŒ·^søÐ u#­0‚{óúS‰üOµ3 ±"Æ3aò§ŒúRïùO<^)q“œ=é^„®=(±È%ˆmÊÝÿT„|‡Œ­Ei [bETÏ@1Ö›¸ázŠM¸Ï„cd’3Œ÷ÍG¸¯¥4¾ ü…8’GÀÓzgÃ¥#xSùu `ÌAöúÒzsïAb}þ‚‘؆Àê:æ€_”‘Žª"y43œ‘ŒSPg’ç¹ d˜9ÎG¥<¹ŸçQgû¾ôÍÜœàƒíÒ€±;²ìëÏ®j»yëøÑ» ìzœRqž.´Dx8$c®NjT®Ýsƒš™˜ò8>ÕPq¹2¡8 d,1Áõæ›íÁJ{‚y鎸4Ò8õç›9¦€dƒ´}F8¨Øü£¯Ð y¹ÇãL'sLD.[=cÖ¡”°RpjvÁnÜT2¦iÜFµ—¶pC Öiþ3œþU©«†1Ø@Ç­dîÚc=Acð¼6"ExÏÝ û~´¶ÊDp–=Ü~‚’ßaÆ?ýu*#ˆq€[ò­3K©_hô¢¤Çû4T”}kEWyÄy·‡­­üK“åj·È ô2VÁ#»öö¬­_ZU ¬^d“ë)cÿ¡V®zýãôåÕøÙÙ…rËŒŸÃŠi ©Ö”á{õÉ46vØžÕ™cTŒä'éÙçžqÖ£?7OÊœÄ/fÀ9©ö%9ÉúS7ÆXduY>éúÓ[8À ¢•€BÙ'ã­4¡ëÛÅÀ©±‘œñÕiŒA`FIíHh‹¦yéè*1³­LØ$ý;ÔÒ¥–Œ9›b9'hÏ\wÍInr£8ô¦7;Î9Î)Ðä™±GSØ¿ÂäÓ² è?*dg8ÈǸ¡²­´ŒXáŒòÒÈÃmþ4ÏÞ&žN?Ǫ$™XuùsìÔìüÜÉãïu¨ààþ)ÃqïT„ɉ'úšB}§9=ÿ fŸ›nÞƒ­>3Ô|Àw4\D£9õ qŸç“H[ÎxíÞž 0ùIägš}I¸êA¹þtýÌwšjãpù°}M.qÁàÐ!ŒÇdœ÷¤3gœÓ›;GäÓWåêI¢À#—7Š@¬¼s·Øfœ6“í!?6Þïº!\r §ÇÝqíÅ&sÉ9©ØË˜éßš`0‚S¿^ ÔA ¶¦½R¶Þ:g×Ò£{ÞÃ"¾åÎÓŸ\ÔB1¿ñê­NØRxÈúTdcéì½éÞÇ©4ýØ^˜Å&FÓ… À&ǽ.á¸uÇÓŠ]ù~>µÝëÎi\na@³ dgÜSI òN3ØÕrp?ÅMô‡mbÖâ8\œ÷‘\–*ØéÓw5¹ž~‹HÌFAà÷¢ÀNN:mÁÿk¥.å$}ßpÔ*äŽ=©Äœq’§Ú v ãnÞÝx¦nìgÛ½1ÍFÙÁ`‘@ÇoêxïÅ À9üu¨]Èù”6G|õ¤ÜIÎZ“qÜØÊàS3ÆNӞ§½.ÿ—°?JCŒdŽxÏzxl¤Ô*Nx=éàã·?Jb6Ñž¼ŽiHã¡õäÔ9lƒÈô⤠=r~”Ӏܠ{šoFwóëO'nHÝùSXe‰‰ôÀ $0ä'Ôæœc# `ýiÈ»yË`úâ– ØïÒ€HRFx8éMc‘Û#Ú†«wÁõ4„çŽ: I\“ž=©Ÿ1Éô<Ž™ ð1sL'‚ÄúäÒL¶23ƒÔSO ×ùS9ÏÇÖŒƒ×oç@޹ÂH=IüixÇúÔnAàžø6Tç9® 4N»êir}FGµFθݜ™ÅHà vç¥!a¼3¯bßʘH=ÿJCŒç&€ÌêÔóQ³œ÷ü ç#ï{ЈÉëîhªÏ>ا6‚G¥7#Œ×ÖšI –Uêh°q‘¸•禩‘»?ZGUÛ‚CšQÝGN('óëÖ£?xœŸzœ»žøŸÂš°þïá@ÑQœ½(`3ÆßÊžr2§wãQ3ž¿JÄdáˆoåÖ¢ù±Æ*Vù¤$ ƒïȦ°à|§ëš`BÅ›GåHÇœrOáHãä8 ŠtQÇ­1–Ãf£cÆüÍ=ÙC`mê‚ÝTÓ™«äÛHO¥sïÆÅ?Þ?ÈWA«·ú£#…¬˜‰îz~·§±+Û’qÐg508‚3×÷Œ*Æ"éNˆ–Gý4jÑ£;ô%Ú¾¢Š6š(°\úÆŠ(®Óó$¨ø…««Íù•BSZ‡»}¬ÛB?á ñBmÀ 8úÛÃZ|IížµæVøÙÙ… É‚~\T|uúÔäŽAÐS~cÏÞ²,`8îÒåG¨Ïš|k†*%9lÀÒ¼õ<ŒôÍFÙŽ™ì9§‚JòXׯ`ôÞ“(F=ó×ÔÒ('Û….H*ŒóÈàæ rLgÚ pTc­Näòj³œj‰Œ“÷yûÇùЊAÿëS\bWãøH¤dþF²:™rn¹ëLÜßÄ<hCbÆ£0Ž£>ÿ5=_8>´¹VÉ%sÚ€ 1°ê¬qÎA¤fϵO9{ÿ:c¶JŸ”a@ ÈÁ1ÔãœRTòžýh' ×#Ô L“ƒ¹ðG\ `+6à>^G|Ôdóœ?:U8àç±ëŠ߃ïHO8˜>îw¾•'ÔÒ8ç  —ŸaH 'œRŽOŠR2qƒø” RÇžO½9H{>¦›³/O ¥S·'Ó¥8à¦8ÏÖ£$g¢ŸÆž¹õa‚7~´Y0S,åHGPG°©"`x9÷ɍɨN8Ïá@È[*)ùAÁÊÿZv9ÈG÷i›ˆ',zžôe±ÁãÞÇcúSsϱô¤ž½{â€;ñǵ.FÞ=ºÔg“ÏûÑ‘×#Jd‚G8'ŒP±äàŽ„šfù‡Ì6wãšMű‚F8<Ó Ÿñ vO ŸÒ˜[è=2M¡ã·4™ TûhëóO§¥9x8ÁééMW8€ÙÍ OSÄÐ1Û¹Ç̓MvãÄg9ô¤WåϽ'ÇïÅ1œçýìP0Ä•Ï>ô`ã ÿ &J¶< ã×pÈ*úÔoŽ•#`÷9õÅDÛ€<‘ùb¢'<‚1Å4’QÓ¦)ì$ñè4Îz Øü( eúÔY+S ä¨6°æµw>â©>èüsâ@q†6®>žV?šš´Crƒ>ùâ¼ÚÿÄg]?… X‚rÃÓ“ŠU8äž½±M7r9ïÎiX8Ç©¬Mv$ƒƒì ¦+|Ù}@ º ûÊûdÔe‡@I=†*F‡ŒgŽ}ɤŒœqÇJESºr¤#’T÷ÁïIŒ èfN88¹$| `uéQ³duÉ‚•ÆG!ù±ÿÖ¨]±éíOsœ‘ì;T zœŽµ Ñ­Ìò`äš>GCǵBF.&ë÷oz‘q»´ÞOvÍ1îÁÏCHd„³z{ÒŒ3OëQ|µ A?Z;Ž2¦hçÛ>ôn99$cÚ‘œªå€öéL S-œ·~*6R8Èöâ‘X˜ƒÏ¦i[,¹Ç>„ô D|’n}1M+•äô>”àr:­2NXÀÒ¤)aJBäàÝ{Ò:ãëÖšÛAàJp}Ùò5u ôíšn791ïÅFK0 J$àdƒš ˜É$àô•¥‡×£$ŒŸ\Ð2Ç8\ý&J§Ýlvùj võqþÕܹÂç¤Ð!Ä•«tõ¤' ýî”ÒUOðžàcŠ;Œí  P0úgÜHX‚§>´¼Ñsì)¤a½{}Þ´„)$ž3žß5>Øî4ÎGAŒûRí rÀ·L†˜À7ÍÛƒÛ=)ÛŽì’¼öæ™Îy.§¶OZw=w1ïŠ@)eãæSøqNÊúÅx¦n=l™ R0^?MÔÄ8ðxþù¤nÜlR+‘“éËâ£w(G GûÙ¤;Ú§œ{Ôm–õïšfðOUç§Zp Ôõ¨¸ìHùé†ü)™$ý(9-÷³F쎠’=(¤ž»€w4¤ŽÄgØóMÏ©ÿÇi‚zŸûæ€ ŽN‰±¼=‡4òäm`=E4K–Ç$Œqš1KÆÅX`ÁÛÁ¨Ù˜d©ü–¦i2ØÜÙ÷4ÔBzà {‘LPJóõ?-<7yãÚ‘þTsŸ÷©¹yïóRÌyü©Nr9n=1Mm¸À>æ`®NÞ{æ€Ùn»¿:LnRî?ÚÂrŸá@ê9OÊ€Œw?÷Õ8l#æÆãÇ-MÀqôÅ&@ àøJbv û¼ŸZcm8üÓÎ;6 …݇OýÜØÛ8ÍG»$Œ.?–<ôõÀ¨›w¯è(iL€j ýAëü©çq ÀôÍFÁî;ÓÎ0F~”Öl9úS‡’}M#c€ë@±$àôúTFHíR˃Œðj´‡hÈÀê„SÔ?±N9Û‘õ®u2ÆÃ×&·ud”rµÍÂßp˜ÿ ښЙ=I:&}IþB¢’WHؓǙš{0®)Ì¡¢u#øÅhŒÙKÎz*çÙO¥§2"Ò>µ¢Š+¤ç8 cøƒ®rÖÍÆ?íªÿìµe$ÿ#UuOÝüGÔFïõš]£ãÓ\ °Œžqœb¼ìGñ×KáBƒ½¿‹ìqM}£åÎO¢?9ì=*»°aÙSßµ`Íå÷Ò'œàvÀÀ¦äƒÀõ Oꜜ{7%%Xœ™§`òBóèzT[ö”äžâ€íÜàžpM!ŠÙè1šd¥AÉÀèE)l/${Ó8`'¯jCCN:ö¨v᳟¤l—'=8"˜qÎ:T²‘šà æa½ëOŒŸNÝé®[í2`ñšUçŒn+t=‹iÀÁëî)d ‘ê1H*ZPÇÉüêÑ“ 8#Þ€qŸÖ–Çñ úS²{þ9Z´HUØõ稧džNri™Áä}©Ê{d~tÀz± ÆML ÓñªãnÀÏ®)û€AÄÉœŒg'̹ãñÍ41Îr´d0È õ DçqÁçž)Ä0ÇÊø¨—…öæ§OGN´ÉØ~ü®1ƒëJ2$9'§lT/¬gê) I( ³1ÀÊžN{q޼T'w"€ÀŽM+ ±= „p üóJ:dô#štMå¿ãÔ bbåJäcð4ŒÊ½Jþµ)Øy\t=˜ìÀޤz‶Jð¾§Ÿóši`Êp ê)ç'éŒàSB–L’Çâ FyöÅ?7Qž¼ SˆQÈ$À©¤yÓ’(ðÙsŽÝx£vÓÈ={Ž•ìwlz“NXã·ûù £|¹Çž1JŽU±ƒõÀ¨¸tZ]ÁH =(Àm¿ÄøÏlPÒá‡$œtÝÖ¡%8#hü 48ÉÄkïòÐ 9ÝŽO«S99õàn¨8ÎxÛM*¹çÓ B 'Œ©SØšŒ|¤pŸSÖ³d Ø8ìi¤g‘ê1@"N1Çqœæ“v0AÛƒÍ1X?H`pO·i“žëŠr°Ï? ¦†ù*=ÿL­ê[ëÅvGó¨€zŸz“vå€Ýê1ñ g8#4*y#§sLÛü>ãm)sŸo¦iã&wÀÒ,Ç8ÀïL$—P[œàþ}( ‘È>œQ¹ÉÏÔS<Â9ÜsÜ Ro-€ öùºS"°ÉRGýóQT’:})`ç'>™¤c»¹Áõj@(|’zúR0òø¨ÙpG®89Í*½½y $[ñ4×ÛÌIí‚qŠpù›ëJË€3‚}zP8Œr3Žôå*>àÓZB¨B7Ì&«XÜ\L¯öˆÑX1kuçùÐU‹ƒ‚§éŠ#¨ ã¡ZMØàà­7pÛÁ_¦hðN3ƒAp}î{äT[¾o¼œôÈ4€cœß4€•›Žãñ¦‰IàƒŽ‡&£ÜO<ß4ðÙäþ+@„xæŒ@~f“ ë‘ŸîÒ€f†h…óÀÆ”wΠ&Ÿ´·]ÇÛm1‰\çxï@GLòç¯Ýæ†aœáp=¹¨7§Jif|ô "f‘F08¦™”dûT6 üÙúÔy€#ëJãHœ± £ðÝÁˆÎyúqP€Ï¡ N võÏ"˜Xsò>RGãMbûç4ç9SLcÀ©æ ¬yç#Ó4ÖÀaÇïR†äŒjCÈûà\SYÆqsÚ«±BÄÇçK 'çðZEܪOÎ{gmЬA!G°*•äàuþíFƒ÷‰ÇR Hä«Fy î;ô"šœw­4Œ¶T“ߦiX0ùôi9AõÅ4;ÏÝ'Òò0ÙâƒÏðsõ î%º¹“væ.~©›G@£ÔÒ”$€HC@ÇyŠXà·æã43}N}Z¢!$Ïš ˜ã+LC²zçP’ vüéÛ¶òÁ¦¸œÈt •HíÏZ‰¸ì '’ Hl°÷ÇZLd\ãÐP'œTdç#ò©ØqÔ¨¨[Œu¦"aåHI<2;â—‹7'Ö‘Œšb"glŽ„UwèxýjËs’¢«Éœ—?CTv ¸¶~rv‘\ã(D2>ðÏë]ñÿFl¨è{õ®oÊ›¹Ëµ´6"@yèqóâ—nÇp 9aŸÈTlê PNCüêb3ÍØ2ŸÒ¬‹\·µ¿É¢›Å\w>ª¢Š+´ã8 t*|G•¾bÏ£Å=i?ø£S€sÀÁEâ=«ñ Üàn}%³ï‰—ú§g¹ôçšó±Ä:©|"»üØÇûTe²£?ÝZT##>˜¦¶Ë,xå«›$&ÜcxRsFàsØzÏçHr«…8€u¦0$àŒŸvè>”†à€ïóÓ™Ã}ßÐSXã“ìŠEàãñ4Š•·r­7¯^ZW#=Iþ´Ç qŒ“Í!¡dÆ{þœÑ’Fú‘Ò©8¶OBF=iËœp üj4l¯=)ß{®3î1Mxäõ?˜§£c’ïJ„ýìô#¶ò ¨¹¦"päs“ŒPÌÑŒ w1Ç4ÃŽ¥‡®sOãùN;Š™Iõ9ëOÜqüGÓ‘P\‘…¶)r¾ª})ŠÅ€NìÃÛŠ@Ç'ïgðæ¡/È9Sߥ(l ì>\Ð"ÀnÙ=:PÇ-Óó5Y˜á—ö)þ`Ù¸œäñòÐÂÅw½’}é™Áå°}é"÷Wì´oÜ9ýšM¹YYXöÆwR’ªNG®M1 $`ž:|´òÇù½ð)ˆn³‚Ôšn\8ç4òàŒî|wÍà6>lü\Pe[?.ºÓI$tÉï…ëN‘U”½G95 ?F cXáG84$ðÔQ’Øåsÿ¦©BÀ€ ÷©dHÙ<ž>”»ú`ñîz¯ÑòBú}êPØ<÷¦€X‚Iöj‘ÔÿãÕ›¡S>ƒÖš%ù±¹0~´ Ä峯ð}rÜÒ >QÉëP™X0äöiÁ›oVü4+O¥+À¬EB[`sÐŽ(YöÉùÒ‰|øÐújBs‚7z㊉Üç8f¹¤i^2NÒ2:qùÓ!bFHcõô ±l›ó¨É~8' æ€íÀ!G§Í@Á”n Ã8ç÷§ïéƒúóQï/û¶ }i¾aGÚÛGÒ díÖdå@ö9¨Lƒq\ý)ÜŽWÓîÐÛ°X—_j ƒ¹>½ê5o˜ŒOµ |(å€í@É àpÃðZRA\‚{4ß4€yltÆ)©#• ï#ØÐ!åö“ËN( ÏW>£9þÏlÓŽGwâqHn=ƒúdb“«gk{Ó>cÆ·4ÄüÁïª`;©àgÛÞšÎ~^£A¸cä¥+`ãvÑÍ( p¥ëÆVš@dZByÎïÒ’o;y#ë¶š[¸o¯›»‚GáLY÷¤!ûŽÌO”„1ÔÕ Ç>´¸*>UlŸz$㓟Zvz“¸úŒÓTá²W>ÙÍä#çë@• sõ¥À0Èúô¨·ÏÉ“õ¤#æí d¡ÃdÿÇ©€2O}Ýj¡[¢õëÒ£, c)ǹ¢ábqµAÊ®HîÕsÆÕ?Sš70é·Üb€ýÁP=1@ƃ¶O˜qÀ=)çÈ Ç¥†ã+ý)§›péH@ãgF(²4›Ž2O¯Ž Å0%ÜwdlR¥z÷ô¨Ì:žÆ†•ð9 ,JXgïý) Ï þ\TFgÅúÒnß×#Üt¦É'$°ÜSОá±èOJ­,Ÿ½ ·#…K )^:L€PN{š^ ûƒ8õ¨Ù‰9ýiTÁü茽[gëNÝú ”¥L`ýzÔg#‚Œš8cf¿Z@Ã<Àè3Mpv“žõ¤,06p9 wz®éMr6€ ãÜÒœ¯·½0¶Þ2?ïœÐ&=Xü<{Rn r9ü)¦m£’=qM-•úãŠvåò;ãÔ i' qô¤=F;zšŒ’ ÆÚ î>¬÷Çzil¤÷'4Ü‘‘ŒúÓi<°üèfõö¨ØwÛÁÞ§à)òj>`@=Á¦ÞƒØæšAÆp2;æŸò°ÆWëŠ÷2ñ´žÙ‰ô_~j 8<àTÕ3ƒTÒ»}Þ„W>X,HÇüõ®‚ð+[9$÷ÇÎÈ1zã5´‘_2y[Ñ€­[ê¥þíTå’UÇñëVsòÈ3Ž­îJ-`z­Üý(£P>¬¢Š+´ã8?¾;Ò‚€ôË¡œzI FpÔóRøÐ•ñ—‡N>Si|¤ã€sn¡¨NÞÉöÆ+ÏÄügU„vöÁëÈSr›¸ íÁ&“waMÎ9í\ÆÃØ‚zû뀄 Ÿ€æ“pÎàñ階S•,sÏZ‘¡¤±9nçøð n ÄW§ƒ@ç ýiŒCü¾û‰4а¤’Aàäð:⛌0Ï8æŽ2Ïò¦ù˜ÎéÛµçÛzŒpzþÒŒ‘׌þ$Ôyÿ“IŒŒó#wóÍ à4…ÔHÙÛøÒ8}k¦ý Küœ°üE ê3°ŒúSrH-Ïnà,U¢ìs©ÍFÞÊü\Ô%—¡ ùS•ý u"­"$d®6+1Žõ(bÉ|ب3–8çèÔõc´7ø DŠzÇëJ%¸ôÛQî ž$ïŠzœ.~|})0u`eû½hTpÊqØŠ`l“†`i¥ˆã{sÛP+†_TñÅ*IÃp9=—5]ç†çéRrHϽLΣ†nS]ŽT‚ÇÐ ‰eRç©ã=)ÊÛ°NF}O4†Bz1ô=iDä ¤·NqQȳòöª$…BSž”8¤9QóôǬn €|ÂsYÖ¬¥”1ê h0Ôã<‘MÇŽýðhf÷8þu0ÔmÜ£*Ãõ¢âi~I9Ç÷¨éÔûê€ÛœzÒ†Âð#Ö˜ Ó%LcŽi„ìçrôî <ê4“‚rÝ;t¤ + ’Ÿ•Dê¬A #ÃÍK¸…ûÇߊةw·N´ nðŸ1eÇ®Úyu'‡Sô^EfürÙõÛJPýì¿Ô P$SÓîRdîÿ¾E 4™ÿh c¬®FTñÜSíÇi1ü)>n¿6;漦âŽpzÿJMþ›ÀëóC%WeR2çžž”¹% ŸÆ¡ÏN£ž»©Ä:sïÖ€&Éþçþ=Ö›¼ýÒ8úÓÇçJÄÑqï@„c‚ …ü 8HãíÛQòœŒçÒ—8$ø˜bxÁR=89p#'>‡ŠjØù€#ÐR†¶±!‡FÅ¥™x>½…Ÿzç…©Y·`üç±#)\ý󨿀²Ä=r8¥ÝŸâcžàÒ2à„Òì-†(0G\ó@ Œ’~´ÔcèqÛšxƒ’2ߘ©Ô‚‰YI9AÏrsŠ“ ãîÒóÜ ÷§„ Ücž1@†6º=ˆ§+ñÀð§zÜŸlSH‘ÔzŠ.wÎG½#‘É'=ir7õÇÔdýÒ¤ãéEÀS»?_AÚ““ü'ÓŠprØûäz曎¤N{ñHbyeˆëÉ¥ÆÓž¿CŠC’sÆ¿Jg9ä΀ÊÎÃø·Ò3ƒ°ø#œƒ‚žàÒ^q³ðÒ€·Ý^:aé{½9©å°GÜÏ®)ÊKYq銋ø ¸ôÍ?ÌP«…\ýzÐß/”óš›'‚§ð {Ž-óãëL8ÎIÕoûFàåF>èM9ä9ÚK#®8 "u“ HJMÃ#§§JŒaG,ø?J~3÷IéÒ€°')Ÿjz¾r ú…¦g  üzR«Ó~;“@‰<àœ}*³ç8ù>•1Ãá½95 ä ylÜã“@!¥JŒüÃð¤bvàçêiãÈ÷ja©ÊçèiŒ‰ XüÓA;A#ëNr~ïß5"©Uä.}M!)÷r?º.ÔxïT bNvb€©×!}±Á áÚ1ÛþO\¨ÉÆqùÔJvœäôëNVÈ?0cžqíH§¾0~”Ï0 N:J``y¸ô¬Músòç"š]ë’:sIŸ—ïuê2Hä{U¤fÉ n–½°z·ò¨K)ÀëÜÒy˜È+ÁÇJ´Ik9 ŸlR,€’7 Î:úÔ"@1=jU|žÇ#¡É%žøÁþõ=NÐ@bWЀƒ’¸=˜wúÒ«ô, ,èY¹¨''©'Þ˜­ÏÞ~”Ìõ9üŽ(û¹íÉ©ã«d*„ä6F .þ:¨ !Éäôàx7ÏÖ«îb­(ÙÉûÅr(í´çCS¶•ì™=ª èXï„4/Î@ßÿŽö¦"ì $”a—=F5i£<Œ®*­®ÝùÈÈÅ_À$—§d¡ÈÁY8AϯZ‘ð?»RsPö¶õ;IãîðOÒ¦Ü|°Ì{ã" ùqÀÒ“%ˆù¸çôò ( Zrã8àñÅ0#òwó'N¢¥Ž%‚ÊëÅ1ˆ9ÆÜûôÑ'Í’Ý}©sËPʻǶ)›Hld{Ѐɹð êx©wnaÀ㸧q9ÈÇéMØàtÅHdtb}Ž ¨›i鑎Ÿ7ZO”âãÚ‘€Àäò} s¸àœ½I¼9 c[9ò=ê)bÞ¡DŽ„09ÉÁÎ>ªrNqõ¦yk´ráHܨü)7rF~”þ±øSË`v^(ƒÓ#ð¡wÿ äeVœN9ç¡âžØ#’G± D@0å·í9IRpXcÚ†9ë¿ó ¸È$¿¾h¬XƒËgùÔ.¤Ãq8ç+s~u G¸åU¸èsAHhBÇ8`}7dR˜Ü‚Xgñ¦ä£à ûw©ü==ñŠŒ&ÕÚA>ÔªÌã‚ÞÀÏ®êhÀ'8Ͻ÷—#ñ¦Œ÷þtÞÙhAÎP¦€°ò}7ÍNBƒè 5œIeã·Zˆ°ÉÆúS&òIÆ=(ó@Ø AÆq‘øTlçž¾£ŒS\ƒÏoÖ²ôö¨·¶0yã¾aÀëÇÒ‹ ã†29úS‰ ¸$ñÓ Q†#?1ÍÉ{qôÍ<ËÈÈSQŠ0Ø>Õ9õaê3H_‘•ϹnhpYWÔÜç9¦˜¤ê3œ ši;O Ø@ýåíô&¡;ƒ צiáñŸ™@¨ËŽíÎxÀëL¸úSwc#pÈíŠfì`çñÅ&üŒ‡'ƒ4XBü§£özš #¨úSI*qó~T»‡8Éô+ë×´Æõý ŒàŒç¦M1˜©ÆÞ½NhÉÎ0sìiRGOzk7#€÷¦È#jëœSî»A1»T°çkZxc“Œgýê|ada>´è—QWDQµF}ÏZlpƒÀ8bœ6ÿ*Ö1!²?º2W¿ÕÚÆÔ0‰Üárq|w¬;ízââL[“ cïîk:Yå·K#;€Xæ´Ñ¹¡»z’3K'œ®~e~ƒééZ.©ul’G’Ô{×9OYFظŠjVW5d±Û»ŽI¬›‹B­/¼þu¥e¨¶åŠs¹cÔ}jk¸‘øê?­i™›º9¿)»E_û#ÿtÑ@\ú~Š(®“œâþ .'ðÌ¡±P§Lýëi¿Â³ÈrY³Z_}òAM^2=ó«ÿ³U…L–æ¸q_:h|${Bdü¢¢w/“ïŠyËž / ¦²œgÞ¹ЈJàúêsN ¼ŒäzŠa÷*¦ri†0œÔ”+²²°8*zóHþƒzâ£ËÆ0:àP\‘ƒÚŒs¸’Wæ“w°ÇÖ†Îzz ¯#“¸<óëABÉ.þI=OAM,6ðiŒp8ÏRzÔ{ò=yéC·ïÎ ŒqC>[ªçêrglž1Š7–ç?µ7èZB 2Ç­3~r2Þ™¦©ç`ý*"pçî‚Ú«Š3d¦P'<ó‘IæpÛÏJ®d' o÷Ç8¥W''ñZ² üÂdž8j‘\ä›9Æ{ý*¡”>`þðâžuȸȃvåÔ “ ®FsŸLUE”nûÀsÆOZ•·pÞØ  ˜ óë´JR\?Šq+ÁLŽHäPeT\±ïÏJz¿8cŒŽÖ‚ýHþ”ÐG9À>™¨Êg±pqš”¹#p=ÆE7Ì*Ù!óœpi€r~Uôjt˜` õÎhGÁç2{sS*HWøŽÚïU!Àا±ËU¥HÀÿV¿ƒt E˜r™?89«hÎßww>õ@`.Jž;†©Ñ”6Äš´ÛÈù‘›ñ¦1u#=sž)U”mÎÏÖšûF8>ƒ Ð@JœE]§œTGžê:æ•e(2„`W ªËŸn¢€@ÇéýÜŠx`ª~`ã‘QodùŠúã¥*È Ÿ½ÉúÐS&ŽAæî/ÿŽñVAO$»k4«`õ«‘6ÑÎþ8Íhµ¸mÁ`Go–£‘vóœ)|½)»¶(l¸ÐÒç+®Iã­2@ëÝ}¡dubFî™Ï§¡xÉ\3Ç4å—n} !»rr~hòÁoã9=}*C·wÝü Î)¥Àê§§v c„@ä‚G¦i6ŽÃ4ÀEÁéƒL ¹ØúÐ%•Îðz« àšŠRNåÍHy@äT;·¨P­ ¼î±²…'0G­)]Ã0*0â@@À#½#±àœ~½  Távž{Ó~ï“×8ϵ;ÊÏZi9Ü;LdÛ˜c;qŒ@•AÁzÔHräoÊšr½dïŒbX°[%J‘¡âœz†l*£HÑîq!éÓµ=%-’d,;m¢ã°ù†È#늉Ÿ'¾@ëëC€W«çEÏ'$ãÞ€&†T,Á•‡>jo7 .ìКªy÷4…¯$qß=©‹…€ŽØ¦;ñÀÎ9æ«–*9`Aç¯jr¾z~cœÓ‰²9#4W©Õa“–æü°NFìÒäàüù9ì*=ã8ÜC})w`n\z怰¹#’Ì il·$óP´›!Æx¨Ä„Œ7Êq“@ìZ<‚@síHrÇ€ÜZ¬ÔuÈ'9ô©ÃÙÏ|šÄ9Æ66î„æ™†-óÁõn)ùê ¢°ÎxÊ€ßüz˜~ñÀ¥¨l0˜Í·w¤P2?;2²”#oriêêÜ©_ξrr€n´|¿ÞB1Ÿ»@Ü1ÕF aÁùqQ4„dGà´y‹".Ha‚1L¥—%FÑè1Lór3¹F=ºÐØÂ‡$3Œšnål‚Xž£ŠQ)<½ÜbŸ¸÷ÉJ` s¸þTíùîÇ=¨„ž„‘øS$>Ù>¦•¾^yüúUw9R0ÜÓÌ®œÙäRe¹7Nõ»6}Í1Ü89#­1<k6pJœ÷¨·N3Žüõ 1ÇÝoÎ3ò>\Œg&—9*€=j¹r2y Æ’ ž?,;——gÚ†~@,§=ñš†?•qÔc)Y°~R¶(+7ûX# Å7y<Ýzâ£,AêO¨#¨¤ÞUó¸ŸÆ€Ãw© þtÜ0ι÷¥,3À?39ê?ñêP7g Ÿ­#œíçÞ¡Î×$ƒŽÄµ ŒØf˜öñÖ˜Ä7ÊH¡Ýž¿Î”¾xÝúPÇ#ñPIJ¼ŠyàmÆ=©®ãwÍœzÓLœüÇ> w˜S HÅX´bÌ 2{ £Î>óx5zÕ\ÌERÜL׈¶Ñé\滬™dkKiŒ Hàu>€úVÕÌÏ›q*}ôŒ‘Ÿ\W ’NI$ž¤ÖÛ#1E8SE8P©i)hkbÆäܯ•&Lм7­cŠz;#‡RC)È"œ]˜¤®¯!¿»EQþÒ—ÖŠÛ™ÙŸIÑEÐsœÄP£IÒ¤n©«[õ$¯ò&±|̹è@íšÜøŽþ›wleu+2 ì|ôýMsÌSq¹ôQšâÅ|Hꡳ%W'¡éè)±Œ×q¦|²Nï`NDH ÷}9®6t$HÌ9ÚØ=öЉŽÑÔ÷Z29Îæ¦!çh÷'4†…åˆöà(⑘" ÌÇzcH½» Œ‘·,{c4‹@Îd)8=;TŽãŸj|ØçßqÅW,¸<’(®ÇŽ£Ø˜=9Àè)°8'Ò ry=½})€×e.IÁ#¾pi qIÔæ©Ë&]°qíŒñLóˆLåqQË©­ô4’RßaÇB3P™Àm¥‚ŸB:Õt˜çå$Ÿ@Ôâå›ýAªH†É  ‘÷~ƒŠUrxs÷ºUV_”à6þLˆ°<óÑ—ªÄšLÈ~SÛ¡§y„…b;Ž*™,X6ÕúfŸ’1„Qôj,"ò30sÅYW7FÇûµž‡ÇƒR†`¹R?všpNG®Í7Ì3óŒwühÀ`XnÔÃHl÷çùSCæ(Á'ÛÞœ%R1üÍU`¬Aù­!-Ï(sï@X²Ç®úæ„|ƒò•çžµX;û«×¨ç4ô`3ó‘ЊÄäƒÜ^j?0NAçÐ҆ǿ!M Ô'±Í0° ÙR£¹â¤ÝÓ ×Ñj"[>cL \’ÌÝ9ÀïHVÍŒÃÐü´+€Ÿ¥7$Ž­ùSIù°2h VÜ[9?…9HÁ“ïQ©ÉÈSéƒOG8Ç­8l|ÇŽ1ŠM¬zŠR}>÷£±×¹ ÈPÃŽsIÆáÀç¯46ÌôÁë×­G‘À SÀã ãߥ+6å3Q\n ¸4¥ÀçpÇÒX{@¯¿jis¸çqÚ£3qË= ÐO˜2ªO¸LÐI¾QÖ˜Xÿ{>Õ ‚á¾ìS÷Òœl¯ñÿ×Dz¬ Èü©¤Âè®[íœm¦ γì*ÙÒuWÀþϾ<÷‡ô§ajÛ°šuæ}ã#õªä—a9G¹žY“£’~”+±R¿ýóZðŽëN¸}Ñ>™QüÍ*xW^vÇö| …¦AýiªsìÅÏæIgÈ_žœ)?{§Lòke<®œî²·Í2CO ÖˆÁ ûGô§ì§Ø^ÒÌ&-ÁÃ~&˜ cr=û×H< ¬•éj=Œ¤ãô§ÿ«?}bûïÿÄÓTjvµ‡s—i ÷Í@ÎG­v#áî¢NîÓoüãô£þ½Û6£ ¯´dãõªT*v'Úùū†\äÆš[¾?Zîãøi 6ªƒÜ[çÿf©WᢨIö·ÇþÍMaêv'ÛC¹ç¥òsµ}òiwrH*=yÍz"ü5´êÚ„¤úˆÀþµ"ü5Ó‚àÞÝg¹Gô§õzƒÛC¹æÄ¯9Ø=óJ ÛÆÜzôßøWIëu}ŸPéÿÄT‹ðïES÷dzøSú´ÅíâyŠ·È~aŸj7sœ’+Ô×ÀZœ˜§aèe8ý*Aào޶nÃÐÎÿÐÓú´Åíây9”¨ä½i7+u×®/‚|<¹Æœzî•Ïój‘<áô .Ç'ùšU—púÄOÞ8Û¦êi~?„{×´¯…ô%\ &Ðx©‡t@1ý‘aøÛ!þ”þ«.âúÂìxyŸîŽ Bòœç8¯|>˜#N³týÂÿ…J¶ŠÁ–ÖGB#ŸÕ_q}av>YW¡qø r“&à¡Øü"¾ƒX£C•ESê)ôþ«æXò>y×2)híç~Çjð©LÔ7.xÃÔ@Ì?•}E?ª®âúÃìxÐõ¦\#Q`G_³9þ•~ÓúÒ&õ~±öú)¬2îX}Ô|1¯ÜiSCqæ¶##<“é\êü=ñ[£F“>òÆ?›WДUû‘íYàQü7ñc–Ý®"þŒjxþø¡ó›XÞyü³^íEÆ!ídx„ üHË–û{4çú)©—á7ˆJ‚n4Õ>†gþ‰^ÓE?c{Y:>k8ߨŽ@.öZœ|"¿Ï:­°çµzÝý”CÚÈòŸøTô‹þüþ*Šõj(öQì/i ¢Š+BOâHÿŠ"ä÷V„~1åw¹?{žœQEqb÷GU ™3  wúóQî$“ÀéÚŠ+kü¼õç½Eæ‘€>‚Š)  Íõ¨™‹aFŽRZPœdôÉæ¢ îåLÑEPÙUœ”þ•Vf*§¶h¢š%œv­¬ÝÙë&Šì(8aõ«ö—³Mn¶çŽÞôQZI+îi@Û³:S‹ûh¢³5’6Ö>ôd‡À¢Š©.ÞG&œÌG\QEfSÀ^¾•u'î¯nÔQI2`ðGN”¬^ôQHF£~2:´ŠÎNq×4QIŒ`\§ó©3¾âŠ(ò{ŽÄPÒ0^½(¢“ØdyëNOšfSÐ1E2T‘•€1K3¿N´QHEk‰YTð?¬’³ÊƒÁ¢Š¡Š$9aµx•bÊŒ¨=ºQE1䯦}*uŒã(©b]”d•]ˆ?¥RÊNÁëëK““ÍUu¤d“Î;ÔN“ÞŠ*F1AàïoηOSÞŠ)r=ò*Kõ@ä“îh¢ÆÇ“Ðw©÷rx÷¢ŠŽ^Y~´’"Æ QÛ½SC#Šg.A#J]Ûܪq’8¢Š6)å{R.“E3(Ç#¥MºÉrî uÁ÷¢Š¨‘"øÒ¡xÕŒ’äàðGøUäðÅ“²ƒ-Ç'³ð¢ŠÖFm²ððvž­“=Û{_þ&ž<#¦«nÌç=¼ÏþµWLaÆ2”»’¯…´°yŠCõÔ‹á$ ±lúÊßãE´iò1s—qãÚHkwoñ§.¥"í1`}h¢´öpì‰ç—qÿغYÆtûsXÁ§'M>Ðcþ˜¯øQE>Hö3î=tû%#m¥¸úD¿áR-´ r°Æ>ˆS²Ù"ª®v¨AN¢Š`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙleptonica-1.70/prog/fmorphautogen.c0000644000175000017500000000502112242266372015502 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fmorphautogen.c * * This program is used to generate the two files. * If filename is not given, the files are: * fmorphgen..c * fmorphgenlow..c * where is the input index. Otherwise they are: * ..c * low..c * These two files, when compiled, implement dwa operations for * all sels generated by selaAddBasic(). * * The library files fmorphgen.1.c and fmorphgenlow.1.c * were made using index = 1. */ #include "allheaders.h" int main(int argc, char **argv) { char *filename; l_int32 index; SELA *sela; static char mainName[] = "fmorphautogen"; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: fmorphautogen index ", mainName, 1); index = atoi(argv[1]); filename = NULL; if (argc == 3) filename = argv[2]; sela = selaAddBasic(NULL); if (fmorphautogen(sela, index, filename)) return 1; selaDestroy(&sela); return 0; } leptonica-1.70/prog/feyn.tif0000444000175000017500000031453407771520244014141 0ustar dandanMM*˜ž <gÿÿýÕÿÿÿÿÿßWü€¨Z<Œ´Fˆ†‹£RÈ š¢ùI t]—FÚ ÄcUK!sˆ¡pvGË” VÈèÆ^9þGÊÄÏÎ#莈èú:#ÙA,*EôŽi+˜8CY ÞGð‚B"5Jˆë $:&ˆíŽŠFxOeCÂÁ²Ÿ0àÎ#ÑD## @¤ã°„-¢<¿‘ѼÂÊiaQÚtjÈ0ˆù|º>ˆhÍy DQ)%BKQˆëËá!Èð§a8@„Eª8î""";.-„¬ ™ÇGH£î†]Œ,¦›Jhб‘ˆº ¡ÙtmÍ0‚ÔLl§(sÀ$„þyÜ„(3ù>$„])thލN¨Ž‹£æGFˆÂÓ.‹¤¼Žg=;ˆˆ”>añ  rÜD§c#æR;B#ˆˆ¶XâqÒ¦ÊJ”ÁJ:†GI„‹ééÂ(vc0ºT¨¾ÃÄb†¶]Ó @3ú—ÔúUÈéaŽ];».³i2B<¢èÜGJ"Gr‡f ˜‚ Â8‚*¨ciD"8ä3Ž"8ˆáÆ„G8âãÒVS˜–ÊØ)‡* ³pÛBBC=‘òê4 Ž¢â#Aà\P(E= Bóbö†aÔE‚>0ŒpD|»6ˆÿP‘ôˆé]0ð@­ ,a8#Á´Ä!"<&ˆÇÁQ ¸î"",!eä³3ÈèØ„8‘óÙÌ!…«§rC†¡ÄDzDDDa†„DŒzj¸Â|AÚz##é¡xL»‹â Ø«“LN,¸dDà®8ÏpòÛ´@‘ÌÑ ##ш)´‹0ñЋ/‘Â$G DDDHƒˆœq¨#6"!ÉŽ""Ј†G"8t""#D6",1G²Ú2YôG@!f‘P ÈéHèæGæ§ bд"'DG„Pâ"""#Ž‚nÊ eÑã#¦É¾#¸âã#ˆG¢"""8Žñ¡ °D|PaÕYÆGmâ""""-Ë£GË¢>G c.ÐfÄDDDDè‹£°&ƒf"$Mp&F"R…#, ñ%¹¼¸üDªdq‘ÂÑÀÚøˆˆ‘8ÁÑqK°± ò8b%K0G28†øˆ‘¼ŽÈù#¢9ÀÐ&"""@‚͘fâ$ÍÁlñ*hŸ.‹Äx¸d†ÌDDHa ¦Ö@Y,2àÊáµÅl&€x.qáͳ9}@œŽ…ÙÁË‹!¥ ; Ür¤Qd åT‚òRYÿÿÿÿÿ¿ÿÿÿï¯üãþ9‡¾øA ÿÿÿþ¿úÿ¯þ¿ëëÿÿÿÿÿÿÿÿÿ¯ÿÿÿùÒÁpˆ0Z{Z¿ÿõ·¥×­vø}ýl^¼†ñô‚ãë¾ñ_ýÿ×_ß]wß]ÿÿ\":ãëûëûß^úÿþÿkOÿúïÿÿûïúëÿ¯½Õ}ÚÓý½/Ûý/_ßÿéo÷uÛÿ뾿­=¿á~Ÿ]ïßëµ×ÿÿÿÿµ§ÿ×}ÿ××~G\}uÿÿÞÞ½ÿ÷ÞÖ½oÞ»Zí}w¥¾¿ûzÿ}uýí~žýõÃÒýõÚïW~õõ¬³ûÿ~Úé{wûÿÃ/›Ft×ö”?õþß_}úî¿õWïôßu~û×÷ÿ¾ßÚZûÿ·÷Þßímmÿé^ßéïøímûi{÷þý×íÿ ½_ÿÿÛÝ{߯ÿ¦ÚÛöÒ^öÿÛý4E øaÞÞ—¿·þé>_ooèD?ïíôÚ¯íÿÿõ{ÿ·ýtß~û}ú¿½wû}ÚºûþåVÝ}¿ÿßÞ¾ö÷öûMzoÕk¾¿_o_÷]o®«ÛöÒãWØ~ßï¶ÿ°½¿þûõïtºJýVñöýµ×o_}¿ÿ¾¿ÛûK½¿Ó¾×Õ½õúÛö=]¾½½´¾½¾«½¿ª÷ÿ½µþûÒúÿîÖûÓoµõ}þÿmv´EWi¿ÖÕ¿ëïKýúm6ú »a¥êûëþý·ùdJ VØ_ï½*ý÷Ò}¾‚±0Ó …ÿÛêÔ‹/ö¾ûïNCKFÁ¤¤ÞøKÐ~ôŸcý³àÔÁ‚ª®·izõ÷Oû Ã `ðÚíé/ûïû¿î˜ba˜onÒõ÷ý[W}ßh"‚Ó´Â Ò]¥ª¯uË!’#¢ ‰†[† 9† «i„•ÿÝ­^Þ±*¢ä\.!– 0AÚ %ªømº{Ä”`È5(^š“ h@IÚWÿ×þ$( AãöƒÊ˜„zûíZûø‰ª¯ÛHïPÕL.¯ë·¿‰X™>ðU[ .ÿ¥ïâ":Š;  Â¦û^Þþ"!–<BÁ˜'ºúûµˆ’‚`°A§¦×þž$¤\‘ jþ/¦ ¢˜'Úݽrº«MÁʪ „õ$™³Ž¿Na¤4íüDF·ôÁÊVO¬¶ŠQt];ý¦†’(*øˆ‹ïú÷´Ë©Uw½aÄZ ¡Èô(ïâ""$š#ox‰$™r‡)ïâ""þÑe«qñÿûïÿ®ÿµúß_ï®»ÿÿïúÿþúþúëÿÿ¯ïú×oÿÿ¯þõý¿ë¾¿úþÿûþúÿÿÿZÿÒwÿÿõ2´GËäs¬! À †¼ìÔŽº¯™L47û!öˆ9—Ÿ½iûûï^÷þæKÿ¯^IŠ`Ž"èÑÿoþƒC?Z~í:~SŒ¹Ÿ#[vºöšiâÐgfP3SÇ¿úH7øD‡q™àÁ²¡“^½ûô¿‡A7¦…Ã3ƒ.F¸ÁŸÿ÷ì“éÃ%dXh°Ý§! Î`d`„èÿÒöÓ mÚé¶Gw’†‹»Åú`„AÇ!‹%äæH‰]nýõñú§^ªéÕ· ŠöšDÇqaÂ’¾ß»¥úµÿéún­’{LŽØi¤ƒ»Nž˜L®ªUñ8ã¯â÷í>µ×¦ªžúvE›wµHž? ”daß´òuþ¿C­ûµÇkë¶©’tÞÖý¥ 0ºý?ò åSÿõÕ{ýPj†›ÿXJ¡w÷ÿ“Ö—"ŽPá¿ý¤Ñ1ý-{[ ·íU™ÿÿÁÿ¥þøt½é„þLuÿî¿[Þÿܘäªÿi+¥Þ ºÛ¤ 9e¿i¨aSÕ³÷^N¿ö¿ÛÑ(þê Ýø½•«_ؤNí%¾ÂúýÿÆVýÒ#~¶| 9Õ’gV½¦ƒHXA±I¦›j¿tæŸý/ühݹÜ{‡]’RüD ʃBÝ4ÐlRkÚV«ûÖ—´—ËIùdXÜ"]u;/ÄDD0¿iaª«Zÿ×ת®R—ÐpäéÔîµøˆ2¦Xá"øM h4Ó{N×ÖÚ'gFKëéz‡m›‰?ð˜Zh4ø†š§V½;AP`žˆÚ /¦ºOø|íUWˆˆ‹ útÐa>!ªØ„ÂiÈe؇E ÍM}UWÿ"È9Ø(ÄGdv»¶›:t4þ‚ i‘OUO§×íï#¯HDEª¿M¶M aˆ0¬„@n›þë•=¨ü›eB Á3.§¶CÅ'dXP•< Ð:: kƒÁP*¹G…ÿà ôÔGØAÖðz“º$ïOL  " ñË›CâÓ¬ø]GE Ô¿Õ¯¨¤Ýýý]‰ Xo Âv)CA‚!"š¸ÂÎD‰»Å= ʲ8ʃ6Ê´«ýwQ×Ýn–ÒM†DQD⫨&¡4ZI—Ú ôNû Âqa 上]¦¯Õß¶­]'¤’m¶ÂÝBi… XAí:·Ó{&rí¢Ní Âe8Pˆ_)A1ëúl%ÿÖÆ:Û«IÒh2*.†‰[’vƒ4/õ÷î“ÂäqDí¢1Ú­—Á„2q™³dï¯;˜ÆNŸaêÖÒïµKÝô­'–4/ÿ÷ýµéé“Ì èÔ×§U „. "«ô2>Uœ ߢ0X¿¡{¿µ^ôÚzZÒú¯Ö´É:Já:N9âOŒ}ëÖèZeg_ýiºUÿÅ|2#¯ÚVÙ÷‰q?é­ÿiõ}ðáá<&Ù{ [ÿR/„G|ªîûDboëý cN¿Vj@¿_Ðõ]¿êé6 °Týðœ>•ÿMëÿUýv¶Óëɨ_¿ßÄ/Á}u»û÷êiÍ0ûþÈqÆÝ{ú#®×Ò·½yÏëÑ+ú_ßÃüÿÝzÿÖ—«ÕýÓ‡»Õ~×øPÍ#æÑtG×ÿÿX_Ééû P_aß«Ã#ˆ¿ÿª·ù]l"þïMõ½É aˆ"÷úûf‰½/ÂþÅh•ªÛÿÐýت®úÿ ÿÝ8{ÿ­öïþÒ¿ éÎ;Ah+öë_¯îþbë¢7 [øgç¢RŸî¿ßü7ÿÆšl0”4µõÍ;?ú'^»Á·ÿ%¯ßý«”=tA§ìu§·o÷Ý·[ûI„ØÛ C5´›[]kZü>o÷ëÔ7þ¾çÂiýØ Â 4þ­áž}ý[¯û¿ûTí*,'Å/!QÓ´Óõ_Üâ/ž.ýÆ*žˆH,ÃWÓM6úc½/nïû?â"A„È-¦šA§!ŒÚºßö­íš*ôì?ÿ°¹8øL'„HF¹+ôÓaWkL†¾îÌë3¿íúñzÁ3XM4é§p؆ÅÚ¶×]oýÿ÷ô›Ù €ÓBÂgƒ ¤ÃÛ¡{NÔSö—Ã.6ö»f¥ßâ""CA‚Ol„lTlCa¦Ã ê•çþë¯í$èœ7AØA¢ qg*É—(ˆ“›UµTØIv8áÚ³í7zñLx°Mª¶!±A4ØíW¯h/úºÝrVÑ;v‰Âè3`¹ò#Š|Sf¸ÓTÐa4Å ÖšdÜ{ëè#C ÃLŽ.Õ„!X'ûí+­:ôôá‘Þy¯}¡jYñˆˆa4Ði4UzÕ«uûB Â˰L-¦Ÿ‡úø‚_­RZÜ+Ý'á¶Ú ‰°˜N­5M&Ô4­ÄDDCœšÿDoóV ú׿Ü2Wi¥tHv" &k h4Ó!Ü$QM¤½¨ˆ¦?x]õýÿ»zÚzvëá6""&a0 °ÓLBA„W¦–§ª%~«õüAdX__눈`…–é„ÓI¦ôõ×ëÖL?ëå@Xÿëm/KgN0¼/22¿ÛI/°^½ë ÿÿúô"  ³S‚#¡½„ÛïÿÿÑ[þýéü4lQâm„µ§Í74_­èúû_ÆëôíUQ­¯ÿÖKàßÿÇÕ/™h"ÂiŠˆ0›¤Ã _u_àÿþÓ}¿ˆˆ†iˆtǦÚÚëo¯ÿ®-rÆwÅâDàÉñ®Ða4ƒMÂKvš÷ÿµÖ:d&VÄDX&ajÅ a8¸iXMoöÒs5‡ ¦RËÄDA”*î6!¦©ôÚVžF÷õ4Wˆˆ†Gi¦!„!„݆”0îáÛLí Ã%A²Pl]Ðb˜¥è…n0Ÿˆˆ‰« Ârníq^»ñ & íV,©b—ÁöÑ2ÿQõA¢ApH‚e½v…kË-M,i¦“P…„áœ# BZ9O_ÇÐí"¿¦Ç5ÛAñv# ò„m­ªýv"çõédvÑ;ot˜PLà.ˆ^—"ûÚ§ÂÝÿ{MÓ‡ Žá‚Dí÷w2¬9I“ËY™SN+­Woë}[I:'—n¬&¦Æp‚ e…´$ ¦à¾Ä›‘4úÝ«…‘¦éúuïwdw ™Èß.ëq¦°ˆèÏ‘qש*†‘7Óû?_ÿÒݧè6­¢wa†Ÿ Ð»Ì£ZÐUÔ0›Ñ‡t­ÿþéßýõ×NàôèœC%ÔLvßôZ u˜5^…Ø­Qoûëãë®·VÕêIÒ·W@Ú;"»õ³#)2‚ ø¤#×_bNC¿ëÿ«_ë×îƒU­t­´þÂi„Ó ”@ÉÆPÕ?þ”BïþµÿßÇ[ãwOWõÖº“j˜BÓ a3Á Á‘úiªÓÖ¿èŒ?ÿëý!ì+ÿ{×k;Ñú'”Kõ \æÔ‰µ|˜¯ÿ{_ÿ _ÿÿ×ãôÿè3¥ø&@`i:MÝL αÁë´ïêëÿÿ¯VL þ½}~‚‘ÈêÇ;AúVÈ#wÛî¸*a0˜§»QÒ†®¿ögÿù¿ëþK8_­ÿéÅ„¡›b¨M&•ØA„™pìˆC¤“>âàCÃ) ^·Ž)´“µÑ«kÿýÿÐßýa‚DáÚ %LÙŸø@íIŽñÛj Þî¡‘Â#Çw¦ª820µqi‘ÕF „"†ºÞ¿š/÷|ß½°©¹´MøB@É$g#¦m‚ý5îÿ'vºoßLA‚ ˜j¢ÄA…iÝ1LZwÚûiÚ§äêÌ×Ö¿ú½ÒmâÐ`„2ã:"ª8ÁéáÊÚ¥þÿºAðé;!ã „ „,&h ÿ6)Nb2Á„Ñ馃M¦ ±A¬0IµÖÂÚë߯õÓ¤Ûº|XD\ !i-éWÿû}ý°žB=á"; SMPxL d›8) ÈÆ¢"" ÉÂ{õAÅ1¶ÃVÂÚÛ×ÿß~É: •‘ÛDî÷ØRPGÈÁ?Õ+~ÿÿ}}+tÜ oÐA´Ñ+h•†ÒÅ„Âh0˜"Sqh"®UeMa¦ ÂqLTRÚ§ÿõúCTôÛƒ%l;rãqëÿ®º‹ýNé{!ïNl0L˜BÂa0˜Mˆˆ†#Œua„Ó„˜Oõý ÷ÖäVìŽê'¿Ç®ïÿê{_}ïVÚuÒÚ ŠCDñ¡h0©„ñ &šÚNÿÿëúñ§Úz á‘Ãý/úÿþ—÷óñ—Eò?Ûu[Nƒöú‘2—¢YUL ÄCÜ Á5×ÿÒÕ{×ÿýû×ÿþ¿ ÿZ £¾–Ýq¥ý>Ü‚A9O¦ÐÑ,xˆˆç?öN¿ÿýWý{i%Ýÿÿ~ ÿz{¾¿ÿôé…`˜BØI·¬®/þ¯ýwÿý÷ÿñÿmÿþž{õþ×þ·ûÐÝßpÒãý}÷ÿÿýkþÚû óëÿôÂÿÿî—ü†oÿ¯îDÀ¬CþÖÒÒÍ?ýkß¶_íWǯý~ˆï¥õ¿ßÿ$5ý®º×¡B?´®›_ÿý/Šÿ½4Ýÿ¤þÿ’èº#†Š¿ÿÿ£–ëÿ¯ÚcŽ—ûÿúKü„?Úm$ïÒÂúÿ]¿úïÿ$'ޟ̊Ȩ;ÚaSƒïzÿø/ú]v+^ÒbÕ¾×½/ïõþõ¾G"@Ácö0§°ƒXL(NÒ׿DÖûí4A„àÁ.Aw a˜÷«ý­/_þ»é%C;02:<Š úñÄ[ SÖäE_å a0­SЧŽ;¿ÿÿ¿ÿ_ùqEæ"Gmhþ#"=„š 0š 9ÿt•Ð0…÷L‚«Â¶—ÝS×Û×ÿÿ^–s5zgã°Êñצš~«®øˆ,uL(&¤+¦pÂJºOÙ§¯ýþÿþé†BïÄHi”9æ™{aiÃÒú4ÄFC„ ‚i…U†)¥M×úÿ¿üiöL÷uÎÉ ÄDDL–‚XKmBr*PA Âka*qOaWcoïì}_·Kÿî;Ñsd0š¶)bº`ŠtNõ±Vt¶oí†Õêíw]ý§r‘úMˆg4á¯e•M&›L0•ÅõÿÙ“M†êï¸àÿøˆ°˜MbÊņi´ ›IÛ]Ý¥PÎ0 wªž_úý¨ˆâ4_M]ÂnŸ¶•±§ÈD³"ù‚À©úû×"µ%X”` %jÓ¤Âi°i-"vÚƒ´Â„Gûÿ†+¡„Mxa&šlR ªØL:D‡o§j>lþ^"F³R:ì'Õ¤ØI7M†NÚi‡¦1—ÀòäC2üìёᵄuA…µû­é&ÿt[Ó¾!„D,ÈÀ‰VxÞ„‚ìÄ:Þ­õ_¸zi«A¨L dà†ÆxÌGGöIE ™o0ƒùöõ¿]^škD⋺iªa0AšðdnTpƒ´¿*0.‚õ|”Ýß’½éÑX˜qÿ·…§ëHPýi×·¦µ é…Jí-u¬Ó×¾Ã×þJÊ ¾ßýú‰eÈøÉÅͯ޼&ÚTŠ Á¤ÆÚ»k¯®¦½ì¾ Њ%~µÿðœa4b_ÇTMî‰:դ㨪´“_ï9é(}ÚlRòpW±M¦©¢Ü—’¬Ô)GñÒú x`ƒ x ƒ[ÓûTúûíóE_ÿ$ÝSáÑ;Í~, Îjm/ý(¶åp,DA‚ &šiBah4•§]ëÛOý¯äSi<ˆì2+ÓBàâ ^´>Ó„ŒDDM\\¦ÂßkjÚûgüÓ®N;Kvð[:'vêÐ~x͵_Ý0LDY&qÂvšMÄ(¦*Â×}¯«Ðý¾ôéXdpE{ ´ý0ƒ<3b›ášãæŸÿ‚™\""â.íSQlCtãm#$êúûY‹ä¡oP„ˆ®Ñwø¿´ÏA„BÙ>!`Š)êþ¡7 Ì0™:}6£wÐàÿ¡«§¾«~{´Òqªi¦aÿø\DC.aIÓXi¯ÿoýz§ªÒþ6îÒ'l<×múM} w2HDDD0…Z2vc¿ëÿ½ÿßw¤›ŠÐd½‘7m”ˆjùÚZh>šB?éÿú¯Óúû¯dœ±ÞõÒ °Â ‚5 ˜Ká6¿ªýθ?ÿÿüû­t6ý>¯I„ð@ÎŒ0ˆ?’Ðôê.øÿÙ§‡õÿþ•/ÿ¤ *PcíÕ7§ „ІG|Lž»þŸj›ÿ¿÷üÌÿk²þ¿¢wŽÞ˜*Úx@ób”ã]ÿm„¯÷úÿ9ïCÿ·_~úúN‚ è—„„uµ„ì Ó:çŒKíz„Øá…T׿ÿöºþ9(­ý¥ý?êîwÖ, Á4 Ô"e9ûU½°¢iÚn¾ºýÚÿÐè¨ÿþ­S}[ÓO„J˜P¡0M`àÈyæN^%ºtG~$bi­B 6I4ûís=½}®”Î&+üWÕØ]ß^SM5 „Ó2N!çÏâÊÉø‰ Ê5§i„Ø¥Øk¥þæ‹°ÿ~º÷×"i¯Iä$5Œ*$?L&˜(&2¡’æ¾™¬¼DDZ :w ÐqL0_Ú»÷õiÿWÕºÿ¦¡Dcé4›d+„ˆÝª…P©‚a0”àÁ °íÙ7)^!”¡4Ö¡¦!&š}…»ûÿÿþ¿Õªx@ ÓB:ØL!aBa4Pƒ$3†O)÷æH/ÄD0A˜pƒ(pƒM ÂÓªÚUuÿþýj?»!!Bt·íá—BÔ&¡0¡0Pƒ) yÁû¦>"""¦Dí'ƒÝ+ÿýþ¸CO¾»§½¡hŽÚ"L*„ÓOÏ‚ø¤lÍ_ïXˆ‹A…ÒmlPOÿÿÿá~é"@Xv™ –CÆhi¶††´/T; {Ðh·P¼DI&©Ðw¿oÿþ=Býhl]„ì ÈN«i7Möžî0ƒ2O}ãxˆá‚kÿÿÿüU?¨½ii:[È;îØMIà S°AL `Ž'½úB7iÿþ ­<.÷ziöþÂ첄»°”>‰ÛDoÕS@ÍB›#1ÿùe,}ïõÿþ …ÖHE¿ÿ]t6Dà˜NÓ´îµôôá¦I­Ø óc62q’ ÿT›3Ý}¾ü.×½ÿ~‡Úz{¤Úué÷yy›NŸé„9AÈ'º÷ÅCî¶ÿºÿ ‚Ý>߯ûuõû{ºØºM&ïÖÞÓU'Ÿ´ÖL`™›>Êèú̸JŠzúý>ýß_ö÷ÿ¤AsÿÒ¾¯ÃV7i~ûUáÄJ%N ƒ'—"ø@ȘÚxk¶—÷Ãô½½ë†ÿÿÕdc?÷¶•øïú ÷¯Ýéé䮉Ýw'ÓAÅ„) †¶}ÞˆÇi’²˜0’mÕöÛ=zøKö÷ÿÿ¾¿ß_aëé °bÚ÷ý]=7¶–“‡.èœm4Lð.ƒ( @ê™ &˜„b‚kÇú·Þúÿÿÿýv·íÚj¦‚뮾é]>ûÓ¤Þ‰ÃDŸq„©6‰»ua5m&ƒ¤õ]׆f¯ßÿÿÿÝ鿆þ»ÃïÃZ®ýk¿Më’ÇO Ñyµ½&ë†amZlƒŽ“kã]qß ýðúÿÝwÿÞß·»¤FöÝ ¿Çõ§ì&.Û¥ºt›_pÈàˆî]ºé½¬8ˆ†[ muq±Ã7Çßõ¯ïÿÿLP~4 ¤UíQWÿâ¿þ°Š¶É˜ðµÿ¿3š£GîUPˆƒA…°“M4Ða6Vÿúú·ìé¸A× .Úú¶®·MæzJž˜=|™:%ÿ^E™Á„C"#ÿ¨ˆe Ÿ»TÓMЦ“UµÿöÆ›¦íqMDpÓ´¡§®gÚ®ÿ´ÿ&ÝVü“ØL$Lw¡#r;—#£ñ ¬L·Oé´ôš  +Ú¿ìD2;Ué±ll]ÓjÚ,v®ù§û‚)Òÿÿ‡I¤mÖø°Až"æfd ñ%ÑÑu#´Ða2Âa ÓN(&´­î±I ÈílŠ=¦â£b¬ ín›KW4õ_ÿþé­Ý‹%5i¡agˆû(õÁ0LÚ*øIÃâ‚tÚØˆˆ†LŒ|æšbâ0¶>Ö×_òu¯±ZÛ'wö‰»´ÐpÐg8F˜#â""ÍÁN9Ò-ZÓj+ªA„ &šx¦)4Ø0“jº¶¿íu¨ÓýI] áÑ8§éÅ„$;“ò)˜ˆŒ=¦Ht¡…µN"" Ëô'SƒI Ø­ˆj©Ø_z­^—ú§ý&Ñ;´Ò&îаƒS8Dâ eŒÎ &xA„"""& ¦šjÐ0ƒMŠÿßÛUKí’uM¥oI Š;Dí¦ºa˜ ú`ƒDD  Ž×Û_}ýÿÞúô+ÖõV©eå]Ó´¢8ˆˆ†o^é_¶©wj½ëú°ƒ«ÉÝÃËÈd‡ ‡ÕþŸªü^µñȃÿëù( ôŸ÷hRZÛI=úêDm}q¶”ô?»ºý6e•}¤‹ÿµ]Ék¯K÷ñëß×<’ABøm$­[¯÷úäÌúä0¿â ë¬ê†—à 'í§Õÿɧ^Ò¥ÿ4 ÇaÒGeoÜA°Á$…iÒÛ3ÿªö<"(ÿÕ{Ó2 &“ ü0«b“bþë]³?kô‰÷ü"7õá4ñLì =b&‘µ¶ÓI§ $¶­Ÿ»4ýëÿ@Ÿ’’8-´‰½ÎÈfTñ`„5鄃b­]µ[–ž¿ýx%Zô—¬DG Òm1TÙrùrˆë¯ªèÃà ÅtëG ïVv&Wâ!„ÓMqA$»vÚvºþi‹NWöK1ƌȫLk: Âi«NÐlCbÛí;Iµ­4í§Dû¥ˆˆ0M=§·âpÒM3$¦»{áó#%â#°A‘ÀNÓ´Å~ ïŠøü¹ÄE›dì&E»Mb"f¾Â„Ò45×pæFkÒhDDE‚ #°³L/¯ ¹ ù²ÛUõÿ §Ž) Uê–¢ÓBÓ|„ÿªíBp@ƒ$«»¸`vÅø àÍ™³3 ¾5Å" #áƒ*ãdO Wi§ÝdW!}¦œ4Âg†ˆQBC Ð÷ý¤Ga4š’ãL(A”LˆIâ/ÉGÚa?¢ñµ}‚ øÂa ‰.ð`’ ‚Ò#¨UNÑB¯XÕÓ]k†LôNÛ°IÅ…Er,ò)…>d–C×ÒJXTÓPƒD鱑‡õþÿMìô›v'¿ì Ñ 4CIºRÓ¦w¥µk䢉;Âiá2@§Sýz¯×è5[þÈî‰]¦šDÇkh?2Oº×­û´û …|XL Â@‘Ã$ÿÿßãÞÿWNÓµ@ó^Óü9‘MÖú¾êé62XêÓP™PI„ †ˆèàÊÿÿãõýúë½-Òy+hºÕÊ–~÷]‹"XOµ®l2!J Â¨LÐ`ƒ!²Dpe:$ÿÿ__íÝ]ÿ½é´¿×ï]jèxb‡¯ZMÉ[D¢4BÂ` š AÄ: Uß_þ¿ÿ±ÿÚuðßz¿üï·;Q~ÚTÝwôÛȧIÒxÑ(„,(BÁBa(3a BÄ!ßÿêNªþ«_þ%Ä‘«úë‘/%)[IýS‡öµý6½õzMê˜TÕP˜A„ìÀÍ„Bý^¿×¯ýÿ}Aaý­fO/û©îÒÛé¿n­_øì4ªÕl‡§¿É=0¡ M4CBDÂ*²-Ey=•»¿þ»7ÿèþ·t­üf¼ -“MáWÿb½-¿‡"ûÿ±Ž“V†Bóä~tNè–;DݪÛé„ *¶oTœÓöž¼ß_ûŽ0‰]¿Óõ†™±¡š Ó6ïOö˜\Vþõÿë{CM4ì wÝ'¯A:'¾ëÁBpÐlR &°•®©ßúÿôéa¿§ù²Âð¡0B gȦºj,%}¿n¿þj’ÓîÓ½µ´¶ÈN««Ð{ 0“/ØHZ`…0`“ºúÿ¿Ô,æx¾OEél!ôîв(@×ôF_¶Ãw_ü8r Ž ÿÿìRj6&ª÷‘1ÓAlD4 “ª„ÅRÒ ±VUµi¯L¬~ßvÑ<¢ví¥A¦¹†jÕP-«Wþ›‘‰¨]}_½„†˜Ó¶–È#ÄDH¹´Õ±Iñ 'l~«ÿßoú]8dX²s.éé¡ œ@ƒ ªÕ“£{ø}n¹Ïýv«ø÷Nú'ÖqzÂ'a…°˜†‡»iÚ¦¶g×"¾ëp¿tO!‚jÂ!à—‚|OC/X=ì.þy7}×öÖ½ÿï¯Z½»]Úq"Ù£†Ú¨‡´œ/°kÿôþþ .=ªÐa&ÙD…! úc¿íîýÿÿõýÛäc=mûÕuˆˆ‹'a>ÈAñQLWßýA…þ ¯ù5 † …qi Ð`‚|Œò†ŸÝ}Ófv꿇¾ÿûÛëôFœ=þ¿`˜ML鯪´?àÅ«êŸé‚ :uXA¦šÓv­UWºþßÿû¥oÿÛûH(Úi«ÑVÿÿö‘Äú¦‘Á(ž6šivƧME'pÒìßkg]ïÿêÝÿÓïßüDN¿¨|âÿ‘áC…ïaÚþÚiºÝên‰Ûm¦š¤q°¢Þ›7û áÛßýP{ýðßÚA|}Cë_´#þ¿áˉõ^·í$ìŒz[“îÂkM§jÒã^ÏÝÿý·ßøð¿]¿ÚÝœÑá„Fÿô?Ö¿o^éªo*0½„ Åkµ{¶}ÿú½ÿ{ûþý]=<Ñz¡ƒÁ:þ¿ïǧ¯ŠòSˆ‰ƒM5AŸi?ÿç'³EÛû‚ÿÚLv®¶Ÿ½‡]Î.´GßÖí/«PqÁ4ÂjÂl&*¶»µþ݆œ3?á¶jOÖþøê.¶—ª½.¹ÏÐ*ý~Ÿ÷ã§g ®ÚÚ=?í?¨¸0_lýfro­%ùؘý¦›bi±ÿÿvoÎ-¯‘‹ŽµõÄC ”9VA„ [&4×íZc^8ÿ§[üÎ;¡ÞeLÓ´šrpa+NÖ×ÿUO_jEqÿ]ˆˆa XVšh4 á¥M_º}ÿûªg|ëd¡0µj*!ÅiZëÓý¯õüžÁj"$Â1†¾5MX¦0ƒj¯ÒkAø{Óñ`…… §ãNÓ ëi~ù¢§úí!ÁH£–ÿÚ 0“Nšb¬%ÚÐ|íH͈ˆ²;M4˜B!Çëjû¥ðÂB""c›¬&šðÓUÔRû¹&›L"-‘²WÄC ®B=¬ i¦¬0µWí™ìPˆˆ`ƒ ‘ØL&«tÂxêï÷ˆ‹(p™„ÓJA Ø§w¯Vˆˆ’a¡T…&ŸøpùÝÇa3"kÄDE…OíU1„ ŽA¡gJÁ5wëî`ˆvå|DDC vlP26lá‚ #¬×ÿÿâ"Á;CB"9æPFh«Zÿá„øˆ®A¢-‘ñÿÚi.½? …‡™‰vuÿ2½ptNØv¤ÇjáÁ! á‘ø×]¤ÛM$ ÉŤH} Ðƒ.@ƒâ"{ L Òi¶m;§m$ñÿø6Ÿiéªy{´‰ÐhA—D%Fë<°ˆ1I9 M÷q „áþ¨'§ÿ4µ«jðà ŽNaÚðšf¢8GˆŽ2Ã.*h‚‹… átg3÷ÕÄD£8*wºiÁd]ì1.'× éÞFþŸi„Ô›µÓBÐ363ƒ.gÇ¢8êœX(L&ÒÂa5 ƒ8¥BI°‡â“l$Ÿkúá¾×ÍÀmãUo_ª†Gïû¯ßÚpá‚–‚¬j*A¦x!A„Ñ 5ü ⢡ Ó[í¯þ0udW%wõÛ_‹Òöÿ~ž¯¯z¤BO‘âDž¡?BËsWá¬5LE¦ÇýÛý%„Uÿ¶ÿ¯ïûëö—ú{tž6ºAðè”4GUL‚ˆ†8á2 á¦ÃµÿusvÓÖ™óëÂ=ëä¤eé†ðßÖü‰Ú§Dº-]'„Øpèi¦DÅña\%x  8†©ß_¿`÷k_±^Ýÿ¯ÿ»¨¿\‰w½:¶ï!²«ùÌö 4ñÔ+BÂDqV¯[í}_ÿö½ºÿ_ÿ¿ÿ¡J¬R¤›÷}ævV;ădí­§¤¼]Ö¿~­6h”×ûïô¸/ÿºû°ºûÇý¯ÝÿÄDZ4}TCb¯¶«®¾‚ðÿ~ ú­6úãÿÿd]+]9šs"ž± 'v@ÅD4X†…×Ñ0ÿð¿¿ê½mª·õý+Û„èDC%aL:uˆM Ø«_ ç·ýôEûíûºÿÿ¯î“ÿˆˆƒ0`¦­¤ÂÝßßõè/ÿ§U¥ÓÛÿü'ÿyغ鈲ëA UD4ÿë×ÿöïáÿÑdàŸ4.uÔ’ï銄ÓaÚwõz¯úûkk…ý¿þ½4Ð`ƒÌhD2ï_ÿª´á¦†OþÐ?ÿûº‹Ã~ÿxaF©öa„ œõ_Å㯴î)0šüþÝ_¥Óï}}lyxÑ'vÒ$;NCœ0ƒ8)²>D__üD‘²ÇGO«I Â Ðnšw¯{fkë»ÃÿÿÈÇï]AB ¢Q`ôûA‘°CAŸ#É5üÈ!ˆÙ™´×ziÐM5OM»‹íWò3xw¯ûA¯KºKA=²T'´Õ˜"#Ã’d‰·'Lö_²#«Mšiß_ |>û3õ×ÎHuý.ü0ÞØHµ üC@Ây‡^ˆÜñg´ÂkÓM0›i¿±jÁ„ý†ºÓ÷ A¨¥é Þ•¾—'y;nMéÁè2@ýÐBE„VÍj´Ðl[A\CºûAú~Ũø_¥w®Òt®›± $N}ÉN®"""IÁ”å:a;m& ›ÚOiCî××ãð{µºK®ý§`’m‘Ñ¢n×ò/™ ­ÄDDv«dHVñ´Á„£Y GÑ(÷®L@ß­ë¯iÕ_[RVè7þ ˆ¦ézMè7a5°ULB¤ÿ8©×h“”åߦøßíõ§Õ¾-ýtõ C#ÀƒA¦™$u¼œô×úÿ%5îÐkDÝé„ÈÙ/J a4Ȱƒ í«ƒ¢˜0“V¶ºõ¿ù¿èz’·A°Á4ƒLŽ!qž@¥?㈈ˆae8 Âx݊ب»­õ´aëÿÖÚkA÷a0Hœ>ðš ñi”Kˆˆƒ8±X ªi†ØIªO÷¯×4ÿëýZIÚ &“T-3æm‘kQ0…§b« „U­ª»k{¯þúM»´‰CDá·h4,“Ì øí1MÐiÚ¿b˜«[Zî×ÁÈá:ÿé÷v h4Ì  üJ âTb""i„Ö6)÷Z®>ÿ^®¶F:i&Ãlm=¡h‡pb! ÂkÚ¾&qø^—mR_é®¶ƒ%Wm4× "t îƒK×è•û¯¾W C«rP© íÓ'×›,!÷kÐZ÷méFúúþ·up®¿ªs~µëÝ_Tí­l”-ëúÿýyqR~Do¯ÿÿèa×îöš¦¿«^('þ«÷Kø­ú š¶c×ÚëéûÿßMÚ-ÝWši/¿ÿõzx‹M2}1M«»kÿ¯ûõ·–²_x‹0A®*ªÒ°š÷_ÿz*:~"-±±n¾»]j ç<®&üA”VšjNÒO×þÁÿN±"Å60ƒ ¯W}ÕíYÚ/ -ƒ ºë~ºX††û½a ,n׈ˆ3Ž µ¸¦¶ˆ`š§-U1HèœÍhš-«ÔDÔ˜$,&xa`™³©O,Š®„QqAÄXLØ.36lÈÖOªÓH»¿i Ó"  2|Û3ÿX¬:M†JȮÆD¢vãC0™À\ dLÇüÇ»µûu Ý„§Ú$;‡ 0ƒˆ2@ÊÆfõê½;ÿÜáè6‹ËõpÐg&y0gDGüd'WþŸÚjIÒN•†JÈí´Ó DÇÆƒÂ!f ÌÈÆù^§qõþëŽ5{ÓNïR+´oEÛU §"ÁrÏ·ÿÖàµ^·þ¼'[®òÞ‰ÿ\¯k;(D`Ãp¿þ)u¿ë~©éän©êèi¦½<'’£-‘ÊN¯þ›×_ëЭÚõ»µûX{A–ÂÄÿýÊ_$?ÿµø0kÛÿ¤þ9¦íÑ“‹¿ÿé×þÚ×ÇÇÈ”«®ž¿‡AAuxIªfüÓÿúÿÿþÖºýƒ8K´«;K™æ¢»Ð];¦Âëþ¿¿×ñ3Šù-}X_Ì‚/CA” Iýè—w†¬H'jºÚÿ¿û_ÕK¶×â ˆx'Äœ–¦Ãnþ¨ áÃÅ1I„Ðh0ƒMÁ;í+Uóÿÿ~ŠˆãsÒ\2(î\BzhC,'úOì§5Úi¦œE¦ÚN–¶›M~NªíN ãc®d®“hÃ[aJHâwkÛâ""„ÖÈŽÂ †¨4Õ?öÂù¢ìö«ëuonN—“|h‚öAúN¸ˆˆ0AžÂvB´NÚtÓµ¶Ó÷Kÿë­/vJè Âd­?s˜yçþ"" Wý ÂlPMƒ»íZýz¿¦øMPeÄ0¯µÐfÆp‹‘r0gÅ3ÕüDDGM5ÛVÅIÂ}\]ÿëÛÓ°R8ý}¡˜A¢-‘«äæô." Îá0¶®*/s%këô?ÿí'齿ÓM ûÄDA‚éÚ¡÷ÿúýÖ¾¿KpáG¢yi¬B}$"I“%Š¿_“ ºßÿíÿr1Ó#»µ¢p×HDDþN¯ðÒÓ_ÿþ¨h0¿K§î‰¿¯¿üßûÿõ¥÷Xº·© jßCoþæ›úQ;Šÿßë¦^°…~?ý®iÿôÿû×þ$p­«ë릶­¥ªú&XŸÍÿúþ­‹óÃ}0ƒâ˜0Xõä ¾¾ÿkúÑ(ºá’¿ ËT¿w E4i¬ýzûý ž;z¯¿i«A á´ÒÚ¯þ–Óòu?X†S‚a4ýúqꮺ¯ÿ†[T’[Ï\DDO"ëzNš®×ë¦×ñË{â(ŸÄ>í¦›‚!„ûMïsOû ã²gô؈`ƒA‚ûbAÄ:l%kø{L„/ÜDDA„È£‘¶ƒa‘É}ÿ~Ò(™¤ƒ ƒzñB#†D» ¼Ã5NÂp÷µB!„Ê&C ŸDšÇÉNûEpYDDm4EˆäxB “”L½­{üSKOÝ0…„ó0D1—3ñ'þ¦@‹â¤­¢waH´\SBC0œÜ-×ãDÝ´äØJSºÎñ ž ¼9ƽÚkÙ¢ýÿú]eÌ¡ßþ—ý~l0ƒ ûñ¡pâU[¥´ÛSÕVÿ¥±Ð‡ÿ÷~þä#ÐNõš`ÝÖ#»ÐiÅm„­Sÿ­eÀ.—ÿû÷KäÁÕ·¯§2U?äAÄ[AÄ=¦•µ½Eúoÿ_õóXcõèWtÈXÉjù>‰ œ#…<-§¿Mµ^Ahã_Kÿ­ºßøÛ_ü6´ƒB"" ÂwiÐqI àÓïÿÿ_ëÿaü–üEª¦˜I¦ØOZ¿ÿïºìƒúKêáÞÌ”+õÄD0A”:kÚuþ—ÿuú^D€›¢lvOýøA ]„±K&žôßþõñ[¿¢A*`˜‚²¿‡b’„Ruÿ~õß½úm-îì¨I.gBÿü4’YÓªï»__­¿ïÃTɽ…i„âAŸ3fxS£ ÿÞ5zk‚vžç—½ÿ]®í )z/všƒf337ø¶”PH Â[Õ´¾²DßûéuÞèôNšvhYÔS—,ÁÓìUU¦ƒ8ÂiÚJ¯„ØjO{ÓûõúK%nœ:'”Mì+¿¸†<Ðd7÷´Õ=vÒ Ø`©§^Þš÷ÚuûÿÐ}¶F?´› 'mÚi¬'¦y ZYe$¡ˆg5IìR þÛI{vŸ_­ µÿNÖõénôÒ"åÛÐaØA¡ù\Ɉ‹ œ0½ýƒ zÃ4ýküAp×ëCJ¿¶É:`_DíÉÃé4ÛÓ;1 ( õÐc X2è/×üGÜŽ&—j¾†ô·«éÒ}„‰Ý޽0˜ˆ¥¸k0ÄSNÆ¿¯[âG ¨Uï­_[«ÐTÚ ÿ4Y–/h&­6TùÅèžU ñÓõ·_N½¤½6žÒ`ÑÝUІIÊV&¯õôú%}uûMþ÷Šî¿û;¨uˆˆˆ`¶ÿô¢yù+ ×ë¿ëÕUüìÌÿ¥Š]~º­ýz_„…Ø™Åkê±ÝÇþgˆ¸É†îù1{OÇ®›ŸûTÿõÿúÿ¯M  «%¦²XŠDê%ÐAÒiØVÖûÿs5Ù¢¦oþLuæ@ÿDᶘ@Í™ù<]4Ý+]§Ý›â”-§ëkÎõúûÕºêMòzÒl28¢vÕ0ƒ64 ž¿‚ZI² &NÈŽƒbN!°aa«aS¯Ý}mi¿WúxMÓÍðŸ"ã$IßácÄDD0A„Âö-☨ÕÚþ¿¼x·þþ¡Ã‡m„š²\!™˜2GªõIˆŸD}“âîȱi¦ÓVÒÝ+Õ¶Óoõ¿ÿݦ' Õ0¨ƒ¹²-’™0ɽWØADDD3ˆL Âé¤Ðli°Òt¾Òµÿ­¥·÷ðá‘»“„œGva ƒ נ„DE§ö“ŠŠA Ø¦/ÿQ.#"Ÿÿpƒi<ÃÖPšˆ^dqÍ„*""Á8h4»þ ·Õ~ºNÈ#w†ƒRpû{‹1¡eT2ÇXa6¿úß^ };òN™'OÒN‰ÚDí†L´èDDA‚dì/ýÑ<†ûñ#…¯õƇm*½½öLäoEãhD}ëÒÂ*?ëþ#„¯õtŸþƒkÿ¥¦xúõÿ÷JתþºoÛ_ýÿÎhž~°µ]ñø‚ý:ïÚI®»zú¥õèŽ?ºZY¥ôýŠ0› tÚÿ_ü/ûáx_~2Ö¼0»‹†ºwy‡ßÚ¤ÿ±Ë×¢8÷­±t šˆñ."#í2#⢠6);^ß×^»àº¯ ƒÓ¿ &1aŸkw¿Þ«Ù¿9ü›Xܲ”§ÄJƒ “ëb!„Ø» þÓš]wÿ¸w;3ÇÄD0ƒ²+Ómˆa5^Õµµýk§L²o qpeTšv, ˜¨iëizîi}æA k¡5l—=»LCb ¬ ÉA¨ˆˆƒZÓAl%ûYÚµÚzBF°Í`™&ªî+ñDÝ»ZB""AªÃEª¦EÈáÖH¿ª I×hDDÚ¤‚ ùaÒuüEt³‚3 œÈÉqº2ZW²+‘¾½i ÐgÃÒ!£rëc[ § è½ ÔagsäN!AOó%„þÓúMoN‰Þîíhá—«fUŒñ××¾Ý27¤ØdpEˆwt\T'dLP§®‡Lëõv½¦Ù7 òá¢QzM4 ËŒ7åŽÓ;Außêý k]Vë¥Âm‘Û ˜±pÚM OÒbh„È1ÿý½¥éÓßWÛ®»Né8`ƒ„ý/O+eÿþõHz÷û4õ׫n‘]Ë·ûO&=×úúízÿþBän×÷øN¡¿ÃŠY#ÿÿì|/ëûãï«êž¿ÞŸÊ’ÿßüúÛ×­õ__×þýzþ¿ðû&9NúÿÃUÎÌÍ5ÿÓ¿Vï}÷ÿÏg‡Ð®ÿ\w‚hHŽM–+®˜A„waV–Ìý:¿ì;ï¹ÅÿûéŦh2­þš ± ýµûÿÞÌÕ×ïÿÈq×¢PÃ#ˆL&a ˜K² &Dtûî† ¿ÿoas=}u\çòmÖ¼&á/ònÑ8iÚ!ðIL`xˆˆ†}U±H0ƒ …M0¥jÚÞ¿_ÿëû¥¤èœ6h0Ùs:3¦"5(tÔw 0šq±L0]6Õ¿µý¾›¯K«A6 ¸† „ ù›2ñ+ÔD§B­» ÔPA§a/ý³?ÿúÕÖöŽ'm‚´,Ô@.e¶hkB""&†Ðai´Åâ“[S kþ×ÚÓßéë )z'mwã°ž3Äy˜" $ˆ†t‰¦¡ºa6+ÿ¯ÆÿÕ«u ëIÙ‘(ši¡ 0eňa0ªá´+êÿÇ_ý}:¶•²1ïP¤W¢í»øA§B!„Âa5þ¾µßÖ«Õý=4ô¬umò îkÚmˆ0Wïÿ&_ñÿI­ÐÿÉB§}„IÑy“‹kÖý÷ëÿô?Û_¡_ª}Õ´¬~ë~ÿ¿ëÿþ¿ïþÞºý×üOµ¬âù2}ëöÕúÿîE¦ÖŸm%[l+gÿµOÿäˆõÕ¥×õÁ av¯bh0±V¯[×¾sÖ¿cb¿ÿaÇC"Êv­4±¶—j½™ú_ÿ¥ßþÝjZʃ¬Hi™Á;A„ÆŽû[úlÏzêýøy9…ëâ"&› ¨xL&ÅF·kkº-=ëâÇ50çfdž"&˜V›N˜VÂMÒðÿÒü?béøˆa0@“AªAÃb˜¤R ;i]Ú¦îifiÜÈp¤aµˆˆƒ)@Mm4µ ;[ ÚWÚM®U!Eâ"!„Óö›ÅÅZV¶¿Ú~"5í7Q±LWƒ ßù}eÙ½0ƒOí8&é$’"2p“6š-S#3‰È†g]}Þô×zL Â!ü0C$Ì ¯úâµßÓPA„æyfj«ÿ¨a,8t^Q;j˜NE¢ÁåPÈÏÿiŠOzt›D®‰ÆN©à˜D,p‰3Ž?ý„ ýÿOMÐp転pûX°˜A„¦ èÿþß´µû‘ލ=ÑxÑwm8¾, d€þÂù ÿúêŸþ× ìŽÈ¯D¡·¶R Œñùo4>ÃúÖ†ßú»Ú¦éÃ%D‡aP´ë2Gbaʃû_¡ ‘ÿ·ë«§ä­Ð<œ]?]w ÛëÐøbG J°Æ«^½'í'‹ÇøiÏ0DVÈ×’ ¿í…âä/÷¿úëÞF=oö|" ¶UÔæZáÍ6¦ÝøÿÿK¦©ëWð‰D™DЈ³ûÿ^DóÈÇMÿýxhÀŸŠÿû Ô&µÝ³;ìÍ%äžx’®†ÿ‘G_¿õÁyñ¡„ëŸN϶Âiö“k§þ:g‹ø!^ý‹Â¹ÚÀÐa3AÝSòâÄ80“« +O¾¿4ðëÿéhž¯ãN ð˃žë\Rýâšbqw}¦­­¿ù¦ÿéÉé¼:'N-½_k ËðLîƒ ÃM‚va„îÖÿ[Uÿ¯_fpFJ×ÈÞ“l ݯ8G ßââ"" ÉÀL&EÇlT4“Om}}¬D}®öÙÖ©Ù„~"" „ȎÚB“L Ø¥Oý[ﯿvIÓêíújæáÈù¶fkˆ‰ØLÖšj×iM6ÓÂÓf}þ½-Táðè›ñÓBÂa`f‚© b"$„uŠ4ì'{†ƒ‹bÓÖºƒ ´»~õé7ÛÆžšxRâ""N„3„Z²{i±_lj/¥ý:Má á´N‰ôÓSc8EȆ""f˜&žÚ¿õ¦ÿ¿ÿÿ‚m„‰»OІDA”6a'T"(ÿ¢&ÿÿý’t–ôí$EãöÓ"…ÿœHžvÕ7ÿÞ…/ïK^ƒ²,eâ¯M/ŠUÿ_ý­/í&÷iµ`¿sOŠÿ×ýþ±ÿÿÖºý;_÷­ÿ’ý_ŽÁ?÷ûÓl%i¯G:úúÿÿûˆ÷¯Ë KÐlq3ˆ5ÐuëîÚëûýwýâG_´ÔCkt®þÍ_ÿÔ˜j—Ý"ÖK/Ä0L&Dr1ßà aup­­ûéIÕ†>ñt!‚jبƒ Ü4´µ¬ÿë·þ±OøŠ‡iˆ¶6I°švªÞnóOýá²®ú¢7NÍ–ƒC ±Wi'v¶~ÿEµ’¹\̇Êèkˆˆƒ0˜¶‚lU«a&×_÷LîÃ9Ãø¤„ ÉÁ'µmaÆÅÓMQk)ó%TOÒHDDë“°Â}„Ò 0˜AÁÞ®·íPˆ¸f §»Û^ÞFðåsªÚ VZª£'¢#æÍ5øRWt¼q(„hD0çx×­òW¯¤¢CÑ1Ã[í26)£0gS_¯_×th í†Òaa3A“å!§Öþ? ZÖÃ%v iÑ7va3c8  fb™¢:9Ÿþ¾:_O·îÒ ·“Œ›¿¼&†aN _ÿµõÖõ»%+A6í¶Â’Æšûæ2ž d‘VÂÇN»íRéÒÕÜ;#» í¢pÔ~$Bx<¿yo©“g-êïþ¿iô›tË„á|1¯úuLŽ—ö»ê¾¶IÕ{ýãýÉX_Wuý ïWЫu¬Ž'–G"dä_‡èí__í2:OÕ~Ÿvš­Êþ?צ*J®ÿ×ÔGÇý?ÿöæ{þs¾¿ÿ_¯ÿÝwÿ;­™ÿ}?]ÿÿ%{þ ºùÚÁ˜#ǃÙÜɆ“kúÝ6h¿ÿS¡OJþ ˆÖ…„ÉÅ>F™ôÕÅE&¥¾Ÿçîµþ>¿ð¹’E\ZhZ “°îvLS Bi XÂtØJÕµµ{û˜wßõ„EŽÏ ˆ=wa0™á‘ÆHáÎÐÓ†k 0Ó êø ©Å7Vô³?Ìçÿ‚õ­‚dvÒ ‡Dá§ÔŒ"8Ï ûôL}iˆˆ†š Ô4Úcˆa4í&Õ[íOߥçûOVÈǤòñº¡ &ƒ>f™ÕzN í•‚à ¨4ÓÚlqI°ÂM„ÓïýaWU¯Mm®Èí¢obÂhZ «ñœf†F+ö«§gb]ˆ`ƒ'^Ði6*/N½=DºÿéèRþžÃ#r ôN„ 4 Î gFÙ£!Þ;^áÂU™gJiˆˆ°ƒ ØO‚ 4ì'j?ÿ÷µ¾½4¦Ã¢vÑ8miÅ…`ƒ…â„´=õý2$V¢"@ɸMXA„d ýñ´¿¦µyý´ Ô»n±h5T!•‘‘­/þî(DE¯d ö™RQÿúßëéë Ò]7Ò¸y;¶‰ÝtÓTà\ʳ5/÷wz=°A„Ðúëý/ïÿxúíÕ\“ÕÃI]<ÙÓN„ Oÿ»Ðˆ‰’…þú\˜Ñ(ö«_ôš}ê¾ÕrN·Ý^›“´‰ÝµMFæýÌ’†,òýôµÿ¯Çí×t;ãÚ}´ºOM†Jè•ÑxÑnïâÊ¥øMÿöÿKÿõú¯Ö+ê¾Duï{éºÕè;ØL)&HÉŽÇýzVÌÿÿÿù?ÕèqLW×_Óþû]ÉÅSÁO ÝúY\¬e›N°ƒ4Û Ú¯íþÿ׺Pµý»C]Ái×{º’ºM¢QDÝÚ a†p²wõ„AÙ°ï»MŠA¶ :þº«ÖÿIþ›Øÿá,ÿMïOA½wPƒÂˆpË"­)Ù üímµÂN*#NÿÿÓ_­I× ×¯ø— !Aÿý'WÒN(íPv} ¸ ÎÁñ 0ƒPÓb×Û_3Ý|}x#c/Ééäo×Âßõ´¿þìŒzM ƒz&;†ƒÿ%Ÿ×ˆƒ VÐ0˜[JÛ[Úp½ûx|ß@¿ð·ÿ‰q:kß§¦ ¾äpÑ;yÛŒÙ3âí&¼§&Wâ †jè]±A6)Òí}?3­ýõAè–wÿ¬L ëíûÐzøi¦„).aâ´¡Ôí`% kÌ`Ž;VÓìRliØKíìοÿëFºÿ…ð\9JõÿjÒmZzµe ÉËÆòÚ ‡ È±‘Ñ´GD|· Wˆˆƒ‘0šª66ÃJé´µÿô¼ÿÑ,«…¨ûíõöši¶‹ºv3c8GÁœ hD/Ö¾Žý0iሃ x‰­0š .SaWmuÚý.ê‰ç]Ö<4`Uo_Þ'Eãa"C´ôâÔ È¡ ØÏŒÍ&©êPÉaC¼= ˆÿˆˆ0ƒ5Dc‘aSM0â ;l.·úúþ—„GÒê?}/ô°ÂI´Nîü×Dßšf2ì3Æšøø¾á‘"#xˆˆ&S…0á‹ Ä6!§ëß­éw ø©1ªÿÝýÛ÷Ö•‡vt›‹iô i¢• kªá¶¶?ˆˆˆ`ƒ'2;&ýâ);Oõ×]/ªÑ+ÿºî`Å_®Ÿiªô› •‘^í‹hâÑ d쟒 ¸¯ãáüDDDC$:dG$ô Ó[ ¶žµ­"2‚þN­ÚLrMzµýÓVÿMzao@á…h]¦&³f:j÷¾[•":ñ罦q!Úw¯šz__úÿãßã××ý27I;áºbÐi&0A¢ÈÎF‚ IýßÄE”ánáØ†°Âw!ç[ý}‰‡ˆƒÛï×Ö˜¤ ~Þ½ÞßvJá“¥º½§ápD/‘»ÔòÞñ ¤àž“bXpÒôîœÓëD²ÿÿøºû_¡¿zn™ún^\<œX-wjƒ¬Ã$Jã ;4ˆˆdv¯AÛÙ&¶½5 9ž+ÿÿnºÞ¿‘ÿ¦’µ}Ò¶=pÒo Â0%®fdêüDC%=°lCŠdQÖÿØ~¿ÿ ÈË}Zý0Oã½nõúVÉceеõÿ˜"-w$sas5F6WÜíÆ"8k£éŒ ëUßýÿÉóÅ í꽿þ¿Zïzú‰ÃØQ„¡ !2p†f`¼=ŸŽøÑtˆ† „Ê€ƒ v­;Í·K³ÿÿ‡ÿŽýÿÿ×Öšõ½õoÝ/¦Ñ;†ƒ&;‹M ü=¦®" Á0™‡_íný×­{w'^õøoÿûÿÇÿÿ¿ýÓoA‘a†Ñ7wû¨OÄDj›ŠVÒXa&Ö×¾Ôåé:ù>|ó‹þ—ÿúúúÿª´’_¦žGdw íÿº¶­;"§b‚ †ˆkjÚßÿöúÿž[×ÿßÿÝ~1ÉF­úvšuvK&B«ý©nÌ•p¢„C0™Nœ5mE6qQI¦µþÿþ¿ºýÿÿÿ¯½÷ZþþáZüU­Zv} 0™Ma4Óû[ýuÿÿüâ¯ÿÿúxõ§ªõ­Ó÷ý°`±`…•a ;i§AM+û^Òý}~¿¯ûý¿ÿ¾>v¶œ~ í’GgBˆˆ0N  .ÓA±Za>)_µöÏ_¿ý®—ÉŽþ´µüÌ?ú„â.2@ËšÖêvò!ÐDe B4E4Õ4ša„„˜iÇi:úþŒ?ëöñ–œúýj‹^ld2:½~ÒFv™Øà¹¡ê¢"'F×í[ŰØãNêÿëUnŸÚßôJß~‰ÞNö¾l-ô’¶Ò™¨„‘Z¨DDC„vŸj‚lPM8¦ý.Î]ÿÿ¥ÿÓÓ†Gy;_i¢9/%3ñ9º¤ 0ø2(¤šˆˆƒ±F8Pš¶¬'ØI0JÝU¾Ìö¿ôuzÿV”á´IÔXA¡ ÀÈD}Ÿ—¦Ú ˜vÓ;0ª(DDA‚ 8àƒ^Ðb‚œRwn¯ÿëõÓ÷OôìŽ0šÓ‹CáM‘d‹Ó^šw ƒ°D+!" m Ó0µjšÿÙõþÐ/ï¼&Ödþ‰Ûâî üœ¢¾ÞÐm™–›D‰ÅöUÛ„ SN pƒ½pÿ^¿¿#“†JÈ®Ûi¤Â ðž#D'ûíIài¦ufˆ‰BpÕ'Ó8†˜O¯Ö»_¯ü5ôÓ²8"Åév‰ÃôдÁpC`‡Ù²!ŠGo®þÝa Ú&?‹amHA÷±iÿá}Òÿסï§i§}'¦×DîꞃBÂ$>g¯j(&éèâ"  ‹Ãz÷Ñ,ü{ûûKÿUõZ»ôØy³'vžÕ„×y@Ï Ù~ûûinçhÊÉ–i!kõ¯ëú†–¿_ýÿßß#~é;²îv‰DG|'a4¹ƒý/}–ôÂ!Y¡Bda¥_ ûŠýúÿt•„–½- ‡íéá<& oDÝï_ü'·Žï¦wPr$2­Üß§èUúú[ÿÿðÒðéÿ¦}½i¦´¿@ÈälÏ j3úZêétL}Ùé ¡öv¾—ú"˜ÿ_û¥ïïR­¥Õý_îý„¯¸°šgpƒÿ¤½'%; Ózö-ˆ4Óyÿ–7Ûÿ_÷׆ÇÿþúßÔT–? – 8‡ÙqLL¡é%}xaõíÄ0› 5]‰?þõþ¾m+K÷­¿Ý>«úyxÛûA Â ñ›3áëUÙË;»‰oRðË„Èì Ði„ä0é}þ×ë¢X·Doû^4 -õ"¹ÈN–ì“Ò°ÉY÷§ÂhZÔ/Ç~³¼Ìˆ‰‘ˆƒjO±дյ½/üÇÿ]{h'öVñúÁ ÿá­é§]á ¶ê#j¿­”ùݲÊxˆËÉÓ#™€Œ„ ÐlPA§­ÛM«×ר=m½6/Ýt+uþÕ‡DâŒôõÿø`ƒý q>¾ÚP„0škÚV¾«Û¤µú[ÉV&nû_×ÿÚé<ŒzO¶ ýpëgbD?X¢}!`˜O!Å„ÆÚJ›iÞþúò@¾©¯Óÿÿö+[¦·Kä²1Ã0¢ò(•qô[ïï â""Â}¦˜¤q -­§þ‚Wwÿ×ÿ­Õ¯ñ¯ØDuÆ·0sP&í$îv¶2ÜY}„—„Õ¦Ä8¨‡WðeÖ÷ÿõÕÿôõô¿a„,•ØšzaJ±—A'¨ß;&LòQدHCÓ²+’»„a8“~gÓÿJ¿ÿÿþé=8;A É•ÖÖ, Ð2¬Ìò:2!?fzÞÓeWˆˆe ÂdXÒî Øa^•{§úý´¿ÿïöIËï¢Q‰EÓÓM ŸÐ>ô•ß ×ƒÒ !7al„.»Ó§®¿ÿúþ‡ý0­ú„ïM2;rí†HÀ°˜M4 Ïðæ…ÿ‡ëÄQB"ˆÛ†šè ÓM0A.ëûz×ýt2,.ÕÝ'§IÚ‰ã“v‰ÃDݧa<Ž)øÔÏ»×}•%|hÈ+åÎ.Õ= ÐŠNí/ô‘oßý?ø?ª^ÚµodŸZ IÒÞ‰»‹A›A„@Ì#ñ£_ÚÂi$â"$mBA„ši¶’Mß[k'þõoýÿûö–Ö麓ÂXÃHœRo¸‹BLp ñ#„üL–×°£Ò:#ãÕ ƒ0›`’ßkùš„ßûÿý}Ôwôü*¦Ñ7d ö,&„4Ñr8É÷çdÈC¼DA„¯b‚¡m„­Ô&“ç½­×ÿáU™ÿÿ¤—AÜ0LŽØdò‰Àl_)¹2!sûôÈ\Ó"" +¶0œC¿ïðžÿÿþ£Çÿö’¾¿ié‘GìŠäGmZhCÎ 0AÄ2$D‚ßÚÁ6B iØVÞ·­}ƒ¹½¯ÿÿúü|C¿¯ö¶ØL'dèGNÛÚvƒ3Ämä»ü0ƒØ†ˆ†iénêõßÞþÿÿ“Üð×ôî¿£6û»ÓilŽÈ®Ã‡EÆÓAØO0( ÏrHû¸s#SR qÿ˜—UÿüâèDb¿K¯ëÿÿ§¦Ú„û«È¯Dá¢q‹ôбýÎÒ×ʂ•ÿÿÿÿñ¯½júÓúìŒ} AÜ5j"'M• „ûÂa6Ö5a®Œí(¿ÒVÿÿÿÿë÷èV–‡~è4d]Õÿ¤ïƒÁ-ˆ‹ˆeÜ5 6!PMŠcz¯ùŸÿÿÿÿ$?ÿþ,ÿÆ?ót½ëôÉ@èDI‰”è4†ÓLT4ÓM0­­ßÿºÿœ_CÿÿKª¡Óסa¥ûtለ†L&M¦„8â¿Uþÿÿÿÿü-þ¶ŠA—DïÿV³³åH3¤"!„ÂþƒA „ÓM=]/õÿÿ¿“Е÷ü}ôÕ ’u4žÿ´MéÈ( &nV„Q1Îí?oo§Ã#·5¢wµˆ3Äp õ8@Ë4­~ƒ6!Åß­§÷þ;è–ëõþ?ë^¾¤Á{aÑ!ö©¦AˆGÁ‡öá‚tÎÂ*JÞvµ{°ì$Á‚({a/usEýuÿÿ_QÝ|ÉGÿöO¨ ò7vý]„"jÿº.6VŠëGhÕÄ4 Ó´—m;^¬Ïõÿÿâµÿÿ_‡Ý Õ̹6G*ÿW| Á!Y˨Duâ"S± 2#’›ƒ ±L0•«k¿æ‹ý~‰çÿÿu¡ C#·hœ6“CMqóf Kÿá´ø‰ Ü&ñ*EO¿«WI'©C#q3䇽'½eFî"d2c„ÖÕE6ƒba4Â|?µú_U÷Î%ù0É“××üõÿ'DQßZ … ƒR,UñV¼=©ÜËÁa^Ȩi Â 0›_v¿÷÷§ûü˜þÛÿø÷T¤—Ö—Zý øw#Rfy "(â Â… ¿¶¶•[KU´¿3ÿëSßöÿ¶ÿÿJ©úêºë;T±ž3PíOL˜²\£“ÚµM5 h60ƒM64Ómt¿µuoUþN!ÿþ*Ò¥I~©GûBÑ døF9Áwÿ‡Uì‹^„A”aV´qiÅFšvÚÙûÌ÷ùcäÇý¦ÿòdú õ®’^«ÝíSLØÂ`ƒUûÝûëÖ"&ˆ0šiÙv›TM8al%ë~¯½máÿ³j½Z…¥]}køpÓ";EßâÐdÀŸø»Ó‡ÎÅÆ›®""!„ÉŽš =¡lSl0­…´›«^íÝ.®þ† =*I~—÷a=8wp‰»[!È&%üZð÷qV""L Ó´ÒlTCºµÒÛ×Ö×óEÕzô©}ÿO¾:‡v´!C-kãîäj-ÂMÄDC-„˜qLPb‚vƒÛ¯þÓ_¬Çø_ªõøm|“é°ì ÂÓ†3@†qÆf£ýðéˆ0V" Ó$ál&š´"¢lk¶–çö•WKU/¤¦÷ðb×C[´Â‘]¢q´ÓaA(ÿâC„"" 0˜U†¸†c…®’K_ú_úà×Ó_á:MÈÝ¢pÓ‹I0¤Á"ã$)×ûB""$a°‘½6¸®¢¾'vªºÿ^Ûü0¿Tÿ6“ÉåÔ"1ßhaMŒÈaÇþ"""„ †«®¡DUE(ÿý¿¨ÕKú¾Ã#‰fh“ö×¼!›Â4"‹ÄDE…BÕm5Òu÷觯îÿÝÓký5ZN‚wnMûNºh5gXÑ*"-27TӯשâþH¢½\í.=þîÉ] áÚeÝ]Óp¦Æ"ÉhOR®[¬‡¡j~¾¡ßëûþ#«kºúowzmˇDó¬ZjˆY†jZBRB?wöö¿¿Õz}q«½i}õ»û¬œ]9oTÔ˜#Æ\mX_ŽûÿlÑ\˜¿_µÿÿÒºÿôœ:'”æÊ.êšȘ†™0aÀÁs1ÅVÅ„í+ ø_³ü…Ô”~¿_¯z¥}Ýzy(I]{¤Ú'iÜ&ˆdPŠuWu["ŽÐqÄ0›k­ê‚j½’À¿ÿí÷סûu~Òl;"»Dááx$OQU˜mVv!i…xa~ôÄ6)?ÿ3ÖH}wô?ÿí×ú±ÿüÃ×ÚØAðØm¡ Îë†OØ|îÒaêILÒWÄDO¶JÉÅ ˜N=Xkušjµû¯ÿëÿ¯¿"¯ÿd³@Ûhœ;× z™çd*KaE´iØ^­{ísE÷ñ_ú%]Xpã_®ºÒÙé°È®þ´%tÎü!€¦Å"½¾ ÈßI¦ÅC˜`“j­§iþ¿[úú ÿ­»_ûom¦ÒÚ’­ãWaÿR67ñÂkaE*"[a&Âéÿú¥×òUÃuÝt%Ä­}û«És!Éþ¿á Ó¿â"i3Âi¶Ø¨µÕµV¶ÿ×ýÁE^OM~ ýÕ¯O„  ¸ÏçÌÃ32еI?i¦ƒ9ÝyÐÊ||D2« ’ÂݧA„Ób×M°¶½ïþ¦gýöÿìÎ,&ôа˜ dPŒÈÜ©R_øL Á(E¡[ЊÈüDDYxQÂøh6‚qqví|Ó··mµý¿×ñú"o'tIðŸÓM„åÌŸ%×ý½YÙÄ4ÂÁa¸©R±P¹C„Õûa°â8j­ª÷æŸý ¿ÿþúáXa4“a·5Â$;‹×L&~<)â(2sч~ÿ¬Ñ'híµ%‘3Þ""!ŸŠ&˜M4ÃbNJÝ6¿ÿþ½«úJ½|Åkh ìˆ?I »Aát®t*ÿÝ&Ð.6Ú'=þ""!—g¡+$:b ,JOúÿÿö^•%ôÌ?Ú«iЭy®á4Lvµ„30CѠˣC#QÞ§V—ö“«™¯È;ÃME1LCU»_¿¯ÇT©­.†–ô´ Þô·D£A¿m54, g6õ(^¯ëº[¿â!‚!ŽxM8A„NÓ_[W4ÿ (úZ¥b—IB­}_ÂT½-z$ÿX¿£1“‰”_i5½«†ŸñÂd¡]¬C ¦ÝZ¶ºèWýa(?ôI:Út’û ôáѲ‰Ã½tNÁ8)²ýEÕ÷|È4‹¦S„íC ¶*Ò]$ ’IV!7Ýt’Ž”1þëÞ'}è6,·j‰Ã–?Nïý®ëÌW È,""!“ëìB¦4ׂþªŸ¤’ú~­Xè5_uêù‡è&Ð@ú'n¯õØ ÉRj ƒÐ^«¢:š_ÕwL:¡`ô.ºøoMý¤Ý~ýaÃ_yi{›‰…þË„j•¤mzP‰>¾ºêÿëò'ýßõ»zI½/B,¡_„±›D„s9Ê ´GèÊÒs5gýiKÿIzU߆ûÿØkÖpºµûßÛ‡t=Å Ð0ˆü…鱞ú ì °C°®]uu}tŒç ußšž¿¿ô¬R ,„›^ê¢Cï°îéúöƒ÷Ã÷ñÅEDWž´›KÕu0©7 E$@úOïíÿì|l>-×h9 ºÃ†F97¢xÝæ¿æ@ûÓß*<•]0šª¦)×ëK\+î«Ûý÷øoÿ¯¾ºÃNþýV–Øtƒá Ö—ê°öELCL&#…ÔS $±A:Šªð“ŸýÕïüÜ|ÿÇ©-k†k&>Ûÿ¡~ëÿ­ó´³®†Ÿ4VwUU’b-0˜L ÂaEU'ÕZQÚëkzÚûºû½òiߎûþÿOöûÓùÚ˜0N) ¿_²G­¦*Þ"" e‚OLtÅikm«_[0õÅkåßÿÿðcÚŠ{¦Ì>2ÿiwØN“!ž!…°©¦)Ð`¬]„Öûÿ«4Vï×­í­d$ïFJ÷Ùv‰ÃDÇ~˜C*Ê×XX0žì&gA”8 Âa4Ýö"¤ÚI®îŸîiÖhëþ¿ÿþûV vt›I»a Õ¸A&jÍñ oèZB"#`ÓA‘n)4߆’}ÚæÞªë¯®¾ÿ·õ_WV—P‘;¢o[3ƒA’c)ýTziäÜ„yg'+b!•0ƒ&ä¡L:a&lSVV®î®ª—ÿÿÃ{kWï½WI6i{m Až@ÉÊH*Ö/U™W‘qªN"""s "iÚj)Åx&á&ÒÖŽ6×õýNg‰b·ë_{AzWO%w N,(" a ÊEô®ÒvUEÔSb""!‚Õ0Ÿm„˜i{ikúþq_âÔcïjßmÙäà);mªÝÃ.3ÆŠr+“ݦPñÃá›*!z—°˜¦)-†•¯·^›¿ÿ¯ßNô×[#·'y£þ…¡”ã8EÇéc[¾ÐÐq &ƒU±LCMul'~×ýwÈIýÇÞ´´ƒ‡ {׋ÏâÈ3HÑv.8“a]qf 4ˆh6*!ÚAwþL5þÝkÿOO¿´28hž^í4óc:B.{$÷M$…! &G‡ì'™ïú¹7hk¿ÒÃA}{ßêŸ`‘cNý¦)„Ì ΟúIˆˆa27µ´ëýý×·ÿ¿ü‹ ®Úzݦ÷‡Dá¨N, ÌÅ*">{!?]ª¡3dò[úæŸM¿!ÿáãÿÿéíýéæÌ»rvšhC‹° ˆékÊýUŽ¿í«g­ìÑ^B`ßþˆßþÿÿÿ×ú¶®“a“ò]D‡hœ7ôBÈ2¿òBž¶õê­;ëj­s¿#\j«2mS,š­Ä2ü¬(tÓµ}M8iþ•¯¶gá·ÿê&q„GÿøÐ×éö á ÌÙöN2çf=pD8¹#p=b""S¦PáS ôÓl Á†¶_[îµýêƒþ·þ¿ªqi„Âh\A‘s"q•W¶T•ÔDD  Ú¸Ób˜†VÝí‚;³EN–sýúÿ^4Nö‰û[AœÀÁ|ˆã dšá„çaBšÍo ކ¸h6*6ÒïµÕýl?ÿ& þÿM†G èì'Z `ƒBBL޳—a é¦ªòéÁJ­ªc0˜MŠa…ªÿþþ¿ú^ƒ÷‡¨)eÛDáÚvƒ8A™‘Oz&?@ˆö¾""!…; Õ§m1[ØNõëðE=û8¾OdzÒwÒj›I·¤œ2;¢xÃ"¸Av…ØAž ƒ!6ĞNµZâ"Á4ÖÓMTC†¿¶°›f}®¿éÿÿÂ×úm§ø ÁPw¤âî gÈÁœ^—špý°HDD0A…»ÅiÇ¥¯þºukß¿z_^û¤ØdcÃ'Bñ¶Õ&ƒ‹D8@gˆÁ”ŒÏý¯â„DC%Š­0ƒa±L2: Úz¯šÿþ¾ú¯moý5¥l–6¶‰ßÓP¦°\ e3Ï3Gøëí“íní1ÆÅ.ØJJÿzt·ŽÒÜUoW§ê›Û £um‹‹A„ &yÿÓË* DD2Nši½c¡ÿøÿÿØþÂ×þÝ/[$ë}Ü2(ì"CâÂx"%' ŽÇÑšëY‘K ’t×m?ÿ°¾HpMòCýw»Zúïé¥Òm‘Žš ŽðƒaÑ;x'¡aA‚xS8"e„ÿ5°¯î»Ká U¢Qúê?uUuÆ ¯¦©§[dcéùxöšÓ[M=F²¸Öþd.B"9ŸîºH–¿ÐOòu4—¡þžš[÷Úh4‰Ý¦—Aðȱ’ ŒØr2}6Ö×û…¯_¥ø-Z"éúÂìu}V·Cõûõ¶ÓH¼°HœkBa8@™áBC‰ÜôØ¥»«YŸ8Û3÷4ÿ]/ma/ÿ¿Ýÿõ»u»Óxd‚ N-7Õd3ib¢4ûµj×ëüÓÿâ¤õ%uoÿÿi{¾•ýô›¶ƒ%dX¢wÑ8h/IÓkÚ{ „±[ $Ÿa?Fv¿ûè-Â*ÿ_ë] q7Tƒ®”1þºiÒl:M¾v²e:_Äa„È£ÿݦ0˜N Õµµ½vgëO_gÝÿÿ¥‚÷x‘Â_!Õ«®Fê®ð™âÃèS+‰1°`‰Û°©…vÄ8¦(,Sa}ìÎéUÿÿù2Úï¨[¦ÇûýÓKÖœC3Äx‹Œ†ká‰üE¢a`™ÐS„ȰH{MCv('{ki¾î—ÿþ‰ß ®·ÿIkÐýè»qv…„Ï‘q„¦wÁ¦±k¦a:a‚Vk zÿzßIùƉ_ ÝÿñŽ“a‘ÃvÐh\2‘›2*fBZph2¤þ„D0ƒ Þ)‹ ÞÚÿÿf‹¯­±‚+<_ÿýzd²á‘݆úÎ g…Aš]Ë€ÚÂvª'T"“Rð☠ši¦Ú[©É5]ÚþÁÿÿýL‚'«ëx];#¶07ša4ÌdthKIXaò7Å$83_„eB¤L&¶'?úý«þq}}IQ°ö·öÒm§Ã#†è›½4ƒ82åk»M:ga0š¡ÂkÓblU„í»ZÿæŸßÿâñÿÿûM;¤ '¢î©Ç3ÉTiêï¦w6B[˜j""A§kA±ü[WÛké}þæBË_úÕjýÙ'Ué=<ÙDí¶¶@†3“Šg#Æu“ÿ}Ðc" ÂÓ!u°øa+°’Úþõy¢ -ü}ut+}_«¥mSÄZ ! Á?s#$îwÁœŠŽû ‹âÓI„iÚÕ}mo¾ß¡õ÷j­¯dc¦©ä±ôòñ¢OX´Ó@Í‘â#Œ™‹ï;|<2wÞC‚#¡k´N-‹¿´·¯×¿ôºiÕ+¦½º}oz'pá·4ST!„â ùž3x³›ÿƒ#ǺXˆˆ{¶šiÇv®¾ÙÿÖ‡ÿÿ×¾¿KIÙúm ód6è“«Mia ïÿh7¼":qi‘`&Ó0›§¥~ž¶gß÷ýîÖÒþ¯ÿOM%ﻆJÜ'ø°šâxgÈ„k¯·¸Þ"&»{¤Ãűl5p“ªÿÿø‘ÂSúm-?Ðÿ«]:LŽØpȰE|»Ë~4€ÀAŸ"ã8d2"ÿ¸ë•èB"ÊÐ-¦íŠc‹ÿ_Á/ãâ÷ptÃ~ŸéÝ„Âm[„)vÓ…‚a|&"sO_o^ÉÅÂdc§i¦ï×]ÿ_ðU×Ðâ Çïëý÷WÐM´Ë†Å§S’ a²9)Òÿ¦"!–œ ÂÝ{þº'ÖF¬Ž?ÿp~¿ýVý¾­ôÈîÈì‹ ÎâÂwÁg0ˆ|dq’Fu}aÑ!çcCÊÙE=ÿÍÉzðWÿÓmþß_ý,ɾ¶ê¦ŸÃ%òñ† ÓCâÁx`ƒó™©~ð¯%¤-«ÿú_ÿ¯~¤ÓÛ¥í/ÿ8Hj=Õ¯¯öäcÕáHâ‰Ü;rÝÄ=Áh.lWõ û×®ß_ÝV»úø"±‚=÷â¿üƒ§‹¿ê¿®š÷§¦Ùð‘ÅC·øOM¿¦Ì…N˜a ˜NûJíÚÚíŸõµýÓ³çk×ÿ¢(öÿÒÿÄ'í ýZô×Mí²;øtIÞÐA×㹓;Ñ4ÅZacN;;«µÓÕ¿³E¾õZ ÿÐ' ý7ÿäá}Z ×Þ=>í?o ø_’f ü¿ÝŸ‰˜Îa„OŰ“i‹Š6)ˆl4á„íÖûkz–ÿág3Ĩɧׂ׉'¾µ×K_ÿÂqÎÔpƒ<)Ã<ê¦)ÈDDú>˜TÓ"™ÖÖÄ6!…ƒºµÓ¼Žþ¾ë±­~‰Zü/ñÿˆ_ë_Kâí4BÌŒðŸþ}I¡ˆˆ† ‚ 2ˆL‹ ÝÅGjš¬Cõÿ[×Uþ—øDoõÿÍÿôÖ’ìŠí§Tƒ"ŒÍzí8pˆ†P3YÎNA…QH4pi§ªÿêîßü/é}tGgŸð¿¯ŒmíJí56Q1ß’a€D^#Â`ÊÏÐîáÛ &T0ëîÐhCA¦¸&ƒ«³?ïÿÿó‹á ~ít+[½+ ƒ¨`´Ófƒ³/þI0â""" V¨0ƒb!… ¶—^׿KÓ}ï8¾ýW}ë]׫~§TΈ4BÌœwÿŠ'ñ%Ó´Ô‰‡ƒbšMoí?õëí­}/ÿöŸ«ÖÞ½Ù+#¸v§wÂS‘±L32õõÊá:""BÎëkM ¦Ä5^ÓÕ|Ï_ú×Òù7k÷MÔ¯­5~‰ÝÞÝ4 Ðgˆ¹"Lì—ëþ“ñöšq ›¶¿ýþ¾Ý7íw« 'OïÕ=[¼•Ù:-=&…„C6@‘óf`‰¿®d—×ãB #ì Èì˜õAÛA4ãNªáKÌÖÝk[}Çõ[j®®ïMé;L'DݸMSCBÐ~ND3_½x`–"""'›L‹k´ÚN)œCTí-µó>ÿ®ƒu¥ÿ]÷þöÓôp蕹'O4l'xL!Èy–õéŒÉjHD! `š -Õ6!¦Rv ¬4ßþ0ÜœÂïöÖ«þ›ï¾ªäcëA8|;"Ñ;u¦°Â`aù.f¯Äì³a&DDE‚ ;#²oZ ±A4ïþÚ3Áñÿýuÿù&õé…½zN¦õDí­÷Ä0@ÈHÛ>Êu®YDu"!„"!rVƒÿþÃÿüWýÃuïÅ-_½í«Dï% ¦žÓ!„@†fl®#B"AÚkûÚß4úýÿ×é[»¨ê:¾ ÒûôŸAÚi‚Ñ8qa4,—"äšjÂôÕ{Û^ÿßûþ›}þBþ×õ´¿n˜RXÒm´N¡gp‘*B¶)h4M«V®}þ×ôÿØxŠªÿoxþ_¦úéÒvGdwÃa‘pÝ;L¹"Ⓠ y;ÎÉ_ƒ Ÿý«úû›Èñâ‘_'VIÌíÿñ¯í¯úmWìpÈîà î-0ž#Ì cˆÔã„Òzj­7ÚúªÅ‡v¾‡­þÿúKÿNõý7‡eœœú' Ó-s5¨œ@ îa|[iZm¥£zÿüñü~JÏÿÛúÐÖ¼-oúÓ†GnšDì>ÜHë2¯ÄD\5}0ب´øí/³þÙŸ~˜}/èãÿ' ûÿ¼'V ' M±oA¤â#»MÅ5 Ziµõu÷öÍÿý?×à½×»ÿ×ßÕñI$FѶÓ#u3„ñ^Æ› (i÷ÚZf®êq|uþÿÿýÿ@ˆëò¥b" ˆ0˜Lîšvlq o†­¥ýºÚU§í~‰gÿÿ¯ëþúI4„DDE­ Ä8¨¨«VJ×ßþÿ¯ÿ_ý¿ÿ}…Qƒ ª‚ꃄA±Qv—ªù¢þ¿ZÿþÒÿüF„D–6w  Ú Å5ØM-WÿüâÿÿeI+B#&\"B ž¶‚a6Wúý¯ëœÿ¯ü^ÂÄDC6ʵMCMŠ ¦› ××_×ô ÿ¼q¦°Õ Óˆ†°Ò´Õù`Oüâ~’ÂÞÙ; ±Llv’ü2?¥¯~vI™=ˆˆƒ7šWLa4ÓBF#½êþK¢¥ ÓHDEp™íU„M¶Ò°·K¶ˆ‹ …÷qQ;ßÎíE¹£¬DDÍÖÓ´»Û¡bÖ#.paJh?Ó¹Þ¤:N"#ø¸{ý/ß=Wü9Ø6vtyË™á—@µþøM†p9RDt]BÄB#ý ‹~rB"s;Šà¬ïTZ“\C83áókÞ¨A…}•°‡QDÊ‚ ‚f†ZdõPˆÐD¬Àø¤“Ma…Úph‡Z‚aIÛ|Ûɽ‹ žÉÆ¿õM;¤vTÌMþ3º÷á8mä‡zÍ™Ó[OÆœi•0äq›Dx6_ØA¾“×Èâ‚jhX!‘£5(¿Þê8ˆ†Øi÷ìì Žÿo ¾Ã#‡'µD/‘<Š(R®½-mHÉéÝü&Yk_`Æ¿h:N‰ãoPš˜ "8¤—}úû&>F䜎)™'Wîõÿ_!F»]tÖá’º'tMéú¶[ÿ«Ü…‡|íC*c·ëý/öüA}mútº'Ó&íµh0¼ñiY¢Õ®ö¾×ö¦dL¿ïÌïú×¾õoA¦D|¼ˆ¢©âl6?TªŸk{ÿ_øWüB÷_Wû°›X(ÃñsÔÏ&$—üpÝÿ‹[àÂ#ôD‚úò-=u×¾Þó<fÅ64AàŸP4—øÔ±õøi†ÿPû _ø^·ƒâ_þîød¬‹×ø‹A‚"Aª­þ›ÍGø¥ÿï¯ÿ¢Qÿl%¥ÿÉž—´ÿ¨wtöÄÌ?nÂFÃ2!/¿¿ºúÿÐOþØ+^’OõWº^ÀôJᦦ1xGïn0¡55†2* ‹¯ „Âw¯ë¿_ø:%}/vÿúþýöIÂzv«´ÐÈØÍw·„ Ðar†PÂ#¨ˆÒTÚãøköš¯º“6‚ãþ)ÿê·§Þ†J×ß[ª à`ñ3#¯ïÉãDnPðˆÇa5ÁAB @¢pˆùÚªdAôavÿþ¯[_Òïÿÿý ¯\•Þl§ÓƒfcÛÒm/D­¢OÔ!aÎ^hA0ˆ@ÈÃ>¦foåìZl]§ö»ûþ‚ôÿºŠÿÜ+jé6êèßDDŽ ûµzum ÚGÇ®‰@aB˜A„Á„Ó“¨Ìâbĉ¦Pá2,z¶Ä4íµ½4ÿåŽQ#ÿýÿ­¥k}Òm’Æ:'mQ7{zZé=i{ÈxtꚄ„Âa0A‚Ljˆ‰ô ; ±pÒl-~£_ý¯«kÿ®÷§“ÊMíÖÚ_jßîAÕ¯“º&ð’`…„Ðw$®",–wCtÓYóÿÿ_ô‰GýöDýéëiU>ßþ¯éûAÙ 'H=ËÆši¬DD2N¡=A„®Ÿúoÿ ŠõáÃOømmÓjûÿ¥{ïZÖÓßNëº't^>±4lŸ…¿m‚ 4ínþ—þ¿ý¸éö ôö?ÿß×§¯§]‘:“¯øˆÐˆjîÂx@ÓTÓ_Ukü7_íx`оë¯ëÿÿðèx¶ºiu.½EË ßPš 0ƒÓ†šÿœ_ç0y-k°ÿ¨µÿïÿûÿµëÕ¨Øü›‰4¨D]ß¾‚,&„éúàõ¾ÇûWÿÿ¿ú_Ãõßý IÜE”@[[ƒˆozý»Úç°o“Éûÿÿ¶·íýÊ/ô’e9‡A’‚OßÓÿòuú‡º~·ö÷÷ÿö*½¿’Ö¢ëi†ÈíS@ƒMnû^½õÿ~¾ýý¯ßÿä™É…íE$#¦„â› a{ßµ³D®Úõ¥u~¿ Ý»ÿúó´¢>Ä0© Ê./ŠŠNêÒm7_øi·½>ºð^¡ÿïûÎÕ$Âb%s‰O²  Õãt£†©»tÃO«íÑ1_·U{<€º¾˜Q )1ºb˜lPA½„¢ÛIÒ`Áþ—ï÷ï ˆé{(hB|šv“v)Û# ¬4¢þô |ˆÞûû·O­ÎêUˆˆeà Ó¸a?ö¿ÿÞý*ÂCzë·¬}n\Oÿi®Ÿä­¤Ñ8hïâá˜.3Ñ¢p¾Ãûû[ëU:g‹ÿŠ õì~ûAq¥¿§Û’¶“ ƒ{#]aD<¡[„„A„ì'~¾¾i¨wúù<·úÿ‡Kú¯K§ïö†G ¦‘7ÞºfÅ62äxR ¾zªlC´¢–Ó´g}¿]î‚Â0ïôJ:«aþŸ]Òúwi&Ýö x´ÑÌŽ2A_yÙ"}ãpƒˆlm…µ¿ú]#Å~‚}ýÿ]«KôíÕna :$;âÂ<À§d~",–:¦­ê)†“ª~úáÿëúIºÿþ¾-ÁõZÿ{dQè&Ñw´Óá„ ½YH4Á2+§j6Zi×ßú]zÂúûõÿŽºî¿ÿvžžžFôNè›úC2 ê/j˜„a0žÃÕw§¯Ù¿ëù1¯Kþë×û otÓi7°‘<§pX†}BiâÚ‹°¡4ÖÂëk¯ïùÏÿ“ÔŠÿý*ÿÖ‡íöÖÿ„{…Xˆe2¦[”áoƒ „Ø´µ½zíýÿïþÿá…ƒºëÒIÁ걃'SpÂ)ˆab­üÓþŸÎ/cÿÿŽBÿÝZŠIò‘ x‰PÁ”9\T GdÇõ öÒNÕv×[3õõúëÿ­¿_õ+Ã;¬Š»É°HDDDDOtÈÚb‚ Œ&¶]×_ýïüâþJ oýi?öh‚èc&œÕ”8&šêÐli§ Ó]}¬ÍkZÿD?ÿ~ëá4ËBÒúÄDA‚!¦°i±Ä4ØÂ®Úßþ@óÄ—÷jäò^DÇþÖ"" Ó[ ‹¤M¨a[ ×ëÙ¢Pý?É¿Á2€át[Iv7ƒ 1Â4Ø-¦!Å1 ; }þÙÿ½¶ÅÚÓMP3â‘XÏÇh9‘–èDuçaa1I É9ö¬ بuÛu®÷M†GAì‹]ãœ5Ðd .gÆp¼]4ý–êJ„DXA’„íFa6ÂL0–䶘AÚm[ Óhà wîÈ€sä`Ï‘£'_•DØûDÝZA¨ˆˆi®Ø¦( ÐzÚU×¼Ò·NÁBwªA¦š f‚™Ä#×Lì|9ÝMpa P”†Né…I¯î÷¿´ÕjúM²XGá¦Ø´ëL&p`ˆUsÒ Ÿ¢¦´ú;$ŽÒ,DC* ƒMýmÅV½~›é‘Ût^0ìôLpïO4Â"†\º¿y’§úa²¡5/]û8J²8ŸýSº´á’té„@áÃË¿á0ƒ„HE7Qjû¶?äU"I„éÿ¯‚ñÿÞýÖÝ>ÛúMïA÷ $N!4 °OȺíuQoÚt ¸@ÈB¿_×ÿß×ZñûK_ÃÖ“Ç>Q'¡aÌžP Lè—Â^Ó¨\ÎN×ÿôO<Õ÷n¿Õþ½a¿é_¨xA¹8¨[pgÄ)¾Ö?tOáÕ2µÌŸzÿ¤«¯ÿÿúŽë÷àÇú÷ÿI‘Æ^4žÓ´ÐÑrXHä“Á7ò‘ô®ö‰»°—›Kþ¯ÿüÇÒªºÿºÿðK´¶×Ô&F?y<¸tOa"NÓîР@Ï Ž* ü Ï `Ï#ñ©b“ô•hg­¯Þµi9:¿ÿ~+ù!ÉŽ®¾ý¿¸Ü,þí4º^ûÁS͉…éÜ\2\q¯ íᓌ£7tû_ÉÝC ›¯í+[µuÕýª¡þ—oêØÙMþ/í½~“i;&xtNÒ.Û½¡kè›÷BÐg¹ ¦lÛ:úøÐi¤æAX(¦(&šÇa¶Ó¿_ÚþŸÿý-‡ÖÝzíßzt› •°É“·ú6„Úv˜B f„H.žñÒ d\à «MLXAÅ1qV—ýëuÿž@ÿÉPÕµºÃû/}ÿ«¯ONȰïþè2XÑ;ºvš ˆê®Ò„A’²k~"Çiºm+÷Òó9ûûL_¡Dò"7¶ªµø‘Âè0›"Ÿÿ·û´õëºTôÛ ãÑ;n˜MB ṡWâè–¶DˆˆÉ¸L&gtLŒtìPL Âu -¶•n“®ïúYÄ|'ŠÂ#øZŠƒþ¼-]lWkÈÝ:»#¶‰Ã—mt/pƒÎdx ffDýé Ú&ïR2 èDDDE„ûx ›NÖÖé}³E]‡®ôJ>ßëÇßïüˆ=¯í¡ëkõtJîø„ô-0ƒ™È3´˜¦Äè™8RwaŠtÁ›a%Ní°šýúÒèž8?ïÿ¯¬4 ¾¿¤D݇{L +#iz~ÄDD Ó"ÆâØ  Â¶–•íš/ðÿºßÿûÿþ“u¸uEÄ!y%4xLAž°ƒÂdGµ¯|K[kO_úU÷ÿ ü~“¤×¿Ee"Wáˆúb""!‚ÂdQìˆéâ‚{a-;¿öÖaßÿúÿÿxûI>‚; "–sWî""g´Ó<.ê*!¬:ÿ “{ûþ‰÷ÿÿñÅRw'AìÏLíä¼DDA„Èݦ!ÆšjØI+~½~½yuõoïµ}_OA¥¸ˆŠA¦D‚céaÁ¤¶¶½þ¿¯õŸK××ø|>Ö¸’œÙP{šÚJÚþ¯¾¹Ä¶G¸¡>3HÙŸ%õIõß¶Îëu圥¤""E! .lCM?µìÓõÿ´Â‡œ Aš0ˆè.ÿõ¾v¶EmÖ]~¢KX0™{W„lC´ÓmðôÒ Ü0˜!'à×Óñ¯Áb?"" ‡Ó¶-lí}á Œ7$ÿ¤Ó‡æba3¥ýgn›Lšr¹"¡¡3ޙӦÅ~õ«Ò>H´NbàÁN.\ÿiH&è˜ï+/+…Ž„DD2Ov­¯Šêä£^õMÐpɃɻðšq —¸¦ð¤‡ö?Ó¸HŽ“ì0„DE ®š×Å×öº á“¡8¢C»ûA¢¼õf:Þºä_†hìlfÈDGÚý­õÿúWê›A=´ÓI®t„Ã$Ë.ÍM?¦½Á‚#¬7¦fŸÿÿô÷µÿÒn¹<»µ/Ùû¤Â Á33C# WÅnˆ®FNè>¯õÿâÑÂ{Kþº¿¤®—‡ÚEÛ[M $>r2=L†—þ+÷¦KFëïÿþ‡î\O[úßþß궉ÃÑ8wÅ…@Â#.0Õqz÷pƒ´“ÿ×ùåPà—¸þ:Ó§á½>•uÈíÐpÚ'{[  âÊA™Œé'Et‹; ÒU×Sµ=ôÿÿøB"‰_κÿýêåŃí%×§ù.Ó/á‘_/,$HvðÓM å:Â`‘Œƒz^(ììR9„A…C•4¦‡Ýmÿè/~NÿKÛû\}ï_ú_ µ‚`¨6ÉR„Ó‡„ ù#£2ö-0™±B!&FA1÷ðµ m¤u×óßïUœïIýÒõiÒëðÁi¯Ö¿ééô›jGNRݯ„І6ðÉYÚ'ÓL!„ ÿ¤“ &Á…M4ÛKÕëfz­î©~ö&h“Ûþ)²:äta‘špî½ ÉÎùÝQf!v_&šd ýŠˆkà 6½õ­¿Óé~ÅÿñåX?kÿ¿ê-j ÿúnžƒû¶± l!gˆgA™™ÑÔ_¨á·Í4ÓL‹n"%  ÐiÐoÅÂoÚß®Þh¯ëôýÿ]aaûzßþû9q×KïÝ‘c/µÜ\4 ’ò2 Šîý¿ø»HDD0L‹ka4÷tìA¦¾»iÙï×ù:¿ ‚(ü”ÂP“ÿèÿðÐÿýëý„ëÈ®D{´Þºj0ƒßýñ‰OïðÅ$úxA´›ȃäïI¦˜AœL"dŽk,‘ðÉѧÄ3€¹‚!Ÿû¾vTV—ßögäéÞ¶¿þÞ¡}^µ¯ðÂKÞ­ØA´¨2th´Ó‹°ƒÓA º‘ÝÈi¸†¨çjðéñ6©®í[__üŸ<^û~ ÿûT·CýïïP¶JôÚ'NÛa¤âÐvÊ‘§§Ý‚d}°žT ÙžDþÝÓbaÓM°¶« ´{þÃyÅøEg¡ÉjJÿ¯ïÿþ«µÛôÚétìŽìº¶†ÒýL ᑾNÂ#Àgˆñå]pîvš] 'Å;¶žŸû뮘>†‚ÿíºïÿ«_úûõº~ÒvÿºÿLŽé?"¿AÚx!”ƒ' Ÿ[‡;+è3*Ði¦Ea¦«‹¤Óû¯7o{ýõ­ÿÿúþ½?½ërPªÚ¿ñ#‰ý5Óxi¦‘!ßêa3Ã#†sâ#D~u÷ Iñ àe4í>Ð@ÂiÚÚ§¯0ó9WßúZÿÿþµãQúÿ¡ß‚#ÿà¿þ¿ô‚pá½m… Î "1Á©²3Kú~""",ŽÓêƒ8¨ì'®¶“n·[zÿɹ?ûaô?íu¾?­÷×wöö¹<¢ODcÚO‹àÂ#.N Jaÿƒ‡I§kA„ ,pÈäÚvºÛ¤‹ŽõÿãüWõ¿\íyÅè”?ÿ¿Iû×Apƒlƒz»mþ„0ƒ@ìŽ2ýnM“ø‰NŠ*a?ñTÅE±m¥¶’Wë_ÿè,Úù"uïúõûôKÕºuýtþ–È$RpìŠý„ÓiÜX g…8GȉK§é¤""."ÊtÐiÛc °ÂKímµºÍ?äi7ílºþ‰YÜ*þý}/7ÿÿj½ÿõ÷#õ>ôȃÑ'mZv˜A„3AJx£×âš`™'«ŠT7IXaum‚×ûÿ ÿµßú÷›¿Y0\]ÿµô4éïý0› Û$“†Õ& Ï Á(%_ÔDD¡A‚Á¤á±H8»«ûD8OÕ™î³Eúÿ„¿úÿ§øÿÿQCï¾öútº’¶“í"Pôã „4 œþ’ NÖÜS „Ø8û´ì.šüÃû¯ØÓNÓuÒO×ÙuÿÿÖúþ¿w§ÝÚ§D®‰æíS2)Ò]¤„D0@ÊpƒÏ ¤iݰÂV­¯ýŸ·\|  ˆqÚ÷ögôÿ÷ÿÒÿ¶¿ßþúW^áÑ;rqm0ƒf„§\¡0T""!„Nïnš Šb¢¯°®’ú™ -§þ-VýM¿õúë’â‡^¿ÿ_õºézOÜÒN“†N„íª„3c0ˆÎIÙª–ŸiÚ „â˜Ó´µÄÑ™ÓQ &M†MZië_üG´Jÿö—ÿìmÿïÓ]ï¥ÉÛUŒ&ˆ^!Y „þ"!„Âjí¦“cOÄA” &EqhCcÂÿ]Õ°G›õé×ô£ö‚â–—Ói:%y'¶‰ÕiÄA„Hši«iXˆ4|Ì ÈƒÚtþÒm5¿\Îô–þëý}[רû_¥þî‚mŽk§¼DD„0±ÄDLÐa>ÓLTCNNÕ×þ¿÷8ŸDqНZ·ÒéÙêŸi'õÝ(ø‹”†ôÓÄ6*+´Xí4þ¿ëMt²b]ÿhס[û|ìiEExˆ†™r1îÓ„COí«]ëÑ>\Ê€_ÖÇÿ_ ï;ì:  Ái0B!’pšjé‹ Âzíÿÿ_×Â×]wßCƒÖê yªÒaN‰„ȱ¸ºL&éE~›æž«ÿá=÷`Øÿ;%b/¤""D1CLˆ÷Nج Âà ՅoÓÜŸÿÑ>ëô·kµfE%[B""“ì&®^ÅXNÂö¿ZKýy*ÛÞ9¢2CLì–|üqaní1lA„ØiZÜÏÿÿpEd#ÃK¥Ý?ËAÚB"f™* 7Åëk¯ÿØ>ž=‡ÿ´„DA„ÈÝ2,´ÜSa-6Õ¿Í;mC ìÅ´îd`‡Î‘uˆƒ fpƒNìTC°¶]UíÐx@Ê)ÙHd"ZÊžT áFCHO„$XÆâˆDDC,P&ˆlC» i^ñi ÍŠlDqO™f™ÆO…¿I0œ‚GYU÷×Vƒ»úþ½|T•[¯uHãn½Õ=þ¯ý&÷ ž]~BІi‚xS0g™Ã t¿ôÒ9%›ÁÿìTDDE”á">»b‚qa0šÚ5¾”ó…‹'h2,5bat×½°ý}Ј†mI-­ MáØ$š¬5ZdX&;l¨»OT—Ó}~N) ±cŽ‘(rc‘"ødAÕ[iÛâ""𘆊ŽÂzémŸöëÄDDDOìh0šaw¾$¸<„[ÔD4•/ Ùü³ðl„Cø™ x†2¸Šé­Œ®Ý áøˆ¹ ab","qY º ƒb‚w駤•â Á ™ÂV´ ó ¡’É0 Vâ$¶v·Ù)ôÝUu Êp‚iþVƒŸ Gž2Wˆ4—[ˆˆŽáÞâ-¢`É3IGüîÔ…¹ö˜×ç?Ü0A‚a>ßþÿíT'Ã¥úçóDkÊ2P´÷~ôd1‰.¿Q03c80ƒ ùÆ=uÚÎά" ì™l£ó#APû‹A¡ &330GG¯ÒIck’iS%9„[©/=ÝÑ!íª 4ao´¿jÑ>ØBM¸&ðƒ;PXpî‚m‘b‰ÛDã `â@ÿ zŠÓ¾vT3‡¾‰s?äo§a7MáíZÑ)<ƒI_NáÎÂJ·ÐmNÁ”“þ©[Ý~äy“»h›¿ÒfÈ!’„º¾Á&þGáé7aFoCõ÷þÖ“µ%ké­…&2Aï¾=¾–‰LìŸ<»®ëTëýꃫ×›õBÐh26GÆa½úwöé©oOÓþ«ãZ¿ëíûPáäîÚv §"ŽG2ÈT»û_c­ÓId©:Oû÷ù0 õÿÿtEz/`“xÓ¸y;ññëÇjÊMñ_¯ùÒÿë ÁW‘^—ü&Õ¶»m2qEÇd.“ŠhF‘Ã:dtºæJw¹"ñ]̆â >½n¾Q+úû·tÞþôõÒ¶ÝÐpÉìpi„ ! øZÙa(0“]tò%¡ÿïÒ×ê›ÿýoÝ´½ö' 4ír`eÌø¥ô§ìÒ3ñ˜D_ÿîC>ô;y×_]&ézþ¹"—×ú_ÿWßM¤òqDíºñaƒ8Eúù'„Ó S‘q›2uªîaÌi…µÞ¿3ÿísŸ¾»~¿^úaZ¸:°ÞÚW¸d±É_´Ó°¹± ÿdväí¦èXA‚"Ù*‘â|ü}„ý§Ã"»°‡îÖIµ×ÿׯïWûÿê+_I]u¨y<·¯ØAôéZ'm…w<#„BÀ0ƒÇv“턦¶éÚßfŸV÷ÿ_­¼M=÷ôŸ~ÙÃÉÚi”¹¯IýéÚ Šö6…§hà„ã.³4pÈwÞ"2Á„ȰMöÛ„MŽInÕ~¿Î-<#ÛíëúÿÚ ¯ÿ¥¿ñÿUõܓރ.„ó.ýIN, aD0äøŸ‘‘ÿ ɺ¯iŠ0ƒböÓ½ëW'K¨>où"?þø?ï™ÿ^’ÿö½ff×í¤ü:' ¾"Ðh0ƒÈ<Ÿ8ßÌŠ|DA”!5w صVÒµ°¨¸}¿¯O×ÿAzÿ¾÷_k¿öþéƒõ·ÒÞƒ²,Q;nÕ ð@Á5£Â’µÄD*Á4½0ƒµUoýLW]ßÿáþÒÝ|™ÿ¥×!{º°ø¨6–ØMÓ²ä-5'½P4BÌ„D¢ÓÏæÂ dcîØ¦˜ ¨4î­n÷4óþ¿þ‰gÿß ¶—ï_íÿÛáŽ!pý÷ù¦F:Þ’oúªa0 ƒ4͑Д&""" i„í\CŽ;´­m]_¯_ý(DußÕš+ÿãý×[Ø®ë~†…Û­÷ Ž—I"våÅ·„Á ˆ‹UÓ[a„˜î®ÛS‡õÿûXm.Ü/ÿ×è¨~¯Ý~à½/ºïO[¤û¢Q“w 2\Râ˜#â’ DDE”è0šŠbšb‚kíu[¯^½ŠMa…z¥÷úP|ߢynßïÿ§Uë…¾û¤é6òC¿°ƒ…CeXM4Òi¶ ƒÛ]U½_2[H0ƒb¬-ÿÿaÿ9¥„x{kÖµí¨cÿ¤VßëIÃ%ÚiV bgƒ0š}ÞÁâ“°O«¼0½¦('kµ·ú ònÁïú#_…ýä† Yé´¿iÚ—Žlm&"""8 ûn“bÂokƒ(ã ÂjM¥Nï×¥°ôÞ¥èûi/×Q°bG þïÿ[«²t' E¡i‘aVÅÐøˆˆaTw Ó ÃJ;Fwý·½þº¯%w_ÖÂÓ¡êêú÷»ÓxˆÉº ¨2C‘¿2Aq Ë‹Z¦œSQÃ;K»ÿé¤äQîk¬Am?«­\í\DDF“Aâ#Nï»ÅƇjÚZÿïKÿ¢} ¢WÿÁ}&81Z¼ûKUüDI¦©Œ øiÿ^ÿég3䓽ÉaéÕý ë¾d‚"uen­¬›i”›%Éœp™Âi0ƒb-4Þ×õõ·¥ëD¯iÒWø{L'Zai®(DD!= á Ó؃]>õßí_Ð\LãD¢ÿôöw¡N)¯ÄD0… È°L~­D0žšé§ª÷š/KjNßû‡{;¨®—èDDIæ©‘ƒ4ÁˆpÂL[kiÿý`œ"‡øä¾•.ÎÒ:jŸhDC¬±ÂwøŽ[_WuðÞ‡ÿÙW‡Â «! !öˆˆ†q ¡ÓL‰4ÛA§a:­=ù‡ûúùß ál™˜™/;,!`ƒNA’´íXMˆ{ÚÝi]zÿ¯&;ÓgßQ »A…ÞÖÄ4Ö×S¼8däGÍ¢"Ë×_t³ªúî"" Î"ÚêÈàñM¤©„, Á˜E²<ggÌë*z¯ôë•Tåp´“áÄDE¦Eµ Ø¥Õ4ýa4 !„7”ú®ºµonÒ#³øþ",«L&¤î]Ñ8ÉÃj‘!ña0©Ä8@š§âºè0„A–âèºü®8fˆˆ0I;ÓÕ ÚA6N·iÈ}CÈâ” “iô«êÞ7é~ë­ý>“Éå’¥üZ Ð<¹PE"¿^[°Èò7úü6¶·z[dUÓ¼Ž pÉZ Ö-0ˆqÂa7]Zh‡òvIÉG~Dô×Ú_BºõOÝ2g#†‰ÛDá´šA Ð5.D2O§Ý¯ªw%+øÿéÿz“i8`™+h´l¢c¾Ø´!ò\d6j±Üy %¥·§ûÚ­E¯û××ôÝV“î6MX^, f‚"äGò*#ÒÿlfÆlSfTµ©’uøúÿÿhÀŸõ¯«÷½mLí†öšhE„FœHX'2{ÏoßÜ0A”Œ‡ýúzàŽïö9ºøõûO^®¸z·\•é¶LôMèŒwèXAœ#Äpˆã*Îõù+»´é„"$ÍÆ[þW0ÎÌÓúŸ;úarz/­wô8½õàÇþ-䱤‚mÀé¤IéÚÄ4Aþfe¹/Ónï ¶M ýkÚ"·1ýðE?ïïýÇþ¿¯ƒþªûZêÕݪA2 ôN·azˆAœØ9Ÿ3fy—KþïÓ¢NÓ‹¯RäHOÍ>×¾ÖÕ¬ÏÿÍÞW×"¡iuö½kÕ²P¯Ù}I·wD£Q§qhC0ƒ3 @Ì„•tïô½hž\q‹AÁšÆ`fÌÐΚҹKɴӽ½}«fÿ×›ó‹äÒ«û·×®‡ÿ¯Bõ\”U÷‘ã„Ø`´NMŠжROõûé}¿iÝ Ó"ÀV°ñlXNLU¤Ó %êÚßëþ¿ùÅþŽÿÿýâÿÿq­öµ¿IÚfÂ+Ãh“ÜGôöÒÂÿÈßȃ´N iÐvS‚äâ„B„#_ï’›w±[›zþŸ÷îN¾ýõÿþŸëöÒ¿ïöÿÖÝ(NÈàŽôdWfBkïü1¤k¡ØOAØ&šiNÐvdá ƒ!’òPIÈâ ›­Ã4Ó ØL8 švºV—Ú¹§¯zØ=ÿòF>¿_­ú_'ïvá;ü ãÿÚ^"\OKýß„ób×MB É›"(—…O¸ˆ™á„BNÓº &Ä68ÓMµµ¿ïý|çÿ¬m&Òÿÿýÿëêýïê¶5Ák§×~¶ÕÃ#†‰Û`¤Ý¦šjf„A1G®ÜDDC ‘ºk·ôÖ)°J*÷J÷ý}ó¿ñÆ¿ÿ¾¼n—ý4³!¯ÿi·…ÿi}j»zzm„y²‰Û»}0ˆzÈðGTµøqaÉùÓ «M¦+ …a­¥iwþh¿÷÷…úõéî×zÿˆ/®º ´Fÿñ#„«µu¿uýÕ¤­Æ‹ËM&·h…ò'òt=“Ô·Öþ"" ÂaJ€œ4ÓVœBŠ ÇöUóOú@¿Þ«zm/¯ý:¿¯A?ø[cb«ßîßÝ­¼ÙÝPpÓ!‚ð¿øˆˆˆ`˜M8i„Ò  ˜V¶¾ÚÝn‰Uí~ñ“N?ë ý«jÒ­Ÿëú°½ª^ÿ{Aaõï»uº¸vHvÑ!ßv«úâ""Ha§¤Ób£ « 6j´•zÿß{ù<ÿûW®é¿…mÄŽŠUu†×]îõ¼ áö²ÞÖò-DE§vš´TR|†?í­÷ÿN¿¥ùætõiØU³?úói‘À¤Gi¿üâÜŽ$„?uaµû«{²]“ÊAÇa2 ŸD|œÍKa4øh4›Vm(»VÒüÎÿúüL…Öӻؖ᧠×ÒôþùÿרØv“ˆ£Û××OÚ &…„CÌŠr1â",& öá±MÅ:¨MµiÕ|Èñf¨‹ÿÿÿ°ßéh•Û ·õä'_ëIïäX¢w{Âhb"’´ÂzbaÅv¡SÛUéqÃ/‚iƒ‡‚ VÓ´ši$ðÿù½'ñ“Ô•íŠVþÿü°ž›tIÚòeV^‰…ÛT4aiãæ@ú дÐh6!Ç÷Ýývxô¾ý¾ÿþ+­}éÐN‰D³’IÄeŠAAiï‹N!‚k„ˆˆa>žÓ[Ó]_×]ßÓè'ùöô¿ýÿÿ·Û§M`’: ì‹w ‹ßiñB!¦™×µI§iG¦›ÙŸûרn°Š·ÿõßßoôçk&Fø«\TDDC Ê&O¡ÁaU2 “MŠx‡kau·zÔ?›Ðg‹ÿï}t?‘?®˜" VK 2-¦)NÔêö„DD2x;¯i¦"˜«ú´ÛýwZü#Ûÿö_á M3X†¤ÓV…5´""T@Ða4ȃ‘j"+µºÿ{þÿPýuðÿ‰[wL"#!Âa'‡ÄDD0ƒ ˜tÓ @騇'úZ­‡ï’«þè áö¢7E¹ ±`ƒ'4¯ƒj$ÚLZí¯›ºÚðŠ·$ÒzÁèÈ…¤¼DF™5ÔS 0M‹‡§ýýƒ×é=ü%;Pl¡ÂñLA¦šb퇯æ¨õz}]1Ü5åŸSHDI80LŽÍw}Á4Õµµ·lÏþ¿¼È•¥ëˆˆˆgÀL§ A ÓNý[Sº^ÿþJ°è1ÜȨDD[Óiˆv†¶ ˆI“‚D¹!þù‘1ž?Z ºwkŠb˜´ÐéÁù‡hÃ×_Ó%'íЈˆ0A’„ÓM¢O×õõÊ ÿmì›Ö¼9ßÅJ#àÁ‰› ô2+µÂ½a|Œ£6kkˆws"²¿ÊD¤¨^žNú'~ý²eÅ0gÄ(%Ó÷{#1oîØg|+]:Oþ»¥¢Q»øh4BŒ!z\‰ ÿÊZ*H†?Ö™Ãû®¼ *W¿ý8dWa‘aÓ´·qaƒ"qÙvD×é§oßí8rÍ8__CõÛú¸NÓ»MKÆ–«„.!žÙFåyÈ-ÿé}¼íOÔvÜ÷Øüûô¿§§ý}Ã#Œ¼lÞ¨f4B šeP–Íû´9Ø(‡Å#»¹_H¤¨ˆ™ød£áïÜ%õoÖûôÚ»2;vÓ¦ÚjF ¸€„8ËåAzª~:h3ÃN릙Dv¿ïOŠÄþí]m®Ÿúy+‡j]Ýv‹‡ºH40@ü«®¹\mh›ÓŽ‚a¾Ktý»ü+ÿw“«Mo‚þ®´ ²)=m{WMô“ºN“´ÐtH~¾6C ‘ÍåP2… Ž“h¶ðƒ´B§%æ²dúáþv&!:ÿ_ýÿ ßݨ,î`_ÿ[w¯iÞ¨EæNÜ4 Dv —ˆw!fD œÿáÃW' ÕBüñr?µáÃa`_ßmôK[è±ú·ûõ·PëýﯧH?¢vì&þŸa0Aæ0GŒÙ Áõü“ô’òówáófb»®wç¯ßù¢þºÿب ‰E¿×_}Y Jµîµÿõï%y;~ÂDµI§¦šÂ­:íumS‡}SMÍÌÌ wôC¦J²ê SÕ´›Oýký}áÿD£¿ïV¸²GV¸7{¿é´œ8v vN„èNòoVµèD- .·»#· %'54!„V)O”uú ß$*¡=Š4؆ØXa$õkUý餳‘ãÍþ‚}uï¾®ïâAŽ¿ÿ÷ý×M¥nÁtHšÂ÷¿ ®ž) è¼¢v¢C»L ÏA‚U‘:?ú|<4صv-0˜Aûkúµþÿ¯8½ö*ûmÕ#@F 1ûAjÒ¿ÿ¯KÐNÉ[A» é|„ ®Ÿßy+ ƒn‰>âÓY€Áâ0f ê~º¾Øodv[÷ ‡tÕÃAàƒˆkkõ§oþ¾¿ú3ü7·øc_é÷_ý¬%Óì/D¢µÞÃþ ÿéëd±Ðm¾šÃB,à/˜'2~¿d½‡ þ0B/Ú»A„Ó »á;K_×ÿüûòF"¸¤G_ ñúâ î M!®õFCkÐNÖÿÿ%\'þºõý6Ɖßnû H@Bˆ‘«þî""" ±Ð»!JšëbïWNÖÒö·ûwAa'‹õòLl1ØÿøúKÿ†ëZ l‡ _ÿ$ôºvE¶÷Öš¨@Á.)‘ÌÙWÕ7ˆˆeÑqÓ)íSµ!GÅPL ؇5Uîû=o]x:_¢yÿõÔ*[ýþ~ÿënëÖØýw_Ã]îÖÈ< Èãl-¶ªÓB!ù™eøˆˆˆˆÓ ªx~ÔPUjëuOzIT:Wé|˜ÿôO>ˆ£ûë×m}{\Ù*ü+ ö6Áh}‡TÜ”.ƒéi6‰FI蓽Ý]„ ÍólÌïñQp˜L&™T4 *à Zîýú×î¿ù½/8³Š_}}†—–Ÿ¿¦ýÚuþ½ŽD§Ç«ˆ_Ðtnm0™'x§¦°˜@É‘E~"""!…OÔPA±±ÕC ß®ª©Óÿõ]ê–Û.üfBkc‹µë·þ¡(#ÛD¯ò+…zÿßúÖÒÖ•Ýá2;è»z&8qi¡„ ÒÆM: ÁÚv;Ä8a+N÷þÒµÕn××Õµôí1ím={{K°tð‡Ñ+¢1ÿu¥úöG×ë«úÛÕ½Ñ!Ú¦¹ Í"u’"¦¨CUTñ±„¤þ¶ºþ®¶{ïøX`™ ¼ ئ8i'ëÞÿÿ ´òNw ¿ÿoˆÿ×µëëÕ¶E@è”Q7xIn„DE‘Úi´Øâ¢¢S 'vž»þ‰›DD2‡:»UM4×Tã]\Ñ ¾„QOÿõ×ÿÞÒkÕ¿Úz´ ƒqIÚ¨Aè4„M&K ¿!ÓNñm5ÇpûXxˆ† ¨°˜@ØiúmîZë­3ÅôÞëÿéêÿõ㯢vÝ·“vœb"" ÂeXA„í2#ê š &¹  DJüD&ââá¯Úëæ‹ÿ“òzÝ'Wõ^šZ}»IÜ>“ èDDD0˜A„ 2;Mq 0›xˆ»!#Sm±AS°ƒµ·N߯õoÿþDg^·üHá®KŸ¤ÞЈˆˆƒ!”97Owˆ`ƒ ™Ðvh6. ÂpÂWVûwòuÿþ¿ÿ½ý|7_Zç`P0L!ƒ%iÚ¶Ø÷A¦ÚV¿N–«ª¯ûÈàÃ…ôvc iÐ`’BcüDDž “„Ó ªL&Å6Mµ[Vû¯Öˆg/¨}m¦¼DI4s &žœ4Å Ø ƒl°›ÿú¾#ß~‰»Ì¸˜K¦"""!„[WØ» &ºõrtºýVË!R}DBTÈAÕ±„)Õ°Ÿk}®;¾w2:Œ|ȰˆƒÂ¤˜¨µ† ó«UÕ…” ÷ú`´"N a ´bq!3L2vèuß; V~鈈‹ ú»L Áh0ˆKh2.–ÿpá4ÊÈü:‰«h29´MÚý§a|ˆâ„2N5ç/WÝnÎê žè“Ì€¡¤qI´O»‹¾ƒ‹ lg Ê>ÿ“vÓþ°ƒ;5:§K÷§ ͯÓA‘Èñ"ã(“Œ§•_JŽ›†šþÊΟO½7ÝoîQ(ú'´Ð´0LøÂ ØÉ3fØW^šêÃO¯âéÿö»×~½7N2XÒaK/kqC¾DGñ_}ul­?ãï¾ ­úÒw§¦AÆEŒœQ;m§i„k"8ÌãÌùç÷øçe"áJyWß;‰XúÖ¾¹ ö‚ÿÿÿ°›Iéى㠵ñ  8‡“™ëê¿apa3À—»JB’yx!˜¤Oþ¯ý¼=ÿÿôýÓ ý‘Å’™<}ŧxAž Î8¥[Týý¦“‹Pƒ>3<޼v—~ÁaX2*_É+ý÷¯ÿ_ûÖ¿ÕZMÂm÷Ù'ôC Á„@—3£)<Ó.°»MIÝÖ !D4/ µéÞsúÿÃt~õþÚÿþÐKý~ŸÚpÈǤò;z'v-BiÜC!¡|gå§½$áÑ+´‰í4±M‘ñš×ía‚ $O+‘_ý|ÜGÁóšÿ~ߥþû‰/½õÿÓÓÕÓªM²;#Š6Q8 §´Ô îÓÐ3ZîžäcÒØ$pè˜ðÃLàÂx\ÚcíPy7aÔìÌï÷4ÞŸû¾ÿéq^¿á}cý²8«Þ*Ý_õMáè8`™*B$íQ8nÿhŠäpKȈ'!R—‹®´Â§êÞy8m4œXO#fOåö¨:_§¥­®ºý¾†–¿ýþÿÿ¯ÿz¶ï[Ú’ÇAäó‡j¾„Ñ l'ºh%CÖ¯#n‚wi†éñiœf A…§×¦·ãAÛ -Õ­¥ÿûÿ _ëè&«äHúÿUÿ\?õ­+_þ¶HBiíL†½Ö?¿ºzIÝ·±w„Ó)Èà.ˆ[#ó9G:_÷QØAÎÒm&Šm(‡XM?µþXÿZÿ“×èŽ?ÿ_ñ Ÿú}Û¡ÚiÚDíË~÷__õ Öô»j½Ãòc´L}Úi‚x‰ÆN?ïñtßÚcw‰1ØA„ûU¾¯¾—¿œáÿúë·ÿ÷ôÐ_ûëtqãDo×ÿŠ÷Òä£û%dvßH7;¶ý¦?íÿ&™ (™¢t ÂdQíT&"M‹MSq›þÕÓ¯sOý'ÿÿä áoÝß×±º_ÿÛ{H÷¿üv·Ð¿Õ~“í;"Ä2^ƒziþÁ¸L ýWQpA•4ȰMöØM´Øµí;_íW´5î¿õ“«áº_þ¾ÿí~ßëß_Û^¢ðà½ú·°ºjl"Ä<›´Iúò@`ƒ' —"NýÄDDBNí­ÚL&ÅÄ0š­„¿_׺¿ÿVW¯Òí]/o ÐYׯZ_×MýGõúò,/oma6é=ÿƒÂ bÏA™‘rõ<Š?{¶â ÆX°Ÿ~ëûØ;×ü‘7H•ãýiŽ=­~ÿÂ5¹*ÅVýø¶>¿¯×ÿVÃZÚa„2*)kˆÉôC,5M2$uíCM‘C\%ÚZ^gaï¼Ýÿ¥ú±ª¹ÚûNÛþ¼y:¨Ž+ï¯ÿO××_»l$K»Û§ax`ƒ$‘MSA8ˆ‰š ©‚ 5Ó„ã ý¥¶–ºÿ_ï­m/"5lv˜†¶Û_w¯„úúûÿv—~ÓkøoúyâxÝ8°†TŸ5 ¸ˆˆ‹L‹w¨lTRq®«¥ÿæwi~ç4‰åÌ„—áÅ­×~gÿ[î»ÉL&õ­¿?Ãõ¦ôß»#Ç'vÔ&ƒD;ö]eÔ~;tºˆˆÂÚ˜t˜ia8i_ví´›[VŠ/Mô°G¶8†Gkt Š ÞÚö~Õþ„"¯÷Qÿ¯Y¬JuƒzþÚöÙ2qÂ}„Ï ÌX°PƒO]ÜlPAÆV8¶!éúUú`ø0ByHu¼8¦ +Mªê®¿éƒïõ¯ûç }Áb¿KÞ¶¤èÑ7{ÚjÅb"$ð3ÌóLîƒ[¦›Mõ„ïv¿|DDƒƒ ¨§b¯O_öÌü?ùÍúôJúu¿ÿÿý«¤ËÄ þÚ$ö"""Á „û Ù?ÐqUÚwâ"Î:jœ ؃Nÿõ»×Ö¿Ð_öö­×ýx-u×¾Ó²,PNM‡± §2p0ƒ[_ÔC´±0……ń V[KûÿðE_^ôGßýøcÿ»«ëi¾TDDF…¦·ã2XˆadGwhC8¨júMZöýû®œWÿ×_ߤúúéÐeºÎ¢-S!µâ"tümE!`œ|0’¹t‹šÚþ–˜?ýzÿ¿ÿêšB Áî„ÈLñ<ˆèئ5R#»j£AÄT4ûJúÖÃßÿ¢Y_]ëÔÉAp^(DDÈKƒÄDDè™HfoÒ» ††º_ýýkýâ¿÷üpÊÚÄDC …M6ÅA‚K 'ö¾KýjN¯ü4ž·Æ¤ÆÁK ¨ ƒˆp¦šºW§¯ú]ÿ±Gj[™Îè6†²Ê¤ÒÄDA„Ï ÃA‡M;_meëÍùÏô¼¥éçp1~×S‚&%…Âi°Õ§±Ÿjˆ„3?õõ…~L²ïø¬DDJ²‡(é…üXM‹®¿ú%µžºäÑ¿2tb"""‘¦Û Š´µá×ý[‡ô[†êM=µÆM9 oB†Ÿ®+¹f/ØVˆ”êÚ§M›gn@È È3²ðU_Êäã´¹|ì·%›§ÄTdì¡á„a}ÜXN 8ƒ'Î4Iö¿g`xA†T…=î™$*A ˆƒC(súì'IÚa0@ÑœŠ9?1Ø_Êáúy,gzŒ¨¿ÕîÊÁ%ЈŠ%pȰäí²B ½¢c½p…„DÂ^(‚¬ž¥Ùzo½^ìþ3ƒÖýì} Ò¶•¹+¤wiS´Á8 ‚ Òæu–šw"?M0ˆ9i))B*Ú%»çbÅ /×OïMÓ¸vLA;¢pÚ~ÖâÁS‘rË‘ d„GJ5­´;MTw³µ6ů붿ºL¼NÉPœî‰Ç´âBGB9!‹òà„wi’$õü&t ³ÿ{]u{ÿ¶ÖìŽÚM Ñ'í˜L—Ðdèá’þÒÖ´ a˜_‡ó8› ÑÿáÕÿô¾žŸ`¡I[A;"ÃM¶‹Ša0™À`à†Èð¥Û ®ÒNÓšfB«ôàðˆÃ%2¦mÕýôÄ0¿õÿ×û_ëþŸm§‘ßz' §}„Î h‡‚H&œ°ÊÜëŽÐë~*‡Ä0˜B²%R¯¸oaÁëúþëÿÿ×OOû¤˶áêã»À]•‚pPçA†G$¿í ›`´â¬g Óÿ|‹¡ýÏÿ÷ßÿýj½µuÃê×I¶GztNØm…§aPˆ°œZ êG¸ÈAk¯]…"»Dá½Å¢pÉÿi3"ÆJƒûùÏýÿâ«ÿ×Þ/ýÂÃuý]¦Þ©Ù+† Ñ;mË­ÚÅ„È0è5×ú·„é6È®DvôÂd sAš'è{ÿ¯Kÿõ8ªN¯ûiïìr-?þ’Ý7ºNÈïAà ã忨'´Â›f  µ ÿôþÂiÜ2+à ÐaBa,–‚®büÉ?çsÿ]}R¿õKÎ/®+ú­un5ºÛÿ}ûiµz}‚’Ë ÙÜ»}Å ÌÁáÿzõ½§á7"ŽÑ8è7M3 ¥Ä.8†H›6~«@ÁYÙËMººÖ÷«_‚ûÎÖq|‘?ýÿÿPúëÞ¿‘ºu¯Ý„êè”]‘…¿†?ÿÃÿéÞt›Dž‰Ûi¥ßM4,—2ähÌ컿kM0ƒ ØV8aiZ묛¦Ìým@~­j‘+Ê×ûºÇÿWðcC×Oûî‚pì`žMßëÿWÿOV“ïµ5ôö°„0PN!ÑÃ( ž5½ìB¦.)Šˆlq':ÿ¯ÌÿÿAj&£úÝ.¿þÈAŸ_~·ÿè:N`Ÿ¡ÿõÿûêôþô¡êš‘Grví»ïA Ñ†²èKe½C²¡4i‘L駨6J*>û#ÚûfWúƒÿüm}ÿ÷]þ¿tí-ý…èW_ÿ÷¯¾ë{}Pt¶G–Eˆk¿ Ø&`ƒ>2äP†d6ï,¸M;VÇ´ƒM8‘5×[_û}ÿv¥×zÖ½·ÛKÿ¦:ÿ®¿ÌŠúœ_'WëÕx×aº†×kOÛÛM¸y+{§Q§Ó. „ ñ5qf­l&©S;4Øí{ÖöÌû?Ý{ßçÿƒkÇÿúÿûÿÌ;]?ÿÿþœHá_d!U¥×O½>òw —´Fï[ ¦™ÔgÁwˆ¢PPðÓM?ÝÓj(&ˆwVW_¬Ñ®oø_þ¿ýâ¾æBë´žžºÉÖ¿¯ò(ëÂÚPõûµßõÛÝzj² íŒ9!Ü|CÉq’5XBDDGiöªí¸Ø¦%t«¶ŸÚö¿`þ~oý¿×Öþ«ÇiZÞØ]ÿóPCzûÝ¥UÕýU²QözpÈîl2 oL  ±ïº'8‰ô*öE…M1¶Ó« «ëÿÿ.µ÷úO¯ÿëý1ǧj«û÷_J‰åŠm‹ÿÿßÿ®öíéºÙ„Û!áuf„\dHæfýiÄe•„&diˆA›±I¬Vé}úÈ¡¿¯é_÷ÿ÷ÃMP&›„ï]{ÛÒ|ï"¸¯­ý||]*á´î“r7îÂÉÝut- <Ðd‡`—â ÊV_M&ƒÂ †’­¯È$öëÿßëë¾8†V›H0ƒM4îêé³?]^ÁÝþN¤ÿÿÿLÿCõzWOVÚ„ôÂ! –""z½­ŠA„R 8a0±¦©ëÿùšýÍÆCKÑ< qa ±ªx_úÞªÿ_×ÿÿßúké½×tN(Œw¦aA—""¦·¥ ݧAiÃißí¦ê«Ž"!‚Xæ…ñ 'Úz}¿¿š×ÿþ¿i}ëßNÉcI„‚}‡. Âb“$!æ ޽Ú66,&ºëkôM¹b"$Á;"Ž-¦.-«éýµû_ý|âÑ}¾Lö¿ðm'ÓíUôÝ ˆˆŠ%‘ÂPååÙ>Іh6*Âíªâ!‚G=¿ $ô©Úßö·»úÒ ü#Å÷þ¿àÆ/ý'Õünq`˜Aí4éˆa8̆Òâ" w¨ü Ób‚k %a=/³ÿ}/X=®¿»ë°×ÿþíÁœp¼D¢|ØA¨ºeHKˆƒ/ÖÓMi´š ˆpÕ5mt¿í0ëïç¯÷u½HƒµM`èˆaJ Å ’xØý;ôñA4ãµOO[Öµ××E—Ö>8ÂgjÜ0HDEª\›×¨ˆˆf ¡Âe9EÓ¢ÇV›Q§šö°Òm+×ÿÓ6-—Ã_ÝÐlP¦új""2Á›@ƒ ØM'ià it¶«Ö‰ì/⤜¡Îáuo’ììaa­ ÄDN&Ÿ{N)ŠcM>Ô+û«ü*J»’´0_Ö"Йv©¤é „ -¥oß ¾MÍ;ÎÁŒàůk3è0¨†šØJÒWôOVgö˜?ý?œh?a(ËXM>ÅF4ÖA']ÌýÿÚ&wíüBxˆ»U !„Øv½…¿]GÇs²B_µÂÂØpíŠM†·ZëþOòºž[­D1ÿû4ÒxBÁ—3ãËÆ¥ÿîÿ÷ÿZìz¦¿ÝïV“TïN)“¶‰Õ4-0ƒÈ6m™™OxŽôÔÑ­Úˆ0DI²9꺻ÿ×ÿû¬{i>½ê×Oºì“­ê­D£'4ð…„à\ÁÈ×ÿߤêBÐr í8¼À†Ì“I¯ô[Š?üâ×ÿÂÿö!ÿý}ÓVúºWN“¶‰CD£éÄ0ƒ8 „ á“ÞŸ´žöƒ6½Z.?L ÀÓ$~¹žv$Âd\úþÿÎ.½¾«ºõ÷O¯ìCñ‘O«ôŸÙâž›ÛDíÚq †gˆÁdjNW[þ·Óo· Pï»§da `ˆE ½Ù×;_¿ý?}öwV&õÿþ„tÃuéýß Ã¦ÿzm‘`‹NïiÅ‚ œ*˜þižQËí<:Á¿²N’Òo´KÓH›·NÓÍ>fÈþhd9öÓ; KVºÚÿÚõê±U'_ÿ_XkÇué´?û' všzm‘`ŠîEÉÃá¯`ƒC!ŽúLl…QÒ½ÿ}úÉ¿¦h0A„"t…Óª»‘¬0ú}×ý»¿õÿȃœtíûþÇÚ´Çê­n'„ØI·Dî‹¿é©âð·õõuÕú_AÙ/.úmV\l…¤Ž~ÂkDßÅ1lSœi¯Úè±Ùûê›ÿ÷ä꿯õQƒú§ÿÿO[ÓÓì'mW‘\R#{uõ¾öëþ©Õ»A¦‘(hœ6“‡ÈA˜#ñ˜Î’¨ë»ÓÕ„´ÖÂm¥~׿~ºþ»‚><"‡Éï¿ Ô¯M=6·% ½Ýá‘Û—‰½ô ÑOÿ_¿ßþßI¿ªnš`‘í;ˆa`ˆräàd¦îôšv]²7 ¦E~Õ¦qq±¯Ow÷ýíš-Cè{ý"Pµ_ëãÿÿ·ééÒ‚z¤Ïûúõ¶“EÄþz·ÿݤÈ®îE}'¡h4 ¨ ºãˆ0B Â`ƒLˆøÞšAÓÓa$÷Oÿ^ÝæõÚ ½“Ô–~¿ýV#Ý`Æ+¯~©onþÿDQÿüÅ*÷t—¿MÂnKM<›´Mö°ˆx!à”ò(X|þ"""T]2,ZkzؤÂpÂi«a6Õ}R¾ÿ×ÒþN§þ»íÁÿþï­¿Ö¾?ìiÿþÿ|‹éëÞ”vî®Ð°ƒÕÂ÷æw¯MõœÃÉ»þ?dwªA¶´´íO_Œ?ò+äõ)ÚÖþë†6½¶íù/t˜)0ÉP)!Ý]¦xh0‡"!‚ ÈDZnê §UVþŸ™ýjfÒúáxˆŸ*¶) ˆpi~¾ö˜?ÿ¨;È£Âÿ»¥¿^¤Gø¿ý=A ƒ†C¦IÆ´"! žv"½íÅ!§š~•§¯~ÚÞ‚2àœeÀD†Lîž( Ú°œkþûMfƒy¾G¥âaÆ­ÿ¬}8_éߦÙéÞ‘<º$?&šh5Òi„m„»[}·ùr-‰8oˆˆƒ ‘aLë¦-¤âaßÚ_k´·êþèŽÚ(þý1®¾ºô×ûn‚ dvEtã¦( ؃µíWLxˆ‹‡o¦Ô0»N©«ÕŸ¾ö©Ó6/¿ß¯ÕÞ/ÓòQÜDDCè™ó8M_i§§ æÊ¸Š²Xƒ_m„šv)¾7[Õ/üõ´wúí¯ÿÕ§Òâ–""'‘L‰ˆ†a63µ•B"ÊãÃMlW¼VÇi?O­¿þoSÅœôK?Έˆˆ†PçôµB„D0B!‚gu ¨QTðÂëWÿÒúþ¾£I/p˜ÄFK6êô""!…3©=1q¦œ4˜«]}tZ›¿Ùƈãø!©!’‹B,†mRi±ö­¯kȺúëA¢; ×JЈˆeðLî·i¨¨ ƒbÈ?µÒõö]| é’DÿÊAMUÅÚ§i«û^»ªOH; %;(!à ™;´ÓcNÒ¾®ûTžOùÚÜÅtC³[«»ˆlPO}}O5ê»k¶"21àÊ&"½¤Ú؆›tÞµ™) ˜0Â2û 31R€Ÿ¨‡zõC šgz":á¢tdr§E‹~Ñ"Ö•t È¡zNÉ¡ÚGiHˆA’uU‚  fŒÁŸ>ô†åÃßü'aDDEE4BÂaÕF~´j÷ÎÕG®¡Âlz#4õLT dq ‘™•fm­{‡Û÷³!sapN‰Ûyv‘!Ý}„á„,Œ¿ݲI7×DÜ3!AˆÃ VÒwV JÓÔ Á3A“£Y‘\*¯«¦e™+ëíÚ‚ ׇ'—ÜõÖ“´Ò'mÑ8¦ƒA‚p<)±œùNûýûIµÑ Q¶I§TÕ )|k]­ïÒMºA–8Hž4MéöºqpÂxŒ2õÿr¯Nà {@Ì \g…$ƒ¼›ßصwÿKÿÒmÛ 4‰;½8†aaþÖ‰½D.ÈÝk„!NYÿ¥‡ ' ”~½ /T¾¿­]Ù,½ ›dXa“¡vôôâ@¤¸Ìǘf«ÇKh]¦“ „À]ÍŒôT%Qà h®R)¨÷kÕ´µ3ÛN¬Ž“ÿUêÞŸª¶ŸI·Dá»Úi Ðq y˜¥#Öšp¾ÓMIÞ]ÓµA„¬@„ ÐíiÝI‡øú_X¼9N·ýõzÿdcÒm‚d‡ Ói§°ž˜ eÑÃ>ÊFtž"W‰~ÛééÑ(a½§AÅ„ã0F´qŸ¿2ïr–7ýz’ìL;ªÝXñõû­wÕé­ö†GOMU¢P‰âÓ „áBˈLKÒþ«ûÓlŽÓ¢ã§ 3äyߨ?éïè'Ixõ´–—ëuë¼jß„Ú[íI^ŸAÑ7øN/Êq„â'¦BË_o®íéé÷„¡°ÉbD‡wƒA’.)€pƒ32¬ÿß;Mù§ü·(m5'V)¿÷û®¿ë×þïéêõÒíÉÝþ-4 Ž3„xÍ™ò)a,}i¤Â6$Š3ÓïïL Ý¿»´Â ff`ˆgë¹TAÓ3ÛVÖÒÔs=/÷¤ÿþ¿ÿ«ý~ö—kõu¸}·¦z}ÚA„ +ßâ ß½ÿûnÈ®ØM4צšÂý»¦Ã C ÿ þÓ×ý‚÷_Øäêÿúúða®ŸõöF:é’¶‰<0Ÿm4ÓýI¿×t}.Fê%w¦šdǰ‘8iÚæ±KŠ`ŒÌ§dðW×{cb›w’«M6gòÊkýWßÿ_¡Úuýé‚(¾ý= ©ôÁ8wDï&;kùqA½¿Ýo í:Ýë褞O"^î ðÂ`ƒ%ÆGÓ$2!¾ÈX°˜¤ÛcŠ®ÕdB ÜÍzûßàŽ?÷÷÷×ÿˆë^‚СïþîÈÇÓiØ/Íí:áþ—Òãê»Ûë­¿hNû ôâÂhZ œ ÌÁ|¸'¡eúý„4ÕXaoLRr筄Óýÿù‹ÿÿü1õßO_N¶“¹²ÿúÎ@ßïÞ½-~õß¿ÖÖ¯ì&‘(nˆÇjé„,! Ê,¼¾" Á †NÒâ›_ö×ýÒÝo9ûC"+ÿd­.úï^¬/è¼'§­Wàý~ƉG¿_µu¯TÝjé÷ÚA6èrîÁ'ÃA¬C<)ôŸŒºD‰î᫽Úb‚„µa$ÖÖþÿ_éÿ®…ÿ]?ñÿµ®¼'î©Û¿kÒ ôE³Žõ¥v¯ÆÑ/¯¾—²N·§…'m‘aº' aØ h`Í_â" !·dXµH4cL'ÚJéw¯š&«ûý¿ÿñïÖƒz¦×K_ßü$#þß®¿ÿéÿ†»·t Û#Æ“¢QN›¸†2"8õÅŸPš ;í0“·b“´½]õµÿÒK¯ÿ¯×¸[Ó¼D>ÿé/ÿøØ™Å}/×ßJ ¬?[öº´’¶ôöƒB8¹Ü§ÄDDDA”8NÓVÆŠMXa^—zó;^ëÙvÿû鎿µÕSa%½õüÑ׿&Ž?ëv±¬q]uí¯ONí2g„Hwh<ØÂ ÐXú¡Á ¦“tÐlußaU†ÿÿ½/ÎÉ$þâ.È®IÂb“_iú,xOûzÿAWߺÿÿí×öõÉ^ƒÚ$?Âa6µHDX'jöÂaÅئÂVž½½ûgÖ´»¿ê"&fÔ]1Ú_ôí.éüL⪩¿¿â/Òé´› ŽÚ7¼›´Á‘ílj"G)Á4ªö®˜ââkéßÿ¯xƒ*¢¸ˆ?†ìPNõÖÌý}÷ù-r2ÿ“ÖßÿÂ~ðéhžEªƒ  ÂmâÖ0–Úëa?3¿ˆˆÐdW&öš††4ÿjéþªÕWHððµÿJ»õ¥­ö—é_a„""!¦FöBÓM 8¨¦-6Òm,t„D0ƒUýMаŸ·û¶hŸP}}~OO«k¿ïýS‰d$`ÂÁk¾Ò´ñlw©ªË}^"$hŒ UW â!„âÕ¯OsEaÿëÿßÿûïéÕlDDFLtíStÅ þÒQkØM«a=« -…ý>ô×ÿb½úücèD `ƒ'‡ÀƒMXñ™'ÔDú#²í6Ü7ØÓa…¾&zZOY§ëù¿ä’ûñ)Ð0š&ÓºN„DDY' ªiÅEm¬5µl-­¥]ýrcþÖŠéõÄDÈI%ÔP‰…¦º¦¢Riûëÿ¿×&º@a5ÒÇ ½B &qÓA馘¶Òú]³Eûæ\‚ ‚L~„DA„A…&áBiЦ£Ö×I×ïREädOÚe—ó:Ü&›`°×¯ÏÙz&÷±wÌ€ Áj"ÓUPÓb¢›KVÕ¿÷¢8&I1ñ 5µÆN**õîZÕý‚è0B!… ¤m1Z¨ôZÈŸ Y,%³²æ¢2à ÂjÚ *ø™,¢Üˆ²Aîé’¢A…ŠÄDCL#»qœ2Â’?LzCáÝ5‡â1a0ƒ†ƒ û6×ÓÔÍw‡pÓ ¥‹OÂaƒ31“£Ë¤È+;.këÈÖDï ÑíŽÂ ØÁ²8Í ÊD²oÓÿü®Z3„$#²WÛ '@ÚXâÁ4 "-èPåY?6Ë´¿;32½«\ì°ö™…:§Þ´›v'm»uL&ˆa|‹ŒáÔAh[Xa¤îÇ3Ä`‰ÿwA¥MWÿü”ZI¶¤Qï6SDÇqhXL Ïè!A’NPåHÑv— ÞœXRœBCü8u0Ê×Ú0/­ãû$øA·§Dâ6ȃ¶-5iPgˆ! ¤,^ÎÊÐxAùxÛÂa¹.);:¯öñýõú|ktôºØA‘Å‘`„'mƒ¶Jd⃋EÆP!©éØŽ»"ÃD‡ÉŽ×†0‡ï_ÿÇWõOÛúÝSm0N–A·§Dïa8°™àÀAŸ3fK’zîW{×@éh¸îš’ƒ—#KÚ; ƒ•ñþ¿_ßû"O¿]UÓuÖé6ȱ“§h8ÂaS™r<Õ}wV.ºÁ"NÒ{‹š `™òñÜíðAŸ Whž~K §úþ=ÿú®þõ´Ý6ȰÑ<¶‰ÆÐv†g†x‹‘ z®ÞÐZÿÕôM¢PÙ(M_Ä4 ê)Bä|ˆÌŸÕu;}9 ArÍiyχ¯ÿµ¯úw°µò,%º÷i÷‘ãI·Dí´ÅèXOÐKc^Ÿá× t§«Údot¦ƒ828Á:ŒÁÉÇ¿ü˜û?¯×ÿÿÃÿ_¯ì¿Óom>Û$ýØ&Þä‡}šÅ.)‚í§nôŦÚJ¿»­¯_ÿç;8_èŠ:­}ëô¿Zî¿vLäQÜœ?×íP*ñNAwW§û¤ÚÒwÝ/Aªß­þ;"äá"C»ì&´AŽ<) “÷ÚkdGÓM^ƒb“ÕoÕÿÿÉ×úAþù}¼"+ýé¯ô/õÿ~tŸýK°m“|‘4¾þøÛUúî÷ëIÚaPm¶i¦ÄZaˆ~#r„ÄD0B Âi§Ý0ƒ0ƒL$Çi]÷í®¶¶ï^—ðO\_ÿß}&¸tõÓoÚýáéºodWÆñýÔz ÕpE¸®Ÿ¤‘Ý‚‘_'n]¦BE4ÓBÁ?ÄDG`˜^·1A0©ªö_[í¿^ÿÿú^ïrâH@×­ˆ5M´õ·îÍÿµ©ˆþ7ºb?ëô®Ÿ„ßvLôNÚ$ì5¦ž§…!Æ´­0„ mIÃB &ƃMŠ´ž¿_¥ÿéþîµ¥²:ø†¬m…ý·NÕ®—®HšþÕ_ÿ«¯JÕÿzÉм§øL"dM Šˆˆ™¶ƒOý´š|pªzÚ_ifŸkÿüšÏíWþ#K žS‡ $ûIý­ëª‘_%®F8Q¿ÿÿõýü”$›JÞž]ØZH4Ð`†f)™˜"PˆˆIÚi­¦˜ ƒ ÅÚØOV×ÿÿÿ‰‡#ˆmwõ« 4ÆA°Âà þí;šoÕP²+ÑR¿íÿƒ Åxÿ÷«a«0^QqUM 5  °¾â˜‡ÃUtµïûó›T‚Áô$5̎ɺ‹b˜º«_靈Oþ¼íýŠþ·Ðþ¡§¯oOÄ-è:'NÓ„"Ld‰¦D=E ïþ¯MÌóÉuÞ¼Î-dä ÄDÌÙì&ÝÂiÓOa}µÜÏj’úëû¿ïãCä.›ª»ßtO(•¶Ñ'b"!šaIŽ#µM&Åa0š®ØT}W¦«ú¸ˆƒ;NšoÓOjºï­÷ú_ÿÕÿ÷ü„*íþº¶GxA±Ddà  ­ƒA„A§Þ“¾¾ÿþ"4®šê)6ÂÓZ~ßð¿óÉ(8ÿKVÿ“ O«¤õ¯â"&L¿ý6°AÇÖµÕ{3ß3JÓ†ŸtSð v×ÐM¯úî§›êH2ZÿðÇ1ý­?Õˆƒ)Á@ÊpNÐa>ía×úôÔDÒa5†B"$4]´ê†›Â Ž c ¶¶ÐÝÿ¬Þxhž~DsÏ©’²ìDDFEâ"h¶Ȱö¢´Ø¦)Ó[Jõì:O|]½Ž7ТSˆ†P@ƒ ƒTÕ´ÔKpa']uß_ýYÙ™ŠXaSˆˆƒ)X ÓL&šŠŠ µ·ýsOÒ³°¬:a¼íT†ÔDD a4ÓH4á„­6Õµ×ïs" õcˆOwØ»[v×ÊVU§4·&aèDC,tÈŽ«¶(&qõu2§yÙ^ØB$bT&E´Øi4õÖù1Ø"$Be4 _’¤ÑÝŠ ! œ×N¾ºXBÓLˆUÄ|Žƒþ¡…ˆˆˆ²\ŽÎgF¥'ÿNº„@Š„Hü…™ 9œÃ”Îb½Ðsµ1‘´GB'c‚áD:rr8Èm5ö¥ü0µƒ´DI²2ãý'|!vžœY˜C„x =E í&‰|7ðÊÆ×ü¥}¶‰é;»M™.ε{éd¹ƒ0›#f2΄8OOÔ6æV+#º62åÁO‘]¢pß{ Ä0”ä}šïÝtÝd½”‚&ƒAè‡Éƒ:¯´DoáÓïãl'IÜ6ÂÓ†œ0ƒ3Ä`0l Ìe;3ÍkõWÝýôÓ •ÍBüCþ·ºu÷^­¥{ÁNd­Ú{§k 0ƒ< ‚ú×ë]è¼hÑ(§†šÿöv*c"i׿¿MÉå¶ÓH“¸ëNÓ3c630Úí_÷Ü+Iºmö Ñ'mf±›Â.D3ÕÖ²•´a]X2 ÿóA[#‰ýõõí¤ïH&Ã îš $NÛ}§ Vgÿûï¿iXa|–h60Ÿˆhfƒ5Fzj·«’¯O>Âö›ÿôõ½o#u»TìŽÈá¢ywDDz:ÞÿúºÝ{µõÿ¿aBg`ˆXfGK]þðˆïØO¯õ§þó15³Çß[MiWÓO¶=Á¾øÿ­~¯Ý[‡dW­Æ¦2pDbûÝ pý•§ßî‰Z¸ÿïòá=.%êš‹ïN•ý;K®½×Wí/úv—Wvƒrw¶åÇ4 â@Èuµö úDŸ¥_ù¼R¿úþ¿ã·J:èó#ûõÿ½í×ka þEGÿ†?ú÷ÝŠpÉL»h˜í[´¬0hÌÌámJ¨¤ûUà™ /ÿªÑ!ÿ}Wÿ÷^Ú¡G ÿë" ­?ZÒi~’lÀÉF,È]¯þé:W#{´­¤$ö­;M A¡‚"ùË©ëî4û÷­RúÒüU0Okä´º×סÿÿEjŸ ÿû÷M âEA˲ÉÇýÿÿ>mÚAÙ:ÃDïiê¨4 øA$wê¢Óÿkú~þºÐfCäê¶¾‰GÿöÁøÞv·ñ¦‰ÞÂqa0˜AæBËÎ/D­_õüˆ> þ›IÒú}¶E‡'–äíªÿ` d-¤þ!ÄÂm¥Úv—·þ©*N1^ÆOh/ÿöÈH7õÈ1É'ò^úÿÛ ŽœmÇß§è.¿ÿŽ˜¥XïúÒÚz·WD¢‰ÛjÝÙVG ù˜¿oiÅ<\l0•…´¹Ÿý™ïô:_ÿ﾿¯Û÷þºA°É[„ñ×ú\ç¯þ½ÿï_Ý?²Nªè:¶í2T"Ñ;ºq{„ód3ãÿ WLTCŽÒºµ«3ÿ¯ÿðG‡¿Í7g]}wõ×÷¿Ýl?ºZ÷¯ÿì…mÿõëÛô.©u†* ŸnHÞ)ö˜Aœr.fÏÄÏa4È·™Âiê›[ 6»®×¯ïW©ó¿Uï×Wþɾkúm^FëãûïÝoù=aÿ×Þ?G ¶¿½>þáÙôIÛïq ðÍÔDDDXLŠ:j˜¨âšc^îÕV×[úmÕ®û§^Ãîþ‡ÜNAÅÿæ˜>“úÿÇýµÕÿ»}ò^N7„H)Ã3?ƒA…3„Ó´ƒ¥°M;·J×í/_¡þ½ÿõ]âë2]Zqà§«®gö ë&?ÿê°´¿[¯´ ôþûºM†AÇý Â ñys5,DD4TÕ¸A±i„Ócb5µ°½¶¿ê÷ôÝ.µÇþAðȃڇ¼5ÓíßõüçòÌtE~ˆ¯ÿú¦?_õý¶F=‘mº%nšM4C'P"%<ÂIä ëöÅCU{kº^¿þ‰çpˆ£úô± Ó[a0› /­4ž›õõ½ô ýµö½ÁK¦šÃÓ‡¤Núj#ˆˆ‹zŠC; -­Öêþ’^¨|䜬_â  Åb-†Æœ5Mô¯×ý³E¥^—ÿKÿ±ÿô4ÿ»I6ïh›µ¡®Î:™Â´Ãl2:IB÷]ý}PŽ"|Vílm…m&Ó´¿NýV«ýs¢;ÿæ¯ÿÿÝwy:“‰7›QÂn:v“b(!A7Iµu8é}/ÿ2)Xˆ‹$駦˜¦8¸ÓVJ×ý?ºEŽÿ¸^o×}Ûÿ ¶µ{Óö“ÚB"Hƒ i6;I´“µºµÕ³Eà‚D„ÚaB„ÓŽ*!öµÕ&õô¿ÿPˆó_ÒþÞ—úWŒMhÁ„ÖÓÄ8au´°¿Xˆa@Âv®Ú¨†Ä8Û¥ný-ußµ…ÿÛ_®¿ÿõ¦ƒA¦Þ)ˆqØ]G h0©ö Œ*liݯ˜z«Ö·ýuá[¯ú×Ú &‘cWLPL ñ *dX&öDˆv®ð˜Mˆq§ûj·þ¿¬•õÿøü0„i‚ )1ÂdXTÒiã-dã ÂaWWwêžÚN¿·ÿ¤ñ_Këãˆà ·ÄD3ƒ(pšÝƒ¦¬ i„Ø0J!ªk¤ºô¯ûú%zÎÜd(üG2FB߈ˆˆ°BÓÅÛáMµM³é¯×Ð]úiV"ºˆ»"@TLˆ=âƒMv¡½_õÿÚK×A´"%&Áa2 é… ÂúmtýkÇA´žW$ëT„DD0švÞÞÂL5UÓÕÝLµ¦aæI ÔDO³ŽLˆþ˜â§a6þhˆhìm÷wö4"$è_a8A¦Å±~éݸ0«O;*Þ…¤ƒ2Nnß°µÍ™%b5öãâ"!œpL®>Òn˜×ºGVˆˆ2¸A­q®Ì‹ü·š#ë# è"!­ô)ÑZ74ýt.» ©)q˜ 2æšk¹Ø„¨<ìC§Õq®×¸‹D;ó&A\m¿åÇl&VHo W» ´NÚ´Ó~gr ™ã úû¶2ùß|‡à~åpD2WÝË».í:všˆc{dq”‚”ñýéÝ ’Â2WéÈ!r[é¤ßïôÈ$Y:¡(m½|XAž  ø¥Æm— –š–e&è•ÓM•!g†vg…6f—©ÝŽºZõä¡~“l‹šeÞjƒ>" á"ægžãJ¼ æz¸.ݧh0@È‘/yÙ1û`«¾–.ýl'ÝÜ0R7¢xÝvIØN"Âa$¬Ó:kÿMò݇ôžäá´é„"rOVò# Çá{¾¿ïß§¨A÷ ŽÜ·§“wqh3Á„Cøeåv¾­*´ý+r]H=4‰;A„ ͘5òµ>Ÿá}Õ/û#¥®í¿§I°ôÈñ¤=§z á ÂG#fS‘N½}úk2_ÿïTÚ%Âa D?‘²õî_»õô#ýkë~¿ŠiÒ¶A"ÈDáÛ„ã‹DžDhEAÓýqÿ®·Wªzm9þÂqpÏ™â?‘MíÑ,üL8ýÛµÿi}-®ýÂé„ÚN6JdîìˆâÓˆj4 yvupÞ×ï}„¶«~‰EmÚNí4@ÊA£5+÷w¿¯Vš¯ëÿõÄŽàÁZ®ú¾®ž’·`ƒ!èœ?Nî!„xL†ˆëÌ…—U® ½×»²^Jÿ¦3áO™¶«ínýþç{tg¥ß‚ü¡¿TûÓûÈß²1Ó¤ìˆí¿ 81ƒ$æ\øfe.k×|ø#z¯¾ÉBznJíí:a4Ó Ìò]/ŽëûkOz®ŸQÇþ¿¿ÿ¾šû¯µÓ]6ÂtË$•)Á¨M °ž3f|°_ ú"ÒØÕ­q­é¶ƒ»Hž9!ÚÆ¶h!šzïöž¯_ÿõù½ôO¿"8_ÕÇ_i´=½7_µR;h•¶ ¯ÓBÂ]êºìB$q+J÷·t žNïº`ƒ@ä‚9“‚cF§Â 'Åÿë¢Ç™þí~ºKòcÉUÿýc§ÞתÝ÷®­°Á"xÛa"nÝFÿ]Ix%Á?ÿÿÿ¦Ã$ú¶áÝ Â9Hsý=ºh&œqV«uúÿ×§{®úÿÿ¬~¾¿ZN¯d±´m´J:ûפ»Bˆã¥_Õû{é~®»h›êÂn› ñŸDu»A‘bïÚm;û_õ÷æš-Þ¿®òuz­/¾÷cÿðßôý;#SÞÅZÿ¾xDqÿúõcÚµ¡§‘å Û$r îNÞ» æœyЉ¢NÓM?TÐL&Öœ}éûj“Ýfwëÿ‚"ÕºëÿýàÔ µý-Ó,{°Ò× Vgþ‚ûÿ÷¯=SkIÞ ÒÃÉÅ{è Ð0ƒ*(Gˆˆˆ’h4ÕßA6‚ 'Ó[U‡«kÿÿü_Õ}c)ðø‚ýþ5í1AƒbÚ×Ð_ïµ]ø÷ï§ùÒ¹°èœ>“‹0B  ƒf¤~)Јƒ¦Þ½ÂaÅ&œTRkëgïÿÿ¯D¯ôþ’×ýnM´¶ZvÕ„µlðŸ¯úÅ" ý*Zÿõºª~ŸaIÛmmP0BÎDDèƒLÂjD´·M ÓOÝuÑc³?ÿýkä‡(›ð¿ÿæB¸Hâ!§dAÖÅX íSþ´½Ñ,è•ûÿ­m¯]B 'dw—P˜P¢"" Ðj˜MT Ö˜L ÓcNØ« ÿf·¥æõ8¾‡ôJÿ×ý ›ÄC &š‹bXí?EŽÖÿªô¯–ç~¿Ó¡éýiwOá‘ÃD‡¢pä‡â""#,¸A¯´ÚA„ét÷ úÿzþsKÿÿÄD0ša1Úþ¿õOB úÿ½ÓQ¯^ôè t‰ßÊu]_´ƒ4ÂqJ›i骺ûš+ø¯êÿT¼C%‰áñV†k[=$ž—»ÿȃ¯ýEì/ëO¾ßL"" `š Âí;iÅÚlUÖ¶úÿ¿þ."A’Âc¦šB˜¾Á7_ÌåoþÎ/“«þü}›Âúõ¯øˆ‰ešØN®Åñ§m„“JÖ×¾©ýDDXAª·‹b›Õ?×õÿûþãúÌÚßúb""´)Ó8÷d ö°ƒ Ç ,LìµínÔÈ[ñ *Ðjž¢O ßÚZþi÷ïÉŽä «_ÿæÂFÿIˆˆˆ3“àš >ÓÅ…A„Ý%´Õq`”"ȱj!é‚›¯ªvŸŸým&èGªDoþ¿¯LDD0„ žiˆh\Rl_â4ÊdvMÓݦØJ;Û[_óþÿŠßÿV¶¡¡ÉÔ#ÂÇXtÝÂ,ƒ%ïbš „Ø¤ØõÛ]¶ÍiU~Â’ÔS"""fƒÓ¯¡BCœp[UvÒmÓNÁ{Âþê4•àsR˰Xaxˆˆ`ƒ ¦˜NÒh[Ú_¯ßÂKA…¡ú´îé ØÓ[ Úûfz.¢.дÎÇ?Úgó†“ Ä0¶ÃOX2:‚ / þdŽ¦Ðˆ‰óam± 'ÃJ$¸‡Ý:neB´ˆ‹ ‘ûn;ƒ¦·}}ñ a(p˜AÚ»±M”TûN"" Ê úó³]ÉÚÆæÂT;ÈÉöõôd/ Ó!"\!Œ¬+_ÐAÑ9òRJõIí$Ný„4IÍýfEoéóPÎ Â#A³ú¿T-3‹ž×÷®¾…¦F Ã({¯é­=å-³µOø´F8`ƒôDŒ2YÙ6™ÎfÄ=˜Ã!(·iµºw«“¦žƒBÂp ù˜*Í ÖÐdíw«IÛÓ S䵄 ·ÃÁNŽ3LSü(PƒHråÁmÔ0¾º~Ù'î“¢qDíè“·¼ ÐÕ ƒ¿d±º&îô!2 ½M7þ#þ¾´+Õî•è'tOd¨N7ˆM Ði¦°ßµýôá» ƒr8èî, ÏŒŽGÆNx¾é$Mù {Æà—v®—ý6ÈÇïH&ÁôJm"C¶=ƒÿo_ù1÷öÉ=xMÚ ¶Ðqa0ˆZ’­«zI„6ôúíŽê½_^š÷VäŸÓ†JìAßB=þI‹—5_aSû]ÞúNÈà‹Núv5ŒàÈã*Ì¡¨®»´¢«™/þ“ïõ¡uÿautÛUo°Þ´šÂ, fša;ÅZýúûû¦›ÛmŠ&ôî,  ùÆO#£:ÿßí²oÓ £ÿäv ÅuãâöÁzñ×ßK‘º¦¯§ Álh—3¥ãGÿþ¿ÿö)¸N‰Û{L&…‚`„Báˆ'°~/Þ»_á ´jýî¿¥þ†ÛZþ^tû»‹L&?Ý%\>¿æž®–üY:DqÿÍ_÷Òa¿ÿé´Ã†M .Nz´!`•CÑÿïÿ±þÁ´·×]6ÈîÈî‰ãDžÈþ‰;¿¾/ºIvÔ%êÚ®½Ø"ÿÂ|"‡ôë__Dè‹÷ÿß~Fí'“½¯ëj4×ô¿d /ÿ¹ a…ýuv¦þ­§ ØdXmì0šý&ˆ1¯DÓi§ØVÂzúçüÓý/LŽuû'W䜨 tÁò¿‚WêÕî› ŽÜž=¦‘8è›´íëWZû¯kÿÒ´šÝ+§~]Ø+üEˆy‘ÌÜm ±­êalTA¦°ÕµoóO×ÿoÿ„}wØû_þ´»éëީàžMßú[÷Õþ‰_­¿üjëûÿ÷aAÚ‘ßðƒÂa†p½_ö¢Ó ǶªÚþ«¯¥ý¯wú&9毯ÿÿÿ¯û÷}Ò$økô«æÚ_¬¡ÝWýqkë[oþ›þNî„ÈÁKŒ§ž³²h4ÂpÂdH$=4Úcb•† „ÛIÒÛ\ÎþaÙŸÿô öº#}{þµ¡±þ»Õ¿t•ÐèRvÒ¶Óþº¼(<™Ž÷¯~úÿ§õ_ôØdæJ¦\`©s:úˆˆˆƒ Ê„ÓÓM âq;Õ´›I{Ü/ß­_è'ýßÑÂ; ÿé6)µ[KõÿÁÿuþAÿßú_ÿßTØdÈh´úq EDDHlA„v•éŠ8`”vœlj÷ê®ÚU ÿÿÿøöÒ`ù¢ßɸXiIÆšk­½&Ë™¯ÿëØ/úöÓÿÿ¯^J%ai¦‘!݄ԧ"ã$b" Ñi‘4Õ±MÓª¾Òµ[^ëÿþHKëý÷îd/ø‹ Òa¤,&Å­¥téúàŠz^¼™ ÿzúÿýÂûíSWÓT°¨XA¢ØÀA„Pa Óí4›p¦VÒKOß¿7©Åú%ŸD¡m¤Þߪ^"{:MEÄ6Õµµý´ÿÿtŽ{ÿÿþü.?þ“r;rxäâÚxˆƒ&œ Î@  |PB!¦Ø/ö•Ö¿¯½uh'ã ÷[þ"&¶aƒ¸¨Ø×í'ÿó;3Wú®È¯ÿú] ªöí/§ô‘¢vÚÙ*lRPÁjë§k¯æ‰/¯VŒð}Ÿÿeº *a Á0›¥ßÚ¶_þ«Î}j¡ÿ]zÿvzvM”©ˆ4økcаJ.6Ó[°ž¾•úƒê®úb"Lã„"Úc „Âa[­mVÒ÷_ßD³Âî¶í(¿Â(}=Z»â Ó &D|æ)¶¢,+i6©­¯ßvÝ×zb" ¡Á2‡#‰jІƒcb˜Âm¯u÷÷õ^¯|ìF¿Õ᱘!h0ƒ û¶*!ªm„ö­êëÖüDDD0A¯Úz¶(&é8ÿT’ÿ¯Ž«¯÷¡ 3qG ‘]«±iÄ0žÚ§jÿâ" Ê8GÌ0˜MmZm8O ªáO½u4ÿÙÔ‘Ž¿ÿˆˆˆƒ(@A„È®HwÒuƒ[ ~""!‚0¶¶­¤Â`„Wks×ÿzôGß¼DDE‚d[OÕÅ1AS!³ÄDDi¦·hD%‹×¿jŸÐ/ÿñ5jšéÏKíFši°Áa­«÷ÿ}jkÏoAj§&3×ý¥Ýÿµ[®>¿¼þí6‚zí4‰=;g‘¥µ×=þ!ähÿ_¡¡pêºi÷h0I6N6špì&ƒ iø¸A„MŠcŠ´¬+_꾺ô3¦|ÛÙ0þÃ]¿úc¦—kî…í¯þýøM"Wn» .Ú¶–«ë×õÿñ¸^¯ý^E“l'Žï<¹í;ÛMSÄ>×»ôÝæiÛÿüT”pWúëøcÇM~ }/ÿ­…VÈîªÆƒ ö¿æŸ¿r_Õ.Çû¯UÓTîð›’´áÄ2‘eƒ,¢P ™ÓM´h0š¶[ôµû]Îm®hº¤¨Eî¿ëñÖÁþÂuöÒ^§ö–±L_}®æ~º$?þNÊ2n•{v ÝHÝ%»»²<¢PûA•a‚‚Ê´""" Âé¦qiØIŽÓboNÖÂn¼ŒŠƒÒë~h"(ÿþÿÿúMRéÁ‚f´ÔC ±3°«aoéÌýÿYí¯ÿÇÿCßïWM†J”íÍŒœdä"ËÀ©ßÙ>ã¦!ñPÂØa«iZÚ ÍýßA>?×·ÿþü0ŸšB¢"!„ÓiÓ›jØOõïÿ«¢;}kýÿÿ¤õ#¶‰ÞÓð˜LEDDöMS ªi¨ªcéd<áoµ_?¯__‚"kVÿ_m-cìØ˜ˆdøö¦“b˜»IµMÒÛ?êÓëýÇë_ÿþ¿éÒm‘!¢pý¦W”DDƒD|4ȶ¡«d;Ú86ßÿkúÿõ¸#çù+õöýÿÿ¯÷ê1¬DDD ah0¿j±ajAù¯™),D«ƒ%k}Újm¤Ÿ«k¤¿çÉŠÿ_í!Á({AœpšÃ ƒõíŒ&£ˆ‰H™N3L‹ „Âjâ‚ 6Ò‹×öÏÇ=>¾¿úcˆD0ƒ5·VÔ0ƒ2Œ„Â4Ób­ˆ†[Tûf‹ÿ®O`e2 „""#Û»øˆ† iäAÚ Åm¥w„ýþï;&0ÒH–IðeZùØT"  –&šukŒ*°Ò´¯÷qø“d« qx&"",¨(pœ0®a8á…t¾Õ³ó¦•SO؈‰Bi§°ÔT4“[¯;̸ˆˆ2¶¦¦ÁÌ0(ƒ)qmôáábºêŸd,bÛÜ—F@ƒ#çLT'”Wª.ÙÝci¿õBË„ ŒœÊyV•„A§ «}çe&¿w î‚’Ýza0ƒ<636lÏ¥Ò§i êfÇ^ÌÆkÈëÕ¦=­¦œ4Âè\£ uÉŽ ó²cßIp0`R‘ ðÂGmÂ`Ó&z7' ‡ƒZˆY’_Åÿ¤Û¿u¢ON-x`ƒ!°´µ@Û¦d0ÇëKJÙ{ißh2`ÌÂ!‘4vÞ¿»¶v”7ƒ¢wl'Âh2Ú¾ÛÉO×úv"Ü28"½¶ÛI¡ &).)ƒ„¡ 'îº}èýÓlޝ“†êƒCD/‘È [Ó¹Ù2þÒÒºk¦]‘Ûi’¡;qiü0š¿úƒþúN¾ÓáÙv¡U4Éq‘óB$¾­6ŸÇµý]S× ÷JÃ"¹v‰Ûjª]¹pÙn›\̈¥ÿå/oÿªzØN‰^NÚ´šL ÈB'KßBd}Þ¿ÿï¿úzh:MîÖé4#é!™Œ‚ú}û_Ý×÷MÓi\•¦ ‡,vša3„pŒý®_ÿú¯úû¦ŸÝé_nïMB ”„A”>µlÈ]}Gû…ÿôÒº:' 4í4/܈ÖÍIÌ…†t-ä#…ÿÿ¡ýëµÿ¯öÓ®‰CTÓBAŸ3LÿµüAkWJ÷éµunNÚ%ßì Ï „j»÷œù1?ÿÿÿýj›Ý8[ùcÒ§’Œ”Spš~wu'ÿ#p¿>ýC_þÞ'«pï^©¨@ÂF  ýL¿ßúÿªþÕñ߆6*êõ´ ›—ÖG€®Óò(Gˆá 994¿a_íq¥ÒVÞ¿¤ï¿òpÛTô ÎÁž3lùš°¿‡{U³E‚*?}|^ÿÿô»ÕÖŸÿ¶˜Hž0òvþÓˆaB á D$4ÿÿ¢x¿ÿþB´Õ{ù¯ÒvE†ˆÇ„JÓ»BÂ!f˜gW¯ÿjÚw_ÿþqa?þ›OVب«]öÿ둺_ÝõN-;3à u³EÞ—ýÈq×ßÇ_ýï´ðƒÓa‚“Š%í0œ8†2 ‰Ùþñ[`¶ ëÿíš/ÖÐÿä…ÄËüiû­¸iÛ÷Ȱ䢉Å×N!…í]>´¿ù0÷^ߥ×ÿÝjõétØpî‰ÞûL Î ƒÍŒæGÊ…û„ÅZJ©ßx_þqõý4Ò Á4ÿ¥mþ†½_h: ðÛ¢ò)“Æêd,¶.Â]ݯÚWuav!W_¶ oZßé{±N‰[ •$í6/N,§C"ƒ_ki¦)L «kúëªûf‹Òì;éL~‡¹q7_÷K}ÚÝ‘¢7ŽÛªéÿ¹žëIàdAÉIF¿ô˜ÿÿIýöJ é]Hîm†Þ÷ Ðfc(ͰŸ´í4×hZi±I¦ÅjÝké´úáú’þýþºû’µm~ ÓîÒ ÂlCU´ôÿû>uOÿúÒúOí+C¯®´lŠý¦‚¦AœÑäSËøˆˆa²#í]0žÅ0ÂÝ«iu§y·Nýk%}}ÿÿí-i>°&wÂl[i6ª[gßÿúïÿã_òÒþýü ûµ'mS[Ðq%99ˆˆe8NÂݪb‚a4ãÞÂwÛ׫z ù*’êÿ®‡RwÞ¼DDDì„[qÅıßrÇ«™÷ÿô‰g_ÿÿØãë_n¯t·“Š%NÛºvá1L.Óa5LZö~¿þ°FhŽûÿÿÃã«ß g²#Æ{„®›[ Õ¯ë^ÿÿ×ýÇÿßéu¤Û#¶ÉL»Ðb a4á­ä#ÚëutüÝ_÷ ¿ÿþ›ÿüDE“tÐv []}t—_t¿ÿ¿ÿÿÕÿKúv°òVôNâ""ÂhC „Ì8NíEXWJíoK3º¯_þJ¨|" þ¿Hpš SLV‹Tô¿ÿýëôgr4ŸÒÿn²8”þ·WþI±ÃLCb¯ ÷Úúzºû{äø7œH—ñ 8é„Ðb˜†`…a5Û_ó>×üºä‰ÿõcQØV»úÕþí4ÓüC ±°a%µ«=ëöN¿×aM§LCM;W­µý|;æÿ×þé|cý†¾«i”ûA…²qtƃbj…ï¼Îðük¯â Á2PN/ !¦ÅÚÜ5mmVüÓÿÛÿc_ûØëõQv.-Ä4î!ª¶^ý*Ðd!ûlPMа”_»au]Ìý¤K?_ÿÇN"!„&S‚ Šä‡Þè4ض('i\ÎÂkÚâ!„ ªiÚ¶˜¨a (a+»[^¾ž¿’×Jþ’ ‹ ØÕ¶“Ž8†Ÿ â8¤pÈgú´×ºÝ{®“†utìê¶¡x0P!aWIEß>ïýõcÿëZÖž¿Úm…/$ÿ´ÂÂ|‹‘ 3þµÿ¯_ý÷é:» Ë„“‡.*4Ó aQ £§ ƒ½¦Vï]ÇÿuþÛV? ¾¯ý~õ²CDt§i¡ ÂgA˜Á‡kÐÿ×ÿÓ}ÛñI:N‰C’‰»l&È^ „}…IÃè›×~Íð¼âÿÑýaøJŸÿ¥´ÔŽ% ‘‰Ûm8»ì&„C†]³kÌŠëÿƇ÷°m,-÷§H:AÞNÿvpaê̹ªö¾ûõK×ûÐ'ÿn—Ö¼cëð»ý=;MÓ²+Ñ;nîéÜ0@Ð8ƒ*iqþ¿øý xN·¿][%mÆÁU§Ùqœ "«í$×ÿÿZ×ÿª#¿¯úþÇM}ktþÐopí5RC´[í>ÈÂ83áM ÿþ¾AüwÉ'…†×î¿ÿ°ƒ&|»»Ü0˜A”‚˜‚>G^ŸZWKôí-Öºÿب_¢Wþû¨þõÕý:W% é¹98l+_4Èã8_éÔ‘c”BÛö9 1¥ýoïò8j’Oš­„CЄ&5üSµŽÓ׺ûÿ­AÉn7éÿð×õïñ~þ'ao¢pÓôü´µþšõ?Vÿ‹ü+¯ÂvLðÚ% ý4Âä5é±M1q‚m…OÓÿÿÿúzô½ëCðäpŸ}]þ›ÓÓmHí‡ Ñ;m~d/è0B—½74ד÷õoß­ÿ¿ä°Žé[MTœT'¹˜šíVÕ±A0ƒ‹ ªÛZÿþ~ýôK?ûü~‡ëº°ÇµøOoôìpøö’j­­îg{š+ó~‰]°ˆ£õ­ÿëpµÖÓÓo´y»$;¡ ç ÏŒ§ÍHC4Èñ4õwi¦ ¸MWOV¶gžýtùÏÖFáz×öšL\„ûþ´Ýowó²ˆ`h0œ5°­­¥§‡ý,]@Ÿäü¡V¿b¿®ÿë½ÐAôõ´Á„r.2x b"!‚aMEuÝÝD0ƒAŦ­…MÖýMÿ|"+øö5X{ÿ°Ú÷üÈ£ÄG»b µmo×®n·ñôGtEïõª½ï ýÖNêîœDX&b",éÁ?»">Óm›Ç„zéçý_ÿàšäÇ%UŠH?×ò_ÿ¨â¢­(þö¾ÿxZ÷Z¯ÿÇzáXnÿ¶á¶OÉÛoLDDD0ƒ ¦™Òí4šh0švÖóOóEéwõ"½»ÿ­¡ûïˆd‡°˜TñÐNÕ?_Ìïú\ßg¢Yÿý´è1ÈS½ÓlƒŽÝ¶""¼×ÝvIá’Ëî"""%MðÊ€šoi®)nÂÚéßgït“°Ý¥ùÅþIÂÕ|FLBg*☸¶Â§é뮫Õw›ÿ©!qI6»‚ÿO†©ýÄDDC#´Õza6**Ó°“…·ÿë_ó˜zó"•â" Dûn0ƒ8» Úÿý¯ÿò#Ñ,‡VÍI¯è}ÝDA„NÕíl\li×k}¤úßýŸ7WññÍèøÙ°½¸‡éþ¿®ÕVsÑ,ê¿÷ÿ…pÂgpL§L*dAõI»L]Ö¶­¯Úïf‹üÈ]t"$„!“pƒ ¦™½N!ÅjºîgzIÙ›KÕ¿ëÿ±â""2p50ºâ*M„£Mu½Óí{2XLDDE˜é‘âiû}Œ&;´¯¾·Òû߯ú¡– §E¦DrN¢˜¨°›í(a/ÔoLDD0˜O²#Ú¤ 0›v}mk]ýRñ `‰Î{L&EwwAÄ; ¶""! 4íÞÓ»aoz¯þ¿Ñ,Õâ""  îšzjÛ ®[ˆB!„Ê€™‡ §jª*-µ×û^½.•DDDê) -ŒÈ]xˆˆˆˆ0švDrN˜lˆ:°ŸÿÿJv²Bˆˆˆeññ(|ì°b"A„h7b¢M=´–ÿÕ4ÄF«ÄE’Àƒ ‹ „š¦¶žÒîB2eƒ ‘`›¸·A¦âÜÉ!…X}261Â4@ȯawØ|K"’ÿ¼Ï Ê„ÂvB»2˜É(ÇÿÓÁ³µœ>2¸cúö— Õ0’zÚ«wa"xä#Ú´ÔSì Â"ô¹ó¯Õ™ÐDßÿé­¬:ONꜷzGãOñ³DÈbÿuñqýú}ê¬0› ™ÈÞ‰ãÑ;{¦‹D%èED‘ëŠá÷þ·« âÃû­[dvæê'm.Ôø Á‹drúO2Ôkëû×!¤×ÿ«×Âþû%BqNÓ „4ÂyÞÿkPb¿u×é]qWwI‚EÑë}ÉžÚ"¿ÿý(ñþ¿÷®êýö’nN:&=4ð˜L Ð8’™~]“ÐþeZ¯ÿõðM-ÓÛï·¼-mP††,‰1Äìž„œ˜ÈþèïúïOÿuþ¾ëéZ\Ž 蓹;ªÃvì&„0„3__cûéF?ƒkUðÈ;Ãè»ÚÅö„0…ç¢:¥÷¯ÿÿ…ÿÿÿO‘Äÿú¯ZO¢xÑ8µWá ŽÈzȇ=“òê)k ˆëZ“×ÿ(Úw#uïO"½¿w°¸A„˜¦f`Èfu^ºÿ¯úɇõþ¿þ<1ýû׺N÷í¤Û ’¡]¹'Þ˜! ÉÅ3Dt|ÍPOÖ·ôg¿ÿ-Oô==ºðœ2Ô“ÝŽ¡4BD,È¡ *¯ë÷¹ùý÷Î/ÿÿ×ÍZüjùýûïN‘ÛI{»A8´ÂÐfÆ4CÌŒ‚oÿóEàÚüŒr ¡ÂÕºöëûwºvF8NídXtÖé¦Úh4Er,!1˜Iî«¶¶¶–¹¢³5§~¹ÅûÈÁÕ¡ö!+N]+ë~ºdá;°RvÝ=âð˜C2({}:~íáŽï$==¿ù>µé…ém> òpäâÜ·¯vœIHkÄ4Âvœn¾ÚzßÕú}~sÖ¢Wÿû¡càÂõôþÛ»[²8"CDí»¶é­l0šoa.ßïðGÇCÿêÅÐíï_î–“lŽé¢VÚiö ñ) Œ*Ŧŵ«jØ^µÖÿûÿn_‚"‡­¿ãÿûÿ·ÿ¦M»²8²T.Úû1ª®¸&gý‡Ñg^÷ÿý.õ_êôÞõ{Rw êÓíB ¨Î<ÚdG&ýÃM ŠŠŽé×Ì=_õþÕýð½oÿÿÈ€^ºw]öƒ´“ÉçÃ&䟽 Ø5O´Xõü;fk÷ÿmý/ïý®ý½]úzD‰Û½ÓCˆ2@Ã8€ŒÐf»0ŸiªŽ â“nµÿlþÚ_ýøEc´K<:×Ývé0ü:½{{þ­®øˆ’®)0¬Ba®·é›·×ìÚÂ;ÿý¿ý} Ô0µÈ±×ZøAµmòJ øiˆˆˆˆ´M50ë}°Nã_V× ó3³ÿØ?U×ÿWÕ¬?ÿú¿Nœqg ã…Q â“»JÕ5¿ëµÏŸýzþØ%~1üU«ßõÓ»´“Þb ÓA„È®˜[ƒ ´aÆÃ¢ 8¦ÖÖõw3I_ýçþÅ?ªÿÿö¾MŽXˆm‘]0ƒ¦ ÆÅZÞ—zé»þ´Åüw¯´ÿþìŽÄDDê„4íW^ÓÅìSßa=vÍþŸþG¯õëüimâ"j:iÂa0˜Uÿõÿ÷øZðDuíí§_ý×¾×N“b.",'¦ ‘ö© šwM¥kám/ë¯@”ùú%—ûÿÿÌŠ ø‰¯#ì㦪ÓR ,Rßí«í/ ¯äêí¢-¨ÿúÿ×}þ„DA‚`„äÐiì'Õ†µõî^·óŠ¿ÿÿ‘¸^׈ˆ’1v¡&ƒˆq„ÖÕ­öÿl°†DWÿþêëJñÂaoUã´–4Ó½dT<Ýë_ÿÿ‚k(lì‹­Ä4ÓûNAüÿfáöŸ¥[ÿ_ýÌ#B"}S‚ &DrOh1H:M4Âk øôûÓUý/ý_Î8&š¯mmÂw nÂzý¾NºóŸ×úÿúh:ÊÐa(pƒ ­¤ÓM4î[XÝ?WíWóEj¸ˆ‰£t‹êa6Ó Å0Âëí…wïÿ×8‘,ý^œt""" Âh;N÷qXMâiÝ¥iýÌ;OÌŠâ$[qÁ÷§ím1A>V«×í+ý/ÿ¬DDDD-„íÖ˜L&Å1i¬m…mFñl²#ÚjÂ6+Ó×ßýkÿðЊ%ì\3 Ȱ¿jÐh:Š‹2ëK؆baoMSKkiZzê©{ã ñe Ða2+¯h4Ýý8ˆˆŸ ÂwA´A±L\zwõúT""" Âi ýý0B-4û·Qm¥}Ñ’ Õ!eà&¼¯£mDCÒi„Ó·¦áS*c8lRˆ§çb¸N1RsV": ˜MŠ}:auÛelš5WÑØŒ;¶~2ÆëL“#.†»Vwm/øp•2DGÝÕq½:¿×»kdž­tN$bk¿BåOtÎÂh[DuëôžøOñý dñQÚ¿¹\‚ 2D¾»©U“û œ0GF‘™t+öRË@Â@ H3¯_´‰»³³@¯úhI;3ä\¿þÝÂj3@LÍ.5öV‰µÃ'2Nд\‚ zø|‚Å(bÔáªi®3ÄG 0ºµ‡S±Cïª ¢xÖìa¾îŸ‚'8h›µí R0 Ž0ƒÍ³¯µL&Ó …ôº“ì»´Ðh…ÂBÒwí¤­'IÒnJ;¶©¡pqaDËóVX‚Ž/i<>v-%û#u¸d±Èî‰;{†rSjy,|?º]^é>î‰âvû ƒ4@Cäa 3A" …_Þñúþ‡ë«¦Ù%N ÌPDI› r䟵•è?÷]&Òý’ÇÂȱ •$î"Ó‹L°ˆSë‡ÃÿþÐ]ºÒmÙ)Ñ8vƒ4 g†\È<Ž21ø¹Ù…}_Ó¾õÖí7R8ÂnÑ8v‰m0„É2!µ¿ýßLÿÔŽÚM蓾-†eÆ@B·Õÿ¯øÿßúÞjá‘Ùè8i{rÞ†0ƒ6d‚4Ï3¯¯Òúî—×]Z\–4»kÞè0™P&h2@þÃÿÿþ¿ÿÿ]Uû$ú“ë%š“´š a0ˆ´#YÿþCê+ þ¿ÓýtÞÛÉÛvZéª Ï‘rSb›~ÿ_Ç_ý×OÓ¦­4ÿ½_I°¦ºéÅ„ÓÏr æ×Wñ}r8ÿïÿ§¿üŒt“²(÷ړƉÝ=4оàÈ‚×öÿƒ¯þ½Òoh‚‘^‰ÛEÝŽÕ?Aâ]qÚÄŽo[KÿÍ«ÑÖ—ÿØãë¯é­´’¶:%N$û´í„9ìeF*êÂéZZòbÍÿþ‰ââ¿mþ:­Õk×Âm+§„Dž‰Å¯×iŠa„쇯ߵɎKB(ÿ¦Õv”{M ¸ÿÓ½Ó« Ý»I¦C(&-ŠbØjÝ0ÂÞªúÿºú_^ïýªÇøØ_Þ½÷KH>ÚEß]¦œZî—¯ÿHò^ ˆ¥¿Œ1û¯¿«Ó{¸zvN„î…‰Äxd±$ÓlSńӾAþÌÿëÑO›Áÿo÷Ö7®¾®·_}PÄ5nÈAíAÚIë®h¯ëñäAè”oþ»¯Ýjý&¿½&äòÞšh‹Ÿ"ã Âvš´Ó0œ4ÓÝ}µýWEŒýƒ‡Ý/õßÝx:Õn¯ßN<5^Å'í…ÒsOéöšIÑßôïý¥ÿ߯«dwD¢›NœXˆ3ÙDT'M_m¦ ÆO ªé¬ˆ9Ñû{¬¨Ï ù*µÉ{ ¿¯ã޶‚ü6µÒâ#.Á Aí‹ Çkap¾gÿ^x¾ORWö>¿âÿèÿÚzyyv‚%ÄDA„"!”9PªûºL&Åí6Óâ UU°÷×½ßÿ»û±ºPcýj"\ˆ;¶¡¤Ã i¦Úûê˜áu×áwÿßý¤êÛÕ6È*Øi¦¾¬&œXM°˜Ní'¯|ÿ¶h¿ëÿöëûØ?ôœD0ƒí!LqZ¯ÞÏþ¿¿èŽ=×ÿŇ.%ý%°¤DX"tQì„wpÂqØ^öÕu[³ÿÿþܘ×WKþU ¡Á<&›b“ûNÕµÛ3ÿëøO¥$ð¿úî—u~"",¹‚a4Á×UÓpÒl/Ú¶~9ßæëõ/z#Œmè"?±Xˆˆ`ƒ ‘bÔ6šˆpk *Úéÿú_ÿè•øJ½rwÿýˆˆ¢}TÕÆÐN4Õ†Tûø>ê‚ðoà ÄHhé5^ñLRlvOkýuõôšÁre¤WÿÇkn AÄC ©«i0œS¦¿ëßÖÒƒás.xˆˆˆdpši6˜°˜O[OVüÓZøÐ/ïÞ½â’ÄI‚a;[m5„L,ZÛ¥~gÚ¤­[þ!¡|4íHGÝÒ &±Ól-¯éèÏ­úä]^¾¼DIðgt &š»AŬ0°Õ† wæÞ–"DІ0˜Aª}4±lSa[ ¯Ùøä–½ðLT•\&ÍŒDDDZ}‘i±QLSÅ÷¯ޱÞ·iŽ!ÅÚ¶©ëúûZŒPˆ°ƒNTnÚƒ X ÿ¡ Ÿ§{b£» ûîiÖN¼0„DU ì„Åi¾YÀšB"O;" „MlC § Õí?WBæLã§{2ûQ" †…‚Ó Ø°›ØavÕqEÃO|Sˆ‰#y;ÅTUæD„Y£RXÖ8ˆ†H{NÐL&vi)Ù®šÑ^hû hD4Ðjí;8¥­„QÂ$:ÃõEs¢:m"-9.›2ÜͪÇ&ä…Ðêút+–庒¡´[„Çéñ†d(³±uo’ÁGOåf*íp@ðÛå ±ÿº©Ø°1®ƒ63„pŒ&ÍKÜ9”@Ê2ä@–¾ßiõ¢c·¸³P.hœ‰îçe²aYâ8AxR€@·×DŸ’H™ƒn¯H6ÿ¦ˆ^!0¯&Yý7¾Ó‹A¬…™yš¿üˆ=4!…":ý'páÛMSB §ãÒ曩èžQwmõ[N Á!("“=Þ#É÷ÈÉuõþÈí¢yD≾Ó@Âg‚ë÷Ý2¢ß 2êëwä­zMé]hž4Nó]SM ™N ÅŸÙ&—HjŸß'I¥ÿëºÛßO¶È;“™w„Ó§0@ì¸Ê †J»NÇoŠWõ½i{jèžQ;hœ5NïÐ34äPa=$·ÇÕßÿ§x@œ‰0oÚ[];µRqmw¦C0†U™O®,'zÒ¨ÿJ÷ï}é—iÒnNèž[¶µÓ0ˆ[KŒ†ê¿öº÷ÿ÷aÈ_ûÉBíþ’wIôN~š„âgŒÍ'ˆ_ÿûú¿u·ýºm'Ý‘æJûH»ºwva¤çÌþAÄO¯ñQÿýt®ýn‡‡MªöÉ:«¤›Dñì$NœC†ƒ.@òäR4GþþºÿC °cõ¯NýtïXmÑ(º.4š¤ƒDr> ñ=ïëÿD¢oùzø¯î· ’mº.íÜZ!0Ó8dÆl²„xÿÉp":ÿÿc`õïö›ï÷zÞƒ²EÉÛDâ–øM0™v?—=5ÿ×Tœ6ÿa¾”0Ÿ÷WO¥½j Ší¦¶­4#òÁŸ2A¥àý}ßô°ïÿ]£ýn”]o»ïAÕ¦¢Nß¼bâ3Kˆh͙ò; }¥¯è,æøÿ®í:Ž·ø®ÒzxOÓ.ì¢ã~ƒA‚`>fÏ[úàŽ?ù27»¥úûýòij¡õÿO°Nòv¿´ÓCAÄ3æ‘D&÷J×oÕ0ê“ï_¯Þ¡}n¶úz‘ÞÛEÝ·M4Ї®úûfÿü(N Åú÷î“~¸:·íÒÛt Ÿ·DÇ¢C¸»NË<0DY…±L_iwöÿ¤¹¼"®ò áWÿñ×û÷ý>î‘Ýäâéݧ m/×õ~÷K9‡¯ÿDoÿ¾üxüŽ$ˆOzKôãÈâðÐA¶ïvÓ‹ö¡„kÚ_ê™ó‘_'VHÝwÿûé}vÕöÝ,<·bq¦­…m~ÒÒ³Eø:þú úÝÒ ý>Ø4žþÿá7ï¸dpEŒ–7d§Dá߆"ö"ÖÒÕ×âÝëëuþ¯úí?þ÷´ÿºM²,=*M8¦.7ïuûyz´Ÿ¾®±‚<º iú¥kîöÿ §ÝÚt› Š?Ä3ë„ÅGuóªw4ÿêù1ÜžŸÿÒÿ¿Ù›éÿa ŽÓUÛMµiX];àþëUUÿÁÿE?DW¿w¿ÒðÅ¥ë«}éèFMÂdvMÕaŒ'­Uª¶gÿôßÿìGþßïVMø`„ž“p@Ó(pA§¦¢˜¨†šÈ?Ru×î—jÃÿgœPXm/N«´¿ä 8_ÿþÚÌŠ—ˆ‰öH&6¡…öÂúþé+æ‹ÿäA××~ßøëøˆ‘ˆ3`M0¦5±Wi1v¯öþfµÚYÌñ$“8ävU1ÿ°ãªÿõë â2vTÔSME›i_°ÛOW¯kó‹ßÛÿþ¼DDD0šd#ª°ÓÛj×í§Ûëøuë„={í¯ôÿïÿâ"Ó^û§ikö­ÿôþ¾ñôQÿÿÔD2Ó‚Úa7á4 S†NûþÞ•ÚôøtFÿÿÿñú &ÚMŠb“A±ÅÚÿ_~¡ßL××ï±OâtÙ'L‹xOñ ØÓ´£Õ=WÜÓäk?Î Ü ÿzÿ¯™xOXM;Hm6ÚI«¿¯ï§‡ëý|'N" Á ›¡R´œmD; «µk¦tÕ}0t¿¯ÿ×¾ìDCLŠö±I„kß®÷ÿÿ¥Ž"¦£ ž©¸¨ël/ ó~½¾¿ßç5÷ÿ ˆˆ†džÕý&ńﵿ]³þõ_~Ej>6™-/Å&ûý¿ûÿ×ÚÆÄD0A¦š{‘§}¤¶½þ-‚(uÚB Â`‰É¦ši;Á4ôî°šë¥ßúÿB"âÂvßn*4Ø¥t“S͈­ DDD4ýZa0œ0± 5»^>ÒÿÎ\¥e8LŠ>©7N4ÓÚ ÐŠ‹½ñLXA„â: ¶¾¸ˆˆ0„ùBv†h;VÉ[H”â"'É‘`œ]¹‡ ¦ÅOÄdÆ“ §èZjœDD0FˆŽ„4ÊBv§™ ¯„uZiª\ÉSÄ›VL(ˆŒ5Óɸ-lW^UZ§µ^žv h2oªÜ0W¿ß{öäkr·c=ZrlJ]ê8jÎÉqÇ&Ãä®]þì‚­5Ó¶ÆõWO;5Z÷»ó;×tÓ;NË() ÍK­Ç\œÌê?ÕCÀ2ä2å˜2èЉMgvŒ‘E»«BÉr]½Sì Ér8F„tf´»·÷{ÿ¯zT°û~¿÷dcØ$NÝtâîІÐ3Bÿ+úÖŸïÓÿQÿÝûIé„Ià ‘“†‰Û}>Ñ 0f€å[!¢?´ùÍÿÉÔÿÿôðಠ‹ Ú~š¤¨P¤îÛêÐdlf¶~§¨º·õþïÿ×ß­=­z·%/v™;ÉÇÓMBIP¯0C‰ÆÁÿäááýr×÷ÚÆÃ`ÿÿ CÖûÓ²8²g·&ü&ƒ8 gˆñf‚"„ÆÿÿæÿKÿÿÿâúÿa=դݺ'M0@Âa¾DD·ÿÛð~ù2Ós ­ßÿ†?Û»þÜ2;¤&JdnÓbíp„˜g]Õo®—^û×íõ×ß Cí>Ý?n&ÑQ7jŪ3Ð!ÑšwëýæroÿÿƈâÛþ¾¿¥í?½Þh”;vôLwI§ÂxM=Vßÿï_7ÿ_÷ë¨à¿º_õté<ž7DÞžšf`ƒ!™®MXÿmµ·ÿ4Kº½ N¿Uõÿu§ÿúëzÃ%dypýl' í¼0… ÓU×ëKïß­pŠÍO¿û¥¸Oá´ºOû²1ô^yî\b,gˆ e\h$U 4Ó†mm~úõ9Ÿ0GÏÿ¢Yýnö?úõ´­nšßûi Û%HD‡tïjšiǺ·n®}kºþ¯¤ÿÉ¿ï¦?ƒûú릩սm'tаTÚ{M8lqê¸_zv«°øÐ]~ê«ÿÿþ¿ÿÿµ#‡AüC)Ë‹Úi´m&[¶Oÿßõïúðˆã־ǫNßÒ÷ •‘a¢vÛµ;™°MuMPA Ðliö¿¦ÿÿ¯‚8þ%Ž)»ÿûKøëúÿ_§I·ÄDA§}8¨¸¸¨Óm+]zWÿþÇ…öÖ¼XêE…ÿ{Ó éÙ.‹Èˆˆˆa2‡ûI‚ Ši« Þßë¯ßÿN4¿û _¿Ã§Ó÷â ÁpÓm»ª«j·ëš/Òë’ÏõÿÁ¸%üö¶Âm÷$ƒ ¦µìCн?ï×÷§¯üâ÷ŠÿúïøÿÿÐdÝ4ÂmŠ4C &šîÚ~澕j$Âí±ªÕïâ"!œá?ÅÂaƒPƒ‹O[Zëý}PX"‡ìM}kýZˆˆ2‡)8LžZba µ°–¶ºý~r<]¯%~Óö÷×Ãq ŸUwªi±7÷ÓÿþH[ î×Ñ+]§ˆˆ‰: ¦» „ØÂ 6[N½?ÝßÒè:#„ýý!ÿˆ’2&6¶¶™{M„š«ûÿÐ-~¿ôá”z¦± ÂiûjÓŠ‹tím=óOðE»W4ɧÿþňˆˆ†3biŠø†«aUyrƲÇi¿×®q|Œr‡ ÄDˆ`Âi¯iÚ Å°Öé°­«a êÃ¥ø#Ûûÿ±i„Ó± 8Âh4âW¶ÿ]ïáÞ" Á A¦DÛq ,0•…Õm7¯|êJ®®#µ"Ù7«Všw¶•…¿´ýtXìÏ×õÄD2‡-4ÈAÓÅ1L[Ç ?}5³97ýÿ ˆq ã Ó_¶ÓÆ*Å«kiZÿ¶gøˆˆ3Ñ2V©¦ØLC l.ë¿ù¢üæx„DDD3ý¦šA¦›aئ-®žµˆˆš@ Aà ¾ÄDë‹M»N(lb#o™Sr—ˆe(C¦¶²2i§ì‰î™Ùr>n­ }½¨‡²¹rÉ_ÿ픯pƒ)³OÕvˆÔ3¼ Ñ‘ ´Ø^v/%¨ÿ¼SM¦Îçš’~v`$kùýtˈa=ß{a4B“ ×· ~­S®vWí î‡ –Çøîå”LRfH–‡w$©Ó+%^Ée»W &F£HÃõpáÊäØA âóˆüºa[5þÒ»Ý}i[&6´Á0B g³‘;5/÷ ¦´Ðv ñGdƒ%YŽÉ¨ø|ì°\ޝî›äÎFì"VÛ¸aA„8!È«—û“Ê$îÜ-Zqh0™àÂ6YÞöøtïëúÐAêÝø°š Í‘ ¢ A^a_‡î¹Û—mØH“¸Ó»PA„Q*ï¯_ÿÿ»"» œé¯iÙq„ !ÕëIè6êïH'dWhœ;iS¼"'²s$:'/¼›»¯uþ½öï/%´ý;ɘ3è‘/‘½þ«êߦÚdwI¶E†ÉÌÝDµ§ 0…„á‚ ö`—ôª¿÷¿õ÷äoWIÝäÞ)Ñ8wÜD| ùŸnN~® µ^½×ÓO»AýÐM°´Ni'„-½0ÍWîv «õ־н.©…Ý{I=tÛ"ýÂjP†E™¡š—Çö¯¯×]oo»]6Ú%NïmÚÁDßãwÿÿþýÐ×»ÿº»>ÓNÛ©H0˜L S1šÌjµüv”uéßðÞ›ô¶E ž‘ÛvêÓ B„q©Æ´°ˆëýü⪪ÿÿûßþ¯w©lÐv:`› («þÌÿóÉ»õÿëôþÿú .¾Ý0ƒr8"Äá‘]®CLð¦ÉU[Uê—Î E]×úßÿõú¾¡:»U@è“·zh4"`ϤaãïÞâž+õ¿×ÿÿ6¿ý½kõªÇ餺®št Ú%–»q}•—#Ñ:#¥m=uÜάÓÿõBÏšë÷þŸëþ†ªëB¯«ïu¼&ØRqwDÞ‚ ïͪp˜Mƒ½~¯uÿ¿ÿˆ¯ÿ¾=­¿ÿ[§ª`’m·k†„$ø”Â7+‹cOí'mlÏþÝ÷ÿ¯D¯ûûü[ÚUû÷«ÒNá>ïqp± ¦­6(*§º_«g×ïþÈ£ÿÿ¯þšÿ÷×dvE‹M;éÅ¡hÒ„Ml*i§¯èÃßô¿¿Azÿ÷ÿ¿áרmvôûî6N—oÄXA„íC5ŽÖ¶„í~¾·éÿÿÿý¸ëï«i§öši‡û"=«Ói¨¤íX¯mmm%a$ÿ§_ÿ¯%£ iïÝÖB$O¯ÿAÝÝ‘`Ž÷ˆˆaolˆ8lSÇÚúuV¿ÿ%eþþ¿×«Õ[i}B¶Ñw`„0ƒ ¬4Ú°©¸A‚)†­¯®—ÿùÏñ- _ô¿º¿ÿõ¯ö¿‰Gæ˜NÓ»N›¤]§õWë¡ëõ¯×ÿëߥvFü;DDX! *wkø¦) [I[[__úÞ’õcÔ+t߯î!?]ê¿Âwj“b¡„Â}=v¶žÿVÿòUÿ­ºï«¦¸ˆˆ†i¦ã„ÒlSqq }}4]^‰^0Þ¿ù˜ÿÄC'`šiÃ] ýµa…ÛU³9°GzÒ¯ô»×ÿëkûŒ7ÄDDB ša5·a0ši­…¿VÌÿ÷ôÃ~ôþŸúõøˆˆ°žki¨¨†/µµ¾ÿÿÿ¡ÿïO¤¯ÁŽ" Ìœ&™{"B½šqAU†]ýhüÿ®¨”ÿüDZݧM´ $Ú¶—ÿ¶g¿¯ÿkiþ“ˆˆ0B éʘM{ÃMŠa‚VŸ´Ú×áÿ¿ÐOúÿøˆ†#{ºlS¯­Úªß£ÿŠ-vñ=…í1Å„×ÖÓ{ïÿúüâ}Ä!ɶš ša M[ {§×¯»"¸ÿ|DOì&›MLC‹«§I]uKõOßüDD0šjîá§ Ç«ik}WàŠÇˆ†#ÄþîÔ0¶«kk„ÿ­ñÂt&E8jí¶=.ößì8„DFø¦)68‡ /m­¯õˆˆ‰ä,&šn˜ÓMzÿ·ÕC7 ¿I3ºa[¶Ä0šÇiª÷ˆˆ†]‚i„š§í6—¿–e*ÄA‚e8":w‹ ÓÕ0Ÿˆˆ`Ÿé®×Mu†§gÔDE—ËÃÌ‹ßiˆi¦¸ˆŸ¾˜ œ4£ŠA¤4""&i¦FäŸíãBí\uQV""" ò,FB«-ÓŒ³j!„Âa4eƒªÆõ² &‰­ j¶né‘e"äÉ©´šÞ4Ôî¬S¦ |Ñ-}„ ¡‡‰Û«µ¸w;B[… ø Ï™³ÆÚ;­’Äžw¬=”nêv ÇAÅ” g3ÍÔm4Â;´î2‚wDáÚhCAžà Fºþwuï; Ó²!¡};"î.á‚ Ó8gU®Öé“p2.3†C#£ý{íÐgx3„Uš™ z¶Â‰ÃoÓX!ªîw Üìh¢Â 0O.D1‘’ÿè›ß»‡ûi;%dw 4‰íJrD(‚Of±Ü•l+; £  âAŸ0ƒ>dã45×ê·ÃO÷ýtÞïÕ¶©à„BŒ. hc‡öÓÛ"»’vºhZh4B$%ü‹0y½uÔ5îá̀ž ö±~«U½{%”J!Ø":í` Ér.—Ú|˜‰¦Ðd²‚m‡hÝÓN, ÐqP)ó6œKxãvTxÿÇ÷uWV“»Bè¸ÚxBÌ·¼–vÙ¶Ñ8£wDžöša8qHŽ4úéÜìé­?J¿÷W]éýðáÑ;oö„D3Ä\ˆã4r)ò1ÖÿßNªë®ºÚv¶÷xA¹(˜î> ð.ˆ\—"AÒÿÔ0‚ºy:ŸõÞàµÿO¼–=¶L³nÜE…3ƒ œ<»)Òúõ-ÿÞ­Wÿ¥ÞÈÞ¸jGm îÈèÓ¾-ˆYƒ*'ßU¯\‹ÊºÖ*õÿ¶«Jü8woøµ@â@þÒÿLJ _ÕµM?ÓÓlíH¯“»";ì&¡0ƒ@äåZWÕ÷÷ø!ýº_ù'þÿdÈòÈ;Ñy}^Ðh<¨":$J¸ÓÿûÇþƒQ×­wk‚n„ì™òñÍ”IÚu`ƒD!r:G×Ç{3ÿûŽ«þÃýømo% «d¢û‡ ‹^&«á`Ÿ38 eÏ]Z¯ëOþ…½Âý÷CïÝ;Éc]'¦Ñ;a«°¨4©˜K#™ ‘´«×¯æŸí Ÿßþéëä$þ5ì/ø^Â`´NÛZ¦˜A¡l‚xe#ñëDƒ{…ÿºcúCÿÿ÷¦ïIéØ[ˈTëN, Ï‘ƒDðdç[jà {kß÷ý~ÝÿL?­èxoî¿'ÏÁrpÑ'mëp`” NÿïäóþÛ¯ý=mú×·ý¾K¤MÚ'Ó†ƒ‹N ñ3/]Š ›k~Ñí.¿ìÚÁÿûÿý“×ÿ½ý:M´èôôÐÐh†FrJ?ÿ¥ÿƒª%~¿ýþ¾äIí/­ý'H7òó#vž§Ÿ”!™ÒݤMŠ «„õÿôó˜ûzþþÿzÿ_Ú¦÷„ÙBN×Âa0ƒÿ4Û?ë_~CÁºA{òʧõÿë`Ñ?ýûï÷„è•·Dñ°H“¾X÷ àÑ àÌã‡x0AÛ¤ >Øi§ºªaº]poëë¿ÿ­í×õaHíµ:%wd‡i¦™r.GÆkŒëöÂV¿öf”;¥çìºÿ¢+¯ÿî?ÿƒëþéºvF?v Øtì%j]ìÑn¿ _ûÁä‰ÿö?á°_ï_ºjß­éÑÅXMv;ÄD„ù·o舃(t¯M!ï¡<ó#¾½¡p™. %°Âvá¯ìR¿pȮ޽ØFeûÿÿ_dsûþ!š}›3â‘̃—ÓûM `ˆJdÃ$?¯í=SBš®:¦tŸ'ŽNï'ÂéÏ ¹½é¶Fô˜Hž6û0"8¼z×kÙÑ+ÅIÃnïïº~Óé;†Gº`Š×®év•²N©·#¯ˆŽ›Wÿ“›újž?“õ¶¯×Ä“œŒ0«ÿ½}ÉŽ‡ŠDWýo_úÚ‚½~ÿõ§4Z$azÿ¿ÿÚá^»ÿõßö“ VCƒ¯ºéZþ¼SpíkõÖÌá5ÛM0Iµ[ÏAqšîB=4Ø`…6©ªÝb ÈÞM4íSšh>ñEÒ""vƒ ƒ• Okÿˆˆ†´Ô/ÄDJ»O–ºXÚÇÇ /¢Ëp¤$uˆå°]–À‚!v¦±’ "4„šag\z%5­MÎÐŽÊ|Ž´›DâuAÓ;}=i鹊޷µõ¦¬íSõrg’x;-:4›×öÂGŠÚñ}ý}v$¥_—΋Ì ÉIš®½ŽRôK/™¥¿;¬8D>ÆÉ´‹za4ˑѪÕ* ö7ú[+d)åÛNîX&A³O’‡zO“§³³QòNE„ô?dqDñ¢í°¡Za`ƒA‚ `ÂyäúO­p×Ó†Ÿìì¹Óú¶ ‹¶öšjš!ñ‘Æffq²!™¸úUßóµ/qÅZ'#¦í=d ‚eQý7MÓ×#º†ÙØtN.ßñi„,!aG($M£V«ë{¹\µn! Ì8pšß[U×_á][î–­¢î"êûM ˆ0@Í$›Õ×ÇPƒ»‡ÑÃu«W_ød}{ëÿë í2g"¼;¢qEÄ' 8H>‰ËOü®½=þ »˜Mfü›¯ëâ?ú׫éÕ»}á7²YI…A¹8z}êàƒÐdäC=W]Ñ.a¹8µÕéÒ´ÓŠgdßÿÿñûõðëë}º…½‘ÛD£»âŸ ƒD0#–?¿VíÝ/lŽ&A%Qý4Ý~Hr¡ÿÖ£…Ÿß¯{þA°îÉ¢wð˜NÂeÅ0@ˆˆ"'y¯¦ïz°¡ßZi.¾ëèG÷úõöþ¿þ_½ví{{%BNîÝÜ Ó@âIj aþ¯{kˆ:z5#H'¯_ºÿú&ÿ¿þ½)^µÿ­öN‰ÆGšåݰš!xC$ †e>޵ߠƒ·@˜M5#‘£ª:Úí7_š'¯7ÿÿ'eÿþûc¯¿î¿ízwõn‚nMÃ[ ‚ ñ_¶Þ×C¤šw šŠB“)Kô9‘Ÿa/muÿþþ„íÿþá[÷úý××§§~·WaIE'EÞÓM w­ã~Èó¯Ø@ÐgL&z8ζš©•6J­Ò뫚%÷3WƒçqñAµúÿØÿö¾îŸmôƒÓxy+hž4NíׯÓRñmjöC34Õ0š‘Ì¢×mŠM6)†©±­ÚÿwšvU_þÔK:ßûš—ñi¿´õ­þõÓaÿow¨"@ßy'U¦ ©ÅžÔ:>)› •­]ŠN“ Á‚þØV×ýÿýPÃ×õÿ¦ÿíRcƒÞþÞŸmnJÿáßö˜ÅTFð–¡~ÓMT Ðf Ü|ÉóñBÜufØL'{¶( Âk $ƒXõÿà¶Òï¿\âêO?]ozÃþYýWñéoõ©8ÔŠ=ûèÛZ¦ÓM4, Âa šã;×"¨DDA‚i„î×aÓÆš­¬…›­zzý[T¾ÁCüF­ëÅ0uÅákÿzþ’oÞƒ¯ p˜+DcýV0šPƒ ‘ÆlJx¡&˜‹" ÖÓ´ÓT0˜NÐ;ôíuµÿ¯­þEt‰\7¾·üyZ}µßöF÷ïARÈI Á/U­&ˆÇº§¡e8Õ0HaÌÞzDDD0A„HM?xM¸Ø»JêÓµm/íy¢¿­œÃér@_¥Ç[KZnªV‰V«ªU^F8„ñ%Ô*k¦L690®b" Ѧ &©î®)‹°•¯í§ŸýÚüÍçÐEcù(ê°ƒm-ÓõÒ‚ê+­WäX±BÉÁ ¯Ñ(APÕ4дÓÕ'øˆÑD{œtÉÂdp©§ªéÂT…ËÙÎîÈúépì"‡º@Šª]}%_ªÓL5tA„øa“ A„ûXˆˆ°ƒ! 5"8UUÅzQlyw!`]j©Ç·Ä4µ]õ¥éÖ’úö©$‚ˆˆˆ`…¿a L”'i­‘Gï¡·Óõ¡zZHißפ¨W ›øM|Q‘*ñša UMBiäAÿÚ_! ¸éÐ~´’zë$BµTZTƒ_ÂØBÕU4íqT—Ôm—V’÷TƒªWø*KAfBƒ!¿Å!Âi„ÓP©ª¨UZÄ=t•k°E>¾p«áfšiþ¢"Âa4,!jšªdqؤ¾ÒT/7+Z—Ázy¨ˆˆ°A“ÄÈÝ5LŠ8MS]E{kö…Å ~*vS¢ofEeù”*Á…‚a0„õIHƒªé.DZÕÿOöS†ÇðLDDA„Á°©‚ªk§§­Ëßµ´ö¾©Œ(L&5 ªºã2¹UGiÝõêZBÓÓMS¸ g…0fbŸÂ ‡¯‹a’ù_C& ·ÚQÁ ¡ªi>Lh gˆÁgFFiÿAÓ@ËÅA5}¢ÝЈˆa4‰;z¿N,  ðÂ2 –ëvÂvkê+•ë@˜¨6ô‰;v.Z.Ða!È$beH~áÑ+¿iß•ÈÒwJ·`•°èœ[tûAœÂ@`ŒúÛnŽÕ O_b’iÝ'‘ÙÒnD‹$ “¶„øµ3æ`ό͓«¼÷n–í…u­º}×ÿµMÖNÒ ÃÈÝ¢wvÕ4ÓA¦pgŒ aZÔ?º¦>DD+Do£)—[_ÞúßôÝPol;"½´‰ÝwèZ^'ÅEÅ*5³¢.žŸþü$8gT{3AO$È•¾þ™“!Ÿëÿÿÿ^¿®šJþü¼´É½´âÂgt#ß»Uð©…ÐeÁ„Ïȇií­]­Sé?䜠ÿÿÿÇ÷Ó­÷µï«oA‘ÛdWrñ÷aTM¼ÃûP³â'i‚„ ͳdñO…ï¹íA¶Ÿ¨E‡^N¯ÿëÿ†?ÿëëê¦G ŽèÛð›×Ì<œB„pÊyy8J±šv ˜MÓS½*i¯«3“üÏF‡{«ÿÿÿÿÚ®¿ÿÉßÞ«¦Ÿzom‘ÅŽŸí®`ƒ Ÿ$Ï+ih†ÇiªvSl3Fža§zB¯´ó¨§ÙÙ«m5{=ýÞÿùÅÿ²u~)kÚÿ÷L-¯ÿ«ÿA´ž‘+õ¬\_d‘×¥Ó¥ ]ë…»A©ÆœC*ç­bÖï}‚ äœRÛkéfù¢þÞ¿ÿ¤O?ÿ¯ñõîµ×õôß÷¼ž6ÛÝ Ñ«!`'W Ó„ÂzÙAÔá"'Í/;ÇA0·Û½ÂÃb“°ªªÚþ—ÿëÂI÷×_÷ÛKúØ×a‚×½“…]}×öJÛ"ÃJÓ­R¯H0‘\ˆ:Ø$¡7ªn¡S ª Â}œ>޲gdtÖÒõÐa_„ö)4îÕVÖ×´³;ôI%}߯K‚úÿ_cøïë¥ßxO¼Ù´’ÿ ZZ´ôš°± i¦IN0™öxg³MS^†˜U»0œ4ì'A¦b‚ 6)´–éµÿÿýÿèX¯ý¿ÿý°¾|û÷Zv´½ÌŠý%‚¨“UT² dWéS{¬ªžš…L&ƒL"+“²àᘾ« ‚„D0…„M4í~Å&˜+ŸÈ Š÷M¦½¯ÿú ü/׆IÇá±[‘Äÿ»·ýP*êºKÒI%VÑé/KÚM4–=T!‚hYèëçå¯%? ±h°šjئ‚a0ƒ‡®¸^ÿm¯þè–z÷¦¿þ:ûC‡CñZ$:OI*T ½iéã¥VC;Ù0H•þ“µ´Õpšay†hz¦––"!„ƒ x ¦ï¸aÃJ-U°ŸŸ¿û_ë^ëäµúÿýpbdWzœKiuÄKÉØ¯TDlŠ:ÚëŠÖª£»µ …Mh5ÏgõÒI!4  °Mlˆûb›A¦Å„ÛW¿ý?ÿûëÁ…µ„DþœÅ„õ¯J µJ¿^¸P’©!ÈQë^“[z¡¾è&gÚfdP‚ለŒ•¶4Âi‘¿Û8ªTÕW_×½]Ñ.ÿíׯ":ý?¼ê¿Zj«ª¯i/ ?!¯5ÿªÒ¨M0š`†…3<„ZDDB ïmi¦i«ÿOÛ»Û3ÿú_^c·öAñ&ôÒL»J І§¡}kTº­A*K"¿jA¡üœ=_dû®†®¡h&™ÃÈa+e5_ÚxL âÕ[ Úëö×þú¸EGÙ( ªk®-xîÒéWZ¥ßá-r bn”[éé4IýjÐM*P¡0ˆFdPæk¡Å‚#¦·dGÚ± 8¶ÁXk§þ¿õiž/jƒIHÝT„È®+Õ8i uï_úK ÕWþᑽdXë!_Ò$ôIê¨Z…A„ vHDDú aƒR$~ØcŠ ¦ÓÐzözü=â,0ši„­ã¤D„DF ´š¤¾’zÕ+ ’ Õ=RUUImm ½×ꩦ ±•âÄDDX! &J†­PmXN×M^õÆO@„XBa4ª`|S ƒÎØãß¹ M~¿ZOM>é5¢yµÓ¸°™ó6ÏŒŠítJó µé¼–] A¯h.¾Ãû¯kÇúø&ö öEŒÚv­4Âh2!ó02@Ȭn4Cøè<gF}¨_5®N£”=Û2 PÂDqÿ¿×Çkºù'ï_ÛN“íTŒv‰ÃbÓM L „'E=ùZâ•Bdº#´Ž™ÚéÕ„5²-ÔP_ø­ŠÖ¾ºÿ×W、ۢvÑ8m„ÓL3„e¢íGôÓtA„á‘ãI$Õ¯Ø@ï_ø#»×äÇÿ~yWû…§¯Ò«­‘Þ›y;h›ÓâÂa QÆ|RžûÕ5Pºi§3©…\wöšÿüñ(#¿t½ÿý×Û]×´ýÖ餭]’Æ–dÇRx÷,r‡¦a0ƒ<>dã\/¤øKÂnš§›4ÌÙ¢3E:\|X_«Õ‡û_ô¿ëÿ´µýߪÿÛ§«¬~Ù+i ¢QcNhre§|šµ$žOÂa0© Â  „GÍýì'uª¿ÿÝ}⿈ßÿÚüu`Ž?ý_÷}÷¦îN/¬4Î ×¾‚µ'Äo¤5]ÂhXMyA:ûÝ7é?tÙïÿÿúÐOþÚÿñuÚû_Oûµ†ÙØtI÷Ûõ×i*Ó¸¥Ó×ìsÑ9#4fVV8`›®¾ëþ¾uþ±3Òþ’[øý²8ŸÁµ«$úá;Ðyݦ¾¡$Ú$ÿIjDu»¦ÿvA„Ì ! ј3†CDF¥NdyØ…L[i1§w_¯òÓÿ_â¾N«$:ÿ`ÅÕ!ö›éé¶Û`¿Kºªoz­Ðý¹z#zq…» ¡Á3dq]DdÇ ªi¸¦“ ¶©ßa}4×»ôÿô/_Mªÿ Ý^¯zÒYÄô½ÿIUUT*¸Kw¡MZ¦…ä`ÉÆæƒ$: 5vÅ&a0†Yž×[Sûÿÿü˜°ÑÿÛðÇþÿUÿ 7IvÒú¥ú¨U¿#zòÿµUMäø¹ž ù3–¬£eXˆˆ†´ÂÿM6q {TêµÍÿõ?í®ë¿ô¸m¡ïª­HqÖëÈá.¼']ZIôï 0†aSŠk±5d4PƒU§iØA Ø†›¿¶ó>×ôD:ÿUÑkßÿ¯Âöb‡PhõIT‹š^ª«ÿÑ?L”dX#Œ±ûØOM0¡|#lÍ"èÑnȵwðžÃKm^µsE/_uÙó…螯ôÂÆ…ÅúØ#Ž ˆúT´•u­zì êÚTõOA¶GNIÈÿN¦>ˆ3Ì Ê2‡A’M&Š ±º§ØTBÒ½ö/K×ýoý7… P2? A§ê«Iáþ¾¾©ý f‚~Ó—ûA8ˆˆˆ‹¸½½°¢“ ±ÁÚ~¿ýÚÿ~öÖ”UAÓNªÿôòA#Lê+Z¡Cß#qÔ•¿÷>ˆèTÓ^Ô8°Tîëëûÿ®qb &™'LƒÞ"Iù )&—ÿäµ[oá÷vƒ(v8nE†M’/¡Âƒ» ؆48†¶¶—­×÷ˆi‚jFáH£¦†7Çj«ÿÿíöÿñºv±†$"" $ÙÉÅÖ8¸aVûúâ! Êt!„¦E}oÖ•jõרWù!Î9Wõ©Ý­Ó± <(xˆŸ@ì&D}ÜRl]¥amq ª &B¸‘!G Œ$»lÅÙÉÿï_HEúùà›¯Ú¤…ÄE„Ù>“n8¸¬D\0˜A…!ˆL Õ4ðÓ Æ›ak_Óõûù=­;”mk5&8M<+k3â  §kÂ} âþ×ýtÿ×m÷Äm!DHExˆ‹!kÞÃJÓ‚jš}§ê§ òûì=Ö¬„ˆg" ’fÂi§êÐv„E„ÂÁpNDºù>úÖÅPŽ4",&U„W~C@âÑãŽâö{ûjüDYd]¦¤GMa¦‹ˆÜ(O-EO¡HA‚ak5’»OÕÔWäÜhT„DDMlŽ# „Ô† M?H(ˆ0…‚dc‚Âi‚Œ³_# ÁfF«¡  Á™(Xçk@”¢!”8LªZû,ê«M¤„DKuŸÌ‚ ,&eGYh`ƒ$SÊÊpLìaŽ«dZ†<@™ŒáŸ#—ݦS…Â"ÿ0™PeQ†¢nâ#;@Í‘3ã6gÑÈÔI}{Þ{}JCA‹"»ÁÙ ïðƒ¸`„  ˆN9ÊP¯éÜ5ÂUêï]„­Ý¶îÔ›¾­˜A‚p|h9m-<-pÖïØ&CòP™'¤îô“‡¦Ev‰;—âÂLˆ3f|оO›úMúªuo»[]ë¤ßT›A;î‰ÅÓB 0@Ï™³><ÃúèNÅÿ磵£öÁq¡¯ëا´Ÿw ²1é6ÉL·MSNÔ&„25ž3ÎüÈ+òd„`ÍL«é.‘(MjTåøë÷×Ú§îÝú}Ú¦ÝÇ6Q;h»qiØB ð¦Èê3†rRGÿ„B™²9OÒèµ2zú½§Á„ëºxutãW«l”RÕé¼;ÉNj۰š ø d ¥;:ÿ}&…„,ûÍ‘áJ{þ©¼í9oÛªgz™Û½4Рñ"²už²ä~¾ÖëµO¶š‰ ‹háë g ÌôG×UÇvÌ”*Õ}„ÙÐNܼoñi¡B3c6a;MÖœ”§²ªYŠ…iu‘S#šgaJ›IÙýä0:ky1ݧv™rƒÈã@óêí¯~´¤,é&vVnûm½‘GOA¶Gm tNÒoOwqP(AœDe}åKwÌ®9¯T£­ùì슺ñöšiêÒ‚Dñ´ím_iØ gˆ Êô½ß;[4Ó œe MeB:ßÒúeÌë„É#ïü- ¥þûÖõAÙ3‘Å’;DÝÅÅ„jÃ3@¤b"^º{“ T!¦tg\ž"ÁazZ ‰âãOL©?[¦:þ·ZÕ½×é¶‘Ò ²;ß]¦ƒ<0ƒ"d¾ÿïT"×4Lƒkz­.÷úÿþé}ë÷Úuôý=mdX¢V÷pšqhH#’ÀÂ.Auÿ ¡=SM0¤è½"s3igh·ÿß_ý¿¾½µ† ÿÿµ«ÖÂnŸzD¡¢wдTBÙ ¸™æ„×VAÜ–U%TÁRCL&3 ©úçµÿÉd«u Ÿzúþ;OúÿÓßÿêžœ:'”NêªjgŒ¸¨ñ‘ò$_è¸@§’…K¨TA ¨L»1¢?ŸD}W]:põ¹(v6Mïð¾?Ñí/Ò¯ÿ¿ý×ý¾Ùú“îÜåݦÝSBÛBÂx‹ŒYz뤇úIPì,E„ÁhXNCœUUÔV°ƒ"2‚!¿­ÿ´ Š“Ì?ëÿéÜ3m¤—ðšù(úOO%4èôIÛz¬XCQ„Ì‚–’Uô»ÉWÑ ØJÓŒ'pÍ„ Ε 'JºA…L ȽÿUjý.ÅÿÿÇ‚ ø`®¸ï‹ÿ»»tAÙÛ ^Q;méáxé*ÒK¥áQ!ë#Å¡þ#„Á`¼7…'(Qd–È—Jša0˜+QV’Ú{ë~m}œ_üŸ…ÿ÷u¥ZÓÁµúN•´ì%zvG zxAÞúׄ««ÒiG"»„®º¦º¦ „vχ¦¾×PTÓ ÓœZßÁ9¢ÿ_Î$¼Ñ(þº×ì jëþŸºtƒÉãÑ(a„*©Ò«¬*mt¾ÿ!±òNA»«U´- [ L+D8§Âjž•Ô”d‡„–šNÖ•WY F»Wÿ§ÿú ö˜©Ò"í}x?¿¿ø6¾ž«~ÁtƒÖ> ^½B$é§Zªd é“rÇÁF­!„а¢âÑ Á‚"á3‘OÕjòS‡oO`“wO+„DÙ éØ$^7Ýl&¡ç hXÿ²z޶º"|­ÎÅ AªW«x~k¢pÑ'vŸè0ƒ*ÆlfÌÌd7®»^ºP…ëõ rdµš¤·zÝÙÔ:MÖNýÛHîÕB "!eau%_Úúfqà ®“ðŸ»MBt—÷íÓ¥ôý; ÛNéª`„2qO™‚@×[ßÑ1á0M<ŽFdgšu]PÖ’‘´÷¯ü7_wÿv·vÊ.è¸ÚhCAƒ03fm ó×~ºq„Ð`‘Èÿ…}NÒ%}zùÆdjm¿ñ]Õ勵]Ó ´NµÜ\A„Bó.{úé„â-5¡]:a=4»YØä`#7bºë­?¨í‘ÅÿïÒÞßvJé6È®ØNÓqd™³f}ç*KUd³iÿT~\«Å¤…={†p÷ÿÿÿcÿû½®ûzoØN®]௰šÁ?s3õj´FõúµDÌL¡*¦:Uñ÷éûë_Çþ "Þ¯}Þ…"»dtiÅê!pgGr4ÏøÕ²#ôé»þP‘œÇ<Äê¸ÈßMUûÿ„V?ôE}ÿº¤ÇBí~û_xNÔŽ¼mÆÄZ`™™‚Ñ{ ©qú¥HUªa5PšášÈäs3G俦ªÿÿ°ÿòûëÕÞ­±UÇ_ôþïN¶Èàˆý†íńвŒÛ3̔։÷Ö«dG·©©iëvŸ¦i Âf ϳæxÏ=tšt«Òú×þúÿòbâw¤·þê¿_^ôÁ>®òpîIÝß ˆYôºK®Ú‘^NSã°¨ZaB¦šš Ó>ȇý$“k¶¶«o¥g×]ñ¢Y(×÷ÿÿ_Õ»LŽì‹X ›oé5'I:JªM­k%Å]^´Ð‹´Âi„Ó B_–Å &/¿í5Ó÷ýë|j ü_}/þ0ŸòOßJ›i§öK-4èÑ7éi_Z­1®ô!¯£åŽ –Õ}S ªv¤€¤á }ÒJ×h8a[I°—kõ扪õÁÿþ&××ütê¾ýW¾îõMªñ”˜þºÜ:¬‚[å­êB‘ÀÝ~âÓ¨$p Ìf™÷T•(€˜N±LSN!§¦­­?ÛØ{¯ó‰¨ÿ×ëýâÛKþÚV»Oû}WB«IS¥ºªJ)ŠÖºÃ² ”þMÒ ÑÕ>Má% ˜A„Á>³Fgâ$IZ™C‚i«Ó0ƒ °ÂOZwþ®hº×7ÿòVP꿪úvÁWô¾ÜȱaSK/®¿ý|UÒ ºÈàŠ=ña4‚}G°J¨ŒzZªké j|Žb" ÊÔ ÐdvŸî+x»Jû[_úió‹èG¯û¯¯÷éÂÈCe_„PëBŸ¯Ë›uðš¯^•) ð«êýy >Q¤è”~лi$èYøDDD˜@Ó†š§Ž% Sµ}ÿÝÿ„,}~¿i«<="º¦*’t=3¬.Ò]kÐUH$»¾¬5I6¡j’ÝòOúXé©;ÄÊÝEvPª×¨ô2DÓ+ R´ß´AÙ±œ2¬Î">Dzýd'¶;˜0?Õ(¢ùÞ‹ÈN¥å‡ §N»MfÈÉÙy6)äkf¤gúínø3½H“"ßëÒ ¾š´ºá„êMûÿ¦…êÀÀ!dš3Â~¢½;†ï;­úJG3þnî­ïÓÌŒ[×ïIý¦š¤IÛÿi‚"¹ 9.!z\‚»»%ì= ×ÐÕA‘èüšM4¿½´ë¿½%{×¼'}§µøµ‹D;‘Ù?(‚Ô鯎î¾Ó¸ôÐ9ãLåK*.×J. •}ÿûwJÜü ìˆîNÕ4ɽ«î@Á2&a5÷«ðáô5ð©Ú &`fc§M%¥­Øñ­Ò²:]´¿«wÐ[=0ƒOAÃnôè0@á rB÷¤âíý½$¿ábÐ:†ižÍ;×Qð¾ÿþú_C¥×÷ÓòWd¦ŸDáýÃò.GšÛþýr ½m-}0MBh4 Ñ ¿¤—ZÿºWt¯Ç¿Ó¯Õ=}$è¶i¡ =\Ú'Ï=ôJk"Çä½ëÒhZ„ÉlÌÆ})¼ÎúS¯Éç÷Kïu_¯_þ¿ÝúÛIé’;D‡lzˆ agȸüžÖþ‡UŠzC× ¡¨MSM:A„˜Ö—ºIß8–*N«wÿýÚý}ý}»RW ïñqz‚!< að½ ‹í¯KW"¹!ü”.í0¨Zmö¡5\éœÈÄG]®·Û¿ÔNâ¿ÿ´ïtÒ^®ºÒm“Â;{½á$í†ÌÂdJ¯ø_ia ×Ò#jT?ZÂfØBO%ÌõZyÿ^¿wuïøîÒÿÿïIÿk¦Ù¶E|BNœ*x"†²z×Õ[­dQÿÓ² ì&Ÿi¯¡qa3Ù¦Oú¶½|ÎÞ«ùpúê&ú×wúÿß~þÓ´¤î웽5L! !fE«ô’®•*ª]Y'"º .AÇþˆÇK®½¨A„Á4#ŒÃ7˜DHF.8¥v×ßÿá4Å{û[ëþ‡_%ººÝè2WD¯'}wi}'R1Únµ¥ß×R7î“!œr‡t—@ëU¦±hXA‚`˜TÂn>0»N¨`’moi{}è™Wó‰u‘\zÿ¿õï×¼ýõM×NédAèŒxëzH;Šî–+ê’ø©Á üˆé:]¢1ÿhDi¦d[¿nÆë}{ÿÚû7õÿéuý?ÿMºº[Óÿ»6‚}8¤®ÚJÂÛM®½iWé½}ª X{O 4 &T^ÓL0’iÃONCŠ-uKö÷þù/ ÿþ½ØïõõWë§ÖAØAvª…[Y×Io}Š×T•Y i$¹ªIÓQ ˆa(p«Ø¤ÂhXM8?í+õþ¿Î/¡þßÿÛÞ¿Ü/®û™otÅTa*Òm29­Vª—ÕV«Âß‘G ¡HG\iˆ¤"Ó»"¾Úpœzmôö·ú~ßøÿõ…µýâðÇõÞ’uP¢´é¸´’áÒjtG×ëÒK§h0ID”K ZÄDN6?Õ¸A§ôé:_×™ÿÿßò7õú  …RC£®VÿIP‡^«zÖÃÐM.÷U¦ˆØ´Ó ©éØí ¥{¯Ùïׯ´ ØëôJ:ÿŽ"Q°¨4£]Å1T¿­U*Z¤£×õD¹é Dé † Ó Žã ¬0UMSÿÿ.'ÿ šTGüÈb!„“¦M¦êµ×Ù„m×v°Þ«n…çM:KÕˆ‹ …µ¦Å Ó[_þØÕ¯õøMø†ˆÂ†´ÕH#Á4¢ÓK¸JªêÔVÒí^ Á O´ªž4ÓM5_õ~¯KýRÄpÂi¦ ™ÝW|ˆõ º]|Õ !­bV0¢"! Ðiý5PšiØ'WÚëëï²—Ê$ì“Aœp„C %=%µú§ë !A®Ñ“Zòc’žÅŠww·P›á4Ø4ì'éýëàâ"(&D5µÕ?¢ á5ZÅ+G–.°–m(A°±NE…¦œ[ÂÚi­§™¿nFˆˆC Ú}§ðEä‡õêÇ„"A†pÎlX„D Âd²ÐkŪl{濫!„!ôÂi„„:ëߦ$ÇcˆˆˆˆeÂdX$öDzi¶?A‹ †­ØLí5Õy6[$„A‚„Âwvö+à˜M0š‘m4ÓNát•:|ÙûJ‘„! 4íSR tÓ#aO "&E‰¼:Õa P™( ÛïA›ˆ1߆Oc¸ˆ0˜": & Ð'ýÌë|_o÷i¤ÛLË’ÿ»Qþ„ïØ È[ý”°¯Â­Ãá=¼Eïô‡anÙ œÝö¿ÒÅÝÓµð˜z’=¤«w´O#­¼Ì)¤mç´ÒÿÈZs%²…ˆú,}‚ <¸šDˆ í/dld¹ßû¦Åïª ³†xÌ eÙ§øîíÙ’rwý×//úÚÒ¡a  ù5õ÷´Ð4¨"³ûªîü(Ý~ÛPšT ÀΗ ³u^ßaðaþÿä¡h+|>´J)öê…„C(†~݆û×®=ü0 ‘+»[éÚ ).FÌÎ(a?}Ã%íÃ#†¿Ç¶ QÛÛîÕ«Ólîõh»TÖ "ÁÈP˨òñÝèÌh›þ«äW¬_öõõ#½<Š>^5nûá `Ÿ"äFŸõ{¾ëßßÓn×ïÿBÿM­ÁÞO.:.=„Ðq 3äpÎ31ëïí¥_O¢7Utß«Òû^û~–ÿAÃ&¬”4IÚ$û Úh0ƒ>fÌð9¡ÿ¾/­hý>÷þ½6š[ýzí{ïÓÂt›tFïÝ8µ0‡dr!/öñíô¾MßxE;¯á¥ÿê—î ÿÝVÚ·M²;Âvž¥ÛzL,YâD Ofåtëÿ_oo³ƒÿŠ’«i¥ïûuò_¯W¿U½„FôIÚݧ¬_¦P‡Zû÷õ°ÿ𫉜ß…ª¿¿moéßo÷dc¨N‚nJöEÆÒ¾Ð`ˆœJ ›) Á;¾öýÿÐOµKÿÈãÿ·üpÁ^붃«î—#»áð·úhP؆[Nûõ_³=wþ½Þÿñ~ÆþÚ¨Ö·OOï#´­î×Úp iß}ðzæs_Úý~¾ÿÿöšLu½¯ÕÿTß°‘îûêS½Z}²33?  ˆI°ÁawïúÚ¦¹¤]˜¢=ûyÙh4ÐfˆêfŒÎ K ¡{HB^þ©Žù>û´,ÀËäùüôGyB5DŒˆ_ø­·hðÓAœ Lˆgã^Bx‰/2]¯û)ÐieŽÐ÷u‚#«»VópÔæƒA§ö³ÛF‹ªØ6Fv Íƃ2ÄD?ß‹P{ݾ‡6…÷éÐ/hæsÏ"÷ù¦éÚé½÷J×[LÓMˆ°ÈúZýÊÏëë×íï}Þ¹Ó7úÜ3qÌú±qo}ÝÿoE»§F¦·ÅUN/ü¹ßßþëþ´®º§o1Ù¼Ÿ0›õï¯ý(N½ó];¥^ßôþªÿ·ýoí¾;cº°Üo׫Z~ëZz|5ÒV§Eÿ¯šÿWòêÿøù´6ßí¯°ïþý¾®›Å4 éÿ½ÿðÿ××õí·í†Ðm÷ÒWª{ºÿ¿î"ÃK¿Û¥ôÿÝ¿ÿÿ¿ï[l¼ÛãCXc‘#±^þ¾".ÿ°ïn=S×¾Ûýëëm¾ÛvËáß=b˜5-ß³O_ña ·3ÿó_ßw¯þß¾8"¡ûÔñ0ú{Ç'Zÿâ""".î/·}·t¿»Ûmí¥Ž)n­½TÃýTŽˆˆˆˆ´áÅûýnã2þ=P‡ v÷ëqTî©Î‰¦)2¡™¾…ûZµkQµÄDGœæò,-ý1Ci=Óø‹GØbØì{V"E¥QUSâ".ÓXˆÿÿÿÿÿÿÿÿÿ©Ó0Òüšâÿÿÿ®ÿÿ¿ÿê  à ä 䘖™L™T(%€ %€ leptonica-1.70/prog/char.tif0000444000175000017500000000035010172662506014076 0ustar dandanII**&¡£ä&`ƒÓÑËÓzÿ_]ÿÿ`‚ôö\xkacÿð!Øà(ÀÀleptonica-1.70/prog/morphtemplate1.txt0000644000175000017500000002005311707074233016163 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * --- * PIX *pixMorphDwa_*() --- * PIX *pixFMorphopGen_*() */ #include #include "allheaders.h" --- This file is: morphtemplate1.txt --- --- We need to include these prototypes: --- PIX *pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- PIX *pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- l_int32 fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * pixMorphDwa_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This simply adds a border, calls the appropriate * pixFMorphopGen_*(), and removes the border. * See the notes for that function. * (2) The size of the border depends on the operation * and the boundary conditions. */ PIX * --- pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixMorpDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); --- pixt2 = pixFMorphopGen_*(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * pixFMorphopGen_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This is a dwa operation, and the Sels must be limited in * size to not more than 31 pixels about the origin. * (2) A border of appropriate size (32 pixels, or 64 pixels * for safe closing with asymmetric b.c.) must be added before * this function is called. * (3) This handles all required setting of the border pixels * before erosion and dilation. * (4) The closing operation is safe; no pixels can be removed * near the boundary. */ PIX * --- pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFMorphopGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index + 1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index + 1); } pixDestroy(&pixt); } return pixd; } leptonica-1.70/prog/splitimage2pdf.c0000644000175000017500000001051312265772362015546 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * splitimage2pdf.c * * Syntax: splitimage2pdf filein nx ny fileout * * nx = number of horizontal tiles * ny = number of vertical tiles * * Generates pdf of image tiles. Rotates the image before * tiling if the tiles otherwise will have larger width than * height. */ #include "allheaders.h" /* fill factor on 8.5 x 11 inch output page */ static const l_float32 FILL_FACTOR = 0.95; int main(int argc, char **argv) { char *filein, *fileout, *fname; char buffer[512]; const char *psfile = "/tmp/junk_split_image.ps"; l_int32 nx, ny, i, w, h, d, ws, hs, n, res, ignore; l_float32 scale; PIX *pixs, *pixt, *pixr; PIXA *pixa; static char mainName[] = "splitimage2pdf"; if (argc != 5) return ERROR_INT(" Syntax: splitimage2pdf filein nx ny fileout", mainName, 1); filein = argv[1]; nx = atoi(argv[2]); ny = atoi(argv[3]); fileout = argv[4]; lept_rm(NULL, "junk_split_image.ps"); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); d = pixGetDepth(pixs); if (d == 1 ) lept_rm(NULL, "junk_split_image.tif"); else if (d == 8 || d == 32) lept_rm(NULL, "junk_split_image.jpg"); else return ERROR_INT("d not in {1,8,32} bpp", mainName, 1); pixGetDimensions(pixs, &ws, &hs, NULL); if (ny * ws > nx * hs) pixr = pixRotate90(pixs, 1); else pixr = pixClone(pixs); pixa = pixaSplitPix(pixr, nx, ny, 0, 0); n = pixaGetCount(pixa); res = 300; for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); scale = L_MIN(FILL_FACTOR * 2550 / w, FILL_FACTOR * 3300 / h); fname = NULL; if (d == 1) { fname = genPathname("/tmp", "junk_split_image.tif"); pixWrite(fname, pixt, IFF_TIFF_G4); if (i == 0) { convertG4ToPS(fname, psfile, "w", 0, 0, 300, scale, 1, FALSE, TRUE); } else { convertG4ToPS(fname, psfile, "a", 0, 0, 300, scale, 1, FALSE, TRUE); } } else { fname = genPathname("/tmp", "junk_split_image.jpg"); pixWrite(fname, pixt, IFF_JFIF_JPEG); if (i == 0) { convertJpegToPS(fname, psfile, "w", 0, 0, 300, scale, 1, TRUE); } else { convertJpegToPS(fname, psfile, "a", 0, 0, 300, scale, 1, TRUE); } } lept_free(fname); pixDestroy(&pixt); } sprintf(buffer, "ps2pdf %s %s", psfile, fileout); ignore = system(buffer); pixaDestroy(&pixa); pixDestroy(&pixr); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/translate_reg.c0000644000175000017500000001347012240302352015450 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * translate_reg.c * * Regression test for in-place translation */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define GRAYSCALE_IMAGE "test8.jpg" #define FOUR_BPP_IMAGE "weasel4.8g.png" #define COLORMAP_IMAGE "dreyfus8.png" #define RGB_IMAGE "marge.jpg" void TranslateAndSave1(PIXA *pixa, l_int32 depth, PIX *pix, l_int32 xshift, l_int32 yshift); void TranslateAndSave2(PIXA *pixa, PIX *pix, l_int32 xshift, l_int32 yshift); int main(int argc, char **argv) { BOX *box; PIX *pixs, *pixd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Set up images */ pix1 = pixRead("weasel2.4c.png"); pix2 = pixScaleBySampling(pix1, 3.0, 3.0); box = boxCreate(0, 0, 209, 214); pixs = pixClipRectangle(pix2, box, NULL); pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box); pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pix2 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pix3 = pixConvertTo1(pixs, 128); pix4 = pixRotateAM(pix1, 0.25, L_BRING_IN_BLACK); pix5 = pixRotateAM(pix1, -0.25, L_BRING_IN_WHITE); pix6 = pixRotateAM(pix2, -0.15, L_BRING_IN_BLACK); pix7 = pixRotateAM(pix2, +0.15, L_BRING_IN_WHITE); pixa = pixaCreate(0); TranslateAndSave1(pixa, 32, pixs, 30, 30); TranslateAndSave1(pixa, 32, pix1, 35, 20); TranslateAndSave1(pixa, 32, pix2, 20, 35); TranslateAndSave1(pixa, 32, pix3, 20, 35); pixd = pixaDisplayOnColor(pixa, 0, 0, 0x44aaaa00); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixd, 0, 0, "trans0", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixa = pixaCreate(0); TranslateAndSave1(pixa, 8, pix1, 35, 20); TranslateAndSave1(pixa, 8, pix4, 35, 20); pixd = pixaDisplayOnColor(pixa, 0, 0, 0x44); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 250, 0, "trans1", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixa = pixaCreate(0); TranslateAndSave2(pixa, pixs, 30, 30); TranslateAndSave2(pixa, pix1, 30, 30); TranslateAndSave2(pixa, pix2, 35, 20); TranslateAndSave2(pixa, pix3, 20, 35); TranslateAndSave2(pixa, pix4, 25, 25); TranslateAndSave2(pixa, pix5, 25, 25); TranslateAndSave2(pixa, pix6, 25, 25); TranslateAndSave2(pixa, pix7, 25, 25); pixd = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 30, 3); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixd, 500, 0, "trans2", rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); return regTestCleanup(rp); } void TranslateAndSave1(PIXA *pixa, l_int32 depth, PIX *pix, l_int32 xshift, l_int32 yshift) { PIX *pix1, *pix2, *pix3, *pix4; pix1 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_WHITE); pix2 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_BLACK); pix3 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_WHITE); pix4 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_BLACK); pixSaveTiled(pix1, pixa, 1.0, 1, 25, depth); pixSaveTiled(pix2, pixa, 1.0, 0, 25, depth); pixSaveTiled(pix3, pixa, 1.0, 0, 25, depth); pixSaveTiled(pix4, pixa, 1.0, 0, 25, depth); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return; } void TranslateAndSave2(PIXA *pixa, PIX *pix, l_int32 xshift, l_int32 yshift) { PIX *pix1, *pix2, *pix3, *pix4; pix1 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_WHITE); pix2 = pixTranslate(NULL, pix, xshift, yshift, L_BRING_IN_BLACK); pix3 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_WHITE); pix4 = pixTranslate(NULL, pix, -xshift, -yshift, L_BRING_IN_BLACK); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix3, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); return; } leptonica-1.70/prog/ioformats_reg.c0000664000175000017500000006500512267066665015510 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ioformats_reg.c * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * This is the primary Leptonica regression test for lossless * read/write I/O to standard image files (png, tiff, bmp, etc.) * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * This tests reading and writing of images in different formats * It should work properly on input images of any depth, with * and without colormaps. * * The first part of the test works by doing a write/read and * testing the result for equality. We only test the lossless * file formats, with pix of various depths, both with and * without colormaps. Because jpeg works fine on grayscale * and rgb, there is no need for explicit tests on jpeg * compression here. * * The second part tests all different tiff compressions, for * read/write that is backed both by file and by memory. * For r/w to file, it is actually redundant with the first part.) * * This test is dependent on the following external libraries: * libjpeg, libtiff, libpng, libz * * TODO (1/28/11): Set up a jpegio_reg.c set of tests * and include the following: * (1) different color spaces; e.g., CYYK * (2) colormapped images, which jpeg can handle * (3) no chroma subsampling */ #include "allheaders.h" /* Needed for checking libraries */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #define BMP_FILE "test1.bmp" #define FILE_1BPP "feyn.tif" #define FILE_2BPP "speckle2.png" #define FILE_2BPP_C "weasel2.4g.png" #define FILE_4BPP "speckle4.png" #define FILE_4BPP_C "weasel4.16c.png" #define FILE_8BPP_1 "dreyfus8.png" #define FILE_8BPP_2 "weasel8.240c.png" #define FILE_8BPP_3 "test8.jpg" #define FILE_16BPP "test16.tif" #define FILE_32BPP "marge.jpg" #define FILE_32BPP_ALPHA "test32-alpha.png" #define FILE_CMAP_ALPHA "test-cmap-alpha.png" #define FILE_TRANS_ALPHA "test-fulltrans-alpha.png" #define FILE_GRAY_ALPHA "test-gray-alpha.png" static l_int32 testcomp(const char *filename, PIX *pix, l_int32 comptype); static l_int32 testcomp_mem(PIX *pixs, PIX **ppixt, l_int32 index, l_int32 format); static l_int32 test_writemem(PIX *pixs, l_int32 format, char *psfile); static PIX *make_24_bpp_pix(PIX *pixs); static l_int32 get_header_data(const char *filename, l_int32 true_format); static void get_tiff_compression_name(char *buf, l_int32 format); LEPT_DLL extern const char *ImageFileFormatExtensions[]; int main(int argc, char **argv) { char psname[256]; char *tempname; l_uint8 *data; l_int32 i, d, n, success, failure, same; l_int32 w, h, bps, spp; size_t size, nbytes; PIX *pix1, *pix2, *pix4, *pix8, *pix16, *pix32; PIX *pix, *pixt, *pixd; PIXA *pixa; L_REGPARAMS *rp; #if !HAVE_LIBJPEG fprintf(stderr, "Omitting libjpeg tests in ioformats_reg\n"); #endif /* !HAVE_LIBJPEG */ #if !HAVE_LIBTIFF fprintf(stderr, "Omitting libtiff tests in ioformats_reg\n"); #endif /* !HAVE_LIBTIFF */ #if !HAVE_LIBPNG || !HAVE_LIBZ fprintf(stderr, "Omitting libpng tests in ioformats_reg\n"); #endif /* !HAVE_LIBPNG || !HAVE_LIBZ */ if (regTestSetup(argc, argv, &rp)) return 1; /* --------- Part 1: Test all lossless formats for r/w to file ---------*/ failure = FALSE; success = TRUE; fprintf(stderr, "Test bmp 1 bpp file:\n"); if (ioFormatTest(BMP_FILE)) success = FALSE; #if HAVE_LIBTIFF fprintf(stderr, "\nTest other 1 bpp file:\n"); if (ioFormatTest(FILE_1BPP)) success = FALSE; #endif /* HAVE_LIBTIFF */ #if HAVE_LIBPNG fprintf(stderr, "\nTest 2 bpp file:\n"); if (ioFormatTest(FILE_2BPP)) success = FALSE; fprintf(stderr, "\nTest 2 bpp file with cmap:\n"); if (ioFormatTest(FILE_2BPP_C)) success = FALSE; fprintf(stderr, "\nTest 4 bpp file:\n"); if (ioFormatTest(FILE_4BPP)) success = FALSE; fprintf(stderr, "\nTest 4 bpp file with cmap:\n"); if (ioFormatTest(FILE_4BPP_C)) success = FALSE; fprintf(stderr, "\nTest 8 bpp grayscale file with cmap:\n"); if (ioFormatTest(FILE_8BPP_1)) success = FALSE; fprintf(stderr, "\nTest 8 bpp color file with cmap:\n"); if (ioFormatTest(FILE_8BPP_2)) success = FALSE; #endif /* HAVE_LIBPNG */ #if HAVE_LIBJPEG fprintf(stderr, "\nTest 8 bpp file without cmap:\n"); if (ioFormatTest(FILE_8BPP_3)) success = FALSE; #endif /* HAVE_LIBJPEG */ #if HAVE_LIBTIFF fprintf(stderr, "\nTest 16 bpp file:\n"); if (ioFormatTest(FILE_16BPP)) success = FALSE; #endif /* HAVE_LIBTIFF */ #if HAVE_LIBJPEG fprintf(stderr, "\nTest 32 bpp files:\n"); if (ioFormatTest(FILE_32BPP)) success = FALSE; if (ioFormatTest(FILE_32BPP_ALPHA)) success = FALSE; #endif /* HAVE_LIBJPEG */ #if HAVE_LIBPNG && HAVE_LIBJPEG fprintf(stderr, "\nTest spp = 1, cmap with alpha file:\n"); if (ioFormatTest(FILE_CMAP_ALPHA)) success = FALSE; fprintf(stderr, "\nTest spp = 1, fully transparent with alpha file:\n"); if (ioFormatTest(FILE_TRANS_ALPHA)) success = FALSE; fprintf(stderr, "\nTest spp = 2, gray with alpha file:\n"); if (ioFormatTest(FILE_GRAY_ALPHA)) success = FALSE; #endif /* HAVE_LIBJPEG */ if (success) fprintf(stderr, "\n ********** Success on all i/o format tests *********\n"); else fprintf(stderr, "\n ******* Failure on at least one i/o format test ******\n"); if (!success) failure = TRUE; /* ------------------ Part 2: Test tiff r/w to file ------------------- */ #if !HAVE_LIBTIFF fprintf(stderr, "\nNo libtiff. Skipping:\n" " part 2 (tiff r/w)\n" " part 3 (tiff r/w to memory)\n" " part 4 (non-tiff r/w to memory)\n" " part 5 (multipage tiff r/w to memory)\n\n"); goto part6; #endif /* !HAVE_LIBTIFF */ fprintf(stderr, "\nTest tiff r/w and format extraction\n"); pixa = pixaCreate(6); pix1 = pixRead(BMP_FILE); pix2 = pixConvert1To2(NULL, pix1, 3, 0); pix4 = pixConvert1To4(NULL, pix1, 15, 0); pix16 = pixRead(FILE_16BPP); fprintf(stderr, "Input format: %d\n", pixGetInputFormat(pix16)); pix8 = pixConvert16To8(pix16, 1); pix32 = pixRead(FILE_32BPP); pixaAddPix(pixa, pix1, L_INSERT); pixaAddPix(pixa, pix2, L_INSERT); pixaAddPix(pixa, pix4, L_INSERT); pixaAddPix(pixa, pix8, L_INSERT); pixaAddPix(pixa, pix16, L_INSERT); pixaAddPix(pixa, pix32, L_INSERT); n = pixaGetCount(pixa); success = (n < 6) ? FALSE : TRUE; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { success = FALSE; continue; } d = pixGetDepth(pix); fprintf(stderr, "%d bpp\n", d); if (i == 0) { /* 1 bpp */ pixWrite("/tmp/junkg3.tif", pix, IFF_TIFF_G3); pixWrite("/tmp/junkg4.tif", pix, IFF_TIFF_G4); pixWrite("/tmp/junkrle.tif", pix, IFF_TIFF_RLE); pixWrite("/tmp/junkpb.tif", pix, IFF_TIFF_PACKBITS); if (testcomp("/tmp/junkg3.tif", pix, IFF_TIFF_G3)) success = FALSE; if (testcomp("/tmp/junkg4.tif", pix, IFF_TIFF_G4)) success = FALSE; if (testcomp("/tmp/junkrle.tif", pix, IFF_TIFF_RLE)) success = FALSE; if (testcomp("/tmp/junkpb.tif", pix, IFF_TIFF_PACKBITS)) success = FALSE; } pixWrite("/tmp/junklzw.tif", pix, IFF_TIFF_LZW); pixWrite("/tmp/junkzip.tif", pix, IFF_TIFF_ZIP); pixWrite("/tmp/junknon.tif", pix, IFF_TIFF); if (testcomp("/tmp/junklzw.tif", pix, IFF_TIFF_LZW)) success = FALSE; if (testcomp("/tmp/junkzip.tif", pix, IFF_TIFF_ZIP)) success = FALSE; if (testcomp("/tmp/junknon.tif", pix, IFF_TIFF)) success = FALSE; pixDestroy(&pix); } if (success) fprintf(stderr, "\n ********** Success on tiff r/w to file *********\n\n"); else fprintf(stderr, "\n ******* Failure on at least one tiff r/w to file ******\n\n"); if (!success) failure = TRUE; /* ------------------ Part 3: Test tiff r/w to memory ----------------- */ success = (n < 6) ? FALSE : TRUE; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { success = FALSE; continue; } d = pixGetDepth(pix); fprintf(stderr, "%d bpp\n", d); if (i == 0) { /* 1 bpp */ pixWriteMemTiff(&data, &size, pix, IFF_TIFF_G3); nbytes = nbytesInFile("/tmp/junkg3.tif"); fprintf(stderr, "nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_G3)) success = FALSE; lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_G4); nbytes = nbytesInFile("/tmp/junkg4.tif"); fprintf(stderr, "nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_G4)) success = FALSE; readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp, NULL, NULL, NULL); fprintf(stderr, "(w,h,bps,spp) = (%d,%d,%d,%d)\n", w, h, bps, spp); lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_RLE); nbytes = nbytesInFile("/tmp/junkrle.tif"); fprintf(stderr, "nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_RLE)) success = FALSE; lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_PACKBITS); nbytes = nbytesInFile("/tmp/junkpb.tif"); fprintf(stderr, "nbytes = %lu, size = %lu\n", (unsigned long)nbytes, (unsigned long)size); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_PACKBITS)) success = FALSE; lept_free(data); } pixWriteMemTiff(&data, &size, pix, IFF_TIFF_LZW); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_LZW)) success = FALSE; lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF_ZIP); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF_ZIP)) success = FALSE; readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp, NULL, NULL, NULL); fprintf(stderr, "(w,h,bps,spp) = (%d,%d,%d,%d)\n", w, h, bps, spp); lept_free(data); pixWriteMemTiff(&data, &size, pix, IFF_TIFF); pixt = pixReadMemTiff(data, size, 0); if (testcomp_mem(pix, &pixt, i, IFF_TIFF)) success = FALSE; lept_free(data); pixDestroy(&pix); } if (success) fprintf(stderr, "\n ********** Success on tiff r/w to memory *********\n\n"); else fprintf(stderr, "\n ******* Failure on at least one tiff r/w to memory ******\n\n"); if (!success) failure = TRUE; /* ---------------- Part 4: Test non-tiff r/w to memory ---------------- */ pixDisplayWrite(NULL, -1); success = (n < 6) ? FALSE : TRUE; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { success = FALSE; continue; } d = pixGetDepth(pix); sprintf(psname, "/tmp/junkps.%d", d); fprintf(stderr, "%d bpp\n", d); if (d != 16) { if (test_writemem(pix, IFF_PNG, NULL)) success = FALSE; if (test_writemem(pix, IFF_BMP, NULL)) success = FALSE; } if (test_writemem(pix, IFF_PNM, NULL)) success = FALSE; if (test_writemem(pix, IFF_PS, psname)) success = FALSE; if (d == 8 || d == 32) if (test_writemem(pix, IFF_JFIF_JPEG, NULL)) success = FALSE; pixDestroy(&pix); } if (success) fprintf(stderr, "\n ********** Success on non-tiff r/w to memory *********\n\n"); else fprintf(stderr, "\n **** Failure on at least one non-tiff r/w to memory *****\n\n"); if (!success) failure = TRUE; pixaDestroy(&pixa); /* ------------ Part 5: Test multipage tiff r/w to memory ------------ */ /* Make a multipage tiff file, and read it back into memory */ pix = pixRead("feyn.tif"); pixa = pixaSplitPix(pix, 3, 3, 0, 0); for (i = 0; i < 9; i++) { if ((pixt = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; if (i == 0) pixWriteTiff("/tmp/junktiffmpage.tif", pixt, IFF_TIFF_G4, "w"); else pixWriteTiff("/tmp/junktiffmpage.tif", pixt, IFF_TIFF_G4, "a"); pixDestroy(&pixt); } data = l_binaryRead("/tmp/junktiffmpage.tif", &nbytes); pixaDestroy(&pixa); /* Read the individual pages from memory to a pix */ pixa = pixaCreate(9); for (i = 0; i < 9; i++) { pixt = pixReadMemTiff(data, nbytes, i); pixaAddPix(pixa, pixt, L_INSERT); } lept_free(data); /* Un-tile the pix in the pixa back to the original image */ pixt = pixaDisplayUnsplit(pixa, 3, 3, 0, 0); pixaDestroy(&pixa); /* Clip to foreground to remove any extra rows or columns */ pixClipToForeground(pix, &pix1, NULL); pixClipToForeground(pixt, &pix2, NULL); pixEqual(pix1, pix2, &same); if (same) fprintf(stderr, "\n ******* Success on tiff multipage read from memory ******\n\n"); else fprintf(stderr, "\n ******* Failure on tiff multipage read from memory ******\n\n"); if (!same) failure = TRUE; pixDestroy(&pix); pixDestroy(&pixt); pixDestroy(&pix1); pixDestroy(&pix2); /* ------------ Part 6: Test 24 bpp writing ------------ */ #if !HAVE_LIBTIFF part6: #endif /* !HAVE_LIBTIFF */ #if !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF fprintf(stderr, "Missing libpng, libjpeg or libtiff. Skipping:\n" " part 6 (24 bpp r/w)\n" " part 7 (header read)\n\n"); goto finish; #endif /* !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF */ /* Generate a 24 bpp (not 32 bpp !!) rgb pix and write it out */ success = TRUE; if ((pix = pixRead("marge.jpg")) == NULL) success = FALSE; pixt = make_24_bpp_pix(pix); pixWrite("/tmp/junk24.png", pixt, IFF_PNG); pixWrite("/tmp/junk24.jpg", pixt, IFF_JFIF_JPEG); pixWrite("/tmp/junk24.tif", pixt, IFF_TIFF); pixd = pixRead("/tmp/junk24.png"); pixEqual(pix, pixd, &same); if (same) { fprintf(stderr, " **** success writing 24 bpp png ****\n"); } else { fprintf(stderr, " **** failure writing 24 bpp png ****\n"); success = FALSE; } pixDestroy(&pixd); pixd = pixRead("/tmp/junk24.jpg"); regTestCompareSimilarPix(rp, pix, pixd, 10, 0.0002, 0); pixDestroy(&pixd); pixd = pixRead("/tmp/junk24.tif"); pixEqual(pix, pixd, &same); if (same) { fprintf(stderr, " **** success writing 24 bpp tif ****\n"); } else { fprintf(stderr, " **** failure writing 24 bpp tif ****\n"); success = FALSE; } pixDestroy(&pixd); if (success) fprintf(stderr, "\n ******* Success on 24 bpp rgb writing *******\n\n"); else fprintf(stderr, "\n ******* Failure on 24 bpp rgb writing *******\n\n"); if (!success) failure = TRUE; pixDestroy(&pix); pixDestroy(&pixt); /* -------------- Part 7: Read header information -------------- */ success = TRUE; if (get_header_data(FILE_1BPP, IFF_TIFF_G4)) success = FALSE; if (get_header_data(FILE_2BPP, IFF_PNG)) success = FALSE; if (get_header_data(FILE_2BPP_C, IFF_PNG)) success = FALSE; if (get_header_data(FILE_4BPP, IFF_PNG)) success = FALSE; if (get_header_data(FILE_4BPP_C, IFF_PNG)) success = FALSE; if (get_header_data(FILE_8BPP_1, IFF_PNG)) success = FALSE; if (get_header_data(FILE_8BPP_2, IFF_PNG)) success = FALSE; if (get_header_data(FILE_8BPP_3, IFF_JFIF_JPEG)) success = FALSE; if (get_header_data(FILE_GRAY_ALPHA, IFF_PNG)) success = FALSE; if (get_header_data(FILE_16BPP, IFF_TIFF_ZIP)) success = FALSE; if (get_header_data(FILE_32BPP, IFF_JFIF_JPEG)) success = FALSE; if (get_header_data(FILE_32BPP_ALPHA, IFF_PNG)) success = FALSE; pix = pixRead(FILE_8BPP_1); tempname = genTempFilename((const char *)"/tmp", (const char *)".pnm", 1, 1); pixWrite(tempname, pix, IFF_PNM); if (get_header_data(tempname, IFF_PNM)) success = FALSE; pixDestroy(&pix); lept_free(tempname); pix = pixRead(FILE_1BPP); tempname = genTempFilename((const char *)"/tmp", (const char *)".tif", 1, 1); pixWrite(tempname, pix, IFF_TIFF_G3); if (get_header_data(tempname, IFF_TIFF_G3)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_G4); if (get_header_data(tempname, IFF_TIFF_G4)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_PACKBITS); if (get_header_data(tempname, IFF_TIFF_PACKBITS)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_RLE); if (get_header_data(tempname, IFF_TIFF_RLE)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_LZW); if (get_header_data(tempname, IFF_TIFF_LZW)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF_ZIP); if (get_header_data(tempname, IFF_TIFF_ZIP)) success = FALSE; pixWrite(tempname, pix, IFF_TIFF); if (get_header_data(tempname, IFF_TIFF)) success = FALSE; pixDestroy(&pix); lept_free(tempname); if (success) fprintf(stderr, "\n ******* Success on reading headers *******\n\n"); else fprintf(stderr, "\n ******* Failure on reading headers *******\n\n"); if (!success) failure = TRUE; #if !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF finish: #endif /* !HAVE_LIBPNG || !HAVE_LIBJPEG || !HAVE_LIBTIFF */ if (!failure) fprintf(stderr, " ******* Success on all tests *******\n\n"); else fprintf(stderr, " ******* Failure on at least one test *******\n\n"); return regTestCleanup(rp); } /* Returns 1 on error */ static l_int32 testcomp(const char *filename, PIX *pix, l_int32 comptype) { l_int32 format, sameformat, sameimage; FILE *fp; PIX *pixt; fp = lept_fopen(filename, "rb"); findFileFormatStream(fp, &format); sameformat = TRUE; if (format != comptype) { fprintf(stderr, "File %s has format %d, not comptype %d\n", filename, format, comptype); sameformat = FALSE; } lept_fclose(fp); pixt = pixRead(filename); pixEqual(pix, pixt, &sameimage); pixDestroy(&pixt); if (!sameimage) fprintf(stderr, "Write/read fail for file %s with format %d\n", filename, format); return (!sameformat || !sameimage); } /* Returns 1 on error */ static l_int32 testcomp_mem(PIX *pixs, PIX **ppixt, l_int32 index, l_int32 format) { l_int32 sameimage; PIX *pixt; pixt = *ppixt; pixEqual(pixs, pixt, &sameimage); if (!sameimage) fprintf(stderr, "Mem Write/read fail for file %d with format %d\n", index, format); pixDestroy(&pixt); *ppixt = NULL; return (!sameimage); } /* Returns 1 on error */ static l_int32 test_writemem(PIX *pixs, l_int32 format, char *psfile) { l_uint8 *data = NULL; l_int32 same; size_t size = 0; PIX *pixd = NULL; if (format == IFF_PS) { pixWriteMemPS(&data, &size, pixs, NULL, 0, 1.0); l_binaryWrite(psfile, "w", data, size); lept_free(data); return 0; } /* Fail silently if library is not available */ #if !HAVE_LIBJPEG if (format == IFF_JFIF_JPEG) return 0; #endif /* !HAVE_LIBJPEG */ #if !HAVE_LIBPNG if (format == IFF_PNG) return 0; #endif /* !HAVE_LIBPNG */ #if !HAVE_LIBTIFF if (format == IFF_TIFF) return 0; #endif /* !HAVE_LIBTIFF */ if (pixWriteMem(&data, &size, pixs, format)) { fprintf(stderr, "Mem write fail for format %d\n", format); return 1; } if ((pixd = pixReadMem(data, size)) == NULL) { fprintf(stderr, "Mem read fail for format %d\n", format); lept_free(data); return 1; } if (format == IFF_JFIF_JPEG) { fprintf(stderr, "jpeg size = %lu\n", (unsigned long)size); pixDisplayWrite(pixd, 1); same = TRUE; } else { pixEqual(pixs, pixd, &same); if (!same) fprintf(stderr, "Mem write/read fail for format %d\n", format); } pixDestroy(&pixd); lept_free(data); return (!same); } /* Composes 24 bpp rgb pix */ static PIX * make_24_bpp_pix(PIX *pixs) { l_int32 i, j, w, h, wpls, wpld, rval, gval, bval; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 24); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); *((l_uint8 *)lined + 3 * j) = rval; *((l_uint8 *)lined + 3 * j + 1) = gval; *((l_uint8 *)lined + 3 * j + 2) = bval; } } return pixd; } /* Retrieve header data from file */ static l_int32 get_header_data(const char *filename, l_int32 true_format) { char buf[64]; l_uint8 *data; l_int32 ret1, ret2, format1, format2; l_int32 w1, w2, h1, h2, d1, d2, bps1, bps2, spp1, spp2, iscmap1, iscmap2; size_t size1, size2; /* Fail silently if library is not available */ #if !HAVE_LIBJPEG if (true_format == IFF_JFIF_JPEG) return 0; #endif /* !HAVE_LIBJPEG */ #if !HAVE_LIBPNG if (true_format == IFF_PNG) return 0; #endif /* !HAVE_LIBPNG */ #if !HAVE_LIBTIFF if (true_format == IFF_TIFF_G3 || true_format == IFF_TIFF_G4 || true_format == IFF_TIFF_ZIP || true_format == IFF_TIFF_LZW || true_format == IFF_TIFF_PACKBITS || true_format == IFF_TIFF_RLE || true_format == IFF_TIFF) return 0; #endif /* !HAVE_LIBTIFF */ /* Read header from file */ size1 = nbytesInFile(filename); ret1 = pixReadHeader(filename, &format1, &w1, &h1, &bps1, &spp1, &iscmap1); d1 = bps1 * spp1; if (d1 == 24) d1 = 32; if (ret1) fprintf(stderr, "Error: couldn't read header data: %s\n", filename); else { if (format1 > IFF_PNG && format1 < IFF_PNM) { get_tiff_compression_name(buf, format1); fprintf(stderr, "Format data for image %s with format %s:\n" " nbytes = %lu, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", filename, buf, (unsigned long)size1, w1, h1, d1, bps1, spp1, iscmap1); } else { fprintf(stderr, "Format data for image %s with format %s:\n" " nbytes = %lu, size (w, h, d) = (%d, %d, %d)\n" " bps = %d, spp = %d, iscmap = %d\n", filename, ImageFileFormatExtensions[format1], (unsigned long)size1, w1, h1, d1, bps1, spp1, iscmap1); } if (format1 != true_format) { fprintf(stderr, "Error: format is %d; should be %d\n", format1, true_format); ret1 = 1; } } /* Read header from array in memory */ data = l_binaryRead(filename, &size2); ret2 = pixReadHeaderMem(data, size2, &format2, &w2, &h2, &bps2, &spp2, &iscmap2); lept_free(data); d2 = bps2 * spp2; if (d2 == 24) d2 = 32; if (ret2) fprintf(stderr, "Error: couldn't mem-read header data: %s\n", filename); else { if (size1 != size2 || format1 != format2 || w1 != w2 || h1 != h2 || d1 != d2 || bps1 != bps2 || spp1 != spp2 || iscmap1 != iscmap2) { fprintf(stderr, "Incomsistency reading image %s with format %s\n", filename, buf); ret2 = 1; } } return ret1 || ret2; } static void get_tiff_compression_name(char *buf, l_int32 format) { if (format == IFF_TIFF_G4) sprintf(buf, "tiff_g4"); else if (format == IFF_TIFF_G3) sprintf(buf, "tiff_g3"); else if (format == IFF_TIFF_ZIP) sprintf(buf, "tiff_zip"); else if (format == IFF_TIFF_LZW) sprintf(buf, "tiff_lzw"); else if (format == IFF_TIFF_RLE) sprintf(buf, "tiff_rle"); else if (format == IFF_TIFF_PACKBITS) sprintf(buf, "tiff_packbits"); else if (format == IFF_TIFF) sprintf(buf, "tiff_uncompressed"); else fprintf(stderr, "format %d: not tiff\n", format); return; } leptonica-1.70/prog/projectionstats.jpg0000444000175000017500000000636311455511247016424 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ5é"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?é‚îo¥r^%¾ºT’$—ljãåÍu©Èw Wâe)¬Î¿îÿè"€7tK©n4èžVËr:c¡­e<£ñ¬mcIƒŒgwó5¹ã¹  ìmüíAU˜í*:}Ms~4º¸±ñ‚Ö_.5‰ CuÏ­tVò2]é´æjŽ4Ñ{aýª§  p8Ësü¨‰•û‚VRØ8?"õü©N©¨…;¤éß`ÿ ÐðÕèŠImŠgÌüøWNŸ78ê;Ð- ê7—ÖÉe žYà€==+§×¤ko µÔ`‰þЪ äƒÚž°v¬ n*GQV|coåx:2}úÐ3áýN{ Ë9i8Àǧø×FX“Ô×)ᘰfrsóãôÕ©àPMŸ%°qÁ§ÏsM—˜_ýÓJO<dd¬1àó´T–ˆ%‰žvŽi‘ŸÜÇþèþUwG+çÁ¸®08c€x  :½ÌžòÜ6WaåÇœc#ŒþF¸‹zöæRéµw«œ}sZÞ3Šþ÷ÄÓù[”#¢–EÿÕÑl£µµŽ3;ó£$Ð9câi’eK„ §ê0Et¶· pZBûƒF óŽ9¬ßè‰d–÷ñ.ØçU ¸ÆçÐ{Rød»Ù"¶H?ïé`‚4ÓžêáØB œއ֏ÍCÅ;ïdŠÎÙ<”<»±mß•oøÊóìþ¶´ƒ#8ôË…sÞÓã¸ÿI¸Q(9 Žhm¼Ss“»‡ôÚ¤›®¦OÊ:~5µhËwÚ|ƒ+4Œã;°•s:lk¬ ¬J ~u·§Hè8ç ?‰ >Ô-[DפŒœy3uÁ!éúê-'ó F« ƒíVü{¤ý³M´AKÅ´HOR¼ð®cÃ×Á£‡9BN§ù4ÖZñy{ƒüÅ\ñÐÏ‚ÂúKgÛ?úT8ô<~"­xÐOÿkÉ;)„Í@?Jä|2PA:–äIýt«"烚à-tû«ð~Ím½r@½ýè¸Óõ3ç“taó+èh½™ÿu'û§ùTʹ5Ëèú»ÏÙ'lÍ´€ßÞgÒºËc‰7gæÇ×Wzª*g:>J¸FN3Šàµ$’m~bÜÈf<ç¶î?Jô ,Ãe¸#ËPÙx ±*FáÉ-³eñŒrr'¾½‡Äw°Åu$PFøTV t¶>(žÞŽH Σ‡ó1ÏÓÖüA•G…lá'ç3ÆÀûaX¾`c„g=ô&®vöòû^Ôy 8ÀFn“]^jÖ‘Å`ãnO¿Z§ã×?j²\Ë ßøûŠO H²X&Ü,ùüjß-Y#³»'åÚ~o\l–Ò3ÛÊËëÒ€=Ä÷‰‚E«šfÈ?G_ð®SÂãl’°ìyü«.V¿ÔåS,¯3Àfá~•ÑékX|®FâI8ü(«û zÞ‘q§9ÃÁëüÅy¬‰u£jŒŽ¸•H#¨Ü1ÿׯC‚smtz)ÀükCYÑm|Mb[·ˆ—+‘ßúP/aô%â8ÿg9ÅhÀW=sùŠá/-/ô=D#“ U9ÝǯÐ×Q¥jÞÇÆXàýEoL¸“wjÊÛïZNw©¬­Þôz"¬ªvòH®3Äç:äã Oþ:+´^0Šâ|Ns¬\v)ÏüPI¥|º}¶:yjJÐ9VF—jl-ÔÜÄF Øè*ð½€çý&,cûâ€&EÄîF>è=>µ$RîGæj8š9Cmã§#<Ô’IµÀ°ˆùjpçë@öꚎ—-›à‰ ïŠò{ëwÐ|I5»ü¦)H;{©ÿõŠîá¿Y%U î"¹ß›[ÖKôtk‚7õëÏò  [‘*A(ÁS#ô­/É¿À(p9š?ë\o†¯I”Z3±Xįø×WâÉ ð `sþ’ƒùÐ=á¦Å†6à–<úò+«ŠÎ-FÊê YLMá þ•ÊxdƒiÄŠ[yùAäs]νk¥X\“q¸tdHÁËdŒr(€Úë¢1ü´gw"»ØœìZàì–KÝU¦ œ³HÍŽüÿw0¯€!‰•D»öŒ¶9­0.í¶ç9óíT#‰GÝʵt6Tžcü?Ò€8Æbñ~¤q÷‚°ÿ¾V´ôË[Y¬-|ËXYŒ#$ƹéQ|HŒÿÂLÎ<ÈþŸýjw‡®#m: H›Ñ $Åi¥¤QgÊ‚4ÕŸ„/Aýiâh‚’]Ï<Ôk$mrì‘°.GâhCÄ6o©x!öa¤·†ÔÝøŸH‹^Ð%¾Œ"][F͸õ sÛèkÌô{‘o©Û…Y$®}+½½ñ-•—‡ïmEÂ4³!EDäàñýMpl&MZÜD7Ü>™ DËÆ[ÔVFG­k¹‹o§zÉÅi†Ý0SÜÿZã¼GþܸÀ8øè¢ŠÅcL£°9ÆriRY²?züŸï( §ÂSJèèò37¹ÍCãYe Œ,®[ÇòƒüTQ@ê\\g"âQÏ÷1䑉2Hσ˜š(  O øžÏü²<ß5Ùø°ð2ç7PŸG,° Ã4‘g“å¹^ÞÔõO´iÞI uflŸÌÑEu}”öÁcNY =ke ( OõIì\ÒÜ«ÀF3´QEaüGŒ›kƒ÷¶"ãðjâ#’H€1ÈëœôcE2Íq·?i›þû5µá¹’mîφ?y‰¢ŠéìæhÎW¨sÏãZ×"=kJ’Òö$t àã•ÇL( )žÙmµO!¸uÃç wVì—ø3×ÜQEm¼jz]Å­ÒoB€ƒÜrOå76ëÔ°©Ê¯BzŠ(  òœ¸ë»€’q]n§ÃkäÉy$™Žh¢€:>òöVN}…PÿÙleptonica-1.70/prog/dna_reg.c0000644000175000017500000001040012240303217014204 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dna_reg.c * * Tests basic functioning of L_Dna (number array of doubles) */ #include #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, nbins, ival; l_float64 pi, angle, val, sum; L_DNA *da1, *da2, *da3, *da4, *da5; L_DNAA *daa1, *daa2; GPLOT *gplot; NUMA *na, *nahisto, *nax; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pi = 3.1415926535; da1 = l_dnaCreate(50); for (i = 0; i < 5000; i++) { angle = 0.02293 * i * pi; val = 999. * sin(angle); l_dnaAddNumber(da1, val); } /* Conversion to Numa; I/O for Dna */ na = l_dnaConvertToNuma(da1); da2 = numaConvertToDna(na); l_dnaWrite("/tmp/dna1.da", da1); l_dnaWrite("/tmp/dna2.da", da2); da3 = l_dnaRead("/tmp/dna2.da"); l_dnaWrite("/tmp/dna3.da", da3); regTestCheckFile(rp, "/tmp/dna1.da"); /* 0 */ regTestCheckFile(rp, "/tmp/dna2.da"); /* 1 */ regTestCheckFile(rp, "/tmp/dna3.da"); /* 2 */ regTestCompareFiles(rp, 1, 2); /* 3 */ /* I/O for Dnaa */ daa1 = l_dnaaCreate(3); l_dnaaAddDna(daa1, da1, L_INSERT); l_dnaaAddDna(daa1, da2, L_INSERT); l_dnaaAddDna(daa1, da3, L_INSERT); l_dnaaWrite("/tmp/dnaa1.daa", daa1); daa2 = l_dnaaRead("/tmp/dnaa1.daa"); l_dnaaWrite("/tmp/dnaa2.daa", daa2); regTestCheckFile(rp, "/tmp/dnaa1.daa"); /* 4 */ regTestCheckFile(rp, "/tmp/dnaa2.daa"); /* 5 */ regTestCompareFiles(rp, 4, 5); /* 6 */ l_dnaaDestroy(&daa1); l_dnaaDestroy(&daa2); /* Just for fun -- is the numa ok? */ nahisto = numaMakeHistogramClipped(na, 12, 2000); nbins = numaGetCount(nahisto); nax = numaMakeSequence(0, 1, nbins); gplot = gplotCreate("/tmp/historoot", GPLOT_PNG, "Histo example", "i", "histo[i]"); gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine"); gplotMakeOutput(gplot); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ regTestCheckFile(rp, "/tmp/historoot.png"); /* 7 */ gplotDestroy(&gplot); numaDestroy(&na); numaDestroy(&nax); numaDestroy(&nahisto); /* Handling precision of int32 in double */ da4 = l_dnaCreate(25); for (i = 0; i < 1000; i++) l_dnaAddNumber(da4, 1928374 * i); l_dnaWrite("/tmp/dna4.da", da4); da5 = l_dnaRead("/tmp/dna4.da"); sum = 0; for (i = 0; i < 1000; i++) { l_dnaGetIValue(da5, i, &ival); sum += L_ABS(ival - i * 1928374); /* we better be adding 0 each time */ } regTestCompareValues(rp, sum, 0.0, 0.0); /* 8 */ l_dnaDestroy(&da4); l_dnaDestroy(&da5); return regTestCleanup(rp); } leptonica-1.70/prog/cctest1.c0000640000175000017500000001064112242267022014163 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * cctest1.c * * This is a test of the following function: * * BOXA *pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity) * * pixs: input pix * ppixa: &pixa ( pixa of each c.c.) * connectivity (4 or 8) * boxa: returned array of boxes of c.c. * * Use NULL for &pixa if you don't want the pixa array. * * It also demonstrates a few display modes. */ #include "allheaders.h" #define NTIMES 2 int main(int argc, char **argv) { char *filein; l_int32 i, n, count; BOX *box; BOXA *boxa; PIX *pixs, *pixd; PIXA *pixa; PIXCMAP *cmap; static char mainName[] = "cctest1"; if (argc != 2) return ERROR_INT(" Syntax: cctest1 filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); if (pixGetDepth(pixs) != 1) exit(ERROR_INT("pixs not 1 bpp", mainName, 1)); /* Test speed of pixCountConnComp() */ startTimer(); for (i = 0; i < NTIMES; i++) pixCountConnComp(pixs, 4, &count); fprintf(stderr, "Time to compute 4-cc: %6.3f sec\n", stopTimer()/NTIMES); fprintf(stderr, "Number of 4-cc: %d\n", count); startTimer(); for (i = 0; i < NTIMES; i++) pixCountConnComp(pixs, 8, &count); fprintf(stderr, "Time to compute 8-cc: %6.3f sec\n", stopTimer()/NTIMES); fprintf(stderr, "Number of 8-cc: %d\n", count); /* Test speed of pixConnComp(), with only boxa output */ startTimer(); for (i = 0; i < NTIMES; i++) { boxa = pixConnComp(pixs, NULL, 4); boxaDestroy(&boxa); } fprintf(stderr, "Time to compute 4-cc: %6.3f sec\n", stopTimer()/NTIMES); startTimer(); for (i = 0; i < NTIMES; i++) { boxa = pixConnComp(pixs, NULL, 8); boxaDestroy(&boxa); } fprintf(stderr, "Time to compute 8-cc: %6.3f sec\n", stopTimer()/NTIMES); /* Draw outline of each c.c. box */ boxa = pixConnComp(pixs, NULL, 4); n = boxaGetCount(boxa); fprintf(stderr, "Num 4-cc boxes: %d\n", n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pixRenderBox(pixs, box, 3, L_FLIP_PIXELS); boxDestroy(&box); /* remember, clones need to be destroyed */ } pixDisplayWrite(pixs, 1); boxaDestroy(&boxa); /* Display each component as a random color in cmapped 8 bpp. * Background is color 0; it is set to white. */ boxa = pixConnComp(pixs, &pixa, 4); pixd = pixaDisplayRandomCmap(pixa, pixGetWidth(pixs), pixGetHeight(pixs)); cmap = pixGetColormap(pixd); pixcmapResetColor(cmap, 0, 255, 255, 255); /* reset background to white */ pixDisplay(pixd, 100, 100); pixDisplayWrite(pixd, 1); boxaDestroy(&boxa); pixDestroy(&pixd); pixaDestroy(&pixa); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/lyra.005.jpg0000444000175000017500000031200512067375327014443 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ™Û"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ó[züÃÜÓn­ÒH‰e½h‡Èühip“†ô¯7Tô=7k_=¬‡œƒNiÁÎSÝ ’HëPH›âº™ƒæ[ ,ÄîÍ.çc–?J6cäzÓ‚g½V„j"’}?”JËÀÉϵ3Ë}¹Å&Æ¡4´æ§»´sM’bÀ*õN)Llz)¦#±¦’rÌ;š ¶O4ô·•ùT5'öuÂ>P>´ùIçcôÈã™äÞy\qí[ oðÄ„zžj…žžmœ»I–#Z;°¸dÓ!°8øØ¹öã!û»ü*2Xu#¥08Î2h ‹!.sž•CP´’hCÊö=ë@›;E5›¯Ê( ˜É§\ð¢çÞ¥þË*>y¹ô Z@‘ß­!\óïÖ˜]˜×6Ïl‚¿¡ªÂLŽ+fáwÛÌ pž}¹þ•„ñ¢Ã»% ž¹ü©s“ÏZnÜõæ¬$gªóIè8ÝÇ¿›\a€àzÔÌž[e±šBxÛÒ‹ŽÌhrAOZP¿(‡J@‡8 J!`¢€¸«´žip0?JnÆÍ8žiâœIòô&å3 äsNaÖ¦ã× ‚Y¸ý)~Ñ `Û±ÇJk£žù¦yméÚ9H•¦WC»©4ÌN)¾S S„Ošz"nØÖ\sFÈõ©<–Ç=é†"Ç…>”®‡f'–SŒv¥*HÆi]\1(ÄŒäbØh$w¡CuäÓü³“ÅeÇŠI gÞ§1Ësü©ÇÒ„îØª SÃŽ•2°ÏÝ4…2Iç4®[ÐÅo^šxeÎ}E(‹Œgß)•·Qp³œ·4ðø9¶)¥Xç<æ”)¡ 5²d`œTÁLñÏ©¨V<÷â¦a”ÆG*^…Ų,ã#±÷¦3`ä/ÍÒ¦Šfù°«N’°Ž¼ñBi¤Ñ ÈÄ`Š\37aøÓÍ©U'<úÿJ€y™ÏojjÌ›µ¸òÆ<Ç'šF¹gϽe±ÇãBÄXg+M$&Ù $òzÕ›p0Ýßšˆ§Ï‚*HÎÒ2h“Ð!{ê8Fp ¨\ ç Q–c€¤{Ôe²ø$Sk•ÍbËN›}M4NK ƒË$’=jPJànY æb<„“’EDz“iÉnŸJkzVBrc ÎGÆbXô§óÓm&ÈÛúSØYb­ÉçµXŠQ‚¬ ¨ö)_zrGóð?Z%¨ÕÑ!tSŠif.Í9¡9É_ÈÒŽ æ ¶(a»®}3JebýÅ +·i›†x§`»Øó’i§q ØÅ? (ÛÒ…«#QÏJQ’ ¥ÒÒÌ"Œd±ÇJ‚i˱À­MI6˜ÙPØÎ©Q²»—4¬‡ýšpáA¦¢’Îv%yô5u‘†2–¼˜ÆF×?ð1I^Éu*%ŒÊ6îÓ‚ißÙó ÀÀMZXŽc“þûÿ³ÁýÉ¿ïâÿ… ‚£Å?±K·%ú{>Å&óp±«l sÿ]ü)…-ñÄrþ.¿áA^Æ=ŠÿÙìßòÛô4‹¦l™AÁÎ Z oŽ#lÿ¿Ÿä´ž\yùcÏÕÿEÚ°aLR?yôÇANòäÇúØÿ:jÆŒHòüOøS–(ÉÀ€qþÓqúSæbú¼;WSþ°~`ÓŽqÌ þ_ãMòÐ|ÂØcêÜÒ4jF¸\z3RæcT!ØV;ˆnžãüi71çÒŸ'õj ¡€ýrßãG3°‡` 1þ¹J:ÿËuüÅ#yKÿ,—êCG…?òÏlÿÌ>¯Г¼Ðþ4'ƒ ÇÕƢ܀rƒõÿÌÿ>fW‡a~ÎXæ)¼¿ãTÿ±TËN¿í/øÕÀ‘g˜?SK²ó=>fÿ 9™?W‡b Ñˆ?ë?ñåÿ‘4׌®?ï¥ÿŸÊ„ô“7ÿMò£'# ÿ?üMlkІM1ÜäÈ3øEѤeÎâ~‹š°±ÅžY¿ÔPc‹³?_ï-+°ö}?²OI?ïŠS¥È;Éÿ|—ddà—ÿ¾Ö•¡N9ûí?Æ‹¶Æ+dDtÉ?½ÿ¿f…ÓŸ®Ùsÿ\ÍHaiÄÿ}/øÒyQ‘“#ßKþ4]‡±]†ýŠ_îËÿ~Í5¬ÜœáÇÕ Iå&?Ö?æ?Æ›±ÿXÿÿW°aŸbn¤°î ‹ÍŽß)© iƒó·éþ4SÊß—ÿ^Åìb4Ú±îÝ= fn0Çò4ÿ(’?åNåsæ¿×i¢áìQ²Œß‘¨þÅ'v#ð5ecn¾cãÔ«Rž&|3µ¨¸{ÊÂÑó÷ÿR)âïŽ?Ú« Ál ¥Àÿe¿Â.Pãåÿoð¢âöEs cŸ1¾êAgýbþ *Ó} c÷ïÿFgéç’?Þ R»+Ø"›BÄçx?ˆ¨Ì/»·æ+G÷àcí{?¬×# nsÿ£˜—B%)€sõ¦ 8 ûèUßô»Ò€;o¦™&8ÍÒû|ôî „J¾Cž¸ÿ¾…0Á!î8ÿh]2Ì:\ÿ¦™gÿžëÿ}ñ¥qû• ´ÄŒcïñ¡mä-Ðcýñþ5lM>0'÷Õî3Ÿ4ø§r~¯·ÙäR~^;|Ãüi¯§Dß}$¹ þó÷…?Ì“‚YI>¤qEÃêé­ÌÑ ØÆÉ3R,2cw•&G±«Ë-Âäÿ€/øRyóàŒçÒ%ÿ WÃ¥ÔªÑ;.JIŽùSŠ­äåŽNØ5¨&Ÿ¡X°Ü©_ð¤f‘NÔŽ6¾Xÿ ¬7†Mne4í#d¤úm5"ÀÃïBçþkG̹í„cåj<ÜÄ_’SæÂÛ©KÉ;GîŸþù4­m»“鲯flÑø ÓwIÿa}Z=Ê‹ ¬Ä„#ŒýÓQIÇ?ºr}Õö“w?ŸøÓwpŸ©ÿá•´e! øÿU öÚi~Ï9$úm5l1ÏÝ?Ÿÿ^”¾!¹ô4ù‰ú²îTó†Gÿ¾M<[܃ÿß­¬ª~ò¹ÇûU ™àIÿ}ÑÌ%†ó(› ‚òŸë°Ñö¥Æ!sï°Õó27Îÿ¾ÿúÔß42P?Þ¥Ì?«y•šÊè.|©=ÎÓP›[“ŒÄíÿ<þ•¢³¨ë'úg4ŸhÇÝž`?ϽÀðþfyµ¹Î<‡úl<~”Y“ ·´’åÔä\KùõêF½˜cý*Z9˜}Y¾¦BÆá²b"”‡="k}¶Rsö¹úR‹ù”çí$ýEÃú¬—S#‘ÉíšF…¿ç™÷­ß·ÍÁûjsØ!ãô¨Î¥rþú&ú¡ÿ .'‡‘Œ©‘¦šmÈc”8­·JNJÛ“þá©F£>1˜1éŠ9¬KÃɘ „ºi»ryº¨JÌvÌ}À§ I³–´µcô\쟪È缿E8éJÑ9V…tcRLå´ÛSø TŒœ.ÛÀRçÕ¦sA@îi$ŽÞÕÔ.¥ é¤BG°¦›ÛnúBôÅ>q}^g2SØr:T±…xö“È­§¸±'þA˜ìÒ¤šgA¦¸>¾a¡Êá3F ¡A†4]¹äJéºaá´×ÏûÙ§Ñ¿çÆU¥ÌÆW9€¥CŠ~¨®…[E.sm0>Ô¥4"rmçÏÖŽaªRG.¨95­§©šÚ(׫Æ>µŽïµ8­6)g;N0:òjšÐÊž’4›I™1`û)—1ãÉýúô%¦£"‚¶wÇ_-©M†¦8w?„F²;Ót»ùàã·ÿ¯Iý™q€ -Ÿsÿ×¥kMLžm®ré“Tog©w¶ŸúdÔÐî<é—YÿR?þ½/ömÖGî D-µÇ´ÿ÷ìÑömG }–àûymE‡r_ìÛ¥?ñêÔg]ù`*캙'·ôÌñKö-LŽm.qí¥aÜ—û:ì.ï"”é×`Œ[žjg©v¶ºÿ¿MKö=Ki͵Èõɨ°&Ký›yÈò¦^‘Ÿ³1ÿ?Z„[ßcˆgÿ¿m@Šýxògÿa¨±Wk©0Ó.ÿçÕÿ/þ½Ùwy¶oóøÔºN«(?îB÷XäKÏû&s>äçN¼ÉÿGn?Ï­4é×cþ]ŸŸóëQoºUãÍýÓM3Ügï¿å@]“ÿg]q˜üþ4ãa88òüþ5_íS÷Ûò¤7ÓÄ„}?ýTÙ+ØLú§üûÓ ¬ dÄÿ‡ÿ®j7C¿üséS&«z?åå¶û5"²·H¦ü¨sƒ ¹úTãT»ïpÄvËšUºÎ|ÌýyþtR³ºõIGà†…”šN{àÿ…Y]^à‘·ÕA¥þØ›<,÷À¢áïÌl™dÇÐÓD]zÿ‘­!¬\’±ø ÒÿlÍò§ˆ¿á@®Ìñ csþF‘¢P%lô­í¹ºùJà#ü)²só[åý(¸s3=b;¥?08V$ÿŸzÒª·&Ù>¹ÿëR5ú±ùm”þtƒ™™žY?Åíþy¥ò×oϧù5¢/çìKúšoÛbÿŸUçØÿ0»3ü‘ýõÄÓ–Ýqþ±ü ¥_[ë|a­ë´ÿ<_Z½kÇ}¿ýz.fy´ 9‘ úæ—ìĉôçü*ÿÛ,OÝp}?­/Ú4òp-˜Œzýh¸]™âØàÊ~™ÿ _²1œŸOò*÷™§¶­ÿ} @ÚpélÿëQpæei/Cœvâip3‚GåZm0ãýöÐÿ…86—œíÚ}‹… æfp´º J³~ N_‘+à·ÿ׫§û7$‚ß‚š3§ã¤Ç^Ÿýzs=…áZi?ï¼ÿZ‹Ê˜œdþ-ÿ×­<éýDÓìøÒ“§ä>ãðÿЧp¹šb—nâÝÏcJéF²(ô kT5–0²ÍœuGþÍH"²d®&Ï÷‹.? ™Gí'Ò~iC] I¡5¦a³ò÷"ýsúжö¸$^°ö,¥ ™Ê×@gçeÊÿJt€ÿ\þ•u¢·\{ǧÍþ“üþ°›ÿJW Ø„Ë2 Ý çÞþ©<™ÿWîߺ_ð©|„cíAÿ¦LqùŠzÃx½Éÿ®Xþb€REc$™$¤Yô1'øS<÷ÎLp¤Kþ #Âà^¡@). ì¼Oº(c,ᜓ°¼-#}¸®aôȲ¨þ´å8-slÀö3èh9”†NŠÃü*EžeÚ6ŽäžZ½öie<ÉhGýtÿëÓ–Æv½=(b“\Jyò‡ýôÿüUD÷Sg˜€ÿ¶¯ÿÅV’é÷ ñmûªÄSN›r§&Å>» ;‚hÍç!>Ò7øÑö‰÷|ÈÄžþcqúÖ‰Ó®ÏØÔÀGõ4g95º£(4\3¾Ñ0'äqôÿ'ÚŽVOÞh‹iÁ…AíŠSÓŸ³‚}œ…4³ðBIwáBÈÃBíï¼…i£Áͤœú7ÿZ³ 9ÒéÉþ”\.fùÄç0E?û-RÃîÿ_ð«­00Éÿ|“MÃÀýîÜãEÇÌW c¸9öò”ÿZG–.0Ц?‘«k#;¤”ÀWüi<¨¿ç£þ_þºWšË;Ôg¶Tÿ8I<…ÿ¾_üjv·ˆ¶|åÝü)E”dgÏ\öùü)Ý Ü¨'ŒŒL„dTh¾ðQõ?áVM”y‘9õB?!· •ó"?þt 2g?_3Íh1ÛóòŸûú?ÀU²|¼´_„ª?­'ÙT6¡ú:ÐHDVùooùꦓʇ¯Í×±Sýj±n ßIý36Õüÿ…ЄÛÇ×sƒø;ìªGÞ”Ÿúçþ¥m:U5»Œz:‰­v”|{@Äž†_ûàÒÿU#úSY?)aÿ¡Uÿ¾ÿ LCç&uƒ…7ÉdΣóÿ ‘ƒõ !?9v‚ÒIì)ŠÄ&,ËU#ØÓ¼²8Yv¤ 1ë#æ¥6òmÈþ4L®"“>¡ÇøÓñsŽ$ãþºñ¥ò¤ÇÞR=ñMò¤<áà?ÂØOßuÉ?CAó¿ÚýiÆ'+ˆOû´Ñ˜û‘þT À•²µ¯jÛ!€Ž¡2§&²%Æ@÷­x ‡ýÁ[½"ž²4"Ž6E.Fâ9%ù57•:©ÿðªÑ*S¼çÛÖ¦Û™ú×;;І(”ôÈÿ|Òƒ’Gþ?HV0pYóõ¤*˜Á’AøÐZC Ó•ƒkyDð>¦”ÁÿZÿ÷Ö)JÄNVFÿ¾ÿúÔÈBˆFGLzšM¨Ã~©â(XçÍ“?ïÿõ©|¨¹Ë¾;òOô y8ÿÒìSÑ›ðsOC“ûÃŽØÏøSÊÇ·_ÍøPòIø9ÿ S$ãîÍ/ûçü)Æ%ã3þí4¹ɓŸd 4qx82ãÚCOWÙâî|cþzDŒâOÍH!9”/ûÊ¿ã@h'ÚoÈÿÙqéæq¹Ô^ÍéÞ(û6>ìèxöùá?ð/ð¤//Ç[ë}¤¤7º€ä^Ügþºÿõé¦Ù£ÿ¾ Š\`y›S0ãw»>{1õfÏõ§}³P'¬mõOó¡-f#;GẟöK3å~§úÑq\iº½?òÊúÛ!þ”Ÿiº͵¹ÿ·Tÿ q‚p~î3ÿMSZ)—¢ ÿ×E4]Ä7Rž¶V¬?ëŽ?¥ r2 Ò­~¤8þ¢“Ë”qä¶}˜éO`¸1ʲÑq« ûJž—hüÿФ7PŒîÓ-³ìdÿâ©ûæÛßuþáÿaiW9ó1Ôeqýh¸Æ}®ÕSaú<ƒÿf¦4¶Œ?ãÉF=$oêjq(È%ù÷ýzà7)Í\D’À¯:t„ã´ÄS÷Ø’°˜}n1ý)žw8%>¿áIæ)$–O×ÿ‰¦;ŽÍ€b ­À×#ÿ‰¤ß§æ+ ?ëáøŠhx‡ñ ýÿLÝÈÏÓÒ]u& ¦næ;¯oÞÿ²ŠPšYÉ^/Ðý* ȼmCøJf@÷iÿ}-¥Ø‘cÓ²¿é7£Ó÷@ÿì¤Ù`ü~Þ_Ü/ÿPyŠz¢gýáþ4€FzÆœöü æ'h´âqöéóþÕºÿñFobAQ#ëø#€Ÿš!¡ÿ—È€Ÿ–o n)ÅvDŒjj?Þ„Ò+}Üjvà{Æßá@…@9‚Aÿ} o’„ô{hÇ›HOMJØÿÛ'ÿâi¦ÕGPµ#Óký–¢0@F>`}KR-½™n ÿ½Ö€¹3X‡Á[»Aÿaÿ²Ô_Ùò18žÓëæþ¨–©Â°Ç|‘D‰œ†ÀöźÓÜu–Пúî?Ƥ³€úÏûBÿñU] FÁÞø=qŠŒÚ‚ÎÄvàS°]þÉ0þ \ôâá?øªcYÝ+dÅ÷§ÿf¨…¾Ã÷ÛëþM+B14~Gühɳ¯Ý³r÷p­8i—¬?ärݺUr€Œy™ü /Ù²GÎ?*E\”é—èptË¿o”ÿ…5­.£SºÎáë¹[ü)>É( ùËOU‘zLsžÏ@!†+ˆÈ- ª á…nr$çý“R¯3ÅËo6—íšýÛ™à2šì®\)ûÒì)Âæ.Ï:žÿç58½Õ±ÍåÆ=<ÖÿxÔ5"»MÌÇë)?Ö€» óé4Ÿ‰ÿëÒ‰2Œý3ýjQw¸“–÷eùÓÅýèë DöÌ¥¡!‡=ÈM=Â*çztÿžgü*T»¹{{cëþŽŸáHÓ÷û4'þÝÇÿZhD%P íòõ¨ó9 Ÿž*O¶Dxm:ïå°þF…ž2l ‹ŒãÔ À³Ëü7 §ÓÎÅ9n.—þ_Iú\ñ¥ÙmÃYįšüþ¦šÒØœmÇû³7õ ,?í³ƒ:GoO´ýißoº“îÇ!Ç^I¨KiíÏÙ®? ÿûJ#Óø>EÈÏo8ý’ذ“Ý‘ÄMÿ~Ôÿ1R ‹„4gwoÜÆ?M•žbÓÀÿ—•üTÿ…]бÅÅÈ=¿t§úÐ/FáHùzsþ‚í ÃÅ>¦&þUÛäböàÛÿƒSÊœ`j2BÈÿѩœzƒï[[“èc“óûÔß¶Ûä³ZŸ¢0þµ–ï…’zîó?ÀÓ„3+cíög>¹ÿâiØM2SsòmbǨæ¦%¡Ïú8ú‹•ÿâ*[  »6Ш?ªÒ}šî@÷ ïJƒúŠîJÍbGÏ}EÈ8ÿÇi›lØü°Èxìùþ¢ èA6¶íæ¡ÿÙ©ÞTìÙ]>Ïðäÿ' ž[û5®så\óÓþÍOû-’Œµ)<œÄ£©¤û5ãN›!Ñ·øC )ù´Ë€;òÃÿe¢årØ>ÏcŸøø™ºcù-Ö ~MEÿvOþ&šZ5-¼Ñûy§ÿ‰¦‹…<3ܯÓù‘He†¶PÀOZQi/ðÍhG©hɪÂ\.Ñ: tÌ_ýjvwŽnáÈçýSÿñ4Á¢×Ù. M¹÷ ©–ÆåþîÖÇ\Dô¬à±ŽL¶Îdz#è*TH¢'ìLx<¶1úŠA©,šuèb~ɸûXQMû$É÷­œt!¿øªaÈál‡¦'Aÿ³QåΣ(Ã蓃Ïàh£ 2rZÝO·¥Gög=-Î?þ&­£êJ¹HîØ¸™±úR™5Lÿ©¾ð#L,ÎÏÖäCÂH9(8¬ç8õ®†8‡}«ü…uKcÉ¥¬"ìyÓ?û-¥ÎÐ}ýN¢F*¡ ¶ŸÌÒ8<4Žs8ý+™ÑL¬ ¤ÿÙÿ@ó•õŒñ5hG:áCÀxÌ]J¾Ò§“lAé˜Àþ”ef’lgå`{„üM43q z”úU,Çåж¸´ î²×“ÏÊ¿ãAV!.ÃþY®=|±Ïþ;J$Î7$`öù@?ú Iö© û–Þÿ/ÿ^›æ³6 [`ûýh P3ˆÁÏ!‡ÿcA–0GÉà?úÕ1%Žßôaþ~´íŒGg8ÿhÐ…f\C¢8þ¦<õéÿ×:ù£¤p·ÑúÓ|×VÃZ©çÔÓ üÔÚsŒú/Oüz—~zùuÿǪÁK`X}…üy„:ï Ås2è<:O5sÄq1õ9ÿ±ö9$³“é»4ï²HGÜoÌÐpI?ê`ÿ¾sýi2ì>H‡üÿ×S93÷3îA5µ›' ÿŽfZÃÕb^5'Øð©l€âÔ“ß÷˜ÿÙj5†EíÈöÅíŸë@î4Em¸nó=?ÌÔÞE‘ÏÏ6}•øª€º€ÉžãiÿXßo Ï®( ’­“£\gê£úÔf5ݸ³êXSüæÎôýj]òãî…>œQp¸Æ…Y˜g¹oþµ*Úëv¹?Ò‚$'œóèE43çhÝǾh¸6ˆ ÿ¦Fí‘þ«UÌ(¹ÄêíÿZ§V#ø3øPåIæ?›þ¹Ÿñ¢àRhˆÆÙSô—ìîyó üvÿHñJÀíÝôòë.àÏ îÛùU-LܹK²æ$ÜÍöÚ­þ±™d Ën1þñâ©i³ A#`q‚zûé#‰Y@L…½zR•Ó9爕ýÖd–d]Æ- z­:VæCjwáäf¶™íÂ…nã¿~õNæÞÜbEb?/jJáO7$™ BËò²ÈëûŨ±´ð$üdþTýÑ«e[9ëÈÿ<ç!Ûð’™ßÌÆcÙð}XéHŒŒ6û©Òk‚»|çÀìd4¬¬ãG,{Æ•ÆÈÁÁáßoÝÿõèf8#sc×ËÿëÔ¾Vܲ£ç§1çùÔ‹+…À ¼Iþ\7+qŒ?üT¢G^’ ìj]ÎãïÄ¿ðÒ™ùé*7ÓÒ‹‘©'ÚÙ“o~¤çô¦ÉlRqêó©$Ü£ýI§‰#ambãٿƶºów 5+Ó;–“tAH0/× iD@œ´H±ÔÔ«—W@OûëEÁX„Iå$!½PFãÿ¿uc˲ÏÉlÄzÿM6ðÈp!t·?áJå&B«êâ¤ZQòQyõ©ÅŒù]@ÿ`Ò {XÇÈû¿ýz.d>M£½Ç£k[Z¨ûÍô ?­ZX<Æù&ϰ§< Ý¢ŸîõÏéNâm”VÒsûÁï¹iM„JïXß0«fÜ&BºIÇ¡ÿ >Çq"Œ,KõÀþt\.Ê"Õ@ÿ]&~”hO"G?T5u­¤„‚í9=äi'ýFOª³üè¸\£ö&R 8R{•§}œ©$Í8þïÿZ­›yÉÈÇе8adCõùŠ.4Ê«ã€S¶)àÜ¡È8#ŽÖ¦iI,Ÿñeÿ Å·æ“'¸* ¸‹s¨Ä2%qÿm?úô§PÔÛø¥Àíº“z©;6ã×ËÿëÓv™*U f‚®7í7„–(ì}Sý*6¹¹S³¨ïÌ ¥XlFyØÝþñ44›°Uÿž(Ê{7$Ãn?íÝ3Qý¤–‚,ŸDÅ[Ž0ÄØaýhrJüÌÍŽ¿:µr·ëk>ªÿãNóàïe ?ï¸þ´ã'M›†=piG˜z¸ 0ºçAÑ­”}%aüóHZч1HlL¿áR¨X~TLpÍò)ÿy1@î†:Ùº“Û.¤ÿ*6[ÏIGà)§f7Ó&šVÿ«_Ìÿ…—cŽÍt–œˆðpv)Î3Ž+š$zém0Kc¯ÐWTöGüóÿëPmЉ”óÓæ¤Šy2ïµì=|­£3B> ÿñ4ÒñƒËÀËë†ÐS>ÌPç$ã¾Ö§aýy>äP;!‘œ¯•l}H©£e#-†;ïÇó5†Vaó¨>›©>ÌËÉu9ÿhd\VHúªžÿ,€ÿìÔ¢æ<[9¯ï±þ5Cf‘·ñÅ.É@XÉ>Ë@¬´ÆÄmŠáqÐ Iþ• ’Bw¹_l“ý+0ZÌÜáxí´SŒ2)ù—Ón(°Y>aûÎfücÏóZg™bæ9ì áTK²œy@úõÖ‚ògå‡ò-þ4‘wζITÿµ æ—íJ¸ 9ÿ¿(?­Rß>~ãé–ÿ·rØöÞ‹ ”¾·| ÒÆ}wF¿ãKæÛ6wÍ û˜É¡ª"yW¬îN?ç§OΚn›3³7b\…‘ ¢Óý6oÝ?ô5*˜r6ÝÂ휕ŽÓ>sÉÏ}Ãü)D³À>Ÿ*ŸéE‚ÈÙó6‚wÆWýƪí*³cåaÔ‘üêšÍp3ˆÇt§úSþÔøAÿ®+@œ{Ïʹÿ{ÿ­R,õY"Ýÿ]‡øUC0`w*g×ËZTÕÏýr¬Ä¢Ë¡OOÞ¯øQ˜ÉÙœt U7<@§öüH.KL?ÞÖ‹.¤Â$›%~?Öƒi*‘±.?þ P•·acOøÔ{áݱ¿í£…Ê^HæN^)±îøÒá 1êÿ^©¤ö«Ï‘’{¬£¨© °’ ‰öýêÿ…+ÈZ*T|²6}6ð¦o%ÆýÌßîþ&¢K¶Gæâ\w 2â¦MB6'}Åçàêh€äŠ7-´ž0Sÿ±§µ´ ‘æCœ{gõ¡i`¹=Ë`ýi¾a8>sàtÌdÿZعDtò‘0yi!<˜âÿ¾‡øÔ«vû‚ùêð3lOõ¡¯$›ˆÃz›þ± J"¤6²SÃ?û5)´‰cÊ npvƒÿÅS Â2ãíQdõýØû-*¬G$¼ ~¸ÿÙiŽÂ´.¿*ÛÉeoþ½"À„•heR}øS<äBTÅnG»ð©RhÔq‘õËÿú©y‡(õµ¾nçæÿìi’ZÅ"¶T0¡9þ”ï0°[5‘µñÿ³PL»p,uùdüU+»“ÊÌø4ëHo û\1€p?¥i,vm|Ç>ÙÏþÏH®á€g”¯´¿ý•;íãýåºà‰ÿ^Û!áâõhc[Û®$•W¾ÿ⪽ÄpÉ kƒÔ—Ó5dK.ј§\Ž7>¥)!Ë?ôÏ?Ò}^ºFriáã%dˆƒÎJ·9ü)ëbJ‚6ø ÿ ³˜ƒw|Ž£Ê_ð4@¶ÝÅIÇú•§vmô+5¡ŒäëéüñR-©#hDÎ8Ì£üjeB 0Áë’Gõ©wª `]½2ÒñT®U¬U6m¸ ‰ï‰Wüj#k·cŒšÐ3»„èG¢ïæâ`æv=ý5 iÂJ;Mø-Ê2Ø“òaWžÙ²@§ÕGóZ`‰Ð“* lñûÄüûR‘T,¸ÎæçëK·åäŒwÊuýjÑB䬧¶ÕSŸÈÓZ eb¸$vØ1ÿ¡Qq8¢ªí+÷Q{`Çÿ×¥1  Ÿ¸^Rc#r\‚G÷ôù©ùY™™ÞVÏã€h¸¹QLmé±Höb?•9!Gá‘Aí—jµÑ#~ñ°¸ëåÿŠÔÂöQµT°êK…ÿÙEŒóm?pŸácÖœ(?ëÿeÿúõoÍùg‡oýtOñ:yŠ2OLsüš•Åc0©È̳/|(Û¸$‡žÿ5hIUJ[¿ÅµIýipBý?»éEÂŰÂ9ãþ˜f£ã9¶Í¿Ö´ÝmÕˆù铟ð <¶°+øõéÜv*y$/FÜó—<~T†I" ðv­híaq»$ÿ¦ª?©¨dµùŸ°óAÍc8<Ï~oCN£q˜Y®S?δ"ÓVSµdÿÓ2ßÒžÚK©ÉçÓ÷Xÿ .…bˆ¸¸÷hWñË3ñ1•½¶1qíAùwGôcäi­bü3I©ôfÿëÑt+Ê0VÙ@'ñBîŽ c û«âÒeÿTŒWÙ¿ÄTÚÝÃ,‹žå‡øPR+E-°#r†õÃè*Gx]¾H¶]©o2¾ÜÉù†§y3|¦ô û”+Ej¼o•³èV•cÎÌP?½ÿÖ ªgÿñáý)ÞZžv¢ú ÌZb&û4iÏžFØ?ýjEl%Ü„ý1ýjgŸø üéäG‘dÏýtN” kÛ¿'ÍŒ½ ÿëÕF G™ùü*VP_ÍÇûÁ¿•BÖÑ–$Çýsª‰lã_ïï] ´… +’Q\ðœz]4 UXö>žÕÓScÍ¡¬™z;‡,@ìMLn—i&M߉þµPFC•W؆«KæœX¿Î?•sª(c\)?)aôæšÓ(þ½óÍHVRrvŒú)ÿ íÿà$JE¨¡qǧqý3P½Á °þþ´ò¸†äöíùTd`ŒMÃü(±¢Š± ð??þ½ ׌÷n (A9þõ;¶øý² ôþþõéãhS”‹?õ×ÿ¯Q€ßóÄ«Rᔃä¯íPÄŠb\f(ϾøÓHÛbAÿÿ*vu¶Œv?ãLf<“céÏõ .9wò£ñýÑéR†m¸g¸Æy8þUXÈÈ'è?úôf,E#P2fxÔd«±÷sÅEç qžùõ4™ˆc6ÎÏÒœ%‡"ǾhB°á4G‘)ëýÀiìWë—žZÿCç§ðÉ.G£ÔfALÒmƘ‹Ê ~ðŸ¢ü¨@»¸2cÜU}ÊN|ÙSýi¹9g<÷XWeñ!^äðHn?*sLÌÄ‘1ŽsT@QÁ“?UðÄõ±ø š±°”$­¸úäcó4í¥rCÇÓ±ÿëÕQ3(ÿXƒëÿ…vzÜ&ÜÆ?JbÊÌêGï>ßýz”Ì®~hÑ»rتi—aþ”õ )ïFÏ|·ô¤¥ÐaaÍ¢döHÐFËgûj*°ßØÆG¡/þ4eÎcO³¶S@r¢O-Pà[ž9#ü*@"^ *qî*¡yçlGŽäçùÓBHFv üh!¤C £ÜÿõÓŠÛí-å]óé?Ö³Õ%Ãÿ|°§– –_ûüô j$ â;‚ªcúÓö@ÃÝ—§ëPÏÒ6-ï ?ÈPÆá„aì4Šå,ÿ£3s.Ò=VŸä[ã›ÑÏ¢ÿõª¸yÂÿ¬™qè™þ´ï7p’|àg0öT ”›Ê¶iW=²§ÿ‰¦˜à$uØúÕ O62«1î ZO6ã$@Ϫ𦬘Xo+CϪÿõè:tø#`w ƒúÓÎFÖû8ÿ€sÿ Ò¤ æD?D?à)!X>Æ ‘˜Æ?:ÿ(¶v€·z`ÿ#PµÒd çýÂ¥[¥ÏÍÉîr1ÿQÔ ÎBp¶Äï(éNûØ…´€fä~UMÁtä æÿõêC5±EbÀŸy3Cå¶¼$†ŠeþëÓü‹°FQžÎWùÕ$¶ÉÛ"ŒöÜzþ©<*8+žÅIãó£ $Ë-k.H‘ÉÛþßR€“œô*Xï~W—§;}*y¸™ÁT{€O›ÿ­I …-œ ?P´óÎzlSŠF–åøyæù騦‰û=Ô£èÙuMˆ`“¯–ÙÏ&ò©¶ÞCžÀ`ñùR­Ä'þ^W=>x8íÞœ.ÏU6Ì}L+C˜Ã$œ~íò\0§-ÅÒd¤Ò(ÿxë@ºpùY!ç·1úT±ÜÎË“,dÙÛý(Gý¡tOÍ<¬=<ÃÿפkÓ 'îwgúU¦e*s‡9óØ*C ÜvZZôï+ŸÇ­0³*®£0S…Œæ´§P”®Ù6?»éV÷JH" @ìIþ´¦Ãt–Œu)·úƒI±ò” âãýÌcŠHîã\ géýjùŽÐ6Õµ³üEÐsßøi¦à´p}Kóú-b¹¿mÙUÙíñ§5Û0ÿY)#Œoj”ÛÚK;o,“ôëHVÕ +$ôƒÿ³ MG*à³Ã'²ˆ« wåŒ+ôÈSüÅGçDíµ]‘±Æî?Æ™€_Ì{ˆÙº½³ùâ€å-‹Ëƒö·Uÿd¯ôj•.Ùä#Ìw'ûëŸëTÂzJ„öÎIÏä)é²c匆õ ýH \ŒÑ7S*‚|£¹‰ˆþfšž\Ä‚mA<ǹüvÕ3ÕùgŽò ?ú+åB…T=øÉþFr²û­²ÎÞC޹#¿ûµT­³ËÅŒ ÏS1ÔTiç“‚’/a_ŸÊžË2Œ8~ qüÅ0åeµXOÊWþ¹Î?øªcÍløÛöòÝFÙÿUL¬œ†ØsѤþtÖ’B~|?Ý*i)¡g1º©óCLdµ^Zà¡í›}ßû-Rä&cÞpzmÿý( 6Òv’§ŽUºþ)f8à Lw.Ä÷(« ˆÄ3\AÀÇïÈŠÏ[‹…Æ&)í¹Çõ¡î¤o—çý³ýh°ì[boÝÝZ’ð–?Èšœ ¹²|Ö#ý™pçYËw"ÁaÙ¨§5ʰâB}FÃþY ”˜E*K—ç‚Ó)þb¥YçäFöU?•f’¹Ü-÷}TŸäiÞríÏ’cô°çþú¢Å(–·Î{$¯œçÈÓc¹(¸Km§9'æ9ÿDZT^@§–˜€räCSÇqèÒö4Xv5æò€ŸXÏøêÅ· ìŸÍií•°— 9=1þ…¸”å¾Òÿøí…¡«Å°(…º‘÷Ôä)’ê”j ŸÞɓûÒÌG;ŠãùÒ}¢eR¡-Âç®ÒOó4Nı\Ù7$lGO—?û7µ<½”­¸C'݃?ãUP37(˜ÿ®<Ô¥cÙ³ï'ŽP€?J V#x¬ó¸®:HJÿ%¨ ¾žN|ä_l·9±豯®æëüªdÿ«ðþ½4L‘ç ÷Ôw®Æ7`E ò98x®_N…f¼]ßuFìzÖúÌØ#'ޏ×MfyxhÛRò›<¶n$Ðÿú©°çÐþ"¡I|¢~Šy©VeS$g ÂÇZ’?ø§¹ÇoÝþ*šÏ¦ÿ\Ó1ÿÅP· ¹Û‚@ÏîÍ+] cgäŒ?­2Ô•ˆÙ´ÖÂý¦çþýþ.˜SNÁÅÅ×ÿË!ÿÅÓÌã?êäá‡õ¤¨#ãÛåoñ i®â§ŒfYÉ÷ŒñtªlW¤“sÿLÿûeFÒ®FmÓ?FÖÍ©ÿGB}NúV2&[ðà¸øí<}›vQ±ëøº¨f‰”bÞ?¯Ïþ4Ó*·KdÎ?øšË~ oõ/ÿØÐD¢ÙË`4_÷ñ?øªQ¡̇Ò'ÿPŒTúnÿëS>B¹úrh°‹…QT0ažœ?û55ã ÝIÇ|CUÆÌ ²Šsyj3æž´X˜0ࡤÒs¶2G°'úR( NG|ž­;ËþôŽÀ°}šaË@øíò·øSͳç˜dðÿ Œ«y§øÓ FIÇÐ%{Þ`«çèÃúS>ÌS—ê)¸Œx&¤GœïU>™Ð,ÎAý)Sn‹óq~q|Ñú ÍÒ”Ü^íñÝßŸÒØ¯ˆÇs÷ÅWHE<ÍyŸõç§fnJA%Ágb{ ƈÔmãs׌ԉ6ÖâyöÍ 3¶C`Ÿp´¦VÉ)Ç,Qa‹æ;t¸s“Ç&”–7Ú2OQžj33d.3é”_ð©C²àùp|Ýr‰Å̇>v=¸©SQ¸Œ€³E÷­3vr<«cîìÝè¤úÿõè°ÇIypÌÇÍNº?úÕ ¼¹ NO©©Vh‰?èñ©ÿyÿÆœØr1n‡è\ÿZA¸Ápàr‘Ÿ¨©Öõð¶¶?QQ˜”õõwõ¨„1Iˆ÷úõD´Y7¥ˆ&ÚÜgœp3PÈàœ˜a\ŽŠ`X7cÊûèéN&Ôr"œ{H?øšAf"?9òã ŽÙÀ«ÜÀŸzØ1ö8þ•Éhú‹œç?ëÓÿ‰©Ðà].=% é¹:\ÀJg×ý°?¥1š>sdOü §éQf9NL—Îéq@Q’wÍÇmë@Ƈ‹qÝ÷z’9mè@<ä`ãõ¤cçÈçAΓë‚.¥¿îÿû*CEÖE@i^yÂdÖ£–H8{œÛ@þ¦£cãío(ñTãpë$¤gŒÄZWÉü†”ƒÜƒý)ë°93 lõ`Ü~”Æ·ó[Ù@ÿcʧ†Í±ÿ1MÁÿ ¡”˜ðÖʤ‰àÉìÑWóZ‹t{óö˜Çm\gô©^·æ½·8é‚ÿÔTòËؤ;ŽòK¬Á½~eýEMö7äùñÝ®ÿUTŠ@p<ŸÄüêQËô[`G¬‘©£¨\{D±ü¬ÑnÆs»wòjfÙ³µecþîúô¦ þëˆ÷‘N#Pˆ%É Oû&è]ßm}ÆÒ3Ÿð¨Iœ)l¾IëúS)ñÿRdªµ!‚V9³Ž:lj2Aq9ÀvB½r?:q›q‘N>îj¹¨û· ž02 #wÏžç'4'ûAÞ6ÇžAQþ4ã(çýx$÷ïQ™ËåL’ŸMÍŸÒŸ°ÇÌ0=cúR-4L·LH9äéR-ä]Û§ yüê?5æ¯=sÖ…ï$4gÓ äiï6O 1ÔyƒüiÂKP7|Ý:núÒïYçì ã•%¿Æ¢s€T,CýЭdXŽeÛû‰§B@à p–0s.ÚÍRH×pG”êFð¹üÅJ°BŸ³°8$•O_^( "ߟ%„±¸« lø5 ¸ÜFæ´Ú?é‚…gÄ/"ä…çúŠ• M¡K]~é‹ÿB vE†‘AGI_º¯°-¹ÿh3ýâïÏäk<¤J@ TžÌ‡ÿ¯OTŠR®#Œs·ÿ­E…d]$îÂGÓÓ÷§úµ&ØUòöó¨ÊGþ‚j@£p•[׃ÿÖ©"F”| û1üÍ; Æ/¡jE‚còC6G`WÿeQP=¢‚2*÷<ãùTA§ÀÌŠ>ŒNZ’¶CHíÛ ßýcEB%ƒ¸PIxôƒÿ¶TFܿܙÇûÉêi7]"ù‰Ê=sý–“ϼ<ÿ1=³Çé@ùP @\–¼‹Ó8sÉMßZÖO-ÜŒ© v©‚®g:ÒM1óÉغ,Þ`Øsþ8¤m AaƒáéÀê¸ÿì«{f~îÑߥNÉæ# fÁTg7.áè±»ÃWÌ1ü2ÿ³SbÑü;2_ê(êXñUÕ˜þ`p3ÔÓ𤎘õ¢ì¯ksœ_ø{$ô‘ÐnúÓ›Ãþ*Oö5ö?ëOûêº` /={ö +׌zѨ½£9ìù{¿²uƒ?úÃþUÒu>Gläs]PÆÜŽ‚™€“÷zi^Ãö¬åG…ôoìíLÛšqðv€Ü]Izüµ×G‚>ðö§˜Ém§']‡µg| (å5\g U?ÈT_ð‰xsvàutÒ0öZí@Bûr ñMH#¸'¸âØ{Sðñ¬Ú¸óÿaNÿ„?Ãû‚ùÚÆOý2?üMv~^†Nqž´ÆÓ°Ç4®ÁÖ}/þý‡ü|jü÷òÿQ¿ƒ¼8¬3sªsÿNìsÿŽ×s´!<ަœcöïNìJ¬Ž?h¸7º‰úZ¿þù¥ÿ„+Ãà·ºˆn™6ÏÿÄýkÐ.Ñ€9õ42©àðéšWe{[ž|<£IóŪߪôÊÛIþ!ð>–Í…Õ/Wýëgçô®ü(dc‘“Q…û§ pI£™‡µ}ü¥à Õn7žÿdð¦7ÃÛMneîsjƽ 6ÆpX³n9ö§®;~™¡65ZHóqðîÍKøI ÿ½mÈýj%ð–ýƒÄ±Ø#õÍzxŒ zÒ†9äú|Ì^Ùžf¿mŽ6ë¹=ñkŸëJ~[–ûr>G{2ó¯IŒäðqÒ¤Ø2Ò•Ûm#ÌÏÃ{|5´Ýïjsüè_‡P`í×a$uͱÏþ…^šÑǸd ÇÅÀSÌÞwnn=†)©0öÒ<Àü8T°ñ ˜#Œ:ÿÙ©ðúX†Oˆ4Ñòðã?­z²Æ¨rW·§jk¤l¹*=)9ÛÈò”øq}*–MWK|€ŸÔR·Ã=qyŽæÂB3³0?ʽAí!<4a²:mÎ)ÃM´9 }OG4s´ÞLòsðãÄK•ÙgºËÓó¨äø}âe E#®D«ýMzÁÑ,X6Ñc‚£þųÎ>ÌHé´QÌÆ«ÈòðÿÄë‚tä`O_5?Ʀ>ñJœ.œ}LÈsú׫eÙ¬Œ‚% 9c§52é–ã QÀcÁü)s«Èòð/ŠŠq¥‚Gý4Ž˜|∆ӤÈÙç‡Ò½–-:3Œÿ}¹§6›|ë‘•h{ôÍ.b¾°Ï xoöEÀ'Ûúbšþñßùݒ߈Pzt¯jj§Î»Ü?éáñŽýþ´§LƒÝ9Ï2¹j »áþ¦ËúÝ3Ì‹@W™¤weoè)¢ÚÔãmÔ%?:¾•z`øU¥Ýÿd®|¿éLo…:z·Ëy|˜Æ?sŸåEƱT»žjé ªöì}BŒ~´ŸfüVÀãõ¯D†0 k7ŠôûúúÔ?ð«÷¶W]`§ y–ŸÔÑr–"ŸFyéµòÎ[Ê÷eÒœ ¿ñå>¾iÿî_á„‘Ÿ—^´È?Ç_ëBü9»5(öù¢̃EÇíé÷8%oÝ0# Voñ«H/ݰRì¨í'ú×a'ÃD(VÑ”0þâ¯þËQ¸Õu}%‡Ly¸þB‹‚¯K¹ËÉ(c"Ý(õbür*¨ù™ÎFyÊ©ñÅvŸð­µŒnZtÿãàóúR'ÿ.m¬ßŽžq'ùŠW)V§Üåo]£ô l¿Ìb£’8×ï1Èíäãùêäð‹—åŽÈ2» p ͪ < â¤OÞhó7û²+cò&Æ«Ré$sh±ewE‹pþF¥òmO>U€öÌŸã['Â:ä@;hWß•ÿe4Ááýgò»ßg?üE+žŸsQ䢆ã* Çjq`€ 8àgåmÃF9éÆ*տϵYv‘× qU}O jäzuÇÓ™RTaÖ¤@fÈ ·=ªBNî¿ZSÉûI@¼ ¸âžF0:ïS$f¡iV-du çå÷ ãlµHÈÎG­7dÿjËT üýêÀ#v îifÎ̯<ÂöÍ&2AÉ »8öª“¬ë:2Éû®Œ¸ëVsòò21ߌsJÞ[¶O´=AhÊwð®åRÜó´g…[7ÆõÇB)ËñÆ{b§U cšiÈÕ09Î;ÓÕww9Ç­JüÝ)|®àžh&ÏLÞ”z ûŒÓ•[yÈéëÊœà@>ÜØQØæ’h·ÅØÉ##Â=ªÜ ¡°r>µ$q€¼õâÁhRO+€ÌIl†=E[Ž"ªw“׎•8\dã&”qš\©Û"a²2UFG8'¤ÜΡ‚I9¨©°Å¾`PªCzô5¨Ð¸Ê‚pH¥22 # £Ÿ’^qOޤÓB#;A?7>”¡SoÊ>÷^) Và{Ó£M£§aIŒl¨ØÚ§iç Ó.؉pA*=*áLc·Ò—Ë$õ¢À™ 1ª"õÆOCNc¶EÓÕ‰©¼±‚2(íÝ€¢Áq rKc=:Qdd¯sǨÍHW Œqè)›X`)àŽôXP@.9ãÚ‘TŒ©Á9 qÖ§Œô¤Úd€8¡k =nE8 #9Ç\ŒÓ™Fÿǯ­ åÀÁ#©€Š s‘Ã2})­È<ô§º’:’}ºR€F:q@Æí99àw4 €Ý}M<‡' ÷zÓŒdÀp0=êlf¬c»žjT Üg=iê˜P3œwô§#t\Æw”XwêI=¹æš¥]s¸c×­K·po—ó¤U³‚3ŽqLBóžsϹÉÏ\qA‡ÍÉǽ&T qÀ¤Àn~l!RsÞ¤Ã<í9#Z" H^çÖ¤|ì=r «¸Œp£Œã‚5ìËž¸¥PÛ‡ÉëRí-´cþt€ç 8¥.ÂzñNdñ­HÃçÉ {Qp#DRNÓÔ‚Oô£gAŒ zûÓÕ0 ©9=ý*Eqƒþéõ % IÄò:qNqÇLu5!$€6çŒ~TðŒN¦>ÔŠDB3‚2#œcô©6ìHÞ´«Üü)ì­’ÙÏã@ ª9Èwô¤HÁ œç¯ZxgÛÛš8 Ž”€6œõÊœ T›S®Þ„Ó3’HÎ3ʤ p?Ò ~硦†Ü8ç©,€mÇ»Ò.Ô1žµ6ô(Œ1¤ëŒ(#pÎ{PàœãŽ´ªU‡€iØ‘§•<ž§­Lƒb¢˜l‚zR±wòX¤ŠÁ˜gÒœpXÝ?J…[Ç?(?=2ápXЈc‚¨Øô§*gŸoZ ·9ldÔ€aŸJ«Ù qAL(Û×T›@lf‘2xuâ‹!su€Žýù§ž=þ”Џ ð)yäãžÂš!°Û†éAÔñŸN{Òÿ:i ãBàÆ Œšp'š^˜â…vFS·¨¤#‚¥<ž 4ƒ»qE‚äM¶2;P° ÇüÃŽÕ É¬>fAå&HÛÇÒ”Ã<¢ôô©€4E…ÌÈüˆŽ>E?…e€L(à5&0iâª(NLƒì–øÇ‘?ÝŸd·ˆc@X¢´²ÙÙã#nÌGò¨ÎîŸðÿÆ­âŒQʃ™ž ÄdeGÍÜÔê£Û®*¬x?Æ^åjœö#Ö³ó:™"`ƒ¦y§É…=Cv¨áP¤…9ÉêÔã¸I¹˜{cŠ "ŒTã§_J¡YdVaÊœ¨ÇµJÀéŸïsFÕR@SÐuæ€!tcÚÁŒ)Ë&N7‚Héž•# eÚNO·žg˜ ÜÚ\”&AÉïÅH‘$…]Üæ¡‰Ë;ôéV œgèCaI®OÖ¦ØAçš6àƒž: q'v1Œ{Ó*Kddn#¥=FTGt¡Xää­< .Iì;R v‡¹¤E žäõ¦‚BŒq’FqRY{d}iK>æ*ìþZ‘zò20jEl®98¦°’qíH¸íU`6žsH#u”36G¦)©8’SÎ6ä§Žï™cŠ”î1Uƒ œþ•"¨éƒJ¤ÛŒàiFKg?¥Q"(ä WÆðN=³JÝ€ÂòàñšcT£ sž´ü)ǯµ'¯¦)vç`b€Œž@£néÅ; s€M G}h)‘žôrpxéIŽƒ“Ú—nAÏ ÒN~\sùÒS‚Àô ’±œ žÞþÔ°TnLÔzPø}OZ^0îE68Ü%¹<›bqÛÀ`R÷$J2ãž‚•ЕÀ<Ÿj]JñÐsHÆêDN9÷ 7¿åPJãÖ€ªžÇ¥–v¡zðG4í¤1ǹŒŠz‘íÇJò.Þ9#êEÂãÞOºÜw4€à8£‚¤|ÜqŠi*í°ŽR¸ !±ÁÇ'šbDÛœžiáq¨çz@ë¹b)ì” è§JPÁœ÷¡›æLúñóu©# ŒçðÍ!€PN0?*‘GñO÷©àçoéN,„ñè(«Ÿ3 ž½3OlÉÈÁ##9ü?¥;Óå'ŸJUƒ‚zQ`±çŠ2 ŒœØþ_Ò—‚¤æ¤\1ÇáŠhQÉŒú~”øðBúúzRÀ9ÅH‹·Œ“À w#'k¸àc8éR ãœ}sÖ†Œùºâ•Tʱ$})¤ƒßMÙ’9õÍJê(÷¤]»ºŒã­¸Ô@8ÁÁ4›zò0MNæƒùÓZ<ô4‚â0>ô©_ZG_—°)@'¯J,+ŠË•>»E$j½óéRªŒl~µsÔ€Þ” >ƒ™ˆã§¿Ö‚£qÈqäd õ÷§•fn§¯zLW#Á ¨„lœeºÔ€dã'#Þœ~§šiä(1ÚžTàÿ:dL\gc'8 OLwãð©e}¤g<ä fm+¹AëžôÕ ´ì=*p)˜~Q“œf˜®*ƒžGÖœ8~Ô ÐRàädþÒé×§4£ÔPy¼qôª±!ߥ'~ )÷¦ŸSÒ˜sǧZvyǵ40ÆrÖŸ@Z &Fp:Ð(½¨ Z¤€(¢T–ŒU(ˆ %-% g…(.¿|ŸlU˜ÈQŒäQG;@ ‚)Ð#¯˜Ï(cž:¿Ö°GY2¿¯ÊxíJųƒÏ~)›À\3Ú« ²FíÁ¾œS`^Ýòõ4¿{ÐþAsœ†?Z˜€síB­y-í@Rúz “8íšQ´9 ý(0ŠäNƤQ´  wïQ“ê1Þ•CÔPÛñ€ÅFÓÂá¾^3ÔúÕVÝ•%²À;T‘°a¸‚A‘ì +ê2ÖÜüi@HçÍDàþ˜ ¦ñ÷°:Sm¹ÚqÚ”d98´âGaMûÌß)ÈïÚŒ’qÏ=E.ìgÖ›ÎpOãý)Û¹#½‰‘yéÒš x#¥.X61Šy8eà’h( pyê) ±Å;ƒ¸g~E"Œ¹éE„0œ(Àç½MÊ1×'4ÒPG?Z“ 1ÀÇ^”X–ÁÞF}^•#p»Æ ȧçǯ4Ñ Œ,èFO¥/Bx‰É#šNƒƒÆ:æV,çð¥#¦1H0€sÖŸ”NÂÓ­8~tÑÐÒÿ¦„(=>‚—<Ó8g°§_Z«€¿è8¥ëLBm}hÍâŒg­ 0sŽ´ z\SH—µ&){U¡-%(ªBœc‚~”´QVš3Iž(À©lg†Äê@Éù€ç*\„Ëj¼QˆÉ*XüÇÞ¬¢ ³úæ±:… B©ÀÉàŒt¥*†8æ”8`Ï>ÔH´à€8#¿zL¸?:h#å pÄàRår<“N#åHÍ'9É=A…Š€½°0q@ OàsïN¸Oö¦|ʹëQJ n ¯Ö€#*¥UÈç’)ÛJ¯'?QÖ£FwC‘†°ëNä(Æ4âgœ9À¨Îý¿)Ï^¼SÆF \ð8Í)Ë3‚)‰÷v†Ç’|ðÎ éÉ✠*¯\…ô cÆðS×­<˜=úš`~ÁNqÇ5 †{ c4À\ǧáÒ“9|ƒ÷±ÐÐAàþ|RªªÆª£ÀÂööü:R¸ e ÝF7fvŽ9ÅH¹/=Ojh$ôè ©°4Ö<©•Ë àçŠt‘+rY*=ÅK¡%$žü޵n"¿/ÊxîAëQˆ@d;”œ‘“ÜU¨ÕZ2S8^2GJ]Àª{Ó¿ˆ¸ÀéJ2P àœúf† `œG$SInØi¹EÂŽ <óO'æÎ1Þ€·çÓ@Ãr¾pà‘O‰“i%Xã¯ZLíÛÜCN‹æv=¥ Œ1€z⟄ œdëjnÑ‘–$‘Њ]ÀþïoÞâFë鎂‘2nÁç±Å"€0G÷¸üªEQ³>½phRÕ²À¯Þ•W%ˆ#Œ¨úP:gžIç=)Ѳ—eçŽ:u¤&=7g8úRïÏAøÐ03ƒŒÒàdŽ2}N(ÛFIÏãS¼ö'šhÏLG­)œnÁÏo¥b¨ùç›~bC4¿Âr{´áé‘íA; ÊOACWæÛøPÊ¿…!9`›OLäô¦HõÊÈyÏÖœàa°:Ò –8ç¤Ø8祰꽺ÓX`7ARQúÓ_"„03`qÜö§)ÉëI¸mÉ4)Ú¼I4\cÁÂðE!b[¨¤çÖž«Ï=Ä!åyëïÖ¤é»p¸ïJ~™¦‰‰cÖ‘r3–Ïô¤$’1ØÓˆë@ž¹§w¦ŸRN2M5yvž=;ÓÈëäã­0öí9œŒõïRîÄe°xǵ:rsÆ*u;ó´¥ Ÿ1²6ãsNdB™ŽïLrœ‚@•)È…Q”Ÿ”œŽ”`Ž«Ï§J…aŽ~`sÏ|Š h”`€®î•"®UzÓJ.ÝóœqHƒn~`<SŠgŒ:dP˜/p=Í&Ç¡9G$dÓb àzÿœÒ‘óp;i¤3]¹8éš@O¿ 0pÀô§#m8$õâ£Fù# ­<¨2òϦ}) •72€GCÓ4¹PFy8*88+‚5*©9ìGLP&(GÌN9ö§€Xvã=é¸"0£–ïšp$üúb‚Eû­»¨Å<àÎ{ÔlpW9oSRAwíô¦CIJ8Áç"ž«Œî=sŠ\’ƒ¿NiëÔçÖ‹ ãB’¾ã!R1×Zb†ÚÙ9Éü©ùÁP €sÖ‰lî-íA?w=iËßšk}Ï›$!ÙÏr0i…Š“ëô§©NGOzF#ƒëÖ˜†"³($ŒÑ°’#*}j@@Qƒõ§p9¢ÀØÅRzòsNHïÚœ4ýãÏqLWórxéFìž´˜ù‰ã¥8`àšbÀäsJàpO½ !‡N>”à qŠOJ} õ¡zžµHC¨Î(£5W„â–ŒQŠŽs@¦€SMÆ;½&i´€N}(æ–ŠžTŠÄŒª9÷©6ŒäÓbÈÉ œTŠ6 +Žj´#.‡çIµ¯=½)å[“øSÔ‘×±Í jqÕ&ý¤ðFzÐÎqÀ<ŽhÏÍ‚ êF?Jp’p8¥c g$Ó”¼†è1ÅŽÒ€Ÿi;ŽFzöòª@ÉÅ ^:ž½¨l3u”›³´žŸÖ•$Þ™Ü:òqJT2ìËsô¥'žŸäPn!†HÏn)pF29¦hU9öÏS‘0£×¯½5³œ±Æ: tcsäpAAùXq€N Å*¯Ïx#Ò€&`@ÇåíM –^ (pþY+·"•Ù“‚OSŠ@(ôÏ4¤(`ÅG'úS!€Ž Ò²–îs‚>¼P‰ÀÂñ×­$ƒƒŠ]Ø@r¸ãÌà᳞zP„ §ŸZ~€1úS–È]Ø'Ò¤ù•~ñäõéLž¿(éOÛïb£àn{õ sÎO¥<"Hçm‚Of“¹\©¡BõéŠ@9”åp;RÎ88Ç>”Æq»qàúšQÇÌF1ïÒ€¯~ô›~`21ŠîsØR®IbTpÜþTÀHà¨ÛÆ<Ôãä äHœÁ㜞åH‡'xÀ?΀A(~|c·­;øy$ã”d`:­8aŸxÈǵ3’3Óžh`v#+7n<úÓI#å8È9¤°>gœsRªÙÉÔa‡Ê[“ëRïË{žüPAùNÐJõÎϵ&N Aé’8éÖž*@üi Œ}áÏã@ÈÏÛ²{Ž´ðFÑòåNÞ œžžôõlI´ƒÎh5P¥ˆ òM8Æj@rÏNN8©†ÀÛÞ‹$¶TçHæ‚»°X6Ð>`GJE_/*ªBuÎjTÚðHg8éøP¨8-“ǵ9B“Œ6“ÏZ­ck¨Ú%Õ£—ÉÚB‘Ðz\Ôÿv<.㻞z~4¥~’7t=zT˜>Ycש©óg®3éÓµL…$ë@,ÌqƒëíHæ^zç?­8ƾr=Ç|”*¨Tàmäv©c#RDnH¾súÔyÉRTîÎIÇZ†s´L”À>`€}Î~”€ä.ý¿/·_¬£2($–#¾2OÖ˜±˜Ü@Ïäýy©‡ÈryÏÉ9枇çný9¤^¹<µ'cÈæ‚XÔ$‘ƒõúÒ±ŽÃ©ÍGxâŒb3¸ä“ÔS$i 0ÀüzÔ¹ƒßw¥5”dqžŸ¥8Îy4c—„úÓã8'¦® ˜÷íNS‘Ó#§Ö„C¿tÿ…8rG'åУ ÈöåUP1““ŽõFmˆ ™JóÀ ÓŽhlöÀïR¸qI³9Æ8¢Â¹8,W`ã§ž~T8¥ÁÀ={PPœr)ØbÊã¦\TG#¥5F;ó@'žGãM ŠÇ·¥7,1Æx£°ôÅ/®x$ÒgûÑ‚ElòF(©Í> ZbaøÐæŒg­1Î{b—”¦©RÒ)ÚÐ 3žiiµ/j¤Ši4êm)€§…¦•ÉÍ»—~4»sS«ØEWÜïŠz§–Š~õí\Œý=jÌ<ã*r¾â³:Èü¶ IÀö4І …Z`G"šÊ3Ö€ ‚úÔ½ ÈÇ\S”äªÇš a‰e ÐovŽy´¥ú{(.§(¤ÁÞKÒ€]½³ùÓ¢P‚·¥C2€E(n\Ðù‡ {bœ¨T*©ÀïABÅG•< »Açž´s× R©%2Çh÷§®08ÅGµ—û¤u4 ©PqŒöÍ)`ÇOz³÷HÇ~i\(*ÀØ#4î_¶3ß4/qÇ#Ów€Ãujxr t¤, ·'“HpPߘ§0 Ä `б—;Ro¦e€N§!,1Ï‚”“À>;PKÛAävNTóJqœ²ázOàŽÇÚ˜ Fì ×ŒŽ”¸#”€hPW‘€WJ#À!¾öE9cn9äf”$cŒEÃåÀãŸjÄ›Î1Æ1H¹(yÉíúSŒŽ1Ææ=:PcŒqŸ¥<)ÉüTk)ž}¿ÏáR–@-ïŒP1ŒO”À̓€;ÓÆà¤±žþù40IÀÈõ¤FáF΃®(â8£%c‰V0ÇŒýtO4Ï1‚ì pi©&õÆyü¸  $íq=ëBÈ rNXdTHá‰ÈÀ' éþx§‡Ü„àãÇ¿z˜à¨8žiAb0£èV¡ ² nc8ô©—nVùJVs„|¨\.7dãÐ/Jp,w8ÀǸ`Î1žŸ©c˜’:d`R»~cÏZ?‡i8ÇNi@ ýåÎF$ ªlqK´Ã×Ö˜«¸dŸÂŸÀNF(õ ަ0Ø8ç­47lñŽsN;?›€ÝO!M;£ ÷8ý)Hù³“Ó¹ ‚JÄP íÇo­ ÈèxúÐ íÝל£Œt>”™AÍH¿tÖ£V`0Ý}©ùäwúФdÅ ŒñA'‘œ~™Ãô4¹ÎO4Ä&Òc¯^”¤àdæ‚p2zw¤ I¯4^AqA9ã§áAn:â•NE1‚õè;ÑœféƒÞ†êy8\ظÎ?ZN§´ÅòÏläv¤)…%r}©K¶ìè9æœ s€P!0H^?¥8ˆÔÚ`/ÈÚIö§>L]9¾´(T*úRO<ûÓ2²ü»†rií–#}†Ü) N%y=i®Å]™•½=E #Œg¾8âml˜ oÍ’3“Ž3MÈn¹4åÀÜ1‘ëŠkP3ü )ÝŒg4ðÄR9䚌°$ãŽÙ§“¸}ॵØL‚§òÉúÔ™9pO'лØc-Öœ89ÝŸaÒ€$ùG=}éÊ@äÔñLRX’§?Ò”•$ žýhç`­(pIäu¨ÁåqŽüRàv89æ€$SœóÛŠAÇ­WsÏÅN¬ ¬=3Jã)'¨9 )U-ÑIéŸJb²†ÀÞ•¹9ÉúQp©‚q­ )\Rm$ñžLô¥B(©Ïz9²§'±¡Ö0Š6y÷¥?1?/¡ÇÖ•Q‰bO Å4"ï|‚þx§*d`ƒÐtèiBœ¶qù~éÁcœ?Ïã@'÷ç<ÐÒ/aß‚iW×pô£ÊùHÁÐè»ãŽ´ôûÜAïŽÝj¼e—pƒëÐTÈêeH‡^ÿJ–1ȹ!Ià(튕TÁã·5$.pBÓñ©02qÏÒ…Œ9à·ðç4ñ’¸ïHå œñÞ›¿fK 8"€% =ëé@1ž¹Ï­29à2;š“8n½è%†pü“÷}x©Š«$Š$ X®sšHÈ=9ëA-1Äâ/n)ÊØSéQ«‡LóøäTÈ8é»ëLOBU9:Qž‡¯áMBœ`­<`“ƒŠ£6/9è0h 7@ïMpZpûÇ“@†(m¤ž*­‰´žrÓË1•‹3A’BŒƒ=ù«©Œ/¥)ÁÀfÁäô¥`Œ ÒäŽ1Å(v¤î4½sëÚ— šn6±÷4ÄïÛóŸjqíGLÐp@¡ '©nOçJTëõ¤äch¦†‡Ð éNª%…Š ;è4sÆ);Ò÷ÓÐ'¶ ¦î¶ž´óÏÊŒ:™ Ç4¸ùª0Ä}¹©”FÌ1KŠa“ ¦â#ÆnoÊ ì¤ŽÅhA&ø ŽüŽÕa]qœzŠT Âä(謎ÂW cc€hÈUî öô¥nx“‡ùx Ðíq EÚIÈ`yÎhf Øn:Ó‚àg‘þzP‡k1ÆzwïNà^Ô )/OJplŽ•*ªÈ$ŽôçQ‘œ~t€aŒ;OBH®[[ÔnôxOmn÷;­˜Ô Üyãé]IcÉÎɨŒñÌ÷ò·–#%rOõ¡šQœbîÕÎ1¼oqWm.Eàc÷˜ô øõ”üÚaëûÏþÆ»| dràçéÒ¢Þß2œŒþ¿ô¦kí¨îàs>¼ºçˆ"¤‘,vîκ’GaÅuÌ1Ç~2;VtZtgT[ð6¸‰¡(Ê0FCÿÖ­4ˆ('h鞣ëA•W+Ça½¹Ç¯8¥!ÓøÏµ?€ß.}~´ŒçõŠƒ’H?MôÛ€£îóÒ…9nÁÍä)ã¯ZC+AÀî(‘ð9ÐŽ+7QÕm´«I¥yc)1£¥¥?DÔŽ­c ÉF~â{óœåúÓ)ÂIst4”c‘œŽ3ɧ+.SÉNœûО\„ñÊ9–;§ÒK\<ÐöãšìôÍF=WOŠê3…‘w r3’#ƒÍsí¢Üém?L‰nn!Ù°÷ulG@«áëôíÎÚáq*)ܹèKr?.™úúŠ÷*²¤éÞ™¸ƒý&0Çœ`ñŽ´Š®±¶8&»:zŸNôÎ;é¡+eA>£’i ä¡ê)¥œÇ´’:ûÿœSU˜J3ÉÆHÍLz|­ àP#àeðsœúÒm¸+ÇûGšS•]ÄqïÖ˜Äo˜‘ž9äSâûÁ‹aº{Ô-÷Ç9Îi·W°XÙ5ÅÃl†Ý`´… ”I°‚8^03ߊ”uW’äå×ô4s…êFG\Ó׫`÷zT>fr§•ϯzr0ÝÀ zã¥QËrF’3ÛÒ–=§…aÇ­ekæOøGµ'¶r'[Yv2œÛN0}sŠÂÐ"ñ Z‡ö„öIj°‘åBí¾CÁËoäþ×Ú©-}N½Ð† HÎq\了žnod»ki%¹¹YŒeAlíÇÝ?­tN É,G<’Åyôº>“6§wq¨j±³ß÷ p«°g¡Ï?•C:°«zÞ…ãCet–é0Õñ½"1²œô<á¿:×ccz/mRa‘$yr 2‘ëÅdX¶§ÆŸdû?)åXn#¯\“Úµì.໵Ià}ÐÈ R>¼v¤´cÄ8I'Û̾„ˆ‰a€Lõ¦¹ÏaŽyÏJ‹&qIµ‹+àÉ«Zœ–%]ê£có¤n~’*=ä/ riÉ·ÌÀþT!õ&Ü‚8R; …9ÁùOãYSkgÖ-lœÊŤQò®9ÇùìEkü®àœž£òþ”®SMZäo°8ù— zÿœV_‰l¥Ô¼==­ºæW)òäzý+U˜?¼z3þzP¸UÀnE \!7 ]xÿ X1Xõ xé$ úñœÓ€µ»^-58mÃíúpÿ ô2w1àão\SË‚Çnãÿê©qGjÆÕÝœçƒt‹­&Úò+ü™Úl\•8çp'®I®WÈ<¤7ªÛ\ÁrÚÈ%ò¢“#ó«[Pœzc𦕎j³”åynJª@ÇN§CªÍžOSI°‘××­>5à xÈÿ?b2óÏèA¨ŒaIäòj–D!sÏE@ç|ݸȦ²2H÷&§k†Î1ïÖªƒØ2y«$wÏN€ô D‘í(G§<•rŒ÷Ç5QÅ<õ©VV-ŒÏJ–2Ú©¨¦´œzžAâ‘\²‡ 9Éæœ\?Á'úP1ÇXÎOËÖ£Èè7Žr8ýácÁÆBã­p 2}ý)tXàç‚q‘Ͻø#i'vzç1›€ÀùIÁ&X3.3Ÿ—œv¤Yvn!r1’G"§Üï}ý* à±Ü£8#5(Ê iØCQ‘£8S…<©4íÙíž1ÜS-ßr36ц+¡©‹eÉë@º‘y¬­ò€}Nz³…àg$ôõ5À1Ô‚x枪2˜àëÞ€jäÏ2+„f°Ú¦å  =ŽPƒúS,N8Æ0G4ÈH\:¼`d Rø$’šdd=©);³ó}i“aᲈ}zqR/éÔÔCªŒœš0#pÎi’Ç®GQJÀðAëH¹úÐTç ã4ÈÖŠhc¥/>Ôc­îíÓŸ­-Ó£ê)OJJEè2)eHõ§gÞÍ ^€sÒŒôø£?/"—ÒŽrzÓ¨¢ª(AKIKZ!Qšv@xì`·;±ØŠ±íq޵I…#vIŠ–3¸?×5ÎÁìÅJŒ¯=2ií–ŒœŠc"¶Üíù}©ãçï\Ðy@à䌞)(21éÒžÃ9íB´‡çúP *3ÛÓ¥æÏ§zz©ÚHä÷¦çŽ™õ4¼m$‚p8éYÚÅ€ÔôɬÃgBô«ì„gŒ©>µ÷+k–g¨2ÌÃ@âÚk—sxcM)´Â¡]”8ÎúS_ÁúC©?eebp‘ºþ&±®üU«ê:é.Ð/ÄeÛñì)!ñ7ˆl?{©iÎð 9ˆ¦=9àœv îöx„¹¹ìû\èô- t{«Æ…¿s1O-I%”zþ9­Óæg½*®™¨A¨Y%Ô ˜ÝsЂ¡Ï~¹Å\0p2(8ª99{ÛŽ]ÁAäœ ‘Q;²(#¿÷ºÔ…ÀÀû¥¹ÒÛJddd°Àèy ‚+»å²¶’êUeHÔ±ÇSô©íî±£.pT|§ªñÞ³u¨¤¾Óe¶…rì»Àñè+-tF¶ÎdEQÌŸhe'é‚?J ©ÂZ½N˜J1${Sã}ä …{úWgo}¯^ l%º²Ó“#\;ç°$ãè:Wqah-âò·´¡x.í½Ô÷ÿ=)¡Õ¤©õ».™— ‚pr@¤…÷9ëÐsóëC3d`¨,0yíK“;KŠ9$ð®{PÌÁ´dîäRîU\n¬m#^Ò<@$m:çÏhÛçà©Ï8 qZûBÀœiØwnhfWqêp3Ò‚?zÞûÒ²3('<ŠEGWc¾³ðŸÚÞÞá£ûT„–-#˜ú‘òŽs×§ã]=œÛYCeÊÆ¡yëÇ?çÖ¹“¦jK§Ý[.™a"ÊîåÝþfbÄç…À<Œ~ÓZ@ÑÛA€ï… žIœœòjQÕ^Ü‹•–LGÍfÜ@Uà(TÃ`õúûVŠõoO´hÚx¼}¤·9Ø?ÝÏ þY¨|q¨\Áu&£©%Ô¥Ô˜‚6í·” Ž;~G85vÒ端.éÂòZé¡ßÑ€ïþr–rø™ukqÚeƒùv88Ýœž {WX›@Þ7täv>¨EâšZ|†á÷zԎLJңi~n‡‘÷i\þì“ÉÈÎSÅ73¥”Åv¶^tÁvl'®G¥s{&ZÏʯd˜nNALî<ñLöê;[í>ÏQT†ê"©Ü ’9ü>µ]ü-¡¸Ó`Èì9ü D–§¡‡¯J1JJä~ ŽÒ-2X¬¤iDs’G#ælTçîôÆ+¥*Ûp <œV^‡¤A¢Á$vªæ9d/´àííÇíj)\qœô¦¶9ëÉJm¢MØFÝœx<®xÝ)’ǹTcŒö§EùëAéK9Ǡɪœ@88ç½[“æ@WûǃU ‘»îà÷¦zÀc°â¬†Æp0qUÙ’&§LÀnx Ces6 õª¿je*Y˜·b*ı78äã9ª²/Í’FqÍ .ÃvJ¿ŒäóC\·œ±ÎNzUHN@Ãpâ™s{ ¿Í<É-·.øÏ°÷⧨Ó4c“÷ÎWjx¥M¤ÊÔ{UbÊQ °9Æ=Ç®jTå°Àwèh-4Çw NzåiŠX)&C× ¤BYðë’zì§.dtúRoAÛQ¬K…}r´ñpbW n8Êÿõ껸“ÏL«©j6š]«MrØÏ ‡«68üô§ZÅt–LaØm`#¥9àÌç8À®OÂþ1ÄåØÌMn›„ªûÕþl {qÏ>†ºÒ¬À²ôéóSjÎ̾£ÓÏe#1óלþ=*Æ\•ÆÀG?^*¼ggßÎê¯s«ØZ_Åc-ä1]M÷"w°ÉŽý8ù¥¨™¢í>ÑœœŠEyŽCÆ›½…bXaÁÈ?çüûU9u [yš;™V#>çù@P@'? âÑQÉ&ѹ8çšHÞOœÈŠªšääñ™Œ¼ÑiWYBä”¶•A$ªu$œsކºµ`b ¡;zÓz!h ¸8L„w9«Ϲw)©`¬^¡ªS–Æ2`â™qfyú W¹‰À8Î3TãFPÙbÞœô¨ff`nô4ù‰öhÐ1Ì>¦§AJĆVù€`Üô«¶$$²*ÎŒtÏÒš‘3§bù84 F8”~5fAÞ—·4œ÷˜Éäñ éN>2º¿³éTŽç…fçÔþ4}V·72µ»›Z¼v—•¤*Âç  žôR@úZßS‘·+#CÓ¦°±cu1’æi<ÙŸŒ{óþXÎ Ž>”# ­9h!9!qx'=(Ü[ /|ã½"©Üf'æ¸hÍLj/ö³ ÚÚªƒ´PHÊàŒòqô9<Ÿa^uco{‘v…â$1\õÁÈþTü@ ŒéFçE*Ѥ¶Ôå/uõµ°™-ôÍJáÌUxàõà èô°ßÙöŒÒc[©;G={ãùÓçŽ)ã–)†è¦R…qÔ)Ö°$(!‰@E@ôéE¬Lç+%fbx“ÄðøtZ$ÐÍ4÷,R8â\“Ï<çÔøÖ–«ª/D}DÚMrTºF£v;žqøà×=ây-­|Q¢ÜÞÊ‘Áiou33Œ€pª;œ°ÀëœcšÌÒ|]}©ÞÎ÷Ѽ:-ð’;2Àd6Xãw>ªG½h¢s_S{Âz6£bך5ªY«¹Y#…%¸88ã¦1_n:mÌÊ7¯¥p_ ­ÐxM¤;Ç™tç'ýÕï Ø7>P3žÿ祸!XaˆqŽ9ïK.ð2¬¾ç½/GÊNzdu§HB ÚÇÒ ´ìÎ|Qr¶’E&¦Þ'}ÿg!ã~Šƒ‚½Iä×io$“[Dì>fQÀíNKxCŸAÐÔ›¿w’ •ãœÒ±ÑZ¢”RJÇ!â%¾¸ñ}­­†µwiq-®Z4¶ĪåÛ,ì:ï[ú½íµ½ÂÞêqßÜyù2¤B"£báJŽž£Ø×#ã8´fñ-»êö÷[%©2íʪîÂÈÙŒ`˜×Eà¸4ˆô™dÑqg<Åǘ¬í »†Jü¾üçè4kÝ9¬ÒÕ縷Я§ŽXã¸HÅ#•P.Kq×x®gA¶ñ$zÕ¸ÖZw…O-…È*9W  ³€zôãÔÖÿ‰‘?á»2In¨¨¥ŒÉæG€Fr¿ÅôïÒ°ô8G¸¹…u ˫øOxü¸“•†ÎÐ0G ÇqÅ áS¯ ®ƒ<‘íÛÚ¸V? ØêE=¤—×lîòy[‡$çiù» ïá.ä©!_™G 1ëÈëõïX·µ]+«wß4ã|Òà,{ìƳ}ŽÌ<•8¹¿Àåm„uŪÙÍdÌ1½Ù°æGç]æ•§Ç¥éðZG#² ÆrI'>½k3ÄÖ–w=Ä·¡Y∲I€aÓŸsøÖŽšZ]2ÆYʼžB>æä†ÙÉü–hKRñ馴F’²„ˆª­¾©gu¨ÜØC2½Í¶<Ôåé\O‹týzï[I´¾•c·áhn„1¤›Û;²@r@Û5¿á»BæëS›QÑ“Nré·mêÎ8cùc5§-•ζ:f*8ž™¨Ô.æ=½ªR¥^3ž>•Eõ++k‡·7Q-©fRÀ;š›«JOÝ-¸F~y¤R‚ d€Fp8¬›NÕ%t²¸I]y +'Ùþ~u§Å7 ÿ½ž*n9EÅê‡` 3œŒ÷!㎿ҡ’h£Ï™* Î2N1R·1áW×<Õ=[37RÔÊKx£¶k‰ç}‘Ä„$’zBêðMröÖÁÍÒòRXUN3ó1^Áæªk¶Ìö3醹†Fmòòª¥Hçƒßœ4Ÿµì“.£b%uUbA褑ü>æ¡Üí§J›Šm«.‹5õ“5ŸŠE•ã*pN:ýE]’,r?*ÊðΟ}a¦I¢Èó´ï#2$|ÞÙ9=«iÕ¸ÇsŽ©­Œj¨©5…º€zúOŒ&„ñÏPixÃ`ã¹4.ýÊw‚½iØÌYšO-ÄL¾`fâq»¶qY6CPû!þÑû1•sÿå¶c·_ƹ·×e– jtž@ØÀìáqŒ¨lb¦µ¼+lÖÚeÉd¼F’c!ûZ€ç8=:œ§½MΩáùisÜÕW”60{æ­ÆÍ¼`°õÅRêà㦊­ÁÇ# ü'ŽÕG"3|­“߇8¨g!¸ãx^W?çÒ§`’G%¸¨f“8ãžjXÈ1€BŒ``þ{×—øûQ’ëXû*1Eˆ¬yrÀ3õùGQ÷y8¯RÁ\61Ç¥y'GÙ÷ñ þÊڵM+SÖa½1¤ÃålhQRá‰-ýÕÁÏߥy}â[E4}ô²Ù¡ÌH@œ‚w`zî<ð1îáÈöêÖÐN¶Ê’ód“iÙò1ÜNvá@9ç$ŒVžÍXžf{½ž©š|‚ÜK´Ê"yn$m²À0Æ00 9q´vÈn<àɯ‚=é”ÄØG Œ£ž”r¨?•s»µ£àˆô›8a¹Ó®­ÔÏ|²yóʈÏÍÝyÀëÓŠÍÐ~ë­o-¬hFåŠFØG\d`}Ž:㯊„zš]mþ»¹ug£èè •âºP(AYÛFáÏV>Ù®Ö{ë&Íd»žHY¢ñÀÉö¯"ñ%Œºn­ Åos.š°Û›f¸„¾cuÏÞ+ЃèwsÁ¨‡âøúÎÏ^¿•bó y—tr *ªÏ°s€Hà |—Z úžÉc«iú¦æ°¿¶ºHñ»É•_o×®—!}r!^Uâm*/ K&µ¦yvš’Äó-¸Ûñ³C'8$©rGC“Î=Hƒä·N+6ŠM= APXò1ÔÕieČÕÀÁÎ9¥Wi”ب¤`'(΃òÉ©*Â[ª|´ Ç—ã¿õ­ `Då°2@ªVêwnË}Ü ­^ƒ&lg9<Ó‰3ظG98õ§ƒ‘Ò¡`OÌñOAŽz ´Îv‡¿l²Câ ˆ‘ägц Î<ñDÒkS|5YS½¥kù:6›ý™§Åld¶Ð2~ªû®@Ï\Õ].·°Ž).˨ ÊF7sW8ïøS¶†5rmœç‹Ø¦Ÿ`¼aµK5äÿÓtÿ èÁÈÈ®CDzí·ðúFýrÍx8ÏÌOô®´B%»¡àœóŠQL$Œœbýi§bl:“½U° ZJ)¦#Ƕ’52C·ƒÏáQF¼†ãVv‡_ºzæ±;Ú…¤Q‚1ÓéA†:ô¥òÎNGÔ€Q™ãÖ“iV(–<ñJ¥€x1V$œ{ûЦӑÎ{:SƒÇ_zh<í+ŒŽ´ôaŽñÛÖ€Œ€A#ÓšdαÆÒHÁUA%‰Æ*mÇЃŸZæü[ ·v¶öP=ÔëÿtOêü(4§yr•.›$VW+Ó¨Û)/<œwã5OÃ2LúºÊAxƒDpÙûŒT/óšv¯y{žMH¥¹ó‘K¡Y‚’qÏç¿N†…«9*.VÑ&ãWÌK«ÚI#$ÄbpíÛ‘ØŽµÙ¡&×+»ŽžžžõÅZø·T¸×“IƒM·»h¿ãæk{–d‹=y*}=Áç8ëÙ ·ztÿ?þªÒHÊ,Íñ.­.imtƒ(n•$\grà’åXÇâžbâÚìnÔsúýk¨¸±ŠèDgA'—*È¡‰aÐþµ*Àˆhã!@À·òÅemNÊu)(¥8ÝœlÞ?´²ÚÊg Çš£n}ðk¶•¾p#ƒ×ýEQ½Ò­¯­Ú ­ÔFÃ`Á„{毩ùHÀO#<óýE=H«*m.EcŸñ/„­¼Mqk%ÄÌ©jX˜Æ2âM¯xbÏZвÈê¡LR"ãÊaÓ ‘Û ò8&¶äC–eoïpÖ¥víÏ#¥_3G=•ÎsÃZx{AN35ÈŒ–c Ôôž?Þ¶‹$ÏJ›ø~è+ßšˆäïž=¿ MßP±:M½7q‚ täS%ÿTÙ|Õ½?Ôá8ǧÿª£¹-áy%ÀŽ0Y˜ôrsùT¶hž¨à|Û<Ǭê6£ ."%,vmà ׳^€y 8çÏÚ²à°Ð5 5¸·²µdá‘Ò §Žzã=¿JÒ‹vÎ@ð ;þ=ªQ¾"q”U™Çx¸Y]x‚/n.>Çkkö¦·[}ñgvÜ¿LcŒ“Œƒ³á‰æšÚõfši;¶\K‹bíV  òóÇCÏ W+ã˜`mv)o´«-BCGmw¤òœ± *ämÉaÖøgM‹NÒa³K"ìe’ŸÎ ÇŒonIÀç}«v½Ó‘nhjqê6ÚLÌ©2íá¹ãÞªéZY^½ÜÚ…ÅìÅ<¤yЍ9ÀÚ$ñ’y8¦ë²éöòÏܲ¼cʇïX;qœþj-ÄOªÜÏé×¶ÆÝȼA>íØÀ~ï_Z”´mKnÛÎr?ÏÃ6˜ó^\\xgZŽ4f-,;œöÁÈãŠì/%™4ë©"À•afSŒå€8â²ü5öS Ù›0ýð^¥ñónçŽÿ‡áP÷:èIÓ§)¯#™[Qy9mÄPÍ ±9·ŽL1e8è@üñ“Ú»àC(UeÇ 8=±Èÿ?•r¯‡tØtÝBöêÝ‘ÅÀ‘ø%ŽÎ:w^Þµ×Bì- WÎà€3È8çŸÎ…¹¦*Qœ‹9mwÅ/£ë2[,„In’,SÊbgfvkàŒ ãê÷…õyõH/Œ—Pݤ7[h T¢±Ž Ÿj·«Í Yÿ¦jbÉ%Æß2áT»(ä/=zçõ[Þ•©ÚÝÏ£Ú$¢àǹb‰ˆçÀõ¿ ‘Þ’vbjçÏ· –óÌn“1`CƒÇPx';#®A'Ž•»¢øªúÉt”{«‘mlØu‰~MžnÒX¤ƒÇ\zšê> ØéÈËq:é·ò?Í•,d*qê9^O3ŽÞ}z}ꔋSŒÏænŽ&Mˆsß3`)=GáߊëMIjbô=—Kñ΋ªA$«w»E‚Ââ@§sÉõǧ&³uŠfˆmBßK€ÀÇ Ør~îáž@ç§zò),>ËjZE%å$#÷þï8àƒø‚8«^Ô£ðή·WZz_[°ÚVXÁǺÐŽ~µ.’Ü¥6wüP½Ü§û)!C+;¸àõ s×'Y¾(›˜Zô«Ybc»c#u?ËùWG¦øïÁ—ê ¬6¬Ä“ÛcÓ«GNù«<j­‡¶º‘FvÃýÃØôö䎵 $öznyµß‰4KÝż9äÈÏËÃu‚ô?1T®u]™^-2î\í$Ïv’NHÎÌöìr}3š±«jâ­aZËO·³†0v*¢†=·33ëÓ=êãxúÎ8ž8’E·ñ·$ zdÏãÀÀ'UÊ·3ÔÌ›XÓäÓ^Ö=.8dv ^;©ÊÈ`F9éÛ§\u̶¹‰gÅÈýÙm²ª’½R¼ŒÌôÉ®‚_\ZFKf[†Lü¥ŽÞü¤g†=sƒÎ\åðÝü2È>á×8Tð}sŒž^*“B³;x¢Àí°–ö+xÊÈ­t¤ŠÊáFIQÓ°ûÙíŠö;¤ŸE(‘7$÷:þ_ξg›C½‡p–Ñ­ÑP¹ÈäprO~yã¿¡ë_PÐæS¤^]Ú¨'xVÚ¤ÝIÁ=:ätã–Êt¯³4S¶çÑúŽ›ev’yÈÈ…0åX ¨ç±ïÏ¥y޽kªê c&ŒOÒôÙ†ãQDCƒÁRÙ;xÉ<ކªi?¯.á]?\¶·’Þoܽڶ ŒëŒŒôÛß75VÊÏÅ7ÖÚªÜ[«¤bÂAuF2ã~pxéN*\^£r‹Ø³§è·Þ%¿ŠóQ»ŠöÚwIn¤Ž´Ï·-ÍuíøW'ãâÁ<8£k¶ ûrßá[:ΪºLqÈáLIgà ƒÕaõ¦ö»bäì‰SW²}UôÅ”›´@ì›N=9Æ*ðÏ~UÍhzÜÚŽ²ö÷–1E0€J®¸ª’>Fã†èq]7L Í;ê]Znœ¹ZE ¥­S¹ˆ ZJ) <‹;cÉ®*ÁÎs޹ö¨¹QÓS&A‘펵‘Ö…c·ã¥9!‡Lu˜ø%xxf–5bÌTœ7|RB#h$ž1J»‚cö\˜§—©ãÔ1ÎsÐú Prs‚;ÿ]9>dbHÇÒ˜¼œƒØžO=YŒ*Ò¨GÌ çiï@–ãGÓmQþ c¥W“CÑüœ 2Û¦2ª3Å3e<+w±/‡¥Y4x®~çœÏ(C‚@gb9ú‹]Óï5;Cm§]‹7vY†w*Üwü¾´hZciv1ÛO9w>ŒÇ?wè1LÖ¯µ+ hÎd÷ó4¡<¼í;y$îíŒc4ã¹ËU§&ÖÆ]…u .Ò }7T-ã™$‘V 8 ’ ‚H$qŸ|t8r¦à2ÜõÇëúWˆ|L·öÈ|2ðE$ª!œHyç 8ú“]ª’¸íß§NÏçU&Ìâ†Mu ª<÷2ÇkËHǪvΛ©³ ;¸äuä®pG=Fy?ZÍñ”…Æ™a3í‚Y™Ÿ ‚v¡ÿÍÕtHt0š– K¨ð‹Yƒ†ùpG\ýdÎèQƒ‡¼õ{zî»n¥Z7¹fýÜLà–ÉçÎ+\°²¯ÍèHéï\M¯‡a²V×ç{‹¢à²‚p¤N¸ü?•vã1W>¸ÿ?J¥©•xB %¹ÈxÇZÕ`[]7EŒÉ}xX£°D\Äž;޾µÍâ_Gª-ðL;Ûù­&áè‡?@~•ÐøÌêzuå–¯¥Û‹Ÿ³¬\[„ÎèÜŽ˜çªŽ€þY®püL¼Ôb6zn‹'Û¤ùF_xNÝ03×è+x¦–‡zž‡¢ji¬èÖšŠå<ôË(líaÁïÈ>ÿ­iêØPO|òk útºne§±ËÄ™•BìrÜžO=ë^>®žûßÒ³‘hœ7ï èÔ{¬¢(’WØÛQ¸ q;TŠBÈ‹‚£3QÞ\ ;I§`?t­&ÒH5ø•ŽZÏÃú“J·Í-¾–ê€4VŠIqèü…ãž¹®»y¤ä0pxíø×0.µ›'·º»º´š ]XUB˜ƒ>Sß’+§S”ÈÇ~ÿç𤎌J›³•¬qå·Ú¼['Ù ±šå-P,òÅ* ‘‚PÈàã¨ë]† –ÏJ[y ŠÙãy—…À˱êI'9·Ðt®{RÒ#»ñn¢nµ¹¬ãŽHÅ­òÄáB€w¡ç± Ž9®ÃV–z-²Y]5Í»†xæs’á™›$ãž¿¥k-Ž5¹WÅ^öLéÚZ±(ZV—ÉÚ¹çç ãò5KÂko¨_¦§uö›‚Rpëü}jíÈÁéÏ^õ7ŒÅ‰ÓmÓPžXa7*~O/„vùŸ)gàqU¼icê §]I=º˜‘L‰ có'Þ'xÉ<äsž´þÈºŠ€W ÈÁõ®2÷ÂZ••ã]èW¾G˜ÛŒ ä`ûgƒßŽÙØ#… ‚õ<íØ¤œ`uëšÉ«:Në©ÅÁáÍföx¤×oüÈUØ"9É2ǯ5Ú—ùF s×ñÔDŽéÅ+ 1\—žýt$:ÕåSâIzö­à+Xº{íë•ÅÂÙ#ÊœƒÓÐz¹áÝ>ûO·¹Q– ¤’å¤I!@›ã€ž¯nMr> ×õ«]Q[ ¥+fÙm$•ItÜdgU8#wNŸ-oøÃè+]\\Ê÷™žt*wîäÉÀö­|§>—ÐêÜa9ï\Íôwú>©w}e§‹Û{•Q$hpèËÀǼgÐÝlî$ðÛF=Ïã\N‰âMUÙÕ¥•œÉ,qÁ t“$à¡R:àäWnPã’@Œô—­i&sÅY†Kž§€ , a›øÅrž&»{ký0ÜÞOii™G‡#$Ú8ç§Ò³'‹5›Û«·¶Òm°‘?ÜËqÎONšÖMêvÓÃsFíèz pŒ`¦k Sñö^¸lçÑYEh.¤šIB±ä¨TR9åñê—Â÷2]xz'yÚ` ¢Êý]C ü1W5-LÖÌÚ61\ùg)æŒíÎ3ÏáÚª6êsUƒ„œYÌi~-ÖgÕ´ÕÔ4ëXìuUy-692Æ¡wqß tŠï¢ùTãp dÇò¬á­ k1êËhìK¶ØQ´€ç‚z ØŒ¯ p¾£š%n‚Öç w-”šÎ§ý£¢Þê2y¾ZÉ%Õ(À?/RØð¬Ë'‡ÿv&X¢•Ñ£ç œ…?LÔZ·‰ï-µì-’ØÜã†#1#r‚]‡÷Fp>•wAÕî5[;¯µ,!á¸hƒÁŽ0$ú¹ç®f·=ª^ËUø–™°rTäŽxëMº¼ŽÊÒ[©Y?¼#BìGð9ª:¶¡qesf°Y5Ì3?—#¬€³Ð•=G©ÏžzUõÍ2MA‘u#mwgœÅ#’NsÃ1ÈÉûógsy›tJO8'’;çéüê¼ÌÃ=þn´°ÜGwcÌ |™:d`ààÐÐËóþÙ¥p&‰ö¢¨äSY¾!֣дù.Ú&g*PAcÓ¿<àwþµ¦ˆp¬Š2Ý®SÅ%þ×m,æÝì †Wx$3„^üqN*ì%±å×±ë:ćSÕžwWŒ‡ŽH p}ÎrqXw6¯nÂÝߺàãÞ¹=q^»©é>rmWJ¿ëŒÒ—8R7 p:¨éœW+â k‹ˆî,ôâ²°J61ðPÈ9ïïŽqŽ˜Î&-6pa$òºÈ^FGŒgŠÐ6wZ3¬`ím¥Ã ¯'¿­.£¥Mkå]É “’À0°èò®Óá¶—mªEªÙNê­å«ÇÓ!XÎ1ß­[’J䥭?µ¶w·g,J“÷zŒóùõ<×}¡x_KÔ-üÕ™#e ¥w“×·CDZä»×¥´ðýö…f¶Òi:UÌÛ¦–ÒJ32¹ädŒ`ÿS•4º4ž![{Û[}"ÝàÜ’ÛŒÆêF>ú¨õpâ³sæÒ%òÛsµÑ|§éÒG2¨VM¤9'9ç·׃ŒµŒEÌŒYÃ;“¹ˆÈ-ÓÓÈéž+°Óg6rjÐÞÚà”•IgAԆ϶0sƒóp:µ/ˆBÉsicq˜ àzÖýÈo°MåÈ!}¶N0¼uçÒ¡»ÈkDIH\½yühšN ó‘ŠÅð¬ÓKgr.v¼ë)W˜*<…På둃ž8Ú9ÆkiË~Ta‘äJÌÿ?Ö´¡ä`Ï=)r¹==i Ú€€1Í;؉;¢Áù¾^ÕËËà«yeßQ½Q$í8Tp1$ñ‘ÇZêÝÈ® Å0x¦MMͼÓ)™qöP7¨À§Í×&‰lkƒSsåŒùNÃG±M´0E+Ëó]ÎI'Ô⯳`d)<×?áxmt§[vãóœ:á²9ü»ãè+¡ëUa_ø[œŸŽL¼2"\¹× ÈÛž6¾LÖÖ¯ª[iPE%ÔnÑÉ LªnÚpNHôâ³ôñÆ`OÒo¹*F{gñ¥gPÀ0}( ¿ç=©Ì½zdœ ö‸îN)X‚AÃ`ði P\‘Ç.L6sÉ c—†äcÔÒœíÎìí@ù‰]£nr2¥eêZ톟$qÝÜynãp]¥Ž? @¢Û²4œ ŒÙ}}i¨ÜXt4Ýã2¹+qÉ}=ÍgêÅžšè·.цå[a#óÄ¢ÛZ9Ü¥Y[oëÿê¬í_W‡HŠ–‰¾Ñ*À‰ ïlOLŽ0kF9RhVhÝZ'©çüŠæ¼[kq|Ö1Eö¥€]ƒ$¶¶HÁF]Àö°Ï¶jâL®t <00ó#ÜÁT±yÇAž½êË:õ#÷⸑àÇR³¹]cQ¹Ž)|É#¼ŸxÆÖÆ80$sèMvªD0ÝŽqØûPГfˆtñ±Ì¢â/æ|ÜÓò¬”øvVRWU‘'hòùíÏÞ®ª{ûKââ8Ë}Òì3Å^Ýœ¡r?¯ÿ[õ¨±Õ EXE%±ÁÜxBòÅíî“PšøÇqhv0ÈÜ=ÏJîãb£¹Î8é¥ekNûy²7!nAÁFgñÆ?ZÔ\‘׿¢Â­V¥H®a$‚ºÐ"‹Uý;vÉ4ŽR(É‘‚¨<“Úª÷ÐçØU £⌠1=LóQG"Nˆñ°uêPx^Ÿ­tú¤¶–ºUÜר^Õ f™s¹0r1ÜTñÙÛ,Í2ÁÌWc>9Ç¥2òÖ›w·ž-ñH!èÊF 'QTŸ28K COƒVÓÚ÷Á0iö×3*ÙÝ"Dí¿ªî|¹ë×±¯Dà+¹=øÎqö ²°Ôí®Mö£yörLÜO½"=°1Çu®¸JXG·ùÿ¹4ö1ŠÑ‘ÉoouŠhã•{Æé¸î)†ÒnÖím1ˆÂ)Aøb²üCâ)4Ktxìž}ÙPü…O÷Ž:×= i€ @äô6w(ÛØVˆôXõ+Fa2ÝÆ¿"‰ž@ÆqœWA´¢Î0^´¨©·rƒ¸¥fTµ<¾+û.y ë¶Ð·–€eñ&ðq‚à êsŒZ·SÝé“é6¶ÒZ‰0ÎÒ†•Š¥2pIÈät,O¡®ŸVðÆ—ªBêb3‚YàUVbG úò^ø¬[¿ ÛXµ¡[Œ^ª» „7¿zd`mŒžOÖµRLÊÍQÚÝøoÂ76­ ++³«„FáO¿Ó#;OnO›[Ïq ji6—¨~ú;fƒæN{tÁç÷Ç5èwÞÖntÈ­Òñ/,#i·mëÎ>ñÇcŒŒÕ-;áìÆî{ù9¶º• :ôúÉÆ}ùÒ2ŠZ‰¦Ù{Gñ´þ$EÓZm3(€ó#—×*W×!ÉãÔW5¢I¨øÊÒÚt^y³[Fë‘»–Ãó»gQÏNsšï¯F‘áË\Åg„¤ ‚'Ž7tïÏJòÛŸj³ëÒj3¼RnÚ®#ùŽ3ƒ¹™ýqD`}™èZ/Ãû¬½Ú]Ísmnå0ø¤SσñÈ>ÕÝMcaqhÖW+äüÁ›’zç__JŠÐÿfx~šA¸Džc³sœsÛ“Ïõ÷¯(×ü]{g­Ési'– Æùyºv$Ÿ¦=†I9H·dŒi aæZFÊ ¶?»×¯ùô®tG¼ò$=AÈürxç¯>•ïí¤éþ"Ñô˜å…â«"dôÎ\çž1מõç>$ðSÙÊdÓÑv8Gê9*÷Aƒ“ëé[B¢Ù‘(YÝxËÂÚÍдռåÔ8ؾqX匃ì}?ëºG‡¼9 7oecnÉ—É´ºúáØ“Œgô¯›†ëyLWÆIÊž~§²šeÍý§Ú¤ŽYäHþyî¨{`ñ€ñר)Ùî5+t=z÷⮡=µ’Kr±ÆH@òÙ²ôç¯ONµÏè¶w>1×n|è\Z,‹-ÜÒw€8EïÀÿtvùAâ]¤j°‡--Ì€ì@OêzáE}£iz6›•šEÉ,~󓜖÷ÿ#¦+9¨Çb¢Û2ä—XDs-‘i£|Úµ‘Bª˜Æ×Ãpåº@†Æ0ÅÒhšåçöâ3[ÊDk{FÆ ÀW)Î1—‚FHæºÝKWµÒеÃ6vîÚ£wý€Î9$y5ÁêÞ8µ}Y#M'΂g )™ð$B`©à·lçŽO0M±ËC°Óõó(Iïµµ•Ïüzæbdu®029À'ý¶®¦Hì¦i¥M­½W«qÓù׌é_hðg ÐZiÚ’í‚æL2Æ ¸S·¦xÏJõYïÿ‡®ÚÒh¯Ã"©€pÍ´çäuõöö¥(Yè;Ýø:Ò m>å-í嶉® ¬rDTé†*þ哜+§Ž=²[šçü!M)¡†Hdò¦d“ÊPÝÇg‘¡FIùT’D™ÔçSÔ–Kµ°™<Òíg½+À9Í8 ŽsM«™\½8«›ŸÅ›HàÓî$Ÿí o•—ïsÐ`óô®ƒ¤„ŒàÖ Z6‹&¡w{¬ó&ðþ\¤ù,s¼¨†<æ‡sZ*Ûš¹±¥êêv1^B¬© 8 0F?Žjè`}+;CŠÉ4˜Obm6™ÎO'=yëëZ(Ý)ìe4¹ŽÅPðÐ-·þ& çnyMŽ*OÍy0}’K”-'?gƒÍc‘œÏçÒ¡ñ:îÕ<0ä(ôžjÒÕ®/í GÓìEä…ðcóqƒÜôíTö-*+ZþðNwÂ÷z‹xŽ[{‰u†Ks1‘ì÷vp9éší«ŸÓ5-nçWÞéÎÛÊ-¿Íó2ÙÀÀïÅoÖˆli‰Öw²ZtiþBŠZJhs yÝ‹è)Æ’†Û±À`~¼Õ”½1ŠÎŽ@@sïVíËsœ·¦k#­À$¯LRÃ$•#·'ròWž˜ÍJ7`1èhO˜ŸŸ*@À§–É9s޾ÕÌÀ®ÚvâÛ㥠%Æ\à·Ê1Š% 6;Ló6ÜIÉâ‰1$^Þæ€,+ȇAÇãX$2xÝ^X”í³)ùô÷­‚y‡ïc<Œƒí\¦»¡jz–°. œÛ"©¿y œLÒ7ÃÚîîĺµ½Åνgå__[E9H©1 …W<Ù­{ñ Ñn¡ï “'?.rOן¹á4äL¯”~WyŸñòþÔw~ñ,VSJÚ©šŒLbi¸8Æ9ëAС ®Y­×E;t+æò"_›Œ|£ùæ³õ­qôíRÊôÙ¯ÂI#0^5P3€zõë‘ýÖ˜»4ûh|² DŠGN@+Åqk—ma£ˆ£YÕÚâè±St` 3ƒŒV]Î ®òl]ÅÖzƱ%…½ìR!>k¼jUNJ±ÁÈÿõwèÝ\BŽ£¯<}{W)£Xêº%æ§ÛivÖúXIZy`›Î.ûp¥‰U9Ï×ô×ôè8'ïdQ+t#[jb^Y[Oâ O6%&Þ$]Ç€Û—ß­R½Ò¥›ÄqF5;Ø¡™Gg<*0;€ww§ëú 毩@ð]½¬qÂCH¤äœƒŒ?È¬ßøA/<å”k³pûÿf³Ôôiºi&åÓkÅ¥€—Kšh·Ì.QÔ‚ÝÎ3è+yO®1×=z×<3¨é7Ö3¥ä×q ‘½0A\ç ‚Où5Þ*’ÁãŒfšó0®¢”yes˜ñŽtF‚Fyn1þ¦–ž1\n¦ž*ñ]Åö —£Å—Éç2åsÏA÷°;€q]­á »hxƒC0Íw¿/mrªÛùÇÈíÊšf§â»}_Á:¶7ÛÞEŽ{I2p§Ž¸ÉëÈñ[¤–ǽõ7<ÛxKJ ón…\@FGóÿõW@YS,ÏÓ©=Edxn&ÂúZœ©°çŸöA®jâ}Rj«c§¶¦UQLFøF±†\çË>¾¿…E®Æ´Gs' $÷Ö³µ[élì$š­ *‹¿… Ì}sU|5}¨ßiªú”&ðCDË·qéžzÖ¯kv–Ö2}®’!Z0™Ý’ãPÍ©|KK™PM«é—öbûQŠî—òÙ<°¬§nwQü¸®„J|—îpk™ÑÓÃPêë ±Þ!a&cr@ ÓŒ×Lˆþ[ÆIŽ úÔÄÛ¬ÒµŒAeák±=û[é“!v2Ï*«Ê9É?JÞ¶†;{TŠÑaEÄj˜.00?ÃÒ¼›TÑcŽþæh<8ö¶q¼¦a($‚Un^Ä|Ê1õ¯[¶]–Ȫ6á8SíZÉhr&p>>–Æ+Í=oŒ¡% ÑÍåü„ƇqÁÎ=nø:8’óÞZ™¤1É åFH¯AÛàç¥n•\«·/íÔ ’"·Œù+o&C´c“ÉoÄœýhoK ß‹v±™ocïK ½úsÛµqúæ»áéPÀ×Ç…G€m*O˜úgóÍtž#áÑnG’e2ªÂ[‹œp}yªÚNmci>ÞÞàãvßœ¯âyééÇ&³k[ôai_É\ÁÐîüK=Ìo³ý€3vß603†8-ÿWlýõêOÒ°®5»ë ZÖÊ{ò®$’‰³žqÈǸâ·òÛv>_^9Ç4Ekb1µ&¬y~«­ëúV¡qgsâBfˆ´K,‘$…e2Û†ãŠô ÜÉnœÉp Ìb å¶Œ“;û~Uʯ†ü*mnšÎsmæ†K û.qœ‚3ƒŒ‘ÈÅušZÁk¦ZAm ’Ù!DÔçr€?–+YZÚjí—ƒ¶vœçœqí\©ÒSÄ·ws^êùQLÑ$2ª¦Ö#,0y<ë Á·§¥sמ±¾¾’ídº·–Q‰¼»C}Efîvaç7} Ï ù–Ú†£§}±®ííÌ~[»nar ÏL ÜÔ®†›§Ü_H…£‚&•¶õ!FHæ¨izu®‰j-ôø÷l¼ŽÛ‹sŠ]v ît ènn ·†[wF–Oº€Œdò?˜¦—s*óŒ¥x‘ØëÝXÚ]ÜlnN"ŽFçœë3ßõ­M¡”‚غ’îïÈiöÌÆVI$È|ä€ìOÒ´ôW²:4 §—6­’†@s’Ç9g®kœ>ñ–ŠãNÛHïnI#qÝÏËêk¥Ó-'³Ñ!·ƒÌ‹ómxŒ9EÉC•Î;{RÙÂs“‚O¥IE‚s±þÑíž+•Õ¼G*]%¦›¼4‡UÌsŸî¨8s¹°jÙ[©¸š4·‹“Œ`…NN=® uI/$–Y™£ÈþZ3É îÏËŒ>aÇ`áe"ÝßÛ]cº·ÖµÈnŸ? g´a¶°ÁuO^‡¥IâKëhmua¦ÀQŽg‚ÀŒÊÇ 7 àqƒTî5…̳µâ[DŸ½ÇÎ6®w/Ú3ÓžN9¨oµ(ÛÌŽX"XwïYã’€õùC@G9rùsÓ4‹¸F“´™0þí×7Ó·}á\Œ£à‹+«cz×±Æ#òع[ˆICÀ=È꣌g¹­†{ÝgE²ñµÄÒ]}Š5o &ûE³×æ>D÷…?Z];ý_^½©Ž]ðȲí$Ï'¶ Í6݇E.uÌ®ˆôÚëɱ··™TDÎd”m$‚ÿgœ}+¥Ò³,ï´›ûÝÖ—6“ܤ|ùL¥Õ Ž ÇµiÒ‰5¹y½ØØZ ÐÄZJZ)°­T”$9á»uÇ~ŸÖ©ÿhÙ}©-Öx̲)!U†N Û¯cÍYÏú$Ÿ) ·#ŸÃŸÊ¥b')»ÉXàu+Äw7×ïP»»Ò˜³ÇœR)ç*n{ž@¯C\ˆÃz}N=ÿ_Ò¼ÊÓG1 *òßÃú¥¾©öˆkÃ0%òÊ$.7’ŽïÆkÓŠ¢àƒ§çüⵟCš:³ñ«É¯±¸Ö’ëÊHìƒyerq¸ŽPõä߃]„÷.f ä·{¢,ÓHÅËIê@8Gl}1¼C&¡ý¿pl¯ã‰-죞HäŽfUØŸ¹ÀÏB>ñðkkˆËáí9žçÎo³†.°lò'ôÇ(–À·Ä‚àé{pÏ%´‘ÌP1ÕO#úþ—‹´›¸DŸiŽ 9ß§iSžqØæ´õ‹É,4{›ØÑXÇT0È'Ï‘óšºn­k¨}¥-Ÿy…Æöꤕƒß½Vñ³jš%Í„sÇ“ÆUKô9Ê­éz5ž“}•D­¸«Ø>ÜT÷7ðZÁ$³·• ³8ÀÖª&åoÜØã´Ïê6~&·ÕfÕ ¼^Y¥ÿGòœ–M¹dãÔcžäšî3’F~_¯ãüê ;UÓõUwÓï ¹ ÷ÄR ùº]YvŒœ£œsM·'©V9mOK×.5µ¹ÒÞ(G͘)ä6vô'¿éYÿؾ-ŠK‡Kû5’\y›;œcºã¦+·)i2:÷=)Ã>I$ÔòqÅJ)+"¶‡ðh¶QÜ«,É«9ÁüÏù§…݃ÛÒ˜ü"íb9ÏJá.î:{šæ<âKïÚMsq¤½¸ Ã#ɸH 9Æ@Ó#š9oc›nID’{{òz08!Y°1Êx;Ö>G+Ðô\¨B¸Àã¯oËÿÕÒОÙ?Î¥kr2Ëè=?Ÿ§øGr¥í&¯ÌP…Ç=«;êSZoâ‹É5=V+7#ìðbIùûÅðBçh β"‘¡H–$YghüÉy-œÐm9 g§ÇU'‡®õ;Ÿ;ìÍiq¹dw …-W#ƒ¹G|sÁ<¸ô­G”^ÈÚFÕhÁ%ºäaw3}O'k^k+#>^¦4_"‚ ¯8ó@;TãwNA<àêxÏcBµ·žK;yRí¡M±µ¤;ÝqU²B©îÙéÖº KPûlÖðjWfÖ ‡+¤g%ñÉ:ðqÀÚÌ 5mA V8 »U"p;t#éSÌÒ“fF§\é¼¶Ò-Ÿ ÷ÎÞcsÝB‘øn?^*Æ¥iªÞ7žÒéˆTàH¶²‡$î²×<~c­mìD‰ö«JäsïéþÉïìíV%¸’i2©¸„9ÆyÁööÏQSÏv>SšþÌñ…Uoà¸sƒµÃDAÀ8êØéß õF]6ú$?ÚçRó$%šm?d±ÛåÚ_?Eük§ÔuÝ/H]×ÓC€,¼dc¯µsÓüAðãg óÁÓ¨è:ôíšj÷µ… Zø;EÖ¼»†Õ/nÒ"âU^œ~2\ƒÍfxgDX¢»Y%ärB$‰=7>îÜryä’µm®é:¶¯ö‹‰#s„šŠ9bN#Ç!†OB xÅÛ ã\–3r-¯LÅž0Ÿè÷2Î2wîFsÁÆFs^òº`ìt6±mìÓZªÉ5°_5dÈ£æ9ô¬Nyu ÚÀŸkß#1*D‹»i‘ÉAÀÏ5m–ãNû^·¨K\$ Š"DjXŒO$“ŽxïëU!°}BØYêZt‰ao ²ùŽÃíI‚r9À\zòOˆØ£[Âb¥Éu $w—3Ý ÝX4ŒTóÛnÞ˜â¹TëÚÏ‰Þ 6ý¬ÒušFØÌ ð@àéíëÒ¯Zéj÷vZ¥Œf±º’Ó¸-*’¬Â@{0ù†K¹G§x„Ki«Åu_kà ¬Ñ°òÄÄ)ÏßGû޵HE÷±’æQ´K`™d%'Üò2¾FUFÜäžHÉàgŽGE¶}wâ;\¬"²‘昲ò®£bÙÇ'käeZÕVð¤áøÈPL)5Ú«ÅþÎÖÁ$Ž0Àã¸%¾¿[Ÿj§-ÀÒ|‚XÉÑåÜ컟ŸŽ:gñKKŠú³áÅÔ§–êÑÄ7Œ˜$¯îå |»‡¨ÏQÓ$sÐó7•墾Ÿypã!VX ÈÀˆô`6ÿu¹ÇNÝùšy¥ŽÑ7’@£g?ðµ ‹5ºÍm*¼GêÁÁ°}úÖjmn_*fG‚ô_ìEnñ4O!2:·-ÈÏlí œw¬ø”£øvðmh¶›y$¤($‚pBk^.RÔðk#[o7L½µ†ép‰Ñ«€¤ã,N}…Jwcz"LJc‚?Û¬6ÍmVÌ/'™´î9Ãdägü01¹o5›NŸZÁðÜOo Ä$]²<’3lÉϘÝÏ9ÇQØÖ䄎ܞ~RMËbÓ ÈÝNU8ÍF½xɧîÈàôïTö2hSÆ9kþߥÂ]›YŰ̹Œ|}ûZÒ(#ëï\/öïü#÷•¥Þ3,Ó;#¤`‰AÉù³ÇOò(oCzœÛqÝv˜,SL‹û=ÖK`¤£+oÏ'¿~k›Óþ#øFðÙÚZ^âiš8c·6î ³ª¿wd=8­o [MeáÈEÌ^CüÒÀû ± c=ÿ&ˆ|G ‹]3ì÷–ââ±YF£ˆà£ÐñÇCéTŒª$¦ÒÔOIåë^±Q~™8ÿG˜vÿgŠVîQm …‰žîMʳB¼n<ñ“Æ3ïNñ ’iøoËËnÔ# #ìóTúö±&”öåD±w–Pƒå=ÏøÒ{jUûH´®Ìÿ ÛO¦ßËcý–öð¬!Ĥ3ÊÙþò’1׎ßuÀç¥rš‰åÕµ¿³ö¾xT;™à6±óÿꮯšPò _?´÷Õ˜´RÖ—©ÌQE&ŒBÄ(síWmŠ#dùw¨b` ~µ5ªlvç5™Ö‹œ„-Ï?ʦ¸wíQª¨”Œ…Ô›±<š`O%GLÓ‘ %@ý &rNÐ=8¨Ãü ³•ÈÿëÓÂä䱦Iä%Žyà­H U8nqÞ¢¸Š˜ŠÜEÑÊÈ­.ÖGÌ`9à¶9ö¬y5øÓ\:RYÝM6WÌòÆQrÏÓž´¹mЊA%¤±ÚÞOl’Gƒ20=ƒg¬­{P×ôÝ>Tšʹ ·ví´(cŽTäçç8Ïç]ƒlÏ#'$c àzþ4顉ÐÇ,Hñ¶2¬2 4oùù¨¡*ä+ÔƒÁõ®{^ñOö>¥oeŸ5䲡–EG Q«˜õàsòÖó*˜áNr¹ÆsÓ5ƒ«øONÕõï.ŒæTO/jLUYrIàsÞ®6¾§<›e}Äšî³+¤+o¥}Ÿ0$ä flŒ¸^»9ÀíùàuNªè:ä~uÍèÞÓ´RKí?ÎÌ^K#Kæ.܃žyŒu®— ‹†ÓµµôZjqºÝ†¹uât˃ ¤rÅW!ÏøUTÑ|^æj[ù¥vœóÆsýÚîŠðÀ¶=³M~"HÏnj,vGá$Ž6ÖË_µÖ4ÆÕ¯Ò{c+mD9çcãÐ×dëæ#‘žyÇgÛ¥G°¤“¸Î:S–\³3co áM+3*µ]F›V•ç—ú'‰õ½næöòÒÖêÎ -,§¸h¢P¬B³(9#ž[¿à;»B³ ÉÚDkœp3þ ³3 ¤g=Õ³UXáœUìsþ¹ñ šÎ©³ A,?gHTù`m;€bãœg®?*êéݳQ.Aþ.{ÒË(¶´–VXÔ¹©ÀÍ);•N.êÇeyr!ð̺…Ä›·J—7%Ò Ìpy<à ØÀϯҙ,©ãWŽ9-ö—ŽxÁ*áðrrçŒ×ŸÊš„ »È‘¶Æû^™R^;ר\Ù>¯xˆöª±º6äš/¹Ón@8éžÿ¬¿\›OáãfÑM¼ÖóÇäÊà$ðrÇ sŽÕè>Ô¬›Áðiíw˜|ÏÝù˜<±=Ž{çŸJu"­t4ÝìTÓÑmà¾m=•ÑÙQHÀ!£Ü8#àóœuäšÅ×5fQ½·3êQ(1½¶á·$´ŠTp0p§ ˆ~éèžMI£Q=Ó1gW'z&äLúaNt­½N{[Y†§çÌâ >ÎñÀ¢Mج,pÄsÏCŽŠZtÔÔÑ#‚ßD·ŽÚtž¸¬Šª»by Ïà9ÉÇ&´¬ÙeBÁGÞ#¯¥QÓîçM‚hZýËnL÷Áÿë »§hw60zuô©¶-p TŠN"¢`ÙàÓ‘ÁÉ N8#Ò©ìfÑ'#œR²†\úÔd‘Éÿ+šDÑÆ-´ë™¦•Ùb¾Ráq¹Ïf‹¤T(Χ®tìŒ1ÏíÖ¸Í;áݶ˜ÖwI©Ý˨ÆÑý¢êlIö…B§f!å+È’q]D—Û4¡}m`b2,Dá‹ ü¾Ý1\Hñ…öµu¤}'Ä:dÍqÌ&²ÿGtfÁb§Œê—‘švgI®;.¯á ƒåþÑpyì-çíÞ§Öu&ÚkX5TOÞ9òŒ‰¹Tޤúuýj®¾Ìšß†É_·ÈNÑž~Í6*Æ»c©ß=¼z|öðÆw,¯$aÈcoëÅ&Ý)(ó®gbõŽŸ¥Ç0¼±‚Ý\©Q$ `© žžàVsþð½¾…,“Eq4’J¤8f‘ÈQÇjßâEksû²ºî(¥4”³ Í‚–; ãhèqÀ«1³m#¡ÏJ£VÆÜuÍ^¡'ŠÌë'ÝÏ *\äãúdÔA°FzØR•Þzc½J²r}»ŠpåÁ/€´Í ·NiY0cƒš•Þ¤1#< FRÉÉàŸ¯áQ)ee# ¥<1lu ÛƒB0…F>P½GCï\­ö³e£ø’å®$`d‡¿ãÒºgùHˆÈÜOjçnl,/üGuö«Uœ,1õ$rÝ1ÔcášWæØhñƋȒ\ާÊ5ÏŽìM»›Ff¸GCƒž¿¥i 茿ò@ <l¯5^ïÁÚd–’%½ªC1»}Í€}òzS*/ }™Ò`»XzÛ•rÞ!¹×®5a¦x|ÛÂë ÜMs0ànbƒýÓ]KdáŠÜà÷ïý?ZÀÖ¼:ÚÊßÚß\i×Èž_Îä뵇~Iª‹±É'®„~Ô5¨¯ît½l[´ñD“$Ðt6GàASéô®‘†ù‡Ý^NìÖ.ƒáèô–ži/'½¼œ)šâvÉl€=ô­…`ISœ|‰=Am©ƒâ¶$VñZ™ç•w*ô g¿rj/ÅðßAqöØþÄÐ Ò«¹àzôàç§k:•ž¯%Íê?ï­ü¸¤ÚA$ç¿ué\ι«h:Åý‹¼’¬q†7”C8ÈÚ=zç“Pz0£ FÎ?3bÏWŸ^ñ5«ÛE?ö}®æiN•#>Ý?ŸáØîÆâY¸ã‘Ö¹-3Ä–êf”Š9a" à\×RÇål‚=ø¡3Ÿ5¥Žã“¼Ôœô§3¡0çÐõ®T¶×üU­][Ø_;M´”ÂeV!ñópÎ3ŽxªÖºoˆ|%m%Æ¢/ô¦™"—{á¢ÁC`ç¦{Ó“»99µ=!”4%xRG_JåæðBj3>§¨\ÝCæ´‘[´…bŒHädŒä}+¢FfR01ŒòJÏoé0êbÊ[ûquЧ˜O§ìy¤®¶)ØÕ¶·[Kx …qhäUu}@ØÙ™»Ï3±Äƒ–8=ùÇóZ Êà†¸ óþ5KQ²–òò. ámѸPþAÆ ýj–iM.mL ½rú{H´å‚æÓQ™Â¨ÎAY²8JÛÕLÉ ê)s-´$-´.à’xSQØYÏÚO}u÷; ¢*áPqœ ’N@É©uX£ŸF½·”¬QKŠÒ ’{qÞ”w4®ãkDáô]R{û¯–îÍ% Žúƒ\,_.€Âä“î@íë^rFq–#=Myí…½”óéq7ˆoÖé¼¹RÎy•²8;pª2~§‘^…õ€:Ÿ§øÿú«IÑ!QöG*3÷”ž¹«X¢UDLzWœxKµ¾×¯®Å½° ÒçPÙ$ÅQHR:F„{ž+Ð,$F€¬i…·Œg©ÇOéI FwŠ!šm=g³絕.nxãëÓ¾1Þ²l¼u¦Í­eãrì%IïϿҷµyï Kìè#šY'XÈ‘IH<œtíÍcߨܢKs¨éÚ;…iYÏ`;”9ô¬úž… AFHϱÕ&ñ7ˆíäŠ7M>ÌÜÝÏ#'¶k®Ô.VÆÂ{·Ì#HÊ?‹5áfMF_*×G[{ÁV–7Ÿ§jÞÔÕtë“z@¶òÛÏ 6cœþªŠ2Å;IFÖHó=WƧZ²·²º³Ó’f•nQæ¸WŠ4ê¤à’[ï¸=ëÖã#9Èî3Ïëάuj:„hð¤s.)žÉQ%`xºç5èËŽøãÞ®¦Ú"¹À¶bSz…'o­yò^_jd¥ÖŸ¨&–9‚ÚÎß+ ýæã#§ó⽊$eÝ‚ '= xšÕv¸(Ãå`zŽßZÉÙt+{$ô¹áËß´ÚÊ«j-R š$‡n@¯=rOëøÅâm.óR‹N––׋Ï™$w_êðÆ[ƒÜŽÇšÜO-€’6· ô#·á\ߌ.'´†ÂKk›ØdóØ´€Mæ-Ž Ž3ߦxê4‚ìaV\Òlo‡´FÏÄ×wW}´¶ª¥lŸ(ò$ ØýEulr2x<Ȭ? j »µv×tØ­d1²®åÉ#·SÞ·$ˆ ìÈ Øtõ?ʉnBØQ d*8€;*!2#E Ý‚¬­Ð‚9¹ícÅÆÂðiööÉs’ch Ž1ëú}kX|MâX¦µ¼1DÛd·RæöÉî;þ›’;c†¨ÒœšHôI(q‚1œ1þ¥sšW‹RîÖÖ[ËYm$½r-"òÚ_11•$¢¹÷í“Úº"Н8ätéô?ʸko†–È–ÛµídKíÝ ÆÅÉ;Fß—5pµµ9&š‘Óxg[¼Öa¿v±[ËgvÖÅRBàÈ$>jÜ™¡—iÿR#%ò8ÛŽsøf°<+áÖðý•Üm–äMtÓ &l¹Ê¨ä÷éÖ¶ïeû5…ÔÆ(ŽbŸÞŽýjen…Aj®s3ßø& `Â-=÷.EÜxÇP28îH®–Þmí"‚ˆ£ETRßÂ}zz×#&°Râሌ³Â Èxõàs뎕ױ*¹Ï=ñÛŸóþqR·:q)¨¤ÌÏ Ù]_M¨A-ÅŽ¡'?h·—À•?) ÿõëž»¼×¤Ó ¶»‡K¾¹·¹‹76Ö·“påâ*r ÈÊ‘AÇzíï­Íîuj’4 *2 S;‘Ãk‚œ5¡·³Õ´{½FöÒX¥Ä™üÜŸœoI±Ôd:EœLôI…³lP2I?tc¹þ¦¹É7š¿!‰­tÕf3d†=ÁÈgpäúÖÅö£ ¬ž[œ¾™e\›oR2Íp÷"I Ù‘oç[aågÆÛ†HÁ\3=@Rˆ$T¡¶uLtÿ´:í¸¹´º¹9]ØÂƒ“£ “×®l4†1€„éžzÓÊÊ»W#i8+ïïù ¥«‰NŸý,ås5¤·$ @ÇŒ„Ÿ¯9Il·<_Tð>«¡±ñèF1÷¹öâ krÛ^¦ŸzÊÖ®…f#Ƀqòá°zŽE_ñ6§¬Ú;G{;Éü£y›€'©‰8à÷ãÖ²¯öõ±‰UedîÎ3×8$,cœ×Wx‡£Ðú!Dm‹+!ENÓ•#ûpAöº×ŠÜµÏ‡./ôÛ…y …ØÂIÊíÊœ‘ÈÎë݇&½®Ü²ÁmŽX(Vm¿t€9÷8à×9¨øz×Ä·z½„™†åZ;¸n£H…1×D|ð®zrQ~ñ¬•Ö†U£Gâ/[ýšXÌvVqÛ4mÉW#äGÊ£‰¯3’Ñ£[1"+ýÞB€`œ’IQžx9<ò:«[KáíÝÕŽ­b'²º[ËÎ%8d=2?à'¦}±^ÔøŽåÞÑ~ϤÀYàÆB 9õçøsÉå…mgäfõ3tí^;=NÒúâ/1mœH‰ýã¸;€$ä“’{ç¡íÞj?4íJÃì÷Ú Hüð†Ç·CŒò:\¥¾•eç éѵ~óÁéÏnzçU JÁä$[&Á#’h^0tý}³Tâ¤öÚDî~Ömn¡·’k²m”B oe íüì›s“õÇ=òèkfšž"Óg2ZßCy‡–òBçnXKÿgÞ¼óDñ$º¾š…œHëüq:ðãÜž‡ r9zÄÞ.Ñü]fa³y¢»aÿî ÊG s‚ÊÁXu$)³Jw[!ÆÝN¢ãTÒ|)¤A®-,ñäÃhÏØœ “Æy5E.Òé–öàú ÊÈÆ@Û|§$±Üq•ç»·nÜsšÈÿ„¿L»UþÕ´_Y°ÚÑ!9Ûœ–2GÝ“œâ¶¼ Ìd²]Fc3ÜoH€ "„TÏ®ÂÜóó ó\Öêm¹½ ÙÚÛÙCsjަâÉÈeÞp>b¤ýïRFzsÒ¶¬w hø?wœŠª¬Î¸S´©àÕ>bö¨Y‰à`ã­Ja=‹!^ƒN@vô´å=r8§gr¾ÕFM“ŽqØ~5ÈÇ„íoâIŠ2×`y9ûÛ»]{à.IÀÇJåtèü%¨]=…¥µœ’¡ ¯–py䛿zM³¢‹²mßätºLv°éöñØàÚ¬`DA$ìrzÕ™9á¸çН#Á¤iRJ±‘omr¨9Ú£`÷u<2îŒ2ŒŽ£ÜR¸É·ç Ó4ÆÜ‚½M:-ÌKÔ§¶h¸Š¯ÃŒää õ¥8®ÇqóÁÍOåFa޹©p¸ÜŽi !’512‘‘úô®~MÍ5az×’Á*¢©ýù°qÐŽŸá]2¡e$à7^™È®bÖÆÆOj“L‰$Ñ4eüØÊõüñô ÖŒnžçAÑ€ãôgùÓæ9f(%äS–PFGÖ¹ oÄ“^^/C_2f%LËÑ}vŸÏæ=*øEމk§Û½í³y¯ÏÈËüC×8Ï_þ°.ÍrÞ£µö;ÒK)Î6©ÜTw¬ OÅZV~týBìÁ/”’#ºV Hê ŽÝë|ü»p ¯\qéü«&ê+«œÉmÓm Lˆ íŒöäÕG}N9.] O êßÚšæ®°jR_YÁå” »ƒnäž@®©AÏLsîqÏôªzf—ca<ÓY[EU\Åò‡Ûœd}YªøÃ›i$õQÒ›jú lQ»Òíoïbšò•aWUG@AÜG<÷ùZaÐ4¼ i–˜c€<¤É­vF9õëQM"Å‘¤H•y.Ç\ÔÜÝT¨•“3ƃdº¥Õ´1[}Ĉûâµ¶ 6ÖÎqÈééX¶šõ½Þ¹ýŸhË2¬^cJ•àŽ1øç5¶<• :Ž}hë Uu•CÏõ!â ê÷—]‹j:môÆcÿ¬IHä ã§b=êY|Gâ›è¢½Ó?³4¤™d—ÎF.ÖÈPƒÇ b½È ùÎ0hÒT·=rkNo#VCgËc–$’xë×®0k„»ÐšÁ­gvEdHBÁ³øc‘øö®ÉXCd¶28¯#ñ­&sDǺðÆ…{$Í.› ²]ï+®æ¨òmAvñ$Q±Ú ¨ïŒã¦ñ;Ÿs©G{–¶³ùpˆÑØÉÇ9 mGSëõ®Ä8’$eAQòç§×¯ó©³Ew{k¦D÷7SªDŸ{'¿o¯Ò¸¢×þ5ºÚ ÛéP¾N@ËŸäOòúžŸZÑ¢ÖãŠåÛr‡`,0F?Z…t Þ <µRFVg^s€:Ô³¶„©ÂÞeè –œ–¶0²ÂHeŠ1žBóõüúÔ:öšú¶‡}aÞ\“DQ gh8ïÇLõ¬ Òdñ5’ØßÉ$»$Êù†U)ncü¿ý}&§¨Ç¤i’ßL G ûFHÁÀÿ "Ìqåzõ984ßê‘ØéÚ•••›Fíp² M‡+°gå<Ò»è—j©AŽxÿõ×ê¾2Óµ-cC:&©8ÞÇñ*:¤‘1ç9z½ëÐ#.d~ŸJÒz˜GF2ê%»¶–ʉQ£Üy ‘Ž•Ë‡öNˆ²ÞÝ»%€ïÆ:fºüóqøž”ŒÊƒ¯ùæ¢ÆÔëΚ÷Y¡iØÚsZ‰üÔgi‚6Œ:ûVG‰u‹Í#PÒ£·Yä†rï2ÃleªíÀPÎ3Úº‹wŽdòÎ2€ƹŸën¥I}h®á¥–9VcbŒãx¶@Ûß>ÕQZ™T““æe¯ø¡µ»Ë»a¦ÝZ}c ].×mÛ»cýž½óÚº&s—˜Èü+žð¾¼5É.Ä–FÎê/z3+® !Èç§cÈüÀè$«îçðÿëR{‚µ¬È®!Šê×ËdŽd?y$üzçïü0Eœ‹¤É%»HrÐo>[‚yë¤ý{V¾µ î©q¥GmpL#/+.gž¹­8þò‚ àç֦ɛ)ΓH~îOŸ^;Ó㔞:{Tlè€ÈùÚ£q?çé\u·Œ5‘}KÓƷI›$·"F”‘ÐãîœÙ=³T¢Ù—2MÎv¶3… þ&’çÏ6³ýœ8ÆD{°qúÖ…&Ô®4Û‰µ[ˆåžK©”’+‹q‘û¼¯‚=ë[U™àѯgBH­ÝÁé‚snµ2ESw’9È´ R §ŠþÝõ Žd™£!ú …}Ä×~]º|ü«—mØæÿëqþ{×um¥Ù-¥æ™«Ísª<Š¡VpæRHÎáÛå]ÚÜ`dàJ•¹Õн•ÙVüÈtË¡ fYLLªˆå 10û¿^ÕÈi¹‘ôëC{¨éW„G)°½S"Ê„näõänÎ3+ ñ?Ù@ž;»¹-FTK„È1¾FÓÇ=qÜqÜV Ôõ¶iÖh·3?ÚûKaàä•o3ÕxÁ øšµ±Â÷:KÙ„Ww¯$ .ȶ ¿,p3Žxã‘Ô}ky£ŸûKY„±Ùe.¸Ç .qƒó~§'&´õÝÝêΨÒ°Æ*üÙ̧Œc’Hî>µ¡ÝC;éVé,’4qÏ’ÈÀŸ›¢œ°ldŽ»P¶gX’‚»™H#Ôò¯øš…åGv+aÈÔã$ÜqØ š8Ôl\ž1·!Fpsƒõ©h"C<óyPÆ™vbG^IéïYê6Î+ÇÍ-½£´aü¤*ˆaT©`IàøëT<â8—O¹‘žåß0‰|Ç-ÆH$—.3Ç\{ô2kú.³tÖ–7‘Ë5ÄE$qæ/Ì€'#\wŠ|9i¤ÂÚ”Éy…ÂÉ(9€p£dñž9Á èVk•™·­ÏA’e{Sò+îÉ.AÏOQÜ«ÁWkû›xD*÷†ÙЪ¨ ÜàõýkŒ½ñþ«ö( ˆFÅ|­­–2Í÷s޼äqÏOjô io¥øz+YP—G³¯PÛˆ#=}i4â¬Ãšìѵ”~H$ªÈ¶ <‚}¸Çò­Ûæ fã~Ü œ¶ßÿWô®:+´_Gl¤öñÜ6÷ùsêpãéŒV—ˆ|I£Ù<öwwhÒ2á£VÎÎ29õæ¢Q»V)=×TE«M—vwÀpçóÍnxK{è™”\nèäeQŠ–ŸL¦Ö¹›¿³Ï«JÖ’y’¼‡ËÀÎHõý?éð–‡z—z‚^JÐŃ1/™‡÷z¿œŸOÀuNÊ&qÕo‰d»]ÒÛ}ÂŒ<¢ÞBŽQ6îÇ(ç©Èã Åð±ñ‡Òît³’þY¡CåžP•!˜}ß›8Îy´Ý#Á ðô¢]?Qµ;±¹YÈSŽ~n9ã5nwBQ×S‰ñ‡•æ*`Ä’c#ø‡~øÜÁyéÅslÏlðÈ*Ãó)ƒŒÿ…tsM«ê÷ñ “=ˆGžYSæ8¸‡¿­Zñ• èvZ½­¼Ëg1)ænä`žøã?0Ï:v­#-“%®Çeáÿé~ûOˆLO¨Yʱ1ni[9F@=vöîcZZ‡!›Ãq_é8’kÕµÿILl$nÎ3ƒÆ{€;בxVÆÒû_Ó-®$vLªñ*/#<œúw8çôçÜ×ÁºMμš«Fæ]ÂS°Øì2rAÏ9Á<öúÖ5#—ÙÔh‹¨Cd©©<2Ü)#ÌJy8<œãN¸­-4±ªxÊäŸCІòö®ÜãŽOaÓúÔºq?fänn¹5Îe±d§ý*T9\îj ˜rœíäÔªÀüi™Èd¨]Ld©Åpúg‚õk8-åP¶†xòÊÛ#vGÞïÖ»¹Qœ€0yéŠátÏÏcV׎º´Ž­óØeØ~éÇ®=?2º8iVå’¥cµ³†Hôèâ¹q+„ íÙÎaiþ Ñ4ûûk«qpÂÛæ·†[—x£àŒªÔöïW¹ñ/…§Œ†µkëg=vnsÛ8ëÔv®CÒuŸµhÖ·¾Ó¬-´|캂ãy“1²à¶N}9É5¢JÚ²º“¹sÄDÂoàô<1–èôçˆHþ´ÿZËqwa2Kûtó IJ»°6–϶:ŸSXåñ߇Á_Þ%½Ü€úqý?Š­ëšý®†!3G,)ÚŠ‰œÿNô¤´ÔªJ¢åÕ˜ž´žÛWÔÙ´ÙtûwT+ ¶ážrTú{vþ]ÈëÛÚ¹_ ëZŽ­{rn`[ùhð !ˆ=Mu#¥LXÎokï­tA¦Š\â´9–ò)iãÀ8éÞ¤ó¼”.Ë´{ÓcO˜ÛéS2Ç·ÐŽ•™Ô(dš0v猃Ž*x›p1Æ1M· jôÚ1íJZhØœ&Ü÷4Š''’ .æ?wœñÆhجwe{<"ä¯9ɦ!  r8©;'lô梔 I'<ƒÞ¦ò…yæ€7z`nÇÌø‹Â‘k†æ+¦¶“`W!rG¶GÒºƒœ~Ÿ¥qøßìw·¶·p4 Ã$mB£Î‹›áãQ»ÓÜÙÑt-3$›†ÿ[#™½qè:÷ªºµ†«ªË¢5´:y`$t”³ºç§ÝãBk1þ Y¡%l. ÆrX¥:GueoklÐÏ,è¬_• N u<Ñtkì+ó:’Wgi( ø`p Áõý}»×œkvìž%ÔçÓt©\I$+ö¤bbWr.îyeEz"nYd2ž€ä`SdFâÁõ­šØà•Ûf„ïuK‰o¡Õ­žÛÊdX£g»FNñ÷Éî{.;IØØç·ù}j®Éë½)7—séêG&¥»…¬sþ&ÔuÛSìK Y¿fçË'¹$à}H¬'Юu+ÛTÕ5ƒt· ì¢Ýò€Œg=sÀí]ôÁdcÆk"ëöÈÓD²YÜcým³lo|öæ¦ÇuDc]Ÿr¾áû-/Zó¬ä ˜ ´dä·Ì>~N{vâ·ä“ÊMØ,sÐZå´ý?P¶ñt¯wr×Q‹m‘ϰ/Û€=tÒ.I ÃðªHÇß5Û¹OHñ®®—gcû‰š q’=9÷ý* W\³ÒZÒçýüòQùŽN2AçþõÀ‰®µ{¿/ÃQ³º†yºoÄIÿYØà‚GaÞ¦³Ñlô]FÕµ»këN[Ø„W¦FxßæÃ‡ÜôÁÆq¯*9y™éãq>PH?Nµæ:å§‹Dw okz-–idWhÅÇ›¹W–/Žà úd}ÏAóÅHY7ã#+þµBvWD6“·«!çù>ÜþuWU½ò¾Íæ[Å0’\)‘€B±ã?ÅÆ¹­HbsÍU¹†Úø¬w,« ×pÎΩ¨‘½i&ÑBÇR‚ïSFŽÖÄ–åÕ”©”@Ã'ƒÁoYº[m"òcjn@&/w˜:mÆsŸJ«Ó­u‰-môÔ†ãÈ.$E]¬™Œðzã¨íW5;a}§Ïlf–*íFpÉÓ¥(èV#Y]œZõÆ¡â})"±ÔlíÙ%ŽêÕcBÂ6*U¹ ç=úv®ÞB<¼“Žs‚Hþ];û×=cáƒg¨[ÜgTŸËÉ1Ï8(ÙR½0 tc1ÎzóùV’hç‰çšÍLj-ŸR‹IÒ[ÉròI;D0*œà¶NpÛ¾R1Œt5è@±è;Ó§?¯aÓÞ›,ööÑy“Α ns€;rj^ K´—pxÿ"‡ Ks+_·ÙIÑü¯0±ß¼üØãÏÃÜ[K4Ñ kP¼Yd˜‰ÔªžJŸº}?ôK«˜l¡{›É’8Tä“Úª[jZVµÇo$w*ßÀ<}Öõ¬™ÝB¬¡†þe - HÒµ+) &9ö¿–2O˜p;œô±ïZšÖ¦4{Ãn&XðnÆI u<OZçáD^/¶‡MvVüÕF;ËÓëÇjèu-.Û[±kÅg‚_¼ªØ8 ð§$%œ:ÿ:ç¤ð…­·—=„æÚHŸÍ $k"ä.0 ¶jÖÇN4›~ЛÃ÷¯ÚÉvc0(¢à#=»öÏJйѭî£E»‰.Q[pY”8wÇ­G¢-üqÜHF³¼Í… ¼`Ë¿8ëY~#Õ54Ôíô» ml䞘Ou¸ŽTw<çéšq½Ì«$¤ÒFݵ…½´òÍo q<Ä<¯aL‡'’@ç¯Z°ÉËnvôàžÿaxGX½Õ-.RøÛK=¥Ë@Ó[åÉ…S‘Ͻn±ä’T>´ú™ö8™"ñk:›éÅoU6ÝÇåÈê=ê ¶ñŒVDLbܹxw“‘Œ`úûWgo¤YÁ©I©!u¸•vɵÎÖÇsïW†Óƒœ; ”Žéb–‰+è6êsi-» c(í¸çL×1Ãí"()&Ô ånœàÆztNÕÖ²‚Ifã¾x§ª•ã9È=¦¤Ò8Ý¥&̯h±øK9hDÎñ†9*¬s·>ßç­iêWÚiòͳ\È%êÙ8§©!téÅTÖï$³Ò'¹…âB›AwBÁA` p ?…&î](·%c™V7i=¯„a·˜¾L‡kþ¿ýn•»ª}¢mâ Þ ¦¼¦nÜ‘Çaš¤<_¥Ì-íã˜Ýܳ*1²«g©91žžµ¾c]»£<¸óíôíÖ”]™¶!M¥ucÊæñ.»¯é‘È·¶–– pO.}—iÎ ž=Û@#’;5uzWÚ,Êy¯õ >ñ7G=À bÊ—Ë0ŽxÁõ<Uî¼'$Ú–Ù>ÆÖ£y*2\ÄÇ  xéÀ©Ò‚ðÙ^C¥]]‰h‹ÛHàp¸Ü§€ ‚1Ôg®2tm=Ž1÷ ›GiWš!²9$1’½(vÎ3Ö±tó4£Fyù¦îdêxWGpyU=ì?C]0³ŽÞâîá™.så‰PÀ<¹k>•²–ŒÛÛÞÇ,6£Œ0Úª­‘ô<Ò:iþE¥Ûž™$ôÆ}ñXõ„z§—os0 ÞÄ•ÈbO$õÏ^µ´6ù¾cM‚Tm sœ~~½ê†­h×vë$3¤wQȶ¹Î6±$g0xëI4†ÕÎ iÖÒi·Ï—˜’T, c% e†Ž¿fÎú¾®,ôY£gpèÙË' N;r2zúzõwzV¯öèÚ6ŽÞ5 ½ÃÌ¥Pç`ÆGôôì jéíi©5œª×’BdŒHT†RÁs’¡N3Ð=5æîCGyá¸ôÛĸÒî®"¸‰V•A}Fp98#ñü{ ŸÞ2é"îèÆÍ¼:cpÈ,rõÉ=½±Öºk-^óUñ+YjVÚÝI Â%‡îqa‘ש£Ã7VÏ­j×7Wan.& nx"“ϨòÅ>kc3¾»¸Õ¥½¸žê/³»,³;`±Æ1’~𯿭lCý…¯Íu%¾€.c³ýÛHí›Êb"ŒtU@Û{1¡‡\ %™‘ñϲ}>Ú÷6ï4ª®,Ç>ÙºO Ç©j ‰%žHîfrŒ§¡éžG§9#½ejœz¶œ}ÂFÏ—*ŹJà6@ ãÀýj(”Ãʒ ^´ÐÇj«gƒÏJŠ92Ž÷l<óÈ4\,YW#$ÌÑæ1`½ôïT¡˜™_r€Ã§­ZI6.Ìp~ï¹úP˜š&V‘_樚Î[;c0.f“Í‘ˆÉrÜžjó6ð²1‚ÉàŸÇ‘\Ö™chºÆ§uäù—_idW~ˆ^ÞúzSº6£{;3Yôë %%•¼§¢–ˆ1·4—Z^žþK HÑ¢‘eB«°ä};u«jê=XÇõ¨®ï`“Íl,’,c‚rÄàF„)Tér–¿­`é3jmœ!*Hf ×ùü+OŠ”•y§Pzn„ñŒqÇ®}+¯–Ú è^ Ø’XÉcWŒ0Ïä)²Ijd•]b+ÌŠqò÷ïÀæ´­±‹Z™šˆ­¼Cmq=º³Ç1…%løç|½JÓlÇB{}=iš}¾˜ñK-‚CåO)‘Ú”g<0qØtþµmclœ}ÑíIØVdFa… pŠáÑ óª"€I-Œ~5Í_è']Ö.æ¼»–8#"(’>Ç`$ôõ$~5F-ãU™àÔo'h¬r»XfBI`ps•”cʦçjÃÂ×”´[”,’±t*xç#üûÕ–Vd دé\¾¦¶…¬Ék ÒKk<&TÁR¤ pqÞºgüŸ1úS½Ì*B0v‹º"³Óíì•¢‚Þ8£nJÆ€ æŸqkopa71C*Ç&ô íaÐCïïOŠBzœöÆiï(g 0N1NìËtBÀĸAÆ1Ó¿<àç­p-y¨Écm§Ie¬®ª—*æá÷y †‰|ÿ«+ü8ãðÉô/21•Y½&Ÿ±%ebŸ0Ï^´'mD•ÆÁ)Ù¹”ãž Ï¿Ïâ_ìöKf»½žÔ†bwž9ät­·EÈìpxÍfjzH¿¸‚F¼žÙbGVò[k08ïéòŠ–tPiNòzôÝ {Ô¿K뻢ñV™ÕþS‚1Æ{SüHô+Ÿø™6œpÚ°~L0>ßN£úéº:]ÊÍ ÝÌ¡âXȃíÓ Ui’=6rl þÐ[ ¶<Á#ïô¢;޼ù¥tîq>ºÕ5O[Iq«Ý]Y@²²ºC²)FैÎzzúú3|ª@=:\p¾¹S×¥™ôÍ3N’xÌ ÅÐo”å¸^p8ü«ºh°VÀêçv«›9ârÓk:®²Zjc»0¬J¬îÊáAا nõ†xÍt¶%¼6Öñ,vñF9Ú–=ýk‡ƒ÷ÂÎA¢ÈÒjÃÀd÷Á˜Ú9»¸Ï~‡Ð6¹ÉŸÿ•VЧ9âÅ´k{5Ô¥1Ú}£ç ÊØ{×/}ÿéx†—~ÖK#î1!&23Œuêük¯×PM¨é¶ßÙéxÎò2¤¯„Fî7òªSŸÚÞ}ŽâÚÑeÈ>ÉëÇ]¼ã=}¿,™êÒ—$ïò"Ð$Р¼ŠÓJA<’+¸l–ȹ¯ Àâ´¼IªÍ¤hßmá–DVyU™UY‚“…98ÍKmáË+]R ÛX#…£VSóÀïèÒxšÞ )VëQ|1Ê’ ÉLRÎî ~UP±Ç‰’“æþf^%Ð5é­mª]ÍqµÐEd„á ,á‡<+¸ …Éç9õïY–vZmÔVWª-îd„Žæ5c·ilÜv߆¨ÚÄ¢ã…ÆT¼Žx”¯n…¥¤×2t‰B ó€ 8¦ØÞËyaÍn`wü²AÚNGµ.³ m&õR-Òµ¼Šˆ½X•è|Ö—†~Ý`“Zë:µ¾õÁ»eHíŽ1ŽECgM:p”3¶§In½v6GSƒž{þµ‡âÝOG´–ÞÛXÓ^ù|™XßgU#sŸ@7 ÓÐô¶Ò´Ømžo4¡c¹z0,H÷Ï>½:Íñ=—‡o¯aîÆkxY»´jªHs Èd÷=iÅë©T”šL·ákÛkí>Ao§}‚Þ)JEA#·tœô=x=ëi‘FqØúÖƒ­ôXtÛ”Ð]¿Úxmø ܞ短o´{K#æ¡Å7¹1ÓcKb5[›»¸KÇ#Åodnýâ~¼U{GÖlM†¡y©™ äñ«ÚÈ£[¸ÏŽ2þUÔMáý.æèÝËgÎ0wr~éÒhšlºŒwóZ†ºF ²oaŽüp:Ôêµ-­ê.¹t[ØÅÒÚ–·açïÚ#!HÝœ€1×9®>_6ƒqo š•–º™±äOîvŒ«øõÎ9®ÛR°…ŒörçÊš&‰Êã8`GQõªš/†ô½°±‚'o˜o`=OSZ«$yò»z:N º¾›ේܸæ)“c®9†x'µµ”z†™= qò§{&à`yÇ,c.ÓƒÜZMFÎæêÆX-n¾É3` ¶†Ç9<Q‘øÖlÖž“Z_\iíkç’æQ#“ #ðý*ØeýÒ0:ŸÖ¹ü?.›w×vRßÎב{ç*‘Á98Á8ÉÅu¥X°ÃuÀÈ<çëúÔ­M± i­Êñ\CrÄÅ*9ŽSm;°ÃÓµaŸ ['ˆZâc2®Ä„°òÔíÛ×ÓñUµ«W·±žKsûûµd“GM“…Æ~Nür^0qÇ4+û›ŸIluÖ¼†( yZ˜æ\²ä?Ê:qÎ2w´­©Ë{}Ëläòx#¦Ü^MÞyŒp€Æ, eì7?ìñœc¹éÐÚi°i–ÿgŽ0P|Ø 잘ïŒô<ôîtæIa‚Îò[A ×jñ¬!s™1ßiÜ@ “Ÿ¼}ªpiÖv±ÛÚ-»›Pç< ƒ´X“×-œõ?ÞHƒ¼»HŒÿìÿ?Ò¨^XL·âÝTæ"’~E$ä¯=:q¸Î*chÇ¿²°²‰.-íb[ˆåO,ˆÆy`3ìyèx+wV&ë×T¹– sǵex–èiú)œù¤¸!]2]{ŽÝ†[¿=j¦©â:_ Ë$sÚI)1 K7 Ú?J»7a\òx¬§“T†Ò( —L2€ç 1ÈÀç±é^Ç¥æ¾0HÑK=Ì ˜ãÚÉUESBŠ8Ï~s^[áY|o¥¢È,›#$ñÊç<ƒ·{‹§­¬PœÉ,€4á†v˹‹ôç9Ü:zV•¶±0Þæ¦©$6V³]ÜHë `»°'ŒrH÷ÇçÓŠñËÿ\øšÝtës$z2_›-3±ÜÙîÜ’G±88ÇoãûÙnþÍá»"­u¨¿ï€sŒŽ™Âôô¬3÷—zµ¤vðm³´¼T¼½»–)Yù’㎀u"¦ìnÊ•Û9}OðhZM¢ÝBQ¹fKäGÛœu ƒÀî{ñUWZ¿Óä3GtÒÄaXZT“ïœàäñƒôÍvÿ´¹ä°µxwÈm¤’YSn¤ž Æpx8þúç­yIIIݹhÜäߦ}kH>dD´g¦E©Ëâ ,Moiu4+;oÀÒû:c€9ûæ+*m7Q×5øl´ù|Àï½$Œ"lg“­ò‘Œeºú ÛøGct¨M$¡!eThORÝŸñÁp}0;êSÙ[M-µÄ0£ÞÒH¡™ûíéÏãPäã+"’¼n`xWº'†/Â^êÒê׫$22‡_] òNAù»ãž•c^õ½nÞÄ:Ug„&7»c¨¨=O¶–[[Äý´pIt×RÈDK+ ¤rv·m¸99#'ß5Úh^(µÓ¼S5¾£pò0T±Šèa¸1.Äç!K¶G>”絸”–Äúý†¦Ï(µ½–NÁVPþJ#’W›Toê»$œcšìF£.ö°yÚwäã*9ž™Ï$hM¥Ø]N—SÙڼʣdÏf¨óëÜòsÞ°5FÙ«i t|¹e‘SÊŠFe³•rîƒ)ŽàñŽrn斱܃#\DZ—hÝ•Î7qÿ×Î+BÁaÇôõïY²c÷H#wLöµoMܰ†\…%²¾ù¨EH½È$ãŒç­H[({g¦E3{r@ö¥$”Ï­3=ÅùznÈ4‰6  :à Õ ‹Ølíd¹•ˆŠ [!sÞªÏâ{8´ótÎÁsĪˆœüÅI?ZZ\µNrØÔž {Ș’h G"† ƒ‘Á÷ü*ôÍ6;±v–6É:g,jA냎3SµÔ1@²Ë"¢»ª‚ìb¨í’Hg’EP„²x€éæÚ1Ù„é7œŒ\îÃ(LîÊóÓ$P¯m·r9&Ýã«U0>ÈôÙ±.î´‘q޹ù:ÔÚÆ¦kSCÔ­» ›K  Gp?T#qñË¢ÆJ1pIã>aàzûþâ‹g“W‡ìÚmÜ÷‚bž k<åŽ0¦E9^Ú—A^¢³³îoéz¦“wusJÒ\‘¿Ì`@8ŽÎ?/JØáØuØbq¬Ï§ø6˜rz‘éÛñ5¼=¨‹2¯~wy_Ìu”Z#hÅ! ž”Ô¼)ÜYKÄ¥y­\ŠAÔbr8_öª‚eWŒŽ3Š·nÙ`ä|„qYØëEô ’§'åç4ôp’?Ù¨VOÞØÈ'#¨d#$cѱÿê¢ÀK$Â,’¹ÏaUðªì6…-ó1íL†4†F*3¹fcÓŽ3ÀéÚ¦;€%ç¬;’’œ®9QªO^s×)Uƒ„äô皈˜ÇPWœtÍ;ÉÞTÆÆÁ$õ¯?¹ÑnuMWQžÖüÀ‹1Bî¡A=8ï]áU3×=‰ëÇJÀ²Òµ Jîf¸¶{[‰Ì…/‚{qøcÚƒ£7ìõ9è¼~ÊÎú© 1ÏÍÏëH|={¦_i×ß5Ä_k‹ràà|Ü“Óük½òTD ~nƒ€9ìM© @Û†?¥CXÊI‘Šî,TgòN=+ÏaÕ´êZÌ:Í›C5ÍÄ’¬²BXOBƒŽF¼æ»–ÌHTåË0yâ©6³¦ùŒ­¨Zy‘¶ ´‹•#®}êá£9$îcü;·{}îo³½µ½ÕãÍmŒoSéÇáî+°ln?1RÂú×R„Íi2M;&àrUÖ稚MÝ$Ž6ïÃz–¡ª^Ý&¥%’4˜E ~”|ÿ+qŸéPÿÂ#¬ ’OøHw6X³¸ÜqÇoÒ»S|aÁè;Ó$Œ• íëùâ¦ÇWÖê%drÚ›§kÒ¥õãܳII,£,#Ú·µtµc + FeÚ'ƒÛ½K´œ*€ÞÇ~u$‰’‹ ±éÀÿiX­WR\Ìó[=Kâ Í•¼ÑéVó$‰‘#°BãþqÒµ4KÏÜxŽÖ=bÄZÚ”“&$Üàc''?Jíá@N:óK$?çØõ«rò2H¡còT m#±õÏnkŒ‡YšwÒ¬ëSm^ãûdMnB–Ëü»Bãpλ­‡äu§2«€¼{ÔÜv¼B¥¹ õÆçŽiŒÈKe‰ }ϯáRk—9ôÍdjúeýíº­µä–² œ âBzt9…Kò4¦“vz‚KµÕ&ïâ–. ƒgÍ=þ…ùRx”]&âk &¡CˆP;íÜ7SÁ;sÅSÐì&Óäš3f#•–2Ó#–Y[-¸ä§çéRxºá-ô¯=Ì!î#U{V êKä€n}iÀ¼E”¬ŠzF¬Ú–¾ •åÅÍœvÍç mö"É•Æ E%ˆÜOnŸ‡NÒmÉ$…·µq¾•&Ôše»Õ®#– <‡»™9UBó×ÈO½v¥Ï›‘ÁÎGõ«–ç:<ã0ɨC»í"¾YQE¡óÔ™È \¶ï§Í€xë^Š\„]À.9íÅp· ÝÙÉ…šÒäj(^ãìÈêãÍÁbÜ0ÎIÎÔ×v'ý)ÈJú˜^!mMu=:}.ÜO2‰Gθ@8'#¶k"CâÙo ¼þζÛ†Ø )废¿žÃ½vØއž¨ £y>¸éY¸pÅ8¥î¦sz=Þ½6¼ÃUO*!(±‚S%‡pO<õoÅUÆ»ek¼°Fb¸YYæ‹ÌP°û§†ëÐÖÚ€í<Tu›}RãMtÒ.míîú«MáÈàûàý)ÇC*µ9ÝícHðΩ£ßY–×–[HžLZ­¿’¹}Ý6Ÿï8Ø«»1mÄœ¼WáÝ/S‡Ä–2x„j7àÊÑÊZÕWg`>éõè*,0sŒç‘Í9ZæJäw7ioO3.ÕVv>€ “IÜ71 b‘dŒó•nßç4ÍH Ón7©’5…üÄ–]¤? × ¥åãyšs§gÊÒ˜Õ¾ªx {sÓÖ¡´uR£íºá}À¹áz}êæõÍ*ÇVÕb‚]^îÞ³•6Ö“¬m*ç99‘Ç¥li‰{ö@—ïLÒ`œc­s^'ðÖ¡¯jbK8m °Gº{q,¨rIÙÈ#‚óÅ\79¦­¥îmøwFmÎâ1w-ÇÚ'3³Ì~|²¨Áü½»ÖÌ’0ÎåÍfèºLú=‚ZÍ{qzQ¿ÖÎr—׌“úV”™äŒŒ 懸Öèã"·ñ‘iä‚å&•Š$ê»±“ýåÎ>¾ÔEmãí-=ïg&ØN¥ÄEAÆyÝ´gÍtz^±c©³Ånìïù°Œ£ƒêFnõªq¸0,sÔ)àVv;^&KG5‡= à3iêé“»z…êAÆj†§uqi¦ÜÜÚÙ›©ã]É œoÇ$géšòëÏëÚô—V¾±o ÆÖ®í¶ÅY†q°îç$sòçéÖ®1r8¤íÐö0ø•n„b³|M}&Ÿ§Å2ܼ§EiR0̪sœÇøu늃Ã}ŸÂúLp2”û$D0nʃžyç“Ðuè*íýÓÛTXüÉ&ŸË $ŸLQ%mͨü[\çôï]ËQ–óæÙ¬-„眱;#ŒðêNrHÈÎ8ÿ8¬¥Ö&–þÎ8V7¶–GŒˆêáÔàÐmÆ}khç`=^õ+s\NëK#Y‰ÓÖÌéí¨,í-´w’”' ÁŠ`‘œý2{ ³¥ê7wwþ•%ÂÌK¬‘°$€Uêqœ?CY¾"f£-…·ŸlÚŒŒÿe2(.T’zƒŒÆå ƒ¡~…ºu©Ž¯qaû¨#Œ¥±bÎz‰ pyùiÐä[ œœòN1Ö°¼C­Å¢Y$‘åp±&ìpO^ÊڑðÆÓ×€zö®â+·‘lÀ²‘ÅX ;WóÇçSvT‘ÑHöšö˜'ßÈ+È!€ÇU<ІÂí–w³»DŽõÄ6‰ o_Pp8ìwB|“ºÌZ&µêÒpr`ýô8íí÷¿à8÷¯HŸÄ~ÖÆ!zæVͼˆ2cs•‘Ç8#ƒžàÕÊ hB•Ί%T±ÝÁ<ñßÓÓÒ‰%@q*« P¡ƒg§ý*Í“éÛ#Õc`U€QàFücqlü§8'©À$æ¯Nã…{v1ŒzxûÝ:ñÖ³°Á\™Ó˜²œg‚A Î=sÇÒ’yDÄŠ²Á<ݤØ<Œ~½ºS~ÑåG¸"ô—<ãó×ßÔuÇ÷i‰‡1– Ü—ÃîÞ{åˆÈí×=±ëF£¹rO.[xw¢?å' ‘Ïd÷öÀxžÞÎ-{Ÿ²i¿#í !!›’VÎ3ß­wWE|¹R©‰åÎz‘ý9ã9ì+Žñ$É– Ê™÷gËËUâ1ŒœƒÆGáZSzÜ™lgø+Ãö·vcRœ"IpûcQÀTÞªp:çžyÜ+°¸º¸:ÌÐÂ&w•Þ4wÆÜ¼ã€s‘ŸnJƒ¬ cmŒ ̰pîÎ;P6¬ý6/ËŒœçdÔ¶#ðÆ—©4WÕ´Ú„øógÚB±v6ªŒp Ç©ÉÉ$îÆ¬·0uûˆ¼ckå3K@@Pzç¥M¤ø6ÇMÔZûËÙ*NÏ¡à)`úòONœ~:*ˆŽGs§mÍ”r¬l  !_¨ÈÎõõµ‡?ˆ,"·ˆ™ˆŠG.Ê@Err¸ ƒœ°Î7ŒƒÁ¥Ô¶Ú|m¸—Ef(3ŒõàvÎ1’3X1L5?iW‡–ØAÁ +¶%`ØmÍÑO—'އ9.¬Ù±%ƒ¬QT‘ÍY°bÖªÍǪÊÃÉr2¤`ÿŸóïV-Ómª„*p;Ô¡´L…;˜|Þ½ªD;çt㊢‰†xÊt«ŠR`28#‚F?Jb±[V²’ÿK¹¶…Õd’2€±ã$w®r_êϯý¸†IQb“6ˆ BÞ‚º«·–I¥‚/:UŒ”Œ0Ž85¾¹¬êâÚòñ4TegÚÑÜ–aŒœ“Ç¥Kg^Ú¸µ¬ŽŸÄÖêþ¹†M-µ€Lal‘¶™rê#îÔžÀñšæü¤6›â+©®4¨töh\"Eoª^?”ÊÆGi<·cßÂYb\ò{œu4¾f]° ŒqZ'îœ.÷1üæ>>ž!«¥Æx'92¾qž;T^!ñCè—© ZùÀÆdbÒªà d€zõ§Û·üWz‹œím¨#ßÌŸÚ—Uo AW6bàFBý ãåÏ`x¥"è(©ûñºì;Âþ ¸Õç»¶¹†šÛnæ†@ÊAÎ:}=®:a\߆“E{‹Û0ªì# Â’¾ƒñê:×E‘Œ HÏ¢ª>Uaøæ‚pi¹À ·#Š«˜Xvy¤Àô£w¿µiÜB23ïW!pÉ÷Hüj‚ò„WÁž*ê¡ÈŒûŒæ‘Ò‰aœ1f\ô×ÖŸ¥XîpÀŸ—ŽœóøÓUOåã§ã' ‘é@ɹÎF>¦šì@%‚ðx4Ý¡O$d~T«Ê“žA  ʸ È÷¦y€Ê@ÀëL•dóä=±HIV›¥XÀeb ~Q‘Ó5ÅꚎ¹qqo¥Å˜íØ)˜÷l·­vˆàÆs´z‚Sí\lž.³°žêÖâ]¢žNcEüÇûåHÞ„[»Q»Dú6³ª.«ý“«Â±Ü*–WÆ7`dç3ÈÅu¨ÄïP¡@¸(üW¥iCzðÎfXdF-ŽzúV‹bÔn­m´ó0i&PæT\2Ýiܺ´%'Ì•ŽÛU 3ƒœƒÒ±.¼)¡Oq$³ivÎÒÌärIîMi G”FTð@¥p¾+»Óî®ÄWú–n¤…-å‘÷ôŸÞ3r{}ÑÀÊâ® ³ŠMXî4Í*ÏK­ì`[™MÉäõÆOµ^ ´Š¨år^Ms^ *Ú*˜.žéZY7ÎÊÌmä–9Ç×Òºp„z{Òz à‡zÜNÓŽèg!±ÁÏåQËs 0“,#^w6êkœÔ|e¤ÚÈV-÷Rw”{n?Ó576…“Ò(èÛ·xõÁÅHÁAÆyÆk™ð¶©w¨Þj uC{ BÃ^AÏ`OjÒñN©. \ßAå™á¨“;rH§×óªZ“R›¦ìÉæÔìôЋsuº¿ÝóW?«pÜ%Ì{—k{‚¼j=WÃצóQÖôNêiæb’«0H×øW†P#]ß=ÛC£(sò;I7Výà «Ï@§ßô«•;+™)Žå£TÏÐf¼ñ¼iªßk0Ù¤é&‰Z+­Æi=¾\™ééÍz6BŽ:cÒ¨jE¶¢a7Q‰|™<Ø÷Cg<J„Òܦ»’`Ñ«<˜ÇäcuükZÖ¤Ó& 0à»›†*| â9àž•¹…H3¨÷ïYŽ¥¥ô)%³¹hÙÌ‘¨bˆ1Ÿö½8©gEÞZ«èšÄš¯Ú¦–æ,ž\*9@sÕ±ËéïLñŒŠº#ƒpš0Þl>po˜|»:œûU­6ïϺ¸Œ[˜Ú-„9ȬÒxÈéÐûÖ‹Ì–ºoÚ¡Õ¢Ó¥ŽPVG@Áˆm#×=Jp'½ç¥†xZòòøH·ZvklIÑvP~èVÔw§Ó+p8ã'¥q~»½½ÔæšçQ»¹·à(–.7$ðÉаûÃ%GZí@ ÀäŽ \·9ÖÇž¥Ì×Úž•i.½ÓÅv$²xwlÈp²´œvÇ9¯BFSÊ?ÃéÛüöæ¸O0Úh3JÞvœ÷`Ú[€ ‘¬#Ž(Žï“]ì``¶Nìd“Ó¿9ÿ=(#3UÔç²½´·¶µk™'f™ „x÷ªÚ׈“Hh¢HžâêQ•‰AïŽyçµ.¹ ×ö‘Ùß­¾¢›Þã*Êpý=J¯ øuíµ 5 Rág¼+´lTìO Çp+6ÙèF”åп¡ëÇRšh.mÒò,ŠONÇùêi¾(Ö®4}-$·{X¤’Q›tÍå&A9;yíÆ›§YßZçQ¿Ž$vEŠ/.MÃNOsïZ†$—a–(¤1¶åÞ>éé‘èyÇãN>g=u/tå<5â›KÄÄ÷Öw1Ï »Cn„y „cæ¥eo°És +œïǧ½U×Vitk¥…X¿—Ñ>ñõðÈ®X[ [Ù‹x^äÛ€Xñæ*¶N[œàマ+9hvP¡Šóv=6³†L#!ƒšm¼¤äÖv‹ÿ Kòö©‰@žƒéþx¬_x{WÕo¢žÏP²£.ýÇ5’M«š6“;ô¨¼-áû¨­üéžážid$n•„lä`‡n0šÁÒõÒo..ŒÒ@&1Xð@$0œá—TtÏS¾Þ)ðε§ºËªÃn­€Rwºd`7RÔŽ£Šâ´ÍCKÒaVB7.Ö7 GåÇhÄØÇ"€LpºžžÔ™qÇëFâA?€¦)ù=  dŒÊPdƒÏA#‘éZ—[ÝBašž6hØÏàzÖ>—¤E§^ÝÍjØK‚§ËÚ0›sÓñ$Öêîtäd{`SZõy\½×¡ÃˤxŽÒæðè7ö­gví7—t‡1;rJ‘êý]IÚм5‰ckÄ×ÄÉçíÃa›yÛ$þ_ZÝD &í¿© ¹Ë¡N«s{r¡€t,NxïÅHÙ žÉäT;ÊmaŒbž&äž™#¹ü¼\{ÿúë]4×Ö‘jF@ʧ…*‚q–#§AÎkkÌ1—SŒc#¯ùô¬ZÒÀÜ™îï^$b&Q1‰x$çƒÏÞ©{áôžå½3L´ÓÚg´ ¸, –>Ü’}jkÛ -E’+ÅŽQ‰H¡”0ƒõªú5”6°Èö÷/ôI = †›y*Í~ÈÅ#`ÛhÆGÍÛõÈë\õψ,´s²ÃRšå‡ü°|L¿@Ä‚?3SøžßL¼Ôí—P¼û8HNåüǹãjÆš|5§œÚOf¯€7™”¹ÿ7OÓÔôéÅ(¦Ó~EíVºÕaw¹Óç·#nû¬ê3ÍTñ%ñÓnô‰f¼{[¶¤J¼ˆVÿd­;=BÎúIVÒa1ˆ.ãy#©ãðªzö­§Ø,Vú•´—\îSAç´g•«ŠG_ŠÖ±§ÞXj>;yô飺ŒY•Ö5!:íÃã'#'=v2€ (Æq\§†µíþú];Gµ¤qù®ÑÂ"\ôÁŸn¦º’YX©lŒ dt§-ÌÑ åí½”-=ÉÙB–Æ@ÉÇõªÄZJ#Íý£oÉÛ -êp5zæÞ+ÈÌSÄ$BÀ•#ƒŽyüª¹Ñ4¦M¿ÙÖx?.V0§ÛÜväT›ÓöV÷¯rõ¼±Ü[Ç"8Úà$dyþªäF¥¬Åâ`iö‰¨yoòžûg”¾ZŸ–3Á䟛¿JêíãŠ4†0|”B“Ðë×Ò¹{¯Ç£êwVÚÂF‘,»"’ÞDrF7|è aõÅTWc =NŸFº»ºÑí§¿ˆCs$a¥Œ©O==…\ܨ¡‰ÚžEisåº\Âáá•‘ÆFAŽ¿_jtÈ ECH8÷¤Rø‘Í[øºâK¸ èÓÇa4Š‹rsОO§®ºXgïc8ÚãóøW‡5É,£‚Mu|µÚ»²°ŽxþU§¥èÚµ®®·—š¡»Q Þ¸*I~gmHQ”ofXñF‰>µ§y6ò[¬ñºOœnBÊr¹›¯ê÷šeýÅäUί~póÈGm™篧$uê{¦;·‡¿¥_š˜ËÔ‘T¤ÑÂÒ hÞ!Ý¿jÉp:ÕMP›N±2C´²L± ‘‚®OrOj¾Œ3ƒÚ³™qvTH÷6e|¼¸H#É#œŽà[ÑÆÄŠHuõ«„LÒ¬h®îÍ´e›n:žh,2ǧLz÷©è5¹GP´KŸ‰Y£$E*€~„öªw6W7öÆ)d¶Üs¶QÊœgûÜÈãMi^\AWšT2g žœž•Ékÿtý"á­-‘®'±*.qïÏsÐ wÍRMì&ÒÜ~§ooá­i!–sµvøÌÎIÀé»’FqÎõótžMJcÍÂ;y™YãŒ`ç¿ ò{ékÞ9OZ‹o±-¸IwFÆPÀð@ÀþuÉÇq{¦æ,+ϘHþ¼wüSÑ»k¹Œ™è—^Ž=,Ü¥¼ŽCz·==GZó¹á’ÊìÈ`FCs•#ÓŒð1ü»ô âWØÂYêvÌŠ1‡UÏÔûާ=ñšÔ¼Ñ­|C¤Mwk!++y‰å²¶ðqÀà‚ÀïžÔ£'ïdÖ‡E{Μцv¹à€ ?ðgéýNEuþ ´—UÑËJáÆL†$烌‘aÐWwbúN²aË»,…~ë/™ëŽüçuàw¯QøUyºl¶à“$lwÐdç#œw=:ýETþ¢`›zœÏ‹ìÂçÈyQ2—ÚrÙ9=x?^OáÏhº}ή×i»Î!Mî±`Ƚ N[Œƽâ]‰#¹hIˆ·,6ñŽï¬}kÐômCQ—ʵ2¡¹ýÙØp ú‘Ðãý“DeîêZ’A¥¥®§T|¯–dýÂX°,àtùzdúVŽ©¦Ãqso‡Ì׳ZÇþ—v¬69`¨88 rFä×e§ü4Óí£]¥8Bc¾ÓÌôÄSO¡øWT-Õå‘çŠ/˜Žê dcÇhRB¬ 61óœã àŽù‹­øƒGÖ´Ñ>l2’ †âŸ\‚½qŒñŠÌÐ5Ý'ÚñÓ¯ìlÖ7bÑß"&ô v¯Ëž‡ ãvÖÁËfWð·„oõýR GQ ÓaeÙæŒ´ •@n  ¹b#Ó5Ûk@’ã[šÈÌlEeŽÆ”1=ÊN}0sÏn²I"WŒîFÏPè#Ú²u8PÛJ'V6Îw3*’cõs·<œw'§ZÁÔr‘ª‘Â\É¥Ïpù£xVr u'¦1×èÏMª`ðÒÉ7ôûŒå,®Ø8˜ñ»ŒuܸÈqF«hÖÅÙ¥iG޼:rK+9uyïƒT¼/r,-5]NE‘ʪ@³#à(ÏÌ7u ½2GÇ®ÞÌìl.MÇu?,2Ãöui 8‰x{ƒ¾õ­°O ²©æDXÆ7à(!Ç9Æx ó’@kŽð½ä°èwúÓ=»\ÞJ-Œ»>Ub  Ü‚Nà|A9®ƒA¼MGÄ}æ*¶8…”¤Ãæ“óa”ó‚Ì3Æ+9#H½NÙ¦&xû¼ã¯Ö´P<àg9ý+$–h×Éܾýþµ¨™(¼õñYuZ6p#ŸÊ¥U@»@ÚPJ¬wÎâ3Ž”§rýæ$ã"‚w3|c ·~ºŠÞ'šGÛ„rÄþ™¬¤ðž¡qd“EâN?1Cˆ¦fžJœ8íZØÖîu m8˦Å÷[‘B°$rpsŽígXxªî}Yt÷ÒÏ™·÷žTÂ_/œdýsì*[Ôê¦êª^å­òýM­{L½Õ´“cgªK§»º‡¸…w9Œu r6“ëÚ«xgC¸Ð û'ڬ͔q…‚ kS$–bÎå‰éÔtõ9¬ß다i¶—2jWÍò­¼hÍ9ØÀ&_åQ’ -ÆÓ<«]ês¦£­ÚêW±íyRØ+$ Û¶©tY¾Sž¸­UùN´Ù$ká€òÒ HÁú þÍVu½3UÔ$Q§êâÊ2`" O¯&«hÑ«x¯Äó(Ëy¶ñ1;±nŸð:]sMÕï¯BÚNb‚DUwY˜²ÛW¡$`g·526¢­=Òõ/økM½Ó¬¥ŠúñîfiKù!|‚¯N‡[¤å ë\ÿ†,¯,lçŽñ›-;4JòÚ˜ü odã‘Å$Ìë»ÔzÜ™ÎiXãé§¡çéÍ&â1Î «œö$ö¥üê2ÿ/LÓâÂlj[<^iÛÏ0&´#U9e9Ž;b³­lÕgó àÎ~µ¨Œ‘*cvΖ5HW;yÎ:*Âm`wWšˆŒã4Gó·¸éЦÄX+µðOi›@b7 Oï“È=*UÀ*N3yÿ ãu\»½‘µ î/tá3bÚÊ@„EÏRON„Ö‹S•ÙluÖ÷][‹›Y’hß;]pôãÓ*!pÍ™KsœÈ®wžQðÕ˜°‰ÖÝ@¢gÇ+zMÄó@“@†Í¨YÁ2C=Ô1¹(yIü*YŽìÚ@ç'éë\\^ƒV»¼¼¿žãsÎè‚2Ð äuíøTfÕä’M Öá…¬¸' ´€@àòG5;¾¯§6Û5†®·zݼQnKb ¸o½kFþþ->ÂK©äXmã™ØÀú¾•“¢iÖ:To¨fyKrNrÐpzVŽ©k¥e-¤ãt3£#l<€xãß½4ûœµTT½Í‰µmT€×0 äüÒÇúõ¨ìõ‹BòK{{¸d™qHÜŽÝëÏõ? økÃÑ /­â¸„ ŒÝ´s;m'kŸR õéZž·Ð<é¯ü?ç"yk±Hí9ÏVÏèOáZ¸£c¹ee‘w0Ç¡ëJs¹¸Ò¢ÈÈ#=1RíËnÝ€GݬÙhI òØ`¯©ô®kYÛk}öŸ%í»Æ±ÆR þ[däm?PýuÒ w*qÁ^@‰ã)Œ}ý*^ÆÔ¥ÊïbŸ‡aò •¾ÊöÑË6øàcþ­p1ÛœœvÍVñ _DöbÁ.dÅʙ܀JmsߌgäVºÈ6d×2kŸñJÜÜ-’A&Ñ%Ê«'ھϼ`p瓎$ÕEjEYsI±Þ¸Ôå–s¨Ç:È!Œm‘£#~X6À„€0Ó×½m\«É„i*pcìƹï ÚMiq|·“E-àH„®·m4‡ïcp lð1ëÉ®–çæ´”D`Ä~îpyª{™-ŽB›Y}[NK¹/ͪ1 '±T›’Ùãœ×¡D6ˆÆàO c8?ç5çÚ ÙéÚõ†Ÿe®¥ÒJÌò[Û@6##%ƒ3´p+ÐÐp¼ç®N@'ðéô§ [3žÕ×H¸ÕŒwöWOä®ÜFîdãîóTä²ð¬´ÖRB»I̱L£ó#Šènä¶³¯%eB0ôàdŸ©?r&KjAÉ“ rÄ|ÒœôÔâÏJ„¹•õI¾‹IQq6ŽìбQ*²¶Ð@=Ï~rkVâúÂÒéòh"i72°MÀp[{h-mã†ÔyQ¦U1ÿ׬¿‡í®,×\xesø™Õ~è<yåMT:Óç—2I×<ÿÝX,–3@¶Ë*MnNà å䃂}¾•Ô‚ª@<ñ·ÿ­Åq¾__jwrèÖȯ J’H±”\3”©Ç? 'Šë¤“E6 QÒª[™¢=RîKM6I­cV¸,ªÛ ’q’}_¹ëWZóÙ´p%ÀRíxŽ|˜ÿ$ç=x1[·V1_ؘ. 4o‚ÉœqúU3àýT¬€b6®F3éϽC½ÎÊ5(ÅZkSZÇjé¶ù‘¥ýØýã7/Ç_^zóXWöZFŒ÷úñÓþÕpX<Ò* 00¤¨=09ü+ Š&‚2Á3ŽßNµÁjG†ŸT½·“Ä—pÍw+´¶ÑÞ*®æãvãðëZAurº;»+Èï,mîá'Êš5‘8ÁÁçô©ò»äñœUlì’ÒÖTgt†1'Ÿº1×ð¥ž=›Ä%’"Ë´:uSíI=lK<ð[ –âeŠ0Aß#·l†$ ŽÇµTº¿´Ó§Hî.ãIU’Mœ zœw¨hÚ›’~集¦«k}ü—ŽfÎK½0ryâ¥ñ*é‰bƒT¹HÎÌ3Hû6HœîÈÇŒäx â®Zj¶„ò[ÛÞ$²ÉÙó?Þǽfø£C·Ö›OûT s¼ìóA¸åÔ©#pßðç‚A ¯*ûÛ˜šf¿ró4ÍMÔ•ƶ¿“dƒ‚>I‡ÇU¹­C©I©ÝÏw¡Á¥$‘®Dm¼òe‹;2vé××5Pø2ÚÎ-t7Tµè¡H®zðàsÿ|ž9$šÙðÝŽ“em(Ò¢žݶ[y¥rbp9X§‘ÏpAäb­ÚÚksJQœp§§^”؇ÊËÎAíÍNH=‡Ö¢p0ÛW¨íY_Bìr_îcƒÂÓ‰&Ûæ8UP9on£õÏN•ã. ç÷G%TÉÏaùóŽŸŽ+Ö¾%é¦òÂÎå› ÅYÿ{SÈ9Æk“‡JH!I_Î/#áÝ̘b6ã#$ž8à}k¦›IÍ]œ\‹ %Éw–ùA'œvõéùŠÝ†e’$Ó¡Au,‰•tBNß¹ÇP1ƒŽØô­íå»{ˆlØ’Q[zFsÓv:`®yàçñè?²†a¶ž\3Ü(Û)Œ;#fã'S¡=:%%Є>Õ4»½=dŽú%I£ 3±H$“…ÈÉ N~•gCÖµm1e†ÙwÂç~×ÇÈÎx>Ù?JéÞ]#\ñ}¤Ÿ²ÚÄYä,ŽIéŽÇ1ÎxÀ«öÞ#ðµá–ßìþS !Aàœð2F2r1ùñš›ÝY¡¤‘Äk÷PɨÉt—ò\\u2*lPß”–Üvã…Æ;sÛ§4&ÇPw#QBÜ$q¶q¼duÁóž˜ï‘«¾‡.¥W÷.mÀÝ+‹³7ãxŒc±=pq\άtVa‘iva™n¥ëŒðªzzŸÂ‹)hÁ»á³\Ò¡ºÓÞ ‘`Ìw c’:ûú}xȯshvQ‘äc??’œ³sדӎ? ñ7TÖ<8ÌÚuëE¿ïFFõú•!¹ëÎ3îkª±ø$P%Íý”×7)±u+»Ø÷õ>øëœ©IlZ’z³º»“Vփưý‚^$~ÿŽ™ãŸOÓ,hvvqÃl›¤•÷Ž0¤õÈôÉ^NFr2Mp7þ<ñ©q/ÙäkhÝzFà:u<ûdV=Þ°—¯pº…ò»ãÌ‘%`Ï\Ùî{ÕF‹¦®{t^»ŽÒT›ìR+¶ã $ÎwÁÏ ºôÊø‡Ã°éf9æ°o³ºŸ´,/˜ÂŽ&GÊàÞœä×1§üCñ6Ÿ"Fo…€[„zuÈÃu÷ú÷Ç[cñbÍÙmõ{\y܃×*yþg\ây&мZá-Nç@¾ÃZÏî'$ØÈçs‡·$`zAíŽî}JÊÞâH®/-Ñ•wìyUH¸ì2?q^$m/ÅZ4—UürM%ŒÇ‘$n¾«Á€FHê¶tZM_D±Ôb´Š[é“)$F ‡9켎ü} ÉucO¡[\½ðíú´-4AdÁ¬ÁBò~qƒ’ÙR¡±×åö®.æ8uK²ÇZø~Q$… y{×ä1ºO×·ZëµËK 6îÂKÙ..ŠÍæˆÀŒnXÈF`’7çœ[1YÚÉz/Hýã®Å_àã8=zúSRåBjìM?MŠãCk{Ñä3Æ~àÄY6ñ¸dœàuãè§èZ/öV û'•¢PH#üÁè>R6ãÅ_™Âm {vªú5îŸs¨Þy´©ýÿ7R£ÿA¬Ûfš&n‡WÞ“Ò¯ù .àã''§ZÎVJí È«Ïè×®;çÜT©4Dè;µ3Ìx=…gÆÂ6ù† èëÚ­¬ƒ*² ‚ éÒ¨H£­Ú_]iæ •¤e &J•^øÇËê++LðýÖ‘Ggylb/ºV²ÈÞûŽHúcú»Å—Mؼ¦ºòÚ`JZ$|œ‘ëíYvµ}©êZ|7bxî¼×ܩą6 99ÁÏÖ³{ÔéÔt´zÔ‰òä›Ê+Ü®à|§dÜ:Ž úU#YÑõ{»µÓ/-®e„'žÐÀX¯Ì8#†8j‹_ðî›â}7ìz¬-$jÛЫ•(ûqœ‚=z*¯†ôVðü-d·¿h³‰l­ «"¨9Ë(³“ôúæµV±ç½É´R©®x•†h&O¿ÙáÿëѨx–=>öh^HWiU ìT¨*îAgô¨<7t³Þø†QÿAB£=r°D½ùê i^kvœžmóÇœ0Kÿ²9526¢“•œn7ÂZŒúŽšóMwöœLê² JƒÆGëøŠè ¹Ý‘ëXz©§c%͵¡·ŒÊÞ~ñÇ®k¤€¸RFzà÷β÷Þ–%bYw)ëI¸œsõÀ¦Ÿ»Àǵ(' qÍ3+ ÌTzÓ÷{þ•d‚84… sšb±å±ÂBÀ{qŠ˜8'·AK°ù`{šv^œcµh‹¹™†AÅJ‹…S2Ò⟵ŽÞzÒŽÀÝÎi»—?¥9caÈÀ=øéLUÏñ‚r@?<’§ð £(LÿúèØÊÝ£œU‰àãŽù4˜n{çÒ¸±¢êÕÍÍÜÚ“ZÇÏ!AÎvÛÐqúídFäŒgÓùJàš}¾òßNc•¾RWÄ·ñsܬ=ýë[æH4kýjV±»¼1Eb‚7p?Ö7Pqž~]½jî•¥ÜèœV«uö›;€F6íØáIõôž,üg È|”,àËGééVì·×Z±]VŽ=ìU•‡'ËoCõ¦k8É«]XëÆDAŸïcÎsYVþ)Ò§ÖMKŒÜnd å¶ÒÃ9‘Ž i”$|Äç9ONk–ÿ„gR1Ä訃 ŽâYÒ5¶I7 ŒüÝþuqÔóZÔêâš7VÚ'žzÒ…Àã¯â²<;¥O¦i±ÃrË-À.du<]›=½GjÙn.N@ÏZ‘®èãáÔ'¼¹uY­K‡d ci9όӇ„5foíùÁc–n~cÓ'æì®ª¨.WÌ…‹©$nÆ2AÁýiÌAë»9÷â„®u<][ÙÓ.tëýMn'’pâ-“¸??ñŸLâ´|Amw£\Ãe0ŽåÓjI’1øÖ‚€ã§¡îiÌç{'ã¦zS½ŒjÔueÌÏ>²ðEÝŠ$‹ý‘ytWç{Ä•¾¿ÆF{gµtÕñºìñê0ÅöU…DF݉ˆäõÁÏn«©Â7,@#Šrc¡ãNm˜¤=UŠ0pAëO`¹;¸Èô¦†rN ·O¤, èG½A@v–#=Mq>-mSߨÖ¡«‹Kù!{mʱ«3$€;diÆq޹ïRö:°Í©Þ×*øi-ßL•¢1#yÇ+…”£¡nŸÖ›âxä{*ÚÞÞé®wE$p¬ aC1†'?¡«Ú4Æè\³Å/å[Ë“;ŽÑϯAÔÖo‰í­.u-0]ÂÓÆ¯#´^_˜®sóg8 ?J¨â/Îî¬Má­tg¸‰µ(ïbŠ%!ìE.A8'%‹1ÉäàŸ¦õÊG$¥åç=†=;ý+ðÁÑCÞdXËl]crûH©Ýµ”Àá½;q[Z‰tË…µU{%¼•nŒøà©Àª{˜-ŽF»ÑåñƒéV†Í呚hc¼Êo”í;œvÀÆMwîID#8çžÿqú·šõ³xaŒ³,¶>I·`xl˜ü ñŸJìa}Ê»“èLQ K±ÉøƒJ›R¿yooRßM@RÇ#=øÈ¢ÇU·Š4¶µÕ´äXÆZÙ~{êÅ¯Käö{Pª°©âGa¸ž==ü+¢J¦#f#`%mßγ=%R *3ü‰t‹{èæ½–ñƒdVR™ ½†N=*Σâ m&qö¨ /”ò—P¸EB3Ô‚I%@òGGÃNöö7“Ldû,æcœã#üI­Í?M¿Ù%í¤7'b†XÃm=ÇÓŠ¨ØäÄ]È© kpj—WÓÞÖá#¤…ÜÈÙ(r?ƒÓ5½æ|¥ˆ-ƒ’W1íšÅÓgѯ{žݸWºhòAn@ËzõãëZÙ ã*)½Ì2¼Mp¶–ö· s5ºyÂ7xþö zªÕY|ycbÞ)ä‘q³x¶=Ï#ò­]GNÉ‹“ Ã"̬Fádg¯­]¸··ºˆÁpŠñ°Á^ß_ÐzÔÛS®3¤ ”–¤É+ɕڣèzg=ÿª¸››66·ºkêZÓg¸•Zi9™Y˜¶Ò¹ÚdðIã»D"3À³Ôtíþ5ÂjZ…äšæÝõ´ó¥y`HäE˜[;¶_hÙãq'o>•q9$Óz†)ÀÚWøNî¸ïךE-°“€sÛŠrí›y`üýÿúÞõKYº{möxŸl‰ +ØãŽ´™Q3H¹†˜‚¹ëŽ}èU.ãÊO4 E||Ø güô®$–‘ŸG,wxY›ÌɃ‚Å”–ã¡^€s[^1Ûêw6Vú©½·òDˆÞ`rŒ d¥fÙÚðÒ„LÓÖ5É4—·†ÒÊkûÛŽc‚<.B¹‹äÄU#ÄÚ¶“ ÔÁí<É<“ØVYÁ^zóéþ5O[ðݶ³qk4÷7væÙ]Wìò˜ËÛœŸø8ö¬{‡V‘MkÔÖ†$-òòÃÎïj`rxÝŒŒuö§³|ëò¯~Ò€G&4ñǽKØŸ«ivúµ«Ú]d£Ÿ½ÝèÃЃõ¯<½»Ô4U­. ¶khÜɽ­Ã…BÇk gæ9ÀÎy=3^ƒªÞýšÙJ¬„›ÏËžäû >Àלj:ï–²[ZG´’y’Ï&[Í ŒîãŽÇ8ç kÈ“L³}}q/Ú~Ùr-üØŒ‹Â¹Àz> u\‘GáÌÎÚ׈ VF³¶cå™ÙJîO+Ž™Ç=Æ~µË[é·þ&¾gŽ5xwaT «làðsôÇ¿>†æîÊÞ]Få¢XÓ‹˜þc I8Ã~8öùtvD£Íõ-:ãBWµ¸'Ï]ÀÙ »@ÊãÔqÇ=jønÝL÷7QÛÛ¾[ ÙëŒôíÈü«jÞîÏ[ñtKâ)’ÚS|A°`Œ3ÀàžýJî~Ïá •Ù èø¬2"8þªsiXo©ÌKðÎ A¶¿F 2w{có?‡½V—áµâÝ$gæXHr wúþuÕ]YiïnñZk1ŸÝÉuæ!úäîýjöªe&·½¸‰æˆ•`Üsè~ŸNG¥gí&‘\¨çeðop¬,ÌSÍf#£yÇãÞ%øz.-9žTd™O$Ž\gééÞ½ "Vl9]Äcõ¤K˜ÙÖ Ï*Tõ£ÚH®XžikàfDï '#‰~^qœúò;õÇB@Ëÿ„.î/›ku*còȹÔã¡÷ÆyÉâ½f]FÖÜþòe)$Øq\Þ­¬Ù\†xæ±l‚1"7qž}>µ¤jH™F'™2ñmF‘¢?Þ*T1*OB2zz{cœg"î¡vŒ*ü­Ï—‘õÁçŽ:çÓ³•>¿½µ´t/‘òœá€<X“«ß—k _ÞŇ1ÃsŽ9'¶:ÿõù­Tû‘ÊfÚË-„Ö÷ÆZH%Y·¨8O?NÃŽþÁá9Ò_Ä “wK:°é‰ã¸Qù×—\h7¾oØÀûEò&ù`ˆòÇAžÜdñÛô^)¸Ðüqª¬VÍqhRsÉ‘U×äœ.µ5’ÐqvÜéü_# »„hKYm¢G•AÄYgýãmì£?LƒÚ£ø}pWHŸIœâãM•£|6p’û†;cëmbâÃRÐ^öÊé]š3F~ñ|˜ÇvÀ#c€+ÀÓ½ïˆ5› G–c†6n¢GUÆâ{¶9<ž½sX¯„«ûÚ>¯i=ÐI­0×QïØŒp§pÆ}˜qü»ÔÚÌ,óGæ£\¤Kç¦tcœîÇBNIïÔñZ3\ô"­  ò=k;èimI³–Uçkð­P E€>îqX»ÌrBâ7v­`[Ë*X„nÊ0''©©8%p=²y¦Å¼•Êž ñd¸4B¦©ªØh‘‰oe£¾…,IÆz{«ˆôùõ(--ŸíL»Á‰rqœ·tïMÖ´;FòÎKyã`ÜÍæ&ðÄ€Ëߥgé>»ÒnÖQ©#Û+3Ip*$dŽO$ñRÖ·:â¨û;·©Õ¸;{g¾F3éP VܧB;Ô­4x݃ÏnÿJ®àÆUÃTgФr^fš-aä —Õ®Ÿïl ß"´ï¼3¦ß]ý©•¢»VMËtÈ<‚²|,ÌÚ,ümß}vÙǬïYºÍþ½¡*إو0Œ´.í`ÝÈ9àÑ#l4g){®Çk¤YK§Ù˜g•&“{±‘Wh9bzcùV€r0ErþšA¡[†yÛåb ü9ù$vÏãÇsÖ¶ÄŒ¤g¹ëP‰©ÌîËÞgËJ,IéUP'Ÿ¥NÆ)™8“7LÒ†TsŸ§J‰Ž)“ÊyÞñ´øÍÉ'“ øzÔKæîu`JTŽõw †Ú½AOòœ÷¨U·“Œœ×µ;qƒÆh¸Éy!Ž3ŽqH§ä]¹ê) í?/<Ô€îÇQ@ :q×§5 V#’ëMäu³iuw§Ë­ßÙg’=‰2);y?–GµKÌã«ÈŸ¹±+ÜAclÒÜËQõ/+Çâx¬7ÄÖz¶«wgi#L°í>jçÐç'ñ®ïÂZ­¥ÄskV—Z¶fMÓ[Ü `YJãqùAç#¨®§Ã—þûeâh¶²Äq¬›”¨8Î8<äg‘ÏóÓ•$evÎÜ. pHéÞ¤É|ÇÛ5r6Gb9©qʑו™H]탌õãÚ¹½qô¨o®ìÚêí“cBì'œtëšéYx$Œ±/¬5 5nì®áZ%L˜üÆÈ$÷#jdtaÚSÕØ~ŠÚsÛ4Út"‘ËÔN«ÅOo%Ξo­,¥´]ÎÑÜÝX‘»“†>¹ÏnEtF-‚ÜçYž[†”ƒ½RÕ˜ìexbÁcÔÒæÞÅ´ûw·!ÖK¯4NÄ© OæäãïWc€G9ÇkðÜZ3êñÝZê5ìqh.$}Ã8$ís•éÛ#Üñ]ŽrƒiàsÏjRÜkc•×ašßY[Ý.îÝnÝU^ÖWQçc¡×µT“SñUÜé‹nÄó‚=HbqRê:Ž‘â‰å»‰³,”uE%1‘ý*tñ¾–Øm× …Æ C¯çY£Ó´’VÍ#K:f”#™¼ÉüÉó–8ïøw¨ðÏ­døœê‚î4¸õ°Û¼Ám‚íg@F@þï^}«H½t8kós>mË~ПE¹¸G‚ÏÊòbDšØ2q»%Ô’çõ=ºtƒ .0:gœW!àÙ/¡«YÜI~‰‘oœ<£plä§ëîk²>Ö91Òœïs™šÝûÙÁ… Wy$’\íQ‚rqÓ¦?Ǽ×ï<¹¯­ZØYC/—(Ûç`@%y÷ëí]<þJ·¨Þ~U?Åœ{ô¨¥]< q7ÙJ®›x'²çéPκSŠœoæZDË1Ç#œG×¥q¯‡¼5¥‰žÿÄ…¹˜¹òÖäT¶âm$Œö®é† €§ŽGC\¦£àxþÑs£Möké•Ä‚TÇ nHÃdƒÓ‘ùUÄ垬ìÈÚ ‡ŽU»´†úÎ{y1H¥N:ÿ*œ1òÑX|ð\ŸÒ3ÆÒ7v¥‚n.æD~ÐÈ\Ù+ç{sÓ9ÁvÇÃö:TÒËgB$A&âWƒœó“úÕýçÝíR1Éî:`T>ÆþÞ¤“M‘¨ ôùGµXŽFA95U_’Hz*pĵ¹æƒ4‰Ö኱%=†+W°´¾×'Õ¤ÿCŽc›Ä±Çcý+]'–P«Ïƹ½F{½#\“Pl·VóÛ" !Œdg+CÅK:0׿v5tTÑ¢†DÑþÌFàdòH,¡<þ5¨¹._$\Ï…aqu¨_ÉbÖQ\Ȇ8¤HÀ98÷ëÛ­tèˆX°aƒÆsïB&º´Ú½Ça™@ÝÔ‘Å@䯤îÀùñV`’Hõ ÿp€»x^1בM˜õ+³ ªIHè8ÅCcŒcÅ,€•ätÍ29ÓË\ÅÐgãÍIâ’$rž`ä³í$ç¶6ãþ\³®ër‰¾yܹŽ9 …C÷‡ÿ^»xbÿÄ>#A娩.‚T.2;ƒÓ'$VÖ…á‹ ßÊ*·nfx€ÁÇFîOzÝIEYÉ’xoD‹C±ÊÆG#.íÆy8ã·JÜq¿–'v;· 0¹,硤ó }½±œŸLÖmêim ËÏ iú™-< VL–V€'ƒÕzv gµe/ëH)Rä”þ¦Sù×a€ Çw§=kXÕš&ÐK0rû’iXŽIãêÃc¨8¡JWŠF ï‚ü7¤€÷—ÈVgRyí—5—¯†,¤’æÛX Ûp˜µ•‘NáÔ^Ÿâ5õ2ÇJ‰^öÜ\ÝÊêòä1è¤ò]Ï<œ ƒ/ƒÂVÖÑCSŽ)®“1‚Ibru 8àtNm5!®Ærøªãí%!Ölî9Q‡‹¯*êr;rÆ«^øŸQK?2Sk,HAÝG#+œ“„ü¼gµÓGŠþÃûBO5´õ Åâ¾a'D 6Œž7ý0xèì/. ·Ž$­ÎÌ…yÚ˜–P|qN*-†¶-§ŠÌ£{C¹âÎÙvýᎄsþ{VŽƒ§¯ˆµck,¦Ê6S$@¡o3 #sü]?>y´agoto™v´èê­Ÿ5óÔ0N9:㨭BÚ÷HÐàÔbÔL1µÆ"T£•Ãǧ©èH9ö­­dBzžcà}"Ñœ%ºDï•Ló€súÖÌÚ|pÙýžÒmÕ º¤jr¬\c¡®cMø“£¹H¯VòÙ¶‚Ò<<êHIœŒŽõ‡âï\ê—–vú ÑYÊþX™CG¾L®A8Ý€qß'ŠçJm›9$ˆo%Ôô­cSþÈTiµ–g‰ð³ÆA,SÕzŽýùç³ák;+Í ­rðjÐÌÒ\ …$ŽBsœáÆ¡ÔU#PÒõ}_Ê¿ÕkkùûSRg—oáÚ\zƒ×"´wÁ7Œô‹9Ë«ùêÍŒæ ¹Çðï-ƒÐŒ}MJö±1±f_ ÊË$pGam<ë±®!…ƒ°ç8^‹œóƒ[.‘k¢Ù}šØ6 óÛï;¬}ÿ.Õ¬FÜ|~4Ò7T 8¬¹›V4QIÜŽI íÝœþun,°=òOZ‡åln#©©„EãÉ`)=†‰ƒ~þþ•®A1’Ctë-Vò ª8­C6TîUQÇ^ô\C€F3íÍ8±VÎy=j$•CP:ã9æœÁdl¶ Ç¥C¡­êzš]Zéúg’³\,Œd“¤aBöîyëƒTôë½b×RNÕ¤†sÿ•M¬"TÀîb=ª@FO£P*Ò° 9_ÆÈi¡¤ÇÝ4¹ù$Ž)Þn8ÝjàW'œ¹ëH8ÆÇ| »§ðŸjÞÈT|ØÈ±uÙ#[ý*åFÛ¥¼HÃd°õúÓjÆÊ¼+~ï–ÆìFï½ÈÏSš‰äIâ¬!Þ¹l u·þªpL†#Pp½ìQ$*zvíOŒü§§ÜԒdžÎNGŒeqùÓæ82ƒ´`‘Ï֔ɵ·6GlžÔÝÑ‚J=MEwmí»Ep‚HX`¡ gÜSlÝ™aXT)ÇŸo”°úóÔW7¡[7PÔl„òË ž^ìðóýk¡W&.‹ŸLsÖ’eT‡#°ì ci8n=«;û*Å5 /Å´j˜2M¼‘Ð*Óç 1žy¦ ‚£¦zÓD Uãwõ©Áã®xÿ"¢Ú€¸È=ÅHA<çëHtaFÏ8n•ÏêvÞ¢ëÆÛiЇo9”¢¼¡}ýƷا Èï\~¥,°ë÷MeöǺ ™HâÝàðyà{ú犙8vÜ´·ÌÞÐìä³µ‘nA_Þ± ¥ö¦xþcë]ìúŵʹV$ &ó;T’¼€Áž}3[:s_Kh ô G Ÿn½Ïj¡â ï±Ïu•J? iQKÐÄñÉ‹ Û!ç=iú¼š–+m>EŽiòÏ,#U‘ïÈÿëuªqI­i:…§Únã½³¹qB(ǧlõÿ#¾m«tã>]%ò:”ùK/äz<·RsœœS€ Æ{­<€,=9éUdrs dp(D'?6I¦ŒÔç¹õ¬¿O$:=Çû%¬Aó»˜.xúÒeAsÉD¼uK7÷vâbp#. “Qé×:Œ³\ ûhãE“•`w/©ÿ?•sðøIò±#Ï,¸ûåñÎyÀÇ·ëW|6ÖæÿLûCO£'–ìy®BþçÐOS±Ó‡+äÕ£ R«#®úUà/E#< ÷ª£‡Îâ3Á欦<|ÜÐr&Z‰˜É»‘Èb‡ ó†CôëMˆ³¹'=ǧÿ®šÌÀg<8Ïÿ^Ó¶«q Â䌞œô§,¤ù” {¯áH0 ƒÔ÷¥2dx¦œe_lÕK÷ !ëÈþ1r¾îzõ¨.ÕÞ!ò‚AÝHElîùIP 0D6œsìi ¬¸;xïÅ7Ï }ÒA<ƒê!O#±5‘Ù#µ;ÏbÀêOQHó‘·€iØHlqv šV·DNrÙî)RMÛˆ©ëC,F3QȦ>ƒ¢„©í’8ÌùüU¦ÝyemíZá^¬XƒŸ}Êqì}+©WÂŒžý)é(ù@Ï?­ ƒW8‹åºÿ„§Kº’ݤU»’6rQ˜2‚F?¹±‰ô^ÕÑëVsÝZ¸‚9%Ý‘4q°¶ß˜äŽ8ǾkT¬^q›ÊLcvÜqéB0€Ü¼PØ’3´Û!ðí¦{1Ku†D2ÁëÅr‰áHu+A5ü°C *@¸P¦"6®@\ä‚?ˆýtò(p¤±ärzSV é+Å›¯˜Ñ‚ÙÇ^•<öcq¹å²x{JmJûL7ˆÚnÆŒÈíºL®d ×, Æ7s]”ž²¿û4kh ýôJXÛ•TõR9aÓ¦0rFâéZ|wÿkŽ· 2¤– 6 ïê^jñ C¨ ©Ö®S} QHå.ô=BíÂˤèÒlDÅÝp: á}9?‡\VŠt3˜.îml[È—) ª0 =C"Œp8R0k yõÝN ¯l/a†5—ý¼ÔSŒ’Gñr.FsUoSñ{‹·‡!%—$†*YG!w€zÓSb²óÀº6¡0¼^ÒF“QŽ8Ûøw­]#A²Ñä{ˆÚIndÀ3JAlvQŽƒŽkÂ6BŠ¥zu=Î:ý? @ë¸)=¹ÿëT¹6ZŠC¥,§¨ïžj-êFI9Ï¥K!VC§Z¨ ¡l“×#-TÚN@犱FA°ƒ‚2µšÒeö£dù to°Œ6W§z\ÖŒy×ñápgƒZNÞ™;‡ Ö%¨ÿJÞH;@ÁÏAZÂuCŽrùæ"˜õ8ëœb“xNx“’?:T àä^´Ö¬ŒTp£8Ïzh^F.¦Úÿö¸þÍò ¯’YÆíÇ¡^s‚*¾—eª&·%þ¦¶¼(bØ?0?ÅÏoåU5Ÿ6Ÿ©ÜºCä»-œ`;œ¶w('¦ãV´mz `Ì–-ÐÏ‚ž€ò:´º³ö‘§¢7Ú@Pà~µ‘âIÚ êr.²ðFK¦´M£Ò±¼Z]|/r‹÷¥hâëÔ<ЏýjÑÄÙ·mn¶ÖÛÇò¤Q*(Ýнoþ¬GãPË`sÓŸ×üúU¸Ô„SŽzt¥!Äq$7‘šCÇ ã§j;ÈÝèi:.wqíPÊ¿„dý1B“’{H 2sמ”Õ%¸_lõ D’s·çõ ƒïC:%ΓQ…޹è[å=qéÿ×§à>ÞÕ9;#sNVl’Bàã}­ ¯°É`:Tås„'wZ¾}ÏsÐTl™aéï@-Ï?¶¶ñ$‹4–wJmÖWXħ%°Äq‘Rùž1Aå‹+g8?Ä==ˆ®Ñ­Ð÷Ïß§§­GÖ/£Š9¯Ë}-ö u–+‚c%T{WF6¨$´ÙmÁbØÃK(äšP¹>ù§kÔ—4®•‰1ÔüØ=ê&Àsœ{SðÈGË“¸síMÚ¹ÆÓŒZ Ç:gæëO^sMPBî ÆIé@‘¸ï@ÇÝòqÜVEÕôöWÓ$zUÄ ¨o6ÝG>ÝzŠ×9^¤Ø×;©kßbÔ&‰ÄxM…QÃ/«nÏÓžÇFR´Q©¥_Ëm$“Z½¾É lÇÏõo,ç5—áíBmBÊg’U“Ê‘]T®å`ãß9­!Ì€üÁˆ÷¡2*Ç–M~ƒŽ¼äv¬O‹–Ц[VœO¾=†Ëgzö鯵À@2'¥QÕì_PÓ¤µI’&fB &ñÃr228õª[˜³G}b_Jú“K[` ²Gˆ$|Á·ÍÇ9ŒúWQ´à¯ãÛñí\þ…ቴZæúkƺ’UXÔ¶àW'–föü…tL|‚;mª•„Ž7_ÕïîïfÒtØ¥Â&•±Ûó«KXhV «mtX夘ڿÎ~¸Æ==?S©uªiZ\²'‚fù„c>à:È—Åßis—¦ËrÙÆâ–Oê+#Ò‚•HòÆ&¬u[I˜Ôx玼ָ ÇÈëéXžš[í!¦¸ ²4ÎX"<öþ¹5º ØëTŽ:ÉFn+ ÒØÁPvçZUPÙQ‘œŠ6ã éNàÜdÕº®ý§4,—³Û4JËû£Éɯ§š¾¿K‹WþÖšæ(îCÇ së×ð®›‘Õpp8ÝÌ BûT´ãˆœU n”Ê}=éNNAR½ Ÿ•å¿Ù¡]Im¨N8$f¡‰§ryª÷ö ¨ØÏi>ï)Æ#Ð|բ͑òsÜV~©¬C£@·B’8L©Î3øûP\9¯î˜káßÀÞD:Ó5¨ÆKŸŸÏùÖþ—¤Ã¤Z”RÒLçt³0åÛ׿¿~ýêü&š' Þ>AýÓd~«úV·±²ÛLj’O,1þ.Î1ÇZާ]Onãï+L‡'#úÔ¾pTäú#a†<{U…T)’¹ïÍ9PC¹™Š¯=È=ªÁ‘7($ƒ÷±Qƹ† ^iUAÁ òާ¬÷Ï$òzñHd“ÇŒT˜D8RǾÚaòÙ°0W¸PÙ r£Ú£$8Æ9Ï­,…]ÞöíJ®02r1ÅÙ_9Ü9äü¹¦ªV†zÔÌQ²HÉÉȦ R™U?½@v`)ÎÓ× ¥da&Ðã¨ãõ:¢†\.r:‘ÍHP*£ð3L#BrÜãwÞ–HCnÝÀ$æ¦@~f ÔÙ¦Ÿ¹Ðž#úÐM Ãl+íÅ"Âp7 T­„–$mî3úwȰ%ݓӃúÔ‡pHŽÔù²äà€õ £'å88Ã/ô©²§ Ü: Sã9 ‡'ŽqŽô0L¨Ñ±vͺ”å==é©€Öñàu9«L%$|Àƒ“œâ¤ ”ÆÐcÿ×Ò¦Ã)o›6ªTð nsùS¥ƒÌB$µi‚yÍYM¤@Á>§ŽÔé3”1펕HE$¶MüC€8ÀÇÙ-Ã;Àÿj®¶W%‰'‘Uäi~m¨$r1B [xÊ’"n˜ëGØã$+Äùpx©Ä„¨¨ÏJ“w*uëE†Rm>FÏ-ǘàóQ$®£<÷­VÉMØ=3Á¦…fÜÜõ&˜Œ_ìïœó ÏüûÑ–ÊÛMÄä=WƒúVÓ# žBžjCp3޼ä{Pb8p[ÈÏ_¬«2Çn)ÅPGPx¦O#žx¤Ã…‰ žÂše+–,€i‚2€$ŸON E—Ý‚ sÅ ú2EŽ–I5> °\3à`gÔÒÇ+#È‘ wÁfUÁcïNRNI81OŠ3€3×¥- ævµÇd¶nkÄÓ³ÓQmJÑ_5Oô5Д}ÀŠÄñ"¹Ñ" ímJ20y£·åòÓD³¡L—,Œ qVÖUàñÎ*¸~0000(g*8  –ƉÚQ…%±ÏçLfô?^õ Èä¨FR:Ti Ç!—qyå.ÜO^)åµb#éž½© à;TF@H_N”/1ž  CˆÈëœÔD9$‚¿÷Í.æã·ZašÃÛœdúâœÃíH †&•²XýáüºÕ¢ÁûÇRz A˜íÄ»H¹§¡ ûxýFj5,F Š“8=; Ä„3×Ó5–r.âTŽž´à_?(çÞØ…“¯g¦DGùºžjé/¤z”Á’äc†'nM;ŠÄ@œü¬2:R†*r[œsƒRÀF¥0ð1Àïõ V7N>ï­.àU²:zŽj5“’0zÒoBO,qÖ€%Âgœc¸¨Ì0<Æcp>}œþtârǃHc•üh)6‚(a„7”ŠÎ[h'ÔÓŽŽ7cœã4˜p£¯¥ ç8ô ¸Œw@ ç¾cŒÓ°ÀQŒúÑå¨-„^ ¦C€§ž=O­•ÉÁ§ùEùr:ðãNò9±ÌÞøFÒæíîí¤ò.YË30.OS´ðzŸÎ¡†ÛXÑ®.'6Q]Å.Å"Õ¶ Àù{þÕòãå?ˆæœQœ §¶)XéŽ&v垨ÇÐ/ŸSÓâ¯ï*…Ûž3ל{÷­P chQÓ=iÂ!„g9Ž´ð lnàgŸJ j>i9"%VªÏs@lç€ ÷ê;RÀ7zúÒî;r¤ç¸Î3NäØV ¤d`äsL;NÌ9<õýiÛ·œ‚G 4Ÿx‘òúŸò(¸XTÚHù=±Ö•H²¼sÍ"``ß8Èá­‚õàâXE(Äe{ f›5´f14I"«n]Àþ¦¥ s»Ôô©#,[ìæ¦ÖÅÒtçQ¾ÊÙ^bSÏ·zšÎÂÚÅ-b«¿˜Ê3Œž§§J°£åì? ˜ªPT©¤_<Ú³ljÄWqÏSÀ©FÖ@ä9Á$S#@¸À' ©‚†RìôÅ&Ä•‡Æ I ÇaÖˆÓR£9©¡‰A‡ pñõ§1U £?çš@FÈ, 8õ¢d¯ï^†¦‘€'åƒÏ£ÜI9ý(†¼xSÓ=§a8éÁ¤yp„d;Å(.G+Æ8#‘@Ʋ“ÉÜ1Î)1Îì¸8þHC8çéŠ~ÆX}h±òå93‘RäoUÛÏ÷ºÒl §½*¨ ’hè²W$3ØSd#ä€H*CÂcÛŠOáÎ=Ç ·ÊÊI#>õdzg“Á5jE`häb˜-¿xçžx¢ã!çƒó`ŽãH¯—8\€*‘âR»U€8Å"Ä œAÁ=鋨àêpŸ»?Â{SË1Ã3Ó“À¨FܨV|yʤÀ¾µ4Kœ`°÷Í# ©Û×=œ#'±ô¤2RØ@ïŽejñÏ6µ¡˜ày"ŽæI¥/â'P[êXt­ ÄÇÈ4®ØL8ëBbb±Æ8óúÒÞç½E’GZ”…eç4ï.séHWï.{ñŽ•'Ë‚q×eIêxÈ©e ÛÀù6:ÐØ®J÷§g§Àã~r9äÐï^¤úÓâ£b\JÅc)p~ðÅÛÓqõ5hÀ’]¹÷¡ƒœ ÷8«L€2H‚3ÇJC#düÙ§<{FæsÓµ7å B³qÛÀMä°sëJ%;‰#ñLÜqØ9èM=:œ’O4»Œ†#°N[=èeÿžh,w…ÀÍ ²ð3õ¨÷.í»‰?Ò—Ë$‚°íšjFs‚ÜS¸ÝÉ3Í/ÞéÏšT*’ˆ>™ &~cÉÇ昬”Ÿõl<Ò I&7ÏqRmbÁ· c¦)»Cm'¿Ý ,5‚t.rhhûॡ†&3ÀéRù|p ûf€"É q“þÖ)Tîsì3M(.Tä |¹È¥TÏð¾O÷¨Ä`dnny¦’Á†žV±û»‡~iQ¶äíaéÈ cK6>ê’=±MvQ€CŒÂ¤ó$ÚqÉ=ñM%Êñ·Ú²ŽÆ=4.[úT¤1"®GCŒþ´eK6T=)ˆb¨çœãœâ¢îÉ=»Ò°S‚ðÅ!@ªXç>”„éHIÝÆsF'h ÎE!ï° v!îäg­)•s’¤cœ†¦ªJïûÒ…Áçi÷éHDžtlFr7q÷zýi|ÐÆHú çÁÈ\væÐ2é@I0™v2ìíœäŸÌêCð8uêO  Q´§¶бæžxçÞ€NÍÐúÔ Xõ`ÜÓ”‚¼¡'<ž´ œ;1ópy öÈ tT'f~îÒ“<6Üp 0'ÉC x¦€Äÿ#"¡!‡I$ ôÇ4ƒy'$×ühp¤vQÏLÓX9B@^sŠ‹s‚O˜¹ÏøR™_²õ=09  Ã0ä óÙ©Þcã=1êµæ*7c¯9R«g9Qžÿýjbuž<ÅãÔÓ„ÛUz{®C°á€ÇlÓ|êÌ2Gû"X¾²ðJ¨ü?Îa¼d޹¬ÔxÏ>ÔüäepØ÷éHf»†)ƒŒZÁÆpyÎìVj0;‰î1Sy«Ý˜ûf•€¶eÜÀ€A=éDŠG<ãESY·6¶G¶q@‘׆lç¶1E€¶d 8{R³9Rsõª¾o3~x©CŒN;Ðãn쇥/Êô'§£Ê€HÞ'˜¤“¿8õ  ÆÒzãpdS¾^FG'®zUe'$¬€û)G™¿“ׯJ,ø¿\õ©7*±$ ÕBÌ[ “Ç8¤WÀþ¢•†hVFàúŒ~Ìóþ5WÍÈÀn} !\Š@Z HÇ=ý)±£ÁÕTƒÆÞõ\KÝXéŒÓÄ€ŒÏn1EÀ—(#ß„ §ï ˜ëQ‰Ác´ c¿ÿ®œÒœ†·8 9 ³^ôO ùâ±m ¼·Ôïg–ýç‚rž\.€qÙOCù ÔYòä^¸ÁÎh¸á ƒŸÊ§Ü»Nïä* ”n$‘‘è3@¸a›èiÜe™pzÔEƒƒŒà…æÉÉëéþMD¯¸ä©Æ1œQq\޼žj"Àr¸ü)¥‰_—yÇ@ ¾bŒ«ò;Ò¸XÎØÛøŠ‘P »˜žÝ3@‰Nr3Ëvü)êÄmeŒ°ÝÎ( #…HÜO9<àŒT¨"-ƒž;úÕxçu$­J$fËÎC'ÚFßΔ Ø8½*¶é‡ ª3ߊ“{íÇÔS¸€6©ÜÚšPG\{ÔE¸lÞø¥-¹HTýi\ €zÓZE ©9988Ü“ô¸ÈŸ^h‰:ã¡ ñÅ)$IëÈÒ9Î1éšQóuÅbpŠoË‘Çj,IÎ:õÅ `7~Ò0 çžzHÑ\œàúôâ£ROœT‘®røÃ7Þ9¦2O-y œ` pŽ@ÛúS™ ù>ýqG˜}GçHuH9çðÅ)ǽ5{S½iÜV‰œw4Æ‘W#8"Þ£_¾iÜM î‚ävPîý)ýqúTÇ ¢áa»À“òýidrÎp$õ8¦?ñ})ÍÒ?¥;ŠÃF 8ãŸÎœ-ÐäûÒC÷š•þð¢à80)r?‰… ÚšÝiÜ,?*Î0ÿ0´Ð>öÐ}ùë@ûÂ…þ:aÊ87ŽXûwô¥ ŒgÞ˜Ÿwñ§·ÝZW < ÈÏÐÑ#&ô_÷ó¤§ãEÅaI=åŽ)¡ÀpÇ5)û¦«Éý)Ü.wgœzЉFâ¹vzH:SŸ§ãEÂÂqÑ}ZBpI9$­8t¤O¿EÂÃA`AÝlSrÇlcµ'ð/ã@§qØvInª=9¦6s÷»÷Ó[­=¾èúÒ¸Xi<à`“ëI*y / £‘†¡þø¥þ3ô¢âHn~S’“Þ›´°ÚB‘î)ÿÃøÐßuhL,&FGô”§'÷£ø¿ AÔý(¸ì/<þ½)¹\`ôþtË?Æ‘~í‰2¸À÷íçûÙú‚j/áZ_â?J.;%v}ÅçÛ›P mZýU ÷GÒ‹ŠÀT)<ŸCL •l1ýi£©úS×ý_ãEÂÄsŒ9 uàPTã!€èGjwð­ ÷…&ÆÒÎlñ†Å7Ìl` >Ÿýzs}ê¾õ+ŽÃòvW úyXÏ-T?¿Z;}iÜ,8"uN1ÜRª¼qïAÿ^Ý¥¸>´\ªŒW9íƒBF£î{RE÷¿ ˜ô¢à5Cmà®?Ý¥ Ùç*qÔt¤_»@ëJáaFWÐÈãõ§nÀÉLý[4¿ÃO꨸XDÃ!$þDÓˆA${šQ÷ŸéCt\,˜ ƒ×­7$ã$Ž=)ñýÚ‰¾ù¢ã°àÅAÃ0Ý)Æ\/' údð¥ëÏÒ¥°°¾hÈÏJrȃ¿•-4¬\,+’Ìdp6ŠBsÈLsÓm*ôo­*t¢áb2`rOÔR2– O~Õ8§§éEÂÅb]¤þž¸¦sŒÔ‹þ±iëÐýi]Æ œåEH 6 úäÒËþ§ñ¨£ÿWøÒ „ >¼Ñ„S¸e¦sMO¼*çðŠÅlnS´Žyè)YFbNáÈɤ¼?Þ©[ïþÄ[ ûHû¥ŽëKåª!E^»AééÚ–¾~†¥tÐ#UE$l޹éKÀÃ๤GÖ§_ºhC/Þ ‘žQOÇ9Üüvª°ÿ­üów¼ŸQHdcåÜrN­"#y`òwzã"ž:“þY­Ф|§ ç¥9›ŽÇjiê~´åûÇé@ì ¤ çw¥"¡èÀæž½ ýe* ÇSÁïOVÑÐcŠ?…¾´ƒïšåˆ~•R{ Yæi$¶ç«g­\n•Y¾ñ ,ÿÙleptonica-1.70/prog/projective_reg.c0000644000175000017500000002073712240302624015633 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * projective_reg.c * */ #include "allheaders.h" static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad); /* Sample values. * 1-3: invertability tests * 4: comparison between sampling and sequential * 5: test with large distortion */ static const l_int32 x1[] = { 300, 300, 300, 300, 32}; static const l_int32 y1[] = {1200, 1200, 1250, 1250, 934}; static const l_int32 x2[] = {1200, 1200, 1125, 1300, 487}; static const l_int32 y2[] = {1100, 1100, 1100, 1250, 934}; static const l_int32 x3[] = { 200, 200, 200, 250, 32}; static const l_int32 y3[] = { 200, 200, 200, 300, 67}; static const l_int32 x4[] = {1200, 1200, 1300, 1250, 332}; static const l_int32 y4[] = { 400, 200, 200, 300, 57}; static const l_int32 xp1[] = { 300, 300, 1150, 300, 32}; static const l_int32 yp1[] = {1200, 1400, 1150, 1350, 934}; static const l_int32 xp2[] = {1100, 1400, 320, 1300, 487}; static const l_int32 yp2[] = {1000, 1500, 1300, 1200, 904}; static const l_int32 xp3[] = { 250, 200, 1310, 300, 61}; static const l_int32 yp3[] = { 200, 300, 250, 325, 83}; static const l_int32 xp4[] = {1250, 1200, 240, 1250, 412}; static const l_int32 yp4[] = { 300, 300, 250, 350, 83}; #define ADDED_BORDER_PIXELS 500 #define ALL 1 int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixsc, *pixb, *pixg, *pixc, *pixcs, *pix1, *pix2, *pixd; PIXA *pixa; PTA *ptas, *ptad; static char mainName[] = "projective_reg"; if (argc != 1) return ERROR_INT(" Syntax: projective_reg", mainName, 1); if ((pixs = pixRead("feyn.tif")) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixsc = pixScale(pixs, 0.5, 0.5); #if ALL /* Test invertability of sampling */ pixa = pixaCreate(0); for (i = 0; i < 3; i++) { pixb = pixAddBorder(pixsc, ADDED_BORDER_PIXELS, 0); MakePtas(i, &ptas, &ptad); pix1 = pixProjectiveSampledPta(pixb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pix1, pixa, 1.0, 1, 20, 8); pix2 = pixProjectiveSampledPta(pix1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pix2, pixa, 1.0, 0, 20, 0); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS); pixXor(pixd, pixd, pixsc); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); if (i == 0) pixWrite("/tmp/samp.png", pix1, IFF_PNG); pixDestroy(&pixb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/proj1.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 300); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if ALL /* Test invertability of interpolation on grayscale */ pixa = pixaCreate(0); pixg = pixScaleToGray3(pixs); for (i = 0; i < 3; i++) { pixb = pixAddBorder(pixg, ADDED_BORDER_PIXELS / 2, 255); MakePtas(i, &ptas, &ptad); pix1 = pixProjectivePta(pixb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pix1, pixa, 1.0, 1, 20, 8); pix2 = pixProjectivePta(pix1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pix2, pixa, 1.0, 0, 20, 0); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS / 2); pixXor(pixd, pixd, pixg); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); if (i == 0) pixWrite("/tmp/interp.png", pix1, IFF_PNG); pixDestroy(&pixb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/proj2.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 500); pixDestroy(&pix1); pixaDestroy(&pixa); pixDestroy(&pixg); #endif #if ALL /* Test invertability of interpolation on color */ pixa = pixaCreate(0); pixc = pixRead("test24.jpg"); pixcs = pixScale(pixc, 0.3, 0.3); for (i = 0; i < 5; i++) { pixb = pixAddBorder(pixcs, ADDED_BORDER_PIXELS, 0xffffff00); MakePtas(i, &ptas, &ptad); pix1 = pixProjectivePta(pixb, ptad, ptas, L_BRING_IN_WHITE); pixSaveTiled(pix1, pixa, 1.0, 1, 20, 32); pix2 = pixProjectivePta(pix1, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pix2, pixa, 1.0, 0, 20, 0); pixd = pixRemoveBorder(pix2, ADDED_BORDER_PIXELS); pixXor(pixd, pixd, pixcs); pixSaveTiled(pixd, pixa, 1.0, 0, 20, 0); pixDestroy(&pixb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); ptaDestroy(&ptas); ptaDestroy(&ptad); } pix1 = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/proj3.png", pix1, IFF_PNG); pixDisplay(pix1, 100, 500); pixDestroy(&pix1); pixaDestroy(&pixa); pixDestroy(&pixc); pixDestroy(&pixcs); #endif #if ALL /* Comparison between sampling and interpolated */ MakePtas(3, &ptas, &ptad); pixa = pixaCreate(0); /* Use sampled transform */ pix1 = pixProjectiveSampledPta(pixs, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pix1, pixa, 0.5, 1, 20, 8); /* Use interpolated transforms */ pix2 = pixProjectivePta(pixs, ptas, ptad, L_BRING_IN_WHITE); pixSaveTiled(pix2, pixa, 0.5, 0, 20, 8); /* Compare the results */ pixXor(pix2, pix2, pix1); pixSaveTiled(pix2, pixa, 0.5, 0, 20, 8); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/proj4.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 700); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); pixaDestroy(&pixa); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif #if ALL /* Get timings */ MakePtas(4, &ptas, &ptad); pixa = pixaCreate(0); pixg = pixScaleToGray3(pixs); startTimer(); pix1 = pixProjectiveSampledPta(pixg, ptas, ptad, L_BRING_IN_WHITE); fprintf(stderr, " Time for pixProjectiveSampledPta(): %6.2f sec\n", stopTimer()); pixSaveTiled(pix1, pixa, 1.0, 1, 20, 8); startTimer(); pix2 = pixProjectivePta(pixg, ptas, ptad, L_BRING_IN_WHITE); fprintf(stderr, " Time for pixProjectivePta(): %6.2f sec\n", stopTimer()); pixSaveTiled(pix2, pixa, 1.0, 0, 20, 8); pixXor(pix1, pix1, pix2); pixSaveTiled(pix1, pixa, 1.0, 0, 20, 8); pixDestroy(&pix1); pixDestroy(&pix2); pixd = pixaDisplay(pixa, 0, 0); pixWrite("/tmp/proj5.png", pixd, IFF_PNG); pixDisplay(pixd, 100, 900); pixDestroy(&pixd); pixDestroy(&pixg); pixaDestroy(&pixa); ptaDestroy(&ptas); ptaDestroy(&ptad); #endif pixDestroy(&pixs); pixDestroy(&pixsc); return 0; } static void MakePtas(l_int32 i, PTA **pptas, PTA **pptad) { *pptas = ptaCreate(4); ptaAddPt(*pptas, x1[i], y1[i]); ptaAddPt(*pptas, x2[i], y2[i]); ptaAddPt(*pptas, x3[i], y3[i]); ptaAddPt(*pptas, x4[i], y4[i]); *pptad = ptaCreate(4); ptaAddPt(*pptad, xp1[i], yp1[i]); ptaAddPt(*pptad, xp2[i], yp2[i]); ptaAddPt(*pptad, xp3[i], yp3[i]); ptaAddPt(*pptad, xp4[i], yp4[i]); return; } leptonica-1.70/prog/blender1.tif0000444000175000017500000000076010327060544014656 0ustar dandanII*2& ¶ÿÿù¾'ڮ߇!<ëO÷ýÿü…™¸˜ç‰ú ! ýwiÓòyðˆ1o´ÓHÜþ-O ÞBùïþ’ þäâ-2Z—Ò€C€bý/áÐMé¡p ŸŸ¿ûö{Ó†y™Íl7iÇÚuÿL%·k¦ÙøûÏMwßXÿªuê®[~î—ê×ÿ§éº¶{ñ.‡_ÅïÚ}k¯Mm<à1úý·î×§þhˆâþ¢:÷ÿœ RæhŽ‚ÿj¬ŠÿÿÁÿ¥þëõ½ïýÎ#À¿i¨aSÕ²8ëÈAÿö¿Ø¤Ní%¾ÂúýûM°ƒb“M6Õ~éÈâ ÁGŒKtÓA±I¯iZ®""!…ûHC8Ø¥ÄA‘Å6‚ &hŸ ¤¼˜^""?ÿð 55*àè(ÀÀleptonica-1.70/prog/cat-7.jpg0000444000175000017500000042100711767470553014112 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 20, Smoothing = 0 ÿÛC(#(#!#-+(0”ÂEZw–E¥4â—Z iV sÖ‚@þ*nÓž”í@È?ÅIëšnßöi1þÍH1Ú¿JÆ‚>´ð(ÛMëJF;‶“oµ7ŸZ\µqFÅ©2Þ´¹4›¥X#<ÒïoJžâ€F=h ¿û4PÝPk2Ä5^¼*sPM÷…4S©--RÐQEÀ(¢Š%´”QEQERRÑ@ E-%QE0 (¢€ (¢€ (ÅRQK@ F(¢(¢@´PRÑE (¢€’–Š(¢Š(¢Š@RÑ@Q@&ii(¥¢Š(¢Š(¢Š(¢–€Š)h ÑEQERÑ@ E´RRÑ@ EPEP(¥¢€ŠZJ)h¢€ (¢€ (¢€ )i(¢Š( QK@Q@Q@¤¥¢€ JZ(1F)h ¥¢ŠLRâ–Šm/jZJJ1KŠ(„QŠuÌQO¤Å7m!Zu-3mE>“Í”l§âŠŒ ¦˜ÆzTØ Š.B!ž”¾Pô©1F(¸WÒœ OJ“Qp"ò=(6è{TÔQp+›e£ìÊGZ±E¯ÙG­'Ù½êÝ&(¸X¦mO­'Ùˆ«¸£î+¼’(h[Ò®`QŒÑp±@ÀÞ”Uý´Qp±fÒÒT”4ÔýñSš‚Oõ””´”´´´”´”RÒS¢Š(RRÑ@ EPE´”QEQE%´”´”´S(¥¢€Š( Š( “´Pb–Š(QE (¢Š)i)h¢Š(¢–’€ (¥¤EPE´”QEQERÒPE-RRÑ@Q@RÐQKERQ@RÐh¢Š(¢ŠJZ( Š( Š( Š( Š)h¤¥¢€ (¢€ (¢€ (¥ ¢–“QKI@RÐQKE%RÐEPEPIKE%Q@Q@ E-”QE¢–’€ (£RRÑ@ KŠ)h(¥¢€ )i(¢Š(¤¥¤ Š( ¥¢Š(¢ŠžÒÒCj ?ÖTæ ¿@´PKIK@ E-%1Q@RPEPKE”QEQEQEQEQE0ŠZJ(¥¢€ŒRÑ@%-”RÑ@ KERRÑ@RÐQKEQE (¥ Š( ¢–ŠJZJZ(¢Š(¢Š(¢Š(¥¤ –Š(¢Š(¢Š(¢Š(¢Š(¢–’€ (¢€ (¢€ )h Š1K@ E´”QK@ E-RRÑ@ E-QEQEbŠ( Š( ¥¢Š(¥¤ Š(4QE”RÑ@ Þ–’–€RÑ@ EPE-”QERÒPEPEPE-”QK@ Š(¢€ (¢€ (¢€ŠZ(jJZCHcMBß~¥5 }úSE)éI@Q@QLŠ( Š( AEPEPEPQKE%´PQKI@QLŠ( Š( Š;P(¤¥¢€ (¢€ (¥ ¥¢Š(¢Š(¢Š(¢Š@´Q@Q@”´QEQEQKE%-%-%-%( Š( Š( Š( ŒQK@ KEQEQEQEQIK@-P@¢Š(¢Š(¢Š(¢Š(¢Š)i)h(¢Š(¢Š(¢Š(¢Š(¢–€–Š((¢–€ŠZJ(4Q@Q@%-QEQERRÑ@ E-”RÑ@ (¢Š(¢Š((¢–€ŠZJ(¢ŠšÒšCHcM@ß|ÔÆ¡þ3@=)(4”´QERÒS¢Š(¢Š(QEQEQEQEQEQEQE”RÒPGzZ)€”RÒPEb€ ZJZJZ( Š( Š( Š)h(¢– KE (¢€ (¢€ (¢€ (¢€Š( Š( ŠQEQEQERÒRÐEQEQEQERÒRÐEPEPEPEPEPKIE-Q@ EPE´RRÑ@RPÑEQE”RÑ@ E-%RÑ@%-%QE´”´RQEQEQERšJ)i)h( Ñ@Q@Q@RPÑE)¤4¦’Æ5Aüf§jƒø8Ò (ê(¢€ JZJ`QEQE (¢€ (¢€ (¥ ¢ŠZJ)i(¢Š(¢Š(¢Š(¢Š(¢Š)€RRÑ@%-QEQEQEQKE –Š(¢Š(¥¤¥ ¢Š(¢ŠZJZ(QEQERÒRÐQE-%RÐRÒQ@ EPŠZJZ))i(¢–’€Š( ŠZJ(¢Š(¢–€Š)h(¢–€–Š(¢Š(¢Š((¥¢€–Š1@QŠ(£µ€–Š(¢’–€ (¤ –“½-QE”´PEPEPEPEPEPEPEP(¢€ (¢€ ´”QK@ EP´ÓN¦šCÕûƧ5\}ã@¥¤4¢€Š( ’–’˜Q@Q@‚Š( Š( ŠZJ(¥¤ Š( Š( Š( ¤¢Š(¢Š(¢Š`QEQEQK@ KE%QE Š( Š( Š( ¢’–€ J( Š)h¢Š(¢Š(¢EQE´”´QERRÑÞ€ ZJ(h¢Š))h Š( Š( RÒQ@RÐIKGzJZ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ÑEQEQEQE-%Q@Q@Q@”´QEQEQE”¹¢’€ (¢€%4ÓN4ÓHc ^¦§jzšqë@ Ñ@¢Š(¤¥¤¦EPEP ¢ŠZJ)i(i)h ¥¢’€Š( Š( ’–’€ (¢€ (¢˜QHŠ( Š(¦KIK@%-%´QHŠ( Š( Š( ”ÑE%P(¢ŠZ(¢Š(¢Š)i(Í-Q@”´QEQE ZJZ(¢Š(¤¥ Š( Š)h(¢–€ (¢€ (Å”´RÐQAëE-%PEPE(¤ Š)h(¢Š(¢Š(¢Š(¢Š(¢Š(¢–€Š)h(¢Š(¢Š(¢@Q@-”QEQEQEQEQEQEQEPEP†šiÆši cT S·CP-:”SiE0–’Š@-%S¢Š(¢Š(RÒRÐE”´QE”´PEPEPE”´QE%QLŠ(¤E-%QE´”´À(¢Š@QEQEQEQE-%-%QGz(¦J\°j/:QÖ#LEš*¸¸ÇÞV«p¬Ø .OE7'=)Âܳ¸8æ¢i§ ã½M>ì®ÑÞ¢2˜å€Áô¦žø§S;Ó»RRÒsFhh¤Í.h¢ŒÑ@´€Ñ@ EPEPE´QEQEQF)h(¥¤ RÑE”´PIKE%´”´”´”´QI@´PQKI@ii( Š ¥-%-”´Q@ E-%QK@ EPE-%RÑ@%-”RÒPA¥íH:ÐEPÑE€4QEQEQEQERQ@ši§i¤1÷MB*Wû¦¢^”w§S{ÒÓh¢Š@QE0 (¢€EP ¢Š î\dÝ)AÚ–FÙaQ[ÿ®”ŽÇ냠ôïLD¨K '½! w¤ƒ ô¨—›’sì(͆šCEU·ÜfrXàU®ÔÂáE%- */=#ž:ñNó3×¥0E%- JZJ(¥¢€–Š(¢Š((¥¢€–’–€ (¢€ (¢€ (¢€ (¢€Š( ¢–ŠJ(¥¦IéKIŠ(£½Š) ¯p¬fS» Q\.ù/>¸«¤àŒŠhW1NâE)´RD¹ýÙ¦fã¨5bŒÓ¸üÙG#øP&bqåµXÍ€wjÀRÒRÐIKEQE-Q@ IE´QERQ@ IKF(¢Š(4”´PIE¦Š( Š( Š( Š( ¥¢Š)(¥ ’–Š(¢Š(¢Š(¢Š(¢Š)(¢€Š( Š( ¥¢Š))h ŠJZJZ  ¢Š(¤¥¢€ŠZ((¢–€ J( Š(  4Ó1© ŽOºj5éRI÷MF½)€RŠJp Š(¤ES¢ŠZJZ( AIÓ“KHÀ0Áé@­y2zlûö±aÇj"XÏËžieŒH»M1X‰’ÜdúTaÿ~9<Ö­*à;Tb,L_={P¦šZkœ)ÀÏ©ÎóïSK!:žV…¼¸˜œƒšV%–'n™¦ñ» ?$ ÔÙæ¢M†BW¯z“½&4Ap¡a8ãqæ…ˆÇJKÃû =MJ „QíLC‹.qžiGj”›B’§,OZ–W*‘òçš,ìx8£8ªäíˆlúR£„†Êâ•€°§#4µQg`›ð6ç¥YÎ@>´´w¢‚x¤1*£nôñU§!§ŒUœZb’—4„âÅ¢ªÉ#ùáÆjÎp¼öÄ-24 ’0;T´ (¢Š@QE-™´­-Q@¢Š(¢Š(¢Š4U{䀙«u ÆA»­?”´QÚŠ(¢Š(¢Š(¢Š(¥¤¥ Š)h)h¢€ (¢€ (¥ ’–’€ ( PÑE%´Q@Q@Q@Q@Q@Ph¢’–€ ;ÑEQI@ E%-QEQEQEQEQ@ ŒQEQE¢Š(¢–’€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ŠZ((¢ŠÓ 8ÓM!‘K÷ 1iòýÚbÓïNÞôá@QHŠ)i€”´Q@Q@‚ÒÑ@ E-”Eu£´P ‚zR²)]¤qKÞƒÐÓªŠŸtb”P# æŒP"¡2°ù±Š©)·<ã§ÒPW…ö(|§Ÿz{n$†\©bŒQp±[\Á<Ó@ó6}ÜUÌÚ“hÆ1Å;…ŠÑ,mÝ늜ȊÁ3ÉéH!@Û‚óL’0Ó#ó‘H 鸣ÒÐ2©æì{ YváßwÐRùn'/ŽÃùN›NIëL’Ä$˜”ž´üóL;Œ`Sn•^¹¤2æóéSNý˜Ï #uÉ>Ô¨ ¸“4ÄL² Œ•/jåY”`óP²¬p¾ÓœÔ ØŽq@‰•™”u^´¨êùÚzT0ŒÜLi-ÿå©´¬2o1 ÛžiÛ‡­SŒ©+ 8?:UQ½³Ïoj,&Ÿ&=ñM³9‡&£bZ×$óŠU*Ô0ü)o4UO1С-ýG¥iÁAƒJÁrÎy£5XNû™6e‡¥Iž`>Æ‹?jCÒ— ¦3…êi b\+¶Ìjcҩdž¼cÛfb|¦Ç^”ì!ÙsÅ(Á¨<»f“ŒšKOø÷÷4X.XÍñQÆŒŠw6iùùh¹¢˜:S‡J@.h¦· O¥2 €‘ž(Z(¢€ )É¥ –RÐKIIœñ@ ¸RŠh£pÎ(ÔQE´Q@fŠLRÑE”´PEPEÑ@Q@Š(¢Š(¤¥¢€ (¢€ (¢€ JZ(¢Š(¢Š(¢’–€ (¥ ¢Š(¢Š(¢EQE´Q@ KIEQEQK@ EPEPEPE´€JJZJ(¢Š`<ÓM8ÓM!‘K÷iƒ¥:^ÔÑÒ˜8SE8PE-% Z(¦EP ¢Š(¢Š(¢Š( ´”´QI@Crî‘£¯SST7‡÷SM ‹Ën ëŒÔ*YâiwWš°¸ÞœÕ6eɉºÓ@\…‹Ä¬{ÔK—¼8' *Ue¼ Tq0äòi4ŽAڸϩ¦¤¬_Ëpv#½$ñ³p2A¨°~ÔŠ9Ú9  œÑÞŠ) k¸@Kt¥éHåÏ—‘LBŠ(¢€Rýi’H#Lž½ª11\gÞ€'¤ ƒKF)Сz)¯ »IÔT”`DÖêɰõ§DžXÛœÓþ”Ö€± DâF(F™2,n½ÉÈ5dÑEÂÅ`Žî¤¡]½ýižTväžõr—µ ÉÛk‚8ŤÚ/·5pàõ`Š.+ÆÑ„àŸåLR éúU…†49 7ìч/ÎM;X7·¥-ž>sêißfPÄ‚Ã=y§Cˆ’ 9¢â&ªq’óÈOAVê»Fé)d†ëI dYÜŠ™^L’éK8•·®3Bÿ£Èá†Cr)ˆUvkgÝÚ„ÊÚezâœä›f$c=©ŒqgéÅI³[nêqQÇ4†&l*K~m×efhÈàœÐþaH7°çÒ„¹z‹ž-›4@£ìë‘@Å‘Ã)By4±•H¾^‚«Å¸Ë)êzS\4PO$Ña–áKžµ!8ª­d@ qÞ¬7é Tëšy8Ó‰èˆÎ8¤«!;{~j­’áúšbÉ#<€ÇJv —M5Xn5é|¤|Ç©¦ÀäÌêÇ$w¢ÁrÙäuªq;­ÖÂsR KHʜ⣇›Æ8éB@^ÍÕO9…ÆÂ)É6낇ŒQ`¹,³yl )9©3P4«ç=j)n&TŒóE€¹E07šqÖÕxsIê*ƒß­^ ç5Aãûñ¡/õ$Ô~v$ÙÞ‘äØ@þñ¨"Ý?cE€´ óÍV´ I&}jH£(\“’i–Cåsß4²¬+M u óJ; ŠÞ/7=è°ÍŒSIÅU»Èò×=é.² dIÅ –·sF~j­ẗ„i²É$j®OZ,ìÒR+eõ´†!8ªò],nTƒSÿQ»ÿ^™Ћ 2»qõ©j¥r™tÙ×=ªÓ¸EPÇ0%¥4ÅucÁ»Ôô"ÀŒô¤('Š@x CûSriÔƒ­(´F'ôš½šhÈQš~E6!4`zPFEHc|´;Fiæ›Î(\žô^Õ¶~îæ¦Å¢ã û2ù²x¤–ϽkUŒSZ¤EPÙcÞ™-;[“×59àRŽ” Å寸Áf¦Y£¦íëŒÕšZw o‹#4ˆ/$)À5wµ'‚(¸oFU0 Á¦Þ0(€zÕÌsJUOU‹…ˆËˆá zD SpãڜȬ¥HàÓb‰bZ@<Ö}ØÅÂÖz¯=·šáƒ`Šhî–U׃šeÛ‰÷©Ú CœzSnawUT b mjŽ0 Ûúb¬ÆŒÔUuWŠw;rÆÃ“q L¤Ž@C’Ü0¸°84L<ðØãm1A¼®Xõ§Ÿ½PÚHY6ž¢œgQ6ÌsHdÔÖ8"’IV1–ã4åè#¥ ŠSI@”QE-Q@Q@Q@Q@Q@Q@Q@”´QE€)(¢€ (¢€ÓM8ÓM nd4R¾~´½é€áK@¢Q@QLŠ( Š( BÒš( ¤À NPo¿Þ,jƒ 0*CI@ éUî#w•JŒâ¬ÑŠ`BQåaæ *ò2C²à9\`ÕœQŠ.+¦lÛ“¹¡˜©ŠÑ[†ÓLJp1Ó¥;¾wÈ}é-ÆW÷52Æ ¶3Q‹}¨B¹¢â"ÉŠ?¼Ôû•D­/| ™É $‘JÌ­Á ô —>d\RÊÎn+`b‘ÖC:¼ $ȺëŠ|NÂfŽp)†v%Šô_ZXNùänzS"TÚþgPyj&Þ½i{Ó7¤H;/jxÁÁ !ަy±îÆášIÛl,Gj‚(|ËaÎ 9  .ÁT’iƒ.jóÝmnBŽ”ýù#íÔQ`-Òvª™|9MKŒÐäžE ‹ È¥¼ÃÁÉÏ¥,(<´>œÓÞÜ4a tQyqì'4Ž”SÏÒÜcìª;ñJm[a@ÿ)9¢hÂä­ üv‘’Ýpynõ$;òi­kaÁܽ¨0mu'Þq#«¦ÆÆi¬LÛQTûÑqòÊœt  Ict À†ö¢i™dÚ˜éšd̯4cVOÖ€'‰Ë $`Ñ,žZäô¦[’ÐŒÑwÿÍHb,êÌ'ž•+Jªv“ÍE jcF#8¨á þi98æ€}áÌ4ô m•[¦* Ñ–ò)Óô~LP"ÊD ½J Á]˜¤qó×I½fU Ô†K:<Š6 H£ ëU¦y"‘0ÃÓ¥•–EEêh°x¢«¤„± 9«p…<,&S’iÕR]Ã¥9'Gm óüé%¨ä‘S©çÒ…”60hJ)¡Á<Ó³@ÃR”`Ž(éGZ(È ¥íIK@h›žj³Ï*L¨@Á4¶(9¤´ )§­8škq@yÅ?ŠhìPI´R Ôâ”FAÍ.(¢ŠQE£Š(b“Ó©(6óš1Í-âŠ(šCɧQ@G„PÜô çP(¥( aEPEŠ(¢ŠZ)( ¢’@ EPEPIKEQEQK@ E´”QEQE (¢€ (¢€–’Š(¢Š 5ºq¦?Ü4 ®µ*ÔkÒ¤Z`:’–’Q@QL–’Š´”´”QI¼6g‘@ E#°E,z ƒ®áÒ€ŠMÃ8ÈÍ-QI@ ¸m°¶}*»ãìhsV™C 0Ȧ´(qÇN”ÄG6<èVš{™8Î*G„™ƒîéÛ‰ ÆGÍ×4ÀŽT)nŽw!FEf y^”É’B¨Ýƒš–Va`9î(¹ÜC㸫=ê´J>ÐY Ž~µf“)ãʽÏcV")oSPÝ®dˆŽ§Š°ÇddžÂ˜ […'î3ŒÓ/?Õ õ5’p Â¥¸äD=è°ä(ä€(RAªò÷j‡îŠXÀ[—Q÷qH.H±…‘Ÿ9&ŸŠ­ ËÎ@ÈC­Ò¡IdUb j.cÄqÿ³Öœ‚?1qËv BµË,Û þTøç&_-— ûw=…8ôâ}¨°4 K³Ÿj…¾kÄ”èOúc“A9¾ô  ÞUGÁ4èåNE@Οhû»ˆ¤´9’CïÒ•†Kæ)|èjMã8Îj’¨kÖôø¸¼u1E€”\8GƬvÍPXÁ½>ÜÕú"¥V‰ê*;ù>µ%Ö<†úTVÎ#´Ü{QÐ A….jšâ?3#ô«q6øõ¥`¸üŠ¥G+lBGj®—™NWëE‚ä—´R /ËëVnúÕy c;ºRÇ °pE0,fŠ®'EÆ[žõ pÀ•lŠ@IEF•9aÅ*¶s@ͦ¥ ‘@Å4qÖ‚j90ë´äP¹¥ª¥„줒\Ȣš ˜Ü‘JÔê îi­ y= :݈v®Zl M<…ùûvÛ3Æy¥5AŠfØ2Þ™o“tÄõï@»PjE µ#)eBTdúR¦JFqQO)ˆ‚FE9æØŠÄpÔÀšƒQyé3OÝÆh´×p½ÆiK`fªDá®_Ìü3B-#g¯z“¥R€·œê9PjèéCïIKM Å!Š( u¥  Wí§~µf ¦5 %%9aÈ¥‰jô§ÐB‚2)#…#9QŠUÏzpëH¼fMØù¨û2 7Œæ¦þtQp±f@êvµ3쮲ùŠü÷ÍZ>ÔNáb·âVuaÏZX`x¹È5cš  "†T™œ€sI r}¡—Õ¿jZ.(åâºc´Ý*ð< õ4q@¡‚ ½ @GsP*fÄâ¯2ƒÃ Ò 6ÅŠ˜„#?•]ŒaGoj`·ˆ6í¼ÔÀPØÌÆ'¦*­Š©òÉ«r ‘ ž†£†ÙabA<Ñ}¯0&ívéR˜Iæç©óÀ]ƒ)à 6²«4­œ‚˜P)Á&§¶B–üõ5º¿’ì¤cÞ§¶”ËÝŒŽ(^ÙÊù'µ>Ø‘4€t°Å$m'æ‹XÜ4›Æ7PJþc9làtÅOfìÑÙ⢈›vue'=*̘òÃíI€üárj¬m$Å›véV]IŒÜU[VXÑÕÎ4!°µâY3×4ó)iJ¦*;O¤#¹4–±‚h"˜‰~Ð oôê)é8vÛ‚ FñGåíFÁ'‚iIü·äö  Ã¥1åU;IçÚžxR×çšBÝsŠ”20Á¯I특¸äŠªŠ ãã°¦©/pÁ²BñЦèϤÝób«B²,rä;TQ dL†9•‚æ…54žb¨ ìÅ usòi §SGJZ´”´(¢€ (¥ ŠJ)QKŠJ(¢Š`-%-QE% (¥ ’–ŠJ)i(¢Š( E7Ý©ME/J0tñÒ›NQKI@QLŠ)hRRÒPKEŒ RÁ¨máh‹n çÒ§¤=h“GæF@&˜bÍ¶Îø©¨÷¦FÝ*¤[NAäšµÒ–ŠW;†Ø½ÅErŠñ—@«× Ȩ¸þñÛéLD2³¢îzÔÐÙ•ïD³:• ìi±Å"‡=1LC\le!òKzÒÊÌ%UÅ0£~Sɧ;v ä`PØ·Ù HŽc‰7§Ý00î{TRÐÆ£©ÅLfU!@$õÀ¡œInäzT ¤Ü°ÜAÇ# ŠÚLæ‹mŒóéRŽ•VÜ‚à8ÁV©0:S]Ö5Ë)À÷ª×ƒ*œõ=(×_êƒ)"¥@v¯=¹¨n2°¨'<ÓÄ…J)Ü(R0*8¥îÀàY$PvrI©"d¼më@šD.˜(=}iÆD€4†8úÒ+äh,¥pH¤Š5‰p§ƒLC©h4¨¢£pYNÖÁ¦Z;:¶ãœPädsFõ¤“Jh("ØÎHÆjjoAšw½E, )Ëfžˆ@;9¤ »¶ägÒ€ÐûÐí'­*Eµ‹1ÜOz|QZ¬Ð²¶UCzRÁ#—n¦§&–‹…ŠA|™Ùˆ'Óê[T`Ìì0Z¬v¥\ ë0˜ûš›½'’‚O0šŸŠ¥{÷G<æ–çýBqSKn²¶I"‰`*‚OËLD+µ#Ç­I,Œ€…EÛ3•ùøµ`µ¼syˆr¤`w¨6}£s(Æ*ñPF*º£ÂYvRsŶŽrcaÈ«hÙT0ÄÁÚG' ¨Ä®·>X-!–óMÍ.(+Í sJ½(Å  bö¦Ž8§Ss@‡gš) )Pæ‚}© À¹ùhÎE4pÔªy ã4íÔn‚8¦Å;8éK‘M) ‑@4Ò8¥^” ZZ 4õ´´ÂzRhݨ¦Œâ”ž(H¦H¡”ƒÜSæƒÖ€)¬3¢B6šž|˜ñœ“Ö¥^´´\B ZLàÑž(c=h¥õ šaFl•§Ò@ XQrŒd–É#g¡ö©ºÑ@ˆ^ÙLaGèi"·Ù&örÍSŠZ.0ëUÄ ³!5X¢"‰ã¸f#ƒHÈÐNdQ¸7Z¹E;…ŠæGkv%Hô¦Xÿ« ‚jÞ)1Ü .R[$¹‡4CÅœd榢 E%- (¢€ (¢€ ZJZ@%´S¤¥¢ E-%-Q@Q@Q@ E´”RÒPEPj zŠœÔ˜P1ANÑN ¤¢Š(¢Š`´”P!i)h Š( ævHÉUɨìòb$÷5$ǹö¦Zqn´úQ.‰ù¦Ÿ,†8ò«“Q\0ÝœýÞ*p¹ Ié@ˆ!¹g}¥9õ«=ªÎùY‡AÅLzPÁ2¨É8Õ¾ëQ\àBÞâ¢Úª2ð‹n–š¹*3×ìRÅ&äš^´” FEcó(4‚$ )ô Dð+Ù ûRKè‚)À©7®vçšUubpsŠ`Vh$ÊFW¯4éü̓iéÖ¬SYwŒ.垸¨.øòÎ2« bóÔf€*Ï&äŽ w§»¹Œgª1E‚å„`È0x§T1ÅEˆ0¦^ó>†É· Ü`ÒÉæ¦£‚”löäS ùnœp(°Ï^õG–£f˜¥§ù#žh›ØÀ~¹¡ ,Gþ­s×ú¬$tdš4¬²*.2h°‘E@³6X7U¥I·`#= j3P›””cŠu&y Ç-:š½hêiÍ:Žô m/jZ1@†ƒÅê(§­éqKŽh€sKF0h4˜¤ïŠZP(ÞE(äÒ‘šLb€Ö†éKÞƒ@:QH)z(éE´”QK@¤´QE%-”PÑEQŠ( Š( ¢Š(¤¢ŠZ(¢€–Š)RZJ)hÅQERRÒPEPEŠ W—ï °j¼Ÿ|P1>˜:ÓÅQE-”´À(¢Š(¢ŠQÞŠ†å]¢*ƒ$Ò@…a Üv©Í&)Ü wìU IÉ©˜ùPœ*cÈéM*J· ÑqÚÿªÉîsSö¤U À¦€ º8„æ£8Ž(ߨÏJ’æ7‘­6Dsn«ŽA¦’†`»[½$R-É9ÚzÓd:–RW)°0aÁjš9¹ FF)«q¹ˆØF:Ó`_.fPr¸ÏÒ’Ûd§Þ‹0•v'å¥YA•=*ª2y8`H-Æ)Ñ’g| qÒ•€°¢2Û†3PC>\zÒCþ¾LS­þüŸZ`X¤ek–hÙ6±äã8è* ¾eˆ{Óä›c„ ¹©ˆ–Šî1 `0})VlÛon ,&Îh¨mäÞ™5*÷ RP1J}© NÔtRŠc QE1¢BrTsBBˆQÁê)ø¤Ï4Àˆ[(~íô¡à%÷+ã<SPHh¸ HÄjS.£y( òiÔ+"ÔÒ«ÀÎå”Õs4}h¸âcnX¼b‹†c»Úš@#‘EÀ§#.èùïK(ÿKRÙÁU’Šy*2(’5Ã4î+C`õà“LŒÎßw~S9Á¥š&,¯U¢à2(Ù%cŒÐTq`Êe\άbRŽHÃvÅDUätÌdy4pUG•ŒÌ›öã¥ZaÇj”›dFÜ)!’<ÅeGYBÉŽ})’¡_%n´ëžX€çœñLDž~Ö Œ±ô¢9qÊõgí§>•(E_0ô$P¤ÈÈX Ö•fGj¼-³èM2C,ÀÍ+ š÷ýZz˜H1ž¨o9}i·MÌh:w¦"ÒJ­œÒ‰Tœgšª¨Þr²¡ Žj#Í`äƒØÒ°îiÈÍ.EB‡¯Òž¤ÉÈ⨉¦Ãõq¸Z¡m$ûÓ@ÉÒä‰<¹@Ϩ«UFDónhéÔÕ‰&Øûr@É¡=%B& qÐSí9ÈÅ+ɦ”Eb2)b`èw¨^tØ»º5H]Q2˜ÑQÅ pAÅ?4†-ÐsM’Qå¨J*­¤ÆIž©ó܈°1’zP"z*¡¸’<Áô«JÛ”ZZTšg[¥EI„`ïUå1š>™Áû“¹b÷4?œ¡ÂrzPYUðÌj¿×Ä=é·„3Æ\Ñ`,†¸æ’oõ/ô¨£ˆÇ!lä’äâúP,ÇñÍVY<›Ený©†GM‡~I?0¢À\^Þµi *  œÒŒšc69ô¨£ºVÁ  RuéM2/—¿ašpéE4(Q… \qKÒŠ@AöeÏ pzŠ|± q·¡©M©\ÀÆDbù+QO ­(e\ïW^h¢áap u¨¯`#“è*qÒŠ£"³Z.✲£…P¹nüU¿`( ð¢áb„€>eCµ‡Z»&%'¸¤6ñ¼Ô qÅ ‚D2}ª+ <¦<`“SO“éUí#- Ãc=©ô ?èòg§4¶Ð+Ä ëš• +—çN‚7Š=­ŠWÛ‹ÃJF?½e|‚z‘"“í Ì8Å5–FMŒ„¾xjt¬L‰$9"…&9Ìy$Æh‘ J’vûÛà|ª(¦i<惊– Ë9€zUt!®¤>´è}¢Fí@5ËdáxaOëTd>lmò“È«ƒ–JM’>Ã’@¨.f’ó>bÄÑy÷TÅ0-EòÄ£ÐRàAvå P:š<{TûÒ°Ëå€5BVoµ…W8>õtŽõBCþšúSBdÏ$–ò(fܧ֭ƒ‘š«•ZÑ@Ì@Í[ÈÆsÇ­'r*ªÖ-“Ò™.Q$ zóE€´Ðî˜I»§j’ªÆX^2î$c½ +¼Œ¹h°½¨j &o0GzXåfvGrÑ`&£“P •,T©Ü; ’9–P@×4 ¢¢ûD{öîç¥KÖȦS$L£©¨á"Þ=²0¬g=*­éVˆmÁ9¦„YS‘x4½é"\F£Ú—”€J:Óª¤³È.<´ñ¦žÔ¢¡Y¿yå¸ÃTôÍ‹œí‚$\íP3×üPiÙ`óJ˜ cʨB±äÔƒ¥0!ž*ðpÀäTrC+ÆT{UªZ.Y¢ya8íIHΣau&­‘IEÂÂk=².Ãm8­hô£JÎ@ªEÙä3• «ÂšcBÛŠÔNÓ>KëIfgÏ'5pD€’ëI nQ‚h¸X¯zA¯½-ÒnUÚ~aÚ¤–Õe}ň4=¹,\†‹ˆe¤™V 0GZ˜°,9¦Å–NIêj8-Þ9ÙÉâ–Z£9ÍêÕþµFdµp(BcïFc'<Ó]<¸C);€ÍIu4@"šlªL!B¶ãÇJ`X†O2%oZ–«€m­zdE¼ÆhÉ#Rc,SOÞªÐÝ7Ë>µké’dÆvœ¥c“3“Ö®· N;U;^CM·Û‚Œg¦Ë"¼ |Ù©n¤*DxuA4 $N”ЉäV0/ëQLG–ã·j˜JBÜŠ®~tiGU4 &Wd±É늎Ý@K “Þ§B·6§w½Ce‘XèÖRœ2Ò­æ¨éë–sè*é4˜ÐìÕy.~ÔQÇRjÆ8¬ùámï€pOj2eº"M’3ЊµœšËJùiÕ‡ZÑŒmAž´4vqÅ/z«=Ç“'+‘M7AHb§š,-÷ òi‘¸•C`Šwz@(ç&£¯³<Ô€ü¹¨q“zã4bÒ†jJBqA8惂*9˜¬dú ”Ÿ—ŠnOj«ù!/æúT¶r™P†ê)Ø ˆŠsJi¸ù©ú(Å -%´QE (¢€ (ÍQE†QK@%-)(¢…Q@Q@´”QEÖªÒ¬«&«Éþ²ˆ)â™Þž)ˆZ))i )i)h¢Š)ˆ(¢Š(ïER_šù¥Kq&Ü&9=é¿gÄÞ`sS#Û½1mXn“Òš Xœ)}jh¢(ŒSPØFc rO4ÄOkÄ Sj.Å íKØÒ_­÷ÐRsÙ^ÄRFsvÔ§/vH袘‹ ¨\¶~nôÙÊù,23ŠŠæg©Ù7Ÿ¼i š%&Õ@<‘Ö¤PB€Nj £·B§Š{ÊWb¼Ô/j3P Ž×d¯\QÊ {Ñ`¹8æ­—ëHbQJx¦œu i¬ÈÉàv§uÎ=(h8=y£š Œ*5†5}ʸ5'AE0!6ÊI;ŽQS(: LÒŠdíû™>•^ØIörššä1…‚òMÊV`úPFÓ)ô¢ÛY›ÞŸödV8$fˆí„aðÄîõ¦ LRí‘r¤ðjÿQš­äHÁQØm^•dp1I‚*Þ9܈:1¦]ƪ‰´cššæ#&×_¼§¥Cr%}„¡ÀëL nd1ªªœ4Èܤâ=Û¢àòåáO"¤ŠT–\"ñޏ  ýê‹ôþ¿ç{­P ûÛ¥$ t Ëv»9©©žà+•ÚN:â¦(Ȫ´¥ÒBˆ8ã4n1v'å¤Ä@ùÇ5_ñàsýÓQ[À$ˆ×4X L"yìn*LÔâª2·§Ò’åÂω3°ŽíE€»Ö–£‡}êJCôª<‹qå [ª=uóéM ’Ý<‘e<ÕaF@ÍVÔ?Õ§~jE˜®®Üô žSRÙ5(9¨ÞeG Ãït§I*FãÉè) —9dàœVcTnK<@d`÷«ã¥6ER„fNZòàF…GÞ>”˜œRç5˜P“’id¸Úûw50&¥ÅCÀwØÃkzT¬@úR`yGÊ0*iÚg`@ÀïV(©„}¨0\É>µj IUå*AS¯j`6E,„ŒÔ6ÖÞC» ûUœRW˜<Ì08aÒ˜é4«±€¿=jPû¤ÚJ“µ; nŒ*õŠ„Ã+Gå„ Sš¸(Í y-ÌkéU‘LhÈ·½»žh¢àAk †3ž§­1.¸1‘V©žJoß´f‹€þ¢¡–e„s×°©³PKh“>òM$fhŽdÝ™*ò '¸ªÇON¡ZQµ@¦ÁÝE¾#Ž¢ª[æYOðÖ—Z‚Þ)ÙsBabQòŽ“šmÀc lëQÙ‰dIž´€œð¥R´®Ÿ°«ÎHRTdöªV©"\32ºš#n7ÅTàw§n1Þ„•Å4[Âå ›‰¾ÞT☉Þácpã­:GF…°r(khää¯&™-¸Xc…!”ãibRÈÃVìŠvçÞ–O³mrb %Œ{C·ð“Å1ˆ¦ÿGö˜Ì¾_9©‚Š‘‹E/bÄ¥¤ÅZ)i)€QKI@Q@QH–’Š-Q@„¢ŠZRQ@-%ÐE´”QŠ(¦«¿úÃV W¾hC½”Ô¸&=ÛIQÞ‹”Ý óUb¸Ù ‰‡=4„_ŽE‘w)ȧæªZÆÑÅ‚y5dŒRhbàRö¦“…§/NhQKšNÔ€J)sH„œÓÔ¸¦‚IÅ(ë@ Ö“½-écŠN3ȧRS˜â–Ša…䨧ÀéN¤4€[ ›ÌïSÒÑ@(¢–€ŠZJ)qIKšJZ( 4PM€(¥PRÑEQE (¢€ ;ÑEE¢€Ô´Q@Q@ 5YÿÖ²j³¬4!‡zx¦w§Šb Z(¤1h¤¥ Š(¦ ¢Š( ÷¢šä„$ š¯j2òÜÓÙK;aðGjm `x “H?tò1É'¥Pˆä”½¨Éçv >èíŽ1î)¾S ^G;³Nœ‰$‰AÏzZàÐ;R7Ý?JE @âSïÁ©­\¼\òAÅCjÆûH5$Š`·ù=i²QcT ÒG–s•ÆhÈ ³±ºR°î,’²N¨!ªRBOAPIÍâ{ |åJ”ÝŒõ £‡PÃ¥:‘vª t»”Œ‚¤v)}ÄdÓ…âŠ(4½i)€`z O-3£5JÞyÆ= N:Ð_g9Û×Þ•bHƒïR FR(­²G ã'Š•­ÿqå¡ç9¥·‰¢7®EMEÀ¨ÐÊdV `qD€ùÀœ«u]ÃGpd X0íÚÀKwO0 R¹5¾Ë¹ T–èÆgŒÚ¬ éEÀ§nwË)é!U10sŒjàURp¦5¼lrGåEÅa" ª¡Gó|¹ô«@àt¦Ér¬:Hey‡úbý) -sŒd(éOkf2WçÞ$.®$N["˜„]]ò0§¥XlÍG ɃæqžÕ#ŒFi ¥jÊå1Ÿz–Ø)‘Éûýê+,¬­y¥‹å¾l÷¦"GvyŠ'ïNŽFfdo¼¾ê%.›'ô4±ÜJý¨Ñ\±Ü6dŽ´ïµ© xëQÚ¬­I¤Üæ€, Mý©èø<ôÍUn,—dÓü™GÊ€(°r¤ )¹Ã`Ò¸jFExÄ[’¤Šl 5§ÎIÈ¥¼âÔÓbâÐÓú,ÕžxÏbF"3·¨ªVáÄ%úœzÔ¯>` :÷¢Ã&…™¢† EtdOHÀ§$À@ð1Q\ÈÍ̘Í âvxÕºf¥Ç C'Ò§íC&)qHN9¡NFi ZjœšŠæs£šŽÅ‰G'’M;·ÞU.fo1cSŒõ4æ-nÈwSÖ‹kŠdq„fn¤Ó²3U`•ÞåÔŸ•hÝ4•<Se ù@$Õa1Y‘@Æ€.€`TR@·)ÚÞ¢¤ê8¥Å !Šßkïf,Þ¦¦#=h¦¬¨ÌTGQ@Ån±J\æŸ2³¡U8&ži{Ðk[g…ŽH Ô—Q–„„5MÒ–‹…Šö«"E‰3š{ü¨N úT‡Š;P+#–R3D/‹¹”€}ªõJw»|ÍØô©e´Y¶æô«!TàQÞ‹NéLÀ)'ž´d{`‹ÍZ‘D*Ý*ná6‰_LQp"±,ÑOCVCn;r ¢8„i´TÛBÈ„OÖ+=§«<Í"";`îíR$Íæu‘‘QJA\R·7Ëì($ÒÄŒ rE<ÊŠÉàÕhãß$™ÆsÞ:í6ç<Ð2À‘0Úq5Rd AzîëK9-2GÎ;ûÒ°¡£Z-Êï€BcŒÓ`%ØbC»ø¢ÁrçÖƒIÞ¢žo-•Te›¥!“ŠCQ$¬$ò娣Ïw—´ç¦"SIŠbL®å0C “§†ô¢›æ }»€oJvàOP ïF}ip);ÐÑH®¬H$R㊅ÛF}iE-Fñ«™sJ#@›@âŸMvØ™ÆqØP"%µE ½4ZUr©!™f€F=jNôÀ€[#Ë-ŸCH°JYC0Úµb”Qp±RæZEd< ±Œ€)ßZZÅKìù;@&…Á²ú µÁëFL Qp)[È«nA8#5 ¶¼ô&¯”ByQùRIH»XqEÂÅ9T,`ñ‘S^-@ïÚ¦òSËÙÚ£{@Ëçñ¢à*0§n*~«›w2ÉíO·ŽDƒkŸ›µ ¥"ýÚ£˜.ö1'Ö´â€+Íþ¦LúS,@äûÓî”ù$('>”–@ˆJ° ƒO Ü#¨7jjHÞj‰ã¥I*î•ÏÝõ¥¹Û3"ÇËw#µ&•ƒUàm’*ËrjIa•Ÿ ü¾•XûW5 7*Û\ò*¤ŠÉ žO«ìûsœ`UV‘$“{žAB\€‘nëŠ~~jŠ'ܪNJ‘HcsH`_ ÏJ˦2iì=*¥ŸGϯJ,ÝÙ8¥V ŸZ¡—¹uUE>Պܺ–ÊZ,/öªÂg’fDÀ ÜÔ«4np¬ ôª.Íoṗ õ$¨ç&cŒ0©óT-ˆ’v—?7¥^^h`…È¥Í1zÒ÷4€\Ò0Í äšë@òH§SGZ\ó@ (Å)ÍŠ@h¤ÒGQH8˜…îsMCš\ÐÞƒÅ(¦µt ÓIãŠ9 C¨¥4” Á¢›üT­ÅŠCҌШ¤4ÕnphôQIHbÑEÄ-Q@ KIK@ E-”´Q@Q@QHŒQERÒPEPIKEŠZ(Ò«7ß5eºUc÷ x¦ }1 ERRÒQL¢Š(QETW?ꊖ ¼p°íÏ&„ tËô¨2+IÆx51%mr½vÔ36jïT„X˜þåÈô¦ZÜ Yr-[éN€búRJ†ç+`H"¦¨.Î ëÔЀg˜ñÆ’3d7QéVG##¥U!ŠF¯ò¡ïVA‚yφD—t¬€}Þõ%CU,ÁšzJ¬p4úJ@êsó)zÒ ±·š²(Î FÞkHàx¦¤Ï8¦!ÄRr3Hϲ2çµ$NdŒ1 ¢F •ß!ïÍJzTBu2y|æ€ÞYnzûÒI’5]Ý9©»QŽ(¼Ð»²`Œ-,ÈÂE•HêOKEÂÅ}ò²3Ç ¨ÀWž7E ÿv’‹€j´ÃQ·jµHñ«Œ0ÍA'Ïw9À¤^o˜ú š8R?º9=é$·&ì}¨¸Âw]ÈÃÒ¬’j­¼¹K†àö©ñC•Ú†ž0:šs Šê1B9§M ­:º€@éAIMÒÈSÅ1 Å¥¹1†* RÄì$x³ÈèM0þê軵‡ZX2÷KÎ1@Ú¹uæ§óØÈÊ€½j;I3©ûźQò†$6h0L>gáŠXfó©R¤TMmï)-™–c€X´€¶j#:d®sŠt¤ˆØJ‚г{ç4$X‘ϽYÜB*µýËf™l€¤¹'4tŠQ×VÈŸ)²r3V ÀÏaJÀ;­HK,¡Ú6Ú ­Hn… ;qŠvÇz:š®²ºÈ@>n„RµÈIJ9  ):Ô"ê>AÈ#±§¤¨êYORÕxn<ÙY1Àèjr@ê@ bŠG P…8>´´™ ¡€DK¹z˜ëHpTûÕ;B|éIÖ˜‹½ ) B20FE"ª©àô§Ô p7ª[H DÔÁoÞÍëIË.vöëRÐ2­Òb7gJ…´øÏÝ$UºZwˆZôo(Ýi-a1GµŽjz)ª|¶Ú2j½œ.›·©vŒqEÂÆ|(ë3–FçÒ‹u?jmÊp´(Å;…ŠâÖ4;ÔsU­A28~¹ïZ8¨¤²G4\,SßÝïVd™b“ y5$q$uqQÍl³Hž”\,L£¿­¥J)(QN¢€4w§E7šCNÅ /CJ8ìqIŠojQÒŽ)1Æ(±÷§ÒÅ) bR59¡†hdÓ‡ZÀ º¤éNÅ! c?Ž”òØ¥ÛÎhÁÝš)û´‹N=)‰œšq¦/-N4ÅáúД´”´†´‚–˜‚Š( Š( Š( –Š()h¢€ JZJ@QE-RPEPEP04QE0ÕcÔÕ“U¨ }4S…1 E%-!…QL¢Š(QES]þðE&Ðâ›å&A#¥>ŒP%O22 ã4F¥# NqO¢€ ­zG”¹5f“õ¡«9ÿGÔ³‚e‡ÓÖ¬2+ Å5¢V@¼€:S¸ ò°îKòÃØ Q׿ƒNû8FâX÷4è¢e}ÎÙ8À bÅ)#½!f@äÒ˜åDt9=h0² G4Ä!y#D;²[µ>9Må¹#5Ž D0xëÅ97¤ç#ýû÷.Ü…ëV#`è ÕX³H Éæ¦U#Ú§#4˜"Fe\n8ÍVl5ïáißzð碎)¸íˆëŠYVÆE-R‘ß ñÀœÒ2Û¨lŽyõ¢Áræ)*|ÇvåíOyDhXŽ”€ŒÉ œF¼úÕŠ®²…‘w¯ßèE=§Û0iÉèi0¤f ¤žÔÅL¦<Óg(êWw×$r+®W¥8Ô[•cH ;Ô›†Þ£š@æƒÖ…Å @ii§@ ŒÒà D9á@ˆÐ6à£w­#ÀŒwsíRw¥4À¬ªË·¦)#„FŲYsRö¤Ï8¦ã*A¨ªQ}ªzȤ2 hž$(ØÇcQ"˺ÎãÖ®Ògµ;ˆ­fP«)Ôì7!¢œiVÙÖ$d~?6s¹á|asVš5c’ Ÿ¥+"ºí#Š.{šhTôƒ~=…O)ÈûÓ °ó|ÀÇ4î"4P×®O8¢Ø~öQü9§,#³«Œ·\ÒÛÀñ—,AÝé@ ´ æÊÀw☲ f¾JŽ-¼o2‘Á=i€5¼òV9  mÙ8” ÀYЂZŽ £%Ã!éÚ¡ 7F3ÈÅ:ÑA¹”ã¡â‹xu¤v¤ž‚«µâ#U¸ö¢IÖky dàQ`ÚF¸/¸ü½* "¸‚Jy¦X°3`õ©ÅÔf@˜;½Å%'h'Ò«ÚÉ,¬Ìÿwµ:IÏœ!Ldõ&’²ÏrúP2Îi3Ucºy7™Á©!œJ¤ãëJÁrzc¶Õ-éPý«9*„¨ïO2¡‡nôXÁ1œ1Æ1SPDèÈL})ÑÍ8ÝÍOIKM&ÇSKsÅ#œ/5›n¥îH,pzÕ$#TÑ@¨'Ëe})=4° ¨®âü®~_JIYÖõWwô¢À^cbœOKM^8¥n”gž´µ^yV%R{ÔÈÛ”uÍß6)ô´R ¤ö¤CšZ`%´Pi:RÑ@ IµsžôêC@¢Š-%/4QEQEQE-Š( ŠJZ(¢Š))h¤QE-%(¤¢€Ò ZJQEFÝ*½Xn•^Š)E § bŠ(¤0¢Š)€´RQ@…¢Š(¢Š(¢ŠJ(¤ŒÐÑFi3@5eV ê)Ä€*4h˳/Þï@‰M©¹ÂÛŠ%!ý)M&hmôÐÁ@4îÔ Fð©9ÉÚžª`t¦$ÈîQO"¤í@ˆd‰·‡B÷¨ÒDä¶=ê×j)Ü ÁbpnAô¥—‚»ÇÊG5bŽ´\,Wµ €v“Å6ñI}3Í[íAPÃqEÂÅo.2Q˜’{Qyò®i!Ýö)3S›QÑ\…ô§´ Û˜àw Qþ†GsL¶È±Ê˜?Âjdµa pÎr (†I$S&ONô€œ.:šVê*µâÊJyy«(ÅÝÖÆMÂæ¨ØÞ³V„ .oßéM~uµ-¹ÿM’šyÔ)ˆ±4YPrǵ*L”# *¸ïˆ'qR¤*%f KR°‚ )#n7,7zT¸âÊò2 øëަܪÈRó™£äš[Å+ŽùëL ǘEKÅfÎHÎî9«†tŽ5Þq‘C@™?JŽå¶Û±qMK˜Ý‚«sMºùÔFSÍ$X)ò‹1êjÕR³}ÎÃ?(àUÜÐÀ(£4×qcÅ;µXÝ¡Š§¡«îPGzZ;Ð=è bŠ(¢Š(¢Š(¢–Š(¢Š(¢Š(¢Š( QH¢–ŠJ)sEP( 4QEQE#n†«ö«ÐÔ 8SE: EP0¢Š)€QKE (¢€ JZB@†Ri27žM/€Ò–—@„£µ.ÚBUx~i&>õ18`=jq‘/¹ª@FŠ>Èçߊ‘Ù’Ý9ÆzŸJaIV\óÖžäT|¤u Cƒ”€³Ÿ¥5§t ¹ÍÓSö`ߥK9¡Ö€$ó‚•RZœ’«9QÔT3s?Zr׎}+ tQ3IŒÕ0 ô9¨ß3m½@˜K„T'ýèÜ ˜ç9¥ª„·ÛBäŠtNßht-(°\³HÄ"–'R{ÔctYçŠÁ/›ìb¤^ÌâÜT>lŽìÃ8SÐQ`¹~j¤³L%¤r3ŒU˜óåà ދÇñKM^”¤Ò¹£­ ¥ QŠ«s3,€FNïU¤`ÊïLCJ!þùRyŸàóÒ‘zs@±")UPëQ­ª©ûÇnsŠœÒ+äÒ¼Öå¦ÇjAnâà9`jÏZJw ÊK†CíÝ¥XŠ3j ä –Š.*21¹%+Ž)¶ÈÀÊ ‘š¹õ¥\,Rµa2¹Á›7ÌÑ>0»ªéò ÐÑ«&Ö\IS!ãœqQÙñ™õ9«‘ò£ó¦U$•b¹ê)Ü!è’ç¦M3…±¦­<‡ËC´TRZ¹‰QHãÖ‹‰‘Λ`û޴둈ƒgœö¥š)Qv—¸4·ƒl+êM6@ÑÄ’sÞ–í·B‡ÔÒJZH‘œñEØØ‘¦:PîâD(ió¹P‡»T7mòÆ3ÔÔ“*È<òG,231HÅ9Ü+ œT…·4ns·½-à>Y#µ!‡ÚÔœóZL ìzUe‰žÔÀM¸\,(}iØE¡8-€EJI šÏ”xÂõÍhPg­&†S¾8Ue$j<§û8a!Î:So‰Àô§Ä²Œ–ÊÒŸAbr"]ß{ýÀñU¯X¤hTà“I”J r¸Í+ ¶¥ª ,ÊKœ¥Y’R° gŠVF4(qU~ÒZ=Û;š™d å8ìÔUQr¡‡'¸« "*îcHQŠjH®2§4ˆ<ÐûS#‘$bäŠI$*ÍV±á¤>¦€»HIͰqHO8¤³KHHÅñÅ-#aFáHí„,M(è D!@4Ëy ŠK. =ºâ€bEbÁF}iŸg~ü|Þµ/E¨bevQÔP¥d!²U‡qK".œ“Ôšx88¥'TZ¸ówqœâ­bŽ£ u4\ “Á4’‡ÀÓ&{Õ¼g­W®h¸ ìj+®-š¦šñ,‹†Î(;|})ZÙY÷dŒõ½>8–5Ú½=êLPs û@pÕb“4zÐr‚ñ•VÚ}sP©1Î_p#žzRÜ£Ÿ)*8¦¨è0BªFi€íï,Æ8Ûzš|»Vê•x†âBüÐÒÛ‚e–NÇ¥‡Y AÁÁ÷¡fýÁd^E2ا=Í$\Z3zæ€g+8*ù'Ö­Uí0-ÅOü4˜Èn¥eBONM@ˆüi/-Ö?g\zQÐù­,å¶…§E3y­òGz­ 1ÊZ3–îIjÊîÎ~ùëíNÂ,Ìûaf e«3BÏ&™p sÖˆ$-8QÀ¥a33JcA#®ibŸs20õVBÖÓ—0=iöøyš\õíE‚åÜpiÜãšnisÅ!ˆÌrN)¡û¬?:dÌ mŸJ«h€ÄäŽsÅ;½šZ«e+6õcœTûþ`)þõFú@YPv95qœ/ZkF’rÀMèˆ(¥})H¨ÍE˜” T1SçšL4hÝT{TrDŽÀŒtÅOFZŽ8’ v÷§²†B§¡¥3'PajÃåóÌô¥žØÈèT¶¬Œi  f·w‘c Ö­cF8¥  7ÈÍ…T'¹ÅOn B ‚1ëSÑNàR¿8T^zæ¥Ý¶ë×mX £4˜Ž(¸XÌ”–YŸ$žž•fC‹"AꢬyãE!òŠ.+€ÆžGN)•Ó×êɵO/`,Ö•mBbÉ úÓ¸ˆ„–ȹǦɖºHÀÈQùÔ‚ ¶„Ü»çK4 $Y"ûÀb Š9Vvm»Tö©%%a/Ü XVRÅ¥ÀÏ |± #+@Ê‘"´›–<æ’Õ‚Fì{NU’8L^Y$t4–¨Lo)Ó‘œ4…Îìð*I'“ìë'CI Q£uù‡N:Ó®Áû b0xâ€Í”Ä% cÒ•îHŒ: !+ö.lb˜b+c–ëŠ|“7ÙÖM½zÕ [pç¦3Ue8°Qê*FÿáJÀL“+Cæ”Å]ð3šŠºÇnqŸZŽu¸T”r:,;—ÈàÕ+,‰O½^=*¡Ä³CBÑp’9¹\ŽEQˆ™LŒAjšÐH±°pzñš,²‘ S ”,ÛýsWÊ ktªÒD°ƒ#1'P€-gÌl’´Ö—{ŒÊW=Q¬Ì9nÔ†Ôï‘Í1[Ü1”Äç$w«yâ³m”½Ë8û šÐŠLhŠåÂG“ùS-§ÜþY\†ùœƒU¤1ªy‡Þ€YÄr*c$ÔõUDms½' 54’¢¬pM FXšvpÕÌ›°X{R³“š“5î¦ÜÀ)þ†€œ E90â„é@¢Š(i)hÅQ@ ¥¢ŠJZ( Š(¤KIE0 1E€(¥PQEQEQE! Š( dRýÃPv©åû† ¦1E:š)Ô„-”´ (¢ŽÔÄ-%(¢€ RÒRМuª±,ŸigeÀ=êÝ&G@—cŽØ¤ˆÒLAôlIQÅ;ŠÅ¸ ᘂ®@Å£ OZV…ªŠr U(l³ƒTìó¾Lõ«‡¥@Q¢‘™WpoJ2bØã½U‰Ù-ËŽÍO÷;²‘‘À¨¹ûH 昋2Hê‹°rÔ±H\0aó)ÅFîÂDPÁ@i¶§ýaÎyë@ÂÙÖ5äðMY,ª2XT”¢¶zÓäæHTýMYWWû¤uVŽðV*Í t§”ÜñP<ï¡J‚¥Y¨ÍöŸ(Ž´å—÷›X`š…˜ ÝDzЀµLY‘É?/ZT‘\:´ÐѲ±L~èäYTæŸUlqå¹>µkñ ƒïF)O<Ò”QœPx @Ê€E P£`R“ÅC,þS(+Á¦¼ˆ÷·­(F1Ò¤ÏÖ`¤@'¥ #†ÜE“»=ª\w ži{P{´y# ‹žsO‰H…U¸ T´iN²W{÷¢é™ËŠ¶Ñ«ýå•TaF(¸X¬ÑH7¹|Ó,Á9â®Á¦**œ(Qp±ZØ$“xÏ=é ]—NÝe Rr2¬{ŠXâXú~t\,)‘7ÈÏ¥/z®ö¥§â¬@ÜÝž{U{0L-ƒŽjÌÑ´‘½i–°¼HCúÓè Ž!'©¨Nè™2û‹EOrŒa;zÕR­º<# u&„÷nÑ…+Þ‘e”¶ ãŽ)/[”R{æ§sòØ dPr1Žô-ÎX §¡¨­9= ¦€ÐJ§9F”²ÄÇc',¾µ=Qp±Q¹É ÁƤŽYvWà•dÔb<9cÏ œÕiñö˜½ªÕT”z‚„ sŒÝǃõ¡0oÃS¬J¤°Ó È\1¥1 ¶ûÓ}M6×T‡ÜÔ‘Àc†å½i"…ã‰×‚OLPQ–E‡\Ò0òáYrwžsš’8[4l0j6ß$b-‡wLÐ’ÊØ €ÝéâVŽß{ÜñQÊTb) •¾ÇŽH úP¢ikÉ‚­úT³ÍåíÈÈ=ê’Ý<’1Iw÷b÷  ÄÊp¤}ûÔW˜Ìy=énøc®h¹ž i`H‡€Ù4ÆXä÷‡JŽEåñÁ¨Û‹ÕìÑ`-1à xæ©; nб!WÒ¤´fË©Îã4XeªkT…8>´ìàf«yÏ , „k#¾ðç88«RÌâ'cýãOC®Ó·Ö€,¼R;S%•T’p})É"º‚§"ê(P(ÈìEè(È4J÷£éUŸ·0Ï©ÈeXlî)ØDÔb–Z@17ÞPivM¤qQÃ+I#+.©èlŠŒ£¡¦¬œœtÍX=)§NábµÜD²¸l{U•(“hr Å8QpÜU ¤‘åR+C…sI0##Ì‹2*´8…Lrd`ñÇZ»ÓK€z€iÜ,R·‰Œ’¸À4Idz6I«¾ÔÇ]À©‹…Š–*ûw -°-4žg'Þ­ÇÆ»T`S^s¸‚¨8¢â±P'—xD}1W€9 KJ™Ú9¨'·yfWVÀ¨dSe“b“Þž8¨¦\©=0)QInò1;óëN¶Rcgf9"›&b…€Ö<µ#Lå– Ø$rh°†R9ô¢dò®ÃŸºF3@r¼ryLrzW,ê¬;zÓvù—+°äÖ™*#†`vºö  èIˆ0qJùòÉ&™nYíÔž¸©1Æ=jFVK¢IB„5,S—vHÇz†áL ýXJÀ[»sT!Ææ1Œž{Ó÷‰#fS‘Чh $„ŽsE£•óTô¬´ï½'Ö¯ ¥§tûÕÎô˜Ð¢•›hÍ0Ÿ˜Sn¤òá-Þ€Îæ†uQ“Yò4˹`AíOß)¶g~1Ò‚åÕpÝ .áëYés.ïÚ¯‘Ó“JÀ8ô ¶žâ‘ºS&}‘f€Þc(;—57j¬“ƒruiÂåÝÏ¥cÍ/N*5‘d©È©(ŒvŒÐ$VU?/sP&ß²8aÞ…sBPZ3< ·Zœu¤0Ï4´‡­8P!™ç“ [$E)8>ô““@ Næ‘úRGœRôfŒQ@¥¤´À(¢ŠZ(¢€ô”´PQÞŠ)RÑEP( Š) ¢ŒQ@ E-RQE%Q@È&ûµj’Za b p¦Ó…1 (¤´€Z(¢€ (¢˜-%ÙX,lO¦*3û“SVÈÁСxQ¥1B̦CÇaLŒ”¶pNMXxQþðæ”Æ …b‹…ŠlåZ'èOZ¾*¿ÙòáÉÇN*Æ(`€Õ8 ¤e]ÜóVÜíR}U³nd'Œžô anK]ÈHæ¥71ùNÁ5³~úVëI+—ƒv¿:b$¼åc­SîPv皯?/÷¤ÝF¥-d†–©,yšU„^¤…Ý­Û°àR°OJLñUÕÝd±ÎFhyˆbs·­Î*n âMÇ#µ,w 㡚T¸±†ë@v÷  u¤Þ ãpÍ)÷¤Ð:RÒPÒŽÞõR`Rê0¬~nÕk¦•SÔf‚Ç´”€ˆA9 P^ ÉÕº¯4$¡Ã i€ñ.¬Äœt¢hGV µ(àsB°'ÐL†àHÌI~Õ½“Ž•pÑÔb‹…Šl†“i*Þ•b&2|Å6Š“µµ$ÿVØëЧl@·98Á9v£0ÆÌI^M¼ýM¾¦›Eí¾þ«1À‘ä.p{S>ÊáÈ_JwÉтdzæ+Ú¤·pñd ò(’ß¹cš|0ùJA9'“H {Vlq¼­ W#´OCŠ«kˆï¹qšØÙX‚‘#ÔŠ|LÂãj厦’â6YRP Û×$ss…!@î)ˆŠþ™%:)íMFÞ´ÈúL¹¤€ƒxÿJ°fl¶ÅÈ^¼ÑÏ›’¨x lwJ¡54 åAŒ‚}©XA0˜1·­'Úc Fj¤NR ±Üšz¨û=ñš,;–Œ£íëJXmê*;¬ri]µ >ðïš,.# ¹§ûÕI‹PG¶h·?x‡,¾”X.[È£pi™U¥•Ú.>´¬Î(N)œ3+ÿzCráwí!=iØ.\`sÅ&pqLiÕ"WlàÔFáe!°(Ð<ÑLóãÝ·pÍ<²¯R ’šÎ¹À§‘@äSdRñ²ôÈ¥C¸wj¨¢TƒÊäúÔ¶±¢zÔÀŠ‚âcŒ³”ïp,c#ª°ÃE r ž´@"ª Â¨Ç‚'9e©i²}ÚP\J)•¥ð‰€±§Æ;cnPq¸gÒ‘¤D8fš¯öicv0°Ãu¾ÈØg.Õ?ÒÒ‹ZÊ)!,pM5À»ã;3W(¢àõòæÜàf§îL/Z¨6ÓÌs·Ó=ÉSfJýÜqQÌVH|ÇÚ®$@B¨À6" ÆŸ4Ë Z•Pa@£žÙ.Üy(õ!ÐÈ4ÙÆ`lúSÑ<´;Sf‹ÍM»ŠÒ¥ &Øíõæ’ÍYŒóVa·1DSvsMŽÙâV ãÖÄCe’dúÓÚóccn)öÐ<.Ù ƒéVH¨ ©<èÐ ¯-ÐUg‚X?UêE\º·2(*9Zl®ÏM¸ŒP˜‰m¤ÄqÛ-W… ½·=zÒZÝÜ©\R°ËóN¤ )h rsIŸš@ÖèhŒü´â3Å  ´ Ðh¢ )hŠ`QEQÞŠ(¢ŒPQF)iQEQEbŠ)q@ EPIKE&h4Q@ EP2 :ŠºÓåê)‡­1€§SE:…¢ŠZ(¢Š`QK@Q@ f¥‰àSQæþÔ˵Ì$ç¥: ô¦!êcÞxÅH§ ÒªWUS&sŒU¾ 0ŒÑUíÚÌIËÕŒóH`i¥¦4Hæ5ÝŒŠˆ]!]ÅX b°¢dªàši·R1Î:ÓÚURƒŸ›¥>€!’vƒ—ÖšÉ'ÚCã*X¢‹Y7«LJ›¥F¥’+–æ®ÐTâ‹Hcíy•ÇZp8gÙß­Z(¾ƒŠ«bC!s‚ 1*yvÇŽqQÛD¦är >Ý|Èrq’3RG—ÀÙ÷4ŠÏ³Ëf’{Ô“çìŠsÍ!‚O)“#ifW6ê¡y ¾ø¢÷’Oj–I :F§Œ“PÎÌéì<|Ÿ$ñÈ~îÜPYX^Æ ÇLÕÁTÌ®Ôç€*f™…'“IŒ›4riîæ¢¹%m˜ŠQs8ÏãR—dªNì`cœf–ã›HÉ<ñE‚å܃žj(b #¶zÔIÒqÁÓm\ª»H½ïò¦¸;NÓƒŽ*«I(‡Î øSüÉDCŒŽh°Â$âSóS‰À¨„ÇìÞi^zâ˜÷ ż)Á  š¨Ë¨@ÄàRÇ*9À<úx94¦u¡ˆM ³Æ[náš’©H£íqíwâ®zl=EÐß1•ºRÔ€U[Y]ÖMÇvÞ”ëiÞVuuÁX ˆÎ&ŰQ»iÄsHxèh´*®’;ðÙ¢ÉKÀà“ƒRµ¼lrAÉëƒOP±ÀW["+.I£h%Ùå« •m]]w)ȤÏ8¥q•å·&ÜGjd±ÌÖê9«¹¢‹…Šrù‹™sL³Fóí* _4p ÛÚ©àÇ|O¯Bjð¦è¶Ež”€EžEgóÈ¥3f1+'Ks`bj†(•íWsš`JÓ*Ä$·J!˜7ÈA ׫L¸š%Ïpjt€‰ ŒÜE€ Ò‚sžQVæ<Žx¬Æßr2ŒzÕçr°ƒÒ“@JØ)ëÈ£FÌYõ§¯ Hfpê$vÍK¨(Ú‡¾ìTQÚ‰56 >D­UÔE´~• Ò3í Ø"£‘Œ1««ȦÜÊÊñ”<5+ ¸¼(ÉéT#žOJt“p‹÷›ô¨nÃ.ÀØ<ç4$‚’PgÒ—¦¯*)sÍ (<*9' …³z ôªùþ÷C@¥À2mpTž™« óY2;yQî9`zÖ”g(¤õÅ6€“½¾ôÃ"¤ÑíQ¤ÇðxÍ0ŽÔ…°¥= Ê“½C˜óGjœPž´Ô‰U5%%–°UÉ< „]) vÿz€&¢‘]w)ȧPRÑŠ\PQE-QF(¢Š(4QK@ EPEè ŠZZ@%-%´”Q@Q@Q@ E´†Š  «7ÞÃÖŸ/ßz`8S… §R¥¤¥ Š( –Š)€RRÒP7‡íêiÊÞ]¾Hà”²Â²€”Hs±“ àzRb†•]¦d¶VxñJ†E•A$‚(°\-Ëy’+6vš±U"r¯3žy« *˜„ ÔO nÙ#Ú•%IÊzTiãg}huPŠŒN)(¤0£½79b=)Tó@‚—à€h¥ 4HNJŒý*ˆŠ¿6jÇzæÀð# t(z^ô´€ª-Ü®ÂÃ`üénbvUH× Õ€Aͧp#lˆrG t¨-8e9ô5pS% c`:â‹Y ù;ü óÅIpËöCƒÁ²ý—Ëþ,t«Æ ®3@ˆY‚ØqI>Šßa¡CÌ|¾”ǶFP¼EÀ‚»zõ©š'3$™Ú%¸xƒ† "E)pÒ0ãÒ‹Œ—5Q‰šè©ÎÕ*èªÏG9‘W ŒB1ÛÅñŒÓÞV{)[ b³ °Î¤Å)Ä7eØ|¬:Ó%«–gSÎÓÖ§oºj+v Y€À©\áŸJ]FU°ûõ©ÕDØóÞ¢°Ç’Þ¹©nýÎ;P …1y˜8¡åóÅ@ 1Ž(~,‡Ò‹dL‡0çÞ•Ù1µº¤#U²Ü~ñæœíþŠ <í¢Â¹r4H“j)AËUxÕšÐ`üÛj¼næ&;ŽàqE‚æƒõ§ b©ÎÍ –ËzÐ'xÊ`Á» ,2ïZ8ªÒÜ4sù{sž˜¥[Ÿ‘‹©]§¥+=Eçƒ9‹ëMîå ûÒE:³tù‡Z³ô¢«Epd‘Çð­HÒn‰ˆëŽ(PA<qAªÖqùjI9cÖ¬ƒžhj–¢NÅPZ¹¸TWRá,0O½CÌkÛŠÕhæ·É!IéŠe¬Žf‘]²˜È”…UŽHð¥>´Š)¤qP›H‰ÎÓ5!<ÓÇJŽhU xÇB)±ÛˆÕ†ö;»šž°¢àUûÙæ|¾”û˜L°ì^Õ+“´2i©ÆHͶÑ4p…nH©O#µ(£·4H·¥™ I~ŠRpzÕÎô>”î¿yTî'œŠeÙX—²õ­1HQ[ªƒEÂÅI—mÌoü'½2ñ¾d]ÙÁÎjùUeÚÀQ½´R`éEÀ$`‘oÏRA"λ‡ãO1!ËǤ‚…J©<žô€yö¦HácËà}jNõ^â×Ïl— zP€ªU]ÌŽÃ ÐUèŽõWÆ8ª§ü¯W£]‘ªz lBö"³lsJ­éÅjU ÈKNŒ£ïu¡ ’YŲ-ù9nÕe0SÚ•PQè*šÜ8ºòÊü¹  oÒ‘÷‰_¼?›3‰‰=©¤í4l[¨¤Žè¹`¨IZfžÀFã"’Ä©’SïNÀX·¸ƒÁu5R±æiqëO“íŽÝ¸  n½»ëTภlаÃ*{‰dKPHà 3ìÉ%°ãÆsB5”MD?SÍXªš{³#+…8«b“u¥¢Š(¢–€–’–€ (¢€Š ( ¢–“½ )i”RÒPÒRÒPÑE”RÑ@ EPE¤ ¢’Š©'ߦw§É÷Í0SñNÑN€Z(¢€ (¥ ¥¢’˜ EPRÑEéh ¢–ŠŽX–QóQÓhä }ƒËs:ÈHÀâ¢häýàØIcÁ«”S¸eF6ÉÆ óŠL¬Ê§'Ò¦¦í_A@ã?¹˜ûšÂÛÆ»r[ ©Ì)‚6ã4žB•@ NA  ðƒöÆŽ:S€V½n¥—Ì IÇ9¦yN. ¯F¦"Çj^ÕUüÑrÎÃV;y¤2¬²H.6§9§¬Í%œ|ÙÆ* s}ô§]©;[°<Ó,r¶ðŽ$db•®UX€¤ã©¤¯ÞS–ÇÔV 4n©Í ,„ ¤œnéNóv7sU.WËEéº8ÍÄTX ™’qGdsTæ}÷j˜Ê¨äSâFýè „ê´Xw$H‚+€OÍPÙe•²O^)öÅŒ X“×Ëõgë@À¨®DBè@ÇZYd©bxÒ³Û1ÛBhO™»“RT>Ëefè>)ÕØ)Ó4)£µ€2jnD²Æ1úÒj Ñ@-'J¼ß=pwÞ€%ÎO4„ÔRÒ{ÐèR¤pj8îŽBƒÇz“'½28R<ìÍHê °àÐ)ÔPÙ©R»Ž;SšØ4^îêmÊz@`FAâ˜ZÞO³ì ’A'ÙÕUrqƒW¢‹…ˆ D¹\Æ*´q•¼eÇÊy«Ô`uÇ4\,T¾RÑ© z®,jÁ¸¦¬H­ Z.Y[Q^zTט1mÇSO0F_vÑ»®hš!(œÒ€+[´ŠÅ$ñÅ2šåÈõ«IܒıɦÛÛ¤,[9¦";qûÉHïQÄùÁÎÑØUˆ¡‘%n›Xæ›å´;„,­éÚ€ÍÛt€ç³V£!”Ô«ÌÃh=Gk$žkFÀâËL8¨/ú8úÕ¤â«jêG?…Û?fZ‚Þl»Fy«6ã6©‚1P[`É(sÅ1á”H¸èGQRT­Á7’c¥YòY{Òc9§TeÂO&¥íHsµIÆk:9ZKÀ[Œv­éY°œÞ·ãM.ÜÈRe늫qµ©r~qÎsSÜÕQ¡eŒH™(zŠhEË)ZHF¨1XÓkI¥³uhòCxÛ¤² ]C¡n ˆ×w']dwi6ž*Kgc “Þ¢U,dÄ{¹îhÖ× 0!‡J¶:UX%GR¡v‘Ú­IŒZBB©'µ¡–@«ó rJ’®VžEÉ-ö§$€®w “¸¤Rg4HÛc,; \G^k>Ù–Us#ݹ©,¥f,‡‹˘¢ŒÒ æpqFÅÎí£>´qšvi€R2+®Ö»¢€#H#Œªi‚Ö N ©è¢àC ºBå—9=jojAÅ( ÉÈ»XdT"Þ@›O—éVh ¢ˆCÔª›ƒsónÛžsZsEÀZ(=);PÑIE--%´QE%/z;Ñ@t¤ ¤Ï4´b€ R¢Š()h¢€ J( Š( 4RÑŠJ)h  O÷Úš)_ï˜Ç p¤´€Z(¢€ Z(¦EPEPE%­-%PKIK@QHN>”bŒ€HO{:¼»ŽAàfr]Ö#ëNÂ-šJQ£>œÐHQ“À€a•D› ù©àƒÒ«ª«;¾r¢Þo3*;vÁ£¥h¤JüÙÏ”ê:ÐE&sšB 2)Ô´ÀbD‰÷E1­ù;¨=E8L­)ø…Kš‚[}Ê W¥0Á)™ˆ8«Tb‹…вÆë8•îÄS™ä1e9=XïAúÑp*C¸[6AÍ?êñß5oµ U€ ¯òOÖ›pGÙ¾*ÛÀ‚8¨^Ò6\dÆ‹ˆ‚ã?gŒv8©|¦-_j‘­Ôĉ w¤Kv ¾à½;+ãi¥S³Eó»ƒWXnUH"–)HÛò“’sI ‘ítʬzT Möp3óg­G~ÖNÓƒÇJ}À+"Ä)êE1Nëpcsž)ë+ý¡¢=:І">ØNxÆiÑ×ÎGLP£»_m=j³#…I9=…W„ÿ¦ÉI’×燢ÀIÄW·ZT•ZLäÔb"­).>jd.VdI§CJÀ_¦ÊH‰±×Sªˆ“Ì»pù*;RHd°Ä#·ua“M²ÿSœ÷¤œÇ `p:f™nû-²zj„Kq¿r¬gÔàà'žõP\8„KŸÂ<Ì›q†íJÀZÞ”·@*©™â*AÝÓï´<#)éE†XÏ84§Žj´“áÀÚIôñ2¼lGn´€”zR÷ªñJ¤d0ÅN\,9€œQQÃ:̤ŒT´!æ›*–Œ…8>´‘ ±€Í“@QŒGj(¤hÑÀÞ Òâ”`P HP&0aLѯÝ>¢¤bwCN GÆ>Qש¨’ÛmÃK»ŽÂ¬v¦|Ûñ@o¢'nÆ;U¸óå®h(§Å:‹€‡;xëT"Še»ó> ­ 3š¨¼èŠŽ½ªrylž*å©Ü °[‘nW%I¨.`h 'vAëZ#¥#a†\,T·¾Í¸6r8¤²i bäb®p8Ç<Œú."” µÛ”mnËåàç¥K) {Ó¼b_35-AvA³V* ˆÞHð˜ëšH-—ýûæ›kh›¦N*x!‘-Ú6Æ{TqCÔ£®j‘º1Ü”ÛÁ5t › ©¤’)Ûy£hÒ0§¨r”¸È¥ ´PRÐi(zÒRÑÒ Š(4ÓÖ˜&’Š)½h4”P8¤Ï4½©¤f€)i4´QE-0ŠZ1@ EPRÑ@¤E))h Š( ’ƒK@ E-%-%PEP÷ƒÔýiE1Ž´‚– EPÑEÀ(¢’€’–’€ V2»UP@$¬ÈèAÀÏ4ì"Z C­$θùGCH.>FvS…8¢ÀN)i¨ÁÔ0è}iÔ†Ò2¤zÓ¨©y ÆÈIÏë†Ä°çZ±ÔóHè¯Ã8¦‡<Ž•Zô¨£¹æ¬tÀ£š?5qÜr(@FQÌÊÄ1ƒŠe¢€]¿ÚÅL©#6daÇaL‚9#fR¿.sšb" ^i@b1Óš•Ę|^~´–ë ‘Ë®l™È8ÇËŽô$s“ò9¦­Óy[Êqޙū0Fi bõ  žbˆÃ“ŠjÜF{àûÔ2qmíÇ܇åž)Xd“"® ?Z—#nsUßtÿ.vŒA¶î#¸¢Â.‚(ÍS‚6Â>ãÒ£2ÊÅÙ[OJ,;šɠІ L‘5.Ni½ªr‚O,†Ýš±Tdÿˆ¦–d˜Dê?5<š‚ó“?ÅR–\ З]ásÏ¥; ¨öFÒ†ÏÌ)ç´,ˆä…`HëNªvÿñù6:õê×ñÒh €ÜšŠ\Pv®s´dS$Y7Á©9¡Y_;Nq@›ti|ÎA”QBÙ'½µš)·v#=iÖÇý óïOŽÝ㉑\Ñ–Í#'Ò°EòK¤Ôrï‰ÌœçŒuºÊ°´{1ïP2?WÊmÙäÓnwalS]ŠÚ«ãž´“öÇ4ɉû úb€í.ÛA\Þ–IÈ;c䎵$KºÙ6ŽqUáRdy  äyÇÒˆ§ÜáYH>õÀ‚ ŠÝOëMœN#”èiX ŽpËM{˜Õ¶î¥bŒÕ †É[pýáBC¹¢$ÁÃH_U/1å.Þz`ÓnNÔL(°®_2Áâ éUnòa ž@¨ãŽSr'=EÍÀ öªk3Ò¡¾Lt«Df:¡ü~?»BSq(º üÔžl¿i )Ja·ç$ Š)ÿxc+†æ€-±À⑳·Š®nÔ>Æ4å¸Vm¸ ú@N¹Ç5 \ìœDÊA4ã:¦9>‚«3‰oÓð:`_¢¡2áöð)âEcŒŒÒW&Þ£ yR‰>BǵIIL†U•w)âœX´ê*)Œîˆí£yç½8ã½-!Ñ@ 1Æ[qP[ÖŸPM8‚ã,{Qmp'ŒÖ€'ïEŽ(£­žx 4SX‘J9 õ¥¢ƒÇ4f“Ò+n4êJZL“@9 ¥¦’æ@ IF)h)h¢€ ZJ(i(¥ ¢Š(¢ŽÔPER¢Š(£µPRÑEQEQI@¢Š((¤§ c)i)E Z( Š( ’–Š`RQ@Æ ö=I6âË´õ¨“?lbTãt…þÔƒvÄ:ù™ …e늮B7 ÌqϧZ‘X›‰d^€Ró-²ã4À²€tíJj;|ù ŸJÔ Ò3J!Œàõ&„vI|¹r2 E ÿMr{RÜô¨©ˆµÚŒŒâ«+1¼psIö¦\´Xw-f–¢YP6ÖnsRREÔTR$…Ô£`w-'áKŠ(¥Tç `õ¦##x-%C2©1¦qÏÝÏÊ!rA4‘‡Ç$r "À<Ï1›s”ÀcFé1‘wu’G+¼{UšJ."[ʆªÈ|’ÈëÎsÓ­^þT¤ØQp ’A¾â¸ö§C'šºSä@ÃdjªÆA@‰}ê‰çQæ®Õ³;Í“î(CìfHGûT\|²ÄGC$’«+#4­’H¥ðþ´ÄG·Ç1J™–W-Ð EY>Ô\¡Á┊F æ€ UÅÄ£ÐÕ¡÷ª©"y7 ”Îä&:÷¤†¥¨'™c#qëS©Ü¡‡CHdWNéØ;r}*=?ýA>¦¥»ÿgúTV?-¸Ï­>€5›Ì¼(ä…, Ré‘~æ3ô¦LĤF>eêi-¤¦71ç4Ä9†ù±É€}(¶r.Ì`ü½iòH¤ã9Æi¶ì©9F1èÞ´nFÄL}ª­‰vBÌIÉ⤙‰ˆŽ„œTv¯™J)ùPR裑ŽiGN´ŒzS‡JCÔ½©’:Æ›˜àT"é ë­ÁàP9Ê,0zR¤ŠÜ!£µ¨è(;àÒÕgC%ÂÄm« Š\Òf€YÖ"ïO-‘È e ª†Ö]†"T®zÕ¼€3MY( ‹bÐ^XTÇ$‘¡‘޵¥IEÀ«r¯öP $zSíT›u ¥HãšœR⋀¹ª€/ÈÏlVSMFvÑŸZ WåÅgŃ|Ã?i‘ÍW[HÒMëi¦Y ð:àR¸Íê×i­ci<̶êE´Q/™¸äzÓ¸ˆ-ÁkÖÝÔ9À’‘×,–Û¤ó#m­Þ¢6Ò‰„ŠÀ·½+€Û¼˜»sL˜bæ"8É©î`wd‘@,:Šd‘O$ñ¹@=éL\¾ÙA9Ùßè×u»üÄŽÆ0)#nŒ²˜¢e¶”•#=;OÈÈîj%šS+¯ GJu„€G°ç#9â™hÀÝIïÒ’yc…\Œy$“yp+7R*-@á'œô¦\‚`ˆŸº1š™n:+¨º²N UxbÌl\“ØU°¹#41™ìÿéäx⬳ÇdaYªÔ_½‡ÌbôÄX[„a…šqKÔÃqæ^˜ÕiUß)’IëJÃ4K…“Á žAÅSºlÙ®="ÆEŽüœã#š,ç#iW‘ÅQó›ìjÄóNx‰$S’{R°©­È5Ï1d0äÓ!¸wW ÉSE€Mçÿ±V…R¶¸f™ã¥{£ÉUʃ‚E óŽ)Tµ•V0ïÞ›Ò4›9é@¸ä‘zTmÉ©GJ(¢Š@%(¢Š`/zJZ(¢’–€ J\Ñ@%-%R÷¢ EPEPA¢Š(¥¤ Š( ¢—4POÅ©1…( RÒ¤¥¢€ (¤ ¢’–˜Q@5Ð8à ө(«ª•Ô-nXmßòg8«4¨¸„j…©ih eRW%Ï Ã­ Ä×!×î¨ëVX9*€0)ÜV ‰³q)¦Ä3s!=ªQù»ÆA¦ˆ?z̆¦"Z3 ”$õ©fɶ@íM6Îc1†sž•3)òöûPîfk·Lžiþc­ØLäéIh…T’^)7n¾ì(Þi’ɱs‚i†uó¼¾ôNq}) ê6ÇPM8ÌŠØ,¨-£S ’:sQÆÞB98¢Â¹{ ŒƒÅ.r*“†TŠ#œ“ÏçR,O¤®vb‹g­N‘‘Îîç4Snd~¢‹äÔ֬СrSP‹†YÀ ÇŠ“ΔW± ™ñqåÛµMŠ«×Pú-Z,'C)'XÎ8õ©Uƒ¨aÐÕk©­ÎÓÔŠž,Tz p=©GJ@2)¯€^ôsÖ–ŒP1£éHcF}åFáNÅ- ¹Y*KgÔ0B34gpâ«Ü̪–4ĸ!ŒN0E+lñHòlˆ¶3Ѝ³–' YGR;Tá’KrW¦(° mp'B@Ájj¥§q}jÐ'Í 7JE…HUNK0*yd…±Um>k†Ú¿!ç$P4ïç8l€¥6ÇÍ‚}jþÅ'%A4žZ.NÐ3Ö‹Ÿi·íg¥+Æc|-òç‘VÖÚ}ʸ?ZoØÐž {Qq\|ï…54–»¥G *YmÖH“½¦ÇÁy7éEÆJW8§âŤEPEPKŠ( ŠQE”QK@%´€J(¢€’Š(i)h ¢ŠZJ)M%%´POÑN ZZJZ(¤¥ ’–’€Š(¦EPEPEPHx¥¤=¨§‘L‘ü´Ý‚qKœšŽðâÝ©€á"ù{ÉÂÓÔ†ЉBy ¯ŒÞ•¤HJ§¯J“6h¦— à1ëÒœG¤vp3QA+JI#µML=× Áx^¦Ÿ$~j$Š~i~´\¢‡Ê]»‰¨Œ2Ç#ÈÃU£E´±¸Xß–e§¤#‘•qßÖ¦ïF(¸"pºœ†æž£}¨«ETòTR…P¸iÜD±4i¸ú`Rø{-JÆ­9¤ʳy€i ?ãý ¢ñˆ ¿Þ84å·e˜É»9§Í•1ߨ4¯p€;NÊFŠ-I,²p@¥š7dGÛ‚½E0&Ù8E,TŽsRÍ! 9Å$2å\ÜÑ3…qò·z|M!c¸‚¾´Ï´1 ÁrŠqœÔp ­*#nM¼RÀˆðÇóJÀO$êO'w@)c”H¤ŽÞµ^dݱb?2T–¯º6ÈÃE€k]‘: w«"@O^½*ŽÞ¨íŠuâàÇ´àçS°I£5U!dv;ø#ŒÔOº­¿s“Ï4¬;—ûÒÕk†‘c߯4Á4¦`A,qE‚åÊ:Uv‘âEÊå˜ô¥ŽrìѰÊV “I§­ ÀNb æ¥K…’Sa@EC%Ê#ì'æô§Ç*ɧ‘Ö€4BUðGCLû1fV‘÷mè*|ÒqEÀué3Šæ€Hj½áe‹z1\T1hžIüPUXä¨&›+4hJ®ãL–*!Sï@òc,`Ï­< lm¹õ¤ØÙaYnŒ:Là¸g;ˆéSnÅ‹^ö)$ åõ4*DJ–jCÒqEÀ‚ò– ¨9ÅA,R±Fà'j½FiÜ, =zÕ;Û‰3寧ÜÕÌZS‚yÅ$RܸAM¼õ­5ÎiJ!<¨ü©i°3î‹ô'¡â¬L¨N1ó‘Á©¤‰daLŠŒ’2O©4\ Ögm»sš,²måþïj­˜•b õž±*ÄQxƒNÿPÇÞ§óU²Ze´eÝj8­dK£!?-,„9¬û¥_>< dÖ™Õ ˆäyÕ–2Uh@%É(c“V'•F£«f » Æ=¨ÜuâtÛÒ3Œ þ4ŠW–9¼´`ww«‘äB7ýáUTF'RìÄž™båü¨wb†Ë÷h$Tv®EK·-šC` J:šJu'zkØS³Àõ °9¡Ž0)œSj3H>ñ£5.>jOâ§4ýúŠvi@Áɦµ(9 IÓ"œ m¤“ž”å( ¤nE:˜çŠJÕVØm$IK'–C“ƒJÂ,ž(è*½ÌŒ…€wS£™€o0`/¥=&*¹É]ÈB·CSÒ£ƒN¤=hÈ ˆ­/Ò«2nrrzU‘ŽÔÀ;ÑKM=iক0ÊSF(Ú S>ÏíØäÔ”½(€³ïFÚØÇJtPˆÐŒäžI©:Rƒ@%‚O8Ôûá‹cõ¨Z@Ö?ˆŽ1]¿™k¸t8¤Iš8Б…éLLvJ¤óEÁÿGÓŠ³qqåmÇ ÷¨¯X›_cŠmïú¤Ç­G v8  ľ\IœŠpž2x9&ªÝdˆW±©/@E”`ç¬ìø` HGBé¿x¬A*8§,ž]¡tnôX ÀóEg•‘ ó·œã'ššY˜Ù TàÑaܰÎT7›„;•ˆÅ@d”À%b1éR\IæY–Å[vßnŒß{öv’X « ˜í‘Šü½êÄ“âÈ Àí${vŸJ“ Ü+AæôZ.Á`UOBidô4‰œR‚sH½ 1g¤1ƒó –¨)ΣøUìç¡Í ÜÆy§vȪæ5yÄ™9^Õ9l.hÎGJF׋–8å‘YC†€T¯üÈܱz⮣Ýc%qô  ·Ï’?,&®2†]¬2)"%£VeÚOQO¢àŠ‹…¦íK@ Iš3šŽY’ çŸA@ÑLŽE•7)⟊(¢Š1E =©qÅ æ”ÒRÓÅR“Å&3Í-âƒÒ€ CƒGZ>”§cŠ@iÔÑÅ æœx¤ ¾H➣ (´R)qÍ%-PE-%QEQEQÞŠ(¢Š@QEQEf–ÐA¢ƒ@RPEP©Dµ(¦1ii)iQE%QE0 (¢€ Šáb;Gnµ)¨®‰ïŽ(B qþŽ¿J„ÆîŠŠÜç9©‘‚[©=6Ô2m[u’2zÓY”¤Jp[½2œÇ¸°÷¦ÈK]ÆW®)а.¬ïQÞ˜‹B‘™QrÇ–¢¹ÿPõ#$Fû¬ §ÕH¢Ô0ᇠÔÖòy±Þ€ÑÞŒTîÍ,€œ…•fÝWÉL¨Î*WDq†PqëEÀ¥+ļQO“;¯j­¢eÆÐµ#Û$‘„$àP2¤™jc¿Z{E¾Ýl*Ê[*Bb$•5³€d%AéEÄJ¿ºŒ R© ÕkøKá°«Pƒä®î¸ e]Ú‡=*hÉ[æŒ}ݹ¥H·fPG¿liY~\b&F TŽ´)3:—*‡Ò•C›íå)ïDÛ$G)ËÅ0ï&Ù uÍ;{Ak–9$qMXXÇ»®y¢\OkòdíýóG˜A튚[“BU\©¨d‘ZÃh<ôÅ6u1éÊ^)aîBD²84 ´fQƒ†ïP\ÿÇŠÔÖ¨¦Ù@¢À,—£íÉ'ÐT‘H%\©ª0e¦˜ž¹Ç5f΄1-œÑ`'ÉÎA{Ä Çj”0/ÇãQ^œ@Þâ„1,X uµ4ÿ4eIÁ5N$Ð0$684#=˜“q (°‹¡Š0…²}jLÕ3;%ª?V4×y£E•›9íJÃ.ƒóRæ«´à*²ò[ ¨žáâ”+¦OlQ`.‚=isTn'(ÈÅx5"\«LdQ`-u¦ƒÎ*¿ÚÐ9ë€pM=æ@gQE€‘²SÂFYº ‡ÏŒCS>3ß"€ É0%J’©i£ !÷«dÐ÷¿xFsRU[x‚HÎ $Õ¬ñ@ 4IŸJU¹Æ)ÕŠzŽ(EæŠ(4´Q@RÐEPQE€ )i QE (¢€ (¢€ ÑGJ(i;ÑERQ@Q@ñ‚sß ¨¢s×µMLbÒÓE- ’–’€ (¢˜´”TW¼‰µHÁëSQ@ˆŠn‡g¶*š5„&9&­)Ü ò(ŽxÜýÑÁ4È¿yzÎ:õh€Ã 3Bª¨Â€(¸¨nÎ-Û55Gôô”3¨ Æ95 ŽVïž”†N³‚ÀFzJó$lŽ V±xwcžp*[ÅýÚÉýÓE€•dFl3@D2ïµ2-®ÆAŒtTpÇܸè( –ûRUFfòLÁŽAéÚ¾U¤b ê(°E.1U…ÃÕÝ~RqRÉ(AêOAHmïJj8å1RaØÔhíHqN3NíU.²³DG­4º:ÑÚ ™dfPŒic4Œê3HZhÚ í##Ò‘ U@>´áKš‰íÑŸyÎ}i¢Ø „ŽjV‘TeŽ9§ ;Àw–Œž´‹ Ž'—j±ßŠFÉQp±M#–;b» 'ÒšûÍ ŒÄÀý*ô}9§w¢àPœí³U ‚i&]ÖѰä f´0ZM£n=¨¸X¨†&Ø­†$ð«”ņ4mÊ y¡‚)ßa÷Í:Pˆã¥&¡þ¤}jAøÔ;{Š:¯pK3Ðã5%Öâe9©§·ÞІ^•‚Y$S)\/LPf9¾‹ŠKœýªd!RúÕ{yÚFu#•¤K‡pÛW!x'4€-fv™¢ a}*á¬ëšyzÐÏ0sNÌ@¥'½è¤ÖªÝ^yYTå¨Ë"¶ Ó¾•3ÂõÇ5žòܘ£m u&€-šJ'aqäÉÉǦc…&€µ&åà3U,dyBÍ•)fvIð˜' ¶@a‚2)F*¢Þ2:¬ a»Š»G‚-Àì¢hVeÚÝ*AÖ˜ÃçÐÕ!NI B$ zÓ^d±Á=*Z­%±óKÄû ëNŽH™w’ǽMF(¸¬Õã¸tsžõ5â<‘mEÎjTQ‰“O9¢àRE–;,ÆI#Ùc1Y –5·µE;žé¾ÁpV‰åY-©ù¸«äN)¢÷n3EÄSxÌqCŸ¼ =£/t$vP Í‰#R>\òj+Í¢hŒg¿j`;Qjg֧؈‹&>êÓ¥'Q»4õ‰V#$R¸%;­™Ñ0¤õ©ãOôE=FÚp³^Âä§aŠ_,ÃhëœàqEÀ«bŠÑ¶FrjkG8•ð§Šfž®ab˜ä÷©â¶1Ç'Í–z‚Î=ÐÈÙ=ñRZ±–Ù·Fy¦ÁÑ@èS9èEË$6® Þ”–,|¹ @¦ÄæD’C!è)lA)*A4–Ò,Ñʼöã­X³ÉOZ°£©¨<á°‘“hô%¼ë:n†9Ž9NEf” PÒQE EÀQEPEè ´ ((¢–€RÑH’Š\PQÖŠZJ(¢€QEŠ( ¢Š(‚œœÓóL^´ñÖ‹Šu6–€ (¢€ (¥¦IKI@ Q\J"Œžç¥KP]ä…BZ ÷+š‡ícAËžµaGú8û¿Ò ,ÑgE#§J`K4â2 &’+„•°½M=ãW`ÌTvʤ³(ÀÎX£­Èo$•$éH ª¬ ín\¿>õ4a2M0$ôÃ`Œš}€"6©Áç#¡Í>d/(ïOŠh`Ü©€$1Ä£¸¨bII—ïw«>”Ùh˜¤Qp*)2dÝŒóŽ•-ÃhJô8ÅFX­±‡iÞxéV"LBªÃœPi™Mª(<ñNœf✠ ‡*)d‰dPF:bÅa‘ŶvrûqSdv5C³qÜI>´Ëddwçž´˜Ëª­Ø-,@zÕª¯pŽÓF@È b—)rŠCRM#%ÂÐÓ³^'‰Èû\~Ƙ‰$‘„¡F3ŒóDó0¶ÜÓ'Q+œ6ÖZlŒÆÓsgž(kyI„ÏI§-Â3;ûu¨%;m¦hŸÝqÁb‹ËyN6¾=ª@@d ¥/Íäú–ëµùãÁ#&•€¸1MfÚ1P0y’$cŒÔçÊW,KÔX.^§¦iî@}E©»  l¬Ê„©äSm¦iaÜÝj##[Y$”·™Ça@ ´`’ùCÓæ§ÊžYzUmÕÚð®yÏ&§¸¬„¦3Š…ÓÍ•#ëšÑJ͹ÜÜIÞ¯y†8QØö憵#rÈÂ@OîwR ÚPïV ŠÏ¸ÇÛ£ÀëR_gÍ…Tàž)ØE¢Çv)ÙïYófˆÔ1篽Ykˆ”ífÁ¥a–ª÷϶ÜààÓ„ñ¹ù†ïkí^¸äûS@MhXÛ‚Ç&¦Èè*¥‹nFçŒñVzLÍ-0r3N‚}($%M®v±FwäzÔ åsHIÇãJ½9¤Ïg9¨îC4 d‘RžÔ”VÅ$*îõ¦bœ(`-4æHx Ž>´»A* ©zŠkÑ‘´7µEk <9ÅMœ "€šQÒ˜Ù§/JZJZ(Q@ ¢Š(¢Š(¢Š(¢ƒE†”Š)QÒŠJ(¢–€ (¢€–ŠJ(¢Š( Ñ@ã¥8u¦Ž”áLc…-%- (¢€ )i)€´QEZõ±\MY¤#=@4€µ¯Ëס˜æÙ’jî)¾Zg;FiÜDs?—ÁöZññN–%•6Ÿ­9T":‚2¤zŠ){R„‡‹¹=*ܯåÇÂäö¨"ŽØàt©'‘•‘GsɦÅ)g(Ë‚jpž2H'uÍCnA»s»qÇZH•ZâbF@=è°·)\ä`÷¦ÅFΆ«@3o.zsŠFŽÈy&‹r–©«•6’wuÍâQ+¨PvÑ`¹rƒL‰÷ƬF3OëHíQÉ:Æê„{ÓÝÖ5ËUYÝeš¾´Ð‰"œ:S5r¹êÿ¥ @¤8Q’qHÙ)”ëŽ(ÔÆEc’ ‘Isó¤ 41¿$Pñ+ų ©JJ…m”FS9Ï­Gögl+8*§Š´ Í;…гÃ!ed h¹Yã`¹ VÏj  ̦HˆÇj®&!ìËŽ1нÜP@ô¢à4#æL Šž€zô¤Up,ÿà4°ôAô5!´Œç¨¥†ßËR»‰ÖÀ¯¯ØÜ‘×5-ˆÿFôŸep¬‚O”ö©-¢h¢ØH4ÄH¼’*}ó®H^õt)MU…d[‡‘€i!‰¦xƒ•@jkip޳°õ¨ b’H]Xn>”ÛU-æ¨ÈÏ­1M:4€µKÍ%¶W‡cPÀë»Fç 3ÅIfŒ°1Õ`M<òqTåP·±mã=qRKr‘ˆ"‹äòü±“Œâª@$…Ã0;\þU9—Í€˜ºûÔM#CåüÙÏQ@ £#Ö ’c•Eµ@ÓJ³ÆãÚ•€¾qÞÀª¯;.#Q™éKåØÆÃ (°iI¦½Š\œô¤4¨œ3õ¤yPE¿ªûUMH‹ŸZ”|¶˜øj¬ÐJ’&S¥=Ž9ªšy '’jÌ€È=é=ÀUe•N¸HtQPÚÆ"ˆ€zšuÒ+ÀņHŠ‘][î~”µOOâõ«£‘@ãژɟy§1B–€‘$@ì\SÁâ‚j•S–=ñ@PÛ‚Œžôî)hÝW!zÕ¢q@ÉÔî€ïql8^¦­5´RrÈ3SQJàWK8Ð’ƒ^[SNÂBOzР€FâÀÎÓ£$o'v§›Á¹ç­\UUáFG%¬r¸vê(¸ÅaO­;¥€`fZNv{Ôƒ¥Õ¨ÍfŸÚH# M䊓­&)€ÓÀáF@#t¥Å-7µ•§( J;Ó±@ï@ jU9¤#4 `PÑEQERÒRÐE¢€ JZ ¢Š({R (QGZ)”´t¤ ¤¢Š ¥PE u Š;Ñ@ëNÕ§ cKH)i´”´PIKE0 (¢€ JZ((Í- B;Q@ ZJ(R2«˜f”w¨¢›Ìv\`ŠrBˆû”`Ó»&òŽrÞµ5À®¼p:õcéM19´UÇ̧8«]éqEÀ‚)ƒŸ»ŒuȨ혙O\Õ°=…5cU9 úQpI<qž• ÁÕ^ê5t¶xÅN „ÐPkŒµÔJ~ï\Q0lˆô<Ô²Ä]•Ô€ËëP´rý¡dàâš³ô¨°h.ò\2+U»ÐÁÍâ¶Þzˆ.]Ÿ£sšdí!´;¸9Ç50fŠÛv2Tt¨îœ½¸8À-K4‹öCƒí@‰€„HÜdt¡&ÜÛYJ“Ó=ê´™ò­ý2*[£‰aãœÒ°ÉŒ¨k6 *ÈŽ~V«J¡¯Ð˜Í$cmûÒ‹sŠ橲æô¨b2y§@Ånd@NÜgš, rqéI m„)ù±ÅUv™wÈN<Z–IØ[ù‹ŒÑ`$„8Œ ÍOªípËÈW¯4‹y¹—ä8jVÆN}©EB÷!XŒG\v©QĈzwj(¤ àƒ@94¹Å"‘Îir('"ƒÚŒ.8¤=(ixÏSWîЇ'­ 1ÉPM:F£qÇ8úŽxVdÃ~tK½ÜaENèJ‘Á¦Å˜_Ξh°´Ú@ó AÑie·/2Ȭ;b¬ɧp*yMÂÈXU¦Eo¼¥èiM+ZíAˆÆ9ç f2ªÄ/SZcŽ”î+\I†ž´ˆí™ÁcÆ)..¢'îS\¾CÈq@†8"øî8Èâ¬@‘,ŒÊInõ,¤£æúÑ)ÂÆ‹€ˆù”®A©5Z;FIÌ›ø5c½&2ޤNv«'ןîÔwI1P€*MŽÖ¥JüøÆ)ˆ‚Ö46¤ž´©!’Ͳy\ŒÒÄ“CC}9éIä´Vl¸%˜ö ‚fKç’=iYÙf;ˆÍ6Œ–-ozS?ú)kn ƒ‘LXô|ûÕ~SU,XyF<üõ>Þui.wsId–”pµ^{…ƒ ÝêXðÈ<Cy“9=CtÍjóŒb²çÏÚÞšû–d`8㊧hê»ÒAÉ=ûÕ¹b³ã€*´vÿj‹y8nØ C­U€”à…íLXÆÀHËç4¶Ò:¬‘¿%iÞ`‘•>é=Å0bì'ur–åg–Såœ(÷§ZH«#BGÌ;úÔò°HÙºRê[q9—k¾BZЩ٠ÆÒ¬jßðÐÆ‡Š)¨~Z Å !Hn¶lù=jÅS†ã|Ì›~oZt—J’˜È9g½-UK•w 3žàЉ IR”¢‹H,«rd)‘ŠXUÄò;)Š·ÔÑEÂÆs6è{äýÚ–R¿bòjÞÑÉÀæÅ Qp±Zb>ÆœãR[¨òPã ©Þ6@¤p)È‹€½¨¸ŠPv“ ‚NjÕ´~Tewn¦½¶X²6ÂzÔ±Æ"M£¥ ë2ÅÁêpj #Gå7u榼ÿS׿OZcBÑõàP€eÊ4p†r)Ñ,û‘²J‘Eèc€ ÉÏ`ö|Ž8§Ð åæUy7aTôÇZ–Y[‰sŒœÕVÁµ$–.{TÒ°]zŠT¹q˜Tmï@º ‡ØvžôÉ4õõ4ÙÀ¨>”X ²Ü,J³ƒéMq60O>Õ ØÅšp)·JÒ0¥+eg˜(ašs0^§Jã äªðA©æHÚE.Ü÷}h°ÉüÔVó+Èê:ŠŠÐäȿ”Y™Î~é¢Â,¼E®Ãࢧ?¥RÜâ÷fx§=ü¦8¿„rMhJwj©Ã4,Håic¹m˽p¥+Ç]Mäí%CqS ]¡”‘U5ÂöªÔ|"úb›ø£ši$j@'nhŠi‘AÁaŸJUqÞ€qKü饰j$ÒvrùSÚ€&$ Pi…”¸äv¦Mæ‡_/{Ðí&p?*_­è¨ä(Úš°F®\ 1ïO¢‹^ò%tn[ 5,)åĪ{ ’’‹€§¥QžÖg˜H8«ŒH†»“kŒäsPG °‚±W9æ¬PÇ4VØ.\üÏéQÌrh‹2ô"®ŽE\ VÖïç4² g £PSå¨PNO5vïNàW´–ÙAàÓ.ækp¸èj×~”’F²}õ•ÀXˆ1«â”÷¡@`PFA¡  ëb>Ù&z┨:‰ã «1YǛԜҵª4¾fHojwYùÔ†=)æYÌ»Z3·<‘lÂÍæy„š²h`P‘¾Ñsäíê,5Àç*jÜ–ì'ó¢ 7p{ÓL4ŠÒàì)Ü ÷a‡½;#}W¼Þ±sžÕ%©f„3Œ5HÉ[¥”¥8ÅãÚ€xZ9,)ŠBàr)Í( ›N£€Oá t¥Å☠äÓ ƒŒPÖ§/JkŠpêozp¤¤ŠZ@ih¢ŒÒ`(¢EQK@ E-%ÑÒŠ EPEPF(¢€ÒŠ( ¢–’€ŠZ(=iš)Â˜Ç ZAKH–’ŠZ(¢˜Q@! 63Í-TMÿmùÎxíE€°Ò(‘Põ4ªêùçÉó«‚2z-ã)½Ø‚[Ò…rzLUUg0´ÛϪÊ6ô ëHÅRÔo2¡ÁÉ>Ô¥NÒÆj·eG]ß{½L޲r§4îôÀ¬ÑJLgƒ´ô«C¥'z\R¥ãeÐz5äÈSvÐ_Z´Ê­Ô i‰å”NàAi)Ͻ2Ýq)#“š²!@.Fzâ˜-À‘X€Ôî"ȵH KŒýî´éc0ÀìóùÓw˜¤]ÑOCš}ÖTÇ´œç®î³  HnÔ\d¼m´ài¥³v½qŠ|“1“Ë@29§ÛÊ$OqÁªáº3ŒŽ X·TU>_z;„BÇ5RØ$¨ÊÇ’Ù«Oþ­¾† ²ÊÏ|Ò[ –¢¼0)[f©[Ʋ4…¹ñSHªò ¸ÚJ,,/J*­³…¹?)àÓa’iˆaòúÑ`¹nŒúT1ÌíÆ)‹9]¥“ ÝiX T …§ Û@'éR,ŠSj,E2ÊX~Z“´ÙfX@ÝÜÑp5·›¦ìm¨æ¶’EEÞ0¾µiNG)sEÀ¥-´®êÀŽ)Í‚ãÌ0#jÑíA§p±RÚ)#w™jLrºm?1늺:RŠ.3Õ¿ÏáKòîd pOz½µwt¦¼))Ë/4\,V’ábCµG\TS3™"ÜG=…^0FcØWŠŒÚEÇ#¡¢â ¿1ýjÚœuéŠeŰ˜©,A³Â^°}hEà ٦]Hc·fe˜"Ö¥–1,Ez:Œ¤-ûÂsš[²ñÃ͇ïŠUóbˆÄ#;‡F¥»ŠC g˜qLC£ŽMÊÅÉsšlJÒHŒùÚjÊÝ©ç§J§fC\H}iEæÖä*yn.´³×ñàúSÄÒˆä ÕaL7X‘P©Ó?Ú#>”Kÿ!¾”¬p±Ê# äÓŒê$ØN½AqÍôY\oc‹eæXãËg¥N² ©çÒ©ÌK^*``I2 ’ü>”X R-)*äÔw“éTï…݃Ï$;šO(H÷·JEq,a‡CU%ÜÚp/GoZšÕJ[ž=)XE¡À¦îµÉ'r6 VŠY¦ˆôãŠ,2óÈvž}jµŒ¯!pçvÓŠu¤¡ã#ø”óUí$+$ÛW?5;¥ïPÇ9yY6zX§¡u:ŠH.rÁAuȤ%Èk†‹n1Þ§¬øx¾”Ôé0ïlc ¡ ,ÑQ¤‚@Jœ@™:  E!ö¦ÇZ]ã#&€Ò“8ë@nqÞšÃ&€v 8tªLép˜sµ»Uõà PE!¨nžd å úÔ å=hG£ÞšzPrhÔ´ÃÁ§f€ (¤ Í-Fs×(Â*AñŠ“½S·f‹ÍB~èâ…ÝåÆãqry4X „d¯ešEÉ`=iÞcI)T8Ú9¦Z’d”žNhTwg`Wt4‘Mæn9Zt‰7 }ÓŠŠÐpçÕ%ŽU“ uEIU¬ùiO«UœŒHdW™ÔÔN’O"åJ…õ«.ʃ,p)}=)Üõ ÁÀÈ¥¥¤oI€ã4äPmQNP%BèUN ¨à£R¥³éSÐ 0+ÛBñ Ðô¦4l³»l,â®R Ñp±RÝZ8ÝHïM¶p°Iž=ªõ4€x"‹Dl8õÍYŒ¡…KcªG ŽªÖ¨¥Ù%Oá@…ó /µG4¶ÜÚœûÓÚÝIlê)R‘4jÝz{P{u?em½I¤· ÉÊíe*ÛÉ%CóœŠTŠC0wP0?:`@–I`8«e¼¼8#žõY-åm©¹XñŠžVdˆ¾9ÇJ“©£5^Úf•áÈ©ñîjFQ¸$Ý&}ªÍß6ÍUeÿÔµY¼8·Ç½P…Žm‘)e!zf¤–h×ðsÒ¡›þ<°¨®9·„ž¹¥`/UMÌp*¥ë‰ @zÓ¥æâÏN´ÛÕX½Ít` Rõ4ÌóÅ;îjŸÙçûP—+×ô¦€š{1ÕÃme¦5«´Ë'™ÈëV±AéÍŹwG€ëKr Èܞ¥Ï~Ô£­!t¤‡Š¥{pÑ4e¹ã{ R’3NàTºW6xÇÍéO´;íÀÁãš±õ àtQp*þå½…Q²uÈãœÕùÎ!síTlZ&Üç½ a1Ö æWìO¶ýéÿhÕ´Pn0)‚Ö5nW=ph¸ìÉÊG÷&̲±²ÆŒªOÍM‚ÓÉbÊçP1ów1–ƒuÔ›ºŽ•4V¯¥Ãƒž¼R<.“™!Á'¨4Ø˼‘óŠ€’•O'!ªÜ6Îäüì*&ŠwÊdž€3¸Hòvž´æÿG»@¹ÚÔûˆx¤A½iZââ3´…^æ€pΗŠ¾õI,¯ ȬrÔW-ìG§\þúXÕ99 ÿ‰"#Ö§”tÆ7t¨/¸š.~Ó845ÍɉÕväô­:Æ£wSÐ ‚øæxG½6EÿNŒ˜â‹/Û<S“R5ÂFFì€zUkµê iÚ‚ó¹¢ÀXšUV^zÔû€“Ågß}臽:ýÈXãÅÖ‹u][£ô¥@«¬±¨þ*½ÐfÄà’⨢í…ZX™®&vÉÚ)-”‹Ùr@ëNÂ/ž” bªç1F@ÇRim&i$eldzR°Ë-N^”Ö§Ž”€QIŽiGJ(¥¤¥¦E´€RâŠ(¢ŠJZLÒÒR¢ŽÔPE¨Q@PA¢ƒÖ€ (¢€ JZ 6Š DRÒ ZcS©¢HŠ( ¢Š)€QER}iö)lgÚ£‚O9K^””QUžC²rzqŠrJÉo¾N´ìåFsšJ‡Íe*\­Ò§€;T9"ÎÂ'<ÔôP+ !˳ÓaiV=:“SóJiÜ,Vˆˆ§—yÀ<Š-H>cZœªž ­4Bƒ8\gÒ‹ˆŠ×¤‡?ÄM-Ÿú§?ízB#VU$f’(Z(ÙU³Þ€"¶ù`•»äЋ_7??\Óâ‰Ö6GÁ½1„ž@‡aÏLö¦]ðÆAêjÜjU'¥U¹]‹þëR½Ê¤Jø8=)0' œOAMG‡CN4†B·Q6yÆ=ªA"`ãš©n«²f#¹  ,ÄsÖ€»ŒÑUÙwA/·¡<õ¢+;F*:Q`,šJ®%”ܼkŒ™§A+H̬å8¢ÀOF*g2‡ùq¶Ë*z@9”0*à Ô`ÅmŒdõ¥Yж?Z†÷ïD;n¦¡üéMw¤K*žX­?¯5RýWÈ-»8ÍX„b5úQ`(àŽzRâ“hUxPÒŠP(ÅBÖ±3†#ž´é¡YÏ%h¸u œÔ“Û4»pÀÐTêU¾éÍ+²¢åˆÞÀŠXKl`Fõ¨f‚wts†#ÐÕµ`à äS‰¢àU˜ÊQ†î)Ð’Ûq&¬v¥À•ÂÅ'‘å1²ãÒ­ãS,Nd'¶MC˜ÏN•MOüL‰íW½ª´E—ÌÉÍ4.ÝÑ LŠG¶G·Þ>þ3š´È®¥OCPý™‚ìóHOJ."+yXÛzƒšŒ¿¸ô)Í\òWËòÇt¨šÞM…WhÝÔÐfo6͘Œb›lŽðpÀLu«+jî*(-ã))Ú÷­0c(udÚµZ5JÂ& Ò@=)étZèÅ·¥&†XúTsÈ"@ÝóRã޵Nÿî =s‘BV»hÈóc½,—A" TŒÔMÌcÜUäóF ÙÇÖ‹‘.”²¯$šYn#^3“íMH—ÊF – Ö µÁXrMâH aÈ¥#+j”âxûgŠHœ 6²ž­ š%±QÜ.øJäŒÓÏAUï² Ü‚ $2XTEçµ"²öª’n6·|ØÍBc“~1Ú„h”²h#欦X·žÍ††Gsqä e›¥5®-žj¸¨õó¶PpWõªòNnJ!ãªÂ4%‰g@ 8ëÅE¢Äà«zTê6JýEHÇb–˜r9§Å/Ö’Š Ž?ilqJ 0dÒš7f“'v(isÚŒŠLó@×.ýyàV’ãT m >æ\š™pj4¼ ãÖ£6ñ °dzTÙ¢€ –Ö9_{g"–H@¹ê½ MÚ’€3®A±‚sŒU¹áóÐ à©È5VâÞãx\€x­ÉA¸`÷ØŠRÛM)Fg©§ÝÀÒ*ºòëVI9§”\eHežG¦êMZ##´¸ ð)FßýIÔòxâ™o/úk³Œnâ´N”ß-3£?Jwœ`CzûøÐÔðŒå¯N¦¥tIA¥@„;h4£“<Ó‡4 (Å´”¢’@ Ö–’Š ¨¥ ŒQE”´bjJ)h(¥¢€ JZ((¢Š(¢Š(¢ŠCEŠ :RÒ Z(§SE--Q@ ES¢Š(áûT_ê~­SKŸ-°2qQZ+,;X`Óè *åä*ÃǽG#y¶¹Ç óŠ™K“œQxìò$ô4Ä%Ó©Ž=§œŠ¶¿tU)€>Rí‰É¯tzRc@Ü)õª2ŠÜ1s¸š½Uo¿Õ§Ö„ÆÒ P3d0ÍX'‹ žÂ 3’7€6Š’YJs“Rö¨Lª%TþõHd@pX@£µŽäS]<Ä+Ó4€pæ—Þ™~Z…ÎqN  ‚)“ 1cfïARPM65Ù”î«èM—¥V[wDuW7­ Ÿe gëVr(íNáb¤‘¶è™”°Q‚†[–,¤Uº1Ò‹…а6n¥,1E™Ì’žûªÑÒ*©ù@\,W¶!c˜ž9¨£È±r:欵º'žzŒÑº¤e9 Ó¸ˆ–ö¨c¾h»È–ïOHþAÚ’æ)d•@!}éhU{ÉY*œ8©×$r0j ¸‹ª²ŽTæÈo"òà\A<æ§–o&ÇÞ P\ÊdTç4·$2E ÉU<ÕzÌṈ̃» Üv«uUL 2\·¨íVi1¢ ®–2šQu<†^üІ÷æ4é”5ô`ާaÇ:JHSÈìiÒ}Â2EUé©qÇËH¬^ñÃ.å^ô¥`,[D°Ç€sž¦–ãi³ƒÅVGx`”° òæ•¡ÿC/“¸Œžh°°¶ëšµŠ«ùV!ÏaÅE縈Kæd“÷h°Å-V–çc" Ë¿jX§s3Dànµ+ XÚSpÁ— Ú¦¨`œÊî¥pV]!vNr¾Ô>(¨â™%ÎÓÈê)ZdC‚ÜÐÅ!¥r)zÐC+iER³ézjÌîc˜uí@ÐUIÉš†Õ]ba$žy©è0éMØ»÷½iÔ *ø;cåÏ&Ÿ=ËÅ:¡PCt©ÝC®dP ÄTHÊu5b[qôXFˆ£85\"(ÞØ&’)ã‘°¯“Hd7syj@'qý*krÆÕK’;ÕmGîäƬÁÿ©ô§ÐfcòÈ#\ãëOK‡IÄrÀôaQ›2ÌN2§Þ¢‘w]¢';qŸjjýhéÕ# (¢€KEbŠ(¦Ò–“½/J@!ëKIÖ–€ ZJ)€´QEQE ZJ 0’Š)QGj(¢ƒE( ¥¢ŠJ)qI@%-€Š(#4PQIKLbÑE€Z))h¢Š)€´QE”ÉåÇ»¿¥86T1ãŠ:’£[Ÿ­K%(¤ãµ( ¤&—½!  ×à˜Õ½ XB6aHè$B­Ò¡ò¦)³xÚ=©€L|Éã‹'i8¥ˆì¢íŒŠWŒ‰#u 0i7œó8ÀPi<ÄIŽvœT’ÎÑìÀw\Ó,Ø'©9§Ý®èIî¼ÑÔDžió‚l?^Ô,ˆò•þ!׊m±.¥Û«S!9¼”ý(°‰³†S‡=*”1«ÜÌ[¢ž”û2q(=8¢Ã-QŠ©M¼¸õ8§Ç#-žö94¬ŒfŒT0¼ŒÀ6Ær*Å'z…‚ ’÷ ïKMVVåH4¹ õ¢‚3J(¸¤ Á÷§QÞ€ªÝ})(~ÑšxÒÐ/nKr±§¢*(USé:PŽ*9àóSÐŽEKGZ¥434[p8ì;ÒËÉl¿.{UÑïFr)Ü,TYÙŠªÆsÐäU°(À¥¤Iåu}ÓQZ_­^tWÆáœPˆ¨0ª;ˆª0oÎ{/•$$5û‘ØU‰ Iã}E$VɦE'š.7H¥iS÷‡¥ ÈÖÅ€ÀÛÒžÐÊ „qµºƒNkqö-zâ€"¶OôQŒr3I§õ“ëO†9㉔ÀÀ–QÉ}ëŒóL@e–Yy :ÞFbèÇ%M6ÛtRI½œÑgËÊOù E,pñ“(óä*¸ÊõÍ2Õ·]ÈÞ½)! ²Ê¯÷‰â€,Ç>ës&9©‚ïtE´‚ÑötÇçM‹M'ØÒb)7Äw©¥Tµ;l××5cx*0A>Ô˜ÎEqp @z“Ú¥'+Tõ<…'®h@[Ž@чìiÊÁºT Ù‘þÍV·Y$¶]­›­CpÎ)r Sxäi9|(4–ó·|žTõ§`,ã1°ÏåUôöbÒb@=ê8ÚWˆÉ»< vœ W>ô½Ö€»{ÓPõ¡ÌyéHcÅ/¥@ò`NÐ :¸àó@b—Ut¸RØÜ3Þ¥YUøF€E!Pà 2(czdPŒ{ 3­â¨a¨• vÑ`44w¡*)}¨1ù”ô¥TTáT/ÒGÖ€ª·ÞýE"€£€ö§Q@¼k(à ÒGo6pI§5(¤àPW0ùñlÎ)`‹Êˆ'\T¼LqEÀZ¥öyMà”@5qrG"”Ð;¸$’Tu…¦\Å,®„F0¼ÕîÔ)î!¾Z:ê”Ô·‰r¦ Iõ¥•ÆPÔ1¨5bØn·OaSc=FhEÀ£sv#ýÚúš….FHv=k@ÛDI%¦ýŽwÅ;¡’E‰Avž¬wj½Ý¹¸UÁÁ$ùQ*’:Ò(éšÍH¥¤½©€QIFhÔ” Z@QG´” Z`¥ÕéO ¢Š(£­´ JZJ)i(¤IKEv¢ŠAKE Š^Ô” JZJ Q@)i)iŒ)i)iRÒRÐKIK@QÚ˜oW;ri÷M¶Øã¯JmÙâ\ó»š[±þǨ¦"3ñ ¡jI¾i’ ÇM6\F°;ŠA“¨uíLC£>]ÃD:‘Vj›ó¨aW&46YV$ÜÔÁ&×aà‚x§iì8ïž\(¹ÉQŸ¥$pF¹Ph¸ã¸T£¼MY_¼xëL{XÌÞi57j@Uº\ÄW8br*YÊVEÃãó«SÁæ… á”ñMHMæHÀ¶01LEX’:T¶Ø7Òíàb”ÛÊ—HðCzö§[ÛÉï#ãæ¦Y<ÃzÈ®y«¶±>oÛéZ,2¼ž+:,óŽ„c4 &iÛÌXc Ôš}µÁyš'#¸¨6¬7ß¼û¬:Õ¨Da1ãwÖ†2nõBòYéUsØw«¯»µJ|ý¾<ö &y®çÊûS£œH6ôoCU¯Ii£³S%»’FaÇj,!EÐl'š‘Ø0ù[¥U¾dY‚*hö˜Aîë@ ÞùŒgZ³¿ƒ“ŒVmª#\Éìx§±-zcl•…ò8lãµ)=꥞ÿ:@ÙÛ5lw¥a‹Vš‡ŒÕI&u¹§† :9]#‘¥/J,ƒó7 ûµDM(ŒÊ@ÙÖ¬5ÀKa(‹?JAPµÊ¬ )…2ù™ùH  ¨^FMVQ°#vj|‡Vç¥IüTüUq:pƬŽh1M< y¨äàRIrN)Qƒ.AÍAuÍ«qÚ“O]¶ “Ö˜9¥ÓKbœƒ½àâQ¿Þ©â©{R (¢@ÆŒ¥·äñíRÒRÓ(¥¤ ¤´”€(¢–€Š)h(£PRŠ( Š-%PE%-¤4)(  4´”´ )h¢€ (¢˜ KIK@-% íƒ4\,9x@*¦¡‰é»šº:ÓdeBøP˜È ÌldàcªPPzcšš;mŒ 98è)Ü›Ÿ7¶(j ŽE[ƪÂÞAuædb­v¡Üÿ¨nH8íTâóž ÊÇ ÕË£¶…-ŸJŠÃýYB¤cÔQÐBM3™R ÛN2Æ–ÚSæº3gozdëåÝùŒ>F"ݜƸr@¦g'˜äÏ\Ô‰q¾6m¸ÀëUã.ö†1Œv&¥cö{Aœ7j@:; @ îè}jC*Ä™cœU;¢vÂ0ô%÷üz¨¢ÀXŠDb@`M+ΊJ’3ÜS"P d/Z¯g‡;Œœ÷¢Ã R ä¬:v«Ùæ¨ØãΔûÕ²Ø0%¢‘z )¥Ì†ôÄHÛK|Ï##‘“ŒT)ΤÔûóÿjŸQSîŒõÅEq#ÆÉ±wdÔO;D~0};Sæ¹òÙ®ww¥aÜ™‰+éPËra(6ä7z|Ó,j òÍÐU;™7´Cpy€ÒëHN)&œqŠ@©3Î)ÞÔ”„óZwlTRHcQZ\ÞLýÐx¢ÀYéKÞ«]Nñ²"pÎzÓimÝLŒOX ©¸\ô¨çŸb®Á¹› ª¢äÇ(2¥yãIA¤H£„P)YÕ#ßÔ{UsxåМž” µŽjíVf I ;Š•:îSiÔڣĜ¯CÞˆà(rÎXÆjqHÄOX@îîd!²0)-­ä…¶’ ¸¸# äREÀ MÃ_•Ztð¼wdRÀŒ*èÍ\ öÆF.Ì»W°©ÂÒõ£µgKÆ¢œ šö"Öí·ò«eG\ 1EÀ ]³ÈÈÉ(ea¦`ŽqVþÍýÛE=Ð2#ƒNàR”¦¥5ÁþÎ\1S}… .ØíÏJK•X,œ° ."“̶Œ ;¸§]§‘m…ãqæ–C,6jë'aÚ¦Ùö«E ÔŠ¨a‘ br9Íi aî늪©tŠ"mnÍ\{R`ªßÈÑ õ'k®pjµô-4`É8¡ ‚d"ÐÇ8æ¤ü½<1ô¦Ë/™fSkn)c_7M(ÈÄ'›"Û ‰Ú¬ÛÈdŒ7­VŠHEª‰+Õjäxò×hÀ#¥&1®NEJ: F\ÒH¤–Š(¢Š(¢–˜ Kš)(h¤¢€ 3E€ZJ( ¤¢Š(¢Š)h¢€ JZJ3IKA ¢Š(P(´QE-QL–’–€ (¢€*I¸ÝÆ ï‘R]9HÀ4Æ9¿Aè(»É´ÉÄÇ:"ƒÏSV&”Ec×Ò¡.c¸@NàÔ^í1s×µOoIî3O¨âÀ‰Gµ>ÅíEW½$B œsL,ð˜þbÁºæ‚åº(ëE ¢–ÜTgÖ£’ç}ªcïI@Ël¯@HžQ„çjJ¢àUÈî…Ô ½óÖ$î— ü‡ŒÕƒLtÞêOE春 )Vë>|DýÜÓ®Hó¡óS:+®dT-h R‚:SÙ‰{Ä ÙiÐÂë+±#°§K %Y½Í,129.Ù'Ò€%ŠMÙÍ(i ö¤2­‘ù¥>ô­<«—?pTvŒBÊW­G+î€|±=*¬#ENà ;½G Ìc!©$Šœ·P'ŒŒ†¦\ Å&GUxP3Ç4ìÝÀòiAªbÖC'štQ¸T“æ‹»Æ)jœM$¡È|x©4`FàqÍËdfŠ«òÊ…¶Ž*Uœ4&L:ŠAraQÉ0IprÕ]£…8#'ÿ9M‡ïv  7 ؤYÉ ÙÇZŠVÆyÁÅ6ÖY² w"€³¸QP[L%^:æ‹’Æ-¨IÇ€±ô ŠŽ)Rrj@(që@¤<‚{¯"ER¤çÒ€'*`€i®¡¶85Ú@eY¡=3Sõæ€(Ʊý…‰?1Í>Î1-¦ÙÆr*sml•ëRŽS¸ˆÍr[=ŽzQ=¯ r6þµ`“@®1‰ØÂžxÅV[ya,#«õsµ¥…´RÅ+excÖ’äʳ(PvÕñȤ۞´î¯AJi1ŠZ@eÆãû@·bi÷Çæ@OFéWŒI»;F~”¯oË 'ÜS¸Š7eZÜrÄŒSn¸{uî]X" »bæ’[XåpíG¥¼ßñû?ݤ¼Áx}sW$dA^„Uyl·°a!È  ó·<Ó†j"/nT›Ö–Ö&H6¹æ‹#6Þ¤íYð‰Rûkœæ´JV^áU†O8ªúW"O­X¸P#f'U},œgš}I¤6tª›˜Ê¢ç U«Ä+q¸ÊŽ´Ûâ’¢ì ±ÏëÍ;íJË»kuÅL\ ž*’äHÑz¶jk“󯉿•€²XpsKÁª­ˆ®P/F)#,n%Ž¢Ã¹n‚=*µ´®ÈÛŽH¡nŸs†Q•íž´X =è>ôÕl¨$`šQÍ ŠcHª~cJ®¤ðÀƒï@<ZN)x ¥íA£µ U!@&šaŒ©4üqGj.U 1J)hÐýßj¯olqƒSÜ2'Då½)¶{Ö=Ž„bŸAÍ­°Ozš%o!TŒJžŒQp)À|èùääQ ·rxÝ“Š¶W>•ÉÄ-ô¢ábÕ¹õ¦B³˜úçë(ÑíÆážjÓÄ­—Ñ}¨l ÖaL YAç#Ú†ÁÔF;-O Ú2EF-˜\y»ó튄1kæãp¥=×ÎÞ¸R2=áuŸÍˆHäpIdGó0 @Ù*¤%ÏzE˜ºI!r0~QKm»|¶\4CþŽŒ’¦y㎴À±i!–ÍÔTàÕxÜ­±}›{Ie9œ6á‚*@°j†¦0ñš¾zñT5CÌ~¢šë§YR4^=jÙe† \à2j­ÞÓf¸Å5Ü8o“@‹kqp¡Á'¥;ÍMå7|Þ•#C°åFj4Ãj,Ge¥a––@Ì@<ŠU™ À=*œgn¡'¦).¡Ù‰—בNÂ/îà8éU­dÉœ–çéS‚ ˜ïHcÇv¦¯RM(ûÆ€ŠbIö§ž•¨ì¬ñ@G"HHS’:Ó•æl £¦d=óK¨îW‰º <Ó¶¢-¤Ñ±À`M?éT.d,F[=ªém‘‚z╆"Ï“ËÝóúT‡³ `×#sOÔdeEUàE„ZßúfŸŠ£2G¨(0à Y·—Ì·WcÍ; z‹!“1©:Ò ÒCpFG½ .v¨ØT7&]ƒÉ#9æ¦;w\s@ €F)«BøSñG€Ê®¸a‘Q HKW8é“Sb¢•ü¶“Š‘ãWB„qUšÌ‘°ÊÅ=*ÌR¬©¹OãÞ‹ˆŽ8–(ö ÀªÐZIÉ‘ŸçWx#ƒšJ.Š«¨ 0‘¦ìõÅZ¥ e7I †Ð¿61Š‹,, e61Ò´ Zw¤+%š¬‹ÜÓ¾Ã`Ë‘z·Iži\¶<¦Ï¥RÒðDŸZ¸è$]§8ö¦Al1(O=A£ ˆ/ûTA¸Œõ¤¿‰,‰€ÀŒc½]xÖEà ÔbÖ0yÉö&À|g÷JÌqÇ4ªêã*Àj&̈ 8ÍCglÖáƒ09¤Œf“`Í>@Æì£oê(NzÓÍ¢€šÃ4ê1@ l` ùqNÀô¥>´Ìü¢œ½(ÀÍ.8 7QO)¥A=iÝE´”RŠ(¢Š))i(h¢Š(¢Š@QEQEQE”´”QKŠJ(¢ŠJ(ÍB–’–˜Å¢ŠZ(¢Š@´QLŠ( –ŠJ-%PRö¢Š))Ԕݠõ?J5^šwjjȬÅAù‡Zg’<ÿ3Ú›q9V^«Ú§£¥;]ä”Hë·hÀ9ŠywÏJ»H0zŠ.*Z7Èǧ͚l­ûÑ(_“8'Ö®˜×``Ôml›1EÄ8²íÝœ U!†AȦ<*`)“´Sm¬>¼P1.°b|ŽÕX [d`0Äõ«w;ÄU1“PK¢(ãÙ§µ4!\4M Äž¹54¢Vq°í\u¨&,φ)ÎH·’8´,–ˆ“ÉĺfBÁ:u¦ZãÈ|ûÑÍúd“E€°³†‡Ìã‹p†1'8¨aÿøÐ¸]<ý +l8+»#‹"7B T•ˆ³G|PüØð˜­ Šÿñþ=6ÕÕûµGþ_þ‹WîŠÐî*¥ád–2¬y=)÷2²ºFŸy»Ô‡Â皥6D¥HàÔ2Ü™Az•îdAô¤ …aÈRp{—½79>”‚TÉ]Ã"€@¤V¡—#sJ(ïÅ5dFb¡#­:—‡‘J:PŽ1H¨«œ>”âØö¨n$hÕJ)lœq@TrÃØÞ¹Å;¨÷¥Øá$dŽÄÒÏn%Œ ;@©©G#4\ £M¬Ûª9-œL%‰€=óV{Ðh¸#¶uº21Í$©,²mdýØéƒÖ®t¢‹ˆ£f’ÆåH^Æ–âIc¹]£å>Õv”€zŠw½Ó´K½F}¨¶›ÎŒ±9©$¡Ú2}é¶ÑyQm=IÉ cùÇ5‚BxMMšl±‰#*Iô¤-0ñ&i÷r• a»Ô¶ö¢ÅXœö4³Û‰ŠºðëÐÓê"ŒÐµ› #$¯zµ<éå( îa‘K$ÌÈT/·z³å®Ð6ƒŽ:PK¸YcäN=jÕØIcVc´A¥šÐµÊº€v©®aóaÚ;t¦)·µ²ä©P:Žõ-§ƒ>´ÖÌBo©5ia AÎ ‚2=iW;T´’Y%euàw«˜ÁÍHÊ7r<2ƒÚ¬Ïpa…dÛœÕMDŒ…Ï9Í>ñ±\ò)ˆ”Þâ5v‚žõ(1wª·l§OLœ 6LñFаw¢À[ûÀ¾µWQ´cî÷4ˆ—Šà±Í.¢ßºÅ p§¶Ëîj)î13ïRʧT¶Yû"zškXåù› ãµR󼙣t#õ\Öäf³^1-ÀÛÄQ÷­Ðc¥ w¥¦œæ—šC稪ý–R†<œãŠ·4¾Tlǰ¬»r¦fž@O=1Mº÷­d, ÷«JC.ETLÞ©bp™àT²Ü,%S˜ôÆÝÎÖà0PV¦Š@ЉŒÕ é ¦8ðAÝÈ«†X¢PÓÅ1†d™IC*J®æ;h§æ¡Ó¦y7obM+ ½Ew RÓM;½&x¢jó@éGz(Í!¢ 4f˜½M9À¥4ÕÆÚDÉÍ (ëQ±Á©õ¦)sHhw§ JQ@Q@Q@Š8 Š( ŠJZ@Š( Š( ŒQEéM%­Q@ EP ZJZc–’–-%´QE0 (¢€ ŠQÚŠ(¢–€ F8ã8¥¤ÎUµ™¤‘÷tÔñylY“©êj?»#z±¨ãb°Lã׊vp2“€A4ìU7Q áÓî$txÊ“óv¢Ã,ÒU¼×IÕ5YÍ šJ(ö ™pXéNÀÆ1Tnô¡Å:\Û\ Rv7jvçz^ô{ÑH½!çŠ^õ;‰‚ù}hû‘ÏZa¶ˆ©]¸Õ%-EˆP Dm–PIÇ¥Z¢À Ì,½ 65›xÜ0ëVqïEÞ.÷”lt«ãîÒÑšW¥ÀÙs‡îÓ'•^ê § µx€x#4Ãd‚PfÀ¯yÌðýi·<ÝÄ?J³$+(È#¡ª&´ÕÃ^ô>zúÕ)5⎙ÕüUG·—í`Æ;P„1—x¨„í#¥HXÜ]É!WÓ½"E/Ú„…F:u¥*m%víLeà,N£¶Sö‰Nz}êHÞáæ …< Ôp8Žyƒ’Ý(W–rÍ´aTg'½IåáóZ¯æ–o“à/­>ÓÐÛ9¤ é‘NPñÖ§{¯-•?7J‚À)YÁɧj8%àô¢ÀYšelåºIÊê@<Ž ÔRȾb/–YºŠŽÙ‰½”‘ƒŽ”XcáûH@~Nõs#ê†ÐuÇJºì:PÄôß°ÃŒGКbÕ×- øªó&¦å¿€qV  'zF¶ )‘X©=qÞ€*» 5?öW­;PÁhÑGÌÝêQf¢]ÊØ`ûÓ®-L²#+chÇ4ñ häž*kXÕ!P1œsL¸µ/ ¢•9椂6DmÄn>¨`©ÚÛÍìîß/Ö®š@R¿™—lh~f¨.Uàò»nn¼Ô×±‘èïJ/•cÊõ1¥á:â’WXl.2ÃX ]y´›H õ¤Šï|lÛG¢ ±ÉôÍVµù-d™»çX ⺠•<•4S,ñ’¹üjŒ’Ñ¥8qšŸLLB̈ÐÐTaO4åÀRãµ(R=NV‘Ó4ª01@ zP)OJæ-S¢Š P( Š3E € ( t¤â’Š(¥¤£½-%-%†”ô£­%Q@h Ñ@)i)h´QE-Q@ @¤¥¦A ž”SePѰn˜ DpLeg=╦ÚûB–=ñQØŒFÇÔÓ#p^bN 8ÄZW »‡‚Dc€Ù5 Qâ󃓜Ô,Ä&â¡YOw¢Ár÷zu1yúÓ³HbÒ‘Š„Ý —Ë æŸçF cë@¤2ÛXàö¦ÅnË £óUžÔS¸d‘V"¸ò}inx–¼Uª:ö¢àUwV½ŒƒÆ*ÃJˆáXüÆ”*“£?JŽKu‘ÓȠ ¥÷¤¥€¡q“~˜<Õ†ƒ|¡ä9ÛÐ ŠH%7"PÞ®sM±æRYœÉ…€ ,r3ZoÏÌW!”È 1èjH›e‹nàãÀt7/&ÀSƒß4圛ƒ_zK<tõ¦!ýÏ ¤2O´(lðqšœv5A‹Bäà´¢4€ Ö”P˜à Ž+h¢%”ri³ZG3îbsM±žªÁ}jÀ`@ ñë@ÉlÃ*Àc8¦GgåÍæoÉï‘R›ˆ·ãx©s‘íEÀ«5»´âHÛ9¦^Ç'’¥[îõ5wS$eM­ÒÀŽÑ™­Ô·\RÝ l)$ñÅHªB¯AKÚ¬2AúRL¦+ÅŒWºQ€zŒzw¬{%לu¨ìÙG NA«êðJ‰­ãf%."­Ó‡µR«º›tßè€zãtÂŒ› ü¾•²…”Žqõ¢àW»Ýöh³Ðšw“æ:“qŽ*Ñ >YÉQQ%˜¤,«ÐQp!¸Â߯}EGpž=ÍX’Íš4IÏ¡¦Ü[M++)/AL €üßZ¯|æ4ܧ¥O’ª_ïcšeÌtEG^¢’RX±mœœã4±Hbµ=)fóßaƒ‚{RÃ’Ȧ`;ÓÏ:Efóâ~ïµ]„ï@Þ¢©Çp±Â±´L7‘y|f‹}¥T ‚iáã½gßdO’i÷ ÐÏÃb‹ uû”€buX„î‰NrHSRæ }éí0·· Žp1@óFê£ö†BŒø!ÿJq™„쉃žiX éOÈÉb0{Šy ÀëEC%Â#mÏ#¨†áE¹rX—ëU-.ŒàîÀ#Ò¬“Å#2®7fŠ­:¤’"¹äœ¸^(ßÊŠnñ=hšTˆs€x¤€õ£Šha€sÁ¥¤php0sMÚ„chÅ;hZG˜](QòµgµW9Ú3ô¥R)¹Ëc4²"ʸq‘LH"²‹ƒíNÉŒñO  Ïj¬åÕŠ1ëŠzÛªDQ:ž¤Ô´´\ ¶öžCŸŸ ö¦]Ú¼²+!QŽÆ®Å'$tÅ;BhnYш_—Ò’t弿»éZ8¢‹ˆ£|¬Íã¡äS.ÚH‰Sµy­™?J§\ ƒ ¨É'šmÊ,ãtçh£€zÓHÆ? .-öì#szg¥6H–idÃu÷«‹JûÕiÞ9³®O­–Ï ßÉ«=E$h¨»T`RÒ—³]L7a²zÕ”€Å¡ˆ äÓåµÝ'˜±ˆäÓÒ3ä˜Ù‹g½1ôÐ>Ì9Í[÷ª¶öÒBøÞ6®­&u÷Ës^zv£•òÙIœQ{ ÒL¬±åWÐÓ¯RY=¨N94ÀeÉxV7yëK¨‚cFÝÁ=)—jíh‰jK쵬dÁÉ  ´VY?1 PÃq!…X&FyÅHÓ ,Üãæ“Me6å;æ€.Nñk–÷5$WœÆÃ*²+R9èí“© —­g™L¥Td¯_j‚ÔîÔ$=)Ö ™f ×4@@Ô¥ÇJ¸gA7”OÍØRyñ³ì 7zUY°u8ý…6uÝ© ^(°w„ûÄ ]èëò~•šêÒ_˜ð*ÊÀÐÌÒ yxè(°”ü´¨;æª%ä<òjÌ,®›”äR§­?ToÖž>è ¥¤¥ Š QE˜¢–Š(¢Š(Ç4 Z(¢’QÎhhÍ¥%- ¢ƒ@袀 )i:ÐQFh  úQIJ(´QE-QL–Š(¥¤¥ AEPH})h b}i çŒÓ¨ Eeµ).õÎ!þÐ$$U“H:Ó¸Š4Sd7\RF­r;Œ«TëEÄW²#Év¨žVx¤l¨1ÜÕÐôTfÞ"OËÖ‹çý0+D¬Èàãh§u1óÀ¦,RnØ:c½0 |Á#,OJ·nB¡Ç>õÉ¡,#\†<J’y$Š e»ñH ûš3Šd-æFŒdT7.Ë$xû¤óE†GÝw#w«pehðr¢«ÚßH}úÓ¢9¼”úSb9–BvöëJ%BÛC ޵^Ï™%#ûÔÙa»' )Xw.V)Í)銬¸··iSÍCó–PX¹<Ñ`//½/Z©<²G,{O ØÓ–Yâ7Ç#Å–ë¶¡Óá?4çq¤úLúÑœÓpK ;" žâ(æ IÝè*FÈqŠ­qFÍ7SïB(¼‡$nçÒŸñÌp’:Ö}‚%iXqVV5µw‘†íM .GÒªÅq¾]„$dg½=gO0©aHdæPùéælÜ3UnîÞ9‚FßZhQLÉ¥IÎÉ c‰¤Üéi€þó‘@Å!½ œ B£ÀÇ¥5Qª>”ìÒ7ZI"ŽL_ƈàŽ,”^Oz~ih¸½º3ïVö¨þÆ_1©ôõ«T×!FOA@MoæH²+muïL6’}¡eó3޼T±ÜÅ+mSÏ¥Mͬð2ÍÞG­=g˜3¨Lõ«iHô DF(Ør‹ùSÕUW ¸¤é@Ç`w£”ƒ\æˆÉAÇR²ªÅ°—éW(Nh¸n ûTyè;Ò–ß|¡Np*éPz€ihvÑŸZ.+ZVu€ /=iÖƒý>Æ¥kxØ’Aç¨Í"Ûí‘\€h¸ØÝ7ûƧ˜áú ŽÞ„X©Ùw©½FgB¥ávÆ_±§Ü«"ß÷³ƒOH¥‡(«•'ƒš[Ä}‘œ´óŠb,Æ»IÅ2ç&Ýþ”±9‘7ÅE{¸BÄ*Vã"¶uKV מ)ÖI壻œÏ4Xа8È9©.¿ãÕð*„jÈ ´„'ƒNy‘CUÒ${eÞÇm n‰{qJÀ[£³*œ‘MŽâ78ÝÍ/’‹—6Üuªp·–Ê’§á¨ETeˆÞ˜®¾Röªwd¾TÛ•½iöÁÖåŽÝªh°hïŠSE!†)rUžvó–ˆÜz“Ú˜óKˆÛF¢À]¦€7fªÅ3‹)°N:ÒEpòÌëºx¢À\¥ªÐÜYÔŒ¦‹°$(ÀçØP¾ôÖ8¨ì<…@9slnàÐå°3J§"¢2+Å•9è¤BÜ3é@QF@îu4´™¤.3ŒÐ³Å™ @ 3MpJ°È4½úÑÁ Cqqž´ÑkrázÔ¢—P;Tw(#±|Äõ«&ò›.K°Æj¿Ùex¶Êßwîâ˜-”¤G8#ëLÂÍ©p2©áIYÈ»B }jo*Ý9U8b0Gj[×Û*F23×[|×¹H@9§ÝDÂxåU,P*X<Ö”³.ÄÇÖ€'Îjœ²±»Xãlæ®â³ ¬wÎÓ´ô4 ,EpìÒ!ÃèE5&ww‹9aÞŠYmQ÷j%>T³§¥K ÁgdnªqšYîvɱFX š‚Á2w·%J[E2M30Ï=èxîD°—‚§šz]ÆÃ$=qÅU¹e[b#°H¥¼ýÝ”qŽô ¼’,‹¹O†hÈ?0$U9_Ȱ= 5G¦î#æ<æ‹4äß,’€8¤Á Õ;$"ÌÕª¼ÞâHÕÈQÖÆjUiVG»]¤„Ÿz…ä’ÚØ#7ïàAJ]–â$F'ûÔ„^£½—šCÑÚŠ(Ç ZA@ KE Š(¦(¢Š(RÐP)i)P( u ¤¥¢€ QŠ)(Å-Pi)h ¢–Ð)MŸKIK@Å¢Š(¥¢Š`QEg&–«]Èê˜QÁï@‰ò -D¿%¸cÙsUüÆ YÎIàS°h¨^RH°¢)‹>Çn£Þ‹.8¥í@¥¤j ³ˆHîjÁ¤ ÈÍ0+F@³Îz H˜ C“Ú¬”M¥vŒo‘(¢àW”£Â§©5#|×h¬2çé óJÄmè(’&,®˜Ü)ˆfÛøªÏª©Âç{.Aî)ÒÉ"\*¨ùOµ ,HÇš‚k'æ¥ ¸;ÒñÀª7//œŽxÅ^íT®7Q‚zS@Z”•±Ô « G´`@Þ^õbáü´ÝŒûUO!ö TŒã$SB-Û0)~¾õ¹käPx&¤†PчcŠ…ß™J@]ÅVydûbƧåÅYÏåTÙ¶Ndã,p´!—hÅ!=»Òæ E&hb6“šZnõÎ7 Õ+id{’7ƒÖ‹…~ª£Í;ËôQíPy’}«fß“ib‚¡”†œuª¶×I3#ÜP„Š4$ªšyŒšZ(·Ø6wv‰í Ì>1ÓŠ³Hh¸ hËA°¶N1š‡ìÒ6ÅvRªsVè  w8™fˆdÈõ©-ĬÌÒ.ßAS“ŠZ.%žaw²@B’qW;qÖ¡1¹ó$ ÷}ªz ÀÅ~®ÿt÷¢åÃÝ&WjñUa†zO%6íØ1NàAIJüƒ/ІÔââR¼jäp¤d”P 5­¢-¸ŽO^zÑp+Y°i§#¹¦Ýƒ¤£±Á«Q[$N̹çµ0ùДÑqZòb>÷J„&£ÓŒf¯GÄTôXÚJ.¼ÕeÑp ü%¹Ú1“Ú£ò™¢Cx`zúÕ»˜|ø¶÷Kp¡Pþ*:Ó”¸S &ÔKl(r=*í"qœS¡b×îHä š €îP‚ìh7ae(O5=óšiµ2¥äs+œgš©/:’{Q&Vþ=½úÐÜêCéE€žx£‡o•‡zH0GJ§+—¼ Œ…íKDÌKŒ'aE€³ÊÌÌ#mLOsT,#Rò7£RI)–â@ÌB¯ -¨î^ót¥j£Ì-¤'ªt4øÞG)¶@ÊzJV —© /aM~œPŽ´Öä «zÌddjKYKÛa³‘Ü÷¢À\à v8æ¨ý±’2võ«iŒF®Í€Ý(cÒ“ ž‚™©(ù4Ù%H,Ö€ö+|Õ8÷¬¤Úu·{V¦x¡€´Qž9¦oÅ:jBÀuéJ=({RÈŒŒÐ{ÒUС- ${ai#9Í$’ˆ“sŠ`$VñBÄ¢àžôÇ´ å•Êç®)a»ŠWžjCÓü â¨EÙLê_‡JŸrŒdT.½üax8¤»ÊL ŠJÛÖ•€½#`fž¼ŒÕ“jIøÓKd‡k’Xó“E€Ð4Ç5Vþi!Ddîiˆ÷Îÿ¹·=)Xw-ÁÅU³šI&3d -ä’XØ£c§­3NÍ.E04Š|ÆqšU©n”&qÍ Ò•~í.i)h –Š:ÐKIE-Q@-%RÑEÒ’ŒÒÐ0Í  –ŽÔP)¥ ¥¢@( Q@â”))h€ç¥>Q@ ES¢Š(£­^êb€*õ& &ÕÎvŠBÁ$ðD³¶2a Àæ€$‘ðNr;Šj[¢6îIõ5.p3MGWS‘@ Õç1Çj–Ž(œ*BK})mdcÁj¶QO;E.=)ÜV+ƒÃÍ€*ɨ…¸ÇµJFh^äƒ ò)CùVŠG^‚¢’ 8Æwt©gŒ‹P¸åiˆO2H¶—9 y§Ípb‘WnCT2°‘Qïg&(ê5'¥L³ƒ&Â¥Z•çHÎóPoרQ³Ë¼dÅ+Ë*êã‚ Agòöù©¶Q CR[ÆœrGÌhõ!ªÂb–»Ï$qšˆÌè¨åòXò=(°î]\š\R)ã4¹8æ ô¤ïA`µF.#Î7 Ч“IB²°ÊqI¸àƒ@ ÛŠ¤Ï´óÀÍGÉ);O"ÀŽÞÛÈv;³ž•g”½ R(Å碀ƒKÞŽÔM­¦€©†—µÐ/ݤîiØâš€P:RŽ”b€Ȥo»ÖŽ)¸ (<Ž .i´½1C0M#HÅ JÃ"ƒCgPƒ 1KÚ•~è¤4Òy¤Óz½/G á°iH曌¾içƒ@N:Rž¢”Óz°ì÷¥Ü3HGjOâ f€sL=y§q@ š\Ô`|ÄÐÉ  )1šjÄûRަ€ Ašù¸ Pi9Íâ€Ô žô€åsH§®(㎴RnÍ)éHšê‡À8õ¥ ŠnÓF ñÒªê'‡ÜÕ®àS%Ž9€2l•MªdVv6°Èô¨â Gœz—<ÐÀŒÁØ1LžÙ'Pè¨g„HT…ÉÏ_J˜ d¹ò˜ƒŠ¤vµ²¨>»q “éU°ñ[ ʄʿg· §—8&…V¦Ä*;ÔžÙOñu±ùÅÀdÚSž´gûaDc‚?*’)$[–‰ÛvZ‰r—…™H\c4±>ëælÅ0%ó¤yc Ö™k“s1=sE±ò ÔÛwÿI”ö'4€˜ÝŒg»T­*¦7œg¥Q}ÈÆEæ"rE:VÝ{=1Ò‹ËK:¿ Éj .&—>µ)…Dí nHéUíÔ;K»·j,ðAéK‘Ó5FÝȶÿw¥D£u±rXÉÚ‹ ÔíEC3[©n¸¢FÙlö¤¦Žj‘žtˆJv”=»Ô‘Ü“ I"íÇOz,•94¦©­Ë+#:…VèAÍO,â2ÒÇâ€%ÆhíQ¬ÊbßÐ{ÓRê6 dŒ÷4t©(F éSž•Jø~þïWz‚EÕz § ¯$QÍ(ÝÔ{Ôù 0;P©¦€sL‘ˆTä ÐÒŽ•CO'Í”d9«àPý))zRw Mv…½2Þa:@RZN´qéF3E( RÒ”½¨:Ò‚isHÃÒ€šhæ”p)h0wgµ ^sNφ€(Prx¥&–€ ¨"”t4´”ƒ4 î¥4PçŠoj~ Ž"wìQ@ Qɧ‘ÅÅ€Iè(à BjP÷x¤Æ9#„qŠ9Å)àf‚>Z$b€Ó4ªiéšô 9ÍÙ$zP½ "u4 òh^¦‘OÌE© n Ò(äšEÎOP¸ó ?­3£Ó”æ€Eš@ viÆš)G"˜ SÉ£?= ÔдĶŽ7f\óÔTݪ8gY‰ÚÙMçfs¶5¸†S†^†¦ÏjͺÃ!rîà `QÅo4Eúaªå.}(¸-à‘btqÔÈÚHÄc,GCÚ¯QÖÀjîòÆá†Ç5ÆDm'бPÜ«v Ö2[…i'ëNºèª 5¤ˆÙíÀßéVàŒeW¹ªHÙc21 ØzÓ®ÙüÈXnA‚*Xí"G 2yàÒ’K]Î]]”·\R´ò—±ç)‰$·Œ1ÍJmSÈò²qëQ I°Ëò}(·£÷ÐëN—÷wQìãZ[›i$‘HÂtÍ$±L÷ûF€#»ÀºŒŒç<Ó®¤&tˆëŠmÔs4êÂ2BžÔë„ež9Â1È †O.åÐ1(Fi𼗠ϼž,gÏvÂ`c4ËiÜa”ž=h–_)”±èÔÿ´ÌÛÌ@l^¤ÔVŸ?š:I§ZF¬„ŽyçÀ›íD@²‘ÆpiMÚm Î|Twj±ÙíN”£LéÚ•€›Ï]››îS¢’=…“…ëUã#ìpþ) 슃Š,¨îGÚfše 6 íUm|à²&p 6á•nXȹR84X u\sÖ Î3ÍP¹`G°“žôŒ»'‹ËÝœüÙ¢Ás@°iÀñT'gʪßxP$’+µF|†4¬2ÿ^´qM$/=)Tq“Þ€ø©—¬ ÈË€SÏÞ¬ÐÍ. 7á¨@ZŒ¸2Äʧ½ZR‡‘PÊ<ÅhÏztº‹pc4“½-WK¸Ù±ÈÏ|R½Æ%+¸ zÐ2r)Jdr«ñ¸íPÏx"”&3šrißJld•Ï­*çw4ú)áKz Õï0Å¥bôö¢ÀhRb¨Á;%ÉŠFÜ ÕìÐÀZ)3ІîfŠÉŒç9ųYºš—½£½£•°´!ëGz† Ò_•[,*lPÔÑIÞ@(Å-'z8ÍÅ-€Ž)GLRŽ;ÑÒ€Žx§tƒ­)é@j^ÔÜñJÒa‰§ nis‘LУ­ kò8äÎ:Qžy§PRÒRÐRñEh¢Š@)  3Gz`-%´€(¤¥¦ÑIKH õ¥íFh(Í-%-Q@ IÞŠ(4”¦’€ QEžÅ-P1i(¢€ (¢˜Q@…¢Š(QEQE¥´”JP*12´¦1ÔP¨ÀÇ­¨ÇjkDŒ¨¤1E%F²vQÕzÓk}¹¹ÇAOû6QÐ7 sSnPpN)E»Bßeòò • Þk¨##jð¥ïEÂÅye1@­·&¤ŠO20øÆiÎ2¤zÑ@¢€*ÈÁ¯£öÑx6ÇÀÆO5`ÛÇ¿y^~´é"WB¦‹ˆ«å;9.)®¡¯‘{cšœ@û†_*:qUÜ0¾:ã½4Œwjª8aÒ£G.ÒÌ1Óabv¸ó$ÇQ¦m¤pT•c‘Å|‚ÌIѳޕ%s ùG+h¹bm+‚ÔøNb\sÅCi¸Ü9#¿5hÎ7U,G\vªön˸€XñN³âiõ¡:έñÓ¸ô¤ŠHÙ G€;Õ{s‰'Â(³µzVÎõàî4üÖ}¬^l,»±†§HÅ®g;Tv¢Árîy¥ÈªÚ±óH;GLÔógÊb§ <žqJ8ªqM+[ù™´ô‘ä·ó03ŒÑa\´Ç“8Bzàtª¢é¤„°8ëOŽe0yÀ ¤1Д™Kùx9î*ÅCé$[×Þ…º…³‡é@QQÇ2K‡8£Í]År3õ “ƒŠp¨™°ÂŸž}èÔ˜¤ÍéIHFES¶–Cs$lÙQžiwÚ¨<3H2M+gf»f€±"’U@&™%´NÛ™y=qQÛÏ#ÎñÈWÒ­h)mÒX¶ô¨ÚÈ4B1#mgµ-´–¥­ÄHØÇsMû+ýœFnSjÝ¥š[Èò«É´m銌Å*V‹~âp}+C¨Í&êw”–¬m¾¼âÉ$Š<²¤}âjࢋŸ6Vù[äÔR/ò@<ñZ§éM 2r¢‹ˆ­}/”«ÆsSÀÁàR=)d‰&\H¹ÓÕU€hçœ#1ê#= È­JŠhVaÏ :M1”¯ŒïV#šeÄ’UÉ$62jвÜG›!qØšHH|¼`vö ESo,‘Ç–EU梻®ã^™ëS­¼Àª´™Eì(šÞWºY ¢€+°ÝÄŒŸÎ’íA¹AëÖ¬M­sª‚£ËȘLŽªXJ`[k…Î=éë÷ºÕfwK2åpÝ…>ÆC,[›®jl2Á†¨½ˆÝ÷†ß~ÕxMeÝ^Ô(ëM#O6÷pû€õ­9¬È® ˆ.Ñ»µj09¡‚ º›ÊQê{UkÃ'¨ô§ß©ó"oáÍ“‹Í Q2Çj…ŽZjÝ+8\¡=ê Ö"Æ0:f‡…ÊFKŒ/"‹måHþùÅFeYQºª¥¤Ô?ÝOHdYÝÛ7aE†6Ë‹™[ÓŠ»æa€b5JÙ±,çÞ£…¼éœ¸f€íE„i–Á¥,1š¡ÛH+Ž™¢$¶e‹‘·8÷¥`/îÏj7 fªÚJÓA†ëœU°1é@Ãw5^îI‘“Êw©IùÅWšá£¹XÙFõ  üÃ=qN#š«uqäÈ¥—+ëNkÈÀRÀà÷  ÏŠpäTeƒ(#¡¥;ü¯“ïvÍ1çD™bþ&©MdøêyËgšÑ¸,!m‡†€vJ“Òœ¿v³¬»Ôóëšµa1–2§ªÓ°‹žh\æ•x•jF!8§ŒMlR¨â˜ h¥4”€-PKEQE˜ E%´´Q@¢Š(ëE%(€AKEQEPh ÐG4t”QEBŠ( aEPESRÒRÐHii B÷ Š ¯J:ò(£šQÒŠ){RQÖ€ « xät­wªÑåndOÍÒšÒ4¨]¿…zZ‘¦3bª;ŠMä–ÏJ’Rˆú b&I•ˆã4ä’6 ËÛ­$j»Tûu¨-9IsëJÀ"Gö!-ónãÚ®*àéUlÆcvæ$â’Ý(Џ<Œõ¡lÑéKQ\Kåެp!‘Ý<‘ÊF Æ*ÈÉ×N侨ÃãƒVžErÆ›ßZZŽ9UóŽê (‘ Àaš@8U,H/7”8éWºQŠLöïKøUK±‰¢ œ±«cÒ€€a‚2)@` ^)(1a÷…ù©$· ÛÑŠ7r*\RÐ"ßl[ò{â™E¢°9éV-µ¤2D¬ô"›$oÇœ£p#­Š(¸B]Ù˜®Õíš|Á¼¦®*^ô”\ è¤T´d?{*HX}‹ƒü'5oÊBIØ9ö¡bT¨QƒÔU\V)Û°[æmÿ ŸCS›XH#gÐÐmSÊòÁ {W;>ÍÏBj+m4‰·åaÅ[··òr¾†›qnf‘vëEÀH×È´f{ÍT ¾Ü¶Ò\œæ´Ù!NÄb©¬sľX@Fx4Ño&69 8©£†E!Ë’ óI{ŒUKw8«$°¶a±Ò›„r;%!óÐÔÒÌá’0pOz…‚¸_•„¹çŠ’t1Ü$Œ2¸æ€%·™¼ã Øèiñ}5MÆdÂ($X•'uô˜ÁÍ //T&äQwmëS Ç¥R°\«îûÙæ‹ ,ÛuÔÍŽµ`N¥Êddv¨-}¦lv4Æj'éE®"äs,ŒTjE9ªjîÕõéJÃÈ Ò–r+8:ñÔ“µzâžžeºHÇî»Í;qŸ Ò‘㊢GˆÍ¼ç®)ípþJÊ„dh°Gj .n ·•ÀíëNkÉDBQÙÞ•†]‚xªò\yvâP¹ÈéQ›ÜƯ´€{Ñ`-1æœ:sTè§œg­Z–eŽ=Äñ@ 8ªÑÝ$‡õéN3 ûxÏÖ€'ô¢£G 2 Pzy¤ëíH?@ 8 a`)À÷ #ŒE"€ÇÒ‘Ø($šås@¦ìNê?*Ulš†é¤HËGŽ=hO*=Á‚ ý)õZÒfš-í×8«#Þ€‘\a—" ’Ò)‚÷«5¸ŒÌcÏÍé@ ¨`ò˜’*5³pÀ4¤¢ôpQEÀ©=¼žpš Ó¡Ž_¥ÁcÐU‚ih¸m`’9_ÌO•»ÓV6´¸b²7LUòiGJwLùm#:àž€TPKåÙ4l¬µhšAABc)i¿êNG ÷§Gx^èÄSŒúÕ¼ ñÅ"ÄŠÛöÞ´„)^sY÷x7ñóÒ´sP½¤NûÈù½hLe]M~D>ô_.,ÓÕnktB¶x¦If² RíÒÀ€™Ä0Ç5ræ%ókwC“LîÇsO ²jB2íùÔØzÒ‘©SÞªCe$wnõ>µfâFŽ"QKJl R¶èÅr]†M§ÂbŒ—áÏQTüëåÊ縫v/$¯$Ž1ŸjˆÅ*‚3TÒíšðÅ·Œâ®ÒÖ§¯Ý ´¸Å!ö¢–Š@&M-è –’ŠZ(£½0QE-‚—¥”f– KE-&( Q@¨¢€ (PGj;QÚ€Í¦Š¡EP0¢Š(¢Š)€QE_ª!v¼;û•lUX¹½“éMožtQÆ;Ô/ÿkóBgšWÚ ?xàRy m‘£'SÍZºˆËnTzÕe‘ÖFßÓ§€a‘üÑ}¹êEIÌ.ŒaË¡ïLØ`¸YˆÊžµj)£–C±1ר¤ g8+Žjº\Ëä4€®ÑÚ¬\£<«éUàXM©ó1žâ ¼•žÝõvП!w bª^à[DaIâ­Û¶brGZÀ)‘Ss7TÜ3Û9òÈR0i·èÂOLÔ’mo6Plþ[@sŽsO[ÈöòOÖ fR)#…¤± àÑ`/î;r Q>¦O¶jÒ ¶ê¤äã­UƒAÁç„âÁ:‘NV 8ªsF+;ÈÝÏJ4÷-ŽÀñJÃ.nëHi²gË#Ú¨[Ë4ÔÔÑ`4ƒ2)UU;9ÚHÝXrµ¸š4i6€€ã­@ž)½A$ÿ¸*ä‘QCw#ÆÎ#y¢À\fÀ$•´í0mË·‘Ü€ÊÈF;QÂa¼ /½Xͪ·Ú£m-ß©dlá†Zzõ4g¯4Èæ›Í2î³ÇœdžÔ.NÒib}éj8XKNG4è HT„'“žhZCÒ–šÇ½ ¨¥^P0FE ïL¬Kæ™z’=)àEÉc@Í-1©Ã´Ð™-À3Ì>cž¾•q¦1ºÄªYñRGŒt«yÏ%Ë¢SFàOË2“Ѓ‚*¹ÃNV£ÓÛæu$õ¨àP׃Ó$Q`-´Ñ†ò ·¯zz²" ÚªßF©jª£…õRÑ£wfPU»Š°Œ‰)X 6FÚ¤ô§w¨n@0¶GA@ZKæåAâ4æ(å˜àf Ó0þ´ûäÞªÊÀ2ž­>¢%i¤€¯›‚ã"¤šQ‹tŸç4î‘MòúÕé£%‘×J `$R™õ«Œg#¦³®rø‰ybÜûU™š/¾h° ¨IÀf¤GWB¬Ùmã:äà ÕèGQÐRhd¹É zR (#šZN½*™`~yÅE§)bNM[¤ÆE.GJQ@ Uà®ô¸ 8ô Ð• ·…ŸqAšŸ˜ÍG,)2laÀéíD0$…Ï>µ%â€U‘ °È5XØ©R»Û™«B–‹V+mˆÈÎYHÇ=ªi:‚‰.#«Ô´\„ؘ*œQL·+.«ÝèÍ?Ê•$—÷eËô>”ëxË£!9Í]"”)ÜÉÄLO¥gÙH‰Ž =ëKÚ‚ÐP˜ŒÛ7ÂNAùºâ›+—³ËI–?ÃZb4£ž´ÑmîÇ=h¸Z€öËŒŽ•PnŠi ÆkN(’% æ£kuk1<ŽÔ\¶aØ-S²ìOƒ×5vhD©´’*‰m­$$b•€CjWi/ÛµáÊ&G^«Üù¿gˆ ŸJh ±œÄ¤õ"”ô¨ ¦+`øÎJ Á‰ ü¦‹?jBx¦ÆÁã ØŠst¤‡"ŽÔÝÀ.IÀ¤Y£c€Àšy¥›‡­€ŠLâŒÐŸCHJ( a‚"rPg×üb”t Љ­£gßÈ'® MGj†;t‹.Fi±Úˆ¤g NîÆ¬v¤Ï^î©u¤h¥UŒ¦ÑÈõ«$A4\ ÐÂâw•”(aÒ£ŠYc»òÊáXÕÓÀ¨Ì{¦áF¢àKÆ*¢IÇ1íMtW]®”GLå\zÓ®P¥ÔNßpu«QÃG1®3RW`§qoÄl©·óÆ)÷ꪼçgoZ²°D§!Fi%…f‚:EÀ̕ܬF×­^÷®ßxŠoØ•˜yŽÌAVvŒ` PÆfæ_ØÒS‚EV‚ÌÅpdfÏ¥XpLm·®(`$daNæ5NÆ9–Fó÷5wh9€©xCa99>›g&é$çåSPÌ³Š‚ÆîI$ªè#Cj &c!Hy*9&¬”ùqYêJ]¾ÌÇ4Éa».ûvò:Ó¥»Û!çM·ˆFÎÌAf==*)ÀmDniˆ³ÐpÄð«×4Áz¦@*§¡5ôb8¾A€O4Ûœ |AƒE€·,á,x§Ã:JHCš¥ ymã+÷ÔŠ}ƒ‡™É]­ŽE+Ëý¦y©Ž:^ fOÃz7/ÈÔÄ¡¸~tå`Fj•´(Åå#€x¦À¦é¤%ˆU<NÃ/9 ¤zúU6cs"䕦Ÿg!Ý$,s·¡¨ìp.e4Ñ_»Kž)‚´Á¤0$…8㊊ݥeýèÁÍ;,Lê3Še¼ûí̘é@¨J;Äd,IÏ¥X·'BW± DÒ8³ŠVÀJû"Ûä黜P2иŒÿZtˆ$B‡¡JI#’ÀÆìpZ±j\¡úã½#g)Êów銷ka ¥Ö‚r(¸ 94›©Tæ†Æ:Pnã9§ƒ‘LP ÓÀâ ´uÚ3ëŠJZJ`Fâ=»YF=1JˆŠ›T`Ô ëN€)AŒÊ¥UxõxsM½ïJ)®qNSš8 RÑ@QŠ(æ–Žô˜¤Ñ@éE0 R)-QÒŠ% 4P8£4À( QHŒRRÐ0¢ŠZJ(£4”QÞŠÎ¥¤¥ (¢–˜ E´))h ¢Š QÖŠ( ŠJu©h°¤úT’´¡·v518VÏ¥CeƒRiôueaÁS±U-‡îå=²iÐîû99Ç‹fŠ«nf*‡vAëNóË»…ÀTëšV “¥/~•Ú”¯Œîã±L%ÏÊAA  z J^´w éFážMSºÜ· µˆÝÖz€B¸S°\¶)sëM‹ýZý)“Wo–3Ï4€yU=TR4i Ã.iÞ• ÎVåbÚ9ö‰Z2„qM[pIbBôö©¨¢àWxJ^"î ÐñH`u'sµX¢À¯hŒ±ãTø$Òô¥€©|„ª°þL»™Zõ5tž{Š­âa‚‚ÂÄ3Ÿô=JlÄ õÅZò“ËòÂüµµ“iÍû|y)ô§Öˆ¢ PIÖŒÒJýÎØÐp æ¥6Ãtn˜P½}é×âeûᦅÙ¡zzӴܾâB¯@)ÐæÉcòô #ÁrÒm%Òˆ#o6IÙH8˜ ·id.<ÎÖˆg™ãc‘òÒZ7–d/‘Þ’ÚDI¹€>”f9ÙíL€e…F—nñ–òþïSIhÊ,Üdg£‡"ÉñÜóJÀMöß“vÆ#¹8œyBFû¦ª&NôÀ‘ç åB–Ç\SÑîAâªDA±8$ãéO Åh~läõ¢Â, œ§U9dqíL“ÔÕÅû£=hcƒGlÔk'¯®)1È=*8`ò³†$Ø¥Y£cÃu©)WÊ•#tP9ÉÎiÃzYm(wtÅXïKEÅb Cû•Ž9¨c²J$àç¿¥]=E1âI]A"‹ŠŒ‹§ªš}«³VÆå8Í=áY0Ot"ˆâ¤ ä÷4åu~„vj½½¹…Ø“œÕŠC*]ÇÄ~Ôûïø÷üEEtÜ)p*KÖÝ€ '¨C‹´1¡fÈ8§K9ŽDÈj†vÆ¿{Ž(¹ M ‚2:Ñ`,I.×TQ¹W,^ýr¸ S†´î8⑈:ŠŸj¹Fi ÔÒŽEHÊ(¤ d3ÜÝQy,jv`ŠXôŸ4a.ãQõ«²§™/¨¦"¹vÄ»õÍXG(e•›C;oç{P"iÔ˜œü¢›hOÙÁ'4-fXõ+QÄ^+Un£¸ d·2´*`Š•NT:Õ[¢$¡"§2* Üq@fŠ`‘_îž”åt'†i¢Þ}óN Œg¨¢—¥ Q»8C¾æ^}jQ֚ͱIÁ>€𤜜ƒê*/²(‘\äTÜ,¤€#Ö¥ïL ·pÉ++)éRN$û>#?5Ly„eHÎ3EÀ†Í¡;Ï â§ïL‰5Ú?:z@Pƒ_¦­]nﳯµÞ&líæ¥À9¥0*¬QÉk“Œã­6ÖVŽØ¶ÒÀ©¾Ì‡€HÆjePªF Flò~è“îy«©"}˜“÷@Á¦Ý@gPƒO’-öæ1é@Ê!dU/v7jµjêÑ|«´Ž¢£VØ]X0Àiö±Ô³p[µ6"Ϧ(nÞµVÚi$‘•Ç¥Y`r3R2¬¶¸|6õúS!KýÕ^ ¢êè–(ªp:šHî2R4R¼óT#HÔ/r¨û@,G\v©‰ª>Ë©¸'w¥J?ÚcvI'Ò„º‹, c ´L—< †Ö[— ¿ýjv¤®¬»ƒ ¾´ Pô`¥r¾PŠ%û¤óEÒ¬B6AŽzQa—à u¥â¨]¶ÙQ˜/ª{|Fpõ¤Ð\±@¨åWhŽÆÚj¤3ÈÖîYÎå¢À_¦7P*5‘¢¶ß)ÉëP‰äØ%t=¨°ÜÈa„¸Å>óbWé‘Uïœ5©#¡%¡ÿFO¥>€OG9¤çu7y-Œ~4€ F4…ÔuaŸJkœs@ Oà0*/0‘€2jQÐPšS@¢€ ÒUã œ¹ùOJ—iëšvÕþèü©€>PáN4‹Þ€#ûµe¡fˆ«¶I¨¤‚B©ÀÊô ç"hö±4ög[¤PÇkE2åXIàà@¡›7q’뉥‰‡©ïRÛÈ\°#§zŽg¦!‚Æ‹'Ê?yM.€Z¨^thËÔŠ•³´ãÒ©Ùݱ<’y¡ ‹gþ²F÷«A×$nª–ÇjLÞ„Ó!ávÚYÏCéCB/‘ÍEt?pÇ8"– þJï7½2ë?gsB–ÌÍn š°9U¥Š2qDsºº¬ŠîœÐ"Þ(¥ÍBn£W(ÜC&¦3¨p¤ò{R ¶sHÑÄÒ‡?x{УRŽ) P4´u¥<Š«z¥bÞ¬AgíKQÛ’aBÜ’*JMªNp?*O*=Û¶ Žôɦò%IÈíDͤý KõªQF%º”ä®=*Й …3óSÜ3—V(O\w¦€†Ô³O,e‹Ò£E>ñ&AëSà B>\äõ4âÊ .w0ùѧ Å4îÔ*¯^zÕÎÔgŽh¸&Y­òŒŽÔë8Z8ÎጜVAÈëKž)\t¬ÖƒÛ!XäÖ(vp3ëB`U½VkrAÍC#ƒb0GLVŒjms¶À«*•ӆí¿ÔGŽÃš–X’dÚÙǵÄ©ÅÎ1Š:‹2>v°8§¯Ý'Õ{kO!Ù‹g=ªÑû¾˜¤|(²¬­)ýàõ4ÛT,<Æc×°+;JB‰1Ô“ŠžÖQ0+å… Ú˜Š±«´ÒĬp+BÙdH@媭¬n·O½½[¸&p3ŠPÙÚq×µW´˜Ï惊y,›Ë—†Aï0‘X ¯¥$WlÎcXò£° ´Üõ$ÑbT\K–VfŸ5™Jí+Ö¥S‘Çz¡ÍÌûO'8©¢K­ß>6JVßÊ»4}îæŸn ¼vAò{RFŸng2màb’Ùž ¿ œƒÒ˜TÕûÔãH>ýHÊ÷vìø’2D‹ÏÖ§…ËÄ '®i·ÌD#>¦« 7"¾àÝhz©ÜN|Ò‚A¯SÞ®­=¾òJ‘óu„2´¼.…¤ó#~†¯ƒ‘šÈº@8Pço\V¬c>”؇šAUæaäòOAQ%Ë…YºR°ËÔ‡éU¤œ 6¨f#®;Sà˜I’h]™¤hÊà­N¿7Z¡b3w1ô«Ñ´0$Å.8£¥Å)¤‘˜HQM“Š]ÜÓ¥íHM.hJÆÒŒŽi{ÐY€A”ÓoÜ\TœRcžh4UØ mô¨…œCp€Ý³S/jŠ+dŠ#¦Cf°HY\óÔ³E+-®Æb®@~H¥¶·ò—9SÚ§´ ¨ šË61Ï=ªx£"0²a|Ô”´Ê?qF=©ý©?Š–ÅÑIE(¥)%0E ¥Z))h¤¥£½v Q@j( PE ÐA£½- QœRŠæ€µ/j(ï@jN”´”´”Q@Ä¢Š(:–’ŠcŠ( Š( AEPFh¤ 4fÑ@ œRæšzŠ3“@¤)(í@ݳ¢+!Ç8 Êñ„2r¸¤½l£ýªGù–5q…õªhr8 * fòBårS’dbHÈÀ¤2j;Ôk22ýîF)´v GPG”¸¤Å7ËMÛ¶Œžô‹ jûÕpÆ’9 ÈÊWjSÚ€Ú«b¬Åö«=è=h¤6ïàÄj'„2"†SÐç¥ZíJ#Šw E`€1Ëw¨/\,%{šµÞ‘€=@?Z@Rghí"Ûß>”×$ÜÆ7îâ¯R0@Ç¥'“ ít§qXxÆ*­ò|¢@9SV2Tó"e=Md1¢»yø¨€nãÒ¬A HU[¨¨V)EÖòŸ/Jb"gi$q¹†Þ˜«NÌŒ¯œƒÞ™†µ¸f*J7¥X…‹åÊm©0îS É8Zå$Û‹–¨©ïã/+ÎÓœTÌ­k°džãÒ„âA ª±<ã@¹a³ÌPôÅV˜–´M¼àóS„ˆ¤e˜“Øf‹û–Ädj³²ÝuªÅ×ôç4·1yÐ>`2(@ᮇ÷F*ϰªsÏ»°¯ÒcCem‘3 UKTŠxË?.O¯J·#¢¡-Ó¸ªRÙ•ËÂøî4ö€¡ubNô©Ø U )›{#ò{Uâr¹¡‚ŒFqTRi…È‹pÆjñ?!¬á¨}(B4ûrj¼ ,ì¡~E8Í,³ˆÙS«1àS@“yABž¿Z,¡É Õat2F:f–K‘ª°<Ò>){T-s¾ÂpjC"…É8´¤dÓEq• Ó‹¤ž”N’â% õéRYÛ´A™þó”ؤk‡o(„E"K ¹0°ÆA¦"qAäzU(]…û¦âTv«¤Žô† Fì)H`ŒŠAM–MˆÏ‚qØPcS•@3Mû$=vcèiÑIæÆg±©;Qp KH’@ê#Þ§úÑÍ¢àW[vŠVxHÃuˆí›íi-ÛªÍ 4\ w­8•yÛíVž7uÇ4¸ õ EkèÕd…XƒÅE  †RêÇž ÔrÛLn„‘‘·>´04JB)yÅ!¤13ƒŠ(h84ßâ ä’9@ëAhw4«ïF>Z0hùÍòÐÒ…ç4mù³@ œ>) |ÛE;lÑŒ6@  ÜÓ鼚pàPÑE™4 Z(´”½¨;ÑŃրÑF(¤IKE(¥¤¢˜ E”Z))h4Ph Å”´™¢Š:ÐKE€( Ph¢EQEÐhí@ÄëEPu-4RÓ´QEQE (¢€˜ Ë ÍT»¹r~\ð*ÄÍåÂXvS°‰(ïTI1ÆŽKj±4Æ4S·$ŒÑa“c“@Õx.D‚¼Õ@(ÁÅ-€§yœ*€zæ’áƒDм·wð¦í\çÅb­Èâ0Oz°èQCÛÇ!ÜÚvÁ·olb‹UW'ñ©Bo¶U=qMkwÕ¸íNa"¡F[¡¦0+å’FÓÉ«1ÍSØÑLŒªÇûÕ=Ħ$ sI6{ \œqÖ¢…üÄ F3OÈÎ{ 2)ĸ?/Zá’Ø ™âSêi-[Íb3É¢Â.+«.ASª6Î#Ü‚@j|w‘“ƒ‘š,2Ëà!úU[Çs’qž)÷*S<ž*;výöÁ÷TQÐEÓHy “IžÔ†/jI¢‚·=©ÜЀܫd.p;СœL ŒT½ê¥‡çÔÕ¼ñM€´´ÐA§R£øii:ÐæšQNAPAëÅ;”Ñ´(Ò˜–±#ï ÍJzÒŽ”\æ·Y±–#”±Gå®Ýžµ!¦÷ a·1ÎîÚÝ6a?ÚT§Ü«=èÜ3Š.@eFàŸZ`’X£Ù$läp Õ±ëA罕¼eimÏAKö’.<¼g«‚“bïÝ´nõ§p+^™%1úóUáïuÀÉÅif‘P ¥Ò“y#GN$µYtW]¬3MŽÞ8ò@äúÑqX¤Qâ̱ѓȥ¾m͵dZ ?x•ÎvçŠYí–`;0äw­ḛ́ŒqÅ>ä9*軂òE>KF!irWÚœðÈ$.0L‚7;JóȧµÂKm Lä |0gy1–ì:TÆ4(@P2=)SLâ'=óVT!nõRôFt”¤ðiÑH^ï ˜äÐ#$j´dûÔñJÒK"°¯¥C}!”hÒsL3(=E:7V¥=I#‘AéMI¾”¤þ4Å|’Æ)ÀƒÐƒQìY«wª–«åßH¡Î±  8£›‡LóJHv¢— ŒƒÅ&s@ ("€E í@éKA ZZ¯5ÂÁ2«ÍM¸b€@ëMf"œ(ZZ(n--0r)A ¡¹¤š^ôZ^ô™´ (¤œÒÐÑIJ(QIE-'zZ袎ôQE-’—½RRÑ@QŠ(¢– EPi(Í J(¢€3ih¢˜Å¢Š(¢Š(QE€*ÝŒÉ÷©.ÿÔ~4Ù`g8aÇj–d2D@ëÖ˜ŠònŽ$bwâ¬á[kcµU•Œ±$aNîüTò·•n}qŠ$[^g`TõZÈb úš³C¶#7 ªÈâ2 >n¸«)àŠ¥ûëS‘ÊP„Ë‘1x•›­?½C稀H^1NYஸ'¥$'To*n+žE9\|§8 Ô½:RpzRâ8Í!Pà 3õ¥Åâ€(0 ¡”©ïI¸NÎh·XÕ‚“óSc¶hÕ‚¿_j±éNî{xLJÁ°y©Dkœí§Š(¸In¯&þC{Uhb&á'h­IÅ îg•àjU;°GzW$zƒN€8 LOäuÅAj´9ïœÕ¬1Ú«‹R ……=¨@2ÇýQÖ¬ûT6ÐÉAajŽ8æD’v@‹gÅV½wˆ!SŽjÉç¥RÔ|‰ÎAÍd‰,ÆUV)«# ŠŽ3ºaÏÚGÚDdP’I8›ˆlR¿šÝU‰c€)!8=ª©¹y.8¾îy>´Žeœn,cß­2Àn™äì)¤¶¹E}¬piþbƒŒòz ϽæeÇRjy"|rdäñŠ,"Öåõ¤.qT„¡æ‘Ÿ%T| SDï # zQ`¹¥Ö—µgÇé$o’Á¾÷5 iXbQŽsš©u9…†ÞIè({‡†%gäµ;p QŽj³\:D®S9úQöœÛùØíÒh⡆63¦}¶.sœø  =)9œ»ƒ‘ŒÕ[[—–á9¨°\¼híLGöÁ§VèxáGj(΃ÁÁ `tâª_1 ¹X‚*[2ïg9&˜^»E4EŸ•@Ï\Rƒƒ@ÉÏ­ #°£ïUÃ}iÓ³¦Ö'Õ7FYŒ{zw$— ¢6ÎM0m€E¸ðr ¤ŠÕ–a$¸ÅZQJàQ’Öa;i2ÃM0—iŽ /4X®-Øó†¦{ôVE判·I,0@À€©’K–ElzÔ¤=´Xå˜ü´í>& îà‚M:ú2Á¨SÍ> D¤¬ÑbÌ~öMhÇ5 j‘ÉÅLzT±£:ý‰Úƒ¹©Òs ÆŽ¸€EC:fþ5=)n†û¨ã^@犡=Áóv Éô§E6ø¤~…sÅU…Y甇َ $‹ä[6ÒHc×Ö‹6š„‡ÿRçêÿ T°²Ãkâ “PذHd‘Ìy¤·¸ Ø>”ñ*sÅf.ù#vÛ¹äè})÷*é/PÍŠ,‚Ê®~Vœ:Öuª0’#„Ç#Ò´½&1M€àÔ7W"ÏVì*£Í,q‰ƒ»¶:Q`4"“ŽÕL\H,„„e§jŒ^8„2®q÷úÜŠuQ[Â’ÍÐR½Û$‹! ž”X  RñP\\$*2Üšj]F]T¸É  8æ‚)¥¾l RNà(4î”ÂØã½4Nƒ!˜õ  húÔK0 œŽ*E`Ø9´´g=)ãšpp;Ó÷ETÔdOîÍ]ÎiœÊ¢³È¶PÇ'©ó@” ~uS¶.1JZ\Ð"Þ%}Á5)‚9¥ PsiËøf˜ñ,6®©œb­ž´ÉPÉ*œ:Ð 62оÖ#'š» ²DŒ£'wZ‚ÒÚ[s·r•=jçACb* y¡ •(zgµ>;Q»FYºÕޏ¥ÅŸeÑ~í“åæ’Þã»geùXõ­ QEÀ© JŠëË!éDwFFEXÏûDŠ·ô Qp(JÑÊ}Ò*ÅžåµúŠœÜfŒq@ŠÖ×>sº•*ØDˆIU>”üÐZÆhÍ SÖŠ)-.))hQEfŽôP(i3EQE- JZ))h¤EPEè Š( 4RQ@Ä#4Ph  ÚZJZc ZJZ(¢ŠQE´””êi¥¤ï@ HzÑÞŽôîÔ™Í/joNF&w–Aö>µ/z†P€¦Nt©äŠ`>Š Sów·ÌÌ }ÜP2çz^õ¼¥÷ûËÅN(¥;‚ŒúÓv'O_z”ô¤'Ð+ÆqŽ”ÇÚ,?'©©Ï"Ãv3Í#B‘=@ªÈݘl,ñйÚÒ‹ÈÑC¿o>”¶ó¢ÜFëRô¦Ç–¸ÎIë@ pZªZcèjÛ(`Ab@ˆÇhÆh¬æZ»V¢â%úSMªm+“·Ó4øÓd{sœPØ^ä‚zƒÅG"ì†2„†'­Mu Í Žj9£”¬`&võÅ1 pðÍNå‘üõ‰3Ö œ³MlaŠ–E)x² $r2Ìbäã Óå²~\¦q@;ï<À2ª¸ÍC*‚ ñ·ò¦žQÕ’Ý…*È$öäÅCæn”" ÈÉíIk–i½ÍG—T‚AùªÐlMTƒ›¹ §AûÉ¥ÝÈ °ŽFFiQ²HªvÊ>Ñ.AùzS­†ë¹T’F:Q`-±ÁðsTavûD‹¸•SÅ(™¦•ö¾ÅN>´XeÞ´T³b$õ“Lb\ã’p)Ľ2"yˆøµM‰õ#š§vÒý›çƒŽ•`?—jôŸAºo]»ˆúTVößgbCšjÝŸ—z ÐÕªC!’ác•c`rÝ)ÒO8F?1éU®ÿãöO¹€KqU9þ#LE¢x¤íLr†ã…¥, œŠCÓŠ(È4qžhpx#ð£"z((¥í@I KŒäЊ ·H‰#%sSt¦“Š­C;2±PÝE[‡·¦ÓÆjÇjCÀ¢àA¹òdmÌÃJH­!eÎY†3V…&qNàSŽ9D^W—ŽÛ³Ú›2´W*[>V;UÒàuÀ¥á—±\ q“pîŠV3Ú´@R(ÀÀ u¤õ†¤¤ÉcåÏ&›~SbF‡$Õ¹gÎò]sŸZ¨ÀOz«ü‰Þ˜‰.¿sb׊}¤;m@À;¹úÕ‰¡I”è)à/@1EÀ̉s©a¸ÛÎ)³8{ýÄŒ)«òÙÇ3ïÉ ßØFά21è:Ñp"Ô±„Pç=iQûÌŒš·qn³ªŒí+ÐÒÅÆrIcêh¸ò,r€ì#Š“9n:¯yiö†Râ§v(\äH\?—¾9¨Z¦øåšNx8ÍiM™ '¨ªi¢Õ +Ž8jh씘$lõ8¢2ßlòânÜš±i­³#¦1ÓÞ›anèÒ<‹†=)€Ø› Ú -Ìí$âØŽ~b)¶Héu!d9'ïvÏ*öG`pÊ@BÒ:L£’3EÏï&Ž.ùÍÃÍÔã…®<»æcžŸ/½04cû˜¨ÁÛïP¼ok½†[¸ëi~Ñ|cµHVõ4áÅ&ß›4  BýÚVäR(ÂО(Å.8¤ Pš2I"”)¼îâ€ÒŸMjwj)´¸ Žhí@¢”PEPFi)E ŠJZ`-&(ïGJQE¢QøÐ@¢Š^´QE¤¥¤RÒRÐER£Š(¢ŠJ(¢@Â’”ÒPQE›KIKLbÑIK@‚Š( Š( ÑQ‡œ#>´²Ê#ÀêOA@b“½1$,pÊTÔƒŠ`&(iqKŠ@'jNƒŠu!‘L»ve”u¤´ë'ûÔö€3—RA#ˆ"h™åM1ãÖ«´„¾p8©ûTd–Rù)òŽÔ!²K5%ÞCüUhœU[iL’’W*Ð9Í šà)#‘éOóâÞ½*µ°ýìÁºæ‰”Gn Ánh°‹1Ȭ¼MAp?Ò¡>§—F#eàçKÿPÆ‹pzÑJoñR‚i v*)'HÎ"¤'Ž*„Ìg»T¡ -´¿¸2(È4‘L^"áOÒ™vû-ÊŽüRÜÚ ñN Ë6í ŒzÓð=j 0“ךŸp=9¤1E8SF:ÒÐÓO^y¤y5Ë68ˑҀÇÙãÝ´þ¢‚Á±è(4›ÆAéÅ$p,D•'ž¢žŒw)È4à(¤PÈ— ÙOSR$MŒÉÈnÕ?jLàgÒ‹RÓ&æbzÒ…{yÝ 8Å2ѱtùÈÝӊЧp(À’y²\æ›Ûy¤Y‡ È8«ý 5•I€4\,2Ýé*FxÅA|­˜ß)«ƒp”€Ë†ŠWã³ 0$š.‰6J{df¬›h˜m(1O f2§µ;ˆ§å#¤m$„¯AUÖÎ5`Ùb@Og ¡Fé¶ßCWA늩5¬’N$:*ÚŒZAóï]\ä‚î¯Z?á#4¯ÅrfEÜQN†'iÚinG€"s^È2p=è›ín…‰Px¥ »‘ö–ÓÛesu!e ži€ñ+=Ë"¶ÓZåŒaûƒŠl[b¸JqÎFiÓù{cÚ€,C$ŒÄ2Œc Š©Òýµ¾Ryéž•%°0Ü„WÞ¬?*HX-ìÆóPK"©Ã ˜Ã5BôœÒE%PäiF9£¥-BðbÊv“HÐÀyëŸzW¸Tp¤š”Ϧs ’FÒ‘ÑÍÊ6ß”w«T´\,V¹‘â ¢ç5:1hÁ#ÞŒP$.céU¬s4‡­O, )ù™¾‚–DYÃ= CwóMZK·ÌJ€õ5,ð»È®˜Èæ›5»~ì ÎÞ¢˜…‘UmÇ<ÍAl³.sÉ8©e…þÌTO$TS+¼*‹Ú€$ƒr[n'$óQ¤’Ž®I'})îî!RœsLDÙv›sÔ [ÂÎéÇ5<’µ¼+ÆqÁÅBÜßz(¢õ‹mAüDPËv¥ÂàóÞ’YCÆÉùãµ/–©â(:ÕX„ç<š,‚H Ž´ätlí`MQbÛ⇒dÔñ#ý¡¤eÚÀ¬4X£"ƒÈ¤Ç†/朠Åó@‡´S{ÒŠ\RŽ”Þ{RŒÐ§&ØÓ^)sÖ€sGJ@Ù¥4R÷¤Ü)x4JZ4ÓJ;ÐÝ):PÑþòƒõ¤1£.Ò£”úZŠ(#ˆ‹zcÙÆòäg¨êqKŠ.PÜ[‰Ôs´ŽA©hï@Å Â@ÒÈ/@*´Öò‹†x×vîþ•£E¨Á»®*½ì&EVA–Sš²:Ðh6åžXpÆ:äTÅüËU*1Ò®cšQŽÂÄeÇ [&äŒb­iÌ ¸¨58†,ýÁÏZU‰#ûŠŽ¢Ú"lp*pÈΆEËgå5aÕdR¬2 G¤Q¸` #¦M²“q6_k^⦆%‰d wÖ¦šÖ9›vJ·¨¥KuŽ"ŠHÏVïEÀ§§†ÈÏ&‹”æ’1A§»8;yî)€Ûv,Ù•Ç#Ò§úÕXU~ÐZ<„#Ÿ­YvÚ…½!‘ …/‚¤.qš•PeT™ËBŒp2ݪIy¹…OJ,n’xªÄ‘¬˜Îx9â¡››È¨¸$\EƒŒžhg¸ªÓÌÂa¶ÑÜÒÃ1mêNJô>´XeŠ1ÍAí$&Lt©PÑyƒ¥ @â£KˆÙK@sR‚:)¦E€4óŠ£z‰´0ûÛ±Mw·µ%*Œ(Ôb 0Á‘Ū€iÇ€O¥VŽð1#cq×1·ŸyÎi¯n²L²ÓµI‹ ÊŸ¨§Qp2•õª‹m0ù7™«¢“ÚÀ¯,O«,Cv1O…d;žO¼Ý¥L(¥p)Ûyßha ;jàÔ´PO(ïN"… ¯Zù©Ýèï@ ß4ɧ ( óJ:æ€)ØãÔèi½8-q@ ^Aâ€x4¸#¥ b€ qJ:R…9Rf”ñAÍÑ“šUS[ï RHéBœõ ûпtлڔ3H§å4ÔÁÐ…/zÆ1O¨hÈ4zÓUx4îÔ/JA÷y  uÍ"æ”u¤hBHäsC)ÀÍ0ÐÒ“ÇÓÓ4)!s@íäsIƒHW&ŒäP©1A84nÉé@£ê<Õ 4EP|Ã"•UWî¨v£42+Œ0zTbÖlìät©AÏJLñ@4Ó ;eŠx¥ê&µ…Û%*cE4*¢íPôÛD²ù~j—µ®(EQUß~û~\uÍ^Z[Bòù±>Æ IE÷’Ïòûµ%Ý´²Ì¯ /­>O.S+¹g«FÀjƒµwuÇ5F5¸[îAÙŸÂ¯æ– Zν,nSä;Põ­!ïHÜàPG.‘RFìÓ/åW·E\ç¸ÅidfªžªáNàV0-ÌQ°v^*+¢ð$Q8'ÕüqM–$™6¸È¤K»Xüƒ" 2޾µ5”ŒÖŠÏéÖÛZF+éS…QÕc EsÌU"¤ªð[$Rr}jÀ ´ÓÇZpQí@ÆÑrTœFçó5| Æ:Uy-·¢€ØÛß:ä ÝÉ¡^íÎøã4˸•U6ñÍK(Îih ñF)¥-4šUcš<ÒòÓ†sɤç¥'UëKîhγ@œ.E!$Gžô§îÐy\PË“H¤œ:-–Ÿj‹v£øi#f€žhÏw&u4ÏÖ—4Ð9Òð 8ŠE9b=(M"Œ14¦ÚšÔ5îÔÆÍ*ýÚE<šUû´ƒ© _˜“J:â…ïA?5e©Aô õ§3šuRRih¤¦!{ÑERÒQ@ E“µ-Q@-%b€’Š(¤¢–Š)(i)i((¥ô'j:v¥'Ö€zÐ9¥=)F1Æ(0(Å”P€¢@\ÒãŠ( ŠZJ@1@—µ/j`¡qKK@ çNƒÍ(´´”¹¢Q@.(ïI@ EŠ(4RPÚ–E´”´”QE%´Pw¥¢ŠC JZ(¤¥¤ ¢Š(6–’–˜ÂŠ( –’–€ d¬Ë dÓé²’"o¡¡‚Ì(±îi£<®Ù!:RZÇ¿×5 ªsŠ¡Å1ìÄtõ I(ˆHq´ö¦‚eµuÇÌ)$qö ¹ù±Ò€-w¥¨íÿÔ®}*J‘‹HzÕK’ë:…r7TžcÇ*£ò¡§a•SÔøPÈ­Ê(¥'¤1‚$»ÔfÜùÞh~jÀ¢€+´N²™#Ç=i°¤©pÌËÁïViM;…ŠÆf[Ÿ/ô³MäH'5`…Üj;…ܘ >½¨ɇPøÍ:QìWÐS±‘H 7¿ëã­Hv(cÚ¢{]òÞsV nOf00%§UXîcÙ¸±üªÄn².å9€SEVævI’0pS@½h5VK–Žu”j¶H  ÷(ò}ÓÔÔÈ¡TØb”u¥ Rõ¤íK8 e ÔZc"°Ã("¤<Óq@ H#ŒîUÓ袀4K*moÃÚ¢Ž×k†w/Ž€ö«Ñp kfVf…ö–ëO‚)’ÝMIɥ݅§p)ÇoqxÓnÖïN·‚X­¤CÃF*ÒœŽ”îÞÔ\ æ(E1 #-Š[Öo: ¼ä ¼yòö4ŽÉãy ±ˆåi¶Ÿ-ìÀt,QIç<Ρ[TvÑL—.ì¼6h)yΓSž hÇ-yÝÇZ¤æF£x‹1èÕ3y°Ùƒ. fŽ•^Îgš#»ªœœZCPÍÛO­Sµ–y÷.ð6÷«Í÷Ò³´éPÜsœÓ@Y·¤Gtýj#s:Äe+…M2"Á®.p~ï½G3ﲤÜíü4XEégd€Jªêj¨ªÞQÁ8&œÎ‡M8#îâ“O m‚ ÐÐrük7R¹ˆÖn+*ô±7qÍe«ÕV‡ a”g"’Â_6?˜ò´·,OuªˆŒ–,ãŒÑÐFÚáÝÇ®3Ž*BãŒsšÏŽšÈ*ãš¹4q¢±É¬1—w&¸1èjm£’y2Y¹Îi5Q•CR‚ËmÑ“Š}:Ñ$ŽY‹w&­f«[] ‹¤뚆’íä;Ê…8  ̡Щèj… )w*n$-Ii;xä9(zÔvÊZêrÅ/njk´üØòê!)ó^?2ž¥‚áÞáâ`2£¨¤ÐFx§UµbSø{ÔÐÝ”ÄÊU€¢ÀY¤j¸XØ. 1ì)b$ AÁ_¼;ŠšŠ®·±0ÎH\ã&¤’Tw¹ÂúІ—Ú¢óã‡Ýòžôôuu܇ úPQ@-&iÔJ^Ô”´ (¥ ëKEcQEbŽ´w Š(RÒQ@Š(P:Rw ¢“4R´QI@ƒGjJ(¢€3ii)iŒ(¢ŠQE-2efŒ…ëO¢€"Y# ÑQƒä8nA`ÑõîTWŽÙÈá˜æ’F?fPØ,ǵ[ëÅ0BŠÙÛEÀX×lj¾‚žh¢îrnSE<ü÷+æè)“ö¥b§¾)g?é10éëT"ijÈP71è(ŽPùÈ ¯QPÊ?Ó'–8‚;6ì“ëHb¬ñ·!ºTà ‚1ëT‡î¦‘ ›¥Lñ…µ#¦h°ŒRžj›el•9+ÊcOñ5 “w¥ïUÖVY7 îô«€GAKÒ¢óÌÁaì) éKœ´Å`[Ži ò+î#oj”ôâMiX)8' ¥Ý‚ f€ÒJÜŠP;PE*í*F¨@àS¨¢àUû1>nî3Ò¬šàÐiÐÛ ù±ŸÖ¡b°¢;F}½ªÅÌ^tXsQK³Æ±”ÛŽ¦˜˜·`›`IÏ4ø¾xW‚1ÅLУÐRô¤2£Üyw=¼g­[ïÏzkDŽÁ™A#¡§Ž”˜]ܶ:ÔVØ$ýjÌ‘,«µºS²,lŠN 4"@ £g¯ZKGhí]•wzT¢Ô$EØN¶ƒÈnÝšÄBñòB‹Á…Fq'j´ÜÕkˆd$¨»±ÔP2²“àL2BkS œÕ7ŒÜH¿#;…KrDLz›8ïI·Þ ²24gÌÎsÞ¬AR0壵&Ü RŽ˜ Ž'=(#  õ æ‘X’xéNè)£½.ìÐO‡ëIÕhTñJy‹÷);NhÊ~ZwQL…èhüQM/½&>\÷ Òô¨¹ò÷gš|`íÉ9 u Ðx¦O4ñGÒšrEç4îô¤ÑÞ›»œPúиtÅÍç¥/CE41ߊq PGÉB©éA¥ÍGo•ÞýêLQÛŠMÃ8Å0¶N8ªfÜÈOÖ¯²+dÕZ¹SëL °1ŒTkjI9ö©¥¤&Ù6}(†Þ8s°c5-'z\UiìÒi73jÐâ’‹XÙîÀ’Feªc˜Œx‘ŠÓNh¸Öx¾XåPžõty¤íJ 9áY¢* ª¥ãADÌWî‘W¨¢àR³¶tfwãwjd$ÙÉ&õ%Xäb´ 7†÷¢àQµˆ³K3)¶’ˆå”°![¾+GÚ Œ`cÒÀω|ëÉ%ØZm³·JAëÀ5¤@¦"p@ïEÀ¤¿ò}ØéÅ ÿ!N¿ÃW ¼lÛŠ‚}iÚ$“z¦×4\ ñƒý§&N>^*O)m|Ù݉ÝÔSî-„Î9GdP-…£‘Ë–êMV¸d6k„Ú„äJ–ììüvÀ Ùn‹Ëi ¥JÖåí¼–làc4 Š™ÈþšÁvÚ&;ŒÔMm;Áå3€ qŽõ=´O!ŒŽ&È'­(ª6ÖóGtÒ9ù~µt@8RÒ 3@Ť4´h´QÚŠ´éhQ@éA ¥©-QGj(¢ƒÖ€ :ÑE%-w bbŠZ(¢E Ž´(¢’ŠÍ¢Š)ŒZ(¢Q@ Hih Å´Pv¥¢Š)i1K@ZcF¯Á§Òw ¼JàdtéDqˆó‚I=Í>‚x¦2ÂZጴùT¼N£½?µN]ÿeìh¼ æÇÏSNŸå»F< SnÏïa'¥Y–Q Œ±è)#Ÿçãi=*¢wDãîç­?ëaÁç4¬2ËLŠáàÐŽ%H8¨&½‹éIrP¹L‚Çš,æE,0ÀÓɪF6 Å÷¢äâpàúQa\»À4ê©#˜¢SÇ 4ɤš_›$žh°î\à7ZRت³Êð¢·SÞ–yš=Œ@ÃR°±@¨å™bŒ1çÚ›ÈwØÊPž™ï@niÆšzÒê)¡€ñJ$CüB˜Å(¤È##@…<Òt4´P0Ôw£éAÀR}(½èªÖÓ´å‰\(<³ŠNôw£’ÜØÈ-¨ œN…€#E:J̪õ  ƒF3J(€ ¾”„v¼Ñš€n(ŠSAæ€ qH íÇzvih<„w§' §u£­#SwcŠqëKé@  #ÎM.§”‡4ÐiÔè^)SŒÒ‼P1’hÆZ” óšŒ 8§´ùÁ Œ¶}(F4˜ù¨Áɥ瞔^üT˜;óŠSšAÞÔ –¥í¡Ðž”‡¨ úRÈ â›ÒÐRëH>´ØÒ”ö¦çÖŽ{R‘Òœ3·š(ëHN(SÎ(ni±ô§Dï@ žh´I¥í@ NE'jkp´¹!hÊCÏJoAÍ8r8 fÛOŒÔOœT‹÷hq“ÖŠ;Ð:ÒÏ8¥#½5ºÓN)€Ðrq@ëŠÒ‘¸q@'œRƒM#œŠv(âšZ(¢ŠZ( Q@‚Š( ¥¢Š Q@ Þ—½PKIEQEQE!…˜$ÒÐPiO†€Š(  Ú(¢˜Å¢Š(RÑI@Q@ EPEPÑE%-4”1 ¥› ë@¥Ò¶NÓ´f§ã犤YM´†4!O­I ͈=À쟥4:—+Ÿ˜v¨ G*Œ\íÇ4/úT‡9ÛÇ4X Ï™ç }Ê~9¨c•ÓFz Q6_r3Ž(MÃ¥(Æ3Ue™’åU{õ« € ;w5Vd‘®ÕÂeW½XF ÊœŠxaÓ4u£œQÖŒR dHñ£™A§§Ô܉$1í Š`Jñ« R8¦,«Á'¶M4Îëp±2ŒœÔæ€"’ ò«îÁ²D$B¾´íë»nFïJwÖ€*¬WUb»AëI"¹.Œ…û¦­†¡Í/¶h¸X¥$. Õy"›w"²¦ß^jÿCTµAÇ\ÓLC®Á0ô¦^2•Œžjâ€Ñ€FA†Þ">à¥q•oGúž~_Z”À ˆÍ'#§,‘$‰±‡©‰lªá‹ÇLÑq—UlÏ¥)9Râß,€œ’8«¸Å!‘w¡ÝÓNÚ0ñHÄž: »21B©ªÑE4P:ùy,{hLl1³Û3–#ÀÍI ±³ÝŸ˜Í5‘Z24mœÒÛ#5«&Ò=hb2=™rçpÏ4°LÏo½ŽYj8äòíZ"­¿žÔ¶®ÍŽÒHê(ðË+°;¨ô§M6dòTdžµ *-ÄfÎï¼jPŸñ0mÄŒŽ M ª Œ.ÒE'ÚØ†uL¢÷¤1F.Æ%ÊœÔ6ч€‡r£½òȲ(eäi’ ¤ŸîѪÄ6ŒpM+ý×ôÅ!•ì[dž™ëS¡„tǹ—­‘žM2Ï&Èã=(fÞàM1N çùC;ª®ž£.}ð(HÁÔ[“ÀÍy˜*’z ­gæ¶çv;IàS%—uÚÇœæçÎh‰ÎA¢ÀZ m¥˜“ÊÌì ejwžAgi,ÔX.]=j¹šQr#Ù”=é°Ü4„¡eê(Žå¾Ôbaô¥`-Šhäõª²Ýˆæòðimn’9<ëE€µŠ\Uq{lsŒõíS–ÆPhi¬ê‹—8»¹éPÎ#—ý¹ÅHÒ"ãsž”‹ Ï&©êyã±Å>p¢Í¿¼4ìßÖ–«ØmW<Õš@(ÒŠ\úPJBÊ ýir(ö¢Ž*Ÿcg<šžŠ†ÚàN„…#½IŸš€:RRÒPÞ–ŠJZCE¥%.3H)KÁ PŠRi(Æh¤Qóg½-½)æ‘TŠ3J(¡O4å÷ “@ #šR8 Ðh¸âœ£QÚ€†F)ÀqŠZ(iZ^Ôb€çSèÇ4P@Ãf·-š)Iö šPM:–€ 1EQE'zZZ)(hïENô´”´”Qš -Q@Q@Q@%)¤ bÑE% JZJ(¢ŠÍ¥¤¢˜Å¢Š(QETSËå/Oj–«]”ã’i dìûc,GAœTQ],·z˜®Sµ* UT ÝèR@åQÈÈ1š°öˆòù¹ ÔͺaÁ¢àRHZ[¨œÕÈ“lJ¤äUþÄàm÷qV•B QÐPÆ ?5PÔ@WFI­ƒ9ª7M4€¢‚«ïB;Óû•ç<Ô·ûûh»‚G‚0‰–š'GkL;ˆéLAnH³ùNÜÒÂòÉdX¹ :S­Ñ¾ÆÊT†ÛІ |»Fˆ«oí@G;½žö<ƒÖ›²²†£¸¤·ÿ{eIÁÎ*-¨ó1QHédûZwÎ1Vg™­À%sëQ]—P“ØS¯_}¶r=½é€å¼ÞÈ7zYdIdòÎOâ–ºÙŽ@ªÖÊÿjp +zÝ£d+x"¤?{5ZÚ%ŽY6ɸ“ÈÅYÆ &2¶ÆÏ´×"ž·ÌO>•NP?µ-×Ëw^¤óNÀXždE+¼ôÍ:7ÌA²¸ª²ˆ·ÈpYñÏ)¶ý‘ǽÐ ‹2“ŒÎŸFAâ²-¡ó¥‘sÆ´­¡0ÂŽãëCB%Î*–¤ù‰vç;ºÕ·éTµ.‘ÜІˑd@™ê§†ªÞL`·êx¨^WŒDwä7ZVA˜tÍ(5JyŸÎ(¬yïSÀ]ÑKõïE€žŒÒtSš§öÖ˜Ú"ØÐÊZ©ÆdA éI5ØYü²÷  „ÑUÒ´¥yzæ—í‘îÀ'ÞÇkµÓ5\Ý$donCOûT'8æ€$'"Æ»€õ¸BÛwŠ|«±…•€ïÖ€'V¡”äSÒ›,qª§Ý”2· ij=Ãv*E›¹Å.pi€æZsç"€Ûm.i® Æ)qžhàäQH8¥ Š)h)i)hQE CE)¢€–’Ž”´QEQšJ@- (¤¢Ž´RÓX‘Œ Òæ€ô”½é(¢Š(6Š(¦0¥¤¥ AEPUnX£\ô5j¢±ÉQšhè*¬ d¸wíŒU®ÜÔqı—½C?ü}Æ}©.ÖÄ*i£/‚½Wõ¦ÙæãéLEŽ‚ªOµ.8¦°Ü¤{R^Ó÷ŒîÜœÔËÉËŒ`ö¨lò7©ê XÞ›{LDP ²Kõ« r8ª‘ þiÉàÓÒb¶¥ÏQH =è5WÎpÉ7j‘ç).¹ÏJ,2j^µJŠã ;Qç&ò™Á€QÒš’#çkŠ~ELàT7D¬”àŠ›žE)¹/ ³u"¤9 €`Tô5 v©›—"¦Ï84¦€+½²¼›÷0#¥*AµüÆrÍÛ50Åʘ)VäÈFA÷¥@ðLÿ!enF*ÐhEÂÅ+wat商ïj’I6\ªsóU¯ÂšcV`ÅA#½ ÜH"Pägš|r cÜ)dEu €i–ñyQìë@·Jιæê<žõ£Tå´‘åÞuãŠ2̯åÆÎ{U4ƒÏˆÊNÒ}*ñ]Ñínr9¨)"‚½³Ú„YÌÅd?sŒÓ%•^C"B š q¶îKri³Û¯4úˆ-[u»äóUì•Ù䶌ի8ŠC‡\5D ÚÌåØÜæ€m!¼,Gz²ÇŠ¥o=ËM‚ÞŸsrc™So½+ ´rG,ÞPÉçÚ¤ÏËš©}ÈSÜ)óvU†øÊç§½I%ÀHD…N*¼ŠóµJ˃.:f›±¹t BŽ´ìŒxÙÅ:©ZÈÂåзÊ*ÒÍ+ô¥`+¬¯<îˆÛ}ºÓᙚf†Lnýj¤€ÅpÍnrˆT–L+3æšb4) &yÅ#bÊæäý«ÊÁ5nª^…ÞŒx|ñïSG*¾@<¯Ph^ÔÇ™#ûì8¶1Y×,âg;AnÀúQ`4T“”`jJÇi<·ŽEIêiï9u¦Ð–­7<Ðqœž•nÀê)- Іë"ÝŠ± äPÂŒzâ«XHÒ@ œÕ“ŒÐ(#R,h§r¢ƒê<æ€#’—ï¨4=´NYxjJ ±B‘.ÔÖ©#n«zбÚð(-Öí$“Ôš›擞´¹Ü8  ÙmT â®%·ïÄ®ûˆè*¼–×kó)çŽjðÝ‘ƒÞ›b+5«‰]‘Æ$ëDïn².Cg•«}©:Wi ðÜÑðÝNkDõ¢ŽôÒ¹ëTubÈX…ëWûӱŠBî6šÑT’¸8Å*HŒ©\¿¦:Uà)Œšw…ÀŠgq!ØéÐúÔÚvãn g>õ;¢7, Ó€`p(¸¬²qªÝÿ´óYŒ7jØ##ÿ­B›"ö%P7 [ÎoâÈÍ^[xÑ·…ù½ME%ŠI!»?¥+È‚F#œS!‰¤°ÚBž¦¯ì6·<`ûÕSbà•Iqþ­yËh†rÆi÷Ê«mÑJ³qdf_xäSn,¤™P =(¸Š÷±¬pÄTa²9§ß(6(ÝÆ9§ÜÚM2"îS¶Ÿsm,¶©ã#­Es+Gi )ûÚsÛºÉJ÷Ži^ÖImQ[DéRÀ×,ÁdE :ŸZ§>õ¾P€lqš²‰$Bf,NGÊ Í2âZù$TÊŽ*Üèí 1ýþ€3íÜ5‘+žTÖ™ùˆ¬ó³Ë1l*~cZc¥ œŽ”›ˆìiôv¤18§R Z(£µ€Š( AEPQKIŠQÍRÑEQE —¥¢˜'zZ(QE LÒ÷¢€ÑA¢€3)i)iŒ)i)hQEQEf€ii(¢–’€jP1GzZ„Ç/Á=¨Hˆ‘œ¶I7zAL,VD’0ügw¥5bf³)›9Å[íGj.+£xŠ¢àn ×ãØU£9ÀÏÒ›ä¡mÅ~o\Ð*A¾cžÔ Íä„úT«nˆû†sA„ù¥Ôã=i¾ Ä„t«`‚j(!h¤v$j%2-Þ¡¤¶æE·ZªµéŸ^äІÔŸyk úŸCW K, d ´!ƒçëR‘NàG "“z¯wk$³R1йAÍv€;ÒJ¬Èv‘ŸzvqÖ–ím剟~ÒÒ£Š)£¸v1äCZ©´î(À¬.ßz¬1VÒmÊ55¥•¿ú4ò,œn9ˆ—}ñt ïW ÁÒ€€Ô\V+Ë:¥Â©59äÔrÚÇ,Îr*n؆S¹•<ô]¹eæ™n¿|õ"¬Ël$H«{SÓdÂEsžùïL 2}…2eˆàËŽ;š”qU.­eøpv¡–'¸ ÀEà ¼ß|U°\)ʾH«è‡ ¿–0)n77m$*ô§"Én%fû£•¥x^ £*.å=@§”–ádÈ*¤`@†Çç5¹ŸÌ õÛڜӴös×Ôi+Gjbtmø `RùmœÊßxö côñ‹AVTŒš«`ÑNLñLµº/)Œ¯SCð£<FEâ3ŒÓ‰!sH8Š+@íͳM䣪†ÄÒ§z:P§šu- ¢ïGZàÓ7 \Ša¥ÏË@ŒÓS>”¼Ô´R/­;¨ÔÖ8éG;©1óÐù U¾ÁºO5e!5iúR§Üæ‹€ª¸P Éõ Š&õ cµíM$‚)Ìp(PsÛ½“Ž(4ŒvŒÒƒ•Í1É' ( ŠZ( ƒÎ<iƒƒNF$(Ï<Ñüb‡í@ÅfÀ zk®E( i{Ðè´´”PÒQE-Q@Z %-ŠSI@´”´QEQGzJZ)(w¥¤¤i)i((¥¢€3(¢Š`--%´QE(4RÒQ@ E ¢€–RÐMbI=;5ÐÌ’@”À•X:îŠZ‚åZ†>™ Ìê‹!)¢ÀNsŠZŠI„{r¡§yªiàž”€y8£¥C,â7UÆrqSi€”›8sÔS¸ R;ÒU˸½çå<â¬j6.Ü`b£[xÕ·sRŽ”Pi€IÇà‘R< ñ'“Îi _w=sŒÔßJ`Vh¥‘V7Úu#½%ÌO±B ŒóV‡½\ ‹§Êx#5,†6“l£å#ƒV!Ub~´\V+ÙîÇUƒSIþ­ñ×SÔÀ}(÷ e["»zçš,ŽD§ýª”Û¡rA#=pi±[ynJÈp{MõªV¨I»œty#‚ªðÁ$;ùSšijbc`Ç$6бŽC’H5-´/¶à2O¼sD’ ¤È4Ä2fqûÂA§\!71äç&˜Ëæ2Œ¬€óRÜ‚“Dß :iš2ª§æcŠ<É"‘­¹[¿½2å)0åAæ’å„Ï¡Ï9ãµJn.V2 Ò–{Ÿ&P¤uî*¼¬ì|ô4·GuÌ@úÐñ\ àŒuÍ;íkØ;AÆqL¹]±9Q‚Gje¼>m˜]øSE€¸y 8M2$òã @ïJì 0†¤c|ø¶çx§‰†AãÖ¨Xį …€=¹§Yœ[È à)Ø Lë‚7 $"q=+>ED€2’_=j[ÅÍ¢¿qŠ,äpèz2=j´k¶Ì`ö¨ ö®wsE‚æ†hëÞ©Û4lÇ9lœT1ÝÍ‚vîÅK½öªÒ\22Ì:S¡œ³”uÚãµ „&wd+‚¾ô±Ý+ÊcÚCZ¯iŸ´N}Ïó¤ˆçPûQaäP*:G튙]r§#ÖÇw ÓC|Ø¥ÈÅ Àç©Õ¤úÔƒ¥-.3Iš3@ Žh ƒÍŒÆ€*¯ÝP=i« JåÕ@oZ’’€Pi;Ñš^´¨¤$†€@£¥`g4ct¢€“­!lP(šS@¥ í£qN4”€æ•…{PŽ79¤ç8§õ ¨É¥eô¥Qšk}Þ”©ÂóKJ(Ó÷©ÔPcšVéKGZaãóÍQÞ€-“RRt¥ £§¥&h a¹¥Ç4b ‡†°)ôP1­Å&HìiýE/‘š(¹ @)i( Š(͵%PKÚŠJZNô´†€ ZLÑH¤¢Š`RÑ@h¤¥ ’Š)RRÒPEPeQL´‚–€ (¢€ (¢€ (ÅQEÀZ))iŠáK@Àu©©0+^Ш RJá­ƒÉÀÅ[¦yQï ´f‹…ˆ.Ë>´³ô¨¿–X–Pê:a·Õ·—Ö˜†Îªnc‰œ™’!÷O\S¦‰Œ©"`‘ëI$lY$Q—^¢€Ë †NÌqšµPFÒ;–uÚ=êlñšC*°'PJ‘æa#*¦BŒ“Qy€ßþ¥33‰s… Æ)ˆ³‰:Óª½‰ýÇãVr1R2?6=ÅwGZx9Õ;ªv"åÞŸ'ú5®¯zv –FvªL†VUc»‚jYglFª~g¢Ártç9¨$•ÒåPc I¾[sÞ™!-|žÂ‹piqP™öœ“è)ñÊ$$`†A¤À¢‘W‚ÂGŠÕ˜¨#4þÕ^4\ºŸ˜õæ¦S‘@QE :b§ŠÑc°cÍ ´)9?^ÔÀ‚g¹”… Ž9«qK}øÚzHöì’™ Ô|QKo–ÜíÓÚ€7f‘xséU-|ÑpÉ!ÉÆjòŽ´†gÆ ÕÌŸ1 ¾”èä’Þ9<Ìü½(XÚÖᜂQ»Š‘•®aWû¹ª2ùFãÌ9‘ÚŸ$Îm|å89¦y˜¶1m;ÈÆ1DÈb±ÀäÐùóÇ•ˆ+Üb%ÄÈ¢BCQÎãì ½Î)×n­g 3ž”X ÚwX„ª¤ŽôÃs!‹Ìv÷§9ÿ‰y*†‘?þi÷¹Ûl%œÓc½\) ḨS1©ö‘†¶O”œš,ó]$o·‰À¤K”s¸g­V'Pt=³R,>\ŽÙvxX "ê]ÛÆ*Dtq¹T4ØÕ–F`8‹ÂMžwΈ¾Ýã>”æ`¼’¬¹|…¶o/%‰ÎïJ³*‡°º…àÑ`,³Ç=é]Â.MgÄ»ìAbxÎ >Ü‹<;sëE€µÂNNÎÕ6EeéÑ僃ŒzÖ“`RhÜC@>õŸu$‘º²ð3Š’îY!òاQ`.d~4Tç™ãˆJ«œu¦ · 戾^üÑ`4i*8äÆwâÛc$ö ÐzÕzÁw2¤à±$þ\^ij—Ͷ—$¨·q6üªc *·­Nh¨>×#æëíK-ÂDÁY°OJšŠ‚;„rB°$v§‰ÑxgТ’FeÝ‘Zq‘v‚X`ûгŠٴyQ–ÜWšxQLÇÇ£Óé¹À¦ù©»€4€‡ìò‰Ì¹öÍ^Ÿ˜ž*ÕâÂÅ&ß$"„çµ'•$O”u«´ÒÀ#"‹…ŠûÛ¤ÙÎ=('Ê=ªÚª§ÝP>•ÁÄ|Þ¢ÄBƒü÷SØ‘~˜þï5!‰dÉ :Tˆ+ï$³zÒawÊ$äçŠKd"2Ç<œ úRDI$(@_~æŸk#È>2¼P"+\y²ãµ"?˜ضGÝÅK2G+îÆ‘7[3)BÊO¦¶Ò³Å󃚒FÆ=;ÒC¸¦\`žÔ’)d#<Ò]g’@Î¥B¯cÞ›w#In¬8’ßb+, ={ÒÝ`Û)Q…&˜‹VûÄ ¥¨á‘]0‡8Ôž•#!K•i9«*ÈHäuZÛ{/Ö–#›¹Hæ‚å…™2Ww"¤Y†#­QE ~xè9§Ž5Ž˜¢À\^´Û‰„ ¸ŒÓ…TÔ0ÑGÌ 1¸d ØóOVÍW©ÛÇËš«sK+! ‹¢ç£š«p¯æ&dÂÏ4YÌÎdV;¶ž(°—Ï,\ì*MÃvÜŒúTJírèHÀéUÔIý ÜŒõ¢À_éÍAþtŒáGzt³âµ ¢•À‚{a+S±Çz!·Ùn}ÌÝI«¥Bó¬nŽ3EÀŠY! Qϵ$6oug7¥[ò)qšwØå0·.Ú•àÚÀÅYoaÖªÅ"‹¹Á¢ ¶žê½sE„LoXÆdTù3ŒÓ/Ÿ|°?)4ë}¦À3ŒäTw[M¬eGàRɸBÊ<ð 뉒 gòª÷àáš§¹ŒI^äqE†/Úãò„™;OµËÒ¥¡€ \R´´¤qU>Å™UžBÁyÕ³ÒªjR×þ=‚•ö"‹)"8ùX­4en¨Ãv:SŤaîW¨É{ºN„` VûDáÜí)ØÕÕ$óTî5ÊlÆìòEXy–ùè`M»šù±LÄ‹¹zzži MØëC7ÈOëM”…^N*¬²;Fr§ËýhÑÜ–˜Æ¼Z±‹¸©aš«cÊòŒð*']³©ÝóUagÇzR@ëU&[´pçæ=)²0’g øDéSa—iIâ¨,Ížâ~bxÍ&ÙÃÆIfÏZvÿjSs1ÀñéUî£2FÊ:ÒY]þ[lõ©Õƒ(e<sYé;,>K/=LwAbA<ûS°›¨Ã8ëNŽ@ýþ•B"¹ö¹ëSÁKfÜØíE„Yóœo\úfŸYác1ç¯ËϵKa+4DBœE†['uRm9¨ä˜C )&à:œS³T#¦¤rw·NjÕ¸e…UÎXPÐP)-TõÒb—µÓg9E愊}*)ÞXÔº€@õ¢Òs:#˜ mbbx#=pzÒÉm )¦ KKJàW’Í(,ß/Njo•@8óUn-ÚvdÚV˜ o7’È:*yàYãÚDù1íÎORiý)\ ­k,VG]ƒÓ­:êÕ¥DXÊ€¾µdr)¦hÔí.ô¢àCqnf·QÑבQJ“\*ÆÉµG$žõtš(¸¯r†8hßWKº&xÔ—0ÈÒÇ* ìê)’Ç%ÅÄm³b¯\ÓËýÍ,xVùNN:é–)À%GQнô£¨ÅQ'ŽIÔE#»c¥>{µ†a\ç½N/EéLh#‘úýH9¥ ¢G^´€Ê8¯¶ê³¨€-{}áRµœ I)Éïš’KxåU2 Í;ˆ­pì9ÿdb¢œ¥&ïZ´öѱ™§OÍBJ¨ì(Þ~Å:df¥¾UYôÆ*q¬>[ËïQ½‘6™Ðušÿ¢Çô©©bdŽÔÛx nòÃíQ[Ù˜nRùÏjXÀ[Z~8ª:„$þôI·héVíóä&zí¤!ç¥SÔÇú.ÚtÕk¸$¸]ªÀ/|І&œ?ÑÖ¡¼!çXÜOJ±g !G#héŠ'µH²¡Ä‹ßÖ˜ŠRÁ%‹ ²3Ž•{ÎÄ®îFi’A5ªÊT(98©Œ1¶Ý˽3C›pÂ5Lus¹iÆë"§"©ÝY´“+"£­^U  €&v£&F:žkB1±GaTf²–k½äü¹ëZ"›Œ3Ó­‘ŠÎhîZè0,WwZÒÍ!ˆxRdõÅ;­( O´”QEŠ( Š)(i3ERÒQ@ IKš((¢ŠZ);QHÎh¤¥ ¢Š(¢ŠLЊ(¢€3©i)i€QEQE´w¦K'–¹ÆOjŽÕ™£$÷4ÀžÕynY¨\O†o78R1@õ ŠBá[Šu Z(½êµÈ/QéUáo!¥¤±_J«NÐ)¶äv4Ë7Û ™' Ò§6®7,rFíNŽÕc€Æ^ô„U\L3‚Fp*[)C«&"ša–2v"’F7f¤´¶0å˜üƘ‘¹p*•ê‚èƒï¾>aTb~ Oe¤†Å»XŠ8ÉÒI#y©}ÿZ[€EácœòñÔÓ‘;¡#© ŽÃ¥1 ygŠd‹p9ö«õBçß–Ç Ò¬\]¬©$Òc%fÁ£’q%ºv©G#pïY÷Çtñ© æåŒ'+€ÃŽj[fòm×pÆy5 ï/@zT—§Ê£Ž@¦"U½C’CcÖ¤IÖEÞ§z§uˆ­RM ªAÏðŒÒ°­Ìd[¡Á¢Fb­‘š¥i’Î㎴ý4“æ1èNh°ËokUÚ8°®‰(Á=§qLXQ[p^hŠìD—œòª(Œ—m'E ž;uË’Ýi«lRÙã9Å;îk™$ sNòÙ uÏÌiâY\«`5$ð³"í9*r}è´ ;*“µ×õ«ÃîÕU¤¸WPZ··ŠÑVóˆG<ž1O…Z(qžÙ¨ï2 yéštìÆÓ8#&A)x·Tka¼ÉSD²&áE6Å7+È{šVQt!Ürz HdàîL9j+…&ê$J¨Fy²áx§`%7(7c$/ZV¸D\ž†©ÁI7 yÍIqQUn^qëJùhJ…ögæëOÈÆj«,³— ‡šº1I Àw¨.™#t="¢»vܱ/&™r¢?-c8-×ìQ@Å18u¤8¤”µB9¦Yü¼î$~U4rºÜy2äg4X 4Uo=¤œÇ0½I¦Ãs$“È’(°Ãqžh5Cí>\äÁ8É© ¹i¤eÛŒS°—@ÛK})Õ™—’ø°*kD5&¬©(È#4ÐÙ QŠ“#49Û9ÅTÓ£#{°#'½\ÈíFáÒ€þ•DÜH’HýÞ*ÿJN¥V²ˆ¢30ùž§xRN]A#¡§†'$ÒÐÆâ¢žÝ&ÆrèEJ)h«Ùçmã½:h«µ¿:±E;DÙ1M¦MÌ:—ì§ì¦0ß1ê}jÎ(\,WØ´ò{ã­°õFÚÒX.ÎÒÐЄZdI 3Tfpò"g,jÝÔs2m„ž¹ªbÆåGÊãž¼Ó@[¶ -§ðñL¼›Ë¶¸©,¡ha+&2NhºfUã4†SžŠÈIãš•á+`¹b>õÒ¼—1BÄœñVíÄq b*A\ZrÄñJ75Ìp8z¯[EåÀˆG sUä†H®üèÓváŒR„ÅúG!zâ¬ß6Ëbsì*-¦û@•S%ºûT—vÒÊ"Œ`ªýã@äùlŸ;ˆÀ«09[$gÉÀæ’úÝä‰c;;T¶‘ºBD¸É=(&¿ˆàÊ­†Þ€Žôí«ýÑùRþ†7qHSè ôêJ(´ (¢–Ð(¢Š(4Q@4RÒRh£µÀCíJ)( ¢Š Š âŠ`(¤IÚŽ´PQA¢€3¨¢Š`-Q@Q@-1Ü"’ÇŸJHÉcL2+ýà:Sª¹D}§9©ÕþéÍG,-$ªÀýÚ—§Z3“Æ)híPÝ@NjlSdE‘6·JÛœ[séUáÈŠG欋e €Í·Òå®Â€|¸Å;ˆ¬ªÆóœÓægY£ zÐ#™HEÆßZ%ÜÇÁ w idŽ}™Ý‘‘OI²ÅOP9¨Y»ÈàŠƒ<„zqE€—í$’U UêjE•Z=ýª½±ÄNPi ÏÙdôíE€´&B²0iÁ]À䪠 >œ6@/\R°ÉÉ ¼ÒG*»‘Ö«ÀU˜íXE%ª>N{Ña\žA'˜?ËÜT«ÊÕW‘Öä&rÍ?Ío3ÊŒ ŽI4X Éç”uÅW…ñÊõ]¡ ÜàÑaܲxæ—Ò‘¹^:R)4€O1wíÜ3ž”áÖªJ3¨'lã4À—Öš®®2¬ Ea†Ð@+‚8ô¦†R¹æ¤Å0"M…BáM*F±¦Õ•r3Ji\å„HUÃ/CBB`Ç%ºšrç4íØë@Ũ.öÙœí¡àa0•0H H“$ŽPEIÞÂÅx dä|Ý…X< Ç^(<ŠW¤ñ±•%°^ Trïó–VRGaW±ïJ;…†@¬nëNo”“ÚQ]?—nǾ1@lØ5ÓÈÇéšt¦»yGÝŸe›|°<Õ•Pƒ ”6$Qµ,È=),¤Äï‘ó5]òc/¿oÍëBAlYTn4\,SØ&¿Ç^jçY€íÚ‘ D¸1©HG‹ŽÆ}›mbçøÎ*ËOm±Ž ¥ŠÕ"mÜ“Û=©·‹3†,AÔ*ýßjpû´àtÆ)ƒ…¡~éâ–“ˆ>RiT|¼õ  9æ€9\Q׊ÅÐŒ– õÅ­dÐ2"‚ÇŽ(­¨Å;¥%:šH»¹¥'ÕãëJÇ¥.qA"šÇ¥ @ Š\Šo¥|ÔàE.i¼n¤ÇÍ@ã4fšy4ŒpE?4Ln£Ò•½¨Ôfpihi 4÷ çþÔÌþÔ¹íMþ:”RP ´Rw¦†É8 ÑÚ›ž)7t  ))7t£<àОqFqAàÓÌÙ  äæªÞ[Ë3£FßwµZ^”@míY%2ÊC9ý*ßãM'½5›%&êݦ¯Þ  (¤RÐAâ“snäPiT‚>”;m\æ‚xÍ2_»NþPÙ\ÒnïBôÅcé@ 4þ´€P(h£4”´R(¥¤ ÐGz( ¢’Š(¢Š-”¹¢ŠJZJZJ@-”PE†€¢’ŠÏ¢Š)€RÒRÐKIE0#¸¹cÞ’×ýBÒ]0ÜÒÛcÉ\~4 |Îë“Ö‘ËrTc<Ò]¿Ê¨:“S…6ž”ÄWÂ% Ü=êxœ¼`š‚Q°™.Õ, ¶0¹Éi 4’J±˜ðij½ÙýÈó@Ëêë•9ìö¨à…~•¨~Ð…XÐžÔ ‹aiî#ªEäÐÊU•4F·§š1@=º9Ï ž¸§yj±ùcO£½V6ïålÞ1Úœ!‘a Ì*ÇJJ. ’4ÛÊÇÖ£‹tw,¬§æ=jå- ƒ^ñÓܰrFz»œàgÖšñ£ýåî"¸ªI³Ó“Ii=¸ 3Îjɉ6lÆúRC ä‘îh¸ì=ЍÆ@¡jµìeаlvÅYPB¥ +IŸ·Çô¢i ¸ò²B’E’µÊÉ·Å#-À”)Æ0iˆX›ÍL’à‘MÓÁÿZ•]¤BáqÆ{ÔV.(x9 G¿íŒ{÷©å¸1Ì#ÛœÔ18[™Kqšt¥~ÙzÖ€%†ã~ýÃhJOBèi—J,WŒõÅ4Cæ[¦_ 9X UFùZr¸|äUi‘‹«DAeŠ}«‡N˜ ò)XbÍ ¬‹*§<ûÕ…`à ƒPMå™Ô–_áÅGjßé2¨àzP‰£Fy#±ªVŠdFÀéóU÷ #gÒ³mÑÞ967ó¦¶[µ òÅ—±5g5"Lä*šWžD2p´¬ïjB— õR erèÊ÷4ûyžE“wÞZ,oË+ U1L¶¥‘Õ€Â÷¤¶¸i‹†+éM²¼›½q17-§½KUá”Ý;Ž´æ¹Urœ–@¢ÀMÞ–¢Šu”eh’eŒ€A$ö€õ‡ÎVÀiÂâ#pÜ´'j 0JŒ›”äQæ)Ç=hÆŒóM|ÁïU,àžýè÷j4„G¦ŽôÕ9|Sˆ ÒÒ”b€ô£ÞsŠ}¤ÅG4éûÔˆÁÔ2ô4¤ Lf”ÑÚ€ qHE•p ú^´˜£æŽÔ£‘@ Žh9Îih<ŒPß"‘<Ó…'z0x Ò°£ŠLi{ÒŠNôœÐ3ŽiÜsHhäškgx#ñ§Ð(ŒØ¥„PŽFhàf”1@ ^ô½N Nô¡¹"ŠZFëŠP1GÖƒÍ Ò—Rv¥(¼cŠ äRK@8‹ÇŠw½( Ph(¦®CŽ´áÖŒó@Ø¥ïE&>\SBµ;4´ ÒÐ(æ€G4Q@-%-%Q@Q@QÞ€ (¢€ PEPÒ (¤GJ( ÒRÒf€Š KIKLŠ(¦KIK@@=E(p8¢ŠŽXVG OJsí4ê(‰3£ï*sV-²c$õ&¥ï@•;ˆ^€ÕkÏõc×5dt¨æ‡ÍP3ŠHc¢!aR{ r@aß½@ñLcØb§EÚ}WWoµ•É#«,ž{F lyEŠˆØ}­É8¦"E¸f%BW®)ñÌ t¡¶´‡#­6 3 Œò(u¸ˆ#ëR’Éâ©Ëÿ,€] š’nfOÝ4X ƒÐÒ⩈÷\2#£šWbóì,B¨ç¬-š:Ux$'z¶H‚jrx c³Å 4×;c'Ò KT§“гF{ÓULê{ EuÊšãŠ+`‘œS‡ZE`GQMÉÝ@hÍ(¤ ¦íäšZSHÌH͸¨ÝJñ#ã#‘MWs#)\ÐÒ$Û¦1‘‚))Ee*FA¨ÍAûÍ´ =î%A=*j­Ïš]©>ÔèaÎIäšžh÷¢ábÄþjžœÒE ‘NXCu«9¤'4\®þQ“éU­ÖXwnŽ}*ð4¢‹…Šq<’Í󂪒ؑs)ÁúÕÌdÒEÂÅ+yI)õl¢÷þNp£Ÿj.)X%“ž¦ŸdG›6=jȆ5l„ûPFŒYWú."µ¿7Òý)±.n¦ù°Õi-ãI ¯Þ4Ùm’FÝÊ·¨§pm ů¸“Í%Ð-*´L7¨éV!…b\ óL–ßtžb9Vö¤2œÉîQ¸u¤²QöyœÔñ@±«dî-ÔšbÛ2nU“ Ý©€Ë 1üF Š=óH›ˆÁâ­[Àð+ †‘PÅÉ9f^§9 Dʬ±¨s’;ÔGïz· ùKrqØU+eqæ ¬¤ò(I^hÔÈÄpxj6Ü€úŠÏpM±1“¾{UÛnaR})1•Þy"ºÀ\îè*cré0GA’8ÅW™‡Û£ö5,Œ§QŒ‚švñt|ã.Óڔ݈äòÝ[=±Þ¡b¤½ø§_&@‘:­+#Ì<å^A4ÉnÚ9Ö02;ÒÁ ™„˜è1øÔwX7q`f‹. µ&¥‰•mÓŠmï¬qÒ¡•GØFhsxïÅ7Ͱ"©]äÄ3÷±Í-ʬ~´X.;QÁ1‘×5qXöª7§rÂÞ¤S¯¢œ4XEÜŒR©ª öpŒ¬Ýy椙ؼiÚ\u¢Ã-äTÊì†9€y÷ªÌóG1‡væ<‚{RÝI4oÝ÷ºÐ€è;Ògž*œó´ecC†cŒÓw[…˜6{ŠVCÏúb*ÿO­ éN¦ç±¨ÞeŒáˆ€%ïM'œTKsþ1\Ò´ª²,´5÷¦$Èç Á±§nÅ.)*FÁY€' §Ô¤H ‘¼tæ€'¥è*?0"—̶‚3õ ôÎiªÙ8¥ÍR¼™ SËPêZ£ ’;_5e%€É©íf3@† LzP:RÒPÒÒK@©i(´‚ŽhÔ†š ´”PÑEQIE-”´RRÒPÑIE-Ph¢’–J)( ¤¥¤ ÒÒPE¢€3褥¦ES¥¤¥ Š(ÍQE£¥PÑEQÒŠBÀ¤àšSHQOP9¦É¿˜÷§Ð~D}—JAn› Œâ¥Æ /J…í÷`ï98éQÌ3:r} Z=*"%ÖE?2ö§p²æì<ç4Œ WM¹VëNXÙ¥ó_ôTôˆ1df#”Øg `Šœj4„,­'ö€YÎ"b}*P žy«Á Ò’8Ö1…P2ªnk·ç‘ëSEBûˆ9ô§IæÞµ©b‹`9mÄõ4î+b "6}jeMˆ@$RMyÑ€ã½NËòŸÊ€ ·iÙ›#¥I¤Û—~ÕàxÊÜö§ÛöepA9 í/³Ìão¥N¯¹wõV#ƒuc5m@00)ûÜ¡\QFszçýšKr ԼЧý9‡µ0~nâ5`̪FãŒôª²ä]EKx9„¹¢ÀZó<°§nõªwyžäÒÜåJ1RÉÜ V –€B})°H²G¸t¨P+[1V$`ÒYÆ<ŒäóE†[Òâ³Ô9–TÜtæ¦i^ uÎ ‡Š,¾V¹*¼"õ©ÁÅTiž7U$þ”¦V2ùq‘Àäš,“N †o7 Œ2õéfòˆÏ9è =ÃE ÊpN3š|·) ÁÉ犭v䘷)5Oq˜«…ZvÂ@#½3ÍC)Œ6[Ò†q@íPÛ¬k+6àÒid œQEp’¹UÈ#¨"žÒ¢¶3ÏòªvÄÉXw¦ãÖŽ´Å‘IÆáŸJEc…`M IÚ€G­P(óE&BrHï“¡¤bv¼œqL„ÈÉ™ í@1FNâƒ>´ÓomÅ}jAGz.#[h•÷…ù©Îéå¿ àÓ›§[ìCÍ/¸àžE0$´Œ%¸÷æ›=·šêèÛYjÀ(®[¼ù~gÔ‘ÖšÖÒqñS<ÉùÛåue ÁïNà@ö¦KuŒ·Ì½ FÐÍ0º€©Í\ÈÆF¡XÅìNÞZƤ…æ–h^XQÂüëÚ®Qš.(Ê$¹(prI¥»%‹Øc"¯«w™£.å^¢„Àˆ:%± Yº)/‹#IÛÍ,»®gMˆT/RF*õ)\©fŠ`¤¨ê)èñÉ"ˆãç¹ÇJ´:P  àEÆU¸º6Ω· ÷«Hwa±ŒŠC> ($zÓóØR­ùÙ³×µ7NÿrsÐÕ©#IdP‘$k„PëL VL>Õ7<“J¿òr½1Î*ÊÛĤ•@ 8" €Í§ü~KŽ”¶G 'çšµ¤q>õÎ~´=²;nä×­^ÛÚmèjÔÓ$@n`2x¨…œb]êÌ -Í¢Üm%ˆ"“‚ç5Iÿä"7Œ®8«‘(Ž@ªR(mD*’;š¬—ÍÇÈ?:õAº„3A’Hï’2À©©§µ3LHFÚb–éÆEïÅHÒ À §ãñªce¹ó|Î3œRv³¯€±1žµ¡š«=¤“\,À 4 ¾tx<“Kz‹q:}ìòj{«c>Ò)Zlö²Nª €m¦!ÒÜY~F`GjŠy#–dVþun0ÉV9#©¨îíþÑÚpËȤ2‰Žâƒu®jд™dƒp@ëQ¸1ùfHÁbjK{q¹Œó»®(Dž) TpO¥IU`±H$߸“V©)sIGJ\ñFx¤w 4§ÚŽô¹ PhÍE%-QEQ@é@ IÞ–’€ (£­QŠ(¢Š(¥¤¢€ŠJ)¹¤¢ŒÐIE†Š  Ï¢Š)ˆZ(¢˜-%´”´”QFh 4Rö¤ ¥íIK@Tu?kO›5k½V”ìºW#åÆ3M ’Ë#FÊ4é$ B–=ª˜béÜ‹Áž„q@¤ÉÁ¨¡ÏÌ8ëP‚~ØØéŽhˆs&Gî 8 Ðj´O  Õž‚Ž)’±H™—¨§gQÎG’ÿJl2<±“Àô4A+¼Ž—½6Ï>@úÒ@çí2àpM1ê8¥tõ¡f žict|”üi Wpƒ&ˆäY*sAuÁç5^Ëý[S@©~”Ðx¥bÊZ€å!mÅ>µ!Å@ó„ zš˜(‹jû”`Ò}|Ó&N~´}¥2zŸz‘\:îS‘@ÉmºA&ã‘ÐQ5¹) ½*Wuw1À¥V »‡ Ñp+<9F,2§š{,«&@ܤr*r@êqFsEÀ¯,°È8³Šm±‘aSÇz·ÚŽ”\,Q…d³2Ô—Ñ’ÀÎÓÍZh>”\,U/  »ŸùSUº3€Ý*àES ~?ÞPqEÂÄPùE›ÊÇSQ]qw=*Úª¨Â€$‘$£3EÀ­|@ò½sV‰ùA Ù£¼ÙõëRÇÅÆI>¦€*Ýk¨—·¥/–ÿjÀÀç§š)8aÐÒG ™HàãÓ½Ïæ³rI¦Û.æÇASyŽÍ… Ôb£KwŠbêÀ†ë@ P?´=)c]·íŽÔ¬þlddŒi©‹r\œ‚9¦A2Ý´d€S Y¤Vä»HPÁrd²·\Pï$‹!U+Ç´›4L¥›;OJ[íÆ>ƒtjUX•ûÄÔ×Y6êØàšxvŠØ6r@✳n·ô¨ÚDkF#°Å3´Ü/84X ˨ Så=êy&Eæ7Ojªøk"sÐ`RÏŸìÕÝ׊V+]&Þ§ëS‡g ÕIÂ;…y r¬;ŸÞÍ *)-ÕÜ:’¯ê)¿iVR÷QQÚÝ´îÊÀJ™-Õdó ,þ¦¦¦ƒš§pÇÔ„ùGïTØÍg1WÔ‘‡LUß1Sï0À“µ L®øVϵ<¶ÑÍ EBnc;‡iâUeܬõ i€'Ö”œsU[½ò0Ú5fF¼œ x9¤Vɦ,¨ÃålÔbêÎ\q@©,q¬ÀÐP’+&à~_Z€¬/p$, þhÉâá¦K2G€Ç“Ú’)„ÊJ@gŠ4ŸÃÅ*t hïIÞ”u êh ÒÐÒRÒPÑFi(h¢Š(¢ƒ@RZ)( ¢’–€ (¢€ (¢”PE”(¢™ôQEP‚–’Š3KE òZ“ø>¢¢»< ÷©ûS ŠTù·ñV e@:±â™+™#:š•öàn=ø Œ­ù¦íU¤c<sŸZ²8¤!r)i½ªµÃ:P‘E†ZéFêWwhH,Û”ñVÈʬrTdPè®zö4´Ö‘T|Ç gÓL®]Hɧ‰ôaN b…ÖFf †¤ó$ûFÂÚ°:QÚEr…¾•( €Ãf•ìî:ô4–Ì>Ñ/=jÂÆª €i¾Dk÷F¨§qÄÒ%ÇJd D2‘ÔV%U!{õ4È òƒ Ù @ l Ûäõ<æ›hvp;ÒˆdAµHÛKmÆ6°õ  ÿ†€xªÛæûNÜ|”û‰Œ!p3ž¦ÉÉÒ•¾ï›Ü€ŽüÓˆâ€3än“'<Õò2­ŽõJ^o[bËMˆ©žX) çQuÛÚi±.É :b¬ÏÆU°HZ.nUÚ‘€I⣷ŠH­™JüÝ…Z0Ü0E- )ÚE,0hòONi¶±Í›ä œ‘š¼h§p3¤C&ßÝ0—<œqNºÒH¤Á8ëWé  nK=±}¤g ÅKbÙˆc°ÅZàŠ88¢àP˜”¿W~i†U}E ò¢@=@?Z6.s´d{Qp(L z€~º°Ò!r¨lu;*°Ã Б¢}Õ‹FÆES.ã‚[¥‡ö  ûUÁo}ÛsšC^fý£w­´m²þ@G'¥þB‡oL|ØúU§…$ ‘‚;Š#…"ÎÑÉêM¤[´Ÿ§JBö§áVþÍòû~oZO²Ä\>ï\Ó¸‰@ª:‹äàãŒÖ…E-ºHÁ²U‡B)!¤+’Û‹uµ6À.ùHñV£…c$‚I=I¨E˜I +¤ç  ÔÕ[uü»»p+@{T2[+I½X£úŠH Ìo“ ï=©²–kôµa¬H$mã¾)ÒÚ¬NpëüTÀŽ8]ù¥‡# «,@aÅG ¹ä.jfŒz@eÃÉ}"°È¤¼ìöÁPœÍM‘I|Ï4’NOjı,ɱúS¸å…¤Š"€)$þÙ_7Ñ£rzÔÿeª¡—ä±O–Ù$e`vºŒEÀ`·UŸÌ †?ÃUmãI/eVªò@DÝ÷08¦%’Ç1;dœÑp!¾_&ÙR<€O5!¦Š"Ϊ³$k*~†¡[\2¯E¢â´opÊ.‹ËT:y9œ¼Oi­ã._ǃŽô«hû”`÷ ;ÌÎ*ÄK _Ÿ½ªAIŸzCRm¥ëF@  ƒN¤Í-RJ(¢Š(h”f€’Š(x£½%QE€)i(Í-”PE¨ Š( ’–’€ÑA¢”(¤¥ªQE´fŠ1@îÝ× À58éKÚ’€+¤Oö‚äqRL:J–“µ¤¿,J™ÜÙÍZ\ìëŠ6.rÍ-1æ«]úÕª«t¬Åp(@Çέ**Ôæ¦_”ô‰‚¢›,‚<Þ梹ǔièÁ€#¥Gr~NzSC#A‚9=êxT¬`7QUà^5aA©.eòÂÁcÖGiË’BŽ‚¦Cº óvÌŠ2AÒnç iju¨£‘ÚGÏÝé¦v˜/Ê:Ña“I'–›±š#H—½G3¶b;Š[A‹u  }h‘ƒ¥8$RŠ©y«õ«+÷F(™*—B£½½Í÷²<@2¹à Tñ1)~¤sY÷ ïp‘9)ÎjÄò”(Šyjm·FìTíçw™£$0Å>íŠÀøî)Xbý­["4fÇR*XeYW#¨ëT-×ý¨$œâ¥² ªÛ\“NÂ,¼ê¯°ÌN;RÇ*˽¸5NÅØ™òIÔs¢ê:1¢ÁrÜ·96*–oAKáÜ£)WR·lÞÈO^qEá1Þ#É¢ÀiÑšnx5— ‚Ü“ÐzÒ·y1ïÛšt2ùѪWÓoˆG‚ ´¥-íÔ§`&¥¨|È#eÁ#"’[¬UA%y4€Ÿ4EEÉ$%ÁÀi‹wÀ9ç¡  ëc€)#•e@èÀ­E,±±ú7j—oÛÂÐù¤cŠ…®‘WvIÏõpèƒÞ€$£<ÕCy¸)Ú ©Ò@ê®:’‘Îi äR¿J‰›Žhv€;Ðè ö ÐòÐËHG/Ý  "òM88¤A‚EàÐOÍKÞ‘@Îi⚤S¨ÍQ@4Qš(h¤¢ Gj(¦EPEPRÑFiQER´Q@ E%´”Q@ EP3>–RÕ(¢Š)i( ¥˜+(^¤ÓØ•RÝjÀó£À«db…ˆù’¬‘L”éëÖ¥â€"Ys1*Z¯¤“ó9â¬œÐÆR7ÔSÌÑíÚÍLE#¢È¸aQù¸ 8ÅKœÐ*…PAM–?5q»þ‚š²«6Ά€Ìi·9¦ÜG½U€ÉSSv t DŒì &=IÛ•!CÊš°:P@#dS¸ˆâùaÝÜóP/lìOáVñÇß*<œ¯Z…[ýýÚ–Ôÿ£­/¡ ¢8v!MÇ,J@EW¶B²:†ÊаWŽ)ïDúÓæ—Ë@©8¦]$Ž N(¸ ÈŽîžE1Y Ì«»p"ÎåÛ1K«#ü«Ðuªò Ȥ«g¥]8Ïz$m¨XôÕË"“×Oþ©¹ã†F—1ã<âžÓ&ÍÖ«Â?ÐØšaÎ9§aنܒ)Á\äT§™l7rH¨" FèÙÜ:sJÃ.†çŽiÙÍV(Ë9Å$ŒÀ ã,ë*6gæô¨dY"˜H²÷”È£Û~y÷©¥”‰DjG<“GP&pÍ#TPÈÅÚ3ÎÞ† 7.w ™ÛE‚å߯“h¢¡yö"2ÍÐP³6ÿ-€Ï^( –;ÒsPý£ FÂqÆjSÚ€œi¯(wOÒ•J…Xn€V`JçZ—¡ª–uÏ_š¬™úf†ºõ¥¦ƒÅCzOpHúRÇj@jµ€ÌE‹O­YÈÍ£8 QÞ‹MnM;8¤4R¸ LF9¹õ¦]HÑÂYN´ø¼*Ç©Ä;‚CUþÈ ýâW=*Ö=(•ÀŠhVU xÇ¥ n·,Þõ'z Ç\ þCÆÏåÃrsÚ¥†ã9'’iìqJ(¸áYÐî–ðÈBš¿.Ll«÷ˆâ ²…¡Fߌ“M¢’çÍ`º*=Û2©;º´$Bvîô§Ÿ­¥ä%Â0ṨîP¸‚ ã£Ž):Qp*ÊeXÁ^N!Q4E'¢<±ä ½Ö€y .À’=ª”ŠÑÝ3²LUú(¸[e7 JÆ¥™ Ü®ÿ»·­hR2+ 2‚=踬V´egmˆŽõ%Ä~l,íÅLªa@Új.2–ž1 ‚0ÀóšŽÈ1¸—Ò®InŒÛ¹¹ŸiaF(¸X£f¦7‘äRm/¨œ˜5qàG;ŽCzŠXaX²W$ž¤Ó¸¬SòÚ+þ˜ ÐÑv†k¨Õyãš¾ê’ ¬2)"…"åG4®; WŒj‹¨—QUaÂö­PIn²H$0î(@U¹"[èÔt\Sïrf…?‡9©žÎ7`I9éò²€ðô¢â¶1s½˜–QÓû¢ªHX;Ï Ü§­_H‘¨G&£6¸BˆûPö¢ã#ÚÂnªñ±Y#ŠTÜ3Á«¯j†AÆÞ†š-Ù¤W‘ÛÓ‹…Š÷g}ÂF£äš’ùÀ¶Á-Ò¤–ÐK0}ØãRÍj’ltZvò¬’<|ÍÅK©¦Ò~èÁÅO=ºÌ€gzB[¢Ã°üÀó@ÌÜ Ã|/È«Ò:E œm_JVµß´3’«ÐbŸ,+2ln™¢à$2¤ë¹;u©"£†v ëÖ¤ïHåÅÀ¥¢€ ZLÐM-Å ¥Í("Œæ‚y Rm¤ÒÚ€ u&iEQEQA “­-%-Qš(¢ŠZ)(Í-%R¥¤¥ ¥¤¢€ (=h ÒÒPEP3>–’Š¡ EPKIEV•³p˜­ZLâ–€*DwÝ“éSËæéÞžAÈQ@÷¹J¶Ó<¡æùƒ­IŠbš¯uÏ–*r9ª×gƒ4 $¸Ê>¢Ÿ¸Üüb£™ƒE´“M‘Y U÷æ€,Ë D¿ñúÇÚ¤( #g ¦©kqí@(éUù’È[$”ä•ÒÌAã4X 5 Èÿh1ž”  ä7éLÿ—ßÂ3NTF@'àç¾`/³¡ d€ÒŠÎAO#­9\eNE.ô¥=)2 ê)sŠ3Å©¥ Ò€cÒšcF9*3Q=Ï—&„šp› µSï@㎂E*ÙÁ¥9 ‹ìê"ج@¦›såyaÎ>•#Ì‘¸ žjNùìh¸ Fœã½Wh‡ÛÉ©çcýßZl*û‹È0Otªå>NµFy•öm ×Þ¬‚)hUóæð v¦ÈŒ—+# ©àÕ¼ÑÁãµ4tÜvô“Š­jÃÌ犺¤ ;‚€~”\ ×cÄÄqÜÓñ˜9`=zTÌ¡†dR$IÝ^´î+X:ƒ4M•Ï"­«oEoQQý8ôÍJ:RcpOØëІÑA¶É5d®Gµ@-ÙFÕ“ {P-l2Øšd*d‰Ûfæ'¯¥MoC¹X‚¦š‘K o+O­0$´"ÃõÛÌy MI°9ËTwHòEµiu,OîGÖ–y¶$„G™’°c$ÓDRI ¥Ô‚Ç"ŸQ7¤^`s¸ ‘RM+yEoJc36lmäc¥,êRÑPO)šTˆHqÏj’K‚±‡ûT3ºý˜`sI(-o1šuÓHmþp0yãµJåZ†=¨®¤Sl@9Ïjq`l[¾(Eâq€y©M®3Ôö¨mQZØd ƒQÅ“zùêiXe´['=:ûRQÈÚàš„ÄÍ%/Øv¨ÃЬ“<²:¦QÎi°Ï$®Ê@x4X |PjÚd[/óÆ)âwÚÆU*õ¢À[ÎE1>ñæ«ý¦HÔ;'È:WŸnÖ^w ,²(¼ÌìÊÊF;Ô„Üv ÒWk†C ?ЦÎ*¼7K†ˆ®6ÔrÜqå…9X „ÒÕDº&q¡SïVC|ÅM8°’q޵º ‘XÔŠ|«æDêQT!­U£uÈõ¦á™&SRÕ;@¬á-Éö«yâ E&F(4½("ŒàR´£MÜ(,(Ã¥…€ŠLÑšZ)3FêZSIHi@éA‹Ò˜ ÍŠk’(뚥*–šOÍNŠi<ó@ –_,¨õ56j&Ua‡Ò¤Ç€ u6–€IK@Q@w¤ï@ E”´QI@ ER¢Š()h¤ Í¤¢€’Š((¢ŠP¢’–¨BÑEQE´QEQE´”PÚªžª --0D€ä(¥t¥M:Š.)C÷ÉÕŽDŸ=j~ôP433ʵ–˜ ç=À‰fR{ôÅ0cíÜúTá6BŒÒyI¿v9õ DmÿŠqÚ‘¿ãèœòJ•âA9zP!_3z†à€6¨ùÞ¤ äÛ9 sHз™¼0ÏlÒÇå˰%‡j‰U¸Ú+ƒw\T‰£ýÞ8óS;yqçÅ;µ(Î*8¤ó#Î1ÍIÚʳ•[„Èæ–QæÊ€qŽsM¸ \¡Í|uãžµB-3„R[€)‹:ðž• Öã°éÔÑpA€×"•€[ÎLgýªµœ §0%#'ÔTólm¡|ãÖ€$Ýž)AȪ±ä\²¯ Ž#o;CšV –ú QÈÅVRÉ6Âr¤f•\Ë;/*«éÞŒ_’ô¨'õr¨…+}‚sš½C&)~µ³2È#Œƈæc'— ¨°ÓI ŒTk>f1m9,Á¥Ù‚zмÓe¶rzT€óÍT¼–/­ }E-!uLn P®­÷H4€Z©¹Âñ@úP1ê)¨Û—5U>[ò£8ëÍ0.Š  ÒE7èæÅ;¥€{R€1€=(#Ò“ž(Gª _"?, SDò¢.FqKù±‡¦E Â\àúÒIn÷«oQRãšZ@@-ÁV ijw¤û;nMï•^zUŒSÕØª°$u§p!»¦ °ò*dB±ªž Sê@3o•RÚ a”±QƒÇZ»Þ’À­42=Â:ôZ–e,05d0Î3Kü¨¸X§0‘®ÑÄgj÷§I%Ïœ F«@‚84f‹Ÿ o´¬…h>•bg‘b2Çø UŽô´\,W´‘¥B\`Ô§¯4ðxâH p·NÁ#µ>‹sF„îîM5CCtÎÊJ·BJl1³^4¡J©¦eÕ/U¹ÀÎ*Íê—·;~µ9Pz€iqÇ4\ ,èÖ|žq€) )Ž4—#Ž \0ÆvÁŸ¥+ÆŽ>u¢‹…Š–›Òé£Ý¹qÖ­“†Éè)U>è”ÐØX¡nÃíï‚9Î 9€:—áý*ÒÃmÁ>´ò«»v}qEÄP‘ÔTöÅLöŒÌXL@=ªÁ3£>¸§.;Œ2Gnád,ǽ6Ì!·"Lg<æ­ŒSZ8ØüÈ ¥”dO!_õyÀ©¤ºHæòÊ“VPôÆ‚6}å~j~RiqGv¢€ ´‚—4”´Q“E€ ZJ8  šJ(£QœZCƒJ}©¤â€Ž=(ŒØâ€ŠZ`4ìÐæŠJ(h¢’€ŽôfŠZ %RÒQ@-%´†Š)QEÀZ)(¤EPE%QE Ï¥¤¥ª´RRÐEPKIE-”´QE-%-PE );ÒÑŠ Q@(¥¢€ŒÒÒPÐx Py ^y¦ÈJ¡ dúSè#ŠŠ)ÍԜԴ}h ´hNJ‚}i%uÚG½©ø¥(žXòöEF-†FX•ª~´½¨¸O I·iÒI±FezÔôvÅ Ö'YüÃŽzÐÈæì>ß—«”Qp±\£ý«vß” f”ƒÅö’¬; žP6—ý(;8«Àäf›€O#¥:†W/CŸºGZ8kÀGämïB@_S•úRäS”JÅ ‘Ö ™$vh+tNõÞ&BÁí@@õ Š©{+Ç2dàÓn ±À$2žÔìñ÷ij8$*Ìì)b¸I‰ ž=E 34—†ÛPPÌñ],`–SúS%D¸º(ƒk¯V¦–Úä+ჴÀÓ)Ž2)À¹display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.70/prog/testfile1.pdf0000444000175000017500000000330711517136671015060 0ustar dandan%PDF-1.2 1 0 obj << /Type /Catalog /Pages 3 0 R >> endobj 2 0 obj << /Title (weasel2.4c.png) /Producer (leptonica) >> endobj 3 0 obj << /Type /Pages /Kids [ 4 0 R ] /Count 1 >> 4 0 obj << /Type /Page /Parent 3 0 R /MediaBox [0 0 82 73] /Contents 5 0 R /Resources << /XObject << /Im1 6 0 R >> /ProcSet [ /ImageB /ImageI /ImageC ] >> >> endobj 5 0 obj << /Length 59 >> stream q 82.0000 0.0000 0.0000 73.0000 0.0000 0.0000 cm /Im1 Do Q endstream endobj 6 0 obj << /Length 826 /Subtype /Image /ColorSpace 7 0 R /Width 82 /Height 73 /BitsPerComponent 8 /Filter /FlateDecode >> stream xœ¬˜‹zà …Þÿ”«Í¶º}m’Ö?‡^€o·1¾OüwÃ_iÄêõh#ßùc퉇‚òút]ÿüÎ/FM…FôÌ#hƈfh¥¬:G¶Rg_±MQôüá¼ïÉ]˜°-ИùÚ£ˆ†„«y™¾a&ú &d™¸€ël`Lö‹zDY¨<\ç1;xXš|G|'Ø‹O‰¬”’‰ù ²FÄÒ¿]’™¡Ä! °ð±&rŲ®FâD&b©ð„,MX›¶MÍõXx@ÒÈJÃM¤%¾¯Çà iÃIÛÐÆÇWÀHXúø–I¦T;Þ£Î@jΠiêM£ÔÌÍCtH¼1㪬8‘Õ˜©"\³å —1Ù šä%4v[9#ŽÈ¹šÉúÀf9ú"z¼ÒI‘µ7.åŽÊ¨[^›f“îOwàôج ®nôäŒ 6ì¾÷âRÖÅÝV$%Q¦[M†}Øe=ÆBŽ0Ÿá€lG¡ tÍ ˜÷Oãºp—°cÔXDMkvÈÁË©½Ò­ ¸ ÎêülXÊ~uÙ·7bΑ¢Ù.¸ÞLh€è)ŽV¤s£ÌLEŒñ¢99ê0ú šƒ¦x×2ádm$z'[Ý" e³XÁܸñ1,,ú›€w¢}é¬o^5Êl«´ílÁZ·ÌK–œ„”­ž5±^h¤Á1¡œ)zž™ÙNÖw bã#÷®wz¹ öç‘Xé¤Y®¦tž+Ú†eÔî·¨÷H‹ÜôÂqʰÌÌfå­Þœ ¤ÈÉá ½!v‰1t³7»“MsKì{g¶Â&—å ±¶ÐywµbÌLÙÈg&ÕȵDÔê逿&®¯„ÚyGl\\œwKÂÒ™â•o$ÊNñmÔCÆ pÙü‘è鬌ÐÔDü@Üe"+ÌРۨ•Øù8F\œqÛXÕöÞ2¥ÕÕWˆˆkÓ2ú2qïÉ®eÞB£§‰T3¬f=jS°ñÜÙˆm‰{eò‹8ê,vaæ¨ÿÝòþñ2hÞ5ˆDÖ‹ºÇix>Чsûƒ˜´ï?½þÿÿ endstream endobj 7 0 obj [ /Indexed /DeviceRGB 3 < 302c28 e8f0e8 a8aca8 b89060 > ] endobj xref 0 8 0000000000 65535 f 0000000009 00000 n 0000000058 00000 n 0000000125 00000 n 0000000177 00000 n 0000000345 00000 n 0000000453 00000 n 0000001426 00000 n trailer << /Size 8 /Root 1 0 R /Info 2 0 R >> startxref 1499 %%EOF leptonica-1.70/prog/Makefile.am0000664000175000017500000000740512274202457014525 0ustar dandanAUTOMAKE_OPTIONS = parallel-tests AM_CFLAGS = $(DEBUG_FLAGS) AM_CPPFLAGS = -I$(top_srcdir)/src LDADD = $(top_builddir)/src/liblept.la $(LIBM) INSTALL_PROGS = convertfilestopdf convertfilestops \ convertformat \ convertsegfilestopdf convertsegfilestops \ converttopdf converttops fileinfo \ printimage printsplitimage printtiff \ splitimage2pdf xtractprotos AUTO_REG_PROGS = alphaops_reg alphaxform_reg \ binarize_reg blackwhite_reg \ blend3_reg blend4_reg \ colorcontent_reg coloring_reg \ colormask_reg colorquant_reg \ colorspace_reg compare_reg \ convolve_reg dewarp_reg \ dna_reg dwamorph1_reg enhance_reg \ findcorners_reg findpattern_reg \ fpix1_reg fpix2_reg \ graymorph2_reg hardlight_reg \ insert_reg ioformats_reg \ jpegio_reg kernel_reg label_reg \ maze_reg multitype_reg \ nearline_reg newspaper_reg \ overlap_reg paint_reg paintmask_reg \ pdfseg_reg pixa2_reg \ pixserial_reg pngio_reg \ projection_reg psio_reg psioseg_reg \ rankbin_reg rankhisto_reg \ rasteropip_reg \ rotate1_reg rotate2_reg rotateorth_reg \ scale_reg seedspread_reg \ selio_reg shear1_reg shear2_reg \ skew_reg splitcomp_reg subpixel_reg \ threshnorm_reg translate_reg \ warper_reg writetext_reg xformbox_reg MANUAL_REG_PROGS = alltests_reg adaptnorm_reg affine_reg \ bilateral1_reg bilateral2_reg bilinear_reg \ binmorph1_reg binmorph2_reg binmorph3_reg \ binmorph4_reg binmorph5_reg \ blend1_reg blend2_reg boxa1_reg \ ccthin1_reg ccthin2_reg cmapquant_reg \ colorize_reg colorseg_reg compfilter_reg \ conncomp_reg conversion_reg distance_reg \ dwamorph2_reg equal_reg expand_reg extrema_reg \ fhmtauto_reg flipdetect_reg fmorphauto_reg \ gifio_reg grayfill_reg graymorph1_reg \ grayquant_reg heap_reg locminmax_reg \ logicops_reg lowaccess_reg morphseq_reg \ numa1_reg numa2_reg pixa1_reg \ pixadisp_reg pixalloc_reg pixcomp_reg \ pixmem_reg pixtile_reg projective_reg \ pta_reg ptra1_reg ptra2_reg \ rank_reg rasterop_reg smallpix_reg \ smoothedge_reg string_reg \ webpio_reg wordboxes_reg OTHER_PROGS = adaptmaptest adaptmap_dark \ arabic_lines arithtest \ barcodetest baselinetest \ binarize_set bincompare \ blendcmaptest buffertest \ byteatest ccbordtest cctest1 \ colormorphtest colorsegtest colorspacetest \ comparepages comparetest \ contrasttest converttogray \ convolvetest cornertest \ croptest croptext \ dewarprules dewarptest1 dewarptest2 \ dewarptest3 dewarptest4 \ digitprep1 displayboxa \ displaypix displaypixa \ dithertest dwalineargen \ edgetest falsecolortest \ fcombautogen fhmtautogen \ findpattern1 findpattern2 findpattern3 \ flipselgen fmorphautogen \ fpixcontours gammatest genfonts \ graphicstest graymorphtest \ histotest iotest italictest \ jbcorrelation jbrankhaus jbwords \ lineremoval listtest \ livre_adapt livre_hmt \ livre_makefigs livre_orient \ livre_pageseg livre_seedgen livre_tophat \ maketile misctest1 \ modifyhuesat morphtest1 mtifftest \ numaranktest otsutest1 otsutest2 \ pagesegtest1 pagesegtest2 \ partitiontest pdfiotest \ pixaatest plottest \ quadtreetest ranktest \ recogsort recogtest1 \ reducetest removecmap \ renderfonts rotatefastalt \ rotateorthtest1 rotatetest1 \ runlengthtest scaleandtile \ scaletest1 scaletest2 \ seedfilltest sharptest \ sheartest showedges \ skewtest snapcolortest \ sorttest sudokutest trctest \ viewertest warpertest \ watershedtest wordsinorder \ writemtiff yuvtest if ENABLE_PROGRAMS bin_PROGRAMS = $(INSTALL_PROGS) noinst_PROGRAMS = $(AUTO_REG_PROGS) $(MANUAL_REG_PROGS) $(OTHER_PROGS) endif check_PROGRAMS = $(AUTO_REG_PROGS) TESTS = $(AUTO_REG_PROGS) TESTS_ENVIRONMENT = $(srcdir)/reg_wrapper.sh EXTRA_DIST = reg_wrapper.sh dwamorph1_reg_SOURCES = dwamorph1_reg.c dwalinear.3.c dwalinearlow.3.c dwamorph2_reg_SOURCES = dwamorph2_reg.c dwalinear.3.c dwalinearlow.3.c leptonica-1.70/prog/weasel2.png0000444000175000017500000000132010664715747014537 0ustar dandan‰PNG  IHDRRIÁæ6¾ pHYsb&2‚IDAT8uÕ¿oÓ@ðQ–5ƒÊÒ.^ú'Ô©²à”^†t`)RåÜ‚ÄÂ’Fm¥n5rïuè„T$„ÅŸÀÀÐ)ê@Qµ>î—Û17Dò'/Ïwß;;À*Æ%Të!)ŽžTZ‚bŒJ:®ÔÉÀÛV…R«ƒxUÔ$ò:h¥RmˆV衙ׄ%ZC¤Åxò ;­‰kÝIs ½’ŠRÜ“át¦*Ò¢ ©sY‰¸Œì|­¯ƒ %¦}}½è⥫ðU6î§*gÀ“­9&¦9øªøN´×ú[éj?‹©è½P BK}I—òÚB­*õ©‘.Elgš < ye1ëdHJïú C;Ó}¥ 1ö[b&yFVæÊJ,"ŠG˜¾¤w†¼†éI,W°;oå•ÚÔ±1¬¿™ê¶8¢Hmtž,Εñ@¾v ù­v¡¤ÇîÀÎé:ôƒ­•i}†ðH´7µª•)¿¯}-h ÷ÇiÞ(Mt®âÃ}Ì® êþ4b¦RßV{Œ tÞt»lF ŸlYÃsó!›Õo°<«Áíº?«ÃkW>ü/ úþO•~¼\— š™q}þË•ºœ)ômþì•nñ—¬ ¼[I5ÜÜòèÊޚЋ8Õha3¾óÛ/Ädïgó¥õÅ«ÛØ¸Ç¡ãOÕý½þn<%l¤k+¿Á‰ÔK#þÿ@¥þåœ31×èßíIEND®B`‚leptonica-1.70/prog/rotateorth_reg.c0000644000175000017500000001174112240302501015641 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotateorth_reg.c * * Regression test for all rotateorth functions */ #include "allheaders.h" #define BINARY_IMAGE "test1.png" #define GRAYSCALE_IMAGE "test8.jpg" #define FOUR_BPP_IMAGE "weasel4.8g.png" #define COLORMAP_IMAGE "dreyfus8.png" #define RGB_IMAGE "marge.jpg" void RotateOrthTest(PIX *pix, L_REGPARAMS *rp); int main(int argc, char **argv) { PIX *pixs; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; fprintf(stderr, "\nTest binary image:\n"); pixs = pixRead(BINARY_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); fprintf(stderr, "\nTest 4 bpp colormapped image:\n"); pixs = pixRead(FOUR_BPP_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); fprintf(stderr, "\nTest grayscale image:\n"); pixs = pixRead(GRAYSCALE_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); fprintf(stderr, "\nTest colormap image:\n"); pixs = pixRead(COLORMAP_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); fprintf(stderr, "\nTest rgb image:\n"); pixs = pixRead(RGB_IMAGE); RotateOrthTest(pixs, rp); pixDestroy(&pixs); return regTestCleanup(rp); } void RotateOrthTest(PIX *pixs, L_REGPARAMS *rp) { l_int32 zero, count; PIX *pixt, *pixd; PIXCMAP *cmap; cmap = pixGetColormap(pixs); /* Test 4 successive 90 degree rotations */ pixt = pixRotate90(pixs, 1); pixd = pixRotate90(pixt, 1); pixDestroy(&pixt); pixt = pixRotate90(pixd, 1); pixDestroy(&pixd); pixd = pixRotate90(pixt, 1); pixDestroy(&pixt); regTestComparePix(rp, pixs, pixd); if (!cmap) { pixXor(pixd, pixd, pixs); pixZero(pixd, &zero); if (zero) fprintf(stderr, "OK. Four 90-degree rotations gives I\n"); else { pixCountPixels(pixd, &count, NULL); fprintf(stderr, "Failure for four 90-degree rots; count = %d\n", count); } } pixDestroy(&pixd); /* Test 2 successive 180 degree rotations */ pixt = pixRotate180(NULL, pixs); pixRotate180(pixt, pixt); regTestComparePix(rp, pixs, pixt); if (!cmap) { pixXor(pixt, pixt, pixs); pixZero(pixt, &zero); if (zero) fprintf(stderr, "OK. Two 180-degree rotations gives I\n"); else { pixCountPixels(pixt, &count, NULL); fprintf(stderr, "Failure for two 180-degree rots; count = %d\n", count); } } pixDestroy(&pixt); /* Test 2 successive LR flips */ pixt = pixFlipLR(NULL, pixs); pixFlipLR(pixt, pixt); regTestComparePix(rp, pixs, pixt); if (!cmap) { pixXor(pixt, pixt, pixs); pixZero(pixt, &zero); if (zero) fprintf(stderr, "OK. Two LR flips gives I\n"); else { pixCountPixels(pixt, &count, NULL); fprintf(stderr, "Failure for two LR flips; count = %d\n", count); } } pixDestroy(&pixt); /* Test 2 successive TB flips */ pixt = pixFlipTB(NULL, pixs); pixFlipTB(pixt, pixt); regTestComparePix(rp, pixs, pixt); if (!cmap) { pixXor(pixt, pixt, pixs); pixZero(pixt, &zero); if (zero) fprintf(stderr, "OK. Two TB flips gives I\n"); else { pixCountPixels(pixt, &count, NULL); fprintf(stderr, "Failure for two TB flips; count = %d\n", count); } } pixDestroy(&pixt); return; } leptonica-1.70/prog/colorize_reg.c0000644000175000017500000001716412274202133015310 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorize_reg.c * * This regresstion test demonstrates the detection of red highlight * color in an image, and the generation of a colormapped version * with clean background and colorized highlighting. */ #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 irval, igval, ibval; l_float32 rval, gval, bval, fract; BOXA *boxa; FPIX *fpix; PIX *pixs, *pix, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIX *pix7, *pix8, *pix9, *pix10, *pix11; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); pixs = pixRead("breviar38.150.jpg"); pixaAddPix(pixa, pixs, L_CLONE); regTestWritePixAndCheck(rp, pixs, IFF_JFIF_JPEG); /* 0 */ pixDisplayWithTitle(pixs, 0, 0, "Input image", rp->display); /* Extract the blue component, which is small in all the text * regions, including in the highlight color region */ pix1 = pixGetRGBComponent(pixs, COLOR_BLUE); pixaAddPix(pixa, pix1, L_CLONE); regTestWritePixAndCheck(rp, pix1, IFF_JFIF_JPEG); /* 1 */ pixDisplayWithTitle(pix1, 200, 0, "Blue component", rp->display); /* Do a background normalization, with the background set to * approximately 200 */ pix2 = pixBackgroundNormSimple(pix1, NULL, NULL); pixaAddPix(pixa, pix2, L_COPY); regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); /* 2 */ pixDisplayWithTitle(pix2, 400, 0, "BG normalized to 200", rp->display); /* Do a linear transform on the gray pixels, with 50 going to * black and 160 going to white. 50 is sufficiently low to * make both the red and black print quite dark. Quantize * to a few equally spaced gray levels. This is the image * to which highlight color will be applied. */ pixGammaTRC(pix2, pix2, 1.0, 50, 160); pix3 = pixThresholdOn8bpp(pix2, 7, 1); pixaAddPix(pixa, pix3, L_CLONE); regTestWritePixAndCheck(rp, pix3, IFF_JFIF_JPEG); /* 3 */ pixDisplayWithTitle(pix3, 600, 0, "Basic quantized with white bg", rp->display); /* Identify the regions of red text. First, make a mask * consisting of all pixels such that (R-B)/B is larger * than 2.0. This will have all the red, plus a lot of * the dark pixels. */ fpix = pixComponentFunction(pixs, 1.0, 0.0, -1.0, 0.0, 0.0, 1.0); pix4 = fpixThresholdToPix(fpix, 2.0); pixInvert(pix4, pix4); /* red plus some dark text */ pixaAddPix(pixa, pix4, L_CLONE); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix4, 800, 0, "Red plus dark pixels", rp->display); /* Make a mask consisting of all the red and background pixels */ pix5 = pixGetRGBComponent(pixs, COLOR_RED); pix6 = pixThresholdToBinary(pix5, 128); pixInvert(pix6, pix6); /* red plus background (white) */ /* Intersect the two masks to get a mask consisting of pixels * that are almost certainly red. This is the seed. */ pix7 = pixAnd(NULL, pix4, pix6); /* red only (seed) */ pixaAddPix(pixa, pix7, L_COPY); regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix7, 0, 600, "Seed for red color", rp->display); /* Make the clipping mask by thresholding the image with * the background cleaned to white. */ pix8 = pixThresholdToBinary(pix2, 230); /* mask */ pixaAddPix(pixa, pix8, L_CLONE); regTestWritePixAndCheck(rp, pix8, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix8, 200, 600, "Clipping mask for red components", rp->display); /* Fill into the mask from the seed */ pixSeedfillBinary(pix7, pix7, pix8, 8); /* filled: red plus touching */ regTestWritePixAndCheck(rp, pix7, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix7, 400, 600, "Red component mask filled", rp->display); /* Remove long vertical lines from the filled result */ pix9 = pixMorphSequence(pix7, "o1.40", 0); pixSubtract(pix7, pix7, pix9); /* remove long vertical lines */ /* Close the regions to be colored */ pix10 = pixMorphSequence(pix7, "c5.1", 0); pixaAddPix(pixa, pix10, L_CLONE); regTestWritePixAndCheck(rp, pix10, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix10, 600, 600, "Components defining regions allowing coloring", rp->display); /* Get the bounding boxes of the regions to be colored */ boxa = pixConnCompBB(pix10, 8); /* Get a color to paint that is representative of the * actual highlight color in the image. Scale each * color component up from the average by an amount necessary * to saturate the red. Then divide the green and * blue components by 3.0. */ pixGetAverageMaskedRGB(pixs, pix8, 0, 0, 1, L_MEAN_ABSVAL, &rval, &gval, &bval); fract = 255.0 / rval; irval = lept_roundftoi(fract * rval); igval = lept_roundftoi(fract * gval / 3.0); ibval = lept_roundftoi(fract * bval / 3.0); fprintf(stderr, "(r,g,b) = (%d,%d,%d)\n", irval, igval, ibval); /* Color the quantized gray version in the selected regions */ pix11 = pixColorGrayRegions(pix3, boxa, L_PAINT_DARK, 220, irval, igval, ibval); pixaAddPix(pixa, pix11, L_CLONE); regTestWritePixAndCheck(rp, pix11, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix11, 800, 600, "Final colored result", rp->display); pixaAddPix(pixa, pixs, L_CLONE); /* Generate a pdf of the intermediate results */ L_INFO("Writing to /tmp/colorize.pdf\n", rp->testname); pixaConvertToPdf(pixa, 90, 1.0, 0, 0, "Colorizing highlighted text", "/tmp/colorize.pdf"); pixaDestroy(&pixa); fpixDestroy(&fpix); boxaDestroy(&boxa); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); pixDestroy(&pix10); pixDestroy(&pix11); return regTestCleanup(rp); } leptonica-1.70/prog/form1.tif0000444000175000017500000001367212251657771014230 0ustar dandanMM*üÎÀã³*ÝáðmíµÎÆøOQ;Fµ2b.EÃ-"CQ¡wzï#Ž Ž2, Ò93ýÜG­ÿSȆ3èæSÄùf"$1炸™ÊHT4VÈ5”U„Dpe0 jƒytaC.f"#ˆâ8í3<ÍDM4ÓLè¿ÄDDHƒØ82ã#†r8güØrr ŽLr ä3G Àä(ä{²”$æUˆ›˜?Zi™Âiœtòcó™s#ì¨S…ØBÓ¥÷¿yOþ91àœ]¡PD~/ÿ¿ƒ&Y¸A™ë­åÂðŸýb"#ˆ“¡e:f„'²=\ê`«_üDDDFªýfðãä"öº § ïÿßr8çÉsȘr;éÿÞ5Á삇² Ý2Cš‡²vgLøn> Á2W‚H 3Ž™VªL{$/tNLsÔêf1ƒL˜ëüÐÄ; „|DD|ïaÐçUþ!îš§ÙP¼d}¥OâA©üEÚ®C†C> aòC‘Žšwzhœ/ˆ¿ùÇPA¯º¦´">—ß*×÷ÿÿÒÿýÿòïÏ¿Âß}ýWÿúqû¿ÁdY}?áký~AÇf3qRìÀ¤qS3Gg‘Úx…¢„CH]Èøˆˆˆˆˆˆ£ž8ˆˆˆ/ Ž@ð1³”äcˆäG ®9d ³)m 8åÁ!Â×!ˆÁˆõðdAɹïé u#tÓ6,†üǹ 0‰Â8„±”søFˆM!!¦n?ÓÄDDDDDDDG÷M+H¤Iÿ8)8Èù¦™®.,"âÈäGåÿ»MwíÜZd{ÿ_ñý?ëO|xd~Xù'_ïpÔê BK¨¸ÿâ-ŠhSª¾¿©üÂ4Jt†´Îô¾Óÿ V9±Ì9æ™97*Ì980ýsA‡!œr ä3ŽMqÙ)xE‰)×ÿµ[áÚj»kÿÿ\5¢ë‹÷´›Ì>_„›¬ñ¡ŸŠ.V/ýj„Gý”éHä}?ÿdDGÿÍHã8à[7‘óÃ#‘ˆàSƒ?—RÜ‚GÿI¡Úqšh4!´'@÷ø5åŽ=ÃúÚé ÏdxìþïY‡ÿõËŠ÷¡…ýúx¦H{ü[öø÷»üfB‘á'[Aˆ¾/÷÷ùqqç„Ê÷õSú];£É¸ˆˆpŶл‚#ÞÕç$~4BÊsC¦ErnF9 ‚Kf™¹™ÍgPšg Ì9ð¤‡tœD`„DDDDDDDDDGç¢ïÿÿ÷8ÌRñã>ŒG†O—ÌßÓ-…¢ b,ئÌÄGcþ•­Òâ"É@(.f#ºÙƒ#ük…!GßþšgsHEóÕ÷¿Äÿ“õÚéý„gئ3Ž™c¦F9œ&Ÿü-1$™À_ýù7žG³™´a—DF\S‚GH»#ä)˜ÐvŸïb"""""""CLq!GÀýŽC`ä‡`¤AÄH4—ÿvE!ÉŽ@‡A¯ûR ޹œ‡‹Á…\ds¶B¹äJ/ðB""""""Т  Ê‚’ÿÄDGúþ³y³=˜EkþèZlf2Šÿ‚#÷kö…Ŧ¨E‚D[mvŸþ¸ê?·O5ýruÕH êÁ„Ì8LæqÓ_´ûzÿhDHfbg3aêU¨ý™¤Èù†|g"äG3eã Æ™dp¥Ì¹‚ЃE¦ì ¿ „pS#ƒO—Ær1ȇ"C\rcäU4 C‘p¤ AH(ÇBìƒqÈQÉŽ™|Ccä3Ž™91Ô˜á;,tÂüã ûL‚ã¨P¤á4͈ü㪠S¯äC€OâteÎlòC—ëq¬—ªqe=ÇØÔ¾´ÿÄdpÊDDDDDbÏ!d ö™;_¯¬DDG÷Úd1‘Ì2æGFÿåæà˲c“‚3¢4"ÙÇD4uEãÈÏ0ËÅÙ¿! ð`8È öMÉŽ‘'@Èô#8þ?Þ±üŽ?éÚ<Ò|F¡Â’tF…ëxäp™7ÂdþqÑ›eQ3QµCÁ%„è™Á£ª”f¡^SÙ8_¡Ó½p‡ë‘ÿ‘ŽþĆ„¡E>ÅKÌ=ßXæyJ l#"#]}!¿\5§’Züwþÿx]Œ;$:’tåiÉ«ÝäX&Id(ìC"f§Óûÿ#Y¶ðeŽ™P|B"?ŵüSªºùys Ûh¡‹²>o75; 9Ì š 5(оŽ?мˆ‹ ˜ Hˆ1Љâ"ŽH28…ýøìOtBŽF9Äl jˆ°„3¿þËñ´ímPµã¯ã郑Ž“þ÷ìhÌ ô Êµ7%¿Î«ò ]žg³Ã8䃗B"""N ˆÿ] 0ëÈA݈ˆˆ‰„P!Çò;=œåP¡…aS‘âB8Œd„}"]&]ÑHˆ¶GÌ$frf#Vi^."""""""""""""""? Ú9 qȇ x)ìKy|†0öA°|ˆ9ÂŽYuLä(éðàÈ2Ç4Žšg†qÈl†ˆLø¿Ë6þ“úðû›3Â4DQpÇ¡Â!›„ äVê?µW“¬‚ÿÿŠ¿·Ô÷ÿi–9úkþ""#ö³hû ¨ÂøáG £b©—Ì/ñv6 Å‘ã‚>DDxŽÜy˜`fo¿Æ±hZCBÔØhÿkû0ú{ýwû# »³g_Úd8éãäc÷ÿHŽ-þ„DDò0\Z‰‡È^ÿìÞ]$""$¡: ý3hÃ7™¤ÄGüDDƒáxq䤎Â8Ë™ÕAÚÚÍšdwþ£ûï!´:[iÓ]_Õö*#½ùÐg£h„첲ÇͧC·Ù?þ™ÎDx0ŒØ™³ùðn&`x5}ŒŽhHƒˆb?ä #ýr ëÿG‚8e~yŸŠ@!(Cô„DÿûœÈâœ#Èýý XÿÖG?ÔHƒþŸõ‘ ˆë¾HLã¦cgüDGî^0Dvpgó÷é4-0…ÿ¿óaÓßÓˆÒ¯ì±õÿ„Éi‘ºûB""?Îg‘ô~>¾šh4Ú¯ÿ­ÿÿïé¿oöšj¯â"?ÈhÿôË‚"Û¿ÿ´‰¿§ÿÿÿ´Î:g}¡ú¥û<)¦Aäí#H.Øt/ÿ}ßÿúÿ²1ÿùêÃêaþñ±kö"?_OúýÿýöŸBA\rrr ÎCjqÈ›—(æöA#™s8ƒrŽ_ȃÄD†Ç3–ù£Ð·áè4 3 ØsÜhY9 qÈÑÛarÁñ ü?B$G釅Hâ¨ý—¢ ¿üØ>žããý.>¿Èx@Ìå¸ hÏLã˜ràã˜rc—çÄgË‚ …}æG&k=‘ƒÁ~V‡ØÀ„DDDDXB&r!¡Ù‘è/š/‘Áÿÿê¿§êÌDy“€³ZÚÚò6þ}hb:#-ˆ†RN?A¯üÈ-”dßÿ¡|Š…õ#‹ßýÿi½<á/ÿVÒX\ãËŽÿ¿Ž=iÎ;Úÿ_÷¾øì§ÿýhÏYãâ>ÿÚÅèÿßââ£ÿi|Gýøû.VŸý?Ç®ÖGÚ8&GŒeâPÎÎdÿÄDDDDDwù=H1ȃ3w÷"¹ <!È)¿Çÿ²Ç†¹r{_ª¡[•aæTh3êMâ‹‚!?üÛr¤g«õþ÷ýN>ò]~Ðë:‹—ßþ2,Ÿÿrå"0—ÿðfÙIÁC9 z˜xŇ´G¤LøþQC×ípÄ2 Žäc¬PXëâšdÑ… @LGýb ×÷ûPŽÝ{ëõâÿëeôÏ$ÎÍZxˆˆ<‡ x0?3‘¹¹”¤Vær¨VPW‹”¨VÀüY(B""""#û¯WþwAžEî„Dý?N`Í…6)Ëô¡m?ñkû^«ÕÓ_ùc˜s·ù»¦šeBeBi´¢""&´u_{ÎTAÝÿí8»ÿ®ÿÿ÷ÿ×Õ/ý]ªÿïÓ>„8é”çt×üDDDGþG2GΙœGÈ"/ûøˆ‹LAÉø³‘T,èŒ#èö…ÿ¨ÞŪ„õþF?µÓUÿ¼Eþmÿÿ¦qõT›µ÷öaȃ—XM;]0·kþ""""""Kéþb0Eãyüº0޹«.‰úí #†„"E€ÎHHñ’µúã´ †ÎDUÓø¤òßkw÷ã×6ßÿë®›¬Ã¯ì ÈS,uM+#?ïYÎS„4jšþ"""">¿ÿÿÿÿý­—i›fÑÖ:¢„a#¡Ä1žIâ"""""""<Ðl x‚È`r #<A\rªúOeÁ!œu» ÝìqÈìqÉŽ™s:‘Ží®DoúëN†ßÿ ‚¤QÂ'A°ÉežÔ‚ã®?÷ÿœSœ»)ĸ ‚`‹Þ"""%$",Þ„O"…ôé!¨mBƒ DDé‘ÎÖ!ÄŒqþÖ;´éÎÅ÷dÇLôGÆÏ³þÄDDDGÿ_ÿÿÿ¯ÿÿÿÿÿÿwÿ¿õ_úÿÿï²aGˆáMH‡›Cÿ.Š iââ¦\2ˆär/ˆ„F™ta‘ÌÓ#Q!’aÆx2Èá²#B"! ÏŒðЈˆˆ]…ÀãØB!Ó8ä3™ü…#,”}ý샎™=„Q°LøC—Á‡0ëÄ&[‘\Š95¥ß<–Ê‘_ÿë_õ_÷ÿÿ¿ýyÞ8GÑ€§‚‘Èé¯ïNÓMfÜÿÿãªÛóLuèÓÃõô–Çßÿ^¾ªÿ¾THÙ71ÍÆ&™Ç0þ㈈ˆˆˆ‰õßßúÿ¯ìŽeÑâเPG äpÁ3Hà„pË#ÄpÕ6Ž28ÍæÑèÆ`eÈÆ\R^ñÙ ŽC 09†#ŒrîBA‡/ 97* „rðaÔDDDDÔ„DDDFfˆaI@¥Ù´lB9‘ólÀ¦ÑvRd`Í¢H`!dvpÏ…8 .‘³9ˆ‹ ¡(0Èá '#hE‚dpÓððˆRãj¿ä3bÈ«ˆPf„œ§&:dIÝ–ùÇÿÈAÈ0?¼!Ј„G ˆžG»8ä(馎˜rc…|^A¬t؈ˆˆ‹+}¹´^#åÍ&E|˜à¤nÙh.lËx¹ás“‹èDDF¡ªh+L!kg\ºwûˆˆ‹'šdAË{¿¡5ü@†ôª²(%€ %€ leptonica-1.70/prog/mtifftest.c0000644000175000017500000001661012242266075014637 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * mtifftest.c * * Tests tiff I/O for: * * -- multipage tiff read/write * -- writing special tiff tags to file */ #include "allheaders.h" static const char *tempmtiff = "/tmp/junkmtiff"; static const char *tempnewmtiff = "/tmp/junknewmtiff"; int main(int argc, char **argv) { char *filein, *fileout, *str, *fname, *filename; char buffer[512]; l_int32 i, count, npages, length; FILE *fp; NUMA *naflags, *nasizes; PIX *pix, *pixd; PIXA *pixa; PIXCMAP *cmap; SARRAY *savals, *satypes, *sa; static char mainName[] = "mtifftest"; if (argc != 3) return ERROR_INT(" Syntax: mtifftest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; #if 1 /* ------------------ Test multipage I/O -------------------*/ /* This puts every image file in the directory with a string * match to "weasel" into a multipage tiff file. * Images with 1 bpp are coded as g4; the others as zip. * It then reads back into a pix and displays. */ writeMultipageTiff(".", "weasel", "/tmp/junkout.tif"); pixa = pixaReadMultipageTiff("/tmp/junkout.tif"); pixd = pixaDisplayTiledInRows(pixa, 1, 1200, 0.5, 0, 15, 4); pixDisplay(pixd, 100, 0); pixDestroy(&pixd); pixd = pixaDisplayTiledInRows(pixa, 8, 1200, 0.8, 0, 15, 4); pixDisplay(pixd, 100, 200); pixDestroy(&pixd); pixd = pixaDisplayTiledInRows(pixa, 32, 1200, 1.2, 0, 15, 4); pixDisplay(pixd, 100, 400); pixDestroy(&pixd); pixaDestroy(&pixa); #endif #if 0 /* ------------ Test single-to-multipage I/O -------------------*/ /* Use 'filein' to specify a directory of tiff files. * Read them in and generate a multipage tiff file. * Then convert that to a G4 compressed and ascii85 encoded * PS file. */ sa = getFilenamesInDirectory(filein); sarrayWriteStream(stderr, sa); sarraySort(sa, sa, L_SORT_INCREASING); sarrayWriteStream(stderr, sa); npages = sarrayGetCount(sa); for (i = 0; i < npages; i++) { fname = sarrayGetString(sa, i, 0); filename = genPathname(filein, fname); pix = pixRead(filename); if (!pix) continue; if (i == 0) pixWriteTiff(tempmtiff, pix, IFF_TIFF_G4, "w+"); else pixWriteTiff(tempmtiff, pix, IFF_TIFF_G4, "a"); pixDestroy(&pix); lept_free(filename); } /* write it out as a PS file */ convertTiffMultipageToPS(tempmtiff, fileout, NULL, 0.95); sarrayDestroy(&sa); #endif #if 0 /* ------------------ Test multipage I/O -------------------*/ /* read count of tiff multipage */ fp = lept_fopen(filein, "rb"); if (fileFormatIsTiff(fp)) { tiffGetCount(fp, &npages); fprintf(stderr, " Tiff: %d page\n", npages); } else return ERROR_INT(" file not tiff", mainName, 1); lept_fclose(fp); /* split into separate page files */ for (i = 0; i < npages + 1; i++) { /* read one beyond to catch error */ pix = pixReadTiff(filein, i); if (!pix) continue; sprintf(buffer, "/tmp/junkout.%d.tif", i); pixWrite(buffer, pix, IFF_TIFF_G4); pixDestroy(&pix); } /* read separate page files and write reversed file */ for (i = npages - 1; i >= 0; i--) { sprintf(buffer, "/tmp/junkout.%d.tif", i); pix = pixRead(buffer); if (!pix) continue; if (i == npages - 1) pixWriteTiff(tempmtiff, pix, IFF_TIFF_G4, "w+"); else pixWriteTiff(tempmtiff, pix, IFF_TIFF_G4, "a"); pixDestroy(&pix); } /* read reversed file and reverse again */ pixa = pixaCreate(npages); for (i = 0; i < 5; i++) { pix = pixReadTiff(tempmtiff, i); pixaAddPix(pixa, pix, L_INSERT); } for (i = npages - 1; i >= 0; i--) { pix = pixaGetPix(pixa, i, L_CLONE); if (i == npages - 1) pixWriteTiff(tempnewmtiff, pix, IFF_TIFF_G4, "w+"); else pixWriteTiff(tempnewmtiff, pix, IFF_TIFF_G4, "a"); pixDestroy(&pix); } pixaDestroy(&pixa); #endif #if 0 /* ----- test adding custom public tags to a tiff header ----- */ pix = pixRead(filein); naflags = numaCreate(10); savals = sarrayCreate(10); satypes = sarrayCreate(10); nasizes = numaCreate(10); /* numaAddNumber(naflags, TIFFTAG_XMLPACKET); */ /* XMP: 700 */ numaAddNumber(naflags, 700); str = "This is a Fake XMP packet\nGuess what ...?"; length = strlen(str); sarrayAddString(savals, str, 1); sarrayAddString(satypes, "char*", 1); numaAddNumber(nasizes, length); /* get it all */ numaAddNumber(naflags, 269); /* DOCUMENTNAME */ sarrayAddString(savals, "One silly title", 1); sarrayAddString(satypes, "char*", 1); numaAddNumber(naflags, 270); /* IMAGEDESCRIPTION */ sarrayAddString(savals, "One page of text", 1); sarrayAddString(satypes, "char*", 1); /* the max sample is used by rendering programs * to scale the dynamic range */ numaAddNumber(naflags, 281); /* MAXSAMPLEVALUE */ sarrayAddString(savals, "4", 1); sarrayAddString(satypes, "l_uint16", 1); /* note that date is required to be a 20 byte string */ numaAddNumber(naflags, 306); /* DATETIME */ sarrayAddString(savals, "2004:10:11 09:35:15", 1); sarrayAddString(satypes, "char*", 1); /* note that page number requires 2 l_uint16 input */ numaAddNumber(naflags, 297); /* PAGENUMBER */ sarrayAddString(savals, "1-412", 1); sarrayAddString(satypes, "l_uint16-l_uint16", 1); pixWriteTiffCustom(fileout, pix, IFF_TIFF_G4, "w", naflags, savals, satypes, nasizes); fprintTiffInfo(stderr, fileout); numaDestroy(&naflags); numaDestroy(&nasizes); sarrayDestroy(&savals); sarrayDestroy(&satypes); pixDestroy(&pix); #endif return 0; } leptonica-1.70/prog/scale_reg.c0000644000175000017500000002410512240302451014537 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * scale_reg.c * * This tests a number of scaling operations, through the pixScale() * interface. */ #include "allheaders.h" static const char *image[10] = {"feyn.tif", /* 1 bpp */ "weasel2.png", /* 2 bpp; no cmap */ "weasel2.4c.png", /* 2 bpp; cmap */ "weasel4.png", /* 4 bpp; no cmap */ "weasel4.16c.png", /* 4 bpp; cmap */ "weasel8.png", /* 8 bpp; no cmap */ "weasel8.240c.png", /* 8 bpp; cmap */ "test16.png", /* 16 bpp rgb */ "marge.jpg", /* 32 bpp rgb */ "test24.jpg"}; /* 32 bpp rgb */ static const l_int32 SPACE = 30; static const l_int32 WIDTH = 300; static const l_float32 FACTOR[5] = {2.3, 1.5, 1.1, 0.6, 0.3}; static void AddScaledImages(PIXA *pixa, const char *fname, l_int32 width); static void PixSave32(PIXA *pixa, PIX *pixc); static void PixaSaveDisplay(PIXA *pixa, L_REGPARAMS *rp); int main(int argc, char **argv) { l_int32 i; PIX *pixs, *pixc; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test 1 bpp */ fprintf(stderr, "\n-------------- Testing 1 bpp ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[0]); pixc = pixScale(pixs, 0.32, 0.32); regTestWritePixAndCheck(rp, pixc, IFF_PNG); pixSaveTiled(pixc, pixa, 1.0, 1, SPACE, 32); pixDestroy(&pixc); pixc = pixScaleToGray3(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScaleToGray4(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); pixSaveTiled(pixc, pixa, 1.0, 1, SPACE, 32); pixDestroy(&pixc); pixc = pixScaleToGray6(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScaleToGray8(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScaleToGray16(pixs); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixDestroy(&pixs); PixaSaveDisplay(pixa, rp); for (i = 1; i < 10; i++) { pixa = pixaCreate(0); AddScaledImages(pixa, image[i], WIDTH); PixaSaveDisplay(pixa, rp); } /* Test 2 bpp without colormap */ fprintf(stderr, "\n-------------- Testing 2 bpp without cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[1]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 2.25, 2.25); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); /* Test 2 bpp with colormap */ fprintf(stderr, "\n-------------- Testing 2 bpp with cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[2]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 2.25, 2.25); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); /* Test 4 bpp without colormap */ fprintf(stderr, "\n-------------- Testing 4 bpp without cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[3]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 1.72, 1.72); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); /* Test 4 bpp with colormap */ fprintf(stderr, "\n-------------- Testing 4 bpp with cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[4]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 1.72, 1.72); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_PNG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); /* Test 8 bpp without colormap */ fprintf(stderr, "\n-------------- Testing 8 bpp without cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[5]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 1.92, 1.92); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); /* Test 8 bpp with colormap */ fprintf(stderr, "\n-------------- Testing 8 bpp with cmap ----------\n"); pixa = pixaCreate(0); pixs = pixRead(image[6]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 1.92, 1.92); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); /* Test 16 bpp */ fprintf(stderr, "\n-------------- Testing 16 bpp ------------\n"); pixa = pixaCreate(0); pixs = pixRead(image[7]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 1.92, 1.92); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); /* Test 32 bpp */ fprintf(stderr, "\n-------------- Testing 32 bpp ------------\n"); pixa = pixaCreate(0); pixs = pixRead(image[8]); pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixScale(pixs, 1.42, 1.42); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.85, 0.85); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); pixc = pixScale(pixs, 0.65, 0.65); regTestWritePixAndCheck(rp, pixc, IFF_JFIF_JPEG); PixSave32(pixa, pixc); PixaSaveDisplay(pixa, rp); pixDestroy(&pixs); return regTestCleanup(rp); } static void AddScaledImages(PIXA *pixa, const char *fname, l_int32 width) { l_int32 i, w; l_float32 scalefactor; PIX *pixs, *pixt1, *pixt2, *pix32; pixs = pixRead(fname); w = pixGetWidth(pixs); for (i = 0; i < 5; i++) { scalefactor = (l_float32)width / (FACTOR[i] * (l_float32)w); pixt1 = pixScale(pixs, FACTOR[i], FACTOR[i]); pixt2 = pixScale(pixt1, scalefactor, scalefactor); pix32 = pixConvertTo32(pixt2); if (i == 0) pixSaveTiled(pix32, pixa, 1.0, 1, SPACE, 32); else pixSaveTiled(pix32, pixa, 1.0, 0, SPACE, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pix32); } pixDestroy(&pixs); return; } static void PixSave32(PIXA *pixa, PIX *pixc) { PIX *pix32; pix32 = pixConvertTo32(pixc); pixSaveTiled(pix32, pixa, 1.0, 0, SPACE, 32); pixDestroy(&pixc); pixDestroy(&pix32); return; } static void PixaSaveDisplay(PIXA *pixa, L_REGPARAMS *rp) { PIX *pixd; pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_JFIF_JPEG); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return; } leptonica-1.70/prog/livre_tophat.c0000644000175000017500000000535712270122643015331 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * livre_tophat.c * */ #include "allheaders.h" int main(int argc, char **argv) { PIX *pixs, *pixsg, *pixg, *pixd; PIXA *pixa; static char mainName[] = "livre_tophat"; if (argc != 1) return ERROR_INT(" Syntax: livre_tophat", mainName, 1); /* Read the image in at 150 ppi. */ if ((pixs = pixRead("brothers.150.jpg")) == NULL) return ERROR_INT("pix not made", mainName, 1); pixDisplayWrite(NULL, -1); pixDisplayWriteFormat(pixs, 2, IFF_JFIF_JPEG); pixsg = pixConvertRGBToLuminance(pixs); /* Black tophat (closing - original-image) and invert */ pixg = pixTophat(pixsg, 15, 15, L_TOPHAT_BLACK); pixInvert(pixg, pixg); pixDisplayWriteFormat(pixg, 2, IFF_JFIF_JPEG); /* Set black point at 200, white point at 245. */ pixd = pixGammaTRC(NULL, pixg, 1.0, 200, 245); pixDisplayWriteFormat(pixd, 2, IFF_JFIF_JPEG); pixDestroy(&pixg); pixDestroy(&pixd); /* Generate the output image */ pixa = pixaReadFiles("/tmp/display", "file"); pixd = pixaDisplayTiledAndScaled(pixa, 8, 350, 3, 0, 25, 2); pixWrite("/tmp/tophat.jpg", pixd, IFF_JFIF_JPEG); pixDisplay(pixd, 0, 0); pixDestroy(&pixd); pixDestroy(&pixs); pixDestroy(&pixsg); return 0; } leptonica-1.70/prog/tribune-t.png0000444000175000017500000000340111425464255015077 0ustar dandan‰PNG  IHDRîÏ·äágAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IaIDAThÕÙ±ŽÜ6P 2Â&›tq 1 OI€|@R¦B)RúâOY.®ô'¬ ¸"Åép,Ã4 9$gHJ¸œÝ„Õݾ%93$W+­pÎh‡íÆÍçlâ7-n·ËÓùÓ9 ü±â{Ê÷çüŽÛm‹ó{^çwz¾…¿Þ²ã|sήfSÆW°¾%¯~(yi§û’WMùïŠÙ”oJ^¿t×Äç½}F‹?f¾«XìMÁ_W: òí ,z?/g?ÚäY”½WŒ<¨Ž·Yà»°}Çy ¼DºÅSb=ldœ3˜Zç•e¼fßh°0‡ÝL‡Ol25Oμù¹-c’ÛêÙˆƒî‹çsWðÊYŒÞÞûj±’ÒÑ÷…ÏD^®Üà×{L_‹*phaðíˆ%.ÔsQåå› ½U^!¹ lÏe^¾õ 0lÅ2/Ò€çCíιžYO­vnT%¶açVÚØÆ—cÖ‘Uó]pBgVpª´‹¬ë-%ถÅ9Ä&'ÜõÂÈ:ízž0Ù¹mî#ÏEÚ;[r,øÆè\à1 –{lŠ3GóÚ9Òоg¹©À)p«Xì#ð sÜî—øUoÒ6xŸãd6·N¬ÜOn֝мv^°âÎ(^T‰Œi›X¦àUÁãæ'$‘yNUÙü„±ð®äÅrK%ŸèW¬¸L…‡±"Ãj2¤Mc¾ß9ÕÔà„˳85 ž6ÊûfödÅÆ3ï3l5c)œ_ 9n¥™ KU²I•b/†»ÖÇÀ×vïÿUîJÆ%Þß, ¶)/ž˜Ê‡¼š¼¥¼š¼ˆô!áù†óÄó&_^T ¼Çü€g‹y]&ΫdŒ5VÞÞú2íÀŸ(d\V_EÞ°*Û1˜>ãŽUÎÈpoãÊθà ýòÛÃÌωmØ6XSÿé1Ø5°þGØp€±¦&œìin—Òí1Œü.ð$IMך;R´Eyï1ë0¨Â8û}½ r½Ü%󽬩ʢdmÎC{ÛG%ÆCûxP–*ò#®ŽA»7eßÅïó±Õ;±›yŸò圻ĶøÛÄÍÈûsv„kÎ{W+öyÜøD®¹:ßíÞ)1…‘ð{ë&kÆl½59þ5Û‘òX^ðµ¨yâÅ¿øªU–/ÄŠ²©¹¹$eiO—æˆý¤·FŸñ~xlqƒ#³Ð¶´“ŸÂæœÿ*ËX±ý,},ù†ñPòïŒUÉ}dd‘·íNÙ$žÃ’!ëÇqßfxK¼Ä5‰ß½<ËÈk\ƒ£¯‰·XUÆŠóX"/‰ÓÝLº×íý³Æ*ü1 OË‚ãñÇïÈ"~ôà’!ëÀV¤í€Â!rGìOI‡lºÌsf‰¼õ%C&xÒ»E– eÂoù½› /:áIeKÛÃçõjçPcGÖD¶”ñ¡›Î¼QÆG‚#òÕöøDèÝM®*<8~¡Ch ”mRCäû öŒ{‹²XÃÕnÛ:Ê¡.ñ?øч„8Ë*ÞSù©ä!1>)ð{'=IÍ<¸øà'—-²ñú§i]âcß5Äü(ß-â)‘1ñ°¶t^#Ï©û54òœ7fýã(kæò·‡Áå»X’Yl#çòñ¸vù&—$ŽÍ¯Üüu~=1ö噞G¾Ïæ}úÓ‹ÌkÍâ×<8}ôáßylþ•žþLLcëjžËÀ­¤LC§XQ¦uÓžGöu™Ëg¬˜¼oqž\µ8fh±-§æœ #Û\•’íD²®ƒKc—lÓb6ÙÏN~Ò,¾Ú¸.Þüÿå}MBÿöø¼tIME×:,dzvöIEND®B`‚leptonica-1.70/prog/warper_reg.c0000644000175000017500000001074012240302343014750 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * warper_reg.c */ #include #include "allheaders.h" static void DisplayResult(PIXA *pixac, PIX **ppixd, l_int32 newline); static void DisplayCaptcha(PIXA *pixac, PIX *pixs, l_int32 nterms, l_uint32 seed, l_int32 newline); static const l_int32 size = 4; static const l_float32 xmag[] = {3.0, 4.0, 5.0, 7.0}; static const l_float32 ymag[] = {5.0, 6.0, 8.0, 10.0}; static const l_float32 xfreq[] = {0.11, 0.10, 0.10, 0.12}; static const l_float32 yfreq[] = {0.11, 0.13, 0.13, 0.15}; static const l_int32 nx[] = {4, 3, 2, 1}; static const l_int32 ny[] = {4, 3, 2, 1}; int main(int argc, char **argv) { l_int32 i, k, newline; PIX *pixs, *pixt, *pixg, *pixd; PIXA *pixac; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("feyn-word.tif"); pixt = pixAddBorder(pixs, 25, 0); pixg = pixConvertTo8(pixt, 0); for (k = 0; k < size; k++) { pixac = pixaCreate(0); for (i = 0; i < 50; i++) { pixd = pixRandomHarmonicWarp(pixg, xmag[k], ymag[k], xfreq[k], yfreq[k], nx[k], ny[k], 7 * i, 255); newline = (i % 10 == 0) ? 1 : 0; DisplayResult(pixac, &pixd, newline); } pixd = pixaDisplay(pixac, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixaDestroy(&pixac); pixDestroy(&pixd); } pixDestroy(&pixt); pixDestroy(&pixg); for (k = 1; k <= 4; k++) { pixac = pixaCreate(0); for (i = 0; i < 50; i++) { newline = (i % 10 == 0) ? 1 : 0; DisplayCaptcha(pixac, pixs, k, 7 * i, newline); } pixd = pixaDisplay(pixac, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixaDestroy(&pixac); pixDestroy(&pixd); } pixDestroy(&pixs); return regTestCleanup(rp); } static void DisplayResult(PIXA *pixac, PIX **ppixd, l_int32 newline) { l_uint32 color; PIX *pixt; color = 0; color = ((rand() >> 16) & 0xff) << L_RED_SHIFT | ((rand() >> 16) & 0xff) << L_GREEN_SHIFT | ((rand() >> 16) & 0xff) << L_BLUE_SHIFT; pixt = pixColorizeGray(*ppixd, color, 0); pixSaveTiled(pixt, pixac, 1.0, newline, 20, 32); pixDestroy(&pixt); pixDestroy(ppixd); return; } static void DisplayCaptcha(PIXA *pixac, PIX *pixs, l_int32 nterms, l_uint32 seed, l_int32 newline) { l_uint32 color; PIX *pixd; color = 0; color = ((rand() >> 16) & 0xff) << L_RED_SHIFT | ((rand() >> 16) & 0xff) << L_GREEN_SHIFT | ((rand() >> 16) & 0xff) << L_BLUE_SHIFT; pixd = pixSimpleCaptcha(pixs, 25, nterms, seed, color, 0); pixSaveTiled(pixd, pixac, 1.0, newline, 20, 32); pixDestroy(&pixd); return; } leptonica-1.70/prog/keystone.png0000444000175000017500000011434510267112543015032 0ustar dandan‰PNG  IHDRoèÁ˜¬IDATxÚìýp%çyß ~Þ>Mœ¦ ÍiJŠ ÚÃ9MŠë°vPVì‘2¼C1ë&7ææÞ­uRŽ)*‡»77%epðb8á\Z„}S·è”cÙ®DµåÚK§¼[Œ‹â¼˜Íq¢HãÄò]‹ÓB"˜Ðd„È>`Ÿ~÷·»OŸ_À¿ì‹÷sNŸîo?¿ßç}Þç†c4ŒÃ±G/8r¨«Tç?ʼnìl3*Áø½¨ØËF±·_™ì˜´Ò‡`'¢|$vçÎ!‰œ×O˜µ ÿxÁÝ#'³ÒᦓhV•“ÇK³†xÖ‰G?q¡'pNàtŒä,å‰ÝÙf­ˆøÆ‘0'ŽÒô—[ÁZôÀÑÀ ‰cLpÙ˜ôKÞZ¬7WÃ_\R,CÓ^ö_M”½\–[_B”fŸü–\ñFç>Õ/½jW¦Œ›˜"ôŠ÷N >ž Àô{˜ OMzÕ—ÕÊÒ*ûÿ[“ßþ>›¶ÞvÄœø”øKãéÒpS3ìH+FÝX1Æ$µp"šˆ'ž‰k×âj2bÒºiÔ#ŒIAh0ÀiaT5æ~€I¨Æâ•až± f¹y‚Í÷A"þ’ ·CÄOD§ª@¥¢ÎÖ´TïU4Lzñ8*#Zl¥n­r`§^˜ãs¼Â€y€‹tgú}ShåO­mùlM¢€¨¡¶å‘‹pvï$Ú—» O¤àZAõTÖ#BáHÿ\­^ yå'õv÷ÝJ æ}– ¶Sç|À§^0V{ê* ôÛ?hÍX]Øœ±°Ç‹Íç“–LFî×Ú)@º8Àéâö•PíÎfng€Í\µ“fÛŸ'$ün—‹Úb4~Ïq÷¢ü¾Ø)%7ZÐBâ#T¦siæÛO¾'›a‘ ¶7±!•ÝÁñˆ2³IåKä¯(‰‡ '¦3X8·ƒ™ wK;2Fßmßt3`u<'–UœË ˆÄN%¤à¢[–dƒB¦$A­îNL®( [*h)€óå|G´&AA[Ì’$BnÏ«”·kEŸÈ)ëãhŸ°YXF¥nK×ïVÉ›h+ÜŽ ¸nx RÕe‰”ޣݩÏ£„£DD`À€ ÊØ no-@¢}6¼íoê³°[Q&°NKâ׈**ÎâÄ™!rNeò(<\V? -E`ÙîÞ¨ìÁgùaÎi@…4&àOÚBê’Þ¡ÀGãë²ìŽq}whvÇ‹ NCx&ŽNƒO+(ŒnÑy8E!1¸õi¶šlüHlmèî4«ý§²ùšŠÊ#¯‹…“­[pxp*zí-•l/2e×f0ÇÄ'!bÆ ì×£\rqI}¶…³e? §Ómo©=ÈŽ“R&½›LƒQ9³ò@µ38Ùažb¥lwp„ÓÁ<™ ^î=­ÆZiqQÜÞ'ÛÛÁÛÓ=£Îˆ¶Áå—hèòÉL¸cû7ÜaåØxö‚ááD1Ÿµn9 @Ǥè™ÐšøÎɼjN’¤M¾¾¯9ÞØ%uþ y7EZŸÐðƒ‡ !Å%Qn$Ê Œ.í”ÐVÔvÁ¬ÖyCøëà.ÿggÕ¨^Z]ÏÅ7§"$„ü}±c>õ3"»óYAfmßsÖî%ÿ}׿x7—6ç€wZ¬Â’½}ÀyVó)¡é¸“ß}óuv+;cxV`‡@¤>€n €ÿBÐX'ôVZ(Ÿ:׉ˆI ¨Æv7¿ÉníNÕ¼d8Ìšê8á”FÈn•Yðh)ÐàO¨ùõÕæ«­áêmŸÔÍ~ŽèîºÖq 8ÇDlbê …„êF«ÛýPQgIÝ}ÍÕ^¶Âœ…ö#LævIlÖvͽ†_CŽ bNÍšYóEc<_ù;]/wvü·8.¶µ?™=V‰ÜíßÛù€ôWætkä¤$ä¸ÈÎ œc gm/ µÍ:‘8'pNàü¹„Ó*Eí{ûç$Z•?NâÄ…ž(ú œ8'pNàœÀ9³gÏ}¼àˆfÀ9s#<™IœÈÎ œ8'pnNS+8±þ?³N|Ö‰¢ŸÀ9s§c,CKy\àÄE©_a)¾n8ýœ£êžì„•ÈíÀ …«Ë>›ï¸ÐÛw8ó,áý@™F"Ì«;zê±—;³µßpŒß÷?À•n‚å¨íNHÒÁÑÁêž™µÐýßçgSöY놬.9™%¾ ¹{8i°mü£vü S”–ÚbÒ„} öJí:ºà$ôV]GÛªd$¦ºoÖGOûlH—ưVÙßkhWªª4}²“Ëå¬Oõƒ/§Ëï/Íö¬ŠóNX"ÇµÒæç *Æ4²m ]p¼l/#+ÿú¶×¤é¼ýø@.õ§c‰/æF©Òq4P³,þðï$cË[óÆ›S`ر•ñ ÍÎ1¸8ÛIçúý¤ÃõPµ<º¬mm¥a#B¼*‰ÖV$\ò¹u¾}ÔŸA÷ÎTê|_îï`üÐ{ç"? -Ó£i—³kU̧YŸƒÍuX£åZÖ蹇î£YQŸV¤è®ç¸\Ç›f„ç€W~2¯B3’ DJ!ù~VSäƒÀgL0‹•ñ‚jA¿­AEh ’Ç^öùyÔïùsêa|´ÿ/aéLMÁíÚœ…4ê ­ü!h¾!Ÿ”¯ëK@ˆø´dHÿРðM]pDiK…`ÞÓ@ÄÓ0))w+NUàTMmż²¬6Çç²_IµüŸþö,°Df#X]âu’¤Ë—!v±) šŒsoæ¤H”míTA½è‰0…õ¯ê(éÓ×fkq€È¢¶ a«õ½|Û·Zë/~ôÆå«¬4-iA²c¬_qÚ íóL¦€cE#ê²3¡Zý¹7átõ ŸyˆãàZXÑÜŒó à›7Õ„Z¾¾º.;„wûk™æmã$о )€Ê%Ïwœ¥ûØ,1óW‰ì›®%ÒR—Àø FB|à¿ ŒßÀø\ë1C£Zƒ7Ó€j¸+¸øË’ÖoÆÄéç&ƒ‰ÀRظ ž[KÕ£“¾}Ìt•G’íw>&þ€èÙ“Ð(½Ù¹ù²{t"?.ؼÏB ¾ þ©š¦F¼Å/0^UÍp{fÉGÛR]ÖÉ)AT2®Íg;©;õÙ— vogßï¼ãÂèŽ?N ð€7 ã6 aœ7 ð`-D´šè1}ב‘ 2Ÿ Ô"b¯xÙ°äCœ¾Q\[ëàäÖH’ú´ÆÊ,\éz—.—í5åGÕãó(ß»—­ô@êä›ã®Ø!ª _匹j?Tfº¼ƒ‹Üooó“™u6?ØõöÞöv'p³_Ë’¹2öYê'±¬TÊîˆOÛVÖȨCvÂe­zb#¹Úáçó_÷…coˆ8V*҈ΧšNa׺;7†¥¯¿«¹†rÆÌa²\Ò—>pZþŠ*û\ÃTÔ’êâ­zc»óÝ;ŸÎF—Q/´Èn5žkcªv¤–~ƒäË_dLˆŠ7$„iº8Qq‹( ?7¡º#’¨¶Y_¿YØ)¹“(±\ýAZ*&<÷åWƒ¹&8›ÀkDDÄ”šêl”c0QÎÕÛ›U+: ØDÚØ^vª&<$¾Ë¤ܵÐÊÞ]áÆ 6‚à=Mû”5|¹a€ 2;b ‘ƹŒš² œW3عm¨SW0"£gñ'o7áé{O›ÿ‚àä'=b@l4›å'<¨%—=o t;h^TzNض¦JqÀè!’qMí©*×BÜ:ð{ ^þµà«1•{yy/¾ x¹qq¾>ï0[’üÂÜߣ ‘–}æ‘v|o:õ¾{lõÝ?~ÖŠh-´›Å0»~õn<B=8ˆ:+A!¼:¤‘Ûõ³ú#Äm]—Û+:ï¨aç¾5ŽúPa6{¤ÊaÉ"Íg¯È`&\†“‘0AÄ”vŽGÛj–ÞÅl¼¶Íí&Œk1§î)ÂŒ@>´dŒñWÖ®¢’0MŠ8@A©áGÿqj7pz'£ÿÐ]ÌòtΤá÷îŒû¯¹,·Z¯šû^~;°±QÀºïiÜÉõ9‹ FGUC„°¼‰`lÍ][‰ü÷› ÿec=¨Â>ï)6F=ÿë™Á½ç¿ø«U£Òª1æ¥uÚ¦º»F[»ÛèÂwïøæ§b>&<_9Y׌ý§Îó¿ê;_üTñWe÷mÈvG”aÖX½.·½ÿK$AP$=ÊŸÛ¿DîE¼láz˜=.Aw>ãஇ@Ó œY» Ç NŸ¶*GYôÐ+^'Ûã>ËBGË,?:¡ÎŸÙ9,ŸuçÎ œ8'pNàœÀ9pšî±¥ÎÝ%–Y-!*ÆS½Ø÷ªeÖÈ«Œ:¥`ÿù¾Å sꈘåA%ü«Lg²×ÞȶÞû¹ÎPð×á¡ÓŸ¥ª<Å6vF’X„ßUIã÷]N9Û{e–ùÐ)|-lK”bó; ðP—î•@£°ÍýÚ»û•Ü·áüSËñÇ2#iû-„Fý$ ü8'¸>ipnd=ÄEšç¢¶WUÅÁü±·^{”-ßn0ª/ÿ‚n87³O,óeÜsœª¬y4ÖûÙ廹śž¦s—j!°•°¶É],¸™k5nIÂü«œYê°&¾ÈD+*©lQrr¶ËœÜôâÔ}›Q^fE«+b½&ÒÅûÝ­±¢š*‰Á|£Ó*çæ0{Ò€*,ŠÏTöþ~™¯¹Qq=°äyÜ¡œwküÞ™ô¼s)ûmlf õZã»Mw‘ÈÌLuZeë÷Ò1ëe×û„Ρk¤)©úipîÛWM=Žo½–"¹> §`=h€rÒV³ÒÎá¢ÓéGs0Q_“û×u~½wƒìÈMAĵ¯=>ËSqÍ]C…ÉT§ìdO­OÆ},–vÚ•ZEñ^X}ÕÃÝaèÛŠÂk*ÍÞÞ¸øcÆ›¡ò –â§»¬r¤·1œ¶~›‘WQ•/“ë½——m…×vAá¤)ÑÑ÷å¢Ê†Õ=/FÖH¿=Oi‡V­ŽçÉœL§ov{¢à­žhÚÖ‹1 $„p>c¯×­èEH¦Ö(’F‡(+Q²EE9³ßz(÷è¹ìø¦yPU”e^@€;“í1Z°gÉpœ¦šOp#…Põ‹µŒ}ÞrØ%²:Y9Ö}íhËﱿŸÊÜbªÄ&¼’ßiÒ>¯äBÇ­ëºyE¾³¬!E¹R91}|³™(*öÃÌ üÇžyÇéüYãÚÖ4YÈïã\_è`–z8‹Ç>§–%ø?¿Õñ†z ~‡=p­Müf/[²ðËŒôÅ4Ÿ.ÏT¼f£#¬ž5U¨~îµøÜ¯§w—cf€WÅÅS_³ˆ«yÃ3¯¹Iw¨wº;û`¸QBèA<Þi¦ÂNÍÊÒKÉ)>òï£13*èUø¯Ôg?´ b­Pƒ.i\˜É\ì@o Ùf Ïéâ $ò“\úÎBG\ àÉ‘¶¸aÐððp—¤Ž¶~iùwŸ˜[»L„h ~PT¾u ]j)3S|ÐYwý]í8).ÍÊ+õŸŒTJ"œ ÷XWP¿cÝRG«Ù"ŸH³Ú•åRÄîLŻϜŽÃ×ÅïߨnÌ[z˜ô–+TX¼î•÷¡B%¸odŸn™:›£û¸$qR¿sçèDy_lj(ŸÀ9sçÎ œ8'pNàœÀ9ógÎÚ±¥ÎfþÇõ£ƒ¶ÿŒò)Ð9šªs¹í(¨SôJ‰uy¹íhàä$õ¬ÛÄ1Ñ,_æýŽîý¨ {ïõ·ÔÉ¥ÚY;\ÍZ‘íŠ~ 5ð^•¯ôöõ7ÃÂq€?j³ö z~àKE¨Úwð’ÿ!Ì,W¶€ÕuH²ÒÌøV¨ó_fu_÷´á¤•ð”&^N$" ×üøR~P{„µ0w-K~nhfmã€Æ^kûM‹ÉŽh÷Ǫê×EÛæ*À'ˆjø·˜…/]Y¹a½Jˆ2b±Ã>ïV”þb Ô´> —zÙ~§ ;R¥ 6pl[Ù3‘±ç5‡x‹’-!WÔne§]f5¡Àx l/`Ð*h:b·g.´‰%x ,yDø%ÒóHlùzˆD†e{syˆ,àÁÔ ÊlL}Pˆzïë´¬rmLÞ¶5Éo»ÁäBtÖ–†Ÿ…ªP²|šsнdÝ'„"FOcÖüǼç=DÞ«Ô{1ëÉë–eY´Ä ;"‹Tǹ“ÔÜê"Àj*úø;ÆÑÙãÜ¥€/7ˆpY‹eg\cú°ãݳžd_Ö$¼qmë =K©¿×XHóm›žºì·iyl–ú®Wg²X¹_pÜZ¦ÃâI\{Çó’úÝ€©O¤Ï{!·R"F—÷—æ'I¸;§»þ8ÌPI^½Ô›YúõÞr>1°!$.Q9 0ñ±+.û¹€drž ^kŒæ¹rçfÀ7€hýúêü3-®öf#³Czö‘:Ý1X%"«WÅI))W×®ßùAaxשR&g·ë ì{ÍîÐiš°g–Z8aLÆÄµ§¢¸šT÷üìãî¡Î¡'Jp¨EHîŸÛiËÏnÇðÛŸ?ªK» BX1ªz‰ýÖ¬¹a/¼ ¨€ÛüñQ§¥ô(ûgíøÄð—¶£S§¦+§{Žª±h³Ú5]û õëG´1!¾¥üξõÞIïQ¹y¼¨Ó­ÏIx¤pº³Ë×o)œñ®ë£eVÏÔÏp”vg`Pðg `&::8'ÌÚ-³NàœÀ9sçÎ œ!à˜ãgË=28ãÀ¬íãæí‡Û{b‡x'ÏsÍ’ÿÇVôBu¢åC'ÅvÔùÅ¿û0ïªãc“„·X\ÛßJ{½G8²ù2Ë›HÕÚÏ]‹g»€sn£ÆKÚ8äŒý`ñh™åzÊ;Ã*þ£ÜBŠÅ Tœ;d8¨°îf=?—]b”\¼ëV¤*(ý=?”ݹâ2ÿäÜ*¯ÄªeÒs! ­=jE¦ýÛŒÀÍ?ÙÇwEÚPÓÉe’i$‹Æ›ñf °¬Ü Ía¬‚SÂß›.5ÿ§ª©“Òq°t$!E7/k«±£¼õ@ñò\°ÖxgVîuÂIœ–£¨žúá V§“ðôfA"'b¦©žøõçÇîš¹/l]´E `>gÒ†ÂkéåÒRº˜}E?/ÖðúÂ1STR+=R•ëk«OL·YMà@Z4ÈöÑäN¿þ¨âiÝÚJº¿¹PöYrˆHÊéµ8=•|Lž+kèïª\àÒìD]²Zq_+|‘I@²´xåCaòÓ®!ŽWaŽfMAÿ#RWTt Îiðyáfá‹ó·ø›^á¡}T¼Y¶´ˆ”s@ìHâ§Ÿäì?šñ1JÆ1Ei¡Ÿ§uß™SNd@Í|ì.c?ZÒ¸ñi`Ý5ÚgŠžF ¼¶6„(ÖáâÒ’<çÃèwÀd›Üôû)œ¡´/sº´ÊÁâ¦ô°çqC3 YãÍ^.(˜Ä€wˆ2fkÉZé*ã@€l¶7›.ëyq30üjæB“«€ZîzསÍ ¹I1„ÙEÓ@H$ঃȪ°£pRÙ óÒ‹@ÔÈIÙ¬ù}ᜊ˜^'ŒÎäü Üì%¡³+wÝ(|êiþëPõ›I‡Ö¨dE¨‰•ÂÈ…zþõT~õZ¿(Pkéþ Í_cÍ­• K¼}§C#J á¤Û¥j:²¨ÅqP xVJ›$[›¬ÝpFƘ¼Ìß¼{ ƒ !£–!EÛ4ƒ²;ˆ:‰ó¹Ì·n9PÁQÖ<$>ë³ ?§„=VY„Œy,xnN{ÑaÈÛªãD­ÎÝ£"—8@ÏCVCÊÖċΛZ u. ÖoðÒó}$»UNMUž,ž+›³Å5[ƒ¸õ60]ðE:EõŸØ„Ò62q%rºþ~ÞØòÆ4ð‹ïnúÌ÷0Ë~ Tq :pÛ/|!ò>¬ÿçgVo’$ „­FŽ’¶:Ôq …´% æ¡ ~»’Ò_RåM%D¸h¯ˆ·™ŸÊ™ºÿ›ö„qÏ¡áükÓÍNª«ó@Ï–2¯ô]KN—»†aÉEåþpç9zåWªç>}înêÀÖ€bz«Ëø=¥¯mí4ñH™lä¶ÌÎ*^ì±;¯‡ƒðLZÍ=]y™Ó#Ÿ|>úÍås}V^Q”\|øFûÖ#p}¹›výÌà³7‡ˆ/+1À˜P÷–ß™´”ð®´›¢š N)›vº°B¯éðZß;{{O¨T#nƒ3Ñùû2Š{5ð’$2³Ây²;/“ñvdZh^óá¢þ²€óã»Ú›kãúoä.¬‚äçŸøÌ:€7ñÅ+#§Hx  Ï)ãE]³S2á…Úï}‚¹<ÎâùVþbîÕsŠÊØxùlì°ß~÷¾žýšˆky7€Ñ3ø§*¦®g1¦bLZ3Õô\=š}rŸ õÒíSœJ|¾°Ë•Í» ÞÓ’‘~.Ï À •Ê®o-o¿ãããÅÍUæÂ´\ã±…w€EãÅ7×íTI_½¸/Ì2j†Þ5¯Æ³/šp¼jŒÑTMȬŽMMýeŒ1é>,É|l7¹/—1œ¾þTéKÏ<¦ªbDy(q,í¡0±0Ú¯ˆý­9Ý£´×S\‡à>k §`¦»Š²×x –ÎZ÷éSCšÔÃaÖÐO9©nÚ2žÀ9sçÎ œ8'pþ¬Àùò‘Ã)¯S ÿ[_ÑÇ"üz“¦‚èbx\˜ÕNHÉ£‡³B¤âÚË`£‡£¸ˆŠ>̺ÄMœx¨JçŽkó—~Ç¿ÿ˜iŽïÜ`âÖࢅ×Ε”ß\i€q:1 †ü]izppÒ„-†=ݬÊi ùäR'Å€J%êú÷e¼©÷ ޱÿQlîØ€ê«VäE7÷€“sr_à`™À/ÈåE¶í=;^PH7%lº·ÇÌÁÓh@¼#·­Œú|š)`ͽuêdúeÞ¿ Àrˆ”s·;"`ñ_ôþΧo ×Á¬7\»5¥×ôwGæ€C¨©€¯Ef4÷]Š`½8SþǶ2lˆãÅ`7Թă௒{D¿HúÃÑÔŒè€Àƒåµ•š€«þÞ˜Œî’Y3œ³K€™f$rÚÞ¸æô÷†áK3¤(̺¸pç^$£â݃ìxęّӶÞIÜÁü'ÆÈ*?-갉ɣIUø¾6ãÚ¥yîË p:~+\”N䟹;Ÿ|þ{Uf7=Þ‹ói¹.}ÚÝüúŸ9¿7ÍòAgïéEHÂ$j›%?Ôò_„Ñ×iÉ´l;u=fjÀã[ŠuY*èØ,¶©Ÿ:à‚ˆ7mÑ„Âi®"ŒÓs:|ýÿ7—7›2«ÔÔí·¡ŽŽ–¹¯X>vY7UþŸÌ‚‘#l^ ýeæ¢iiemÓ2GÜè¨AE…˜¤¼^fÍ>mŸ§"¹¨°íU;V1Däzå'! 9oßf³)¹Dó34† Ò®ÅP¬–:ý n«= ;SÖ…èàÀ:ÔÁ[:uª¦Kf:d–¸…ºÔI†>öN©í'Å“…4Ï^n«›î0ÀÓ8ÀÔ|†$‡˜X­g¬Z¼M,Þ¹ ™¾\ÄýdÇÓÄRR£–»æ]µÍÎ÷º}»ìýkUý.„žÎëŠtl½)Àý©“tëÃÅ@ÚhKx#íìÒN¬MYþ½Ü‚%ÀøT¤—ÓúK®ñ:]v§+îa–FØÎF¾r°2_/ö@v ýuGç‘ýhpyüUû­lmµÜõc‹ˆ#ˆAÖ¥NË[—¬…w4"{„[X9ß×yÏ®T9¢ruw˜Üž‘­ú䟌®} MyÛDÅà¶¡Ó|Ø»x¸._fåBwhóï&ë>@åSýÕ§$zθxVY­VÚä%·ø™Ó•Bù h±«çq²òf§Í”eº*’>¼Ô×ÐÝ™'*ºò&×.MƒcN‡[cÒÞO—‚ÒöH+Æ4˜œt+µÒt¾UøyU´= .wH»ÃóÔR˜jÁ, gæÛ“”|œO•v‘.ýiøL¨àIŸy–úÀqI]U\>¬Žï+"§Ì¯D 3á €­±rl˜ï£%Y À%ÌÅ—˜ºÈÃyñp7QR?ó¦Zfµ¢>ä¾¾Ûõ¤@„¡A*îpØj}d㿼!>>°îŠÜ¤ç¶¾AÒž©g¼òü#‹DÎüD;rWýw f=‘›ømZ¾g[ͶÚÒz±-=N’Í“RÚÏõÞ=…zp¾my?Q‹à” š>œÝȽøó0;(JÆ&Ó¿ :TÀéÊLˆ[Ks+ÄS¦žâà9H…u®)І£¦MÕHç)~üÛ;„ÇCÁy´F:sj66±¾ë}¬ƒÿÛ³š²B^¿­ºC¿Ž^ŒÉ¡{ÿ1p†yH¥Ë˜u—ßH–VæqšµÞ¼ƒ[6оýw´k8ÛN=å02ÖŒŽ\°Òl>î]O›L…îvƒnûYµ`—püg×B1•øëÉlœuXœx:l—ÁªâiªsšÐì¬íŽ7t)óò)³ò¼œ.Íæ¬•Ÿ$ :EÆS»„SU;¨Z9‡÷~³¾øœ;ð>$ü›ëÖMž/â ?è¨óÞ£¢÷ŒÆ R*Y ÇdîšMæ(ê1ÙŒ5²óûÎã>´=ÜæI»CcX1&0‘0šŠI˜®EkÑ´ Ï·¯I÷£ŒQlï_²QO‰ç¸-`^ð;v7‹ÞWf™ßÛ`¸øyÝýõ€_ê ^÷!7½M"©³×të<ˆ˜So¥TLŒ =k%öQv¶+ÿŠOw—‡&U•€¦\жt®ƒVÁ«½—¼{[‰6¼pÝ¥)¯õ¹ä¶}¶;ÛôíÀõ 8¼Ñªî°úr¸uƒŽ{¬¨³³ ;) ÙNt¬àœÈΟ%Ù9sçÎ œcgõèàôD±Ç¿L…:.4uVOç¼ÐÀ⺷ïv¡«¬’N„EÎkÝ?RÙ¹ÉuùS’l®jécA…‡g E¬Îe™˜< Å€?|8ÊøD¥e{æ‰:ã°’=^t‚J_vR?b2yhp€«ýŸî>œ8Øæ`Tï4+‰U·Šç¶›}Ët¡ÖstOy¶{b‚ Ú9>oá˜=Ý1L#óHû毱ëNŒýàd.µµµÛîy å§ô*â3·§][a°ÝóJ‡©m7â^R~õ©ãx€£Öbµþ:@+a=€Å'ÙéNq™Ä•p?dgÄ> ®¾9Ðz™(ýB¼îoÖ}š;UžgæÜ’ZzkpDLïB® °Uã•çaò݈ÿ4Ýd­¾Öß&•ã¸g‹ûµÆõ=+úÛ½JûÄ­¥Ó0¶yƃDñ¯ßÄ[—C:Vê*^ûV“äéöþÆÁÜþÿÙõ.yTR*O¦õjZ7&­F¦¶bjq-2µ¤²bj_­Ãd5åcŒF}2™5ÏÌÆæóTé.‘1&©—ÒÜ/嬛f ²ïñV}wë‹pÆm/¾SÄދɻì¥ùªØs«Ög5ì´U¡ ö±xuǨJn² GÙcÁQž·}à^!ý0ÚlYÀEŒÀZÛMœíh€ŸV%Käwš$ü9c§ÆÃ—¦ELÞ£®ùãêf[õú È7ñòÃìv†#èôXVYƒüÁT ±ÃíÌK\{ì¼ñµ¦WâpÏ Î³¡ãïuEÊw‹ËW:o¾eüÓ.©4ÀzÈSI\”Éö–©Ì×pÖ"+‹å7’²ÇgpÓ7žö a¿ ½•;ƒ>Ú†·;ª+RîPƒâ>Ë™ÙLIS  ®ižÉœ„ÆoúK´d»\0`1úR',:£ nÚMä?p7ìÅÆ7€àçÕBXz±L)V½j­#RNÿ~Ö}àx?çSÛ”Ia‹ÉQ~’Ká×sBœÉ]ÑDú_Uñ(‹¿+Û¡˜á÷K#¥(ùûêf°-œ‘$_Ýõ½°IDÜ"ÊÛ…hl(äEö¹gX,§-üŽbûÀ —–>ÿ[ÿ p}µå^ G¼²Ä¨°òòÆzàÏÄ1g3Q™+v§ÈÀ4\²ÖZöUP,é@=¢8W8@Hò#Ù-ušp1£_?Í:]¡2©düø»ï‹¶¸ó×Ö×py»0­ŸÍ¼RšT¨d?ý†ºâö¸+¨ËrL}‚‡‰/0YxêŠÛ2­Ö¶Š#tuc"ß=í0ötÄ£¯Ô/Y›—‚2Z&i©Q÷tæú»¼Àï—ÿ1máªé1Ëã I †ôY£q%Á÷¡ØÓ1Ú³j쀱ùñHê‡]Ó þV%Ê%*%ãŸÔC©TtíÆ[Ï\©]×ÀÏ7Y¶ ;E´50ðk+kÏšb¦MfŒWXíÜEš$€©­©žÃÜcY*H1A”‘$é´·^Ƴï”Î’ï_ݽnew›µQ02ª”¼;ûéc÷:ÿ®°©m{èe.$èuÕÏOç“DÐÆ„‡µí"š×Ú¾šôn‹¥_x7ÙŸÀT¿“`Òl÷LgÂ[ÌiÕrQ÷QÊËéó^kÌ&®Ö9 B¸‘[íIõ.á˜Î¸iÅZ86‹›}:_Š'¶Z—BeU&Cõ¼Jõ:( °´«t‡„3Ÿ[q•”¦mó’í¼äv!X±ø/2Ùåç³0àÞ_Z®¸»“¿™§—Ësž°ûÇS^ò^J”íu½î´ÞìHÿt$Ô.í>z)£úÈâG: öYk:[¥Âdgó‰Ï|³•öNò›,Ž÷vç‰s¹‘xO!F>ƒ’Põ3bÖÜø™û€ðõëPßtëÔfOv'úp;Þ.…(Eðô÷¥#ªá>‰¤‡Mêrïds·pjºÛ÷ì˜|š­ÇïűìÙ[鬧u;÷³|k¹tG2ô‘7Áp©DÉf°ˆwÅëØe¦o ŽPàMy±ÏÿØ•&WîU?3Kº,ØG10)ñ˜š0I•—ž4¡©íSëÌ=ŒŠt×§9þ×6_ø­Ù¾!þ!ŽkçŒÒ»zOÿ•£cV>ž1Ƙ¹x†‰„‰C(Þ7;³êÐZgc_}ŽœŒFû}Ç[;}kßáŒÜÒ¯OÊ•Y'pNàœÀ9ógŽ:VpšúXÁ‰C`Å?¾²£Žœ"‚š;ôÚÓn8g t" _ò¨àØüžßNi‰#h¢Y*€ÈO~( 'âzZž‡…µ?YÁéI±”†‰ê1Ò,±žr8qGçÌ!¹ÜîQssÖ27[ §yñ ¶ÏbWÞjÀïuÀÌR$e=ÏFYr$fHMßåþÁ1è°unJ™òÁeC“À:Ü?8BOž%yP“n¶Z…:¥é^yrõ–5ë¡BÌË¥oeÒM‚*”åL3Ìù?ÛÀY Œ•GR,wFÀJqbgYëû,0Ü× }ÓÜunW€«"ŸÏ bh„‹ÛizÎnƒô–˜%F Òe†/Á¢Ã»0-Å £2#y¿´[µÊeû¿¹czlD¸)ÀVÂfƒ Xyïò0Zìœ.Lƒs®¸RQ/E†ˆ$–,NyÉY±~Šè5 ¼¬ýQûƒ5ëªî.ŒÝ¯O§1>l­å{*áÆöÉ…v¿Tb¯›5FÏ%¨Óï&¤@œ(-sqC½ç\§-ïø‘«ü2×ÏB'°Ñ† Ç–¤WôéÓzsörÏs†µÑ‹å€¼óþ…ìcà¬l¿ßʹŸ‘&0ú‡õ{P>éÙó( ps/Òା6Øšt®„[bx©dêɽ€µˆº„ÏÝĶãbü7¨ëàTÒm[Í<¯m …bNèM`$3Ÿï¶Þ{›c.Gš;*3 ÀÆ`[ðS òwUÞFµ˜uL xm¦u~¸IHÏŠ‚g§Te"t¶?üán^v™{Añ™ž`ZÙvJ¾äpÆ[|ö{hhÍÏûÍ! bÔ§5¡¯YQ×ɯ|PuŠº›ŸôLšdûSÚÁz@¥~B2¨Lw¶—: “ÉrÑAô…Á¯à™Ñ ¾dµ:({q-¢ÁéÚÑæ[ïÜ6{[¨vŒ±‹S>áú¦OœF¼‹mèiQ¶!õw¶ün§ä¶‚v"6Yw4 8xѯÛûi ›þ»_Ž=Wøt²ºRokÏ‚Þ{ÈÜûf% ‰½(çêåOžJ¨ ŠßþÛBTÅ¢êk5K¢<‘¼õŠD­…\ 4¸8 Kk¦±tó`½`YX0ób·qÁ“И‚ÝØÙg­T[f9(^ëáE‡?rhÁÏv¾Y²¥­ZÈ ÇLa[?ƒ¯²ïyê§jzù6žîŽ!®ö¹Žþäƒmî¬]†öIÓ…G{§d¡Ç»£¥K>¸4»öŒ@ŒŽéE1^ÎØ~f°–íSÅIc)šžóÚÄGZnb Õ'‚¯©qÀdPrŽÆ]©‰Vz¹œÎðBˆªB!@¸ÜwÁaF™çÏ¥™Ù º½d £ŠÔGa:¥kË#%±5ÏpÎö[åÿ¨Oª{eöˆÇÿ[._¼¹^bƒi[îü÷.•Ôñ|˜sªRø9U>„Û›òû‹òé>ÕtÜ3õkW4ÔÍ ùUO €ÇJ{œò{‡¾ešŠzs2^ñ=Šô©Š¾­ŸÏºýÙíæ%9ŽëHø5ЋÎ&©=[7uëƒ×ÊáL{‚¢eùv¨ÄË8sQ/uâ}Ý©ñJòÃ5C¾¯$åró¬mi‡Žg‹Á:‚¸ºß=O\ˆ/¶#Îê&€3ÚZãÔHh‰yLý 8ž€Ç”ù `j©#‡ ^lÏœ=ÆÿÕ)¨ý±1_uu»ôÄÊ üŽ›úA×:]þ¸Pú`¢MÑ=¯Ødï<îŒ"ÛXú#ž“mò»ÓŠeön¿À^çžüÖ†ˆÝ‡Û_ädoMÔ?­?t—EUjÈä‚4ÁfG/ÖŽ¹Ìþ$ѪܱIô•6 þæÆøF_«Âé‡}\^sªŠ Ü.ðY6Rđʹm_Nw«}#h±Aá)’ŠÇ#Ń^ɵšœ:›à=ø̬Žý É–|&ðAÄ…øv—«ŒŽKMÑŒaÖsBe׮浖áAÂ)ÓV ã2°þõ‰Aøf¢lŠD[ÓŽ:¥0­6ÅøõiÒÍöLnu(Vx€¢ÜA]µ¬•ìx÷šË¥äñ‘ƒÕ¬í"ºZÄm4„9ÿέMkÞkO|¾ª2ì;Z,%Ì|^SÆU3pðU•au§+>nR¨«ê¡œîï¸@÷<‚ÉÈž9qàÌòüarõ+8²39Ä5ç ×'á¤np·Y÷8'pNàœÀ9sçÎ^á$Ç Î·½ãŬ##OßhÐÜvDxúGƒÅÊöú¡t„Z³"õú±RtÝûQÓ5þÐgOïœí§;)W£ãcÓnÒûgåžaá:]ËC­ ÎØ­ÂhuSçÆ§¼Þêd¿OIE—›¦Xý|í–íMf5¯›ìXøÜìŒËbUÜCÞ“òÿŸ©<ëÅÉÖ xnqâK?¹pz}H#ÿ#÷Ev„ëN­¿œµðLàºüÆÁ€ârÑ©W•¨®¢ý×,u³VqC`ës Ãh3¢ïêÞ[–bwpfKžRc@<_ˆˆb’'Z>´v4zcñض§RæŽé³¯*š @òªZQ@qPäîÌfKÈ=ÀIðòâAH×;—•­}ŽFø-÷Åâ”s¿ã&Á€¿íxa•ÌœóNñ’7!Éjq«OFP™â™(}/ÌÆ1À»Û˜á>¦Aî‰Yq7ÛüŸë_%*3>•|çZ"èoa*½P»wϧخÓÛ~¡¡ gãË•‹£ü°µe†ëlþþ¨Óˆ?®¸ìH¨&Û‡%N°îh©~€ï‡ öüÂåÍ!‚Y¯‹dš£àø@Ö,'É í 3{¦“¯Í:+Èð ÆεGrÙébi‰uu„„J %=cî±ÑÖVئXÐë‘îÕ>pž+i©×Y'ü‹ œÎrúß³§™Ú²„Õ(P‰Qk¿²([CSžoÿyšgzáxeè4²þFo©ø¼ÁXï|ën p–ðMM‚œ{Lv‰ã°áoÿH.Û3ñ¢ì¨ÊIÍxÎ80BT'^¢:-‰ƒPe}·Þ·ëÍ/7 Îx*QP:¡}…ó•GÊ´$H–öÂáú§Îý „k-ƒøŒìÙ5Ðãßnì³â®_¨eø†òf“•M…“d¬p}ñÙYî5¯gê?Qð"ÙF°Õ?®‹Û ®øxZƒ¾‘V®!]ÓD(Ä|”™‚’.*| ž„Ù¯¾-*b¡_1¾ ;’¿³NÞuÑí°ëyܶy°ÿSPò›RÅ·’ï$z:Ô^i2mÖ†÷Y sÜwji)˜Ð€º³JÊù@hÅ}µd¤¼%’¬ä5›8Ñx¶¶Zî%ÙA38Þs ü¼¿ÒtÊ-´–ˆA»í[8ßg4ÂB4\Z–¤ïYÄpjdñ›¬}’Ô„Ð\0š’Ã1 ŒœÅÿŒ #ÀÜŠwýw¹Zg:æ8¹ú¹ÜþlНXû™2Q.¨Œµ ¨Ë×<àlU™§6íÁà³l&pü?è¯y„ÛçãîåÆ~wBÒœIbÂó"JlHÒ~™S¼¢úÎ…BÊU´ \ð$ÞÅ35 )*êê¨7`2PW0~‘ ]¹H´~ª¹ºzEÆÍU5 ÔÔ6§Eç±|®OêK‹~Z‡7:àx;&KÓªùÚ©\¸Œ ?· ¶`<‚ƒšòrÝmöÐh “=ÏxÝnãrxͪh±óqˆ —ûצj~•0ñ ð–š§%Ṭ!§ š­ŒhiYúÏûÏ÷IÐÖ»b‰Âðïbª/ -X'õ Iª”Æ;Ò%! twÚ£Ã]þŸôÎi·mcÌq€àM\ð]^H¢†•î”÷·Ã®¸É¸QnƒÕ/¶©N;³÷5‰ª¡®8ÿ˜yÏûý–Zñ[Ì/™(î7ß !8N!¿Ðq¸e8ÌV5⟙jTTàßN*ïÙx®ž˜N‡ä ÒüyQW\jöN)c¨|‰Nà2y³eY1P?z¾ÈfÿûU¡RI]™üËþí›Ùó|wÂoŸþà¿g‡âþ®g­L×:e4 hú‹d½÷“ÚµŒÖÙ4€4'Ë>/¯)¨è©ú[¶Õ¾Õ›¸Pùó¹Ü”öNdJÅn5?È2ÆJ¥k®dÖdº¨œµNe4ìŽÑ8©ª)Þò™Îþ‘â™™~.ûZ*³ÚðÎ΂Ðÿ£”ø”Gqdí!ÂI ²D¯/€`î©tÌzp˜ÌòIƒ‚>>iÖïÌK~Ê6oJÅ2õ¨KÛ1-€‹h¼$2=DÙq IÃ!šìá8[nÙÿQöÌn!6pm"éüOs¡–™cµÇºñ]Áqvf¢·˜ª«>M˜ÈÓ–í*#W2;Øqñ¡"Ò€r ]<#Ì%&›Ö(·MIu(¹Nl•ÂˆÇæç#ŠwÜ0+~Ñ´x¬#øÀáÒÞEü=íÐøh²ñ9uæ×4Ñ–;§ŠøˆàМ½“À”›!ä_»GG:ðø½ó×ùï^µµ‰«V±ê(¶mË} p&ZFMzNùa:ÿ ÒµRœmºaK2³@žžšˆ95@ܺdMŽÄŸõh‹|˜V¹¢¡êéìœÒ6‚ö^„‹Ã·'Þ'Eïr¦)ÎÚªzwi‚ßx÷*6¼±NBã ½•T1B1§z6ÞÒØžíÝÍ„fíÿ×M2kLµnfTñ졜Ùs@g#S!cÿc‰2ux'ìtá#kµÍÆÆ¤ÎÄáž9°w“×XƒÎ¤BÑMÆ,wåî”×õ瞊ÑðF—.8G2NŠNàœÀ9sçÎ œ8'pNàœÀ9sçÎ œ8;Ù?j8 ÕøÑt&T Yšéx0KwFì­ìTø›Yñ¦ÞÂqåZÕ¾("¯3½î6òn¬¸G‡ÎÚÐÊ#÷'嚑Æã÷”:É¡ÚËmʉrKõ@èû_B³-³ ?´ÿ’ÍZxé@á=´jl÷ã0š=H8½x½m‘².ÿ`]³ÆXú¾#e¹ô®¾9D€±jã¯ôì®1ŸN–Y·k8:Œ(¿ÃF£ ÑÆàûÝê±í]¨ü/EéY…²´WuñõAŽÂøÞ­É‹ÿèÔ‰ð$yhñÊùâŵú]Uîú³­*ö„/ÛYóšÚYv"ˆ/…Ù‘_A(¥¥6*FÝF¬ÝQzÕ^h©·ä-iØÖhö‰KŒMŽ›SáÖO-!„0ÈÖÇuîÆN•„®ÿs£[Ý»Ï$¿*.ŽÝ"L€×»XuÛØ«²ù;ÍR‚p8Lg³2Íp‡;Uô¾À±qjþõ|"ãHB?;!â#JC0È…(3} ƒb´’>Øõö==Þ¤„6*@unâÚ}ˆØ"d=x õÙß°9Môß5¸ëqÿ Ï­u™;+Úup\€sÿñ'ÿ¹m³¾Ù‚_6Â( é¾aMïF¼û‹rúˆÓíJ3©òs9_ûX|Oô6@ËYÕ@‹ÉmËaýÆÂp|Dƒr˜3§Š`Qy´ì9wA¥£‘44BÃóáΡ£ßAÍÉíàô†EH6#?“ßn¦Öû3?ŸúT”žZŽ e”Ø..èñZ²DD§¿B4Ú ø§EÀlÀÇß]Bp{,g ø-’ûmàp%+Z¥ßÆÎj'e0ÎJ°ÐE‰±dU€×DnÕñÐ]›ÙFŠÀ_º@4³’ÉÍ¿Tsjõ·cpv°ì¬›@Fµn·g/¸ô6}¢¦¬¡ŒŒÁñKQø«À³F€øeºú¼˜5ë{®n iúFÁŒ‚Õn¤T<Á»„=Ž„4»ºÚÇÞ `~*œ¦: ð¨#dÃ_ z”<)׌w¹Ýýy3qï&´”¶ÏÍï&DÊòÁlg{…¥”×óÑ(X¹Ãë™G&Á`QæFêĶéSÒXÄÜÀÕœ19BZœé²tùý”gûCëbò¨r! ÇE=.iv®±ÜÑ ª'ó¢+Ré;á—ýÔ^,AÇQºÞ´ì«•ס×þO~êEfN[ç“q?ëo°f¡žBõ݈Wª­$åÓI¼þ‹*ãj¯;R)¸æáÔÆ= PËáòŠZ »=ÆööÓý$Â,ó¹ÀõZ ð‚¤ÍõÐÎMtûHKÇ´S1í `¤À‹`¥# ¼«Õ™€€Ié8…‘Þ4öÓËð5 Öžn¥_ó{<³ùk€Wnì2U³P—ØZÎ'wC%&êJ$îeìLE7³+Àgu0lnNöüZþ»Ìé¨Ì@øñ¹»fk3–éqL£±»<‰ÈUÚeä*€ñr_óDž2D羽ôB°p_“lÆÁÁ?oïûV’Ÿa¾»´†ïª@‚÷Ïü¥ÕüLú gOÅëÍvøpI¬:$ËÊ >Ϫ2Ùüz—Y¤1DtÎÓ Ü8ÀØÛ%‘§h½¯÷7¿iáée®ÃùL‘¤‚$0À8x’Û÷žÔò'ÈÎDµþ#×xË!À›~ÆH{÷”ì {ç àcº-䪰çŸÔ6ˆÞû&±xž,!1Wëϯ6’ØžfßeÝ¢H3Zr(ª#@ÎíúÞS~ÖŒ/U!À¨Þ´T©§e;yVÌUêCÞ€Z•þ—… ÝjRóœCé¿~[!Ÿ¾òËVÛDRïÙ÷¦øö!!j|àgùpüÎÚ÷­ÍÎ\[lqÖŸÝ*¸òuל¶uÜ8Q‰^uM¨I`” ®6¡%SÐI;'«5 ýöšÚ8µïpÄ\F8wua)Ý´t!FåMÍ{ü)·¦YÙX=}¶#šßÁ4oÏc2;¨š¦CçÌõ*jW}(;ÍgË«„q–d«¦P1±3é>[ı/·'µ–4¡E,5W÷Î<ð€ðÛ4«I=þ¼“IŽ»ú\Ù“à-áÃûç9:æ¨÷™*ÉM‚ÈÄeþzDÜ!(¯ï  œ~²­½ït×}•Ïߟ1i+¸RÂÅîäÖ~,ÄTÚMÀÇ6é†?Ó§Š0q­Éê¥(zÑPŸ×…\¶?hÌž ò¿Æbýr!üùÉ ‡»k%z,ÿk6FÕŒ1‘Pp±ö”9”É9%%.!ýü#-°ò>‰õþ“rް 4kßKfÅS1`¹ufÔñ¼*ÀÈØûß…•gŽ„:ß7 ¦bk$_58Ô1¨J`ä@}G4þÞÒÜ4F&w.Ov fÀ9sàpVœoy½Y½£gVkäHáV¹õ=1@ë¶ôÑ´­r%ûŸ>Ѭ~p×+¾{¼¨óÿèàÇ^vÎ!œ°ß„¶ûƒ¹™C€³6<³~Nˆ…c<¸S½nÔñPô„ú?}´/îü«‹•ô`áDoœ ùæs™ŸåŠNë½.÷Î+<GÜ”8ÿ(`‘VÀR4ÈÓ•elX^¶OÈý£+ÄšÑ8{J-GH™¼:û@8ø‡mm+a6WÃ}Ò,'?éÒŸú:æLo¥œ#ú¼pÏäìl÷É­Á¹Ü¾‘öüéôîh=â"² t{›^¿)¶Õþeà»-qKvÇ“p‡GÊñ˜’ €Y%Öeé(Þx€áŒžß;œ’tΑ-1Mˆq³M.1´Æ4S!;º·û¡vÕ Ýi Cõjg ï$ lSòSaø¿EfLõypÿ>ÐU{…awu²e'ak’Ä’R\¿W,"ß'ýA]R§æ3þvnMQ ­0Å{“Ö2:Ù3,Õ½*Tr¡ôžbíbì¬d§=–뇠9œÍq€tƾŽâj=÷©1Äùb7@è²µô½„a`w%óŸ»jRúÂ" ™™™ÃßpxF&”]Leª¿%9Ýü„IšäƒŠZÉ.9÷úQÌ<·-uŠ—q¬ÃzÏ"Ò>¨¼”‚ãÌÝx‘ø§‹ˆàúu{f·tË1Kîë6~bGQ6)!i z y›‹:>¦úÈAMÙ£n#ñ´«<`+A'¬5è.˜V]s¥`[K‘Ã9—vèˆ+ú…³@ót7ý2ýƒÏ#ˆœJ%Þ}™ê‹„°Ëí·—ø2K)—©tR'ÔàdÏãs¦Ú–¬~`àáÄMPu®ýv4‰—·ƒã©>¢uÀ â¼LÒÓØå.^ØN ¼qÀ\(»ÕËöå˜ôÃêΊþÞ³ÎÚw_ ä&½†£tFµŸ1×ÏL‘gH0žo}í0¶;êºuy›;Ø?åwÀñ>ƒÿë<{³õÀÔöÈí|©p6;¢Ùëµ½¦}ŠF;–?UÓ—Ï‹‘\”s¿ÓøÂp¦;©3r»ðF/IàÙÄ_H¿Üšm{£úÀ Ðk¹~š)ŒñŒme ¼±LÈZ4»Ãœ ëJ¥Õèœ*aÍ'.½ª€e·0# b¿Ì¹„n»µ©ç+©þ¯༃†G¬»˜öùâeêõ$ò™ÛòÝKò1 þïävb¾ìîÝâÿ:7©xTêƒgK/8Íô·/žµ¼ ÖXäçÕÀÓ úMŠk¯Tà0'=àúçVñg-¤ðånËÿ_UáVWƒ¤×ueWŸ{(„±Šš-cÌC»œ£ÿŒ¾½Eàƒ'˜\õ~ÕTLù­¬¿ð“Éâ“•²±).” ðQÀÈè…g=^½•Úx÷M 罌;#õIpG.¸«AðËMW/›žÈá4¶ ~,êZÄeêNñ`8MüWføƒïŒOK™ÁPP‰?z&qÐD8‹ÞÙÉÅÈ”#D¯mÏçK–=°e¹¬ÿé”âxk“Õ‡X?7tBň9Ì;%³·tâœi³è½ãv_‘—3É0Ñ­yKÂ8%L‰–»CÞí'å€áñ‘|.ÑL~7O5Ør™3iµP6›­Jþ:À9‡è/)Âx©Ê‘¬þ,³<¦þ¡¥ÚdÉØÈ*Ú×^íÔµ¶éä•1•|’kúV2§oF¶vtyƒ+í ¡Sœ'Ý]«gÿ™„Ýçšz,¡UÛ÷î Ž_›MÏ4ÎÕ ¥Úﵩà÷I7úÓö—‘nIà|“/Ùî=¯,F07¶®®ÔïyGýÛl/|‰€™ñâºSpÐ^ ”»in×Õ*ßu±5>?£¯CJÐ>RÛïeY‡Mf"æû‡± Æ%Üã#Áó 8FÄyÌ×ɬ4øíÜex|€ËQºOÔÉÃø»Þ4áʼ |€ fVÖ7ܶ"Å%š8½©™Ú>*|×$ÎTÕØ¤ Ùz02|Ñ”'^Pw×ú;6öMvº£à§b@©I×ǹ)C̸,'VÚÂÓ(ùûåè€àØñ8þÙš±±m¸¸~ýê¼Þöúk(œ»ƒîÚ ,>á.¾ãç2TrÆ¥ÌÛA®g;=‰H.Š®ˆ,%îlñ_®5<èåµÊ\:‘ÊÑB|[ÜËsº}ÌŠ Ái+ß¡¬öM¼eZ›¹ o†×ïJJù´ÒæÃZ|t<;sß{l}a¾ 3ÈJèü2‡?R‹ªÆ(a£¤¦nÔ‰#©´ò222&2£lqÞR:—v î7 8 Á"é¸úYY9TÙé?f¿ƒïdeñ àcŒžæÚ_ùzà¿e©u¾.[-ó1Qa@}[Ñ97¬X° iV—yíÖµ_ÓqBÜÀŒ= Ki¢Ðî,êåv a̳á>ÉNHDÁ9€èy¡¦Þƒ„ÆŠº:¬ª]ÛGQÖ€KjKÉW\=ùôÙ2çD.B~©Ñwr÷N×Ç!ðq+žšÞÊ]1¾¿ÍÍž‚é Ã~²Ë½D%8"{í€uâ3õ‹?šÉÃë Qœô­?O@ŒuÊb~Nä]rÔé!"ß–½&A"# ÊéÛ_æK5†–·â­Ô}Ê–@öí'¥¯úü¹—¸S«Óh¹l•ó¶áó¿ l&À›+2ø3iúvÎ!¯\4ËÃÃé€r¹D«¸{Žü–þ~ؤ·n–öI÷3›%aKã¡áÄ@ÜF¦‹¾+q[<} ¯§·áóâ)k|êlµrŸ2ÕÇjzü ·ïÔîti¬—ó8¦•Él”¯”{÷ÙÿT%È{œª¥/ ôðq‡Ã{nHê¼^¶):—Ú->ðœüµFL­š½keX÷^é…±g»Óa¤‹ÇV®"›ñtÄen[Ÿoä®KxÍïRb–ë"J”ewG÷°W(E‘,A‹ó?ñb~^Áe–U•œþ6´3§8sfËÞY¨'úh&˜f³À¦ åñ:ç‹§¨R¯°JcžXÖ½.W„}u/iï7(&ÅAÍ2$oHá㢾«À(¼Î»ým‹Uˆ7fÌè2)W”»øÙË] CËNàqŸÄ[vpJŒˆtn8K‰s+ÅÓ£¼2@™¾’1E*ÿTÑhÞÍö¨Ft¡”m¶®(Ø Zz;B§I ÚŠÛfÿWìN :pG¹¸Þ‡`~Jà AE<*3±`U¼ïä£Ô`1‡36^±XW¯oÎ/סÝHHE(Ð5Úçv§®=ÎjŽp&ô15ð!eÚü­Ý0«ªyV¨1 öÛÝ’S¯tÝDTü£­%­‡J!ER¾òœÔWœª(HR+ÁÖ kéõxtÎ||??c…×~*½Ö/ökËÎfgÆ#–€$ÂC%Á4ŒâH7AFñºÚvcgOøuNß–¼7v+ ,6ÝPGˆt±Ûr,HO…¥ ÌG|)ާ5¾£Ö2÷À±k’•_ÿŒ‚9+ Á3) ŒcË»¢Ó•>‘óª,(•NBHt9Ì·P†Ú(ÅÜmÎeºê Iä$LZ¡‚€tâþægVƒ’-ö;!™’÷ýMƒÛz®ð$voÌŠ§= /‡)óDÐTCÅÊmÌÂAÛRß°e{©öR8IØÊÍÖü'•‡I¤àµò¥U(É«éÖÖÇÍÐpìa$jö-ó0c…béÚÄc蓮6ø¹aRm¢P±Û~ÄU ×#‰/…LŠ0޾å¨öùÛÉ۴|Ê|±õ¯oÔ" E§Ÿ‰º¥R5ã' ‰nÏW_îoïî‘ÉI=cß'÷p»J@üD:>šëÍzpû:¼«ú‡6éxþqTÚÕ•9"k&îPO÷§[éÀÄ«ñÿE+û´ô®'þÆ7ûõÚ>“xƒf«¬n¨ãÕGDˆÃ3§¤4V]šÈl«JxþõÖ½Ë4Û4òØ¡y; K§ºƒ “Yæ${pŽñå0p[OÍ»# B"=—Ö›¥èÆ^6éâûmZLjƒaàüжÉ&Lïd!·H¾Záüaá[d\3ƼC%…Q. ªGVsŠ]s]Ю HXtlO裬P«@0†’.äsÿ#.'jU¸yÇ_ ¹þ£wD§ªJ©9)òÜÅÉ œ8'pöhkzc¶»s";ûgN8Í~©ªãÁ¬Åà­ã%;‘Ggº”$±Óq¨STœ™C¬Äï„Ó™ Î6N‹c";Ù!Py"­»gÅÂiz×KÎFíÈ4+N>z·G ÿ ˜ePæ!tw×µ½UŒŽl¥FõÝAš•&g$uœ…>M¹»ãs7÷Ž˜s‰â9R`m™_ÜÍ-Þ8E_quxxuÚ(ÙÇàôáŒ{P¢ìØZAðÎ¥gB @±"Xã†)Ä=v§rfP;‘|’»£Ìgy@±Õºßí{`í ÍJöyNüLâûpF¤^ΓÆâÐ'¹¿½pTq8_Üvë§’ÑTæ^·ß7°Rë²áÁ0«¯\Žs!騳µUaÏ5ƒÅøn÷»—¡è8”fk×Â%Ì{b iªë‘Ž ¹Ñ}·[…ãvÞ-—ÅDCu˜>Ÿþ…¼6&J`Å7íbÇ}¥ŽêP‡jÇòD¹Œ'ÁE8ó. O Ä7ïzØpp²“üÿ”cܰÚìgºfÿ[‘ç9û†ýûõd«åhùû Ý]ÔɘþÇù‡a¦ðªdf\˯Îde[[Àæ¦qVJ½Ho: ªýV?˜3î<á÷@»z¢3œ®|Â…ØQ+¥¡î¯œ’·°¨ÜÉ3ÍÈ-Ú–¨nMš÷Bé'^Iv—Ê“Q*X hÒ·ö:ͤœmiKÝ£¶ÓÝ7yÅ®úŽyÚ’·¥Œ{³][=x4§­ø›i©q­ˆÞƒ‰˜¼×m×û-C<hOCê-êã·nðªÜ½ï*dÇ‚$ž›¨$;1>[–w˾ò»6Ê‘½ö<‘w¿–@ŒVßU‹þÞ=1JcµÔc5F&”7{ÜõX ŽÊO©V@E·ƒVRë­x7f:ƒSû®ßPÁCÀ”FçOuCˆ°…^¶$—5¾–]rŸ›ªsQ¨L}ÚÊ8u÷—ZÁ®¨s§‰=Û*¼¹~Ù Î*‰l¥‡ÛnR{˜£P]R/‘~p`< ’´]`v3*ê»¶‹—ÊVyß䘳âÃó×ý…¼7{ ß?æ;!‚YÓŠfˆdL»ß©g˜ŠYn¬8áD%¦6 ^0)T$¼±'µio€j³¦çD—ª=%8—ï)$x(ªéte…|*X‘‹‘Wy~§gF5r§BjxÔ6šî…ü4â<4¤ÙIÚÝÄÞ8kï—±ï6%‰¥´T—CòL<þ‚F¨×–'î>ñΈõß›à¦i{DíØ_¤}f¦y­]&!—â’xfô¡ü|$wP­‡£ÞýwÛ†r¼ù7>•K욪AÚ~=ë6|QšoHñ‹6’ÁyÔíêì·ÕY¤Í¿øTØ•Ù)²ü-¡” oÅYqaiƒÎ ½®?kŒuÖk«,Zsð­á¸Ãø1ÞÖCÄo’¶ ÷n½*w7q›¥ƒæ` fí…ÿ–Î=K™ŸŸi•¢Êî”L´ñ=Á9|yîƒëß7’LñÖ®¨c©^q²¶ÃŠ÷m4^zBaâ²¡Ž£²¿Aûµ¸É ¢ÎHÍiƒÇ&ådÊw  ¹i¬U@¢õB‰¥¶kskÎáL¥ó@O§:š4•íè«nð ñ™Wê$™‹J¾cÐô´à®vµÃ>â\ýˆ™0©Æg2%h-œeÑú_´¹'zœùtºcWbèîÎf×[hûÜÚ;¶†Ùø _Öegêñn陋Kâ¶Ò½#åÖ¦^½•NÊ hy­Yç•üþ¢}û’&'Ed?ƒmµßrä®á8Û¤–…—~PLvÃQcM¸î؇$¾Ïâky\6G¬ Om¯ª©Q˜ütITtˆ‹ö´Û%® ïûÒιتÚ5±ƒ±¬< Ôç^1ï¦VLZ³ÒwÂË l±Yâ¢=Â’Q‰ (²ïŠ:;%l'Û–9Ì##±â¹7¼äp$ZPôöd®ª3 ©ýåÞqÝ6z¾P¾sÓoëìÒÞ€S¼õAÂyAÛ¸ÞDLN p¡ù³qö,å—cÍWöSÑûp ¨* ®ÐÚRñK¡ÄÏ%8(Ìwx pPe/?ARÉŸ·øÊ(àØ$Ix.w§Žé×c¤ún2‚¼è#kùŸ›M¢Lª£Ä1ò Õ}çS.MX4Ï?–àUîJs}Ýzõ ™%~3¡xHÀw߈`5í FöŽÜ6SèÂDX7Æ,›Æ‚Ñæ`5kb8zÖ(Þ×IÎ..Ub›/ÿrTû=âZ©ê‘¶Î\nú·,³vVNŽ¿âŽwÌì8F㤺éÎ œ8'pNàœÀùó gå‘cÇHtø[Îq“b&Žòèd§3u&Ž‹ìÈ4`î‹íÉÈ¡ªN¬ 䋿ÆO”:ë6u¦=gÓG çfÖÝ,—ì¤kƽvØvG€STâöŒð°áØl‚>šõ•NUrHŽVÑí9»ê¼Ó)ŽûàB3K]Ÿ÷ebtppòçµ²Ã/ã#e–Ìõzs³ùK ‡èÒí—ÔRˆaÑ‹˜Yð‹Àåå¶hõŽSmx· ¨œ M4kž4qýZ˜0>kj`ŒáëynªÖïÈžâùµlZçŽë;óº®%¿¢®kã+ÙòX—»Þ4«ÌÉÏìUžÂ% ¦.Bz6N¢åˆÍw¤‘ÛÜKDçò3£5·xz|ÇðÐEÙGòq/~™Ÿh+ÜZ¦ ¾×ƒy–{{lå¾À1¢«X¯ñ’-‡[‹‰#X÷.õ¡“[ÔÓ˜ýÕ,²js ÔMOÍŸƒ¨„abOhNf7–ûÐô–7äl§‹2½Î€ërí[è-À0¯øs´‚²á‰n¹:·/œ3ÿZy»Ë>OiðÒq‘ÐRjs­dýλ\êwëÖ3{¡Ž[ZÊÙ@ñb&³^ªêú¿ÒQBk'éߌægÔnátöéqÍT‰g^&á®ÇiG~‚¤\ò’ý2 ö“YNç?²¾¼èûØöXޏö ï~-è˜!íôðÎÎNbôlÕH[ަÓTF‚¡¨-zæ²W¾g0am™—d_ùÛNEÃD ž <>_Oælâ—:ug€@-+s’mõK}ŵ cô2 “¥×¸gÈF<“¾ïñø¯†8RQ´SqO.îEH”Ü:×fÌ3Ù{Dm8W\€£JÑ/8þ¤'—Al0v*BÔ'œoŽú³Öý«¦þ¼ÏÓŸHmv¤ñÇcB ²òTóÑ!á¸5Uý øŸ])¶[äþ§ÑŒ>Üì0ëC pÔ’f5€æÄB–´Ý™Yù§JÐz⦷xq¢À<Úi×t!ÖËPûtö¨% |F„Â`:Mðo†»€“Ÿfl”ÉL·Œ¥š‰·KJé8“TRx±ª}ÁpÍþ:1f=d÷p|FÆ{$K¹\h~ñ;¯·Uµ ¤`‚-hvX¦i™YIåO¿·É³"Q؞ɻ]“šjªÆ˜ ”Œ‚KÉwëAiÒ­Lþ~%—$'tËi£Ø ;êÌé˜Å|3áÞ3þïU|ß-Ýc3ïÄðf§¢ ²&Fõ .²Dñ†[ÞÊÄùZX›®›0§ÎŸÊ_±²à—2®¡XñlÈÑža™Ïi:îß2œÌ(Ô½ü¦ß6ç×L¼ž9drÔd¼ïÜÀZÂÐÒ*9¢’ZÚ Þ—Û‘òH°Å¶igØmÛìKD<ìœlüð¯à6‡ëÐÊž–æî)~¨ëúò|Õûgôï¥Â˜ïøHžÑˆÄ£ú>hE°æÔ¾ÃÉb÷Sã_ͦ°›!˜8æ²Ü§ÚaþuK{B;ö¶w=TDc›‹WÌcŠ9‘j‡ï³Ò(¨-=*1x¤‚Èa½,Îßgº]öA.|:Ïúà»[J:-ˆpK©òÐv#"8Ý'UC85vp ½GÄ7;}¶O=8Ù¤|6ß0./U¾­‚’­jî&ûµcO{Èyf‚üùîgG‡ Ç5:NàÛ$êêè>Y÷¯˜ØcRcÞJ'Œ¡b”ç2Q[1ÆÞú5h>á³ê®ì˜®¥(Ÿàº0úE{ D]C…ãËîvþõj gí^1ÿ7‹Óݧ¶éU¶Y¡hÞ{Ó™Ð@é$®#Û–øT ¢~q¨ôåI½òîÓÜ'pNàœÀÙiʺ“:±;æeç¹#‚Ó_vÖëY,ùÇBvòàíŸ êàexÜ`ýu´Ôñ:cn}¬4««ÃÑÁqòdÃñ€£²yÈaÃYêÿõC‡î&ì`VdzíYlgÑY|Xg‚ä“bCCß·Àb-غ#< fmÙ”†”pAˆïö×ÏœožgêÍi“­®¼-¹Lo¯ž|¬¸(GbÏ'ýágh]¤ùè ßŒ‚¢+ ‘<òc·…º²–@ÓeΖĕW„s½ï:?raÿàh•dÇØãAjð•Œp ”¸Ù‡u®VýÜî~™Á¥˜Û„i«¨‹þBÐLFÐ]’ȃcV·ck®úŠª2÷ÏØö[@‹åƒo›íëvó±¼g8ð²>Æy;:7KØ?ÓDCB,¨< ³ƒƒù0K°ìN¾V¯€d : j¥u¢£tÚ2î«Ú²tð´ÅÀù]‡&oø$ä+ìEX© ^ŒSË [ÿ⑹ǂ Ö§´\Ù³(÷'µŸøx׺%`뎬…•ŠˆÖ?ô}Ÿ“5è¡ùY‹:Üœwð†*SxÓ§³›DÀºw‰ # Eý®Pô=éWîBx»Ž´¸3ÐYr*Zó]nu"¾é®,žcêëÓðp’’ 1Jnß)óÑL¤c½ËðK4;¼•Z$*×ä5À!pÀçLí)Tx HY^û®ì¡M{| ë)+Þ¶p” Ù „I‡È’±ý·V½4øVÙþýJ’œ‡šâÂí—óé@¿³ÙE”‡&I_¿âvÃ=Ù_3Þþ¨:×kî.¥? "G_üÇF‰¨¦°½øØÀLOõ§ŽÏ| žZ.ùeª?Ýþ³õ$:ùKKõ`æ¯Ô™Q‰ 1Z=×›å'‹Ÿéÿöy×û/úªüæ"«Q¨èÂÈ%§¡§×Ù9Û2„Š¢òäs?J4*"Xêk¶uÉ2BvÉÎM?ßtºm1rê·õ,ëlØ~ëÔÇ-œŠýÄ“#(&Ãö•º!¾*‰JulˆzmxÈ^ª@ªßמýÉþêà·Oš—è1.á‚™g h>ÂMÙáo†PôÊœ ¾—Š}·#•ĽѹÉU=lÿ؉¸ª<ó,JÄ1p@AuÞ ´Ð·‚YùäŠQ¹=Ž’`áe8Q”Å`ΦªŸË  òéoàû¤’·flÙ¦ßéÝÝâ¶eeí”¶Y€û>\€æçãž×ªò\BZÌÜkðàØ= £’_˜¶T’Q;XJ‡žû#ÔRùÄð‘‡à‘¥`ò]ÒöI쉺i.ðq(o߀JˆÐ@˜ÿ¸ï(s*fYbW­Änçè£vÂØn™_J$¶ç¥¤~·’læ¬sRFòo…ül[ÀÚ¹ô޾> lµàöÝ©DP3WŸõÛõ…§½óìs%³îÕ<Õ!]¤øIÆ8P­-ZôÑ·ò;¢‚ùSc…/nÈv—iÛ+0ˆ¨\UÙmzímôMÔYuæ>âwoâ.‘ëà ðœ9poúõG%±ÝP# ›OÄ;}–mÜè†ñ7ð͘Ǘ;¶2í&¯<2úipƪþÈjãNœµ¡SïËÉ€J¸¿p”MÜùCiv 0DgÄ[‚>¢úÈ¿‰„>`Ù)­ßR7wøÍ݇GDÙ?oȦÜKŠb¿àHeÏ™œhB#Ãùõì›Kêrüƒå »½êì™(§WU½$»ƒ²ðàLdçý·OïŽ'_·² žÈ[ –Ì|–(^‚û „úŰ…RsŽùIíúÀá”-qò\^ft¶ɘΖÓMšÁAºŽ~VÙ/²‡IüSax±BI ‘á0á8Ù ®Y„ŠP‘Ïh7X‹·Z+ÃÞ?ºeêDößß±V8ö@hμëó¥ ¢¡æ”³—vò¤!°¶Ó]hû•¾ ëá¿pàüŠÆ˜P2KØ®ëóùíâ¡1÷©|§}w£ö uìfÎͯ^ŠZŸ§à:-¦€tñö°Ý3,al£¦¨älûMšÙžÄÍEÛ€ @„ÿk˜œÏûì }^XžhìPóílFlFùËå§—•<ˆÚŽË<@«Ÿˆ(”ãS»—Ï©>߆‰}ÏÔo—£] ý)î§æÕQ„1ùŒÀ)o÷Ô)ø{[ÞþС×`çVyø0šŒeS‘ Ñº§PéC©úrg8ª°5ùYŒ^1K~£{RvÛŠÎ,çO…Ú ѦQbEEäN¯L-Ÿ¡©³T d®º9°\¤“㻃 š‹Æ¿¤UMiBý‹÷û¬Èt—>®ç+¦¸À=¶KŽSšð 8Ó(q1èÑœ‚¬cg™Géb°+a¢½˜A¸œXÖÉ|‚³iz"ž’6k¹’q/ 4n8ùÅH.ƒŒÖÖeß (CÀ‘myä.{˜ Nõž_1¼ dk<¡BðÎVgL5Ø2^¾Öžî‚Y&œˆgÝwÿ÷ ‰Z–\j›ÉòÍbZèÛÿ©rnÈRÓéX>OÚZ˳Z»aÖXž>Pk*俆þÊć"ß´ÉÜuôò¯Ú×~¹ìîׇàü™šÄ××2k;HÑ;í]ö`Ò8B`&]–…wÞ·Èž—‡Î†ÍÕW2!ÖçÝNùÈ›þ**züj†7l*Ü-‡åßÖPWâ¦_(g!À] ,«¾E‚v«JÁ[Vhœ„¢»³òj—‹ƒÑëYzÄ©¡2¹i¥¬?² Íʪ~NOhjéló§o¤E“Ùd#à–"‹2 ærÐa)­ISžCrƒ(ek(8¶õ_Ùt‰'Þí@hXþìÝ(mUÄд$ˆ­645¹q6ì¹§§”|ø.õ®ÏÊ  ÃË÷ÜìÚ}Ò Ç*ewg`|ÿxÀá‰_xàÞÕ…+(ÙÁßÅõ*Žd°M¤üÞ'€g¦ˆ"¾(ç~F^6ÛQg°Ü×6Mtö4Ò!D½SÿP q—mÑ2ðúJÏŒë\v\ëåvúÕØ|!$úúˆ_ƒàÈí]L5$¸Ûlz –·üR»åöIì;l5HIðf¸#’¿£Š8¨ÎÎÙ‰ºæ{6g›÷LððM1uÏNT)³{Ýï ºoëÒ|™êìèÅéE½0Ιa½ï}=ýæÅ\rÎû… ÈŠö-ÒF×SêÿÖ&AãÑÝ0“Ë€…˜W©1ªµ+yÕBýö­‰ò§çmø¼Œ_œÆ’¢“¤ù€Ÿn“²éÒÿÖßs}ïpþ‚’Å?Ü8—6_15Bzž8SYÌeúîª]ÃI‰c{§¸‘<““y-3£¢0s§¸akBà˜ Ó£x{޽‹žq?°eßU‡±ršÝ64Ÿ«“™¨¦l¬­×høåîá$}~Ý6ÿA^ h/³¼¸ìçkŠ7‰ÞNšå²v [:Ü T„c¡ÀnLX–&K/D­{ËW{àzxYŸ:¯¼|*™£-Wþ‡ý˜ö:¥keJgäIØ°ÄŠŠ¯!.¢Ø–jBG ßrvYßÑ9kJÛò¾5±ÕÕ¤«š©Œ9Måjù›?Vx^aq\OëžÂeÒÛm-üuÝÇ£`”ûVs†YIñri©Ì¸”³ö Ä–sVòí@WS™[ø§Î#ùu—{»Ïôs¸a?fe‡Ä;o˜ ÖÝ\Z¤ÊÄÊŠòÝ;§<à)¼ =ž¾/÷[O°í<ÑýBÙ™½z€ ›Mÿ™ `O¥Ö¨ )sÀœê4ž!Æ=—ÕÉèòa¡Ñf¦­ÁÚîG}¨#tõFBvîiÌ7¯7Š¥fMv o&Ú]´|™¶GV7³YºKÔÞ3âK{õå¥,d‰§-R½¢Jû;à|Juš·N×,ÂOÀ8T„/Ñ„Üþ‹l‡Õ ÜŽãÜý¶åü®ÝÜÊÃx*@F—õ !HX[^¯y}àt– >.L`ÒÚ3iºx€¯¯û“ç’‚²·«²©«Ùu³Eéµhý ÀÏ^1„õ{ëªGéέ&»öîw’jrìùOyî®ÿÇúº:Svß…ïQEܦrÖ/z!!¡AcðÔÌéDíçtµOÕ> `äZ,žúËËø¿Ô¶$8þƒÅ¤h&Í7‘¾…–…Sf­ÌJzŸpš=²cº•~‰äö~Zû¬óbù/G§F=”çõhH•õ`‹xÎáÞ¼›ˆæØÕ²ˆ §‡: ò÷ôDT5ŒXƸÌ/E½³Óѧ 7ý%ÝaáRLgsÏÌÁŒgpѶƒ»&4¤IQàž$YóÕÊs|>@EˆX´Éãö*º&ÆÝ)ÑÓlêaªÈÚ%Fä¯Ñ¿âÁdG„Ê*ÁùÑaìóÂNi­1f“ĶĿO=°Ù 1©väa€³=p†ÊpMsQå£á+w@ó¢nÞ0AX¾ÿ3Éɸ}NY;Œ9€‘QÈy›bÈÔ[b¼R zåD+ #§a±þðÈ’Ì$W™+¨ŸÉNÑ~ð`×ÑEÂhå Tóàæ:I „tœ;P4x?œê¦)sßã2!„óÉå¥X)ÇÈa{èPª jÊ¿ÈÃ.P_ãæ'‰¢r¤×Þ¶shEâóÔ[p·Ę4+°ê`Ðá•¢ ;As„P¿rϽ¯ýŠ%(Á¡S§FIÇ.ùž÷ìÄć6á«]³‡#i•ÔRÆ(LíZZ+·’:ô*Q +‘f¼Zhc½ìѤP‚¨¥ðàYJ¹à#/'zà%&ÇüvÐÅ‘f‘ ?éU9T"÷Î œ8'pNà8+þ±‚/êÇ Nq Õñåלðá4wU¾4'Nœ´\Ð=m³ú+º:hê,§I:\x4€ÿ¹µãÓÎâ›n.#ÿä³ ;ýhú á\òžt&Ñ×¢˜ÅÕòœGš’˜fi5Ƹèê 4´™PüÌŽÛ¶GMoá·½ 5ÞøB˜¢±Çª ',q²»š³¨â€ç¥æþ©äbþôt6ÛåÔpþVá¤å´“ï§Ä±Â_>©¶ZAÓgÛåSí733û@ äÇ&À‘ˆPlN)ˆ‰âMàð;·»´—“äÍXÓÖ~9‰l5,‘@LB4o¥›\)N¸h‹öNоõ¹¼Ý¢pÑÊ k”Þj òeÙïãp¿¨S64 Y´X«0â+xø•Ÿ#–’j} £ö×£KkN’Ž÷×0îÊÏ„Ñó¢— Û–Ð-‹Ñ>SgNµkæì³\/uÀ…SHÙ€Z¬©û7œ ’Œk–ößÂ"ÄìH‰ù8!«C‡Æi Kްx6kÙ•æëb*e =•Þ™5!¸®Ë‹õŽpñŽÁx>uAÈaà$mÕ¹ÒªÌ}€—€$— ã'‚ªöÂTÌÖ÷Úã “xkÌêÚ<â]„uÌ.ÒIdˆÈLm&ÀØ®µ­KQý†¡ÎÅXö"\/¹êŠYîRÕöå©/OW[? 4]E@]Ãéª!àLÜAµ-†¶'Š´K¨ìÍ¥8ç!¤“Ù¾Ò†Ë%^oªAˆ†€8˜`5˜ˆ—Mƒ‡¦;Â’ém[: •ê ¬ax&‹gù .À+ÝÓF7ê}—³·ÙŸc.A¾åñìo8ØÆY7!«‚+YÚx ¾ˆ]‹.äÀà í¾€Êäh I¼¼"³ãÄ65=pFžel<{ÜóbùË(ŸIàLOè)TÔYwk…+ Î*JfŠjµh£ü|'ÞÁç¢&©^KL xcã<¦F¿0þPA¯µ<’µJÔ uÙÏÇ—¢ñë@ ”¿¼¶î—ä(íU,±²“ˆ«šÉqgSrÇØÒfÍVåè²wMbOóêMºêÆÃìx@A$ì íô©©ÉkIÔÞ#’âÜþÁK]3wq},>ZðUy«¡ç†>§}¾ŸéµÁÒ«à ”ß9 iUö6G¿U}žÑëhªsmaNZý¦Ý’T¼ç™ÓU¾+›{NˆÄÉz3Ý(¸’B\Á‰P›Vã:ˆUæQ‰GÄŽñMGáÆüµ÷ †x @ÚîKzeÂ}(ŽÁë=j½ìfø˜Á&øNÉÖLRÏ}䡤ÿô¿ŽÖ½à@åÇzÆA„ˆ áîxÕÊîð+%;ƒ6›˜Ó!±þvu³_¦¦Î#}öUÕ©> ü÷Tà#®ÿóÍˬ‘hÖ/;€Û^쪤Û%Šôƒ‘ôðÓhÞ÷îÐÌêŒy';Fgolú?1β´o§Üpp¨®z¾Z#‘Óg«êT¢€µäíª ÉÓjmœV¼IÿäNíKÏêû`Ý&d°µ[›É%µ“óIÐpøËÄÖý €ð¢—¦ÐúÇs§Ùüs±” œäÀ¹à5cgõ¡w²É™K<ÒqÛó/¸…ÀµOŽ$SÃ1Kl |Jc‹ÈDËãÕÙ®PuÎvTɃFª]ÅwÙÌ+ªEĺìlß›ù €?>£|¶&ƒêÚ/:áF§×®7Ü 7Ú‘®OU.=¿«Ìé QÓÀä¤@áÞͬŒV3>{;']gÊ6Ë=·p, ×îñØÃЪ]FmIÕ`#œ‚V–^r;ºÛqM£bXü"€·®:•2ªíàÃÓ>Ež·8&qëÜKosN*;àz¹7Ð!ô û  ¦ bÖ´}€‡ˆE“ƒüf N&1B¡r)ˆoBhÊó8¥»NŒìÄp°p "Œ—ž¸êó2iÜf^zHpÂîŽÕwîêìgš*ëxãàJûÃ@÷s Z“ë¾Ý?~XÔé?[˜Àqø ž¸{}cYk» Þ8¢‰.Е5ÊD:Ñy^èÁ o§œêø¨7Ì}ŸÆö‰7 aŒ1sæPà 5„*¥YŽGUež×8U•­sù<óXÀIÂ!íNt8xš¹•:ÅVÑÔñŽs8NbØá+8î &ü/ œ¶í4ƒEÃÑ#}Íàûå‘áé·¬ÿFxLàØ °â¸À)2/ÇŽÓLjÿ(àØ‡½–!=:êl¯‹ÁÁÃÉ·ï'tM4ò(³½6“F'^Z*ù§ßtÒë˜õ0³Ò¯p™–7||c›0µg|÷¾ÔC™¹™Í­aÜ %¾¦áÁPÇÙÆÁ†>ÍEß'ÑÀ©*¹5£_±mnž§õ¡îë ‰q¼Œžªè*¾¦ö¯<ǦQb]1W¬8»Äs¹®¨ÝQ"ß½ä±k–µQÓú»ùü¶ø…, Û)KfdŸàˆ÷· Bæp ?¦ç5_•s÷ƒƒæöÇo¼»_Ô¥¼H_îŽñ‡<E$ºß¯+“û<'rJaaŒï¡íê†Äü@4 à~û‘¾ýÃ;c‘ŽEÙ_¼%87àͯ̚v¤ÔØjœ§‰ÖïÚánek Ô­ÀÁ¡y_L¹ƒØöª;C ­Ákþâþ Þ”¾0¾¾5ÇS9¹ïÜ´|p.;A—ä<¯¼`/Ü"4Hï»f)0kßPy2|ÄÏ”;±«„VÃCw¾¢‹€qiÊ|*„=Â”Š›§sk#!kÃÏEž‚sU ¤)kË+Aldÿ¦¸É­™ÁŽeׂL¤c^ÌOQ‰ Oa[í½IýþG—¹6ì× ÷íƒÐXvó&Uyg¯+>ÿ¬üš‰klžzé…3>qŒ~9¨} §óºA@+óÿoï|b¹î;þ™áDœeq6ÉA v—³†ú9H‘¥YÛ‡=µÚCo‘Ýu6`€•íêI (j(Z£ºl½Åí©(ŠÝ§Ýu­ M"÷¤îz¤UQ9‰»CFÈéá¼ÞÌpH‘”ºK2)Àw©áÌwÞûýÿýÞïe$3†‡"'TZ?Ürṇ‚Í Ä-§ÙIáÖ£sVCóh¨¿‰’™oÞ]b>;°ZvØôÖ-bàh^Ù¿µ‘U ÒP´5È8U®-ˆ‚¤D“c¿%xñýŒu Üÿn+ª¤CœåèÏ–Áýö×xR™ûg À‰ÁrçÆöõª„@ýmE®zõ΃ö—…Û¶BùT϶VêSB"ƒc¸êO”ëÂrÊC-‘gXWmÍvÄ7â¶O¶cœéb<¿ƒôáµÛœ¥Åhü@À3ÔÜ<œU-àyŽMÑ¡Ÿx/k2L Ù òwýÔR*÷ÌÙèß¿©çóûbg±¯0Ì9$*"òp Q‡±Ë\ |¯*¸GW{ÁlèÅL‹²ÃnÚY ¼¬07y&îgC86ÓÆp EÀrÒþ#j.D]ÚÊ SCgFÍ^öH²u˜CZXôwŠíÛ–k61I‰à÷ë¾b’§àÁ±È¬ />¿ìȸÇ;ý›´°\;w€ÁŒûÞî]@(œöz']Ö•ÒFò¢¶0~š7—¸ð3`ó&p«ÂkÕß“½Hϰ²×ge µF=´…ŒòVŸ®°Æ¡=êÆ[(?G¤óØ (¢Ê«qÅ=FÀ²MKæ@ÛÎa)ipZi ·ãä1~î§õ5}³£¥N«"Ìy ªŒÿÝå¼?Æ%´N‡c¡(ËÅÎ…ÛX;®ŠàGaûÅZ€Glϰ/pâƒ9np¥³=?ÉÏÔlzÚ£&´sgŠï¤w›*–”‰7m ÂÆîþ¢‡Šð½xÑC pt¼< |ÇY÷8~Î%ÚÏI¥·N‡uEUEö â°×^·Â¯¤%6;ûUë{‚t0œK¾Ò*¿nÂl¢©Kú‚ä¨â 0qÒëÙÌÄ„3;H+Ù×ÇYêw”øÛÎ/ÜŠÑçM€g.óõúA)­8±)ÂÞ·ù]8O¹÷«Båþ U »Ö’§Ã™]ëÙÎïÉ–òÁ2ùŠ‹ÚzçZb»ø`K§ýHÝnž]WKÈ”ö´§nøFAt†Åš61îLãLú2°®—ÅÆ×Tåw©É%Zé‹“”YØmÿlc`]eÀÌÜô½ÕÏ å½~õ›XØ¢KcëMCzÃ@”©¯Øb׃¢(–ÎÂ胇!ójåkË€çð™bYÁ*‘fæx¨¥¼O = JìÝ´SÿÒk¡°$¸®çÂFú!n¤þ̬´øÀBÛÙX»žhs‘ׯC€c€³Þ—oÏæAY˜ÇÊöTìA¡—­êž8YihÉÇ¢°Œ‡†¸18w­ô­ý̈u«§8©ÃÍ…ÚÅñ 6¿¿ý$5°¤F¾NÝꎟ NW¾r/”b°MêÎîÏ€ Ù[ Í~‘©¡Â±½ãvÞÃȺÎý§U‡D&9Y%pˆ+z¼ÑàX;}¶:.IÇ3~Y@à[ Z{CˆC€Sèw“2Ÿ‹Á`Ë…ß8äï¯bg$\) Žå(K“WÑ1¼0³4eˆÔ0à\©Îð;4ëxk0² U¨žtöŽNÆ ' (̵]ìêεT©Žµíj:þ«Ð~¼ž‡õv”h6 .‹•Y¯EU‹ÅXlóP½šÆ„Ç7;A óŸrjb•Áð¿•7ƒÆG¹¥î6ú¯”¾Eï8ÄèG_—(}àþѹ1Ã1LúvÊrùã±ÏN‹®¦Ê½½~Ƥ“çÎÎÎÎÎà¬GïŸQ…ާ’9Q¡ÍS/Œá,sg±žºfÑœ€£pL´£.[§ï™”[¿=躰B÷‘M£ƒsÎxŸ¨Õ2wªèÝœ=† _×%œ©uóB#Y\÷ õ&ж{t4‚ÅZ ìu<@™GûO^=á´9SBšõI‹}†g¬9ÄZN‡ O€ú×ñ‘²™$.D+ÇÇ€ºÈ~Ò—À±ÀèÍ]Ö=Æ2}Lt¢þcÜb„Ü´z¥‘rØ\{aÁq®gJ@4/ï܄똪Ò53‰¤Ç¨ªÖûCý×U1.ïÇ%¥Âò»ª¸y'TJñba?6‰¹N!^Uª”m0ÝWJÅeý÷®Í§Å“_žíŒ’dv“4Äk!Á¾«<>ʸ¾/ì,±þg%’·áQ÷2™yÆÕ¤PؽhÍðDä±%¦a[àà3àÔúéÇ¥;'÷þ1‚öÉš×|XúUM¿*¦–“…Çfô ýÕ¶ÈhX†>%mvGsPü¢¦ZÝîߢJ<ú¦¡ôŒë¶ÀS›–‘¬ÞMœ­>«K«5»£mqôAÌ2ì}Dÿ"ïñÄ`ÛКW‰¥eâVÜœœSk6Æì:Çb·ÚEyÙøb×ç³u¬O«*mV’LW”Ûcoy­^¿8`gGÓURØñm¡Ì¤t-Íu…÷·ÏfHžd^ý¦ÅP Üw|LÚMEñ‡È/Á,Ì—…£ÿ!åëJoh$sÆ–i齃»)ëæÖýNÇUÉ X)Ï)g¼¹.K¼g›šÿû—¤‰£>ªmÚ¹yyÑ£*ü\“£Ôpc×<å6|A }ÎéÎ6†µvñL/8¥¤Œ„~¸>Íî²Òu}=r„1 cÖ©ê¶>{5q²˜Z$”Ù(û^_î‚#ë€ÒVX:úνLÄ(-s°íR²çFŠo¶¬–µÞiÀu9J³½ú:µßsº€ó)ö¿/n0:£´ˆ˜pœÔUm]'ŽXEÙ‡}4•oÒ §åy¦±-À D½ÆBìé¶^~ª{F‚ÓOÉ)=½Ò´%,”$LPˆft/Yô s¦Ý>p¢{@ÀÔ/fÁ­@9 £ÜÁz½`îvð”›þ½j²x}Y†ÉÖ]/?ÏþIó È’Ébé“ó ¿Æ¿/ƒcÎ_ºÈü~‡.îôÃLTûz€!S–[NØ¡f¯êÞ'“·1€Ñó¥æfPØ`¯{5±x]ںݒè·Ù쬉©ÝBÕ°ð¡}(phx§yL&½•ÎÔ0Å•¦Z²äö’ £G¸ÙE£ê'• qËxÖÔÆO(Õ1G»ýt½ì’Ê'Ló0î°³õ4˜;e¹Å?G)E ܲ²9ß¾oЮ÷µÌ¬îcI5j©·Ï¤B{ÿwž…âØ7ð€Ýkõd"£|á’¾ðHvè»Ë0¼P¾Õ¼Dñ&ü&¬9’>}§xlÀý5udTêЈB<­O"~í,~ I#VmÈAÚáªÑ·uRÍ}ÊÎÁ à˜É ¶ö¶[a¶3Yå(gp4>}}i-Ta‰HÖ¶ ñž}"‘gô3„íÞ_½kòp“âÉØjÏFÜOÚ.1݇å¾Pʧ–ÜTüœê;ÕW™- ^Ë_÷MKèn;až€$.P?!·lƒóßK¤ËNùe”÷8õ;çƒ) × $4VÀJ$—Ý¡ÉpBÏÎ5Ƕz8ÕͺßüØ{Œ¸²±Œã€iµ [ë{Õ¤X:¿`–ÇƒŠ°²ÕØMiB´ÛˆØ ”-Ì-˜ñÁ0“²R£¶¥^þ0”'¤iõoø±H‰Óász½-¿­3ž«ßCÛu7ŽYšîm¶ïªL Úz±JMTi[5õ¹ô™ÇéÚMY°y³XxL8 ¥ÌJ˜j Ïá@³±½KÖ!UéøØtáOævF=Ê.cùC€£·&s®c›":Uw­ŠShóóítf㶤±KyCa8)’’œžÛð¾2ë! x…ဉl$†OèöˆÊde1›™Vc{Ó»x \Õá¤%ã×:­d[Š!Ê*DïM¬C gL©ts›èëˆ 9ŸUŒ±‘Þ×%Düin=4Yœ|òévF‘^{¥ ÔG’ç½™£@Š·öºÌÕh„p.Ž ”ŠÞUQ¡þTêÈõ¶øÖá´ÇáÔk5çÏ¢ª?H;3†\¨½´–7´¶¥:Lžßið‰` p`•‘€° x×.[yWÇÌù_ãÈKàÊf¼x/eò·%TºÃ‹sVÞ¹›¨Ê€/¯»©Ä‰ZŸ¯g.i˜ù_£H‰¼ ° 9뎎‘ìžpªF[ŠvÍ,vy0Eø¤™EŽ÷:vPôtII©¨ÔûŸ ¿ ”å7|U(¡u&sÌAÔ'h:UÖÜ<™kÎ8hgæ¼dð1Ÿe%×Ì®-ãN'ÏUv:Sã;§å¦æx>aôIUå*88Fï΄³þßÑŽ2&³3óhp 2;88?/8§ŸT>Y¬±ÀÙlЯWï±=‹G× ÊÅØPJù¥wÔù±¨6‡íÓÇ)œ™RȪR¢ ÔN¿‹ÃΟTaèpÒÅzV¸)àVÁ|»ñúiíyÕð›.gôr¸ñ"Ê^ÐñŸÊxÍ6ÜûÑß°£×j$|tÝGMÕ` rñéM´°…XƒbGÙ£ƒ£;tR@,,$>îè©ôOî– ©páQ% ¡§³»Ž¥ÿo|f×ÓJtg±ÈÁ9.pYÒ=X½‡ÆßÔWù„—NŸîT…%ƯŽàÛI7Ú´©m€?g³ÿÊó–£rq0GkM ÍúÀÓvÐí70ÅÈfç{®sÝMJï®äRP(üGp¿G od¤l{ö†‹ !ù膳¹¶Ež€ÚË£U¡– ×ÕçÛ‰¬Ö}Ú’Š]§½#ÇJâw0 0“¬·åï½\pÞM´<‡~¦õKoŒÈLÔÞ,1›Žsõ ˜h.]…T+£Ìb.%Dz9adÝüI¥óbŽxƒ¨Ù{Æ|©v‰‹¸qÍsø2g*5¢Õ:ÅÍ Ÿ3BÕł]Ø¿¯T)T¥pµ­,Ž"•;(5«ï>°ð­ ïšc©§aùÄxü±-V2š+@» |á=m4ZÇ¡6¿Æ¼Xá—”Rw´+ü†òãrPRÊ"@”Öjai$‹5À¾ ÃÒ~ʶÜqÏNëÓÔÊ_ø—ñÅâÔ8ê² »ýbÀI¦¯ŒΩaŒh&™âGƒ888888888888888ãÿ QSTE(Å;˜ªÜQŠv)1@ ŧbŒR¸¤Å?˜  `ÿ‰½—ýwÿBS´±ÿ{?úîŸú¢¸±[£¦†Ì‹¸¥Å-vœ£qF)Ø£ÜQŠv(Å0Š1NŤbŒRâ— m5ˆE,Ä*ޤœb¤Åsþ#™ñ¶ ÁsŽäŒÖuj*preBÒ±jûVKvòáϼÍòêk’Ö¡ÔµS²kö1ÿÏ(†Õý:Ô°ZfG3nÝcÏÖ¯éŒ/un0:î$täÏV£µÎèÒ„j Oæ[‹e+$’mÀá@$ñè+ÑlìEœa–¡"­Ç PF#‰p£«Ë}iدG EÂ7–ç-ZŠOA¸¤Å?bºLFbŒS±K@âŒT€ Ò=(˜ jJB)>™ÿ!k?úîŸú¢¦øšÙÿ×tÿÐ…ÅŠÝ46dX£ìQŠî9Dŧb“ÜRâŠ1@ ŧbŒP1¸£ìT‹m3 Â'Ç®)6–à“d8®kÄRnž5F}XW[s§ÞC¥]_ÀXc-†8$ã#ÄW ¦XKöYnof{‰œüÎF6Ÿa\ºÑp勹ÓB >f@dÌ®r‚1Ï_Z_ fMzR:Û?˜ô‹öß¹€ÇNÕ·á1­mæ»—–˜€¾Ë×ù×. ÔFÕeh3¢£ìQŠöޏ£¸£ÜQŠv(Çå@ ƒJhÅ7OÅ&ÒzR}7þB–ŸõÝ?ô!EK¦Çÿ;ROü¶OýQ\X¯‰46e|QŠv ®ã”n(Å?cŠf)qNÅ âŒS±HÄ*–c…“éHcí§´†vkÈå(€2ãç¡$ÿJÏ‹R³‡W&ßÊ•‹?›pd#=@ÏAô®3RÕ'º”I:ç$íBp'¦?­+¼6ë¾F]ÃÑqšññ5•G¡ßJŸ*Ôï5}Z]Nm¥ü»Dû‘€tüM`ÆpØW~yÀ< ÀZži+Hd™ºrs[6ún§$^kÀ!|ýÂà“YET{"Ÿ*Ý•çðäºæ¥½–<æçÇ'=««ŽÛì‘%¾?Õ ‡#j“E¾‹KEݰ‚Yv„e:žž¿ýjƒÄž"û³Iui¹íÎÙ™×8Һ0Õ•9ÚjÆU`ä½Ò\QŠÊÒ¼K¤k2¬®ƒM‚ÞS)VÀëÅkâ½E$ÕÑÈÓZ1˜£ìQŠbŠ1OØM?ËëÍ àÑŠ±°ÀÉ¥òË”¹‡b\Ó¼¿J²±¨Z_”tC°–‘©ZŸI“ÿBU‹›íöäçýjŸÖŠäÄ;´tQZ2¡p:Ó¶úÒb»ÎQ ¥Å BbŒRâ—ÜVˆµT²{kC F›.ßîþ¿ò­÷a=«ÈG¥00¥h fÒz žv÷*)ªÇËÅ8IÔVÓTå,œàcÚšÔƒ]°wøR •úŒb yI¦'œVœ¤sˆv¦”ÛÐRFâž[vij€« 5Þ•pE# ”⣕JCV˜š+í莔õMÝéD~âªâ¼Ðd8¥Ùó{U„ƒxèMKi &2Áö·ýu_æ(«VP•¾€„À.:+“Óh裳(íNIÆ*`‡µ*äv®ËœÖíÇqV<ˆÈÁ* Äu§ G­fîÊÑ£ÃR@½*©ŸæÀ§¬ õ¤âÇtXÞ£î­&Xž£Õù¾•2 ÛPôâÀ¨ŒáM2mÛ¸¨v–ëV¢„Ùn9ÕºšŸÍ\Vp@½4õ$OœÔ‹2Ìœ¡4›×+àŽø¦ˆÓÐþ5QI ¶ÊIàT‹m#ôevÒžd8 U9>‚²!ŠÍ‹|ü º© #ÔûÔGéC#875›»ÜjËbg:UyJH0qR-¢í$±&Ÿ‹J~DÍŠ¬¦"{íNÆ0 úÖ˜ÐäaÌ¡}…P—O˜\´ ¸ëŠâö`â×@T„°ÅN¿;„3ô©¬ôG#uÃÝ^¿kÁk²áŸSÖ³H­µ.0lÌ‚ÝÖxØ©Q¸uúÑ[%AÆFqEsÊ\ÆÑÿÙleptonica-1.70/prog/printtiff.c0000644000175000017500000000534312265771435014646 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * printtiff.c * * Syntax: printtiff filein [printer] * * Prints a multipage tiff file to a printer. If the tiff is * at standard fax resolution, it expands the vertical size * by a factor of two before encapsulating in ccittg4 encoded * PostScript. The PostScript file is left in /tmp, and * erased (deleted, removed, unlinked) on the next invocation. * * If the printer is not specified, this just writes the PostScript * file into /tmp. */ #include "allheaders.h" #define TEMP_PS "junk_printtiff.ps" /* in the temp directory */ #define FILL_FACTOR 0.95 int main(int argc, char **argv) { char *filein, *tempfile, *printer; char buf[512]; l_int32 ignore; static char mainName[] = "printtiff"; if (argc != 2 && argc != 3) return ERROR_INT(" Syntax: printtiff filein [printer]", mainName, 1); filein = argv[1]; if (argc == 3) printer = argv[2]; lept_rm(NULL, TEMP_PS); tempfile = genPathname("/tmp", TEMP_PS); convertTiffMultipageToPS(filein, tempfile, NULL, FILL_FACTOR); if (argc == 3) { sprintf(buf, "lpr -P%s %s &", printer, tempfile); ignore = system(buf); } lept_free(tempfile); return 0; } leptonica-1.70/prog/reg_wrapper.sh0000555000175000017500000000163012270004766015332 0ustar dandan#!/bin/sh # # This testing wrapper was written by James Le Cuirot. # # It runs: # alltests_reg generate # alltests_reg compare # when the command 'make check' is invoked # # The wrapper receives several parameters in this form: # path/to/source/config/test-driver -- ./foo_reg # # Shell trickery is used to strip off the final parameter and # transform the invocation into this. # path/to/source/config/test-driver # -- /bin/sh -c "cd \"path/to/source/prog\" && # \"path/to/build/prog/\"./foo_reg generate && # \"path/to/build/prog/\"./foo_reg compare" # # This also allows testing when you build in a different directory # from the install directory, and the logs still get written to # the build directory. eval TEST=\${${#}} exec ${@%${TEST}} /bin/sh -c "cd \"${srcdir}\" && \"${PWD}/\"${TEST} generate && \"${PWD}/\"${TEST} compare" leptonica-1.70/prog/findpattern_reg.c0000644000175000017500000001373512240303140015771 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * findpattern_reg.c * * This uses pixGenerateSelBoundary() to generate hit-miss Sels * that are a good fit for two 1 bpp patterns: * * a "T" in the banner name * * the banner name ("Tribune") * The sels are first displayed, showing the hit and miss elements * in color. * * The sels are then used to identify and remove the components * in a page image in which thay are found. We demonstrate * the ability to find these components are reductions from 4 to 16x. * (16x is extreme -- don't do this at home!) The results are displayed * with the matched pattern either highlighted or removed. * * Some of these Sels are also made by livre_hmt.c for figures * in the Document Image Applications chapter. */ #include "allheaders.h" /* for pixDisplayHitMissSel() */ static const l_uint32 HitColor = 0x33aa4400; static const l_uint32 MissColor = 0xaa44bb00; /* Patterns at full resolution */ static const char *patname[2] = { "tribune-word.png", /* patno = 0 */ "tribune-t.png"}; /* patno = 1 */ l_int32 GeneratePattern(l_int32 patno, l_int32 red, L_REGPARAMS *rp); int main(int argc, char **argv) { l_int32 patno, red; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; for (patno = 0; patno < 2; patno++) { for (red = 4; red <= 16; red *= 2) { if (patno == 1 && red == 16) continue; GeneratePattern(patno, red, rp); } } return regTestCleanup(rp); } l_int32 GeneratePattern(l_int32 patno, l_int32 red, L_REGPARAMS *rp) { l_int32 width, cx, cy; PIX *pixs, *pixt, *pix, *pixr, *pixp, *pixsel, *pixhmt; PIX *pixc1, *pixc2, *pixc3, *pixd; PIXA *pixa; SEL *selhm; PROCNAME("GeneratePattern"); if ((pixs = pixRead(patname[patno])) == NULL) { rp->success = FALSE; return ERROR_INT("pixs not made", procName, 1); } /* Make a hit-miss sel at specified reduction factor */ if (red == 4) { pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 0, 0); selhm = pixGenerateSelBoundary(pixt, 2, 2, 20, 30, 1, 1, 0, 0, &pixp); } else if (red == 8) { pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 0); selhm = pixGenerateSelBoundary(pixt, 1, 2, 6, 12, 1, 1, 0, 0, &pixp); } else { /* red == 16 */ pixt = pixReduceRankBinaryCascade(pixs, 4, 4, 2, 2); selhm = pixGenerateSelBoundary(pixt, 1, 1, 4, 8, 0, 0, 0, 0, &pixp); } pixDestroy(&pixt); /* Display the sel */ pixsel = pixDisplayHitMissSel(pixp, selhm, 7, HitColor, MissColor); pixa = pixaCreate(2); pixaAddPix(pixa, pixs, L_CLONE); pixaAddPix(pixa, pixsel, L_CLONE); width = (patno == 0) ? 1200 : 400; pixd = pixaDisplayTiledAndScaled(pixa, 32, width, 2, 0, 30, 2); regTestWritePixAndCheck(rp, pixd, IFF_PNG); pixDisplayWithTitle(pixd, 100, 100 + 100 * (3 * patno + red / 4), NULL, rp->display); pixaDestroy(&pixa); pixDestroy(&pixd); /* Use the sel to find all instances in the page */ pix = pixRead("tribune-page-4x.png"); /* 4x reduced */ if (red == 4) pixr = pixClone(pix); else if (red == 8) pixr = pixReduceRankBinaryCascade(pix, 2, 0, 0, 0); else if (red == 16) pixr = pixReduceRankBinaryCascade(pix, 2, 2, 0, 0); pixDestroy(&pix); startTimer(); pixhmt = pixHMT(NULL, pixr, selhm); fprintf(stderr, "Time to find patterns = %7.3f\n", stopTimer()); /* Color each instance at full res */ selGetParameters(selhm, NULL, NULL, &cy, &cx); pixc1 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 1.0, 5); regTestWritePixAndCheck(rp, pixc1, IFF_PNG); pixDisplayWithTitle(pixc1, 500, 100, NULL, rp->display); /* Color each instance at 0.5 scale */ pixc2 = pixDisplayMatchedPattern(pixr, pixp, pixhmt, cx, cy, 0x0000ff00, 0.5, 5); regTestWritePixAndCheck(rp, pixc2, IFF_PNG); /* Remove each instance from the input image */ pixc3 = pixCopy(NULL, pixr); pixRemoveMatchedPattern(pixc3, pixp, pixhmt, cx, cy, 1); regTestWritePixAndCheck(rp, pixc3, IFF_PNG); selDestroy(&selhm); pixDestroy(&pixp); pixDestroy(&pixsel); pixDestroy(&pixhmt); pixDestroy(&pixc1); pixDestroy(&pixc2); pixDestroy(&pixc3); pixDestroy(&pixd); pixDestroy(&pixr); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/warped_sudoku.jpg0000444000175000017500000013775512105610371016046 0ustar dandanÿØÿàJFIFÿþžSoftware::Wolfram Mathematica 8.0 Creation Time::2012:04:19 12:55:44 CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ 3.ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷t²·Zw Ðc­/E'=N8®Q›Ä·zº6ÑZiöÒŒËÊ3Îa]´n²ÆŒ~ë@ø§Œ´œtóK'$ ð{TrÀ(?cÚœ‹·©Ã™éCDrYñÇ$ñ\¾¡ãí* žÒÖ½Bl”ÙoFzué\ô#›N±k[ÛlÒ\y‘E»æ?Å]áµM^Éî ¨ ³ÀšŸæ=¶üŽ„×žxÃIoê±-ƒ:© ªîã“^›k«Ãg£ÚÙÕ§(2$ÓˆôÐÛK0“û»NkLÊ$[kmj.#ŠHˆ”)¸oJ­V®bH›åÁ‘}=)–±ØM’ã!PU~îjq¦Y(l[D7õùi%³¶‘²ÐFçn3íDv°3yvñ o½òÓ&]?N‡Ì’(‘7tu«lc–5ÜéQ hR=j§°QQLÖ–VÌçÊU1èI¢ŽL)øOaQ_^ZXÙÉs9R‹ÉúÓlõX/gh`WÊ(o»ëWT¿ñ|´ó×Ò•r'5ÎøÔãÓóÜ:ÓµºŠ=6-ÒÇ‘ãwµcxDù©Nü»]6O°âµnY[Z·ñ m!öÈÅC¦]í]ü‰¥‘œžƒŸsS¶¡9Èò£\t%ÅV:”ü“qû-DsÍ,¸3\°Ïü³L uê¼v2É$s|»[{É’0ð©á$eÛ"5YóÑ›ýb/Íýêx¸C3ü˵W­B$X³dβàÓõ;t²’)m÷øuÉäT¢÷XB±K§+/ ²·Õ$z÷ói²ìnIâíE¦ï±N&Û÷ ýîi ºœß:ª@…O.ÜædÑ.u1,¨*G~”¯¨G4î7îHÂô¦–;k‰UŒí »KÜsšÜ70XO*IvyÉÉe •ôÈ×Åö{H£Vù<¨-É¿ëX²ëæÞÒúòÞÆYÜ0Š¿3Søšæ~Ïãצ‘bÜí|Š…ì|áÞßOöýC¶ãæ1?NÔõñ‰üD|LdcΘcaW¬>%Ä‹uâ éoç'%KƒÛØÙiVZlK¬Q(ƨ{¡à}qJ@ïÒ“8?¦)Ýy t£Š\THñ¢ˆËGcUõF×L²’îî]‘F73v¯:›âÓê.öþÑ®/çèª*î¾4ÔÞIõØ ·³*H~ö ì4™ã¹ÓâDy žÕ¡òà¶p: W qJvíÇuç¥UÔu(4»º¸Ï”ƒ’9Ís±øÅïäòí4Û™¿ˆ®jöú}7K™ Ó£¶”Œ#dÉêx®BðÍþµ®›RF*Ÿ3êïá]…&§­¼:.cŽMjjw÷º~ž’(_4õÝÉý+Õ‘õÉmïg‚B›ÀeÚF@®¾ Nžž8¤‰€ãZÂñuÜ:$VÐÚB¾dÒ òIÞ»;iƒY@çøqøVgˆï ãÉViv¨^k”µ–öÎÝ£¶’âX„ñ¸ö+^Ù¯Ù§‰bŒyIŸÞ1õ¥ºÕõ|È洛(×ÊHÿ‰­M© «EY§uÚ7¢©šßñíÔA R“‡uÈÛǵrØÔ§´·†ûÏxLÛÉç*]HµXâWoµ%Œ“}ßùi°RyzÔmo+EpÖžvíŸÇëEÆ—}¨ÃçÝÛJÂk Æ6ê¨+ ÖÚîßEŠÚÆÑ›8VÝÍÚè:¯–É$rìša”oîŽ}ë©ðõŒ¶«u%Êì–i8ú•¹Õ~oΣo¿»¯¥J2TÁ®kÇa›ÃSþòÿ:K :sg [HÈ9v'µOáÈZÚ]BU›qÇNFj ¥c£r>ôÎ Œþ•ªšLBãif*ª7qÅK—fŸòÅI÷æ¬aˆ±¨€ ‘O¦ÚÏÕ®2¡CI/îÑ{dÔ6ú}ŽhÒÊ‘’©ºGaŸs\½åþ™ý£k<¥¥¾íÒþ÷!À>”—Þ=ðÔM¶ K‹“Ó÷yQüëŒ×|S¨^NÂÖ{(Gmå«6?x‚ Wý6Ueìß•h[ø÷Ä ñÃ-ïÊìÜžõêvêóB%ƒU³ºBÒ2AüEL¿ÛWjcYmaP0í´’ qÞ8Šk-íâÕî'¿À[tP7ŒŸñª~Ð5kh¦–æ^àÊŠcn»[-º»K8f,¯q±üÛÆç qôjsx‚$Œ&ŸfòK´( ÀŠ+/þ­BéÖRñ@,±\FÄçO¥bk7šÆëe¶¶iËD$‹qM¡±ý+´Ò.¥±Òí—TtŠaÓÆrNÚÁÔtø¢A·RKM8±È‡©ãô­-À&ŽD¾GÚn8&YþbMtÊ¡j tcŠwP­½=ê ‹»{(ÚK‰Ò5$¹¸ÍWâv›¦ÛLŽMBäq¶ qŸ­kxSQÖõf“XÓŦX4@Júé½qIõ4½>”µ8Ø<÷zSÞÚÞþÌÅwÉv=+ÍoµÏ ø;Ä2®ÃÉæH­ÓäϹ¨"ñ׌&‚=bkX`Ò$“j¡Q¸¯Läó]χu!u%ÄN»"ý tCÊ2>P8§û‡>¤R*«ŽœS. ŠáBH×®N)R£aµ1Ž˜è+ÆÚæ–ñiˆ¥ûžþ¼Wàß_hú¤¶:ºÈ¾aûïë^¥<±GæT@3¸·ÈŸAtÝÕÈÅÁé[“Çq¥C«,) ®¼cß« ´VñÆß9Uýj+›k§F¸…d+ÈÊ笺€ƒ•¾LQù’TwU7Õtèͬk*3mO¬\\A ð«s#·ËP>•§Ouæ´hò¯?{½^Ì[³½7vR "•¾VVÇQYW~ ´µÔ£°ewÿ…„ZÒ7vÁUžU\ó÷ª$Ôle™–;ˆ™öÿz›¯a#²Guž¼6jõËA M3¬Yb©¹ÇÍŠ‘õ‹La®#_7î|Õp¹8+󹓖_›­HªvÿJS»œW7ã}ß𺎛×ùÖõ?b·öŒ*ËILZ¬¨zTf I¥Zîã™Xúœf·˜ã«cÐP#–‘€\b²5}.êöx.mnV)aÎÐésTßLÕïÕ­o¯"6Íþ³ËR¯¥\·ðÆ‹ ®ÛܯBÿ1ýjôznŸýÕ•ºÿÛ1S}šÜ ŒÛǰ AŠÎºðÞ‹|¹Ò­˜žêQŠà)Ó-­†Pƒ•?1ü}ª¼>(Ѭ­'½/9ÈŠ,eŽ8üÉëYÚoŠ5[„K «…Ÿ2#ˆˆòÜõö¤´‹ÅѼ‘Ø[¬6Òu8,ŒNN1ïVSºõô­>¥¬DO@2é]‹¢¾“¹žúkŒŒlm•»Œ9ïL ŠÈÕüO¤h±³ÞÞF¤¸$þÆ\x÷Yפk iR²“´Ê0¸©-þjZÃ-ljµif'“o!G±®ÇJðÖ•£FÊÊ(ȶ2OãZÊ¡z~tKžƒõ ƒÁ¥ÏREûE¹{¸¨C´1ìÞãJ¼ÓÚ6ž2–ÿ¼‘›vç5Ÿa ×wqª[J¾DdÉ.üùŽÝð®Ÿ{gq1ž±7F“«f™?‡®.gÔ¯Y¥]§&‡­]´*Ðy+oÄù³¸ž¦¤ŸÂwK$ih©•ÂßÞ&§ŸÂ“,ý•cU†ßns·sŸZ‚_\,°˜ÜH«B›ñ´÷4û \ à6èŠbP7³ç×5ÓÙ}¨¡*«†ÀUþ,U¦%‹mJ¬XSˆÏ^•Íx؃ 8ÿ¦‹üë]®¢±ÑÄòº„Ž1“øVã‹}1+ìkÉ3&98<ÿ*°“­Ä-ÏŸö~b‘>ðÇb*ü:šHÐÇw[Ìÿu_¡>Æ´ÈÏzLõâšYBçåâ˜Ò¬j0ËŸJa»3F=êªØ&wÜÄ¿V ž"Ñãožþ.{nªïâý ÅØcþ“üª¹ñ•›ô{[¹½6Dj½Ö·y¨ÛÉlšÛ£‚8^Ö³mWÆQJ©moÛ€ŽáÁã·"´&µñUÔ.sim¸rS$óQXxGP¶Cº¼…eûøA“õÍZƒÀS¤Y¦“vIy1ÏáZ‘xoE…Ã&›aаÉýjÔzu¢VÖ=¶ « x ¥5°Òco>´åœô…6PNîiÿÃÉÍs^'ÓõÝM¢µÒo£´„©óøºŽŸ¬Ý+á–“k ¹¿–MBäò^c‘Ÿa]•½¼6Ñà…#UàqRó ¯jFad¶õ¬vñNŠºœZwÛ¢k©[j¢œóŽ™­¬c©â“øRóŠŠÜü¤Š­zÎÙœzSm.×n:úVçÄÙÝËk,—HÛi+Æ~µ©¢kPkð‹hÝ` V“ÊñR¨à08'¨§gž:µNêÓíƒk¶jìxD+6hþÉþì¬*Б%”ç¯ËDú9¸ƒÊw8ˆ|b]˜ÛŽzaëbÒÎM*/"ÒÝ=UXkû¤ûÐóô£í÷! Å[‚C %Æp*l1`j0[?wøÆœ¥Ør6úÐñ‰¢tU☰,cƈ§øUEM·ý“ùӾ#QŸ×4ärëß5Zé®ÅÌBƒÄ~ñÏÝ«($Û‚ßšd©&pˆ ûÓ<¹UÁïõ§´o \ŸÖ‰ Æ¡QK~5$lZ1‘ƒŽEax¯O¹Ô4W†Ñw˽H:Ľÿ„“P´†Þ].?)S(ùÀíL´ÓüGïšöÈ ªË.BÔÓhúüÛšÞÖÒÎCÎø¤ ÕXü3âo>9§½†wVÜžtŒvŸ¥jÿgø­ÿæ%l£Ù § Ä2Ÿ]Ùþä_ãJ<1~í‰uë“êKÿpvýî©}'üäðV”¸ó^åÏûrš±„tHñþ†¤ÿ¶ÄôüjÚh:ZcÓàÿ`U•Ó¬âÿWm ýTÊ‹àô➪$S0àníŠ „÷Å(BOçNÛÉÆzS†qɤ#Œõ¤Ê9´¤¯R=óMóìÏ¥gï<¾ryÎ*'vP cæê*EpèTJXÕBíí§6àþ5^{˜maiî$D‰y Mqz§ÄhVv³Ñ,&Ô.yQ°¹÷5˜tø£÷ÚÆ¥ý›hy0ÄpqïBÉà¸d"÷P^A{çúWs kC]Òã½û4¶Û‰)Fç­jƒÚŒ{Ô6¤yb¦t …}j¬6)nÌêKμûÄPx‡S×SNÓôè-¬‹þòã˱ߜWceŸg¼+µPǯz´AÎz{Ð\néíNÝëÅ3z)¹r½Fiûpr¥Æ}:hwãéKŒðy¥#Þ›ÎOéQ¨ÁË-I¿Úüã3`b‚[=×o9áM.x=*ar;ŸjPX¯Q“I–¸ˆóŽiÀîZA¸4™9Å œ€)Hƒ×)=éÔÞy¦–mßwé@¾œQ´“NQïHÖ—þªQÀbšî9"_Ioâë˜ífšsU£â½~';5KáþÑ™©Ãƾ"Sík³Î9–º=ƾ!Ød’óÏAÀWPr}ÏZ¿¨ü@×!¶ó¢û2˜ÿÖ/”p<Õ8>.êa›ei!x®áÖ´âø¸‹úF’KwÙ7¨­ _ŠºdÈZk ¨½— þÑi+Óu£‹92©·#ó­“*gï¯çNÜ¿Þ7(:`ãÐf—rã-ÇûÕ‡{âHlïm K9¦ó˜¨xñ´VïqMWŽ 8ž)‚@Ý~Tþ1Ò›¸X~4›”‘ŽiKgŒiÜcëNÇônQÞ”zfóÔ)9éJçqMiHU'Þ‘f%Û×Þš'fmªiÁË–_—éžiÏ"E‘Ø*ަ›æ ùwdõªöúµËÉ+ºy¦^^ÁeK,Ê3Ÿ›ÓšGÕ,ã´óŒÊq™µ[œc4kv0«G*ò¹ðÍDú¼Ø-û¶`?Ä¿ÅYãÅö’.ø–G‹äË/ðî8Û z}CY¶HãÙk, à·;°G5JmRþÆöPþdòûv0!Glе-î©uso©sù²$dtP@æ²nmµ­JéXçxD±É³¦Þ¹©“Ã:•ûÊß<‘Vy>h†ü¯Nø« áßI;Üù¢BF¤Œ{ÖÕÖ Ø·Ë2KÄr#`¨ þµiÚV—e,­ì(Á‹7Þ óUlõ= C¾(Ö1î–%I¥I'Šl-ãócó&…(¼(cNÖµ©l.cŠãwx^UÞØ ·~k&ojÓÌc `ðcxùRSw?P†}cVa‚i¸‰L¡ÛïÄ0Ôé©}inÎÙC¸òÙ`sÀúV¼eþmÿ§z!1äáJ\írG¦<0Ü Œu§pyïJzÒdÓ!b½éýzŒúRŒ‘é@ ò;Ðzu¤8ÎOZN‚˜šùûìí®üG¸´°’Ý`çë]§ŠSÃþ†kUðã)ˆçÜv–üê¶»£éÞ Ó®VËwTH®AÉ­ü É©Û[˜¦Ø-üÙ>âüªY<+áæ^ͧK*›¿Î~eªŸðˆé ­Åî¢ÖŸi'”däôëXðÖXüI›äbO1d#†”Ù¾ÝD/_íÖþE°Ç˜à¨vöªº‚õ:ÒÎv0b䪢–$פhÆ‘gs¤^|¹Þ²ŽÆºeœžº{PAS‚*7˜6>~~•$¯>2«ëD0&킨ÏáL’í!bfÁcµw§‹ˆE×ÙüÁæ•ݳڢŽþÚk™-c™h¾úÿv©vÀ<‘<Ü«mcÎÕ¥Ÿ\°´o'Ìvm»†Ô-Å\Šxõ U–ó"z•2¬«ü+O.wãpÅAw:ÛZIq·vÕÎ+°ñ«IÄÒÊÁ¢ ÂàœTíâ{ß1QíQFâ¾»D¾+¾i5±ù¾àëýêH¼K«\U³Ef`¿îäâ´tíZúMbk+œt+Ò¨G«jví4RH˜ó‡åÇAøÕRïP6:e̙҆•U3þsYï¬kxÌH•;ÿuþ«žÕU›\†~Ì· ï1"Fô÷­]$_jWs[ÞɾÚÿóО߅XÒ,õ¯îMÆç·u;<Î:ž•MôAZDµo³ÅÔFÍ‘Ùâ–O ^ÜHóKqy|ÌÆÙ!wwü*Xü)›q¸SmùUù³·Ï¥-·„¢¶·Šîš0WÜ`þ}jàÒ,®tØ´ó#4vŒ*Øè:–ßÃÚ]¼MG•m †oîœÊ’¤Ø]7•äG Sõ^äT¶wº}Áž[U‰äŒe¶/8##ó¬eñBn¶“ì²´2[<Çjàü¤dÕÈ|Mo{¨Ç³ÆÍ°IØfªßë÷ ¨\ZÅl`ž8ŠÿÜ*›ÞëòYÙØóbÞJ¯ ÙÆ*Ao¬Ý¥ÄmçÇvÌÛeÝ„Á ~¶þÔÍ•OÞVŽ^G+Œþ«v^Ki­¥3oh<±€¸û ¯ò5äŸdNñÅ·Sónõ­»:Òîò æMïUnœãü*â¬y`ƒÔíô¥ŽÞ(Áƨ3ØbŸ°’¹Æ§­;hÇSõß)w‡þïJWPØÏ~)ˆ6¾kÈ6¯Í–ëWôí&=>v‘dbÆ$‰‡MÁAùÓmôkyHwTŒÆ»¿ºØÊÖœZu”2¬©#/CúTqYÛÅ}5ЉLÓ0Üû}éVÑ€~^اlù Æ™$Në´8¤HöKóËÚ›$¶ví™fE>¬ÀVu׊t+šº:Íc\üOðôˆçyðåšV¼1ãK_Ü]Em Çä€rýÁÍVÖ¼fúV±%‘·*Œ3¸±‡¥oê2“¦4¿ik!ò“'Ž?ZæôŸ2KûY“R–â_6ErI*PƒŽØÍvH…Ö9ô5.FÓÛ—ª}ŽæÍU…Ä¢Äò2 ¨­CÒ—4Õ?'Z^«“ÖçogµqIÉ9+È¥f ¿vŽÞýª »³ZI.2UIùkç«W’y®>ÁrÈìÎ+cïVdÚF«,‡Ì¶¹-þÒlv:¤Jʱ\ª÷ëD_ÚVDù_iŒ·÷r´ä[«”G–FN†LµZ:Þ·§Û›kkÛ˜…ªºv½¬i—2\ZÞM²ý÷îÕj/kQéòÚ·h¦mîvw®ƒLø•¬Æm£¹Ž)ÌvG\°¯OÓ5 u‹5»‘\Ì60•qÔ~y­”GÆU† K¶Ëì~”­Ž]Ê{T3ùÿþ¿Je‹À÷3ÆvŒ®{wþ•a‘ufMç?{oݧ˜ s÷Pæ¤(¡>íFÈÇåè«×ýªrÇsµ7Tƒ¦{T^PY7T˜P>íPÔ­ÓQ°–Ôüת‚ø[MHÔ•v“¼›¹¥³Y£ócvgwjyðÖä¬oHJ¦æõ¢MOòÒ3­¸Ž›ªÅÆ•e{*ÈÁ÷"ã†Çðî•Ë ·ù¿Þ>¹«M§Y˜f‡ÈÝ­½Ç÷ª¡éÇË_²&àÙÏzºÖp01«yp~¨ÿ²ì’2©m¡äüµ*ÚÄ«ò"ôUõ‚%Rv.>”ì6*\Ž)»ìxúsÍI°Iø~Ûå}Jßè§?ʲ®~&xr å#²!¬çø¯bÙÚmÜÞ˜HüC×.åòì´ wuòx5'ö—Ä;øóŒ6îYyýi‡ÂÞ6Ô±öÍmbœ&¥MÂטîÔ5›™pÿZ¿mð¿A„þúf'»=mÛxCA²_ÜéqÝÔç\öþ=×­Uv¯Ìöz×ñ¢Y.£æ0q3Æ6ɼ*¦:7¯ÕÝF׺†ß÷’¿_¥hJÁÆ>×ýö)Pµ;€»‹Ÿ»ÏJq½±VÏÚaýñCjVJ~k¸qþ𬹤ЗT‹ß¨œ(Lyÿ/·3xŸDSΣmïóŠ…ü_ Bÿò¶Çûõ ñç‡.u8?戴|BðÈ6§^”ßøX~ “¨Ç»o¡¥<2N?´cÅ(ø…á·?.£=iëãï1ÁÔ¡ð*zøÛÃn>]JΤ0ðûÌJ×¾qAñ‡†ßø™ÚÿßbŸÿ g‡ÏüÄíxÿlSO‹<=ŒÿiZŸmâ›'‹ü<¸ÿ‰¯ýö)¿ð™ø}XçR¶öùÅ0xëÀåµ(GãMoøiFN¥½V‰>5÷OE5|Nðé8óÙ±Ójø©¢ b‘Ü?.GOܶÕºÈÑ®†'ß?\¨4üSGôíJ6ãŠ3•âšdŠRIãm¾ï©ïC wõ¦ƒò¶OÖ©êïåh÷'ýƒü«ƒø]g ¶—“ɹ2Ÿ¼¹¯B:u›}ëH¿ï‘Qÿdéìk81þíFt-)›qÓmÏý³ÖðöŽÇþAÐ}vÖv«á Ú³g@ìgm1üáÙ#¬”»Uá—‡›îG*gû¯PŸ†Z);D×cÓç5ü.Ó¾Kë¥_MÔÕøYa»þBWŸ÷ÕS¾øsköÈ5 ¶.ØûÕþ^”Ã÷·wMÿ¥ÿ…U¢g™'÷š¤O…ž- ‡þS'ÃO «|Ö[±êÕ?ü+ï Çörýy®þÒnþ$j2Ú«[@§d}«Ñ¿áðØ#T¨eðW†£ùßN¶TÞàU/ìo´¾X‚ÉœvÜ?ƯøfeÜ4ØØîŸþ½1þøe–Ó•qßq¬Ý+áï‡î-Ý¥³É@ù\†žaÍŸ=¾cIÿ ÏÃyè‡ßæ4«ðÓÃJ[ý ÿ4§á·†ÃäXçÛqª×ß¼;o§ÜKÞªpwJ±iðûÃrZBÏ`¥ŠŒüÇ®*Êxñý›Y_xu7ö]¾GªÔ0éÞûq²ŠÒÄÜŽ¨1Ík¦¦ ,-Æ:~ìW›|U‚5 Çh<îB¨Åz|1Æ–Ñí@Ø1íYÿŠôß ¬BøH<ÌìÚ¹Î+“âÞŠîà¹l±T¤øÁbFºuÑ,@À¯F†a,Jøûà0Zʾcÿ ‡Àø?…låŽF=iT0Í ¬Ã¹ô¤T9ûÔŒoâ9ëYÿ„–ÓóÍÇë[íçzÒ»t ×­4¹+ÇÒ„v$œtë@ ÉêH⼪Ë6ß§^†@ߪƒ]'Ž¢ƒm«¼¬³ˆÆÜ®A$žJÙÒ•aðÔY *$8*§p8ì+?Mí²„²µ¶“æe¹±Žzì[£ÄœÒüïýÐ+ÄvÍ7‡oƒ|ÇìîCZ4¦mÕÈÆb^þÕtýE4®Wüé2Fî½ ÕvñšU^3ëHÀ°Îê\|´î3ƒÖ˜ÿìþ5â§xrñÿé™þUð²ßËðÓKý÷5Û•ÃrÜSöŽÜzÒñëH>ïÞÍfêÀˆ+g2+D/ʼ󎔨~^»¨èqúүݣø«'S%µ+%ÿjµ?¯z2C*Ò“š9fûß-÷OÒ¼³Á£Ìø—­>íÝEz™-y/Šu ÿxÁ|5§Ü´6‘ÿ¯dãw­k\ü/ІœÑ[M'Û1ľg,Õ¥ðþ×]°°¸³ÖÿríÉ"ºùså°Ï¬­?ØäÝÞVþu±°úÑŽ3BƒLÚwœž=j–³ói3ÿ¸xü*m„ו_+Áñ¾Ù÷cÌÆ#úWYãQ+X" ¶ÄÛ‰9– 9õö«~ÞwFê7Œ†È'ãÓ¡®kC–ÞçŬ¶Ð¢¦ñŠ/•‰©<‘€q^‘Æ1Hxà ¥¨Bg±¹„ôhØ~`Õ/ 3?†4÷cóÔJÚVÜè})£ŸÃ¨¤Q‚}{P‚«O?¥&y”?úÔ¹íùPÀW7ã¹D~»ù° â¢ø}“á m½òk¥Ìo§ZwðíëJÓJ¡ùzÖf¬ýºÖþLÁZp¥ºÓ”Ó±ß5‘}ók£½kãÿÕFÐM&8ëÿ}SUinþíyÃÿŸÇºÛÿ´z|®DN;óÇá_?é6º¶­ã»ûm>á­ä•Ü<ËÕTÕÙê_/ì줻°×îÞí㹎¿­jü8ñUÖ¹g=•÷7v§»°é]Ó°±þígèxy²·ó­!ò­8ŒÒº(*3žõŸ¬üºTåyù Oc•Ó­÷uØ?•U×u{]Jšúé±cR}+„ðu“kÚÓø«Z•Al‹Kwn}yªzmÌ1üg¼Ê¾VÃónû£½zºJ“&ämËýáÒ¼Ëâò€º;wJô»nlâÿp*~2ò¯0ø««KuqaáË&ùî\÷8ó®óCÒâÑô›kW Ï©îkKלVV¨qªiÿMdÿ»ZNwóÜT¸m<çµ0±ùzцÚ+'R\jšsîèì?5­£­&É ú 2@9éM~µå)ßâæ‘.Wçò°~¤Šî5ÙuÎ-´´½h(Üe[<’^:bŸáˆ zl‚Tpï+3£&Àòp=+5o4­:ýdµÓ§’0ÛÆáp¹ç+¸œz×Y…¢Guò݀ʞH>”æp¨éùÔrN’8“á- ¤lyŽIGa[Hv»pp{ûÓÍþ4dçùS?å§Þæ¥úTe¹ÛKÆíÛ¿†•BÓN[žÕÇ|L/®Ÿß`µ«àÈŒ>³RßÃ[rÈÛ{ÔŠßëGͲšÙÇ÷«7P%µ hý_5ªÄ¨ ÛëBÿz›ûÁô¥Pä|Ák:lvÜgî©5ª}ºÔ-#m¥Pw¤%°«÷I¦Ê±ýÓ^gðÎ6k²ùêyükÓÍ,dùÆ+ÈæÝàOK¨Ï 5…Îs"®väÖöµñ;DK±L×7&5Sòœcš«ð§A»µ‚óW½Ë{³ò)ëŒæ½fÄRúí¬ï—}46î®ßδùÝ»uIƒŠ@H`*<’¬OJ¥«È&åº|†§°rÚ}¹ÝÆÁü«3ľƒÄ¶ÊéäHÃÊu$ æãøQ§ÆŠ?´¯8ÞãŠâ-|g7Ä™´I'›ì铽[æc·#šö7K‡GÓ ±ØÅ ¿“×5Àü_Sö})ý'5èÖŸñã?À8ü*}ƒšò}7OºÖ~,O}qm'Ù­ÝŠ3©åákÖT* R£8¬­]BÞéŒzùçŸÂµÜ‡4§ž;Òçši ëMyc˨¬-fòu§H%åŸçž1Z'V´à$»‰ìªMEýª“ʵÎ?¹ŽÔ¦îùÏÉd÷ÌÀw§;ê,¹ÛΘ-ïáîöŒr=y§!6>;ÐæiMÅ cÛÒ½+YÔ¥Ól¢¸D]žj,Œy ¹äñYzv¹w©ê°¬PÈ–øI½0 ¸ÀŸZÀ¹qÿ é ÉÅs”Y7³`°ÇV¯@„2ÃÎêòãæ`¸ã¨÷• {Æ*'ŠåGÝõ÷¬_ 8+¨FXæ+ÙFß«ýk¢_¾@)!G§µ"ƒžV„}éã8£ŽýiÝM9^GãJA/Jà>*hÖê[åy…tš%Õ­¾…iI‚#¢º•£ ÞbÓÆ¡hW>zR‹»`¼NŸ÷Õj¶Ýþ½ïªÎ»–Õm°êXr~jÓ£J§Û4æ–1ÖUÿ¾© GýåÇšœI?2Òyª šËyQ¼D¿7HëKí ýä¨Ì~fSÿ¤kÛUë“éºê6ŠÃuÂsþÕGs©Ù‹YÚOñWœü1¼·‹QÖf’D òñù×£VÉ~ûІî}.ú ÀŽE=C®k.ÛEð½´ÞjY[!ýÞõ³¥dÉ"„©%Ô¬Œo¶u$­UÐïm#ÓLê9?y½ëCûFаق¬ÿjZîÇï3þé¤]F~Hf'Ú2)£Rrp-'?ðõ‚ÃeŒ§êEgj÷7M%›5¶Í³™=O½h‰5#œG /Lî'ŸÊœ±jNNûˆ€öSGÙ.Ù°×Î=‚Þ™ý•¼2æv¯ÍŽÔôÒmÂÈÌIþ6'Š¡¬ZÃn,^8T´('Øõ­¥Ž4£o )ÎUp~œýjŽ¡­išZ¦]ÅyœdûÔZw‰4]Zo*Îþ d„3ùV¦@9ÆOó¯,ø³ûcE¸`ž~Œ wÌ’¿‡_È}’»Nà=:ç·<Õm îtÙ=Vé&’æ@#uèH\íÇl æõ»%·ñ3Ý "cö¥u·2’Ä–\Ó5èì `¦ÞœŸJg”Jàíÿ!@Ž5ÎO'}+Ãå#Õu¸gAÿŠkq¥(x\ŸJ‘'îÜÒ})=}&3·µ8¼ A¦çæûÕç³énÝ™‡Ë]Ö]>e\Àý*À‚`ªãÓŠ ­³.4¤û ¶1ä-0iÖx¡LÖT¶VÿÛ1Ååü›y¥ý™n­þ¥i³íXhê&ÒmüÌ…|½OþË·ÆvÈ=~jzévËÑ[þú¬«{W 6À½7V“iv¡çýãJ4‹/ùà¿Z‘,-mëŽôÁel¿(†/ûæ›} ¼Z}Ë,Q}Â~è¯=øN¨íª9U;¥¯N1G¸|ª?à"˜ LœÆ¹ïòŠw‘0AõÛQ%¤XÏ–¿÷Ȩ§´„C+yK÷N>Z§¡ZÆÚR3Å’Ç’£Ö¯› S»÷ÿß4£M¶ÿžÿß4Ñ¥ÙƒŸ³ÇÇû4£N´_›Èöj¦©§Û&™rÉaö´ý?N¶þσtýÁü5a¬-ü±Óikÿ>ñÿß5 °µÞ<»GØ­Ÿ"?ûæ¼ëâüQÇ¢éæ5Uýÿeö®÷LDm"Ô…_õ+ÆßQWTÈUö§0z^½Å4`¯Ð÷¬uW$s‹•ýk[ cÒœ[“¦ï•NAö¦y™ ðzø²ÒMo^–[†•ÈD'ãšÇ~ ·ðÍœzÖ#Û˜¤”7sÑúŽ•è~Ö½á{;ç*&#þð85ÆübEirwWaŸÈ×xÖ±jZ q´›‘+ë‚0AüÅfZé·±Ïu¨4÷&o7apÉÐ>œUoÃÚ†¥®››såĸ,°$>ƒŠë,lÒÂÙ`§\ÉÏ~MYUÜ;¾”„"¾1XZaø¿XŒÿÄãî‘ý+ aœ|´Nþ´¹zô¡@dŸ¥7–ž@Qü¨#ææš=>Zó/ˆoçx¯Iƒû­šôˆŽ×ýšáüA ø–ûTilu_³Äß(޲fðï­WÌþÙãýªÎðƱâ­CÅ?aÿh†ýë¯LW±à1Ó¨¬ÅmÚã{.ÚÕc°ZD9_»NÜ3ƒAÀãÖ›“¹V²m_þ&÷¬¿1ZÓÞL~þµÂøÏÆ×Z}äz.‰›¨Íß²f±.t[Y6 ÚÎéGÎ`ZéüâK¿i­¡Ë«vÚÇûÕÒk í—¨‰¿•p"Ýa¨ÊßÅ=zHb#m ÆÚ 6zzP§h桺ù­åÇ÷MTÐOüJa ïZLIÆõ¦•Æ8¤ à“Î;Uo#H¸Çf*{ÿgÁî ›ýj~3ïJiŒ»˜s÷z óŒò²Ï_´`~F»½ïÑm=àOåVÀ5.Þã¿JA’_ïSÕ{šÇñZ·¥Â>µª#8©õ©HQs¸ÓIPq×&SÇjÇñ*îÒ‰Æ1"ýVÌlLCµs=Ò®5]ÛÛ®é€*úàäøWðûÇ:~‘£dêîmä…ÎÇ(NAç4ψ>-‹ÄSXhèóZÆD—HPAϹ®—á,cþ°[§žßÒ³þ/Å»A´”vŸLƒþÔÛyàˆ×ÎX¼Ë"CÑNÞõƒá‘ë汎ÝÖÝ®ÆÄ˜n\Rø›Y-¨=¢^ùvä#FÇtewd`äŠëlɧ[¹“{”ïþ÷ÍY@ÌXŒ5)Œ³Œ“ýkÞ?'ÆÓÜÉfŒ=ðÄZßeÉ?…8ŸÖ‘Æcâ—îóNSr@ÏOjI>m´ÕVûÍB† 0µæ"ßuñ6ÂîcŠôò »ð¤§¸Zóø†êÿR‡ÃšC~þl ŠÿË1é]w†<=oáí&8"2æVîÇÞ¶FüïYvmfå¶ô­E%›~´ úPÌ̼v§rª¿­7%WvÚÉÓuõëmÿ–•¬[ÊIn0»«Átß5¿u @[5åÛÈVÞ/~‚º›ÿxßN‹í—ºJ­§RŠ¿t{×gáXx‡JûM”+ÿËDUšÑ׉] ñ¿é‘þUÆü#Cý‡tÍÞSÍz/8â˜Ù´a°ÄphÚÄÿ CtH·—'8CU4f-£À{úV€cŒzӉ㎦…$æ“ G¡ªÉì{Ÿ—ø X²%´è6ÿÏ1üªe§Úž2sIós@È?ZóÏŒ Ú¹íp?‘®×B9ÐtóÿNÉÿ Š»ÉãúÓ€ãu!_—¯JËñÿ FKc¡ýkM@?­<£šh`Àãó¤$/l޹§+kÄNÇF—¸àþL+J¾Þéǽ'Œ&ŠÏUˆÄÿgó¢Û;¸([ç¾Mu¹Š}Éቒ?(SÉ⯟3°ÆiÇÌ*[AÐV*§,¤'ým¤Š>oB§ú×EÓŸZC’ÜRó·šQÖ“x¦…` O?!9 3Æ+Êâçâã ßqkÕaÞ±üG¬G¡èsÞ;|ʧoÖ¸†CÝËuâ Ïžiä;7:ôþ‡Ú— ?βôܵíÛÿzJÑÀ-ôïRHØÛLv Ã= .~Lîâ²t_õ—,½ä­ Á–Údþ&R¹ü+ÇþC §Ä-A.ö,áŸËÝïé^¡â;Ë;ÝÉtȩ埽^}ð~ Êj7Cå¶y Çé^âGÛáCw_(×3ð”áv#¼¦»Ó‘Õ©A-µ©G¥5‡âj½èÿ@¸õØy¨t`N“oŽÞjæïËÒ-ÏNÔ蔪óI#žGj¡¬’Ú<ý¾CSéÀÿgÁž…\^•gm©¹Áõ¦TkÏþ0sá‹O´/ò5Øh†ðîœqÿ.ñÿè"¯|ÍÇùÅ*œ‘–â†mÇšÛÂóëY^$ ý—òÿÏD?øõk&|´öéq4yx\Ûš6çùb”ªHïYšþѢܶ{tüsV­~Å;Æ0jY‘e£uܬe=5ç·Ÿ [Ù.4½F{0çîë×5Døs§é·‚öîw½¹L0iNTí]®pƒæ â~&ùsx.çlÊYY¹Æ@éW¼ —ÁäÈÇQÁ"“LÖ.§¾´ó ·û5Öà©wÄg'·µ7Åvö³ÝÙý¸¬V¸}Ó n Á“ÛŠ×ðã»hV¬ò,„. r¹ã§µj·ßê9¦JÇ)ùÏêC&Ðå^Œ¨úWJO9¦¨ÉËqéNÉ=zSdb*ŒS+MÏçK×úŠa—?ö¼»Â€\üIÔgûÛ+ÔÎíäüêÚ“ªëZô³[æ>[uz•¥Ûé6YÚB±Åàc½Rñ“˜ü%¨²ÿÏ#XŸ O—«šîAÏg#Úœ9¦‚6ÕMA±aqòñ°Ó4·K·8þ ´ æžÍŽ¢€w}(o¥PÖOüJnNÞ‰V,›8ã`þU;6;sB䨣'“Š^Æ+Ï>0|) =®ùë<6D¾Óßùw?÷È­sÀã¯jA‚ËÁ Ÿ—¦(`qô¬¯gûBpWùŠÑI ˯=(kˆæy£Ý…V—R±Df7çëéQ6µb|Öb;&kÉòÇì?Ü5KV½žçM¸l¥c?1ã%΢tèLVq°býx«Õää´¼p2iVÏQqó_*úlNŸL‘²ÒßJAôã©§cÀçç’VÅ—<×9ãÑ<¨IxeE òz04¿ ˜Û'÷KÔÿféÓ"ø¢‹í¸óØK/¹eÎxzÖ׌b·x`iÝ—+ ºH<÷㊳àðN†ˆQÑ’FŸRs‘õÍtX²0=iŽ@^Msþ#‘…ö‹"®1z?ï+ é:}±IŽzb†äûQŽA¤eʶ:žô( =iþôÁÀ=ê+¹DVr¹ãå¯-ð»Þø›V™'h¿x~ïñW¢>äý½©Æõ[‹ö Ù_.?Óßþù¥[=A·§ÿã´É­¯–'o¶>ÿv©iV·ík½.ö«1þ¾Ðj;[ý7æÿr“ìš‹/ü~îôùi¾N§»jÞûæ¦û6¦ßòøŸ÷Å2{mHDÄަݿݪšL7íf²%Ö±ùvÕÖ¶Ô~_ôÑ»ýÊÊýˆ?oÿÇiE…æ>köÿ¾EFúuÓ8ÿ‰„¿ðç|m§Ï„o¥{ùØysµVøq¦™¼µÔ鹋aZº´ÑcÉoµÜ°ÿzì—rÝ\ÿßT‘híƒþ™sÏý4§.ŽUFÛ»Ž¿Þ¨/t³ŒÍöÛ‚ Ôiúl­ao²ú` ƒ€Õdi“®âa7ü ѦÞóFO¦ÑN긄Ÿ÷ȤkCþ‚-ÿ~ÅQÕì¯F—pÆý˜ÉGåSYÙ^}ŠºŒ˜(8Ú8©Ž{¼ÄÊCè6ŠV°¿oö„„×1H,uŸòn?Øï²j+Œjû ®â­½âxYL·>l~ravã×½t~ƒQ iηªŠÖ¨TlÎj‹-@§:‹ßcy·P—žŸ(¥þ˸,Û¯§#µI;@{Ë’O}ÕŸ­iqãÍ'›+ÁÆò{ÕÈ4kŽ&(ä•ÇÒ¬¶‹eåámÔýjXôûU\ýž?ûæ¦DŒ/ÊŠ1袤á@ÇáUo€m6ä7üó9…E¤ÚE«Ý.áW€9?Z üT™\ôëŒRdõ&°¼b¾o„uA·þX’?káD¬þ‘ü³€öȪß˨>ªòÁ·ÛÝ‚q,cplrz÷®³[žÞ=.9ï¬üñ¹HˆíùXRqI¡ê‡SFh­Q#Cêpp1À­ÖùG˜TàÝzV‰~[KHÿU{ 'þë]úÔcý`cߥ?5&wRÔR1œ–\Ò·"¨ë.pÇå"3Šà¾¦á¨Ïë!¯Ifݧ.ÚO—?/åJ«µ~µ^ñü«ItÔ:Güƒãù~V­€t¤PPJ“M?~«ßZJÞ‹PèÀ.™}Íh)Z8þí ÀzRgæû¿Jäþ#¾ß_|¿ÃŠ_†É³ÁV_/Zër«ïH­òço”…È<޽)ÙUU=X¦\qÎÃNÓOüK >ˆ*}ÜrXÓ· ÇÓ4›Á_—¯j£­t‹œ6U‹ e÷Ø*fÂn=+Ï/¾+i¶×óÚ ™M¼…K&1ÁÅ1>/i„ÿÈ6ïž;Wgv—–p] `%Œ0¨ÈÏ5Ç|XÀða^þz:è<#´ø?Jõû*Ò¶Î1Í&åùŽ:w¦îúÓÆ6}+3\?ñ%¹Âs·Î¬ÛI›8ŽÜ€ƒøRÍp¶ðI4§ ˆY‰é€3^Qÿ /‰üoªÏm ¿Ø¬¢8iwsŽƒ'×éU5y|ià*úmKív¦L2–Êäÿ ÍzŸ‡µ•×´;MF5e¦X{Ž _»]öSŒç1·òªšØ–ØÛÄ}>• S$ãÖœ€¯­qî8Žrsø Íñ^o‡uíögÇýòk‹øE&íþ/îÜð>ª*-An-¼U4Ir¨²L Y‰”€1‘‚+¶¾WÕtÏÜG9ùEÂd ¸ªúžºt—(×PI4Òodˆ €Àü+¯ÜØ=«Ŭ±øzWí‘¿äÊkn9ãSž p³Fã…>´„’0´›²wF ®íÛiN}«Å“ˆ<3{'ý3<×;ð¢,xzY¿¿%wǧ˜ž´JúR|ÜÕ]Q€Óæ––Èl°…Wûµošap8ïÞ—>œJMã< ©ªJ"Óî?†“Nbº|ý‘W7}Úi‘±»n>´å;‘³Ö”}ßZâ¾(K·Á·#éúÖ—€Woƒ4ÿúç] ¶r}¨ïNÁšEïTuœÿd\ûjk5Û§Á†ç`þU`zw¥È$ΑF}é¼ù›@üj¦±ì›Wø Of?Ð`íò KÉ<»9¤'î¡'ðãž×´&FçWž?6â‘Jï8ç§½wÚ_‰ü+¬\ù6²Û' Üþbº ª»QWp?.•ÅüUþ‰N2D‰üësÁg> Ò¿ëÝkpc'ÖÆr{ÓÇS}jž²3£] óåš[#þ…nCg1©üÅ&£d5 2æÓ~Ó,l…‡¸Åx·†õé>ê÷ú^¥jÒ+¾KFÃ Ž„}E'|p¾*K}*γ[¼ªÍ-Ç=à+Öü/¦E¤øfÆÊ)–hÒ>$<’1ïZ²ü°8êëYþР²A`ï£Z‹ÔŽôþ˜ R7npiþ/ΫjK¹ŒŸ½ÌóƒÒ/Vˆrª0jÔnËòåŠg7 HÈ!GÒºíf)nôWHwÛIØáI‚FO¨®gA·tñ3yBË—c9r–èzgڻѸ}ãùT[‚’Çk/Äê$ðÖ¤1°–ü†kRȉ,`lcSúTã§ZhûÍéMlÜÑ‚¿/ëJ@`==(ÆÓÁ¥À#-Ö¹ˆ×+„®í»þ\TŸ [oZÿµÍu`ñýÚCÊ·ÍH (´£¯ÞéYºßüƒÛÞ®Úí[x×§Ê*R ½Å4.æäö )ÝŒ~4îß+V^¸Sû>CëW-GkýïÝŠ› üMºœ6¨ÛJ}hãó®âêøFEþóú×CàÀÂ:hÇü±­Õ Šbœ v3pÙÇÒ³õ¶Æ“p1ü«@5Œ¾AʬÚWÞ‚vÔ?ýªn~sU5ÿ{œ·ðžÄ°AÏð ‡S‰nìn-ž]‰4f6>€Œgõ®KÃÿ4 (<³/ö„ÑæP@Ã¥a|EðfŸ§hçYÓm.-ˆ,#àœt×xW›Yð…¥ÍËî™ GsÜƒŠ§ñWÁYìéÿ¡ Òð#ð>—žtë]ßʙ!à”ü£¥7wÎsÅTÕB¶xé›søQ¦H¿Ù¤|•þU[Äwí¦xnþî!™b™~¸ë^qð³C´Ö£»Öµ%û]מP yÇîç×5Öø×@Ò®¼)}+Úű@dIA#ó¬Oƒ×—7~º†ffŠ ñ[ #8ü+ÑH>KgÓYžû$ ØÄŒ?ñã[ ¥[ži6“Àl`Òñ)@]¸÷ëL˜#ÛºõÈ"¼¯á3µ­jß=ÔþLÕØk6Z4ZŒ—w÷‚2ñó”ü¥wc®pH«—7¶ú‡…î$Ó•n#ò±ŽsÆzu¬?XÝØj7 ":ÂweÝäƒÆ1Ôb»9‘@ÏZP72ü¼µOXˆ¾…¨ êиþMÐn¼ÝÆFäŸ|V¡;OÌÕæÇÝïJ¿{û¸§»­!8Ú‘Oü ©Xîjàþ*HAŽ-Ø/"­t~„ZønÎ3ÿ<Ã[?*üÔ®p(0ö¤æe#ñ¬Ý\ƒ*{È1Z{vª¨£¿Š‘”ëB䑟­8€;VF¾ÛtõÚ¿y€­8€.º)Ä€zýÛŠ W4rWnyõ¯<ø¶Äxj$^7È3ººß þïÂúzÿÓZÁ‡ÝïM'2b¤ ‘H0zVv·ì©ó·§nСΛò©6¯÷}¨9#©Ø@õ¦}Öàæ¨ëò¹n¿%Y±P,­ñ×`þU›âm1õ­òÊ|¹dO‘÷c :WšøwÅúƒôOº’8Üì•W'ëÔS|MâÛßDš&ƒ§Üä Êî½pz{^—á}þÿÚéÊUÚ1—oV'&²>(®ïÞýPÿã®xkxLÿ®'ùšèöí<Ò9ùðjzr¼þ4,æªêC~—tÆßʢѰÚE¯´c5%ý´W–[N™ŠD(ËìEy=·†¼aà«éÛCÛui1û¼}2;Vo¬¼yã-/ãŽÂň8÷éÔ×¢xkÃö¾Ñ¢°¶^.Ç«±êMj®1ƒÇb+/ÃÀ%„Ëž“¿óÍkU, T uk¹¦ŒqýáÖ¡mcO…s-ì ŸYWüj•Ç‹—t? Oø[öÿô »Ïû”‹ö§þa—yÿr|_´ ÿ ›­Ç¯Róâ½½ÜÿIJãämÕq¾0Z/]*ïåí¶”|`³þ-.ïþø¥_Œ6y´Û¿ûæ—þ›·þA×GÛe/ü-ý<íÛ¦Ýÿß5Ÿª|Tµ»‚8×L»]¬¬w-[?mñ„Ò.øãîÓGÅÛ}忲n›Ú”|^ƒïbÝR‹ñ•_ø’ÞS[ãçåÑ.¿Ïá\·µ¿eñXYéÖÖˢݎ0»·}ê´ŸÔîÝ¢\ãýêSñzÛ6‹r)?áqÚ•Ûý“súT«ñŠÈùÝʪj_ìo,%†=:éIN=jÜ?ô”…é÷\/÷EKÿ “FÛÿWŸ÷ÈÿÆ-#w_÷Èÿwü. ÿ˵оQþ4Œ#ÿFº?ðþ5WQø±£ÝXMV×^c&Ê*X>.hqAfÞèº wÓñ«âöÁò.ïØÿd¿<1r1-¼ÏìÑýiÑ|Sð¬)û»yz€þU7ü-¿ìÿ—ŸOõýzÁñ§ÄM]ðµÖŸgö:]»wÇÁÖ¦ð—ÄMGð­–Ÿu$Âx† #©5º~*øaºM)ÇCåk|SðÆsö‰3ÇSSÇÅo 盉yíåpø§álÇÜë“U=Câ—‡e´žÞá÷!UÄ]r1Þ³¬¾+i6:l0-¥Ì’ ŽÑŽŸZFøµɃG¹‘–Çò¤ÿ…ªKƒoáɉ>¹#ôáã\|–þn}Q¿úÔÉ5¿‰7 ˆô¸âô;Çæi ¿Äë¦å£‡?í ªÚ‡|sr.jÞH‘"‰qóœg¥Y¼Q7ü|x…ýÀw=¾µ2ü&šL}§]¸~ý þf¬Cð‡NTýþ¡u!œ;UÈþøz?™¼öôÜÿáWaøqá¨6[ñŸ¼Äž•Æø"(´ÏŠ­¤ åŠt0 WmâmfH¤‹k¬j6ÆÎTnܤôõ±§Ú=®‰ ÃùÒ,[ŽIàôÍr6/ ~"ôØ/ZHÑüÄšPwÜœäzWzœ1'·p})åñ׌Ò8ܤŽEaxA€Ò懧“s*ÿ5¾FvúÐäf¤2ýêV\óL_û椀1ÖŽ c¸¯)ñâ-ߌôËvù—w#ñ¯H‹K³F¦Ò.q°zR¶§0Ûö8¿ïšoönž¿2ÙÃþîÁNþÌÓÙ·}šûäR.Ç9û_÷À¬«­6Èë–ê¶ð÷Šì5jÿfX›ìqßšúv˜Íkoÿ| A§imÿ.ÖÿM¢ƒ¦idä[[ø¥þÌÓ“Ÿ²[’z|‚³uk;O>Î1i2 ü¢µþÁg‚E´_÷Ȧý‚È ýš,úm§‹+>ÖÐÿß"“ì6`Ç´_÷È¡¬mJÿǼXÿv¼ÓâÔ6«i§Ç*¤ËÑWʽN³·:UžëuùbyéVÖÊ×ñïýóM{ 5#ý?ûæ‘tÛÿ—X½ò¢ýŸeŸøô‡þù•¯ØXdËþKBZºšNä!k(~èÏîǥؚ[øñ¶Ïýsi‡EÒ‡-cožÿ»Zö&ü‹ LìŸØ:PäéÖß÷í³µNM"䦟lgc_ð©ít-Ù@dÓ­rÈ91/'dxD ľ×õÌRh€È2ÔÿÀDÞÑ0?âWmÏý2_ð§Ÿ è€déV¸<ÿªZæ¼ iV¾ ¿šÛN·ŠT µÒ0ù€ëQøÃÚ=®.tëydmÛ™Ðâ>ÕÑÿÂáàt›L×!þÃàÏ´€ÿdÚcÙ<ø;ù\é6ÙÿpSdð_‡Jçû"Û'ýHþÐbµ“f—i¸#`ùcÐÒèº6št{v66åŠrvkY,m#X#À 8§‚‰o-G$ð*´Öq9‚¸NÈ®§ùÐõìi»»ž:VNŒÇízœc€·ÄV¾0¥qXÞ ñ-‡†ì¾Õ}' v¢¼çÚ¸7ø§«Ü“5‡g{~¡Š±ÊóÏJÜð—Ä/Ü›9£k[ßà‰›!€ç‚{×n2‹ýkÉô²-þ4ÞGýöÕs]Ÿ‹®RÎ(e–Kµ\|‰U3Ðóš³áYd¸ðìFIò\.ãqÀ'׋†uKyàh¤°‚X$ffysëÁæ»(L‹ ,Ì­ ÀfŸaR úúšht#i8®ÃŒb½Ö o ì@?Öºl-7oÍó~5'Ê¿ð*‚»hfÇAÖ—'n?Šš„oZòTý»âÕ¤x%zÑÀÆi€7áMpàTݧýÝ´.ÿ½Y1©·Ëò¢ÖÈf;WâŸ_øƒP[ˆuYm£ ·bæ°¿áXj¨ŒOˆn/^µÌiš>§¨ø¬éún­qs ûëçbã­{¼ˆ­âˆ¶íŠ[­P¿ÜÚµ’ªÿMkí$QYÕ¿†•”/Íßµïá^cñU™¤&ÜfZô›%Û§ÛƒÚ1üªeA¥äsI€Ïä}ÝÕ•â”À÷eþu£‘wâ©kš´:&‘s0ÊB„ãÔöåº5‡‰ü|’j—Z´–v{ÊÆ±äÀ)𕧉~\C|5&½±c‡Ä޾õëN º¶•mÂÌ¡±LÖÔçœej{hѬ`%s„ö⤜gÖ¤ >R{ö¡B‘’:S¶†ÚHÆ+—ø‡†ð>¡îýS>ÿ5Šmé»ÿB5Ö6Ñ€GZLàdM9i>”ÉŒªGNF)“’ö²ü¸O?…gèLÍ£Û¸ã‘5¢€ùñ™gÕ¾#xÂ[® 2wlÎ6†Æ}É­Oá4Ú|—MåÊÝÄ ®öà‘ÏjÑø_â{^Ê}2þF’æÐŒ3õ(z~]+Ñ¡•¤º®¨¯˜§ÿ­‚ãy¯2ñ·‡5oøËN) >—Íì`e¾oÒ½ ÒÆÔGòDˆ8 Åxåͽ¾¥ñrÞMËŽTy^/º1‚ƽ·œ{Šò;’Ð|möñ!þqâ»oÛO$6“Á™$R¶Eæ =FjÇ…îe¹Ó\K´I¬Ž¦!R0q€q\¹óá$E¸º”GÎØ§Ucbù*OLàí¯D0ä žic·¥HG8\×;§Ê°ø§YFkˆ¤³ƒü«~Sí÷¨þ-Ô¶Òƒ¿†¥'û¿…/4dw~å:LmsñNá¿çz¹RM0åGû´çÎÕÃsGEå©B‘Æêʵ`uËeâµ[;>ZÁùš¼ÛâG‰®"è:fóywò;/UÓx;ÃPxsDŽ$ÉšU3ž¬ÕÒ ¤n¬«¢[_´A޵i¶à~÷¨›ïRz1žèû£«Ë~*uMKc÷¿Ö½2~Ç|ƒŸÂŸ‡_âȧàŽÿJnNq•#ÒƒÓ§½gk§vÓ?8¢›Â¥fëº,:ö–ö³$R0,S¯íK·Ñ4¨l-Î!‡8/Ôúšó‰ž&´Ô¡@ÓíWRH7˜›p=Íw~ÓçÒü5ge*þú8Æà{µoXûäžp «¶¤‹(>^våRÿ~\Òç§£’qŒPAŽ«˜ñþá Ô?åŸ_ÄT? ·7ìÉ=ß÷Ñ®¯-æ}Js1PN)ª[Ì'b”³gM˜%ÂôÁ¬¿ ’4Hò1Ësÿ5«"—F¸þ1»Þ¬[1aï¸W¹+apwɰ8×õãïl#ò­Ó–­“´v®3ÄÞê¦àêÓÁFÊNœ~5çÓÛêÿ 5¸ž9–âÖëï|¼H ò¡æ½ºÒu¹µŠæ3••7¡ä:ò¯'âÖ—7Mï?‰ ×}âs:Xiƒ°W,ÞWcÞ²<l²\Û à\K½!ùŒÜr{çfö "ÆæInõ_&!0™­Œ«³\ã¯^k¦‚ê+¨’X^V_­KÈlt§t8õ®x/‘ãk’~ìÖHÃþÄZè `¯ÝF[ÌÛÚ”°-²‘ƒ3mþFQ³§Ý§n 7 DÜ$ž›k˼<ßê3u«Õw½)»ˆjIwÍùQ—/­³²ÖM’–Ôïû»k\*È›j­ÜɦØI;|©–&¼ŸÀ¶òx—Æ·ÚíÂîŽ;ò¯b•ÜVž‡å¬·Ãx‚#éió†ù©¹ùGÍŠPq÷jLqƒÍDÙ—nÚòò0hiÿM?­z„cÆàgò§:8ãÖžFÕ4Ó‰? ÎÖ¿äô•sùÕü°aþïæ¡o¦ØÍytë1.é¼’ãVñ7Ä{é-t ÖšJ¾ÖnGíçØWmái~´ 7‡¬Ó`‘þèí]vþqÔö¬ÝmÇöTã:~5nÐæÖ?¸*¨ù³ÜÔe³/òÿ”È}@æ”î&¹¯|¨óŒF?˜ª¿ X·‚lþnïÇü×^?Z0sžô¹dñêi2Ï\Ód ÆËê cxs2é<7"Gþú5µ‚©ž¼WžêQø_Æšëésn7ð‚•n=êHüáÅ6¥s“%ºÌï•ãýšÁøMj÷ZÞ«¬ìÂ7î×°Ü[$a^¶ŒO^Mc[1_Þ(ä˜PŠÚq¹xê9¯&ø‘q¬hž$²Õ-çlÉBÈ„ܧ{r+®Ó¼áÛ«îPHX®]$È`xãÀxÓX_kº~—¢¤’¤Ns.Ü œdý¯b²¶Zu½¢·F±îú W—xü¾!hrößOÑëºñlq>„Îòaã’7@Sxf`}MdxxîþÝ<èíÊ–AUUÆ1ôæªø›Êµ¹Ô<¹¬<ÉpÆ)žBqŒ téÅuº:\E¦Ä³º¼‡•+Ì)«ÅŸ?sëNo39P£ë\·‰%kmrÒã~7ÛH¿O™+«$ù‹O0Å5¿ï–£';hÝÏû_Ý¥nvÔR´™™8 kÌþ·›â}Zo½ûÆZõ=ÿJUl¯J^:ÓpþÔÅ]±ü«YÚSoº»m¿òÒµw>í`ø¦ÂóWÑ&²´dIe\ooJ©à ?…ôf¶™ÑåvÜÅk§Ýè¿zœÍÊþµ”òøHPÓ:Öÿ€Ó ܯҕʪ暎$]ÛiÈ⼯â\¡¼W¡¦ßâþµê0’c@ËÑE?pȦ±|´ŽÊÃojp‘Cm­¸ÏiWh« »¥qÿô­G\ÐÃKMÎÒƒ Œ¨®7I±ø‡¡X  X£3µzžÿZ¶.~(nâÿ¾R½CkæÑ­›U]·…3(ã¯áMÖŠ&ãg]j妜%y!Gò«€üi2¤ò3èj=Ûd'±â¤ß‘Á®wǘ> ÔÔž±Z§ðÈÿÅkÇñ¿þ„k¯ÀëNÏJÔÔ,W#æâœÅNbøt„°u+çó­Ÿ3¥yωü {s¬wA¹û-éåצOLífÜxGÆÞ t¶Õõ8ã´nØÝp}çñ¯CÐt{]KŠÂÎ=±EŸ›»žäÖ íÅc¢2x¢NÅ­Áüm1;zàö5RîÆßQ´{{È£š'êŒÿëW4ÿ |0Ònû+ ÿóŠÛÒü?¤h•±¶ŠÝX}ãøšÑ&2(>¤â¼«â›Dºæ2Ȭ=va^‹«CƆÛÌJW .v‚ ñÏjçü( ¶³¨XŸ²¾@‘ž~ñ'*rj—Šå¹´×Zæ2 4@#•RA9'£]Ž‹¡¤[M é7îÔ;¡ÈÎkKMtšŽ©$Vþwï½íº›/üx¦ï÷éËw©·Ý³Oûîš/µBãÅ?ïºCw©íÿü~”Ýê[[ý>_öꎙu~ãežwIÏÏ÷kDÞêJßñâŸ÷Ý'Ûu ݧÿãÔ¿mÔBsaÿ|µGý¡¨ÿÐ9¿ïº_íðT.˜üÿ´+8^ÝÿlîûïÛþ¯uj Jð/üƒ¥ÿ¾…/öÏm2\ÿ¼*3ª\Ÿ—û2^?Ú¥:¥Ê®³gý)cÔ®Éÿ|¿÷Я5ñíÔ³øÏF&ÞHÜ0Â7ñs^–ºÒÄ¿ñ-Ÿö…4j—'û2ÒíKúÏÇÒ›ý©89:mÎßœګã>àŸ÷GøÕ _Rimâg21NY}úUïír@V±ºã¨ÛH5’1þ…uœvžÚ¶9ûÀÏQ²˜ºÒílÙÝߺh×FãÎë#þ™õªš®¬$°–5¶™ e£Æ>µz-Z%†1ö{Œ(„ã¥ßº4¬…ÿ—+“ßîzþ5›¢ê­¼Ø²ËLÄ€¸ÚIkHj7†/—O“ŸV£–¢Ïÿ üÙqÒ¤ê»Á°ŽîsÒ™'öÉq°[žûÿU8G¬óMlÇD>ÞþÕDÛßo¬fñD†w„3ЊӗO½Œê.ÏEQ×ð¨ÓJ›wï5 –ÿc×ÛÞœ4x²D—7,?ë©ïð¥}Ôœ1•=Üÿžæ—ûÄŒy G¡bkξ,ØÛÚ.™41ªüî=¶šô)-“RÐRf ,#æF@æ«éº¶‘7Ÿç3Êà‡‘°7läþ5µq¢Ø]¥Íô~dó @ª…ÎÐxãñ­])l“Mƒì*Ø“o^äÏZ@ØÀ=Hä×/ã›oµéP"‘‘8?†Ö®œ³á§© óSdê´¹àÒmþ*?öj¥¬é_6>Cü«„øT€Úß8þ)¿­z:ãø—mV¼¿´±M×W)ÿ´Áj;=_N½;m¯á‘¿º® ^º‘›÷Lk?F#ì²7ý4n+Ap\÷¥+R瑎´¤äýÞi¶šÈ„nñß7Ýô­„9çŠ4¹ÛHËéO­yW±'Äm~˜üëÕ½*<“N#8£ m½i7v5—®.è!ïûÕÇçZ>V0zš0Oʾô»=[Š:¤g=!Œ/*«ÍfëªNrÏýÞMh[ÖÑŒ`õùsïÒ—Ïõ¡)Ý€|»p;â¹ßă5R¤ª? 0|òÑÿv¸ïMǯô¤pý:Ó@ü>Ÿ¥9£xëŒVFˆ!¾ Ô]9ÇÖµñ–BñL1Œå¿*WÌÃÿ—?Ò•ˆÇÒ².˜/‰ìÉïŠ×$Žøª×w)ei%ˆ)|uÀ5çïñ‡H\ùV7nß@ÿ¡|yZ4íÿÿ^ir×6Ðܬ[DÑ«àžyÅyÿÅôc¢Xɵp³c?U?á]NŸ º—‚­áðÓY*«tÁ+úÕoøE¥"K½Zò]¥I@áFAc«x¿ìðše¹7¯–²&&!˜‘Ç"¶¼9ÍÝD¨ø˜Ÿržs×½iÆŠIq"„ÞsÐUMI!0.vòÙý*ÓÒüÃnßâ©íþ*‚Tö§†¤\àûSIþ!ü5•â/“÷­¿þYå\¯Âˆñ£ÜHŠO–»-Vëû?Nžãïl]ÕãZ‡}ñV¹»Ôï&ŽÖ6l"ÿ!V¼YàøC­ÓUÒ/&]ó.úôÏê­xbÚîOšF]¬~•³1 |¿ÃTtD̓1þ&5 §nï—à€Æ›´·ò¡~_Ò†UÝY–ˆ?¶î=”V°OZnÒzþ £?)Àù}i¥7_­yg‹?Äý!U°+ÕáFꩽiW¡E ùp½sC(`2ÜV6¸vÅlïõËZàqÕ¿È¥òòÛ³õ¥Ø08úÒ.Ö?)j“¬½u‚èóýã•«6ÊßgŒ†lmöâ¤ØÙûÜzT»@ã¿\ÐW#ó¤†êßJçüp‡þÝTç'Ȧ²/ÊMcßxý+`óÔgÒ±ªEp¿W@´ðŠ\ê¢Ñd’w!çUÎ:gé]¦yáÛ¹6Ù=‹¹Æ6Öà W…cÓW ñj2ÞˆŽ‰p¿ÈÖÏ„I¼§:¶[Œ ÅròÜÝ-ÞžÓM­´æBmÚ¬BŸ”f·¼V×Rivæ9%dÙ¸WÝ·!I?‘«ÞÏö€êT;”•ˆãqf¶ãVóÒ›Tã$â™<9#ŒœR$N/$“ï ]íMŸ»FqI‚Wß½#•ìÖŒœ'†nÿÝjÅøV¿ñL³ïq]v¥7dÐÜ6ÈÙ~f¯Ò¼Cyá ~æÛFOí vo™W57ˆ|_«øžæ ;S‰4Ûf“ÈWõ¯iðý­­Žƒm›y,|=h]ÿÇ«ñòíªÚ0ÿ‰bû毻ý‘NÁàúS>û.N¦‚•8g0k2ѳ¬]îþèZÑP»[ýªzçnô˜Ü)@ Ò›»æû¿-yWˆÇü]­-~öW«6E •È?…W™ H§ø}*Æ ªú 8ïšÊÖÐb× ÿ-…j8Û×¥)–•[+Í&3ÇJM̾ùéYÚéÿ‰DÙãæjõ¹Å´C=þTð\òÝ)àÔ´ÑÔ‘\ÿˆ_ê¿7XùV?´aàèÃ(ÿ\Ýë¹Æáˆ?\{Óö“׊Lvôæ—y¬m Ÿµêƒ¿Ÿý+cwËŽù¥*ǯ­æ_zQÆiÄf±5O—UÓªîÞÃóm;N:ú×?âm6÷SðµÝ•¿—ö™Óo-Éçô®#@øKƒÍ×n$ó2vAðžäÕ|9‡AÓVÑ®eF·Ã:äsÔé]·ÃŸK¯øad»}×6îcvîp2ñ¢ø¡“Árœò²!ýqVþºËà=<î2þLEbÅö~)µ72GpEÇËÚšGŒFí¸­¿êki![ï P6TÜt9ãKáØf–? ,³ò¡9XòG=9®‘Xç8ëÅ¼Ï NLtP=)ÙÞ>ZJR/ûÛ©Q¿†—wµ';q\§Ä ]<-uÇËP|2F‹Âqd}æ¦üK¼žÓÂÓù:ùŸ)ª ´»8|6·‹I,¹Ÿï5Kñ3O±o I<ñ"ÈŸu½êo…Ó\OáÌÍѾO¥u·Yûû¿»Pé SMŠº d|´)ãq äžS4£=J7|ج<–Õ¯˜sóV™vnÒî;}éAù€ÛMÜ䌮Öž <×”êŦøÅ`6ôÅz« ´þôͧ;‡zq b›Ðp¹5¬7Y|½f®¬Çï/Òš7ueÜJpb†‚[<Ò«}Þ•“¯;e\|½‡ˆ­ V?g‡rÿ«=¹¨üÿi^½) 6ì|ß….æ'qXž2?ñGj›†?pÙ?…a|'rÞõÙ¿¥w;ŽWé@É$m§'SHÅvóóP[p⹉2…ð|ãûÛj_‡àÇá+a³‘Zú¥Ëc'ÝeûÕåVÚ?Ž<3Ûé çÚ;n§IáÿøÊâ5ÖŸì¶Q·Ýû¿ ¯VÒt«}N†ÊÙwßU-ùÿA“äþM,ô¨·v­‚3»µ7,N=i]ö½JùE!*÷Mei'uÕómÿ–Ÿzµ~ðÝßµ+p ô£jš@çu'˜¹ÛÚ¼¦âC'Æxîª(þUëÈ!O4Àûwnþv! BáBç­‡jËÕÙ„ÖJ;ÍZßÃÍ4}Üw¥äLÜwcn{Ò—=úV^¾çûp[Óh[ÐÆØç`ý*@À¶ß‡.:ú Lɓ튓<ôâ°ü\Cx7VÏüû?ÝúW;ð?ð‰·ß·òÝ»N9'¡£y ž¢ùÈíŠja‰ù¿ xa¿hüëNkú”]‹©ý+eÑÝê9 ‚‘Ú¦ûÊ3ǵ?=j-ÛO½ekê¡lܯå3ùÖ¸qÒ –8ä‰â‘UÕ¸*yá5_…-ÕÙžÒil‹rV<Î{g¥.•ð«G²ŸÎ»’[Ò¼…“…ÈõÅwh‹„M¡@ÆéþqY>/@ÞÔóû†çéÍs? î|¿\’3åO!ǯÕq~ϨM¨Ù½Â؉RIbK§sm' =yæ»My§m*Cj¿¼mªNÝØRpN;àVƒ-î-®/ÒXØ®ÿšB `Ì8Ç`f»Oð¥PPóß­<¶:QÆ›ï}jEœÿÍFÕzBå\Òl*ëóW ñ^P¾TÝó3ÕÏ ê_eðÝ¢-”ì»>õl¾´Ù_ø—ÜÓ†²Kcì?ïPúÁn~ÅsíòR ^R0¶W?÷ÅVÔuwk Ю¶õ§ZjrEa5ËZ‘õ—Vÿ;¾”á®7Þ6;½6ÐÚБ¾k —ýŠp×K7üx]íÿršu¡Œý†çþùÿëÕ #W‹†k[†f“qÚŸv´S['°Üß4æÖˆÿ˜}Û÷)­¯ÿ—+¬ÿ¹Bë‹‚ßbº÷ù)#Õ×,ßa¼Çû•æ |$ø»ö“¸UûŒ¿?Jõíµm§ìw?÷Í7ûn%fÝgsÿ~éßÛ‘ä¢Þߺ¹ #ýçþýšµNÛk¼úùu“©êâK»LC:}çtxíÐzÖ°×â?òísÿ~Í ×á›{ÿlÍ?ûr7}žãŸúfi¿ÛvÀäÃsÏý34¿Ûvè€ùw÷ìÖv««[ϧKÇ6O'|gÔUèu»³ Û6à£þYŸJzk–¥xŠl÷ýÙ¡µË\à­Æ?뙤:ý¦áˆî0?陦¯ˆmàEt1ŽZŠËñ6±o7…µ(–9·=³˜ÈÛ\ÿ½^ o ˬÌDçîFHä í_[¶Ú?uqÿ~›½$zÕ¸W £žŸº4fßgü{ÝsÿLÏ®(Ô`ŒYÞgþ¹špÕÔÉetAèÞ_¹¬»mE“^¼Y\9••Û‚˜ëHj“·)¦ÜßC§çô¥MFíþc¦Hl¸ÿ>´h_œcMoûìfšu Lä={ûßþµkÕ?Ðâ¹sþJËÖåÔÞÖ#qAtoÝäóëšÕ?Û$ñä:šnÍ\ñçÀpõâ•­u9ü}F:àìéíý(M?RÃÔ3Û!íŠFÓ/IçP—œ’Bß>•KZÒ.B¾Ý;ÿ£¹Ú[ƒ…=«™ø<ìÚF¡í0Ïâ¸þ”x‡K³°Ô. ¬¶ñÎ0ÉÙ—;ˆÈþUÖ¬RÁáÙÛUî”!v6>Üd.¥cèñµˆb6º5Õ¼WQûÝH îëï]«F°Kgi›x^´¦$Ú3ﺜüÐT™â¢ÎÂÔäÁ^Û©Ùù~Za2×›ü[‘³ìãþôµÛhKåxzÉvË*Ñ܃u?å+µMG¾#&Ýé¹~òÑòíùv|µOV¬‰fûÕq¤1ªüÀ- "ü”âè«Lû¬R°]»iWkµYzƒÄž³3V¦ÞjqQéM!wd¯ãJmû´ÔW“ix“ã5Æåûªyü+ÕÔ Í÷iDk·¢æ"žŠ´ª ÅpiW _›µcj‘+^X®ÎL½}kˆÓo¸§á~ïËL`Š=OzTT`Êi ÇÐ*ŒñYÚôHúDíôçÓ¯À‰ötãø(T^Sn1Í?ËL ަˆâ ’½iárkÅ êcof“¯Ò¹?„8 ÜçµÑü¶Šô=‘€ÜqÖlåÚ8ãå ªíöÛš12>¾ôä*T`V=®Š/~^LHGõ­Œ¨}…3ÎŒ9±À4‚XÊÞ/_QM76¨gà@S÷« a´ƒ‚r=«/ÄL?±äï‡\þ ïZ±¶bFö®('fHZRÀ2¼Ð‡q%¾”ŠÄJƒQS5…ÌjW&˜¯2øBî§V‹?t£üz»=__0¥º¼ÑÊ— n.Øü…2×XšÿNÔ¡¼…VkeeqnùmÈÚzæ±´KY´m–òV•/#-K‡f@0prqéÈ®ç•`£ 8Éý)fV=:㊋ cÞ¥$ã‘øÑóm¥É?.*#¹>mœÓ€,«·å£-^]ñMÌÚŽ—më*üµèº|-™n¤ãð« »us¾6ñL~ÑÙÐo½—å†5®áMÅî­®Þ\^\¼Œs+;z½išGýÚ§¬¾Øc_ö–´U~D ÷vÕ-Fî +Ožö_™!qZò 5ñ?Ä«ùæŠùìì#m«÷‚þ¨õø›ÀÁu}Yæ1ž¿Ö½_šÈ×ô/ˆÛ#.×ü+fFýËÚ¡¢s§³ìkCæÛºÈæ‘c\R‘ÔS\+¯&ðØ2|aÔû»«ÖH,GËÒnv‘üß/ËOiÓúŠÇÔÉ]ON#î—?ʵþ\Ô3GoÏ3ªGåœôP9¯4ñ¯ÄÛÒå³Ðæiîd]†uȃןZÕøYquwá#-ÄÒHæR7;é]ÀV+ŠÏ×›n7áüëF<˜ÝƒîcÔÐÙÃmü)â?Z}cx áO>Ìãô5È|çÃWyÿŸ“ÿ ŠôC’t¦ª» pCÐô§rqíÚn9?¥bDþ©‡P`R?Zòe€ÛÔZá¼aà}GÄšº]ÙêŸeU„!O›¨$ö>õ„>jmÄž!nÙoñ®G_ðÌÚwˆíôk=RKëÙ £#a'Ö½çJ±“NÒ-,¥1ácfõÅCâÝ£\úž=Žjõ³ù–а9ùüÇÖ¬• Ò2®W=iT›EC,{‘ǪkÊþ‰õ‹`zŽ~oF"»›Ý^ýÆ£enöŠ G fô>ÕzÛM´°±’(RÊyrF2Ië\Vƒ5¾§mÛ£·Œ’òO*ð ò£· ŠôæŽe Œ¬¤d0äÆž®þ"ižk/ÒžŽå9Jr¶ê1ÿ}Rž1Ú½÷¨ÆÒ y/Ž÷ÜøëK€ ÛZ½V%#ÖWˆµÄðþ‘-ì̘Uù÷«‚ðÞ‘sâ.¼O¯&âˆßfþêQð™IÕui»m¯Xä+#Y,Dã1kSæÿ€ãЧ«i°êÚl–7[Ú)æÛÖ°¢GÃývÇŽÔ7ðüÅyïŒþ G☢Ñô˜_l¬ªÒÉòצxCHmÃ6–;·6ß1™}ënáŠÚÈßìµSÑrºoüÆ´À;zÒÀSw[ ÷im´¬X'Ò¼£Á®_➪þÍ^³–õ`öni ¦wnÝK6x™©Ú®ï ×äµVòÒ;Ûi-æUxä\8ö¯;ñǃt#ÂwWvšzÅ:/¬xÉ÷5¥ð‰ðJIßúWq¹¾÷ZÍט®“0>ßδ"|˜þèÎ*FÜËÞ›óç͉ãvê8¶{æ³õåfðþ¢=`äkˆø9»ûøÓÇþÊ+Ò $®WéK¹ˆã𣞻©rryü)-»ô¬2|c×¶Í[ˆ×§Jæ9¢±hü ë|g©^éÑÂÖw±@ÑÿËWÿpã©áéŒú, 2Oã,.p_’zâ±ãçQ¦‰ˆä—Ë[£òË“Œg¯ZëRÝ6GU ¡xJx›ù~¢!R â”1Gçî·zyû4„ gi?Š•Xç?ÃIµ³Ã}kÉ5–kÏŠ¶éü+^®ìäO½^âÝSS»ñ€k» «>Þ_݈Û_·{ñ2ühïk‡ç…6lWù¶úV?ß]iÒÉ ¾•%ÛÜJ¹tݵ3^ä 4jÄmcÛû¹—¨#5å¬Ãæî5²pËŽÕ‡¯xžÇÃvë.¡¿lµB¥Xìî Í IŸ2‰?¸‰>Ò¬ôFÔm-ÒÞh¾`ËòÖ÷ÃMBâÿÂ1}§¬(oök¬½aŒì;+~µSJÏöTÞeÝWÇÉÞù¨9cuˆuÝÛ­?!NOݦä•lÿv¼§ÀCÄMfO»Ë:õ›ïSüé»q¹•¹¤\|Ù=iЦïöºV=ì…5½?æþùÇá[§‘ÜÒ.6’ qߤÀ×Ä{:§ð˜ŸøCåàÎkºËP>îÞk7Ä'L½º:¹7ÙboöqVUÁëÔR.1èhÛ±‹P02ÙëYúæ°ïÿë‹#\/Á×?غµÀ?øè¯I2c9=x¥í÷¨ßòõÆ*8ÙË`ðzæž sžµ‹1ÅÐ7­±ý o /gk|ÞÕãÿoä¿ñáøº‚àtÜÇ ù õ.Æ-3I·²ƒîAAø ´§ üꦩ—Óîw¿•G£•:M qåÇÿ®´3ŠFfO&•WåõÍFäf— CqÏjò]M·ÆKÄé½åÏåšì|fñ­´T³ îPgFc’3òàf«ø6üÜ#ÚG"„6äØãæÜÁcïÒ³ÞGŽð¶ßeŽøbлy¡‹cpü@¯BdÞUàtÃ%»œ‘ùÓ„õr?<7'ˆt&Šßæ¸æJàtoëž´]6ûDše‹åVæ£ÔõüGš;84÷²°Ýó–B«õ$׬xwIƒCÒmì"ÿ–+´·÷š­êl›#–ÛòѦmDtÛWC PÝþÕ! »šV8FÇjŠi fô^µåß Íñ~¹;7ñ7?z¦TÇîŠváž(VŠ@ª:¶Þ¤`6çmdÞm~ÅvôCZÀ§ø‰æ”aWïWñ"7‚¯(ÙߌROZ‡ádRAà¸xÚ7óXáךìð>ðæ³|BGöD§¸Çó£ÿvž1‘úУ ß…<Fi8+ÇzÎÖ@þľ]ßòűùWðhçKÔGý6¨¯L§‚W=iÛU~”¸_­ Ø(B…2±îš8üKfǼ-üë`˜gzJn~î+Ç­tmOQø²úÕ„ÉiìÛÝH\(Âàû⽃v\dô¥ O=ªµñÍ´àôòÈüÁªz/£Zî œgØý+T{5#9Ý÷[¥*°éßÒ¸äqMÝÉúW‘å­¾7ó îTÍw¾)a¤ímZ78“ÉóNJ‘ŒV_…ýÍÕÕÙÔZ[q16â16@ùºg¯GPMVóÄ7RÙo&@žhŠ5*x8óÀ®ÒÆÞâÚÅcº¼’âEäÈÊúqVv–ÇÏïR…9 ·5G_F©IÀcŠb†#ï|´»ÇÝ ᦲŸ-ƒ6׃[øŸOðÿÄ ëëÔ‘•[¢W^ÿt#*Y]2ŠEøÓ£¨ÿ ªzühÒþ]'¦ŸŒú+_°Ým÷JüfÑ1Ÿ²]nªñwF:Œs5µÐØ«Çã6€~Íuÿ|SÆ?CEuM”Æø»á‡mÍo?ü X¾/øl&Õ†éWþ¹Tíñ‡Ã`ãmÎOûKPø±á鬤Š4¹¿Ø«ÿ<5 ¤Q“s€»~åNß¼+ýéÛþÙSâÿ†waZçõÊž>.øT®ZI·zyT¿ð·|*>ôÓߣAø±áI!açLIè¾Q渿x¿FÑ5mRîþg.÷Cev§âï…öîYåÝÿ\8|Zð±Ûûù¿ïѤo‹>Vn&Ïýr4§âß…ÇÚeÿ¿F”|Wð£¦æ]¿õÌÖuÇÄï 6³m:Ï/•œ¿”kQ¾*øS+›¹ïɦÂ×ð™l}±‡ý±4£â§„ä^oŸïBiáixGf ão$ÿ…4|Tð¨9ûcÿß–ªº¿Ä¯ ÞXKW¬Îp@ò۱ϥ]⟄ÄJ ë·þx·øSÿáixKwü¶ë‹…4üRð–3ööëŸõ-þïøZ^Ùòß7ýùoð£þŸ„³ÿÍŸúâßáTï¾&xVâÆâ¿bÎŒòÏSøW!ðÛÅÚ7‡íuµ+)¥u)…' dv®á~(øT`}¹¿ïË…/ü-/ ?ÓdÀÿ¦-þ­ñS€`^¾ë“S?ájxMKw/ýùjiø«áUÿ–óÿ®&²î¾%xn]rÎî9® Q#ýÑã= h/Å¿ Ù’ã¯O+ÿ¯Lo‹ž†º$ÿÓ/zFø·áÆSµn‹úgÿרÛã‚>ìGþ?Ƙ>1èiò‹[²?ÝãQ?Æ-)âe' ŽÃúÕ-7âÅ…„vçO™rKnrIþµ`|g¶'&SÿøÈ€M^¿ßÿëRŒ ÙCr=Üÿ…4üZÔ[…Ð;XÿJoü-}uÛ áÐ{†®~Ë\¹Õ~%Øj¶¿e•ä@cÚGlµë^,Ýý‹“´ÆŽ­2‡ØY;€MPðUÌCz-¾KQ 1Beó>9èN¬Ï[Å£wuçX,˜RK†W$/ ´v®ÒÎC6nãî¼KÁÏq‘ך²€¶}±N<}h;àT›—~Ïüvþôò9ßø 8ãoÍUïeò¬%qü+^Aà=2Ë[ñ^§5íœs¦öûÿ5zbø_BC‘¥Zÿµò-@ÿÃ^ƒÿ ïÃ¥EÆ…øwám»²mýé‹ðßÃóý›ÚTøyápà¶“zõÿÃÏ 7ü _~Ƴfð†¿¶àt¨¼¿,’9ù¿ZÓ?<-*,þ?ãM?<+»þA1~¿ãJ¿ ü(ü‚cÿ¾øÒ?Ão ÈÒcÿ¾øÔð­|*˸i‹ÿ}ñ¬ýoáï†ít×–ßLU~;sõ«©ð×ÂÒįý˜¿tôúÓÿáZx_oüƒïñ§/Ão üßñ+O½¼ßãJ~øSËùt´oûhßãMo†ž<ÿe¨éÿ-üj ¿‡>ŠÂYLPá RŽ8ú×ðÏÃF»¨Ú•¢ÌÑ:…;ˆÚ9ô®ù>xUN²Õ¿àGüiá[øT?ü‚£ÿ¾›üh?<-»?ÙQøÿjü+¯ g#IžûøÐ~x\²¡õ<Ÿñ¬ËïxvgN‚=2Ž]Ûן›Š×ðÈ]"Üç¨+CxÃd1þɵÿÏ>ÜÿJž ðäQíþʵ>Ÿ»§§ƒü8 ¤ZóÏú±Ú¤Ð¶4›Bý2ZxðÞŠˆq¦Z`gº^üúV‡t-ô¶ßanH•†Z1ëëŠØFœOƒ¿ü²^ôá¦XE¤ zðƒü*T³µÛż@t?(§ýž¼"AöE8Á~âãé^GãµKo‰ZTÊÝ|£ù7øW{âËxçÐ$2J‘ˆÙ< ²äp@ëXþÖáþÓ’ÂSiLg¶hÆA#’iþ+¸1_µ›f§ûZãæ­BJŠåüoâ9ü-¢5äfm¨­\>7øs Ï‘º7ù—÷5«¡ø£Ç7ºÄÞé^M«7ÎþNß–½:'óIÿf³5¶?fUo»¹kU¿Õ ´ÏŸïš“æÛ÷©zôéFÆÛ÷¸ªš©Ù£Ýa¾a¯<ø?6ú”?}Ö½A¾ï­p¾5øƒ†¥ŽÂʵê.åOîç§Jæá,øo^ÜiIö_¼WÊû¢ºïxÞ@ðº,ñ|Ïf®½±÷¾†±æV“Ägþyý+d^»qëAÊÛ¨þ-ËÍ.ÃH„½Y^!cýŽìOñçZ±ªO÷hÁ#'×¥(Ë/ÞúÒ9 ü§šq'¦j½èf±™Wû„ʼËàÞAÖùÓš½Iƒnçm"‡ÏÞÍ)Ü3ÜúR’Ü*\>në VVþ×Ò›+þ±‡¶1ùVÜ{°=;S²Ww4/qœž´‡œŽ§µ FaÉÅ)©ç“X¾OÜ^y?:ÙeؽZ‚2€öíK³ dãÚ”Œ¯¤o”³du¯#ø¦Ÿeñ6‘?mƒŸ£gúצÞ,¥—’&@Œh¥‰Ç#×5›¦jš}þ bŽÒx®Ö,æXŠe3Ð} C©Yßjz¬–ñMyeGŸ20¥Ÿ¯"¶´Ëtí>H·2Æ€dõ8õ«áz/ZO—ÒœpAn'{ -6ü¦wÝ–þí<ÔS;€¿ÞèµÏøöá­¼'wþãn¬¿„ñ²xh»ÿ}êî’ÿîÓ×+¿š…!Ñ*LüÔ‹÷>jÊÓ¤T»½bÿÅZ #©ÃŠòÿ‹Ú€2i¶ ûUŸtŸîÕè>)xgOµŠÍ]Ùc‹nåOjê4/i \é×Î?‡ø–¶¹ òö«\­²°ùšUùkn3¾8ü¿55Ÿ˜ÑþM+d§÷k3ij@¾ã'Én áþ ºMûnù|êô¢å¾ïÞ¯.Ò<#©IñmoSƒ÷™ã;ç±ÅzSlhÌÙµ—ô¯ð>É>,^5†Ï²æO»ÓíŠrqü5”A>%P?†ßúÖ«.àêLnãóÅrÃSˆÆã£5‰âf'G}­·æüëN D›¿»N¬ÛºS"¶ß›«?+­5†Fsô¨%ÃYKÜ5æ? ë@mu$/ã^­ßúÐr‰¡ŽWëFd‘—å óV.²ûu )±ÏœF{òã[¡ŽÁŽ1Þš’g‚:cðB;{Ó°FçA/Þ¦ó–ºV6‡„¹ÔÒá±øþ•³žvmëša-ååK¸†ã¯nÞØ^‡"˜ã#¿åÿSK“¸.>¢»é.%ÿ„lÍnëç5¾S-›ok›ð¿Û‰%ó$žxÕ2Ü`à¤m=}sZ^%Ö¯´ÆaXcyæS· Œãù­?jªh±\8Q&J±Líl67.{×9+‘Á¤Ry'¡éLY7&ÿषˆFr"¦ ÿz‘”¿Ëü5pífl|Ã¥qŸ¦h|(ëýê¿ðî+Áö»º7Í]*åJ—½—Ÿöh õ¦3|YÚLk!¸ï=jíSÍq*økâ­ZÞêæîD…~V?ˆUåð'†VËì£N‡güôþ*ò†´o|F‚ ¿s#/ËþÉj÷ÄpÈ»Y:·Ïuf­÷¼Õâ¶#ÁAéH0:S¸q¨ÉñO;p?ÙíXÞ+u‹Ã—òÓ6þUÊ|!ãÃw,«»tÜ·á^‰„SƒXÚÏÚ5æ¡0Š5ùU?ŽCèy^¡âü@¸kÚ=½ƒü²:ÿÿi«Ð<à«oÙHCy·Ò¯ïfþ‚ºß7Þù{ÖrÊ?á%›åý?ÖÂÿw­ñÖ‘ .}M4rÛwVOˆ×þ$ìßÂqøÖ¢(hW=vŠcgÞà­*D«÷y¥N>n”¤Œc5ä}žUí°ÿ*ò៎ ýq[†Þ¿¡5êùÈù7 OZB@Îæ 0 ÙéÚ›…Û´wïXÚòm›M#.W?m”²Å/–¬9§|¸Ï­ŠfW>Æ‚}:XºQ٪껛¬ ÄžÕ²H8à '”ÎG¸¤R£‘Á4î W™|bEm.ÂOîÊGæøWUkco­ø6Î+¤R¯j„žÐü+–𬖯â[kxmí-ç´–Y#rÆàãd~5ÔxÇ틦 ,ÞÙJfÀm¸þxÏÖŸáF‹û<”œ(bœÊÇ=ðAÆ+yd;~çJ]ç2P-½©w/ÞÜ)¿/ɇ¥,»¾õFX™¿Éèµç®#þÌ´´þû×aá8>Ïá›D .R· RŸ.)¤ }î”G±I)QäÖf†êle÷v­êû•~õxõçŠuŸ xáÆ©,í§Hÿ*·ÝÛ]¥ÏÄ Ágç‹ôs·w–¹Ý^á¸nüqñëRÛyv6í÷¿Ù+ÛP€»Wgµfê6«f¹Ýº¶ qL}´ªÊ#*²í-Å"…U_š°|lÊž¿b܈Î+á"xA›ûÓ5wS˼2Hßuqü+ç©õm;ž3’ïÄÿgÓ¡fòâ\ô Åz–ãi¶©kg{'@ª^+cKñŽƒ­_=>ù&›nâOjß(ŸÝZÅþFysÚÓ5´»)Øù{{PT¦£`«†þ.Ôýª£ïVV¿åÿe¶GñçZqí¨ö¥Tð@¥ /8Í QTqFàxÛM•‘'Óù òo„£Y×þÿ¾zâ¨ÉÇJ1æ·aO!XüÝ$gxÉüƒÐ®dx€[^¢åqZØ€:SŽ?„r9¤F?ÝãŬùˆ¦Ï_.£6ºée?Ú)ÿ~é~Í­±æù=?Õ~›¬Ã¬%‹5ÅÔOa«÷I5§–»å5¶íÀýß4i¯R·Ðsü>_ãJ-u⪿n‹Ž¿»§%¶½ŸøþƒéåÓͶ¸æ¾½O—QK¼coô›còô1ö¯2øoûx›YKY¢ŠLû—#ïúu¯OXµÀÇmͶÞÃm7É×|À>Õnÿ¦}ÏþËJ!×·Çͺûùtão®üÌ.m÷ŸúgQ5íÌ Ý¾?ëRÕ×V‡Nu,%7ŽpCnÈÅ^H¼@ææßÛ÷g§Lý{Ó„Zþì››p;.œ Öùcun}?wCC®còpDu–úñO’â Ýq·\JzÛkåFoac>_>Ÿýz¡:šø£]ÇçIKmà(=j}—[Ù‘{ÐÇLk=m·í(Àì|±éþ½Göo<ê+´ÿÓ?|Ӿì2mþÒ\öù(]7UÚÁµVÁÎÁÇoåú×;ã­:÷þë¹%¾ipÛ6ŽyoádÍ/ƒ"F<¤Ž¿­cêémg­I_ZfÖC~"OãN$ì®⤾WƒgUþ&ZÐø|¡|bWø—uu š¤­Go)psOAƒŠ\c Ö-žˆï±÷V1[yÏÒŽ{SYw ~´†åííHï—µdø”ì–ûß4ˆçZ°“ä¡Ûü4쟛·½.^¦€Sô¤%·qÒ˜Ùh ÛÑyäÿ €Ok«þÿèõë€pÝÍ ùš².|U [ÊÐϪZ,ƒ¨óE_´¼¶¿€ImsÈ{£Ö¥VÎæíùV_ˆÂcJ[ e8ï ÖR­POÍKÔc¾Ü~4ÄSÃÝj|qŒÓ'ƒÀ¬)/‡ý¨?ÿëVöïn•„·†³¯õý+K.úöÞ&êäüª;/èúœéž¡m#u\f´²7är_­axÙ7ø7RÂóåŸB s ¥y|#y;„‰3ö%j„·7óÞMsU)U6-3åó~å?åݼÐwm;©ûÉÒ“uõë7ÞÝ[O’˜F[;? TP´…!sÖ•¼°0W5ç_e áØŠš» Â#𾞘ãÊ^+Sb»|Ôõ@µFoæžÑivìÏËÖ±´Äk:ƒ»Ï½nmQÎ*5HÿkûÔáÎwPÊ1÷~´ÔeåOJÉñ`é{þZ'ó­Q˜ÕÊvö§l!¹ô£˜×ûÔ0 Ö•£ ÙÎ*6 ä7 ¯#øt„|HÖÀû£Ì'þû¯a(¥v×#­x/OÖuø5[‡˜Om´ òàŽ+¤šH-c/,‹qŒ’íŠñ/k©ãOÙišGïã‹(®¿ÄÌFOÐb½²Æßì¶6öû¹HÂÀUO"ÿaÜUü*ݪæÎ[î uî*ÀL À°ùzR†ÞÚÌì7P@ÏÞÀ ýæÍajk³ÄcŽåöþ•¹åüùÝǪ:¾›¯¤ÝØK¸$ñ”'ÓŽ x–…âkχz½î›p‘Ý@Î7ÜcwfßÒ­x·âIñ˜úm«ÛÅ&<Æ‘ù v¯CøyáåÑ<5óVY.œÌœ¯<`~Òêq,ºUÒzÄÃô5æ¿X+êñ|Ãþ…[.¶±:‡™>¡äMå-E˜—¦ˆ­tÚsË{áXKŽY-q»ÎÞ¼t®GI¹5]6Á5î•\RØ‘S•ÏFPkÑ )äü)ÞZÿv€ª‚€¸;ñõ¨ÄgÌ9’œê6U}B_/Ný«Ë>Dóø‹Wºÿn½^æm–²H?†¼ÿÂ><¸Ö¼Gs¦]Ao£ü»+ÐÊ!/¾¼SŠ >,Bšw—÷×vÊ÷vù"OEûÕ•¨ºý¾ÅøŸïVÃ6Ó‚>ZbûÝi›¿{³ûµ"©fb~ëT¤|´ÍÛ+/Ee’K×|ß½Zˆw'ÍLaóS[î·÷Šœ>zVRÅ»^iñˆíÒ¬cþôõÜèˆbðõ€ß·÷KüªülYYvÔ‹•5†9ûØ¥ˆî,Ôð8¬M-·k:“îùw.+JRY7ˆ©ÎÝÛju]«òüÆ1ÊQ%¿*Ëñ3ˆôÐOBè?Z¿•e^ÝÍYH ¥1ÉÛ†ã4å!UBüÕ&¦°¯ð ø£­gþšü{Þ½x>>÷OZÃñˆl¼7¦5ýñÏðÇýçoA^RŠþ(^ÊVE¶Ó¹cÛøzG…<§øVäF&ºõ—Õ½‡ ® ztöª:áÆ…v?Ø5bÅ€Ó­Hç÷KüªFbçø…J Uèy§ Û¥@à÷¥ cv9®ZÂjš[¿ëˆüø­Ñ¹›¶ñ\ïŽu)´ _Ý@Ø›`@êdã?­pŸ ¼3§jV³ê÷ñ-ÌþaEY0@àûõ®ãÄѵ‹ #0Å0O’HÀR¤té\?Â}^îÛ]½Ð.&Ý+2#ƒjõÉ€xd^̇ùW’ü(CâZß¡Æ&ÅtºÎ‰©5ÿÙìõ2'-3YHÛ‚y øÎ3]>•HгÉm„Úb-¸®8ê+ˆ²¹êÖZuÄŒ- ¹L†Ñ’BÙ )cÇ~½ëÒNÏç@ sëÚÒ,€‘ŽÔâFϘËòV_ˆ$1øvûàjàþ+,:ŒÆ?¼ÿz½%4o•«É¼Ià=^Ç\m_ÿ3ïÞÑ$ŸÅTçÔ>'jP}‘`’-ß+2WSà_6€ÿÚ:œŸhÔ[æ ÷¶f½ Y¤äµ—3™5«tîÛ¹«Tþ:V$ŸîÓH;¾JU}Ë÷7R´¬;*38ØÛÇËYžÙöi~o¼õ±¼}ê%æ<Ž´R65‡ÿe©®ü©Zò¿ŒRoM2?úk^“¥ý‹f£ªÄ¿Ê¬G/Í·øªfm´ÝË·åëþÍ "‘ŸïSLÊ«'G•´µ碨?…k›6±ûÔÌ¡~FAjÈ¿xP]UZ‚Bĵdx‘‘ôµ_úhŸÎµ‘Ñ•v¯ËK¸Gz¦åÜ?w–pzT¡÷­#²oZò/¿õŸîŸ7ÿBëÛ^xgÅû©î|Ooo²W¶‚ÛS=XäóVtß‹/¥ØEimáÕŠ×OÊ®Âç¹1ÿÈqÿ]øW§iZÔô›kížY¸ˆ>ßîäg­?X´«µëû¦þTÍ!Õ´{F~H‰yJº ît4ö`cµ1v™7“OgŠS–^¢±u«>Ÿ&s‰Æ?ÖÙa»ßúVWˆ4èµ óOs2 èzƒù×økÄWÿµ[;V²‘­òBõ ÓrúäWQ«|`°û ®Ÿi3Ü7Ìà ÕO…>¹[û­vò9#2±ey$œ“Íz×Ê#?7jò/‡Œ ø«B½H?'ëO0”`1šx+´Ý3ŠóMNòõîä¸ÿ‰¥ÝµÈ;ƨYXpçƒ^‹irnm’W‰á,9ŽO¼>¸©‚ cÆx£k<¹t¥ýÕ Á»MY7!þ3Ÿ–±|k7•á Ù÷+…ø[¨Ã¦h×X.{îÜ‘×nþ'±Þˆð\ߺpñM™ˆî?ïÛRÿÂS§ïû—÷í©‹,`‰Ë×6£þ­;8ýçû?»jÍOXɯ†ó6ªrµGŠô’ÿ~O›ýŠXüW¥Éò“þø ø·JÝÏõÙKÿ V”îq3ü¿ìRÉâM3|ã¿ýƦMâ%£Ø³gýPiZÞ›ºØÛùù*ïü$zPù>ÓÿŽPÞ#Òñÿ;j#â}0??{îü•4^$Ó$¸þ_½O Ò¤-ô-yÅMRÎûPÒã‚T‘V]Í^‘e®iXÛ'ÚÓ%«+­éŽßñù³µR6·¦…ÏÛa¦Ç­éŒœ]B¿ð:S¬XmÇÛ!cýÝâ„Õtá7p¯¯ÏXú>£f··¦YÑwÉÆç1[ÚZ{|¢òûìS–þË;¾Õýö([ëfQuîÿ0£íÖ,¿ñóûB¶Zí)÷…eøŠêÓË™ñZÓ‚ê@¦x·²Â¦7VäßÅ÷… ž üÓÅÿ} °ù¥Lg?zš'„¾b¨ûßxSÌ‘í?¼@{t¯$ð[ ø·ª”eØ|Þ^¹æG¹·H¹ôÜ)’Gm)ÞñÄíþÖ FlôæÛû˜8éòŠgö~œ½màom¢¦UŠ4XÓhŒc ½0* L¡Ó.“±‰³ÓÓéšD´õòÆÉ«ÈSÃëJHe¸ç4 *®>\PÇ ¿v‘Xd*þu‹â ¾]¬–åúõ±¿÷d òµ”>˜?Z§¥XjQì¼´†~27®Ÿ5Bßµ›ÌKµØìÏó­ÕÚˆ mþT¡•Ôãhõ¯ ðž ø·}8Üò‚;õÍ{^0Æ”°5æzÍýž½y´Sæi/æ/H\ñŽs^‹ ±Î‘”އ ϧ'™Œg§ÒÛtß~› ?z‘#þ3ML'îRýk–ø™.Ï]'÷éŸ -„~ „0ûÕÕ*(œá7-=b†CÌtÇŠ?9ËO÷©L0üûÒ:a‚&ÞÛ#ܿҲí#üC8[mO»ZŸe‡úŠXÀ©-*$±‡~vGÿ|SÆŸm»&çøiÿc·oùcýñUï,­–ÖWòSîU=Ò'Òâf†6/ýä­&ÓívÿDz5BÖ6›þkx×þH4Û?;&Ùoû£M²cÿmÿr“û6ÇÍÏÙ!ë×b×”üLµ·_ipE .æþ¯R‹I°û ÚCÂàö§G£éãæû,-»ýŠ{èÚtŠTZÃÿ|T  éŠUZÖo’˜4+lýž_÷joì-/þ|¡oødi:>Ÿ4×èÖ¨û&Ú¿îÖ˜ðö›÷¾Ç H¾ÒÿçÍ(ÒÐî[D¦·‡4¦~ÌžôÓáí,/üz"Ƴ5ÍN¶³Y!¶ÚÞ`_—= æ¯i’cl›‚òwSá­3 ÆÛ§mæ”xwN/î?ñãMÿ„kNvlÀØé÷øÐ¾ÓMÍ©ûÆ‘¼3¦Éÿ,›y†,m$ø«fêËù€ã¦1^¡'…tö“~Ùïá¥ÿ„^À†½ÿ¿†—þˤ¯›ßóÐÓ[ÖlkÏ‘Èýå"øjÅQŽë“ŸúhÏN* [ý’SæLp„ó!úÕ]3DŠïK‚s,ÁÝO !9íùš¾<7lÊÃθçþšžŸ—‡Ãp±\Ü\ç'þZ¯ó©á‹%ÕØ#¦d ø~«þ“uÛÌíÓ—ÏøFâÞ§í—[»þóß?βõ­ZY‰ÝÃåÆUäÏÅh Ç,Ý]/<ÎØÇò¡<9üþ]g’s!ïJÞBìéwyíûÎÿþºAáÈÉ'í—Cùè}1ü¨s½»*{=xþT±øiÝÝgœŸ3¯ç^m¥Â4ïŒ& ÌGœÃqç9\ÿZöcÆqÁÇ4ŽNÂ:tæ¸ÍnO Ũ\JÑ|ðCHþC°É bº-.ÆÊÊÁ› Å ŒÆsÓƒíZLcj­Ã?=XÞ?ûz®1LtóµyçÅ™<5±?‰öWAà8¿„íG÷« $ºäy•")Å2T\¿~£XÜ&ýôôO“edéÐçX¼›Ý­Œ0JcKólJ77S.Úi ¨¿ÄsYÚ¤¡,.?¹NÑ•SJН å®Åÿ,¼53XÁ ——ýãþú×&ßü[lŸj¸Ðã[Oúæßwýêô/øÎÏÅv®ñ*tûÑt§8Û^=ñsøûIƒøU–½wnQ~ºµÏäÇæHè±Æ»˜×˜kÒ;÷µÑ´÷¼+ò³·ñcÐ NøÄVæ85]5í•›nõþνBÎê+Ë8®!•w+U”݆¬Ÿ2ûþ»µmœ€Æ˜]ÔîJüÔ6~oJfOE_˜VŠUΟÜçÎEíëZÈ]UW×>{ 4–€Ûýêä4ßÙê>,›C·Ù—8Ÿ³bºâ\»þMH¬JîÛÍxŒÚ»Iý+ر·Ò“qÙüéû€âšNOʽ{Ó~'ì’ÿ¸OéY¾fm «Ž¹?k` Âõõ'û¿&ñ€;õ¤pÀt¦°;¸çéXÞ%Üty\ö#ô#Þ¶-˜=´lº3OqÈäfœX†ÆßÊ™æÚÆÎü‘ÇaJï|½+ǯË[üh¶*1¾dã꘯a-ÎJsÒ“qük†ñ6¡(Ôî-fÔÆZ5xƒ Œƒ¸zã¦5Ôhò3è¶èþWî—)éÀõ­%Ü2ÛzÔ1«ìß?T©ñúz ÅF›ëÌ~0?ú%Œßž»¿  ðíˆõ޵PÊýÚ‘zUi©ÊŠSð:U÷{ñêÊÑ—}Íãÿ·[@œ{Óïoš™´‰~PiÈ>}ô¤á‹v¬ý^Bš\¿ÝÙV,]:-¼ü”]¿“e+'ÞTfÛ^Aà?ͪxÂ÷VÖlßlOº/5?ˆýk×îà†æÑ¢•7/ÝÛ^/àG[ŠVöoû­Í^à¹v¼Æç|OÓ—û¬µëì¡Âüßv¹Oˆ1Þ?…§ƒM‰ä¸“åý×ÞÛÞ³~xY4_%Åå®Ûé›çóæÛéÍQøµ¦iãà vbE¸ «¯¹­/„âwðd-3n]ÅWw¥w,ͱ¶¥cxt„K½ß{ÏjÝÏÍQ#.æVûÕ(ÓHP>õ | ƱüE" =ç¢qøÖŸœËçüjG9çò¯)ñn¡ãëBúÂÂÊU°Ý±$…fO­r¿ âžßâPܦ$ûÕ¹9Å}ÜŽ™¡A=:WŽhMå|j½ÄYÿ•{)íƒZ¿{ŠMÛ†Úc9æù})c?)%¹¨çeh%x*EexiÊè‘c± ~f·6üß1Sånô?PÀóÓŠpRº÷¤ÎÔϽex?âKwóz§5rÅÊØ[°åVÕÁÅ!`9÷¤áFgÔõ¤èãjÊ1h•ã¾.?eø³§É¹¹xŽO×쀂­Üô5Òl|¹èkƒñÍìëyKyBŸ5¤x9õVÚk¯ÑN‰jDRÅû°<¹›çZÑVf^˜>žÔ›ÒHéŒÁèÌgýòÔ¹%þhëÊ>-H_QÓ¡ÿoå¯KÑHMÔ÷aZ¶µˆþ~ “æT/´|‰OÞY2#øiþG¬Ý*ÙI+}«d¶Þ½(ΚH£ óÓ8gßœ¯ÝÛYÚÙΔé÷~uZ½h Yļ}Êœ“æª7w–vÏ5ÌÑÁ_33×’ø«âŒú³¶—á›g•¤Ü¿hþ/ø oü1ðEÆ‚²jZ—ü~Ü•º¦½r_—ÿ€×Žø‰<ߌCvï™wW³p£Ú ‘K7NkÅí®d*ø{þ>÷.ãþÍx‰á%MFøKÌ–»¹Uû»}±^õá‹‹ ­ÊM56[Úû¼V¬ßê›ýß»X¾ù¢¹oâóÞ·²vîo–˜ŠüÝiÒ(ø !]À¼:Ò€>õbxGØ!ùöþù9ük[ÉZßN@Ú8¦6¶:ô¯ ðvã Çýv›ú×¹2ƒÀZU ·æë^;£Çÿºï?;ñøW°l òzRpÛ¾Zx`ËŸJcî¹Å8 baÚ£š-ñ°ìsY^Ѹ\âWÆß­mBñQI˜Û·m§í @ëJW+Ž‚£`Höìk;_´[½½JJ—LËé6Ä.sçð«h ¢g‚)Ì>êü¸4¢2­ÇJR¡°ÃƒMe sŽH"¼oâ"˜~!ir×3ù>+Ù#bÑ+ƒŽ?*kÃæzâ³µ MÕ}ªÚ9$Q…“££jí…ªYÙ¤¼’"GÜßZGÒ«Ç´AæSßäýŠl„“å­ ëå§Jò/ˆîÓøÃJƒïþò½fØ$Z| *ÔäÉs÷OðÓ¾IñP²‡‘7ÿß42¿${j;ñÚÌvŸíUm=ºlgýæ­à|ÿ L½˜}*€>ZaŒ‘ÿ²ÖWˆU…Šòþg­×b!Ù÷R›w ŽŸ5Äϲ8“sWˆE¯ñWÄ›ìúLOÆßº‹ôþõz¾‡àíÃvþ]¤¼ÛóLÿ3=t Cœ@¯Ô?{ñ–/ö]kÙ/?ÄÕÁüBñn¥ádµk–FùÙ¾jê´Gû_Eµ½,›¥MͳûÕÎ|N[_øCnZp¾ìYù¾jËø6“7…§fÿUæ¶ÊôY”ˆ›oûY¬ œÿM[óÍm°íýÚS«Q±Yš…L SaȬŸ+5„Jü¶O›ñ­ŒoEÛMÀùWwÍRµkü$vüd¹-ÿ=¦ãó¯q@jS…z¼oMù~8Ü|ßòÑ¿ôö%VËe©[#üi›ûßZvH?{ªÇ8"¢db¬+#ä‹î<÷ãñõ­¡¸ôû´Ã÷Y|ÊS»vÕjRÄýßÊ”ç¯~â¨êÈ_I¹NÆÅ7D|è–dÏ%þ^ÕyF NmÄnÚ¼R‚å=èÃàóŠ`,OEÏoç^Eñcpñ“/ËŒuú7ÿ^½ny-afÛ½”ÌsRorxv4Ð~\Ÿñ¢?5FÓ·Ú€d¨â…VBªÙžX|å9¥V¾GÏñSÈb>W¯ñœ‚‰–1÷½v7Eø¾Tõ©“iÄŸ-mùÜ´U\r?Ú¡Þ4]ìâªjeÁÜѤm]6êâŒpÀüÔõG½ e#wJÖ}ÇøiÀ;V'ˆùvÉælÝ2Öº  »Šçüe¦^ë¾’ÂÉãIfþýye¿ÂYG²ÛRŠ$þêHËR·Ã¯çSýßßµuþð¿‰4}Biõ½CÍVMª»÷W¡Æ+Æ#?iøÎíþÝ{+séÞ¹ÿør/hÏfíµ—æI?Ú¯-³Ó¾ xEÞÁ[f—oÌ´£Â5ñô'^•à³O›ÿ@+Ø4m*ÛDÓ`Óílp¯zãˆ_økÃí·JÜG +|¿le‚ªúÑbñT˜Ü9¤ÎÕäÑçÌ+Ä™qäÿËEþu®Šv®îƒûÔ¤l¤¾Óµxÿ†ô=N‹ßMc2Û4’°—oËÍ{ sëQ€J·ÍóWZnã|›Ÿ8ÿè5ìdòHühlˆØÍ1‡î†î½MIÓo­ÃÿÄÒ:–#Ðv¬©¾Vè—ùëùÖê8W·z@Wï*î¥ ¹wÔæè8çÐR=}ÿ:­|¾nŸp:|úŠ« cû؆݅Æ{u­1ÉÝÛRó·=é¥ð2zö§$€ËŠ7|Ø-Ò¼ŸãAnt©ºrÃùW§iRùÚM¬˜ûЩý*Át3Ö”Ǩ¥<&G&‘;‰éž*$ߎ3IÆUSÍÔŠz#oÿÙªWp8¯,ñwÃÍ[Äÿö­ÄPÿv°áŒ¢8Mc?öÑ©Ÿð­¼mü§þDj|>ñúS?öÒ™ÿ7Ä/þBrÿàE"ø+â&ãþOûùDžø’Êè×ò:{ÉQÂ1ñ"‘.äD_úiS âd:]\½æS“Iø§³ä»¸ùÿé¢ÓN™ñIúûûøµ2XüSþ¸ÿ¿‹Lò¾*Áüw÷ñj m~'Ï·ÎûC´_u~Zœ?ÅC×íøí1§ø¦‡î\ãµ*^üTDû—÷íi­ª|S9†ûáiˬ|Q]ÿ¸Ÿþý«TM®üPÿŸiÿïÂÖDV>7¶ÕßWM6¶·ü´òëyüOñ1W›7ÿ¿+LÅÓæû üßôì¿%H|[ñ+þÏþË}šøL¾#æÅÿðxßâ Ÿ›LÿÉcCx÷Çûv¶“÷¿éØÕ[?xæÊßÊ]3÷{þ=Þ©¿ácøå>_ì­Ëÿ^Æ‘~&xÕæÒòY©ã⌗ŸìtÿÀw¥<[µöRß—¥_ŠÞ'O½¤'ýðõWPøâøV94ª¬­ò£üØ«¿ð·õôNtdÿ¾ #|cÖÙ²4d__¿Nã.¨¿{GOÖ¥?õ3ýŽŸ­'ü.«°ÿ6í÷ÿúÕ2ükœ}ýÿ"Ÿð®8xÉׯÍâF±ufmÞJ·¶:×d¿ƒ3çFûïÿ­@øÕl¶“/ýô?¤_Vìßò —ýß7ÿ­RV˜çJ—>»…ðºtòÌ«§OØ}áN?ôÕÛÿËßï•SLø¯¦Z Ÿ2ÂsæÌî6ãåÝZIñEY75…ÉÝü\R§Æ]yû%ß?ìñ§ÿÂæÐ¶®mnÿï‘þ4åøÇ –æÞçðQþ4­ñ‡@Ãenxÿ¦~ÿZkü^ðüÖïÛ‘•Æ|¿_Æ«èßô+ .;yþÒ]22±ñëZKñwÃ…x7ß»¤_‹^'“p£¿îÍ?þ¿†$¸Æ癩?ákx_ ùóc¿îM5~*ø`ü¾tÀ㯖z×ñÅšW‰¢²tÎÆ;ƒÆG½zׇ¿†4דlœÿÀEj©ýi ïK³=ù¤Î9ìzSHIbö¦@줣ÿ>I_ÅM,yŒ|ýqRŒ˜þ~´esÇÞ¨\ù¿Û§áqòSÐjFÁû-8a‡û5ÅÓ²£îß4±åãù»Ò°WªTüÂŒ“ÐSxù±÷¨$ÿz‘7¹éAwVÃco­+|Ã4»B¶úB_zvå"¾Gݤ]»Š•¥ÎvÓ6ðÙT¤ l•L÷§)\c FÔ%”ªm£Êƒû©MÄÊ¿»JFŠ6ëO’š°@~S?÷Å)·ˆƒû¤ÿ¾§ù÷‹þøÅ´·Ï6éÿ|Šiµ¶1´ˆmúS~ÁhÃþ=¢ÿ¾)³ìvǬXõÚ)L±áœÿ ¦LÇüxÛ·üRKÎÓ§[óÿL…3þý%‡:u¯ýúx{Gy0t»_Ýð¦Â;¢ïÿ]¦Ëþ¨…ºÿÌ2×þ™Š…<>Ýt‹_›þ™Šað‡NÑý‘k‘ÿLÅFþðîäÙ¼÷òÅ)ðW†ÙvÿdÛsþÍ4øÃ$ÿÈ&Ûé¶£“À^)Æ“Oû5ø}áœdéã¿ZCðëÃäßNÆšß¼,È¿ñ-öÆ•¾ø]¹þÌQÿ?ãQÿµð¸?ò__¼Æ“þŸ†3Ÿ°ãÇ·ãMÿ…aá†ÜM›ßÃH¿ ¼3Ž-[ß÷‡×4Ÿð«ü29ûdÿÓCþ4õøcápGú+q×÷†º›+(l¬á´„b(P"/°éR²á÷0µ4|ÍÃdÓÙK(]ÜûTA‡éÅ5  7†”IëI +{÷âj‘ÿ©£ÁŠ]«·e#/ËÃí¨™_vÌ|•KŠ•G”>Ož—çÿ¦•:œŠnÕfùºÐ2SRnR¯Šj‡n´,„#¹éRÊníLbÝWþJ¿ýÚ6Þž[åÍ1Nò¯í÷i_iŽåÿz•WhÇþÉMoº»_å§G—ùÿ*k/÷jE%ÝBŽ:`P[Š”(ÅEü-O¶¯­6còýê†3÷·/ËÚŸ0ý»SÀfäw§îõ¨¦ÎVšÜm]ÜñS9Ûó»éKŸ—vî”À Äߥ,yÂîü)[*£{Ó 0ÝóguFÎË»ÂÜTÀÿuíB}Õþí.Nü·áAÚãô¥BJüßJŽf‘yíO](<’£§­;þYÓ{I¸*àúPuÎìSoQÜÒ–€üiíÜ;Ò3²/¿jj&c»ëšt `úšnöÞÄ«R Àåx\š\þ÷=w=¨BÊì6úR0wÝü†¡r„G“þõfø–òçOðõÍÍ”›es?Á\­œÞ*¹¼ŽÏûlyÏýþOÉZRéÞ0‰ ÿlÚüÿôʤ[?D<´Ô,þÙÔWŽwÆŸh±ÿ¿tÙ®'ñ(ëáY?ïúÖ|Þ?Õ-¯a´—Ã7t¿ê×ÌZÑOk»þ ^ßŦ·Œu…øZóþþ-'ü%úª>?á¿ÿÇiçÅ÷ÈŸò,ßïÿ€Ô3xÞêÖÛ͹ðæ§I÷™‘ho¤KÿÌ•7F¿.ç©nl êª}ÒœÞ7‘U[ûTÏÜÒ?Žƒªÿ\úôñã… ¢jËÿl*¾!XÝ+¬:^£&ÖÚÃÉ©#ñí¹N“ª{£59¾!éñŸOÕý»56/ˆ:^ëEKvÕ©_â–ÛPU÷¶jµaã}úí,ÃÜC4§²ÂË“éšèò›7n1œæ€ª,F=iUT®W€iGlVV¡®iÚ{A ÷Q¬—Qï¯,¨“̭֜Še“rçéOf¯ÍéB:‘º0gḧ3¢ãuFUvõù•ºÓžEC’>†å…õÍ8€~fü©@Å7pf'?wµ) µüé ÑÍ(ïÏ=)7¿Ý¥|lëÏ­3!ŽOAÒž1·ån£kc½9qý3hë’?ýT¬¡“¦i26ïÆ;}êb¨Ù¸7"ž@'¯jFU(Aà†œ¨3»=) `œ“Í4GOŸøª!ƒÌ±ì…®wÇ“mÐ@^'j4ë öñ:‡Ù¼»d¶òÆùs];3ù9QOQ³‚*!´›ÆJ?ZÌ×G¢_• ?—òÖáÿŠzÜ¿ûõÒ©ýçÙO\‡?Ý ªùtnÉõþíyÄ7š}½þ¿sªÇ¾ÿsïï­?­³Ã}=¾<Û‰7˜’=‹uèJ7j ݱýê2s¾MµÇj€·Ä +oð£We½¾ýH>ëPWxÃ}ÚSµ+Ƨþ)k¯öНþ=\îµol.t‰­þÎÒ£Çç/Þ‘ë½DŒ((´­Í+6íûÔ´«»÷«ðK*[êR¿ÝûT›ššu=KÄÓ¼:Ë+;[Ptù™¿Ø¦Oiò&ûÛ«ÛÉ¿ŠIf? x2{ßèš­Õ³ r¿˜¿­\ÒüC$÷Í¥jöém©/MßrUÿfµõ[.ídšä72erÛ@çùþ´à³¶õ—íW$`§ê*·—2Ì.€Ç®y§2ܵ¶ù8ÿ>õV;=KPŒÝ[$†Y°èAj·®ß¶›¥]^D›šgùºgÆxÄ®úô0Ýjo=¬ñýù-ö&þE5ÔëÚÅŽ“q&š‰5Ú/ ¼a}ÍZÑo Þƒe=çŸ,*Íõ"±¾ßªê÷wÙf-mäh·È»ÌÄuü*„~'Ô5C’[ÛÝ2Éö‰&ä&ÆÛÀ÷­k³ÞÞ_i³É óÙ²þú€ÿ…u1àÆ¿)hZL¢ýÚwŒ}j2 K“NkçÖíòذão"Aû¸Ÿ(ÇËÕi»±'·jsô£`È'©êi7{S¶ŒPG#¸ô¤Àó>”‡'¯NiÍÈ£°¦,|í4¡B)ÎìzÒ,|³`Ш»³žhÁ^»°zT>dOõ”å€`¿½r¾8eû%œß‘+©µ ÖñNØêÈÙŠpõÇ4c±|Jâ?Þúg÷ê? ‰á[8Ûþyó[$ª§2S²¬¼|õý³ÿ€SÙ‚ÅóÿÏ:å<$‰=γ+Ǽ½ÇÝzéÒŽÝ‘NÅÿ¾iÿyþ¯ç«(s#exTù{×rsñÎ3ò…‡uv*£Tlö¦+gýšvòñÿ§r«ýæ®gÆå—Ãï³øô*Õµ±·1%Á¶Œ\2.X}ê¼¾¿u¿»O,¨”Æ?&äû´²²ùl?ïªò{)e¾´þĉö›íBO7g÷Zõ+;l-â·¶MÆ»UjYóŠ6¶6o®ÅZ9¾ÓEůËykûè_ø¿Ý«síÕ´›‘r²Æ³÷ð6þ¦›okö»Ìz}«P“ö¢TdãŒý*†¤—RH½>ÏÏ'­M ³·»°:UMÊûlÛ~÷”½~­Qø«MºÔ4Ÿ.Õ|棼-ò¬Š:Ʋ¢Òµ-bâÒKûXllm˜2[ÆûžB:dâ´›A´¶´¾û¶Û™ãe'q;‰úÔZ†­%Ó¬–ú ×PBŠ>r½±¬5µÍ"ÒM2 +{ùŽÑÜo1''éDú'ö|VpÜéï¨Û¢ïúÅ”òIéÁ«ÞÑe²¸ºÔ&³ûŸòÅl¼˜Ðzûœ×X/ÌßîÓ[åùG÷¸¥l¸ÊuÝH# Ë}ïZsH#µ6?¼ÔÉrË»îÿ>OÊÝê@g=¸¤»r°¥Yñ¦œ0ù[4©ò³/j~À{ÓmPGZEnr9ïHìÇJpÈ]¬Ø§nŽM4gæÃséOV HèéMP@ê:Ô"ý£îõ~”ÛggI71?S\¿¾æÿ]+®%°ÛÇÒŸMÿ–B›7úô¬O3Â/yóõ~µk¿ò-iÿõίKÐýj+vmçæ?<ÿÇáúÔòªzã| íöQ·Þ\ó]&æþñüêfÿ[V—ýMU‘›b|Çó®F?›âl;¹ÿEï]¬_òÒ£‰™¾óõ5"ýßø"}߯¹¿ÿÈ/ú굿jÇû5[';:Ó‡ßJˆ³|£'qš|ŒÁö‚@ô¥r_÷kɼÿ#¬_I¿ô*õ–c¸r:I:½1½OçVcç9ç§ZɃþ@qÿ×þb¬ØË?ÇúÕù}ÿ>”Éÿä.ßç½\ª7üÉÿ\×ùµnIÐ}iªÅû´²pxãæíô¤‹ælô©"ýâåºúŽ)§‚¸ã-Î;Ó°>n/ø éøçJßuiý_üמøß[Ô´Ù¬þÇw$;þöÜsõÍvw³ÉŒfG"A!½ëŒð~¿ªjWÏåÛJƒ8WŽ=…f¯Š5Ÿ·ù_mo/Ì?.Åÿ í5›û«]*I¡”¤ƒ£`u¦xWPº¿Ò|Û©Œ’n1vöªŸÚ—¿ÛWÚËãåÀ÷«ÚåõͱŒÃ.Òzœ[v²<–ªìrƤnqžiÿÀ*1Ö•¹#5WÍ“ûHG¸ìÏJ¸?­+ô«Ôýj"N=ëÿÙleptonica-1.70/prog/snapcolortest.c0000640000175000017500000001020612242265607015521 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * snapcolortest.c * * This tests the color snapping in blend.c. * It is used here to color the background on images in index.html. */ #include "allheaders.h" static const l_uint32 LEPTONICA_YELLOW = 0xffffe400; int main(int argc, char **argv) { PIX *pixs, *pixc, *pixd; PIXA *pixa; static char mainName[] = "snapcolortest"; if (argc != 1) return ERROR_INT(" Syntax: snapcolortest", mainName, 1); if ((pixs = pixRead("Leptonica.jpg")) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixa = pixaCreate(0); /* First, snap the color directly on the input rgb image. */ pixSaveTiledOutline(pixs, pixa, 1.0, 1, 25, 2, 32); pixd = pixSnapColor(NULL, pixs, 0xffffff00, LEPTONICA_YELLOW, 30); pixSaveTiledOutline(pixd, pixa, 1.0, 0, 25, 2, 32); pixWrite("/tmp/logo1.jpg", pixd, IFF_JFIF_JPEG); pixDestroy(&pixd); /* Then make a colormapped version and snap the color */ pixd = pixOctreeQuantNumColors(pixs, 250, 0); pixSaveTiledOutline(pixd, pixa, 1.0, 1, 25, 2, 32); pixSnapColor(pixd, pixd, 0xffffff00, LEPTONICA_YELLOW, 30); pixSaveTiledOutline(pixd, pixa, 1.0, 0, 25, 2, 32); pixWrite("/tmp/logo2.png", pixd, IFF_PNG); pixDestroy(&pixd); pixDestroy(&pixs); /* Set the background of the google searchbox to yellow. * The input image is colormapped with all 256 colors used. */ if ((pixs = pixRead("google-searchbox.png")) == NULL) return ERROR_INT("pixs not made", mainName, 1); pixSaveTiledOutline(pixs, pixa, 1.0, 1, 25, 2, 32); pixd = pixSnapColor(NULL, pixs, 0xffffff00, LEPTONICA_YELLOW, 30); pixSaveTiledOutline(pixd, pixa, 1.0, 0, 25, 2, 32); pixWrite("/tmp/logo3.png", pixd, IFF_PNG); pixDestroy(&pixd); pixDestroy(&pixs); /* A couple of more, setting pixels near white to strange colors */ pixs = pixRead("weasel4.11c.png"); pixSaveTiledOutline(pixs, pixa, 1.0, 1, 25, 2, 32); pixd = pixSnapColor(NULL, pixs, 0xfefefe00, 0x80800000, 50); pixSaveTiledOutline(pixd, pixa, 1.0, 0, 25, 2, 32); pixDestroy(&pixs); pixDestroy(&pixd); pixs = pixRead("wyom.jpg"); pixc = pixFixedOctcubeQuant256(pixs, 0); pixSaveTiledOutline(pixc, pixa, 1.0, 1, 25, 2, 32); pixd = pixSnapColor(NULL, pixc, 0xf0f0f000, 0x80008000, 100); pixSaveTiledOutline(pixd, pixa, 1.0, 0, 25, 2, 32); pixDestroy(&pixs); pixDestroy(&pixc); pixDestroy(&pixd); /* --- Display results --- */ pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/snap.jpg", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } leptonica-1.70/prog/dithertest.c0000644000175000017500000000755712270122643015014 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dithertest.c * * Input is 8 bpp grayscale * Output file is PostScript, 2 bpp dithered */ #include "allheaders.h" static const l_float32 FACTOR = 0.95; static const l_float32 GAMMA = 1.0; int main(int argc, char **argv) { char *filein, *fileout; l_int32 w, h; l_float32 scale; FILE *fp; PIX *pix, *pixs, *pixd; PIXCMAP *cmap; static char mainName[] = "dithertest"; if (argc != 3) return ERROR_INT(" Syntax: dithertest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; if ((pix = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); if (pixGetDepth(pix) != 8) return ERROR_INT("pix not 8 bpp", mainName, 1); pixs = pixGammaTRC(NULL, pix, GAMMA, 0, 255); startTimer(); pixd = pixDitherToBinary(pixs); fprintf(stderr, " time for binarized dither = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixd, 1); pixDestroy(&pixd); /* Dither to 2 bpp, with colormap */ startTimer(); pixd = pixDitherTo2bpp(pixs, 1); fprintf(stderr, " time for dither = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixd, 1); cmap = pixGetColormap(pixd); pixcmapWriteStream(stderr, cmap); pixDestroy(&pixd); /* Dither to 2 bpp, without colormap */ startTimer(); pixd = pixDitherTo2bpp(pixs, 0); fprintf(stderr, " time for dither = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixd, 1); pixDestroy(&pixd); /* Dither to 2 bpp, without colormap; output in PostScript */ pixd = pixDitherTo2bpp(pixs, 0); w = pixGetWidth(pixs); h = pixGetHeight(pixs); scale = L_MIN(FACTOR * 2550 / w, FACTOR * 3300 / h); fp = lept_fopen(fileout, "wb+"); pixWriteStreamPS(fp, pixd, NULL, 300, scale); lept_fclose(fp); pixDestroy(&pixd); /* Dither 2x upscale to 1 bpp */ startTimer(); pixd = pixScaleGray2xLIDither(pixs); fprintf(stderr, " time for scale/dither = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixd, 1); pixDestroy(&pixd); /* Dither 4x upscale to 1 bpp */ startTimer(); pixd = pixScaleGray4xLIDither(pixs); fprintf(stderr, " time for scale/dither = %7.3f sec\n", stopTimer()); pixDisplayWrite(pixd, 1); pixDestroy(&pixd); pixDisplayMultiple("/tmp/display/file*"); pixDestroy(&pix); pixDestroy(&pixs); return 0; } leptonica-1.70/prog/weasel8.149g.bmp0000444000175000017500000001605210400443670015207 0ustar dandanBM*6(RIô  !!!"""###$$$%%%&&&'''((()))***+++,,,---...///000111222333444555666777888999:::;;;<<<===>>>???@@@AAABBBCCCDDDEEEFFFGGGHHHIIIJJJKKKLLLMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ[[[\\\]]]^^^___```aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrssstttuuuvvvwwwxxxyyyzzz{{{|||}}}~~~€€€‚‚‚ƒƒƒ„„„………†††‡‡‡ˆˆˆ‰‰‰ŠŠŠ‹‹‹ŒŒŒŽŽŽ‘‘‘’’’“““”””•••–––———˜˜˜™™™ššš›››œœœžžžŸŸŸ   ¡¡¡¢¢¢£££¤¤¤¥¥¥¦¦¦§§§¨¨¨©©©ªªª«««¬¬¬­­­®®®¯¯¯°°°±±±²²²³³³´´´µµµ¶¶¶···¸¸¸¹¹¹ººº»»»¼¼¼½½½¾¾¾¿¿¿ÀÀÀÁÁÁÂÂÂÃÃÃÄÄÄÅÅÅÆÆÆÇÇÇÈÈÈÉÉÉÊÊÊËËËÌÌÌÍÍÍÎÎÎÏÏÏÐÐÐÑÑÑÒÒÒÓÓÓÔÔÔÕÕÕÖÖÖ×××ØØØÙÙÙÚÚÚÛÛÛÜÜÜÝÝÝÞÞÞßßßàààáááâââãããäääåååæææçççèèèéééêêêëëëìììíííîîîïïïðððñññòòòóóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþÿÿÿÿÿÿ÷÷÷ï÷÷ïïÿï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷÷÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ï÷ïù÷÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷àÞÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖØÖÞàõÿÿÿÿÿÿÿÿÿÿÿÿÿÿàη­­¯­­±­±­­­­­­­­­­­­­­­­­­­­­­­¯­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­·Îà÷ÿÿÿÿÿÿÿÿÿÿÿ’JJJHJJHJJJJJJHJJDJJJHHPBJHJHJ=HHHHDJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJkµÖ÷ÿÿÿÿÿÿÿÿÿÿÿP­­««©¥§¥¥œ9Œ¡Ž€:/ÿ÷/žÿÿ»¯ÿ÷«!VR= B·ii`919sµ÷ÿÿÿÿÿÿÿÿÿÿ„H«ÖûÿÿÿÿÿÿÿÿÿÿÿB­­­¥­«¥¥¥§s qŒQéÿ{Rÿÿçÿÿý!!gV!ýÿÿÿÿ÷ççÖ¥œŒcJZÖÿÿÿÿÿÿÿÿ„B¥ÖïÿÿÿÿÿÿÿÿÿÿÿJ­­­­§­¥¥§”[Stu³ÿÿïÿÿÿ+PÿÿÿR^^gBÜÿÿÿÿÿÿÿÿÿÿÿÿÿ÷Îk!ZÞÿÿÿÿÿÿJµÖñÿÿÿÿÿÿÿÿÿÿÿJ­³­­­­¥­§y}} {ž”BÔ¯«œœ¤B ÿÿÿ·Vg=µÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷œJµÿÿÿÿÿ„J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿL­­¯­­­­§¥¥-3“†)) «ÿÿÿ!^5œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿZçÿÿÿÿ„J«Ø÷ÿÿÿÿÿÿÿÿÿÿÿNµ­­­­­­­¥¥Š !HHJyik{ŒŒk9ÿÿÿc gRB RÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÞ¥ÿÿÿÿ„H­ÖïÿÿÿÿÿÿÿÿÿÿÿF­¯³¯­­­­­­¥œkkœ¥¥¥¢¥ž¢œœœžœJëÿÿÆ)Rg)ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿï!”ÿÿÿÿ„H­Ö÷ÿÿÿÿÿÿÿÿÿÿÿN­µ­³­µ­­­­­­¥§¥¥¥¥¥¥¥¥œ¥œœœŠ„ÿÿõ!Fg= ïÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷)sÿÿÿÿ„J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿHµ³­µ­­­­­­­­­­«§¥¥¥¥¥¥¥¥œœœž)õÿÿTg5Ìÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ9Jÿÿÿÿ„J­ÖïÿÿÿÿÿÿÿÿÿÿÿHµ¯µ­³µ­µ­­­­­­­­­­¥¥¥¥¥¥¥¥œœkœÿÿµ ^V)Œÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿskÿÿÿÿ„J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿJµ³µµ¯³µ­µ­­­­­­­­­­­­¥­¥¥¥¥œ”9ùÿç 5gN9ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ÷ÿÿÿÿ„J­ÖïÿÿÿÿÿÿÿÿÿÿÿJµ³µ¯µ¯³µ¯³¯­¯±¯¯­­­­­­¥­¥¥¥¥œBÎÿï ¿ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿJµµµµµµµ­µ­­µ±±­±­­­­­­­¥­¥¥œ¥{†ÿŒ5== µà÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿH­ÖïÿÿÿÿÿÿÿÿÿÿÿJµµµµµµµµµµµ­±±±±±±±±­­­­¥¥¥¥¥œ3R)gg=5g4)kÈÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„J­ÖûÿÿÿÿÿÿÿÿÿÿÿHµ½½µµµµµµµµµµµ­µ­µ­µ­³­­­­¥¥ž¢J1 )!^JB^g{Z!9`k¥Öÿÿÿÿÿÿÿÿÿÿÿÿÿÿ„J­ÖïÿÿÿÿÿÿÿÿÿÿÿH·ÆÞƵµµµµµµµ­µµµµµ­±±¯­­­­¥¥¥œ!Tÿ35F^gZJgiÿÿÞžeB9”Þÿÿÿÿÿÿÿÿÿÿÿ„H­Ö÷ÿÿÿÿÿÿÿÿÿÿÿHµ½ïÞµµµµµµµµµµ­µµ­³¯¯±­­­¥¥¥¥”ŒÿH3^=^V95Áÿÿÿÿÿÿç¥HBŒÈÿÿÿÿÿÿÿÿ„J­ØïÿÿÿÿÿÿÿÿÿÿÿJµµçõƵµµµµµµµµµ­µ±³¯³­­­¥­¥¥¥”†ÿ¢J FgNHÿÿÿÿÿÿÿÿÿÿÞœR){Êïÿÿÿÿ„H­ÖûÿÿÿÿÿÿÿÿÿÿÿH·µÞùÞµµµµµµµµµµµ­±¯³¯­­­­­¥¥¥œ/3ÿ÷L43T}œ­­»Ôõÿÿÿÿÿñµc!JœÞÿ„J­ÖñÿÿÿÿÿÿÿÿÿÿÿJ»µç÷÷Ƶµµµµµµµµµµ±µ­­­­­«§¥¥¥¥„ 9R  !2d¤æÿÿÿÿÿï½”BJRH­ÖõÿÿÿÿÿÿÿÿÿÿÿH··ç÷÷Þµµµµµ­µµ­­­±­­­­­­§­¥¥¥œœsdmm}ŽŠŠŽƒmmSB'BŒÃÿÿÿÿÿÿçœBJ­ÖïÿÿÿÿÿÿÿÿÿÿÿB»»ç÷ýïÆµµµµµµ­µµ­­­­­«­§«¥¥¥žžœž{m•„kB9ŒÜÿÿÿÿÿÿcH­Ö÷ÿÿÿÿÿÿÿÿÿÿÿH·µÞ÷÷÷Þµµµµ­µµ­­­­­­­­¥­¥¥¥¥¥¢œœ„ rž¡¡žžž –wY!){çÿÿÿ„B­ÖõÿÿÿÿÿÿÿÿÿÿÿH½µÞÿ÷÷ïÆµµµµ­­­­­­¯­¥œ§§¥¥¥œ¢œœœ{†ž¡qJ:QrŽžžž {LV¯ÿ„H­ÖïÿÿÿÿÿÿÿÿÿÿÿHµµç÷÷÷÷Þµµ­­­­­­”R##!!HkŒ¥¥œœœœ{Œ[2u žžž}I4RJ­ØõÿÿÿÿÿÿÿÿÿÿÿH·½ç÷÷÷ïïÆµµ­­­­k !:! !Bs„”š„zž€2†žž’[F­ÖóÿÿÿÿÿÿÿÿÿÿÿHµ½ç÷ï÷ï÷Þµ­­­­s:•–ž•ŽmP)Js!a¡B)žžžžžžž2H¯ÖïÿÿÿÿÿÿÿÿÿÿÿH¹½ï÷÷÷ïïçέ­­­1šž ˆd/)€}žžžžLJ­Ö÷ÿÿÿÿÿÿÿÿÿÿÿH»Æï÷÷ïïççÞ½­¥¥#B žžŽg6Œ3;žžQH­ÖñÿÿÿÿÿÿÿÿÿÿÿHµÎ÷ï÷ïïïçÞέ­¥)=ŽI)™žž„Mcÿc†H)ž žžQH­Ú÷ÿÿÿÿÿÿÿÿÿÿÿHµÖ÷÷÷ïïççÞÞµ­¥Bˆž•}Q)'–žk!s3ÿ„Ržžž EH­ÖïÿÿÿÿÿÿÿÿÿÿÿJµÞ÷÷ïïïççÞÞε¥ŠAŽŽm/'Su™m+ c[žBJ­ÖùÿÿÿÿÿÿÿÿÿÿÿJµÞ÷÷ïïÆBRZ„ŒsRDAm–žž¡ž{Y'2–ž ž:J­Ø÷ÿÿÿÿÿÿÿÿÿÿÿJ½Þ÷ï÷ïÖR111u–„}w[I2;„du–žž2J­ÖïÿÿÿÿÿÿÿÿÿÿÿJµç÷÷ïïïççÞÞÎο” )–žžž!J­ÖÿÿÿÿÿÿÿÿÿÿÿÿJ½ç÷÷÷ïïïççÖ­y9[uq{†Ž™ž žžž– J­ÚïÿÿÿÿÿÿÿÿÿÿÿJÆï÷÷ïï¥cB11)!BZ„c)RD'| žžžžž ž€J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿHÆï÷÷÷÷sB{œÆÖÖÞÖÔÈ­¥¥”B)†žžž:J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿHÎ÷÷÷÷çÖÎÞÞÞÞÞÞÞÜÔÆ­¥¥¥sc žžžžžŽH­ÖïÿÿÿÿÿÿÿÿÿÿÿJÎ÷÷÷ï½½µµµµ½½ÎÎÖÞÖέ¥­¥œB'|ž¡žž¡žžb9J­ØõÿÿÿÿÿÿÿÿÿÿÿJÎ÷ÿ÷Þµµµµ¥¥­µ­µ­½ÆÎµ­«¥«¥„!JŽž¡žžžžž/ ZJ­ÖõÿÿÿÿÿÿÿÿÿÿÿJÖÿ÷÷÷½µ¥œ­­¥¥­­µ­­­­­­­«©«žR[’žžž ¡žžžuRcJ­ÖïÿÿÿÿÿÿÿÿÿÿÿJÖÿÿÿïÆ¥”œ­­µ­µµ­µ­­­¯­­­­­­«œRS‘–„žžžž2¥`J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿJÖÿ÷ÞÎÞµ­µµµµµµµµ­µ­µ­µ­­­­«¥­¥Œ9!”g„žžˆ[žžž” @ÆcJ­ÖïÿÿÿÿÿÿÿÿÿÿÿJÖÿ÷ÞïçÞεµµµµµµµµµµµ­­³¯­­­­§§¥§{!6„™š¡)Ž¡ž žžžZŒ½`J­Ö÷ÿÿÿÿÿÿÿÿÿÿÿJÖ÷ÿÿÞÞ÷÷Öµµµµµµµµµµµµµ­±¯­­­­­¥¥s'/+':Z{Šžš!µÆcJ­ÖñÿÿÿÿÿÿÿÿÿÿÿBÖÿÿ÷Þ÷ÿ÷÷Þ½µµµµµµµµµµµµ±³µ¯­­«­¥R Ž•k€}[M:6:/:A) Žž¡wa½½cJ­Ø÷ÿÿÿÿÿÿÿÿÿÿÿJÞÿÿ÷÷ÿ÷÷ÿ÷çÆµµµµ½µµµµµµµ­­­µ­­­­”c žžžšŒt}¡žAšÆÆcJ­ÖïÿÿÿÿÿÿÿÿÿÿÿJÞÿ÷ÿ÷ÿ÷ÿ÷÷ÿçεµµµµµµµµµµµµµ­­­­­«` Œžžž–B½¿ÁcJ«Ö÷ÿÿÿÿÿÿÿÿÿÿÿJÞ÷ÿ÷ÿ÷÷ÿÿ÷÷ÿ÷ÞÆµµµµµµµµµµµ­µ­­­¥©œŒžžžžJ„½ÆÆcJ­ÖñÿÿÿÿÿÿÿÿÿÿÿJÎ÷÷ÿ÷ÿ÷÷÷ÿ÷÷÷÷ïÖ½µµµµµµµµ³¯³¯­¯­­­{užžŽ­½½½cJ­ÖõÿÿÿÿÿÿÿÿÿÿÿJ½çÿ÷ÿ÷÷÷÷÷÷÷÷÷÷÷çÆ½µµ­­µ­¥­­µ­³­­­¥–!kžžžžž QžÁÁÆeH­ÖïÿÿÿÿÿÿÿÿÿÿÿJµÖ÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ÞÆµ¥¥­­­­µ­µ­­­«§­µB:„¡ž žž„i½Á½`J­ÖïÿÿÿÿÿÿÿÿÿÿÿJµ½ç÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ÖÆµµµµµµµµµ±­­­¥µÆi'k•ž¡žžŽc¿¿Æ`J­ÚùÿÿÿÿÿÿÿÿÿÿÿJµµÎïï÷ï÷÷÷ï÷÷÷ï÷ïï÷ï÷çÞÆµµµ­µÎÞÖ½­¥­¥µÆ¯):Qqu„•žŠZ½½½cJ­ÖïÿÿÿÿÿÿÿÿÿÿÿJµµµ½ç÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷÷ïçÞµµµ³ÆççÞȵ¥«­ÁÆB1qE!'B•žžI½¿ÆcH­ÖïÿÿÿÿÿÿÿÿÿÿÿJεµµÞïïïïïïïïïïïïïïïïï÷ïïÖ½­¯µÆÎÞÞÖÆ¿ÆÎÌZ3 ž–„R)1Qžžž4­Ã½cL­Ø÷ÿÿÿÿÿÿÿÿÿÿÿJïçÞÞïïïïïïïïïïïïïïïïïïïïïïçν­±¹ÞÞÞØÖÒÎÆœ”/ ¥µkŽ  Ž)„È`J­ÖïÿÿÿÿÿÿÿÿÿÿÿBïïïçïïïïïïïïïïïïïïïïïïïïïïïççÖÎÚÞàÞÜÖÖÎÌ»ož€Lµµ¹BŒžž–A{`J­ÖõÿÿÿÿÿÿÿÿÿÿÿJïïïïïïïïïïïïïïïïïïïïïïçïïççççççççÞÞÞØÖÖÎÎB'ž–;½½»¹c:’žž•NcJ­ØóÿÿÿÿÿÿÿÿÿÿÿBïïçïïçïçïçïçïçïçïçïçïçïççïçççççàÞÞÞÞÖÖÎÎΧ[žqŒ½µ½½Œ;c}{t:„cJ­ÖñÿÿÿÿÿÿÿÿÿÿÿJéççççççççççççççççççççççççççççççççÞÞÞÜØÖÎÎÎsižžu„¿¿½Ã¿¯Z)RÃcJ­ÖñÿÿÿÿÿÿÿÿÿÿÿDççççççççççççççççççççççççççàäàäÞÞÞÞÞÞÖÖÖÎÎÎÈZBA/·½Ã½½½¿½½œ”””ž½ÆcHµÞ÷ÿÿÿÿÿÿÿÿÿÿÿFççççççççççççççççççççççäççäççäàäçÞÞÞÞÞÖÖÖÖÎÎÌsRµÆÆÆÆÃÆÁƽ½ÆÃÆÆÆÆcFÐàÿÿÿÿÿÿÿÿÿÿÿÿHçÞàÞÞÞäàÞäàÞäàÞäàÞäàÞäàÞÞàäÞàÞàÞÞÞÞÜÖØÖÖÎÎÎÎȽµÆÆÆÆÆÆÆÁÁÆÆÆÆÆÆÃÃÆ`Là÷÷ÿÿÿÿÿÿÿÿÿÿÿDççäçççàäçàäçàäçàäçàäçàäçÞçÞçÞÞÞÞÞÞÞÞÞÜÖØÖÖÖÎÐÎÌÎÈÆÎÈÌÈÎÆÆÆÆÆÆÆÆÈÆeD÷ýýÿÿÿÿÿÿÿÿÿÿÿ”JHJHHHJJJJJJJJJJJJJJJJHJHHJHHJHHLJHHHLHFJHHHHHJHHJHHJHHJHHJHHJNHNHšÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿleptonica-1.70/prog/pdfseg_reg.c0000640000175000017500000001425112265246153014732 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pdfseg_reg.c * * Generates segmented images and encodes them efficiently in pdf. * The encoding is mixed-raster, with the image parts encoded as * DCT at one resolution and the non-image parts encoded at (typically) * a higher resolution. * * Uses 6 images, all segmented and scaled to a fixed width */ #include "allheaders.h" /* All images scaled to this width */ static const l_int32 WIDTH = 800; int main(int argc, char **argv) { l_int32 h; l_float32 scalefactor; BOX *box; BOXA *boxa1, *boxa2; BOXAA *baa; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; lept_rmdir("segtest"); lept_mkdir("segtest"); baa = boxaaCreate(5); /* Image region input. */ pix1 = pixRead("wet-day.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pixWrite("/tmp/segtest/0.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/segtest/0.jpg"); /* 0 */ box = boxCreate(105, 161, 620, 872); /* image region */ boxa1 = boxaCreate(1); boxaAddBox(boxa1, box, L_INSERT); boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); /* Compute image region at w = 2 * WIDTH */ pix1 = pixRead("candelabrum-11.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pix3 = pixConvertTo1(pix2, 100); pix4 = pixExpandBinaryPower2(pix3, 2); /* w = 2 * WIDTH */ pix5 = pixGenHalftoneMask(pix4, NULL, NULL, 1); pix6 = pixMorphSequence(pix5, "c20.1 + c1.20", 0); pix7 = pixMaskConnComp(pix6, 8, &boxa1); pix8 = pixReduceBinary2(pix7, NULL); /* back to w = WIDTH */ pix9 = pixBackgroundNormSimple(pix2, pix8, NULL); pixWrite("/tmp/segtest/1.jpg", pix9, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/segtest/1.jpg"); /* 1 */ boxa2 = boxaTransform(boxa1, 0, 0, 0.5, 0.5); /* back to w = WIDTH */ boxaaAddBoxa(baa, boxa2, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix9); boxaDestroy(&boxa1); /* Use mask to find image region */ pix1 = pixRead("lion-page.00016.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pixWrite("/tmp/segtest/2.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/segtest/2.jpg"); /* 2 */ pix3 = pixRead("lion-mask.00016.tif"); pix4 = pixScaleToSize(pix3, WIDTH, 0); boxa1 = pixConnComp(pix4, NULL, 8); boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Compute image region at full res */ pix1 = pixRead("rabi.png"); scalefactor = (l_float32)WIDTH / (l_float32)pixGetWidth(pix1); pix2 = pixScaleToGray(pix1, scalefactor); pixWrite("/tmp/segtest/3.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/segtest/3.jpg"); /* 3 */ pix3 = pixGenHalftoneMask(pix1, NULL, NULL, 0); pix4 = pixMorphSequence(pix3, "c20.1 + c1.20", 0); boxa1 = pixConnComp(pix4, NULL, 8); boxa2 = boxaTransform(boxa1, 0, 0, scalefactor, scalefactor); boxaaAddBoxa(baa, boxa2, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); boxaDestroy(&boxa1); /* Page with no image regions */ pix1 = pixRead("lucasta-47.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); boxa1 = boxaCreate(1); pixWrite("/tmp/segtest/4.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/segtest/4.jpg"); /* 4 */ boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); /* Page that is all image */ pix1 = pixRead("map1.jpg"); pix2 = pixScaleToSize(pix1, WIDTH, 0); pixWrite("/tmp/segtest/5.jpg", pix2, IFF_JFIF_JPEG); regTestCheckFile(rp, "/tmp/segtest/5.jpg"); /* 5 */ h = pixGetHeight(pix2); box = boxCreate(0, 0, WIDTH, h); boxa1 = boxaCreate(1); boxaAddBox(boxa1, box, L_INSERT); boxaaAddBoxa(baa, boxa1, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); /* Save the boxaa file */ boxaaWrite("/tmp/segtest/seg.baa", baa); regTestCheckFile(rp, "/tmp/segtest/seg.baa"); /* 6 */ /* Do the conversion */ l_pdfSetDateAndVersion(FALSE); convertSegmentedFilesToPdf("/tmp/segtest", ".jpg", 100, L_G4_ENCODE, 140, baa, 75, 0.6, "Segmentation Test", "/tmp/pdfseg.7.pdf"); L_INFO("Generated pdf file: /tmp/pdfseg.7.pdf\n", rp->testname); regTestCheckFile(rp, "/tmp/pdfseg.7.pdf"); /* 7 */ boxaaDestroy(&baa); return regTestCleanup(rp); } leptonica-1.70/prog/dwamorph2_reg.c0000644000175000017500000002472012265245322015370 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dwamorph2_reg.c * * Compare the timings of various binary morphological implementations. */ #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" #define HALFWIDTH 3 /* Complete set of linear brick dwa operations */ PIX *pixMorphDwa_3(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); static const l_int32 NTIMES = 20; int main(int argc, char **argv) { char *selname; l_int32 i, j, nsels, sx, sy; l_float32 fact, time; GPLOT *gplot; NUMA *na1, *na2, *na3, *na4, *nac1, *nac2, *nac3, *nac4, *nax; PIX *pixs, *pixt; PIXA *pixa; SEL *sel; SELA *selalinear; static char mainName[] = "dwamorph2_reg"; if (argc != 1) return ERROR_INT(" Syntax: dwamorph2_reg", mainName, 1); pixs = pixRead("feyn-fract.tif"); pixt = pixCreateTemplate(pixs); selalinear = selaAddDwaLinear(NULL); nsels = selaGetCount(selalinear); fact = 1000. / (l_float32)NTIMES; /* converts to time in msec */ na1 = numaCreate(64); na2 = numaCreate(64); na3 = numaCreate(64); na4 = numaCreate(64); /* --------- dilation ----------*/ for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); fprintf(stderr, " %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixDilate(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixDilateCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_DILATE, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixDilateCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nax = numaMakeSequence(2, 1, nsels / 2); nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/junkdilate", GPLOT_PNG, "Dilation time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); /* --------- erosion ----------*/ numaEmpty(na1); numaEmpty(na2); numaEmpty(na3); numaEmpty(na4); for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); fprintf(stderr, " %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixErode(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixErodeCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_ERODE, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixErodeCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/junkerode", GPLOT_PNG, "Erosion time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); /* --------- opening ----------*/ numaEmpty(na1); numaEmpty(na2); numaEmpty(na3); numaEmpty(na4); for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); fprintf(stderr, " %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixOpen(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixOpenCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_OPEN, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixOpenCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/junkopen", GPLOT_PNG, "Opening time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); /* --------- closing ----------*/ numaEmpty(na1); numaEmpty(na2); numaEmpty(na3); numaEmpty(na4); for (i = 0; i < nsels / 2; i++) { sel = selaGetSel(selalinear, i); selGetParameters(sel, &sy, &sx, NULL, NULL); selname = selGetName(sel); fprintf(stderr, " %d .", i); startTimer(); for (j = 0; j < NTIMES; j++) pixClose(pixt, pixs, sel); time = fact * stopTimer(); numaAddNumber(na1, time); startTimer(); for (j = 0; j < NTIMES; j++) pixCloseCompBrick(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na2, time); startTimer(); for (j = 0; j < NTIMES; j++) pixMorphDwa_3(pixt, pixs, L_MORPH_CLOSE, selname); time = fact * stopTimer(); numaAddNumber(na3, time); startTimer(); for (j = 0; j < NTIMES; j++) pixCloseCompBrickDwa(pixt, pixs, sx, sy); time = fact * stopTimer(); numaAddNumber(na4, time); } nac1 = numaWindowedMean(na1, HALFWIDTH); nac2 = numaWindowedMean(na2, HALFWIDTH); nac3 = numaWindowedMean(na3, HALFWIDTH); nac4 = numaWindowedMean(na4, HALFWIDTH); gplot = gplotCreate("/tmp/junkclose", GPLOT_PNG, "Closing time vs sel size", "size", "time (ms)"); gplotAddPlot(gplot, nax, nac1, GPLOT_LINES, "linear rasterop"); gplotAddPlot(gplot, nax, nac2, GPLOT_LINES, "composite rasterop"); gplotAddPlot(gplot, nax, nac3, GPLOT_LINES, "linear dwa"); gplotAddPlot(gplot, nax, nac4, GPLOT_LINES, "composite dwa"); gplotMakeOutput(gplot); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ gplotDestroy(&gplot); numaDestroy(&nac1); numaDestroy(&nac2); numaDestroy(&nac3); numaDestroy(&nac4); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&nax); selaDestroy(&selalinear); pixDestroy(&pixt); pixDestroy(&pixs); /* Display the results together */ pixa = pixaCreate(0); pixs = pixRead("/tmp/junkdilate.png"); pixaAddPix(pixa, pixs, L_INSERT); pixs = pixRead("/tmp/junkerode.png"); pixaAddPix(pixa, pixs, L_INSERT); pixs = pixRead("/tmp/junkopen.png"); pixaAddPix(pixa, pixs, L_INSERT); pixs = pixRead("/tmp/junkclose.png"); pixaAddPix(pixa, pixs, L_INSERT); pixt = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 40, 3); pixWrite("/tmp/junktimings.png", pixt, IFF_PNG); pixDisplay(pixt, 100, 100); pixDestroy(&pixt); pixaDestroy(&pixa); return 0; } leptonica-1.70/prog/test24.jpg0000444000175000017500000074544510011632623014316 0ustar dandanÿØÿàJFIFÿþZ CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀŒ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ãîîåžä¬ŽU$ÉRáëŸëSè‘Ù5Þ/ÞT´ÚÀì%½û޽½ªT‰P³½F=ëBÏNûdâ+`ª,p:ö­ÑäÉ_sHê.—>•bóÝÆó3Ų}>ísÒÅ{¨Í6§4!™Ô ò…'8úôï]T:)·O2ûPTÁyx{níõÅUÔîí„6“G*I` ³qÉÿZ¹JÖz IèrÉlÍÄ«´¼ `Ïùü}ªÂYÀ…„i S’Ë–½i~Þ"˜¬w1– |y ýN:v¦½ÊÌD_iÞË‚ õ'¸ïQv]’%M5T‰•ÄåSg¥2[;dÃK"ùŠ€À$sÓzUH¦–/ܵΨs–?‡¿áUgJžã%T²¾@+þí>y>¢²/}‰~Ö#’Èw X’Çÿ®¬ÄV9æ $a¹ï×ß­a¥ÍÝÚ²˜"ÆÏ-þ*[ žrìÄg$ŒÐÛêwW¯p¡®Í&î |€*³ËPx œuª×0ÌŒÅe"3– Gb˜RÏê$8{yPhÍ#,rÆG'8P¼ }*¼Æ™VÊ 3!cƒƒž?úßJÏ2,„É2€obü’1Ò£ w»²)+.â¹Ç_­4KfùUQpK6ŒmÜ‘UÞþX' cO%ÆQu`&ˆ¬#Yds(²=çêr( OåB›|å›î¨9íê})N&iƾZWœƒÇ Ò¸ìCrøsk2@Þäî ?ƪ4Oor†7‘”6¿9ÿ½b#µÔgŽcà #€Gÿ[¦(¿šÒy’ÞÙ7³er3µF=?¶…Ë ]4«¸î|­è¸ßp]ηS0T)$þ¿½SŒË æc#4dއ?äVÂE¬ 4„xcYR ‰x×n~PÔÔ¦;h$ÜBâCs A‚¡œàc«¥ð·‰®ln­­ƒ¥½£ÌI™“qU$žÇzçNºF@è0?Ï¥9%q5¼O0ÆÛ™˜u=©¢msÝõ­RÆÓòG«Ü£Ç*•,F„ô}­x4óÅmworY' ºÁ*r*ÝýÚ5Ìb(žØÂî?ÏoéPKitŠ×|RÈ%ÈÎG§nRV*Þj‹q¶·WØç.[ÈTH Ìæy0Äô'Þ¯éÖÁ¢ó‚Y‰ÁZ'¹ÏqmëiiG&“ɧ,Qyp¶ç‰aåüÙ­I ժȬ7§ €~¾µNææúí@+ ‰pÏéÏ¿nµ~A˜X åV1“_ÿ]uÚu—‡/ô uWQ’æñC†Ži‰0ž‹ßq=ÇoʸWhpC•°0L×]áI|çý~=늶ѡ•D¢5óšPv“…Ð~t2¢‘I–SÏ%³´K)uy1’N>v'¦C>¦š¥ÚÍp\XÆÀG;ZL÷ú…K¤óÍöI¥x­£?¼RÛ”žËŸéPø…„K…Kºp½?/‹²’OBö©ªý‘E¼6`¸]È__j ³[ÍLm˜N*[O8UÿõkD³‘íg¹¹)+ùíZW¦M'M9VHU°cvË£å?^Æúöÿf\ÅH¿xvŒ9,Äg¡Æ ©z/l¯æ3E®à†Ï’=‘8«ºl°6«ÍÜnQÈò› @O¯ÿZ¯MZô¦G‘,ÃaÔ¦fõÝ)ô#—SæÖmKLµ ¨mö‚9ž9õ„ЮÕa•. öÖŠNÈÎÖã*s[sÚ-ÂùV²,ª|ÖpŽÀSíZv×vÖBÈ1®Ddä}TÿÔS¸-ŽAç-ކ àÐnwJ²¹‰å»¹Ø„(e]ŸtœvýêáÓÒîèÝß#E'HåeÁêO¯µ-¼“Ì'€šÞ2<É#L}1ëî?­Mhdê6^Ýïƒh$y€s#Þøõ4º{K[¹ e–S#)qÒ0;‘éÞ·MýªÁ ZF^`¾Z'B£˜úÖ2²\Kq£‘rdȹ‹;z©ê;Ó¸ŒùìãÄSîšHÚÒI×qïéÞ¯ýõˤ¤C`&äÚº}0 Cdñê:¥ÑXͤŒ«¾0Ø,£ŒÄg¯áVb»ò¯f7qµ xÁÚG8ã¯åM KS6ÑåÒ¼IivP>æÃÜNAÅzÕÊZ^éè×*É Ù.G×µyF¦°ˆEÈ$2ʱÁúöΕk]Ísâg´Ó-ÚVÑF^@'¢ý8ÉúQ{諬6›s®ù¶zû0%co/rŒuù»çœVýÅ—Út»SmzW"íà V¢hV¶K kgä)+È<æ¨Ïlºv¬–vá"†áL¡@îëKšáÈÖ¥/ì¹~ÈÚä3¨ùžžÿZª4IáÕ-¤kÒ1¸äãéÛºö®¶‚2ù <¶_z¡41}¾Îpà± @'¹ÓüúR]è¤Æì]¨M˜‘ÙQT:úç¦)ÎÖòD‹g¨J°Üƒ/ãÇÛ¨ÖûT³ÓÎâŠMÌ€ŸNüÿ¯­.¢ÐEq¦š¬¸xÓ+ŽùãœûJ$CöE´u/}<ŒrãnÆsŽ*FHÄd»D‹»Ê#?,óI¥Ã«0„Ä2FÉŸnqÓ9ϵZšÕØ(}ÀczsÔþ´jDž î}Jð†É¸1¦óŒ(éþMIâ;HtâîÑdû@•Ènd,prO^¹J§£\Ëáé5%ܶ2¿˜~ð#Š«®øŽÛ^Š-?O·¸!åGœºí‚8žüÒÖå+r‘:NÖ²¹š@Ä¢FÉõÏoþµI$BHDr^HH• ®=?^”ÝnIbšg'ž6rÄî™è*Ô¾¹[pSW¹äå²¹úQq(ß  ^Í™ÆNTzœ`b²µ('ó,í¡¼¸3O1]À©É<`sZvSÞÚêi¦j«³F^9bÎ3Ô~kVÅ- ¼¶p'´˜K|áˆÆWÿ­F£´Q¡máK+HÄog2^DÜÄwæ°|K ÚC OiÇ7š1±¤'¶­jŸÃ,/äYÜIxW lP‚ûÝ1ïQAíÅÜ:ž³.2D0"ác­jÂOS/íºúi­¦IÓþì@Ï<Ѝ3òR:žÇJÔ4ë(­ÄA”„ÿ^¢¬éVºƒ\I#HâI|ÂXàÈÜñõ­[™"ŠCFÇ$àmÉ¡ÊÛ +­L'ûTzÔx¤–4;É)võ?ZœéðÚK–¦"·ffò6ãnO![·åO }za¹€Š0 € ã¯ÿ®¢×/n_U‹O¶vY.°¥‘yI~'¥4ÄÑsJ²k8ÊÂmX †;²AýzÕ‡ûAXI0+6•rHon9ïÅ9<n É{u j3¶'ÀfîXúÖ}´÷:v´ÚUÔ†d!d¶|ààuVëþG¥2DÕíZ(~Æ’ g*Y[ ®Iàc™¥êzŽb4{&{³ ÿ£É0ÊIÆsÓ+CZž_·ië! ¾àãOùÍÉ2Ü©ó^¤cü⡲âцï¨ê÷è÷öÒ[ÛÄá’Þ6àÝ›¯éWçbñv·ŠÝ‘Â4¬6‰9êzg§_ZšìÉç9É. $Š[èžýØÆ%„_zåO©&Ù£²e/=´wÖS[´Oy ã`K©àýÜô÷«·GìšeÄ‘†#,¤¦Hü1íU­làÓåX`‚4Xœmäž;õÇãSjrÊšS¼r8?xyÛµ4õ±NÚ×7–Aºá@,Ÿò*í”êÊÅY0*£ƒÏZ‚Ty!@ʬà Ù8 ŠÓŠ&T2.¥#ŠW¸kÔÁ¹‘^åÂ"‚NàùÏùÿëÒHªÍË`® ¡?OJšñÒ;—"îÌvF9ÿ з±Mð ˆq$€ªqÀÇ~ô&9­JxžâéËå#„AÎîµµ¢ÞÎ…ar[ŸÒ¬Þiv‘ÜÈñÄç-‚sƒžh»Ò¡EY 2ÆêÝd²R0¹!ApzãîöªfD²ºÍ0Pq÷†ÒÐâŸ08[s>ê}FÊ,dH >b àsœóÅM¥jrßݪAƒ#.“£ž¿ËŠš][NH½ÜH-“ŽkŽ q&Ò›ä,à¤}~½ªãQÄž[ìué¨Åg1³‚9g™q¸Æ»€Ï©®›AœVÈ•dÓ(ÃI®zÂóRðÚÊa°V×4žd-—SÆA_­iiZÕþ«¯ØãL ¹|².áÀ<Ò•E$Í ­c×h¢Šä;O–å•Ví¤ä•faŒç §ôõ«š>Ÿ¨k²8±u ÃI!©ÉÎ{ãšÁó£6U,v`äuþu{K¿¿´•¤±—ÈŽ@A2.N Ít%©äËU¡×[h2iêu cSŽhâRv),sÁ-ü†kŒ–)®¯¦‹ù*£p^¬O©æ´î‚ÞGçj­ÖôÍù=OÊ¡±w—qË XÔ£Ц×@ŠeY4q"¨ŽÙ•FÞ=ûÕk‹gÓ'Fˆyiq•t¡öÇÖº™¶Ï³yQ…ÀëÇçX—òê]#ÚHÆ+v —³Ôã°Ö¦åò‰8D!L€¬˜2¿'üŠ¡öGco’e%±ä“Å]‘ »[p,‰|`Æ3þ¦՚†ÚXPæÞB­ÆGc×ü(¸X“ìP7ú±€ Ç¡à*Ä”(ÍŒ`çš•¦YÌ3ÅlŽ$Ï%ð#ÛZŠ<:8c¤•ÉÇü)‚²bi$ð·’Tj438Rúø5^ãEž×SžÞà Ž9 "¨Ê0㟦=jmV>&YáC:ÄÏ—!›Ë­hø¦³š'šRÒÜóI<ãœàzcjd[Þ0€\IŽLBœóøb›p-­šbYŒM°=sS‰¤†–ÖÁÜŒ1¢½šK‹0K©Š@ dÿõqKR‹ÓÊñÚî0Œ1–ÁùOÄzV•–,±‚æIÍ`¨{{L—y"V!ÎÓŒóŠÓ:Š¡M²àóÚŽ€¼Éµ8ésyŒ•#‚OÒ±¦d{ ;ÌÞÈ © sßò©nn^ôíù+Ë9è~•ZèKw–(êŠxÆ3úÓtQ¼H6û”‚Dm’½F“ˆ÷»ÜðŽBã­rÑj²E Â# $mœ¯ËÏ=jì—úì oX#e82HúÒ°ËÑuk¼ð¸˜/¾žÕ1teቜ@ÈÉÿõÕ Ie³@%òÁ%›õ4øQ˜µÊ ubLa2Iϧùí@Õ‘+3, 2X}íù'9¨–ä¼[âbFHÈ9óNšê-‡’ÎS5KL‰ÝW>|Q™2HL)^xúýh –®Äw¨D°  æÏJ®¨ €„’ ž•«s(í¢ØåIÚ2HÆ1Ÿ\ÒÏc É1Ìy$¸€2ƒ1$)$œÔóêzš›{hoî Š@Ù-!ÀñŽ•3}†,Ïxë ÜŒqÓŽsYR]Íp’ÃmMm–] ¨Ï>´Ðˆol~̤ùåä`6¯r*If0Ú”Uû”Ÿ­>Õácƒƒ½NIÏÚ¥–ÓíM‘¶J|Í×iô — ‹,Øpg‘ÿêǽS»¶´ $È2¯EÈóZ1MiµU5`2I~F:ÿúªÒAär(òÞ6\1FÎ Å!¤giñÁ1L©ºB3ÈÏ4ÍVEtXÉ̆@@'§Nßçô©mí¯­G’#ØìpAæ‰íÝ®ãšúT.NEÈš.>Qšt®÷óïuF8 HÀ‘øUÆc¢ÊöaUÃCÃ)SÈÁèRh¶V7ẕÝÝý™Y#±§±®SðþŽºT¯ üW2(,!iT–#œù>ÕVl™Ê\j*¥T3ÌÄåT PZ_ÌB]˜±ÏœTɧ•RETfÆFŸæj¹• ùm´çžy¤Ð\ÑKHdff“¡9˜@W‘¤e8Ð`R!Ý䜃´rI¥‚7¼ÔZ)TypÅç'Þ’*NËB¬°j!0»!8*„ã"‚ár¹•dùÔŒ€FϵpB¸ @uÖX ?Ú™7 ¥²0I‚o}Èí¥5)i<¢Ñžäzçüæ™{w0†MòÓޭϦFêÕ˜Á=¿úõVâÒ- ²8žU©Ü~ŸãEÆ A§í“+o`ä6 ðöªéæÛXÇ$ÈI1(ç÷?Ξ!¼ºòö$HBóóÅKgv•¦SçÆJ¹ ý()ÚwÙ|Á!ÜY‰lnäñøŠ©kosiæ¢Ä[1ŽzVåqel%-µÙÁP@$ŸaýiÑ]-Ô‹#$Œ ëBGUà¥k8LRho¸í"È9Æ[ €sȬ®ýjõ>QWGÚG'þ½hèþ)Õôu‚γªE($ Ät=G5¥«ø;ZÕ&»Ôõ) Ìe¶BwÂõœÕ-UˆØãnDfÙ¤$aŽ:œÕ!\ZÄ^!¸¤‚ \K8aU*ÀªŽlâ¥ò‘!‘у¥ˆ9ÉëH½Èm•mÈUTžq“U™™/¥ŒC‡ ;ôýOecÄQÜ\¾æ“’O?–=±P:-‹±fà-·¨¤߇í–ãVŠ)¯ÿ³k¤±Æ äc8®‹Å0Y-ºC«I¨Ý©Áf0lãÓ€:täþÍé–sêó2XÂ×0$ /Aþ{Wcñvµc%™°X-£Pˆ%±Žq“ôªZÞ»œL°Ô-ãŽèÛæ ãó«ésö s3íù>TDã$çó¬íYÞÏW†B²G˜Ù!¨å»wžÄíRÙ¶iX«›pO{jÐjò±Œ°YR5È{qê+J[)]Žg•E“Ä|©‚‚¸Çèxê}ë6[µyra Ë&8íÿëÍC¢j];ìLÄât@ý–dñMX/c»χ‘a8]¸ÁT-Øõ=kW·´Ó¥€-98V•ýãôÏæk¯û¬Z;ÌmÔm&F‘A.Hϧ$þ5Äês,rÉ:ÂRæoõ`·Ì 9ÿ"†]¬:Ò ¹®Œw—PA ] œ|ųÁÉö¨ÛÃWÎ%˜_íÚXª\Ä)õô$UM6ì[Þ0¾v:}ÙÁÙû³/={‘žßJÐÔüMC:Y³\ÎùÛ„ sÜû « Q'°sež,‘Ç‹– ¸Óhú÷Z–})bÿIÞ–ÅDˆÚ=óÛÚªéZuƒø_íNâcæ9»PP“ÏQüC¾ QÒ%¾ÕR7”´Öñ±b…°ÌyÇ×k6ÊQ%Bšv­ý¡t¬h’ã%º‚2:‚}ªîkìòKÆŸe"'cŽ­èµS×g[ÝZÞÚ'e2%ÏGSVÒ(­-6Û.Ë™p•Ô@:Ò¾£µ•ȵ[øæQairH@ÈÊD½2{p=)l`M6ÆT…ÖXٲĂ$ÝÔýE`[_x¤•ã&%c¾pyó÷}kGÃÙÔ®¥w` D~áŽùúP›¸ä’ކcË­|×7–«å–ŒgkМ~U²úN“i§ÜK ÜÄÅv‚’IçŒ QÓ–ÞÖ[v;¨ ç=1Þ­Ø8f¯²óa‚ª€Q?Ýê úÒ»`ík£ž:jÛ£Ü^BÞfÐWÌbÀþ'¿®k Öôû;:Ú@$• j ùX““·éþ{Óu9dkY!‚ÐÈÒ)ŒdîëV¬´÷²Ñšy'çÚy9 ¹júgÒ„ ·c›»Òî­š…óÜÉQ›$AÛƒ[ÖPÿmZÜ]^NL‘³¡Î"9¦IöéT滄H.ï·›•ÂÁj#Ã?Î+ioì¥ÑA3Ä’n ¹ãORhI•'ta_^ÜÆÖó]—’ä8à篩÷¨‚K›Y5[©1e£RAP£?b3ô¬ÌßnŽ}AÛìêà#N?ˆ‡ûUÛ›a}3$P“ŸE”úqüŶâßDSЭ¤×&7wCÌÙÁ^Hè6ý;Ô2ß\¤÷v0´“ÚÁ+*\–TãƒëŽ™©à€ ¸4Øn® ƒ%žØ•*¹ÉỂ{VêØÃg<Â9ÄJ3€ËÇCŸÒ‡¨×ºîCæÛæ§’Qa¼òH÷ü}*4¿‚G€ê~Z³ÖñX~cŽ‡Ú©ê±³Zý½dAooe€Œ¤¤só/çµhé^Ò2ÿ¦\(’K†QƒžzôéÚ«b/uc5µ·ÂÖöÒI,!°ò!ã^x#ø\´¹† 2X­NHáBž÷úНâ TÑ&´¼³«™vL£ïH? »ajíSÜ”,à„hñ…_Ó¯|І알K==µ»†i$h£@RY—†÷§Ê?ZÞˆýеDCmýä–é†áç“øÖzÊè—÷¶Ò6aÄ‹8]è¹ÆsŒãœÖ²k:ri®ÐÜF`ÜÅœ9äþ<óS­Í-m¯^Ø>­§\B¹†2Ñ9LŒ§έ4²½êH©ƒÊŒô{3{ú È6ÿÛ—ñÜlKhBþèªrNzŸoj·©%Ì -©o26¤¸E,Qy#׌qURšºWK8.¥s’-ÔíyàHþ¾œ³áK¸´Ê&Ñ$PQ›•Ê‚éÔÖ-õäØ,l¤Á€ ÆO`z<9å%ŠíÈ‚Qùõ'>‡Ò„î§Éªg«\ë°Ü*¬MòÃF3ÏÒ¹»‹–Õ5«k»d& pQXÎĹ… ( p9úûP‰œ/k2ó»À€ÈÇ#8®gV¹•µëXlãInYYIÚ‹¸ùÕ¹ím¶—ÒËpr’‘Æ=»sîOÓŠ‹H¹±²Ö¼-ÊÌ졎ZLô#ðâŸBh·?…µ+»ˆï'Եʠ@ LñÏëMm.ûIšÊØN'·¸r³1\É¿îÏ|óֺ晓~@szìqq§Ã”+pXüÜñB»-¤–ƒgá ^R[,Ïœó©%€Ü".!( 3ì ¹d’_ˆ!O åøÕ”0²ª@2@úcž´8´B![{GÆT¯ (§ùñPÅ L¦HâM§§cžzÿõÍ^ŽÙE³ËpHÈÒ²µ—{-2âá\(=@$šVc²Ü£¯ÃjÊcq q0‰g±qW“Åš•Œ"­ I¤\’3¹úÔ·žµ‡ÃÒ«È#Æ%’ê^Nî¹ïÇn*µ­óÝÛZÆñ„¹–2KBîñï׎R”¬È ·Zµúê×1‹G˜¡¶RKÎI÷<Õ¸¢™Š’¦à& >ƒó­ⵊUa+¨Ë z +«3oîÛ;ƒÿÖ§Êɺ"DúåøÑ«1#æôÆzqéQê3yQ6÷\‘È'üûw¦Ø¤Éªê\º4hŽI“TüSuemc\æI$pR06ï#ŸÃf“ˆ&ú´ë%‚/1”òÇ× ã9Àí“V¶Á¸¤I$p@ç­I£?±¡pâWùÜu;³žµ Ü« Lò0$*ôÇù5.-•–æu¡‡ûrç P‹ÀÁ#úНsrº?‰Æ¡}†E1:)pOù5wNͨ^³# T¨Éxý=kFk¨Q‘\p ÓÖªÌWBËãk;… §Ù_\JIÚ^?-Õj©“Ï|u+éP݆cŒü‘L÷>ôž²¾›£xæc!&(ÈÂF<ýMCs ­Þ´/tò;|%ÉHI÷1ÐãŠ`jêQµŒ6kœI4L s¸±YF09ªzÆ¢–º½œRG¸º90׎´©u 4Ö»#v ‘“rq“ÇTØ.ˆ')ws"’%Y˜;vâ´æÚÎ?:yDq¨™ô¤œ‰n¥ÄC*‚Ç¡åÏJ§á+4Õg—T»!æ ˆ¬c$tõâ’w1 6×Ò™-ÁÈb¤©µ;rºK…nõ?•Gâ4M;_±¿Š=†V1ÍŽ'‘Æy9ü)Ú´ÌtÖ;B9`£Wh!³Áõÿ=ýê·3»Z3ñ\Ì]Õ·ó7LV–£s5®ž6´lŒ'5P¸™ä’WS–#†“üê{ÛÓ5—’ªB€I䟧¥gÍ$ÎnX,¤™-¢‰?w€¥Eej—WÊ"]#É¿#ðC)i§hã;#‡ŒÓ5£¥Ïƒ´SO&Ûäîxþuh–ÛZšÁi šŸ±Å“Ô„ç5^ÅBƯ½ÀU?Ïô©naÔ];»6Ž4ÁF ¸ß=]Ò  4d •¸äƒÒ“vbJìÒ2ýŸL2ˆÐ3±'Ÿák=GWÕ,õW• µhñ[©ÚΡ‡,{ý*‰®´ÛèrD‘·†ç®áýÜ7Ÿòâheò©!”ÿ\ƒSÔÑ™EVgaò|®·×°ZŒB³ì§ùV)ë®"#£Gå.¶GøVü–Å”´d‰ùGBF{g¥t³ËE²Äb´9Q?xŽ;úVT öˆb‘ƒÄcŒ‘9&µµ6örUÛÀÜÇòekso*ÆPFNðØ’?ß­!½ÅÄ‚+«–uF (óe¦êÜí p+BXg¶Žêq$N@9uo™[Œvàý*Þ•i ZÃò9˜‚䘞ý:çë@Ú2-.žëÜ;U“åp8ç?ç5uœ#1ÔÆ#È 29è1ëõö«ó¢O ÔR0$ sŒ`ŸÐâ³4è^âÔÆ¦14 ,ƒ8î ¶š\éRÚºÉm<°ï •<ÿרã³7–íqstîUˆec>•-ÝÅÜë»fšBQÆrª3ÉãN³Òîaós¹J€N;ãÛ4\LÓ²tÓîc’Ïj$à vü¹éU¢•µ‹éu Ù¢"3åÅ\€¼ôÿ=êytæK9½Ó6K–<ž¼g°5‘Rèñ´(–VP¯>´\òñ3±ò¥0 !Q•¬«¹'a=»$Hc8\9=:Vô¾R2¢’4s À'Ú²a5+Û¹å .Áƒ´gü)ÜVe‹X [U’`ÅT)ÚǑӵU¹°°O,‡ ÌIe' ž¼R9[‹ÅQ‘UA]Ü–=·zãÖ¬EoÜŶ‘*ÈeŸ^)³¬ t‰ä.ï˜ôúVt²¼åc;¼rÕ½%“É Áo?+¹@”65Ìk JIh…Êm˰^óÓëQ£8–(‘eHÙIQC.3튷 »ËnneeBí•V8b>œñþ&¬Î”¹Tw(Ux+‘Ï´Ës/L±ŠöãíR#yjquÔžj]z%ƒHÛ2¸ Fž¿áZ~u}%9$ýÚå•W€y¨u‹¸žÌi°¯›s,˜PÃ%Ç_ñ¢ú‚•ÄЭnQVAkæ0|Ã7$I>Õ,±êrÍ"®›£´—àŽiÚd:lÖ–öþPiIóD˜åGSœöàWLñÇ î3üÊsµzŸ¥&ÊQÐóíF·×tøî㎠XãåÎHÿüôâ¶×L;Zi´ø¯œUšmØÁ°?¤¯±2i#Ëa–æE¶´…rð½ cú÷Å[•®¢•ìãeÚ@ä~uÐkpi¶ú”FÎ ¸S‡B˜Rx úg=ꆓyn-¥©»iH3†¦ôd­JpÛE0¡‡ ƒšG·šÊWh-ŠH§ƒnzÕ¹õ{e“bÄÒö¨°9Ïæk)ïçxO‚ò©Ð»zŸ§¥!ì\1OM4³*DI)ƒôª—2ý¢X½È|‡‚4l‘æ pÆBI##?J}ͤF«nÈíÀ*2hØW¹e Ú!%źå‡‚:rj]VÊÿHºŽîí)‚ #lƒ™Hàýj…¹˜Ç,%b3+by,?Îk¸»³}cÓZil¯F3c1ËÀëŽQP}ýi¥q3eŽå"»_1ù‡˜B‘N½ëS±’É–æ9£®[ÏõïÚ¯3Ü$1Âðì1€®$\`ƒÇµ2[O1šY —`ŽO·jEXA,¢=ÒÉòžáE@å­µ9YD³@ ŒòŠlް@Òm!øÝÎ}kWN³‹ìHUrIv>¦’ÓQ.šádŠ1,,8g“¨'Ú¬ÚØB–í{†$€Ã8^{ñïUõI£¶º‚HÎf* ¡ ׯáNµ¿•àf1Æ‘±'¶€?Îh› Bߵݪy®AP“.àۦ߮k,_Üjúåþ£vù¹U*¡FЫÆ1éÞ®Åt—ª )Þ€Hlú«:öÆ Ù§Wt˜cç½[°è¢H6É>áàò~•B؉.¯&]é¸ †=jìZhke’k™%]¡‚–ëÒ¬EhZÕ±€€ñž(¹62ôø þf ìNÒV2íÂñ«Zº*Àå@Ø@¬r:õª"¸¶R±lhY‹mgÛƒO6R´\̬Äeû£üý)£¥Ã¦ZjÑÍ©ZË{d–ˆHF=ýþ•kÄÚ…åâ®–g´³X‚I6«õ<¯éÏ?•dÝ*+T㞀kyô=2ËèϪÃtáŽ9Þާò¡2m©ÎÅj—‚MÒ„ ¥‰ãŽÏô¨>ÉЕؒÎvÇZÒ¶KR6yh,GOjŠPñ[ºÆ¨KrŸéH«XÎÓö@ÒÚ¹È2 äÿ8©î­`k‰!QˆÇ̬O^µQ,ÑI"d«û¶ÃœþʺI4;iJ“$ÀÛÃGåM&ö®fxO[ ÞÜ»0‘ÆU”gò?ã^´|{¡}f[¬Í°2ÛªæBÜñÿ×é\-—…téÚÁqpY‰V\c‘éV…4È.d™®n€€rƒÇ¦“™ËøªOí}BMBBVy¶dc ªvÖV×ÖÑgÌBÊT’UÿZÐÖJÇ|Ë“ùºFº}n*†‹+yAUŠÍ´À=èl6—¯7—uuº00LcǽKmoe06‘™P΄‚`z~¡šé4©,d›qrc ØéƒøÕ Í­vCpæ7–=óHï´mÉùñÿ<Ö¶wœÐ¬!Övm¤ÉðëI®ÝƲG{4챌1ÐóùÒNëBÖ…K(­m´á2È…ŽÀ[!œñ€:dûV<º[ ö7Ð]–,±–ÊsÐ u»£Co}3\ÈŒ»¼˜ÁÀLã'ëõ«ZîÔUó!Yƒ(X¹õãóÍKeµµŒÓÛæÜÈÑÀ®ÌN2~ñúö­Ciž‘´q‘3|®üÇú`jm&9lm'œ ”IË7¦x4¶– «öâø* J~Tž½ªÁYÜ­«èÖVPÇqu;†ig–céU´ #û-ì#BUf J¨çþ¿øSõR·÷Ww;¤R„û;ñœÿ¿·µti¶íÚÎÞ&Ê HêÄcäÔm¸;½á½üI¦ÄdùíàùUíNO×µZ»ÒS@Ö­L,Þ~a1ÜëÐçý¡ÛÚ² ¶Ÿ¬ßK£]$1*~ô¹áêsZº5V›P’I/Þ,î“€ªHàv¯JiÙ„—ºMŽœó¬×N³LX„]ØXÏ?N}ÍjÆštŠ-‚)Þ¦rW?wwëªB‹Ë3qÀŒdõÏ_aV,.Ž•£™wã%˜ò9÷㿯v;+!nâ:i™ Ün0 ÈŸ§>ƬèÖâ÷O\ÄZA’°ÂêGsü½+5‹›€#O6ì‚ÑÆ ?Äǹ­›{‹};K‰çšs%Öå7r÷yÎÑR˜Ü|ŒØm£Æ_顭̰‘lܨ ì}zšOéVšn—çÇvÒ‚³DøvcÛúU;«Ø58þÍwc‰ˆ àžƒéÞ¦ƒGÒ­ô±¨]™äe$F$›=:úªTµ6qJ6ht¶Í’A ÂT0n­)ÀðëŠ]^[]:×e‘Uf`]1”'Øvíӊɼ¹–æxs¶wÔã¦zsïWôè­Öì5ÛFÆQžT6rOri©èÚ'Ùê•ÍãJ”Cˆ™1¿(,O5^í!¸¿óšÉ²Hk9ÿÙ€ª«`Úæ´·QÍ:@¯þ±dÆÏ÷ õ¨®®çŽfŽGgSžp3ÍŸº7N>ÒÍšºÅõ—“&v¸@8Æz÷éPé‘^éqÍou`ìKÃ)ÚËÓ¡èGµGUò®™>ö*"Ë?÷ˆþ•wI´yãi.·ùJû• Æ}IúúVêdâ”9‘‹r./ukï»f;Rä_qVηö×XÄâé°@+ÇQ×õ¨5ûT7¬åÚ×ù —H°†ÞÖ\ÓLÑÍØsú{V|Ö–¬Ñ¤é\¨¶#›áó‚¤;–Â’@<{ŠÑŠÒÒè-Á·…#HòŒÎÓ’OÓµP½´e·[rÐÄıFÁÛÇ^?Ï5¹eeau¢MilÎ]Õ†žƒŽ*“÷™œ­Ê»œÜÄÏäÛÍ ¤P.cc‘Îî+^x…¶øÛ`ä“v˜úž)³hÖÏj$8bK:.ݸþôëTÓͳºS$ÆQ·÷FNª=ÿ¥cª––1šÞ”G3¼LÄ`nÁŒ{ÓËÌ‹äØÜ^FÉ`2vôçÞ™zÑÜ]bIÀ–å‰=MhY[\[D¶Ð[F7rÎÍ’ß\Q©u5ÎçÀ—¬f¶fHÄEJ®þ„çï~<“W¼_s2iËp×"%S´¼gæþuÍøKL½˜Ï}ih#g17œ…Š‘×h3ŽM]ñ;[iºE¬Òß‹ÛØä Í€~?žõ§MLïdbÆ÷7‘­Öháê[ïä¹õÿ8¨gÓ£!!Æ×-æË^âA''°'µ2OÉ5Œ¬ª·;|«Øc<~'·‘-ÁuŽæí|¹‰`]ºtü(æCörÕ\RËknÐÁ­¼€US#ç?<ÛÉñÕ㹞0Ai—Aô÷=3H·VV:-¬Ö6Yùyp'µgúˆ MI$i‹qSß àš.ˆÔÐ7·Wñª3@€©;CØãŽõ(‚Haà Æ\1<õãšw‹,¡‚Æ-Jß丵•P0 ý?úõ_í¦a9($™çùR粸ísfx4òL1‡!¸äư5Yîmì緋ɺfÏœœöõ浡¿A¦´,`KÐægÕí/Gö˜Ä†bã·øÒöŒ®Töö7I,¡röªU¤peÝØdJÙ†f„E•ÉRH œ{õ¨¥’Æ]&cm ñÈ ¤däsÏ9â˜5$ŒVï³i$É áz~tù‘/{3Pêmml –×%I#ëYSk& -®ˆb7 ‰°G¯·Ó½l¼Ê–yTóä*œòzÿœ Ì‚í)Ùò ÀN×Cý*¢“c,ïD×z„Ȥ[˜ÔFv÷ô«ÞÛOã ,Ü;Ò=‹&äúuÓ[K´÷F$ J¨Ìðžz×15‘×5ëâäù1•PÄýÓÇOËõ¤ÐâõÔîÎMJùÕ®Ë$›¨gôÁý+ÅúÌ—8û6g1•QBzÕs6eÊ‘ÂE·Õ䵎bÑ©;²"º…älüÂ2  äg?¥aiÑ»ÎD8Ü䳚ߕ®Ô"I †6O½HÇÕaH9y€8ŒWUá™­-™£(†r½Oƹ{…šì4ec*H ÎÞõ©a¶­ #IÀÞNHëRö.2IÖ± VÖ)­/%·¹r„6Q‡_˜tǽsþ½3Çqæª$‘¾× ÿôý;Ä3X.ØÐÉä$€œ~¢©ip]Ã5ܱ -s)‘ÃŽyÀéRÓØ´Õîi)’X®Qj4äFrE7Ão&‹â›I"lÚÞÜGñ’²¿ãÓ5›-Õõ©c#«;1R§¯çQi> ºÓ.ÅÜpFÒ&E<€AÇ^™ô¥Êïr/©ô%å?ð´5?ùõ³ÿ¾ÿŠ¢£•^Ú—Ï{ ;‹%2ÍlI¼ªF}±Ïô«W> ´9Žä €ÒnsÇ×Þ§–Ò[˹4û9 pÇ#4òG÷²sòþ¹þU3xWO1€¡òªIbKí]2µÎÞÆ}¥æ³4r¼BŸ2¨]ÆFõ gœVÚèsÙ—¾¾ÄP*±C“ŽÀñïíRiW/¦øxɦ"‚X°Ô†-ÆAü♫Ú^êW­$Ó2  ÔgŽ}{šf÷0o 4Ù]˜"¸ À“È?ä×Yc¡Ïwkö{6È y†LG^9Ç5˜lŽ©’d)7€ëþ~•Ÿ§êºŸ‡í ³x¤µ“1Æ’q ¶qŸ~=ENæŠ=Íû1,¬Zâê-"à€¡'ß½rÖ¯5Íüò[CˆDDc t´$² ‰eŒÁo§ÚË5ádwœ¨ uþõ¢|+y"G,—2$Ê%²AÀà*-G¿Ô4Ö¿I®ÖiñxþUn  Ù®‹NÒ.¡V™Þâ9"Œ¬ÀînsÇ'¡ÅäsÂæêÝå´&FB[,¤89Ç søÖ{­"»ùª[‚xfãéÀ«:œ»õ©®æÜD•,'×Ûÿ­T.'+b&º¶¹vãy8üý)…’-hwö:C=Ô–rf+¢Lå@ѬÉg¼¿åÚr?JhR}+K»™'–ë~éÝrJáÿ ŽòçuÔ%ÆIÁñ'™§ÜùcTŠÎÞ@¢ÃËÔªqœ{ž•3bY¹Š%g!ÎX“Ž?¯zdY=¤‘J­3I(ù°TƒÎ?Ƨ¼ñ-ö‹,vöÒºÀ˜YA'ׯ½P×d¶–âÒ;qåÈ.%xûÝ+@xõ a%¦¥ Ääå—hÏ?ΜS{)$õ2n|G6£¨¬ó§šç$…ÇåT¯îc•É[PìeºWIÃíBÊšTŽ]¨Yš&Ü@ÇÙà‡ìÒ,‘¢ Ü8PÓ[Jêèä;Œ¬ÂØà‘Å_k!kY&ÉgØI9*{gÒ¬&]PG d„pÍÀoëŠÓ”-í§ØnPF䃅9 ÿ{üûÒ° ŠÙ¢›[€Ì8$Z×ÑæeÃÎ$ûVË«Yå,Ñ®FâpqïL‚æîîas+3ÛjÇ#ùý}é±~ÊØ,r]ΠÉ9ÜñœþµÐiZEõå´×–ÎÑá|±.ÖŒõé~µÍ+3&fØCcòF3ž{zWG¥kv:4&9­|à­”–)1 '¯ÆŸ]EèU×­'Fˆ_,žqÚdéóÖ©ˆ£„.à÷ì3ý+G_×WÔÒÅÁEvùTPHé¥eH ³Îd”ÚåÛœôÅ&µÜ¥/"¥óÄ÷ $×äQÔ·¯ó¢Ú}I`1Ç “ÜT6' ,/æ9ˆ®?)ä~51¿x%cÊ@b'#¥17©šM×#L…ݱ½±ÈÞÝªå’ FV,soEÉãµ0ÜM4ļ1 Š¥F'û5Ä¥%’4Ÿ25l?¥Gek©éV»-¦²r¸2:üÀqÁÀ…3YÔ­®¬„vg_qdI8öªº$¶VÓ+Mb²Û:œüÙ?Sž§ò®ÝÃÚ6˜÷vmfD‹•Qó»g·9#ô¦»³ÑgœmC…fààŽ:ž3 …~àáAûÇ¥P72¥©MèÏæmîþ/ð«V‹%Å»¼i;rIíÓµI¢cä• V`ÈY@Šxh®Bp €J“’øS*[J_nvc`ƒíUfXÃ)QµF\ vÓÑ–æ•ü’¨–f*ïÇçTåÒ^Õ|ëéÄ™ìˆÚ­¬ÂÍ£™È–26±æãNÕ.ḒÙ#%âl1Pâ*×*^d¨¶üˆ­ýdyV(òÇn2qŠ…Éd!±£§JÖ[tÔ! Š-¶ÊzSý+%ÓßN‘]b .=þ•2·tv{pÂ^@b2hÚê„Ï ´¶ò’WeddÕ]>)g›Ê-((ÙuÎʺA ;$q ‚[¢7MìI¤ÜÜZ]‘7Ûöãº+½"×XÓZkÛ׊5PÎ"!v1×9æ¹Æ f /°ü  ¬ýNµe@·3Ahæ»±V´nŒø+y€…@Ž"Dhë†?íëZúT„ꪬÞlײ…ì1ƒŸÀf±µKuÔ.ÞxÜH$ (sÏÒ¥ðô±Ø^K…ûL¬gFÈ„gžO•(¯@“\—#ÓÌÁ_ÌÙ3©`±þµ­áè¥Õ­kç)g–Tnþ™É8ãXfÍou[éœË´\>ÕÎ÷«‹kwg ‚Ê)®m›™#‡¹û¿QN+Þb”“Š]L­L›=Q®lw½ªÈ€0}¾ý3Åm&¨u}$Ù[YÍ ¼nd–y2͵G©¬`³\È#¸·x­íÃa|ÀúŸzØÒÞ)t¸mœ•2’Œrp0?SBµì\Ý¢ô3c_³¬—Œ–^¤ÖìV²Ï¤À¨ŠcMÒH¤ðXÏð®zæÂXn33‘¹LeòAíÍtöÐ[øZ8å$JêÌàœI?¥g ÙuuJÇ3u![kˆÀ(KžHÁÁ©îØ[Ceu3¬¡• ŹÄ.fu¶»•Lb]øA»â~•—u=ÒY™¾Ü—l±á¼¸òW§NÃùÐ÷vVÌKmNúöæÔ¯dhÔ‚ÊK0fÉÁ#8ÏÒ¯êoÜ€ÎÊüߺÜeiEÞì´3ªàþí2sÇZÔ×kÉ­Ù䪩Ȥ>ŸOÊ¢÷ˆKWØÕÓR3¥ÌÑ˺7VÀ6ûTœžGô®^+›¨–<‘ŽŠ«‚O×Öé¥Ò¤EŠ@¦" àý9þUÅÄeyÞ;{O´ÈˆIΉl„•ÙÔD.'Òâ2M Wå#©ãùU=—{·Ü 8ÍhAn.<3j¬£äuÀ ÿ×5”g»2aͰ°Ib8â¢obZ7îeš(ÄHÉ-ÉŒ‡LŸ0üçð5€¢ýn¼›·ûÔCvÓã´ÿOc[–PZø²+»ÉáHÍ®"‘› ÜôéT|[ªÁ«ëÐ9ÒïÈ„$’!žO­Ö¨} 6HâMÌ™œÛ†.WŒdþžõ“1ÛßJ.o&€O‰“È~zwæµ®–õ,Uán6ä2ù¼ŒãÛ®+–ÔoîÚâ"R!åíUà0Ͼ­W;I0¶§eªi™ð¥Â,²K ˆ·Ìù …: NÖ´«K™i#R^C#wϵeYߥ%Ø  †BëïÇ~`¥Óé×S-Ýä³üÂ.Aíùã½'+ni¶hßÒ4ácâ+½.FóV6,¤ÀppÞüãð5¹®XÛOr±ˆ¼Ù¸o8_s\_‡õy`¼¸ŽÞ d3Ê¥¦(Y“ÌŸC]Õö¡kogʸ!‰ù„[²j¯pjÛ”ì4k;i1.rÎI#·éVu W_1bPà‚ŒñUàÔ–Y›k…RHTò‰'¡u[2’褂„ Ð9$bC>,¹*¨Òbwé"`p ôæº]WPÓm´ß´;" € lXzɱºÔR+½ˆíYƒ»Ž†³JÒmïTÛ$fMÊɹ·9ô÷õ 4°‚B^âúæ sóü«nÚÍ.eÔlÄ.N0 ?ªkwnÒdÏ›qwd÷­í<e&HËAïYÊ÷+¢ÔϹҭ#º.ˆêF VÁéïPjvÈd²8 Éóúcžæ­j÷V¶²°šæ(Ãpî"«—‚çì2YQdÈdäñŠˆ¶˜NI¥dR–ÑÒ9žà8ÎTJFO5jÆÛPŠàݪy±ªªÂ²MÆ;“ïQ4êó¸|‚XŒÇS] bv,$gÆ(G{Ò¶ä6ÿV%[{ý*æQиpéU.õ{ïE4V`XÙl;®.xvýÕíõ¬¨%’êîRDJÄn#Ï5»l¡®Â|M».Ðp9çÜÕ)ÕyÁÒ»Emm.Ñ’_o2?ýU7“8‘;÷/$ñÓ·ÿ®¬À…äe$…Ú¯>´ %ævp žô'}É’Iö1|‰•ØÉ¦Ö$0'=êÌ·WÙ†’䃕9=¾•VK—e”{‚ `V%º²[nQîwª_$z~\SW¸¥(ÚÈKFHS%0\úVÖ¨™¬I‘‰u%HÆ éX:”‰Ç` ±ŒœúV–˜“À‚C 2‚IQÆ = ¡º· 'Ÿ2 °ØÇi'ñ«ú.“a¨_ÛE"S2«aÈà+ÁæÕ£ÝP‡dóe¤ížuþ³Ó Õ-¾Î È³ ,~ð9Ÿjn多Lë¿á_øþ}åÿ¿­Etø?Þ?¥—37öqìxG‡´å¶XAY]î#IÐüþ¯Zé ²[xÛ#;™¸'üô¬¯ë"ÿÑÃ{$YŒJN9á½ñþy­k›û[8?}s  ’Húgó5Û%m2)?xçtäŽÃÅ7–×0†I¢[˜Õ…¸éõæ¬ê:”Z°°ˆ2¨w*ã-Ïÿëw¬{ I/üY5û¹ŽÐ@#È t8õ+îs[·úm¶Óko¾r¸ Tà øsß·ZË©¬v1~Ì!ºO’áH ùlnS‘·××ô©¼-¤[^ëš„’3J¶." ʨçùzÔ˜KiâtÝ3`—$c×ô¦x^öâßÄú¤kí‘dÂŒž˜Ï^µ=¾+3¯žù ƒÐ¼Ã¦8¨Z(§LH‚HJ•`£#û‰çûeŠC&@ãØXŸMÇùVTº’B²ñ¡ŒÎy¡9ÿõÓc±Â_¼¶úö|‡ ×Mdë´ãß­z-¥´6ñF±$fÙl `ãéÖ¼ÏR"çI{øäˆLnLæÃ(oO\ñ]†‡â®Ö8þÓFŠ6¾3ž£nOÒÂÉ­N „%@!‹œ–ÿ9ªÆe¨Øæqo4yx§C-«>M^æÛ™HÈ! ÿÕSÜÈ;u‰ Œ}~µv#©ÉØ©uFþÔ“›tQò¿'æ÷9ãñ­Né/ì¦müÝ«‚§€ÁëõþµŸ­_CìW*]… cÓ¿}ÿZ¨Ýë3[†k4‡ÍRT™~psŠ—0}Í? x-ô›}=DvÆ%o5¥`»†Iõúýjk¿‡Ô i’ ›·PP~èб=Hö®fÏN-”Þ$FV`ç¶?½íßê-=.u)¥H]`·à9ŒmÈÿ V/-‘«{äÁjÎ4®]‹8\’Nzâ‹[“q¬¢Ž9c¶".õ 1“Ž„ÑýcorL$ÎÈ$úTZs¦›uqc"+`–‰;œƒøqîièF¥™­•%"drP…AëÚ¨ë0XéðZ][…r®@=øÍk]Hò¬l"Tb7p7vþ¾}j®£ew©Ù&›—ŸvÓ>D|*ŒŒç€=9§è ÷3ãŠÑÖ9¥F%‹7]ØúzаÓÃjXÝL^MÅ‹D™sß<äzV楧.‰il’;=ÈŒ™0@P?s¡ï.mmƒ(ŽP$r'§õζâNäâêÿT˜)<«a’%Ÿç©#=+]7Pµº`•‰%\t'¾×^%˜*Eác (Œà*œþ§®jÃÝÀí¶hã`”)Àä}0qéHgomqq9»…P€‡@s"ã9ôý+HëhðǾš<ØÆD¬¡qŽHëùÕ—´†Þù.c¹!gýÙd’z}^j ¶óÆbAÈÁÛßñ¦ma<¤ê7s«Ë ?(^öô­-*Ü‹å ©=£H@PÎzƒÁïÁ?Jdmæ¡HŒõ…W»P~ei 0ÇÍØäôþt'`i=á"ñVF·6Ò¨RA‰0çð<G¥pz£5;{r™Œ ̤`õ#·¥ø–öÊ'ŽuYíÈØ`xþ*ÉÕ ê…õáX.™¼ÈÀ9qÔûúÕJÏQZÚ\´P4QŠT¦IÎI5&¢ð%¼S&áp„`ôÿ>•-íëÜ¢´/æmØùŽ¸Çµ[{+–Ó¦{—ßçpAÈéž*H-5‘Ý‹Èùf'‚j+WežBP1%H ÅMÅ`Ôf/‘ÔšCÔuUõ4Ë{†Ø¹ –VÉ-ó¿—Ö™0gÕgóqæR nJûU‰ÃM7–#éþxü( $Ù‰°ñ!*ØÎ­iZJ“¤-$ªDª ÿ‘Yp\I*ý–ÙÕÝAŸá*VŒZ´`”ÁÞs…©ÿ ,\¢Gº–ä'›o°> õ#ò¥¶º0#¬l$‘ßdc9ÎqÍiA`º”Ï"Ÿ±Ù3~ôƒÿ^´VÒÇNxcŽ$1†,Œ°>²;Qa¶d $‰^9$Þìf=Ï>µf ±[5¼;0#©×’ ÍF+b¬!2H@Æ Îҕɶ@fÛ°p#ùâšb¦ƒdÈŒd#i :t¨í-"µ–i&Y°¹9­I¥pýžÖD&O½‚ ?2ÞâéM²"˜î™IßbüqLÌÄ–@r@è_¥U²ÓE½ÕÕÍì¡RFʨl±éÖ§^‡i.Y¤,8Ž1Ȭ«Zhn›P$^3'&J76„±FÀ‡T‚1É¢YÝ6„äñ¸’O^Ý«Üß]²Êñ„prF 5¡<—X¨… áߦG¥^Ëb¯„wº¬°DÄŒªŒ‘V¡¿{-Ò*£ƒ»fæ`qÓŸJç]ÅãtË@ã"¶lïò8eTÄ¡B€x$?JÉ»™ó–þùíKoq†$" È«:dWÓ̪îà9¹Á¬·½Ÿì÷R‰…6–ápzuükKH»•%Y’F(¬@ä‚{séíMòôAv[ñ6•fšz‰.d‰ÚePÒÀ¶v÷öªÛvNÆ7©wƒ€r=ãF¡¬Û]Ëmm¨[y‹ç6¹Ç·ÐѨg¥²Ëi•ec½Y‰¯¯qýi!X4 ca!™ÕÁ'¿áW¬übºv“%¥µ 7«!Îy@ÄžHîG°íˆJ‰È²Ì’Æ»{(¼+¡øv=^å{·çkŸ0‰8Ué‘ëúÕ&ûŠI>†E…ÌÎXÜ6ne!ÜçžrM>âxìîãQ9 þPv×Pk½Aí¡´ GȃƒÀñ5R[™$·’gT3®w0_§jóë*ŠVJèë¦ãdÞæµ–äÔZù>x!ØwojbX,º´×7ŽÎdJŠsŒ~#Š«áíFÖöôF#"Ù–W9%¾*æ©)²ÖTÚ2»Ê ¤däŒ~ª§NQZ„êöÜg‰e’Smù¡ƒ32ðPq×f®øVX…¼’+a#sÁÇ?TÕJA¢´3“;±‘˜dÈÛOOaÓŠo†ÂßÈ 6Ô@7·Mç\{Vº\ÍÊMm¡RçLºñ&­+‰DVÆBƒ#8c…€0h»’êK ˜-ãˆönÀã§øTº}¼-i˜^U8 0ƒñÛŠêêR~é‰e QL Þ[Û¬j0Š»·SÏ\ÕÛùQ”$÷‡aÜ,]rx4é'H®!b÷1ó‹iÇ>Õbö{E‰Yäž_˜œϧµ(ÙÄš‘´‰¬¤-¡ÌðMzþ\d¨ØN? ƒÁÉo=‚ªÉª¤˜-!€(C×<žù÷ªI«Êžh·Šéá#‚?*ͳÄìa{»ea•`ãÔSérZLÑîN›tí5µÚù–á†3Ÿ™vïþMg˦éÐ+Ip‘ '$öü šÓl0æV¾˜¿,Q'¥Dl®ÌßhþÌÆqɃêyÉõ¦Ó–¢V]K X^X•]=¥·Dƒpäôsz­°¶Ž9-íŒÈ`°ÿ€ô®±ï5Û;#%Í„sB&Ëø5ÏÝjk´f…á NI-¸ÏÛ‘C‰Q}†Ù*½¿–ÊÒ9@2ÑaTg8äŸÏéT.ãŒj-›eE•€dëÆF}ëJÁŒÑ¡.s,±®¶>^Õ•4OuªÉIw9$ *F}@Qü©TÙv¤u6ßA A"¶)",ÒŒ:µ}*í½ÕýàT½µˆª€ÒÉ>ƒ‘žç5nÓL™á%Ì ÌgBxûØô=é²x^ᜪévÑÜ<“nÀŸ'ëD•ÖÅ'§;¤<Ö—— Ôq˜çÆLyþÖºíVÜÁ²EÔI`wƒ½lZxvþg꫊ÙU™9$Šæµ½Wì^ µÕôöß2°ÈG_è}þ•¾Þ;±HÚ-®¡¹8Ûˆ–cíê)ó!Ø’ÿ@Ò­·­—{`n™›êMs)imeâÑm ‚XÖB€ü»©u-kV¾½e+ý™.A‘s)cÙM.güNi™Á;HI>Õ-Ç Û²³senoåmÄ.âKo#»¥F³Ú±ùÄ`pK •ƒrí>¡p$.‰:Ãtý+ªÑË`J€àc‚Üq³G:öJ³lIfÀbï1ZvÄÃt ¹£ dä÷ª’í78˜à÷4Û™æŸV´±³E˜‰‘Ý…yäÿAU)Iijá&/!s޵OW¹t9y2 `#%‰Íl˧Iab-¬."žYq¹¹|Ó ëОk'û6(fYï ºŸ#Úƒ§ãUdLåÍ+³×I¹¼UšìB2"zÛÕ4èíü7/Ù­­ÃǶBB`œO¹«ÝAbr Œg€jâ´­›öøò0qTž¤[C˜™ÞK¨®•RÊ<²²u­nY\(UFˆ£¶pÁ-PÝhËÂKSå9þ>F>õ\Óçe†tÌÑŒ5”§®ˆ¤r®ú†š¦8BƳo#ð©q»²«Ä0ÎI?Ä};â¤_CqnÑÁ“…DÚ¸ôç×¥@òÊg´‡Pˆ™ ¯€ëïéE¬hå}·útpÚK,~Z¨± ç‰ÅS“DÓY6¦”bØPÜäT×ãÌÓe›ÌF n<ŸOëTîåahQ64L\0n£‘ü‰éB%»¡¹Ñn>Õi¼Ù©Xy%süC¯ëW¯¼G¬¢ÒA<ÎÒ$ÏaŠl·²,fhJ3’ ÆÄেèk^Æ ÒÌÝÆ_Ì¥G™òãc:ž¦˜›3ô :ÝôÖÔ¯·Os9,NþŠ=©ºšØÝ@ —pxÁŒ’:àg¶¦Ž+Ûki| Áf$™\†sÔU*;; ŽìUIÜÄc{uÍ±Ï ™WÃBÀ}ƹ*ª9Áü}ë­Òtë;m*5yÔ’>Ñ““Î8Ís:V˜·Zl‘ÏpcLÊ;a¸çðçüгhš¢F¶Ö‰iu e¶Êx$~|ã¥+ÒoCRïS‚Éä|Ê’±)PZFç$ý=ª­¦(„^´Y29f)÷‚ñÓ···5ŒÇQ¸Ö¡‹Ê-q’D£=sÎÑü«ª±Ì6‹i$òmD'p\Ç“ùäÐÈ[Œ¾‚Ý#µÝ„€` 9óéV¼ ¬®«-”q¶’`]¼²Uü]3Œp}}ê½ÜööJÓà0P4„àVôψÖÚ~…öHìä7XØ.bïÏ­8„£}Ÿâk×fâãzA &I9ÞAéÀì+™{¸í5Hîãg ¸ÆàŒ²Ž9ýJè4ûk½I¿´/ei$. òõ?‰éíLÔtÂá™^EmÀìààt§a1Ñ œ9ŽGl‚Ê:síÇ5JáÞ LÍ$qƒÖGÆG<Š®c±i!’H÷`•Y¹Ï§5XÚ,¯ó»9,£.ÙT—ò.À†òhæ(éD°i9Þ{}½R|Ïq/œyVè¶v‚5yYrÚÿ"°õYb‚ÌD¼™R{ã½0åîGoª<—Xµ…p8' íS\é:„’ $¹q 9Ub¨=p9§AgF7 f2sÅlÁ3_‘PJ«Ÿ”œ“ë‘I±$ros=¬ÞMÙ,Ѹ AÀ9ër’%+W#?áÒ³5Ò²jÏm NÕËê 'ôâ¶ì-š;hÚlÀ¤ôéþsCc¶¥g¼Ò,q˸åƒã5i.šaù|¶\àtÿëÖmìñE©J°—!±µ@À\Sm¢¹ui~^ì.Ké@j‹‹isat¢Â|+dù,rOÊ™«}¾âÅÅܰÇ`¬XÉŒ}8§Jó@êÁÈÆÓÚ˜u©Rå™’ ¡P·àœŸ§¥%رm")22—• àÛ§Õ‹?^èq³Áq±$91Ü '¦=‡~½+:ÒUYžp<µRr{óéU56Xom^g&=¬ ÓÞ˜ëßêþ"µQ4v*6UÎwT¥ÌD=ÓÇ€ ©S€ÃëUoï#þÈ1†1¿Þxlþ…Ast÷P©!ÛŒ éùRnàY»½ˆþìo$Œü‡¬ëYíå»p$ÈMVždŠÐˆß÷Òœ3ü'·ùþ•ȉ Ç€eÈÚËÁ§ùQ`¹¯¨Á¢2 ªpÀ`ÿõë2{Ë·&¹,„•\Ž•¥vé±s8éëÅe¤°@á••˜09#9?çµ-é²–ù‰lþ5<­=棲œà“åät⬮»ªø†ê(f·$ ËÛ[…ð\S.t«Ë ¶"3­µš Ž ëù})ŠúØÓ{‹k{‘XÕ9cÁž•‰«\Þ,‰lJÄ<ÃÃcÛÒªêSÜI,K4 ÚFãót¦ \tPRHÿëÒ*ÇAcm³Iˆœ‡“晉ËUΖ÷0¬³¾rIŽ!È÷÷¥-=φ ©È€äéšÔŠXì´%’PÂUQƒŒœSVOìKÁ’Ò‘ TñjÉ ²§˜FžŠ fÇ-ÕÁ7m© tLe‰õ5_Ny.õd¶¹ºû$SHM*|±ƒžN?Ͻ; ØìDFÞÖ@navuØ9®mm“íd®X©Âq~µÓÝx_C°·’äø©.¤PJE¯-Û€I<Ö·.e˜Âð­²Ð¸ûÛ6n&ÃÈcHª÷¨ï.JZ•Œ±HXÇ$qDl¢èÂ…ÁÜÜ¿ãU®çiƒÃ m^:÷"†Û)ûº-µï²ïZ¤À©åx'ùñZ:}í­Ýœ%´q±b¤ñ”þD×1m<Œ<¹eÈBœŽý+Óô‡Wµš@Û꬞aydô{`~¹¬¹UÅÍ+{~ [­J!$¶ô>¹“KšDHÁRR¿Lf»-Oáõž“£ÝÝϬ¤·+6U1¼Œã¹ëÓjà´Ô{¹£´]û̬=?¥Q"K©ÝA42DòC fËuÿ8©'¹šò¹"oD$sß©«z‰dŒG¼AànLg¡ô¬xžTš[i•ʽ‡ùëCb7ŽØìgXbWE\€Ü€1úzÖ… Óõ½i£½’8­&—äY±Ž2zzÕ bÒO”íe*[gjÏÑ4ÃâjÛIŽàŹмÄg…ñëÀâ…&„Õ΃ÄZÆ›uum£éVñ›(È’Ž<ÆŸO×°oîZ ¹-¡.%AÖçù×_â? øoÚ¶ÓË=î«.LŸ ­Ÿ½Ðä×.ž–óâIV ”óϧÿ^œ÷**ÆÎ0.]@Œ|¥Àù³õþ•rî lõk;‹‡ßæ($ŽLJ ëùõ¬ ÖÒGvlƒ$8Éõ­kj !†hÁv}ʈé×Ú¡­ # ½K¾'¹†m*+HFæi—ëÏóª^–[w ’L‹ø»óúµ=ͼk¤Å™?ÒdbÏ!éß·~¼Um*Ù4ûè&%®nIÀLyü«'nnn‡j«Òpêhë‚ÒÒX’î72:Ÿ”òÄóצ? ·…–23lÞú¸×Ø~t·âyä]BK?6RFPqÜÖ w× }+F‘(n vÝEÓÖ:œ®mÅ#©ºÌ°”,!Æ PyjÈiUU„jÎ7ž´È,n¯$î®î Š-ªÔÕ”ðã+aâ*q¸´óç51”o®æM_©›,·L“I´•bFOøV°¶Lþþ ryß’i#ðµ„-$×ñÈÞõ­´ûTVVŠá°q˜ã€*Ü“@Ò)Ë6œÒFï&Dy-µrqV#ñV’¸·GxÀV1 ¬ÛùííW|VŸ.9-.I¬H®Ø] "²Áaò„-´qíÍ&“Ü4;«éöãËêU¸”œV¼z¼óœ[È®¬Ê⸷utT6*ƒ%”ýŸaãük«ÒâÛEq8T”Æ7Àè*j]-n«%ü°È!¹–7@!°¥«Œ¶‡]¼•lm.g{’>fîI¯Im"]VÙ9‰`>9¢¹m;ÂaxÁbA O-#zš.OW°8•àµ:ˆN©ªI!Uýä²”c°¯ñw‹&ñèŠRÊ&Ä`Œ÷5cÆ^*½Ö$ $€BT…=Iõô®)d`I' ž†ºù®+­,'¾½ŽÚÚ–g ^s^£á¯†×ÐGçê-³È@ rÁ}Að³UÑì´Û´¹)çœÌpWûsÅv³øÆÒâf¶Ò@¿»^¡N=ØúTÉ+j5c£Ò4«]2Ña´‡bâ<±>õ Õ¢JÓÝÜ1ÀîÛ@„—ºÚÚ…ÓË;¥µšá@þmõ'M¢êÚãrëaiÝsºB?¬oͲÐÒ×3ooôA|0¹ pŠ7dÕ›K+ûÕ(Ö 3c÷x¯jݲ²Ñ´EÛD¯"òÎÃ${“P\ë³]¬‘i˜šLí.Q×ú N+rt,O‡í‹]yq2剬?*ÿ[Ÿ| öKRNÙ$b=…^2ºÍ¨\´ò C”:SµjÒÇýÙ{²>HcãXÔå›ÚãMŒ‡JÓtˆ^êGó$]ù&¹‹ýnêúéŨ|.BGä~5tiÚ¦©>ýNä¤gŸ*>3šß¶²±Ól‚$a0#©5)¤µÔg'eá‹«·3ê³¾Æ91©äûU™ç°Ò x¬¢EÏ”@9«WzÄ·R=¦™nòHxÞâ?Â’ÛÁ÷W2¬—Ó¢ gbœœ}kh9µ}ÎSí³êR3ÊìÈCÁϵlÙ¥ô5IbB~ôÏáë]$M†‰˜Äy!'…5¶±©3ùr¤°†'c ££Mìõ%ÊÚ# í.¡˜9Ct3Æc*Xµ ÖV h¸É÷ÇüñZ²ý¾Ì,riÐxÝÕo"èɾ;ŒžrqƒS4)O›rª^ܨYbsÎ Èþb-Åú¿šÆÐ2ÝsŸzܶ–qû¹,Tç´qæµì¯4K|•–9=&jËúšÒ;üH“šÓµ=Mäð%«Ìs…ÚÜÿOÖ´ñZôÉaTíacpÉædœÁõ®Ž+ÈÄȉo±èî¸$}iš‘ûNÓ#Š ÿJѤº‡3[ޏóÖkËiUœ€‹çäp8#¨®ÓÃú.°öqIu{« 2Û˜¼ÆÛèXž2=+‡ñ jÖK9eše–6rÄàçðö÷¯IÐõ .b·–h^ÑØñÎ61úgüóY¦ÇØÏÔü ÛÏsuw$²7*ʪ=— Ô×'¡yÐȶ۷‹yг±þŒcõ¯QÖî, Óe:„$‘´|È¡Žr8úWnšCËssi#Ë”T$åT…€»÷«Šm“v®žÆ}Ý…Á¿œù€V8^¤z~•×xbÚXtÖ]—-Êî@1X} \dF0.q°yîÙ?çÚ´ôMTK „¼aÀ$ªÈO=p?•J†º°ÖÆCÛjQ_;µÊW`7EÈëïÏûk‘áífîKÉÐG|Á¢˜•O÷O¦;zÕ«Oé÷¯wägr» €38zò8òª·ú}´šm±þÎÞŠ~P䓃Ÿ^µqº•ªÜl¾$ÓR3ºáf|‚!<óߥeÞj×P™ãh­–>QN7çEµ¤i7:z¸8l` šò¼‚FŽÖ£°OéIl Ç}bþuŒMp d— ¿%ÒÛ­§;Ê ”<Ѝ«*J ¤(Au´§-‘vh€ ¨“È¡ ‘G®^<ª&Ä ¯”ÄqZv“ÇÏu+y>b€ryÿÁžòäÌR6…:|Ç“W-ÔùYÍnÌÞ¼þŸ/Q\º/æ¸fû2™#,AÞ0+oBðÔ— —“€ÏÊÁ&Ð¥r©®[ApÊÁ“olf·´nê[ÛQf±ÁL¡^NXò;CŠÝhTY×§Ï[ïûì…¡ç_ÐFoûåŠϙÿ1½¢yåéÓìn¦¹m’!—?çšo‡ü6—v‚âð)¸‘ÄìXöÏÝÇÒ°º•½Ü×·&îáWlm!ÜÀ‚8¹®£M–]sNƒ—-A8PyíÀ÷®ÛÙV»Ðè.o’ÞÐG`q€©Ïé\ëk3GtÞZÃ1b9$åIúv=+RXÝ’7–0¤Ù$œàóÅTÔÒÊæª¾ÕI!‚õïÊ•î˵‘Ï+ßxŠéÒ²ÄÊU¼±µOL×Y‹ao¦ì6‘pmÜ[ù×/¢j¶6úm¼)&É“&MÇhŸÏŒWOÙ{]¾R¹,Ueê£ëŒþ´;LÝCB°ºfŽDŽ €'r|¬£œ{Vn€=åµÛ'·`­)çzžžõ¬òHÊî0 ÚNÛù çÃ,Þ"»ŽD’vòT1 ;ÔîUìZ¹±²)# ¤oŒà‘øœÖ<¶×Bõ£‰ÉãÚ[“ŒnÝëBòW´·žVù ’99àñ©-‘dXå2cb cŽÝ»Ñª“.i410‘²àeIlp8â´m®´Ûnõ›O¤Äp§œðOj«l}ÊX€v"ä ±öT(ïtÈ,¸ùO­ad‘+Ì|A¨%´ oÀD*Fôgž0qÛ¯΋yÒúHîeW¹VdÇEOa]Ä—¶6QcM°Q»9+>ž¿€â¹ëÝ.k[¦žæAçÜ/˜Ç ¨úÕÚä³ä$v¶TC$§>_rx9ëÏ|ÖŽ™¡Zù—.²1bÜœóÎ}ÍfÆKˆ¦1"Û%ÁdÚ¼Ëgž3ÇáWôowsq¨ÝÊg³-´HÞéëŠM‚³)]FãQX‚Íbh†LÇ|ŠsÛµKoâ‰Y.B#dÜ€þ¿h£\\³— pÏj¡¢Å-ijÆÄ·•+.ä]ÇŽ~÷>´®S±•{qsâèáGż,I2 «žü{t¼·±i6«´NÉp ïÖ£Ñ"Ó–{Øoæ 0™Šª¦üŽ9ãñ­}F =\4,a„c{Jø$uàJ–;ès)xó]J-í~Ì@£nùcתÁmp÷MÃ0\0`ãÿÕM¶‚)?3Wµ/ 4lágh>ÇôªÖ2±‰J¿šA¦~µgR¾Ë5µ©–|IµçfÂ;_­cEöí2@­NÎ6ûÓv:»§Xd›{yd„}I¬MG˸S oÉ‘¹ ã¿ÐֲƲB4Œ@˜—{šÁ•M¼é,h@B ã…<š 4¬õGÜR¨‚ѦîN9ÇZõû“tb²?fÌ|£p+~ •}²ò€)úV>¡/¨HZIU$°À"¥mæÃΊÑãÕtøö*Ò* #ϦXV>ªmfÕ’KˆUGÊTÉÉàuþj}3Å2Ám¿“Æ«°@úŽÃéX7-q{œ.Ñ<ɤ†QÓÒ®Ræ"1å!ÕçTº*.cŠç Ã/³ch ªKö–œÈJ³g¾GÖ »±´‹t¦-èʤ¼ŒYùö¨¬­m`¾¶{YÛì— E&);œT”Ù£=Úê~A”P*˜ãŸZT‚)äË4ÁÛ!Ü>óÅUÖüäÖ•c;¯9Ç {ÖÌ@ai“,¡s–ç8É0ÀqpË’  ÁÏÖ¬ÉdÏ ŠUw‘“yÏLóý2*DTž`ؤÌzwýJL å6†ä(þ]óEÂÇ<,|¹£% c’¥ò2)ó$¿hŽ(Q 8$nç½"k}HÂÐßøn ÃCÄQu.?ZóÛ¬A}2ÌÀ)º‚ceý$m!É$±Çò©$ñeïŸå,Q€ær~½jº +neËi.{·$e`@ÁÁ¨>Éqý”²ª¨WVùÏcõ4¶T–÷a¶*¬ ’jþ%B·owmä’‰ËdH§Ö®?ŽÍ¦­¦¥iöXå@ÐÊçå?SÚ­ÓVµìê&£=Í’ö §v<0ŒàÕH4ë­Eš}QÚdÀØœgë]\ŽÌësç…2a¨¬5s{-¤¶fäàñzŽz{W –’>·<ÛË,D “oÁ9ëÏOþ¸«ŒBm·©¥.lJ ÖX ‚¹ÃëÅ2M;Bgýö¬“"Z5—ýpM^o±ŒQF¡“ž(˜2içjš}…s”Ô¼Ck£jVŸgnc$+1cÛ¯Oæ}qÍtbAâ ;/+ÀÉ‚RB£ò^ß…U¹ðÆ¥âx|è¬-ÔD¬¡§—i~¼ Uôx¯´Y¦±»¶™]ÇÌêÆ Ánýù¬¦›qØÆ}+{«¨Š3É^6f,Å8èzÒÒ4Û-KEûEÜÏ5ÀÝ!„¾ëÆÑ­mÏl·n’फ‘´Œ’¿Ò«]i¬’.Ù›hßcž½qÖ”µ¤Þ—2Õ­­Ùš 7Ms±¤%É…YÑ"¼´¸ºáŽlx^™­K];M³‡C™ˆÈb»˜ýÏzµ…ûI´…9œVÑJ÷°“9è´»ÿí¹îc–(E'ûž¾ø«÷–÷ÓÚ¬oÚ«ŒûVœuʳ†XÐ'ÍEw ‚GR½E +•}}ô¹¼âÓjÑ@Þ Ê3íR\ZXymÞ;d•]˜ûtí[{K‡»(QŠƒì`æâm™à,›Aú㛵ƒ[œÉÒ¬ã"BÓ¸ÎTl‘ÍE4Q©Ùm.HýMu¯a§†bpA ÏœŠÈÕì–y£êj3ŸZ‘4sòù~qòí› @Pгö–HLf,Ÿ”NjÇØ„\I“ŒeQrqüªX-5 Y'’ëJÄ™É2–H˜òI㯧×P°Bß8XºžGZ¾t…eRX‘БӽWÓ x|Cm±ÔFe@NßqÆj$ì4¬ÎïÿÏ´Ÿ÷ðQV0¿ìßTV<ÇF‡”ZJmïVI¡u†r²¶I |§ó8üª{DøcV•äWm.ì’HÀ17®==½>• ú=½¢ˆc2LD¶\Lúb¯­„SÀÄ$ 0UŽ?­v¹&sB.:š·:ŠÝ2MA±A)#8+ÓðëÅrÚîªöñE\¤·o #ä ?à*ÿü"š]ÒÇn"vBu.Pcžœ÷­m+IÐ|6c˜&û³Õç]Ì?Ýô¦Šhçtß²Å-ö«Çh©¹VUù¤cÓÿúæ¬Ágw§å8»‚FÁˆ.7°üksQº¹¿Ô-á Z2™3Á€Ço^{ÖuÞ¡©j·siúJÖ ¬Ó…Áí7ØK¹‹©jó,¦{ybaœ±MÌàp*ÅŽ£¥iQ’RìK ç–‚yü3Î?*Ú·ÓI„É-Ü“«xÜcú*¯¨Çý«bÆsû¼)qƒùu¤ôÔȽ¹k*y>ÀÅäÄh¾`yäãŠÊXîl¦BÑ ¬Î‚sùqÒ¦:‹.šÖÅc3[©Wõ8ÅGó}šÒD’FùBÈAÉÚ@¤ v:/u{ËÁcb D‰G™,‘–\öö'ØÓ¥³¹·›zk »Ü“ÁÈ^x$žž†ªøbâo"ìä–7'véÏÒ“Ä:£[¶… k©‚áäGïõïøÒ»šçâQXL2EºBUÊ‚Tõçÿ­\½þ¥>·}ÌñŸ1ÁȯÝÏzØð¶‡ X™Š™nå'jìÎG= õ«Óø0KjD»ž\ŸÝ‚r¤ž9éïO˜|½Œ_ @·—ÒÛ\*E E•ä-¸©ç <ú«¡ðd¶¶ÐÍ¥]EÝE!‘\ ÆE8éôÆk–²‚ãAÔdµ¾Œ¢Îw!~„s߸5ÑKiíŠÉqpj0È~´›¬Kv»¹¸Œ¹ˆ)fyNpsÍsž–Y®®mòè³î’F gqþzR]X£¢Cm,²»àáÜí¿­^¶ºƒC²¸A‡p0ì:’Ïz™—â1ojÂHGï7à¾â¤qøb¥ðåìëV—) V@1&H9ã99Æ3š§m`5k“w|ìЖ,‘–çõ³q§Û^à vÞ\1d¡a€ÞÙéEÁífÎçı[%佸ó/ €Z¤|QœñÜò~•Ãj·wVzdî  ´lÁÀ<çWôÛ©o"a–ÄLr#œ•#Ö¨k+ Y^Z‰Uå*6¤`u4ž¬´¬‘ ¶ÇJÐí#’IpBÈ2:8ôÍS4“¦#G Ù!ÿÖ¨,îÒ{bÓÜciùT®Hã¥OVb7šKĉ@*WïÓ¿Zdo©]å7—–Ês _65 uÈüêµ´RÜLdeÀR;Ô௴j'XŠùqïî{u¨-üùÕÚ ÌPÇ€à·jsjÆ míÄ/:Ÿ-HùF2?dßmoeaŒ'5¥„{ñÌÂC–Ü$ÆãÇZÊK5}ya¸.@ ‘²ÀàÓ°^Åëin¤Œ%¥–ÀC]úŽ8ãëQ-¼°j‘ßM$2ÂXGp ˜ÇLšØ˜ímò|ùTLýàsúûÖv¥vlµUÉS/ÙÊNÜŸÇž” ›:ªD…U_Ý•áJä`×>]¡›í1¸Y¢ "ŒäëÞq§DTGiq4nʨ”ãòþ•—i$P­Äãs˜ 6æç<ô ­ª¬rÜ •qæ(8ǨSí–2ƒnÆR<séüê9í¯¯¸¸T·¨[$g¹ëLk rêðGœ§8ϯùÅ!G 2¡|' HàšÐ³xd¾¸Sœäf±.7}¡|¥,DiŽžµ­ ,“ŽÒXÍœœãó¡Œí4¡eu¦[µ—Šnm¤D mçdaqü,2F}=«ÕbÜÜK6Û‹•‘•åU~1ƒÇ1W4¿ßêÊ“[ù b‚I$àqÛ5kWð”þ²Sö•¹·$³6Üm'²x>´îÜIV¹ÄInZc3(BÀ1Jê£>b–$¤zL֕Ű9ç[•<T§‘â$’ `äæ¡ê3EcpP@Ú¡º›`ˆÃ`rLS`Žw¸Ø’"o=Jdš¾ Š8dÌÛæÀjhf\zÍÖ›tM¥ÕÄÄX¥#?ýzœ]˨\äŸ ƒ$ŒXžž½*ƒÅN¬§÷jHä×°’3 ‚>rHUÜ:õ ’¡ˆ:‚ìÙV˜ªVèÒÞ6ÑÀ8àé"Î`Ѐ„£nI5•4n.»Nw#¯ÒŽ…–P++£Gæ+YJä`V……•±›Å egžŽk Ë1_e§É`AùA­¾=ÃÙeÇËü¿­+åÐQ/$ŽYP)`T$öü8¨u;…Ý…Û±‡6{U 'Ô¤@#‘‰~}k¢ÓõÑáÝ>f·³·u©g”e€ô#j,W1Ûá¶™ã^CËœõÅ,ñnc±˜°ÜXüÀŠí ñ¯ˆoR3œ Ç’p='ú“\½Ý”¶—R‰gbÇ™å$ûž;Õ5 µ¾¥uÚ-Ë,a€¸þuVyÉ[G·pPÑœžâHðˆd’)I?0\ÓŸéNu¼Cm¤!8$K€0sëBˆ6S*°Cå*åÀ+þ}i°<¨Àï׹䩡$6÷Mià䌚”ʹ Äž¤g… »:ĭ强2]XiÐK,×SÂ•î œ–$t¹±És(ÞXIlHͰ°õÀÎ?:Ýðä}íã_R6ÑÅ–1½Ï àíÿ²ðÓÝ)–æhãLœ³‘[v6š&žÎ‘ý¢æäuýz,ZN•§)[D –+¸þµÇßMw©jr1{[(ˆpå”sŽzdÔ7ʵe2œ“ÜÁlÞE”Q!?yÎÖÿbOs#,+~ HŠÑ77Óq§ý²Å&ha·¸¿¹©8ùAþU­cg} X–K["“´ ÒÜö¹míý~dÛ¹–›4,H'–k™KµYyí @a¹3LÃå†Î,dýG5r}n-6ílm®¯@áçmY~OZÆŸ]Õ¢aµ…”=TÉϽtB :7¨ïb”f²—Æ–ÓïrwK O=É5rþkëq»¼°¶-Î#o1†+:óPšõ•oµi.P|«a…ý+cÃÖ1ÝÌc:xŽ8²çqßÐñ¡ÁIY"V†ôÎðH ¹Ô.ÏfˆlARø~ôÙkQÁ‚g±O©ÙÛ¦d¹‡~2¸ò¯$ø—ãùT&™§Ê˜8¯P=+-TCm¨xPv{»‚b$êzÕç“^ßÉ<­—‘‰$úÖ‰ê\båè‰ÍܬåÄ„1â®i6ðÎ|òÃwµ˜GÍœƒÞ“’I$S-Å5c³µs•® ¥mxCH•ï®/¦Ô-mÚL Ó·õÎiÓem+6÷÷GSRˆ¾ÚwURd§øÔ5©Šº=ÿQµÕ¦m6Òo´³e^y>è^2Rè–šl7[XÚæÝÚ9LÍœ§ð퇊âô{¨åÖ-â³]’ʳ£?á]õÿ‘£Üjûì÷ÓH¡%$PÿN1Ú§—tSf]¼º•³A§é±­¦šò°ŠêEĸ>Ù=°3íR꾃G“í(‹w ë¶îÙÆdn§ÌSÙ…f^ø¾æò¡™ôôŽN„ƒ•ü²3ïY–>3:=Ò´Ó õ‡“ùŸJ‹K ¯} []V}b†æVŸGfC0<Œçåjéo.~ß§á#ØÏ_2@äSýÔíõ¯.:…ÕõíÃÃnËhî]¢+•Pºµ~Ï]ŸGQuº´ÈhÛvã ÿ=ª¥Nîëq^Ça¥xeði—VÓÞi÷hY. åà>™í]eŸ†¯Z)4J8oôÀ Šióæcôõ©<¨$Ú"÷„–v-œç½m]øM±‘-î.cHp¨XÕY=ÝÊVêWÐü-o¡Ú˜òêâ?àŽWܱŽx_AZòÄŠ¹Ø9µÎê^-žÐ§“f ¹’RrËÿ¬]ouÈ£¹ÓõIc™Wz"·îÛâÓz%Ê®'ˆç×c¸i#Hÿ³æA.Wüö©´ã¤OjgµæP“Ͱö"³ôo¥û ÿÜj‚7 'ÒŸªé³XªixI—>lg…‘j£åïD‡k^å™4èn&f†/(Ÿâ_”b¯[éò¢cÌŽuéµ×kÇÿ­QèÚ¤庵¢ˆå_õÊÜjè-mR7OrzÓug{= TéÛMLAa§Ü ö²BÃ?3|§>تØšœ i÷&KRq²CÊZé¸AÜrT©ËǵUª¦éÌj:näýM/i-Í#N6±\ý¾/ݵÄr’2®~T‚+ö*³9DЃV ²`)#’zñ§Á *—2erqU¯±2¤»ŒŽ6“æ®IÇ\j–·{i¡Ú«´LîçÖ“,—ˆÁ"@€à³¯ò¬­GKÓmUf¾¸8Q¹_@ö_ðªS}H•;¤ñ׬"Òl$žB 4¬0 Õ-ONa¸Öum.ÞË8ôÍXm^î|ÛéÛ" ƒ9MŠjœVÚ\!®u)žòâ0[p Šz®„4ŸS™óUäkm*Þ8#v]ÿÖÆ·í´Œ»ÛÉ$bó ›PçT4ësâ?<ʰÁoj7q£ÐqÔ×nºNš¡MÏ™9|ä’3ô i6&M¶·-ºÒ2Êr7¸ÂõëHøñÉÎÙÐÙ=Ëڛ顕åÔýi­i–ó}feºÜ¸fMÃŽO¨/dÔí­JÝ[…UFè0áÚ³íN—osÅÔ w b®ˆesœÈéÏçIZÃÖÆî©WRº…BD`SµAÉÀ#ŸOJ¥¢\­æ¡§É»ÎišXö®@}ëSLšÊX§]2Å`„±WÀÃÿÖª:î-ÍÄqÛ²Çslr'c qø ¤˜Ç-©\ædX‚÷wëÓüô«ŒkobÎwFÁÌ8üzšÌúºí:d2¯»W9<àU F{F%íÔvöç;FàH"¦ÅlSû>©_ç`•™I\ŸçSÚt¸£çd‘€ß/ùüê»Ow=¥Är]jÔµMF[x>Å)”(i´žÄšZB]ùÒ5Ÿ”’–H§l}TZË6ÓÜßE;Å‹™Ìc…ì? è¬K;èåÔ¼±|ä |ýPйÑo­ñ™c‘Š9$Qd4ÙéZ6Ÿmkl’K4rHÊB" };õêÌéòÈÀ4jW*¬ü)çÓÓÍx_[VÓíöªÉ+¢FÁ Àç½o”•ZQma0ü¡öç¿oÖ²‹IêmgÐå|Qmå‰Ûqºâ)è±äùïÅeÁª±Ð…E”)FB{Žã>´x€‹t–g$Tˆ˜ô9?w“Çzó/>—urîÊ‹–ØzÇó«ÐͶõ$Yfò˜G2! †pO°ª§È_²¬œ‰.”ž©ïô§‰YJTJ¡p‹÷Qjpe¼…ãvP06¨«} C½‚pÓmËÞJcŒŽib¹˜8©À’[µcKy,@‰P»'ÃcÖ§G’ôª•X#$#’sý)ØÉ³{AYõzî;+MÓ\+*NdeHÏ9c·9öÏ5NöÚöÆþ[Aö˜ £yÏNë¥Ðgñ6ß`ÑbÛo¸ã œÉõÎjé˦</Ä·s&ë“·8lÿž¾”Xg}läEd”–Æp[Ïj‚ÂÔËwæ4R8 Kn9Áþ}+JúX‚ÆQò¨»@ÍWÓY™dS“# ’Çé@î%f´H[ÊL䎀ô­RÑ Í¦I…Bñ6[#•óR]Â?±›2¶Àwm2c?ãš©ZºF¦b“mûÑœñ@&j,î&A„rÊàc½dÜ»K«F!˜,§#Ì 0ÏÿZµ¥‚Ú{bMöIÀ,ïŽ}9¬[¸šéɳ¶e·Œ’¯ƒÈõ¡Ó²mRíÎ'‰#r«ªœœu#ÿ¯TáxÚùš^É'=Û³Iõ¢±¶gp˜Àû àu?Niéá f9 ‘ÚÄv€QLƒ‘žÃךi6H¤ 2±9E<„<8Îk!ã2ÞÅo#‰¤.GӚШºa,rùƒ’¤ŽÕ—<è×­ä¾É"'nïºO¥&]©Ü·–ªŠ:†Y3‚AÇJ¤‘-ä" ËÁŽ¿PºÖc[3 †hæRÐ ñýj½ÝÛ3K æ/ƒÏ?_ÂÆùa2[ɳÌ*ê+\LÂÛjF§÷³98-ÇJŠ`ð[ÈffË·@I¥ÒçXµ³¦HbXÁê)^ÀjÚM`ÄÛêÓDÄB’J«y®j3,°Þ^Í<(Çu¢gB0Uu$ ÃøÕDvû\¢Sœd:Šwb-¬´l—bA¸"²çaÃ#ð öÍ[¶•`‚hÀ"‘%²óô¬[ù Ó´Œà)$¢äu¥bí:H’ídvRîq´öíN(Ф±gÊprqÍbÙ]ï9Ì{ƒópH­4;æyAƒ•Ü8iˆ¦Ðíx£(c•#VÄZ•Ú-Ã1ÎáY²a#¯™æƒµ\Vž.LPŽ»x$t¦+–m„¦I-æpe•¨u= S¿!$ˆ‚K€G&’îëmÕ¬ÂM¯¬G­I©Émq¸vüñ®r8¤2;Rïw2¥¹ùñ×ùU¥B×_»ˆË n0x³´÷‘nX…•‰S峇±­Kh§c©òÕO$cж¸«8µ¾Ij¨†ÊÀδ`X®#óò’­ŒT€~Zfº5ÿÞjãOK[e‰R4eÚ¡3ü à·=ÀõªHÓ¶MGq߸ ç?Ò«ØÝKi"03]m0¨²ÏèkWMðÝÕÐW»s °9h“†`?ôµ©¦•¥Î’,ÆÚdDÌÃÞ‰Ùè‰Iõ*è^ ½Õ¤ß9ŠÝ@šô3A°Ó"T··HÈnÛ󯩸CP†óME/²q’ÑÈ~qøWFS,@9ÜN+-VçDRzN ƒiïŒQ\Þ-²œíÙÀ©À!sË™< ãn¼9¬jÚõÌ—’¤:sF›É'ß‘OC;ÄZæ¥r¶1êhªÌ•d›ØR}}«NÃÀÑÙØ—…ÚK–\ƒuóäûú~ÓiZ%†Šm­Á“Á5~[”$¸uQÚ¦ÝEnçeṋ›ëæŒÊ‘ª1ý)ï{†{ (¸#êàìLéTüWãìˆdC Ü!Û,OÓ°¯;{ŸxÀ°ÜKh§æ¨(PIj 6ÕOˆõÙ&œDuŒq/Ý·\.{óíëYöešÔLö)?2½ËáHúV›¦Ïª4·2³Ò l4Œ2_ŸãZº}è–yµÄi–௟r7>Š(Òí36íª~¶ö%Ž£n›‰Ù²í%¾¼šô?é‰c¢G{$íqut7¼‡·û?…q‡&ÕïÆ«% D“>JºaQO©ë^‡ll¼=l¶Ò\Ë+à‘RÓµR]„¤›·•mKDÁôcÎ`ÚØFš‚\–7Œ‡–O™¿Ëø ±qv&³k‹ÑB£s ᾟZã›Æ°iZ}Ñ´XÉbeÉ`O{ã½ZV@ÝÙÕëúòé¶íçJ¨„|ÄšñýwS]Yæ–0ÖY˜ÿËG¬ÿëWÒ¹¶’c5ã9iÜ©=€ö³/åi[(Â)B[«QÊ{³+R½–ñÖ"ØŽ0B¨è*»D‹ ¼’0EHc ¤ž éí[ö~ ñ±h.­4ÙL¬~]ßAÖ†‘|ÛXæ äÎ;T°[HêdX‹(ë]‡‡ü+i¨G/# b8q À_ñ­ûOç[]›reR¸U˜=OÒ¡èlà-Ƭ¶Ï=j¬“ÝÃreeÃA+Úµf`¸»*»Älqɬ¹în¥rQFp t¤Äž£#¾¸’S#º–^@å‚À„ ƒ¸€:zzýk[ŽYTÄÑ–SµŠ‘Ûçé^ŒºgÈ6¶'ØV}ü-knäÆä€zÕ©©hC‹Zœ§\YÜFHD ¶KpkOÂͤ³›)®£ûJ‚â)S 9äçü=*–§ç," “!d.Wœ…p~"YêªÓ[4D/Λ÷€¯§ZRI FúÑ>•hˆM«äpÇ¥s÷^!‰­ï¬nšXd)‚»ÏZá¥êÝè&i¥%íØÂ›$£ôÀC]uÌ^‘.Èö•FÐO×õ¡-ŒÜRmnpZ¿ˆ?²nãû6“uæàe±³¨üj„W÷7“°x„(p´›ˆd<©;‰R§½OÎÉ•œÑý¦_µ–Èò£ÉÙ×¾~ƒþÕ£6—w¼õ8‰l–Ü?¥fO§$r’c2ƒó(M¸Çÿ­C•Ù’…X×ÃmÌtÙ¤gP$ôôÝøÕ·ŠÊþ8$°Óm•UKD³J$œr¾ýsšä’ÓÌf–Ù$dRNI*=ñÒ•­$‚BU$ˆãa·ŽG­.`qe}NÚëL½’k>íÀ/+ƒéüªOß¹×l±Æ€]GœŒó lâêåÎé|ÖíÉoB¶’=wOó1µÌc$~aYJÅÂê×={ívþÿ¿a¶þíËîŸ#Ã#¸ÜÌ9ryG’k¦ðxC ÅìŠäùÅU+ƒíÍ*ÉéêrOùúÖLJµV²žKmø29-Çú{¥zumXâZ+³·¼ž·ÀE!‡ÝÆEq:½§>Ùc3@ÂGL‚¥z¶zW¡Ìª!ÜW%yÀäƒÇzåõiå’?.$ˆ’1!?…`¢lÚ±_Nñšêmä[C´Ò™îlœtÇZ³©ÜÃbÆ9\‚XÔ’q“ÏãYÚ~»-­¥½•¤0GåÎÐ<ʼ°\|Ãß½Î{Ó¯`¸ñ³oa2ZÏ<¸É8ÇËùÿ} «ÛRc®†f§«Ã˜®ÒßK´²Ž(Ò-„•H÷úšv£áû ØÁ’Þ2vä¸oþ½Cfœ¬ók½9ÎS ½î9a¼¢­iðk6ñ cPBœqù~uwZ·ŸI±¹·\ÍlP rÈ êqþx­M"x›A´bT¨ŒHÁÇ5IÛv+"«‰R.mвÊA-»nÕ•1½¶i/¡¶—ìòÞºp;ò?Zô]+yl´®Â˜ÈÌk!È+ýïÄöüj…ΫghÎ!/rÒ 4?tWôþõ×zËevqiöUh¯­®ÞØÊÄÓj_äY£ °à«dÖ¥Ó§Ù#òÙÌ€’Ã8SBe‹H¦³Ô¢†Ú飂áŽL`,ƒø{‚?ÏzÛ{¯ا™2#Ûò ˆÁ\qøJå®d—ìð>| 8cøfºûY|D–flâ’2¬¾|’‚ÅNsÆyúÕE\™nrî÷·*d}¢I ’2ðÄrOÒ–Aj¬ ŠÖ#Æ<±¸¯ZV…ì‚ùåÏc`9ÿÖ*µÍÝÍ¿–Qa &6¹ù³RPÙ‹°–îäåXãŠKd’ÂV[¤š#!nÈÍhéXefGgfÀb¼éùÔ’N[O‘/cÌ`\0'¦=þ”VçŒ/[¦j¯‘ "È¡ã›'§t×%¼²8$»íÈÛéT#d^G’RÊ–lsÉ«nË ¯—°ò”™¨DÂ1²’r3€r(ÔF}í¡±º_3NØV¦1úTÖ¥šàFlËsŽŸ­lEe,ª]¢gVä0+SOÐÑÝD ŒB¨ÜO_ËëT¯Ô.ZðÓh—-ŽÜ’F2ò. gžwzzÖº îË+M¨H®ñœ´Ò€}Ð{ D²öM(£ HR1“YézâëY˜G p±gñªH ÝGTÔ5xfM=+8Ayg'«2{{m"Ùd»œ¼×Ê_šVÎÜ{ èõ]yC;B¶IIP¬Bea y£û]áÒaÄŒØHÀíîiØkrOÃ|š’j"XCÌQ–É#ß<ײÙËö±\丑Cg 5ã3ËÐOk¦G-Ì„&¡!ÂGŒgg©®@ñdÚl6údË%Üe°ŽÎsüÅD•ö5ZjÏGžê hÃÜO*s´ŒÖx¿žòÜ6®ìþþa€°©âŽ+äY$P6ó´¯+ÿצßjzt#ÌÁ9ÂÆÉ5ž…jý{eSszòŒ±ã'Øv®Äž"Ôê;i7^ÎØ†Ö#…yù»Ô^5ñ‹n¶Œ¢sÀ;ò#¿Zä ¸ éú\’O{)æõŽÒ =jnå¶ÄjèCTÕ¥‡|·{f"æäg>Dö½1<×öñÅ{7öv‰l¹0Fv´¸ê»-jxCÂÐè6(feyÊŽƒ…ÿëûÓüM®hÑÀÖ7s ™ˆ%¿)(7-DôÖG›øƒS'»MÃö»t¨ˆ¢R‘êÝö®ÛBÐlì´ØçÕÝÄG1ÇÖ8ÏÓ¹®^AKk§["¨<ùkƒŸÂ¨ MkÄ“ 8ådQÌŒ8H×ßßÚ¶pIXŽdÞÇMã{ëíYì•ZÚÁZ8’æcýùO°ô®ïÄwÞ%Ô–hñiiR)«X%Üè•Òø{áµÖ¥$w§™glx.~¾”Á;LIy¨Þl’K;“µTd×o |-Öu)ÔjDÙ[õ%¹l}+Ñ´½AðïÏc <×o™ÔÿJ飱¹½„§Â»jI»•ÎgBø}á q>PºQ…ó@>çæk¬iÖÚŽ1 G~£†ÑUȶ#^ ÔûS/ô«©â ¬±€ØFáYJ]‹I˜’éö®“ÉHUNæ“îç©ë^i¯ø•ZäÛZK•È8þ*î·×ÄZcÞ­š4‘îU¶àè &žÈp¶ò:ÔžÎò’HP(ÈE `}*hçŠ^XÏ<€À×'©ÞYèÖ¦IBŸˆœõüé–š´×Ž‘Çi"ç¤ ø ük7m̺¦¨ˆ2Y³Ï~õ‡#ÏÉ,ŽbPA\Ìß_¯µ6]e$€ˆˆìc9ýi¨ŠSFóM k’à3Í%¼ÑÜcSÔ‘Šæ`}ì#$’Ä®Š'Â0p@äŠMXq•÷,M™œf©.IÆxÁÀÍ:x¤œ&Úp2jǘ†œœŸº8ÏáI·SR8–0Á'ÐÓ'G‘vmBPFECa,ͪð[$ÕHl”Àõ&‹ØM†§á‰&†upb¤¨ zŸ¯ZñÏÚÜÜßO$Ê»ÔBŒr søŠú2íÑT2¡< œf¼«\Ð`ŸR’êà³Å!eÜäô> ô­”›1qIØóŸ jwZ>¶ÍlWs!VCÊH>öz8÷¯fÐòÿD·ÕnZHXyep1“ÐvÎzý=*-'á–wp=ÍÖðþfò«Ðq´cë]Eí»&ž!µ*`¤`½©óv&vzœ.ÒÎ?rðÒ±ÁQÇÎ^ÃìÁ–Áa`•'«hhr¦ÔyU<.Óž*ÄúSFX$Š£!•ÜE6®¬%e©ËÇ¥ZÀÆP’l'—ÀíÚ´¬m¡’þÉRVûL|†Ë}áZæ(£{ç€H=;M‰åÕ¬¤…Ü&ã<ЉÅ$8ó9Wögûß•ÐùoþÇåEqY÷=.SÃg´d¤°B€Ä½+;OÓ­ïõk‹grcòà ‚‘Óèi'Õ^ëÚGˆóþ¶N}ih–‹o#ÈÌZC†f#¯^µèM¦Î {u´ˆ¢ƒP¶™ÐÄ.¢ù–L9O¥sZ¯ŠàX$0ʳO€!Œ!Ú®H­o_4— ›Ód!rŠFâ@ï\6¯¹îLL¡pN?lzöýk+Ùhik›ÞðµÍå¬z„×*6òŠI$µúVÔ ZþÏ_mÒ™î˜YméÛoJ—IÔ|-e§«Ávà:ñ X¨l å{sô¬/ë©y$6Öaà6¬$·ln$ñõô¥pŽºó_}­J(d<îÙœã¯åI©jë*ÈÑ‚N~•ÃMâ{ÙÊA§ò1‹¹oMŸ—^?:¸Ø‰7} Ïjq?‡m/t»hÒÆG#Ë+±•²FO·^ùªö°É‰ÛD[s†!ñ‚ýÉïÇlÖ‡ˆÒmBÊÆQ¶‚IÌkm"a‚€J·íô¨àÇb–û&$“Êó´Žß¯z©îL6Ô¡$ó/FÉÁb¤| Ömü¦{ìˆÉ’(y±’sëíZZFÞŠªX“γ C5ÌñÏ.ã‰p£gß7š•ÝЙ¼[:X˜Î¢E‹2uúV]Ý·—l®Ã HÀŽjÞŒ/]Î⤠4Ûð•õ–µw&¡r[˹FäÜPäs޾Üs^…©´„g»Ò¬¡¶†è˜¤cÆd•᩵5’hâŠ&˜Äg=)+^è–RÊ-æò(v XsŽqúT2Ü\…!@!TrMijÚ+è÷" œ» ¤t#šÍH¦¼s0]½@ä€{P31âw J˜…QܚѓNKxTJ~Uàî%½ªYt§µ+¹Ý !Xä¥G>¡ o.w—ШL1ëÇ¥j©>º ™}‰Œðæ8ä’=½w^¼SåÉyLƒû±ò‘ôëú×å]\#ŽÔJ˜±í»ž+ Ó…íÂë™A)$ À.;¡¢Ï‰´;DšÉ!‘¤‘rg-Î3Àã·Ò¦€Ã%¸*IÐk@xjÊxH¥f¼ŽÜãYéáÛÍ5dKIRå ‰1 }2;~ ¦ZV3µB,´×&2É'Ê£,pxýj¥<𕽥±¾á.H+’çóãòï]$v k©éÂíQ渜™GE© (ìÿ¯­køª8®tÖ>\nê¬QJçÑaÚèãb›u´¢TÈ`Ng+Tbسƒ…;Xœ,x™B Xc "*U˜•ÝH83Šv ìôMWÃöö†=BÄ=ɰ”¦ìž8OJÕÕ|ge}§6¤ÛI<Ò)Q˜€EÏRyþ•Äi¾¹Ô$ r Q¡Üª¼1Î.µÛéÚd6vÞZED9;xl÷üMkwÕ™Ê}ÍÚxP²»6få€(p>ž¦­G£›u5 ƒsÍ_¹×4èn¾Î.å‡dù•~§?Ê–]NÚ4S5ÌdvrHýMk± =ØÈí]KàÇ#"´QàŒdŒuã8Åb\köí De€$p¬wÔ 9` ƒŒÆâãXÔk¡¤QÒÞê±D¡-ä‘‚G]4<®úïU¾¦+3Ÿ!AÏáQE¥XîO¶\Ou(Îc·R~"½&æ 6êŽ["c#ŒÇ¶¼ûÄ6I²ÀŽó‰2ÆÍ…^½E.UM»™šÎ­ÓN™gd¶ÈÊ[|ŽÈüó[ ,lol®nn„rÞFâ$dLtÇÖ°n4Ë]?HŸSÌ— "Fûª~•‰£êW¾³k‹w {pÁËõ8§Ô.}]"UHÓ=…:%2· –ë“Ò¸¿x§Pñ5¬§P·HÊ6à +ÿõë¬ÕÎ(È d•8$Q'dhÑsv Àô¥à Ų}O®"Îéµ;Èììg“ŒÈÀð¢º[ë…¶´>cœ‘µpI¬ãS™s5d.b¾³«Ç/nb1´szóÉ­®mõ˜æ‘HGQ±—cì?­j=ÐidK%sŸ2òN=qëPCv†rºbµÕÈâK©ÿŸJÁÍÉó2}NúÍ‘­âó>BTš[›hnbhš!$oÁ 85‡£aã[kûó±-OFôJÑžöb²Y«ùwJ¹CÔ0®¨Ë™]ôÔĺøu£I+n€’H9ÁÍqë£kº¨ñé[Š1À†páíí]%¶¯¬Øj²E}#J@Ï«}÷W[¦jpßG1ˆ§ ’‡æÇãRšèÅdÎ~ÃHšöØ>¯¤ÀŒ•L…øRÞ2&Ò¤{9ÁÏÊr?]“Üþ†¨]Ù< É”wë[²¹RÎÎ7‰ ÓE,ëÃ2 ýFjùHÄD(U_âÀÅsêº]ÑkÛ3å7üµ•_JÑ´Ô¡½‹x$€9ì)4îR•‘jH•ãmªÃñÍeÜï€4…‹`g'µH–Ìv‹"®ô8# AÛïëŸÂ¯Gsäùˆ›ËdÔÓ_ÊäLo,FTg=9ôÀU³5Ò°u“œrzþ”Ö¢æq.¾£«ˆùxøÜW‘P‰.82;’X x¥ÙVTNdౕY)„c ƒŽN9æ‹ šä+m Ç’ÌØ8ÏZÑÒÒÔ­÷åœ:…$ð9Ÿ,BYTä㊵¥öûc"o5>b:r*% a4ÙÞe½GåEö¢¹óç(­ï&\µÔhK’8wO‚_*ào¥-FÔ\~œýyZ„Q鲕á€'vú~fº-NaŠHUZfšBNqŸËú×L¤ÙÄŠºÎ£$vÈóYÜ,d`03ÅsNö7˜#¶·€;ÿú«Ðõ[d·’™3 ‚8n:ŠÅ¼’Õ-æŽ=£9mª¹ÿ<úÔ7cD®eèŽl„a²Hl–éWµ *æv†P#B$*äîç=ÀÇJ»á }:;‰&Ž(†åŽOSÛô­ ï!™U U1 àëùv¨wÜ#g¢2E’¤Ñ°tug¿[[¶[ˈ!Ž8Äj>nG¥j¥å²Éó8ÈPJ‘Ï_éU®…ªÀóÎäI! êñÓƒR4LäuK+fšvHRŒÞ_sÒ–ËCGµŒÈò•<…^3õ4ÍFåd’í#ÈxàsúV•¬²ù1[%¶ (`qÉúzU;ØmßлeaŒ,ŒêèA(£–ÛþOj¤á4Œ›cî'?ç­j]ßÊÄ‹3C,K»g×9õªI>¡p#žtt<2ùxšlÉZÃŒ-öe’I#B~b7qƒžõÔ{C´Óm®mc‚i‚±Ç×¾IéÍs×z@»ÖNž·?¹¶„Í)ÛO¡Çµ> îéX›eX¡Üàãòôª:jCmèe6¿&¥â5—QýÄ*ÅQebÎ??s]EÌ0µŠLˆrt<¼ñ×5ËkÚ¤ñ$2œ(Œ($?É5wKñYiqÇw²M „e O8ã­í”’Jæ”!»Ud ìI#1g¡ôôÍdØ[=œW)tD|ÈW,N? ¸úÅö½ª.b°±%¤# g§]4è£Iü«ùäÂ’ ¨ O§9ëê Üçoå³{]°«4ƒ»sÅLPO ÅÜh"@ œŒéUï_tRB!*Àä8ÅI™tÒ̰HœñŽ(J”´il%™LɹO;Aâº+˜&ŠÅB"'Ë­ÈCÇqT,"Á‚æ6 ŽEm^Y4Ë…‚ | ’ا'©1ØàuXeÄIŒÇz†¦óÑüŒ ÙäœW£\xWÕ¯–Hü»u óÉ+|Øÿtdÿ*­â+M ÃÚxÒ-Á»Ô¥‘L÷ ÍÂ;)>Ÿ;ýRæY’ÙÈl9‚§ƒYE¥82pr3Úµ¤µ«8Ú¼yãXCçZE9 ã5, ¢Û5öAÜD[°Ã©ÇkéòG ’‰ «ŽçñëYP…þÑ”FûÉE Œg5>g· |H~RÀrNi†Æˆ >“·ï(äzX0is_Þ¢ZÅ$®Ä"ä…ùU÷¹{d/v¾iE£c…eâ¶l¼kiolÊÖE@BFÉ㎔â“ÝŠRkddÀ†Ç[º†æ å@UÀàTâi^ÚQ)p­Áà0ëøóVuN=ré.¯••Ø»Ÿ-ÆO\ Ƴd¸’7-°t¸¡¤$I6• äbœÑf&2H šŽ+%w*1‚sކ¶m Ã0$0 ¢â–(K†'ÀäT¤$nK³ $á…]$yJAÀäžNtÙ*†Ýí'޽¨½Ça­,š8òòœÖLJQ]Ê$½6®GPp$ÿdöŒˆªI2H `šFI”«– ò(^ÿ=ê£Þ‚gk¬êZriÒA#‹—e¢üç>¹öõ®%-î ´…<˜‘ÛéëV`´¼`Ic<äò}*E¶E!æ2\RAvÀé]0Ž»j&ìŠRÝÙ™6ý¢Yu 5ºµ VR»€AfÚIÿ?ãW|ˆ˜„ÆzqH–BU$ `òÉ®¸RîÌÜŠ_j½a˜í¡„žœ~i#¼žEh‘b le€>½êÌ1ù ¬vîÜ# )Í]ŠSa6“ÎM‚AršÛ\±Üê³ àÊF ¨u.ôÙá$žúÚFU)æ°•yã}Þ-Áœä@êiÃN—Ra4R4RBÃfOùë\Ó¢ž¨ÕJÄSÝi×Ö0kß²\Á h]Û8~x óÏ¥?W½×šÙ#[ xá,Iöì*Ü%Ù’ßU̳1 I°AÎ9Ç_oje÷Úô9œê lN6\Æ 1ô2ÿZå•7fhÕÎV%Kà^Y Ýäû¤ŸÓž˜ÓØZ"30òÀœ’y§Ý›'‡|,’n¢rÙSôÿëW7«‹èbŽs+ª– H<Î*¢ÔLåβçÄ6šd[H.@$úþ5Ëê~+½¿£…¼«vq:ïþš¬±k”ÎU9#=ê¬N¤d  åïÎ3úÔ¹¶ )ˆÍ nܹbKãÃ-¬÷…ÜÇôÿ?.^¬|ÂÙi“Ïo¸'•Þ­À50:}˜UHLÅ€-&~Qz©,òO72¯Ê¨àgÿ×O‚ÐÇÈp©Æ2} &ÒØi>¥Äu»R³‚p28«hÙ:9dˆÙɹhŸpŒr¡ºÕÑz˜ÎþP^vÇÏõN/q]}#í’Æ.î™áAæbøZĺ=Žž¾T‹†’EùG¿¹«ÐO©˜–þóô>b2†™šG`ºM˱ÏYh––(³_⺜£èj£w{.¥2éúRošuUßã]³¦r¡[Ÿ*mÌÈaYo©ÙhvÒiÚM·|NÂ6äê}h¿a;¢tïZ™Û­buÉ,xïì+*Éç½¹û>Ÿ3I¨Þü×wcîÆ¾‚·m|—6³Ï«NÒßN îùýzÛÓ4 ]ÇɶR åäcóEÑ6flš%ƇáÉmôTin˜€ÌÌsßð¨4­4‹®o]¥¾O›#œ‘žÂºCºÜ2ùrpdÜ‚—.Îpª9$ý)¥rY‰¦Û[iË#@Œdlåälµhi«gy%äÁŒÀ~µ­m D7M«¿•òçbœƹkÙg›Pû>…dÎ¥€É‚i¤› 5©×]øžÞ[Uó¼Rîû³ÉŒ_ZãuývûU¾ŠÏÃí$±(lñ®7×Úµt¯‡v¦s¨k—j'/!/ˆÁ½éÖExä!™Ç~p+2ÚÚV³¸¼pÒ[A_zúÕm>Ò-o_–3.ÈR&`ØÆp¦¥Ñna‹Âž%…¦W…<¤fãƒ=ø­Tl€õ¯‡³ý«ÁvòFß4 é· ÈÁÏë]Ι¨Ã­i±ÜÄC£îGä ¼“áí¥ÕǃöÎþNœÌÅÕnœØ:ôÏ \Å< (”ZFB+…$z}:Vkâv-V‰k¢Ã"@¿ë³9êzÿ*áüO~oõ&YžÜq ¬?zAêÞƒÚ½\M Fz0*X`{U$Ñì¡·1‹x€#¶åãD¢ØÚ<é-¥ÔBý¹–(T–Ñp€{ã¯ò¥—QH­ìâóXü¸UÀ+¥ š\ý¢ýŒ{‰àm'ñ¬íkLm8â·Œ½¼Œ÷)ûÂ~¿Ö°ö2뱦?—2ê6÷-#Ky("9Á¯FžÑ/m¢3F!˜(a´üÊßZåôë/³Å ]¬cóªždc]¯œúäðH­éŤ8«œ¼¶‘ÝϽӘ¦Œ¬7ŠÈÔo®¬.ÖÞÚ°ã,ÇÔO­vZ•¢_DþG^QÀÁ²Œ"ò-.`ᔪΣ \ÿJ%IKÞê+Y…‡‰áž$[ïôyÉ †8Öǘ_X2vÅyõƉ‡¦Œê6ój29;7aW‰ïÑ‘-졊5è£æ8ªNËÞí¹Ù•Y‰õ<0#8¬ƒ¡Gorf³Cœæ?á?àk#Kñ~—{¨4læÒøeZ7Aüz룙ïÎ}A­-mP]3`Dª¡ ~bÃ'𪒤 Ä;Bàª÷ÔK SBU±¸q\¯z¶:‘ŒÎ¢E?0'€(½‘2ÐŽö÷ì—ÑÜ[ Œr9¨u=\_˜´øYÒ& ÜȧæÇ÷ÌÔo’âE1 Ê;‡AH–ÂÎÅ¥Ub n,O&¥ÏB.Í]OS)` ‰H³‰¬yëõ¬ý2³Ã½²ZO˜‚3ÍXÓ4‰õÝ ¿•ÎÇ’=¾¦»›-ÒÃc¬~cö Ó[¢Ù§h÷7„I(ò¡#'=q]%†—³‘*dÀWäþ]©,rlï¯cSϪC¡d!‰á@È5V¶Æ‰$Zò„C%C¸à¤SÃJäž2i,Þk¥ó&„Gä/J¸eH¡rAíÆCÐÑjWû+m%Êìàç£ ®ö‘…!AÿŸz²ï$øÉÆq’2<)RK°ãzЛ*+@‚K`]J°89Ÿ~Õe @»˜† A¨Á/r#Œg#$ž€UùBªŽ@Ï“I^ÆmΣml¬Ò>ÚN ¯8ñf¿iwÓÏe4SÙ1EîöúðkÒž =›ä´ˆÊüuÉÿ8¯>ø¤ÚI32æ—g1q¹‚™¿–j’rÑΠԙ§ðÓF{Mõ›ÄÚ‹òD_Â=³×ò®»U¿:~—4ʆY8P›¶åyú×7àOA«øzÞ_í±,.q´d)ϸZÜÖã[&Uުˇ®qŸóÍ@K™ëÔók ï5À¿s5Ü/œ±Ê€yGéšw‡<-fšü×ò"8çÉ@¼!õþƒñ§_Âðj6š†J¡‘må8ãkàÇõ§k»ììLÂFB®¸h›iê3žý)E;Üê¨àâã{4v¶‰fDDGçåœ Êñ ,nQY>ûŒcòª~Ô§¿º–R“ `—#ŽsøþuÌ|QÔ|ÈíD:…vGí$2?JÑhîqÎ<×W ð}µ­×‹¦aó$HÎ…ýr0 æ½:‚èÀƒ×ž†¼ÓáŒÑÉ©Åu$YŒ†·ƒ€ÀÀþcw×$G!T|¦ì(ÖÑw9eIue« ö÷.^&L,a0PäÁºŽqíQ\ÚMöEG”HáGÌ–j{9Z ‡oCÎjëæt ¹¾ñà…'+1r£ì1ù «° ÉǯOÒœD0Ç—qäÿž•5ÄBÎ]HI2TƒŒ·~k2RÑ\`®ØÏ³‘š¤úì=îÖp@ ñŽ•]uyCîm Iè:Õáa )/È#!³Œæ¨]<6ó¤A Œýç‘G:d¤Þ…Ã~6ÆC©äž¤ÒZêl·ð¶í‘F ÀëYòÏj„uŒœõZͪß@Œø>bòÜsš™IÚö*;÷öÅÏüúäJ+ûRùø÷ÍÁiö=cÉo,&kv22Ù2ªdÿëûzÖφõ£5²BΪ𢂯ÁÈÀü­@‘@BïxÈØàgüúTRXX]M)€”¸U3 çž?Ï­wµcŽ/C¡Õõ9Ú%åÀE1îÁîkŠº¹û5Ô¦ ™92$Œd(>£ÜûVÕÖš× uö›¢b]%”€½;3Çzäîm¥G•IØ"Èž? †Rf÷‡]@l³Ër Ÿ,>úãÚºëm ì‘,ºƒÅ i’B¾H5Éø)[–¸šXº³#c'¯Ô\\øz‰>Ós5ÔÀ«4ÌuõÂÐ’h\ÎæmÝ͵椟m²ä#íïVo + ù»”ž¡”°íØ*cêáIŽ"¶Ñdíƒî€qÔô$œU Vöââ̘›vÑÀÎq—)§31uãm,ä†|yG`Û´+x.e`ø/Î_'Ú’$ÈŠüéZÅÌ6ƒÏ{¸ã0¼­œÈ«ï{}rDws´Jà+,CjÁMRñÊ­½í­ì>P•FÆ ¸uùÕ9|I"Çmn‰&Ü<Œ2£ó§ppv¹rc± IS"4jOÌØ9Î=‡§­gÞ$ú•ã2…•†å{u?…^Ó4{Ýzâ ËPZÝd[™Î3ŒgÛÚ§ÕäƒIÖ&6æÅ8RŒW–aÃc±ªZjfÅÖÚ2¡@ÁÀ'½MW°Ì0äœ †ÆVy™KIžOÕÆÝý* wO%i9ýU"ÿiî’ Ñyý?ƪA7‡o£ 6`ñÚ›«ê*ð‹HA \ôô«*×+á¢åvÆ9ëOQÛ©.™¨¡KxÑÀVp:Ž™®‰HºD´´ŠYdVb©å”zŸ§¥yò Q…Ì'iÜ‚k¢µ½»Ó® Ôâ¼h³ €˜ õæŽ[ ¾Ç¡Xéþ+¼™c½¹K 1X-3ʃ±# ?\לxØi‰âù£Ò€ò.w(â ÎqýsRëž9×õ9ŲÎRQ¹c]ºõ=Z‚×Ì‘˜³E)#Ëdà\ç“ǽ6-‰¥ –¤ÁaΟNõš^8™s q’[>•nK9áI%2 HÎãÐÇOj–$ˆÇ« 6i –Y¡¸†;›D"H]€rËÜ}{ÒGNi˜Ò u=¸¨¼¬‹=¹ãï)à0çƒïPK<1/Ôd–é@Î%ÕDi„f!œòHö£¤èšeÂsx±¢¶[¹>äÖ~Ÿiur ¡šS•lüÄtâäù20'®îùôÍTI–§ EoáK[vInp¤`H]‡óæ¸bÊ“s $Éš†ØãÚ@$œžµâÚò)¤ÜÑ…*åy#¥6î$^… DÒBîv’]J`VƒÊË‘Pà3¯ZÇ»¿Háòá e˜ðkFYm‘d|€AÀäR£ö”hˆóãQM†–lç ë…'“Š®¦}€8 šÛÓl•#@@<^I¢({µÓ#ba¹¾ñcÉ&¯C`c‘˜ã8$òÕª ?fÝFÇ\óU ðŽY÷•;†x뢒Vl%¡šÑÆ$‡•‰–ÈQUž—*›¥#žÒ›32È ¿9­h• }½@ÀïšßSFvæv2Œœ–#ž@˜ZP‡ P¤òI­ Db€«œ€Àc4Å‹“É'''·ùëKëÃäW(ˆ˜`œ78Å*Æ8l°€jÕH°R¡tâ’k[äÎNò ¤ª¦õ#"µ¶j—V r¼ðkNÒ'À\¹ÀUTßåüêÀ—cЉ%³É)uN${ŠÕ+†ÆÂÍÁh#$®‚àçÒ¯EukzíesåÜ&À$^§çÒ¹ù.¡Š7*Í#!TòA=ǽc¤ò[̲ *Ø$8<ž=hX?j··aûnRLj´ |1k4–'íÚ,ä-Él}±ùg§ãX72Ë>’¿dDšºÙ cŒŽµ¹Œf¶›Ë¹Qsi*”t~£¶;d{΋G¶óïN»ße+–ÞE*ñç'£Žž¸®zØÔ~%§pö°–¨ÀÝpn˜·×Úº-"ßHKq=̱»³XÇéÜŸ|öªo£I xZ[rÅ¢qÁOQSÚøzåÔ”¶zò®x¦žÃ~£u7‚öàyš‹˜Æ ƈH$P½âÇo4²ÌH»q“íÍtqhVÖÌ>ÐìfCuõàdÕ˜,¼‡ chˆÃyÜÿ6?LUò·¹ùV†D:tê" Àîç‚8üx­X#V|$'M }Úd«y—·Í(`D1ƒþèçSVÚM±.À°Fz&0qøJ‰E#HÊä3ÆÊ<Ù˜ ÷U·1ÀãÚ­dBÉHˆáœåà:T6‘ĪáÙc·ÍÀ'éOÂK`ª1ŒŠ/t=™]¬ËB$ŠG^p3Ø{Q´Õ»¥¤ˆà'$Ž1VâÔ`„òÁÔ§ÇJ» Øš?–L°#8#Ž•7‘>›©Ý¶ÒG"€Ø+ÁrÞÚÅn$ºH<«‰2ZB0i±yE,çžGjšKˆâIa¸@æ¥ùê8]¢6ÐÈO<ç­D—¬ìá›=Â㨪.b•It ¹~ö*Þƒgoqu,“,DvúÓK© ÝØ›s«^€’5½º‚YÈäŸA[Úe®œ¦D\¸çÌ‘²@öªž#ñ^™¢ÛYZaÀD<^myâcY&Íe‰±¼ÌÞÀU+°v‰Újú¬/9"Pr¤àsT´¨­uk–^™ rD_(¨iŸ/¥q&¡zÀJ•wd‘ïé]¥–•§øzØy*çÌŸjnIh‰åoVG®‹='ÃÄß]ùqŒE8cŽÃ¹ÍrZ-Î¥«üÖVËlØPcË;×K{ªÚβ-½´wS¹Á’sˆÇç×ð§é—È÷kdu42°æ;xð£ñ¨Õ"¬›ÐeÆ‹}k ÜÇ'›69BrOÓ°ªÖ¶Ôˆ·RÜÿg!9UQºC]‚C <ÇÇ«HzUvŠêîMìT'MÄäš”û—ËmŽZãÃW7S‰d¸$þ²y71÷ÇJÕŽÛNÓÙE&£v˜;Šî }‡A[Ù°Y 3×'Š«w©YÙ“๠Ññ0µµ3§¼¾º”$h"\’;±ÿ>õšñÍ=Ù@òħq<×DþÓM ÊÇœ\ŒÞ!Ô/f–ÙSìò… œÕ¦‘2$›Yµ¶y"²²’S ¬Qm }Ø×sáÉg¹Ð šEH™Áfr+εu4{ŠêpT­Ñ¿­mø?ÆkwáÅ7Ñ,3!eŠ8NâãŸá=9¬jSQ|ýK§-NÏPÃÙ\Cî›Ë8ô¯ѯ[JƒQÕo–3q4¬ È2p=é|gã ”½‚ÆÉÞб ,Èù|ñÅpº¥ÿ› Œ$†1Ây’+œ–ÛþEÊÍê>mEµû‹¹K$­ÆŠ®í4±ÊZ@ªªFLÓm•í-£”í`8Ï5V)å–,ŸÝ³sŠÒÂV¶„0;Ç(Ì…Ž72+§±Òì­ü ©ê#}Ü®!…UÕƒq©ÞIo¦ÆÒyq¼¸'E˜þ”èõˈ|;&Ž-¢æ}ÍtÇæÀÆÓëWФ›Ø•uûÛm>ÞÆ;©ÙC…r7gûÕëÿ õy´¯ FÚœŠ–RÈZ$ ‡@ô,ŸJðÈ$Vf% ŽéŸ_þµz†b¹ñF™pöºƒ.µnCEæ&Õ 1ò¯PáI§mZh{œ2¤ª1•` ’1ÅJ©6A œd ÄðÁ¿ƒEŠ\§ÚÃDg#¹ïëøÖ†¦äi—"4Ý(‰ˆBpIÿëÔ4UÎ6ɵEÕŒ’j,a’Aµwd¿·=°­ÏÝ=¾ûŸ’RÀo# ä4 ÛPñ m8Ì›‹* ÿõWKâKÝFÕ-­[33ä“ÀUÅDyœY™ÉéÍuªk°C;8“癟'ŸÀ}+ÕAQ…MÇïšÂÑ4K? iá§‘LÄ2VàŸjÛ2 €{J¨«aH„± &çÈ& ¹†+˜Z0¸ ‚ œ0#Þ¸Í~úãKÖŒ‰,†ieŽ1Ëëí[ZF¼.ÕEÔ+m)Û>”)kf¹wÈûTMk$w$zŠä5}&êÙæI§Xl×î8vÙÞ4J»ƒbA’­œk”ñUÑä™å"{\Á9ÆE9ÂêýInÇžëzr$‚óNB,’ä¸ÿÕ³×ï¢Ò#’Ùæ€°!K©Æ¿…gÚZÝ]ê–hÎào ·9m§¨¯^½Ó"¿°{i-ÓfÃå’0‡JqO–÷!+œŸ‚ücyyzšN¨»ç ˜æÆ“Íjø·J‚g†ýbL·É!# úf¼þ[y£–q#˜u($ÌLþ5èútÓj¾Œ\œÉ,X$t ?úôÚæ‹°ïÐå.-líás„WT-œŽMf›ÆžÕ¡€rXõ>´ËÑ4“³Lv„%vÖ—†ô¯í?0É‘D ÷céSØÎËÃOÚ,4ÚPmpF2Þ¾õnïRX>HÀf’OŸen#·¢„À¯¥E13Ü»†?0<-k§Se{hS´¹žöéˆmêG/=ú‰­Ë]9!“Γç˜ääüØU¸m!„/— (ž0*ÞÅCœèj[*1wÁ°©ýz‘í›–läôXc2IÉ=”çÖžîÎp<rj.jDSËÀåÉŽ@Ž\»ðHqŠ»±ZR`¨š|QÁƒ$ž¼Qp܆Ú/,—PÀ`œrjmžb³H@^8¥yáI.t85—>¥¿w’¥ö’9Y¶É.#ØyˆSÀê¬/ÛÅs¦0Úœdz³åM;–R˜!‚‚0}SUîâq§NL„¡¶ŽÄOjÒ=Ì¥it8ïZÏ£jEžã̆h‚þîGó#ñ¯D'΄Æ@$ŒcãšÆ¶‰‘i#,Þ`\wçŽõéÖVÿL†9U¡»D $s 9Ççžzþ5RBM³‹¹Ô,¯ôèË¢˜„™‰Ø†Fì{äuÅ$Οdá‚”S®Ü’00¿‰­ F¸S‘Ôª„Ë Ú zdþµÏÁz,D¬¨&¿› áOÉó´gØv¦&îîκ':6ŠdeÛ{™¹Ü;cüö¯1ñ®ù– Ü"yϼF9'§,zdäp+Ѽfì|¨2f ¸>ðüûב^ßý¢×Hvæ†62.~î?»M­ æÕØìüq%½Œ0ÇYVB@uàƒžk´Š{k¶”„*·—”1žqúw¯)Ò¯fÓ£ŽâK’‚PKgøƒÓðþurÂþê …ÅœìÖ%‡~˜úæª.ÆSwg§5ÊyŠÁ²¨1»½i¤®X6Σ*ONÕÊiš¤wðF #K·2 pxäÇ¡®’ ÌV¨ 0ã4¤\‹U†ia.q¸F;c?­fBõ2\R—ÐÕ«Ý\ÀBr@8çšÀ–õíî„áÇ ÁÈÍRVFwW.\Ç-œ›ïmÇP§‘VÒ'€y.¯¸gr>µµê2‚q=Cô"¨O1±®m\($†â¡;î6-Έ»Xö¬‡©' Ó¬´(§Ä—Pƒ1m# Æ*!âXWæ’"TŒn'k_ÃZƒjR¼ÕIT.qTäí`ŒS‘ö+ûíù+ºþÌÓÿçßô¢¹®uò3ãF’Is»®NW ü?úõ{O \¼Œ‚%D$€NõPkÆ$ÙÜy¬ØÎ Ǹ¥Œy³©¾Ȉ{h*O˜ð:v®–Ì-c^cæi²ÌÒ²Çr|ÅB0@üñšåµxà{UÑ\pªõéÜó]V±¨Áoi,ÆÔ¹PAàýï\•þ¡m{­Æ™$l …fëŽ=)1¤KáH%½‹È7/ ›,P*ô'–äõö­µÐ¼=e7Ÿw©}®f„î?^äŸÄV_ƒt«Q'k›X0$Nw7à£ÓÜÖ캓fÌÚžª×. ÌqaÏdþf’Zvv й‘,4ë-ñÆ ¨Ÿr§OZKçÕnUHŠ;e#«ä~©öÚ¼i2ÚéVª–ø'‡»~y5W]µeMÆä“ÙCdçŸÃòõ.hçuˆ¡KˆÚ[³+…9RÝ@¼¥J/íío`š]ÞR¯ÏÂîÈëëXÎÄÀ„HÇ sëø×Kg¦GskŒG›U‘Êõ-ع$t3Ýé/3Lv»‚Å>P1Ê ±¶’ï× Aˆ.}qα=Õõµ¤ÈÖÊ é*”>½qÇÖ¹©õëËù“O¶Ûù"PÌG=Ç·\ž[ê'ŒHžþ;tˆ™ˆËl¨W<úN¢°4û`cœã½vwòÁeeemi2²4<¯‚Iõ'œûVþ¢î…`©%c.=éÝÜW¾Å}mnv6Z}̈ŽC;[ð¯E‡Ãm4–·zÂBlíÉv×çàŒ{œõé\W„´›ÛÝr ,Ë©Š%”²×Ú½GPŠÚÕc½Õ¦3´_¥ss%¶Á+å•ÁÏõúÒ[Eq-Œ€”ŒË1¨OÑBܧ­š‰%ši¥V˜œædñŒp=«`B—š-¨WgL’ømÙà>µ“ŒGíP>Õt“¹Î=+§µž OÀDM曆À`ÇùÅ8„üŒ±\ƲBÀ«ß.>”ûøÖÖðˆeT«¼¨à)qõëLºœ^J$ƒÍÈ †à¨ëÇëÖ¡šíoçiee! ˆëõþ”öÊ÷Yœ\’¹9Å\€À°“ƒƒ€J v å®dŠºýÖŸÿ]NŒÏ'úµQgšI&º‘Àó“#Œ±j¾Ñi2‚>lpM #–Ù$d<’F cSñ4À§*0Mj.›!µT+FNÑ#ðë‘O6ðØ[-²ì ,Oõý)Ü,3J´™dÍ) ñŽ@§ë]]„¥w0‹…ûÇŽj–‘f$•"TyH-Œ(=OøV•ËH^‚xÓ]‹K© ú–[Ë)€ÄœƒÞ¦òÄëÂB‘–\š§iÏ?˜0XWÓ"¯ÄŒ‘,dqÇÉÐÝIEhKM²¶#  xßßµb¶6OSØž*t‰¥>dÌ‚p ô5D’6ÒrßcY¹ !y$…SÈriñÄÛŽIà¨ÅO ÑîÁõÆ «aTnù1œŸLõ¤Û+”¥*Þ¬@cŒíÀΤC+’ ŽjÄ«+‘µö©8ëŸJClÆS’c¯j.UˆÐ³BÉŽÎãÔËrÛŒRT·ÞÎh-³¦ã¸€xp*Äa7,n¨±†#æ$f´…NR$®g ¼G€’O@NOZÏœŸ1¡Uß‚pzœÿ‡½tOl|È¥‰Ý¿Ý?ÔU m–áVHÛu ä]ôêß^†2ƒG%%ºIxÀÄÎFÎ)c¸—ÃóÇ#!I€ÊFCŒñùsÚµo-žRÉ‚¿‘÷¬m`Ýj ¹%Ö&b¸ëð¯[ ã^\“z4sÍr«„¾5‘oægHÅ»œ£"`©õ=oé77z”Ò™'g^ ÛTŽsÀÀ®7PµP‹|5³¯µ Á[ŸÏй¥Ë5…ÄÚX¹l¡&&NŸóô5âæW†«§Âö7§%8èwibY€TÏ'ªÛ˜ “Ë`ìÿ¬M“¤ò}œ³¬¡°{ROe4Qù×Îv…@rÄýk‰Nû"ÜtÔxvÛ šêÎÙX‚U%çßžõjÒ¥P] 0á$ãÜûW¦·™,×Qäß1ÂeQNU²¸Áàõ'õ­Í2EÓ$²,ó¬R6ÈøT=ué¡Õ³G"„(ϹB•#?•fyëÓ“+8$ ¹a,×¶¨Àr‚@À¦ºY[Ý’û噲Hèµ&ŒX­ÖrTFëÀƒõ©F·ˆÊDŒYˆµ,‘ù軉 rHAŒ u•µÜ—Nca,yùŒ¶j=bÝœŒ Gçy˜\ªÆ*Ôð+÷€€pJŽ´ñ-•›˜4ǰ䊂k¹®œÇ9&š]Áö*ÝÏùŒÁ#Px'¥së7o/öq(œ«NÜsè+¥ºÑ/%´–eÃÆGÝ~[Ö-œ1ÉÊ…àV€àZG]ŒÚ¶å}ÂRë3›™¤òFA™†yúWiiaa¡Û1µ„Ì’ž\ŸéEiöÌ#’71€Vø=+‡Ô5›©æiŒ¦7c–#€£Ð 7Üvìz ë3\Aû„ò˜‘“ ÇN¦¹OëÆÍ–5µß1!QÎvûíÖ³ì¦ÕuHŶ–•r$œö¤ú×Wá¿Zé¯%Íû}²åÆYÛ*‘i\çl4;»çŠ}Bi§‘È!S€íǧµn$Cs%¶d#`Irx÷?κ;NÖɱ)c÷•cÔÿJâ5ŸÍ{z,¬Sd þðúŸÃ­4ÛGJ³Aj>Ñsu-Ôã(ìÍjØxŽÊëMk©&@"bޱ©ëè=OÒ¹« .æú47A¢¶QÀ# ߇o­o­½¦šŠíJ¨B£ôþ¦”­°ãthA¨ý¢ÐLѹþðõV#“K5´!d?òñ"ü£ýÑQEÕê™.ÊG9èsùšKM’Agi÷~¦’Co¹%Ýõ¾ŸoæO3K3p‰Žk¼Õm´½º…ægž\¬Q§Ÿðª>,ñ ZK=´¾Ô¦à©%Ñ5m ‚úÜ"°Ê2¾àk0BñÀ²Ë¿qœ õ=R õ9ŒWèþa!‹›g°ôô®rëÂWw¤ZYÈÐÆ¹%GÉÙ“±ƒ£Gr¦êk{¶² náärŸeKu4öÙ4‡ìÈÌëè޵Û]éSÛéë Ç3íÏËå| ÿZçoôÄ‚ÜÀܤñÍÔjF8;!M Q‚1Vl/îl®VæÞâH¦Îw¡Á©¬´ô¸‚vùŒˆ2)Ö6¶÷Šèò´.«ò¨LîoéM;2ùîz¼y©»Új/þPÊHÿ+ñ¯QF7V‹42! €ß05ó Ží.ò7êz“Áíž×ݼÖÒDq†Ri5¨Ó_#¡Hµ²¾:‚Øb`ÌoG°5¡o,.æEBÓ2 Ÿqa’„“Üô®WÅ~!‹NT´†åîSÝJ{Òè7 ï<3Ë]´žP`"Aå½Mu1ÈL ´ŽO5ÊiZ•ÂÚE5Ëùû†ÇVºPÒ´< .FG#51³ØÈxª.ð@ÿ ÛñUøa, ùQ©.¨Ù$T6Ú@«$o‚E¸>”—,›3Ü¥gâ ¶nf/ §‚?ôÛ›±q½“…“†ÆiÎav‘l@ºA€dcµý{þ®Y½‚¥Ï™ç9–4á6ÖÊòVbqî>ÓS{mvÖî7˜$ Å~bn•í¶ú‚^Û¤öÒ)Æw’+Å4›i¯dÚ f‘K‡ «î}+®Ñ.î¼/~ß…:eÃgr«úý+D‚2±»«xau[¡w³mÉÀódïZšfšÚ]ªZ™ƒ¸ÉÈVœh €­•8#ŠâN*’¹.O©by\+…‘Ü ÍŠî)!¾)*̈eA’§œÄb¨[jÚ¹se#\ä$`àŸʶ¬4¢¶h'`b0éàõÇ=xÍZ²ÜÆMî0Ñ/muψJÑ$^@`‘¥¸ŒðÉÿǪ_B§ÆvA‘ɤ9à €Ž=ª}h§†–0 ÿ®©^RÝNb…I,6ŒuÎkÛ>(l²~Õ`_½ÔýqùU_†þ³‹MŠöâyçA Ï8¿ M2`ívûþˆÆ´ø{eöXÍÝÅÄ׃—lü™ù@<ãß5‡+­’0 !UP1ȯ`») ÜI°¾ÖcŽç“^=¯Ü‡¿rYò è=èZ‘#»ðÕ¢>)$H€¸=›ÿ×]ÕU.Ì8 tó®oÂÂH4ö,¤†aÐ÷ÀÿëVåÄS\*¬*ppxâ¯t#*öR®2ƒvpObk.öà4¢"NüpàVž«°Cå²€ppÝy¬DæRêIõ©ó'm ⺔…Ž5ä ¹'é";H‘Ù€qÅY´³žYIŽ€·ß<`W@4ËdE$‚øÁ'µMÛØvgŸto“ìð´±äd(õ¯@Ь¤‹€b¥‡½7ËýØ P0jý˜uxÀàdd±É¥&kN6w7?/ÊŠnÛ¢±:Ïyí®õ"¸Øä‘Ë·ø Ù´Ô!Â)rÊ Ç_çX¡-ƒÉ-ÃFb`å‹{ZÒÒ&ónÚŠ@Ù'ÕÔr&>ÒÝ5™.µ_äÌvê{9?‰§_ØZEfʈÈT ùƒ¿Ãñ«:¶ÖÚDðÎê$†WÜ ÀêqÅg^ê1O1ur±‡ÀÜp1Çõö¨µÇ{#ÂvÓ^9;Iä(îy½sW/~ÌòFs.ìæÏÐUI#‡R‰t›8Œ$¡·Úˆ¼g“Ú¶¯lmôØ·×0Ï:‚"¶³åAÿiø8ü©5q\ËKöKõ¶´Â1 3ìÈO§­iÜè^z+ºI+€3$òm=0£¥bøFæ8õæ&ùdYÎÝO?þ¾k±ÖuöPк‚B«ÉÇ×ÿ­J:-ô9IlâD–ÞùÄqå—l…< ƒÔÓBéžÖôEm1A(ÚD™xþžÕcPb±‘‰È†|‘Xne’çaä° G\úPÕÈR±ÛÜê0Ë É´®|¼9fÚ9½rçI"†#eA €Gúþ5²îmôæwÆJ‚Ìyð>•›hì5¥Ÿ ‘ýä€;R°Óî]ÔÕ·ZÛFˆî„-Œ_¥V—I×ddsµIþµ­£;\\¼ û²ˆÄä€ ×Þ´%¶W‘‰@…ŽHÎÒztô¦.…o -î«`–Uhü­ÊvçÓ׿5Òëík $—i%ÄåˆVéÓ¥°ÓaKt¹gIrç$©ç©?§«w#ÚÍi§†Üÿ+H§æ'¡=ºP˜Ò²8}\[KzÀ,BhÆÐ—$ŒóéžJe¥úæˆÀvÈ*Ä8R‡ÛüjÍÖ–‘–º¸È;ÏÌO¦=«>(mq x¦xI`3Çó§`rv±–g’æ’7ÉÆA<žß­\½¾Ÿìiæ ˆåŽQpqZ‘[ØLvμ`8#=éo¤0€žåçuçŒÓD¶Û»1 v¼@3’¿Oz׆Ö(ÆLk'9,Ïóª1 ‡Ì)!À.1ÿסäH­FÎdfÈ’iˆ[øw¢þÙ˜ÿ¬¸c>´×Ônf·h¡`*Ùfï“ô¨ÅµÜŠw¢Èì0w¶Ñߥ9âf)EI؇ƒßñé@Èâ&N"Üç'q<‚G|ÿZ•oÞÊUe¸ÚÅv‚¼ }j´c‰B|̓ÀëÚ¢2¤Pí×°¤ÕÕ˜“cÞõ®]¦,Îà“’y?þª’)Ö3“òœd¸+Öm(€³)?Ý 8ôªÑ]…ÜÈCg$t¦™jîqx™ ûA“×ü⣚x¢D·ŒyÓüª=êµÍÈœâ÷˜ýÐjÞ›d÷oH1g.Ý[ÿ­Iê1Ö¯ys!òŒIÈõëÐ,t›K[1ö‡6 äqX+µ‰@ždŠÀžÝ=;Õ­KUUÊÝ(T†’~¹4n5¡¥¨Ã~M½ªl†'Ž;Öd‹­IGš²FN2£¿J®ðK{i$ñ¹XX…-БÎ:ÖðÝ{…<Æ1Œ1ÿë¡ö.*éÉ®™n°ÛT°b}Nk>þÈ%ÈŽ-Í$³’?ÏZÛ [ànÁÆIëš©£¾«ö™:" rAíøV‘ÐЧœñ)²°'<“V'KR#Ê“ÎkZê9ÜL˜sÐŒ¯íƒs²‚ÍÝ“™Y~íhxWÁwÚÄȪ ;žá—Þ¦½«HѬ4[U¶²…P70êçÔÒ¨ÔtÅÉÜÃðW­ü/c’"Ë ¥?Â}µuW%¼%æpˆ\w¨îoÍšy …MP6÷:˜YoÛʇnL@ÿ:Ã}Y¶Ú óæ½7+E–êõ‘s÷WJðñÆI@€}~µ¸÷pºýšÖßÏw„ëJ@„¤—2(ÀÀTàPÄÒ9»ÍÛÛ4Ï8l¶J„û§ëM,¾š&h˜‚V´uÍU-`ª$½FHþ•ÅNò\ÎÅ%HžN0N›DKv&‚g‘¤RÄÎÈ<`Õ;ÏSŽá'DIB®¼mbMC-̶óã*ò€2ýAw«Ï$ŠÕl’£$еFRµŒùÒ2SB¼Ò.”H„ÛÈN$Ak"êØZj»¶’…Ö½ÜY[jZ¡BL`«Ñ«Îu/ ݘdŠdÛ:Ê@É&‹4õ.ÆUÞ› Í‹˜cІLwªÚ,!”…yVE?0G#+].•elÖ±Ã3OùÆÇ]§Ë»´ÍAf‡"x|†’Oáa©« K© Y>×p# ’ŽÄ ëÀ'Ô*­â­9nTN¦4’0}HÀ­+Z&F³ÄÊF1È5ŸâŒMn¡Á*HäÕYµè>¥}?YQa,¾DAJÈÊ~lóœz]Ü¡I‰ö>Õ€msì;×’œ·OjóËùîlšâÜ3fE !lrA?™Zö¯Û&¹ðöÐß +ql#eòƒúf¯šú3)C•&»žúÞ¢$íÙ`XÛ(ª8\‚3ÏNÕIÖu+Ïi‰wv¢µÄÆáé]-ö‘¢nRlî€J~™¬>Â(oŒrZù2@ê#,x$çôÖ¦²·µ†îáž&Œ¬*qˆ¹\ õõý+Câs<¾µ“$q“ŽF|·ÿë×'áââ]Œ…vÉ!Ž}°(1¦Ýûþˆôm~V]6GßµšE]Ùàdÿ†kμG¬Z”av8˜ž§¦?:í¹so1#‹Xø ýN? ʹ¸¹ÑÐ}‰„öÌr#“%“‘Æxôþt今:ì6S+³V,GEäY¼gRbÊÁAÎ*Íο<ã˶²X¦ln3$oJ‡EK‹›Õ³‰Ø\Jà:‘×'üûÔ6_³i]š…%KÅÁÈŠ?2-ØËuþ¢±­'{‰æ“>ÂTpïE¸Ó¬´­)¡´·‰îPÌxb9É-ý>•Æ—µ{õ‘"Ny1F8ßõô4ÈjÆß†ÂO¦myö?$€¹üêÅÜ>Z° ø$>¦¹ÉVûL2ÚPŽîG‘Õ€À59Öl P²ZÝ´Å@c!ä·øõ÷¨®¹±XMÙßÉbzßð5E'wiîYò¬ÀdòKqÓëS\ ¹TI;Îrª XlLæYöía»€zôÅ;NÝ:n‘âC)þâôãüiÖÒ\›†³S†‘J«ƒ˜õwImЬ$E0…[‚Xv¤ô ÇÝØ:¤F  ±  ð ž¹=ºçð®ŠÏÀQéîÚ–¿YÀ§÷q1Éí’_AY7òù[¢Hÿs"çkŒí#ü?•møcÂ’ø—KŠÿUÔçžØ3¬VâBJ¨$`“Ó§AÛ½ ÷–ºwqìTœ3œ’µ8˜ª† ßtt®ÓÆš}ÃZiºt1˜ìAE‘Wœp=}s\;@«¹°@Ý‚ àvÃ]‰#Ú69ê@è+4D7HdÀÜzv~•A …gžŸþºÀ *‚Ø'hH.W‚Ò+ˆÔ¡mŠÜ/¯½wšv•k *Q<ÂTnÊçÉE€¤=ZÑ´Ôç³·1±s$Ýù¡£C`¸Œ‚ìŹä÷®jî\²G#—vÉcŒ*Á™îW˜H ç$ aµÌ¡¦àAÿס0zš†æ¼¨ 'Q²:óž+£ðu³}•¥('R?ÎkÏä…õm^8Õ„i÷È?wÖ½VÐ.¤Ç` 9¤\Kq&ù…$çn*ÀŽ;xõÜs×ôV&XáÙ‚7 gÖ§qæ”%2 FxÆGÿ®¨¾…û¥fÇ1ë\üó¤ªBÛƒ[ZˆÀ@{`Ÿ­aÏÌyb n8ôíIlT·3îb”J¤8RA'=1Uí’e”…eŸ—Žõ¥9Ý’b9Á횥VIÈ޹ëVf64•¦£p:ô4ö¨P\è3Å9cŒ²œÛ<žµ!v‰$ ¸Qè(ˆY! p 9»S„̪QqÎx#<ÔHU®¤ 0Á5£ed&™A9n#€(v¦Ùµäˆf,#:dúWC‘l²,‚<0Æ0rjµÄÖºr ܪ2Iô‘¨ëòÊ R­ªœ½‡=¹=²kJXz•_»¢&SŒV»š÷º•¥²ù/4i!ÈÃ8üh·Ötølå,ã#8ÚŒAéíÞ¸+ÛV¸t1º•,T`ÇCÜÖüö±ù!CìÝ¿ íXq~ó2öó’Ñ[§¾»’1K1Âíà*÷ˆt‹ˆôå¹ UÆn!O¯Ó×5›§Gä\’ÈÆ[—Šè¢ÕšR¢o-ЩFCŒœýzÕT½7¢÷¯Í¹Ä½°Š(ÕHF0{Õ2]gW,tž>†µîíZ)$ÞHÏÎ{Žyª,‘‚ˆ'ƒšö)Í4rÉjcÝÃ+xœ_G¾™U•ñŽFüA榼»ºr"’w0 8“‚~ŸÒ´¯Sh¶Ü‹¹àŽ èj®·¥P·Ö…¼©Ô1\gËn3øð1Ô¹%ͧe'td¦”ÆÐ£31ÆÐ3Í]x¡·`.I•ÙpR>@>„ÿ…hhÚžœÆánÉrvGl{T_Ø“\±kEe‰!¤ù@Sžë‰-4Ü«ë©Nì¦8Т®>Xø·ãøÕë+9]\¨pç=žµ¥i¡¬9Ý)¶Fjk›¸í ª0,QœSåêÆŸb=6ÖÞfšíÓr±GžjgÕÂÛÊc@AÚÆ­cK©%Ô…ÔÞrHÈ­›M)X+H2KN”o¤G{jÌØ%½D²;aAäðOéZBdQЈÜHàcó«3‹KuU,ƒ< ·'ðªÃWY—÷*±*œ·~Ý)IF;„[cî!K}»ð£PF+2çS+¹òªNqŽ˜©.ÒydŒœ±Ï-#gJXÊ»òÀe•:R½Ê0%s.¢·3å‹ã`<ÇÿZ¢¸É+“ÑO´¯8âó#E‘É5VÂyÓ7'09 Ao Vl«€IQÞ”*£ ¤3¨j{m:ëUœbb€íf èSÁóíÄ—¡ëޤûQÌù[8Û­F÷Ëòã‘ÑNA y5^ÚÑü¼“´–$òk¢›Dh/Z;€T‘óf ½¹¶·…’Ú,à»òÄÕ.ä½qàk‹‘†(¼àóІî# LÙ w pMliÖÆlÈîA|– `â®[øZç[¹A”¶ˆ’I:~¦«ev-^‡?ie{~Ã2I<äa;Ž+±ð—‚ã·ºj‰nXƒ•âk¯Ò´´ÕŽH'ïÊç’+£¶±†»B—dŽEg:‹d\i¶õml¡Àè¤`f¡“Q tma…•~yƒW {ÀÕ䞙ª·6ªy’I²5É#8ûÖ ®¦Íi¡N(â†á¦U{«¦àe²«þoìr] ×ÒäEÂ~>µÌ›ÍO[º6šb KAÃÉ›ÓK*X[G%œªOSŽõMX˜´ýîö-> Š€“€±F0Mb]ߥ³4÷N¯vT˜àˆÇ½QÔ5s ²­˜7§‡”¯ÊŸJ΃÷]Ë5ÌûË|ÛIùJ¨ÂÛ‘)7±Îk:…ÍÔï!Ì™ù¶¶£M²–âd’FÉ “[òèr>¦Ícœx#äCï]`š¿›+ nœ´/LöÕ£åŽÛ™¨7«<âî;»IÞÊc€LŸxŸaOƒFšúà¬mÊ®YˆÆ+¦ÔM•Åñ¹™Ü{úñjŠäK+œá²T1Ï¥;¶ƒ•&\Ó –ÎÂ';¢ùHƒZVº²\«’4š!ß’a LJ³ÛA— ¡ƒ™f³%•ío<àçdƒ<òO­fÕõe'mŽ“QÔôËåòå…œ®Ní¸ÁªqiÖz“Gó)<zT–Çv¬áO̓å·´ž(!€yh ƒªȨ{š-w0—Mº¶”[£ïHÜ:‘Yú½Œ“[‰Ýpñ¤®„4€oY29ùXgÕ~ÚÖFŠP2â“v.)°Ó#Ùr„¿±Ž‚º¨É”0yH :€+žD…q…flõèZIg݉ؠÎ@^ Kó4[YOz‰Â.ö'çVmÍÅÍÃÃ~té^(P0/œç;þifbä¶ÓÑTg•ƒN£U…iðwqŠÛ´¸”¢Æ±“…Á# ªÒ4fbŸAš¿`ZX#’'’95/R‘d\E'|FÜ`ÕkÉ`H$Pª)Ú#=ªK,›Ò<Ÿ—k9?…gËhÑ«t8Èär)GpkMLW[{ÉáG ä €«Çÿ\×Gf¡¦)(êCtn•söÖREö‰î ´’1Ü¡sòóúúÕ‹»ógˆ.,@=kVõ2å¼]÷G—ø‡@¿±½¾ŽegÂN»ÇQžžÆ½7Ã8·øs§/ÞFò;XœõëœÔLº‹)]VE&IüÊqõü+©ðôN<olÈ­$é…äŒ~«²M3*—qåg­Õý”†[”ûR1*&PC(ã¨ÿ §i+ÞëvÓC4 ÷s` Çr”Çyñ­_U²EË.É$;KÈ*£©ý1ÅgOO}kK[ãÛ07^™üé3S¶ñÖ”÷^œ «Ú¨™G@Bç?¡5ÆøNk½n ¸Ð›{X\ŒŒ`}2ïšõìÿ„TÞ:Û8Õçñ^™ab4¹œE1””vl)w=8÷¨»hÎ;´Yø„]o휡6évÉÂŽOZå|3¢K­Ì×,ä r2N ?ô«?ulçô—±\Aw´·e¬9šX$÷Ò¬ARr>‚DP¤/%ÄÈfVùÉ b¬ê^)µŠÜÇmsòÝ·p_¹ŸG²º˜Çç\ p¬¹Ónnüf)£@c·úR“)lG5ë\.Ós,¤¶IEàþ‚eqäȘ‚åòÃ$hŠîöy•c²!$ÍV¼­FÞm¥#F^Y;õ+B×Ú‡üù]QLûmïüõ‹ò¢§AœtòT*T‹i–2Jܯo¥]´×"Yw3á‰äªO©5BþÂêúkXÚ9>@s _–@z}µmi–PC$i$A”)DË[³+¢°…'Jå%üÂ…„ƒŽžÃ§á\¼«4‘´°*Ç‹g©È®»UÓå‚îßÉŒˆ.RH¡>ök(é÷í Ȇ ¹'§_Z7);2žƒ–ö@N%À)‘3Ÿå[šÆ§sEnoo%˜b8æbØôÆz{ÕmŧjOowÅ4£F^à~µÓËa šÉ4{Y3N ¾ƒŽ=èÔZ^ìâb‡Sk“r-Ú"y ýæzµ=¤:‹J±J–~JãÛµkB4–Ü†Ý |ÈGÿ_šÌÔÃÿiÜEˆšXC0N B êbDËkâ ËUÍâm*ôLл™ÐÆ1ÉÇçô÷©`°Iµ+KXÕƒ"y’îäîü?•u³é6×p„V;”ýà0c<|ÙõéI%Ôm·±PA} ×tó©F »v¶׿Q\ܬÂú†Í— Aóx ;qýkJæÛQÒe$ñÌ„€B/PrëTf³c,4ï,Ž6’Eþî=úfªÄܧ97²2ÊÇ–2ïÿê©`2À#‹ÊD—$( —'ù w5v;imí¼ØÐ þÁ@ëøb¨\ÙUC;±šfØI8TÏóõ4Årig‚ Ï2êãÍ*DNs_riöúŠ>Ÿ)úŽ—¨Úݬ7p›pbIsg ¯jí|ß èX•¯îŠîÎÌ={3õ5—®‹ë䜌èÆÜ?‡¡ö§b}Nn ¾`U­œ`£rd•uìšßÑíp£=…Y²”CpÆÊò0sþzÔº…ÚÀª%òÎ0ÎIÅ&R1gC Å$yW6…õ«¬®àÜÆP\q½IÀnŸ­CSÜM¼í ÊdæqZPi…›l›¤<n‡µ1"ÍÍíìB7…•@˰=º}zf‹qsc“ ÌÑFćErýGC]/”FÉ3¦’¤ðNŸ^k:’öàïBˆœ}èf¼mˆÛqƒîMVRÈÄ2`H'¿JÛ¿”D¡ˆŒà¸ÍbÏrvñÉÉÆpIªD²ª!3`±<ƒÀÇ5$óE„É$õõ¨%» FOzVt®K–<“C —Ž¡ûáå§ÈàœœñA¿8Ú€ŽüžkKµÊ äçÒ§MÒ(ŒH‘R3bÉÉc ‘ŽÑ–=08«ÆI¬‰::€Nä~UŸ£JÑ+Fêy9vzõªÎ¤ŒÖEw˜àep@ïÏéRÁ<'“P–øÃa9=kÒ ‹©áAFH®+Dµ6Öq¹È“€bkÐô›DKo9ùy9À=Uìkr¸UÜNpcl9'Ö”6ù˜‚¤R[Æ¥šRTƒóezžõNÆâWºF–bIǧԲޭ0\ $±Py5‘t$XU¤ìð­[·yg–ÆvÎ*…ì^tn¬ÕËy8¦´A%r’HÍjd :Ö›j†}Á±³‚p9Í$J%´láP0 ¤ñRXÊ$>‡€jd ¼!U8!²G|S<ö;Èl×& ½Ï‰‹n9\DóBzœU âvÂw+Ö¢€”´UfFAã?ÎkaçÓcE’vRvŒ€›ª½»ìg]²$±L>_Þ ÀúþŸ‡­hG-ôÖ°ÝŒg!°Ø84’ê)j%¶· cɨ$>¸¨fÖ—ìÀIÀígÓò¦’êÁ·Ø·œ|¯ßIÇ@$ô꧈Ák˜ãPHÏ#89¬‹mQؤe1È%‰çŒr*Q×—s,jDe›,zŽ?JM®…+õ4D‚áßs`q‚OÖ¢1«íHcó‰éM†Ì˜Ö60%°$uÅjZDðB¡UN É<­''b’3bÑ‘Ùä™uù¶É­Ò¬f´çU pv¨ÉcéIw}˜ŸA·r·m©Î˜TbT1…ôúRI°ºG\“­¼-¢`”¦w+—b1Á¡®)µùã‘1À8Æ8Ñi±ÎÖ¾uÁÀä)9 RhiÜ­¬[›†c„$wÈ®rçOi!dVËp#u®‡VY.o¡‚Ú7‘“ÀZ¹g¦}‘’iTÉ(ÆÕëÏ·ÿ^­4¢KWe=ʶñµØÚª>ïBk¨‚Ø8Ž;e½ÜQ—Š$^²¡íÎsQÂWeo6Ö…ü¼q ƒøT¾g±K•ntÄ©€NHü@©ƒ È2:W©øÆ…¡Ó¤ßrÊv’¸U®ÿá!iäš=VE’͵° Li7¸ÝT¶={S×,tÈó3†‘ŽÔŒ™›ú ä/õ{­jd¶Ù„fÂF‡Œ×,µë‰ÐÇp·gvHÉÍlhÐø’ÓT†i¬XѾl.1ô«Œ#÷!ÉÏÐô»+xôë%‚ É<äÕy"EWk—Îÿ¼ÌØ$žÂ¢{ÙÙ†Òg“œ°¯“V½mÓÛ9!°ª¸ ˆÆïsFôØÕ7+m ¤€_$:sO#I<›"`‚EcÙK·R†™€=ˆï]K £e° ƒÜUKÝØ"¹·+M{kd†+mŠ@$·@+Ôµi.¡´v.Çç—<‘ý*æ«§]¼À(-p6sŸ­P)2#•,ÊN{Ó‰•Þå$K[^YyûÇ“øVEÕëÍó}ÜéZn·lKð£…éU`²°R É"´ZìE‹þ¶w¹yH$*@îMjÜY¬Hwaš2pð+SDÓ’ÒÙ·ÆT“œžµ%ΗìÒÉ. ` VMêRއ:—&'>^C±lòkjÒ…`“÷X‚()¥Y¸Â Ï,igÖ­¤>T,~P:b¡®¨kBÕͬ.†FmŽ88&³^å,Ô¤39åÍFÐß^Ϙ‘ŒgœžUøtèP¡—çp9#)¹”€HØ–%™™º“†ÍXƒF%Ä…6¡¢´¶Œ(`r <ƒP5ÅÂ)8À8éÖ˜n­b‡ˆÐ´ƒž:VMÈÔ!ùØàmm30àPKv9q$ÝH‹…ŒXt‰Ôy“Hp6ŸUÔ"HyIºL‚À Z—ú‰L’2‘‚@ÂÖAg¹%€uýÐ?¯Ö©2DHMÜ'Zeƒ»5H$¼HV)öyÀaJñž´‘0€³[üá‰É¯øT3Å«I<Ù¸# 'Z¤K-iÉ*å$pÄœç$óSÁ:%ÔŠ\•Q€_Y)~ùX‡8ÜjtŠ` •ã<1iè#iuƒ*‚ '< ¿lírÀ@냀:V^lʼnnIb=iEjðçqÇJËXBF\ÄôÈàSå¸_âpHäŒð* i™  ·q^«˜¦mà€@è +\™î€o›¡«lI_Þ€Ûˆ vÍQH¶c'@HÆ2;Tð]ƒòÐ’2:t©ßb½K’Ò6z)< ªnB©I'' Ö¤Š&dV™Ï# è~µ+¤0®A á@éCÜkDC¤×*¾iÂ÷8é[zu¬PE´9B­÷@8¬yu/%–8À%˜‚IÉéVtË™DÄìÞ†lœÿ“Q$RjæÅÜñ¢®æAà‚k:æ]ä’Ĩ 9ÈãµHñ)v—p.Äs¿$t¦… [{‚HÇLâœR&rv2DÑ<ëlVL\+>HüóUå·I -2 ™*OΧ¿¿µiOÅv·1¾B¯0¡ü9éëUbÅk¼)ˆÑhäŠÙynr½Ì{¸ÝgXI% NÂü3–ÐyíïÅ[ðV©+h3É$ w#Dû° p?˜­CÎD®ˆ¬ ª¹L°_LÕclÈ™á‹1ôÿ RnJÃŒõ÷ŽgĸÕu›‹øRÜ$˜Û‘‚Œ?SÍRÒüªÚjvò«YAoViU‹HH ã úúWVÒO w’ÝJv8Ýôöªšuýíàó]ˆ2¤žpxíùT>bԣћӬ—6Ò[Þ”¸†UÚñ¿ Šð=SIhµ‹¨m¡•b[–‰ƒ|Ä(æ½ò9ʪ$’+K!!@,=«•Ôü=m¨êæòæ °-JYIàtçDbÁÍ)]U¤hêZ’Zª@ÀI.rª8?‰ÇjõËIàÑ#¶ÒtÈnÚBž2äõ$ž=êݵ€HöÇl¨«œÓ¿ëNbmf P9 KÉÛÅ_³D:­½ŠVÏ3Í(‘¾Ì¨ØÚêU‰ÓéRÏ,;°×ŒÀuÁ«7K!“c0àò:Öïˆ-íæXVÙŠœ“ (üh¸Ó{Å֜Ұ<’¤Šª±_ËŸ§éëÇ™ QŸ¥W}IL‹1®Xå¸#ŒÖÊßj×JÙÏ`€u=?PÍ"ˆí´=Zç‹;4bÙ ÍœR^iÚª+ ®âˆr ¬y«þ³o(…õk@ ‚Æ5aX:ØÔíÄRiNÉr̸Ywõ©’obì¶DÑè×NÁEä¬ìy «Iá‘ò›»÷Üx+æUm?Tð|ÌWU¹¿³•@)ö™÷=¶ñùօܺ%½¼si:eÞªY×+±€*{†éY¸6÷/–Ú ÿ½—üü7ýý¢¢ÿ„—Gÿ¡KRÿ¾Mry†‡9esþ•-«HÔ ž€gßÔþU¥êfGi²€õÅM;i7-,É™N7£sù÷QuyÆÕÛ`;¶‘‘þ5®§=¯©ÛßMψ¬¢ |¸33àñ铸ի‹› yeg»Ëî8T\œóÚ¸èó¬“HäÉ!lg”±—Fmöë. d''Ö…~¦„ñ]k·MnÝ-Ú&,ryç'é[zR[ÿf"_\Jó),ŒXÉÄã®kš‚(ƒÇ S;Ÿ*»AsïÜJµz.]‹[\4($ã£~(°-N†àÛnV·ƒjƒò ¸?×éY/i=Þ¼ßfµ,D m'9'¿Aîjµ«ÞÄ!’åò²TpÄwǹ®ž ›“l-´})¢2$ºs’zŸ¼p8éý*¢…)YÙ´ƒCÖâŽY7Kqgœ¯›×n}1WgÔ"´PPŒ‰aœü÷éQx†ÊÎ/&Ѵ΃Ï26à܃מO?ֹ˛]™GxTtFÀ#ŒsÜŸZlÇ¡j]NkùÞF|@p0£cüƒQA=ÊÌná¶C 4’I>¿§¶4mä‡ÌÔ„,kéŽõ­.YI nŒ‘ŸóéFƒ³zœèÔæ»F(Tv³Œqžx¨g´+¹§yš&Vec€Ò´ït˜bJ3–’NGåùš­},7á-c†($·FcüñïCX_鮌ÈOÊf$rø‚ú+K7!8UPÌ9?€R 65„Æò4¤ zè*ý€ºÓ®ã¹´&& (°¤ÙÙ[x(#{írñD`e‘ddï7aù×?âf§ŠËJƒ}´G*ØØ¤ã®ïN¿ºÔu…CrÒ*ýÄÆÕ€¨E«(C—#cå¦[] /£M;ïdE2YT*Ê飯%Yˆá˜g?ýzÐeKÅ’@|°;>N{ƯA1yŒ28pH*€àŠM#:ÞÓ Î#Pn9ÉÁäV¬"š8•æ@ˆ­ÃÏ~+A-„ÜáŽÌpKwÇ¥P±Ó./.„Ó|•Ë*ޤ=‡OË:‰öº¾HŸäÕ{‰#…Ø œ.â0ó­i`†8âóŸb$2:£q ñîXãÆÀ—~ 5IÙÌÝ››˜Ibx4X’ƒœVÞ§zÄ4qÇå‡ÉÎ1‘\ôèûp8ëéVÉD2>ç'©cµD|ÆÆ8´ç!T($“ŽÜÕ»+n$ X,@2Õ*Åe‚`dvg'îÍmÛÚLÑ+H‹D|¡y'­lC Ú鑤­›+ rGÒ¢– î¦s!1Ƨå k;¦ì2µ…œ"Gó ŠJ†[[%æ¤I‰zŽxç=jÂÅ ¾Ÿ8%šY=‡<þ?Ò´ü9¦,Hgt˰õüi­Ò/Ø+Iy a¤`1Ø8µuÑj#q´H˜² µÍZÂg2-’Hàö­¿Â&†[¹'8?ýcB×SEu¢w6Ô`_bœ£#'ŠuˆH6žŽÀî=ÍExŠ×FIp\ žGô§ M©F1¡$à{Vh4YR fòü.8$qý¥eJìÊÉ#d°ÃÉÅk\Kçoà¬C@ÎMc•ÌÁIÉ98éŠCf|HÍ/…É c³± i^ tïSÜZˆ!È I v5JyZBc€'¿j[“±GS¹y--ƇÌAÆÑ[Öe¬z\«®1È®8§9¬8- ß2Ubò§_VÔ¡òlX’r''>þ»#/gÊek»³júöÖoÝ¡dÝ‚zãÞ¹ó1y·´„mÆ@àŠÍK7C™#± ΫˆÚJ œ÷©X‡MYn<ÎäË+†È^3œ“Ÿþµ2XÙÉ,ù²ÀœT3ÎhÎp ‚jý•«È¤”nÄ)êOùô©X†ÝÙ\Ú¡•IÉ9 ôjÚ)ï‚©Næç§ó>£1ˆámÄÄ£#iàœt© ˜¤9-¸Ãó­iõ‹-7'rå¼¢”!•$Œ€)ðXÍö€$‘\žv¨Æ 6Í‘wŒS,6óþ¿Z”j©!f‰ # p0+âj=jFÕÚB¶R€À2FySÇnk“º„›¥1È0Ãr‘ÈÕÑ-å½å¤ñ‚ ¤ R¸Ñ„Ð,–¯½Ôå£' >ŸáW†¬–“aR<Ú¢®™*¬2YJ6H¬väzÿõê®°$[XK¹˜`äc¡¦¨x.D±•|I8ÈÜdœž¯Oòj²5Æ&*rÀl Æ:ŒñÏÒ-Ëa#;6ÈÈ Ê‘JÍ#NÌC ^IþœP"Ú< F\dnOÖ¡¹xÝT& ™ rsÏOjî;f1áKŽsÏø÷¨lƒÍpåælsŒòi K`b—ä$³¸Ï'¡®š øí "ÍÎ~ñ#‹ ´³m%\Ç’¸ŽþÕ©m¤ÄÊÁÊŒ¹ÈóéT“bæH„O:Ü…Á<¸$š²’ÝâHÀ+x9 Ôåím‚ 9Á*$ÿŸZÏ—P–VÁ@ˆTœw={ÐÒ[1.¢¶B<éÙ˜:â³'’®€°ÜAÉ#mi,i …ƒœg=*àÐ-gEyT’¸<žZWfN™WW±Æg Èãô®ém c¹Â–QŒíƒÞ›£2H<êpI`Xõþ”ëß[$l-"/#c©à™DqgBϼM!uŠ4Î_à:åuOËF™ÁÈ27$Ö=î§©êlX˜(`Tg Ó½gܵʱi†ÎÛBàcð¡$UÙfMWS¹VynÉ!†9¬¼ßJ¤­Ìdg* »E,ÊL·¤€ÍMa¢Cx äŽAúUX›ØÍ7×0J$ûF$ÆEt–·«EndO(¶dãæ+Þ¶tÿYeh¼¤Ügô5Óé=¾“¨%Ác‘ÀRnÝF•΂:ÒÆ6á0;j½ÍÁÊÁŽÀgàÆ´Rß|dr3L$/.«Ï‚—sfŒ¤¾¾‘°Ö;bÏÖ‘î®>dq >™8«7÷­ é9 £®+—Ÿ_‘Ø€áq‚0E\Uúô-ßMl̾kaÔ6yû}líÌŽÆãÔÖ¹q˾ðI9$Ô°[´±¸(Q‚¸­%h(ÊÌÒŸY”M"ÂÛÔàŒ.qÖ²õ9d’{9A¾f+Èq¥³ÓÖ0.ÌméMÖñ&šàà>79–È]JÿaÝ,’ŒIF ?Nv—Q€²~í ØÇ85ŸË^ÁQó(QWtÀÖ¥÷>ò%Aÿ×§wk"^÷:’á÷€ÄAš©-МO‡‚ÀóŸJ·r«y`1\ḤŠÒ([1ª©<—Ç5‘¥Œ±¢5ݪË+ˆàyÈä±ÒtϤó¤ y«íäÅävq–ɬ‰cŠiü¸¢bGSךw¸¶ÚìÓ°Ž%t«MtÑ0’_™÷  ´šdÌù#ñ¿©ü*âÙZZ·™3ù×Ëãð¡´+>¥8âšåU£Cž¤ôêGò­Õ^áÔ8œäT³ÜÝÊ6[Ç€zb« åœMs##•Jãô"kÖ …9¹5œâv „`I·`+~-: raW®é¯n”ùL0*«œ1äæ‘Hä¦Ó&ÇïPlíÓÿ¯Qy)A.xr|WIu—9W1žxä‘Lr72ÀÀÈ=h¸ÙËH—M3ö¬ cŒÿŸJ>̶ì”ŹÁۊ鎙*dD„!$”è:X¼¶Šb<̹ª3å9Ó.äœ>PÄVÄMv ÍÁŒŠ–uŽ)D!q+d„dsVc•„^Zí Š´´$–%XcEéÀ\Ž*ÿ,:±ž•›™L‚sÔñÀ­X i!|ŠÁ= h±i²,«U\t«Ïl×>Õœ¬c˜8 G¡­!F¦4CÐç›4C~Ïû§ó À<㊅Ýmá•H(C)Ç|Ô²É,ª¾ã$dš‰í$š9ÓqéMyù‡)…nIî9*[;ƒ¼6sÉ¢´P-£i!úÕ—¸*IŒI9éŠ"¹´PªÓ• 18óRµÚÆS¼Œ¨¯JRݹ1®pÖ? >žµa, ¶Ý1w–f,yè)hdÑÜ1Ã!ÉXê+>y\ÝÕXã‚@È®ÛE4Òn’S³© 8¬N€.qò‚Çilß4^ÏRfÜÈ3 з˜AxÁ?ASlj!Hž ãéU5=]f–Ò;5ûHÜÁÞ5Îãîžõ(‚å2‡w;J`ãÒµOCžkRìví$ ã‘“Î<¡g>qeN ž„sþqV-žu̱áA$‡<ô§ÏºòD­Žœç¤š3w(ÉX„l'¦)ŸgÊ’«„<€F3ZmdÃ;p:•ú|¨LOÌ@ÇÉ4Ô—qr´Ì÷»·VòÊÂèZnø3¢«9ÁõÀæ­I¥Ì÷1ü€9UÖ¢{f´IåÊT•l±§§FÛbŸ3/—°"Ud?•NüK˜)ó¸<‘ROr¶É€˜Ë€zÖíÔ·#p½vƒŽiì5-Q-òÛ#wBµ¥iqöË5´±•Ü6ŒäTÐj¶¶°Üolò»rH¬FæÔ—MÅ#.ù?*Í´oËc¬ö7Kä¸|Ldàk0˜RåMÅÄÚ–w2#7¸ãƒW…ÐY]îÑ€nxTd3\þíT•ٜҾ¥«šVÚœ¯#Ë+{¸Þ"ÑÉf‹‘þðnsô®ËÃ3é·o$3ݽ¥ôJAµhU¯þÍ^í#›` À †!½H÷­Yt ýBì_^GytYq¹†$Ïlb¡±«ž›£i–Æ+»Qs?(¸rÊØg­yÖ¯áëÍPÿ‰«(‰0´yw(ößZ˹½Ö¬¦ÑOzèƒEÀÉëÖ¬Dš”±ZÊâ?ÆsYû×Ñ”Ûcÿá&×ÿèoÿ}(òo¿?ýù4QïŠÇ©ÜÊÆQ4¦IÈÝýáUṊÚ {Kç—#ÿž•~{D/4¹ó g“‚? ©eorÁc ƒ€Ç“Z¦gÓSF deœÁÚŒÿŸj|§Ÿ ‘ÎO$PÄŠÏäÌì8.$޶òà.HÎ85h’èµ¼Vbn>Fà î$ñRl–(K‹mø…fù‰÷þuZÁî.o•yRr+©ŽÂcÏ›¢áb¦“­EgrÆkHn'b)&>=}9ííWµoTº…ˆ),cnGׯåRi^{ù¥`©”@‘äê26Š×ôÝ UR3{zŸÄã!IÇà?4ÅmtG!&‘v¶ÐÜÜmA&HC‚Aª×vË%‹ÆˆYÓKŒÐý=³Z‚êûÄS™$”EìQƒß¦z~5,ÖvÖ¬œàKd7ÿ_Þ“hiÑŒY‰•ÿvWçSÁjé16 |FµÌDñÛÝM%£î·#„àÆ{ãÛÚŸ=Ì2¨Žó¥"5l`TÝ”=VïNX|ɰÎ7uÍs,’íT7…R2ElË£Dm¾×#bAÊ(à)¦BñVˆí…ÆrÄñL§¢Ø=ä8ùQÐàðkI­ã²à*3’rç¨<Ö;í-ÅÒ@æ@$JÙ¶¯Ô\,…PËž§52›@–šÅjòˆ*žAÜÜ“S EUÃiôñW¶Ø”îÁÇ'8&¦¶‚7bñº¸ÜzœýjTœµˆb°"×qPA 1‘Q‹ ²F$SÁ“[–á^ 8€k êví«ì‰Ë´D‡hÎUG½RÔ…Ù#\LeBÍ SÓ5Ï^êÍ¥ÄÍæU*\k\]ý¶C d¡ÉpÙWâkˆÒù¡·@g˜ðÇ£ÿ¯UkhɽõEýQ»×g”\²Žn5­.˜s…O8w|¹°¼1¤_Ûꀮ| ³7FÕ×^ÞÛXBöðº—bUÔu'Ò´Mô3Óvpºø-yç n=¬{»Rv€ùv#=«s\÷rØIùTœñYVó¤ó 1½•€)ÏA&Ea ]\]4aâ@ƒ–nIÕ×x{ÃñXÉ%Á/#‘‚ÇUã2™Ñ¬c¿’Fø×eii2é¢ÞçbÈÊC•à¥ss7/#d™ƒw™ZBÛ€†ÿõÕf´Ø‘…ËÇК۹·G‘P¦ñÈZÆÔnaµdY$ØNO=qBJ÷ —aARNà}u¶VÑ¥œ(­Ì‰·Œzþ•½úÊÏ$I#ÝqŠÒÒ'Ôf…“~Àçš°:^Ò-£†<aÄvçÿ¯[>¢ÓÁ[ƒ÷“·ëX6vFöê!$ŒA*e8Íw".ØG dFŠI94-ìËK©ÏN$[‰duP¡Ž9ÈÇõÅV¸º–Pó4­…Ï$Øô­ Ûie&N¥\dv8Ïùü+9"f¦.HPH`÷þ_ýjÒ㱫m´³Tl3íýæòÕO Häb@'©§e’†Häš§ªÊ¨Œ`Œ‚T¹Ú/‹OH\»mÉx¨l!Y&Г۷`v«ñăAÞO…EáÝ—š”›0Ñ•=CTÜ]M›˜é²É Õ9ìrqÏõ®D[Ev… d ñ޵×ëó¬Â"ì»¸Ê ±®QdF£ŸwˆÀ&´„ì¬)­JrÄ%_4¦ã½R®H ‚8$ÔºŒîc €±ÉÁç¿ãTpA»sŸN•Ë:—v5Œ,®ÍkI#g QÀ?õb]M¶OR¼ óYꔓ´+vŽIéùÖ…Žœó2³O*OOð­`µ3nûˆDÌ2Í+uÀ8ãò­ #Fó*l I@x~Ÿ_‹×X!"Œ€çŠÃÕ/dû2–˜€ìq¦rW¿Nµ¡&«KŸ¸Œù„2æ°ÿá$·þÂiâvK’J…eÀ'žý8皯=ÿÛoVÂÆÌDX`€F#žüŸZÇÖ´› ë*B¡%bBC’=3øÔ²–çgm®Ã5‹ÜÆÌ說¡‡Ž8®ÂÚæ … ®7ªƒÇ<úý«Å£Ò¦hbÒH.dr6`:`õ­m:}j)”˜ ˜)ÂÈNÓ‘×QIÄiõÜQ ã”S¹³žÇÚ¸¯ªkÛJîFƒþy§j:ôæh˜+£+«' p*õÌÚ‚‡2†.\ æªí­H“¸+¤²ÎŽyŒíóÆOO¥BêVãorvúc?JO‹ä,%‰f $œþ•}¸n¥Ë ƒñüªH#hð­1ËåÎAS×éVòÏ1H˜ËÈ'€Ïo¥$!ü± jÛpT€;Ö¦˜ÒH&Æ09<`uÿ=j’lMØÍ{In.8ËJ@¹ [Úv‘Éœ°‚÷çúÕ†¶Q•— ¨ #ÓÞ«O©±ÉQn¬ &O¿ø Ó•-É»lÔº»´Ó„fW!¶åc#qü«=õ;‹µ“ÉŒE‚ ŽIëùVEäˆÐ¬¾X‘ÀÉi>œÿúêÅ´ó4ñÇ´˜‚U9ã·Ö¢RoDRŠE˜à»I.Ðc%ºÓ.<ãÃ÷rzн£½¹2§#aã«ÞDÏààGŒÉ&¥.å=Šé{,q™™"Œ`A¬Ùu¹náÚ]ÝŸ*Â3_M1dZGÁ\Á=zÿ…Klllâ`‡‘³ò¢æ©6&`Ãe;€1•²sëÿê«Ïn¶ûEÎÂG$й=¦­*¨ðô–õ>ŸàéeºY.äiŸ˜gå¢ö̉ÞêlÇ.  ±¥èw¤ß=½Ã(9É8‰®æÏÂ67 1ÚËÔ( V© –јu$`“K˜ÑC¹Í'ƒl!aö†@ŒóZuµ…³0Ó,÷ȧÀÎ YÅç‚åK·n¹«)$P6ƺîD1ŠW`’C Jâei§X£^vI©Ä¶q‚v1`9,3Í@n%¸e†Å ; Û™rjàytëo3PžÎrõè·r½ ôËÃ{IövD æ W]ÕAÝ+9õ{IaYDŠWª¯Fªoª¬€®`T¸QÊÛ*öE«›¸¢äÞ¤/ƒŠæ.¥ƒPºf†9IÀÒ>­WIî5±ˆœœ®r)-Ñãmãàt ÆyªZ{™2YG¬¢§ aÆj®çlü€ ñZzŒëå4r¹%†Òf²â­9ŒùŠ(FsEô°-Ìû»•3†bŽ@C€iÌEÁÂä–PI=dΡ©¼qÆÌ¦Ur½8ï]´CA (ÀÀgšmØV»8í3<öáŠ:’Ã$Šè,ìO1þ@HäŒfµ’ÚÝXHÉáŒay¨u‘àiAQÐÑÏ}–Ú‘i÷ŠëqÁe$©õ-´Ó_³FTŸº8È®n–Þ`âP €…#‘š¿e{4W‘èNð¸'æ®T´¹ ]Ž-8,;fÚÍœí^ßYŠÙS%P(<ñÇ5d"3žr3ž´ía9´ÉØÚÍ¡XÃo\ðÛOô¦:öxÑqÆàF }}³Ú¥žÊHffXNIÁ¯ZB‚Ú"›O™’ÍŒíIéª&÷+‹(¬°ÃkÌTÛ?Ε®¥1©Äj¿‚[O—Sy*Ü.r{`TSÀð&C‘ãäTo«­¡™ð7çŒä T¶q"0G<Ö¡WPI*FN29Ç»xž,0HFNÀ™8÷õ­5jÆM$mYÀ¯ ‘Ø;}õÁ'×?¥O{p« "À€PòkûBÑ›1>HÁ*$Oÿ®«j:½Ì<Çcª© ¯—+ná},6k–Î7¶óÙlÖd÷nŒDx u$Óœ3NÆNIëÖ¢{`I|üØ V·3±B@Ë1˜皧r•ÀSGRyÍ]1ÛHÁ&«]Ç4¬Î8ÉÈ¡±ÅOq³pÄ ·­W‘%ÖZG‘øU$Šé-4K«Ë ¦ß1•ùŽk¯´Ñ ³*R%…ÉÜÖMên¢yÄþ º‚8ša$¡ð0ƒ8§ÙèXÝô[çòŸgÈ?­zÄq2zõ§¥¢ó a|sPÙ¢‰ÎXxjÉÖ;—F‹Œì1aõÅ\Ô¦ƒM·C´“À~í~jÜÙ³‘ŸqŽ´…À,¹Ç ã¥E‘V9-:ÀÞê+s.“=¼dŸÞÊT±þµÕ-½ª.ð;âœ\"’ï…Ϭ۽\¨ÌÂ~¥¨·a]#G˶þä÷Ńÿ Ï'ÿ¾ ÃMw=‚\›{´&@8_›ŸÊ²—HgÔ ´p¨ÃpYŽøÍhêzHÔ¯ fEó‘@fS€:~u”—WšCLæ ynÇ‚ªKC \'¶y/6,èÂ5Ã4|.?XH˵ó1‚øfÿ>ôí6d™LPH¨ec¼‚¾lÃífdid–•ih>R„’C«+L»VEòò‡ ’zWn>Õ(^B‰’@ëšÂxáòVØТü¥x!ºæšó^„ÉŸszÇQI÷ [sFþy-ï,îãWW2m'¦sÓ×¥P½Ôîf3<³).:ç”Ølî. M<«»#a'éÐZ²–ðĪ$• S“Ÿþ½$Ź6…-ºéñ[‡1€bJç÷¢s\,qæBX€Nx<ÔA-¢‘^[— HH×çô¤¶èãìèT ŽO?Z´‡b+˜'‚Q'È‹+}Ôàš#jÄÊð„8ÂIÿ&–ýá ¹}ÏÛAæ©´²,D&†‚Äó_ „`­±AÃgŒj¡iu üÔ¬W'c ñŠ”[›M6F Ù 0àŸaþ5Æ[êsÛis[@¬­?éýzšk î.ϘàÎ~•¥ž6*¤Y' d“V’±ÎäïccNv“70’%ù'©¬Ý"ÄëõÍÛ!‘sˆÆ0q‚jž¡o”,ÓáHñÉjîü!¥ÞŒÂ)HËÜÒJÚ” ÜNoRÖ®Ril¬ÐÆñ±¥îOµEecäL¯q"=ë)dRǯqšÞÕ¼ÐÛÎbÔÂîbʲOã\^™sö™ZÙ§¹,9Ç^^µ¤džÆn6v{º¥}¹¥¹·”Ò´lþêÑÛ¢‹@¤gï1 ß5¡=¦¢Ö)$ɨo˜«>Y@®‡Jñ=µÍ£ ıáXã‡úTM½Ñº§…{ ×C·Ý$€móo¥\ʈÁ;Ÿ=ÉÅs~%×YRHãe`J«>6{ñ×ÿ­Vô®n,Œ“‚c•‹ôïqí¹y&û $67Ýrkæäîi›˜çŽ¢ ¹¼7²–bªqžô¶Ñ}¡³ W$‚ØÍE»èˆcÝ,ÌHIèFy­?Ù\¢}ªá {‹"Dé†P¿ý~ŸCL´¶Ý.Ä}¬¹e,™éï]t„F dà šWÔj,óψúÍÅý¥µ­»#•.%<«Ž›qß¾õÅ꺮¡ Õ¦qr–ÑÆ ¾Þƒ9üZèþ!Ä×~'·dØcP6“Ž;ãòq°è××Ï;ÛHÁ˜•2ãëD¶²-(­Y$Ïq|Ñ×GúòÉãó®šÂÎ[€«‘pdaþsV4Ï[DŠÓfiäg…ÿëÖãÍ”EÝ•UFry¬ã]X¥.aÑAšŒ($œ“Xú†°ŠÒ rª½@ý9ýk;Rñ³Ëp"I(€ ô¿zŽ•QàÔnm¡µ’HàðÀ6X¨Écž•¢’d¸É1¡·Ð滹¶¥%•n$çp2¥cjC5Ͱ’ïdqÛ’R6†ð;Ö‡ˆ4Û[kI$šiˆ 3´¹#œÜÔs[[jó8ÓÌf¡pÆ}IõÍUô"ÚØÏÑl†£uh…%Éù±þuòi§íëµñÃå’003ÍG¢iSYÚ.Ó1}Ìd[âFyb3‘ÆkÕ³Ð륇N7‘ÎÁ r'¶\0Rªäãh®†ÛC³BÁpsÃ+NÊØ¾í¼…BJc¨â¦•#…9$cœ¢9:„U¤©³]ðå¾µn<ÂCF¥cÇX÷÷íÁ¯'ÓØÛÞÉc?˜’FÄ6ÞõéÎ?:öYïc|²=Iû¦¼³ÅðImㆺq"¬Üp1§óÁ­Zks¢õ+ÆUÒ=Ñ…$OÓzÊÑïc U ±éß^õ”$ub®»KÌé=úõ§¥êçOYƒ*ã+Ž0x­µõ2–Ú=¦ž–¨»Žâ2I?xô¨oõ· D °^H'?…aÝê×30päGÁÚ‡hÆHúÿúª:p'Ë p9ÇçÒ´s¶ˆ•å›­JGš7ÛŒŒo±í×ü*±¤Ñ±$€Ç$œUë]{¸ƒJ>Ï`UŠà•ã'ÑYivˆŠb‰]‰Îù9?ç°¤¢ÞáÌ–Æmµ”2 Ã*€AùøVZ@IT‰AÎwg5nqŸ31fr ¨?{ü+¹¹žâó ‰í7ҫ݈µfˆ½¹¼fŽy j,TßäRÊVXÑr¼ H­¥X™¦˜ÀŲªpIöíøÕ9e0HÎù/Œ°CÐgÿ­QmnZzn¢,Ä$«ëSé>Ln¶ÑD¯1ÝŽj-n®ÂººˆÜIÏJ×¶šËCˆ’™˜ž¤rGµæiA¤¯›æÍp¿„­-ýý¥Œb-æFpF¨?©Ï^Üêz½âç=hMV)„±­µÑXØäX~?Μž6Ó:Ã( 'Ì-ŒU¥¹±Òr$§r¸ºBWCvL¨nÖá&FPx ­c[¡–ñ.$•@bq€~€h¶Ý*â8 Vl±ißÚ¶­(V\‚ÅrçÅ ¾£·TX_Äa+§ÙHŒxU‘õÁý+,Ï=üÃíùw2±¡Ë1þXük£Ò¬m­àX„ËrPòÀKmm Æ­-éEE˜â€=þ´¹¬Êå¹Ñá01¦W<°¨ŸE‚Fß:YH!vã5¦ ,9vbIäsëQÍr¶¹óƒŒžH£™°i"˜{dcb¾XÀCÀ4K:¦ B^•›s{,®$µ¶I-ÁÍE© °Žéš9¼àéM&É~DRCeu3HÒ7šIÈÔãË·PdL #¬JCÂ<µFP0ErÚõëÙBDsH„€vîàÐ#zÚöKÝÙc–'úVF±®2@Ñj)Žr-ãä…÷­T¥-›åŽä:‡‹u u_2vòèÆ3]îŽòO¦Ç$¯6öã÷˵‡á^I{©A=¤–*’J (B3ŒkÑô¯ý®„©R2‚ÌW?þºÆ³PµÍ)¾çD±D¹ssøÔw"ß;9昀8üȧEÇËÆ˜{óY×þ"¶µRO:Bpx_γI³G$„}n ¹67Ùî¢.Ÿ­U—PwÚÉcz‡ Tþ­QèêZ“4qS‚ÉÏó«i¦3ÞNÎǹ5\¶Ü›ßc}nÑKmr®§’TýõPÙ0À‚䯝ø×C.‹h[æVc€3»&¡CÓ¢VÄ1€NrW&‹ ³3#×ì¥b#†ä2FÀqúÖ…¥ý©œ‚—Èà»@ü ?û*ÉŽÑN9ÈàŸÊ­‹8VDB8H£B•ÀÞCºßB3š¯=Ú žTsÖ›-¤¹"6ÝÆrF*¤¶Ñ¦æ™üÂpE6W¸š9T›s!'–^ãõ¬™¬§y$“~ÀË…Ër:V„—q¢òáÚy5Yõð²C'=IÅR!ØŠ<¶çRýG9"­Bv\{3œf°¥’hnÑÊ+©<¨' VͱŽé@˜ñÏ< ¡-t'µ‚òw•wòÜ•´m£Že’RTÀÍEkçDŒmŒXÈÝœVîm¢ ®ïÐg•+”‘™Ý@‡ŽNsÐ ‘Ç–¹–PG¦8¨DŠvÇâz“ØTâ(@@e“#‚xÍ"ŠŒÞo ’rK”çU0-',ȬÀ–=#?Ê´d Ã0ÝSÀëTƒ—ºE‘1´í(<Õ&&‹Ë¹ÔpÙçTˆUœ|§žü)à<ì2ƒ§^iBUå°8äpià4íå@H\a›88¡±¨‰´O?–\<™ÎÀy¯ZÙ‘)6ЧÙlõ¢LîHÝž@­s`‘È€öã5 –¢‘n(–4@{`Ò‚Ä’­€{ ®%r0HÁ§‰ˆ3ãÉÀ Ñ  obIéAg= éš…•W—lãÞ±¯uj&—ÊÜØ2MKìlOu¾<ÉH,ps“T.5S°2˜åä} Ä}{I ‘å|óȽMej~&ÒDf!9(¨”Òyšº®¢Æ¢Œ‚K„ªúv«¦éS07É–&L‘\}ÕÖrÍ'—ÈU‹ö]Î1jAnÅ8¬eVIÝ&.VKÿ„Ÿ@ÿŸè¿*+ÍþͧÿÏ ü¨£ÛKùXùeØÎ¶…¯X››’ŠÀ³ºð"«I¥[ÜCrEÄžB’±0êæ¶JE",®ñǨ„{gü+›³{ëBHewXä—ï*ãwÐzWk÷¥¡”_*×J0”JàŽ„pMj®•ißxò—V#S’¹õ©¥ˆ¤+#/ïPÎNHôüJ—&k¨qôౌd“ëVÈæl³i¥[^91Àf¿.*̺OØx7Šä毬V¶VåR5IXôc÷¿Ï¥eϪެÄC3Bœʱnû–-ô e# L{ñ«×ˆº­¢– -žS½iËrÚƒ¤ÜÌÀIÜO_ʱõí-­.‘ãtÃd`¶#ëM$MÆË¬Á¸ƒddr£5v ûf€݆O™b±SNØFÈr9ÝE_Eœ Ì»°Ý\;V—b¹ZÿQµhƒŽ<°¥I=ëk‡•Õäfqœí‘ŽGë[:®a‰n­åI #‘Ï=j+ )oàu[tr¸ Äç•Å·¾?ºhפm# Åz¶ƒå´SFÀ¶xÏð5ãWOe3$˜[WI¢x€X\[JŒ˜bhØžO­ 4™èú®äÂàÚF÷2¨§³×šó Y„÷ê²È–æ6 ¬1g5êŸiK˜#šÞPC.CA¯6ñ™µþØe’y¤GÊáVˆ„¤ï¡BæGÔŒk4×$a·mÇøQ¥X,0HÒNYåÆ à„ÿ­q3ÙÀd¬Te—†šm[O‚hÓç r7d£ÿ¯Lqœ»ŒIæ‚U†Òy%…Žd<ƺ"XQV##E;™&lÁ¹ÛÛÛ8hÜo#€A«“IJØI;É›¥ù¢lä¢ðj£7 †×´ø…½÷þ òç¸Å žw··­vžy-Ì‘Ù\* fêG`;W!ae0›»™’YçÉã#•ÕxeÌ,ò³Â„ $dný®£šNM­K—-¬lÝé <ÍÔÏ+‚w@úÖLZFŸá²ó[´Þ’É ÈéïZ:®¢`¶a ©rp¥IüI9ü®niåt.ØÉ Ç )E7¹ ›oDYwº¼•”‡žKsVm,Ê´À*8;ÖZëk *‚GE*rʜ̟_„ϱQ €c28Èÿ€æ©èh—+.ßGω⼞'žÐº ãr€1Ÿ ÎN?Æ»‡Ôôõ 2ÆAÈQ–òàWŸ[ë:m½¹¡–gb ÜêªOÐRŸ=¼r¤6±@HÜù5Œ“oD++¶ÙÑk:Ȏף$Ä€ à“\N«ç4rÉ3–š@G@? ¹a{u«Ê°Æ‰Á2J˖ǵ]“ÃöÞ`?¼’CÑäbp}¨³Ù‰4ž†n›`ª±¤Á$à™ÏµjEdVéÙœ#’zŠ`Š==ÌÁ¾UùTã ¶*änÚŒˆd,d+0LB]Ù.ïS[ÃÒû‚A‰ -‰àWH’@ö- I½†@nßræÙ-Š˜Ü¾21Œ`×C`wp@g“ÿÖ¥-6f°ÕXŽTajm±™\ROhž+[-73ÎÊôÜÕnB‚Ѿd qU ´7lno  *¤ð­5;‰—„—$M2ˆ £åq,Ø*‹cæÎù¸›{v~Ô¶–Û™˜áŠŽ‚¯Ú…µ‡b¹C÷™‰â›¾ä«Ah»„hÀ¶àLt'õ«kbÆØ€:Ž+/N¼3Êîa)°•_Cïõª~$„_iŽ$¹š-ªÎV7ÚŽíR¯{2ÛÓC€ñ]нñEØe+ ˆùcœ+^ÒÍ ‰L‘œžI'¡¬M2Ê 0}®Tó¦—‰7òœ~”íCX–C a‰ ôÇ­šBIÉèiÞj°Á+E …Ýx(‹Ó§ù⹋«™fyešTN»p˜jœ·RƲIæ(vc€ü£Ó4É.`U1b3#¹ÜI=zÿJæ•F÷Ñ*qHm®û¸b ÒÊd4¬`×#ŸÊ®¥µõÅá"’¥>X“ÆkR GŽTòö  )Ú9Ôÿ€®—OÒb³Ì¡2ìrÎFM(ÖKSxRöžîÆ$^.#šåüÙŠ‚Üác>Š:V¾•£ÇfH#‚BMm¨‚yã¡k:áöJÓ,#”¦«ÚÊzTiÒ|ÑÔP%Á *Pñ×ñëV¢…@&G.åë’?¨ڳÝ06ðÉ…lù…p?:ÖK9÷¨Œ2Ég<œtªöm«F;jYŽî+Ehƒâ?5Ø/ ¼ŒgÛÒ¸-WWÔ¤ÕÞDæÍˆT_/`={÷úWEâ-Hi¶‚È8%×27vöçֲ탆y!2ÎÜ„>>¿á]àÖ‘8êTM·6e%ýý½ŒÂpÏ&ì( •?ŸOZäõ—y|IÁ¼Ã,%ˆÎ!º…w:•ÿ‘4¶ó VC[ßðÅyäʱjæd]Й¼­€tÿÏøSmìÅemÖXÞ#v,H ¤ãÆ®[cÎpes€y'§ÔÉ-c\I+I’£+Î1ÏãÖ‹i|—#nw1%€ÆÐ*Q‘zÒÊkµÆeÀ#vŸËÿ­]U†‘º¡)¾eQ‡n>ßýzf™Åi‰B7à³wäÕùu{8Ê–gŒáFN=?ýu¼b’»1mÉØ²¶êÀnË‘ž0*;ÍJßLYCHž` Œ‘þ÷¬9µûÉ @(ÇŒàçž§§äjK "(_|Ì$óÏ+ŸëC“{ $·"a6¦ÑL îÎé=¿Z¾#K8DƒheP¦W1>ÔéI0D’ xúV+Þ«,Ò`î'`éQPä“.Í’ Ù%šXÕ¶‘÷I1Z¹h¨ÀÊØg9Æ}8¬¸¼¹/”(ÆI#$ƒWRT´- ÈŒÀƒRçÜihoC~‚H­£(’9©Å]{d.!ä êsðZyßi¹–BÈAœ ÖƒQ¶ß½$ˆ¼·5¨ŠGFò¤p§˜>Uå—¡"¨ê:̉hóô*:(ɪ2ëð Ïn@áI=+8jöæI&KØÔ>FÜç Öjªì6Êòj×7ÖàHæ(Ëc.§¯?…iizÉ,0É)6L’|ʵWMWN‚x¤–XdìnTçþ†¬¶»³ÙêJ¯ú¸W´uSØq²7îõ8 ÄxÉ÷€èzÕÔfº q.raéK{+M,£Ê x~XÒºkE†ÝTG°œ¤Š—8Þ×Ôµ©bßLžØ™‚–\ÿ^¦Š(m#À$“ÎâØÉ¨gœˆË—òÕrYºV¹’êé–ÒdãsÕêÁÙ×wvÍŠ?3,qˆÎ 5œÉ.ÐVÛ îuÜÀ{š¶ñEešbLÄp TþÓÔ/ •#Ùö\ÒA?Oz{l _r»Ë4d Q•OtŠœ5ÄF2QØrRAȦ™DfmÉ”É˦Kk[‹c&¦ø|d9Üö«mt'”¨ºr0Ym¥{bܪ«dþírÞ$¶¸½Ôã¶âY¶ˆÆëÖ»Y¢³²‰.ÓUcn«”Œ€ÍÏ¿ÿZ¹Kn+{¹fŠ)'žr'‚=K’¸4ÈšöÛÂzH€,r^°%@ê[Ÿ˜û â&“QÕo°<Ùf”ýÕêsZWöW×ú«o®¥ ì'GÿZ»?Ïa¦êM§Èý  &ä|Ä·÷sÒŸ5ö2µ…ð×…–•Ô5TQr##!B¨QŸ~+£s$÷r=¼îä1Ó4ýwR]:!äFf䑸`~õÌÝëz‰…Žy.6*Å}óÎ>˜¢ýFôЛ[Ö¢ÑÝí¼á.¤Êÿ¼{u®>ÃH×umQ¦† æ6Yäájì4«G½»Äzu“\3ghÏ˟ǧ°®¾ödÒl>Óq*G +–`†>€P§eq$™ÆXx&{yÕ.§ }ò£9­íOF‹GÓ–æÒ2è¹i 8éÏ8ü…qÓüMÔ^ghíôô·Œ’ áËöà š†÷Æú¿‰¡6pÚEä0ÚÒªÔÖu ª®YÌ’5­õópÂ8äd‘†v“ÃnÆ­mm‘N@'½fh^‘ô¶Žîí’L.#Ë)«–ñÜÛù¶÷jkr˜•³Ò¸ç¸i^Ú’Gc¢ÞFšxŠIQ%Bwdc5z+È.&Xc‘ÜI+À®cEÓ侺w*›I‡ïé“íÛ¯­oGc ½Ú4.à©#-Ðú×T'®f¬Zr4„J£ØÇzc¤d€O?1< 2ƒ"ÏAœš¯|ÂÞ”;d€&ƒR!,y…#¦¼lŠT0Bzw&±¥Ôî䈰”ÆÀŸþ½Jú©HZI€p'-Ú†í¸“EÙ!~|ɉ<ž¸â¨Ooh9gbéœXO¬^^L2…]ÄW þu,2]\J#dPYíaøhWìQ¸·Û²d㱫ÖÍw '–Uˆ б,vös*„IdêEhYéÏæ¬’Ÿ¾¸1 ÉïORyL»Ý!ZÕ‹³2¨ÎTdšÃ„Vv¹¸óRp+Ñu=eÓVo=6Äk::¶ ÐÍ+ .ܨöÍ8°’¶Ã ÔîL­“˜7ñ5±k}=Ä ²ívŸP:SbÑU‘Ï1®0.I©m£Åo þ÷““Œdšc³) uÊã è;Õ¼/•ÃŒ¨)%€B?ÖêvÖŸiN8Ðßq¤Db20/!ÙÈòöà~tàcŒà²ÙJ–E‰YK'Ó¦j¤ˆÒIˆã–à“Àÿ>Ô\/ÄU°ç%€îx­DVUYHÆž‚°ðLÂ&|) ;AZpI$„Ójg®1šbܸZ&à㎩åHÎÕÈädõAh“²á€p2Äò§Ï)„q6}â;ÔÙ I¹.ÃÀœóQÁP˜À @犑âfå߀9ç$ÿ:€ª–Âç–w¦’!¶1c!H*2yôÅJåV %ÈÁ$ã4±4m† ¶ÁêëY÷2ÙGäç¶=hZ‰èA4ÄÊ[ çÍ0µ‹pO ÔnÇÉÈžJpFy}êÞ„$E¶G†ÚSíS4ßd„Æ\ð£=M2Qå•9õíŠÏyT³ÝHî¡FQœ –®R&ºž;(e–F1Ë1Î 5ÏEuwq é…ÑC ‡i* -¿´ä¦!PU É>„ÖÂiò:ŒÞHÁ@\P“°ÖãõiÚT 4ÆG ¨#9'Ò¹ÓâYõ ²ÞÜÝXK h!ζYºšw‰l บþV °3¸úþˆßeK&–Þ=Äd¼ŒÌÃó8ý*ZÐ|É2üºÝ™Rd¿Ô6NÖj¤×šLŒóÈ?9b møfÚ ËssalŒ\ª¨^HãßúUëù᳸eO´)ç\ÇÚ²•)>¯ï+ÚEªÇ¢3a‚¨näkB|:ªÍ# ´&3Uñ½–Ÿ—iahòŒm¸Qùc5SAñN¥­êfaj–꥚DRHŸ°}.þaí"j¼*€ƒ Œ~èšj]øeŠÙ6[õ'}/m¡b/•"'%XÖ¹{ߺj^UŽŸöÁˆH­–Ø"‡Fkþ=¬MÏ·è_óå/ýú4V7ü'ÓÐ6Ïþý¿ÿEO±—ôÇÏ2öî6EDr‰;†zT:J=Õüf0È‚qßYâTy•ÝcÚ tÞ³Ê^<­ nw;‚ƒè=kÑzö'¿ÑÚá¤ûK€ºÄ§éÔÖSÏöxü¸ÜwÂñ®æÿJKÕ@ó€ØÎáY-¥iZrï•Uܲœô1´fY,×J„«>G~qZ/£Ax„Ü;+¨!\}å?_ñ§wNRsžŠ@àVmü·7,#³V•ºœ ŒV[ s‹4ƒ,ëÀfù‰>õ)[«¶’tW#Ë~¥t=»> åBƒÅZh´ø¦1¤y,¸ÃriêÅcŸ·_°Å4ÂÔªHÀ(å”uèj›ù°lª0 €¸âº5‚éâ+ QhWAÜÇÒ¹Äq I¸ŒAúÕG}Æ‘Mì$äË•tž¤S,´öŽmÈά Ž1Z‹v¬{ÃxÁ®‚[‹[;ä gç=?JmØ›¦«¥M=°žHʶNÇ<–¬»²¿ÙeˆFFZè/îfÔ@ä#d‚5F;Hb½†yîPÎFrSWf sPЭ͡`öÌx“û†³žöòKã32•ÂÚhº´2©[b’0“ ~µÕè ªØ4Ö·±¬¦C”bû˜˜úRZîUí±fËQ¶\I%¬³·HÐ.úõb]\¤m$˱ϖê*Ì¢^ùÛµÅÞìŒ*Š]fÃìö;¾Èßi'™$!Ô+·dkek³¼Ac$¦I$žá²ÙQPÁ¨­ÅÈ%\Bí.rçUí4´ó~Óp€ÆrcPÙ5v4šót‘EAèzþ5¢InÊRw´V‚j÷¬®#´Yp^áFöoaýßÿU3Lðd÷h.¦Imàc€ò\ƒíýMmèóMw©GäÀ«mädÊ‚:g¦Iô¯GH.ã…$" X.åã…IÙßppæ{œ,^•c c º¨82LÄ“úS¤ð•ú‚@²sŽ nÐ×f5b¸X®m˜2dQÂaY÷zÓ}¡a°²’rìGøþtF«–ˆ‰RåÝ\Á´Óît¶ÅÂCÈå£núʤ–æÐ‰TNžtX%IÁ&ºÒ |Í©4ݬíZÊÖâI£Ü¸;¯ÐõªßRV‡?3ǵ"•ÑI',N}9ª¶Ú¼Sá?Þ!!±÷Iã½Uy~É)Û(ØùY¿?Ω>¢öצDFòÄ„pC)Í$&ŽëLŠKõi.prCšë­Ñ!…Tg%Fs×5Æhwîíò¡;¸Ãp3ßó×QÁŽ31ÚΣnAQ8ßFk [RÚÛÄ[psœž8¨å’[ÐÐZ¶ÇO«Åowp]¦y"‰Ìc©úúV¬)6çjQÆŠJ6)¾c%lÖ͜ǵŸhÜÎy±u LÝKƸA’Øïéþ}ýªßˆ5áµ’GÏ–2ªðÒ±è+ŽÒþèÁ4HÌÓ²ÄccÛÙOò­|Ì›èzf”ÁtëxŒ™,äsY^-¿ŽÛK‘DØ’E(‡¾Oz¶d[{bbdÜWlc`ŠóÝTÝ^ê*Úƒ™%ˆP6cVã@öîMJZÜm«X¤¸IËpìÛßô¦]ÎÌß»Ã;.Ðz…Z}Éòm˜1<äõª‡m±GnaÔŽA5ËQÝÜÚ+–$Y§˜¥Ð±ã¯ÑZÁ%ʪB®Š¤dƒ•úѧiŽ$ßrû™°v/º[( VPüF½BŠä©U=´)7«*[iÏd3xÉç5³e§ ˜–IdÁ$ôä˧ÓÞ¦»Õím£_•U8VAÕî.n ËÁ O'¯éøV”’nÍܦ”Y¼,mUp’ŒpþuNiôÛ9œ–7,@€\}xëXòß?•,³8H#Ü@'ÓÐzÔÐ[Ó#¹’6Yå;°Ç&59ëØì„z¤aRnü­š­¢çË„‡à¨fþjZ]µäb#ÄàdŒ‘\‹¡•r\€rry'¥uîtÐ %ZHü°ObµZ˜½åUõ—¸Ô/#1£€ž ãŸ^õf×[F¾kh”lf)Ê]†wzð¬tmfG¸´Ta™K4²7ôù{ôëŠÑÓ<;¢\[#©ºhÁ3²nüÀásÓ95¢©ËfŒýƒ•Û-ê–Pß_ÄÓ`lP»”á¹þuÎê:CÿÂI§Â«„•˜‰>è\gw¯×¯zíŸDûM¹!ˆp3¹¹/ï\Ç‹î&´¶·–44m”uLŒõ±éDåzÅB6\¬ÃÔô±itÈ.CÊøÂ°çœ{Õ8‰‚Ñá@ã‘ZWÈ—&K‘$M›X’rn½»Ó4èdxÖ8ã$º ¬@¾ôص ( .Hûª¢°½¶„šÞBä’Æk`LCi&¥2›Ù›†ØÕ2£>½8©µ+„·m¡`ó)V5Àõ¡ïî5'1ÁEà4‡“Чwl¶’(fR1»,Z„Q^YgXþÓ<›Ø€>ï I‘u©n7H–ç'vÿ š I|ñ%ÈùÁáXäcžÂ¤¹»½fòmË}h~B*êqXi1¢ªy“¶B&r?Ê UV(.µ$¤h¸œ*ܶѠV/uw×G;VGàóéN:T6k<È>Òà+.vƒè*y£ör–Ç ÝÉw-´æfÄ“õ+Ó?þºÕ¹³°ÐáŽÞÖ7¹¿“î©äçÔûVì:|zu«GfžeÄd‘° ÷öïÅWÑ´…²»–óPOs Á“8TÙ¢U •îO±©Ø·£é‰c¦ý¦C+\Ê‘¤mÇ>ƒ§ŸZ]NÈÞ[9b¸bÈ$:š±6© «C#€Ý¾#c,UybO¼÷Vó½õç§*Øè´Ý*ÛKÒÖÚØ$¥²XýkÏüWeªjs2Ío²œyoŸ—éëZ 㺙m´›W¼›xüˆƒ×5ËkÚí¾ÛˆÚækAŸ-åýÈý—Ú»¨Êr~ülŒ¤ì´2ŸFÓtéDÓLÓ:œ³È¸QÓ¥k¨4{b-CÞIÆ>˜ëX°YÞÜ©¹¹ˆÇnêvÏ<˜1Î=Mz7€48'ÒDó$·,d>_ž›cÔñ­ÜÒÑ¢Þã¬îu]OK0hðÉÇšë±PzóÖº½3ðÁ¤Çczÿm`w>Wå-ïëøÖºX XÚ] GÊÀÍ2Yä¹V†È”LᥧұnïCxÅ-Ê×¶°ÌÖðÂ…$€‚¥8ÀãùÕ‘|Æ|°ÎXš©{{m¢é²Hw»F¤“÷˜ÿcÁ,÷ö'T¸œEb˼…låjyRm²õö¶±#3"0ÉøªÆ(ËoÁ$äD§'ñ4ŸrÊPI±öÊ{çUäSp IÈ'ŒŒŠ“l¨%Bã^FJK˜wGC©êKxÊ¥þEè8'éXãÉIËĉ½°›ƒŠ¯—÷ D6Å–uÁ?LÔÇJ‘ÿ}<òÆÎJœzÿõ«hi¡2»ÔÓˆ<´0zqK'™“ל⹳Ö×[n'œI+E~@¾¿½]ó~U]…ˆÉ8Í7~€™xard ããM2•P#bqÇATâËHÆs£­\Œ8V@õ'©jÅ"qo$“Ž¼ŠŽBø+àŒ °äR¢¿Ì»Üœ”FÌpؼÑê 3Î_œdžjÁnޤº’1€ªÃ$‘…î:jx½ÊíA€9=Å;’û·€ QÀšY¡ŠXQ’à²ç¥vúôÏj¢'˜ØfÜ7©4Ùffc’@Œæ•µ*ú–p#Æ Æ@ÁaV,¢(D…rqPyª‰ležGÆoOóÛÚ¯+³p‰œ÷>”_Bm¨Ë—13)$»ryÈ8¬©„'ÌÀŽ*ýÚ‰”«3xÈ85–3–äu¥RЖ®gyL6HÉÁæ¤DÚמõ<›ç<Œw¬Ùe`Å@)œ–bqÇÿ^ÛIÊ7‚5äSYW®·S%cØš’[²¶ê§uÍEDO08rAâ•ìKÔ’ÖóìEšDr¤‚ jÿŠf¹‘­4ØÄD’V9"œòÍtÞ\Iu 2jÎ…á¶f›QpI91ëSv=vF\z%Íðc4ì2^V9ÉúšçµÄ{;¨¬îƒDŒ7!<©Zõó$Vð¬…EèqšÂÔmìnï¯ìæEˆ7!GZâjÇ O­O$ƒOÉŒ¼§ÈO®Oô¬¿èÞ#YþÓy:¼2’|£ê+ÓÆv±³[¬0ªÀÇÒ¹­e.µ#.œ2á€ÇÎE;Yn&yJéwsL–;-œ×W¡¦­áŸ28âŽA>#>µÒØøR+-BÂ9wÜVi8œ×\–ÉnþrÇ0ÛœòµO;è>Sƒ“HÔu 5;©òÆ2ÈŠ¹öü+V\&›o$pŸ´º€N0£=ÿ éeÔtÍ4Ak-8ÈøÖý–¥or áda„ä⋽ƣŽ/þý>ûæŠô}«EO;7åG„Fa‘Zn†@Ip2Ç8®ƒÂ¶/§­ì’žir óÒ¸Û+‰4øVFH²õ=ºW øe^ãI˜ÍDÒ6Ý„ò¯·ZÞ¤¹•ÙË‘r[¸¢‘8- ùA8ǽd kæ•.K!RJJyÉÿ èÊÄy¾@ G$J²4îFrFìÊ¡JÛËÜçcðæ—iº{›“1SÊŽj CÄkf6£#hçÞ®j±DeT‚"ÎÄã WMyö "î—àëO®¤»ô* ïn5Ë”I!y#ü+JÄý²Óe´ìÞ9¯‰eG¾d+ÑÂþ]êÓݶÁ›”èX.1C’è5å m!–݆¡$h e@b?ʸßy6ó\Ek†Và vÿ$Wy&sy77&2A'ü+”ñ§‡ ¶³µžÑä.$+)'“ž‡ó­Kij\#v‘ÌZÝÄž@“` ~†¶„Ñ»7Ù¦I%Y†HÚµ–¾4QMw`»ˆ;øÖŽ;¦’êa78§$Un´£cy¦ÜÒ4$ ¯QU>Ì׊g±N±çÛÚhÖãlÒ$ì¹8ˆ*†ÿtëéTu]!ã¹2ZE%£7Cþ”®ìC‰Çê°Êè“…áG²NFH•NvûW]löº~¢-ïa‘#½æ—>¿JÊÕDuûˆ­£v<Å!l®|STëi k"B¯0ù‡JŠ/êjKÇ€Ù$F#óøÕÛê6·zž±röZ| ‘?”Í“ŒF«•É#'Ž˜çšÜ‹Xøw¥XŸ²h·z”Åùûcl`¸ìG§~´®ZZQx¹ $–mç0'pp@¦ZxÊEšBÖû òÎúàTrkÚEÜò o ià;ždÓ’láÇ>â¹ùãŠ1³wï裩§Ì t=wF´vP_Y=Àœ°ŸÒ¥×ì.á°ÜòNà02GéW¼1¬i·Þ²×6Ð<*#‘%++¯ô§ÞëÖ7*ðµÑ‘ÓGdHj® ÛS†žÚêEyc…bŒò±ä𱦬OsJ°G´—”–5ôýªþ±¤™aˆ¥À8XÕàú×=i—‰)hî#•6.잦¡\Ý´Ñßøz×O†;ƒ¦\ÜM '+ ùsÇ=:ûÖ›øžkÐ>{´‹ƒ$kŒž8ÿëÖf•â8ÒÑb™!†$P–‘1#¦}1RXêö·÷ßdÓݤw$³´d*Šž¶3ó>³¨ê²¤&Ê@%äG¸¿ïWOmi ¥²ÇxlÌ8ɬû¹aÑ­Ç–ÞlÎXpk˜(ÔÄ‹ ›zdžsTïövË×s¦Öõ?±Bʱù“‘¹àS\yÕu=BVĨ\VÄz´ìd–ÝÈ2CKÒ­Ä·ÑÀb ‰:½i' ncÜhW²!¹y“òñÁ…5´³Ýyiå€À†Æ+»”ê/PÑ•<Šçoâ– ÖCfVbA$ )TÏa‰­…ŠK`¡n”¸ø'56F±oª&Hh<“PA¤º³È\å‰$ž[2M*®Y„g’JŒ“CÌû@H<ü¼’i\´®ÒÆ‚Ž-N¥º´q‹´Øäš€ª£,„ìÇ]Æ¡¹ž<w8ê@ MŽÈlÒÁ»ÌvÉ\š¢È¦F[œc³ã4}µ×˜m‚rY¹$U'¸¹s˜@bNrOJÉß 9Ë K+£ÄAÔÔw+ fßž'&ša–îMÓ™%#€°Œ>§ŠmΈî‚Xâë‚dcõ¨tï»3nOvC>  ‹@C@'€+”º<=ìòÎÙ$&K}½Mt ¥c!’Qîã?JÖÑ4ËX.šahÏ!ÇúDÿ0^½?úÕµ* kkɤìcè6~"¸²qim™3ÏËœú~[[hž…䙷ܶNé.ÃúgÒº«¹î´Ö1¬Š@ùŒÒÇ…ö|§|Fs“ÛW{¯wâ[æÓ<=›M–çSQ‚O÷!íŸö»uôÎ<¶zlú[ÚH¢(Øê­†^•½¥x§IÓôÄ´²µ‘ź…D…~OϧçR㥑¤Z7uJÓDÓ^âéßìð ÜIÜÍÓÜšÌ>+¶[;c"r¸‘þžƒÜÖN0Õ˜å’ÙRÞÙr*95«º·Ø³?•#si‚âÚ-4ÈÌ󓆨7ú–«wv,±I¨\F:|‘œj•·‰Æ¡km'—  Ÿ˜šÐHšHÌV%#8Ý–#Þ²ˆ¶·‰•ãXw`Çæ"£Š+ùe&ÙÝ27qǦ*”‘FêÏ1‰BÎ\S§× Û¬vÄ ÈÏÊ?Æ²í´­äµÃ¹U†FkDÛÙÂZ”7Þ y4ù»ˆÅÝ \Ë2œ“× §¯åZÉœp‰ÿy~VŒdqT”ùÈ!ŽÆ¡ŒäqSÒ;ÀHçÚ©>åÏx¨‚8ÑTNd8ýz¥-ô6êL² _€ª¬H4ù.áD`îUOŠÈº¸²fÄ1“&;·ïÅ=DÙF[«éõ&¹’oÀµK‡(É… ¡ˆ';zV¢÷N’Ájn"à4käÿZÞƒt‘(’5Bõ¾•ËkzƒßÏkhV6“ “Ô ‚ÑËZ\\ºü“\±#¡8ÅKiš†²ž\fTXÉ”f©½IOR8QÿµUY÷”¶GlÕÛWŸûz)à ‹ ¼r '¥oZè0ÛÌóÊwÉ ¯eÅi$± c†8âr„cŽ‹²£_µj_Ü÷Í7ÛdÿŸˆ?J+3O™ÇØxvÛLµØKpWýs¨8>Ý©Ñ^y:ÂÛÉ!pÉÉ'ø¹­+¦k.'%›vŒV‰"û<Öoì’Ä’:Vð÷Ÿ)“Ñ]›P•ïEÎ08"¥6Œ®^FUF\ÎI5ÍKyrÍæ<Š;ƒÐ~5ÔYηpÍ ™AyœãÊwÜlQªå¦Üw<œU€òF÷ëëŠsneå¹ ã vïY …Y–i©þñ©&Ô`µR#Fv ´í«Ë+HÄGl]†HZXm.& Èg£’ ?QkЈê3Üe ù8êIÉæ«jÚMÍö“:$…ä(YIõÿ:è­ì…¼X`®ùÎHÉ« DK—p>î0*[UÙãVÚœÚR D¤ î(:ûÖ¶«}¨ÞÅòÖe”qéS.™k&§t.—Ìg*±Ž…sýEušu¦¢>Ãb‘Ëw.Wð?θð¸èU”©?‰tÿ#¢½4µ[¶Úuµ´y‚$€r[&ª_ÙGrÀÊâ0ŒrzÖÑE7“È’1øqYŸØ÷kgóÇ–F ‘šëô0k¡Æj âH/¥}©“¸òÀ{{÷¬lü3§Ì¶º…Æ¡yÉ…W›·“Ï ÎÀ5v+îOd È\dœ`qÍ ¨ÓÈL±HrÌ匓Zqè7w£-±ýˆ¥çþúʬGàOÝC-ÄzeÄVÑÄÓ&¨î7cѼáù*ôJã#p‚7¾KqË`I'œýÐx®ÛÁÞh'‡R›K›Q„À‰Q\1ù¨¶š^çkqy¥-Æ•£ÜJgËÞ€cÜúW®è·VMg}Æi%ÌÊŠô;Ýnîà­¦” ¬¸Ããä†kŸŸJŸË–KýViR"D¤J vã®}ªSkbî™-œVÚ”&òÒ>\˜ãb2YF?¯zè൷ðæ”ÓNÈ’HrìÜ~… Úhzgö„¡Ã€ÒüSÛç½ajÚÓkio´Ò n#äïF­’Ò[5_Ú_ÆbY#0‡Wù$åT­¯ì•ž@Œ[FI5¿m£$pø‹p£Ž0éÆjÅäGc!*¹RÜŒÑ{l†ÒjíêbV…VÚä;&)Ö÷¤Ù³ƒó>ãUb:œî@hä'JÖ‚ÂîtuÉéÒ1´K[*=H^v-…Ú =j]“J›Â+°Ç5f}.#ó Ì ¨ÈÎkQÔ5L¥Êçà‘BO¡MÅt9K2Ý£àc†=Ͻz.‘ki¥i±H¯ÆÑ‰Ç Üg?JòíoXmB\¹`ù ‚¼¡©¬u}Fò+}2âáE”@ \zaéV̶g¨™nµiA)åY ŽF ŸOAïZ,DP¤j¨ *Œôª¶7ö÷0àUW*2‹Á_óëVž7.8àsÅEîUº³Y»¹‚ÆSmng \å›ü+#áæsjoÅÑ!ç*Ê*q»wãÈ­ÙgvYÚ"ʸ$únÙÿ ¥­Îbž@^8²ÓùŽz~<þ\·DÊZ—õéVâÊkhZæç#1ƒàüÌxôã­y&»ÜóîV0 ¸ÀŸÆ½Í.m^Þ hq(60äóÇ®kÎüwà+«¤¸ÔôÇw` Ém·go¯®*¥ÆI4Î ËW‚ÆÚhåBˆÚÊ98=*ì­Ý4ýJÍÜrÙ]ÇæC$g 7pkÍ£Dd[r0æL37 t­Ye]P’ÒÚè^Ù‚ *pAïÇÒ²•(Ê-}OM/lýÀÈ 9…dDÂ+eŒr+›ÐðZ¹-ÜòÚ­ˆ•ü´ùUHÛ…^éV¥Ë.iŠ~êz-ÍÝœj|ÉIÛ9æª mµ{mdO)‚·ocX2·—,s³€êyªIynñÍ jn YÏʧãÒ»#®¦RŒch­Ì»í6_íi-ԜDZˆÎ<Ÿz½"(!|õ''Ѭj¶Æî[ÒÂeÚK>2Gùÿ9¬yMà‚@<Ó#Öå¾fЀ‡1å¿.Õ4q2œ»|íÉÏ$ÿ…' ufªP[ 77d¸I†aK $þU Žäó$ˆ=ÈÆj)oìí'Ž•DŽp<ÕIõÛV˜El ²r A(òAu»/y¥3¼«íå‹ †]ETª‡‰ÈÂðGõ¬ùà»–%’âE¶ImÍÃôª"îÝ]cµ·iä9ä<Saóö4I#3y¸Là±æ‘ž4\¨ÞÜ|ÏÒ¡nYÈê=FBÓA ù‘ÇM¼øÐãqؘ´¯B¹#¡Û€)bWY¥‘„A‘Už'•™¤~3÷SjÛið„†Ù|Ü‘B€¹’,È&TÄŽ–ÑôT3ÿ€¬»ßXØÆÖÖ‚Y¥<±'q'ùU)£¿Ö§+Ḡ8À­Í+ÃV–ºä¬„rò ÿZÑEDÍ»èŒ/umIÀ±¶Ã™EÈZîôØä³¶ŒÝ(’p9QÉ'ùH×66 å®Üðv É5‡ªx­ “ŽåÿúÔIÝÊ‘‰ô«ÍRú¿Õ`´µpXŸZ»o.ƒ¡Æ¥ÉyˆÎæ]£ò¬„Ô5+ËVš T€; !,äzóVl­-âQ$öí<ÿޘK-BÚÜ¥®ë°]Ä×6ÚRÉ`ò.ÕþcôůˆïõD…€±[ÇòD¾äW]âý&Dh'æÆÝ‘ü?­prÝÃg6ËXþ΄}Óó1¢-É›ÑZx†ÿÃÖò4wAîd# *=†sW´oõ}Të×ïdŽeY¤¦ä¬U´Óbµ›to+±-,…Ž?šä̤¬o˜ò*–\9x‘òùƒ ~¼ÕµìáœJÇ8Ç·?™4÷'BŒºd— ¤Ïœq‚ÏSŽf_øSLKi¯¯ežc’ª_Ëþµo5QnX™|±´Ÿ,N}€çõ¯<×¼Q{}1et·³–)ü?Æ…e$Œ-gVÒ,®í¼=È( ÉʶOM¥xé×Ò²­üS«[Ûi(ŠpÙDÌÿxkC‹Äs(V$ýìrEajVMe º·00A\ŠÕXÆæ»øÛÄqù†mnyܾ#˜ \çŒ =…s…ﯥ%Ó`Œ‘ædãšKUiä’IdÃ0DY'éǵA§Š4@  mÀ9Çj…- ?xi5k²Ím*Z@CI)ßþÏ>½ë¿Õ3ЂC˜|»‚ä'¨íP¥­™×ì éÝ3 ð·k{fë;ÇÚáHfˆìEt²–Ôn±¤ZDÄHB1ÇÓÖ¼3NÿjCîÑ‚À+÷WíŸÇŠï´ígPÑï,R0[>OƒW¥ÎiE¨ót= "HbUq©àžÖ¸/ê³½­Ú wG‚éµq€0¿¿5Ók7Oic±À3Ì„­€®Nüý“MžY*c!‰ä`äsGS7Üæüªì¾:dÀ”ˆ¿8<ñøÿžµìZeÙ»±»éˆÛ¹#Œgëý |ÛܱÞ-ÄnR@à©N6žØ®û@ø‰ui¨¡¾†!hÊV‰0ß_JVÖãåvE_x2M#P}OM‰ÎŸ+2ccœ§¡ü+0E¥jºl2ònℬ¨«´Ú}ó^ú'¶ pñÈ£r Ÿñ¯ñ_…ŸCñ#I‘ ¥Ë·ò ñ÷½0}»ÐmNW²f'Ù&´DÔ-W¤ž\±AV=ùú×máè…ìO!F‚B>áà©úW)ö«Ë[‰ ¢Éæãq œñZ—·rX[BÙ¤U^H'ϰÇçXW£ ªýQ¬k8É-îuĵ³*]€‘‰”àƶ²pñ‡q€ ’G'’k—ÑµË vÄGzs2ãy' c¿·å]Mƒ‹KS s ëcžÕÍN6|¯SY_â[ZÑP™sµ¸Lc=)“Û)†àÏ׊Ӟ8£Æà>÷P}«2â;œ¼™$g5¼[NÍèTyZÚìåu™´–Yâ¼pÀ0$çÒ¹è´ÙuÝj“Åd£,òu>˜­×ÒÒÒæbtèfcâLãœô8üªñ€’‰äb mŒŽtŸjé^FU)Æ×{›Z&›-¶Dê‘¶lŒYù÷ÿ –þóM´<ǹ™bbÞÀ“À=‡'©¬¸5;ýJĈà(¬¤ù`à½[§à*‹]é¶H¯p¬Á0F¤+°ÎyéÇ¥7§,fö_‰ÑèNdŽk¦FI˜c’€c¥Aç™a”.5g)ã<ŠÏµñ&86ÆÞy!ˆ6ðöúUËû6‰t ˆÝ°:çqçÿ§I´Û4ŸòÂ(â­Ü¦£¾Æ’T¶Óèkbè¨ñR@Vg^GQôïY­™åxí•ÉÆÖ’½9÷刮žÂÑ n•ÆK6yÏøU(Ýœ’vF>™¢K*;Š îê;àUÛíAlR;[…”w`tíÆj}NýØ-0±† ¾ÜŒzñ¬-¦hâ;˜‚Kctæ©´´‰šƒzÈ‘]ÂË!ßpFy$ñ]¦Ÿ¥C¸]L˜ààŽùõ¬í?IH‘§”)‚¬zP\k]³YBJDq‘ŒëÏÓÚ§Hj÷ù´FíÞ¢ŒLvd©ö¬¦º‰rÊpr85š¨ðÎfvi8(NH¤ö{rÂà–”“fääÍRIîoæµu3F†#ÆåäŒÿ*|éô •W^ªã¦¤Óàm@Ki"•I܇¸õ«#CþÅ•nb•¥·ùL±’ƒŽÜÕr_¨¹¬R°Yí%[kñˆXþîsžEt¶ð b–ñïó'oΜöU°¶ÍŠJ²pAÿRèPɦÀÖ×s)PG–`DãT'$Y‡M’XØNÛÁà)\Uytcm,rZ‘wñH¿/áŽõ¤5ß$(XKžAO1…|Æçv~ldVVÔÙ>¥7؉6 ãv2ÇéJš^À$'|À“—ùÿ[ð©gžl©Hð2"¨¾§4s%È9ˆGãЭ5}ËíoDDª›oò¬ÇVÞÆY8èÍÊb‰ Ô¤Iu‰#8!À_ñüj?ÝêºrYE¤Ûvc“· çT¡g¸¹ãmŒû'½kíDïÈˆÜ Ç¸<þ¦š5ëE6Ú=yÆü`Æ¢þʽ•g×o^W'"Ú.Ÿçð¨õy-tˆ ‰a„‚1óïWËÝ‘ÏÙº‰¤V»Õî‹eIX£= QÑ™¤žY#Bc¤ð:ÿž+%½ÕïÒ“€çñ&ºmâÓͼ ,&äq±³ïíRÕ‹LÛòƒ¨2¾qÎÀ0¢«J6ÆÀ«6Öwî»J–ÎõlŠÒƒB Lû‰àqBi ÞG+vdp‹Cg#Ô¶špºùQÂ"$Öˆ¬í­Äf4ÞÀÀ5‚5¦Ó›Ñ‘Æ6‘òÕ­®ŒÞŒé¥0iÖGoîâP0 åaÍ«Ãqsq Æ}sY·w—7ò$—.w…(àëQÁ§Üj7¢ÚЩb79<§ü)ÚÛŠ÷eýGÄZ)ŠüÛ¶ãbs“õ§hžÕoêƒ" ²Â= c·ë[±iZ‡lZñ ûDêùeNž••?ˆP›Ïƒ¹« %¦†oõU•§—ä¶µ™%sÓéëQÉvÙ-顯ê˜{†'ª±UT\dõê…àg¶IÀÛÈÉÉ ×B<¬Ë(šö5´þr®Áœgýž¿n¦—¢è¤—(²¸†ðö«äìgÍmÎ^Â)嵂Kk•‰!Éë£Óõm#K†[MBèÁu?©×p튭¨øÞ¾Nž€2ä+cjYZn™¥êR]ͯ\±–D €ääþt¥•Çî΂öå4«†Ý¤¼Ûõ®W’>ïSTôýB¸hÍä“yŒf¹R±çŽÝë™6ú†„Ò6ŸªIäWpíîjôÚ®¡y¢2;¸ã`XăpúŠÍÅ3nc¬¶×P•­ôÉRå"ÈaCÿf?…I¨Ý¶j³_Þ°‰›fËqÀþ¸®rÜø6xÓÞœ~áÇ’ ÿÀqüërßBÑ®,L–Ww–÷Q¥Þ€{g5 䶯¡-Ÿˆü>GœŠç¼ÈrkRK‘N.­Ù˜ö$?âî_P³›Ckv€mŒ¼@*[;¶iq ÏÌë"—±LiÏÛìJ¯—ž´ëÛ϶\´hÄ[(9Ï%¿Âª HYZ6P*]»}>µZ ÛZ¬ çs$§€¼‚:çð­hѦ®0ËŸãTí@ºc d³1 ž¡WŽkVGM:dnsµ ëžy¦•Á»ˆd…ÆrÎHÜ}(FÙ áÁp0=ªÙÕ!"2¥•qÉä ζ¸&'•‰ 2#SÝ©õ&åégea·“Ó&ªÉ#+10Ç Œ ‘§Uµ>ÐÉ'Ö²K½ì¬ËÆæ#­4‰oR/"}VèÃ$ËBŠê´*=.#¶Y¹v=Iª3Å’(Ê‡Ü äŠÒ½¿‚Î%Äʃ õ49t*)-Kk ó0qü 8U>¾æ£F€êBþY]Ø&Å…ÉßøÞ$ä´€•I8è?ýUá½~ï[Öä7“¥6ªGÂæ¢[\.¯¡è‘[iïq$p¤FEÀlcpëÖ¹ß[Ziz-ІØnDîIε4ëEÑb¾º³æ¹‘€Ø}k™×µË}M-‘× ¹Ocœ}k9+¤;¤ÆßZ]ÞjzMü©í¶>vªõ§jº¼º1Ã`<°ã ŽSUgÔîeñde!k¢‘m*«÷3ïÒ´ïü%.·hÍ5ÁŽ@w*(Ï>•1MÙô¡g@Öîuiã”ïHUŠ@ ÄL×C+V8%‚“ŠÆ±ÐŒZ`‚ïF aclŒçµfßx ,’EbVu_”Èyöõ­`›ÔMÙj?\ÕÒ vŽHAB`O5çóê6ë¶îîPW¦xý*¾¿¨ÝÜ݈䑰«ÊžfÚº–+ êFuÍkÐÎ÷f¶óýÁùŠ*?´/÷¢ü¨ Òï¹nòî÷Z¼Xåäò (÷­KO±ønÕ¦»•]Ý€P:çž•%­´v0xŒ–<“Unom’æ1%‚\¸ Èó5+} —™‹vú¶»¨¤¤Ò`¿„oФó•‰ÈQÉtk·v¶ê#¶¶HˆÝ~µ!ñ]Ç–@†'Á‚§Ç½_?DR±±aáÝ:.gO6U†#V]þ§¼™-ŒÀ5ZãÄ·¦/$Eû  ™äVF›lÉ-Ðc†ùˆ#åéRÛ¾†›;:4Œ c÷Nkg÷1Á# YA`’:V<ÚˆH˜”‰ØÛ€ÿJ ÷÷PÝÍs ÂÉ´oMÄ ñÓ󪺵„®ÏK„ØóK± ­8‘#û¤–8ÎNMy„ÔÓÚ‰­“ÎÝ‚yáZIãKäP ÃcrU‰=øçéYÊ+¡¤gÜŸâ-½Ì÷Z`¶34¤H És÷zb°àð׊BÇ6û‡›ù,øP3^µ½Œon"Yc‚Ü0'a*sΙ/Š5m  £$– ´Æ…Ì–…9¦Y²ðN³,«&¡¬ÔBÂìÇwÎp8­è<2ÖÒ´‡S»•˜L‘\ŠøîêÚ3 ]ZJÃò¹f'þEWºøƒzèæ+ôŽC€!GâA4Zlžh#°¼ðæœ6ÉssrpÓ9>Ý p~!Ó-­59c±ˆ¼U«OI22Çm:0๕rJ\ñZÉ—è‹’øåÚ´7QåT& EšN?ˆöÏz¯·s;¹ Z(òÀz WIáï‡ze„ÞuÉ–æl$ÆÁøwüMu‚$µ_. q€q€+–x¨=b®RRµ¯c;ÂڌךjIs Ä)Æn.=y®ƒQÕ!Òô÷Ô.Æ!PÇ,Iô¬ÀŒ‰¹òO9'¥T¹DÔ-Z Á [''œ (Wöó$6í¹ÔiZ¥¦©d.í®ÇЂ>`} M4ê‹‘€I$`b¹Xµyl ÚÁ …*•%¿Z浿³/¹”ˆ#8ÿ<×LR“Ñè>mé¯í®­š[w&0J’8$ñ^_­ÝÜXÝàù5Á+‚w2zlz¾¯©[ [0-­·³3.Aœu'ú:t:Å|¹º»`1œì¬{U4úÞæ¾•sgu§vU<€IÊpßNß…ZÓtcypó*}šÄ\ŠÑ°Ñ- A5Éßå€vžóëR¾³#˶ÅTD0¾c ö¦œ¬+"ݦm¦ÊÅ ©xb8®­#ÞU‚ñŽ@k‹. òæ¼rOÍ#d“ôí[:6§<¡I lq#ÿë¨k©¬Y¾Ä†Iö¬moOR–æ4š@e#qœzƒïWÒu24oä”vúÔÏxpQ\ŽN(NÌlùßÄšDÚ~ ì„nÇkŽÏ5­á\E©D×L$t`P1É'úgùýk¶ø‡¤¬X2ó¶3ƒØÿOʼŽ2lïɸlðpsÚ­ni.W6=¯W”Ý-½ÊÆâcwðAç#ÛóÅsº´ë¤É9YcA ÔÞÕ®µ½&âÈ&â¼-žQ“}õ5OVSs¤ý¬¾æ°Ç'ÿ*4¹Í}<Ï*» Ô© +0㜊–„P;dà¶ç~ „±ìj£JXíSÇåL®cÚ¾x¹n ]P“D¸¶rz¨þ¨ííô®ÛÄ:$æ‘<7~U/õ*@?çóævúuÜ7¡ÊKQÛŽkÖ­¼k6¿%•™–ä|ùcL’Ç.xÀ†H©å{‹w¡ç“i—zu´búŠ Ô¤=;ôíW¡¹o²[J ïЏ##9é]׎£µ¸Ñ#Ò¡fÔ Û" ]ΩûØé}:â¼ÂÊü[‰!˜.R£ê=¾µ 6•ËŠm7ÕZ®ŒÖ÷Pê:nèp2(ùAdý*Å¿ˆY%ˆ0!wŒðzò=>•±e$w%Ûæ*mLžÃW/¬Û†:ÙTù`ÁìIíYÕŠRR{móÒr‹õG Xk°†Xð¦6Rr¯?JÙ6©qCî^Ï»$WˆYjóéú‘`ÅáÀÜ™è•wÖ^*¶UË‘^"2ƒ–ÏQØqM+­¥WM]˜Í~kt‚êÚI™@Y7ló\Ýî¢iPÄfwvs”É'ŸËñ­`Ũë7†.Z8éœ{Ö>©~—s[´‹½#Œd·ñ>~­\.–Rª{îj­ü×±µµ°[ĤɃÐ_JÃFHeK©¶ì@̨ü‚GN=ÍgG¨Ï ö]²„­¾FÆKÿ];J²–ÿPЧ ù‹»œœzV·[ÞójH³{t±µ¡”8y –O0`±ëÇ·Öºù&6öF9¦ƒGc'>¹®W^‚'ñu½•ºXäRW®z1ÿ ÖÕgV¹´IŽB‚qÐdŒÔⵦ´l´›’E+ f‘„…v<Ø.ÀrZѺ¹veE'fpY:Ÿþ°ª)>Ô’5’Aç¯Ö¯¤M´iPw—¡5ö°—gh;t?"ž tûßáYï5»@ •T®`:fˆ,ÖIBœd<Ö­Çi (E œ°#œÖNò~cJÈ4ÍBÙá‘'‰#'#ŸÆ¶´ µ³Css(bP ŒNj¤vh‘Ç–…°Y8Õ'ü%v8`¶³ÊH•É=?!WËd4ˈš-jÞk+s†g‘ß©ÕÐXþ`VB¥Iè¸>µÊÁâT˜´pXNÌ:€2hXj&ð›Bí )%® g&í©QKbΑ+éÞ@’$¦F5îŽigŠîõŒ“7™ƒ€‡WżY59P8’Åj£l‡9'RjMnhâ’±%¾˜clÆò@ØeÅÜsLsÆ6§ >½ª'ºgV¸S$}Aü{VÄ4‹ A‚rAçðÿnMî8YñÀžãË\呌þ5£+oŽÚ0þ#ÐÒNm–Ð5ÑEd—éøV#ê ðLúC9*¤“'1’;.yüªlÞˆ¹JÚ³h˜á¼®y÷5‘­êpÀ«,³ hðIf?9ú å`ÖüAwkåÇbÉ4ŒD—r.6Žz/jеðý´í÷sûy’CÆ~•q\¯S7y- øµ]SRfF²hã|î½¹ëQšô?Hµ–óP”ÞÞ:œ<ŸÞöЖŠÒ4Ì(Ç,[ çoÊê–³êwËä["•¶Vã ÿ÷=ª›m“d–ú™VǧY;³ìžS†XÆ]óØz ÕÒôÿjïšòl3ÃÈEÿm»UíÁLûVÌ([¡ÃþÑìO ®ÒÚÊ (|«hV$3õõ>õ-–£}È,,âÓ­Äd)s‚vއüúÓ甤LùÀÇ÷§¹!•9$“šÆÔõ4‰d„ ¸È8ä-$®Sj(åüG{tªY3Œu?çéXÑÍ*F À—$ã4÷ŠÓß½Îî‘ä_%Ü’ØÉÎ2kdÒf-Ü¡uw !ÆÇ…®›E—ìv¥,v[-Ä™ óÚ¸£—³5ÍÊùh§åBpqWc)5Œ“ ëm„¯‘ñT•Õú ;ºßˆšòÕ¡Žpñ’UŠŒ)Æ+‡»Ôä¸+mÀvÁQКšâieFH”$VÒ8cºŽF.å2ù}Ô%wd'#Ô¼à´Ñ“ûGPD{ÆPO"%ÿÔÕ½OÅ6í}Ÿ§À.ïX c ×?sÚßå: –R7Ù'*#‘‰Ì„`ð±÷'½pú¥Þ§x¾LfN|ÇÎ /¦î¼ô¡+½Fä’Ðõ“6œš<î÷¦YÄÓÆù Þdž¼c_Ô­.ïÞH ¬£€Îù,Þµ£®kÃ[‹d··‰ pÙÇ.äRz³‘Ôÿ_ן2íŽ:Ww8–ä±V9ÅiÙKqo3Oi"'g$YÖñ1eTR]Ž>•ßøg–¡|©o*Gl;\(Èû¿ZË{!,£‡R„2\ùǸ+‚=ˆª¡MK>Ÿv!`¤º†º“àÆ²ÔL¿mјcèãÞ™kaaó/ïå-žHÀǾfzœ}¼V—ÂHõò®F0JàzéRÇoq¦Ü°jjàgä<àWT|9¦È# g“€+lè–ºlBîâÛÊSÀ">¥rìÎßU¹…ÔÞZ矿·­mZkQ\¿“ ¨‘ÊçhêktO§ÎÃdÏ‚<®*Äv-)ó-4BŽx2©‘S§b¹Yˆ©%È;íä©92Ù¾Üǃœ£&ºÓovKh"9ê[qÏÖµ!¶‚Ò2_kJÎCc4Ñ¢‰ÊÛy¨íÌÄžH=sWÙØ¨WÉ8ÚW#5§¿Úæa . ä…Î?ÕKhlá-+ƒŽOËÞͱ•km!¤Ü¢Eç8àTWäŒLãp$«IП¥E©]-ÍÒˆP ãKad×,a 7aM»Œtº’%Žä9 zñ©TG¥Ú´÷9–@I‡‘ôÏzÝXí´ëfrrçÝI>ÕË_‰n.L¤%ŽcÅRdL»az.`e’79Øz–Î~”ébŒ:ÌYD‘çŸAI¤Y- Ë Iˆ<Èx@3TïnÙähA6w°èGøS}ÈOBÒj†iÇ#,'ïÁ4˹ÍÃây 笤FŒ W2zæ·­¬%·mÊ—Œòõ¥°ï¡5­¸Šó 4·z¨·í†Ó4ŠT¶pBàÕ)/¾Ê†F,Àpv5ƒy,×´‘îI$õª'vnÄ騎`ª[¶Ü§©¨§‚{µ-ª’0§©5’‚i1æHIî]—‡ÄsÁö½„>ä俥"®‘{J´ŽÊÈD‰‡ošF'<ÖmÓ>£qû·&Á {ZÚÂÛÚ0AºiT…HɨtÈ P—åØå²éùÕ_[kêf1äHÖåÛΕ‰*9ÂÕ©#Žci’„¨ äf¶®îÌäº1ç ˜ä…®\¹þÓy7SÐSÜCïà–SLÄ®s·=igºB#ŒüÀr@Ï4‰?Ú.‰+’zŠ‚h– ZYBùqÖ‚YTÁäfi%òF@‘YrÝ}ªß»ÉóƒÎMMsrn[,ác<)=*•ôê°,QŒ Ôjˆ¹Zô=ýÒÛB7FÕAÐWáÿÁ¡Û‹™ –Q•=ÿ¯ïY~ÒߨLš*ç+´{_´Fé#¸RrXu©zÅhrþ(Öîš/³YÆd,0 rÅ«Bð|Оµ*Û1=÷M{ #sb±­¶B>þµ|§^Àcš¥¥ÚZÚYD–ʾ^ÐA î~µ—¯ø† '‘ïyˆù–1’Kò4½–¦gu˜`ÒžØLÈ\`í9'Ú¼þhG Ziñ„8É’N¹ïW|@òêæÝÅ…Èhž„~5ÌJË HÈç VVZ˜IÝ—.`iæ\Ý¡fêN3U„¶Ð6Èÿ| qâ³ÊJòä’O?•li^Ôõ;ˆã´²’BHä.î ì‡Ïÿ¦)ùQ]§ü*ÿϼ÷Ýs#NIº¶¶z*Hò0½±ŽÄÓ4Ÿ GijÚ†¦îŒ È®¢ 5òÝê3y×D’¨8TýjKÛ1yæK}q²Ò>Z0~fúÿ…C#”ã4í,ø‚öâGw‹OŒÙà·ãQßYi¶—f'‘‚žìŒûVƒêjwKÑ­Lv`€ìƒ ¹þ”»t혫 «âq¼ðªi4"æ‘=½±¿˜”USòÁæ³ô˜æÕ5d…?qFù±?¥M¨Þ]êήLjÀ‘Ó?Oj-å»iV-ÛUX×€(NÌW7çðÌE Üj1žI‹ß\zÅ¿¿Òôö) ôw%T¨CŒ}8­(£/›«9Ë95 ž´Š\!>HìÚ ¥)4´ÔÑ]ô8k¾ºV·³³žDÈ;¤m Ö¶í¼?zê^çË„ ’û¿ŸÊ­­§ˆf¼‘,bŠÒܰ™,úqWSÂÈy­ëœäÄ’l\~œ^é9Ãih$õI$™ŽXù»@ü`Ï,OsˆåwÞ$’kÙÓÞšßìñéöåd‘ISÎk4ü0±V2ZÜ´dôR7Nnî'ö<¢g1@îóÎ*nU°‰É躗ÃVi-ž)È9íjænü=âgV}.åHÎPsùV©ô‰²FZ[j²C¿vÅ Œô$V‡‡ü!q¯L¢…SÉvêzÒÁáý~u󦶹HØX¡Àü+Òôkx|=£¼0Æp]ÈÇÚ'8꺴7d5Øææ±ŸÄún˜†>ÒÌ”àJbê­^³ñºEi$—W³Uà¯áŠå©Gªâk_µÖüNÎMÆ‘m¾ƒ&úõ­¡#•`<ÁÁäýk˜ƒÇzJ)24Í!ÏÌ8ª‡ÇZz9!.$òJåJ°FJ÷–§Oq;¹UUàœTHZä«“…xž®Voéó1cئ~´Õñ¤%—Ë·˜‘î©XzŠ•DÎÍ ÉTÁ#ïc$šÂÔtm6{Ó©Ý‘*)ù·cõÇä*¬/ŠpPÙ¼[‡ÞgÏéÍM¥[&­¨´×‰+®ìƸ!1úVðƒ§ïI؆ï¢&Ól^þFk@`³+'ÎÝ^ƒñ­©£µðî˜Ï ±*HŽYØúšÔ¶…XÊŽËŒ }õÜV°±xÙÈ]ÁW“þzÖôê{Erùl`YY]ë„M|Ími’RûÄ{Ó/u(ˆOÒcË å$ • ïýê«Þ¯â’ѹ¶³N ^õ¦m¬ô+rÁxåØÖÏÌ•äP´Òní¤½nn9g²±÷ç?JÛl‹G>ù1¹öýØý>¦³­,æ»Y¯e ehØ;7dÈúõ}D˜ãgRI [ÃÔýãïRit[²Ô!3Æv€AÃ1“%˜õ5Ñ[š%`›cìøWá"A3ˆðI;z=ªüzè]%Vq$¹Ú£¨^ÿ¦ÿª…&’ô»-ë—qÝBÖÐ ’jñ~ÎXµiá(#hÎp8Þ½<Ý\n] =JÆÖl®šgÃy‹¶E# zZë£ta»~^«jWV,ãq‡(Só ÿJêõÛ5ÓàÔpÇ$O$jÀäÞ:ÿ1^;*ˤj~e´¯F,®œô­½gÇ:®­¥Gitð”²X&דØöÇNƒÒ¹ÔÙ®§'w)‘˜Ã7'êš•QœtëDœ3’ìÄæ¥†Ê t$õÍ2,M–í„@à2{WG§6‘°‹ ›NÞ}ýpy®} €RFr:š–IŒÈAc’Îi‰»lwv­Ý«]Çx¯}pÛˆ'këŽß¥gëvbÐy°E’EÚ0y‚ .»=½´E¢‰'t# vúw¨îõ{›†UŒ,P°À9Îî¼ý*Ä€©Gféž=©M%¡<½Y„Zâúæ,Z1/€v×ò®"Õ¬Aad“[…ü³–QùåF‰½è.p€€ñ“ýk³!R?.àqŠÍy•cŽ_éÖ  ³šz°NMHÎ@N„sY:>EÓSR¢\4l®''’MV¿¶·x÷íW$º§•¬–.<×Ù➪7³O­jW[2iÑÇ·qùVCÜÕÁk~†rm­LÛÙMê5ÝÜçûÒ@pFv‡\ŒÖ–‰mŒ.’êñ>ͧ[6`´#v?‰½‡•”:ôÀˆä:e™ ÎfÞ‚¬ëúƒ[ÚB´V±`M±pBû…m&efzD76÷¡ÌE(V*þ[†ÃÇÞ«jz¥–’±·e2¶ØÐ)bÇüîkÉtMFëCkÝf(Î>B•í•äÕÍÞóÅ:ÑÔ5©[©T°xH"¶ûÿZŽS^s¡¼×¦ÔîÞ;yUNF8§Ûh·ÂÒ_È!2t\üÇ­7Q–-2e·ÓÐ@ùÊõ¬=GW´¸ÓÚ„{»”`8Qß'úSRÖÄ4·e{»hm|âXË8 8 Uç–)-Äp¨Ee' rj$»U±i.[p;sȬò]mÌ›9™³>èªVl…ܧ{vbŒˆ7c £*[i¥}6;]²‘+1ç–sõì+SO6–º\²ja!’bF'_™ÓŒ`}•fÞø’Æß÷zj"HWq\¿~ŸÝü*Ü›asáéâ 6«r‘Cž Fçò®Ž iñ®ŸjÖÑ0ÙçûÆúc‘\‡mŸÄ:ôo,í"A‰$YA…w·:œzÆK+ lëKt'¹ÏÞx "ý¶úäC©Ý–#ý£ïUµ ] ³6ú`XQT¨`95O_ÕµwP l­°` d“êkGÃ>Ô¦ªæ6Ô—J·“T»HÕ2ˆ$ ÓükVõÚ‘'bòÇ9æ¶tí9të·‡9glucXšÇÙ®Ã!ÿ<3RM q9ëÛ“:ù‘åT„n29ª¦Rѱ˜ Õ’%hþøÏ ŒÔCM¹Fcdvž ö¦µ ‘—˜÷BpÎAè×e§Þ0hA€W‘Y¶‚+|€<ÂqŽõJòæDo*<‰È­$Cwz¨q¨ß/“Ìa@fŒU‰É[28qü«+Bœiý’઴¼€j¾½¬*ÆñÆä+‘ØõêlSw(Þêq…1 '# Æ:VOœþYÁ#Óš²!‰J˜ØNrO}0RþY’z¨êîÉ“²²kæD©ÀPOST^ö[†Ü•P{æ¡y7ÒvþtËt3\Qòõ'Ú™%T‰8Š#Óšgs´ŽI®¯MðºÝ¥»]‘˜GÝ¿µ¯ÃJ—dPGÀ#©?Εú/s F½¸Ñ÷ù¶RË ¬ʹ!ªÎ§ãw¶‡Ê´Óç’rLˆFÓôëU¥ñ\>aŽÞBv‚Ä䊑/'ºf €ÃräsŠJ%sö8YõýNâúK¹¦E'~‚±â½i¦–æâéÒcÀ!wf¶|U$2jXG˜`rk,¥ 2ÆäA+Å6‘ ìÝÓü[¨i¶r[Ù]\*¸È 7iéâEmL`(•ŽZS‚ÍQiÚ5ÕÞ;f( 1ùsW“Âú…ÅÀ lsŒÁ©µ÷+ÈÇûMõìÍ5ÔòHÇ  €+JÃBÔµ)´³}ƒøÏ kºð÷`²o;QŽ9Ûl}…vŠ©„†$@8G‡;lR¥Üä¼=àk D[A·C’ùT×_ EF"F '•zw¡]w))€`îúVmÜÕ$¶%ßyêŸ/Ú—ûŸ­Xf5é{{2TËÚÌO!y¬x.~Õ…\n-€À_ÆœZjûƒcÊåÖl‹¢O ZC‘;ÊW —$=©¨Å-Ì=òý–ºf—ìŸiTºÎNPÿŸJ¿,Ång3™X䓌–®CWÐ ¶±–ê†Âà…+ßÒ¥°Ñ5˜àW·ÔU"‘Á‘Î8ÅU8E;Äw}Q~ïÄO ÿb³ˆOtxÊ}Õ5wJÐSs«FòLç!zYÚfªh²4‰mm+1%˜¿'­[‰uÏÞI˵¥–ì2âÆ8­}êK{¨Ú:µ•y·|®ÌÙTÿëÑnÉ–Á®’ijj}ìV‘Í ¦”Çí|¤òßqõ÷©m4¨­Ô·še~¥Õp‘]K¶šdsžø) nò ¿_ð¬Ýo\¶¶˜E )v!UBà"ŽõfòðÈ®f“ ÔqùÖF¢–Ú}¨Ç›zäpk|¿APY|:²³)Ý)ÚrzÿŸJµì %ÈÉ=FyªQDÙd`xÉ)õ­+X ¬v&ãwÿ^É %C#’x8ß®j͵¡k€dPH䜅©`³Š„Ó°@«×‘ÅW¹¹7.ÑB»bp§çúR”m«îY}B+y<»dMÓpà¥kY»=²ÜnàŒ4c€r‹wB‹ó1À Íhé“Ã~#¹p±ÊBªõÁ¬“m”ŽºçYÖK41 Aþï$~ZËı^Cÿ[b[hRwd})<†³fxNèNK¡àúЦ4…G’xŠ%±“Õ¥6ãª*ý’ÛLÓ’C4P),2[¨«­0ÀLç¦GJäl¼Cmeuå&ØBp ö®¶˜®#Y!‘]dcœŠPwWJÅ+W­5’±’&šÐ Ë ©¦ëÖwC\‚êpTðk£2†ÈÙÆ:ÅÕ¼5eªƒ Aot0|Øøb¯ãVÒh5[n%…à'rã¨ïšÃ»Õ@A P+°,Ê>¾õ%…Ų {÷C‘应CéDÇ4’GžùÇCê×ÖšŒV\‰7ÐÁ»ˆÞÆ“y?0p¿•VŒ_k3.™fÆc]8èûƒÜ×BQÕI*DŠÄnÆ ‰£Þ[éw1¹a$¦A#’Mk̺+­õf½¸Ym´VÀ`ž#ëþ5”"‹Ä7¿ÚÒ\¤@Y M¸3¸ãq1éT5}F=kR:D2¢XDë%쇓!À?­fø³Äfkaod‚Ò$y1Ä6ƒÔvéô—0ÛDz¦­¹©Egn›,-XnaÖG­('½Ò§k«7XçeÙ¹¹sÐþUÎií¬bD@XäŸë[z~‘ªx”4q£˜ÁÉfùT \ÏdF·ÐÇÔ¼C{®jhàBÈ`^¤šì´OÍyj¤!¶µP>y,}…lxkÀZV‚ÆâQö«²s½¾èú énïB*¡' ^1U®Åò÷<£ÅÚ%Ö‘öW‰MÌ29]€e‡¾cMÒ<;yp²L ¤,ÉÃ{œW¡O-ИIi¹Øñ˜SßJY"3]ܼci ó`fªË¨z}â_[6¼†þWš5$«ŒåG\W4µƒC#2àd“^§{ê7­ik&èÔbS' =>µj/Åf,~Ïo"a,’7ã ”¤¯d$®Î.ËÁ÷¶¬“i³L&a†oº@ÿ ÚÒ<.·vOyxdžff ³’2+¸¸šÛLµ’æöBQFJ¨íY—Š~Ï k¦C;E%sŒûR\ÏF;.£t¿Ð å”’Ì2PÿJìt}6 #MŠÒÜas“Ôžæ°ma*¨w±Àáº'Šu ‰¥ŽXâ.Œv»db«j~'Ô/të¶j.d`Ñù*1Š*M^ÈQmhz¼þ7ÑÚñí,œÞܯ`\ýzW-ã=GÄ?Ø—7ºBŠ?™±ÇZóÿ [^Ü^M.Ÿ#DWj´­ÂþUÝê6z›i—RI)“Ê`hsƒúÖS”S³eÝXèüwmŸi»Hä¸ ìÒH“ŽžÕ±âN•b–øM# Är{šñ6´†,Ï´_·R€>üVæŸ6Ÿ&› -³UKBGnôsY3G²­ÊI´ †22NsY·Úí½¦P,“ÉýØÆ@þ•ç¿ð’¶1ËfÚ›šÙÓ®nnµ…ͽ¸·ÎYSqb~½:ÓmÜ9›-É}­ê’Ÿ"3o $ t§Ûøq7.]¤cɲ3]J‘&FÈ”tŠËºÕc‹vÂ\œŽO«™%¨ìP©H"ޏã=*h®ÚÞ‘¦dfÎâ@V}¥ÏÛ ´¤BãVdž("&IÆ <Õ'ur’s$…¥wbØç¨ž•ª÷XÂıÜâš‚fÛ½YHÉûÝ)Ün6BÞêEŽ(ßxà¼dýj߆eY®1Ä1dífÎôÿ=+4Ü ÊÙ#±%@ÎNN+¦†]?HÓv|ƒjïÿy¿úý*’lÆM&I­êFÝD°.Ã.`Ž˜ÕÎÄ“4Œ"LÈX•¸ãUƒßNf‘73œŒdÕ¹g`–k¼; ˜`±9Àôæ¤ 6ÚrÚÂ$œ9äã öãS -îJ sóÇáS1/1A†åä{Sç»  €FNè*“%®å[„¶²‡Ìò@;FpI®r7ÜÉvySïVîL×—X•×Ê<‚+KpÚ1$c…^sÁ"îFÅˉmÅ’o\—R0x<û×5wrÉ*Â˼¥»¯m÷ïÂ:YnþR[~Aú <ç]ÈX à( VuÜêÆœ•æ=EkÀîÉw`2’;ŠÁ½*&hÐ`ž U¦KÜb&ö9'¡í[ºµ·¼†9vÒÌzq\èrª c(f¿ ’y Ðõg¤júóYÙ´Þ`è ¯;»ÕZâäÉ(/ ûÅŽr~•×ÜéÂöÅ"ß¼ìzî>µ…g¡yW²ÍrãŒçh?΄¬'võ3!´¸½ºIˆdHŽ0+£»¾‡N‰Dhdgá@<(ã“íM•Ä—&8— Ý€À…lÙøzÂâ‘ ™À\d·Sô¡è4›8k-ëZ:ÞÔ©g'y=«²Ó< ¼Ë%ü†áñ”ŒŸ”Výµ¬ÖÊ : wWtéÂÏ*Í"<„åY‡Vwìl‘®Œ!Eœ\Ÿ,(JÑŽÞ8TmEtÇK«ømPe@OÝ ¹&¹ë¡â9ÌÜ=µ²‘¸¡Á#Þ–²Üz-·q¨Å ái›€±óÍ-ªß12^€g598úÔZf‘oå[w<´²rMW¿Öí,·,·iæƒÊïÉ´è=wfœ³*®ÀÇRy¬™õE.R9@2À5ÌkZÕ­äX{’Äo€+*m¯6‡»XÐ0i±K ¯s¬ûcÏÿþ>(¬ìÍ'þÓþûÿëÑG7õ`äg|4 (2iv÷·Oð¨'´ÓmaZØZ+ƒ„u…@}_»¸‰×Ê:‘œàúë XÕ–Æ%2ùLrþçÐ †Û/C7UÕn-£¿s+±±»§è+%/îÒêîv¸‚@”ì펀T7ЗG¸kœß7Þeäö@ô¬xî.®"q:·åÞFÖIO™Yèg)+–~'½¶¸d½êîä9 úú×Y(¾ž.m®$‰Ê…\©Ðâ¼½"06#Ü´€×cá9§‚O*WfIyùº®–Ñ1‘†÷º·œÂKÛ¤(Hǚųý)³x‚ô1†ÆòæI`°•ˆ}ù®§_ŠÖÞùda%_›#5‹*Ø[DM¨äÍ…ÔYA&Õ…”ÆãSº W‚fbíØzºi—šu±žîv–y@Ýæ9!c§ãT,µk -smç] ªdŸ€§N[û˜ã‘æ1bA±sÛ$dÑ~—*÷GQwrÞI†Úu…Ïñ"îaø «¤èLÒ=û]\Ž[çÉéÚ¤‡F’àäb€ý䃂ßVëZÛiš,%•#„¬~ñ©¸­}ÈÒŒÁm¡q’@,1õïQEâˆIÚ}̇j±]ÅÒ³&×™ƒC¤D¡I9žNF}½i‰s|a_µ\4Ä –(ò¬jV„]“¸l_ŽÆÒ[>œ¯ ¯–`>POE[šát’&½…å@pfàœû Á®³pû,¢0/üö’<=‡øÖå¥äðCÿ C¼±?1ü(Œùµ¸ô!×%I4É/ôÏ9îTRfQÿ|ôã¯JÌÐ-/µ-6äÜê—±ÜÈJ‡1p: ãŒô©Î£`Ú‘’ rnù9‹õAÀük[NŠöfc2¬*¤Œ.+tšÜi­Œiôk› 6B·wܧÍç ›qg<ôÇ­býŸh33¹ËrGÞ\ÞÛZȱ—+äSÖ¹}^]:ȲJÊï!ÊÁùñÇaQ*‰;1²„:«+F-î¤-†2Ç&×eí÷y?˜«¯gqlÌMýõÁU1˜Œ{ŽjͧˆBÃåÏha'53ÀU‹‘*Ú±Øî$P ŸéZ|KAÚeî¢ÓÉs8”Å+,NãýãØúV£­ÕËm–%‘‡ÌøëO‚2–Q¦Ü2¨È=©â8Ô‚2qÕyÑrÔS1DÕ¢s4z¡pÍ’¬¹ªÚªj0Z™#i¤qÐ £¦sޭ˯Émwöv°™Ã¶Ôtä¥ZIÚSË2c$qǽ=zŠÑèp÷ZÍåͿٮ!C'$ èàñ.4q¤,@ü«JïH¶½$”‚T–ÏôªÃIÑ¼ÂæØ0²vþŽh­S—sFÚîÎá@ŠO4áòqZ [¨’6rx;@8År·ÚgÚ#Ù鳯BƒiaT#ÔµÝ(˜´°Ÿ˜QdöÚÜéJE,¯‹Xâ'ø’=¦JœAq"Tg€ ;Ëd{b±lA8÷Çó¯<¹‚[ÈäT…mápC<«ÉúW3§_^økTòc¹t·”‚Ÿ—ñBwÑ­DåcÝË\Cž£V^§`°ÂÓBåGQ\uÇŽî4øÕͲÎx݆Æzët}nÏÄV^l…pèNMZî‡u#’–ó÷²Ã. #9®fõåžê_³¸…'€+cRðùµÕ§€M)·+nÇÊ}j¥Å‚X•˜Éœ0]Ät5—=‘•Œï)4ØÐùˆù›œ“SÙxzÿÄZœM¹òagnñ§ÜË ýõºHvÂFáÆ×­éðA§Ú¥µ²â5åNs‘W»]•ÜÀÓ¼ abD÷é3¨Îƒ[±8‰AfD„ …Ç]ê°[+9` 98ë\ݶº×*e†Ùžá˜ÆÊ[œm%¿/Æ´HnÉÙ£«Øi6Æ{ÉQ!å$ò~‚—K–ÛX‰nVYx,01Yzg"¸º]O_•¯o‰Ü#sˆãö 28®ÉP,~\`"ŒŽáRä–Ũ·¹•ªê6š-¼^b|ò8Ž4N¤Ÿ_jå'z§‰mDo³N5I®ÚÔ¢FYn¥ËÄǦúÞõbÛQKo>9LÑ/ï>ƒ¸ÿ VÒí‘ÍvKi£Ãm}5ã¸vc’ ?ýjŠ}ví) RîÐFÛngõ¬…ñ Oi‘’@\"ô•›lduÔ¯ænZUPBG·ãM17kŽñ íÍüPÆ_bK(R:ÕV´VÖ­"[1ÔñZ¶:5ö§}iu嘡BŤqŽ{q]®‘ig(œ"¼ápeaÈ“`£tqrè•íì7/nE¼ ;–öÖ¯Þi÷qjvîÈ®«9ŸOjè›UI$1ÀYAË•Àü+—UK¯›{wr!Be‘ŽI=>”菱5mŒŸEwŒ“½Ç%ÈÿÙsZT‰{v¢=†4ùOŠNâ…š¹µ¥A¶™K0 š«¨2} Æ ׆$g'ÿ­V.gŠÑÜG±g˜d9^ÒÐI+<ŒÄ!ÊÈÍ&Ê^emºàÆŠ à;ƒéU/¬®Æy‰~f5Ò’ÊBÔñU¤¶"æ>Y²xãš9™<·8ÙÞÞ9X(>[qèTÕ+Û-'Œî0ÈÎnßéQ2± âcÈ g»Jb·©±Æ<¹è*Ó¹C"æéáCåpG¥f.I$’NjÝÁÍ<¨8#¡ª/)‰ã#µWS;XžR"žIL ¬erÄÎzJ®ò™ybryîjÔò¬p(Œààn'©4\ç]àKYî–íä„1®“À>µ¾–öþQË äc9¯=ѵûçÍ·_5dÂÉòkÝø¦òy·ÃV‘qÕ‰÷¢ï©V] ‡·ß:Œ1?)&º8n…•‰Ç#0¢Á?á\V«©Ôž]@I+J1ƹ#§é]í¤èð Jêu‚'ˆð©5;SqˆL¬!(pM7SºÔîfhíDQ[€Ç†?…c¥¦±¨Þ-¤z‰Dbw”ˆBÞȧ©4:Ü\I3ÜÈ[‚ÒIƒÚ·­%Óô[Rä)ûÒÉ-ïN¹™4­æ¸ë!õ¬ÒHH mÝ€ESi­Ev´¹Öjþ!#örn‘ˆÇ@?ƹÑìæ¾-=ôPÀNY‹‚ìkVßÃH É É2\“NMMŠSÙF€ã9üë+ö*ýÊPÛè Èb¸b9j×Ò4«-Rï´¨Êd`ŠqL}'NX‡™  Vχ¢³Š6ŽÛËÜ+ÔÒZZæÏü#ZWüúÛß"Š³Ç ü¨§v]ÑÉêÊ4i2á¤$¬qrßç½q׺ªÃ1¹º‘ê_•Ÿ ¿ÝQè+½_ Ú@¯ºy‹˜ÌhÀàÆ;í÷÷¯øá©|;¨E"]I=­À&6~OpƳ6÷fr¹Ñ%ü 6èÇšJŒã“K|ZTY#J»À$מiWßdº +¸cÀÈÖÚEu$Í0|F¼ÜŒúÖs‹Ózbõ´1©-ÿLVžšd[èò®I$’Q†Û‚O™#¨<0àWEg§ _´»ì>pzJ îåÝ­ŠÞ)Õ Yí¡! )¸–àà×2·6'ăŒt´.Êê³ÈCqŽŸ•RXfI™ÂOÚÃÈúSubä+\ŠMDFÊ"Wv8=ê´’ê7n\üŠGÊ¡±ŠØ–Ú%h¶.÷|äÈ5VýÒÉ@)˜ô‰H¤Û´P×s¦ÓµI,"b‚Šb2ÍøÕMjòc|öl0ÜÜÈ´»º{`6–ÁR2qWndT±A;ªÈu"·rV×rlîoèÑK¬Ù¤öKh0¤ácn21Öº;™ ˆÊùò`i‘ŸOƼ÷FÖn¬ÇcYHÞ$ùC§_ƺ»)5-FEV½ŠÖ"c6¹úš!Gáê4˜\&¿zí b+XÀ*rÆ‹_ÅpÄê7± ²‰0 m¼P4k5ÖÇ-€¦\³gëOgŽÕ žE¶ØîÇ?Ê´ç–É—¸Û[K-!LvÖ±ÄácPY¾´L;IÙˆ¬‚2<í ×ñ©Y%o)ìÜ$de‰Œƒ·=ª¬٢Ý$,Dˆ8%úòhõ*Æݶ­<Ó´{!‹!XÚ ò¸öì¿Gaá©#ýä„Z)Æå'|­þóŸé]i[KL¼jˆO%Á¬“¯Z¥Ì°Ë9%˜|¦ìGoXI1M’ «°ŠrjIŒ%Á'¦ÑÀüjŒšœwRG-Ç£5bÒ9QÞI-Q3 7#ó¡lZÝØëéÒÒ&3* 9$ÖYÔÌÌA \gqZØ(Îì [9$äšÏ¾‚mÊѺ‚p<ƒM5°Nt´+KzÑœÏ4q¡8"ªÎ¶šª¨¸väÛ“SËmrÈIHäÇ ¶ TåVÚ&ÇÛ‚*Ÿ‘žÛ‘O X[µBT`Èr)Ï«jVÅZ[XÄ%FúÕ„½GCÍœˆ¤a±ÍL/í^2+0CƒŠÉ¹%µÍc«Ü­‰-w*ȇ'¨­k+Ûk¦+£‘Œ äÃúÖLVšuï ¨\“ÊœP?†ðwZNÈÀ’ R¦¶ØµUvt±E ×h$‰G®ùæ·­­m­SË…!$®&ÉuÝ=I%'Uà9?uV׬a_1v¹ râµrK©Ïñ=“€3¤îÉ縨Ê©&F= r1P_Ou-'$ç9ïTd»B\1u8ºc+£7£±£¦’7“<8 9«·×,"6ÁÈÚàŠÃ´ÔÚ+UKhüѸ`*{2åÖI# ÛœŸñ¬å~k–ž–*Ou#ÌȈAÉúâ´!š4½Jf£Dà—À aÁ$/­OewöˆLl¹a}ìkµ5*i™5isÂÐO&YðË„=±É¯5ñ® ~MÜÌH)+ÈcÛñëúW«ßÛ,ÀÄÌA€ ŒgüúW â[xßA¹¶Ÿ¼à+dgëÅcV]wG—)(Øæ­ V<àó‘ŸJ­*€sžýª{fÉÉaé\àXŠ1É# O¾jg,ŸÅòö ¨ëÐãRd•!‡LôëLA†7b?\zVµÆÆ;S ò¿|ÖBåH=Hü±ZZtr\\,1–ã,À8üèm%v5©£$ðµ‘3/›Œ€„úäUí7Å:už‡öyì÷°òŒSqlÿ_­fÜÀð\Iù Áð=këNIfH¬ ?*ƒž+)¥QyÆñW¹×Xøž%º’úä)XŽ çv=úrkPÔÛT¹’k™>fl@ô…UH¨Q’ äç¯Ò§Š,/$òG­iËTcÖâDHhÌm‘ªJð:s[F®ŒÔ9ä±ç?—LÕeEXB.HÆå‰XŒŒc¸˜õÇ´“ÍŽU*xðr>•pkmx‡ydVíB×pr+x½îàºK€èm¤ûŠxñŸÏ­dhVK¯kÛP· h›´œc`}N*æ¡vò©#æ(É+‘“š›Áöëâa‘÷ä$cíJ1\Ú v]ñ'‡,í,Mõ´V<#€íÖ±t-B_^Æñª½µã–5çaë^¡vѼG$[Ñ”†ÆEyüþº†å–ß3FH(3‚>µKGp’±¿âB>Ê—ûpÑŒ8Ÿç^{{q5Æï0â=Û•OC^Ÿu}&hîÄsí^_vÛJá:š\©;¢dkèú+êf;™2–Š@fè_ØW °š$Cb˜‘T$c Q\o‡üK¦}…-$¹Hd!Cpô­yìƒÆxâ¹}nÊêâÒv•œä…ÿ ½zFŽ£y© .®ß Ä„Ž1…Uþ¿SðÜ/?ˆnŒcyi<ð&šën±¬£¬1È>õ·à%ä¸Yd$éMGvÉZm¾QlUØå˜òMN,ÕX€€â«*„ nö¥y ¡RRx⋚Y‘†r@E:ñY:¶­åÚ0„áN'‚Mi<êümHÇ=M`ê:¾‡ct¢éã{‚@Xñ¸Ã·ãJÍŠHοðõæ±-­Õ¼Š".0¸ô÷Íj§‡"tÿIŒãåŒÔÖ:•ΤۣS²±€Éjµ{¨¥´eC(b3“ÈQïYª1ë©6KS‚øgckknm­š /¡õÍpºÈ·»‚þ+]›>RHá…v+Ô—VÓå¶µO6g`ÉÁ'Ö©A¥]ߨ>Kcö‚£quÅiË}leÔÙðf£el’Ï5²ƒ)?(±®ê§§Kks°3)Ú#äƒþ5ÌKá›ÝAînÇÂ.ùÕH粉¿r¦RØÜG$ÖNñv±§K¼-¯˜Ãi—nXÛäDíÁÛé[Z®™a«[‰yw f9AÁ¸«ÄFÔRä( Àª—’¼@@ûÁçŸÖ«‘·Ì·ô5ôm´Æ6Ú«9?Ã0lƒè+mu}6hÌ’?+üb¸Éà{‘æL茼…'8§éйLL¬]FyéŠÒÉê4ßC´½ŠßWÑ×hÌPWŒy®ZÚMVÝePìè§ÜâºË(‚YGÁ*Î)’Áó0@GTè)›(»º^}¢p×î~APp+cNKsrfdTHÁ$¹É'§üÔÉimçŸ.ÑAÀ$ZÕµ² I“Œäð@ÿbz"½¥º›¡sp€¹PBã‘Uu=dI3Û@…Tü¥º —S½13A.AÃ0çŽ+.{kU2?”ýŽHôç֨əPÆMé@BX™wOA]V‘ ž§›©Ë–g8Éäã¥`Ej,aXÔïeÎ1À'žIêI«t±;Ì·-’¬é1#aµ8fc$‡2–ÎÑÏá] ¦£e°Ç˜X ²ˆÎMeé‘ÚÈá‘Pà(œÕ½GPŠÝE»ºpXRVÆ¢·lÒä‰A‡LøG%Ï–­ PAàØUXoôÖ‹wÚâ  y˜Åi[‹yáÝÄé’7)L¥©NPÓa—qÐ(éT5\ß«»ì€€J`å«¥Yá·‹˜Ž zÖ&§«ÌѼVÊ7‘Ê¢–4“±-&q¤C$x0œ1B…0Id]ÚZ´¦3|  Ã±‹ôçšèn/n£†{† ª3–\m®=âWc4î ¹$`ÖÊæM£FÃDŽò?6Þ튂T‡‘z´þfrdº+@‹ ~µOÃz™´ºkyc”‚›‘ZÚ벑m§h¥` #¸õ¥­Á%cçK†Úä©»Xà1I?™©’ÊÉçX†¡‘øˆ¶1ù>†² ŠKÉšLdg–cÅv¾Ð#_.{ÄWdnÁ×óªô³zšžÐ jz„Æ@ˈLž¸ç­k_x¦ÂÚSoI4Š1™Õ=kW…¯–€l 4³ÝXi6ñ¬6†âi ¹÷&³jå+"¯æ¸Š[††`K|«"mó[vrÙØéÏrÖ0ù‰ãŸAOÓbhlΣ k!ŽBêkïK¿×¯¬²[[ÂJVCjÛncM>«tf2À‘’v€™`*í¯‡5kˆÒAxʽqåàŠÝµÓ¬ü=ÍË<‡šC–?AÚ®XÜ}½¥+¼*°‰À49-’¶ŒâîàÎÑ\ërÇ b ™6š-ô‹،ͩM"äÌÅ€?˜­ûŸ5ö¡,÷)jÏ…b2̵fM/J±·>blP>é}¤ÿ!R‹OC‘¾Ò"R(Ñ¥$ŸºçŸz,à¶ÓI"ÌH?»“’? VîžÚê+›€Á#ƒ…#§¼š†ïNšô¶¡°ÅÌDlN29íVÚìmèÊÛúgüúÜßÇÿ+«ÿ„oMÿž?øð¢¦Ë¸[È}Ìåahã”’KÎ>µàþ4Ö¥Ôµ7ƒí/=¼DlÇ<÷®“Ç^9YCišKRq5ÀlgØyÄq´ŒC<Œ@U9&­¾†V»¹=•Ù‚s1A#… Á®ëI–æâÎ%yÜæ8ÀýM[ð·Ã¦….ui 6|2:ôM?F±ÓwHÂzFåÿZ±©MKr’)Yiíc wn¥Õq´p Ufån­ÊbFܦ·f–Îx‰/O XŽ»nŒ-­ 2H„.8©qV°Îr(/žFŽ(” þ"¼þGc%µìfWgƒò*üÄVüVzµê)‘…¬jrWDPip‰®ç\î9'©=ê#E&1§²¹tû4 劷ÎG¹¬»´‰eU…"ŠŒ ¹foëZ׬úäÍid‚U€iHÎ~•©e£ÙiщK¹á¥‘¹Í*—½¯ #ÓH»¹A#1Š,gq8§ [[h³¬Œ ûdÕ­WT7oöK. ƽ6×ÃO;+_>ÈÀËN¦¥­-²(£ö˜g?f¶Fžàòžõ©=•úi¦[»˜ W%@äþ5£+Ùhq*AH2OÝËs\ž±«Ï«]_ÞØTUR…8ü#»z~Ö´ë]Oì³*'̳žJ·¦}+¦ñÞ˜ú|Ž—–æí˜ÃKôϵÉiž»UY0–Ëœ—”e¿úÕÕ…³´°–šæér ¡‹?ÈUT¯Ék¡X—Jñ¢¶¦Ô´Î‘G–ÚߟZÌÔß]`ÐÅm k# U^ÏZ² æìˆÃg!w`{ÔÂÓQ¸Q"^Û\©çCPñ —tltï9'íÃb€ ¬Ý¿ µi¤ß·ï$·INrÁå''Öa£ê2_,i0; |‰•'õ®£þËäf'Y“ ª‹´ž¼UÂS•®ÐÔèe…¾­ï…l`%6î Iù~uiΩò¬Ú¢¢óûÄ„ õëYSéW¶8{ZêbVü±N¿Óµ$EI¯^{B«€q]-T}Q¨Osµ?¶Ë‘Ô"¨?zín,¦2‹©n~\Ætíýk5´«6*´SV͇¦-WN Ç3\¡# Ã$ŠË™^×:.íª,ÜΓ®&‘àc÷Lm‚*ˆ»¿²pK­Ì€ùäõè:Ì»Ek°ž ÐSd‰L0¾øÜàr0}kE{IǜыU†u w ·ÊEW–=?qi6ld(È&™i£A™ ‡ŽK нerJBÛTàƒŠÇgdÎåwšE&Ò- )ŠBŒXýÖ4ð/íY„R¤è?…˜ZQHò>]9ÏÝ^@ZYTJTF ,8)È÷ª‹¶ç-dž»­.&»µdk_(©ùœœŽ»þ•nRÛ `gþsYs+$‹æ$yP:Æ£ûZÀUär d*õj‰;ìŽk¥¢,ÜÛy 8Þ¡~ø=@ª§JŠXÉšä*œ<ÓPží–;d)&໓ÏVœºKGh²Lþ|Ì£$œ…úo I+lG-õ!ÓííÕü‚û•WGV³æClÊ™áO  qYvÚ{•2îXU`9z ‰ ›†Œ…†1$ƒ†ÿ>µMÜ´†j´±P0®Gëõª¶—R¥Ìb2ìÉì8ÿõÕË©VæÊ’r ëUáÙ J@S’Ýk²ƒ÷,g%©¶lÉ`Ò$Œœþ‡­iI#>]ùŽIëùVÊ\¼–JIÂÆ6äžHª7 ö»¡ÁòN3š»]Y‹©áú½¸·º’ÙyhI qéY!pÙÜç5èþ7Ò–ÂE¹#zLf›Ÿé^w*„pIÉ^0qÉr°4-¤2GÊä/ŽÕ<ƒ¡)ëYÐL!˜a‰8ÖĈlñœv¥q2¸BìpNõÇvÚIƒ,¥Aà 6š’Ú•€ÈÀÀ8-«³®FH8Q`¹i¥xíÄ`ç<’$õþuF.B g!FO 7^ÀÓ€ ŒväG ý(°7q¢uC´®ESÍ2Y"e’3ÔJö˽œ»uíNp  3Öy®U¼’À/'šu±ÜÄ\«HàúÓÐ)H£$ŒbšPŒ‚8,ÄÓWvIS”=AãÒ¦Bc€\gž™¬†½UaÇÊ×­^´%; E7½ûõè±g„±=8°0)ÆÉÚl¦$*Gð:uõ§YÛ<Í1œ/ çzþuÐ[X$0¨Aã$u¦£p¹®ù„MžéǵmÄ!´CxÝŽ)“Ì ”$‘ÂŽ9¬™ç{™Ç˜HAÑG?:­"Íé»Q¨ XpFrsßüö¨­ ùÊ6‚#œJ„¹Ž0#+Æëš…n Aƒµˆ8=?ɬÊ/MpfP cž8§B#wYˆ+ $n'JÌhfÁf%ñœž$V•»M=ëªXb¸É£¨d2…_,“øóYW(Ò\²‚[‚Ié[sÜÃin\¹@ë\楬E"1rJŒ_Šr‚îXXa³Ëž¥‡$ýj«ÅîŽ-Í0à¤0ÿ ­>«}y»³˜‡%c8'ëWíZSmºÚÞA)$­cÊÓÔ«#òk˜§û%Ë”Ü@ƒ$š–Ê'GAbpwn,*¶¶%š!8ˆ©…ƒdœ1®¯Áè_M’ŤqÎ0zVœ¢fþ­®±hRF+uÇMÃûÕºr½UGb@æ¸o t‹«]jÜì’6Ù(^Œ=ëª7ñj:pò…¹ˆ€Àò3CE¦rúŸ‰`¸·»†Ðü»Œlzÿ…qz¼—° ŒŽ¯¥C[êRÇ n©'‘Þ®]\ÅkmûÆ9!GZv³1“»)G:k·!ŸÞx­øsÃ÷>*Ô™ hl“&I\zsY±E&£"Í)ýÈ$…èMu~ñ•†¢ÖsÈbŽ\àpQèTm}OJÒt; ØAaÈÀ“É'ÜÕ‡Š%¹;³/Ny{V>¥â½3O³2…”ÂÆrI®UñÆ­-¼³`Z@F#Eûì>½ª,Íœ¢´G¥Ë&“är\–äƒå™9b;â³m{ªIcn¬Z8û…׋xVêöûÄÐO2Ëp[8ÞK×µ{ V¶ú[\jæY9ì:RÓ¾€Ÿr/̶ú-ÓÆªÏä¶ úW)>–±Úh±ÜI$òO*<ˆOçvíU5Ÿ¶¡ Ör<¡~A’FGOaV§°Õu-BÊK(Ê,K–™Žÿ¯QÊÔ„Ë'»û-ƒÇlDqñ8ÇNEáû»‰áwN ´8*Å~fÇS]hO A<÷aógKo¤Úi6ÌóJ5*7 ƒúÓQiXvêÍp²Ä²#²U‡9Ïk“Á eç`æ©K­6¥3‹ñÛÇÀ`0[übêƒ*ÈùÆO&¶H™Jä_i,ÌcI9%ˆõëN·ût6»¡Þ“’Àb¢¶R¤°9å{TsÞÈ«äFXüÙôª%+×…õ8ͤ‘Í3Ës¸¹äŽØ­{›Ø­ã3ÞL±F¼€OÿyLËo8dwYÔrààŠKË«‹Æ"[‰% p]óƒRâl¥edt ñ¤Óm¥+ ÇÈùYðç„.§«2áþ`ŒyZÁðÜV£Y†KòpÍеz1™T€@ ,[Pô“weìŰ! ¨ÂqX×ÖzTQ±»g(rv—ëþ5Îëž?¶±W‹N q(à¿ð)þµÍéÚÞ+½Øó¹U$Ë(À9¢1îD¤žˆÑ¿ºÓ¥¿Š=*ijƒ’k¨Ñm%¶ %Ú$S?ÝT…÷ëZZ/†ìôÈPBŸ9ë!cõ­)l­de'q*s…8üi¹­”Õœ‹µ¼d²s¢ÅTH÷®F)Z …I䃊öä´·EfKh£HErŸ‡3z&¶ò¤3·(:‡a4ÎKOÑÖã-"mCÈVå¶š¥„6ñÏöÒÚèih¿éÍb…^ ± p1І›e¨÷0âðÒ†VœƒÈ'¯¥´Vàù)à`¹4³j6€{‚@ãn9æ­Â"x„›³»äûÕ- D!JŽ#Ï=ýiΣ ùóšFž,b7$†É'¦y©àRpÒtôëƒL®dˆà´fá¶žãÔ eýÚYÛ˜×kq“Î(Ôõ8ôøÀLŒ ÇaX1³K)¸™ÉIbÝz~})™2tyHÁÜs†cœô©b‰§g38 r~nµaB>UäÒùq¨&FÈàä÷¤EsnC<Ììc £+=4ØÒõ®îe%²Àgž:zÖ³M„*²…dƒ‘Tœ-ÍÒÆ²m"@ ’zQÌD‘ÔZˆ­¬Ö8Ón±óÖ¹;×/©ù—)¾’rØ¥^¼yÊ˜ÍØ2H¤#­R}Ì?¿yœ…A8.V{‰&ú 1ÆÙXäÄ“Ÿä+NÎïF¶Qw¶‘($í šå­´«)fòåF/Ïñ n¦ƒ£E—µ%”`„bI?…>hÞÅkk£y'ÓÝ€ñ98ëG$ûTÓ\ØÙBYðA$(ÍsÃEÓaQ-¾–A“™2@â²õ÷¾–šX%H³˜aA§¥ÄÛ±«¨›ÛÆ–Ò]ŒÄª0¥r·VOlâcó®s‚:Žõ«jì÷ dMÉ“pqÀþf¥–1($‚Aì9ÅZv2jç?=ÄPAN¼HÿëÔú^œ—Ó#Ög°‰`¶P“KÑäàëO}CH¢þ¯®Å`Ÿ¼`f•@¹"°l¼5q­Ìº†¨÷!XîH¤~.ÃÚ©xV(uo3Ï8œ[ må²ÿúÕèÂHTaXß)+‰+êÊ¥[É·ÎMÊ£ ‡:…-Þ™ Ô ¥‘G ±¶‘S¤êùd™ c#+Ï5ƒâE¤i/5¾ù$`B².à‡ÞŸ3]JåMذÿÏÔÿ÷ñ¿ÆŠñOøNõoùü“ó4QÏ2~Gs+K(flçÏP*ö‹q5¶­iq’VEVä V¿µ6wf"ÛùÎiöÐLA”Bäw‚šz]ÏaŸâm¤p…ŽÒG¸b o—?Z»z³ o®$”ZÅÄCÙ¿½ø×ðëÃɪjÆæöðÆ»‚°àžÕì«pÇåªùp0L“z #œ}2îxX4‰il9+ ~}áRZÙXé0¶·ß# —c–?‰­K»y䄈ÙKs·wÖÐ5+™Xß\¨BIÙ`RøVˆnáq®¼³`O6AV?¸£Üÿ…T—Oû[ /\Êr_áSWÛJ–P˜•’Xf m#RºvŠk”Ž~XÛ$sSïË¥‰± 6zs8Œ”r±§$Ñ%•Þ®×N!„–(۟Ƶ!ðûDŒ")Æ7ç$Õèô©¢€8xƒÕÏ2‹ZE ôû;}=rˆªq“T/µ™¥fƒO¥˜ð â¬6‘¨ßdÍp‚l~é¸"¯µ»é´Óådïˆrj}”·–£ÐƒÃW®Ój·D2ÑÆyüOô³eg¤é¶¾e´hêC!ÜMgÞxšÖû4ñÜÄ\ÄÂsjæBim–ÓW¾„ääÀýi§+Y«—c¨×!Ÿ\Ž8~Ìén¬ c!SY§ÁKk 4ÍÄo÷ˆ2Ö|A¥!!×çbO¾ WÔ-õhÎF¶îO£Iòß_F-ÈeSÙEû¾)j¬Vš²Ü‚R¹?»À5i'Ö¡¥Ú—q¯ Ba…N|J_ObaØùÚ?q£>È¥$ji3xšÜùˆ–“™ÚThjëñ2—¶uÛÆ ‰ýEA¦ê7 k¢Ø…`‡” ŸjÕKJPD‘ù çæ#qZëŒJMµdGˆn]¤}NÉÌ´°åµA´»µ/m"¼mœók=má”¿Úæ•ãc†Èüâ•æ°µS*‰ ~4hôErµ«2µ»hš@˜’ ¸—v¬ûk½BDa–PxùŽp+u-a½™¤Ç’ln½êÂiQ)+…T – R’IXp»wfK›ËŒÜÛDcRpÀg'ü*ËÈ‘pQWŒŒæ´.í ™å°v Ír—ZŠ<Íæ1@¹I¥MK'¡©öß—fN ܃GšÙÉ|d++¿3v ¢ ËdÖ„Q"„`ùÏ š‰-M©Ô“V[qN ¨Mê…‰Ëÿ=i¨“Î˵ `Hf “PEiBíÁ<1n1ZP"HFvU?*sŽž”ÔLç¶ÙNQ'žË»æuÂ…ç¦;Óm –îx£Ìr9<÷ý*ð¶fPCÙW>ð'ÛiJÅÇ· N çüέ#"å…µ¾š¥°L‡ssŸ`2òyVhU73d+‡¥C-ë£yq°!vî'œ÷8þuV Øbá™·pzr)ÚÅ_±‡„;<ŠÎpìÃ×ÿÕUÛ‡.ÊЀ¼`>MXm•¾@3€äO^ÿ¨§Ûiæi…Ì’1·iÇ_ëÇáUtJNú dñ=Œ¾`ÁbyìÇëŒqYov›ÊnÆrx<çëÚ·Äq"+»¢@3ר®~@Öò´hˆÉ<œWF«²f´F–ŸrÂÐÆ¹f 6džœûÖ•¥¤qÄFy™˜úñÒ±ôæ!.áHèO<ý+Ri¢–AÜy’+T¤äâK²I™Þ3ÓVç×Wh“ÍÀ8#þ•á·HéŽs¹rF8¯ ne–âÑ£Œvàò xv±f,uÔ€ŒÔs\õb㸮ž¦"7Mƒg‘Þ¯[uÆî>Pj‹8fÚã¯jÔ”dêZÆãfö”û·Äaâ™rÌž^[ ª08‚Ee 0~•<÷rHÊIÉŒŽ1Nâ,$ð¬»É<ýG^i°ÊÉ$‚xƦ[t\ñ‚8õfð¬18$ä…÷â€E9fr̈́략,y8Ï,y*³Ü:±Ær1Û4¿i1`ÈøpqNà[¸ŒñŒãÕ)o‹„AÀõ¡¦yÙ„'å±É©-tðÎÒI#æ'šŠÖÒk§ ܨ$…3]6¦=Œy ØcÖ£·âQXÏ€Çh‰Ä·”»`èè¨*Ù'f´¥¾¤.Àø¸×"¥±ÔžI1Í^µ¹ß2†fG¦sUÍ¥2ô‘¸”—ÁÜCd6HëPO4Á(VcÚ­06$€@Ûœf¡–I# Ðc9Í"ˆ¢Õ‰ÚGL™¦e`e$);Ævò@õÅY0M;häg8*x­2¼ˆ7Iç×ùSŒnKv-™™ÏÊq…Ç9âšnÒßR 0½I-ÀUÄ<¦@ÝTŒd–õ)P:ž)è´BßPÔï%š!UˆÉ#V13`Xä¯n?É­;Ñ䑲x88'—s*6ÐA#$wŠ‘Œ[–·'k• “ìtºf¦–AKLÏž¤ä å.¥YÝUFX¯ f¡²¹M‹ €Œg"†®±ê3éÖ:Š…<ÂÀ1œc8«Zumja™×llV2  ¯oư<%¨5ԂЕrcÏSê+º„"¯]‰%€‚³u»Û½L­¥‹7˜G 9Rk³0!,J‚¤c®+#SÕ´Ý2D…Ùy‰>÷ÿXRܹ#›Ò¼k¢BnïYn®:œýÐ}«ªÒµQ|ÓF°2$D*É· çÛé^sâÝn[û‹}>+ŸqHÎã§>½ë¼ðÖ«§]iÑZÚ\Æò@dá¿ãÖ‹Ý /Þ6Ëž¹ä“\¯Šµ”ŠÃf‰ PÿõªÞ±«ÌäÁ§¢ÊAÄ’ùµr:™º7w6ª¤îT‘ùT¥vŸDfŨÌðÇ ‘] QÉ«!¬ãɽܜã9ÍTu•% HŒÆí¸¢ŽÊy¥UTfÉÆ@É&µ3We¹n÷ä@6…‡AQ[…L’¹$}æêkjÓ·’ªƒµ3ÎY³Šè-<-eh×o瑌ç€OҕѲƒ±Ã¸ólåŸÖ“å«€?ˆô5ÜjºmÄ8Š ²(ÀTà¸ÑmÁ `d¶¢èm©ÈM4Ê­Þ±’[äÕyõ+ù‘a’æWp63qŠ×º²w¬Hd1‚±Åf\Û*ÃÄ6NâÑ›»2‰ ’) ’2=z/ÃmWN²±¹¶štŠáäÜ7ðÅyü*¥™vd•#ž1Z¾µ¶¼×#¶»ÁGR'šv¸'g¡ì+­¥ÄÆFûD€ôõ=«J($U2M èCIÑ­´˜ØÆ‘¡b Á⤽¾8+ÌÄp{ ÉÙ>ýÚH|¸ŸaŽI5ÌïþÏÔ#“íìägvæàÖUÝÌË«4w¿htf^Áöâ´’ÏLIUL3>Fpbf?Ö†¾åçñ5‹¿9ÁwÒ³%ÔþÑtw ÈP0¦\Ý8Çog Œ ‚cÛÏéZV:lj±Ë*‚HÝÉàf„=[ܵìÁ¼£(0ž¿Ê¬]ބݕŽ€™¿úÕõ趉’ƒž:6¬‡–Y,QxänÉ&‚¤ìoØä…dä‘ïS^ê°Ù@2Uä<“Xm† r^e<q“Uí#›P™¥g{¸\ sÒ‹‰&Ë Ëy),Çsž¿çÚŸwi´vá˜FŽ $ã-ÇÖ¯¤FÂÑdT/3©O8^;a2ù).äô oVDgd0þñn„ÕIP>p¬î¦ ZxaL“;À8'¦3Ò ˆ½ÔžMµ´²dòð;ÑrE‚Úáƒ,q‡-£?¥l[iQÙÀ.5q8U3ÏOzѱ²66M=áØã– óÛXšž£qy*˜TG¹$…f‹$D™`ÚÙÃzn¤r1œt¨uk©^Ù~ÈêYH 7Zϸšv]âE,yf ‘L··¿—nFr`æ¢r@†™.­±q6˜ŽvŽ^PÁâ›—l›*ˆÁÍl¦›4øjR‚TmØŠtªz¿‡mÒÎK™ïäÌq±P$žÙÅ Á­GªØ³¥2M¦Þ°Ú0!Œ0ÏZÏÔõƽPJ±ÌÜÇ"m!y¬k+}]"Öþ)#p2²qüêY4ý~áCOmñÆp¡ ôþ´ÛVÐ.Þæƒ[Ù[Ûy"`©ÀÍWoÙÚ\*!,` €¸æ«Ã©ÛÄÆ¬œL>Q($TË{1[ -ÆÖƒ•–Ä«tsâÕ'‚A €Dr¿Ëš³нÊË3Û¨Â-Ì®qVR妉IÒܹÌq`b¯ÚMt:è²0 ‘’5I¶ö(åomg¾Õ¤{$bœ1—Êå¸äðzIôé-åŠ9 o˜±\d~<úö®Þ×YºÜÙÑîÕqü ‘ŽiúUýõψãx´ÉÛiÒŒ=¿ýU·MLùnÎBÒ+Èu(nî]C`¤IÕ{ãÿ¯^…¥JóZ¬ÓY²LN B@ÛÇNišÍá7¬£%c€9ç¿ùö«}ÊÁ¥4€åðÇoP éÏåKrÔ,Œ M^]nîK‰ÑŸÝȼŸ÷G`+¢¹»M‹8 8ÕM:»ÊÎFã– vç×ëQ® ›‚ï)ÎZ‡©¢V,ÞÝEh¨g” U,Ùlç‚p=Oyï‰|B“£½¶›,²È i$‰Œžƒ­t7×Ó4ÄÎf¶‰‰V"Ì~§ ýiÓjv¯G Êñ´vŸ×½'¢¸ù9´G ¦Û_èñErd–,Ê«ÔûŽõÐÁâ[SÓTÍl¶ÞfA Ãõ竇óòÄ䜌Uq§)U2ÜnP01ÿꬥ(ÛY±ö"ðÄ÷×¶£ÝöÕFKoöì{þU¶ÀÌò!Å’ žwv?…Bú­µ¨Xí¡BdžHÆ5Qï¹’b‰¸çÀÉ*©²%>Uʘßì];þ6ÿ÷È¢›ý¹§Ïä÷øQQgüÏñ3çg•Koh,Ù®Bïê¤òƺ¯ èK©Zù×û`±„ŒpÜúý+–{hç†9&w Œ7cŒôÍuÇÄ:.›j±èö³LÇ{‡.üú ï*&ž›®.q=£F€Â Å/O23íëZöÞ9Þ-£iSE$ŸêšCÿ§s ÍeˆZC,–²†™O9¨ÛµlÝ‹½mZ@ö°¡Þ/*ã9ûƒüh沸õß¶–±H¶ñ:Ȥd±,¸ô÷¬«Oê·º€¶š8ì\µJç¸4Ý:ÊÆÍg‡S“ͼpC´Ü´Šs÷kUµX-’ Ýãµ›;‚Ùhe-éBŸA3¦½Ô'™^8.I”ew¨ÀSXßÛ:Õ“½­ÍÈ[±†ŠB8˜ßZÌеyžïìËNÁŠÜÈqþÏÖºÓ­¯×ÉtÌŒHŠy9rýˆö§âýá2ÅŽ·©ê‹=ªKöKÕL¬n0Î}½«KHñ#~Á¬³^÷eI:ô?Ò­AáǼÓa[ÖA}6ÜÃÃ+[ûÚD‰.ÑnäŒ|­*†çÖ©¦ô)î´XéÒDHé‰òŸÇµkA+ù)æó1† ÒŸˆà,R%QÔœ+:î[m^ÊXm¯qƒ‚ð¶HªZ-JØÅñ|¾z°Ü$SBK`Á¥sr]êii`¡ÿ–ªŸ/åZ*’øj儱}¶Ð‘‰‰Ë¡­‡yo!Ya<†R¨öq—½&¬CRoE©ÌA§Øß’f‘dšEy ´§ÿ\TfÂm*gû<¯:†#¸‡9^ÿ0&º1¤Z0ó'@rI,úT¢ÒhP5£ sÆ.9#èzÕÅÒµ–¨¯g5«)éÚõ‰e‚U³r² k^X-/T@@cᘕVdZjÊmnaO9~ø<8úwüi-t8¬©¹šcÕœ… •¾Æ¼’·rü>ÒxÈÜlXDdÈÏÒ´¤–-ø'$òŽMRM:y¶Ÿ´´DÄýqS #hT,{ò~b•îÍ!Íl 2(o¶–? 8#9§[ÀŒk‰Ï·zkʉ)ù[NÌük6 e¦ãƒ*Àª6¨ëϽ=ÐÎRmêmÎ-í¡È‘ð Æ:õýk&çVŠØ˜ãMîÊ(focU¥´hI“S¾Ë19U<‘Tî®ÙXZy0Œn“1÷4¬‰»${ÙâŽifE®vë\ûr%WÞì~| þµzÎÆD+NIÀ$³GíÞ£ºFóDq¨*¹ù Q.À¢ßS5cå†ÅŒüÜÕ¨¢RÀ(µRKÉS ÛÆ ÿŸŽ{ Z€Ûd‘mK²WmØc’3×òëYw` ¹9vËIäÖ’£ïhÛ€ØòYNHgÔûU Øö]©.…TªƒAô®œ?ÄgSalØ •#Á'ñŸzÓ&/$aA 3ÐÖ—+nQÎZ@ÀãÒ®i…ä¶w˜1Ë WTç£1—Â_Iwpª=ÏJòïÙ˜|BÒ–I t9¯P—FÁž29ï^oñkë006èÀôÿ&§ †§ä)XÉ@íO1› ©ÁÇZc†IŠí9°¢Úù`¼vç­p³C^·H7±$1ضHóÀàU8UцA,Êôæ­Æì‚ èH@‡ ±'€FrIqü†°%ß÷£§sÛúU+’±Ú<’9òLâ°†¨ï:Å|ÌqÉÀ¥pÔ½rê¬ÆAÁëQEld ÊS¢¯\ÔÑB_œg¡$qšÒ"P–@¡|ΪÀ6ÚØ#Ë ;÷üªú!¨$*÷Ï$tüÍ=."Dcµ E:Y‘dR0yïL î4‹€¡Ô`œg44Þb‰ €ÀGN9«–‹p ¹EŒ`djÝÍŽ•BüM!þÿ*¥õ ™BdòØœ1œøSâ+$é„r‡<ƒŒçYw;7´¶ $ÙëV Ó¦˜“ ªÆ˜HÀã¿ÿZ„®&ìl­ø¸™a«p;ÖŠX(@æ@ ㊩e¦*FÌç„`QqžœÒê:¬v$Œ % A<ýh©Ù]‘ío¢F‰ÁåBžAìEeO¨¬’¹½çìîQq°•“]•–—­iì×62B²(ÆÖnzU[Äö:Qks.÷Š1œŸJãî|gs$±#À …ûïäzž[»Žö:­GPñg“ä[H‹ZXäÏóäWœjpj6z}Aä0È•[vít馼¶Yeu1û£$Ú¹^ ®RÑ‘;›Wd‰»zݽʋ‰d–<žvÁ©mwpŠDQÆ™Ðâ«E¦;KD›G,k¯Ñü!q’b"p2Ê“ý?‡®Å$c[Ow-–@¯÷” ·i2o%šFõRMuIà‰¦}ÂGêq]fá{])„Ä—œ e¹•Ò-C˜ä¬<'©j"9.?q—×]§héq‘|dÊzÖË30“€x÷¨Š¹,xè:ŠžfÍ”R+‘ƒžHÏ$U%ViM€§$±<Z•Ws°²ã©¬‹ýM0‘Ÿ™Gz æ]J÷3‰Ž-‡±J¥{}1ùaCŒ±EÝŠeäSÈŒ#»ò× ޳›JÔ£PQÉf8 F +ö'}Ä–ú@yFfD©¯¥YÜn’é1¼Á~•«g¤,* Ê·,yrAEíƒÚBò²I`¼€j’"NÇ›‹#ôˆ¹A#æÍ\‚ÔZ܇¹v¢ì†¹.8cóF3R¥Ê¼;dÀ#ŒŽsW~Æ->§_¦j2- HÌ«HcÐÔ³k¶¡0Ò… cÏÒ°í‘oty".É´çƒÈúÑ¥Z^¦$†Ö @8:à¥e¦æ±W4ÿŸ2=½¼ÎP>B£ó«2êš”J€F‘‘Õä|“Q‘ª–&I- csÅT¹ ’}Dƒ¤Ö h®u;Ù‰ó-ÕqËÀ¥†YÔGu~Uw`Î+%&²‘üµ[‰Tõ›‰è+BËM¶H,æp9;—4ï ZÚChÌÛ¦v@9''4÷¸³HXÆŒÄwŸJµ8 ñbtœVL“Þ´›ÒÁz€*[MîC-ÒJí'OPGA]†‰$éñHHŽ8ÔeOc\Êi—ó§ËPÄ“ÅjÁ¥Nm…Ê“åg4“E·Ñ3ê°Ï+yHóÀ^¬Ùf¿e1ˆQs…~•a´™‡"öRGñ*…ð§YéB[èÄ—’¸d“Á§rY[NÒµ+éŒ@ƈH,äg»!´Ò-™"E-û“ïþ£,1PBÔp+Q‚+ˆÌvBNH ´“ëB²%«˜WúŒ÷—[®'܃;" >µA¬®¯¦Î}ƒ'l`õ­¨ìt˜qX³Üç'53ÝÛ[©òÞ0Ç/€)7æ'Œaáè­ØºrÒüŠÐ´Ò,f; ’’Á @Í5õ«ePUãvÏB@ˆ*;U[ÝD@‰–‡ØÖr©Ê‰Z³¬}b xr7»ÈP¹&²íz‰áG\/±¥s,@Dç9$ Ÿj½mµTH˹”[ cµPV[šq!–@ŽU˜…p¿Oz‰Š(í¡…$ä3e‰ÇçÖ¦vyhâ+¸Ãv#9=²qPKsº•|LÇ ¤&ïîþ„…rËÂ60‘ÑcRÄŽ‡>¿ç¥`ksDe_/;F†žÕ4··Wï‚vÇ$…^3úýk6æ&”+o-»$`vâ´£ñ裨Ë07˜~uÎyæ¶m6²JK” Üdç?úÿ•eÛ&Snðdã¾kV4TˆÇp¤zä×}8òÊÈå“Д³,lKäNzšòÎÿÛ 3¦xƒ“ÆkÕC„e$… àã§zòo–:ã(åPdÈf§ô*‚»2/Îær¸p3éT¡$£œ©n¹=jÍÛ»3~a½HâªÀV àjá.K¡Ð";*’FñÀxª²¼ÌÂg*€s·ž*ý´Lªô!qžõNümÁIÉ<š)ÝÜÄöË hÄ·'‘MÓ´Èc!Âç±4èâg—s/ÈxÀ"¶bHŹÜÀ0Éã©¥aÝ¡ðE€§8•äŸz™Ì …GÜ[øzäT,J ‚Jö ŒT©'™”!•Ïã$þT”\±. 0'héšÐ³²iMq‚!NAZšÊÂ$Q$Øg©àéøÕ{ûµf1[ÈÈ ¤Õ¨Ûq½ÔÖ ÉËŽYOÃÖ²ÃÝ^ÊÙ$fÈËð1Z0Y38ƒ#ãGj[XÌ‘þePåj-î'.ÅK $F†iLã#䵯oA´¯¼¶Àº„6 œcžõ“w«ËtÅX°ˆäõ«rŒU‘®OR}C]tFŠÙ )ùñþf±"ŽgÍ#åˆÏ<’x¨®ç`쪥@9#¹¦Á™ÜX3‘èk'&ËI-8Ê22ä’[ê@]— H JäŽNõU#hÕ‹°b8 1ÁéÓñö©ÒPʨTì Ääžç󩵯*ÄŽd;ˆU ä3þ5kʇb¸+ŒdœŸóÍ0L–‡ ´‚AäŠ#—qDX°TV¡Ô›–ð Â2y=•œ»yq!y09'ŸåN3íiBR™b¶‹1)È€2i¨ƒi£)‘žõÇÌ27âjÍÍíµª˜íÕC®1Ý@¬Ã=Í´àžÝ1ÅgÎæH ç#ÿ=)5ØHŠô­ÔÅw6÷'kgþy© •ìôߟnWŸ\Õ< Œ”89Î1È50a4 êÀÃc½MйRW@Z[ir Ì‘Œ})o'sl^Å ¸àT›à’y5zÁƒ$¶³($€h `€qÒ•n<œG¥^¾0$¾\`üL:¢A?sŒ’>•]iÙ_Åc*mÔ:³çÓ5Þj¾"’]"i-\ ÈJ¸_^ß•ytdù„z÷¯GЙ{¤Eh’&’799ÿ V œ2Mrì;0‘êI­»oO;$ן ‡©®žÛÃÖÑ],ñò2>\ý)÷ižu$yj@Üz’¥1”îµ/²XÇЍ›ýXf 絓á]SZ–Io\Å­•$d‘]Þd³Ú©B¡N1ƒ“øóWžÒÚÌœ¶ÀÍœµ ÎmF6Ô©¤x?LÒæŒÁžè—<•ÿ ÞM*X¿•–-¸±¬¨¯aÓ§’r̰•c“ÐROã %c‘<¬2w zšY¢k©µ<°ÙBfšD‰˜àVRk)©9‹LÄî Ÿº+*ÛÉñ=Ñ3LÚ1’ |£ÿ¯]µ­­œ^U¤QÅ|M;%ê4Û"‚Å¡˜Ésrg—²ðh¼¾ŠÊ!$Ψ;ŠÅÕšöÎÛ ˆA9Ám¡)»Xü²™6œñYZ©µÔ5Crµ>lsNĽ49©§É[y3Åó‘YóÀ³©‘p®:‘ÜÔZŠIg¨¾ñýìärK (‚ƒÈÅ?2QFºo2[c:BÅA&CÁ­%¶‚Íä 鸓ˆß ssDRé^1‡?LÖ¥µëj0¬ilx˜ `päs÷–ûEt4]3ÉeÞI02Ìå¹¢Ò•2†@…S$šËÔâŠ&¢µš ðÝÀí֡òŠEeh¤yVèi%}ͬwV÷êó,pé—íPhÀ­Ö.|¸ì¶F¿Jã4½kS„ItÒ‰mÀ ´Xô<ÓÛZM@ùßk•bRIµÿ•U‘çe»b[ÍH­ÈŽÐ®@IsZ¶šmÜÑ}¢;ûc k‘ùšŽ )¯#F™Q”UÚMÇô¦7ƒÄ¬f³ºxyØ2cb=rO_jVE=w6Úl¨—Úª¤Ò  ÀÁöÍP&'¹ÚÚÖÈNNó0\çX·šŒ‰3Ûkl)lT§›dûUsáûõ yáÛÓ,#(H_lÑh‘Ïc©DÒaz«†i ã{ Y\-¼—32Ÿ?q©è> ÑÌÍgªØmITƒçwǦk¥½´³Ô4Ù4ñl°Å:p¿0éDšŽâæOc6XµºªjS@8!¸úÖ\ÚΑpÃ/s+Ã:±¬Û+™ô æÑ¯‘X)Í´…~ð®‰4ë©f%á]ÄòñXÎVhÉmGLÚUmæ ’ (@¤‰ì.æX£·wrÀcÉÀ‰é[vºRÍ©­œÒÌ ˜øEué––ÑùqÄÎNzJ+›W·¨ÎBM"Ö6@›@å#5dJÌ8_"9R>•Ô¥¥­¶ç¨íÔžj0 Uӌ֪Ñ3åos[äÞ÷‡Ì=Iˆ“ùš¹Î…mÌx8Þìsõ®¤Åk´fóÔ  “YÚ¼²DŒÖÑ VÎqŒPãq»E¾¢4kÛ¶Ž À ²œf«ÚÁ=±aargH›-ƒ½L»¶´Ä¬#RyØ{Ñ£\­¢Émt†"ØùÏF•6õg©±a³(˜¥+€Ö¬ÞéRjDñªIY>éÎ({H.íöÈ2q•aÁÚc=í šQ(P¥d'ŽkH´ÞƒW±-¦–þl}m ¡"'$²cP›T‘ÆH5TÝÝM´#p‘—¯Ò¯ÛÅݘ;/Sœã5«v ^D¯!KËÈ‹’GNÕ%¦šeœ–¸‘†Aç55ÕÄPy—/€9šŠÚDŠcC,¬£ É_­ih+¦õ5.lÕW{HÑÔŽ†°ïïâ´Œƒt£Œ«àý=i×sêZ’ï ZB †2×+;ÚG;%²Ù#Íð§ØTÚûšÛiyèÌ2¼’ôÉ\(ªÆ]Ýäø9 ǯZÙ^¼QË4‚"W*‘'?ja…V~IäþêòÐR•žÄ+¶U·YÒE` –ãm}OôæXU±ræG,O“<þ šeÕÀ+4ÂÚ1Ò8ŽXŸvÿ ¶¶Égn‚ÝbF9 @É#ëÖ—*.ÌÎX/¥Qh¶qg¨]ÎGÓ ­;}*ÚÚo4y²ÍÓΕ·0ëÓ°ôâE#rØƒŽæµD¨àaA9èqÇäÕZÅ%Ô®ì#‹Ìeb‘Ç~{G’7Ô ‘ܤÔäŽ*½Ë…B gúžõÛØøoG³Uòì œâ¬zìyͶ©t­%”ò’ ³k÷S‚Ì[È2+ÓàHð«*£hã—:t(ÂHÕduÓ‚ g$ÖÂöhóéô­jæÕỺ¶Œ‘Œ’~¾µzÆ Mô›xnõXÔ0Ûög·Y ÇN½j¦µeâ¾hÄðÓ„cò’+ 5W•ãK͇;Zhù …(Ú>íÇkjz%µ¶²bŒOsÂÌkÃÀãð¦A ØiZÆ¢¯†—ª±ùA®j×A»¼µ&/K<§¢+`¯z½ká71…ºÔ®žA’v·ËŸ¡¢N+¨÷èoO8¾‰¡· ÊÃiÊäU8´Ãh€Ñöœ_”ì)ÖJÚV šãÍù[n1õ§]kVÁÊFûä œÕ’–¶Fɤ¼ÉÀ· …þV^ƒ¥XI£;…¸WaÁ¦+Ë%Û+LAŒ€6/zØ´á0«*c ?'?Ò®2¾‚M^ã”n2v¤„…àõêìòÛžQ]XƒŽR$ l#§±þµVêòéØÇQIb2MU›-Ⱦú­´aîD}$à‘Yº–«onÉ)S!HþfÅCyaì o$ìeÈ,ã–ÏS-´H,¤3Fß¼¬‡p¥dƒÞhÍõ+ɤ ‚Òù¹˜œS´ýÒdU&QÉ’^OÿZ¯Ü»©ýìdàd2r*‡žuÚÆÝÀ€.n%Œ{f¯Vˆ|©êfk&k† {ElÃ5RÚÊk²ÝgåQ“êMo‡P¾M>Ú ÖêUØ;àg¿=i÷ˆK~@äÁÀöïЗncÞÞnåa'Aµ@öÿÊ–îÕ&dóÀs[3‡Ë,ˆ#=2kQÒã*'(Æ3p eu±ì§4±¥Ñ A1’zœ“]†s bØÇ8äñ\ã$3©•a‚î dÍtžx…ÊG÷cGCÅ7ب½N­ÝÚTŒ(  ³€ÊÖw¼(¡‚ýqÉ5tÝï‘„@•n2Ü*¥ú™üµRPÌsÁÅT¯czI9«ìdÆœ–öôâ­@›Q·<ÎàÏ¿¥I‹¡7-¸sÔŸç4Û˜‰$‡$Aî?É©…֬誔½Ø­†µÌ!UÃFÀÓ­VþÐy“`Pvœn'=)ŽŸ˜‚aÆj¬É-ëå8,Ç€ 7.Æq§}^Åéîîn^Þö™p«ÎEiIjÎ’@sŽ´Ø4¹möJQ‹Áaþ}jYDÌÀ ‘‡;ÈN;téŽÔ£Õ—V¬j*Ä…¢VXÃFTà.>à<ý}ýê•ø kŒä‚@=Èãôô©eº´²„1ŒÉ0—hPÙý+0›«žW ¬Ûö“ŒŸéZÓv’9'°ûKcrË{c’sŸZèŒKnÄÁUƒÓ8 G“fIÈÏQڭܸݎ3ÎkÓ¦µ9%±Ÿs¹ iÞFrkɵv–mNéÉË.îóžù¯dÀ#ÎNA#šóÏø{Q‚þöú<™2Έü@9Åc‰WEÒvgx[,„ çn{ŸOåP[D ±¦2—Û*]D†Œyè2qIi i€Ë=y®>¦©Ól<À$pcúÕIaÞ0Ç$ÓŸ¥\€C41• ¸°Éç¥+ŠqЋޙ%U´~ã${ж°&Ü–b à÷'µ(óJæ001‘ßf fQòôÅZ->I¤*1•'¨kj(!²Rf ®) ǧǓ€ì~èäƒÍgNïq!Ëê9áA§kzˆuÅÛÏ1±àásÉ÷5wL´KÓ±ýàÈŽ+°Çlg®+£Ò­šRÌX™H#ª†²¹2ØIç¶ÓT['<õbkçX¹œVؤc ÜÆŸ®Æl©c¸W98æ³p€ç’;“C“ؤ¬N$#’H`œâ”€% 9ÜGÒš]ü‚oëO;ÑCcÛ y’ûÎy$äN…Ê‘ž9ÁPsŽ€I.pqæ(rp0:®Ahò+H>BTsŒqþ{Ф¶‰TáAœs‘ê*H`@N sœc4±Ë  %[#$ãÚ£[¦ge(ŒšÙ5kÓèY6I3eå\Ž8 ý)¬" óƒœštŽŠŠûXŒ@=i»X”Br>RFNhæVÐ\¯¨ƒt£ËS·‘ÉèEh¥„ih2 r2I<æª@¬f+ˆða×>õsÎve2vŽ ¨nå¡»T.ÒÇÝÿ?gÜYë¥!Ø$Ö‚¡3±îã“€jÔï–&M¤6@Ç&¥»æLž‡i’9q*ð0Ö±ïå–&PÈU9WèFÙJ©—*rÄu¬«½(í!㈇ÈÉ9"„ûƒV8ÝCN‰ôØuòûŽá¬9d'Œ„u®‡Q²¸ÒK*¹{yxd=`܆F0§îÛ<¢Ÿ ¬Pmìäõ=*YJ@»²ärj´Û×ò§j2þaÉ<€zšBeˆã–\°zö®·áü6Òx‘„Î ¬DÆ£’OÒ¹g•RÈDFPZKp’G$.ÑH¤êH#ÞKŠV=ô4p«‡9 Fk寖)0%fÜ3’ßÚ¸yõ½CQ½íü’íÇÉá*þ‹wyi©ÛO k4ÒåU$l¼õ¥{×=:Óí1ZnˆNÐ±Æ e'†‹ÞI}ª\¼¤¨.p mX}¹¡ÝÇþȬN?AY½µÆ¡u‰®d…ÝF܆ÕîZÐ’øZÜFåòT†èqPYéQj34–ÖÑ$Da¥TÆk-<1¡~ìr€‚ìÒ…®’ñ¡ÒlÒÎÊ1(ÂŒô§÷Kr…Þ¹a¡¢Enc¤‚½3Tïüf—–þMš° >f IJ[[y•üò¹'Œö5£nºu¢.!L/Ìw€M)µ`‹f¹ÓnfžÚæP˜4„…?Z¸šŒFq¦M@aBÇŒýjôú¥‚Jº„ äŠGÖtÁ )6ï`†³e­¶FêwN ¬±B«’]pµuƒÉq¡ íŠætŸižsG¼¢7!Šàf¥Õ|@>h,’I@æIqô¬UÈ5]nH¦1­·šÄ‘€ØU%™d¸žâiœàzÒi:@ºµFñbq Ë]C„ pP [s7WÔ¡Ó´›™$,!F2I¯3¼¼Žå˵e<ÅòMoøçUK«èìmWy·RÒ02zW éhZ •È,p)ÜØ\h¤iøi'€jœW ê"€sWe‘O6!—#<Õx"ŠÝóÄŒcÓ¾ƒërÔ¬ìŒI°'®¾+-&îäBÎå@hgÂ}ýâž&*qÚŸinì››cüRv©~E+=Í}^öêc»š+¶ Hž#ÏNõSNˆM ÈŠ $‚zÒ$RÜJ°Ã 3’ 2MZ—E›Ì0È©€e†qùжìT’;fìª 6 5rÚPfYJ;–vÎO­]Ó4H›)+Å’x "äŸç]—„c‚A @NxÜÙ4î;YXçtÉoìò°Ü*!rDRò¤{Õ©wâûˆslTE!3Gó+¦–ÚÂÆÙÍÁ„>Ó°H:Õ-ÃÖ”¯sòJ€ç'¦y£Ô›ÔsµÞd•$<’pií`ÚYk.üE2òÑç(½øsMÚ<Ët  Ö|¾Ò§rR"¨[$ŒÐ’ÜN7<õu5ÛÅTµÛ$g%ÇÊÃÜ…uv·sé¶æK·iáìp2Bÿõ«B_謣 &G!‹ƒW,ôDÓíwt9e€üèÓf'lr>"½Ñu[ÏÌÀfQI ýjžãyEªÙ\¯úD#a”òH­iüaYµÏ•1mŒ»—5•}àFÊHµ imÞP hñ€ÃÒ£“KvµW×nWÉÔìî{fìêPõÍt3ø†úMKÐþQ1îŒD˜ŸÇ5>eWI-^ÖI#*Àt9¬ÝTÕbÓ$´Œ+ˆ˜ÆQ—çÛ5”[KW°6vVºªÞéñ_+–¼™õ_BÖÍþ½sm1 åFzס_yK=Ë•häÊ«p@?çõ§Orúgˆínгzv¤ªZÁw¹êét’JÁHÊœ0šÀñ}âÇ¥³Hp¥¶‚piÚMËÎÌÒ¢¨‘HÂô5.´–óXýšâèFFq…"º•šMzv”ÃReR8Œa±Ü×UŸ ˆFÑ«î9®rÛN“MC§üéüqAµÕé—‘^[¬±8ÇpkŽM·xìi Z̪–· ,§²?yIËGôö­ë ž/9Y]XsCº’øóYEöi®ã‰œG VDŒòœ€= o^¥ü;¡U$oNAöª3¼R©!gÇÌG­D`¼XÊ 0ƒÁúÔâ„°›Ë e vÀ'ÿ×ZY-n.o"…Õ“Ï“ •»Ÿ¯ZbêÖZRˆì-b–rÌ0SƒJ¼ºD:µëˆóÄhy5¡~¶ºnš2Òý]êÔ{™¹¾ˆË6§“ªÞlL’!CÍe¸]CX·Óô«`„° ç @ê}«3QÕ'º}¶ècÎó°úÖö‘n¾?j»¹ q$`•7¹' þ”¤¬ ßFusé“E q\É”êÑÂÛT}OV4×H¬aQ j€‚08Îj4ÕþÔ‚I?s1h›€éÛÚ¨]ÜùŒ@s‚sr}8¨E«XStÓLy`Ø Ê>¿Î­Ç >s ù'9éY¶Å„¤'Êc×ùÕï:çA$ˆ' u9çëǽ1­w-Æ t „R㞦§bR0zerr?Èâ¡yº‚À¹8>£åRf~P¡#…ÏçH«¹óI 2X‚8¨ílÖmZÈ>¦t  †ô5<®‰œrC·®k‘Ô5ùåÔ…´K$")NZ)vÈÀÍü?…=ÅÌ¡«=Ãˇþy/ýñEx‡ö½üø\àÁè¨äo6ö -"ÂÉcÔ‘ 9ls\ZÜ]=±‘Š16.\Šè¿³!³Úö9¥xŽJÛT~=)·ëZ#GjöÖû$Cïü{ùP®‘‡/SÅ›ªO¨c1ÄHSËZê<§]}©®nlÉ•i95Ä5ÞÝZÇS»ß"´ª\žKsÚ½¶Òæ¨¼È • HÏ·j¤º‚Jú¼ÔváHu¥kh£gàmÈô¤€<’={RÉsoË™|Ð *9Å6ìU‘2Àª€Žxâ‘`,~f¦Ãs ìv:¹¦zS/ulâ%ÎN8QÔšžk+C™ñž™ivmÞæYPÆf3ŒŽ:Ö†<5¤¼ÒO$&|‘då~¸«z¹7ÑÉ%̾R°Â€2߀õ«‰ì”y›QmE'ç?_ð¬áVïÈ‹uVðUÓ¬ì'ÎIƒ!ê+ŒÔb×|?8n®ØºÀn×®E:\¨™*pIñZ±QrÈHèXŽ+VØùVèñ¸uÝUÕ¡’él'LdÿoDú¼ÈN•€%¡|úz×W¯xj Jج+cÈÈäý fhž ¾²}âúh¡ÿžG ?”_ÙjÂi™Pjfuim®mÈ'!“+]sKlÓÛL²ä@9Çøb·>ÉäBª®ƒ’@æ³mô>ÖôÞB¥X[c?*Ó›Mƒ—Rh„A|Ó³ï3ý2Q2«`ƒŸà<œ}kLØÀÀ9ªs°C€sÁ'Y7stìT¬LθóA©è~µfÞu¸iÁ<€+2õB±.ê7 ;ÖP¼»·¸ ®»YÛ®=ªVº¯rþ¡~eY-­sæ—òÝú…ñïX7BkÙ×N±S´lDÓ÷sõî}ªÌ’ªÓ4ö&öL³ÈÝUOV&´l´ø-Õ-cÞBŒ—=X÷5²2vù”¢hÊöÖó4À.B¹ÀŒŒó‘þ}é$ÕÖ}6+Ç C®ì¢ª 3«_M ´Ž!‹åšP~ÿ°ÿ†ö(eÓí˜aPdaÏášj×%ËAâöÿtñ6Çæ 9æ³Íܬ^9"c‚AcÀµ¢»xT¢•n'¢J¯©_ZÉ0HãÈܨšH„îaù’Y#B±)ŽT÷QÅli’›†ÆÌ;šÉ™^{†Xí`¸V†˜¥õ%N2öÍ>a-ÎÆÚ ©99 €;N’Uš0¥ˆ`T©p±;eä“Y—Ÿi ÉÈ1“žhÜè„’ÜYæF˜,…_’sÀ>•¨Z ˱Œã#©ü)#¶–U-&xãå¿çü┼[@‘_*¤|ÞŸJÙÖä£ V¬"‚&l2»1È1ƒƒJ·h`ŽtD‰Tò¦ ÆÓŽj yU!¶ä¯­Y´´x$b°¬§ž:~=ªÒG3œ¤jI!y–5DUŒmÚ[ zÿáPË\Û+¼೶Ф¯>¼óÇ4:$"âbŒKm_˜ç?¯§_ΰZ,xm¥w QÇë@=îÌ‹”Y.ƒ…Cã>üÔ2–h]ÀÚ€ç¥?t¸€¨€1Jê'Œ…Œ@ùØàö§fmsjjiOºãÚÙ+Ÿnõªñ ’ê1מ+ÄL°±*¨Èë[6“·öj«!,¤’AëÖ½DýÔÑÍË®¢„U8d zæ¹ï³Á¦HÁQc‘Xn›æQœï[Ï8 ›@;±‚=*Ÿ‰­¤¸ð”î;%`Ä`ê}{TU—ºÜð;Ôf`BàI4@…š4'ÙUBX`“zâBAQÛ¢ÜbèРMpšIênغÂÑ’pˆI8< IqoçË)ÀyQ–&ª[YIr±„#kŽ?­tùVèf¹rr8ÉãéT+ô3ìì®ÖAöžI,¾´÷¸·ŽLYœHœnê§_]Ktª#@1 y?þº¥i ·—$g*As‘EÄM12n˸ôS…³–]wHr¸ü?:*2¹#¿çé[6¶D¨i @zøÒ l4…›-+nbH Ó­l\K„DHp~Tf¡V‡M¶’8Û|™,qØÖtÎòfIŽüðêER•¶ŒÉÞK¹šId°úTA °+–$r À¯I*„ ~ñ5X¤ŽJª`úŸJVl.7f@Ú ÉÀäšy·ff$ …*Ì6Ëb ÁÀÎM8.bˆÉ­Üq@Êh‰ ÞUw(ÈN*üZŒo iɃ֩ËI¼¢2«ß ÿõÕ¸-B¸Œd¨Á'¨þ”ï}b1‰.zjÊ[$ H*2K1WEŠ"ïÆ1Ç+€jxí•ü´\“Á"ž€EP¹'¸Æ)æ2»T‚N= «Ñ@¯n[ƒ‚O¡ˆ!Á dàã:P1© ¢=¤rb?Î*Uˆ$Àrr9ÀϬŽÌ@ŒƒÁëREò¶$Üäq‘JÁrT’ä mï’sVâW$ª—ÿŸ“ÿbŠžr½”»þ%¯§^&š7‘gQ†· ‚MhøNÒx~Ðû’(x_³¯$R}k^÷O‘×Ï‚=’ çÜWJ³ˆÚìrú=íí¿’ÓÉQ´Äyú×[o8º‹+þ»²EaH>Ñc#XÇå\ ù‰³'ðµÏA{u¢Ì%šàDäñÊrÌ=ÅEåïl ž‡±\ üÙâ²ï´cp¥í®L Ûƒõ‘âµu`ʘ$´€GÖµ]Ö(C¾â€œárGå['Õ£ÜäeÔµM*dPJt¯(G×·ãVežK¢ {LeA zWA"CucÆÃ9<æ¨>žÖé¶Ð Psåž@úP;ôÖŒ<®ÛÉ$±è*¯¨Â°ÚNèyw*¨­‡"Ú6«IbOsT¦¼ jJH'©ªçk©›H]N‚ (ÊÃ̹¸PÒ?r}>ƒ¥Tš{Ÿ´ÿbéó º’&iççìëéõ#Ö±a׿ÓâFÅÞF+ŸïS,®&·¶• ~þv&Yz³ïJR1¡®ë0év§L±;TNnü÷õªZDÞ ¼î娖5ŠTÝj$1Ý# Žy®ŽÇIº¸G-ûˆåø4®Äõ*Ý܆â-•'wSøSl´yRW=Àœ7P+¤ÖuˆXØOpN êWw-òzñÅK«i6òʈ¸ ‚I-W4½2Ùµ nK² q޵^Ú'–üœ}ç ÀÖí„$ÎÌrp¸çÒ´Šê;jk„EŒ´qc=ñȪ7ª%µÀA¿hÁ'§Z¾ggŠhãV1‚Äç5 ´[­ÔÈ2O,OéI³UvgCiûèã‘ÕRØßžÝxsmÎÞY ÀŒÒµHî„Ñ¢‚TžF üy¬ «½×*±À–m cŠ”kQw-#¢2…„c85«jŠÃíìC‚@$‘ҹ؞fy÷«¶ÚŽæh6lñš§äŠêìZ¹uMàPÅAà¨ÏõžÓ cæ7ÎÜÏãQÝÌÉ&qûÀJ»“’Gl{UœµÔ¹<¢åFzžk¡J)JȺ%.¬£åLä‘×£gh%U~ªXÀôBÚØÈ‰#žø®«H! )œ¨!6àvüÏò¡°ºNÈÉ.–óKi’¤®du© vuÃJÈ $pXsÒ©êòºëR)ÀÜzƒ‘’I§ 7[–È'’?½^kÁ?#‘«6‹áw¬ £.è&›¬O7ü"·!I%‹`†ÈëV§6‘†ØÉ9¬¿ߦ™á[eŽÜ‡–5U8ìOzç­+¡Æ:ž%|áRß*IRÁ—5» iÈlÖâgT.r3Р¹µfqG ¸S×Vˆ"94l¦Ð¡‰àV1}ÂkSiïbY–H¼çÜÛƒõ­h´ëdV¸Ô6ÊýJ³a§þºÆ³xtøòm»É„ÖeíýÆ¡6$|©9DtñúÕ©%«3i—õ]NÀÌÑYíHq‚ªú€j¬7a¤a°@ÙÎMd4´êBdç$Ò´íãX@‘Ƀ–'‚jRmŽöGIg½p¦L æŸszBâeœnÇO¥`Q¥R±’‘ôõ5,Bk™1î$`㱡é°îXÊØ,yà{Õ…‚Y› A=êõ¦’¦ë—!”d‚pEq«[BÍ¿ïX0: ¥n+Žr…GPçw5BêêÞo.^CŽ¢«Ü Fð‚á•zàp,^º’UR0GsI˰ZåH¯üÉBœ%›îüëDµÌ¸Â³(QÏlúb¬&‰af»‰>rFriÿÛv6ð* ÁnŠƒs–U„‹Og29Lœ’Xù-‹Ï@,?éYãT»šC"ò#€cŽ~‚žúš[¨7¬ÃæN¸ªW†©‰ðŽ®äuÈç%´ˆƒ#I 'sÿW§µb6°²DW¤`d0;VL·×BæSm?II ±ŒzÐ’ÎÝ ’H$ž'ò¦¢¤ °;vCÀü½*•”K r13ª–Áȶ¤ ¸òÇ8ÆîƆ¬‘ÇnȬó°$?k–dÙÆ8nž•¹•÷<ÅJœŽHíWJ„DÆÉ#šMŽÃaŽ4\®GÞëÍ8 ‘B´„ã°ài³gÍÓ1SEî1´&qÈä‘RØìMmi”'rN]ŒZ¦8q䎤Õo³Ï·+p¼ ÍÒ‘í5ð¨#ˆÉT\vd·Úäm¹–DQÆ@n?úõÀk:»jóy“Gµœ­œ€>•¿¬xsQ:t“Ë<.ÑäŽìWùW?›,ÇqO̧œZh‰_© öeâ%X”çX“ÝȈ#t"PpÍÓ5ÜÅawyh g ²õ¿ ^XÄ5Â"1ÀŒ±.O°ªS[“0í,Ã#°ƒÀè+¦ðæ• åêI$*ñÆÃp<‚{ À3¬n1¨õêkÁ¾)¶Ó"¹†î¶B^5éõ¦»•sÑot©µ;%…nÚTѦ08¬)4ý‚ÞæK™Çñ®NêÅÔ|w=þëM>3.pò7$Š· Ý[Z^Á –8Ì„’ÍË3T¾ÃM‡§B‹K*Ÿ0¨;G8« "³;!cÉË‚©Ás±A` ã½9oKƒt2€–néPѪhÊÕµûÈŒ~-Ó8iËíéTl¼%%Ãn¹Ô.ˆ<±_—&ºÑ ·ïÎ*”®ô+FÑÕfÔe›Lðº¬0¦×̘}¿Îk«ðUªX¬ÚlÚÃß]€&xÛ?ºëëïX‡WƒÃ¶1húMŠ}ªuÛg$±ÏïØuªP\Ûx:o®¯XÝÝ03¸å¥a“ø µnƒ½™êÜ!#œt qJåŸN8Íy×€|S¨êzÔ±ÞܳÛÊ E8>àWg¬øJÐí^çPºTQ¢ÌçÐæº~æ‰É ^*¼ïä#Jy’ f¹Gñ>©4¦h¡±¶„.QfºŽ}@ïíPÏ­êr¢†¾±ˆŸîüÕ.InÀé%º–F3R2Yþ\TRK&gºG `…qŠâ® ÅÃ;I%@Ü#*¡Ó.nJŸ¶»ôŠÏÛ­“-ÍÝfòÞfeò"à~µÍYAÔ'Ž3ÀÌ™«Éá4u 5èRyÀlœTá -ªÏ~và÷SŠ—6÷€$ŒÁm#ÃS”œŽCó[ZmÞ¥ 4fvœ>iài"ðý¬Y:—ÏßîàToeædC¨¾î`jc._µøÎÆÚT¹XÃÆ¤p Ù÷ÍXh­`«¦O\6p)d^GW»d ª"œ4É%f_µÜ0ã9­=²Úÿ€r¤uz…ÚÅlÖhUÊñ»$øV ßë(¤GsnIãýQªgEºa´N  gm@¹$m¾—Ž Œ“QÌå·ä+XˆÁ©¾ãæEœ‚p˜ÅBöš“£F«¡ÁR ‘‘[v:4Ö³¬Ò\Ï S¥p [¹†v-äÊ‘†9À*V³m}Âf.‰á9ÔC©¤bتFùcߟA[ZÔ¥-VÖÎ1"0Û `qÅd^Ï©Au¸»PJ¤Ž.ÍXº“4Ï'n8­e$´Q%sEk«K9!KÊÊÁ»§Z.©uewŒNÆHwŒ0&·n± ¥£† CiŸý‘ú‰®áQrTÁ³¥Jž·)5´¿e†d`+À>•¥ Ç2Äp8Pj…’4Ki8 $`ƒ‘ŒŽÆ´4<–kö„d‘IPõ852* ì« ºŸQI¦€@#V –É9ÇøVÅ¡aæ&ü³tb:u¨rªØÆ_8©«ñ He³''p Ò‹»º6Œ95eˆB®Õ“eÚ®»0àm#¿LV’º2“’F@=¨n5'Õl…¥žíåÀ•󀃿5¼}âa©·™9²±—È Ï8l,kþ&°¬î¤¿q¢é±²i±·KË0š½¨ÄÒ\cÙ®édÃ\ËÐFŸâjȇû7Nh¬b ùASÓßšÞæ¶¥–»Ñ´¹¡Óã’8‚DZ_§^¾çÔÓîçŠY.ne ±Œ³¿c¸*çT»Š8âS–šg9Y·µW¹¹ŸYÔ‰»ºytËfùbÆÕ’Oèõ-\ÕM%c´‹Ä6×J‰ <‹˜â=Ò¥%Z ÒAÏaVì,–ÚÅ6ª€T1P>P9éX³êöÚtæ –c‘ä§$ýz`}i'qÍ4®Åkëfi<©R$ƒ aÉ­HÂXäv1ÆNsôª¢å¤¾i¤†;tä„~P)¶ÓÁw¬¤’¶öìëUî£g'©ÛønÈ[Z‡Pc3$ŒÃ–<ñô•sP±køÂG9H™rDxÿ_¥fÞê–‘ÙÉ1¹AÁV’ÃŽÝýUËOã( Y>ÂÒ3ÀvÒ’MšÊIht°  P®Ò6XŸ¯Z«k®]êòc(§fáGÐzן\ßBà ɹ›¦kÐâ‚ËGÒmPΘˆ §8,xªI9É–~èÿÏÌÿ÷ÅKþÙ¿¾ß÷È¢‹.ä]¥jm§é²GnŒ—´­Ù}«3[ÔÌðù?)-ƒ‘QÎ&t¤s† œ*•ìiö˜Ò3€,zf±I^æö.êm`šv˜-”£ˆ›žû…mùÿÚß-&Ih’G.¸dqý+žÑ–Ú]jÔÜ+ç.ARÙçÒµ|[tßð—^Lc1Bµ€Çmh4NƒW°‹QµÒ4É£y&pƒ•¤žä×¢¡*ÜX€OJù¯ÁÖy©$“H ²µ"IXI´ƒÛÔûW»x{_]MšÜ((¹Ù#½¶õüMgÊ–ˆwÔè jͽºã±Î+;U´ÓgXŸPuŒ+ŒÍ·&µ ê̵ÀžÔl”’CU+­"ÏW”Ms·íУŽAô>Õ¶—°Ì e({¡É¨.m‹ºÏ‹ŽpT媯qYt8©nµ´gµ–o .@HWük÷Äz††–e¹ç2ÀÌI#×=«¿Ôôøu{ o0È0CzŠóÛ©ôõ/mh¡/ ùdÜ¢ïÐM'‡¼g§j£mäoà#+Ÿ­u÷pNÀ+¡c’6Iã:‰uª4šyþ!ï\Ä«¶];IP*+n$žIWe23°ŒdƒÁ'šâþ(®Ë[4!Æ7\dsÏáYËáC޲<ÝLÒI#$’sÎIÿúÔ‘ÄZÑdO—páT‚Wk©Qʼ˜À\‚zVÁ´‘â,w") .y5˜Mr²Ü†B-ÉÁB‚x9♦3I悊åAÔÒ¼âñNò (|z}zÖ´ÃU†â-€2Ùn݇ZÓ•³'$BöÉh¥gùŽBu'ÿ­Yûou)|˜áv dGäóë]$V–P)—S¹iOR í'ü*–]|Áj#Ó­’Úà¬Ï©Í6­£×TAeá´·7Ú#à~ì6qÓ©ÿ |zœv³k(wJxÉàƳâ7ÊÒ]¬“©ïI·áVn5ÃH—mŒï4ù´÷tú“<^:½Äò7$ÔaG^}êÇØ-¸>ß”)É&°.|qs!a§ØF‰ÜdÓ!·ñfµ(ͺU˜lÈþgŠSK3¥›PŠÍÕD|çãžJÊ}nîMÃÎTËp=)-<+#>u ç“8 dOøVõ¶‡¦Ø PŽîT`mÈ'ߢŠNÍ«1 Øî<ùœ®ìã “ìÑÂŽ,àšD mÀ>¦µÊF¬@µPà1º]6À XæÚŽOÌÀò\UrÆ[h [s„–ÛVþåL;zˆÈ'󪩣]+¸¶v|n,Ǩ¯YW*l]§€p*YQ>-ÊÃî¶ǵÎïP½¶}ëÌrIÂ¥ÓMÌÈΡ¦X±ÕoX ˜àVÜz uüê¥Ü5[[»—’8Â)#‘˜ûf¬é¶sÝN5=QË>?v„`(õ¨ ?´ÞîI^gíÏðÒöJüËqóšâÓ.#¶ÜñíBçæÜp9®ÃNðòiÚ­·Ùã`pInÿ­rvÀ·âyÝcH¾`HêÕÒMâom‘$È mó¡ÑÒÃŒÌHl®´¹µK‡µF7SP„(®^ëRµƒPk‹Ð|Õ8 Ô ­x™ì!‚ F]ÊNQNòƒÞ¹Ó jŒy«]yP°ÜøëžÂ¥Ð§Ô\íl;VÖŸQ¹‚Ækx&ï•›=?Æ»}'E¾ªc¶a¨ò•ˆB0=ëÁ~kJ;¨l€†H¸¹z¼ñ/Ì伇¹¤©Â Ñ)^LómÂ>#mB}Jh¡W$©i%Ȇ?7‚µ;ÏÄÁbžÚ Z¬¸ó:|ÌG{u¯TšY\ùPE;žp*2 D'|Ìrp2M4µ¹vW9yt9íX\ /I´q€ÌN?à W¨øvåõ õK”²òâa"8ÙÃg¾=~µê²é2ê µuŒt_úÕk½NÃOcm³ÊcÆØÑ8&ß@mž]ý˜H­ü»çrwH±Û*ôÁ?‘ÅuúÃÛk»Xîf’ei>m’|¬> WCõü²‰#Ò’Ý ¼Í‚Òº/› ß½KMn8ɳ‹ÿ…y`›Žé6€0D˜þ•xKIV!$wI•«¥Õu«=%3u( À½I®~ëÅB+6¹M6wES#mG~jy•ìØÜšØÆÔtí/O@eŽB ¶BÄÕH¬4i-^å­¤DU$‰ó¬¸uÙüM©>¢Öí”jR(Éä繪¾(Õ×MÓdµR$ÙN¦Q÷¬™<Ò.CªxfHMɳ½Xó€ J7ož¶¼<x`Ú9ÎãŒ1îÿ#Uet.fu²x;I€ò%r¹$ùǵí£-­ªbF8 ƒ&¶ì¯–öÜ~xØÇ"žaéYÖ:6ÅÞâòHNÎûV‹·k= Õ’NŽÈL®¡“¹r+:mV 9Väo9¹Ù*XOÄÔ&Ô% xå[Æ3$Ää–ô_zÀˆKp‹ºXO/#É'¿=?‰Tk`²:^ÑD÷RÊÇýZH¦[Ú¹€…ŒAMÁÏëYm4¾UA“n ±<÷¥ss2ÅpÒ›xÕ·¨?x‘IU“~Bh¹ªèº…Íì!gŠÝâÉQŒæ¨}i9†iÕ ÐŒþY®àDš­„2¿A[¾HI7,AÎIl“šÈÔå¶´ž èIyâ77¡Åh¤º#'ܱŸ.‘o*~Ó$Ì ®N‰÷ôJþXµi×@²¹aK]΃"0?ƒýãUõŸùV‰öFÿL±|±Ý¿ ÎmOûE[ IÓ-$óŸ¼Ìz‘è}ê%!¶ßëQiÖé¤hè ÍA! žµNÂÁÂ1ùTÏsë\þœI’K¶ÆÙTÏË[–Vº†³2­¥¼¦2pX (?Ê‹½‘R®³â}NÒµ‡Rf.qò(¦G?­kxSÃWwñîHN\æK™:~µÒéŸ4ëk¨îu—3¯"1Ê/×Ô×^ó­¼"ªD£…QF¶.ÍüGªø:Ù,e÷.$’ò íǽq6Öî"U»µû"Œ–’N ½>W{µ`¨ûÁÎð $ZtÏ7ï…<¶ÕYuò9Ñá­Z;“$¤€IÝ·¸+ý.Ò×Q{Ù‰prÙ%OøW£kXÄ,ÑŸÌ`¡ÇÝ-ëš“NðüB6¹,’J…w_”NIlláô %í«La“ŒyV¾áGM^®‰‘wŸ˜¼€v cc2JXF§À&³›Å1,òÇ j†9†nsŽô•îU’.Â5§ÿÏ”_÷Á¢±¿á4¿ÿžËùQO‘â7r™>@íòœdšRÛ,D[C3î=@§ .k{·[´mªH8ïŠ[k9n® [(%Ž0N¤î‹O¢ÜXÝhsØ_«Þ] v0Cî {cóY7]O{4—NÓ^³7˜Ìrâ?¥ië[ÛËvˆàˆñ+vvö¬±ˆeŒ0G­2£3OL¿k+È.eD–8ÙO–Ä…};û×´xLÑuj{JÔˆvÚòÚ¬£±ïÎ3Î+Áf“ @ô«úœú|Ѽ.ÑÈ!•±Š{î=Ùõ¤S‡V c Œ‚k†ñÔW-uÀ.Ö¥~hÏ g®=;ÁÞ,‡VŠÖ)§‘̈æîØ=¨mì’º!ûÊNåüdÕÐnŒ]áûi¤\nÊã­?Lðͤï«]7™<„²‚0ŸAZ@]ÄÀ"BÐý6°Ê¡½œ\BÖáÀ,§z—ÃbŸ ¶&°ÖíµK‹ˆm²ÀB³†›®B%ÒgóT°à“ÍRðü7qIpÒ[GG-¬;ûUÍ]Äv2 ÿ1R@nsS¯.£èpÚMÖ¥nææ9E¬¬`ÿ}gúW_§øŠÊò2 ªÌ£æSÁ>â¼¾þústÆ+‚ò7ð*åEA"j/2´Ì€vBØ#êk*r²W"핫ij$èK)à€:×âd³¸Õ$šÙ@Ê ÂäîïM}Nh 1Ȭ‹ÜžqøÖMýúH Z¹|ŒnUã?ZݾkX‹¶zÛ]iá $ò’õ8âãÍY­`ԣ˛`¨9ܾ¸¬?k£»X_L W 6v1íô5è³Ä% `NpOB*Ú¾…«Xó? •oGt¬È'M®£…$t®ƒÆ¶O%µ½È8\ìŽãµnÁáË {–»XÔ̤²¬g dø¶ö¥Çl‘Á`§ cÖŽ–&ÖGŸª¥$10@,{+Ò­ ¶Ómã ªFKc—>µäšë[]´q®Y”Žy­‹/k0XfâHWÓ$cò¡+_sÐ5íïcY®T8^ÎxVÓÊh7ÄPG¸às^}.¡©kÓ!ÜäçäNØè¶3iº`‚WÞù$úè)-Šræf¤Ò.ÐwsÉÉè+"y·$»A©%z’ró ? ¼ªÿZ£,SySïp¡ ¾‚¥Šú˜²^ÓÆ@ÄIä×] ‹Eߎwò9'\MͰ†bäÈ gµwöP-¾‰DäAÎ9Å8êZ“h¹w e‰†9=px­+$_³d ÊÀž9&¨»K=¨VVòÎG`)-õ°µXùb7 “‚94X«­^È—”ÚG8MVù˜—žz(ª¢éïn›(7ÏåWÐ,(ÀŽ02IäŽ)¥aʧ3ÐÀÕQÔÉ RÇIçôª³i·…c\møŽ[°€†e‘€Ãô®;Q»)a$"E¶‚ õ¡DÍ»»·…lE¾™Û‚L€0ÁÏÓ¤~k`\‚n+ÏôOZØÛňd @Åz-…à’Ê)LÀa¸à÷§"௱eÄÑùk’TüŲ÷ý)bǘÅÙIÜ:½)±+ ìÜU‰zuª÷º¥¥”‹šEQ0I΢ƗV*jp<–2Jª®ðy<Œ~ZÞ8ƒÆ±Åó‰±ê¨ÍÍî«óŒˆB²Gã§¶1ùzÓm Žx¡@HPIô5ÕG᱄÷¹»• àOçŸPµ½¹¾vdwëýx®â!$£% ‡û¼šã|[p|ã‘¡Ø€®WI4MYXJJ÷<é¡kv±&æ±ù°ùÅO<÷M1’eIÈ\áEL—6é0V\˜Ô œ“ZO§O|©!2m$1EBØ™Þæ!?kà.Õælð?•Du{KEòሙ‘æ’ElM¥Is8·É$ á<©àRØxfÖÞ!,è²–ÈèHÇÒŸ7.Ärsnr«öíFPLRÊYºÿçò­›} Ts(P*ä$’u<÷ÔEŽXéèc€UxéÇcWŽ…su°Ýܰˆ‘"¡ÈÖ0¿C‘ŸÃw×’[Ø’‚R6ùGùõ«šo‚´évŸ2K·8â%ÜwPèZU¢ª¥’<†#¹ääƒÇZ» 5¬ «,P±î=}~½ÍG´GBûèÎ~XZÛ¨"[D{™y#¯¯N«°ÄÖΙf$ÔàÀéÔâ¶ÎÖŽ7PáC©qÉ?çÛŠ©!•˜ fåêzŸLÑíõ}RêcI`°^Ïs ‚ƒËã®Oo­FRb.ÓÈ6q]!·L„1¨(@¯Uº¶ ’FQ‰ NXæˆ×ÖÌÒx>X¹&sNÁ&*HÎLšÖÒõ„yL|²r„ôöªxA`'§øÔ/nÌÛO%€9èk®Šw8¹ÑÜ\$дBEØN ´ñŠŠ]bIF0B‚Ù }k -¦·UU…É9äÇÆ*üBT¥;·ž+Wˆ‚Z"}“êoD¯´‡‘öíãhŠk)‚Aå eþñnj•–©,Ï,LˆA'ŒõÿY é•Ñ20T†ÎGáN5”˜8YkðëXMÀDˆBÝAö¯>³F³™‘Ôc·æà W¡j­w ²É;Æ@v'8ÿ=+M‹¦Ô®g)ní À=*ä«&çk/»~Ķ%dµä4R& ÑÀö®¢Ú2ÐFÁN@íÎkœ]WI‰E­»Ç7#(>|þ_ÔÖÅ”óÞmT_"%8x4œywa\ѬXà+pFH¨n´­ê$Ù-Á“8`*Óì·Û¹‹’ÛÔš§y¬Efö™¼§"Ëìe9¤]‰ì4›˜•BÓ® 3ŒšÓ½GhiAê3Ú¹X5ëøçW0¤P@˜fGAýk¥²{MEÁ‚KfÛæq‘ô¨‹æE"Œ6ºº8ŽÙ ‚ À°+¸‘ý+]bžF3ª1Ä2£éV"´Ts&é ·»p ´©ävì)¤’²‰Ëj~MZEšóT¹i…1œ(Jɸð%öm/öf¯?˜Êw$Ÿ!ÿ é|A¨êÖ tËX§*ļdãéïYÖ¦¥iΩ§ý‹p%‘dÉÇaíZ'+%žup|]¢†yRcêÌ7®>´xkÆm£[Iö~h’C!u}­“^šš†‹2µ©¿µ'i_ª£LÑ-aKHl!I±œž¿Ò«š+t.^ÌͰñ¶‘yÆæ‰›ŒH8ˆ­¸¤·“DèÇâ6ÎjœñÂÖÉlŒ œEŽ r2xOS°‘¦ÓoIä.vœ*K•ì5)#¯½´†áÜ¢6 !@Æ?ÍÕ째ÓM®žÑÄìA'¦¹³¬xŽÕTÜÛ¼°÷s${üësI׬ï\BH¥É?­;4UÓF|Qi¾Y$üÛм¯V'ڪŤÝë¹½¾v†&R Œkv]*Â}DßIóL@7@~•tÈpyÀÇŒQqr˜šNš¦W6cÆâ¸Àö­ `—9ë€y&”\—“hfGcLq,ívÀÏ%º kÌ‚•Û»3áNrzŠu®˜gU’OÜG•ñÔV‡Ø’)ÌLÏÁÕMFá‹m-À8ÀàþIö'—«0õi`°¹1@$¸b~êŒÒ‹o jzÝÒO¨Nöж†. {žÙ­ Kq,Ûcš8‰ç刮”A,\Ùœ"$ÈO9¡» +½sV‡Hð• –ÖØ;1 Í»s±®d¾¯âK˜cBŒÞÄÿžÕµíµäÒ%¥¢\ª¶Ýì:Ÿjè“N¿Ž´,J1(Ú?ÄÔ4Š^†Ÿ†Úæ(£³˜ymê (ö®–yÒÚY‚À'©5ÀY\j÷LÒØAä,gYÎÐ? —R³Öõ=¾mËÎ;„#J—”¬Ž‰¯L»³«œ¤8 ½g_Kªµ›¼wpg ¹#ߥG“meh£UºÊíAÚ÷Ç&¦–ý %D\m%v¨8óh…{ö:Ö¾ì,âµiAPU¤9+œçsV•ÍüÚE³\êm nŒnÁ>Ýk6êòå¦XKËÈü¿— Íî“bÊ&—{k¹wýÚέ&££`¥vli¯­êø1\5²Ìì6©ô¼ý+¯bTdéÜ ÂðÙÔ4ù.RÙâ,øgRzÛ•HÃ8ÜÀŒõ•(rG]ÙºØòýkÅv–ZÛÍåGyu,žMºˆ;“ýbøË_վ¶N ‹ígf#È%>§Ö–ÚSqâ«û½N-ÑX“ Q»aTûÖ¹YM[\y\&%)+f”`¹®÷3»gFú•®Ÿ§A¦DëæDƒtª2;~µÈÍÕüAmcŒHØ>§š„O3·—Ø=y8¬Ëiå·ºi£r³)Ê8ê kÙÜv±Õx\¼–µi5ÆøÒÒr#Ïß|¶¾O~Ú}à³R‚Gîd&è=kðÖ‘ô¦©}3³ÀÌ›~]Ì}MVÑüO}¡i ke:D’ÈLŒz‘ŽßãU%}†—cݼ4¶¶SËilØ©’f's{±õ5ÑŒw^}y_à n塽yWu›È ”¶\7½F)"•áu–6VSjR¶—)30h6ŽæYã3I’C¹ägÓÒ²eðýü“IoDX”n¤ñ®°àpÝ3Ó5È˨ë#V”G"‹`Øò };š™(õÒ!½Ò†‘žUYI?4ìrTý)Ú}§ÚQ¤Ž6 EÄçhçÚ·u)‚i®Ì›Ø(!àšâ®õ;˹VØ»Èå€TUÊ'§b=%|µ,U†Ñ‚:U{ë8¯aT+©ÊºñƒRÁŽÞ8ä`Î1€ Lb,¿3€=LV†›£ CËo¡Ý&²¿½Äw" ‘€Ð;`“ôè ¡©é×v³´0D Aw Ûž+‹Ö4æÞ.m¦yn#!˜ž7R„Ýí"$ì{f“·Aô£kW:eÊ¡¸hÊÈqÐ×¼é>7Ðï#‰$Ö-ŒÁY¾POô5àúݺÁ}â ÊpuÿõëVâ4@RL¶Æá >¸ô¥Í¥Êæ=ÏU×쬬¤œIö† J¬#vkÊô/íø€Üܼ°ÎÌFì’ àVıéB4vÄÊs’1œ}kÎg¾JÖšæÈ¸‚|«“ε:ŸÊ„¥sÞtmL\ܽ´“©a˜ª_&¤Ö­¢¹›í- úšók¶ë«4hbŒdùò6L‡Š‡Çþ-¹´¹¶ŠÖí d;Ì x5TÓå•ôDÐÁi¥êâÎîmÎ…à” ‚êš’çSÓ˜µ¶ž{)ÀiåHÏ׿ҼÊöúþõRI$w@Iä{×Ca5Œ–ºùÉr0<¨ù'éPè­ÁltÏm äÞM%Ã&Fćƹ# ²Ô嵑±lO™©À×£ÛxzÇUÑá{iîc“{ÈrÀúb¹Á—vSApÐùV°t@SÜÖ±ZX—®¬Ø±ð²ÞèÑ\5Ó#Ü(*Â?–1ϯ$×Gá uä™ü=©“ý¡h17>jŸˆ­ "Ú5Ò ÜF±€Œ÷®OÄö¾±½cÚã̉y.µvW¦§Wã}VmÂ×ÅĬDa“’™þ#^Q³6£ <¤™#$žXúýkÓnÒ_øbótEVâ臨ïüëÊìtäII‹»]HáML´B–¥‰LK8¹*¥ÀëØUe2ê3<’cÎYñÀªóý¢óRÇåNH¢´þ<ÅlŠHt­{X/ecºðΟ¤fI ó®O¥\¸/%°9äñÅqúf§©Y[¼¥³óµ†yõ¨eÔ®uK‚³Iˆ×¨fŽQó7ú½´!˜\碀+=59n`‘””¡=@¬kÆ/(Œ Tw­8"HíH+†+À'¥g&%¹X¾&‘²Å‡-Ð×¥Äìm6à’Cuú×”Þ°H ‘½Õ”n+Ó|2%›G‰¤ÂàdéUX½ 3]‹{磰@íY·ÓÏ;Hp‚r1Òµõ E[Å`™b ³äõªÎáFI?JÑ.¢{•­m¤¡‹ŠˆuªWzœvï"õaÀÇ5gR»tµÄ.· ÝÇZå/nb·Û`Í!à‘Ò’ò3õV[«’ª Æày¬`ŠÑ³ÿ`N{Ö¡Óîg$ªm Ï ©ÍA ÷‡ Í}Bæ[HT9%›95ÜxkÆQÁ§¤zŠJB‡s•®;Xö¬’>Õße¢ç¦gŒP£}Çí-¢;‹ÏÍpÞUšhYŽXýãùp* Xɩ޼×¼j <`ÿëW –R' ÀWY¡ø–!š0HeûÄõSÞ» JïS¸•HF»Q!T dÿŽ+2Òxm¾Ñ4­·(’k+Yñ¼MlM„'xo`ƒÒ¹í:öKˆšIdiØåmF/•¶MI«Ù¢e]–ýJärH®K[²k«¹ápy]v•l–¶1Ü· W$÷Á®oU™\õ`O>œR©-l„–—8?Kߪʅ7…` k¤½€Ã îò푦xz!u¨ÞX!99Ò·/, &AR§‘Äž™ëXÊInmìÜž‡5d’ËdO)c'¿ùõ­eÓUž9$bÿ)'Œgüjåµ²’ÊT»(êzçÛÒ­,pÀÊáÙˆ±’=i $›lŽ4Duyx õ>•`Ȭ«"ɺ@ ƒ‚úßZnB9ç%˜Œÿë¦d¢ù!ÀRAÞS²Øä¿S:HРäá@#Óðÿ »,‚dR–*ž½ºVt“(*±¾©\…ëOŒª‘0Ñä‚k9$tÓ”»èKpZ(ZF P³’4–ðN?vƒ’6óžqM“÷¡sV0v¸¿úÀt«³²ª”ÈÉa.p=ø>Õ“ÑXé‹R•ÆËÂ…¥”î wtÿ"«¼R­‹!|J[!&­,æu1’ÄpqóÒ¤*¯d8ÛØŒõôõëüêShÕÙ£6-:r îËIœž¼cµZ6ÖviBí´± uϽZhŠyd±1«ŒÕ½úÔ²B¬ Æ€`0NâÉ£šO©>ÎègÊÀ´dv‘·Ž?JÂJÒ†_”ËŽ˜ÏãïSÜ@ðîîúÞUaòËÚ:ÅCwz‹þu7Ìÿ>´¦F™0ôÅtAI5$pNtù\Q1{Û‹}¯åØÀ0m¥š]?SxþÌèLLfÎ?#Z²#¬1°c éœ`ÓomÅÔ6$‰€ Ž£½oR\êësš>켎F#ÒçxÖ4 ¬U°rHü+~Êþ2‘ù³,YÀP[æcÛó§ø›I1Eð@Hý€ì¥s¶3 Åô¸!*©äíøšäuŸbZågi<ºŒ1‹YšØáÙ¢,ÀÔ6^˜ÎÒ0p×%¼ÉŸéÙGÒ¤ÐÍõÅËI!xm±û¸ÏVk¥yÒ'qÇÍhš¶Å$WµÓ,´åÌVîó²H71üME>²`p>v|ãj.>µ=ëË,+ ¥²HxÅqšÒÏ3Z[KŒ$—=<zÎUè;;¯eÜ_^Náævf_œ¯ åM¢bÇßë×$H-â”òFæ\*ýj½¥ýÛ‰¦¹Ž0ù3…úVâéQmÌè\Œ ¹À\}?:’g¶ºµX ØÀð2{Ñ{- ²¾¢iZf¦“(»ŽIÁ>`­ ûí1­w_‘*0ÂB Oò¬¹!„3¸²¢·—PU¸ EPØf?¥Bm³F’GI¥OmlÅýŸh¼  Àûö®–'¦òÍâÍ>2cWúã®+Ž[Y˜í•i™72·Ýý¬qVôë94øÚk‹ÂŒä£–#°ü6BZ<Æiȉ`TóÆëJÖŠ6¬·aتÛ]à Œ¤f3óà¶=O¥8^Zêv³,#|g*%<}½‡­-PhÇÊÖ6˜‘Ý7ÃI¨­Êù¢ÜÆ«’¤u5Z;;%“É*nd^V2r {žŸ…^iDp4·’Ä‘(ÆÕà¥4&s“ø…Þy#¶°(W ÈêO"³Æ£ognÓß"‰ä'ÌE†úg°©o'µ7 ©^2Am“Ûó® ÅúõÖ¥ e³dÀ§å8ã“ëZZÛ™ü[«àÇueqmöìãËFò! 2ž„×ð¬¯øžÿNˆ¶™kz÷lpŽb;#ãükѧ=¦‘ªÛI¦^\K2Œª‘ã;‹o_­a£)-ÁÃ/TsøWBn$Ôe6šL Ó¯”ñ‰3¿.ÊÇÉÉǾbKe6œZ¨^+˜Ï̯Á ÓæWµÊMYž…á7¹×4¹,-f·Š{xƒAjÐì:—ãæÍz7„5y›Mxuqoi4OµPÈ Ÿ\x¿:ùÿMÕîôÛÄ»´¸h%SÁCŠõ øìkw‹§êÖM& "…aõ¤ÒµÐmsÔ^ÿO¾omÁÁÆePkÏF¤/oÔHÿg·¬Ø$ñËÕÜÁcg,bæÞÒ ÿ *²®|9g5ÏŸ,wKÆä$çÓšÍÅ0w­ëm¥KäßZ3œQ2œóßšÏðÄz=»‹»ígNk¶$¢ ”ù?^µþ µÔâ ò¨'ddcó5NûÁ:=¢ó9ER$’GÁÛräZ²UÎñ|A¢ƒ„Õl3ïp„ÿ:ÁÕu£öása} ±ª•-‰ä3UtÿÃäÄñßÊ`t ˆ+þÿÿZ›¤Ùé ¼?,Dã ëÍQ¶å;›Zg‰-/TyÊÖÒòªOùõ«·:žžÊ¬ÚŒÊâUÈ®Ïm˜ÒK(‚ÙÍWûm”ÛZ7Wò»qøàÓÐ\Úµ}¥¥ËÛáŠHÉe>h±ž=ó^zÓ]±O-²ªùÝ·úúŠè®'ŠV+Q·Y—‰mœl*PrIü:}(´[3½ÎÞÚÏDm.;Bö¡AfFPwzç×5ǼAnä *Á$00aˇ5vÛFÔ~ÌZ;wu$çiɾõ2xzh/Ó+Úk àÓ¶£Ýlufªo´5Ž'`N2}kŠÔÚåÉgÈG)æ/*ÇØô5©w$óÀöÐ|­Œo/Œ`ì½·i`’t1–2‘Œã<ÓåMÜv¸iZ|×÷eÚÊrìÃ>µèZŒ:e°†#<3‚ÕÃé:Ý­­épÊîÜ2¯ñ­ùÐÆ'î?¬Ú±\×!ñN¬.4Wòq)P¤’+;Qsqªé¶°€ÆÞ3#/`pM«é†ËOŒ[¹J†L €>Ýb\É;…ŠÞÕÀ$õ‹“ëæ.†NŸoq{©ÞH#ÍÇ< Wc§øRçK¹Ü’¨SÂ\¯‡u ¼óœEÐܳÊç¦3]ÿö•£&æ'eûÃxùjâ¬Á%rÈò­â!6¬j3»îToîÂB$ówDpB§Fü}*ÜSGq’'WŽ2;Öuýˆ¼d"FP!qÆkNƒo±…ÿ ÿŸX¿Z)áóú?ïŠ*->ÆZœÖ¡¯­äÌÓOÄìŒäûVt“Z$&HÞE¸Æ0N+"ÚÊf»IÚ2"$áÈšéu _Å¡6 Z(P(`§–Áÿ=+«Ø¨üLË™Ëc ææâ$ÎöŒà­‡š¬6ºÄâpA–2C“šçà³y¢’R²8$(y3]N•£YXÜ[̬^brN­QV°F÷:øz |Å}i(ó£S•ïã\dž Ô`Ô—Q³°ŠhúÈä|1>Ù­ëÝE´‹€mä1Ư†Œ<ÕÛ¿<6ÑÜZF%(l¹ï\üŠ÷4æ]NQÖÖîÞkyì…»œ«ÆS}+E0Cs.Ÿ}&0v¿CŠìN«{¨j,ÖjHå‚j]gJÑï\mXo\|¤ûz…{ ½ _lŠ1ã<Ò±¶<³– Íy1ÞÄñÎNrx5ègF{{xæŽë2g‹ÃÏO^=+Î5xVÏY˜[îòwŒx$U4ö¡ÖÅ{kÆŒ2‡ xš·woæZïpçµT¸Q<†hÎIoj7ÝÙ$^`]®Ï\QbÛZ2;’Hˆcãv3Šš;›­#Q2ÆÙ#œž„UiížÅ£}À÷x©JÏx¤Ì›ß¶Þ1øSZ÷èwÚ‹n­n⻊ÖçUvÀo§½zݼ°jöAˉ`™Ø~éµ|ça}%¼^^p÷¿¥zÃÿF‘ 6ívͺ O=ÇãNÖ&:Ÿid––ÑÃ;!@Früig–Öß"IÛ23M’UØ ¾XœdœYÚ­³¼’(yb8©µÍ’,ȯ—T‹mQŽ9¯¶¿û.£{lËò ›a<¦»Åòéúö¶ó ¹e;]ù`žžãú×’5˲rï‘–=MZC&ù•ζ[‘r®‘‚®2;Vn•lé3I2XÎAnRþØ0°6ñ‚@'inµ)oI ¸Àè)Y’››—»Sy äþ!x­Õd'©¬{IÔ(bî:ãšÕ¶C0IÊ/B{Ô¶3WOµÝ ]J=UOZ|èò*1’rjͤ±GmäÌvÈBž‹›Ø¢‡b1w#%G>µ…I[P2§… æ6XA=«¹ðnª.t…¶'t‘ädݳ^túki¢0ò1Ï oƵ¾Þ¼ב¸`̘QÔdfªœ´4¦®ìzŒñÆ&DRJ”Ï''½b\H–÷„;…Läg¨««(±Ù{¯Ö±¯n¢kØÜ猜ÖéjjÚïfÎÌ}«›}¢fq( ¹PRkfw‘f”( j¥ƒN#æ$áy5\¶"ì­³´3±ã¿j lÚi‚ìbÍÛny¯GÓ<%ƒÎ» °5lÛi¶ºpc´jJ›çüúRrHÜó›/jw¡‰P„ç #`š¯{áíGM`&ŒÄ*r1^ª¢êã$§”8àðj;ˆàó’9×{Œg*zš:Z`4Ç·‡<·|Õ(à"f_ºdäw¯KÕl¡ÜÂÙB³ HÎ:Ö!ð´H¤Èå¤8lžžió÷!ÃS‘(ÈÍË;Ö¥•»Aj6ùK}qOÕ4ÛÅ·yGj¼Ž-ˆf¸$NA­#6‰q±Ði·úömÌ{D‘¨ ®Çg5“«E>ÈØ¾dÙœ7}?Æ´4ûã­ÄE£`ñÁ±ýUÖ¯ãtc' úªjNîæI¢Ÿ‡EÍ”ízžÜ«x5Õ[ÞÛ] ˜˜’rDœ ¥áøÖ-$“•l±'ÜÓšUÀæŽOò®e.}λrj™r[m»— äƨÊí *Ìèx'hätÿ?­2K™PƒÈŒ/*I²ä¸*Ä”‚Ù.§9¦òn=tšF̨¤9eþ.§B?úôö%˜\“€O;rýj»Ý‡b™l3!G§?­N\¬¿»v*ÜqŒñTÒ3Rnö0.ìãA*ÈãÀ(z–¼J¤Æ ­ÕB:•ÎåUÏ­nj‰)€`m0xn‚²íšFbg%‰®˜Jñ8gYXÍ»B³)"‚ ŒVa¾.ªË,†e `œd~5r[yg G„,ƒ}? `€Z«<Öê\ÜäqU¶fѱd§WÓ䂿X²T8'Ú¹GÒÒÊðÅ".èÛ#ŠéÂÎtYaù ­‚+WKûI¢¸˜››T Hà~ð'ûâ³”b¥r­î›Út¥‘H ÄpãÒ´ à Ll£$d t>æ¹VñE•œ1­£‚¤X š‚óY–ò1?’æYAå=³êjfììŒÔÍ-WU3K%¥¬¿pížu8 u}ëõmï­¼‹xvˆòž s÷>%¶£†7&5à¨ÏÞ­Yëis16Θ^Xž+É­ZÐoaÆ b´òî]˜’p UD°yÆÈI àšÒÒúoô{£æ XíÖØ/úXÉä‚ÙɨöÒZ!(«ÝG…%[9^Õ0h8Á¤×çkMY¤ûãuäcšÏðú8ºk˜ä¨1“ަ©x›Yõ·QÌj¢5=žõª”¹o-Ëi5dÇÜjqÜ2Ç ÙzÆ*Òj72ÚGfm­œ.H’O™ˆçéüëÚúy¦–ÜÚ¢¼c,$ÐÒ_;‘c£ž):©nìˆJÞfµÊéÓ1ŽúPÀ(0ÀþÖMÆŸeƒ§ÞMo <`œf˜4¦,^K†,~bHÅtÎÕL’íÎE*uc'£¢Œø5½jÍ‘%0^Çž¹Ãþ}«fÚþ' ) ¬Ù kœÖÌÅ—Êp#0ÈÈ=8®“AѬµ»®Â$2ÆÜ†ÿ<Öë•‚ò"¹œÊH|pr8Á5ú]Ð…¥Žb XŒc>ÕØÛèVv3!•º†“’)—ò¬01?) ½I5¢žº‡sÉÕ– ¤jP1ùˆâ»;i,ì,‹Æè‘•N~fæ¸mRcmy"'Í37 œÔ0C2ƒ$îÄœ ñZËR±¿{­Ëpþe»2¡PtÏÖ’=Beµ ‰®‰ùQ{¥gœ4«m ¦|(UlŒþÛiM®—0¦ed‡úT7b¢»™:f{sto5‰ .ÜyHp1Åt¥ôë” P‹€äçØzûÖN§¯Gnÿf¶ $Žq“ÈÍê:äV1¤“FeºeÄQ¢¤dóùúTYÜÓ™[Mͽ_ÄöVÎc… M&7ápǧ_Jnž.uE pN^cÊÇ¿áUôMw:ꚢŒ‡p·v’Ímd©dž#Çà¾khˆq¾¬¥i£ZYÄYˆždb0d?íOjµ Í{˜ímă Hà ßAD©3ò²0YIá>•\jm=Ó[X¦çÀÜç•“lm$‘rKÛm2ÝaTfgà'ñ\׉5‹}:Ý®ïê¯`TuÔ‡æoAw-Ú¼úœî–$ù‚3ók™ÕnµI$Ýa$Áà‘[ºŽ¢n¬ÒÊÒÕÌ€&Fßjîþ|8[xcÕõ¸ HpÑBFBû·øR›.ÆG„¾Ï«Øhk3ÉoÃ(xÃ×'¥M©øCYð¬âÓJžyôû¡ ]ª<Ä”¡U;ºŒ§ ö¯f$,x`‚IÀ™-ã\Ì ´@áOÏ!á@¬¹›fŽ)#Í´DúÙûEÒÄp¨Ü!=sUuÉ×[´H% a•wD¬˜Þ»V&wkh’3¬°_Ú«Ï£HÑIw2Fh<?ÏjD•’#•³Çµ?´3E º;d’ÛFEMžöV¯±¹û¸r>µëº`dÓoDÆncRÊàHô®ugiÞE˜)p9M½k%>€Õ.KI4ç‹P¶m’+îByŠôYŸEÕl­ä»ŽÕÐ4~gUS.4 MNFGììÛ˜mÙ¥¿‘q©Éäì;Õ;ß[Ea¶°¼Ë+¢'GÍŠð»ë›½_PsûÉv–fÉ>潫@Ó·höÚ¨xT2!ä:JIé`Lé%uKRd^qÓ¨ö¯?‚(.5]oP¿}ÑÛ#MÛW!yã¹¥ñWŒ[MÔbŽ)ÀŒò…ÉÏ÷½ý…ei0jÞ‘xm &K™ƒ/ ¤÷'úVrŒ·2fΔÿcð¨©)RÁ‡VcžµÈiy{â à¶–HÐÈZgÓ?Ì× h>—NµŽ+ÙþÐNŠ§Ú¶eðöš÷‹såle"?”1÷õ£•¦Ø5r="ú–cvûlÄa[<ðjŸˆ5H¬c2Iuå1B@Íax«Åæ;ñ¢iþøq$€acÞõÂëî±ÚMæ^)›‘´¾æ5´U‘—DjÂeeÿ?ïùÑ^e…¢´æ'“Ì÷Û Úèæ;½^åeuP#„pƒè;Ÿz©âOÂ…Rw2 q™€õ"©ë~+81:쮀ùSéXV–-æ›Ë˜KÈIb_+Eõ‘.]ÅÖ˜ßDÎÐy–.€Œœs§ZŠó[Š}–;L*«ö\VF­­Éq1X÷,`men ̶‰î¯D_7$£Þ›JÖ™×]£Þ­!Þn V 8à tü«;L¸¹@ÂdÅ aO$ÿ³]«éqÛhð<©‘®: æ/æU½u¶ÜîNT”Îû"³zì=Ž¢ Ë;8wljŒyCïÆ¹ÍXÏ;µÈí²IÛËGøUEÔ®˜»[¼ A“åÀ®ž;K]9ƒ]º6,`Ö¶f8¶žQ8†Ñˆà(çáZ¾(Ьdž™‹í¡£Û÷‹“ÛÔVåæ«¥[;&Ÿm,&Ñšåç7ú”‘ÜI²’~M£ ¿J.–„õ8m¥´”‰aÎ6°Á¥–Fó¢L®rW®?úÕé_ðj^!‘MÝÈTPW÷Ê)ü9?h éÚl¾užP0 Ž RËDPÞi7?:“€}{U+;‰¬fòÎA+»Ô|;´«1UD9%®MfÛøfkË¡åÀ\r@<)Å NÚö„*ÝÆ’8%˜äÒi÷—q/î‹ üÃé]ÓølCa'žéj„¬MÉjâö6ôU<Žõ0Hå99U SORe FRöWQž§œã’0+˜¶0±º€¨½êWÔíÛlk#LùýÐ:w?áQÍ< ò"O0õOæqIFL/ po£XÑ…ùÉà¨â§fmŠÛ”Œ+ž’ÚæëqI&3è¸?Nß­Wjq†ŽKiˆc€IÜ÷çŠ|¶ɽMéõx£V‰$‚IòÓ#4Z_Gv!…gp[@ƒ ÿê©!ÒZãO’"å3»è~•n+#De¾ò  sÇ¥g8ôFÔê·¹b8b‹‚ûJz`v©Ök5 #\"•Èê “þEE •¦âdŠiKI#=êq”¤b@ÀùÆ üëLêUPû<®ËÄqU缊K…íŽO¹ëÓ½^ŠÁï–.p€}xÍO-”2²3ª@ÜÉÅ B"s©"%»…bÇÛŒà(öç¥YK˜ä“"ôH8ÆHïnj9Ê(Aµ\ ã$gb(Ý€%Ð ;H#öŸZQo œ†¼°O#HÓ.•ÜW G–cž;¢ˆÀòóÉ=+ H–ß`Uv“ËÜî wþž•GV€–3ª}àÚÙþuÙAëfÎjÚì1n|€QÁ¬ëøngKk1'œjymUJæ4Æ01À*;…xà$¦pØÚ9ϧù³²0°Ëe»·‘\· æ­Êò;oIKiWxùsŒÕxœ2„27qŒô­+9Kf.@ €KzTÞîÌ[lr2øzÇE¸Xù°ž7' ƒÞ´ 6pBÑ´0˜[— £i5sZOfmáŒÖ¿8 ¼9'ük’¾¿† G–g Š1‚zÒå¶æmÛcœñžce«¡Ó™|™Ó~Àr¿Â³´‰gyQŽG,ÀóŠÊ»½k™žCÈf$îûUÍ0ÎÄÅ d!Hê'°õ;[M9UwÈÌÒK“°qÚ¶l¼;-ÃlC’p=Í3ÃúEíúG2-º}ù˜à±ôÍvàG¥@b¶ˆ¼‡’@É'Þ¹97vô,ÌÔV×F°E"@¤;ŸZæѳ˜°Ï=…oëp\^@¥á;ƒ¶0+ûËwràNÏ7 š°œ¶Z B”n.¢! N€«88ku¢ !G™˜r~ƒ½Ac¤L—[4PW,œÀV‘´ .®å3L ÉÐoJ$£ïì5¾†®îLkim$@ô’n ~˜ª¨&¸*T|ùn+VT—Tºi Igf8,[¦§—E²ÒíZâýód„‚iAïmâU»™W7â`…î]W³€?—FŸPÓõ8®¼ÔBÙ0¹PpzúÒÏ©ÚÅoh¬O Å\±Óµ=^5ØÚ[î2Çè;}M$ësû‹ïJÇfž%‚(ê'ËÀÎà2NÝEbkZí­àßlìT‚@˜ï×¥ekPéšD ’\ÞóÅŠŠÀ´º—P2D$De¸ ë]±’ÄD®ÐÄÑÍíÆ¡%ÆÕ'+‘ÀéN‚ ¡2˜ÐȨÃ+· ÿõ©¾aƒu±•$-Æõ9Søô­ 9î<,Ü¢rÁÂÕªÉ>S>^¬M>)´I¯¦x^ ªÃǯ©µ¯Ìñ-µŒx'ï;YwºW(jW I;cÈÅ:ÓÃúk+I¡!‘IaŠl®ÑV#µrÏ7œàÚ7N+IÑ¡½Ô ¸¹·Üm`TdrÀŸ›þUJ ”ªT©Ü_v˜Ä µY'ÿdÜàËéU s$W2EÏx­t™M¥´fk’2Jò#úûÓ|=qi«¬]Ü—¸‘[vÿùgƒÛÒ°üGeecaÚ4eÚ@>wÜ@Áõ®*ãQ»"ß÷Ø ²Š±m»®«âí!¶r±òâgfÏ|v®ºÞ{ è1É;r.Ã’î{Zñ»„œ«É#•sé“S¥Þ©ª$QÝÝ;ÅÄ^aÀ«äºHžkj7ÅzìúåûM6àNv®xUì)4 òþå-­ 2M.:ê{VÆ…á µ ñq¨£ˆAP|¥Çã^¹f–&š°Âhò‚(bÝ)>£®}yãÖ”¦£°ã!žðU‡â%¿eÄ“¢ûWJ'6Ð3É8À5A5ŽÕ%–Q˜ò@öJÏ{˜'¾ónî¤e)\+•Í7«:Z"ëÜÝkHÞ?"HgqÉ©sc¦Û- bN6í,M1§šuÝ, Ç8.GôªÍ=¥¼L–Á ‚È[,GÖ¦¥HÅn(Åïbœ·MlÄGòÉ N~½:žëX·ƒM’Y•C·iç&³n®á7jcpç$¨Ù]üË…Œ®%°:ä…Y'ÜU*_E±qy;ÏæYå8Ø;sY³ÝKê÷*ÆÒ;«RÿQÐ’‹m>/´]H¸$3CÁûÙþ\×+ws,3œÅ$­·?7ç]´"ê+µcžNÅ«í}гD$n “Ú»ÍLµÕ¼#‘QžPX¸ç ^]$(I,0pp0që]LJ¢Ô4Ý3Ë3(h¤%—9kwN Ydï©Éêºàšâ6Êž6,ŒFÇB>µ„ãMd}@%ʹY#a’yí^“§m«±Šk|Ïþ.3ÿÖª²xjáJ\y)p*ñ®OÖ¹ý՞ƚ>¿aÕ–¡o•‘¶Ã9=2þ5©¦$Ц#Û’7m+þ}ªâéz¼2Û%Ù*À…-É'Ö²“NÕt2–ŒD¸l£§9ÿõTÆ— ™/‹¦0ØÀ@ Œƒëšá%ilî·Ä—/ uºµ‘ÕšeF*CoqœÖÔþGÒÊ%¬“Ç;W<HÇ8«r‹÷^Ç?¦ø§Tµ±ŽÖÎEò²q¹7žÀV;i£_4¦ÝÈf-’6ƒŸ­t> ÑÆîyï-î!¾Œ‘ ;I/»p8€w>µÔM¦³îûIHXœˆ—–üiN£‹Ð»uèqv=þà! c’¬r¿\W]m¢4k¢ð‹•}pTzg$~u£±°ˆ,îà ò€¹$Ó y$™RÙFßÅ ÛÖ3œßÂËM›6 ~Èc¾u•ÆAp!U’‡UŠâÏý6MŸ•ýÖ­£Bn&—8‰‡}©%­Ø·Œ´ŽW#ÊŽ8§³íq»#¯û*…äÚ0 =*”º¤·ñ_’‹À ç+\}ÌÓÈÙ}*îPH;¤B Ô‘G¯Û$‹uÁ;Kð«e'×Bt¹¹âð±i1\F£1HcÔ\ÙH¯bX÷’d烊]GSÔ– BdhØn*0ZO¶Æ3sö óIÄÇÉ*ÔnLõÔÊ¿q¤Úª[Îy$V}•ºk«¡>eðG©­Ë³§ÜZäŠI 9\!š¯s–éa.0 .Â1ü³VÓ1±‹s~ú…цÚ4E‚@ÇÛ›Ö[al@bŽ*õÍ•µ»7Ø|ß$®KM ÓŒð*¾‘§Ö£–í‹@²Œä}àqý*^ž…#·ðG…£³¶]RøfWŽ2¿©þ•·¬ê žÚ8¤$€rk¡™T(<ƒÜŠ£«êÖ4 5䩎@?yÒ¤Õ­;Nð<7¿oÕ]¥qÌpg!~µ·g¬H/c³Ó"ŠhÃåpc'Žù®g_ñŒRé $RDŠvFÌÄúÿ:¡àiz–­öVDÞVB{Jì Åöd6ô+…XÛ,ùâ¸Ñç7úeØ$Áq½×'y·+NÍÜ‹®ÅE³–öedƒ;O$rwðÙp·e¸ Äe˜úVÜV¶“EŸp¡˜Ë.<¿s^á‹G‹JżƆG,ýn%ª©8¨û»„lОÚÚe0Ì€¨à©è}«&å´Ý]ÒÝT„É 72¯ãÒ®\Þ”ŽQ -$Ë!L ÜG½W—G2j^ÜȰ#¦&Š^«i¹£×c–¿ñÓÛ©XírÌ æ•"Ô|Mc‹xÀÝ$Ÿ*¥mÏoá­:GœXy¬rÁÌÓ5©ø¢îâ&†Â)¡D¢¥± ÛrÞáKME¹ÔoE̘ &2?/ëW_Uá1éöÈâ2Aò×W#½Í帞òåÜd[€G§©ú ét-;Ry$Xm V̤ mð¦à£¸“rÑ –¨LÒÍzð*á™cp⦶óæYE¥´r£VGà zw­›}ÓHf»»¾c(ÏÊ€*µÏ‰là‘mìí›y9ÈMÇ?AYÉ]é±KMÌÉtˆce»ÕŸpSž©&±mn¦;ktÜxV½î“©ëËÌæÚ s‡ÏáMŸÂPùdG13mÿXxÔØzžq}©Ü]K%´¯‰¢=c?Jçf‘-îL›â”‚}Öö¯§<Úœðîu’ݰd#95GìW3L Ô#ûDò]È¡ÎФç8&…fiX3 ¢`žsÉç5p ·VUaœà1šËÑ -w!$°îÇ5¼–Á¦ØÀõ ‘YÉ£h"”6îýó ªrO\ÖÂ’À ;b”Ƕ& À :Ô™ÝhIœXÏS¦ !L®!VL³‘¶O4Ý5eI®\•Q8Æ}~´ä´2L.d¹š%bNÝÓÿÕŠ[ÙšÊÑ`„´židóFH޽€Î*Ñ“ÐÅÔoZé\²œ…uägùâ±Ä¦kIVBÙP@È­áqöekrÈdtqü«ì„“ÍE yƒïµq1’¶£§òž…·ùyí\H½6ZщÌ` n3]¥êCç)`|¶9$râ¸}NÖ)µèar…I$î8¥Zëqok2ø‚C!ŠÙ|Æ8šmÅýó¸IdX8 AúUx¬…½ÁûM¼‚%ÎÉ£TÔ·Ïl‹¸¸rpxäÓ"øˆ”˜Ù`ºš@×Ú«‹wQ´Æ6€}ÅBbÒ!ͼ“O7LŽ@üj´·wDcWÙd•ÆsRZè—³Ä$Ž‚>q(}¡¿YJ¢NÑ<¤In¶<§$”ž¢ºÝ+J›ÊÝ”˜`GéT4í¢Œ\Îþd‘²†ˆ„úõ®ÎÜÚ‹lÚ£G€ çÝÍJ”“ÜÒúȆ# –‹9*å°>ŸÔÔ3…p ˆÓÿõ…_ž§…cvyFâ>•–tï*ðyRrI!È#ß?Z=nmv–ˆ‡H»hexbËÆŒ¦Mj(fFPŒq´`œžýúÖQòò`cÛ.J¨ ´ ÷&®½‹ÛªÉ÷ÂüÅOAŒ¿Z©$È„¤¶DÌïh!lèXä"=èÈI™r[×üh:l¨Ç|À“†L’SO´Ðíl猺ï9\·8Ç^µ-™¿=ÐÄEŽ!j¨[ :f–T}Û„ŠvF_ƒœ{Õ‰tè^éÄ #!¾özŽ=ªS¦ZÏ*Æ7ÝË —÷“*¤ðFÅŒ± RÁ²2GùäҋƇ—o,ÌC»FÞ~µ|ÚXÛäAoc“¼0#ñÒ¤;b–@ŠÊ¥ƒЀGù8¦´ÜoQ8‰RxÚ2ê#€cü‡ó§Ü¤“Áöc¸ùˆ!2Wúu"’Ò«Œx N@ÿáNI¶‡g|n~ØÆáÇ5j}EÉ¥ŽUE`q*±Þ©çG)÷lä¶§ê2­¶¦Á°Þn p}ÿ­S7nù ì\–%º êœÓ³9]Ú&òÐãÍB¤ ÛŸëQý­í&`ÝoÝ€ä}i“,ª‚\Gr:T‘º02à”ŽMgÌ÷)²×Y‰S¼g#þ•á>-y×X’¸„c@09ÿõW¯ÜÙ}’nŸÂ Á9©þµÀx¯H’þ(Ͳn’68+fù‘Œ•ŽÃO}Bþ+HØ!9cØW°xSÂvz1,’²ÉÐý+ƒÑ4?±ÞGwsp‘„NŸ‰þ•ÐÉã[íCP·°±`CÆ™ ôõ5²Ôžmt=}^ÂÄD€9û±Æ¹cô¥E&µ0´¬¦$ŸÞ̶ҥHD¨›$lƒ#üÎjÌze”,&¹Ýs7ÉȇAYÅJ^H«÷2š÷U×\ 5ò­ùýá\W-ü?oo¶[Éšy¿¼y¥½Öc·Q$T 2qíTD÷wlÆCä@:s#éCqKQ_±r}^ÖÇýÑIH=ìU;k)µ6ûN¢ZL p S—ì¶0ù™ERy$äškê3ÜDRÑ<€T1Ç_ ¬dÛZlTn[¸Öm4¨Å”|±ªóŽÕ…4:ˆ.L€4P…Èf8ö¡•Ÿ1ÉžàÍ$œš¹6£oenÅœèMbšOB„Ó4+4 eQ, òòsTµÏCnÍ´Ä…È9Áã¥$–®¶£{Kbrþñü*üz6“¡ØKw$qKdù˜ÿABßÞc8û=#T×.Œ«$rcsHp÷­û½#EÐ"ŒkmæH¿*/ÝïÛÓëZ°ø·M¸¶Ù÷0Á+/˰U;£c©L³_j¶Ò§O( Æ´“[4Úh`-Ý–­lÖë%ª@FI¾¸íT›Ãö¶äI ùàdó0:é¯4Ï ´#‚ØH3·d¸cù熀½¸r+ESvŒ¬…{‹m¦X]nóÍ ô+ær*[½lâX–ÜÜÜËÄ@NF3Ÿ¥F<(ÊKÊæ!Œ†’kRßCžZj·1¸$¾A®ª0Ö÷¸4ŠøWS6±#`’N0kïHÔàÔ…³ÛˆÉçh @ïšî@ñpíKûgÏñ4X5–ÖÚ‚Ã(žñe‘ä{€Ýñõ®èßäe¡ŽövvH¢b²Ì@8QòΪK§$:Ć)â’3€Ž¼“3ǵKw¦^\¬à탄NXÔÚ~Œút1Çz®’3r±áj»+“«V)ϦÝ_ȶz|fyË|í· õÏA]®‘áK]Þ)nSí\mî©þµkLÛ)M?O0ÀÍ–žC¹Ø}?úõ¸­<ò.÷Ž$Qòªœ°>æ¢u5ÐÒ0î/Ù%3 ¡·qÏnƒüio--d·2ƒ©®Z“¼M"Ô]Ënœ.‘êWî©}øüê«^2[$ò_G#‚p¥6’=ë}fÉTùÏ1ãx\“þLêÍ+6ÓLG¶®YJOD¯êi,D—À¬téªÎÀˆ’"3’Ų1K-Éš=²\l`®p3\ÌLã©m×lJ ÊÓñ¨d°¼Á‘Êç(ó±\¥C£wyN¤æ­&ijºÔ¶qÇ ŒhìÇ ÄgŽë©ë ©d•CíX¡^ }$ýk¤ðï†oµ…2\–¸À#€k²x,<5j‘ØZÇ-Ë n ©õü…uÑ¡kÿgcžÐ4DÑíÓPÔáH[÷vÃæ ûûÕ_56’âE„¼kˆÑ˜ªÇR:Ñ®ø‚XXƒ*Ïv~â¹`ZYyó5Þ§9‘ÎNÂØ×g³”Ûûˆr[!l­¯æüAˆ””#RÞùºŸ¯NÕzËÄ y4@¹†HŸk•Á‘†z{{žµÎj·éx@WB€ƒA!õ>ÞÕoÃ"[b)…y`9ãÅ7¹fæîk[ø®Ãä2ä‚p Wò­KxµyLÑ(+°g=GÓüiÓh íÄòm”í+- )ÁïßÞ‘Ä–7ÑAQpT”€+O[X±kQÒaÓ¬a½³lO¡ˆc‡ àTgk»ë¤i.Fv·ñoþ½]{Iždº¿› }ìœ(©¦´¸¾”ígµ8ððö‡¹¬×BõfU½Ävì-¡P}óÕlZ\Ü´3G}–Aw<±Ç§¥T€ÙØß4–Æy›!€Ë±¥6·òÉxÿfS·«gÒ•’@´ÔrÝÛB²ÈŽcg8.ÿ4’¬¯u$ØdPÙä9þµYŸN‹OŒÝ@ãÎÛœ»rÏ¥U]RyDh°€Ì@Y *•·¦µ–—˜$¹‘F>bÒŠÒ‡X°¶¼1é°½ÜÄ`²ýÑøž?*Å:sM‡»¹2ü á*mú}„ª ”\ 6:T¹¤ö¹i´n´WÚ„€Ý϶.†(ÆçÖ§‹M°³f˜$Q±\4Œpk‘¹–êæq%—ç%ÉÀú⛲y¤cwr.ä,‡òïOšëÞ)>çI.³ZtA#|€û·Jb­õÜ?鎉ŒlpqõëXë|R!ˆ’5Ÿ”XRêZÄ·â­èZcêK$·2åòÐÄÀ4±Yù™œD9rk Ò<'utÉ w‚:I Û¸{õ/R¬bˆ®™„åœ8ezSM³O ’Uw<’s’kÒ ð$7,hÌËže'­t:?€´Ë<ЉXäRÒ;–•ÎD𯫪¹I-­Èy ú ô]áö›¢\Gs“=ʽ( éXÛUFÍ€)R­»8 ƒÖ¥Í²ÔR-ìÝOÊŠ<±ïùÑSr´<¯ÃúÚݛ۩ÕQ!•£=+—ÖîÞ¥Ä*Â;µ Äy©¼×ªÁ °‘ÚBäòóŸÂµ5ß êϼ¶ö¬÷0m±õ5Ôä›ÔæQv+ 2!¶æà´‡x"%=¹í]ÿ…®¥Šy"n!*(èjÈÒ<=wxRâ[_²Ç€\Hy'ÓsX»‡LX¡±*­Ù‡ šnÒ÷P+­YÙGP3Ȉ»ncŽõVæKe” #ß!çwX÷·²Üù͈ÙA*ÿëÖµµµµä0Ü´Žã;•G>õÏÊÒ»6R¾ˆÍÔkØÞKl°ùJàTí¼!E2¤`ò@a]‚!çb„S×~ F “ßÐÔóö³Os-KÒLÖÒÏ!8—qÏÓµI<šþèa„Û)9nkVXÀËJÌ@ìk>îýá‹Ð`•'/Æ:ÑvÁ¤ˆ`ðü…®åiXœ€iPišZmo xî95˜&Ôï)}ÊÀnH‡#­_ƒF/ ó#1»rrrhwêÉZìˆe×á–7òÕœ©œ`f³üû›ˆe™¥XPdm±­Xt {`¢2à Iî$Õ¨ô{Då£ó«œÔÝôV÷8í2ÂÅ$q o<Ïó?6O½I®èò]Ø‘†±çˆ$¤@Æp{SkRÓL‘Y¤› ˜â¯Ì‘ZF®ö8ùJ¡l°/À,¬e~Xàr­;·;OxšÛN·“N½;!‘‹G*Œ…ojÔŸÄví3-º<°©êÿ.~•ÃXÀ|à"ð sÍ^7heÛ¹¤íÀ&šWa+n™'ÚšYÖ3sŒŠÛ‚Æ)$I$@FHÉ¡ hop­ssn"Œ±IÏÑK-ª;7¨à Ñé $=§!Žܨãp^R¹Ž[ÛiCF¤ )lŒÓáÔ¡à©$péVXbB@@ 1XJ-kcX´÷9?È©¨œ¢FAò árO¼Wmå;†@Ø$µyæ”ï‰$B¬˜­Óœ×¦E4ªá£·Ê–óÞû­õ1¼†òä,ÿ:‘“ÔT¦÷J¢gÁP 84ùVW’P訤Ž£Ób2²@C;RÊöHðêM³ê\œöæºûh¶Å䓞¦¸âLWë"JI#“ùWKc<¥˜ ät¥$i te‹‰Œ¬XóÔÔonfÌ]ÀŒ7r:T‘éåÚIŒ¬àŒuÇ<ÕøâVµ<äÈÎqYÙ#{¶Ä€<Âä V`ç'—¬]3Äc$0 0 ãúÖÛË•v.ј\†d?þ£XÄט|Ï 8Æ3ÿ릌år„Dˆ#TœCþ}ª;ˆ]Yx8l–'ðý*èA]òoãëüé>u#pËÿ?Uõ!­ Y‘¥+!ÀO”ƒŒ âuWk _˜:’Ìz“Íz5ü àœqƒ\vº`¼ÕâØ¼ù@1<ÿ*»sŸ(ÔÖn¦³mŒ¡9<“Ò¨=“Ï1òÑT[“…­AY€‹8ù—žÕÓéš#Hªdl2«Ž@ÿ&—&º“k”l4x „Ivžk¹PŒ/~>¹­¹,¥šÙXDR8Áb£$'§·åW†•+@‚)än„÷…jAm%¸PÑ„ œœçÓÖ²Ûc¢1H±±—È噜±äçëV£Ek™[Í~ 0è}p+eâf·hÒ5\†Àíøõê”vÚ„–Æ-± ÀdžµšM=Í4±žÞL¤îu q¨皻½Ò²È›%‘€‚ùçšÔ¶´>NË3rüOJ¡vˆùYpp–Àÿ‡ZoQ­oP†q|PÆA$àöÍ_ófc6B1Ç·õÈÍ6õ W(AóÁÐä“Í^¶JÆò(FAÜ ã¯z¶Õ‘ ÷vs…yár’•'aànüÕEÔždX¥¹òæV£s“éô3[¨‹2ÈŽ‹Ô€SÒ².íDóE%ª„ž-À ŒÏ·çRä™\­;Ž€±•Ávffë‚AQœz}qEÄÒFñŒB®íœžMEmtnÃ$iµÀ>bž5eÑ]q|«ÇÒ¡ï©wÐ[‹‰šd)JFAS–-ÁýjÑ %›ŒãŠß—“ÔÏFa¬ÌÎ ©áê:W=¨FÁÛÊBc-ÁÆ+¢»Oß±cŒ’p:T®å CÁ¨éŠú™òÝØò}|j°ÎöòÊQÝF7)éþMoø"ÈØ;M(B@µ|Ekj±[Ìϸ”0vŸ—°ü9¬-2æìi ™fËD{÷úTó6E­¡ë®ë¨Pwî95—sj.T/˜ëŸîôÏC«êq\,7—$e 8P}¾¿RÕuËÙËIcs1·Œ#º‡#‘ê=i)-êt‘hV–ÀaÙÛ$å¹4“ÚBÄ—‚à€2ËÚ]¼wêºœí ”n†ubQý1ZWP.£c²Hñ`zš–â·Beëm*Ê9ü;ç‚í“øVŒ¶¶RL6ž‹ÐWºJ³-‰šV±oprCü«fÖÙ®÷ØênÐ\±Ì3çqŽ”I'¸Ó:û›H¤ƒ Ï8`QZxzÖ2— Ï+Œ_“YšuÖ¥cp¶Ö³M¸f;›uܵéõ­É4u»T•e–ÙÔä˜äÁaïJ6NÖ¬.4ýMˆ6×m!$Sœ}k›ÔïõËkãkw¦ZËŠv ›!…u×7ðéÖÞuÜË `rÎk’Öø¢xæ´†f1ŒE:¾ÐΦ¥8öÔ‘qÈÉ$žX®–Ù&ªïÐôw6 j Jàgžâ´nt-nÔ ÷ë<@ÿ« ‡üêżÖ?³Mj±ÄÌ2.T¸'Üýjc†©=^ÞM‘Ì–˜ßØu⬖óŸ¼+VÓÂÚ¼6¿hÓå”:䘙óÅ_OÌŽ$Ò¢Xâþd°CžØ9z/ÝéRÖ,dˆpxÆTÖê‹‚µïùŽ/™œýïü$vö}¦ÖQ‚Yœ|ÀcùU›Kɯ&·¶‡P<çdXQõô®¾ [M¼”<—*@ *…4ç½°‚g*‘FÁ@dŽzV‘æ["ÚVµÊK¤MoÉçóÈõljD d†aeÜyo3iÇ·Z•®ÒáH‡ ÷›¥" ¹. œÔ{ïâ7^Î B¤—W2‘,‹»ypN*[xD2,ÆÚBíÆæŽ*ÔEZVß"á>ðÎ@¨/µë ]£‘de yúSo¢2ëvX’EÚÄEqd/qYwš› iM¤. g,ìp:ýkRÖu{ÒÍ–…†Ë›”(ús&hžb‰{y}p[iERQ…J‚¾¢FÕ‘º5«é&2Ä‹æ`ò`€}ª uw¾íæ¹ ‚À¨Ò´£·”ÆÄ«W;Ž~ƒÎ§Ž dso"Iw;}ÛxFö:º?ÍÁ·äJ¸ÁkM¶Ê&W#*¹ÿ ¸mmàÁ¿w‚Iëøš¾šEéE7®Ú|LËht¤~‚¶´‹7K`–šMјŽexòäýiÆR¹º3˜ûeÕ¼elt—‰š"XŸ÷@þf£I£»½²‚ô!ó.d\‘õ®þMfvc»O‘$ni1\æ¿êÄóíICd0 zõ®ªQŒzO}ÜEŽÕcE]ª ` óŸXjvÄIo<ăÛÚ·ôÏJ¶É íÒ ÆðØÈíøÔZŸŒlí&{yQ`dä–bÜVzÓz–ÜdŽ-),Œs^0/+aI=隊%Û›ke¯$Ž?:Û½½]Jx¢KT,9ÜÄçÚ¦M"Èå®&’âBrrp€Ñ,E·#áµ}:Ói[‡Ý€êoŸœàŽ1W´-UìÔ H[ƒÉ@¹ ?Únµ7‰t覒1%üacj*ójǶÔRÎ.“Ž:±¥Ìä· \鵿Ç$ʦ3:d…¸cõëZžÒ„6Ϩ\¸k¹”†$ñöÒ¹­(.o²ì\w€¾‚µçÖVóU62A8·ŒíŽ×h“Ý¥cUÊ^éQ]M$1Ìw)ÔnòJ¬k˜ãÊœ–Wº¤â+›–‚l2À2ÇÛ5VmTÛºÅq˜ ^ÔÓ‚jÒƒxæÚÝùÙ GÖ°wйE»ÛëMµ¦“ÁçÄúÕ{EÔî¤y&EÛþZL2GÑÆw¦é·+dR@ÌÇëÏëEÝö¡:޶B>ô‡, Žyt_yVêNtdBešS9Èù¤9ÀþB¡ŸQ´‰ü„ýëž6¯Ìj¬Vâád»™ ç3¶ÕÏÓüjAý“k½@óq?»\çòâ¥Nï¸íqÚúðªÆ‹m8œµXJ†Þ_2bKŽLŽrGãQ‰ïnýš%‚03¹ùb>•[ìE¤Ýxí&v³`Ãüjù»°vD—7¦W0Z;JäïP¢\ººIåÃË–®’ÒúÙDqäíã¨êw6®¹tX\󼑓øUó+{¢ô2RÙ·fps¾C“ùT3«JH’9<Tïoï Å”³–*)ÉcâY¤°b#8¸ ý=ªá =Ù×s3PŠûp…ݺ•N§ò«6z}ýÙX%»*NBƒÈR\J ÿ4iɃåÆsÅOo}«¤¢hìñ‚BäWBm1E­Œëø%Òçe–íŠn YAäžjΕ|壱½b$£ñªºÍÃ_¯—wo%´ŠÛ²O¿OçRøuítùä2áÆƒ‚?ð­Q2w!½ qw!¼•’ur‚Gàü*Ht?µ[ cvnbröàWO>g©`‚MÊGS¯m$Š&0RÝAö¦MŒ{$M8¡‰Ÿp,@# iž³y\ÎÈ î"O”žœí]…¥ÆÕbrÒÉ?Zê.b·Š%’âA° ¶Ðõ©“*1êdi~Ò,I0Ìp?<×Yœ›TÉ ’ yÿ¯XB[iá lÀnr3Méöä¤É!eùK"n }«=ZÐÕXê—ʉ ,Š Ä0+¼]d÷d±Y.gbFBåA¬9µ·Õ®ÌE*ù˜!}ÍuV6–¶1·ˆÇ2mäšvKV ¶4iBà¬ÚÓ»ƒ‘m…Z¾×1À Xã\p+^ñ :J‘µÅÁ9Ø8Ú=MrÅ×—·'ežH`1» Z°Ûc¿ÿ„†ßÖ_ûäÑ\oöž¯ÿ>£þú¢–¢æe¿iZ=™šé˜=Óù­\Èò®àJ l€:×”_ëúÕ½¬‰3®:‡„äzæ5?k@»õ)60¶ÓúVÒ…ÌãS¢G¾¼Šñí8XÇЊáüMk 7ÑG#•…”ùd}Üûû×àjãÄpé²]É-µÀ?$»ñæ»ʧRÓm$a‚ Ž9-Ò?rHr|ÈËŠxÊ,eÈ‘PºZìü#w›[ˆÙœ”“åI/øW-¢ø6îîF»ÔåH’cD0÷4Ýn k;×·´¸vb£/»CZU’©î¢ œ5g¥Ç{ò˜Öæqü Ù"¬™‚ À@w5ÄxMFµ7—l^tª¨è£ÿ¯]À œ„É=ÍrN*.ÇTjå{ƒtÇô=I8Àª‹¤;–{›‚äœà +_Í.€*<±ûÎ=*Scib¶‚ر‰v’9"£–îÖ-ÆI¶~èlš}åÔÄÂY”) œVj^Ù«*F>cœÓ“M+êKvý£+ϲ‰Øð,¿m•p$1Î=©U\3I³Ýälf¤K–… ¸1†ÝÀQ’(©XiS»q"à½N*Ytki•73„AÁ©žýulÏÛyýzˆ›ÙAÊà”P=5¶eˆ•äH¬/øšÚÏO’8âw $Œ>•¦ºTïŸ1ÐsœŽHWŸAÑ¡æ»XÜK4í¸ŸÏúTêí¨ÌöM3Û# )úÂNBšæžÎB ®ÀÎÓÔ×âxƒ$–ÖªBÒî<µÄH’ùä]³¨#jž õ«u©Î†iÖŸh›•œU‹ëc›BášUÛ§œ©ýé^ àïLK|æG,r@ÏAL®ã`F”„PÌ çhé^‰à £°Ô/`1ÄAùúý+ÃZ·÷ɘⵌƒ3òIŸS]Æ·¬*­,­Ø‘„‰#O”?ÄUÀmØ»©Þ1”YBª¬N*“ØYZ¡3H ÔžI¨´­(¤­{zeyåby8 í[°é1<¦ætb@z ®d´W)[D‰ò…ŒàŽ@ªlí4؇aRq޵·qÎáv©äæ²nç†ÚbÈ“9Ú9 {Ò—¼¬3ïLëQÌøLA9ýk¸Ò¯£6e‚àpäf¸ÛÙå¹d!ɶt—"!æH ñžµŠVcnåÆÍÍמŒö¥ŠÕR$ŒIÎO`*y\D« ÚçÖ¡ˆKx²K¿@Sê1N ”P ŽSZVòO+Ij«Ó9È â«K4'åÁ$rNå[z\,ȘÆH Ž˜íDÞ…E]–0©Æ>U ŸÇŠŠ9cF€ÄnùŽ=i·l¢%¥Æö¦+æHÖåv©` ‚IúÖN‹š·Ã$W ®63œò~µM§¶²Å ©&LäŒ ÿJÉžhãµbAA¸Áïœ}V²GºE%!FÜñùš}“Ô}ÅìϪØ›‰ÁêÀUèåwH‹©IÇ\“õª‘YM;….Fa@ùPŽßŽ+J9--"‹Î>d  Ñ ÀÏù÷¤˜šÐ©kS)FP©’3‘Þ¸£§Ë.¢Œ_‡'< ôMZêÞóO·®Ýࣃþr?JåfUþÐ@Ü*°{We8Ú›lç“÷¬3O³H]*d9]ÄdWs¥Z…Ó݇F =zW*ñíà. ‘ÐWSd¢XLd+†·$OÖ°¬ûRZ—^Ú6q#˜˜ žIðA95[؆Íïë·ÚÝê» ‚ ±¡è*xY#†ÖâÕ@ºBU“O©®I®Œƒ-8ÈÀÚº=7Ä6öv« –éŒÍœ“Br®t3ÙÅ:¨Õ.b!¹Ž øQïÛ4Øu›k8M™Bð®9R?ƹ uf–YÚê¹ÀíM—S•ÐåƒáP K…Àéõ·±Š8ea-´à2…?4gÛЃNÔQ\Áu!–ÌE‰ Ÿz‚ ¦p.]ˆ#%Kp*ÔlC“ Ææ#%~”Yl;+Kxu9ÆfÜIm‡åŒ{WO•löio8óc@1ærr+‚ÒÄúÔs\üöì£/ Ø×[6©tðŸ±Çâ2®y<ÑŽƒGIŠcQTdÓVëRµ´‚I†é‚äâ!¸×#m¨Í¨¤¶Z"å8t踤[¦ÑdXæÞ¶nv«‘Ÿ/ÛéM6Ý’-Ù-Y¯«¤ø–ïxÉÌR 0¬—‚÷@y&Ó¥°ÝºKR3±Ùô«×…n®¦]OH”ArªW%E£x‚{·’ÖæË‘°W‰[ zäí=¿¾WÍtô&êÖkRõ£ZêÖßj¶œÉä®pWëWáŠP! |s‹¿Ë›mz¤“¢é–vö‰¨À*>ƒ§ÿZ¡Æú1ém QhWw¨¼‘a¶$Šsvë]½†•ccÅe1'Qµp[êzšÌ†@ \Üq÷”œ »§kWlð[#È"à0“Žš2WÔÒkdVËÀ«u5ÜðAlò²|ˆ¤‘Œ“V76[ƒÛ°¨'°$ŽÕ*峋¹ñ„2±Kt‰€ÄØ ×-yy=äò„FVl)ÆŠÙñ,úÅÚ´mn—dÊ©¸÷†5”úd ÉÊ€ ïìüvÒpŽ–Õœ²Mëp²°¶3Äà #>•'öv•a »˜îAo˜Ú£·½–Þåä™âxÐmÚF¾”ÝR%»µIxag -´M¼Ÿvnƒð©œ£×q¥.ú··¶V‰§W˜ÿË(þf'úV>«¨O£M6mbnQœ¹úúU9%´vš|H 6^B3ƒîkWYƒH²Jï1!T2ä7½rªwÔ·+lSyØ’'’NXÕ(­ð‰¾@dž=…^Ò´+ë©„Å49 ïÅt¶ú™l|Ë·iØ‘»V–dó¶"8i Î[`$àWW=„† anÔÎ ífíý+TÔ¬’Þ[{8;‚7ƹÀúÖDº6³¤ÚÅ©é÷hL«–€¶N>‡Š‰FÚ•ŽŒêqÚÌ––Ò² 8¤{ž¼U‘n×™§»k¨Ôä¬O±ç¿θ”¿¶ºhaÔô@ûs Áü©ÿa°Ôµ&Ó즚ÍAX¦˜Æ ûçùTrÝt; kÛd8°¶Wa‘û…%OÕÍ+Ïuq2Æò[Ú˜û¹ÇçYðéÚ¥‹Ea‰à3Dñn@=߃úV~¹ ]Ú]=æ£kù#2Ko1\ýféÜŽnÇX4è%PÓ<÷.F3À~\Uøôûe…b…Ä`u©5äë.™ƒ»S‚Lä©“€+VÐÙܰúÅÔ*¸%¦“’}‡øÖrÃßv4ï¹ÞÝ…Ó­e›{ªNsÏá\¥Ç‰Ýö;§ q¼§­S¸Óož`öÚœ—(¼ªÊxÿ µu«øáŽoHÀ¡'üûQ Žú‰ÍtÓÄ0Ë#¦–ìrOÔÿ…PMFåïf’Úò-¤áÿ1ÇãLMH³¹B„Ÿ›+ÍhCm§Ý/+gž˜5µ£‚»eˆ®XÉ&Ÿe®[´ñƒmppä|VV}>Eÿ¶ÞпïࢬÿoÁÿ>Ó~TTÙö ùuä>à››m@'œIHl’ÇÓØz×]€Rùµkë­ßˆïwí!á…y væ» ü.»o*ÿWQ`‚-¿ŒŸj빂EŸ…ž–kÿí«ÐR†àÈOô隃iñ½š^íj62ø'·z¯+›;h¡‚ßbÆ@Àá@¬-oU±°ÍÄîn52¸†Ð>Üv©µÝÊæ²² oY0Z ½JëÈ·\¶Œá¤oC\u׈Ögi£³ŒdþíKägðô¦\hšÿ‹î ÒZ˜bC´%uOÈmí@»½ófuSåQZ©F(ŽVÙƒgâ {L˜\Û\9PÐ*eßZõKmeÒ4šU1ÚüŸóŠ« èÖZzŽÚ0ê~ûrZçüYâ¨F¹ üÁOÎ:éXµÌìi~U¡Ö_x–ÖßnÈ;A<~5Ï cSÖ§Ù Í/…Ž>€žk 5»È2#GÞ#5kN¸:~¥ÒHÄ”SÁ#½\i«æÛÔím4Hc&Kœ<¬rOSZQÃmª¾aàɬw×bíܱ–< Ó°»Yìc—j`IÚ0e%+s3h¸ÞȲñvÀ=yÍ7lJ8‰TxŽiÜäúâ –¥lÈK}[³,{ÝEËî`2HªòޅɪàÈØ©R+B<¸ÙA•GÉ¢]>Ò\‹?^¹£¨µf-þ»¼X–lƒÉòS úןø›[šês ºˆN~U;‰^Õê£L± Wì‘z‚3šâ¼ošÿg²·Ž™Iù£\œu¦Œç5<öÚtši’e&£Ô,’â¥rz®85b÷M6-ç%U‚ÊêµÚé>ÓoJ³,ŒKà |ÝŒ”[<^+gk’8SŒs[…¼˜N|±Žqž+Ƕ–Vz²¥¬Ån‘‚^‚Oû]뇞äÜJ#…\‘É5IóÕ·=£ÂztQè¶·jêæEÜBr3VußÚiјmŠÏ¨I€‘Œ‡Þ¼~ fúÒÔXÛ]ÊU¸(Oµ]´f³q4ÌKžY˜äÕ¶$ÙéZ$3ÞÍç__yŒf7¥ud3 Ãp+μ¬]ÞëFÓd^D ·^F;× ¸H"%åû £½+–›êC,Ñ„m°ž§­b0-Øb2G…[Ðuy5a!š×b«½>é>ŸZ¹ré ³ÈʈÉ'f‹»¤Ê7pE;G;±j”rìbª»¤eÈQÎ:V¼—v÷;¡ãÀRĆÏW9s=°žY#¹ÌßuCCÑØ–kZ#\LþfwÂ:VŒ  f•ÚÅ`Ø^µ›—‘1 œç$Ö‘ÕU¢>R0f†< RrIc™À29­·ÃonJ…F(F8=+™´Ô¥¸¸x p¬©æœb›t: Ò¸TAþ”¤Ó±¤kíM#IpµZ …-$¬üÁ&®O¥Y•Ù\,¤ñŒU;+(Åd‘AfRÌ ÏÖ-£DÙJêâ Pù±¼Â²‘ÆÜžje0½¯–,s’:ìj;k.ç‘ö@ÀcnNy«rˆÑVÞ4&FbX7Eî:f¡=l†×qÊΖ©mh…®e$ï'8þUn+/ìËA5Ã,óçfãÔ’8ñ¨"m iU¤Â¨b[’æjë8R8Èb"„Œ¼üØúóÒ´¹6¹FóQÆZá•, `/ùÍaý¦›”’7Êîž1F¯ö£ªL‘¸᳸Œ)5™0{}ír̘®öÿv¬s4ù™ÙÛ:ïM¬ °*X Ž•©e¨ÛGj!”¨tÜ ç0Î;×›Ùê×SªŒ¢ÛÄw“'ã]>*=Û(²E DŠ@8ßÚ¸ê#zmlºŠKeá†åá‘FlþsU—P˜D­*žp²dŸÎ«C-ÌÛV$”ç¢`Œÿ“Ú³u]BæÉŒQ@ÁÜ ÈIÈëÓÒ²Œe7ËjÚŠ».Ýx˜´qGÐa\ÿõª)î®/eÉã, (ùHzÄ„»þHbY¸'×ÿÕ[tÏå…hŒnXªØÁ⮥>Dg¹2qs,Ÿ2<+ª6žjãα.Æ7Á$…È uÏ>í9Èiã<Ç·­I-Åñc)´î‚ ¶ãßµadmr•ìá™J°uaž1îOÿZŸe{:²BÝK ÙÿëÔ—r<êÆH”1xŠ«d— t ¡aŽ·JÓì‘oxß[ÔEHäQ¼°lA#üæ¡Y%žYnÔRHÀ$œóVpÀ±ùŸ!nFvôZ™R%HÌI$¯#üç¯jË’Os^dŠ~CÛ˜ÛÌ0¢N ý$‘ØzV“C±9É9œðZRêòG‡RT®NXR fh—Éd;@‹`7åšµ‚â!‚fbˆªqóžÿ«¥Q½½’bë TœÿZ]U¡ˆ¡ !bCsȬ¨µ$f|…)’py$×T)è§c K^Ro$NÄÈØr{ &HdµòùA8Š{]¤€°ÂÔžjµÉV€˜@1Àb>µMÊDè†E-U¤¸•%É%ŽÏÝüG´µfû4ι 3|ª3ß¹ª'¹‚-&KKæòm¢2ËŒ‚¸Xà…·sYÉÝÊM=ËSñn§¬[4'[·GÔôê² ³x”9%TpjkKW{q PfCŒ19Åh.‡tv¼óï ÆÞ¸¬Ò»²ú³‹×ئ¨é³g±àf½ª0Ìφè1ë]»n´Œ{s´‚{‚¨Éi‡mÄØŠÝZ$6Û2DQÆA s’8©rŽNõÇj´ÖCÉ “ÀŒšu¤)žd­†îQ¸Þ&B òèzŠ»mÀ¦B ±äž­G-?™3bs»¯Zä¤×,¶È|²p Œ“E…~å­:hEìbl²1 ûšìbKA*˜âŒÌAÞ¹+=Ui–Hìeb“ºáÏ3(ŒG ÿÀˆkÐÙµ{e†KIh€ð6žqø£op4;*G/¦LÀ+7-zPj™ðÙ¸êWÓ(= Œ’óÃÚzG%»ÝLfÀ]Éê+ói³)9/Sg[²‘$Óu=2)$¼ŽeD7‡®ïnßtÚ­µ½Æ—%¼ÀåB1Œ}½ëŒ¶°ÐDq¡:(WžIÙTlMnÙÉáÍ5’Xõa¹Atåü9­œl´)>åj77z|úqi-œª¸6ÓÛÛÿiÛÇk«éhçP·q’¼±NzŽÿýzÑÿ„‡@²É±xKÊÙe‹ŒŸz¾ “W*f%!np¿oÿ]L¤Ó»*1æV+¶®’ØÂ¢ÐKpñuÆ1ëUᶸfÄ“H‚ÂóD2IúMp×þ#¹ÕØÛºKmnN2¶~¸­‹ ÊñA,3F«6ÜŸ§øÕòwÐ.ÖÅËSVÔ‹P¶–ä‘á¥#ë÷WðÏÖ¡ž·FEµYƒ¨ ™ˆ-Q ¬®ḺäˆNÖ#ëÿÖ­kiHœ¢IcËÄÒ÷VÂw{™6–¶ú3 ÂÝ2z¹©÷zÒ^!XÙ”|ò*á~œÖ•êiÍnÑËNïܟƸ-zþÙ[WtX¾U‰Oʧ½-ÝÅ·S3Pšf‡,œ±ä“YR_ÏrV!T`,c¿¯µCr²ÞH£HÂŽI5»á¸ Òn^{ÔÎ6c$¡ü;ÓµÙ)Þec„hm²¯V剩?°4Óv×"eb ;1ãØ…`ßø¢ÞÅC,Ë` -‚MgÉâ]Bî$¸’'ŠÌHŽÚ_êÝJÎú)i©Ñköï-s[Å käcqÜþ5æš…ÛL®ÓL\œàÕÐø«]‡R†ÞƒÅ`‹€ÿq2¬’6; ¦·"V¾óÍÆ0£#©­}2ån`n” ͊϶´gsJ]—,@ç8­»m"çP±3ÇhÅ|³Á¥‹RÝç_1 IÂÕ›{æ2¢jv*HVàgêk§ŠÇS[6IІCò¹8È©.t‡»µŽ6¸Gl@<µ> ›9•Òõ; ²X˽ ±œjÈñÜvë õ«©VáÀÈ«iáw…¤Cw1‹ Vœ^µŠLË!ë™$â¥Ùî;3›·—HZI9-œ–ê)fµÑæPѺ¡Æ9^µ¶þЙɞå"'òåÅZ²Óô«XÅ¥´*-¿ËÞÄŸ|RÓ¥ÇÊÎU4ðŒ¦Þ飒 ·enoíÉA4R`ž†®Ú--n§Xbµ”©é€h]èVi¦6‡ÌœŒ M+é¨ÔYĬÐÜĦo(1*Npj”šE´ì y.IÁ#5ÖŤ $-7(H›ªž°mÆbˆè¨Jûrœfž—Ú[24ðÊpjþv·÷'”¢‚Êëõ¦ÝÏöå·”’ʣ㊱§° Ĺê*ÒÔÏ͘þ$–(7Ò7a…+·ïž+–¸ºFDÖÙr0¾N,ñéšê¼[å¥å²$ °‹s2ðIÉëôÅróÅ4û )éœVñ!‘[[K4Eº É5„’Hç85¦—"ÚÜG"|äsš¦ÞPÙXÔ€sØSa"ÏÚ¥•B¨„chàšì¼!àø]SSÔ›zžR&SY^Ñ"Ô.ÌÒ)6±0.Ì3¼úW_ªëñYÃ%µªy“°(©t+Dhßk ¦™Æí¸Vkéڵëß^ì“„Çó©´h¯­­^[”ˆO 'äŒÕí3J¹’ëûCS¸g)“ùAúThZe‹;(´¸ìÓÈṗ õëšÕõK}jù lÈ€ác’k©¹¶›UcÜ–ã$u4ÇnˆUÎ#€7ý)§a?Àǵðå´l¦Tˆ*ó°rMK¨ÙÙÚÙ´Ö¶Êά]¸É¡o罺ÆDaœ'³saÜa$bª0ÁÁ&¥Êà‘Ä$ºÃí‚ ÄôVÍléÚ£4±™åŠ.0#\œ}kF{› " ó‰ 8QË1ü)4MNMVøMrÇm É ¤jÿÂ6ßóôï‘EknW¢‚ô<ïÃ:U‹kÐI¤xd*À½Ôª@wvzô¯K‘#R ¢‚Ç ÎiQ"·EŠ%hà);¼ÇÁÀǪUÉH‰,¢-=.N?úõCû#N¶½kˆláF~¡cå­i‡g$ÇJ ÀŒx,N¦› "$´\äÆƒ=F(t¶´…ätDP ' °\(;~cêz Àñ=Ò&–ÐÍ&ÇzŠ{†‰â¿ ®€³ÕfR C U~§Ö°¡¾¶7pÝ]@/f²üêLjⴷ¶Š+[d\6ß‚Gô®VÖY R'8ÈäÖðÕòßC¬mviîÌ+@Ž@Xam¡zËxzÇPÒí£eUt”œ°o\׈Dñ¼ñ—.@sÞ½jÇÆºz¤60E5ÛFUÓ ¤úy4¦ž– m]óz=”0yb ާœ×'¯Ï5÷“i<°Fùcr ~¶tjëSÔœ4B(QI*2Iúæ³ît¹µ­Q¤%¸r zéR®Ÿ¼i&š÷LÍ0êZ÷’5 ¡wóO«Î—Ûmios4ì~PÅÉæº[–6Pÿghöù˜ðòÂR}k;O¶}#xDz¤™Ú‘>¦ƒ6ºÖªš¾“|,ìî]'”d´2G×Õ˽7P°Òö³|óÊ ùk4¥™ ÇÝÎz×Ua¥.¡|V{Æ# È_§½PÕ´³©0¾Öå6öq¶R÷ž§Ð,Î{Jе»¨T¶ºþÎM¤AïŽÕ]>Ô“…yü×ÉCÉúu­iõ;ï²ÑÔ%¤@#p z“ý*XMðÊ^ßùœ‘*\n+Øæ/å’ÑLz“¸ÈÀ’G¥ji_êZntuÛîòÉWØ£¦~ñ¬Fíõ½M®¯ÃW €úÕ©eâtËf´Ó…É+k“šiô}I®¼ {uÛ›rNI2èÕ‰.•£éÊVuµƒ,…ðHþu¸Þñf¿jgÔ5)c‰ÆE¸mŸž0j“ø:ËF°—QÕbS…Bùi`;äÑí•=-‘[™0[øiÙ ‰äÊÀZÖ½Ð4Óf²ZiQÜM»å3™ë’ Y°Õo¦·Ž ò (åØÃîªÕµ8ícùVi–ÿ¾œªÖ–ÑH¤ÎEe¹ÒÕ†Ÿ±Uù¤‚6ÈöËUˆµ;¥e“Q˜Á pHü+©Õ~ù«¿O¾ÜuIŸp5–þÕìa9´ó\uhÎjâßÚdÉHÆ‹X»…p_]"¯RRøT‰«K;)ä€<»n"¢žÍì%+snñ‘Ô¸#ɱ«áO\V·ìMÙ¬÷×F¨è€Àôâ­hzUÍö¥•€1fsÆ=ª¶ž—:ÍÔHÌ#If“еÕêmc¥"XÆw¸Ä`õ ÏÌ}ÍLËZ•.â‰exMÈ18I¥K˜ …I¯R@éYvZ}Ôä™HTÆ295z "Ý&RÏ&Ñ’ùǽCH/sbÈÙFU ™ ÜXŒòióê–β€îÜ¡99ªqG¦Ã0E€ÊI’sWH´‚HÐG‘Ï+‚8þU“^¦©šfö È—ärpx`F:Õx`… ³¢•Qò©éN0˜›lŠI>¸â {»]¾\“Æ °¶x¨—dhŸrQ›÷{6YÈÇ¥ŠÎ_64@ìrX¯ñÛúT]À²ç¡@Qœãüô¥­¢’ þÆóÍJR)µs;Äq¬ A ;€oâúVMµÛY,í$èP)ØÍÃÛéZ^%»†]4Í y­pôük˜³´3°šæPäòª9½J‹£ïu$Ôô6ìdMN?"``¶b1<ãŽ@þµ‘®Áe§+BWq‚§–j׌„a»îŒŠ­«KdlVòtsmä‘Ú¶tTUÖÌ\íœþ•5™2fÞ4$¢'õ©´ñݨ·f–IŒ7ÞòÀÿëÖ*Kw©ÝÀò¢nww Õ¦iP¼öMÔ7Rqý+g+u6™ÜڽɅ&3N[ŒHßµU¹t¹†Fw̨à«õ\8¨´›™ïtf]*1†c§=iúÌ`i®UT ^¼‘ø×<=Ù£¦Vq<²6 Ú\f´´˜Œ›Ø0È`zþÎé×[ŽII' ±9é[Ö÷ðÁ)ë3ÔãŽ+jñßC*OSqͬ(‡vcjã$ÿžµ‘szn&d¶in?„ åY—º¬÷“*ZÛ¹$‚ÌçJ¯iÒ«ƒ&# K2œ~µÃft9¤„·—‡›j0Ëå?¥YC‹{z’IíQZG Ú¸8'vA=qÍE-û¤#`FÖÖ‘vZ÷¹»çI,ÁJyArªsƒú{Såãmãz· p:ûšÎŠ[‹»†/¾" €È?Ò­Ee3$JkKmÉš‡&j•Ë`¸!dwÿqA½ºg5h©·%b¨mÄã?…A<¦Åú°F àsÓ¬{½r(&Fv'!§7¢ŠZ³NþW’ó‚rNÑÁ"¹ÉnÌw¼j0À4^êx„»…·„ýÕ±ü:Ö4úͯ”éQ‚†I÷ÅtSm#ž£Fú¹Õd øn7úUÇ»Óì-<ë™ðÀ Ò¸Vñ]ÜVæ§wv8¿_Ê©:\– vû¤`€sŠrièN©s|E{»|“Cd(Ð.öûÄrzS,ô¨¼¿<& ddòGÒ–ÚVUHÉÁAÔ×K§[„lIÌFª[#w©ž’ÇŸdqJ Á5Íêž%»žé£´–H-Àe–5ß]ˆ¡‡K¸m+Ž¿ZÄ¥¼ªÆÝKK—¯ uõíBI+¶±Â½ÅÄîK´²9#æ|’Ot¹K1Ð…éœb»{˜,¬Köx¼æÁ¬©î„¬Ñ”aBäPš§=M"ÅÊä`çŸm§JóFà; tzf“0f· „eZSÀJ®ŒMä–2É4¤*À?äS¿`³!°ðüºÐŒ¾ÈTeØ/Jîl4+5Um­pÆd~XÿŸjML–ÍXÌë)`1ŒVÒ fçç=>”œú#EO«!B"‘”ƒ¸ ` ¼‘ç™äž„T‘ f ‚:f¦©#,ryäÔ\«%·ŠæÝ ™w£d|Ã$W—ëº.›¤ßËæ§p$#r!ä•íÍzêEc©ë\_‹^ÍnIJ[E+F¡w‘ÈëÞ”¤’µÉzjpZuµ­ûí)st«“䯬XÃú×C > ¸ƒÈxÍŒÈ~q.CþµÚxJ“Os (…ˆ,Ê0IÅ[Ö<1§kMí¤o"‚\aÇÔ÷£šêé‰Dçìl|,ö¥cKŒ/Þ'æ#ùÕ语tËcöoøö\…!·Šâ5ŸjV÷Ì–0Æð6J°$ìk ´û½%Õuyh²²Ç&UOáYòE»6kcÒn5»Ëµ,–ï8Èr2ÇðíEŒÐ4âH\I!Æç~H®zÚÊîñ´ß-Ú0’Ç’*ËYköX’Kg@0Ò@Ø$}*•$÷v”Ž´$nKÆë¸•éPý¹Y€LÄgº=*Ű¹¶Ô£òí]ĪG›nNÇ uýzÙ 1UE‰ Œ ÔéZJËDi ½Y›{Ï"µÌ…”’vº¥W•!¼%*‡ä ônîœ#0’OCYæS€ˆ`rHèGÖ’•ô²-=œ °œƒƒÂ©ËæÛ«±`büÇ®™PÆí# ¹8<ⲤsuMpB[ .ýÒ=ý~•qÓr%©\ÄÓý¿QfŽÁ·‰ù'ß*þˆò^jÒÝÈÅÝ‘&3…ãõ¬ëkA{|/ïÜ4`~ê20÷º®©,0L°Iöhãè# ;Þÿ•1+c\Ê­-lµŽâ¿Z4} €sªÉӱ݀2ÀW/ÿ Tšf™[_>úQ"¨PÌ}~žÕgCðíÞ¥“]Ü2I™Ú3´3`|¹ö7d5¾§¡Z[i¨Ìö‰`pp2:s6I2ˆÔd‚=*¥¼ kn‘“å*ª‘Œ(®Äz­Í®¬ÖðêÏp¤‚`O¾:ãÒ¥+±ÉÙ÷ž+†ÒìÛ”óäPx_Ÿaÿ×®uõÝNóP3™¦¨è 8$ÿJÂÔ îYƒ“pØ ©ex, *ǤےIÅ\cvfŸSeuØ®•Ã3+Xþu.ƒ%ÍÓ\Ýì·‹’±ÆrOãÒ®\¥R.Ò6BrÎçŸÂ±nõÕ·&=1NB[ô=)»…ô‚ÚÙŠÀéÇÌYrqìzÔ7oq4&l”Æ ù›éPèÑ\^ o.xÁ±#åÏ­k>¡ml²M+„/SÉ>“CG?o£¿ÚLú‰ (ÎÂrqþ{Sµ=Qüml¦4'M6]J{ÙšI‘‚ mÏ¡§h“ê daåÆw·R=¾´®+6rÅ[Ê;º÷ÿžMiW·yp3““À5ß¿‡¬¡\Ìбè+@Ô9ÄŠW)E­NkEðÃD¾uÛˆ‘@fÁäûVÝÞ©-¢8ñ÷UrÇðíYº”‹uFw\NHZ±¦Xj—w’ ÉHK<´äþ=©Ø^DwwmpV1jÄ0çÓ¬tíJé„pD‘2Äpvzv—mj¹’ ÒžK˜Ö¢Ú>LàqÚ£BÔL7FƒMŒË<ò]ÊR€(ú ĽӛUÕ$Ø*! (fÁ#è+¢»™ÚO,fW#„ˆaA÷ïKstK—(ªpjÖÈmèT´ÒtÛDe·„Jp…Ü!ÍmmoÖ8qš³”Vëò"ƒÝ&”EbAÜORM(™’‹«…Ù!Iù¤qÈ¡—IY£Q=ÌÒÎànïÄb¶¤Øœ9õ'•s¨C0%X¯%G$Ó¸ôEq"ÛþæÞ"xôüj1\É—¡žòæõƒ[ÛàÚÇÚž¶R2]ÈÌ€ðƒŠL—;¢÷‡íµ& æîXˆ ÍT,tèÂFêgR¡9&µ÷¤@[[•…Nz.I÷¨¦°¶v2”]Ê»S'õ¦£Ø—d¬Œ”xodY0Ò¹AL•éÒ¸}wS¹NÏL²8 ìPÊF7 ü}z-£ &Á!A©^éVÅÌ×6ᜩPS¨þŸ¥²ÕŠKM-³®§ rYŽTd“[6°,·1["îBàòk¨Ãð$ÑMbÈ6 z¥Ciá»ËJÞðNYc`X(âŸ:bHét»/³Ù¬*HǽbÝÛh¾ÔLÄM=ô¿v0wþ±qq;Á/ÙÒHæ*v>2sŒ×+.™{§¤—óÊÓÜ`´’¨Îß§·áIM66¬vº1kÅi®-š(‰PòÇü+t¨8>XÂôð+›ðö§å„sÛ9tÀV¨5§u©ÅeÉvâ$,IÉúSq)IXv¥w0Û BËþ³n@®nßÃ&òc-ÜóÌìI-¿ºøçŽXÄ‘ãa• äYeP’ꈣ$ôÀ©Õ×Ô̲Ñ4í%¼Ëx”Œ'&«êZŵ–ApÓ$ ç5jêåÑæ·—r•;Y9Éç¥y¦£4ÐÝ´3Ųâç,d‘óM‰¶veÆ»*ß]¹Ka±‚ÿýj쬭c·xãU©(àV7‡µK[Í2!hPìP¬ ÁéS]x†ÊÂá#•”0ÞÀ𢥻¬Ž³äÿbŠÀÿ„£Bÿ ¿çE>V_2/ÙA)c4ü»t_ACÎ’Í$qÜ+Ž×U9!½øV^£âšÍÿ³çRäí<Ÿ§øÓü5¤'J@¢YXÈç¾ORsE­¹ï¢4Ð:©2gœv«[ßÛÜ]I ygA’O t¨5KÈÚ3oò‘ó0<çôÏÙYëFØ1”¶C´k¸GõÅG=åd7¡ÖËr±³)` €[¶+Îâ´ºù™Éžoªê7úÖ¥ hù·RÞZpF2j¥®ôÝþÐÇ®[}AçÔõy¢›ÉwÀLöüªÔ &Р8×5¼/ÔÊ£W±¶<ÀI$‚®A,ÑN<‡d*Û·«i #|ç R&›,·kù³3aŒ’ «3¹é¾½þбši›2£Øãs]K…Ž#å@â¸]Ã7ZFyk‹Â3²3¶5úÿz”j>!ºc ‹ä"±/+Œ?•`ãw{Ÿ*³GX'D¶ ‚3ÔÿõéèURÌO }:W|hb¸k+kY5|éXíUQï]O…|Mc¬Ï,Vö¾Aî 1ÿëPÕ)]Ø¿up¶ò¬ )ÎïˆèOʲol¬¼C­uy:CnÊü &>î^*Õô©jò˜F 8>õ ú µÆœ–W L`ä…r£?…+¤ƒ•¶pº®»m JЭÌqp‰pXûÓt¯ j7ß½¸ClÙbü`{-w¶Z™¦Ööʇ¹<šžrX…¸gê[³¾æ3xKMX”Øà °~I÷«V:uŽœ¾]¥´Q1êÇ–5~hžY1 Py u4©a³ 4®@&‹¤µ+—]  ±îGAToä(†;5˜©áŸŸçNžÚòõ{–¶´qõ?SS[[Cm•‰Ì³‚KgáXóÉËE¡M\Ëk‰-ãÛ#G8ÛÉ&£“dL·7àm$#9 ~¢´$Ó³3̬ Ëcç#!~•Ãk²9Õ³<’[)k€Ivþí5 7yjKÑV•â[[»èí!‚@Xæ/)ŸL÷®ˆÈØãÜôÊx`ÛÍw6ØX4 r0}1À®©´Låà Ñ« Ø­r#u&TÔsºEÈÌK'†žèäZ4‰,øÖˆÁs,3][Ïa·Jß8þ•‹wi¦»l±uGݵPÃ?Ò¥¶–€ÝËöŸÙWWM %pB¤ŠMFÑ.&i#…˜¨ÇÉ(éô¥Ò¬RÂg’@ÅHÆâ¸–kLäF†H_$ìàŸÇµr¶‚èSdHÙ,9DÏ?…eÝÚ_É1ıʊ2¶ÖäP°„Š1ü9Ïù ”&dPär*Õ–ÈV9˜´ëôÚÍ€xÉ9ÛþzMòià©# ñ‚+r X¹L¡ºŠ¶ò !1™`CÃé¦îW*0†…4h¥˜àdr*¹³±ec%Ê­„9­ñ¦·’fŽæU!·(ŽÕ£¥%ä.cBw|ÅÃc'óÍ'êZ^FbdQHÄŒNyýjý…®šêD’”Ç$³ŽsÖ¦‹Fµ£ Òº6'Žji´­2'˳njฟ²”–É”Ùt‹· Â*Aƒ9íþÇ´Óió4sD›ˆ¼Šè®t§˜0¶GHÆ>w;Iü«—Ôô«È®‰I²¯‚Fp­vàìäâÙ…tí{s!Qä l7?úôû¡{ß.î<£žz÷ü:×?Ô,œBŒsËû§šòúeVh@fUê+Ðq´ls§­Ç꺊ÚÜG °@Lg À4Ùle’ê+Ù$S,ƒFTžõ졲ó£…˲õ#’Ãÿ­U§Õ¬rËä¢ÛTrk–jÒ¹¢ØÓÒõáÔ#Hf#’0賫ݵ½œèX¹•Ç”và’ÿ9ú×ñ1ŠXd26p?ƺU•WFe-¾AŒƒÉSšç•”Ó5‹|¶)Zi’L¢YÜ[>X=*üK wË)˜™Ï*ŸãY©4ó·• ±ÎI#€_‚µxà„–¸cûÆnH­UY^äÅjiÊöÃuµ«0™³Æ),¢yÂÆcNYÎjH‘dÅ­¢bA–F<ñžµjY£fvˆ Ž=yÍrr›&GtŠbhm°\ÇE”ÞQ <ªºæ´µ°Zµ½¸ÌÁy È5žò¤c¶“€@ªŒtÐRzêmÙ@dÚK£ž¸8úÕ›½F(°"UgV8QÇ5MmcLÈy ;ÿõë'R×Ê'ȉŒƒ!lš•JMš{DûÓ,±´š…êÛCœŒ˜ŠåoüO ’˜ôÄòÔŒdr}« TÖ^úã÷lò±<’~Z¤¶ŽÃuËÄ‚ê ë…–ºþFªÞÅ·K<ŒóËù&®%¥Õó,j¾\ ä±êGÒµ´Í®*„]ºæº+m:+Y3,ŠùA&º=Ìy‘m£ªË…2À\Œ`RÏ{¶‰x¿¥oËk-Ó»Ö>îpMQ¼ .<¨|œ tÅsÔ‡+±Wº ‚ƒ+ë6ÖèdyâŒ);ŽjH´›'72œ°!Tâ¡>ÑvƳ܌)É%ðMa­ô+bî‹=ž®Ï2I$æ6Æp£>ÕkVÓõ ™´’8\;Ë¥ièúU…©6+„“’Ç’jû½FqÜÔË]ihq#à [{ígé™âj”¶Si¬cò„dœow?®ºîHÖF/sµW’¡°s"Õí–5·Žåd’R@ÜŠ­tM›9ëÛÙd/ $/Ý_ŸqÏáU-f{=zÝ‚©˜s"ž€V”F+Vvà¬Æ¹ô®/.& –r@vRRm”•O±Õì/ŠÇʉºlÎÿ^¶ãŒR\*ƒ’Ùàוx~Ò5…,Ì^$óS^›m(¼P_–S‚RºZ¤Øó¬BŒá!`#qêMZ°Ô’î2êŒ8ç½a^i—sê±Álqm(ÜÍÜõµy5¦¦ù¬UT*äÖKš÷{R¾£ªN³ kxÿxq–ìs×Cxd·ÔÀåÜŸ’?©î}ª+«ù.!g»•­¡sþ©ÖÌ ö¦$wW,@ @qå/.ÃÜö¬dù¥vO›7´+›[)–Ñ.yÜOaíí]<¼ªÉ8Øëü¸®îí´ˆß쑃(á@ä–®¦ÊIµÝ+µ"µ1'€Ã·ÐÖ”fä¬ÃQnüK¤éÓg“v+œf£¡Yx‚Ãa÷OÔV~¥¦&¢Œæ/#PNK’G·Ö«iÑÍhÆì<‘¤3ÈÙ<{S©5Œ7ÜÓÓ¼£i­ç$Óc–<ÃÒ´.`ò˜pÝ'5.Ÿ©ÛjP¡™8e¾µaЍ9àzkE±VG6÷6ÐÌ-ªäáÔðÂ¥‘Á\–QŸNMM©é:Š7œ…\ð®§ >•ÌOa©i3‡÷6Ã?Æ?Çê*ùo°µEÛ¼,Š>b<Ö|“ÂÓ·Hû¢§–'»Q!vòØ s€4YEB@ªU@9dÿõª¹cÔ‹¾†Ce¤l¡#øsJ…µ AJYBz’ý*{»Y^Î_-6Ãæ#ùU…’#l#bF^ËU§A]½É7¢[K3ªù g ñJË[Ø CSAÆ@È_ñ¦E,W³<³3¦$yŽ?ˆúÖ^µ¨½åçÙˆ&`Ür@ÿëÔõjÚ h_IzˆÔìOQï[ö¾)“GÒÖÔ[»òLÛð$úu¬8%KHòbpì)eÒõ-qLV¨B’3Æ}hæ¹*÷/ˆõ?\0óÚÞÐ 0VÁoóíVãðíÔ°‹˜í±1ùI®—@ð•–mrÂæ`(çÒ¶§¹.ÅcÁ+ÑGj5`ãÜñùg+¨H³3$öí´¤œ[öú½í*€!$©mÐz×F,¬$»yŸ^±ËÊÜóRËow o,ˆ»‰À=ê’¶·Îu3S²–ú\¹¾AÕNÛL¹¶®ë’Õ×^YM­ÌŠY•#rwŽ¿Â­éÚTp]\~í¤PT)#‘Ö“}%sÞãQµ´Hˆ6ü¡ÈÁ#ire‘À9À­ùâ„”í@` òM(½·㘨ÎüãjÍ#dR] ý®(Ô  ÏNÕÒ“åE° 8ªöo½\ÌGj|î‚q…Áô§ÔiˆÅ¤VD[î'<ÖdÚzƾ}Ôí)', À& Ÿ^_=â·Rv©,ý‡NÕ›u©ˆá†{½òÌFzN*”®t:e¥«m“ÉQ´œ9·ÐF˜ c9÷®*/ÇaÉ 1fA5â?ê7q¬FA m&AáO¦hm^ÂR²=}jÒÑp²y²‰ÌMršŠ/¯u¨ô¡Û¤±îÉ}§…førþê+UŽ;#(*?z§nOÔÔZÝÅÌZ¶›+ÅW±ŒOÜËY=ì[g­évëoc v¨õ$úÕ±4o#D×YFY²Exôº®¯m¯.&¯p!’2ÄŒš»dë¥_¨ï›pÀrχ% sž«æF2BMdê¾"²Ó‘„· dòÊ 7W1'‹áºVÏ‘Ž9X'{Ãö7ñ½Ìºl,oV=94]ßD ·¢(ɬjšÁÛglb xs–8«vž½qºúúAžJÇÆêÇ• â8• ¬ËÝn2ˆw8ãjŽôù’Õ…»’AiöhÄ1eTzœ“øÔWOº&HTÈÂ:jH<ÙT<²X°t¥dP„‚yÀÉè*î¹’‘e3Êô ©eEEU, #8ô§Êa‚E]à–瓎*wjÒ·™q  Š^Ò?Ryu­áˆ¨DÁçjgŽ).Tsœãs­é¶Ï±®ãf×@û<Ò‹K¹Ð°Â;6@éOFµ3»:;©$KYMºï™cc…°q\ˆ¬µXÙ®µ=B¶ñ屜pJëá³Õm˜‘¨Ç2äqiÉ$žœjKO j—Kyr¾k°Â«É‚EtÖ–ФiÖBØ ¶94ëñwc4’ ÀÒ‡Ô/Ôá'Ô'µÔbÝ‘, A%ÃïŽÕ|Þ]jöO6Œƒp L ñÆp1Vãðüš•ûj$QìŒr@•ÒxkFHlm¶ýã³7ëßE±Jö9/³éßô Ÿþþð¢½oû6ßþyÁE>ifqZŽá]:UKÆÊ9fõ«úÇÄkYtrúb1žL&~¹õü+Çõ §¸c#–ÜäüÌy«ö%ãXÖà™cåÞIÇá[B’JìË­ Ë­wSÔàd–è¬mÆØ×nk,Osh¢8®å‰GEŒíüê+«ðG¡ÇZžÒ~f;œðsŠ¥–Ä9¶ ÷÷Äß]Ø XÓ<:Ú”ÀÌ\¡l3±ÜOÒ¶-4‡’!!ŒGœòé]m„ oÂDc@bGÍÏAìO§j,-YTxG“KݺJªNíÙçÞ¹X­„ À?ʤäŠô³º½„ÃjLP´Ï¹ûm(ÇדYðYii¨{I¤šHù„.ôÏ¡í“Óše8ö9k+iõK‘§Ë8’b8êº&…a¢ÚªÛį)PZf9cPiZ-½¥±o³$M!-废_Z§6¤]5†žÆæõ›HNBJ‰7-q.¬èd¼[ËÝ–#8šâ|A׊/¢³±r–0’n$ÎõÅiŤ]Îâ×íy[·]NOÍ!?À§ÓÞ²ük¨ÝÚ%®£BÑKpfˆr¦?ZQVvE¶ÚÔäµI,í}#KEÜy³½.=ý=«:Ø´ÏŠ}’/•±ŠÛ½ðbéZcßjz¨†à)1CÀ·÷k’ˆ¸È* ýà:Vºt0gK¢Ýk÷š°þÎ¸ÎØS!åT{ö¯WÓ­n­-ËÞßK{pW'Œ(öQT¼)mk‡mM²¯ï3°êÍÞ®jÚÍ–‹f×7“P>Uy°ïXI¹;$mÙ]±^ôÇlfºAE,à€+;JÖÆ¡«=½¸T¶TÈb¿3WœÞxöã\ñT6¢6MÉ pKqË…z‡àÛo$àÄ L“½‚ú¤Ž…X»±^1À Tm†8]¤”:&rÞj¤#˽˜3þ­ñ§|ÅÙj±¯L î]È~Ûs:ƒ$ï|tÁ#µ\¹¼·Ób î¨ ÉÁb{Ô­ÖÑH2ò6þµ´ˆÜy— g•ˆùØ (öªIvˆ¯î⸌böH£l°®XѦ\Û–ÚcŽXÈøcõ«w";-²­»Ë)TpOãYÿkÔ§™ˆˆcå·¶]ïø·AC•zŽÔ_RŠ4²Ð¬¢…zù­Àž‚œ–š’X‘¨^¼¬y"1†ú ¯ý“ª^Ë‘7Ø#9 ÀûÝ«m:Õ|ë†"12VË…®¡k˜fÓF¶aqráå¼ÓÆjäñY^Y¨ÓI#À'ð<Ön£â[{·ÖÚx¼„¶äá==MW3XÂÆê[dŒÁ9À”«B>íű« ·É‚VIdy„tþõ4Öt`n 6rTœøV]§‰ƒºÇkbÍüõsÈw«wvö2/Û¼™€8“øUFJZ'qìXØ‘£,lJõ¹ÅE9f )^XrAª‘^ˆ!i Ô¬r¡#+üêäJïJmÝœÍk`¹J5qê çuËéD:}IJçpU$‚ääŸO¥]¢É•‡%sÎ*95ky”HÌ™åTrOáúQ&¯a¢í´ kbcfÈRI$䊄ݪÛ.ã€*sŠL’³l.H=M:Þ0ð£gðE&‹EQ$/ŽBᘂnÓbÒÛv¥æ,ròsš±tªeŒ(ÉéÀïVNËHT¹ãÎ1YÇYZÆŒÌûn w,Ö`¯p:×9®^BÖ‰0„‚ŒT0@úvæ»(¯`˜þîD,¼ã½SÔtë[˜dŠä&$0}¿Þ›P’fs\Ñ<ÒÞî9u%˜¸O­½K’ð@9¬Ë½ɺŠxö=éɦ%»36z€¼ ö§f“Gªæ“ x6 ®àTu¬÷Ûº[PÌ«*àÚž—©d]AÈ$sTu@A\F(AÎ3ë\˜Ž—.D¶Ð XÌd’‘’p8ÏÖ¤®u!å"¡<繨ÍÂ]EÄr’ppZ”Né¶ üÇ8À¤à¥Šöe——ì#ìÖ¥c€JŒ‘QÙ[^¼ÒÂÕø2HG8ã½mé–q[żÞÄO$j¾Æ Ä`dçœö®N¶5¶…‹r‘[,*ƒh䚎$ŠÝœÁ $¶y57›½ªÍ#„žw¬ý¬<6p1 ï#5ÑmÙO Ê$y%VqØ+2æäÚ|ÑÇ´cïši’-:$Î^Lzñø æõ[™õ&Ä®R/ùæH­©§%s)I ½ñ+‰BÂ^æä’êåTçƒQÔ ó/Ýa…ŽJ/Þj¿¦ÚE`[‚Hù‰¨oe–åÚu…í8®Ê8u¼ž†R™œd‚ÙVe' ç­¤ið¹ûC’÷'g…¶™ef@Fi°H,F?:×…àVW“hˆ\Šô!JWfR›z#jÜ:ÊNìgŽÝj(;†(Kƒ•ÉÅW:­©„›X%c·# ?¹¡-ÅÛù…<ç#*€ «õcYWÄ(E²áÝ WXa>sÉœîÚƒ$Ÿð¬†ÖìùƒÂ¶å€ “’HÏ_Jì6Ï Lnæ…2¼$kÂþ=I®;U´ÒÙ¼ãu IáI¯rIsMr«-Í–¦êÒ¤€W“Vtë-‚ 5.N7Hy&«Å,òÛlKk[hp@`܃S躠º‡í´òEûÌÍ&N}@ì+ž£ªšŠ{‚IDÑÛ —ild…è+Ĭœˆ^@ZIÈUõö­÷”…V# w¯3ñ¼¯sª. Ò‰®.Õ}ª©üÍT¯k#Gd‡\Ï£C¼—t@,Ä’ßýjç4K¯f»Ô¶y`¹òÁè_×âµÒ4xtÕ‘$™°¹ø}+õ9Ò;fm‰*±ñ“S»µØ·¬Ý‹{F…°A*޾õk3=Ý­¼ñ9G# œgqª÷·¯q:F[*y䊳-ìÚ†µdÖ1‘2X×oÒµŠÒñ±£9°ñÊ4€Cub[Ž8•wzd²¾¨nùVŒ»T7Þ~GÍíô¯7±º·²ñ]õÖ¤‹…,X/ 7+ªÒššMî'v’á†ã)Ï^žŸAK ¼½AœÚ[€rò ¹ÕÖêºå†•uwqvÈþ{U‘-¾±§Y†@ppA¬Ý(·rlpÖvÇÄ Fn&ä·û£Ò»O ÙCœÒ£9šf%ÝÎsŠå#—NÒä}‰-ýÌdå¥o‘k¯ðåüÚž”&“Ÿ™†U ¨§Ù‚Ü·©iÿhO27áAØGB}ëîݵ»S•Šñ ±!O¿k¦àâvô §s§—“±—£t"´²{®¨óÙÌú>­öKxnõ ƒ„?NØ®«N¼¾K0uso rsærjä°Cym%¬±®*à°£Ú¸›Ý(X3%ô„Œ²HÛ‹}*-ìõØI„Kjé*“†¿•+H“CÆãÓ¯W—jj6˜»ÒÍÄB<†cÀ}+ Ð|^ní¹Kc éëî+X´ÕÅÍÜè§°¾@#'8 e_\µ¤ 9ÁrX³ñ&Ÿyyödœ ÀÎÖÍEâ+Y¤±ó-ÂoVËäU±=®Œ{›•kMÁó¹I<ô5Ïù²Î­ –Ù&K‘Óµ[x®^/ Pu ÚŸgÁ‰s€ ÏçQͦ„>Α–ùTp* 3K¸½w’(³½°ðãZe€¾¼r8HÎ?úõÙ@‘Û…Œ QÀéUm‘eá‹xq-ë™ä?À8Q] -¶HÐDª1·ªw7P ³¨'ŽO÷ª—òíT³í7R|¨Oõü(±¡²÷1 Pe<Ç©-ì#rßp$’¬K ºÝ›Ý^äÝ\pƒ„Aô®‚w– Fû2( sž0)7Ø\½Yܶ¶¬ÑB#3€ ^ãë\äOu¬Y\<Ϲ˲ƽGJj?üL.$•ÌÍ;€2éW¥½‚ÊÖ$dpª©ßßÚžì›§°ë8>Çn Ì`Du–ÜȬ\±È ä¥gêÚˆkyTð@Ps޵X±´µ‚90Œéš/ ®WžInuFÏP~iöÄÈdcМ pH&•o-Ñžr„–ÇŽ+^ 2 +rI;BhLv34§™^GL5‰Úz*Au,뉋sÁ¯›•Ød]ˆ9sÅfZ]›Èüц]ÇæÇQDž‚lÇŠUŠ=@“—2Î)²Ú]j;ž8YÑSð©tûµëïF«1=0 ؼ-²Ž8Ø:PúLVRÜZI 1G;qÈ5‹­Z¼Š»>_+v3Áé]´šmòÝ`ÅœXt5KQðÄú…ÒI#ˆ£òØn3ô¬½å?!'Ô—E¿žM6c厤¬ÿOz- »• O.eAÜW8æŸhš‚éâÓÌŒ,£\pqYú¼w–š+FÍ€¾HÛÈôçÚ³ÓŸÌÑIt&Öôë›DÓu §3£ÎÃd¤ é.4í2Ø+´ñ&$ Zã/¥}KÃAç¿»vUS·€ŠËééZþ²Ó.íc–æfmÊ\sÞ¦o–7onÀš{‚]éº?ˆ¾Ûö¯>ÆèíhÇ ŠÝ›Æqi>BÛY¤Ô°j²…‰u kõ€ëœŸÿU%MõcRîn‡²‚@“Y 'czD´½ÓZa$mÊ>•Í™´K›Œ\ÜÍå·¤È`jÉð†•q™íµ‡Hö’>~GáÅZˆ´þ°ùŒ2Ëw`ý :ÚÆþÜ(·Ô‰H ë¸çnmɶÕLèAÚI5z [S³U’òÕÌ'øÕpEi}4d[Suïu‹XÉžÌ\F­Ÿ2'ÃcýÞõkMÔmµiÖ8gw˜‚|©>B)t}bÏRŒ$7dýÓü­ÿשµÞõVRÂÇ4G õ¬üš-'º,ŸZ+LeYfšS–püíô­8![Kh£ß#*Œ#n U9ob·1[5àiB€ÓIÆï§lšÍ»ŸR½¸6ZBˆøÌ·RŽ™ô^¿j‘77Xš2ï#‘žELšt9‰qÇàU Öúb&‘înXå¥ç'ØU½by⇕HÊ‘»8 Òr춬ÏÕ58¬lgšÇÊ,ŠpG#5›5¥Æ¡¬ÌwÊiøü…CaKÿ{åðY†šÒŸS†³¶YcßÀ¥Kó ö/ù©§Ù3;ªŽy“Qͬ%»$h¥ä8À¥sZïÛgµ·{Ô“Ô`f‰g+, q.Iã’i7 ¯Øµÿ 5Ï ÿ¾¨¬oì‹Ïùö—þù4SÐÛ‘w9}I¯£Hò¸uæ­¤¶,X¼€i4›c,Ä`Ž}k¡:ߤ–°Ê‹ ‹œ|VüÉhq¤Þ¦™¢O«Ý‘J. ¹è+¿Ó´­7H³VX¼Ç`A•¹g?ìû{Ô0Cká½*;p›L€÷ä?ÞqØz ¬’jµÐŽÚÚF Á|ÉóÐ 7Ô{P)¹Œ38ŽÎpwÇøžMÉõÊZÛ¹‚0À#äã¯ãKâ­_OÐí­´ð„•£#Ó?ZóýfâòäL3B|¼)-UÊzhz~»¨Í3ÛxoErg“W^ˆù®ŸGÐít;$·ŒnqË;Kzלü4Ôlm翞þtŽë¬³?%{ã5¡wñ2Ôëq­d’ÍIV’  T8½‘q’Ý–µq¨?—ib„ 3¾sÑøÖVŒg·¿vz<†ÜœÍ{/ÊIõúTñBHwÅpÎHÎÑMgŠkÞ$rA8€œéøP”­kÜo{•ÝݶŸs*¢g=Ír÷:Ü2\Ks¦Úƒ3 ©þUQXÞ ñΕzm!’÷Ë$®Sjƒ\~¡©ê:—2È#„txœ`’Ô™ÔìMâ-fÖI%g¿½`A¸Ž1袹).™p£v¯Ik†À‰<ú §syBF#©èk§CÍ3ÅšÎdðÚ^„ÿ…†ì}=+ûY¼Ô. ×sÉ<‡øälŸþµ'’©ò¸çLÒ5¸·œ1裨5V¶ÁrD¶áÀ õ×°|=º3xgìï)2Fî -’kÉbw†pç9âºO ëVÚ-äÒH»$l!äÞ¢Q¸)YÜôø®ÚÍÚ+ø¼¨Æ J_!ÍJº´±<ïu Ãl¸ò˜6YǯµÍGñ'LKå¤Û7Œ`GÒµíõ+ Ÿ.h­QP‚UæùTZÉųe$ºš1Ou«Ú4‘«ÚÅœ+¸ùˆúUØuZÄîFFHÇOñ®j}Fâ+ã9¿Ì%‚,cè*XõHÈHE1…@2O¹n‚§•²œ¬ijw—IjXÇÏÜŠ‚ËÄzLZn滌4_,Šœ’­Cwso{jÖ³\ÆÒL„‡W;¢øBêöâS,†ÞÑ[aÚ>gǧ ÷¬å 't Nú’xÈÝn‹N³‘äÇ˸eôd\Á{¨]´—ï(Œ ˆåÏÖ»´› Ô%” %±–'ÔûÒ‹ t&êé··´‡W=Zu&’‹±Vg?£Û ‹‚¦ÖV€!"@0€úf¬jpév[d»de¬AwuïŠlèZZ¼— 8)n2¶î‚—LK»–gLKØáŒÙi\þ¾¦®ÓV°¬cFþéŠéZo§€ò® Nš«pÞn¡©˜Ðs¶ËÇü+¥÷«¥URØ\.XÔ€LUr|¨Çvåk+Z*ÁËÜÏ´°±Ó•U™£¹ÍA«Ý5µ›MµÂ'c5z3±Ü VS’ÉÉojŠ]7šÁš6dy5Hv9_í;¹™V4ŠÜë™dëÑ©­[ "we–DòƒIéøU†‰a™v¢3©;˜õïZNÈЂÁ·ÐSq]†Ak ª–Úd˜K“’h{ÔTSŒ~`9ªòÏ «ƒ+©=UE+¬1Ú‚¤€q¸ƒš,Ùiš ,—Ì`¤®F[áL7vì‚ÆM ‚q’j…±·™ƒ˜²ääÀ'Ž•iQ?wžH9JIÌØ‰Hdx£XËœ’G5Fê•‘\à•rjY£ŒÌ%q't³>¨Ïs|Žý•G})nuS¿Ë1sÕ"䟩©¬ÖèFZRÝ sËYórß]J:++;e‡bF\àd¿ð«?Ù–pÈ×  ¾0œ¨5JßWEE ’O"à2kj“*¼ÁmÈ[s¶…woy‡*èWHÕˆcœsÀ+¡Ó£¸û?•XòÛW‘Ta тqNžâçh†Õ¹sƒƒÓÞ³¬ùÑpJ.åÙì!'kO¾AÈY$Ÿ¥dêöv¡#\ A+œ“þfÌ$O‡“ϸæp8²¼GaÄÊêø¸ |€dæqq.颔en¦{kKÙ ‚1ûÖTÉcíZ~³·´Ö®¹G•¢+ɺB=ë•Öî`ÑìK$‚îTàÀ9'µrÞ¿’mrMMÜHY%$ôõÅ)E[ÌQoä{Ž¥¨¥Š¶vmPY‰8W—jþ'°Ôµ¥Õlm¥8ŒaÈÿëV/Š|V—Ë%¬RK;¸ås´~W>¡¾Ê„¹+8ÁàæJZß©£h±s}5þ¦Ï1ÁSÔM+C ¨-:‘Ö©X2$sI"ç#>µÊ%pzã‚&´·AóÌ Lg*B€@Á5¥á{±ý½n™Q! w3íPëÿÖ¬óºHÖ4l¢çZ·i£Í¨“lÏoh-Ôn)–ß°gvïM…;ùÌ—×e$ÞZB ‘ÞºlïŒÒ=ñÊGîOjå¡Ù¶ c$ Zz~ ú5ÔwîûÁË(8ÏÖ•¯¡Rg°x[Äjö’\æPHXŠãn3;Ÿ­ua™°vÖ¸ Ä~½Ô¾×ii¨Ê0ÅÔ.zw®â)ó’ÃyÎH9¡é ‘ÍxŠîõ&D–E`#ŒòÙõö­­6Cý‘ a¶Y;SŸZç|A¢]]ßɧ#°ÕnÈâºx-¥]6(UpþPV;°Gµ”cfØz~–²kÚ°´´MÊ„–b0¢½KN±M;O†Ò3²(Ô¼“ëTQ,t ’tÎÞ¬­%ýÞ£o,×qd«œí£´,êÚ¸Ò`G », ×m%¦§¤‚H\äg*ç *—‰¤Ò%XHiŽ1ñ\E¨‚Éšo=¤»d–ËõíøRr啘7fz-źK‰QXL>ëgÍÔÅµå³ mij "7#w§ãYVþ3ˆEäÝá'=2xj¯s¬2Ì—1¨ÆàN2+h¤Ñ.Häõ T“/™¡Ú˜ã>•cÞMFu(î^eʬAxÏ~½¾žõKW•'º¸ºò¹î Í€+¼ð¼P7†mÙXÊKx½L"’d¥sÏ/ôÉmo„R6.•ŽÒ‡“èk³ÒõXõ+d·l‰¢ŒG2“Ÿ_Æ™âm,Nc¼µ®ce_þµfxxí)IL<ˆw`ñZG³ ˆ¯öÙÈñ¹åO‘Y’Lgºf?(Û ð+{ÄŠ%Šàœñ·½s°â<‡«ŒŽ€Š|ª:mhV“¬âbÅ" ½ ÖÅíȷż*YØd•äŠh~ 8Æ9™qªYið&¸Rç¨-š¦¬R"M*òò]ϵb^B×§&º +E·Ý âBgêØþ‚£Ó§Ž{(®c9WPFz⤞öuTlc€£©¬Ýîj’Jå URr{zÓ.îÂÂÊÜŒdp+=.²²K3  ÆÕçýzÅKÙgÓ.®ÝÉ ¹QŽvzËxsrˆ‘´¥•DcŠ«< Mg,±©'œvÅ!‰ßLÒ¡$“,«”ì{š¿qPkŒnÇãÔš—&Ù-X¬º\· lêÌ7c¶Î‘˜M?ÎàÀ³d±5h€!—9=6Dß6N3ƒÚµW¶¢Q*mX”Ô{•ƒ®ë0ÚÆ±ÍûÆ$m‰;·½twa’1¡b@y¯?ñ e5;Ut`ޤPݲMFíÿ±ß;A+£œUí´Ø$žxÉsÚ»ÿĘ1`]¤ÆkдK(m4ؼmw©¡-5W&‹L‰!XãUsï“þ5ÆSss?™/e'€=…L®Ö‚iœÍ†Ÿwöë´’ 3†Gå'ÿ­ZãÃop¤\º¬l(¼±­ëiþл£ËŒp™àŸÂ Ô.âŠ7Œ0aÜžÿ^³T£{±¨èyeÞŸee©^iÆåͺÊsƒÏøV^ž¶Še¶‘ŸÌV&6ä}+kXxĨ±ñ´9Æ5ZçG•õ›i´Ûi%ÉÕzü…SWÛ©)´z6áï5„&DŽYJ‚Ì#5ÏøJ¶ð¦·kâ+‚x ysBiôRUÔw·fkBÜ |Ýê¥ÔV“Z¼w3\©-–áY)YØmmŶ“â <rC/ ‚+”™5_HD}·G”Ÿœ˜ëBÔnìC[ ‰1Ÿ•{b¯]ø…ç&È ¤÷³D`âôØLï,.ôÍNÎ+˜e·un7”ƒèsSYišUžµˆ¤îX!õÍx¼©ug+‘¤‡]Ÿ„ô»ÙuK;É.^dt´QIÞásoÆ7zŽ…©¦§oR@ëµã‘2 úª€øŽ“¨tÓ•ÀÜÀ(5èúRj6¯m>6 íny®róÀÖ7¨äÒ!Pù|`{Õ”Ô–Ç"ÐC¨«Í}4±àª§=ê»xl\’Ȱ€39Àü=k¹°ð^—`Ia$ñ”äSõKXÚöQ#"©01BÑ’ôÔç,¬4»+9$–â@cãÎn?%ªé¬¼ð°³‹Ï8ÃZ¿$"Ku¾ñˆÐAªö£o)“ì‚Þ91¸–À?…SI½‰»2çÐ%»už3om!#å°ýuÒi¶×öQ:O¨@òÃðTÓ%x,™”™Î2ç ¬‰4¦Ôn ÒjRH#ù@¡ÛfĶ:kM2Tš9µ ûuv9eGû?çùVן§iÚx Œ ÒO¿<Ÿ­q–žÓR`÷Í:óÁäÖ²Ûhöì¢ÛNŒMÆÖ˜nÁúœÑ¡I\©A"0e läb²µýIb°‘Š#ktªº†¦-ô©%‡”©ÚÑXú“»YZ©rÆI1#“ëI´ƒrkùÌm§Â»T³à``J¢ó‹Ûû¢T(!PcÛ58‹Ïñ©„póö&“J{TšY&PIÈPzYjÇб§h×2ÞE R°ätcÅuú6ggz’ìß38Üì9梊BŒ¸Žjõ™ uÏÌd^OSÍh8¤tþT_Üý(¥ÏûTTêm¡óEËÛ¼¾K±FÎ@¯b𥵅¿†ÖkYæ•7K,ƒ”|t9è®ËJ±Ó¡o´É“Ž Ž@ªW:œí)‚±[=Mtòólq'ÊîÍýRêËMÔŒÅÝ™[æ,çÓØV]ÿ‰µV1¿A 9`Gò¬‰5 ™ Òt-Œš¦c¸¸}ò)àzÕØ›“^êwz‚ù×RK;“¸–èõ¬à&[ç©ë[QiRj`wyÏü³EÉ"·ÓÁ7––±=êÇîNyaPæ‘VlâŤªwY»äÖ•¦©^BfŽÔˆ”ÞF2=½ í-ì-"ˆ4¹‡BNh»¹W€E€›n*S“Ø,ºœbX(E%ɨèA«(#ù(¡äÕû›d„“¨‚V9[ˆùSþðìi« \N‹”òOÝ`2MZ¿Pq±œÓ¨à¢w`³¶pª2Mt¶¾‰ñI§”Ž\ý)o|2ÚuÔsB… ÀnëUdIÉÏm¨º ¶’*ŽHxÖ<æì^-±€¤Œ@D'5èÒÙbs‘ÆM\Ðô‰µ»¡ko,Ë£Ü×q¢øØZ¥æ¶Yp2¶àôúûûV§Ÿ+YèöÂÁ˜Àý[ £šú QêÊ–Ú…¢2[Ãdu-H€w§ëÑEaøšÚúÖC&¡4knü¤q¹ ŸCÜפèÍgûé¥È'Ê…^äýkø“nï-¿‘i3ãæy@;¥(Ë["Ü=ÛœÕô×cŽ8Dbºï\)4ïyxÀo¼•û¡y$ûôÆÍm4JHuYœ í´)Ù¡ÚLFΖåмÒàqŸÃ¥96(ÅMÄeü¢B±¥ä`3Ûn‡±ÅlZÝ?ØÐµ»Z \·™Æ+•Ñît-:ÌÞØÇ(y£2Î7HÎ:…Zuݦ§ª2›ù¤·‚F]¤|Í0÷þè¬¬ÞæÑ]Kš§ˆâŽf‡I·7—c$ÈyHýËtÍ^[êúÔˆ×7&åzV$úãúÖûXZèºv59â‚Ñ)§Ã&TŸW=\ûWGd!º† ±n7”p Šš«D£Ã>‹I—í"7y àÉ!ÀAÚ·ä–æRc„J:•ŸÈSîåx-d›l“:Ž"©5™í÷™‰íb´ ‚6ù ÷ô¥ò­XljA"ÔõÜÇqÍ9„Q‚ÒH ûœš†)n]2Q†äŒdR(H´žX$ç'­Vû SrKC9êHÅeÝËtÍ´F€ñòŒšÐºt$ÆÁœ „<)¬)^å§XdU˜€i¥Ü‰2½ØhbRn |’ b­iÓÅ+lgg$rOšuLJ·ÂJNï09úVRÚ_YfvC‘´È5m¦ŒÝÓ:h Š&8@ŽÃÒŸ)W€O>•ÏÝMz¼·rÛAÀyÊúŠ£>£-Ú¢ZHÐ.]¤ÁSè=M¹j] ð.3'—±”Aã#¦¶½>XŽHðà}ÍsO­Û3ªMö°8!×UØ5ÛydXï-ž<œTiÐ¥#^öæðB^8â–02P˜VlRÁyó<Âã¤àUô·[…i,®·ú©9"«ÜZ<Í”@®¿xŽT¶Š³&6v²¯îÕ‘‡CÞ¸mwL[kâÊü»fs´ó×ñ®–â[˜á(wœtçœó\CrZBîåI_™²Xÿžk³›o] «µmµ"Š ²Ì]ê[šuÊ!£Ü2[¨­h-¡†Ñc.ÌXòÄg'ü*µõºÏd@c¹Ivãëí]ÒJÌÂ/©Å^\# ½Ö#‘Ž0jÀ½Ì€å”IèEAujRY ôÏJm¼¶# Ò¹Eêjæœl‹ 2 ç9@h–Ù¥˜ Áa$/SZöÆÖ链@NIíP]E¶f!0½È5u»èsžmGØé‘mI\eMhÝÞ­ºªOd ìР* gïÕ Hd•Ýœ–c’OjÅ;«š²ã_,óÁG8'ëPM|ó°´±s7€àŸz]?K’òC&í°!#pïô®‚µÓâ"4HÔucÔÖÞѸ¨ÄžU{²¦¡(KLË¸ã“Æ?Ï¥OsoVIÝ!S—= õ©’j]1ŽÛÌíÆ+"䛕¶µ—ÏÀù°sƒP§ï¸ìÛ7l'IX­®Ø!!ˆÉ5µ¤Aw£à„´.Z\ûöOHÑã"þñóþ¬ð3[±Ëµò¿x’ *W5Z®V¶ÆÐ…·æ²¼k›»‘—"€zM€Kpí$ÌÉ8Ui#Þ œÇö¥¹•ÄŒnsÈÔ®$¾A¹(‡;¤è ôi7(«™KFË2ê-lBÛ*´08Ë\ø”Ùê2Ûng‘H2­Yþ'ñ:lgNÓ_78"iAÿ×5“¤[šq¹y3/,ùûªIX‹²‡‰¾ÑhÂ;¯ÞÏ9,]¾ö? ¬»a}©,vVò3óòƹ$ÕëkïjË ¶éd'Û’¿ ¯bð׆-|7jÁ=Ôƒ2JG?Aí\rm3d®xÿ†uM ,šœ‘#tbr?J³¢éº‹46¨Û$Â3‘À¯oÔím/ìf†ñTÂGÌ–‰k§X*B¨–À ª“S¾ãhåõ èVšJÙ,B[¶\ùêØ úŸð®$i³X¤’ 8ßϧÀÊĶ$™‹1…öãKo¨L-gr¼nàr@©”“Ñ &p6k$ŠdfAÔ®3ššö)ï/žmŠ©€8 `ŒÑÁ梃·¯ÍŠ£u¤àŒ6ñ;e£CÎó¨¾Ìйqq …²¢¸Ûˆ¶€"Ýi÷Q† ) úsþ5oÄ>%šMfÒ‘eÀy9ã´º\nHÒmjÇPº–Ò;œOË€>\Ö–‘dÖ6¬“]4ï#ÜÃoá^Ká lÉæ›¤B#R –Á Ç'õ¯FðÆ«êÝ$k#ª•(ò.ºçhô ûÖ°"o^Ì˿AÁ¯40µìÛ CdçÌÏÌkѵû9¢t¹TóBã%±Šóñ­iúF¥<%R{YI ,ÝhœwŽä·waL0Íæ$’N7H7L¼º–É„r)Q’‘ž*›ûuµ'òÉK+Rԡð÷=¿ sÜ[[Û2D‘DNáÉ#ëÖˆ'{=Á¥êaÜÜhyr 9Ëð®—ÃZÒèì-$f6nßy¹ØO¥qvíömFh#RRFÝx zôÓáË ,"„Û©WPK%ƒÔžõ²Ž„Ý£¤0«¸)r š†U‚Ò dÊÆ£‚穬 jóGu>ƒ~ÃηȉÏÓÓðªŸe”h°˜J˜|ÜKž§ûµ¢C¿R¾»©Gs*GÂŒ’;×r·7RG IàRÚ]¼ð©v,à€Hä“Å:öä[’IùÛŒw¡nf=%{+/–âLžpd UÍ#Bºñý¦Fhí³‚ÍÔãÒ²m-žbf¸’¨xZôýx§ÒmÌ †5P¸^p{Òl¨¤ÙfÒÕtë%‚U©ä mÆæ20óIϘj-WZ²Ó3Ê2:" ¶kŽÕ£¯ê:ÍÈšúà¸<*) ©±n]ŽóYñì×󽆇çj˘Ÿök_Ã^š´ê$³ÈC2ÈZ©ðÏH,$Õœ£LÄ¢q’€ZïÌ›P³¾Ð3–'‡¦ˆ#êÊ·6³ù@[È‘ãä çõ=|Aîµ%'bŽ þµO_ø…ca/Ù´ð·3îðåTZǰ‡Vñl¥÷²[ù¤'ŸÂ…¬“Ñ ¶6ÑÏ,JÍq#Ã?ï4È"Ó¬™T\ž0E?Fðµ¶œ…#@XýéËõ«rh›ÒH§¸)TGÖ›hžVyWŠ/Î¥¬Íq¼ª ¨Sƒ·šÄšô5¸†åÌ%ÀÉ"½SXð&›&–églíryV–f÷ÍpÖž¸}Ií£³y&†R8SïY4…f™‹i¢\\»rpN3]›áÇ•Lp!r1»jÿZïtß@¡¼‘ÀTùWük¦²¶¶²ˆÇih£“’k;IîZç¶_…ÛfõÛËÊm<~5×iMŽ—j–¶‘0HÆÉÔÖœ»Ù²_<*œp¶ÀÉRO¹­ I"'(z6G¨ © B@bß»Vˆ àpFcb¥žç†f9ÛäM q¹ù }*­îœï7%PðÄœ.+Bâd rO^q\ýõʶ@”–nä‚~”ÕÌäÑ;O ’³Ä°c*¸²uk«™- Û¼Æ# Õ˜æx†0z€¤àýqL}"ñ€{«¶Hԃ墅jNûœ¬ºV¡} y¶™G+œ}:Žiðè—ë ›‹•·Œ|´|±5ÔK$QÄÂÚ0¸ûÎs’k“Ô¯n­ÙV;A)þ'''ÿ­ML†+ÚÚ±·cŒ–mÌMdÛiÓj̬×óÅ$´¨éŸÌS`›S£+n‹¼ì OZŠëL½I5ìdœ’"ÈM(Ôm”ދËdªÓkW%#aòœýs[w–³¢ƒáNå?Ý5ÅÁ¡ÜË&´›k U‰,'²¹XN±s–# δV]¢ò ¥Öo¶ÐU^I:àpC¥ÚÅŠÞ6^F,Ø<àdÒo[kkÇKé%$|¨Ãyã½M¦ý¢òÂJ‘@ˆÀ"²¶–EÁâ[ïµ4,û# Aÿëz×s¢<Œ-L®K FìõŠål¼/%¦¢n!"bÝKq²¶džÓC¹ŽvšiåQ³9ÜÃõ¦·ÓSÐ0ž¦Šä?á)¸ÿŸdÿ¾è«±\èñ£ªÜ–d…B8Èäšé´okZ²¤Ó ¶·nKKHúWo xLðéY¤O¶êáœdì+¬‚Òáä]¿îļõõªuz#/fÞ¬å­ü£ÛØ‹ Èà ÎÜ}ª!à[pÄBîņž‚» ¹mm•æ›*ª¤‘ÆI¬hµ9õ)i[BzÊÇ$õéSÎÞÃäŠÜ›OÓ´ß Úª–ˆÝ? Á~g?áXšýýíþm¼´H¢°ËÔm>pÓDÎ~ôÒ¶ZªizL©;-ÿÚ&`X†mÃð¡;odci^k‰mB(â´^êåKŸLU‹oµ`–ö7–V‘®Ìr§ê¦º©­/Ûnª*°;›ØUkÛÛW¾‚Ñd’IäÈ5ùG^¿ý|ÓMô­¹Ê¥­½­óC6«ôx9ˆ .jÔM}å±i aO–³ãaükÆÞé®LQÄTå[¬Tõ[½BHÜð€¸HŸR}ªÓ»%Ž‹S’Æ$þÓr/eÈŠÖ2:~ΰe½½:§•sv‘´’`WqÐS,î,ì Õþ¥r%¸*"òÀ pašãu/Þß»d[XA!HåãZ%fe'tt^#Öo4à$‘ÅÄJA à¡=3þÀéš½õœ·F'î‰ äe…,‰s8Á–R‡æ!› šì< áÖïZK”ÿD„åx$úTN*Ú>ˆ¡ hÚ­Â%´,NOÎF~5êú…mô<Ä—7øûÇ€§Ûük¡‚Ò U†ÖŠ4U¹¯øÎÃ@Fˆ7ŸzÈà½éY]ËcUY¹5͵¬—zØò ¤k´dãŒúT>3kŽ·6ðýŸM‰°ŒF ‡ØvõÌhnñμU¸cgó!ÂãÓë(–ÖpÅoHÐaQ@Àú rvVW3¿Aã·9÷®gÇ7ÆËÂ×!0dœˆ”äõýuv ŽIé\Öµ¦C¯ë–ö·Œ6¨dlp2j!¹¬Þ†=€,®´{i.L‚䯲3‡À®>•NMÿQídK‹–ˆ3”’„p2;{×T ,>R0 «·q\Õ†‘iá +Ëéîc÷.h “…üéó\„¹M[Ñi§,Ém¬2¦XÇS\î©§ ²ÛÙ\Ãî¤ä¬²ÞEÆyèô÷­?LÃÁ×7h€É ц ymÄ8gt‰UAwn_?ìÐÕÐù’Ðêt)mÖ{Ù5}·º•Á„K$Ê©·Œ0cПjîloVKHäw‰°•'ÛÛÞ¼FMNÏMÖ­%„<ñF…d.¹ëéïï[—¾8´d°Y«£B.3Šní­ Sìz\ºËØÜǰ<¢BOš ¯yâ+#¾âþÊÜ€§ÌsùW’Á©_øŽÅbº¿h£Œí$ÖTFÞ™•Ì ãtƒ ÿQO•0çg«Üø€ÜºÞÚ Bà[‚ÁȲ~ëSNÔ­u»žßcˆdä£wVô5çpø²ÆXƒ)”>9AÆõ©-µû› é/lm6¬€ `s…”CïB‹ì.n§ ´—(XÆÌ6}øäþϵ[ˆG}i rû³´nÏ[³70¹ûJðb‘~xÿÙ>£Þ«êñßCW˜¨u} ˆG-Á²´Ï}Ò\IhùÉŽùˆ÷®ÂíÖÝÝ4’u 掺ÕjpQj7ú]àŒ\-Ü$;+Yu½6í¹€—äȦE£NÏûÇŽ&¬Ùaø Ñ‹ÃV’>d•Ž:…\TÊ*÷ßc9$1ÊÓX™‘IïÔÕȵ«”ϘŽr ëš½sacek(‰IÝ\ä“XöŽ.$òŠrqµŽ9¤Õ˽+k™ofòÂF[9ÁèE¾.B¬R1êÿ ½“ !1–GQ’ÙÈ©ÏÚ ÁáÓ{<â98;ÅØªÍ?Ø%±–xfùˆ` >=@S|Ï à èHÅušÅƒHÑݶA$ ^ w-²[ r7ÌFKžÂ½+ûjiœÎ<²±ÈÝÀc»`Q@lœÇzÍš/*P="»9ôÅ»µã0àwü뛞ÉЫ¦yê­íiÙn‰ø^» †BŒ[žœŠ«w<²7—’œõ¨ð#y9*3Éê©¢•w¸Ï`®yµìÝÂÞõÊç(¤óÛ«p‘’ʆï@+B{……T‚ “…SÔÕpXšNXóœä×Ïd¹N¡bK+÷c…@ –êkâåïdÂ|ʼ’;ÖsܽÓÔŒs’r*K‰EŒäp{ŠÕTm •Ü_H,mË,‡å!zîk¡²±·Ò 1£.G2Hxæ¹­:èiÒù»˜Êy$óMÕõ¦Ô™!‰Y!-“É5qŠz°o±ÒGzú•É‚ÛqŽ6åÏJÑžæ+•=î+ŒÓ5s¥ Mèà Žj¡Ô.g¸yËÏ9áGµ\·²gsaêò´ò’!°¦âŸǦZ›[BÁ\9ùG·¹®jËÅ-g¦ý‘bc:‚Á~µ…vÒßN‘F$ÒyÉ®ˆÝ/"[E%‰în¼É2I9b{šêô ]ø†hÂæ+58–\à‘è=ksÞ-M‰QËEäs^ivñ$PB±Ç*ž¥R²µ‘Qƒnì§£øcLЬÞ+;|3Y,E-ÄöööçÌpJ®1Þ®ÝÞ²~æÞ–S•èb›{{+©&»q-Ë<°r\ÞwfÚ-Vg½”Ír ˆÝ©ã?…,ñïvI_¸‘Œ±)7W@ù‡ìÑž,¡yaÓÐ$k¾W8Py,h܇ÅIDw,HÖ)¹WÆEq!WƒÀÅKªk&ÎŒsrÃ…NJ æb¾C3aœ©Ì9¥ÊßBe$lÜÝAs+MîÁ}Ì ðEA-ì ùr(ïdòqY×·ždAZ0„ÈãŠÇ¹t`Þ[†cÆjý÷ÐϘé!ÓàñRÎò(Fó\Ö§¥4ll]˜º ‚{zV÷ƒ5 `k˜JBzWWwe§jê³G´\¨1ã"¦p¶Æ‘Ôò½JÆX•'…9¨õ[)­oý"dLáÎ1zïeð”«p×v—æ;’Wh(MgÜÙßIZ]ÛåÙJ’C{Öm4ù†bÛˆK+–™P¨ù“‚G½uó„Ó¦ŸË\"Œ ×-¦\ϦM=…älvŸ”8àŠÐÔu¸Ñna·‘A :‘íô¦¢µ‹ê'Ð㦿û6¤nÕUa”üñ]‡‡<] ªÎ×òJ#`mµp©2ÞBпßÇ˞ƪ[M,´giã'µ8ÆÌ­Îž ޱç[4† €)q‚k#Ë‘ÊOäŒzŠuú"Û‚_æêr*==šiDrpŒÊN«NâVµÎ§NÔŽ¢±Ç½¹–2<Çqò°è°[éÚå¬bKx·ÇÁE(¼O/§ßoŠB6œŒsšëôVöÒâ;ä¹ê0èô4ZÛÍý[‚Æî-IÏÛa€xW‡ ÿÖ®êÞ6  Ø ¤tÅ3Ož¨b–À”„óZcj¶ äãH§{•ÎZðÞ u(õ[EäDn'€ëW5½1çðÅÊÜ6/šr1Ít÷7¦¿( N =@¬ÝZH“J»¸•ÀÉo˜œƒ‘O™ØN)_o/’Þ/-Ï^¦² Ü—g÷qœ‚NsPXßÉn^ܱÁbG~jã–¿‚XÏÏ­-™™—ó_ÍäÛp§½ õz ÿ±í·-ë ïO‘DL&e3 éQÂëwr$žNo­=Æn[Þ$Ì÷3’òž n™¦O®jÊ#C/Í‚{ú…f]\¼·(Tdt'ÿ­^·átÝ)ýôÈÎrN})X¥©cO³´ðý¨†6ç’ÍŒk‘ñ Ö§®\ý†ÊŘdƒÞ»éôØ®ÑLÎÜÕ¶:24pŸƒ±NY½.¥;˜ú‡­t0fÔ¤i%+™;(ÿí­„ kÛ¬~C(*T`ô¯7²ÕæñŒ µÊĺz¬„dp}}Ïê0¤pÂPª£ð‡w¢)$à(Îz òoˆ:ݥƣonò»Ge¢^r=O½tšïŠâ’i ´ŽiÖ21Œ©?Zó]nºÔ®/…ÂG 'qƒëJ)¶Lä…mvêñLv›-¡L.OR+*[(U™¦»Lg?/$Õ,#ÌqºIjá–W!Ab{c9­FiÜÜCåˆãŒpÐn‘ž ÈØž‚·tOkÚã©·°u‡82È6¨ÿïì> Ú¬'ûBþS!_ùd¨?&û–“g¹z‚sÅ(By_”c“ÎkºÖ>˧êK ¤ÂxNãÇŸ¢Mile#Àa³SÐM´QÒ|m}¢Ý´¶‚1µ¹R}}©Ú玵}}<¹åò­ÏNý}çþÊf¸1ª’ìÇ Û›i-¥hØ «`àæŽ£-!$ 0PÁA9àWÒš]µ¥–•h–¨†5J‘÷O¾d1…‚97e‰ Šõ/iZŽ£ ¤ÃW¹ŠÅHsÿê¡« ‹¶Ç¨ý¾6Á —“•CÀúžŸJ M«ŽIН§Y®›f‘€ ØäûšÆñ¾ö6Ò< ç2©'ÓÖ£N†—[¿ÔÙÄv1 ’Ž0¿âj_ ^x&mIaŠáŸ>`èÃúW3¤^j:ÔfEÕmA<íUË`ÕÙ4HžÖI¯5YŒKÊ%Ú¤þ/@ZF£¬Ú[@óG4r•èªØ®eµøo$cw¨$H3ˆ¡b ?‡5Í-¾Ÿ¨Ý-¶ž¬îIîÎEuÚ?…­ €Ipà•8 ·ªJÚ“vØÍÂÔÌÚʘ˜å·$~I$Ö”Úœo,6Épðolaó‘ý3Y:ψ-mçk+Yº™’2ÁOòÍrK¨Í-Ðp“'!ñƒS'aÜõŸ6(ÀÉbFõÍ#ÜÄ‹» Brk‡:Íûª|À°àæµôË[ë¥YD[##äl“øTó&슻d³ÞMtZØÃƒÐ®âÆ«A¦ê7 ²]K Ù0Oç[Æ$ŽEÉçÏÓqI-Ó°$!#±8Ÿ©+B)8`1ÚlLe<šç56›‚o%”œ®–K`…~Ó *vµEdK©X‹ ‰*ºçh¦yúÒ³W9Í“ÌÞ^ùÔ·‚@2xr[É€’ú@ƒ¿l×_ %0ÇÊH‡ –5FÿUDV·´…žN™·(ЬTµÐm¬Spc!å‹rI¬=Fî/ 2@è ‚®«?*³5ôê¢5ŽIðXU„·&BE«Ž¥ðM'kØ/r¥¶¥kh†`€ `šK¹´íI–F¼ò “Éÿ¯V'²¸¼e2[@ÌÁó2ET¹Óîì$tÕ‹b>§ò«Ò÷¹¥¥¶“oŒ\+’I#9®‹äf\qÏCÎ+Ïl¯aµ™¤¼Ò¤pÙ1ëÏ~:~5ÒZx·KvÄ‹%¹å.ëé‘ùÕ±&tï:[ÂÒ#‚y=ëÍoukYÑÑ\ÿîÿçÚJ+[#+³èw"yŒ–UÈüêþ@]ÅNq’3šŠ(‘A#i$ö© NNâ; ç:}J“Ø%ør-NqëR£·@#U`v⬛–w’N1ÓŠÌÔƒLÌIa^¤ÓŠ»Ñ\æ5¿ÚM+ÚDñ€§ò ?ÈÖe¶Ž—G<å±bRT|3}+zâÎÒÇr² @2C ’}1P\:ZÛI8_ß0¡Æcü°+{+h`ÞºÏxÊ4ËÃLM9'&¶´)´ä77ÅP¤3È®+J³fÕ­ã†ITù€¸'9šíuÛ›¦)–â àdÿëQ5gd8»êgjÕ´³¼Vˆ¯7·P c_Ý®`ðÉt¯q1 äüÀ{Uø,£·c!tŒ°ËÉŸÖ°îÍœwø@r¬|É9É÷«„Lç6r—Bk†XeÊÀNBÞæ¨Ki寛3 ŠØ8Å]»•’ì’þaêHþB H¥¼™d™@FUzsVB±9:œC]o‚üWkáØeµ¼Wxd`CÆ2CWq:$$“ˆÕð±4Ôa°0 ÷¨–º2ãuª=\øžZÛI·df÷²Œ‘ôåó\Í%ä—»<ŒÄ³·$š’REÆãnµ ¸3FIÆÐz …l76÷64ŸÝèšœW0 „ðëé^»áMüQ)Õd ·‹1Ãl’ÝÛúW„y,˜Þž{úF¹³Ó|ow·‚ÌJÅz– –üsQ?ĺ{›h/xÖñË‚äuô¬j–ÞÒî/ šF;A»žƒè)|(f“G[Ë”ÙszÆy2FzÀW ã}YumemámñÛüˆp[¹þ•šµìÍ%+Fç]àynnô&¼»'Ìšglï\ÏÄûùn=2acÌ”„ÿõ«¶Ó MÂÐG!Á·€¼™õäšñSQŸT¿¸žG³šÒ ò¹œÝ ‘ßh,×ÿ eß{ êr+ÈâµV”Ç ú„Wªü8"MþÍ›#Í-@ÃùW^Û´F §ÕIjÑ~êhÍ:t÷7‘Á 2w…y$šõßø_NÓü µ±‰%·E>io~{Ö?í!®._V¸ ä[äGžíÿÖÜê7Úï…ujK¤È ‘ƒ¸*dìÍ!®ç…Y“§jAÇúò+rãRkøv›˜; ñY–¶S^ÝÅj‘–¸‘€PyÍ{ øv?Á÷Hˆe0–f$¶*åe©œS“ëS»[{tifn1Ð é<£Äæ ܈98ù«§K¶”“$`¶8aÁ¬ÎÆ‚Á$w­1"äárÀãêúôÔ†ÚÙ­!dó÷”Ô±’@\ü €ÀŒf§AóÍ’}ªù“|¤Ÿz±¡ú‚}¢ÅÔ/S;“\í¾-·–ÆãóÍv˜± pÏ=«˜× di#L’À°ôÿ­]8z–¼Yc}LÛVSlc)¹ÆH$r:V>£h·³º¦â䧦U¤-†ùl†9ÀÍ>ydbvžYŽôäçIÝ«KFqzž‘-‰~TŽxT –$l0Jé¼X~ÓcŠ®]NY»•=Ƹ»iã·™£GÄMß§*Ž{õ!ÂÅ™!-7˜9 ýÓÀò¢0Iñ‘ÔŠ¿!ÛcBXð6Œ“Vm¼5{*™˜,g y¯=üv4èc-âÇñ‘ÔSíâ,ZIH#Ö͇†¦¹º |û# ÷©ú×Lm,¢ 0Gµz€3ŠèQæiö¹ç÷ ±I<±ãµ2ÚÂYÁ! SÕWwªé÷6þt(u•€Æ@íXÎZ%HÕ‚’~QZ¶‘&Dö$H©#€r2£µ^0DˆÅ…ŒpHÈ&¢²†iîß+ÓR+²²ðóÜžì¶ULòÇŸÒ²snW¹J:Xå´mMUšH“j’s#tÙXxVÞó`ÃÍ€DÝ9®O±µkUŽ•! b¶ !‰R5EQØrjÝv•‹T“Ô¥e‚¹ËÉŠuðk‹m±™cŒòåF«H |àcxÅT¾¿·ÓÓuÌŠ  …MB—34q²Ô¯ †ÚÈÉ# X@ÁyÍŠ§i=¥ùšâÊ2Ê­´Ï ù˜ÖlK/‹5ç)ŽÒ ƒzþµÑ\ùVÖ«a§ÂSïTö³ÜÍk¯CR»kÜÂÎÝ¿º=Mr—ú¸ÓœÇl~Óv䇓Ùô­Û­&þè›hç)9’SË?øT0iv,Ò¹˜¶S#<ÕÁ#96s7ÂäÇ܈ʰI&™ebï|#ÃÈË÷W’¹õ®º{iu˜ÂùfÚÉ`ycÓ¥ìô@ÐØÂ¾`w<õ5¯2Š²ÜŽ[êÌmñEi–ï5É`vãÒ±!ÓÄÂ& obYTpjï]žêð%’´Ì[%Ü`gü$ÎmaÍÓ‡u8À?Ê’¾Ì<Íûg‚ Ñ#b@ൕ|Öw«ÅÈÐDG!°¤{ý hx“Ä6º¥ôV"YHIaÑIí\ýЉ#‘H0§èh±ÚÜçî’-€–mFâGÞ$(Aà*”¬wät©Ü†in¬–YZsæ3'¹ç55¹Æ ÆGCéOÒì$½½Ž%Båˆ  rMz~‰àhÜꑬ²pˆ˜õõ4"_c”Ò4©DÂ6ygg»Í+ijéÚ|v7zuÑdRVXâ-òÔÚ–»¤èË3E#8ÆI…c›¶QlÎê\Fª©‚У­Ø¹­°¾ ø‰vð¼ze„±(‡ROÿZ¸3®êQ[M'Ú2óYËeÍzD“ϱŒü e²?yN¤ažþslŸ».J…¡ÆÀ¤Û&‚î8m—ý*]Ìr苃ù×@þ7ÖOŠÊ+ÉÌKÁ 9+éšæà²™X…Êô;† t¶~¾š1´*„¾o$ÔZûÖ#¹ñv«,I¶Ër£`“ëYñ}¦^g2ÌÄüÙl‚k¡Ó¼ ª_NÁjyÉW¨xgÁZv‰ <ÖÑ\]‚I•º¥5h¢¹9µ<¿HðV·©°‘m v “°úW«è> Ñ4XU£ˆI9t޹$ÿJé|À#Evõ¤.~ó(ǦjÛ-AD¯>å–ØáÈÀ.2ULê­wy½†2~êæ®¼«¡ž›³šçu«¨®$)%–Û‚ÇÔЄÙ,—ãí¦8Sr¯M¹…rúòXkOL¼€#€M7T¿×cÌ a0€2L1Íc´W÷wQØC¢CíËH•¤ÐÝö%G¹fÿ@ÓD1ØÛÁ\:æÁúŸjä|Qàéô½1¯ÅÌrª°WP0Gø×¤'‡bÑ”y3Ëqy ݹ ÿß"¹/NϦù2¸26@RpG>ê⬈“³±çŠŠÖ[J°qÎq‘]o‚5ÝGGq ¼¿¹•Žäa‘ßò®VÚVµ™D ˜Ï> VÍ Qyà ‘ž´ÛÐi4zÑñ Ý,FIq¸¦p ¨åžˆ‰d]§ ŒŽ•Æk"îÐÄa$ÚíÎ#å—4ë#¤, ÝÙê“`ܹQô¬MRoScO»Ñ¬î%/ »É$„9XøTÇWÐvKФ¹’`³ÿ¦ÛÝ̱Ð^,¯Ѝ¬é`ÕY‹²ÚÄÀ’K1<*ºa-µ›‹+˜®,tV@Œ9íÅm_êšüÑ>ϲÛÂʆËk_·]Á[kÁj @ùïQ:ÖDv¿Öäc’¨ÙÕ7ЋÅw:‰¦»ŒR~™¨¾É ›ÖL.b1úV-æs,Ëäݘ!P™f?ZKaYô2îu;–‰ŒÑ©|q6âk"Y5[Æ>X‚$^BŒž?­t'CŠÞ÷.ãÐð ¨n$†ÝJ®:…^H£Ô–ŒH­oœ+ #‚vâ–H/AK˜xÁ$&HëM¹š" '’qó78ªHò9Æ23óp/p›³F(®öôÒNx1úÒO¦µÃ#Üݱ)Ÿ˜ðïQ@­XHÌGEÝ*µÕ꺲BàäÖ®ñ@Û) ›hnÚt’•b náþ5¤Ëk{“,hàñ€5Î5”/"´ˆHfÎ}+Itkd`ÑoÏüó|b¦VÝ[D–™5¤‚ÒùÒ|ѳõô¬›(§žæ(Ö)&v`g$ô­{&åã»\§æ 0:õ éšu”³[Z¨*0vcœzò*ã-ËÌÏ>ÿ„kYÿ mÇçE{Ÿœ¿óÌQOÚ2ý’9k­u¾hìm$¹2~UÖ’Yu˜`72Ïml©‚P.ìBOô­!öK&RÛUÜàÜ×⛽VëV`‘<öpàîÇ¥L#'¸§$‘»«5íô$Œ8,7ŒßZèÛ»aÌ Þÿõך[j·°Í=Ð9. µÝi×ÌÑ€UC®­5¡œ&ï©ÎÞéW×>&µ–K’°•Y¤R¹Q·ïDZÌ-oÕ”D¤°Ý‚Îycü…u·/öTòåu>k’pœW/w%¥çˆá²7 ;»''$ÖŠ\Ë]‰”llxR0ÑÞÕc™† ·%Gÿ^®ë—ÛÛ²ÈåZFÀ;±óïRݘ´«GŽÚ2n&á8$ÿ@+ÍæÐõ=KT77Ò—\*Æ“þ}k(Fîý “åºTV¶’ØÉ‰˜"©,äá9æ¸=JÚÚÜ•ŽäÊç8rpq]·ªCeÙ£€•‰A¶TãÔל]\Ë<ÆBp’; 艋ìOpƒ>T@ÀêM 3EŒ\ŒgÒ©y¦,8$¾Hæ•îÃ(-Ô)“a’²Æ‹ÁÎI£iÊ© ž{y¨.œJq–=°9­MBûHiï®Ú%#ÌÇÚ²“H´ŠO(Eýãd‘ƒè*O°N' ãr¶8®ÖÇÃ6(<Ë‹3$d×"«jp“6s£ˆøŽF=+kïòØj:È‚]ÄÅ»2 àŠôO Z½ð¶±ÜâÞUHÃ|¤ á!LX z©àŠôŸ•·¸"æTIò—9#©557C‚ÖÌêœ)`g“X6ë}u3Q Œ’%ÏãÚ·Ù$ž 1°‚§yß• ³MenHÆ $ÚØv3/4¯2ܬ‡~CÜEVӂʲÂZHæŒã»Ö¬W6®Ó  #©8Óej³‹ˆó»Én¢…w¸´è0£Èæ@=xz yAšvdúäñXÓê0ZLÄÍœ’ ¨ÉÍYdBÄ)!°Bž¥Ì‹LÒå™cWãÎ(òÝ`¹ÍVŽ`‘†$æö–hòÉ„‚¬.@Aˆr7äÕ•­Æ­j\rb98ô¥/ó‚{XŽßÎ<ÃѲpIæ…î»»«5ñšP¬$Cø:“Yæe„“ó2õÈè tzë­¤o@Už¤õ¬;m6Ym¼ËŒE9U?xþã^“jp¿C‘Ý;$­ª«AM¼ ¤cßä×9'‡.WP’ÙÓb[qçã]}¬‘YO€vî^qÎO5iî!»²¤D™rT±Á&¹*G–ZÂZjgè¶Öö¦8cU,Ç“EÅû,‚œç†nV}β1šÅ7¯ )ì‡ü+.êᯥH䀸 Ìã)KR¦­±½ݬM‹Ë ï»8ÆIü«F WMy’4ÃHçäùzàæ†Y›‘”çë]W„t†Ž¾º™²tõëY+Fæk{º a4„dª’;ó\°ßq"¬11b®k¬ÔìZïNh_(9°äPZ[Zi¶l-Ð /<‡ÄÖTÚ±rWc4Í+Y&T3“»`è t ’ÊÃÌáwd ä\køL·‘¶\yò–sÀ¬ÛÏ£¸Y'wRw,àøP¢äîØÔ­¢Gª¤{W#†: ÀÖ¼q§èw+làÏ0ÿX#ꢸ‡ñÍàµ1Gu0ÝÔ‘“TßUÓn6´Œ›ØeËI­cK]XJ£è޶çâžžÑbÒ6AæTÀÌKâ{ÜMu|$²XœÖÖáTÖa7A·sÄ…r2=+fO‡Ú0Œ¶só…É«‹Œ„5)­Mo ,0è5¿Î%ÙÎMY¿Õ-¬Õ‹È»Èùc,j†Ÿ¢Yé¶¢ÚÞ{ˆ!\†^§K è®ûžSæÉi°M©»²“iYìþ#æI"€l*#pkCLg.îWqí¹¬½{ÃÖžL‹§Êã ËnúÔú>³¾Ê;k–Í…çî‘ëZJܾê2_¬5­fæÍAÙ :·°®JçQ»ÔßȈlˆ`ŸSõ®êìi×V€]´L„áIäƒÓŠÆ½Òímt©Í¥Ò)Hi9ÇãQYl6µ1R°¶ÞsØÉ5‡s,÷E¤É‘¸ã ~y¤’ÆÖåçH1€9š’ÓNiØ<²„ gk V±NB؇ÃúT÷Z”`Æ|°ùÜFèz•»YÚE BΧ ’EXðæ“o ­Ñ%žEÞ™è ÖøŸ!Fz+1YM«Ù£u©æ‡FÕu)ŸÈµÆ†-µøþU»¦xTÛC›É·`äˆÇýjþ§ªÎ¢â;üLj…!†=ÈÉ˨ø‡Q˜Gh%uÏT\.)Is!hŽšçS¶Ñº&Pp <æ¹ùõ»ÝaîÍ $g ó[?ð-Ū>»t°!ùQžIúšA¨èZ"Óc]ÇåßÔ·ÓÖ²JLnËs<+©‘*¨rDœŒÔÖžÒ`p5ýëyjp þu².o5(Às® V9&™m ¼í,‘Û$×k’p9éžâŸ/.¢½ÄšÖƒË²·Äe¶—#$W5§D—[`Mò2àŽ¼Wiuq Jñ+Áþf«^½¶‡¶8<Òß&¦úŽÝÎ^ÏÃΔùJ<®I4𵕥«ÇÌ—`x>ÕzãQž}ÑïeV;rrÜ—•­® W òr«‹lLÌHÄwqI&ÞFÃäƒZz¬JÊ‘“ NP+>ye±¸Þ÷Lr@ìj d4Û.ÖPC€¤ Õ‰»ˆ%Ü”šÆ:篽TÕoÚuê@Uä‘Þ« dA‡æØÜ1þU£wgäksTR½QqèÎ}¹Œ XÊûAy4’¸ì9ý3M€ ¦¥›t=áõÝŒZ„¬Ê ‘Dyà’HÜEhxׯ7P,V–ɪYß9%}+Ïü8.»j‚e‹,ö8OÆ»ýoÂ_o)$|:d øÕ¤¬a-%c€ŽìË1uˆfÊä–#ó®ƒÃz<Ñê sw¹òAÈóÖ·ô?A¤D×Q£ÊĪ>2«øzÕ›Xú`³¤‰o¸g_ü?R_‘¯jñÛÚÍa/)*䓌êj-Àúޤé$0}š6PKž z²Œý¦ iRàÁ÷ùð+aæÞUš4ùHùW5”ž¦±Œ]#ÀV¶(À·Ú/r34œíú]M¾œÌþw@ \øTšUÚ%@ÑùŠpäŽI¢ÿZ†Ì²‡0òÐp>µ7–ÈÓÝJì¸($"(±ãŠÏ›U–i e±ºu$íAøÖЯ¼M1¼Ô/æŠÛ?,q¶ÖAXZm‡• {þ4Y-õ ·ä©s ÞÈ Çd}2îö(•‹°E‘šÆ¿ñVŸò㾈¹à±|Œ× ®jvW·BAtòHs’$!i17m³SÕVâÜ8‚"pA;Kð¬hõ6K“žØc dšÁ]:ÆåRkAO;LÙ#ð®ïÃ^·±–=K攸֖êÌ\·w4´Í•D÷c͸` iB*ó¤6ï!…’R 9b;ŸaKwv¶À'›ó0%TŸ×é\¦§kt²@šF%¤Ž`¤ŸO¥Ý-»Ì/xÐF±\»Ey÷ÄÈ–-OO–H¬WrJqƒ“Òº­*ÄøkE¹»’I$yWvéâGjó?P°k‹‰ÄÖÍ’9iìÉg9wah.¤Š7&#Ê2žªˆóØL¡‰1•&£´¹y!òJu'žÕ Ÿé°2•ÚTcš{n's­&÷VÓ¬ÞÞJ`¬¬AB~‡­kÅw¯>Û;O€c—H÷`WáûÙtâ¶·77) %#+&Õ ÿ×­;˜­e¿š /ÞØõGùœ>aÛ¤¬T]ö5®ÿ´YÕF®ä'(¡E\Ò4 :ç7zÞ¨Ïc&'œ ýkÏþÝö–Žå¾Õl¨Hõë[©â´åi!Ó`½²‘V`XŽ:sœŒóJ+­ÊØî-­<™D¶Ž½”e±üé·ºÿ„ ÀŠEU!]"ùXÖ—Œ,5A ŽŸk4ŒCG;âF9àõ§÷ Ú}Í­“G'>SBäž8©Ç¸6>ÖâëPˆËm¤ÞJÜ1Æ6‘õ­ xµ‚ìÐ-#‚k2ÛÁ·öòyÚ=íí± ÊùTŽØgŒúŠ‚ÿľ1Ї‰$™íNŸN Ê£u¡Â;É·ÕÞÜN¶–ÁTç&\‚? XÄ7ìÐ%¤P©?1V`O×¥p‘E%íšÝø[X>óIkq.LôíÖ¨AâzºoˆþÕdá°Ó¼Ò2ø cßš=œo¡<Èô?#^ž™àòYÄx K¤Kwn|èõ [˜Š•Qò犧ká*âÖš½ÌñO’¬%áýG+ÅÞGh5-9M„XûLSóuçò£ÝOq»ÕÞ¯tò~ÉË1Ïõ®~çP½rCëië  ÃK-öÕ.`·.Ò.GÎr? xЭ|¦+jÄŒdcŠÆU„ó]I† ©–Èä g¼W7s2‹ÉŸ%UÁþU£iáH¯ÈcHâ;šÕMÞÊŽÔùYÆí¼ÕF.Zßò%ìrbÒD`óÌÀ+ É"­ª;¨HòLZ—:lE”óHùT¥Áps($ƒÀ Ûé[%mŒ÷Ü¢ö2¬bfžXž@ª£HŠE‰êÅòMicY#sæ Ž¾fqX×– ­(ŠiŒÇ2½®;¤E•{$«öI¼À2JIÀ?j¹¤"˜Áw“ 8BNTþ52=ª ûC˜Ÿ‡œ è­­á»··,°Œõ泌®µò4lÕE°by$œ×W¥\ê­´v–ÀªíW–C€1Ž‚¸ou£š ÏhyxIË(ö¯EÓ/ãM6ÊâI„víl £ ¸ïtZó:²^Ïèÿ¾EGþ/þcÿ¾¨ª»*Èç,,umkW—PÔ¿Ñ£_–ÞÎÑÜýkVööËD·xãe{¶rIõ5-þ³Ð[®dò_§½qò$¯u(Žs!Üìdäy'ú Ó}Ìt[4ñ/5Ì'qÉ*îžÉ™#²3¦pXxtý+’OÁqu’Þ<3·yl×q{dd…Ä «"…(1zU¹+Y£­ÅÔDq¼lí½åe…TsÔ×âY,tZ{«´2Ì’1ó•Ø_ ¸t :άÊCƒÍsúÕµ¬úô¢õ3"¢ùiqîjª×˜iÒßßZÅsr &ê2Jw¢¬¯îmÌ™ı•Û ŒuÏaN¾×t‹yVï\·kœªW3Ü fˆœ¨5¬Ö†Rvg3s§]\[)¹¸AåC€õ®_S–Ù¥TÄ ë]n¹¯kq4“ÀÌqÄ8ǽqe”±\œcµd"ˆ›s§x-Ò˜%BÇ''ÐÔnò†`¿ Ö†—a4×Ð%¥±»•ˆù±”ÖNV5HŸJ´Ôï¦Ht«g‘ØãÌÛ…z&‹á+/ BšŸˆ¥IîÉÂFF𧞃¹÷®ŸLÒWÃú0™î ‚0 Rišh¿Ô~Óqqݽ†~oA\Ó¬Ô’îh¢ ¬½â³[i³:Èܘ{×<òë 4ƒJ‚ >X’wå^‘µ—% Æ9¬¹äŒO(eùÂÁzŒÒokãÝœˆü8í^ãPI\³dÜš¬ÓÛe‚ÎPÀà0=«ÓQ½/Ô‰…¥»·¹ÏsQùæk€ ’Êp0 í«1Z_³ V0s‡Ö®«]L¬È¼N1U jcKî ¥š[@ K]y%È›îˆó‘]êiV6«ç_ϽÀæ1Óük^Ð­Ü Ú[àg€)]!êoi0Ãm£ÚÃ0tÅ>æ!-±‹ÎØIä©Á¨­Œ‘@#šE 9ßK¼3ȃÉ+'{š­¬g/†-.%3LdÀlŒ9Á5 妙bIs ‚Ç9®‰Ê„;qÀ¥pž$Ðffk«{é[- œÃü+jm·k™M$´1µ^#)¶·Ÿ”Áp¬¸þÜíWŒ)ln+ÐR¼Si"FHÚßÖ‘/m“z>zmâº}Ënb¹Aö¡º Ú6U «(凮;Q”—k·iRkæ2È=­ ­dym$aŠI'Y£Uº½·SvH#Ÿ–•Åd†ßizs[I½Gê+ÎBŸUiYcÞ‘Œ{ס˜[R Iq;}åê«V–oCn¶ñœm'ï —.ÁkžSq¢M¤3 U ÖíÀ‘yÚ}ë: (5 NŸ嘓 ƒ€Ezε¤Fè,äðîkÔü8Öó,úRL“ÆÙ*ã>Õ¤dCV8›Û9t»¹­¤!Àm¬¬÷žAˆ3y}8®—XœêÛ¦¸ Ø—¤¬#ú×=qT‡ ži±Ä« fWÚ:õÏ¥K(UR ާ֣ILd㌌fŸlªÓ¨l•'(è[î60ÃæPF9Èí^Õà› ¦ð„W— )‘Ë.æÉÒ¼zúm®6=Dž⺿xÚóD´óh/-YœØûú{SM‰««ž«ymh¶¹F,HùT.qY¶JoŽà®¨A*>ð®Iüc«É<ºåR(× ]„5›D¶0O Ä÷ªùfHËq×¾ióXŽFõ:ÝSUº†ÄE§ÀÒ\²ç2!*ƒùf©éV® Æ«zȼG·hZÝk”‚Ô¼ªÅÈá6ô®Rö}néšId·¶I( nÀ¬žššù § ÉŒ³\Mª‘…öí5 ‡†"ºT--ÇÙЖiC¹ÏÖ“FÒµMVÿμԜÚ@AØ" úV¶¿¨³@,íˆH# €éV›[“¶·4­µ6Ø‹2â!ô"±u½n-YÚÆ mJŸ1³þßJçG†EÝòÈòÈÊA-—Î+a<-¦y$´G È$’Ƴ›Iè4îµ0-4="&’mGP…ä,0°'ñ÷­;h4XáYź‚ pM\·Ñ4̶p¡€W¤ŸHÒ•€d·Fðj/­®;£KAðåäqÞ”¶’0§ËRó]%ܱYÛ™A(99ªºqµl?f1ˆpè+œÕµø/¦k++˜Qwm.O,}ªŠé¡SUñ˜í$få^c• !9ÝÕ­eá ìa’ãO€ÌÈ‚qƒ×ü晥x`%ÊË$YÇ9 rk£™QT™"¨$œŠ.5¦§ãëèmá³ÓZèC¥È$œ(àW˜ÞêÓÀ’[Z_·$Œ8©¼W­G\žäJ^5”ÇÈÆÁÇëYÇɸÈRŠ d“Í2ëcpÖÓÅ2”Üÿ6ð=«NÒñmåßµJÈ0AíTn¡ûK&Ì:`t«0Û"Û*0%òA“DÆ’OSzÂÑ5k©!“ˆ˜}ÑÁ>õ¼4­C@±aýŸ­§¸&<ø~¾¢¸Ègº²e09B­ŒÈ­XõÛí¤5ýÙSÃ(8“`’KB®«ö7žAj y’´® ûUYôÄŒ$‹‰ÆqIpâáŒi1“®á×52ZêS2¬!Œs2E %U–íâmso0u)dRbä˜ß”aXúEè·Ai$~]Äcìâº{–eÀ$žã=«9s«4Y°¹‡P£0ùSÇþ²&þµEߪۖDŽÜˆáFl(Çý* õ–â?>Ú_.ê!º6Çcê :ÒÖÎõm®çµFšm®Ã9lÚ [¡Éôd?Ø«ÿ?ÖÐdißóéýûV–}Åt2ÒÆY“Ìl“œxÅ^H–4U'‚ÍÀ´§ž+hCœ1|ƒŽk>Â{ÛÛ­û#‚ÝX‚ÄîfúRŠ›w‘›IljiÚu´{&,ÎëÎÇ5.¥~öÑ3ªn'< 4ryï&ØcNÔ×™ë¾7m_XM;N+HÛÜ­ôö­b®õvVG¤¥ÊÉa£(ÅC|Ü\çˆe”ZE4«É3Ä|¹ZÀÓ¼DÚ†´ö6ñ4öVƒir¿ýf›ã]fTÒR0fòãUì;þ5Z#>kœl—H5ã4…¥¸-³•¯aµ‘u h¼ ¢ÙÐêpH®FðÔX(ÔR]†pÔÖ•ß‹âEK &Ü8i=‰öö÷­lÌ®¯qþ'‚&†X`É·aƒd±®.2©oµU È5¿v¶ö¹¸|ݺ“9=ëŠw}ChfE\ØûÍW- Næý®‹ŬSK ¹Y2ÃÈÏJôO‹›ØÒÙ¢D‰w˜ãHúŽÕÃh]jR5œI#ÂOÌAÀ ïØ õhVz$^LQpË—p¼cÓ=:ᨛ–§E4‰®bÝ»\$­ xXã_ùhÕOK”µi†$±Žì*iàgCó…$Áç ’>X­I˜mV~@¥èn–·¿Ú9 Áäc¡ªdÛ[´4ê ¸’kô­jCÞk>TCåÙ{Tý;Ö­†,,¿xU¦“‚Ï#dš­-©:¶T:úÍvm4Ëy&pØr¨p>¬xü)$³•Œ“^»ÆÎÍÜ[Ìa·ˆ² UPI 0Mr÷ÚŒ7ÓùWw àþéNæÇáÞ’Óa5Üãü[ÕÄHúe³Ê";œŽXY/ö΋Ψ ®× 0Šô¨Â!XtÍ2æ`Ã&@¸Myµç›¥xŠïO†¼ø‘QÎp{ãñÍj“Ý™2O\ºï‡Ìeº€•aœ`Vޝ{uo ½ïÚ§)êfŒ?%r+ËØêPjXDê"¸=†zWJö&öÂHPÆL¨@Þk*•9ÉK¡ÜZxŽ-bÕFiÝÃ;«ãï{AZ Š2®ûä`78à׌øOUÔ´]bm2–2íó©ä w¯QÒµhžé„îU˜pÇ€O¥>d¥Êh¥}ËðÁqùP ‹,vdg'ûÆ­›¸m×Ê’RHêG$ÕioàYvº3£wQjØZ»DW+ƒƒóôªIõ*élFºßjqêr>Ö\íd€‘­™$ŠÊˆ¥ØŽu5\jK$ʉ e†r§ ;1!äpÝMK)[¡œlïõÞd­däÀö«ö––Ú]ºZB@$rIîMAi¤“Ë%ä‘Ì<´BHòÒÁ¦…–y]ݤ•²ÌN0=)ZÀ‘fçQ²µ„´²**0NjÝä ž|ÛŠªäGÓ×ëYÚ» ¹†ÎÑcù2ÒI ÈSþ5CNÓg×µ&¸™Í»ÆHóœAQ{»ÛfôÄðý²+ad–ûÛúõY^mRâI‹0‚5 †ÈsÜŸn¬ê’ù¢=>Ñ—{pý¶¯ÿ^ªX ¤¼KhcAdù­œ¨ƒÞ©«è-nTM?í7òK)œ@ caŒÕÿÅsˆ|C ë·PZ¥Å±‘Jäíã½z£{ ¬ $Ò` -´õ¬+Xng‡í²ÆÅăqa©Ø{b’Œbï`h³¥x– ôH™ü©Ä`½³©WSøõx‚»žÍ &XÎé#þòžãü+<í=Iî~ib¶% m ýØúÐV 爦¶Ö¥ûM@¬È ÿ×FìKm§«Á¥D.Yñƒá2>‡Þ¹ûÝLj¾C[]æE`V 5z Ý+Z¶’6†;¤Œñö…YÓ¼9j‹ •Lq(o¹€}9éùRäŠdݽ‰ît£mb$’Vb nä ]6í!0ªabäšÖŽöÃR{‹4pæ?ÝÈ»¹®'QÑ’ †¶W•±Ú `Ï56H§¦¨ëË=Û˜ÑÕ)$g¿áSˆ6BFì}â9osY–Ò+„N»ÎC7$WL".À’ ã8M—ŒGÒØù®Û]§“Yš•¼L¯a@ävÒ\ÜF>HØ8f=aÞÎ$ŽHЀz‚Gz¸I§rf“V9÷e…X…“Á¥vE¥¦‹mQ:¢c'’{Ó¾€’¹{àË›‰ žÞåXH!™sšèì´$²Au{!yWRË­éÖyiïá'µ[´Ôí¯bCqèDz*y¤]¢sš¾ªÉ©A Êù-¹W¹jõÆ£j÷Báe&@ÚF3Yž k«˜Ê³¡dldŠÎ‡PIeXHĠ೺£¸¦c&Ó±êV­ãžÞ4%”eÇ'5tDåÉ$öë\fâ + ,Ás8ŠDf,x9ô­Í/[²Ô¦hàóCc9aÁÇ(´Î¨I5cdÆÍÆv§÷{Ô3%IEŒ·bÍšxf.¨ªHîÞ•ºsÌrÎÁ?º ¨õ)˜šœóN1pT>XøÅV³Ò^yEr¸à™y9ãšèâÓm­ボ““úÒÎëeÂNMW7DG'VQ[<°’0|z/œ,  ‰IF8¥{ÙJâi=Yð£J#s<¬Z]Ф¨9Í+CD˜ ^Eã ^[ÛDã—öUÎ)§LY˜oiI'µJšd±,Lp )¬ËŸPU¹XÑ$†<æ³/mîg™¾Ím$ï 9ÀÀÏÖº¹bµ@Ò5ÛëŽ*´Ú¬©¡lwÎ.·%Åu<«Ä¾¾·°—V"#*Òć;‡ø×{¥Eöe¾´˜¦¼·Y´žÜùÊv%É!†0 ­c+£9+=V]¾c`ƒÏ© ` œdž*ií¡„VÌ£© «z=¼nÒ;ìzÕƒzr©WË/<OJѶ{h G‘Ë;s±x¨ï„ktÄ8c¸ŒÕ=•„Ó°`„g…Ë7ÐP÷ Ý4zŽ«©Ç™k™I d/¹¯mðö…ká}<¾¡qæ\ÈKË!\síU| Gá]73²‹‰Ài·Ú©kÚøƒXkcsæ[Ä~l ‚i=t²Ø»ãkiÖHôûiä<€â,äRiɨވ•ì™Q¸w‘€ zâ–çPn—LÒtÕ–à°ÛåE?ÖºI%^Ÿ´®û—qÝ¿ÀVvEù”5{Øt}'ìöŠç… Ï>¦¸µƒYºfq÷#8²kr/ _êó›ÛéáBs€9jÚóltXVÚIÚ¤æ'ÜÕ6£¹oV` jÑBÓɨ¸rv¦1X×?fC‰çÿ^©i¾e¸ŠûQ”VܰƒÇãZÚÆ¦šeƒLH.HXÐrI¤×vhÈñ€@c\W ñ[‹MÑ äÏr Œ@õ«©ãK_;ìÓÁpó,FBcƸOx’ÃR¹µ’çy+p¬É· 튻”,´!«h’9ÿ–K„P¸%½óý+._±8!‚0.HÄ‹œ[·^+ŽíŒvêÑ&î0Mrjfû|Ò*•ÚÆ„÷3{“-ˆ 3œ`U‘ 1ÀÒ‡q £­Ü,i®‡@â‘-u«‡PöOƒÄŽàY©U¾ÀuEÊH²÷  ¶+6êæÉ§e˜"LÀ$À?¥,ÂâÖÉs?šÊ2À+’Õu„º”¼‰pŠ>]¢>H­e7{ï¡væÇO¾V³¹ŒId«ÀªW~Š{9lãš9d By‡ íÍdÚ_Ú[¦Íòª©$‡"«Ùx’[}fX®.VkWåYÆüzÖjQžñµ…ÊÊqÛ^éVÊ.G\©ŽNTÜPé“¢k0’AvÜØkbXcup*yÅrzî—•¬[ù–9FÒcVà–½Á³¶‰%Ààò} 5‹©DˆÂRŒìŒX*çVì¤ h¯$ø`Ë\Þ»«¤Ó=¬NÎäVÀÅhõZ½sSÚ¬…Ò^csÁ¨ì5·ŠQo¨²†$½œV5µåÜžd— (8œãò­‹hMÉK2°e¿ÌOÓÒ±QQV*çE-ÚCk$¬øP¤’=+*Ê[gžØÉ©L¡ _z|´ûSÖ«"¼˜a‚¥r­ýCƒûBÖgT”I*> `H<úÓ§Ô¦îK3þ~dÿ¿†Šô±ØÿrÛòU]w4±ÄéÞxšùåwXFvà}çoè+ª•ì4K,òªCÏ<}«Ët~ÿF£µu1É‚Ê둟ZƾÕïu«›‹‹éŒŒ‡j/EQì+~MNe=.mx·Æòê‰%¼oå[ž$<Ÿv?Ò¸û; §s(%I-œT–P¥ÅÙ2dàŽõÒA Àà•vHÍɲ¦qu Å*B‘H²0,_9­m)|E«¼×êŒÖê<¨Ç ¹êÜ÷¨'‰8æ¢ðDÒÍã(TÊÊ 2áxȤ´Ô^FÇ‹bc-¥¤pÜE,]ñçŽ8®Z-R(¥Šoß6p*÷™‘ܶÅ$g¯ñ¢Æú¬s£Ù0v.§ ¶]H$s¡åžeR¬ìHÀä“]Ž•áP.õÝFܬ ˱­hÖPèƒWòÌ—g8.rè*_ß\Ac‘¹\1W~à{zQ)\…+³gLžÂÆd†G†ÙNJZ£àŸv>µ±ˆmSŽÉgÞ@A¶BW\Âå†YÏ%œäÖÿÃø’÷U¸("0Àæ²vf°o¡ëJJ¨ g¡ÈäIåwŒ] g=ü˳$(*5PŒJñ–Ífn,V±,¦i¥›y¸è*;Ûóm*›Üœ©Ãy9šE.HÝÆ{U”ùåù¹Å%¨¯ØÊ{MKU„ÇrâËd¢ðH÷ÅHtÝ?KµË$VàšÚ‘¼µ\wuÍcßéVÚ¶¡Ýïe‰Ô …'=HïM •Wº‹Æ­(sj P½1^;®ê¿kÕ¥ž9ÙÑXf<ƒßíž&…,4©…¸Ûµ ©óü¤½Ë–䜒kJq±”üÎŽ-~ÚöÊ[I!p$^Iç5±áýg~š`i\À0¡Ï$WmŸ”çž*wcö0pý7 S‚z2.^¿¹ž=J=P¸Hw¨”]›_¼Õ-LxT*C)^>µ‡vL«d`p1Ÿ¯­Km‘"€HâŽU¿`l×Ò¼Q­ÙÃ<0]H÷ IÎáŽýk©°×uß ³]´ñÞE–P©|~‚+ªð‡„´{[(/Ű’åÏ/!Î>•½âh¥ðõê:¾QÇ1S)]ØÕGC‚𗉵KË7…ÿ{"6XÈyD=+¥Ò2I®3W¹š-YÖFóŠnó3È4Û#m µÜ×·ÍäØ;ÚÛ’]Â$“úUöŒ»,cV‚[¶e !ÉUîþÀ étɦ$[™–5à±É<žµjÖÊ·OvT™ÜÜ{“è)YIÜ|·Ô§vm¼?¤¼Â DqˆãFK·@÷5Åjú{.™ö«Çónäž#ðÔ7¨³”I@p§pÏ­R—@hóý+Iº¿•no”Åm¸1CÃ7ÿZ´õI¡ÀHB,H>e(­ÞIae#B*8È®FÑÞòÛís6evãôqÔÉèi<öâ×x!0rN>jÍ‚[JðCd¥NâÆPsùÕÍ>¹Ô¯ ”Ž4R Ö¼È–vÒ5¼iQžZ¦/Ry éj^BHf–jÌÍ$#ì–Þ`c·qè*m†´»¯d‘Àn/åZPÁ.ÑF¡QÅCK©j쨗S-îÌNæÂð3R¶¬ŽUÒUB \`ñúu©52°\lHÓg‘Y—z”Ëm*ªÆ°P¸ÓA{L`UûIvA»‚sQ$öÑ»¶Ø1å²Çë\¶™w=ëE$Ò±)€1Àï[S;ÿjGnˆø$ÿZa¸Ä»ŸR¿{;Ftã™J“ǵhAàˆ÷ g“,IËt5,+ÎHÈwx‘vʼnü1J®]yÀ$ã#­6ð}žÏÎ\³`Ÿ˜Öwl¦E<©–%Iëœà Κö9XܾzírxølWY¬fÇd…i|³þ誋ЙEõÝÌNë±ÉÏ9jé¾,Ÿð‘Mòb1î +†Ú7ÏëŸ l`Mæô/ïä“Ê,{(à~t›²UÙkW´ºÔ¦¼fMNöh‚½ÌŸß~J“Ïz¹3v ô'rTz±»Ä*Dªv€¥rú߈Næ³°2Kw!Û˜ØÿZ£ã]bòÊâÖÎÞM‘ÊNò>÷çV|i ­Ýã.g2÷ËŒÓÖâ½Ý‰´/}Žè_ݼ“]õäÝþ½tgN€Ì’4aæ_ºO8«î¡Š« 0;°¢ì»Ñ*s!’yÅyõÿ‰âºÕ¯d„+ÛÚ"œ)oâ?ŸâN§u¦è[md1ùÙV#®>µæztB]9ÑÙŠF¹ ž ÷õ¨”¬ˆ“»±Æ·}{­]\DÄÊÉR½Ö-À™¯aIœK0^¦´´į($ò㊛T¶ŠßZÓÖ%Ù¸á˜u9¥ÏiX–ˆ<°‘#ˆFŸ™ŽN+KKÒ⻉îç-d³¶Ði˪I dǯjMfgŸX·ÒóåÚ2‘ñT½çaD¼59šhãÐtädŒá§“øôú×Y $ˆ‰ Q»8®kÄ2'BȰ‚;tõ%…ܶúM¨S»÷jß?9'9«H«\w(# >p݇AHYY˜îü4–ˆŸ`•™7r8éRA‰b”°)àvïR;\–%!~Wc‘žzb¯Å:ÆØ†Êôt¨á†<;l\c’sÒ«\…Ã8P)Šk"ê_y¥–ryäð*&i䄬Ϲ‡;U±šãÛT½U_ô‡À8É÷ÅgÝkºƒ+<õëßµL¥¦Ës ¿¿¿³oÝ-š!'åYâ+<ë:½Äd‹{|gx“\࿺3 ÊÜŒštWWVo>O ž•ž*Õe¸Áœž£vè7 n¯«µ›ùkc<À¹”aúõÎjºïÛQPéS¬ƒ£dV,úÍßœªJ¶ãŒ°Éèu[†\‘?ì×<Û{¯Ì› k™J,¥ 0HÆk#SŠ+‰-ßì³+Fùaåg"»]0ý¾Êig|m€GTÆO"ñR8Ñ{çštéÙÜ–Ì}#ÃÊ—£Pb`=¢26°>§Ò±üQ5´×:–Ý€dŽ£œ×Q%ìÓ‰‘Á#ŠÈ#–7I"G²+w%t›\ÅÖî’}4Æ€/ àÕX!vŠâ8Hˆ%1‚?Ï¥o == "generate" to make the golden files in /tmp/golden * == "compare" to make local files and compare with * the golden files * == "display" to make local files and display * * You can also run each test individually with any one of these * arguments. Warning: if you run this with "display", a very * large number of images will be displayed on the screen. */ #include #include "allheaders.h" static const char *tests[] = { "alphaops_reg", "alphaxform_reg", /* "bilateral2_reg", */ "binarize_reg", "blackwhite_reg", "blend3_reg", "blend4_reg", "colorcontent_reg", "coloring_reg", "colormask_reg", "colorquant_reg", "colorspace_reg", "compare_reg", "convolve_reg", "dewarp_reg", /* "distance_reg", */ "dna_reg", "dwamorph1_reg", "enhance_reg", "findcorners_reg", "findpattern_reg", "fpix1_reg", "fpix2_reg", /* "gifio_reg", */ "graymorph2_reg", "hardlight_reg", "insert_reg", "ioformats_reg", "jpegio_reg", "kernel_reg", "label_reg", "maze_reg", "multitype_reg", "nearline_reg", "newspaper_reg", "overlap_reg", "paint_reg", "paintmask_reg", "pdfseg_reg", "pixa2_reg", "pixserial_reg", "pngio_reg", "projection_reg", "psio_reg", "psioseg_reg", "rankbin_reg", "rankhisto_reg", "rasteropip_reg", "rotateorth_reg", "rotate1_reg", "rotate2_reg", "scale_reg", "seedspread_reg", "selio_reg", "shear1_reg", "shear2_reg", "skew_reg", "splitcomp_reg", "subpixel_reg", "threshnorm_reg", "translate_reg", "warper_reg", "writetext_reg", "xformbox_reg", }; static const char *header = {"\n=======================\n" "Regression Test Results\n" "======================="}; int main(int argc, char **argv) { char *str, *results_file; char command[256], buf[256]; l_int32 i, ntests, dotest, nfail, ret, start, stop; SARRAY *sa; static char mainName[] = "alltests_reg"; if (argc != 2) return ERROR_INT(" Syntax alltests_reg [generate | compare | display]", mainName, 1); l_getCurrentTime(&start, NULL); ntests = sizeof(tests) / sizeof(char *); fprintf(stderr, "Running alltests_reg:\n" "This currently tests %d of the 97 Regression Test\n" "programs in the /prog directory.\n", ntests); /* Clear the output file if we're doing the set of reg tests */ dotest = strcmp(argv[1], "compare") ? 0 : 1; if (dotest) { results_file = genPathname("/tmp", "reg_results.txt"); sa = sarrayCreate(3); sarrayAddString(sa, (char *)header, L_COPY); sarrayAddString(sa, getLeptonicaVersion(), L_INSERT); sarrayAddString(sa, getImagelibVersions(), L_INSERT); str = sarrayToString(sa, 1); sarrayDestroy(&sa); l_binaryWrite("/tmp/reg_results.txt", "w", str, strlen(str)); lept_free(str); } nfail = 0; for (i = 0; i < ntests; i++) { #ifndef _WIN32 snprintf(command, sizeof(command) - 2, "./%s %s", tests[i], argv[1]); #else /* windows interprets '/' as a commandline flag */ snprintf(command, sizeof(command) - 2, "%s %s", tests[i], argv[1]); #endif /* ! _WIN32 */ ret = system(command); if (ret) { snprintf(buf, sizeof(buf), "Failed to complete %s\n", tests[i]); if (dotest) { l_binaryWrite("/tmp/reg_results.txt", "a", buf, strlen(buf)); nfail++; } else fprintf(stderr, "%s", buf); } } if (dotest) { #ifndef _WIN32 snprintf(command, sizeof(command) - 2, "cat %s", results_file); #else snprintf(command, sizeof(command) - 2, "type \"%s\"", results_file); #endif /* !_WIN32 */ lept_free(results_file); ret = system(command); fprintf(stderr, "Success in %d of %d *_reg programs (output matches" " the \"golden\" files)\n", ntests - nfail, ntests); } l_getCurrentTime(&stop, NULL); fprintf(stderr, "Time for all regression tests: %d sec\n", stop - start); return 0; } leptonica-1.70/prog/rasteropip_reg.c0000644000175000017500000000576512240302514015653 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rasteropip_reg.c * * Tests in-place operation using the general 2-image pixRasterop(). * The in-place operation works because there is no overlap * between the src and dest rectangles. */ #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j; PIX *pixs, *pixt, *pixd; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("test8.jpg"); pixt = pixCopy(NULL, pixs); /* Copy, in-place and one COLUMN at a time, from the right side to the left side. */ for (j = 0; j < 200; j++) pixRasterop(pixs, 20 + j, 20, 1, 250, PIX_SRC, pixs, 250 + j, 20); pixDisplayWithTitle(pixs, 50, 50, "in-place copy", rp->display); /* Copy, in-place and one ROW at a time, from the right side to the left side. */ for (i = 0; i < 250; i++) pixRasterop(pixt, 20, 20 + i, 200, 1, PIX_SRC, pixt, 250, 20 + i); /* Test */ regTestComparePix(rp, pixs, pixt); /* 0 */ pixDestroy(&pixs); pixDestroy(&pixt); /* Show the mirrored border, which uses the general pixRasterop() on an image in-place. */ pixs = pixRead("test8.jpg"); pixt = pixRemoveBorder(pixs, 40); pixd = pixAddMirroredBorder(pixt, 40, 40, 40, 40); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixd, 650, 50, "mirrored border", rp->display); pixDestroy(&pixs); pixDestroy(&pixt); pixDestroy(&pixd); return regTestCleanup(rp); } leptonica-1.70/prog/findcorners_reg.c0000644000175000017500000001673512072630041016000 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * findcorners_reg.c * * This reg test demonstrates extraction of deskewed objects (tickets * in this case) using morphological operations to identify the * barcodes on each object. The objects are separately deskewed, * the barcodes are again located, and the objects are extracted. * * We also show how to generate the HMT sela for detecting corners, * and how to use it (with pixUnionOfMorphOps()) to find all the * corners. The corner Sels were constructed to find significant * corners in the presence of the type of noise expected from * scanned images. The located corners are displayed by xor-ing * a pattern (sel_cross) on each one. * * When this function is called with the display argument * findcorners_reg display * we display some results and additionally generate the following pdfs: * /tmp/seq_output_1.pdf (morphological operations of first call to * locate barcodes) * /tmp/tickets.pdf (deskewed result for the set of tickets) */ #include "allheaders.h" static BOXA *LocateBarcodes(PIX *pixs, PIX **ppixd, l_int32 flag); static SELA *GetCornerSela(L_REGPARAMS *rp); static const char *sel_cross = " xxx " " xxx " " xxx " " xxx " " xxx " "xxxxxxxxxxxxx" "xxxxxxXxxxxxx" "xxxxxxxxxxxxx" " xxx " " xxx " " xxx " " xxx " " xxx "; l_int32 main(int argc, char **argv) { l_int32 i, n, flag; l_float32 angle, conf, deg2rad; BOX *box1, *box2, *box3, *box4; BOXA *boxa, *boxa2; PIX *pixs, *pixd, *pix1, *pix2, *pix3; PIXA *pixa; SEL *sel; SELA *sela; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixs = pixRead("tickets.tif"); flag = (rp->display) ? -1 : 0; boxa = LocateBarcodes(pixs, &pixd, flag); regTestWritePixAndCheck(rp, pixd, IFF_TIFF_G4); /* 0 */ if (rp->display) boxaWriteStream(stderr, boxa); n = boxaGetCount(boxa); deg2rad = 3.14159265 / 180.; pixa = pixaCreate(9); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxa, i, L_CLONE); /* Use a larger adjustment to get entire skewed ticket */ box2 = boxAdjustSides(NULL, box1, -266, 346, -1560, 182); pix1 = pixClipRectangle(pixs, box2, NULL); /* Deskew */ pixFindSkew(pix1, &angle, &conf); pix2 = pixRotate(pix1, deg2rad * angle, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); /* Find the barcode again ... */ boxa2 = LocateBarcodes(pix2, NULL, 0); box3 = boxaGetBox(boxa2, 0, L_CLONE); /* ... and adjust crop box exactly for ticket size */ box4 = boxAdjustSides(NULL, box3, -141, 221, -1535, 157); pix3 = pixClipRectangle(pix2, box4, NULL); regTestWritePixAndCheck(rp, pix3, IFF_TIFF_G4); /* 1 - 9 */ if (rp->display) pixaAddPix(pixa, pix3, L_INSERT); else pixDestroy(&pix3); boxDestroy(&box1); boxDestroy(&box2); boxDestroy(&box3); boxDestroy(&box4); boxaDestroy(&boxa2); pixDestroy(&pix1); pixDestroy(&pix2); } if (rp->display) pixaConvertToPdf(pixa, 0, 1.0, 0, 0, "tickets", "/tmp/tickets.pdf"); pixaDestroy(&pixa); /* Downscale by 2x and locate corners */ pix1 = pixScale(pixd, 0.5, 0.5); regTestWritePixAndCheck(rp, pix1, IFF_TIFF_G4); /* 10 */ pixDisplayWithTitle(pix1, 100, 200, NULL, rp->display); /* Find corners and blit a cross onto each (4 to each barcode) */ sela = GetCornerSela(rp); pix2 = pixUnionOfMorphOps(pix1, sela, L_MORPH_HMT); sel = selCreateFromString(sel_cross, 13, 13, "sel_cross"); pix3 = pixDilate(NULL, pix2, sel); pixXor(pix3, pix3, pix1); regTestWritePixAndCheck(rp, pix3, IFF_TIFF_G4); /* 11 */ pixDisplayWithTitle(pix3, 800, 200, NULL, rp->display); boxaDestroy(&boxa); pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pixd); selDestroy(&sel); selaDestroy(&sela); return regTestCleanup(rp); } static BOXA * LocateBarcodes(PIX *pixs, PIX **ppixd, l_int32 flag) { BOXA *boxa1, *boxa2, *boxad; PIX *pix1, *pix2, *pix3; pix1 = pixScale(pixs, 0.5, 0.5); pix2 = pixMorphSequence(pix1, "o1.5 + c15.1 + o10.15 + c20.20", flag); boxa1 = pixConnComp(pix2, NULL, 8); boxa2 = boxaSelectBySize(boxa1, 300, 0, L_SELECT_WIDTH, L_SELECT_IF_GT, NULL); boxad = boxaTransform(boxa2, 0, 0, 2.0, 2.0); if (ppixd) { pix3 = pixSelectBySize(pix2, 300, 0, 8, L_SELECT_WIDTH, L_SELECT_IF_GT, NULL); *ppixd = pixScale(pix3, 2.0, 2.0); pixDestroy(&pix3); } pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); boxaDestroy(&boxa2); return boxad; } static SELA * GetCornerSela(L_REGPARAMS *rp) { PIX *pix; SEL *sel; SELA *sela1, *sela2; sela1 = selaAddHitMiss(NULL); sela2 = selaCreate(4); selaFindSelByName(sela1, "sel_ulc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaFindSelByName(sela1, "sel_urc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaFindSelByName(sela1, "sel_llc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaFindSelByName(sela1, "sel_lrc", NULL, &sel); selaAddSel(sela2, sel, NULL, 1); selaDestroy(&sela1); if (rp->display) { pix = selaDisplayInPix(sela2, 21, 3, 10, 4); pixDisplay(pix, 0, 0); pixDestroy(&pix); } return sela2; } leptonica-1.70/prog/watershedtest.c0000644000175000017500000001130712242265524015514 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * watershedtest.c * */ #include #include "allheaders.h" int main(int argc, char **argv) { l_int32 i, j, w, h, empty; l_uint32 redval, greenval; l_float32 f; L_WSHED *wshed; PIX *pixs, *pixc, *pixd; PIX *pixt0, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5; PIX *pixt6, *pixt7, *pixt8; PIXA *pixac; PTA *pta; static char mainName[] = "watershedtest"; if (argc != 1) return ERROR_INT(" Syntax: watershedtest", mainName, 1); pixac = pixaCreate(0); pixs = pixCreate(500, 500, 8); pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < 500; i++) { for (j = 0; j < 500; j++) { #if 1 f = 128.0 + 26.3 * sin(0.0438 * (l_float32)i); f += 33.4 * cos(0.0712 * (l_float32)i); f += 18.6 * sin(0.0561 * (l_float32)j); f += 23.6 * cos(0.0327 * (l_float32)j); #else f = 128.0 + 26.3 * sin(0.0238 * (l_float32)i); f += 33.4 * cos(0.0312 * (l_float32)i); f += 18.6 * sin(0.0261 * (l_float32)j); f += 23.6 * cos(0.0207 * (l_float32)j); #endif pixSetPixel(pixs, j, i, (l_int32)f); } } pixSaveTiled(pixs, pixac, 1.0, 1, 10, 32); pixWrite("/tmp/pattern.png", pixs, IFF_PNG); startTimer(); pixLocalExtrema(pixs, 0, 0, &pixt1, &pixt2); fprintf(stderr, "Time for extrema: %7.3f\n", stopTimer()); pixSetOrClearBorder(pixt1, 2, 2, 2, 2, PIX_CLR); composeRGBPixel(255, 0, 0, &redval); composeRGBPixel(0, 255, 0, &greenval); pixc = pixConvertTo32(pixs); pixPaintThroughMask(pixc, pixt2, 0, 0, greenval); pixPaintThroughMask(pixc, pixt1, 0, 0, redval); pixSaveTiled(pixc, pixac, 1.0, 0, 10, 32); pixWrite("/tmp/pixc.png", pixc, IFF_PNG); pixSaveTiled(pixt1, pixac, 1.0, 0, 10, 32); pixSelectMinInConnComp(pixs, pixt1, &pta, NULL); /* ptaWriteStream(stderr, pta, 1); */ pixt3 = pixGenerateFromPta(pta, w, h); pixSaveTiled(pixt3, pixac, 1.0, 1, 10, 32); pixt4 = pixConvertTo32(pixs); pixPaintThroughMask(pixt4, pixt3, 0, 0, greenval); pixSaveTiled(pixt4, pixac, 1.0, 0, 10, 32); pixt5 = pixRemoveSeededComponents(NULL, pixt3, pixt1, 8, 2); pixSaveTiled(pixt5, pixac, 1.0, 0, 10, 32); pixZero(pixt5, &empty); fprintf(stderr, "Is empty? %d\n", empty); pixDestroy(&pixt4); pixDestroy(&pixt5); wshed = wshedCreate(pixs, pixt3, 10, 0); startTimer(); wshedApply(wshed); fprintf(stderr, "Time for wshed: %7.3f\n", stopTimer()); pixt6 = pixaDisplayRandomCmap(wshed->pixad, w, h); pixSaveTiled(pixt6, pixac, 1.0, 1, 10, 32); numaWriteStream(stderr, wshed->nalevels); pixt7 = wshedRenderFill(wshed); pixSaveTiled(pixt7, pixac, 1.0, 0, 10, 32); pixt8 = wshedRenderColors(wshed); pixSaveTiled(pixt8, pixac, 1.0, 0, 10, 32); wshedDestroy(&wshed); pixd = pixaDisplay(pixac, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/wshed.png", pixd, IFF_PNG); pixDestroy(&pixd); pixaDestroy(&pixac); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt6); pixDestroy(&pixt7); pixDestroy(&pixt8); pixDestroy(&pixs); pixDestroy(&pixc); ptaDestroy(&pta); return 0; } leptonica-1.70/prog/test-cmap-alpha.png0000444000175000017500000000147612047007131016143 0ustar dandan‰PNG  IHDR€€ôà‘ùgAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<PLTE¥g¹ÏtRNSÿå·0J°IDATxÚìšÁrÄ0CÅÿÿtϻŶ$À™i“뎗0#~ðüd¸j?A¸¼¿n:aŠp5 2‚»a˜ Å• ðÖ£ÀರûZ÷ („4î>—# ò¸+| Xùïs5*Ž/ðÊ¡8â†à@úw’/Öà§¿RÈ9AÔZ¾Ù_È~]”<Ù °Ù¬ŽŠ;@'ÀÚɰ=e'… yp²rýlk<{Õüÿ`{ÚÆ¸âX0N}쟶îÆÓÚž_°~Êö‰D4k›Ê„“¶éTˆjëºø:úFetû©.o "ˆ>ð=â¶úЃË}JéNé>‹pu¡r‘ñÕjÌXª®Úl ÚA-l$O¹^@µK™´ º@²öÒöǾ޸§C§2Cõ´â¼ðjP›ádgíàZPk‚ËœOw½!ÀS]4Œ°‹õ ö€*odE¦À¶ß Õ ÈöÃÔ‚&¬Æ¶ FäƒÝûÛ£edsl¥ôd—×ã‚"€«ÇjÍ)Óè›§@ ÀŸ]Šú!6™…©à,·™—él€_Ûn]'¤E*d’ Ìnàì2çëHÙ_È×j%¡’PþÕ†T“jÙŸà"–I8Ž(DnDÊ]wˆ¬²*ƒOmöȦpUdzh¥XgdƒAë\¦³>69í´ÞP»ä„ünÀYÝäþâxøy^€àxø`i;4t„GôkIEND®B`‚leptonica-1.70/prog/rotatetest1.c0000644000175000017500000001707412242265701015111 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotatetest1.c * * rotatetest1 filein angle(in degrees) fileout */ #include "allheaders.h" #define NTIMES 180 #define NITERS 3 int main(int argc, char **argv) { l_int32 i, w, h, d, rotflag; PIX *pixs, *pixt, *pixd; l_float32 angle, deg2rad, pops, ang; char *filein, *fileout; static char mainName[] = "rotatetest1"; if (argc != 4) return ERROR_INT(" Syntax: rotatetest1 filein angle fileout", mainName, 1); filein = argv[1]; angle = atof(argv[2]); fileout = argv[3]; deg2rad = 3.1415926535 / 180.; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); if (pixGetDepth(pixs) == 1) { pixt = pixScaleToGray3(pixs); pixDestroy(&pixs); pixs = pixAddBorderGeneral(pixt, 1, 0, 1, 0, 255); pixDestroy(&pixt); } pixGetDimensions(pixs, &w, &h, &d); fprintf(stderr, "w = %d, h = %d\n", w, h); #if 0 /* repertory of rotation operations to choose from */ pixd = pixRotateAM(pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRotateAMColor(pixs, deg2rad * angle, 0xffffff00); pixd = pixRotateAMColorFast(pixs, deg2rad * angle, 255); pixd = pixRotateAMCorner(pixs, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRotateShear(pixs, w /2, h / 2, deg2rad * angle, L_BRING_IN_WHITE); pixd = pixRotate3Shear(pixs, w /2, h / 2, deg2rad * angle, L_BRING_IN_WHITE); pixRotateShearIP(pixs, w / 2, h / 2, deg2rad * angle); pixd = pixs; #endif #if 0 /* timing of shear rotation */ for (i = 0; i < NITERS; i++) { pixd = pixRotateShear(pixs, (i * w) / NITERS, (i * h) / NITERS, deg2rad * angle, L_BRING_IN_WHITE); pixDisplay(pixd, 100 + 20 * i, 100 + 20 * i); pixDestroy(&pixd); } #endif #if 0 /* timing of in-place shear rotation */ for (i = 0; i < NITERS; i++) { pixRotateShearIP(pixs, w/2, h/2, deg2rad * angle, L_BRING_IN_WHITE); /* pixRotateShearCenterIP(pixs, deg2rad * angle, L_BRING_IN_WHITE); */ pixDisplay(pixs, 100 + 20 * i, 100 + 20 * i); } pixd = pixs; if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); #endif #if 0 /* timing of various rotation operations (choose) */ startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < NTIMES; i++) { pixd = pixRotateShearCenter(pixs, deg2rad * angle, L_BRING_IN_WHITE); pixDestroy(&pixd); } pops = (l_float32)(w * h * NTIMES / 1000000.) / stopTimer(); fprintf(stderr, "vers. 1, mpops: %f\n", pops); startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < NTIMES; i++) { pixRotateShearIP(pixs, w/2, h/2, deg2rad * angle, L_BRING_IN_WHITE); } pops = (l_float32)(w * h * NTIMES / 1000000.) / stopTimer(); fprintf(stderr, "shear, mpops: %f\n", pops); pixWrite(fileout, pixs, IFF_PNG); for (i = 0; i < NTIMES; i++) { pixRotateShearIP(pixs, w/2, h/2, -deg2rad * angle, L_BRING_IN_WHITE); } pixWrite("/usr/tmp/junkout", pixs, IFF_PNG); #endif #if 0 /* area-mapping rotation operations */ pixd = pixRotateAM(pixs, deg2rad * angle, L_BRING_IN_WHITE); /* pixd = pixRotateAMColorFast(pixs, deg2rad * angle, 255); */ if (pixGetDepth(pixd) == 1) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); #endif #if 0 /* compare the standard area-map color rotation with * the fast area-map color rotation, on a pixel basis */ { PIX *pix1, *pix2; NUMA *nar, *nag, *nab, *naseq; GPLOT *gplot; startTimer(); pix1 = pixRotateAMColor(pixs, 0.12, 0xffffff00); fprintf(stderr, " standard color rotate: %7.2f sec\n", stopTimer()); pixWrite("junkcolor1", pix1, IFF_JFIF_JPEG); startTimer(); pix2 = pixRotateAMColorFast(pixs, 0.12, 0xffffff00); fprintf(stderr, " fast color rotate: %7.2f sec\n", stopTimer()); pixWrite("junkcolor2", pix2, IFF_JFIF_JPEG); pixd = pixAbsDifference(pix1, pix2); pixGetColorHistogram(pixd, 1, &nar, &nag, &nab); naseq = numaMakeSequence(0., 1., 256); gplot = gplotCreate("junk_absdiff", GPLOT_X11, "Number vs diff", "diff", "number"); gplotAddPlot(gplot, naseq, nar, GPLOT_POINTS, "red"); gplotAddPlot(gplot, naseq, nag, GPLOT_POINTS, "green"); gplotAddPlot(gplot, naseq, nab, GPLOT_POINTS, "blue"); gplotMakeOutput(gplot); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pixd); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); numaDestroy(&naseq); gplotDestroy(&gplot); } #endif /* Do a succession of 180 7-degree rotations in a cw * direction, and unwind the result with another set in * a ccw direction. Although there is a considerable amount * of distortion after successive rotations, after all * 360 rotations, the resulting image is restored to * its original pristine condition! */ #if 1 rotflag = L_ROTATE_AREA_MAP; /* rotflag = L_ROTATE_SHEAR; */ /* rotflag = L_ROTATE_SAMPLING; */ ang = 7.0 * deg2rad; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixRotate(pixs, ang, rotflag, L_BRING_IN_WHITE, w, h); pixWrite("junkrot7", pixd, IFF_PNG); for (i = 1; i < 180; i++) { pixs = pixd; pixd = pixRotate(pixs, ang, rotflag, L_BRING_IN_WHITE, w, h); if ((i % 30) == 0) pixDisplay(pixd, 600, 0); pixDestroy(&pixs); } pixWrite("junkspin", pixd, IFF_PNG); pixDisplay(pixd, 0, 0); for (i = 0; i < 180; i++) { pixs = pixd; pixd = pixRotate(pixs, -ang, rotflag, L_BRING_IN_WHITE, w, h); if (i && (i % 30) == 0) pixDisplay(pixd, 600, 500); pixDestroy(&pixs); } pixWrite("junkunspin", pixd, IFF_PNG); pixDisplay(pixd, 0, 500); pixDestroy(&pixd); #endif return 0; } leptonica-1.70/prog/genfonts.c0000640000175000017500000001030312265246153014442 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * genfonts.c * * This program can be used to generate characters for a * font and save them in .pa format. * * The tiff images of bitmaps fonts, which are used as input * to this generator, are supplied in Leptonica in the prog/fonts * directory. The tiff images were generated from the PostScript files * in that directory, using the shell script prog/ps2tiff. If you * want to generate other fonts, modify the PostScript files * and use ps2tiff. ps2tiff uses GhostScript. */ #include "allheaders.h" #define NFONTS 9 #define TEST_DIR "/tmp/fonts" #define INSTALL_DIR "fonts" const char *outputfonts[] = {"chars-4.pa", "chars-6.pa", "chars-8.pa", "chars-10.pa", "chars-12.pa", "chars-14.pa", "chars-16.pa", "chars-18.pa", "chars-20.pa"}; const l_int32 sizes[] = { 4, 6, 8, 10, 12, 14, 16, 18, 20 }; #define DEBUG 1 int main(int argc, char **argv) { char buf[512]; char *pathname; l_int32 i, bl1, bl2, bl3; PIX *pixd; PIXA *pixa; static char mainName[] = "genfonts"; if (argc != 1) return ERROR_INT(" Syntax: genfonts", mainName, 1); /* ------------ Generate all the pixa char bitmap files ----------- */ #if 1 lept_rmdir("fonts"); lept_mkdir("fonts"); for (i = 0; i < 9; i++) { pixaSaveFont(INSTALL_DIR, "/tmp/fonts", sizes[i]); #if DEBUG pathname = genPathname(INSTALL_DIR, outputfonts[i]); pixa = pixaRead(pathname); fprintf(stderr, "Found %d chars in font size %d\n", pixaGetCount(pixa), sizes[i]); pixd = pixaDisplayTiled(pixa, 1500, 0, 15); pixDisplay(pixd, 100 * i, 200); pixDestroy(&pixd); pixaDestroy(&pixa); lept_free(pathname); #endif /* DEBUG */ } #endif /* ----- Use pixaGetFont() and write the result out -----*/ #if 1 for (i = 0; i < 9; i++) { pixa = pixaGetFont(INSTALL_DIR, sizes[i], &bl1, &bl2, &bl3); fprintf(stderr, "Baselines are at: %d, %d, %d\n", bl1, bl2, bl3); snprintf(buf, sizeof(buf), "/tmp/junkchars.%d.pixa", sizes[i]); pixaWrite(buf, pixa); #if DEBUG pixd = pixaDisplayTiled(pixa, 1500, 0, 15); pixDisplay(pixd, 100 * i, 700); pixDestroy(&pixd); #endif /* DEBUG */ pixaDestroy(&pixa); } #endif /* ------------ Get timing for font generation ----------- */ #if 0 startTimer(); i = 8; pixa = pixaGenerateFont(DIRECTORY, sizes[i], &bl1, &bl2, &bl3); pixaDestroy(&pixa); fprintf(stderr, "Time for font gen = %7.3f sec\n", stopTimer()); #endif return 0; } leptonica-1.70/prog/ccbordtest.c0000640000175000017500000002163312242267027014761 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ccbordtest.c * * Comprehensive test for border-following representations * of binary images. */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_int32 count; CCBORDA *ccba, *ccba2; PIX *pixs, *pixd, *pixd2, *pixd3; PIX *pixt, *pixc, *pixc2; static char mainName[] = "ccbordtest"; if (argc != 2) return ERROR_INT(" Syntax: ccbordtest filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); fprintf(stderr, "Get border representation..."); startTimer(); ccba = pixGetAllCCBorders(pixs); fprintf(stderr, "%6.3f sec\n", stopTimer()); #if 0 /* get global locs directly and display borders */ fprintf(stderr, "Convert from local to global locs..."); startTimer(); ccbaGenerateGlobalLocs(ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); fprintf(stderr, "Display border representation..."); startTimer(); pixd = ccbaDisplayBorder(ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); pixWrite("/tmp/junkborder1.png", pixd, IFF_PNG); #else /* get step chain code, then global coords, and display borders */ fprintf(stderr, "Get step chain code..."); startTimer(); ccbaGenerateStepChains(ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); fprintf(stderr, "Convert from step chain to global locs..."); startTimer(); ccbaStepChainsToPixCoords(ccba, CCB_GLOBAL_COORDS); fprintf(stderr, "%6.3f sec\n", stopTimer()); fprintf(stderr, "Display border representation..."); startTimer(); pixd = ccbaDisplayBorder(ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); pixWrite("/tmp/junkborder1.png", pixd, IFF_PNG); #endif /* check if border pixels are in original set */ fprintf(stderr, "Check if border pixels are in original set ...\n"); pixt = pixSubtract(NULL, pixd, pixs); pixCountPixels(pixt, &count, NULL); if (count == 0) fprintf(stderr, " all border pixels are in original set\n"); else fprintf(stderr, " %d border pixels are not in original set\n", count); pixDestroy(&pixt); /* display image */ fprintf(stderr, "Reconstruct image ..."); startTimer(); /* pixc = ccbaDisplayImage1(ccba); */ pixc = ccbaDisplayImage2(ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); pixWrite("/tmp/junkrecon1.png", pixc, IFF_PNG); /* check with original to see if correct */ fprintf(stderr, "Check with original to see if correct ...\n"); pixXor(pixc, pixc, pixs); pixCountPixels(pixc, &count, NULL); if (count == 0) fprintf(stderr, " perfect direct recon\n"); else { l_int32 w, h, i, j; l_uint32 val; fprintf(stderr, " %d pixels in error in recon\n", count); #if 1 w = pixGetWidth(pixc); h = pixGetHeight(pixc); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixc, j, i, &val); if (val == 1) fprintf(stderr, "bad pixel at (%d, %d)\n", j, i); } } pixWrite("/tmp/junkbadpixels.png", pixc, IFF_PNG); #endif } /*----------------------------------------------------------* * write to file (compressed) and read back * *----------------------------------------------------------*/ fprintf(stderr, "Write serialized step data..."); startTimer(); ccbaWrite("/tmp/junkstepout", ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); fprintf(stderr, "Read serialized step data..."); startTimer(); ccba2 = ccbaRead("/tmp/junkstepout"); fprintf(stderr, "%6.3f sec\n", stopTimer()); /* display the border pixels again */ fprintf(stderr, "Convert from step chain to global locs..."); startTimer(); ccbaStepChainsToPixCoords(ccba2, CCB_GLOBAL_COORDS); fprintf(stderr, "%6.3f sec\n", stopTimer()); fprintf(stderr, "Display border representation..."); startTimer(); pixd2 = ccbaDisplayBorder(ccba2); fprintf(stderr, "%6.3f sec\n", stopTimer()); pixWrite("/tmp/junkborder2.png", pixd2, IFF_PNG); /* check if border pixels are same as first time */ pixXor(pixd2, pixd2, pixd); pixCountPixels(pixd2, &count, NULL); if (count == 0) fprintf(stderr, " perfect w/r border recon\n"); else fprintf(stderr, " %d pixels in error in w/r recon\n", count); pixDestroy(&pixd2); /* display image again */ fprintf(stderr, "Convert from step chain to local coords..."); startTimer(); ccbaStepChainsToPixCoords(ccba2, CCB_LOCAL_COORDS); fprintf(stderr, "%6.3f sec\n", stopTimer()); fprintf(stderr, "Reconstruct image from file ..."); startTimer(); /* pixc2 = ccbaDisplayImage1(ccba2); */ pixc2 = ccbaDisplayImage2(ccba2); fprintf(stderr, "%6.3f sec\n", stopTimer()); pixWrite("/tmp/junkrecon2.png", pixc2, IFF_PNG); /* check with original to see if correct */ fprintf(stderr, "Check with original to see if correct ...\n"); pixXor(pixc2, pixc2, pixs); pixCountPixels(pixc2, &count, NULL); if (count == 0) fprintf(stderr, " perfect image recon\n"); else { l_int32 w, h, i, j; l_uint32 val; fprintf(stderr, " %d pixels in error in image recon\n", count); #if 1 w = pixGetWidth(pixc2); h = pixGetHeight(pixc2); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixc2, j, i, &val); if (val == 1) fprintf(stderr, "bad pixel at (%d, %d)\n", j, i); } } pixWrite("/tmp/junkbadpixels2.png", pixc2, IFF_PNG); #endif } /*----------------------------------------------------------* * make, display and check single path border for svg * *----------------------------------------------------------*/ /* make local single path border for svg */ fprintf(stderr, "Make local single path borders for svg ..."); startTimer(); ccbaGenerateSinglePath(ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); /* generate global single path border */ fprintf(stderr, "Generate global single path borders ..."); startTimer(); ccbaGenerateSPGlobalLocs(ccba, CCB_SAVE_TURNING_PTS); fprintf(stderr, "%6.3f sec\n", stopTimer()); /* display border pixels from single path */ fprintf(stderr, "Display border from single path..."); startTimer(); pixd3 = ccbaDisplaySPBorder(ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); pixWrite("/tmp/junkborder3.png", pixd3, IFF_PNG); /* check if border pixels are in original set */ fprintf(stderr, "Check if border pixels are in original set ...\n"); pixt = pixSubtract(NULL, pixd3, pixs); pixCountPixels(pixt, &count, NULL); if (count == 0) fprintf(stderr, " all border pixels are in original set\n"); else fprintf(stderr, " %d border pixels are not in original set\n", count); pixDestroy(&pixt); pixDestroy(&pixd3); /* output in svg file format */ fprintf(stderr, "Write output in svg file format ...\n"); startTimer(); ccbaWriteSVG("/tmp/junksvg", ccba); fprintf(stderr, "%6.3f sec\n", stopTimer()); ccbaDestroy(&ccba2); ccbaDestroy(&ccba); pixDestroy(&pixs); pixDestroy(&pixd); pixDestroy(&pixc); pixDestroy(&pixc2); return 0; } leptonica-1.70/prog/blendtext.tif0000444000175000017500000000076010277473544015167 0ustar dandanII*2& ¶ÿÿù¾'ڮ߇!<ëO÷ýÿü…™¸˜ç‰ú ! ýwiÓòyðˆ1o´ÓHÜþ-O ÞBùïþ’ þäâ-2Z—Ò€C€bý/áÐMé¡p ŸŸ¿ûö{Ó†y™Íl7iÇÚuÿL%·k¦ÙøûÏMwßXÿªuê®[~î—ê×ÿ§éº¶{ñ.‡_ÅïÚ}k¯Mm<à1úý·î×§þhˆâþ¢:÷ÿœ RæhŽ‚ÿj¬ŠÿÿÁÿ¥þëõ½ïýÎ#À¿i¨aSÕ²8ëÈAÿö¿Ø¤Ní%¾ÂúýûM°ƒb“M6Õ~éÈâ ÁGŒKtÓA±I¯iZ®""!…ûHC8Ø¥ÄA‘Å6‚ &hŸ ¤¼˜^""?ÿð 55*àè(ÀÀleptonica-1.70/prog/pageseg2-seed.png0000444000175000017500000000446011112654453015601 0ustar dandan‰PNG  IHDRp UÕ pHYs``<|eìâIDATxœíÝÑrÛÆEAþÿOëVŒk‘g–)ƒV¯·Xs°;/©¤*q.o'ïò·_X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Öþðò±ß|õéwÛ¶UÀ` °X¬Ök€5À` °X¬Ök€5À` °vzàÛGãÛmàÍk€5À?` °XüÝ–ý~ð]’[û€1À`íôÀ/¬Ök€5À` °xcöË¿Q}ùlÊYÀ` °X¬Ök€5À` °vvà0X¬Ö>ïj¯¯Æk€µË{ûÝzú¬Ã*` °X{!àåþ¿æ xk0X¬]®tëé·ÂÞWc€5ÀÚéoWŒ·Þ}«ê8 ¬ÖÎ ü¤œ °X¬=î¼± ¬Æ®ø§¬ÖkÚ¶·ßdú8 ¬Ö^ x—xu0X¬Ök€5À` °X¬Ök€5ÀÚ'à"àÕQÀ` °X¬Ök€5À` °X¬Ök€5À` °ö5ëðöéšk£€1À`íôÀ™k€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5ÀàaêÁÿ•èpõÉ­)À` °vjàcÿSù«—O3€1À`íäÀËØÌíÓTÇÀ` °vrà'Þ°X¬]>¼ ج¶®óÖk€±›¾G…€€1À`íð±i@@@À×ÞóþxàCÛ€€€€/ ¼ïüñÀGÆ_ø•ðGXü'|ðe§ÿ^ÿ*ð¡O¾2ðô¿1 à_>ö@@@À—Þþàáƒ÷Ïåök€µÓo =*î×` °X;=ð†ðáëgÒþ?¬ÖN¼.|øø™²ß€1À`íôÀÏęӧ¡>¬Æk€µÓߎÆÉ»çp® Æk€µÓW¬Ökÿ(pñ/ºKSkW€ûÔÚà>µv¸O­]îSkW€ûÔÚà>µv¸O­]îSkW€ûÔÚà>µv¸O­]îSkW€ûÔÚà>µv¸O­]îSkW€ûÔÚà>µv¸O­]îSkW€ûÔÚà>µv¸O­]øëp›Y¿ÜfÖ/·™õKÀmfýp›Y¿ÜfÖ/·™õKÀmfýp›Y¿ÜfÖ/·™õKÀmfýp›Y¿ÜfÖ/·™õKÀmfýp›Y¿ÜfÖ/·™õKÀmæù-À` °X¬Ökÿ&ðýßë9ëß°·–Ž[KG€‡­¥#ÀÃÖÒàakéð°µtxØZ:ξgߎƒ³ïÇÁÙ÷€ãàì{Àqpö=à88ûpœ}8ξgߎƒ³ïÇÁÙ÷€ãàì{Àqpö=à88ûpœ}8ξgߎƒ³ïÇÁÙ÷/<óoøipö=à88ûpœ}vàáp›Y¿ÜfÖ/·™õKÀmfýp›Y¿ÜfÖ/·™õKÀmfýp›Y¿ÜfÖ/·™õKÀmfúàCÏ {Ó€ÃÞôà°7}8ìM{Ó€ÃÞôà°7}8ìM{Ó€ÃÞôà°7}8ìM{Ó€ÃÞôà°7}8ìM{Ó€ÃÞôà°7}8ìM{Ó€ÃÞôà°7}8ìMœøÝÖk€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X| Ë¯nýð[)׬Ök€5À` °X¬ÖkÏÞýòú `ý `ý `ý `ý `ý `ý `ý `ý `ý `ý `ýÌÏNº¯ÿzÿÌöÃ%Ù_¬_¬_¬_¬_¬_¬_þÛÀ÷ïMo9_x÷Áçwÿ|_x¹Üý àÏ>ððŸ>õ/ÔÇ_<ðö àŸn¿xVàç±ËõÜx}ëãW2𿟞xøÈðöó÷JüyÀÃ3@@@À¿3À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök€5À` °X¬Ök§þÁGjxÿïÝ®IEND®B`‚leptonica-1.70/prog/ps2jpeg0000750000175000017500000000134410376541156013761 0ustar dandan#!/bin/bash # ps2jpeg # # Rasterizes a postscript file, saving as a set of RGB images # # input: PostScript file # root name of output files # output: 24 bpp RGB jpeg files for each page scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpsfile outjpgroot" exit -1 fi inpsfile=$1 outjpgroot=$2 # (need mysterious "primer") # choose one of the two options below # choice: output image size depending on resolution echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -r300x300 -q - ${inpsfile} # choice: output fixed image size echo "0 neg 0 neg" translate | gs -sDEVICE=jpeg -sOutputFile=${outjpgroot}%03d.jpg -g2550x3300 -r300x300 -q - ${inpsfile} leptonica-1.70/prog/numa1_reg.c0000644000175000017500000003521712240302751014502 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * numa1_reg.c * * Tests: * * histograms * * interpolation * * integration/differentiation * * rank extraction * * numa-morphology */ #include #ifndef _WIN32 #include #else #include /* for Sleep() */ #endif /* _WIN32 */ #include "allheaders.h" #define DO_ALL 1 int main(int argc, char **argv) { l_int32 i, j, w, h, wpls, n, binsize, binstart, nbins; l_float32 pi, val, angle, xval, yval, x0, y0, rank, startval, fbinsize; l_float32 minval, maxval, meanval, median, variance, rankval; GPLOT *gplot; NUMA *na, *nahisto, *nax, *nay, *nap, *nasx, *nasy; NUMA *nadx, *nady, *nafx, *nafy, *na1, *na2, *na3, *na4; PIX *pix, *pixs, *pix1, *pix2, *pix3, *pix4, *pix5, *pixg, *pixd; PIXA *pixa; static char mainName[] = "numa1_reg"; if (argc != 1) return ERROR_INT(" Syntax: numa1_reg", mainName, 1); /* -------------------------------------------------------------------* * Histograms * * -------------------------------------------------------------------*/ #if DO_ALL pi = 3.1415926535; na = numaCreate(5000); for (i = 0; i < 500000; i++) { angle = 0.02293 * i * pi; val = (l_float32)(999. * sin(angle)); numaAddNumber(na, val); } nahisto = numaMakeHistogramClipped(na, 6, 2000); nbins = numaGetCount(nahisto); nax = numaMakeSequence(0, 1, nbins); gplot = gplotCreate("/tmp/historoot1", GPLOT_X11, "example histo 1", "i", "histo[i]"); gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nahisto); nahisto = numaMakeHistogram(na, 1000, &binsize, &binstart); nbins = numaGetCount(nahisto); nax = numaMakeSequence(binstart, binsize, nbins); fprintf(stderr, " binsize = %d, binstart = %d\n", binsize, binstart); gplot = gplotCreate("/tmp/historoot2", GPLOT_X11, "example histo 2", "i", "histo[i]"); gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nahisto); nahisto = numaMakeHistogram(na, 1000, &binsize, NULL); nbins = numaGetCount(nahisto); nax = numaMakeSequence(0, binsize, nbins); fprintf(stderr, " binsize = %d, binstart = %d\n", binsize, 0); gplot = gplotCreate("/tmp/historoot3", GPLOT_X11, "example histo 3", "i", "histo[i]"); gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nahisto); nahisto = numaMakeHistogramAuto(na, 1000); nbins = numaGetCount(nahisto); numaGetParameters(nahisto, &startval, &fbinsize); nax = numaMakeSequence(startval, fbinsize, nbins); fprintf(stderr, " binsize = %7.4f, binstart = %8.3f\n", fbinsize, startval); gplot = gplotCreate("/tmp/historoot4", GPLOT_X11, "example histo 4", "i", "histo[i]"); gplotAddPlot(gplot, nax, nahisto, GPLOT_LINES, "sine"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nahisto); numaGetStatsUsingHistogram(na, 2000, &minval, &maxval, &meanval, &variance, &median, 0.80, &rankval, &nahisto); fprintf(stderr, "Sin histogram: \n" " min val = %7.2f -- should be -999.00\n" " max val = %7.2f -- should be 999.00\n" " mean val = %7.2f -- should be 0.06\n" " median = %7.2f -- should be 0.30\n" " rmsdev = %7.2f -- should be 706.41\n" " rank val = %7.2f -- should be 808.15\n", minval, maxval, meanval, median, sqrt((l_float64)variance), rankval); numaHistogramGetRankFromVal(nahisto, 808.15, &rank); fprintf(stderr, " rank = %7.3f -- should be 0.800\n", rank); numaDestroy(&nahisto); numaDestroy(&na); #endif /* -------------------------------------------------------------------* * Interpolation * * -------------------------------------------------------------------*/ #if DO_ALL /* Test numaInterpolateEqxInterval() */ pixs = pixRead("test8.jpg"); na = pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); /* numaWriteStream(stderr, na); */ nasy = numaGetPartialSums(na); gplotSimple1(nasy, GPLOT_X11, "/tmp/introot1", "partial sums"); gplotSimple1(na, GPLOT_X11, "/tmp/introot2", "simple test"); numaInterpolateEqxInterval(0.0, 1.0, na, L_LINEAR_INTERP, 0.0, 255.0, 15, &nax, &nay); gplot = gplotCreate("/tmp/introot3", GPLOT_X11, "test interpolation", "pix val", "num pix"); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "plot 1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); #endif #if DO_ALL /* Test numaInterpolateArbxInterval() */ pixs = pixRead("test8.jpg"); na = pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); nasy = numaGetPartialSums(na); numaInsertNumber(nasy, 0, 0.0); nasx = numaMakeSequence(0.0, 1.0, 257); /* gplotSimple1(nasy, GPLOT_X11, "/tmp/nasyroot", "partial sums"); */ numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, 10.0, 250.0, 23, &nax, &nay); gplot = gplotCreate("/tmp/introot4", GPLOT_X11, "arbx interpolation", "pix val", "cum num pix"); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "plot 1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); #endif #if DO_ALL /* Test numaInterpolateArbxVal() */ pixs = pixRead("test8.jpg"); na = pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); nasy = numaGetPartialSums(na); numaInsertNumber(nasy, 0, 0.0); nasx = numaMakeSequence(0.0, 1.0, 257); /* gplotSimple1(nasy, GPLOT_X11, "/tmp/nasyroot", "partial sums"); */ nax = numaMakeSequence(15.0, (250.0 - 15.0) / 23.0, 24); n = numaGetCount(nax); nay = numaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(nax, i, &xval); numaInterpolateArbxVal(nasx, nasy, L_QUADRATIC_INTERP, xval, &yval); numaAddNumber(nay, yval); } gplot = gplotCreate("/tmp/introot5", GPLOT_X11, "arbx interpolation", "pix val", "cum num pix"); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "plot 1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); #endif #if DO_ALL /* Test interpolation */ nasx = numaRead("testangle.na"); nasy = numaRead("testscore.na"); gplot = gplotCreate("/tmp/introot6", GPLOT_X11, "arbx interpolation", "angle", "score"); numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, -2.00, 0.0, 50, &nax, &nay); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "linear"); numaDestroy(&nax); numaDestroy(&nay); numaInterpolateArbxInterval(nasx, nasy, L_QUADRATIC_INTERP, -2.00, 0.0, 50, &nax, &nay); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "quadratic"); numaDestroy(&nax); numaDestroy(&nay); gplotMakeOutput(gplot); gplotDestroy(&gplot); gplot = gplotCreate("/tmp/introot7", GPLOT_X11, "arbx interpolation", "angle", "score"); numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, -1.2, -0.8, 50, &nax, &nay); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "quadratic"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaFitMax(nay, &yval, nax, &xval); fprintf(stderr, "max = %f at loc = %f\n", yval, xval); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); #endif /* -------------------------------------------------------------------* * Integration and differentiation * * -------------------------------------------------------------------*/ #if DO_ALL /* Test integration and differentiation */ nasx = numaRead("testangle.na"); nasy = numaRead("testscore.na"); /* ---------- Plot the derivative ---------- */ numaDifferentiateInterval(nasx, nasy, -2.0, 0.0, 50, &nadx, &nady); gplot = gplotCreate("/tmp/diffroot1", GPLOT_X11, "derivative", "angle", "slope"); gplotAddPlot(gplot, nadx, nady, GPLOT_LINES, "derivative"); gplotMakeOutput(gplot); gplotDestroy(&gplot); /* ---------- Plot the original function ----------- */ /* and the integral of the derivative; the two */ /* should be approximately the same. */ gplot = gplotCreate("/tmp/diffroot2", GPLOT_X11, "integ-diff", "angle", "val"); numaInterpolateArbxInterval(nasx, nasy, L_LINEAR_INTERP, -2.00, 0.0, 50, &nafx, &nafy); gplotAddPlot(gplot, nafx, nafy, GPLOT_LINES, "function"); n = numaGetCount(nadx); numaGetFValue(nafx, 0, &x0); numaGetFValue(nafy, 0, &y0); nay = numaCreate(n); /* (Note: this tests robustness of the integrator: we go from * i = 0, and choose to have only 1 point in the interpolation * there, which is too small and causes the function to bomb out.) */ for (i = 0; i < n; i++) { numaGetFValue(nadx, i, &xval); numaIntegrateInterval(nadx, nady, x0, xval, 2 * i + 1, &yval); numaAddNumber(nay, y0 + yval); } fprintf(stderr, "It's required to get a 'npts < 2' error here!\n"); gplotAddPlot(gplot, nafx, nay, GPLOT_LINES, "anti-derivative"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nasx); numaDestroy(&nasy); numaDestroy(&nafx); numaDestroy(&nafy); numaDestroy(&nadx); numaDestroy(&nady); numaDestroy(&nay); #endif /* -------------------------------------------------------------------* * Rank extraction * * -------------------------------------------------------------------*/ #if DO_ALL /* Rank extraction with interpolation */ pixs = pixRead("test8.jpg"); nasy= pixGetGrayHistogramMasked(pixs, NULL, 0, 0, 1); numaMakeRankFromHistogram(0.0, 1.0, nasy, 350, &nax, &nay); gplot = gplotCreate("/tmp/rankroot1", GPLOT_X11, "test rank extractor", "pix val", "rank val"); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "plot 1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nasy); numaDestroy(&nax); numaDestroy(&nay); pixDestroy(&pixs); #endif #if DO_ALL /* Rank extraction, point by point */ pixs = pixRead("test8.jpg"); nap = numaCreate(200); pixGetRankValueMasked(pixs, NULL, 0, 0, 2, 0.0, &val, &na); for (i = 0; i < 101; i++) { rank = 0.01 * i; numaHistogramGetValFromRank(na, rank, &val); numaAddNumber(nap, val); } gplotSimple1(nap, GPLOT_X11, "/tmp/rankroot2", "rank value"); numaDestroy(&na); numaDestroy(&nap); pixDestroy(&pixs); #endif /* -------------------------------------------------------------------* * Numa-morphology * * -------------------------------------------------------------------*/ #if DO_ALL na = numaRead("lyra-5.numa"); gplotSimple1(na, GPLOT_PNG, "/tmp/lyraroot1", "Original"); na1 = numaErode(na, 21); gplotSimple1(na1, GPLOT_PNG, "/tmp/lyraroot2", "Erosion"); na2 = numaDilate(na, 21); gplotSimple1(na2, GPLOT_PNG, "/tmp/lyraroot3", "Dilation"); na3 = numaOpen(na, 21); gplotSimple1(na3, GPLOT_PNG, "/tmp/lyraroot4", "Opening"); na4 = numaClose(na, 21); gplotSimple1(na4, GPLOT_PNG, "/tmp/lyraroot5", "Closing"); #ifndef _WIN32 sleep(1); #else Sleep(1000); #endif /* _WIN32 */ pixa = pixaCreate(5); pix1 = pixRead("/tmp/lyraroot1.png"); pix2 = pixRead("/tmp/lyraroot2.png"); pix3 = pixRead("/tmp/lyraroot3.png"); pix4 = pixRead("/tmp/lyraroot4.png"); pix5 = pixRead("/tmp/lyraroot5.png"); pixSaveTiled(pix1, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix2, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix3, pixa, 1.0, 0, 25, 32); pixSaveTiled(pix4, pixa, 1.0, 1, 25, 32); pixSaveTiled(pix5, pixa, 1.0, 0, 25, 32); pixd = pixaDisplay(pixa, 0, 0); pixDisplay(pixd, 100, 100); pixWrite("/tmp/numamorph.png", pixd, IFF_PNG); numaDestroy(&na); numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); pixaDestroy(&pixa); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pixd); #endif return 0; } leptonica-1.70/prog/arabic_lines.c0000644000175000017500000001350212271322245015234 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * arabic_lines.c * * Demonstrates some segmentation techniques and display options * To see the results in one image: /tmp/result.png. */ #include "allheaders.h" /* Hit-miss transform that splits lightly touching lines */ static const char *seltext = "xxxxxxx" " x " " x " " x " " x " " x " " x " " x " "o X o" " x " " x " " x " " x " " x " " x " " x " "xxxxxxx"; int main(int argc, char **argv) { l_int32 w, h, d, w2, h2, i, ncols, ret; l_float32 angle, conf; BOX *box; BOXA *boxa, *boxa2; PIX *pix, *pixs, *pixb, *pixb2, *pixd; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6; PIXA *pixam; /* mask with a single component over each column */ PIXA *pixac, *pixad, *pixat; PIXAA *pixaa, *pixaa2; SEL *selsplit; static char mainName[] = "arabic_lines"; if (argc != 1) return ERROR_INT(" Syntax: arabic_lines", mainName, 1); pixDisplayWrite(NULL, -1); /* init debug output */ /* Binarize input */ pixs = pixRead("arabic.png"); pixGetDimensions(pixs, &w, &h, &d); pix = pixConvertTo1(pixs, 128); /* Deskew */ pixb = pixFindSkewAndDeskew(pix, 1, &angle, &conf); pixDestroy(&pix); fprintf(stderr, "Skew angle: %7.2f degrees; %6.2f conf\n", angle, conf); pixDisplayWrite(pixb, 1); /* Use full image morphology to find columns, at 2x reduction. This only works for very simple layouts where each column of text extends the full height of the input image. */ pixb2 = pixReduceRankBinary2(pixb, 2, NULL); pix1 = pixMorphCompSequence(pixb2, "c5.500", 0); boxa = pixConnComp(pix1, &pixam, 8); ncols = boxaGetCount(boxa); fprintf(stderr, "Num columns: %d\n", ncols); pixDisplayWrite(pix1, 1); /* Use selective region-based morphology to get the textline mask. */ pixad = pixaMorphSequenceByRegion(pixb2, pixam, "c100.3", 0, 0); pixGetDimensions(pixb2, &w2, &h2, NULL); pix2 = pixaDisplay(pixad, w2, h2); pixDisplayWrite(pix2, 1); pixDestroy(&pix2); /* Some of the lines may be touching, so use a HMT to split the lines in each column, and use a pixaa to save the results. */ selsplit = selCreateFromString(seltext, 17, 7, "selsplit"); pixaa = pixaaCreate(ncols); for (i = 0; i < ncols; i++) { pix3 = pixaGetPix(pixad, i, L_CLONE); box = pixaGetBox(pixad, i, L_COPY); pix4 = pixHMT(NULL, pix3, selsplit); pixXor(pix4, pix4, pix3); boxa2 = pixConnComp(pix4, &pixac, 8); pixaaAddPixa(pixaa, pixac, L_INSERT); pixaaAddBox(pixaa, box, L_INSERT); pix5 = pixaDisplayRandomCmap(pixac, 0, 0); pixDisplayWrite(pix5, 1); fprintf(stderr, "Num textlines in col %d: %d\n", i, boxaGetCount(boxa2)); pixDestroy(&pix5); pixDestroy(&pix3); pixDestroy(&pix4); boxaDestroy(&boxa2); } /* Visual output */ ret = system("gthumb /tmp/display/file* &"); pixat = pixaReadFiles("/tmp/display", "file"); pix5 = selDisplayInPix(selsplit, 31, 2); pixaAddPix(pixat, pix5, L_INSERT); pix6 = pixaDisplayTiledAndScaled(pixat, 32, 400, 3, 0, 35, 3); pixWrite("/tmp/result.png", pix6, IFF_PNG); pixaDestroy(&pixat); pixDestroy(&pix6); /* Test pixaa I/O */ pixaaWrite("/tmp/pixaa", pixaa); pixaa2 = pixaaRead("/tmp/pixaa"); pixaaWrite("/tmp/pixaa2", pixaa2); /* Test pixaa display */ pixd = pixaaDisplay(pixaa, w2, h2); pixWrite("/tmp/textlines.png", pixd, IFF_PNG); pixDestroy(&pixd); /* Cleanup */ pixDestroy(&pixb2); pixDestroy(&pix1); pixaDestroy(&pixam); pixaDestroy(&pixad); pixaaDestroy(&pixaa); pixaaDestroy(&pixaa2); boxaDestroy(&boxa); selDestroy(&selsplit); pixDestroy(&pixs); pixDestroy(&pixb); return 0; } leptonica-1.70/prog/weasel4.png0000444000175000017500000000266510664716122014542 0ustar dandan‰PNG  IHDRRIN¦Ã pHYsb&2gIDATH‰–KLTWÇÏe_irg»°ó°"«â\«²( ¶ƒ%¡JŒRFéڪݤ%ņò¨Üc»h}çÜX]tQç²imÊ ºn†GÜZ.7mS›6{zÎ}œ{`ÆÆoî¬Î/ÿïy¾€_ÔÀ‹““MÿkÍÍ­ù¦¶ª--ÚŸ¦-Z–u-ÆÈÅB[ÈfUÂdÒô[vÈUfÚê’¶hªfòvg³é´š!šó…$aßÑ&Jì>„éØL1’š)YûFTõV€îؽ8i†ùõqJ~/î»ôÁÆç’¦f#„~Uí9!,{¹@53[áT©úÝnNnpIm‰3h†Hþ¼Â=JÏ0„rð #ÛÕÓWs(=¿˜ÉþXåh¸ŒHN¼¬Æîع·©œÎšª>Ò2Hùa£|­„kK3ͶôªÉÏÐu-£*ó9„Ò׿ë#H-Ñ­º$“Ìgh±R‚]жÄ{i×û2B©!ë@—ä4u;ÈŒŠRHQ/g Œ~éÆÙnƒ9êšJN{ã ”ÅÕ0Œ| MS ùLP8´kÒ$k «D4WÈííñ#Aß¡ayÛ”H@=~rG)¿Árd4“ÇB¾–O“pª FðÇí®7xÜ8gèm7'þù(9õF—­øa òîGæ­›n]$yë©oµŽ8ï+*C‰wg‡È1Ñó!Üýù€n¦ û…³ç††.ži…ódMòY‹ÁºÆ·ý$2XÀ·ï[ÂÝo¨à2ʳíElâào;#àõ8J“ó_{JZ—¹8­¨(¦èØè7pà-z”ÿB¬~„IF,NkÛÞÇF#Rh 9yZ_q…®æ|Æ­’¢ñS‘°.Ç¿Äĺel‘ަ½­ –¼éñúC’x!|Ö8Mgk[6Q)H!IØõcFrš rÊy­o4QòÎ`Ì‘LSQRHöÈã'lÁkH¦é¤m¶ÈŸ„qQÍ5’W7á{’8ʰ‹¼¦Ë‘ùß;"ÀMg/§y"ÅÐd&F@8¨3²šÓs’ƒ ÂÉ5•?aÎE•—p¾w÷!h;ÛK—ÓþÙµÝä^¿ÍEß¿-Ϋ/¸=*jŠóRÅù"Ïß5¶äëäýåÖ×™]‰ÿvjü7EaIEND®B`‚leptonica-1.70/prog/books_logo.png0000444000175000017500000005504611641417476015342 0ustar dandan‰PNG  IHDRnæ¾ìjYíIDATxÚí]w|ÕÑ=÷î¾¢.K–d¹ãF5Í€ ˜Þ;H„H€P“P>H¡‡¡›Þ»Ápï½É’eõòú¶[æûc÷I²1à"™öæ÷{ȸ¼÷v÷ÞsgÎÌœaÈYÎrÖ'¶ÇËû—¦£Öù®röÓ¤•R€&ò_š  "hšˆ4Q¹Z²ÎÐýÖ¥«Þ зéšÍÜcÏYÎz×öymB¿tĺ µ\" hF ´‘“H ­¡­@mªƒÍä·¸×-å[eÛP®´Óp»Zj6Øuå(©Ù(O±!«Rå¤Q¨Á¢ àœ‘m0`Œb²•“ªgä®fÐk¡œuÍuó›^}è×âÛ†â9ûnÚ„w–`©KZxó¯%t¡&”ÿg´ÑEêÿŽn÷@µ*®Ÿ°þ¦jÝ…4ºþå·ËX_ÀU6T¹:t`ÆÖG8‚íçI>\j(I (¥Ašê¾áŒQðà0LÎf0˜ÜÿsÎÈâJ4€Ä"¦­©Òîœ\¿üÃ…¿xƒ“˜œmk;àÝvèôâeRÖ¢Å#™Ð& Ã`a½›±å³P6Ü!í‡>¤4d£ ÝâÓ‹âÃôSh`À’”kª/ó=8å²³- ‡ÚÅÒÓPA‚’D PDþësÀD7 0˜&‡a¦É`šgÃà`Œ@D𤻆)ë#íÆ^m¯ŸùéOý>öm|(9ûöYÅFÛ”¶(€þ*0Œ"3Tt[ÿ§X•Q†<£P„‚lõ ›<è6)èeqjïXÀú¶н (y¬uXÌf¿O:ÆYŽGý]GÃsž«¡…)-”r\™iëvs»ô::¤O)i9)n„MÃ,È3#e%f¸¼<”_UÉCÅý`„ nฉPˆÁ fˆÃ4Æ™?”Ô`Z¶ÂK¼é¤×>üƽ'Î rÖ×{ÉÊþfÞöáÈEó©˜U²<d¤*%![\èj¦&ùhæ2S¬û6‚½Â¡üå-ƒ®ñÇuq~žå¡À±5쌂t%´çB éÄVÇì%±¦Ïv6Î]•l]ÞH¤Ò»¼àF|·p(ZZT>xÏaýªÇ-ì¿÷ÞÑ¢‘;ÀÌ‹*Ów pÓ@(Â1˜!X€˜Y)yéÏYAéOûݼIVrõíþ÷Ô‚ÏÉKÎzÛ(8´DÏßpÁðH2×Ê$Ppàù ’]éL1 @€óm÷¨·ÊCùÛÄd8–‘—'þGË¥b+£á¤5\˃ò(ak«mÁÒ–ÕÏÒºfòB'ÓÑ @ @*ˆ|6[õØè,# , YÒoàn#Œ<ú ’êÃŽ5ó e†  Á0 „#á7ü7‘BC)‚t5„§ˆdbªXpõŒç1=,9Û6ò¾]#‰òX­Ì£0´´ÔPI ÝáAwJ «Ä£©‹ÌÐþ½”??Ö2.&"ÚöÌd42i '-¡µát®X³vÑ}¯6­xw€&ͤ$=<’Mùž€€|Å¡HqÕè}/>³¤ú¨³x¨¸Œ›að 3â‡CÜ` "H \%$´ %<묙uÇM-«?êÀ·”MÏÙ·ÃF=¸G$^ÖQ+#4€ øü‰ÔÐ)Ù.Aq¬e«Ä“¿0'8p¿µflÉ?ºî±ÎË:Г–CCÒ)T\ÁI»™¼dK²qѽ/-úðêÇS«fX `u(ñÀ+Ù’‚€ ©•ÛÑV7eN¦}æ‡%ÕÅ%UãOEõ‰æ…‰¨ä¬¯¬ß Õ¦S`_J ÁýUOš = 8 äh É:õ\÷àൿÍ×»YÊߟO…;2êßí;×s5’˜(+ÏNÉ­®_þÙ5ÿM´,Y ~ú+ÞËန`ÇšÅcoý¦f‡ ˜Q2𤫠]X¬…Î ÿÁiß3QÂIég—ˆ`Å>YT7÷©‚€DórK?g}C¬ø(Dhæó'Á*þ.ÆÛ› (7?Þ\Ñ’ROYŠî٠ɤF*.!­ ¼L ©æOç-ùøÚÇ<;¶ ÀÊÀ#éë\ºÊ†PË>ùçÃCÆÖ.®Þþÿà¡þ£‚*D)@R@k¤ˆ¤Š7>ÿJíüÇ_O¥wBDEŒ±T¯-2¢<`ŒÙ½ô~$cÌíó BTÂKä bÓ?ÒÝ'¡ÿÔÅ6mƒb°o ÜðèºÒ˜ˆ¾æj>Þ±u˜x©$D&dã;Ÿ-˜tÕÿ¬^mØviÚ,»ÞQ¿ð…;×Í:cÇÿñonØG+­„*¤@ZêŽú'žiXúÒ;A(Vð9}~‰ñ^¾7Û`]ëƒ{ñ]Ç“õˆBêz¾‹> ÿª¿ðçGÖ§¨ðWóñŽKH¥T7˜X)¤[?€É2K´àëÉ héL¬nÙŠÏ®ù¹rë>é-¡¥ãµ×?þTÃÒ—Þ°Àª ÛþDõÁw¥oðûmÔ˜_œã›6ÛEAwØCÝ¿EÁ“#úžÊß&&y†=a+v¨ãid2 ɘ‚̤!¬ìøŠºÅ_÷Hà•,ƒÏP˯÷éÁI¶­¬á¡H_«AÊqZjüoãҗ߀_Ú¼@rSÃ±Þ w²¡No…;Áûe¶E¸|V.ÜÙ,¯.ø©»=êy |Ÿ<”NKÝê*~‚;£‘̰™„ËÔÎýǓ‰/‡_.üuƒI×3<ì×S ª8ÇVºyõ}·Ö|0)ðLÖ¼K®$?gÛT>ÏÀR7£ò²/äP®}´ýĘà—kE°\B&£á¥x™4¤k£mÍÿ^ïX7k^:´CÀ‡ÿnâw¤“ë–ßýdGݧÓÎd-üÊܘälÛÄáD]B=Ú® Uã;ólP®¤¡\šwhM °2vJBÚ¤kÃM­X]3ç±÷ᧆ[°A¹ñ×i†Y4 ÔòdËÊÇ›WORÂIt ;…ý­mºÊÙ·P¥‹/éô|oÒÆi¹MF(8–†Ñ~¬cAKmkž78íë¿i›ôÝ{°(ønåð3‰€/qs`’³¯#Ü¡¬ÈrÐÞ }‡ÇŸ”«n9$.Ís¥<`ÛÂò œ ”pà$—¯¬_úÚÔLßÀðA‰?#¡r@’³¯ P²`¢âݵ(´ÁßùÎJÒ3nȆuÒ#XAy®_¾.:Þü~ÑZ¾™¦ôM Árö}çPÐÍ¡ ¨”í‘F¦ï¢¬—å¹âÁÖc<2P Áu4´ãA:”ð Ö¶ÆoÏ€ßsÎü9ËÙ¦„==<úîò'ŸóPÒ.~­n)¶MPÂ…–H+؉ù ¥—ÉJäú_¾Â2÷\Ã!e?Ïv(GTHG–j©ó•¦°ÒŠ4¸#$Ôê‘njK[m‡>ôü7λ²fŸ;Œdr¦ì=Ü8¼LËRÆ) Æ %ó43ã‚x“PÆRÇ1f®mq§ýàg“›°Šî¾±J Kë‡@Ô#@ßÏðÞk Ýxr²ÇrOŒ†TU¤%‚P¤:]buÒ‹VÙÖüãÿ÷Zë–~³.@ùÃýëvétÍãˆZž«¡<´ýk©kž67uru_b±^>’'2GËÅuG {·°-BÈ/ªÃ|¡Ãqp€xX+޶r‹Vžsê{«…óÚÑO¿±üëÜŒé¹ Œ¨Ž3!Ú~lØóweZ„h 0íûò,¨øgÀLD™ìUÛétçÛ{LmK…žüÏk­/ßö¿ÚÔ×µf®{´#,5†’ÆvZ«a’hÀJ‰t¦»68AÉ@8Z”&IA“)àI )4¤$xž†”¤UX+ÊãÌ~Ÿtzòû÷¼ºç3ëñÖAÚ˜6ÂôÍ#^û·Ë KûX£#y›½jÿ¬\ÓMµÇóáJîÞqÄk“>D·vLŸ›3ÿ·;0Ñôdzèt&ÓP HOBzšl—džkšÄó£”Â4L&ÀÀ¸ ¬°_Ñ/’9↳Œµ¿8z§»¯üwóï|Ü™Â6*ßÿÃýcl‡7´¹‡HÍÇ2Æ(°bÃàÌàc¾nXvÔ"hEP ÐÊ×@–Rû?=@x€–$5´’ ­Á(ña¼é½umk¦$A­šºxÀÒÔUvßÛ9žæ^Ñ/¿­ó¢ÐÊÆ XÒÛÙ.´#üŽ{­0aቦ2M0 ¤@™Gn—G^ŸWµæÇ‡•üuÂSŸÄ&ªÉ1¸ê‘X¨%&*flOšàº„LJÃMeওvN|Á¢yï^p=€éðIÙXâ¶ËO 5tÜÄÛ’»"™‚Ž¥áY,¡E=W+”W߬E‡CJ”032„‡+GhcxµU† ÆÑ0ƒ†OÞI íIÄ wòÇ,uÍ/¦Ì…>l¸ìœù»Ò£ýÆ×t>£dnÒÎÀN µh­š´HÍŸ±Ú]¹¢ÑkJY:6 ­ ÙîÐø>ûl¯Ç•öcÌ4#„¾çB(@"£—M[n^~ô•k?@¥ñÿpoM‰K?Ndè<Çå{ 3;Y1€óñÜð§)DB Üð1 PÐ’ „†×Õð\ é)()¡…IZIH»qEÓÊGŸ¬_øÂtøZ°ðKº¥ìž]"V¿öZÂâÁ™"5(­@S`ÍX¥KoµÀ’ýŸC²¡õ—æºØõ,aU#™„Nd`;JÖzVý2é4ÖKÙ¡Ä f–ŽâáA#XdDa8FÄò¢@4`~”ǃv<´ªô»ÿ¿ûûÂšÕøŠ„‡ VÆ'(²=‚!DJù7T+­ ×®_ܬܘŠlhsÏõC#ͱ{ùЦãK€:pã6Z…N¼(“ŸNlk›6§#Q?½žîqïÌ0çù§­ÚóçÑÒï’”»‡3X~( …ÆÁ”Zü cEþ¤Éã÷ºý é³þ_{´WOx±øwG2w̓†—‘Ü8213«%}Åzý½¹éEZáWDg×€ZÓâñÉ 3áÛ^Äûí˜7âºSò~yÀ®î‘……ž ̈ï¹c(‰êŽÜ9ýò‚«îÜõ×-7÷¤W®åæ§âf[ܽ¨-c\™¶tµç„+¡¤2ÓÖ¤ÜX'À 3Ú¯ÜÈ+«3 #Ä s„" ¦Éa~6F)?Ãé9J;ÉxRIJ ¦<Dš+7‘n[óÌ;kæþïãHêƒû“Ùð'¢îP‡±õ©i»Õ‡ÚÝ׌ eõ‡:Óû¡Ó_‹VÊ£3É9·ÅZÞ›ÚÏFIt‹8EPQ:â¥gMp‹‹ºŠ³|DB~HÎ8ý=óÈ EÑûy; ?ëÆ%µ_*Ÿj€íÑ‘Zž_(”“ Vص[Úà×väR²’ÿ¼æ´pMÛH$ÊЃj#‘–êE•üìæÚº—›-·~6¬ ¾~®‹îöîim>YÛ´ôI4½}õ˜a'Ÿ£J/é—È”™®ò"@؇ ]=w§=ÆÿÃj<ÿÉÚ–ºÞzÞ‚óo1Ýš«á%ƒÌÄÑÖä:7?ë=wßÛ±à ® NÎL°˜²µ=YíßÐgKíúc—Ú /=±ä°ßŸ€›«û;ý͈B€™]~=ã0ÇVÛXõPÉû]‘úEk\ouØ57îZS¥RÆ>KÃÉhH;•‰Õ¾ýñÚEÖ¾vÆšìwgÌàÕÛ¾Ýà~r\Aÿ}•ápȶMDÂFˆÁ0ü+‚à âñ†OçÎyý§óŠ+c!0Ƙk'\áÄãÁóm Œz\:(¹ïê.j ‚¢­-l‹ÿóʃ#kÚ'"‘®@k ²µ­7óÇDó³ÏÕ·L ¯¾«Ýã~›SÛâ+Nk‹O¿dÔàc.ÓýþTªPÂQ€ƒ1 †|a ú‰[øôºaÕ§=R×4÷‹®×€]»âZM|$>á$éH(átµÿ'š?šœh]2+@bù}“Ì?®º5Ü»ÉTZ;á5·£-%¼K“ ýsõÚ—ÓB-BwïP{ïÄ ^nð`ÓâŸt$-0ÜÉ{E ÷Éw©¿!ÞuŠ1Í©P`c»½èÑúƒEI+¾µ§»·àWw†tËå)Àë„HÅÑ\g[ç?h=øÔÇÉI£[,+ý\NVAÏš¶Ü­é°B³ö‚CòMUd0€I–¨ð5:Ë¢bÌÉûFvûÏûâ]¡¶\íýªGÚ.ê°ÃϦ- Og4¬¤„Õ2oñ¼7~öïÚy¿g%æÂõ‘Sí«W4,}éCèöyEývÙ“!T¢$AI% J3(¡ ¢bÝ’‰¯ï•èá­iÀ>º¿)#Î¥àºAaˆA€¥‡€:±@l6 ¤ïºúˆpcêØNí1¨¦v´'¥¼ ³þáÉ­±)Á3¬Û×Ùˆ)ÎÌÎäÚí4uCÇ8HI$+àyŽT0Œ) ½™N}¶1úƒ ‰aB³J"?¨AK‚&í·] ÒJz™ºgç|/-ýÏkoÆ2W“ëq¨ÖNÄ“x±w&Ö7gÁdu°à6g£k™©íÉEQÇqÒ K*èŒÏÎ#ËÊ3¡Ì ýKÑÀûàO©ÛìÙJî‚ / é¶ßCÙ€Lœ’M6&~('?9%59ð®ê6Æ lⵤÿøxâ­«C÷l 7¥é$ý”s‡el¥wêó—ç_  › ø•µ«íøCJ× X¶†•Ò©öäâ®x¤W›©>’ Û/(X˱Ö5ŸÎiXüÀ/µH¶)éA‰l&D­W0Â#ÃOÝ󨻝 ¾'ÛTQQP«{TÈöH#o)¿ûÚíÌæôãL¨ÒPGɤ‡GÓ­¿ßÒ1 ¾¤ÈæôÚi™K®~º1,Þ&O€±á¹–"XR#£€œü3.+Ú¾ózÆ•6F@“‘½6­ý|a€Ak%²À÷’MÜyí±¡¶Ôßáy@* j!‘ô°@8õÿXS÷rà•lé&Ì.rçÚÆ©Ó 2·xRÁQíH'ºOø€ÅfE»wȰ+ôÃfÈ2Zó/>4LÍ·Ay€²7t«uõ"~ë[é×áwfomÓ'Èý±Û×uŸH‡  x •ß$Çýt-1ààQò’KOŠöÒW ×ÿ¯óð„gܦ$Áµ5ì´‚r,tÖ¾<5Ù¶ryàâ·nϤXkæ<5ÓO¿Ž´ˆqpÆÂÅã.1îœára›z#@îºü-°HKâ>&TYЙ„³Ñh‰ô#íïžåºÀÛ¡Í= Öâ’Âqa» )O!é)$¥FF„2 &PÞO7¶ö¸Ôl¨ÎN2S>Ĉ‚-A=hè®Éï ´ßuÝ€HkæHÅɶXvÌFÒ"<ét~(‰ê¾dk þ€}þòÕ¶DågRžTОT0@ YÆ}ìÂ_Ÿ^Y6aSx猋KÃÔü ´A»€HAdÒÈļ5_M¯ïÙ…Øm@rJy­Gp¥«ARwK—õ ˆòÏGרB1žåLþ½¦8nã^¥ˆ{Áq4<[Bº–jZõÖŒ€|ìØ Òš83_½ä¨–7²·‘!okàFŒàF$Z>ä˜K6Ç3ì©­DÝ{ië<å¿]ú+îÐÑä‡[g)Kâ/6mÆY _ª#³…¤› Ls´JÛ’„„'‘ ©T)¥0Bä^2‡lè¥p¥P­µ?^k¿°gCÖ™qƒq#Äñ=õNòc™Û™ƒIÀ²ý˜¨“vç›mSÑ=.¤7R @ji¾÷w­5!˜'$ýçÂxà=šŠåŸÎŠÿ8÷W.ðÂpê*ƒÜ‘  ÒÈtºp’’Þ]&f£{vRo¥¥Õù÷Åf4&C/’"(A~ƒÖg`œº6Ýðµûí?œ øËÀQ°Â =ÅÆhí÷›9¶†ö\ˆL{2Þ²xMÀqØ[ä™TûÔ›eƒüû̸?Ž…›¸a‚q3ºÝ~ƒw>qßMõ¦tðŸn0Y¿§gsmÝßÿPdÆìk¡$àº@*Û’°<)ž5Ýõ¶8q2¤ ¢”,¡q!W„Œ’°”€£5òt¨j\4o¯ ï—ý ƒP'›ÑÒ=P”1€1à FñÝRüß´ÓàŽ?f$ì3!à¸@<+åÁò€d­JÙ‚ÞïmRç/^õn[œ¬ Ðä³íP*{tvUvs ÆŸ_Y~€¢/{>ÖÜß7©ó7€„´iÛðÒš[Ñ1m¥Û“HîMó–4÷)‚Tšüì†QàŒùÞ0ù•£ÑgàÞØ]qßšâ´0.Px‚àxáÝ^<&Ütv2å–l&5ï­ëæ{ñî¥ÆÀà—§û;Æ—<àDe›jn(§ä‡:[~3KçLæaI 8.(cÁñ4RJ:Ëm{¶²’½å‚“ù­êjORaFj$¥DZŽÖdH:3Xçì;ÑðÏ)™ôÊ ××DQ¥µ‘à]ìó.c8 GK ƒøý•¶ÔAÈØÐñ4lWÃ+´W<À zŸ¬v ă zÙ u¥b5öÕEgnø† Œ:.`Ú-†RþzSÜ”€ki´$©Íòhk6ã—Ò?ú[笘}ÊÒþcŒÀ‚-©0¤Xïô»£ÍCnl¹”w‚+1T ¿çF -„_µ*’™€÷Ùš‰ žðÖ=Ö®P°ü{"„F(oø¸à~G7ÅCé.nÃVW±ñÎÌ/H*À“€å@Û„Ôˆi‘¨IÛ ½Ù5J Ÿ5¤é„Ã.Ôµ‹e]”ö$RB"­4,­u2 ¯°Ö×nÖ¾ÛŠÝ6Ͳ_u4­>¯ (⤩ƒÌNOîÝe8Ú¯_°`ù÷K:n½lo3åNR® J[PiŽ+!¡I¸Ù:„¾Pœ×÷4µ¼n…Õj"­H)€ñ`Š< -†ÁntŠ vý".¥ý³óŠC2þ´ëg\„ aKhW£#ͲEk}¥jçµÙæ]Õ]YW¸Ç4!‚ï€8„ŽNÿÏ…p¶ÇNUÒ¯æÂ÷N ¤_4)tÝm1‡5ó¥ 'ƒœ•Ô“>ì0Zi€Uö>hSÅ¿dêíØöÿûí½!¥ßTäx~•fHBe+`7ë¶]òÓñ­'ùTtÚÚå¡åÉÛívH¸q¡Ð¦¤õuLÿnÿ£Õtí VêzON0À‚¿&iíd‘˜XL`è.FbŒ3˜ÑòòÀ5ð=)l3cöYð$iÀrA– OÂçH).u'Ö¯<ìUû¸-‘Nï8øÍBû…n¼Ë{d 0ÒÐ`0ˆE÷Šä6™™èN“vYž™9Ü€3ØÏÑI@{Pž©”$$R›ÜWÏUϬÑom_Æ;L¦Ë» Ýz` $ #‹±GaiÍ=OÚßþcYAÊããóIÍ{ÙÒn„ý†n¦Ãá°>Ô¬`ôzÌjð“H,’ŸW:dp:VÁW¤u6Á±•ß̺û C¬k;Rú7N)ÀPš´†Ç´‹Mœ„»ñâhl=ÁX»”Ïlœ@i‡¹iO#å)¬VÃ+Ô9ý#/3µÉ“káëF·ÜL¶Hs£We*RI¥ <ëÚõ á™ÁÀC$`u€Èß‹Éq™;®0iiÓ±Ê÷Úd¹ð$Aj‚ ­3ZfKÑûª6G7GÕ+ˆ.¦€7aŒŒÀÙÒÀ(Ù{|atØô´ÓÒsQÑ¢_˜N²á°€!Ð.¤§ ]¿ÖH(–­œì³£ îL´žôháÌ(ôÑ=r¾B6ì‘@)Cå±»»Nœ¡VõÌ6I^8ÂvY5þVÚ/ÏéZ«…E½’+Prc•¿Ê~ºU>±ˆ #”_ à+ec#4¶È„ן%ì Pޤ#@žð%º;–¿Tî´þªóÊò›“§³)Ë/'ìµ%à9–§ž¦âË^‰)ÅÓó$Q["mQ¿I…|¦V²МÀT0' £ÀÀ9Byƒ€b~/%‘Ü¥(ãñæ p<+ ¥¯“Z}¬YûdkûŒCëò†¡9Ⱥ>Ñ–KsøÎáÐîÓáÌ_”Ón…‰Ì>]Ô‚’€–ÐÒ¯ …&þ»õµöŠJ+cRóŽö?¥Gz6Øt>?K|TÛ1ÈtdÁÑuÅ@-à †ïJSp׉ü¦;#RT-ª,tR­[}àyNû¼Hx¤ Î#Ð=J(Èïo#­ÒF`Û Ø“yn·åNP r´Pþ½ B>Xø ÚË~²«¹.vŸ¶ö4JÛý´åÁó,AXí¥Ö>£âÓÞM%gÖÛ^}%j ¼‘Ô—y#(§^uÕgÝ7ç~ÈÃ8ŒhUu¿» Œ5Î_ö}žñö ׸( íJhIPZC“¹&3ºŠÉûê{¼ÐÐn];ªzŽ(è~6ä{)D†ˆ2KúœšÝ›ÃMW‡´=¼«B•²€B é?÷¨ùåµ½dÔ‘áSG–dcêà®qÿx¥€±Õ¨Ì£Aò‚ «üZIpí“ÒZQ7.qn÷]í¤ZCØŒJÖY¼~zÀ]Ƶ‚…‡ˆùoZù™ "OK/½M EÆêo:¢‚²‡ˆð5Y( é `äõôÐZs¼ÁcÎá¼Ù¹Ìø´æ0fJǃ#4ÒB9ŸˆÄ‚§¼ø§v$i¢ö@²ÉÞÈFEI«†8šAqÿeýÆXàb3p#ZÐÐÞccó?ÛV¨üµZ"½3‰@4_içAkÖNà¼Èäy=h€¾mGôt–2Nér¡ƒÓÝoZeÁ0)à J° 2x—ÜŒÿlÿ‚5¨Ê,2o‘…–€IÈÛP„ç´it ´Ö…DAhθâÊq{À/Œ mm¶‡s¤”ö=@R¾:›îHHÑÑ‘‰Õu`ö¶IÛB„5ã` !ºúƒ"šçÿuèÓV…ÃVY纩•¼íZ‰­Õl/ÓøZ{|^JÈVtËjd½½t šSþ÷“Ž#.\¶ZiÞŸqÖú®d6ìÓˆÞ-ZXYå¤[¾ë€Ç)#Ot5ä‘fþú&ßd ”fÿ±Ïd Ó­$Nˆòý "¿Š6[†/Iƒ‘ ¿'Üh>ïñÕ”ìâ^8÷%Ë¢TŠî ^_šà5€ß-güïú܈´ºðÆN6ÕPþ€¸YÂX ,Bƒ_ŪµB´d§ÝJ*·˜h]^‹­+Ð#Ã`$$”ô+•µ„ÖNjé²€0Þò4ûfÊÊœ\ÿ` Æ@Bƒ4ó;ѵFT³‚¹Ên¹zmýÝÁÞ,EwZ[¿—¼‘.‘¬Þö¬ýÐE§§ƒT—Ö¥¦¬ÿËýÒcn€1<Ô¯rÈØÓ³ïT=Ê‘—ÎYo3iOšZR«*@ʽ’~H5 Üq‰å¶H“Ú²1 ue$+Æÿ‚ë{LZøŒJøüI€{Ü ÿœ0€’]6¦:T¶ wdÖ®ç¶*|/ž‚ÌòµÙ¿úîƒ'´B[KI _£Gi8 Êø ðpQéÐ]Î8è á¶ÜCe,êw +hé2ÐJÅ?™Žn±¢-“Íý'ZJò¤"¡»ÀYB;èÀŒÁ_ï€ßõ¾À<ø5#‹Ñ­‹’-`ìõ0Ýô“‰Éèw ƒéÀµ' ´Ï©ôpàÑÀ½ÏÁ¯u¿.øÍíkŽKÙôF”§2˜ç,è@×éçgi"è%ñ< ÏUp×URš$u^¼qåM^Íž:$µ€ëú¢ËN*­Àƒ•Ê0„Ì,yاñº%kœÓFìÑ’FA:DƒCAA‘† ^6)wó”taJßåTÙ ¬ýÔ³éJq…» ]Ñ$Â}ÌAƒ7ú Ë¿‘~„@Âw´ X^W,ß3œPLÆÞÔ<´o×Wä¬Kå™´Jª=¸ñ±`Smц?ýo…\býI´”~/•ÐJÁÍ,_Ú±næ’ dp¶˜Ó:CR9Ъ†ágw`€1 ƒq0hìIycƒ%µÅ`× €‚ΆiSKW7 `Ì÷PüÂ?öaÜãþ‰hŒÚcèØS÷^»ð…ÆÞŒ½6Õλeù!×øcc;ÊŸ¼ÆÁHÃ4M€!“! Цxœ†T ®Ðp]ÀÉh86ƒ Zk¸‰ÙO/xç¢Uð+M=¤´ì õ(ÀÁ ü¨ÐÀ¨Á‹¥û:K¢)Ä;¨óI9"(ÒðÀ OÅîCêz&JË´Ì2ïà÷Ñ08 M`ì`¶ãÄîÌJŸ. ÍcþE]^ŠÒA$ðÅm‹±eO@¡xËŒ‰E•G]N0Š L1Ì—à°üêQ»uóóÞ¹î.lh”TŒ¹®Í¦•€”çúü™v½Öº_‡ß Ú¹Y÷éËBœMØAJë˜T*i(VÀï„´Ë9‚0RG·ß±8ðÒ¤µæës߸¶Ý Ô¤¬Mt„Â}t!çf¸jÄ §1Ú6+r;ãúE»ŸpåÊ7×µ˜“::è¨dÌC¢S Ñî"“ˆwºÈ$2iËRBûbQJC••ÂÓpmÇ’ÐÂ…t]j¯yìÙï\ôj°ðº6£ÍQOŠu§ç”Ï2c0¸‰2ê¿o¿â‘è.pê;D1ãA¸H0H‚ò€`3í&HµlH’¤V)t<[â²çà à&ÃÎåØ)úÍ‘éò´GÐŽ_N¯5P“ Fl¤êsÆ ¯!·q¢–Zú*ôþ¼ êÖ‹a %ƒŽùEåˆvÀ¦”Æo,¡"S”$S áàU¾woyåõ޵ÓgÁ—ªHm¾Z³oSðˆ±v¡U„¯"GŠ‚Ž`0‚É X¨ðЂÂ{#äÛ*€–NÓsˆ”žÅë.žò‡—ø,ºa€k¿*T´ÓÕÛ¹kÓòw;6ùÆn¡ýðêÅClǸ¤­ƒ+=Y E¦E Gia“VŽ$RJ+ÇeHØ ´•_P’W6b¿ýC&ƒa0hMA¨ãX~L, ™ÎOf­™õïwá ÒÔ£‡†„Ãõbò„ï¤e»O‰ù';4üª&2v‹æíöâ[ªüjèçžË´ÖPZAÁ# A„ît4hµjC¯Q34Ú«-4õîŒë®þ fÜ`à!Ã#Œ,×£ûòòXZGúòt38ïUÈW˜WÂ×]ÒpÜùMÈ’ªz¢yÕ‹·õqÎqÄ£ÕŒ1 ÚC²ý" àfqånükkÍ!?¼‰Mö$.¹³fpm‹q©ð$”gÞ‰‡dëko×Íûß«7ÑÖ+^œÞ 6[S†^RÆ^\+hƒ¤Áá×úœÃÐ Qþ÷oqHÖK€B“ÿwò;Ÿ7kf…»2ÎA\ûÕÚœu¯Nn¡o^áÐÏ»°iù» ‚Å×gJø¶ãv¢é¹ÚyOMŒ­›SæXEʳ ),?‡$uÑ]µ*G?wTÞ€ñûë(‡€ç*¸¶‚.”kC+vruü§5ÉÖõˆµœÕŸÈcŠÂœu÷rpø Â¡ÁÃÈÛ¾t@¨/…1ö›}âÜ#‚Käó' 40·f¡'–o˜y¸ÿÅ¶Ö Ž6¦çÁÙþ æS(0 Àû¹ Uœ:>ºçÃXKàKXRßà"‹v5‘†táÊõ½“u4 ~:ós‚ØK>¾«nŸ²1WDJ&<ª ¦_/TŒ¬R;ƒ‘7xßöÞ]?vį>å+àšÿ´„ëšÜÿ8U*׃t]hå!Þôò›5s|À2øª|z£þd3¬â¡·ãs&ìùI‘Ôg+Ú¸é7Š2†ãØÅcÏX1á鯶ô]³ç—‡5\~"ˆ<­¤‚¯} À`&gq“1v*/ú |yÆmÞ&ÓPt[ÝO‘²šHqšÖþKˆ‚­Ä €`Ìàý‡veùàq#°A¹wo§7>¸¯õÁÏÆ –­ökˆ²x~É0K¸:ÈèH?£ã(~ Pz>‡"/ð®6æYÈX>{K*@jæwæ=<c0@0¸‰BeY\rú8•ÎúûY?Mìh ‹@ÜŽY™xŸ«ºå™Ä¤¤m¬‘R"~Ù½Áð(† Œ¬÷Ý~9°/Ÿ§0ŠÁuƒ) pÎk«15x–ö—¬kÖ«¿}0ÙôÚ•Zº%´ð =×¶žçŒ–€Yq཮úøä˦\u̹ÿl27>Þʯü÷šÝ.¾§á®æDh^,…ý­´‚´mˆLk¬nÁ ÷­]4ñÕ ýº[«f§·.ësÚÇ V¦ 9_* å+V(³`€É ˜Œ°‹.Ú÷·C«êëÃþ«K?úG3‰ujíGTÌ0ê³î7tô~×\‡MT¯Ú @Ɇ5›¦k¨÷K¡!A%´Ðä_‘#ýeÍ}´”9=À“Ê-ƒB"¿æ¯;ìÙWç܃p_Ü€YÇ\dH^MÄ¡…€C@†4>ì¿P¨½nFÂM/øi¥Iû©¹léq¶†![ðÆ Æ9+©>âš¾òXl¢poŸãIP_Á³À¨»ÿ#[ô¶Ü|¡‰…q‡ H¡OiíËøEßAÿ:Ža…g(ï‹´+K냡 Êp´BJKØ HR˜k$>]#åòP¾0;sÉýíkê:BHWCº¾Ç¥¤ ò õ¸?ã|H¹ù¯ŸœÑDy‘ÞË$o(¤‚—¬$àe|RxJ'¦M^…A(kmF‘P[·`âssßþÕ/WMûÃ9íuÝžnûð-;6ž›\½Ú‹×ÖYmµk’k,´:Ú[‚1£þ”LWñ\[B{. ï}ÖZ3yf@À®CoÎò&¶>_B›‡ÿ´pMsKT>%ƒµ(¤‚PÝüžÁLpƱ·(9íöáCÎ x±mrØoŒ´‘³^¹ð}O{ö!y¾_èF] åÌ0qt5Éä•mwæ»ðPzѤÿ{›?¤wÝj“AE\ ð‡>k$jhCÌû²ïI¿š·â“7Fïðødø\ø.%óàˆ™DØÁÍßû¢!ÕGÝSßôdÀåôÚõ‡ê åzð<‰¤ÖHi‡ ÜmzÕͼðJ±¯8Õå__sþ~ë©ü¸’ÚA <“ty°â8~WuÞÄÂo|¶ÄK¢SÈÌM)¡\‰L páM6ZoŸƒëèØÌЂ‚ð¨@"Þ¼¨1Þ¼hvˆ…ð‹³ýMú¤ËþËvtU8ä7þy®†kkøµ- Sæ¢{̨ÓgëXɱþžÙ[̹û „ÎŒ*£B1‚ÖÚ'dOÅHƒÇÉ¢ì:{Ú®­©}£}ü¥JÖì•Óo»I‹Øb¥”ßi)=¿Yˆ®JMÊê§0næ—• ÿÑv<øÊƒ‚ŒÇ׿©ø_‰º‹}A~ú;+ä³ykÄûO¦íƸ!k…Òp•†+<¥ Éïwò{{'ëâ ‹CFuo† +?æPžÐãµå ¥5’ʃE.iõÅž·ˆj’ú«6>½ð©ÕñáJórÏ#WzÂñ_>§¢ƒv ª”ÜöãP¯ºËé÷wÝ5"“gBx°:«“àd×…¸s9žjL`%ü‚±-MÉêàtÀOí.ƒßÃ2 ¾êô g=!ˆcs× áWõÖF\}ö) õéTÆBZj$”@š€Î7foºkh6åTW¿º?ñѬu¡¿)~ HšàÙ>YÛ5â‚v,Ž{ú÷…¿è-w9â5ßÊ<'â$5Ò'éþ£õxùíe˜?%»Iõ"›à±¨Á{¶h)°GµðüìŸk+xi¯}YG+­Úmpðt/žnøÂA/Sˆaæ“W›IΞ]S÷Pƒ‘™ä‘Š;ŠàH OR:(ËçBàá#íò;Þ5êOáÞ+‡Ä¢½¶g wÙ@±lÊ¿f&[Þø-I7MʘQYPA-iöHvꆙWU:ø¤'öûñSãk*ö9Þ…f:Hkå7‹’]ã&7ÑÄõ«×¾=­ s£§W\E°ÁQ¡u0 Zc|¦ð'·o7ü½ÁAèÚØu¬Í›àØbJ"®%2D˜É;?yÉM¿?•ÙˆMoÒ$öIw¤ïZÐjüGºÏ%xÿ%l¿Eh:fgqå-ç䵵ܘxwè_L'q´L ¤Û+¸ià™uxë¾éxc ®cËî§V"@K‚8”®3%Ðþé7ääÊï9°×¼LÆüœ.gë‡:F&y (`¡Í¼¿ ó$Oþ. o§ýu˜Q@FJ8BÀÓ Š "绺%—Ï1öõ[wµº…¸¶Èæì2zjpÏoHأУÃý«Jµ×}V_R9 >v8…HáN =GYž– oc¦™?èðív=eˆòÚ¦%ÛVÚØ† o»pÞ WäýJk‚”AŒ,\héB Zº)XÉE32+fœÇWðòDbáØòh´Â ï+‰q£ì¢ôã+`”ŒLYmy'–X‚-”Ò[vØag™+2÷x)1¥Ð©â¤1‡ÇfýÇMüþ@ó-)´"ÞÓä´ƒw WV†ôn”¿S¶›)8TC!„÷ØN1rHtåk3DÍ–xâÝ!W™éÖ›dÂCª•jìðdÞøÛ<\Çjôq lÿƒsh*8 ]¼Ì<ê­2Bù…åC&ì©ULJ©¶±­^·ÇW†¶¢‚®«SÝS0afb½´Z»„4-LYñp)›;Ò Ç4åK‚ß·Lºå6x×ÍGxèŽ2ÿìsªËÇ:¢ªþù†–ÖM½ïKÙ›ÿ² p¯‹¨äï¬Ã¼nª‘zåÇ Í‹Ñ]¥¾IÅÙÿw?,îÌà‘"?ó•qÜ ùc¸iø]ŸÌ9¸pm¯õ2K¯žü¿¿„-ìþÜ\;íŠ)ûÄ­ÒéÂõ][é¹PŽåe Ý @Z+ÄšŸ»»eåÿ6æ¦FÊþ\]}é¾™â+9Áä`çê“banÀ`p®Wgî;kíš?¥¤Jn*Ѹú''3U»šÕØ7ˆ´mv(‰å¡S+zÇèxïY'õ€åÁ«["˜*;'rå¾UòB“2L€GP„!œçÿ4£3™»,f>pëËtË3“ìöM¹냱ÃC^óíf:qŠL‹.0imCæexùáx'à9jлãO¿Ð?÷Éfé~ 5ñ²,AOä+è«`îröÀ„J¯Ž¯{õ— ß¿i¶¦„ýÁÆÀl[ ŠW’ºfU 0aYøI<Ø|mÀ‡mê½`òVÙïˆÓœ²‡£ˆ”38üfÁH°CÜÿµ™Mª‚ i‡Ôœd¾~;S`~ª¢¡•IèÃ`ö.ÅÅ<± ™åT²„³#:Å,© ÚÙ&¯ón£é’ÇÉEð K;³禺<@Ñð=Ï>¬là)w2£d0½Y_x)´¸øs`YwÚ–†Š½mwκnʳ.ÜÒS{SíäßOÞ'–,î÷îxP®餡„R.´’b­ÏßݲòÍÍ”ìFì÷³þå')Jÿ¯D…pBŒ#Ì8BŒ ~†G&O.\\ì]ý³¥«ßÇWÈ=¬8æðCP›¹mã!®5:•ÀZ¸ñçÐöü×þ8j°•ók{\KÙE‡‡Ž>k¤þKE>¶cÌÊBù ‘¼à×aÀ5ŒµVÞý«Ú"Ï{uKý† Ÿ>Ý‹»Žµ3sâç…¼ØyÌv‹ !ÝAÈ´3k±ô†©xvQ#]$lj[€Iöz¾xÖC’õÿy÷Ž@à);Ö°«o dÚMιjÚ³?} _Ü ðåöÐÈ«`§.AREÒ¶Ü Ë>)Ï T†%Xh!ÌÐTF=¸Ñ ÍÚ`ð \„ä1üi鯆Øs'ô+ùÁ²ô¾RŠŒxPäf Ä 1†7uÕO±@òƒÀ4ã¶f*I$=(Æ!‘Gž*ÖB™.<­‡Û|=n™–qïÑiF·2þfÅP@aé€]v:ö‚›Íèè#üÑ/Åç3ÃÝÞŠa‚›&8g0LƘvÃHO"·áÞOžûíéXCŸ4/ÿ»É?èè(þ¬Û3± =« L( â­/n  d=•âQyáÏÎ+»rg·ðXF(¤•£ÙÓ!x…8×Nžœ)5^µ ÌifÔ¬ G¢v˜ñ¼<‰á<£÷7:ÅÉ-²M°Ôä4@²sVãâÎY5ã‘UØ”îú;¶/„-îöh—dt’X÷ä0¶~&È€ú„8Á`Ed¸Í}?q7bbyðü_òìYð +Ž-.:â`Yø»!T8–zhøø‰%¿©ÕdÌÀ‹á]eð+Á¡i E„:džGìÍë³ %Ÿ=>çl ËËà õë7h¯ÝŒ<é‚pþ.Ç0fFÐ¥”o‚1Ü e9–àa1ƒÃ0YW%«ag0o±aˆy&ó˜¶ʬVÒjõÞ36ZXtÁß—3 ”ðºžÚÁq1Þvð+Ãö¶2ªPz.”›ò|ïDK¯ Lˆ\WÉX«të;'?“j[üVp“ÄÞ 3HÅUíÝ}O3ÿ¸ÑÙ§JF‡ÀŒšŒ! Ö&!hpæË@dÉm†4œt ³êgÀZø±—™µÆÙd?ÚÑ7ƒÌ7å(3 8i7¾÷þƒÙ„1Å´CE!ªûPQ83œ# Ð@€– Ò‘pciÄjÛ°nz#V¾µ”/¬Ç:øºÙÎä¶âÑ®x )êØî`Û•Ã]–%‡Ú6 ðU!\»P >^+* @:žqÿ‚ 3„ðYé ´[h‘ªí¬›xÖ’o›ý•€xë¨~hNü n9⪊Lt•@±¯ZU uêS¬pf÷8L6Å£©þG之Î;e;Ù5‘¢îÔ‚Þ¿¢–÷üXRÐ`°É³W0kõTfMýÔuf ¢Æà{d„:[S'béÄŠª‡ìÓoÐá?ç™ÀX(?;Ì'nCà܃˜é ^ƒ›àYR7 o #Ѓ5Œ2Œ©c)Æ([dd±|M¬HkÖ_+ê/ I¡à9:è4u ¤å9P‚)K¸ÍMÂ[Wë¤×®Jw,[iÅë²Sꛃ8pSë8¾ XÂAš¼ @ÙöÑððÑfh— ^£>xA‰»‚Šø¼ a€qt‰·“Ò ™¬o\zÿjf>:ï+6xÖc(Á–K[ˆà ÉlæaÂá7–¨2‡ïh†ÆU¹s Õy0ŠÂÄ£¸ég²µr \‡éL²­¢v•’+š¤j Öa[ðJ|ÕÀzañ…‚TQ:p÷]ʪp\´p§ýPÕÎC¦_ (ç!>ßîs,,PÛÊÎaÙòÖì¨Ê€$#L˜#øEu)tE{ åJÏnétÓ«×:™5µnº¡!ݱbjhvö•ñ;zkÃf=–Hå ›,ªPœ}6IëaL&xÙÁÿgÜ×ÖÂÐãù†7x…Ð-Ð5É#¸üôz€HŸ\ßk %Óîa)›ý,åðÃ\›*XlYw¹ p¹úE‹ªª‹Êw“WˆÅý £ È0 ¹™_À‰€…LpæÏó´ö\ÒvF©Œ íd´L¥…ëtí–67ÓÒf'ÖµZɆN¶Dµ4M¿vzœ˜½WJ³¯Õ®ûoóñíiv¯åb¨•‘°Ò vFB¹”gk'¾xeûÚ×?mYýþ|'ÝÞÚ#ìêy¨dÁ[÷Øl%cöýÝ9E•G_Êx^3C0‚䂟½äA蓘®à&¦ÿ{î¿ý36¿¡ñ;k¬ß;ëþGƒ  xåõÌ %zœÞ=Op/XN°Àë¨Ù_Ý¡BÎzÙn~¢ÕˆYúI—_ê:VF!•TpÒ”cÃM®©_»ð_Ï·¬þh~¸38d²ë${°è/ð°ËîxÜþFþüV#T9’™&¸é‡@Œ~hNY/EAK+U;ûO§¶ÖLžVP¶±Ëeô‘ „mà~¡0ô—ž‚Ô*ß}»üιy"4`¢¥Œã]Gò’1 7ã@XiÄë_›¼ô“›ž%­êàgìÚÐ=*ts<@Q^ñÀív8à–;Íèȸi‚ñ cÉ»½P2>ºxÒµ‚ŸûÞ{)Æ6ü¬,0ˆàAÛ=”,Ï‘%‚Ò=ØíLfcîjξÃvÃÿZXFL´”q¢’ËÖHÆœ¤a¥Ð¹æ©·–}ú×§A´~_PcâlI p¥›J4¯|ù½ª?ÂŒŠ7Lih­@Jq£¨yÅ oÁÏȉïûóâ¹%ûÍ´±'L..Ýëí+0úµC¾IßkèAïÚé+0òµâmñy)u[F'k¸ŽF&%á¤+ƒdÓ¤™Ë§Þþ€%˜´`ëE‘(8ìæ¾ñëK„µàQ?µ¨»’Ù_“–`¼ß ~ÇFO=ÈJζ֊\àoØ÷:$ø^}(¿¿·î´g\®Áóü!mVJBXxV[ºvÞ}/Á¯r^…Þm0ÌNZh™÷æo®Öîš—»þ ««£u[F4¯x`vŒ ËJÎrö µ¤Í¯QRC Ï#dléúԙΙ 3±º•gÒ›`ÒÓ$€öµ ¸pëÔ®?Ô¶ŽÊï­ÔÉJÎrÖ‡váí«÷´<ã0)³bÒþà6-<’°b —À'_ãèÛ–Ù²ú£:’ë`=‘þ…l;…Э[›”œåì›f—+1©|u5Ï Túƒ™JVª¡1“m1¿W8™µ/2ƒ,ƲBç*Èöh(/eç¼ßÌÜ-øF™!Î'ÍìöÔk ?záÝæ¢Œ¥èÄÃ*ٙǚ~ð>åo•…ÖËvŸ:/vÌÓ¯5ŽêõJe$Ü»œ{PÅì7ðƒ•yŸ«—X³.S=eVçÙ÷õZCÅ…×,0¯¾h4]yþ¨fƘ\¸ëø·^ð¡e+ªor.~öÍÆ£g-JÜó»M€7à•÷›}ï“¶{šÚÜÊã®|{ø ¼»·œÏ–Õ¤y僖Ÿ<ózÈ‚ˆ~ÅKQáe·,ù×;SÚNÛeLqËaû•ßïzúÕ]F2ñ­¦Ã?™ÕyL$ÄïÞ}ÇâLö36f W$«nºwå_ç.Iì~æñƒ^8ùˆ·2Æœ oXxñ´y±Ó&ìUÖrÔ„ŠûßœÜúÔÞcKǬ¨M_ôê-G‡L~ÏgscÖÆÞÛsu„XÖ#ñGËú7ÅW+è7jð¾¹ C 2L#,ü”1I@k8ÖʤU }9Ã'(9ë Ó¶ãÈÂök.uÉa?èßÓ™ðGî}²îØ©sãçÑGpÉÍ‹Ï_Ó`WžûÃÁoþßeÛŸ -Áß³¼4<û¾'k~öÍÆCWEXþÎ'm‡NšÖ~â¨aÖå¿qÙqW>|ÆÜµé'ÿ|׊G>šÖqìƒÏ®=ø‹%‘òªn¼wå=s—&O;tßþÏÿæÌaä™-ðÄ+ …ù†:åð×þèØÿ€‰ÀÊÖNwÖŠ5™G–¬Lûâ»M{oì½¥P)ݣÐÕ¹n˜(î¿×îèâÕçaÏiW}VÐÞÉ«ý`ÒŸU¥â-Ó¦oC.ço9Rö›üpŒµ™ÿ¾_Åz!c¬åÀ}ÊP±—®N[¸"UòÊ-% –%Ç ­Î³?¤ê,˜Ÿ.>{øk»ïTòA}“SUßlŸïÚ¾ggBä¸wÙÇ\ùZÏÏ3¼°åè*ÈË3ìºû¤5ë2Õë}9[Uüçùú{ÞœÜvêöÛ<÷“]T]íúÜêÊ‘†±pEr(åg¿²,ÒrêQÕ“Î8~`ÝÚ&gæFÁTº«…'!])ü9ÌÀƒq‘’w¯}øöØFõÌ(ÜU)>ÈŸOEJÀͬXÞQ7eºÅ¾÷–óP¾Ù1‹Å½ÌÆþh̰ü9£†æÇç,I²ûŸªÅœ%I¬ªË°#öïßpÀ^eŸÛ¤Œ±ôm­š3c~ì„÷>m/€—Þo†Ávݾx cìsdíî;ÏÙiTa|Um¦ðîÇkÜrò ¢gÞh¼þßO¯= D퇌/ÿÛ{—·ôü÷ºpt柬ÁS¯5þ¡µÓÛãé×&G#üCÆ—7”…ð$€vvçç¯OÉØû¤C§(èä Kò‚ƒE‡ìö›‹šV¾?~›FŸ–½[~-=’¤\(i‰öµ/¾¿Ô¿¹²ûœ‡òm¶QT”GK,XžÂÌ…q$Ó’ÏZ˜x…1Ö´±³çÎ%`œaù£jlKŠŽ7>j}ec×í‹1x@­¦Î‹uñ†ÁXIqè„>RsBa¾Œ£û{B_ND…ë… GW?ñ“ÞPÕ?ÒòÞ§íÇÿù®·ÝòïUŸùû¹OÝúàêóg,ˆƒ1¶Ñp%Ñ4íu’n›Z (á‡Dþà{fŒÙŸSþ{%€Rôa_ÚYZp@*eœ­%@­’­o½ÛÙ0kº•ûsMª9@ù–ù"Ñœ3˜çìKWµÖA­g <«D_ö¾y÷8M óÊéóã7šé›/Ûþ¾Á¢ÍoNn;é“Ù‡öü·áÑtÙ¹#nºþÂÑG]ñ‹>(ïŽòÒp|YMúž­ûÇß\u÷[·Vmìsç¾qU³kÿKÚŸT©¥ëÂUÊ.°\¤tüùûžñüŸákïô:¨œsÓÂ!mü¿žíÊu¡¤ +1{îÚ½_¬¹5çäå[oMmÚ:=”—†°çNÅ8pïr”‡ôn;Ÿ”Έêý›™ К°ãÈ€')Ð%Å¡òC÷íÒÆÿ~kmT•G0a\YÙ®B4ÌS§]ý»cªºpï±%¬Ygå?ÿvÓ/³^Jk‡cNÛY=u^¬òè*jsÖð¿¿óÈø«þvùüù¢1¿Úk—’ÖY §M™ÙqÎ\¢ZñÙ-ÿÔ^l‘V>o¡¤R>¡•ö{ö.{áAçN™¸ã„ FÁ'i{…S9û†ù»5·ðI餩<Z:pÓKW¬žyë#ðç ÕÁï†Ïy'9@ùV8 zÿqe{nJÀ¯4,X‘2vUDþd8n¾t öر˜–Õ¤½?µ}ïÏ¿ÎY’ØS*ÂÑTdàŒã‚4aÖ¢ÄûŒyK“{.].ÝaDAúÒŸ WAÈÃ"!îí<ºèÒ Îö<œyÜ 'vYXóÁÔöÃÿó|ý¡ðäk÷?]÷ú‹ï4¿¾duª"àqäî;–´üü‡Cžþѱ3 †W>h)ø¢Ëo¯›Þkxõ7$ÓmZ háùS …çkk Ê M›•‡ Üåâ©GžÿÁÿ?éæ‘[,çÞ8£ð´k_ßÐdNMÅÅ(éZP® +6gñªé7Þ§¥³þÀµMa›”œ}cL7µ¹‡\xâSznx"ªJ[êæDRTŽ]4{ôð‚ÄøÝú%ÆïV:»½ÓË{ñÝæó—¬JUõøûì–V°`iòðªòHÍ€ŠÈKpÔ„Š9CæYŸÎî<ì¾§êN êžpõÙÜΪ·?n½À¶U^EYä©êʼ&ø;”¹žŽ?ñÒº)Ù¬ÐþãÊVwHå㎣óÞü¨õË–ÛoW@kíâgßhÜñù·›îùÞP×`ƒTõ¥]ÿjÅgwÏn©ùï•×^ã§l](× š•ðïEAH£Ÿ2_Q:üôyÇ_6Ò©—ϸþ‡¿Ÿtði—½VñeàrÑ¿V›¿üÛ’ág߸ä´^½ä‰†¶‚Õ--tc&éäI;iÇÜŽºÿ½´lÊïN|.|©„6l›*Ýo•å²<ß`cY¶ÊŸ2«óþ_]·àô‰o6Ί„9~ÿ×%ã_ÿ¨õØí†ä·¸wÙŒ± LŸ{`úüøø·'·ÛÖé=òÈók§e¿ýË‚¦wž-åu@Åã§5pì=¶tÒ‰‡U½zç£k~üÀ3u·/«IïñÞ§m™Ú‹®ÿ×òñ –¥ŽÙg·ÒšcªxâÁ›¾ü»ž~Tõó–$Ïž>/~Ì‹ï5_ôÓÿùÏw-²®ÑþóÄ7ooluöxûãÖŒ&«“Z š¸öœ¼<Ã:öàÊ9ïþ÷‹4NÝÜ'§ÇfŸ>l·‹n1££"ÆÁ´iŒK–à† 2à mBJV Ây<™7ý`:yâåK mŒéY¾® ÏWš•¯ªujÍJO‡=WAz¢k$‹›·¨~ÉC/%[/†?¹±½3ö»ºfsöM´±'L®®k°_;pï²äê¼!ïÖ>BkâD€Ãåµ°wùEÿwÙöë•Þ?öÒºÓŸy³ño –%‡EœsÎà ’ÂPæŒc«_ûÕ†^: ¢»VdYMªê?ÏÕÿë•ZN°]UqhM’ôø]KëÎ9yðU'VÕU3ô ÷/ojs"\},VŸÐÔÓ úûVŸ~×cµ=x|yíWìðÃÉùƒÏÖÝ9ñ­¦âIQ ù±R„вpæÜS‡¼ôë ýiòô&¬Ó<¶wދʾÐ0ûc`†?TŽÜ×ÍNª4L€qp#˜±}#æH'´´Ô¾ V>7ã{AÚM/]ÞZóÜ{­5Î?ñp-|§L.ÌÉÊ·P̺»²º"b¿zÿ^åLí8屗ׯ‚N8¤’ŸzTõôìÑï-ÆØ†ÍÆ[·n7sAü”W'µÆ“‚&ìUÆ> böû÷ÿ ¿Hz#oáµöÁgíã¦ÍéÊòûá‘Òãw+}é ½Ë×kzÐû%Mmnpu+VŸ°Þ)}ñM‹Ìw>n­(+0ÙONÒzñO·“q·ðÃi‡½5¥mÜGÓ;t8ÄqäþýùÑTÌž0®ìƒ¢ÂPz3Öj@)7#ƒïøÃã Ë÷>>º33¢Œë ãf0¼ËŸû´¡Ûã7ú¨¢•)©¥ÛÚj%æ-4­sÝÌe€4 {êá×5>5(9ËYò~Qøµ'…e#Fô«7.Z4b·PtÐHÃ,íÏÍ¢ÆÍã¦Á¸É{ŒÒ€T¤•ÒÊv´ˆÇ…ÓØh§VÕ$Û¯ˆ7Í_CZÆáªu¤k _>Ì+g9@ÉÙwX"¦3”mWYR¹ëŽÑ£ ³p ãá~Œ…òEü±”DZ) r­”ð’ÂnmHµ/_“j_ÙGvljV='I”œ}OÁeÑ©Žké96U¡{–Sö•¨›é””œål£k»ç̧õ(tk—äÀ#g9ËYÎr–³œå,g9ËYÎr–³œå,g9ËYÎr–³œå,g9ËYÎr–³œå,g9ËYÎr–³œå,g9ËYÎr–³œå,g9ËYÎr–³œå,g9ËYÎr–³œåì›cÿŽñÏîw‹IEND®B`‚leptonica-1.70/prog/wet-day.jpg0000444000175000017500000057033611320203177014540 0ustar dandanÿØÿàJFIF½½ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ|’"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?é;iy z:ã:É E<}ÜÒpÏŒÒAÀ4ÀvsÅõ¥UfšVÎhYNFzv ü½E(;Ž3Iøô  u8¥Î[ŠÖ‚8 B³c¥ ž¦”Š@phÌ9Í/QIÍN¦nØ€äÓÜôÂp2¸ ãšB01@ÞFi@õ4)ÂÒçœÑ´S±Ò€ŠUÀôÆëJ í¤1­œþ4¥yÎhÉcŠÇz£œÑÎ9¥P0h7â•Д¥ü)ŒÙ"˜ œ¼œb”¯zHc[!½©ß(ÁÅæ—±éLBcƒŠP¸çš€q@ < i\€Ôæ8¤#š@ A§qÒ…¤?z˜ S 9§ð—$ÐHª;ÓˆÈÐE  S°E0ä°æžãš`FÊIȤP?x—föÈ4€7v"óvéHØ¡sëLò) öœPNxhàRò*SKÇjo;y¸£>´œš@/&‘þQÓšQÀɤ'#š`7p$dÓÈÅ5P4ò0}© 9¤ÝÛ™9ö¤#ž´ y\ æ˜Aê <ð94™\â€sÜÒ±Æ8§HpzšL)yÁ™ç₸PFHç­;9#4€zR¯šqÏjBx¤$õíIŒŠ2AúÒ2÷ÎiÅM‘@.·m©s)BžøÅ;ŒR¬7ŠãÁ7ëI·®zö¦dô{“Å*n-ót§ñŒb€ªO9§ šB9àÓ† ãškbžz ç  ·¥#žé6òqJ~÷JRpI͘äšQ»=8¦b3ŒÒ«±ÆW9™·(oJ\Œ‚(Ï?Z@'ƒHù"œÊx à/z`1K` q$œqIœ‚).GZM§<ã™ÉÆ)À6iF3ɠأšç"ž0:ÐhsGÓ’zÒàíÎhG\Ò’Å"r)å8É Œ M¼æŸŠk(¬¯4ìm^iÔ…A^´†Fðy pqš`R•œÓçŠP ÒÅ4“Ú€¡Í89ÅŽ´’p(®æ“kS˜çÐÇŒb€ 曹²E(n´œ®p(çnH§ɤÎî;Pq‘@»qBŒÐŽ˜ïM>• àô¦íšLð)@lƒF1ÖŒÒÎ2)£$`Ó±Ö™‚O›0}©Iö¥úÐp@ÂÒ`à‘R…Ïzc`S$õ¤ çÞœtàrsŠ@4p0i@ÏZR3Í)ì)€×â—µ;¨¥<Ž)ƒpàÒãŠAšR2sŠ8NsŠ“¸•})ˆ¼sJË»¥)\ñJ£ÀpÀTäei˜Py©0HÆàQNâŠC2†x4âÜb£9§€3Z ÉíHx=iÄð@4*ü¾ôM8¦i¼ƒOÆZB§ Æh@À õ§)îO4ëLrM!Éãµ)Ð9í@ n˜ tÍ;8\ÐO4JB3šR3͞†ãœPÇ §hÇ€iw©Ï4Óšg–¬ÙP™âž´3Špàó@†…É<ÒãzƒJ:ó@ 9¤n)Îrxй c€üiHãŠEo˜ŠRzИ¦ž½;vE7òh¹%©ÄIJ\näš`(”F©‹ Sv‘ÉéKÓ‘Þ€žE/½{Òw ¾p)F)( iHhè)¹ÈëÒ€`QœšA–&¬O\b€¶{S· P04Ö^)R€;Ð@Åš2FM5‰#"ÜQœñJN1À h=è'Ž”î¦›¸ ûRºšPXÒoÝÒ”p:ÐK=)Û²8£G4ÓԿÜÒ‘ï@‡š1†À‹“N=}é€ëHFzQœõ¥Î:PTÆ)x^(<óšÉäs@ ÖŽÔi§!© qQŒÒ2Òç#¯Jfyë@-Óµ;Òg¼• Î9¤ M)ÁhÜÐö§´fƒŽ2h'Ú€óÍ'8Ϲ¯JO—ö IíJ8@࿤dæ€À)œ8ZŒóR”€œÒuãÚ—4r)ˆAò“CuR“ÇJÁàR¹ÏjVäR¸g½7qÐ çš]˜ëJ¸cÖ•c@ b”°Ç½@ç4AJÍÁ  oSŽ”»qÆiHúPO<õ bt Nix£¿Ð ŠhÉëNb;ÒgÖ€ìRž‡Í;g4Ö9P£—màõ =:S^”íüÒÉé@ )ؤ š7gµ.8æ“h'¦ ÷4™8¥Î(ÆFE7$u§šL(ÝíJ ã¥8V pàzSWšiS¸‘MVœÓ÷ri÷¤“ÔSòäRòš@ :Ó½ñNÀ“HAÎh½hw`âšÍOÛ““IØàRAïFyëM HéJ:ç½ H9¦w¥Îœ ÒƒIH Ô1ÊóL,j` ÉÁöñAúÓF{õ¤çm4óõ§GZLuc@ÇŽôâ›»'&Ÿ»+Ò€€9¦Ž‚ŒœàŠ3“@äpP£Ö—¤#m}h ïÅ0’[ŠPH8Ç4 vzñH¸Í $’ <0Î8 @02qFÐph$‘ŠÊ.2øÅ5Ѓ֕sÖ”ôç‘@ \/½5·1ÊñNÁ íNcë@ÈñïNê¼ÐGÍŠQ@ HT‘òšŽ„Š^qÁ í${Ò4õÎhÀô ²@—98¥Æ(p4CqJ4…"œ@ œE49cí@@ "œ’qJXf€cC§¥žÂÇ<Ðp§ó`мšB>n) R¹ÍsŠL· ô ciˆ~8S õ¥Ïi{PGèÆy ã·ZQžF($ñHFâŽqKœÆi 6î)TmúPXã@9Z7o9§c¥æ›’8í@ €zÐF(@8 b2ƒÅÆ)ÃŽh'Ž1LCU÷§à <Ó·2G4†5×Òœ£åÅÜ3Ò“À R¼RȧŠB@šby*¶N)Ý»R£Ž¢ŒsA8aéKÓš&ÞsÒšT†Ï4îX朞´Þø¥ûÔæt¦*±æ€W#HI ¹ cq4^ivŒfšÙ§c¥ŒRçÇZ\:Sz± Æî´¡8¦Û­K¸¢˜†`f†dQß4 õ) 1L éOHÇwJ@GÁj—å#éŠzS€4 P2¤#S€ºÒ0àõ CAÀõ dö§ @lv bã&1×¥!bO(ÎzÐŒS±ÇқŽԠœv ùR€zLsÁ¦ŸÖ à-3lñOÛŠLä Q׊P Ðp)B₴ݹ=iê«Þš æŸÀ<šWPE(P!挌RqœÔ€ µB§€i n©É¦´SãlœP°}h§bŠ@`¨Â|Ô¡On”‡8çšpÉ<ŠÐ‘xÆ &ÞÔwÁæé@†íÃS—ï{P1ŽzÓTó…ëL‘Ž´N}©Ø'­/ZóíFri‡ÞàSü`ÓY€ëNÁ Ž}©œàNôæƒÓ¯¼Á ³ÏJB9§Öš3ž´r)FqÉ ŽÀÒm9Á4¼Å)8¤mÈ 9ÛKÎÚpn ;o ŠCÉÍ(ÎÒi¹>”…±Ú”zKŠ#µ óÒ“–<Ó³žÔwã4 1Ú“9¥èsKÁ C &çh*ip *®8í@ıÍ.Ú‘8”ž”ÓïŠrç§­ <Òæ€kM7ž½©sÁ šŽ)¹'Jãp¨Àlæ€Áˆ¡7zwR3JyÅ1&—€´¤|¤Óvž3@æÆÚ\´mç"”G4€E sAäâÂÒ/Þ$SœÑ±³ÚžqŠLò84Ö$ b•A^ÚyPi¸Çzipô§8;~SKŽrh+ƒšŒdv§¨'­¹ùhqÇZhSž´ò3HG4†"€ RÆœ¯JbEcµÚŸÆÞhœ±ÆE6œŠo~”»âX‚)˜Ýê*NürŽE0#òÎ~ZR¤Œw§“Š`'vE®iÝHâ˜Ì7t ÄRa›šUpF)Ø=¨ФœÒAÅ8!æÆà“‚)[=;RàŽ}iñ@ 'Ò—q#œŠyQŠ7­Ojp4ߥ0i sÅ/8¤\œÐA¤8u§qÒœTi aáiž ?ŒÓO'4Lm4§“Nܸ¥*Å1AïK°·qKŽÔ‡å  Tòh+Ž”º€§Ö˜ ;`Ò[ÚŸÁ4‡¤€:i1n”­Œpy¥„÷ &˜Åƒ` Q‘N'&€GëK— À§væ€{ R®A攎A ¨Æhà h<ÒÏ&‚>oj!8¥¥|Ô­ŠNœ‘Kï@^:Ò àÐ ’y '­; c­ ‚:”MKߎ”Ó׊AœÓ²7RôëH¢€=) sÍç rhíOZnÜS°HâÁ‰Ï¥(éMÚÙ俥å¤{t©PíI´`vr8¤PíÍE&Ê)†1Å<”À„6iíZ7¯4ñŒqQ©ÀÁ§£{P&8&zÐ^‚¸”›Ži€€üÜÒpO§”øPžÔ7#Þ—¨¨Û õ D ü´»sÉéH¼.i¬Í—š`8¨ ã¥8Š`Å?¶ &GzEëARœ<šRxã­5‰Å 8ó@ Á#4iÊ0iëÚ€~aHxR ž†€S@äv¤+È4â8 ÁÍa³KBõ'4dÏzož:Ž)¤¨4½¨[­&0)F3Ò†Žx gšv3Í7Ž (=h¥ÛëJW Iš˜Á¥ÁÎh=i¸ÈëMÛšrœž˜¥Ï¶i€›r1F0¿-!&…æ€ïJ=)N)œo=(Þù¤ši$ð*©^¦ÅîA§psM$Z=?)æšH¥šSÀ÷¦œd Jo8âŸÆ9¤ò ›Û­<8ö¦côg#8⑈ Bà¯Z@¥.x¥À¹¦sœÐ”sMéÒ—;Wšäb€9¤À‚Ã9ü©8Å=©N1ïJ2F)ÁG8¤îIéNP1@ <iÀ` 04)$GN”u¤´§Šg8§çÏ&š;Ó¿‡Ü óšP¹ïH€(Æ)Àäãµ4®)@=éh'PY»Qô €i­´ Í.îp(ëï@t”g½8('8¦•Á¤ûsM‘Fp:Òö¦O¥PsÍ.):@ 9Í;“FA'Ö‘¸À0:Š^ZAÐ 9ÅñC·‹Ç½)äÒ«÷@žF1MÃëN=hvî„óÐQߊ1È 4d1 Òc“Küéƒq4ìm怮Ni1y§ 'â€p)qŠiëN ì N8™”œŒŠ ãè{Òõâ™]¥‹cœš½ ¤-8rE4»%ç8˜SæÍ=FÓš †( Æ 1y)C€P‡¡NG'4Ð >”(!¹4†IE¢ÜÅè84I¦÷ç¥8ŒU8Œ­!È¥íK´1ÃP!3‘ŸJ x éHÉL ŠM¼õ iùp(›¸#àI\kFÝE9㚆èiI£)r˜ 9¦Ÿ™©Ü”ë@¤y h šB âšFQAP4£®)@ÏZ@Fr(Á=h ƒŠ ¤Ó¸ɤQÀ¤-»µ.I $fœ­&ÑéNÀîx àM&Fp #`‘ŠqPEœu¥zSxô§òГÔÓsÆM;hÅFS-ÅqÅ8gŠRžJSÀÇzgCGZ1Îhx¤ÛŽsKÅ.ÓÒ€ŒŽi§®3N#Œ‘Í3¯4®2FzRïO<Š:b€Æ;Òœ*ÑŒ6qFÝýh¾lšvA”}y¥ÝÇLPô¤ÏErq@ädѸ҅àúRçŠCœ QÏzv~ZE¹4zp¤“J¼ÐÅ­ 2hQƒ@Æ‘“O Š(ëHc#ÜúR‚sŠqu °ËdvGzŠÉé@î)qÎE(-8GZCɧ äScŠ‘:žhäéÏZ\óM< Ó—€1EIE-ç< œT›€Pp¹­ Npi£9&—w)Nî8¦!±–ëŽ)å²})0qÁ§(8éÒ€{J2£ §u˜õ Cwœõ§n dѰRã'œR¶1šhojN¦Žz P~cÚ”p2)v–9 ž(úÓHÁéNSê(®y¥"”޴ߥ/|Rà…ÎsIךRX6JE#=iÝj0šU>”í½éGjv@Ówzñ@nô§ ‚)UqÍc¨ ®zR–ɤ" Û ­ßöõÍ4|ÝhÈšL`u¥É$sN Å7f9£§JBØÀ4sޏ Ç>”¸ç4±Ðs·ŠhÈë@`N)½ (ƒI@\~ÓØÓ²Å!äv RKv§óSsÍäÐ@✣ÞšN¥¶ƒ@‡äÏzg©çné@ÇŽ)™ùºS‰8âšr0q@ñS˜ô¨ÏÌN)àŒóHtëHyÐß0 .F)€gæâšAÏ4§§`°àÐ@ÇN”¤’8Šإ#´€e²hUÉÏ4ߘ¶)zŠ%³@ÎqšQKœñFϵ) Òv äš W뚥7ûÒŒ·æ€àö¤óŠPUô Ï4âp½)§­8àÐqž´;RœãŠë@ 9è)V€}zÑÐ@Ã9¤aÍ(æœzŠAéŠSÍ'Œ7t4ì/LÓiE+#çm*¾GJ_áéJ89 é)¤¼RrMZn^OJ\vÍŒRs»9â€`dCŒ’)N:ŠEæ€Àf™ÜŽÕ!v¦à šEÀ84òxšA'4îqšp”ÒÜãµ9GÀÀ¾(sÓŠQÏn(Î;R–ŧ4)Îx¦·ÍøR‚p=(­{ÒÆ†0yýiÇdQŽ(wpM1NìšVû´/Çz^qšNqN=qI·=è^”âiƒÒŸØk£=é¤Ó‰æ›»<‘@cÖ™{Ò€1šRZBhžzÓR è0)£ž)X OºhvŒûR¯9ô qž´ƒå$ @9€ÀþTÎþ”åç¥!àŽh œ“NÅ'lzSºS ÀΤúS»jMÊAÎzR…Å7 QÁ¤@ =iüŽi¸ù©€„ñÒ”c…zÒž¸¤ð)4w¤ç4;LãŠw˜ç4 _á pFhäƒMÜq@ ÄRÉÍ/‚E) P¦äcйâ€Ižx¥C“AàÐ{â¤ÆqIïí@ö '‚GRcæ§‘@Ü‘@5ø£­!ÆiK0)í‘FÜóšh'4îhÀƒœ@$Rt¡†WŠ¥GZ23ƒJN) œÐôäŽ)g¥=J@€´sžiÙ'­"§<šqÐÔ¤ÖšxéNŽh»€=(È"—ÐTf æ•phêqKÀ \Sˆ¨ÉÆ9§gŒÐIŠsÖ”œëMÁÏ€Ž9¥Å0“œ Ǹ4½ äg4¹ó@È4+šSÏ“hлšBw Ò¤äÒÅ9p9¤ã“KøÒ~4£¥!»ÑœRƒß žæ—<⎼⭠ƒž´àÇ¥5søSˆ€à7Z1šTù<y¤0B@§†T%Àlµ"ŒŠx=Í?¶i‡æœF) Lš)vš) Â-€1JsÚ¢àT¼ŽqÅh@ªG"”€9ƒÉïHÇÓš8‚)ÊvŒâ£¶ ✠ƒŒñ@ iéK·’)À ÜÓ§Zbªœ§‘ÇSÞ‘lÀ  OÓzö§»éJ0¥0#ÇŠx sI‘ŒPGsBAç4§ 0¥ |äPŽØ r9 ¶1J r)CÖ“>”zP`“Næ  MÙlP¸–#µ;=¨*¤Ïq@ íŠfñ¿mH:t¨š<¶îôó»RsH#šv:Píã4žÜѼŽ1C Ð!zqJ™×špç½ä玔„íÅ?¯¸ÐiI ò‘KÇjOâû´Óòt§¯<æ‘Æ@õ 1@hê t¤ÎÑÅ´€z‚içMRGZIä8íKšbŽ• âÆì Ù©@ÁųڟŒw Û“FÜsš:ÓÌ0)1†ãEM†`.zŠPI8&—n)p?Ѐێ)ëŒä fyÍ9$ó@¹lb¤Pj…²ž¯º˜+ž¼P ²²äži sž(ü{Ò`„æœ1('<LLæœ9¥Æ5OÍÍ&6¶@§M.E"äД„žÃð8¤>Ô‹ïNÈ#Þ˜F <(ÆhFiWÞ“Œ’Mäf€v>ÔƒÀ¦ªzS²Gj ÁàqÚœýirE5œÆÁ£‚2EÅFÙÝÆ*L)Œpàõ§ç=(‡¥ Ry¥šQšN@擽)Æ2i0"€Œt¥âšïK’4 Cœæœ®0 Ü3ŠLŽ”84I¥<Š7c  `ÏZi$;Ò«qÍ!ù»Ð.ìàÒ’:SÇ4`g­ €x¥Á4ÃÇCNÉÅ&ÓÍ7Û4ð}zÓHçÞ€Hâ€r)ǧJO€à 0)ÎßjCúÐ ÏÍJXi£Îha“‘@ „h9â•p4¤ŒqÍ7u(#ÔQž3ŠLäÐ1qŽ”å9“­4’½(㞘¤=0iÙéMëš8c›ÍÍ@æ—Zbç¦)€„3>Aâž0O&Çn(#Ú€Ð>QšnHlS‡=¹ î$ã¥/QŠzô/$жähƽ ÀÍ#sÏ9 #'§4qŽhô4„>ԻǥŽ´€€php PÎiA&šxèy¤ç·Z9Å/½ÍFT’ ?hÍ p8 g®hƆ'·4£ž´œv @7Aiz 9ÆhÆx&ŠnôÃÁõ§0Ç&€/ÉœÒïKE`s@9¤Ú3OÏ¥4¾´»x£ôg=i¤x A‚zRž´¸ÇJhu ‚OJS(ÉíJ½9  Ž1A?6qÍsM.Nhå‰íHI=49œsŒŠ'© °u¦Áɤ ‘ï@ Ê'¥*ž:Òã)ÉæšrhÄqÖät4¸À4H ®àO4¡xÉ<ÓÎ1)»†y4ìŒsLÎOünúR.hëHH¤ŠàÒÜäñJÀšP08¥éÖ˜ùE5ŽqÍIÇÖ£ç4â:R(¥ýi9ÀÈÅ8·cIÇCAã¸P 4½E'CJ§Š@ QŒ¦‚9Å4ñɦy9¥-ÏJi$šPx¤‚1šCÏ&—ýi úŠ`7¯­;¶i1Ï¥<1HŒŠ³ASž .ޜи4)”’[=¨¼qOïŠ2£ÞƒŒdPIŽ(Ü{ÑÔc ^Ô”qJ) ê1@ ‘“KšP21H8é@ cJx"œ8äñH@lÐg<Òƒ@QÅ &”x¥Ûš`M­Ö€y§ f`ŠCP€2N( Í)8¦Œ@ À4“F1MÎ(ÜcšL æ” B9Í.28Ç¥(¼P#ÐAÍ/^ÔqÎ( ïGãBàýiHÅ7Œõ¥ëJ0iS@ Í=¾UÀëM 1ŠqäP;ŒÐ0{Rcš^ÙïHÔ»³Ú—Šh‌ŒŽ´œ…÷¥iqžhFJÒÁÎiÞÀÒmÇS@ ε8àŠCúPsÀ¤H:õ¡¹úÓTqÏZ}îh'¥0iË€(çµ!ã¥;ädÐ&€t£·ZRÃ8¸ÍEŒñO8Æ($gëK€M šJ3Î(È@HãÖÓëIךD9'š/QK´ŠNyÍ4·ÍÅIÀíHNG4‰×šBrp=hðïF9¦÷ëAlb€A ”Ò1Ï “Š f—vx¦óœP<ô£¾sJsM îÅ ÜR`oÏ4¬p½ Ç~: cuà÷©0Bõ õè:ÐÍÆ1@ åïÅû )sŒ(<Gš\ŽÂß/ƒó¼ÒvžyíÀ1A\‘Ž*%ç’iLª¬418¨ˆïNžôãŠh;qÍ;ý)¤öÇãOSŽ”Ò»¨ìóÒ›ƒŸjnH”.¼§;¡ ûš,À׎:Ó t¬Q®®Oî[Žù¥ðÝ(ôõ¢ÌFÏV£Íc¶º åšoööF|£­`m»ƒM c±·3ƒåšS­…b F•˜ÍH=iÀç½dÿm&Þb94 mGÞˆŠv`kÅ 9¬ƒ®‚xˆóÞ‘µÄ ‘È¢Ì ’½(ã8¬íåÀýÑ¥]q ϔԬÀÙÀ¦“ÐV;늤,óïHu¤Œâ‹06;:Òö÷¬oíèÉâ#OMqɨ°Í`;Ò“ïXã]Cÿ,[󦶽ò›ñ¢ÀlsëIËu“ýº¥x…ãNþÛQ‚aa‘E€Ôelf”7¨¬q®¡<ÄÙ§j2qå0úÑ`5K{Rç¥cqÇ”:p×cl~åóíE˜ÌjNvÖQ×cýÓ=M15ä$%³E€ÙVÏz^1‘Y ¬¼ÂißÛ(ß(E˜ƒ“Å)•”5•~ìâý¹ãËcJÀi`P[JË]q;DÔ6´›y…³õ¢Ì N¸¤µ˜5˜ÈȪ®Æ[o”Øõ¢ÀmqŠ\(ïXÃ_€dyoùT©­£Ÿ¸qE€Ñ9b)ýÎ+-µ˜”à£R j!ÁV¢Ài–㥠r¼ƒYm­Âú¶Å[‹òØÑ`5F;šF>•”šÜl1šsjê¼ùdŠ,˜lqG Õ˜5e`O–p(ºäâ2=(S 4œÖ_öÌ{±°ñÖ¤:º•CE€ÑéAëÅfÿk!pÒU1Êš,ˆ<óI‚zÎm^0§ä4ƒXŒì4¬ t¥µ˜uhºmj±ÁÚØ§`5"šk?ûfßѳLþׇ MÑ©œŽ”`⳿µaÈ9¡uˆ±ÊœQf4 2M-QšÊžhþÓvЬhåat_<ÍQmN5?qªK[øî·Ô§œŠC- šQÍ(éšMÛ¨ƒNôÐisŽMw6E;¨1Åùi›±Æ)sÍ —Ô¼ŒRýîԙőÇZSÐR1@î9¶CXÈ¿»íÒ¶®Na|zV*~ÐÑ!ÆÐ1“K¨$ð 8`üÀãÚ€0H9¦@ݑ›äüži­ò’O ˜é“@ ` Ï­HªÜ£4‰´›­!`‰z`Z1“Cµ(r§Úš@a“ùÐqœ™<Ub˜$†ÏÖ….¤sÛ4›!ŽÜcÖ˜çæàqI¿’i§‡Üx”&Õ#i<‘šBæšÅÌ€ƒ•ô§’\gŽÂ€¸Á!SÒ”¹#;q@]§åÁ&•”dn8¦ÌPcJCsMeG5)Q†úÐvJ1Î(À`p5#ò0)¥ùÀ qLpÀqÇ"žŒôÍ1¾æêz’õ  áˆã½FæÞ”ã‚þ”¬0h±äc©Ûx4Ô R>Óí@b»€?¥5ëš=0H\çŠ/9À¦À Rr äõ w U /^ôÎ $ŽiÙÊäöèiAÏ´¤%ëŒP íÈÅH»Jƒž})­bNiÉÁ<(ÉyÆÞ)B uɦ¾8 ѸáŽ:PH*H)Ÿ3uÍ0²³ƒ’3Nù‡C@‰Q¼´à0HR0{TeØœt¦’Àp3ŠäáTòqÅ6BÀüª?™¶yôò94†'ŒT ã;@â <Œæ•I#¹¥aÜrñ–lb—åÉ8â™#¨àŸ–œ¸dê1@&Ȧ° r[Lߌ€qNÙ¸m-ùP; 1RªnùCÞ˜À ´$õ W"Å"ƒàf™¸9$b‚q;°ZqÇæ$²bž .ü©«*º|œŸSHÅñÀ怸óŠS†ÇÊ3õ¦ Œ9§1Ô@®0ƒÇ榎2'ÐqÜæ¡gçï`P;“¡ÚÄcŠ$ÓÁùAÎM0ÎhÁTãån)…6@½:sFI\î9 cåp)Àí~3I±î=G{…ŠîÀ BöÒ È* 0œ7Ìx4¨pO9Í# ZN‰"¥n8ÍBS9¨ÄA·¦…‘o {S‰Ú)p Ä(UÎTl£'ŸÊªÙ\Ëpg/Œ#¹î*Þ8\š, ‹·#‚(w2Íóh`XŠV `ã>ÔÔpØÀì–õ>”Р °§åB€; FëÔæ£É'?Eg!¸©AÈ68 ŒNzc‹Á úT…Àfšnâ€!g© y`IõÅ4˜Ãå‡>Ôåpzb›Ü>lí·zt`ó‘H<Šrœ;M2ß(¤ pÓË®ÜcT,rx4àÛ[ž©²ƒ–¨ö¶ð"‚ǰ/@t¬ ž´æ 2i:( cÚ£³ó‡¦(q"îÁ9¦¼£v3ÅQÛšGû¼¥cøÙÀȦ.ñ~Õ,qŒj—j…ù‡"€UqÔÓvc84ªÁÊÊaRW©'Ú ‡ÐÔ¤‘Ðv¦„çÓ² m"€f óB®O&ŒœRàÅ " ÆÔÕ@ã­F ŠVÊŽ{ÐíÁëŠwÍÐô¦);vô§eSš`üÀR%²{Q•…¹\uäÐ3ùRí$pM3i O.7´@ŸÂ¢ ­Ï¥<üªx$Óvÿhü‚zôíJWƒP†ÉÎjE$r:Pš"sŠo8ààÓH%²M&òX@!Ì89è)ªÀ‚± Í7 Àâl‘i»HêqžÔ…ëÉ£-Îà( Œ8,1Ž(rTŒ @вŸÊ¦Û‘yÕÏRiX•Áìià‘Öž>n ñ@†€Û¸âœlóJÛTò~”Æ š<î8èjDP~SÁ¦ ÔÒoÜIj@:HÓn1‘L •#~ð4®ÕÆy d{@;ñÅ),Îsô¥è6õäS» Á¢ÀFŒÅ™pE6fueTÎzU†BO-óSG'i½TysS(lg”£##4px4á šwzk/.qÍ0Á4 bžh-ŽÔ€péAãŠi84îOSÇ0Iœô5„8­ÙÿÔ8=qXN29”ÑH€ò·/ZÇ­9AØxÈÅFq×õ@J€Ž摹ÉЉ'# Š–90œõ CHnäàÓ…l fŸæäãÅ3þZŒæ€©cŒuïN„9Ï4£$ã‘OcÀS\ƒ‘RBœ]þXÈ^=èÉÛž™õ¤ ئ, |¼]ÁCNXÆÜ…ǹ¦f?.q·ÔTq€!‰ö4é >O?58 0 ”Ï H¸Î3Ro+£ŠÕÉã¿ZHÇ<ŒTi `G&žŠþ_­)@Œ?Z1˜(ôª@SÒ‘”3½éQp~c@€í<äj0ƒ¼æœËÝqŠi H1Ç­0@cÛÎ4ˆ€1Šs3nÜ0}¨ù²:õ XéQ8Úr[51PS9äúTeUXƒúУŸ»HW$rÍ œrxÍÇ#š|aw“šlŠ0v½ê“µÒ•uw^õ<€ò -¡~@ëK!%¸è@ ¡ÙŽ3J¡@ç­ …¾µ6{„»1 Þ¤Ë3@F Áâ‘ã,p­3$c'«0ÉÇ4‡aRZ ¶ðJ—xc"šàxÉ”ÜäœÐ}=i¦Mϰ ´gšb¡lo'Ô£ç­8˘ÊzqQFÅr@Å ÏéL‘7}ÞÝ©ýX`ŠpÊàõ4€bôÄ ƒ‘Œ•,8¦rÄà÷§déM.ÂLõÍ?pS‚3HcK`L'š€#šŽBœ9 œÞ† 0ËS”’¹#'qf€%Vr:Ó×MD¼¥<ìsÀ¤·'ý pZ£ã 4Õs·Þ˜Ý'ŠBùÏZ6îLÍ5CÚE ÈrsR`äÅrHê)7úõ pq}icŒ”Ï#½ lšRK ƒ¨4ò8"£Œn$À§’ {P!AØiŸlTd’ã—<`šMûG$T‹’=)=éÀ1ÜSäNE<2*­»< —TÞÀcwZ6c«qMÏÎE N0ZMÀ¶ZRä·jM€6A¥ Í4.ó¸šVeVÇëC7c Ï&€Å3˜…ëNàŠŒ·ÍÅ(ýæý(; øäÓT `H˜Új&'~99©Cg€) 0n@Å=ǹíR)ˆÅ3+¸R…I úÒN§#€jÞ“Òç®j¢6­YÒÈó%Áç5)Äi^) 9柞µ#r)ÀsHTÐ 8qAÎìšjZCËqH>ö{ÓñéM# ž(KãŠU›qÍ(àPÁj]ÜRdm÷¤ÛÞÇ©À¥Æ(!·R¸¢Í„‡+ÅK‘M‘Ï®@´›AÉæ•€,)rGNݨ˜Ï,ß•+ªŽ”¬$ÚZS¸.Iöâ˜ÅP¤S‰`@õ¨äpjBxÉýhv ïÜ2)ûƒ©ç¥DÊ…rGZxتé@ Þ¥€"œáI{Sr¥¸¦ƒóaºP!q‘ß>Ô¨G4¤íà)VUQƒÍ NHÆ7·¥)pÜiÑ­ÁÏRç®W=é\œŸ›½4¸.W¾(œ  Žy>ÔæçƒÚšTœPÅàb€A`väÒÅw7¥0®1MKµqÎ3éMÜ ä€)²8ÀR2MFz`qL 3ƒÀüi¸Þ ÏëN9 œfs·š@5PÇ?Z¸-¸S”’Ô’çÔP”–9ãŠqÆpsMܼqM*Ù4¥|Œw#Í ©œŠ‘pS;Nh­÷r* Q‹‹Œõ5+n¸¤s“ؤ4#Ÿ,¨Æ{Q¿{öv¦ØãœRÇËrsÇzŠNXíêié’£=h Ž@äSŽXdf€Ÿ›¯çCa8¤\3ÈÍ8¨ž(7°ã ¦1&ANbÛqŽÔÅ$¯"€& àÔ¬‹ó š\í¤tR3’hà§: Làò܌х ÔàP2UeE8ÔnêH=è'ïb˜Ê¥ºf–9¨ãpÄäõ¦p=i á9 d¬¼÷¤  pzÓ[wbh û’dûPóµ0§9ïH·pxÅGTœcÖž’ù4Çmt¦˜À'žj]ÛbšFÖ$ôÅ"¾ 9©ó´äò*¨‘7d/50%°h@ÛòàT )@j4L·>ÜcÚÈþE9“MÈ,y§ Ä0÷¨@'Œ~4àØn”ã·ß5ðTç'Ú§Pzcñ fÀèiÍòñM)b¤ÓTæ€Ó‘Ml1֞芌‚˜=sLDo/vþ4ð2¼%I"‘IQÒŽ\ךVÀ“L`ûŠr’ÑŠ@NN Jƒ*è;Ô,˜9-Å9[ èho#Ë#µoGy™îjª‚ËŒñéW´ÄÁ“§¥D‹F˜¹ àƒBð2Ô“ÅHÎhúRŒH c¥iü @ Æ(\ÍqI´öâ€rG(Ç­R(qÏZ~}i«Á§¢Å ? \ÞÔŠ¹Å.=© \Š)vJ(SœÓÔ9¨UÏ©F1VHòGj©=éœäžÔõ Óâ~_z`4áNä°ö g41íšRyéMêiˆ3ŒÓ‚1I´œóNà- 8¦‚{ô§Œ¤ùG­0$ý(œõnPH¤íÒ€œœbdu¤žôàsŒÐ’0is×4…†HÓº †aºÏ÷k›UÆtÓgÉ~0k›#úÕ!ŽBz1À§ò¹ç5H¬ÀéHäò¹ÅP‡†#© U![u¦/8äS˜‚B°æ€RÉ´R¨ õ†ì.i²½úúÐ"o7÷gT[9¦“׃JˆW Pó•åºPXnôÌüßtÒç#ƒ@¶H=hR§%öÅ8íÈàRžÜ{ÐËaxñ¦wÉÎ1Ú‘œƒƒÈ÷§ r:s@A4œsÞœ2ÀšmMÜ­1–!€ÇôÛ‚BóëQ4ƒŠq'Œç¤¥I‰â¢,ǽ5‰ÙÁ R¦F23@Ç€3JpÎ>÷šÃ`lñŸAL w.9\€äJvr¿7JŒÒÄ(©w¯ðʘ\œ'jr¶GÒŸ!GS¸ÇzYÝœuä´âY^)2sÓŽ´ŒÀð4Ð2¿7By©‚yÅ!Œ Ž(Là#°Ï)¾[u “D`‚CÒ˂ٞ ª…a¸¦™µ‰ãN,:L3rvõð¡—¶qÖ£=ÎzÓUˆln¤‹Îi cœcëIÏÞ$`ÓÑ$ÐŒ¼x?xw§(Ú¿9昤+cŸ­+±#œ(ûÙ&“ø¶ö¤$©1•Îh`ïiBð}éX+×4Ær˜Ž}hÁÚTóíMUÚqÓ<.>`y ©f'µîŽ+ç£4â Ž>´™*«Î}iˆ>c÷€m>´„°ÉíMÈ<H®þ3ŠB€zš9æŽIõ¦3üiØÏÍÆhÙè¹Å5ÛËäÊ€™2C b—Ì@'i£-’Ìry¥epy ™˜`GÎ쓚‘¾P*3×që@îÉ W ƒšŒ)ùTâ€Ið(_”ž´Š¤ ã Ÿ”ŒpÁ”§šw—€ZsJq’´ scœR†íùS\©ÁÏÖš]³}¨ld–^£šhLz± ´šCÉÀõ46‚ÝiÈFxæ ×&¤ÈÀ皆GÆp1K;sÅ&ýÆ—Ž:Ñ€¸8æœrž™ Þ Å9P ç¥*(ÈÅ!fÎ:ŠFÊIÇcNEÚN@¥õÎE"äü§ó ?)-œ})6³& 'Þ¤ m*ãLElðßZFPŒóSxÅBäµÀž{Ž•*† w´X.)óPd6µKìPäšF%G\Òoàœu¤4JŽ£rL¹Ç) ž)v2:Pˆ=TsêiÁÎ9¦ #)@c“Ó4¬3ŠEãƒÞ‚NvçŠByéÍ`Ã:T.Iã'ÚžXŽôÒA boã šV cŠcr9ÐcÀ°Ž |¼šV'$ôã¥50iGô 0É8Çj•0g5rÀÕØ  |ny*þ”A2g­TxÔëVt¢KIíQ!£W“Å*·oJ@qJõ¨(p>´ØPG™ Ç#…¨ç¦ä·J@?”ÑÜOS“éF9éLÚsÎ(3È<Ô£.3ÜÔAYò OŒ˜z‘wÅI½\Ò¡ù·u¥ Ž´²ÖœAŒjfp8ïN!‚îïH <0d9\õõ¦+²ã=é s»‡”٣})¡×fá†_š€–'‚:rE7\4ñüšJ …Ç'¥5—#§JW ¨ÏQM ÉÉ BÄ@ÈÍ#±Î@ÈÕr#4’Ã==¨ü8a—éM^@'ŒQ¸©çŠ+ïl!>6`ÓƒœàŒ)à|ØëAtüè!Q»’)C)b§ð¦ B3“AMæ(vÀÀëëDorzÒŠ0pI§IäñÖ“øÎ.ÿ¡ w?ÊÇÔŠp8‘ƒL8v8=(b@$çµ!wnq@$žN(FÅ7Žrhë•==©°Çž­•p§‘Md xn3@‡‚95*üÍšHÆ>P)6ã9ë@’£žÕeÏËœP‡çÛÔT›Æ@ ŒP”…@YNi¬ÄÚ“y-´ô °þ”€r–S“øRÎ "©~§ŠPûO­0(Uç­#ÈéC·!±Òšyót z“ØSYÕó‚1RÞ Žj#(zXcúÒpîWRHÍž1MÎNsƒ@Çî1ƒß4n9ÉéIÔüا¨RG¥ ×88â­€ëQ¡0 KM$Ü@èjæ•÷äô¹' @<♀P“Kåsž=éˆ{í$Í4¼Œç½!Ü‚øØ’höT* ëéP‚XôÀ§‚sŠS„8Îs@ÄP•‘JçV:žõ*7y=(͘“4ÙUI6)á‰'$ú fÒ~÷LÐ1c:Ò•W9e˜Ø €ö§ªåOjcR àö Cafwràb¤bsÎj¹°${T†RO@h €n“BÓ˜0cƒH¯Ç¾x¦È[q`sžÔ ]Ü ô£yÙÈçµ7-å€I´õp>ñ4°9âž²‚ÍQ¾Þ­ëÅ å=Aé@X¨ïÞ¥Ž0yŒzž”øŠìêy  HˆG¥E’9ïO †à šÒFlôÔ )ÜÜÒ)VÁðõ¨ü²W“Ÿjr©1È=©#ÏŽ‡R,l§%N)ËÔw5+7cÒ3rp( зò ©g8#¨ ps@4RnÞ§¯jpLc+ÍNXcR1;r: …ÕÏZ ¡u .ýÝj%¸P2ÖQU|¾OzdŒ¡ý) «ó{R›€Í¿tPOµ=¹ÆáŠzªlúTr“Œ©Í"$pMS»å¤1çô¦'Ž‚’–Â:SP† ŽÔ›¾m¸âœUGÝ4$“nZ¡dž”ÑÀâ€~A“Ö£ Îx!Q2ÉïB ¨‡SëH<ž~‚œIÎ"›lŸJ e›<Ô¾Yòò;S†Zp0($ä…&®/mªÊвn=jÌ$±Áã4æÉš·¤`4˜9ªl1Æy«ºBáäÍD¶-Û¹Æ)XF)qšAÁëPö¡¸‡84Фðzвvô¥LŽ)3·Š7ÚÃ6x§†ö¦QO#åë@ e“x ñRƒÇÒš.CÐù4£4„äqÒ”RàÒ¡'¨¤4r(%⊋ñ¢€2ƒb»+ÒŽ£¥qTH‹Ó¥=>cŒRŠrƒ»#¥1 ”ósÒ•ŽiB–#šL¯ÐÒ)¬6šEny CÀºÑÓ;i1–'µ8—Š`ナiàñN?wƒåÐ×)üÜ 7sÅ;g~ôÁéN AÁ§‚1ŠiëF .NêZW» mdÛ×i¬›U3Á#­t7}žO¥sä¼r;U!¡îTj<íUÀüïõÏ­®×'9¦0U=hfù@Á¡Ÿ Ò†éõ¦InÈ;p=)êÝqŸÆ—np@¦%¶ô lœÚ”àj6É=ÍH„ÿv€#(Jò)êHÂJ$’qíF>^”…°œÖ€ç8 vµ4‚§hzÐPáñ‘Í/;úM*pvàâš“02óL`ÝŒi;˜ç§µJϽ~´À…îþ´‡€6‚)€Èœƒš˜Ž9¨do-2AÆh@~Nœô¦²¸BrI§FÛúæž$óÓµ!mª½M9Kãkp=©yàc4ªFxÓ'œdšUÏ4 1S‘JMÙ¹ CLoÎrM(RT=*U/Ž£=)¥[8f $€ÓØ©Á~Cº¢ÇÍ€h&\àô¥c¯zhܦ3Þ‘È4ÄuPAlcŠh|e@ëN­ Ä iܧøhQ‚i¬h}êi*€r;ÒüÅG|Ò*aHϯåM¸#¿­1ˆëš]ùP H}N? fðÍž3ïC?ŠÓ€%ßòiœ6+.@ëMG X(ÄŒdcµžƒŠjíw •[#@ Ožw¯áAÎ0sQ“‚7-9W~XŒZRì ¹¥\r¸¤ÃÆh5g8ÈÀ© #½mÇ¥0­Ó’(Á ÁëRm2H¦08È¡I•<{Є.”À7gŽô¥”.3œRBG¸ –È^hØG'¨4²?ÏFìí(PH'ŠcqÆh.ˆaíš]£ZŒŸ,ýÜÓ÷|¤‘ŠnÑžOZR½Í"¶WÔ}§,4£4¬0½E¸«ó‚Tþ‹œá¸¤ {n~|6~´$ÎÓÀ «ÓšpÀ0h,: c½!Ž™¥¢q´œ÷4ãòŒç¥&âÃ!€ö4g(A=)Ä!#“QÛÈ´²riÍè(OÝàRƒÒš¤špw¤1É×4§"˜XŽ‚¤äãšLÑNæŠC2C« ›´Ò÷@ÅhˆŒ”úgÞ=iAÅ ŒÓÅ(ÁôŸ1 1Œã4‡éFrxíI–n1@F§ÁzŠM¢—ø:SÛ‘ÍûiÇ•¤1J[?…4S‰â˜ À<ƒÍv!{zÒã¦$u¥(+ÆiC^™4×<Ž*6#¨ìzTÊ['ŸÌSzs@ ͆cŠyÁ8<“M qŒS×Á=¨¸XvÕPëéQî]Ç‚MKÜÔ29VÇ=è@ÛFâ qÞ˜ ›‚¯qšUäacNTe— u 6w°Áǽ+í#“ÈíHí·¡9 W,Fh˜by=h¨#Al°ÀäSб³ŸZ)‡sä) ml@,HÁéÖ•T±,h§îõúÒ;ò$cÒœF8é@NÄÐ$ Ǹ)'ÔT`€…9©ðvডh1!‰Í0¤¹ÈäT»Û¡¥Võ©B/=èD>e ¯4ðÔ«ð0)”6G4æE øÈ<{Є(ïP<„¶J‘²TqMÀÁ4ÆÞž•(o—8Å8àœa!—õ 3üg4ÿ˜ô4ùëŠxl ŸÒ€"BÛñ¶®Ç*¬$$dµ$rd•<‹ ʱÅM¤æH Wä–â­i y’‰lR5Æê)y )Å@Ä9Ǫ !È¥ ƒ@ÀÐIíO€¹9í@ íÍ*ýüÓO&ž„ sÚ”‚E'ô§·¥ 5 ¡ÎEHž¦Ç”)ÝÁ¦¹9;iPñÍI“E&E†egÞœÝ) ä PÙÀ« @9¥' )@Æ3JFOÀp4˜>”‹ÇZRHäô QïN^”Þ§&—‚hcžE(éւþqI€sÅ09íJIè)îãµ)ÊŽ) ¾ô™9Æ)Ã8Í'­0}):v§7<Škr>cÚ‡ ç=i¿‡Nô(ÂðiH8â˜H DìÞ†¹¨Šm;âI®–S˜\ŸJæ-ˆù‰lÄU"“б†Žž”ŠÜñ×Ö£®j=ß1=)ˆ{;*Oµp}©X’£8¤%Tu昇n&3ƒÅFTœiJžéJÙ9ô Cv€GÍ­8`±ãò¤dRA=iœí☠“´Ho9¤R Óräǽ äõ4ÖQœç€)P+õ¥?*°¦”9Í9à E`SÒI“@ K7NiáóS#q’GJºí4c&ÖáªR£sõ¦ “‘M/£½ƒOËMXÃwPwAhRPv¤ÚFhcœsøR1>fs€E<ààÐ22ŒÀƒÞ…ʌ֥dùwÇ¥4mÆXžiŠÁ´ñïÖ„“‘N žc¯Ö€"fØvúö¦ôû£š”ª“œŽ)Ÿ.î´Ö]çžÂ‘Fš›vÔÇw¨ÇïIÅF9ÚqN'#ž^AÏ4›2Äô4˜bNOÒ˜Y‡ãéRÜ ~4m# š@H`sÍ‚*1Éä~TþGñ`Sçó¡¶à0êx₎?:M‡iÁ怹íCçS m8&ÑN)[aç€{š{œ{ô¦Ê:æ€) ~t2ÿ|t¦ ã$éNÜ@úÐìd S‰#ŒûÒÙÐã©w¶ö ùdÇ4Ô‹¨,E*u ÐN#4ÂÃNUÏ&94¨FÒ)Ž¥Ëô© ª¨ õ D‘òpÊ>¢˜ñ‚8lb€Ù<§gÀÏÖ0*~QÖ”Ûóue™ÆEE¶0 #94„ ÀúÐA~ LÌÀät=ª,¬p:Ð2LgŽj³²¤œž†¬Eœœ““ëHbÉ'¥!ŽCdúzR:¤“É¥_:RoÈZ1OÏ­*©R23žô¢u' Ó‡=¨»99íŽ)è¡ÍÏÖ£”2˜?ZzîÈÜpibFÿgŒP²Û[šO•NÍ)aéøÒ›—<ð) ù‹‘Ò‰Wzü£§zUb  â˜*£qô>À¥1íäçšc+òô  6df‚v޼ÔbGö'®) ŒLÈziì®ÀßµH ”}éÌ0&˜†€ŒŽj"Åàdæ§UO5 ˜l `F$¾•&vá9¦#+ddæ¤$(í@d|ò:Ó'µGË09Í*«äâ•8ÓF쌎)íÇŠU}§šIqÀâ'$qN'wcD`±'Å¡Ç=ýêR»GZV8)¤7 ÷ BòS“Í0ÍŽôÉŒm8§(!Iõ a!ã4mƒšhU$“S| psLDN6ûšqR@ RåH¤`Àõ¤1ÊN*UûÄB›‹Ž¸©Ô~ð€3@‰00H"¬i-ûÙGz¬cØ2gF‰>Ñ3ó¸ã½L–…#c$SÆqÍ'~´1ÏAYŒ6äÑ·ÒƒÒ— ;QϦ‚zQqHC¶ ÐÅ!n=)F6äP19Zp9¦g4ìq‘@qÅ?¥!Æh°¤€š7:R*œb—a aš(Áö¢ÌÂ}œ­ò ÓBŽ;±ÅYlÒò:R„ã®)y¦ªc­É£v:Ð[æâ Ö— hlu¦'Ú€$'¶(<.)ªšShì;S¸£ õ¤÷¦¼Sº`Ò3Å.ÒE!Î ›’zŠwJF)Ôb€Æ—9£ëLDwêX>S\Â…F9®¢UÌOC\Ú®7eF;¤4( ‚zg½"ç'€E!êjM¸^¿PˆIÝ&:R0îÆE=Ô€6ŒúšŒœ.ï@Ǹ’ *+ž´(Á4®À!À#ë@† NyÍ9À+ÇZ`on´+“œS6Óžý)$‘™0 9¸ 0ÝLUäãõ aÀæ¦1 .)=OS@väTDon8Å.àr¤LG^h¶8yæ­áY8ô5J]ûÁ\Þ§„îÇ`)2£ “NÆphuÚùíëIœŒƒš`0³™1œ}iàõ x4ÀFì‘‚jF¸=MFKŒò´æùXÒœ‡ ŒíÓ·=ho`0EKöÇÖ‚»éNWlúÐeyéJ < S¼²Å›$ =©œÐsœ:‚)21À§g O9÷§›A=hŒºP1Ð)$uùRgwµ#›Teˆ#š”ÿ\ÔyËàŽÔ€xl§­4  žÕ<R•Á¦x Bx%Ç’;c x¦D›³ƒÈõ§7 ´þuCãhÀAüûÓ²8œõ§™ mÇ=iˆ~Hô¨‹sƒÈô©T9~ FÀgå¤!¤+FF)ƒåQŽy§k.xb˜ p[pSNŠb¶á‚I§ð:šÀ\/_JfòGiHÚ9Ç4›&rs@ÃpM9æºPña‡{T{@$í4sr…‡Z’"@‘‚)™”ƒ#=Å0[w¸ ¶ ¦)# ßOœbjHÏ{ÒÈpxÇšFêpirGN´ j;æ’NN8O|ÒÈÈ:j–4',GJdŒ»ñÆMFzqR!8È_Æšc=iãî3ëHʱØN)ªUP¤³gm9”€qŠ40 „ŸåO¬q·÷£&áÍ= >´d„)sZŒ ç<ö©\…|œÒ6ÒŒv Ë1Püiÿ*ú“MfÁár ™†qŠk fÉ¥ S üéÄã¯Zßæ#rméIË9çŠj“Ê‚O ¥ËM1† 8f&¤#{IH¤Ép3R'îŠhŒ $p}©PápFid N!ÎîÔc¾I#Þ“aÞ9«—ææ›G4†"m qÍ,›x!x N)ŽÛN=y¦!Û×#æ’EM¤Ó@;Šy ÜäÒ€#XÀç={Ríõ#&ÔäÔ.ÅÁÅ ¹AÎH=¨`Ûª6˜©çå`Ð2U -Œtƒ€â‘2IÈ”3“LC]È\m¨·î^˜51`P‘ÍDX*à æ€+ÇZ“aÚzâ’"xÅHX` x  dc*öŠ'ñíOò¯RhíLž)æAŒã4Å]è0}éBØ'4…8aºš„ ñO,¾}¨a…Ç­0~ø1Éâ¢ÙÔ ‘0ƒ’?; àsQ€'­<ÌF3ïQ`H¦"N8ëHÎÆ:SN»Í5äU`S@ª—ï‚i’Eƒ†4 ‹0§–¶hÀ;u«P€ b£ / |Í!¸Þ¤©É÷«z6D’‚0j©Â±¥\ÒŠ™¤õ¨–Å#[±Å Ü"ž ¢ `G½+47ÍA'4zÐì(Ï¥(<Š <|ÔÞ§šrž)„qŠ&žiqß4«Á§®94ÕÒ©äÒ#4ªG|RmïFÐE"‡nö¢“ÖŠ.(öëM$Å5˜¯lÔLô« 3òŒR(Ác"—7µ0 })M)ûØíFÓœžhrG&œ§ŠN‡¥GZR@¨Ï-ÍHy(##¥@¼ 8Ó‘K¸öÀj7.1I»"“Œr)\ÓAËÐzÒ©â˜Å'ÔÓONà3šnN1@˜Ù9…€ô®s… ž¹é]óvâ¹Ö ±sЍm¬qúRnÞyùM?åÍ0pÇåëV²2E7‡@ÄóéK;¸>”6:);9íMÏË͸UýiÁr£ŒSà n9¡ŸùÓ„cõÅ0=xÀØlEH«•ÃuÍF¸gšœHü¹L±ÆiûqÏZjú ªGSLbF4Æù›Æœì@È< j0çšBYUOæ—suà g$ð0)̸R:怮½wf¤äàS#„ Ç:Ò˜ò –é@ÆÈIšL°<ôœü¼v¥líÁï@F™MÇ­5‰$ ñBJYvmÆ8Í4‚§¯4)Æ1»#ÒÆÌ(ÁÀ+¸àæ¥eaógŠMÿº qºš¿tîÎsOE'¯Öð9êh@F}©8 ò*58isžãí¹ÀíM9\àt¦«ìËqN »ž¢€7(8¨ß¦9©]FÌíö¨Ê“ŽE*’G8Ò’¦€3ÏÔ i,£vx¦ôÉ&œì9 H¶žÒ ÃU¿Z\·ê)û>a¶ü¯œS+»¹©#%ù<Ú“pãœS™R,Ь¿{\ÆTÙÜØ8¦2Ü5 á~n=)D@ç9 0á†y¤ˆ'9˜ cé‘MRÝr >a»§J‰Wh9ëšBslgšTRÄÿê©9¤$™úÓd@¹æ‚8#µ4¶WÔx`Áphʸ!53oàƒÅD 2J¿ñõ ¯Ô­Œò*@ 4Ô…Fw(§É4¾SƤLóf€NçH‘åŽ[5c° pEFShùqÍF3šPçÒ•Ø/äÓã“ÐSôte M5Ђ¹ u¦¢a¸§4Œ­ÀÍ6HÁŒc$J@¯Æwb¤V;úpjRÀœž”ÅQÕ˜ÔñœàÆ1UÜp2D꼌PËœG^•oHVÈHëUЦ2*֌ٚ\’N*%±HÚÇz}(@¸&³ãóÑŒ L├šÀÅ4ìt¤ cA`y§d¥ ëŠZ@- ÍÁÒš@OáNÐ:b—´†(§/½4sFîù ãÖŠMÔRŸ¿ "MÚOSJWŽMY$€ñHIÏZb‚)ÙP!Ì»—ƒÍåÎM7œûRm‘Ö˜ÝóS³“Q•!ÎiàñÈ B±½é ät¦Ž‚€Ÿš”ð>´Ð: ÁäÓGµÜлH÷¥ÈÅ Œó@¤ðÓG^iGOJl¼BäzW4ÌlŽI®ÏîÛé\ëH n•Qˆóž¸W®X{P[pŒZŒðÇôª Ø“~ µ)+€OÕŽÀûÒ‚vŽ:ÓD±å·Ãò4ÂÀ§4»•FM)(Ï×4ÀzžÅ5Ù@${T*0¿žÔ»‹Rªé抛pÝÉùMD€y§šC’zÓb[°¼v¦d±ÁcÀ¨äÇB +É9¤2^6 óëF0}©YH ŒsëH­Ã+c4g˜@u©TåÆ^´ÎX¸üiËÒY˜õ d¥ŠŸjMá†)îÊWµWþÄc™!ºT™;r?ZŒ¾á…=yNN>”Ü•è{šx9=rqNCÇzB» ó@…<²Œƒ‘OÞYH+ùÓ¶iÁ@Ï­ "J¦AéPíBEHA?6yô  úô§(îqLÜÌÇ#Š]¬01úМcœm#¥4( €j6$1ö§!êIÁí@%‚ã4ÒÙäõ§€Íî)1ÎäPãAƽ!Û×½.2™i¬ =h0IÁ§ýÞ½i©É'49Px94€SŒgŠapGoZLÉ'“HÑv=i€ªY»pi@éƒÖœ±l «Ð Nwc=) iÚ ÏÞéwIÍ5Ó,I mXÈaŸJ@Ê_<÷§d!À9"˜ÀçmIXdsêh¨§n[®jR8ÎE1ñœN |Ã¥ÝÄê3´ ‡‘Kæ/@ c‘·84àŸÒ§ˆ¸õ¨àâ¥.O4r¬= (c*óòâ€ÁˆÅ T9 çiõ½5IV&žÑœ× P0ÄàÒÆ—j䜓҅;ðHÀ0EP@³Q‹Ëd´!Æ^)»7{ãƒMÉ ²E;y^½O¥0¹Àß1†sÐw§úÔL¶3H`sž)æCÁšˆ±#…$ næ'cŠXRÅ4„€3Œæš¹ÛëšqŸz*í'æëÚ•ˆ. I*ç#‡6ã¨ÂÄgŠV.£×&¤ØCg>Ô€O›hçv¤92`t¥w 0¨ãvÜ’@ È®F=è_»–#š|À°j¸Ü®2x¦1Å•£R>fÆ=(Û¸˜§€'"˜…VP¾¸¥cž)ˆŒ 8ÈÏ¥8íÚp2h a‡ËœzÔd`3Å8d/µ7x# dŠy#h9)Þx0¨ØpÓŸj• à`RÊ[9¦íÜü®iNGCšaf9ãò¦ÊBñÓ&¤MÄ`°¨ÙIÀÇZB¤O€’mªÊAçÚš– ° >cP»øbEùAQ‘šj¹$¯§µnÙÅLÚ=èäñéQ೟”w©\rŽ œŒc­1¨Tþ,æ¥Y\lÍBÊ­ŒR™UW`7JvçŒÒ¥…6Xò)ŠÇƒR ‚ $fƒ<òi~] àЉK¦Ÿ½F'4Ä0à`ŠxØÝÖ¸çô¨ÜŒP1Å“q¥Îz žÕÁ<ÔÊᇀkÀç½4)ë’*V’>•-Œœf˜†4a¾f|R«À|ÔôÎA¨öí@Á=¤Ú¼òsA*œç€)‹óAïLc•ÀÈÎM †NAÅ0¦qRåGE l Üæ­)ld‹*m2í-Ï"1ûƒŽHÀ«š8Í̤F*›*ƒòŽ*ÖŽà\È¢¢[Ìž(q£ž08¬Æ#cŠAÍëG¸ ' ‘IžäR€Ò˜9âœ9ï@ 2ȦUir8£ ŒÐ{RàbƒÒ“$ô¤+ÓšCW#4ÏZEã½;¾i~Sò( fhlŽ´ƒiïQå—&¤^pjÉòŸ­?Ž3Jx¨×l JÜqAù@¦‚ â2¼ÔEÂ65&㌃Š$\1?•Aµ”|ˑ֦fϹ¥g;1šUe|#Þ¢•Ö3ÆKûT2ÇŸž3†ö©Q“Ïz8\~ð+ ŽôæÃ{Н<>|,§ðaÚ«ÛÏr@éóëHfŽô¦¹ºÓ"BAó³{T¤mà)€™Üq·ŠBW#'”r;ŠB‡9Îi6î1ŒÞ›ôÇ“zÐ$9¹fr)Ž>`:J’žô(ÎPÎ@¥;”ÿ"È B)K0RG8 cC2x9íOcŒTy,¿7ô§Æ¤¨éë@Ä?%y¥NF3ƒØPP†ÆqNEÍšD7+d®qRn NHö§}ÓŒõ¨¶m%ˆÎhnÙ0TûSÃv¥Ê¶úÓ²»°h™n­È>”Ç ©ô©ÁàTE7Iœq@'“ƒLq‘ž8õ©:gÌe¹€\c¥eï@%zŽ)²eî2<–88ïC)S‘É4å²²Œ:zPŸºx&—klÏaÞ›=Îy5!$ ½»Ð EbË‚q@*ËÇ&—#9ÇŒ6Ö,GÝÀ¡»zŽÕ8À½D ¸ ³•%˜F@_^j7C+dõ©„x"ƶx昫—.'µHê¹ÆêDøx¦ö9…G°JäÓÕöåO$÷¥å¸ j`Ž)Â0n4¥jH$ÔeÙ˜€?:N#ËL;sŸZhB~V£è(ï—¿µF1ŸJV‹Ìu9"˜Ë´žwSç—dƒŒƒÅ>998ö£b”cÞyòðG­Kr@¨<ƒÇ½*©Ç=OZVM«• ˜´gièùAž1Ø÷¤Bž9§£Ý3š@  Œ÷¨Xì`0ÔÎÊÄj5%Žôõva÷qJèÑHÀ¨sJe¯Ì4„å€ôÖÛ“HÄuœ"Ýó@ˆ•2Ù­#ûŠœXnã“@Ä@Û2T~4Œìä(=*mÅ— ô¨ÈU$ã­0ƒžµ*(f;±ÅB8aÖ¦@ásH1Á¨ÜüÀÕ(*pqM‘T’äó@…qÉ4Œ¹P@¨)‚iÀ¸~OÄ*eÎ1ŒSŠƒÁ Tp½@ȦM0ÎUEÀÀ ÔLÇ>âš®Ê㊓~AÈÆw=)[£hëNŽX÷sR–‰ï@Èw€@4¹ 8§²^J‹î·€%Ž0G&œ¿!ùrE*榋xš`R_9ùM]Ññö©G¥WvÚïSèêMÜž˜¨–ÃFçCÍ$“JGj@0M@Á94¬@£gÔ*ý×­ˆ'“@ưüœ ÔÈ£?tc®j29aÐw¥”t™Uäò{ŽÔ›òîO½!uùr{Óe*G  îƒÀúS+2G¥5HÉ8=)ÇdñHŒäqÖžÀ`ûT>jƒòçñ§‰ 0 ”šˆä™0xäJYÏR*UE8ëE†4˜Ó­)Ry©6ù8Å9”2=;Pa•!=zSÔ¸?Z»PÀD ‘BƒÏNhÁ Óx~´ø÷«’1K!8Ži»€=½.à[åýiÆ.>ZÄNZ1 .Ts1 œgÚ«Ck W2\(;ߨ=(*6êXg]¹Ç#šîPÃ¥ úñ@ˆ«1 Júv?w< Ó_kØšrÔöô¡ˆé@Êöâ@ÌÆã(!¸âš0OJUaƒ·¨õ ¤cœŠ‘X(銉1ÆãÍ=zz•ßwj‹<üƒÞ¥Ü:Ma€Jô òÙÉæžÁ™Fx¨›–£šR9 c¹ßýáÒžT)Èâš­µqÎG½(÷ë@†0bAíNÈãÚžކ¡‘[8ë@äcíH͸}éPcåÛÍnÙÀ†0‚ì 9¥~p(†ÞzŠBß.h +Žx4ãyª6m½¹©øŽM ¤À¡öçpôéRdc5–X‘š&FÎqÏ¥*ÍíJË€9⛼¯Ê¸ÍWi#šk>:šMÈêX08¦H…€ãŠ,ó‚xÀ¥-¶3ƒ’zf¢U!H$óÒžˆˆÆÆÌCm§#à6zv nìr*El!@¼Ó.2O­(~AH„ÙçÒš™²Ã€˜Êvô¤å†;ÐpxÎE1‚Ç/SÏÔÄ+;aRn]¸¨Ê`®AïAB¼Œ Qp±"úR:ã“Ö™qƒKÃu0éÓ½.ÅÆ\S|­ØbiÂ0[ŠCƒ8ôŽN:ñHªI¤Ä;ÐQ±9 “Ö¬ÂÅÔ†L7JFpÃ8Æ7‚hÉ0„¼Óq¸RH¼g4̽sHd›­DñƒÖ¤/ÆsL<õ¦"@n´õ-»R˜U×#Ò Á ïÉ#4á-MES!&œI+‘@†¢½r)'8çŸJz ÈyäS¿Þäš1@J™c §Šb <õ§œªñÚ˜I p2i6Á±MBI©A‚i›C8ï@ê)vü\SI ëÞŽ`s´Uq 8â§UÀ4ÖÈÍ1åo›å¤#æÉ§‘ÆG>´…Èü©ˆb aš•pƒ8¤Rœg¥+íg¯­æ#hâ˜Á€;€ÏjTPdëùS›zžç4›ó^ïV¢dUS¡R9©Ôt=)#°ëŽjæ’ÿé/Çj‚8׫XæO¥D¶67uÅ&^h Ó¹â cONô ñFIâ—µ S1ó q>Ô~i \zR1!1J£Š^@âœxÆ:Ò*ŒÒä–u<ŒRƒœ ‚qH“ü{Ð8¤èG½/QKÇ­€ÉWGbTò*Q’pj%U*:ÔÙã"¬@£ƒKÆhÝ“KÔÐ! ä’)À¦€ 7¤{š`ïÍA4‹Œ‘žiÃͰ/COBÁÍ éJ¤S¤a³švÜóšCŒÒ“ŠÀ⛆šFc»¥& Aâ€2y§+dQžzS#Šo”잘¤àu„5ö„9=«œ îO$ñ]˜hÎ1Ò°B#|µhh¬HcƒÀ÷¦7ÈÀ ÷©™2üw4ÆŒ’¥0cL«¿ éQaÉÁµ9•£ù¸¥Ê°Î0i’0¹c¯;:ö ‚Ãâ‡ÚŒ0IÁ‘ôb3Î3L}ÁsŽqR`“M’@WîŒô-Äȇ pI"¹ü)rT `æ•«7­6G$‘ŠTPÀ€jcF)œ ñš@$™ €ÔÀK\äq€¨2˜¡Fî´ŠT¼R®Ý¼òE0"€[¿µrH£PäîÆ Hä3½ûúTDð2;Ò«ÎHö  6‘Ø8¦Ÿ¼xÀ§nÁÈïëIÝÇæ4 wúÁÅYã<☸ œúÓÎá$ýh€pxô¦6GA“MÜ7gžiû‰æêA=éÅöŽ{Ò° ß=é6ôÏ9ìi€íÌ ÐÔ€íÔ$Î8#¥œ dRe·šXËg9ȨÑXœŸ­HFÂIéõ Cðç¿50Äîâ”>rsM' c‰Ãøš@C?ò¨òÄ€:w§Æ|¸ zg£*G9ÏÒ‡–ÜséFÑùÒDe†qI‚ ühÀŸ›Š€nzŠ ôÅ<±$)Æ 0¾ñíJAd{Pàn ½ª6mÎyüâM0CŽFhå#©4ÁäàRAëøR =hB  ô8À¨Ë)T‚yÍ8‚sÍ(éÅ7pR~^)¾b–8ÏNÔ<“LV*FEX#tc§áPƒ»8ö cÉV4GØ#¡\­9óÏZJ¬ dcéCç~qJTxÀ¨ËïÎô VlŽ9&™#`朩žsȦ9## Ò¨…;†)Å c¥0 /*GÍ@ Ëž –SéJÇ4¥B÷Îh „Šä‘Æ)TmQëH\Ä i|ô¦²Xcša<ðjdãúSY 9=(+ cô¡”tRhç®(#ä$R ùà 08ÏáNÎá“Æ(q•v¤0Vl`Hű¹Ozc´a°Oj,Ga@ çp4O æ†oŸhÎjTVÆ0)ô 3°†j]»‰õ¥HÆÚÌÚqÜt¡³×š{/ËFrGËŒP0p>SO]ʧ½N¤c8Ï¥FFå$ñLòGOJj’i$Lý)XÆ1H@NÆM9\º‚ƒQ}ÅÎáOW-Œcò¤ýêPқЎ(² ¤äâ˜ÊåÓR$ÜŠb¼Žžô†'–Ä|ÜTñm+†¦>üuëH À®)€ó‘H½n´Ð朮ÞÁÍ1QÊ‘I*3‘žÔãÜ /¨¦±Ëúš.+ l®psš—jä1ÉaïI‚*iBdär{怰à§ŒäÒ`þt¥X°Á©árÜÐKS¹<¤m‚Z”áÓž• x`ËœSöƒ×ƒQ’£ð¤i¶®9¦¿?ZŒ¶ã“ÏÒžÄ8=Fj ÁqÎ(v·$d¥ ;ä~4«#89Í3qVÍ1XŽM©Ž¹§+Æà1CüÞ”©×šCÜ6äëJÒ3&y¨Ý±½iûŽ=)€‘«y€¶p{š¶¨uÈöªªXÈß—Ö­£ax\Òb¹N .˜ßé.˜íÖ¡½qV4žn$Ï\TKa£`Æ)OÞ Ž1špÔ @E.0=©Ôî§Ú^)¸;éùÏAMäŠqéJ3ëH3´Rvë@ ÎsšSsšA€)OJ@.~jpàSóO÷ ©çµ9pGJhô4¸=!’qE7mŠ2×t©qÇ“Œö2¶jÑ NM!ºS·c¯J7N(ƒ}hÉÈö¤äRxã­0Œ’EH¸"š3Ž”+zÐ!psŽÔÁ4 ÑœZL‚:sKÆ9¦ÔÒƒÅ0‚zR°ÏJ(ÉëB \Œg¹¤$R…¥qÇ4ÀÅó‘À§i¤Ž˜4€kýÆ‚°J‘žµÐ°ùOÒ°[ï6GhhxÔlL’Ø>”ü(ï‚:S ä1=ý)‰±¦,žOçM Á\ q\'-ŠŒc+øÓÛr¿Zk!d~4î<³É÷jbþï4ÙW×¥9dP0:{Óƒ"ŽNi¡2Eœ”¤n´‡ålƒA‘XqÁï@ Éb£$)ÀãÀ6sMùW“Ö“ªÏ­Cæ6á‘‘R<€õÇ­WŽer˃@$œ*M¬~^ZTG¼ò{TBGby Sàq#ÈÃ#oQœŒš„ȧ9à2hµ"`¬xëHƒÔC,¡H9æžH(wu¦ù™'#6cH  Šq Áþu®üz{TË„ ‘@lbÇôõ*„Æ›»[JcJ3§ëL X ŒuïH’<»n9àcµF.T9¥i2v@fÈÆÝ´Ö᳓R><²¡ŽM¡ƒ)ã¥rE9§526 Æj¬RùŠí'Ö¬‡žôƒqåf˜YÈbWÚžñÏANØ¥qøæ€¸Ìw9¥^9'ŽÔ¹ ƒQ·?(ÏZ<ªî¯Òƒ!Q€9õÅ8|£ŒSp7‚rhYXõ4Ø•°x5&vð•YTòphAˆ…XǯJ{cŸ–‡cŒ`Òqó(2Ã0ië€cµ1Ônãð¤}ææ’åŠœô¨VR2ªŸLŽ~´ÁÀùø ¬œAÒ†úSÃ)5eÜÙêiçÉéL9wã ëR‚¼ÓAÚXtÍ0 â¤`žjUo|PÊ20 ÒppéIÉ~H8©À@4 h$)d=x笪A"£20<~¢!\œÿ¥mÄäp)CdóÐõ¤fÚt dy'!©ÛU²»)ÝŽqƒÒšŠKöâXÀÀ8õ§t8ÏZúÓrIàgÁËsŠš&!IšfÐü‘Å(dB8àP»FM>?›Œâ£Æpà“RdÈ e;þ速Js!aÁõ¦ˆ°r(Cµºšy~äqIל~4âB:Óà¦j0ÌIéŠnó´ãµ"†ÆHë@‡¿ZC¹Wšœò3õ§³´ RÄh2` óC×=i§æL‛ðN{PÎ=1@äð(eóÜàûPæîè)W!²ÀóïNH¼¾ æœì8¤ ÅFÇæìçîA£h sœÓVÆ& äECŸÞrJ7¥` rM–#$‘pp Sü±ÉÆM$a†2sš‘Ù@Æ*¸®3A W€Ûqòç¡á_?KzÒ™$d±â€7sšfÝ„µ"G•#¡¨œ0lÅ&fÏL ‰€&£fÛŠy`@˜ hòx?• ¶ ⥠µsÞ›Œœãšb#xÏ<žiÿ"€3ÍHÀà „®âC@ $7J—ÊúS l1RF¿) bÄy¸d@ÎjCF1SÄ)§q ³¥óÜzS Ç Réºíý1Q-†œäqB’§šLíR‘Þ bäf€Ý©1ÆE®hàÖ“ œŠ>òÑŒ ±ŠSȦrXTÒ€šŽ)œ÷¥æ =©ÇŠhl]Äö bži7ÀP ž¦”y¤öŸZ)y¢Ìq1Ú¤SÀõ¦`S‡N*É['Ñœt4ÐãNÈ_Æ€IÍ(ô sšÉ☇vâ“×"…8¥o¨ CG±¥ÞúЬ1ƒGñB‘Šp4œNö L@y9¤'†ùqAÇÐyšUá¹4ŽÔ4ã×"ŽŒQÔP!¯÷éX%Nç½nÉ÷Ò°U÷JTt©!˜•;ˆÈ¨ÚL© `â­HÊÓµVÞ§…ýiƒ+†Á¦*1Žüæ’@Ùô©UCdãŠb" X•Å#9Û´u÷©‚( FTIõ¦ =i¸"A…ÏÖ¦TûÕÎÿ1X+·&—À$})x Jþ´m±`I¤1³Î@ç*5L '·­8ãhà“MgUÎAÅÛI ŠlH7.:*M™L¡¨ùSƒÅ!’J€ B¨ÊÞ¦§=y¨ÙŽÓŽ)ÜÉ]Ç# MqóŒñœTŠÀ‘òç=MFG8=©ÜBÝpE¨É4øÙOzñš0#ûÄç4$}㌑Io´ÕdcœÇ­&rAÚÅ-žÞ£3ÑR£®Ó¸g>• `ŽIhîAsŒÐ¹ ´ ئ†ä7´Õr‘Æ{SeI)Æ=iöƒ“ÉéPïíü©êÛ±ÇÀ32|ØžZãæÏÖ’@U±ž)âMÉ€>¦€1·‘Ó¯5!Ë)aúSAQ‚ý=© ä¹Ph 2ŒœdÓväA§¡|àŒâ¤‘ˆ=0)Œsòõ¥*#ù·dÔwrN)BÜàÐrOR3FK|Ý1S8ùNx¨àó@¦×Lœ“BÆç“MVÚNH¥9Ûî¦[®Gƒ-­Ò‘÷°Ï S€ ž¦ ''­ $t÷¡KînMM,:qUÕ×jÌ_*¤Òãïd~µgNÏÚÛ•]ŽÒ\ÔškŸ¶7ª%°Ñ¶ E.sJzR €#¡§€*.ôáÒŽ' i$ RØn”ŒÂ€¤­)äS£HÓ€ïMö§& Ï4 ž˜¥Ðx4ƒ ÓÀ'¥5NzÓ”qHc¹ô¢“ñ4PVI8¥ç<⛌‘‘Å.FìU‘OlÑÖ™­K¸~t%8qÍ4 b´šb“Ž”ÞqÍ<ç¸P!¡qÍ)ojwݦg94Æ*Œp(ÜM4ô§Îis@¤Ž)¹ê(Aã`nÅRq¿›ààÐzõ¤$@=Í!ŸŒW6×|g“]’šæ‰%˜äã8«C@ìK˜bšbþ ÖžPm jr@qL¢6“ 6ž˜Ç4õGSšibïgµ2vØ<ñLcû²¸Á4¡23’i’)P$Z`(R0I¨H˱ÀÈO9 lnÉ'#Ö¢m¬K` •\g#éQË;ýþ} @€°<àRˆ· ž~´åƒíR‰0ÈäP2‰Û'·JnÆÆ8©Œá@§­Wió#qÁ ˆß8ÈzSAäœPŠ7d3NhÔuëL…%AÏ#ÒŸ³ÌÃvÇJbçŒúÔ¹`£±4„.ÓÓiõ§ä$ŽOJF_Ÿƒ‘M/èi!,v4$üÇu!Uásœöô©¼°±ïÚÈ0£ÓÊ/—œdÔlÙϵ9‹”d w C–Úx©öm­U™Ž~•&ü&@Å„rrëNB¸É8¨Œ ¸ŠzõÁï@`¡ÊŒæ“9·ô·QC($¨4p2¦•ßå²hû§æ=)¹_0e¾Sí@…ó#T8Îi7–w¥#l'‘Ûè×_ÒÅwÔÊOJO™ÉÅHä¨ÇÞÄGò‚sõ¦¬àç§aMÚKchЇàt¤2]ù;OJR;‰Æj0s!'JGc@É^pz c‘·8ëQò½:SÃeq·4ÝøùiÃ8Å1 Ì6â˜FZ~zc/ÍÇJUô`âŒgŠqì)€ŠÄ¥/^Ýip!â3Þ†SœšNE‘Ö˜ <œSÔ QŒ Ò‘•„$„È•ÍðYÆ;šèÛýYÏ¥ròˇ#ßµ\A 7˜I\qÉëMR@ÆsB¶üÇU “''˜zãéO—&—xQúsB$j¸Üqš‘”´c‘L+“•ÏZBÛr=)€ÙT$`ý*ãP€jR €y¨ÃûCtíH`HÙ€ip½iÌ0¤ãšz!<úSñª~fçڜѨmÝ­&ï1A_Æ™#Þ¢ ÛC7­FÄãu¿ÙÆipI´€vT¡L1 ¹šw–ŽqJ1íL®TœäSÂü»Ðœã½!‡~½é~eùAú `Dw0;Ç>´àÛWƒŸ\ÓœÎO¥7îŒëHI)Œ—#¾*3*³d޽*WÇ\ri…–OàÆ8 MÍ’Ç­N£å*\óPîÚ˜SN^FGã@@#'¥G+†n[ŸAHØ”öݰmš5 )ÎÜf¤FÜHÈàöªø9lc°§.QÉRy4 ²À©É7¦Ò£ uÅ*ºŒdŒÓÝCƒŒÐ ‰Ø•à|Ç­L y€sOCÔQHÆI=èMÃÖ˜¥-Í($dí듚@8“¸{Š ±Ško#ާ‚:Ò˜ PÄåOÉz÷¤éƒÆM*ºò98¤20Fò éNÞ7­! ĶÑDq“'Þü(wŽqšr· ãƒLÈWö©æ ‘@ˆˆ$Ÿ›­*‚‡©üé̇Ÿ—¿QMXÊœî'ô*áˆb3íR³8\f¡ƒ`®)êÇœšÈÈ 6å'µ# û§¿½4(ÁçjŽÔ¬ûG )#•Tc\Ôd.3ƒM'œ‘‘@W9,‚xÅ"Ƭæ ÞÈè |µ21/éô Øw…HcùA$f˜[ž:Šl†F#ŒŠI· N4»W`8çÖ…M«È©7€˜4€f7 Ç^ B[k6Ú—=—šPƒƒŽhƒåÀ8Ï­;9ÆH4mU ~Ð`~4Ì”ç­=HÜ éŽ”Ü‚@ÏJxF-Ïé@Àð:u昹\7ÓØ0þ´À¦ &ÄÚ»À'ÔÒ*¾O9±«¸vä¯j°%x>”ðzdÓä4­pöâ¥.¯JU ªIІ1qü'š‘OËŒŒÓA#%º”À`ph&wß‚Ã8çÔSK`äй»åô d„1žiÑžHaÒšT”Ïlõ©nÜw ¿ÍÀëB€Wæãµ4r}éãpôühÁ´60p)@’ (f-ê3N*»óúP:ŒÐ£î)Í7°qj~yëùÒª‚H#š©{¹-ÆzÔ–ÓŒ)|°ìû úÔˆœàUg”E"‡8'Ò¦R[$7áHdªFX¦d‰ƒ€jULGÀ5Âdïí@c 2§JSfÜsK$XÆAÎ*9!…ÞBq@ˆ‚¶ÒÕ“­Ë XV6ÚY¹4˽YäŒ-¶Wßk-ÞòöeÈÞTâ´ŒYKbÝ¥ÕŵÎÉ\¼oÐúWK qé\ŸÙ¦i¼¤ãô¢V¾F]6;U8\JV;vu žô둜×/5ðáÈúÕ˜µ+óÖCùTºl¥4uÚ˜SŠ­yvöÖeÆÖnƒ‚o¯dV¥ùO)±™ B¿|7©£Nz, öXä|Î;TÛ07íäÖ$wA"‰òK‚½«M/öQµÌxê¾µ-X,&îi§æÏ~)XJ² caëOùTç†Dkgn*EÁb)¦ NrqMØ’¸;h¤sPÚûAÔì¼’ME³’)€GògpÍL'%x¦„sßÚœFäï@ ª©+ÍLŒ«ÆG5[¹*HÔ’9õ¤ÌäƒÍXÒƒ‹æ$ƒòÔXÆOJ±¥![Ç9ÈÅL¶6ÏÞã–éMêip@àÔ£ƒAëH9§EôàR©'šh Œ p;zÒØïLêý8§g­ 9´¤`f—ð£iÏ&˜ BìÙnK€>”ÎIã¥.â8ÅŽÕ'8¤èN *à÷ dbžœSÀÅ!9Í0$ ÒšÇ×­³Í7“Ö n3Ši¸>˜£¶=i€Ö<ñÒž¸8¤ r)zr"†¾vúW3…%¾µÓ1&6õÅr®Å¥Úþ*â4rä>”â¸Ô sB£îãëK(f~£T& ]£¯zEù‰Ф ÜñK_pÈ4‘@T#Їç$‚)åÛiM½;ÓpJŽÔÀj–“øTre[S’jì ùG\ÓЗLô4啎yÏz•CmÏCQ*…;±’iêNNN;Ж;zŠEl°$ö¤ ûþa})á²r¥$f'< ´nTLʧ`Ïz~áåáhÒë¼”†š]AéŸZqGó.séQ}ÀxÀ4V”ocm*˜²žµ ø•3¶GPðËžý©ªÀ¯í(R£Ži¤1a•àPÊú“C!¦i™4ˉÄ;³`i‰êéi Ãö•«{å‘G¨ªÿhkÇi=íH­™0*­b.Z¹Ôç<¿'óM³¸û<»æ Ïv¨ËmQŽsßÒ‘d,W¥»,Ü\Å-À1¾qÔÓæÕ`Œ§•&H?5QN[íIä®ÝÁ@ü(²Ù­ý¿dßb{ñWmõ+iXIùŠæcUg8AϵMéòãŠ@¤Î¥ï­¤8‚Õ‰®Ý´¼|ƒËb³ÚEÞsÖ¥Šßbù¥·Ï4$6Ú±$QG´!ãÕkËè!•Q $е• ÏéY7¦æPË“Ž+DC6YâxÁR=ÅWòc¹¿EE²†íÞ¥i¡‹æc׎hÈØOJžXÁ${R«)L®0j'r­ƒÆh¸¬= ‚X öSg' gÐR‰T¨EÎsÍ ûH+ÔP€P„2j¦¡$°,MÚAæ­É0@ª·`Ê»:úR@΃J¾–ò=îAÀ­&!×¥`øh²@ëŽAÆk|²ŒœsY½ÍÅ}ÿ60qR/'hÈ´»_•y4ÙpH4†+'ËÅ@ê䊶® Ra>bÍÚ˜DŒ áN M¸ò®¡Tný)Œ2;âÌlqÞ¬F@àcŠb@àæ¬©#o~´ŠH'qV4¼ ×çµ@xµ6š[í‡ýÚ™l$ÓŒb™84 ¼Ð@â `1šp´Üœô æ€”ÝĨ sQ"dGzw~ö­1`î4  DGË»ƒ“H1‚IéHh¨c×ÕåX2=iÅ@MÚiV-ø Pœœšc©Ú[n®i[ &’FÞ'ÔLîáHÍH‡Œc¥EªäµIüY q@àœŒã° çS… ÄÍ0Á°Ç x(‰FƒÈæ ˆê9úÕ§•NÎj`Bp¿w€xæ£b c954È åj˜~§ß"¶æÎy÷§8Éô`l‡4‹†ž”±0ØKO„¸ö ‚$ùñ·S›ŒàгŽö¦– Ç?QJÃ#‚p:Ô@ncŒãÞ€%WH1¥gàvÇj„|’dTYÏÒÂFfÊŠ6cƒOÀ^Æ:ÔDòH1$†9Ò‘‹ÁÅ?‘õî)^¦˜‚%ŒÒ¶Dƒ V;@# íHä2‚)~õqƒÚ˜d.‡qQ1ázûÓ£.;gœR0PÚ6ßÔÓ`ÊJv¥\+…ÎxÍ0,¹$@Ȩ¸ÝÇÞ”±8ÛÒ‘¶õ'8íH2©~OJLçîóƒNÝ»%LvÏÔÀVÃÄàôÀ¤Êž”®¡xçÖ£ŒbAÇ"–±„Çz‰¤,HsÐâ•]Œž‹Þ”2†!zŠ@!.ÏLS2˜õ¦–f|/LbŒ2HÛÚ€§oZ3´Šq]¿(äžiŒ $’(´’\¦xùz P²>0äœô«[¾Ašd…XàPœ¥É‚2)U1€y NR°8â¡Þaç}i»únçµ'Rr2 ¥RHm£ÖåIÞªr1šRN:`}i@Àñ§) ƒ@ƹñR©,¾â™†n0Ž´ô‘WåS@ˆå•¡ˆù;ÔªAPýC|ˆÐ›¥Aו`­œ8˜h[<¾¼ÖW™0½‘V\(Áê“Í÷¢Ïn*»ExÒÉ2cMG¸9¶Ó‹¨ÉÚ1œf”¡Î dé÷OiI‰Îp;U—Õ ‘@ŒàòsJÎát_h؆à¬@=â³Æ­ {¼ÄeÇ9ö­a*,‹÷[‘íIY9æéM š$MÜMÚzwï¸MM,¹$sQ&I9ÅJ±…PÛ‡­+&JBÒ vÇsFöÆG¯z‘æäÐ$f3íO\¼8»ãÏÖ|1æÇyŠLŒJÍ•ïQ5ÜlÌ9ÊöÅ,l%‹Ì\\Š`I–<’+Xœ PG\µhË3źŸ»È®fâW(esó¹ÍTQv,Æ©#‘HˆìLˆ …ëÍV³Ï–Y˜±cßµYÄ&4ฦÉA,Êz¯¸¦¤È0g5!Ž5ƒ#“Þ›q“Ì|SÙbØQÅ2Gp¸éOx@8ÙO^´èÄýã0|r)yq?…J¸däqQI gæBÃõ"È«Võ`8,)ÀªÉh Ü´¢R*B“ð˳š¾¥JêpJàH 2"`\(íI¿÷‡qâ‹ 2CØéLRËŽÜš`kéq[[ÍÎH9§Ò– ¯ë\ã3FNÆOY”ɽ”íRâ>cuõÒ²a-Y—¹Í<ø‚¿¼ŽÕŒn œ¨À¥3¡ÆW'ÜQÊfêkVn2dÛøTÇV´òóæŒW.Àî,Ê1éL@­’G”r¡ó3©‡V³|–”`õ0Ô¬˜'_ιE¶GÉN~j'‚$ä$RåAÌÎÌ]Úd~ñIúÕ¤hämèÊâ£äghI—Ì9¼\£æ;I*ð3NÓ\›ÃéŠÇÓîç”ùN7Õ«gLâ퇵g-‹FßZ y ⑈À$T x9(ÏÊi ã¡¥=úÐ )Á¡×jÓ;ºqH ùhR2sAã   Ðäb޽hÆÕÆis• wâ—”‚•N3@ 3‚iTƒ@Æ)6üÔ†>ŠNh fbòwS±óSAÛÚŸÆj‰€riêAéQœgª ò;Ó$ Í"€(ÁÅ/lS§¿jPFS@ö¤Ét¤Ï¥/Už´M„òhQÎ1J3ŠALâúÑœŒÐ 'š@&;Š9§·QÚ‚F1MÞÜu¥RqÍ74ü`P!²“ð®fDÆs“ŠéXf3Ž+›yB’ 8‚eu«~4Š@8_Ö†q#dTe|“V&o˜ã¹¡"p»~ñõ4‘V'¦ Ù £„TÏ¡“äa•Æ=jrásîj9¸Ë â˜Ü’ä±Ç°¤'å'×Öœ@ç¯줊 ghê( eÙ÷¨ÉeO”nÇ­K¹\Œ`P&DÑ9|–G©Ljª žA¥E½M4ü’dóí@=I#ÓŠ<Àço_JUMùÊšrFgò¦"7VV Js7Ê2I« ——ûÙëPÈÁF8éHd\Œ·ëMfHþ÷SM~Êy§íZ`1K;“ü#¦iû—wLãô¦Ëº; A‘ƒ@‡˜Ëœ‘Å0…ž1Þ¤*ßå=G$Žô `oÝúæ…`¹c5#0Eâ£,­ƒÞ€cm¹QÍOEcäR#luȦ5Áó„j8Æ~”(ÀÈçÒ˜ç £Ú¤G~*2U9q=(Ê¿)<6x¨¤@û¿Z_0îprE!¡#©§‘ëMÇ » »)€Ölä‚i‡€¡‡2)íµIÉ¥SœäÒ¡]vÀïT®ÂãD\ª ֚ƀ`;“Y’”[†fÈ$ôªBd€"®@Å6FÚ¿)éÚª³°àœúJ]îqÈ?¥UˆÄ©éž*79pÇQN’9ãµV?"Ð62âMÛc^ç½lè“ù–¦74g¼=Ð8 éZºD¡o¤\ðW8¢K@‹ÔÕpÞhôëKŒ‚ßwu´@È9'U­¯£º&00G8©³.êö,ÆHPrsŠ@F £®i ìI%¾AÞËA@ÁâœG¦+6]^Þ&ÁbÇÛš_íhä“Ú‹1]hœ`‘M1wW;6±rò°FØJH5y<õK‰°=)¨±s#¡ýÔ?hÅA&¡f¤ƒ*ý+¾¼k»ƒ#1ô­æ†ràtªäî.}t:™öIk'”Aùr+˜Ž–rÒŒ*Ž w" [n9Ôñ»¼ ƒŽôÒ±-Ü@óp8ÅH¬àãâLÞ”LC’y#¥JW û¿Zs©¸•XÊîw1À¡œž &€%.§;zâ¡‹n8ÎiA!ñ‘ŠG?6?QLE”gV*ê{U9L€¾•Œ6ìN˜æŸmåÅ ^ýh çÓ½;Ìã#9§¬yÃàþ4ÍË# štSà`óB3+œÓW’éOÎÖ ô=1T"iåRÜQÀ1žôÝÛŠ©Å>5N[ð©ÆÜ Ø4¦GÜéRË}:w¡Õ‚ÝiˆŠRv6;ЧÛŸâÏAW&Ñð¸5|¡Î9çUc‘ 8§€r0~•cybPrz‚`Á±œÓí줎¢•=[ùTk0EÃsŠtw!˜üžÔXd¨›£Ö¬:äÁª—ž  >QÎ*Ü.X`®s@ HÔ峟ҚʹúÕ’6Øè,pdzvñƒÚ¤fx;e*õ«)•wœéU¶©›h$Þ—ÎXÕÐ&ha±ÕZ¥´H|—ß“É&´,ún÷k†´¸œÉ¶2T é<;$ª9‘˼V3Z\Ò2èuà⨥(#½f11“J æŒqKŽô B u4`ñØRtÇ4üŒó@ $g£3Jqš^¤c9¥^x¤"Œ‘@ ‚ÓºzEÁ9Í.ßzÅ8¶4ƒ>ÔÜäàÒLZ)›G©¢ìgº¤Ï EÍ.x8«$nyäSÐñQdîõ§©ù½©‰’3dh_CMfÅ(Îr:P˜`RŽhå"Žh¼c4€=iq…4€Ž‡­ 8攵;åúSOOZ`ƒŠ ät ('=©Aç€ù&ƒJÙÏ<ÐÝ8 `óAcž)6àg4â ±ùÒ¸ùggsº»ÿVk‹“åšAž¬j¢"PNþÜÓJòxÉíN@Á8$Ô›H?Ò˜l, ® Žâœd 1 Í,@m`Wšk?b1Šb»Hö§ùƒZfx=éî0Á‡J$\ …âªÈæ3Æyê*ÃÉ’84Æ÷œã T©l1ŽÔlUçÐÊ7åhu-‚ Fi`Ü |píäÔeŒ“Îhß°p9  Á#’pqM@äò}è(<šxWgP!Ê>öëN•†wšzy~S’i­å¨Ú8 @ÿ0?75 àriä‘ó 6Izœt ]yÀ8÷§2ãdŽæ©yJ”Œ&p:ÓA¹D|·LR'–ËdÒà×"š»~c³¥ì_‘À)q!'‘Ž*C÷ûcžfO Ó‚q@}Ã%>iÅ ü)¬IÒˆÑAÉàúÐ ŽÜÕpYnXúÔ²™Ïàj¬jÞ`Iï@‹›‹8(84ª¬I%@ô4ð9ÎЧSbØÝHcß`ç=iªAo—{ÔlŽ\ƒƒJEŽ8"˜ Œàæ¡òÈ$ŒŒS÷°JäÛŒçæ z剤ÃÊã¿‘Þ¥ÁÀ;·f!Jü¥ºät5û½)ìÌÊ6¯Jtk»’y4À`oSÍN¬z …‘CóÅJˆü¹"`P*d-È5(B¯ÐÑŽ¡…"`%1ú{S#ž Ln܃ޥn}Ý;í╎@Ëu¦"fÛ´cn;b”“·¢ŠÐñœv犔ü§iÇçHhj|ÙÉS•öó€O¥(E@Ü µ#0FÞýh5efRÍ\ôÖý:˜ìàÓ|±œâ€ \+mC‘OVÁ#qÏ¥8C´’çMrÝ@ª›Ø’Tàaqž*€#ïëR2äƒÈ´†,mµùéOa¿¨©VÃzYÄŒY€¡ b¤˜còþ5^æþq̃9éY÷‚Ž<Î=±ef™É5j"lèRŽoõJKTö÷* ”#{šçÓ|,¤?"›uw$ÎŒzÑÊ.c¢•´“4høÛëÞ³®eW»f'€}k-ƒd8p¤ô¤ÌÎ]w{Š¥„åsBIcÛòœ0ïLÞè05QT¼Ÿ?õ©AO”ŸÆ\pœ+wäæ™$…ˆ?§¥D_(FÜ8¦#úŽiˆ˜©S‘Ôv§y›ÍRÎ2)¥Y~cÜSš$h€Ï¾*F5în&Pes&:O´.o$ =óQƦ6ÏðšlÍníõ¦„h^j ìcG /zÕ?´É( ¹•lÕWàd榷e9'9‹ —rŒ`Ò$Œ<`zÓXŽO&–!¿æR1èi,»ÏZã݃€1ëO9V;ê'’ â™'¨"”’äš‘™AÎൠ&÷9EÏú’0P’Z`X”*¡!qÇZ¡Ÿ-Î=êYÈÚ[ ž”ÍH ±ÇË 66FSžjÚT†šÀÆ}¹  ªAq#Š_8tn±Ucãi9õ©ÀM§å"˜‰Tƒ’¤“V#,BðÕ-ìŸtu©…@aH {_–Ü©²Iód¿n•A®Ib¿05aSrÔ `8Hθ¡–3m!<žÕ`mr8¨/IsƒÓ!R¾1€Ž¤Ê `p;S™Pzà~UY$ÉlðÃÖšCœM#ùPÄHå±FÃ#nÝŠkÆ ¸žhµ@-ժųʌTc×Ò†ShqOI‚/Î9íIŒŠv&ç;ŽãÚŸ ιÜT‘Úš]™‹ùx#¦i±FŽÅ‚üÍÖ“9n pE:ÚMê={Õ¶µ1··zjZ¬`¨i\v-Ùª®âA9ï[þµ8ãmsP™Qv8®‹Ã2cS+×嬿´*/S²)IãšFÆinãÒ±,RqÒG´ÀS$Á§‚ŒÁ¦ª°_›-Žô­Ù4 ÌG(ôµ•@sK&ݬrsB§L㎔pN 8¨Êƒëš{í3ÏZif'¥†l¹4Òƒ”äÓÈ\u;‡Z‰äeÀUîi€ò]p08¡ÝˆàÔg2)9í¥HÈà rHÛ€:R;àñ‘J{Nh œÉ÷¤!¬ì‘œ ¢™s–Ãf¥–=à)'éLX¶cŒP²‡bò)2H8>”¡H'ïJ(l`š5P“Àâž«‚G3B €ipÙêh×#­*;ÎxÇJqGq€qžÆ“g—÷ó@bû3Æ=)ŠInãµ=Áån)ª1óäç½1Þ4b.TçÖ V iÍIq™$XÀêE@è±·^ý(ôm€¹ÏcÚ¤ÊìÀÆjÉC´t§Ä`Aô ÷Êœ¨äõ§¨Ìdñ‘LÁ#½8çµ¹îzÈtä` yè@\T;;³ÏJ y ûTªã`àqÔÓ£àäÔe6’7cÚ/ß'<Ôò[?*ñëQ"2*BûW© cÙcqëR+@QzŠ9Ã}á‘ëR±ÊðÔ¥Øãšˆœý ¡¾líÈõ¤yB.?!ˆï!ùx¦¢lò <Ëòî HdÚF HÙòðz‹vÆçGSC>FGÞ56F äRb6$Œà}i͆'æçµC –äšsÍL78v¦ ÉVúsRo8<àžÔÏ:)uçQ6j_ßIèàŠÌ¹2ÈrÒþµ·I¼3g´Ï41ÜFsëM+ ±„ª¹8Î=i©µX³qžÕ4`†Í:VŒ   úâ¨Aæ&AÛŸzŠBÍœ/NM §¯ZS÷÷`üÜMV<œm9íV“å™0)·õÍ'} ’{Ó(.s×¥/™yàu©íãI÷+°EEÎêªà€ÜPPÆ[ñ© hª[ûSTŒà`bɸc:ÐÃ×èjPà)ÜÇàv¦¹Æ9†JdrJ‹`wÏ‘f ÄíÈ5/É·œóÚ2±é‘õ£>BvÅK$›[úT!›Ïôã8ØY»Ô±±^8Ç­Gä*(ÁRE+Q±š`ËR37p}ª²ðÙ¨Y?˜;éšÒŠæÙ e¯Ìé FœJi˜®r?*j«N>^ÔÙŸ$`c44¤£uéïK`_Ë'“ȨÝ]ˆQÀÔ±•„­×µY%díU˲>0½(` cÒ™ s»ž¸4†Xi¦JDû¹äZ1ôæ¬DápnŒ6Ž B}ìæ¥A~Bî÷¦"ÁPWp8àp„ œÕlȃ–ã¶iñÌ[ø‡Ö€$1äÔN¥q‚H©Û,½AÅ4ŽGP(°$àçÒ—ÀóVw(mÌ1è)†ç>8ÔE»œö¤•çJq“ÓŠ"• ÝGµ0ò\“Šb–ò‰Ýߊ’GY¼b¢P©»#ŽÇÒ’Áv•$äÔŸhe$˜éLé´+pJQä·VíŠb® •Á<ÓXŸ´Æ Ï|zUˆ g È©D’îaƒŒsÚ‹€pÀœäúT o™b9¤šaÑ 椇œ9~;Šù ªqž)±œç¦y_ œ†lŒ|͑ژ‰T+º’OÐU¿•¸#éÅT2ª.åŸåKë$…¤ÈãŒRcDò•Eùך© ¸'bàûÒÈÌyVi rF)“Ò€&. ‘Ž}j5Ù G4*änïHY™ò ñ@‹.:gŠˆ—b¹{Ò‚É‚ÌXž£S÷.à9 >Ü:XÕ@ x§Hè£(RƒœuéHc7áÈ9#±§åWæç+#¯`*<0È4À`} °ÒóHùºúš’!òí=i„Á^§µ=còØrZšAÉ*@éT?8ª×s´03œzP àË׿¨¦‡!É8ëÅE fFóY±žÕ<‘#DAÎîÕD+¨eäÇœt«r/ð©ŠÊ…Þ9 a”( hFàÄäƒI”€åH,r>”¹`œgô¬sÂqQŸ•$œñ@ *Åø&†SƒÈéÎå1Ž1Ö¢2ðÌ  ù–Æj=ÊI#¹¦œ qïJUc;HïBØ ”¸$ŒŠgž£>µ # "““ÆáRdÛš™T'ŠlÒ˜°ùù{Õv“È5+6T!èhS2aY_ƒÚ¡•÷Þ*‹Á$%Ÿ„ì)¦m¨¤É¸{ v šÁöÄ@=j6Ú䎸ôª‹v€ ÊÄ O³&4Îy9¤ÑW-*…LƒŒTg IÇ>ÕWíR€Êæ˜%™z°Qf4K¢ê3T?™ùf9¤ifxÆá{ŠdŽªF+Ï4ÒËH]Ho•Tõ¨nn<Ì8ïUç¼óžÀÕg‘xVù})¤4Eè·!Tb¡“Qy‹qŽ•žò"ž±H8Ï4ÒÉf;zß5³“œð}(#çÖ¤Œ¤p:“LDŒíóSWcUÛ³8ªæDbAn{T€Ôp)6X>"6Óó¼ÔCqS@qŒH w$.²SÛ¥ 2\¯WÐÓK°XvÍq“•6ä“QÃĈpùÎzGc#^;Ð ùÌçrŽh,Ø9Î@ïÍEu©"œÈpTýM2TPç9éMÔ}ìN1N Œ©<ÒFØÈéŠvN2Ø9ö L9ÏáLmÛrNiÓU]œ9¨ËH÷Å 2ø‚j@Ø}§­F ™#ç]…I?J`NP¹Wó¤êsÁP:ˆ9ÁÎ@÷¥2/Ý_º}h—¢(Âj²+<€¼Õ†E)÷¾”íªv€9 CF7ndö©\‡ŒgSö GÓ5Và8äPÛn)„IÁŠKl“– ´ãåùzR Ùv6íÇ‘Ò2àõ8Er§Z_!Aí@¿8èi§÷™$ {ì'H¦¬eɶýh°‚±Ç·#Þ“vTc¶jͽƒ\äùˆ¸êÍÞ°B¯ó]®àz@ʸ%I'šˆ«1Ï\²ÑfB7t¤Á@GJb+0óÜçÚQÍJ«îíJÑ«Aæ€$#Ç­J:çŸJ®cÁœSÒ6QÓ8¤ø-ó7+Q°Ú3ƒzž=ÊrÇJz¡‘OCíEÀ©+2ŽC”$±éR¼|Ÿ˜þ4$dœc$Qp"*è>îr*vÃÉŸJ˜®'Ù&•Æ9µ£moZ„ÌÓ‘…,zT–ö‘¤ûu  «U¯-¡€Ekl¡3Ç© V3’Ûˉš\F⦩4æ«3︻dŸZ[{6˜¾Éèiˆ©…Ž|¿Öœsš|é,iæ¢Qž3óuÅ;…X,¢6&YeÄ„|ª fïu“S‡™pAôªv@SwÝ=©2]¬eaÞØä½g´óO6BìY [wäúRäÀsE‡r$ŽRùô§¤dg=} 8¹‚ ©LnXr ö¤6M‚y8Ú+GÃxþÝ!9ÇZÓðû¬šÂíA§š™ü,pZç§£Å\¡=éÑž+œ±Ç$óL#æòy¦s@à¯4€ P2#ñ@蔃¥•¤!±ÒŽÁö¡‰)WîûÐy€L“J@€à rá4r1J¼ŽhèÞÔ§¥!‹´QMÉõ¢€2Û"2UrE= Ú Úš¤ Ÿ–¨\N#w4Õ9<ô§Å0”g?Z À4uÆ:ЫŒÓ˜R(Òç-Ò„!ùiÙ÷¥Îx¤a€1LS…§fšF)Á–€*^G4à">Ä=HëS[İFr}O­LXw¤cŽh¸9â€ÜóšP Í4ü¼“@ sŽ)£<札•ɤÞ3¶ uùÒ¹0‰_‚Äs];6PŠåå³sƒ»­TJC%>y¨|Σ9÷¡¦qyíb:iƒe<{Ôd…;·æ•؇>”ÇBè>\=æURNj-Ć˽=ª®Ÿ6슞(Wï·zb¤iÑ@ïBŒrûŽMHТ© œPÏ3G´(RP û§Ò®c¶ìj(¥Q#qÏ8=*µÔ¡_rîëŠv5Ë’ƒQY´ÁB³ ƒ9@‰_%±ÐdÓVI!C¶N™ªHW5Ý7Ÿ…¥ í=k2+ØÑÑ'ÈlrýkBèÜãß4š°Ó%Ï>´¿ìçJ±8È&–WÛõ©) ´àæ¡V9]ÃéLª®SN‘äŒ  â€¸ÏÍõ©J…PAâšdˆ»"œrqI†“æ_˜væ’—ã>µâqŒäÔŒ6¨ÈaH®¬HÛÎ;SB°¨B޹#­ W's`ö¤1…M½I¨##q,:P;¶üäd‘QÜF F:ÓÁÁÆÒZŠV8|ó‘LFl`$Y'9éV”㩨ÕA‹‚˜_ dp)“äF°8f“5¤bURÆsU6—ÆÕÀµpF¸ÉäûPÁ\ŠB{˜“Û#½pŒc·­ˆÊì?<àÇZLd/ ’y=è%vaZzÄ©úóP0Ž[qô„=sƒ¥5äglcò§`'vI¢`O'¡5Xl”¢ç õ¨÷n`8ëÍ1Ĉ¸n3SD ±Î}êw7Ìr(ÎÀÁÈǵ'wPpN)›ÂÇæúÕY$ ÷y¤‡]¹X.M%Ö0ªp3šˆ³8%ùô¨dlžiÅ×ËœZì ƒô¨ ‡bÝ5/ÈÀ;7ËéCy|R;ÓØ–ã*jµ— qíP©,„ð~”âK8ôøÔÇR;Ò26Ý×µH‘<ލ˜,z es‘õ ‚Æ„0ý*U;ÎXí_ZŠCÇãÐPdòÇÏ“š³!+Èè ªòŒðxúTi)cÏÝ¥<Ê9¡ïH2‘;I÷¨¥œùb6?/j•¦.˜<éTe‘Dƒ<ŠS*½ûš|fI—»ëK$Jê¦zQ`²$’3Šb4Ö4ŽçqÅ5ÇÉ‘Í;sPóQ6ò<ç¥!±ª7±ÁÏÒ¤`¨˜ã>´Ä^~n|Sò@ÈX€r[q§«3ðØŠi‡i=jbª‹¼Ï DOb:“RàÉÎ={T®FXcÐÒÈ:y4Ä i®Š;Õ€Øã¥C*g=Í»Áv©ON´ô@ÃŒäôŒî ‘rT#ØÕyþF¨5gr €ñÖ™(P˜eǽA´{˜JÛÖ«±ÉçŒt¦ç<œþ`ŇÔÓÎ~ïÞ^9JœÅ.A|†8¦"G@˜8¥YÀ})­ó€ ŸÆ¡HÈ”ŽƒÖ€.eÉÌcSC0bv䊳€ó“ëPH Ë@¬­».1V¶«(!‡J¦ê œt¨ÒWsJ²WÌH#ÜSV!Æ3éBK‘œó@ u¦„jÒ|Ù$Pʹùq‘OfÁÝÔŸJˆ°f#;i4»‡<úR•e9=ªp¤ñ×5oFU³ÇZ@1Wq‘šUÜzñÖ–E€ ,Ù§ÆÙëò°ê #¨hÌŒpçBÙ€sÎpEL6Âg>´2¨?( NÎÊQÀÁôô©¬îí¬‰ò¡Ä¤}ãÎj ƒœå»Ó@€qÖ‚ì’öéõ š%Ê÷õ¤‚'™Äq!,O"£\<ÍÜœœVƒjÑÅncµ‡c÷ÏS@¥œŒEÔ q€äš£yxÒf8d=€êj®ç•üɱ=M#¹ ÷¤!…™ù'4±FTp¿7\Ó’2‘’®OÖ¦F3¼g)Œ]„ÆâÖ+?ÅZPO ãµ1‹£cÆz Bz´4…×¥:7"œc :†vÎx«11V{Ò Fr=icfLÂË€¾Â0kKÑùzºã •5Â7šÔðþïí`ÙÈ*qQ?„qÜîÈ¡p Í7,=i@$äÖŽÝžÔmïIÉéF{PúŠiÀ¤ÉÔP1xÆA¦äžEŽ7;zRE>´dšoQ“NUs@ ÏJxéÀæ…ÁÍàвqA„÷¥9ëHc°=(¦æŠf®RgÕâœTœU9H¡ø8ë@Öƒ÷ºq@)FÞ„Là`)ËÈâFÓÁâ£a“J`ûµbEYq!ÿëQ`L¶’ Çv}ª ´€G&ªµï˜ûT g­)’Ev A唕Õ1’Ä÷¦Èû”“œã¨¨Lç~Å^;±¦O"ùxsø-1 ù›¾)?½úŠ#°ca žõ8”!h&™†ÜóíVQAn¸#Ö³’vG ’y­*m09íCÆîH¨Éõ;qÜô¦ÌáS'ŒÕi'ª¯ÍИ·*¹^›ª7UB[nµºVÕÇJ®f“’Ç9§`-:äèE"(L’K(M@ó(i7½DggB¬~”aŸåÜÂV\aúš¯ó߸ŽÝhŽBñ°$L 1œ+c¸¨Æ…SœsOÜŠ€nËS¶xÀ&˜…d†Ï$tª‡RÄž3S¸DûÌXâ£,IP«ÜÐ;ºB1éMyÊÜÄãÔ’1Î7d †]Œ»Húñ@ VŽESxHäT-¼kŽI=êpÄ\GòÓL»FJsQ¬~aÜÀàÐ'¯¥J†P@ÙÇZ1ÕcÒ–0IîjYÛÔLNðO ¸Q³H¬›°Çôù]·pô§Áoæ‚d!YFqLE½9q)N¦;fÛóv¨QùÚØÔ™ÚFàþ´†1bwHíLp á€ÁéRɹ>b@Ïj«$ ü§ïPü²Bòi› ®M ¬~qŒŸZ@O@Ho¥rÐ1ž¦š! 0@úÓÊÀ¹’0àÒŒLw¨ÂR«Ðd j9îþÍ0UNOZ´Ñ²¡eÆk‰‘Éf%³ži¡3[ûQƒPñš´§{βáñ‚+J ¨1œPÐÑ$¿*î÷¨ïŠt„+Ê@=M0„ƒ#åOj`?2\Tv4ö˜”Ø>_QU‹±“ÇcJ-¸¶if+”ˆmbM<õ:)T ~” ¶¤8÷…7BãÞžŒ p9ÅJ>däþ€`BËŒŒÔeX}ꑎӓži8ÉèzPùHUüDß1Ãgé@`pAúÔM““š`ûä1úR1PÝÎ=¨Èc’Ù4I’žæš>F9æž ‘Å1¢$ƒžqSGžŒÓ FeïR$A—kriª®âœB09È  Km<ÔŒç951pbœ„íÜ  PoÉÆ4”ÄA#’Àtô¥'fãõ¥*Å·g𦳰$ƒÜ‖ 7: Dˆž„í§*ï’*XÁRGcÚ€bBƒÐÓ$?0©„j«¹Ï9¨¦|9úÐÂúRÆãp9TJ6°mÁ³S/=3L@Ãq;421Q¾N})ê„Tdu&‡u,UTdR¦/,.ÓÏZŠ@ÌÜç8pŠ r BͱÈÝÁçštkòq޵$#çyóQ£©3žµ$ 7œdIxŒGÒµ<8?âh¾˜8¬ÈØ"…fܨ­]ÔêÊ`ÔOb£¹Ú0ÁÍã4§š\X P)çšRiM—šw¨¤ç¥(¤ãå¤ œ wAHOhà‚4.6àR¥Ž”Å ·Z\6E; 8ë@ {c¥ö¡x^zÒ2) Ú}h©p( f9a€Í<¨‘*T|ÕdÆNsJÇ"‘W9Íò(wqý)Ý=©›Nw SÛ Íœ9§Sz x4œbŒ‚ÜÓù¸§Œ´À~xÇziç4ÂpEÔÑ,RŸ(%ŽÜô­p±ª¨üEfFCE·'4ÍòE:¹r1ÇáOpZmqñ”îþözTXÜq·ƒÐÔ\Ã+lU!ºóÞ¬Å×~”žå!Dk³ÔŽ”ª3Áþ{{Ñ”û¡ÆOjC5ùÆZ”ª«`©ã­†Üv¯Nõ 9wZ©Á6rØQïQÔ>[i H»õ<j@>HÎÓ–튋s¯äSäa#æçó¦¸m£?¥6s˜”I¨¥ÊÚ§fQƒ´;S·+(ÁÆhœJ­Ã‘N‘X6TqNØA`F}¤,4Àj†f8"§Ûƒ×\’·j{³hÏœ6øTÝN<úThÁ‰šœnQ½GËÞ€¤`}hl° šSó.@¥RGÊ 0QTàÔŠ‰¥_0°>‚žÀã9äÔ~Y'ZvQÇ=M0mcµAZ Ey Ÿ¥.N:gÞ†!’&ÖTÊÁ”ÇšH6âX} <,kc,ݰh bÈ@ïNIw®{æ¤ùYöà⚥7ºªäÒv30`Ô«Á;ÆH÷§¢žíBq#—´œ£pϽ*d®N?V`@ÂÙ qŽ´Äþû+¾”»<ÉOëJ01Ú¬æ$ˆ„\繆ˆÇîù8Ïzsºàî*» ìÏ5,Éûœ—ùºm”i(ÑÏ# ¨™4„äŠnH!F3Öœs!Ë@Â&æèOT 7Ì…”ûÒ²¯7^jTE‹ 2sëLB‚…%E3i-ÀÉ4ã†SΦ L}?JILÌ ØÓnU7.ÃóÔÕmî lÚ§ƒÌëHcaƒV"æ&¡lFà)9©âÜs@wÇn*÷‡HþÚ¨5UcÆ<â®h{—Xž0jg±QÜîqÉ4c&‘Ia“J3Áé\剓œf‚H"”€Ç4@Äæ§ç'¥5¸§hœæ—­ È'4œ’sHbô4îsMÈ”œ¯¤äð)sŠAÓ=è'8ì)Ø 0ü©sži n ¼úÑE†eÇÏQO#ŠŒ:œR« U鎔ì(Ó†*¾N …ÇCM$Šp?-Í1ä‘Òœ )Aœu Ç­/QÒ“¯jU$ph3ÜS‘»q܃H÷¥bx¤gšVÐFà:Õ³¹³íMq”ÛÏ5¥‰lWœˆÖ4#9§££!ã íP*'ÞèËS† ´íïÎ(‰ÌÛëÍLÁTÍ€ðÔ@¨’ØÅ,6æGÞ®qžAæ“r¬øÛóS_ $5B°˜~}ä1íI¹Ù¹æ•ÀsìUAïQ]ŒyÕƒhwd¨ˆsUpã\ ®} H#;>ðì*å¾fÚ¥HiÜy´ UaŒ`S£ù¤äà:Hö7ÌO^¦.0‰œRô+»8¨dfóÜ‘Ó5*Â2Yœ‚icT TsHdN›°¤äŠxP°“œz˜ŽÉŒšTD(Q€>´PnsŽpi«äG­Xm—t¥}ç€5T•'‘íMa8Îïz{ÊÒ6â ‘‹‘ÏÍßÀlÒ;Nr)o Åy"†é¹€ôªÒÊTñœ ,"Yf‚#¡¨\äç¾jX% ƒz‚3ޔƬI'µDYOÌh €2 "!óU@ :T­ ¦NNG\SŽvÆ06æ¢1™z¦j|ãÖ¢’AxJªD›‹@ïOOž2@éÖŸ¸²…©Í$#lެp¤ñ@†À$àšR€žFO\Ô…v¹@7_J6vçІ@à¸ÇS `ãŽõl¦Ü¦£îlt R3³±špdg8§·Í2FAÁ DY%†1ƒØÒñÁ¦8ÚÞ¿J~Þ¬G×Á9ÈPzjH½pIǤvWÚ`T‹„ åð1Êäô¢É'œSùlñœÔaY[v ‰ƒÇŒ M 6IɤóQzŒšpɉÈÀ8éëFƒãfÞI늆5ó$ô¦…*2sŒàÔé¸UëÞ€"ÈL¤ûÔ¨£%”j—derXîj¬’•m¨3ÏZœÉ±¾î÷©>Ô eN2zUbÙqÅ3ÌÈ*qÒ€%ßÁdw5„`=r)“vUŽ F`C@J²I‚qS’T?<Ôi^Oi ”láÀʺ»Üâ' 9¨€bʼn9÷§¯23`.M,›Lœ÷¦"Ku;ö•Ãi÷qS"§»ÔVòìÄçÐzÔÓ;ÉnYòa@úèd†LÏ„çÑ* È=¨•2àôÉ"DÏ €})eA†#9õ¤Çð§ºn„í@£æD+A­ØÓvC޵‹‘W8ù¸­Ð œúÒÑ€–ò‹}M@փȎêÙŒ°,>ýFsóÞ‘DêL1î'œt§@«3 0A>õ—s¨䎼Õiµ‹…‰£†= ÿ¢Âm/uy!¹’FÞ>µ^ËRïy[µ$w—$“É&¤IÀdæªÚ úg›¸r6Õ¸,d–Ñîc9V±­¥y¸ue\}ïZ±%̰¡XÝ·_z‚‡‰ öZ`+"pj6Ÿ(ªzž†¦·FŽ6U9ÝÖ€%^=A¨d%˜áEXaˆ•vÕ¢“ÉÚh\È+äzR*NÓÒœÌû𥾔a!²ÍÇj˜eiç>”˜pÆ~½ª]¤˜Èˆ 0ûÓFᜎ•e÷„§„fNÞ”…Ã2}áAQ6åíRÈ…r=©XŒsÒš`|¤žþô˜¨ ׊QÓ”¡Ý¸®­$TlqŒSå9}©ŠáXª±>Ù¦–s&: Mþµ8=ê1÷¸;I§)(OÍœŠd€úu¤¤ï0ÇÖ3°|mzsL‰P34™>˜©%5Îï”J`4qêiÉs»=p)bR„ð{Ô‘î …r1Jáa±®Ö9=§*¶óè(IÑX–ù½é<ô’sž”…@!: ç·^§‹Ë´‘ÇjØ`;ñÍ#!L§z c°EÚI'¯Öv(N¨|ì©úS4RDyΩ·»¡Ç {Õ$EY2[ƒÚ¤Ë&00;ŸZXFb1Gš „ @#“LHó.IÀ#Ö˜àù˜WéH !—iù9À©r¥¶j@f?/|w©"î!Èô´†?Æ5,vî[9¤Sû¡‚2;TË!Ûó(B'I‡qÇZÐÑ_~­W³”¬j0wWô?¶“° ñJ{;ÈÎ(#) 9®sAØÇJq@éI»šqåi«»½)îI¤N (õ nÇ<ŽÔáî`ØÁ¥ `怌¯ÍøTñ>Ñ·<{T~Q‘†8ZR¥ËÉÀ˜'Ï…ËT’JñF¨£¸œS˜«‘’N) 2~\’sÖ‰ãÞ˜n}©ü?1Ò›µs€Ù=éÔT9ÎEí ÏÊ;qS¶^=ÜÕ^RŽïjÅw“oÊ5$;¹cžÔŘ³®¨©¾@@ñÛÖ€ÚÄ·aPÆòcsp3Ú¦04™+Æ:ý*QµIlÐÒìáy4‹2x-ÅBþ`@P4øÎB‡<Óép7t¥Üà/¯5°f8HïJ~ñϵ%úzSN1ÓïT`ìB@Ç4ðêÃ;
AŽ8§¹sŽ´À6Þ™îiáX)Ç¥)ÛœÓC(ãÒV=NiJẊxsË Š•ÎWåTNP…ÆrM#9«~ ;€ã¥46X. =ÉÅ1ˆ÷°;R’’%#Í4“¿nr1J?xÄϽ5P–"CŒ¢€'P›A'JÓÍÎ *u‹…lÔqÌÌÛAÇáL ;KAÚ§XˆqϵWI@$gŸZ%iÚ˜í‘@!Î…"8P3P3’OJtí ù]óì)"F•HûƒÖ•л€T3ÂÛ²N~• ` ´‰>¸¨åŒ23ÇJRŽ<(À94à¹,zb§8Ü1Ná¾j‰_ Œ}éæn$t¤“îc4±¢&'4À2Hû¸&fÚÇ€: bb0HÅ+EåBÆÖ-œZxi7QÓ©©ü¼Æ #!›G^´€@™>¥z†HÝ%ÁN¥LAaò1J·8«6ÿz`WgHÏJ¥T”êzÔâO@j'µeà08¡ ›j:VUÛ|§óZS“.N0@+™æmÍTIeÛ˜ÀÜ3Z Gævª†ŸlÛNãJ¾ˆ"|g?ZLøÂ‚IÙLg…4æÈ-ê3ÅS™ö9ÀëHp†6݃Q¦Æ@Pr9¨TiU[!wsV¦ku|[’F9¢úØ:ºÔ è°Æq‚i±òÙT}Þ¹¦#ÉPjUƒdžµB!v,y"«pv© U‹–ÚBøÔH‡ŸOZFw©Ý ÓÄÏ+~ôäã€j&,œsM ¸Óöm™-Æj»!-»q¬ëH뜌 WH=ÅIe¾”˜ Ø`Ô±ÈUpGåHe„G“ŠkqýÚXÐ0Ë~1œ}=(´¡±Òµ¬%€› Œ¬™7OJžÞo³BÍ>a?¥&4lÆdd*G§Q¹ºt¦A™-¢”Zypãj’†:~ðâ¤;Y°#¥5Ø9ϧj£ ACÖî<™|‚ØùIÆi¡r˜8ÍAtò‘ò9Ú;T6÷!Øn#¥_ò×ÊÆ@qÇ4‹•R¹¦»†‰éPà³c¦€!=µ9W+†n{f–)T¶“ÚžÈXü£ñÍGÚ˜äw§ 8 žMF͵9n3I¼:Ž{‘@ äÊÍ OQRŠËèzUÛhþM¹ µRH¢ŠB«ÉcÔѸ!‡Ê+!aïLAµNÓ¸t¨Ì ¿ ŽÔ#2©nB ˜° ã •w-Ç¥*NÞQŽÔÉS|ÂEÇQL–?Î)¡²åòp)Üç'ƒÐRÆ« d è<ôá€'œSv’øÀ>ÔCè¬î*ÊN¼ÄÛx  eVC’¤ý)é ¬y ÇlRÄæYÛ*t«Œ ·G\w YÛ+Ìr¥O¯­kOf"‰dRERŠt2€® ²îe žx¥`¹Z\˜ÏËŸz§Ã0®iÓ]„ùFXú ­•ŸiÝšb4!ˆÛ#ƒÍjè(ƒ]ˆ¹æ°¡,NÞq[^ ºÜ_/¦³–̸îz**S€9¦¨éCµbP|Øâ”})ªsNÏb(ÖæJzóH>õ Ž:ÒŽô0ç­5N)'¶hû½) ä“ŠvÐhÀ<ÐO=)¤ò)FK{RäŒf›œ vÑŠNô†”S¿E¹œNzÐ=*>A§rqв@Æ3NR@Í&Üöæ—€q@tÏzEàsÅ;™ÈÛŠ8¶}és‘H§b”|˜ 1ÖàfŒ¨àži=ûP¸‘MÈÅ;¨â€hÎ: š\Ð\Šy84‡9¥ SŒRÞ˜rM+ŒFqÖ¼¶è7Û'%Ç.z}kÔ$û„{W–\·—0l‘¼ÕÀL…ÆÑÆ:ÔD‘!ÝÀ=éKn~v5r8–å1Œ¿N*Û°Zã#@Fâ¹OZ‘óÏqÅX‘Ú4d|ùªá°OåJ÷‰sž½i a°ÌÙ‚œò†š€ ÜúS§h#'¦*XÃn&? p‡åÜn)ÿ6TôïEÀÎWjƒœö¡QÕ ÀÞ¤ù£;”ƒƒÅCq 2‚äóÚ‹ŽÂÜ€yíÅ<)R²ý*vä‚F{Ód ääu Cä—Aã½D%/à œÓÏïTçÒ›å&õôñ*¸bËÜzPèXR£ž•òwÁG¥0ÈŠ¡ÞB¥{Ra.ñŸ›ëMÀþ™ª)wÝ ð}hgp@a¸w EЃær½¹ª®±îÂúSdŸrcn; UL&òxµ+•a¦2ÃÆ~´2ì IœS rY”ñKVÆæ$vîß»“)»S6`-ßÉ£ª@õ!“jòq‘ɦ!Î °by©¬ê¤är{ƒMp#ŸÂ¡‘9v{Ð"u`B¶à=©ArsTžaëRÇ ™Ý‚=(>sÜqéQŒXrHïÚ…PØdS»¥<,Œ0¸q@Èþ`Œ Tf6,â3VþÌbJ;w20€éФ»×qÏzkI¸|¤îô ¡2²Œæ§ò‚¨sLEuW‘¹ŠœB€ŒäqV•awžØíHñ´‹ÁÔ®;¬¹þî:æŸæˆlg-RGòƒß›ÅD,Ýfè0zâ‹ïelw5¢cKxUs’zÑk¥Àv'ÒŸq™²Œ ñL(C!ÈÆ=*¤ .yzׂA|c ¨nUrÎ {â€(ïóª|­BFÜ+•4^JíaÁ¥vÃnUëÒ ÆNä÷¨&ˆù¡Ç u«ŠØÏ8ïP±Ã6ÕÎh Ç ch”€sRFáØe Ôq[n?)çÒ§’ÝbUÞ\u¢áb+¯(Ÿr}ꌳ:’Ctô­agkr~Gd~u—p©dUÏ=i!³óNXÕ ýãÏ?ʘ¬n})"FySÖ˜¶.ÐTÅD²3”Úi±ÜÁ“S¼[hÕã]Ùõ£È]AþŽàÿv°–@Š1Ôv­õä’Y"ùˆ8ÅE¤µ£ÈÂo¼OÕ-¤îĆFxÁ-ŽÜUµ8ÚN*¶£h¶·*bö©V` !a’8Åh ÊFqÐV]Ã*­Ö§k‚°“ìEdI?˜ù?JIŸ* m;³MŠr€ä ˆÉê>”c'Æ’Ce¨åËd-Y[’ÄU5Â.ÚVã…Æ*É'/½Ë7<÷¦Ç˜³qH à`‘N…ŒlFqõ¦2 ‡i¹Sü=)óa‰#š„mRpNMMŒô©$$¥A`ÝWZ.NzRcEÛ«Å„j€·rjDœÜE¸`cƒY1–å˜õ'­hiìƒÌØø .G'›1*Ž›»S µ €Áue ‹…ÛÅ*®ÓúqAH…`gFR=a yUÄR#8=ºˆ ' ~lô¤rˆ˜ÁëP—!øŠ¿,¨äú ¢Ñüßt¯4 z•pr>céM+ää°ÝOUÙ“‘Å8¶å/~´€FpЮÐïUÙJòA"¦*ÐôÅ1†RÒ¢»¸À!y÷¥ÌÚXŽ´à…˜äp{T© d ¼w ,A–‘Bí©ÒØ*ŸŸ*Ͳĥ‰^3€)· MÀ1©+Þ€± É)QŒàw¦1g!›–íVLrl8àg¥DŠZ^TÓB"ŒÉ ÇX,’@vÍ)¶uù×P)±¦O¸£PE7õ)òæ˜ÌJä3ž«ì!fÚÜhÛ›j/^´\ Q¡Æ÷BHô¤òÞFùrTõö­X‘[!x¾(.!GSž´ÄPCö`2£ÐTlÐà»d;zmë—m¹ã½gùe¥' úÓ¦Èb%qžæŸo¨F§k :ãœÕLó»ìéÍFö€HYËIÉnµ(!˜˜GÍÔÔ±øž?³h[~1‘Xó[áK‘Þ¨ççÈè*ÒD»¥ÚÝ»l[Þ´ãP€ù˜ÏlVv‹µ¹®=j=GQNbƒ’;šÎ×e^ÈÖY6J8$ÎnèlµS€{\E®¹4a¼Øƒjé<3{Ö½lÊXØö©œ_+§¬Ž€ÒšE9òkÄ#åã­; ¤¨÷1 pNhŽ´~4df€·4mÍ ”SwZ(?#4¾Âm&”Œ²G4…Xó“JiFw{P!‰êh©§†ÈÒ~oJ`Iži:´.ip?kã>ô˜Í<àñŽi½:u ‘KŸJi??…8iÄdS~\b…”$»€#$“ǵHï°í,SB$EBå={Õ ü;ªÒK´0CzÓ§q´ Žh,HaÇj³fÑ ŽWÿ­I/”[î›ÐÓ7¬rÎè;¹mc%Ëâ0AçÚ¶ìô«[i7 ÄPÑ Ë–V­ˆ3ÙÎ;Ô6R Ô¬a¾…£Aµ×• W<º=Îóã‘ÔŸJë¤VH¸>µR&hË3I¡1´cAáyˇ©ò*yô;{d-$ŒÌzcµhݬG>¸Äp»š¹:a0˜ÙJöÏj’5|Ñ!㱫+¶ˆ$Ô¶“7ñ>´ÅÔ¥u TAQ ;aºŠÔ¸Ž6îÃJ¬,ÉÉF¨¸ì5£ ª¯N§Óc‚ÜžiYäˆ`sP0’I9P D‹ãêj¤Íæ-›íVÖF0AàuMÔ–/· ÷¦„WÚzsD‡j ¶ éVãµk˜‹+Ø ¦ñ¤1É÷‡zRøŒqɤ\3ÒŒãŸÂš¬YÏÉÒXº%#_* fyIg|cŒ„!|íééUæ” †Rx"˜˜ÿ4îà•> Ô.í¼ç“P¹Ãer6Ðs¼$ÍU‰¸æÁL †¤‡-H?Zj†.['ôèö«äõ=i2ÙG €àõ¨/VI-vªñÓš´Ò¹Û ¨ÿ¶m¦ž©¤Á˜kg6ÂLmÜT¶“ iü±Áº(P/8>µƒ¨Û›k—Êá‘MJäµbƯwiwonv°à¯¥cI4¦@Kc”â¤0§Ç™À j¶å¸&2&ÆãŠ© ùf®Ü!BŒâ©y€¨]¸ÇSHczOJ²’&ß”ñš„(fõÅ^Kè’ÓÈ’pr)A˜œ’M=Gf•äI[*¡G¥Dr¨F„?1Ú=#W ‘QZ+Çv0)îû“q"€!vðqJÎÜškª² ãŒR\n•qޏ­ØnOµRòùs𰤄<Ð2fa´íJ®0ëP3'ñsK¤QaÈF@ç¥UÆG§gùª%a¼Ÿáô¥`†VÉüÀš, *UIN=)±¸ ~cô¢d;Ï9æÁæDJžiˆ«©j'K+æÆNñ•ô¨-G½/öÖ¥ƒµ‡‚à}ix¤#p É4ÒÙéFÒ”ƒ@^½iç5px§ ãš@;ƒA`ÖR@Á£ŒÓGÍÍ4òy§N(W *¶Iö¦2œñIÈé@ (%^µåz†MôáŽÒàþ5ꥲ†¼¿PòN£>ì–Þ\QóéÉ:ά7±Áô¤hùÀü*$‡còx«9†î¹©C¢ÄÜ7z@FT`R +“‘ƒ@Ç!P™ 2OJpr‹´àcÖœ|¼Ö™…fÆ:`4åˆ<ð*7fØG#= •c¼•_j‘Z5=Kz@U`v€Ìp*HÈò³Œ“íS>É»ZEÛ°lŽÔ€¤Á‹p3Or76{“RùK惃ÜЪKˆ—žqõ¢áb Lå${ÜóÚµm,¡ŽÁä1&q‚zU˜-WM¦eÄÓÚ²Íæo~sògœž)\«XißjRwmD9ÍGÌÐo·Š|Œ÷§^]'–é‡'°|ÀrN ÷¦&oÂß+ãñUQŽBü€ݬÓq+ÀT±ÆqÍD"!@b89¢À™ri‚DáˆÉ«é²à¡$7\Ö”¬ ¾:Y×, iÀÎ;P4V‘zäŒÕ­=GÚ8#…ïUXÛ€§[¹A‡ÆÎš0Ál)²§i;­@“2ã<î*VùŽOŽ•$LJž À¨üæl‚Ž=ªQûÆÁäT¶ö-qp±Æ2äô§{ Åí3B“Pd.æ1×ð®Ž=ÎÎ?õbGÎrÕ%½»Y4{ÇlNÔuH-T4´Ö§rì‘,p`p¡GLR`£á³íPÚ_¥Ô)ÜqLºíÁÝÈÇÞ=…+î^–O—“À+>yTáSïÏ“^HШ_5«mBf˜È¹Qžž”Òfë™"mÀ{Ó’vx‰nm u§[¸|…\SEÅce®m­íT«øéïYÆF•÷IÝy¤ò‰nO”sS•P¶I'ÖÈÕ²jP›`óFùpÃÒ$D€ ¯+·@5BrXüÜUÉІÉ8ôªr¡•ÆÜäU¢ä曘cªRBºúR‰ðÝ>”ô—`éï@”ù¾N¦­Ãù£>•,‹÷†7Z˜ÂxÝŒÑqØ®b+ƒÂ‘AŽ& Ò¯0ހɕ^à|¸QƒÞ€8I›Èt Èô©4à ž½*†ºÛõFç Tú{fr1Z[BSÔÕh°p½©­þÐü©#o—–É>ô­*¯ZD±ƒ6N1R´ )¹èÀTÀç­"ò“­UžÇ#UÉ #¨ÅW”qÖšIâþj3ti—Ôjiä“@ˆv>1·u7/^*Ø.GÂëÉ ‡œŽ”ðüz ŒŽ1LÚ¨Üs@ÄnÛR·ø¸¨ä\á—­.p6±Å A8Öµü%¸xŽ×$}êÆn:Ö¿„KZ pœÔÏác‡ÄuQò¥!å õ£©®2úŠ:dÒr—i¤äÓ«Ó¯£¡ÕÍ+q@ÄŽÔ bŒö¤^¸"€#“M# ÖŒœý)ÜwAL'¥8“šBx¤›µ8qH h8 bÑIÅ‚Æv8â€yëNR¸¥Â’qVH™R•x¡°)q@ œT›i«Í8œP ni3šQØPÞ‚˜ ³ž‚œI§4Üàõ iÄ€´Â}hÏJrã¦i\)¼ƒÆ('#“@œ‘OšjNGjJvCRÇ(òiøË`P!„|§^k¨ÂÍ>Tœ×¥’EyŽ¥6uY‚îHséW!0 ~”ªÛŽÒÇ|Rù!Âã\ÊVR¥XmïV2ÁÚªw8Éè*%F.r8¨€wrÛpzyóä—gÊv6O¥$jW¨$zÔ$ŠNÞÍF¯"p_¯8  Rck9&£S bʃTj;˜äTÊ@'/Ö€Ò##n 1÷¨ÈLm8ÉéI¸œü€‘ëM-æ mÇj@X·Œ—ã®OÛCu«Ù' ªÐ*Tò£¿5…®ÏåßùHNíBWvìŽÃQÔâžgÃï`m¬B®Fp}ÍgiòFã÷&µŽŸÖ›V Ð̰ “ÒÆ7îïïRƒ 6>bMw?\~´ƒb)$v˜ÁœÕRK>á1Þ¯°Œ©æ¡xId zP)WrOAYÓÈ«¨7NkgÉ‚Aô&²/cÛ&:ŒçŠh{°<ôJH Y¸ïJ tRÄ?|Ƙ3rgÊü¸àúT2¬ÀçØÓb/ Û9« ÙF ÜT=À‡fÃ’0*Ho¿³îÆì€søT-s®y?¥gêÌëkŒaOÒ¾äÜíŒt™Âv }GJÄÕ®VîáŒRy‘uZâÔzk¥€ k·ëMÅ-„¤Þãÿµn´ˆ‘â?)= i\kSßY(`¸qœŽ¢²5‚ŸaQß##Ò¡k¯³ÚFy#Š,ì;ظ„då€ÅJ ànlƒYvw $Œ’ Äô5«…Q‘JMX¸¬…FCmïÍM£$(cu §ø»Õy›äŽãÔsLF$ È09É¡. U›p<Õ*B¬à»Øvª@øãžEOÞ\„ !»æ†ÇbóE±K(ãò Á•Ru¨Ú}ã$ýiÐOƒùÅK»ƒ£RÄ‚=MLñ«[°8Ȧ+…\’1œÔÜ©ÜW­*2b9Ͻ*«!Q€¸ëŠyiUÆHÁíR; nèÆ€#ó‹9 XR عô¨„0 䚃Pu‚Šÿ3{ˆ’âô[¶"Ã.9¨Æ¢ÎÀWœàvæ¦*djìEËI#pÇ<ÔYenßZz¸ 7tÊ„°VëBrBŒsC<S¢MøÈæ–@©÷¹4ÀÛj®[9ª·®à­^“˜óÂýjœ¬;œãÖš§ÎHĬ:f¬]Þ¬1íO¼}+,ÄÒÉH1·)Œ¶MW »X[;·ŽbÒ9*kV;ˆ®IU~A¬SRHi¶—ÞíÎìhjzǸ·è9`{ÖE $A­]_Y2D`…²§ŠÆƒ—ÆqšjöÔÔµoZ°JsÖ„=ÈÑ:ñV c8ô¦Ø©ÂÔÑ¡ ÃæŠL¹wLŽH¥ÆOÖ»8l€0Es·O„YUвœpkb „–ñÈOÌG<Öo¹ªìH9s¼sÓéNcŸéP—/’¹¥_‚Ø„ ÍID±Û¬¨§=óR,[·œTñ´qÆYˆU ®þèù(C&û|+É$‘PÉ©;dvíP#¡p7ü½(¦½¶§•FÏ=ÍMy$fݤGç×>Gñr ­yzÑFèr>^ôÒÔMœíó‰/e`Iù»Õë |Œç½e/!bFsšØ°\Âx­EË)(S€)“Íž„RŸ—Úª>ɤ¦MàwäUøä ¡²¬¯(mÏj™@Ï8¨Ê™ÍVcŽÕ¸,¸ ÷4ÝáíïLCY¸¾i\áG<ÓŒri«ógu0¯?JkOÒJõS6ŒòNiÇ9w¦•¤úÒtuôVdbÄf€+–Èà~Tf\ž>´È~èÅ1äßÛ¥o›ƒø×Cá?ù­IlÕÏEfâºOÄÃÄ–›¹ùªgð²£¹íhL÷¥÷¡G¸5ÈPüRJEÎ}©àŠj€3š2Iö£žsÞqÞ€sM2@Á§õ¥g‘Hcp[§ãJ~P1K÷OéTdòi€™t ”¸ÆhQ»­ Oj2IéŠV0¥ï@ÄÅî=h¢Ã2¼ÜðEHÅG·ÐS†qŒS$r8æœrËQô# o–˜„ÛÇZ^äÒ㎴Üò3@‡ìÁÍûS‰ÊÓvŽÄÓTni¤Ý(dûÓÇû£Ö—8Š š\3@Ç `R$Š^ bŸŒÐRŽ”§ånô‡!:P£vj“ÅB¹íç4WWšj;#ÔîC`‚çŠô¬ƒ‘^_®”MR`xmÄæª%"1‘€lõ©s¯^;ñT`½ØÇ8#ÖŸöÅ ÎJ“œUŒ»åùqn$äÓÊò¬ùu9|ÂgËíÅ0j(ÝuãŠËÅQT©œž”¾Qf8'ŠÌ}IU˘H'ÔSáÔ!*ÈÊ)ˆÐ)²<çæÏJ‹çsŒŠ®5(÷*:)tŽw‰psÅ!–Ô·ÖŸ°&@`=MVŠp“ó5A=Ò°ÂÈÐß“'÷œuæ¹MFo>ùÝN@8È«7ú‘ò|¨zž ¬È˜.rOÖ®*Æm–¬®$†uiUnq["ë+‚™'§5Ï@ÝsR,Î(äcÔÓjàŽ–)À\l#Öžnbã,AþuÊÉu1|—9úÓîlrÇÚ— s™V,¤8ÛŒãÖšž[‡,ØÁé\½¹EûíœzÑöÛ†LyïÍÌuî )PF1šÀ½€Fsš‚×Zž†ÁíÍO4%ºIÇÍÍ.[\‹i ïIÿH±Í&wŒ¦Eî@'µ4<(\äcŠÎÕækh7!*ñWaÚmÐu¬½wq‚5Ïɺ¦;“-Œ?1ËoÜIëÖµ¯˜¶•;‰³C©~ŒºL[ñÆ+W¹š2òÀ~Ð<Æ`ß7lö¬€‚ œqI%Üï”Í•5pNÅ©î¤c†l榼m±Á†åæ³£RFIÉ÷«Hˆ±ä­CI`ó±éÖµƒ*¡‰V5‹¤Ã™¤ÊœV·Ï2FzÎ[”‹ ,1ŒzÔjØfÎ{U&Ô#,UŽqéÞ—íÊA(‡"•Šó,³íñØÔ±J®£qÚG8ª¢ëÎÁe Ôù‚ª3ŠÐKX׊š4e8=øíP[>æ|zç¥ZóÒRÂÒ ŽV†Á¦G8ëÁ¦!°ÄqŠ`lòŸJ?7JƒLD£äóO ïLgž*tåëS&–ãI²=…—9ééAlqRÉlca±°äšƒ$¶üEJ’–ÃqhŒƒ¼’)Þ^XœSÈùÆzT›z…íT"1c$àPÜH ¿X`]vc¥T•vBÕ‰‘p9Ç5 ~Æ¢^O4á÷jÉv–ÿ ‘_¨==j †¢Þ@êsL .a—i$÷5mcy+Ð÷¬ÈFü/&¶R ’ùd‰â¢Zr½üBÝ÷‹TöØ6èC€qëUnínöy“ž3R[iuoæÇ(Î>é©{·5m²eNr‡­k*±É*GsXZm­Ô*áߎí^¶ºÝû‰83Þ¤¢YäÞ)úšAÛŽqRÏk*øÇj‘páW˜ÊRÜ¥±qÈgÜ;¯‚`?mŒ÷¨›ÁW;fÖ¬,Ò‘Ã9Ç^iÍ<Š2%dÇAš|Ì,»òø7PS÷Я±ªËá D’Dyë[j˜ãt®ÃëR%ÌêÅVáñØfŸ;%Åv9÷𶦭þ àSf·’tÔ©÷®ûFñ\–™±ŽrkSs!NḒhRr*Ñ[ö´ç¥Ii—‹©$úS@ r8>•{H.—èÈÁHšw‹éZ£Gˆ•Š‚i—š.¦ÐãÈ•±Î1]®©p†ç’3Š™õ«ÂG–ê}£‰ÅRiZ‹«g.}vš–}+V0”’8 ]jkw€áÊd÷£mRêi6™\b«Ú1rDã>ÃzÉÿrœwÚj5Ò¯Nqi/ýòk²k¹UqæÙëšzÞKÕ\ôãš~Ñ‹’' 4I@Í”¸?ìšµ.‹©2FÂÒO”c¥tO{rdÊÜûÐ÷³‡ÿ^㎹¥ÎÕV.¢÷^cÀ胑ŒÖ¡ðõÏ-#9ÜxQV|érgl“ëA¸ºþ±›i964±èðª™-$aÆH<Õ”ÓôÅVÞCÇ<ô¬óqt®Å§ažÄÓཹŒ$'=x¥r®Mö ]« ÃßÒ«%‰11WfFz²u@hË.\zUUºh ÛÄõÍa¡4Ìʱ•ù·sŠ’%hX:˜rjHm–y &sÒœ»mæxÔoÇsUs;ƒÇ<{±ÈëQÌ­÷AëÅBdf›åÚ‡Ó5n)-Ä{^UßëšMu ô0®ZuùsN xô«Z”1—GŠU$ðpj¨UTÁе±-ƒ–\ÓÕaó­ ŠÊyîMFÑüßÔS:H °rIö¦Iƒ’¼CM l¯?Z••wá×Ö€±F#ù½j«²—bF«3¾×Âghõ¤‹Jžò:2…œš¡4ö#²`•8æ¯ £Iϵf"42•Þ8=ºT1 69ëÅ&€¿23Î3ULB>q“ž9©a¹w (8w Ü@[G5ÜzõZyÕæÁý;Ô¥·(QÆ¡0n|±ìge¹l‚\qµH…D–ûßqQZebò×ä,ÞõN^nHµZdØ é¾fUè)íàu«N>eöÍ@ÛG'©«‡ýÕÉÔ ç4É>æ+˵•5; :—5êR©åzªíKq÷ÍTF™=ÄevA¡X:ýjµÄj’n`sÚ˜Xî sŠ» »4¶®2N>†£U äæ©ù¬\¾õs“rÃØR°\sF[œÒ ÙÏ Ô?iÆ8*®:6iX.X‘£Ï+Ï­CË(Pe„¨\üÔü¯”rFIíHwBçæÎ}©á·r‡ŽÂ£Œ)brOj{Ÿ) Ò‹ÀÆèçyëNÊçx§+¦0~cïPÈàŸ” ÎÖÚ) e¾ñ v4F€¾üæœÑùŒH CؽH$Ó›Ügµ1‰ŽÝ0«¿$í¦¤ŒbšøBÙõ§$!nI3B’p®»~´€kfd(ß.îõz©{S}kQ‚–)ÄŽ¢²oÓbF `n§« ‹¡Ï­KjÈ·)žüUÙ†1Ö–ÌéØ » ³zÝ£X0ô©p‡ig9ïŽõQL`Û»œæ¥PÌã#²`‡‚yÓ4 €ø8 Ô.Acß×éC`¯ ÜPå#$àñS*•<äŽÕð„ç穃 ’24~ aòã½7¨dqózÒ—ŸŒÒËrФƒëëEÄ O €?:q9cÉPÉt‚ŽNsŠ–7Y8*ÐÑqØFOÝnO½".@€ÍG7™œÁçŠ@ä ƒŠ¡2vgÜŽæª2“2å¸5aÜ‘’ÄzÔ[€9=i +Á8´‘„‹¹=j9oDÓï@V¥Õ!'LY¸À|+6PN=j•õ&N̳#—w5PI‘1 Œçô§esµNGzdÊ“ŽG¥Z?½­5ÈGÐÑ‚ cÈ DÑ•ópNj9ˆ)收㕪¼¤n;i¤2dƒŸåVSæ¤úÕT)œŠ˜¸U›9¤Æˆg9ÏéRYjfÆ3•æëšl¬€eI橸ùºduâ˜1$ùåvUÚ á})U”¸Á÷£§­Gµù‡zb%¶åwt« ¬Ã³UA‚qœU¸”×ëI•x‚§s)#½&Ê2®F¥A aU´5F°B È'8«w-zv4žã[ÿˆyñ `cµ[±R¶ äp*®¼{ qÞµ4Æ ¦&ò =©Ëá¹ )•Á$ŒÑ³žƒ¥YqrOqÆ*“Ϋ&œš‘üÖÒäcnH©Ëå—{P M/b¾”²*C†^†ªácQu3D1Íj}¡|ù”tö¬]Fm×àã¥HìÍ:2“Èè;Õ5 ‘nK‚LD—'+;ZŠXg_4 Åsô­}:Yw•Îrk/_–Iu7Y8QËcwô«Ö ž†¨²ì8=jÅ¡ýø­ sMãiÀ©@-Œ@ëMsˆ¸¦¬œqRXI±9æ¡X•*1R–PüÔSªhY\ži„ÇJb³lÁàúÒã$Í1 Œð9¥ÉUæ‘[k8䟛¥ Û¸Àæ¥XA^•ʧ Ô¨pXóHä cÔRBwgšk†'Í46ÕÆqL ÊSÒ‡ùX g5Y'tã¦=Ë–Î3ŠArIQ•¾nõ±á‡#]´ä¬!$’}óŸJØð¿üŒ–ž›éKác‹Ô÷TlŠw-Ö™ñ‘OÝï\…x œt§)ÏZŒãŠ4 ’I¥špÅ!Í4ìñMÔ…wÓ†`cݹâÅ.j@4¯j)8Ó~\怟j)3E3–ž½*0Ôõn*‰ƒÚާ­7wËïJ­óRmâ™Æœr8 °#©ëL`ØëÅIŒœ8'ÔP!ÝàäzЃ=©ß(w¤ €hÇíMÎN)y#€§¨¦m ç4ñÎA¦sJ¬wЀ¼RÒ¸ç4Œ1@  úÓñƒLEùzÒ’(¯Êšò½bRº­ÊíÆó^¤í“^[­©]fä1o5Q2¤Ý çëQþ~*iPv‚qޢݜqV‘«÷Û¯joðÛÞ›æàm?Z|… Dr ƒÁ¨v~óœzÓ÷!ëÚšîŽp=hÊî'¨§ˆÈ#½5vç ÓÖ¤ò’O†&⥹ô ‚OjnÅlíÉ©|§vE7t¥‰lm¨X2óÍY‘òyÆ* W'9 @¯ Qž‡š“Íp>VúÔb<÷#„Ä1☠÷.˜Î9©Rí@ä–ÍVaÏSL Ïj,-‹ÆäTCŒõ§¼Ñ¨ X±÷¬æV0A4¢@À3ñJÃLÔâhËî qYZ®R8ÈmÙ}ª¥ó3D€tZ"µ*úgæ8§[gí*HÈ5Ìè¼jH’GuÀÚZ±6t)À»E=Ã* ßJ¦.YGÊä€0jC„¼g©¬¬`Êà’E@ÎAȪrÎK¤ŠqÉÁéÇ4ÚÉŸ#hQULŽd*þ)óJYry°¤Yƒr©zÔÙF:<¾Ê×#4ûˆÄh9öW+HçÒˆ„™ÝÎ=)44#;“Ï­8’¬<Ž´ùvÌÁãB¸ÔFÝÁ\ûšE^åä‘ í9ÏÖ…˜žõZ0Êß¼5{c<Óü³+£i÷§,l¼’(èFÊôëHrX±<š°Ñ¨|äÓ$%G c· äXX*xXöŠŒàŽù5fß1ž¢‡°–娙‚ `ÓÄà†0×i‘…n9ȧ…bù ëY²É4ª úöª’ÀŘ c<{Õ ÅräUkÏ2(üÄçÚ„ ¯c+nNÜÍ2,49ð)%¸–u?) ÜÔ0K2‚¹ÇJÒÄܹÞ£+Å+ÇÊSȦE òŶVíá‘Çïy9àŠLh³mFÊX4¤´dzT¡vÄÁnÕ`~òïQqØ­å+¶Ò:TŠvн»9l UKÉy ¢©n#6LƒÈ Ô,7÷ô«˜f8s“Ú¢–68úÕ\EláxÍ¥›•È«‰ló.qž´²Úµ»|ÜûŠ.*[s3) ½´çÕXmÃe7U´*ù •Çj™\³íŽ#Yá~3Vnçi;ª¨âCŽ3J*ÃlxrI^@©QFsQ†à ³ç¡æ¬‘0Bîþuj5;s·4Ö‹€½ª@)9ÇZ!’dÇÉô¨ ¸Jš=^£8=ÍYšsr~aš· ©ìqY€ã~j¹»Fp'4¤†XWhÜ“URtÇÝíŠ-fÙæ}M?Tq&”ç#§¬Öå=‡xn]ºl‹ŽwUéÀ °a¸Ž•¡±0>=sZNäÆsT÷±‡­1ó!^ø­[wUÓ¡iæ±µïõñžAÆkFÎtþψ8ʛ٠nM#HÏÒ©K’Û‰ü)æ`Œ“éQÆq}i㙾Î1Ôz§%Ô¬ÛWzK3‡o—¯lÔñÄÛ” ŸJŒ=’˵úæº[M$Èè]€b*ƒÃå_à[ƒÈ®¾ÍTÈ0£;J©$Id¶ÖÒ9ùIé^u©LÓ]»3dçŠôÍNaŒýŽÚòéö¼¬3È4àLÀqï¯ëL‡+8#µ1 Y2¼zÑ–$ÌR§G̿֩±$Þ¤®]H”ånq×çb¶Hªñä¹çŠ'gRA­Dçs0‚ 9éJ£,iˆqç½&FÑÅ9AÃgŠPÎE Œ ŒÒü¤àdR²(9£V‹ŽÂ°P@íH\ 3Ióg˜Å”g­““ž1LdÏAAÁé@aÕ¸ 7#Ï'&”¨§ }h 3Þ˜‡"€3šÛðºâ6ÛÆþµÐ ØðѯZ ÎL•2بî{’ãŠSÓ4Åhæœ šä(^¢›š^ ë@ íFâ4‹ƒNÖ'ž”åôÅ!ëšPx B±Å õ¤<œÓ˜Ž(ÞA¥è)OJhäP‘‘Í&ÓÚœN(R™4S¶ÑEÅc!W¦å÷¦îâœóLqŒ÷£<äЂi6œsLCבJKf˜ Ï!ƒLCsŸ­4ÔSÆ ï@ =y§ž€SÇLPEɧ€vàFOJ\怃·ÞŒay£ñG9 ¨È<Ò·­ƒHFN)õå94Ñ×â€)¿v˜èÃÞ¼¯^!õ{‘Ðï5êo)Ý€¦¼«\~±sÎ sW2ÕŽ9o­FÜŽzа"06;š‚Uá°Oja°žc"|Äbë/Ž;T ­Ž~ni +“’¾ÔùBãžÇ¥* <¿^Õ˜Kg&äW9©hi“ <³†"£ó²äö¤%w ëSE›Üj¸Éfhí€N]Qkë•““ŒV„‘8ëJÌ”fsÏOZ¸‰¢ßöœÎè§'¢¡H ŽG\ÖÈpyÎ+hHW7n”0Hx±#ò¤dGÈÃnõ¦%÷óа@¸úÔ½ŠÂ,t¤ ÆÅºžÂžì ï‘Lwb§åÏáBbjÅp¡X³. §ÉL¡9ô¡bga–?J”çnGzˆ€ù€ÛÇ­)Uäh;¹'Ú˜U›Õ@œŽèˆ„aÎsJäÄš‘c>ZŸ7­ Êp8Í&±äÔm÷‰f ö£Ì!9Ï®hÎ ¶Jž;Ò«d­Ç¡¨¼æ –lûs²°]¨GE;œ6ÑŽç½72&H#Ò.Þ¬ÔÀáØ©éõ¢À[E Uˆ«F8Ö2É&sÔUX¾UÁ ­NŒ¬EKW$Š4nã=i$¶g€õ¥Qˆ 9ãŠi—cmÚxëR⊻ÐíÛ»“҄¶Üã&¥i°B§µ1Ø #Ö˜·'R»H?…3ygx8ïM3 ,=¨£(+;Ò°ÜÞ.ÜíaŒZÁI6+©8ÚÕµs&Ø”ŽB¶r+íûl¡ÊNEi‰ø¹“qÎ(”eÎóR™¸ªŒzÓŒ‘ì852,T#­Zy0>•]Ë 1Ø¿ jÞEˆä¶I­[™{$ÚNàyõ¬HÎìg°«å°€³sÒ–ÌwЉ÷®ÝœTÂçäˆâW  zuÄXˆüÃ=)ó6w Á³è*e$Ÿ©ªÍ…Úàô©äl¨Püú¡³g5ZE-'SŽõ$m‡ ܃éOr7ü«Ç¥"( ŽEI G§Ô®@r7*lZW¼æœ#Rpß7n)ª׊tiûÂØÇz#¸†4¶‘U05¦Â±ažkbO-³Éé­fØ·bzU-„÷.ðÜtÍBYý³Nc€ØàSí‰i {† ŸZŒ±ciéRY$cÎG• ÷8Û•AùšF¨EZ®ð)‘™‰ÇjžF'9Ðb»ÂŒr:æšNHÓ9 ƒQKÙœœõÅZ‘ s´à ,]sŽœS²†8ª—S†Æ¤ai×Ô㊪cP9úЄTS‹³ƒÍ[·'ôªà/žÕÕƒŽâ©‰ä]Í×Ö¡ÁïÛ½L© 9b Žif`3…À¡Êë×­\ˆ0\š­géV•I!@ zÒ@žn⟸í'¨Ëmm¹ã½?ash. ö¦žr¸Ô™;ˆ^”Ö9{¾i€‚5B \ÿZ•—%OEE’Pžµ<,9-øR{‹ð>Tn}jMETiÒ`vªàɰm^(¹öA'‘Ò¡-Fö#Ñ_ï!| f´wÿ.YsXz^7¾r0+afXÓžW֢֜[zã–š2Ü€1RDÙ—Ž1UõWI¤L ~5$[„ ÀªèIA Ú£’C3mç’+mÈàSr ¨VÉ>”†…T À Üç­nYÛ¶C:a½j¶™¥àùÒäžµ¿EQ…Í&ËJÇ7p¡µ2ÛxéÍt¶Èˉx®:×;"¥û±S×¥-Þ§"À‰æcŽªjèQvf½Ü±Ïo+LÀ@¼VöÂ\Y¬ó–v ð kÊò\ýì……íREù@°ÇQI;ÔÅ›I†à½¶«´[\…æzbºWÛ¹+ëùÕMFÞãRJUU6ì žµIŠÝŒÆºO4+xí@¸¸ Ò¥ÿ„vô>)Ç=jմйWR޽½ièÉwE¼£Œ ÓÄqìÎáŸjÆ É›æ9?xÑ`æ6Æ1ŒŠM¾õæIýãšzÜOŒo¢ÁÌl¹Á¨ÉÁÀ¬¶º”`“Ò”^HFSNÁÌi›¸§| téYivËŽ)Zõ‰àb•ƒ˜Ð`ç½#lÇš .›©¥7Gp%Z,Åì€>`ri¸èœÔÚ.6枺‚¤5tKžGO¥lø]óâ;0ûýkµ˜‚{V·…î ž"´ÛÀßS/…”·=Õ21Å8|ݪ5ÉQŠ”f¹JTž1J£âM5GZ\Kž)zÒó` QÒž cÜœcå8Ð0 Rl'œñHÄ“Å/;q@„, b”¼æ˜ëšQÈ4 Frz ze¹4˜ãŠ\ãŠ@.~”Sxö¢™œcŽ I'šŒ° S”úS6F¤u5x4þ4ÄBô¥ëÒ‘M(À9 ƒš3Å.i@ÉÍ7 Ö”çÚ—#½4äи¦sÅã©¡€Ç€ I·'¥ò¸ô¤ÞJÓJŒu¨ÇÞÅ?œu"£ÁÝÖ’)§æ4¹ùi L¸N:ò­l”Õ.HÃeÍz›d)ÏLW”js,šµÚ·⪠Pù;±“U.ÁFp5~V Û‘Y—§2méWq1ÊNI8§9 À䵿iù% »WƒI°C’ËòŒSÄ.¤åI>Õ7bÉÕ?ö¬LÝ Œu¢Ìi¢•ÂçÚ‹iÌoƒœõ ¸bqÏz³®cÞ[ê’ìšWÜ”ãšË—&rkE¶€â¨;eˆš)ì£Lã¯OZÝUE…Y#µaD=pka_tkµ¿:$°’dØö¤m»N*"è¬02EI;¢]ǯ!¸Öl ÄžÕ—tŒ6Õ¹´{è­üç…Šõ¬Ðíæ“Ó¶ 4;­Ë 6äþ•"L„•ÜFj¨æ-œûS `xõ¢Â/t-µ2=j ±îË’1Iö¡³hÈÇëS¢¢Î?CZ‘?ï!x Ã*Iþ•(ÚÞ ÐCdl/zAk•Èã%ri’LcT’Î ÏzªàòÓLVÐŒtíBÈvŽqíRªÇµrNqϵG(Xþldf’•ô†—$ÎH¥8å‡ÂÅ€ì)ROl•d–"ÚU~öjÏü³8=*œn§Ò¬+¶~qǨïRÃrUfd\g"§$”;˜fª5Â,L§å=LÌv€ÄÒ.á·h÷¦ÊYb9 ÔO0VÆpÞ†–Y’H¶ózŠ–4> Q”/Ò¦àåPqYñ~í‡ÍWã‘A’M …Š“ÆdÈéÏjÄÔ"h/¹xšèöƒ!9â³í5lØcµO­4ÂÅäPI9úTª»¹Æ)Öð–8<¯LÕŸ#f0Üæ†424!}!PHFEXaœà:SàTTß´Ó“Sr¬BbcœPŒc%[$ãµNñî|€}i…B’¯­ #äpW¨[KùryíŠÑØvæ9튠±Ÿ·` ´Ð·/ü3íRBÄ`û de·0‚O$lT‘×) lͱ1·¯9ªðag<œçÖ¬J®üÊ1ô¨dM»HéŠh Õ&ti7PyŸ1Ü6ŸZ± ûC (8R1TrÌÄãq÷ C÷©sÀ穤‘·}ÜäzSvl žÔH2£ÄVšc»j"K/zBÅœ–<ÓNñ‚H"ªÂ3±¶àz¾I `š sçã¯5|‚SŽ*Ù(oÜ_›''µD̆*Ò©'­!1—'n~é\d(ÑWiϨ§óÈΨ›†Ú1ǧ-€K‘ÜRD rOCÍLX+|Œ>•$qÔÓ@R #'ÚÇù‡LSIÄ„c RÆ .HÊZnÐÄ“ž( »ÅKp¿.*0¤°è@©aòÍÆ:Rr'ùFãšuÀ2ZKƒÉxÆì‚¾”;f) ¿n”–ã(i-¶FVbµn#c* =øªNÂÎqÒ®†åºU=Ķ2¯bÚ¨Ýy ºÄŠÙã½G¨\,„"sè*î¡Í}iXªv›zWeTi'ÀŒäÒ¶l´‘n§œÖ®“ª…UÕÍë€ *[4Já@ªúÒM"ÅŸzI.5+Üõ“©]ù’î<Æè¢’Î{Y¼)"«†Ïz–Þ2ñ«Ë’H•t »f~¦·í€û$g ð*å±ßQûvǃÐÓHePuÏáL24‚03S¶vàTŒ{"ù8a“V Ñ$6À™rŒ2ÒªFu Ó=k«Œ cv.*ç:ÊñBçxcë’Ij/$që]uä0ìÃæÇ‹ªÈMÀû¤úSŒµއèÌ»Àã½EÛ¿ko€‘É<ãÖ‰tÛwVu_û¾µ|ärþ (àV¤v‹»c/ÍÛ5;i€tÚO §Î…ÈÌ2 qOŒØ’›³["Ò%)Ðv”AµvŠ9ÃËØÌÙÛøQäÈ+ŠØkpAçµM!äÚý½¨çA&3ƒLhœõÔýš à«f¥M6 Ãå#Ú§ÚÈŽ@£/  !ô®½ìmÙ÷…ÿ´)'Ó" 1EÀë¶hƒÙœ‰Œá&·¼þk.¿|VÂØÛ˜¶¢‚1éSxN‚~Ö@Hmý*eQr±ÆžÄ¼SóŠb¶qÅ<·€Ä¹§ t¤ÍOò0)<šRß>1ši$jãëHNGJ†4¹ÉÅ(ûœi>b(íŠQ=h ÍÍ9‰Å5ryc1¥9Í :óHäQFßqE!™Ê294åÎïj@Iè1Kµƒ ¡œÓ±Å0)Ý1ÇÄ8Œò)9ë@?6/^†€ÜxâœiÈÅ)#ï@†ôlR’ç4b˜Tž(ÜE&N)šVŽ(»¶‚ݪEÃ.áÒš©ò{ЈBâ€N)1žÔNsJI AL+Ž” ñÒ‘Ž;Ò®8=h7bôÅxž½såë×~XË ¯kpw7¡¯ñ *5ÛÜ0ÕÀL§otí iKÇhãŸZ¨ÙFÜ9š$rä9nM]‰,ïQÃÖªO2’vM$ŒÅB†È¨XÎÞ´ÒÅÜ`ž)@ Ö•9_zzrH' ·Ê*çŸj¸—"C´ ÚªÈ7 ³ŠšÞ³ÌÅ-ôÀ¤¸õªœ£‘×5w‘7'­V¸IÓô"ú(b®HÖÔ(«ã'Ž¿}Iäf¶M;ÅFS»6l e“ƒµäšÐFTr %ëŽõV9Š  N}jͲ»H[n qPÊDóêפI¦=j¤Ap¥®•’SÎPV˜³Ên=E=- c={W ɶ”nÄÊ£®8¨VeÁ nþÕ½q–Ò–EÚ}V‹T²»&+›p¥¸ó¨§Ì.SXÙîjän¨†'ŽÕ-ÿ†Z µµÊȾ™ÁCìWàFVö OF+4M+œTƒÖ˜²`’ÊET‘®`be‰ø•$w"XÁQƒß4¬&û–ð­ÑIÍUxà÷«X©`0¾OiX«˜Ê’AzÔF%u*äMYa•+÷séQˆÙ2ŠÙÍ+XwѲ/PÀ j¶y#¥Taý)¨¥ÎÑÐU&Èk°èÐðF=jÍÄlmà:¨ÎÝ™éïT÷7%x=±H¥˜áÁ#ÐPØ$1Õß¹µ<.ð¸Ãqîi3•ÚÕ=ºâLÔ¶;t˜M6÷ÍN#þéÇÖ’DèަŸ›Æ7¬1ãþ!ÛÒ›œSœòyØ)¶à¼Þ´-=QkîõçéYÛocòž†µ¹hØ€A=+;Qˆý†@ËÈç5qÜOcó#“PÃõ©$`@æ´±ŸBÊÜóRœÕ@ä-X·o3 Œ“éRÐ'Ð’$ ’EHFáÐqIå²JW¨hçŒb ¡!MóˆÈ俥 ‘3d «¹âmá¾cP:œ—|’}êìK7Ò r|ÂFÃÓš%´Ø¡ã;‡µdÅ!UÚCZv׊cÜZ›1ß¹æ#ǵ0•ÔÀ«2<|ñŸz¤nÖ7ÁÏ(H.kÂÅ$ÃŒ ÔVŒç:W1 Ì’È]ˆt¡mv»ÌàÓÔ Qµ•¤á@õ¨•’C·iëÛ½S“RF€¢tõ¢Ês4ªí É÷§`5~@¿0#ØÔ,$Çb*éG@ZE%F¦*FW_àcõ5 Ì— Ì0Ê*g÷dàŠ@Œ° Ö˜„³HÇ5+•åˆÀô‘åe/ÁÀéNbª»SHD{w‘´=ûSdêã<ÓÖfž8< ŠG°Oz¬ë·…TCpÈÁ\÷©$vR̼(€3 2ñÞ¨70h$šlò6ŸÆH‡j‘éL*Í–Ç=鈭å²7¨§”ÈoJV”…ÁëÒ£ÜFJ­RMI7@ŸZÕÀT¬˜ JAÁÝZåã9ÃÞ›s‚@ɨd`ÉÁ«aÜFpëQHƒ“œRßl„7ÍÇQVÜ€¨ë×5Í«ž†¦ŽR±¨Î lÄîÀÈô¡UÚE y5?ʧSɦ6ÈNG1R1$'pSŒJvÓŒÁ¤R f$`ž†œFâ[Ž£€Ž0U˜7CÞ­øÁî*~`ÉŒÕ7™¼g€qÚ“) P*Ô‹ˆ›åã·z­i#FsëRÉ.ÝÙ8$t ʰeId欙‹†E=óY‘Èa¹'ß5nAå¡pyoz¶ˆCwÁ ày™®ŸL¿µ’.Cv®yKÈ ôb3 @U¶ã¸¡¢“=NIÏ>¢¡{¦wÚ‹•îqÒ¹ëMJkdq#§Z¿¨D–‰-«m¶y©±W¨jÜŸxô¬ˆƒÜ\nìÔq—¸&i²Ç°©ÑÕ@ÁÆh™•¨í´qн›mÑŽqŠÍ¼m÷¬Hã¥^\‹xÀè}jžÄ¢ìYÞ§š‘X3¶ãŠpe+ÈÉ¡dÀÈ89ïRQa$@A<×R¤… Ðb¹r~Ù óß…u¿7±#ÔVrÜÒ;\#'­dêKæi2§œmã¥i¾\±ÆJ¥©ïcŒR[„Ž~ÍJ!AWiåå¾öx4Ëy!š3 ƒ(ùœÂ@FàØIm´ !èi›O™±ˆ ?ZY%>vŠŽ™¥W„"D!Xqï@u"”°ÈÛõªÌ ­Oª¿¼a¸wªnŽòsŠi‰–vÄ#ùO=óI%ƒE5Wg\sR”ŒEŽ9éHf’š6üþµ*F‘ÃÉ%϶pm—#Ì>Ôì20Öld /* Zdÿ*n\ôéVžãjm`:Õ9våF~”îÁþ žAô&®hømnІÉÍPF•¸\sZš4Eu«Pq»~M)=©êj©1Å5sŠ]û{R $Óˆ i‰Á§n;hãi7{SCh-ƒŠ1Íc9¥¤b bNÆ3BË‘@às@ ׊nvæ—ÍÈ£ ôé@>cC (8Í0ýáÅ!Ž¢—>ÆŠËŒ±ÎF*PýFXŽÔªƒ9$Ó!ýÞ”3J8 Fäõ¦!Ûr3J)£*0h sÅ;õ4z)Y†(ÎçšRqÎhà©"‚.A y¥èM"®:ÓÔzÓ žôâ2)Í&ÒGµ x㭌҅ùzäуŒw¦p3@ÏJF;GNiëóž 1ÆA¯ñ\-ˆ.‰' ä×·0ù5ãÞ1.ºÙÇúš¨è&sG;p9r;v¥V z àñÐÖ¤îE¹HÀ­<.9Çjˆ¡C–äJb?lSFCrsŠ€2=*Ý­œs@Ì‘“šO@Ý‘‘ÈÅ*ÜÉ…WùsÒ¢ó0Ûs‘Lgôâ–ÒášL¦\6éFyâ™ ãšYް&™kaI;”õÑÚØF#V“Èâ¹è#V¸IÎH»¥²T  c2e¥rºZ¢Æ09éÅL‘*véNf1Ü v§<¾b©ƒÝjÌ¡d¤Ôð¿sXÞ<ÓyŒw(äúÔÓÊñÀòŽjœlJw,ÞK¹Uo˜÷ª‘ª @Ï>¢¨)‘§9~hE!“ ·üT­`½ÇAnMÆçÈ\þtIlÌË,1€ŠÜã©¥¸¸‘Ø[Û®÷èHíWáòô»× —6ÚI6WqN×2š©sá{iQ¥¶ÍeýªKýE®yhV…¶¬Öò˜’ǵh\×ÜÁæ'hØ0Æj)G9Ók–ÑßX%Õ(ùÇzäÑʶÆ'Ž•I‘¯QÌæ4'ָɒ~\zSJ´€“Û¦)F÷¦hÏf©×´Ð˜n”|ÌÖ•1WË\0ÉÉïOd·ŒŒŽ‚«í+Á õ§©Ç#$úT4Rc•+pr;š±J ÇiXK+õâŸ*ù9¢Árì¿48>¦©…(ß.EJyö<(‚AóvïK`܃ÉIÎ:f>NOÌ1S».HŒ€{œÔ!^ f©\Z Ṝ ª0»xàTW; N„p㪠.$ g­[ò×%†ÜŠ{1&s „vSØÒŸ¼jmB¡*Ѹ5 ŒŒg&´ qùZš)&ÊzTQ9ëS$y‰›ƒƒI‚E…r7nÉ=sM‰¥C…ª²Þœtö©H§¡4Ûœì=*.ø9ùE[MŒ€~u„‚=©¦KEbÄœùTÑÈÁçÐÒl£Ÿz³ yÅS¬M$†(‹ÉéøÔ+fÒ©”Ÿ|zUí”PNqÚžÃrÑQÌ>R¬62¼{ÏzÔžI‰v¶Y½*WŸä1£ÝÍU‰ä3‡s„èՆÔîàŽ•©¥&æfaÈô¬y™X©Èö­=/íBÙÚ8òsÆhh"kO1T îÏZX.”™~5Qb‘Ž ‚Ç–_CWv‘aON¦‹•k»‘2;å·lö¦Gò>âw†¥%ps 'µRÃÌÑóþ´yP‰ަ¢ºW š“Îe?6:b›q!Ûž p1üËÜv¯LhÒk-•Xç5Åê0-•ùŽ5Âc8¨R¹mu)™‘lö=*"{“Î})n#ósÒ¡@RDb}ˆ« Μ¥7Ö¶#‘ZÙPxÖ=×éšÖ¶P-Aõ§-‰EÖÀQŽ3PÌIäšG9N¹ÅWFf-“Š’‹ÚPݪD¹ÿëWQu18×7¤ûrä@ô­é¾uÚƒf;šÊ[šG`ó"ûÁ¬ÍbB4³‘›Ö¬pT‡›ÛµRÕAm0«·CBÜoc2Ê+nn8ã¥Ç Ø2t¬»WeRrS[š€Å²5W+fmØÑÔà’@ÚÀdæ›áèwBîO$ãÍk_]Aãu‹fÖª:v£5tH·©çµW+å±<ÚPÒf^G AŽyÍdù's=={ÒKâùšÏÈò2žª©{-éxŠnþ*\­!©]–ò¤a†m©Éî:Õl(L¹Ÿz±@üÍÈì3PQ¤‹˜Ü@›´¾µ5& Œ¹âš\ùy#Š‚„“k9ã€95 -´ôö©`urÀGz“åQ„QŠbH•9o¦ [ÑÀÅ¡äµg³;´ŸÂ¯i!†¯jXs»µL¶-#Õ¢žyõCsOaž( QœQÆ)Ôdçâ€4¥sH3»“OVÏá@ ZNôæ8êh^h úPIïJM7нOc"`S/Á¤œã4ùrM;æØy½F ¼úÑNÚ´R4 g>´õzSJð2y§®Z¡ ô¡?-8ãŠUu<Ó¹¨¥#ÒñÓŸj^ }9£dÒ摎îs@…PO°§ð¢š1ïN8é@“§Ni6ûÒÔš`0œðiÈyÅ(&¿¥Ž”SJ#ŠFaÒ€FM9p) ö¤c´ŠS§é^1â)…Þ­}Ÿ˜Hv׳º€á>'mž!½`Ø>aÆ*à®K1£ ŒËžA©8vÕh˜³óÉ« ãµjÈDÛr>”Æ]è{~ì ¦9ÜÅIE2² ƒÍ*Háv) TÎëÏÔC¹äÕ“a¼¨ÏjacŸ—­=Ï8­}CŸP“€¼Çµ+Øi]ØÍµ X†4Œ½8Åm^i–Ö³˜RMΫÉ÷¬YW¤Í­dKkƒw;¯F2¯•ÝŸ”WšÄû.¹à×t²µŠLØÅLE’ºú3Õý+òy§™ím$UEwþ•jñÌöå´ižJžk?ìÈ,Ç©4+!µq-ÂÀªQräàµ>âC#)r …*A VBÀc§½ÛùíϹ¥p·B¥#j=ji]¢EŠšCÀs!–,xÀíS,i¤Â.%m÷/÷Tv¡]Ø’ÜÅ£[<“srã$V4÷3_Ü ðúT¦+Jc,­óvöµ§é1[źEËzâÒ3Ü­a`¡9lgŽÕ±9s6ôéšÜ  ±^8ÆU6m$¬W==ª9й• ̶OˆþdÇÌKsgi«ÚµUŠáGJtÖ²[;4‡pdV|r´3‹!½*–ºŠæ1[Ìc”e8ç½JÌ26ã‘]Dö6ú½ª¹ ²c†¾õÌÝØOi.ÉTƒØö4Ó¸XŒð¢¥VàÆ WÜHoÖ‘%#$ñڪĖA^øÓÛÖ¢y©RÅ"í’MCE&‡† ûÒœHFä«•UôÓ×a|õ6Ëpì“€N}).E$=écP§;¿*d£#;óíšÔÄ [$†9Ÿ!ÚÏéQDe`zu¥™¿w÷ªÖæwÐHœ,ƒtîhH)úÖt$;8=ëD£ŒŽ)±£R%î•›‚TT9«ÚºíŽÝØ`à‚k46O¯Ö«¡;1ÇåïÒœ&Ú¸¿JcSÐÓQ>lg9¦"u‘™'ì“ÇCMÙ´Æ•ó×5% žBƒÏ¥Jð}œ¯9õÍ\;-íf¡¸rÒya·`òikqè‘.ýÒdô©‘—²qUc#pÔ³>À#+š,"äNÄŽ´é2T*1¤…Ub [¯j–0ÉÆ**Ä3fÇoQÞ™. WfT| dŽÔŒ+žÔÔ„âB%‰#ÂÇr)Ë|Á G1¨eYŽÀvŸÒªÙI<¥VŒM+]Ií¥F2y&­\ê·/t‘Â3c ¬E„ÌØÉÀë]ŸŠÖ7P=hÑ×CHG‡$maØ÷¬kgÛªrÇo#¡uuä¨'³Ò³­~{Ö—nF ¡l7©²P;Œ½hž7ÜŠŽ9]›ƒ¶¢K±s<‘(û¿Åš‘Œãp;±‘Ò€À¡ýàè:S$Ýæ|¸™,kò府UkʨAf9=qLû@FÞ¤çØT:ã#ݪ cmoʘÅ*»î-Ï^)ó8+¿=ñU8l`zT¹ömÏÒ€ÁX›LUb™n;Uµ·/^•! ¿;ŠÆt±‘9 2sÅh¬hÜqÍTQºðÁÎkE·œ(Žj›$‰£Uõ¹ù3è)Óo-Œf¡zggõ©¡Á'v~”ù#Ò¼ŽOzzÆ¡ÇÌx deôæ•Ðü¯Î;Óä'pÚ9§H(z{Ñp¡J–þ!N¡éIn2§å<ðM.ïÞlnÇ%XV%>´àà'$õ¦ÈÉ’¹Áô¦ãî‘H”'-ÅBÌÒ …sÖœI wvõ§¤¥pÊíMæ<öÒ«4›2™ëW£†3l¤1Ü;¯w4CÌE 3Î3Å:ñj ;b©·`Òä7QeМ~³ …Žàawf±åbvœòMt¢A+œãžÃ[›V²ÎnîT¿(ô¬ båÿ´?{hÈ=«­†Ü$æu8b€W!¯ÄÃVw$|Ã^+vH‚î'Ò¹íÙ$™ñÑsZPÅŸœààVmjhžƒöˆ£cѺšÎÕdݤp­»ó§YÞ5ðˆÊgŠ¡ªIO˜â„µY9oΫÜéqM>åo/ž}êk$(§åÈÍXƒ®Ð:w§{= ßr£Ø[[Y9ÙÉèÇÖ¢Ñy²ä8ÀÍMªþÏzzŠf„SæÜPõ•¥ï>Ñ5þœ#hTƒ’z³euŠHUGzµ&ÉÑ›¥fÉkŒ:|§ëY§¥™d×q‚yPj!ltcJ`¹}¢ã'û­SÁjK½ '¶Glœqš’\…򿂵Y†0°0ME2ƒ8 :V}J+$L‘å9ÏZqÛ…Î{ÓZV6½@PÀrM0°²b4QzÕýFþ׳ùwU·FMňoCZJÖ-H'uL¶)&z¢Tf¥à ÔHvŠà€([ˆH¥úÓIÚx¥äŠUÆî)z@@jR}¨<Ò9 ¼R¹ c ñM\ô§ÇǽàqB¯¥Á¥^4€Z\ÓNsK’G4 7QFÊ)÷)Ê9ëL°âœ£­P‰23ŠnFê4ü du¦!Àqžô˜&Œ1Þ@„R€OQCA§ãš`!àŽôëHÜóH¸+Í :{S‡Ú“Gµ.FÞ)€ÜsKœÓFZ07PöñMažÔ¼þ¼b€ ¼hÆ &@ðs@Ißá*eþß¼ù‡8¯v~¤^☱âKÏy iL™la•²N$pi»{ «#QÂM£ ñQµÆXã¥FÙ*yâ£àt¡ ¸íä“MsÎE…jèšKꋽ”:šISnÈ«glnf IÚ+º´ao£¶]²ËUƒáë‡î^99¦Û@ˆ<¨ò@8æ²r¹ÑòœýûI ‘’¿¼eËZŘ“.Iï]?‰GuìµrÎ “÷j£¨HUÃJ<×YÌqAmó¸QƒØW3m yÓ‚­õýÜG;sØPÄ9åfÜòoJt«ächàSc„\a¥l®ÅÔÀ\çÚ¡²’–™LŒƒŽ† ‘Ý›eº`÷#µZ™Ö(ÂîÚÇ€´ï´ZiV;ä†J愘6T“e£L@.ÝIª)5ôæI_#®=)ì$Õó+åW<'aZzm /Û²3z»—lì6b3ïZB-÷E>Ý¢íá1Vw\MdØÊ­n¤ð§š_ †àcЏ 09aô¨ds·'&îgOn¥YXžMaÜYK-eOLŽEul»ùÁ ¨u)"r;Õ§a•½ãZ1Þ§iëŠÐ¸‰5;m€ö[ÐÕKO%'VMÃY˲TÀcŒUî¶æÕ³ÛÊ`™0ãzÕ'WC·÷®öæÆBÍ•°ø¸®FòÎ{)ü»„ voZ¤ÂQ3à meæ¥B¸š‘¢PÈ?ZDeN¿…2l.U¸#š|D<M­“Ž}éËŒ“Œ–;Šò…4 AG!<ŒÆ£Â2ÜûSHMŽkˆÃòy•J]‘¹¹Ö•ºéš,{ÁÏcK°„깬«Y&yŠ«ç¹Õß1Š”84Ɖ ¦HÇ$~P«n+ÓEYïÐ`zˆ£nÄŸPÀœÔ€×*A€g®sÀ"0‘Žj`H¸rFÍEæ(% çÞŒ””‚¸ü©â5–p8žO¥3›PùW<Ö†rƒœ×Ú hüd¢á¹â´ä´) ŸjRcHÏ0¾àCäã¥L°p½éí’OCî*31 Ü W¬DѤ’>ƒµ1Ã1Ž)Æe ¯úÔëœU"D•ÉÎxÁÅ?vФdñQm‘G"œ”ŸJZňVIr#$¹ ¤ ©¸•Kÿw5J¹ŒgµQ»Y`8w'×4Õ˜7c® i€cöÍdßÃÆ™Lõ«2¤»E,͸{Óˆ’w õRh²Þä’JJ’£¯cL€¿!>(&¹ à úÓþÅ$dùòªÐ- µõ2¯Ô‰ãš¹¦Â$l°àtÍEx¢0­Ãš¿a&ûœÛÐKFR»Ê{Uí1Ìr•9ãJè¤Çœö©l¢šKµäœçÔžÃ[žŒº·§®7ÄØKÕÆ+Ít7ÍÔ6Ä€Héï\ßz rv÷¨ŠÔ¹;˜±JÀäŒÔûœå€À¥X”zwÏ´‚0hgc%þiÉ'½k1  ó¶³7Î@õ­GF܃â› ˆ3“OAµ›žj]‹;Ü.w~”Š6ôR Üúí¦4Åô–^£~(Б¶Ý8n6ãš­æµ*AÛ¿¨¨ê_BöŠ¡,¥9\Ú¨êÿ¼Ž&rIàÕÝ#"Òaü5OVED…¾qš_h>É©+ËÆ=iwî|”ǽGuCÏ9©£ù›A¡€—ÉÿæoʪhD Ý0zrjÞ ØØzœfªhåÜ:ç9öª_ â4g¸kgÚ«˜ÏJC:ùEØv§\,d2¶ κ‚Hm‹üÅJÔoB)5Gc·jíгkªHœãåö<Ö±ônÝÉLŽÕ«Š3RgJšäD… CzÞžn„³l ©=ëvf’ps[út’Kf]ÁGQéYÎ +—6Í bù°-3w”#æíŠz¢Ë œƉ—Œ(³4'‚upT#=*Þ•±uËl“÷¸¬ø²@95§¦mþÛ´îÛªd´)3ÔSîŽ)㎴Ô ¥;»T.ÜÒãå4ÕÎiIÇZ`/JAžôϵ=HÛÍ7“Ò†-.1šL(• Œ:Ò†âäô c{Ò¨$šNç­;#i«ŒdÐ94ƒ`Ð~SÅIÇ­ÍçÒŠC3'8§éJ§ )ÙU’ §.) âœPsšQš;óC€&Fy¤éŒÒíßô¦!ÙM`÷¤+ÇŠpÆhŒö£wã'CÚ¹˜£2J2¸Q]-ýÂ^[Ç.¬¿,&B.qV¶%êX·…du t­$°k\pGL-íÄq#nÚ™Ë0rÙìj[F# È­G-ÿ—ˆ¢R]¸Õܲy‹ y Ž‚¤‰cÒlžêáÁ˜ôSÔPîȧh´¸L÷MæÎÿuOj̆95KŸ>à™éíUäûV«sæ·*OÕÑZYcTQ“Œ`Õ½žìžb… ,\ÿRÀªàc®zSR# €žµûÉ v÷íéYd˪¬ciV#4æÖ£ŽDØR9¬'W1–ó‹}#,ŠBWbªæ3”™Ý¦³ 6H<óRlÀªL@ïþéâ¼îÙe–Oõ¬ ry¦™åëá¸9«ö(^Ñž™ ôw1—cŒ}åô¦Ás€ˆÛŸCX÷9Ó¦”p5£Û·œw¬¤¬Z‘ÓIe?.ì÷¬kÝ7ÌbÇ‚zVų³Û† 5×xù†ìÓL£œóÞÇN¤¦zƒZ­ ¾¥o±€deà÷ë‹5¹…”ŽÀÏjÄÍÆ›)MäÄOUn4Ú0µýãM›(ìОTç¥c‡qsϽz…´¶Ú¥¾SÁ XZ¿„U•§±!p2c=ê£>Œ% êŽ!¦—=qH.¦çæ59„¬…H ã¤kU íÖšئg‘º’iDÔš˜Ù°#oò¤{w ð§t+,¬Óüé{sJäñõ«2Ú•ˆ2¯ãJèJÂiO¶(ó¥Á…4+@4ÂlSÅ‘u:Bʲ­ÁSµ8ñÆsO{ô¤Æ3n0qÀ¤8'ÛÒ­¸Ü*šÜsI1µaÈ2Ø qR­HŸëâœNO4ZHÊá•°EXžòIFH ßÍU#æö¤P|δYn+½‰Œ*#,5ñW€Ý\T&›?$ûŽÝŠÃŽ•").8àSÞô©VQÀQÍS%vm¼ž=)öãoÞõ¦áäm¸©àµ|léKb­}€Ï/SÍ4¾,*ËOˆ¶zŠ«Ã9ô¤‰eÔ½ AùTße—pa€3Yâ5 ¸õ­‹7ÄOà÷¨zlR×FS’âF@têj«d³Õ¦`F9«XÃ=¹“ËÖ©«dÄŒ`·Ò­[ãa÷45±8=©’U!~÷cJaÞFÆ!¾µ"EpO,§Ô…c2ݤßË[^c$ÕuÓñuæ–ù2qúÑ'q­*ÇϘ¸8ê*´3“…;OAWü±À䚆0pN•(.g5¢!¸úSLøô¸§4s¬€²1ϵK› ,ghª[>8,#î)-êj77;3<‘Uñzã6â€uÄ%›å?JÉyžc‚~QVæžUS} QºƒÍ\Q,’Ü;‚Š6cø«VÞÎIöëɪ6sÉ´G”ÇZÙû0ÛÅL™K¹Þ•È„lÇQÖI&´~Íã#æ¨þÎ]˜ÓÖ•Çk™·qŠIǦh²O2@„â¯ßÆÂÍs<ã4iÑÆ–æW68ï ­©JíbŽXÕzƒÎjÞ™,ê‘ù`ÇØRÝX¼v‰;™›Šµ¢¨K¥c€Ý³Cؤµ-J çˆ>SÌ|Öv°åï™GUâº`ò¯.nx9ÁÅrw“{$‹ýîsSA¡XsƒJî0Ù ³"œõ¥fÚ®ÄöîÆìCZ︺¾kÙ±p3ÜÖ¯Ú@p¯ÈÇä%±“옯jc/™ ;° ª÷V4 E¤ê4T$ܦF6TIo·N}íÉ“8¦xvPßhÜ~`µzhš;p<æ³êkÐv•2p0I9­Ò[ªŽ@­kIVEq»#µej’!’ u Í%¸=ˆ!M±å†jT!˜dô¨¢]Êû_9ìjHcFàpÔjJ¿blrk?BÎläš½¨ü¶ ‘ϵghÎÁÕ/€´l” 3I:l™äv¤8|Ç©¤º 7PÅ–³ORÚÐåHb)ÑÊÑ;'ÇœØéL'šë9À6_8®¯A)çydðËÒ¹ H9Ñh×qÃvÁ$Ž¢²ª¯J{;C>vïU$·;KÎzUçBHqÒ pÄðqŠåLÙ¢ŽåVÆÒ­Ó®i*É­Zƒ’ R͘ õô¥ÓHu›`ÌoàúU7 Ejz¼cå§zÓcå;–Ä‹Ži͜ҌÐN1@r=)pq‘GAKÈ~4ƒÍ4óÅ!H {qJ«“Á¤Ý• 6;ÐTdóMÀ¥Ü ¦‘Hô^™ Ž403FIÐ0ÝE.Ìò¹ã´·¢Y"N T‚ÉÀó%SœúÓ°õ4.l…và|¸¬)ã’V\'È¿xŠèÖhví1lU1 ÚË´uÅ1Zå4·‹ËP?ZƒËò!@U‰XE¸`c¯½C ‡ ŒçÞy‹‘P^]ìqJwûR_ÎÉ"Å ‡Œ ’£Ò­^îé·LyÁíô¦Ÿ`Y£ÑíÌó2i9ÁíX2Ë6¥pd|àžž”Û›™µ;ƒ#Œ <[:ušyq²çæöéTôD^ì“O² wÆ+jåbvŽ™"‹{}ªÊq‘ÐÕÔAeùâ²lc$D‹'9â°u‰Ý€Ú0:b¶Žçn>UµS_Š1§Ç"¯ àâ’&[ѧî†öã=k3^‰"º‰bP±ìÈ­mÉœc­S¾HĬc¥mKs)ö1JÏ NäT/¤Æ·-íþÁ bÙ\ñŽõ)²†IwM¥Ç­9º…º b¸ÑæÝÔ¸ ŠÕßjŒV„qˆ,î"ÈÀaƒëM±Š6ç'šÆlfÞžŒ-‡™úU¦ØØÇ)ñF©8÷©¶ìØïR¶4EF`#!¹›C"G÷EnØj1ÞBâP9éDðÎWMaÜÚÍm/› ÂŽ¦žãLµ«iÊ­p‰ó÷QX±[œ޽t67ÉwÇ}²t#Ö²µ:k 2ñ?< +3KÜ„Û)•âœma áFOµ èSäbpi[r¯<Ô¶Ç ÇÓáÊîEéž*ì66²C·ËµD?SƒŒTêv“ß›c²1µ*(‹² ¸rüyžµÙêÞØr0z×ü?¸5½&ÚÔªÔkpÞ”àÄœŽ”Ý3IÀÍjeqæRcÚidæuõ\œö¥a¦4[ž´â}¦cæÏZÞ•†!&zRGô®ß.(…sóŒUt'©o$A9¨ÚQŒM4É•À<ÓbMùf< ‹~¬JFXàSD#!²MK¿?(ô¨d9nGJi;ƒjÄöÓ*dž´ùg{™• ¥Wh#&ˆ¾i3œSÓrw-ˆ)’@îj&dAÇ?Jx‰ŽyÏãQ BÕŠÙÝÐvÍMþ\ªÀt¦19ÅDíÊí<Ѹ3ZM³D=j°»–(™#<)a˜°Ž© X¥“#8<S°Þ¦d¡YVù»Ô¶ò¹"2øÇ¯zµ6–Ó]˜­‘˜û Jxn K÷Ó·¥]ô"ÅØ®!DÁÎìrj+» WvìtÅ$>\m*I†8$Yo2±SÔð(VsQdóíÊ2䎆¯èPLŽÊÖ±#ycpFkJ)L6€G!Þy#4š*,Ó¿D#(íY×&hð¡ úbhÒϽ±¼ÔFöS"’p$UÇ¢\4FURÁGÍíL[ÇX·#ÙéëVZY$Œ¬9\žj8mƒH7²—­ ¤É=±V’wv;c z‘KHÿ ŒníWE¤ˆ¼8÷©¸ìg¿Ú¤û˜ô‰©ÌŒY½jÉpŽýñP;¶F:P+bb›·tµÊ[å* X®@$š–9¥ˆ²•=ñ@Êò´ˆÀ2c4Â>PWvïJ†•òü“Í[Š £s Šw 3ij$‹'§Ò±.àXn  ÀÇzêÝBIÀêJ­u§C}( ò:úÕF@âVÑ\Knc\n“WäÊH«»#¾*¾ŸaýŸv>å#“WÑyŽ•Ï$ ™=F‘*ø%HÇC@ùqó Ö‡NŒ]°?»ShÛ˜÷ úTÜ«”DYî^FiºuŒ×H‘*‚ëéWu™+eDQ´ž•kûŒ;ÙJñ€j¾É+Yõ« ­ôÈUÛæV5&™§”0Èýqš¿âHØéëÉc¸qY¶rKÐïÎÏ»‚{ÑöGöÛÈ‚YÊÊÜ…Î+Ïf“q%pI5Ø]OtZå|¢‡ŸÂ¹°L±yåFzãŠP &ʲ¡Œ õ4æÿPÄN;S®2ÑãVO•=1Z™²µ³pœ÷«÷;@Ýžj„,¡°:Õà«?ަĶ"Û¿ ÆÞôŠŠÏŒ‘K$ úÓbùX`÷¨7ô%Kfœò~\œÕ»]J´’W¡àŠg‡öMs*¾dæ®Áa’È¡rÌr;V~¦¤ÖÑÇmÀÂŽ+ŸÖUMà(p6×@ ù2cƒ\Þ ì/ cGqH-Tì$”¨%ÉlTÖËÚ†=sRDU¸(–¢ ²ÆMQÒnÊç’+GWb–˜*5OBTþÐÜÀž*×ÀÈûF„°” šK°b²}ÝMjŒ9%G*Ž¡‰ o“·jÊ/SG±É±%Ži¬Fiò)W Ò ~õÖs0Þ•¹¡Ù¹‡ÁAÇ‹ À5ÒøeÑ|ÅÜÇ5GhšCs^ ©­ØÃr‡ØÕµe'ô¤¹Vž3ÇÒ²³qi(–×Ò¹V¦ÏCTåþ`6û’Å Õm˜õßKnѺëÇAÚi…Ö-Ô6~`GžÌéˆFÑNÈŠ2TsKžqš,“ç"·=)2 ¤nÚ˜`vÓÂÓGJâ€èúÓZ•I&€ 9/NiÌ3Å7n&€éHF 9ëÅ {P·$5çŠ;i¼õéHb좛—þõSƒN\gšo8¤j‰&éï@ Ž*>M8/¾(ô£¦ÀõÍ8Œz/fƒJ@F9¥ùZ˜ 9¤,sNÚ1QŒÐÁ8Å!Î(iAÉ (ÅO­(㥽hÆiNvöÅ'p{Ðy'Š\àóùÓxݜҷ"€q·=kÁç¯z”:É;~øÍ>fÇdŠÒ¨þÏ”§÷†j¶Ÿ“p€Ã&´Ô/Ù..8ÎMQÒk ÝÞ¦LV:¢–±ÇÒ£ó1Ê“ÀÅ'š]Â4d{ÔÍo‘€ÛO½•¤.A9ëÞ…cœŸSOeÜ ûÓñ€ }(±oL7J¥:r½«A‰cœp*C"ã?!œ­äMkt1Ž{VµòÜű€Èæ{‹.N8"±@šÑoºNAªZŽö%Ôô¦Œùö¤òrÉýjšHv Ö܉t¸-†èMéÞm«4@1ïõ©eÄÇóH8Ïz‘$wwôªÙ1¹WR¤TÊB¨ ŒRe “yVAÈ5ÇÌ6NþzWaæoÎÞµÉß/dÇ]Õ¥Œª­.Bç&‘”dúÑÞžç+c/jqG›“»Š±·&˜ˆV€½4÷Å7¾ Å$cÞžŠÂˆÓ2 ô«3GåõhWÔ®ÌàŒTˆQUC\TR•Iœçµ$®‚öc™ÑùYöÍ@OÏ’iØÉÍ1†Ml{¸äŽ)b!ª"§4™Á¦Ð&i¤ƒìù§­Ró ~¸Í …Å0»Ò’@ÝÍíK!mÕ,bØ9ɪ‘NQ ç5ŽY²3Snãæìh8ÙÂôÍY²flð*šÉº,E>Ø02AëŠM‹±j ô”1ž6ւݵåÔ’` üž+œ—ïàki’ªÇƒ‘Rö†ê6ÿ6øÉú¨±º¦ÒrMj\˜åFAªj¾\gæÉ4)h.]H#ßæÙÀ<ñZ)𥕭¤«Æcݑ֬Á0·ƒƒ—==À’4–(Ùñž´‰nX`[µ$,^eiÝ+vXÌ+GÁjM–‘•o@忝µI¼ÌîÑ®éWRÛtGÎp¡º –+dEUñ>´®;Ë<±?šyšgo;»óWf²™QȪ†Šä~t\,24Hwtïš\ަ§1°L•üj=ËCcÈ V$Œ°!ëƒRÆû†â}j‹LVO”SƲä0zLd³8* ÔÓ<ü€9 Þ§‚Îi‰,1õ¡Š#à€N;Ñq¤f‚_ ¨ÏjCc%Ë‚žõ»&4 /SÍ9ƒÆwqÅ+”Ò)A§*(,ÅØõgˆ•xÆzâ¦Í\çi5±18'#Ú€¹!‘Ddw)±L]v« zg”0 È&•TÅÄkœóšfkjv¬¼ZÚSÅ ´p"zæ°µÛ™±¦î}«¢±e‚ÕoÍ·$‘Tö%nC®e,Yœs¸cÚ²4ÆûeÊa[`OsVµéž{\“µ=j–•v~Ù²Œ&sš>ÉMêk^•ŠÊU Gê²KLJͩ É·ÜÖ…ò‘i(l­cF¦%Àäc#(¦sN»]‘Ô«5RîÕ¡ Aù1šêõû#­Õ²ï%rø®bêRöÄgŒV©ÜÊJÆLc.0NjÒ1O”ÕhP´AçÖ¬Ì2 6Oz¶BØyàQ©ýá§0Áë‘Jª7ñP4t¾‰%¹;ŽÚè$·1£w uÍs:uºùN>ZéÙØ©^õ“ÜÙlS;–Í™TŠäïZùŠŒsšìbˆ‚¼ÓÖ¹ÍM!šü¬ã‘ÒœX¤F‘•ˆQÚ¤„2{ ã–"ˆxã­H£ŒnÉ E nFdsŠB$\“‘µkQLY1'æì*ŽŒ¡o;ýÚ¿°FÒ6™ö±gš.[f!²íN 1%µ.ô#NcXšœÛZÉ$£ÇwCŠqÒ®çkô®Ê®1íÒ›æ:°Áïš×Ú3>Dsðh·7 49÷³¤hOæIŸk!àzÖär’#É…YÈeëŸZÊU$ô-A!­òD3ÀÏZ®¦7““ÎjI\?Ê2xªñ€¯Ó“Y¢˜·VÏi­› ýÜѤ‰u;f•yWeâÎF} m"ê¶á°T?jméa-ÏLUù 2sŠ@IAŠQ¹¦‰bœïK‘·šh8§c<Š¥‚h3Fìýh¤Ÿ3qNŠ0r #›Š]ã>ôÏi¤üÊ `ð(K `R P2rEç è)7gŠqSrÀñHÚ=h¥ùý( eœphôæ)s»¨¦!ùÅ/U´ ‘Óš|Óüð¥ÅF §¡'©ÜsŠ|i€Ip})ÊH AŸ—¥"VaH:ô¦°iÊiw@Ю9Í'~)p1MÛšp#ŠÐÙšx=(ãc­ŒfÄö Ž§&Éé@ ÎÍx7™GНBÿïo€§µx׊<<÷~ »›í1©gÎÖ”ÚORd›8~½iÑ­íZZ¾ý–ñ(™eÞ2vv«zo‡~Ý`nê5qÖ685¯2%EÞÆbNÉ÷O«¯Ú0Î[½G™ œ¤§j÷«¢íá~Qל—BãæXi¬e”³]fŸ{ ÒEµÆHäÞ¨¤vDT²‚xÍP—N›NœKn|ÄÆà¨~öå%˪;¡c9ëŠÍ»¹[}¡Ndni–ZżÖe¤fWA–Ö³Äw&~^0x8éQkn]î´5¢†(WÍ—çsÉ&±u=Mæ”[Ûp¤üÆ­$ˆ¶öùÀá›–vÈQÜœ“Ò«bo}³ÓÅ¿Ìêrzb· QŒ2Gz«â0NjÔmóÀŒzT7q½ q) AÆ}jÇšDxÎH¨—úÓ‹nইpF=zÓãˆç*8¨øN1SFGr@4“j“Æj–±0]<ì}ŒHZ¹µÈmËèi^{œ$¨4ÄÊ'L[ûuº“,€ƒÖ¨Ý¢ðÁâ0½ë¡ €*¥Íš\m9d 犬ŒG…ä…’Bî1OIÞ %GzÐ:Z—Ü%rjtØÞÜÖÂÝHí-kfg|™G´€~~cL Ôg4öFUŒg¥M§­·žÖDDu_ZX6ß…9'*øЬÛw¶ÃòçŠ@ä04šÙvg 7wô©-îdˆ«pV¨I&îµ5¼‹€¤óRã¡IêlÍ t)Á=ª¢ï‰ŽãÁ¦4 du¦´¹Æî½ª:Mg±¥`¾†¨›]ÄÙÕT¹CåÔö—ÂÈ<Þ’¹Mf„fQ,¬UAÎzè–òÎ@ÂôÍ`ÂT®By èjiõg¸ˆ$jS=}è·q&%ôë=À{qÅlZ@X5ΣåIO*5¥%Ì·(Dr:Dr)>¦ƒ(,Bc­R{|±lgÒ¡Ò÷S1rÙl šÒ…’$ç"·(­¤Î‡oÝ@4É lzf®É4ÎH¿N)ÐÛܼƒÌ<¢•ÀH4Ä8óàU˜â‚$¦G½:U>YÀëÞ‘GÉ´ãñ¤›þl(㩤2‘ÔïÒ¡$…èAõ¤4…(ÀûP°äÆyϵB]±†ÎsMUx×.ycÚ­(@ ëõ etw,p8íWD.rÄPÃ8"Ÿ3ÈSnHÈ㎔°ÖE Œn¥8UÀ¦(h£Pä’9Í"°˜¸R(@ÎgXoôØþ\÷5Ð Uü½ÎUGãX¹?o1’8^=«FYm¥²¶s qsøH‹ÕŒñÁôðb\¨#‘T´ÈäYa”/ËК/'"Êh²1޾•EÿeÀ1 Ô^Ñï#ZV œpGE#YBœãâ [çšQõÆ*ìk±Hæ¥s@ˆ ²Á›Þ¤•Hs¼qš’ÍÚÿ{ ùO ö£Q=Éáyç+ÐÖÏs%±û£ó¥…¾|µ0>î3LÜT‘H«B—ý5BôÅtÿy b¹/ 2µù3ÆEuì›”íÊjÅîl¶"WT (\àt®Bö÷ÎÔ%‘#Øãƒƒ][8XXØ× áÍô¹<ç8õªŠ&LÙÌ¡K°^i»O˜qÀªÖîCÜUÅùFwn©Ø.QÕY’Ô¯\÷ªz*´¸gm[ÕAkcœñU´@²NFÜ`u­ÂCø¶$¨SŠBp¦|ÁñÛÖžç'?¥bj5\«g¾”í¬fî欔5<Ú¢”þðNhrÜ ^>õaË€=ªŒe¿½‘úÕµÂàÖ¥”HªŒ¤íQ Àœ½+æ vãŸZdq»¿-×Ö’Àf'±ÇZ’بÛàïi#‚£æ¥‰½¶£!Çj:ô¸ÎPSÀ⣋åARœP‰#Ó”ñ׊n¥(ô4À\dõ£æ›Þœ9  ŠÌM;$i!³@8*iª3È¥UÇ£;N(Î4¹)3žMŒPfØ9¤?xR`“H&ê)´QaÜ ¤Í{Òóg”õÔr…&Œô¥àt¤š`80=.F:P«@>Ô‘Å86Ð ¤Ç<ÓÂ3L“‘ҜǦ)¤À§)PgRà ÐB‘¸Ð ¨àu £Šn8¤-ó P†b”¯¥Z ò=(ezW–øŽ N¿pU Rs^¤ÊGJà5Ö#X›r(½+³›cH<ÇPO½7û<Â¥Š•ïõ­†Œ¢ž§8§Ë™çð¡L§û@>•Û äc¯ÜÆD¸ 0;Õi²±àMh‰½ŒF•mäelõíS D.2ù^™5OSFŽu$uæ«Æä6OJÕE4fäÖ†»\¬¸‘q¼ýà*í)¡·B¯Ö\'cü£$úUÏ'11ã¥K‹Œ®M§Æ®¥Ÿ:Û·*®) yÁ®~ÎCµæºI2B°ù‡J‰ž†„H›·2ä•d­•à©#¤%›…ö¬ÁˆÂG`ÀŒ°±s×ê5!(z²¯òáŽrh™r»ªu•<`t¤ QîÇž´œ`p=©Uޝ­3ÊÉÇ< •C+›ïP€`Íø ƒÔôæ•¶ƒÈ¨ÎãGé#Pr3Iòô#Å` äútΊ˜8Ú„UI9ÂF>cL¯ßpˆ 9¡GR¯“òƒB°Áþ =iîHo˜îô¦Å†bð¦²àp=i?ˆŒî´³€AZh_J òð¤‚x§LŽäS>UÉéøSd$¡â™½JäT›RÁã¥F0‘Œb€#Û¹‡Vˆ¤ÐãsÒºõý+™ñ\Äêq´Ð–£L¥ü(¥LÝêĘl6rB+ÞàM:‡‰[yëé[d(Â)àu”•"î‰6cÃ+“ÕÆ5)G^kª, íÅrº¶ßí)’½]-È«±Dœ”Õù©î¥HÈàÒp:WAÎ5Ï< U$Rš0(zóMÁ&¤“½0 Ó‰#ŒS˜Ži®~‚†ÁéÅ+0ŽôÌc½¸4 £“Nee9aŒŠDïÆM³0öœ ÀæäHâ€+ZrsH³p8§ð21HbÈæLg Ty"”)= ÀÅñMÁ&”J„†é@‡E K @*ÍÌ)O)÷>jlw€9=껹&‹)—#šš, "ªfì)âF¥¡¦^šãy ¿v wû‹…¨£¤÷«åŒ°‚ÇjNõ<¶Øµ%ÔšÎ5”.sÞ´­î>Í9IT°eC7’£É9'Ö®9i•d~¤u¬åsEfŽ’ÆÔ_”ü±çîÖÜvÑ…dÀÚFaè“É%¾ÀÕí[H@m¬0Õ)•è,z}´1ì‹åÉɨæ·Çʼ‚*eä¬{q§"€"†5UÛÆ§¬ †Î:Ô%Š1r>µ fÁU‘ͧTm†¹­+|¸n´×]Ì P@m8=¤Â.8Î}*UŒìËÕ ì¢A·JãgÂŒzyFÀ,~QÖ£[LÔè«Ëv÷¦&Kæ¨`àŠÍ$m"œ°ÇCHvçƒï@ܱB2 éƒLŒy#“Ͻ2LãpÀ óUf½ ®Ì0Îh¸ÌxmÔ72ËÅ>ÛȪ±ó'ž•ˆs4±H8ÇÍ>Ýc¶œ»~µRiÅÛÞQÇötª>n:Óô)³§Æ7‘‚sI{Ssü5WFlY7Ëœ7ZŸ°/´nDª×JPî9­3˜ç‘ȬKŒ±ÁÉ«°ÌÂà‡ä·Ý&¥hh™¤Q^2±.ekg½’´$xã[ð¸a‚ß:ö¬]v¶7rc‡ÀqÜrØÅÐ#²»K…¼ûî>V'½bÞX=­ó©S°µ_ÑãõãÍvÏagÔà§rNiQP1”ýàÀþ<`õ"*²O ’`À¥Y †P"a&ÆÇP}jA‚3Ö«><õ21òúã4À|‡‘·&ž¥Bäö¨~ë»$S™‰þ(!vnã&«ÉÏQš‘äR˜ LÆå'·j@F®W‚{ Rà?ÉúÒ±SƒÉÀíL|ÜЄIó²®@õ5“¸ïÖ—pÛÁ9¹m¸UÏ­2—^Ö £' §ÅÁËŽ˜¡‹Âþ´ÄBrØÂð)ûIBF8íM“jà3ûT±³x4 ŒÛ»I )\çÒ¸ùþñúTxbX3L ^é\׌¢A`Œ-ººÑžEäqX^/³w·M5¸ºŽ–«ö• pEt,Sa`Ù&¹‹EÒgœ×Aƒ€1´æŠ‹Ré=FHÇ\×9«(ížs]4@ù€œ0®oYÚ·®£ƒš)üASb„œ=) #"¡*½XtÜ’x§$Ïm± ßx•Òs‘¨ÁÆivàÒñŠ1L‘1ïJyÅ4qïOΤ0/ƒJrFj0yéN$c¯4ÎM!Î)á3Í.;ö bg¨ëOff ±¦‘ÎE*ûиäÔI!e *Wµ!fÇËÓŠƒ® M¸æ•ÕG50ßZÓ²’KMå I‚3NáƒHçšÑžÕä_:8XEëTŠÚ.; jBcŠ™ ¸¨J’~QNâ°ÝÀZ@2Ã=+JÖÆ7*fc´ŽÕÙ’ç` vÍ+•ÊÈåxÄj©êjŒ`äÕÛ[8¤“l¬Ê?J¯sY™#9@hæMØVê%´&Y‚ÇzÒ¸ýä!{¢àqVtHmàµyæÌœ"Ö½¥”7ÐÍæ2¬¬0 ¤Ý†¢s:dfâú+p3¸à×eG¦¦Ubî)Í òý?/¥…b I$þ,{eeC&zTw*j0ÄH9 ÓfÔRI œœÕ½Jy¥Ê­ÓnxªèEÌi$|zætLZ}ÂŒçi«[•Ðå4O-umŒ¤àe~µ»æI-ü»Ê:{ ÆÐ­ÉÔ$™ÇE8÷«‘Êâé÷ƒÔÕËqGbÄê±âD9 çñª×—W71ÆdPU}*y$ „cÞ«Á š3“€ ^µ1ÝH±¦EO?Ïu°… »Cms¤ X-÷’ò¯j—¸Äµ`) `ö®3X˜ÉªLPœ]ÄP¤~fÎA“\–¾œüFœE!̼֓‡ïÐÖš_NñȼwB+Êy5,¿,AAäõ4ÞãKA—·ìðÇz‹B»6Ú‚ÈŠ ¡§ÜÂE© ózÖ}›m¸¥RJÄ?‰•ÞªòàÉ 9àÕCnì>F×Ö²yc?F· «.SUcx^BÄg'­ B †ö®lK»î’*Wº2½¥ÊQ²óÙÈwŒ©§ÇqjèJœâ°üÏ”d|Æ¡ÞF@üqG(¬t©qjS O Ü ¤×.·ƒ ñïOŽþdã‚irΰj1Ã1Ò«Û]oÔám›WxäVwd¶J~ Ö¾™}ÛíÑ×#p¤ãdRG¯Är¤ž(xúTQ°1/ò©Tœž8©[±YE*ŽÔ{sGaL@qÚc9æŽüPÅ»b€üR0Å*î=E 9ö `¤c¥(Í!8è)»Æp(ãÁ¥"šG4ìš)¦²®9¦±$qGUæÖŠnÁEEE.I£>´å šb{Ó³HÄ9zP æžÀ4œsNþ<Úœ¹Ç5qR¦!2iÊÙëMêiß…0 —§ƒƒÎ(É-žÔJ98Å799õèø äž´»rÙ&“hÝÁæ€F:ÐzŒR`îÒ‘Þ€ò0Eylj%ës.=ó^Œy¯4ñVç×%ÚÇ©–÷ApI ŸJ¯-Û–äzþþ;ŽœPÈÄr9öªH¬ÄØFG½Z ¸ÁÉ>õ+ ýßJÒäØ%1OQ\ü«å»&:è6ˆ³ÀõÏLû®ûWe±s½3VàÈÇT‚\Tá‚È@éVAØè’¬–ã'•pk¬GG'o5Äè»E‘8ù³[º}ÖÂS=kš[›'¡±+®pzT$¯a×µ9@*=j6’㊒„bJ±h÷4—hË ÿ:¯¨:%‹sô¬ï+y„“Û4ÙÓ‚XšW ¤Œõ‘¦Ýe‰‘‰Ts–›PtIŠ©õ¤µ ›‘&åÈ=½jÄ`ç¦ïQ\äS6r«+SïQ\ë7kÛ¹T#,.kilŒÔnÛTŒšä“V¸+I+^Ù®’Úö;»pÉÔði‚w$.¤ ­HS9ûµ@í9Ô¯SˆÏzE" øÆ“ Ÿ›®zÑ$a0YºST³d/9õ¦"A±rKsP}ºÚ6ÃJ¼÷Í2ÿÊBÙÊŽÕË)>îç“F‚l죸†D6R½Îi§büìØÇSž+–7exa$EØzš±³ÉFŶc½;ÍöžÝ”0‘~¹§‰PË *jååHã¶‹å²x¢+–DÚ¹äç­Kv S°nœÞ¢ÚYϵ2ЋˆMÜÍ]Ù±~Q“Þ¨~d¾W8ÉÍ`ø®Dm6E'žÙõ®‚gŽ0IoJåüQ™l3³n“GT3¶¹Cï]0lƒÚ¹ë-¿j@Oó]!UÚŒZu¥RØP꣭rº±'P“œ×R ‘’{t®WURºƒÑKp«±PF}(¯9ƒÒº.sÈã½8œ)8b ù[šdŠFí@>Ô¥·Rvô b•°¦“¿ZQÇniʹ;{“@ 8éšààkpxVîHÊ뱺äÕ;»{kDX‘·H>ñ©R¾Å8ÛrœŠŠªc}ÄÈÔ{¸©^5žoÝ ô–K9­Àg^Aš`•ÍKE–ãI6Ñ&öfÏN•B÷L»´¥‰‚úãŠÔҵȬ⎠!Æ9.+B÷WŽîܪ®õoZQZ4q‡× ©ÖQå…¤UãÜLß¹‰Šž‚¡6—6²(xHÁÇÌ)Ý •£wNŠ÷ì@G"²àjiÒ¼ÉÀ– ŒßÝ©¢ÕZÑ#ˆ.5zß]ŠWÿHŒ!è*ËMlRJŽZH÷/Zeê@ͲÞ(Æ{…Á®…åŠCû½§#µT–Â9NîþÔ®]»vVéD…rF*ñÒ`dff=ñV`¶†7ÚbéÜóšÑ ˆ¥r9éÅ&ÁhswÐAi „E¹½kÛM–â_õd)®Á,R[§–~G`jç•_ݪ ¡;Õ÷99؈„°jÆ™a-ÌÞaÜ#Ï,;ÖÅΕî²¼{È«ÖÎ!ÄAUG¥Z —QN¶ÿ©B{’9ª·:zßlåH<ÞµDÉ¿§øQ…É8àÔ]•c ø®ÐÄ ÕÓá’O›&æ<Ô¢BÙäzSZu3I¶Çe¹/é“ޘ̛l'ÐSD‹4dç¶(ó““ÐÒV[rí˜x=óBÂñÆrÁXúÕ¥–>J°' §€¯Ãò½3F¢ÏЉZQ™ã°¦´!]—y畽8x#ŽŸ0ܼ."cYr¬9È=j}„¨ÚÁ‡¯­d(c•?Í%½ÁÃc¹ë@$€‰ ‚sŽ•Ÿ¡šÔ³’+Å$°FíšÎÔmåÚÛNOQE‚÷æd…#Zs ŒõA]ü¬—ã9Å[uqäS°q—CŸQU®"f@ár*u8쎦ê’g9OJvB9[­írG<{U¥¸ólcŒŽþuUž.ɉT†8ª \÷OLÔHž£ÒU 2)$‘IäãÚ˜T ¦3oíÍ@ÈäÃrZt +†u{ÔC ç‘Ú”Á ȧp$«©Ho¨Ýê“Ãm"I’1€MY\DáÔp;U]im1æ^=ET¡ÐO¹mÄüÜU¢ÅgÆ:VG…$uiSÏ5¦ò&UÇÌ7sZ½Ç…ü)‘ŒÕkÊÉ55Þ|¦pÜuªÖaàûЕº§(Ø {¿²K!cÏNz–ÞE7±‘òç­G©"È@,NqR÷)l]¶ÔK6aË'Šä!S5ÅðêIæ¶tÆ{u”ò•88¬l¸žl¾”G¨5±´á)¬{Q“ØÒmçšw4ˆ¢€6’M4±í@É”dfGZF@9Ï4‡ïRƒAìiÊ£<Ò´Söj(šÜy¡I'§gŒR¡Å1  KÀÉéKÔÞšTð ò)Ã4cŒb˜àŠ3ƒÒ”/ËšnA4ì:S“8Í7u§I4éJ:t¥]¼ÓƒvãŒSÆvòy¤8ôæ—¥8¡sÞ…æ”ŒŠ sši|u»JŽ´Óž”æl®kÍüN ë’lÎp3^Êp1é^Sâ»ÙÓÄ7­…À*¢®±AÔ C zS]ÆåÚÙ¬‰îe,0õÍ>ÝÅh¢K‘°Ò “Œf«I1åù¾µ•çÌ ;Î)ÈßÄyëT .bk«Ã4n‡åöš½}jà€ry«\¸\sV‰a&4Å$6s×­#±IyÉÆ8 Ò>î9äÓƒÎsÅJÁd³g+ŒM¡•UÙvž½k¤Ò-vDÀòAã…oÈä WMfR8ÂÆzŒYŽ(´‡iÀ zt’®IªÃCž´çmÙÇ÷¦XªÁ#85V,= (xôô§ Û׃@Ý+=œ¸é´“\’(‘Ê–8•Ø\öÒ)ÂGÈY£yÏ´p3Ík‰îZ±Ä›‚‚àš¹æpÛÖ—N|Å ÿ(äÓ$(UÇsÍ8‡K™—¼8ç Ó£…–0ìÙÇLU{³‰@fü]· cQ·;¨‘+S¡Ñ½«.;õ­b¬2FjŽ”žLyµu‰Ç©ÏZQØÑʾgAÈ®sÅ>ÆS$é™ ù µÎø…VHcïóš<ǹÁÂͽN:µÕÀÁáWàŠ£ŸGå¶ Îjð UŽ(œ“eB¢N03Šæµ…Åá8í]>Ç8®k[p/ŠŽH4énv3Aà€8¦ñŽ´àçMqŠéG3êOqœÒòö«Hmà„—Q$Œ0¥1X®H­íJsŠržy¥ó 0"š¤g“H@'ž”†ˆüCv-¼’ß.=*Š[Ë}pÅ4ÛXƒ¹ÜÁTw5³o¨ZÙ ñï~ìiz—vhiú h>w¦¬K£Dÿ3’p{Vhñ$à`ªíîhYj‰¨+ºGsYµ"ù–Ã_Kµ<ùkN6±B«ˆÇáOD*Íó’cTîõ$´á,çAFã½µfŒW Ì:ôU[Ù^ñö$E•9lôõA,HñŒ©Ïz»g2Û>ñŽzÐ3›‘9;²¸ìF*6‰Ó«r8âµõ·»Ôä.Ð7Z6úžšÂ(I8ÀÞ:U]‘§s™†i¢|­Ù=T÷®žœ!<ŽwU«˜­¢ÄžR´ƒŒŠŽÝÈåè*¹i$FâE—–>•2îR2zu$TX+q¸òz±™$ >µ##’ÙçpÂVÇ «{RªÈ… "6òXŠWåm£ÉíUÌAœ¾ŸjÚ=ãwÞÇQR;¶b½@Ïèb±˜"ãŽÕ¡ed÷9™ÎÕÖ~ž–îâiÜýÓÚµ·4øÿv.bv¦M솭»,‹8²ª3êi foš0ÄzŠ¢5ý4Mƒt™=9¥}kO^MÒõ¬ùeؾh5¹pW" §<6ò ´Hqê*²jÖ3²ê,ö©¯¨ÚÄŒþr0Q’¢ÒìÑbÜ[éð¯˜ñ¬`zVtW1Ý;ˆr¨>µŸ>ª5g!/L÷«:YýÖ¹±‘[(´µ2m7¡e÷«êGCQµÄhì¤çœ–d䜑ڕ`I9nÇšb?=dQ´ùÔ øc“íNpÂfJ‚pA+ÄH =¨K.6¾)Å<ÏÈqÐæ£ƒÊÏzC##coé“˸0ÈN:©õ¡¸‡jàëQÇ4r 9û­ïQyq¤dn!ׂ=iŠúذŽ@àö¦(t›ËeXgñª¾yÏ– õ§µÄ…ƒžqE‚ä7V¥&fŒô4~ðÅÂgêÀ¸Y$ '¡“áb²–ã)ÎÛUH=;i—ÍU>XElV^~•¿#š€-*ˆÓ“O ¬8ÇœÎ6’i›Ü¶1Å4˜Èã?γµW1i²) †«ŒK( cGRu„ƒÐgqVb{ü5t«w"mÉeùEj8o˜Ûžj–ƒl‘B·jŸ>jÝåÔïv\Æ<²{V—\Å/„&¥¯ï‹•´Ûh·"È@U#¥M­ÉÖ°˜X.ÑÒªÛ³5² ñŠ®±rدۣ^1ŸÎ©Åæ\;€@ó©4Ø܉½;R‡mÁÃäqSÔkbš:Ån«"õ^í\ôE¤¹)àµoܰhÊŒ€ž+žˆys7æ”z–ú6øÆ9¥LG&IÎ{T3dº–Ó!ËŠ²ØÊNó ›¶õ‚¬.2yƒ)Þ¬¡@ÿºeV`_¯éNŠ»°(r<+tÉÇ4À2NsÚ K†RAè{Õ°ŠŸ3ð€ž ËϨ«°ì[Ër¸$¸àU#É$œƒVmrÚ„ ð7Õ,£Ô¢9EúT¸É¨áºAíS U#‰î5ò1жNiÄ ö BrZiµ8N1@â€WÖ€phÉì)Wñ@9 €qHy›ó(9è)Äd`ÓT06h )Ã4Ÿ1Í(ÉúÒ2h§a½(£P3xn 8.4 Œ÷Í0ŒÐs·Þ‚piÝ>´Ä1CJ ¥,@†4§šRTcŠ1žôÐ3Í<‘Š^qÅ&~ZPhFqFyÆ)}³FïLBqKÛž´9Å3Šn ´åÜÜ;TûV7žS…µ)ˆýÁǽCw£Ý@@00=ÅzÀî©ç®1C[Dà3 $tâš­!8Dó &;‹i9beFõÖé1¨BÃ9ô5~DI_`ŒmÝÎV§Ž>UÂÒr¸ÒHƒ,œqÓŠR>`;Ò»°§Þž±’ÂB1Ú fF­ÑÉ8æ²<°ŽPòÙæ·5•;#ÇO°X¾âX úÕ²ÄcƒµºqU^2ÓüÇ©ÒO)YÙ3À5‹>§$—$í 3Ò´„nˆnÆÜqev¯ZŽáÙ"(^µŸ.©åªyG’9¥KÓr€0èy"©ÅØ9®iéó…”L†â·­—‚qž•ËÂJL®ã¥v6ͺÑ$`>•‹.#™·1yõ£q ócŽh#çܾ™4×;ð1‚h(A8fÂŒ{õ©cðÉà~•P½ùéK (ž({¥Û˜ç"¹;6ÙvC6$+§¸—l È zW! ìWŽ{ÐöSzÛËV+·89ÝT®Ü3;. “Æ)-îØ‡PxÇj­&¥g"-Ï©pB“EeŒÉ8Ú>õ¨‹…ÜÜcÒª5Ô2”(à 9Å^·M‹—Üy¬ê^⎊ÒÜ-²€ã<ÒÈÅ[Œ x,#ת³ß(=iìh8Êì¦5àõ¬ }IX8ç±°«†ì:šÈ×É NNyÍ+•2s¹ÁïS«mMBîÉÈÕ(—h#ïK© Eæ“Î ËêÅ›P•ˆÇ5Õ?Ê ŠpEswÀɹþöO¥-Ȫ®Š,‹Š…š· ¶‘QLŸ>+sžÚ±Êñ@ç4âzAè)ˆ\qÅ!8§é¤gÚ˜„É¥€0(ÉâÑ4d±Àr½q[¶Ð*©Xh=k—š2—R«ƈêÂZ+Úf¢‡IòŸá­BÈl0NkNÓí|õÈ x"º8­¤–ÞEcÆÂ>¦”­qÆö8÷—lijÍhi’_®áœŽ=«&xž9Ÿ#=ê})˜_Fª9-ZIhgÙ,bI%Žy9«¶ØP÷2HØ"ôoP)!flŒã‰±Zæaì¹ûƈYºã>´—; Øf½C쑊MXiö5C©Œ.Ni¡”1ù‰ÇZd#( ÏJr‚Ù #ŽjJ$PŒ®=ÍIÆìdtàT89ÎàF;Q’SvߘSâYÚ×MCíÜpH®œ»nó]gŠ'vÓ£FÅ\Šô­é­ *n#Ç4yщ c¸ ªã5¥ˆ™ãl«°/fíÈÁ檥/<E€ë´eilKíák£Ó‚-Ÿ¡5ÍéRmÒ‰«cG˜6’9É®y£h=M$λëQ™D`’0Ý©Ž®wÆGLs(1Ñ޳4 Ÿz 1–qKy"ûÙÁü«=.í,7 ¬pjÌ[í&pÇ)ÔS1ÈÏÞ¡;›±4G8‘¶ŽzÔ¬Tž*„&ñ' •eàT³Z>¡kæD@–?¼£ø…UÁÜ8&¦ŠêKÐä`ðئ&fÂlr8À©tð{ÕÝF×2¨3Ë Ï•UÆXõ$8l1­‡þuj‘umå·$pj´*‘² †_zYaòn’XÎÐÜQ8Ý\¸•ž&ó Œž*-¦3µ×qWg?½INÃùÔÒI“R­ÍbÞbŽ^¼šx ¹S®T ×Ң òA¥qsÁ9ëU.#ó-äTêTÕ„cžiìªކ©;­¦ÄÖökŸ›¸«-àéJ¤#|Ã509d§µ&õ¸Ö…-Ußd†z›O²‘ÝK&ÕOÖ¥Ô#‰ö>pÉé[0Cþƒ¡ÁdÕÅ»· (õ¬MA›í§û£ŠÜC•ÝÆ+Ttäó–ª@õ+ÝÂÑ!-ʰÍaÆ£pqÎO5Ð_°‘ÉÁ^+Ý@Äãm#E¨ñ…‡hnõ^VŒήÇÉr{Ô/lžlqJ娫0&ÇLdâ±¾PÙ=3] é²ÚNkŸ–—=+ZoC»£b •zzR4  S­´!¡Ê¯¡¦[~æ8Åf÷7[a,Š{ ë¿©‘®ÔóžÔ®Î«ÂáMAv{‘ƒ€)† 5"€ê04¾Cs´P"4‰›ïqRÄÙ8ÉÝÛš•(Áj’(¶¸b¼úRl«`IHð:WíF/àä¸`TÕ‡2¤œjx<Å¿·—Ç5,ês}*N§ŠŽûµçµI’­ZØá{ޤ<š `Њ&sÒ—´œQ¸cš2OŽ”£×ŒpzPzóIž)Øžô¥r3Å4gfÂði·c¥éM%· xàg4yÍ $¢¢Èþõ £Î2:Óä{ÐA⛂¼Šb$S¸=ê0½8Œc˜‡íÉÎhèM3%Z’r}hr:ÐGJy¥, SÜñNÓO#8§ŒãÞ€94ƒ= ¼õ rµä _­7oÍžÔáÀ¤ä· b—Š7 PŒsMÜ)Æ2…h¹5Áø†ØK­;O&»ÆÂ¡Àí\6©#¾°Û‘‚ž7zS@ŒýööØÞ>n*D¼‘‡îØóØU éSû@( Åh[û>T*yÏzWÈ£šâ9]“£võ©Zöí™~}ª:ñU–öÝ®Z%pXv¢ó‹ËµAϽºΆÞå®âù~ðëS(¸êkÊf¶‘ëÍmHù¸äT'rÆ¡$äc¥(%dõ9ÇjYƒcÆ•²vô¦˜¼r³=)Žáøç§5ÚOµÉÈ*|`nÀΚ0 \Œt4 6Ðdð8¥ÌE°3L :š«Ä އ¨®jà(“*r+¢Õ$Ú9bsô®nÒÊŒ±¡.¦r`ÀË °%@^•Î8"C“Ð×cý›,QJdáqÚ¹»˜!ŠV Ç$úVôÚ±œ•ÊnPø$t«º4©ÙóWtl"¬ZAnÑyr6I9¯¤iГ3ÆÐ¤ïU)è =ŠˆAʪñØ×K¦†kG‰Æñ”`¹ÁúWGm¨éÅs³H¡ùòÇ›¥ fÇ\ô¨šNqÔúR©ägߊJÄ” „SL8mÊÝ:Ô1 … hû¹éš`,±·`¿xŠç-mRkÂ’(ÈÀ­övTm§:V-˜o õ'Šº‘DbŠWEG­s7x7rc‘ž+ª€4¾xòÎ88®mmKÞ˜[*sÖµ£¥Èš`ؘ(ïÍvšeŸÚ#G˜Ê‘È®F+FŠwpÜ'Ö̊ʱÊÀ÷•MX£Øí§ùFÝÙ'õªH76H¨Òyn#BÃîõ©Ô¦Bí!«6l†”Ú<ÅñH¬Öf8 àZè26Ø;kñtª¶ð¦NíÄâ”UåaÞÈÌ}R!hÞ¢‘îkh˜œšÉŽð4¬zœN“r"„Î1Íj º;êo Ã[e9ÅQš%‘H%UAU#»šÀ#oÒ–e2G÷JeÌ †¬Ñc0ÁNæ¥È.߀¨ãÁÜ[ ö#¥>L*Ž;☎oÅŸ41í\×&28Ívž&`œ­q­€[s[Ãc î'~MYXÃGÍU-œÕ¥p01Z0 1’qÚ®•㨥X³‚:ÐÀØÓã#MÀ¹®‚èm&{ŠçX„ñZÓØÂ®æõ‹»Z¢…õj6@òÐÒhj̇,@Íh=º£¸Ž9Íg-Í¡¬Q[Ë´€1Žôã y`±«£tU$½G‡Ü×=EA¢!Hý)WËÞÈsŠ·*Ä ǽF0DëHc@aŽ*guéÈ#½$ñ.Ñ·ð¦<Ž£”ƒÚ€ óÈnN~•bÙñwÜr\TÆ =ªÄ,Æúß p‡°·=fÝp¿J˜€½Enß¹O¥J¹$î4ÖÇÜR29ÕiùëHO4Ä4ž1@Ñ´S° ƒƒÞ—©Ü‚zӉ怊i'¦i~èÎiAt °ãš¥rði¹$fƒÔ©“ô£h+žôƒÐRÁô¢—ÖŠPÝ“ŒÓ€÷âš sOQŠd‹TÒ(Ç$ÑŽiÝù¦@<ç¥*j\q@± A¿â”FM äivþTÀœãSÏ MÜÀ¤ny $控­;§jCŠPp .I¦äZ7 p( ïOX4üm ïÒ–<ð)¹üéÁóëÅ @â¹mV1ý Är1ÍuÖ¹S)¨¶ÓÇ naͤý¢ȩ̀ôªù—M³@Ëœq]eSÁÁ®gÆ. c¨'špW–¢šÐæ¬dv½V_½ï[л™Ç< åf«‚:Jél%]èIÉ=jë#(š‚M²†*px®_|HHçÎ;`Æ+£ƒjÛ©bxú×:5ˆu'éPˆð¥OzœÊ¸Áâ¢c–%ONƨ¢œJÂæPn3Wƒ)Ÿ(pÍÔöÍ)-œô©¡ &Ìéš„—*všœöÝÍBY›,·4ÆTÕmÞæÓbNk˜žÆìN"Dl¯RµÙ.Tc§ZYCÎÜ縦ˆ”S3£YæÓ•Èý5FM ®% )F'Ú¶Ý tÈ¢>¬áJï ÒF;øq‘ê*í•‘³Ü¥úûUçÞq»Lwÿg“Þ‹°² FÇ*Jk3yu ³ÁôÄ!Çó¤0‘•Š•cÞž§a Ž1Q•ŽN1éOIVBNiˆY2íž´…þS“ÈíQ²1‘¾cÇLRFK>OÐÓd`}™ÍsçU{=Z]é˜úbº ’’ýÑLšÎݤ,!Ÿ×ÓB³*[ë1°!mo°¬Ùcï~Ò‘ÇÝô®“ËCTÚ¸ö©aŽ(ÔrO¥5+´9ˆ"k‹µ„Âv’H«zu‘MJV0íŒgmt]Û‚€9b›¶•9àT¹\iXƒ ÎÔÇÒ€ gqÁ«+¹Ø…×4Æ„Œ‚:žjJ# 0~^H®CÅèÛ!r¸Ëcšíd å¨ôÍr3?è°n<‡Æ*¡ñ OC™¸‰cÓ¡e'qc‘éJQŸOi:@ü*Ë@×:\[1ü)mãó4Ç‚+[ŠÚ”m!IfBBà±zÎhÙ£#püFÁBŽsœÊÓ5G·Q `Æ·fA*¡pÅCVe'¡¤[fwl«7aÒ¯ˆ7G€>qÓÞ¨ÂÌÒ‘‚0p2+T6ÕÜã ‘œuΘñÞ1›! '*+KLÓ¢Iãž9I9äV®\L0I?JŽÕÙ[jƒ«oAY¬vŽAëH«ƒ·9Ç¥Ah²%˜ç=êôJ0I>µ®åa”fMF϶eSØg¥Zt@j¤ŒÆV!FïZMè4‰¤”Áàš–= ç•QUÛï`‘ùT€:œ ‘¢A(ÉpÁ¡åÎÜ0 ïVÆŠªÜš®î$r¡2ü©ƒ1xLsüêìÈÉà u©mÄBÜd oïÄЊÝ?}#mUíT®. Ò·Ú¬ßKˆ ¬›‡µR·¤e ëL ¶››h#å«d*>BãØSŒb\.;Õ¶o.U‰(yúTcIwG[‡)žQ^HÅS[¶`S>µ*ͱü·§µRË+ëFª«öÃsŽi©pNÐÇjžûcC‡û¿Î3" †ù‰=ªÀpTÙãší_†Q‚J`R¬»‰À8Å ¥±~PX…8ÛŽ¢’â"Y#û½µ:_º©ŠXܺùoÎ{Rjè6g324DRyÅZRJäKwe*JBÿ«oÒ¬µ™ŠÜ>AP+)h;¯òŒžµ>)Ì®sìiòF«6vë,lߪn"8+óMëÔqW~Î#L– WÒ¥0h>C€zÖ¢@e#n5ŒX£Œ Y‡Tx\ûSµÁ3hùÎ=i–öCí­.àWÅEw¨C%›Ê¤`/#½W°×í䪮îÜ•¬S±WW¬,ÂÛ>Vcɬ¸ˆºÍiëM ż»Þƒ$W;¯w ÿ*V5L¸>[ŒéV&s·š ·pÜ3Žõ`J:±4š)¯¤c •(ÄkÐgÖ¢.Àž´Ý€©ùŽìÐ!ï1hÎÌ1 Ò€œ†+( pتùàî]æ€cœ·QÆiHUÀÎ*.Äl|v"œ‰Iõƒ©[4ErT´âï&VV (üÉÙŠ’Ld ŠÚ°âÓéœÕD€,¶ á˜|Õµyn–ÖȳPhœµV‡>Ö»¤%¸9ëZ6’2ü„ÀT*$–c³îÿ*Žv{R²7 §œUî€ØˆW<Ú¤e,Ìø~µ›%çú8™HÉãªðß<ƒ;.PlÔ‹O¶¼»TnÃÓ½K{§‹Q“ ;Š“O¸ŠP­åÇZ¹}+\m‰P)Ç'Ò˜7 Øeó!_îã ¨ï’O²”z÷§Â›j€1š­©Åw(Ž ã3zP­rnÌÔ²’ERÎ úš§¬XÅ12‚¹=ënËO—K²=üͼ‚+RÔ£¾´jãkt"©nKÓCê ¸'n*†ÓÞ¶µKgM>ÞL ž‡¥c7Ê8<Ö±ØÊ[’ÛMåJ®;ëá½ó’/“æ"¸Û|yéž„ó]ݵº­ªH0N?*™•u‚Ä/8¦N[`PNM I Á©Ìx¨éßµAfNWÍ(qïR¡Pv èzÓZ?™‰“Ö¬AnPŒ“Îh`‘vÜ6Í›zzTê `¹8iƒàƯF¨‡8ÍKe"ÊíÉ:桊H/^õmÑeÀry9Å4@¨1å«)êjnUˆJ,ò„®}*Ä‘ùq…ÝM1U(? “æ(N>™ „AÉÈ&œ`Ø8%N)Nåe=ZŠiÛæ^y^Ià×iáX--¦Û’ÍÖ¹Ùö-¸ùÍmé×ÒǦGlwTOb£¡Ð´ñH[qÀ'¥G2ÄFKàgŠÊ¶óÎHŽõ¨Ãz€àdv™e –ÞB«£Ò§¶¸Ù‡¶*F‡Í\"/åU$ˆ† ¤Œu qg™× Ü{ÒÂ"£1ä÷¨y`¥IdDY€bUi r*"áXu©dŒBHô«ÐAk¹flûzÓ&½H£ýÔ`_J`ôéinYÏÎGÖ {‡¸]ìÄ‘Àöªs¬÷‡Ìc ÒÛï†2¯ÔP/2ô,Û2…ôõ§"–›,£ç¨àýæ8g Ÿ>᎘ w$1†bC£°ªÅ~ó®Oµ“K!îƒÉ©VÝâ~¹SךCEk™O”ª£$‘Pß™‰U88éSÏgœ”È9õ¨àýîè&áÇsC2áFzwö«Q»ÂC!"¦}2X÷,gzž~•QÚXÆÇ\zV-Ũ‹É1f'Z±+ǰ`Õä `õïJKn?ݨ°Ç¸ ­W‘C0ÛW6¦ÁßÖ£p…ò©±+‚® Gá±Ú·|;keh^(Ô?0&°‹Ô€Üö©EÇ•9½9ªLW±¡­ÙíÔë…vZå-­Ìås‘Ö·.oÖöÔ® 8ÈÉïX«9ŠàG´…'œv«[)\—È|Ù éŠvÖÎvåEiPáO+ëIÔé™—æ-ÇJ¬HvèsëR‘m–‚ îŠzíÏ^j eséRDTÈ8¤ÊLµóŒúÔѧ™&Ö#ÐTyaòX)÷§Ì@ PäÖ¤«’Hp*8N/áçpéOYÆ!»â¦†Ü›ˆJ¨Îài=F܃nŸJ•¸è* ~-”÷ÅX_¹škc‰î5O< FÜM9@&—€iˆCÓ‹€1JH'¥{ÐM.8íJ>Ôw€¤$ 1‚hÀ€#oÜäP}éÈ$q@hÇ=hLàñHí¢—>ÔP pxþÆ£ŒÓÇ\vªð®h"“ Œr‘ƒ@ Ž: p¦ùPy€rx 1Hš Á¦!Àv£<Ò{š2p@ cŒSBirHÁ¥ÏPA¤ ¶)vœšC‚(Û†qHIŠQÁõ¥ês@ E9†E!Èn4…ˆ÷Ék_6¢ÅOak­=+’Öʦ Äú ŒÔ[ ÕØP¾õL2+ ¹µ@Ç“V$U…7ê:UÔa AyÆMHà ‚E5”«c¬+U–U(çå<ûÕ‹}r9¶ù¹WÎ)Úâ¹­¾òeû“L{fÜp:Ó¡h’·â«O®;hy=Øò)´Ë%bVÉ8#Ö†(ø-Øg=«a%Û+=¸«zdðÃ/‘&L'ƒº—2¦ŒsÀØbÊ9ÇãOšhÔýºY“Ãj»ü™¸Î@¬Ù廬Ve 8ÀÇ4'p:DÔmŒ~_˜¹÷¥’ö#Rî=ˆ®7íAŽ0AÆyõ¦ý¨2-Ç\WbyŽ­õX|™6ÍéX’ÝH²y‘¹SÔæ²¼òÃcµMÊXF|÷=©43r×TóJÇ& õ¯,£å Þ¹abË bØÁÎEh_ë°AE,Û~f´–»mÍìA,fÜO@*6Ÿ#w Ç×9a¨-åÂÄÒyC¹=ªÕþø¦ m?ŸsM®á~Ɖ•d™wp)ö÷ÈÛÚAïXkv‰&pÀѸ¥:”-"ôRPk7qÝu:G*‹‘É=«/Sc,a@ç#*ÝG"+&p'íÍÂneç·µEojº‚4,vmÉö«CB…}:Ô-nîÚqØÔ\m÷&0ØGvŽNå‰qÜúÔcU·Úöò/ÉÎßaYÁš&ØÀ‚8Õ è™\9ÈïÅZ‚{‰Í­>Íß9Øy_z×½Ñ`¼·ym|tìkŸÓµI U'œdŠêc¿Ž[16ï—¾+Dƒ™äÚÁµH'ïÎ+EtKR§ ݉ëVDÒÇš 29þ>Õ5ÓÈ¡$›‚;Ž•LI•lmE°òûç“WÄ[\¿]Ý*ˆs¼H­Ö¯n,£œHDC±Ójq"¢–Ûž3T¥ž8Ës–Ïj«%ë2íLîúS°®_kçlƒ)ÜW5«˜ä»Qa ` V½¬yM,„äôö¬K¥ò®Ÿ~zñT„ÃQ‰—F ÇÌ}«—={ ìu+ÈŽŽbÆX f¸ÒA`3Åi9:^•=ìªÑŒ¢°Ü}+½6-¨ç5á ¼›I¶Ç“¸e½«VæöiY‚§Ê*%vËŽˆb+¬€8§ºoõ& ŠYsu«qÈêÛŽsÅC)ïY6Ž>µ~Ûa@$÷" ¸&g5nЈ…àÐöZŽ?»Ë*ôõ©S*a‡_JO™†“R"ã…5ØTŒsša˜d`c`íYKÉ®ÏÄÖP&ÞhÔ† Šætûa=ÁB;zÕ§¡2Z–ôä Ššü³ ¸[Ž'lGj(äûÕJ4[FÐÑ}BÚÉ*@þ.•©d¯*º|TPÀÁUð@µ±háÓ ÅL™H³k¬ØÇž)R9&c´à‚žŒ¦Pˆ@zPn~Ï3 éP€x³›;AÚ*-íàYg^õPË,Ä37̇5Zù“d¾ÓŠY®l ÚPG\U u:c²0¶hŠÑ’Q–}éòiÆiÉ?xt£@/U_¨§%ÂÍÆÞ â¢½±†Ý–8d2{"ˆ@ˆ.ëHoBÛ,`=(9*?uÈèipŽT.IôÅJîYB3mÚ)’EæùCj¥3y1»­W#cÇ>”¬ÌÑñÆ=h4s0b¥Û§6ó<ÜúÓ" ¹È‘ÅI°œT’â,(ù…A,žcg”u9éÖ­ªª“’OÍeÊì.‹gä#ô¤3 6§š¶vŠÇ¸“Ϝʫ€8–÷r¤ RÏ”Žâ¢rè¾YÏQéYMXw¸ÉnT¾ÕPsJ\÷Ô2[œF)¶.ɨqq”;@¦nm£*O½E8QžjI"šߟúÐ!^&e°>•ZH÷>ÐÙÇj³Ùålžôß'’1ši‰êW‹÷LW/ò§]«Il<¡’N emÕ˜zö¾[Ún!wFiÜfÃF2Ú†šv ÛªOm=¤ 1it#š»Û,cË?/~jYe`¹Á>˜¥ÌîmÌfÍjòÀXDP·ñÕÇÌŒ³²±­w·2M-žÌcÞ¸‰à"핉ûƶ¤ïs:›£VßNf…Yq´Õ¦dµaQ‘Ö›dŽ`RŒrCRάWsMKÜÑHjÊ¥²ñÚ©ÈÊ$ÎãøQ)pHäj„áˆÀ"šAÌÉà¸óð ZYc‹æÝYQ£|Ã$sVÒ \ÆE ¤Ë©qÞƒÍXWhCY/ªJì"Ÿ¼JãÖ§•› »J˜”zÔ‚iÖæ<}ÝÀqUm\Û ' =;ÔÆðyñ\|Ã<Ô;Êç«Ú(û<~àUœãåRÉ·[FÙ«#=hŽÇ<·äiG IÎh^¼Ó)Á¥ÇÍ»4§“ý(YŽ2:Чֶ8›œs@Çãq¦sŠzšF\s@ äžh‚)FG4ºÐJ…ÀÕ9ÏZv Öj@IŠ)¾h¢€)ÆãÖ•[=© 'µ9x¦‡^”ÝŽ­×"ž Æ{Ó/'švÐÓ»>Ô§§^h w¥¥#æ  t¦ÓšqãœqHËèhè=hëÈÈ¥â‘I#Ž”fæ”;óN N Zð~´W½ qÍ®(SÏ&Œ÷ CF29®OYv Àõ"ºÖ®Ä›ZëF6LÆTdÐR"DÚçcê ï„wæ>ÕVâëÏxâ¶l#u&¡š··¶ç?vî#\\\I¸nažƒµ £9½ÀÍ>ÚìÇl{Õ=òÉ1 núÔµÔW.£!$’µhÙêÉm#°¬]² èi¦EŒFæô¤Ü»¨ß‰˜²©°Íg­ÜÑcl…G\fœÏ½IíTåäã‘T˜›6-uq:#·+ÈÏzÚr v5ÅÃ'—tŒ6šé^þ;xŒ †$tªûš>h‰ £­QŸYIŸ›¾k]rá˜ìF{¢ò4Î]— zí ¹«.®û˜²î~Þ•šësy!p~lÓ±  œl‡,­ó7j›Ø[ŒŽÒ4'Íšt±ªUi]ÉÁ“Ö£i7&NI©»eyÇ’ªsÞ‡ Œ(9j8nmnµ"”di2sI+‰ò ¬wSK'uEóW¥!À;˜}Íd²2F1œ“Í29zƒúÔ.wt¦®Œ“¸Õ"Yd˜dQ˜†}qMkH@F3ïRãpÇ.FCrh¸ UPq³‘€éH<̇°Ã ¥hð½I¤ ²@C=)ßA‰ò£yùðÕ'µG”³#œÕö ìZ²9JIÛ`h„ìDÀ8â¬ZÝ”÷»Ð †L…û”#]œæÐöcå\ 8àôìj©Ó~öÍÄz·ç%¿‡¥;sn*¯Áæ’ml;.¦p–æÀÜ’²tæ’H^â<¾P“Å]olªçoÒ˜[ÌØÕsŠÖ,ØFÖöâ'|Ž¢¬lê6õè‘G$štŽ ªîê:šË­Á”ç|Õî óO¸Xgh jRQ³´sŒN±ÓÞöY°ÕqÔ Éí£6å£âoçÛÃå3þäœþ5um¼†xqœf-ºÌ ê¹­ ­rÌa没?{?J’ãT·†! o0ƒš-”Ŧ:¦ “Õ—>žï€ç© Ö±³ZÝŽù¥b \ä U׸œ©!?j+t·M§ï7OZ—÷žx]Ÿ»ïT"ƒù¯ÉB 9ÅhÙZ»˜a4†4 ÊIç¡­4ûƒíHYÈòÊ.TŽkhd{¿›}k¡|) sëTXƒv (ö¡)jšj 8ã¨\þ5ËXY5ÍÁP…€¥wš€ fìÀ’G¥s–¬l ûD]_+Џ»"dµ-ø`H°Ïö5´° qõ5GÃXòn«ÉÅkËæ"íΩ“ÔihRpQÂ&2:ã½Mª7o^h‚?Þ–<ŸSR´[XœñŒÒ¹HŒ—œ£µ91»-Þ¢–B#ù2(‹æ^yɤµ¸ž„mÇ&¦„¼ïT×~Ìþ•r' ;Òe!(vãŠRHÛõ¦ ¤ýidÏ=}hNEidÈõïR™p„žiÅ9v1Î*Dmí¸{拊ÃTí»Æ”•ÚT ŽidUb èEBû1ãéM!%¦vP>•‡4_’Ý}+¦H¢OB`Ü îÊr3*âDˆµµ1éñÀϽ‹d}+™³ÅÙò‡']Nµ ˜#”¬½öâägo5q؉nY´´hÆéê I­Û˜-m°{qZÓƒ%ÌkŽ1Ò™âAöKbX +ê;hSŠºU»’I-ÒµÓFź̧"ˆ"¬m®6œÖ庇ˆÈô¨“-#žÄq±H9ëLX’RA d÷­û›[w„ˆ íŠÏr+€}é\|¥U·HàC¬Þa”¼f´å´eBPç½B°\ÚÊ»sÁ§tM™KÊ#rs늳)0À@ÉQÍ9m#Œ—È:Ukû™D[vƒžôÅ7¦p½O @Œ“‘éYîÎì§#йnîèA#ž´9B® ¢)cÃgëNrpàRÚx ´AÔeFGJ…ã ¤‘œÒyŠdÎþ=)Þródï@yEB’M=äòöœ¥IæƒUÁÏ=)K¹ ñL33ÅÈÇUf·p›v“š“{1ÆI«)rvì‘zw©Z¨­aóYC8 k:Ie›÷ÇÏ8íV/m%žttBËŠlV$mÓykŒ•¨j sæ&Òê-ׯµ^ýŹýÔfR}GÇY$;€ íYl2(bmކ‹¹Œè4°\©4Ìñ‘KÌ^CcCÌ|Õ¨™]za‡Pj%H…Yn/w¢áaW³œf¤!] ‘P#`»IÅLÛ•°§ƒJàW…Õ“2,ƒÚ¢–-鞬¼ÔQ v©î4Ëfo8à \f¡ ù:ýêëö•”tW-ªº““œZÑÝ“3VÅZ)Æ3VˆÊàò*•“³Û cÞ®¤‚3’¹4¥¹IŒkA / šÊ1¸é×5®÷lÈᱎÞÕ”ÒºÈHàvH¤Ñ‘Ê­X‰š0¤¶S£ÞÙf>Ô’n| ´ØîX7JÑܶzT3]#0\ `FV\TëÝ’›‰´ FÄë» ¥H¬áIR¸ÅK !9ü1Ò¦†1ñ3®NáQ&4z¥‡üzD?ÙtUlˆ6èqŽ*Ã6NL>D·ǵ.3ɤíGQTH„SÜv£{Иæ›Þ…94¸Æh¼ö¤$š^…ù}(”»AåW§\Ô‘Œ±ÚâLœ`õ¡‚#%%NzšEŒã ƒ½JUÛb÷§nXãÆ'“HZÆå“ia´ô§à³c°§¬ci ^E1ت‚Ü@Èdv-†n*6'Þ¥áÀSMòÏ€sÈÄ*1øÇ"’ó¹>õ Ú¤ásšP¬¤0 Ü¯Þæ–wQÒ‚H?!8i²'›Òê&(9@ÄŽFEHIŸ¯Ýª!OSHŽÇ‚؉%‘öBÌ[n;zÔ6÷÷VžÊÜ9¦Ý ¬jÄztæÕä j¹,iÇA½Hìe{Ýé<ÛG'5^áäü¸ Kƒ÷¨…ü¸6£Ž+GN±7܌ձ"Õ­Œ­bžs1»ŠtpÅʆlzóWf•<¨É#â«Ã ˆ§>¼Õ-бXJ†`}qÅZ!T–RIÅ2=¬îyç51*TùS äÄr!'njàÚÈrOjʽž=ûJ±aÒ–ÌÌÌѳ±5IèK,áždaì1VµØ¿â[<óŒTð[~ö2@ǽYÔ¶Éj¯CùT¶4Šv6 ØC—ùºŠÑ÷ <ûUQû»uN=jES·p'½&RÜ&wØÁsžµH;º’~_zÐÚ]I# ëUÑáð¤Q\<§ ¼ŸaRdžÁ ©¡ÄÅÃPn¤ `©ëL’ĶÀ"“ó «5¬N‡ƒÚ¬}¡LdÊš„8 ¶3HzÅDY«Ëb’0AâµÄjƒ©©§¡¥qXçSqpBšt´’Çéš´ñ,S‘»åìMC;G&8ÀéŸZ¤ÉhŠ0àŠ{[*¡*ÙÉéJª".I>µvÐÀjíÜGQóSÕ‘ÏÞE1!Ú¡—95Jv’ #­!ÜÔ–çË…°yþ*‚E òÍÎ*¬ÞmÒ¾aV^áNBEc9tC°®énÙ=ûîV_” {Ô.Žä3ئÉ-Ò¦ÈW¹dEƒ’r)`œ¨â’9Xõ©áIÎi rí4)Rüah$ œ‘ëJ¹fUr@É5"͆ëYâlÈ1ô©Ÿ;7 gëE‚åù™pÕ$aÁ ÷HÈ5™†§cO•<Ô ÍÍ X ÍÈbp7­rº£‡½p8Á®ŠC& çšç5±}'9Éë[RÜ™ltvZ¶—ªw)e±‘PnëéWt‰– .%êÀRÌæáòãhö¬œÍ,Œs\)Á»"¾âAÜŠ†BèÙ85¢¶#ÀëÍ<Ûót«+0ËÇjœ•®Â}M Žåd¶ÉËf­%³V\€*VÚ:œ Q3ø< –ÙWjÅ$÷¨ùIã·Ì95,p=Îz¶ºl‰"3FED˜Ñèyû*}*psPY [§Ò¬ŒƒÍT>f÷'š^Ø¡ÆiéÅPƒo¥)â±í@8ëրŠȧƒš€½ qJM9”ô 9¦žZœx¦ŽhqÍ5²M+dŠ$RæŠv(£PÐÏO˜üÂ¥\üTcƒRb˜ m§½9ËH8ê3OÈÅ1 æÅ‼S€À }Þ”.OZ7 S”öÅ1 }8¤f§wN)zœb€Í•Å)ñ¦õ<š;°=释@Ø4)À bž™4œRž)ÈÅç4œ1§pª)£€(ÁøGö«|½Ts]ã`Ž+„ñ'X*zm3ؤa¬Làœ¦¾Ü`zÖ™oÝíP2x¬Ùap䓎՜]Ç"Fœâ˜¯'`?ݺ²0ؤ۔£Á¬Å„ä± ‚1Nâ±X)#“’xéN’ `z³å Þ§(Ž0í“íK˜v1Ú=»9°§Â[¦1Íi\Y¬ˆLcèjŠ!‚;gw¥R•ɵ…›£|¼ãó¨!ßæxÍX‘šEãŠ#Î#æéÚšñB_p'4í›NÒÑÞ¬DlŠd¿3)ÆsÔT\¢« „‘øb—ÍÃ…`9M^»¼³ Š–øp0sÅd;ääb©+‰èX,¶zšü»c\÷ªË)fÁv©"ù¥˜ç°½;ÉŠ«2)®À7Ò™ 1φ 皎RK’sÍÉE9ËOqN H'š¤¤o£ß½N¶Ç<ÐÐ\˜`KdV¤¶6é©0}Ó:ä-c«e°¼ t4Òä²HIíEƒa¥ö¿$ß< -Ï>¦‘ W ©4ÖS¿Ê†Ãa܆$¶jVt mïLŠ?-2ÄGJäÜZ“$i>P»ÿJ‰›ù³Ò˜çk|´3–A=(°îg¡ô«1Fî*IªØàT›‚¨ˆö¡ŒšH€ocÍ5[j½G­&~`¤çÒ‘ð„rãR–F¸æ‚Q¹íQ¼™É^qL%°àu§`l|¹vàSp†>q‘My8ÉÅ8öžW$ô dk ñõ Á…È ¥Xx½)¥r¸fü(!o¹r>lw§ !¯>µ*H#Mª1šÉÛ–4\a)>TžõŸk"´à(ÆMh½@Î;Ua§ gg`z ¥±/rmBP¶Û·d÷Åd[šà²GJÓº‹ý*F=ý*º®d–4ÓЖµ6  ˆ…ŽZŸu$rD@PjŸÍ¸|ß(ô¦8gå_=3H¢È\@ Î; pi5O­F¯· ¬ïš<ЇÉ=…+•˜º•${P°–õëUž›vö§¤ìèR£4‹L•£xªÍk÷¶=ÍJ_9$@àž•Jk—j¶) dl— ÷±·Õ e‡'U—¢¹uo˜zU¯¼8ÉÞ³ÑH?tœ÷­ Hä1Ø?SRÊLl°€Srõ Z[´x*¦*yfC”äq"®²ìðØÙM–É£ÎAϰëZO埛©^án(5B¹“™#>_çOòÝxa•ô­3ÐpÜÕk¶Ârh.åü eP~QÈ–÷Bí7·< ÷­Þc•'Ò©OlÁþRÁ® Ø«$R|ýÅ $ŒÚ«’,¹&­)P8ÍD…¸|ÛIÍ(#¡9¡ˆ8läzRíSßš€6[úTªDC,AÒ¡±8aŠf[Ö—…„ÓÃç£kUK„xdƒiÇ"®YÞOj¤) §œzTw—«{ -¤¯p+[áŸuO(\˜…Í2Nâ„Ôì >Ɔ"¬° À†Ï|ƒS+)P£¨¦Æ’»qNX°À×½5•‘Æ:çï#axàžõÕÇ üÛŽOjæ5\‹¦Ï<֔إ¡ÑØqa'n ^hoγt‰÷Ù.1Å\Ü…‹XÏsDôÁKcŸ­V¹ŒDwàzUõ(xàäU4Éw a¹Ttã¸0òcÆKH¡!Ûó/çY—Rƒò± 1Ö´%u··WL–=[D¦Lñ É5ã#=>Þö)#ÎÖî g½ð’à§QÛšclسºaŒy­I'ia•Š‚{Ö ‡ xÅZ¸—%Ì*$®4ÏF³âÕ9ã­N\îÆÞ* ¤c?Â*È\ÕCáB{€ÇLR½KŒ´œîç¥P…cÇÞ½i@ÇJJqŠD!¹"˜òòzÒlšRªE(ÀZ;šhšwéí3½;½ŠAÁ怃ŠLóÞœ¤óAë@ ‘Þ“ÔüPayä× â’cÕò;¨®ôôçŠáüNªÚ¨Ê“…ÅL¶bÁ»nâùNI /Ö¡ùÑþQÇ©¦I$ÏŽƒVi㥹štM!*½– Tdô=ê$0 n=êÉuaÈ#éD˜!ŒÄ¾[Ú”3g…Ï¥Tü¸;½é0ÊêVd¹eB úU]ž3RHá˜ðIÛÌß…ZV%–å6Ãoï qëP¬ Ú:Žõ_x¥øJ‡µ KóÉÍR3æäàô©bb»[iÈ5¨ÎÏ~jò¡¢æL~ƒÒ¨Dæ[ËÇyœSæ9É­, ­vc—j烟jMêkäÈÅHŠw£å÷©6#Ž BîB“»ŠWthߤ¹8â¯A ÜÝûqË?“cx-ïÕÂîÀà7Bjõæ¹{xæ&.1ü+ÆiØ.‰î¡†ÖS ,£1SʇÀñÞ™Ô’s“Þ¢rÂAÜS`b•e;¤ù‰ì 00è5bP.ÕÁÇzˆ&9={ÑpØ]£ ÍÞ…Ï8¥r9<ç4Æf`AP9æ„Êï\g“äyÉnX ž•&ÝÊ9ÆêC%—p Çw™fÜiʧf Ȧ´›X.=Mlnì 3OÀ2I4Æ!É*:Q»j±aÅ;rX%+¹UyqŠ’Xe±TÓvOʧ½Eg¨A§±º™ „ðŠj#¬ÉªjNò&G éT¢÷7BkÙ®.cY'œƒ!AUsiá‹“Qǹí&v$äš¹³Mc¨Žri·mÅk“„uŽ5#oæ­Ù[ ©NöÀ_Ö«Í }ƒ9Ú0El[Z,6hBïórj#«5ˆ²8\/uª²ƒ#$TŽü±ÆqM,$‡`\f¶NÖq+IéÆ «Œ Œ¥H„9cØT3ƒ´/ãL *ùa– ÚC×éUD-ÄŸ›µ^Â6œô¤r#o‹ñyDÛÊúÕØ·0n;db¡hä/…N{æ‹(•™s€V‹g-!ŒvªÏ…9aOÓöùŒIÎ=h¦†W€0OLÔ ä1;ªÒ4?Ä Žf‰%S;…!Ü‚9ˆp¡3ëR¼€©$€j´Ò¼l|¡ÉëULÎp¤;☋ŠË¿s ݪO0)ÊñŸz£“ƒµ±žÙ«6ï½9œc4:€K"¥@^*¸ƒÍ:7d-“ŸJRÃJ™ÈûT‰#;®*¨BWîòMIè¤$¶G¥.ä± "…=óšcçbšÊËœž¼ Å~ 8ö¦1l«ôÍ4‰2«ß5:¶Ù0À0†ÊÞ[œ–?LS䳯vü ^xã’5Âã]Ñ‚Åk‹}œúÓ"Ù„tê*fÊ'9ª°É»‘Ç8¦‰zˆN«K :ã"­¬Š0’j‘ßæèEЯä8RõàûÕˆPB2F_±§·~4e·Ë’GÉ@\0ù£ÁÍJO ÔÕaÀÆæ F('­IH$ ä{ŠÏ—åvÜ™àŠÓ ªá»5 Fªp¼sƒÞšchË›,T¨Àªìy ¦+VDVÈ1ëT.` ûc=ê®KDpÞÉì@õ­8/X˰ÛéŠÈHùeLš|EÕŠ¸9Î1I†¦Â¹—·³H‹µŽ[iôªÑ7ÏŽ@¤;†;ýjFO+G4G!€sH¨BÀf¤„Æ Çå@ì(»Ÿ$}j¼Á¥3VöFçäæœP§ dý)…Œ±Ù99©%‰HÚý+GËÜ*7©{•nî¹,LRÜ,e]Â’ÂDDw¬¸ÕÉ+‚_==kWK·ó­d.H;‰Á§‰-mYÙÆéGݨi‰®æo–Q¶°#ÚœÇ"œÓù²—ðz “*AÇCPÄTfÇ(3“M3à œÄPx¦,jFæ\ÐÑÀŒc½A$ g&§åÀÅA$d¶qƒM ’Ff €ÄU±² ÄŒNõZ7Æ;š»ŒsÁ=ªd¤Uä¶8œNX$ꮺç Õv`Xù÷¡jèäRNyÏ¥rš¥Ò›ù¡Ån»º’ãŠã¯ =äŒAÉ5µër$ΫNM°+!;HÉ­ˆWv;Vn‰ƒ¦£p{V‹L~P+îií¤†0ÑŒŸj̆ÿʺ‘Xr_iËŽ+4 ºƒ±ÍT<Ée[©ÖK‚àmæ­]Ü,Öñùr}ÑȬËÖ-zÛHŸtDk^¥FqZÛbSó++bLÐUx®%È ÁÏzÕ{4þÊóZOñU}*ÛÍ›…”ÓV¸í©'Û®>ÍÛÌ¥‚ýæxVFùƒ S5dH•¨úUH$ñ1èXTÙ45¹î¶$}‚,õÚ9«¸5WO?èzmhk(ì‹{‰ŒrM?ƒßŠani ÀÍP‡Žš¸&œ~ö JPG¥(é@„¤šVcÚ‚Àƒ@ V'¥óÊæž k  Ö8ã¥?88¦°RÜÐg½E;Ë_z(=‰`Tˆ~\ž´ƒ”UîÙÍ9N7?…;åaŠçšÈÅ8„­wp{R…ÇJ¦{RƒLBàv£‚@4 gšC×¥8€GZ@}èŠBÁGæbqŠ›…Šîe/‰ŽÃÒžªÁrOcLÜþfp ÅÌ]ˆÎ¨6 ir¹Ü}j „`O­Oç,lQF{gŠ¥òYÂã×½£Få²äzSŒgfÜ{»ö22ê21Ôt¦*0L1æŸ0X¦7!nµ¬,­mQ..dʰʪžMP1 0E#—v[Ó4ïqlXvŽBò¢•ŒŒj£yjŒ=FEJɰrhŽ7y  »!@ È8¢B#s·ž*Ù*>Cš‰c,_x =ió «<ü6òHúT±H7ã©ÎsI,nb¹NÆœˆš§kNÌìʤãÒ¤*»±ÜÕ|½Î}êF›!AÇÖ¡¢Ä¸ÉxP˜=³Ç"¢•÷)aÉ3 í 'ËFéV”IéUœ$€}óRF¥Ô| ¤Çq_zåGïQ’©Ïj|‘²·ÌsíLÛµA¡Ø „hë×4èm侕mâ9fo›éP»m<óíZÑ2èºcNÃ72®Gû"†„Ô­­"’(#sB¼·©¬}57]ÝHÃ=°*}6I.ÖK†'©Út/ÍÇÞcÍ Ù4ê4/—a$mRsÍM` ´A¿·sSÌ‘ã r}*Ôz|ÓÚ8P:Ôs] -t+ZÀ$º‰ñ»­uŽŠx`XÚ]Ê\DX3Õ»æ8ÇÍëWK[s*ê6vÚ Z#`˸ð;zÖœ ³î?JiCŒúÖ„”’7g?.{ÔžR(ùÛðõ§NÍ’OZ>g >nôÀa‰P—S€†, ƒNDÎwã-Ú•TÄ¥F~´ 0 à ¤uíHÈùËcÒ™$Š###'½VóYH#'úÑ`¹`”D-ŒûÔ6øPÌ@Éýi³32: ‰—?xsEì \Å&tÀUe§Å#Ȭ̠ZL¤’OáPyAX‚:Õ\V B·½O椱Î=*W€?2ûS„e†UHæ"âI¼ ¹u¦“¿p¥D¯´Äc¶)K†RÑžž”4s˜›UôºI—`@¦±·¸_˜nÏ ©#•~ZCL×ÚAÓÒ¬, ñØ9íY&êM„u5oN¹"B$`WКÙZòÒH‰1'°ÎÝ@ÂBX0a]þ†]§¥g]Ú‰åTö44Ù7¹ç‚bnJ†J¶Ë"®wd÷kQÐþÌòN‡9çéYPJòÌ›ãëRÑ% çabçR£å@)M±‚wÅ E=Ž*4ÖÜyíNxò;P¿"r=(w^¹ã§ƒ¡…Îx©Øù`âVLg „#©¥¸lC-Ù µ]gpÛ00Õ4P·$RK >•jÄê' °´×/~¿é² Ýë®·ÃiSÅd]è\ê¡Â?9­)É'¨š-ø}Œš~ÀrTœÖ¨mÙM§Ž+;MÓæÒÚHÝ Ò´@`sYÍktRÓBA1œÕUŒ5ó©ô«ŽÛ1Î+9šýóéQ³*ñ6êHÍ>ñGžŠ·™:â:Õ‰“7 ;ñ[_boSfM4ãŠC2¬NÀ coSeŒJ¬)–‘hGLž=ê/î—ÔÄÕ]ð}©±«–Pþ£·qù—¤NqVž.h×wcQÜ#¥ÜÞaÀ$œÐãaÜd„'v==ªaŒ»`’:šžÒÜ^ÊÑ©-Ž[ßÒŸ{egkyŸ~é4(ô™R݉¶k†pˆ={Ñ]ê¹9ª7×}"ˆ•–ÀÀéššÚVŽ 3ÇNj¥#DHy#žÕEŸ|ÛTgš€ÈÌÙÅ_³•"Y ¦ì®Ö¦Ö$„G~6v÷ª¨>bK {ƒ’3Ò˜ò,131Áôõªò$–O,…ˆ6]ˆ±oýšÉI¼²äŸJŸB³yæ7’øEK«yr·“€Î%½*’³ª(Ú´…LO ÈÒI“ŽiKF " cµ5Ô¨ÀÆOQRƇ¹Y¾xÎ;Ñ€d7-ŒTö þ•$!–NW¯ze\”äcëP)Ý+3@ã9Rß/'Ú¦·³y¤X£L;w5ZâÙY«H×qc'=ëâòKû˦gÄj„(í[Ú­Äp˜ôËy21™õ®mc o‚žÅi3cCÿxQÀcÍIªNö–¤À>f88Ý(§ÄGEK*<ΰ…ÞIâ²Ë[iÖϨMÇuN©a€£ ©aj¶P ÿ)îjÌÓ ÷\“Þ®+©iXM¸P¹¤‘Ib犂ع”–5bGãiç5b¹U›yÚ qÔúR+˜ÏÌGµC$¡\àãµ:,œ]ÕDrç?(aÚ™ùI-´úTÎîem¾‚ª¹$8ÝÐÐ “ÍBáTçéRá³Ò©1$‚Œ=ñRùÛWl€’{ÐHceŒ{Š‹oû_AëS…R #è* €ß($-=„`†Î1NYc †#5ZY FN3L„«Ë’})‹ròÜ BñMY˜ÆG©àSp @?J„ˆàp) ~ ‚IE œIAM2…É i¥”€ÇÒ˜‰¢+,„1Æj_1GÉ·ûÕ 8ÛqC f$š´T"ðj?3h#õ§*±@¤HêŠÝ8敆‰$çi"]€îŽ•Z,*Ž9©w=hÅ´*«×‘ÅOü#õNÝ\ã‚@=ªáŒ’ÔŠC ý㜷)ƒžON”È#ùŽ8¥2œRg—Ê$ñÛš€)fVô©¼Á’Iö¢ÂÑŸ-·sQEå«.9·]ËÍYU%I¥fZFf3nÈbÝiÅ!6Cpæ]EzŽE[‘™õUè=iâÙtƒ•ÍZŽÙ$œLÇNH"Õ]ÒÔc={T¶N-¶O½>òßÏ‹ËzRÃH|£Ç¨ºå°ú•,ÄW7.窜Ղ‚kÁµC ô§Eh-!‘—ælšn×·$à R{²¢z¾ž6ÚF¸ãh«¸ã­VÓ@k(Ï_—­['SøPå¸ ãž) ç4ìàDlõªóšBp@õ§ài?ˆqÒ ŠR9Í)8àÓæ>¸ r¤ŠXž3Å<.Á Œ·Ò—§œSÞÅ)çÖ’2@ÁëN#žiÚ ÏµÞ}¨¢ã±KpÏ£žsÍ2sšUU($Ž´ÒŸJyàP08  ú攘Rã½ÓñÅ4‘ši4  ƒ@¥ ÇLÒgŒâ…#Ò€á±@ûÔ¥rAô¥NæShâÛ¸çqÆE;ˆ‡bF;ZcHòÀ¢` 9t§FÔëHcÑÕp\n#Ò›.Z6òÆw©b* M£Ö‚c?»©ˆÎQÃ0'Ô z¾¤Û×¥Lx,«ŒÊb¹cÀì(Å :ŽHLŠH8nÔ*°8w5cfÒ§ޏ  vñ³ÿ­R0{Ô›1&¹éVDl¬Í»9ìi6Æ®$uÁ k æ’L3ô&ã#tÊÔ²ØÎÒ(¨S—bxö¨·Èª¨$÷«¦Ü¸ÀSÞ§ŽÚ0Wpè¸ìPBû°3’:b®[¡U!f«Û"ýÕÉÏz•Sl„ð1Jà•€FFß—ŽjPQœy5ž=M:=°ÄŒÒ- ¸sÍFXü«ŒŒÔΠ®ŒTlvœ.*@Ë$“U‹æeÏE©FçU#±äT°(2 ý8éLCY îÆ{U”q°«pø¨äÚÄqœR+ÔkoozpA'¥+‘OÙ‘@m$pqš2¤ò½O…sÅW’P€ódÓZcƒ•éK(lNÔéY°Ž;S6Hö¨ã4€s1e ŒÓ>b[¥.ÒXäãÞ•¥ÄaE2¬@¿¥9’I?VÜÄçÕ!RþT†)Èà ö£–n¼Tk)éΤòÁþ,ô¡…ÆÈ7ch!‡SU¦ ƒƒøš´ŽÆC6ã½Er7Æ@ëM ™ò|„g'½MyÄá¿:‚Db§-Il6J9È<`Sjä …Âã§SI¼2ŸJ‰Üå†8ôÍ"°ÆO¦Ã%W¦iŲ ⨒æB†œ1Ûž)X|ÅÁå‘óu«Vjž? Ç‘v‘'’Ýò ÁíT„ÙÒ³¦x==kž¼…u+‰¤wz+¨nã Ò'©©í­-!,É0f=³TMûœ%ôk¦JÊ£{¯ Öa¿¹‘ƒ³'¥wú¦›j᥇r+’ ÓÜ™ŒBKE¸Zåˆâg„ëÞœ FqëNÄвÆcö5^RCüÙ ô5‘/Aò&ãÜÔ©à‚%9ÉãëV‘“8<ÔÈh®s“ÆhV\ò*ú¤@ýÞ U–Ürʸ“DʸÜ1ŸjXÊ• ŒTDçô¡f&¬:–¢*ñ•Ü3Q²…~(@÷¯B*Và Ùü*nañÇAQ‘“)ÐŽieFA¨ƒ¤M!1ÒýÀ©á`À¼ ¦_dšž6ùHÚ[$éM ‡Ö˜¥À <Œw¨(˜H õÅ"mp6úÔ\¶µ6)p5&´Üõ]-¿ÐbíòÕìwªo:|gý‘WO*1‘NŸÂŠ–áƒ“AQi4ìÖ¬-ކ“9¤ ÎiÃ3@ÅSž1Me­<)¤g½!Lt4¤m.sŠCó Px¤ÓQŽH4þ;@´Á’riù⎠çÚŠv(  ñOèzÒ nÁ¥Èôª¥°sØP{Ò˜Å*‘ž‚€ Î)w‘IŸšŸŽ9 ã#Þ”.4 `ñùÓ”ëLBŒt¤À_­0© œñRphÝ‘ŠqÖ”(Å'á@:ÓÎ:RqŠSÒ€):Òî=1NÆ cš^i9ɤù…[ŒW ã4ÝyRJ×pÇ8®#Æ2„½Œq÷sJ[vr‹!Tò [‚F„ü¼Ï’bH{œTÂBp8ã½gvt{2k©Ê¡Q´±î+(ÙQQ˜·¯½ZLî1±s@`À‘øÔ[¶¾9ãšYîwsÍUŠ-À|§5¡®9'·B" 9ÀÅ;Ú¸jÏÙÀnÏ4-¸ – ÔŠ¹Õäc4A0zÓÙhÀɨÌG;›¥2^£Èùx\})c'<¶…àþTæ 7®!=zÒ4h¾õ\çö$Ž” ‘€ÇÞÁ¦œÿz ‘±ƒžE019$Ð"Gs³¨Æ´óÀò*-ÅI=€­°z÷©ªÝzÔ9 ƒšv@\ úÓ :qÏÖ hÙˆç«'™5òHQH ÁEDŒ$¢Á'šd©…À9Ç­2HUðA85>æ'«œ) GåR¬»S'&€%VcŽôŒTzä~Tžb¶HLU§Ê¦wdúS@ÈѤä2äRÆÈç÷aG5 'ÊÌqz’Ö0¿1\㸪 ¶Öà¦âÇ>‚«y*N2@«3;Êœv¨c –æ¤cÑ«nÆU•B¹òÇ5<êåp«…nõ”"”déÜQ`+ùeú± RH6ǃǽ5»ƒŸZt›eÉ$;V-»•¢+ïE\‚rj¹§æêäm=ê±ER Oj}½à´q¹1êjã©,écµ 6æ<{Ó¯¯á°Œc‚cÜêÛ”21ù¥ÌS@ÐÊ‹3ãj·¢ƒ¨_ÿi^³©ýÚÔQH¦]¤ c½H©]3 ŒyQÖsöF”}”a³X¶;hDñ–ÎÒ2=ª5co½R$Ÿ1\~4Év—ÜOÍH’@Û€ ÄgÒ•‘Ç*w&=jó7“œŽÔ‹tàí½>Q\»€@ܹ5 Œ‡* {Ô±Ý'ƒšŽy޹¤®2XóÚ@aH૆Š­+Èe#­'Úà6E; äÒã;‡Ò« €$l¤;'-DUJ¤„Çù€Œb¤„€ ¨ u_Ξ7¥6$\F'¯Jqb­Cs´’}êDÉY–9ƒc!±ëHˆ2§G4×S»Þ¥IÕÆü{Pü†·=_L!tøÉd5SÒ€m:/÷E\ÁŒR§ð¢å¸„QדKœv¢¬‘0)Òž´˜ÁÈàÐ1øI€xÍ¥&sš/µdqA<Û@##ÓTœÓº“š1Å‚5Ix"˜WœƒH 3E3íEQÇ9Í;=i:Ŧ"AÖc8“¡§®0i€§/<šB~\ÒñŽ´U ŒS”ààSPey¥+Ö˜ëÍ(ëH×4 d性zæ9íK´dNÈÎÞ(™Í9O„cµŽ´R 9„S½©{u¦ÇSOŠkR‚p3HŒð+Ïüp™Ô`ÁÏÉÒ½ž+‡ñŒ`ÞDØþ™»#j ó8±2œz³4a"QŒš&\MLëо•Îë"¨ç$ Tª‹ÆþEI±·`€E.02Òj[††ìŽè L"†_­$a™IltÅ<ÈyÀ÷ Á0ÄB6 tÍeÍ.%»š·¨ÈAP¼j¯«Ü1rp£Ö­h®M®Ë¶dµ¸üêÀŠ4P`žµ  ŒÏ¢”’£!³ŸZ‡©kAÓ|êgñ¨€ä Ÿzy rsŸja–Ç'š2A–R­Š#†Þf (À¿­( ¸cÁíJ¯ÉÈö¦™-K²Ø míU%ÎãÚ–wW Nàù¦«1·5¤^†N"›}ûAõÅM¨„܃ØÓba•ç¿z±"¸8lt¦Ù*$28ŽÅÚ[€@ªÒÀ¥Í󎹩e“œóïU$geÉþuQbq2æ‰Ã1È_JyÈÀQ×Ö®L`œšOÝ)ùÔ€G­nG)M£b§±5,Í/»>µn(Ôîl¸ïMŽPŽär¸éG0¹D[DbY׃ޫ¤0ÚÌÒ Øº×)€;Vd°¼ÎYOËš^¢~EŸíà"޽«^ËŽ‘Û‘–>•‹±Lx­HccµbÈ=Îy¬ä×BãÔ§qúsÇ’„íS[:âÿbøab›Í“ïUÝ&Ê9.Œ’`G<ÕO\®¥AÌ«üCÖˆÊí6D£Ñ6œ¦kœ6xæºaõwAÈ5—¡ÙŸµHÏÆ8®‡ì[O¨ïUVZ™B:æ™]öÍtIÆOÏ|Ô0Y¥½ÓÈij±÷5—3Ðj6‰˜ž~lpiŒDg9T­æ0¾¢©È™!T’3Ú¡ ž9¤ÞJ“îkJ=AÄaÂp9¬õ‰Œ túUëH€BO>µIØiÃ1¼$ Çrjè]°a{Je´*€ðÏj²c ƒ+Nk•cTxä]ùµMoÔî«“¢L¥$ù_·z Ñ5¸ÜÇvN? ¢I‰8'8Ý’:cšrº€I-5ÚˆìcøÐg,r˜€ÊÿZ,£å'¼–IÃü¥IèqMUbà1Èéˆq¶c£;Ý3Òœac–º|m—'ÚŸÀî#è) ˆ®ÔÃÞ›&Ìí ÏCI3’H_—"‚TV9õÅ1ìå±À v¦‘¤99¹ò… óÈ>”"„‰8MNn@ÇZCHJž”Gšå²嵉pIã¥b©oN:qÚ­B £äÎ}êêY«rp™íS‹XãèÃð¤À­¥zw©\ îjÆ"Ž?»É¨Ùù☄@[æÆ3ÅY‡ÐG­@d6þ4äpX²ŒRF-¼±â•Xã;µtêi†L}áô¤2ß™¸p0}j&r_o5‘p2y”¥·“ŽsÞ˜RFwqèií'ÊsŠ­ó xõ¦|ù'=h°QÐåHÒ28¨Wæa’8©ÉélyP úš‡•aƒÀ*ÔIê*-Û˜þï€!f,3ÐÓwg†Æ*b»›'"˜W œS¡Ð|ª9<ÓÚM¸'ŠnÑÀñéMß ƒH¤É·¦ÑÞ $‰x§¦94€œ‚HÍ0¸ä`œÔ„<ñÅFÊG;~´ñ÷4S»HíJ¨Ã#zQ"–Oz„;â'½L{³D0y ð*iî+´T¹÷·=óNeãÖ˜®@"31òæ¬*,i·¥MURLÔS†ÈÉÄ)L€ªîYIã•(l/^½ê)¼É#<÷ œvìbyéŠrǸmþtˆ¸L3ïRD“³d° ;PFÖ9ùJð*³+·ÍÁ«wñ°mç¹ãÚªTsÅe-U‘®å2qéQ-ÜÒn)éZ°…ÉÁ5‰Ì22i'`!Šê@އ u¦ù±ÂæP§Š@»ËÍEååö7CUÍq”îµ8 Ét ¦Cp“Iò7=Å-Þ‘0,軀銧¬á?{Ò‹'°4i‰Fqœ‚®K¥Ì¶‹tvö¬t>q°>µ¢·˜ŒË'¦x©jÄØ¬ÿ1¦=*1çúÔ­þ´½=*@wñŽ”6$…#ñ§>FhVä¡Z‘2©Ê‚J‘©+.y¨•Td’(„»f<«t«*¹%HÏz{¬ÈÍÈàSÆjÙdÈ9À¦ùh[Žý©¦L›ˆ#8Ó¦CßœŒò*»Nw ƒå¦“ଲ­5:‚yšŠ<œjÒeHàÔ²„Ü8L|Æ“Êrêx;M=†éLŽ:U¥@Ã?w5-Øi]ž—¤“ýŸû¢®ƒÁª:JŸ°Dsü"´{ÑOáEËqcN"ƒ‘éIÍY"c šBiùÈéI“š6šo|R’A£ ž”ŒR1Á£4zsHxšyû´Öõí@ÅP3Þ“øºÐ ¤ÁÝH (£Š)@œLe³ŠOÇ4ðØíLCvóOÀÍ'~ià`Ð 0;PïN`:Š6‚9ë@NœzqH1J)€‹Œtåf`Ò€¼w4›NwPpOž3øP!²8ëJ¿wÞš1¸“ҞПZ9#ŒÐÃ4ªØÈé@8õ¤ÎO4u¦3žhÄò+‹ñ“º‡Œ‚µÚc‘Åqž1ÝÂ0~驞Æô>3•HÔ¾ðO5& H‡pù{Tf@®x§d–¬ÒF"F$’¸ïJ‹”ǽBÎÀ:…T}jl2O5$pMDÌ'¡Ô¤” 4ؤXæ$ SôµÔ;帕`"ÀPšÎZC0=)Þb.æo”cF¬:‘²¼cÖ˜[$‚?c˸nlrx,!dV?u»P;¨bØžÉûÐ ñëR2ªØã¸¨šQ6?Zb]¸ÜIÐÔ' ƒŒÜT ù½W#Ú¢q´¿tžô!|ç&‘@Î0A¥À'qOˆçpûÙïU{® |¶ >•)“q•eäS˜å>Q‘NäØcr[ŒŠ®T'9?J•¥Çb¦›éŽ0)¦&ˆÞ<Áxõ‚-çéëV!;°£ ëNXñôªæ&É‘$|OZ…”ÊŽÜÐØÜrq@l| ñß5I’Ñ^@B‚«ÅñG÷Oj²Ðî'¥5§ŠsØMËK"Tu3¬JjÝ’óù±ÐÖj,»äÏû+SjsÇcj‹ÿInÀô·Ñ)$®Ëž¹åY}†CŸ¼Ùäše•ÓG¥§˜ ÊN+G2ßÇ»R{×A¸)P·¾zUÍY$a{±Ú|L’Hã!ŽjÜ—Eþ\½ª >³Ç¨ˆfb¸8r*»»%–·î;ö5Ë">c󨣑–nN@*Üúk¼Ñ²îbÜæ‹XKSOO1\Û´MÚ»m¤Ä€³yâ¨i–³E9f\ q[ 2¯'½4Don€áWÿ¯Q4r1Àw«r.¸lcµ@ò…QódŸJHEe\Gzq•‹d@Ó±qQ)&I9=… …†Þ^Àd|ÜÕˆîEÈôª"Ù Éœ(Ï­X`ÆÞ*ùɰ÷µâÉ5T2¤… üÀâš× nÆ1´qšŠÞFuóIËMZw%¢™÷n9ÅJ±ásøSÖE<õ8¨]Ø`gŽÂ¨By/ÏÏÆzS0ÈwmüêO3lTfLœoÆ;,1²IºE©ŠX±>¿¥?ËËgÏB*d1ìÁ_˜zP !·lir1M F¿.p{Õ†2±Qî ¥dÛLd çm;z”A$èÛœpiU›-å®Tô©þm€œ(P+££`E=uV‘vF0Ùª_»s‚O¥L¬ŠFÀîh°4Z“Q˜0 “í&El3J«1ܽ7g½WYÚ9vŸÂ?lq€AÇ­9.œ¯ÉëUDŠø-œžÕj(YÜcåw¤;–í݉ÜÃާvqÚ \GSšA»wå¤2_˜dõ©Pí^¼ÓWiqÏÒ—rŽ™¦Ì™SïMR0Fi›•x'¥!m㎔pBIËc)ä¡r~µäžÕ!dŽjJ¸¥®G"9\¾µ˜è¹ÝŠhbrHëÞ€%NHȦáJi$€u¦î#‘œ _¼) @2@§†O<ÔLFÞ‡&€‚²)Cõ¤¬Ùþ)péÓº—Sà É9ìiêSÆ*&|¶G"œ Æ WBƒÈíUe}Ë0]R0N3õªrĸ+Ï'"1±àF77ô«1õÀôª‚=¤sºžWj¹4À¸y\+RlÏÙ’ßl«»wòªW~´’BÁŠ“ÔVŵìSIû¶:TÒýË­R žs}£L³2Á»jô>µ^1=‹“"–õ×¥µ˜;Hý+˜×´‡Ë\t$Ó Ì5ŸÎŒKéÕjhfŠgùR*£YK ­Ä(Äg‘ŠžÞ{k°ØR’Q$M¬Xi`qš_1–2£¡ªáÚ7A”©±·AÇj‹ âdà˜ H1Éèj9ÝYr5UdRåÞ¯ò€Hª"L9Tˆä• ¶«³!¹§’Òtª‘¹9ÅO¹£a"œÔ4Rg¨é-ÿèÝ¡Ž+?F;´Ø þè­éNŸÂŠ–älpx§ÀÍ)P:Ò‘ƒV!wŒRî{Óí4w aH=ixÏ&€G"€¿ÐRŒžÔ½ŒSØð0h3GÌr)Iô¥Á9í@ÄŠ9õ4.pA¤ Å ¼úQKÅœ朮I¦‚1ïJ2:Š`<ƒŒO2i¾\f¤®)ˆid¥êRDÑv.Ç…©-wÉ+²ã•|Dª‹¸·'’Ñ”Ê@ãéCZ]8ÉH>µNOžP¸ÈÍZ›y¨aÌ;—†¥ ë¡Ñ3ÉÑs‘º¢·Ô–ÆFœ v=©^îÈ«Øêü†ˆtÅB’—ò8®NïÅwúƒˆíã1'LŠž×WŸN·Ë§›+ ì*š9ÓÞ Š+eÎ2+?n9$Zç¦ñÌóoÆjÌwòLPüÝje©\ÓÞ½ñØŠŽiÄYEGÊF1ÔT)nb‡hrýùëP‘Z–bsåínÏ¥:"0vÞù¨„¬ƒÛÒ™½`@Úµ.Ö,«’zæ¤Y¨'¨åÜ1¸‘@ì9 y 1R‚o'Ò¡IÕ2H 3ŒÕ¥•6ä­#V`Àþ<Ò:d³ýjf(Srþ5J@ˆã d,Û°1ÅI ÊúŸj¾-âL6qÍ)0«mÂñEÀËõ}™ö§¬$®|³É­…#`Î}¨Î(êzæ•Àª-InÞÞ´ñf¯‚FÖ­ ío¼iPsœŒ{QpH¨mB1e#Û58ܱÃ$Ô®0À¤-”ùqëH,!l}Ñšk˜Áô!}ß:§b#Ë#­0Ê9íQ|Çšz:È„ãéJG­)FáƒÆ(M¸<Ҕ܀£½*ðTè3sW´™Çsë@0Ç<ç àêWŽ´IËqž;Ô/=ó@‰÷d„"’fò×å@EF\ît£æ<†# UW•0àŠ•cl´àSE˘àÀj¸·¢ŒØëLü¶]¼g>µ:BdR¤sí@‰ŸŸz±xN ÔÆÔ ž)"—ˆóœt®VA5µçÊ×5èófhŠñÍpšÝµìW§ËíÓŠL ~ëxõÅQ»' îcè*ŽýT7ÝrGøu |ÏßE=G(Ùr-ì˜aŒ{V•ªÎ…$ùGPjŠÞDÀs× Ú„Žåaj”Æ¬Ž¦ÎÂ;e,‡qõ«Û˜ ®VßQÔ0#\‘ô®ŠÀÎð¸P1Z¦‚÷'ŠáÕŽNqVX$ð‘*+gÚ«í\;ž”‹+‚Pôõª\ÛÇn‹z+ŠÕ¬žÂ9T#œõß yÅqz½¥üúVÝ3Æ;T¤;¢y%¶€É¨â-Ç¥>ãO»·‘<ÔeˆÔ²F0flÑ¢3hŒ®wc¥Fª¡‡58È#pëMa€~LZB°œ¯ dTï0x†5_$œÒüʹÎ!€‘ŠWšhsÆJqÇ4Ó¸»LDˆIlâ¬D Sëè*²œ€*Â6ð*XÉã\œŒQpB3ÔR†ÚNO"3Æê€òI¬ú”PÑ1ý—¦ÑZYâ³4ùÂþZKèiÓøJ–ày cÒž”€àÕˆ ëM4ìóÍç@ ?z“¥;#8¥íŠn2iÃÅ& *újŒ1â‚Þ”¤àÒt bûÒÆii9àñHqE7PrŽƒ9ÅJ9 Žç­ZoLM<8nÝ(Ý„ð)ʸPÍž(Ž´å¥=3H=;RäÖ˜ <-8gœ#žÔ»àP@àš3Ž) s@„Á4 Á4~4£Í#`ïCqŽô‡Š&ÜñÇ=ë‹ñµ³IqlÂ@6ƒší ®'ÇV·‘XñœÒ’ÐÖ‹÷ÑÉ´…ätÍ<¹mBGÖ« 26õ21EÎAÅ`Ñè˜6ʰOµSŠÄÜêQ aµ95>ñ¼&ì÷¨H'&3È=sÒˆÝ L¼4¤Y.R\ŸtƒX¯¹\làÖŒ7L·?¿r pjœÊGÂîç5v³%;« _Þçp <Í‘§ŸJh”,XÉÕ/5Èi¥pr±¡oq4 Yî?>ÙÜܱóV ¶Ûfîädôæ¢XÖ$rÌjCzƒ“,0O§J’D!”Š‹´6áòóQ4Ûòã·§z¢¹Ã?ïÏ_JµÆß/ ûŠŠ%,qÇ<ÔÍE‰÷☠ÁWgÒ¤*¥pø,j;Ðí ÷‡j`üßtž”‘e dƒØ®dùw2ôô¦I#nËãµDÝW>µIØée.w:ŠI =sØPñ¼²(n2*f´`§õ«ºBI²;`î Xˆ—OZ’hJF¨¦Ä¢5%=ê[¸ía¥ü²GVíPH pîðj•i<ÇU½:ÊÉ^ââ@-âäƒÞš%húLsföó ò¡¸ÍS½ºSÔ@âáGn*Ƨz/çöÇ0:V%ª”ÔÂpØÍk›9¥«IlZÕ"T³ÂŽ3ÅZ±VNqš5e&Ô(f­C¥’sòô5Þé|¶‘kíF/ïZÂ=í´—©5BÙq}(Ùž2 jÄÊ‹îiÍêBÑÚ^#jÏBs»ÐVíÜ0½ÀXrUF3êhÓo#³Gc™+œgÐT7×YÀdÜC1ÈQD¤ÙIв¯!·g½Xû:l^éYúeõÞ¥s°DJެkeíÄnÀ·$qS$Ö€µWDpELFÏJÉÔ®$’ôG dކ®N—,ûC`tZ}• ‚C$’sÇ=¨NÚƒWÐm½¤qÅ™i1µr« ù#Ö¥1DÏæc 8¦ËÀ,áAïG5÷)+l6W8ŽàS#f,IÉì)ì¢EÀÇËúÔa¶ädzžis’Œ1mÇ íK&ÌBתåF õ¨N÷'-•jv ‰#&æVn{T0D 9ûǽM$ ¨zç¶hŠ2s Õ+N>@P=1B´˜ù@=é㟭M$e8ÈÉæšbYJ¶I ׊Ž^ÎA#Òˆ‘·dœÐÁÚ^¼Ô ’Aj#WSŒóƒPr F=©dtÁàf«u'G¥0.ÅqS`þtžk,„«:qQ¬xÁ$ÓÝ3šz<òL? êI¥$ŒÅÏÒœ±¼xã9ô©ÒÔÄ÷çšB,[ÈJÖ¥v`Nqš"*¤g§Jpà’s) IïïJ…3ŽwfAáŽIéR*9¨6-¼ç%} JSn1šF_\6z wð¶æ€¹ žG¡¨ó½rx4Û;q×½J%¶€zS˜`mÝÇcUš?/æ'<ô32HÜ1ë@BS$5&åe<}ê7 Ï­*FXe4ÒÎA‚;PÅW y£Ë9ëÅ Û¸Ž}9 vvÎiû€SާµDHÇ84ðrÙó  [㱦íÉô¥ ÍÔà c’ ÛøR бrwƒQìùÊ©Á©nÁc‚)²dp;Ó¬˜‰Áæ£DÚÀŽ=>]ÞX*¼çšdjDŠòh!€9äŒuÀ©X•Áè)và¨ö¨d‰f<‹’=©< æ¢8Æ>”‹$lîQùTgL´gâÝëŠožÄnÖ5*îd GEõ§"obCg8Í@Ñê:9Nˆ²*ÿ$Š£¥ø—Ä?Ù{#h§ð¢å¸ãÒš4¼‘ŠhÀ5b N3N$Ò PŸ¥8¥ÒdÐw šNw{S»Säç4­ŒRi[šNsíHaº•F{Ñ·=iB‘Ò€o¹¢ŸŠ)˜6ãšpŸJnѶ”ž ¶ŸŠj‘Ž”õÁÍ1lð?=©Š3Ïdt&”Ç4˜ëN @…ô ðzÓ°09¦ŽÔ¦”šLhÀQÀ4„Ž€ÒõG±¤Þƒ€q@Š ¡›4«Á¤nzPgøˆâ¸mÙoÔg=+¶l÷®#Æè[UcòœÑ¹Pvgž¥ÀY[$’*ãN!ÎÚ†úÝmå,£ƒÞ¨ùÛQ‰48\èUÑ—’bÇjrAâ¦Go87#=k:ÅÓyÞà~5¢Ì Ž4œuSMM7¶Šo±;VS‚\¨'5¨“¬ˆ ñƒïT%P’·9=ECLµ$Pe7ËÛºž-JäàŽÕ¯kSÈ :®sU¯mZÝœî<ÒæÖÆªÌ`¹’hBŒ(‰ÚEaœõ¨<™¡$y;Æi`ŽC¼ç¿&‡¹a§e‹Ôž¼S#¹aÀÆèi.Ÿr"Æ#­C(1Û’KqK”/bär™ea‰­™õhm× ™—Œ‘X:sFpØ”žô_€Sn:÷¡¥{ ú\[‹á+’ܱèiâRa^‡– ›zäqWãU*AÈ=*šH”ßQŒÁ‹c9©b‰ØØÅ>(0¥³ùÔʃpäŒT¶;Žcôõ§dœbŠl’lP ã=MJ²*@ÄŽ½*K@* £aŸ 4Û›8â`<Íç5BHÂBÄÀT²È«`>sÀ½êB±‰®#¶ŒrçARkWIæ&™i…EáÈîiÏ Ò4óu>>× ýØôŸ¥Æ'W¹fÌŒkT¬¹ŒdîùIí-í팒繬k_ßkXQòî5¶Ñ’ÇœY:ZˆµgfÏÊOàôl™­R450<µ<šºƒê1ü5GSl½ÜÒ¥QO'µCvŠVVÐôóy¨Ü98EÅj^Å®#‚ cõ¤Ñ•íuk¸GÝÀ&ŸrÁu Á‚†Óžº»Í¿—÷Îy¨êovcwRƵg¤ÊþuY@ä4„ÒŒº™¾Æµ©³·µAQ!PE,‹ç.ü~5KË*¹èj'Fp¾a%‰ëT¬Á¶_hÖU! šŒG‰v²’W’OzŽ)ZPêsØÕƒ>Fÿ“VîG ˜YpõÁ«xF Š¢†)Ž:wõ«).À56*ä“DcŒl?QYRÌO ûV«>ü2}j¥ÄNU•HV<äÓˆ™^0& u Ç¥%šiñï»xÆ*–›koo#MvrÑTõ]uÍÉDud+h¢obÛ¤„ÔW;rOCN¶¸i£ IQS1]¹Õˆb3p®¥+Ü‚ÀÍÛ4“mP¤6â:â– YCnR(xd Æó¦äಟ΢ŽXüÒ¬p{Z|‘‚€€=sH™<ØþfÅIšÞR¿E5p´£ä8ÛÏ>µ©nÎ" !Á¤5¡Y„a úUŸ²¢ÈP}sRÆø$ƒœÓÕ™™ƒ¨ÇPh¾XSÈ ô§¬c¨˜¦ð7Rt#@‡4yíÓ¥1s˜ŒzS”¾NzZBw.`ŠÕ2 .1úÒ'PYºÒW¨È©€p´2d‘FfÅbIõ§ùdþÕbAœP!«¹[;xêR€cv)¬%ÜT‘¶‚Ý’zP1™Ü7cå ©c ¨ÝÉõÆFÀSÓÚœ£Å:O-:šj ËÆµ5ƒLT‹´sÞ¡åÎ)"c éÀ“ É4\cÄaœrM »˜Ö! 0¹Å(.[*4€” \ÝGCP–ÀŠso nëMEù‰ÎsÚ‚DI89§† ݪcUÔm’N9ö¦7*AùM@¥w«g½MrªP\TÙPtn= j1ÊáI9¨Ç_˜"*ð.ÓÏ­,1œÐdŒ„Æx¢6ÊçZU›4JáB‘ÐÓ 30Ž1J ùXóN]­“×Ò¥xn3@ »,àÄŽFFqPç&<zÔ¸`'犰&Â9ÕxO˜õô«çi@IëÇ5Ò§h_|ÓËsÜÆ:ÔÑ<ÆHo©ü¬Ç½!P§ÊXщ@ù;jx`Ž0ň`{zVDÈŽwr «-.T€N(û€ªùã*\)Î¥ ç<“ÍF®7÷=(ò*céNe µY‹`š|Y+ób ÊØ©DÄ`‰›¦?JQƒƒš²²ÎÑ×½OZEËr;~=)€H^”Ù$  ™Å&ÀëÏ&€+´0Ëȧðª“é6r &<j¾«ph ï8éŽôÅ©BÞÎÚÝJ¢&±µDž)ñ&ß(ýÚéeUEõ“¯$Ù$rI튗ÍyA˜òrx’HšÀÛÏj´».Æ;ÓZ6 pû•}MgpH ä‘ƒÉíKÑ@kwÅM"!“9êŒo['ÒÄ(!½hå~`:v§m`ø-JømçèÀöœÔ®ËúÑ-«¤Yîëž H½£6í6º*ñ6k?FÈÓa\çå¢HïJŸÂ%¸yÍ&ÞIíNÅ!8b8¨Â‘žià’)I QŠVÆÞ:Ðr 7ø½(GSGlŠ\:Š 3@Ã9âŒçŠ:s‘MÏ4ã€3@aŠA“×¥)'Ò ¸QIòÑ@ìJÓFŠRä `fŒäŠ`?¦E*ŽôœcŠPÇÒ˜‡ œÑ¼çš`~5 Á4ËdÒ‰2M ÆE 1@‡ž~´ãÅ5sÀ§à¢˜ðrháZP+Ø Aµ{ 1Ë8Þ¥"œ‰->ÕmsùÅ,Ú²Lª®¤?Bj1¨b³Ú€p+ o5';¸4{;½Dª[c©¶¿26Èбéœt¤9k†ˆ/–ZÈÓµv±$Ãç¹4÷×%’1Ñyö©tßCHÖîh‚ŠdI>f)²2²¨ÛÇ¥2éƒ2È ©a“Q¯ÜÝɳå5ö„«o´ï§j´ñ¬«€pqžiñá£Bà’F1PÆ¥b¼ K°nvô"¤”U©­ÑRÝÏJŽF}Û™x4¯©]e* äõ§.Jä3M.®ÊPüîjÜjÞI›ZLh¨FVù§#É:å1¯Rj•Šàt«pHËj±mÀ<±ì;‰¼"×Ò› Äk!ºŸ8¹ {šŠ]ÒÈ!„ŒçŸjŠú1,‰meï0ïëU÷"r} šôº¤¯s"áʪ:b¤Ð\‘"tEMqiÉaFzÒè0‚fêsÆ+I4àd£iêhH©°à犡¤¬gUšGè3Å[»s$±Ä *µ”`M3`ðpH¬Ö‘e·ªSC-Ì+“—àVèÓ§³‰ee!ÈÈÍfÜE,&\oR<àV›_\M2ɸãYɶ•‚öl£e«4Zá’<ÌêÒ¬k†ód0ì+n³®´b,œrk VÚx *ç} .µ!¢õVMžgîÔœu«<´–'Y™³pñ€)$MÉ·«®Fr:œÒÑ©9 Ь¢MÍ"ÆY@©ì¡óع$/\UX6ÔoÇ®)D$6OÝÇJœÃ´o, Z§>© ‹ÐqV“hw°»P6åà·aV|´êÎ2CQÄÐIMÚY¾cœVl¤JòlÛ·>µ¼Ëm)¹‡JsìŠ01¸ö¨ #Ìvn¥L§©y¯äõ¬û}25mò’íšè¥Uu*ƒŒU&V qõ­c.„Û©b€ÂôÅL`0=骷ï‘JvçbŽ©1]ç;—ƒM1Tùc銜º"€N@È.ƒdïÔŠ #Œ1Ei#ùûÓ„l¨ò)$ÿtš´ÈŘíÇëNhœƒÀýi\ tÈ_i-„dz·4flùÔ6@Ûž=*äa‡=‰¤6†XØ.î)èÍŸ˜¶@Å[–!Þ¯ƒéLò¥T9ý(Šðƒça¿ ÐŒ€O½AlŸ+HëƒVä·8¤49Žxâ˜ÉÐ)Î}iÛFx¤fÚ‡jäõÍ42¤`ZSÂõúSQÔœrjL©ŒãÚ˜¹Ädãœpi»”ç‚ìe OËRô?(Èö ÉàIÔ¤±ŒR §Jxé“@™XnVǨ©  ½ ŒsÉëFåfàc\î]¹+IÁáW˜I,¦zÔœ/<çÚÈ[–çŽhdÄ|Í=ˆ¡4‡™óÅr8öœÓ—¯­/É»p)2EK!Fâ ŽAЯCJí‚8úæ†ä{P"Wu+šhÚ¸Å(ÁP8â“o^:ô bTœæ³ç¶rÅ—‘éZ%ö¯Ì9Å;¸ûPk\À›_<ô«9ÜsÔ{Ts)Á,3íQÛde 8=)‹bf9Ê·éJÃsNÚ3œr=iÅwp:S·—°õãÚ¥tÜ>œÓ°ÆA&¢PÈØ#ƒ@²ì dúS[`ÔðÃisœ z€…qï@"/€ÜjB€6Mµu˜! óê*´¿¼`<ô>•Iˆ|2*çBî#ÜAo˜õ§˜'ÏÆ;Ñ$lQ@û¹ïF‚=kBoø–Ó“´V§­fè@.—ï´V™ç©©§ðšËq ÀÅ \ q˜¤ÎOQVH‡ P­.=i½hXšL‚zsNÀšÎh@Á§ðG4ÒzÓT“@Á£sJ(8 cp}iIâ“ði’H"±êq@ ¹h¥ŒÑH ü†>ô/LR(ù²zS±L´qN-‘Ò‘wŽ¢—sÅ1 2;R|Źâ•NO4òyã¥·Ž˜§°éJ¬Oj6åºÓSÍ?’)€|ø¥ gÐÁ ‘ÒŒS@ NhÛN:ÑœG4¸ÊÒ`P $RñȤÏÌ1C.;Ð11š1“Å(8ïJó F3Ípÿ‡ÉkÜ×q·šáþ!+²ÚlàdÕGq?–†f!}«5&X‹"‘׃š×KU–2²|Ùîj¼Z!ÁÂg­jš[ƒM‘ÁwmåþòBÐTk·†MÑ¡$÷5®e“V~ÒÆÕ¢A…'“Y2å`ñךµs˜±Èç8œ# Òy©)2»ˆíÕ™OõJÒŽ!óŠß‘×@ÒÇ ×Rt”rê>{-LyàkOôXŽn~ðç¥Xµ¶‰b Í·sÔÕ{t•çŸýcœ“éS7?6~‚œ» /©K^(cE¦j_äÙ¹ÎЪë`ùq°&Ÿ£M²ÁÁïUrþîÄ9{÷/\~îî3÷‰ÏJM\\Ü!Tžô¶Ì¦ùZCÆ8ã¥Wµ%onSŒê+6½Öо©šw ¸áɨùБŽK’kV…9ÚỊÐÛæÂbW 0晌±F >åéÒ¯ Xm¼Ú¹Ø ÉÅKi¦ˆ[ w·W‚ÆÙA\¯¥&¨ý¨84ÒÐw'žÅLe$ÛŠ„xrÚ7&¯,ŠÄ‡$â’âüC8Èýi…ú™’ÛØîásŒ lˆ…Tô²_…PC†³—Îi‰s€k6®;…Ãù| ç½VŠé‘ÎäÝV$vcµ†õrÏH‚h¼Û‰| z õ¦•ƒr4š9@Ëm8éUçLù<מ& M›q÷py5ž¯ºÑ‰zàÍ,r?†¹••ºÔkÏßæœæ[ó«ùyp5,`ýJˆ ÜKŒ‘éRˆ .C=3UqIŒ&ñ“HÖÒ$¹Æ;Smþè êÛ0V 9Ï­BYe$ #Ö´ÚDTCTbA8ËJ°Ÿ¼m‡ƒ@:z’ê@<Ô1©çq$“Š{!Fô€,´œw©\îÅF ~yÅH¥P´€V!¸¨†òøÇ½NvŒpi…[Œâ€³`ÁÁ¨ÞLdHÇjüÚ€B²98Î(ê3‚yõ© ÛЀ=*4V Œ`Sß ry¥óØgÖ¤UÁÀ÷ªä1n8"É…ÛÆ€¶¦G­:1éÅ7¡Ns@Ç;¹aÀô¨™‰ÀCR”,$PäÁ÷¥ NsÚœ¤ ù‡Z18cÈ¢CþÎOcHväàUöàáNG^ièŽjm»rYF¥C´íËŽMH7 mœÄ8ÁªÄIÈëÞš(á·ñž”ªqéÞƒ÷Ï wÈÊI8 drà‚3“Lˆ»ŠûS—¸äûš@­’3Á¦!ûAS¸òj¹I#’½*Wr3@fHÁ4Ü<€1üiÄìÇ¥8+më‘JP‘‚F­°#‘Æ84Œ7HH”(¦H¤É qÞ˜…?xÓÕ— “Ȥ-ÙàŽ”Ö'  `‘ÀÁÒ™‚çéPÁÂ䜜Ծ`Sƒžh0·ÍƒÓ½+íÚqÞ™¸¹%øÏJ]£>ÔZU(N@ÛP‘•È*>µ V7@¤óL6±(ph,*Ã3ÝÉ5h4oáÇÒ§û AœäS^2c\AHa#;¹õ¥“rÙÏ4Øò1ØÓÜpíLEÄ`à0©Á8ϵR´m£kv«¬á£ P2¼ŠW$äÒÅ +Žæ›4ê‘囟JÊ’òC!ÚB¯n)6–ànÈä t„c¥eÅ{4l6å5un#fã!%$À¼aÈ©åàŽ*¬lsߊ|’ƒÞ¨L{²çŽj"y¦ãŒæ“x1 ,Aù^µNX²¬ÁSš¸ÓmÏÝ>Ðø‘”7½'¦¢Ü¨×âåÌ„äqƒPÎ>n¥2YMµNNy&¥fÜ=+jî$Va¿ Ž•ROLT耮xíLhÐ784 ä(gŽ¢¬<`…Œ®3ȦZ’(Ôò“ŒŽ¢“zfŠ›4ØAìµ yïYº+yš\-þÈ­;æŠ .[äç­4õ¤Ï½¹«áÒš}©wâ“ÍŒP>í4uã¥<7˜Á cž´¹ÁÀ¥oQH“šæÐsH½óM?5?sHñ« âž~”€2¾”RfŠ`Q$mö¤¸àt£8Špt + wêj1“ÒœsÅ1éÚ” ŒšÏzP3ÅÏNÔÜÜR€sŠ~ÀÀÍ8/~)¸Òœ£“@ Üz@£iœR€Wƒ@j0Gz:¯.qÍ—#)§“A8 ÞÈ¥VîE4ÔþHÅ('8Åq~9ŠY…²Æ2 œší1Î3\·‹Ûd0rq“Òš†H9fäpE]IP:„ f”I€ØÈÛN’1î)æBHïK§A#ƒ|øXðv ªè.é÷)xòF «ÆpsÞ¯¬!\±ûÝ«6;µX|Ø£kœ qVîhm·J¸“¹¤€8ÏZs’ƒ'’j”†XÌ lúU²œ»š `*S*~aš€#+‚ÍšzŸ˜Š@A±„„“•©¢, úSY\gŽ Fìp##“ïHéšF „)ÉòásÉô¦DÈÌFÜ7Jy$7☉ Úyæ˜~~š]‹ÀàúS”.㊠F\r)ryÆ)­æ.\Ò‰ñP|å²: +7Ržƒ·­1”® ?…8†vIœéP’zgÒ©#¶hi>R3ž) *¤æ˜@qÆ)J´ƒqã·€iÞy'?Jvæ ?‘§Ú1ŒcÖ‘ÎèÎ[Š ~o›•–\ b·Ê1œT£s ¸À4Ä1™‹•aëJªUr}é%L_jz+c€pi€Þ™äŸJ9-Òd“éRš<†>”XOœàñOÂýìTJÞX àu¡_ ƒÁ>”1'¶3MWÜNW¥ ÌH §2)À´ $ô€ŒçR…cÎ"•A'€Ò˜Š÷H¬~áëH2pÝMX‘KðZ«4b<®O44< àÔ»FܑЧàOlÕôL¯-@"Æ}þ”Îwü½úÓå?^3Ö¤Ú`Š€ü²`w©£n4ÓóvÁ¡î?6G¥<9ÜWhÚi¬¥åäwÅJGÊ3H8$žôÃSŒ•ª1 ÆF9÷§È§¼{S•˜>0 ¬ñIæä0û™Z8¹qœRÜ©dôµFHÄÄ㊙;˜¹$ŒÔè€.X zSQ¡hË8Æp`ÝÆ9I0UþU¥ °@ ¢€§Jr·ËȦñ“G8 "—¨¤Ú)ÅH AŠ^´*š\‘Ú œµÉøÐ•Цº¢9ÎMsž0@mb8ç4Ð$’Á9=O¥0‚)cŠWF€ØÅHêÅAÀq[Yî1‰$*9ˆrqϦIœ ]ð3TC1ÚKÙI©ëOŽÒRÀK&ï^jìŸ ÆGN‚«¼›WwNÔ÷kÚÎŒcŒÔŠ¿.3Ó½fZʬ2\š¶³&Ic…úÖlÕl[2#dý*µÔ{J® g©©­å NÆuÅYŽ/´äœ @SŠÅŠ+GÆxÅM’ >f2;×U·µ¶;ù¡¬É® É'%qÀ©c%Y3ÀFòÉ¥˜°_»ÔÕØÄáßæ_nµfK˜þÌø@7TŽæ¼ÑǽeŒž>\T{@_Œv¦:7˜Oðæ‘°Ñ¡ïÒ†\FyM,›"RsÔŠÞ>Vƒ¦ Ä®8©´Hⶉ¦ž<è}kS‘µWËì_åIjÊ“²1µ´ßF÷“’?(«]ÑI뻚ÑÖc騘WU þîÞvìOåZ7ihhO.â#¸4ÕE/´/?J„ÆæMÃ'žÕ£o÷xNk6h™~[’q’x±¦L–Új/r2k?UU —ãš›Ê&ÝHè)lEÝÊ:„Ÿh˜á¸Ï§¢2Ĭ½»Ô©d€F}ée`б¯ž¢¦ý¼ËQꮾ\³±CÛ¥<9Cœ{Õ2H R´î#àóRÕÁ;ž_›qàö©W,dÜ‘U²ƒ% æ,í8¢Ã/I'ÙÀéƒÞ¡7ìùT8ê*³Ê³ª«ŸÊ¬[  Up*Ö£­n¦'“¸ô­X…$‚sYkµeÜ'=«K퀧 ·ëW¸%b Û;Œb©ÃlVŒ9ä’jÁ›,yàPdb õ¥±ØÇ·„ÜZIuÞjü1‘måH¸~œt§A§ý¦Ãáæ¥I >€`ûÐÝÄ‘TÚȺc(>r1éRY[…¸20\gÖ¥PêzœŽÔÛ”™g†âœ ¥®ÀG¨iòšx¿Õ:ÃÒ³,ìØY™Pî`z Ò¸–îö/ˆ‡z}¼"ÞÔ"Ÿ—¹ïUwau)½ û3þ±ÇFÎÂY#“ÍÜÒ„ö­ä+»×±AcÜP3B““2íMÍ´»E™Þ®Gos$I'ÊºŠ³üà:Ò´Ç’©ò®3úS»…;+yâ¾&_¸cÀÍ>ÑûU–ìuÚ>µq,[˜o# ¨ñÚ|ï/k‘ƒŠar!¦È–°¬rbHù RÉo=Å£G+‚þÕ!¸fáx ïOóq…Á÷ 73 Ó5¾JH"\ö¦ÜG«iÄOçPuµ¤g9âŸæ#Œ:ŸÇ½ í¥3[G!ÈfÁÅYd€–!»S8à© è)»iôI3ƒÓµ2æÜ܆Á¦1À5:9Ç?+EÙÓ',Gz—Í$d¯ÐT)(Up ¨·8äã×ò¤<.}h/=茦NOJ7sO¥*(<¦šÛòº}*5m® €&$nÆNE#9郊k—,Z@ã«E͵FCSPsßšŽF!”…È5crmÀëü©‰ ùKŸ¥C¾w*ü óŠ— ÁéM pÙö¤2U2gœéM,¶T{Ò,¼í#CI󟕊àô  •„Dr ŸJ™™6`TößÈ5^´§å4¸V„ŽàÓ å¹¥ã9¡†9Í/ ñI€:äMý8¥'qé@ ¸Å3w̧`7Q@OΈ>ðâ¤$SGzÓyê(¹'þ)€ojSòð) g–h©2h¥`(œõ§¨QH)$ÕíÜcŠÛN¥Ü02)HÏ"˜‡}F4™ã­9OÐ’ã­(>´Æô¤/Ÿ–€&c:ÓTüØ¡q·Þ”qÚ˜€‘ØÒ ÷¤cƒHF:P˜ÀÏ­*°Å4gªNhÇ'<Ò€Bõ¥ížôÖ$t¦ŒNȦ˜ õ¥$R„Œt®kÅXhá÷® žkĈ8¸Éæš9ˆn$/½#Z¯–~cŸNÕ4ƒgñÚ‡™D_/9¦˜Þ†tа(c<Õfš0䩯jì̳G¯œm¾ppzV©÷0’¾ÄRH²rȨ¹aµ—ð­ìöƒN{S¸à~5NhJ ¯o ŒžÕ¢`ˆ!:U/d`:Õ˜T®[?däl‘$K°U'²mÑœ)Šˆ>äu¤`2[n1Ú—5ÂÃå•–ÂŽÔÅa´çÒHFн¥D]”ôö¥p±1îŸcUÞçcá¹ö¥ˆ|“Æ9¨cV’`ár3¾´ŠH†à»)hÓ$ž•±¤iq>Ñ2ÝpjìXLM$|u éQÝê ƒ¦Ð8©Ü½ŠZ½Ùû;ÆÞÊ*•…°·.zÜ“š–cºPK /8¨%¸F°ã±§äMõ#Öí=ŽzƒÃêÏm*¨ÈÍ&©p­c´ ¡¦ÜÍ Mä·SÈ«KÝ&úÕ©q ù»œ*«ÅƒÌi)­„ìBÌðlúÒ ÈŸj­p¹q´t=©¼rePš, ½æ1[Ò•rO*ÇŽ*—-!Ú*â3…GŒn´š$–Ȭ1–=ê Ÿ|“éRK.ÍžED¨ ßZqÒåò23ɤ*¡0­žäSfù œS]å`8 BÛÆÇ9ùsÞ›Üï9ÛÚ»FCgJ–2>ü}î RC?•à ± ;Û{Zj²aAÎircwÜ à~Tì"o0pv(óÁè2ÞÔØÈ•zÔ±¤{ÆŸ­;ØDBmË„zâ¬ÄìØÛÊûÑ,((O=EE;Fi\ M$q·ÍRAQÆ_ šif g¯ ´ÊÛIç#¦)UÌ€˜ãš-ÝösŠl~\“ìÁÈæ€3\¬W€*Úohr@4‹"’Tý9¥!IùzQp#nöl‘¥&<œ÷É6™ÃOCLE!Ï9ÐÊÇžj)Ã%jKò\dñQÁæ;Ü`zPA.ØÇsSG,lÛwgÜUi"%ß#*hTXØhÎH݆• ;›žþ”õA»sv÷¤&c’c TÈpp1éO-µzô¨£<1ž)0vv籡¥Á#¥4£• ††9¦àœg<jõ ž¨ùz1à~”»O +HJÎS'å§ÄÌÇàJ1!Ëä{U„Œ$`Œg¦(>qÐ`ÒòsÓòÁNÞ>”+ï8*¸R:÷©p€äõŒ ‚G8íIÜv¦!pŽ´®¾GJ|GŽOJqb ‘@wÚVœcwîXü§“ژà ÉâPq8¨˜ ÷¡%ÜHìJ°6('¥V; E;ƒ!ÇÖ¤Ü$`R”sÒˆãXzÓ·“ŸZB Œ~´˜ @'9 „ñNV(É S $uç4¦=«¶€ AÏÈx¤TuB7ÞŸ°àÔÃ`\2Ÿ­1“!‡z’MÜ8§¬yqŽ)$\RI'u2XºFGQS)ýÞ;ŠaS#ûš¬èIßÞ™å99rMj|BzjÆ?ˆpiXw3QiëRµ¹ ‚ÄU²Š¼t9¨eÝ!$ñÚ•‚å/nC)RsÚ£»»–eÇ *y %HÛøÖdñ8Bs’=jet„®òF¡äùDˆ„ñŒŠˆOP€*¬³>`Ùö¬ìØ\Ö†þ[-Â5VVê{ŠVÖî!nH(z†¬{Îv‘ýj½Ô“Ü2œíZµÙjòñ&ºy׊®fîq4süîhš -ŒUÙbÌ3LØÀAÍYv#–ÂByªVò7Bà‘Þ’bÛ¾XŸÒ¡­KG°xx†Ò¡oU®A`+Ã9:=¿û‚¶³QOá.{+ëAG­œsÒ£Ï"´$IÅOJS×&ƒžÔméKÓ½5sœNIÀ ŒQËu¦Œ¯¥<äÐI掀Œõ¤b—ïg­*äbäÓwÜt§êi Z(Þ(¢àPëŽ)ʧ¥8äP#¨A·½86;q@i§< qqNn¡W ïN#å A­(;J`͇CÅ0:šN” Œi¥±ï@…ǯ4›À©ŒäœP89ÆE;É3OàäUq¹»bœK f‹ 匌õ¡Á= BŒ½s“RX..Ï—¯4à20h$šB{ÒüW;ây"‡=2k ÈÅrÞ2Ï•o·¦êc[œÜ· ËòŒ“ÇÒ¢1ä‘Ïj[b0Øç­Üÿ…Bf’W#‰Hv%zÓ¥‰]Ôƒ¼ñC+G"ääR6íÕ\Í¡b)[-iZ=Ø%øêhhÎýÓ4ÖQaI4\vã (çyN6œôëOYppGNÔärl¹ëH†âqŠŽI2~öqVUÛ;ÂÔSKÏÍ+…®U;ñ’x©¥˜ä‘ééVî" )÷ÅS/† Šw ¼0Áæ­ÍKdâQô•_F´Iå2ʼ/AÚ§Õõeˆx БØQ¸íbÝö§ °a¸1+Ïïu;›ë·’‘+v­2ÛÕ“Ì%‰ê{Ô–v+’ÏÞ$U)(‰®c0}¤®Hb1R-¼Œ¡²rN8­øm"V9nGíQGÁvP£<ö¨ö—)›}b[Mc´ï¬íóÞ ¸psŠëÔ,ÑF8®fêÊ[Mj9âW8âœ%tÓ—TiÝ[#Ì©å`8 éB8Üÿ¥l`<(îaëL–U#åÆzb²r} ±i¦ì ¹~aÒ¤[7ów1Þ¯9^K>¢©î‰ ±?¥l,ŠÂ$“##¶+BÒÆ9â$þÕL^¤Syf>µ­yj¬(nzÕ;ˆe¦Ÿ±o»dp+V2¦.G>”Äd“=*Xä^z U^àA*,Œ ©P:{TèÛ\FëN,¤Ø+ê}j$‰“æ cŠHÓoÊõô4ÉXˆÏ9Jc¨1Q,Í#ÁQïACž`Ñ•ëÏz§(e5y£ryi«‘1‚{ƒL ë{R[8Ç~iï …Š•ãµl$*‹ÈÅ GÞì&Ì,÷0PNqÎEF|ØÆ®Jã§¥o´21?(>µ\Zª†m œRbÜÇ@»Ø“εNË&ÍÄà/8¨®‹#õJ„\äŒ9¢¤E¥“åù¹§µ2I9 œtµCïÁéS(o(åFîÆŽA$è2€ZцÕp6¿>«ÛŒ?J¿,G¨C¾Ì¿>¸¡ Rüã§5(v‘²çl0m¹Ï@D-cEùAÍ4@;¿J²®JN§& s‚M”ðwãR/æÀ/—†ûß•8sóc†C$@€G#ÖˆáLœf¬RFÃÅ Š[Ž(°\…þ\¨#>Ô¨ˆ¨>cÐÑ*ħZQ©”Xew‰CòN{Ôê›rù[¥IåtcŒÓË|˜Æ 6)I?O”/ztP¨3’{Õ†pܯêŒ r>ÔÖµÚØ,Hô¤û>•K¯N¼Vv±V%sÑÀéÆ*(P©ÏËÛ4‡ÊóÕcVçµ4L…d}»N(°2in'ëMaÄîÍQŽuY2¤‘Ðæ•îÄ|.1O•™—¡´IÉò›Ÿ%»  $qš£m}µ˜¨ š•®å‘º2äqšM;•×¼6Ò öP+g¨¬o Ú,ºí°ÅE/„¹üAž1HÍ8ô¤t«$…xâŒsC£Žh<¾:ÑÓÞž0y4Ýüð(…ˆíJ¼õ¡³H #(Éö¤ç¥;$Š i)0qÍ8gš0iÜ )ØQa\¦zšLñKÉônaÚ¨p8¡NyïH¤÷Å9Häw Í(nqIȤäSâpziÚz敘 39=hîx œšibN)'¨‘ÈNI"œsœHª@À4ýëÅ ‘Ú†cŽ@§ Šz§Ð;C1ê¼TŠŽÜã0@>”à3ߊ..R8Ô¨Áj”žxÅAæ“n "€`湟°1ÛƒŸ½ØWM´°Çjl¶ÑL‘€é‘HkFpŒ >â¦Ã‡ÁB0=+¶û,!€ò×Ú—È‹wú¥üª9 9ÑÁJ§8žø¨]$,Ël}+оÍ_-xö¥ò"ÿžkùQÈèóg†|çÊcøSD?>S JôÕ·ˆ“ò/åL{XOZŸ(¹‘åæ)–^"cÇ¥X1Oåå°zW£ 8G"5?…8[ÅÚ5…;0n'šˆfÁ&Áö¥heTÇá^– ˆŒykùR‹h±þ­yö¢ÁÌ-)p a “ŒgmIe¥ËvæIQ•óÇZôã@å¯å@†1Ñ@ü(°s#Ïõ©líÖ [v,ÂJæÒÎöGvxœ±çkÙ<ˆ˜çÊ_ÊžmáÇúµçÚC™!¨YÞ*F±ÛÈdÏe8­û;[Û{XDÈw2ç¥zgÙ¡Ïú´ü©|¨ÏX׎ƒ¤›V(Þç›YÃùM¸÷ÚmÐo1Kƒô¯Qò!î/åIäÇÈØ¿LTªmu<{m‹“íQÅi47NìŒñ·##¡¯KFýÒóßï&ü Ÿ¥¸s#ÌäŽñب·ru¨ÒÖìº&Î=+Ô<¤î })¦(ÁݱGáG³tyl¶wŠÀ˜œ¯Ò«ÍÚÊ¥`{í¯\òS®ÑùRÐñå¯åO–ÂæGšÃc ö§Ï¶“Ïi¤[‚¼£½éžLgŒcéCÁìùjOÒŸ(s#ÍcóÈd‹ôZ•Úp„*¸?JôU¶‹ò—ò¤x!'ýZñíE†¥Í’K±ß¶;âšb»”,.Ò½5`‹û‹ùS¼˜ú„QøS°sDZæ ot‹÷9>•?ÙïASå1ãž+Ò<˜úùkùRП¸¿•cçG²SÍ™Ç÷i®Q‚ˆ¯ûµè%Ç*?*_)1÷GåE˜œÑÂ*LG0HN}*xÖMüÛ¸Àî+²XÓ?tSÄJNHÅÌŽ;dæ3‹y>Õ ÁtÿpÇJî c°  ÁR £Ê¦Ò¯—HXôâ«®“z›G>¼W®låG”§œÊ•†¤»T4ÛØø[vÆ=*[m2úF*аzt¯O*< ý(Eä~”X×cϾÁx9H>´¢ÖéHßnÀŽ˜èEF: ¨ U I$\æÉèqNò.Já¢sƒé]ÀU?Â)BJ9#‡6·XÊÛ±äbš°Ý¶î¿…w`zb°cµæG"º‘­®Jà@üûWs寠¦•žÌŽì·‘Ç 7>”.òrêØêEw$(Ç›´“Šw £‰X.ÕrÐ9÷"‘íùî3ÇJî‚qŠ ÑEdq Òü¢ÝÉ=À¥÷„"qîEvÛzqJÈ0(L9‘Âý–åi…ÿ*|vW‹\væ»R¹8ÛNÚ¡z .ÈâͽÞ6˜[ÛœÖWL€ýœäûWdþí5Opü¨¸s#K+ÐÜ@ÄRµ¥Ø@Ã>ÕÚBð)9ÏAJáÌŽB+¼îòIjÚß0ÚmÎ}ë¬ÛŒ“J§"‹‡28ßìëâNmŠ•éŠŸzÖ@ÙëÒ»EÇ\Rg$ŒPÇö—{p°ãÒ þË¿ߺcžÕÚ°É£n:Š.>cŒƒOÔX$DžÚeÛ­@é]x=8§v# ™jé—jØX[3ØÞ•Ú°°÷®·€0yœãE…ðcº"}*C§Þ¨ÇOó®³9¤#­19|:MæIhãR 2ôyXZë1éM'Z.Ç(ú5ó6vŒS×G»XÈ)Ó¥uÎ3JÎp)\9ŽFM+QR¢4ïš–=&ø‚\ Ž•Ô‘Ò”¯­;Šç.4«öC˜‡ÔšŒh—¸Œ {×\(Ç^´®>c–þȽlaWó§óË#åÍtÁp)ÀdQpæ9Q¤Þ’Ó­?ûì.󮔌{Ñ‘Š.Ç.4KÐß2¯#Öš4;ð1ò⺬Öæ€æ9…Òo`ÓÖ¢}ù›;VºÏ—4h¸®rŸØ×ØÛ…Å ¤^.>E÷溰1ÏzLsÖÇÌs#H¼ü£Zjé7™áO|×Sži•Ø掋v8QøÓŽ“x¤`κ0>niM‡1ÍÿgßîáT­7û*ð¹æºR2)ÅÍäsÙ7™Êªþ&£EöåLzfºœwÍ ëEØ\æF|2>@O½=t{иf_À×G×µ' ã4]…Îe´;¢AÈDZ¦6ƒzÇ!“Ô…$óNǽatpW^Ôg-µâõ¬áà=I±š&üMzi^¸¦CIê<òÓÀsù†K§Rq…ÚzT‹ðâÜÂêîÍ#d†ÏJôÅg¡ ›á¶°²ŽXŠgƒ“N‹á¶ªxyáÏÔ×­“’GzR1Í>fv<µ>jÑžf¶+øÕ·ð ÈŸÇÖ½#uw¤ÝÄgh¶éútpJAeâ´¥Ï4…†zT¤’²wwœÐxR“ÆGZÂULóÖ‚ nzR…fŽHÆh1œÓ1ƒÅHFÕã“MÁâ '>ôŠ­œŠw @ȇîóMsJØÈ¨Ø|Ù x8 0ÇSšš@=)¼úš)Ø¢€)*àg4áœæ›üôgè|ÐÃÚ€¯J\u¤Û…ÍœP äÒ¯&޽)Bdu òh<”c Í/oZL0 õ¥Ü3ÖŽry Å4©Ï4îGZ^Ÿ&(Ç4‡4e‡Z@&{S¿*  ŸÊ—¤Á=)€¹âšÜ°"—¥¯QHäçšv(ȹ¤ÈÏ#4Ä…\tÜÑÀíŠRÙ ÉÈ àõ Ræ2qF0)2AÏj2Mh< Aõ4’E¹8ëN\c‘Í7g½‘̓Çzp8¦Ž¹Å?‚hééM"—·dãç¥$t¥€hÏ¥©éJG74H Cx 0‘Kš `½/U桤Ý@E)^´óL"€ Øi&—ôdfŽsE( ¸Q@g4È<ÑBð9¥àšiäÐÄŽ<`ÒJ`=iØ9£½iŒ­ â3ÚœsLSØÒwÀ¥¸¤°@¤$Ñ‘KÁƒžÔm¥'N´ Ž”b“‚)N)¹ô ÍŠFSŠ@zÐJ@2iÝ4œÐ09¤qR 0¯S@Ä´ìæ(<ÒéLCÎ:QÇcMe8àó@@'°¥Ç˜3Å(\ô4¸ Ž(ñF0y4£…ÎiL Ò•¦ ã± “Ž)¡iÄ€=éd•ƒ9Å.F(' b˜ÀžÝi>´¸=x¦çži§ži¾f[…8õ¦¼›NHÈöæœ=2(Ü7ÑœŽ)óžiÅ”f€½L§+ƒÖ¡* T˜Ç9昷zÀæ…>´â½ûP"6<ô · .Ó»ŠR£€Qó S€½"àŽ´»sÐÓãœÓrsҌӂàc4Þ¦—=óNÀiÒ£éI‚OJr·šR@À˜†’éF}©p:M½Å!ƒãµ'9õ§“Awj'äR¶1Å ëÈ¥+š’94¹vÆ)C)' àæ”· F8¤‚)HéC0@ {Šh'½(>‚Œž†€¯zn1AàñH¤ƒƒ@=鼓ҔðE8¾8 czœSñëLúR€{šP¢‘—Ž)AÅ0±/Š\ai»½E)ݹ Á4Å984cÔRà”§µ)Á¦ü¹ëKŒsœÐ±ƒ‘AäšLœR†ÏZæœxÜÒ’1špbx£͹!4ò}è Á¥ Å&3C}(¸ç4¼Í éI¸Š8„óFIÆš ÍÔÞ´à(È¥ãhž)NqÏZ@}¨$” sFÜPgš“nM0rhfãŠsŽr)§#¸£9ZEš(¥ â“'4L RíIžqÞ“vH§Ÿ¥gÏ,Öó.ÔiŽ0;V†wb˜Ë‚) @í¸c8ïíNuV ã‘H ýiáM5q‘Å:“œô§/â@ )8àP:ggŽi€€æ—¾ ™äb‡íƒHɥΠ>^i§­0ÕsI~´ IÀëSJÞ›šqé1Í9x4Œö¥9#šiÐŒö«‚1FÓÚ;PÈ=)ÄQl"mÛ=ªR=¨JaV#Šq#¦i9=éё֗ôgš@h`ƒÅ8 õ ZRh ÖŒóÍAwpm­d—ûªN*†¬kÙ´Œ¡dF*ëéO•Úäókc[úRþ4:v õÀéH¡1‘Nh®ÅSßZißi²˜ Œüãªý„­y¤Å –’0wZ®].Mõ±£ÞŽ1ýk”ðåÕÑÖµ +ˆ‘¢#h'±­nI#Ó[Ȥ¤€˜õ¦ága)]\Ô\cš:ž¢²oÖa ÈZfI–<—SŽ@¬ZO¨èÑ]K¨\+¾z7½ WÝ쎻Á¤È#ùÖ]••å´íæ]´Ð•ùCuªI£N#ši/î7œªÜ 9U÷ßcww´ “ÍpÞ·ºÖ,¦–mBá]$*6µuºm½Åµ¿•<ÞiSäQ8réqFMô/{ÓNSëNÏ¥fkë¿EºÚÅYPAÇ5)]ئì Èz0üé@3\…ô¨ï´8nn&œÊÙÉZ·q=߇î¢2JÓXÈÛIo¼„ô«pW²d)»](ÛÀéHFÚjÊr¤f¹Ïëwmݸ„f ÃÍú˜ÅÉÙ)Y]6GCLÎôÍ$L&…]O 3\~²gѼIo¨ÚLv:ç…&ˆÆîÁ'es²?.2iF9Åbjò}­ ³…Îé,Êz-lÄ"Tä…PÕ'¨ íïKèi¬~|bž IBu4x RsšU8ÒûŠ@3K´â€9ïN<Oº);f€jPÍ!ÉæÍ.:â—8…¸Å'ðŠp õ¥'Ó4ÁÅ)4ìä ÐG½40üiNÍ8қߥ oJSžÔ¸Ú›ziqA=¨8Æ:šF'){ÐO=(¸Î4¥(äÓ±Å38íE sÜQÎFiôïŠR=¨GSLçÖœ>Ô„bÒ€úÐ1ëF;“K·4€=è<QJFJN£š`ÆsŠSÒ”€GÂ:PçŠ\ñM<Òîô '…©zÒŠPþÔNi—€zÐƒÆ ô4:Š`pÍŽô§®h$ƒÒ‚2i3óPƒïOè)¤¢ƒÈ É bžpi äâ†ÀÁ bSHÉô§v¦çœRyü¨‘r&œNEsšFlŠMàqIÆ:ÐnÃsJÜœÒM@ÅÀ¢›EVÀǸ8éLPwT„‘ô¦!À('Šh9  ç!ô¥zÓC¦Œ@‡fŽ­HnÔæ˜ ÃŽ´‡8Å8Ž9£PA b‚3Í.sHGhÃÐP¡Gry§`““@†8$P ÷§ôÜîí@ÅÍ# ãŠÕ´mð™JïS²Àëš@=xªšuؾ²Šuèê \Ú­bÕ™ªz_[%Õœ°°áÔŒW;á›ß'N¹µ˜á­—Óµu'Zâ¯ìîañAŠo"íG˜Àp=kHY¦™ѦU+&™â -UòñŠIè=+¨º?lÕmáÆR1æ6?JƒÄšwÚ´X‡ï!Ó¸¥ðÀ¸–Çíw@¬²€0zàU9'a$Ó±UÃiw Ó(•r¾—W] Ú(0ÇivÁë]^ªâ=.à·aÌø;Wµ·ÑͽĞ[£Ÿ¼=éGàc»£K¨»\hƆBôÅi\ñm'û¦³`×­®¯–Ò×2±å˜h]8K9Yº?Ê¡Þå+[C•ðÍ…Ðô«®ä|‘ix ùÄŒ×^3ž´êüLTþØ ëš¡­ø“]×&þU¡“ëYúÛmÑî¸ëÎ*#¹Oc7Á„ ÛŽ½KâÅSá뜺ïšËðž¯og¢Gʼr)9R‡Ö­ê3Ë®ªÙZÁ'Ì<ÉYp0;V­>{™ßܱ¥¢\4ú´ÒŒX—Y_é÷Âk˜üÉr'‘Ž•·¨±ÒD0Æp@Œ*X4«1ƒmùG%FM$ÒwžÆgƒõ?¶èÊŒÙxNÃøt­-bÆ=KLš UÈ>†¹í>4¿Üà -n9Qòƒ]UÀ" }¦”ô•Ðãµ™Íø5{ynfmÒ£ôº’p3Šæ¼“Cep²ÆÈLkší„q5¥¿š]°Üt¢zÊÈ#¤u5ÉÏ<ÒAéMÝàä]¬T=êBxÉ5™wvG=irG8¦•'‘J7(ç8§n¤ ㎴¸{Ðr=(ÁƒŽ¢”ŒÐ»Rd‚i$qNÇ­79àŠLRQ¸îôîqGSÖã»S0:ŒÐ„ô >i ûR† ggÞ‚}©&€ÙàqIƒÜæ”äv¤4ìñÒ“¥ã¦h#Œâ€p"ŽA iH瀫š^Ù¤ŒRàŒ 7(ÜëAN3Q ‡éÅJAjLãŒS†@¤Î}è0§1@Z9 ɤçšP)2@¤E7ëJO4`@Oµ4ý)M7'wµ ãµ)ÉÉÍ(àt ÅÄb–›4µ æŸÆE g©&œG S¨Æ94ÀŒ«RüØõ§2ç‘@ @&N1H ô§¤ä@Åç§gmÒ”Ž(€‘éN݃ښ(#ž(û³MÇZ‚(È Š"Lhª[“Ö‰aŽávJŠëè¤Æ)9Í0°ÈâHP$hªƒ ¥íHyâèh=©<¼Ä Òì`r . ¢à!Q·šj¨;šP) GeŒ«€ËèEAöSÇÙãÿ¾EYÅ©ÜV ŽÖ[1Ä‹þèÅL@`Aô^¢€"ŽâFйþèÅH>”§Š;t¤ñIˆќv£9ÍäÇýÅ…8($â“<S˜ù§qš1ÇSMïÖ ƒÓ4ÜSº Cí@ÄÆÑÀ¥á‡"¹ïNÀÇZ`4ô Š1šNGZ@. "÷敽4ž”¤ñFÞ 7v)àäPž1@àÒn`y6N1@ O<ÓIÈ ŸZfr0(Ù4zуŠF84z 0Iâšfž€P=iÞö£p4O’ÅÖ“„qïLCÁíšCH¼u4œÐ’ÐdóI•ÛíH3œƒÅ!Žàœô¤àšSŒÑŒÓ f‚9¤à\úRGÌÔ¹÷¥vÆh šCÍ&OJ`IFZhÍ Ï4ñŽô)¿Z â‘§šaÐcHr)M!<Ð1hÁ攌šBìƒ@ ç4¹Í)ê9¤õ p{sGNôƒ“šR8Ï ÂizÑÍ3ã¼Pyƒ¦3@ÉÆzÓNqšTàR Þ”Þ3Ö”Ži1óPN3ƒÖÐA¶iÄ`s@ àž)Þ—hÎsL$g­ Œ`n9àÓÀÜ|Ù aŠ)xõ¢€)½(þ.5O$TÊï@…ÇLS¥7<Òýi€à3@Á¦|Àõâ•:ÐðAÎh$Ÿj]Ù¥%hÂ8朽)^´£9¦‰Å.p:Szõ œb€`µyÅ(Û×ç„S”㨦‚âÆ9 -Œp94ÐF:P ŽiˆR@íCäc҃׭Ïz²ÜS3޽)s@ÅÏ>´§š`ÎêpÈ C‡¥7Ÿ^)ß…!ô(E!ŽOAN\ãž”ŒzÐƒŽ‚˜XóÍ9÷¤ ”œäfœ¤dÒwÍ- FiwsM P4À\ûRð)¤â—¨¤1IÒH4ð´Œ(ƒÓ°CLÀšrà`; ÒrO¥(ëHdld2·Š“§Z\ž˜¥ÚsLBc4t£'¥7œóHîã™Å!8¤€sÔÐN1G'­t¦w dÓ€ºÑŒRø¥<{Ò QïLçoíJF "¨'8¤1Ù>”rO"›Ò” n0zRõö¥Á):ŽiˆhÏ4¹#µ/ëKƒHbg=©´¸íHiGZO»FixÍÜóœÓºŽzPzt¨ ‘Š`'ð§ #?‡8 ŒšÅhe>´˜"ޤïJ s@„Á¦ƒ†æžxïI·4gŠiÜiücÞš:u p1Kœ÷ bŒS¹£9ëIô¥Æ)L‚9¦ì9Îx¥#Þ—hӌ҃Š4â­Í)Î0)ò 4“ž´âï“M, éM''9¥ »4„ði¥r8£’¸4: rŸåM#­sŸj8c5( Ô@äbž7b˜‡ö¦÷ëNÚqJ}èŠëN$mÁ¦óRàs@QNÁü(¥!<òh$Їšòhüf“žiN)?@wRàæ—Ò(#š@;·JiÉíKÍ/lÓ™9#4£žiBŒæŒæ izv¦¨ÇzvsÅ0Þzv9¡©ÌãŽiqA÷£ gÒtS³M<šLR0Ï=©ßZç@:qJF¤éÅ ÜÐA$S… #8¦·_j+qJLŽ¢“’:Òã夞3KÎ3M$ƒŒR Äã¥8¹{ÒîþA‘Þ€ýêR~\w§c’i†˜ 5 ;IÞ ·¥3<O,qŠŒš3&Š}YG9¥$çF9¤ärç4օ<ö¥lÀÄ4p4å ñL<ŽE9@UþÐ@nÔgÖ€iˆP¸ö¥Í!ɧr(4œ“A=(S“@ÏJCÏ8¥ÉhÚHÎh7`ŒPIÇJUš ^œÓÇ3š u¦d†§“Ž)$Ð!3¸Óˆâ€¼ÑÜóLo½ ñHzsJ'­/S’i;ã4Î)zÒyŒÐ3Í¥0ä÷¥Á8¦dîëOêzÐ1AÁäQ»šqŽÔŸÃ@‡Rd @Äž)v‘Ú€Š^ƒƒN'#‘M8Ðö£x4g¿j g‘@ Œâ†è  7N)Ç8ë@ V9ÁüšhR{м“žÔ€$äšv<ÓNJPN9¦àóGA@ö£ÐŒõ .3NƒÏÒM9ö¥##Ð9Á¤“š '±§ï@Å0î(aǧ½¥7§4c¾qKGÔR£ äÒt4qô¤ü3Li0;ÑŽ)À RŸÅÅ8nïF)_z)ÌŒãñÀäÒbˆ(#Ž)q’hÆh:ŠSÒ‚)A`ëÍ/9ö§pM!Æ(ÐA늌ҟ­“Ž”¹t Òcš^ÔºÒïFÜЭ)àRéF9ë@€ŒQ‘ëF)A E\sŸÎ†ÎzS“¦(#š&294 óÅ´˜ô¦OÒ‘O°¥Á#€1Òë@ÑÏãIS@ íG=èQŽiAã CÁé@#¼æzÐcƒ‘ƒN#ojN %1‰ÎJ“†¢+†êh ÓØ ¼P)v†óHñ€sOJWÅÚ€„𓇛´t Ç&”õ¥Èb”uâŠlQ×­8g½Àçš&1Ò“iÏZw^”g¥0‘Ö›øS‰ë@„cš@ÅB)Ç­Š@!8 ¨šPFsJ@=h\b”Ý©6J1š`8ŠoAJp &i B3@Ç4 )€c”pi{Qš@'Z9=E#ž){dÐvòi69§ñŽ) â€i1F6ô¤æ€héKߥ¥sÍ4äž(Ï¥ÐIíÞ9¤4à8æG”Í8ô¦ò:Óq“ži3O#"£À ¹ äU\Óœq@ ¦õï@¦âàÒ­ÖiÌ>^G4ƒô4§•9Á¥'&ƒ× ]¢ŠfãEU'8Á¥Jh4àOCBGérF9¦zxžiˆ^sÏJxQ¶š#S‡"ªI$šÇJ1Í0iÀäóMǽИdu¦®)IÆ.(wƒK»Ž)œSŽ ™yßžiêI“Hzô¥Èü(ݺҊo8✴p[­;¯zjŽy¤@‡ò;æSH­Á4H¦œÅ8c½3‚)A4€q r(<ò);QÐPsGÒš=éÃëL8ØÒíÇZLŠC“Ó4/i¤óÒ”M08íFsA84)â'c"”cžÔ˜´¤=é: bŽ3K¸Š¥ ØóHxáh^x4ážÃ£ŒæéŠq= Òm4àiÇzbx£qÍ8ôàóLàýiîÜŠvêf2qJ@˜ÝIÖ´(ÇLRO#rŒœRö ÏjwáGlæŒSçc"— ¥í@ Å('Ò—piœšP9ëKŒw¤ëLwQHyæ”` BtÅ&O¥/n(š@#uâKLî Ž”â”àRj`&Þr( Ò«{ ï@qÅèÎM)Ï\Ò)GÖ›šRZ`&=èçÖ”r:RŒRÓÓ­/$f‘‡g 3ïFi§ŒŠ7zROZR=©8À£š\Òãæ„ ð:Ñ{Ò)€sÖïŠQÒ‚) C’hÑžy£=h9Ï^)x¤lŒt  ö ¶i¼äàSØd`Rg¶(ïL$æ¤ÀÆ)Œ¸àR-;úÓ@§¯ÀaR;ÓpqÎjCJo×¥ § HIô¥ãͳLl$çà½iäRgÖ€xšvh8σҀçµG4£±§qé@ ¤ÔÑœô¥Á§(çš\Pm£4Š;ÐJ:æŠ2iÖç¥.ÓIƒNãôÀ)6ÒƒšpàP(ëA )Ü`ÒÙâA ½!Ïj\Ò9 ç½7$RžGi¼çš%ŠÖ—¨ ÎïF{äÓŠ÷ cÖ†A¥"ŽiN=i€JnÞi@Í;€ŒRƒž´Ö”9k81sœÔ„´Ó÷x bdž´ÓÁÍ;Ö‚ph{R°äRô⑺fÚ)2h  +ÇnjUéP«7CR’JŠb`iøÏB)ŠTG4ªË@̵?®2)‡–ëN'­?Í)¸È”å9¤ãÒ“àŽ”´ƒŠ2ix=é0}i€€`óN´‡š@8môæóMÆÓKÉ Bí“h­-.A c{õ u£<Ò`ß4ñ¦õïO#“  c0¥=éÝ{R7é@ #4d竃F@ Í!=h\Ò‚£ž( |¸Å F@)r !|R—Å!àñMÚIÉæ€œzPzRíÐ’8§ëGQŒœP!FßJCJÑ×4PHÜÕ/jCÀ cA¥¤Æ{sJ8 ÚsN J:R`gŠB8¦ž˜§ãÔSp(ƒ¥8 ^ø¥"€ Òš@H┌PsHxÓ"`ŠOZâ—Šié@×4¹¤îsHŽiIÁÍ-5¾´ iäæ”zRzx F8\TcŠsri1éHiç­(Åf˜Ž¢Œ€(íš4€F(ä æšy"€læ›ëOÈSqŽô 0sMaN$ŽôÞIÍ  Fð¤ÎN'ÍÞ‹Š)7¯¡¢\ÏT=sRÏZCxÓÈÆ9 d¼JU4ÅaíOã4Ä;ïOE÷¦¡RO»HÎ9 ~4~”ÜœsOÎF)ˆP7³K·Òœ`P†BãµÒOzMôâ0œšz ë@ª[ØS° ÓƦ‘ƒÅ¥{æŽEÍšDûÜÐ çŠLüÔ!” ç4 });±@8©xŒšNž´Äæ—=ý(eÉÍçÚKuÅü½iHƒ«´ñƒMÁ"Á¦•Í/i3Í 4™ Òã=M.A9 ñHŒRîÇ‘OéIgŠsùSp{Òä@T“x SÇJLÍÙ§qŠL`Qš*•§OzM´¼Ó8Îy§žy¤QíN,xÅ!”Òj^ôg&˜„PsÖŸÓƒIúPOµÆiqÀ¦æœu  Æh zÒ¯ÝäҜŠã½-!éÁ¥Ç Æ)^iqž¸£ï@`KŠJ2 RɧæÆ÷¥È£€(wéAÀíKÀ¤JLdúR€s‚h$ÒŽ¥.(À£H84)0{ Z1Š`&ÜhÀëJi R:RÒ’)sœPcš9Î)H¢˜}(ÛÚŠLw€\` SHæ—ñ¥Æ9¦1›y¡sÍ8ÑÛ­ ’OJ~”€ÒãÔP ÀÏ4¸Ô˜õ§bŒdÒö¤oaNôéҔ┊3ïu¥#Ž(8ëHˆ1Jr(ȧ@ñG¥)¤ê:Ð`…àsJ Í h9î(çµ4ŒÓ‚ñÀ¤+Ï€8b-8«Ï4À1ÜqJ?:AÉ¥Ç'š^¼Räç¤ÀÅ(àP@ë@¤''¦(x&ƒL;”‚:S‡<“@ ÖøÓqŽ)húR)p)x —>ôAÀ™È $qIJ0) ãŠ^)Oô€CJ)I$Rs@ "ŒàSJi(?ŠŒq@'4¤ó@½i>”1 PŽi¹ÉéK»+Š`#4¤ûRƒCŠ`ϵ7Ü"”Pxæ£4ãÒ›žhûÜârqŠ\óŠ(6Š)ÜÑH ,œõ§ Ò`â•AÏZ;ާ­ç4½OQFGLÓqÇZLàõ¥Ü lâ†âœ F ðq@–íMÛ“Í3$ž*eSŒÐ!ê9âž«Ž) ñŒsOÒ˜ ž 4dòiÀ@ÀÍ4r8âƒÖš8î(›X;a#'ŠpÉæŽzPpsÁ¥ q“úPÍ?ØÐ*´êNqŠCÁ¦Ùè&ÑšxõÍ#ô(!©Øö¦¯ÒäçŠ þ1ƒOÆx¦íÀÍœÒzÒnõ¥Î !Î8¿ÃAbx¸Ç¤Ó° 3ƒÅàg4ÿjL4g#­ Á¦† )8ÜñJ¤šC3Ö”Ò;ûQßH:uæ—êi€cÞ‚0EÔ„àô¤1sƒÅ("œæŒc<Ówdt ÞH<Ð!Ø ÞŒ`Ð1È¥ôÍ(âÖ“ñ@ A>ÔÓÁÉ¥9ÇZ84y¥Î) ¥í@ i6ç½ ät¥Í!ŽƒŒqH-1 õ£½Àë@j@Rg”sÚ€=¨hPXf‚i€tæŒsÖšXp Š@)éI’xÅ-&yÅ¥/Z:š\Ð!§ƒÚtëO&šN\š]½è§8 Ž‚Œ‘Ö€H œÐq@¥Æi¼Ð‰ÇÖ€I¦æ•zÐ0#½'SNÁíIƒ@ Gz@qN€E!9¥'48¦!¤ñÒ—­i9Í("“šq¤d9S‚Z€ódÐ#§4üÑœPtÐ4½E#£"€´dÒª€2( ‘JrGc4˜Á¥Ç½;Pi¸4î´Æ;ÐFA§ri¤Ò— ¸ëH8£½(¤#4½;Sy€ŠLN¤Ï4™=éÙ¤´™B~n´§¦h„Ž)vŽÆ£',*Lsõ C¹¥´{Ðh ïÇJSȦÑÈé@Ú3Å£­.E.x¤ãÖŠbô¡pi¥Í!‡CIŒšSM´¿¥8L­($PZ i¦€”àS: QøÐdæ••[Òc'ƒKŒÐö£ô¤< @I †E&â:Šqæ›ßž”›—§FÐx›X(Øç9¡ª"ì½iêÛ¹ à4¤Mþt€CÇj 9sF:S<öÅ'µ)B  QIŒqF9 g'H½- ÄH¾ô­“ŠȦˆ§Ç¨1@ Œ i4çô˜4€M¸£æ”æzæ”ry¤<š"€ù Ò ynõfÝ‘@ÅaÉ œ p>´Œ¹4ÝôQùÑHf(=ȧ3ïMaèE"« ì,Ù'ŠvJ‘HU”3RdŠb!Ýæ‚8§¨ã¯4„K» 5#Ê !Ny4ñ=9¤Sýêš06äq@Hx犙bP8<ÒŽ”à)ˆ`àŠjg÷£'ÒÇ4dëJÅ4àÓìç  é@8¤ @Iuu¦žN)ãŠ@4du§3škqÞ”=èIÁ”wz^(íÒP14¸=!&9 ŒÑÖ—¨éH.{PrNE&1J)€ÂXE;·JZ¤Î3ŠwáMÅ)#<š(n¥7œñAí@ Î(€äâ”q@ <ÐzàРžy @zRKÚ“¯jRã})I `(=)3JqšLdñKÐRã½   Ò—ß4èÍ8u¦ÒŠ`/zSŒSOZ@i½)zÒn Ð!­&†9=)9 $w iØ&†êJô¯4¹äѺ“iç¥!ÍÀ`éN=Eæ€ ŒS \@¾¦‰Î84§+Á4mÁëJFG4Â7sIÍ;§J]¹ÒÅ3Þ¤ÆiŒ0hœb€;Ò‘èiœƒÍ'$ð)y&Œ°8Å0KÍ7©àh?8a‡ziu(8¤){R’G=©äqÅœšpéM*h¾Ø¦Œ–Æ(É\R÷Í!ëHGÒðzÐEE¼ûÑRÑ@\À,IÎÑR ƒšoCƒÈ§äcŠC%''µ41nGëBäž9§*ÛŠbpÏJkn,éRí–¤ …ë@ù°EX@La‘ƒÖ”eiˆx' â¤P{šj‘ž”â9Å+ ñJ8P &GÀÐ~tSŽ ©qÍ4žƒ¹&€Ã'Þ—Pqš^q@T~4.9 ’xÅÎ2)€£šRp):sŠ^äRÅ!Æ8¥< M™˜R÷àRr£­óš@)Áë@"Òýiˆ ¦‘ŽiIÉ9Å Ð^¢›ŒŠP c…I˜ÁëJE‚”Ei2i€¸ç&ƒ‚zRÎò) vÚÏSHÐ9¦!Ã3FyëMJ(ÄKM+•£‘Ö€ÀsH[Ži ŽÔòúÓÁ₤ۓÅ!ŽÜ1J0zâ™’ŽG$SìsšP0hê($t¤Á¥ÎiƒÓµã‘@ôÅ;µ0£ FîÙ¦™¦õë@9PhèhÇ4‡Ò”Py¥f“=hèzО:bŽôv Òžôc=hÏ¥& ;Þ”à÷¦àÑ@ÒŽ”‚çð <ŠJ1‘JjQGQKй¦ž¼S½¨¬r(ì M¾ô \ö¤â“'=i{ÐŽ´MƒŒÐަޔƒš ÅMŽé:iÉ 4QÚò(ç´ÝÄÒöëH>”À^)2¥lÒ˜hÇ=hÖ“’´Ò¤Ž SƒŠBÙQÚ˜ ÓŠ\Òš@F sIÏ¥'Žh#ŠZ Œt¨Û ÒLQMÜÔSÎjHОHâ›óV2¤uÅ!ŽR‰Úœ+à ‰ˆE*‘Øb˜‰ ž äs@]í È!{P‡ÌpE?n>”ŠÉ¥?0☉Ž¢—i‰ÀÅ8‚('ŒSpN8£$Ó†s@Pž”R“Î)ÏZBÙ4 R€=iKc½FÊݹ§HêEóJH4À\ã¥(ä{Ó3¶”gqÇZN¿JBr:R¯J@'|SÁÆ3€r)qÀ4 9ëJ«ž¦˜Fiã@. zv C€‘—&ƒIœ (‡åé@9éASŽ(@ Þ”qMÎÞ´½h‡%ºRžGƒïu¥'à1M+ÏZ3‘Í!9´Áh»¨§í¢–£2ý>_ÆÐqMD'¹4ò0qÒ€;sN9¡G4î¦!à(éB€;äÒ)âœ(£žhçŠNO­*çÀô Ž)FE/¸ ·Z]À 'SŒqHsž;<Ò=)8äQ‘@QߥEšbpô¤$R(îixç4†Á¥àqM#¦Ú^´ÀvG¥'õ£Þ‚G½  f‚GzBN8¦xÍ;o½.8ëIÐf€Üâ€m…†x Œ@9ÏjvF3HHæ‚8â›ÁãàªÔÑÇ^”„ät  84Þô„àp)G4\´&ƒÇ õ¦²Z21HFí@ šPi£ïQ¹¤›±Ö“šbÇ8¥'¥p:RƒMÜ})zÐïÁ§nïMëÚ“4Àµ*ãÞŒü´€ÒüŠR}©¹Åç¥àŽô£Iœö£=±@ÅäÓ”‘Å0gÖ”ë@ÎE7,¤ƒKºR޼Šw>´ðr:P1Û°(ëM罃Lšp8¨Á ÓÁÎx 4„“IŒóKÖ8â—9ëH}©0hòE!íIŒQô ½(&“Hhgšp=i§4d
¥¦g'š^ô¹Å.}%Å;‚:R)yÅ Í0sKÍ0Žx4å4ZN3IÓ­ŠÑž)÷¥Û@ ŸJ2sF4½M Ïj2A¥éÒ–€NM&qÚ”œÒ`c  ,hÍšp^hœQ’h#=hÛÏZ\(ÉÅ4Zvp(G”fš\RƒIGQ@qÖ”šn)x æƒÁ Š(ëG~h”â€RÓsÍ8äô¦ ϵ‰ã{ÑÖÃ&’Œõ£<ÐsHN9§­!¨É4ÝÆMÁÍ#š=©%°)@"€Ò¹¥ýhÁÆh¥¸¥ŠNM8gHI¤4gŠ:Òç¥8R”¸>”Ó‘N÷Í!Ž´™4ÌsNíAëï@¹ÜŠqïzB¿bŒúS1žzÒƒ‚01L ã¥8Ò™óžÔÁ CÈç­/J`ÉlÒ“ëLgŠNOZ;qH­?# 7µ0ò8 )4òÙè(Ú½4ð)Tž¦€8áMÜ{ 3ž¢€v:S¾SÖ˜G¥P!ÝñAÀ˜24½M/ô\Ò ã¥.p9 bdЭž ƒŠ3Š“´Ñ€h98Å_sAÎ8éMÝž)Û°x ô¥4™$Q€(Ü“Nô/^”‘š¹§Ú™ƒéJ¤Ž´ñÍ'Nô™4cÖ€ Ù¤Sž b“ ÑÁÑšhÀc§qži¹çŠ3ùÓ;õ¤'© ñHc·{Òg'ŠëIÎ}¨Ç­(äu¦çææŽ€ÐËŽ”Üàçµ39ôâ€$,"€ø¨ñÛ—¶(û½èÞ}i Œâ”rhêGãFA85ÈéF#¥JqÚ”7TcžôáÀÅJŒÒîÏÒ¢Èû¦”Ú€$ïN£ @oJ“·Zíšg4¢€ÞŒûÑÍ%;pdÒ(ôu¥ÍèÅ!4qÅ)š1Å.AíF}© œã§šPE›p(Áã Å))ˆ@NiÂH1š8ƒIõ¥ÁíIÞÍ'4riÄq@ ŒÐ("‚íLíI’)Ô‡Þ>”f“ŸJ:šp#¸¥éIŽiI9ö Ž:ÓsNbi3ž´ÜRî"€qÐÑ@ “Þ”FhÎE=iCf“·4‚€° šQIŠ=Í)à ç¡£­! qô žô”à8 84gŠP3Mç¡ “ŠPM4õ¥ !Òr§ÚÚŽM&áÒŒ‘MïN¹æ”jnîhÁ 8ÏJktâŽCtâŒPM) ŒÐ›ÏJ@!>”™õ žELµ(4™Ââ(ǦE!üšR}èÜúÒ’qMŠqàq@>”¼cÞ“œQ@8¥…Fi(NI¤ëFh†‘A-KìEÔ pàÒ<Ò0lqHȦ!À)™bÝx§cHTÎiâY¸Î)§9ç«×ŠM£vi€¸è{Òäõ I†"€ÖŒñŽô˜ã­/ZhÈïO'4ÓŒQŽôe€àR†$QÔSp1@ [ñ§ í¦ŽôrE(ëKô¤ïIëŠp惜ô bãÖ€íHFGZBy¥ Ï4†ÇZRÀžióœÑÀ&€ §í'½3žÝ)wb€ óH~÷Zô¡”ïHbŽ;ÑÓ½ àsC`Ó§`ÒLç4ü:Š =©: Ñ÷iHÊÒ zCÇ=© í§u $šÇz1ž”t★Ï4}áHH”{P0t&— ûšh$zRõÖ‘ˆéM^´ÏCÍ>QÖ“v:Iêhu´£œsO#ÜÔh SÉÁõ w½.î:Ó æ´šPØ=iêÜTxÅ&i1`M9GdT+èNiàŽÔzœt©wÔ@ŒzRñ@Î{ÑøÓs@äP£IMíJ¸Ç4¼Á¤ :RàôÜ/\Ðß­Îhf”Ú€6MºÐ4gÚ€2:Ò絚(ÜÞ—ëš$Sƒó@㇄œñHI'š9¥#Ž”ŸJ èÐAv—vE í¼sH"—Šh47)€î´p)´îÔLóKÆ)½ésÇ4qJHŠN=(àŠ@ç84qB޹  !ˆ28§´œÖŽ0ϵ!#µ ƒJØÈÅŠBÞ”½é8†)zpa¶£ã­ñÆ(@1ÞšyëK¼HqšŽô¼SzPZ‹šaæ—#4ò ­06)AÅ7æœ ‘Í0:u¥Ž´Ð¥P ëÖƒHGZ: @õ¥ã®i3IÐÐ1ÄóK‘޵c”qÀ<Ó[šO­& bŽ”„â—ŠPKzRƒ‘MÛÍÁ @Idî¥aïMÉõ c!é@àf“9 QïOÁëHzðÐ:SðiÊyÁ¦¼s@ ÊŽ)<Ð{sG~¢€Ò±íI‘ëMç<Ð1Ø4Q‘éE+”rsŠr1Ç"ŸNЩã’iÄŒqHF1Š:šbÛ›FiàP´ã¥/lQœQ@ 9S‰;x8£4æP( <šw|Ò€9âŽÔisN) <Ó³Jh?0Þô!lõëJŠn8¥^V€7$fŒÖ‚£Š@PwÊÐ7É¥Z’0 ¡Á’})O±¥j‡$g ëÍ)#˜¬I©X˜†ŽiG  SOzCMœbœ§å£©¦!¡ÏÅ8ô¦5O<Ô˜ÇJc p¤12i `ÓÀ¥Ú)ÜßJ\ƒMèH§`i„ P N)˜=)`M7£T­Ò MÜæŸÔt¦óR·JQŽ”×ŠœÑŒƒ@[ð œKœ¨ @SÅ#«É¤ÉÈõ ŒŽ À¥<);Pƒ¹}(Æ1F)qÅŠiÎìÓˆïHœƒ@~f¥æö¥#RJq9è)­ŸJUèh$úÐ)Å4ÓˆïL"€$$ç­ÃïM¯ZXúP¡=ñCp1NÀ¦6Ž¤ÒŒcŠFäR¯+@ ¤´žÙ¥{¸ù5sšp8ïHxéM-@‡Çzz¾jâœ>îh`A§P­?¶h¸Ç4Í1iwÓìñMù™zbÚ‘yÍp0iA¦š­ŒÐ)¥#Äã™ÒIÐq<ÑÖ˜ Á§¯J9ÏJ\¸¥)=iˆLÐFG©ÊÚCÃ"ž3JÀR0€)¼Ó—š\h§¥(éHiAíL½JQÒ”Š3'4u8¥Ç4›@9ïHaÑq@çµóN m½1ÏvÅ(ûÔü PkÅ­;¡âõ 'ÐÁºÓ© €!…)t¨Ã‘:ÐÇ&•¹æ¥`1PH1@ /Šp9ÅFÛšzö tjvêNôì P[‘H¼u§Í'z\ƒéNm=zÐ9ÝFü’éKÑ©HÁ BgŠa<ÓÅ!¥O"—¯4ƒž´ðJi曂žTi¤|€ø¡Ž;˜Ýh=)¦ÚŒ i=¨cšÞ¦šyç¥4g4ž•"¨Í7$NçniðíJ àP2G½GК›¨Þ4¹¦Œî¦cž¦žhãëK@94´¸ÔRdÑHGÿÙleptonica-1.70/prog/pixalloc_reg.c0000644000175000017500000001434712240302670015275 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixalloc_reg.c * * Tests custom pix allocator. * * The custom allocator is intended for situations where a number of large * pix will be repeatedly allocated and freed over the lifetime of a program. * If those pix are large, relying on malloc and free can result in * fragmentation, even if there are no small memory leaks in the program. * * Here we test the allocator in two situations: * * a small number of relatively large pix * * a large number of very small pix * * For the second case, timing shows that the custom allocator does * about as well as (malloc, free), even for thousands of very small pix. * (Turn off logging to get a fair comparison). */ #include #include "allheaders.h" static const l_int32 logging = FALSE; static const l_int32 ncopies = 2; static const l_int32 nlevels = 4; static const l_int32 ntimes = 30; PIXA *GenerateSetOfMargePix(void); void CopyStoreClean(PIXA *pixas, l_int32 nlevels, l_int32 ncopies); int main(int argc, char **argv) { l_int32 i; BOXA *boxa; NUMA *nas, *nab; PIX *pixs; PIXA *pixa, *pixas; /* ----------------- Custom with a few large pix -----------------*/ /* Set up pms */ nas = numaCreate(4); /* small */ numaAddNumber(nas, 5); numaAddNumber(nas, 4); numaAddNumber(nas, 3); numaAddNumber(nas, 2); setPixMemoryManager(pmsCustomAlloc, pmsCustomDealloc); pmsCreate(200000, 400000, nas, "/tmp/junk1.log"); /* Make the pix and do successive copies and removals of the copies */ pixas = GenerateSetOfMargePix(); startTimer(); for (i = 0; i < ntimes; i++) CopyStoreClean(pixas, nlevels, ncopies); fprintf(stderr, "Time (big pix; custom) = %7.3f sec\n", stopTimer()); /* Clean up */ numaDestroy(&nas); pixaDestroy(&pixas); pmsDestroy(); /* ----------------- Standard with a few large pix -----------------*/ setPixMemoryManager(malloc, free); /* Make the pix and do successive copies and removals of the copies */ startTimer(); pixas = GenerateSetOfMargePix(); for (i = 0; i < ntimes; i++) CopyStoreClean(pixas, nlevels, ncopies); fprintf(stderr, "Time (big pix; standard) = %7.3f sec\n", stopTimer()); pixaDestroy(&pixas); /* ----------------- Custom with many small pix -----------------*/ /* Set up pms */ nab = numaCreate(10); numaAddNumber(nab, 2000); numaAddNumber(nab, 2000); numaAddNumber(nab, 2000); numaAddNumber(nab, 500); numaAddNumber(nab, 100); numaAddNumber(nab, 100); numaAddNumber(nab, 100); setPixMemoryManager(pmsCustomAlloc, pmsCustomDealloc); if (logging) /* use logging == 0 for speed comparison */ pmsCreate(20, 40, nab, "/tmp/junk2.log"); else pmsCreate(20, 40, nab, NULL); pixs = pixRead("feyn.tif"); startTimer(); for (i = 0; i < 5; i++) { boxa = pixConnComp(pixs, &pixa, 8); boxaDestroy(&boxa); pixaDestroy(&pixa); } numaDestroy(&nab); pixDestroy(&pixs); pmsDestroy(); fprintf(stderr, "Time (custom) = %7.3f sec\n", stopTimer()); /* ----------------- Standard with many small pix -----------------*/ setPixMemoryManager(malloc, free); pixs = pixRead("feyn.tif"); startTimer(); for (i = 0; i < 5; i++) { boxa = pixConnComp(pixs, &pixa, 8); boxaDestroy(&boxa); pixaDestroy(&pixa); } pixDestroy(&pixs); fprintf(stderr, "Time (standard) = %7.3f sec\n", stopTimer()); return 0; } PIXA * GenerateSetOfMargePix(void) { l_float32 factor; BOX *box; PIX *pixs, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa; pixs = pixRead("marge.jpg"); box = boxCreate(130, 93, 263, 253); factor = sqrt(2.0); pixt1 = pixClipRectangle(pixs, box, NULL); /* 266 KB */ pixt2 = pixScale(pixt1, factor, factor); /* 532 KB */ pixt3 = pixScale(pixt2, factor, factor); /* 1064 KB */ pixt4 = pixScale(pixt3, factor, factor); /* 2128 KB */ pixa = pixaCreate(4); pixaAddPix(pixa, pixt1, L_INSERT); pixaAddPix(pixa, pixt2, L_INSERT); pixaAddPix(pixa, pixt3, L_INSERT); pixaAddPix(pixa, pixt4, L_INSERT); boxDestroy(&box); pixDestroy(&pixs); return pixa; } void CopyStoreClean(PIXA *pixas, l_int32 nlevels, l_int32 ncopies) { l_int32 i, j; PIX *pix, *pixt; PIXA *pixa; PIXAA *paa; paa = pixaaCreate(0); for (i = 0; i < nlevels ; i++) { pixa = pixaCreate(0); pixaaAddPixa(paa, pixa, L_INSERT); pix = pixaGetPix(pixas, i, L_CLONE); for (j = 0; j < ncopies; j++) { pixt = pixCopy(NULL, pix); pixaAddPix(pixa, pixt, L_INSERT); } pixDestroy(&pix); } pixaaDestroy(&paa); return; } leptonica-1.70/prog/blend-green1.jpg0000444000175000017500000003323311653424354015432 0ustar dandanÿØÿàJFIFMMÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ{?"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?¯EWˆq…Q@X³¦Â—:¥œ2’LŠãÛw5¦!Óõ,°dmѤ•Ö!p̪ª c'-Žý8¬5fFܬU»2ðA§C<ÖÒ‰`•âFÅH¶G8ªMu}ÍgÓ,W”–IüÙcŠ%G$+ƒŽ9Àû­Oc¦ÜÜ›†™m¡šGX•Yt€ã'åù³ƒÇ$œÖ º¤å.xbç!¸ù³ëÀæ–+˨axb¹™"s—D‘‚·ÔƒUÌ‚èµ%¥½¼+ §à‡1ŽG ‘ƒŸJ–æÒZÎÊÝñÂŽXîù™TžÃŸ›öªj¹û7Ù¾Ó7ÙóŸ+yØ•HìûÙØ¿qcž:RæB5¢°Ó巎䛸c3¿y· NCmùrJÁÇ^j¼vIöËÕ•fXíC3®Fþ)è'“Øy¨N¥|Ò¬¦öäÈ …s+nëƒþz †;‰¡˜MÒ$££«ߘæŽd= I´û Oö¯,À’ùLT>ævP7éµ Î? €éÑVkmîb‰YÉ.T.ìzg¶~¦©Ëq<û¼éå¶ Üäçã?LœR æùâYÛ·yÎíÇ©ÎsþMB5WK³’$¹í#6òÜ2¬ÁA ¸8çœwö¦ÿfÚ f¼+t!òQT¸,åTÆ0B“»úUDÕoQå“í2´²&Ï1¤bê7àçŽE"jw±‰JÜÊ$–E‘¥óy*uÏO˜þ”ùî£Ú"´óNë (@—MØfÁ¸çÚ‹{K%ˆ¢þøý±ö\|¤â]Çå öaž}=+*+Û¸$’Hn§ŽI9‘ÒV üç$ç“õ¦,Ò¦6Í"à’6¹ÈÁÇÔu£™ѬºeŒ“:î–lë$ªH%€ `ÛÔdàã§^*+»(-¦š9¤”HãTq…fRX1Ç8Àèw ªÚ– ó,ÍtÒ§Ýv™‰¸9ÍA$óLI–Y$ÉÜw±lŸ^{ð?*9Ú|–ѹŸÍº‰¤WLyq€X|Ã0ùy9Ïzd–¾§mc H$,HîCìpL޵P]\-»[­Ä¢9hçê:Q´Žï½Ù™òârZ›¡®-­?³>׺S爀™†$‘ÓŸ»‘ÛÔæ§6)nÞkÜù‘ÚÇq.ÖP>b¸@=éÝÛҳ绺º#í3MŽžlŒÄ~$ÔfYNs+á”)ù cè0?*|È Y4»h ; ¹wD…# 29ÜHùˆÞÁéRM¦ÙÛÛÝ4²JÐÛÍ(MTɇŽ03ƒŒåÿ#ïYQÞ]ÂXÃu6Õͪ¼‚1’¹p¢=å@î{f‘-¬æY.nÒ£.èÌ 7Ìmlü\œqŽõKÍ”J%¸ï wg·5)¾¼7àÞ\ÀÀÊwc¦7uÇ>µ7B,ÝiÑÅm$ñyØ)$N2À¾ì㟻ۮE[}"‘o#Îò3È«*© ÅNÓÌÉã8úÖJ]ÝE;ÏÌÉ3ç|‹!VlõÉ4‘\ÜÀÊÐÜM*• ŽT€Np1Ðrx¦«™èÔm"Ò;`gº),‘³¨fá@ÈU*Ýœ`F3Þ¨i°¬Úµ¤)ØÓ |ÿt¶OzT"îä[5°¸˜@Ç&-çiç'¯?ZC<¦_4ÊæOïî;ºc­&×AÚm͹Ùp0ó2ŠyklÌ£'¾åü…G&ŸbŠ÷ 4’A{Þ8ßsd°æÚ9ÎqøVTsKC®†6Ü›[Xõ# Àæ¥ûußÚMÏÚî<ücÍóNì½×õ§Ì‡tmÚi¶QÞ"ɦÙYeÚ6‘‹c§eCõÉéš«%µÅœ[b’)šÚkARø ÇÍϽk,Ý\³—k‰‹¹c!ÉÀÀü³è)¾l¸À‘ñ·f7žŸJ9]o¬c´ŒHŸ<‡€g“2K~'oÔ7§3ÿfÛ,wÉö“4¿hi<¼•\c§Ì9ÏQÒ³n.â@ì*¯Ý N7wMn-ÍÌÆ0"2 uéÓ¨Í+«††©Ñí¤¸’Ö).Xe$wŽC¸ê8çœvª×0Ú.Š³Ã Êe¸À3`œ*òApwŽ;mïT<é·3yÒngÞ͸図pI§OustA¸¸šlG˜åˆÎ3‚}p3O™†ÄštÈ<€¬qÅŒ± ÿ"ƒY—'¶=±MûŸog%Ô‘\åµVXØ®õ-.ݹÇ~ž¹ÖºÅ¬â@ÆLg ìÜdH ‚ ‚8¤½Ô./ågÎÒØ +ÆqÔ’~órI<õ£™ »yimeewIayåÇ)8ùUyÇ_˜gŸON]„.mhç*eŒÕ”ÒÉ/.ìÇs?$ýãÔýN4Hàð¨Ž9ÈúqG2¸®ˆ ³M¸£yÊ–HwRôIùNy'éŽ1LÕìí¢7-n$V¶¸KwXía•°c9ëœö¬¿:]›|ÇÛ¸qŒç}yúÐÒÈáƒ;0f.Ù=XçŸÖ—2 špi¶Ä,S“)µk“$xòÕBç‚sÁ¦Ícj–Óª<Æâhn™†Ì¶ÀSå¦sžÝ*’Þ],BÜÌ!ç÷aÎÞzñÓüša–VÝ™\î[æ<ŒÃŸ2SGÓ¡¸B÷-fD’ÆAg¸}}(µÓ¢Ùk!Y|Å“7”mŽ6•Éá29çÓœ–f}»™ŽÁ…ÉÎséß§­J÷·R(WºÀÝ€ÒìîÀÎ9æ…(††‘Ò`_¶[¨¹ûM¢®ç?rF.«€12ÜóŽÕ¡ii SÉhó‘ Á‡t¤bA‚w Œc§=ET7·f$ˆÝOå¦6§˜ÛF:`f¡.Åv–;wnÛž3ßù M®¡®º]«Cçfé¢Kv–FR .  c+†qž¸ý$µÒ­å™>yb†xcr®¼`ÊAçü¨Í¥g¦©|ŠÀ]LX¢¢¹‘·"‚çº*spYÜÜLZC—;Î[Œs댜}ió º&º‚mmq•VRêVbÝÇÍÀôö<Õ»6Ú/Æ.üË&3ÛxRÆTãv:äÖIf*±*½=9©¤¼º–%ŠK©Þ4ÆÔi03À•<È.j,×Å­Ù›ì¶ó6è·˜D§'îãnqŽi“ZYµŠWŽâE™²T¯Í'ÊŽNÙæöéÍey½Ÿ{olîlœœŒçAšRyó(CóTv>ÜÈSæAsWRÓ,좚5»q„#~D‡88\|¸úž9¢=2ÌXE,÷%š2áþUä€îéÏ#õ›-ÝÍÄI×3K}Å’F`¼c€O«wr¶ín·3;¢6ÞyÇZ|Êáti & œÚÅ$Ëp¢í!79@Wã ù΄ԶvÚ~ėɘGöØ¡v¹Q‚ƒs1|§ ÈçšÄi$bÄÈıó×3S=ýìŒKÛ—eèZVÈã¿_ÌÑ̃B¾weºéIz1KYˆB3F)h ’–’˜Q@ EPER¢ŠLЊ?¦µ'»†%XRIF耜~•°4/±Z^NSÔÆ$ů$ƒßçàU(É…®`ûöõëEikzLÚMüéäÜ-ªÊR)¥Lý¬j¤öw6»>Ño4;Á)æ!]ÀuÆzö¡Å«Ü,Ñ %j>•®Ÿkw<‘‹¬´QCv؉ÜÎxëPO§“~ÖÚ{I|»Ehã9ÁPy8Æqõ¡Å”¥F=jÂØ^=Ë[%¤íp¿z!Þ>£¨¤[KŸµ›v·ŸÍRÆ#;—þÖ„˜µ ͱªèRÙê†ÆÎ+›†¤„yd²îõ8êdº4nREde;Ha‚´ý£êÇUwâ ø5 9±$öÐD·2ÌÑ’w0ÏCÇ9ãè¹×´Ý@êPOçD—З0ÎLg$•ÈûÜgžÂ¹\积Ócüp:ýhö­‡3;â +ûUæ-$–Ò[C ±Ïlpzp>¾¼W+w$s^ÜM ²Äò3 rKm'<“É<÷¨yëŽ?¿ç­/~˜4¥7-ÁÊâf‚sGj?§_j‚n£dtþ|Ÿþ½¡úÑä RÒgüÿŸ¥/~†€ J_óúRRÅ¥ížß•'ùúÐ Rö£#ŽG>ô™ìqŸ­0¸RÒwÀäÒç’23õÿ>”QIŸ\~t´€(¢Š(§½[²µµ¸I Õã[ʨ©‘œœöÜ08ë[á{T¼Õ,òêæöÎÜÊ8†lÞb~ðã­BOQÚç/š3V³¯~ØÖŸd›í)Ñl;€õ#°æˆlnfÔÄDËpÒö8ÚAÎ9¥ÊÅ©^ŠÖ—NÓa¼žÆKùVhƒƒ)Œ‹ 9{8ÈÀ>¤qYÿcºû/Ú¾Í7Ùò›å™úã8´d£5ûU »û2óýCu=;TCL¾7Mj,ç7 ÷£Øw.zd{ñùÑÊÂÅjOÓëV-mDúŒV“»Â^A™dbp2¤Žýyâ¶åðÌ1Évùå[)ã†å|ó/ÌsÉéÅ5 =AEœïøRf´¯ôyáÕom,ุŠÕÈfXÙ°r@ãñ¨aÒµ˜DÐXÜÉïX˜©Ç\`Òå{̧ŠZ3EH‚Š( Š( Š( Š( Š( ŠLÑšZ(¢€ (¢€ (¢€ (¢€ LÒÒS¥¤£4´QEQE (¢€$µó Ü>\"wÞ¤E·púc¸­-Q.£žÒ+ØgRwJÑlßó:gßÚ±œíNÄg¸â•cá2$.cË„$™çÐnQô#Ö¢UáfRÔê®ôË&[™¶JÙ3;ΪÄFÛ›åÎv÷x?1öÈÍYôÛ8´±2$¤QÅÀFÚÒ2¤çf2HÆ7¹½ýøŸëJ_v€@댟ÿ]I†§W6ƽuvï©î*ä±[Í«^ËM Czñ–~pÂS“î Ž+›xÞ2¢DdÜ¡ÆàFå=õ†¡P¥”¨eܹÈägéÔ}jùõØW:Dµµ½‘œÚ†–;kp°F²6àÉËî8{Õ,-ŸÄ2Z*<”„.–XÙ±»‘Á}«#ãÇ?çô§Å+ÂÅ£;X£!8þR¤~DÓrL9±¦FJ<– æÉlw°2` S‚wŒ†sŽþYÇZ/¬m­,|æ°h¦h#o)äl#4’ß=qž3X8`éþÏZœ úú÷ÿ?Z9Ðs¥kñê7Úym €Â„TóóI õ˜¨tý>à¶clóÇ+¸¸ö`¸9n¹Ç‹éÓ§µg¯=¹ÿ>Ô¹ýë…Íyí­>ÌñG RÉ'3ol– dc¦0O¾yÏjŸY´µjËŒ}¦H7%Nqé°õ?…`àqÓò© ²’"ß»F,£Ðœgù 9Ð\±gj%¾k)—dÌ i¼ãl¼ã9ìHǶsZ-§é¦h SŠwÙï? ;=·¶Üö½« ‹;v,I$’s’{ÒpzФ–â:4Òã?dyô™à–I%F„o'V+÷€ y眊x-ÌVö’@¦T³¸a*ÊN I3½ˆ;yÏ\Ž•ƒÇóþ}¨úqO˜é.t>8Ð,P™#TºÚÀH NXí8‘Æ;Õ{ÛV¶Ñ'-§=–náUË1ÞËÏ=qÇ#ƒžœVÑè=ýèÚ; PæžÁÌoÚé°Éy±y kc#]‰U#6Ð: 1÷ZgÙ4ùìÛ|½¼¯?˜Oß1‡àœc÷‡jÃÀ£óÇ¥.tÆåí³[h³–Ӟț¨B’Ìw¨Y9ç¯o˜|¼ûVhîzw£¤îÑE"$·ò…ÌfgeŒ0,Q70ögó®’ë^ÓgÕ5«Åk¬_Úù¦%Ê6ççéòÏÚ¹z³6,Ùà“þx«ŒùUâÚ:×ñ›-Åʱ¸\YÅ šKurŒö± ƒý+êò§ˆ—UYâD•\´‘¬fL …éŸÆ³ ”b¬¥X#Fi1Æ?Jn£aÌÎ¥5"-CQ¼_5…ÜnË–ÊíÍÎàÄòÏàG¦j8um%4­Ú’i¬ÄRñæ+d`–àv=ë[;ˆ­’y"+ãiÈÎ$;dZƒ úïùНi.Ãæ:»ÍNžEîÇÚlâ·\Ä£ ž¿?àß_œÒx‹N–{Ü5Ìi†½²9G‹ÕKçúW$‘É"ÈÈ2!]ïóµrv†ˆ¤hä »0Èǯ§Ó­/jÙ—–õ_[éæ™ÓϳùJ°A?( ã¦j-æ°^9îO’ágxü§vAäócÍc‹IŒ&QîÂ3‘œ OæG¿µA‘ÓÓøÿõRRiXWgekâ-fmEÅÞö¼ó”*Awà~÷~½?:æ#ŠI‹]ÅœóŒ(ëÖ£ÎzŸ_þ¹ÿ>Ôý£+—gšþYfMÙRË´‘î9Å6O;0ˆneVs†^üÓ7y˜¬Údii^6Q›nw.2G#¨ä?t1I<‚8×sãž8ëÉ£QØ4fŸ,RBʲ.Öd\‚2ÔÏÆ‹1 IšCÀ©î-eµ*& ¥³¼Ǩ޽è³Üv"¤Í‡¨ôÿ#­ç4 áš3SEk4Ñ4±¨ePIùÔ’qœãóPäzÐE ŸLÿŸóùU“ar¡ÉAû±—× `ã9Ç#ó¢Ìv+ÑE&iZ(¢€ (¢€ (¢€ JZLS¢Š1@ EPER¤Í-&(KfU½·fŽ9TJ I€9Á=«eŸM¼W2Àñy¬í°(8-k¸(^ezí&°ü¶˜ª*³3Ž­è>´û›¬Ü,èP°$›ŸQÇã\ÕiNRºØ¸³N3¾„ß1¡ÞÛÛhÏÊvîØ>îí¿{ŸÖŸ+YåÇeà„ì.Ñ´eË gjˆÃmÝÏN+[v‚VŠPU‡PO¨ÿëÐmÊÂ’BHHRÞ#}EG±©Ø|ȹ¬J¶;Õ¤ŠÜn€P8‘›HÇ~˜Ç>•³>¡k6¤©'Ù$‚mVc#\€yñÖ¹—¶1$lÃjÊ›äÃ$gŽÙ:Ð1;ã§ZßÓ½Ñ.FâÝÚAgh;W‘š!)’0Ä(_˜r8ü? TÉöR(ŸkÅi Mž¹ <¿!=·\gÚ¹Þ=W?ç¯ùíJ¬À8V 7Þ¸ëÈî:×µtóŠàNæ,@äçII‘ëùñþ{ÒäzÔjHQš23ŒŠškimÂT.þŸ0Ï@FFsüCµê2ZBq×ßüþ”¹Ç=½sC™¥©a¶–áâPʹ' ½³dsÈžjѰXZLRÑHÅ¥¢…&ii1@ EPb–Š(¢Š(«t«¥k3Éå$r«3ûŸBj½þ¯zk@/_{‹«û¨î-pZ$·ï‰9É㯭P¥ÇëIŠmÜfÔ–1ElÒÊe•„_4Cc›³åJÿ»Øp%}F'†ÞEîßý!^b¬vDUäüÇr{{Õ¤È&yáTxDìľ<`œ°_—<ñÅHºe¼v—3Ïu »¡l0%”’6îà© zÕûÃ×±0Ôc··–Ö)ä’²¬GfäYXL¸ôÚ\döÏ­?YÕ ¼¶1ÄÈû¤ …“0¨Ïˆl/QÂ=ø¢_ M%åÒÚ±x"œÂŽb‘òGPp‡ÈɘÀªrÞÆúUÌ-zò—ÌŒe$£çþ``Ä`aM#øvê'MΩ,æÉ‘€wªñÓƒÚ©I§È·vðDñÌ×;<–Nä㸂9¡¹ ܼº±¶Ò+IäŠçËE,œ‰&c‚:péÈíÅ2=B;Ë} ­LîÁ“å8 ÿZt†–?2ÞòÚq戛fñ³!ŽNåCÍIý’’Z$±^Bû¤4£pTUPNAPxö¯{ÂÔ‘µuxÌ2ÈÒ[}–%òº‘vN;ðFz㊓YÔ༶h£d}Òîvɘ—Ÿ— p½z(+ÓÒ¨^YGmmi$S,Æmùhóƒ†À `ûU¹<3}*¸Q™'-…BN9%pÃ9Ïá’ò B+øRÊ57.°¬ ’Y„8•È8lô<•9'r㎂¤›R±žX╤6²IŠ¯Ì£å*G¾T~êÓeŒ÷–ð'˜cS*¸ÞÀ ÜmÈÆFwc©§Ûé/pÑFo-ãš`LQ¹bYA#9 G$däãÜd¼­k¦•–¹ ÆÅÊBævi"œ€)€€­YºuÒEö“)¤Ç—:+|ƒœ®FXdc‘žžôß첊K«xãE#±ÜB™r®sœzqV"Ðf¸8ö¼Áò]rËåì  ç=Ï=(Õ†¤ÏªZ2Ýüå×Ê`ÈÞQBÞÄ·ùïPé÷6ÑGfóJѽ¥ËMåìbdL(=ÊcæÇZ­w¥]YÝClñ±y€1åYwe°8`ä£ß¦3mXÉlöÆáÌÎâ< WfOׇç®8ÍOw¬Cq×™4’I*¥òIùuúƒT?³•t»·k}¬ïq– H ®s–\`s¸b’êÅ!ká™$71o2!rduè3‘Æ)ÞV J£üzÒ}#ÊóÌ×¶ñ$2ˆ‹:È2ÄŒlÏ@{:“û„,d–( [ÚY]Ø©U1€ý±Ž¹ÏjžIŒœÑš¾ÚY‹qšîÞ(þ]’6ò$ʇà$ 2ž@ûŸ.ŽÖò¼w–а•¢]ÛÎò¼0§sþ4¹eØ,gdzÒf´§ÒÂÛ$°Ïón³´DØÎ tÆ?ûVolö╬&-&ii)´QE0–’–€ (¢€ (¢Q@ƒ`¸ŒÈïnRÏ,£Ô{ÕÍBâ3œPK¼TÉmõÈ<–듎xãŽsóøýjѰjÚ#Äï/—±¤:†R2þ!Tžš5¥Õ–y§’=Ií¥yC4î¬L±í\.qž0x<öÅK.«nòÊÖú‘¶_·O+§”Ç̘`Žz•°9ö¬vÓdKv˜O2ǼƬwì$ØÆ0r8<€AÅ1´û¥³Žéaw¹tRV0 /Ìqʓצ*ùŸaÜÚ·Õì–""ÞM˜Wc Ú¾lŒc €·G_n´¶ÖóÞÇuE}F9"†4)¸—L–#n g#ž0qX ir¶ËrÖÓˆJчQ‚»½wdc^™ƒX†9o®%³ Ðwi Ç.-õ$c×fè·‚3‘ÒN£ùŒ«;î*k]íU†8!ÄË/î` —Žxé‚xéGö­ÒGH­á„ÁRªû—?Þ séWí'´[èn#¶µ„¥ËÄAM¼g'’9æ ½•D€ rQ™CGtöéO[n2Õì·I²D‰Ê‚$Ú'$zŸ¯_z’[éæ`Ò[[,˜À¡¤<õ=ò=1ŸÂ´#ƒHxÖFe ëö’FbÌeZ³guBÙ‹ÄrÐ’®Ù÷rg¿bE /¸W¹rÆD‚U-½VHT8Uùxé€3D­Ô! ¤ñRG„3 $ägÓ,O>¼b¯}5´‘ Tf6åÙÆÍÂR3Á2g¸ÆÎŸ÷Õ:â8!±Ô„1Ú-»B«o"Í™%ldewg8ž>^آϸI©N¬ÅÖ9U‘’DÜE §Ø€:ŽzÓ†«u¹‰1°bICÚFíÇM ( cÒªKC+Äûw!ÁÚÁ‡àA þÜT]ŠäÒ\;̲ªÇ&6yHnAïÉ篿AVÿ¶®€ùÞ<È%o.»œgþgŽ•Š1EØ Ô'·#]†5 2åX62ôùA0i./å¹’t„T""F… X t<±Ï¯z­ŠZWasMµ™Ù£{x—B¢Uv®;ñŸ_çUäÔXäua(mß(YôÆ9Eü*¥ù˜\¸5Iöít†T6¬±† QB=Ðì{Š{ê÷2É$’¥¼¬Ò4£Ì„6ÆnN=½­gâŒÓæarÁ¼˜Ù\ù>OÝw¨äË)r¨¤ã„*HÉÀóÏcT¯Ð†k5Ó 1<ë;ÞƒkríÙ À8Ç^OA‡G¨„[E!öÁÐ:eüÎê? „Y7öt—ᱠȱ¨có89ä{q×׊|ZUÜÐE2${eRbTV“i íRrNAíÍ?{¢¥Ùu¤{c¶ %1$,¦Þ-¸]½[ˆ;G¯äÖ-­äžâºy'¸IÙe|(*ű‘÷?{µf¦röÂpˆSap¦DÞTg'nsƒÛ±=,zeÔ·-o_½VT#pà±yéÉ4Ô¤d·6¿Ùc¶-™ÖRÒã`ŒcžFz÷ô©äÖìvl+?ÙÄcÆÐîÞFþƒ§¯9ª§Jº"mˆî w,ÈPmûÙ`p1Áä÷´—z{Ú-©wVóÁ|¡ 0 #ŠWj\¸Ô¬î ÑÈ“:©šuUÒ+1”pxly* EöËI!ò$û`Ž9 ±º°fo•FÖôû¹™=i·z5յ̰¢¤»&ò@ŽEfÜNr‚J“î:ñN‡C¹’XÊ;2+Ç*?ΰ^¢š«Ï°õ'ºÖ£¹ÔŒÞT¢'Iã`¢Iò>×ëÈâ–ÛYŠÄÂE+¤ 2 !÷tço·§éYòé·1BÒ•£Tߺ9Qר<‚sËøzsL[+†¼û&ÕYƒ: .ã¸ôQšNR¥»ËÛ{˜£K,Q‡pÇ–`6 ã§'<ú ©ÔKa4«ÈÌÁ£\¨r2Àõ ßASG£ÞHˆÊ±3"5ó£B Qœ·#·áœÓ—Fžhcš ž[*óI3àe¹ÎÓéÐÖ5©Jª°Óh’ïUµ¿C*ONÆMÈ9ó%lï‘/¯–ÚÌ0ı”—LÒÄLqJç8à³)Ú~Qȇ-íÃ",1‰$b©’"3pp¤‚q‚?éQ 6sj.6º«ÈŠì£<…$8ô®g…ïqó²Í¶«l’ÛÝJ—âš °íA 2=>öHÇ'=3Yuü+OPÒ$°y hÑÂ’wFFTW>õ^ÞÒK…•¢í‰w9gUÆz ’2O`=)¬4ÔÓl¾„T™­Ò¥ nÉ$,²Áç3UV?˜® Ï·Ôž1Dz-ô¥‚ÇÊêŸ4È73 ¨?6F1Œæ»9Yf}«ßÙ™X‚á‰=6®Ü³€AerEW†Ò[ˆf–0¥!¹Þ;ð1Ï<úQÊÇb*LÕÿì‹Ó*D©Èòy[Rdb®z+sòž½iH¼DÞV¥Ô¬èw…Îí¸?60sŠ9_aY”sFjãi—I˜ËRËæ®ä @†r£‘×Í"é·lå<­¥]ãmìƒ-’NžœÒ³Š™¥ëV×L¹i Ð̾jùxÎÜïÎÓÈ#ÎAÍ2úѬgH™”³F¯AŒàHç§×ŒÔÖ÷wlßgâ'¨VÆ}8=óøÖž©72ÞÉknRHï>W$È>s“ÏQ³¨ÇZM*.“z#²7n³BV Ägå“' CÞ”rë`¶¦L²<²4’»3±å‰É>¤žOøÓxÇlò}¿:èVÖÖÖ{!6Èòʥħ1 ƒ· ì3ŽÂ£{->K™ m£ŠHç2Hbž;äz{Óåó _¯aÅ/œÿú±Z÷ÖB-*K‡Ó^ÎQsi¹Ý·©WÎsÔü£æTëW6–[,’i¢³Ýº̧ÎpIÉ#“ŽO Å.@±€@úw÷ïF=¹öÿ Ó’ÆØk0Û11FÁ<ÈüÁ˜Ø•ÏnxýÜóÒ¥Ôl„:\W§=”Í;FP³Wk9<Åc óøýiGÝ:úâº84èwF¾KÅÄW,®ÿ¾…XœõyÁ^¼tÁ¨ ƒN¸k0,Œi»k\ù­ò¯É†÷oŸÙxéO‘÷Œ1ÓðÇ_óúR ÿ®+oɰH$Í™g†Ê+ÆVýã±@Aÿgçè9ã­YƒI±Hë“11ˆq ´hùùO«3gzsG'˜Xç@Í! ~U£¨ZÁÛ%œlÛ¢ySÕ€wPHÂŽžôý>ÐMdÒÇd׳y»]ÊùK€C|½3“ÉùF=êm¨ŒÏòh'ÐÜØXE}ö4·,^{ˆÄ†VÊ$.NÝNsíDI¼ï“~Âη†C‡rœŒ}Þ¹@ 0}*½Ÿ˜ìsÜRgüæ´ì-<Û6’;¾›ÍÚЫ0(¸6‚s“ÏAŽù«vÚlWìŽðÈηqo²äJü¼ $|Ùâ’…ÂÆ:LOóÇøÖËiðý€·Ù›É¾oÛwŸõ›3·>÷ËŒnïMñGª\´2½Ä¹“?Ÿü vÆÍ:ŒŒÒÒQš EPIFh¦EPÑEQE€(¢Š1W¡™%—gïZÕmЩû¸UB ?¦9<Ó‚ò)É á“ßpÊ©l´u[†ÓšÉü¶ˆ… LkNÆ‹=™©ãÕ!‚ ?mªI=ªå]‹ ¯æ3 €y*G¿åYÒ±ÆGR2~»ˆþ@Tc=ÇøÓ»¢º¡£5º5ÒFbYË…#3ŒàãéŽã5*kF9¢™-£ "’GÜ~r„Çlàf²¨¥Ï ».[jÚÙ-Ì(ñ&åb~`á8ã¦6Ç¥%ÕâÜ uŽÝ!Hª¨bÄå·d“ÏRzb«8Ú‘‘Õ—q÷<Óhæ`j¾¶EÔ—6Ö±A4²‰$`ÌÁ°Û±‚x¤‡WŠÕQ-ôøQïe,Í»äeÁ禧ëYtQÏ-ÂìÔ¶Õ"†æ¶é´EÙ£Éo0²á'±zúóU!¼‘/¾Ù.ç¹rVB„±î䚯Ï2«t,á‘IüTs;±.± iE” £"™c|lšF‰ ¡L3°{ƒéU£Pó…nAlQ Ûåãø—q÷4î÷·4-5©í7ª,"òåhØ€ÅÈ=rHç ~i$Ö&–t•ÓqK…C;7Ýc$“Û׎جú(æasBÓUkV‰¼æ9d”|åy}™vù1Ž„U£¼’(åT‘$ ýÒ¤‘ÄÕz)s0¹³7ˆ®f‘¼ÂCùŒâGRpF$€9÷úÕ¯š$B"ŽHÇ8ÈpGþÍU(§ÌÂåùµ?69OÙÑn'P“Jüà ð3€NÑŸþ½HšåÒ\Å0À)”B1BÞ­s¸œõàVes0¹©>´×NËsO(]’ÎîÙCH<‘Ç=;ÕKë¿¶Üy¢%ˆÒ0ˆI(ÀëÉãÖ«QIɵ`náŠ;c¯nii*DŽ”QEH ”¢ ¶6œ€púҬä_Kw¿ØçŽIÉTó#a‘ß·O_­hDOÛdéͺôíº!ü€©í˜É¨ÈÎK7öºòO®ìÿ![F%XÄ–ÂXmEÕUÊ©R0'úfÝ=ºó†ý†í û@µœÃÉó|¶+œóíŽkNp?áµ÷xWðßsA‘ƯrˆO첸1ä.ÓÚ’W ÃN¾y$lnYã‘D,vqŽ?-.%®#¶•áLî‘c%W¿-Œ®p+Sº’ÛíOˆ±Ö.ù’%sÆÌ}àqP>¥r«e o1»–6ñ““4€ÿqÚŸ³)•ö[Èá["u‰°¾fõ²ºr㚎ky­æ0Ï ‘H1òH¥[ۃϯçZí4€ÊÁÛ)¥Âž˜ò˜~¼Ô±¢ÿÂE¥ÊWš4•öð7•É >˜¥È+M¥ê ¬/žŠapOæ=üª4‚î(Võ!cR Ü* çƒºµtgc¡Ý©c…y03ÀÌ-ŸÏ¿­:öòXUbŒDû8 ù([_÷±š|b”˨^ißjh—ÈIU?wn.AÁùTŒrsžEW}>õg=È™a‰·ú r3Z~m«¼”¸¼E!ó¦C}<‹sîÒ5‚\¢Xþðwݯzg-Ûܵ²Ú\5 ´^Q/Žüc8ät§¶•v&hÒÚI™cIÊŒ¶ÐÊÆG «Ú‹Ð2Þ[\ûãÎôþU~þîX¬­ää‘YšHÕÉ"Þ y÷¡SSš0J¤Æ9ùdÙ€Ø8àã¯\ÔxNüVž±4“Ea$–xåsÆ|ù¹ è:VmfЃÛò£9Ç4´”€p,¹ÚÄnldpp}G›})i(¸8Ç•‡ÿZ–’‹€.´„ÛÛô¥¢8æŽßýçü©i(bŠZJ@-Q@ Š1KE0ŒQK@Q@ÿÙleptonica-1.70/prog/speckle4.png0000444000175000017500000000244711220550671014700 0ustar dandan‰PNG  IHDR˜0jïÕ pHYsb&2ÙIDATxœíÛv*1 Cçÿšs:4_dgV tû&‘%í·eŽÿsKæ¼_uÕŽê3Ù·gG%ªJÌó¾=˜Âg²oÏ>f`Á"Ðè!:y‘ÿý7+§Ta^°§W²€éTa^°§W²€éTa^°§W²€éTa^°§W²Z0^‘ÉËìx¬^^¯¸Êh§0N`"Ñ´0N`"ѴȯÀ<8%¢ïnÑhgúîsšeEñ€iøŸfYQ`¼0`þ§YVô­`vˬ÷ëïÄ+;«²Éî«ÐÊ ˜0À´¼€YüÚ@jál_ý¶gÑÿó`‚Ù·=¦*LP û¶g¦cº3^‰ãk”¼H÷àë*æÝÆÙ¡Œ-Läë*æÝùQ˜]£h/Òxpñv€QK#0ë"0Àè΢Âj€Wª }j,|˜¨(0‹˜Õ#* 0ßšË`ª…5(Òyç•çÎþ“¶ 0Úþ“¶ 0Úþ“¶üV0çòZ\9OeT}ø˜ž˜r]=0êùn¹®õ|·\Wÿ·`BÁ†¹½·¿ÑYä[æTB`‚{`:9•˜à˜NN%|;˜î’2*àÄ/ê L7|rŸéÙ`D=0;ó20WÌñ5QLg§ò¸ß+¢ÉsæÛKM˜0ß^Šh2¿c®ë•Ë`Õ3`:L²ŸÓ`’ýìì³`&…¢ûèaÔ3u'ÌÉ »ÁÀ42™ÓÈfür0V´d÷UÉ«€R}eŒX ˜L_#&ÓWo £–Ú «ö£“ý*ãN™v80‰_eÜ)Ó&ñ«Œ;eÚáÀ$~•q§L;üj˜uqjVíe¥ìËT=€ñ‚&îŒ Ì•0Y©ì×ûŸT…½»ì¼3`€`^¦ºSØ>§­`×ÿî‹N íìã죆©»À8{À¨aêîÀd! §@§Dä£ä­Lfžé)ò€QÍ3=0EÞgÃØß®atï=H§¼·ù 0Àóº0Y1Ï(û^KTe+ÿ,Ë»&ûF( L' ˜†–åÝLd¬…Õ2e¡lé“f0Àxš¬0ƒÆÓd…ÞF)ÆJ©ÌSÍñ4‡ÌÀ`„`’]`”ðN±H³Nµg5¶t˜1ð‚+ 0Àl 0Å0£Y]wwçáTp`ºI²½;`&I²½»Ï‚©„;eÖ«Jyçv¯êŒ:ÀgÀdÅ€qJeÚè ˜‘I¡©v£;eºz†ÀL¸ŒgLq§ÌŒ*VKœwž&‚ÎTͦ s–-d¦ÀÜ€‘{ëXQ ”Šîª²“&+ÌELV˜‹æ³`FK~ýŽt‘Ï$?ô-ãûLòC¿Ñ0¾Ï$?ô-ãûLòC¿Ñһ¨e:ÅìžÝ¼ª `¢R•W´Œwß ®JU^Ñ0Þ}'¸*UyE{Àx÷juª"Ó¢V»úÝÿ÷ëÖAÙ90Ž˜î“œGZ`ºó«0«Éz‘ÙµX§°W4ó 0 ==> transparent */ pixSetRGBComponent(pix1, pix3, L_ALPHA_CHANNEL); pixaAddPix(pixas, pix1, L_INSERT); n = pixaGetCount(pixas); pixDestroy(&pix2); pixDestroy(&pix3); #if DO_ALL /* Display with and without removing alpha with white bg */ pix1 = pixaDisplayTiledInRows(pixas, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 0 */ pixDisplayWithTitle(pix1, 0, 0, NULL, rp->display); pixDestroy(&pix1); pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRemoveAlpha(pix1); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 1 */ pixDisplayWithTitle(pix1, 200, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Setting to gray */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pixSetAllGray(pix1, 170); pix2 = pixRemoveAlpha(pix1); pixaAddPix(pixa, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 2 */ pixDisplayWithTitle(pix1, 400, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* General scaling */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixScaleToSize(pix1, 350, 650); pix3 = pixScaleToSize(pix2, 200, 200); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix1, 600, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Scaling by sampling */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixScaleBySamplingToSize(pix1, 350, 650); pix3 = pixScaleBySamplingToSize(pix2, 200, 200); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix1, 800, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by area mapping; no embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); pix3 = pixRotate(pix2, -0.35, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 5 */ pixDisplayWithTitle(pix1, 1000, 0, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by area mapping; with embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 250, 150); pix3 = pixRotate(pix2, -0.35, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 250, 150); pix4 = pixRemoveBorderToSize(pix3, 250, 150); pix5 = pixRemoveAlpha(pix4); pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 6 */ pixDisplayWithTitle(pix1, 0, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by 3-shear; no embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 0, 0); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 7 */ pixDisplayWithTitle(pix1, 200, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by 3-shear; with embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 250, 150); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SHEAR, L_BRING_IN_WHITE, 250, 150); pix4 = pixRemoveBorderToSize(pix3, 250, 150); pix5 = pixRemoveAlpha(pix4); pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 8 */ pixDisplayWithTitle(pix1, 400, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by 2-shear about the center */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pixGetDimensions(pix1, &w, &h, NULL); pix2 = pixRotate2Shear(pix1, w / 2, h / 2, 0.25, L_BRING_IN_WHITE); pix3 = pixRotate2Shear(pix2, w / 2, h / 2, -0.35, L_BRING_IN_WHITE); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 9 */ pixDisplayWithTitle(pix1, 600, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by sampling; no embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 0, 0); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 10 */ pixDisplayWithTitle(pix1, 800, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by sampling; with embedding */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotate(pix1, 0.25, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 250, 150); pix3 = pixRotate(pix2, -0.35, L_ROTATE_SAMPLING, L_BRING_IN_WHITE, 250, 150); pix4 = pixRemoveBorderToSize(pix3, 250, 150); pix5 = pixRemoveAlpha(pix4); pixaAddPix(pixa, pix5, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 11 */ pixDisplayWithTitle(pix1, 1000, 400, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Rotation by area mapping at corner */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixRotateAMCorner(pix1, 0.25, L_BRING_IN_WHITE); pix3 = pixRotateAMCorner(pix2, -0.35, L_BRING_IN_WHITE); pix4 = pixRemoveAlpha(pix3); pixaAddPix(pixa, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 12 */ pixDisplayWithTitle(pix1, 0, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); #endif #if DO_ALL /* Affine transform by interpolation */ pixa = pixaCreate(n); vc = Generate3PtTransformVector(); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixAffine(pix1, vc, L_BRING_IN_WHITE); /* pix2 = pixAffineSampled(pix1, vc, L_BRING_IN_WHITE); */ pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 13 */ pixDisplayWithTitle(pix1, 200, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif #if DO_ALL /* Projective transform by sampling */ pixa = pixaCreate(n); vc = Generate4PtTransformVector(PROJECTIVE); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixProjectiveSampled(pix1, vc, L_BRING_IN_WHITE); pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 14 */ pixDisplayWithTitle(pix1, 400, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif #if DO_ALL /* Projective transform by interpolation */ pixa = pixaCreate(n); vc = Generate4PtTransformVector(PROJECTIVE); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixProjective(pix1, vc, L_BRING_IN_WHITE); pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 15 */ pixDisplayWithTitle(pix1, 600, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif #if DO_ALL /* Bilinear transform by interpolation */ pixa = pixaCreate(n); vc = Generate4PtTransformVector(BILINEAR); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_COPY); pix2 = pixBilinear(pix1, vc, L_BRING_IN_WHITE); pix3 = pixRemoveAlpha(pix2); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pix1 = pixaDisplayTiledInRows(pixa, 32, 1200, 1.0, 0, 25, 2); regTestWritePixAndCheck(rp, pix1, IFF_PNG); /* 16 */ pixDisplayWithTitle(pix1, 800, 800, NULL, rp->display); pixDestroy(&pix1); pixaDestroy(&pixa); lept_free(vc); #endif pixaDestroy(&pixas); return regTestCleanup(rp); } static l_float32 * Generate3PtTransformVector() { l_int32 i; l_float32 *vc; PTA *ptas, *ptad; ptas = ptaCreate(3); ptad = ptaCreate(3); for (i = 0; i < 3; i++) { ptaAddPt(ptas, xs[i], ys[i]); ptaAddPt(ptad, xd[i], yd[i]); } getAffineXformCoeffs(ptad, ptas, &vc); ptaDestroy(&ptas); ptaDestroy(&ptad); return vc; } static l_float32 * Generate4PtTransformVector(l_int32 type) { l_int32 i; l_float32 *vc; PTA *ptas, *ptad; ptas = ptaCreate(4); ptad = ptaCreate(4); for (i = 0; i < 4; i++) { ptaAddPt(ptas, xs[i], ys[i]); ptaAddPt(ptad, xd[i], yd[i]); } if (type == PROJECTIVE) getProjectiveXformCoeffs(ptad, ptas, &vc); else /* BILINEAR */ getBilinearXformCoeffs(ptad, ptas, &vc); ptaDestroy(&ptas); ptaDestroy(&ptad); return vc; } leptonica-1.70/prog/cat-35.jpg0000444000175000017500000042205611767470550014175 0ustar dandanÿØÿàJFIFÿþZ CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 20, Smoothing = 0 ÿÛC(#(#!#-+(0Ô„ûR˜›Ò“ÉoJ7³AaÝhòÍ!Fî‚§øh%{ fS†{Š/¡¥=1I“éFi¥PÒlJ RgÚ†ÅìhòòzÐhSyCÔQäûŠSŒSK@ÅØÃ¡¤ÚÞ´{ÒóëH+Š_œRsýê9þõ)vî ¤ßꆗæõ 3´oÜ4RîoJ(j’”ÒVe5ýªsPÏÚ€#^•*Ôj*AL¢Š)”RÒPQJi)€QE(¢Š(¢Š(¢Š(¢Š(¥Å%QEQE0 (¥Å%.(¢))h ¥ÅPQKF((Å-”RÑ@ E)¤À(¥¢€ (¢P(qEPIKE£Q@(ÅPEPEPEPEPâŒQE¢Š(¢Š( ÑE%´J–€ )H¤ Š)q@ E.(Å%¸¤ ”´PQKŠ1@ E.( Š)q@)h¢€ JZ((¥Å†ŠZ( ÑE £´PP­-&))Ô˜ Å¥£µ ¸Q@ IŠZZ0j1O4‚‰¶“m>Ð6ÑŠ}&(Ý´…iô 3hô F¾•&(\ÌKéMò”õ=QvJvƒ ã¥OŠ(»·§µBúUœQNàV6뎔ϳ Õ¼QŠ.o²®)¦ÐU¼RÑp)ý—Þ“ì¾õwQp)}—ÞÚµ]#4b‹…ŠÕ©>ÌÕ¡Š1EÅc?È’Š¿Š(¸X°i)qIRPÚ†n¢¦5 ½E4SÅ0SÅ0Š;QH’”ÒPIKE0Š( AKŠAK@(ÅPŠ1E” Z(¢Š(Å¢Š1F(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ´QEQEQE.((¥Å ¢—PQKF()qEbŒQEQEQEP)M%Q@Q@RÐi)h Š( Š( Š( bŠ(ÅQ@¢Š(¢Š(¢–€ŠZ1@ E.)(¢Š¸¢Š1IKE%¸¤ ƒE”´E¢Š(Å%-”RâŒPQEPh¤4P \QE¥-‹Ò–€ JZ((¸¢€ (¢€ RRÑ@ E-€ƒE€Š( Å™¢€,SM:’Ɔ_¼*cPË÷… áM§ `/j(íE IKI@Q@¤¥4‚˜…¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š Z(¢Š)€QE€(¢ŽôQJi(´Q@&ihÅQEQEQEQEQEQE´‡¥ ÓšZ(¢€ŠZ(¢Š(¢ŠQ@ Š\QE£Q@) -€–Š(4”´b€ŠZ((¢Š-PEPIKEQEQEQEQE%´PEPŠ1Eb’–ŠJ(¢€ LS© ”Q@(ŠZ(¢—”RâŒPQKE%¸£”Ph Š)q@ E.)((¥¢€Š)Æ’€Š\Q@ÒRÓi F¨$û¦5 ýá@(¤Å( ¢Š( ÑA ¢Š)€JZJ-‚–€ (¢€Š( ¢–ŒPQKŠ((¥4”QKŠ1@ E.( ”´PQE SE€Š)q@ E.)(¦RÐRÑEQEQE0 (¢¸¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ .( Š( Š( Š( ŠZ %ŠZ(¢Š(¢Š(¢–€ J( Š( Š( Š( Š( Š Š( Š(¸¤¥¢€Š\QŠJ)qF((¢Š(¢Š(¢Š(¢Š ¢ŠZB)h4Ú)h  ){Ph- ¥ Š( Š( Š( Š( Š( ƒE€Š( ÒRÒPEPôÚu%!5 ýú”Ô,~zZ¤ P¨¤´Ph¢€Š(¦EP ¢Š(¥ÅPEPEPf–ŒQ@¤´PEPEPEPEPEPEPEPEPEPEPKEJSI@ EPEPEPEPEPEPE¸ ¢—PŠ(¢€ (¢€ (¥Å%Q@Š-Q@´JPš(¥ ’”ÒPE´b’–ŠJ)qF((¥ ÐQE SH)h(¥¤ KŠ(¢Š(¢Š(¢Š(4”´PIKF((¥ ÐQEQŠ( ƒE”¸¢Š(¢Š(¢Š(¢—”QEQEQEQEQE¢ŠC@ (ÅQ@CJE4ÒÓP1ùêsP7ß  QJ(´Q@Q@¤¥4”À(¢Š (´QEQEQEQEQEQEQEQEQEQEQEQEQE0 (¢-%-0 (¢¤´PEPEPEP@¢ŠSIEQE ZAK@Q@Q@Q@¥¤´˜¥¢Š1EPE¸ ÍQ@ S@ KIK@%-‚–Š(¢Š(¢Š(¢Š((¥¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ QEJZ1@ EPKŠAK@ EŠ(¢Š-”QERâ’ŒÐEPEPEPEPIKE%´PƘiôÓHc Wo¾jÁªçïšZp¦Ó…-Q@Q@¤¥4”À(¢Š (´QEQEQEQEQEQEQEQEQEQEQEQEQE0 (¢€  Z(¢Q@Q@Q@Q@Q@R‗Q@Q@Q@Q@P(h¢Š(¢Š(¢Š(ÍPE-%ƒÖ”qAæ€RÑERf–€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¦€Š( Š( Š( Š( Š( ÒRÑ@Q@%-%´‚–€ (¢€ JZ((¥Å†KE£Q@(ÅPQKI@Ph3EPôÓN¦šCj±û欚¬~ñ S…4S…0Š(¤EPi)M%0 (¢€ ´(¢Š(¢Š(¢Š(¢Š)qH)h(¢ƒ@Q@Q@Q@Q@Q@QLŠ( Š( –Š)QEQEQEQEQ@¥4”Q@ ¢ŠN´´Rt¥Èìs@RšZ(Ï4PKŠ(  RšA@ EPEPKH)h4”´b€Œâ—b€ ÑEPh¢€–Š(¢Š1@Q@Q@Q@Q@Q@Q@´”QEQE SIE”ÒQ@Q@Q@Q@Q@Q@ A¤ÍQEQEQEQEQEQEQE.((¢Š(¢ŠJ)M%¢Š)1¦šq¦1Wþ#V«ÿ  p¦Šp¦)i- (¢€IJi)€QE€Š( AEPEPEPEPEPFh¢€ (¢€ (¢€ (¥Å%QLŠ(¤ES¢Š( Q@ ¢Š)QEQEQEQEt ‘P\r<º}ÐþiØ tU_:àuŽ–;‰ …d Q`¹f–’ŽÔ€­!2LTôQMÊ\„…#¥I#¨|Œf£h;þñéT„>fi$!X€½j8¤+p¶A§ºŒðy=i"‹‚XüÝ¡r”QŒ *F-QŒÐRÑEQEQE´” Z(¢€ (¢€ (¢€ (¢€ (¥ ’Š(¢ƒ@é@RÐQJi(¢—PQKF((¢Š)i-%.(¢€Š(QKF()h ÐQEQEQE(”Ph Š( Š\RPEPEPEPEPEPE Z(¢€ŠZJ(¢Š %)¤ Š(¤Ƙiæ˜hÆéUûš°Ý*¿s@áMáLRÒ Z@QI@QL–RÐEP ¢«]ÌcTàÔ¡öÂj,$¢ [‚Xn\)èiò̱œIôì”S#H2¿ˆ¨žè+´œRÅØä(aN Š(÷(¦RÐQKŠOÆ€ (¥ Š(4”QE0 (¢RÓÅ%-€E-QE (¢€ )qI@Q@Q@ŒQE¸Rf‹M4´†€)ÈŸ1 Hç­Ép¬ áxÉ«G~h gb¨EIAi0ܧ½'/v ôêÛ"ž£4äTp)óIKIHd;dHE3É—´µkŠ8¦"°I—¤€Ð¢ãpÉ«˜¦Ç6æ(ˆ†Kš*´¦Xá§yñáI=EÉ(¦¤ŠùÚzR“Í!‹GÖŠ¯#™fòÕˆÂå€isUBjà9ªÊ7·Ð“ £2Þ˜eÜÌ›sZ‰NûÍÊ>Zth Ä¿ b$Y‡’]GÝãÑpFÖ+Áâ™(D·`„òi%âÚ<vjIUß ¦¤áÁãuàù± ö©&gfö¤Òâ6'¥8K©äméU0±K"ÔqS4j¶¤cµ $òch¶¨= +¢ícœtÅ@²ì×¹4à]$M€àõ  T½ªœ ‹•Ë­R@¸gmÄ@Ë9éKTŒ®æGWÚ «ò" hQE’€!'ÎòÊ÷ëDÓ´r¢€j®ŸñûN¿Ò>´ì"æM0Ì¢QM*ʤã84›ãy8ÁqJÃÎ Õs¤¬@íR3"ðHúUHH7Ré@®]¥Å ¢Å¤Í!cœRÐE!;A'¥E¦V~8( “QQË0Œ…Á-è)pÍ´‚§Þ‚äÔR…'ÐTÓ4ÎÙ ,Š\T/.ÉU1÷©åR_/Òz)¢€Š;f˜ò¢3@ R++Œ©S¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢–’€ (¢€ (¢€ ( ÐEPEP(£µQEQEbŠ( Š( Š( Š( Š( E€ŒQE¤¥ ÐQEQEQKŠ1@ KŠ)3HŠ(¦E”¸¤¢Š@&h¥Å)¦y¦E'Ý5éSJp¦¡)€¢ž)‚ž( QKHŠ( Š(¦EP Å'JZ4JE?j@Ç>•%Ùá?xóL~oÚ‹Œ›ˆÁè*„9Ï—p˜àQïýá »³ßÒ¤¸æê :÷§Hˆ¤°_˜ôÛgm’Û¥BV`Cn<š±l›#9ûǨô¦ÈÛ®R1Ðu  ƒw&—ŠCÅ)Ç—clsHåß&Æ\‚Ü–¹vÍYØ<Íýè°¥Å%.8¤2&ž5;I9§yˆ1ó ¯wƒ2 /ìM¾½j¬"ÐçéKML*ÐN=i†€)OœP7 Œâ‘#  p­Fžq'îv  ;ñHÀ0ädÒžzu¦K!”ÎhÊ )¯¹ÉÎ}©ô¸ dF( Cl¤cœz|Ž#]Ç¥*6õ :P!’CæAÁ^†’8Ød»nj˜°“Š( a-:°ZYÕš"dÔÔ«@lmUpC)©VbØH#®ELi‹^õKF¥G Ô±® Çr)ûr¸4 b‹Jă:±æ,pïUã)Æ$c’ šRŠT©Qp¾rîÆ*QL (À§Š¥7¦¤››¸†)VßoÍÒnßÓ¥1ü\ÄGõ ÇóANXXɽÛ8éMHÜ\—$`Ð1°üòHÍÏ=é-¸šCÚåÈ’6ÌÞ´Ûu’)rðÇ­.vQžzUWi~Òª3²–ægˆ®ÑŸZVa¾õ;5¾åSëN=i eÊå g€*+õl}MIpq’{Tv\Gz¡1³–ŽäHFWÖ››‘"t¤ù×&6û‚˜SȹPjZ”•Ž{TvŸ'ÉÜòh¸góÛòjw-rÇiç¥Oq‚é“‚;Ó"XÌÙf%½ :Y€P®O­Erqp…z÷¢ÚÒ”ÐHšRx©àp¤çµP.†õ Iç5x*)!ŒfCÔU!á}—[ {Uú£ ~øË'è*æïjLþÙ¢ª^ŒnG8ô¦™%)WêiXw.M-Všf@¨¿}»Ó<ׂP’ƒÞ…q.Ýã‘v±ÁíW•J§{ƒ"b¬£cŠrJBqA`(àõéH‘ö!|d{T {ê5,î© 5nÊ ¹êzS°Öê'mªN}*cÅUX7J²ãÓÍÜAˆ$æ€'¢²„ ž)7®Üî€uU'­^9ëÚ€¸QG´b’–š( sUå¸ÚÛPe¨Ç4U3q*:«¨æ¬‚zãŠ~(¦äÓ‡J(¢£y‘!ÎMIE 9¥ ŠLÒÐEP@£"ŠSIEQE-%´b€Š\QŠJZ( Š( ÍQ@¸¤ –RÐER4”¦’€ (¦€ÒRÑ@ E)¤ Š(  M0ÓÍ0Ð2~íD¤—¥EL x¦ u(¥ QHŠ( Š(¦EP ¤'´h³æA&2àê§57µ ;ˆ¬ŠÒL$uÆ*9cœÈXgñÍ\8¥cEÀ¯h \r}i°+–b>†¬ý1@àÑpõÅgZC×4½è¥²í™×¿½N%Ý)AŒô’@®ÙÉSíB[¬dNO­0eVb ò*Z¯9 ÎjqH S¨{•SKu¦À3ÖœÑHnñ€inc’G\LH.›„Aœž´BLNÒªG4éÐŽ£,¼šUi_y+Ž!Bî’9r~aÞ£@VÝÕ”äšwK,r 1\!y˜£g Ô°ÊÎ\7Mä, OaPÀr³ã¯jC$7 Á>^™©e*×šŽŸdýy¦>íôí@ñÍ-4°Š\Òßü{µq Ž”—‡÷Þ£|¤1‘ÔœP„M* ~RqƒRtZäâX°zžhˆ”+1 G;:¢åºS”‚ ƒÁéU.òž½*mæ PIçP¸¨åÞvŒŽôÃ+ÆÊ\‚­éÚ–YH‘S7"‹8 Ô/8Š@…M9'F O}h°QQ „$ÏCëSq@Ä— µúÔ­…'ª]²2ŒNhÐ9½)})r(v¤€IíU®eteØqš³ô¥ÇªþsÆê²`ƒÜU€r2:PGS3"â¤=88¨-æiƒv8  U6¨”cœÒæœh²Æ%\7JlPòš|RyŠN1õ§@´9“ÌSƒHûÝ·V <Ò¸2E2(nXæ¥Q@¼@ÌpEF°fbìÙô«4~ÓµÛ8L&zö©-÷y#wZ~3ÔS°1@ œ*ŒÍp_Å]#"”v¢àPC4’¨` ¾F8 ã4ÆÌâ+Ž¢ªY),sü=*÷¦¢„< *\‚.#nÝé·I2ù¾•q£Wašj@ˆÙU拈­túU¢êŸ3tÅ1í‘Ûsg4IxÂçô\ «ÉȧF*8c.ÑÍHFE)ßÉò¬]ûÐ`ýÜx:Ó®-^Y7‚8©ÔŒÖÀK—òí¸ôÅBˆȳu#9©§ŒË ¨éUØÈñ,AÇ\Ò$µˆ$þ4Èay 'ƒÅ>áZ;u‰EYˆm…WÚ¨ W{Ôª“Ó¥,„Çå¾NãO˜4·Šâ‰™vªGÊ´l²?š‡qö«áŽzâ³ßkç éVî&F½*Z “@5‰“v1Rt2>ÔÁ: ,2è¥í@?.i:Š:fR»H(ZxéM#špé@Š)h¢Š(¢Š(¢Š(¢Š R S@ KH)h¢Š(¢ŠLÒh¢Š)(ÍQEQEJSI@Q@L4óL4 ‚cÒ£§ÍÔS0)âš8PÑE€(¢Š`QEQE CÀÍ-dPU—Í»p1O™È•#OZŽ >ØØÀ¥ë~ ª"9 èNJŒÔM3HpqÚ…®ÜzŠd±˜‘‰ÆO‹aåÛqÔô¤ºÈ@9éQÈ‡ì‹ØŽ”ØÛÏ•ðW¨¢À]¤êhÒÔŒie©¥=j¥Óþý=[4Ä&)@¥£P1§§BáÞ9øcŠšâr‘)CÉëNÂ'óJ2 Cv‡9ùˆâ¤Œ>Ü?-HÔÓq‘ÏJ“¶ªñÊÏ+#1é@É †#ŠE‰#'­9ŽÕÏ¥69£ ~tìËž§”q懑ڧý)¢E$¨ ‘L ÷‘*°=OJ³Ûš ‚À‘È¥<Š@Ct$`/­FñÈÂ5+Ðծ╽¨@Sœ“2|§ N•Õ‹,‹þéÅYàŠ0aÅ1äìÑçœ|Ì%¶R½ZÚr(¡v€¥qا9 "U䞸¥“þ>cÏaS,´<(Ï’9¢áb‚ ÚfŸt¡ $ dóJöÊònÜsS4{І=iÜ,V0³ÇX`r*ÒðªâÈL¨´X [Ђw MÉ×p¨v…±8â™´}‡=ÅàäpsIœUc)ŽÐc­FÌË·‰=iX  æ‘Ã;zÒÆr¢™q•Œ²’æÄd ûÃÍIœv¨VVû)r~lR[Èb˜‹ TboÜ"–7bø#‚8"‹䔆˜Óû@,G\RGp²I´ÅNisŠ‹í æ˜È9¥Y•œ¦0}(°Î&Îõ)=VH1p_°©^hѶ“ɤ"CùÒ”›—fìŒzÒ‚0F>´ \Ò =¨sžÔ˜¦K"Ĥ“ƒŽ•¬†E$ô&€-)* f"AýãÖJñÊ#“úS°\±Œþ4LÑßR)$’å?(  #ôæ”»pÔSËå&ìg5]o›º ¶Ð£¾â9KÊ›[¥¹d F3OÎi\cc‰bMª8§Ž)):#aŽ(ͺíaÅAö08BúT­2ªoÉǵJ“ ©Í1 JªU{Õo²¾æPØCWsIÆi\eK{gpßÇjcZ>K+óW¨î+c¶d‰òFâ*;u/Lýjõè¸X¥mýã°9íQÛãiç5£Þ\,U¹–HÝBô«1’Ñ‚zÒ• Ôf—¥+€(ZZ(‡9§”P(qE¨ Š( Š( “4´b€ P SE‚–Š(¢Š(£Rf EPQKF((¢Š(£½JSI@Q@a§ž”Ã@ÊÓ}áMieûôƒ­0$ZQH:RŠ@-Q@—S4”Q@Q@‚œ})h  v䛇b¤fžÃ˺óLUžù¤*Á§qX­$Ç¥Fn•œ–\Ò®àÀdž2>à§p±ÞK7Ý?¥#¨ûZìüqVJ+G´Ž)«GÊŽh¸åHÄÏJ95ª] ©Á4†S—y@ÅxÏZ½E>ÕÄæ,`žô°†Ž SbDôT6ò;¡/ØÔÀ޵6Jègyô¨ÜæÜô);üáƒQLÅg§&¬’Ë1ŽÜì)Æm°+Ÿ¼GÃl¨¦Kþ®AHd±ÎþfÇ$db£ŠLM) “‘Vp»‡Lâ«ÁÖfü(ǘ¥7 *²2eÅTñâHüh,RÖ0¿Äh°ÃáX®ƒ7Kn&Rjãš æêZ,“ë‘F*–íóX©WsÐ@­AtìqÆMXZ÷þYzN9QKP¼¥ªŒ±íJ²“¸0ÁZMIš†;€ÍŒzŸ¤1(¤y#C†l@unŒã@Rž”„…1Å 8 Šh*Ý8§cPˆ‹sšqLAŠZËÉéMWV€€1Å:ÒÐcÒ‘†Ó¨4Í‹Ç)$]pÃ8§ÔSÍåq‘Hb¤J¨@i«‰ŒûÔ±¸t ZqŒb(Æ ·gVÆ9ÅKk‹l3`ÐÖä)U”ö©£QÄD ÄQlûÔsKr¤p;ÕÁÒ«Þ°òöŒ“H*ù–»G G0·òöÔöä4CµJ:Ó¡žÜ `ŠU˜*äpx« š Œp1Jà*ôµáÿGj”TçœI¨ †,Å$¬¦ÍTŸJ± ç¦) º1Å1á~Ίˆb‹}ÑK°ÃTí ŽJXâHÛ#¯½ µ9ó|ÓlÎ%sïS<;Id8õ¨,%Ͻ(æüñÎ)#ù¯˜ú šKrÏæ+`Ó"¶d”É»4®ä•BG¥RZ@ï´œUðRJ¨ ’';ÚÞ´¥ XÝ}j0˜´ßÎqSI ›mƒ“õ¦2È-|½™4ÀšÙ‹B¥ŽMM’* PÂ!¸`ŠœœÒ ÅV…˜ŽqQØÿ©æŸzØ€¯zm– #šbx¥&)ô¦Æÿi¸ŽÜtèÿãøù‡ŽÙ¢á\ÆPŒ“Ú€.¹Ø„žÕJ7Ù ù˜äÔ³$²>ü£¨ªß;]cø…$†]’1(_nj¼¥LéïVY„qzÍQµËÜ3öÄh€6Š&@RIàSVEeMHÐú§~Ô=óW@ª:û”ÐÉ€ÿDÿ€Ôv ¡H#qhGû5 ¬a­ÉïM¡GZæ«YH\ÝZ5#NZ–š£-Rb M•Â)b{Sê¥ülP¶î¨C$†_57™¤yÂ0P2Æ™d?p E1h.·‘Áª±%¤œ3m<J‘ˆPO`*šbkŸ18QVe%acê)XÃqæ“Ò–[„‹†Îj < ÛüG“R=¸–_˜dS[Äbš²J8Oò»W@ãš–1EQ@Š( Š( Š( Š( Š( Š( Š( ¥ÅR¢Š(¢Š(¢Š %Q@h¥4”QIš(SLj}1*I÷ÍòÆœ¢˜ ZAKHŠ( ¢RÐQJi)€QE)‚‚OAKL™CFÁºb€ Þk>Ê´²M±¶ª–oj†Äa\ûÒÛ·™q+UX›“‰£Þ:SDãp ¤g¡5^.buTm¸F›³Üf‹zI?¼zô„‘|¦ ošò0})AÅë(àwXeKš2~!b8©ãÏ?Ê“‚Ì1q$вG4Ä'°€¥ïE!$€i™A§•À‰£Wá†E)‰6m¤ Qp!HryÉîi>Î6†jz(¸¼ƒä˜Ãš<†û8N7/"¬qÒ—À†6›‚ã Šë$„©ùºU³È t  LÂáOš5,Ó˜Š®Üç½XíÅE2UQLDŠzUkÏõ‘û´¹ÕÄŽÅ™y¥qL¹¹$€{ÓÊFŽìX–#œÔ­È›[ éL B¼ŒÓ¸X¯è¥E<©éW²H¨R Å·c ©z-&kîvzšIÐEnƒ ÇãKxÕŽù§K’M2,‘³nÅlQ ÛË)"QHN)‚xÉÁn”†Héžj`|ÚqùÐJƒ‚@&‚*=Éc÷W§=jÆ)ˆ¥x¤L/®0>”’&ô {ÒecU Üô¡°J1ëKÛ>´wÅ µ!QÎFií¥1ŒÛ×€¦ù)ŽƒQ™¤IÂ05gð DB$NU@4’B$ äw©®"Ù<¢§<÷4Õ·ØAf-Ž™«ëÒ'åÌM*SÇz˜`ô âŽØ¦"¡†FQÆÑÔÒ\£–@ªv­\Q“ëEÂÄl3NqTÃm…“iÏjФ*aEÂÅHÆ,Ϥ¢$?qSÜ#Ž;vêÙT ¿§¥1 v¹Y9ž¾IuÆ #µK âV¨X‘Upi\v ³ùei-ÿÖJsÀ©ÞØHwdƒBDª…GÑp±ZÛ•“4ŠU\nRx5:[ª£&ãóP°Ê‰QÒ‹ˆ²1Æx¡ˆÌNän•!Œg­›ä'Ú¨Z ÒIÎ*ô‡÷X’*œ $LI9¦„Ç[ÊfB9ÏZBÌo «RÅy# {S#Ü.K2‘“@±’+FËsž) ·Ù–9Æj[Å-n@ÕWUAœ÷â‹hNRÐ9䚆I&HÖBù¶)dÿãø© â“(QM›~ÏÝõ¥ óQÝLaPGz@>"ûáÍ;<Ô/pRøÎi>Ô†ØqëNÀN[ißJX8 9Í=÷l!HÝHdo2¬¢>æžÎrdzã öߘäƒVo3±qÐb\¦pAÁïS+81òÜ6*Å›ƒ“Èé@Iô¥˜&€~ZviGJ@23@ )zŒSZpéHÆ(¢ŠQEQEQEQEQEQEQEQE (¢€ (¢€ (¢€IJi((¥4”QE!¨¥û¦¥¨eû†•EJ£ŠˆT«Ò˜P(¤EP)i-QE0IKI@‚šÄ ɧ¯x¬c$ –9ªXt º#5±Ùkš…@kgòÙëLEÖ ’¤VVû­š®ß:Ç»¦)± ·!Wî‘@:ö¥íÖ«—ideC€´ø$2G“ÔÐ Ò¢š_%AÆsHd›Aêü)¬þVÕŸ¦õÛ»¥KOQîT$;TaIÅG2„’0‡·cVÝC®ÖÄU²2O½6H÷AÚø¢8‚:“ÔÔ›‡9#4£§Z`V6ìT n M Ð+v§€3IÞÇÛ·nÝEJw$˜È>(<Š.1ÌLªa@ô¢Ì’#©@ã¥E mç3•À  ê¥×ü|D=*ӎ£xÛqÎhL%\Þq‘Ö¥Ž5YîÜÇ­>HV@È#¸¤Ž8äŸZħ¥S¶Eó¥ÈÎ*Ûò„‚j¼PHŽFZ„q"˜%$zâœ]–Å''Ò”C*[² Ñä»Úª‚´ô7’=›®i$gk§Ub*A$ŒUB޹¨‘xY玔|¦HíÁ.wf‹Ì²GÏ'^B/9Îi.å‘=8ÍLÒ40.ycÀ¤:J©&ïJŠäïHÜr óR'Í\rhf£–`Œ ±è>ªý»ùR,^ñ7.0*ËȨFãùT Íú÷8¦®÷¼8ì:S°®Z® SÅ5XðsQ]VS‘“QÛ2ù›YJ¸¤2èª÷÷Pn5>zUKÁ™ã÷ d°Àc‘›?)©¿W¸}ˆˆ É=i#b. «¸êhfƒTâ’Gyã€hK‰LeŽ‹Ë” „Íû1GÖ›ö¢#P…éš,,ŠM«œí¨EÒd z‘åTMÄÒ³Ù¥¨RQ#c¥Ä£¹5`À…6cŠkZ«(#Æ"Ú‰òg‰IÀ4ù-wl$°o Î ô4\v!+6÷aŒt¨”´NEÊÕ(‰Îàϸ‘H`”¢£0 X-€08¥ P\‰6}êHs°nëHcúÕÿî9«Ìp9ªau¿i#4Ö€ÉÌfY•˜` {‰7ü§ J¹#Ö©ýäÉö³o+I$ò*µ¾æ3¶‹2<¦ã”Û<“=I¢Ári. DޝZ’Iö*ñËtª×l6¢÷Í>eW ™Ãc"‹ š9|¤NuΨ-Ë21ÎÞõ>õ-€Ã"›)Ú3éRvœ£})  ‘¾Jc=éâXØ0âªØ–CÛ4ËdVy éš« åðêFTäRƒéTm>ü˜è*U»‰W“ÍM‡r˓ڳÚc5Ò«¨âA‘Ȫ|}¿€)¡—$}‘³wª°¨š&±ÝÛš±3(ŒîéTȪY3°ÓnÒF‘HnpjÍW´e0ü£žõ89¤ÀZ ŠLö¤0´EéiZ^”QEfHý)Å/j³¸’€ (¤#"€ñ¤ïMÁ§r(´RfŽÔ ¥íMëJ¼ÐâŠCÅ(怊( Š( Š( Š( Š(´™¥¤ Š( Š\RPER¢Š(¢Š(¢Š( ÑA 4”¦’€ )(  C7Ü51¨fû†Št¨ÅH:SŠJZ@QEQE0 (¢%-%© Ø2Ý(=*¥ã¹ùq…Ïš@[àôïF8¨Ýü¨7wÅD”FÄýþ¢~”{ÕyY‹ uÅ:ÞBÁÕº­HcG9eÓðÇLT/0GT“S´ƒƒQÉ Ë÷³ÅHi¥Ô6  c''ëNš!"Žpá§ävý))8Ï4Ž%pK;dÔ‹Ó¥;¶( @ThäûO™·JˆòÜyŒ6VâªàSVòEe'wJB6Y¶î­Ò®àg8“hn)\,EŸAQZŸšSVYB LHPd‚iÜ,Ee÷ûõ«*êùÚÙ¨Ò Œ€j;Xö;àñÚ“Îx¨ææÏ¥<棸VhÊ ëIX {ñógƒC©E‰Á;‰¥xæò{:{Ñ'˜æ0c#mX‰$:qHP9¢"RVˆ±#Ù•8Œ®9ÅüÒ´¸ãR „RLÌÀ•42—ˆ±ä޵^Ý€’qÍ: VÌîh Ž[‡VS"€SË0L(cÐU9˜³Å–¥—þ?#'¦:Ñ`¹$3ïb¬»Xv¨m¤XÚR}j—Í?ÞÅEjž8<Ñ`¹eY]wÇ­0OlÕUb,[¸§:d¤ ¹¢Ã}þ¨}jÄc÷K銫;·=x§ÎÇ÷QƒŒÐÐTƒÀ ý)j›oµs‡‘®¦ fsÅ 03Èæ£ˆföCMQ›æöÀ¶3@¨üÅÝ´E=XáH>´€~)3Š7 Ȩä™REBZɵ)õ¤”§·¥ h]¿ErYûÌx©# 䎴Àv3A\ŠQA¥p¼cµ!Eô¹£­6Žp:Ó%BpM$“¤DÎM$³ùhE=@W‡"‰`YHÏÖžbÇœÅBîn Ä^Z°N§¹ªÑFVä€IÀæ¯+\©à÷¦;¤Y$P˜8¦8fŒ…êiÈêèèiÔ€«2DŒ ÓbŠXË`»Þ®})4î"­¬O>ð9©Œ”åjldQÚ‹ŽÄh«` ¥&óqS‚kG¤f•À†é À@úÔI*-°C×1Vö‚0i6y˜í#(ŒÇŒóŠ#ºÝ)M½*Ö*1a÷Í<ÒÎiÔ”€^ôÒŒÑ@Äh'šZB2x AÞ—˜¥>”ŠiOLP8ÞwP:ÓÀ¦°Éá@ ŠCKA cE)éH:Ðý8 B”½©îÒÇ4ƒ¥ Ö”t PÍ8S[­¡›îÔÆ¡œü¿!š*%©0K@¢Q@QLŠ( AF(¢€ªÝã|CÞ­“Ч<š°ø¾¢ ‹ÆdÀÀõ©èùHTaš¢€D !ø ò 2dÇ”ØÂÐñÏ ˜FäúU’jºˆw‚œµHÓ"¸LüÔ€{ pàR1AÏjC)_ÿ­5ÐÔû ‚÷›˜ÅMvÑÈ>•BTBª5+‘åþðŒ…ÑE8ä Ó&mÖhÆ‹r0«Û€*+²¾C`‚j)œ¬ 8ÝEÔ(–à†}èkPEºdö©qL¶¸_¥Hx¤Àh<Ò÷¡G&€ÜÒؤàisÞ£•D‰Œâ‘‹×5Á½LÄ"î'³í.˜•f÷?gùsךvár‡×žõ(9éT|Ô{PƒïUË`VóŠ`2k( œÔªAP}GJ©q†ºû©Ö­ÆÁ”Ò“²Ì±&æ¢9ˆ* ì»,xêsSG ÛŠ@?4¢šzR¯LÐ1š̫ÁlSªßÏpˆ:÷§a4dœÒˆ¶ŽÃI%1Äà’Xž(°³“ŠQU¬Ä›7>yõ«œš@8ž)qHZ«yòHXÇ÷V€-fŒÔ6Ò´ŠKEM@ ž);QGj–“mÊF;S®NûˆãÐþjGvA¨Úëj†d!OCL¸ýåÄQÿ ¸-B˜=Ê$JÇ©æç'•æòÕKÄ ª;ž”ÉOú¸Aàu¢Â¹u¥EŒ98<{s¼sÚ¡¸Uû0>‚£‚Û̃s~X.\.ª›‰àÒÆáó¶©dµÀCʯj’p’¸ã=( – ¨[†jQÓ5•޵¦ƒíÖÇQE†QEQE´”¸ Š( Š(¤EPEPEPEPQKŠJ(¢Š(¢ŠJ)i(ÅQ@5ÇAõ©ÍWŸ  dKÖ¥Zˆu©V˜ @¢H Pi-Q@QLAE”QEQGz(£½PE¸ ¢Š2BÁ ^¢«Çs!Vb™­Y¸ÙôªP¾Ûy5HEؤYc )H‚¨­ÀŠØ3:ñNY•œ ž™¤ðÀ ÓdGØÇšzº¾vœÒ¤”f&dâ€êN§ëÖ€!µB‘maŠšE/JN½©iÀN½h*ÁïKÆM)Ъ¿u@ Ž”´¦€#’5r ÎG¥F-ÔK¸d~5=  bå£m¤õ§Ã”¸<“O<ÒæÀ7¡ëU•ZÞF–RxÅZëÚ“ ëNàU $…Ü‚20BèÞXQÈ<šÑâô§pžŒU[u>y^Êjàâ…P `9¥p±ZåÊÊŠ zšŠßþ>ŽI>õt¢·P !GEî*#fõˆíO£Ê1Àt©|„ ¸š‚,»HÀ‘Ž(%¼f(²G'šŠÔÒ» ãÖŸhìèá‰8àK³!l8ù»PmX*HíÂæ£” EòÔõÎMM»,n¬Ýi¯¯©#Ž”h1n˜îŽ0x`3Oòg ŸwÒO ²£ŽY{S•¤yAe* Pø¥÷ª‹3ý«aû§¥Y=*lW‡ý©¶_êÔÑxÑ6ÖTŽÛ prj„O+˜ã%Ww4ļÀ’. æ«ý¡š0A¶(În×-»Š,2g¹+7—³é@ºö²i’àߨô£|IÆb RBáô4†xÕˆ&«[°ûD§ñ¤’E0±U<ž´Xeà@\çŠ@ËýáÍWvňÏ\qL‚ñ£ƒš,Âqö,u§Ë”N1U’0o›¾)nÎ'Œ)Ç<ÒpUK¦xÞ2­ŒšY$’7L¶wv¢Ã,“´â—"«ÜÌUÕW©õ¦¤Ì&±Þ‹å¡E/aKŠ@2™<¦ÜqRâ ¼âÙ¨B'3gåÅMUìî3êjË«’p)°8 ŸJŒO8ç¦iìʃæ"ÈÍÊ«ì`rjlf©LVKÈöô«»”3@„4àx¦’ ê(ÈÅ×4Qz€[á‚梸ÊÄ̧T,§,r¢˜‹„ QHhÁÅH H@î*+‡hãÞ¿­!™…¸“â˜É±M*§¨Ø¥ó!ߊ"“ÌàŠb$ JáI=…(¦È»¯­ )Ù2wÔÏn^}ùã¡¥·‹ÈB§œÔ«úS¸5¸,¥µZ0d¼$óƒRùS¬®ÊF¥I+R ¼Ó.-üݤœb¢k/œÜw«|Rži\ —q;"¢rY‰vÆ‹íN´®2ˆG†áÊ®ìÔ³ò×sÍX4£¦ ŠC̆1Ó­Ks4‘ ÔÕ è!PØÜ3Z./'®)㥠´QE (¢Š-PEPER¢Š(¢Š(¢Š(¢Š(¢Š(Å%-bƒE! ƒE€Š( ¯?j°Õ^sÒ‘µ(¨…J)€´ (€Z(¢€ (¢€ (¢˜‚Š( ïEÖ‘U‚“óÔXQMwTb4¨ÁÆTƒNÀ-&i¾joÛšu ( t¢€EÙ˜Ÿ>•V}‰ÿ­Y’1"ín•ØÓ qéšb ¢ç»5ÖCDç#1…LB>‚šážMØéžÔî"À}@ädKß:bxQOk|Ê]_¦%» -’Ôh"'Ø¢?,ç'­KxOîðÄÅ5¡”„à|¦–ðñ sÏh1Ä´,Ÿ1;¸¥šIUÛhÂMbg™ÒõÍDìzœç@VVko0õÅ2äe\®wSclX6;qSZcÈ\sŽ´XW+ÂÌnœàã85bI‚¶Ü>Õ òäà–¤…å—8æËQºÈ¡–•ˆQ–8¨í£¦7gšŠùŽPæ‹a]MF³˜ÇéÞ›åHÓ)ÀUTPÄêAØvpjµÞä@áˆæ­`ä ­¨ªQïI iycdÝœõ«(w"¶:Ѝû¼˜ÕÇÉV‰ cÀↀ“µªé3«"ºýïJ|’•"Œ·\QaÜ”Ð:TfLC½”ŒuŹB àãÖ•€œRša‘Q7“òÐ’¤„€y*+…'“Ú¢)rö“ÔT¤DÒ ^«?7ÃéLEˆcX×h楤(i\ŠJqɪ÷yX“Š`O×Òšyæ“v'Ó5]^YOÊ(o,yóœT„f¡Ž_2 Àò)‹pDBsÒ€'eÈÁŠ (G()°Êd@Äb“íä€Ôjù)³nÑŠCn TªAœæƒÒ€ 00~ô}”,…·òjp8¡™Teˆ\,VK]ŒÄ7Þ¤û3ùe¾•làô´Þ7Qp±Vð’ñà2éÃMàu«ÄdúÓv‚üEÄV¸_ßÇ#rµ 1yÊß"§e ÁÅ…Wî(\vÒÇ›šxÁ*•ê/uZˆmAô¤‹U¯Ø}ŸóVr=*íÄÝI„1¶gm¸'§SQÜOæCòôÎ)ÿee]«!ǽ m¶<ç4Ý„!Ùcû . ç½*y )ê“d#hô¡ãuŸÍŒž´ªôxâ›ÕêM+$ßiY gÛ°í"áš– vFÜXãÛPY¥ägг/$HÅS…»È¥IÏJ`If;@I õ`Ê™ûªYœ¼² SÚÅK¸æ‹ ä—Dy GqQXÜŸsKsû»b¤óM²uH[Ð2Ô¯åF[®*¸¹(w_”ÔRÈÓDÄgh4ùÈ6@ÔR°^6m÷†šÿ-‡áL”âÉö©.~[ÀSÐ0KEcÚž²£G¼t¨‡Ôl”ñGJBêÒÀ\RhÈÇ4¸¨/÷,ÙÁ1GN*¥Ë´Æ0*ĈW=Å9¢F9eúа;wmõ£ŒTÎbud›bࣕP*íQMyB2‚ -éMIÕ¦òù@O³'™¿½#ÛåË#Ï\TÔ¢€yhÉ÷4ÉáóPcªò*Z(¼K1¨À’+†;rÕÎù£½ÞµRÿ”Q­[h ÈÍNl=šííG˜Ešì<ôÍ[Ú ã”ÑWhÇ¥ ̇í.A´û„¶äl:ûÔ¢(øùG×·FbÜ‚zâ‹…ˆ‹3X¶îH&–< <ôéKt¢;B™ OœàõÀ2 š+gqéL„0»Ua‚5<°oUØpW¥7È—ÏYKqŠ4¤íf”ý¡ýÚr‹¿3nGJf%žfÃŽ”{zÒâªÜÍ*HWƒVAÈõ©h5wÙ“Ÿ¼k@ôª„ˆý© .2ƒãŒVx‘à ƒ•=êõÇ6ïƒÛŠŠ i´ãÎi€è/ õ¨¦ÐÍ`iÖå’ÚB£§J|R;Ú¹“§j:ý‘™:v¡Q~ÂxçªÈ¤Ù93V×aϵÍËAÏj±ÁWNˆç¹«càÒ`qLš5ç?¥T¾#©4†Z …ÇJ;U[¦d•$qI;ÈŒ˜cÍ;¸ ”}â÷§­ÐƒHdSJ±O&”H=UÔ‡=M[”ô§`Ó(b£$Šć*zUh%òdq'R{Ô–‘°wán”1è¥ÀŤ1Œ°HÎ)GzqŸJbIÚ—bÄ<Òž”Þ›“@ Ôu¥ŠAÒÚ (ëÖô¤ wÒ4¤Óhv¨9f–IÍ5ãIdSZÞ,` ©:ÐMƱ•ƒQ EÏÞ$zU€N8¤ÏÍŠE=¸˜Q%»<"=ý*nô ÑqþÎíoå—Å ,2sVzÑš.2šA*@È1ÍIiGÖTôcšU8ºòÛ¡éVê²BæàÈçéVs@Mf e».Tã5¤i;JiL“ª¨;sO¸šHæUQÅZÚ3ÐRíäŒÐA,Å)S¨¤k· §mÛmñO’“ï ÒÆ‹áx¦˜lWlìj¼óÇmcÍ5`Bþ´Ù­„® 8Å E€r3E"ª¥-!‰@¢@Å¢Š(¢Š( šs@‚Š3E!…P(è(ƒ@ Š\Q@(Š( ¦’€ )3Fhh¢Š))M%QE)ëU§ê*ÉëU§ê(©JŒTƒ¥1¢E!€¥¤´QEQEÄQIšÊ3Uá·xå/¸Õi2~”ú •fF2qŠ"€ˆœ0Ã5O×Ú”ô¡1 2P&<š–âG…4¹5f­;B Y¤DÆ0{ Цì\îÀÍ;µK2_õ/“Ž*œ* ›œr9Í]‘ˆTœ ƒì»P¨í4Ð21ÚÑyÏÍS”pÊãéN0'ËZ#ŽLæFà qLDPÇçÂìOÌOÒ­F ƪNHªÁ%Œ2"ä1àÕ”PrGZCs!Ž"AÁmÔX .ýG4¸ªWyDi çø|ÔbÎÙ]¹¤¬zæŽ1TšâCš`•r'ó# ëE†£¤â“p Xô€QIQ%ÐbÒ=iÆtó6sº€¹%¥0L¬åQÚš&BÅKŽ´ìn£y"ÂwëKl®±€ã§":°ùNiÜgþNô¿J1ƒTÆ~Ü@'wéIE.)œp)OJ†å¤H·GÔ~”øŸ|a½E0µ[Äçs/5)éQÌÌ‘8¤ÀÆ8¦#?ÃDæÄ© nßJ…­”ð‚úSÓd‘cåŽ( J#تÆ)„~PÆÌÕµ!Àe96'Š`2$ôu¨íb’7rç ÔÃÛ½´€©vKy_)â›váÞ ð}*ïz)Ü^Ù&!›9Å,V© nRRãŠ^Ô˜uûÈÿZ¶[lE‡aš†[d–BÇ­LªÛÚ˜!‰nU¤sÍ-‘e•ã' t©š&OõD.zÒÁˆ’NYºÓC*+í,3N&ªÉjZq&x«+íÒ¤=(Ô -£ŠB@ Ž)™žyZTw  'š\Ð¥.[4§))Þ†à Z0 ô¡zPKŒŠ1KÒ€x¤Æy¡é‚ÒcæÍ À¥h¾ôÚwjn(ÊsHô%+Д´ª8¥ CqͧQ@ÆRKŠ\P!¤Rö¥£ J)qE%Í-˜ RÒŠ-Q@Q@Š)q@ KŠ(¤EP 4”´b‰KE€–RÐEPE™ Š( bŠ(¢Š(4”´Ó@ E%ãU§û¬Uæå…#jAÒ£jAÒ˜P(¤)i-QEQE1%-Ç}ˆ[¨-¹v>µ<ŸêÛ>•^ÓˆœûÓBb‡iK¶ì*ô§ ·@¥xf8¦ZãÉsÛ&’Ûßæõ$S°…I&U-Çù&mÄ*ô뚉@k[Ž2)÷ T“Î ç ’ ¼À}GZšªY©ùŸ<5[˜é»èAǽC{!HÀSËS ™ Þ€,ä÷¥¦©ùG°§véš挎„â€8ª·@¨F y8  =(*§ªŠE¥8Ð|´+´¨Ç¥*D‰÷T Z)\?5@ >™¸Õ€qɨã•d¯­4À‰aasænf”£Ç+2 î5=/QEÀd@…ÓUaˆ­Ã8*æ0x¥ EÂÅ;Ì€) rjs–·8$TÆ“¥N)"X H£p펵<—)/ËÔ~U'–ŒrTëLž/5p=¨¸Çî‡zG`±’Ý1B!HÕ}(tÞ…Hâ€*Gº)Qs¹‘R·Ï|¸ì)RÛiq t”é"&A"œbІ(Íùç Í2DSz8<š|P²ÎdÝœŠŽL›åÛŒÐ÷ cî¯@^”ŒíÛC:ÓÒ7k$ƒ4Æcöòqœ ‘–äÄÇ ŒŠbÈ@ý)È Ý!@ÍG¶±=úPñH’*¼×LЏÎ{ÔàŒÔ€²8D,FqÛÖ«¤¢6PSj·J[©ZK+ UšN”ÓEDaGüDñCDR\ãÞ­SÉPMn#"‹…Šcæž5S»häÓÛÌ7º:‚jʪ¯ÝS$…ääjwˆlØî‘AùsÅ\q¬k…ðx©cZ/þü~™©d™b {Ò]F]Tæ ”™‘@R1Ö¨ Jë,y^½GpÑnÜ4Éw#Æ@îà]’ÁQ`fwi £ËÁÎî”ûr°™úæ›pêÞ_¦sŠ•fo4FËŒŽ ϱÈÁ8êj79¼\vÉegŽL¡¢Â¹m¤ þÔÔ™žMC1Ûd¨âŸ*!WÇÌ‹ ‘¥@gµEgÄ$úš!U6¬ÍÉ9äÓ­ú8úÒ`i{Q€ii N¼ÑPÜ3¤eÔã\H°¬„)ØE¾¦šAÍG$ÛXr[  LÂ@’.7t¢ÀJ:TRLce]¹ÝP¬ÍöÌsÆ*Á–1 V1éE€ŒÑÚ’GHþñÁ4ˆë"åON´¬–Žô‡ J2Euª,ì/ì8UÑéNÆzŽi¦W€==ꢰìy«¼“ô¤(¤“Ö‹€wëÅó´f‚8 WÓ±Ë(&—œûSZ(É#YÖTfÖ>88Íó\‚i¦)>ÕæF1@d‹¹Ôì‘Ò”tæ‘ON)³çÉm½qHc Ìa±žx©Uƒ ©Èª6² ‰–NÞ¥²FTlô'Švg4 @9§c€æ‚@¢šzÐç4¤SzS4™¥¤Á¥n6œ) J´SwsŠ} QE(4Q@ @¥Å (¢ŠQEQE (¢€ (¢€ (¢…%-&(¥Å ¥ èh4Q@ KERRÓMQE)ªÓ}ê²j´ßxP1¢ž)‚ž:SŠ€-PESQEPh Ð ƒ@¢KŠoj)Hâ€(ÇŠSÒt t¥" bÔ£è* §òX¤æ†¹d 5 ž4nYA4Ó(8§#‡\N4”›ƒmÁ¦5ºœ€HµMKÛ\,A-¾è–=Ý:T±¡X¶“ŒS¨Í³G$qÔ)öÁ’=®¸ÅLi@ "¸ó%)Œb§Î¡HvÊ_ŽjCÓ ã~çò{Ts²ý’5xâ­… ¼ŒÒ4hÀeG& ¥áà=»Ó®y¸‡iÍNÑ«®Ò8¦¤ „°É>ç¥ CÍóÚsÿ‘qNkmóoWÛž´=»´ÁÊw¹ó/Èn@¥’#r2¶wv§Ë ,¢TÆêhŠIcrçÐj4hsÜÕñO5QLØX•‚}jØuæÍVy›Îeß·*ÐÅP••÷\8?)èÅIJG ¸<ž´’Ü:Î QÜnûy—.„DΧa\žâc Û‘šlw;ÝP¡óL¾ ÀJžR€çi0%êj&™‚3Á4þF*´¸kôÔ!“‰P¹Py¡]CXf a›þ8À¦N›®ÔzÓ°C©èA¦XgWo—zªœ sW M äÕ{àv+«sŠÌ„;Î[Žh°@ëJ*¦÷ŠtVmÁ‡4ù¥9Ø>P3Í “÷¢¢†S,;ñÒ˜—,êNÎh°(Îj8æBd§jj\)Œ¸Xùjäî@iÊ¡ ¡eVˆ¸?- $oÂ6hŠI‚ÀBè9´€~{U ’%ám¹­äÓ<Ÿßoϵ;+0È»ögæ§ö¥¨æ“KÚ«^yŠ›Ñ±Š`YK¶¢…ɉKMIŸÎ•Æ.8ÁéL&zS‡=i“HÑ¡eâòS<(Í$$€n(†_60øÅ?4À­2,VÍ´T,€Y‡Î^µy”2•aj»A ’ÛGj[qæZ…|œÒ l0]çhè*H%Ôù}(õ '€³‡B lP2ɾC—«;—Èâ‘][¡é@#‚Uº.@"‡YrêWp= \ÏjéJâ)´ ö`½Ç8¥Y¤bŠŒpsW(§p*^Í$EB~u4.Ï-RSÔf¸P1 AT-œ5Û’x5x`©Í5c „Š©`o¾‚”ڀ欘P¶â¼Ò xÃîÇ4\¦ŠrĤ˜…(2E4§$UŒqMt…z.oçGæp äTö21 ü'¢8æˆPìjKx|­Ù9f94\ïPøÜ3R¥%¬†ä8?.jèéHÞ7SúSXf€£¢Òwj@i¥sJÃ"€÷"PrF)T`Pcæ§Ó9ÝO Š( Š( Š( –ŠLÐEP@¢Š(¢—”Râ’€ (¢Q@ƒE”QEQE›JhÅ%Q@ j´Ç-VMV—ïÐ1¢ž:S÷Ñ,g£ŠBÆ¡–"Ò+©Á0à ö ð(¼q8¹ó¤’9 Бy¬ŽœÒñŠ.2’¿0¡Å[L ;R1Å0+^Qq“ÍG<š!ƒÅ]ÇRmõ€e95ÊF(yŒ€°ãµ[ò—tgéHЫd•4ÄCdÀZ¶OLÓmñöY=rjÊ@XÝi¿eˆ€y÷¢àCj@´?Ži«òéùõÍXŽ€¨ÎcQµ©ÚWyÚ{Qp$Ýb 2)-äÄ…dL:޾´ñ‹p¹4$RCÈAÀÇ Šç rIÇÒ‰“Ê´Ûœœõ¥Ù,.ÞXÈn”Ù–_ I'‘@…Ž'ÙäÒÃ#¦àT°±0êAZ­ ´1*@'½v³^° ү㚠Ò,WŽH>ÕxœÇõæ“Ùå¦}zUK–”Á—ÆÒ¤¾„=æ›zãìê4ÐïX­•aÅ ¹*T:`7CQ\ój˜çÎ*Q n±±n)4€j+®-ŸéOQ]œ[·½Ðj¤œ S’xÙñº¡FT°]ùäT22™# 0­ ¤i¬2„”ð)¯÷H¤;"É’:կㇸªvh~Gzu³œÈ¤ð)a!TfÉ$1ªöé¶õÔp>ÊBêÛŽy¨áV{É6œ{ÐãüêœR8ºuÜH,R3BÇ8äT1ô¹q×X —Íi³üdÕH.Îc ëO’àù¦8×qX Ç4µ^+€ùâ ‚g7.¤œQ`ö¢.<²€zÕ¡ÅQ˜·.jâJ"‹Å¹V˜ÇŒ›5^áp …jz6ì~´€–Re{0üéWr —µŒg4ÐI?á@…õ¥S¤ãh”Râ™(,‡RhNÉÝ‹9÷«‡Š`-%¢€ S»UyîD8ܧš|3 —* D¸ QšQEQEQKŠJ4¸¢€ JSH)bŠZ((ÍSh¤´”RÒR¢Š(QE.((ÅPQKI@!¥¤4”QE)ªÒýú²j¬§ç `)ËMñLBÐ(¥¤0¢Š(¢Š(¢Š)ˆ(¢Ž;šŠyÖ,¤Ô„€›U„+p™l–9©ï¬@¬qUa$¨ç y§3ª1Á=ª¬ÃÊhJŽiÒ.frý{@T†ä”f«YKŽÙ¤Ÿ-tŠ=iX |ç==E†Š*¼—&9v§5Ê#*rE;V·G}ù!½ª9-K°c!⬃Ç”®-‘Ãn Š"ƒÊ°lç­N89¨åÝå¶ÁóS ÜǾHÏ~⦙7BPzqQ²;o‘p@ÅNG4ÄAŒ6Æc9énn R*×½X_zkF®A*2) QŒTs‘å>qÒ¤Á¨Þ!"•j‚Ô¡94ØœýŽLýJ,À\ _J{Û©ŒF ôî";XQáRËÎzÒIŸ·|ƒ°ÍOoˆmÜH¦¼/çùˆÃž(¸ìG>Ù&:Sn×Ë™dìzÓá‚Hçf$hhäI½~”ÄK*&s÷¹©3PZ  ºã 6;‡yÊ0À*ZËGŽ”f«ÍuåÊnAïSN{Q`¸æª¦Ûìg8«Ùù¹ªiƒ¨“ž(@É®#ó"`:ƒš¬'’Ü™©o‚¼y4ÛˆSìû†2_Zb-Æ›#UÎxëUIèÈz9ghíÐí-‘UåoLrE$†^Yã*;ÿ*§%ªÄTn$ž1Wcs"†ÆUßæÞœ…éL ˆ¡PJâLÒãš1QE#1-œÔ’#lqUí]Ú'$䎔ì“ÀÅ#qÖªÇs$Šß %jH¥ó“=84X JŽY¼¼(cÚ¤=ª­ÚºJ²Ž”À›ÏÚá$R¤ô©joµJ„q·®jö8¤ÀLâ‚x¢—€h4ìâ“ ŒPæŽô˜£è8QÁ4§š1@) ƒÔt£š^hÓ³d¨Í?R 3@È`ô¨šÖ6ã>N)3@ˆÅºªíÆG½5mV3[ñ5c9™â‰Û ð‡Sv¡iˆªmßÊò‹:SÖFÁÜ7 ½ŸzQÖ‹…ºâ›0;Ñ“OéHNiFÙe„1(N})bR‹#8Án‚®q@éÜ,R³a6àG4[Ê©q#à÷Å]À櫃Àæ‹…ŠqŸ2ñ¤w8k™sbã`SVÞ%ä/4\,S·#íoÏSÅIi”š@Þ½êe¶ŒÀsD–ÊÇvH>¢‹…ŠöçuÌ…~ïz-pnd«P±© ÔÔ?de›xlEÄF~küzSÔ¨:Ôçµ>o˜¯ƒH–Î.<ÝàÑp#]Ò]Hvç£tÈOSÐSÚ9"˜ÉÜZq‰å…ƒœè(3ýŒ¿;±š| þ„I=Fj9ZD´dd”ë5>^ârM>€OÞ–›Ñ²M;©©ª—nÂhÔô«dT®Hk¨Àª@\\àg­Ô/#4Â$;}èŠVó69+HÚ»;È à²*¥¡!%`2sOŠä¸|§Ýô40,w ÔpÍæƒò‘Râ¢KŠoCKA<ãŒÐ9 LqKÔb—¥0 Îp3ëNÅ.(¸ìA,&R¸ìsRJw½WŠo5Ø@ÍW[P²欚 ÀÏaNà5•\n•Ù†yv+éRÆë.JšyéH¨§APIndœ>FL´‘š~9¦H;qÅUµ·t»÷«œt£\® X‰N´Û6‘Й9úÔÛE9p: Šå¶ÂØïÅUµ`-¤­^ iN~QÍ Nܯ٤9¢ÕI·m‡ MX6Ñ´±Â±p™Å;…ˆw!†æÈ¢B^ñQ¾èíVÛ&™,+!ÎpGqEÅbœè!Jd=*ù8žõ ÛüáÙ‹ëL½Y®Ìþ˜ìZ$´„úS0uÅ?¨€8â—< Ðho»@9â—¥&zQŸ›ÚœG¥&iÔ n(àPÇu QŒi¤|Ôã÷¨<ÒQѱKÔâ€Ô©Àdh) ŠP)S¥;ÌSÅ4Òæ€ÔdüØ©23L+ûÌš\qJ:RJP(”Sˆ¤# );µ'j)@¤F}(°É¢œJÒ:ƒJ“£îÁû½j²q¨¾:cš-q¾b@Æh°’D—î↑à·5RѰ&aÓµñùÐ;7,ǃJÀ?PU0‡«ܯ°ª— ¥ RriÖìdq‰>P:S°†“#œ­y1P¨2y5LRà(bÀŠVè94T ²‹–E'ž•*Í$p³MÔ(°\µÚЦ.] —†ô«™ãëHaš£µ(éH¦ŸÉÁÆié e Z%UxÈ|`uÍAnñ§É¿>™¦"ÎìÑ@c"…)>èäÑÔu.isHõ¥ âŠoCNÍ%£"Š;ÒÐ( ¢“<â– EP@Óù<ì,;â– „ñîÐŒө-Ò2iÔ˜ Ú3Ö–ƒÆ”PÁ§ihÆ( qJ)i{PxùêAIÞ–€Ð(¥ Š( Š( ¢—PEPEPE”€Z(¢€ (¢€ PQKA ¢Š(QEPh¢€Š\Q@·J¨zŸ­[n†ªž¦„–œ)¢ž)€ ZJZC (¢€ (¢¥4Pi€”QHHQ“À ¤ïPG7™3(û¢•å!Â(ËiØ é*8¥Þ¬HÁ^µ¹ n)ÅË4¢£yU#ßØÑæ¢°Ry=(°šJ3IšC¢ºŒ¼$½j^ÔgZ¬Ôrý) ÄSK¼ÎjÎ9 Gï(4î+®dV‰[¥:l}ªô3C ôéM6éæç"‹ˆ‰ägYHPã44ü÷Å=­“Éç¨æ€yR6)Ü ï¥‚¶>cS9"”÷8&™%¼­p RÎ"^¾Ô iF\lvõëNw/9Œ9GëKn6ùd1îi¤ˆ.Ùr¬84€–ÒFu`ÜàÔæ¡Ž\ÄÎRÛOç©8Æ NqÅA Á•ÙJãmY8ÅR²?½”ûÓ@É>Ö…™pI$R¬¹Ûž*µ¦ ÌÜRÙeVV'< ,.b™,‚5Î öªæî\€b#š²ÇtE±Ú•†V²v‘ŽO==)—RbW QÐ ~Ÿ÷ÿµSMIó7úˆ¦®#’2™ á­ëYë™8nˆ¼Vˆç¥&$&)1N>” C)0)H£P1(¥Å CNiÊ8¥íF1@ =h4w§ž´Õ4â{Rm—Ð)ÁëE 1Ú“híÇÒÅ)àf…58Áô¹Í(”ÀmÀ•m߆QÍ:É Žig!¬Ù˜uZ†ÚFŽÐ¿(  Ôµ\N¦(äÍ5/Q¶ðy¢ÀZ¢¢šuˆ õ=$W +mèÞ†QEQE (Æ)3@ EPEPER¢Š(¢Š\PQKŠC@&ii(E’Š(¢Š(¥Å! aEPEPLx5[øYn†«cšñLñL–’–Š( E˜…¢Š()C!L•‚©' VÌ~ñÎ;Ó£æùϧJm‰É‚99§CÅܹïÒ¨‘± Ï2ôÍ2nFOÍÓŽ”èÉýôƒ®p*7bbbÝAàš`X‘H¶ œ94ĈÉ>ö`qØPó)Ž5e$œIp—I³€zŠ@]Å!!A' ¥¨î jC å¸fd} K !ú©ÇŽÇÖ¦P1*FXæ›LQUÞëk‘´àR¼Š±‡=j¸ú)©"È2½"Ê„à0Íô{ÒÑŽ(=sPN‡ÎInÛKtÅ`b)mòaSš`F¡äºÚ­YàñŽ”w¢‹€¤0G$iÂŒPiE!ˆà2•=êí’2Jîæ¦=h§qX„ZªîÚÄn¥‚'?6sRÒÒ¸X\ÔTW„D*ç•næàÂÊG5cÖPÝ@46!Q· n„Ó…â“4†;­ÚPh¦’‚i(Ó±H(&€ `Ó©¹Í ÑA PŠ1Ji(Å. ëKšNÔv¥í@€ qIN¢€hïN#4˜ õ£Òâ’€ŽhïJG4cš(¥¢€}iÃ¥4gáÒ&iH¤¦R2,‹†ç4ìqH éN¤´(4Q@ KHh4 dí²>ÕSNÁÞ ÏzºÀÁäjD‘œ¢ã4Ä<ôÁéH:…Ò·J ªã 2)±ÃG*¸4»¾lS¨…÷7QƒÒ­¬© ŽzІk?1÷ 9©áR‰‚Ù4Û 4"\Œ:dÞ\›Ù‹µOšZW£Ú6æ1¾u¥Š‰ƒ“Þ¦Í&}h¸Ä™4BXÊÔ†ŠPh. F< –Õd”uÆn‚3EÂÆt,ñDñùd±©4òB2 Z¹KEÀQE%EQÔ\y‘ŒŽMî<„Á«Or6]riØWNàE;°rG+Å2ÓÈÎp:Tïo R8ß²G€@¨¸ âÎRNéV,‘M²ädç5#Û£Cåô°C䡳EÄT¸Ë_ Ï2@ÂëÌg§Ü[ù¬Nt4Øa>ù[sP2×½QHŠ( ŒQEQ@¤E-  Rš)(¢Š(E‚–€ LÑEQJ(´S&()h¢€ ( ÐRâRÐ0¢Š) ô5[½Yºj·z¤1ÂMê--ŠC ( PâŠ(¦ ¢Š(¦° # Ó© ,Hœª€i’B%;³´úÔÔQp"H•§oZìÀ°Ë’3œUƒAäóNáb)aÎÒ€e{avœ<€ ±ŽsKŒóEÅa{šd«º&^äqNÆ)h•¶ß³º9%ˆ³Ó¥Yh#fÜWšT‰’£§q¤‘Þ<àaš¬È¬Ñ _¼G½dŒŒdÒ´9c`­ üÃöW8óƒKäŠ"¼¤ÓÖܲ“’Ç=)fÀŒð£½ZééÅ8ÕIZE¹L}Þ•jÊ÷|[µ4KäÛ!H¢ù±*9†è"=Tu¦€•fe™RLÞ•g­VQš¸å±Ú¬ƒI ÓyܹÒt™\ägÖ¢¾æ4ç¿JK—1ÁÄXIã‘Ê©äSÙÑÎÀU5 ߣhQÍ:O!~pxÍ –Ôîb—Œõ꜄™OAÒ£…Y­ärÍíÍCëÒšj²ÌVÈçŠne…QÙò¤ò + ¹Ú”U[™¤‰®0Ý)ÂáÖ@².t4X ¤çÒ™,ûb®æô¤Š_7?ÂËÚ‹Øg/3!ÅMÞªYßJO­NÓÆ¬AoÒ‹&iAÍ40nTäSÀæÄ=i3FTœ ¦<¨Ž¾ñ ƒKÅ&9Å#¨*FOJ<NõVÅ™•²IÁ«G­.i8ƒL”•BW·4!<Ð9ªöÓ´ÊK b„\ªr¾´ìŒÒÕkkƒ1 ®1V)ÅÒw£µšQÒ™NPÐ)):gš\ÒÓhí@¤¦œJ¦—µ6—4¸¢“4RhÆi3J)€bŒQš\Ðc´GZ))h <ÐE:Ša Fix&€:P’(Ȥ=(# @„<0"œzÒ”zPûP1A¤ÛÞ‹Š;P§9§b éMqžiø¤#"€°§ bçoÒÎ)€´R)&@ Í/j1E Z¢€ 1EP(4 Z1EÄ-%) PEPEŠ(¢—”RâŒR(Q@Q@P(i)M% )h ´”QEQE†¢€ôQE (¢K÷MVbo¸j°ªE§S@§ŠQ@¢HbšAKEQE (¢˜Rf€Š( ¢Š(ÅQ@hiMèLf–›+”B@Í(#š2\b«YåØç¯JG`÷ž\Ÿw°ªÐ9éÒ€ªð±¼`åGLӮ؈8ûÄö  L`º¹=:SÈïQÆ Ä3Ô ©ö¹C}ÌŠ@]## #(+´´ö¦Âí"naŠ—­ "HR3•^j@p3JhŠ‚kq+)ɦÉlìÁ„œŽ•gœQÛî8íäI¼Æ`}iû$ŠFd]ÁªÀéÒ‚xżp²Á!#ænÕù‘Ú(sWW•£ÏåLE"…¬€ÁàÓ¥q4qƼ±ÆG¥[ê1@E^B€h¸o0¾J·QE×Îñ=è½ææ!œÔë +n Ï© S›çÏ\Q7ÒÓÔÒÂî«zŠH↠åzŠÔ¯jdÏã'©íSÛ@Ñ–$ðÝ©±î´ö4®!““ê(¹”ÇÛÖìP¤äÑq›(šSÁŒŠwžI§\!7n<‘OŽI•D{#‚i.˜¬ñ»òŠb-' 9¥~‡éLŒ€1àv§JvÄÇÚÊö\DÇÞÜÈ£s€zRZ6-ÜƒÈæ«ËÌhìÀ±ê)ˆÓpt4ÙW1·ÒˆyˆxÅ$Ç÷O¥$2½‘Ù 1éš³© Êt¨-¿ãɾ†‹/ø÷f¦!–’*K&ãüUqHnG#ÖªZ(!Ïšdr”Ša“׊M ½¹IàóÓ­/·zÏUf· ŠwuÍ:ä°’0 G4X ¬v‚OAÖ›«üÊr*/)Ö)|Œg4Û%+ }ß/R(°ÜÈÈ¡Sï5:o,o95_Ï.­'Ë…=*Ì # Ž´€xÎ*­Û: ÊØö©æCcÉíTî˲êzS@[ˆ–…Iêj\`TBAº–è±Î²6Ü>†€$ Ó^TWÚH ŽHGjFdLlJ¤È9 aÐR,Š~ëKŒý*Œ ‹×  Eü猊;Uƒ‹Æ²:ý*ès@ œÒ­4uÀ¥äv c¨¤^”´(<ŠLÓer±–Q’;P”c­)¨¡ÊˆÁô©3ŠùNi1NÎM "€ô¥Š;Òÿ: ' Rö¢€F9§ŠJ3@h=¨£½ i{QE"Ó©ZZ(¤Í-QE (¤¦ÑEQŠ\QH4QERÑL´Q@QHŠ( ¢—”RÒ Z(¢ŠJ\QEQE”Q@Q@fŠ( ÑK@)qE J(¢€+Npµ]zT÷v Z`H)âš8 -- ¥¤EPEP ¢Š)€RQEQô£4QIøQ@…¥¤¥ühJ(´ÙîÛéKži—¼¦2M1éà”sžI¦Î¾|ø†^¦d®ŠÊÊEL7 ø%OP)ˆe£bFV8ïR\°Ï¨^x¤…KNÒT"™sÈÙ•ÉÏQ@ÀÛàž¹¤ŸF¨½Xâ’ÑqÉ<Ô21’ô/e4 º«…ÆzRŠní –éDR,‹•¤Á¤.«€ÄNª@©y¼â3Ú„½êNô¤Þ§Õ[X@Œ¹<œñQE•Îx§a=¸¤Æh µÇ8¥­HÄÁ Žõ&RÌÇŠt¥•‡P)–ó´‘–#§j`KÞŠ¬·[£/·Ö¦ŽA"†^†‹Ç¶J$Î1Ny yô©O­QwÞ“/Ý=3@£‘_;OJ~xéU#ù®ØÇ÷*Øç4 ŠB})iæ Àæ— ÒAàdPÒ`¢”Ž)ZLsAàò)ø¦‘Í0±"µzÓ>ÍËÖ¦¥æ D¡GAM™<ÈÊg©(Í0 Kr°ßÖˆ¢xâ1îb§Í.F)\ qÛËpÚwÙˆ…—9$犲0J1šw IcO+Ë ö4É÷¥;IÇSWph¸ˆØŸ³¾éP[¾ëfŒgv*Ôdãíª@Ñp(À‘ˆÙe8>•fÜÊ03NhQÎâ š NýNc=»Ò_2ùJ¹çŠ´èma‘P5š·RE Œt®©J˸°àT –¿]Ã*v¶ÎI^†šÖÇrÈæhLDwJò5¦ùUFÆjI ’I„ªzRy •‘Ž@§ Âì²Ün+¹HÅOlTÆ¢>zTr‰VRBî ÐS­bd^x9Î);6Ò­S·8½“Ö­Ê@çÅP·‹¦$ŸjЬ{›Z¨&iäÞW[—.¥GqTàe„2J9Ž:Ð4Ÿe†ÁúSEÌÞ@—Œw¥¹mÖ£h=©…Xuçì+–šà-¨“šl3Èòmeàô"¡ fˆý¤€4˜ËndJ,'’ä+•U,©§}©<0ŽõRË™Ar§<ÔφÅÀlŽÔ¬2xäW@ãHn"'¹ªê1§ uÅE6•3¿éE€¾²! õ :g†}j¼Ñ¬ÈsõªñB ›9ÎGJ,#H¶GJ\ÝF}3TVKÙçΑ¬‹¸ÉE†i4b¨^<‚Hö¹…ÓC* Å·v4X P*‡›,Wdl†©æœ¬‹cq¥`, :UhggÜ¥~eô¦Åu#3)PJÑ`-÷£éPEsæ3 ¸eíUc¸µwc=)Ø ,R9¥<ÔsL¿½ NªËq †ëRùñgÆh°v¤Í/Îx¨šDc…py d™É£½4`u qÆ3‘@…8Å›ŽôáÒ žh¤Ç¥˜š[ïzZ(¢€ (4PEPEPE&iit¢ƒH(h¢Š(¢Š Q@ E- ¢Š(¢Š(¢—”u¤¥ ÐQE «pxÔ—=…F”ú §Šhà) -PE.)(¢Š(QEÀB*µÜÍá:´jµéýÁúЀrH~ʽ*Ì zô§9+cøRIòØ늫>v.¨ãpÍG ™S'~´ü¯“ãÈØûGÌ>lqé@I+y¾TdŒ’h·”»2·$w’neÂî'Š’Ïn_uXeªk:¢îsN¨/ú3R*H¯ÊœÓ"«Ù®" ޵cð AIü\šv*›Ï!wòþêœPºÏZjò ÷4ê1LòÔ9}£&žx¥Á"•À—tl§¸¦ÛEä©Îjn”b˜xª1‚ÒH˃Z»ÁèxªÂ"gòÀ!½h,4±±8Ï@%ªÉ˜椷‡Ê\ÏZ—4\Ek©%ŽUÛ÷jÊâ†PÑš1ÎhÁ&ç ™ÿDnr@9«/È0Ã"˜°"«84& ‚‹'=ÎiöåÖÓ1©-šÚ0¸ûÔöñˆÓhcŠb Yî7ñði§ý&GV3WOZ¬±´s3GÎî¢È­‹CpanA«½;TDDÍ,˜Ü{ ŒË/ÚñÎÁCØ<╱M^¹¡°XsH4™ žhaÅ)F'½\ŽÙH¯SšoØ¡ sõ¢àV²lÝH}éaÁ¾ž1SÅgRo\þtÙ,ƒL][nzÑp,óqP_mI=Aâ§TÚ¸ÎqP]@ó.àR³¢­ˆ sëN¸Œ%š6>ZY-¦hcO˨Pqèj€uÄŒ¶‰ƒÉÀ¨®PE2ðjÃÂÒÚª‘†Z…Ä— ±4eHêi |ñù–â@Nà;TjCÚŒ1Ýœu«Ë#Û׌U+hOÚÙOÝ4’Wkh$ñÍDehŠbBÛºÔ·ñ3 `3·’)>Ñ "* /ߎ”Æ$×E*‚”ÜËÊ®¥Epãí±ç€¾´\º5Ô[N@¢Â4;Š’«Ï0‘RC(™(╆IE @RšJ(¢Š(4Q@(¢Š(QHŠ( Š( Š( Š %QK@ ŠZ( Š( ¤Í)¤ aEP;“ó bS®~ø¤QL lÚ§’$“ŽiȋŽ(¸ÏcP^Ÿôsõ©ÞÍEuIÕǯ4!…¯Ël3Ò–`ÌÀ«íP9æ dœB#ÛǨ4ÙYe$mÀ¦"Å´Œð1'qQYç2Ó<Ñjû!ƒÚ›näÃ(ž´ ˜Ü1Ël¦¤’eHÕÎpjÃû<Œ€{ÔröXÁõéE€´·»’ éšl÷9Uõ¨î8’ RÜa®¢QaYÕFIP¬v"¢œF\8ÀéLµù “3Ö’ÅBÜç&¥?N*¥¹/nùcŸZlm)·2oáiq@íJx ÎE¨õ¨þÐû”IŒ7J, h¡F8Ò´É&HÆóOfÀÉè*”e'ž]ÝÇÀ¶„H^”òËeŽGH—fà1ëO“iC•ÈÅ5IÊœŠv}*­†67njKÍÂAÁ  ñžô˜µGmŸ n犓œs@ @Å&ÑÖ—µ &敹¢¥4ýÊ9Ú*;‰Ä=A#Ö¤V¡‡JrýÚ3GjA@ Ÿ›4ŒW¦à /lP ÍïJ¢“<О´sGzQ@jAŠSÒš;t£´™É ô¤S‘NëMP@4¦Žô ^ô€CÖŽôw¢˜ i)i^h{P9ëJqŠA@ EPŠŠCÖ–ŒQ@(£½€*Ü]˜% W奴«HÜ=*vEo¼§`v¦FE0DŠrT”b¼Hç%Fi†Ú"ÛŠ ÔÔ´Ð$ɵ¸Ô°D!jôÍIŠ(¢Š(¢Š(¢Š(¢–’€ (´”w¥¤¤EPE—”QIšZ1IšQÒ€ (¢€ (¢€ ( ÐJZC@ÄÍQ@î?Ö RMÌ´åÀ ZAKH`)i-(4”QE1A@éTîg?q2jééT®¹¸AM'’O.-ÝñPù’+!sÝ©ox@õ—dâÇ^)ØD²JTái`”HH#u¨äR>`~ðäRY®é^N€ñŠ‘®"·w5*2È2§8ª²[ÆÝó’j{hÄpŒu<Ò`KíM4µÒˆ×ý®ÂœRcžjibPÌASÛÒ¦§½0 çÍ"ƪr u-+\ÛG»<ý)òÀ²¨#•.(§p±]íÉumßv‰¡wH˜$zÕŠ;{Qqš)¬ø#Ób2)SÍ[íÒŽ(¸àm¶®0sLÞËf5{qJ@<â˜¤ÙÆGÝEL¢)Ž[{TÁAR¦¬hœ¢€hóãß´7ÍéSš ±î¼%GóW‡¤Æ ÐñT¬Â™¤b;þUmòT…ëU­¡’2á€ÃwÐ29ŒdJÁ·åVcoô0[®Ú®måèNsSëgµ—1ŠEj™·fÉïK$¾eŽO^”B͹VCíL‘|»5Và“šœÌ"µSß,¬%Trîx¨®Wt10f¦QõaÉ4 C;dí\€pjÂüÊLÕ ©ób|‚yuà>”X @ׯø-“ßò[kc°âªÚ.õ“wÞZB½ê¼ò·ž"F š²8 UXæxçHrz·@ ´u ÒûPh@â€)3Å#3%zв‚zÒb«ÃpòLѺJ³ØŸJ,ƒ@ÍAÀ•˜c©Áâ€üÐ ÍÍ)è(Þ }ãJ)h®2´„?4™ íN\bŒÒÐÅ'zCJ(©¥^´˜âÅïu ¥Í7½.(b€½)ÒRö –“µ80)ñÍ éKÛ4tàQŽ(^M;ŠhÈ¥(h¢Š(¢Š( Ñ@-%€ RÑEQEQEQE–E%¸¢€ (¢¤¥4”QÔQEsKIERÑ@Q@Q@Q@%)¤ ÒÐx ch¥¢€(Ȩ́ڞ´×ÿZÔåÀx¥¤¥¤0´Q@ŠJ(¢ƒ@„ QKLÕ É7*Bœ ¼zSOÒšCt»¢Ð梘‰^Sš¸yóLHÑ[!pi’V}Æp -«´¸=*g…’r±¥Š4Œ| ýi ãåÒ/~jØUv€µÀ“< ±Š¨ÝdÜ «½ê­Ò2ÉØu¡i”0Úzw¨e˜¤›UrëM–à|»–#5Èî²r{Ó°<áäy´‚ê2’3íPä ;ð¦ÊÙá\rMà•ö†æÊX¨a‘UdP.¢ƒŽh•½ #'XEÌü¾¿JLáyªÊ|«½€’¤grûܱ<JÃ/çå )1’cRŠ@1Á*BžjY÷?tâ§#Ò©Û1Q#'žiqÛbÆp*¸Ä`BA§‰Å¼ýÚdÅ^ÑŠýÜq@…ÕÐ8ÝJÒª`1ëQ[JžJ)nqÒ›}¦C@‹€3‘J;ã¥G$BH”g"®J/J‘Í~t¸Ï#­àf ˜UÝÝn•3òš°r4jUYpGÁUy4Øn7»#.Ò*~ô€€Z&{ã®3ÅLÞœ pô‡Š.0^µ_É‘š&=sVÍ/áNâ)ÉlÍ@Üç<Ñ4RȨ€go¥\"€(¸Š÷»ùn¿y:ŠiåFe*©×ëV@ô£¯ e"KßÁÚ8Í2vFÜã¡êøÅ4¢±ÉÑqîNlã ~j[œ410åF3VÞ0ànG–¾^Í£”\£îÜN*´Ÿ)2ÂÜgær8U ÀëL6qç<ãÓ4îˆãÊÜäŠrÄr*9¢ÀPqéKm6g$u4˜É3’}ª„üߨþUx˜ÕI-åkŸ1qŒÐ€K±¾æ0;Ðêê0¤Œõ§É2¸ÇËL•ek…pœ b,}¦!!ByÎ*½ÐÛ*ʇæô«&Øïdë‘U˜yw{Ÿîš6܆”á…iuü+:QÜÆb “×bîá Usš‘9>”ïJŠ&ß|u©3òTŒ¬÷$ÈR$ߎµ$,ªp0 W±ùgzQm“w&Ñòçšvˆå/$8ϵ]ŽE:÷V!þŸ'4ämºƒªô=i€Û0ÒØÕ´j­3Kžç5or©ùˆ¤ÀpÅ£ɘ,D“ëH]7cpÏ¥;q ƒŠÌ”¤h61/œî«R¡–ÉÝŒñNÀZ>Æ›ŠÎŒƒjãq:Õ†ckk×,zf‹kéH[+¤Q`-ö£¨ªÜH$1Éϧlt¤Fi©2Èì£øzÒ\ <£³µ[MçÍÏ^)Ø R̰ŒµF·c#r¹ª÷þ’€ô“(–eN=(° ä )«ÂŠwÐÒàRÓ ROÌ?:p#oQùгéE4tÎisš3Í:™J8¤© š˜)Ý© Ó»R)hÅ4œP÷¢‘Nášk¸EÜÝ(ý)ECÄrŒ¡©AÍ.h¤Ï4ê`!â–žih¢Š\PRâŠ(¢Š(¢Š(¢Š Š( –RšJ\R ZJ(&Š(4Q@)h¢€ (¢€ JZ %!ëJ("‰E.(  -̦ž)§ýa§@ÇP( Z( ÐQE(¢Š(¢Š`&)"«*÷nÕ%Q(Âñ94Òã°A’p)#‘dû§š‚äæx£4¹ z  â4¨­´šxƃҪ·9óÍ:Ù™-œägh€}('*‘8¶wU¸ŽøÕZ_â €AdZ\TNb”&Üæ€!Eè‚Á9b:õ©AÊŽ0i@ ~ÌžI¦£k\í±´ñVè<Ñq /ç«– d…¾Ü àt«×¯¥R-‹ÝÅO¥0$K–‘†8À™ˆ#!8™4‘D&µi–<ƒE€¾8^iU¸æ¨Dæk'œ¥EM,9Wn IºñR•±®î¸æ¥Þ¥¢ƒ@ KH)h¢Š(¢Š( ÑIHŠ\Q@†–ŠJ3KŠ1@ E¢€ŠZ(¢Š( QKÒ€IE€ (¢‰ERW5 ¨ÇÞ5*Ó´ )h ÑI@Q@‚Š( Š(4ÀCU3›óÓVÏ" [lMæn$ÓLC%æú<Ñ'7 á,З*Ê~eéM†VgüÍNâ"‘ÄÅ”ðqž)ñL¦Ô³&DÜŸâ4}›m±9cÍ+\«Æ žc<óZ1à +Òª;ùù[Nî:U¸Ô¤j§°¦ÀqéT®Žnã«™ª2ó|´Ëõž ØÝÍ6Iv½È¨"@ör3uþT$+—K2O^”p}*‘$Øyè >ã)8'9Å; [шýœTàU8çj Ò|”‚M)w‡ËÜÙVâ1Hj™ÌÛ# dæƒu˜<À¤àÑ`'£µBn“j’¥iÞ‹´´Ô‘dSN€SŠa<`ÓÏ5›t1Å P400(ªÓLÉ•ûƤµwx·9Í0$+APÇæ†ŸIŠW»@8Ji oÇÍëRÍ\d-³ï#šI Ö¦¥íEÄV02917^¢–X "só¯5`œri2‘‚(¸eßö¸÷ãð«Q™6*sŠ‚åÚѰp*ï`Aª¸Š²¤ÒI¯j[•ap’:й׵&4®h¥ó&ùTªéVàIŽ})M (.!ºs!á»Ñµs€jÛ n <”Ý»hÍ;Xod pHâœÑBªË¸üÝO½K,+#eϨ¦›t(S:Ñp ˆ<7 àú¿ÐU’ ²‡f-Ž™«=é1•'t7AJ+ØTvŽ|ù00=jšH\ÜùˆØ>ôØàhå,[;ºÕ+ŽÜ žF“’¶§d³úN¼6ÕÜ­ÏÒ›neq"c9 5<þcî /LT±Ld·|ò@Æj8ˆ¶óÁÁÒþY—+ŒãÛa¾ÅÔu¥ƒÉ0ànb€&–àüªƒ–æ ¿¹gmÇ­C*$ï…;YGÔEݬX’§‹ œ]‚É„'®jYgHØ–cØSFm¶1ŠƒŸ·g8â‹r9–U$ ÔP³FÊpÝ:Ô1Ä#wmù-ÔTVJ¥$gšVy]IB 4Im»†j¥–CH@ÍGò¤›%^§;…¤9ü)M53õ å±H‡³íwÉrÈ]°=êù=k:ш»bOöŽÄ2uÅ1¸‘YK¨Ž*Y®,)ÁïU%us ݓަ½*LKÛ"‹ —í(Îg¦iï*#c‚zU{€>Õ¨ºÜÁE€²$BÛAæœX2@ª²ø˜FÓœTn|Û¦K*ö¢À[|›Ó†LGëD^bÁ eÀì -‡ýM -§¨ñ–ŒåqÏé%ÆÌ{Urf’ÔÉ»=¨K&fƒ,sÏZœŽ2j½›´ ÝZaºsšTlÎ(h yÍ)¦©ÝaÜt¦´»b'"QUV÷1†òϾ)ßlà‱Þõ 0(<ôÅ•°¬)¹ùêJnWv€isž”´œg®)x<U/òªŒ¤ŽhÖ0qŠL E8I=©z­œdÒ:c@t UP8úRy1“£4Hâ4,z dS Q™☠ð#rG>Ôô‰=»F E Çšì¸Æ*Æ{P"·ÙwlzfŸ,"\ò‘éRFêäí9ÇZW`ŠIý) ‰ad–,O­G³ÆX«›µL“$Ãå9Å?¯ÄV‚Ùã#-Lhgp" mÏÞ«Ø£¡¥p!¸YߘqKhÉO½RÒî¦1„à±öªªévX¡ÁéZ#“J@¢à#{Vz°"Q+6ïá¢pi ‚sŸ\P"¶žÀ[°Ç"™`Wt€õÝÒ®m8­0Dªù Ò‹WP*0”é‚ÌBgk•5<ÖñÊÛ™ri¯lŒAã¡§p"°f;‘¹Çz´¿xŒþµPˆs·<ÕUã¿“º“øš^ôƒ94´†fÜÇúz¹3ª£oû¸ª’Ç3]yž_CÚ¬ÜFe—4ÄQ "!‘AòÏoj¹ ‘5¶q…EGû 1º@ÇJX!o!†:óL?!Âð}=ªKv_²°NŠd‡æ,ÊÛñŠu”.#m駘QÂcß5=œŠ%d+‡ö¤¶"‘Œž 6Õï]‡*Zl ù±J W–é!›aš°1ŒúÔŒGmª[⣂t‘IQŒu©ˆØûU=8äJO­;:ÜÆ[ïtëS$Šÿtæ¨Ù i¤$qš[3¶IŽ3ƒE€¿H͵IÆp*—ö† ÌMÅZ‚Q2ncH )3É|dJ¿3쌞犡œê|Ö„±‰®iLI’BÊwœTö—|~ã­WxL Ò9Ƨi±²!fãw­^í@`Ð)´QEQEQEP( Š( Š))q@QHŠ(  \R Z(¢ŠJ(¢€ 3E¨P( Š)E&(Å­bŠ(¤35O&¦*ûÄTä`  (‚”R´bŠ(b’–ƒ@ ES¢Š(*¥¸köÍZlàã­U‚9#•‹Í4& ÞKI s6zw§·î§gÇ ;S#Œˆ¤sÕ©ˆ&_ lç€inc"Àä.2j&ù `O$µ$®ëj€ ds@ »‘YcÛWc? õÅP“çh”~8­€ö¡€œæ©ÎªoUp1Þ®÷EÆûò´!“,J.F~^õc#8¨­ã1+)õÍG1hg “µ©1ÍD¢A;¹<óQC4²«>SÍk‘EF“ƒöëLKŒ¸Þ¥AéE€˜S»TrʨÛ[­;xÀl´€ ®Jç‘ÚŒÔ0Gó´ŒrXÕŽ´Àoµ"*D6€O­8{ÕKÅÆÇ1<ÐÚ 5xRýi…¾òƒAUÛ·£­ p;P2#o>è¢Kt“ÈÇJHfg©Ç˜ˆ  ,­½²(šwWVÁ9ý³½PȹXÊÆFÞ¹©/¿ÔÆqß&‹4Ó \u#Ô–UŽBî„Tw E ÷¤#šZ1“Htª÷Sˆ ‚Þ•dÞ³µ•@aœ±¦€¹ #Võæ k‡’b€1×55¿ú„úUÔÛÜïˆîÏQ@‹pÜ1ŠO¼=*f$)#Ò¨Ú2Ëpdc†ô«—ݘzRµÁ˜6GÔùª¶¬#ýÖ9ÆI©æ,¨J.M;ÌRJƒ’)G"³ìé¤'©­Æh2s@ví ŸZ\sAã¥0H‚M¥¹ô©“Ì0,=ên¹ íLþ,Òç'€07PÆ•zÔ¬XäOJ›µéÀŒ¹è@g”ò#ôïOP,4hü2ƒNTT@EË*{JœÐ2[¤Ž³‘éSb’œ9 H»ã+œg½W‚ÐÂćÈ=YvØ2sLŽá%mªy !†Õ¢g!Ç4[[<3,j´)y¢àºƒM?(;T})àRt4˜oµ‰L}ëBI<¸Ë‘ÐT™ÈÅ4¨=E02ží¤“{&WÐÕ«9üùOp*×–‡ªƒøP‘"U@'Òží–óËÇËœUÌÓ$gÜTfŸHašZAK@Q@Q@Ph´ (¤£4PŠ;QE (¢€ (¢€Q@éE( ¢Š(£µèí@Q@Q@Z(´”RâŠC3f\žÕaýª¸ëRj€x¥ÐiâŠ( ƒEJ)qI@QL¦ãž´“?–…±š†Ì—ÞÄ÷¦„Xü3F9¨^G2”ˆŽNjHŸÍPý¨Ôˆ#ݸ¯4é#.ÓÒšòì#ÇÞ©IdðZB4#;€äÔ™ÏJEeºÀÓñI€Ó÷ª¡‚Q9`ŸJ¶E.ЗÏiÕÜaGlÓfÝ8a‚¡zf­þ4Œ9ÑqÀûà%†¨l¤ ’gÔš¶ø·¦*µŠ«! ;Ó5ÏØØã«f¥ºÿW ¢¬R…01éQ UIbBô‹ŒŠ}ÂB㑌5$ì¡ 8<àTÅdÀn Ñ$Cl{~òÑ ‚5´çnÕ"­ÓÞ« ™åÃjŽÕc9ü*FŠ÷’lUPycP\E±¢;‰ÉèMMy`Ž9ÚzTÈD|æ© –&˜£*(šˆ¦-)úŽâ¢œ+\DÄü‡½M‡Î%9oZ&NÎM€M/Ö™!ÂíRQZǤŒ}jÊÍpfªÙ•Xd-Ó5 žXˆÁ뜞õV¢I³NíéH2sKÜf¤ÇœzÕV•¦œ¤m´-5.^4"@IŠv —:Ò¯ª¦Œ#É‚­Øv©&¸ò¶±\«tÅ|sš;Ôè.ÝÈ@n†Ÿ4‹ ߀X§¸hœe>SÐÔêr3Tîäßå ¤sг,‹MÇâ€%Í1äXÆXàt¥ ,z l«Žz @<àŒõ TsJx©åA ;8€g“HyèiÂÄ´è“Ê…W©ï@Ç‚z¡©:•U‘É«ˆ¸Ï½5àŽF%”B°0 ¾áÄOLÕÅQp£ IÉИŠET_+§|T’™ÙŠ…ù{U…|‹ƒëO*p(.Ùœ\9'šÔ“;Ò¢K`Ž]IÉëO”HP„Æ}è–œ|àûÖéœàU;[ib”³ãÒ¥¼I,Fy¡Œ™3×4î½jPéWëRäç¥ ( Ù¨í\ã­>Vs|X€G4ÕY~Ýæâ•–A~$ØqTBÌ—¦2Äz¸eŒ6 ŒÕ ÇûC~ÓŠ·-¬R¶â4˜£+Ÿ•¬ÛØö\'9Í\‚Ù`ÉROÔÕKö r˜Ç .:nˆ¨î*šÄë1‚æ´8çñ4Ä9Ž.·‘ì)n˜–3Ãj 7¬±†õ©gɹ„‘Ž:PɈncØ0¨«žµJÀíWqϵ&05EÌ‚óËW Z½T[qÔ>Q’) &ŠVóÌRrGB*Æ*¥ºï»g~=)~ØDÌ›2&€±$bD*N¨â¶X[*O4}¤lVÚrÝ©ÑN²ç±EIŠ*5ž6'æqO,6çÙgȉ[pAš$…d9aš."àYùžò*I-‘†Nr=è–-è£8#½—¸ßæ“PF?Ú¤’ÖFÃy™#ÖŸÙ–$@qÎM2Ï>d¾¹©e·I1È>ÔØíÄlÅò(¸ÁÊÓzg# ×QÄNUW¥ð<,I ƒO•fÆ»¸æ‘*Ô0£ŒUÞµA<ÁxÐóÅK%íÀB>Rhb-dUk¹^˜Áõ«©_·(”!Žû\ˆËæ' 8ÅKÈ’M…J·½A6Ö¸„px§ÿ{Í;Lײm9㩤¸Q* ÜžMW–@ð9Xð Á4ë‚Í3É V(y"Ö.NàOepÈ RºP`„üSî×e²HíNÂ-š"©D&B®X” šgœÅ_0õáiXf†1Mv(…€Î(‰·Ä¬z‘DŸêœûPhîÌ€Ÿ,àu Õ„‘d]ÊsíU¬Èšm§ÊÒ7D†˜¦óX€¤cÖ¦#ŠŽE,ŸhÌ›CÒJ1HYA &ñž0Gs@Å&8 •<ÍN3Ú€Ò—ô£µƒJª¤ÅEq#CuçëL 6œ´* i¤œ`ö©ñLÇ¥1 Žò9©i4®1ÛÇî\ŠGL…†Fzâ¦^†Ö‹6Â'.¤ý*ÆsH4ãÅ ù«> Ìò2®ñžõ¡ŒõïUcI`,¨ ƒÓši€è_í2• Ž:Ô[Ý`h‚OÔöÐùQœãq5?j."£ÂE–À2Øç ’´ÈëZ8ŒŠF01NàGjA¶QíT”0¸h‡Ý'&´‚…\Lò—~ð9¥p#¼Rm8íPªÛ˜·'Ò­í#å&™öhÉÜW¥½ðl=‡¥ZUP 3Ž´Ùm£˜†`x÷©=©· Å;FÔf9[<äÓ¬r#˜Ž¢¤[@¹ çš}µ±€¶[!¨º½º<Ð8%9§Í‹OÚäëNû4±±òœ}ió[Èöâ0A4€†áZ!QÈ#š.—d1pÙëNž9Z5M ã­%ÔsJ©òp= 0w#Ÿ-3ÑJŠËržZ2®9éágT‘>ò”±K4“.å* ãgkÆEbjHeu¼h‹¸ïQGæGzͰM,,Mùb¬õ€IP¶ 9ÇkC8À'&¨O'•}½‡qWU·Þ¼óCü çFK™"Ÿa@wt«àûVuÉPZu¸"]’.Üôæ•î–)B0<Ô7D¨Âö¦ÜŒÞGšvj”—p‚´,èñ–Ž 9¡TV`1‘Uìp-œöÉæ•†YŠD‘r‡ŠA•ˆÍ«óÜÔŸ.UIW¡á¨°DÔãëLu¥Iá‡Z©tÛgÁ(F8íO—aÊ9ÀRX¢òWh$Šœ Õ$‘£±ÝžqÖ¢b˺—.H>Ô£Š^ÜUK¹ä"eþ.´Ù§–MÄݨð¤-ƒB¶à)Þ v)ôÖ•â€&O;ÊÏ=idF…› ëYöÀý½òsг=¹+Ó½; °y*@=êpãnâxëY¦u–ÛËVLn,Âõ4X›È³Œ‘õ:¸`5wUo À÷©íKEfY¸ Q`-–¥ŠÎ…Lñ´…ÎGJ’Æv0nvœQ`/R k ñHÑE¸¤ëKH(i)h ½Q@iEPEPA¢ƒ@)h¢Q@Q@Q@Q@Q@¢Š((¢ŠC3”T‚¢CÅH*€x§ h§ C (¢€ (¢ š(¢˜(ÅP(Í;±Ži–¿-©"¤¹lBÝ9 E"ËCT„ÆCÍ´„÷©­˜=ª([m“~4±?“j22M æF'©À©ä•cŒ³¥SGhQžYº `f  -\Éæ=MOUìÇú:ÔçŠLË%9"«AuæHƵNÀ¬lsØÕ WdQL¢˜‹ÞpùeNiýê˜I1n¼RµÄjÅK~”¬2\ÑÚ‚È aÁ=éÕJý±Çjºq@ ‘´’)$Ôݪ ©ZR½I  ‡Šl‘$˜Þ â”ªžø¢À…­"$}E"Ú„—~òjz@è\®á‘@µ®c(€N@¤¸†V‰QFBÕ‚àqš]Øt@žHÁ©<ƒ”îà®qL™&’ue\ª÷«—òÛåËŽ)NÎ7.$VÎ*yäfœD¨M%ŽåR®¥NsM”ùW†FVâ˜ZÊÅÙ£¡#­ZÕRù¥ˆQÒ™ Ë5Ï”WZM µU¯Ïú9k½RÔÕh@-ãëV]Â!fàTx¡‰u5 Ü¢h×oÝÝŠÂ\«0 ¥sÓ=êr=9ªÏwˆ¼Ÿtp*×O€ i ‡½9H$ŒU)wG+oPU_J±2FÊ™|ÛÖ‹6à@ÁéKGZ¥lÒ$ ÷JlÑùW(Ç;_Þ‹¿ì ÆzUh%Tñ“Džhw}ÛUzRlœP9ªë+=¯™ßÛ{‰ lùW©§`.b“ƒQ üËrȼô¨,ÎíÀžzÑ`.I• UÜ})ø¨é`¶:‘JÀG ÁšB¥J‘VG¥R°ù¥•½MZÆ\®îGZvýésQ‰É y"ƒŽœÒ;Òç4Þ‚E; МM³ýj)”È»3Œ÷¨î˳eÏ u¦Ž3žÔ§ðª‰–ÓÆIû¹¢À–€{÷  ]¨RôgŠ@-#‘J)8ïJà#"1ÉPiÀbŒ`P:Ó¸ Þ³çµJ¾ÕU­s7™¿œÓ¸¬xûÓdµ8v$éRG2É•^«RŽ”„4.o^*¸µ*ŒªøSÚ¬Ž”¹â‹Œ«»ÇF[“ÓϳÌÅCãjœæ¯vÍ6‹ˆªÂUvÌ{•ºS;˜É=½*öGãGãEÀ¥f[áKĈ«”w=ªà8§z `gß’,çŽzSo¤V1cëÒ´ÔHÑ#™A df_* RØËk¡9?.ëV )R¤p{S"·Žìh÷4áÐQM3! pi ϵçPÔºŒ¬‘…\€N $vRE(pàžõjh–hö¿çO¨e¶SoæG÷€ÍM ì-?{§4}šQòyŸ%LðÅ8ÇJ."ƒ¸•$vu«6Ó m‰~€sQÉm3®Ýª=H©V×e«FÌERÙ"©xIØjÕ‹£&Ã÷¤·‘b·(à†ch°ˆ‚ÒŒš`]a‘BŠÎ{©EÉNvæ´#È\â¤d” ( ¢Š(¢Š)QE™¥ Q@QL—Q@ ER¢Š(¢–ƒ@ EPEPEPIKI@QHfr S¥¼Õ±œ`þ5_ì¤ec“h=Edv~V7Sm†ûÙÅ>ÚÞX$ê Nkyáž20ÝiˆŠ!þžøéíWÿŠ©Á ±Ü–a{Õ¾KqIŒ¯{äfsÅA[¦Ö!‰Á毟›#ÔU8ˆ‰è§ŒÐïG!ŽF9§\l2NN)šƒ»'œÑ;ƒd$bC‹ø 6È‘hJŽ{R†_ìüwÅE•±;~ð4ÀsË4j­!ž•fY‚Dõ=*•Ë cyfïÇJšè©†^ñBó³ƒE„iŠQÓš@iA¤1h…€¥Í-™¥ €h¢€ (¢€”u¤¥ 4KŠ(¬ªy f€0iÔb ò¶í£4üQE0 \RRö Š( Š( Š;Ñ@Q@Š ƒE€Š( Š( 4QERŠC@Q@Q@6I@ š(¢Ê OŧР)i´áH`)i- (¢€ JZ 0Š(  —åÂú-<¿—i‘ØS/Øyj;“Kp1gø ¡ +åÚ¤£ïÉ«Yù7g¶j´Ç+î*B@¶ OÌWÖ ³‡bzšV–Fs‡ è=i¶§÷Œ¹áx¡à;÷ò¯9ï@[ÊdSŸ¼85.xª– —‘»ÅZ=i1¡Ö5ÜÇ‘d)ÍÀßJ© ò.±‚½h@^RpzP@¨ ’\õ) Œ`ñKF)Ò0 Æj½´L®îF3Ú­Pa* -•ÛvNjsEC,`_˜†éb‡Ë$îË›Qpž S€ºÎìÈ~n˜«´bš`Sµ,'“r‘»Ú‹ÅÛ22un [4Ž¡±‘Ò‹ˆd˜ŽØƒýÚ†ÇkBy«.¡×dSR$;¢àT‰7]H 銳hˆ¡¶1<óI-ºÈsÈ>Õ$1¬Iµh¸ÇLÛbcè*¥¨Í»œg<殘Ý*¯‘"«,l6“B%›l¶‘»Ô@).NsS[Å"ÆÑ²ð{ÓPËf-¹çƒLE¸²b]ÙÎ9ªwQ´Æ7òÝ*òçg={Õ;³åÝFç8’é&tuzôÍ9d’Ö'mÛª)y™' ß4’:é |…Í;NÓ¸ºÈ4«9óü¢¸8ÍDþÐÉ=©U”êO§Z,Q4—*´qÔŽÕ2°ew¬é#´‘œ®~`jômæD¤ )XW·¼…äT qP$1$ÙSóz˜“3Hd²l„€y4ØàVòä•3Ra° ¼žô²9ŠÓäàã­0-ätsLž!*mÝŒUIËq"“‘ŒÒÝ»yQH­‚}(°Õvª®zS»Ób$Æ¥½)Ù¤ž´éCOJ¦.d}î€lZ,¼RP›¥+ÉnÔ䘲P‚;P‡ Röªâê7SŒŒv5ÅàBE;€³\, sš’ˆt4’ۤ˵Çôc@«ÐR63CgŠR3Ö”Ž)À§‚šÝ)GA@ KM¥¸¢“4PÞŠ( Š( Š(¤KIKL–RÐEw Š € (¢€ (¢€QE AÒŠ( Š QEQEÐÐhÍ%QFh Q@ ERAiôÕ§UêH´‚–€ (¢€ ”À(¢Š­qÌA`T0”=H§³zÒç߃қH¬qÀ“S5ºH~`r8©ñH‹ˆ©f›dv9À¤¸º ÛFv÷«˜äç½1¡º §p!µ—{£ *ÑëQÇ Ç½êAÁ¤ÆˆîOî Cwè–@0T –â7•v¡Å9QŒ%$9&š&?dy;Ó6°¶ó·ÝiñB~Ìñž2x¦;Ÿ³ˆ6Ý3@‰%ÂDÈ~õ9§uc#9¨§Y€‹Ö•¤W½ŒƒÀ}hiî<©B”'4‚ã2ùa4ËÐ|µîš[~CJÝH¢ÀH÷©ÚI$u§ nâF*” $‘Ë´Œ±üªS¢¢ÊÙaE€²¸dS¡ª–M¹äÇLÑnNé‰'ñJÃ-ÒÍW²fdbÄž{ÕÔÒ}é*´w3º„/4«y”'a8ëŠvÀé@¦ùéä‰3Å$s$‡ ×Ò4-Ó8Ï4£9Å-8ç‘K@84ÇZR1Uï$hâ ‡Ð2Ço­  )#$ Ï\S¨Ѐç8Á¤XŸ”=ª ‰f‡æÚ¥jÂÊ ÈÈÍ0ðÇ!‡"š-cWÞ2Ö¦ R¸MšòŽQV ^ÀbŸI@cˆÇz>lç“WÞ¨Ò=³³±É5(ëLD¨Òªª ‘Í#DóA±—i«&ƒúÑp)J£ªóÜÒ]©Æ€E^À=hv¢à@× º9ät§Ã –=àc4˼˜¶*äŸÒ yq…ô c¥É…žqT­~S =A5TFÚ&9)ÍE"Dð¤jpßÚ[gmÍòW½Jð#¨chàŠ#‰cSŽIîhB+Ùó4¾ôDÅãoAL¶BÒɆ#rV5#©=sL p«ËlÀ.âOrXýG2Å4[’,m<óMžÝÚÜ"œ°äæ–€[ÝÊ88棕U|Çi2sÆ*ä(â®8íTV9]vdœóL (îö[óü5/3Û Ÿ–•7}“knÓ"“˲*P‚G¥Oosþæ¹äT^tí›=OݦÃ’Å”¥M ¨–À7Þ^ԲܰD öìib¸q?“(QU¦Ã\G#”þ•eßí P屜Ñ`,ž(¨Zâ#/–-š˜qÅHưæ¢{¤CµAb:â¥áO®*Ž ÈRi ,K"Ëg#)Ï•2ÎXÒÝA`)^$†ÖECž*5³sŽqš`\Þ¸-‘Z#–78WPCyê;Tr0ó TcÔR° @ÆHúÐ úÕMGˆ£=óK³d6ã‚(°G´€ç4±Ü,“GZ‚Ë>t«“€i–i›©'ƒ@ä;c,:PÚy… Hzž5ç/pb [YÙÙó·½ ,P9¥í@´FTXÈ{š±öhð@Ï\TfÉv¬F}éÜ#…¶‰YwníK}Âíã¥?ìÿ"®ã•èiRܤÂMÙ=èбºù½1Í-«æáÔgo¥/“"\4ƒi-•ÒvÞ¸ Þ˜¹&â`Xã4ûId’¨°Ð¼ªT’ý¥´ a‘9 }E \HÈÒ¥-Ûïµ»±¤ˆÅEeQ¸z÷¢õ—ʈ9Î( —WîÊ›4Ë äŒ’p,dœöªw<ÝFLҰż”²*•ÆZ­±Ä 8ª÷¤~ì3»4ÛÜ“çŽ)j)UøïéJÓF­´°Ò«˜_ÏY À]ÉŽF®àÇ!¨°3H:iîLTWgý±Sa“lƒKŠ¡Hm<Ñ#d ã5)¹?bßÀcÀ§`-‘ÍC2¹\FpsP9’²''½>{‚ˆ¬½XŠ@XAò®î½êµÛË[ƒÚ¥–o)³tª—m&cW‡4ìåËF¨£טD‹ÆIà Xfîà© @¥íPýª Ûsœw¥`% å”ãÓŠ†êäA# Oj’'ó7¨¦X š)I8Á«ù£ÑÁ=Z@/jÍ'a@â€Ò›€ìfŠi¸è(aÅ  a´ƒÃlrTfŸž()\C^$eÚW"’Rº?yæ—S¸á|ËíÑ©kDŽiªÎáEÀCô¨Ý–Bñ6ÒzÕ“Å%Wkså2où›©¦yE·”³žÙ§v¨¸ŠfÕÞØ!#+HÖó³£¹^ÕséKš.KØå‘UUGÔñXFåä•%.G¦M q4›Üæ™nÍ Ã©Fùš´(ÀÎ{Ó¸Jˆ¯¤)jÄ,cL/¯­NÁXrúÓv€0£ÐR¸¢»óg1íÀìjÒãi¦cFÜ«†õ§Å+Þ-[5|XdôÚjÄð,ê’ô¦ EòLAŽ 4À‚Ô°»{sKfÌ–¬È2sÀ©VËl%‡Öo6ç4\Eaw.Fè5lüгr SÅ<i$ Q±Œ‘F€QÓ†wžõrh„Š:çÚªÙÅ$,U—ƒÞ¥»–DP¨¤“ÜPÀ¯s݆#žäÕè¬* ç–â0r­Ï|UÈ]â²ÜÈõ¡lô§(â©Ú\¼à†=ªâŽ) Zkt§â‘‡ÕéBŽiG@híCPE"ýê_â¤QƒJZ€¹G÷i¥ýÚ4´‹ž¦–€ \R Z(4fzP(¥¤¤KŠAK@) -‚—Q@(¢Š %PEPEPEPF(¢€ SM:šÝh¹¢Š(Mi☴áL¥‚”Rh¢ŠZ))h4”´”Ph¤Í0)ËÍ0}œRÝ©xÇCšžÊÄS¸a/”ŠrO54ÈÅC÷"ž±¢œª€içž´î"•¡™±ò÷úÒ»ùÅ•½21VR5@Tp«˜eRʪ0{ж’‹cTõ´"öç'­MHh©~ÄB©¨ä$ÁI÷*Kì”UŸzcbâ‰G̾¢š;Ë媪`“Òˆæ%ÙX ÀvéPÍÙ¡ Ð Nf†-òGó”Xc–è3 © N©šEF÷éT¥g>Và“‘Š–èfâ!ïE…rÎå'óQÀœGŠl‡ý=;T~Xm@ŽqÖ‹pçaÀÉ ü™'µ2Y œD ëIìb“’§ƒHe¼RU­ä‘Ÿæ`ÊGåV»â 9Çj¼33ÌÈà=)Í?ÎUqj+_žæVÆìÎôt5O¶ÝÙ=ø§ç8 äRNh$bŽõDƒöÝ›ˆ   f¯=M*Œ~T½èÇ9 Žx¥ÅW¸¸1ÈW$йÉPO­9ãY>úƒJ¹Ú êGJsEÀvŽ)’IJŒ0üjAš(¸d³  †9ÍHðoˆ?8èjnÔd⋈¬°H~g~‚£hgdØ*½]íCtÍ;€„zTgm³{ÕÓš­~@ƒô!Œˆ·Ø0æ< ³}‰WƒššÑÃ@¸=*cœPØndóbHÓ–Ï"’è€cAÛuG8¤’$|eAÇz."½ÏúÈø@¦Þ•/ƒžAâ­´Jɵ€"¡6Q‘è{.\¨“d`ýEnÅï)ëJöÊøùŽà:ÓàbÉ’}h¸ÃpqU¢…ä´ÂãžI«ew)SÞ«˜&ŒWMcn×±çU¨@X†8¨n!g·@§%}iöâO/÷Ÿ¥1Œ²šÎµF’Yc€}kCwîŽÑ“T-‹Ädcs@Ň̒7ËñO¶¸anÌÇ‘L‚]‘HH'‘Å2Ý|ËiQ@‡‹‰<¡)r~íM%Ëe0 óPÃ$FOÞtäT“,s¾ÏºTpI .J³Iä3²|š—%­üÀ¿ZdLÆÎ@I;x¨ÐaÓœQ`-Ç2´Lp:Ôbö"½é-Àû ç·JeŒjöä0Ï4¬2ÓÊ‘¸à‘ÅJ’çuÍS¸É¾tŠš(LîÅFáÐQ`%F_hnjP0k0’ªH¸¸5¤^1Ö€÷©—#08µ8ŸŸŽ”Ëõ/ô¤K$i!$±ÈéÍIi;34r°ÔœŠ¯-Ã,Œ¨ íõïRC!‘rÀƒéH 7vïKœu¤#'4™=Bns6À§ëVAñ¼…Ta…iŒHQ›PÙ£”œf€$óÚŽiGÚ©ÞÜ”P¨y=ÅZÑIýғתÑË%Ĭð«ÅØ4¿Z«op^Fþò÷«'­;ŠL6ãŠCÀ¥4‹§ÝSÅ%--%¢€ N”´”c4@¥ Å¥¥Ò3Å9Wh£½¨¢K@ KEš:Ò Ò–Š) - (¢€ÑŠQÍ)¤QEPh¢€Š\Q@&)h4bŠ;Q@&ihÅ%R‘iæšh´QE)­ÔÈmÌnX7ÊzŠ."t’Hœ®2ǯ¥[ FŽHïP›i›ÊpªjÊ.ÄœŸZ)ÀäÕ#Î¥S^«8Å5”:a”ïUá•–v‰›xëšiXåpFqŽôX  Qò¨JŠ{¯%°PœÕ‘ž1Yú‰Ä‘æ„ÿi À2‘ž•1$€}j•Ë Œj¿xUß¹Ü~èäÑ`:P}MB·Q–#8ô©]ÕFXŠ@7Ýx¥¤f@y`3Úž@=¨8 õ¤Ý“Ç?…;©â€øíKÇJkp}èêhxŒh Ò@°¡UTä P)[Š0Æ„îÚ3ëI$¹—ŸZ~iO4DUTÚcÒ¡û$|ñÁ«"J§8ë@GÇFƒImoä‘ïS;'€ÊNsÞ‹ Äc‡C†‹ ¥[|™b01Vš.C¯±d „ïÞ–í$uQp=*ÑëNÝ) 9¡ºIv BÁ$Ôÿ•!¤+ ÑîFB=ñV'ÆÛ~ö8©}é£ÏzeÈA·Á\uÍO,Šl°É«¸Ï &Ð¥AªàCbÁ­@EWfR>Õ}QPaTíL0&ýáFïZW¤Ñ¤¯#£mdëÍKm/î7ÈpäÔ¦Ö7$•äÑ$Iån‚•ÀX¤IA*x§®pEV±b¹€O«$¤ô ¥kó_KŠlˆ­¨`úTÐÚ´3oß×Ú‘íœÜùªÀ{S¸ˆØ*ê(©ÇÒ­ùÑîÛ¸dzÕo³Oö.GáSIi¶JüǽO¼„¡¨(V©«PÛ¬í$ýj¦ Û¦ŒzP†^_¸9íY¹{i™¢ùÁ<⯷ÏnvvÕ{ ‹£à6yÍAc±ÙäÏÎ{UÜ砪ɋÉ<³òÅKqx`—fÌŠût¥Šj>øÁõ§'ݤ1@¥¤¥˜¢–Š@%Q@QLÅK@P(h¢Š(¢ŠQ@Š(¢Š(GJJ( Š(¤KH)M%Q@Q@Q@(È Ð Pa§ši ÑE ¦)Ô‚–˜  EPÑEfŒÒâ’˜àQEP•Õ®Ð犖øeúœÆ„ä¨Í‚E*xÍPŠ÷3Â\ƒŠI¥ ÅH!V¤K}¯¹›q*I4l"Ù8e`:ç4\¶7P¿ÎŸ!*NªµÄ&× NO9  Ð’Ñ)=H§•º2Ç–=z Òc*j÷CÜÕˆGîW>•_Pûˆ3ÎjvGl¤rp1LI–,ëè)É*:nSÀëíUŽç¾>^3CBë Ÿ0%Žp(°•ƒt ÕKoøø—>´ûFBÄm*Àr)GæM.IñŠ,"æ1Þ–ªÅ+¤üÉMŠâVD8Ý“ƒJÃ-šNsP=Ã4…"\íêiñ;"ýר¢ÀHx8§µ_í(P;JV=ùàÑ`sH=iT•~Cšpe< úÒÇZ7 hÅ£¥4œU9E0ñ$˜Ü3Š`)¼â—š@#à 2 2;tGÜ#¥?Þ£ûB‰Ddšz€²Aæ>ýÅOµ6&BÁ³žµ0ëKß­+\E,LÞP1ïMx$1)Î]NzÕ£ÖŒö¦ §gxƒ Õ‹ÈÙÑ ó´çë<@òZ¼¬ ‚:Mˆ¥q)sÊ@Ÿt ÜG) ëVø# 4˜à‚3žÔ\ âh71EÎÑÎ*³FI#|?v´4Q€€zûÓVÚÙØ2)\ — õ5CPÿ]«þõ^KT”îbÙö4!jE—ƒž´û§&ÅO÷±š•íÖHv}‰¡mÿpb‘ã\D7*«b¤uÅ6ì–µ‡=ñOû4®¡Ç–?:–æ2% yN”hªBÀa³Š[ÒB¡ä¨ëM&“fWîÔ“”•ܘäS8r-Ù£bsÐg¥6Ü–uħwu4B8äpœÀ¤d¸‰‘ ÿz€%šR÷F0ûqÞ– äd}æ^‡Ö˜Ê!¼fq•nõ$’ªÀï m9 ´óEå™ zzT×S´1©9=ꌭŸ,–-‚ « ‘àåIëE€’[‡…U¶¦¬Aõª7̦8”0#®eV%$ðZ,‰ ô¤ÒEÊœŠZ‘•®å’8ÎÅãš‹NÉF=rzÕ‹³‹WíUôßõ'ëT…땚2ßs½,ì¦XŒ]úâ‹·ß*ô÷¨^9-%V(OZY¸sžNÐIªë9‘Õ÷!ëš·4>oÌŽõJâ›"^[¾(ÕÁv‹zg“šŠy]Ê$[³Üâ§eaj›TsyÐÄ%1ž) ³BÝGSNç5.$@⦤v¨f”£„A–#¹©ñš©s/½A ŒP.&P=ÔÕ®0sšÉ•+p¯÷˜äV•¸?gLõÅ6"@AP8¨>×HcÝœR`t¤nx"˜³!bŠrè¢I’6˜@$ì)±Ë„€rGj7û¤j•˜ÿH“ëNÀhJSÐR)¢zLvQ¼{·¶rx  ³MdW?2ƒNÅ v¨ä‚'9*3íOÇ4t4ÔbAJðE#neÒ<ЬŽ éRd(ÉÔ­ry¯#€1QBd…ÝÌxÅ]ê9¤ ´\ ‹-¼Îùû¢¬‘‘HŠü£J.kl%ÄÀœg¥6DW б, !ä`ûPU ``.IüKÓ53¦mP)Hö‡Ê(ûSš1¦Öù’ÀKg2oÊ…p0j;bžhVpy÷©DR„v,7·¥0$*3.ê}hÐå>wc&iÉ+›-û¹½BÈàÊ -ÐÓ‘¶Ø²° Ž(°w²®FA=E32 Ì“éíSXa¾i”_¹nƒ¹   ä1ž´´Æ–4 3c=ªAíÞ¤drH±ýóŠ©+¼ojy;µ­ÐQ0oŒ8ɪ@YÎ:‘øÓ‡<ŒU)›y±³´‚Ÿg¼;«´tÍ hŽsU\°¿TV8=ªÞ*œ€IGµ$H[íJŒ «t«H±DÇwµ;Ê]ýúT.ÂR艒99 D¶ìÏfÍ%Ì eÔZ#¸C“ ^1PÜÎÍjÙŒ€Ý f6ß·#4áQ£¬VêÏÐGŸ–œ)éH 3JÐêW ŒÖ‘%ŽÐàš~i Ç¥•N úG*qé@ ¤f‚݉ɨ`™eŽ ô DL¦MÜtÅMÔPÃ+Šhã4 úõ  1ŒS‚âŒRa ryö§`mÚ@Ç¥;j¨»qVÈ Ñ¨‰ÌQ•  Å+ÂŽHâ’9VAòiŽ(e\O–ÐùcŠ{Hw6p(ŠT™w!☈­`ò#ÚNy«¥gÊ÷+$‹å¦=i¶pËUñа®§îàóK“NàÈ&€´«"u_Zl‹,ÅC®{æ­Aõ¥qn. W$÷ªKtÊYŠüǹ­RŠ1Å#F‡ª/åNàT•K(ØzšlÒ«Yˆ”–jÐÀÐs´f‹º˜­ÆG8Î)m®Æì m©Jî⚈±ýÕ4†J*)fHT–l{zÔµÖé3üÃ8  Fxäròç?¾•nÞF’-ǧji°ˆŽ?–8¼¥ ØSlBÆNê§r<‹¥”ŽZº™Ô°™cu elrÜÔh'yNN{ÕØÐ,aqU¼™ ‘Œ Ý%‘"y°4–ëæÇ­MmnÑ‘¹vê*+exå}è@cœÓöSÀ¥Æj•ÌÓ$ê±çm]Žzâ¦Ã o,ì늭k4’Æù?2ñVY¾FúU-=€ŠCžsMø.¥”²„^¦¤µ¸ó‹0TàÕ{PÒä€I¥ÓÈJ22Mð<Ò3Ó5VX'gc»}ªxUÖ0$9>´X 㹯ÔIÔ½tO“ÀïÍTnuOÆ´HÏϵ6h>c²2 ˜È56šìÈÊIÀ¥ºXÔyP½ºŸJ’ÍV,Åձɤ"Èb”ã±É¥Å!4˜âŸŠ(½¨¥Å(Ò§¥4â3J0Kš\QÖ€4áHE( Š( œšZJ ¥¢QL”ÑE%QHŠ(¦Ði3E (¥Å%-J(¢€ (¢€ (Í%šiǃŠJf(§QHe!J ¥ªÔP(¤KI@  QK@%-€RéKMu¥OCL –Ÿñó'9& ÿOSŽÕ,vÉï\ƒõ¥–"åYNzU\’ >kõíŠtò« À‚~´è (Åä9cÅCsG(0{И‰{qܑޠ'É Ï8ȧe´ùIÏZŽVÍSxf4}X:†â—±¨­Á >•-KOPQµ_Ž´H«"À rj[¥ÝlþÜÔ69q¸ÿ¨ ª¡@¥qŽj­Ã™!€zÑò¯<°IR;Ò·$ÝÊ3ÀéVAã5VÜ¥OM³ÝçIÜf€.Ó&—ÊŒ¶ ¨Þçk°€3N–dAaiômè­ŒdS±ÍFÒ¢*’pJrÈ®HVɨÔMÊI¥ 4„ ç½:“÷ wÍ#(a‚3Fh\¬a>è™-º;‚EL #gP*]§rx®.Uqß‚Žh^”À†xXʲF@j„Ãqö…‘ÀcÓƒW1ž´ Qq]üÕ²0E>•س £°©ø¨h¸ Ï5@ȿڻUóLò¶v Ñqކ©éT­y’+±SšºÕÛ¤„ûQq¥TKlFIPÜšží€²ê9/“ËÆÔY)\lzfÀ.ûú c4ð?*• ÿGò‹Q5¬Íüvhsî[xÀ<VM¾|­„?ZFƒÌ…bo¼;Ò~ýŠÄFÕXQ  (ˆÌZGä›jL¶Ìp Å7Ê™$¬a·t&Ÿi‘Ç p§4ËvÉÎjH]Íã¡r@梴fŒ² œÑÿ¦HN~aŠ™$òº£…ŸÎÁÕ¾òw¨bĺ¹Àn†n K4ŸÃ΋è®å²… Aü*xfY”ö àÕ[ D›Ž:Ó¬&_sš,;—sÆ+:Ûjß8nõ :Öt 6 Ýè@ÉUÛXÇ÷*Á‘#àžMTg0߃ڈ·=ëð ô4šmØ<Täcš‹MèçëD1:,ÁˆçÐÒXœZ¾:Œâ–çŠVÁüVvÍ𴥈qïRÅ6¥‰$g“E€±+ s“R¼ŒU;I,ÝÉÎ:fÞµ¹˜ÈA#4¬±÷±KÏj«lÒµ«I»$RE4ÏlÏžGµ;lþtsš‚Ús$GÇÏµÉ³ÌØ6R°ÉÅ(4Ôq"+Ž„S±E€3ÍC<ÂnïÒ¥àzË» „r È 5Tî¨^ê$b¥†EL£åÚ©›Ë3ÈHç9  *ÉšRÊ,±ªöQª¡‘zÅBŒ ó‰y³@ÁpAúRƒš¥ÛxÈœ§ZYÝ܆­]Î)sTvK)ŽA隺ÊvI¤##š IÍAíKœ“𝉼ð‚§9Í+€¸ëM Î õ§/ZSíEÀˆA÷ m6å\yùzÒI*Æ»˜àS¸ F(#pÆq@lóž Dn"R~cǵWû‚àJsW$W1Ÿ{¨êà9 éEÀÈk+’wnõÍX±†Xä0cWé§§q"IþÛ¹²5¢;SiàqHaŠJ3A ¢š)zÐæŒÓiE.iE4ÒÐÑIšQ@Q@Q@Q@ Š(¢€ (¢€ J R¢—PŠ1EQE&hM%PEPEPEPOZ )¦“@ š)3E!•- ¥ªŠ€)i-–RÐIšSIL‘©i’¶Ä-Œãµ8 éG½S¶‘¥¸f#Õ$¾àD§u§ajBê3Q@仯Nvž(¹•£Ø«œ{óQùîÎÁN-µ71À¢JpJ°SÜБÒÑŸNh=)0—rõ¨íâòP®sÎjP}(Ïj`W¸R%I‘Kc¨¦Ä ·"R¥T sV‡J8¡0*Z·úLÇžOzK9@Ç·­à¸šg•íûFê."´ò™ , [ÞtÑ#J”ÚÄÀü½i²Ú‰±Ž”ËÁ˜a§JžJ<ªpJÒ\[»ªa†V¦Úd€£òHÅ=§¶AlŠry&´;yªŠfŒ¬{x¯µ:æi#‘BƒZM µÁ¨åuŠ&cÚž9ûT µ¹Ç894‘­Ä€¡e[¥JóâBª…ˆ©ãûõVæÓÏpÙÀ %µìéÛŠ§" ¹œ'˳½_‰v ^¸â«d‚v’1¸7P(B ¶/ þSs»½YŸfó°üǵ$q<·>s®Ð: Šxó(Vm£9€ð™Nt£×&²Ø¯¦X¦­ÝÜm\š[‘ÍÃÅ2'2B¬Ãþ«He8n]®ŒoŒJt÷~\Á u^ÝÁÔ›¹§Ëƒ¨Ç)Ø £»fÇB¤ô«$óÁ¬ùÎuèjiÒè9òÈÙéE€²Üô¬Ûó)+¼a{b­Û4ì›Ò Ôù1PUI·ã–©‰tU‚px­(¸~•˜b%° Ž”Ð­\­ãÆ>é=+HqT-£JÎ]ÏÕx ÍKêcž)GNiG#4 kd-9zRqÍ8cméJQÖ‚)Ìšræ“¡§)€Ö8•E!ÍCúP2xî Ïäɂǡ*Ð5S …üÌyÍYlcÓ˜ šeˆ…?3€TBí7`‚8"£¹m·Q°äãµ,Q—º2•À#¿z,‰]DeKXqQÚ¤q¡Á¹5…Ž¢ã±§Ã‰påðvÍ0,y±÷ÇôªA^EP´Œ4“4û&eI¹áiXD÷¡Ú5EÀ,y椎1xôª9twl–'Š{I)°É%H4Xfjaç­RnË“y+ÜRÉç/˜í&1Ðf€-ÊOÙÜŽ;T6 ÒA–byïNI ¶LO\TV.͛Ҁ.íúÒHŠëµ†G¥Pûl»L™¥]ŽQ*Å-€lvñÅþ­qO”Ð)…Éè:ÓcH»—‘UïÌ«Ú0½Í:IJ‚=ꬆ`$ #`y î¦ø¬¿wNC²ódg(h°f•†æçÚ––C…9ªr—ØŒÏéL‘ÌrÂápÌ>lw¥`5;sFF8ÅS¾‘—ÊS¶7})—8€Fa=O@iØ ÙâŠhË{b”Ö zÒ¨ëJj9æFO¥8*¯ÝP>”V]¤õªÂð‚ ÆBžõaä ò1šz càJ¡ö‰DFS´/aV`›Î„8â‹¿fˆ6íƒ>´m¶â¼úÔ ñAÞ1šÍ-‡Ú©ÜÚK30: ¹‘Ôô¦££’Pç&0Ee‡i#v*ƒió3ßÎkKëKšœñÜ+? wÍI|³1Cà;⮜”£ž†ÀŽ=Â% ÷±R/—w¤1ŽIè)Ê8¥4€úК'Z(sKÚ—ƒÖÐã+@û¢–Š`8zV9aF2iû{š:-GÉ5!¤ q¤¢Š(¢Š@´ (¤æ–Š`&y¢Š(´ (zRfŠ)Ph ÐQKŠ1@'zZJZB)h µ%)éI@Q@ ¦ÓȦ‘H¢Š)Œ¦)i(¦…Š Š( RÒ Z(¢Š`’–ŒPHÍ ªÃæýih CTaqŒ IcYÉÅ>Šc t*@ªâر_1þUéVè§qƒŽ:t§´v¢Êk°ÛN¥¿6ÕñÍ]Ç4Œ€öªâ+ÎCXü¼ð3L¸uû,h$àñÚ­lv6úSÚ28\}(ÖbLóqKpTÏzu©$·YX$Òšö¹—x|.ƒ~J *4ÌÍ)+¸çƒéR¥¼©p ŽôyrÃ#yC!»zSkmÂ$Îj| UYL«n0~~ôûYZH?^•,dýꊒ·²m«Ý³T `o%9¡'†S"3cO4β)~€u¨¬ñ¶sèM2Ùso Î2qNÂ, јŒãúÓb¸9Lp;ÔPIR'8àúÒÚªýªRCE€·0 äö¡ºzU8×Ï–bÄðx§BìðH7§zV<14`峓‘Rwª;›GbÜŽ†›Óº+uÅéät ñP=ÃvF dæ Âu<`ƒƒE€lÖÂllT¨».sZJGpˆK @C-À‰€en{Ô»”¹€ÈÈRöe•)?xu§]Ǻ8ñÝ;myèx§9ÈÁD?tU{[†šgRxÏ€´y¤éKéš1é@ N„=é@hi6äç¡ö¦Ìå"f@¨í¥ia ÝO¥HÑ#•õ¡£ »)ݨ¢àF¶é%O`YqJhSØ scâ›2´WQ¨fç­]–$”r9õ[ªÈ%›Ôš.!&ˆ™–Eáé9<íÎù8«#Þ”ñ@ìSŽÖHL…XÔ–pIýøÚÕw9¢•ÄQŒ=«2„.Oj'µ rXô«¤qJ:zS¸ìW³fû>Ò¥Hª›r%Y'Ž+O­&(B)Û8K7 œŽ)–Ÿ=¤±Ž½ªø AJAàEÀÍ„À"+*üËÚ®«¤V¡ÀÂÒ•­âfÜTfžQY6òÑp#¶¸[…b Œu©€àÓ"! ëOÁÁÀ¤2® qjx¥²âÑÖ–æÝæ@¡Æ=è·‚HFÖ`E1ò|ëd%­.¿;¸ÍX’K61zŠh†I¦WeÚ©ëL .¨T—©ìIæ³|‰ÐT·6òÌß+àzT`œ +Š@OzÈè‘•åú{UWG´‘YÆå«’Û»ˆÙ~úSn7ΞX¹4À³ù‘†{RÓ6´P£$*+9ÚU;Æ5#,Ž•^î|:óŽÕ`›4’Ê©f8¡œah­dÝ‘“À4ëÃN@r3H×QÏ)i Ú: –Bn¬˜ àtª{5<¢ŽµbÌÆmÇ—øæ˜®žFF@äf›¦«,LH À  Ý'8YobfÛÎ~•d‚1Y×?è·‚@>V#-Ã:JH\äuâœÓ"¥†}*;U H-ÍW± +Jdäç©§`/pÑžùOL4¾ÆfÇÌ• %Aâ“NÀ’o÷¨¶€]n´åƒ“N©®»€pMEm ÀŒ·sO¸Vh›k#œŠ­e,’Z¹vù‡ÓæiEgÚË<Êà7 õ55”í(u~JœP£Òš8»Ó»Κñ‰cÛ»ƒé@’ë}ÑÚZ±#ˆãÜk:ÉBß:Ž‚¯]!xp½sšb!7Ž£sDvúг«*SÁ¬Õ¦RÙÛŽõ.–ÆO;s@Í ŒQh FÑHÎ8§f˜zÐx CJ)¤æš„䊒ÒçMŠ( é@¤Ï4¸¤M%-%QE0Ô ){PE(ïE%- ¢Š(¢Š(¢Š);RÑ@ EPzS <ô¦nh£P2 ¥¤¥ P( PÑE ZAK@QLŠC@ 4”Q@‚Š( Å¤Í-¸¢Š(ï@¤‘¶!oJd“$gäûR¤¨ã r}*¶Ÿó—sÉÍL Ûpd\`õ¦À˜Rhš2ÄéO8ŸÊ @æ–Žh’©dÀ84‘F"@´ü{P(€ó×¥3ÈŒt@3OÆhé@ˆÅº`27zTbÔ,l¹<ÕœñHzQp Š#»d(â¢XdŽà•?+ÕÊ;ˆ§óÛHøBÁ¹È¤@a¶‘˜ÏÚ® .8çš.dT³aƒš›O+öp3Ò§Ú¸?(怊£ úQp(ƨ.e¼ñV-V [ÊÎ3Í>Kt˜‚Ñޟb!…\MT½%¥{VÇZŠhD¸çr !_¨< qVÀW=…Sš äe$ƒ·¥YŒ¹ŒïPµ6!g}’Oµg£ˆî”¯J·9s" ™N梿_¹±9ëÅ W'ìA ž*´2Lm¼ÍàõïR2Z1ç" ÔY”`C})Œ´—­¼Ó×Ƹ‘#YFÆô5xþÏÁ€y–è­"„„L$im¤,»xãÞ‹ 'ŒS݇Ù[Æ8Á¨`mÚsëƒ@ÉÐ(_oÈ3L»¹h• ÅÎi"½—,F:€h¼m¢ÇëE€¶’ƒvlù¤KˆÜ€^™ïPÞœZ S€HȤx]ÄG*Æ0)Ø >d`à°u¡Ð‚A¬ùãÿO@ÝÀ©¦€Co&2sÍ+kzqóiÇ©³míÚX£`psO’C%ÙBª‚‹¼O)j—™æ8`Á{n«‡¯JC @=éÑMf¥A@ÀdRâ©}¦WV–9VT §ƒ@€ª°ªŸg’vŒµ[=iXÑq­íÚ4voõÚ£²†X¥o1x'­]àp(¸% z0Ïj¿Ó­4”ˇ٠HÇKOlG"°>µ }(Hf€3¬¤y»ƒuô¥ÓØ$#qÏJÑÂàð)@À‹NM=Ëo šµyQÝÀîiÝiYC¡R2 eÚÇûžÇ¿­jä(É8õYl¡YÁõ,±‰cØÄíL 71Í(vØÁäúÔÖ³!”ÅÜé?³b=…Imh¶ìJ’sEÀ°ÄtÈÍ9EQÓ›²å¾Rjê. æÄ' Jý(eÉ│G4@8Õêiý0u céh¢€ (¢zZJPi€R_zJ@QE0Rf–€ CFh4 (¢ 1@Q@Q@ š)qE%¦q@i¦œ}i´”QŠ)T¢S…1- ¥ Š( ¢’–€ (¤Îi€QEG4«O=…$¢£·c$!›½!ž0û æ‹%- çé@<Ö€œ)´£&€ƒE€i“ÐºŽ¤S¨  šw ã<æ§i£ ÊÇinÁÙ¢}™ëL6¤«³>æaLD2ìXã/œâ¦¾í'9Å1­å1 ãå4ë‘#´xN'ÀI7Å4hŒrãš|NëvagÜ1QI)7(å 1È¥†@×ÅÇz“Ï“ÏhÀö©b”»28 ËUãeƒ’p:f–2^ævS‘‚(°° „¨8ÝOiã]»›†EU‚2܃&ÑŸšsëïE†YY‘ŽsO%GÞ ©:„»ˆŽ;R*‹‹©7“…éJÂ.wê)ET¶rUÉùOo3@Òáh°ËäPzTvòy+¦žG4€QÒ ’éb”!S“SªW|ß%4€±=ÃEƒå’§½L¤²ƒÓ#8ªÚ‡ íšš9Pí\á±C.¢ŽqF) ^´„RÑ@ Û(Ç­#²ª'T6³ùå¸à(| R…ƒò¨gœÅµ@ØñHghÙV@9ô¦tH‚j©òþÅ‚AsÛÞ´qUQ¢k£–29Íl›í$zT±Â±FU_Z&‘`‹{tö¡îc±8n”ZGÀì :h°„鎕*²º†Sii\dÛ0˜Ý·ß)žD»”4™U<*ÑÆ)…ÆHüM0)ÜA+\,‹Œ žà;Û^I.xà‚=©pá@,ÖDQŒß4ÙÕâºó‘wàUÃ÷ˆ\ W^ $‘™ÝJŽÀõ¦AtírÑȸªÖ^õ’MÉ‘N)2‘‚GJŽe/ÔŠ—¤"Ê6N‘DË'†™tÁÌR„‘W^Þ)YFiZ$h¶iÜEKü?“°äçŠ/8š §[H‘èäZ|¶ë1]Ã8¢àW½Ú&ƒ‘Ö“P÷ZžKHäpÜñïDöÞr»éNà>,N9¥Þ­¬ G#d,NêŠÞÕ c–Ï5 \A=½h >ö=(›õ)5:”S ë@èæmp'Rq‚ K±yàÓc…"AŠpyëTnyÔPzUÓUÚдÞfþ}(LPÁHûäóM½ùc‡f#[É!Ev½È$ '®)õNóÌÚžVqœqS;ºZîQ—Å)È¥ªÖ“´èÛ¸ Õ€@¤W‘‡„ç·5_M+ãÖ§»p!|ñ‘Pi¬6óUÐ_ÆNÉò½ª1'ÚdŒ>o4û¼ý¦<ýÏëIxŠv²#B{P‰‚Îòž¬Ø<òH‘¨TÜHæ¨32Ì›×9Å+¥t[ôªcd¥’áGlU›¹Dvà•$7jŽPh[nÒÀ¸ *Ÿwµ °fk`[žÕd⥡ˆfË .Ï Ücmiãô àš. |(®9ÆjËp¦©ˆ™îïJ¹ÔŸJT¿;¬ÎÑÞ–ÒT6Áwr«ÍZdVM¤d-¢Œ«Œõ§qtæd€àäÔ×âd‰gÉíS¥´(Û•4³[G;aÈî(©?n“qÉÇoZvŸŸ´MŸ½žõ2ÚF’\ƒüéZÐ ÆûIëŠvÿj¶Þ˜«Ä…ê@ª‚Á–Q"KÈë‘Ö‹ëif c9Çj³›ëN8ܨà–Vê*M¼‚{R•r¥/B«¶êy˜ÚËRÅXàäÔwÃñã©¥ž)g–0…S’MP‰.’G•Hl)Æj; ]÷£6qÒ™t®/2ÊÅ1Šed¸e!†îœP£šqs$AÉô«6o#©ó:ƒU#•cÔÎvžõ¤1ÁƒÍ $Žô \R†Ji-™£4QE€QEP)M ¥¦QE€QE’”ÒR¢EQEQE”´è¦šu4Ò¢Š(HRÒ p¦KIK@Q@¥¤´QEÀNµ‘$Ÿ}sRÓOž”j¢¢íƒÅU{wA‚¤æ®Ï·j1ùúSL~ΡíéU¼¯ô½¹8êðã4¤dçÐ"¶+ÇSÅ%¢•¶sV1ž¢‚8À¢à€($âMÎ=é!”m—}Ó sÔU±ÂŽã%ºäÔpÚ˜¦ß¼¬8*z*„RDVµi–ê =¥o°«ƒƒL),q´!r àÓæˆ­š çš4Ó¼‰N­Œàb¦’QycÐzÕ+‰ƒùAAc­O1ÿIˆ“òã­~ÔâEVÓþÐþSjkõÁϸ§(΢Hì8¢ÀH³«ÈTg#±§¼±©Ã6*´guìè)±‡•e!AÉÇÒ‹ ¹¹G~½)AÈíùÕibceógzŠdÎzžiX !—b¸4˶dò‚žIÅ6rÑÎóÔRݯ‡?Þ¦ÜÈñ4{O^ X^¹ª×ƒ3B=ÍM$Â2˜öX {Ð*8¥ç±E<äœT€;ª.æÍ69–Q”9žÃ÷l=ª¥†<·ÎÝ@ ò(Àd#׊d1“‰É  (l„ u£88¥ÈÎ23@ÛDbC¸å˜æ¥Ç<Ò‘@¡€ȸ`¤HU@úSù¦HÌŠJ.ïÆš’0ü0SR^”–·u9\`ÕH ¶ íUå¶Ê'ŽÕgµ#:¢üÇÙbǰãÚª½¤’aZA°vqX2åO^ô¢˜†$B8v'¥V³Žhäs&qW4„Ð7J§xnö"¾£½\@JR9¤3$‹B°8Ï¥Y¹ˆîŽeÛÔUÓÉäQŽÔî#>éþÒñ¬`ñ×5uFWÒ”¨ì)JçÔ\cgŒISÞ¨[i<§û¨kE—wÒ˜°¢»2õn´«¨º&ì4_%zç­]hÄ‹µ€"¡û+2~¦‹Zû! Í[s²<’¤žÙfÚ[9M™NƒÖ€%‰Õ“*sNl9¨m ònìÔ’‚Ñ•S‚i §¦Œùƒýªe°ËMǧÛC-»rsO†ÞXšCCô§ ˆ¬_kI’vƒR‹ø³ŒšŽÚ b‘·‚jË[Âx((;©£6ù#vî•M¢’ßk¹8ô«—6ûãP˜EG#É$~_–wƒBÔ3 X f¤'Iä@p*+[—™Ø8éÒ†2à95OS9G½\d ¥© ¡¡‚T6;s–ÛÓë_ô{BòtëŠ}ˆíÓÜåMÔCy3Í C¾Ù¥£!z|÷K ©ïP^2› WÐb¢¹ÏÙ" E€¸—‘»mT6·M$ìÓ5”îIZ;sÅ·dÍ!ŠXËNCzÕºB)\ýÖÖ'8Á¨,£*Y½ð3V©¥Fw-v¹õ§Ná®ãç€jáEëŠkDÉPM;ˆ­pÀÝÄ3ÐÐÙ7£œpjv‚6;Šò(’ pá\×#¶ýÄžj|å„G Üž¦£Óóµ·óÅ&Æ?)ÍP·}¼“Ôâ®ÈO–Áq’*¬+,Vì… '¥c•Ì–±ä [yl‹g$ ¶JÔ°¹ŽÐü™ ò)ØD–Ò4Œ¤89Jƒ2ý¸àdúSáÙö¤0ä÷‡¥„ÔIn˜¢À]RH†zw~* nR g¥I‡PGCJÃH'¥@.Õ‚@i×ùcÒ¡³À´>˜æ„§ªsܵXóQI¹ª¶'ò‘Û5ºI5»PI?xÐÀÒÛÁÎj Ð>ÈùëE²¼hC’= §6¯I–<Ú§­X8ÇÓ­U¶È±N:úUrÆ9c ä–ûÔÚHqɤ#½j¥ü’E°£qÜRÚsÒ¢º˜Å e£ˆÌ&†SnsCN%RûFÔ=éØ á,Ñ+?Þ4âp}ê%ºSmæcØT/tÑ·ï###"‹r kœ\yJ¹õ4¿jEY”Ý1$Ž9WüŒÑ`-HGçP¸Ò_,ç4ä¸I$*:úR\àdžGÂJÄ'8¤¸p¨ÈXaÀ¤¶¢¸÷47^¢”gÁ2âœÎ£ˆéï@ 8˜æ”Ü‚1PÇp’ÊÑŽýh\€qŠNj9 2¾â1ÛµJJ 4Œ‘N#?J1Å1#éÍq֔Р*Ž€ÂŒŒuëTã–Q{å;dzSè9¦¼jø œ š9¥p±¤y(¡séJT:yœ~îj.’Wd‚(‚Ê=àäàvÏéíVr61Ð Ÿµ`拈d1ù ³vj¿Ùf2+ã'5pšFàdô¡0*5œ0—x8©®aóá O#š•HaAúS½)Aí&‘T´€”è)בM(Œ*go$ÕÁ÷¹£Žß¥+Nî'’Ýp9^Ô­$­mò¡`b­ÿ ‹Ÿ ï»GHÊ>j}ÝÌ‘\ƒŽ*÷§…HÑpNW8ê()ÍɤŒP1ÞæíI·=éJç­ @æœâƒ@ š“F=h"€ŠwzBsAë@£¥4µ.s@ #æ¢N€Š§‚¨94&x¤ÚqÍ.)O4Öè)ßÃHzQŸ–€µh+‘ƒKHDQ€)94ÛíÆй'Ò§­-3¶ÈöABTóïM‘\²:ÂUW­iö¤Ú1ŠwÔ9Œ6:Õö(ç óÅhžÔ»Aê¡¶øN;¯J£j±ìu•¶àôÍiÚx¨¤·Û,€Ñp*9Œ[~ì¸Ïz{#M$M!U êh¼-ÕTasŽ*;ØÑ?,õ>´À}ø%â?ÃO{pϼ¹# ©|¯6%Wô¦Åf±È{6:dÐÔÎ@Å,j¦G¨ÍLÖ‹çy˜jÙ•ŸÍó3EІvÔ… @=iÐÂèòo#gÓä…üã,lŽi#†Oœ³Ì)­¸šçj±*EæF$|•ÛM´‚XI FÓC£­Ù‘6F9£@hÛ¤•GݦZÆ̇Ÿ”ñRÃÑLìÊ0ÝÁ¨áóc¹s哸õíL¹q|ªá»SŒ5ш9UqM”±¿GØØN('Ƚ.AÚÞÔø&t¸hIϘ.'k–ˆÅ)–í§ Bô¦ÄGöƒç8  ¢¹spÐÉÉ•a¹aÎ PGPcØÖ&2£ÌÒNcˆ}Þ¦¢‡sjD¸ä [ÝÜÌž3DN ì1ÀÀç­0'šàFËœŽ”°\ r¤muê Tp[Pe$¯¡© vÛ!fÇ"“@\ì+:ЧKš¼8nzU+VòcÒ„Æž4;YÆiáƒ(*r g<‘Ÿ5‘K0O¥M§î0òr(°|ôJ †žæE?pp\<«c­féãý!ÇqœÐ‰a1:<9<ÕÅÆFz¥5ÓÂÊ®˜ÏJ5e ±_¥+¶ÈYH´šd²€ÀË‚€µOaQ5º4›ùÍ5nHp$] ñSõŠb,bHÊ3Q-¾ØŠ3ç=*|š(¸Ê¾D­µ†ÁNž72¡EÊ­X§QqÉv¼V(qI#§+vj¹ÔÐÝy¦(Ý_P,>‚ˆ–3,Þcm9«{T…¦IJÀ°æ•À„²¦ÈãMÙäf–Ü“{.xéÒ¦kd%qÆßJjB#˜ºœç­;€Ë`¦òbG–@3Íé»ÿ!ÖfxØÝsIo°y™Á'‘F€A$~EÆÝ“¥^†?-qœŸz§,r:uÌ™ãžÕb9ŸìÄ”ÃCÅ*­œï.ï3¨«DÔØe+ò|‘ëš’9ÈØp¡¨õÑt@X:zñTó\¥UaÁèjI&HðSU/¹–cS®ƒY" •Š,"i.`2'4¶ÓùÑnã>•[rI§»…Ú@¥SäéûÇR:Ò°<ÈËm ô¦MËG8ÍTtU±›Ö’áËÙ#ôaÇXeôPªviÇõN䲨‚¤‚ç4Ø#Ÿ1¾òW¸¢À^ik8ÌÒ¼™ SÀêÍœÆh¾aÈ8¢ÀOŠGV*BðiÙ½U[‰eÜcA´w¥`e,’3«œí5o§Z£¦’ZV>µ,×`;*)m½HíNÀYÎj‰Œ~ÒE>Vh÷-C¨ôS@.ÛˆeàŽ”Ñi œíƒ¥&=©O½¨;R`z~tdgê;‰D1“ßµHŽ”»W=Ci1•0Ü8ëšž€#&ýÛA5-7½EG$+!Ž}i‚Î ÁÀ CSô¨§œCÉQ@ =ºL2x>¢ˆ X2rI>´ø¤YSrô§ÑpsÍU‚Õ¢œÈ_ƒÔUÀi Àɦ3fãz«ŒsRZÃ$«0+Ú¬† 2¤¥® Z¦ñÉÁš%È=E\£ð¦|ÑÍu"¾Í¡}iúŽã RqÔÕÚ\Ñp!Œ¶ã ƒŒU[UŽé0 ïZša‰IË(?Z. •¢º/ʧ¥ZûLxLa‰ÀÇ¥NªôÅ4CÁEš"­ô‚NÒ§·XDÌ"ÜÔ K÷”gÖkíP –ê7œÄ"¬(ª¢Ò5›ÌÎsVÝ#'&±ñ©š—R?¼‹žôå±+.ÿ4æ–{34‹‘Šw=D€±mëëM½Á[vþ#ŒÔÆÍÁ‘ò ¢êÙædÙ€«Ú‹€ËŒµÜ1Ÿ»Ž”ËôU–-£=X’XÇ*ãzö¨n¡¸‘‘Êço`hòà(Ï¥(ûÔÈYÚ,²àúU;if7lœf•†hàæ–©^Þ< ‘ëVã`È­ê(—D­´˜ô¬û Í¢®AëZS.ø™}EQÓ™bÁ¡¦„Mwv¸<ÕÐI8ÅgZ‚÷®ã•ÏZÒ=è`Aquä$zÐoSʵ°i׉æÛ0Ç qT º$?Ý94†iA0™7(#ëO<H(àb‘›æà‚(AKH¾´´QE€ Zm(  QGzZ;ÑIÔÐ÷ QE ÒQE0 (¢€ ÑE€) -€ )@¢€QKI@))i(íHh¢ ÅìQ@Êt -0KH)h¢Š(¢Š((£½é€QA£4(¢Š(¢Š)i)h¤¥ Ð †â=ä0ÏTÔÙ$XЖ?€¦€Î‘Y ßxœŠÑ>Rg®*—¤É!9tUøÛr+tµ6 $O“#õ¢dß n*Œ@4*€Û©Xf€¥ÏçU&fInOztR4w>KÜg4XE#ý±£-‘V‡Z«üH}*ßz Þ›#ˆ×st©É¨åx†CÖS¹C†–šHP£ íJg¨ šS͵³”îX—p罟ܿҀ*é€ùMõ«„`ñU4ÈëItZHNãÒ†€»QÜ’3)Áämè§¾*;¶Å«ý( 'že%ŽTUÓÀOKÈ€ýjÌÒ¬QcÓµ  õ¤ç5OíRªy­òÍK-ÚÇ É· Ñ`,Qš¨o@@ìŒÒ›Èò8<ô&•€’â_""àfŸïˆ?LÕ}@†µ8éÅóF 'uíNÀZïAëA*â@_Zj:>@`iüñ@'ÐFväS†;©¤GV'#ÔSeaå?µcíù»3óR$1ÆûÔ`ša¶S?š Áª—ÿv<úÕº«sÊà©àtÆßÝDRE2Uò¦‹iÂz⤵ƒÉFÉË“Sf—Ôù­VUðJ.k°œc×—Ê¢¶Š–K`ÈÜRId]Bù§ŽœS¸ ¨qjž‡³`iàã9©ÓZ<±*oû£Ò˜m%#ß”¢à"í{HįJlD-þ#©'¶`c(2t¦,R‹µ˜¨çÒ€s¸_ S‚Õ"ï¶I™Ø‘Ú¢¹ Á Œ*ì±™­H<Pxã2ZŽâ3NÓÎÛSÎ9¨ÖW[f‹aÜ8¦ÚJÙƒ¸zÒ-œîæ]ìHSLóätyD˜ xµ›|².~féO¶h££˜ À÷ï@‹¶²ùІïR޵³¯Ù÷íÚ=*;k±4¥qŒRs¥Gqÿò»Rœ†ç‹i>”GLóëI1Æ¥ž¼Jv—÷$ô¤¨Õ}±T"ÒÊŽ0:R$±<‡.*½Á+Þ2G­€º”˜ô¤2ÛȋČ£=«?åþÑ1j|ϼ”¸È^5.§Ó F’’E5‰ KÈÎ)ïR l™ëAS»b[¥Mg‰ n¬hÅU¿b¶ãœdÕ®ùªš‚–‡>†’ÜdF °\˜S­ÇFëš‹,¶‹"603Òˆ.$x]ØŒjm²YCm,3KÔ{Ör+É6ÒÎNC }ǘ‘£ï ô4¬2î .8ªŸ½2 Y Ï4ù'o7ËŒŒÎh°(¨Á03 SƒŠD¼C·ƒ“E€³ŠAÖ–ëHy>ùÛš•è{Ô7ª »>¦Ÿmźj`HhèdL+`ç­9XÀ<94áMh’Lo§1ÖÏ9¤i D~EÅB’\dŠõ¦ÈÂ8ËžÔ\¨Àt œ7ØŸ|añŒúÓ½è$ÒŠ;Ph¤óJOQŽ)@â€[å§!ÈæœRŒŠLüô1Ë₼æ‚9½aªJˆ†$T-©;SFq@ 9ëAásIJzb€~\Ñ“ŒÒòàP>æ (äQÎ3HÈhCŠČ⻌ÒdìhR:P'¥<0Þ7Ò“ó@ › ÜIŽi™ÉúP¢íJsNíGjilS4ŒµèzÒâ‘OÍŠ~(5æž:R*àÒÿé1Å/z †)3ž”áÈæ€0)€ÀÇ8§ã"˜8sRŽ”Ò8¦àÓÍ!â€(>” ŠBy  QÐÑÖ‚F@¤zÓ…%-0“8£éH9 œÒ“MèiO4f—Šn8Í/8 -š3ŽhêhKsŠSLÛ–Í<ô¤t¥½4ä 8¦<⛵sÐsíKœŠ:@4!~”dž6mÅ5(¤4ÀM¿.1ÅG ¬p¹uš”5(94¹æ™çó§ÚD2G5!·Ff8°D!\‘EÀ~åÎÜŒúRT¥Œ¥Ú°läô«ÃœÒñÕªº+hä ÜqRß#¼[QIîqPNI‚4ØÙÏÐ2kÉ<²ŒA'¥>YJlP@,3š­xKvã ÔjÍýŸ <ãŽiÀÿ §'oAE‚ãþÕŸ›Ë;3ŒÔ²ËF ò­Ò ÈþÌ8ô梗'MLúŠV —L¨‘<Ô‹è§a–I‚@>™¥Ç5›ó¼æ*ÌsÆ;U»2æ¼}éX ñ‘HÀ#8¥éUW¸¸tF*«@Ä6ß÷­_5Fo·¸s–­Xi¿zbA–s@ö¤¡Žq( Œ2œ—§€Ie œ’zQ‹µ.£.zf »wŽá$ÆTS¼Ø®€àƒ‘š»ØRÓ7cÒ”²ççµ5åE`…€cÚŸžj ˆ_œpëÞ¤ˆƒwÞ 1©ëH²#œ)Ž´ÙQeùqUlWmÄÀtS°°(íÅžÔR¿ÃJ  dät ÇzB9¨®® ¸S³ в—·2ƒŽ;8ëIŽIªöS¼ÈKã Õ‚y¤Žii óKšC×"šp¤ riÙ¦3MÌ@–6»—‘@õæƒ÷©Mhiïf” 21Ú€iǦhãÒŽÞ´ûÙ5 8¦c@<Ð@4„f”—Ó÷©M"¯=éÄP:SHù…;¥3¶M?æÞ—¯J6ÐÚ.)pEñ@:ÓÏJjõ¥Í&8 ð)ÔŒ8 ä‘@R)ÀŒbš¤’sÒ€Ú“4îÔÖÆ1HnÔà>ZÈ£L§$Óˆ¤C’iÝéRJN(-Å0¹ÏJUu*Ò¾hÝM KGZ@0¯­&1Jrµ‚(íGðûÒž”” ñ@&ô¥)€¢“<â…¤?z€Þ—¥ ¡½¨¥Å ¥ï@¥K@Q@Q@¢— R ÑI@Q@ \PŠ)h=())E ïE-”bŠ(h¤Í€¤)i)i””Q@‚ƒE€Š(¦EPŠ£wÍÜcÒ¯¬ö¥¥ºšbüˆ{dR^ÿªÜÔÓÇæE·?0éPyrÊɽp˜‰kI—Ú@¤Ý'xÉ%{M¸Œ‰ÒU]Àu’%inZB ƒÓ4¶œÅ)îIÍ.žr®¾†›lvE('K§•©¡‚.T7@5»dsÚ¦¨®OîO®E$2­“l’@zÔØ™Úï»ç¤ ¥æÜ}ê’ß›çª{·N´…œàgéUÌ’M9HÛiÐNÒ#ƒ÷“­HÉñAªÉy¹ 8œSå¸ ‘9ÏJ,㥠<ô¨­¥ia O4õ‘K ¢ÀI¸ãqéšp#=¾”Ù"Iry•Và‘y3Ö€/Hi;Òî€LàR2+˜M™#,¸âˆ]¤…\÷¦¶.Ò¸ù})±A{°>÷­,’ÓsSã`Êw\Ù¦OÎv“œS® ó } t?z;æ•À¯%±’BØÛÞ¥… ǵ?E©£ècýÚ‡S ƃ#9«Ÿô!Ÿ–¨EK|¸Ûå'žjìr‰áÒ«XslÞ¹ ÒiÿzAØMtšQÒ£FÙ À‘Úž¬£°ÒÇR“JzÒ¨Á  Ûù¤e+°ªç©ïVí3ä 튯ª«ëV­ÏîÐz lEgšIîZ8ßh^¦î³´Ät5^qåÝ…·¤ ’ÍÄ“—õ†–çÈ·sœqU¬Œ[œžO%ãþà§R}*9KÈâŒRk‰$I֢〭k™ìGGZ–äh‚¨cïP‰~Ï8Y#PqL äRRäB}i´Ù%Xc,Ý)àŠ©¨œÂª?ˆÐðʲ¦õüœÔV›D*ƒ¨Ô½ù¡€w ðj'Ž)B»`šwÁÞ1@çgž´™dPi¡û¤¥!ž-ûKóO¬íA@ž< Ö´p>”wâœ:ÒŠ;š@/J9¨%Iepÿ(ê*]ß­0 rô¤Å*Ðh4­ö¢ìÂ(Ëmêh°‡€j.`@0ê J:P¼Š^ôƒ­/zdRŠqéMÍ*‚(UÃJ .h£4ië@r(ÆzÑFh¥Ï¹¤< 0q@éG&Ž(ª0)ïqO£ Z( —éOJ)h¢Q@Š( ¢Š( ô¥ Ò))h4” )GZ((¢ŠNô´( ¢–’€ƒGj &h£RQL ¢Š(Ph¤ Š(¦fŒÑE=hª2Èï:Fi¡Ï$Òdœþ5^ñÊÂ[ŠiÄ3FW?7ZµÒ“ñ¨e¬Ñó…ïI Í,®?„t =ºÈÄò3×4j¨»TSÖ5Ë~ðAP!ÕÄo"á;õ©³@4†W(DÂB2@ä{ÔV¡–é‹!ªîh=iÜED" §ßÀn†’|é:úÕ²ŠÃ 3õ¤*6íŠ.8Fl\Ž=ipžMNÖ±í#ïG¾AˆLÓ¸ ˰ùG8¨„RˆªàõÍN° Ää{b‘Rqµ qÖ‹€’eocžœÒ\sô¥píz¯´àqšdÍþž¬x  Ç¥ ûµ^{¯.`›r§½Y`{ÒÇü{¾}*½¼â8QXzÔ׌³Z®Ä}pzS@[šXÐ üƒÒ½,öª—gý /–pÞTE0Ø­Ñuò˩șo07ŽqPBQ­¤*¸=ÁíE™Ú>ý)X yÁ à~42ïFU8$U(ÓÍ¥$îíN»ÙÉE€µ f8ö³dZ~j»Í ³7b¢Šæf •7µõÅW’àù›"PÄ št7U$vàÑ`&¨§˜B„•$zÓä`©–8Næu{V4n6‡CNÅGoÄO@´ï9áXI ÐQž(,£ˆíH­‘Óñ d8éMÎx4¤dT#–f¸h·ãÒ€/ãõ¥ fª¤“ -þeõ¬&˜ ´nÎ(Ú7g>´î´„t¥p$jÿyA>´ª¡WhzR÷¢‘¬(„í\f¤Æ(ïA DÛ$ø-ž)ËlÉ¥=i$tw9À§p*ýŒ !€=y©¢‰bM«ß©©xa‘È=)ÀÅ +ÁiåJÒnÎj+ÈÈ‘%×€*úÓ4v†HéNà9IÀÏ¥8œr) ÷¦ç§ëH —©%ÀQð¼Õ‹p|µ 0@©©éKÖ†ÄgÀ|‹‡óN2r  mkðñ—©"®²#ýå‘#TáF)Ü ±.ìd<òU³C瘌}ëO怋Ô(Ú‹N츻B§jÓu$‘ãê*쑬€Å$pF£4&e™mÕKç¥>)a½zRMÌ»§­,0¬IµOâBå@*Œ× 3oPƒŽ;ÕüsÍGɃۅî¼Tì¡—j#EU€>”À£¸‘el±Dyg<óRIo­¹Í*D±®Ô®>JŽÙÅxû Ž: žâ!,{MV{I [<ÌÐ@Ã`¸=p) 2ˆ„FEJ!/må¾3Úˆ„ë…r6J`ArJNYÔ•#¨íV­HòW" ‘gÆÍêÝ=ªkXü˜‚¶sÖË#­e)a|åFO=kP7zÊ¿ÓË`ã4 eÛbÍ\`óUã»”îP€•« ¤Õ&Ss.q‚x E“4†e.{RÅ>ùLl¸qQM3¬Ëd.{šŽÿËn=È¢Ã'{´I|¶4èîQäÙ‚½U˜Ô­=ÿä&ŸJvÔ’¤XÞyô¥IRUܬ0:ûU(r÷î_œt©Ú8àŽBxÝÚ•€•g‰È Üÿ:Iü¶@²ã•JW_ÜlRž2:Ôº€Z1àçX iµPs…íNar*•Øo*22Tc"dêCm'è{Q`-Ž)¯¸î)2{Žiæå€º±R*;=Ò@YØœœsR_Ç«S4ì}œsM "òDÜHtŸ›F%c}0Œ…>¦§†Sç4R˜t÷¡ ,c½ŒþTª8¤y§”b“v3ŽM À€M!;yô¬éG¾@໥_¸¡`½qU`n¢ ßSŠ•\0È9½g[HžC£}ÿCVlQÒ"unGZºÑy±•~„S@[ ¡ós‡<Ô–s‘ y‡„ïÖcB6ûÓà¶TB¤g=sEÀ¯,Ë&ù”çzÔ–r'«“‘ɧ]ÛƒlH2:bŸo—n¨V#“C»ºÌûä'¿­-” 1‡nu>´Í­¥ŒlÄt"Ÿg Zißj`^çiç vª3É?Û>LíÍ^¡'©©êÌÔ£TØ@äžkLYš£ È3Òšì\D¢Õ]4–žV«qÐ ¼äU==J\H¤â‹I ]O¯´{Vo2ê9Ç kLô1‘O*›Û8ïŠh¼£/ƒµzñRÊЩèEfBä#[w-E€ÑITÞ§zjÜÂ[hqšƒPM²"p;⋨Ñ,Õ@#Ñ` KJާ=jÌ8XSðâÅpyâ‹{Œg#ZBÁz‘T&_ø—£sŠ|‹¿ORIÈ¢À^àŽ¢NEf*7Ø|Òí¸tæ”™ §ž\î»Q`4è>ÕIîŠY¬Yª34‘yL\±~¢‹ 3ŽhÉϵUžáľZ2©ÆNjkRí\síH ½*´7Ú•BüêÉöª©tÆèÂëC@ Š c¥Wžía˜FÊNFiVé O#4`Ž3H(9¤a”#¾('½_j†b:⟠ÂM÷r¡¬ëY–ÚWç“Þ¥´Fk—}ÃÒ„iGCH¼ÒwR'ZJ¢€ (¥ÅQE´” Z(¤ç4ê( P!i„sO4”‚–Š) (¢Š`QEQE u ¢Š 4õ ÐiE&(¢Š@R´‚–˜ÂŠ( Ò Z(4”QLŒÒ”‚€4fƒGj-¥4t¥=(¢“4´´RfŒÐÑE Š*™5!TôäÐÁ•‡QUmá’X¶6±¢Ã˜X“’M&å7¬¯Ó¶júæ“ì3UàcçÈ ’ƒ¥Is!†-ÀdÒn½i¾Z±äI ‰Y¸$t¤ša aÚ€ »B±¢òËS.By‘l óÚ®‚%$d7­0C…¥p°“Cç"‚pGB*!hRDpÄ‘ëV¨÷4ÄA4%dCóŠ"ŽQ¸³eˆÆ*edoºA§:R¶iDì’f®“ÅE>YfÉf=ÍÔÒ‹œ…ƒªI8ª6EKË“Áéš¿·vsÈô¨ÚÖ&þ>”Ñy‚%çË^næozzZ¤O¹üèkoÞ™Êîê)ÜDv?ë¦úÓ"^îU=*kxf' Óa·’;“&~Rh—+åù0Œí<ÒܪÛÉ Æx8©náiB:}å=録Nè]6ªrM2äº\FU޵>FhrÛ•½i—lEÌ_¥§xÔõ  $¼á îiÐNÍ+ÆÄ½Çz‰—ʺ¸Êб‘É!òÓ¸¤¡²*´×f)¶˜ÎCV8ª7£1wÀ¡ ¸gEuSüC"–i’!ó“Ð ©|~hTzŠI‰kÈÆ@ãŒÑaã™%$)Á©D±–8qÇZŠ(LwEË žÂ ´@óÌÍÈñE†_V ¹ihðC0ÍT³8Yùà(³O2wä’y¢À.ŸŒËÏñv«¤ú*†ŸÁïSfVCæeºŒh@\³5ˆ$ØÎjw·2y¤míëE†_$Ià暌² ¡Èª±ÊÓÙ¹'æ¦éêû3»äÏJ,Þ™¤\¶qN#wÒ…\R¤HÓº1È^•o­Q´Èº›=sS=Ó,Œ"Bõ§`,LsI «<{ÅIHOZqã=©ˆ,M4]BA;úP£­4È…öïô¥%BnÏÈ5ZÒ¹¤r @A9¥(8õÒ“Ê€ŠQÆM7ô£¦(IäR5R´,n¥‰ñš¼Fh¢œ0GJaR†+žh Æ*¤Ï*È¡ƒÔÕŒž(ØÍ1àŠC–@iÀóN ¤j‹µFE-ªÈû*ÞÕ6q@9¢àC ªÂIS’{š˜ƒÇµ.i4hpÌÖ€F{Ô hëÎÈ>Õ(–28uüéáƒsÚ‹€ËˆxŠÀÕF·žEX™‡–¦¯n4qéEÄQ¼·‘¢TŒd->hK0¤|­њ.Tž|–Â?(€µ3‰ž!ÝÓ¡šJ.qóˆ‹Ëlô¦³·Ø<¿-éÒ´épéNã3fC-‚¯QSG<Ë]¹n˜ÇJ¹´câš#@Ù ¢â)]¥™·Ž£©ïSiÌÍœ LñG#eÐêiꪪ€ì)ãY™S«Ô+L€EVp¬‚@ìúЀ«vöŒY†h¼ ßEíVf´ŽYC¶sLk2‡ sõ§pâk¤ˆã%(†ârO™PsWã˜ÈÇj.†gC¼Wy9ÇÛVx®L9%\[f‰™¡|ê :a—bÛ­*:ާõ¥o½Toà™¥V$z µqâ( RÐ0š)i  –EQE´Q@ƒ´™£4QERf–Š ¥¢Š(RÒ ´PQERRâ’€E-”RdÑH b–E1…Q@ŠJ(¢Š`¥4RÒb€GjB@äô]fó.¶©Ê@‹<â”ôÇ‘Pdž´ªá×#?J¥Ô»²Hª÷ÃÉ’pi §¦–à·J¹ÅgÛÌç-…QïWÁþ.Æ“ÀqÓ¥*œòÌ—JªØVéOIf3”f «Þ†Yí‘Í6MÂ2TóŒÔi%•Ö^¦ŸÞt.q†Pr(° ´™¦B[±íVESÓÎØžÌjd¹GŒ¸ÎZ—¾)ÕK®ðß/½*Í:@ù«ØÁȤ¨mÁF~”\+d‘éKœOjEϽ ¡R2¤2•¡ênA¦´¯"LA ÇÖ®Eq1e&˜Ö–$¯^´î"-4þèýzUÀrH¨a·XX”ïSFM&1¸á…P²…eóCõyÕ™Tà‘Ö ´¶xå² 0vqöjèÕLb$íÍŽÚ)-Tp½êͺ˜­Â¹äUK{f>LªsëRêD‹n8憄ZÊôœÇiÁ"¨ÁnÛ£“yÆ9æ’áHóåÿtE†_£¡æ«Z;ÍhpÞµ ´³ÌΛ¾ïsJÀ_Í-S´¥Þ¯Õ)~Òï¼Ä€…ëš,¢p)W$U>ÐÍkæìù³ŒP—.’¢H 銖ægˆ¦ÔÜ æ¥ÏŒUy®ü©Dl§¡§Ïp! InÔì»4àA5 ¬ŠHã×=©‹uãŒã¦idP}(SÀ=)Ò@Ó"©Ã= 2xªªñPæ•d·èäIrœŠ®cSeÓøj=4âØä÷õ§`4);Ñœ-'Qš@-sJ@ëIJ(4””´PŠ)- ZJ3@ EPEPE©(§Š) ÐÑE¸  (¤â’—µ%4QŠ(RZC@ A¢‚((¢Š@R¥”´ÆQE’”ÒPES(¢ŠB ðzµJÜvÀtÕÓÐÕ+b>ÐüöªBd’ÞF½±šs9€„S_AOµ5Žo—ØsN "iJ㑎iÐF`Œ³žM&#šYëMµc x˜ž*@t’¸%ÑÃ(ê*xäËÞª´F%‘Ϧ1RÙ© ŸzleƒIKÔfŠu¥èhcš\JCŒÓ4õ ¥1£Y«t4ò(€kmǽ6â3,EG©æƒÖ‹ˆl)åÁ³¾;Uh`•.·Å\í@Î ;ŽÁ‘¸ÓL1’X É§ŒbƒÅ…µ¹6õàt«ýé@¡Ž“Ô ·ÊL*êž´¶©ˆ ¯V6†M¤dP S¸Šv„G$¨Ç9¦ÛgžÜÕ©aÁÈõ£É_+`àw½¡?f“ô[|¶rÜÔÑ@±žiŸd!HòžÔ®-W6mžsL·MœŒG=ªÄP´¼R?â•>ç½/zOâÍ-&9 Μi¤sNÅ À¤t)HȦŠMˆB€hxcå”KŠ^(©o6å@­G%¬/'˜ÊwTù4™õ¢à@ö‘HûÈ9ö§KmÀnÎGjPh‹ˆŽ*¹çÖ˜,—Í2!ªÇjQq•ËçóCŸz¶™Ç'íÐÜ®ÖÜIÁ€&¹¸ ù8œf«LÓ#;÷cÖ—‘F Û×ÓgÙŒ.=@>}i÷(d`Q¿xƒ54¶ÈûËýzQ%c¹\«b‹^ KZJHôÀòÙ(VPz¹ ²Ã^»º“Pý…—åYp‡µXˆmÆöÈQɧ««Œ©Èö¨§·ó-¼¥nÝi¶VíeYÉíHd§;±Tu»­\ô5FþÞi™v¯„ê?Ðÿà5[O‰^Ýò;žjaçý‘WËù±‚*+ežÞ&"Aì P…²œ°‘“´ñWW§Ö«Y[´AÆÎqQC,ÿl(AÙH Ñž)ÇïU+©ç·qå¯ËŒ“Va˹ž´€˜RšAž´( RÐ0¢Š(¥Å ¥ AÚŠ( Š( aÚŒQE&(@ “´´J;Ñ@ë@¦’%-‰HE-”„ÒÒPQIE )ÒÒfLbÑEJZJ(4QL¢Š(¦6à }î")â/†C‡Ø (Åä9cSÒž”\E?%ãwdÝKk…ZI8«TuÈ= ƒÜ¬’‚ÊJƒÒ¬ÚIæ+vàSšÞ'()ÑF±.¥ €ü*d’6ÂÆY}EM@ü© ®.ˆûÑ8§ ØORGÔTؤ*§øGåLÄØÄ€“OÁÍFmâ$€éR)i@>”U`—JÄ«©Ö€,w¥ªûî׬a¾†“íR¯Þ€þ€³ÐPWI,›6}ê|RÑCsJp œÓDˆÝ~tP9¡†áNÇãF1@ U RŽ)qH(¯Ðœf¢‚q1*©ZœñTmX æÉÇ4À¸4‚UbBœã­8´ž£Ö£†8ÆL|äÒ\ñŠ ú Q¬Èd1ÿJzSWò§v¤P( )z÷¨TÊg!‡ÉÚ¥#€ˆ[qEÏ­6H’FË 'Öž­+ÛG¸>ÞEJÞÔà8¤=iÜ‘¹0FsPfU*’•µXcŽMGÄr>Ôo›¸ Š1 aTvëU#·™.  «ç§ÖŒñ@† …©3•÷Å&híÏ Dû§4  wO¥!Å<jUáNzÑ×c –¥aó ) óÖ€ÆG41HÀÓ±@¦¾{S‡Jn⎴Óþ²”å˜\e¨iM‘šñBô¡±Šü´ìñIÞ‘Gg‘@ N9¥ÝM¼)A¨-Š^œÒ0RŸº( ¥ŒÒm£¢Ð’: B3C4áÒ€x£îÐøÛB @ >픎Ô@ E.Ú ñH€qA¤P@£9äSq@Òdâ•Ië@¢–õ ¦±;iIÀ¤ÏÈi+3íMH¢-¿`ÝëNv•:SÝéi;Phh¤Í§¤ŠÖš£<šïyëEPgR0¦€sÍIͤn'lбF¤'å¤ã4mÂ<±R9õ§$~Z…ëJ4nÁÅ;µè£4 ^ôR Z(¥Å%QEQEQJ%Š\Pi)¤´QGj)i-’–Ò¢Š % (”Ph Å´R†§Í²AÑÜ} 'Ùœ}ÙÛõb•x¦hãæ}ËVi­ TmP<“æ®°Ê2:Õh­^"Ä8;© bYå¡”7LšŽÈ"]¼ñRűB뜱4È"š8qóuÄ6Ù—㯽5"&ø®ãõ§ i'¼½¥~ñ¤Üa½g*pzb€%–F3¬¶94è%e˜Á!Ëu¢•¼»Á+}Æ‘°–øÈ¿uGZ,ðÎï;ÆGݨÍî%d1œŽÔËgÍì¤÷éI ¿‘÷¢ÀZó×Éóô‰pŽø ©=3Þ Ô3ˆÇðçš|–ìÌ’Ê8¥`-ŒÒŠb­?8Ò’"Ž{U(qöç+´ë_ßÜJdç4€·Òz  /žŸJNøª>y’áó’£ %“¿Ì®3Æj@´4Ë—xâ.˜â¤ïQÝôgÔZ;‰åˆº  TÖÒ™¢%†ª–“4Pð§ny5y€Žegš`(np)ýjŒW,vŸ,áŽ3S½Ï—!EŒ±4X ÎA “šbJ%MêÒ˜/"lòA©79£>µJ&RPçǸ‰~Rÿ7Ò€'SsHQB‘³váŒu¦E"»° KÚ“8¥=)¤`f€œŠgñS”‚)„€ø Ò‘IK@éMœÓ›šu'J\PhÍ.8Á£µ€ qŠ\qŠCÒäа'”Š@ÙäRzB §¨Â⛚p4‡­!8¤ÒP„‘A8§ 94u8 Ž”Ó±K@ _ºE*ä-)â@P>í.i("Œ|”¤ P=(îÒŽ”¸Ž”ƒ¥"¸æŽüPM*ýãBH£4 b€Ô<ÓºŒSThJJ;ShOJæ’Á sÅ4R‘šJîP˜ÛKŽ)LP!W­6L)ʸæ™!†hOá¥@ÇJS@Ä¥”£ŠZ(¢Q@Q@ (&ŒÑ@ KF( Š( Š)h¢Š)QE˜ A¢Š@'jÅP0 ÑA ¢Š)ž)i)iŒ3Fh¢€ (¦€ƒE&i€Rf”ÒPJN%œJ Aw¤v£¿ZZ;Ð=hÁÍæ–ŒQ@  AÓÍ;5É2¡°O.yªžc°#”Ò[Vš5ûª*ÁlqœU æFã¯Z¼AÏ"‡¸¥Ür ƒèjX¤Y3´ôªŽþEÙ=/1Z»Ž¤f€'.½7 Ôày±ÈÅD¨¿b2\Ñ<†K'¯XEÈ"QORâGŽÝJY¦’8â|ç<,2ÕU{‹‡Ž5p Žù¤ûY@ §Êzb‹fUÅÇ"¥’t‹³“ØQ`$¦Ž)"•eRTýG¥;€oš¾fÂÀJxôÅ@V'”²à¸©—¦OZSÒšM8Óæ€ŒÑžiÄq=@&‘âóUFßJO"a)V5Q€™ ÂxƒƤ=9¦BÚÛ‚óMûaÃ.AúÔ úSòvÒ¸†KËÓøT"Õò HHYâïEÆ"ž1NÍ7½-*¤‚fhÂ݉¨•%Šä»&CuÅhh=©Ü lk7˜¨YZŸ É!,ë´gV‡Ò†4Bx¨.M»ý8©À¤hÔ®Ò2) §¦Ñº1ã5jèí·`:bœ#DåT úPè²)V˜Šö!~Î1‚E •äypª6Œf¦Ž„‹€i ªfɺӸ Ó¿ã݇¡4˦I‰ÇZš;e˜«{TqÙl,VCÍ$䩜¯­>Î14¸Œ“ÖŸ“DIÞ=i FH„Œ`2åL6ñÄ9=sN1IæÆè›@àûÓÞÔ›uBrã‘@[†dÝ…Uêis¢Ô7¼ƒ³©3òš­z…íÆÌç98¤2co,`I¼·Ú¤Ô Æñ²62zT.û¦XÈ“ÅMɉûš¡ u$°¬nƒÁyNåúf³/¦Y{AÚ95¥+F¤t"ÀŽ}ªµÍÃ[•;2§­[ÈéTuCû¤ïÒ’ÿmڪ΅Uº_¶)p¥ÐúÔ7„}–1Ô*uÓ`ÕVÌÓ$kÏSÐS"$m£*{f«LÛâ$pio²—00M+qæIBãp¦³®ð7¥T¾ˆ)Y€éÖ—qpŽ@­Ó‘ËR¬‹ NjÓ4—ª€dÔûKy’à³ !íš,Þ È9üiË‚3YÖÑ .åRNÐsŒÓì‰rÇ“´tX ؤÀèfÅ)ôõ¤ “,³ˆ0Ú*Í´žbàä2ðiŽ%ûS|áW©¶3UòAëNÀZ'ž¼ÑœST̳HHÈÚ¨¶¹–WÞGÈ:š,Òr:P:UµJêò&Ý ô«VÓyЇÇ=é-š@sÅ/J@)T3\-º†~†¤$æ©jX0Zie§Ý™ÝíM´ºûFr»H¤´ÿEúU[7— çu;¥ë@¨ÖE|•9©“¥ 21HxÕäгKŸ–Ódqe›   ±šNÕ™í6¢¤d/¥_¸s.㨠#ך^ÕBÝLÖæS!Ýõ©l¦iaç’3@¨ªzŒ­@£a‰ÅOó ï$¶3ÍMž:Ð*ƒM<„´rlv-µëŒ2õƒë@F)Œ¡ºŠpéI@…Š^ô”w ¢Š( ZAK@‚Š1EQEQK@Q@¢Š(´Q@Q@%- EP04”¦’€ (4†€ )(¤2…@¦ÑE€ƒE%˜¥ Ó))hŽY<´'Ô6l\ÈÇ=jÃà#qÚ«Øòîj1C¼³°VÀZtR‰Ž~aÖ¢¶8i½%«|ÒÑa%a Ãæ'©Äƒ`f;sU ¨PÍG­NÈ&TþíJ’#~*ŒÊ#ž=ƒ늼3IŒŠ(<ÑH›riØâ“µ;€ÈâHØ•šÑÚö¤7p} =—teŒT†ÏjwL¤É„&T÷¢å-– „ûÕÊ(¸ç>e¢ñÈ<ÓneFHÀ=&¯aô¦£#åEÀ¯xÀÛ.=©nH1¾õa Ók*7µ»=è¸]ÇÜ vÅ!õç§LÔ†ÔyÁ9ô²BÌâD8aÞÀ[x^)œ“÷»UŒyéPAFÅÝ÷1©YÆïHe4ííŽ3Å!סˆdб̷>a^¸•n¼ÁF1LC¢fKÓâÊGz´Î¨pÄ隣e¼ÞPàñÍZžÖ9ŽãœúŠ,1îá`X`޵æ< P¡ïVžöG?Z!h¾ÅµðƒBû4E„llçš°~íSÓÔ¬LO9a2àqÀÍZbœ)\e("ž)Þ@ªC{Ó Žh¯ ²pþõ|^(¸ Ý:SIË _¥&h†Ò·2yŠHo»Š[/Ý4ŠÊAcÅ^ão<Ò`x暟 !åRÛ=:Õˆ<“Çd‘Ö«Á"Û´«6rO\f¤ÓTåÛRx¦VÂãtpAïÞ®Âè¶…Ñg#ÄŽ~dëN »6àmô¤kkµ™ÊíÁ«cÞ¢ŽÚ(œ². ©GZCj†¨ [­h¯sj.q¹ˆÒš–˜û·\j 0‚òœrZ¬ÇmåÄcH>ÕXyD²ÈC{P"(~[ùQ~é5 ² ùK Þ• 6¢,œ–fêMBÖ2±(o—<Ð2ëR¨âªßC#¦õ} uæ–Å­”·Z@ZÅdbŠV$)*2GjÊFÿ‰¯ÐñZSÿwÖW—8»óŒG¯JÓ™<ûr§å,8ö¦Äf¬2„i-òbô5vÂDx¶¢íÚy¨bžKX¼™"f#€E>ÒÙÄr–;ZCùP^âG^~TäÔ¶4°–'¿V{7†ÝÛÍ$šv—òËî>˜  $cÈFÜ3»mCb¨÷-#¶–hîpi%ŠZQE–ŒQ@‚Š(QKF()h¢€ (¢€ ;ÑGzZ(£µQIšZ J(¢ÀÒRšJ)1KE%QHfp¥‚–˜ EPES¢Š((¥4”ŠrÁ œñQYîE!ÔŽj×zF¦˜2ŸUŽr(·R¶îË÷J´ñ«FMJŒ ."±.¶M¿ƒØR£˜í”míšžH–LÉÇjŽH‹¦TtíL åÖ6I*ßÞíZ ‚3ëÒ¨}žI™wª; ºjàž”˜=¨Èõ!<µ^[UvÎâ) µÁhP[H¿vcøÒn³‘&j¬ÓHÝ*µ»N%Û(È« ÷j@2H¥3M,<ž”È®"`~|}hAÖŽ)Ó9Ü1õ§ñ޹ bŽÔáÒ€ŒShïJA )hÚ€¨¦ãšpÅ7J:t¨æPbcÈÀíQØ1hy$Ÿz`XÀ¥\{R8`‡oZd>aLÈ9Í+€ü)žDlI*)ãÐQƒEÇaí\¨¢µXœÈ3“SöæœQp8^E ¦ •œ¨ ‘ÔSÁâÍ5Ÿg4½GJj9=éÍŒÐqš(}:Rñ»­&9 Žhæ¤~Šh14ú)­æ€Ÿ›ZwñS•8§ƒ@ ’E4š€1“Bç9 ƒÎ)MF¹ÜM<œPrž”Žy§“Í#‘Å.iAÏ)3@šœy4ÑÁ4«Ö€ óA#”o÷Э F>U ô§i çŠEuj·J2pæ)Öð¬\ñ×5"àŽ´´ ZZ(QE´´Q@„4Qš3@ E%-QE´Rf€ ÑEf”QE”´@ ¥4”S¢Š)™ ÑŠ `(¢ƒ@ ER8RÒ QLbÑEP(¢˜A@ EP" ‰„JG;ˆâ’ÑËE’rsÞ–ð=é-8·@)Ÿ2E-Ž´ô:nü꽟-/¹¢×‘*ÀÍÎå#9§ùU’<‹€:ç5v4À<Š@;ühÆj´%žéùùGk40i¤=iÔR)h¢€OQAåh¤¦y\šh‚2§1­?gŠ€[DAqøÒ U‡`~µ`iOÒ€ ‚ˆ’ϸ{Õ…9¦œ‘J8 JX°j/6äc0çéSœ†Í;4€¯ö²¿z 迈0ü*ÏjäøS8§I(zSúŠjª/ÝP3N< @2LyL=ª¥³²Z³.>SÞ§™¶ÂÇÈÅVˆfÀõª[óË[yˆ84‰>ë5‡Nµ]ŽÝ9}M>&Acµ»ñE„KÙoºpFA¨#ӡΊáP¾å=)a¿–‹ šY–6Z•$G]ÊÀã­Sæ¿pãØR Ù~È>éŠVa-ìñí,zàÔ€Ž}ª­âqÛQÐzS¸‹qsgÒ•—r‘ê)–êÑǵ›u:PÆ&Û÷±ÅH̸!óDÎj–rÑà$z‘E¼SC.XpzÔב³2H€ezÕŽVã÷jÁ1ÐÔq92d(ÛºU¨äšR~B£ê³ë†ˆù¹ê-ð&hÎy8nO5a[¦MT¸Z'l¸ÍK<å„EIUbrhÑK ¹ò¤9ã9¥{‡[¡^CUÑ”_) Jã©§È¡uf?)ïE‚ä‹pßhò™I%êÅ)Œ¯Nâ¡V¨{ IÔ}¹~¼Ñ`¹j;Èݰ@Z#ºY\ÝОô’ˆ¡·-³!J­;7™T.1ŠVÅåÏ–èª~µ+µ^û¡ÈêÔ·ø[p¸Ç4XeµPmÀ^Ô«"7 àš©rJ[B ðØÍ-â¬QFѤ2;Ñ`.ägâ— wªWä˜â Äâ™w‘n ÝŸZ,….)‘’PéOŠ@ SP’X6”lVòrxªZ¡ýÜZ–U/hX±.i4òZÜ’Iç½Kô?ø V²YØ”l`š`]lì;OÍŽ*+a2£yÇ-šŽ—’ÝØcrg4CpÍhò¿cÚ•€’à4–W*Wž*-9ÚH˜±Î 44òZ—B°éŠ]3ýCzæŸ@.Ñš â¤ê)´¹ ”úÓsb¹$AOŠUeNk>Öq βŒ{Ô¶JZæG@|³E€¾(¡pj¼—‘F圊@N  ÝDÌ7&žò$Cçp 0œrj4¸ŽGØ­Ï¥:)NPƒTcuSŽ¿Ê€4(iMP© Ç\QUå·y'Yð$PùæÞ›Þ”dšRhÍi1Î(4Uv»MåQYÊõÅ:+„›…È#¨=¨~Ô€P: (£Q@ (ašQÒƒ@£êAK@ (¤¥ Bž”h q@Rf€Š;Q@/jJ^Ô™¢Š(´Q@Q@Q@Ìdô €Gz ÔQE š(£µÍ™âŒÐš)3E!™ô¢’–˜ EPES¢Š(4”Q@†I $ØSmå2Ç¸ŠŽõWasÔt§Zqn PyÑÔ™]»ãµT¶ùüÖ#$œ [f-©ç¢ÀY 0#îµGË‘£DN>µ4ä¤JAæ€'À<ž¾´î½ê™šGV2qŽsW9ïH#"Ò—µ¥(>ôR Z.mPÛ€§v¤£µ ÔH¸'J¯ö@§ä‘Ö¬ŠZ®-åvsøÐRé+}j~ô½©Ü iÉa(tÅOMÏ4£­ G¡b Ò ‘ ÈúгHUOðÊ€"ûL'þZ xš2>úÐÑFz¢þUYÂßÃ¥0'R8 Óª X3´ž}j\Ò”o¡¬ÛI–%rÜûVŒ§1öª*² ¿ ¥°•VyÝn~” ¨Nî â8 jã°ZÒ–Õw‡ ÒÛJŠpXfœ 09RFˆÉ&Ð]€Áö§YœÙ{f‹´0ycëJx÷¬ëXËÛÊI'Óšš ™l™Ï%h°Ët•J5™ «ÄçoµK4’R$8b2O¥+c 2‹€6üž´ØätœÁ!Üqibžé¡*>¢€±AªÒ]ͱ7#5a2ƒ‚3ëH›b–=$3¤ÙØsZt€yOôªZfÊ} ;xûb‘²WŠ¡ö‰Ü 8#µI-ÄÂeFy¢Â¹dnIr€ÈnôãHb vi1ϵ(äq@ n´Ó8¦ùÑ™¼°~jŽ)€€‚=©8ÅEvZ;vtàŠu¹2@¬OQ@e ¸#" ®ãÒƒŠB ¡åt¦IK÷†jAKÞ•À¯öHƒ‚=é$´G“yàÕ’3F9¢àA$!áò˜Ômd¥~f%‡CVè\d[cL:ô&™5´“B°-ž¦­ÐY@ä€{ ."»[™-Ö7#rô5Ã4êÔS×Ö¯q‚(Zwì2Hˆ±Œíæ™t³Í/–x毎´½è¸Ší#Çh[n”Ûždbã‘VˆsÍ&¥4MRÔdAÏ^Õ¡I€;RHÄŸEÇJ­e0Š+N+H` hÀ#•1f;Yœ‚ç[bK cþ.¸­ªx##Ò€ˆ§åP>”\ P΢ȡ'xÅaS)8$ô«žZ £&‘ar Ú€+›À.¼‡Ó5%ÅÂÛ Þ ÍIäF_Ì(7zÓ.‘Z o=¨ÐcÖE•—¡§¹ÚŒ}EmŽSØTÄf€3-¡aÚCÎp=©-™íî¼ ÇhÚ²»4/³=i`µòÜ»¶ç4\Dê8ªZ„#˨Áš¼4’ÅæBÉëHe ]³ÎÒ€0¡rúŽqŽ«–ÆÞ6RA9¥šÝ™–Dl:÷§q·îu0®:Rù §ô©£·s(šg”pJ‰íî>Ùç¨ü(ë}ÜÒòV«Þù¿g^wwÅ-¯˜mÔIÞô†NËÍg< ªí=EhãåÅeÊ%7ÁÌgõš{»‰RxÕ CÍ<Æ®ÁƒÔ7(c¹ù#¯J/eW¸”jv¤Ò¢° ÁO½(uºÀý*m"¹ÚïœãŒRCf–ìYY !”’Cetþ`àœæ¥µO6é¦C„ÏJm°[™¥ó†H8Ò‘c6º‚ƤínÂcâ” ŠkˆíÔ8Í:)VXïCHd˜¤íKGjQÒŠâ—Pf–ŒQ@Š(ŠJ(Rb–Š;QKI@3E@Š-A@ EPEPi¤ŒS%­QH"Š( aŠJZBhÅ™¢â–RÓ ZAK@QLƒE”†Š;P"¥ñçš’Û›P=E>HRB7  5 ½*€­jH‚\u‹f nìÇŒÓÞ ›Ë# ÔS¼€-¼¾ô\Dr*ý˜I#ýÛàR õ¨Ù$h„;6ZYãÂF2@^(YÞ l0n˜«ƒ8¬ùˆ–HÕ9 Þ¯¢áhcBÒõ¦“òš¬.ÙN L}ÅM€·@ªÿlNà¤[˜Oñâ€%4”‹"9X^Ýh Z3Ö“<Ð "KEÍ.)1@ žqKÞ›Þ€y bšJ^´Ðs@‡@y Ð4’"È»[8¨ã¶Ž&Ü™ëRsMi8f˜ ,fT+»¦ÛÛ˜]ûíŠ~ð·jHæYIÚzP?f3ípºÓà‰¢…£àúTàâŠWRåŠÞDÆI§A 7Ž@A5ex¡³´‘ÉÀ­þT%0Yצ)¯˜îc™¸ 9¢Üo)µOj¸T6CER,³ß«§*½Å°:ƒ°éV•U8@ö¦‹x¼Àáp}¨¸ìU™GÏ4/ŽÌµrݷĬz‘Lk8Y³‚3ך˜(PF¡€²s} QÓ:J=Å]q¹ çªÖö­¹=h¸5¯]¯…<‘D–å¦YCàŽ•g¯Zi¤ŒÑÛ4n´JöR®ˆ ëDNVëbî(}i÷p³•âE,3I+€#*£®iF:‹ ûÖaÍgJÏ ó>Üîè*úœ¨$c"†"ÿøózH_eж3ÐQ~ÑXTK1K(yèhC·L¬‚ULU¢3Y— °¶àÞ¸­AÐÓ×I zRÇp’;(à¯Z­¨ ËžhÕ`’Eb½¨ÆêãqààžÕ#: ÐÕh^["ªW©¤¼M–‘)mÄÍð’2pSŽÉãk>î4ŠÞ6Aóg­Os‡É´qëE„Zlm Ó&%)½°W§5JÔˆïö!;)ú†Vx˜ddÒs@JõöÉýÛ1ÉøI[G1¶þ2(Ö9ëF=ê…´‚FR%!»©«Ì¡åP:Ѓғõªö“¼ñ¸8Þ*('æx°2§½^Æ:ÒUkk†’gÀ})¦áä‘Ö>^æ€-Ž{ÑÚªÁwºw\ëQ‹¹bRƒa  ½ésÍ5He :wzl± Ò¢·¹YÉØ$ÜÄÿJ£¥tzšh ¢¹Ý˜\Џ f³õ3…É"­Çr­!”£Æ‹›½ ñMÅ!ŽàÒ´ƒ­:€{œQ¸gçÒ¢šad‚~•JÒF–òGµ:œšv<óM(¬9QùSZ3@ :RæªÅv$¢ÚF;Õh¼–ˆòyˆÅ î;ÒÇl±¾òK?©©úQÖ€+Ý[-Ê€Çw© ˆE è*J(¸¥£§5\Å$›|Þ”0¥¤3KœÐEQ@ŠP(qE¨ AE¸ ¢Š(¢Š( QE)¤RÐE’€ŠJ3@ IKA ¢Š) J)M! ¢Š(ÛEPp¥¤´ - ¥4QIFi€´™¢Š(íE¨9¦‚•9Û2Åò÷ëIhvÛøÓqÁ£ت©ºey7·¦*O0ÉjYOÌKŽiqŽ=j›NÂ8Õ .zñV^O.,·Þ£Q tàxªÂáèéÍY^” CšQÓšS@þ9Ъä/j»Ÿ|Òô¥p)ÌÒùâ.„c”Èhà‘•1“ÂÕà}éx&‹œWÌš#e\˜âœïþ• ‘˜ÓxpH¥ÏAùQp(i§kH¬ÉÈâ’ÕÕo%fÈÏ+E°i›W=;BÑ¿çƒÇJu©ònfW g¦jáE!F}iäeúÑp+\²Ío*ÄËÔŽôÈŻڮöǶjòF¨»T;ZˆYÀ\>Îhí,pÛçhS¡•fMëœf‰aI¢1· I )mN”†,¿êœ{Vfœ¯¹‚äóZr t*IúTÚ$,Y })¦ „¸§ÍéŠeÐÅúì9æ­}Ž"Ûˆ$úæ–+xã“p\Ÿz.!ÒJºÓ·®ÝÄá}j ›QpÀ–ÛŠ‘í÷Ûùa¸ÇZC«ò‡"¤ªZ|eàåsÅ^aŠk`Ž@â³tñ›©M_œ·”v šÍ´Y­æËÄØn)ƒ-^È©B»‹*¬–Ò[(”ØÕÛ‹=xûÑQËö‰!òŒx §qE2µºÈÍŠ£4¤n|Œ¹íWŪ5ºFã zU+Ë]²ezb’B) ,v޵^(ÙíŽ&ÁÀ*À¢ØÆ ­û,N†6.xÈéBK†2HrTõ«‹Ö©iÖì…Æ § Öûg”S8¡Œ¼E#¨ÇÐRäïTîæ—sB‘qI^É–9<ÇÈÜV¦:V#Èâé0‡)ÀZÙ‰™ã ë‚{S`8ôªÂö/7ËÃnÍY¬íN=Ž“¯¤RÚÜ£Kåó»ÜRÉq-µÎ WÓÔHZcÉÏÓ#ùµ9àqšvìs$§ä9Çj·Q¸ÅÌSQeÏS‚)ÉÆ®Ø¦#Pt¢sN©¢ƒIE–€( RQš- ŽÔ (¢ŠRšJZ)( £Q@))h ïJh¤ Š(¤04†–šh4™Å-%-Q@Ìú(¢€Š(¦QJi(¢Š(¢Š +ÞǷ֛řúSî"’EÚ1Dq1·ØÜ dvŸñìô–Çýǽ"1‚Œ©ÉèiÂûç­üÈ‘d8+ItàˆHïÍ6GfXÔåûÓ¦R© ?Ã@ª½ÊÊñÞ¯zb©_´xä‘Å\Rv/®(`¸ ž9¨¾Ñí¥À5#%Æ(¦ùˆz0üéÀƒÞ€KGŠ8Í/Z:Px¤ÐA õ£½”SiW¥;4Æ<ÒÒ;P1¸â•F9£§´;æœ)´´Ï¡ªþL±1òHÚ{°}iªêÇ‚3M+Á‘ÈÌÄdÒE±<‡î«eˆâŠ.ŠU·‘Á'"› ?g@" ¯SëZ”`."•ëïŠ?—Þ­BÁ£Vàsš~Å8ÈRà~”\ VŒ Ìã<ž”ËP…¥Y9äUõ‰ =ê7´ŽBI>¢À­" ²m„ã8èiɉ¦œHHÇݧElË9”°fÁô ±ãŠ…nËå`†÷¥Žxä_‘³õíU_LPüñIÇ^iÔb€:ûÒ£l݆=©qódšl>ü‚â€%\.BŒ{R“I¹w‘š )<hzÒçŠaàÑ!Û8è(þü \Öm©k­ìîAjKÝÞHØä/CNÀ\4cš3E üiÃè)¼“Nš0ÈëL1Fdó Þ´òy ÒAâ€I9¦“Ú— iUì÷Ý ƒsœÕ¼Ss“N ¢¹‹Î€§|qRô¤Ü(;h¼˜8ëQOjÆA,-µÅY~4¹¢àS¶´hæ3LÙcéL6ó¥ñ™T5ŠQŠ." ±+[Ÿ+ïzS4å˜FÞvzñš¹ÚŠ`´‚–RÐQKF(-P@¢ŠZ)3EQE´Q@z(¢€ (¢€IJi)QE ))OJJJCÒ—½€Š(  QJ(QEÀ %PEPEP ‚ RÓ¤ÚŽÔêCHì\çhÍ#¢ºá…;´Zª¸bÄã¦jsÐ{RŠZiéQýš&ä Í<Ó» wg þ} 4Ú 3Ƭ(¸ÒÙÑÁó „ÕŽGZ1@{ÕqvTœÂÕ`ŸšƒÉæ€ ûjgæV…/Û!ÏÞ#ð©x/ÐR”ÏZþ-Ñ—æhW ñõ¥ÏŸ¤h¹ëV¤R0Rxv\ñéUÄO®è2›§–x‹3sÞ¡2J·~Yrx¦‹h$y›°«@Š©rÓ,ȱ¸Ã{U”Rn9nô˜èhl¼ÓCRgq¤•b¢Ž£bUpOzx£”»}*-bsó.j^sCf€#kdòü¾výj?±&Í£ }jÁ&Š.1©H¼µÀ£´¶ò 6ìóÒ§Å(4\E ˆŠ^+†ÎæééZ¥4ªî W'ÖÙ4\^ÍfÝïk€Þ[`µ§ß4½i¦Ï7 « =´m!#âôâ—ì6àciúæ ²@Çfyõ§qÿ çKQ÷beê½j馺—ÔRRÛ3î*>AŠˆmO È^™«Vp!*q’sš.m‹È²F@aNâ*ÌJj@=)Òø™¨ô©ÚVŸÍ™ojd–²µ×šš`\f y8§Ø9½Wºçˆ*Sí¢h¢Us’*FJzâ¨m ªí*ûš¨›iþ×ç|§'ô¦€mÌ`ê;0ç‰Ê¿S z–âÞfºYP) =j9a¸{•—`ù}鈵-ÌQ¶×lQ,R¡ÚàŒr)Þ)0Ò -ïM±"¶Å °Å!”|¦gy-²qõ«|ÊtSkç“ëInZÐ4r#œ‚-¤,×o.\ñ‘LEâ1Iš¯uv ‘P®sÉ«°u ëR1ÙŒÒ1äR’8ÅAíCu¤x Ó~ñ¥| S•xɦVŸMP99§ž”‡¥1~õ?µ0pi§ïÑÕ¹£ÐsÚ˜piIæ u¤ç}IœRx¦½;øh!ÏZu1:Ô””½¨Å™¥£PEPEPEŠ(RÐEPEPh¢ŠJ(¢Š(”¤ ƒE€Š(¤ (¢˜Ã4QE0 (¢€ (¢€ ( Ð ŒÒ S@‚–€Ž” Ju (Í)QI@¦Ê̈J š\àf«›¢ÊûP•é‘L -fi’1ŠzH²ò:Õ{NݳÍXŒÅË&9êE0œ6)ÇšR2?$Š6Ï¥ FF(ÆMUÓùWÉèjßJLv¤QŽ)Ýø4cÖ½9 Ð(4ÒNêwJCÍ(&Ži…Ð8BÃqíO=2B|¶sŠ£o¶îIŒ¶GjЗ¶)¦ÒYfc"‘š}«ˆ"xäáô«xÉ œ)Ü,T³FÄ®GÞ¨¡t[WVûÙù åsE€»,ëòO@)á]ö2”CUîý¦#‚3IpäÝÄW­Ëfx÷Ü2)Ë"±š§")ÔPãšFu0J9@¿Ö—„|Üf ».–ìTŸzC%'æôî1‘Ò³@‰3ó¥™Ú0Çq=iØ ÜÖ_Ò¨Èl‰ ¶HÎjK¹],‡†¥`-QÖ©\M$w äu©¯$’$ܘã®iØ qšQÒ¨™„Q•*Kö©æœÁ î;Q`,t¤ÕU¹u™#” 7qA» 1Œ¡$Q`-犪Ñ]+FÒl8^¢{MÜÿ… -Si±Ê’&õô„޹â›É(;RLQHizS pr))sJàG-¼S`ºäŠz¨  -0zÒ€3š)E/˜ Ñž(#=©zš3Í@o!ùdÙ  bŒñHy¥ “´Òê¬2@'µ.0is‘N<ÒŽ( –¤e9SÅ-5†êwEÅ.(  !¹©i84P!{QEQEQE;Ph4PMPEPÐh¤ ŒÑK@ š(¢€ (¢ÂŠ( ¢–’€ƒIEQE (QEÆQE0 (¢€IKI@h¢ŠTùJ6Ÿ˜Ô €›˜ãŒš,…-@.]¤/­>iDJ Ï¥;úZ‰¦D`°O"¤-ÉQ` .iŠÀô"œzRȦçšâ”q@Ì?rø=ª R«tµlsÔf {U,y šba)úc=),ÀòåpI§GlñçkðGJu¼M 0bsNàAi“x$àtÁ©­$,²#í¨m”HÊ»¹ÅKn†$’F·j%‰Û§ýªI¥¦VÔ–™)$d-ÈÍ$2ˆaxŸï:Kö’m„Š3Ž´ßµÌd)ïQ…òôöÝÆî‚‘Û94X.Xi•ÊsRÉ2FfÆzUK¼ X‡©ò²f%ÚXãŠ,,¤© %[§Z‚­ó²6)–¼ÜÊ ì)-•MÔ¤Œ€zQ`¹kˉæÞHÞ:T†©¢út§13\ºn!VËDã±Å/sYðok–Vs…©c’Crñïà(°(ªÐLí;DÜâƒrK°Hò©Í –)EWûH0ù˜öÅ\y·iSïJÀXé@éHrE*Ÿ—š(¨¾Ñl+g5!8ÐÑ“ŒP1ŒÿZD`äãµ(êxëKKF(µô¥èi1Í@8Šc¯ÊÀIf›vÏ%ãê)-åym·õnÔjk”˜'šœôª¶ÓJîâA‚´áx®åUNE0% €sÎj!gsƒôϱ\¬ŽS õ©ñÅ-@ŠX–Hö·à}*¶Ù bwÞ­”sŽ(¸ìV{fiĪø4Öµ”Ü,¡ÁǵZóKNà!ÎEAxØ·|UŒÓ&‰fŒ¡ã4¢¥¢„IåÇ¥xÚæÜH Öžö²4>W™ÅXQ*qÞ‹ˆ§3´ñ$B6 ÜšuÚ@Bš¸Ô™â‹ŽÆmÌždÈÀ|£ªùÁg"Ÿµq÷GåJG\Fm¢Ÿ´˜Üp‡"¥Ô”“ƒ­[ò×y` 1êiŇÌ3š.aö]è@ÜÇ>• àjƒÓ½\H"Fܪ¦Ik˽ÏÖ‹€éÕV 0ã< «oµtç= •qâWŒ¡à‡ì1ùE7z‚ßpÓÜ®i`§³Ûæ ½ø«6ö‰2ä݉¨þÄT“SØSºäÛmÎH8Î(»‰Rp0I⧸¶3"¢¾6Ófµ–P€HÞy¢àG{”a(0IÇ^9y¢‹¯¨õ©'·šR„²ü¼ñN–Õ’U :þ´h[¢è›#î*ͽp ׫j'‘Á— aÞ¢†ÞX.Y‚§Þ RýâíÇz‰¡R(Xœóšž(æ[Ö•“¸ëMeŽûÎXcu~àïJßv ži#¶VTËžÞ”¶Ó™¢,F8"Éú&k8Ìe»ebv/aZñT =½ÓJ¨\7P)€ëv•ÖT9 ü$Ôzj¶XƒÀ<й*±1”õJÒc hŠÌÞ”ÀÔRÉéH«Ž)N' U–éÌæ4ÀÛØõ5!Ÿe¿˜àçÒ©H±\rÞ\Š:'ß&œ„çƒÏ½;h]2•/Õn†¤’ä+íU,q“UÖ(gsÆ0 ¦ÍùKBøeŒÐØe¦îGµ?p«XÊd‡æ8â¬pÏHEìEÊrìEH³FÑ—VùGSéTV9&¡Š×lc›šv7Úc,9ǦjµàPŒÖžÖÒMXeqІrßnˆvÓ°Í@B¸N0Ê~•Vu¥Ì|cø}j+'Í쨹:JÀL—j× Þ@ëK, <ŠXV©¬Ju'SœiosÑ22zQ`4AÇ… ;Ž*ì„K@à7Zdû¬æFRvž š,*øíL¸•¢\ªîª—²:ÜDQðR]´–òÆw’¨¥a •¤MÅqSŒÕ+éYÙ4’ô ƒÔb·•k+»4@‰$ ´»±Ðt©na3:qÅEx@1°áj·»ï=@  pÂÂp»¾ï&¯žüÕ[#½äSVˆ¤Æ'j1‘KJ1Š@ R{Òž””qM$…'J8¤  VlUÙJžOJ»Çz\zÑÞÂÃ@ºÐȤä¨$Sð3Hz☬»\5Ó‚2hrÜ,Øœ€ ㊓í çyg!ª$h¡Û?1=*#ÿ!ZYóѤØ8¤yH°úUböžaM¸ê »½@Ü‚ö£rçïΨ̆ÚÝʱù¿JIbX­Vuûýýè°®h´b©\¹k($”¹m„ÁÎGQE†^êiG¥Qžèˆ"+÷Ÿ½VŽt@ÌáºçµñÌSƒdãÒ“p'†!›4†$,piùêj;Ÿøöq@†Ap׊&=2i-îæhÜWÒ£Ó÷D{Ó”¾“ [žÕVCšZŠ…”íÆÖA©x©µ>):¶H¹¤ÓIÇzwZ¬öªX¶öûÐ2Êô¤ ç5[ì¬>ìÎ)<‰ÇIÏâ)è"ÑæŒP@³©>kdv©Å (¥ê*³] r»[j±AT"îäŠwÚa'` c‡¥8*4‘þV¥ï@†ˆ£ÎB(5X\±›Ë œw«c­fÅÿÍþñ¦‡$ ÒŽ)z „ÜF¬zœuÅ '(¦¬ˆÉ¸–š&Fx´dP0zbŒdPzR·ëN Š¥s4кœü¦€/n¤ 0ÁäUg™ÆÀ˜rFMI#˜£ÞFHŠz"©;F)[œTó™A`¼RÅp$”®Æã½M",‹µÆEG %3R‘Í&)¬2¸ÏZ­öóH> ÕžÔª3íMUl•d½‰¦–[wiüÔ}­VM <Ñvajép%/¸ãšK‹y%¸Y ´ìeŽ)]ÊsNà6X¼èJ¶3Š«*ÏäˆJå}E^=)§Ú‹ZälÓñè4»Iiå„$š}ñ?e*riönr89§qM,2PsO™$EHÈõÈéVΠzàJã*Ït`˜(PAš²9çÔfšQ[ï(&Ÿ@ÆÓQMÍ«“éRàf‡]6‘Å (é˜ÃzæUÔeŽzUˆ­c‰÷&:Ciòø;z«ˆ®?ä&Jž;Õ¿5…fÁ=©±À‘’À|ǽ2kA,Ë&ìbÉÕ‚‚X€(Þ:Žj ˜üȈ ´/9¦Øî0ø<@û}i“Ü>})[8Ùü,ª2HÅ *é_uý3š–ýÀÙPKô¦YC,WQƒÜšæÜÏ´«a×¥>¢(É ¶€Iœ¨­™<•‘Ûæ •'š?-Ð*÷ õ©M²HŠ®8^Ô0(ÎûrÊrdn£Ò¯DcÀЧwkʈ⭠6öÀªØ¦F!À;ø©l#òâÚÄn<Ÿj§æÜ‡.“íVl ¼’4ƒ }¨çz3ÍU[—ûg•³åõ«@rMM†SÔ²-ÏÖ¢‰%6™*Ý5rxŒÖî½ûUhfHíŒoÀ1Ö© ¢m>U–*…ÇaV‰U.&DgaŒœUò4˜ÑVêðÛ¸_,zInöº®ÂKRßÅæ@qÉ^EAdægÜø;8X Rܤ8 ’ÇøGZ#¸WrŒ ·¡ª÷_.£ #å¢ôµÀÃ;‰æ‹.¹¿‡5nY’"7œg¥S¼âþíK¨œˆ}Ú†Z71+fëO’xã ½€ÍQ¾ɇûÙ§j  O' f•€µçÄljó¥2ÇœúÕ ÄTµ‡hœQz‹@UpÞ´X À®zc­(`IÁéY÷ŽG•Ï͌Ҙå[µ1#*t4X çšdñ¢Û¿iö©qÚ¨êeâdG ôâJ¢®rGzv8ªw.Ëb$ C9¨™çûŸÌ9â€Ñ­ïPÚÌ^ÙdsÛšSwÀó "¼º6áU~ów4Û‰&¶‰eó ƒŒƒF¢±Kn¶ýßz¢æxÑáKF1LFÌOæ"¿¨ÍIPÛÈ’Ä­Ý銘ûR QK@ÀÒ SI@…¢ƒÒPÑERf–ŒPEPEP0¢Š(¢Š;ÒQE ))i)€u£¥R;ÐN(¤#&€´Rö¤ QE!”i)i)€Ph Ó(¢Š(Q@…¢E&(¥Í€ ÐG¥ Ð 1KÀ¤`{SF1@¤8íKü4€SGjEäS€ óJ ƒUQÆ‹c4êBÏ-ùÐó/”‹¹©Ø æŽ C¡Ø£ 0ê*F!±ÏXÒ†¨á˜J»–œí±K‚4£¥E âe,£Š“8  0aùSA–ŒuNèáIäÄGÜæ½ö¦"(àŽ7Ü£š˜6hé@ë@ 'ý³êkDÔfÞ&9(3ë@29fÄ‹žX•ÊH\œÔëm¸p9÷¨ä¶Ë–öÖ2Ñ•:“ÀÍ:Ø/ØX‘Ç&¦H–4Ú;õ5ÙdXÚ0ãiéO@ÝU´ó‘ÐM´,lßo^@§¤r¥£ 5QÌ‘2ciÎE%³©•FJ°ëžõ|ÃÓš¤Qå–2cÚW©õ«ƒ½ 7éP^"ÉlrqŽ•2ð U.²Ì ëšHctâ§vyozºË½v5˜AzY~ækI$ ¹S‘NÀR±“ÊyUŽ5fÏî3¬sT®­Ö£ÖˆUTv¡ˆ~=i’:Æ¥Ù°)ÄŒâ©êYÂÐõ¤2t¹Fe^Fzdu¨¤»ÅÐA÷{Ò<,Æ"d\ cŠÀ:ˆàUXW4 ¹ Ðiît¡>ï5#t Û¾yâ Óóöorjiùþ•6dgôÖÀ\ÎOP~”„V|¤D#(ä±8>õx7LÑ`Š6¨è1ŸJ3ŒŠ­s9IU ÎM ,ãžô™É¨"ÒÒóŽâ›çH±ù¬CéNÀZÅN«ô#Žj5¹"E&Ðÿtæ‹Ç´¥n$c­LÍŽ§ZƒíKçù%NGztî»=ØcéH†t›;J“ñ¨#hâ·o/§Ze”æ`Û±œÓ°KRÌp êÊJŠ‚ïPÀzÔÑ"¢N”€ÎAz¨^À¥#q@ wUÆæëOVdGµAr¨Ð¹lÍ<l2hÎqKÅ7ìs@4´„sK@hÍAveDßsP%Óµ©“pßœF ^ÈÅ(“ëQBe)™1¸ôÅVRƒÐ½0.í³ŸZv1ÒªK<ˆê¡2§5$’˜`.Ë’;RÔ © hNJ‚~• ­Á¸BÛvŒàsH—{î !MdQÔU{‹±nFå$–)<ÄFj°6{ÔPZ¬!¶Ÿ¼sSšg¥9íÖeÃpGCL†ÐG wbíÛ&§¥÷¢â*Ëf$œI¼ät³Û £›y¬Ôfd`Øl×Ú‹ŒªÖM*®eÉ^•-Å£M  qrjh¥Iä`qOÎ(¸®lå•P\ ïLžÒæm™+òôæ´G'Ö°íEÄUžÚI£CÀt÷§C-Ë>׌*ô&¬Qšw PÕ7¼jˆ…½Å]ïJ:P2Œ¦G°ˆÛqéMo4éþQ‰‹cÒ´()ÜEko³äB1Ç4ÿ°Ûóû±Sûæ”W•õ³:#D3åôO0šÜÆ÷‘ŽE_¤ïNàW±€ÛÛ<·SU¡»œÞ˜Ø„ôÅhýhÀÎp3@¢ii %)¤ BÐP1qIFh @h¢ŠQEQEQEQEPi -›œRƒš@¸¤´ÓEw “­88¨ÓvpÔüQNâŠC(Ph¤¦A¢ƒL¢Š(¤¥¢€Pi( @) ;©ÕXy4¤PÑGQÆ(äÓÎ(&‚(8Åâ—µ§¥"ô¥Í4)q@ š‚ô ’9õ©j ÀÌ›UK}(@:Ðÿ£¨5 Á­®|ÑÎ{ –ÓpŒR¦&Eëy;g¥4!mÿ};Kœg·z–äâ¨v_œƒOš_Þe;©  -BªycïM-ßËnÕZÊLÈÓ“Ö¤šBòl(ÛGR(°î-«*¡Œu^µ:óT­°Á$žµ¡ŒzR`„”ô£½;ŒC(^Èw¢¡Ãf­Gƒ½U¸*Ò³ŽBбjs ’y=©±PÍ!ÎN5Y.$iŒ{E+k©§v¨!”É»åÆÓÖݯ8R@êE;É¥q–=)±Ê’.PñL’A$ WEG`súÑ`,æéL‡F=iãžô€ZN§šZL`dÐ; žqIÈ sšLs@ À ž‚‚1Þ¢™¤|´È=hF$¤ETQŠEuêiØÉ¢àF`RÁ›’:TŒ2sA¡G½ÆãŸJl°¬©µú{S™•‡çN#Ö€*‹C½I•^€Ó§¶i$FØ w«$ RåEÀdhÉÒriÉЊRy£9¦3ï0² É5Zdû#ÄÈAìjéëJzP˜ÓG+D˜„®ÏÖ®BKF¬ÃÒ¥ÏqEÂÂäf©NѼ¥&\(èÕwŠBªÝT­fª³ÛÈ ðî*G‘ †Ìá€Æ*ðEÓm 6íƒ4\,Q‘YDOb*Û´eQ›¦=ªr€¦Ò*³\?'‰âÄW'v©ÇADAÚòBH جÓÍÞ ìiò[ï}á¶¾:Š.‡b(á1·0$Œ‘M±âÙÛ榎]ÆI7ã56²Däoù=)\,CjU”• IÇ5fÍ$9Ži>Í,eŒî Ô–дjÅÎYºÐ"V'nj+©Z+feẠ›¶*9áóà)Ðö¤2+u‘f'q\“M²ì£š_ônaò¹Æ3E‚¸ˆ£¡\qÍ1 i¾hd ü‚phÓäwV IÁêi°yy‘ˆËN &žY‘”ƒšÐ$ÑšSÁç¥4g“Hb>m#ƒÅeDVÍ­÷sWnåTùI9>•^òÖu?9ýj@ƒÇåY·êb¸I@«WãUn KÄó öy¤€U>mÀ#¢Ÿx7[IŸJ‡L_Ý=ÍOynüõšGÙ½÷‚ÿ9 K¦0O;ª(ˆ›`ð}è° ª²1OºwX¢Hò23VÆ#êÜh²Â†F)ˆ‚ÐÈ·-6F:g5wÒ¢ŠÚ8\²ƒ“ëR—Å&0fÁ"Ä7;)YyZ«}>Ò§‘È_Z@ZIREʰ#ëÒš‰Í·õª¶NäG@­ÜSl†Ù§@è)Ø |³È2=Tš´¿2dw¬ëvižbÃy ž”¥¥¶±!ú“Íú2ôÈ'ëTµEÜq“Í(µv‚7‰°üi/Žßå$|ƒ@À¶ Hz€ëO-Q@¥¤¥ï@Š(™âŠ( aFh£­RÒPE.)(¥¢Š %)¤ Å-R¢Š( (¤Æ)M%¢Š) ¡@¢–˜¤4¦’˜ EPEP!qHsŽ)h4 3÷;Ý&ñŽjÍÔ…#O,qP6MøÍ:ôüÑ}j¬ “÷[‚yëš’áˆx™[<Óo¸G½<äÅÞ‹•Þã Ê÷©e‰5\±¨Ã´RˆßÝÅ6çts sœv¢Ã,G.X£€TµN2'¸ósŒtsŽi”RâŒR8ïKùÐ.=(£®i$ ÑÜRàæœ3@Å Fw.sêiÌ¡½:ƒNàAm …˜ç©©›œŒã4 Z.Âag=wSn–Vu(NZ°Iȧ¦(¸®B¨>”¬¡Ð©<1Ò–n-ÄQ6Öb=*k8ñrrOj°T¼Òðb˜ ÍT»9RUã×l FE‘6°È¡#}›Ž¬3L°Ã ?Yjà•ÙŽIWÚ¨ÄCmþªPNFN*K,}‘´óÄØûÑo CFç4\­QZÞ\ôÍ-³hù=(Š¢VEi=hŠŽV\Ñ @$’)Èp½)Èf–Õ¤ó1· õ¥·¼€ÆA=$nÉdÈTçÜP%K–û vëŒTfwDG.=E$1™lŠ÷©RXÖ»2ã‚1@ ¡ª §h¥ Så'¦Vù~íS¾aæD3È<Ô¡“Ü\~RA¤7h åHÏJƒPÿ–~†‹³û¸¹àU`/ñGbEV›Ï C ZtR\ı u•€¯m²IŸÎÁlñš’ћϑ%â¢1‹™mÛÀ4ë99¼‡úúÓ°íF1Lc´d‘ÖœIÛRZ1M\‘Jç aZ:Ðä‚1ÐÐN:PGÑéJO­Ôb€)sK@A@4hã8´v£4”p¤&ŽÔ„.i{Ó Ô”PzÑA AœÑšAÅó@ Ó¹¤â‚3Hï@4ÜÜ QG€ÔzÒñM1@é@ B·P ¨8¤¢€ ‰œí¤( Ž )4¹â€Kí^”¯H0ã"œ [ÅnEÆ{S œ;÷íù³œÔÙæ—­¶ÑÏùãÒŸ"$ÂçôîÔ½¨Ï4€Ù¥¤4,G ¨n-ÚGWGÃ/JŸ8¹ãŠ«³¬­$Œ °ÇË{iaÜCUÞô}(¸Šb `•š7PiÏnó[”áJ¶qE0(¯ÚV?(EÏ÷³L¼†fh¶®ý½Mhö¢•À£so$±£¨Ã¯84ø§¸ªù;êM[¥ïL ætÚÑÏ\UÈK4(_9Å<ûÑž1HaAéEPF ¥®ª“޼U‹¼Íh¥'¸«üzQíÚÄfÛÊñÚy~[nÆ-…»Ç 3¹Žjî¥- BÞæi.Z7\(ö§]ÝKlÃbqŒ“W@@¨nâ’h„iŒ´€_>%p:ÔëÐTpÅåD©œàT”´PiŠ(½è¢Š%Q@ÂKŠ( (¤ëK@Š RRÐi(¢€ (¢Q@%/jJ))i RÑHf}¢Š  (¢€IJi(¢Š(PyÖŠ(Ÿ‘/Ÿ¿Žµ%ÄFA»¸è*Çj ;ˆ§)kˆŒu&qœ«Á«XÍqEÀ¥!ó§A T„¦ý1ÅXU ÐHñ,„ŽôîGM—`'J½éQ¬*­¸dŸSR)\h: Œ\Ã’ `Šy¦ìNè?*Q•ô§þ4\,UI11Î(ŠóŒ²`1è*ÖznpØ<ÑqX­w’Ȧ68jÊ‚#¯§Ê”p:Óƒ;zPçÅ;4™¤IéKžsH3Œ‚iÜP[– ‘¾—½®hÎãÅ;ŒSiV€AÎiGÞ¥šP0s@ þ#@¡¸4ƒƒ@^¦ŸŽ)‹Á§æ€šœ:Òw£?5.yÅ.3MœÓ³Å' ÑÎiîiÀäs@hô¡q¸ÐÍ@3Í(£© u4œŠ£¨4(ùO4fŒÒ¨ã“APÆir8¤?tR‘À #4½i¤SñÅ&):S…!ZAÖšh7»y iëBóš@;µÍ1ziGJ`8Ò'9 PMž)£­óŠv8¤=(÷ ƒ@™Á dóJž”î 4´ÃÃSŽ1ŽZ}5×'é@ëÖ”ñÍ 攎(íšf€8£ž})ÊÙ^)¡¤ @ X)Å8sLqÒœ§ŠuQ@£¥Pš(¢€ (¢€ ÑE¨¢Š(¢–ƒ@ ER¢Š 0 (Í€(¢Š)(¢€ )3A4QIš) £EUQE”¸¢ŠJ)¤ BÑŠ;Ñ@(Å¢€RÑ@ E.(Å¢Š\PM¤QŠ`% ìQ@ Š:šZJRN8¤QÏZ‚©' ¢6YTäPµ È¥'ž)F(¸Œ qéšÉÍš" 6¡˜Ÿ1†}ê| ´/\ ße#¤Ì 9!•[&RÃÞ¦  .À✽)¥ŠCTl¹šO­\|•!zš«oo,2òASLL¶¼ zVt[šæLš¾X€p3TMí ˆóBjÝ€+~4Ï1þÛå†Ââ£çiÆðBžÞ”÷;Ï0‚WÀ‘&qxbnF)³\ºÜùas‘Å1$ݸ©†JÊ5%$ô‹ –+‚#v•víýi>ÐˇuÂ7CI|¥¢ù}zSnJµŠ€FFi§¢±ƒÜR‹…À$§½C8Û§€}©d éü08¢ÀYwUMå°½ihÙ°Ò¨JXÅ’yïS$2£—) åÜr1HYF3Á4ŒHäUmDn¸=iZ ¹ÆA?ZQŽýjœªÙ‡x ç4Éço²GŒå¸4ì"úsÈ.GAYÁ]^3l¸ëšYKý¸(n´X ý;qHÀÏJ¢ZHîü²ÄƒR3™nü³ª3E€‰”& ª½Í^nŸQ‘Dw¨}@5bc+8Ûò®:ÐÚ¨m%iQê§\Lò´b0JŸZ,ªUëPA1—x+†^ÕZÒW°9oéE€ÑÎ3Lž_%7H§H:T7¿ñêßJ@I‚XÀiÃ¥Ceÿ«NÅ’7ŒÐ«ïGSÅ 8 w8¤BpÆ—Ð QÛÖ‚(E”cµ(Å!¦‚I#¸÷ qëKU¯ÖèqŠ[WgYŽI  ð1@’‚ÛW&€Š1HE°3@ Ã"ŒqH­‘J84c4´g4f€rN)ßZ®÷(³È94é.cÂ3s@ÿ$ñ@o×ÙåSdF[Œt¢ÁrÌç̱f=ÅGjå-AÁ ”Œàéýqòâ™ ¥,2ŸxP2ctÈÑï@Ó5q…zÕyÏÏÜ*ΠAµR: +žÙ˜À ®ó©üœS!uh‚ç$ZyCJ-¨È~Ô¼´Bì98íMšèS$g¥W³BóÈ ì9©Z$K9„n_}©-œæh†ì’;Õ’*®žGÙ”ddÕ¾Õ, ÛÏøþŠŸsšá_©¦ßôȪê¡ÚãÒ›¬ëüÄ E|” â¨\÷Ê€d/cSGo"Ý`ž0(°ËK*C }hÞ¥s¸cëYöQ#\ÊÈRp(²…]æ œp3E€¿^y¥Ü§¡ñªzvI™;Þ¡·ˆ5ìªIŸZ,˜#±¨…ºý§ÎÏLUXœÇxbÉ ŒŠe»7ÛÊä÷¢Àjg·¥ûVdÍ/ÛÕ N¾e´s;±`:R°iqŠÉÝ#[‰–FÞNqÚ´!vh”·\s@çZî3,$î*WœRO'—8ì*”k$Öo)s“@ÒÙš6ËÏzЬí,þí†y”ÜùÍ'ÎÈ£Ž´Ähô¤b@ȪÖ3´°þó;ÇNµ`ã†U¼’dŒŠ;Ñ@Q@Ph¢’ŠZ))h¢ƒI@ E!ô PÒf”ÒPŠ R(ÍR¢ŽôPEPM%-((¤Í†R¢Š*€(¢Š))i(¢ƒEJ(##½ ’ã÷ê‹È=MM$‹în•ET-èQЖüð£ÖªÀH.F@`FzSÞT€c×¥WºQöhÏqNšÞ2qŸSE„XóQ_i8'¥89$ ÕUA$êí cŽÔ“ü×1¡ééE†[ ¡Í.*œŸ¸¹@¼+u«›³ŠV {ÒUy®Z)”ÎiXeƒT§ÚoFy©„êXIõ¤key|ÀÇ9§±$±ÄˆÅ€çÔÓ¼´m·=jeâ—Ñp"XBÂÈKw¦E-»Føç¥NNM+{t¢ã±YL±F# “ØÑ*ºL’‘ž>lUÃ¥!¢â+¦f»BŠ`m·¯Û#­\8¥À'8§p±Nn“-VLñ¬ ù¨òã ¸ Ö˜Öèòù‡9¤Æ‹Ù17ÐÑÐÓd£` *éLJúŠruQmnð6K q¶q1”IÉéUq C²ü§EaÐQm…»‘rqOŠ‚ئE‰rÌËÃQ  i˱b0p1M²g˜“šX‹ÀΛ ÉÈ"™lì—,¿ä(~U¦¹1Î# ‘ëRÏ2À¡9¥`¹-5ù\ŠlR‰c :R“ÚÌéÕ–émĚѕKÂTu"¨Ýœ^'¥hà{ÕPRæm¿ÃŽF)Ús½sÅI<éÌjÀÞ›k±ËŒƒÇ&€.b0Î7¦hSɪ7H"¹Y1Á<ÔØeýÊOÞd/SŠ‚(‘§2.qÚ¢¸¼>J§A@zŒç5FÌ“q($žjH˜Çtñ•ÆEGgÿSUX Àw¤'V7Þ9YäÚSg4¬½ê%›t¬›HÇz˜ŒT1\$²2…ô(ëKš„ÍÈQ›ž’ÆíµXé@Ï­!8Æâ(ÇIŸäH~^Þ”-@¼#®E(ªHq{¶3”"®ûЩ§Š2zö¤S’hÝE&xúRÑŠ3Å&ëF( b€?B‹ƒÀæŒÐzP@¸Ú1éH±F (Í( ymÆÁŠV†7Ë+òúS¨h¸†Åq1šx£w&Œæ€"–Ö9NîU½E*Aq4jN­IGN´\ ðÚ_vò}X\ƒíFsKš«qjg8“t«†TÎHïKš:Ó¸\Ûq,m†±G0¼²dã•?j3“Íœ6ÓG,Ž~jH-î!w © Éæ®ž´„óJàW²†H̘ÃñUá-öùŠO¡­pMf²ÇtÎÑ““Nâ,%»ùÍ3à1TAqϘS9â´»wü¨f‹Ÿ4Sµ‘cÈnH̱H‡Â¥îiOZ.|R\@žW’XŽv«ë»`Þ>nôàr)zÐ2Gæ@È{Õ8šX`h L}­ôf‹ŒË±wÌmeZ–-ÖrH2ÊÇ#|SºŠAnï"³:íÉàT¤dRÑHe;ðæÜ"©$œœT>®…GC‘V;Rw  ûXM½ë¡+Ž "ÆáåVŒ³1á»Z'×Ò‚O‹ˆ£§Ç%»²:œÕƶ‰Ø“ÓÍ.h¢50Šô #­ÔžX¸Ä¶í·¸Í3í,9A´œu«\5F%„ÛæCøf®¦<¼(ÀíHi–5ËU[ɕ Ct"‹¬ùðƒÓ<Óµ m‰¸Îy¦†[$*eº jMœªú>\`gæ•¢‘ÝåPjÖ9ª×ëû’Üä´*½ð?e|RC"¶ˆIo¸±Ýž9©íC¬ ?\÷ªv±»Æ¬®xn•fô°·, zPЋ$þt£¨ª’°Š@瞢¤œ0Â\c X XäÒn^k]àà¨çÞ¡Ši^6p@Åð`zSºU[iüÈË·ëQý¦W¥LmSÒ‹v”tªíuˆñËv4 –IV9@Ët"\³ŠJ ¡’}²m NH d½è¨„Ëåy‡Ž”ÕºBÀ`€z@®N(=i’ʱ¨.qškÊ£ø†{P;“Qši`'ŠE`Xà‚(ôƒ“FjµþVêÄé@»÷ j­žãfbsV‡W-H °:fŒb›b‹¿ƒŠq4À4™±Lž%A*O=¨üdÐy¨"»I³´)ðΓ·´Îi@ç4¼PzP:£lÓÃ÷ˆ:M'Ò@¢“µ!8Æp3êhÔP)(ii:RçÜP)i3øRÐE%-QERf–€ AKH(Í-Q@Q@Rf ES¢Š)QŠ( IE)¤4Ph))hÅ%sE!”h¢Š  (¢€ (¢€ LÑE Ñš(ÆiIH7Üôûàv©ì IöE¸1¤•ˆW4î"¯øôø¨¦ʇŸj‘á’E@wÍK,;á #¥äùl¤õÇÖ’bZî,ÒȒ͵Y0½:æ=²Fã8Kî#ß&­/*>•Nà‰¥Œ!Î:ÕÐ0Ò«]¦ò9ÛVª 9¨"’¼M¹@9Î(±_Þ>yÇZ« \v\Óì:Éõªb-Œtà~4§Š©(Œï`ù`: z³=–Y¹ÅHÉûRcR5âVzàÓå’Uº©àÓÍ:Õq<žiˆ¨$w§Á1”º²à­ ’fF]¤c½?Îj8§Y—n úÐn#€I÷¨P8¤¤2 –= Ôœ)æ€:POJëA { S¹ùncÚqš·œP…4€OAJ9ÐA<HòÐòTJba¸#¡¨^̸“$tÍZ&u D-™É$r¦Çå×{ü¢¬¥Ò‹ˆ\üØíQÝ«¼EÔ”½© «i­‚)oC¼[T“Ú¬Gz.{bD*¥#Žj¬ŠèÅCWÈÏCKÔS¸ŠVÍåÚ°e9ËfQk"žn*ò€3JUN8î;,Ô›wQÔÔ¶OBUÈÈÎA«!N@Å4ÃJi\,U¹ýêE Ru)û1‘±àb¬]›ù}*4÷*ŠŸ˜Ö©Ì¾lŒÑ¾×N£5tõÍBöèÌ[ž´RVg²Ï¡æ¤¸ì*A°j«Œ”ÔBϱrPrЈnNm"-ÉâŸ{Äpàb¦–$[2:TrZÉ$jòW¥@-Èmˆß{8õ–lŽÏ´$ò)훑”ƒ´r %¼L³3°·aH #5^ÿ›B}êÑ<«:¼–¥UI&„1l?ãÙqêin¦ò•9=*+gh ÚѶE3Êy ‘Šsœ,’`…e2¨4·Sº¢IùN8¦Í/™h"ï8ÇJK”+kÊã4À’âi!dƒŒæ¤¹™â…dQ‘ß5VîQ-º*zgŠžñÇØ€Ï$t¢Â÷;mÖB¿3t¢)]äÚéøŠƒ15¤Jü猎ƒÜ®Ê+ïR3‘HeÞ„R¶ŒÐÜ)ËqH × mtȧ«BÄq…Jxžxž~„tÕbÎo20µS —RR{Ôº—6Ù÷¨®×müd›P´ühXplÀ^Ê«¦¹øæ¬Áÿ`îÕM;ïËH.i ^ýj2ÊælfœƒƒšC"½Mö¯íÍC¦€Öù<óÍX¹èÒéUtÓûƒìj ·";é‡Až*ê0$sÍSAÔä =éCÔvòžÔX BÄæU?1ê3RƒŒ¥+©Hž¢ž„ÍzèÇ*¢•€QSTÆ «üŒ £·f¨¶?¥]‘Í&¨ôÒ # Þf"€Ê£öªšk;‡gbFjK©ÆE ±ã^)W)v¢ŽhGÓ=èéšDË.szT7P™c8$ÈÅJN×Á#ðr8 ÖDl­nѱ"Lâ­Îíkj¢0OiØ ™¼Õ-Mq¸ŸQLxÜZyÞa/ŒÓÞO;Lfö¢ÀKjÄÚÇÏj°¤ãš©eͬ~ÕlRh¨gftbØ#ÐÔØ³µÝÜDA#'Ö€/6TŒ”òj†¤vÄŒi³¡[6ãæpsšvC9|zTW“xK/^•¹EI“•¢áâžÐ³ÀúÑ` ”[ „äž¾Õ=œÍ,˜`çœa¸Hw}èú…«ösyð.;P"Ø9Å$6;P²&vîô¥ÈÝŠCš(íE ( 4”Q@” Z(¢€ŠN´´¦’ŠZ@Qš¦IKIHŠ( Š( ƒE&h£µPqE- £ES¢Š(¢Š(”RÑŠJB3KMpJ§À<Å/°iõ^ÚÚH©Ò®IÐÑp* 9…ÃJgµI»‹ƒ3àœtg4™é@c‚UºiŽÜCJðÉÆX1–à©«©Ò’1͈†ä],ÅA?Zžéfh±Þ©Á§?CK“ž)Ü ó %ûž¹ßÏAK¹s·#w¥/z@Vk5iËóÍT[V7˜eb„õ­LÔâŒúqLEÚqŠQÖPy¤%´e¾ò“Vnaó£Ûš—p–_¦h'<ÑqBN°y%3ØjO³²Yy(1ëVM§P2½”RÂ$Pj1ȽÉ'fjîiGL÷¦žµJöÞ[‡]»@_Z·FB©,qH ·V¯4* Œzl¶³Él±n^:ÕÅ`Ë• Š\Ñp"Ž Bˆø%E6êÛ·`àŽEXéKô¢àRxƒÊòrqŒæ¥´¶û<{[©äÓÚx×’Ã𧣫®T‚=hI´÷ûP‘XmÎj蜜Òâ”b€µQ@Š)(h¢Ž”RQE-‚–€ âŽ(¢€ (¢QL4QE (¤Í-™£4LRÑ@¤¢€ (¢”h¢ƒLŠJZ”´PIšSI@#}ÓšZF¦;B äÓïzÇR%¸÷©?JK”2(ªÓÛßõJ>”É7o†–Mó*¦Ò0y&¥• *•ÙNà2SåL…†sSH7FpqÇ5Zf3º޵fA¶>Ô€‚Ë£ýjÕU±#}jÖ0i1ŠxBì:qÖ¯·J¡vA) 'h@uhÏCÈÍYŒô¨a„Å!%²qDªF>f B''ð⢉]AsÎj;yí‰'‘D3nÎç;iŒ|ù³#`KlÌð‚Çš†V‘í™øŽ”ûv lô€'ÅjsÀ%p¤ã4öš4l3sR´S#•$ÎÓÒš(ǽ*)Y„d¨¦ž0ä9—Ú£ˆ4qfFÉš•YYC/ ÐÁúR=(è3JsH…UPÒ™å&ýÛFie%bb:ŠŽÚC,[›Öž +ÛÆï¸ŽMÛG#sŸj–Ž)\,!L®Ò21PAÐHBúUŒf–ÀíØ>èŸoµI BÆrO&Ÿž1@¢ã#¹Gt*sQF’<ÂGPάµô”&"²«Çt\)e4‡¬Å VÁ4u4\ YazΑœUÖµ=„N¡É?)<`Ó".á2HæôíI§YäBIAÞ˜5ìõâ-¡–_0ÈA8«Ѻ‹]­‹¸ivÞƒ—qÊñÆ*Ërh4îj¯ö`„üäu¨l’HåtfÜ=jÖ8Å4(SòàQp$éÍCu³®ÄÛ´õÍHΪ¹cÇ­Ê’ £€‚ÖaŒ«àŽØ¤’Ô¼‚El8Ô%˜H [ÉÚ¬+qKš.6Ö¢ÝHÜXŸÈ<ƒÖt¥Ï\œA‰]ËžÀÔ‘À‘.Ô¦ý +—#®(Žå$rv4ÀIlâšMì}ª]£zSºâžqHšZAK@Q@Q@Q@ ëKF(¢Š(¢Š(¢ŠJ@-Q@ ¥¢€ %fŠ)(¢Š(Í™¢”¨¢Š`QE (¢€ (¢€ ;QHiN?øþ8õ§]äK÷¢8äI÷ìÈ&¥¸ˆÈ£yOÄ2ûýRŸöª9Ën‹<ñO¼áP!êM:xñå·÷iÜÈq:™ úRÏ1%O™tC²95aåXdóЍÙÆ ;‡ZÐÅQã)9sÚ¯•˜!*¥ápà©#ŒÕÓÅW› "QBJZÜ·R)¶²<Œû»†ÜåÚ>Ù&¥²Æé~¼S°‰Ï™ç>J“½@%´ùG§<çÌ(‰»hÉ5#+˜ã,8ëB>øÃŒÔfA-³žœt¤‚UX@ŠZFeU N¡Y_îœÐ÷ëBª¦JŽOZ@A8ÈÏ¥(<бži;`Ð@#µR%)xÈ ÛŠ·ž¹¤ì1Aæ@*“ÐP^€ P8 ŒÒ¸ 0Dy+I)%G^Õ!u¨Úx‘ö³sL›e$ò@<¯g ·»SÖDcÁ§š`G >VâNXÔ‚€hêiY’U‘±‚­ØÓÄìÆ.ç¥L8§t  DJ¶¾VßZ|{£³ùð*Îh§p*Ú1Xö Z´NG½&3ŠSÒ5EîzQv7ˆä*:Õ²¡†üM@ëÒ€!Y i`É=ý*)—,òBø#¨ÏZ´ˆ¨IPFmãg$¯Z.HdXõÅS¾Î@w<ÕåP¨ôÆ]J°ëBl¨Ì~î6óQZ’od-×µ?ìÙ $‚%°c½[kúŠwB³#C·Rp½\Q ¶ËµMQ,Nç=M ¶VHwj.†Am‘w ãµ6LÅ),¡ÐœçÒ§Ks¬û²Zšm\FWxÚ}hÐVc/B›u`2MI"¯ØÏ²Ñ4àTHc•­™OSÆ(ƒæÓòI8§ÚÇ‹PÀži#‰Å›Fõ-°—Ë˵G–›e Äàõ§X³0§FKvËnäK`d0#'4–J|ùO¡©¼ç¢"Ò3PÁ †êE`yn8¤iÔçаÓ1ŸÊŒÀdæ–òÝpâ Cäß;8Àn†•púƒ2ò uX ~ÔEÃE³'ô8â©@ì·¯~SÒ®®H9©#åpiÄP˜üiØ Ç^êRˆÁT“޵dò1Q\ÿÇ´˜ì(¾œY %‰Îi5Ê€Jgš4¼ù ŸZ}܇ñÍU€Šm5¶7qÒ®¦pûØæ³æ´0/™`޵f;€–ë$§¤Ð œ¿@ FMM8o,”ï×éYóLv´ƒ«ž>•¡Eî1Þ‹QHi f5ÙŽ½éÚtŽÅÐò¥>òUB2¡SéE©Ž¡ Xd‘@:M&Fì iÁ‚E9@¥ Æ*ºÉn÷ëXçµgä_åéíNÀXkˆÖ@Œ~l~t}¦=á2A=3U®€þÓpíEû(ºƒiéÖ‹{øiÕǭWšd!’]«Ž”A*6昰ÇJ©¾[9¶åIíRÙå¹iK|çµ%«ysJ&<“OJ=÷áâ^æ NO4?AUg»ògÙ°‘ëVKnPÃÒǯJZE9ZZ)i( ¢’ŠZ)3K@Q@Rf€Š( Š))´RRÐIJi(¢Š(¤¥ ÐQE&hQEJŠ(¦EP ¢Š(¢Š)€QE!8 8î)jª%g¹PríV&qe»ÓùïAëÏ5_ÍuUwÁ Ú¥yUSq¢À8"ƒ£4É!IÜ:S>ÐWnô 7J”º¨Ë½)j&Í3ò’*Ê‚«ƒLYQºŸ@õªò+ùèÀd °OZ¬¨ayzRXœ3‚ç<Õ®½Å/éÍ;ˆ¦²}»µ:ßä¹7ñzÕƒ¢‘âIHçÔPÇäHD1ýŸÎ8ïSˆWË1އ­4Û'–S$@ fO" ù9éDx¤:Sš ¢…lé@üá)|žüQ  }¿Œô¥ÅAà­:H™nˆ3íLD”]o1õ‸ËrÊ€¢™”¿ œñO#ɸg •n¸¨„»n÷° Å^Å@òâaà·½N+õªl¡o78á»Ò*O½]qó/¥Gg#¹|’yïRF±os\rj+6 \-Å1@ª3cû@qÁ«ÞõŸuÿ¢„1×£d¨T`žÂ­– Š[Šo»Ã7Ì{f¢‘‰¼D?t”aY_• ý){ãúÕf>Uê… :Sqÿ¹8"•€·øô¨äŠF™Y[åª$Ê^”RvÓ®$u¸ˆÃQ`,bŒq’j¼³p"CSB;Çp"vÜÈ¢ÀXšZª%Þ˜óòâ–)ŸíF' ÷⋾s ¿(ã9ªÆ¢¹êELò°“b¡nù  @£½G¡Ñ˜»Ôf«ÃpÍ; â‹zŽôëKHbRR±2M0LŒ@ 2z x¤&†tQ–lf…euÊhE©7.HdPqœñ@ëKõëMÈõ§:Ñq ‘š^“54À^(à“êi¾(ö¥qØVœàgÖ€ˆNJ­!{ÒŠ._ï б¢}ÐÒŒóJh¸ÑF͸¨Í já‚Þ´1`¿(ɨmçi$ue¯^h÷·‰›%y© 0¥8óM"•Æ5“x+Î F–‘¦@ÎlÔ–ªâh…-’0ÁrTkc\nlzUª+@//q#¶i°Û˜ƒ/˜Hì*|‘GA𝝒ìwd¢šmnHžÆ¦–E—8ÏzTƒî}i€Ô·ÀcSÉêj8-fˆ$5e$2¤CH«Õ€ö¥p!µ·h åÁÜi‰m*\ï2eI«!èr=©{Ó¸ 9/ÇJmÌm,E4üŒÐ²+µ³ŠWHd†#íQÇm4s4›”n5o4Qqá¶1ÌÒ±%ÂNÒ¯–~^õk9™§qùÄgn7c­Cg,®Ò,‡$³MŽ4‡!2ri\ *…i"(§â¥'<ÓY•FX€=h ;w·RÁÏ¥K4+(Ã~t©"? Àý)©p¦_+Ô\}•Û†”•ô©šd ´`Sþ´f‹ZêÐJЍ‘Þ¤HvD1ÅKHeN›ÅŸöj6K;iðX¤‡VcŽÆ­dàQ{óEÀ£=¬Ír$Fã<Õà:QE/ëP 8–_0gvsÖ§úTs»F™DÞ}#[ÄòodËzÐm¡'%iñ¶ä F ê)Ô\ŠP=( P2)ûÊÖ€ 0µV¸¹+:„{‘Mšw¶‘7°toAF \ا’ ÑéJ@¢€KH)h£šb8ͲŸLT30hã8§M!0*Ôb‰…¼`Ž”À&*ûKeqÐÔÎ9‡#ÑÈL7QҧݲÏ\s@8ýì{z÷Å]ä §#…d‘x'±«jrzÒ`;85ZêY#*AàÕ“U/OÈŸZC$ó]ùSéS‚C†¢“›CþíGfø·˜‹TT"à1Rœf¦ŒŽ”†#0A–8¦‰€ÃŽh¹Û¾yâªÄªm èý\<ÒÔ6eš¶xàf¦àŸþ½-.i1Žh#4€ZBê–‹€”Œ¡ÆNÅÀj¢ Â€*1o}áy©©:u¥q†j -¼¹ÍX¢Ä$cj’qL–-î$^Tƒ¥\V'yÄŽ: d© ¹óPgŒUš;QqcŽ_µ‰pG­-Ó~þïSHYcbƒ,*˜Ó˜Æ>e=1L ç;•› "âé2UG\U¿á¯®iqÆÒ•À«!òï··Ý#¦«¨ÔIåP ô¨Íªù»Á#¿\ ÞTFÃNõÇ>•NîÄ7;ªÒ‚jUÔXìAÓ'šÀ®‘q·Ÿ,bdÚߨ„3d+H Jdx{÷Ȩ‹÷wíû§œT“BÞp–#†Æ4°BË)–LoæeEÎ;Ô6yk™Î0I¢Å‚4ªÇiÝÞ‹Wk›ÓÞ‹ šK²²ª ÔÓ’U’=ãU¼ã › ªëKbshÃëJÀJ·q08'Š–)U܇"©iÀ“8ü©l³¶`:çŠ,+–æ%$nÎ:àT‚D)»pÛëUl@’V–æ™tvê‘¶FìE†[Y£s€Üÿ:’ªµ»9‰ƒ´vïS]¶ÎGP(“ÉBàH•2Ô+YmašX‘M–p9&;&Ûèi€Z¯‘3  S-UgVyâO«S©kvž8ªÚo¸=Aé@ gû5ß–>áéW7(ê@ªWã7q€2h¿P$„gàâ‹s(C|ÀŽø¦À‘.|£œõ¦ýP>Üü«Y±MŽ£¥+u¤@pXf•˜.7ªèÓ[¿¹=}*IЭ‡Ìw0î;Q`.nØ ÓdqlçœΪãvšø¶õ§Ã‰,>sœ´X -ç¦à1SµSM ääIæ­ànäàúRh>Õ Òî¶|ö©Aæ›p¹þ” «¦íòO®zÓ]ü½OqéŠ4¾#qÞ‡5%,rªj9‘ŽÒß7¥H§­P»$]DW©¥\y’¾@Í+ÛÆe¶b½}ª¬2@ÖŒ¸f:÷«778 ª†½UŽÙ$‹~pÄg"€·d$'^ßJœà5GM‘Ø2±$Œšº>ý+Y/wÏåŽE> †–VR›v÷ª×è`•gŒòzÕ«5" çï74c5^îá MÁAÛ‹£ Êsž¦£ÔM¸\üÇM;%¯š täTfâcmç’(”™4ï•y qQv°ò¼¦ÜF:SÜ3¬ Ú­8\Ež$SøÕ{x<ËEŽ`F;t©•¸ÇÉÒ€+߯²Ì¡ óOL…šKyTܦð¼Vç·qr³D3ŽÙ¤š)nЇ]¨9ë@‹hÛÐ0N5åხH¦ÚI,‘æaƒHe¡E&h 4´”PÒfŠ(Í-%fŠ;Ñ@ëKIšZ(¢Š(¢ƒHŠAK@&ii(Í¢Š ¢Š(3E&h¢Š¥E ¥¦ ÍQLÅ7½.h4{ÑGj( ÑHzq@ A¤\ãšZg”™ÎÑN*ÁRÑ@›xóžâžWpôÅ?ëE+´!RÄ`zTà`ØRÑLÕKàr*ßzL C yTÁ°˜ŒSDL–Œ0ry«!W=;‚0zSU"W·›hjÒ`"ÈÅBÐ)nOÌi֜à =sE‚å¯5D{óòÐ&ˆ€CŒ«lsm0=¢Þ56ŒHÉæ‹Ënáb,xÍ2 „É»¡ô¨aìHnÙ¥²QäîÇ4XeºNi2F8¥-è*@dĬ,GQP+;[@7ž¦§ŸýC}* aºÔ ŸJ¡1ðÊæÝ‡+Kk1œ1#S-ÙG¥A§¶#o­Øɦ f Ý9.r´—Ry–A±ŠVmrõ§T ŽÝXö„]€ÁŽ3H Mõ¦4莸'¹¤i£ÜyþtìŒsÚ¢k¥WØÊÜô4ùPÇè*¥ÌŠïß^”xw¥Ó޹â„uaòM8óÖŠ)xH¤QÒŒRzP1Ý©1@Í&ì5)éÍóP¤r X³åOARãÞÔj9'Åh ¼Æ=*)"M¬Ûìg5¤í*¶ìp{Sy#I>úæ•Sî€)GZ0sJã°‹jÅ‚ŒšEŠ4lª€}E:ŠkÁ‡s(Í5mbGÞ ƒõ©=¨^§4\,0ÛÄ[vÞOZRvŒgµKMjlã\í,?|é %I9õ¦›…Ž@ŒMI,« å³OQ 6 1(å3éGÙPÄQ²sÎj`AÄR;(AEÀ‰-˜™I ©œR¤px¦C2Ê CÀ§Ò`WÌ«±eÂzS­­ÚFì©è*qÉ¢‹€îõ€¬¬ñI´·QÚ¦Ï4é\– ?™#nzŠæÝç2°U²i:Ž)Üâ¥$b¡·¶h %Á ×gÕ%;µRÞÑâ|ïG8¢kidº+àU‚ÀrÝ©±N“nÙÔS*Œu¦Ë•J’Fi‹:´­ÎEJ +Gdä«7™  $€ozfŸhpOÖ†uRUÈçµg§Rà¹ãÀÖíHqŠam­ìiÇîäR–£GÉÆ*J(¤Í ¢Š(¢Š(¢Š(¢Š ÒÒuPÒfŒÑL”RQH ÒfŠ(¢Š(¢ƒ@ A¢’…Q@E-Šb (¢˜†€h{QFh Š(Í-Rf€Š( “´™ ¢Š(Å Q@ Ò£yJ¶Õ]ÍéRÕyca!<üÝÅH³Øa´úT†¨JJ²r¯ŽT‚ QšS€3H¥OB  :š·4t4 Òàš†éÚ4 §52È ô£P€zI±sœ š^Ôb 0Ç×hÏ­!¶‹ íæ–YI¸©:ŒÓ¸X‰ HÛrŽM#[‚Ä«Ï\T£4- H•"(;÷¨–ÝÒ2Šý}ªÁ&šÎªpXLDQÀb‰œæ›rE€OÈ*ÎAŠLR¸ËÊ·$ícÀ«‡Žµ”@äò:T§šEr߸l š‚ÍðžYVÏJM£9Ç4\Vn#lúUK!YF3šºÀ9¦*"B€iÜ öì¿j“¶MI}Ŷ¦&àÁyõ¦Mœ¸-€(¸4¡bŒmÜH¨åcö¸óÆ=*u·]›ŸCGÙ“œõ¢èï¶—ˆg'½DnˆbŸseÜO qŠh„ÌŠÅŽE-Ái„7LSo Æ ©æ‡ÌEìÀpj)-™ÂåùZKÆ;ãAÀ=hXÝ.‘J¯z|Й#QÆáÒ”,ìWwÊß­>H\Õ)X‰I”‡¦;UøçëUÈK)èi Ye1Ú©GÎO™86ñ¬É9æœ`cf£g85ÎÓD#ØCg“L .&cå*œo¥Øñܲ×Ò›,-û§”)þqb«9Qa\m¼’—Bß(¥y&Ø€ôÏzŠÝñvÌÀ€ÔnÞ’†Ü[8‹ ±¾u±n™ž@G' 4–­¶QÚ’Ä‚’¦9jb%ûC2¼Š£jÔñJ²Æwª¶â%ŽE›‚J™ž8¡Þ‹…Ò°îNN(5s¬Ë¸*lô© ÷"ÁSõ Üª°ÊsQjXÚœÒÝm:àb¨DóÎ"QÆKtÕ¸¶:•'¦jµÀoôv9À¤¼ÁhŠõÍÛÁþ‘Ö­K$i%V¾xOpqNÔÈÉ d· [ö‘ÍæÂø¨¨®yµÎp0jH°Ö©îóE€’ˆ¯îºg‘O2Æ cNÈâÞLuÑi‰#fa–'šVÚÍgkŠEš7«gj¥žšèil‡ï&³E„[IROºÀÓLè¬A=*½–<ÉÇ¡éL´V‘¤Œ“Žh°Ëêêã*r)r9¨-aòC)`Ç=»RÏ•‰Êõ€çÄ ÿJeÕÇÙÐϽU·ˆÍm´0\žsO¼ešçæ+Æh°‹±8t ê:R»RÌp6Ô tO!þ”†7í`ãžÒ¢“×¥P³·Yí›w­,À‹äRF‸’$§å<ÕK/–yÅJ°ìŸy“,{Tvÿ-죯¥0,EX§DÜd¯*✜õíUÒwyV&_RE6ôN$Cq߆_¨o?ãÙþ”øËyk»®)·(ÒBʽM *édù =ø¨àÁÔeô©¬à–ßr¸õÍ"Ùȳ´ÀÏJ °ÝÍ 1ÚÃ¥6>5FÕf;}²y’6ç£û#ùæa ÎzR±2^ÉæòGj 5 žyö«RZ–“Íö±ëLû ó7¬‡=ÍÌ„. zzÊèj­ÜÄ É÷};Ó¬C a‘LÒ*œŠ–˜©†&Ÿ@Q@¢Š3Fh¢€ŠJ(¢—R¢Š(¢Š)€QE€(¢Š(¢ƒ@ š(¢€IJi 4QESRQšbŠ(¦nH4óHFhëE ¥ 4w¢–€“½w ŒÑE-'z( RšJ(£½!¥ ¦K:ÅÁ<öüñQÉ Jr€+y±±.ìKvâ®#n@ØëPHÏLŠ@U J )† R‰¼§‘áWEU¸3!Qõ¡$Ï•jNrqQüËš“éSL…ã*=*Ä[ùEîÔÄ-Ëo¶VÕf/õkôªÓ.Ë4CÖ§ÿÑÁÆp(^”u¨ ŸÎ$c©óïHdRÏå:©3O’U³ÍU¼lÌ‹ÙH§ÞŸÝ¯Ö€%3"ã9çÚ¤RóýT`{T²ÈñÄ…qÅ;5Qˆ¨¸a(êx&¦ŠâF`­¨¶‹©Xm BBapÁ~å[àÕ( Ãqå1È=*ïJLhLb”ÒÑŽ)ÑKF1EÒ›¶ž:Q@„RÒb˜4´RÊàм N>”˜Å4‡ÞF)€™¤<ÒâŒP[¥ ÓŠ\g­8œ{Ñœâ—w¤103K€zÒ´ µ·`f—˜ ع<hTUl¨Ó¨ h‘ŽY4’"˜È+‘éO4(µ´E71 ÐzUŠ( E=E~Tõ©ã‰^4b;RÍ ÎbF=)ÑÇå¦ÐIôî¼aÓc ŠbÁÔã¦OJ–Ž´†E5ºÌÙrÜsÖ‰m–PRž´v¢â#òG•å“ǽ2;b¨SyÁ©ÇJ(vÂ<à’ZC$ÍKŸJCÓ´î)éãç‘IÏ5a­A‘\®î¸¦Áoå;09¬ÜQqX†+o*Rèçž ÷¦µ¨ó £m&¬äÒž´€dqˆÇ“ÔÓÈ­(äQ@šä•rª{T¦k(“Z“S¸È`ƒÉÎ\¶iÏõ*XŒÔè<Ò Âò±#ÐÓäe °ÁÅ>”PKjŠIË{“MKXã“x-ŸsSæšN(ÁoýØù½j6­èÞ\u÷«@ò(eVÆà=hDu1¯sW 1“¸¨Ï­9UW)èi€ÖE‘6²‚)4Œ|ŠÒœ8 œpi›¶í£>´àªvÑŸZANÐÇ ¥ëIHAí@ QšJ(ÍŠ(;ÒÑE (¥ @h¢ŠFPË‚¥=½¨¢€ŠJ3@ EPER¢Š)€QEfŠ(¤ÒQE0 ZJ)´RfŒÓi(¢Q@J(4”QER¢Š)ˆZ)3E0 CÍ:P¸¢Š(¢Š.)-£Q@ F)h ”´Ph§Q@ E-PŠ(¢€ L Zƒ®qKŠ1Š8Ï ­8ÇQ@ HÑI*1šz1EFð£’HäÐð«¨Sœ ’Š…íCóÅK•LšSÖŽ´½ê YKÆÀg®j^ô´ BÞw˜í’=)'ŽV2ž*ldÒž˜Í0'=qÍ?´Ï»ùî×g8êEh¨!@>”‹i÷TSºÓ`QE!….)æ Š1EQEQEQE€ )-QEQEfŠ(fŒÑEŠNôf€Š(¤EP0¢ƒEQIšZ(¢€ JZ((4RPE&h¤:ZJ*Ä-Q@Q@Š(h¤Í-QEQE5I$æœ(¢€ŠLÒÐEPFh¢€ ÑERÒRÐEPƒE ¥ ¢Š(h¤¥ IšZZ &h RÒ Z(ƒH(h¢Š@£4Q@ E™ ¢“4´ 3KIE-™¢€Š( J )i( ¢“4¹ ”Sihh¤Íf–’ŠZ)3K@Q@¢Š(Q@ E™ ïEè4 FéÅ QÒŠ( Š( RÒRÐEPEPKIEQEfŠ(¥ÅPEPÒt¢Š(¢Š(h¢ i3EQEPÐi3E \ÒQ@ E% =8¤—4Ð1ÍE%- (¤Í´Þôê(ÍRÍQ@Q@Q@-%fŠ( ÒQE%Q@袊¡¥¤¦€E€Š( Š( ¢’ŒÐÑIK@Q@Q@ E%-QEQEQE-‚–€Ji( Š( RÒQš\QEQE ZJ3@ i´QEP(¢€’ŒÑH–Š)€QE€(Q@Å¢Š(¢Š(QE (¢Š)i:Z(¢Š(¢Š(¢ŠZ))h¢Š(¢Š(¢Š(¦’Š)h¤ ¢RÐEP@£½´QA Í/jJ3@ E%-QI@ E ¥ 4fŠ(¥¤£4´QEQEQE )3Fh´RfŒÐÑIE-Ph3Fh¢€ŠJZ@QE0 (¢€ (¢€ŠwjJ)´RfŠZ)(Í-™£4´QE™¢Š3A4Q@ š(¢€ (¢”…-%-Q!EP@¢ŠZ(¢€ (¢€ (¢€KIE£4Q@ E ¥ Š( ¢’–€ (¢€ (¢€¥” Z(¢€ (¢€ (¢€KIFhh¢Š(¢Š(¢Š-%-v¢ŽÔQEf–’ŠZ(¢Q@Š( ŒÑE(éE ¥ Š( –’Š3E.(QEQEP(¢€Š( Š( ŠLÑšZ)(´QE–’ŠZ)( æ–ŒÑ@¥4”PEPEPEPKI@ ¢Š(¢Š(£4Q@hÍPš(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢ ELÒÒRÓ¢“4Rh¤¦€ )(´QEQEu¤Í ¢’–€ (¢€IA4„Ð0Í™¢€*QED‹E% ¢Š(£4Q@hÍPÑIFhh¢Š(¢Š)i(´QEQE£4Q@ E ¥ Š( 4QE–’ŒÐÑEQEQš( 4fŠ(h¤´QEfŒÑE£4Q@ E ¥ ŒÑE!†hÍPš3E¹¢RÐEPšZJ(h4Ph3Å h PæŒÑE£4Q@hÍPƒFi)hÍQ@Q@Q@ii( ¢Š(¢Š(£4Q@hÍ!8¥´RQšZ)3K@Q@™¥ 4fŠ(Í¢Š3Fh¢€ŠJ(Í¢ŠZ)( Š( 4´”@ Iš( 4fŠ)fŠ( Ræ’@ E”´QHM0ŒÒfƒHÍÐis@ šZfi7P”•j7Ð2J*/3¥;Ìö ÑMžÔ¹ ¢“4Ph¥¤ ¢Š(ÿÙleptonica-1.70/prog/test-gray-alpha.png0000444000175000017500000000106112047007140016153 0ustar dandan‰PNG  IHDR€€9§ubKGDª#2 pHYsHHFÉk>ÕIDATxÚíÜÑjÂ0@Ñ8öÿ¿Ü½ S§]Û´Üsž ¹ÄMÆ*nï½lYf?(kÝ^Žñ×ìÇc.Ä î{ÝÛno®8Þgë53@œâ'€8Ä Nqˆ@œâVn_ɳ­QÛÙc$xFcøx õçÄ N¿´ÖáEà½Ö ß3Ä Nqˆ@œâ'€8Ä Nqˆ@œâ'€8Ä Nqˆ@œâç\Àa9œÁ pˆgNçDÀîþäe™‚võÉÀΉ@»Y3 ÇG €]üg ýHð-`Œq†ÅØ,f€8Ä NqcŒ3lÉÎbˆ@œâ'€8Ä Nqˆ@œâ'€8Ä Nqˆ@œâ'€8Ä Nqˆ@œâ'€8Ä9~sn5œÂ«›D÷½ÀJÓ½3ÀûE €©æß$*€iÖÞ$ºm/¯záâÕž{Y¶Z š.k›h'€8Äm¼ì^¸xUf€8Ä Nqˆ@œâ'€¸•;Wûù”gÌqˆüÓFÄD^ßIEND®B`‚leptonica-1.70/prog/test16.png0000444000175000017500000006203611356213564014323 0ustar dandan‰PNG  IHDR&ªJ¯ ç pHYs a a[y+¦ IDATxÚí]Ù’ë¶̸Îÿÿò܇)]bil$$ÛU•d2‹,qi  ñóûûß¾öµ¯}-_¯=ûÚ×¾6˜ìk_û*]??ô¿??ëÿ{o7g_ûúœ­®÷ãñ½¿ÿòíûßÿý÷ûû÷½ã¿W_ã‰7˜ìëâ­òóóûKÿéºsn+õ}æYྫ…¿ï× &ûº™ýþëocÑí…·Úøî5;aúÊ ÄÇó¿N6˜ìë2ÛÚ_kÒbÑç/Ý2ë– ~î+öƒ(>Èð§?Fàø¿wÀù“}µ‚Èg9ïóg'(ôw‘Õ…Ý  &o\TǹŸφ‘;ŽËµnO–CÁ@C-?úäWÚ'7>ôÖ–Cíòtàꆓ÷oµ;¾eΩñþŠ»’×ÕÇ€IõÌçƒÈ1mz‹„“~¦´Œè½î`ÖÏn±§¼÷uo+ןMÉ¢ß䬇“+àå0áèNÏ~ù¢Üèo ¨°ÃŒÚ^‘. ~m£ðÛ“]ŸgØ#ŸÿÖÈáÑ{DÏ„—1:/=|ÿÈëø9Í “5~óï¿tëk‡‚¾(·ôäýþZ¶–áçú»ïñL<pL ÷8~~é¤ý}Êïïñ{σ’1O¹Ž7¾ÞyàkTïºù.’6³ÜOg¾ËOöƒ¸¦·*þ î†è Lma!H› ý}PÔ Gu”$mŽMºâÅøT–èú1È®@lŸXî}?˜˜nŽ6ì,dÓ˜M¿#íâHW1tSïͽ¡ä™\‘½òQ^,O»+g‚ùm¥ÈïØVɸî-´Aµb2öÉÙ`òrpxÊš»°¬ !˜®›ÊØPNçàQ,uoŸ %¾+ý ¶oj™ çþξ^>õƒSh|̦ÙºQÂÖ'«4ˆè=Pýo ßUo¹Oâo´ÕÞ f¨¼@+\çøïœåWÍÄõr<¼•ï>‡ZãÿdÑh Ép[ŠÛ2ôן²T>õ,Þ×'LjÝX~€,ZDéšÇ×v@eþúo+ž²N2†³4ðçà*îÒ°2ö-Û‰ƒÌ1ð·ío&öu¬˜O™áÊŒCtPƒžsðÖ:E>y¼HÞµŒh‰á°ªF¤ŒZZº…A͈ß×wCœŒ]G‡Æ~ÎÉ7yù·¬B‰Î—ˆ¥/(ï:rNhNhÃOÄë°W>Õ2ïFC‚ãÉé÷Žwæ¦Vξî(´¾m$< ZÖ²­:VEX›cÛ¾Á›S<Öý>T@hÉÿç`ï›Ý€|dK 2pvß–ï8NÖ?}œ!+ÃÈ].›#Ž„b1ß0”g<*{|Ï»w¾ ~Ó&Ù`’?ì|µ¶¾2ÀD4g׌~Ž“Óë˜NÑ`\6_r/g‡…”³øÉvÎdx×ßV3Úÿ¬èz׈t.åTÞQǽ•3ŸËŒKZ¾;­þuþIxÝéÝ}‚#ñ}ËwÛûª®]$ºÁY/0¾ltû.\¶BԳЄ¤Þ»Ïùm—¼Ëñ<ó q4TÜ&ß·èúyý ïn ²7ñ¾fvé(ÐE¸ü{~$w L¾õŒêÚnïëBë=Ѷ6kÒåôÐUÅ… VÞîµ§øËùù3"ž0b¼Í-²ú9TVÞ+càÇ0wûéÛî¹ëxqYGj£È•#gZ·¤{˜eÒ”üó‰ h»9Û2Y³F´u"å9Ž2Ûy8ÙnNá.ïÞ×¾fAoÔmi‘3™ò 5Pò«þu·a;ó;š³¯otÿ9‰A¥ßU=šßR&…º=™µÿÚÃ-1yþçßjl˜º³¥¨³¸ÑÓ#½A¤”¸Á$ØJ\—*‹òïá}Í.Î}þ3,Ý“:¶3*"W/~_þ|sûƒ;;CÔs$®=†3‘|óÚ:œ_*pðiP~®üœI'‰ß¹O.ùó¬Ô³Ü>öRšààRäæHß¹Wåò»%¥³áÖ¾SO¶påK÷KŠÉXÝr4w½.Ä‹H¬¨C`&‹çu/(A§âÎŽwð„-;Ljûã²-ÍA‘"=s|‰†—^ Ïç8=¼Ò±4¾cì­8Ý~óA¹;œa™`7†vŠéf‘#d=ëXÞ’Ä=Ûr¸+XQ –³&qüó¦œÉݦº³×ù[ãØâR›fÈŽßÿ—{Ü–æÁÚϰݜ,œ §†ÆËÐ:“;Öæœg—¼«6'ß 47BŸñV÷Xmw7š k×_ÝŽ3¹oÎãêEÛ7Šîç¸ÊÙ±;€ß˜3éjżÏÐÚÝQÚ-Á³ï§Ò}‘…|öæÆipô~™gË;Õ÷„ *Ô:FkjË6Þö<Ö%þý'êAzÿ…zùÉÅ+o8 ЯF¦|6SºÎ¥r,BVwŠÙ+ÎcPF¶‰­{³hÎ}«zýêˆüùŠÇgb¤¼-Yò.ÃŽ4LŒ4ÁÆÅ¿¿òƒêÝAä¼ËCG ç6oËä¶o¯ îzÇNn¦P»U ±oæ]°Óáõïš¹µ5VÓP9¹±eòdÀB¥£œü™Ì-é»¨ÎØ×û çóûúî|um0ù’å“XàÜÅ™ù¿øÎvq"C«Û¾"\€%pݶ…ëp¢ÇvƒÉmì¥QÛY‡>Ô\Éx"*‡”yœ‹]"Ûá’Âú¯fßþy‘C*å¨ù¦ &_dEäi¾t¿‹3‰-SZ=ç1œÃç 4½{ŽÞ“¯äL¬h-Óš}¾™3Ö'Dc·,#.íšÈU’ FÉBXÞÙH3kd0p¸ƒÉ—¶}aïÕ¹œ³"ƒÅ¼âÏ 9þÖ¯Òâ³I iDvî¤ysþaFÙ ÁÍjs®8|׈÷v+w–½ki> ×4×ÉNõÜØm’]_¬wô8—O_ ïw¶i¶9¡´7˜ÌlwzªŸœVåy9§çW¡u>?ƒ1A ýï¿}}oò™ö–—ŒvçñM4Ÿ(Nnžgr¶üû -´{ä`]ÎZ+ÍܾHÆ;ß<4LUµï ‘ko·VÙR}fJ¢Æïq”ü á¸òX~ÅK Ïy·ç†“©ÌôÍ“Ö(^Æ}k¿guÀy–‰–‰æ ÏË‹åË“¼u‡H”`ž§Q¿–òöÝ» ¹9ÿä¤~3ââè7âßÇ/¬|êБ[#cõ_w½“¬ФqãÐÜßò¸×úë<ݽóHñÏ·ÿõªyÉ3ý»zdfìó¾ê½³§‡ûµ'¹BÕrm´S#]T8ÐwpϤ3Wr‡ÊwÛº¬áŸ7ùß̳˳ƒúÓùïk¸…Ï·‹ê7]öï!o$Î6Ø3m”ÍóŠ<àÕÊÊOaPpª¹ÎºüTËäÌœ†nmú|{PÎ:XrŒcÑŽ{gZwœ)­HŸé™Ì‰^‹/¼õ,œÿî!Cº]Èõ±Áå>K&®rY½«u,ÉOö¶¼¥Áæ LÚ?s ïÚ\%ëênŽÌ]ä§€<¾}ðô©É[8[jï…“sF½ï­èš¡Í±yã„, YÏÅs<|H;[ êÉÇÒÕ|á3dh=Z%ÚßíþXÖ •:$^µÈÿìSðÓîV±{P¶,·?¤0·.x£mÏž9ÿØÛÝËŸ¾÷{§N5Ü"¡|Ëûßò›‚¼ç³/„Íÿóc´ƒ½¼[ññ|Äο­( óLF¾½£È¹¹xî4¬2ô *pr4¡|dÙ(›º#¸aÆ1þ¼îGË1ëW§9l¡ ¬gnsÐ ŠÅx¼_óáת7³E½)RþÏnÓeØìÃ"% ÐïÒÿê^.×ÌжI0áá´È3EnOÔêiþç.àÝmx%”=ýzéáá8²ae6"ù_ûgûª[&Wø¾ûʎ؆Ó2Ù¢ºïù0@ý$̪ì¼-“;Z&{$èõ/TCvOJñe€DflÚ‘ îï?e·Å¸y“FË„[$ÚN‰,;|ì7Ø–Ê',ݽ1fì’=j†eÂÃÃJ´×.S‰l ‘IÇ6,ñgØ“³·ü§Ûr{6èõƒÃi×#æ¡Çqx;Ù+ý©¡8šÞ=R¥‘’ÓÓ—ïîœûy€²GÍàLtâ #>Ų3h—tFVˆU'CaeŸÛ2ù,'g»æ˜ (í†9!ñcz–B‚™D÷\èÜ÷Þììll€ÿÿ˜Ø¡á±½u£n«$A)ñºu“gzS®æi“xî{oÛ/#2w_ L¬æ:ÈâP¢“ð+CŒ¡K§Rë“ÐSLìnmƒI П«dR°L,«Cº>Ø½É ±µpcÝt*Oñaql¨ìs¶%;8ìX&8§Ä"aeá7·Oâ“5ÒüŒ¶Œ†¾ÿi‹1×AeÛ&¹â„À`™H(‘ÅLJ´Uàà ²yb F_9kåþ k†VÚïÍ‘±Kt󾄆:p6éowºîÇ6êyuÿoÌ*Pл;¬ ׳þÎ{sä¶m—œ‰½Ñv2l `j-Ø­—,@ñÌ{Ÿ]°àòžœŠü¿ªã·7HÌ–l''Å™Xg»m“d$”Ð}sìÉÏ,+yb%Ú,toÞ$ël?=ç)Á™ðŠó?rª¶ b‰ðú \n ,¹gðžùî‹Ù­·Þp;8Û*I€ ×X«2%K£bËD'Ä€Ë}ªÂÊ}·‘6ÌéÙªáfoÏ*ÙNNŠ3±ëo*5jôXîàÈÉ”Iÿžë•–û/“Ÿ{r†±ï0¢5¸/z½”Ð;߬ÓM F÷¿ ÚG‹^6 à•ÌÈu²m#ÚYÎë ´öÜŸ~ñFî´Š³gO]#v¬™ %)Ë„»;éšÉA„¨m7ø4¬Î¤Ðñ'‹˜Í;evØù~zûh^ö&y¶ÅÚ&:ÊKOË «^œ™Þ²Ñb×)Zˆ3É MÊÏÕ¾OÜÞR¼ß@k¶7à&Ýœa¾!áh¾˜rnÅ‹ÌÏ´¿^ƪ0Q¿BÏþLyœÙ§²{Œ1º¯ ~·cL6“TpstS£Z‚rL¬Ôw+_$g@÷ Åæç×T"Aï^hçÕQ[Áå;Û"¸càu­Ë¾ïú‡ DBm»ø† 5£g¬¹¨©Äãøitg”ÖEßÖ2h#÷ç¶YW;m{©\Ö7ƒJÜY»ûÀîKé™p«¡.Q÷òV²gBuj¬¥ÀËü2œ‡õ›™’ÄO±UäÖ_[êÙøL}•«9Ÿ)±Ûšî ¸9”Ìm ^VÀD†³mÖ ”ÌÕ-_*Uï¦Ù4Ä÷ÚçFK™nÐHX&6—1¿0ð²´D~f¶ ^ZçCKdë·¶l’ HØFgn1ÄîÔ>¿½]¶Ùuö{1ºwºŠºè`I L֠ĪôЉÚs.”äv°™m‹-æÃ~Û‰B‹.ÞT²ÙêyvIU‡—o-‰Õk)ÌÃ…îìÕ\­@ ’ ÛWÊͱÝ31dD?ÑŸ²b’#ޤÒÄÔΈsÑŸe/;œô×G`ÖÁä^92ªç±iµïogLl¤ÇåasË\ÃÉ<#Ŭq ¾Ì´%–ƒ’ 2®LM›î=œÉ7AˆvóbÛÔãÕõ¸á¤ &vt$ç¥WÀdÞ§÷”ÎŽe¦gm’¸Íil8ÛüK +ó¶Ê:gòÍ¢5ËaלcÚÕ»×¾ÐõнÓÈ•ôÅÄÛÜßòîGVn®óŽ aôd–/϶[uŽB:F¨Õ)/2äyÇ§Íæ›>©D6™ýkhû×¶“52¼Ï{`cîíï^[’aÊ2ñÀij/f,“¹(°Ô¢z6…œaJl‹¨¦çôjw,‚Þ-r,Q”ëy-Êt×'Ys†ÝUjÍJvp°`âóóÙݳËëÂVœ˜tõc:ýAFƪÀ¹@+ãþ&EC fMd  Ý×2˜œg™Ð»fLJBÌÒ†ÕÎTô–Ùž,gƒKüO@ѳ®ð‚ÏÙ2OâS8 [bãOêfðfËd>m-QúÑ;¸lÙ&¶MY%xØç~,Š I¾ˆ¹ÊX+2Œ¹ÁA *ÀßÝWõzuLÔº±}ˆ pNä  ‰ÛWÈÍê‘®¾ƒ“ 颯Æ3ð·χj; RˆVªœÔƒcrü­$÷EGO;ˆVeø¾–-“YG'o—`Ëà@,rk|žÃgJò jƒƒÓX }­™©l€ØZn»d3Jo·L<5Ô\Ý(þÙa]Xw°Û-ü…æÆ¹-7™–’>Jä3üm|éÈXéþÔn:~NŸ‘‡£Å>BʶL¾|KXÏ϶èšÝ)uÝVj‚Kã2§52ìLrŽLd¾Æñ¾ â÷ãý«#Ó…»Y|¡Ò‘à,”ÌY9;T™<·Ø©„ö¾¬Õkçí«ìæD–GÍf‘ývPqŠ8è’o»%·­±VÍu­° ùâ2]µ##WÖØ`­c7Ù™™-¬Ü×¾šÀACö<Äãç–ØANy¿¸’(ŠßÔ‚Á5PAõ:8ÍŸ¿ÛÁbùRÛÞO¬v¯Röu2˜xÔT¾rD—¯ëÜB»¢ÄS¢·õPªPR·IbKDÂSÜi0›âuSŽÆV™9&öµ/týÃà·ÜŠšsyJ]´Ž/ùÑä¥_E¥åy«Ä¾ßŒý5hUJ N©ÎVb vºUæhÔ)ͽm•}µ[&MO+ÅÌçJt+Om¯àg,Æ®@.~SQpuMd-–ꑤœ‹ÍrEî‘ÿÆûÚט` ¤`ée ,RÆH¦„kç&ïŽdêk,.!¿©²¹(š­8#eÛ“žÊ'Ôojv_§p&ö2Ëþ¦%Ü`÷šeLgÍ‚¨ä”Ì·Ó";¶¶ž\VU½³ëvêÝ‹6ììK^¯èŒåZv®ÃH/Óú²¼[W×Ý8=fâªZ %ëÛ€g㌔vžl?’ÚhÎŒlÄ~ÚIñƒ£Nt‘Bõ®;we_ËijSâ¬X-zç+5åjË ØP’Étõ5?çÆÃcRΡ73•ܶÅáé¶xÌXföµÁdbùÛÏ×øÖ¶‹dO¤"g侬§§U4ò3@‡à¤CÀv3r’ÖQYa 9öûíMµÁdâL”u*–ÎAå7 ËD’±ž%‘!];$j´A7V09ƒ-ÉQ¦Á&ˆkÀ¹7Ø“)+%#òc5ÜüQ¥Šƒã·õŠOØYµ}_ÝMÖ k‡¯£KâÜßf„¢â{ù!sþæûÚ`âœm¤x‚„XçJRµÒ†ñbî7Ö¡»;Ú²êåV³Sbý³ìÑÞpL&¼y@%{²yEÔN«–4ß%öÙ¬{ãžµ\(º V4*ªýmMf«Áë°‚Hõ½ý6˜YûêôÒèçɺèQ>Ùmæ­3 I¹ƒ³"͹¿'êOµëÚæ‘w|ììëÑ–I RtÅŠ Ûšd+¡`$hÐñ–þ¦áO_˃õ]ǘ*…’žŽÃÙ¶œV6˜¤Ï§L¥ŽûèåVïÊ×kËÄ‘–æ~-mg• n1¸ñ¸/r­G%rZ:¡‹3ìëñnN´é228(µÀÊÙ ½Æ¼Çíh‹J‡¿«Pbëª#'Ñ_T*Ë7õ³+ò@Ù ²-“¤A J‘Ëj™\&¨|ÑfLtít,%àY%(¼nQ»^½u J䓯h–dß°rCËdu+V{K~#roòPRd,)?B¢-“Œ]â+©É9Ao…­'/ºR©ŽîÚð~¶Ð†”m™$Î]T¬t·5›¤Óp®ôÿ“Ýlç;"Fí-âèÌÎͼS.ÜãœÄy0Ûz(g’;ð©“IµªY%½`’­Í‘y(Ù»g—ØBÛ¥ÑeÞÇJÈÇ»aE‹QnXÙ`ÂÎU³÷0%ëu1‘;æ ¥D3nŽïPÊÍd唨‰tu÷FC¢Xú=VÜã¨Ö{ƒÊcÀ$Ï à³¶ÏÁ铺K ù“5nŠß%ŽÞ È—å 5ØŽšWU¾¾é=fÅ^=ûzˆeâmP¯¾uÞÁé+ñåÆZâØ–ƒ—•]D`’©—‰sJPV ’ÇŽ…üI]`ÞcÚ×%`rÍåë†óm+r`’_àY¥)Só7ùQFÁàªK·ërEžµâ[W}°‚¤2öõ0Ë$»Y#«åË$rd¤[ƒ´êWFñº×aŽÉj}ý ês ú•Z&ñvÍES°-Ó•´–çKôæFMȪ~¿>wãgÊ®9%™ž±[“·ž·7|%˜ô×r ¤©¼eeஹ9¹ÈîgX5Ë1éêEp"-šŒ«ÓkáŰ² *]*{ûj“ú"Z•¬,œä@ç6ˆKç´ÚI,$¹%èIr¡à¨ÍÙÙîB>#·¯&ȳÚöuË$×ã&*Ο“_aŸ~¶v-Ò¯_[ÔÞ'ak§n“è{žÇAX£J×ÉÊxá¸Õ†ˆ³Læ+³ùÖô2ºüLÿbž^6wîfÁø®yÅyÿ»go¸8JÓk« ûoPùjËuÏÑËÆ2Áóæóºe’w·-2>­Ò#X¦‹Åâ¾ÛP#±Ÿ%±ì>Ä›õÙ*x¬6l´‚É\XpÆ*‰êƒí¬)}–InñfJÖïÉL•´%ÖHãmüΡ–̃|Ò>Ê¿²6˜¼Å2Á¾½ý$’ŒœŸ5Ö¤º™,b»±¶&=Í²Öæ‹!õs^µ»v+¯f akeƒÊ‡[&Y%ª ñÎ ~~ªÚë,‹ÝšÝ³ªd!›Aª3%Ù øßZœQs¶^fÇfÞ¶ûS“œžFô÷kin^3ÌH\I—Á¡ÍX­‹ñòHsíR¥ÏïåŸä€$ÖòÏÅÇæãHWn§.=¹uèÝNßç\ÿÖN¨ÕîÌkœÇDËvò„©$Ò ù»¿¥íÊ¿§E³…¶–HÜ$c›Ôgìxž«;÷ÅQ?§döMå}éÜ?Pþå§leº» !>%ð©ñûû7ÑÔ ¢«n½4R•„¾çøkíÝ£¿°Ìutòꬑü˜/•®^…2eRHÛÜyX©Ctkó¹põ3(­k—®kƒ®%ZK7CÆh—P ccáhÙŸ˜™ÒþŒ9•þÜõ% R¥¥ÔõðDY÷§¯TE-?9[÷¤¤5¹yVÍ?¹é×’ºQn¥U³" %q.­tgТÀK„÷Ò›hÆ*‰rwVÏÑë:1E®¡ìY+Êì3ÁøóBÔ§€ÉŠÐi=õž(‘]¸Æ$"tóv‰m•Ä2B5cºj•¬Ÿ¦½Â‰™¦m@éåß¼ÃbÕ^˜âO"~ÿ5ô~Ü¡z?ä™öPÇ×-“Ç(‚ó<3Ö… IŸÒEhόƇ¥¾êŸÄ=–Bw@c^v,1¹Üzšqcô¬¯é¼åþIÄï¤âXô}ò\÷¦3ÉÔköTíÐoÖ*±›c¡Ö¢þäsi¯³Jt“ŽûE+ ¹ÑW]ÒeEŒÜ5@Ò—µëÕ·Ðäëü±ë]'áßi̼ùúû;‚ÇÇu|âØòãç9«Dnë1"ÿü}ª—·gº÷ÕJŽbÏ”§¹ÍÀŸ8»¡õ<žçÎÑÓÙK]ëºÛû0É~òu诟hëC·Ó\—vÁpn( ð ŒîcY<OÍëR­È ]fÞgå˜ÂìàJºŽ ÁqѦ ×Ví܆¥¤®^ßWÈßý¹Lf´TåÉBmŸío^öoyÃxi?ü]h“[ÂÇèЦÕrŒ³9g%ÇQ­%m%ãØÉÝoŒûø÷Ù¢Ø)+ˆVx%"Ó÷œïÈó1Àä03³c3‡?¾:Äûû„îf`taË팭¿…=¾C#/S% ÍÍHž)éB´Þ/g1®äܱ0ÀÝJë…”¤fGØf¶t | gR|®ÓÈY¡;ÛMèš Ê¢PŸ^7ë\Š&&)[qŒ'êÏ}uƒÔY ’‡‡äøÜÖίþ펆kô)™9fo-Gå*áì7€‰¬V©@Š’Þ j IDAT=ÒÓÅVc#ñì&äÇ¢çÛ[ÓnÈwFäj\¼ >J(9Ýw†rG¶|$k† ΉõP»»’g4ú>Ñ&1,“1ö¢M‘íôÖ¹õϲLÇÏPz>ÈáöŒß×Î’oUŤ«õÌYø_¯›íUœG”4zxáM¹æîp œž‹6¿"çÓÝ>ÁFQ,4{‰Z¡QÉ4tž 2§„ŸLçY&Òíá`@)Uêö ¨™¶<(¼b¸fI×NÏeöäXdÓQ´„&êÙw›S®Ç³ÿZcñΞRçuƒJüÊ&fÆ|ò¯æë¼wm”ê3ieKûŒÕ¸%Èb83M­%+ ÙýŸë÷gä÷ê•®ó ó4úüŠÃíá½Ð>ö¥z§—öBÇ’AKnâ[/U›ÌLìÙx?³eø›F±†•BÏ4êFZôë|üf6w­wßÃw89kEzÎæÃe=JVÖ¾õ Ë™LªLF¬Ÿ+~pÒÿL/ÛUÄì6èq»è¨ñó›RØT6Ifäp—å¼ø ý³ŠüX¯9BÞß`Ê»wsøœóódúsšËÍßgýžre”ÖˆïªèRÿ¹sܜޢ÷º~>6‚±³ˆ#9²:ö,Ñ#‹wªÛ`]¿[¯«ª×ãÌ6ð OˆkƳÝ:W\æ??Ù~Kžsíµ—ŸýÁž|oæeV ò¬ÑIÁÖÔ$,¡ÜvCr)Ȇ;JVÀ¼û÷íNŒ™âS$Ü0סзùPo Ü­çÎ䌙Êõª¿Ï+\Èôx_ÜùìJšk-ëIdè—ò$\êà÷—dž®‰ßtl±^> þtÃa´GcÎ&á9VÚ¶Ì%cV¸õ¹8¹Ïe.:.I]9úÏg’ñ³QáZ†6ìM.;ƒpë< úzdÏÊ….á\@XQ ™ƒîŒëC럱9¾šQræÒ¦äó RëUeiaI­º×ë{öUyì1à#Æ>jdpÙ›½øç’öσ”yqú64$ØJ¡ZmʪU2#4›ë-鬶­=^s1S¬Îý Îy¶+…ÈÉÉÚWy+žVÎͯvJÇåro\ÿÕœ«ÎÄoô°Fe„Ï‚‹‚‰k»ÇpÖ—Ÿ…½ÿ1ÇHýLJnÍY…^uz-ïF’«ˆ'ñ©×üzÄRVY‹ÇVVöXK›éé/4­g"‘Ÿ–náÀ£UcúßW^zÒ<œ—#V­§^‡Þ=è½lIÔ¦,g1QÕËÊ­eìX18tt®wƒkdJHðß™Z%r% 鬫ΰ*Fî™ñó-ßP—ïì÷»JfÆivÎêrãu‹x|Ý kY«Ä㿪œÑzç†8¢*ÃÚº»¤ü¿™8é«J¤2+µQ¬dñÏ(Ÿîbn¨ V6á£Ó3¥|×;}×=Ó°Lú‘aåÄPB”yЦÌEŸD‚·2Q>”íÜÌ@\ ˜Ð®yZJZsZ…¢CÛ{pì5Þyt€MJ*oÅ&›y¾ó[R­X-±ƒCÌueve ò¦«²s„Ÿe,®KX##Å9‹ñ¡D÷-ê;9ó¯Î¥Ê9“a(EQˆsê~¯é¨’#Ùd.ñüb\u+-çß7fÞOh6ÍàYql`ç•Þ¹.}2ç]­õyç¤à\¿^g- \áS‡Ì§¦¡ß«·8ÃV¡j¸q$À:ot²Ûì3Õà¯s,‚—MJË¡¶ùèéÚµÑ]”¢RÄʪë\yñhŒwâûsNNÍžè%S ‰ÆÎ@¯ÒlW{nFæDm‹O—VÞz&¥«#9+»Ñ¢VŸ‡-•b,½Ü,óÙ@Üuw¸ÚO‡2£kØçhÚJo3³þ:ó±¥9%õß3[&Ròà*iÞØÐE.žì;œÿ”±äu5wåy+2gtÿ³ käu‡ÅYw™·1‘ÀNÝsîÈøGÏá%Û§Ð$F¯xeV´$¦çpOKœ *2 ŸMýÿG¹×Ä jÍžd¥G%%›sØ}¬Û)•s³ÓYÌdQûƒêŠD:²Ÿ}DÚ´Ëi¥böO:­ÜÚ´ÐQ[èœr‡SÓéW¦N׊tbµ n´]KΔþëàbžuá_éF¾RÑJ9—€]Pç}ŒòÏ„š¶I ͯò¦ÎN§ï©Ï¡‡­Ÿ±bÒjCX/Q£¸b®Í%𠬶ž¢•L!êó&W~Kh£=:Û¤¦ü)h1ÔE¾ëÙ-¾"•yÜ:roäú“¤ª´ ýãa…‚•ùGë ‚q!ƒ&(®S}¢×—^TÃJ~—’\™ÅÌË­z(±9×Í"M%¸È32Š9è¥@éGºÜ-—Ö{Ï5»šÞ³yâ­,%z`e2Ù[ZX4ݧJæ²µÏÂe ¹Zƒ e:´›ÃÍHßÃÖzª«iDU' ¦§E[2İ%vImÒ)ØÅáª)gB. ±ÒÖý‹s1Q¶0nºjÛGV°tX´vô†—âóTóÞ8×ÿÒ#Ca±mUî-`ÂÏL¼;íÜàï¬l“³>ÍkN³^ð`PìZɧœ¹TñÆæ±ŠŠZ«´êå:–¦¡Dë”pzVʃúuÊ+.ö–£?þkoõ60g&wS$Ÿ-E&ësú:2ÖÖ–G\…¬ÓÉÒi|š­N2”ÔFF,W§ÈÃnÍu´Z±KH™qrf6L §57²‘+jÜJ«€40w¶XéïMyõù`¢a…ŸzAYº¯ò¬8Zì¶Ý¶_ÊsEj~ô`d`[uQŽ€¢&1äK ‘¨3mq¡½5’¼>j¸ÚÜN”’ÕRžÀ[ó+H¦ò×ÑO*“}ý÷an¬)]Û¿¾n˜g´Îxì‰oUëT—m¾#5(A9²àíÜWìp·šm¤ã’q^Ï:5ÛµÒêõßG_¹ ¼îçš’¿ìðmIÝ2´(‘‹`5’·,\j99ryE¥üot5ê(©ã"Æ9áhZ‘Dà>O2Òù,0B”«þ®,+ôòhWÖP'”¬¯ã•Ïÿp0©¤Z]«¯ú•^3‚Œ{ã‰ØHµG¢Ê*Y¡\^%úƒSÑ6KÖò¹´™µÒ´>Aá5í]*­9« kõÎ ®35&õ!¼†„­X&²ÉË‹ñë=2ͺ%Ë…©ÝÙù3ƒâæPÂë…è†Ô•ºòßöÁÀm û°ÐÎ^ ¡‘¦T5·IüTóÕ†Xò)æ{(fVá°ïPcC¡ì·ö­±§gŽ/9€µùÎpD,þzƒˆU‘v²úVw âÀ™¡ùd½°ÝìÍJMÃã*+Ì+g¢"sÊåûK÷fÍÝAü¡n·.ÇPÎÛ-9“{¡· BŸö½drj½tÖ½sD§VÕñÔE ¼±ÔpM,‚4†MÛ„(W–·ï,¢©À2‡„ȽéR3áɃ¹®˜Â Jè6$^wƒ’¹ ’±'ê ‰Û’d­•&fRg óÂÓŸF}°Ü°$rPÂÅ ì´zJ¹KyRópº¢,K²"­«Î´Ðuç¨1x“ &pÓëîfkVÚù;ój#þ—“86·gj>yªºô­³cÄ›ÖS…TLfzv î0€c[(aÞråP«Oùû¾ŒCf^ªÖÄuǹ£$nÝ;Ù€ö.œ‰4‚QÇØ™é°sVætÙsÒAùΧ9ñŒ ;³"ç¡K+÷4Ì„›m~É>.üÞ7V5 ÿÎlÒWý€àׯýäºï¬mt#7uy_—$°rVêºòü«ê鵈XiÎ5ÒüQÆKÔ‚e¦`ß?S{‚³Xkaey7ìémƒ¥ìê.ä —ÕÁèÍ„üõ Q!­/PZ;ßBáþ!—ý[Ÿ4IKzKŸÓø®þs™Ÿó^5/-ÏIT"çgÞ=ÄÐs<›7~ÈM•c¨ó|暌ŽåŸfd.ëü™5ûU DM|µÚKaÆîãæHFÞVpÏ‘=&elÒg”9ÎËŒDÚ0ˆ¢¬p7–!ï¯ît+sTµÝâW#Eßáaãy+¸ãèÓ€23ïsõh^ûòÊSÜ*ÏD†¥Fj´%*`mŒ|®@¥³áÙÎ!^hV…Kþ½1=ž…5ü³Ü¨!&hul» •1¢Ï¨¬¤õNG2G§p¼Þ+i͆’̆8/i %&é }f¦É쬠?:¾F™ÕfÁnÏ7èû ¤“.å ÒVé;¼ßòtl*dnÄ™ "‹§T!ÿð ç•r¿IÍêÑ–ãÏkVN_È‘k£JxO¾uŒµÝ$S¤³>êìWÔé ¶õ»A¯Y)ë™Ï¡¡yçÑ«_«ýqJ= uËÄöÛQq5¢EÏàL2çµM rjì–‰çe[içXË bGÆs‹:„‰æÖÏ`®p‘Uz‘ušlx¦²²ôÀb²käv`’±%Pzvµ¢§ž‘`™°Ld=kMêŠ-’)ô;}Ÿh ÷è›}‚scƒ¦%¡KTa¨¶i€Êè$ƒ Ïy¦j89Ç2‰ÒÝ<Æ‹w‚Ã\\‚{úör”V‰Ûâï9K¹FéÂDR‘ˆíÉl7äb¥þóYH÷$|a*ÝçhL^Bøà¡Í€u±²“ã¼ó%[QJµÂ*°Cmkðÿr%x¤„7ÚRHæjù¼cxm52«¨^1WÝîgpÓ¹µí¿ÆÃx[&y[¨ F\7œ1¯ê—9©q>«íü l”k™”ψévƒæ¡ÄgL2ó¿-“SX® Š;³f;”dÄ2Ï“‡›Z»ÎŪi¤>¼Vÿà–ÀúóT+ht£Ž˜DEã‹,ƒ™ÏünlãÊ­µ¦LLwUÅÐ>1ñ_cõñÖè´7ÝÌ‚èÑmÙ±‘-XI;»\g“øIŒúùð§TtÉVµâjó$Ë3=çqÍJýw– v'`Aiá}c•ÍŸˆ O»3›o–¤õ¦ãit/]Þ=Ó³+p2Ÿáe² ‘3Ú·FxØUw4óT˰X |_\Ê€º<çŒW¦‘¹eSÌUŸôqLxÁ"-|NÏž3nþÓJuz»M§¶PÑû­q±…a1N½\Ë,d½bsn_|éS.›ô¼N­yj¼)x}q­«ÈÚÏoÙªól(Лa¿r§y)9§õçŒ%Ö¿*ŒVWûýß *ýÑV…WJöGsâß–#¸*.0× e¡ÿW=y=³ ïÙ\¨v¹Òüâú(êÍž'ËóÝn^úï)Éš¼`+ÜŠVwÕÕ;çÛVV‚]WJÿyrVèS2QÁ¨Ý)jÿ‘ÿû—>1t<`»=ÚŸÄÞþyãTWö¼~ÑÇyœŸ ”¢¬ÞÎ?S% Œèi'·°r_±Iøâ—éiFrŠ!è tûï,ÌæûÖÿf¢õ%™^•3W³îR0ó&FÑøX i£íú¹r\ñÍÊ·0· ,G§Æ“Œ¦S\ž“S¿VoŸ¼k/I°Ò¯Ù=‘ ša¼hk{þԯʡÂ{æ}“Q¥Ósœ¸q¯5oúÖKß>ÁÍáz%z ÇîF'Ö"jÏ¡»>z‰Ãôççw-œ\‹Ó­Ä…êöE¾ëÑ×÷Íl™B‡sÛ(ÒA±% ¢ÑîN7iúÓçJ0k1_‚H-TÓ\átð¾'llëìY ‘ÀÈÓXŸÚî°©XL"Õ I5zn϶Ot·c¬Ú†6 ·»·{oAZýŒ¤ÕÃr —gö]9k%yà—¯¢jh=´éˆžtÛ‘ùœä ÇÓXŸãg©üÌi›"Q|l¢îœ«µNòò.æYø5"}y&¹3Ý×0“2޵5ÄuØu|Î{ŸÄ ÿsúi²ÆEþ 7íôZ’aâÓ·Qj:€ ~ìQJæ™ÖGdYh©’m…;=’ÿR@(ïa•ÕÐ'ò€ÌG¦´P¿£•[MþãÂÜBO•¯[ÞVêÅÒÎ_æÕT]±s;5òrjJ7/,2€¢%‚i ó(TxLAçò˜F—ƒ3 jŽ2í2¨)ĥީ#bkîÖžE†0ß·M´ê&è>3íÁ¨ÞŸe—ô2|6#'H¾²”kRhHó ·•‚Ì}:z™Bø•åÒS†s@*©ïÒ^éµLT|X ÐÖ– u)¤N­¥úF«²#ðâ/ëM.Ö­UmËá÷Õ°•®ö'+)8‚?hgCŠnù ÍÍN(Y‰Ù"„Ze¬FˆÆç­1*ž6M^£ÔpîˆDŠôÔQ£?ÙgÆ9SË[-è[áº5”ûôWîus2n8g–ŸÃÛFÑTÖªkž€Í:Öß÷„ kKwœ‡:ÊR…4–˜ØÆOä$=ô8µµÂm¿yÞüZXÝE#‚3î7Žü Ϊ&›3É´'j§J?3ÚC…²ñ³ùP©Ô3‹N>;ö£k~g uòtSs»bÚ"NyK¯Ønó>AöëõûéàñÐbP+¶ß=ó%…R5Xv;ÂÖ©}çWÍè¢(9¶E÷Ÿáþt·§j+̲rÌë§$—’ã9±ö<¹l@\ö/¢Ö‡ì’áØ£5þïÈÌ˹;O||Ný—wMÔ͸Zz ç|÷œ/ŽbV9×s¬­s†e[!þY£78žó87Íæ6ˆe• ñ™kiŽî˜W&©u"²uCz5`mg°ÒÙ\õžÈ/›NýCRMsÁKn¥H]Ûó +…ÐsPÒS%ê['–Ü„<¯dz\>†NF8”ÎÖ@-¹9•†öyûfV Ü'õÛóì äÑó[jy—';b¶WYs\ÿ­lù¹­II »Ü)N«Ænl09Î#þO€;22d#×7Ž¥r2>²§ß\k ýçKøGÝü}e\ªâÊ|«”Ö"ô—Ýš&??xDÙ¼+IÌrk·‡KùÑeùL·ÇÖ~ÕÜÊü'T6»¯g/ãsë½y“ÏU·.;"Ô¶Zy‡˜cô“K_Ѿ=Uu›3¯¤q'P–#Ó¿Wõàä®gG{äù”µ×ÏóZ.­Î\ÛŠûK¯ÄyíVý´TêËÕíC´¬½ÂuÇ™ÝUÖ€]1~ó­l¨°U¼fR¼®,Ï„¯-ÚŠŒAoŸd›éÉCHÞBnAWëøL“³y.,>* ºòÖ/jöóþç3ži¥<\÷«Ù­ÔYñ¨¸ŒÓƒÊ®e"þ³jùI/3ˆç·=o™YoÏÁ5èg4Ý| ¯XîŒXk(»î;XÅ X®†vi|‰RòSëÀb‰ç†¡Û„ÓÆ9¥ë6Š´S° ý¼f`2ò°oX[ç$­EM6Ïã^Ëŵ²>€mSbÊu‘€¥j+‚8ó."Rù9ª›Fgm EÇi|ä¦<—œ•ª13#Ð%›ÜË)Å ¾òk¸¦v¼þVÚ–X»£ÝLµ éF³åUJnžuA%ÕX÷«š;â¥á[\ÊSlMÈÖBèºãMNã4æÒ¼,™Y8Éseçeàü,«/ç×h$éóIy.ì…8ŒYa<´UëâzGöŸåÙR4Žòn½BÖöÊÛªS;YáQËdõÑs}aÐÊš·˜ó½jª–‰ü*.p•Ùì²sbÍ]]K-¡‚}¦Jµ0¶&:8$Ö#-йRA4 OdRfX»ËÎêIÞäXn)³Bsinôà”µQsbÜÙõ»Ze4ã8êú:?‡w+>ïºI'ë½–]º´/;‰¥qÓÊ'AŠFÏ„c³É3æ‚¶P"Y=? Z)è‡ñüñÛ %ýÍ<0‰`ÅË›‹ !ÌG&f;²ÉÓP¤ T÷Sïb¡äûË`)ˆ•³³J,û*ónóVnu¥üœÚùÛÖÌkË ò³óæF/Ùd¥™YVJ=ȉJ´e}ˆg&?Ååñ5kølT››×,“\Nl.š 9v­ÝÙW•ö ½à×&~´V7Ø–ÍÒìU3£Tc}ç¡ÐùÎéÜ[çýZÂúJ&ï·Ê+šæŽ`_ÇÙ˜sY[„ærrµ©xrÐ)¦¦8zo@‘vÚÈÌá[‡çÍ'Æ-4g N>kµâÚ§:9*4lùfÙfLgùì8hm«XöDd¢œYÙžáîLJœ/¬k<¬ä‚Û$ç–Õg"b„fy¦~y?ÔúûpËDž2z*fÒ‰ºú´êþ²ZÚO»=(ý,ïš ž=\\FvîÉ:TßmÈRIú®0joë.(‘u¾+›&œ­Íß³¿.u™e"ëiüZ>1œ9;…Ÿ”‘B¨µ°gÃÇ<7ÁS¹o´ÇNðÓù?ÚJÌ­•L‰ê¿<<µòe겔늪ßw½°×ˆ¶cådáÊ$½ø,­^G¬ÕÈs†ÿ&Ï‹¨2)£™v³d'æûZ)”E¡ßAÛÚ_5H–Ò"DÉ…ñ WtÕäçw'›U²y5·ñ¹LÇi`b™ós©<Ùl¾Ùi÷¢.Öi‚вäoÏR³’¢µ’ìîìøèÖq—•wƒOë½é²€ç¯'‚ÉË2_ù„¬¨°Å†~Ÿ# ÛS˧=ÒÙ$´Ô¤05Ë·Ô0u%9|7ÇGkÊ#S†øµK8{¸èÏîÑ2›¯’êô•¿½˜È³VoÆÊöì…ú5t%ªÊ'(}‰ó!¶³•¶¨¢[G‘§³¤fïªæ&ÕP4 èÆ•(«cüf®ψÞtžûvX%?æy¥¡n,ï˜Î·[®§îÍnõœ<éx¯{qkývÞFÁodedÜÕFѵÝè(Ñ”©töò‡ø¸K‹(Ÿñš‡”5çûY$ì+Úâ£û¯ž*áó¥Y4[!ž¸•9_¬tÓkÅ Î:=ºÝRZ½«"7ÝêÚáDE™ä,«„ð½6J«x ´¼|L–N€ÝÒ†…Cœ&iSèÅm›°*eÞHNCŠ.–“nÏýl¹.øÈÖ-îbqöÑä¹%k¬É|MM´Æ™äáë—È»ñ2“eÍ•7Џ{`_–©ì­zÒÁà9Ç›Y&am‹c=ŽÁíô‡­Í¡èki>ë¥<_¤;‚#Ÿ#Âr|s N…vÕ»‹Û£;üIXÐŒGÃl÷ AI·›æËOxRž˜×ãÀD#r¦?©Õv~ögCP­Í `¹­2ðh”’¹e€Y¸¨4™ûV°”g¤è&÷p{p)†.”ù*šXõÄ:ì9 Q˜E:åÿåºîÝLAŠ9éH¨fd¥ÌWrò£N¢lˆ&ÐFò˜îTH}tÄýÐ ú,ÇwsÔßPŠÃ.gtºà,)–„QdOA«¢;¯dÅͦ‡âùêýAÀÒM¤7pdöt“×bv–e“£¸›Ã“¯í÷8>Ò¹¾ŽÂÆ 9kÕëðñ÷;=|žpjÑjIÀFPrFQ©}¼b«\ø½Oè#ÁÕèj@9™ðZ¥¶’—ŠYšò,ÐAAäÑ­‹œVøo%ke¤Ü)Å«HàäÑ.É[ɲD˜v‚Çš“¤©×Ǻ9Üüæçî  å`ÑFàç1×”Ūœ~þø+»f‚;.º)ôp{,r0fQ9K!õÓ»SøX‡É©°Ê¥¥ çžó^z™ìñ#¯‘û»9A'¢¡tC‰8tÖѾ™Ã—¬òžAËð0±ü·%^€ü÷ÜI—?Ñ$‹¢…"Ï3ë/^z?H¢@Î'ƒ¯±òtuÙÝÀ=jçþ 7G§¡ã³‘ÿ²ªÚ•ÁåOÂÃÖ˜Ûç‰Pˆ†åñ+ŒÓ¾­&ü,«¥¹¶U,ÈŸâûmšœÖpL»~Â&•ÇQ]¨òÛm—W}Èðrž¼µÔ%yvtŸÛ"C?šÛ”YA!]œééÐârÉ“¢ëy(€uh•¾Ÿ–Gï"@]N‹+¹Æ~ªAÉüçdz~-˜x]îõGÜz† _]’²H/TÎäÈxÎ`+(˜ËÜnM•ëÝ"Á …P§p@±ôs=®älçÁ?P2Îx̸ܥð•”ÌPãŒÔèNV,¦:¤è´öÆñüD.šT#¡Ôàüéõó“ ûÔ¬dk޾o÷¢e퟾Ç=¨Du 'W0h‘ú·Lj‡X»8cådzuâûÌ´s^gl7YÉjÁZ¾•¤;é ͵Ŕ‚‚ƲÒù›…¦ÎŒšn]5މ7âw—-po&ñIl¥Æ œ¦‚åwuI (·u´Ã!e ¬ÖI4t[!¶0a¥´Kp"RXM€ù3ž 9ìJ_Ø¢ÇÉÉR»µÖ8<ãé‘·âLê6Á@Wn t”•%¡³Iµä3Q›†ÛUóÍ#¥2m%ÍÙ(Þ'²ÞhÖÁúRΤF;Ie3™¶–Ùv“д8×Ý SŠ˜S]H€2@š:ÍñIñ{Û²Ö3Ý ÷Õ /õ®Ç^UW-5ÿûlLÓXË´¥°KÃë:2ÝÖJÉ}N²îw)ƾ¸]Ô U%ß=»óÕEî{m+ª.:’·¢„Ùãõ{fòµ²eKOÔ‚hŽä’Õõ f96:mˆ×€h#UˆTµ,z|w/4ú\(9›/™—¨vaðïòMç«2ÀÞÖ¥:ãU(AZ[ñ´ä8ñˆ ÑïQ§IÌrâW6sÎÀõ H6½¡å†Ï&"'¼Æþà>ˆ7³Lv*gæ¶ÔhËâ¾W²®Ÿ‘Ó°ºÓåc¤´#•ô@ƒ ̃ _ÆÛÆx$;×D7ÿDt}¹›“¯ò]ÃàU£ÜêüFÁ<ŒË¢!I¶ïBOçõŠ¢>]#³ÉÖss_£n×±­3S hgÆ~Ç|¿z¦i¾xz­É#µ%ôóËò'‚yw÷¨+ Ò‡þ™ÕéVòƒ ÐÚ­ïÐa{uLUVå4¶1æJ°­òñ¨X‹ÖëHaÞÀkH9[ zž…Ø™ŸÝCKôj«Ë.d¨ç™Ð`Ä̳ëË|-~!˜\i<ë¬Ô•Âï~ •þËÄ4^ŠÇiU»¯^†q=FÖ½¹cQß;!iôëh%šã;¨h% }b*ÇùmÇB LÎ2µ"üšm¢k…‘(NGã܈þRÅ›n݆¬â5ÛgÖ†’þ•'ž•7;Õ-ÖC¶˺ ã–ÉY¶ o9µjüb Ìf¸ËC… ôI9k”™m¿ä˜›'@«4Š88“6ÿI^?£\FµœåƒÁäÜ.7Ù»VA…ú”ãqðØ"ݤÅIH{Iu½!rÙ˜õÉöIï»ó¾F95üø~™î}ºú É[Ðçùt'÷õ),…þgªñ‰‚´ÓâçÆ7ÏõÏ'PÛ÷Ú.NߑƅÏñú˜Õ¤EñìlÛî9îùÙpòzÿäZInÃr&óè2-ÍâKô÷-6Þ;³¸äAuLb(ÙÎÍ< "ýšLÓÖY˜Bš7Ô"Ñ(ùzÄ…2¿úëÁ¤ÿUø€Ê­hg"ZQv$›VÈsƒæŸÐzÔš\ßGþk»Ì2%5AÇïò±¯µepCún‘%ŸfÕXIC/õ¸­›sÆôk§%Ñùƒhƒ!‰=žN™±~08«aŸ±If²UîjǬQâ.O=@Le°137èÙ¸ÿ0·\lÉó/<??ùŽºèŽXÝM½I¦|œ´)Õ{åV‚ê~4\_ ܱBV~QÖÛ€dïv?ˤ§ê1S^ }¶2‡§:Z?÷,*1æ'\ÞÄ2±„ë\Áè­ƒ– n=1¾û«.î8È)³`P»´,"ˆ êu¦„׿î„ôà¶]2ÒÓd"£ŸÓ3T¶ Åj¯"é‚ßL®Úü™H·2>{²ê#ÞDñTx)Mkpr:)òTÅ6D¥F®÷X3Å?éïÞ·ýÅÌçÖjEþ«z4òôwëØOc“ýú Pk–“ì”ÑíºÖØÓ¡–IDèüÆ Eð‘6-]'«Á¦¬ÃÁu vÚ3ö˜+º-õ<Ì;Ç}æ\¾Š†ízÐfšTXj5vã Ë:éqú>À͉"+¯‰,»O ¦8©Àã4H^I6à²A/ÅL­n¾+°vÙy¹c$§ZLjGT΃ZÙYÉ_åHö"~ÊQtúi®ÎkÞ´‹ ðäD5’~q7üéÔ!.aD;ò–¡¼%¨)®û*£.yµ8kÌêŒ}Û÷{¸8xŒÏºâ0œ >k¶âþóX“×,ñdÑ|—K¼Ïrd&U“Úw<uÍåÑp$ÃbA`K_^kÂr…#É•‡Û\N”ž¶N¾7õÚeOdêfæbF4ÎÛ––DRý>e¾_+K1ÛŸl¥tÐVÔÌ´ç¤ !»ôñ¿åòG2e(Ç EמMRYÑb¿²޾ЊóàD–£Ö›ÂÒÏù¤¶ÇÕüÃÕ¶R\aã‡e±…‚*qägòb.šŸ¢ûüÑ>@H4öq­Üƒ[ŽÚœÔš²>‹/9—m ™­œXIýùî—¶>ÎÍ©å‰ÔzøÙ’sÃЉE9 Ѥú/’dXP¨WÿŽ•&íCl¤RÒµqî*ŸÔ½e΀™J -âžÊÏà³*u^rks!€Š¿˜Ãmôi2‡ÕïT§tzÝOp¦#w´6½l‘8M”ZY•ÙÍ`7µ¼ßõ *.<•Þ®¿ÑAlSßȼ0"V_)“î»'êì盾ö¥µÁT'á7Ù’ ”«Bó\«éiØBº3œô¿Óç¹ìÎdéÊc}à…ÁϘó—MÛyÃ=74_c„Ÿƒó·Q¢",”Öæ5¼@AWH¥ØQ{Ëð’øâÄÿl¢bû=r7\}_™HOuþ¢ä5ºJkJ¿Ÿ%âùòÏüXK¬îÉP+ÝÀ•tsѱ9 ë'R&‰7äÒa˜&ƼGDºÖN–‘õhƒÚ¾f,‰N7‡Û›žíþÔáä#Á$߉l®6õ¨,à)íÃÖ¨”Ü¡a×0¨^B:7ÜZáÕ;äô_ÎL³Nt‹ï2²mmËäŽs^ÅQ·Çْܬ"··þÇ™ä¶+ýµ—à­7Lêhd5<4‰eó@^ûuTšÎYnÓÔ–‹µ `Ò³jˆÛJwÎ}ýìw£IùÔ5iŸVm“¬€õG€ÉÀ¾l]cìYR¡ƒmÛN² ¾µÌ"þ?îyÎ^l“å'7÷{”,öœ»:?g‘Œ½¶‰äã|Hˆ‰úœðÄǺ9ÞöàæT}z©È.·A8Œp¥ËZ>îxÆX ÷|µéкŠZl9dIWîz’ wæ8Î!—mÝÀŠÍÇ;òåà»ÎÙÝ5×~˜ðóæ”Ã#¹ 0¸êÒOϧnl´Ú_äRÿãD¤Õs§Êi¸}âÕýÞèÔueQŒ5–õ3Ts•åQÕœLê`2TŸü å©SÆ~¿$Á‰l< ±4 Ò£Ozöi‹†.¡(_ ^"µª‹Q-dÁˆ­z7w'£Ó (܇]$z$Éתu’ƒœaá{…®o“jo͹¡,ˆöú¥–ˆ ÑFªhYÎÁÏÍ1% ,ñ¹áCI6'`xÝ”ĶÉýúþ ÷õ<•4Ô „;¸b‹[»NªA ßÏ{z3˜ð”öØCÌNÿ¡ì1ðToŠãj­P€ÉÔ`f¬"±Á^± MÛ0’MOã¡æ,ü ËZÞ¿“mr&œÄ[“ºCüÀ¡¶‚“*tèõ.aëÓÔLþû–¾GA­Ü £¼êER¯šˆÕ¤h¶"…§žáXˆŒ#Q†BÛ4~FpfV¶†ÛªÒܵˆŽ¿fs÷FiiØÂE ’{"¿9—¤h?Ë2ù‡ (Ô/š”éÁííj‡†¥c$‡˜7×®“þç ´y¸ÆÝY¦$WãÉŰ5¸e-“ûeÉâÙŸgòV%Wí“õT¼&G…x¼j‡m $ŸwX€SZS2m m@½M-±‚Áú»uÍ+g%ò?9á*-½}³åyuí:Ï"Ñ£±Z÷y÷Aet'™s90råÚ{&_!Ò?tŽ|+[ñÙŽkoä†ÁE;I‘a*'C‹bkhõÄÃFp %¨fCÃß°ì> NæžÁ/ƒÜœ˜ðÏûôù|y¦]á´ÔP áM®òP2„“pÀÓ¨äì}†×hÒØêñ­Ó¢ñ/J"ݶ»É$Ñq¨ ŒöŽBµ·b êž*ð_|ÃÑðÒË*, îÁTƒÝÆQÞËc®„r¶0#"Âd°µ¸ô9ÇÏ•ì¢ñ-žìB–W ¾9ÃýŽ5:~£+HèJM,«ƒ¯ÿúóEqKµègæp0’‰‡M¡¶¹y´{…¾Ü¢žh¼çì€c/Hß&©ºH”®“ ª-“§f¿jý*ëK¨™¸U7ñW¢¨oð=ÎêË7°$¾bâ‰þöÈÔÀ¡Â8W FZ V2¿­öŠJXß×Dó\sÊȼåÁh«öFf›ä»û m æµý>㓵pÊ~Æ’Z–udkåõ[T—°H„·¦Š½<”†¾‹²LðïIQgŸX¬Ç-hFÂw²5IÙ.„(R”ã‘2Jk3RßÁ™È™ëÝ|ý"+")㈚¯üÆ9ú—…+0¬yò!_ë÷¤‡Œ”h3 »&Ó)[[ƒ/xHSæeI¦ÅîÉY ûX)¯ü’¬ž˜–MSCœ ý[6é´RMšRUtf¦X64϶çà—NÉõºØÐ3±ïe—È(–.y´tx†âˆ¥öY#³âˆTëIJ`ïþ/tòS±:¼pmGfˆPHÑ‘íë-…-ÜÜ÷œ·`&ÖJ«Xqh]•ÌO[>†vP=ʼ§£ÃA~lÑ•—ív(•^­ù•íc³NuJñj=ŽŒ{°\/{9æŒ{~’b*U·ßD 9íïăŸKè)¸Ê”µ”T•p=Í5FÏÁ´)XÜ펎Ž>Õùò²„NȆíàVõC¼ÄAÝî³öã'ù ='­u9C°Z.:‹½ûc¾Ájål¬Ì5£JjÅlt[RTºk¾qà¼Sl^ÔB[z+ëÌj{ægZjñYÐVijñu– zqKNfpJƒSöÄõ²8ýð0÷xs¡á$%5f=X\I$F•k¡ðY=ÞzáDƵ¨êªLe“¬‡v“éÚñg´ê6ŽùËßð¥ÜÐûŽÓ²Ù7¼>[M”u9¬ó=®o©™Ûk¤*-[¨g?Añ]-™ ’Øû;®±tbN¼ÓE¬^šCðÏ[îÜÄ+bVEzp¤Å¦ËÐÙáqå^ïŸNÒ•? êQÌG]¦èÉzìøsýÆæßL¿˄Ϲ¤_e*+x2PÂ-š¼­7,C;÷ö^!a&XÞ¢6Qfˆ•{âi›Žî$HÉà õ!ÓTæ”ÄÕîÉ4㦚qÀï-‹e‡ÌGÎj…ÖŸí»…³FغÕ Ÿµ8Ð{¬Fí\ÇM`ò%¡÷‰â˜œ ZÚrrëËj_©`Ë3¢ø?M¼‰Â½pwÚQª^¯îЂ½¸¬^~'/a}ÏÔ5¬=Çaø8ÉJl )Y‘#Ù×ÏëOìõâ²cwc¶~l¯{‰º+Ÿ_l¹=ñïXü·íIËïjù.ÒµfžK‹-ó{ÖSG‘œY]ÿï`MlͺŽ(”p«Ur,¹ù·¤7l6»šï”Â~˜èé°yø*ó5éâ³£öžKž.톒z`ÚÊt­5+·{Þƒ„õCÃ2@`éähøÑsg¹–q/î\gêÛ‚‰)–RÔ8ËouðÓ=øüÍa©±ÍÔÊøNJ½ýø­XBwŒæèã«êÉæhisM[t¾7ö Øœ“Ã…uz¼§S‚aGkŒIˆàtelÔ»½ek‚«PÂIQÍàÔņý÷»3” £E6Tá¬Ï%¦Ä½É8b0(Ÿ[ÎI¬Úww±˜èð«¥ åUäÈ=_`@¶õ¤‰]’öàDê‘u_•TjO™„Sªh´ì@ÖÌFÍMïvé\a^åD }>rŒéOpÃZ%VYÆ:¿v;0‘.Bg.`'Âg…ð)"?€PdŸxe5«„ÛI98Ay­<Ãõùáo¨¡¡V‚xÏ“P’õ²Â éÄR[Bg¥X¶4í£`­>ƒþêx‚]Àd¤IYÑì¸dÔÓ°BCzZ픂Rœ€þÍ‘®µryu.Ÿ`µòýÅ{O7Ç®§¶*Ö)€c§ÚNu£Ž¿ût{ĵLdw;têZ\ úN\ܧãCH‡j82Ç׫•³9(™Ý’2W„‚‹t^ý! çLýg–î)C0Ru$ÐÊA‘–Ü[&•fãLþãÍ´,nBÓTVK˨ÌÔpäòwHèȇ‰8-)voÖŒrVBÚÌ!²=( {ovçLX)Å¥•`,5 ’µ’z)<}ŸËUåWÔS€ç…OS¾©-£ÜŽëX¦'&Å<Ñ÷äÛ0@µZ„fCÁ+¹ç´Ð…­E³½2z/ïä¾6‰M3£nˆ¨é«ÝGRB‹Tº“–ævtJ¬·•|9á„øU9Òô´“|x—ΰjxæ¦x.\s«´4”Þ*ÖŒXãÈã¾ ÷šDªn¼BáAº;˜Óã#,mð}¹` d¯°?¯´Æ‰3 EÕ8Ú‚@-/eö‰UXi:~î6à±Ûöðî€ Ü,Ûòžp"Å8cޝ_)œi5÷ÖìÎ<‡]yyf²°RÎ,Ž];8rSØÆ,oœîUúúúŸ¹©Ââ3vˆ´8t§ ±6éˆf´î½lQƈ•ïdEd$ iWIrsžpb¹žFÒ¾b“Þ«\Tm6<º£(’£Þ~O…dheX}`!—'b¨;†ÜgÿËÞ„‡©Íû{ÐÎhXd†»*<Óƒ~Q™  Ö5]#÷ÃkÀUIËè¤ÉóU{ù˜Íz®³£gY6¹  …¨7%–ƶ ’-—º5“üæ¾&7ýFážì…†·´u1#@ÖzøÉÙC5ÅzU¢„8º‚ à¨@vee>XíÐåWg:8ý®l‚5ãù˾‘¸·›ƒÆRC‚vj0{‚]%4÷õ½tSvM 7>ÂåÚÙp9шQGìz‚ãce༹1Ysùö=Jì`1âü,ÞÏ‚^õƒ2R &ûÚ×ýÀÄÎyŠ»PFÞ\žË™âLöµ¯ïs‘õר º%ZÛ³aÏdN6˜ìë¶v‰ Ú…æÍE}«Gzdœp»9ûÚ×mÀÄN¡·¥»|vKY¢’’íæìk__ $^¢ž¬~—êÁq랃ÂíÙ2[¸-“}íëC­)båÛDÑ.ûç~ž,}¢ &ûÚ×¾öµÝœ}ík_ïºþÉ0Ÿ¸µUˆIEND®B`‚leptonica-1.70/prog/boxa1_reg.c0000644000175000017500000001002412240303376014464 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * boxa1_reg.c */ #include "allheaders.h" static PIX *DisplayBoxa(BOXA *boxa); int main(int argc, char **argv) { l_int32 same; l_float32 diffarea, diffxor; BOX *box; BOXA *boxa1, *boxa2; PIX *pix1, *pixdb; static char mainName[] = "boxa1_reg"; if (argc != 1) return ERROR_INT(" Syntax: boxa1_reg", mainName, 1); /* Make a boxa and display its contents */ boxa1 = boxaCreate(6); box = boxCreate(60, 60, 40, 20); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(120, 50, 20, 50); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(50, 140, 46, 60); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(166, 130, 64, 28); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(64, 224, 44, 34); boxaAddBox(boxa1, box, L_INSERT); box = boxCreate(117, 206, 26, 74); boxaAddBox(boxa1, box, L_INSERT); pix1 = DisplayBoxa(boxa1); pixDisplay(pix1, 100, 100); pixDestroy(&pix1); boxaCompareRegions(boxa1, boxa1, 100, &same, &diffarea, &diffxor, NULL); fprintf(stderr, "same = %d, diffarea = %5.3f, diffxor = %5.3f\n", same, diffarea, diffxor); boxa2 = boxaTransform(boxa1, -13, -13, 1.0, 1.0); boxaCompareRegions(boxa1, boxa2, 10, &same, &diffarea, &diffxor, NULL); fprintf(stderr, "same = %d, diffarea = %5.3f, diffxor = %5.3f\n", same, diffarea, diffxor); boxaDestroy(&boxa2); boxa2 = boxaReconcileEvenOddHeight(boxa1, L_ADJUST_TOP_AND_BOT, 6, L_ADJUST_CHOOSE_MIN, 1.0); pix1 = DisplayBoxa(boxa2); pixDisplay(pix1, 100, 500); pixDestroy(&pix1); boxaCompareRegions(boxa1, boxa2, 10, &same, &diffarea, &diffxor, &pixdb); fprintf(stderr, "same = %d, diffarea = %5.3f, diffxor = %5.3f\n", same, diffarea, diffxor); pixDisplay(pixdb, 700, 100); pixDestroy(&pixdb); boxaDestroy(&boxa1); boxaDestroy(&boxa2); return 0; } static PIX * DisplayBoxa(BOXA *boxa) { l_int32 w, h; BOX *box; PIX *pix1, *pix2, *pix3; PIXA *pixa; pixa = pixaCreate(2); boxaGetExtent(boxa, &w, &h, &box); pix1 = pixCreate(w, h, 1); pixMaskBoxa(pix1, pix1, boxa, L_SET_PIXELS); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCreate(w, h, 32); pixSetAll(pix2); pixRenderBoxaArb(pix2, boxa, 2, 0, 255, 0); pixRenderBoxArb(pix2, box, 3, 255, 0, 0); pixaAddPix(pixa, pix2, L_INSERT); pix3 = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2); boxDestroy(&box); pixaDestroy(&pixa); return pix3; } leptonica-1.70/prog/lucasta-47.jpg0000444000175000017500000072616511275671221015065 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ W)ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?÷ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÈ×nu8!Œi™$brBçmYÒÅð±C¨07“€?*½EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV}FÎÖQ÷1F碳`Ò‹û6éwúH*D¸†C„–6>ŠÀÔµ ÅÕ½ª¸™"Rp œT «iêÛZòqœo-µí­Þ~Íq»zìlÔä…'ÔÖ ï<;§\ýžçV¶Ž\ãidÚ·¹†îšÞE’6VSÁ©i’Ë1™%uD^¬Ç¨ÛëºUÝÇ‘o¨ÛK/÷R@M_Þ»ön½3Íëv ª2IíYRx§Aˆú½šäàfQH¾+Ðeu‹"?먫ö—ö—ñï´¹ŽeõFÍY¢ ’psU,5KMd{¨®6Øæ6È éW+6mI·¹{iµxæO¼ŽàIÿ Ž·ö•¶0U›]FÎô¢ÝE7ûš°î±¡w *Œ’{ ¢5Í)‡Ë¨Û78âQR.«§¼m"ÞÀQ~ñó øƒHg(º±eê<ÁW-î`ºˆKo2Kèèr?:Š}JÆÖ_*âîäÆv»€qëU¤ñ"MNÙH9t«–—–×öââÒtšèèr K$‰‘Â(êIÀ¬ø|A¤OqäC©[<½6,ƒ5§ECQÖtý'É×1Âfm‘†<±«ªÁ”09i“Ϭ/4ò,q Ë3T£×ô‰@)©[óþ°S ×4»›Ágý¼—n£‚qZQEU½ÔlôèÖK˘àF8 #c&¢‹ZÓ'›ÉŠþÝäþèf¦›P³·“Ëšêßû¬àd¥…̾LI/÷Á?•\¬ÍKÄ:N?Óõ >Žà“LÕ쵋U¹±&‰º Õú¡&µ¦G;À÷öë*}ä.x‹FRjv žyRIâM%V“U´Un™G5¤Ž¯u £ ƒíT[]Ò•ö6¡n¦Òã4Óâ 8C©[î'ošÓ¬ýO[Ótx¼Ëû¸ _öÛšN»¦k´ºmäW(§ÆÙÅhÕ[BÎÑÕ..¡…› ‘Âÿ:€kšS ®¡nFq⑼A£¡Ãêv«ÇyE[´¼·¾€Ok2M8‡ ÔôQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEqÞ-ð‘â[í B[…xc8É´p;׉ü8ð„~'ñ^¢—S5Œ ÁÊÞ§þÊ´üsß|a¤P¸‘&?½µ’RÁ¹³ß5ôœÍse λD WÒ³üC ézõˆUŒÉ9|Û^á Aã/‰Z’‡›û"ÍØćžp¼þf½çþÑü,&T ˜å÷6ì×|Jñ}槯Zø3A•ÅÄ#?q{ó]f›ðÇÃvÚ8´¸ÓãšI2I/Ìå±ýãÍcü8º}+Äúß…FhlØ=¸fÉy¯H»¹ŠÎÒ[™Ü$Q!vcÐ^5íSâÇN²š[} ‰ gEÏzô ï†z5¾Ž²¢6š„ ¾˜Î0õ®ká]ö³âoê:Ö©pÃì¹¶#©ÅzôÐ¥Ä/ ‹¹a…x?Åÿ xsG·±²Ó¬ã·½¼—åeÿž•Ýi? ü7máK{{­:'˜A—™”o'ÝkÏ~Is¦üMÔ´«9$}1KðNTsÖ¾„¢¸о+xbâ <=íÄl¡TüȽڳ~ÛìðºbL—3³7>Ÿ(þUê5ç?ôÓÂZ®«qeÛž=©.>mÇ¡®wá?ÃíRð`½Ölê[™K£ÉýÞƒÌÝ\|j‡LÑ$•lædIm÷£wùô\ˆ²ÆÑ¸Ê°!‡¨¯~"ø{J›â.“áÝÔBò8kØž­zõ·Ãß iºdð-X]CJ œµãž ð¦›ã‰:ȰÑmI ŠäwÀô‰¢ØøLOÓã1Û!%T¶î½y¬hšºEÚG$¶¶ÌQØôãŠóOƒÞÓüA£^jšÍ·Úi ÄŽ•íšn™c é‹ie‚Ö,°\ð+Ç5ŸÜ|Iñ²x_J¸hô˜_7Æp_EuZŸÂ½ÏHi5 QæG(o¼ËÏ>µÂïkþ.»ÔWR·-mH^!ü^•éÕÓGo Ë+Db{ ù£ÄÞ"ŸÆÿôÛX÷­ŒsªÁžŒù›ô¯¦"O.$OamªXÍew™«µ×ÔWÍþ.ð֞߬|9¡CäÅò‰18õ'ð¯kðÿíúšê6q8º T’ìG?S]}QYZæ…¦k¶É©–(‰uã¾iÖ™4Yëš|mo¥IxR ¬NUk~|×¶øÛÂþÖ¼?w­^[–¹û6èç秪Ÿ >ÚxKµÔæóP–=ÌY¾î{b­üLøƒ4¿&æj7 ¬ ?„úŸjÎð7€£»ÒÓXñB}»R»ý㉾eLö«K ¿~'é–šh0ØêÀ£Á»äV‚=+Õ&• år"–$ö¯ð×€âñŸ‰õ/j¯'öy™¼ˆ•Èó÷·µcé~ÒüOñj{Kx£]*Ï; _ºvñÏùíLñGÃÛcñoNÑôøü›9À‘y £­} ²Af–Ê0ˆ? W„|iÒ´­XZiV‚=BömÌè~lgú’+ÐD°”'±Ö½;ÂòßÏá>mQÃ^É ´§ùdxóEЮt[WW¶YÖ(Äô8¯)ø9áK-oOÔu] Ú+3`Þ¡ø•á(è–zφÄËóùrNîÝ>µíž Ñ—A𥅂® F qüG­oÑEQEQEFÓ‡ *)¬)­un˜ÝbaºÝi<è¿ç¢ßT¢Q“*–­·0œuÊbj6rOä%ÔM/÷ Õª(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+‚ø»â øðÅ Iî”™<óÖ¸¯†1ëžðA¼Ó´1q-Îdgiv–鎿…3ÂVV:ñ̺¯ˆîs©Ú±é¤`CƒÿW¹ª„UU 0rßµµÐ<¨Ýñ¼ÄQ3êx®[à^„úw„_P15ô†L÷+Û5èú½ËÙéw1©gŠ&eé^ðV͵ÿk"º]Ò+äØŸò+ßn¦ö“LÌ"Éè0+¾ÞË®|L×õv}Ë 8ôÛž1ùWeñ»W—Jø}:BÄ=Ûˆ~_C×ô¬Ï„66þørºÅÄ^匧bnbN:ôþu¿}ñ[ÃVvؼ’æÝäS±d†JÎøY¬i%%Ó-¦êV{—vˆ¨9bx=ûW§WÏ~!ž3øÛµ‰]šxë9PïôÓx³Zñ‘¨ØiÅüV¶:¡0‹‹uù£ÇoÇÖ»ø+HðÍ,ƒsÎçæ|ú×OY#׬ü;¢Üjrª,hJŽì{^+¯jzußµmoR¿†mfþ?Ý[«sgå_¯­zÁ¨  ôܹ÷1Ç»W^ñëQ–òãGðå«–yƒ2ý‡ó®ºÎiZ¶›¦ørÝDpª#µÏ޵—á_…÷£ÅOâ¯]Cq¨–Ü‘F¿*ר\̶ÖÒL좖$ž+ç?Ë«x‹â^©âk ¾»,k#í_lzñ^‡ã/ø‡Gðµì÷ú v¨Ñ”‹€ß1àqŠàfŒl| ú„£÷×ÒwOò?Zõ:òŽúÁ¶ð¤\M™ofUÚ:+µð.Œšƒ´ë]¬±ÿïw¬ïŠš”Ú_ÃÝJkwÙ+(@AÁÁë\oìÿáõµðíε,xšêB¨Äs°wüNk×5 Ó®|¯õž[múâ¹O†~»ðï†äŽù]ÜÎóÈ©?þªíkË ké­v–|÷o÷!Bçð¯ øClþ$ø¬x¢uÜŠÄFqêx¯s¾¿µÓmîòe†ÆYØð)Ö—PÞÚÇso ’Wr8èÃÖ§¢Šæ¼y©7Â7¬‰¦_&/vnyÏÄß o…:y¶÷¶]ˆëÏSùóVô-}üGð÷ÃÚr¾ë‹‰– €=óøq^¹k )Œ*( ù÷Y‚O|{û$Ÿ5½ƒ.Ô/?ξƒDX" *Œ^ âÍMµÏŽÚEŒ,Y,e]Û{w5î­‚êš]Í‹Èñ¤èQ™:€kžñ°x#áÕÑ´c³¶Û>½2kø¤ºè—šäç2ÞÉÁ=xÿõ×o†f><“ÄÊ­·òbNãœ×OÒ¼óþ+ÏÛî&×L¹oÿ\׿€:+çÏ‹èúÿÅ DŒx@Sýã×ô¯{°´K> X”*E ØW3ã­ _&•e‹v%•XõU®²8ÄQ¤kÑ@¼»ã–¸ÖM52_H`ó\]óøŸÃž Ò<=k¦­¤Åb{…|’[¯º×¶iVZv“¥iÚT†Èб«€Kuõ¶:RÑEQEQExïÅO\ǧÞkúMýâ\ó$‰d8ǰ®wš/ü'ÖúiµÔ¯âkhñ|ÆSÞƒÒ½[\ðD–‡”·pIkX$IYN}IkÉ£.¡áÍKQ¿\óÊG'šÇbŽæ½ ü2‰¸òSÙÝe`:àu­ïÝØ/€ô¶Ic0Çj›†GWxÖåÒØ Ý0A“5¿©kzv“É{w!FpíŠó]*öË⟋îR[EÓ[l1?I¤õ#ÓÒ“ãLZN™àI¾Íij“I"¨(£pçµu_ ¼‹‡ÚÑ¿ø¾ž•êQEQERÉàWžxçǺ}¬ £Y]Å%åãy9rÇž 5æú ïü*ï ¿éwʲ;dpÞ¦½¯Xñ–£h­©ÍwnQCrçÐWŒøçÒï,>!ÙÝÄÒÜH °!ãiþöïøŠÇÄZd7Vw1ÈÌ€²«r¦¼ÇÚ%öŸñimôÉ!«R©üJO ×кMŠiºUµœc ajíQEQEQEQEQEQEQEQEQEQEQErÞ,ðyñCÛ°Õnì„=­Ûnï­rïð?C{á|Ú–¦nÁÏžeËgëZ¿ð«´Ù£òïu-Jò3Õ%œàýq]>‹áÍ'ÃÖþF•c´}öM&½áû/Y­­ñ›ËVÜ<¹ søW5/ÂLUä°•¥^’Ûwó­ïxRÃÃÌ–/9YNO›!l~u»\ˆþiž!ÔSQ[‹› À6´Ö¯´¸÷©´iÁºÄ—wdcϹmíú×UQÍ w¼R xÜa”ô"¸I¾èï<†ÞûPµ·’öÐ͈϶+Zé6·ÚeŲ˜—O #Œ †ÏR}ë©®óáW‡5ùn¯ÒæäÊÅ™vÛŸ` -¿Â Z>è,eAœíY˜ Óñ´ÛE¥h$(TppÀz¹áï é~±6š]¸Š3Ëw$ýk^øg x“W}KRI¥™€ó›¥ü/ðæ‰2˦GslÁ·agb úUK¯„¾R/ íÁÎs-Ë7ó5kKøc¡è÷ÜZKz¾KHüöÙùVÞ¿ám'Ä©j4«Ê€å•sðÁáH‚ÊH êRV®ÇKÓ`Òtèlm·yP®ÕÜrj˦ôd$€F2:×ÿ oÂ#¼±\L]÷7™19«Q|+ðô¼pý²4eÛµn=ª´ßü#3 ÞàÎ?婸bßκ?x^×Ã0Ë­ÅÌË!Ïïä,GÒ§×|;§øŽÚ85‘ã·(I søW:>ø5IeÓd=dY˜7çšê´&×DÓ£±³ BHÛçW]D(Ã*F=ë‚¿øU¥Ëw%Λ}}¥™N]-f*­ë[Þð~—á€íf²<ò¬žVÜïõ5¯¨Ø[êš|ö7JZ ×c¨8È®9>ø%?²CV‘‰||9ðرK/²Iä#nU31樿ÂI)”éî®á)Ítº/‡ì4 8ØØ#¤–Ã9cϽs3ü%ð½Üí-Ü7ä gfÇëSËð»ÃRÂn ÿ,„í´þ©ôŸ†¾Ñ5õ 4Gs¾òq]mV‰¼)§ø²Ö+}A§T‰‹/”ûy÷®X|ð€`ßgŸpêL§šéü9àý3ÂÑÏž%Û7Þó±©'Ó~Áæy;ƒ~íöšæÓáƒÂþöÁæl`3ÊÄŠÓѼ£hZ’_Y ÕÑJª¼¥† tì»”¯¨Åqrü*ð­ÍÄÓÝÙÉpò¹fß+cŸlÔ–¿ <3cw Å•¬–íUIßÊ»*Ì×4;Ä6 g©[¬ÑFG ûå!øGáä˜4ò^\Ƨå†Y˜ ü+¸¶¶†ÒÝ ‚5Ž$UT`Y¾"ðí¯‰lÜÓÇmß¹}¤×)ÁŸ Äþdqܤ½L‹;?Žjiþxré6ܹWÒIÙ¿­nxcÁº?„aš-*˜åÉ9ÍTá׆âñ×RÇ›÷ƒ»å ëZë(¢Š(¢Š(¦²‡FVä0Á®Y>øMgyΑÈ͸³’y©n¼á‹Ç/>“¹ê̹?™§?<7-¬Òé‘I¸>Z7!sÖ¦> ðëZÇnúM»ÃÜF^XÒü7¤è³<º}œp;Œ1AŒÔ·z}©[j7È÷VÙò¤#•­(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)®â8ÙÛ¢‚Mxoˆ¾ x£UþÕÔ<={®›¦6Æ2Òï¾ø®óž·É¶t-›Ýï]µx¯ÄÏxçÂ7&æ6¶M6Y|¸™FXqÿë¯RðµåΡám6îí·\K´‡MlQEW!ã­sÄ: ŠÝèºtWq"–œ»`¨•Oáîüo£Íywn´r wuä°|UÔåø–|6ÚPÞi‡vìÿ{é^µExï‰>(ø›Ã¾'‡N»Ñ£†Þy¶C#ï]ØÍzô,d‚7o¼Ê ©(¢¼oÇ?|iá ±çiV‘YÉ)X¦'vá^³¦Î÷Ze´òã|‘«6:gnŠ(¢Š(¢Š(¢Š(¢Š(¨"¼¶šy ŠxÞXþú+d¯Ö§¢¸/xîòÇÄ+ èVqÝ_ªy“™[ ûÓ¾|@47ÖÒÀ‘]Y6רr¬=EwtQEQEW›üAñæ¿àÖiáÑ¡›OʪÎÒäûUûÿk#ÀÖZö›¥‹‰dÍš"ØÚ¸Ï´Ï†¾=›Ç6W“Oj¶ííÚ§5ÞQEQEQEQEWžxûÅþ'ð¢Ëyg¤A>›æv~GáZß|G}⯠ū_¢$’»1À8®¶Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+„ñOÄxt]dhzu”·ú«.DIÀdŠ—6âÛXÒ®£†Kvq™3ýÜu¬ø~4Þ\éwxvWkfÄу÷G­Z·øÈn|.úÄz4’4lD‘#}À;“[câe“ø>Ó[Kvi®›lV üÌ{ŠÍ±ø­s·o§kúšgÚÔ»>àßá^…}©ZéÚ{ß\ÊÝqsÐ ó·ø³<Â[ËÜͤǟôÂv‚=@ô®Òi’xmuÙ.- {ËÒ¹%ø¬¾Ùý‡|4|ÿÇéO—¿JÔñG´Û 9 wÃyl’Þ2áxïŠòÏ…$Ñ ±¼Òï¬g¹û\ìJ˜‹.=ëÒô?øm57Ð4‹9!’$i<¡NŸQRCñCGmv-x.mïem¨’!¿W=û@©oZ>íâóéÁ®ÿ SÂ:b±ÉknŠä¼YãÛÍêw ®ã<)¹WëY‘|[Ð¥ÑX÷‚Å_cKå |_%xsAÔÞÃQ¸š)—~åˆo¡ïLÔ>'xgL’Ý.®¤§EtÌGFGó¨5ŠþÒçXn§€eKe…uºf¥­§Å{m»É”n]Ù¬j‘èÚ\×óG$‘¹ew1ú ãôo‹¾Ö'¹ˆ ‹y-×s¬ÑóúVç‡í[-â!t#¬‹µ{êéÎ? ˱ø“á]B¥‡T@°à>ñ´äúzÖ¦‰âÄ!¿³/c“ï á‡ÔVÍ5˜"–c€9&¸Ûÿ‰þ°‘ÔÏ4ʵäŽ"QOÖº{NÔ´íKK…–×fòéÎ`ZüQð­åä–±_8š0K+ÄWúÕ½/Ǻ¯©:ÞåÖ䌪J…w}3[Zž§i£ØK{{2ÅC,ÄךxûÆ:v¹à-RÞžñyñ”»žµµðiBü2Ó1þÙ?÷ÕwÕÅøân…á}PØj"ád;–2EC?Å ZÚÁq;ÜÇë¹ @ÜÊ‹¯Šþ³Šfk„Ža”f‰†áùVâø·J>þÝyŒVDA´ŸÂ°,þ'ÙOy]é×¶vÓ6Ø®&j7§5sÅôO ]E . ’1"´i¹pO­W—⿆"¶†qs+¤Š)!þñíWoþ!è6Vp\¤Ïr']è!f#ׯøkÅz_Š­ãM˜¶Ã‡FeúŠ«â/iž¹ŽÍÖk»ù>å­²îsþÝÇZn»q%§•5¥ìcs[θ|zÖ=÷ÅïiºŸØ.ÒæwìÌ‘í_¥:?‹~mBY…Ä 3mŽiSj5w‘ȒƲFÁ‘†AéôQEQEQEQEQEQEQExF•§]éÿ§—Sq‰ÕŒOØŽ8ü©Þ;±}kã“mf›£€«Ü2ŒíçœþµéWþÑ´ jÒ[ZEÉHž+ÎþøO×<3«G"·Ùî¥eaž£>”¿zªóóŸ­oür½ºµð „’«;,nAÆFÜ‘ú Ò¶ð„ÚïÁÝ;J´›É–kt%¿Çòýkξ!i×>ð“ Áz'W›÷ì¹Iþéÿ ô‰ã×µßAEŠ[_-ÍéÖŸàÍ#SÑ~ÝØêÍža6Åæ³~$2øPfTiÓqŒ÷¬ýçÏøÿ|»j°ôQߎµÄ$Œ|mðß;Aãñ­¤Âh§½ÐþUßxEðŽ˜ÃäÍl$‰&v:¶:àæŸXþ(Ò!×<7§Ì„вŒö5à ÔÍçƒ5?7ü~IrÉåÎÄêÍüêßÃÛï´øbóÁ—Q‡»7þQI%cÏÌF¯j×mmôï_ÛÅX£µe ƒÚ¼çà>•l|/{{q÷óYpÃ;GµGð’pž>ñUœ?-©œ²ÇÛ«S5(V/ÚON‘W0Œ_•†Ï¥3Ç:„º§ÆmFŸ"ÎmìÇüŠè~ x'[×¼M¤\Ù_4»wS,{ö€A×?ñ¦#qâÚ Ž×bŒÊÚ^ÑøÓ§ÚZ|8µX¢ HHïü qöŸé2Äý™'é] |ý5üºßímÙÄVŽÑĸSZ?´(Ч(ž~ÒGuô¯Bñ<ïðÊôH¡ã[Ãw8ùkƒøqàÛü*{;™ÛüÒÆ>`¬?ö?¼5á[Xd¹°ÓXCžflžOå[ßLj|Oa`šW‡§·¸´¸YUÉA€3ïOø¹¢Ü_xNÖZ-—–j¯(ÀÎ{óõ®KÆW²x«ÁúN·j‘“¤Ä†m£$9ÇéŠíü3%¯Ž|I¥j"¥‡O´F)ÿ-·áýk×4ŠGÔ2†R¬¨5à>Ò Ô>:kjã0ù‚öÏùÍiøû@á÷„õ½GN¸”ϪÜa›< 9Íjx^úXþYéøzîušÓt{>bË÷ºÖ“¡øŽ?…š¶“oöYD À²8ù¹È_éX:¿ŽóCM Å>{20±\ª‘µ‡zôŠfÎóá¹–AåDZÂýîœÕ¿‡ú¿ÂhÓËFií™år¿{#?ʸøº÷Oøs⨕م†|ƒÝwp+¦øw«=§Ãè!M öí§V’I”)Wfïɬí_xKáߊ§»µ–Ì+;ÚÆT7Oʬü#Ó÷áΫyj3ª]_5ÎIlqÉ­o†^Õ¼=¢ê믺É,åœÆ[v;î?ZÊø:š]·†5½FöÄPß¹ÜÊÑ^ÇmqÕ¬W¶è¤PÈ}A§MW˜ædCÕXdWˆ|>´µ¸ø¹â˜e¶‰¡Üv¡\óv¥ø½¥ÂÞ;ðªÃ²šMŒPa±‘]–µàkmb/7M´`¯BBžkžø%<šÈ×5kÏÞÜ\\csŒàÕFÂöMö„¸Óàv÷‹‡AÓ;sU¼c Ã¨üzÒ!tAªÈêïc'ü*ÏÇKt‚óÃ’['•7°<|2lüWÒlm>”Š4È” |Ùã¥tÿ äø{¤4Ž]Œ#“]}x¿ÅKEñÆ‹© T­Ün¡lÑK;sÎÑïÒ©xÆí§ø£á –ÖKI‹Œ«}æ\ó‘]/ÇÃ|=$¬€Î Õ½h@øK˜fsïò×/ðð†Ýœ~Ôz×­RÁäWÏ¿4 >+hvð¤"é—Íòþ_â­_zl:>‹¡I§F¶óGp±¬‘Œ1[ž7Ñì ø7pæÞ3"[«ù¡yÝëTôíröËà_ÆÅ§ù{;GLÕo‡Z€¶ð?•…utóîgPbB{Õ¿…úF­geâ M^ÅÒÆGimÖa‘Ïjç¾ h°\ø»_»–$e·”ˆÆ8cSiÿgþÑ—Ö¶‰²gUé÷A¯wª:Í»]h·°,ÞI’Q'÷xë^à‡mAÖ´y!“V‹â[uÌQŒxÖïÀ'‘ü5’bûCmBrd6iwûDKöxãó^1ÐàŽ*ïÄ8RÏâÏ…Ù ȪÛxã4Ïz•Ëø“ÃÚ6ⶲ̲8ìß0ÓüZÓíOÂû–1€Ð"Èsàú•øk¦sœî?­wuç¿ü4šç‚®§Š,ÝÚþõN:טÝ^¿>XX[*ÛÚIŽ2@Nük¡ðŒöž5Ó<5§Í JÖƒ|ä~ïnôÿ‹ÓËÿ †t¿ug4èY…o˜pZë~)YÆŸ ï„Qa1ü<Šãu¶msàw×ɺå@r98&éZý¾%¼?»ŸæŽç޵—ñ7J·Ô¾.ørÒHÔÇ(]ãoV~<ÚǤ$0¢°¸UVz¿‡¸ðí†xÄ œý+Là ƒô¥¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢«ÞùŸaŸÉ`²ùm°žÇWͶž+ÔtíRho|9ý³yopÎ.Ósé‚+vÃâíõ–¬×z„Ù%oÞΆÔñ^‹âkíGÄ^Œh$ãPFGÜNHî@¬…þñG„_ìWÖ¶­fìÌÓ#Ã>Ø©¾"øWÖ¼I¦ëúAŠIlÇ6ò¶sY>)ðoŒ|Koa¨ÊEug )hòàw&º GÁ:—Š|.®ÍþžÇ̇kdDG@=«D»ñ柤&€º2ù‘¯”.|Ï—Œúô­=gáö×L–aý¢®gó'½A¥êþ=±Ó¢ÑÛ@Y&ŒyBéŸäúã­hÝèÞ"Ò<)-¦›oõõáf¸.û@'Ò±~h>+ð¤òØjZdikq!•çWÎ¥A¬øWÄ~ø˜Þ(Ñ,~ßor6÷KñœÿàñcxvamD².í¸<õõ5¹ãÿ êš–©¤ø³I´Íí®×–ßøŠú}Æ­Ï©øÆ±Á¦¦w¥Û s<ÿ) u \ß4ÏjÞ0ÒgÓô+©,ô†sØ#‘ùUŸ‰–þ&ño‡ìôû/Ý#¦$b]@_cÍvßgÕ?áŠÃTÒå°’ÍV%wŒu®Æ¼‹ÆžÔl¼sgã-ÜÝ2>n-—ï0Æ+â6•â¯ÛXß®‰4)o.ØíwüÞìk®ñ Þ#½øptËm ·\Çör›× 1×9¨~C­è|~Õtk‹}›Ÿí ACì0jOˆÞ¾Ôu?ĺ"+_ØÍy§ùõ¦Éâoø¢ÛûÓA¼°–QåÏw8Ø#Øz×g}¡­ÇƒæÑ¤&|۲ܖ8ë\o…~¾ŸðÂ÷Dº€­Õкžy=åʯ|'ðœþðÛÅy†êI pzãµzRÔî§²Ó帶´{¹|¡ÁjðÝ×ÅšÄ{ÿÏᛑîG’¬¤ >µë^0ðâx¿ÂséÒ~îIP29Vë\W…õßøWIÃ÷~¼ºžØyqM<¶‰=ªOh~#½ðLËó¶©{w‹6V,6zú T×ó꺮…6…á‰'¾hö •G—œuÝÛš‹Æºé?Κ뙭áŒ>èiž Ö¯m~ZiͧÜÜ\Io¶Ýâ\«†Ïj½à¦x'PÓu0ëSÜóãøIè? ¯ámGWð]Œºö…yp°1òÛ(duíÞº+}Qñ‹©G¯Ž;ô+¦üˆW·ã\„u=Gáœ3ø~ÿE½¸RÖò[ǹd' ÍwÓu»ƒªjzØòfÔØíÃdD˜àWhZG‰´7UðÒf&òé™nñû°„ýã^ß§Z 6ÚÐt†5OÈTÞ£>—¥Ëumc-ì«÷`«Wx6ÏÄúGÄMCWŸÃ×+¢x\ŒF þ*ŸÇö~$Ö¼k¦êV ÓC§6I;~›øy¯XÒneÖ´0×¶2Ú´ŠQá›ï}kÎü=mwðËQÕ-¦°¹¸Óne2Á$–Áô8©¼á»_Ç·þ7¿´’ØKòÚE Ãc¦O¥ek6~)¹ø£iâˆ|;rÖ¶«ä…Þ¡›¯ Lø™gâ/êcYèW(¶‰±?9àUïˆë~'ðré0xrñf•U·qˆÈõü«¤øYqvžƒK»Ónlä±A3.7ŸjîëÆ|qáz×âu—ŠôÝ=µ*˜”ò§ïÒ©ø·Iñeߊ4I¢¼‚ÝÿãÊ3—@:dûÔ¾(ÒERüêï ¿ñnÛYñ9±±Óô[©VÞQ#H1´ŒUßjú÷Ãùtx¼9¨´òÂ"` c׬ü=ÓßQønÞÔtùíž8Œoç&Ü“éëT¼-{®øÉô­êò\ýžhpe'¿¥ušuÞ¾ºN£©êVîæP~Ïbœ²/øšàþ¦±ámKXkï^¬7²ùˆÊ ã¯hÚݿŋM êd˜lEòùc5ïQ?™>Ò»”¢±¼_¦\ëÔ,-$1ÜMTaë^CàÛéž¼ð¼ZÄ73;´:[¾høk§x“D¼þÈ’Ââ(áº3Ï1  }ÑøÕû;OCñ^çÄߨ7fÖdòñÆTzÓ¼_g®ë¾>Ò5kmëìº|ŠÎÇh-Ïnk{â7…î¼S¢iÚų&£fë0…þñä¯éX¾/¸ñ'ü-…¦‹skF žoFàVÏÂkbÇI‡ÃúŽ=ªÚEŸ´?Ýo¥zeAwn·vs[·Ý‘ ŸÆ¼§á?„eÒÿá#v΋,í aÇGqõÍ^øOàù¼96µ5Õ»Äò\²Äc÷y8?iüJðdþ%´³½° ý¡§Ê²Æ€9"²|A}¬x×D_A¡^Z´¬©u<ãj*ƒÎÓÞ›ãÍ;SƒÁÑøGCÒ&¸F…WÎm=êÅ„¾%·øwý”|=7ÚÖ!T0Ç#ïf±¾Aâ¯éZmχg‘·™r®¿1§|8Ñ|AgñXÕ/ô§µ¶½fl³·œúÕ½KÚ¯ƒ¼qqâ]ÀÞZ^ ·F~`Þ Ví£ëþ(Ö­gº±—LÓ­_Ì)!ù¥nß…sÞ2ÐhAÏøÕ_‰ºwŠüYok¾€é¬«)c ù§ë]·7ŠásýŽÍìõ0› Hw0_QYŸ!ñ$Zuð×EÈxò…Ær|gµz½QEQEQEQEQEQE…âû ýKÂ×öšd¾]Ü‘Œ?•yß‚uæðŽˆ4ýwA½ŠhÎ ën_Ì?QZLjçñ¦›q¤hº âðqu”ª;žy®çÃ:~Ðm´ØÛw”¿1õ=ëbŠ(¢Š(¢Š(¬E«ÜiOŒðÇs'ËæKÑGsU|)á[ X²3]ÌÛçú³µÐÑEQEQEQEQEQEQEQ^]ñ›Äzl^ Ô4wÔoîC|Õ£ð«Ä]ç„´Ý2Þéò™yZô (¤eVÆ@8õ¥¢Š(¢ŠFPà ôŠZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¨n ­Bô}-QEQEQEQEQEQEQEQEQEQEQEe]xoE¾¼k»­2Ök†àÈñ‚M>Ï@Ò4ë£se¦ÚÛÎFÓ$Q8­*(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¨ês_Áh_N¶Žâ|ýÉhüëÍüIñ[Wð”°®±á¿-f$#,ÙÎ+²ð_‹`ñŽˆ5b0ÛZ&`Jš—ÅÞ$_ è2jMnn JpZ¸ß üJ×¼]#'è-ã8y%ŸéVpö±µÚ$s‘óª€jz(¢Š(¢Š(¦î¶ägÒ¼çÅßâð–´tûéÁ!RaÂ9ú×{¦Þhi¶÷{ yÈiíV袊(¢“#8Ï>•ÄxËâ4^–çG¾š ý¡÷yôÍt>×cñ/‡íuhbh’áwn¢´nn#µµ–âSˆâRì}®;Á¿4ê7V61M¶ãwïÞ\õÛÑEQEW®|AƒBÔ§´—FÕ&HF^x¡Ê~u…gñ»AÔ™ÒÇOÔî$_¼±ÁœWy¡j¿ÛZD7æÚko7?º™v²ýEiQEQEç¾"ø³§xgR–ÒûJÔDhûàFHÙÍw67i}cÚ)U™¨=@5ÎøÃÇ6~µÝ•ÜêêX¼)•_©©üâûohÍ©ZA$1 x~§ÒQEQEQEQEQEQEsþ"ñm‡^%Innç8ŠÚ¹ÛÞ¢ð×ôŸOsmfdŽêØâX%\2×KYºî³m iêWaÌŒ¶Á“YÞñž™ã+Y®tÏ3ˉöëŽk£®Jçâ&ƒiâÅðä³8½fÛ÷~PÞ•ÖÑEQEQ\ÿ‹O.ïSŽ'Àm­×¥néZ­–µb—¶,Öï¸ïWh®sVñχtKƒo}¨"Ê ÜG×+Nß[Ó®tÁ¨ÅwZÝænÅyf“ã/Qø³}pú¨‹O†ù’íŸ?•GñÝ’ãKÑdFS\®{÷¯@Ó|G¡éZu…Þ¯mÇ” +¶ ®‘%I##B2+Pñ—‡´»ÁiyªÛE98Ø\d±¨xHÒôäÔ.ïbKV;V\äTm¼uá«Í>køuXZÚÚïœ`Ö¶™ªØë‹u§ÜÇqtxÛ"®Ó$‘"Ø*(É'µy,¾:Ó¯þ.[G­éÖ–Ì%bÿ#6zV§ÆIa½ø]w4 %ˆ²2ºr:úÕ߇ºž›¥|;Ð’îúL–Êʱ]}ÅîŸýœn'¸‡ìr. ³ Œ½s¾Ó<cwrþ{VïŒ2n"¶Å_ ÕmMÑ;D[þbjxõÍ*[³i£l÷þY¬€š¾N:ÖDž)Т¿jÖ‹vÜLƒwåV%×4¸oâ±’úº”e"/ó5kš]½êÙͨ[Çr܈š@þfÞîÞè?ÙæIv­±³ƒSÑTµaÒ.üß¹å6*ð¿ÙùõmÕA\ú{šú ”´Vv¥®ézFßí è-·tó©ìµ =J:Îæ9ãþòЧªx“GÑ]PÔ ß…Gq¸þzÛk‹_´ÃMcMŠtï­ÖWû¨d5tŒŽ•“{â}O¹û5Ö£ swRÜŠ½ý¡hl~ÛöˆþË·w›»åÇ®jœ^%Ñ'RÑj¶ŽÉ"PqJ¾"Ñ›vÝRÔílJ8¤µñ{x,íµ+y®È'«EQÔ5};JU7×[†û¾cã4ø5++™8.¢‘w¨FÎG­š•–ž¡¯.á· ÓÌp¹¥²Ô-5(LÖw <`ãrŒÕ{Ý{IÓgò/u{yq»dŽÅD|Q¡,K#jöjŒ2 ” Õ» RÇU…¥°»Šæ5;KDÛ€5rŠÍ¼×ô>u‚ïR¶†fè þoívâßíry8ÎýÜW‘iú­¾¡ñÃSk©ãû46f8]›å\÷Øx;Àg…µ ÝRÎæ[‰oyÞç .s]¥gk‘G>…}¨È#Ú¼»à3ÃoáÍYäuVñ,qÚ½rÞæ ¨üÈ%IûÈr+–¸ðw†/¼_»'”ú’ž}ï\WIq©ØÚÎ!¸»†)HÈWp 2m_N·dYoaVº õ©'Ôl­]âê™þèw5ad]ÈÁ‡¨9§QPÝ]Aen÷2¤P Ë;œYÖ^'Ðõ ³Õ-g1®çØàí¦­XjÖš»XÝÅp©÷Œm* |E£Av-eÔ­–|ãË2 Ôúœis¤]' ­ {çŠò¿€pyZF±“ÏÚÊñ^›}â-L”E{¨ÛÀç³¾*ä7¶×6ßi†t’gzœŠó½cÆv3üIѬ!Ô£[[u’K†a Ç×KâáMjÆ8u«‹Im³¹7¸Æ}A«ú|ú&“ ÂÖsÁ™ÊŽäëëNOè’Á$ñê–ÏGÊù Vìu+-J/6Êæ)ÓûѶiš–­a£ÛBê;x‡ñ9ÅgÙøÇB¾´šæ øÚ8F_<U¼;ãÅÕž›+HÖàÄpÙô®žŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+×ãó¿—JÜøç¿ü!ÚRÙ˜Ê-Òªl€¦ø—ÂVß å¿’ÞÿÉ™ñó)ǯZ³¥xžm#à\z“¹7&E-Ï5›àKÏ Oàâúµ¹žúåYä’KvrÌsßoáh}[IÕ´}ZÅžÖÚF{qqÆÓÓ­s? ü3ý·sâky6,0HÑÅ*¹ÈÝ`+Õ~x&hóÙOx.L²ïùF®Ò¡¹·ŽîÚ[y—tr©F ×ÏÚ†tYþ6ë=ÆŸXÅ èƒúס|U¶¶±øQ}oi,T Ñ~jÇð‡…,.þ%Ö¡Íq5¡!ߊÊÐRü-¬øêËQO´Cì‰æ|ÿQø?gŸŽü]@,qMµãÍÅcüDðìIñE‚Â3j—˜g0ü¹9ùºUÿ‹ú%¿†áðþ¡¤@–·ÜÃÇÆãŽ‡ò¯Eñ–¥{cðæòîßí­ÀRBÝëŒðç…ôûŸƒŸm’Þ7¿–ݧkŒûúçwåùV‚¼wâÈt¿Ï|ñÜÙܕۓ(^ƒéÅQ·ñF…§jº¥‡‹4Ùñîd+y°³mÝòzŒW¤ü"¶¶¶ðíØ¶»[”’å[vNÜñŸzô:+;^Ïö¡“öwÿÐkÅ?ghós­¹ê¥:÷Ê*ޱ¨Ç¤h÷zŒ£)oHGÒ¼{áQ“ƺ–¹âM]ê}å ŽA¹WðüªO/ˆ4-OÅ:–£m%½š£H‘‘µû¢¯|$¶ƒÅZ^©®êðÇwswrÀ—vÕìzT~¿}'ânµátùA’›¾£éYþÒìí¾8kV‘B©j°"_º¹"£×ô[㎃Ÿn°$‰æ°^„óÍtŸØžp/S5KâwˆåѼ ¢évîèú†ØË¡ÇÈ:Æ·üWá«)~NR(áš -é" òÕo«·áü6OšÙüÍzeá¿4[+h4ýFÒýÅÎÙ$^®*猼e§|/:–ÝÚ´H’µÖ~mÕ½oâ{Í?à¬:Ô’4—d]¯Ô–#ƒU~èÐê^ }WV‰n¯5 ]¥–A“Œ‘ŠÉøo¨=ωüQàû¡¾Á]Ú$'!W8 V„íl<5ãOxV‚'·*ÒB ãÓ'Û•Qð4öº?ˆµý3X³‡ÊxxÕ†xþã^Ÿð×Á:^“¥Á«›@5÷I檭Р¯C¢¼Oâ°Þø‘m©jºoö†—öm‘ ]ÊÜýjo_hšÇÄDÔ4K³?cu’щù°û£ü*Ä–×iñ7P“Äp[I¥JŸ¹i˜3öTžµWáÁµø›â &ÆFþÌUó3Ñ[Ú¶~4øZ-WÂSjQFå¦$Þ£–QØ×7nšGŠþhÑ%¬"òæe¶Ê(ÊâÆ?õ¿øoNðΜ,ôøDhp\âoZØ®ÆÚäžðþ§ î–(þLö'¡®á'‡ìõï M­kEyw{+’òÅF{zU?‡÷‹¨x“Ä^¾ß5Œr¹…ÏÊ™éYZ7…4[ߌz®5¯ú0‰¸N†½ÚÆÊ :Æ;e+ +µ9À«5[Q8Ó.¤/üx×Á½ WJÔåº&K_´ºù9ã'×Ö¯|:¸}7âgˆ¼?¹³OÞD…¸CþMT×4¸t:Úƒ\'˜à?óÚ—ãæ‘ Øiú¼A–ìΰVÇËÖ™âÿ YXü+»mUcYMË1/»ëZÐ!ñ_€F¹­¨¹¼–´Œw´cÊ—àV±{{£ê67s´«k6qɽrНygo¨ZIkuË‹µÑº^¤h/Ç-GE¶Nžc>liÑ—ƒ¦kWRÒµ…Ú7‰5´¡Î#´Eè™=~µcÂ÷>O‡¤Þí—Sº‰äxÉrçžµ±ðÏ^¾¼ð.¡¢%Ù«ª´‹‚WUomæøSV+€~ÖûI÷‘á”Ú†¿g⇷ºydcUó¿ä+GଦïO×tÙYÞÎ9Ù#Gì§µdAá]O’é&ÉÉ-˘¯­u¿ô=&Ûᮢ¶Ö°†¶Q°Ž©ÍZð5­ßÂ+8/"Bm™Š°ÎxÍqÿ¼;cxÚÌòÆò[ ÊÆ’—ëW>“§|Mñ&•¶ÜÒ$YáyíQøëÎÕþ/hšEê7öpùÂvryüª¯ÅûkM']Ñ>ÀŒ“ÎÛ$Ž!"äpÿzïü3à{m_ŸY¶)\À«äF¸ qÍv”QEQEQEQEQEQEVV¿«K¢ér^Ca5ë/H¡ûƼ®óÅž,¿ñfŸ©§„/’ÎÖ6R»~cŸÿU^ø…¢ßxÏNÑõ]2t™&ÚñÊ 2.y$V¦¿}ªZxb}LÐï]Ö/)%U[éÎxþ•Îü:Ô5ï é÷Pj¾¿Í1•ž “ŠÏøa«\xËHׯ™uq§FUÞ5]Øç¦+7â3júýî‘­A¢]Gai2)£;ÛIÛÛ§SZm©sà­aK¾gÔ¤f‚7Ç¡®ÁÚ†§¢|<]2çA¿1# _/ïç<ŠÉø;gªè:…ý½þ‘sÚåÜ$eã¯HñΆž ð†¡bW,ÑœtaÒ¼óàNƒ5¶›q¨Ýó!cyP8ÇÓ­{5“âM@»Óg\¤ÈG^õãÿ|KÛ{ý_Šh\LdÖ&euí‚l|8ðÄú‹µOß[¼)s)6ˆü6ÏSù åtJO øóÅ1ê–—^mû³ˆ¢'ÌœsÓ½[ñظoèÚ ³¸¸Ô!•')¶¯|šÛñŠí/~I¦ÚÛ]µÔìù-œãš¯àý:?|!“Ã’Å:]Å1Þ…@9àsøRøÆ–^ÑWÃÞ!µšÞöÔ•\Ä[xöÀ®ªËÄ:€³Õ5éì&[P–¶â?¿Ú Wü,ñø[VÔ¡ÕtËëvÔ®Aˆ˜˜ç'Šú€}ih¯ŸåÔ?áøÝªêš¼ÑÛÜF|‡–óËŽŸLV5s'ôƶ»–¡'Ú…°¥ºô­Ÿ øšÖ×á”vSÛÞ-ÄVâ"Ÿfo½·éíYõ˜ô_êv°]Er’´ÛÕSᮥ&™ãf{Í2úÔ¦Ì Ðœ7'’{U¯^H>2iMcrm,“l³,LW“ÛŠoÆ‹çÖΓi§[]N¶÷Yš8Xàc·õØø—ÄÖ±x ‰adµœ­¼¾tG÷c¡$W §x“¶ÐÛÅá´âJ²¤Mæm=T½;—^—ÃßÃ÷Ëil¿/^ëÎ4 í%ô6·ñ¶œÊÜ[ÝM;×'7¨÷æµ>i i­k·šjʺ+º‹_3?7\‘^»Eq.ñÞ—¤­î”éq%á…•Q", "¼“àçˆ-¼6¤ºÄ76épÃiòXŽ? ú&ÂöJÆËrÆ—r–\}*ÍQÖtäÕ´kÍ=Îâ&ŒŸ¨¯ømªEðÞóVÑüB’Z–—tNÊq •Úi·ÚŸŽ/uI“Ï‹@{f‚‘vù¬zµaü=Ôm¾[_è:ü‚ÖDž"FC/lV| ¢Üjßuo\C"[HLv›ø$woÒ±®îæðOÆkíRúÚsa{RXâ-“ÅdëÚôÒ|ZÒ5ûË+¨´ÿ,lÊ…çšé>5jk¨èšvŸios,Þ|wOåÆÅBc¹üjoéxËáæ™¦ÀÒOfÊÅ6á°½E3Åž-}oáäúf“o;Ý}·Ëaå¨>¦ŸðKZŠ-?Ímq ên‘Œˆ@jõÚ+Ãþ6뺃XéÖ‰<×vwA¥ £¿8­/ˆ,Ó5?†²YYù¯q¸ªVúg‡ï> éW¾µdX÷½ÛÂ…cÆ8j—†u¦üFÖ¥ñ\s5È}¶jèXmÏJ¡e¨ÝZ|Bñ 4Áq}ÛMˆTœ‘Þ½ÒK!}¡}ŠéCù°p{œWŒ|*ð½õ‡5kiÝÍŽ›+lŒ—st?—ó¯w¢±|Y¢øbûKã3ÆBý{W›|;׬|áËÍ ^¸û%å¼Î}å= úŠg­æ o[ñ…ôREmpdhC˜¦IÎ+IñNŸcñ—QÖ®^U±6,†6ëÅ} «<1Êœ£¨eú’¹ïkvz'‡®$»”Çæ£GrØâ¼Çைtý#B¿µ¿›É•§ipÀçmCàýwN‡âöµ$ä[Ý)X$d ?=©þ)Õ ÿ…Ý¥Þl—ìöñl’M‡h<ÿõªÿÇ-J+iA—3\,Àê¼Ô¾3ñV•¨ü,{8GžH–5co¼;S¼!â½/Nø[ Àž;ˆ`12[ïÊø}Œº–w±]ÜN^5t#rÿœÔž1øƒâ­â\VFSKó£T§Œœþ5íhÛÑ[ÈÍWÔ5 }.Æ[Ë·ÙC,Àgàžñ ¬/µwY~Ár¥V½¿Â½_↋ü=œ2%‡Ý»W/àèú'†¡Ò5•û5ýˆòÚ9"äãÒµ×\œøwUÔ/-^+{½ÂÖ!ÎËŽ¯øWð™®-ü#­é~EÄó3Ëä#·Gá¶«ýk©Ø^é—Rks;í&"KgßÒ«ü=—Q°Õï´ ›k”¿¸ÔÈÈ¿*¦~cšÛÔïÇ…¾5˪ê0Ê–sÛ²Ç RÀŸò*Ljg¹Ÿá橱»–ëX‘¥‚ „•\÷ôâ®ø'Ä_ÙŸ ­Þ›}¶‰ä²ù',ÌÝë;á6¤þÓ5K}JÒú÷ :+@Ü­Aàš/ŠZÅýÍ•Ôq^¹îñ0ß=)þ2×´é¼u,Z½ôš[i¬ œÉKzœÒiÞ*ðf§®Û꾬÷×1±I${Q+Ùmn »¶Ž{iH\ezSQEQEQEQEQEQEQEQE5•[¨ëAD+´¨ v"”(Q…AKYÚíüš^…}} FY-áiñÚ¼gIø·¨ê~ÔÅü(/¥Ákd±-ííšõ_é-£øbÒÞEb€¹÷®ŠŠ* --¥;¤·‰ÛÕ•UQBª…QÐQµ´>÷‚6oR€šSDäÄ„ôåEg‡òcǦÑNH£;#EÏ÷W Ö—,kh¤aÝ”f§¡v…}1Å1­áb C#¡*8©h¢¡šÖÞᕦ†9 ýÒëœSŒ±¢CU¢4^ˆ£è)<˜÷nòÓ8ë¶—Ê ì\ŽœR”F?2©úŠO*3Õò¯;ø©¬ýŠ/Jiú„Þ]Ìä}Åôö¨-þü8ÂVŠÞL¯.Òõ¬Ï‡úV™añTÃÎ_Hp² 9àW¬ÍciqŠkxž1ÎÖQŠ’b·ŒG kŠ£¤¢¢0D\¹‰ ž§hÍmƒCF@i芊*ŽS¨ªóÙZÜg¶†BAt2"Æ»QB@1UçÓ¬î^âÖ)Yz@qVUj(P;M’¦Ç›>:nPi­ko&7Á``n@iþT||‹ùRª*®ÕP Å·…A `¸QÍ*Ã6䉽B⤢£0Ÿ±7§mHÁ‰ÿtRÇq墦zí¦Iko3n–½Y©UT*€ì(*ã¦i h̬QK/BG"ŸE†"ÌÆ4,à Jòi"·‚|˜c=v(5´ •ᤨ$~4!昣ÞßÚ3ùטéŸþÑâ]fÆòÑ`³°VÛ6î¤cñ®‹áôɤ\jוŸQ§!†ßáý+±¢Š¥q¥i÷r¬·PK"òãÕ°Š©±Té€8¨šÒÙùkx›ê‚¦À¥¨§¶‚åBÏ H ä\àÓ>ÃiÏú,<ÿÓ1IýŸe~ÉW¡ò׊{Z[;okx™½J ÐöÐK2ß7 8£ì¶ü~â.?Ø}–ßn>Ï:ã`¦ +X¤óÒÚ! 2 ¸˜´OÅ^'QÕ­…„»­àaóHݘ×}MxÒT)"+©êdŒYÚÅ´?÷À©€`p*¤ºe„󉿳åÆÈ «&4*¢•±Å hr¨ úIäD”›ÿ½´f AÌ‚$‹o4Ù­mî1çC…zoPqRmQ”qÓŽ”lAÑG>Ôm_îÊšê– Çã#i~+ñ«c…nmç+3ü¸NƯøÇß´ï]Ê!µŠo,ùB‹v®§ám­å§€tøï·‰H,Æ ¯a]QEQEQEQEQEQEQEQESYÔ«TðA¬Kè—Í{—n“±Îðƒ­nKEQEQEQEQEQERÔ´«^ßÈ¿¶Žx³®3Í`†Þ—:Z‘ýÂÇoå[úv•a¤Ûù}¤6Ñv$ *íQEQEQEQEQEQEQEQEW3{à ê¨Ô®4ä79p£½th‰*"…Uv§ÑEQEQEQEQEQEQEQEajÞÐ5¹Lº†› Ò‘÷Èù¿:©kð÷ÂörÇ,ZL;Ñ·)o›ŸÆºeUE  :N¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)’:Ç;œ*‚Äû åôOˆ~ñ³6•atÏq ¥uu•®ëÖ>ÓZÿQwKu8,ŠXþ•áèž.’hô©Þ¼ ÿ:騢Š(¢Š(¢Šäõo‰Ñnäµ¾Õ#KˆøhÀÉ®–Îî+ë8n mÑJÐúƒOšd‚–FÚˆ2ÄöÏø{lj¯.-t˱,°žF:×IEQEQEQEQEQEQEQEQEQQO”´SC¡m¡†}3@elí`qèiÕGWÓbÖ4‹­:feŽâ3ê®{À¾²ð-­ÌV—2Î× ¹‹ôüuôQ^uñ{NÓn| ©ÞIoÝÆƒdØùןZµðy>é{±ón>µÝÑ^{¢ü-Ó´oËâ4¾™ævgXIè[­zQ^9ñóK³ÿ„jÖù .Ò©'-Çs^—áTÙáM)yâÙ?•iÜB—òÀÿrE*ßB+ˆðOÃ+ë7º½Ô³½ÀÚªÿÀ¹Î+¹icV ΠúJ@ ‘ÖHHQ’p=é7) õÍ( Œƒ‘KE4²¯Þ`>¦—­-#0Q– zEuaò°o¡§R3*Œ±zš@ÊÃ*ÀQH%›h‘ ô Mž%¹·–p$R„ŽÙ®/Àÿ-|}{uÜ“µ×fþš“Äž)–ËÆz‰g4{®žá{ì»=ë·vá\Ò‚È ZA"€ÊO±§QEW¸½µµÀžâ8óÓ{b¥óËó7®Ìgvxª‘ët²:%ì,È2À?ARÚêw¥…µÌSûÛUš(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+‡ø¡ãð‡…¤ž ýª|Ç ­q¾ °ðÞ§áDÔ¼G{Î¥v¥‹Ï/*OLzUŸ…ž$’óSÕ-k¶i4¯ÉïP|aðݘñ>ˆñ«—¼œ 9ÇÿZ½SÃÞÒü/§ÌÚrH¾ly}òÏõäì[ľ,ñ¤í"Ø›†yB6Òç=2;Uý*êçÂ?ßÃöwS>˜êE#ƒŽÕ'ÄoI{ãë_ ½×‘§© qó`7±öªþ6ŸCðÕž›ªxZx–íeQ0¶lî_âJOŠöº‡mȼæ,r{óTãðdÀ/­´Ò¶²ÐŸµ;·c?•k|%ñ„Þ*ðó-ß76­±Ï¯½zxçí3¯…ìa«\ƒô4ºÆ‡vß _Ä7ÔZ”6âX¼™JÆ€-tÞ ¸ü1³mI¤Y&MŒÈå *qœŽyÅqÿ $º‡Åž&´–ææxí$hâ3H_h½~‚«ZjþÕõMSûgW¹±Öb–"Ó”€~\•Ùü'Žò'QK럴H×Lë&àw¯÷‡Ö½ ²¼A¢Åâ ]>iæ…$Á/ moμÁzV«©|AÕü=±x4Ø WÈw””öÏ­jIw«øSâT¾ÓµIä´½DÓÈ\Þ¸ÏãZ^,Kχž%Ñ.¬õ{ÉÒöUŠxfràŽ„Jèþ)xÞãBÓ,,4çÙ©º¢88òÁÇ?­Pñg†_Ã:ö¨]ÿhÛ*Êò4¬Þaï}j [ÇÃTð‹¨ÜÏ5¥µÍÊÅ{$' «ƒž~¼T+òñíY<>¿ð”h35õãý¶è©]üB2>ï§Zõo xa¼;m&íRîøÏ†&å·úWKExÅ®¡sñâ6¥¥Ïu4:V•X¢®æœ~5‡¨]kcÅz—€¬¯nd‚52[Øvùr›®3W5¿ø—¾Ѽ=usböO-åfù£L÷5sÆz}§ƒ<5³£ê’hDèÌ}ÆOPFjj!ø[mâ« BêÒhÕK,2 sÎqõ¨tíTÖ¾n}nò;ĵ2C‰H ·Ÿ›Ôšè¾ø¾âÿá»êº´ÛÞÐ0iVÅbø&wø†—úι©ÍvŠÚ® Jª;àMZð'ˆî.¼S­ø:îá® €0†Vl¾Ïs\¾Ÿm¨Ûü_¼ðÍ®¥x–†=¥ÌŘ/|ÐûŠÛ·xjÎß`R~À%”¿˜ÙÀëÍjè^“Ä^ƒZ¿½º:¼Ñ™ÒT¨Œž@¥Öæñ4Ûû™íïl$)$Ö﵎އñ¬ÿ…^kx’Æ÷S¼#œÂ“<„¸P{Àßm²øÃ¬éW•ÕÔðþèM&áP\kZ ïõkOjWV70ͶÉüöU{0í]/ÃKk¨u uçÔ›PˆÎ‚ûƒ.;W£TvâêÒ[rì‚E*YÏ¥|è4½oNøÀ|3i­^4RåbB•É­¯\êÿ¼m¦ÛiÚÅÌ’e¸¶ŸÖ¯üA°Õ<£XøŽËZ¿’ïÎU¸)(û¹û½zGÍâ?C1šXâÜI¾6ÁÃ|º½Ô´_í×·8¸hÕ¤bHÕÏ[Ûë|_»ðõž³zm {±$¥¶/¶{Öµíæ«à¯ŠU‚j77vZˆ ÑÏ!|vÍküSñMÕ…Ö™áí>V†ãQ•UåS‚©»Ÿñ3Ãè_.ç°’`U' !o0מþÿZê~¢GðßIIY?­vµZöÕol¦µw‘U(Z6ÚÃ>‡±¯ðäwÚgÇ­êww‘E¹Vy‹vߌßÚš­§j:n©tu(Có³¯Tþ7Ó5¿ xR?ÃâçÔ#dfBߺÁê6úW§xKW}wÂÚ~¥*íyáVo­mד|?ñEÙä>عüEs£j«ðéõ÷Õ¯!¼·¶ÁOµ@à`WQàëûü:·žòy"že*ÒBÛ[C\×Â{»Ù|Wâ{[«û›¨íÜ$^s–À jˆ×¼?©kÚ¬:ö§sgªE;$ e*GÝÛÚº…ip–:¹¸½kÝׄ¤å÷o\pEz dxG]sG–ÌÝOmŸ›Ì…°ÜW‡|6ƒ\׿V9ã5Îx¥5¿ üQÒì¬5kÉã½$¬sJYA=xö®³Mµñ‡ã««‹¹îDŠÕÞWܺð*‡†á“â…]j:…µœRùVÑA.À1Z>ñLúw‰u/_O%Ä–Š^ÞY]—ÐÖ&‰«Yx‚âþ{ÿÜXë0Ìê‘4»U@?(ÚzÖö‹ j:¿‚®àÕµ r&yhdÆáÎ?jâ>Yë$Ô5[ ½^ðXZO‰ÈC?Pî }+­ðçˆæðÿÄ‹ï]]Iqi°KÈÛŒg®zÔvú»øÿÆzŽž÷’Zé#jyrmó›=ÏáQÚjïá/‰ømïå¹Óo¢Ì~cnhÛ‘Œ×7â.ïÃß´»=.þíEçÌ7ÊH Oo¥u–ñ^4º…ï/-¿Í1œå¤öô¬ÿ…WÒø¯Äš}Æ£qp–îaŒÈûˆëÍs—~–ããré¿Ú—€´&Cp;ñ^¹{àøÛÂGJ·rIgŽs!WÝîEyÏÂÕ–îã]Óµëë£qjŽÁÈ^øü«á߃åk‡×ïu+ɱrÿeŒÊJì @'×5êtVn½©¦¡^ê/Œ[ÄÏϰ¯-øg§ÃãËG]×su$³”YŽ#_@*_kMÿ ~»à›ù{Dfò1È_LúW ¾‚oŒ·š­Ä°ZnãV8)´f»ßx3XðçŽõK¹"X´™TˆQ_#Ú½FŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠóŒž¸ñ„‹Ù£Éqlwª/9õ¬/†Úç…cð…µž«¼–«¶E¸[­u^Ö¬¯µ‹«Ë .}6$9ºX¶—?á^gá/ØiuKÛ™ [O¹"|}ì‘]Åá"k~Õv¢$ÈÍ!è­Ë=vÿ^ë0ÝãJ¶²–Ýò4˜ê?Jã~ëÚ]–»®½ÝÊD×~ëw~zЧu­Y]|zût7hö…URUù—;GUïˆ:KhŸì¼Pðté˜J¡ g¹®×PñO… ‚" ;½BuTP¢³ï\¿ÅÝf<k¤Ý4CSm¬ð*ô Wyðï^Ó/ü-¦ÙZÝG%Äê$EþŠì¨¯ñµÌzoÆí>öó0ÚlÇšÿwó£Åö×4ðY‰'†Þä<ƒŽ¸•ØEâí)~î{ÈÒo±y^XûÛñŒb«|ðíÖá©®îÕ‘ïxFÂö¯T¯ý nà:v›j&O;Î S<ë[>+ñŽß '·Šú‘­v"£çŸJ—àæ¥mmðºÝ§#XY÷³¶’N®?áN·moãoË-Ükö‰™à ÖrÇÒ¬iÚw„¼~/N±Zj+4ˆ'ÎÝ྆´¾ØÏ¥ø‡ZÓínd¹Ò`lG!éšöZ¯wyoal×S$0§Ws^!ðãTÓ¢ø§â9žò/.g>T™Ú­ÉàzÕ]SQÓgý¡,n¾Õ Z¢aœ7Ãqõ«¿µK)õÿ ´1?—8f!¾èÝÖ¥ø»¦Ézžñ%˜óílÝ<öNB®WŸÓõ®£â.·§Ü|6ž+yã–K¨•!%‰è+’H-¼!à? èúíªKk}+}©$\íÈÎ ©â_‡zƒ ®½áJHîÈcdÎüž‚´¾-É,zÏ‚'”„Ì_5Û€§*y¯ZÒõ­7Rf·²½†âX|ų¶´é’¸Š'‘º"’kÆ|-&|auâ";hì¯U‘­Þp°?xzéü/á¨fñÿŠon-žþo–8b`ÞZã×׊æ¾3ø~C¬h¾#æk[i”]Îò=+ª»>ûdðiòÅån Ø%¦=ëÇAÀù‡ÙcÓÖ]¦;t~`q¥iiZ¥Œ?UZâFžT¡oâÛÒ¹Ÿ…1ë¿ 5](N<éðƒªŒqGÂ}3C·Óo´jãÔm®p—å,½é]®ú §Œ&Fj°Ãn|ûôþýÜ÷®'KÖtÙ~>êWb곈¬¥†Üàw®÷âv7ˆ<w ™Ì  ShÎà9ÇãQxC\²_†¶ÒM4q›kR’!l t®àîwe¤êú¤èTjR3D§®ÞqY u{-Wñ5ž£*ÛJ·Låd8Ï5OÁõ£üjÖ®n%X£ Ä_åÏ¥n\Eá¯øUÓµû4†âÞvŽ ¢6oQÛ=ñQxBø‘¦è÷w¤¥¸2Û‚?až™¯b¦³*)f ($ö¯ Æ›'íöż‡ìÞN »¾]ÁzNøµ©XÍãß ´WQH±Ê¦]¬_™zÖÇÇ RÆE ½ÔR3ÏG•®»ÂÚ®Ÿÿ òÉÚò‘Úlr\pvô®#àMô g¬ÛÉ*$Ÿi2-ÎÚ‡GÔì_ãî«9ºŒDbØpÁn8§xûP¶‹Þ 4N¨~vÝ•o⾌Çĺ‰³cm",˜>`sOøÉâ;Ÿµ…”ÂyfÚì±ÛTc“]ÂmFÆé–°ÝF÷ dŒ7Ì¿Q]í2YÚI"(Ébpxž©eí}u5Ü"ÝàQ›þSÀ«_/m®5—¶ËÅ2(<¯=Mi|bÕmá«CÌEä1á¹ü+¥øguo7€ô˜!ž9$ŠÝŠ­’§ë°¯"øówhÞ´·3¡™nC÷sŒV߈u[¾܃snÓÊ(Þ'o¡øE¨Ú[ü3´2O·RÜŽ{×3ð«VµOx§tѪM7îòß{“Ò¥±²ð·®¯àñºÃ}ˬWò̈ÓÞ´¾h¿Ø>.×,4û·¹ÒP.ÖÎB¿qšõzd¹òŸÝ5áõ(m|wâkYØ#M)e,{î)°ŠÖÂÚkíÜÈL(:œÿžµÇø¿W±o^‘n"xâû¸^½kØ ý·ØZñ'ŒÀD›¾_μcáF§h> x”<±>rÑÝynžµ=Þ¥Ÿí%¹a "Ûfæàôjªj·rHÏ ^0ƒ' v¯'ø§ßxwâ…­î–0š²y-Ž™<é^é¤Ù®Ÿ¤ÚÚ.1akËuÏ‹×ÚOÄ%Ðÿ³qb%XŒŒ>fÏq^º¾5n›†k+ÅWö߆u 7¼ð²¯×W™ü¿·ðî“©èÚ¬©ksm9fINÓÆªx"Ýnþ$kÞ-”ùZT ¬s7½óXzgˆôÛŽ×z¤÷±¥‘R«3/Ýô%­Ô7¶±ÜÛÈ$†EÜŽ½©¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¤#=k"㺠ÕÏÚn4‹9fþûÄ ­í-âƒÉŽÖ,c`^1Q.•§© , °)÷Z}¥ô«xæˆtG\ŠŒiV hö‚Înÿz0€P'‡thŠ˜ôËU+÷JÆ)£ÃZ pë¥Ú«D`jíÍ­ä‹xä‹ØÃŒzU+ hšd¦[-2Ú VDæŸ{áý#Q¹ûMæo<øÌ‘8§Ùhz^›;Mec¼÷š5ÆkBŠÊÕü7¤k»?´¬b¸)÷K®qVítë;+AkmoPЏ†ÞðË_ý´éPùÛ·tã?Jé4ŠGÔêǾ𮃩Ýý®ÿJµºŸß4{ëQŸøu‘Pèö›À«xsG¶²’Ê:Ý-d;ž%_•Ò£ÂÚ.¯“hŒ§ ¬`M»ð¦…{iöYôËv‡9gJ¹¦i5¨¶Óíc·ˆ Uê­}ak©Z=­ì <÷£qk&?xf‘èvJã¡ÔRxÂÒߨ–ŠÝr‘€i—?ü-w¸Ï£Û»ÅyÅkZèš}ž’4¸mÔY…Ú"<€+.ËÀ^°»[¨4ȼÔ9RÜ…ú ×½Òlu a’êÙ%hs°°éžµ™kàŸYÞ¥ÜlK*6ä=BŸaVõß é>#³º¥š\D§ 1I øgIðÕ«[é6io¶9'ñ­zËñ«‰ Þj3ÆÒGeŠ(彫Ŵ„ö^5°ÿ„…5)lõšAmnx$ñšMSÀü56zÕ‡ˆ'šQsfÙŽ<àX|¸ýkÝŒ1ÞØˆîcYDцAȬ8|á‹{¡q‘nNá‘Ò¶/t»B‚òÒ)âC•I ~DxO@?²m|’wlÙÆ~•kNÑ4½ ¿öu…½©¼b@»¾µCZðn…¯Ì³_Ù+Ì£b­Lйcáý+NÓžÂÖÆµqµãÛÃZ¦Þ ðËmÿ‰ŠweaU9ü+q#T‰cUví\ìÞð寡öÙ4Ô2ïÞ@b·©^•ÑECÇ…Ev¬;øvëS:Œú\]’äu5¾ðÜú€¿—J®ƒ‡‘È#¥hÜè:UäREqa‹#ï}ÉÍëOÒôm?E·6úu¬vñ“’u«ôÉ#I¢häPÈà q\ü^ð¼$•Ñ- cœ”É©›Á¾rKèv Os “I?‚ü7s•.hS»T¶þЭlŒze¿Ùƒn•ÈÍ:ßìÏ5¾•k’.Çhã XzTká/G0•4{5‘[puŒ­6ãÁþ»”K6“lÒnß¼§ÍŸ­jÜXÚÝÚ[ˆ#–]¦7\ŒV\^Ð"±–Í4»"oõ‹·ïSôŸ hºÌ·mŒVòH»X í[5Å´7vïo½¹k‹­"Öi›«È›E7‚<3:&‰fÀ ÇÒ­hÞÒ|?æ.Í-üÓ—ÙÞµ«÷ÂZ¥z÷wº]½ÄÏ÷šTݟ΢ønKu·:E°‰Nà8ÍIgáÅ&ŽßM…a‰œÒÁá[\-ÄE´S)Èt\N¼ð®‡oä\iÐ4{‹—œžµsLÒlt{QmalE裭]¦J@…Éè×€ü+Ò¬ußø¢È|Äó· R§s`©+ÛtMÑ-Þe_—=YÏ©5—/Ãß Í)’M’Û»æºKXl­"µ·@Ä¡QGa\öµà-[¼û\ÐÉ ÁgÊøëZš>§h:wØtûq<çÕ³êjŒþðõÅ´pI§&ÈþîÒTþb¯Ûi6Z>“-®Ÿnĸ^çëǾhöÌÞ"Šö3eée`pTûö]/G°Ñm¼‹u‰ ÉÇV>æ©ëžÑüE±µ PÒ'Ý‘×.‹á]@I… Faݘ³0úšüá¹3»F´$õ;9«é£ié¦ 4ZÇöAÿ,ˆâ¨Ûx;öwkuo¤ZÇ:ý×TäS5Ïè#¸KOOŽyP`9àÖf½ã À-§iMnÊ';"ŠQëTuY­¼KñHÓ’%š+Íܯ¸HùGÖ½¼ÖîÆøÆ!.›öm7MŸy¸uÚó²öìפ€: ZÁÔü k_i¾Ó¢–nïŒgëZQiv0Ø}…-b¸Úb ÁŸ/ƒü90ýæfßöÈVµµ´vÑÛ[ƱCíD^Š*j(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¨nm¡¼¶’Þâ1$R)VSÜW ß þÂËÿþ»¨i‘‡Ýä«îŒ}«zgÃÛk}R-KSÔnõK˜›r}¡†Å>»GÚQEQEQEQEQEQEQEQEQEQEU-VÍõ2âÒ+—¶yP¨™:­yÎ…ðŽçÃÚŒ—–>!^f 0(?yÏzõ(äúÓ¨¢Š+ÄZ]î­¦›[Iì·Í".âG¥qžø[wá›ç¹Ó|EqšáæS"OZô¡KEQEr>1ð›ã¶žæY ¹·ÿW$}ªï†<'iᘧ1K-ÍÍÃn–âc—oo¥t4QEQEQEQEQEQEQEQEQQ\\Ck M<©j9wm ~5”¾,ðü’¬I¬Y¼Œvª¬ ’kdÀrzZkȱ¡w`ª9$Õ{MBÒý­.#™Tí%85jŠ(¢Š(ª×ö–ŸñósGÑÜ [KÛ[ägµ&U8%qV(¢Š(¢Š(¢Š(¢Š&ŠF*’#2õ³Š’Š(¤f bÍD—0HûxÙ½‚jjk: Ë0QêN)zÒÑEQEQEQEQEQEQEQL’D‰ Èʪ:–8È. ºRÐM wFÍMEQEQEQEQE5™QK1¤ÔêrÏäÇu ÊFv+‚jÍQEQX×^)Ь¯ÎçT¶ŽàœÙÆk]Y]C)OB)ÔQEQEQEQEQEQEQEU{Û+mBÑínâYaa‘ºùëÅ~ÓôŒzE¶Ÿ à »]b^™É¯¢ÕB(P0À§V7Š4‰µÏ]éöó˜%•WŽ+‘øYà KÁßÿh^¬æà¨„¸ï^EWâ/˦x»IÑ-Dr=ÖL õUë²¢Šà>&x7KÖ´KÝZá_ív–ÌÑ0rÀ¬/Ùù‹x:÷$Ÿô³×é^¹EQEs^3ñ#øgM¶¸Š%–YîcPœgq®†&/ 9ÆYA8©(®VÉ7Ä)ü6±!Ž+a3IžAô®ªŠ(ª÷ÐËqaq 2yr¼l¨ãøN85æ < âoxŠûQÖ/KÃ>àcß»qìÕêôQEW¾³‹P±šÒp|©”«m88¯ð†˜úÇ{­. åkXÑŠ,ž8¯¯9ø¥àïx²-‡Ší´K9ì4K;K©|Ùâˆ,’uÜÞµ¡EQEQET7S kY§<ˆÐ·ä+Á¾%h¿Ú-l FUPÙÈ­tTQEsþ2ñð¿‡'ÔÕI…HÜãq'¥ki÷w§[\ÊXÕÙGbEZ¢¹ˆüM,ßdðìq!†+A<’gÄô®žŠ(¢Š+É|i¨IâO‰:g„WK5mÈS3ÛéV~x?Xð÷‹õ«‹ÈÚ+ >[TWÊÏ}+Ôh¢Š(¢Š(¢ŠÃñF½ÿî’/3´©¡8ÉcŠÙFß¶1¸gú(¢ ¼µŠúÎ[YÁ1J»XƒŠðí;EƒÃ¿-¬,¥—ìÆûˑҽâŠ*9¤A$‡E-ÉÅ`ø?Ä2ø—I’úHDJ&dL¼Æk¢¢±¼W«Ã† ¿~X¯×WŒé^¾ñ—ÃkkË)a]BîᥚyO,»ºf½·@Ó¤Ò4 >YŒÒ[±´‡øˆïZTRÈ9´QEQEQEQEQEQEU cR‡GÒnu Î#… ò_Üë5ýR]bîÎÖ)6à -´cÞ¹¿Coñ‡I¶¾“”$§ø†Mz_Å/Oá]6Þ &Û{vÛ#>³XZ¾“}¡øEõø|K{6¡ Yã(Ok¢Óµ}CÅß"Ô4ÝDÙÞˆË3 ÝÈóY¼K­kvš”ÚÕóÝyÁI\*„zýçÄ^èðj³Xi–y %»mgo¯aüêk/Ýø7â~º¿–öÎâ%hžwÜÃÛ=ê=oÅúŸ‰¾ Gá"á­-ãË\Mˆôk4k·^ø—†­.oî ‘|¹>ÐåðÄ}áX^Ö'øÇ5ŒzåÃ]ªn[–PJçµzwˆuûŸ‡^U¼»7Úƒ¶È¥#cÓúÖ寉4ÿ /‹fñÄ—kÚÜ呌íµ_Ö>(ÅmðÒ rЃ{p¡#CÙýÿÏj££ëñxïWŸVšæiìœÜ@øÙÊŸ»Ž˜©þ xb~÷Ú5ëWŸ|JñÔ¾†ÛMÓÕ[R¾.2Ç„Ïzç5ø|GàßÄRø†æì†Sqo)p»ÇZÚñOŒæoèóÙ^-¬Z‹ªÉsÇîóúU{â]QÒ¡´Ö©§]΢YJüê1í\÷ÄË/Üø×D´:´x{ÖÑlá+ó^¿¥z=´º÷…|'©^ëw‹¨Ü@žd~\{@}ÜW i¯x›Ä>ŸÅvãE$³Ù´XAŒ£¿jì¼7â-[Æ^ŠÿNx­õ&ùK8Ê‚:ñ^Sà­?ÅÚüA%–± _Ã/—<Ò¦wÇ…ôéÒ½7Æ~5½ðÌZfm²ãZ½eXýÐ{±ö¬¿k>'ð6ZÆ¥¨ÿhÙK*¥ÌL¡|½ßݯMÓ¯¢Ôtø/!`ÑÌj³uÈ5+&TÒnRÚóªHë¸~UçŸ ˜­Z¡¬C¨O¦M—/Ôn|ugàÝao4«ºâãh×Ú“Qñ¡à wMµÕ5/ìoÛa’\zÕO‰úÏŠ¼3 z®™©ƒa4 ò¿ÕÓëSëz§ŠãÑô;X‚i/cmñ’Fw{` ÐñŠï¼áÛ;[먮õÛ·òâÚ»A'¾=Q×õx;E‹^ºÕìaÔÏ ´ãîþu[Çú߉ ðÒx§CÕÖ/%ÑÂnäõ9¬vñß‹ÛÁšv½o‰™còÖ-Í7«­ñAüGqªx}Þþ8`ºš3¸_ºÝ‹zó^¡c§ø•¼94:¬ýÀògŠ,*q^m¡x¯Æð²Ã®®ˆ¨Äh‡ï¯â+v+¿^øÎïH´ÕíZÒÐ+Ë7?‹økÔc ±¨c¹€ŸZ}à>!’öçöŽ 7”"GcŸÈì5wQð‰4‹{«ù/¬µ1±›ª7¯ÓšÏø‘­xŸÃºæ™&Ÿ«°²Ô.;ÉÓŒÖÄÍWÄÞÑ¿¶´ÝUR¨­ˆqÉÏÖ“Å·Ö£ðª-NÛQh7Xù·Wæ“+úV_Áí3Ä2èuñÖB阵¯—ËsКö*+Ë~-è:Åæ‘}¨[êï „Vÿ= 9ïYÿ tëÍ/Á–zõε)Óã‰É´#åP «ž»½ø“&£©K}uia¦+h “o»Rø7Ä—wúƳàëû§ûE°a Çñmì~µÁØÜøŽÃâ¥Ç‡­µ{«4ß+–Ø:îǨÕü<$²ø©Ø]½ÜÚb†ýìäOl^ÅEQEQEQEQEQEQEs^=Ó¤Õ|©ÚCŸ1¢È¾;Wœ|ž;'S´¹uŠH¦;•Îéþ‡âŸAª|l°*Éö{r‘层}Zè~9YËM+R„!þb£8Ò[i>¼ðäw޶ï”»ñ/ŠØÐ!Òí¼pÚM™´´d¢1ëÇZà>î¸Ðµ¦å¦šI>+ áÿ‡ìañ¾µ¥ë‚Hgg.‡Íd, <‚¸®ãQÐ<'§kÚÙá7z“>É;9Aë\g‡â>øá|Úš…È-¿#€kÓu]WC‹Äv‰kimuªLØ,~ò¯¯ÿZ¹u$_ŽÒ,›cX!ÎO‡zæþ(ͨø—ÃQêÌÞeµ¥ë'ʘÄcߟzî4ÿ x{Sð}µÍƧpmZÜGºltéÖ¼÷â6“f<¥\èV“ǧ[Ý0ÜîÏñ}?ƽC\ñ•·ÂI®ZT>e–Å\òIV?ÀKÈ$ðdñ«*·ÚY¶wä׬Ñ^ñÆÑ¡ñ¶¨K¹m~ë¸íÈ®×QðVwáï´j­ìö{”k†d•}áÉd×5»é¬‘<Ó™­tþŽÒ/Ø%›öaòüï½·¶k¡¦HÅbvB“^+ð’`~"x©XÍ.Aôåª×ŠY'øñ¢Á#í o¹O¾)¿Ù7xyYðÆç+ǸÿõÛ,}†ßݨãéV) ÀɯѶ\~Ñš¤œ©òäôàU¯‹/|EðiuäJÜÿÀ–´>=Ê£À1|ßzê>«%¹Òßá¦oª©6·KLÀóÀæ¸k᮵á=%õ½Ä 5ŒL`™‰~•í~ÔeÕ¼/§ßN…%–,ï[TW‚ü[µ¼ðÿÄ]Ä:l`=ÀòIÇÞn˜üEãM2óÂ>*ðæ¯anâæ?³¾Î2íÇõ¯Z›E–ßÀw\.LíjÊ\u,G5Ä|d·ðÞ¥fä¬Ñ]¶ðßJÆðüS_þÐúµíœdÙÀvÊëÓ;@þyü«Jìíý¢-€pC[‚@ükÐ|kwŸá=Bæh–H„{eã*zó^G'§“HþØð·ˆ#dóDNù\zq]©ª\êßnn®HYü“uÁÅtß ä…>hÈ%\´YP[“]½æŸ†xú>‘ª ÷“g6ÇW¨xTðA®iZẰŽU/o'<:~u³ñvöI¿á`¥k ÇÛ¦k¢ñ‡‹î4[[¸­áŽæ84ñ+¡¾b@öë\vœžwÂûÝfîô+ÝG#Eg ÚŠ}6ŠÓøEâ·ðÞ‰¤Fk—™‰Ï*õÅ?ÁKk£|DñŒ²ÜÄ[åuç¹ÉÛ\·m®.þ øoU»-½ÖÑç¡À_˜ð=;W{âè“hrͬkZ„¶‘4,“ ¹0+§ð\cõ©µKØãý¡ìYv,;Xç§ kÚ••Ô2AèE:Šñì‹ã¯‰RE˜¶ßÒ™ñ>).þ-øfeÌ뵎:… Ïõ§¥¤Úgí %¹a¹‹1ÈǃòãúTßíäÔ&ðõ…·Ïq$çj(É9®ïÅ~msáõÆ•1aloFQ\ÁÉou‘ 7¨DZ*´Iîäÿ…Añ¶ÎUñG‡5 ÖÑ$òÙ—øNz×cªx3FÔô'—QÕ/&±hÕ3üµ‰ã¸­´ï‚g°GkRŠÌûÀn⺆QÂ~èè#\AÁç“\ŸÅöð“øI1Öè:ô+me¥ñÒbHÚ­–GpyRNý+Ë~1iÒè#Ò¼aeÑH\¿Zï¾Ã,ú+ë7 V}Müòeþùb“Äß4/ k6ú^ Ò‰¦åW!sÓ5Ö[ÏͼsÄÛ£‘C)ö©kÃd’_Ú8I;aY «c€H«¿à}OTðÍ£¸k‚@^HsKñ…$·O ´¤„†áïÅ_øÃ¨[·Ã„H¥Œ³˜È\ö«z´‘Éð-¶°ÿjýÓÐí®oÃ~"¸ÐþéM‘Eä·k§|ÁþµíqÑ!=JŒÓëø™4)à=Q$‘Uš´5Í|;…5o‚ÿÙ±H¾l‘J»Aärj?²}‹ÃÚ–rÁ'·¼`ÊÜ£àËF¿øÓ¯ê°ókP¿bÜ…fØOlŸ´]ÙSÊT1oâÅ{ºí?2ãžã½:Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠB#"¹߇¼ÕPò$†YdÈU\ûE÷Ã? ê3G-Ö–®ñ E!ŠñøVÍ·‡4Ë]$iinÐg !ÝŒýk~øFÆâK᧬jfRçËûzS­|YáÍsIÔlt[´³DÊêŠFÚä~Yɉ¨NÁ¶=ÃlpyÿëWqâh¾#nnb’+Äû—0¹W_Æáï镦¶W–á¿å´Í¹ÿ:—ľ Ò¼T°B3º¹ÖëQø{Àú7†¦iìáf¸aƒ,ŒY±õ5¿ðûBñú_ÝÀËr½dŠ’=+TxwLþÄþÈ6Êl¶í1úŠä¢øA¡ÅtX]^}“9žiòǶ3Ò» M¹ÑΓ%¬f̦Ï/b¹›_…º²Ë=Äñ24iÒXÔÿwš<9ð³D𾦗Út·AçcHJŸÂ»š++]ðö™â;#i©Û,ÑóŒõ_¡®Fßá.› Ž7Õu)¬ã`VÖIrƒÛé]­àí'Yû]DLVêâv³-¾i°^¤²^^OkoK91+}*÷м¦x®;_µ<ÖòÚœÃ4 µÓñ¨ìü£Úè7:C,“ÃsŸ9åmÌþçÞ³ôï…:ŸnöþeÜöä°Í.QsþÍMំZ7…µ#{i-̇R9[*€ú ©uðŸG¸Ö§Ôb»¼·ûKnž_jIÏzÛñ‚tèÑi·ìŽÄ,½côÅsv ÜIjÚõî¡d-Y°œtÏ­z%½¼V°$ HÐa@íRÖf»¤kNk5¾¹³ÜsæÛ¶Ö®OEøQ¤hZ¢j6—×ßhݺVi3æÿ½Võ_†Ú^­â?íÙo/ã¾åxåÆÑè8éUõß…ºgˆçIµGP•â9„ØþƒðÔhZ?öœ,ÅÜ÷JCÌr~•©U¯­Eõ”Ö­$‘ WixÎ}+‡µøE¡Yê_Ú0^jKzNZ´|Íõ©õ/…š>­~—×·wÓ\Fví1ù>•sÄ?t¯YÁk©\^¼P¨DØþ´½Ò_B‹Gž[™íc”H¢WÝÓ úU[Ÿ†–Wj`—UÔM‰`M§š6qÐ}+²¶¶†ÎÚ;x$Q¨UQØTÔV.»á»/I`÷k“ep'ޤv«–‡c«=£ÝFKZJ%‹iÆt­*ã5‡öòê’jMôúT³¯àþøõ­=Â:w‡¬®!´ó ·2Ü1ùÝñgÖ¹æøM¥6®uoí=OíÇþ[ùß7ÒºSÃÖÚLJEº–GÑUÜŸ™±XR|3Ò¼ÁöKËë;}¡^Þ p’zèdðî™.€Ú#Û°´~YÚ¹o ü,Ó¼1ªÇ}ýäÆ DQ<Ÿ"¥wÔW;â/iþ'¾°¸Ô ²Ù–)èÄúÖ}¿Ã­6+Ä–[ËÛ‹xØ2ZË)1)8ö­?xGJñ]„VšŒmˆNè3ê* 3Àú^§\Ù¹–è\®É^wÜÌ=3Ttφ>ÒâG<±2•X唲¦zàTžøo¢xWR’úÀL]”ª«¾BsÅK7ÃÏ\ksê²Z“<ãçk~©¬xoJ×t¡§_Z«[®6à¦:m=«•_…–rÜF5[P¾³…ÃGm<¹N;ÜW{I Kja@íRQ\–«àh.õ&Ô4ëë2âA‰¾Ìp%úûÕÝ+ÂZv“eq !Ì×?ën ýã\×5sðo÷S5ÃÍ}ö³ÿ/qß]Æ•§G¤é–ö1;È®ÐÒ±úÕÚ+ ×;ÿ ³ÃͦIa(¹™4²–`@+GEð>™¢øzçDGšk9󔕳´zAY7ÂmFÔ£¼îf6ø¡‘ò‘Ÿa]õÍx‡Àú?Š.ã¸ÔÒY &Í‚B¥Iáïè¾f:U»Å¸`‚å…PÕþèú® ×ÑËuc<ŸëZÒRžgÖ¶t_iššl¬ òãlïbrÎORMs<)5ÏÚVÞxæÉ>bÊwgë]¦Ÿdš}„6‘32B»T¹É?ZµEQEQEQEQEQEQEQEW¼µ[Û)­œ²¡RG½y&™ðWÐçÔ­ôÝJÝ,ïø’RΠܽ?Ãú¯‡tx4ëEÄq¾§¹­J(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š£«6 št­¥¤OxîÖ_º~µäºW_%Ý ÞÕ½Eqÿlu»ÿ\E ÈËwœü­´‘ìk•ø!u­Ë¦ê6ºÄ²9·—blýy¯Z¢Š(¢ŠðOKâ- â®™gˆ/Òúea>®zb½åAäÍ:Š(®#ÅÞ½¼û^«iâFÎUˆ‘rb1é^að¹üA㫽Rïj¥¦Ñû¢ì“þïNžt½6+Cs-Ï–1æJrƯQHA*@8>µáúî§ââÖ‘¤jIìî䱆>\ò+Üh¢¸ÿˆvZœþ–óMÕf±{4iHŒÞqÞ¹†óë^/ømp.µy£¼–bäTÿÖ¬?j:õ§ÅëÏê:ÅÅì6¨F]¸=8¯s¢Š(¢Š(¢Š(¢Š(¢Š(¢²íuÛ;½vïHˆ¹¹µUi8ãšòŒQkÞ»·Ôì5ûåŽò}¦&Õé^Ñ¥—:U¡•‹9‰KÜâ­ÑEQEÈøÿIÔu K7U¸±šÑP!ÿ–˜ b|ÖµkÂM©\Éq*\2‰$98¯I¢Š(¢Š(¢™$‚(žFè “^Gð÷Ç×ÿÄ]rÊâàý™¹µŒœ´ãùׯÖGˆ¼Aká½3í×jì›Õ§RIÅjDâX’@0CbŸYºî³máý"}Nïq‚–ÛÖªkV³ëþÍ…üÖ/" RDãÁ®àÖ³¬jSëvúµü·m6ÄiqÍzÍQEQEâÿô´ÒŸ\¶Ôo#™¥Æ%!?^ƒðöY&ð&“$¬ZFKrOÓÑEQEQEQEQEQEQHH“ÐWÏÞ¹Ô?ámxt–wp$º£wZô6ñf¥áßXèšìÐÜ‹ìùSÅÌØŒÖGÄïø§ÁÒÁg5“éÒHFË–¬ÝkâG‰¬IÔ’Þ/²^:…„),à÷®£Ä~7¹M^Ïú2¡Ôîc$ÒÇ$ZÍxƒÁþ*ÓôßÜÇ{k¨|‘MíÚÞ†©|@ñ§Šü'ª@b{F²»p±1FùG½[×|Eã}-4vµm>à^€à‚[©ü8­x‹ÅžðÔz¥ºY¹Hó8‘:7·øTÚ~¿â={áŶ¯a·öŒñ–e~ u®á5׌ne»º¶[Y ¸¼-u,‡ç÷Çjë¾#øËÅ^ o¶ÚÛÚͦ³m”–_­SºñÏŒ-ü+m¯Go§ÜC.>D'-ŸÿX®‘%ñv¿á‹|Ãocqqþ¸îÉDÿgÞµ`´´ð_„æ0®VÚ3#žîÝÉ®EüWãt¯¤VVކE·‡Uú÷®ãäºÏ‡lõ Ô,“ fQÚ¶+‹ñ'‹u OC è–Q\ß<~k™ŸjªÿWÐüo©Þø­<;¨éBÚíbie`w dcZÿÇ÷·þ*¹ðï‡ã·7vË—k‚FO êxîë]Õï´=ZÔ[j–gçU?+Q\ÄÈ—þ×…Ÿ®[ í]N­ãýsNñèðø`ÝÌë¹^+õãŠênuäÒ¼4Ú¾±´1Æ^Xó§Ðz×ü[{£·ˆí4‹UÑö—Xäù¬ƒø‡®×Âþ#µñF‰¥k¸ù“û§Ò¶«?\;t+âF@óùW‹~Ψ¢ãÄ.§9uNM{ÍÈø£Å·ZV­g£év"óQ¹ö3íUQÞ¢Òüq,þ'ƒÃºŽ—-®¡$m&s”Ú;ƒÞ¸?ˆ÷Iiñ“לG {¾½k¯Ô~#\hw¬h²ÛY^IåÃ8pÝzdv®‡Äþ*²ð¿‡X»Vx€]ˆ]› Íq—ßµ­ÒÓUÕt{q¤\²…ž ÷•ÏLñ]¦·u¡à«Û¨~h¦´f_qŠä>ñàéþ½º}kšð«ïý¡5ßlŒþ ^åEy¿Ä¯ø—Á›oì¬-&ÒðžF;·ÿ…Aoñ_Ô¼0ší†‰ZÇù™äÆOñm•ØøoÄöž!ðäz¼dG]Χø+•Óüeâ?Ü^ÜxnÖÉtËI b[’I˜Ž¸ÇjÞðŸŒañEµÚGŠúÑš)á'î¸ãò÷®OCøâ-WÆW¾“L´ŠæÝXþñÊîÇ¥?Cø‘¯jþ-¼ðëé6ÝZ«o8Hôâ­øcÅž/ÖüS5Æ•kŸk!Žy‘³Ïû>µéÉøÛ^×|?eöÝ/LŠòÚ$/9wÚʧ­rþø¯xÃLit½*š6o5¤b¨ƒ°Ïv®¯Â^1ƒÄÖ×*ñ}žöÎCÌçké\ì>>Ö,ŸÄšÖ¡ý/æšp“·šf8ÀÕ»ñáó¥h‰&W7j[½kkSñ¾¹¤øu5¨ô”:TaF]ñ&Ì}ìWa§øŽÎÿÃkÙòí$‡Î;ˆàb¹M3Å~%ñEœÚ¶‰og–¬Â/<1’P;ûVƇâÙ:„Û»` b}+‡ð¯Å?ø’îïOƒG·{è›hùФ~¥ji_o%Ô¯4;í1?¶á“dpDÿ+ûçÐTðüEÔ´Ï[h~$Ó#µ{³û™b}Àç ¯I¢²|Lí…õ7^¶å^Eðnï[“ÂóÛé1»&wy'†=”z/„|`|D—¶“F‘j¶NRX3Æ{~ËêßõýĶÚ.¡¢Ú‰.HK真¥iøÆž&Ñ5 Hô.ôí‹dǨä×m¥M{>› º„ ¦¼NBš»EQEs^9¿{? Ï ™ï¶‹ýç8¯ÕtÁðç⎕zŠb¶‘P1í“Á¯¤¡•f…%B º†WŠ|SÕ|Iu¬éº[ZEmh÷A -'úò§<úW¦xR÷_»·“ûrÂ+\cÉòßvå÷®Ž¼Wã©â7„é¢Ö84©%K»æ—¾•è¹×gÑu}>EH±Çݸb¼×á¥íöªø†; !swqzÛ›j*ƒÉc^á¾³¯ÝèZ…³Ô­†ãmÊËê /ˆ|e%·ˆ-|9¢ÇÆ­>Y·ýÈPu-Tÿá2Ô¼?â+=#ıÀE÷ú™íÆC]𠌃‘PÝÝÃci-ÍÄŠ5,Ì{ óÝ3Å~"ñ¬·w>û5®›læ5’d,Ò‘ý+GÃ~0»ñ©YÄ!‹[²c!å7ÿJætˆ+¿ñUÿ‡n-í^ò•x­ô­½Ç—ü'RxW[†!pS|RðúUßxÅôJÃCÓLgT¾|.ñ‹ýêâ~2JÓÂ1Zêr‹±4ÊQÕvìoC^“à$1øDB0Eªgò®ŽŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠdŸêßýÓ^ð¨Aÿ C^“~dùðOóÚ—ãD3\ø×ÃÚ;-Ë1Ú@Év¯üd—ÀÚ2\á§YÕ[=ø¯FÐ4Û9ü7¦y¶Ñ¿—•ܽ+ÉâÒnâøÝ|'º’ÒYÔµ´ Wñ®—ž ‡ËµÕ5ÍzéÍ´ªc î$qÒ¯üPðôzçÃçxT´ÖѬ±1ð3øW5ð«R¹ñ{YIwyL>Z¼3÷ý1ù×Sñ øm¨në• gê/?í‹8 öVÉô5CàR<~»?åé±ùšë¼w §ˆ¼#}bW/å–Luȯ!øqw6±igák…;¬îwɸº§ù×Ð*¡*Œ0bxÂx ðž¢óÄe‡É`êÞõã?ð¯¼Qa¡®£áÏÓäx·‘²6õÇ¡¯Pøc«Ë«øBž†XXÄÁ:du®Î¼‹ÇÞŸYñ¤røVšäP ñ±ÆôíŠÍðÅ÷Šô?ÙAâË(åyQ ‚í:úH£L¹´Ö>,ߟXGÄ#l÷’psü+øT¼‚Çãˆ/'s7Ù /,«Ðãoo'Ä ÞÚÂîò(h”ñ“éSxÅ×¶¯ô¢%ÌÏû©{c°íZ¿Öñü ·-öap¦m‡¨è?˜«ÚVâ=KÁ6Ö¶:–Ÿ„öÁ?³’ʤ{wô§|*ðððºjZWöšÞ4Re•AýÙ=«Òk7_8ðö rú;õúWþΫξþ²(Ïç^íEyWÄ=ëWñe™Ðõ³×a‡rnà:zW?¤êÞ)Ñ|k¤ÿÂi§+3¹·¶½OSØÕßÅÇÆ¯ E2©M™½k_ãwžÓ|å>܃=Ö¦ø¡y¢CðöÚ-^¦Y?"8ÛkÇÊøæÆþÛáœ7†HEŽØeˆ²ÞµÛéz¥”ÿdÓ`bÓÛip2¼sYßÓg€ñ~ƹÏí›ãþ¿´žDz׹Q^kñĨøw>äÝûÔÇ=9ëW´ëD·ø6 ÊÿgÿÒ¸ïCpß5HìØ³ì”Œ£œŠé> A¿€"Ês#3{æ¹_†­4ŸüJÑdÛo“q3»Æ¤øž$ð‡Ä=ÅV±“ËåJ‹Ææì?éYÞ3–ø›AñlVÁ â0¸z³7<ŸÄ~Uëž°{/Å$ßëîIšO«ÿZé+Ål‹á-X¸E¬™ýÚá~Á~‘Ð.ç¹}Ä}k›ð Æ‹Þ+pI±O;Óv{þµ©àTƒSÕµíKöKclÌVIä;‹×jöïT~ê¶Úm牮®™ÛÌ¿åW$’ØùôÜë÷ú׃u?ôy'ešÑÿ…ÿ‹ƒÅ^ðƱ7ö/‰ôÿY}–åcg¹(¼2~aúÖ/ü#~>Ñ´¥mQQÒdL¤-ó‡·5èß u¥Ö|#û(¶’ÕÌB:+ WiPܶÛI›8Â1Ïá^9ðZõ!ÓüK3îD¤ÿ€òiÿ.aÔ¼=áû‰£+*ç‘‘ÅtÿÌVß nÆ?wöt^=År’4ÿðÍÐù XýC•þîy­?†Ú~«{ðûOþÍÕ¢·€©?+%ñsßšÕð/†-¼)}­@š¡¼šQçKÌÎk˜ø¡õ¿ÎG-rqÆ02it[ sûAê’H·'׊‹â°Sñ7Âcø¼åÿÐ…{m‘âùu^3þ‹'ð\À\Â/MÆá³Ï5‘ðôO'ÆÏÍlƒ¿mÙþµ¯ñÇD{ŸA­[!7|™‡e«Õ›ÆZ¾°ß466‹$õ”ýãú î5¿é…%Õ¯¢µYyëWl/íu;8îìæY e]z³EQ^oâ$>-øg¡ÃvñA§DnexÌð?­s?|m¼*5Xo.n%³‘X™Ÿ8Zï¾ëÃIJ¹È2F¾\ŸQ\oÆ)ü%žœÉýEz 'Åqh1 ­šÎòç§ ý+¢¯$øásäÙè‰Æ×¼\ŸJíä×ÒÞúÃInk‹O3vz`ñ®á•6»âyÕT¥2®A¸Ô6SMÿ y*ÿ©$ñÎÞ+ÖßQï"[²¼‘*FMÙq]GŽ|ú„vz®·âE°l¡HqÉ?­z]ž>Åoƒ‘å¯'¿ÌüJ·’ëÀ¬q9Vò‰ã¿µp¬5¯8´ÕͲ¬Ì ƒ ×Sá_ ØxsÆ÷ò¦¥=ÕýÜfY‘—åõ¬º\|cñ4¤ñ¯–?ÏáPk2$_´&–Äàù<Ïÿ­TÝÆ¾¶¶ ¥äœÈµÝø•¼£éöTëô®†Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šk®øÙzn¯5³øOý˜òÞiº´–ú”ŽÌfÛ¹p‡oqZÚG€Þ-euwQmRþ5۔ةôÏü:‹ÆÓÁ%Æ«uCÊC6nõ­Ï èWÓ¤ú„·€ccIÕG¥gø·ÀÖþ&ž 认³ÔmøŠâ>£ëU4ï\‹Ø®u½rãSòHh£u ½Hî}민µK»mX ’&ÜV‚ü#ƒ´—±…Ä›äg-SšÏñ¯€¤ñ¡ò§Õî-í¸?¥Ká? é×sjSÞZI–‘Ê~àªZ7áê mu›•Ó|Ã(µéó}{jìSÓî.$´K¸^dxÃò>µÀü;ÐRÛÅ>!Õ‘É>ȉ^ÝëÓ+'Äz*øƒC¸ÓSÌ6³Nõ̧ÃûËU³Òuéí-6lxÊÈöÏJé¼?¡ZøwJŽÂ×qU噺±îkZ¸=oÀ:—Œˆmµ/³L‘Bçó«VÖ.uX/¼C¨Ãt-säE {G=Éõ¬6ø_y§øšïVеsj/›7 ÑŽ‡Ò¡ÿ…G4ZûßÚë\7(#»“- Î[ Û$ ¹â¿‡†»âm;U³ÕÖÙlP,1´{¶úÖgŠ>ë"Õ­uÖáKˆ9$;¾¹®Ê? Ýjž›Eññ\ù£axÁéëõ®N×Â?Ñ£þÉÒuËEÒ£ùc’Hó SÛð®ÛÂދÖ.¦y.nçm÷šF­úã¿à‹½cÆQkÑ_ý­mü»uQü]óíIÿ¾½¬j¶ ½´h,$óbŽÝ]±€Nk3^øy¬êþ9¶ñÕ!eÿS ÷9æ¬xßÀ¿E´3êð[Û[ºÈb,Kÿ뫞1ø|ž+ðŦš÷~]Í 9¶ñ¸{V>«ðçZñ„ÖÞ­¯ ¨µòÓj‚?‰½M[Ѽ«YxvúÎ}^?·ÝªÄÓ¤\*€1Þ¬øWÀš„ô*ÏYXîŠO/[¹>µ‘að»YÒüKq¯ZøŠ?¶\ÿ®/oÃtô>Õéñ+¬(®Ûœ( Þ¦¤®/ÇÞ ½ñ­”zzê‹ieÒ'•¹˜öæªÿ®¯†F„¾ FÃ+ ³ÅZð7¥ð~™6›6£öÛGû±²co¯Ö©Gàí{Ãíyoá‹ûhl.¤2ysFI„ž»}«gÁ¾ ³ð”©¯.̸¸aË·øTž/ðœ>,µ²†YD_f¹Y÷mÝ;Qâ¯Ùx§O´´¹;E´É"‘íÚºãX¢XÔaT`SëÅ êÙÿŸY:ý+ɾ éÚßü"Ou¤^À¾dβÅp„…>¢½Ã~´Ðìµ–O>ëPf{‰¶ã%½+Høe¨hbâÓO×Þ:âBïL·Ð7j¯£ü)¹Ñµù¥ƒVÿ‰T³-Ã[ìù‹¯@O¥]Ó¼ ®èsÞ_iz¼isu3HðÊ»£Á?¡«?ð‚ÞÞézÇöŽ ©jqyO2'Ê‹èE„ßîæ®x³á}÷Šo`óu± ±Þ‹îb­ë^ÖuÏ®uâ<ÂFýœe½;Ö‡„|?‡ü=.‰¨_­ý–6D¾^Ý«Üʱð³áé§‹ÃÚÚÛió9o³Éï/?Ý®£CðÔZ5•Âý¡î/nrgº|Îßà=+™ðçÃ[¯ ß\ÜØk®>Ó#I"´@Œš¯kð¿P´ñ,Þ Äý¡7Êïå ôÇáUüIð³X×õˆuWñ.mŽmó ^‰¢Ú^Yi6ö÷÷_jºEÄ“cÒ´*ž©d5-.êȹAÍ2…`-¹üóXþø_«øN6‡Iñ<‰ ¸fF‹­køëÀsx­4Ë‹{áþžr’2ä7®jÿ…|'.‹sq¨ê7¦÷R¸P¯.6…QÑ@ô®ª¹ø&/iQÀg0\Báâ~ÀûÕ jPÛK=Ö¶eÔÚ/&)Ä,Kì*¯…þ_xV{©lµòÍtÅåßñsÈæ›Ã}Z7ˆÇˆw\>Ç“Œ¯q[ž'ð=¾»¨[ê¶×RXê–ÿêçŒuö>ÕTx&ÿS¼†Ojÿn·…ƒ­º&Ô,:gÖ»UPŠFŒMžî!xePѸÃ)ï^wÃMCFÔngðÞ¸l ¸;špÚ·4Ï}ŠÆðM¨Ï.¥x»d½þ!þèíYZgÂË]'W“T´Ö¯Öê_õÌØ>gÖ¡ºøQν¶Úýûj–Ba}8Ñø“ÁÖ^&Ómíî¤užÛ ÂýåaÞ¹ýSá]¾¹¦}SUºž|ŒN@ʨì+{Â^o Ú›eÔînâ nˆ=«¦¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦H»âuYH¯o‡>4Ñ|iw¤…–+²GÚ̘òÔžxï^×á½hZ,EÌ’(ÌŽNK7z×¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šãü{¨êqiréºnq%ä¾dlÇÛœ×-ð¤kžµ§áû¨wÌ_Ï\ú׬ÑEQEQEQEQEQYÚõœú†gm&Éæ’6Î0Äq^;á/øÆßLŸÃ×¶ïogqpâåäÏÈ;(÷¯mµ·ŽÒÖ+x†ØâPª=ªj(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®âWŒ.<-¥[­†Ó}w(Š Üõ®ßÅž)ð÷lô»»«‹è®L¡£ÀRyãÚ½Ò<ØRLcr†Ç¥cø¦ÓU»ÑÝ4{ÿ±ÜŽwíÎEy—Â_x‹Tñ~¯c¬êp–¹A‘Á`q^Ó^SñOQñ­ž«§§†–clÃ÷žZn³ßÒ½B’ú]"ÔSmÁQžzñZtQ\Ÿˆôßߤú6¾–6ê£07>ç5æZ‹üq«|BŸÃj§Ù•åXºíë]·Š.¼_á=6MZ øµ;XF颖 Œ«Ü‚=+{Á^.´ñ–…£l¥îºÍÞºZ(¨æš8!ye`± Ë1ì*£]›ýK&Xåy#&9Ú[~æ ñ¿Šõˆ·~ÖÒÜ}š2Íå/¸ïô5ëÔQEQEQ\ÿ‰-üI9¶þÀ¹´A>wž¤“éŒW˜^|@ñåŽ`ð£ 0Ï+YŒMŒc9ë]Æ£?Ž4:KÃ.Ÿyå!wc(H…^ðG,¼g¤}ªÜ„ž3¶h»£WSEQEQEQEQEQEQEQEäš÷Ž|_áïiú]彑³¼›j:Œ¹ÿëŠõº(¢°¼Us®Yé q¡Em$ñ‚Î'Î6Ú±~ø§Sñf‡syª$+,sùcÊ+·¢Š+ˆøŸ¯ëžðÚ]hV­5ÃKµÈ]Ûé[>Ôu W¶7š¤&+É2!\s[ÔQEQEZþY`Óî%7Ê‘–EÇS^}ðÇÅ~&ñ 楻dbŠû·)·¿OzíïõÛ 7P³±¹›mÅÙ"%9­`ŠYŽ&«éú…®©h·Vr‰ab@qê Z¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦I"EI#E$ö¯>ƒâ.£­jwþÐÿ´--ä1½ÓM±I—Ö¶tÛk2ÝY¼m©ZƒæZ¿\Ú¼kâ>¿}ªx·FžëHºµû4 Ç ¸ýëü5ì~Õ?á&‰®o|?-„áSí(7ëj9x…þ]øSòŽþÕà^Ô›Høâ9â„Íss3-½¸ãwÌÀסiß•üJº¯§=ëŒÆ3¸?Ò™ã/ˆ·ž¼'ÑšKid ÛñŸÂ·5ähš‹Û¼’ÝàC ]jÈÿ…m.mmuMæÖâêUŽ H+ϸÍw´Q_>ø|¦›ñûW¸º‘`ˆ–ùœàí®ûǾ:Ò#ð½õžŸ:_^ÝDÐÇrK vª¿ <7qàßÍu«°·yØÌèçXíŸÀVË|B…ákËm.ò}9IÝr m>ãÔWC¿§Ï¢6­êÖ«˜Xjåbøh°5íæ›ym§‘˜çdÈN”ßxÌiÞ7–ÖrËöØpŸ/vôªÿ v9éŠÓÓ~'iw2ÞÛÞÛÜXÝY®é!™~lT–Ÿ´éµ˜4»»Û ®`7(“Ò¶|Gâ[[ÂÏ·¶Ø ˆe¤jÆÓ¾$X\êvºeíÝýË”HfNr+¶¢°¼Kâ‹/ ÛC%Ðy$ü¸¢O¼í\í¿ÄÈâÕí¬u"çLGl2ÌAV?…nx¯Åiám8_6ŸuyÒÌðBS“\üô‰´Õ…¥ËÅÒ…ò†p7Û¼ñΓi¡ÙêAšS{mnƒ2JÇ ªÚxö$Õ!Óõ­>}*kø÷óÈ"OÄdWb##‘KXZ÷Š-4‚"žæê|ùVð.çlu5OOñÖŸªÛéfÞæÞúlþæTÁP;šwˆ|ke ÞG§¥µÅö£ Ü–¶Ë¹±ê}.‡ã+=^êK)mç²Ô#]Íkp0øõµÏêô;YUÆ~·,ûv}ïqëWuO‰Ún“¨Acq§j&yñåªÃÿJÝÖ|Qa¡ØÛÏu¿Í¸Ú"·Q—f#¦+6ËÇ0¶§ †§aq¦Ïqþ£Î?ãëT¼Mñ:ÇÂÚ¢YÞé—†7p‰pòÛèjañ3DþÖ´°1ÜvÛ!œ§îÙ»Œþ4ýKâµ¾¯>—§XÜj7P Ê!ÆÚ¯øcÆ:wŠ<øí„Ý[³[Ê0ÈkÏþ+Æá`xAƒðe?/ü kØèª÷·¶úu”·wRˆà‰K;¸ûˆð]D÷ÐéÏ¥.OÛvü¤øëŠß¼Ômïü+u{i"É –ÌÊçݮ à:…ðñÜ7lzûWSwã@úÄÚV`úŸÌå*GìO¯µ^ðõ÷¸·Uh/m›lÐ?U4ÝsŶZ-Ü6"9nïæû–Ð ·Ôú ¤|¦Ço9¸†xnâÙ°ýã}zͼø§¥GáØõ´Óî®l™Š³(»`q†®£F×í5oŬ¢˜-]<Ì?ðŠæ“â Æ¢..4]kÝ>C\î vƒÖ·ôÿé·Þ:Ø“mº)2gª‘ÔV ŸþÉf÷×Ú%嵉RÐÎø!ý3Ž™®ÃK¾ž•k| ž1 SÛ5<îb‚I ²©`£«qÒ¼Ïþ—¯Ç£\ø~öÉF ïÍ\“â½¼~ D“E½ŽõÛZ¹ÄAsâ!¢Ç¡ß}¤|Í‘À_ïf³®¾,Á§x hº–™=»1;$=õ£iñ*ÎïRŸN]6í.âÍXŸ‘}EOáOiÞ(—RŠÎÆx$±\ÊŽIçŽ;ךëž4Ôoþ'éRI¡Ýyvhí°\Èùþ/§Ùø«Ç·ö~kôÑ.â¸2:ÿ©í–¨¾x‚Yü9§éÇJ¼HöûK.œó^k{WñÌvÚÑÑt›&Ôu »ÀXþ§Ö§ð÷Œ¡ÖogÓnmšÏS€eíݳùånþ/¶—â”ѵMí¾Õ•›ªöaëZ7?ÓLÔí­õmêÊÚí¶Á<„|ßQÚ»øäYcYåXd}qZÿŽdµ××Ãú%Ô5B›ÝwíXǹ§è¾3žmi4=rÄXjn›ãPû•Ç|ÂñWÅk¿ ë±i×: ²Ìûb—ßäOÕ~)Ýhmkq©è2Ûé×-µ'gä}Ez%•Ü7öPÝÀÛ¢™¡ö5bŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šà~0j€.͹`dù¯P+/àB¨ð >XV2·=Ï&¸èMÕÇ÷KYZEw÷¯£ñ}Êü@ðÁ8nçñí¶ÄXH鱕KEx'Ã!?ÅÏÏ0æ)_`ôùOʯøåJ|lÐphÇ8æ´~:¬غc`>Ö éšµãm>MOÁú%¥…Ò[ê D–Äž ßθ}KÄÞ*Òn,"ñž“æZÃ*qð²ž+è+•¼²†åFŠ ±E|õ Ì—õ[ÅŽHZV yâ½ÞM¶pðØÛ£Œf¼ûãý퇂Ú"žQÅN0µÑørÚ?øVVQªá[O }þZòo†RɨøÄÚUÍãÅgŽ_Bj¼úŸ4-#쾑ý¥¤íÙæD»°½…u^3Õ¡¿ø) ݘd‡j¦ÓÔtâ» _Û[xSC'—-Ìk| ±Åy¿†Ô_|vÕ£ž0â%Ü£Ó Í[ø#[ücðÌ‘.þF#‚Tãô­/ÿ„>Øk•ÉÇjÑñcGÁ‰”ö1úÕ†Î$øSfÛAÎßJå>Ú[É6·rЮÿ´°Žƒ5—à 8.>8kÙŒ…ŒÉ*¨éÃÖ­øÎà[üuÑŒ àrI¨¾"^ÝÜ|fÐ-xáÃÅí»ŸŸ›ô­/ˆúO‹<]¥Z¤:4vok “Ìi€é^›á“t|5`o@" $ÁÈÝZôWÎÞ8Ž+Ϻ|Æ$ˆ”VCÈ={W·CáÀáãÒ-Ç,VÅ[Û+áÞ¡%‚”‘” )ÆÐx?¥VøO ·ÂÛ<Æ:>îù<טxSÕtë_ZÚd¬!Ýp:9'ü+¨ø3&¹„ä–ÒÆ „²³%›i'?JÙð7…5ÝÆšÅö¤mRÚýšA K¸ÃÎ|2ÓâŸâÇŠ.^5+¬‘ç¶Xÿ…Ö”.h+"ÈL2/ÍÆBœVŸÆxZ‡†®aÚ²-Ú¨#¯ZÚø…¤êZ„:%Ær‘j¶Ù’(]±æ ¼×Þ*Ö-|M¥ÉãHZÿu{cãŸQ_AFë,i"ýÖ¥>¼¯ã®vºLw÷W1^y߸Žßï?ø}kât·M§øi.m ~ÔžJ—ËmÍzWˆe´¿ð.§‘\EhD€uVÛ\OŸ éºÏà lîãy-îä`ù88 ÿÖ®R¥|bÒô›+$ž6[C#íQÇ\×Mñ#Ã~)ñe‹Çiik-œžj¸¸ÎAŠô½ L4{ArÁ¦ò—yVÜ3Z½^_ñ×W_é:Ÿ‡ž95TmÖÌ~fCÜW=¥xÖ{ÿéƒÄz#iÚ„{£ŠUY3Û&¡ð¦¡©ÝüY×u$ÓÚòeVÇ}¦0ÏÒ¶µ­+Å7ŸtŸE§Åg +åL Àï\óIñ»FX­tïÛ®Û‹ ”;ÎÒƶ<)p¾0ñ$Zé½¥…ªÃòÑ€, Çç\oˆ/õ¯–¶ÿgûBÚŒÁ ¶ùsšè¼{ ø§ÅÉ¥½¶Ÿ¬–“ù»¼ÞjÆho xzÚíÒ;‡ºDyEà×j¾Ò/E»¸‹÷ºt`Űá}kƒÐâ³³ø¡ª\è†çR¹cûðNØ£$÷=龸X¾0øžêáÒÕpÿ7“V~'H“üIðzÈ.HÇ¡#šöJ+Ëþ9j2Úx6+eVÝN©+ƒŒ/Zµ£¦¶þ¶Ó-4{qm%¦Ä“Ïê õÆ*? èÚ§‡>êÚv«$M$+!cîÚ¤g±>O, õ‰-‰’YY=Î;Uƒrj‹£ßÜXÃÍÌ×,n Ä…N/zèt/ k¶nõÛÙ,á†ø|ÐÇ/Ìq€8ü+:ž×ãÕÌ·ŽDs[ÿ£–.´Ÿ,"±³´hž/¾ò`œõª'ƒoto x—NÕµHÖñ‹ÇåÉ‘ïQÚ¹{ýWÇ:>Œú^¹¤¦£¤ù{±.H^Ç5ìÕ­uŸØ\ZdF‰åẼWK^)ñ³OþËÔtŸ[¡ßo2¬¤w¬Üy‡Jñí˜o%nU>ª?ɯUð-Ü:ô×Þ!L‘9FÄuUÿë×ñ Ê+ï~¶e]¬¡˜zã&½U|-£Ã®É® l^´{Lÿ yßÂ2§Æ¾2* Àþf‘Z9h§Ë%§Søt?µT¾ø¯,JQ­Ï”ÛûÕïÊ–ß ô¦#-l ÝN+Ì>M¬Üx¿ÄwvðÁ-á™·ùï´˜ð+­ƒÂšäìüK¨ÜÙ@û£nrÿãY­í®~2øf#¹RsÐã&®|u‡þ%š!]ªñFO¦ zž–iV¢3•ò—§Ò­œ…8ë^ðÊyn~.ø®ù¸BãŸMÜS¾*Ï-¿Å? =±"}Ê^¤n£ñRÔOãO—~u=ÎáSü{Ùí ݪaƒ]ׂ‘cð^ªÙqšÞ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¨júE®·§Kcyx¤ פxkÄþ‚{M;kû)²#¾ÆB Ñð§‚.4íZïĬ‘Ë«]dü£åØW7âχ¾.ñ?ˆm5G»°ìrn…=Žyü«Ò<<šÌZhMm k•à~î+b³u¸õ)´ÇJ’(Qzó|9ñG‡¸›á£xz9Q®Fé28RçŸË5‡,|\ ±Ký.8WK‹l(eÿZá¬ýÂÞ.Ó|{wâg°³ÅИ„¤í_^•м-ãoÆš~½ ²Çdãl^v ¨?Jë|{á‹Ïx'ì@,wଊ3ÀoJåï|7ãmsÁo¢ß[Û@‘BQ%ɔޙ­Oé¾+Ñ< .‘san—‚°eò¥ào xÃÂF𵦟*\³HH”‚ÓªžðŸ‹ô?^øì,™oŽÙQ&?"îÏ7Š|!â]Câ]§ˆ¬¬íä¶³ùQ^M¥ëWÇ^ ¿Ö¯t¯銉¬YÆ2ß+ëŸÎ ¿¼ñ¿Š,GþÂþÍY>Iîä˜/}£®kÐt›Òô›[%–Õ<“Š»X#¼ñ§Ùÿ°ôèo7gÌó$Ù·Ò¼“TðWu?ÃâilìÖx˜2¯éÛ5êž¿ñ=Õ㦷¥Ci Æ ²JsV¾³¥Ã­h×zmÀ+˜Ìl½yžoâïé/á­3F7è ò.üÐiõô5ÐxÀ£Bðåíµù^j Ïs îOo ¬ #AñwÃû‹‹=Á5]2i  2„hÉúö®ÇAÓõ¶º¸Õu“»‘6CM•ˆzg¹÷®3ÂÞ ñw‡¼a©ë8±hõ :yŸpž(›Áþ8“ÇéâptÜF6¬iéÓÓ­7ÆžñŠõ:ãɳŠ;‰ûÓó5ÑxÃþ!Õ®|?=¬Ñ[ÍcºI\|Ãv0èzfªëº‰¼[ž›¨Ekkf$W¹Nçm§8ð¯B†1 1Ä:"……I^mñÀ:ˆõ7ZÒçíV8OÊyÍeø·À¾*ñE…¥õѵœŠÐÛÆß&Þù?•jI x¨x:úÉmí[PÔ‹†2áS#})ß ´_x^Ò Pµ·6Hšt~sÛŠ±ãÝêz¥—ˆtF‰5k•Wád† ž?ø¦Þ-6ÿNL³væ_7s2÷Ú1Þ½Þµ¶Žþäj}*ZóŸè~"¼ñõž­¤v–ÛK7II?v¤½ÒõŸêZjjBXEc8ç.ÈGeÇ©ª:ç†õïøÒ_øvÝná¸@·»¶’}Ei[¯‰<Ðl!Ñ“ÄvàGÙ”mÛØ‘[ áýZÛšœ1®5M@³K¹¶ $caÅg|1ðž¹á-.ãJÕÝí¥fÒ8þ!ê+¢ðW†Ç…|7œÒo—,ò0à''Ü×G\ߎ|:þ)ð¥Þ—Á4€Ëô³/üïè¼1¹Ò%Q!ä~UÑxG‹AÐmtè@‚0¼w"¼·_ðwõOÚø–;{mlQù§,¾üW¨Ý¾®þ-m Úlƒ÷nß&{ó^{à?ø³Âþ Ô/nÉâÔ$0W?/=¿:›Ä¾ ×âñòx§Ã­nóȆ9v /¿¬| uuà]CH¼º}|Í,²ƒÆóéíU¼áßÙ[éºf¬°%Žœ>FC“1¾•WPðf»áÿO¯xSÈtºé²|¹> Öæ“¥xƒRÕbÕ9×õÝÉ&Ñt¡{Á.Äà-b|2ø{ãiï`½²ŽÝíñƒàפ×ñ/Çwž µ²’ÊÄ]<îCg8Q]W‡µGÖ´MBHL/kyb¸¸•¦ge·Œ¾ÅÉå±Ò½rËĺ~¡¢ÉªÚ»Ko’ÁO±X?¼1x,âšà]“$ÀÛ©o~*øbÂûìS\L³îÛ´Âßá]µÄwvÑÏ&9r’1ÅMXš÷‹4F£v©#}Ø”nvúMÐ|]¤x‰Øn?x:Å ÚÃð5Bïâ?†,µ!§Üj]Ë?–¡5Z—ÆþƒTN’ýVy1³#åo¡¨¯<á»ñgq¨*IœÇÈ¿SZš†¯§Zèïq {"¼º ÀŠÃðŽµá æ½>XTÆ7Ü£ÛùÔð|AðÕÍÛZÅ©!s”<ŠžÃÆº§©ÿgZê×]£#jؾ¿µÓmêòd†gs€+˜µø‘ ]ݤ1É0ŽFÚ“¼L¨ÇÙˆÅlk(Ñôá}Jö8a˜ËªrxïÃQZCtú¬)³°îëZ°êöé‡RŽåÑP¹€+Ƶ¿ˆz¥ñKJ˜]ìëbÓr>cè+Ø´]rÃÄ {§MæÀDZŠÒ¬x›Kð½¬w:¬æd}ŠÁsÍc§Äß ÉbnãÔÕâ ´…lý+H×4ívÓí:uÊÍ|uQU5¯èú$w÷X™þäQ©woRsV4M×#f°¹m8e<2ŸqLÖ¼K¤ø}c:ÚÄÒ± å˜û ‹Fñn¯ÌðØ]n™9hÝv°ü y¯Äÿi7:Æ“¤Ep\Av²\º#Py¯N°ñ“w¢F ØÍ’ ¦bp¼{Öz|BðËÇ4‹¨¨X¾öå+Ÿ¦z×K¬±¬‹Ê°Sꫨl­¤¹¸G cs»t¹Û/ˆ¿ºC}Ôádd"6ú7J“Æ$±Ð´)ÚkØàžh›ì忉±^[ðÞ_êž}^¹FžöñØCœ1Éà×´i:Už‰¦Ã§ØÄ"·„aTUêá~#øãJðÎ{k-à”Ð2à ¾HàãÓÞ¬|8×,µ iöÉ~·7‘[¯œ»²ÊqÞ¸Ë6´²ø÷ªÍ;¤Aa Xœ@¯LÓüU¢jwÏgg¨C%ÊõŒ75wQÕ,´›o´^Ü$1ô˦¨é¾*Ñuk¦¶³¾ç>Yù[ò5“ñź†ü=t'EÔ±Š ~cž3T~ø‹LŸÃšn”—ë5ð‡s&ì·¾k¾¦I"EHìd±èxÿŠðÏ5îÔVŒÜ'ƒubN?Ñœ~•Àü °†?ÜÜÔ¼²?>ÜÖo ù“Æ~!Ò”ÿ¡¬¬ÊÍSñí™ð‡Å=/_·„-µÛì›jñ]–…ieâŸ^êòZDðZ Š#9=N?1^Œª¨¡TaI+ùq;ÿuI¯œ´6¥ñgRÔïìg¾H¢7lÃcð®‡W—V»ø“¤k:6{mDw;âÚ÷¥øÕ§[ÏâO ƈ±¼òìwQƒŒŠ·ñ‡L²ÓübðF±Ë®É;ä9«Ú®‹kÁ;†dß+ÚyÏ#Œ±m¹Î ÔøS1Ô>Y5Î$ùd_›ž ~•É|cñ§‰â ‹–@ÀÇÍÚ¢Ô4k9~>Áo ‰¢Ì±ŽüzUÏŠöñéž5ðmå˜Xf{Ÿ(”ÊåF>œÔõK­º’ 1\¸y‚Ÿ¿ŒqúÕ¿OsªøûMðΠ—(ˆa(RèE^ÖídÔþ Ï.·bcÔ ³mÞ`ù‘€ëT~ø[N—ᑼ¼…n%¸ŽOšA»jŒü£Ú›ð6w¹Ñõ:oÞÚEtʈü€¼qô¬¦ÚÚ[i µ0äìqJ÷;]>¤ C¢ À«—®éÖzŽ•:^À’¢FÌ7Œíâ¼_à6msqªÝÌŠþLÅP2ð*õ†¯6‡ñÏVÓ-›ýé7ù(>U`½qùÑðÂèø‹â/ˆ5;òf–'òáÑÒ›âZOüs´Å–;¸•eEN féZôÚ¿ÆFòúÚk¨lG (»¶sןçZºÕÆ¥/Å +WÒtKè­xŠáš€ç¹úQñO³ü1m¼h²1iW‡é×Ö»OˆÚ\‰àYàÒ!$I(1¿k´W–jž3Óu2=3^ÑfÓ.C©Iöð#¯µ}¦Íú]¬°8xš%*øÅ[¯øï¬ÝCm¦h¶ò¼pÞIûünÖxËHµ_…÷0„Tû=¨t `ä Ö/ƒnâñ_Âcu©Ç÷ÑI˜ã8ÛÐýqüéŸ4Ë ¯ý¢{Xfš©9]Aeç<õz+Éþ9ÛXÛøD^}’3y$èžpA¸¯p[Òºÿ[éw‡ô¦‚-æ¹qµ@g8¯:·¶þÐý 5;i9B»\(ÀýjÅ›ñkÂóZnÓ²l ÿ®¶þ&[²k¢º”0¥¼¿4œïì¯s\§Œ/‡ü,Ÿ _YÁ-¡ìveÛ¼e{~5×|h‚Ò?]Þ›xÍØhÕ%+–7Lþ5µðÿD±³ð¾™v–%Ô–êZUL7"ºúŽX’xž)T4ne=¯»Ðtµý -4äÓí…Ÿ“–‡`ÛÐö¯Jñ…––¾Ö¬í ·U´·vF€ÛéØÕ….þÙ­ÆÙƒ 7‚3žkŒø=£ÛMâÿJѤ±CpD`»ó”ëM:ø÷yh§ý+Ãü%†0H«?ã];â…¥³A¼X§®y£âÖ£qqãŸ莒IdeYž4ÿ–œôÇz¿ñ6ÇQñ…áµÓ4 ´¸ŠUxä€1Þ»¿¶ ÞÓÿµ#xï0²+õÈ­ú+Ï~/øj=oÁsÅ›«Qç#Î_Ò¼ÞëR|(´Ó­"Sye M+åBqú×AàûÛOè~ÒæŽ9ÞC%Á+’c ?3[ÿ·øzË A4`.8ê*õ„1|"e‘D†Kî[©%k•ð&¯s£ü¼½Råà2y\ýÞj_†ÓÛø/tZ=åÜ÷òM8ïrNzõ«Ÿ ,|Aa­kvÚž›,mÔ­4;ñ…Ïjç>i_üXñ2y@ZÁ3áãvãÍ4óàei÷R¸ÔîËÈXüÄ¢ºmFioþ6iáÛ¥’KA` ÚogÃvºŸü*[«MzÕÒæ$R$äàðªŸâWðѼ`Ä× ÁïXŸ´‹[Š^"”¦;IUÇË’O?çÖ–í¾ÅûFYÅl<´š0$€x?á^ßEPÖ4Øum*æÎd ²ÆS‘žµá_ 5$ðžµâO_Ä ®é?;±ÛòÅz,vøSá­Ýýµ¬QÞ5³ÌÌ©‚Y†kà4Bo^]Ì7Í=ÛvŸ­fx'Q’ÇãV¿¤Eƒi34;Ç?­MákdµÖP¥V1îSñ´KñóÃþZܶюy¯r¢¸o‹6p\ü=ÔÞHк&Uˆæ¹¿…¾³? Þi-Ѥ¹ŽBŇ8¬Ÿ€vóêÜÊLŒ’£ xUö«¾O²|dñ5²®®ð ü)ímk£|_šöQ®¥ ’Æ$,ÍÇsÐ Ïðü¢ßãÖ J›uko2XúmõÏjôoˆ:$>%ðMì(¢W"+ÎOµxdžüiyaðò} 25eœZÛ©:ƒÇî¾ðå—‡4[kkkxÒo,y²*à»w'ñ­ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+šñ¶¡¨Øh2 7J—P’Pc)å}ëʾYx›Âú…ûÝøvè­ãç9ñ«>(Ò<_¬øþÃÄþa´Ûû¶uËb¶þ"Úx«Å:Òí4';¶»K½Té‚kNѼEiðê 1ô$½}¢WÎkὊ|!cskwáÉÜÈìêË"ãéÖªxkCñ^…ãíO]Ë$ŽH ë 5KÅÚOŠu_ˆV ‹Ã÷~E¨æ6eÉÁ>ÿJöÍ&ê{Ý6î­ÚÞf\´mÔUêæüymuyàÍF 8šYäj¢õ9¯;ð›kþðãéEÕËL»¢’ =›Ó­t_ <qáøîõM@búùÌŒ¿Üµ?㊺·ç”ÞÛ1kOá¦ýà«(Ûq–T;¤šì)¬¡”« ‚0kÄnô=Gá×Ä)õÛM2ãPÓog[dÜÈsž•Øi>5Ö^Ϲ»~u…ðöß_Ð|c«]Þhi£1‘”džy÷§´~ ‹Iâ1áëÃhÊáFO¿Ò™ñ*-kÄ>&Ñ®í<;|`ÓåJøå°Àà~UÒxãÃ7>7𖟨[[Io©Y°’eàñÔ5%§õ¦ÓÓLÃZöª¯–YÓl`úîô©0úÖ.…&®>+j"¸Ðu±Ü€ˆD'<`dút£ÇSêZ·tmR×CÔZ×OlLL'ž{Tž7³ÕŽô_I§ÝÞéb0L(…ŒMÏ£ãÅñ£âmÄ©£Ü­…»¨X‚|üw+Øé•7„5ícWmJ³·¹´¶³ˆ é%ˆ¨8*çÞ½RŠñ ¼3ñŽÛÄwv“Í`Ñ`Áâ/ jú´×ºÞÛéLŠÞIÁÅE§'ˆm¾*]x¡ü7|¶·+³fáÓ“Í;ÇQkú¿tNÛB½6¶®[hËsÎ9ô®£âO…u]´­Jˆµýƒ¬†ya×8ñ–¿«Àºu‡‡/­ïv<×)²8ý[w¥?ÇV~%±ø} žƒ,³_ÆTK*Ÿ˜Ž¤Ó~êú®­áYµÝ¤š ÌAÛ«c­zAwn—vs[¸ÊJŒŒ=ˆÅyÂÏ"wípæÎñ qŒ§j³ð«ÂÏ¡]k²MB×L‘\|žÕÅ›OxƒJ:6•¢M<{ÕÍÆàŽÔ©yâ{6–|9:\yfÆåãåûÝj·ÃýUÂWÞÖ4¹`‰ÕÊÉ# Ý¿Z¯á{ýkáŤÚ%þ…yyl’m5¢oÜ 'Òº{-K^ò¯¼C}¥Üå…¶Óã9|zŸð¯>ð\Þ"ð÷Œ5MRóÃ7¢-Rã<õ`±ëù×£|Gð‹xÃÃB+p«{ À[×Ò¹Ë/ˆZÍ…„z=φ/¤Õ#ATŒìcŽ»½+bFÖ´¿½¥Í…Ýþ¥y¬Â?›Ë,Ë“éÒ°>?ˆ<3á¹ôËßÝ c-2ÑÿÙõWÀqøƒFñ^³ª^èQéH íäõüë;W:øø§oâßøGo”(rÄã?÷+†º²†v‰â2 bŽ0W=X¢¼WÇ3ü]Ñ.­ˆU½9TõÙÉ&½~îÂÍ:KP4OÌíŠò-çUøW-ö“6“wkq1–ÚKdÜ9íŠØøkámB=oTñ^µlmîïܘ¢n¨¾õCQÐuÿ üN¸ñ&—§>£gz›eT8e5â;Æ1üBÓ¼S.‘-ÊD7ýž#Ÿ-Oðçך÷=6êKÝ: ™mÞÞIsDýSØÕºóÿŠWWóè3è–EÕä—±æÆ¹Tú×9àíCÄ:€†?‡/xUc6ìôªŸ `ñ„ ¿µ¼ðýà œÊ¬¸üºÓ¼)câk‰—ÚÕ΃s­ù e%©¨ì´¯xCâ^§ª}FÞôÂN{ôª—šŠ-¼sw¨6•$í©Z´Jèp#Ýýãí^Û¥Ú]ÖÒN© £~Uâz?‚àÿ…çqóùñ[µ7Ÿº+Þ¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¸ï‰zÖ« ø:âóG\Ý ghîkÏ4?êÞ;Ó´ÍŸ:âGó/¥*v¤`ýÓêM{}¼)oBŠP`RÑHFG<ŠEEA…P£ØS¨¢Š(¢Š(¢Š(¢²‚½ÔÀ¦¼i Ñ[Þ¥TTU{ RëHª«÷T §QEQL¢œª(> S袊B<ŠEE_º }:ŠBŒÐ@a‚úÑŒv¤TUûªÐS¨¦2+ãr†ÇLŠwJZ(¢Š+ñ·ˆõVƒHÑ‚ÛÚÜô«ÂyEþêZÜÐ4;_hði¶kˆâžì{“Z”QEQEQMÚ»·mõÅ:Š(¢Šñ‰>=×ü9ã»Ki 026ÞÉü+kÂ3xÃÇWž$òäm¬B Büoâa^H@=F~´´QEQEQ_>j¼E¡|F»]CÍþÏ…Š­°_áþø×qð«N¿õojpy3ê“oŽ6(ƒ ¯K¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽhc¸‰¢•ÆÃOCU¬t?L,l¬áƒw_-qš»EQEQEQEQEVn© ézØŒjv0ÝÎPJ¹ Tmüá»KÔ¼¶Ò-¡ž3•dLbº (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*Ž¡£éÚ¨Qe À^žbgbÚÖ 8 hR(—î¢ SQEQEQEU ­L¾¸Yî¬-æ™z;Æ uUQB¨ÂŽê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®kÅž1¶ð´sÜÙÝ\#d±3´zšÁž9Óümi5Í„3Æ‘6ÓæŽõÔ×Å ãÅÇÃqù¿kcÞF°í]ÅU=KP·Òtë‹û·Ùdsì+Â9Ñüi 良› 8‘$\2×MEQESY‚#1è£5Á]|að¶ ¶?hžIÚA#ÙÇZïQƒ¢¸èÃ"EQEQEQEÇj?ü7¥ø•4›²/Â/ʤúšÓñ?‹t¿ éðÞêR0†ihPg'­jiÚ…¶©a í¤‚He]Ê­QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÖ`ªYŽêj•¾³¦ÝÎÐÛß[Ë*õE*âH’.èÝ]}TäV}߈t{|«JÚ)?¸Ò þUvÞæ¸DÖò¬‘·FSk7WñF¡2®£ Ý›š·¦ê¶:µ°¸±¹Žxñ!Í]¬¿"?‡uÁãÝù#§å¿î`Óô@ÜÌ‘§ÚÜǽzÞöÚî4Ç$Cêr+’·ðÿ‚dñXÕ`û3j²1Æ$êßîú×Qy«XiÅEåÜP豚ž+˜'â)‘Î3…`H©«7[OºÒç²Ôe ¸ColdÁð/ƒ¼?á[{ŸìI|ã36Bû«¡‹ZÓ'ºû,Wð<ùÇ–® ô¤moKYü–¿·çnÍã9©/õ;-.ØÜ_\Ç_ÞvÀ¨,üC¤ê­ô2™)ë^}ñ+ƶö÷úN‘a|«s%Ò™Yî¯|×£i—öš…š=¥ÌSª¨VhÛp¯TrÍ™%‘QVcTìµ­3RfK;è'eêó^/ñƒF±µñ¿…e·¶HÞâéwì\nùÖ½º«`‘Çöˆ·ínñœý*Ë0U,Çw5™ÿ 房´í|Âv…óFsZOI¾IQÕ›¡R²™£»…•>ñ0*a.húEþn—²Î÷¶–ð·.çÚº¯éSèÞ Ól®A$ye=‰í]-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\oÄÿ¶ß=Œ’,‹´°;™sÈåz~©àW@{8":f­³išL©cß5ØÝëw~øCç¥ÌSÝ`¤s!Ü9èk#À_ð‹Íá /5b“êw»šy%MÇwoéGÃ?Üéö¾!²•&6Ö[倸?w'§ùïYŸuÝ?VÕum_ÄJnY Ư"z ³ámn]?âÍÌ|ðôXЍ`½qùþuîÕ⢅5Lôû3ÿ*ñÏ‚ž‡ZÓnæÔG›o­åÂOËžäŠÔøo$¶|Iáõw6Ìë è™ëJ«•i¦~ÐöÖö±ˆ¡6þhU&°’âÂKdû4»w,dgpkü4D›_Ôµ 'X7PÎË‚CóE׎~µêÕâ¯ éž Òä²Êaš2IN?úÕçÃÿeëÝÛEæÏ É‹J¶°ý¤!ŠÕ<¨™ ̫жÞ3ÍOñGC±ÓV7þ•ã? ÿdü[Ò­4I%ƒíQyûϺKqšìü?àgHø˜ú”lWHmmÒdÇßšõ*ÊÓ´ ;L½»¼¶·Ûqtû呎I?áíL—ÃzmƾºÔð™nÑ6!s•Qì+_¥-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\oÄëÛ­?Á“ÜÚgÍYSîžO=+‘I| ©hK.·aoa¨˜²ÁãÚìqÕOzƒOð\ÚÏÂëû(üÁ“<¶¡ú•íSøƺ&‹ E£kÑ%•í¦c)$_{ó]Ž“|Õ…´ÃLã” ·Ì 5Ùx‹_½>,ѯ4û®l¦³i'ùNœs^+W´ðÿˆ¼S¦6¥É¢&Ye•")´Îî(ø“+éü;¨]FEŒÌ§Øøíµ¿ë:äQÈ–—R"Ê@lujï«Ã¼¦MῊºo‹ XLU&p>áʺ­_Çk/gaái„÷òÈ¥äEܱGß&¼ÿâv½§ßøû@ò®<ß°J¢é€ÿVÀŒÖçÆéz‡€â²³»\K$d @ïúSÖcþîzå¾$_éW~²´Ð-Á¶¶–9'’4;G«}MtšüøûáŒöúTO)±UØã¤ŒÎ*ï‚>!hšg‚íí/çû=íœB7·aóî` ¿â{­[VøY«ÜÍlþdèLù‚vÍaøÅV²ø/EЬæwÔ7ž4ࢃógÛüj ÚxÇÚ¤:ÔQÇk~ÆXgeÊgºä÷®½uí'PÖ­lü;iÄ¥÷Os ±/×¹5ç6ñ-„ÿ´‹„¸U¶²Qóº§-œ×¼X꺕¢ÝÙγ@ÿuÐäó/üRÔuˆÓøz}8Gn²-ã—ýåÍ> h-cÁFƒ QŒTÕä"G#¦å[ÀD1ƒì¢ƒo`ÆË‡hâƒo 6ãe½JŠ…të0eÿFœ¸# š’ÞÒÞÑ6ÛÁK苊uľE´³c>ZÇÐW”i?¥ñM¯ˆ`šÌZÁk“ä`ncøUmǾÖüÑmzH-ƒkcèk[IÖlµË?µXKæÃ¸®ìw¡EÍÄV–ò\Lácw3¹7â7…õmMtë=Id¹c€›MutTwvö’]]LÁîyà(¨4ÍZÃYµûNŸuÄ'øã9zŠ£ªjö-°¹ÔnRÞÛw¹ã5œ¢«|(±—L𑳸ÏÌ®[¹ÍwJêã*Á‡±§R 2HÔÔl!¹‰ãm²# 0Îk¤Òíìhkh­­c†¡¶ À9¯x¬HVޏ=)Չ⿧‰ü=s¥<¦!0ûãµføÁ1øFk%»{—wÜÎFà+­¢©ê]Ž­oö{ûhî!ÎvH2+ç/‹^³ð¯´½FÚÊ4Ó'eß)`yý+Ùo|3á½CÁþgö|Áöbèñ¨xê+Æþ Øi>)¿±Õ,áºÜ3oç(nõé¼¥ki¶Ûˆ¯nn’1$gF9oÐWQá¯h^>f™h#œ¦Ç”±%‡ã]‘຃îiôÖuO¼Á~¦U5:ÓV±’Êö-¼£„õ¯ðÖe¢|t¸µ°B–ÑGò«7OaOøÅàV¼Ömõèu.&’8#µÆK7mµìšDZèÖpJwI*¬}N*õQESw Ûr7uÅ:Š(¢Š+Åú»h~Ô5ÝRX¢&2½Ú£ðV¥y«øCNÔ/™Zâxƒ±^‡5ÐQEæŸþÝxÛT´¼·Ô–ØD›s‘žÕÞF‰£hj&RÖ ooöEbxÄw¾(ðójw‘Æ›çuˆ'÷À®ª¼®o„óOñ+þY5"müß4Eßá¯T¢ŠáüCâË»/ˆbQÅÖæ¹SÙGÿª»ŠÎvß17zn椮+âV¦j^Ô¯níR[›kV1;u_¥c| þò1ÏÍ3Ö½:šYW`3ëN¢Š)7 ã#>”´QEQ\bx²îOŠÃh±5´33¼ŠéuAt­"êù¶‘Løc€qTü+«O®xrÓQ¹EŽI×vÕè+jŠ‚îÖÛY-®cC"íu=Å|ÿâ/ éúÆÝßL„Å í” ¥3Ëuæ¾çsœó]uy¯ÆÝ]_À­4™,dûF1œ€Bkœð¯Š¤Ö~Úi¡Úä•lrÏùÅsZÝ·ü ?´é“÷vóËž5ëÖ²6½ã£qÏÙtèFÑ»‚íΕlø³Äx_ÃWš¼ù+pRÇ üëÎ|% ÜxóòøVÔoRúwc“3"Ä œhx Ç’Ë¥k6Ú´ÆYô†}Ò7Ywý*ŸƒÖóâ}­öµªß]ÛÀ.;H-¥(¨£¡ã­[ð/.F­¬è¥ËO&šX¤ÏÕ”zÔ~ ¼¿ø.«ªÜjW0[ÃpÐÛC í ;ëY>†døÛ{ÜŒòÃÍýØZôßøEmdñ#kwSIq8âßîB?ÙþµÌ|DñözÖ“£ A´Ë[½Í-Ø8#…fEq­é¾/ðöŸo­6£¥\HÌf'œã…8íõ¯Y¯4ø»âSÃÖZt:q–4º›dÓD¹eƒÜ×1­êÚ×n´B ^òòÒùÔ\CtÛˆÉý:פxßÅÑxKÂ’jÌ¡äe gï1WžjwºÕ§Ãè¼Y¨ëº€»—-¼$×=÷­kŸŠXü)´×Ôn•0êÝ3ô¬muo<;à‹OÞjºœÚŇ_.b#Vnq·¦J××>$j6Ñîcˆ cTÚˆ¾¦â;Z𗆊"×onoaDyᘃƒŒàvÅ?ÄÚÝö»ðÒ?i”ö’EöŽ20ÄúÔ^‹^ñÂË-BMvê ´Iæ&2Üð Ið{UÖ|CáRMCRšYÖvŠ9Xä§\ö™ªøÈüHÔ<.5—“ 3¨>Z÷lzýkv×^Öü%ñÏÃzŽ ú…¦ ™‰äP[ð[㞟©aɨ VE±ÊGö5^ õ&·þxSWÒl¬.¯5énmþÎ6Zl ©‘^‡^/a¯øåþ,I ¸},LP˜A®*öŠ+Ä>*ÜøŸÃ­¥Ý޽r`¼›jÁ´a=«ªø•§êwþk‹}N[h¢µ :'Y2SXŸ ü/« JÔ`לXŒ·Ù6`ƽrd2BèŽcb0zŠñÈõ_hßlü?6±-Õ”ÃÌÃ(Ïò­ê¿lñ÷ö%æ·.•f–ë"ym°ÈÙþõ;ÂÇZâ,–·Z£_i‘Y·—<>HëêzפÜFÒÛI9™H ;ZùÞ? ê“üd—M‹Äs›Èàg7e2WÛè>7ñ ÷ÃßÁl/ZóS¼”¹s“üXö¬›Ϧx&OÛê·§Y޵4) œdŒWiðçÅ?ð–øN ×?w7û®øëð‚ëyÿŸGÇ׿ 4ý[ÁŸh—Rº³‚-âíßhÏ÷­t¾ñÜ·Úf¯¦þeÆ’ì®äຎ•‰áxn>%O{¬jzÅÝ¥²ÊRÖÞÞ,(Ï­k|5ñMÕLju ^Ý5ËØ9ò¥c’Ëší|Q¥ÝjÚCÃi¨Ía*üþl]O+Å|ªx«Y\ÓbÕnÙÜÏ÷¤ÀÎzn5³޼Iáÿ†-w«C Ô¤¸6ðù˵±ýãW.ü?waà¶ñ ׯ?µV=‡•Î3µÒiž;ó¾/‰]“$'rçq\¶‡g­ø“ÂRxºã\»Kà^Xañ…þ½ë2ÃÄ^5ñ|šf­¤¼¾TwBÞxW,Ì}óKã«ïx[ÆÚJ[ëÇvÛ–ÝÛ€ÄãoÓšÞÓ_ÅZWÄxã¾¼¸º°–×ϸr6ÄÑ}C Þ_üN½Ôo[W¹°Óíæ1[Ãnû3â'½^ð—ˆ5-KP×ü#>¦~Ùhv[ÝíËmõ®Â>Öï~"kÑ[ø‚X/mp†åãXN•Ñüg³ñ¯„×V&Â5H¥W +z±®ƒáÞ—â-?L³ºÔud›M€Çn¨oIö¬.ÿQø“¯êŒº¤ÖMŒ¾TKm.Þ¤Õßx¦çOñŽ©áFéîþÊ¢KyÜÅqК¥ j—ÿ|[¬¨Ô®¬´í5ü¸Rݶï<òOáÒ¹½V¸~8è¶×²ùÒÃ…Jäã>õô|ùñ[AÕWÅúWÚu™&Žöè x@Àƒžµì^Ò/ô]>Q©É~ì¹b·Ž•ãþ‹SÔ¼eâk –´Šk§yæO¼£yùWë]/†5­_Eø«sáKËùo­/27—–¢ñΧ¨j¬<=2ÞǤ0ùÞÙŠ‚Þ¥‡aU´ Ëÿ |WÃpjÝéwI¹D¯¿g^‡ðþT%ËhÏ©6¥paiÔ{×UàÜèYÞÉ­\ÝDm‚‹wû‹Çjîä ѸFÚÄ¡¯¼Eá½`ü^Ól¥×ä–òe2EpÃýW^¯[Ôtëý/áÞ«m}¨=ýÇÙä>i\v® á.›ªj¾òmoæ°…%™eØýk¢ø[âMSR¿×tmRspúlûRb9eÍdÁ¨ßxÛǺ®‹{y¨iöö„go-[K½ðÏ\ÔGˆõ¯ ^Ý½ÚØ¹òæä‘õ®KÆþ×&ø“¥$šÐ{‰¤ßlZ?–>r8ï^¹á-\Òmç]oWþÐwlÇ…Û°WKEQEQEQEQEQEQEQEÉca׃_?x;Å·ñψ&žÚoì“pD²*±ØýkÙá*ðõÞœnZþÙíÙI9a\gÃm23©xT²„¥•ã•„c±Ü}kžøU«XøbÿÄVZ¤éÂ\1 ÍÃÛÖ«ø Y‚OŒZ½ÝÛùMr1¿ Ùö§èöíáŽ7o¨°Ž+Ð^9îþ~µèºŽ»hÔ­-”´À,ªŸÞ*sŠÆøIª[GðÖ8d”G-§˜²†àƒŸÿUqþ ðÅæ½¥xºò5h¡Ô<ÈíÛ¦ñ“ÍtŸî ³ð•Ö3ˆ§µºq"1äs\ÿ†´Yõ¿xÃR´8¶t’pxfÅmüž-+@Õ4ëÉW÷lÒ#qzÃð爎ڜ—mã`U n`þ"½à@ äâ¼ÃâAÐõ_iž×¢ Älñ\‚\n³à©¾ßi𦫽ÌÝ$bÞC¸¸nÞõïÑУ7Þ* ¯#ø¿âËí?YÒ4 RGtÁ¥¹d TÇÊOCÖ¹¯ŠÚU„Z¤W2\ÜùÊòÈòÏ#©Ï¯ñ‡ÌñƒD¶#tlè²lmÛ¾^¿†k¹ÐgÑ5‡6Kvmå³Keܲ‘”w®âM¤ZçÃ{-JÆÇìöÖ×$H1ôÝôï^‘¦ßèZŸ‚ínnM¬Ö‰lI‚¼zóoŠK5îŸámv;S œà Î í>'_[7»Ö#yШL¼x®{BðýÝ·ÀK‹I¡qs< .ÃÁ\œÒµ|{n¿ã‰gC,pJ»ws‘žÕCà%ÌMá‹øL‘‰¾ÖÌPš¡‹Eøó¬H^ùÅWñ“[Kñ§ÃÂI°V< SßšÖøÞè~“Ãq?hZë­çøSN°¹È•3:©ÏîÂ÷ý+»$I< á,þ*h^/$w;¶ XŒÞ•ÞQ^7ñÝàX4Fw[µÜä ë¼q,w? /^ÌfØ|ÙéÇzçü?¬3ῆ­téÑnn^4ã®3ó~™¯U\…œŸZñ½nøÚGIeÄqÀvóÇF«>)´Ð„È™Y7??w‘×ò¯VÖ­¿´t ÛhXfh—ÜWŒüÒtû?SÒïä–;È.IŠq^‹¡øwÂúG‹&“MG:¡ˆ™\ɸ`úû×à-J(¾#øÒiÝc*ÅnÆiß5+»ÿ…·3áÅÒ– î?¥uj3dèZ¡]÷Ö¬/UP4ðªºd ÀÝŽÌ+¿[{¿ÞÚC2µ¥½°wãî±íº¼ÏàÅÜÅ)šY£S$ç gæ'ŠzMnh¶›í[žwqœt¤Õ|A.¿ñhèz•ËYéP&ì°ÈÞëð¬™5-7LøÑͧ—ö+{V±n8Sßë]7ŽI¯>é×’Åþ¾dvxQ[¶ºó>±á+N¹ýÛAæÜ"FÐ8Ïã^^#®Ëý¢´…r,1<vµvÚ¦½-æ‡â—ÞŸd¶‰â‰¸å¶þ½ë+àÅÚ‡ˆÆD ®ø¬_„7 ÿ 7Œ®<Å Ü|£w^[¥Gá fOxËZ›T¹6¶–µ-ã>^ìg–=ë/ÃÌ:o|S¨XJ²0ÿT¥x?6³â{½ÿü2gr‘ù àñó®»Ã~)»Ö|u®i¬êövaU w滊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢±tÝ/C–Úåìm¡xnù¸^»æ³“á¿…#¹ó×I„7]¿Â? é ·†Ö†Þ%Ž5èª0cÜx?Ã÷ZÛçÒ­¤¹ëæ2 Òx|jÚ#K·ûVw 6ò O®xkJñJÕeQÐôaøÓ4 i“M¶ïûÌNæ?Aqà]\µÄºU¹™Žæ}¼±÷4·> ðÕÙ->hîF7òkSMÓ,ô›5´±aI! ÍG«hÖݰ¶Ô Âv7JÏ´ðW‡¬¡š+m2’e(á8Ȫ·_|;u Eö3E NT=qÖ·4­&ËE±K;0¯@9«ÔV6á» 3Z¿Õ-Ô‹‹Ý¾nOtÅ?Ä>±ñ6˜l5c`ØSƒ‘Z¶ÑYÚEmÄq(U‚¥®SPøwáÝKQ7“Z²³ÒG”I«(à×Gecm§Z%­¤)0¨£W9ª|<Ð5]HßÉ °Lã}žS“êné:=†‰d¶š}ºÃ öZÈ»ð‡¯µªOdMÏS‰UºŽ W»øiákÝMµ´ÿô– ïW#§JêãEŠ5~ê€dê¾Ñõ«•¸Ô,Òy )n³m>h–ºœw̳Ï$'0¤Ò–X¿ÝÕÖˆ|%¢ø¢8“V³Žä`J²þ"³¥ømá‰ô¡§K`^Û²ÎKçýêÖ²ðÖ•a¢¶‘ ª›&\4oÎï­r–ÿt+iÎË›ï²Üm ÇËúb»s¦Ú6œ, m‚lòÈÈÅs¿ |3g{ö˜íd 6åˆÊLjÝé]5ö™g¨éòX]Û¤–Ò.ÖŒŽ®NÓán…ox³M-íÜQ¾ø­®'-dtÂ×g$K@è L¥JöÅsß éwR\YØ´O `@•±†ëÆqSh~ðÿ‡'–m2Õ¡’EefÞzµü+¿ ®¤u´•o 2¬Ì #׫\|,ðµÕã^Km;\“»ÍûCn¿áÍ7SÑ‘yšÐ.À¬yüê—‡¼¡xbV—M¶q+ o’BäAž•¿4©,§ŠKjñû]ÏÆ¿íµ½?N6š}„…Þën>Ñ éjöJ+“Ö~øgÄ’]êVrM3œ–30ÇÐf´ôÿ ézn‰&‘ ,öR9[vA¬ýáþ¡Ý-Å­³—ŒŸ/ÌrÂ<ú•Ó²†R§¡®Iþx^K³vöN×;·y¦VÝŸ­]“Á:ÒÍ4¶!¦˜i õ?LðŽ•¥ê©E²]•%šBì«è3[õÉëÿ4êI¨^Á"ÜŒx¤(XzVä:=…¾º\vëö5MžYä\ô_ |1ÊÍöIåayIŒ÷zW]ikj`Ú«jZm®¯§Ëc{™o(æqšæõ‡Z-üÛÔÜ[!Æø ª?ÔWG¦évzNŸ” ¼k´"Šçµ‡Z¯¨›öI­®[‡{y {þ¸­½BÓô /²éðÐÌz–>¤÷¥Ö´[={Ok+ï0ÀÇ$Få üEsÚOÃ/hwÑ]é©unèÛˆYÛÚë­¸·†îÝฉd‰Æd\´_ |7 í"[Ì#fÝäyÍåÿß5™ñ2]14;?5³5Åô‹¢FvìaüYíŠæm> kë |_tÁظýjÿ‚×Ä^ø'‡5]@ß[Ï\DÄç`Ùj¾ð浩¾¥dÒ]°ÍóXús[Z^›“§Çend1F8ós~'½sÚÏýW¿kåóìîXaäµ}…¾µ¯¡øwOðü,–q±w9’WmÎÿSXš—Ã/jzËjr%ÄSIþµa”ªÉþõlëÓ5¯6‰s…¨N6c¡á¯iÞ¹ûLsÜÝ\*yqÉpûŒkè¾”Ý{áþ¯_ ÷ó­o:­Ÿc0÷­ÂÚo‡"u²Giåå•Ë;~&©kѵD_É\¶GÊyƒÑ±Ö¨ê_ <1ª^Es5¬‹$QˆÓ˯ºë;Hl,â´€J98¬¯xGIñLǨÂY£;’E8eüitŸ iz6—.Ÿk¦HÌä³gÞ²í>xVÆO2ßO1¿÷„­Í"|0ð”wqݦ™¶â7 ² [9_Ö<áívå.u :9&A€ã‚G¡ªÚß êmj×jæÛˆö`zVÆ£ éº®’tË»U{M»D~ƒÚ©h Ðü6í&›i²VLŽÛÛ™=+ ®[Ä~Ñ|M}õâKÜc 4/µªÛxCGÿbY–Päúš§iðóÃv6ÍokfðÄ˵•&a‘ùÒi¼7¢ê+}§Ù¼“¶VÃ}Gz[‡ž¹Õ[Qk"—ÛŸËrªÿQÞœÞðókˬ}mÊíá[qÓ+Kâi+’ ï<è®`ÿW4µ…YðÏ…4ï Ù¼!ÙämÒK!˹÷5½EQEQEQEQEQEQEQETÔ5}2Ûí%‚n ò®NkïÆº@ŠHcyžv\"›$šÔÐm ž‘ 2•‘ÿxàÿy¹­:(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢šÊJ°4Ø¡ŠÂCƃ QRQEQEQEQEQEQE`ø—Âö~&¶….H§·2 â8xÛÚ³môÀU?á&F‰O­òÄzÒÒ|1m§j³êÒÍ%Σ:yäþèìa[ÔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQMdWu =¦˜!=bOûäT1ê6s\½´w1<é÷£ È«TQEQEAöË]Û~Ó}7Š‘äDMìê«ýâp)QÒEÜŽ¬§ºœŠG‘#]Îê£ÕŽ*$¾´’o&;˜šLgj¸&¬QEQEQEQEQQ4ð¡!¥E#®XqOV ¡”‚B)ÔQE&qMó¶ÝëŸLÓ袊(¢ŠæŠ<ù’¢ãûÍŠT‘%MѺºžêr(’Xá]Ò:¢ú±À¦Eso9"£Ž¡˜öo]ßÝÏ4úN”Ô‘$ÎÇVÇ8§ÑEQQÉv2¶:àÓ¨¢Š(¢Š(¦<‰˺¯Ôâ’)£™wG"8õVÍILó¾Àê[û¹æŸE7zg—?ZuQEQEQEQEQEQEQEQE2Eß(8$šò |/Öt?K®]j~m«;8Pä³gûÕÛxÓįáíp$r\4«Fçïd⺠y ¶ÑHÝYâ*Z(¢ŠB21_>|QðÄ>ñN‹>sts™Íb Ü?ƽWƾ¿ñG‚†›§Þ[–T`àã8*ø~ÿÃ^¶Óµ+¡st„–`ÄžÀšÓ×t?Ø}Ž÷Íçvcr§?Q^!ð×K›Mø»©éÁäxí‹móqÛž9úWДQEW;ãoÉá ]j±"I$[B«N+[Kº{í.ÖêDóD®Ê;*åQEQEâß<9m§éMâ+I–æ8äT˜…`}«Ô|+Ç…tϘ·ú:œŸ¥lQE5˜*–=ÍsÞñ"xªÓP•`1C ÃÛ.[%Ààµxî·ayáoŒú=ŽxÖ×£yrJÌ0Ǿ…¢Š(¢Š+Í~+øJÊûú†µæÏänd;N=ªÿÁövøg¥³’IßÉïóê5ÍËÄsY_#4DîX©ê+Ê>é²iþ<ñE±šW‚Ü„Œ;ç1çò­é| â)~'¯ˆF­·MWÝåo9+»·¥v¾'Ö¿áðíæ©å MºnN7~5:<𦆝ƒ—g ~é#Ö¹/‡ Õ¼&5©ê&çí2nUÞ[õç½w´QEW+㟠Øx‹F‘¯ ÊöèωÊóŠâ>4 j^c»í¸Ú7ö¯a®;âO‡5?xYôý*çȸ.ïm =*߀ôï øN×MÔ.~Ñr™,ÙÎ3Úºj+Ï~.x–ë@ðÔ6öNc¸Ô& TSÔ×)/ÃýoLñ‡î¼?ýB5åÁ—[>Õí´QEQEƒâ߯…ô_íœ|ÄS8ÎæúÕûø¦¾Ñ.#·*y "6þëÅpÿ ü%â? K©6»yç,äykæoç<šôz(¢Š(¢Š+†ø¡ Ã©øVêôÏ<3YDÒ!ŠB¹úâ©üYëi¥•¤ievËœžµèµå¾ð'ˆt߉WzåÞ _O‘™‚o$¶z {W©Q_?üEÓ5}ÇZK[ë­k¨\çiü¿0Èýkß È·Œ»F*’Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ÿñn®ê:ZÇ jKct­’ì8#Ò¼ŸÂÞ(ñ®«ã |=¨ë±ÛÉm¹KyKóùSì<]âȾ#7‡¯õÐЉJ«Wçï[öøæ÷ÆW–þ!ݧ[°2Hb\»\÷Ž5ïxGÅ– T]A?Ý@€wé[ð‘xÊÛÅúf™;™!¾ˆ´…a⌎}i<=¯ø~)Ï êZ¡¸µ„n °.GlÖÅí3W>(ÑÚÁ1\ݯ‘O–3‘ÉëÑlN£àßÝêî®u‘7F{Bqž•Íø~øòÒã_Mfm:ÝIû=¼jÀÏÞ«>ñ>£ãê:b_=^ÊRP8ÉÇ^ÕÜü(×õÝkGº]r)JR9d]¥×é^‹^uâ/_]xöÓÂ:DÆ <Û‰ÔdªúW ñ"ÛV´ñ'‡mu+Ö¹…nÕ’åºòGéÞ4¼Ö4ÿ Ë©h÷pÃök3l‹ØÇåPxCų]|5Äz»†u¤¨ÇJ£áG]ñŽþ!‡S{(YÛìöÊ€© qówíú×à RâoŒz¬Ò[1y›Ër£åC÷Oò¯}®{Æ0ëhr¾‹|¶w1ûÙr«Ë¼ã/x¶ Ûî¡0¹ÍÌ‘ð¸ìúéþx×TÕ5ÝOÃÚÚ«ßY> ©ÀaëóÖ—Yñ¥ö­ã/øE<=qÆ3stFâžÊ=jñ^©àßÙèºýð½µ½†á†7½rˆ],R[èF™qp¢(ã^IìZ½3ÁºwŠ,XkQ¶¹´1/’¦ÝµØWñÅ7>Mµ³’('¿ŸÉò±\wþ•u¯x¯FÖt‹¯`¾¶¼˜+Ü"á€ÇL ¥ñ+Å>/ðŽ·k%­Ý¿öuäÛ#ËÉQß'Öµ<®x·Ã:+kV76­lª»âtù†G­hÉsâ]káöŸªiúŒ6—oçÊÛ3¿ŒãÚ¸¯‡Þ(ñŸŽ-®`þÒ˜%Ä—B0Oû tük«ð¯‹u+½gYð¾¡qöµŸú‰vä8#†ýGË]øçÆúWâðÄïkw,ª˜ÓhÉèMtºŸŠu¿êº\zåÔWvš‹ì,±0¿õ[ã”›ü lÈ«ÝFyý+ª{=VoXÇ£^¥Â@¿3¦áÓ¥p^ñ—мO®jMõý½½Í–åÙårÄqžµ·á;ÿjž)¹[ËËVÒ,§hœ¬X3qÛé^—\WÄcâ4ðýĺ%ͼÇ 4í ËÿÀk‘ø)ˆÎ‡o;\Zÿd´²3®Óæ³ÜôëT>%Þ›Œ~¸ »Ë*?¼yÀüÈ­ÿxÃÅ šËPÔŬúuÓ„0Ä„¯¢ÝÁv±’)#Ü_èj/ jÚç‰>A¨­Ìqêr†o0§Ê? ä<ãx‹TÔ´w–/´Ã.ÑpcÊÆçŽæº/ x¿U“Æz‡…µÆŠK›ußÑ®ÐÃé\?Æ_­Þœú•ݼ–Ò_i& úf½ _Tðw…®õ/êó$q D˜ç/½G§ßx‡Vðkø„jDÒFf†ÜF6ªõ½úõoÂÞ0ø6âòÍ–B(ÙB¸ÀxSÆþ/Ö´­b!r$¹²vg¸1ä"ŽÀw&­^xÛÆáŒ~"–ˆ$e¸'Þ\à*þ‘âokÞ þß¶’ÒÚ!ÞVT%¦#¯ÐV׃üu¨xÓGi¬mbI℉YÏ /`=©~øâïÄÚ–«$i©XHU¼¾Œ*–§ãmOTñìþÑ®a³hW™dyvëéSøCƺœþ-½ð¶¸±½ìrOí¿Jâ¾0?ˆô›Yn¡3ݨ¶…S‘‚þµé¶qx ÍçÜX¶¤0b!~@¸=JËøgãWÅ1j£Wé%œÞX.:u¨Å:¯‹¼Yy£h7igkaÄ×w37 ©´]é¾6o kS ¦dßÎ6ïú×5ãox»ÂÞ<±³Žî)¬o\ˆ'8Î6Õïx«Å~ }?S»žÞâÊæPn±à¦}ëÔ¬nEíŒJ0%@àzdUŠ+ƒø“?‰ôÍ)õm ùbŠÙ7I%댱ñ—Н~KâXõXZâÝØÉŒckCKñg‰µ‡']µÔ 7‚M¦?+Ôà êu©Gð»R:Ô±ËxÖ¬\¢áG ®7á…ö½sà {] ÁvâMò̹Ën'ô®ÇÀ>0»ñf•~—)7ör4,T|»»ÆÐ|]âGø£qáMíä·Š#&øÓi>•«ãÉ êv™Mªß¸TÞ~X?xŠÈ¹ñ¶«áOéú>µyo{öÒ7âØbÝÀïY_õ´×<,áK¢ÊÒaG-Êð+KÅ>.ñ†4{}rh->ÄÌ¡ ²©é“^‹¡ê‘ëZ%ž¥ÂÜD²éšÐ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠùÇ⥥ï„þ"Úëö`ƒtøQž±©þ!éºF™ x–.•ó)ç’}úöýkÖþØÍ‡Ròëþ>¯?{%yçÅÉü'þ\®ß5rsï^Ï DÐÅ.Ô$ ÃàWéwQ¿í¨~𳹫? øA‚’†ãï÷…\ñííö¹¤êzMƒîK{E‘”uÏ~•ðÃEÓµŸERöÞEfY"Žr€¥tžÐ4? xƒR¶Óáî< ÓÏ#‚½ð>µÉ|!¸Gñç‹e—`2\³ö›¥{rF‘Œ"*aŠ}x-”Zí<·¬ÁeRѱèÊqÇáý*߯}VݼIáËe}ÏÀfžâ»¿ÊŸð¬¯ÙäUÝiëÔíé\.“o.¡û:ÉmfÌ$XÙ˜!çÉκ¿„Wv°|/²q*„ˆÉ¸±Æ>c\O­N ¿Š^#¸WTŠGb¹àc'çÞ½æ³õÆUЯ™ŽBÙü«Ê>$bÇWŸºá²O§Oá¬Í7ÆoHî ù9ÿj£ð´šgÆ­n+à|éw¼a—ª³pGéR|e·’ÿƾ´µù®Oº; гñ¹D:g†cqó­ÂÎ1ŒW­ÙßZ:ÛÛ$èf1çœ`Uúó/‹0éz”š.ªf$½•„wJØ18Æ?<× ¨x7Äç´ÕàÖ¡¦E2æ)˜’9Ç÷æµ~9;̾•‰T’Ecé’Vµ¾6jÁðîe™|ÙÙ(=GØx`,ß lQè8ã·Ë\_À…ŠÛHÔí[án[>¸¬¯ ZÜ_~кµì½¸o5»€¸ÿ>•-ô°ÇûFBÓ$m'Ö®|yA=¦‰nŠ^â[±(ëŸZŸâÕ¬‘ü1Ób¸e2Ç4[³×5éÚ>ßìkM½<¥¯ñ¼3|>ø£·dH‡Q ¹BÝÇê {7ƒt÷Óü9›&y³4„ÿy¹®‚¹¯ïÕÊÏ»géŠá~jϤü'µ¸„+Ì×Z¡õgÇõý+3ÇŸé|1Q¶7lúšµþ<³Â9¦D¤kµÉôª_,¦¼ð>{ZvÍÚ8Æ:×U¦xNÏVð¤+6µ%¤öë¹D£Hèx« lt7E»´Ñ|ãkÓ.ùw7r¥vÕã~<ñj_ôß ÙZ[-ê?ü~ÊÚ3×å¾+3ÆñýƒâG…-&½–òá% îäqÏ ¨þ)ÞË­]hªÂËmozÐ6w¿õ{?†wÜš‘ûšæôËiõÙïìÖ«æLÖÇä«{áMÕ½·Ã;u–aˆ7‡9Æ9¬/ƒÒÇqâ\"ìIg¨É¦k²'ü4F‰’0 ÁÏc´ÕŽxtO¯W“Ðs]Ëj“vÛL„¡¶ûI!Ç9ÇÃ|˜Isâ›p+zàç“TþFÚ‹üUep¾\ærÁR7Qø’Ò]Sãæ˜¶JCZį;ƒÀÕ¯m—ãÖ…eA“žÝiÿâó¥ðÚõÍê‚=³Wþ+xô iöÚE3ÞEy†V?|W+ñ3JK‡– 5ì·sÉ*oÃ|ª?Ýì+Ñm5ë{¯_XD¸kM=YŸvGÌŸwë\§ìü«ÿÆ¢ù$ý¬ÿ*ö ä~'Hcøy«²õòH¬ß„# tü“¯Éú×7ðiV_xªáÑ|ÃxØ#·Ìi–_öŒ¾*À·çø7ÇFÿEŸ™¯WÄVÆ]:çQøhÑK‹vI\/÷EmxzþøQi?˜­‡ÌsÐâ¸ÿ‚:tÖÞÖ5,w.þ^}©¾Þ×^<35ãÍt¿Vÿ õUTT]£€1Þ ðʈ¾ E°ù³sþídüE »uµÛdþŸð¶,üMñt ‚ìÿ4ÝDxŸâÆ¢4»{{²-טÜò88ì+?Ã×6–Ÿõ›»»òÐÚÅÌ®r{qý+câ¼±Ëâï¸o•}7kÒWVÅæž›8mąר'µyßÂSoçø¦ p Ÿk“œýðVaâYÜœ]yÙ!º°ÍUñ=•Æ¥û@é)fÛŒH²HWª2Nj÷ÄXãâ÷…Ä’¢¢•b_½W>=‘ÿ¾˜ŠHaz§Ó½ N¹‡Lð½Ìî0Z†fö²<#ñDñ¥ÅÄkH²ÃÉI µØUkûHïôû‹IFRhÊ0õÍ|ûà=.äx¯TðƒE¿OŽv™Ã®AÇEþGð«¬nÓÆz…$lí®Ûè§…úr+Ö¼~vxW?(Å»r{q\ßÁ„ÙðÆØ 1‘¸ÿxõ¬_‚’–ÖüT…¿åè¶?àF¦Ó˜GûBêˆmÖ˜P? ÄÖ­žÓö‡±¸½Ümå;¢-Ó;HW¡x»Dð×ö½‡ˆ5h‹ÜÅ"G «}æ'åã½q¿JMãO@17¡í-n|jqÃWçŒg5Ñü9doèáâÝréÅuTQEQEQEQEQEQEQX^"ðž™âv³:‚3}–_5=O½M­xvÃ^ÓO¼‹0++(±W`´Kk³ˆEM€÷¸-_àî“­Þý¶÷TÔžã9Gó3³é]†“¡G¥hK¥ »™Ð¾t¯™ã\ÜŸ ¼4ÚˆÔnÒï92ùìK}kgÄ> ÒüMaki~$ÿF Å"6p;“Bðž•áûY µ‰ŸÍÿY$Ì]ÛêMswŸ lRšóNÔ¯´ï=·I¼›Tþ¿kàí>ÏE›MŠIñ72ϼùŒ}Ku®vÛàæƒc~—–w7°H;m”üÿZô(ÓËS9ÚÍ>¹¯ø'Lñ,°\Nd‚îò\@v¸¬[ï„Ú&£gmÕÅܯ—³þñ‰õ5gPømaªh°éWzûÛÇž|Ï™¿Þ=êÏ…ü§xVÒâÒÖææ{y—iŽfÈQíP§Ã]+™ïa·‘÷µ¤R툟u¬Õø=¢Câ¬Û]]ÁpÒoeð§Ú½ $j€’cšÊñˆ¬œ·wñçæ06ÒÃÒ¹Ý/án‘¢ ›wn².Rc‚{·Ö Ò~èÚ6´Ú­­õúÜ3noÞðçý¯ZÕñ'íõÛøu;{©lu(Fâ.¸ô>¢£Ð¼k¦êcVÔn¥Ôõ »Vyÿ„zZ-ð†›ã 0Yê ÃknIï!öªþðE†e{„¸¹¼»uØn.,û£ÐWQ\çˆ|¦ø—Q±ºÔA‘-…ˆô%»Öbü9·kÈ$»Õïîí`pñÚLÙ@GO®+WÅ>Ó|[¥ õ`ˆs§ÞCÛÏ]|$Ñïôsa}{{rã'‘òÈa]•áø¼1á™ì-îî'Š8[cNAe=Oöò¼©˜~WC‚­ØŠõOÛ®§o¨jW·ͪ•€ÜÄyî}ý©¾ ð&›âYµ®dRC,{ðˆ}@«"ïHð^›ok}©ãfÛ\?'¶+šñý­‡ˆµ_ éà$ҽȘeFIǧJôDP‘ªá§UmBÆJÂ{+…Ý ÈQǵpþøWg jqO§w5¤.dŠÒFùz±â†v>!ñ"k“êW°ÝÄ•å„Ç¥7Xøcg¯Á:ž¯¨ÍXØ»Ô`Žý+¤ÿ„zÊO&‰sºâÕc“!ù˜W'ÂÈá‘á‹Ä¤ZkøóI0¸ôÏ\Wm¦ivš=„vvQáŒ`Wk‹ñ?Ã}+Äz¤: –k-B#‘<ýj¶§ð»NÔ¬íRKë£wnûÖí›2õ­çðŽ™7‡Ež3$ 3¼ýíÝKg×5’ß ôÙìåµ¾¼¼¼£1Çç¾| }=ýëCÂÞ Ó¼)e5¥œ“Ë ½RgÜÒ©7Ã}ío,SÞýíc›lLßAI¤ü5Ñ´]r]VÆ[˜æ—%IòsíUî>i7Z°Õ&¾Ô úýÙÄß2ý+w]ð–â=2ÿÌt‹%Ïά;æ¢Ñ¼c¤Eq‰în.']q,™}¾€öª¾ø{£xgR–÷O{¡$¬YÕ¦%XžäTš×ƒ ÔµAªÙ^M§ê;v<ðó¯¡êo øBËÃ’Op’Ks{ps5ÌÇ.õyðÏD¾Õ[S–Kß¶î,&ËÎp=©5_†šN³:Myy¨;Æsfá>‚­êÒµoãê =ÄP¶ä•ßçÏÖª±ПG¸Óf{¹£œ/$IJÓnzRCðÓJ·Ñ†—åôp1Ì¥eù¤ãc銛Ã?ôÏ \‰të«°™É‰¤ùú‘]…s¾'ð…—ŠãH¯®nÒ]¦8eÚ¯õꦙà+ #L—N³¼½ŽÙ×hQ'*=j¯¤ü3Ñô9d—N¹¾‚II.Ë6wÄT6? 4{ euxo5{œ´>wûÔš÷Ã-'ÄZ³j÷W¯&íè¾oËÿdVþ™ [éú#éRK-Ü»qœî$ÕË7ÂÛl½´ZÍü:Sýëa·™êu7>·ÿcÙÈö0ئ߂£®{ÿ tï _¥ÖŸ¨_*†ß$LùYÔÖ¿Šü%iâû$²¾º¹ŠÙNæHX(sþ×ÖZ|6³‡FþɃWÕ#µÆÝ¢PxÆ1Ò› |7´ðÕ»[éš­üPŸàÜ1žæ¬øoÀ>×ïµ{k»‰&¼$ÊŒrsTeø]§'ˆåÖtýBîÆYÛ3$$m^Ýë7Vø5a­®¡k¨Ïh¬¡g?å¨÷ú×CâÿYx¶ÞÌI<¶óÙ`–3Êâ’ÃÀßaÒgµ]^ðÝ\02Ý’ °ôçµSð·Ã+O êíeª^?˜Å¥ŠM»dcëSkžûv·ý³¤j/¦_ºì–D@ÁǸ«^ðM¿‡'žök™/µ+õ·2õÇ ôªÚïÃ]#Ä:úë7W7©v€ÌRíÙJƒXø]¦kª‰¨jǦùAþµ¬šF—áÏOcvòØ„*ò\¿%»\Âo [[ø‹T×ôûwƒL|Åi¼ó îßJö*+ MðÜoˆuY/6ü»~î*[?XØë÷šÄ)‹›¤T“J¯âŸ §Šl–Î}BêÚÜ‚$H`>µ™¢ü>ƒ@Ó%Óì5[ä·uÚªH;=ǽ3Ã_ ´ÿ _^]Ù_]—»VW F2‹ëPAð¶Âÿn Rý¯‹eœ¿ÞŸJ½ãoÚx¤3Ék}oÌõSYšÃ{›=Rý{\ŸV{~`øD>¸îhñÃâO&­q¬Ü#BÙ·Tb/¥;^øm7ˆì–Êÿ^º{uä 9aÞ¯x+ÁxCÍCªÍw ±ÆãvTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQX,·×®ô†ƒ@’Þ;‰2®Óô x⸟‡Þ ñ‚ˆ³iôé´ùeß1 Ûÿ+Ô'2¬T<¡NÅ'šòÏøé¼xž,Ž=-§Q´Aæ¶6þ]kÖ¬ ÓXÂר‰tPyЇ*Ú¬×üSøuã{[#e4i=³çlU¿x.÷I¾m_[ºKDÄ cû‘F; îh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¡ªé:ÝŸÙ5DÐn Pô$U¨-á¶…a‚5Ž5UQ€*Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šâ~"xSÕô¦¹Óõ¹ì>Ë>Èø~ ×'ð/YÖ5k}SûVþ[± ìC+dŽ•ìTQEÏx¿ÅpxKMŠòx$˜K U=MmZOö›H§ÚSÌPÛOQSÑE‹âOZøfÂ;Ë´wG‘c}IÅkE – oPØ©+7\°¹Ôô™­-/¤²™ÇËêÚÜÞ4Öt½KUžþ?‘OçÅhøÏLñåÏl¤Ñg˜hà¡p¯„ÿkpï^¤ „ŽN94ê(¢Š(¢Š(¢¼oãü$z-â ;]š(E„Z À\Žµèž ¸¸»ðv™qu#I4°+37~+ ¢Š(¢Š(¢‘³´ã®8¯'ðü'qüE¾]kÍ:c3í-÷?.Ñô¯Y¢Š(¢ŠË³×ìoµËí"cudªÓ p7t¯"ø·/ˆ|;©Y^Ûë÷EÝÆÕ·(Aé^Ϧ³¾™jÒ}ö‰IüªÕV2øŽÍüRþUݤ{|¡MlÑ^ñb_øgX°½³×îµôåLÀOa^Ñ`í&Ÿlï÷š%'ò«4QEQEQEQEQEfë–ú•Ö•,:UÚZÞ7Ü•×påžñO‹.>&ÝøX¾[ˆm‘·a6Ž;þµì´QEQESÕwÒî–Ö_*syoýÓŠòŸƒzë:Ô¶¡-ÊÛ`*»gq½ŠŠ(¢Š*ž§k=î5½­ÓZÌë…™FJ×ø{RñE‡Åøü=¨ë2ÞZ¢3’T Õí•ã?n#µ†5µ‡Ì lå@®"߯¾0×ü?sâ=*âÅ-`bÍk´îU¦»o ø®çÅÞ mBÈ"^…Û‡ýë…Ñþ"xÎÞh2Z[I|‡lcoÔŸJè¼?ãÍa|fÞñ%½´WE7$’¿:ã¾-ê^%“ÄZ}„–Ñ%‘¸S‡É˜_Jõ3YÔôÿ Ýj>!´K²Æ$GvT ä"øƒâGDŸÄ:m„šd,I„12§¦k½ð§‰-üS A©Û +Œ2ú7zóŸ‡øŸâwùjÍÀÍlx‹ÇÚÿ‡¼Ua¥\i6ÆÞúP‘L²’qž{UïøÃXðþ¥¥Xé:zÝÏ{œ«øÖ<ŸuÄñ5ž‚š]¼×rcÎò¥Ü#ç½i§øšÒÞï!–ùCtç½ik>+Ô·“ ÙEuÌÞ\¯Ü‡vÜþ5ãµß\x£_¿‡G[»›™Ñ.?y´CŽÞõ§ñãbØøzy°ª·€>{9­ýKÇš–‘¡ Z M¤BŠ Æ\3/!k¬ƒÄ–3x[þÇì‚=°9® þ7‰.´9šÒƾѩ^6Øa‰öªCÅÚ–¨Ú[xŽÎ8b¼}‘ÍÈVì ^Ö¼Mym¬C¤iQ]ÞÉœD²ìP•‰âûÍCćD¾ÒšÎå!2HKnî)ã;Ë«û¤Ò´†»´´b’ϼXuÚ;Õÿ x²XÞ^$o´¦"$ë‘×5–|yu%Ãè,º…¹+%É"±vúÖ燼Mcâ--¯m›hBVTn±‘ÔÄÆ×º•ÍÑÑtƒwgk!ŽIËãs»}q\Ãû…¾øÛ­Ý!Èh˜žz–½ÊŠ+„Õ|#xŽ_ø~Í/µFfó%©ì=MMáOÿmëz¡hlõ[_¿rõ©xßâ\ž Õ ¶ŸH’[yˆÎžõkÄž>ŸÃb »"GÒä*ñ$.ïök§mjÉt3¬4 Yˆ¼Ýÿì×cã-c[Ò§ÕìôØÿ²~`2ß¼eþö+”øñÍ­ø¦dèÓ)Lµ{eUÔu m.ÂkÛ¹pB¥™yÜ?u½OL¸Öôí*Ù4h˜âk™J³Ô[¶¿4y¼ÿ $²ypÊÉoîÆ²—Æ>'‹N]zãI·AÊýèOïzV®·ã;‹oC­èšpÔm] ’7™·ËÍEáïÞøÁŸÛ¶zNéw•û?™ØulÒøÇ¿ðš> †Á­^Éö8-»šä<Óÿ ··Ù±]߉ü`šå–›i»Õ/$Ù¾ìq݉ìZóŒú¥óxj RÕ"¸3«ÄÑ6Q¸ïô¯Xð˜#ÂzXn¢Ù3ùVÍQEQEQEQEQEQEâ¥W𶤮HSdŠò¿ÙîÉKÔ®¹ó]¿…>öf?´-œLˆ8d·ê¯Æ$º_hR4›-Õ±§pæ»-sÁZ¿ˆ|;%•ÿ‰¶xÁ;mÆ1Z? ¬lôß ­••óÞÇ … ¬¸äv®Æ¼Sâ¶ábøg  ϸ®çÅ>(°Òô{ø/bYb†ÑZQœ†ÝÆÜwé\† 7Ôu’ 7K‘’Þ>Ií1­¿‚—ÖPxI æ„`õsYþ‰âÿˆ[q“Ëû¤öªÚ¬¨h{(ä ‹æçëZŸ xES þµÛøÛTÓ4¿ ^I©.ûWŒ©ŒôþUæ‚âãá~­s`išL‹#$%‹»pFKóÅj|Õí´ÿ ØXI¹¦½™ü¼8¨>ÌòüLñAsŸÞUÏŠ÷‰‹<(…Tæã’zŽk£ñïˆ4½IMNhc“QÙ²Õå·7jä¼~°›Å>!Mú¦©*íNÝÇ…çùV®Ú…ïÇë-’) a­Ú_™q·§ó®ËÆ~ ÕüB–w:¾·iiŒ‚U”EŽ}+Ä~ÕuO¯ k>F©onžržƒSø³c┋[Þ' ú×¥x'¹²»ÖçAçj3Î~LañÐ+®®Câ=µ÷…Êîf‡Ï•9ø_µKãøY-t˜€îºï[¤_ ¯ FÕµ]ƒß‚+'Ã7¶:GÁçÕQš×Èa*/|ö¬ .×á~¥{§E£È’:Bù‘äõnÕ±ðwUŠ×Ášl2¡ó/î%Ù·€cš>ݽß|c#·Ê—;W>›z°!†AÈö¥¯øðãðôEIi.öþfº¯ˆl¾^ ÎŶUãŽ1\†½ÝÇìùl-ñ 4¤wN3úVß‚4Ýv÷áîž–:­¬I0ÖåˆãÕ7Ão ¯…5McNþ×[é Y]qå“ßñ¯H¯2øêqðõÏý7Oç[:O’>Eä ýŸÓ=ö×é²ß/À½`ÃòÂ×er;®Fµëß ÿÂ²Ó ƒnwcé^iðÕÄž5A†˜Ò2³úrzT³x{Çz6Т߮£¤-å;g)éZw²Âaàÿˆ.?²õhÝ’Ôc2ðEeIw㟠ëÚ[ø¢Ø_XÇ0Hç_á'Œþµg^7—_´ù7ˆ×È͹dt9®ëÅ^Ö ¬ÆâI)Ï'¦M7F¸}?ã–¯s¨02ÇlZCùz ãð«?Lz…§†äL˜¦¸]§88­ÿ‹Ð¤ æ ¢-¤väVˆïü3Õ°·ÝÌ1ù¾»8®³á¡Œ|(³Ý«îÍr_–?í_´ê|õÛùšöºòßÜÇàEò• ÃÍÇqRøOÃvž%ø-c¤É!Ž9áÜ]{7\×ñGµðç‚t­K¹ûM´WŒ.$óÓÐ×®j&!ð¾RØ+ö3붸‡q/ÁMhL[`ódŸáÅt_6CðÉp0¥''¯&±þJ%ÔVºÝúšˆ„´hlóö|pj½ÜÓ?íj%8‰S »¦6œâ®~Ð3ƺ—ÿZnwR1^á†-á}1SnŸÊµ¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®gÅú«¯Yyv¬lWi¡oÍrÞøs®xF)ã‹[ŒE.NÁñzÔKð¯Wo'ˆfñµâ¶xƒo¥vž'🊴Qa|O˜…Z9—ª¸þ*æ£ðGЦ„ØÞø­ŽŸÑ’8±#¯¡jí´&×CÓb°³M°Æ8ÏSWë‡ñÿ€›Æ&ÆæÚøÙÞÙ>èœ.i->Å>…ye®^Iqy:sÁã¦=1X–fµ´}6}vyôœ’–¿t¯­Zð§ÂŸøFnž_íy'@¬ fÑ=ýÍ.—𥴭ZãRƒ_» L‡æúÔü%™«áËí7Y¿k™îÔ2ŒÇLjÀÑ~ê6º!еq¦Ò@oÜÄ› d÷>žÕ/„¾]ønöI¤ÕÅÄq«-¬e8=êß…¾êñÚ¨Öüápû§ËÆášŒ¾Ïâ½rßS:Ô5©Äc Uµÿ…×^ Ôl¯nµ·/f«± nRùªúŸÂ­KZÔlîu4±ÚȲ$"=«s[.ðšÔ¶:ž™p¶šÅ–<¹qÜ`ƒê*(<5â­^xÄ—öÿd‰·˜­‡ß#Ô“Ò‹¯j+â«NÕ¼‰Y"€Œ¦Ñ٪ƛámbëÄðkž!º·’[U+o …\õo­w^öÕ/l§µ“îJ…ã^Y ü4ñ'‡n.ì´íj´›‡$á~uSééQxOáˆ<%¯ÞÜÚjÍcxeCäs·ñæµ4oøÂÖDhú¬2M33Ì“ƒ³'Ó½áË¡ÝÞêz…йÔïH3: ª1Ð]urÞ7ðt^4°´±¸˜Çoþl€uaŽ‚¹¹|â ´±áÓª@šÂð§Í+žž•Ýézu‡´‹{ pÛÀ¡W'Äü\ÓlµN·râk´HJŸ~k½ÓmÃM¶´v¤QªéVë˜ñÇ…åñnˆštw?grÈÎ8•‹/…üVÖgG­¹ÓizS½C⯅ë«"].ìYÜi{DNFztª~!øk­x¢ÆÚ]KW‰µ;g *mqí]o…tðí¤­z·×O¾i>è' {\Ïü5i®øßÂàç‰ZG¨¼ÿ<~uè—ÌlÞ;Y9¶b7q§¶EyÍÃ]rËÆSø“þžæáÿz¾_Aø Ðñ¯€õëzuô:´vÑXñFÑ;¾¹éÀªÞ3ð?ˆü[¤Ûi³k« lLBFö;Óü[§]Xü-þιÔ!K¨ö$r}Õv„ükϬ5ˆö–¨ñxNÍöËgµû¢»Ÿ|@Öu-kûĺWØoZ?2-«´0úW¦SYw)_QŠóM+áÞ¹ x†þm#YŽÛN½—Í‘vnp}ZñßëÏßÙ;j«ooj*ù{Žï^µ&µà\Ð?².ê±èÿØWšé“GYc†8ö³gûÇÒ®øÀ:·„® 7zš\i°†ò Œ1?xÕ¿…úµ¶µq ë«gi©6n•“.=vפi–_ÙÚe½Ÿšòù({õo­[¯3ñ—ýoÆ­¼“ë±Ågo!’ÖTúŸj»®x']×´ÑîõØŒ ›e"½Ž˜­x>}/Ã2è:•êÞÙ˜ü¤6íZçí<ã«ØøZµþÍg;Râ2ÍŸNk­ð¿†#ðüI$ïurÛî._«ŸLvºó?Žk»áÔ¾ž|`þu‡áŸ^x*ßLƒR†-6êÝr]I‘€k³Ó<)¦ižM!h#ØÁÇÞõ5ÊZø7Å:E´šN•ªÚ&å¶™P´‘‚zÕ·,¬¼q Z9A:ó0å˜õ&³íü¯èö‘XiØA62Ì›Šúâ™ðÑ.m´ˆ-õ€iò<¾`_™Ý»þu%߆»¯/µÙÒ{ûÕØé|¸Ó²ŠÀÓ<âo Ëya¡ÝYǤÜJdS.KÅž¸ë+GøeâOøÎã[Ó5+VŽcµÄùÜêzôÿ^}WK¶Ô[Qµ¸ÂÂŽ:{×yà{[«/iv÷ ý¡ Pù99ÅtnzבÚ|3ñ‡¼ayªø{PµX/ oó”îPNx©®>kqø³ûbËSˆµÄ";—•r}ð*ç|­ø¦[8â¿´‚ÖÉ•¡O,î$õ7Œ.øe­x¿NŽkÝN©£‚A¢úþ½tþÐüC éi®_År„ û¢» (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¼çâÿ‡5Ïxr´WrñI¾H‘ö—[Â>×õôÉõèÚ×M€$»†w~ìkÓ袊(¯,ø¯áÏjú†‘w£¼ÍklÙš8[ œŽ}úWIá;R»Ôß\֭̈ü‹h d¢w-îk¯¢Š+Šø…áGÄúuΖèn¬.ë„“´‹âývݽ7*0|¦VCøæ ÐômgXñ\~&×­£²6ñ­mTî`ñ1õ®öŠ(¢Š(¢Š(¢Š(¢¼«âä> ×ì[BÒ4igYe{ØSþÎ+¤ðî²úJXjÚD–FÖ5Dv`C×cEQEQEQEW5wá ]KÄÉ«êIp°¨[1ýÜgûØõ®–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®[Ç â3£™<9s¼ñeÜÉü@vÆ| ñ¦½â‹ýNßXe6¸Æ¿á^¹EQEQEQ\ß‹ÛÄqé~o‡ZÜL€´‚~àÕÍ|$ñޱâë=B][aheØ¥h£õ®þü]½„ë`ñ¥ÙB"iT7lûW”é^1ñ|? ð¶±-œˆ@gkxÈÈÆ{Õ߉~2ñ/‡5› }Ï摇˜á zq^“§O-Λo<é²Y# ËèjÃîØÛ~ö>µâž'ñ×ü7âû .ím>Ïy:ª´cøKb½­ (¤õ#šuW/ã;¿XéâãðÚÊcRÒ‰óœ²+›øKã[Æ1jGUXU­äÚ¢5#½ëÓ(®+â ÷Šô«¨ø}¬þÏm Ip³‚IÇ¥Að¯ÅÚ—Œ¼96¡©¬K*˰yk´WyEÖÎ÷®8¯ñ_<{á=^ΤÓZÚò}‘\¹ïï^½nÍ%´NøÞÈ c×÷Ýå¶ÌnÇËõ¯"—Ç>4Ò7³¾žþ¡6ò1^‡Eåö_îîþ%?†?²Hd1‰FwqÕµz…QEUY/í"½ŽÍî#[™䈟™‡­Z¢Šàþ x‡Å>·›QÓ--fÓâ@\¹ù­x’ëÄ>‹Z¹HÍã¶ÔqÚ°~üAÕ|]¬j—úgÙcƒ”`¯Cï^“EQEQEQEQEQEQEQEQETÔØ&—vOüñoå_=ü'×›FÖµöŠÞK«‰¥Û¼yÎã^­¦üH¶›[FÕtë2úO¸’C}1[Þ&ñ5—…ôß¶^dî;cAÕ˜ôÉÞ|L½ÑZÖ}oÃïm§Ü¸TºŽuqÏL]'ˆ|O&‘áøõk-:]F&ŠÄØ!}k›Ð>'Üx‹L¹½°Ðn-þðÞ9>jÿ„¾ Éâ™dq¢ÝÚYƬZâlÜ?‡Þ«Iñ QÔoæ‹ÃZÔmmج×&ÅÈêÖ¶ü#ã+?A?”† ›wÙ4~e5ÐÜ<‘ÛÈñ'™"©*™ûÇÒ¼“RøÉ©èší¾›«xi­Líò±—$¯¨ëwþ5åý¨ÖtV²±»}°NdÉöÝéNñgÄèü+t±Ï¤Ü¼20Xî61>†¬øƒâE¿‡-a»»Òodµ‘ÌñUsÚ·´ýbø[ûJÝ!¸™Uº€Ex÷ÁÝ}ô«NÒ‹ùžíߡjñÉ'ŠõÿøšÏÄ)0€É­äáãoB+Ìäñ‘àî,>μáâ»üCÒ¼9©Åe©i×,dm‘Ë傌~µ±¬ø¦ÏC·µ2C,³\äÛ¹fãµQ±ñöyªÚéÄ— µa•0Ëõ®ã¾<ð‹Np‰>\ö •<×aqñCG°’Ý.­ï"¶™‚%Ô‘‘ük°ŸQ´¶Ó›P–e[eO0¹éŠãWâd.­y~úJžo|¸õÇ\WY·as£ÿjCpi³Ìßž1\ä=²Õt[Ëèìîc±ËÄ«…“·ÕÄü>bëÓC\žqךöª+ÅØÿ„?WÜ»‡Ù$ÈõùkÈþx¶×@ðA‰íîn¦iÙÌVÑ–*¾µë^ñV™â«9.4éùM²HÜa‘½¬­gÇÖºv¡5…•…Ö¥sÝ2[&íƒÞ­xGƺw‹í¤kMÑÍ "X$d>â¤ñŠáÑo-´è ’ïR¹ÉŠÞ>¤¤ú òŸŠZøÕ¯|9isi-ÊÞ©’91œg¯Ò½ÒÛ›XÜÊ¥¯ñýÜp|gðûÜ:E¼[ÙÛZî#ø•¢N+„º´óÎ –xY_¡5Ô_jºu„·×s,VÑ.÷‘ŽÉŸ‰ZtiÌöðéÒõâýÙÏOzì-îa»·IàIƒr²ô"¦®#Pø¡ ézºé—«uï/–¦HŠ«sŒçÒ¬7Ä}/`·y&Ž9ÛdWXØûêg¹†ÚÕîf‘R]ìäð­râ=Œ‘›¨tûÙtàØ7ŠŸ»úý+SWñnŸ¥è «/›s ƒ÷B.[Œö¯/økãûwÔu‹«»KÆ›P½ù|¨‹*Žƒ&½ÀÊ­y§ÇB?á\Oÿ]ãþucÃ~1·Ó¼§l°¼žÊÖÚ4–íäRŸ®+·¶Õ,î´µÔ¡Ñ£ó<ÀxÛŒ×&>#Á1k›=*ö}13ºð&ã®3]eŽ©g¨é‘ê6ó£[:ïžrñ&ÑÞylô«û­>Û%ìiòq×Ím\x¦É<4ÚíšK}n6ÈXÿú«™Òþ/躼3›K+é."`¢ÙcÌŒ~•·áé~(¹žÎšÚöõ–÷ µÅu5Ïø›ÅÚo…¢‡í†Gžá¶AK–‘½cé¿ ŸVƒMÔôË­2âàâ>0ÿUø¡âÄÒ4+ý(Z]¼×6ŽX£%#¹í\—Ã_éká=ïFº¼t åžäo¡=k¯Ñþ)hW¯yeogu–cL3E§¤|AÑum2úø;@–$¬ë/T>•›qñ>ÞÅ`º¾Ñï Ógp©vÀç¹ö®“RñžŠš˜†[«YG’›ŽÜg8ªþñ^™â«®4Èž8â}Œ¬›y¨.üol𵯛§Ù\j3[ Î`Æ#öÉï^_g~5_Ú&Öá‘|“…nùyÍ{ÕTÔu m*ÂkÛÉV+xWs¹ì+’O‰­ Þ>‘¨G¦¹ù/]@Cï늳âßÙiúdóe8ŠXPº¯ÅŽ•æ uý"Í ê3Þ5åÛ3mˆ²ž2kݬ¬mtëDµ³ ‚1…ªúÞßì;íÝ<–Ïå^ðwÄhZ^¡‹K«Ë©§9ŠÝ3µGs^ÓáßXø’Í®- +#’'áãoB*¾­âí7J¾fº¿+¸[[¦öÇ©ô©4¯éš²O令Öà™`‘péjÆÒügá;ß HÂj“2ÐísøÕÝg⇴QtíBæH‘ϽGsñÃv·qÛÉxÀ»ìó6€úné]Tr$±¬ˆÁ‘†AÅrúŸÄ L¿’ÈË,÷­X#gòÿÞÇJ5/ˆ~Òôè/g¾)ˆ µI5ÑÙ^C¨YCwnû¡•w#zŠ‹UÔàÑôÙ¯îwù1 ͱwðáñ"Â÷â˜Õ¦·º[K[sH"bíœrWµ{+ø—NƒÃë­ÜÈÐZ²oýàÃ}1X ñ*Åd‰î´ÛûK)ˆÝJ˜CžŸJéuMvÃHÑßT»˜-²®íÀõöçþ6ñ„z—5—L»µKˆÃ$Àaê×Âëøô¿„–7SG$Š…ÉX“s7Ì{Vß…¼i x‹R»³Ò¢t¸ˆn—0”É÷÷«ºï‹lô[Èl).õ Æc¶„e×Ò«èþ5µÔ5¦Þ[Ëa|áßÄ=Efêôm7YM2æÖú9ä“ËŒ´D9Ç&½ñ?Fðíá¶¿·½N@y'cèkoVñ=–“£Á¨Ê²H.1äă.äö†~&i°Ïmmyeyisq*Å2¦ ÏC]ÅQERîK¸ä¶°¤ˆò1c‰ê=jÝQEQEQEQEQERÕ³ý‘w€Iò›§Ò¼'àMªËâ½^åÆ^2TqîkWâ\'þׇ0 `¹ð.µÔ|Z‡A¼Ñ ¶Õ®%Ž3uºDyvô®?â)¾‡áU…µåº[@5Š2ÛŸ¾ ô ^ØÝøvÓCg-:Ù®õ#¤W”øsP¸ðg‰|Eáµ;Zs‹HÏ9fÿ?¥zG‰-ŸÃ? îbÓÐù©¯\ž¦¹o…QxŽ?¯öbéí;±ÎOÒ´üà-kÃÞ7¾Ö.ï-ŒW›™àˆô'žÿz•xOÅ[h®>.øe&ÉF ‘ôbkgãêˆ|d±ä2].ÓßÅsŸ^{…¾kœ—wŒ±îx=k´ø©ÿ vMÅr"Œ©?Z×ð+ªü.²qŒ 3íü5È|вk"ïrÄúŠ©á«é£ý õx-75´èÞhì¤ÿ?]»aý¢ tÉy-”¶NßÒŽª¬šË–7Š3ùÕ߈ÖZ¬‹¡^è.©ÚŽ ùh¸çõÊi>4¾ºñ®’þ*ÑÊö'Ûê¤n'±­Œ1-ï|/`Ç$à}s·ŠÙøÛk? Õ| ¦)bÚc+/â=åÕ·Á8 ¨bIH=±ÐÖæ˜ºüþƒK´Ð 0Ih§Á9^½+†×ôøWáÒÍu±ö>q\é^£áÛHOÂ[]ã:x$Áùk‘øŦë>é¹8•ì&Dº‡?Þiõ‰ãk'ÅœŸú ¯;ø¦Äž¹¼* Í3/ÐzQð˜ªxãÆ±«¿i °åªŸ‡ã·Òþ)jí¤ÜO©ÜÊXK?»?Þ4χ½·Å_-À†ož@åVϯãRxzõ¯¾>j¿h Í[c$ýÕâ“ãL6ëâ ͱ|æ¹]Ç<ãp⽚ßþ=¢ÿp*–¼CâŠê?•KâN«{Á½8£n£‰&|˜ÙéV6éð¾ÞÑh³€Ÿ–¸ß„·^Ö,î\Ë›ºBÌ3…*NÒŸðfk{/듨ò¡¼‘‹mÉÀ¯V¶¸ŽîÚ+ˆŽc‘C)ö5ç\¯Ã©PU®×Óm!¶øGHЍtÍØÇr•ä:.³¨§ÀýRò[¯%$ç„=qú×¥xZmq¾ØYÁ£G$rÚ…€×Èj:wˆ<ð{U´¹•PµÏȱ¾ã1Ýë¬ðDÚšø ÎÎÓDómä·À—ÎQ¸‘É5/Ãë>Òõ[ `ƹ’$»h9¬/ƒÇ^ñ5ò*—M8åy=*- ‡öˆÕQ3·ÈcǯËÖ½ª¼‹â它>³£¾¥{t·¨Û`¶¶\³’}ëâEÍÝÆ§á/µ[ @·1”BÙ“^ õ¯FñŒÖ×ß5££4Vný†ÛÐÖoÁ¸£ÿ…o§ ±-’~µÇxOügñ ’¨uŒ¶1Œ.EtÞ+ð†|?àÍZ7™¬ ¾“t²d±-œ€+”ÖZy~Ko´‚Æ5_*âå¿y'Í×ojï<wj~iöO"´íd\DÇ’¸¬¿MŸ‚õ»‹XDrDò6:óƒY¿d’êÓY¼¸“ÍžkîǯJ΀ۯí(RÇî˜19;kÜ«Ç~>jw–úF™§ÂJÛ]Oûâ;ã ÿ>•×k6–íð¢xXm‰l20?Ùâ¹/‡7rÞ|½ûagòRDV#<{UÏ!$ðTùT,·oŽ9½V¨kc:÷òÁÿ•yGÀ Hÿ±µK–U2=ÁB}…VðÖ¥%Ç~ÒÙ\C*–‘O@p*‡ZÕýÏŠ|Iª6}Bé§Ùò”POšÛ±ÑüI/Ũõßì™,ô¹£òç @íÜz­qk þж¥Q¾Î\íÇ‹d¸oB–ì.á×šÒø¯¥[Y|$Û j¦ØÅ°Îr+¨ð¤·2ü3°tr×&Ë*Ùä¶+’ø5f£ëw’zײ,æN¸Àõ®kÁþµñ–µâk;µ‘tÈî6ÂÈq·æ' úW¹ézt:N—m§ÛçÉ·Ag®ZeW]®¡‡¡ãHn>9xŒÔÆ`1RøÏ¬›û½ ÂÁÄ–oq†v‡`ÀmþuÒx¶Ï_ñ‚[H¶ðûBÅËo4|¸®#âÆ«§èžе"É’¾|däc?νGâ´|0½«òÚ†SïŠO„Šᮘ¹ …`qõ®CዃñGÅH# ûæŸñÃ7Å–}à¿Ä7ÖŠÀOãïn_˜È¿5­ŸŽ¨«àëlsxŠN9©¼ma¨Ïám}ÓíÖŽ²Å ÿ ~uÈßøÖkícJ‡Å¾–Î[{¤hçQÓµïK*4hû€WÁ\÷ÍIEQEQEQEQEQEQEÏø¢ã\ŽÈE¢iñ]¼ «ù²m pðGŒ<#©\ÜyzkEtÙtóWô«:ÿ|W¯xªË\k:-0~fóWüwðöóÅúU”Âá#Õ­yþígk¼IâŸ%®¯{n·0cÈHÉŸV®‡ÀþÕôieºÖeç1¬Q¬=ЇWð;^üGÓµøÐy1)óyêÝêkµ½´†þÎ[YÔ4r©Vf¼ËLð‹¼=Ô>’ÎçN™Ë¤w CFÂºÏ èz½Ìº®¹v&Ô&]¾\CĽp+©¯ø­o-çŽÞÞcÆ%Øãø[,Eu—ƒüEãai¯!±³pÍåòfÇN;VçŽüþ$ðœZUŒ‰ ÛÑdqÅrZ¿„|oâ? /P6±,q¡$ÈGr{WQàÍÄg‚¤Ò58àó#ˆÇ–ÙÏó\÷…<5âC2ZØ& / ’EIòßëÜVσ|{£_jÞ"¾HŸZ¿,Ëï•eÍfø¶_ˆÅRg«í!HUšƒâ7…¼[âë»Hí­­’ÞÎQ"3Hrä{cëWµoø³T»Ð®‘b¶¹±…¼Â¯ò±ì¿Os§xÄ÷6vz®‘¤J²Ip$Ü_iÈljãß ø·\ñ~{c¥ÄÖšk†Œ™Gï?­ø÷Iñ‡Œ<.šd:D0Uß3s‘ÛüúV·†µ|=ÿ„o[²ûðÀ±¤»ƒøªš$þ=д¸ôC¡Çw䯕ßœª»GsÞ·.<>³àÛ­+Y¸3Ý\eËöFíjƱÓÇpåÚãÌÉ_±|m¥ø«Oø§§jPê­îî’8!»Üôë^ì»¶.nkšñÜ:Åç†.¬4[Dž{¨Ú&/ PŠG_zâ¾èž4ð‡eÓ[J¶rY¤BÓ`äö©þø[ÄZ‰u˽VÒ8¡Ô‰pVMÛNO­føkÂ^,ðoŠuy¬tèn­ï¥,³´¸Ø3Þ²›Á¾/°ñÖ§$ˆðêªî3òÇÈ$óî vZ·‚õ-/Åþ&СK‹¿(G< ûwôç5Ïø×Á^2ñ-þ›¬4æê 7­ªÉòÄÈ»“^¯¡I©K¤BÚ´ æ0è+BBË”]Ì zšñÝ[Ã>/Õ¾'YxŒiqÃolV2†o¼ žj÷Äÿ ø¯Åëoie§@¶ö³ D¦q—ã¦?ZÞ!ðmÏŒümk²Õ-pÑÛ‚²ûÕ{ wÇVúwödži.ã_-nÌÊ#Ç÷zê¼% ?‡´Qo<Æ{¹¦¸ô.Üœ·ëÈ|uáïøÅ:]ý¶”‰™?˜™œfP?†qVþ iÞ+ñ†âÓmôE†BÂFvœ|¤v­öðÌÚÿØôMRßì×"ÜGÛ¶°s\ôw¾/Óü3ÿÄ“ÜÇÙ–ïpíÆ7WWàÿE០$ÓJŒg“Õ˜s\…áhºn¥áh´Ôûåö™>UŒõã×ìvÉgg²}Ø üq¿¼9}⟠Á¦XÆYžå ‘ü Ý«!‡‹áð©ð²è¥äò~ηǖ#Æ7}}«fÇáå·ÃÇðÃ0&XÎùqüg½bèSøÓÂÚbhØbøB6[\¤€.ÞÛ½+fÓÁ—Z…5+~èÍw©7™)+þ=…`øzOø6Äè_Ø?ÚPBvÛ\¤¡F=ë¤ÓtÍvÓGÔu bŽmjüî0—Ú‘Œ`.~•Ìx Ã1ð΢gµ²š;Çi‰YyVôÅV°ðÇ,<qâ§°³v¸_-áIþêñ“œs^À¤”†9åŸ<­jž.Ó¼I¢˜fšÕ”ù6ÑÁõªž)ð—‹õæ°Öf†ÔÝÚJ¬–Q“€;ýE\Ôt?Éá ½: ;wºÔ÷µÁix<÷«Ÿtøcï¥_éð~åKBë0;ϧµ`xKÃ~4Ð|g¨ëw:d%óè“}ÑžßJì~&øNïÆû ¤.#‘fU'†#µr7Þñ§ˆü4;øm¬£¶ˆyJ“3/Lã¥Xðo†üU§Ã-ΡaKˆ³¶‹Ìê;“Z ¼;¯è·šf±kÙ§f“Ì»“Ú©é^ñõ{ë}K[Ë×ó„Gñ®tx7ƺ?Ä3â{k(ïd+ó|àXr+Ûìdžk(dºˆE; 2FvŸJåþ"x8xÇ@û4lêó!cÓp®FK¿k~ÿ„hèR[Êëä=Û°„èZºK_xÀ1hZœw.c1ɹöõ·ç\ÿÂížÙwº\b–_2I×5ëUCZI%Ñ/RÝ#@áG©Åy,üGðúÆHæÑ¦¼Šøù¡`ëžÆºox>î×\Õâª[x{Sñ·Ž,üC­iïag§ÿ¨‚B7;{â§ø›à½[\Ôô_FŽ9®,>K6Üc\¿4ø»G¶yô“·•BZ+[ý¶5±¯i>+Õ4Ï ý’ÉíoíOïrrhã?Z±®xªÊëÃÆÞBëæÞ ŒH¨þ.i~)¸°Ó Ðéà@ÖØüÙŒ×mà[MVËÁöëLÍ~2o9aŸ_zè袊(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽY<¨^M¥¶©;GS_>ø»PÔõ‰v¹‡uE‚ÌmmП›äW¹è:«k:LW¯k-±ùg(Á§EQEQEQE‡;Håôß 4zóëZµßÛïW+nJáaSýÑëï]MQEQEQEQEQEQEQEQEQEQEQEQEQEQEÆ|O:Ðð]ÁÐĆãzù‚/¿å÷ÅdxoQð*èöéqŒ7Aœ.#÷wÎyÍfê:n—âixrÔ"YÉæÝ]ÅÔ㢃Ü×®QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEF}L¹}óX[ÈÙÎZ0jÌ6ÐÛ&È"H×Ñ-QEQEQEQEQEQEQEQEQEQEWâßx§J¾†=ÃßÚóÊ_…qwÿu +WM*÷Ã-ë¾Y—¹é]Λ­xªú–oCl6nZãqjæ#×­ü3 Ýj×jïºî*ƒ%½«/Àþ8´ñÆ™%å¬A徯Gõ®ªŠ(¬oø†ßÂúÆ­uÉ8©$àUxÎÛÆúD—ö°IŽM…_šê(¢Ša‘‚—PÍÐÉ®+Ç×Á.¦}*âx'C…Ï¥tú¨ºÖ‡g©¬f5ºˆHö®Í*Á“?ÝK ®Á?¬|i¬^iöö²Âðe”·ñ(8Íw´QEQEQEQEQE”Šêã*Á‡±§QEQEQEPÕõÓ4¹®ÒÚK†ŒdEùš¸Ï |Q‡ÄÞ#miW6²ª³1—c~µèUÅ|Añü~¶´‘ìšå®h¶€ZétMQ5­ÏRHÌks#u­ (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šù§âQÝñºÍv¯ $ôù}±ˆ#býÑßÚ¼‹ã¾eÓôÓ#!R»ºæ½7ÃÅ`ðµ?u-Ôœjçì¼GàKÅqÅ€ëm–„«þu¹­ø¯Iðû"ßÎÁߢF…Ûò›ãV»ŠÖÊñešE,ãßÒ·ë+Äk»Ãz‚ã9†? óO€‰³AÔ3÷¾ÒÀ×y¬øßGÑn>Í$¯=ÀhàRåG¾:U«?iWºDºœW ÛD3')õ³m>$xZúìZÚêK,Ç¢ É4ø>"xbæðYéÆ÷%öyCïf®k~-Ò4 VÛƒç¸ùaK9üK£x—Kׄ‚Æà4‘ýøÛ†_¨­ŠkºÆ…Ý‚¨ä“\ܾ=ðìW†Øß«8m…”eA÷5¡©xƒJÓôôº¹¼‰ ŸåÙ¸c^'àK®|QiâȽºe]î2ËÏø×²xSÃg…t¯²iJD.w’OÞ­‹  ¤À€FÆàý+Ã>júfsâ)¯®V0×LŠdœ½—Jñ—­Z½Å…ÚM ¶Ó÷~µaãß êWRÛ[jq4±\0_ÒüI£ëNé§jÜ4x#gmTºñ·‡lïþÅ6§œ0!O¡5«s©ÙZX›éîcK`3æç嬻_øvóÍ6úµ¼‹ï‘•²{úSÿá)ðíÝ´¤j¶’D÷˜|à{Ö…,ükuw/†ÚÍ¥q¾s {úw®3Äž7Ò/~%iV&ýRÊÑd7._O§¡¯DoèZn…¡öÈbÓ˜‘ƒò“ÏOÖªZ|AðÅó:ÛêÐ9K·=u4¶^>ð¾£z––šÅ¼·,jÙ&ºjÆñ Þ‚–-e¯\[%½ÂRvÀqPøVÛöškÇáϳ›Pÿ1„änúÔâÝoÞÈêvþz}å ¿Zѱ¿µÔ­…ÅœË4$•½2*Õâ+l ž¿=ª[\ü».(z‡Ã áÛ-½·ö|d–h[*~i,ükáËùdŽßU·g%†ücwNñ«9M?R¶¹aÔE jÓ¨®."µ·yç$QÌÌx¼‚çÇÚ6¡ñfÖdÔ•4ëfV”¿ÈîOAZ?¯-õ…Ò]Û8’&•õÑøS[ÒôßèpÝßÁ †Ò<|gŠén/l£°k™çˆZ•æBß. `xf?¦£vþku7Ï?ÙÎIÿëu­+ïhÚmêÙÝ_Ãíü¹Z·cªØêRL–w)1…¶É°ýÓWj)çŠÚžy8ngc€s¶Þ?ðÝÕïÙbÔ¹m¡¶Œ}›¥ljZņ‘iö›ë„Š.ÙêßJÌÒüm kdµ¾ã´R ¬Zz®¯c¢Y5Þ¡p°À2yÉô½gYxÏBÔ<¡òï‘ÄjŒ0ž•§©j¶:E£]_ÜÇoþ)Ÿ£øÃCפ1Ø_$’à<7å[´R =5Íø`Þ­Ÿö´{?–žwzUØ|W¡Üja‹R·{îê})×^(Ðì®Å¥Î©mÁÿ–lü֢ȑX# ö®Pñχ´Ë†‚ãPO1~øA»o×Ò¶­oío-ê ÑáaàñYPøÇ@žæ[tÔ¡ócÈ`OLuªþ$ñn“£ørkù/£ $DÁƒ“'o–¹Ï…:í‹øjÖÖãQ‰µ ‡y &çÆsýkÒk[ñN‘áÖ‰uKµ·2 ¦áÖ³ÇÄO ›¶R/#~À{“ô­kMK½ÓR†ò3j£-!<(÷ªÖ¾/ðýëL-õ[i+¹Ø8Š¿§êÚ~«Kaw Â)Ã4mœV}ÇŒ|?muöiu[q.víßÐÖ•Æ¥eibogºŠ;`2efùjŒ^+ÐgŠI!ÕmdHÆç*ùÚ=h´ñVƒp`´Õm¦” ”GÉ¡ã/é’ˆ®µ8Cü²kVÎúÓQ·ó­&I¢-Ú,Öæì‹Ü‘“óf½âÛÀú*ÛÅòÜ“´d‹©9ÿÇ«Ì~4iö®•²2RY‰5ì%¼1§n`^+É5 u‡öÓÌQ¢«F2ö<Õï꺧…¼vÚÅ®œuG„#¢ ÆáÏð׺ª„UU 0C|Bé÷$ô7ò¯ø¥[ÝjšõìÑ+2ÎQA9íùÓ´;÷Ñ~>ê4cw§i]Ûsœ~SþÁ·»ý¡nl¡bµ†‘`0Ç5wÆ:$ÿ ìµÝ~Òç/©0ŠA´CïV¼/} Aðém.­.¥½º„¼öW2Cßv+GáA½Õ<%¨hú½œÊ±3,BuÁ+Øs\ßÃÙ,ü-¯x£ÃºŒQl‹2Ǹ‘è={q^àï Øéþs=”&[ÀÒÊ ƒ×$¸_ƒÆž/ñRlHJcN[úRcé·?¦³šÂ€[îhÙ\žõë¿Ùú]Æ™.o±·L~R(Ú‡«Âþùø‰­øoPŠ-“™cáŠô/x MÓf½Õe¶…î&ºw‰‚ð‰Ÿ—o¥z5sþ2Ólµ ê?k¶Iv[¹RW‘ÇjóÏñ¹øqª-»‘)ž@­èv×+kã›IŸ@ñ.‰p“aö¤L’IûÙõ÷¯UøS-«øÚ;K1_~ý#âgÍ•®áQCñűäqÌQtnnåT.-ѼSâÍ®tÙ4BÞ|âDÚ$éI⦫ñžÛI¿ŠI´Ý?æXK‡m¹É­Gñ*yañF‘}áí>åf·oßyp2îïÅ{³™-!vÈfE'=zTÔ„0FExÅÝØøûÃðX¶Ò]8ÑŒó~µ«ñ‡DµÐ<)¥ßé±­½Å´êÔaÉõ&µ|Gá«þÜ]Ën’ßý˜ÎÓ‘ó™ÎsÖ¡ÑgÙлÉÀ‘ÿ v‡ÿñÐ5Ík+ÄŒÅö„£zæ»=vÇJ“à²]²ÅvöÖ€E69_§¥iü1дK é¼¶v±j'° Å¥zEaø§N²¼Ð¯^îÖ9š8ieÉv¯*ø Z^iwÚ…ä (K†Žq¾¼S<|–¿µÿ 4a´ë¦b!?tY¾ð´w_u:5`ç‘Ýè Ã?¥jjº÷Âÿ ø‚ö+Ì›éBÛì8òÔŸç]_…|1dÿ aj’Ouiç»°Ë3²äœúÖÁûÃâojº­þ‘»ìQ'Í…íùVO€ÓO𿊼I j6ñ˜”4‘³Œå=+«ÐôM/¾¼ñX'Úfî•Sʯҩ|±‹XÐou‹øÒyîg`Y×$ ©à]Zm3â¶±áÕcöMåâŒt_ZÈ:­ŽñwÄ7׊Ôþ쌙ʺ¿†š†u¸fñ$v°Ëw<ÅŠâEúÓþ9ØÂþi–¤©‡ÛÈé]™¦Ûj? lí.ãY"6@ݰµæß|9g|5™®âKˆb¸hÑn{á´mañ[ÄZ}©ÅŠ–">Ê~•?L×ÿ|9¦]Œé»„»OÝf½Qø·Øø§A·±ŒD/$M\y‹‘Á•Ýø+áý¯„oo’W½!¶…Œz+¶¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šâ|cñ ÞÇgý›wy3®ïܦBׇx’ãYñ7Žb×í¼=û½¤ªÄÍÀ¯tÓ‚þðeÍÕå´Ó^^³3Ãî<ô®wá-õëMCG¾‹ûBëtla8SÚ½Þªê+#i·+ov‰‚¯¯âþ{ÿ‡Šëö¤WŽd⌶=Ž:Uÿ è—Z§ŒõO^ÚÜDˆÙmäB$u®=N+KÔuK_‹7ž(¼Ñ51a0òÔùž€tü+Ô|sáÏøN<%¤Ë–EÅæ/!º€}+•ð¿­ü5 ÛèºÞ›sõšùc÷ ÂB8Ê+®ðWö•Ü7Z®¢’Cö§Ì08ÁDíÇc^ãOË{ñƒH»¶ŠO³\ᮊƒ‚±úñ^µ¬_¦¤IqäK*¢íÄ»›§¥xçÂg½Ó|c«=þ—{n5wBÒ@Ê:÷'ëZÄWÞøÅ?ˆ&±º¸²žÜ*41—ù¿»Åzƒm'‹Lžòæ&†kéÚá¢'îç§é^_ñoÂs\xãE¿°Ì2]ºÀøf½«N´u½¢äˆc3V«•ñÖ³áû»FŠâ[‹˜bH¢fÉǵyçÂǾÒüªè÷:uä7dI4dÆGQÇ>¹­]'THôlüi JóÂÊЮ5«àÍ2ãÃÞÖo­midžÒÐŒ^Ãõð×â‰5ÏÜiZõ±ˆ²E1”ÚÅ{q¿õøô½çO·SÜß[È‘!gÆ9ÇJä¾ß> K¢ÞÙ]As´äÉQ©¬ÿÜÞÅñ‹TפÒõÓ®ÿw¦ÇNµCÅ·w—Å3ZM½þϲÛÉä7$Ò½ÖÂí/ìaºEuYW 8Áf¼IŽ¡á/‹ú¶­q¦]Oo{!x#/¸ñǵKãIµwø.™.Ÿ{y©Þ¿œUbg.ì…ÈVí–¿³á´Zcé×ë}ö/³y_glïÛŠ£ðškøFæÂóN¼Žê)RžQù³Ó¦²~BÃÇ:ýÅî•{j2‰Þ }îIükOÃÚ¬ú|WƒÄšTÒØ}¦F·™¢Þv縫¾Ñ|q«ëvXéRÆ#‰ ©m¦½>¼³âÏ‚®u‰luý= ·V¤Â2(9À©dø….¹¦ÿdèúeúj’gˆªÂ¼XúV<;¬Ùø£Ã×Ï Ö¥¦Ù ùÎïïÜÔ>9M_YÕô}4{´Óìæ`L€z:VÓYø Å¥êVÖ’´¯s-̰È1¶3÷Túv«:ô0øµì­âЧƒRY‘Þg‹o•´‚~nõ›â¯]økâ §Œ--žâÕ“Ë»H—s/{ëoPñ›xš¬<1or×r°ß<°X¹;»ûTÅqxjÔøvYâÿƒ`๭_…ú½þ·àKÝI™î²—n¯ƒŒ×g^ã‹ë­_Ǻ5ýž‘~Ðé³bV0žyíSüYÔï|OáëM?OÑïÞO1e|B~QïZ~$ñŸá˜Ó Òµ»¸µò‘ݲ§ù½*/éí¯|1¸ðüÛ\¤LÉ\xúÑáÏÇà Â;¨Ù]=ý»2F‘D[ÎÏB¤U?økQÑüâoÜ[K¡©,’Egzg;F=y«°_ÙKáÈíü[áÙZüÄ8—ÜqÇÌ?ÏZ†õ¾ êQÚÉçϺXm†w"îÈZÏðíôÞ"Ò|9áË[Kˆæ°ž9¯XÊ„ Î=ɯl¬íu¶h7ÌN…‰ü«Æ~ø‘t?ÞØe6rÝ7•$H[ ;+[ÁÞ¹Oë><Ô ’+Y6Ñ”;Êÿ{oQÒ¹ÿ xšm+âv««^é÷©ey„‰„ ÏL}+Õ<áæñwƒ.,á\ÌÊ$ˆZä4ψV:/‚cÑnâž-ZÖßìÂÌ?ZÓø=á+¯èÝß§—w'šÉŽU{X¿RdwÚ*Jc"±¨$âŸE5‘[”zŠPŒíKEFÐÄçsFŒ}JÓÀ`p) )`ÛFáÐãšuŒªßxõ¯+ø«ñXð~¯¤Ûi±Fa˜n™ÜuçsÚ¦j‡Æÿín`ùôý.,³ºeaØûW©ÑM(­÷”¨ *ƒ=)J«uýEeø‡T—GÑ¥»·³’îa…Hc$šÂð–x5 k[F§z£§Ý1Âýk²¦²+}åê)h§*ЍúFUa†ýh€0)i¨¥¢Š)¬ªÃ ¡‡¡ Ò–’š±F§*Ѝú(¢€FȦ¤hŸq~ƒÉx»G×|Eu—i:Zhî¿ér¿ þê×M§X[évÙZ HaP¨*Õ4('­:ŠhU Ôâša‰›&4-êV¤¦•VûÊÔRâš#Ebʪ ê@§×9ãM^ÃMðÕúÝÝEÉná˜ÇçŸ/,ÿỵšh|ö¹%#r7c…{&ÕÛ·˜¦x[¢CU'J¬­^Q+[Dd ÍN!U$ ‘ÐâPMkoq:äÇ÷”•UQB¨€S©ÏZ`  0FG½BŒ(z FÎÓ·®8¯Ñ…޽â­UV<õëZ"Ò¾A ÝÆ‘Ùù’!òÖ¾ÍÛ÷®§áÕÝ‚4ø/C,Ásµº…ì+¨«÷T §QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEªèzf· Å©YCrŠw(‘sƒRiÚU†“oäiö‘[E×lKWh¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢²µohúã#jz|%ȹÅRÓü á½*ý/¬t˜ ¸Œå]1]QEQEQEV^©áÝ'YæþÆ)›³2óQÃá] ÞXæ‹K¶YcGÙÈ­|b–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÄ“Åš<^"]®‡öƒ.ï/ƶ袊(¢Š+ Ô”l8g*vþtÑñ7Â$áux·mÂk¬‰ÖX’Eû®¡‡ÒŸEQEÉˉ܂B‚p&©éº­¶©½¹l¡Ã+ Vnµ–æáÂCîv=…aéž9ð-…†£×-œ"×EEQEG4ÑÁË+„Y› ‡eãOj7ÂÎ×R†IÉÀPzŸjè)’ÊÄòÈÁQXžÂ¹Wø—á8ÎVˆs¥|Jð¥É>N¨Ž»TšÖÓ³øY¥ÙxîO‹Éši%iDñ–ë^‚H$à{ÓRDeXîœ×5ãý"ÏUðÿÚ I 13ÆHåN;W û>C·Âw’p?Ò â½†¸OøÂóKñ¾‡¡Ùùl·{šn2@ÿ9®îŠŽhc¸á™â‘J²0È ×êº=–—ñûL†Ò%Mˆ8Ï<ãð¯~WGÎÖ CN¦‡BÅC)aÔÍ:Š)"G÷ÝWêqNÈÆr1ëMYcc…u'Ð}3Í8¹éŒÒ‡BÛC}3N¢Šhu'>™¬OëGÃÞÔ54xÖh!f‹Ìì?:±á»ÛKÃzuíØQqqn’H $f´žD@7º®}N)Àädtª×Ö¶—Ö­m{rÀÿy$èkÃ<+§[Ù~Ðwð[B±AlÑ¢â½öŠ+ˆøâIôVÑí,n’;»ËµB™ùŒ}Ïò«þ4Ò쵟ß-ÌQÊRer3µ±Ö¹/€±„ð4¤Ãf½VšÌ¨2Ì÷4++®T‚=A§QH@#dWñ DÓÏ5sŒÄ,àªÏ­s?t»FðKÍ5¤O1¸a½ÐEzØFR+«ýÖ ô4ê)¬Ê‹–`£ÔšE‘w+) Ó³šZ*¼pZÚÉ#¢GJräq¸Ô’ÅÄ-¨¯Œ2‘Ex¦‘§ZX~ÑWPÛB"‰m·*¨Àh¯nfUûÄ­-RŠdŠóŒúÕÕ–‘§i¶ÒÅýʤ„w\ôªúÂë­CÅz6«kuµ•œQþéFGñ^‘ªi Ö÷Ó7Αðf½ÚÎfšÂ ¤Y£RÙìqR¤‰'ÜulzÐòÇ7º¯ûÇ …éÝÓžµâÿô»8õß\ÅmM-ÎÐ`·#­z/‰ü)oã Ǧ\Êð¡UmÉÔqVü+á»_ ø~ "ÍÝ∓¹ÎI'­k´±¡ÃHª} SÉ 2N©¤!ÎN9ëB²°Ê°#Ú…uoºÀý /Jˆ]Û4žX¸ˆÉýÐã5!u^¬ÔÐH0 ô9¥$(É8¦¼ÆóÅ÷2üe³ÑíoGØ#¶Ýp»†Üóßò¯LŽXæ@ñººžŒ§"ŸEQEQEQEQEQEQEQEW1ãíq4 ]Ü3my•ùx§Ä´{¯iM¥OçÜÚ}óåžý{W­ü+Õÿµ¼hZ@òÂ<·ù³ŠÊø½¨K§Ûi?˜4†¹ÅîÂA+Ž:W4:6¡«èx_U· ×6†àöþ-¦½öŠñ¯ÞioâK}Bî¤+EìÇÐtªIámNóáºø’çX¾MF+o6!»T(ïWµ¤x[K¸6ój[LÓ§TCýß~µ•ã…—áÜz~±¥ê÷3‘"¥ÄRÌ\0õ¯ZðþªºÞ‡k¨ À™b´ë'ĺÜ>ðõæ«?Ü·Œ¶=Ojò¯ZÉãí&ë_×u©â‘äak 3ì㦭iü/ñ5κ5Ÿ êW-4¶NÑ$ÀòÉ’3\·‰´ûÿøÿOšïTÔdðôïÉ3‘´úéší¼á ©o¥ÕîõME¬ÜŸ²ÛK3åž„û×ãÛ ÿ |EÑ-4Bù¢½evŽIËÛ°EmüD²ŸÁ–ž&Óõ Á4·(.#yIFœc ­oøþh´=ÛH¸H¯u’€JÜùjzš£â›9¼¡Å®éúåÝÌÑÊŸhŽy÷¬€žpÝ?JÖñŸÄoìÿi·`Íþ­„·ÝüûÍøf¹Á7€¼5eªÃ{©\ê×»¤yÙ—q9^˜¥ø­ö­_á¶—ª]ÜK J±î·è¥¨®ãÂÚ,¾ÑdÔ/u‹›Ëqh¬c‘+˜ðÄrüE¶¿ÖµVH­Ã-¥¼Rù~XÍ]øâéRçÄN¥wç&’KG3Ÿ™ãäÔ> I~ ¾£­jw!cªG!UGCÞ±!Ò¾Øj—š•Ý®©l¡dHäá¹ã>õ§­jÄ7ÕäWÑZù°Çü Ÿ›ûÄ×OàÞø‡áìzµÂy—в)Çñ²æ¸ ¥ÏŒôýjû^šúÎúa´ÅØ*ûWSðkÄ:†¹á˨õLÒÚÎѬŒyeµ‡b¥¿hëìäâß#âmsN¸øs¤ø‡T¸Óí ‰Z×ËrØ÷5«àãyÿ ¥è}A¯¬² YwçŽû½O½z=ä¯ÞøïâMLJ »ž×I±Í6Ö•õô©ïõ§øãÝ7J˦ê)ŒLÙØÙìJæ¾)ø~M6óO»¹Ö¯.>×sˆQÛˆIþïêÞðíÖ‡k+]j÷Z‹\e3œìè+§¢¸ßŠNáÖ¬HyXçµpŸ gñ<ÞDÑFž"I]s995ÐÛü4¾Õ¼I»â½M/%„æ+h—ŸãP|JÔµˆuýHµ‚s¦\8YÚ*qÓ«N¾ ø‡¡Á¤ßÌÖ×Î#šÙå.õæºO‹ú¹ð­Þ± ÕÄ76±‚¡$*¸Ïzá4í?Åš×Ã;U°º»’ù]R$GÚª€òO­iüY7{<·yóÄËæÿ½‘]¯Ä»9À“_[Þ\ÛMiô09\œµ‚õE>Ç~K«åÝw³ÕÃØ[Í®xûZÔîîìµX f™”¹è§·Û|=¾ºñ·ÃU]FyRgÝKÚüw¯:ð®­ÞüJÕ(xÆãBðͤvLïR*ˆíüŽMs^ д}Á?Ú¶:‹vÝVC0¸%»ñšwНGŠþÇâˆï.-om¢t.Ë“œã¶i<1¡j:çÂñ©Þj·«s И¨]¹äúÖïÃ]BóÆŸ®-µ+‰•ÑÌz?×5æÚW‚¬¯¾,êz ¹»X#Œâe“çÏOç_@øwE¶ðþ‹›i+Ë9Ý·Z´QEQEQEQEQEQEQEQYú¶±c¡Ø=î£p ·^®kÈ|CãýÄ~;Ѭ£»GÓ`s$’¿ » ô]xvûÃ7–íwd©4%Q÷ž;ñÿ‚Þ/²ð楨éÈŠÞV-÷r=ýë¾ø‡â»åѪê]Ó¸#]à€ÍøWâï xNÖ mkÂ×Κ¤³¯•œ’}:×½i"a¤Ú‹ŒùÞZïÏ­]¯)øñ û#J¢i¥R#Ä:Rü0ýº%Øùaw ÙÇ¥Vø=¬éÖ¿ÙeºŠ7ˆ°`̓žk'à–¡ø‹Ä…æRòÊYqýÐIÍH—ÖûCIp'¢6ÁCƒ‘ž8­¬zÏmçÓšÔ4Važ]¡wüúÕËÝxÏÅz^«¨Ïom€ÏÙĪÆF㓃]·Š%ŠßÂwìd‚³íÅyÿÁ »cà{¡5ÄaÚggXß nm¡ø™â]Ò¦$”„bqžOJ}Ìéífü¨c·Îç8Žßw^Ö.µ›ívV¹k‹îÌvìNGq]½àþ$½´5•Ë0X¢I…BÁ±“Wþ4‘¯_èZ%‰ón}í°çjúšÃñÞ†tOˆžÔ/Ã6"GŒN`c¯nµÝxžËÀ–z+Ü]A Æá˜¡2,Ý€ç­uÞËð½ˆûÙ‚€ˆø¥n×)ñH—\ð&§c†•ãÜ ÷ÁÏô¯6øIcá› µ–­bú[zÊÜþUÔøN]ßÅúœš&ooaa&½^?÷sÒ³¼]ueñ-5 Æò$ŠÁ|Å”·ß”ÐU¿„>3:¶’ÚF¥r£d|­®@,µ‰ñjxí¾%øRâFâ›þÜš½ñ²î_ÁV¶dO=ÝÂQs\5q£Yø2{øŒ–VacºÁûµßjš‚SÃϨÝ[¤Öå7„iØî=¸Ípß´‰—Gð¦»efööÖ¬°mÿR„ƒøt¯KÖüMáØ|&——rZÜ'’X†,Øàëšáþ*ÜÝßü.Ñî¯-<‰¤¸Ú5êǽtºôºå¢hV™–m1¼ì`€qò×+ðšËCFºÒuˆcRµÃ,¤©Á=k¬O‡¯×]´Ð­cóšÕ£’h±·qþã“øÖÁB 'BÔì5ÞâÚsæ,‡nÜ ÃðŸˆ-îþ8jw÷äÃ*‰œí ӻωSÀ±ÙªY›™.sœµÖø{X_ÐlõH—j\Æ/¥iׇüF¹h>3øm¦";dE;ÛÔäæ»MCÅÐêz/‰yBÊÖ&Ž+€ÜHØä~‡ð>úÒ–xÑĬ͸ãŒõ¬¿†7v÷|Xëpe™‚ÃO"©x/C±Ð<­é^ †-³;InóteÉ<]V¥iáˆ|I¥ÚèÚ}µÖ¤Ó+3'&4îÄö¯O¢¼—ã¶·u¥i‰¥»¤M1YY_o'¦j¦§q&ƒðQ´BýnuI¢1ª£nfÝÑ}ë©øE¤Ýèþ´†ñ6LåŸa* Î qÞ%ÓgÐ~6Ùk“1K;Ì7w qŒÒ®üf¸MOÑô].D¸¹¹»lëQü[Ónl¼  RñØÏŽ*oо#±—á‚ÛÛβË:Gû¸Ûq޾•§áZÑ~ Ä^ê ñÙìo›¡ÛÒ¨|½·>¹·3'ž×nû3Ésã…ÄÀS@Ó¢ÌdB±–å¹ô«wÖ|1µÄ`ÿglÆîûká•üºÁkË»`Zx®«Ôç'²<e{á-[[×nMö¤Ìë»¶JñÀ ëÍg|-ñ#iV+i‚;‹­P‰#î#Ú3ü«kKÔì_öƒÔná<¶…T>î Àâ´5;-Ƶ}[ƒwÙ‚´W ÆÕÀãuTÐ|4<'ñ7O´Ñõ®lgRÒ¨9TÖ½®Œ‚=kż`|5ñZ‚ðˆÖéàfãw9¨þ"Z?Šþ)èZvœË/Ù€yÝ~aÝž*>:ÜEŸÛ,±³Eqó.~ízþ‘woy¦@öó$ª±ª’œUúBB‚IÀMyÏÅ]oJ¸ø}©Á¥nÒDNzVÀkO³ðTÖ÷7QC"Ü3aÛ•ìQȒƲFÁ‘†C†¼[â.»usñ+JÐn¥km!¦líz‚}8¬O^éGâO‡‡—ö;y<û¾Cƒýêé|gâW½øW¬½ÔêÍ<…m‡w@Øük¥øGiqà:ÞÑ¥ô‘\gÆRÝüMá›hgF’œÈÎÞGZì¾#êv§á•ö˘ØÍÄÃ}ã\燵ùtï†M5Äš…½¹ÌiÉOsXšCØKðÊ[»‹¯¶k7ÈÃc¶YIöíŽ+_á.°,ô}/I¶ž7 Ó=ÀÇ*ý*—€5;~.ø–w¹c“åF-Áæªë·Örü|Ó¦K˜š»Y÷ «ÃU¿ú•å߇¡†ê9;ÎçoNµwâÎ.µáíX°æ¾jÇÈÛÆkzÖóÀmáØï.¡ÓÛ÷267gÓ•ã«oøS—qǽž7Aw&î8õ5{Õ”” ˜Ð­“ €s¶³þ]F<)sÏšnX¬{¹Å`èZŦ‹ñÄwš¬¢ß1¸‰ß€~•è? n.o¼?w?™²æòI"ÞyÙž? Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¨êšM–µbÖwð¬Ð1©¬¸¼ áhbT] Ä…èZMNÞðóª#èö¬ˆ>U)? OøCü9´¨Ñl€>в4 $ÓàÛ"%ÙÂç®UƒÁþ¶ÔMü:Uº\õóò+vŠËÔü;£ëRG&¥§[Ý<pʹÅUÿ„3Ã~W”t[3wm1ñšrx?ñBñG£Y¢7Þ ©¬|3¢i“I5–—ko,ŠUž8À$zfªÇàßÚ\ý²-.–?˜2¯"¼›þ›Šž4ÕobšM>+fò$òÎfÅK®üAÓ'Õ,|Ct&¶S ó˜s~+Ñ|·ÅŸôÿíˆ ‹2~ñ£ãŒýZ½oà Ú#Çm¥C ?ÞT¡O‡‡R‹P‹LHîbmÊèHçÖ¥ñ€¼?âk´ºÔ­§A$nPãð­/I±Ñ¬RÏO¶K{tƒzŠÃ»ðž‡5ä×Z|RÉx˜d¶:}*=Áz)–ÆÓŸã‘‹°üM_Õô];]²k=JÖ;ˆ[³GÐö®Nøcám2ê;˜ìL’ÆÛË!p¿@k¯UTPª0aN¤#=k•Ô>x[S¼’îãLQ<Ÿ}ãvLþU£…´[m éPØF–Dóèj;oørÑ`Ñí:•|'Þ¨5%§„|?cz·–šE¬7 r²F˜ וüL+'Æ/ @Ê8=1¸×¨Yø7B±½[È,TL™ØY‹ÿtáZ—Ú}®§hö—p¤°¸ÁFËiÿ <3§_-Ôv²9FÝI+2!öÖ\Z[ÝÛ5µÄ),,6²8È"¹›/†þÓõ1š<å9PîYTûÒ·µ]Ã[ÓÞÆþ–ÝÆ § xSGðÊHº]§•æ}æ,XŸÄÕm[À¾ÖïÍíí€k‚6—F*O×­¥é6:5 µÓí’Gð¨ëY·þ ðþ¥öë:&¸îÃßQÞ’çÁ¼¾ûdúTqÇÎGsÇ•·CÕ³ý+¯Ðt¨ôMÏM‹”·‰S>¸¥Y:φôF±êvQ\9RÑøÓ…t1¥Å¦¶›nöq¬L¹þµY| á´2ô›xăk*.J,üáÝ>ín­tÈb™[pdæ¬ë~ѼEMJÉ&#Ý} 7Aðžá¥q¥Ù¬Lÿy‰ÜÇñ5·EW»³·¿¶{{¨–X˜`« ÖE—‚ü=§Üyði‰{;eˆúf·•BŒ(z £ªhöÍ©¶Ô-’x½V~àÍB™¦°ÓÑ%oãbX¦zV¦¥¦YêÖOg}Ïo'ÞFèk|<ðÂéóX®š‚ ±¼g“zžÃÀÞÓ¬Æ 63l͸Ç'Ì3V´ß hZ=á¼Óô»kk‚ß`âªxgFÖnR}F™mAž)­áM­VÙ´«fzFW U?DÓ4«Y-l,a··åãpãB×Á~³½kË}*Þ9›© QÚøÖzœš„dIs&w7Ö¦Oøn9VTÑlÖ@rD3S¿‡t© é6i›Üyì:¶G†ô­ Xiö‰n­ÔšÖ¢±5Ï i (÷ÖçÎîMmuúF‡á]#ÃÛÛOµ $Ÿ~G;¿Pj>ðÞ­y%Ýþ•ÄÏË4ƒ<Ö†¡iÚ«[i¶âY·SÆkJ™",‘²8ʰ*G±®Y>øM$y?±ávs–ß–Éüj_øW¾wG·QèÐÚÛEgk´(×j¨ì+?YðÖ‘âÕ,b¸òÎWx¨.<á뫬æÒ­šÞ/¸›8Zuß„´+è"†ãMãˆm@WIðΡÈϦØÇnÌ0v Sfð¦s;Ï6‘i$¯Ë;Ä 4Kám h¢†].Ùâ„rARXøsGÓc¸ŽÓO‚$¸•UxaéPÚøGA²¦·Ó-ãvÈ^Ôý?ÂÚ&•$ÒYi¶ð†bc"ªEà? E7œºŸ™»vóÎ}iÀ^’c+h¶»ÉÎvQqà/ ÝÌfŸH·yñÍkXi:nš4ûX-FwÔsY‰à %ßÚ—Gµçvvw­ íIÔ™MömpTa|ØÃmÕPøCÃÆÝ­ÿ±íLrP&4iþд«ñ{c§Co8ŒmúQ©ø?AÖ.VæûM‚Y—øÊóZööÐÚÀ°ÛƱģ ª0KEQEQEQEQEQEQEQEQEQEQE„= qwÿ¬^òkÝ&îãKº›&F·<1õ"ª†v‰±â GP¶WÜavÚ­ìqÚ»›[Xl­c··@‘F¡QGaSQEQEQEQEªÏª±Fe 0ì}kÌ5O„7:¦©«?Š.ÞþõNÑ®œÿZïô+í;KŽßQ¾7× y˜Œd}+RŠ(¢Š(¢ŠnÕÝ»>´ê(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦³*)f`ª:’j’ëZcΰ­ôV;UwrM_¨dº·‡ýlñ§ûÎ=$Iz:²úƒ‘BK€ùn¯Ž»NiôÇ–8ÇÎê¿ïS©h¢Š(¨üèËmó>›©ýiÕ~óúšlsG.|¹ðpv¶qKæ&ý›×w¦y§ÑMwDv =IÅ"K™ØêØô9§ÑEQEQE5PeØ(÷8¡]e0ö9§QEQEQEQEQQIq 'Íö˜ trÇ2ŽEu?ħ"ŸEQEQEQE5W˜ ôɧQEQETSO ™¥HÇ«°Ztr$¨7WSÝNE6{ˆmb2O*FƒøœàTCQ²eÜ/ ǯ˜)‹«ií2·4ŒpªÕÚ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š)+•Ð|d5ÏêºDVác°Ú¾nìîc]]QPÝ[Gwk%¼Ã1È»X{Wξ/ð͇…þ'èVÚt“"M"»‚äãžÙ¯£‘vF«œí¯øÙáKxô›Aqr—;”2¬‡n3é]Wƒ­.ï~[ÛZÝw5± 3Œi>xG\ðµÒëwÂæYŸ*¡÷ükz/‰¼i6€°‚"€JÒç×µr?| ¯ø£Q±ºÑõ·‘¹<£9ëÅz&™m%ž™mo3ù’ÇVSV袊(¯þ+è/á¿é7uýèMF|¼Fc´Šúß?f‹wÞØ3Ÿ¥r|5o­è³ÝÉwuo5¤Ñ´íÞ¹/ÙþYgð¶¥$Ò;°¼* ¶xÚ*Kxµ~-6¹-é:VüãÍþp»kÖ¨®{Æ^ƒÄúÖsK,E‘'Û†½yŸÀŸv½ÓË7“(@ÎÙíµÍx¯Å?ð˦F-üö¾¹ž™ï] 9ãÔ´QEQ\·‰<^4wFÒ’ÛΓQ¦s÷­Sø•á¥×|9,ëyso5”o,~T…A8ïY%¹ŸÀ¦[©e–F¾i±Çã^™EQEQEQEQEy§ÅßÙÜxbÿ[y®cº·‡ ²Rò«_¦’o‡VM#ù›œžµè4QEQEQEW—üDðŸ‹ußé×Z%÷—eÝéæíÁÏ'Þ½*Ù+XcvÜꊬ}N*j(¢Š(¢¼Y$¸ñç4è6^—KM)e…n ‰ô5éþøyáë;M;RKi â¢Éæ4¬~lWyEQEQEQEQEQEQEQEQEW!ãïÙø'H3Ê<Ë©!ˆucþÂ[ÆOáÅñf§â(´ëb7¥ªÁ¸Úµm>)ËqðÚç^6ÄÜÂ| {;tÈ®Dø‡Åo ÿÂMg¯\JȦI!x€Œ(êµëñDšï"×dVo)‹(é¹k…Ñõ/ëzeιiâH…Áfo°av(ôõ­‹ ßëþ3Åy­ðÝç<‘ó´z óÏ…ú_‹ïeÕn4}^( \by$L™0úõô\+"ÁÊÛ¤ SŽiÎÛ›®kÆl¼S¯øÇź®§ëO¦}pH–-Á‚÷$ÖßÃOêšÖ§©hÚÃy·vM´È£Z¯wâKÅ~;›ÃÚ& övö«™¤D·…q¾,[ÑñsÃÖò´òBˉˆÿYóqü«Ò>"øÆëB{ +Je]NþAlÃ!÷±\ŸÅ5ý?ÀšŽ¢/¢¹* (£gÛµuúz›ìÉ¡Žò+e`d\Ž:ŠÌøyâÿø§CÕäŸÉûtRƒ·#õ®Âð™^üBצ¡h×ë…™än3Ñ~•×|@ñ‹¾Ðá)MR Ù狘ÎÜç®+XxÏWñ7—YðÐ.c'ÏŽ^@Àé\!øÛÆ÷PÙ[Y-̆•ÔìØîk¦ð¯¼A¬j.¯oZ…™Ã¾ë}+.÷ƚƽñ ëÂúEúi¿f\x·4­ŽqÏAW| ã^j>׌rÝÚ¯˜³Æ0ɬeñ?„‘yqt8ÿ ö[øö‹ýÁü«?Ä€Ÿ êXÆ~Îý~•æÿÕ‡‚u˜ÇÁ>¸â¥°ñ¯‰cø«…õ/³ˆÜÍõ¥t|pÞ:uŒb]SPG=ý£XZ¿Œ5ÿ?·eŽò;ÅÛ‘.ݲcô«^ñf½­K¬éúÕ¨VµŒí™ ÙŒ÷®áUÞ²÷zÞ•¢4PÜËvÒ=ÄÊXF£ À¯Bð§uY<[¨øSYK}j3Ñ®ÐãÜf¸?Ü|QÑme¸¶ûAo6Ò Ÿ-1ݽkÚ¼5½šá!’Ýï ’>Ï÷BÖ¬óÇm“Ìá"K3€Wži^)ñ¤Ô'ðô¶–šm¬¦(¤–2Í3ýx­àÿɯI¤Ý…‹V°o.`öa\|þ4ñ~‘ñ? ܽ½ÚΤÂÂ,gŽ?*½©øÏľñV›e­›k›KöÛºÛåœþ5êHÁÑXta‘M›’þV<ͧfzgµ|÷«Zø¶_ŒÚmµÅý¬Ú€F’ ©1Æ0xÇÒ½–[]Px.ößUºŠ[Ö‚@ÒÆ¸^œWœü._5ž”ö°429‘¦RÄ7eÅuÿ|ksâdÔm5V+Ý6SÅ:6;ÕAâSž&½Ñü=r–¶¶Ý•ÜKtRxsÆwÖþ5¹ð†½,rÝ ß Â =+ÐgY^ÞE…ÂJT„b3ƒ^!¬x߯žñͦ=ÄWž ²<ÝÂý9®“Tñ‰¼s§]ë·ÐÞÙÞÊ"‘=¾KO_­kø÷ÆïáÝ&ÑtäIu AÖ8œàžÿ…`k×&ð]·ˆ.u†¿ˆ•7:P]¿XøârÛÂø“AÔãŠÑ‘ËÙœ“ïX×þ2ñqð¾®Ù³2Lë’±n2z³z}+y¼E­ë¾"¹ÓìµK}3ìq¦èÝ2±=z Ñðv½¬^ëݶ³±c±¨É÷Xœäÿ.+OÖuψ!Ô£Òµ)4í.Â_-dD¤nçžÞÞõ«áÏ^¯‰5? ê—^n¡î‚à®7‚8?™È/‹¼moñ O ›ˆî_) Œ{šÛëÞñë·0ÝÛß§Èñ¦Ò­Zÿüi7…`ÓííÛË–ö]†m›¼µî~µÏêž&ñ„u­K­M¯ôýI‚mt Ëžâ»OˆÉà Qü°Öåü+;á^OÃ=;å‰üëº,I<Íy=Ç‹5Ÿxº÷Dðýà°±±¿» ¼“ì?Òxîæo_xfîìߥ²–[¢»X‘÷²*hñõ®‰qsÒ\¶cP˜89Åkêþ+ñ'ƒµí)u™à¸´Ô$Ù²5Ç—Z¿u_èú7öƇ<"Ö÷K®XûÖVâ/k¾‹X²¶é;ØÊ„´íß‚ºoxÄx·Ã{:® *áG@¹û/jþ=ñ õ®}ö .ż¶¹T ò?|{Uß ø®ùüC©ø[T¸Iu eÝûÖ q\ߊ0‡Â^þÒ”,—Xb'Ü×5u}ã-#ÃÇÄ·zŒ3F¨%{$‹W¿5oVñF¯ªø Jÿ*³,Ñ–DŒ€Y±“^k¯x³RÖünð%ô:^–²ÛG/’©0 ŽÿáYúŒkð–çR¾¸A,Ðf+hNÈ×=°:ÖÃ]R{‡¶‹d’Õ¡™Ë1Î'Šç¬þYxžÉµß jòi÷2’Ín·~=+§ðƸ¾×4Jo>kщá¿ÈÍ`|'Ö†‰á_ÌB´S;zgì~¿›TÐ,¯§@’ÏvQÛ5nòqke4ì2#Bد ð†¥'‹¼M¬jðéVvùÞ Œ,’}[­g|:Ö"ÓüSâIã”H%—ËŒ»}ì’3Z¿ #“Oø¯â/Iœ4„žãùÔ>;Ô­'øÝ ¤R"*®À޹éþ}jÏÄÄ’ŠþÔdÿ'hÔIèAý:×CñÇS·ƒÀB?•丑DkŸÇ5¿à©þÚ0<3×ýÚä¾mõÁœ‘vùüê‡ÃÉV?ˆþ0ºf#$ŒúàóQ|RÔçÕü£ÝNS{Þ/Ž3Ö¶>.ÙËð²ÎkEfŠÜ¤²*÷Çó®³Fž þ[º› žËÍp-'‡ÀšÕËåmåfò‰=E\øeêÓ.7=Ëgóª^Åñ£ÄÌ>l'oãF‘~þ-øŸ©ÿfÅo¦›\¬·!K'c×…éù Éðñƒ^¹•¤™l¡*Î[æ“nÜÖŸÅk˜ï¼Oàë¼mN­³<ŽGZöøÔGþè¬ïÉåxgSKgþUçN|y“óÆ8ô¬ùÆi‰Ú·o↠¾4ðþ©nÏ-Ýœ‹çŠXˆ·}î?Ï4Ï[MñRÑ,ô˜¦0A7›<ÒDUPqëÞ½JKhít™‘ –ŽÚò?€ñ¥xŠVEÜn=Ç4i’ý£õaÇ×Oñ“nøûáÔÎ Á¸qþö•zN•­ÏâMVÀˆÍ½žÐ®½I<àÔ? ¹¸ð&±§úãnظï\À@À2 ß0¹}Àö®Áqqñï\šÔ»Û*ºÌàäb¶oY&ý íIîm2€ŽæªüheoøNlH×=}²+ØmÿãÚ.1ò? –¼jöt?´e’”‹s¸‘覻­cU{Ïx˜&Õ[X¤O_“$ÖÁ&ÏÃô•œ¹i\³½k á\©/‹dT=zÿë]6¡áÃÇN£=õÛêòˆ¸«LW¥W‰x¾X#øï£ ‰9EÚ{Á­?Žì’xoN„12½Ðتyn+žø¥ÏmªøFæéåŽÍ¤’/ð1Ç5Þêž Òµ?ÈÚž±%™sƒ8ÛŽµãXôË‚¨–i/ÙT/’%<‘ž3úWoà8¢ÿ„GPªvÛ®r3ƒŠóý{Ãz_޼S¨>õ´ÍbÅü¦(Øóf¦øjè:æ¥áVè^ ‹6’)s–ã“øÕ¯áìí5>q²x®›rž½eZÃq©þѲÜ[n0Z¦éHì6ãY²oÚ*õØäEÆßøΫüOÚÿ¼,*8?íV×ÅÉm¯hú½¥´’Þ:”¸™ùê3\çĤ·³Öü1e-ÓÏ/ž²HÌ~îH‡ÿZ»ÿˆWÐKð¿Sxg V „¡äS¾Iæ|8Ó l¶k²¼C%‚Ѱð¯øÙkþ#±º\Oæ`:ŒµvãKðæâ‹˜4½<jÞA#É*¶BŒ~œšçþ –€ëÖs®ËˆîÛp=OùÅcÝGq©~Ñ*Ögtvè ¬§»zδ¼J‘\~Ð"¹]«j3ÏCóT_ÝF£áŽ2~Ò{ôé]wÄwEø]zÛÀg\—¯ ü'¶xŽ#ûyÿv¹/ƒi%×Ãý~(Ï%ÄïšÉø7£I"k6ê7—0ÜídŒàšî¬¼#¡è¾<ƒQ7÷wÅÀ<1c¹"¡øŸooâ{1áËEIuûÝÙÿRñ¥ðoĦçL›@¾;ûØTõ w5Kã~Óáu'éªñáU~:ÛÎÖ^º@ÆÞFü}Üœc5Ûø¶ö!ð¦úq´#Øásî1\g­®ì~ê-w•C#Å»ûµ»ð…á D 3w?Zç>þ ñD€¦Qÿ5íÕæßlînü'ÙÁ"9È÷jïÃËÈ[áU“’»c¶deÝÜ b¸ï€±N^¾e)g$§ËôëÚ¦øUt‹ñňYFùÏ_÷{=#0Q– zð· Úö‚™VUËdŸ0¯pÒgŽmÒHØòTg>‚¼ÇÆž+·Õ>"è>¶”:Cp%Ÿaþ,pµ›á(Høå«%à!®ŒE¸È4ÏŒÑOªxÇÖK¾èI• רþ\×mñ/ÃßÛ?çˆ.n-"Yc=÷(¬„W×~"²]Jò0±ØÆ-a$d–þ3ŸÊ¹Ï‰S[üXÒu+é$K)‚¢Ê‡OÆ»xWÃÒxzkÍZþêêÚ$Þ#yúŸñ¦_ø2oøOEŽÊþçHŽ~TÉÜW¶k”¿ø«´8¶ñ4’6å¦ïñ¯Zð–‹?‡ü3g¦\ÜyóB˜izÛ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢²¼Aáý?ĺTºv£Ë ƒ©©õÄ[|/ÔìÇØíüY{“÷~̪Û麺k¿hW¾¶ß胸ûÙõÏ­céÿ tëA$7w7v{ G²>Ý*߇~éž·¹‚«©£™5YˆÔöQPÿ³±´ 4BóOãä¿Þ÷æºÖZœövûÝdÉ’G9g'©&¸ÿøSš:ßK,w÷©m,¾l–¿vÇ=ëÐííãµ·Ž—lqŒ(§IËFàa‚ yúü ÐáÕ¥¾´º½¶I›t¶ñI„¯·µAmðoE¶ñ7ö´sMAËd8Bá5·®|>ÓuI5®'±»UØe·8,=ë Uø-¡jÚÍÕÔ3Aÿ-þg>¬}k¤Õ¼§k^ƒH¼’gòç ó©}k&O…zeî‘-Ž«}{|άҾYv_J»§ü?¶Òü=.iªj o'BdAíÅEំšo…o¾Óa}y´Í?ÊÇÔÖ}ïÂkKÜ궺•Í¢ÝßÅÇ™íVõŸ…š>·q\Ýß,Q#‰%Â.;â·ì<3kiáæÑ§–[»fÈ&s’AÅrcá|ñÄú|:ýÒhÌpmp3·û»«©›Âö‹ás Ø±´ƒËòÕ£ês>øVžŠhlµËèâ—%¶mÉcß‘F…ð¦ÛC×ßW]^öY¥mÓaûÏ®)×ß l^›WÓ5Í:âõÂÀz­qðgG}r û[»‹xÔ4@çÎç<“ëV¼Mðºêð_˪OÙ¿Ô$`.»-O—LÓcµšîK§LæY:šÏñO…×Å«m&£uiÈu±¼zÇðÇÃ{_Îͦj·«˜‚…ñ}j¯ü*›OøI?·ÿ¶oΡ‘™ÞG¥qþ-#¾ñíÁðEü“]G Åx¬ ¢ã§'½T¹Ó~1iÈu¸†T‹æhÕ—?–+Ó<;©?< ³É-œÓ ’˜Ì¤pqúÕ=án 4ͧꚌFl™1/ÞoZ†/…6vÞ!ìÆ¡ý Hó%wxôàV‹¼kâJÏSKÙ¬u \ˆî!œzsZÞðÕ¿†¬d†9d¸žgó'žCóHÞµµ$k$lŽ2¬0Aï\|?Ôt{»“álØZ]9y-Þ-ÁXõ+éô­ß ø>Ó¶³Ý®.îÉ=ÚF¬KÏ…Zu߈ß^þÖÔ¢¾gÎô îôéLÕþXëwé{{¬j2OÌ$¿ú¿¥v–Ú>•“ÝÍvÉœÍ7ÞjÒ®CÄŸôÿêðjÂîæÇP…v­Å±±R\øÖ ÿ`Å}w šEož\õɦh>¶ðæ—.Ÿ§ê7‰nêTßtž¤{Õ ü/²ðƼú¥–©|í+nš9ÄêjÆ·ðöíaõ}+PŸKÔ$P²É"Aî*vÚåäú†¤ÃoÚ&?uº£µuáþ3´K¿Žú5½Æãÿ `ô=+ÐWÀÑÜê—š®¥> lÛ6Ñʪ3ëÀäÖÞ» Xx‹L{ øƒÂÝ1Õ~•ÊZ|1Š5H.õ½FêÊ7 ¶Žÿ»ã =ÏÿZ´|Oà ?ÅPÃoyst–±( oá;‘Z>ðÔ~²6^\OE”ýÁíXw? ô×¼»¿¶»¹·¾¸›Í3£aôúVŸ‡üm¡Þ½ü—3ÞßÈ› Äí¹‚úATµoÅu¨I¥ê7:]Ì¿ëZ aþ Õïx3OðíµÊÛ´’ÝÝgÏ»”æI õ5•ÂÝYµTº½¯÷¥3·Ö«ê? 4Ný/î/õv‡rKæò¿OJ½¯ü7Ò¼Emb—SN³ÙŒGp§ç5^÷á^¨iQÙÜÜ\¼±¸\–Ì™9©n¾éwz,ZCÞ^-šYñæVõ­ x2ÛÂ+$Vw·RÛ²íXf`U9ÎEtõÂk¿ ­µ WûSJ¿›J½oõ’Aü…kx_ÁöÞ3Nnf¼¾¸Çu9Ë··°öª:Ï€RóR“RÒu´»¹¿×4#"Or=jï…|aá:XžK‹Ûƒ™®e9wÿëVv«ðÓKÕ¼FÚì·—±ßò¼rcg²Óu†N»sú…åìÆ" a¥û¿J¿âYø‹L·Ó§¼ºŠÒR6ûàzªÛ|:´´ÑdÒ`Õµ´`¯˜>UÆ08§øOáõ—ƒ®Y´û릲LT±ïMÕ¾Ú^êïªé÷·mäŸë߀ÿQVô¯Ûé‘]?Ûng¾¹M­w)˯û¾Õ“¦ü.´Óuy5DÖµI.ä;¼€îý*¾iöÚ¼š¥¶­ì¹äR>jÑñ7Ã?ÅWÓ_ÞÝ«Û*ˆü¶Àcæúñ[w¾³Ô|;ý‹z^âÂòrÇßë\²ü4’kxôûýræãKŒü¶Å@Ènþ•Ðëž´Öôx´³<Ö¶‘¥ ;w.1ƒY:wÃ[+K}:ÏS¿ŠÝùUÀëÖªè¿ l<=¨ ­7S¾Œ4匿}kÐj›ho-žÞâ1$R ¬§¸®O…Êže­Žµui¥ÊwIiäò3ØWK„ôû_ ÿaX™--±Ñ7¿>õÍY|!Ò4Ûñ{gûûyŸ|ç?7­z¨DUÅcøÃÉâ+8í¤½º´TmÛ­Ûi?Zå¯>øQTûmÅýÃÆ0¯$Ù"­CðÊÆÞ*=cXXÀÀEº ÀT:WÂ?i:ä:´r÷1>ðd}ÙozÚñ'ƒ­5ùc»I×P‹„¹ŒàŠƒCð-ž—© RêæmCQÙ°M9ÎÑì+¥»¶K»I­äû’¡Cô5™á ÚxWH]:̳Fœ³u$œÓüCáÍ;ÄÚq³Ôbޙʰê§ÔW;gðÇL‚⺾¾¾Š å8ï]º"¢A… uQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ^|¾×<=â ýKÃwÏ óù³ÁsŸ½ìjK¸þ jößfTÓ4èäùe“s;…ï´bº_ h0xkCƒM·ˆÇÌøå˜õ5±EQEQEQEQMl…%y8â¼VðWŽu/Ûx™Æ”ÓýT"Väz+Õt·¿“N…µ(ãŽìÞ$g**íQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQESXÑ‚³ª“ЌӃ+}ÒÒ–Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¯,ø¹áCNŸ]´Ôî šÖ!¶(ß qÞWWw^¹k»‡™Öã»=+Ô袊(¢Š(¦I»Ê}¿{iÅy_×ÇÍã«ù5í릂ʠãaç¿…z.±­Øè‘A%ô…yDIœ±éXÞ:Òïµ?Í.ªÍa,´ªÑœnã¡®Wàf©¨êž¾’þîK¢—EU¤l•àqô¯U¢ŠÅoØ.ƒ–7f?3ÀæŸïù™bqÀɬ/ˆï¯Çá)ÛÃÍöá÷>öÞø£á»ëòxV&ñ¶Àqƒ·ßÞ» óߊVšÔ:úÞ‘­\Yµœ[šú8ïV>êwú¿-¯uäžwfÌ’u<×uEs~#ð´ÚüðË·¨iþRãe³íõ¯³ÿ„Šo‹-áIüM~Öqå‹où›Ž™®ÿÄ^Ôt=ïUÑõíDÝ[!—ËžMèøíйðÏÇ_ð›h,ÉåÞ[“/lú×sEfÙëvwú­ö³\Y p7 Žk€ñõ·Ž®¼c¥™4Ä*X©ã9çwµzMÍÊYXËuppÆ]Èôš‹LÔ Õô¨5 =Í é¾2ÃŠó ¯ŽÏÄ›öÕZQ£rŠÍòŸ—h¯T¢Š(¢Š(®â_Š.ô; 9¶_jW ?xÔžX{×gqââm–›o5ýí„Ê<ùgbêN2Oµ{e!ÎÓŽ½«Îø‚Ú׉/ü?<Ív`$Ãs·ÔuÍzc0E,ÇrMy.§â«Í[âÖ‡¦ÚÎcÓ#fû­þ¹°yÇp+Ñ)¸ðö™kmbÁoµ „7÷sÔ×omâ½ âE…¥”څ݌ȭu$îYyê}«Û(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®Sâ<ò[x U–‘®¦_<±cèk§Žumvâóþ‹[˜­™—2ÊC6=‡J·àOÿÂW-åÝ·Ùu7Ù,@ä~'‹|w‡o£éЋÍ^äá!Ï =Z²Wâ¡£ø’ÓGñQ½ÑÂy >àÖŠ¼xtÍbÏCÒ [­Rë®p±¯©ª3xãWðηeaâˆmü›Ãˆ§ƒ€¡½d]NU†Aöªúƒ].Ÿ;X¢5ÐBbWè[Þ¼“Cø›âCÅ7^¹Ó­öÜn+Ó·Cšµá ÖüKy¢2Ò;‹2Û×ÌÉrAZ~ñ¯Šu½RîÙôÒ+fdi ¼ºzÕ¯ ü@¼×<]s ^iqÚMl…–]ÜúWŸ|L×üMsã-#O“HòáŽq%¼~`&f¯+Õìu FûÂW³ëZh±u‰À‹vì®Þ¹¯,øE¬_[xvúËGµI®Þéäfs„GA]ÿ€<|Þ*¸¿Óï ßÙÈUÕNF2»ÊÌ×o/l4™®4û3wr£åˆf¼ÃÿŠn>+jWo¤‹‹åO- 2"\ú÷®ÏãcÍ',…Êä’uósбÿ íîá‹{ËM®4»x”I>ürzíôOÚk^‹ZCåÛºo%¿‡kƒÇz׉d»“¶óYÛ1C<ìG˜G¥lø3Ç6¾+YíÚ?³êͲxIÎuǵuôW‚üyÄ^Ü£+(9öÜ:Ö®±ñOÕ¼Q¦xpLɤº<À`J{.}+×­a‚ X¢¶EXU@E^€UmkX³Ðt™õ+épB»˜Ÿå\(ñ¿ŠGoaÀ4¾b§˜|ß/ûÝ=+^ûÆòÃâ-Oþз*^Tm*£¯Ö±ü=ñ>÷ÄÚi¹Ó4šUݾ?0˜÷­Ï øîßÅZmÜÐZJ—–ŒË-¯pÀãæZ‡‰¼M}ñvÍÿ±Îë8ŸÉ³.âå‰ü«Òõßk‡W—CÞw\Åça¢Öáÿìø.OKnmáPÌ98þªÌ›ÆÚö¦f÷F†]9“xû<ÙuÈÏkÆú€Ô~ê7è›Dö%ö“÷r+”ø¯jÖ_ìãÐô¸¯Ì^bÒìÛ“ÓÜ×wà¯ÚøÏL’æŒ2Âþ\±1ÉV®¢ŠðªÚÛ~зܪ¢&I“®>^k¹ñŽmî4;½7E´º¿½º‰¢A'¹á«èÖ‚æäeZܾ60럥yÏÂíÄ·:î¯qý’.’ê÷ý&à>]°|WUâψzdž™¦x{âþ§ãËŸ ßé‘ÛKnb²nçÚµ|SãdÑ5+MÆw«ÞEìÿi½ª€ñž«¡ëVZŠmm [Ó¶형ÝéÍ'Äê> X.£Óc¹ÓäÚ¦mø!lU]Câ>³g¢ q<:Jn•¦Ãýí¾•Úx{]µñ¥fs«œzÕ¢¼ûTñÆ£}ây<=á‹xg¹·¸žSòGíV´] ~Okpä"ó"1·Ë(ö¯/ø“ªë÷0ðü·z0¶–;Ÿôh¼íÂS¸c>•ìž»Öu ygִIJ›#` °Ç\×GEbxÁ‚x;XbÒNûµÂ|ðLä(U7¹ñsY—Fø{$?ë&Ä ún¬‡šµü~´³Ót¯´Ç9–V}ªIê­h|: ˪êO¦Ø}WVåüÞÞÕ½®ÞK«j)áû'·7’¡æ4þïã^nÑ[AûAé֦Ņ6¨í€‡é?<=uâo \ØYH#ºÊÉ'0®wáÖ™­x+Ãwóø®û÷a·¨y7lZäü-e㯊âo-ãÒìäo-ú ;¯­{½ ËË´¯ y’ª’‹œn=…yN“ñK^¼ñ{xvïG‚ •'9“ÓÒ­iÿukIá¹´h£»@X“/jÖÐH׫§W_}ñVðþµ¦Úkºlq[ß¶ØÞ'ÜW'¿çW~!ø»Yðž˜5;.,PîÏÈÏN+{NñrxBß\¿) ´tœðµÆ'޵íOE¹ñ ŠYÚé»m3òÒ(ïíš¾ž+Åÿ µ[ûtùÅ»«(õÅr µ-n}—Cµ†Y#y$–IŽNOæ»_xîoK{e{l¶÷¶o²@§‚k»¬/j:†‘ừý.šæ¿ct#½yç‡þ$ø›^ðÕþ­£}å“8;@æ§Ò>$ëúÏ„¯5»k Söv Ä$çð®IñøðEψu»³ÓÌX×’Ãüâ¹oøO¼[/†ßĶñéòiÉËF ïQžçÖ»­'Űj^_l>_’dd£¨®iüWâÈ´W×M¥¤Ö-‘bˆüè1‘šë¼#«Í¯x^ÇR¸P²Ïv ÐVÛd)Ç'óßÄëß^x‹Eûvšy7MöP™9ê¶ž$¼Òü1s«x–Ò;1Z+n,¸¬Ôñ/Š.´â(-­RÇËóE»¬)דô«w,ÔuC­xby¦aºD•¸AÜ}k‰Ñ¾+øYÐõí¬`k›=ÒHä|Š€zw&»Ï‡>.¹ñ‡MýÔ É!‚ô>â»(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+‘ø˜xT±å\‡Á»»;_†·s(©o0ÛšÏøykåæ«sáxRÊÍä>mÄìX·û£°¬ÿ‡:•¾ŸñÄw—2y‹æ°.ƒ9ùˆÝ-ÞÚ¦¹<0%7ÿwÞx»ÁÏŠ4ïê72Å4R**/!Û9ÁB/.~:]D³¤SmýÌ’¦á·ºoˆ~ ¾Õ¬­ïõŸC vM¹]!ÿë×£ø}Bø~À L¸…xF {ÖxÅ(¦ð‡Ä;Ä–‘6Û¡±¶ e±ð¬=enüâí'[Šy/à>o?yÛüŠ÷éϧxj”ƒ4¹–CܳrkÎ|Ê~8ø‡§ÜÀö¦üCc'ÆO B¯· “ÏJôMgV[Û-wMŠ6Y-­X—ÏREyïìÿn‹£êRmåç`G¨â«|2ˆÛ|^ñ<{Üíœ}I¯q¢¼?ÀÅåñ<ÝU‡åRübÖZøguyQµéB³œWO®ÃæŽ4 †Ç?Ý®cC–â?ÙÎshËåHqži¿muÙ¼­¥\ÚE ÈáÄ‘–9ÍhøOÁ—ø‰5åÞ¯o%ÅàiÚ%#¿ZõÊ+À~>D—%ðô,xvÚÃØ°­_Š_ ›Á6šŽ—w§Æ¬k‚ÉלuÅt|k‰<3­ÅÀkûo‘Áê}+#öƒkÅð•X@n€˜ÁãŒûfµ´ýÅZÇ‚!°ŽŸ¥Å Œ0ˆä)\zÔ^І¾ëzSê |°¬ ” Çݨ¾[¤?ÙÑF÷‘‰?gü<[ãå[£Çü ª+6ßûIÝää%©ÿÿïü~Ñ\x]T• [WkgÇøÖÇþŠêm°È²+Ê?Þ<×/?‡¾!øoMYtëèµ]+’6ùŽÏBµuš®¹ÿ ÀÍBä@ qlÈñöR:â´¾[Gið²Ò]¸2Fò?¿Zæ~¹vñc n³€zrkÚ¨¯ž,ûGL¬Ù_4Ô¯ÿ®¾ƒƧ+ìµÁüd[†øs}örüß·û¹æ¨xKÖ¯>i‹e«[Åo$ðÀÆ=jÏ€<&|g¬Ú¾¤·Nå¤xÂàGÆ_éX?ïÖ×Jñ5ÑCåCw$˜ýx¨~-Ý Ý[Á³F›d–uuV=>e®‹ã)SðÆpÜhöã±È®ƒBÔã²ðÿ‡-vk¨Qùz×¥¨?´N«Œ|°Gà*”&wý¤$¼î³ÓGÿ^´¾<£½†‰äœN.ò„uéÚ‹Ï øi¤%ÂîšIâ>»ksÆP%¿Á{˜Ð %’ÿ*wÁ˜öü:²~ÎXƒŸzô*Šàm(^¥?*ðï‚~jøÏÄ‹u»í%òÛ¿Þj±ãõ¸“ãw‡RÏ"`ª_ÜÏ?¦jÇÅèÊø×ÂRsƒt¿O¼+ÙAdŠZ+ÆË¿ÁÒ糓Ÿø pÿð<*†Î'?Ö¶>1ir꟯£ ÉY€óúUÏ…Ë ü>Òü¥÷xcަ¼ç@¶ÿh Sì V‰¼ÖN™ c?uÖþñmåÕÅŸ‹#s)‘ÿѲ~™5çÓišáø¿³jªú³AvÑÀ_îô¯kÓç‡ô)gñ¦·2&]¥Û´é\î£aeâûû{SWTÒÔM;vÒÇý¿ðÿëÕØõëH|O¦x{Ãíoäíi.R%*ƒÛ­nj>(Ñ´­B Ë袺›”Œ·&µÕƒ(e9duxwÅÈáñ®‹â›hÉfm²íïŠÆñe½Ï‡uÆì’tþdËÜè§ð¯jð”o&5¢./žû2OÓæúż7´œ yq~\±ñ½äðö7y¿kP¸úÖ¿ÅùJ|-˜pCù\Ÿ¨¬oùãàMŠÛÐÅæì½ë ð†‹§k¿ lôéñöY ùŠõ¨t›] Jð½§h…šE‘%wîØ£àºBŸÕÔ‚i¸÷®sá8ð±|VU²¾qïîkÚê)áKˆ$†@ :• ×Ϻ•Î…ãÍcÁñ#ˆu>P1Vý)4û+­Æwþ´R¶ú„ŠÙ<ì<þ•ë>9Ô4Ïøäêâ{UˆD!@+Î Ü_®¯ °iúd±3ÇgÜyé¹ùæµ<â +Oøgg¤]•eµ–RG¨cšÉx¶ËEûg†uµiò¦õ·vÈ é^ð³W—Tð’Ã=ºÁ-“›wUé¸u®â¼gãD»[Û]éZòÉ •šà«©þï¥zÞ¥Ùi6¢ÚÆÝ „sµ*åQEQEQEQEQEQEÆø³ÁW~(ócþݹµ¶‘v˜cQ´ýk/Ãß ¢ÐtÉôñªÍ=´ÈÈñ: ­š¡áo†z÷†üûK}}"°‘ÉÚ±åñõ§Ûü"6ü÷–Z¡K9Ü<²e›œõ«¾+øu=þ¯k­èWÛj–ãÝr­ìÕ&Ÿá_jz•¥çŠ5(^;Vß­°ù z±ïW|Wà$Öõ(5:ëìZ¬+0]Á½›Ú³ÛÁ~#Öïa$Ö"—Oˆ†6ð&<Â=NkÐ!‰ ‰"B¢ (…I\ÇŒ<#Šã°Y\!´¸{JÅ ‡ÄQékº463,€²õµo_ÛÝɧ46 øÂHã Wši? |G¥øºmq5Ëvšá³3:Œò5¯ã^ëú¾Ÿ­iWQA©Z íaøV…¯„oΉ©Gw¨©ÔõÄ·œŒ` ÆðçÃmWÂIo¦øƒtä²É9?J‡Cø_ªh¾&}m|A¾i¤Ý:y\8ÎqžÕêW–\|2Õl|S}«h:¤p-ðÛ2Ì›ˆÏR¼Ó¼SðËR×t«=&ßSŠ++p^=ÌÍêzUëÏxžóÃ'A—X³{s–]` •ì:Ôþ ðn«áÝ>M&þú½0¡TŒ&'®k"ÓÀ~)ð½ÅÌ~Ôí£±žBâ+wŸLWAá?\i7ÒêúÍù¿Õf2c ôQ]dxŠßX¹ÓJhwPÛ]îyW#æ>#øQâß[^j~!¶ií°ÑƒçÖ»K]'ÅK Kcu}e$ÄFòÎ6÷ÍpZÁßxw\“SÓu»hdbIQÛ϶kÐÃWúç†/tŸOËL~W‰pv?\ÖŸá_iV£H´Öí³lIž<Ê«éÖ¶/|!}„[Eѯ–)%ÝçÏ2îi7u?^µ—áox“ºº]®­hÑ”fˆç'¯z­à¿‡ž!ð–½wxº­¤ÐÞI¾àŽãÎxçÞ§ñÃíZoÂM _Áms,F)„©ž=Ehßø&ú_K Zj—,ZæâDÎíß{£|9Öôÿ]øjãS·’ÒE""¨C.NN:½ƒüU¤iÃNÒ5è>dzfÛ˜‹ºŒsƒš~¥ðúò'‡,5E‚ÝÔ‹™=Í)'?ãùÓ´x‡AðèÑìõ«v‰T¢„ð^õà‡šï‚u)Xj–×wºtC¥z}rþ'Ó|Q}slÚ± „J§ÍY"߸ç­pÑüÖ‡‰WÄgÄqÿiïÞÌ`ùIúzWáËÙÜ\¶¹ªCy©dzoÖ¶5 >ÛT°šÎî1$©VSÞ¸/xŸ@I,´-~´Âÿ»ŠxK´j{šê´ E£éóÃ$ïsuu“spÿzF#®?Nøg¨é–Z¸]î6â//ç#ºƒïÒ¦ñÃ;ïêV×skžJY¶ëX£‡>}{ô±¯x>çÄ^ }Q¿]‘p©´dtâ ðÿ„5‹-Î¥«Ç<Öq­6ÅòÇÆ2yæ³,¾jV^.—Äk¯î¼›‰‘€WÐ~U·â_OV¶×4ÉRÛWµûŽËò¸þë{U(<ªëšå®­âË›y~ÄI¶´¶F¬ˆç©©¼yà[ÁmlšŸÙmà`ë—»æóU5_kú·…Æ…7ˆbÙ# ~XvïV<ákÂQ›+½R;­=F©´ƒž¦»š+‚Õ< {mâ)5ÿ ]Åky2íš)÷oùw«zƒî`×ÄåÒ]j¬žZùk„‰}°¼MðÇWñ&±¡?ˆù¶—̶Cú¾r>µÝhZŽŸ¦¬¥ð½¸Sþ´.Þ+VŠâµ¯jÚÜwv÷#™m.7)…c*áÍeè? õ Ù5®‘â9íãc¸«ÐRܽˆ·ºa1)²BG ë\T^ñ‰$–ú£éòV)×>W°õ­_øB Gq<’›Bí÷Ü\0ûÆ´õËGP´XtÝI¬%ÎLªŽ?á“á4Ã^]uüIy&¤¿vFA·ò­mwÀ·¾%Óm¬õMnfÈ]¼•Ùæz\ÅçÀ«[¹Þs®^ \å›?Ê·|ðÂê7W«¨=Ô“ Œï^ƒ¯Zã~.øZ ÏÙßÁ¨»js2Ç ¢ žÞöìúM¼–ºM¬±i0žæ®×5ãOÁã !,fqIV@äzEAâ¿Eâ/Zé*Ê©¡†~QÖºE€Ãb-à! DZ8SŽ+ÍßᎵ7‰Gˆ¥ñ(þÒ_•Hƒ «Rø›á¦©â™íe¼ñ ¶0±­?\øoªxI¶Óu¹·Œ1R/õ„ƒ[ÚOƒÚ×Óhz¥ñÔ,Ý<´VnÕÆ1\ݯ€¶‡ÁÓh7 Ÿþº~¬äýâ~µC@ð߇t©4ëzt·`v®Áò“Þ³4…W~ÖeÔlüC0yäß81Þs^Er­àè›Ç«âo1w<­„sŸZÁ°·‰ÚP[Èò„xè}jÿм3gâÍ m.ó"7åYz«v5ÇÛ|)fѲ5-râîÅl0mÚ«î}j¾‰ð€i–—\jÏqæBÐAÇËž¼VªxPÓtô³Ñ5Ùm£¤£rR=+¥ðÞoá½!,`bç;¤‘º»ž¦¶¤ƒë^Wâ…Z¿ˆuHïn¼JXÃ!’0ýÊí“Ãò]øY´}fä^»¡W”®3éÅr±x+Å §ûbÒÉ¿¼ôÚ? è.<#ö .ƒ¢]ýí2ÜqÞ¹? ü0×<%x?²ü@¢ÖIL,;תÑEQEQEQEQEQEQEQEQEORûwÙ?â\#3çþZtÅXƒÍû<~v<Ý£~:nÇ5%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW7càÍ6ÏÄ:Óy—“c»Ë‹è+¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ »3­¤­lªÓ…>Xn…»WŒ‰¾0Ó¼{o êÖv‰œ·Ÿ—Ú½ºŠ(¢Š(¢Š(¢Š(¢¡¹y"µ•áÌ‘T•OS^K⿈þ1ð­‚]ßèVÐ$¯åÇ™·ÝzW£ø_Q¼Õ¼;gŠâxòŒf¶h¢Š(®âµâ½ ÖKíÒÒk(b/1”áÇÒ›ð§ÅZ‡‹ü/.¡©ó–á£ÝÑEQEQEæ:·Ä JóYÕ¬ô vÚ•ÞèwwZ•Åô~UÔ«JŸÝjТŠ(¢Š(¢Š(¢Š(¢Š(¦;¬q´Œpª2Oµgèºí†¿m%ÆŸ)’(ä1–#ŠÓ¢Š(¢Š(ª÷—iörÝ\È#†5Üì{ ÍÕ®µÏ}§Ã¯—¨hž_¹·Ö¼÷áïŽ|G¬øîÿBÖD8¶³å©À`}ë×(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®OÇž*±ðç‡nÌ·iÛÄDHoÏ®*Ã-n;ÏØ‹­@Mw#7>XûWŸøûj|nÑÚáÕcžØç­zÏÅ Êþk¸®`ŽfÚ—FV6úëå½¶‚ɯ&™ÝSyv<\4¿-$žÇH¾¹²ˆáî•>OÃÖ» Z²×ôä¾±”IÈííZUSQÔmt«o.åXáŒe™qÖ߬ï&G‡L¾û Çjþ¥áOiþ.šú;(eE³m®òƒÏj£­|D‚ÇQ’ËN±›Qh9¸h~ìCÜÓõo‰:^’-A5Ä—$);ÔÓõoˆºn™kÑÛÜ^<±‰|¸%WÔúVþƒ®Zx‹H‡Q²'Ê”tnª} bx¯ÆÉáë˜lm-ûQ›•·®=O¥6ÛÇvËá¶Õu+gµu}†Ëôµø™¡ÿaj8š5ÞcòYy‘Û­ x³Kñú•œÃÉC‡ÏðšÊOˆÚd÷2­­µÌö±6Æ»EýÞ}3Þ­øKÆö>0k³ao2GlÛä1ö¯/ø¡+x›âž‰á¸Ixà+$ªNyý?{¼)mo1¨TE ©kÄþ'¶ðµŠÝÜÚÝ\!$m·q湫/Œ¿Òe¿….NÇØ"Ù—l ž=né¾9Ñ5? ¾º—;4ÎòýTúVD?t†š#=õµ¤®.¥ˆˆÉ=9®¿PÕ¬´Í2MFêuKd]åÉí\F¹ã[mSÂz€›J¾†ÎâÞEŽy ß/LÖGÁ›¡£ü0žöXä•Vw}‘.Iç~U¹añs@ÔëÊŠë}± ÉåüÌ}…oh>4ÑüC£Ï©Z϶¬¾gÊPŠÈÿ…Ÿ¦lûOöv¡ýŸ»oÛŒX‹ëŸOz诼G¦éú(Õ¥œ5«(d)Éaêk‰š9Romïl•—1mi2qòúÖ‡‰|ggá³kµ¹¼¹¹ŽÞÙ7>ÞíJƒIø¥ë­¶— S¥äÈÌÑH»Z-½˜W[ECus •¬·7¬PÄ¥ÝØà(Å'Äë9Õ®­ôF])X¡¿XÁ#ñé[š—‰í-t8µ(ažîÎÕû:o#=Î+Ç>x¢ÃGñˆcº±¼ºûuÎÑåÂXž^í§XYéöÂ;+Hí£o›b.:ÕÊ©©j6ÚVŸ5õÜ‚8!]ÌǵqÃâJ­ªêSh—‘i,x»lcofÇ\WG¨xŠÚËFTŠîà“û:î8Æs\ΙñgFÕßÙm/ì‘™%ÂrëÅjh>9²ñ™qga| „82s—Ö øßIñ>£yga ÑOkþ´KÓœô¦ÜxêÝ/f†ÓN¼¼··s÷0¯ÈŽ:|{U3Æ6΋©éñM46ŽÈ@\`; à¾x¶kÍk^ÔfÒﯯ?uV=£qúWK¯|HÒô=j;QÒoRIdòá•âXûƶÎmGS ¹à‡øÜÖ]÷Å2ÃJ–im'û|LVK/ã\ ’}±Þº x’×Åz :­¢$ñ6Ÿá};íwòcqÛcïHÞ‚°嵞ÐêÚD¶6·Œ]ÇSÐLÿJÝñŠ,<=i³––iÎÛx#ååoaYZo"¸Ô¡°Ô´û:{õ>wþžõcÄ^2FÔcÒíl§¾ÔdO0A辦©è¿­uÇ¡‹9¡»òL’‰<¾qŠíh¨®$0ÛË(Bå°QÕ°:WœÛübÓ¶F•¥ÞÙÝ`’²€6ÿõëVÓâ^›.µ—{ey§Ïpuö”ÀJèµí~ÃÃzLºŽ£6ÈócØ å“â$ÑGåþ‹qm¦L@K¦#„ŽÂŸã¯Ã3\YYOxÒÂJ:/È¹îÆ¸ï„~,¸‡F±Ó±®œ\JÅî‚b0I'5ítQ\V­ãäƒQ¹Ó4[Ôï­¿Ö¢8PµgÂ:³ñSÏl!{këc¶hªšf­ãqe¬>›a¦Ï,#uÁ‹¤`ô§økÇž$Ö.ôëxdG¶YË `žß¡®²Šò‹þ6û.Ÿqáølå )T–åר>ž¼W[à ~ßRÒ¡Óíín£K8|Ù¨¥yÏ„u{}'⿊.®GO‘,Iàzô­+⛨ëãE’ í/XnHæ-ô­_x’ÃÃ:ÚïœüÇlQ¯-#vVüB[&€ëÚdÚdW 9]ƒ/=3Ž•ÚÇ"MÉFwú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ç>5øWJ,úó#›æe@Kp? ÔøYá×Âún²mQoHÝç–÷®Gâ-Û>6é²´¡£BÃýœšéþ8XÃÿ=¨ŽÉÂ,XàŽ*¿Äk«‹oƒÖÆì¦TDs튷 ¦²|•o¡$ÐÉmµfYWœŽô|Ð5Ï Å©ÙjѪG¿tJzש׆üK¿½ñ'Ä-7ÂQ<‰gæ+L£ø«¨ø£-§†¾KelŠŒê°Ä«Áôâ¹í6OøW¿VòÿÓ¯W9n>féüé<7áÝbÿÂqDçû:Örf¾»“ýd™ì=;ÆVVÞ𮡨ù‹4ר-­NíÛcÇEôõ¨„©àÏ„cV›Q¾„D„öÈàϵnü>¾Â_ "7Ï‹“ Ý>kð¼~$ñ:®¹o7—ò²}­þì1î×ge¡éPxT^ÜÞ5Ûé{™‰=dï\ÇÃoËã/Z¾¿b±\HénqÊdòE7Æ4ü%cá:îVmNã¿Ý,3í]Œí­<-ðˆi–`,“μ|ÄõÎ=kká–‹†|nÒ¨ŽGO:Rù®áÜÖÚ¿ŒüCã[àÞÝ™RCØãðõ¯k±¼‡P²†îÜ“Ê 8úUš«¨ª6›r$g”ÙÏÒ¼/ே¬µx±§|:ðæ­)ŽGŸdå_w ÂŽ=kÔüG²ü)¸”TŽÃ(zrŠÉøë7ÈA;ÿ&AíW3ðãNŠçâoŠ„¨ i3Ôçš­ñ/E¶ø}ࣧhÍ7—ª^sô®±“X¾ðÑáðÛ§³ØŒ&\WƒŒÖ øoÄ6Ÿ ¡ÓoÌpjv×Aìãy2ƒ•Q\þ¯ã]Næ+}?ƾ–ÕRXÊÝÆ¼«)á¹ü«¥ñî°\g¥kü8Ò5=Â1iš»Ç$°1A±÷½…y‹l-¼=ñ"KËY¾Ë¥]ª¥ëD8<­{ž™ši°-ˆO³l6t"¼¿á™ˆøÿÆ…±¸\¿ØXO©x÷ºŒšŠêš<÷RK”ù˜e¹WOðŸ]³Ô,µ›d·–ÒïÎiç·«fãÛŠ±ð¶{x`ñ3ùÁ’=JF/ŽØô¬?ŒòÇ=÷„f‰ÁGºÈlu\­v?Q_ᆨd}œõªÞ°‚„¶Ê±©Ú4‘Ôk/àdÒÏáÂÿt]°Pªx.Îm;âç‰_Q*oÞDìG+ž+6 üoÕÈ€¾˜°¸oáfÀàõýF±Ð4Øôý: ´yÚ‚´+ƼGö?ôBõƒYKȉ<)Áâñ &Ö¾(øbÓOC47›3'!T7R î5éš…uã§Û,?hŠYe#ø˜¯5ÂüÐìõ߇7Ñj(e[¹š79çhéNøÅ¤Yè? m4û1ÛÃr»Fiß/®ìþØ-«$i!ÝÅ^ðºø–_†¶VZ]„Íh3\yHÛRü+ðþ£¢èš–‡ªMo0wîÙ»±ô®ÃÚÄþÔ|Iàù +²X£eœàcô¯c‡J°Ðü ö2-cµežN˜ÊüƼÏÁ -<)«ÙhÍ}`ÂLÝÝ‹Œ Ö¿À"Oƒ¯—ím€NqY^·|w×™†BŸã¦x©|V°Ãñó@òУ\É)%£·eÜÜûVïÃ}ZßDø_£Mp‰¤ò—hç$ñ^‹%̸Igº+8Ô ‚29$ôáº*é«ñ:þoý£P¾%„Ìï¶oR{Õ¯üCæ•yYeîîâ¢×—ÄÚOŽ5-S»/!‘€¹€õ KðÛÄÆïÇ·ñjzØ5+¨Ôyapny¯i¢¼‹ãÒ§ü#–`Ë].Xw¯BÒom-m4Ë,lšâ¢Ô òoéq\üs×$•Aû™Açž*ïŒaXþ;x~Tb¬Ðå°; Õo‰—|XÐ,ö,ǶHâsÃ?ùÐüCð߈ücáµ²V¶æ'ßzWIðö+»ÚÛ_\G=Ä$ÆÏncŒ÷®®Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šó_¶÷>aoÈË(b¨2q\øuO hþ°.×±¸3¨ùvØûÕßxSÄÓüJ³×í,VâÞÙxóBîõö«ß4ø¯K‡N²Ó!@®²ù†nýÅij)ðèzÝ‚ÙLŠ3¿wA÷²+'EŸÆ¾ÓˆtF½Ø6Ap’Œc¶s]gƒ4]CN·¹½Õæó5 Æ*ç"•¡ñ'Áž"ðÝž–±—³ua +c·ëG‡üwyc?‰v}ªêl‘G÷`À¬3Dñ–—¡EáK[Hà…\©Ôò žž¿ÊµüUà»÷ðè: …•Ž%vlïWIàÍxoÃzqUƃÌÇ÷«â…ou«/TÓâÜiòn3`8¬Ã^#ñVˆ÷W¶‹Ì%~Ëd®À<î>õÐiú«u£^>¦©­L0ÛÆÙX†?q¾ðwˆ#Ó×Vc±YÚ[«…~fáGµ{¥´ J`R×5ã;^-Ht%õ §R„,vûó^yð§HñO„n'³¾ðü‚ É·´ûÇîþµØ|Lð|¾,ÐPZmûu£‰ -ê;V=Šüc-‚iŸðŒMà@ž{·îǾjÖ¹ðݵG¥Kq¿QþÐ%rHó:‘ôíT¯ôkÞÜXÅj±Á±¤ó7yÄô¨~iþ-ðŸ‡.4»½ IŒ—…„£.Äôýk7ÁÚ/<7âÛýJãAÅ©Ün‘„à˜?Ò»¿ˆž Oøwìjâ;˜_ÍÏ@ÕÍéšïŽ4m>O =ÅÌH#KŸ0yxè =ª]{ž#—ÃZu½´æmRKÑss?AëÀþïlT> kz4Þ¸ðÐk‰”FoK.À?¼? ºðo‰¬|Si¤íÙXÇFh-c#ˆç·Ã&>ëV“?ì,bÒ‘hæòÒõ¥Âã±+Ö´'³ñ/‡ôƒG5BáÙæšY6„cÜ ä.<â»ïÞéZ…µÅí̾a›ÍÁÝ×?‡JÝð%¼?§&™©YÚËm ’ òÞËŒ~µá ø³CñN©©]ÛY˜µ9 ȱÊO•’zg¯Z›Ãú ø#ľ#Ô4¯ìä²zc‹|„3:Œ{WIâ-7ÄßÃùtĆÚ=Fâ?*P[(«ß›¢é^0Ó<º*ÚX™ãÊI ØpyéÖ£øiáoxCH¼Óµ¶òØ´‘Ë›¾o¦+Îfñ Þ›{$Wþ–úþ9[‘»ÿ6ya[¾ø«©Å§ê>m*Ü)”Ôž¤šöôu‘ÔåXdu|ÿârÿIñæ¥ö†5´‘·@U‰ò—ÐÕ>—ñJMàM/‚žÊÞBçÃëšõ=uïµkំ¼YáKÙ4ˈa]#ÌiRrïéSéþñ.ñRñ6vÓÁyòlàªúÕ]CÃ+Ö¾#é~!ŸN¶‚ G WÎÜvóÏOzè¼wà©õë«cM•cÔôößîŽ?»YSYøÓÅÉ™«ØE§éË"µÃ‰2Ò€sùTÞ4ðMójºoˆ¼:ˆoôõØ!æ‘½ë“øÑá»ëjÇX¶Ôv(Ù [n侄W±éQË•kÿëV%õÅOpÒ­¼+Ê”V8ö¯#OxÙ¾"ÿÂXÐiÊÛv¼ãÓÏJw<ãøƒNÔE½„qéò|ã—äxã¥tÞ/ð„Þ1𽨸-õkr$ˆ«d#Ù¬][Nñ‡‹ô$ðíÖ—„UžíåÎåSü"ºmGÁÖïðþo Y<µí“ï\‡…¼âˆíô½XH!Ò´é<ÐQ÷4¤dübðæ¬Þ"³Ö­oÂFJGÎíùì+ÙôÕ•4Ëe˜“ ‰C늲ê6CüCä:GÃßøWÅW÷š$öMk|Å‹NNS'ÐRÛx Åz7Ž&ÕtË«vŽùT\O!ù“Ÿ›hõ­[/ ø—Iñ>¥¬ÚJ’G<£ýÛï(~µoKðÞ©¨øáÍ/•þ³aÙõÇá~ñ7‰tojOânäæò­„lÛØž6×wàï ÝO¬Üø³Z’þçåŠê£í]õQEQEQEQEQEQEQEQEQEQEQEQY^#³¼Ô<9ia1†êXYcuÀx[Å1øCÃÖúV»¥_[ÜÕ.°4‚FÏ\޹¨|Wtÿ£¶Ñ´]"/ÏV¸¾¸ˆÆ±(<ã<“^«o‚Ú(G"4 ?N1‚1S­y†n5/^ßÁâ=*âèÜÜ4‹{~h`}{Ö¦½ââ]&}'DЮçšäŒ’Á±#Ï$×gá}èÓôÆ1íáTfõ8æ¶(¢Š(¢Š(¢Š(¢Š+”ƒÁÂoK­ê÷FúE?è‘0Â@¿O_zê袊(¢Šäbð_Ú¼NúÞ³xo]6°ˆáO_zëzRÑEQEQEQEQEQEQEQEQEQEQEQE‚"ÛŒH[Ô¨ÍIEQEQEQEQEQEQEQEQEQEQEQEQE4¢±¨$zŠP¡F{RÑHFzóH¨«÷T §QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEç~;ø‡©xFGò¼?=Ųþ“»åÍixgƯ­x2]~âÛË¡}‹ÜUo|G‹Æ×7p%Œ–ÍoŽ[£ í&º·‚DIeDg8PO&§¢Š*¥ÕêZMm#1öO­[¢Šç¼[â›_ é_j˜o•Ø$1˱è+Ðþ)ÝÜxÆ ërZÝO‚›vÜŒ€}ñ^§Q¼ñFÁ^TV=` ®oÆ^(ºð®ŸöÈ´©oaU-#£³µ€˜õ­;ï‰6š}Š]ÜhÚª£)b  Þô¬þ;ø~uÿFÓõ¤î‰q^‹¢jÛ:E½ÿ‘$rîòä"´h¢Š(¢Š(¢šÇjœ àw¯:½øÃ¦ir?ö–‹«ZF³Ì– jͯÅ; Û}k£ê²Û7+"ÁßJÛð×´_y‰¦Ü“<\K ŠUÓð5ÑÑEQEQEQEQEQEÓEoK,‹j2ÌÇR£¬¨®ŒXdÐÓ袹Oø‹VðÖ“öý7L[Øã§%±±EGðëÆx×í©Mj¶ì%(NsŽõ×ÑEQEQEQEW ñâ$~6jÖ/r×99 € W_§]CN¶¼U*&d zŒŠæ¼qâmcÃVës§èÿn¶XÚIßÌÛ°ÕÃMã}}BkT¶1Íå…VÝÚ»:(¢Š+ñV·ªè¶Ñ˦i'P'%Àlm¹ÿ‡gñÅÞ£ Ö+mö@:6rIé^…EQEQEQEQEQEQEVf¯¯éZ "]Nú+eny徃­RÒñ>®xQX|âL{£ÆcÝôÍOðÞêÇJøUg=ø nr+šÞð¾«á+˜®åðïÙ‚Æ7Ïä.ßμïÄ´=Gâ>›\´vv!·ÊG½+×,õÝ:ÿI¤ öNxÜVø•áï´GÏ&Ç}‚fŒˆóþ÷JÙÖ|K¦h:zß_JÂ݆C¢îãÖ±Sâw†I]Kí­ä3P“ǵtÚ^§i¬iñ_YJ$·”eXw«•‹¬x§GЙRúíVVû±/Ìçðº/Š4­xºXÜfHþôn»X~¼{⟈´ûßx~t†ÚÒãtÙà.Î#]Þƒ¢x?_ñ;x§K”\ÝÄîSòƒŒWzÌKƒ“^)ãïè×^5Э¢¿UŽÊçṵë^ƒâ-VÇXøwªßÙH'¶kwÚýpÿõÝ3Aø~²ê—qÛù“1ÏZõ}7U²Õ­–âÆá&‰¹ †¨ëÞ*Ò<8€êJŽÃ)åáK x£KñfŸp®Àe£ÏÌ¿…mQL—6b àȯøN#¿ø³â¦‚¼›xÏñu¯JñÆ®×IÿÆš<ÝFý ¾ÑŸ&?âcZ~ðn—á=!,­ RÇ™$` f«º¿ˆ4¿[¬—÷) “…@2ÇèKe­éúŽ–º” öSÿ-íÇ×Ò”ëšZéæüßÛ‹Eë1q´S_]ÓKmKí°µšŒ™U²*ñFŒú+êâú1b½e'¥O£ëºn¿jntˤž0pHê? ›RÔí4›//fX Œe˜šÏмY¤xŽ9¤Ó® qæ]¥}:Ôúwˆ´Vîk[اš¾¨zT׋´OÝAk©_$7EŒ–­¥`Êt<Ó¨¯ø÷ª—Ò|7«Mq(võë€?ZõM Oµðï…,ìÛlpÛÛ¨rÇŽœ×‰ü<PøÑªjv 9ZGwO»Œàgë^Õÿ †„nžØ_Æe@KÓŽ¼Ôú‰4¿ÛKq¥ÜùñDû‚§Yx‡IÔ.§¶µ¾ŠI¡ûêJ†×ÅZ5íù²‚ú&ŸqP¹ûÄuÁï[$€ 'w®RoˆzZºéÂY$bþY•(ÓwLÖïŠtm?P†Ææú4¸—S¿=3éQßxÃAÓµ(ôû­F¹“î¡4ígÅf‡å%Ì®óL3¡waë´sŠn…âÍ+ÄI œÌ."ÿYŠU×ð5»YºÆ»§h6¢ãQ¸#(³1ôuªZwŒ4MRH"µ»YÛjFà OÒ­k^!Ót u–þà!vÛj ;·¢¨äÔ?Š´Ínv‚ÝäŽáFã ñ˜ß¸5oWÖôýØOp±)áGñ1öë;Lñ–•©]‹@ÒÛÜ0ܱÜFP°õ¨õøoJÕy¨¬WA¶ìe=iÇþMElN¥œX'¶}3Sjž6ðöt¶×ÚŒQÊÃ8Îp=ëj ¸.­Væ ’HYwSE`ÿÂyáϵKluÃÆpÌx\ýkcKÕ-5›¼±”K}*íy?Åßé–Z΋o+I3ˆØ'ü³õÍv ñ‘ªéPYi·"g´@ãŒRë:Ñ´{ÿ°»Mqt¼É´FC÷Åjèúî®Ûôû…•á‡B>¢´«Æùÿ„[Û÷¾Ç&?*óo„#Ó4}qµä˜*©c\W«hÚZ›6åfNӎƳõŸè: â ÛÏÞã%"Bì> UíÄgˆmMΙt³ 8luSïYÚ‡<9¥ê/a{¨¤7(v”`zûS/~ økN™"»ÔVp †SÈ­iõÍ6ÛI]R{¤ŠÍ—rÈüdv¬?Çú£z-#¸’)Xá<èÌaþ™®œŒŽ”µ‰®ø³Hðê¯Ûîq+ðÆ»¾Š)š‹´­yÌV²ül0Ê}¬É~"xfßXþÊŸP]ïØП­XÇ>›SM958Í̵‚cZº–©i¤X½åä¢8W©ëšÈƒÇ:Ç–ËÆò8DŽT*ÄŸcU|U®øBÎâ+ov–24š=Øô"º?¶ZA¦‹¿1#µïÜxkÔük¤k:£ooç”’Ú@“6Ö¯uoxoH½_ÜŽWº3g½vßtØáåÉPˆmÀ)À§øk  죕|Øö6r+˜ø-mêž'X“÷&á“iÀÏJ©›i/Ç«‹senÖË ÏÓúÔÿµÅ¶Ñìt%Ñ-æŸË›Ê þÏã]f·¥Ú„·¬1–Y\€9Šåþk2k u(µ ÌöÑÈŠÎ7dïøVGÂC¯xVW˜Æ÷NЫã&5ÏoÖ½wÁþÂ^ƒHŠva$ùÔæ¶æbH㪩5á îÄ_õ½Büù²B‰[£qÿ ·ñBò_ üBÐõ <ˆÞà¥Uà8Ïz‹â=»øÇÂŽÖ‘¦•|Ü ù‰ N:ö=7FÓtxÚ=:Î+dc’#\f¯Áá(Ðtÿø^ú5ŠZÆaš/1ãÙÁoš½3Ä‘ØZø#[±ÓDQy6ÎZ(ú'Àüðý¦¥à{‹›èÖ\³$a†B­Gðfi-u¯YÄÍäC;b"rÆ=*·ƒuéü@×õM^Òk§·o.XËùkÏ£sªYü^´Õ´:ú+ €‘Î<–AÉ ç?…{â¶å ;ŒÓª®£0·Ó.¥nDÍúWÍß ¼Dš:ö¦ƒíÔÞU´@|ÌÄšö¿øn}>)5]T‰ukÏžg?ÃþÈöÑ꺔F™q}pq(Yx†âK¿_j:Õµ›ßj ÐÙBW)xö®ÃMðÄÚ_†--56Ö%Õó)ù]ÉÎÃíÏJã|¥ÝxãIÖÒ-«g’(›ý_˜zìµ»á¯_ø_G6zÔ‹5ª½ÔŒ9FnËô›ðò3®i·š¦©üJtùåbþ ®Hö£ðwS–©âM[ÞÂiÿt§…ü*ž¯âãâ_ÜZˆäºÓôÏõ6± ý¢\ã'ØV¶—ánâ éïZ;{NdûDvïÌ.~_×U^¦©ñ‚úM6%KÓí~ÌYFÐHþ} fLƒÆ¿qßi¦œò29þʽäÀ¥¤é_<ÜZ|sº„I*ÛYñæ)Á]¼qø×§Þü8MEÏjÓ[7XA´ût®KÆíoáXô¯øf³ÝjlI|â<àœþucâm—†þÛéö@GtÌ©ôsýî~™®ƒÁ¾¾ð÷€l,lbî}²\<ƒ}ïÇW)«8¾ø¿o¡é¥amvܘFÓ‚yçßúÕ¿ŒYø@Ò"±„AwÂ}£*Z½ñ3Å7Zo‡4½6ÎBš†¨ªÇðŒ ÍYúv‡wª&›cml¶>±u–Yçù^îQÎyìMPøŠŸðév¶Ò—YÕ/ÖRã–7{ij¿ ¦×gÑï÷ÊhÈ–ïpù³žµޝõ øÊ=~?µéâÙmÝ—Ÿ,§ëW¾èú=î£yâÍ:úyžë!á“þY“Ú½N¼»âuƧ¥kÚ.µaj/–Ð6ûQÉÁþ,W9¤xÏG×ü¤Ü˧>—¨ÂYZ7N$Èè [mZëRøÍ4óXËq„~TQ'<ñó`ýjÏ‹½©xßBÕ´]ö!nþ\ìêm$uç§ZÎÖµ—Ô~6YÙÝÇ,é§Æ Ú¢õr3»õ­?ˆ6Úæµ¨è÷Ú&‹v“XO™ e:¥ñ¶Â­4ž·ΈÒ†ÖÄÝ ÃIøK‹[xãxLl²çw®jχtkIþ5Õä 5ÕÍ¡’YrN8üª‡Áù®/~j4;9dŽ2Í÷F8æ¹tñ Ðôáÿxaü¤CÝ¢g#ûÙ¯Sø[q§Ëà[(ôùD‘G¸^½ëµ¯øçkVzKÃm–[ÅÜáyc]Ö«{cᯠÝOk1]-™". akø£áÝGV¼Ä×—7l^Wä·°¼'ªK¦|uÕt¨0-n‹(ìØ½Þ°ø¥@Þ šîp²4²2Ã8Z>(Å~,Š‹hîHEí÷©ºD áº½Šü_d¥œC|ƒëè*§Â¹ßþo‰`…bÅŒ§>•oã>†¶òé¾)…}œÊ%xa‘×ü÷­kx´Ïx³K¸Hcxtû_6B`»ãoò5ÌüE× ŸôM Âïam‰ >óvã¿Jµñ5ïµý.ÈhúôWVò¬ªíß—ë^©á¹î.<9§ËwGpЯ˜ÕMi;ˆãg=f¼ÀïâϦ¡zÆE· WþÓIá/Å)|C,Š4Øcm„7;q÷qT¾ \mjþ#Õnÿys%Æ2ü•\ô¨ ùÑh/²Û‚^ǶU:gúU_‹zl7?|5 Qª<Ò¨rƒüµ>5iÖº_…ô›«HR›{´XÝãÿ­ZÞ9“S¹ðV‹`‚{¨dIÌ-ÿ-p:b¸mGÇ–"Õ4¨õm"]*þÞåNëÇÕürŽÞ_Ù^ˆÔ¹¸L69Ú{UŒÄö_t«KFdKµUr:íÀâ»-GKµ? ^Õ•Oá±Óå®Wá%ÙÓ~ßݽ ÈÕŸð«Ze³Ôïo,.¯n.® yQ7qéZÞ°Õí~ kM&-¾w™TH¸½1\ï‡tHõŽúºÉ´Ç™1Ž7qŠ·ã] >xgW½±¹’KZ} ž6×ùÖ†‰wgoðÎ=" ú夵Á•-Ž$b:ƒßšÂ]c_ðÿÁ+û}B í®ÕÄÆÿëW¢xÂÝþÙBè6ÉhYÎ:’3šã>Æ#¸ñ*¯Ý[…ÿ¯j,2@ÏJuQEQEQEQEQEQEÖPÊTô#¼ëN¹ø{ñFmnk)¥Òn~ò$/·$u»-GƲø²¦øZÞí¤•€’å¢(‘Žç&³¼oàmE.´ŸéÈ×w¶|èÇÞ‘{ÕO_ë¾7ð|ÖöZ5ݺ Ì‰*ív>¯ü=Õµ-3Àí¥ÜèW°Íi ¹9“w¥dü1:ê+} ]ÇüûÄØùP{ÿ3YµÖü+ñb_eÜßÚÌ›WÈ]ß7¥^Ö¼ ©x‡ÁSÜKnaÔ¤¸û\pŽYOeÏ®)ÚŠîõ C£Þ6¯$_gxÚ& ™Ý»§­\°Ño¼ðâM*ÛMžòúæ6Þa¯çT~M­ø~Ý4}G@º„\Î]®ù5ìTÖPêTô#¼Y4«Ÿ†_nõd±¸ºÒ/Ç&Ýw˜Î{ŠžþÂëâW´íAtë‹m.À}û„*dlç¥Pø&±wã &m?A¼šÛO9g ÷±éùW®øwV}kFŠòKi­‰VŽUÃ=«Z¼3Çk©h?´ÿ½œóØF›r›Šõþ¦´îµ ÿøC5»ùtÛÁu­À#,ê›p»½3מÕÃ-^ø)´ëýQŽtÜØò=1ëY /n´ë }¤ÞÆšŒçl m=Íj…»øuñP¿{9ît‹å Ï {ŒoéW.µ½[Ǿ Ó Ñí.ì´Ûi„÷©O0áõ¯W¢¹ïêÙž ÕnpÄ‹vQ·®HÅy¯ÁO‡‡Oµ!Õ#?h›˜"q÷×ë^×\ß4{wÁºŽŸhÛg’3·ßÚ¼ëÁ¾ }–ú›¤LÚØÝ™ˆ…Sýâǵnx¶ÂÿÃÿ .l죚êþçýaQ“¹ÍÇã[¿ ôð÷ì-d‹Ë“| Žw­ñYõfðdÖz=¤—77GÊ"1«ÜÖe‡ƒîlþ Ë¢CËé­X¸K‘X>ðþ«=Ž›¥¶›q§ØY6ååZâ^Øÿf¦ð°¹ð6­¯[Þé—W&{g‚ÁÔô»Wwáýö85 CProµ$¦xqÂ×àØn¼'£k6‹a7ö¤ÒÉ#ÎSäEÏRÇ­Ið;IF­®:³›»† +œ–ë^ÅEp$ø“%þc¦jWÑŠc™wcÖ¼Ûá>¨¾½Ôoµ» ÿ¶ÝËÃ, G={zšúøvãDÑïg¸¶û)½¹i£·ÿžh~è#Ö»êóŒ¾Ôõ3L¹Óà{gqæI}â=ªÆ‰ç‹õI¯.ôù­4å±6. ìzœzV†./> ý.ÿM¼¸±’V–Úh"/»=¸éW>xRúïÆ—5{&´{¦?e‚O¾‹ïøW¬WñãQÿ„bïOÓt»›Ù¯!hóá3Ç5Çü8¸Öü+áVÒîü;}æ¦æÈQ†Ï@*/†VZöâmeu &x`¾wu…É'šÍð„:ß„|]¬Çs£ÝÞ\]¹0N±åzœdö¬ˆ4ïi^/Ö`}:è]j¬žTð§ÉÝ““íÒ½§Åš(Ö| w§Î smŽ;€ÿÃøCáçм­pŒ·7.]÷˜ÞÕCâ7‚¯îõÛ豉/lH/yzT—Þ1Ö|C§3GÑ/ ½˜ä–tرÔæ»ÝÆM7F´²šc<Ƥ=XúÕâ¡x5â7ÚÿÈsø‡OÓæ»Òï3æ,+¸¡''Šë´CUñ¦¹ÛØ\éúE²·kLÄcîúV‰§Ü|3ñF­#ÙÜ\iwïæFðFX©þíXð¿‡/µïˆw^0Ô¬äµG—mÃæ#xŠÈñå·ˆ5?ˆzV£c ÞÉo¦HÜ'ßþ±ñYuÿéVV½)Vwb¼téúÖŽµˆu=ÃO¦ióAyk(2$œmÚ¿ÅLñ\x»K]+þÉQfÎѱóÔ5;ân‹¬jÓt-2Æ[©!(ï Æ>_ëVõŸ ÝxóÀÚÍg%•í¾Ba‚JÿJϸŸÅ:çƒ'ðóéÚɱŠk‰8WÂã ëŸëPü(²Ö¬ôYü5¬hòÁo"¿ïÏBcïQøuõo†—·ú\š=Õ턲™!šÝôW[§ßkW÷x†âÂæ!„ÇñHOñ\‡íe õ Ú–šä*ƒêˆãŠÃÜf€ª¹ÂŸAN¢£š®"h¦dº« ƒNDXÐ"(UQ€juÃn]"EcÔ…Á4ò ÷¥¢Š)6‚AÀÈï^ñOÆúŸ‚ôËI4ËEšk™6oq•KÄšýï‰<'g¢iäkêh«sòÅÞ'Ò»Ÿh¶ÞÐítÛXÂÇ ã¹îkVŠÊqo-2{í§yiýÅü©@Å-æöÂÚú o§ÄB(ä†zôö­?†‹¥é~Óôû{Ëw¸têŽ ,yüë¹¢Š(¢Š(¤ ÏZÈÁéHª¨¡T@)ÔQEQEQH@=Fih¢Š(¦”V`ÅA#¡#¥:Š)8ih¤ ‚ôÀàPT0Áz)h¢Š(¢Š(¢Š(¢ŠáÛÃú—‰õÓqâÖ-:ÊmÖvèÖï=và``t¥¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š§¨é–Zµ£ZßÛÇ<-ü2*3AÒ´`ßÙÖ[–fEù›êzÖ•QER2†R§x5‹ÿ‡‡<ÂÿØ–ÏVò&¦´ðÞ‹at.­tËhgV­QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÉ_ˉßíRp;ןKñ‡@ƒUM6{{Ø®ZM^=¹9Çzô(ß|jÝ7iÔQPÝ]Cel÷âŒnf=…pßð¶tyREs¼Ï²;§\FçÛÔ{×y©4K,gr0È4ú(¢Š+ñ/Ľ—æÏRy–P3ò¡"·ôrÏÄZLZ•ƒ3[Ë÷K VQEVN¿â-?ÃVKw©<‰6ÐcŒ¹ÏáYþñæ…⻹­ô›‡™á]ÎJÅMªøÓAÑuk}2öý#½œá"ï[àädt¥¢Š(¢Š(¢Š(¢Š(¢ªIà âu/‰Ú.,ãʹ¸‚ݶMqyÖºÍ7Q¶Õ´èo¬ä[Ì»‘‡qV袊(¢Š(¦³VcÑFMrÄÄ^"ŸD²y~ÕîY~WÇ\WcEQEQYºö·gáÝãS¿“e¼+“Ž§Ð ­áéþ-ÒRÓ™Œ%¶ÃknŠ(¢Š(¢Š£«êI¤i“ßI ³$C%!]Ì~‚¹¯ |HÒ¼]«\i¶v÷PÜ@›ÜL˜ïŠì袣žd··’y5.ÇØW%àÿˆºOŒï.í´øæG·ëæ¼=k±¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*¤ºŒ²kÈ#î´€%Ô¬¡Tin¡UºKŽióÞÚÛ@gšx㈠–fÀ¢ÖöÚö%’ÖxæF Œ >âæHZk‰R(׫9ÀZËYÓu,ýŽö ñ×cæ¡»ñcpmîµ+he’@©_ZÓ#¸Hö+ýÔÝÉ©®ïí,aó®î"†?ï;`S,u[ M Ù]Å:Žñ¶kƾ.éè|sá©aUÞ`2õìrêzu¼?lºŠÊ263Å ÖtÆÐë¼T±jsÍäÃu ÉŒìWâ­Wœ|`ÕüÝÚÚN¦w`Žªß2ƒYp|=Ò|aáÿ/ÊKe–H˜sÞ½ûcEÑÖµx@EGn5¦g‰b´¨¨z18 ]VÁãyÜ[ᘶ©à¸†æ1$2,ˆ‰NjZk0U%ˆw5ç×^0y~+Yè¶š„bKvyÓ#¾´ßŒVwŸ5£ RKFI0 0ÎçVþO?4‘$‘Æ|¾ŒÀWp¬®¡•ƒ)èEAsif3sqCý¶ÅKÑÌâuu<‚§5%! “T£Ö4Ù¦1G}nÒ‚¢Aš½UnšÎE0\<#îÈGò5ä †x®8Ô²àc¦2k­ñÃÄ>,µ×.î]&‡nèÖ@`äWndŠUy8ÀÜØ¡®!E óFªzÀfœ²#¦åueõŠ`º·,TOaÔoWXÔíôÍæòiÒ4HÙƒ³`g…ðûS›QðµÝåØšy™Ÿ,@;sÅtâêÝ›jÏo@âðËŸ.T|pv°8¦‹«s/•çÅæsxÏåSUI5+§Éw Èz!qš°ò"!wuTþó bÝÛº³,ñ_¼CŒ zH’ xÝ]Ou9ç¿|Ršl:f›ixc¼»ºAû§…œûv®îÎîÞêäN’•6ÖÎ*ÕG4Ñ[ÄÒÍ"ÇŒ³1À^ÓU°Ô–ÎòÊõ¸lV7޵tÒ¼ªÊ· ȶs–ç8¯<ð†tß|(²Ñç¾ÓO3K FÜî'šõ]E·ðö‰k¥ZäÃn›A=O½iÑXÏâ½;Ófúµ¢ÜçW™ó~U­æ'—æn1Ý«.èw7fÖVÕçlYjõÍý¥žÓsq[¾îöÆj3«éëno` 'K𹉾,‹CðÛÇkz±ßÜ:¤Aæä×S¢]¥Ö—oþ’ʱ¯™†Ééóëz]´ÞLÚ…¼rçAš¹¾)!.Z299ãÉh ð®•â WKXÚúL“¶MÛs×Ôý¶Ô1SsàpG˜3NVí'–'ˆ¿÷CŒÔÔTrË<²¸HÐe™ŽBËÄF¢qg¨ÛLص ý¥Ä­71I"õUpH©ÝÕ³rIªºî•{pÖöÚ…¼³/TI5[ÄÚ~«iiúÛF-eìÏ´þßiÚ&‡¢-¾ŽÑ%Šî‘Ÿ­iý¾Ïc8º€ªòÄH)m¯m¯›iã”/Ršà¾+øºÃÿbµ¾Xõ™UQ¾`7 Æ»=ò 2ÔsºF¢B¯œw¡5í&Id‰5 vx¾ú‡Z½ Ñ\B“C"ÉÊêr§’$œYqø—Dšä[GªZ´Äí$æ­Á¨YÝLðÁu’'ÞT`H¨/õÝ+L•"¾Ô ·‘þêÈø&®E4W0‰!u’62œƒ^5ðÙ"ã‹?Þ¯^½Õl4á›Ë¸`í¶*KKÛkèD¶³Ç4gø‘²+Ͼ(xºÛM´´Ómu1 ô×H¬#|\Œæ»KmWL¾ÒšO¶ÛÉ@³>ñ´dw¬ h>Ñ®næðÿ‘æÍóKåÉ»°]êWŸq]¿Ä¯ ÃâO ÎÎŒnàˆ´Dq†¯1ørú-瀵Xõ+Pní7+7~œW¤|9ð&Ÿáí>OËê7åÝÜ ö®ú¼gã7†4»ͬE‹É¥PÎÒuZµ¶Ò<ðÜø†Â9ê{Qüdî${ûÔÞðÕ–·à–ÕõH£º¿» )×,­×ƒÚ³üª/‹4-kú¸ó–ÎGØw°Ås ü>uë/élŽc†Wòs!Û¿¶ïn•éß ü9­xoC–×X”—2ˆ[;GùþußÕ_L‹XÓ&°äHæ]¥£8"¾wðïƒô«Ÿ‹º–‹+Ü5¼Kò¸˜‡'ë^¥ñ/NLøG¨X[ (ãTÛ'nîæ°¼ á(5Ÿ†±]jm!”Û²@7cÉUéçV¾kwgÂZÔ.šhìe#¿$*×1àû½'Çúþ««x²æ?.6ZÛ¼…QWúõ­ø”iŸî¼5a7›£ËÌváÆp§Ò½¶¸¿Š+­Ià›¨ô æå±»aÃmïŠò­zËJ³ø]o¨"ÁaâJ±?ÏÔy÷¯KO˧ü"‡\”³Î-æõb:ÖoÃ-gÀÿÚúˆ3ê…äi‰`rqý+›ø$dÿ„·Ä¢Q—óˆ'ñ5Ä9´ˆÞŽÊòéa½›|¨Ò±îô­ß޶‚? Új+,±ÝE2ĬŽWƒÖã- ß…1êžmÂÝÛX«!IJ‚qÎEKá™/íþ‹vv»û<Ž­qÑêþÖ|6Ñi÷òéšØ‹ ØyŽA=òk²ñ®i}ðž«Ï:V³´%8,qÉõ©þø/MÃ6‹=ÃË5¹­+7Üûׇ䷸Û/‡í/.c³)“ûÒX) ëZ3µŸÀ¾:Ò`ðý̰ǩ)ŽXÙÉq‘Ÿ­_ø™á¨¼+áû/iSÏ¡ ª&›Ícægךí5ßÉ¢|-] ݽª´Yè]±Šæ|'e¡ê~ Kíjêu[ÅiZWoXçô©>j ã__èÚ»;›7ò÷îÁ*:s\ïÂ-ûbï\¶¾º’k {‚‚"ç.Aãun|?¿›Lø£®øb)Ý´èÆøcv'gùÖ/Å i‰ñðCVÔ%&à–?7Ì+Ø|?áÍ/ÃP½¶–dÃ82$þ5µ^5âÝrãÄŸ´ï–Û¦Fûîy¤Ø5kâlPø×KÖôxí%Šq¬cãÇ Žõ£ãí7Mñû=¾ë‘eæDäãUƒ~Òºn½öru˜oóút¯X¢¼ãã‹.¼3áa‹´wWm夃øGzÁÔ|+-‡Â[wÑô¸îµ;ˆ–YeÙºL¶ `}k3ÅZþµ¡|+Ð4k¹ßQ¾"9Iá„yþu£âðÔ?ÛM€JÞñH±ûýwSob.ø+ý©©[¹Ô-!eY!^¦²<1àÛÿü,†x_7á¼»s##@ݽýiŸü#g¦[xpH&¡<Éò—'wcOÿ]z¾•áKO èW‡DŒÇyqw3–±ÇZóoÚEqá]^?ÛÀ5 ÎÉ'Þ”ñ÷¥tÿon5OÏ ä­4QÎð¡cÎÌt®wÀÚtzWÇ]rÊÜàŽe98¨>'éIcñA]9å¶{éšQÎ Èç¼Õ¿ŠZ,Ò4½gIi`¿IÕ^_0–“ýï^õëúEÃ^höw2¼«1÷Å]ª×öPê6Ù\a 8Þ¾uÔüm£|b²Ñ´vši# ÿ>Xœãò®«âE¤?¿±µM/³ì›lØcûÁþ×­^øâKýF-GÓw¢j¬­3¡ù¼¾3J³ñÃÖðIÕt{U´¼²ØRH†ò>÷­?R–ÓÆŸ_X»‰ZxìÚEaÕjO„v1_|0‚ ¬KÌÁ”ýk‰ð?…’÷âf½¦Í<­¥[±ÝnÌq Ïʵlé7…¾7ÿdi¨Ñé·±h·pÈüjŸÆo iÐêú-Ô05íÞÉŽ~ð®úçÃv>ð^¥…‘u5®@Vå›åßð“xFÿÂÏ¥M éš²Çåy¡Jînù>ŸZöŸ`x?KÌY p*SÁÅn:‡FF 0kçørÓLø¿£iÚDdJ¤²sÉ''ëŠíåð|Þñ%çŠ-¥UÓ-lX˜Crì$úóÞ±~ëF¥e¨ë> UšòòfÁ’"ûÐz Òøa¬\/‹µ­WÓ­Ýyû£5Ë) ø¥â¹p­÷9ê7sNšÎò?‹“k«m&•:•²p:_Σð Ÿeø³¯iö/"iÞP‘açjž9›ñ_Ã:T%Ð $Y/®¿~ýKå¹Ízµ‡…t; *].ÞÂà™s,@d1Æ3ŠóOƒv±[ø·Å ÂE9S<Üx¬ÿéÖžø«¤jÆÕ~ÁtÛ$\|ªOØi>Òµ¯_ëmbžM²¤p‘ÑŸ©cï\­×ˆí¼CñŽK]X“¦i¨Â(HÊ³Ž¬GÆ£ñf­•ñEÕ<7¬'÷wKEU†{þuîq¾øÑÿ¼ Ögˆtm?[Ò¤ƒR€M áXô u¯ø/á½U]R{Ëåh.ó °éZ_õ9u‰º…ÙÊØ¦vùüªçÆ.ÛNð®§c Ásip‚7Œm?Jëþëòx“ÁVóÿ¯Ù²O÷—Šê袊(¢Š(¢Š(¢Š(¢Š(¢Š(¯øí¯i·Ze­µêÉw ÙxS’:õ­ý7Æ¿ ùVD´òYqʶ+—ø%¯éÚ6Ÿ¨C}?–ìå”凭SÒuûK¿Ž’ê°‡6³ ªÛN qZ&Ó‡„¾+'ˆ/-šM.ãå’]›‚ýk°Ô¶Šâw}Ò8€m‰{“\Är ¿ˆÚ%Õ°–H,åÄÄF~\Ÿå^ãa}k­é‚âZÞQ€HÆ:ð<'w§üe}Ó‹+×ȽŠg'õôR Ž5Eà(SëÇ~9kšuφ¤Ò"˜µüs)òÕ}ù«V–v4øJ4«æ†ÜåXþ¢ðw‹4ïø ´Re¶Ô,Ñ£0¿ ÇØ{Õ†ú@𾃬x›Y?fKÂì€ÿ œã>õðkÅ:n«ë w?—öÉóáÙ=«è%`ÊNAê+çÛ]^ÓÃ_5»½E–Þ6Bci:Ålø“\Að¢þKû‰úŒ¬ö±>wÝÇáŠÛð?‰t«o…vËqx±¼Væ)7pCc§Ö¹?ƒw–7ZNµ£Ír±ÜÞ;„ŒýæÏp*?‡ ¥øKZÖ¼?âx`‰„¦H¤¹^}³ì3]†}¦j¾>³ÂÖVrY[©k»¸b_öCzæ½:¼Ïã]Ö³oàà4–™äÄïÞ Þ¸­n}&÷àøÓ´+c=Ç”²]2!%0AbÇÖ´4‘qâÿI¢iï#ÁšªÃopþµ¯ð÷ÄöZ/€M»}š…®ôkr~rsé\ßÁU`ñ®¹oz SÝÌYoVÜk_â˜Sñ7¹ýçCþð­ÏŽlú‡€™¡Vam2ÌàáZÁñ/‹ì/¾?K´\=˜IzÄù·zS¼'®íø VÁÝï-“ ®[–éL¾Òü âí7Ñ®—Xhvùn¯Œô«Oe~¿³ýͳ¬²\›Ë\Û3Çþ;Z^ ×aºð¿‡tË ¬Þ&Ó2F~êü~Ù®V]{N³ý .on®-£‹Êóà7¦j?‰Úî™}ñÃAu°Û7ïŠòæï[?uý/PðDVvw"yå™4žÊ´¯´ØïÖ­^ë÷zü•ï‡|Ùb³Ó¼¨äìiN3·Ô€?Zæ<­X[øòÌ[É?ˆnL«"²’ì}OµYø7â4ÓlNˆñ¶=Ü:°ÆÄïŸjÃZõ´õ›û*År¾TRl$;|£Ê®üFÔ-¿áfxzeW‘-$"á•IôëNøÙ­Øê^±³´“ÏÜ,Œª§å\u¯Fðv§a¨xzÕ,gYD*8•8èk¡¢¼3Ç—‹¥ürÒ¯ ÕrdŸ½Ík|Z³ŸÆÞÓt¥35Ô¾nåûªØšÄ Ýéöš­gæ:é%u«GÆ•;Ǿ,³ñ/ƒÆ‘£?Û/ï™ÉAóžIô©õx`ðGÂÑ'f{É­Z0Kn‘¨ø3ªDž|É"]BYÝ àu®ÀZò[|H×î¯<ä‚éÈ€´gj½ÏŠm_ãU¾©—þÍEÙç nÚGZÚøÎÒ¤¾Ô¼™$±·¸JTg1š›Qñ;kZ~«­iFamkb!Š@¥wÊNxü©ºŠxF÷ÃvÏâ{áÕd€;F‰‡Ýjê>i÷zoí`ºWL»¼qÉÕP·Ê?*ì$uŠ'‘¸TRÇè+çx³OÔ>/éÜschI!°1š÷ Ÿ‹¼+:[¾û[èY#Šò¿kv_óÞ#F€¬å¡•£%]{Wmcâøne»Ö• Ý6 D›ÔqÒ¸_‡~#üFÖà ¾ôVt#9nŸ­F§‰ñG[ŸÄqÏ,…±i¹ g¢þ•˜5k½ âv­yökˆ§¿· lŠ„Í¢º_б\ÃuáMVhÝá´•á€ÎÓÁ$×A¡ø–=_WÕ›c"Ưi ,cj@vjgö>·gØmögv݃õÅ,ZVŸË46P$‹ÑÖ0¨5OèúÑRÓmîX ‘"§Ó´«"Ø[éöÛD?†4 *í2HÒT)"+©êdT1iöpÆñÅm#ýåU4¶–6¶1˜ímã…QàT'FÓMá»66æàÿËCÍr0ñ–‹àKË@úz5ÍÓã1 ÏÖ¹oÆÚ÷ÅŸ Gl òãóÝqʯŸÊ½ŠX£š3¨®ÕXd£¤C °Ç§[$rŒH«¾µ-¦•§ØFÑÚÙà 7UDŠç@Òo.âãO·’eû®ÉÈ«þT~W•±|¼cn8ÅT²ÑôÝ:G’ÎÆþñ&‡Ñ´É$iÂÙŽK†M £iŽI}>Õ‰9%¢SGöF~Ão1÷JšÖÎÚÊ3¬„çlkU.ê0?LÕ/ Mü2]ǦGióa& ÛžÞ˜ŒSÄ’!ê®2)-ímí Û‘D?¢‹M²‚s4V¤§«ªMi¶0NóÅiK ú ¾µ1¶€Æò;íÖ´·bY ‰‰ä’ƒš •¡6П¬b–[{mþD1żå¶(½MExWŠLS~Кb4«"ù*¬Dàñ^áPƈ"|»T>”÷E‘Jº†SÔ‘U`Ò¬-§3Ágrž®¨«Lˆÿy¾£4Õ†$$¤h¤õÂã4ϱÛg?g‡>»)µ·`‚"@PqDöÐ\Âaž$’20U—"›•¤VÿgKhVùæmü¨’ÎÖgW’Þ'uà3 $Tà00yPézyR •¾ Ïú±V!†+x–(cXÑz*ŒQÏcitAžÚ)Hîè H!‰cˆÔ þ¼R}š Á¼˜ò:ƒŠF¶äóZŒŸÞ(3ùÒKfœLÖñ@Àrƒ#ñ©$Š9Sdˆ®¾Œ2(H£HÂ$j©ýÐ0)  ‰ ^„¨â–HÒXÌr"º7Xdr¨P öðÜÆcž$‘Uq‘QÚØZY)ÖñÂP‹Š³EV}˜¹ûHµ‡Ïÿž›ïΧtY‘Ô2°Á½WµÓ¬¬³ö[XaÏ]ˆjÕQEQEQEQEQEQEQEQEQEÈx‡á¿‡|Oª&£¨Û9¸UÚZ7+»ëŠè´½.ÏGÓâ±±„Eo¨«´QEQEQEQEQEÌx·Á:o‹b€ÝnŠæÝ·C:}å56ƒáctd–îýÔ+ÜÎrÄÃÐWCEQEQEQEQEQEQEŸ©höz±‡íh\DK(Ï]Ž4Š5Ž5 Š0íO¢Š(¢Š(¦Hždl™#p##¨¯=oƒ^{ç½’ãQ{¦lù­pwÇ­wV›‘¦ÃcÈñÂ0VÜÇêjíQEQEQEQEQEQEQEQEQEQEQEQEQEQEÖeE,Ä:“T×XÓ^e…o팭Ñ£'ð«ÔQEW?7¼9o{-œúµ¼SÄÛ]]±ƒZ:vµ¦êêçN½†ä'Þ16qV§¸†Öšy8”e™Ž¬åñ>„øÛ«Yœôýðæ­^jv6Föîê(m€ÍvÀÁ¨¤×t¨¬£½’þµ“îJ_åoÆŸc«éúš;ØÞCp©Ãßp_­>ßR²»šH-X¸tFÉ_­[¨æš+xšYcy,ÇSmî »ˆKo2J‡£!È©¨¢Š(¢ŠÊ›Äz-¼Ï º­šH‡ †eÊŸJgü%zí¿Û{±œy£5nÛUÓï%µä±ÚŽ «´QESŸT°µ.{È#qü,ã54·0ÁžYQ!qv8¤µ»·½fµ™&‰º:6A©è¢Š(¢Š(¢Š(¢Š(¢©]êúuƒˆï/­àr3¶IœTÑ][Ïj·QL.á"œ‚>´Ë=FÏPF{;˜§U;I³ƒV¨¢Š(¢Š(¢Š(¢Š+>÷[Òôé<»Ëø |gk¸®Ç"ËÈŒeHèE>Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ÄúÑÐ4 ­IQdhWpFïPhׇŞŽ{È î2»{WƒÜèøsã«H-÷ÃÉœõ¯¥è¦î]ÛC Þ™æEÂ|Gð¾—¨ø^òCc¹v_ßù†N3šòï‚—2h><Ô47bRPWôe5éÿ&ó¼2úb9W¸VvÇ]¨2zžkˆø ¢i·º^£swc×Ï´<«»hÀé^ñÁïã-4Èn¨Yäô¨íü§Øø t°.â·‰ŽççÇ| ± áýiRL¸x‡=8­¯|6ºð‡ˆ5 NãQkŸ´ä*tÆNr}ë£ñGŠAÔ4{H >¡säã?tc$Ô¾4ðüÞ'ðµÞ•É·–P Éî*‡ÃŸÜø7ÃÙ÷—_h™œ»0<a]…QEQ\gмáë­U»m2¹xžF•W [ÍyÀ]KÔÓVšúÊ—Ô!•7mj|fҠ𵆟â }‚é.<³ä|¡² ä~é~Ö¦ñƒ´íJá6Í4@¿Öº*(¯øë¢XÚ®™ªÁŽîâì$¬‡Ç^kÐ|Oá‰|žavl` öÖQEQEQ\—‰|Os£ø—@ÓmÖ9þVY”ýà uÖÑEQEæ_|;¦ÝøJïX’Û7ö誒†9ÆzV·‚ôó¨|(°°24^}–Àã¨ÈëPü8ðþKß>üܵÁàÂŒõúÖž±ây¬¼k¢èVâ6aÚ|õU+ª¢Š(¢²%´¿º#Xâºxb1ôe­uQEQEQEQEQEQEQEQEQEQEW„ük³ñ$VÏs>°ƒLyBÅn‹·þú®Ëá¦âK}"ÆmGSŠ]<À<»tqÇ5Ãøè½·Ç 6H óâ)õù¾o·³¥jz”—pÙä(ewç³¼a£ërücÒ5’d•ZH_–0;×wâ;Xø"i-uù?´­CLfXÇïG÷qYÿ ·{cwní¶Ƹè1Þºï…(½ñ7†¤}FA%ͼ¦"à}à;×}EQEgë¸þÀÔ3Óìïü«Á¾ê:œÂišgÛ uë Zí*ð£¥ê:†¯ý¡gy7•q ˆ(ŒŸî×aãoÅá_ UÌžp«n‡¡vgüö®diÞ"´ðdž(›ÄWGPXMÏÙò<œuÛŒV„ºî§â¿‡1kz&¢l®¢‰¤˜*çs÷JÂøu­x³ÆÞ¸fÕžÞh¥`·[éòãüõ­Ï‡>0ÔµçÕtmZU:ŒŒ‚E\dtÎ>¢¸MWIÖ§øÕk¦É®¹»krésåƒåg?(_óÖ½'ÄwÚ‡‚þM,·“_^Æ6‹€Ÿ1$õÅqº‹ÞéÞÒüc·¨Ä<ØÚâ+—Ý•fœ~5èZå´ž'ð´w:f­=‘)ç$ðŽXc¥ywƒõ_k¾Öa:…Ó=vYTîy˜tA]E¤¾1Ôþ¥óÝÜYjöêì  (Yõ½kÄÞ¿º¸ñÄwÖ¬wEÂãðï]Ôñ]ô?Ûî¬Ó[L§Ê·ØѫЫ†ø»/•ðÛS gpUýhð½Õß­&+[dz˜Z#,±õàVÂ-{X×`×¢Ôu¸’ÌqH@ù{gç¥r ¡êS|j»Ó¤×® êÔºÀÈgíÖ½ Æ%¹ðƒímEÛ]êó°†  ±îÄ{Vf¿«áÏ ÿÂMˆ.¦½…VY¡‘Õ£pz¸â¦ñ¡{â/‡«â}3SšÈÅjd1Ç™‡'5Íi·‹uO†Í«ZÞO%Å®4“3ä·Òµ¼aã-gM¶ðÞ—+\[K¨ªýªæ!–SÜ~jxÆúE’ëê~¤Fä·2ôÿÒøÛmpÞ[ÿ¶Ê-UÑ>̼$õ&·¼ ëV¾ &¿,ÂâÙEº4jG^?ýjä¼®øŽëân³áÝGZ’á-¢u¶(ù†9âœÚLjt_ŒZfw­Íue*y¤0°çƒùTÿ/5ï 5ž·§k3Åm$ëÛ(à{Šeö«ãí-Pµ–i-/ˆó XþX“ÔŸ¥_Oê>7ñ­Þƒ¦ß=•Žž¿éGÒ7 ¢ÃÅ7Þøˆ<+©^µÝ½Â·–O¼:ð*õ*+Çÿh Â9¦nmªnÀ&¬ê¿ð’YxþKm^X>Ï–;?,Ø;ý=ë¦Ð¼[6§ðÔxÉp-šO,(¯=±ºÖÞ;é,u§Ò|5á«+vC=Â"×Ãx‹P†6*ØÛ awpyæ¶>;ßBž±„J¥ÞéxµQøµ§\êŸ t›‹lË©W˜Fz s].…¢x_Wð}Ì’± Ë´œtç½?á¶n5?ì<ÛX‰Š¤¥Éóqßšô+†øâ=/OðÅÔÞCç3"ùaÆï¼+˜ø«imâ‡6÷ön“KlÉL—Ö—„#¶Ðþ>áóÛ4§ÌnXâ¹ÏÍ·“­ «˜‘Ä Ç-v?õ;I>ߘncs"ü¸læ øw¨[Eðªß!híØ0/ÏLVWÁ+ß>ÃVypÇ,z*‡€¯mcøÅâ@f¼8R[ŒúV§Š.`‡ã‡|Ó³l',zwÀ®óÅsð†¬èÊOÙ$Ús×å5æ? uO쿃ú•Ú–[s#ˆ|v¨<+q­àÍO]Õõ½÷íµ¶¢}ïõª? 5ét­ÞÚÙQÝû+«uÛê+½ºøµ£ÚøÉ<8`™çgò˯@Ý«Ðh¢Š+#Ä7VÑèþdñ¦ap2î+Åg›¥MCZˆÈª)>æ½ýY\eXê+Ê~-ø¦æÇPÒ|?k J÷Ò ÜH›¼±œqï\¯Åk;}"? [­Ô—W?h,ŽùÇøgúWyâŸ[j :ëò³!!Î~•Ý$øïáãæ&ÅUç?Z¿ñêá²4XÕ•”Þ© ã>q¨xG¾¶ ðY24ʽ\n?ó®—Nðχ5_ÚËsuq%«[¯˜>ÖÁqŽAæ—LƒF±øq¬&‹nðiéÂ6gÝæaOÌ?Åø ›š¥¿"/ÚBÒI˜FŸdãwCÁ­?Šž9ŸMðÄGIAþ•p`3ȹGqë\ÏÄ[{;…VŠo$¼¿º1³;I»Ž¤ã ®ÿÂzõ”ž K4cºÏNS#öåkœø uÚ¦£hsv[¯\e ¥Xd‚+ç -¯ü/ñ#UðÕ¤/äk/…ØvíV<~„×Ñ66‘XXÁi …Ž vUŠóÏÇÃ{äg™”žO5{áìßñlôó,Ѷ£$º1Þ¸ß3Dfñ£7Ÿ(Ï-Ö‹fŠ/Ú.þY˜FÔÌp>è¨þ5[iÅ ëv² ´ø&1É$g–çð®Åü3á;ß ‹Çy- [صÓGçY·cNƒàÖ –KO"C;²ö<úÕ‚ì¿ð®ì—+»sL×7ñÄW÷tï Ã,vR×îºM`øæÓNÒ|}áˆm'i|©CÍq$›òwÔý+Wâ·qâ?†ÍràãÔ¼½ËÑ”6¯EÓ5fWÐ4ËYca%±y€ùTË“^sà¹RÓã—ˆZíÄe•¶—ã#5©¨ÁwûAé·Lêö«•äa°nüyhäðÆ™•@{ÕïÔW¤é‰h6ðÄá—È ÿv¼?ᾎ‘ü@ñ—q<,›$+¸dóþ}kµÖ¼-áí;ÄšUÃ­Íæ«$ʱ“9. wú ôÚ+Æ¿h)£þÁÓ!8,nsJê¼e5¿ü*{Å®Ódsí\÷…µ³ üMJÖ$ተ‡¡Éïþ{V~ÐËðž÷^Õ.Ä·70Iå@±¡G֗Ἲg…llLjâåæy2y@¢¡‡Á>øί¤Í.rÒ1a¿ý+á ½´“ZÒ'¼k»{)ÂE19ÏêTW†üQh%ø±áq½X)`ÏOšµ>;\@|1¥¢8'íjTÔTß´¹µŸ†6sÛnu¶ +…î0tVµg‹{Ã:M?Ÿâ Ò¸/é·Vÿ¼K{,?µÅ#Ƥu]½~•{š»è,N›r¢þ[•‰\–|p?Ò½’-ÞRoûûFï­>¸/‹^$¸ð烚kXRI'E™p^:× ®G§Xü"7ox×Z…ä@€…'“…1ý+á—ˆ&û/‡´;v‰¢kšp9*sÅzÅÊüCðúxÁwöEs(Œ¼G¸a\GÁg»Õ­ÝøÈÓ£û$ý~oéY¿4Óiñ?CÕ¯DŸÙ³•‰äl ú×s­xkÂ؆}HÉ=²ÁrwaëX_®-í¾Å º}š6ª[–åWÒ»I ž ÒD%H±äÓŠ‹ôDñ…ïô×ë,giô=«Ä¾&«¬øš×EÔ û„ï8R8ß÷TZú*Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+ÄþÓ|Y¦‹I£VÜ¥N šÊð÷í'÷«u÷wN‹ˆÅÌ›ÄcýŸJŠ_…ž›WmUà¹7ŒûÌŸhnµ.¥ðÏÃ:¼Þmõ´Ó8 Ó¶=ºVÞáí7KÑÿ² ƒu™ÎRS¿vzç5ϧÂïE1hâa-¸À&`Ÿ–k­³²·°¶K{X–(`*ö«W9}àO êw’]^i6óM'ÞgÍXÓü'¢i–sZ[XÆ-æ’3È#Ò ¼ðG‡¯äq§FÅT 8 ;bªŸ†ÞÛ…Ñ O÷*KŸ‡þ¼·Š ‹/2(—j+7zS­üáÛ[)lá° o/ß@Ç Vt¿hz,éÖ)oÂí•SÕB‡¶¾KØ4áʶá"¹Îjω<£ø¡â’þó¢û’ÆÅX~"¬]ø[L¾Ñ Ò®#‘­!UŸ©j¶‘à}BY×O³1G:”‘ –R^ V´ømák̶úh^û ’™õÚx¤Ñ>x{@ÕŸR²¶a;@-ò©=p*9>x~o/ˆ^) Ú¶ünùwz×eEQ\UïÂÿjZ•ÍíâÝJ×]ÐÎÛyªÐ| ð¥ÁšÊ ›f+ƒå\2ÿZët]ßBÓ#±¶y^4$î•Ë1ϽQñ7„4ŸÛÅ¥ fˆæ9á“èk&ïᇇo´c§\G;üÁÄí&dR:`Ð~è-£G¥Éö†¶\–SûÃêÞµkÃô Ýùúc\§ÊWËiI^}¨Õþøs]½7z¬“Ê[wÍ)À>Þ”ëhWZZéÓ¥ËÚ©ÎÃpÔš7Ãý Aµ»µ³Š_³Ý&É"w,¸öÏJƒOøeá}7"+'ps„–Bʹô^•'‡>è>Ôd¾ÓâLù{ä&}0ü5ðïöÔº°†á.ämÌñÎËŸ® V¸øQịózësöœäIç1aøÒj_ <9«ìûwÛe)÷srØÓÙèvvzéy­Bl"fÜX{×.¿ t“ =ú[Üm–àˆÏá[ÚŸ„ô½OFM%ãxlcÊŠ=8íY:Ã= K·š 3uRŒ2¤Ì)ºÃúšßéÆî)÷nß1½ëWüKàmÅp]^¤‰sÚ“Dû[•bh·^]âÐKb£…cÎ}sëU ø}á»}*}9,so:ì}îYˆôɧZø A´Ð¥Ñ¢·u´˜æLHC7ãÖ xÃþ»7:M›[ÈFÓûÖ`jmKÆZ“®[è×—‚;ëŒyq‘×=9¬ `¶Öþ,Ã$JŽ4«_Þºÿ}º 郞oÄ>ÐüSsúµ¼“4KµTJÊ¿§Xx+DÓ4™ô»[wKIÛs§˜j®—ðëÚ-üwš}¬J¸l”àŸqSkþмGx——¶Ä\¯llT°ô8­! i¿ØƒH6Êl‚íòÏšºt°M%ªç÷m3`ýjΟà½KÓ.4Û[B¶S®×…œ²ãÛ=*-3À^Ò£h­ìsâËŒYPŸîƒÒ¢Ñþø{D–æK;V :”;œªz…ô¨î¾øv{(mb·–ÕbC[ÊQ˜wÉkg@ðîá­8Yi°ùqç,IË1õ&µ¨®&÷ág†uFKûÈ.%¹vÝæyì ý*kÿ†¾Õý¶ ‰Š€ë†ã¿a¢ÙiÚJé£5ª®Ð²¶þ?ædø_ Ëršçì¡·}“Ì>W\ýÚë¾Ãl,~Ä!Qm³ËòÀão¥rúgÃOéZ’Þà ¬c}ñE$„¤mêv4Vv³¢XkúsØê0  np{ZÀÓ~øgLŽxâ´gY“Ëa#–ÂûzU ø Cð¥Ô÷:l ³L6–vΠ®¢Šdˆ$‰ÐðH¬ xjÓÂú{ÙÚ3²¼#3õ$š›]Ð4ïiíg¨À%‹¨õSê+Møs¢é×1Ì^îçÊmÑÇ<Å‘ »¯øBñ5Âͪڼ̫´+(ÇÐU­Ã:_†m¤‡M…â¹!¤-Œzg¥géŸ)ºðïü$±Áf¶L¿f ïòÇrÞ¸¬[¿‹W—ž•&—oæi׎#e)—Vã'#µzìo¾$ï(5Èøÿþc¥ã@†-öpOOjóO‚ßð” >V°ŽÓì&é¼ýçæü+±—ÆÚ¾¹â«ÝÃïm –ƒçûB’Ì{í«¾ñÅ߈u GHÔàHïìÉ÷Z¢Ô>ù¶ád¸kuHñÉÔj.ñ…üM¦[k" ¬õjb\jè¼yã(<¡¢¾eÌÇdçï1®rúûÆ€l©*îföçµséñ/ÄÓx=vkvòHYÎÌ—bz(í[òø·WÕ¯ôí;NžÞÂâk1u)r~nV)i#YðDÖQΑJYLA›È赓cªDŸ ?±ÄS¶§öc¶ÛúTÿ |>…áä]^ô­ûžŠOùýkÑë?\;t;Óœb&¯4ø6<¨ÈÄ·LN>•SÂúŒ'ñ®±u¢ZÅcöv+=Ù\É'\n••ðïR‚ÇÇþ*ÔF–(ÛŽ­Î*ηṼ[â]GSð®§%†«nBË $8ëV|wâM;WÔ´]v]J[fdÌ€zÔ?C}¯Ä1\1 )SÏÿ®»xcÃ^ñÅçØ¥‘µ[äiYùUwdý9®SÁ,?áyøˆ!|¼{ôÏF§ão†ËANõ©ñÙaÒås™ùÇýìæ®üQÕôÍ+À–‘jbñ¦òÒ(³»oZã¼ekw¥ü"·šòá%)åYD¡QG_©®ó@Öá>·Ò mçÇ£Ç3F0ËúW3ð«T:'Ã}OQTóLwLvôÏ4¿%K‹ŸHä«=Ê»@vÔ?ÖseáÉNï±¬Ëæ€:tæ»_Ìð®þXÈ)ö>?ïšâü.“à¬óÆû¸5ÐüH×ád2(??›»ß®wàAÎ¥âbªBý£úšöº+‘øŸøWzÈ䦹 $òühíUšsg P½síRü òÇ‚$TH¸`ÊzƒïXž…Û㧈$¶_Ü&VF‚N?úôß ¤7´ˆ\ ;#=ÿ‹åÍ{ ¦™ca4ÒÚZÅ “Èȸ,}êåâZëîý¢l(m¶Ê¡qõ5ßjºð½Ò¦²>6ÿøÐÄó+túœVg‹mFãSñ ´Z¡³½[“»÷A™¹<šèoüýŸã½/_ÔõöšþI|¸ãHïã¡ÅzÅâ?#•'Ðî|Ò°y…ŽžµÙ]xJç[ðØ´›ÄS5„Ð˱q·æ¿ôë}'Áž±Òî^çO‚é”ÌßÅósøu¯Qñõ½¯ÂëÉ‹G´ ¾äŠ¡ðvD“á…®Ü ¡ˆíÁø6û¼SâðI%näK…hXêÈ~:ßÙQ²×,ýIàqúÖÆ»×Ôl4{«xìa¼h¥$p8Ïó¯Bñ$È>_IÂÿgœø p>Šh~jFÿ>[C+"žËí]Á›KwøooB…Ûz2ä{Ô_ltÄšg†u Y g¶x*àôü«Šñ‡|GðâÖÒî=Lj:`º\Ç';yùx5ïZmË^i¶×.0ÒÆïV«ưÜÜx3VŠÍ™nÙ¶<çÀ~ÏåÂw°|åºbùíÀª~Ý/ÇU¡…ŽÅ>dƒ¦08üê[ù/Ú"Ì3îV·ç…àײÑY>&I¤ðƦ–ßëšÝÂ}q^Wû>+G§k1É5.0ߨãŠ{ŸÚJáíò¡~ÐÀñ÷GÿZ®K!oÚ)CçÑUk?įr¿ôÁ8"ܯîŽ>éÎ?Ðý n¡_ Ø[<×¹ÏqŠôïøoMïþŽƒ>¼u­Jk¸HÙÏE¯ðž«‹>$êsh¶i±Â›sŒÊüöì(ðMõ¦™ñwÄÒ]\m‰"•úuŸÄÔ¿?|!'X™†þW¾<ÞDº6jH2=âÈ>‚º/É»á5Û#›UŸ¥?À:•¦ðïÃë#±ó‘cPV5Ä_D“~ÒPîí‰xÿ€Õߌ“ÿÅGáhÓ’é_éó «ñÎÖá×Ã÷Š [C"ï>‡5Üøöâ4øa¨>~G´Ú9õ\Wá{9,¿gûå¹ÊyÖÒ²çÐô­ßƒ¶¶ó|6µY#I³opy¬è~(ñºØZ_3Tµ·VŠhÛ×'åãÒ©x~/x;Ç:}Ž·p—ð^f(§#,£Ó={W£jÞ;ðE¥_߬WrtLtôÉí]:ɺœ« ƒê)õåŸíÝ˃Ë÷Sßó®Câ”7–> Ò ¿¾ó¥’TÄÇðü+Ó¬5k{¯ Ýi± µ¥Šîl÷+Ò¹€DžÔ®¤¼`~ƒGá–[⇋”?Þ‘°»ÉªÞ³›LøÛ­Çw¹YÕ-ü@ô5Gã=ì7;Ñ­ã}Ï )|tû½îÔ†´„©l^ŸJšŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šà¼iðõü]â ã¨IkªË?¼=A¨äðo‰¯”éú‡ˆ’M$ò¬X‘Ç¡5­â?ØkþM w‘x1ºŽTŽõ“¡|9ºÓp÷ºÜ—sCKf)¸µ›Â;¸üFu×ñ-Á¾ÿž¡qé^“klñéñÛ]Ëö— µäq÷ýÈ®ïáÕåüóøgZm. ƒº[}›—>«é[¾ð}§†,eHdio'%¦ºqó3õ‚¿ à‹Ä‡^‹Z½[æl³\éOÔ¾Á¬kvú®¡­_M=»n‡î€µÄén"°Ò Ó®öjÉ86Ñ…Üdlc§¥rðÛ|c“sÿ¡®ñÁ;Cõ­Ï‡¾'ñ$¾%½ðçŠ~Û bEu9 ¼ÿõ«Ô+Å—ÄV"Ö=JâÈgæ0œn•à߆©àë‡û>­s=³äµ»ãi$b ‹ádv:ýåþ—«ÏeoxwOo›Û=ª„vö~#“Q³Ôæ‚ÚlyÖê?ÖcÔÕÑðê[MR÷TÒõimo®Ÿ%ÀÊ…ôÅix{Ân«.«ªjGQ¿‘<¿1£ }íXzÇÃíRË­ø[SM>{Œyèé•cëZ×Ð|s¦ý¶öóRiõ{¸ö ¿ê½6JÅÒ>Ýé^+}|x†i.e|Ì<°<ÅþíO⟆Ä^$‡\Z¸µ¹„('Ò“Ä ¦ñO”º–½rÉ jˆkGÄ¿­¼Oá‹]&òòC=ªÎ9Ü;‘X—? dÔôÓõ]zâíÕ@Åp‘cÚ¶|àøFm.öüßÍ4kö\ŒtQYzgÂÉ´ëÉ"þÛ‘´wœÏö!ç8'Ò|.ºñF« Ý׈fŽ+wßo Âõö•tzŸ„#×<,t]^å®›-ÆÝ¤ÇÊ'ÃÝÙ Sñ™¢.0‘¦$`?„ŸJé5ßÏáèô-/Puˆ‹Ê‘V=Å׬ÍÀ:χ|=&‘aâ/ݼäçùÕ/ ü1Õ|)©<öÞ!Ì3J$¸ÊæOƽ:Šâ¹§ø#Áš‡„í¾Å>°/lD{RݧëT#ð±¤jW’øZKK;É ÉÇ»i=JÖï†<oá«;¡í-íÛžéÇÌÎ{×'eð§QÒüMq®ØøÒæáËK˜~ð=«Óã±"»np 1õ4ú+ϼSðîëVñ]¿‰4PY_ÆžY.›fçÀWøZM%5icžå‹Ý\æBzñTô?‡z§†ôÆÓô¯I»ò¼¶“ÔŠ‚~MájóQmY®þד"Û–õýi5¯‡Wâ#®xsSþÊ»“ýxÙ¹dü*߇¼}m«ÿkøƒV}Jõr"]¸Ž0}vôVGˆ¼9§øŸJ“OÔ"•»©õÆY|7Ö­-ÆžÞ*™´Î³û»³]>«à½'TðÂè/KTM±œd¡õú×6~ß]hóiš–¿-Ô3º²p¿íSWüàü¥]éÿÚï^麵Õÿ…uTÓÙÌÑÉõϨ­_x)t+{ÙÅëÍ«Þó5ó/;½‡ ¬[/…óZø¾/Íâ ‹‹µYž07/§Ðø«ÁÖ¾'û4Í3ÚÞÚ¶ènc2W3«ü$]Oòµ=næ{­Û¼ò£èuðÅÇ…ô÷´ŸV¸Ô?»3q±}+¤¦²‡R­È#¼å>ÛZkמ™«ÝØ‹†Ì±ÅŽG¦i—_,&ñ:êêÃláEŸäËVü+sƱñdvŒÓIkufs ñõZÈÔþ[ëZrC©j×W7AÁûCã!GðÐWAmá—³h×ÓÞA(+æIÊ1Ò²ôO‡_ÙÇ ºÅÅÌ6ÊVÍ翹ªqü!±Mdjí®j~?å¹uÎ=:Sõ¿…zî¥ íÖ¯|ZÝäa>•ÓÞxfÏSðâèú“½Üape“ïëõ®`|7¼¹Ž+ G^žçIÁØÁ`:Õ¿âïiI¥­ìÖv"?-¡€˜Uo x%| š¥ÌÖj¤,€}x¨5O‡¶z§ˆ®5¶»žÉR7ŒãËÅM£ø.KMZ-OVÕ&Ôî`R°T(ˆ@;מüMðŽ›¬øÊÏì<ºÕÔ‹¾%<"¬Þ‚½ªÖ#¤1©©üM\‡ü§øÚÚ!q#ÛÜDr“§QX—lõ %íõ-ZòòëCq!ÿT÷GJ»§|5ŠÃóiƒV»ó§“|·J~vÆßaŠvƒðÎÛÃv—Úv±}sd1Á=ê?|0ƒÃž"“W·Õn¤y[2«à‰>µ­âZë7ÐêO-•ü|yðœ_Cë\æ¯ðsLÕü‰%Ô.…Ìd³Üdovõ5Øx_ÃßðéfÌß\^Û¼ÉÎMnQEQEQEQEQEQEQEQEQEÆø·Âwz¦µ¦ëºeÂ%ýÂÇ7Üu=Gµ:]_Ʊ&ÏøG¬ä“ tºù~½)žð½í¾½wâeãmFtòÕcéz{×gEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV“ám3F¾¼½·‰šêîC$“Hw7ÐA[”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERÉ8ÝàÆ]0üqƒÖ¼š‹º¿cðüú!…š]›™ºŽÆ½rŠ(¢¼ÏÇÿ5ÏÜ´‰¡yº~à‰pï€Çð®÷D¿mWD³¿tòÚâ%¨íš5‹÷Òô{»ä…§kx™Äkձڸ߇_¥ñÄ׉&šÖÞAëÚ½Š(¢Š(¢ŠåCc­nèÞ/ñf´Ö á•‚Æãk4¦láO~•è4QEQ\OüW¬øJÍu !/l‘s;´›vzqŠÔðOˆ¥ñW…­µy­Ä6~@s]QEV7‰µkÍE–öÇN’þd#÷)ÔŽæ¹_‡_eñ¶£¨ÚO§ýŽKESÄžI⽊(¢Š(¢Š(¢œkÎ4Š#Zñýφÿ³Ý —?Ýë]Ÿˆuë/ èÓêw϶(—€:±ìyÃ|VÕ´ý_NWÒà·¶ÔpaU“sªž…«Ö‘ƒ¢·¨Í:Š(¢ ¼7 g1´Uk€‡ËW<íšòK?ˆ^.·øcá­bÎÙ>Ðܘ׸¯b¢Š(¢Š(¢Šk’ŠŒ°Zòçø¬Yxâ×ÃÚž„¶ßi“ÈdÏËýêõ:(¢¹_jÞ Ñ´·¾ÑlíîRÙæ6Ç¥QøcãÏèßÞÃRG7–}1]ÅS\ŒTe±À¯ñ‡ÄÿxVö;{½*Ò3îÝ•½‡O®´ëiÜa¤Y‡¹fŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šà~'xÏJÐ|5{g%â­ôñŽ8Ûç÷ö©>k6xSN°ûzKz"¾æ®âKÆ}\ .ãŸÖ½#h 3¬rO4Q²O,cSþõt–öÚš]ÚJ$†Aò°«Uä¿åeðM¬C;^ègµô?i:^‰¦Ú\%È"HÞác&%>í]~¡®éº~”5 ™ÇÙpÊ¥·ì+;ÂÚï†õ†¸ÿ„|E„9”ÇÁš]oÆzf‰r-¤Ïpyò¡]ǼUÍ Äºoˆ 2ØÍ’§k£ 2ŸB*?x³IðÌhÚ„ä<‡  ÎßAUbñîƒ.•.¡ö­±Åþ± üëøUIþ&øVÛN†þ[ò-§ÎÆ“Èê¥Y›â†`6Â]Mí ÉéÏLžÕ£©xKÒ„jºUiØ,H¿39>€TZw‹t]SR›Nµ½V¼‡ïÄFT¯Ž<;¢Þ5¥þ£3¯­ðœøíKoöá½±ÎÓ´g¦OAVÆŠ2øg¬ÈŽ1ädÎy¨>Ëå|3Óe‚ª¡$ú ’ç⟆-.<¹n'ïÛçˆ[Êÿ¾ºW]e{o¨ZGuk*Ë ƒ*ëÐÖ¯ã}/J¾û­Åå⌼6±—e§¡¢x‚Ã_·’[Ih›d±8Úñ·¡²µ?ˆ:™|Öm,³ËĆˬR+{LÕlµ‹5»°¸I¡oâSÓØÕÚdƒ18õS^ð¦öÏIñg‹¯¯nR(£˜/Íß–é^Å£x§GמDÓ¯c–HþútaøQ®ø›MðúÇöÉ[Í“ý\1©wo¢Š«¡xÛEñ Ü––“º]F2ÐL…CMÕ¼wáíùìõ+ï³Ê¿ßSƒô=êµ×į YA×7Ïr®ä&&ù…lXøKÔtc«ArÎeÆ>µoñÃ×7+žXÑ›jÍ$EQ³t®µY]C)È<‚)I =r+ñ/ÃSM8Þ:Ý<žRÆÑ‘–©µoˆ~Ñ/žÎþüÅ:¾Â¦3Ö®j¾.ÑtHmæÔ/V®tlÀà­A'޼;œWM¨ÇäÈ7<{úV´:½ŒúYÔ¡dµ ¿zóÅsZ±à½GIJ>’Öíª:’å zà¾5x¯M½´²Ò ºÜÉz¿hM¤m»Í6×Â^'¶µÕ|ˆ.MEUÆ<¼ Y~&x~æ¸kem†é!& Þ­GÅZ>—£E«\ÜŸ±K’F¥óŸ¥eZüKðÅÖ”Ú’ßrœ¡Ý‘íF§ñ/ÃZVŸi{=Û4JZ'D$LŸâ‡…í„E¯ÑÕXÉe•3Ós]Õ4uÕ]î–ј¯™övÅ_ðÏŒtÏ ÛM2²Â@fxʃŸL×CXÞ!ñ6á«TšúCºFÛH7<‡ØV~™ã:ÿRM>x.ln¤£K¤Ù¼{UmGâo†´Rk 뉡–&ÚKDpÇØ÷§ß|JðΜ°½ÕÔ©è$ÌG JÕ>(ÒWBÌ—]‘èò ¤þ•gñF¹½ŠÚa=¡›SΛUóÓ¦Öþ ø{Ã×_gÔ®ž' |²AúY> xr) ï†gÛ´…àè ìkÏüy‰>4xY€ †=ÊGÖ½wRÔ¬ô‹//¦XmãgjÀ°ø¡_Ý, ,Ñ8F–&Eo¦k£¹»‚ÎÙîn%XáA¹W/mñC¹¹ Â@Ç rñ}¶#[Éwñ{L†)¬÷zÞøÕ¦ZZx/Oò‘bhnP+/¥7â.¿q¥|&°LÆ[”XÙÔõëV|=¨*|9ŽÂ íÌÖûU„c ÄS¾ ÚøƒM³¿Óõ«IàŽ6Ý“Ðö¯T¯%øþXøBÉGFºïÓ¥mϦ[Züšßh*, Ë óŠÅø1«M«xê±æý•›Ÿ—+?àÜ« >%xød’F ;b¬|•µS^Ôï@’Wœª†çh¥U³Ôÿ°þ;ÞYÀ‡É»M»MÞ´¶‘]^|wœj^4‹1+tÅSñ€»øÐt»takqÙÄ}3Ž¿ZÙñçƒ´Ï |#¼³¶F”Dá•ßïd¶iº?ÃÛO|6Ñá’So0Ù+JKp8úUOéO¤øÿBÔN©ÚÛ¢Åä–ÌŒG]«ß=+;W»Cñ¿D½µ³šÍ§}ë°ÉÔgç¥tìíåðÅ¥Ì1Ç盥h?ŸãZZ΋kkðrxãwý—Í/ÝŸÎj§€µéµßƒ÷rwMko$.ÙÎp§¥c| Ñm¯ü;yuw–/8¤aùÖ“ápOø‡â›Hx†"̨:µ[Á¾'McâF¹ª_Z\]?wn‰ÿ,dÿ‡ëZ¶©ÿ nKMÒo#ÒîEqæDUwVgĽÝþ,øz X£€Ý%(1¸wý3]–­ðÌn\kš}ÙŽQfÐÃ\;qšóÈüwm¦h-áøzhÊ«Fn0sýáþ5êÿ d³>±ŠÊén C:úç<û×i^ñ S—Zø·¢øvBMœ2+´Dü¬Ýrksãe¼:o„í5;TX®mnc "pÀzT^7–ÛZø+.µ%¤båíã>fÁ»¨ï]ÂÝ.É< £^}’¹0Þ滪+Äh6“ÉÑ#†.ÿʽkècðæš„ä‹hùõùj‡‹ÛëD‹s-É'‚WΫi·6~=Òü-fñÅ#*ù—'Ý Æ?:‹ãuóé¶‹f†+k‰tŒ`0ùZÓñÚu‡Ï¢YxvïÍ1 €c«ê±jVÿn¡Õâ’;ÈàØáÎN2+OÃVhø'²]ý“̳aç1û™ë”Ó|¨¾êš{5EXåoµ,xEÀìO_º†wÓXü[¢ŒÏRº†=qœ Çø) 𥆹­ÜŸ3Pº™”Èç'§…Gg ø‹À~ñf·¨\¤·+û¢­žüj“á=úAàÍòh÷wSܼ’M0pbIïR|0‡\Ñ|]«é·zeÌuôð3¯Êƒ<ËùW°Ó%8‰Èêâ¼àþ•£ãÝ]F-¦,¨ßwycÎ=±úÖ¼6âÓö‰híPE Ûî‘W€Çm\ñõ´–¿ômauªª"û"ÒIÏ@¾ÿÒ°u[Ç?ô+“g%‰–1¾6À,¿7<ž+µø½áèuÏÜÝ@ˆ×6l.#uï·¨¬-&êËÇ>ðΘðÄì[͸Ê}ÕOñ8¦|eÕ…‹è>Œ)YÜ¿Áøe¿€-ôB/4ã•lV4_‡ö~"øy¡Ã$FËr]G.k7Æ1ˆ¾4xZÝOË ÷ŠwÆ Fâ_xsD/‹9§W‘{?Ì85Ñ|Wµ††óMØž-‘Ô`ç"¸_ø–ïSømá¨%’DÌ«pàõú×§x«L´á­ì †È”ã!xúW?à fãXøKt÷LZH"x‰c×¼ÿÂÞ-‡HøzÖ+dY'ºežP™)éÉîkÞ|5—‰jÚTq‹bƒk ׎øw]ŸRøÅ­ß\YOzÖˆc†$#(7c½kk¶Úþ¥ñHÖ´ý{XcQË93Þ©è7-¨ü{¼ûTž{[ÄR=ÃîtÿoÇ x¡×t[˜Ñ ²0Fã“ó W¶Zm!#§–¿Ê¦¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¼·ã–™}¨øNݬ­åŸÉ›|‚1«ëŠ<7¬¾½¦èz]¥…È[UWšY \sÅsž+·Ôµ_‰V:ÝŽ‡-µ±B#Á8ô­ŠW·Št KM;D¼ó„¢\:bµn¼57¾Á§ËjöW–è6,‹ƒ¸Uo x³YðÞŒº.¡áËù®íFÅ’ÊIéƒ]G‚´ýYe¾Õõvdšõƒ-¹lˆ—°®Â¼×âþ‹yâ-+NÒì¡fw¸ÜÎB wªzþµuááhô;¿·¼_g2ÿË0:nÝé]†¼2Þð1²´·k˲›¤Hø,äsŠã¾éþ‡©êú–‹4Qj.ÄJH!Tõà›G‚çᧈu$:uÕÝ…ã—‰­ãÝ´úµàï Þêž9¼ñ~§i%®NÛx¥ûÃÜ×-¯xÃM±ñeÜšó_ÛêPÊVn£?o­løSâ'‚[X2„¹[ù˜)¹¹_½]_Å+kí_ÁÙiVov÷$“°ÕŸ†ó]'…­l/lgµžÚ0­æ.íÅp~#Òµ3â÷öüÚdúŽŸ°F›Êzb³ü[oâ é>*:5×Ù€+~tQŸ¼;g==«Câ„°|"Óc¹WŽqr¯†ä®ã]棨j~lϨMj"Räa½»µKe¢ÂðÏû,ZËwuq,‚Ý7eØwöíXŸ îï¼-áË7QÑu¥WiƒNÒ; úÕ_†¶ú¢üGÖo.´««{KÝÌ­$ex>µj2÷á¯oõXì&»Ñµ.] RÍué]M‡ˆõ_ëé§é÷Öl-¾iîÆdÿdõÈøÙ5»¿ŠF§o¡Þ=¦œpï \zŠô-cR»¿ð=íÝ¥Ì- ˆ©\f«•ðí½Œ<9u=ÃG„‘mÌ»‡×­mü*Ð.tMù§­¢¹ºi!·~ iØïëɾ#øJîiÞ1Ó-ÚâKfh‰Y”w½Sñ…üŸí4íI²ºò ë%äòÄȈ£¨ç©­_ˆÖ‚øøWCÑn®·BвDÕ Ž§ð«ß /µ¼=i¡êEݤÖqa¥•p‡ØW¡V^»ªË£éw Œ÷®¤*–5ã?àñ/Ž“OþÎðΡ¶%‰(Îïtj0è–ö÷¾ÕRê•Á @ÇW«·‹¼[ñF»¸Ðo-´»Y—b²ç?3é¼SáÛâ—Œtûi.!`cºŽ5Ë/xõKÄÖ—¿u.ÖÛO¹·Ò-Ížk„Ù¸ÿtgò¯R¸ÓmåÑ$Ó]Њûcæÿ¼Tvÿï®´±ggáÝ@êÞ^Ï-ã!½KÕ×x[O»Ót x/åinÎ^V'ø˜äŠÚ¯#ø«á^ãÄz?‰t«v¹6L7ƒ$€sXÿ¡ñ?Œ´[+˜´ ˆ’Þee…¾ûqËèµO[Õ>fCáËÑ{q‹fÉŽæ¥ðÍþ±£ü_ý®0U±#ï}*§Ám/UÑmõ[=ZÂ{id›ÎRãåÁíYv–úõ—Åûÿ¶‰w-¤ÃÊRœþ•¯ñø—X½±µÒt–KK#LÅv:ã2kw]ÑgñÏ€ÊkYl.ñò$ d2ôéë\ÅŸŠu{§†%ÐoŽ­_fFHþCèÙ­oxNçÁ_¯!ŽÐÝj·*ÒL±ŽY˜tü8¬¿ƒ–ºöos¦jÚ%Ü <Æe˜°zÒø»o­kZ:èºF—-É“ó)À_jãÄrü::Gü#³­×Ù~Ì>pGÝÆê¥à oøC ¤Oáéåž6fR².qìsÚ›ð×Fñ>…ân}KHh¡Ôç ]xnH^>´’é-“âe·ˆ›GE¶Qå2 C6=søæ½h€ÀƒÐñ^1à&ñw[š7ßgió"ç#{×´Q^eâÿ^[xÖËÆ:5»O<<\[©ÁaÓ#ßš¡¬éZÇÄi±ÞiRXé6.%“Î<È}¯HÕ´˜5Ü鎀Äð˜Àǵp¼'7‡ôkÙ¯ x®%¸eU‘H!ã¯j¿ñ#Á÷zزÖ4¡»RÓÜ:&q½s’)`ñOˆõ[4°³ðýÍãqp0‘zŸzÌø§o­_øR-ÊÊêúáö4Ó¨àã×Þ·¾ßj?Øi·ÚMÅ£ÙBª ƒ‡úWâ;_jŸôÝz Ü‹k!´ä®[ž½k¤øáK¯Yézݱ…“¬ßg?y‡]µŸâ»ýCÇL~±Ò¯`wd3ÏÔŒ¿_´‘«i’‹ÙŽRà„.»áýOÂ9oè–Owmt¥n`‹ï©õ·a®ø‡ÅZ­¨¶Óo4­>ß<—!“Ñ@¬Ãw¾ø‚ž.Ò,%¼ŠdÙq_{>¢¹¯ˆz/‹|Kya­G£H¦6ýݶì”QÎ[Þ½k–¥©èq˪éÍcpŸ'–Ç®Zè(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦²†RcH‘¢}ÄUú S袊(¢Š(¤*PÖªj¦äiW_cÜùgËÏ­yƒo|? Ý7ŒÖ­˜;ÞF8Äö©üw„µ,4JG_%¬ÓîóÔ‘^§£[Ëi¢ÙÛÎÛ¥Ž%W>ø«ôQ^=ñóSDðõ‚L¢V¸YCr{W ø7TµÔü3bmçŽGH\+giÅtQHT7PÖŽ”´RZZ(¦…UûªÐS¨¢Š(¢“­íKH)h¢Š(¢Š(¢Š(¢Š(¢“9Ç4´QEQERm\çhÏ®)h¢Š(¢¼R_‰:æ‰ñ3R³Ö¿²â !…#ÎOðãÍz¬¦tú½Ý±·¼Ôå3¼gª¯ðƒøWWEQEQEQE4"†Ü{âEQEQEQEQEQEQEQEQEQEQEQEU­M½9¹±·˜ÿ·4¶šF`sieoÿ¦h®ÑE¨x[CÕn Åö™oq1Kºäâ§Ò´-3DÓM²ŠÙ\å„kŒÖQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU“N²šužKH^QÈv@MYéKEQEQEQEQEQEQEQEQEQEQEQEQEG,‹ /+𨥎=p²|]ðÂêqØ$“¼ò8@<²IÅwŠÛ”0èFiÔQEQEq·?´;_;?Û lÈ.}+²¢Š(¢Š(ªZ¦«g¢éòß_Ì"·Œe˜×3¦üKÐõfÛLâ n†`3G´Iô®ÎšÌK€d×#£üIðö¹â'Ñ,çst¹2à1…vQ\~½ñGÐoe³ežæhW|ÂÜ"_öjÙð÷ˆôïé‹¦ËæDNz©ô­z(¢Š(¢Š+’4#âãá¯5þÝ¿gÝã5ÖÑEQEW⯈ºW„.¼B £ò†ó#)Ïl×A¢êöúîm©Ú†Ü&ô0qWd‘!¤‘‚¢Œ±=…s>ñö‡âNêÃM•Þk|îÊàž¢ºš†ætµ¶’wÉHÔ±ÀÉÀ®3Gø©áýk^]/´EvùÚ%M¹5ÜÑLwÆÎs…â¸ø[ÚêÐé²ÚßCs,¢5YbÛÎq]Š|g£øFÖõIÊyͶ5Q’Õ±c{£cå³n†dê Y¢Š(¢¸©~&èqxÁ<6|ãrÏå‰ü›½+µ¢Š(¤'jŽ­¨6™¥M{¬·f5Ü"‡–o¥q^ø­kâ&„4«›k‚ c1ö¯D¢Š(¢³uÝf J“P¸ŽY#¬K¹á\—ü. ÆÊ—RÝ[ÈÃ+–ì ­½Æšoˆï¥µ²Šä4k¸¼‘ük¤¢Š(¬_‹Ãö±O5­ÍÀ‘öâÞ=å}ϵeø_ÇÚO‹/®lôõœKl3 ‘6⺺ó¯‰?[ÀÓYA  çœ±ÀU®ÇÃÚÌ^ ÐlõHâ0øô­J(¢Š(®GÄ7mòXNƒ©]Co{ˆä?Á>:±ñ½¤óÙÃ4FÚË éž•ÕÑEQEQEQEQEQEQY^!ÕâÐô;»éeXÌq’»»·jÈø}¬ÝkÞ†öúA$ò»uþîx¯4ø³¦CmñÃwD±,Ò ”É +Û-ïmLqÇö˜·í'˜3Ò­Ö|ºæ•ÇÙåÔm’cÿ,Ì£wåWÃPT‚qKTo57O”Gy}o°ÈY$âý§b!Y~Ù†Co#Ös¨ÙYƲ\\Å7Ý,ÝjH. º€OÉ$Gêr+‹—Ã^ ¾ñ’k&xU ‰ÞÞµÕÞk:nŸ2Ãy}0ÜG ‘Cëzdk=ýº¬œ¡.>jºŽ®Ô‚¬2ª÷••£…¸»‚&nÜ ž9c™Äêê{©È§ÑU¯/í4øÄ—w1@‡€Ò6ÑE¥ý¥ü>m¥ÌSGýälŠòZ’KýaÊ%¼xW㎵°>iºÇ‹4ÿ[êdµ˜_ܧ+8úW¤TsIP»Ìá#æf<\O‡| áM+Ä÷Ι2Iw1,J&zâ»oí!.[¨Qó¥Æißlµó|¿´ÃæwxÏåQj7ÐØYÉ,Ó$+mÞq“Šñ/†¶ž&Ó¼Tº¥àIõ ƒI¸n#³õ¯OðÆ£ü>Ð…‚Þ*F[{I;ãq®’ÚîÞò!-´É,gøäUc¬i¢ä[ý¾ßÎ'hA Î~”æÕtôݺòï|ãåúÑ­§Ê ŽöÝ€‰Y⥂úÖê3$Hƒ©WC{kpìÜG#/P­š’i¢·…¥šEHÔe™Žª¶ºÆ›{!ŽÖþÞgþêH ¨5ýjËCÒn.ïnRXØ©fÁ'«•øY­ixYgº½M<ò: æÛš¹„|&Þ0âßTf$b\óJëåš8"ie‘Qd³U-5­2þS¥ô8ê¨ù5$Ú••´ÞT÷pÅ&3µÜCêv1”w —åAqÍZ0È9¢–³îµ½2Êémno †v„nø$T¿ÚVB”݇¸æž/í †Páº0s\/Æmî¾\¹hÏλ_ ޵·à™íí¼ ¢#ÍxµŒa˜ÕÐÌ`’ÙüÖC .“Æ>µËø[Á^ðæ¥w{£…7݉wmè¥t÷WvöP®¦HcYÛ£³ÔlµËÙÜÅ:tÊ05âúíŠAûGin¨f\à>é¯lK»i$òÒâ&î«‚jz+ƾ+Y£øÿÂR"…c2‚@ëó޵߸³ÂšŠRÞ=goú;nOÞ"·¬­­ì¬a¶µU[x**ôUg×t¨îÍ«êë8ê…ÆjÝÅÔ¶íq<É*2]ެø¤[åÛ(å½vú×Eu®éV3ùZ…¼2ÿqÜCëšTr$o¨[«¿ÝS É«êÁ”2Aî)ÔWñÆg‡ü7 ·ª—²DR8‘¾p[¡©>êÖ—^ÒíN£Íè·V•|ÍÌ23ÍpÚ}²'í|T=Øî­zͶ»¥^]µ­µüΧ ¿"­ÜÝAgÏq2E ³¹À³4ÿhz¬æ-JÞYºdÖÍS\)S¼½ó_?XE~:O+FÏOíü8^êkߢ‚(ÕĉÆ>UÇÛ«¨,­Ú{™R(”d³œ ¥¥x‡JÖ™×O¼ŽrŸx)éVnu;)â†æê(¤”áÛ¾”“j–÷+m5äÌÃ+8Õ‰eŽšYR5,Ç ÃÕ|S¥ÛøzÿQ‚òÒÚc±Áæ¸ÿ‚ÚP@»×§Z”Í!oösÀ®å¼M£-ù±:ŒàuMÜ×#ñ ìõ¹!ð嵌wz¥Â‚’´{–îÙ®Ë@Ò"Ðt+=2¹oO©ïZuÓÅo’i4YŽg/ˆôV¶k©[T៬ɩØÅb/¤º‰mHÈ”·ËŠC«iâÃíÆòkŒù»¾_Οc¨YêVââÊæ;ˆOãlŠ/µ=2>öæ+x³ò6Ñ\ÅÛZøê]6ê)¾Ò|€èsׯéV~ø}4OZÈSmÅàÈHõéúb»ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+É>2øq@ºÖZþ躕T·ßû±øU¿„þ·‹Ã¶¼ÓÝ=Ãe• §bÿÀkŸøÉ$ãÆ¾ž|¹= "´>%h6úG‚âÔìÚTÔ«›€üž™Íhë¾4¾Ó>[jêqy¼ø~$¿¸õIâ2¼®ß¼ß×åïZŸ ]:^ø‹G.ïokp ç8\ã‰âM6ÓIøé¢¥œb5—"„ú×Mñ»F°¹ðŒº”ªî äÉÎ7 ÊÒ<'aqðyõ¤2Þ#"Jù&<1Z!xÛ[ºÕcûE•£í­äåg±ëOR>øÈº5¸éš„*Â~UQéÒ¹¯‰<:_Åíéh ’ñƒÁvl®Ò/†=ÛȧFšÛËšÇ27¿5Àü:ðµ½÷Ä}wNv—û:ÚG-ü6€ Xm>çMøÅ?„ôËÉ`ÓoJ´‘©è»w=+[ÆÖ1xÇ~¸ÐÃÛ¥Ô«Ñ«œ8Ü?uŸãÖåÑ´öÓ|³\+]Fî2úö®'Ço¥iø{UðᎦž8æ6ãÀŽž†»ïˆºN©x}KPµY®m­ DÌNˆÏO­cü 𾔞°ÖÜ}©ÃÄñXÖpè¿´™¼f8$O3`<ƒÎ+kâ©s©x÷CðªÊGYnpp$…3â­…·…4› wFˆZ\ÛΩû¯”2ûâ«üOƒO×~Yx—mÛÊʧæÀ54~³“á,š…ï™-ÿØŒÉ31Ê2¸ôÅoüÕo5oÛM{#I";"»’£¥zy‡Æ êxRãU·€ û@Í °uÀ^­‡‰>X=œ!5+5mÂ<ç ÷‰ö®ƒK±Ó›;—ÒtȘˆ†Gé“RXÚëvŸŒ6ºÙ4dĸÆ:ŸzÆñì2KñÓG·¶r¯q£8<€wg…Xø£ÃàÙ´MWDimæ7B9q!ùÇ©ÿ=ëÚ-d2ÚÃ#}æEcùTÕãŸf#⟄" HirÿÀªÏÇ]:ØxfßS Rí.R1"’ÓW¼oâ¦ð¿ÂÛ)m™Öæê‚Âvò,Ö]²øn_†eHßS–ØÉæ>aŒç?ZÇŸXÔõ?ƒv²_ÛÜNmnÐ\¡á¤‰5y®x3Ä6vú,cM½K˜ÙàÛ嬣w+é_BÀÁÀP85%5ÑdFFV ÷áwÚe–“ûAi0YB!…“s¢ýÜÜÖÇÍ.Ít=I zn–?4u#ÒŸâ ÙAð‹í†%þЊ›íÆë]‡ÂíJãUø¦ÜÝ1yv”ÜNrÅvTWüpÐt˜|3>­öEþÑ–T_?<×eà} GÒü?¦]ÚÚC ÌöɹÆcŽkÎd³’ÿöйŽ)LhZ\s¸-_ø‡:GÄÏ ]X³Éq.Ù¼±·pÏzâξÍã=@šYÀºËr©ükžœuªßïtËÊo ZÊš¬ÊA†Ù“hü«Ö|-¨M©øfÂîáfx†ðÃÝëfŠçük­.áBü¸WHˆLœ|Ç¥yïÀMÅ¢_k³ŒÜ_LpÇû£ÿ¯šõ[X´Ñ­Òk· <‹*Œ³1<`W—jÚŒ¾;øªž ãIÓ@’tSþ±¿Ú©¼Aoáß‹º¦ Ä'€¬ñÆ0k#ǬÖ:#ëz”,5KëÕ[Uo½ jÜéŸëN×>ëþ$]'TŽUK¹ŸÍ¹·Ìƒ°J»ªê—¾/ñý¿ƒ-çtÓ¬ZõÇüµ*Êj‹–QZC§h,QÃ%ö#–8øÜ€× >q¢|9’ËMCö¨l¶Æ£»í¯±½µñO†SÃHš^½ûå’\†›×æú×КÚv‹eopË5Ì0ª<Øå±ïZ”WŒëzÏþ%ÿÂ-ï“c–º qæã¨¬o‰ZE´Þ0Ò|-¥'’—%<Ø¢©ü3^‰¬é2Áaw]K¶óO÷d`>é®+ÀXñ.™u%üa4>y%“„~¤ z Øø=©‹È|Gwb+»fîªãœU \\üAø‹©Þå´8í‚÷ ú‘ëXìÿ¶þ)i¾³_.ßr<± ã>¿•{Õ¤pÃl–ñ2bBž•bŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠóFàxA1Ì«¸œ ‹À¾!·“Á:M…üCQ…)Ã眊ä>)jö7ßtD‚ãͯ‰¶.vt­ÿŠºþŸ{ðüÚÙÝ,“8_J޵Ÿulž1ø*–6ÉyfŠí ŠÝðg‹<5kà›õfµ´¸<©"•ì¯q“[ž ¹¹Ô/õA-ÛK…µ=¥Àþ*ìëÈ>8ê¶³ècFÍ{ðë(Gÿª´mø¯¥%…ÍŽž¡®'”Îs€}jÆ=kO½×´K;i^V²˜yà)€kÚt-NÓVÒ º²“̇hPØÇ V•Cus ¬—3¸H£]Ìǰ¯ÐüAbŸ/uRí…Ê”IY°¼~•§ñ{V¶¼ñ>€–Ûæ6WçØ„„Í^øÁâ-3Sø~–v“yÓLѸDS õ®ƒAñ^™¦|/³žg¬Â „Ûzãþjö…u6vdšúáž$e?2‘Š·àqÃÿë¶:Ë¥œmæÛÍ)Ú¬¹ìjH,>1vÔ–ÒtØÕDØùdlvüëâ‰4Û¿‹~¹·¸G‚Í×ÍtS»œŸjöÛi–ÚöÃ\ƒbFD«È5â ¼I¥éŸ|Csw3G ܬafCóe‰þT÷×l?á}Ŭ‰\éá ù¥3´Š—âç‰4½GÄÞk[Ÿ0Yܘ€~A¸jÿÅ{ëE¼?q™´ek†@@a‘×õª¿oìumF¹Ò-äm>Æá<ÉV=£·OZí5mRo|0Õ¤°µg )Pƒ"ã® s Õíõ è^µy~Û´èªrN}¸¨þeŒ}åÎÜ# p ã“Þ¼óÄšõ—Ç›+û€cµ¶‡d²2œt?þª_Œþ"Ó5«]=:äÜ<7d¡áW^ÅáÝN×WЭn¬äBP(aê+MØ"31ÀQ’k¼q¬Úê¿ü9}d“Mme H"l/?JÕøÑ­[j>³±²Mró¤Û2~L¿¥_ñF†/éZa¶”iÖD;É·å'¯øW´¢„EU裼¢Î _|CÖµA%ò¯Àx%[>«õÍQñ\\øÛ@ñ.© AdžaU(r(>ýëcâN¥®Í iwšCÉc ²ƒ;09UÏ®SÅ:v‹â-CF_>¶²#\Ïn§hQÔ±¯u vñ#²¨þ-â^’ßÁ|Du5”ÜÝJM©òØ™A$àUIå›Eø¤uÝf9ZK‹rmPD[ð¿ã]WÄmWXƒáÏÙͼ²ê7ß&#_¸'8ö¨­|-waðB}6Ò'ût¶åÈæÜy?Ö©|=°¼þÌ´Ñì`¹µ³†2÷’Ê›LÎGÜÁí[Ón| áHÏbÍ;Þ±…PdÈî×2×2øSÆ·ZƯjòÜÜÛo¶ÄNéøwÿ´›ë [ÝP·ö…ü¦yUÜÏEü«¯¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¢¸¶‚î†â$–6ꮹ³4ß èšEÜ—VlòÉÕ‘qS J™³í¼Æ9-匓S¾›c"í{8 úÅ>K{tÙ ƽ0ªj”þÑn§O¥ÚI(9Ñ ŠÒDXÐ*(UQ€éN¨^Ú |ÆÍêÈ §ù1ÿÏ4ÿ¾i†ÖÝ›-Dú”±ÛA nŠѽU¤6¶å·"-ë°SÞ(ä9xÕˆõ¨Í¥±6ñ×= Š6Ü‘"·¨P*­Þ¦_×Vóм`Õ˜-ᶈEKc¢¨À©hªwú]Ž©“i ÌÝ• M?IÓô˜|« 8m£þìiŠ|š}” ù–6sRÁo ´~\¬iœíQRÓD(è®§¨ajìû>?Ðàã§îÖžm-‰Ümâ'×`¦µ•¬‹µí¡eô()Ëil‹µ`‰WÐ ¦¥¬ry‰m ¿÷–0 A©hÚn®ŠšŒJ§*%@Ø©íl­l ò-mã†/î"àThº\ Óí[iÈÌKÖ¬-¥²À-ĈGHö¿•bµÿŸhïØ¦>ÉzZ@>‘­G6“§\Íco!Þˆ›ì–ÞBÁäFbQò¡P@¡ìí¥‡É{xš?î”§¤QÇU:mQMŠÖÞLPE=Ѥ6vÌÛ¼%ºä Í>Hbš#‘«ÆF ‘ÅT°Ñ´Ý,·Øl ·Ür|´Æjá·RÞ¤SM´ 9‚3õQH–¶ñ?™#ôܨ©¨¦**dª…ÉÉÀëB" ;.NN)¯o ºHcfõeÐm Æ<˜ñþè¤Ð.vÃÈÁÂŽh[[tpéJãø‚ Ónì­¯¡òn­ãš>»d]–ÞÒÞÎ!´ƒøcP¢‡´¶‘˽¼Lç«Ó$Ó¬¦FI- eo¼ cš’ÞÖ HD6ñ$QŽˆƒ¦¨¾ÍsäÇŸ]¢ƒo90ÆO®ÑOTT\*…€b¡66/˜Ö°—ÎwÆsõ©ä(ϳ!Ê>éö¦-¥²Ìf[x„§«„üêz)`ŒŠa‚ÿ,“þù"8ÌHqþÈ¥ò£ÿžiÿ|Б¢}ÔUú Sè¤ 0Á†š‘¤kµU}b-3‹Ÿ¥8ªF4`câ£X"‹$H¬z RÑMeWR¬¨"¢–Ê»E¼A} _³[ãDxÿpS’£$¤h¤õÚ¸¢H"›lHøé¹AÅ9UPaT(ô‰»vÑ»×Ó©?ÞEo¨Í#ŪÑ\@ašY#IP¤ˆ¬§øXdT0XYÚ±k{Xbfä”@*ÍTm NáÚ$g®H¤kxduw†6uä1PH© † èhÇíBª¨Â€>”µÃŒ¬ñ£2ô%A"¤¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÌ¿ñ‘¥¸KíJÚÝÏE’@ XµÔ¬¯m~Óku°ÏEn*h.!¹ˆK‹$g£)È©h¢Š(¢Š(¢Š(¬MgÅš&s¾¥¼ÒýÕcZñJ“IJÄáÑÆU‡B*J+:ÿ]Ò´É–ëø-äa•YÔ-â sZÌ`gýh«¶ž©l.,nc¸„œoŒäf­QEQEQY×Úö•¦L!½¿‚ ÈYizî™­,§^Ep#8mœVQEV.½â­Ã+ j×kn&$!#9ÅeGñ7Â2.á¬BûÇZx×Ó[ùé«[ùgû¸üêøJt3¥Ë© RÙ¬¢m¯0•O¦jM#Ä:N¼®Ú]üb?¿å6íµ©EQEQXúÇŠ4MHãÕ5-^@J‰Å]Óõ+=VÉ/,.{wû²!È5n¨Ç¬iÓjcìvŸzq¸~zŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢±õOhz,¾V£©ÛÛËÛ$|ZWjq]ÛH$†UÜŒ;бEÝå½…¬—Ws$0F2îç ƒKÕì5«Oµi×1ÜCœoC‘š½EQEQEQEQEQEQEQEW•üMøšt‡£.§7ÊO]™þµ¯à¿YÙèés¬À·º•Àß,—_L×ñ#N¿ðö¯k¦èö{Mm¼§6·>µëº›… ZX†aŒ,{÷­(åŽPLr+ýÓš ˆ¬º†=<Ò³ª}æêiKbÖŒŒg¥2ké7"ÿ³^«½wmÜ3éšuQEã¿ôöÖï<5¤EÌ·7,£Ô —âg‡tï|#k+KhÁ„Ä¥‚ŒŸ˜d“W>xLÖ¾ÛÛ\A¤þ`$TçÖ«ü2ðÄzv—â-R·Y£Žå†ÙC.88úU/€ö "xŠ_ øNk»Y’;ÇuŽÝÉ5Ði2Í>‘i-ÁÌϳŸ|sWi:SD±œaÔçÞŸE1äDûî«õ8§+Rö¦¼±ÇSŠPÊNëŠuMlåEcК~F3ž=j½µ‘‚¥Ì,O@²Kݼò'¾o,‡MžÛ³°Ž½k?Æ7“£'Š^òt&äCmL@Æ}*ߊ¢¼Ãð•êZ…ÌWJéöX°ª¹Gz“\yuŸÝø—TÔ.- ޶1E!]íÙ›¦µ4m[Y»øOg0I$¿¸_(? þõqšj^i^4ŸÃT×Iqùò;n‰¿*Ò†y¼;ã9ü9¢ÝÍ'› ‚]‹…c÷›Ú¬h“>…ñRÛD³¿¸ºY!Ýyæ>à¶ø}õ_‡ðÝ_Ï8ÄemV7*#Üu$Ö×ÃÿËâ+SÒ.¦tº³v…¦ŒüØè{×=á»ÍrËã,ú ίswc,ʲŸ§ZÕñÇŠç›ÆZg„,®ZÙ';¯&FÃñ÷AìMgø²X~_i:¶‹}#ÛÍr º…¦óR:ãð«ÒãË·¤ÎòÍŸlÖE·Û|Wñ[Óõõ»†ÖÙOÙd1¢(éÓ®jß½fõ2Ô5¿ƒ³jÚdn×ê‚& ÉÏr+”Õ,ÖÏá¤>#Žòî×XŒ+´r\Ìr3‘šô>|iðÞÌÝÜK׫™!m­‘^MðþÛ_Öîµý$j—f G,X>Ï .{t­µñg‰<ðêTÖ NyÚ+_7æe_ïV–­¥ÛèÞ }r fgÖÒ!3Jn7n>›sŒv¦ëºÝï‰~/‰í5)ì玀Íß5SÁv^$ñ_€ÿ´§×.­¤‰[ìû[ïc»~UÒ|0ñÿŠü%wm{vëy­žƒœz× £øZîïã­`šíürAæº ·O—éþÜü[…¬¾Ü@d’fŒÆ ¬~bwu5¯áû 5_†:m¤WrA+Z.Ùb8`qÅy§îuk¯êžÖõÛâÖà¬_?á[þðÖ¯ªx“P¸“ÄWí§XÝyP‚ß|®2­zõrž;Òd¾Ð.nb¿ºµ–ÚtòhcŽõÊü"–÷_ø}yåüí4’´~nó½~‡µrÞ“ij|GÕ|3»tÖÊ>y·Q»ž‡š×µÕu_|\¶ÐgÔîo¬¯#Î.q\ÿú«×nõ+¿kº† ßwÌp¹ªrø›BwK«Y¢ú™EiC4s“Bêñ¸Ü®§ Š’Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŠæ!=´±0Èu+ŠñO‡V‰àïêz~¢¢¸Üav<0ÏJõ]kÅf‹hÓMpŽØù1cY^±½{+ýRôH.¯Kո؟¸ü«Šø]¯‡õ¿.ªâ噘™>_Z›Âz}ωþ&j&‘i±f(w$>µ[Ç7Ûô_ Ú¦ ¶a,¨‹ŸLR|Z¸m[ÄÞð£*¼Øº,Õï‹¶¢ÛBд¤&-4Ω;¨ÇZé´_ÛÅáÛ¹-`ò´ÛvÅ(çÇzâ~Ý5ÜÞ"ñmþY÷6×+”UŸ† ý¹«ë~$`rÎÂ"Ý«Á÷-kâÍn÷wŸ­OtbÜUs÷¾•¹§YÉeñ¢æûU}­ÁŠGýiÎòøãâ´ né:_ÍçÕýTø¯¨¶§âÃÑ€¦a$ƒoáëOøµc ´ðÖŽ„ÛØ»9‡ 1ëF»ãKGÒ,-t]1L’am’$Q×ð¬¯x^ËCñ.“{á‹+Q¾¸O6Ò>ÝØŒtþUïQnòSßÚ3õ§Õkç’=>åá•bbŸ\q^ ð§Rñ÷Šnõ][QeÓ¹‘$—Ùô©Æïˆß⺷Ý&—¦D˜ùr¾‡ë^¥ñÎâóáö³mh¤Êm› ;Ô~UÆø_Äw†~ ÃÕè~?ñý¿líå–Õî$¸bG޼ÖÇ…\ã¥uºý§ìe¶Œép_]Ë2ˆ €îl“רW ÄbEUÚ¡@Ò¤¯2ø…y¦ËâýFÖ£GÓî¢rw/(àü­žÕÎj¾²ð†·¦kÕæo>í#kBûƒ©=ª÷ÆxP#PÄçñÍVÓœÃBß³sþŠS÷Íeø×F]+㟭êÒ®þY¾â¶ ŒžÜâ»ÍFßÁ–h-ikwæ80À§sHÝ+‚ø¤¶ñÃÞ!’-šyhÑÎr"#·ÐW¡øŸÅ:]µ»Ú­µýü®«k wÖ¸‚LxNiÔ®Û‘æã¢Ÿ—5×iúój¿á´±¹2XÚØ0Cò‰1úWuEx÷Ç]Sc¦kö˜6³ˆË{7OÔVOÄ_ ]ZxÃÚ½¶ãi*³¸9~ü{â½_¶Riž¶Y7 ›)ÇÞsÉýkÉü«¦·âývÿÄ׌¿eb"·wÚOnüVw„|E“ão_AF™• ‰×î~0>•Ô<š‹½ê´¯Žú}ÔªvÇï+ÎçšÒø¾?á'MGÒœOq5Àoçb÷cPüg³k/xzÈ|ïÒ&îç ]‰õ»IþÞI©¼ÙìòûîÆ1­p¥5Ÿ|·šÐIÍÄ»å rŠÞÔ¾$¹ÐbøO²Í’ûR¹‰Vß¹Ô÷'Òº‡ž%fÓí,Ñ}‚×MW™ñÂÈx?‡JÂø1ªYCâO¬·1«\\f-džãÒ¶~9hSêZô*Ζrn‘Tdí­-:Ýøb ë‹]?ËXFýØÈÀéU<[6oð{PþÌ·[+i£&(Xm''®=ꆗ¶Vÿ àVš1¶,¥¹æ²~^ZµŽ§ lŠÍr̨[æoz‡A¿†Óã—ˆ&¹tˆ \îc·wJ›â³ý¡ðŽê[™Ñ¥šç1©#;w|¼WqðòHäð.’Ѹoôuȧå¿ì/<5ã-?Å:jcÍS…Z½gÁ6-aá;•q<©çMž¥Û–Ïâk¡¬]Áká=SΕµ´C0;{W ð"îÚÍ“Ʋ$ìÎ `ëY^¿²“ãOˆ¤IÐ+¡T$ýîyÅ3ŶÓ|{ÑeYcØ‘€Ïž?Š»¯ü8Ó¼symww{q•À" ‚3šå§ýŸô‡*!Õ¯Gb¯OÐt˜ô-ÓKŠF‘-£‡~§¥EQEQEQEQEQEQE­xcIñ{u D‘‡I ¿CYú_€<=¥\-Äv†Y×ó9|l×P€+Qð¦‡ªÞ »Ý>)f­iÚÚ[Ù@°ÛB‘D¼Q€*Ò4äÔ[P[(ã}é Çñ¡ô}:MAoÞÊ»^Å>aRÞXÚêù7vñÏs²E 3J,mVÐÚ xÅ» ÂðEEm¤ØZZ=­½¤QÛ¿ÞWå?…>ÏO³Óá0Ú[EgªÆ¸ZFÙºŠÊ¸=dTš‹UÐtÝioíRR¿u»Æ§Ó´Ë=*Ùmì­ÒÇe¢]*Âkµº–ÒzHW‘K}¦ÙjQˆïm£!d\ІëCÓ/lRÊ{(žÝV=¼/Ò«éÞÑt©¼û=>›´„e€ôÉ­š)zW'}ðßÂÚ„ï4ÚhWvÜÞ[”þ·¤hZn…l`Ó­RÉÉÚ:Öƒ(u*à Œk˜‡áï†!ÔþÞšbyû÷€X•ÙzWPªQ€; Ç—ÂÚ$Ú°ÕM·7£þ[lùãSÉ éRê+¨Ia^)ÊÌWæËÿéü7·¶0Ísú¹yZÔ€0+:óÃúN¡}íÝ„3\Å÷$uÉ_¥I©i6Å™´¿¶Žxð8È¥¶Òl,ôá§ÛÚÄ–›vùA~\V^™àG½–îÊÁc–N¤’@úzU+Âú>‹w5Õ…”pÍ1Ë²Ž´ýKÃzF¯w ÕõŒSÍ Ê;E?SÐtÍbÇìWÖqË ŒmúÕ[G𖉡Je°²Xå#Ø–l}M?Ä>Ò‰à_øzìÝiÚz¤Ç€îÅÊý3Ò´õO×ìËR¶Yà';OcíPh~Ò<;Ç¥Ù¤ñ¸ŽIükbЧ¨é¶zµ©µ¾f„°b­ê:S®´ûKÛAksn’À ‘8éVB¨QÀ ÇŸÂz Ρöé´»g¸ë¼ äÒ?„t5EÔ›M€Ý©È“o5n}K¸I’[LwI”1éšM/BÒôXÙ4ë(­ÃrJ/&´i¬ªêU€*x Ö]¿†t;KÃwo¥ZEpNL‰káí"ËR—QµÓàŠò_¿*&דëF9h>„V Û†é÷MzÝ–‰¦iÒ´¶–PÃ#ue^kÌ~>¸Ž„à}´7é]ÞŸá}âÚÖñôØZV’ °9ÇJܹ²¶¼µk[˜Xa£uÈ"²íxR(ÓÄÇ;Œó«ZG|=¡j }¦Ø'U*cŽiú¯‚t gP[ëë’ä8'ëK{à¯j2¬—zd2•M€0ÈÇÒ¨k:ï‡~i,ýšÞWÚ‰ ÷¬ŸßÙx–çÃÚT!e[¹Vèúª/#õÅz(DU`S«+VðΥh—_Ý ÐU;?ø{O3}“MŠ96>ÌŒŠm·|5i:\A¤Áé÷dQ†C?ÿ Ü6ù4ˆKç;ùÝù×I1ÛA1 ±Æ¡Tz –Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¼ÿÄß WWñL>#Ó¯–ÏPLn/õ>øõ®‡Ã~ƒÃÑÎâg¹»¸mÓÜ8åÍoÑEQEQEQEQP]Ànm%€Jñ¯˜Ÿy}ÅpGá&žÚ¼Z¬š¾¥%ô_vgpZ»Ë8$¶³ŠgiäEÃJýëŒñ‡Ãh¼gz%¿ÕîÒ9ŠÂíŒúÖÇ…|9{áØ&‚çY›P°"¨XÑÑEQEQEr~;ð=¯ôÈm¦˜Á4/º)@Ý«øCÀxnéï®ï_P¾1¬k+®ÑŽÊ;WiEQEQEQEQEQEQEQEQEQEQHH’pzÈ—ÅzyrêöhùÆ ¢µ•ÖD ¤aGzuQEZöþÓNƒÏ¼¸ŽºnsUìµí'Q˜Ãe¨ÛÏ Û‚kFŠ(¨.¯-¬¢ó.gŽþôKowowûy£•=Q³SQEQEG%Ä0ÿ­š4ÿy€§#+¨e`Êzr)ÔQESÒ4.쨣©c€)#š9—1HŽ=U³RQEQERdœSHŽ®»‘ƒÜÓ¨¢Š(¢Š(¦««#®JuQEQMfTRÌÁTu$ð*Ôl˜áo-Éö•iEí©l ˜IôóN##‘KEÅݽªƒq4qàlf–˜.0M€uØÀâçÅæy~jyŸÝÜ3ùT”QEQEQEQEQERdœSQ¥Ì>Èæ›Ñ\RÑEQEQEQEQEQEQEQYž Õ?±t+½@*³AeVèMQð^»qâO A©Ü°É#•}=k¡¢Š)¬¡Ô« © ×€ü_ðÖ¤øDº²!7 êðkÞlÀ6àtò×ùTôQEVvµ¡Økö&ÏP€K 9ÁìkÃþi°ÙüVÖ­áEm¹Pg8¯ h¢ŠñÍrUñŸÅ†ÐnG™caa<;ûŠÑøUáOxsSÖ?µɲ‘ÿÑ¢VÊã' íÚ½JŠ(¢Š¦º¥‹êÁnc7awsócÖ¼£ã¯‡ãmz ™â¹Õ «¬¶kÐü|¢‡mÍöD$ç9⺠(¢Š+ÊÅÇü,jZEÔî4},…6èÅ|÷ï»…fxGLñ&‘ñ^æÎ )í¼?#“°Ozöz(¤$Iè+”ðw‹eñEÖ±Û$)csä!SãÔ×YEËx¯ÅÇ×úE¤p,ò_ÜyDÁUõ«4Ñouÿ ]éÚuÉ·º »†j—ï ê~ðÀÓõK±s?šÎ ±!Aì+®¢Š(¢Š(¨/"’{)â‰ÊHñ²£á8àמ|7ð_‰|7ªjZî©ö¨æÿW˜_œýïc^•EE<¢ y%=KsXþ×Ûĺ"ê&gePAõ­Ú(¢«_YèYMgp †eØáN+毋~Ó|!®ipé µ«kã¯ÛxÒßLÔbFŠêÜÎ$ÿUÇÒhºÇ‰üCc.¿e­À¿3ÓJñ´0O­h®¥âM{á{ßÛÝ¥®£ûß8”ì Áü&Ó|cw§My¥j¶ðÛ=áû@‘2ÎxÏ5ô ¨r c’=iõÞg“'•3iÙž™í_7øšÏÅ“|SÒlµ J¾fß ù#ôã½zÖ¯‹4oMv5ˆgÔ-U¤v0ðë銋Àž!Ö|càoâ(õ&fD•SN}+‰ðâ?ø;ÄÚL:¥ÔWÖƒìm©·Ëj뇽\øµ6¶¾žëK¼ŽÞÏȨ̀9ÏM¦©|+ÓüI‡¥ÜM¨AýåòD1Ï©§ê>7ñ­æ‰¦^½–`¿½š!ó;zÚ™câëÿ ü@_ kW¦òÚéA¶¸~C^¦ih¯žhÙâ•b p˜W¡gÄ÷>K=7Ã’†’ ‰4²(Q‘Ö¨øÁ‡áׇõ=oQĺ“#Hûz(þè¬k-sÅ>!ð¥ïЬ|BЛbÄYù*Žvç½wž ñÇ< ¡‹{¹FÌ£î°8&¼óÞ*ñ{øïUðÕ΢n^ U$+€£ûß‘®‹Âzî¿©iž&³Ö¬,·¤S:í.*À%'Áú¦Ó¶F½oÀ⥃ÄÞ%²ø·m᫽J;‹G_1ÂŃJµñÅ—ö^-Ò|=MooxG™4#æäôª’jZ§ƒ¾#éºSj²ßØj?.ÉŽYÖ¥øµªø¯Ã6cYÒõu†Ð0O³ˆ9õɨ.u¿7‚?á*PŠ8ádû7”?x£ï}êæ‘â/xï@:¦u› HrZ=ÆGGÒµ>øÊëÄúMèÔÂ-åŒÆ9J Žõ›§øƒRøâ]NËLÔÃJÓ›Ëóa¼¯õ=ªç‡¼OyŠõê"[¨¢ßmuÝýùÉCãZ|J =ädš=«Ï šèæñn¹áXhºÕŽ徢?u$qìe?LÖÇíÔ´Võ#Ò¦'”£æf÷®×Áv&µH[V¾·–Ä@¢¢B¤qÞ»J+Ïþ"øòO µž•¦ª¶«|ác-ÈAž¸¬½cSñ?­­5}OZþÒ±’E[ˆÌAvgºâ¬x÷Å> Òü:ž%Ю-›NØ¥‘Ó'žâªÇâo^ø)¾jðTòxëšìÚ^¾‚Õƒ!!6×ü òí4½OO‘LwPÜêÇò¬ä´Ÿ^ø÷q<<‹7Ì>?SPø:ÖO |gÕíîþQs–™¾ò“ëøÔ_5ëkh°Âñ”·”o”ôÎ}k·ø Z÷á}ËÚ.U2r0:ô¬KZZ|ÝæFÒ5¹AyéŠÏð˜Ô> ê6P¾fpÿ(<“þM\øößð‰_i×|Õ¸a*1þuwÄ~‘sá?èúœ±4y"èí×h¬ß…z>­x{û¨ætr"LSo'·Ò¯Ká="ÓGñ.‘á´szðfi² sÇÖðwPƒOø{*\Ê‘Ëk,‚Uc§=ëŸøWªÙOñ_p6<Î̬ƽÄÿ´O jé×í!žPÈ>è÷®¦Òê+ÛH®amÑJ»”ûTô„€2Nx„dH¾›…zÍô6ÖÖ’Ý›hä’ŽÞpJñK/‡6Þ)°:ÿ…µ¹ôç™ÚØ>U<úw®¯À׺ƒø+^Óµ"6žòÂeŒpÿ.IúóY ux´†:•är¨)pæ<õÏÒ½{OšK>ÞiF$’5fäUš+ÄüMûAhûÎHƒƒéÁ®ÓU×%¼°ñlÑí­ +QÔìË ÖOÀ¹ü=@âyþ4Ú\¾¡^À¬ÐE(Iñü ÍtgÁ–º·‡I¯j&Îkw©R¸úTþ 7†¼ 4ö/9ÓmšF-/'åëj›Á¿ôoMsœ%ŽX)(Á#Ö»)1ÏJñÿ„„øÁ \‹Ž1þñ¨|tU¾7xm$]Éåä}~njÏÇwC§hQokå#ס®ƒâfáMßh©-Ö½¦Þ^\Z^Es’‘I´‘ÈÍw^ðîã‹[ß·]O¬È§n÷Ý•sé\Å›+þÒy*qoÇ×›ñ:L|Y𢣠Ù'ø~jÒøðè|/§!ê׊Aí]Skó[kžÒ-¶476û¥8ä×Ñ^ ñ:Ú[‹Úäà‹Fxñ!¥u_åˆü;òÁÃM4kúóŸéX~,¶¸Ó~YÚÜ%+áø×W -¿Á6]ÃÙÇùU+·áêü fáÎ}y¯O¢¼¯ãÔ»< sóÜ(­í]h,¼+§E±þ×n ·p¡k‰ð™ŽoÚÛí0ý*_Û㇆ 0á?Ʋ>%é×gã‹4“4NUc˜5×øãÁ6÷žyõ¿_Iil<Ü:®3Ž1Åt_ bµ‹Àzp²3r¤¡˜|ÄfºÚ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+#Ä~°ñ>–Ö„{¢' Ž ûV‡~èþœJ“\]2ýÁ3d/Ò£Õ¾xsX¾ûeй7³¼Lr>•ÕiM¾§%•±‘¢^ò6ã\ö³ðïOÕuC¨Awua; 9µm»þµµ¡xsOðü œd»ó$®rî}I¨5ßhþ"d{ûbeQ$m±ñé‘Tî>ø^êÞ.4Ä’8>àf'µ‹§Ûi#KŠÜ 0¥Dd’1ø×;kðËÃ6sLñYKŸ¶Us×ô«º´? ÌÒéPIàC!²·àk;Tøg¤ê³jP\ÝXM'úϲ>Á'Öº=#B±Ñl>ÇiœîÝÉlõÍsw? ´§¿–êÊîóN6é"´}ªÆº-@±Ð,Í­”d+³9ÜÎ}IïX·? ü=u«I¨4£ÊÛ¤‰$+·©_ZŽ/†>·×W·µ’¥mÙIúW/ñ+OѼO«A§YAös!HÉýÚwÝ^™£X /G´±S‘A3Wê–«§&­§Kg$²Ä² ‰¶°ükжøA¡ÚjBþ+½@\‚ “ÎäýkªÖü7§øƒK[ B2ê l:Üƹý+ὕž¡ Þ¡uª5¿ú…¹l¬AVüUà È¡wv…Cá>¸©|)àË ÇåZßÝÏ]«í¿Jê(¢¼ëQøI§]x†]fÏR¾±žvÌË à8ÎMjkŸt­~Æ++¹îE´H#GÀã¹õ4É~iòi+¦®¡¨ÇlafùXcƒWü+àÛ/ÙIce<ÒZ¿>T§ æ±/>Fš­Æ¡¡j×:KÜÒÇÝcôí[þð§‡VIDs{1Ì·2òí] CWÓ›TÓÞÑnæµ/ÿ-a8a\v•ðŸMÑõ /­u]Inf9•üÁûϯ–ß t‹mwûeuE¯³“#KÉöéF«ð²ßYÖSU¼Ö¯ÚâÝwÎGjêlô‹ˆ´Ó.µn¤ueûC( ƒX|3Òì´ø­´ûÛÛ&EÚò[É´ÉîEmi^°Ò49t«}æ‹ÎYÉêI®;Nø1¥Ø]–:Ü–f_4Z„ÝÛ5鈋*(¨Àê+ñGÃÍ/Å„Z„³ÜZÞG€³@Ø4ÓðçKm t¯´Þw3Hë.Rzîõ¥ð÷í+ÃQÏ Åß‘2•14¿*ç©èjµÂ½LÔöÊK¸gvÜî%9o­6O…:Ú‰ÔZâûí‡þ[ ÎGµŸÂ­Vš)¯o5¤„æ"Óçaö®žmÎëÃߨ·[§¶1yD¿Þ#×ë\­¿Ãi-´_êÙ}¦GÝî7uÅtúŒ6™á©­oV(4µ‹Ëuc…ÛÓÃü/ð…ž›«jzýŒ •Ïî­#nè?‹ñ¯P¢¨k`Õôç³7[‡ ™!l0ǽrú'Ã-'Ãú©Ôlo5›t›¦È“ëǹ¥Ôþhú¦¨59®¯þܧ)7’žÂ¢Öþizû[›Ûëæû?ÜgCë]-χìï|:tK½ó[4^S?1¹õ®Ã ´ÿÞA8¾¼¼[`~ÍÃç‚@õ«úï‚luA5çšÆõWižß†aïëMðç´ïÞK|²Íw Ú×3œ¶+©¢«_Ú ý>{C#Ä&B…ã8eÏq^qsðCC¿•d¾Õ5;—^…å¥tžð5·…n¥šÛSÔnEÛå\˹G¸­íWJ´Ö´Ù¬/cA*á”×!¤ü(д¨Ì"[©íþmÊùEϵO£ü1Ñ4O;ìÒ]Ÿ1YP4¼D®Ütª¶ß´ -@_[\_Çq»s8Ÿ–ú×Gâ [xŽÆ;›‹˜¢Œóä¾ÝÜt5•£ü6Ñt-¦½Ì*s”ó R}qUføQ¡Üj?Ú2Ýj&ó?ë…Á JÖÖü ¡ëò[M{ùöàš6Úÿ˜ªzÃ/ êV¶ÐKlëö¸êçqõɧk ô=vÂÖÆãÏK{U i&ñÙ>éhé¥Ís~öˆ1³Ï##ÐúŠŽËá–¦éóXYÞj0ÛKü q÷~•cÃ4 _½Þ™-Ð2$—r±=Ͻ3^ø{§jÚö¬óéÚûÓ[¶7}E]Ò<i¤Û\qq=åÂí’òV̘ö=«6×á–i­&¯Åá½™\–ö5KTøK¦êúœzÆ«¨˜Ûr>ðJóœjè¼Aáxyt{÷‘‘픜ުxkÀ–^ºûWÛnï®yi%Ó(¾‹é]e‹â? i¾'±×ñ“°îŽE8d>¢¹»o†q>§Ö±ª\êq[¶è —î©íŸZÑñ_-<\‘Áy}u¤cg…°¦«ÿ¸±:ö9Õu?±à®Á(ééÒŸáo‡ðxJë6­ëÙ€vÚÈFÀOS]•‡â¯ Yx·D“L¾#r¬:«zÖðÚ9 j×W3ù%|fÿdU+ƒö~²ú´Þ¦/å¤.¹o¯bûáF¨ê©ª\êÚ“ÞÆsÞ`Ê}8­­wÁv> Ð`Ó/&•ž ®sûÅaÞ¹øU—÷ÞU¾³â›Ëí>2¶Ù·w±=ëÑl¬à°³ŠÒÚ11.ÔQÐ ±EQEQEQEQEQEQEQEQEQEQEJßHÓí/%¼‚Ò(î%ûò*òÕvŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š«}§ÚjVÿg½·ŽâÁ¶H¹*xãHcXãP¨£ £ ú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠBÁz>´´”Ï: Û|ÄÝé¸T”SYÕÌÁ~¦”à ‚=E-ÏD %D'¦æ4,±¹ÂȬ}š¤¢š[8`q×EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEs^8ñ8ð§‡%¿4¬Â8ƒtÜk”Ñü%?Š­TÔ|K{#Ê»•m¥òŸ ¬ÙµíSáÏ‹lô«Ûù/ôÛ¬óΜú×Uâ^{ýcOðÝ­ÃZÔ2Ë:Ÿ›f:J[߇¶Y<Öww°]Æ…–o=Ì9Ï5§à}VëXð¼œÎ¬Ñ3{oz³ˆ¢—Å2hi/^c>kϾ3hÒZh’ëöz…ÜW ê¯ÌBíÏa]ŸÃ¹e›ÀÚl“HÒÈцgc’sÍu4Vˆ¼'¦ø•Pß ·Æ¤!ŽVL~Uó¼÷ZÏ…\)0)ÝÉÀǽu¿ ®//<iw}q$ÓLÌÅœç½uš®§m£éw…Ü‚8 BîǵpVZ¯ˆ9›ÂšmÜ–vö–æ{‰¡áØÿtÕÂ}kÄWך­–¬·Z[¾!šqóg<Œ÷¯S¢Š(¢Š(¢Š(¢ŠÌñ¯… ÞjRãm¼eð}kÃoõOá{ÚÝ^M}}q˜íãÿWdí{×¹è3]Ï ØÍ~….Þi”öb9¥^'ñx“@Oí«M~híe”F¶ÉÀZõO ÜKwá].ây ’Én¬Î{œVÅVe®»cw­Þi0ÈZêÑU¥àf¼—âUïŠü?âm7Èñßc¿¸Ú‘"…òÆG¯h·Ýöhƒœ¶Á“êqRÑ\ˆÎÄ$BÇÓ‘XÚF­â4øym¡ˆÖÚÎÝX£©Ý&?Ê»x¯þÿ Å~é²u;%QÓ"ºªk0U,x“_;øçL“Qð}Ρþò×Q‘‰OBÝkµð÷Š_TøoclX›ÉØZœr}Ísn§Møïgj‹ÄG© ^Ùªê0éUΡqŸ*Þ2íjóñÿŠn¼5/‰´ÈôùôØ™‹BA2ù×g¥øŽóÄþ M_D†5»•~D› nù®'Dø¥®^ëzއw§Û®£n Ʊœ®áÔ“é[~øŒúžª^k1%¹ÓÜ«ºƒµ±éY‘ü@ñþ•?ˆ-a°·Ñâ“í$†‘súV–¯â[o|"Ô5H—‡·pñçø€é\Ï€|E­Cà+xt 5.E²³Êîøý‘]×€DàóO üQ×µÏÝhÒi6±Ý[«B#µ\ð÷Å K]ñö†º41ÜÚÝ™O,;cë[žñ†«â]Bö­!m!µÄ҇ݗ«Î­uX´:ÌööòLïÄ…:³µÝØüGÏ‹-ü?ªiæÎâåKDû÷[ž0ñmŸ„4¥»¹V–Y_Ë‚ë#zW7qãhQZßø‡J¶·Óg+$kÚ-¥®«ªé6çI¸uO6Þ]Ås^—ewý”7p6è¦@è}X®gÆ^2±ð†š³N|Ë™›Ë‚yvíøW1uãísÂÂçÄ–VqZÞ>Ð"“çLúŽõÑøŸÆ–Ú…›ÛªÜ]ß0KXAåÉïôª—þ2ºðÕ¾™'ˆmíü¹%„ü±1éPøïÇwþ¶‚þßIÚs¨2N$ÆÜôªëñQ¹ðÐ×l´–Í|¬_wÛëŠÜ±ñaÖü5½ÐÞLTbÛ;Nî⼋Ãzþ»mñ3]»¶ÐçRš0ÓÍ\Æ3×5êºç‹WÃö– 4þ׿!c´^>oaëY÷ž5Õ¼5¨éðø’ÎÝ-ï¤ò’h![Þ©xûǺÿ„;¸´¸%Òä`©;?9>¢ªÞüV¾²—Iº}5Ÿ|â Y¿xÇŒ‘Û·­øêøHmü9¡Aº”Éæ3Ê~H‡¿½w‹u=;Åpx{ÄiŸu™o< Ç?tÖ/þ"ø‡ÁzÔQ\ipI§ÎäC2¶IãSêßõÍ"ÂßY¹Ð4yT¹—2sßÞÁ¬ÙË ¦°Ò´h|ííÙqšá ñψµ‹kgI³²D„°I.äÚÒmê}«gIø‡¥ßx2OÎÂ(àÊÌ ç ;ZÉ_xžMþ(ôh·ÍÎ|ã÷±Ðz×iáývÓÄš4“n†aœzâµkñÇŽc𨵴·€\êwŽ#‚Ø=ÍdÝø»Ä~¸µÇdöW.ζydö5Câî©­KáKÈì¬Qô‰`V{¢ø#>Ôï„—Þ"¸Ð4ëYô¸SHŽ%Á|³~ê´W“|ÁðE¨ç?k_åF›âé^²ÖÂÜiVÖéº2~rÚ»ë/éמ]xN‚ÏÊóóÀ®nËÆ Ö4¹5Í7K·:ZU^B%‘GR;V¤2¯„ßYÐìZþe;~̾OµyïøŠãÅZåèÐÍÜ—7J—dAíøV¯ÆÉ=_Â’Í€‰s½±ìFk{Tø—w¡ÛÁ¨]èR.‘#Y÷üøìv× XÞèØÁynÛ¢™¡ö5b¨k³B¿n¸·ýׇü ×tý&ÓV²ùm$ÃnsÅz?‰¼_£]ø_V‚+†.ÖÎÈyâ¹OÙêB|1¨©P?Ò‰Èú ô?ø²ËšrÜ܆’Y$P§Þv=«ojz:ÚÝxƒIKK§ ²#î1ç¦ïJ“Ç>=ºð¤7ðél±‘A3Æ éK¬xãRÓücâM®ãž<¨²cÊf¬x_Çqëþ—ÄsÚ›d„;<`ç…¬Uñlj×F>!m&Ò])£2*E!2(ê7õ«¥OÚAà˜ñ–‰£j]øzÔÛÈ7+G)o,ïW¤i­¨é—® ñ,…GlŠ»EQEQEQEQEQEQEPÕµk=N–úúeŽÆI'¯°¯6’äxúä¶¥¨¥–ŽR— "ÿµZº†½£èvö:G‡.m…Ì’*m‡íÏ$Ô&åîþ.Cc©.R=Öàô-œ]Æ­¦iÚ„‘jE$rw¯Jâ~X&œu¶´ ýö†û?¦¥s¿ ®Gü'ž+”ŽC³ ýjŠ:Ôš×Âo¶˜Ö!-ÎÒ¤ö Çò®“OŠ+?ƒ[PíO%¾»k+àIð…Jÿ—†Ç½zEp@·±ÀÚy¯6ð핾±àmvÈ~ð<²…OSŠà~ Ù^Kâ››[¦f·±f`§ z·ªÊëûDÅó¤Œ`ûW¯øßWÓ´o ß\ꉭŒe D}ò{W”i\¯ÂMRþ[ )£‘£¶Q¹›Ð5Õ|¿€x"ÎÍçO´9wXóó¸äÖÃø¡¸øÅârè©aÍjüiµM7ÀNºuºB’Ì Â1ÃÞ´?é¯uák+ÅRVÚã/ÑMz'‡ãŠÙ$`ŨÆ=6×|‚å¼sâwˆ´;—#»nlZêaðŽt«©ÿ²µ›E¶’S&$.Ù9å«Î<kâi¾)k±éw¶©¨)a4’)ÚÜöïPßÜh>>"»‰®$ˆ0û ã¡Ñ_Æ÷ãQñâ&Ÿy–úyp8ìÏÍu:vµo'‰Ž‰¦¤?d¶·ß!+‚·P³[Áf×1 ’2"-ócéV¨¯Ÿ> Fþø¥m¯Û#ýžñHe^„úVGˆWQð'Š´Ý~(YžúgýéoåùWºøM};ÂöÞwü|Üfy¿ßc“^sáÛh§ý¢õ©ßÝÀYqÏ?-Mñ £ÿ…Ëá% ó†É?ʳ¾1‹éþ ønØJݤO+xÊÜ9?¥už.ð¯Š.èÝÛ,ÆAós^‰ãŸi>'K ÝJõíá°‹Ã/—JàüW_Œ^‰6+}œãå?çŠê¾8ùðÃçûD{¡ÍSñ¼RŸ€ñ¬ç2ˆaÜè4ëaeð…b\64òñÚËø¤|?\޳¿ó¬Ï$C㯉J)âdö9¬Ÿ%ÜŸìTΈUÙüÁ¹GÊsÅuž6ðv©â-.6Õµ›X¡´“Ï%HÇãïY?UáYéqyžfgˆé»å<×s¢hUç†tu¹²Šo"%h‹¯Ý8ê+Èü7k¨Éñ¿[ˆ\­­ØV(ò&ï—#ßj¾¾Ô|K¥ë:ˆS̲ݨˆG»žkã”fiü5 Æ×|þ•«ñ‚8âøS$|¾VúŠÍñ,׉ðÔÚƒ–´A&ÑÑ{ÖÏ€´K=oà펙)aÄ$1SÈ$× ñÃvøk™£^<°Ç}›†ëóÜþUÝØèÞ&Ôüie¥§‹yí`ÀÙ W´¿ ¼9'…ôýCLmN;Ñý#òÉ+ÐëÀügÃ|ÑÞál͈ž˜Ÿu_vÿÂL±¸]­ýÓQx“΋à ö&Se9ëœ è¾§—ðÛG“˜³šíh¯$ý ÿ„:È’@c?•ojžD_¦$(û3#þù¯&uHÿg¹1¿Ë{‘×þyîÿö/$kð¶Ä m6g8õÅq|åƒÄ‘›u›)Ž™9Ïô©þÌ–6¾,¿mÌ©zÌÊܱùÓg×5Êøºæ{ÙÿMšä“+Çw ì|È£ø Îû'ÿe¬O‡Ò[?Á…Ê Å(”'Þ#'?×ó®^ßÂ>6Ó4Èî¼=«­ö‘${Ò):íþî UñÖ·y¬ü+ÑÜÀmR;£ ñ¯mã§Ö½!4/êþƒO‡S²[‹@ ˆ etÎk èš7»PÔ–â´,Bt_õL[åÏ=rZ®ƒñAÒä®UÑö|üƒò~<ô¯dð&³¹á ¸#òÔ'–Sû¥xÅt”QEQEQEQEQEQEW㿇×4¹‡v¯%µ¢ <#}ë”_ÙöÁ]Jë· Ïáé[^ø/¤hÌZ¾¸žXŽT8Wc¯øfÓ] #;ÛÝÆŠæ.3YÖ¿‰ßQñ åõ›®ß)€SùŠèìtûm:É--b Œçò|%ìµ®©q-©Ïú;ãh'½vÕÌxŸÂ×^"p±ëWvPìÚÑÀ@ÝXÞøh|)tÛ[¼–mÒC!Èj¸¿ã²7òé:”öw7²ù’Hª8ö€ÿb“X]]üA|u9ó~_ð®šëÁmªøvóFÖ5/"˜ƒ‘ƒù5Ïéß f¶ÒF‘w®Íq¥ `°lÛùúÒø?á•÷†%žOírØFŽØmâ5c“õ5ð·Xðÿˆ¥Ö-üH[†ÍÀhyqŸZïõý×Ä:4úmâƒÊFHé^y¥xÆ:EœšM§ˆa])¾UÊeÕ}«jÿáäÓxNXêfÖÓOòn2ç¾:f‹àMgAðûiZúù9Âïƒ;W¸¨<ðßPðv­%;´²ÛÎû§‰¢å¾‡µqü#o¨|A±žÆõßS»‘sà…Q˜×ºÚFÑYÁrÉ©úO‘Y¢p­µŠ¡¯8Ö~kÞ ÓçÓõ/I-œ­»Ëû8ü*Öà]wÃ:uµ†Ÿâ!öh›,UÏ#5ÙjÚU®µ¦O§ÞÆ$‚eÚÀׄ¼Sa¦K¤Yk}€‘<‘“"'§½oxGÂV^Ò…·Ï#ÓLFFõ56½a®^˜¿²58¬”¿|{‹W ¦|)Õ4oO®Yxˆ Ûƒ™KÃò·áZ7øy«xÎ;Xeñ·† Æ‘à3ú×0Ÿ®ÑxñeØ$r6œ:í>xøÁ-÷Ûf¹`L…H Õç.ðž©añbÂþÛRód¾º«È ò¶+ßS;w\sN®OÇ ÅöÖÒ,oir³GÞ¨¦xÏÁiâ¨t¨Œˆ‚ÎádmÃ;”v®žXå[ŽØªÈ©µ éšóM᮹¥øºI«Û}®ã"Dò‰‘ÓŸj“[øâMgÅÖzüšµˆšÄÿ£ „ã¯ñs]‹|<_¡[Ay:Ç©[bH®c\“ü+? xöò8´½KX³M0 ²Ë>l‹Ü{f¬øÃÀºþ‹‡§^Ag¥Ä£÷e2Ù<~ ×£ððúëy&/$ÈÐÁ1Œu¦ü<ðV­à¸d±žþÞâÀ’ꪅX1®ö¸ˆÞÿ„ßMa¹÷–¯¾a•Ͻsº¿ÂýsÄ~ÚÖµ×pöe6Ƥw>§ÞºoxVÿÃñ\O«\C=ôʱ–‰p¨â»:ã¼}àxüaglðÍö}BÍ÷ÛÍŽ±¬¸<1âý]ã´ñ£l4ØÙK%¾wMŽÇÐVïŠ|o¯ÚZy2 [Ëm0\íÇcíX·~ Ö¼K{l!Q™ûŽXŽ•¥áÏ]龸е}Iu iÊíØ˜Æ=ë±ðGŒ|6¥h:Å·öKç*~ò,ç]Jø"Åü#&…rZãÎ¥šNYä?Äk–Ó|=ñI·]×Q³û ±Ü¸bÈã]׆ô|;¦ XÜË+±’y›ïHç©5³\·Œ<‰ÒÚâ)¾Í¨Ù¶ûyÀè}µsÍà=ÄW¶­âÍNÞ{;WÞ–Öè@r:ÍhøçÁ:§‹,ÓNµÖRËNà0îÜG¿åSxÂšÇ„í æ®·–Q&Ø#íÛ]ÉxãÁ1xÚÞÊÚâàÅù’9qŽƒÒ¹ßø@|K5ðåαnÞ8RUœP¥v­á,øcþñn‡•åþ¿Zã ð§Œ4ÍMN¾³:w)Òæ"ÕÕxG–~ÐSM¶ù‰ËK!êìzšãìþë:V¥¨Û麤1hÚ„¦IÑ™°©¼YðçWñ¡eî:W#ià/·…äðõö³nlR"$Ã7(céMðŸ€|C£x[Qðíæ£oö9£d…Ðd®î¹­m;Á¾…§Ãa£ëÆ;T]¥%MØõÅiMàm2çÂG@¸]ñ6]¤ÀÉò[ó®~Ǿ7Ò톗i®[g ÛdUôô­oÀ'Qð_ö ½ÞÇyI§n®wÇëY—ž ñÓN‹e®Û6šé³Ì™šƒÐz×eáÁáŸÛiP1qùœÿ¦¶h¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬+Âzn•©ÜêH­5íÖi¥ù™G÷G ½EQEQEªí¬mµÊ­èk—ðß‚ÓHÔ®5mBíõ Nn<ùúµÏEô®²Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠŽi£·…æ•ÂÆƒ,ǰªún§i«Y­Ý”¢XXzйEWñFoiÚêÚ¦-RÕwKÌ—æð§_Ô|EáAwªNf¹ß‚}¹®îŠ(¢±|Ge«ßiÞ^¨¥ÈmÞc&àG¥yçÃ/øWñ†«¦kW¢u´p£9¯]¢Š(¢Š(¢Š(¢Š(¢Š(ª³j]Åi-Äiq7ú¸Éå«–ø“âëÏxm5;ežF˜Gót\÷­?ëóø›ÂÖz¥Í±·š`w!ǵtQEQPÜÝAgn÷2¤P Ë;œ¨Úê¶Iye(–Ýþ뎆™m«X^^Ïgos·­E9Ûõ«ÔQEQEUQ¨Ù¶ Ö q»TÞÑóõ®#âoŽõÅaö rn†r2Ûêk³Òo›QÑ­odŒÄÓD®È„÷©­/m¯¢2ZÌ“ b¥ç‘ÔW™Þ|F×"ø©†¡Ó7YùŠŒvå¶÷|úWªQEQEqþ8ñ°ð·ØìíàóõöÙn„ð9'ó®wJø¬Eñ? j‰ Ád¥6íb3ùb½JŠ(¢Š(¢¹ŸZø®ââáûë+hBþðN…‰5æZW޼sã©<+çØyÑ»+Oåœqíšî¼E?Š´m¯ÿ´¬ŒDÆ@cǘ݀¬ Mñ+W0]ßÉighä1Óç+ý+Ôh¢Š*…ޱ§êWW6ÖwQÍ5«ì™Tça«ôQEÌëîp¤ªúšò[_‰Þ$ƒÇÖžÕôˆ-ÌÌ7$§¡ëÕÉüCñ\þðÄšµ·Ÿ6àˆùTúš€|G{⯠A©ßZ}šW$mƒî+©®cÆÒx’ \xq­Ä±eåŒîP;W1ðÆZß‹£ÔÛW(ßgp¨Qpî+Ó¨¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Ë~'|BM•Þegq%Ë.É%Ûò&}é>ø¦9t[4ÛÀpK\2a2k£ñ×NÕbÑt«o·êÒŒˆAÀAêME¢øÞi5±¢k¶_`ÔŸ6VO¡­ø³Oðµ¬rÞ–i&m‘Dƒ,ưcø‡%•Ì#^Ò'Ómn\± £Ð7¥\ø”R‡:«#nV„2zò+ƒðO‰æðwÃ;kÏìÙ.âÜKyg‘ÏÚøSÆÚŸ‰.cßáû‹KGHk·¢¼ûÆî<#|ñ¶‡q=ª&æ¸v¢Ò~(K®iñÝéš ÍÒÌ…Xž¢ºý Ä~!Ó>ÙbÙ<†ŒõVô5å¿ 9ø‡â’ØÏžßÌ×u¬xÜZj¯¥iz|ºôc/0]´¾ñݧŠ..,ZÞKMBÜ‘-¼E^ñ?‹´ÿ Á¹Ý-Ìí¶ xùy cé¿„º½¶«ésérÝÿǹ™}=¿úõ«â/Yx~hmŒ2ÝÞÍþ®Ú\ûÔ:'Žl5}@éÓ[ÜX_íÜ ¹$zŠêh¦Hþ\Lø-´Ô×™Gñ£L]]*ÿM¼³‘ßj´«´cךÞÑ~#éÖ¼4x㞆]ñWAê)ÚÇ`²ÔÛMÓlgÔï#• sZ~ñU‡ˆí¥’ß|RÀvÍ ƒ ïšÄo‰ú?Û¤ »x#b­t">X#¯5=ÇÄm=b8î'¶wdTdž:šÎ±ø½ jVm5¤7sÈh‚8÷9÷úWUáÿéþ$µiì]·FvÉ®ÖCèEek^=±Òõa¥ZÚÜêZ]ͨ ÷ô«Þñm‡ˆdšVHn¡ÿ[o(ç֙¯øÂÃA»·²t–æúãý]¼,}ý©ºwŒl¯e¸·ž­. ]í £æÇ¨ÇZòÝGâ –©ñSM»·"ÒÂ&Æa!Ù·Zô{Ç~°Òí®5h$k[•Þ¢HwÄU÷ñŽ‹eá85ägI‚(²!YV_|1jóÁ4̶lXÉb~•½áÏi>(†GÓ§ÜÑdûm¥ÜŠË»ÌŠ<¢ýMgAñOH»ÒÒúÒÎþå.±C¸Æ¾¦º­Y±×tô¾°˜I ¾ŸZÁ¼øc¥5…Ö£$eʧ¯5 ž/ÒäðôšÊHïo¨¥˜Lzדx{â œßumfêÖéc’†H‹0\ÿí^‰âh:AƒûRÚvâ&Ã'·Ö¦ñ?¬t ®©åI ¸Œ˜QÛ¿ ®Gá'ЬäÓ£±xn…åÜï#òÁ$Ÿ½Ó§ò®™|y ·‹×G6sG©ÈvïxpHúúWA¯x‚ÃÖj¾€ÌFYØôV¿ãQ‚ÓXÓ.ô±rØ·’eù_Û#¡«Þ*ñ•—„­£¹¼¶¸–ë"\ªúf³î>$i±Ú ¨,ïn  d’Ü#Sêk£ÐõËéQj|ÂH$»CZU Ìëkk,ì XÔ±sÅ|÷ãØk?|;v¶·‰“’ѼGsö…z.¡ã¿ iB\i7 %ÂöŸ³Ã`š½sñC@¶¶³¸c3Cr‡ ò¦î›jëž0Ót8m·—žâè ¼„Õ'Ƕ÷º¢éº…•Ærù1,É1éYþ!ø¯¦øgS6Z†›|™}‰.Ï‘¾†‹‹Z-¬‘4–—¢ÎF/<¯ÝgëWuˆún˜$—wÑD¡å–Ý2ˆ©­ïø‚ÃĺTzŽ.ø_óSéZ´Q^ ]YÙüxÖ.$ÄkÈìîq´qšíô-wOø‡âÛÎÝg¦Ë˜­³÷Øz×£V‰µ¯üPÒ|7­ÿfjWèÅ‚¤¾XØÿCšš‰z%³Fò­ÊÛ<žZܘϔ[ýê¹âŸéþÑÒõÖ[9 B±)mßá^[ð£Æ¶öÒêÜÙ]=Æ«z[|Q–UÉàf½êІæqmk,åYÄh\ªŒ“Ú¸K/‹º Ö¬šT–÷Ðß;m4$’jê|MÐN¶º;-â_1ÀˆÛ¶jÍÄ "ÿÄ'CnEè8*a8SÚ¼ãÆrEkñûG–Y§ÙÕo½ÅzM§ô ½QlËÇ,‡™ª¿ÐÕx“Jðöž$Õ¢y-ß“ˆ·¨Ç¯aSøc^Ó|C¡Å¨icm¡Ê¨+·ö¬‹¿ˆ6I{so§X]êe8š[e÷­;MzÏ_ðÍÕí›ñåH¬„òŒà׌üñM·‡ôÝU%·¸º¹šë)ol›œŒrqé^±á_ˆOŠï.,­Rx.íþü®×¼WYEQEQEQEQEQEQEW™|nÛ‚EÂÈepšÞð9ŠÃáö™+”G6Á”œÇæ¿ åûÅf{’Æeg ¸ò9ÿëTŸä’?hhÌ·*Ë÷}2(ñeÄ׿´{íÞJª£5v_á…¾Ým¡CèsXðÞK?ìþÒ^îi>ÎP’zóÇé\¯ˆµ-Âz1¸°Ý£¬€;“÷ëè_êVZ®ow`@êQÚµh®âþ?á[jgà:­ðžÒ _†VÒÂ|‘³3zšå¾ÝÜ>½âHE°œ¾;¸Õ¿…qBÞ;ñ\Ñ1ÂÌsŸ÷AY/Åû‹Yï/H>jË8ÛÝ©žšY¾7j²\…ÒH©÷Iª·²Í¬~а[\1{kaû yc¨®—Åÿ¤Õ|scâ µ5·±¶dc`©íõ®ODÕ/¯>3j÷Yý¶xÇ%±±FzÓñ6“â­SÇÚF·‘ö `’3J§pÏ5ìë£w\sN¢¼ âÕ¤7ß<7hàm‘Q]q÷²Õèz§‚ôÝ.öïÅ0ù{mfËÂמüÔµ³jÚ„cßMqs‰$2 Œ~½ë£Ð´[øãYÖní’ÏM½…ƒ&üàã­q¶¾&ñ‚tû/RÐÅîŒîÅgEà©9ë^…ðöóEÔ>\ýAXÄŒñH9ŒœœW?ðMƒû3VÔLjÒ5Ɉ6:Pø{P¼Óþ3øŽÖÕ‚hZF aÐþµ™ð£UÔ®û+ûzÏOfÖâ‘Ø1EÄquÉÜ{ÔŸõm: }®î èŽ0Çǰÿ=«Ü:Zä~'mÿ…y¬n]ÃÉ?…c|µ…>Á8?}¸¶¥pž×ï´‘ã«XCí÷Í/D$ž•µð†ûQ·ð„·ÚT—²O;¼²ï“šÛð‡®é^%Ö¤Õ-R:õÌñDÍ»kgšÆøe,-ñÆxÆå—pm¼«GãEŵïøî­$As×Q[ZÇ–>JÌŠßñ.ÆHÿf›ð‘aáÞŸ)Ú Ý–R;ûT?c7~Ф’<;J»²=En|CÓ ·ø3$¨"†=¡{UŸY[ÃðrPHf´g‘ăְg½ÃAÕAbP\ü«Øq^ËE󞕦í|~Ô­î†a ÌëÙñÐjàÔöžÕüGâøµïÁ 1[/ú=º6â½høßÀòë÷¶Z®*E¨XóáÃ{VN±£ø«Çv¶úV¯a›§«†¸q&æ“Ý­xVþ÷Â0xwBUŠÜ¨‹s€+—_†þ(›Á£Ã×Ma$IÂ31ùE]ð7„3éúWEo§ø›VŠÿSÔ×Éf·dµ²Vé‘ü^õ‘áˆ|Yá=?QÑ—Rˆò¬˜ÁÏÊA­ ørmBÖî®`[y¯‹Êa^‘Œp+Ïþ êž—£êZÙ5í»\°eï+qúé]·|!}mâ=cÄš´DºŽU -“Vu¯†5¿ø²ÿSÑlÿM½mÒA•½«£Ò­üA¯k°êZÅ °²·É†Û~æfõoð®rÿÂzׄüwqâ Ð_Ax6Íieúg¯Jè´ˆ‘ª&¨#–óT‘šã€p+Ãú_‰þÉqam¦ OJ’V’'…°éžŠA®·A°ÕîõIu}dKÅåCl­Ÿ-Iç>ý+Îì<;âß ø«^]7I7ê§\™ˆúõϦkcÆþñ÷ôÿév‘ÎɶIæ2…éŠÝ¶ÒuWáÕ·©Z-­ÚÛùí}Áøëšæ|¤ø²-;OðÕö›ö[;9üÉnwäHä(üi5¿ ø¾óâ=·‰âÓ 0Û‰ž2G<þµÐxÛÂ7šÔú_ˆl#TÕôü?”LJJgëY> Ó¼Añ;6çI}2ÎD·JÀ–ÇaÆ·&Ùø§Ä>G²ÑÄ‚tWšE~³÷Enü5´Õt¿ [éZ­¶{UÚ­žVG‹<{kã+_h–ßh¸ŒbâÝ[ þâ©\è:ÏÄ?é·ÚΓ&›¥X6ñ ¬7È߇j“⿆¼Câ™të &Ê7µ„¦W||õOâM;Æ^!ðsh¦ÚG,ªG3pôüª}Jñf“àÐÅ…¤“Ç’›heÇ'¥e|)ð¿Šüwq§ê6ë§ÌÆF™eÜsØW­Ñ\·‰.ü] ü)áû IíÙxóI´©¯6Ò<ã½#ÇW^'û”òÍщ¶õôã򼧿{Xñ†ƒöÒmÅÎÁ$sF#|ôæ²¼§øÿÂxÓfÓ-ï­U²ŒnpPwúÖ§‹|~|Gaâý u8'·Ý5qüêøø”Cmu§eZovgØËXß<1âêzZé–‘5¶"ʲ<˜.xâ™ã½;ÅÞ)ðœZT:2Dò€eo8¸í[ÞÒuI>¶ƒª[Iã·6Á‹n òãpö®#Âþñn›¦ ÜØF–jóå½ä:ÎÐ=x«_4Mj[ =KN¾ZX§Ï}¬Olz×¥ø_íGÂÚa½$Ü›t2ëŠ×®'â—†¥ñ?‚ç´·Œ½Ìn²FSÏ5«ü;ó>Ö=÷¡ca‘üC­w>ÓáÛ< y1*‘ïŠò/i^'¿ø³o®Ùøzym¬°™ ˜9é“ïV~$ÛxÃÆ1ZØÙønhá‚U•¤óçÛ­tþ(_Ô¾ǦÚè¯%íÄ\‘³¨ò¸ÅPð†uqàK x‡M6öâ6 p|ÍÇ?‡ZÊðõ—Œ¾¬Ú5®”º›9h%WÀ\ú×Pš_‰4Íîîh¯uI‰¸C&Ôˆ€ҹχñ‡‚í¯­åÒá•ff•H˜}ìt¨4? øÞËâCxŠ}>‚é¶J¾fã¿Ê©ütð¶§s2ëñÜ °†5ŒÄÏÎïaï^“ðßícÀJß!IÖ=qÚºº(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢³µ3©nƒû³Óo.ngU`ñFYzúÕÿ…„ÃÃ6ú5Õŵ͜x62¡¾•èTQEQErÚüE¬[ÅzÉý‡Þ‘ÿÚö®c@ˆQÀEQEbx§V²Òt©oX…xÙTN㎕æ¼G¥ÙÁy§Èm,÷âGS“À¯j¢Š(¢Š(¢¼eï°¾"køÒÖI,¦ôŒ^dJ™ãé[š¿‰üq£Ü[YÛÁy4ëµ!‚ßs3«Wá‡.ü3áµ½]“Ë+Lcþà=v´QEQEWñfì[|>Ôo2L¾Z$šÅø7â 3á{- i5Õ›Ê(Gë^¥EQEQEQEQEQEQEQEQEW!©x>ã]ñ0½Õ¯|Ý2 %)aݽk®( Ú–Š(¢Š(¢Š(®;Vð\Þ!ñ Wz¶ eÓ-ßt6 ¸R}[ÖºôUaT`N¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦í]Û°3ëJ©h¢Š(¢Š(¢Š(¢Šd‘G2í’5qèÃ5°³Y‹iqÑ„c5fŠ(¢Š(¢Š†æÒÞòÌ),gø]r*½®‘§Y6ëk"9ÎUjõQEQETrE˶HÑÇ£.i‰imždvñ#ÿyPSÑEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEy¯Å/êþ{Òì¼ß<îÑ–îzî´KÙuÎòxÌRÍvCØÖ…QEƒâ¿ZxWHkÛ‘½ØíŠ!ÕÛÒ¸ˆ~)ßYø¦ËHÕôøâkÀ­ÆÙ(¦êõZ(¢Š(¢šä„b£$­yÖ½ãïxnÆmCPðÎÛ8ŸÖ^qØÓ¼5ñTñe‘»Òü8í8ÜóÍüR†ÇÄ ¢ø‹N}2åñå³8d`zs^†Ž² t`ÊFAéÔQMwXл°U^I=©#‘%dƒ# † Ó袊(¦î]Ûw Ýqžkø…ãȼ¦Û]Éf÷M<…Tà Þð!Ð,õXâh–å7„~«Z”QEQEs¾,ñ\³Ú¸¹¹“Ê·:»…`h_c¾ñaðÖ¥cöMDôû×8Î3ë^ƒEFfˆJ"óÌ#!7s¥p~9ø‹sàɲúÓÚä(¸Ý…-é]nªoB´Ô„~_Ú#³Ò´è¢ŠÏÖ./ítÉfÓmîé~ä,Ûw~5æþ$ø©¯øJ(ŸXðÂB%?)Y÷ ÝÓÒcsg ì»Lˆo¦EOEQEQYºåÆ¥m¤Í.“j·W«»m Ï­y‰>(ø¯ÂÁ.µáØaY²¨RmÜŠè<=â¯kÉexº ¼váŒ7;}kЫÏ|Kñ>/øÞËÇO’S1PòúnéŠô ÃnãÀÆy¡Y]C+SЃN¢Š(¢Š(¢Š(¢Š£«K{™<št)5Ú¯îãs€Æ¼’Šþ$‹Ç6~Ô´¸-ÞIV99<×´ÑEQEQEQEQEQEQEq^!ø øoP{+ß?ÍC†*œgØÔkñGFšÒ;‹kkÛ…“œG %G©ô­ÛéZŽ‹.«m+41.éoξج-3⯆õIçŠ)fG…w0‘ Ÿ§ÖµtOhÚì÷[ÊñËiÌ©2í zÖEçÄÛ8–Y­4ËëËH›l—¯Ê oè>'°ñŽÚŽžÅÑAÊGjä§øÁ¦ÙêßÙ—zUüWLvÇÎZ´5‰ºn“s7¶ñŽ˜¸'ÛÖ|@ðîöñk“âP®…àÈæ´5Ïé^Òí/î£Ÿì· ¹4ÈQïéUcø™ M¦%üM4‘2î!#,T{úWG£ë6:îŸöŸ8–Ú³¼Cã/ÃŽÝ4’\È2D»œ¥PO‰öD·òÊð´'kÛº"ŸLVLJ*øÛHÖ5­ÞÖwhmn³>ä p}+Ò4Ôðw‰f_Â#žk$ Ó€0*Äßt(™Šý¦Ku;Zá!c?ZÓÕ|_¢hºt7÷·Š¶ÓrŽ£v*¨>!ø`éQê_ÚIöi qÏÕ¿ak©ÙEyg2Ío*îG^„UªÌÖuý7@µ•ÊÂŒp¹ä±ö•¤|Aðæ·¨}†Òô‹Œd$¨SwÓ5ÔQ\GÅÄßðËXtŒÖ°¾Í |?UiXLÙ±\_Æ/ÄÞ1Òl´xÅÅì`¬8äc?­{Æ‹m%އgm;$Pª¹÷ÅfÏã[Þý’MN!.í¼rúô­›‹û[[&¼žtKe]ÆRxÅbGã¿I²®¥Ž"73q×¥s¿ük§éºÓ’roîâÛk× :Ö—ÃÍsJŸÃÚv‘ix³Ý[Ú¯šÎ9­cź6…(†öì ˆÏ•ÜÀzàv«Z~½¦êšs_Ù]Ç5º®æeçoÔVMŸÄ/ ß]=´¤fD›p +KJñ&­™†Ÿ}í ÄŠ§•¬»ßˆ^°™’{ãµNÖ•#,Š}Û¥oÛjVwšrßÛÜÇ%£.ñ*¶Wä|@Ñîþ2Gqý #Óí,Ú/3wÈÍžkÐ×·Jï?á9ðí‚Cms¨Ç¨XÏ ltÍtÑMð¬±8xØeXt"¹­Gâ‡4»¶¶¸½&Dm®c]ÁO¹«qâ.ÛG¬—iö"ŽG5•Ä? ÜÇ<ê±:@€xÏJÒÑ|K¥x$m6èMå¶Ö`~†ªë>2Ñô;Ÿ³]Ní8ûÉ*=ñÒ­i>%ҵɤŠÂåexÔ3Û5¯E⟴R3hZK0·?÷Ízo‚”'‚´uª*Þ®2ø.ãÄPCq%³jªþ\EâùÁö8ªÿük§xgÃ×vÒÏ‹éá+j~o›ŒÓ<âÍ øFÎÛûM$¸µµó.;Š÷9­­3Ç~Ö'šAf’2:…<(£Oñç‡5]J=>ËRIn¤û±€sL¸ñ÷‡-u•Òf¿ vÒyaJœnÎ:Õ»è—Z¿öT7ª÷g8@:ãÐÒëž*Ò|>ÑÇ}qûùGîáw;}ªã½4GÕZëFvº•éôÅ$ž>ðì:<:¬—ÀYÍÂÉ·#=Å2Ûâ'†¯,滂ø¼ödÔúGŽ|=®ê"ÇMÔâà‚vªœ {×GYz׈4ßÚ‰õ±Â¯Vcècé_´=WR[’X.î,ñ”ßôÍ\ñŒ4 =ºê’¼Boºá Q¼ø“á›H’O· Q¹&%,zœWA¥jÖ:ÕŠ^éó¬Ð?FZÆÕÑô›wW{™#±0”±â5Ç8®Áû,|9«[hâkû'ݾi~TO÷k[àZ2éz¡-ÇÚt¬ßŽCXÝéž(µR$¶•w8ëÆÏzét[ËokÚmÖÅ’ÛO¶W=Æö›ñâ"|9§U Ý*ý+wÅqÆÿ®EF?cr;â²~hÑ„n #Iq–b:Š«ð-&‹OÕ¢ywÆ—TzzÕmÖòã㦣6¦Ü$dBÈÛÚ¨ëúJêÿ–ÂË[=» €œÈ#5ê¾ð„4DZ±y7}ìÒu&·ÈÏZñ_‹úm¤#ðÈ‚ÖÄ×#~ÔÆãš×ø¹zÞð&—p5ӈܢ㌠ÖÖ‹¥ÀŸ ÒÜ"‘%‘#p¿äמ|9¹}kᆻi¨*Ü%šºÄdÛMøeàµñ/ÃÍI`²\3E„ggÒ½Ážo øb×Jy¼ç‹9Zè+Èþ0iW2ê:>«¥om«dÇ1ûÇ9àwúW1ñVK¿xbâÚÆkIDʦvMžgLþµï–’¤¶éµÕˆP88©ë‰ø´¾k ‡ c~b¸o„> Óõ<—¢q3ÊWrJËÈÑá;øÿ ÉtÓ¦O-Ü–¤î6Ìw9x6=j–ž|G¨|’Úh%ÖSmXå2¢œŽõÏêž7ÐüG¥Ã¥êº\ºUälŠ·?yϵvmìäø}g{ q<ÛâT™FN=3é]Ž— Žá/ x¯bWœ…Éú×ðfi¥â RÞù"û}¹H”.4ø‚Ú[(Ö¾XYPr;W]ñsNÓ¦øir±$ °:,l a>a=)Úž«7†~ Ãyhÿ¼ŠÉµÆZwÂÍ*Ú_‡0ËsL÷¡žfqÙ®á¤fÕüIá©O›em;‘þ`«¸ŒVgÃÏ XÜ|TñhSìÖ’·—8ÎïJ¾ñ +öƒ†+ü˜ncj¯œW´ÕMNå¬ô»«”š(™Àú ñï‚RsXñ·}¶[¹%-ÉQííOKétÚKRµôj³GØœu¦xÓCÓ—ã‡â–ë±ðìdù¿Zö+>ÏL·ò,­ã·‹9ÙÀÍZ¨nm`¼¶{{˜Rh\a£uÈaô¯ ð&™§Ýü`ñ¼¶íkm¨È0¸=«®ø»-¤Ÿ ¥6òD`IP(2©,ü9fß ¦3ÛFÓÜYw+“œVO‚u{'àÍâ9’Kq*Æsî@ª õhm|3<·Ú=íåÝÔÎÒL¶æLóÓ5cáOöÆŸã-fÎçO»¶Ón K™6…9ôükÙh¯ý¡ËÿÂ1¥ 8 wÿ²×]áß蚃4Õ¼°ŽF{eÞrrx®m~ÿáÏÄ‹}Þçí=ÁM¶ì¼Âà}±["‚M?@˜Æ¢f¾EÝŽvúVïÄs{…´ÛÛ´µœñÌÖÿóÑ@é\,Þ:ðï‰õ­ͳ—IÕ-î‘·à9-ÜýM6=~ïDø o©$Ÿé_dTG=‰éVþhö“|9†âæšKÒòÊÒ.Iɬ„Z‡Ú5øbá<ë;k™ K'ÌwŠÇøiáÛ[‰þ @Ÿd´™„P²ð>cÒµ|CvÞøß¥‹0#†ú5ŽD^úd}jokºŸƒü}©Þÿb6£¦]¢—dMÅ0*…ºÞ‡¬x³V»ÓckI®cVkYÔ×®ägçÒ–Šñ/Ú*S“£ŒeMÁ?¥z‡ƒX¿ƒt†#Ú§…'Š|G‡,`˜¢É,ó¤1ÆN7k̾'Zª|Cð„ÐÁK<™fåkkã]­ªøîç¶ŠKèža_›¯­u~Ó4ë_ é{m-ã’[dÝòX‘Íy·ÃË8ÏÆ?(‰à @8Á55Õ¥µ¯í¦Åm poœ(ÆzÓ~2é°Íâ_ ¬(±ÏqpºŒó îcðœ^,ӵئhÍœ%€”û×á´º¿øï«¾¦7}žäì½¶Õ-OL:¿Ç4Ⱦ['·-6ÞUIR}y¯C·ð§ø"ãñž&‚¼ƒœšòï‡ÒxsJñ.ƒ©D¾u›Ž2Íž?½cÀþ²Ð|?nbµŽ;™‡›+íù·7=k©¯øÉ¤Á5ö•©6²–“Bãl,I-ÏUQÞ°þ!_=Î½á ‘e-¡óÐ _ Î8í^ƒñ=m.¾êo(IZ8°Þ*Õ‹ð³D°ÿ…Re–ØÜ¤­!#ëÞ³þ _=¯‚5rrÉo3²«ü™µm_Ä:­É-q,¼îëÖ±µ‹í¿h‹1( "¹ïƒ_CQEQEQEQEQEQEQEyçÆy|¿‡÷ ufëX? u}WHðD6k´qû—ƒ¾ÄZÜð—…/4uOÝÛ™µ+ÂdëÔsÒ¹Í;IñeŸÄ›ŸÉä\¦Í¢EÊôäþUê ÒÛ_ðÍÞžKB÷0íàò¦¼Ëþñ–—áùü9ö{x­›7þf£ðÛÂþ'ð̶SÃnºsÊ\È[.Ev>9Ò Õü¨ÛNK2–ì@â¹ßƒšÑ¼®¸–á‹§jÎø¥£x›ÅF=;MÒók‡1¸ûTú½§‹5Oûáãò˜´ ¨½KáKohm*m4ðFR<8;ø¤ø]¡ëº–£­`-ŒÌÒ£ŸJá5Yéþ ºæ™}&ªŽÃÏ·m¹NØö­¿ |Pð¬zЉ¬nmn.˜)¸¸å‰í“^Ò¬®Šêr¬2 :¼Wâx“Äz¾žöž¸òôûÂRÃ÷€ívZ΋7|Ö—VÍer~âIÕXW9¿â+?  ¯‡®¥ÔÖ#l²*â?MÙ§[xro|1šÂ;9o¯ïT‰ ’½}ª/ƒ×Wº-˜Ð5-&òÚY$iFˆ„úf½zŠñ?ŠZ&µÿ Ε­­¬·ÚT…¡Œ+ƒÏ—ñõ½nçHñZ-ÊiÖRŒC°—íÉ_JôŸ†‹y.‘{¨]Á$m¹2Ç€† ŒWhí²6|´g¼‡â.uÞèö~Ô™çýØs sÖ¨|-ñ ÿ…<<Ú^­¡ê^g¹ ÀyÍbüPÑõ»?ˆÖž'²Ón%·"'Ý–äuSé]-×…uOx+T¸½³û5íÄ«5²H>o”to¯5wÃß-tM W°¼­´~S[¬·ãZ“ÄâK¿G{2¥õÅúImjƒæ‰3ŸëP륮·£>ªø^àk'–¸·ùw7ô¨þ x[Tÿ…Q§é¶Ñ<ÓÚ”iBõÀâ­øjâïÆ“Ø¬ÚmÕ¥…¡‰Úu+¹ÈÆ++Á·ÇáÞ±¤jÖ—+o%ÁšÚer°=?<=>§ãMWÆ÷–Òà çìˆW ØêqïYßj/ñš?Í¢jØ2ù!ÞLW«øÎÒóTð^¥o§3-Ô¶çËÇûWšø 5Ë?\xhèw0êù‹çÌ›W<“Þ«|6Ò|Cfm´K6êÔZÞÉq-±¸=õ¨¡Ô¯üñg]¼»Ó.îVùpÐÇÇ4ƒåää W¹ZÜ »H®2 6ÖŠ|±$мR £©VƼk@¶ºøSâ]U.4û›­.øù‘Ml…Êœœ)ixS׺ÿÄ+ÏêV’ZÄGi ƒp>ñ§ÿ^°|aªkÄ ;X‹Ã·æËK%ù|·ÍÔW³é‡ö®— ç‘$jçËa–¯Q^`šÏƒþ&k÷-£Þ\¥ò²Àð¡#$ñÍ]ñõ¶¬Þ³ðõ¾‘{qw#-į,ȹ9#?ZÜ›ÄwiðØi©¢ê+zÖÆÙPÀro_Öª|7±¹»ð%ß„õ]:êÖf‰ðò¦†'ΪxKÄWŸ àŸÃºæ›u&ÉH%†2Þb“]o…eÖ2ø£ˆf‚H´»U„º•óXwÕinõ§ñ 5Í[Æz>¡eáë÷·Ò¤Ë¼?#îþUÑ|I²Ô¼[ðÐKge4w!ÖSnÃç”ß êZ—ˆo´X¿³nì­4È6Ìó)PîXðiú߃~'êÚœ=Åý¦¢rn{Ö}ý·‰¡ø¯eâYt©bò°ÑÄ»Œ}x«¿“_Ö|Y£]Zø~ñ­tÙVV&r7ÓÖ½Ž9Kd”!Vd µºŒŽ•àW2Ò¬üQwqâ©[kPÊÈ$¶_—ËÏÊ+wÁŸüšãG wpß^6 ÍÏ%ý³^È2‚9šðßx.gøÙ§ËlÙ¯GŸ.]˜Üé^âªBŽ€`S«Æ¾+øW\½ñn“®ØZë[R» ^¼ôª~6ѤS¨¢Š)r3@éKÖ t¥¢Š(¢˜Ñ£ýäVúŠp Z(¢Š(¦í]Û¶ŒúâEÆŠ6mÍ“êE2ææ HL׬QެǼ3á–©¦ZüIñ<—°mžfò›‡ùJ÷€`jZ+Ó¼1sâFÖõùãžXK-œýÈ”÷÷8®ÂŠ(¢Š)p1KEGY{¨ô[×±]×k G«cŠòïjž}"ãþt‚=f9Úžùzñ‚i¾, øŽ4ŸÙÁsªI*ùSY§sË3‚ãOëžñ^¥ÆÈ4áyò:ýï^k ðTÏâoj*d‘mJ k0댯Vaø×EQEQEQEQEQEQEQEQEVeχô‹Ë†¸¸Ó­¥™¾óºMO•§ÚʲAgn£‘ UÊ(¢ŒŒ”ÕŠ49XÕO¨ú(¢Š¯=•­Ò‘=¼Rýä‹k[5Ûmo@ÿqqV(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*–©¥Yk6-gšÝˆ%C\òü3ðŠ\E:i$‘°e+ØŠë@Àt¥¢Š(¢Š(¢Š(¢ŠÏ»Ñ4»ýÿkÓífÞrÞd@椳Ҵý;?b²‚ß=|¨Âÿ*/t» IUo¬à¸ ÐJ±V!†+xR(cXãA…ET”QEQEQEQEQEQEQEQEQE%ršÇެ¬u¦XÃ&¡Þ9Ûõ=ªøMo,."Ö‹-œp& ¼/×£¢øËL×µ‹½:ÅŒkÒ•5ÑQEQEQEQEÇë~>·Ñ5Y,_JÔ'òÆZhb,••gñ‡DÔošÊÆÎòâà'5¦>#éÜ­¾¥Þœí÷MÌ[Tþ5×E4sÄ’Äáãq•aЊ’Š(¢Š(¢Š(¢Š(¢Š+ñ/ÄM·¦×Q[€ÁA.±’¼ôæ¶ü?®Ùø“H‹S°,`—8Ü0kRŠ(¢Šàõ?ŠÚ“­eÝÁx“ |¼˜°8ÈõÝ#‰#W^Œ2)ÔQEQEQEQEÊi´ _ÄÒè6w ÷‘îÎW Hêï]]QEfkºí‡‡4©u-Jo*Þ<}IíLðÿˆ´ïi«¦N%„œgÐÖµQEÈø§Çöº_Ù^4E7yñG”ÄÖ¯†‡¥wZ·‹4u‚æà´ÍÏ—ÜGÖ¬éšþ¬Y½Õ•À’$ûǸ¬ûOxnös :¬`ÎC6*Å‹´-JðÚZê0I8þÃ4¯â½;ÿ±>£ Ïœm-Þ§Õ5ý/F&¿¼Žßî–=j¤>3ðìÖ¿i]ZØEœn/WF»¥5‰½ð}”Ë]ÿ-;OÖ´ÝTa{ Æ:ùmš’ûQ³Ó-Ú{ˈáy,çKIñF‹­¹M>þ)ÜuU<Ô÷Zî—epmîoàŠaüàl¾ Ò 1‰ud2}ÍÒ»éZÈ’ xØ2‘E>ŠáŽLîNx9àÿ 7Æà PÒ`þÕwaµ“áÕë̪eVSï»"ªüÔnáGÕ%ØB°´È;ÿŸJôe½µhÕÅÄ[[¡Þ9©h¢MòHˆ¾¬Ø‘\Á8Ì3G'ûŽ Ï ¥HóÓ{H·Vî2³ÄG¨qJ—0HÛRhÙ½‚i—Ö¶…EÅÄqû¡›©|ÈÌ~fõÙŒîÏD·ÖŒ¬Vê–Ä€âmwow™m2Jž¨r*j(¢©O«iöÒˆ¦¼…œmf«BD)¼:”ë¸*5¼µp \ÂÀú84äž#•ú+N’D‰ ÈáTu,p+€øŸw¤ê_uÄH±g1Åy«_ãü7ÒÀ9Ê–ÍwQYW%Ñmn¾Ë>§mùÆÂüÕÛ‹Ë{[GºšUHPd¹Þ»8¥ŸT±¶vIîá—¨gŠsjVHÈwgåAqÍX.¡7–zçMa|NŠ9>ë%Ô¶äŒŠÉø+ÏË"³sëɯD¢¨^km„»è!Œ…wâœu}9bIMìîãš’kû[tWšâ4VèYªX¦ŽdŠê{©È¨¯/í4ø¼Û˘ ûÒ6ÑE–¡g¨ÃæÙÜÇ<Þ²)·ºŽœïná·SÞG O´¾µ¾‹Íµ¸Ždþò6E2ïR²±Ûö«˜áÝÓ{bœ/­°«¼üÝÖ¢‹WÓ¦¤W°;’ªàš"Ö4éåX¢½¤c€ÆMAâ]L¹û=ö§mo7÷$|{ëÚTwQZ¾¡n'˜j±{¨ZiÖíqyq1/%±UôÍJÖûìSã¨V¥Ô5í+ItKûø-ÝþêÈØ&§¶Ô,îähíîb•ÔÊ­’«TQEQEQEQEQEQEQExgí orm´ë„ËB R;]ÇÂ&Føu§ ¶>l îë‘Ôõ3J^¿´…¾Ý Y™ñÃqÍrâþܲÔõ­D-ÅÄò•Ëóµ}*މvÚ'ÆûÍ +¥9°8çŠÌñŽ…¦Þ|fÓôûxD *‡—`Û–ç5?ÅÍ"-RЮ4¶’3wD6ÖßÄ/iúÃ/¶$cíq*È&ÏÎX÷Íl[[Úkÿ  ¹ÔaK†KBÊÎ2AÅq¼!c©hºíúyê$d[´ß†št7¾4Õ´‹‚f°µ‘-ä”sÒ­Ø*è¿Í…†aµ™~x—…ü©þ'ÔæñÆKJA²¶ž6èÿZ½ñ\EáFÑõm*$¶•' þPÛ¹}:ÕŒ–Vš€,uÑKÖ)ûÅààö5*ø#KOƒòßÝÆÒ_‹#2Îíó+cŒVÇÁ FóQð 7s4¦)š4$çåé”Ts¨“ýÓ_9x;Ë‹ZÜ6¿erÒeöþ*õï†Ók³'öö¹qyn­¿È I÷¨þ#xONÿ„y!…‘´ëv0ym·mp~ð¶¯â¯†Nñ]“y¿m¶÷ÀQžN}kGưx‚ÎóÃ:UòËs§Â^:9UfrßfÜÜ[xGâ~‘‡ïXÙÞág„HYAükØ<[á›_éC8q*#™©VÅyÂAkçˆ4½\Ìo-•²ZC÷+©ð‡,<;¡^ø±¦¸•öÉ$G?»°ÅbxëGñd7úÇŠ/c–yfe‚)50=ëCÀ:¼Zž¿¯xFYå¹Ó†M»1øŠkGÒ´(Çöé—Ía×fi~&xbÃNøusw¦ÛGo4p€ûxÞ§Íoü"mß ´¼öR?Zî(®#â§Š&ð·ƒf¹¶%nfo*&‰ï\ÿÃï ØêEíôiuy|¯+Í"åóÏü«áö«ÿ G‚õjÎÒ‹Á˜ä¨Î9üê·Á/éÚ†s¨ÝÀL¶÷Œ#!Ïoj½ñÕ¦]KÃ^I%þÑò¯ûY«<9k£x kV»£Õ`hßí!ŽâOo¥ixƒÆ—zgÂ[mWæ·0*#´G_óéXú5·†.|[PºŠ]^hLÏpí™wõàÕ¿ MþÝíEö‰lZDVnåjâ¾xNãÄþ×Q¤/å3Ei·ÊŽzŸ­zÿÃ_ê^ðœzv§(’u‘˜a³´ÕØQ^ã¯]øâmŸƒ•Þ>9•gÛ|ÞüŸ¥]ñv—¨èž:Ð`ðÖŽ°[e|˘¹ä6;Iâ^oüX°ð«16£}Ê<ÆÆpiÿVßÀZž‡­i‹`óùSFœ,‹Uþ7XYMáKM~d¾•ãA"Ÿ¼§±£VðU¿ÂvÕ®7¶ª–«(¹.wØVLJõ O[ø!çÇ#½÷ÙÞ=ÀåŽÞ+‚ƒÄ¾¼ð¿öDÖòéZº&ß´ÁfÇsïï]/Ä/ÙÝ|*³Ôw’{h‘þF÷ÇzÛømà}<-§jž\Æâæ×SŒjç¼+dºwÇmNÆÚI¤.-Ç 3üë3â…ô»ˆZQ,€ßM™ó!;¹•z.¥àLðv§mO´FÓ6&bÛÂðk–ø5¦Ãâ‡×öÚŸ™4vv–ƒÀõëQü!¶ÿŠ‹Åºq¹šKh¥h“s’Bî#­`ê~ Ò×ãU†Œ?Ù¤‹Ì™ìóÞ½Æ~Ó­>^EMŒ,2y§ržµ‘ðç[}'àäڽ˼¦’A¹¹<œ Ó~é–~5Ðïu½zÕ/'º•Lß6ÅÂ=*êxÇÄ ¹‘æ±PÆg$„þîkÃz /ñ›UÑ`štÓ£ˆ³ sÓ–¯j0ÍàÿzE¶–$[KåÚñîÈ9ïþ}+¢øÁg­ÜÛiO§aí"œ5ÄE°=[ÔWã»­7KÖ|5áÀ\V9͸گÓþ½zŸÄvßðÏVf<›\ýjŸÁÈÌ táŒd±ýk½¢¼³ã_‡¬.<'u­˜qª, ó·=+Áþ¶»øK&©¨™'¼’ÝÞw?¹ »i>èÃÆ~šã]–[¨íY­aFþ­\øE5—ˆüE 4Ò=œÍä‡l•šÎ°×ôßüPÔŽ½*fØŠ$ÎÆ ã8©íuh•s[µ¸o‹áµ¨mXö¡™†Äã°>õOÀ·‚Ç㥥i²7ö\±4‰ÎÕú ŸÆ:þ› üGœøžÆ[>h[¶Òʾ¼Uÿ[hú§‰õ{6ü]é—VÊ¢š>NWq\Ï‚´¨­þ8êöåÖÖÞ&ýÛ6x8.» Zhô(tÜŪ%x÷ÎMiü}Ь¿áXHUo|õC(êF8¯Ã­oÂÞ¼¶ºò®£Ù<ò1;Ÿ§z¥­ø†=W㮪>t½;ï& Y/R;Ô¾(Ô­tŸhWþµtäòîVJ«@犓Äý¿‡~#_\x—Mk«¸”[ɳrƽÿZ»ð³û&j·Ú-Ê›)"P“ó!êF=+Ù(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÄñW‡m¼O Üé· ?x‡ctךx6ë[øtóiÍŒÒi¡‰Žx×pÖ\|F¶¼O³èvwWwOŸ(ª©÷&¯éþ2xfòËQm÷7ášfÏÝ'Þ¸ËqðÚ{ý+T´¡g-±¡`ÃÓŠ»àÏ^ë?/|_Û %mÑ×ZÃÖnïæøÅm«Ç¥Þ5•¸òÙÄ$~ÕgâÍÕþ·©éXiw’%³‰$a #¯­_ñþ¯6·ðú; }2ûí2"€,zTº&¼t߆#N¹Ó/Öå!òöœþUð³Z>ðýí–¡§ÞFí#><“YŸuFÒ|q«ß\Ø^,’1‰Œ-M›Xy~4C®}‚íl×÷{Ú&­ßèÒèþ?Òüe/%£³ì^WÞ£ñÌÉñ#QÒtÍ9$Ž9„“Ë·…7ÆY>±Ð--î&_÷hXµ.³â‹k„g 7&éíL"?(çv?úõÀVÚ´Iã¼Òd ãòúþUìTW1¯øïAðýÓÙê/Á7`!#šðo‡ºõžñBûSœÉùS±n+èý#\ÓõÈm>q4hÛXZå¾)k¶:oƒõ )ç sunËxå»:Æø#©Ù7ƒ ÓÄËö°YŒ}ñ\çÄMNæOŠún«Ü<:ÊÀgj7®+ƺpøƒ¢êV¬z5»€'DùX޵í~¿¾Õ4{!užVh ÿžy8¯&ñžƒ{¤|\´“MÜ«¬ŽWМ7é^ͪè‘ÞxRçF€yhöþRJòo…çEðòêZ‰mííï­æ,¯p¸Þ¾ ŸÂ»}+ZÒ[_ºº°´·‡K·‹ç¾ ´3zé^sàßévß5Ûù®ãKK‚ËÇ£+Ý5Ói£ÜßB<Ã-"Îî2+̾üTÔ|[â;+Q³ŽªÌŒ£Jõº+ÅWW¶^Ôn4èÌ—qÂÆ5'5âõÝ* U¹ÕÚuÉ‚G'ÌÍé´}iÿ u»›]5¡¹}EšhJóåà–þU6®iÒ|–ø\'Ù¤O-$ÎAcÛ4¿µ«¯‰ÞhîU ´“H¼„äg?•mü]Ð'ÕFâ9ZâWV ÉÙž´Ï‰^/·ÖþËa£³\Êñ+NPÝŽµ­ðgÄV7^´Ñ˜_[FYЮ8ÏZõ +Žø—áie¿sžÕ—KðV¯ ÌòE¬Ü]˜ã€{ÿ:¿ñnòÑu_ ÛÈó5Å›£Js´qœÖ¯Åoi÷¿þÉg#I%ÀR‰°ä€j«H¼gð^-?N.×v0¡+³Ã¯õ­_ø«Ã–¾µƒQòmî­cË Ñ€ùß­\—ıÃá-Vþ{6³‚äºÙªÇó8ÛÔ\¯À}fÆÛN½Òndòµ ®LŠŽ>øÇÿ¯ò¯l¢ŠðèRøcâÅ—‹%‰äÒf4®ƒ>[cûW£Iã«=N[k?Ê.®ga– JƽÉ÷®/[Óeð·Æ‹Ü]2ð$ØáÁý(ø$=ÖôME™n™&ó®#•}I¦|k½³Ã:»4—PKÑK@+KÅ>)Ñ®~ÉiÀ3Mh#Ž-§%€á-hEðFk['q¨Ú©ýÚä0bÜU‹«Ÿêz Åâ,Yë ܦ,3¶>ð#®i5=Q·øÖòC'ŸdT?ycÝÆ S¼5â«[ÏxkL´¸6Ð,·E:Fª9²toØGñÏQÕ,îP$r•8fÀ¯ñrkâ¿ kr©L<Ù‚ä' ŒþUÑXêð•^ëÚ†Ÿæ=Ù~Ï `âFÁÉ_å\‡ÂOXxsÃWúN¤Í¡ðƳР‹à椑xçÄv÷'Éžêf)u'q$UŸNºÇ«SRc “[áf=:+g\ñ ¬Þñ-ìó•‹QÞ¶aóó¸G¾*‡Ã°ñ™ü9çtÉ"º£'ƒRü1Ö-¼!¡^h:ô‹gug;9ÆõõŸ´Ôx‡Æ÷ ÛÙHXBÒ e;·éT<ªZ]|lÕîãÝä\Ûâ*@lc5KÆ%°Ÿã&ƒ{á¬íÙ¦Ç ×­h|c¿º:χ˜™BfNcÉW]Ã9ü+âV­m©Å¡^iRdØÎ30‹j³qü±[Z¿‹eÕ¾kH³É-ÓºY„–QÒº„嬞´ÑI¡n…¤ÐŽõéTW–|jñ„¹ÑZvÓ*ºF;‡ùKAñމÂfn ÜEgä´{OßÛÒ³þ ø—LÐü)wm¨ÏäMö†”†'ÂÛëIþ#x”ƒû»É $czäô¤ÑííþüKÕV„ /P%á¸uÊŽsýk¾²ñN®ëöö:¼Q¡ßsqå|±¯±õ¯2¶Ôñ¦úãÅË)‰CC ʯ÷qøT+â t‹·zµÍ´%ݹ£ûÙÆÞ? ê$×âoj>%°ûnœÑÆÂg‹rÀÅy8¦x{KÑ“â¥ß„ƒ/!Åã&|°{­eKª/‚¾7ê7Ú¤2-ÔXIU Y÷ˆe“ã.™®\ÚO ŽÕX™Ô€WŸ›õ®§ã¶¨—Zž“k³\I"Ï„\¾õÜø\³Õ<;kmmæ -!XåWB¸ {×xŸI|U‹ÅsBóiWëÝSw–ا¥u·~2±ñÙì|/Ü\É"—›Êùa^äñXm®KŒµ‹Oi²\èe¤ïaÇO¥3Âz>ß×Qð´,štp0¹nB3žkÄÿ¼U¢üB{SG§Gr#HÞ>$\úþ5ïIç[Ç&1½Ccê*J(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¦º$‹µÑXzšjC_êâEÿu@©)r}øÑ¿Þ\Ó•BŒ(z @ @šu„9¦ùQç;?JO".?tœ²(0Bzćþ)^4‘vº+/£ ŠlvðCþªÓýÕœcF9dR}Å'‘ÿ–Iÿ|ŠjÛA¦D‚%õ`€øÔÔUIôÛ+©“ÚÃ#ÿyAÓ,Á²·ÇýrZ’ÚÒÞÑ [ÁJy!¦Ïaku"Éqo®£ºç›™cm7¤1IŒnDÓo´?S /¬­î6ýß60ØúU{Ÿ è·vÑÛ\i–ÒCÊ#' \lj¾#iž×ì4fŧ ÷0œ ‰nm|Mñ6Ùá"X4¸IßÔyÛò¯A¬ÝG@Òur¡§ÛÜïH™?K•a ‰²ŽÎµaƒß”þLxSÃë÷t{%çÑ-ïMä:]ª\“»ÌXÀ9©!д«{É.á°·K‰@ƒ&hBº¸ÓmC©Ü­å ƒK.…¤Í!’M:Ù™º“æ®GQ@!HÕbQ€€pWJÓáY;(eûácwÖ¤‚ÂÒÙ·Akmꈫ4QT&Ñ´Ë‹•¹šÂÝæ^C´c"¯Àà ªt˸ûA³€ÌN|̓v~´²iÖrÍçImÉýæ\Ô†ÚÜŒ##Ó`¥ŽbGhPªjœÚ“<Æi´ëg¶íæ1œÕÓ L¡LhUz¼ …4Û祜 0þ5ŒùÕª(¨n- »ˆÅq Kꮹž™c§¦ÛKH`ÏîÐ –æÖ È ˜Rhœa‘× Õ];DÒôua§X[Ûg‚b@ úš³%¬Ï¾[h]ÿ¼È ¦>É—i´ƒo§–(M:Ê<ì´wuÄcš’K[y˜ ‰ÈèYÅ:H£š&ŠD  ¬¤pEgéþÑô£!²Ó­á2gvÔÕ¦Ó¬™•¤¯OÝŠ}Å¥½ä&˜#š#ÕA¶ÖÐZ@°ÛÄ‘D½UfÑtǼûcX[›ž¾iŒnüè‹GÓ`¼7‘XÛ¥É$ùª€6O½-ö§j{ ýŒ;9_5b¤}>ÊDT’ÒEU1Œ m®•§ÙJÒÚY[Á# 3GR*ŽóCÒõ „×vóH?ÐVÖV!bA1³oúSE²ËoaЄTO¥iî»^ÆÝ—9Á‰jI,­f„C-´OŒd lšu”¶¿e’Ö·ëå”*zYÛGÆ–ñ*(¨AN[xcÈ‘F®x,ª©hª—:mä‹%ͤ:ðHÃùÒeØ(,­öžHò†(Vž¡[üÃ÷cštZu”2,‘Z@޽cŠ/të=F/*öÚ)Óû².i,´Û-63•¬Vèz¬j‹6ÊîE’âÖ)]~ë:äŠ'Ó,ngŽy­!’X¾ã2WéR5¥³‡ oó>þP|ßZKk+[%+ko õ¨ZY¬í®3[Å!è $–v²d¶…Èàn@jCLAhÐã•P‘GHÕIêBàšIà†æ&Šx’HÛª¸È5 ž™c§vÛîëå \ÔÒ[Ã*2I2·ÞzÔk½…¼†ÞEU-¶5ÆkÌaÐõoø® SZ°û•dÛ …ºÈÀõjõ`€RÑEQEQEQEQEQEQEQEQEQEQEQEQEW/â¯hÞ-1I%Ä_rhÎUïøcNðÍ™·°¾n^G;™¹­ª(¢‘”0ÃG¡£¥-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQU¯ï­´Û)o.äÁ˹í\æñ#ÂÚ®¨ºuž¤²\7AŽ u”QEV~¥­éº8C¨^Elî™3MÒõý/ZiF{Ï•÷Ìg RÁ®éw:ƒØC} ݧވ7Ì+F¢šx­ y¦‘cY˜àUtÍgNÖbytë¸îk9Á«ôQEQEQEƒªxËÃú5Ã[ßjpE2}èËr+SNÔmu[¯l¦ÛÈ2޽ Z¢Š(¢Š+x¯Cmpè£Q‡û@paÝÎ}+jŠ(¢Š(¢Š*9§ŠÞši8Ðe™ŽKJ×4Ín7“M¼Šåcm®clàÖ“‰t{bM&+øZú?½o˜S/|W é×FÚóU¶‚ppcwÁÍk£« u « ‚;ŠuQEQEQEq§Å é7rÚ\ß8ž&ØÀDØu®ÂÎî+ë8n mÑLÐûžŠÈÖüK¥xr8äÕ.–áIïF…âm+Ä‘I.—t³¬g Gj×¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢˜ò"}÷UúœRyÑñûÅç§4†âûÓF>¬)VXß;dVÇ\6j©X‰|£wî—`0*AÎj?´Ûù†?>=ãªï§¤‰"îGVªsO¨Ì9š>:üÊ>Ñë,c¿Þï1 {îλ³Å6;˜&b±M°êÅsþ:×?°|'}yÂÃp‰û³ßuXðôÚ…´ë«©„—À®ç<óë[/4Q¬•ýæÅ9X2†R=ÅAy ­Õ»Û^,O £kG&0Õàpé6V´\6¶‘$vã Gåæ¾…¢šK ¥‡P"I3Í-`x›DÒõ½2åo­¢žHá}»¹)Æxô¯6ýŸâ1iÚ·/Ÿ€sÖºMátZWÄ ŸÿhHâFfH} ëšÜñ¯ŠO†l­ qqr‘*1ìO&´uí+þ\Øy¦/´Å´8í‘\ïÃYÝG%á¹–á÷Ñ@ö®àIÀ FG"–Š(¢Š(¢ŠBqÖ¼‡ã—‡4Ù|#>µ²}º93)ê ÁÍuŸ ЧÃ$`ÝWgMgT]ÌÁG©8¦¤ñKŸ*T|uÚÀ⤦y‰¿fåÝéžiw Ûr3éMy£äEÏMÍŠx!†Aâ¼ò?…V1üBo}®BLžo‘þ×Ö½Š)¡•³‚885C]ÔF•¡Þ^—D0ÄÌ¥úg‘ðÿX¾×|!i¨j2#Ü˹‰Q—<~•ÔQEÐêÌT0$uô¬íI]wB¼ÓVˆ\FSzõZæ~|=_[Ý©½72Ü’»š+Ó~Ùi¾=ŸÅ y+I#³ˆOE-Ö¸ïŽÚEªÍ£]ÁGu5ÆÇqÁaï^Ïd»lm×Ò%¥LI 0$vMÞ ãpϦh,»¶–ôÍ êƒ.ÁG©8¡]w# æEFgˆ6Ó*ôÜ3O$(É8¦˜&³‰ã®œ®ŽÇVÇ¡Í$’$H^GTQÔ±Åx·Ç{ 6ãÖ:¤pþӳ͌ ‘éÅzχGáÝ9ktþU§^ãÿ¶‘¨hÚ}êÇqqt¢UŸ/<ÖÿŠô½?\ðÝêÏS…Š1Úq^qû>"E jR9›¹5ìÊÊÃ*ÀjI$H—tލ=Xâ’9£”f9Ǫ¶jJcÊ‘ ÈêƒÕŽ)¢â»¼Øöúî§«+Œ« Ó&¹‚ÝwO2F=]€¥ŠX挂ú­ÕÅŠDΩ+dg³>-h÷RxûEWÕ&ÞL<¥!9í^‹7…u_ Ošíä“Ä­$rƒ†t8â°~ ë:…þƒ«\jwrÐÎßxôUm T¾ø›â=M>ßqi¤Ù‘¬ ´¹õ5&â½Ç×~ Ôo%¹†TÿF̹ÏêqêšÅý+E‡[¼šÎf²I&ï^?J»ñJ×Vðþ»¦]éúÍàŠþéQá2|«Èé]/õy Ôt-*mIôû[µ&[…lÓ5— k:oŒ´[;=qõ-&VfŸ›§ÝcÜzW®Õ fñôýöò$/$0³ª¨É$ ñ=WÅÔ|C6µ¨Úêvìì‘—ÛG ô®ßá¾·wã‡Û®æuº;¡iTàçÔW ¡]ø¢Çâ÷†N³5Úì!^N±ƒÎïL×P5-s¿4ý*ïP{Ý>ý ËQ©ß<_sg¬i^Ó¦xnulÉ÷’2qÇÖ³þ)hÃÃß .í­$šhåš?7϶ÞzÆ»O†êSÀB“ŸÜ êëǾ%^êSøûEÑš;±£Í8ÂÅCzüÃÒ©CüX°Óô{É$Óïl°´¥ðÜóÍwŸþÔ—Pº…cŠ0Ð)ùIé“Z? ¼tÍ/LÕV»’7·mÙ¾@ô¯H®#âF‰y¨hS_Yê÷6g >Ø› ýù®á]ޱã ¼º–³xA;*l“çfÇs]5ë^]oÂZ•ÌÆâÎFH®|ízýk‹ÒN½gñrûÃVšÅ쨒GË*à]V¢x¥áñ–¥} ÊÏe1“æ#ž‡Ó½Ið~ÿR×¼1¬E¨ê7J—&$‘›æQŽÕ£É«i¿æðî±­^=¹S%±/Ã8Ít^ÐõMCÆz«¾½}&“g HÔIï˜}+7N{Ý+ã§ö:j·w6>G™äÌû‚’:~'ÇD2"®â×`bº_ˆ~3>ð¬[ÿÇåÈXáœu¬ {G¼ðÿ„ŸÄvÚíÃêvè.%C.QýWo¥o]øì… âˆ@Yžß8!d<~†¸'@Ôõ/Kã×µÔÕåÌýÙÛÈ}*®ˆ|Uã++ÅZu䑘f v†O‘Uqž?:ܶտábxæÿL¹½–ßIÓWb—gšÙêOáIe®|TƒÃÉxóiWÈ6“–Ǧ {`øÊòþÃÂ:Ö–¥¯#„˜ñÉõãZ}ªjÿîõÛÛË»]rßqó$†ò¼ýÜ×¢|=Ô¦ñ—ÃXÖöII yá½3šóéú–£ñ[Ð?µ®¾ÃC±–*™®“D¸»ð¯ÆSá¸o'ŸNº‡Ì 3ÚØ§øÏ]“^ø¡¥ø>9dŠÑ>{’­·Ì8Îߥbükðü:&•§=Ù-e¹à'![±í:°l3×ÈQúUö]ÊWÔb¾tñÇ‚ìl>)è¶bîîHïß|…äË)-Øö¯eÖþðŽ£ei4Ò#Dí™\±Î=kÈþh7þ‹}l÷“[ØÇ)8‰¶³¿×ÐWIð»UÔí¼e®øròîK‹kF&'äž?JŽ]~߯.ô{ë³§)<Í¢g¨Éâ _|Q°°Ò®^M÷jM™¸#2?J÷r+Å~³ññ^4Ê! "œ© Šñß„z ž&:Äz•íËéð\`B$a½½ÏÒº_ kïáÿ‰z¯„L’¾œªd·Yq$dö¬}7TÓ<ñT“]¸J²ù!¶’MªOMÕgÚä~ø­&ƒctÓh÷H<• YQ½¿*ŠKKcâv©oâ»vþË‹w–B¨ª:b­|,º›Oñæ¿áè.]6æ@³·>•‰"Ô­þøÛM>»wÓîÛ‰K/^£Ò½úÞ_>Ú)‡I7æ*Z(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+7^°]OB¼´q‘$L×áôK×ñmþŸrî,í ,‡¦sÅ]м9uÆ ­17Çbžê>éî+Ñþ)jzŽ“à;Ë/rÎ07¨åV¼ÊÏX³ §Xæ7zÅÂuû̾µwÀþ*¸ÓþÅmjÊÏ;H€|ËíSÅ¢xKÆ3ÜÞIýŸ¨2n”îÚKWMð~ÚîÓC¼‚[†¸µŽvX»­zEqÿ´§Ö<ª[F Ê#óúmæ¹o–·2ø~mFöF’BÞL[¿…Ef|SÓä²ø ø‘¢2,¯ŽækCã&¥k¬x>ÒÆÆušææt)m“Y?tËàÞ‘§Ê†C±— }Þ;×NºÚøŽÚÃDÓ®DˆÖ ö‡§Ë…Ïã\§ÂÝ?C°–‹¯Å_E1ÂÍÇËÛ×}“B¿¾¾Ó¼;¦ÚùŸge–î1Èl}Ü×%ð‹T¶ðœºæ®N–“G7ÜsƱ´ÿÛ\|z:Ëmq„vã#oñ¯¢¡š;ˆRXœ¼Rè:å·š¾lÓɈÁç§Z_‚ÐZñ—vvL“ðHÏZ‚âÜë_´sY ’ UVšEúzÒxÙãÒþ;èW×M¶ÝâÆöè Ü*·Æ=~ÖûÄ~‚Þux`¸ ò#dGô®§ÇŸØZþ¡¥øVÀï†å\ ­õ®6ûÁ:—ýkJÔt½`ÝA5ÊÇäü&¾€ˆ³D…‡ÌT\÷Žõ«x7PÔícK p¥s׊òÿß[_|7Ô5ÝRðÍrѾËuùT7¦Ñþy§üךÇD°ÓÐG‹»¹7‚~eQޟỘãþµ$¬tx‰öïê>5x}áLl 7?wš_ŠºRØüBð׉^LZ¼‹Dzí<Ö¯|oñ‰ð0³‚u’[‰#}«Î=k¯ømy×tņTvŠW À•>õ×Wˆø“^º¿øÇo¡êWŸcÒ¡9@NÑ'ãYž&Ô4Ûo‹ú,Ö›#²…2ÿ s]oŠo ñ7‚ììuB‹u}3ýòFÒv·åΛ©Eªk^·ðÍÏÙ-#(©%ÇžrAï]½­ŠxsÁßeÓ?z-mñw+Ê~ëÐ_ÙêúˆîžmU%eŠÞC£m_Ò©ü3ÖeÒ¦ÖR6ò¯noÕ|—^qžx­ oRµOÚ Ns2ˆâˆ9ã?5hük¾¶1h¨“FdˆÌåWÞ´¾)ê–ðºXÒâ6’HãÚúÕDÕ’ÃàÑD™Ä’Æ@`Tã"¹Íkáχn´fñƒ©=Ö?7ËÀ=qŽÕ¯ã;‹ûÿ€Ö÷(í3G—=zõ5¥c¯²éÞ ÒtùÉ•ÕqÎ# ÎkÔëÅŠÂZ°?óêÿʼûàMÜø"Xeš5q;IÉÇÊk?ᦜóüJñ?ˆ7²I^5vèÙ=PÐuK_øh^íçˆÂɵ\°Ç@8ýkÚõYÒ-êVpÉl}«Éþ]B4íbݦO4Ý– žHÀæ™ñ«O¹Ó5Åvùп’äË5èþ ÓŽ•á‹´ßÌ Äì¼ß1ü«ÌbÔ4ÿøh‰nÒ˜ÚÜ.âÜnÛÐTŸ5w¾Ðm£L±Ý)pÝÍ;ãf–ú—‡´VÙ^x­Hìäîk¯Ó4_ _xrÞñöÉlaÃÎHéÜf¨øÈxOøq›ij¦ÇPo.Ö0ÛW{rMaèÃ]¶ð8ðœÉgÉEö³p¤"··¯5Þx#ÃÞðÂi\­ÎIi%S÷‰þUå^Ðìt/‰z¾™¯B;’Ïlòðdô®ÒëOð|>'Ó-ôí&»ã(}ðœù@sº½*¸¯ŠšÝþƒà[»­9XÎÄF ì½yŽ•6‘ÿ žææêay¬Ý#€§æpÞ€vÅk|×åJÒt›yPÆi®×o*ãŸÆ©|4ÕôûoŠ>&y®cgså3nùI>»§MûB[Ýýª3lìósòîÚxÏÔÕéSh?tÏ0Ît@’_áFÇzgÆ{IÖì-b‚ç|pI¸ÉÜ¥»+Ô|%¬éú¶‰n,n’&5WÚzWA^)ñ%–×ânO•jŠš~îs]Tzêê0x›VK–:rAåBìß!`J×'ðS°´ðö¢·7QÅ'Ú 0‘±Æ*êVmñ“Än"0ÜäDÙûÿJ­k¢ØxWâî¡ý½j¦ßî’¦@IÏ^Õ×kørmSO²ðæ™cw{$ÊÏ$k¹bAÔ“Ú½9s´g­Cz3ap?é“*ñ/Ú­½÷ˆlnäX®K«1À8ÎϽii:øƒã.¯®EΟ ^J̽ŠãÖ?ƒ,4ßxë[Òð¾²’üBÕ¦ñŒ¯æÛ–ðK÷WØ §áÝzçIø®\l0Üݲ­¼l¿xúVÆ·oÿwÆË]~ø0ÓïS>`+cœ×y©xÖÞûVÓltÕ̳)’M‚GÜçé^yo¤Øxoã-é×áF³¾â–Uù7g=k ñ¾¥á[)l­ô/O¾Ô§•&àžMzͰŬ@¨\"ð:*j(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬ûÃM¼º»µ€$×MºVõ« emÓÝ$'q†M>âÞ»w‚xÖHœa”Ž diþдÏ3ìšlùŸ{ Ö§´ðÖb²‹]:Þ!7ß ¿z¢ºð¦‡xÊÓé°3/ñmæµ-­`³…a·‰"z*ŒSTsCÄ/ ª7R¬qUôÍ.ÏH²[K’i5-2ÏW²{KèVX\`©¬m3À^Òn{[$C•.űôÍmßiÖš•£ZÝÀ’ÂÃqT4O è¾2.Å-ÌŸx¯z¯­x'A×çßY)˜ËD;Xþ5¥¤èº~‰kök uŠ>øê~¦³õ/øW¼wºtRNw‘ɪ×ß|1©]-ÍÆ™•q†^:WImo­¼pB¡cA…£§Úê¶2Ù^D%·”mt=Åa\xÃw+=c¿ºb›‡¾:ÖÔZUŒ:wö|vÑ­¦Ý¾V8ÅrcáO†EËJ°Î¨Í»ÉY˜'ýó]Œ66ÖöKg(¶ê»D`qŠçí~øjÎíî`Ó•dl÷$ ú”Ý3á熴‹‰'²±ò¤|ä‡=úÒ¹ð·œÓ .1+6òàœæ®øƒÂ:?‰¬ã·Ômƒù_êœpÉô5Q¼¢ÿcÿf¤,±nÜ͸îcïRh¾ð÷‡¯EÞ™cäOŒnNj¯ˆ>éþ¢5’âÎïZ[i õ« x[Kðä,–aß—•ÎçsêM.»ámÄ‘ªj¶1ÎWî¹2ý eOð×Â×6pÚ˧,Y~nr}MO/€t å·i­L‰m‘;d*ÔV^Òlµ®üË™Ä'1G<¥Õ=1šë*µõ•¾£e-ÔbHe]®§¸®cKøiá½"áåµµp?#9eâ“Cøk h÷7vQ8yà }ÜõÇ¥>†Þ¶¿ût6’%ÎAó§4— !Ŧø‡Ä> X–ÖD_1n:lƒÖ©Ið(-óÿ Êã£1ÆOã]ƒfúƇ{zo£²‘BNI#‘÷k¹Ãº4W­xšeªÜ±É”F7Æ«Ãá- aõXìcÉ“ËøzîìÝͦ@÷·y…yÍOuám ù‹ÝévÓ61ºDÜqPMàÏ\Go¥Àcˆ‰·žjt𾌚_öjYF,üÁ'”ª•Ç€ü9uv.$Ó×p9Ø„'ÝzÚ¸Ólîôö°žÞ7´eØb+òãÒ²tOh>¹k6Åb•³ó-·Øg¥t5‰â÷ÙàýY³ŒZ¿ò¯0ø=áÍ3Ä- b·Rhä*qé‘^¯ƒ¦Ûhí¥Cj‰fÊU£g>¦°áWøHH².–ªàä0cšé.ô«;ýÞA©î¼!áûÛ¦¹ºÒ­æ™º¼‹“W­ô‹m=¬bE³g1‘‘ÍsV¿ ¼1ixn#µ˜‚Û¼¦ŒcþœW=ñbâÇR“Jðy‰Vâö@c”ð!µ¿c1F[_ºÞ$žŸJµðÚßRðç5 É©6¡e>`rs°ö½;Uðþ•®F©©XÃp•.9&•áÝ'DÏö}„01ಎOãZ• Í´7–Ò[ÜIJà Úèà ŠÈÓü ieÍž™eÁ ž´ºG„t- y¦Ó´ø yTu¦>Ñ ‚A¥Ú‡ÎíË4Óám_û"ÏrÊD }jõæŸi¨[{»xæ„õGOþ­ì"Ëû.×ìÀîyc«v§i*ëag°¼#\f¯UGGÓµx„z…œ7(: W8¤]M]3û5l`XÇ‘³åÇÒ©Áá[#¬:=š+Œ0Ži"ð‡‡`ºŠæÎ9â`ÑÈ‘ÊG½_Ô´?W·6ú…¤W1á‘sPi>Òt5a¦ØÃm»ïykŒÖ¥W½e[)Ë–Ý~•â´í?Wÿ„ŽÞþÞ9Uo7(~ÙÏJö»+ ]6Ø[Ú@Ľ*¶© ézÒ¨Ôl¡¸Û÷K®H©tí&ÃI„Åai ºHqšŽ] Jžçí2éöï>sæ¦Éáí"]AoßO®×¤¥~aSj:UŽ­n`¾¶ŽxýsQiº—¤ [(a÷Uæ™­øwKñ ¯Ùõ+U™=zøÕ À¾Ð%óllIÙäùˆ®’Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(®WÄÞÓ¼KsëÉ5µü÷Wœ2ÿõ« ¾kS¡ŠëÅ·’CýПÏÕøkÃ>ÓÍ­˜b\î’G9g>æ·(¢Š(¢Š(®cÅþ½ñ-ºAm¬KaÖIQ0Zç|ðÛTð}ÄKˆ ¶ !‘­DX ø×¤ÑEQEQ\ߊ<¥ø²8à’+ˆyŠxN×Cõ¬ðóYòVßþE­×Œ7cë]†|#aáˆå03Ís1Ì·œ»~5ÐÑEQEQEQEQEbx“ÃËâ;(í^úêѲM»[Ø×%¥ü Óô+åºÓ5mBÈD2pøõ¯H¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š£¬iÚX_·^Co»§˜ØÍKe¨Zj0ùÖwÍ÷æ¬ÑT/u­3N“˼¾‚Æv»àÕ¸fŽâšHÜe]NA%QUnu+6 suLzp Ims Ü"[yVXÏFS‘STKq ÈbY£2ªd~-QE%B×–ªÀ5Ì “€ Žjz(¢Š(¢ŠÍ}{IRþÎ}BÜ^Ÿù`_æüªKýcNÒö}ºö}ç æ63Vã‘%dƒ# †éôQEQETS\Án Ï4qƒÝØ e­í­ècmqÁN£g¬QEQEQEQEQEQEQMwXÔ³°UÉÀ¡dPÈÁ”ô äS¨¢Š(¢¹ëørÒþK+VÞ)ã8uvÆ*Qã/ –Ú5«,‘Ÿõ¢µ,ïmµ aqi:M à:бEQYWÞ#Ñ´É̺´’ ­ØjzªÝXÜÇq}Ù#lƒV«"ïÄúÓZÝj¶Î¿z9$ŠDñVƒ#M^шôU«]cM¾b¶·ÐJGdpjõKRÕlt{Sss¼#øÜàT¶w–×ö©si2M Œ«¡È5bŠ(¦I"CI#E,z σÄ:=ÍÊÛA¨ÛÉ3p¨¯É­:(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠJðñ¾7ø…­Å; ’Õ+t?uO=¿ ê~xGXð¼WãTí•ÿu<šôŠæ,|UößÞè(ˆÉo—ÌSÎ}+…øå¡Z`®¬ŠVäH°ï]÷#òü¤ Å¿Ñד]Q^]ñŸÂöwþ¸Ö™¥[»DùJ¿}+GàÚ¸øubY‰¶3^^]áÏkº_ÄkÍnçPßc#T,rsÚ½FŠ(¢™" cd=q_<üFðÜ>ñ–„º}íçúTáœI!#;…} ÌŸUjJ(¢Š(¢¾xñç‚/,~#Øêvš™=õâˆ}åÉöâº~þÓÒ!ÕßPX”G1¿ü´>Þõ×ü.Žö?‡ºX¿$ÌcÏ?ÝþÒ»(¢Š(¢Šç¼UâeðÜ-äyÒ]Ý%º&ì}îõŒü5aâ]Qz$ÝLñm»[À~ÏË0Ò5O1‰Û>ÞNkÙ袊(¢Š(¢Š(¢Š(¢Š(¢Š(®Gâ'†µ/xoû?K½û,æ@Å‹zqW¼¡ÝxwÂöšeå×ÚgˆÒfº (¢Š(®cÄÐ%Óõ É´›G¢giLCvq×5ãô};S×õ†»´ŽaD‹œdµ} gem§Û‹{8A$" MY¦ï]Ûw ޙ敘(˽"²¸Ê°aê :¼¿âÿ…´»ß êÚ[ƒ ƒæ©ê*ïÁXL? lIþ'søzrÞ&ðfƒ¬Y^Ïw§Ä× 1˜Ÿ z×ü Ò,ïüA­ Ëtž8TsŒ“þÔ|aÐí4  oEÅ…ìS*$íÜ=ýk½ø{­\ëþ Óõ Á‰ÝpÞø®¢¹ø,ø×GŽÉo «ÆûÃõê+KÂ^O xn×IIZQ9sÜ“šÜ¬ojÇDðÕýòH‰4P³F_¦ê‡ÁšÞ³á-?P½Oÿ„u›†¿Š/5Ðð˜Æqг¦k÷ž>ðŸ¥ß +ô;nnzuüëË<£kþ2Õ¡´ÕÌ71Èw8_¿Ï5ô…œRÁiSJe‘W çøT×­ï.ô[¨l.MµË'É(Å|ýðÿOñ&±ã ]ìõÌ.YŠä²‚½ ãH–/‡±$­½ƒ ú‘ÔÕ{|C'ÈõKA­ÚÜ4qâÖº?xÓûWÀ¿ÛzЩ·©Ìhz‡ˆ<~·ºœ©²´…ŠÁk÷€îk_á×.µ{ÛÝSdk»&($òÐõèÕÄüYü7ÕA8ù?:à´‹½Nøm£PX®¥P"¶+’ùÿ?¥zW†,üL–É®_E%Ä‘b5AÄmë\Ÿ†|SâFø™yáÝZâ9¡…7.ÔÅbüEñ?‹¼'âËH­u3-­Ûmû¾ÞõwÅZ÷‹ü'a§ë—Z€–Þie¶ €ÿZô{ŸEmá&×Y~Aoç=øÎ+Ï´_Åž#ðõljàÕ)fŠÌ'ÈTzš©cã¯ëwšv¡¦-ƒN°\@8#ï6}+[Uñv«¬øí<3£]‹O)7\N£${`× ñ!5xj=«ÓkÉ|mñ^÷Ã^4ƒF·°ßËæ9¶OjõHœÏj’”ȇ¶Er:ˆ®5ÝNõ¯¯Ý”O݉}§ø“Áð“ëö—W׬Úm¾Ø€Àf©®º8Ò(Ö8Ô*(À §Ó]Ö4gr¨É&¼–/x‹Ç¾#¿Ó¼5w…—[’¹g>•§áojø¢ëÂüñ>¥î‚tqüë•Ô~!xÓþ8‡C½H.|æÄJ‹Àô5«®øóÅ> Ötá­Çi-•ñÇî”æ:õ¨%YàŽTû®¡‡ãRS_vÆÛ÷±ÇÖ¾sø‡kâáãÖïRŽI%¸ó-Uåæàšö>ÏX´ð­ÜZÝâÞ\˜Ÿ‰³åÛÓä_“Z¾¶Ô,t»iÜ3Kq·?@+¹ð/‹uKŸêÞÕåóæ³9ŽlcxªW>#Ô¼c㋯i׿c³³O$gæfô’ÛÄwž ø‡/ïd¼²¼@`–Só)èA¯W‘È¥¯1ø‹â+ˆ|K¥xz-Kû:+¥2Iqü…I¤^ø‹Mñv›¥É¨®£¥LŒDû~n;ÏñGŠõ;¯‰ áXnåÓíŠ&DÉv<þTÿ øŸZÓ~%ÜøGWºû\^Vø%ÛƒøÕO‹ZLjü/¬X_iZ›­½Óü‚Êßýz“\Ô`œ×Aàø,ëƒË’ßrÏØ^µÍx{T×¾#ÜêÖÚœšno)ŠÜB.G÷³Z¼kw©kzŸ†µYKÛ RQǘƒŽžµéÊ|@ñ`ð‡†e¾EßrçË…Ú5ÌIgâk /‰ÿ¶¥{ŇíjWäÆ3··añO¹ø~Þ&~<¤"Xû‰Uüë±Ôõ­{Â~1Ôµ{›+xË40Ú¨ÆÑÓ¯ZÔð×Ä™Ã[j¿<¶ìQxÁ”ö¬¥ÖüCwàɼk¬Ie Ãmeqž3Z‹ñ.æo„òx†8‰½Qå£8lãu`\ê^ ¶ðE¿lµË‰Xi-&@¹zs]õÿŒgO†CÄðDín²<…&¹iµ?ÙøZMgKñZ”²B$hv}Óßn?•nøÏQ×ì|šÞ›|!šÞÜI2²gyþ•sÃ^(˜ü4‡Ä:´åXYqÚ²|4úÏŽ4yuÉ59¬ÃÈÂÖ(z*ïzÓü)â-OÆF­£Ëtm5k)L-pƒž Šä¼®øßUñv«á÷Ö­®TÎcNq¸ ÛðÿŠ5ÝâkøOZ¿:„s¦øf`—ŽœW¬ÑEQÖ1ý‹{»§’ßʼ[ö¶Oí zäI’]xüM{±8=+†ñçm4 ÜÞÙL“O¼À¸ìõ‹oáëçðJxµkÏíaoö€|Ïñ»}*Ö™«Iñጷ q-Ôa•ÚÁÜ¿þªã< 5íoÀzÂÛjSO4¼°¬wïì¹ÿ=jÞ«âïèþÐô«É^jþ_-Ë}äBØÍnøãDO |?¾º†òîRðˆåY$,w~k øO´ü7Ò™Whd-Æ»Z¯}Ÿìû£'Êl~Uó÷Á¨µ_í½oû3ÈŒçæ3 çæ5»ñÏQûu¥ç‹ÿ{¡Äã‹^ŠÇ»W]©é°êž†ãÃz¬¶6ÐB^#Fã¡® Áš§ŠoÖ³..uK{ {Ïø•õ4©æ«0fU'œU_Z%ÂøûUõ;‚å©¶äÏs]¯€ôÉ<7àèî.µ n`6ë"‡ÿ–k·¥s>Õu‰:¶©:j76zm³”·XŽ ûšÒðg‹. ñuÿ„5[–ž{s›y›ø×ßÞ¹m@ûHXÈŒü§#ý“^éEQEQEQEQEQEQEàŸmf‹ÅÚEÿ”Í* ö×§xžú(¾]NÄ:½–=NÚã¾ isiÞ ¾¼º\w,ÌQŠÊø`Ð[|FÖòʤm¼ýkÜê¯øô›þ¹·ò¯øAr¶~$ñ-ÌŽ")¹°ç¯'­ñ?X“Søgk=Ë/›5ÇAÇË]u´‘Eðƒ²,qŒ÷®'ÁöÓjõKh>iؿȽ{Ò| Э5M×÷VóE#+F’mº hÑþ HšsO-ቚY 䯽zmp_&Døw¨&á¸ÆyÅy]Üzžà¯ x¢Úãp²_š?ö~•î^ñ5§Š4H/m›,Po^á»×èÆÿõg“ ÍÂûâ¢øÀ-߯>V“k‰ažƒ"·¾,ÜÛÁá+•#‘â2Q­-bm6ëáªÅ$»!¹€GÓÎãÐ ¡á-+T´øiu¤Ihé8FX†>öã[?¼.þðÂYKþ¹ÜÉ'Ô×™ø^ÚM;ãæª—l¥Ë¡cÕiÿu+kˆž·ŠE/ ÊY‡o˜UŒöïï†õ,¶ŽEW=”ñþ×üL¹‰þ^Ê¥]^Ýv^+š°·’Óöyh®ñInΪÝvž•µð­¢? ÑPV'É=ø?Ö°¾ÉÍn0¡_íЧár"ý¡u’ï#: {¥r> Ö¼§kvñk?dþÐlyfD—ñí]\L4D#åÇLS袊ÏÖã’]ú8.а]½zWŒþϬÐ]øŠÚo–A"–®y¨µxÚÿö‹²6_7–9_e9­n>=è¨Ø;aëî)ßcóm´4y®xÇQ^»¦)M*ÑK"%J·ExÏÄFUø·á¢]ARœ7»W¥]ë÷궘má!äÜ0I^•ç_–4ѵ7™k†ïYþ ™_ã_‰Ü‘YU½8ÅQðf•miñ_]ÓõY&ŽIšB…Ál溯hÓu-"âàÏy~× ~ûs¯=~•êQ€±"Œð sÖŸ^?ñ2ßJ×|k§è:›L¶å¡¸[=3YvžÕ>x£Fhuƒ{cu?”ÑHô4÷ñ¾.ø½&œ’Geob ›Fù1Ônì+=u =;ã\óÛ;J–¶§#–ÜÁyæµ~/_.¥£øVèìuÊH@<]Å«ÈWádª¬¬cÀVúU¿ÜDŸ"ò™T®œxÏ?v¹O…ñµïÁýrÞºiQîXÿUWø3¤Úêzí¬×—6÷×$4QK·Œu#ó…uzG‡¼/¢|GU³k‰5Yai$s&à?Þ¯I¯ý lîåѴ˨ƒµ¼34Àô5ÚO«A/Â×»Yƒ§z÷Û^A¦è›|Ô¦äÉpnÙé¿ ¥Ó¯þXÛNbhV&ŽTsïÎk•ñòÚê_ ï#ÐlDV7[AAòºƒ÷‡µv^M'SøW¦Ûݬ2Ze£ž:s\§Š|O§x{Àm.…¥¢ZO;[ª°ÌmŽÓ§ZÏñ3&‹ð¾ «»µ¹»ºqa±Aî´­|]gkðòÞÆæÉ'´]:)'ùº†;Hø¬ûÿ…è4´Ö|!®ÉmÇæÝø8ù±žÕÔ\êM«ü’çU”G$–»]r8ªvVO¬ü’ÖÈ~÷ìÌQ®AÎ+Wàõâ‡ÊìÛ–“ŒÖÂ{iåñgŠ5v$ZÉpÁI7'šá{ÚŸˆ¾-¸y€˜ÊÉÀÆMU¿ž3ûGÙ1”HþöÙ·~+Ü\_|#Ò®%FJcgãî×a¦ßÚj~ƒE‚á$½›Máÿf¸Ÿ€¤éÇZÓnØGqØ(ç™§[ Kö„»¼…± ¨ß#Ž:Uw¸†Ú2ÂQIS»Ž†½àFAÈ¥¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢²µíÇÄZkÙ_G¹pêŸjåm>Û­ºÚßj—wVˆß$ ÜcÒº=SÃšŽ„šDrIkn˜Ûäœ\Ž™ðkGÒµ$½ƒP¼.­¸†?{ë^Žˆ5AÑF9¥e¥Xd‚+Í.~iòëóêVú…żs>ù CÃ}k[Vøa¢k>RÝIsåD¡V%“äwÅ[_‡úRè'HYn¹lýþjo øKð¤s¥˜¤ã’6GåX:—¸$Õd¿Ò5K5æ9•anº? øFÏÈͼ÷2róI÷šºãüUðúËÅ—~uííÌk´)Š3ò‘Y©ð—KM8ØhßoùæÏ‘ùRè? ¡ðÄìt­Vé!|‡‰Ï÷§'Â)5uÕVþø^† e‚jæ¹ð×Dñ¦·úƒ\I2·éMÕ¾iͼ÷“Ý40¨UMçó5…ñ×HѼgá…yViÝVÌîå[w5…mðÏÇ©iòø†á•]ÜÆ¯ü?Õ|O¢ø¹ü1â'7&D2G5uþ*øeâ;صç’Îþ>“ÅÁ#ÐÖ«ðkLÕ`µ2_\ ¨[q¸ÏÎÇë],þ ²½ð’èÓIsƒ¶g?0>µÍ[|+¼tŠÏSñ÷z\N-:[~/ð ~*µ¶´]F{+HcÙåBëYZ'ÂÇÑô©´Ô×ïc1òÕm+àúè—RÍa®Þ"Ë’É2O~oÁõÓ¼E´ºÝËÜîÌ™þ?Q^£^ñ“Ãú6­ªC-Ì’k²:İFÙ{†í%±ðÞk?úØ UsZ´QE%yνðÎ{~ãYðþªt«‹„Ù*ªe_ÔÖƒþ[xfYïf¹{½Nàaî_ï~7ÂG›ÄK­Ÿ]ý­z3 ;}¾”x—áM׉n#’ëÄW$GÊ\íoZì<'¡Þx{E[ ÝIõ ‰Y\`ãÒ·¨®;ÆŸtÿÏku,òÛ^[ÝÏäJd¿tù´¦=õà%÷É:¿ÎçÞªé ôm\XÞ_Æ\ÄMÜŽµRÓàæ•e¬Å©Áª_¬èáÉÝ÷¾µ³âŸ‡šg‰gŽðË5¦¡ÂÜÀÛXýj|7ÓôKá}sus¨]¨Är\¾íƒÛÒ»z+‰Ö¾i¾ ñ$Ú¾¡,’„E,ÿxT:ÃX4­V+ë­JêøÃÄ);ä'Ò Õ¾húŸˆ$ÖRòòÎâNX[°\ÓuŸ„:6«}cr³K¶ˆDÁ<ÅÎy«ßÂ^ž).®.‚Ī©¿Ê  p;S/>è·ÖQÙÏy~Ð'E3)Ñü)Ò¡ÒßOPÔRì³téô­xËÁKsÝÄÐÜ´rãúŠÇÕ~Cq­Ï©éZµÎ™%Ãn•aèǽoøSÁv~Y%Éu{7úÛ©Ž]½¾•ÓÕMOL´ÕôùlobYmåtnõç1|Ž)¼‘¯ßÿeoÏØ·ü¸ÏLעǦÚE¦ 9`Akåù~Xm¯?ÿ…=a¢ïi©ÝÛXÈÛžÖ7!Oµwpèzt9Ò¢µlÊ1ãŒWŸ¯ÁÔ‚gŠ×\¼‡MvËZ+qJëõèúŸ†“Bš,ãP)åO­sVŸ´X4éìî.n®VHŒHd|ùKþÍI¤ü%Ò´ÝãK{™¦ŽwBÎÝp½Ò¯ÏðâÂF õݽ¯ñ[Fß#U½_ÀšN±§A§ÌfŽÒ$Ú"‰¶†õcÃ>°ð­´¶ÖNÐIÿ,ä}Á~•…¨|/´žúI´ýVûN‚v-=½»áú×Q§øzÃLÐÿ²mPÇnT«~bO|ú×1aðŸAÓ/Í夷i3¹óOÍõ¨åøCáù¯ÒøËx.TçÌóNj‡Å?Ãá«x5Iî âÕÿxÍØVßÂÝãþ ¶µ¹?¼™Jÿw=«µ®6…þº»–êkyebÎL­É4¿ð«¼ ri(‡ý†"–_†˜3IFö,Mmé¾Òô)ôË;TŽÍóº.Üõ®X|"ðؼó±qäîÝöo0ùyúWO©xgHÕ´è¬/,£’Ö¹@µ›¤ü<𷩦£§i …Î »cŸlÖÞ«¤Ùkz|¶7ð,ÐH0A>•ÌZ|-𽞙uc–RäaÝÍLÖ—†|£xIç}*ŒÌ|±5Ñר|0ðö§yqup·IÛsbRT‹à÷…mß|Ïã’R _ÒþxwK»[¡n÷/Ý3¶ü~u§â/ i^'¶†ßQ‰Ú8yEFÚ+'Eøe xS†ûMY¡’6Ý·yÚ Õ×ü¢xã}V×Îd]«óc—oðÃÃv±ˆb¶³ù«/”Ï‘‘ÒªËð£B“Q+%ÊC»ÙCŸ/?L×O«øwNÖôFÒ/!ÝhT£ªý+3ÃÒ<)+Íaæ´¬»wHÛˆ•K^øqa«jŸÚV·3Ø\°Ä­cx÷­-/ÁZV“§Ü[@Ž^ávË9?;~5Î?Áo ›´£ÝÇ8;„‹)ȯ@³¶[;8­‘™–5 MOEQEQEQEQEQEQEQEQEQEQEQ\Wü ÿ „³Armï¬Û|Û>†¹¶´ø¬¡mâžÈ,k·Í,~o|V÷„<ªXkë~ ¾[½A“bm*/zî袊(¢Š+Óü£iÚÅÆ«¾ûÉßy’O˜¯Òº*(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢¹{ÿi§Ša×ïæž#còëZéÀ  éKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWÿÙleptonica-1.70/prog/rotateorthtest1.c0000640000175000017500000001042112242265710015767 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotateorthtest1.c * * Tests and timings for 90 and 180 degree rotations * rotateorthtest1 filein fileout [direction] * where * direction = 1 for cw; -1 for ccw */ #include "allheaders.h" #define NTIMES 10 int main(int argc, char **argv) { l_int32 i, w, h, dir; PIX *pixs, *pixd, *pixt; l_float32 pops; char *filein, *fileout; static char mainName[] = "rotateorthtest1"; if (argc != 3 && argc != 4) return ERROR_INT(" Syntax: rotateorthtest1 filein fileout [direction]", mainName, 1); filein = argv[1]; fileout = argv[2]; if (argc == 4) dir = atoi(argv[3]); else dir = 1; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pix not made", mainName, 1); /* Do a single operation */ #if 1 pixd = pixRotate90(pixs, dir); #elif 0 pixd = pixRotate180(NULL, pixs); #elif 0 pixd = pixRotateLR(NULL, pixs); #elif 0 pixd = pixRotateTB(NULL, pixs); #endif /* Time rotate 90, allocating & destroying each time */ #if 0 startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); for (i = 0; i < NTIMES; i++) { pixd = pixRotate90(pixs, dir); pixDestroy(&pixd); } pops = (l_float32)(w * h * NTIMES) / stopTimer(); fprintf(stderr, "MPops for 90 rotation: %7.3f\n", pops / 1000000.); pixd = pixRotate90(pixs, dir); #endif /* Time rotate 180, with no alloc/destroy */ #if 0 startTimer(); w = pixGetWidth(pixs); h = pixGetHeight(pixs); pixd = pixCreateTemplate(pixs); for (i = 0; i < NTIMES; i++) pixRotate180(pixd, pixs); pops = (l_float32)(w * h * NTIMES) / stopTimer(); fprintf(stderr, "MPops for 180 rotation: %7.3f\n", pops / 1000000.); #endif /* Test rotate 180 not in-place */ #if 0 pixt = pixRotate180(NULL, pixs); pixd = pixRotate180(NULL, pixt); pixEqual(pixs, pixd, &eq); if (eq) fprintf(stderr, "2 rots gives I\n"); else fprintf(stderr, "2 rots fail to give I\n"); pixDestroy(&pixt); #endif /* Test rotate 180 in-place */ #if 0 pixd = pixCopy(NULL, pixs); pixRotate180(pixd, pixd); pixRotate180(pixd, pixd); pixEqual(pixs, pixd, &eq); if (eq) fprintf(stderr, "2 rots gives I\n"); else fprintf(stderr, "2 rots fail to give I\n"); #endif /* Mix rotate 180 with LR/TB */ #if 0 pixd = pixRotate180(NULL, pixs); pixRotateLR(pixd, pixd); pixRotateTB(pixd, pixd); pixEqual(pixs, pixd, &eq); if (eq) fprintf(stderr, "180 rot OK\n"); else fprintf(stderr, "180 rot error\n"); #endif if (pixGetDepth(pixd) < 8) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/stampede2.jpg0000444000175000017500000022317611027565275015065 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÔÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ëÉv™°™÷ö©–O“r°¸ïHàÏìœS|ƒ¹Jãy½K%„˜Æ3Àªš‡î #<ã‘^d™>0}kÒcr±ù*•ÕÎæÄÜU=n Œ0ϵG±¤™F@ïšÑXÊÛ‘ÈaM`Â!‚3îqR< $JùÀïQA`òIÀÅMpDv¬ƒ;”Ó, z`Õ«†y”*.üÓRȨ\O(£Î0iŸg‘¤P€Þ¦ŠÏ ÜeÇ\v©Þ7Bq•ïTZ+xŸoD<жº—“ "rF*Ò¿™N7ÍYUˆÃn ŒñÍR¸Å)"0rqÅiYË Á Ï"<›¥R¤Ǧj ï­ÔœñUná2Fz_²Œ çn9©â¶XàTqÏéð*J¬Bín„†áKáB‚=èŠæÈ;`U˜îPÆ:niñ}ìƒÃô5Ÿ™#A¦j²Y¢Kžàö­!œ` Ò½´Q¢íQ÷ºöÅF`£íÈì)–Å#FqWyÉÉéN<&Ò¹ô5r%Ÿ;HaùTá€Iݺ .3×¥"¡u%ÀcH¶p³n1¯Lt¦ÃŽG ¤éVh_v9<àÒ,^_ïcÒšÐÆf.ÁyéOñ²î!Jj«:Û¨Ã"‘Ú’ÏÈŒJªHê _W%1¸Ž¢ª¼Üæ*¶;šT·‚7Œ8È©™‹mU b¤BÌ„62x5=„2È ‘ ã¥K²Ç±P€ô©.Ö9~G@ON•Ž,q6à@ãZΠDœS#·†ÁÙµ›ž;Óæ‡$¶ÞX` ¥„Æ2I4ö–òÄ¢DƒÒ­ÛGm„EŽiJ’ÄqÏLsK*O/ ©Íf¦›n3º5㯽C&Ÿk,ÈÒDòš}ŵ»(c!:*åȪ`c\¶…1 ÝEVð–=Æ"—yŽFl©ÀôT æm\Ò¥Qû’qŒô_Ÿœ u¬¨Ä… Ú«Þ*È[äROSé^h/ŒŽX¹ÅvÒÜÈW'Tu®Ä~%šK¯")Çš ô±ys7ËŒ‚N+~z×ÌÈ6ëZ±êMšŽ»{·¥R—Y´2ŒËVíµÄi»x#óT¤Õ-wá&Qƒýê•/ín˜ìugn s\¾½­ ÐFß:·Jê|?«& ŠÅ†‚@­‡PÊÀîÏ”ÉQ•õ&˜Ãn]J¨ãÞ³î5{[Twir:TÛ6×6§Ê‘K‘Ê×®x‘­•b‰š ¤ðÅæ§z|æ%5ßÈ«o wt9¦ÚÝ,“FŒxõ¨5»Ñf¯;}Å< àWÄ:ž¡ræ*›²ô«7+ÔmãHäB?zº5ñ Ç¥ ‰˜ï+ž}iº'ˆ—R!K åºWO pãs‚ib…¾Òd2˜à ™cÁgÎsïPM¹mà×—øƒSÔôËò§c6EhYÜk3Ú-ÊËÎ3õ«š7Œ¤†ÚñºqŸzìŸ[‚ 5¤?tRiZ½µÏ˜ «#séVnõìã \yg¡= -¾£o49*®{Eº†XÜE8`¾õÇÙxŽìx”YJ#? ÔÖ|Eq§j¶Ö±Ç¹ã õ®˜jVéy¥DÈÎ Y‡[µŸ`GƒÀ÷­>bÈéVçm«Œ`séB#FøÈÆ:ÕYõíIc°vÖg¨Å0È)“ɤžþ•ƒ:û žÞþŒm•I·jÉ×¼C“é,O-–³Þœ³¢áYr+…½ñÜzêØÈ F_>•ÞYɪŒŒœ¯+ZªUc_˜ã8Éç‹Ë]Ž»†zUK›Ÿ-1ÎF@Çë1›KºE˜ÉÆk§Òõud—lÃlƒ¡5rKØ0C*Œõ§«Â#óLƒqæ«¶¡Ž2ËŒñïL»ŸÊ·iP¯Bk“Óü(&›s1†'Ýߊó˜°þ4ÇmÆ»[ƒ£@®8šòÛû8ÿá!1q·vNkgUÓa]3|$ŽqYz‰6§0lcŠÐÕl®tM;Ê.HcPÙZ¤ÚOšÀ—5.ƒ¨ÌR{Ww*¼ ʆ‰õ—¶I»µhiÞnŸâ1˜Å} £Æ0«ßFü砮öBÚÑJž]9®¾Ø[éPÍÛ W¼)öws‘µx¼¾—X×%ŠFb¸Æ)5$ÐuH–)†8+œÕOZ¬—°²‚ „^‰á& 8Ã/Þe®’æØÉ‘ŒƒUVÍ-§ •ÏSU|C6Ÿ7…kËc²¹…¼ë.¬O N}BäH±ßDƒ×»®Á š"I ¤d —ÀÚJùkvç‘Óšïa_´J9È'z¶VÞ8c-‘Å1 `qÏáN{u0±HÇÒ¼“â-@ä/'4Í.ëUk8£·@T®*H<)t.¾×6ÝÙÜETÔ¼ÅÔÑ$”˜ÀÆU}*öK}~8âw³#>õèž$·ItfmälAŒW7áR÷UÒÊùÆpsÒ“Á“Ìu««w˜ÁÇ<Ó®ü´ñÜ(£ò®Ú];Û´†çN@¯?ñµÅݾ¢# V/@qXúV¡3jvÑÇpûKŽ3^ûbûm¢ÜrJñW–L p3Q‘"†ù”…äטx‹Z›Pñ¯cáäóùúk½Ô®ììã™®±!ä¦î•Ýønñõ 9f;‹/$×%i/Ä íP¯W† P8eÝŠ•”8#J¥r[k à•À8¯Ô,¯Œ–?´39o”ûW ßZùZ™Ü<"¼Û@¹Ôšk‹{èNO¥u×µ u†ÓîܽɥñÒÜÆÑJ¬¦=ØÁõ¨5­^ëOЭÛpÜàŽÕ‘câ ów ,ûƒ°A^¿m½ª6ì’½Ozæ¼o0ƒC•A8Í[ð±Ù¡[àPgÅQ 0lñƒÖ¢y–3€ÙÝWíb°9ëL)ºMÙãŽ=iÀuó8 JKˆhœ©/5çdQxÃŒÿ:êäµ`8Àb§¯9¾°¿þÕ3؜֭ŵõÖ–ËÚØ«¾µ½³+Â7zß×´“ªZ˜È†pk޶²¿¶Í²¦åû¹­ý/íclòí #ŒšÂ´Òï ×v…‘Xõ¥›M½“\ó‘Üýêwˆ´‹¦ò¥1Öß…./dD±•‰W×{+€*”uªªå+œ§jŠâ™Z †¼òm"ëJÕžâ‹zÔ²i7zÝìwÄQõ5C^Ò¯Ê2DY#<õ®»Â··mŽhö(^ ®É¥Ìh¸îj“ÍT ySÖ±|[ ɤ¾Íňè+Ï4IïtæÌ¶Ìñy«xÑk'÷VÇ'Û­mKFtÐE²®çÚ1ŠÊÑfÔ¬ ûÛ•Úyjµi¬C¯$x>Qaô¯EŠ`! ÅOËÈ=j(Œ’aÔŒg¡§Íq^øØGá\ói±Euo5œŒXºü‡µ{u“lÓ ó— ÈÈøø#hç#«ýjï…ŽÍÍ·å`bÙÜ8QÔ÷¨ncv6’£QC† ±§¬[X¶îÜ Ì,óÜ–cjш¹·l|þÕ碂qéÚ»½  wªÕd’Fã5ilb\㑎*Õ­šCÀʃ֥—÷¶0B;}ï’€óéZJ£Ë(3Œv¬û¥]¤…äqU-™Þb6÷«SÛ™žõz xbŒ íïVg¸HÐ`ã¥6Ên>aÇŒö§Iò\’ úš©$"cÀPwsš|8·ÇŒüuRëʘþõGOj|ñ£«H:'‘ÆjtÊÝqÉê —æ_¯JÍK·QóF>µ,vÖVç"íWšÚÞYŠ´[›Ö¥†ÂÕaˆ7æ=·›’ê»z¤·ÒaµŒ”ŒÓJ›ÏkéSi=…P††×ãÈm¡±ŒWu©Bë§,±Œ³W®FŠâ-Rg1’j â´4GnqW¼\·—3Â!€3Q\ ΈË!ÈÁ÷â©èV³Å‹ä’Ý@¨ôË[Ÿí‰dx™G5“©C%Æ«&΀÷íVôÉ.ôûøvÀ°®ÿÄ:¥ô5²ýÿ½ZÚ)™í!{‚w:äæµJ$Mû¬mÏÔ€…Üã,)VSæñ©°K’zP¨ÈmǸô¥–Þ,€KSb)%ÿ)ÀÉ©/à“š<³§u¦F 6N7š´#*…s’zûPˆ»”€28Í]D%yuÎiT`”b4ÙVYAèJ# ·?ZyÁ”ò¸ÇJc²*d7 LˆÆ¨íÀŽ•eW(®¼¹Å6O—÷ŒH¦Ç¹ËËȨ™㌠²Ñâ0댌)L©€7£‘¶¿M¼ýjHœ;x©<ݲtíïO<ô8éNù”n< sO-¸TRºÇÐoç)òªH×È£>X瑚›åEƒíNQ‰FX(¥“$ÕåEùzž¹¨ä…%!¤QÇJ‘’C‘À×@;òzšj)ÜÄF)T®2HÔð0›°¸4É#_•¾B;Ðï²P ‡¡œA >aŸZdÛ8#¦jº³îeÚÀùÈÎjePÎTã~”ä@mÆsÓ4ùH—!H<Ôr8+ڸ߈>Ël È8Åt: Æ®åX®TÄ:}?­ȱ.3ÔùpU‰n¢«î`21ó (V“g”XsÖ©¼,ÑÀgŒ×žÛ¨_8pÏL×y(d…H#i'²8~Ø]0éÀ©®¡ŽWáFÞ0{Ó#Ó äzÕˆ­ã†ŒúŠuµŒsgU?QS2þAf+ÁÅA+]àn*S!u@ÎÜÔdgcÒž‰Ÿj˜F6‘Ÿ˜SŸpPÄäzzÓK‚÷Å&Pœ–äÓðHb@ãŒÐާ >Üu›&Ù÷xȧçÌ•^ô‚O,F éQÜ3²þëÏ54AŠ|ÄnÅ2A´eÛ§'&vXsÚšQ» c¶)¬í°ŒqŽ¢‘d‘”#äqÍJs€àí¦4 ÊÅŽ=LªÈ’y$ÔE7I°žó /”FtëMÅÎ*Rœ®sÇñô‚Bf[¥>XÉί\Rª‰àWãïÞGå~•Òiौ8leò®VÊö ‘Udæ›=Ñi~LZU·R7ÌÈcŠËY}¡aI€1÷ª÷Ûðf7V'ÐÓÀ&Ö@ÌÀÐu®ßþFãÈ9îk¼Â¢G99íQ¤©lŒõ¨%„É7P´GÑ8‚€ò}*ìÒ"Ûp9ÎECÑ¢1Þ>n‚¡f.»•‡ÊzŠ¿aå9c»‚9úÕ™c¸$sÎEVŠ ÍŒ.îqQZDð]8Ážµb`òz Ï{@.<̶ÖäUÈO‘–'!º 621ÎÜñPIl€»¶ÿY³TŽ1Óœu©™Ê1;Ï¥L·ÆCBžk+`E@²°‘¸¨L’ ËŽO š¢aus3)$ŽÕµ§Î<²Jü½jäQ‰˜0eÏ¿J.3¹ÏÉÒ›<±*8ÍE Ïæ&ãòŸ¥ZŒ©»È< ñëO˜ÅÕ'îžÔø•e;BƒÇZž(I^>”ɧEÝ…Ã)Å=%V•[ncdóÖ¬"…%FÌVfl¸Î(Vó%*vÝ»›päô¨ä”mÁ"‘yn1×4òþPåÏ­BîV1Âò}{WãÛ¾Ïq»­uúc°„㪾j°ñ¡¦M´ÈÝpA¯LÒ¯þݧý É´•Íy߈u›«B[d•éÇz¥&‘¨Ãoö¯Œ‘]ƒõÙÅâZNÄäás^™4’E…B°aÖ¼ö؃ãÏ¥z"Zù±©P çži­l" lÇ\Ó¸2>¸ªí$Í!@ÝÐT736ÖŒ.FßZá5/]ØÞ”ÚÛz­­Vžý •JDy×Qiq±ÊwÅ]eÇ–I#V"@6± Þž¾[–\å³ÔUwHZCò޽C-ô ²9c&›ÆÌÌŽEIs2CY”ôª¢ù]†Ö]£‚3ZÝ(¾GzlÚ„6ÖBTõÍdÞkðFŒ7‚sØÒXkÉ7Ý|Uϵ¡ÈdÁ=NqRµÌxSݳº¤¹–/!v¶Ð:ó\¶·âÓ`Dh˜ 1šÔð¯‰Æ¤„=뤸»ƒqg•qØT)pŽÛË‚¸éN3BT¨~{`Õˆ]"eù”±sÍ]Ù EmàsÉ4&£R”R´5èe8íÞ«Gq™ó0$ö&­À9 Œgµ2ãPHeòÉÎ;U¨%i ß!Ô›”¥À8ëQ‡Fl‡©qy‹ÀªÒ]…ÜêÁˆ+šOõ°ˆÎ}krÿR·°·I&—вº–Ý8ÜBÛ†7 zW=¤xÆ=SR–Õ÷)Î9®â&ˆÆd dlÒ9G#p/î›içÖ¬|¬â6Šg—´Ç¿jA"(8ö¥I>òÃ4ÐʬX•94¬à€@:aFF3ÎjŽ¡¨Ç ™duDCŒç¬Y\¤Ð,ñ²Ý*òJíÈÚ9&›ç ¬wdg ˆÈ6† }Á8¡åÔ±§´¸Û·<”Ø™¤-ótçš³›ã\(烚V;$ÀïÓŒÊA,ÀsŒÖn¥®A¦Yx÷5?Ú–æØL„jb]Мôâ¬Cqæ ·~™«4®ßÈÍtº^½o¨B¶Ò•æ¯é¾‚=Un£2⻹Z w »†8¯8¶ºÿа;€šõ.cû6óÎj&¹PA4Ù·4‚5®*SpBWr³üªœŠ "‚Hç5ç>0Š14x6y­Ý>¾ ÁÛÆ+“‹SÔc¼’•³œf¶ôfûûYmærÀ W¤¡"?1H>Æ™èäf$€FzñU5›×‚ÅÚ025æÚ—RÊòÜëœVÇ„uy%¸’¥Ü©Ñ‰¤ñ7‰%{ï±Û08Ȭq.§gqovÜy­ÍKÄ·; µ‰ŠÈñï§Õ-䌼ŽCœeýÛBc€Ò8çÚˆëMdžI–Mjk:•ÃX%Õ»½È¬›mOVšÌ4NÌ óëZ×^"»‡LEœ!½dê6÷ÓØý©ÎðÜò:V‡ƒ®E­„Ì~÷ðÓ'×of–vyŠÐV¯…õ»‹Ôxd9*1º³5íNóMÖ{–`ÃŒRïj¶·ÐµÄ®bvšê'mB ‡÷€sšêšÅ%IJd‘Óÿ¯O‚Q¬‡+‘ñÅö¥aåÏg!u¹=?Åš¼–“Oç—®iÚgе+¸¦o4•Ñx~mVõf–výÙ\€x¬2êUñƒ$è°j]Þý¾8¼ì®xŠëü:nÆ¢~FÑÅp‚i¬üQsöXÉ“Àí]6âN q,ï/ÐW¨E)dgR<Â*Fgh•œØê*µÍôIfÅœôæ¼þOÍq|Ö¶jJ¡ÚX𻤸¢K@ÚLejž¯ã Û^;C¾3š³®x¢ÿJŽ)±˜ßÞ´%ñSG¡G~Wª×:¾;º`ĬŒx#µQñ¦·zö0…$˜$Ž+©ð]íâèÈn€XÕ8&£—Å“Ý]Ë‚ ?½Ri~1ûLÏk*ùsÕªxâîÏX6®›PôÇztž6¹¶ty£t‹³zÓî|uq" a‰¼Õë¸ÐudÔ¬c“p®[=ëZ91 @¥sœ{Q" ¬±†ë^wãËÖŠâ$ò÷®zÕçÖ¿²<9ÁBÈÊ=8¬ñ)âÞ6,95z×â M¿¼ À"¯i^2†öäZÌ HzqÖºô¹UÙÁ=*D¸Œr­íIòM:6¥pÞ:² ó0|àô®‹M‘“OYº óÿ寕±Í]ðC s[^"²´ÔóÈÞ£ŒWy¥^X?˜ Šßð§‰.RÞá΀Ojôˇ2Ú(@­žõçħť Œf½2HÒܾà(X€]Ää¯#­Hö×$®FqUšF—åàsŒúÔ¬R]úŒW–xºô^_lHðQ±[ZMø]#fÌ„^sXZTB]nY%\)ùª[Ä^*WAòn¯Z¶•]PºáH¦»™ÔEƒÆGÖ¹¿$ñXH!ËvÅy½º1dF2sš±¢K5¤òb6 j]^ÆX¯£»Ø[w&µí/Ì BZ^¹ëŠƒWÓgŽî ­‡h?0«÷zµ¼¶j±GæKôéX—öw wo},Lõ㊓Ue¿‚8-Ô’Nx«Z¨~K]™r9¦øaƒB!1òq“Sø³IdŠb @<ÕkYFƒä ñŒb©hNée.ÐKžÞ•Y#y¼ã8|ú ¿á[‡±¹‘v»±§j̳øŠ9 €ŒŒt©uö{f~PÀã>¿k=õµÜHY#Æ@5¡±¶Q@ñ–À\w¥Ö4ùïô‚ë @«Àf²ô«+fÓY';uÁ®‡ÁnËÉe†6Ø?ˆô¯L†bí´ž=…=â úÖN»§¥í›(Á85âçKº‹V–ÁCvõ§Ûi—Z~´-‡8ǵ{ºXèã…]«Ö¼Ñ.Ôø¹äÁ$ä*ÇŒ-eó­îJ±Î tšˆ-þÀ"?x' ×-§Î’xªyÎ6qLšá‹ ‘w|¤ öm4Éä)~®2µs ä±ÂŽÕ—ªDgÓn#^© Ey‡†íÒÃS¹Žðllœ]5¼VKª€™‡-\ç‹¢xµûiœ†OcMñž¯oq§ÛÁ'ƒ‘V®nã> †SȹÿìGŠÕ."˜”$¹­¯«I [0Qò“].—~áÕ‚5hVÊbdƒéO¸‚|*…@Ë/"ºߤódu%:Šé´]~-\ȱ2‡šßOƒØw¦ÜHÞYÁ<â¼÷Ç·%º+¸‘N½)uá#†R‚1ʹoi¶—1\—Ã6qOдËvñ\¡ðѧðÕSȇÅÖË»ÇJìuŸµI§1²v0©øfÛZû`{÷m˜ï]¹P¹9â¼ÿâ ÃÁ*3Œ¸ük«Ò£ó4Ëv|Pq_2ø‚õouÉ–ÓøRÑΕ)Sµ› ¬;íFöËSa$Ä ÜŽÕÒ6¯g}§0©;y⸨üNÉþøÁìz{H–(Ò7Lu®>Üyž0†•貌ä0â¦q†ù±Å\Up™7ŠÏ‘¯”sš<ÂÆýµs ÚM1˜Æ¹c»µ,t8Ô†T7·Z­>‘g™v0F1Yñh¶«1‘P+ç­n[HQV>‡<çÒ­>ävíÆs‘Ö©ß,c “jPÈ.ìòMXµÒ¬Ì…Ú5 jk.ÖRË_—’z[>Ò6S*w§j½wgo4EYTäãÍgàÙD¾`ˆ}*K«/-ÄaãiÅRµðý²¾åP¸Õ{á«KéÚR_ûËRØè–Ì Aé“Îiš®i«Â¥À;M`ÝøÍØ&Üã¦kN Û.ž-™~@3ƒÎiö‚òÝÏfãG¶šÄ[4co@1Ri¾¶±Œ„P21ÏZ£sàëk‹£2ƒïÎ3Vì¼;khÅ£Œo#œžµVçÁ¶3Ê.?x[$æ³ï|)ì È§p7T²øbÚhÔd*ö¢_ -®“5­¨ ‘ÆZŸÁž—HÚ_õÉÏjì 8üi E”üÝë™Öü3¬û]AÀã&›ÿ¢b‹5bàóTô¯¦žÒ,.FO'5%¯„c¶Ô ë!ÜÙçÖ ½ð8»ÔMØî?Jê¬lQ*9Ü@ïW"‰RBN@=,€³`óo,ÍufþèËŒúWk¤]>5pûWÎv^¹iIF{צiæÒ$] :zÖ7ˆü4un"E ; ä†õ$Ê„!Enø®’ùó©,9W¥Ao‹ ²"—ŠàlöGãUˆô0¥ãI‹ãh#…d’AÐÔÑÖÌAÈ⫨X6âǹô©ZU7`Ý…Rò Ü v0;V‰s*¨ä‘Æ*‚y>íÇ©©­bw îÏ­8@U÷p}jýÛÀ@žz ®÷™Œ-ÐT*Ò£‚ŸÒ¤K¡Ì=³ZÛçYŠIfò¤Â ¼ç4ñpîʧ8'&¯ð \Š òì˜ 8'©¦<†ÞF•[ ô)»Ü[îò­Ì©Ž¬ßíU¸ÊM1}rhXÖ$%_9ô5<0FØcŒž•ʸYp¿Ýæ²`³ ƒÓš½=»ÝâµScÄ®ô¡—-€˜ýjfp>e ôå“Í{.Ð={Ó»A–8ù²ôª‰9Yʇ#×Þ´cºyP€¨«AœälÇLÔw–Pü.G85 $"‚íǨ§…‘Îz¨ÎhŽ/*PGN¹­,?¸#=j -Ñm\“Óšµ ªE†_˜Ô["—èøÁ¨dJNÕz)÷Z¡9,GJ’,m'¿Ö™Ë)É?Bœ’ ž:œÔ»”)?@M)H€ ‘èi…§¯_jk‘"¨Î3ÉïQ±ß±H#>•#ÄŠÊ â­mU]Þ‡¥BNAË‘ÏLÓâB%Á$ŒTs‘»g¾j)¡fÚyb™ ±_ÝM\EPA™@ùTôÁÅ$g÷DªõUã¯@ã¿«ÊêÌ¥œu©b!J‘“ÉÍ:E (*¤óÁ÷¥wE²rG­pþ9ýÝûÑÅuvÂHC´pMpMf¥>TS¢ä‡¢‚:sNŠÝ“äpÏ&‰måØŠ0zæ„·DùWûTò\È '%O\ö¯>„¬¾0‘‡f»{‹Ðˆ‰»~u¥ô$¾çíWä½… P˜\/Zu¤Éåýô"Ÿ9P7ev*§kyˇ•FçVä•^Lîùò¨äh× …p;÷¨]Í…cƒV..ZQY—ŸzÎ’X®rùô†-ˆîݸö©¢U“?Nº|~^FÖnÄö¤†"–#ŠdàÈŇ\àqÚ—å‰J–ç)¦I¨qå#œ“Q›•ŽÎ¤Ž£#4r£´¬F G¥Onñ;ÒÊÄC„`0x4ÈØF[Ö¹ûÏYé“ù3¸ M[—^ƒì‹v]Dxâ/Y¶Ô”˜fAäúVƒ¬ÙNpzÕ„†_Š<²ÛJ‡¥6n¹cÈ÷¦ ŽÒÄŽG©¡mñän>•$G‚ r*ùc‘’*+‰Ø ÀÎ1MŠC"1uÀSJ/b‹¤ÀcÀ§‰•”ò:°­½ÖÇLŠwŽzóNgÊ ðSJξX*1ÇZˆnÜ0»³ÎiJÙ2Öœ\„Ž íŠl“‚ Èàw¬™µ«8§òd7Ú´„&X••· ½}k…ñØe´ÉçÍÖi×ìQî<íÅ l/ÌAäU˜II0ßÂ=)˜wmçŽ{Tr1YËàð=i¶“ùÁÏLSnXù8$ñÞ¸-9Ïü$ÓaI<×Qym+Ù3e•œ\ ­ÕóßÉn²19ÅM&­otl‰#Íhiê•#1HÈ5Ð_k¥4<8É®ë7ÓÊÓ HÇjÞ²ñ%ÅΙ$eš²ìµ­NæY GvuìkWI×®ùµ¸;HéTµÏÝDÀ%!PñQXk—R\²´œQ\øŽöîS2í O~µ£¡x’àÝ%´ÒeIÆkÓ! Ð Óš%Î'ާµCzE¼ÓMyæ£â ËGìöyÈâ¨[êwÖÚ“CrÌsïÒ¢¹×ï£Ô ~^€VŽŸ¬ê #‰·±QIâ »ùÌí´)«V$¸·½]·=gkú­ô~r¹ǃT¦×oÒ8åóJҷׯ͙™_žÂºmj{oI=árÄdg­r—³ßjv²\2æ>£5©á³i¤\?qÎ? ¦Îƒšë´ djö‰ Vçæn+kl œgÒœŠ|¦ROJde¶dç¥Q¾Õ ÓÐÍ3íQëX7ž/Bªè¥¡Ï-Ú–ï[¤µÕ±g\pA¯7ÒÞ»«´¤ÉòÉœçµ{nš Z,rs€®Ç–ÌòÚœpdý뤴˲€"’6Žkž@6Ž™Í6<ʘž1ù¾j BÚIbFÀU`cÎ Ç ºžF·,HÜ{ ät’O‰¤…÷5ØjÌ‘X³oç«Ît·#X–B¸Ý’ 6á·ëk)ÁçÞ´xé^J×Éÿ s\d*n5Ôk÷6wº?™Œáp§Þ«x.ÖÎêÁ–HÔ²ó“T¼a§ˆ/íJ.#ÏAÒ§Ö^$Ñ‘b#{޵Võ —‡QeL»Žæ®h ooá©ÙÔ Õ? ÇÍ<Œ<ðiÚ¢?».äŠöXd2àg*ë®à™ mäâ’6RÍÉÝÞ£ºtŠÒBÀd)"¼Nâök½nᓪ’ õ¤ð¦ l…i-ÇšQA=ECýœ¶·9Š%õ«2hÖ×R«\ ÉãŒUëÒÏZIêjí弓̩/Z u ÷7 I¼mó/‹©éÖÓ°*%ª¥¶•m„¨ê? ®še¼’BŠž•¹kµ¡U é®Z_éò]É6,z ®þ ²+$Kµ÷dŠ“Rðu¾ ¸ÁCÛµ[>·M/ìG‘Œg5ƒáX4«¦š2sè+«–M¬±ª‚[“ŽÔ’†‰2¬pG4èÉ`¬@ÁV'Šî^ l(|©éÚ¼£ÂúsÝÏ,GÌœç"½*ÓÂ6öÚqÊÃæ-Þ²-üñˆ}±žNÓÖ'mʘ‹.ycš³yà+{½¬ÌpœzWE¥iÿÙ6I¶ñØžk#]ðÄZÄ›óµÔõªÿð*éífY™IåZÇO˜Ý¢ŽVUî5Ùèš]¨XˆrÞõ¯±ˆÞH¥Œ„m­ÐŽ +?ÈØ#$Ön¯¤.©jñJ‹ƒÒ¸©¼-p˜‡íBö­åðôqé/oºÒ²4 >›{¾9NÒyõßGØ ¹+…ñ¶Áqd ày€Öô… ª3\ø!a#+ÎjH\<ã~Z¥wpIoœ|ÞÕM˜JnÈê?³/˜$c{ ‚òé"§ v¹-*Bþ#r8®ÊæuH†æŸ”öûЂI«»h ÁwZƒì¿¼ à;g­KÁN0?„š…¦I$ÎìcÞ£VÞ®X÷àÔ²y‰²sÛ5cí(¶Æ9pŒœµc;ù“¯–xM^Ø¿ëAÇCK,ÂHv¼Žµ J%G õµä¹Ýòîúâ”H^5É#5E‰]±ÔúÖ{Cº2»n_Nµ^yB @ôúUx,·9ub å³Þ¶ã(×å%qP1*r è{U¤œ²æ&€äö¨#Ü£æq¸žrjÎôc» Øõ«v³ÂGËƒŽ£Þ Ô7MÑ•æ¨"yløáªhÚ¢fŒnlóVí®’åW bµ¢ub3žyÍ*]#¶Ç8µY”¨‰v°TQµHÔ„«|Ø&¬“¦ÕQ‘Î}j À„ã$r)¯*²]ÜSdV!vjì[£Œ` šŠöça@ÏíMFw úòy«q4{øÆ@ïJ·Ñ†+ 9%`X±=1W"Ÿ+¸uªÒÞ,g+ÎãÒ¤–Hø,>fªx°r3ÍK £í%ÏLp1NiA\ Ä–¡Ô,[Œt¨­¯VIž4Û€Z¯n°# ޾´ÎDxô&­,d|€Ò©^Ú¥Õ£FËÜk"ÏI‚Õ³J§8Íj,̃ari‚F •Ç<ÔªèÃ*0O?AND-!ÎÃÒžP dã¢ùLxês’x§oy^qÓ֢ݸ±Vu«Q6ÀI#4»›qîû\SÝòáUTàuÍBÁ£bý{âŸ5Òˆ×?xÕ‹Îäæ®Â†8öç8¨ÑÎ@žy©žB\¦;WŸxؼ³ëòÈ+­ÛEå¨ÚTu¯;†íÔíbvãÖ„wÞU¡AОՓ=Ó\M"©à)mç 2ÍòŽõ5`_FÀ8`Ù#Ú™< :» /q\}”†ßÄ’=N+¯Õb&ÄH¼œf¹â©mAåCWQ¤jOzCÈX ôjÔ»DÕÎ+:ÚàIrrÇæçfpîNzP6¡`ü‘Å"ß”U:“ލçŸíCäa¸w¬›ýb==ŠžÝêÖ›ªÿh@>cÒ´na6êUXÃ<šŽÖs€¹Va÷ŽzV€•JüÃò©þ× m€Üc¥6{¢m‰\Ȇs#ÈNrZúG•v.sÅjY#4*¤6ò{UŸ39ˆ7qY—"dgrsÔÔ6$$3?Ìs¸Tâåî)`0:¿‡Šä¨²®5øt§*XÝjE«oœíõ«BfÏz €I'o4ÅÝ-Ý£±ñßµ˜“æSÍiÝj–ÖÄ4’ªäàUÙ.VçN\r¼Y¶öìUR9Sëë[aR# ¹Ç4—2ÈÀm#ƒØSmÑåFË.sÁÍIe›…=sWw ªw9ª—“w¡ªRwv…×iìj{i¾Îän?sPê:¬V’Wz[]Z=N öïÐõ±ÁT CzƒÖ««¼Sf ¬ÜJ³3´„n¢©»È%Á|©)é¾6ó pCTlj-Zå­VXÄ…¹µl‰ÕÈU¦ ¦¢ù+µT[–«eÕUC¿$àf§R6ç Hè})>Õ´ ‘ÔÒ´‚Qü8ÇïU|Ш~P§ÔÕ;»Ñ€¡²§¦Z’ÙË&ÌŒÅ9¥1¹Á1KĈ››Ž•Ú¨&óÇSš‡QÕíàŒ´Ž•Ȫx/säá}+fÆfš%-€ _•Õ^3ЇÌÄÀ#×¥<n õéH/`š¡p°’Xàf§²™egld ±-ÄqÂÏ#ŽzôBÏW¶žvXdBð«Í0l¶î}+†ñÆåkYÏÎ+­± öãäá‰ZÑÌQõõª¶ž-™d_?%k£P·šÝ®ƒïÇ¥s¾(”ÊVº%‡‰]§ 7~•×Ú\‰`g ócX|m/ˆØ‘Ðä×p$Ýhñ²´3^g­Ä‡Ä;Up»‡ÙY@KD 9Î*î¥}½»¤˜'`×·s5éê8àTñk·Qݘ. j-W_»²¸EV;} UŸY¼ÊË"íVèkIõgµÓ’pÙȬ+ùï.cûL‰ò0È5¥áùÚ;pØ óI|C{{;$9;zj4írh®^9r$ Ôã™×@æºÍìÞZ–#paëZ‰ qBIA–4–°'œNÕ,zJZ½m3N’XϨ®x²øJgl®†Ç[7z{MŒ±æ¹ËŸÜErѲŽçN³ñ<ð\xÆÒ{ŠéîüAV !n\t®.þêâú6™£o,t5±àY‚´½w•è[nXu85RÒ„Lcv8¨õå¶°ŸÊåðx5Àh/ý»#:©qÔT^%Õ.šð&HMÜ é4VùôrHáƒY‰ã¸¤ÚŸÀk[Eñ…Ρª$L£s^ˆ¡ oîGJ†2Ѐ±¨ÆzšV™av;6 -é\³ãi-îÌãvÓÏ4ºoŒP›ìòD7Æ*³øÓŨ–ÆêšÉg|„ʃŒšÑ׿[ͦb˸b¹-ÄÙ@c…Y°rkºÑ¼Fº”0#ÌA÷Oz­gâi¯u—µÙ‚½qO‹Åò¦­öQº‘“UuŸIaª¬o±¤¶ñ‰¼¾òY ¡)5Íêò­‰Ve,Žx®×Jñ¤'ÿB–âu`Š;ÕÞtA¶gµu:fµ¥¦ ã$gÀkž+œkÝ2#Véë[·w ©èÒ» ¿/úW ëgKóÓs2“Šôß ø„jíV—ï v½ãK; ¦ˆ~ñ׌ ˶ñŒw²’‡k÷}i­ãÈ„­bx#{Nñ\7¯´m÷ªšÏЬÅȉ{gœUýÄ–ï f1ü$U_kðH³FŽpGðõ®kÁ2?ˆ¥S+4g &½{ÈGä)¯7ñô²lYÚ©ãxÍv¶®ñYŠAGZùŠY|ëÒ\åI©ïVØB<®½êí„Ó˦I€+I±"ôêkJ?´Ï·õ滫<Ù¤k Êâ¨é·(ð}·\G‹GR*/®ÙáÁxǺšƒ¥Ã»Ç¨î¡it8Œg<ò)nî"þÉŽ-ß0K`|ÍHá69¨4±\8›å#Ö‰­ä›X/n¹ç5¨OöŠïfµ5™cþË…QN9­ß dÛ ¤í “šê–F– p'¿jt?+a@-Ý«”ñ…ôÑÛ´r§<×$llƒ3c=…t¸l|·<ö{I­c ÝVµÈâHbd1à⣻Žy´ØÈjâ´b¹…|8Ñ0ˆïÖ¦ð0Q3ââ½7S¼²œžØéPù¬®Ý¿6sRjSbÎF8 ƒ^]¥\ªx†GàlSüUûZI·wjÚ³Ô-£Ñö ýá^žµÌ%¬wFGWÙ!=+S©-®·³ý+ØUÊF &IøÐ4‹• n¡/9^+«ZG>­?’Ä8&¬ø^9SXò¤Œ¶GšÅ·‘âe,…Fjfxþ×SÎášëï¤W𘠹&:æ|6öé‡Q¸ŽsVü6$þÕ¹hþç8¥Ónü¯ÈÏ„àóR=äsøÊ6Jƒ‚EOâô†çX¶Â€»°k¢‹G³XRpŠÞ qº¤`ø–!71Ö‡‰¬¢ŠÊ)-¿ˆ€ª·Í#hPGvYdè¤Ö#ÚÝD¨îÅëšõß Ý+i¶áCŠß¤S õ{ÊÄ@9ºñÞ¼·âSÀe€—!Çj嬾Ë,+q {z×s­‹ ?a`¨Æ;× "HúCºmT=­¿_y!$|äã³µè¢>%„§qëé]Eä¶Ðé$dn Ír¾²†è]Há2ËšÖðl«¡|À\ô¬9ãžçÄ7òÜn«Zf—<:ÁóQiööóø±ã˜(žA®æ_ ÁknóÚü¯‚N=+†Ó¢¹—Uœ¸É›·5r»k©eÝÁR@gÃít÷X>Çš…ñ”Â3„ÏnÜ×®ïìå9¯2ñ©vñ”Éß]½›#ZFsü5òêÆ^çiÈç­åÒàXÊücšÐ°’ÆÎÎB˜nÄV4–ðß¼¯yÅR¶š[+´ùˆ¯C±‘.4ñ3“03Xºt¬|DÆ>½:Wcu –-²),{×?ÿô#)QÖ¯YøjÜ33"_J¹m °…TqËS$Ñmå|² ‘÷‡zd:dòD<“MÔtH/—vÓ‘ÒœKË¥¹G*Ç®*埂íá¼YÎwd|Æ¥Ö<#Íà”» VŒë $@’þ*ͽð¬77pà䎥>×Ãp¼ñ¬Ó™U:+Túï…ã¾òáUG#ÿIH‚¼¹Žº2Õ,ìb‚5qšÕYpÄ;Ô²™Uìp¼W”x¾Úâ]O3@Y?•`G¤,„#u`x5èÚÛ44¶¹%›oBjð01$>a1‚¬é~‚Êã%G"©ø“Â?m¹I!;z¯máIã°•˜³® Pé>’ͦýëO@ðªéW2\3–G©¨u ù×íuäÎ@*x49PùŒù•‡'Ò±í|z5Qpd¶I¯F‚ [yRª°õ®[Qð7h´o-ÜóSiúÛ¶SæI‚ d_øf{;‡{I68+Tü9áùí5¯´³“Ï5éñ`€1ÐOo¥y÷Œ•$×ì9P ô®¾Ù!è2¾m¿°šÖéˆSÁÍ1î®gŒDªzWO¦hÚd…Ôï# æå‚çO¸q°¥E¼÷—8Øz×qoo$6qǞɬÝ!¶ø…ÏÙÜÎc¶2‘’ œW;c®­Æ¡å“ŽzWGö•–B"àw54e´Œ@1V,f…˜«HOÒ¢¼–rÅYqŸJåŸÄ-Û¡s‚qô®‚ÎÿÎ@ÁSÜjcr|ÕÛÈÎ1SÏ sÅÃá‡QUd…v~ìŽœæž€Õ AØ£9$ж*ßxôö­(Ú0€s»’nÛëUÈvì\ëS)hâià})¾g™ò¡³\Óx†}IíäœlÏ k§†{s ´xËôj9UˆC—½3DO\ŽùªLƒk(QM7[›`ÁÀëPÆŽnòÙqZêÁ£É9#¡ª÷R€¥|±Éªöµ³Î!IW#µo¤‰#($sš•åå yÅaj‚y²ê5I¬¢Ž(­+„Úzî+I˜¹nEGÂ>þrGZ«<ê‡k°=ÿÏ54_¼Ã »HéO‚¼·ùI=*+ˆö@,G ÕO˜”ÈEG#n˜*sÚ¬G¶ 7“ÉéRI~¾k*>Ÿ‚fÃp:f¤-¤`[ ØÕK•IòN ëQZÀ#™B SÔÖ›¹‡*IÁô¯<ñs§ü$Nrùæ»XÖ$ àî¼›û>;Áã'qèjÜ@hÔŒóZžXŠßË^@àÖlú]´«™3g®*tËK|² ÝQ\¿Ù£‘°Ø \Æ‹+6¼[žk»¹ýå´ºé^hÌðê’y ä+SK×¥µº pÇëCQñGÛƪÚë×V®¾ëž¾•s[¼¸—NY#‘’¹2Êk¹ »NÐrI­ÇÖšX-Þ¼qV-5Ù¾ÑåOÃg"’ïÄ·6÷RCÓÞ?^ºy]d$.3“PI≖WŒó‚kgB×ÅÌž\Ä«ç°ë]#Ã,Ž],8ö«Ñ<°Û휭rž%Ôå·µ&0ß6y®g÷·^{c,¬y©|O失:çvy¢Ï q!R#R9õ®Ò ëy­ãA^M`Ëâ{xÞDE-ÏÞ«ºv§ÚoÀlúVÔe$AµqÞ´au–R3šà¼g¨OA!}«—ÓÖa*Lw9ÍoÏ"ôà×I£ø‹ívÌÀqɬ«ÏMm{åí#¦¶ñ¬°Ü7CRßøÆFäD!=kBÏWiìÍËdüµÞ(™æ)l…ˆëïZú'ŠAœÁ8+'¥Oã²êÊOZ—Tñ Ó¢IÙK,ƒjcøž¦-Ñ-XƒÇ>t›Š£½v:.¸u d«ÜÚ¶Ê–q“É«Ac$9ÌëÞ%‚Ë÷HûŸ m^µaâñ-Á·—tNxP{×#ã%6ú¢L™\óõ­MÆ2+AêBŒ ÕÜjzäzm‚^©$5gIâ˜çÒÚñQŽGJn™â{køe‘Aƒ•5œ¾7…¦t#k)ã§câ»{ÂJî £æ&–÷Æv¶àF¯æ·`*Kê)E 9à«b¸¹®›KñX&F »œô 7Æ6w7im¼†#»(HxÔ‚3ÜÕ9ãv™²Ã\çˆ/³mZUÎ@éï\g‡¡.C0cǵwž!ŠÊÔƒƒŽ=ë"/Û¬„œ¢·Rk¥´’ßQnæ`b¯ZFÐîòAéÍXV@H2;tÅrÚ§Š­me0ÜÊqÍI£kÐÝÄÅYN Öf£â›KmHíîSÈ+JÓPMVÈÍn<žµÇØÞê âà ÌÛ7p3^ƒ6¡ ™S3>õR=~Îòà¡<Z¥‡NÝëQÛÍÊ|?LŠ»p\ÆXóëÖ¼ÇIJ†ñ ›98ÝÅwöÁ$·MÌ£Šó»PÍxÛËÚ´./R%ÀnzqTž÷1µFÞêI%m犑Ë4…”|¾”ë´ŽkiŒ6:W#£šü“‘]Åìè–.½¯5çÒªÈ[§®*K»uŸRAÎHÍ;XÓd·º@AÁ4znëDg|œð3ZWÏZ–OÍŽ•KB(leËázÕ{zÛ =MO}—XQ0½Hª÷Ѫ뫎ù®’]:#¦<Öë–Û\e¤5Ë©!N*ÙÒ-V M¥ÏÒ½Êñ<ÀÈÇ®ÜÌX–ïšåüI rظòþeSÅs^šhØÍŒ–¨¼S"M4^Yã=1PjRÀº\J‘üüsN[ëŸì-ˆ1ÔV]¬rÍ UŸZ½¤}¢ ¿)‰vÍz-‹ï·8\sRK;ÁlJ¼WâyšKReŒdã©ÙË i* X-˜´ÃåÖdžœ©`ò8¥Ô£Iuèò8«>#Ž8ͺ ºUÍQ`C@ Ri“<šÀ‡çÇ9ªþAÔ¦leN9¢s¿Äq˜Æ~lU¯•ûE±+ÀaÈëKâkÅ—I‚5# ÀÍV˜/ü#‘‡Èô5Ï”F ò¾Õë¾ 3J…Bp+µTRªÇƒŠ¯{æGní׎yæ—ÅŒ.Žþjê–É{ ÂîÕ—âÍ“]Ú©Æ€j=ZÒ Kkfˆ ñÈ®»Qd¼ðŒ`€p™úV#™e!†Ï˜Y/·§áT,4ènuù@9@zWMw¤Cki;ÃVÛÔW- Ú}ªáÄÍ’½šºÝ+E·´¿y˜%s´W/«Æ.<^±çå-ƒZš¤Ùk6Šw û׫XÜ4v<½}éÂèÊ¿|x?ç5›â;HçÒ¦f!kÏ<¸¼¹fšƒÅ2Íq¯Åoô|ö­ ~ÚÚ=0ªÃ¦·|,ÿÙ æg§®ÉÃH¿•eêttÒ(;°Myç…¡Q¼¼kгqžÕléo¤KpÑÉÁˆ¹K¦º¹ŸtkœŽMt^šn¤ÑJca÷{ X®£ÿ„ÑÈ*Ÿ‰õ©n|@¶ñ–1ÂŽôÙa¸‚îˆ!‘#H vÇ™ëÖ³µ ¬·aÔd“É»aj¶öfŽGzäµ-Mó! ¢µôŸ˜ãä3÷&·¹IJc…^¥&uŒdS®`Yí± ˆæ¹ÄðÌ"ç*Øõâ¬ÞøfÖI"%qýi.ü) ÔH • éPÛhIk‘1/ãµaÜh’ÚJZ#´Æ*ö‘¢Èe26Yv®Î¢†ø›ËÛfËG€àw®cXЦ¼‡ævk:ÛAXpÛtª×šFøBv¿¤èAJÊÛØV‰ðÄrß I=zSu .•˜ü àUùü1ݪF e9©l¼8–|’x"¡“çgŒ•.yÁ©¡ðÚÚ»JŸ3ZPÑΧFWiSÕ?„gÊ;’îóWeðÄï§,O”L°ðTŒJ3°»ý&Î&·E Àu#5«æI°Û»99ô§;ïR¹È#ò®YÐZëS/n¤9?xT‘øváJ4òÅgê~k­N0¬NséV®|(.•RW#Ëb·ôý/ìϳ3n\`V ׂ¦ˆÈ#”¬G°ªš_…'·Yv98>õ=§„ä´Ô¼Á)¹5Ôµª˜ M†ÁÍs—Þ¹Žág±Â#õ­=7@¸‰–[™Ap¤+_ Ï>¹ç‰2Û³Z—^šúê)Zl2ž•ÖAi,« “qš ˆÇÆ2sÞŸoöÛiøppkÏmü/wiª³@Åbc“ŠÞ¾ðª]Ú£çç^ýóYáË»—Ž ŽaSŸÂ»6ÁlíDqª *ôr® ±Î9§JVX˜60èkˆ»ðäÖ—’\X°Q!É•zËD¢i/_|’ Ú²dðÍÝ¥óIjTsWmtk ïq+ý®[ûQ}tÜ`»“øÖŽ¡ái$ž+؇ïGR*êXêwE#tÛþ/Zì쬣žÙ"•UÑujÂéq[MæDŠ¡‡ ™«/q^uâé ø’ÑY†à:ìâ2,à!ÊçšÅ‰ª–jŠ­tU²¡8íQ=€”«*ãæ¡û#ÄFsÅYIÒ)×Þ«ßH~Ìí0¤+Ïô)?â¤sާ“]¥íÜvñ‰N™â²moí¯îc`prEt1‰B‚jʸdÚ]@MˆaA_Pj­Ò `Ür3Š@bà§9äãµUŠágÞÄ®8&­ÚÜÇw&Ô+‘Ïê]¡ebΡºTÌ›'`ØÈjŒ¯ —r ƒ[‘2Gj¬-VŽí%¸bŽ‚±ï5Ȭ® ÈÄdð+NÒî+¨!š°hÄïšK²Í*m# ™ÕÉV;G>Ôö‘e\¼c‘E@-mîB†ûùæ­@b¶" ƒu©šU”îEúâ‹ÞÄ„ÍEwäÈÞA¬Û›TòPséXwp–™Nܧq]™´ÆhéÇJ¯q©ÛØÝfF-€+u+Ëhåˆ/ÍÎj2 :69æ§F-`[ õ©­!Êïo¼;|í±I nn1U#\}õ Z+iMñ€Iìi$X⌯—’)¶ÓFeÙ9aϵ\GŒ;g/­@Ú¨¸%±÷jÂ6õá¹Ï4à‘ÆûÙH棖êRƒçÅcË{mk;‘U‰Åh‚.aVLsÜUËdH›s;*v9¨­ˆxÜ*ŒjGLÈYW'$v#|À9©dÚ±? À‘$ Ì â‘ ŒL$èHÈ5n)Ñ•ÀÞy«<9FÑŠ†EÝ&@ù}ht_,®r½*[€IÚ£u§ñ“½xǪrȪØ+‚:šÝá˜VV=Æi&Á)fa´¹¨"½µœ§qÏcRÎË$)Vþ•R&ÕRAÇB*ÅäI1À$ô'jÚh'‹j8ÝßæëO’Þ5dp n)L!@c Œb®Å)n¿ àsŠ|n›¶¢€¾¦¥“ä_”†=«"[·ŽìBF çë\ŒÕÛĶnxŒWw`OÙ—~Þƒ¬¸áS mÝ8ÅPšHÐáºõ:Ê­d8ß­1"ÞTœõÎ}*h¢@\ã êk/Tù ¤dàççÚ"ÿÅA(€+®ÕmUìÎÑŸPkÎí®$³Õ$hÍœ+¡°ñ ´æ9òsÍ6óÅ3AtÈzTÖÞ*¹ìʱ랔·Þ$•n$m¸§é¾%v¹[iWnx¥ñ=ìÖÖá¡\+w£Âw³²}Ö#MMªx˜ZÜ¢VySéRhÚò_ÌÑO…úõ­uŽ?<äŽZ¥®jwV¶%a\Zåü?¬Ý ç%Y÷sÚ¦ñYGTžjoOkbˆ‰ò÷«¡Óõ¿¶Ûïp­Q¾ñBÇ'–¸bQZšvªšŒ;U—8äVØÊ[ *Œ sXš–«%—Ìn€V]¯ŠÚ7ÜôÍtWZå¤6>vä–¹ùüX²ªåެ:U‰üG²óchÀÍfEâ¿1Xn$w]¼@…ÆÐIàÖ®‹¯ý¢S;ºV‰nä}Iw©îãÓ7‰?³´hHx5ñ·›kÂo=À­'Åj‚ Dn¾µÞ.ŠÎå“v÷µxÓËl:‘‘¤u®‹BÖcÕÐ3ŒElµÆÄ%6í±õÚY‘I<ã½d§‹í øPc9ëPkÞ&6ö¬a܇އ¡KuªjpȲ¾sÉÍzͨ ªŽ2@æ³|E«6ËÌ • q^ñ$—šŒªà°‘¾\öªþ5‰­®ã™d`ž`+KNñ|0ÛD’n+¬þÓ€XÇw¼#<×?wã›f çÆ{V樭͸’6Ý‘ÎÓZѯ¹FìŽüâ°u_A¥Ý˜db¬;Õ?øK#’8¸òóW-|Kò)Ææ¨ÜøÎÚ …¶g9jݵÖ-š´T…æ¡oZ´ÛUÓgJÚ{Ô{p®ªä‘XÒxºÁW>züµwGñ:¾ï)Ç·™ 7 v®WÅÓ^%£5©Ø@í\×õ;¹¯&ÍÆ÷§øßY¸ƒË·‚F_0àÖN…{w§êE4û–^‚º}Yž×ɶO”¹ÆEeZë7ÚÚZ»³FëßÖ¨ëQê·º¬Ÿgb‘¯BJ›Â‰©¶ªcy™‘O'9æ½1&ÚB6>Mí´‚ô©‹©Mƒ±Ò¦l½G,…xSžÕBáA‘d ¹Åy÷‰§7!² KaºzW¢ÚͤXAÒ¹ˆçÌcåäòj7E”Ã#*hàClV3È Kl3µ‚š–n0†I¬MI¼˜%Ý‚Ø5ÂøuDž!Ÿ$z×a¨Xd;¸U8÷¯<ÓcŠMjBü Ùæ£ÔWv°=3Ú“Q‰Eô ôãuv6¶V“Z,ŠªØ\ƒŽk½›v |‘†SŒš­k#Ç«ÆÌÀí95Ðk÷ßoÓ†Ð0¸éZ~x—G ‰ ×%sãY“y{©«vv¦ J¼±è+¿HÌÅUG̯­TÔmž]=Õ—’2+@°K0×I `Õ?Ë•²•=*8¡4=ÌT¶8„Åt‰¼¾µ‹l’ÊÍ• ëšé¼-i4WûN9¯Cͪ àt¯3ñ+<šÂÊ®qŽÕ¯q§Ù\ØG† UrH¬ kz[ClYÕÿ./ì¹X޵—§@ÓÙÜn?»^•h&’@z ³¤YÇ6­*ÈFÔU›uŽSµ¥/Šž -„dÕ5×’út-Å7@´¬$‘ЭG¢nœá[g¨ê*º«:cp<æ¯Ù$z¥ü&VQ†õêš>› ½±hAÇJ¹q˜¢Úcê3ŠòËó$Þ(KÄ{°Kâm5md‰¡œt«šÕ¹>…¤ˆÚ>jê<ck“ (_3$Šê¥1Ç&Td°õ¬m~ºÓ%Ü8 HÅx;hîæwUʱuKãé!škxЃ–祧ÛCáµ1ìW{Ó®d–OFb'!y9¬K‰ôÜùcžŒk¶ðE¬°Ú:³e‡ÕÆæÅÏ^Þ•ÇøÃK†ò¸ë&¸í>éd´6L~bØ®ŸìÙš,’'ß(zWoÅÎù2ážkjÉîaÓ.cšFDÏBk¶kXã#—5ézMâËáćp9‹šáô}ûWQ»å`ªNÚîü)áæÒ&nfô5ÛÄŒòÏzÉ×ÄKc)¯Ý5ç~ e}Rå—Œ?õ«¾3ÓÒ[”œÈ¡àv®V?´vÌ·;xèúб6ˆÓÆ<Ð{Ö‘»êÊó•vng¥nx‚[m:ÂY•BÀ=óMðIŠM<ÎÊ ’dæ·â%”¨‘K÷\óWaˆMYÀSÐU˜í¶°`ݪɹÏÖª²!ä‘Å1¢PFË×q¯2ñY1xŠÔ¨ß^‡§¶m#°®^Ý;+`¨êOj™–5SŒLw¡ ¤;U¤;pFqïQ†;@kUs%³ps\G…Îuë€ èk´»²3@#$î=H¬HüâêÍ’~ñ4¶ÞŠ w8ÜÄœf¥ŸÁö²°•‹dŸÊµl,¡´VµO™vô5‡{á¨e¼ócùEV_£\gqúŠ»7‡ Ž<ñšm†‰ «²± `Ò“UÑc™Æ+ã–¤Òô(a¹ήW‘šè£ ¤Îy K«2Ɇynsri_/•÷TžNj¶£áå¸XÂä㌃š’O,Zw”šm†„°ÀÊ¿uºæ²î4W†w0¸Á­¯ XɦVmÌ;W_ç ŽU†qÐ×7©iú†Yø”äæ²¡ðýØd¦>Qàc½Y¼ðêv¼ Ö|~»`#g>^z{VðÙŠÕ¡Šîêk9|5-ŽæIišv‡,s4ûðXæž¾”Ý‹¯0õÍ:óÃ{:’ÄzÕ¿øF$þÏòÉçò5§†¦´¶h„™ÈÏxI­C\ Ž[°®nãL·Èf‚ƒ÷€¢=8ý©>É¿vs^·áèå‡O‰'Ér3Z“fHŽ$ÿ*ãõŸyî. gê¼ZÍìÐÍ{&õL£½M®h·Z„bd*8Ÿám#P³”«Kº5à-u†9VLŸzK›ušÕãe y®*×Âwß»Á.#cœ 5ÿ ]]Ëd£Š.|3sy£¢y¬F úÖ¦›áÉ!ÐÍ´ä¶W€k*O ÝÁˆ yYçÚºO‹Mʳ7$ÖͶrà Íp^ Ô¼«æ€««#CÑú›NydäîeÓƒE³$®0A®rãÃW–óbÐä1ÎßAW“\X°có°è}k._ßIÀ6¨•vÛCÔ­ahÁ9EÂàõ¦øgDÔàÔÚf] ¶\šôÛCåÂ¥öî>•(˜‰‰È#§¥rÞ0Šòê×Ë´|nëšä<9áíVÆéäÛÁäšÜñ&‡w¨ÁEê3Œõ¬ïxnc|./Pü«^/Ó/®æí_*‡¦zVg‡4MN-M..›ä9­ÏÙ\_iÂ(¹9éKá‹ »5as‚åUšÇS> oýÑnG¨®Öß  À«°Ï¹‚¸õ©@‘dc“Ž*¾ÿÞŽòÄ‘À¯8ñkùšý Ü¤zzæ»›‹TØ8+HÌRpÝœŠ`S'ÌzðjQÊSpùO­SšòD”(Ý·¥<΢=ª¿SšÉÔÃý™Ïb pþÜ5éJžõ߃:±,xõ¨ÒêEe=O4ß´+ÞÉõÉíZ±˜ãQ™ÈïY“/•$—”c׊¸ñ$Q©ŒºœäTÚo‰mÜ2¼ËŸJö¼2Jì%AÍ%žµk<†8wf´Íǘ nƒŒúÔ0Iå’_8>ªÌ¢.NFsÉ©|§ÈܤÔs$r•ojŽL$a—Q‹¤dã Š«-Ç—¸ö¥¶Ùxçîôâ­éð®6‘ÇCOº›eæÄ.y昼²œv«!•S-Ž:TO*J»~\çš°LpBdb¡”qLŽá/#,d ðk:UþFùô©à…F>Ãæ4шÔ÷µAg$Æ0qÞ¬E,±ÄD€d~µšYãëSÙ])V·A*á%™£R»»Ô¶öÖÖß¼TRyã©êåT‘ÏjÑ·™ãÔt©Œi+a˜pJSlÂ5a·éUoc’<¢¥]Ó¡ò Ù9«’Ja·ŒõªSNbW•Í5o"K…ãŒt¤–úßÎØH,O ªc'w<˜©à2/UÀ#Ь·"UdR¦¥ó ŒX ŽrjËÞ¤ÑGSX×Zm­äÁ¤…XŽõ~ÞÊÖ@EEÇaRB9ÀR3Jû]àqŒ»jëåàJŒ”gd £i¤•40MGÌ1·Fïá©b¿U¸*Ãä*v• ‡/‘¦* ’²)É1Á5 R¬hXu1ÀHÙØõÅG$‰Bsž)“2“–ri#U …xV§HˆÒp:µ Q ‘ŸJt–±+nÈöæ™3 $aíE­Â°!Éõ5q\„ ÀdöÍW_3³éN•Ï”HåZóo+7ˆm“%¸®Ê)^(#Ltæ³ ædÆ@ëM¹•ƒnQ…n†¥„ªîÀГLP>Òàž¹ªŽáüäôÍUÕ'ÿB!°2§ÀhÃ\•Ôd®ñæ•ÆðGÒš²fe 8#µ$Š«u¹N¾jÓÜ©]¥±ŽõGT¸/¥Èª~l^{™$«$¸c8ªz]³Ïvñ«zÓµ³š¹£‘ˆãB+ƒ§jÇ$Œ•ÒXø£Í›É`Oz½¨kÛ¨“ÌgµN$³ÏËž+~ö‘Täm'µ:ME•ÈFÊŽ0i·º”6¶ßø†y®AüJ|Üʵ4ú·›mæH=ª¥¯‰ »p÷­{/¼Ä0ãëO“Äëç± ½»š»¦ø–+Œ©À=Å6ë_‚;°xõªÉâkv—,¥sUußn£Œ’cÃ×Âx¼½Ä~u±qy)‚yilµ±á¿J£«ø‰aq9=öõª¶Þ'¸RBã·zžO¦öO¼qOÓµ¨î]ÒSV[‘Ã7ZeŸˆ³jJ´w©ìÉý¡#9Æ+¢¸hâ-)8⹋­T— [•H5(ü¿Î“V¸w•W'o§½A‰S÷G¨®ãO¹#ODƒO)3¾[€y$V?ˆ¦˜[ˆÁùG¹è v·Ü¬1ß5rÁ‹[º¶ ƒY×*¢bcè{Vþ›ä}€€Ê95—穸‘ÓµI£Ý¹·I¥7:˜ ß%jÝØÂbWGsU5ˆ¢0ÄÉŽÙ"·tAoºÎ†*kؤyNOCŠcΑBc”¨È>µÌÃ0¹Õ$7 ß½ˆ¢¼2«®ÜðU ×.ÑŒûÕ"å£Ô71ëÔVçˆeŽâаã¬Ý ¡ÓeÞØôªúX&ý°ç¯j/ätÔFKsÍ?Oœ¥èb6·Qš¯us4Ú”Ž~c»‘ZþšêÛRŽEUúŠõh¥ÿCó­2âiÛ~:ƒÅy•ÍÌ·šÛ¤äíSÀ5WTÄ¡ˆ`ƒÚ®ë ³è±Êÿ|óZž °ˆB.YFà8ÍwM2±PØàäg¡§N{YKŒ(Jò»ha>#–6.Mtúø¶þÅ“l¼ŒW §ÛG-›ÈïŒg´|5|b¸™7€tªºž¡5þ¢ÈK»Ïa¨Fà:®k×4›¦º±l˜Ü2iÅ\1g#å^!âÖŸ’èåSèw"m@ႆäô¡ôø›Ä›\¹Îk¢×LqiÂ8§ ¡yÁ®.KäHH'?xê4[Ç—K`í•#¡<×4Q¤ÖÌJHö5bõd²Ô"DóÅhjQ=œöÓ¤‡.FáéSøÓã“' æ°l- ¶^hfÏ&¯Yj³ >]Í÷F²-îæIVrOCé[š6£qn$bXª ŒÕ‹I%ׯ,¤~Uªš™iâ-¡°TÕÍUžMYav;3Ú•f¹‡QƒìÅ‚¯K²ÞÑ„“©Íq^/d]zÑóžk¢ŠÀ›w¬q3Bû¸ÜÃíUc¥•›œæ¤¹ˆ©$óÓÒž²ÇåùKÔ÷¥•¨Vn; ÅÕ7%»ê3šæ´7Ρ#wÍu±a Ø=p*KIUò& (8ùß÷¤DÀëJdb¨ûAõ§\|Ñ“àÐW©ÚÍ&îXsÒ©Úi³Dà«ÏZÛ¸`Ö`r s?gu˜¾ìTñÙåY dŠuÝ©˜ŒuûK % òŠß·M¥"Ï´^tTe²® 7|üŽ•…%œ°±E'i5"ںDZ;Ô1hóI¿pâ®ZiSBÅKü‡ŒQ†Ò;ùlæ’=¡™I“ƒÖ¬Üh áã$>j¹µ¹;c‘ò«:x’RxŽit}>çí;w«ÈÍt°`*ïSɬûÆGˆïNëX JÒÃÔÓmìYÝ|ÑøT—jÑ`±éQŤ\$ ©5§qhÿÙþ\Œ w¬xí.¢#t«Z-…м2c޵z}åo^uÝÏ5§¥ø}ä¹ó§]µCSÑfƒRÝnƒw­ L•/7Ü“…< ô ˆá6çÆH˲"¬ã^y­iLuv–¼Oj¯,÷9¹$9§ëšsK [¹U†Åý¤¢"§gÝÅz"ì¸b2ŽiÊÛ-Z2F¯zó«ÝéµgžØ™³š~«azúh{1þ,Ö]†›t¶²&Ѷ­èÚ%Ìw¤¸Ò§Õ4)-®LЯz‡ìW¬¢TØ=k·±Ž[%p=ªÊÇ,«ænäµçך5ÕÞ¥<»A“Í.Ÿ¤\%à|¦;Ó¯4›Ã¨™£'w|ö¦Þé—·sÈïY«¢\ÜG·hzV†Ÿ¦Þ¤%aŽ¢¡·Ò®â¿34lW±5ì3jö©­ û[ëă1*3I¬\ÈÚrÛÌ…JàdÖU‘¸ŽDRÊx­7J)¦Ì³ 3Ž3YöV2YÎß»Þ§Ž•»šïm)|.ñÐV]œWv êˆÄã&—ØÖüé!8n¹­kEi¥K¨£ËŽÕcI²º’æ#,xTäñ]´á¡Uùp1^âøökvnqŸJÛ¶ÜÂAæ³çæq“ØTVÓ,YRyïWÈYe ‚9ª›ãü¤ØTžaNžµ•¯°1ÈÁÈi$ý¥öœsÖºO´¿\pß+J"-žrvÕ¦ºO8`¦­¥Â¬À¯(G¦ik~SéP]Ø„‘‚:æ²m¢ùÝrsګ܉BA$œT®!Så0ê(…e]ª2wTæ' Œ¹ëJ…£p hÀ|ÂŒ¼Žõrà„o_J£5áA´ƒš¥9YW!ˆõ£YâDÆAjѳ ã+Þ¬¼gxqÔÓü£¹G›q¾V¯õ•"#>px“TX4±< ²$ÄŠ~SÚ¬Û¹Œ6×<{Ô ÞØ-¸uªW—*`æ³#¸vŽÕz'mÄÍM+nàžÕ¥mnárPäóO¸8%dàc§½Wó#™@'Š¿¤Ïr äúVôG8<.ÒjÃ0B±®05•;fàíRÀ Ô¶q¹¼Wù¶±ÎÚëÖd ¹}ª­åÆØFvî&°ž×!ɳš‚án~åºÒKuȨ p:𻥬.­!ŒnSÖ´âTóŒ«&ãééSÎÛ­‡ô¬˜yÍÿYߎ•<–¹"\1<ŠË–ÀÆæ1íWlV8ãÔñVåû<ã„éÞ«ÃonÓ 7ò j:(áHÀçð¥RÆ fO†Rp6·>梃gÚHòÆ;qÒ¥xSí<Í2òܺ|ª¸¥d:y2.á·žqVá]ä¬Xç­[XŠŒ²©ÀâªIl© “Ë_Ÿ­Z‰£É0@k\ÓàºPCl$Ô:v˜–ÖçžG úÖä6ÑÍrØã‘Ú«½¼m&(QÞˆ¦RÛ ƒÂ¤E‰ 6ÀA8,&œ6œô«­:ÈͰëÓÒ®ÚïfÐGn:Õ™gÚ»_Œpy§‰îM~ Ç 3]¤Æ;HÈ w¨Ü)‰Nܓҩ%+†õÍ_„7“&æ#Tʱù×9ÈÍYyºŒU-dæÕÀµrz4n÷m:‘Z—,ÑDÁ‰+íX–Mĸþ5+j›eœàÖ–¬“Î#«¢Š"ñ–&¤¹/£GŒ6+š{†‰D¬>ÕšÚ¾çÁìr}éËÎWÍK%ÊÄ–е`Ï×Z†ïPccW´;×|FOº)PF‹&AÍPºE”‚±ªóB±[àýã\Ú» ݪK.zVÕ®ª°NT’éWn5¨Ö»vIëU†«–9ëV­/Õ£f-‘Š£.®cf Ýi!ÔUß$ƒžÆ™>¨© ŒqÅ=õ•ˆ!VÉ¥:Ê8f#޵Rk•’0YðµQn•9ÎEjXL’U‰Ím¢9”'"µ¢SØaGµSÔ”HFÄïÔÖeÔF8Ù”c°-¯¦Šû íŒô®çKÕ-¤hаvõ«Z¾«“mg_›‘Š£ýµj€<’(ܽ+CNÕüÛ9Uv§z†/ ‹ó}ÀxÅmÒAÀÄÖÔWÑjJû÷GZ—²B¤&+ˆ×uVdŽ3·“Z°ëMg¤`·ÌGÖ­øc]id++o-ÐWn©=¾â$qY‘Û„½’\£կâ‚,ŒWh¬$ñ%µÈÉ‚8&£þÛ´ÎÈæ,}*hu‹t}.æ­NPœ<‚{Ô«­ÁvFÉp»Ö²ßA §œìÑëX§Zµ¹@¥6ìäóR¬o+Œð{æ’C%¼»ääÿ [kÄ1†pc¹ÛíF¦˜–ì©´ÍLH =q[Ö‘ ŽàN^qL;˜R¤õ5 å¢å¨Ã_êÓLCŸ”·©ë[Á(næ´¡ÕÖ 0<¸É^¢³ìuƺÜ'8¢¼ÕŽÐ\cœ[P\¼Úvô?62sÖZÅÁÖDRŸ”7Jê„Éð”ªÃ¹­½3TG™þ`TtÅ_¸KžŸ0â¼ÇÄ“[ˆ÷݃šßY8QJ犷å£/ÞÜ}j›¬q†rs!ãf(Œž8ïMKTX¹^ßÊ sÓڪ뱳ÙŒqÜŠå|„ô©nìœ.üU)È *ò¢¥µÿH•#+Çz½¨Û¬PP9›(`-“œw«z;ägW[o2ÈiS޵y® !càgœ÷«’B ( ÷j«©ÁDQÍÖ¸IàÚ{:éV.‹Xψœäw§ëSË8Üœâ‰v”Ÿ™EnèdÑZ2ä15™£éÏw¬ÈðòI¯@¶³deŒH ^µ4Öy”w(©¥³+@@½kÎü[j‘^!ÇJmü 4¡ìjx6Î1Êʤç½z R,váU€ö«PÁ ;²ç>õÎëºi¸ã-§½y¶Ã§ßK §åϪÚÈa¿Þá¶Á5½e¦›»Ÿ9²S Õ]]™nU7•E=*¢^y7È"vÚHÍnø‚ú_°B‘HGû×9oq›˜—%9ç­zÞ–ªÑƪz¨àÕ»ËE—°Êô¬ýBÀù á¶€2+Î.\5ü†WÉ'©´©k!T§°¯PµŽ'€;H¨åHÀ,7f¤¹,ŒG"¼»Yƒwˆü±ò®F*?Û²IÆ0*ÝÍ»¾Š™<ÍA ieã2)ü ÔÑxbYuëØÔ¶z [^ &Bq]Eº¢6Ü(ïRÞÉF#9íX÷vfâ#ƒJÅÒ´»›=Y¦IîÈ"¢½Ò..50èNqŽ•fûGCQ‡Qɪ1è·²ýÚ[­ ¾Ï±:/Z­e¦Kê„WiiJ¹ãš¹và 7Nk=Ø}ŽÐ\ðIÆÞh³ÍrdP94ÔÐîÒà”^œÖ•î•y<(sÇ5:ÊڔƥÒtwPñʸõ¥›A¸Šãýˆ|;2Ýœ Ýkb]-d³td8¬K-ªI½y÷©4­â½geàô£XÓ^HòƒæÎ+(iS-·–F™,”œdu­oYË$ήI®ºÞ Ë…Úœ ˜ÛªaÁÜ\šŠú$Øä®"ûLš;ó4jN9â§:uÅã¡‘qŽEj_èO§¦ÔùÇzÇ}2þk_ FNjßдy£· 4ek<Û\i:œÅ#$»`b»Ë$*óŒ6+^2Çx=jÝâí³;tÆkËuý6úîûîîðEh¾“-Δ#hÈ`:æ«hÚv§ ÒÀ ª¦½2 0mã&á€Ç½Om3sQ]ASÆænµçú÷†&¹½Y¡žx¨µ/ ·ØâòS÷ƒƒZúFö–3ýó\®µ¤]h—OŸ'µB¾Ô&™"äsнsáýBO(²zqQÍáû†¸Œ }¿0ËW{§Ûå­ÕÆÍ¹îMH› —ojÔ+n®J÷«¢ç÷ŒÀqØU•™]+Éê* æ ÿ7Ò«Oz‘ãwÝÕz¼ìßwÐdT3”2쪳 eP\Ä÷«)å¯)€qZvöêbS6ÜÅ6æWBœ÷£KeA…n˜ š·aŽþHª³#©Û·*i!µŠä]Ų :ÅNìÇ\V¡T[`Ž:µ˜–ÌnKax?GwÈX(ïšÅÔlVFÂ…'ÚˆìTÚ t^&¬¤BˆölaK”L…¼¥-×8ªárë*¯Êj¼Öñ%¹1 Á<‘U Ó’æ\2 v5u´(óe¥g§Ãn£äËóÚ¤xye'tÍyÏŠƒ®³S–•ÐiÖ}•]Æ óÍ1YÓ;Û9àU«vn(Èlæžµ§i®G9s“V¯õÖ™FíŽ ciwr4Ï—8>õÜHº ·.qÍu?ÚqY:ÊqÈéïNMv˜Ã9Í\/æ¨aÉ"¯Ø\ÆËߥIyqånvù{Ö4ž#iU“Œõ¥‚ñ. ßÒ{šåõ­VO;ÊG8©ZÞO2ÍtZ/ˆ$pË+å [×:âCå™H\ ¢5ËyæÂ0wõ§¾¹¸ ì¹ïQ®¿j_i`úVüjÖÁÓGz£p$¸bÃ!GsUæ»kM¬ßuGÞª—zô Û/JÏ}R9#x#½-¾³Ê©QYš®©'œ66=1R[_³Ãó1'ÖªÝßÊÍ…SèÚ”é;'V‰ñ$°\$ÀW,ü@dŸ>häÕýGRù|Ó(*GoZÅÑu™$¾‘¥m=*Χ¬í™•$Ç84ؼDaLäb ÕõÛ¥òü·ÂâµôŸ$vJ“1ósWæÖ€J*y5ËÏâW“Q*¬Bfº›MKβ·u­=.I˜äídþU¨÷Û«È̼ujÍ_ZùÇ÷ÀèZ§7‰à–F"T'ß­dÝx H|°ÀžœW3u¬ßÚÞ‚d g€+¥±ñOï”Ç9«ø=À/&yàf¬>¿ok³|£9«qøŒÝGº'Î:ÕµÖRH2dêK}Mdæ&¶b`Fâ@õ“ËûÃ’6ãŽk>ëP[Q½˜_zÏ_A,»7¨í“Ò·íïâC›+J>wv\Ÿá©R|Æv6O}Õ5äI)iœUY¶ ´È¤v$š¤1¶ ©Ó¥ ®FË 15+y2•ŸÎ³5=M#·q þ‚±ô/M>¦°±Â×aý¦È-ÎãNãFYÉ$V„3yñÆHê+ñ£xŽ& Î+£žþ!*­Ð`ÕV@Î~SÒµ`òÌ!•y¨nÐL°8>•f xmáèA+Þ²n$T“stÍdk?é®Ä¸àW5áÈ•ï\v·u;Au(L×ÖÏk+©QϪ˜Ú¾aÔt­Í.ÁHûK®j¥­‘ç€Aæ«MŠã¯sVá‹ÍÓËnÉQÒ«iªÞs…ëI(1êpïI{pÍrÌTtÈZAuR@'‘]ý¬‘ˆ‘º½*ì.‘€ñ‘œçGÄWe¬Èȇ­qBl[0UϹ«š ­µ÷6íUu¡^àÖ£XÂ4µ}¼•ÍVÐm¡`ó;|Êx[Z¹’K¡'ž*€2Æá”0÷«ŒÍNîù«6ºL“B’nÆ}ëºÓò¶1‡o™é†èo`H€Q«Ãºy%°vמÚ@f¹xóÀÏ5•!¹’' M‰Z+§9©ï d äSÛ1Y$S-áßv‘Ö¥Ó‰\ç&¢ÔSkƒÐŸzcal·¯Zß´®´¬»j–šf¿º8ª2ϾåÌŒp{’ÆÙ®.?&F9­]z11 ãV{Z˜m–@IÈ­K |Û²1Y–vBïT1)Èšô ?NH-Ìx-Ú¶lØÛÛÛ´úÓ/låžÝ£í' טê0Kaª´%›"«ÂÒ¥ÙNÖ­]?N7WfDÉU=*ŸˆÓj Gj¨‘K¾òH=«RÚv{L_,b5Ä—.w1'¨­MÜ,SrÀKe=åÌïv kW×·ê/p3€kÒà %š7.îi|í½‰ÀàJå|`Æ;B±1ÿq9T³ÞŒ™äæ½ ÁÏ>ž<ÆÎÃÞº¹¤„…9ùI¥xÔÅÀ Æs^kãfÌnBz æ¢s,°…•ƒw«ÚÈ–3I[ÞŸ¨ù©¦DÊÄ1óUluaÓ™‹Ý…6ÒÞóQŠK‚ì;Òø~9Ulƒ¸u®†ïSŽÍ²êK`Ôºf©é/Ï]U“3¡aÀÆÖ¸}}ŸþNÒ9àŽõ5ð¹2¨€+[Ë—væ<kkO@a%Ï'µHð*brGcTîn|¹8CÓÞºF+nÍ9¹ÞW½O{oq&ÐGjäl³Z•uè*ªÚ\/î•0 Æi«cqk!êAëŠeÌK(P¹©ä¶˜Û#äqбfnã³1*gŽ”ËK[‹u’I"È<œVKÄòÎíŒ ð+GKYb½@FTu­]jÞâço—*:Q&‘{&š¬±qšv™¤Üy,¬¤Yâ+«AÙc;‰Åw>KŸ³nNj¹$ð»!@öª jÄŽI?=,ÒH„„t?•L¶yÔçŽsL¸X÷cnqH­q”Ú ŽÞl™r2Gj²ñ…UÿëÓÂJ2êË‘Q^É ±´Ÿ"’zVd±Blò±¡lòj¥²ýŽ7Äjźät¢x¥˜ü‹¸óÒ‹‹Qæ®WW“ PGqŠrY@î]>† –Ì*œ¨cÔÔA\óàUè¬ãʘ÷©¢ÒV˜)[‘N’ÒÞY‘ÔzÕVð¬|è§æì+ONðõ¤8 ˜qÜŽµv[;Tp8ëÈÅX>O’@`T÷ª@Íåò;ÖLVé-ß›"‚¬ÙÅu6Bãc·åǧµ„1ÇMé©Ì" g”sÅaJ¹ª“ZÁ†b€óÀÅ6ÚÚ¤ÂÄ£•i´äŒ‡òÔƒíMƒM„Ü™§N«ÑØí› © Õ§a9ù¢“%Øû\¶¬ùñò¥¸®ËyDPäf¹Å¹%~ldpmi»4iN}h²Fç 硪W+a€å‰Æc\Á‰—rü¹¬ÝobÂ\t+Ò°<7 3IÞº«‰¢Í!;}ë†Õoüæ*’U}cçɽ‹ƒ5½&ª-c»Ò¤´Öí°N@çš›PÖmD^BµRR‚#iƒg­túeÄ&"ã•=ªÂ,nÄ1Ϫ÷[òˆ¤=gÜ^Åk(Y)éOˆá# 'µ-Ö·ZÆÏß öÌOfe] Õ{mR´!ˆÜ9Í95›[s‚ÿ2úu«/¨Ã#Q\’_I¦U¤%®»O×mšßÊ–ô«1\혹û¢žÛn¥9Î#Rå<¢ÙÒŽÝrdÚUxµuiü¿48vML%´„IÐW­Ïspû…ŒWA£Í,–$HÀŒf§iH\`á½hGÝu¢ìÚ0}ëNö ¬oJË]R‘’FUÛÒŸ·œê{V›ÞC']¸#­dIªÚ¥Ø lu¥ô2!)ƒ“ùUóªÛ¢‚Σ Tþ)¤Þއ5e5ØB”2.Gj³i¬G4…|Å®Ä×W–r™FÚÇj½£ê‡û4M7ÌqÎjâë6eq½xv’Þâžøõ´íÀY<´rC Œö­¨e@ÿÏ­GvÎÜ1ùqž+ϼKyuc0’À$Ž)4­m¥<Çç¦Mu\E°ï`N95Ÿ.¥h²ÒŽõ/Ú-¤Rþh8äÞš5hÌc`ýjÞ™zŒê× ‚·íAß2:VUÛÆÓ¨äÆ~^ÔøuŽSõêüz”I 1sžqZöÓ£ÛäÛºU+‘¹¸ÇnG›5F×V¸MUmÖ}ÊÄÆkOÄþtQ%Äo³dUŸP¸ÒÅËJ@Qž;×[à½^k«2²eÂô®¨5 °Ï=*ËÆáY6q€ED±¨M­ßùÕ Já¬l¥`£<šòCP½Õ.ÜÀ€*=þÕ"Có(5µ&§q}©bxFúîâÇPXBAâªêæí6̲¶Ò*´×s‹(Ù\îîjxonæÓÕRVÈ<ŠÐµ–ý,dÌ€*…•î¡tÒD& /zÙðÄÍ©EiN…ЇT,@ž=äƒÞ·mµÜ) 7¥f_ß±vt”¶;TTb±î8Å[·¹ˆ’áTžù¬}m¼ÛI$P9éY¹s޵»«ÚE9‘IäŽõÌÍ¥LÊSòúÓtÝ"E™Á?-,ú+<#8«:UÑ—%pf“WÓîfeT皯qcpöj…yZÒÐVkX¶2àgjè%¼Ün|°Ý Ñ‚x&‰”¡fçBêhH®}j›Yâ8È5Zx\`õÁ«Ö³p3Š–P-¥2q\ýÆ’²ÎÒ`ç®*Å´Ëf›vez|Ò ö‘òžôäˆ8ã=+¥Ó­”ÛüÜ•äU¯p|½0i²¢$5^[¦+˜“K'PÍœžk°¶´HíÆ¨ÒÉ$pl÷©Œ{`P¾Þµ0[m,ЩcÓŠÒ³W‘´(üªÅ¨o8¬kÇS[’•kdWL7zÍ•\0=kæ ×q”®´ëmƒãŠlQ*!PF8ªvÖÖóܸeõÁ©.í¡ò¼¥+Ðâ¹¶ðë%Ã<-´Ò´4Ï ºß‰$;ÈäWo…»Dc—i`3Ȭéô[If´žâªÜÚ¢L#*6Š·iomq XÑ6¯^*î›o (D Kuµk]3í5Áéš…¼Â€îúÑ“€ÌJ‘ÓZâäÌ(Jç5RâÞÜàyJÄðr*ŒZ,kûª¹éSj¶Ð”îP@Ç#­d}ŠÚ/”*î½)Ò[§’>eÁ§éZéÆïZ²-`Š9ˆ î+:{H.•üÄùGB{ÕkGœþíFÑžõÓØé6ñN²,*§nzV´ä‰\ÓŠó+¸Ç‹UsÈ®ÍíXc8t¯Ó$ÒHêv‘Å%¾ßíäm&–ø¡ÔWhAíU‘š=‡'ùWc¢*> ïV|@ð[é²"¨ÜEsžßå¾ÔÉ­]×awBìÃڸؒO´9®×KˆyQî-ÇSS_ÝÁm#19èi–º²ÄUXÁ©aÖ y6)RzqVïnmRܳH¹8 g‡qªÛ”[rF&š—‘˜„€¨ŒÖ®£hØF‘r@ϵ?Sš;HŒèF1Á¬=3]/rÉ#œ•sQ»X`îcÔÕk^œG»9<×Qé*nSÔqVa™1É¡©U×ÎÞ±€H¨Y6ÈÎG^¾ÕÈxŠîâÚ|Äp™ëSiZ¸0/ ÞGzÕ7¢XKg8ý+™›[µ,7ÉœU-^êán Bš¿ÌãI“ŽõÃR\³,§µÐ Hu @’Çs¯Ë· íP-šIœ0ÚG±é>Sùˆ™®h¿òáæÂ+ž¼ùWwɤ¹’ܪê2:ª‡?:íÇÓ.ï%¶‰Ld~¯áýctdÌrOjèa’+ÙYFQŸ­aM¨²ëK +j-ŒêòF6õ¤»Ômà!ÍrÚ¶­q ê‘€Œr>•ÓYÞ[Ë`å]Å~é©,Ê\ãè"¶_,†RèjÕŒQÂNõç5£ …‡+ÉÎk*gT˜—j¥y,Þ9¬M_Uk;?25Ü?•Aáí]µ5ebr;Vä­oa6ñ½¸ät«w•4j_kU«ÛH í^=qKEmpà쯭Jí'œNÐËÒª}©'—dn6¨ä÷©n¡Fˆ3£©¦i²Aãr€Ü`ßD#V@3ž ZØ]àsJPŠ‚ ÅWd¤äÀÖ5Xì”á@Ú{׌^MSÀ Wygy©!Åç,¯!ÆkÖõO±^*¨Èb"·W÷Új0U¬{Rð\±óFænTTºÖ°l†èE_Ñd‡Q³çŒsš½m¤7.NÝÅqô­;i!‘op Z¹1¥“cïgŠóС|`ñ´×W¨_,R.=+ŽMÖÞ] î©S–Ê|â g‘Š¡6ƒk-éÂàöÍ?þëi_c ùzšÝ²Ó ²‹j À^ dxš5nÀsXþ!-œçwz¹­ÉµL|Œ×!§÷Ì¡€ô®¨\-µ¹ZÅžáo#`ON•_G‹š8=q“PÄ=SbžÏ4ºœÒ­Ò«9+è*¬p¼Ó…Œ¶ æ®ÞÛÉk–$8<ÕgŸiŒÆpF2ºkÏô½ZCʯ­ah¶~lźޯHË0Q¸ ÎÆØÔ ;Åvž¸–æ%IOƒ]‚G˜Dj3ŒsIr¨‘¨ÂîÞkE•={W#âäu‰IêzŠÃ‚ÎFÓšrÄ÷«šUÛµ¼ªÎ1·½eÂGö ç+žqZ:Þ6)¯Ø¤m¡–ÎH^”ß N ó3ƒ“ÒºøåŽr„0š´-üñû­,và ÃŽZŒª³Ë…éXí´—òø Î+Î]Z ¢’1úÔm+‰¾ñÚÖ•­¤·—‹Ÿšµuý=lôôCÃV-´æÜÈ®UG¡­Ï ÞÌÍ"1-Ûš¯¸Ûxˆ?)<æ§Ôõ™f¾KHj8ªÓÇuÚ(.àžôíz&XaÜFãÚ¨Ê.-àGótÞøH‹9^C’+®²”ÌÆ08^hµ¾ÀCÇSLhJ|ø0 s~&¼{m1Ùo kÌεw fiòG f¶-îZïE9¹Æy¦øjålí¥›xïM’îë]¹G#*¯?Z“OÖ.tÍD[Êå‡ARx“U¾[”LÁð3Nš]B 9/f(GOZ±♿²¢u1F+ßZ½¶o´4¹ßÔVž¥â[›‹‚È@<;U]?PºkÈ’9÷EzÄ;—OŒ˜ŒdV•»4Àº1“V-°‘·™´‘Њ¥s8åÆ Ï>Õä¾0Ô.¦š@€ùa"©x_Lš\]•Ï5¥.³{-ü‘«ˆÖ,àÖ÷…u‰5š J¸­sþ-£ÕâÇÝ-À«µåÕ¦™ð@¬Ëõ;”YãMÇùÖî³­ ¤’§Ï›wj—C·‡ Á…l|§Ö°,/ï—S–‡;†zÖ¯‡[P»Õ˜4Ÿ¹FÎk¿ž2ÖÌä“\Mæx­ðÙÛÚµµkQ,ÈCžùÁ¨n _)C’§¥J—Í*ù{y*//˸S·žæ•áÛq¼6­_W2`¨@æ°üUm=Èã<×=á«BöÒI»¿¬k–×%?v¼ãšå!Óî’à²ÏZ²Ö·ó¸<Öö ·Øˆa­fÿd^ÙJÉçvj¤V0_ù²§Ö©ßFÓ]¶ÚŠ4N œœÖÕõÅÕœl$ž¢¨Ï¦Ü´@ˆ¶ªþµ©iÄöL’.Ü ©aoum# dõ­;í[Ë3¤^¦³"ÓîY6x]~…`Öv€('5У¬p¬ÇҫɱŸ{9é cO9 I¯>•ÎøŽI®Â*.TzÏÌ˦ù[HÆ*xe†Ò@PŒŽ¤Öu¼rµÐ!NsZwÐÊʈ#%½êütÓ B,69ÅC¦o‚Ú]èyÎ YÑu9é£b€Mt«zÛÕKôàÖœ.L;òyÍ9nÌêø.V©ËÜ#ÙÈâ¸}gH™gÞ “š‚m)ÖÑ[çœWAá{#åî`ZAëGŠc–X¶,D¶{VU°eÓ$ŒÂÛ€«>FI\27<ÕkâÏ®–Øp§j k}Ò®UjÜ‚´"}žÒwÏjÂÖ世äDÈr§µO}ÒX*ˆ‰8â·<$.#„¬ŠU{W{cl-ä2’pFqZиœ2Ÿ©¦L¼ì!¶×#ãd+¦~í: óCg œüéZ‰e$:'9É£ÃðnµšC¹²9¤²GÒ¯dGBE:; 5=YeŽ"9ÍYñj¢crúUÕ•u -3&Ý[Ãè¹_¹ÕMaÜY[½ªÆ„¤=êÏöEÄ6ˆËŽE-¦žþ¶SÃå5ìVÍf¡¶‚$RM4‘ÈDj=(óäòwg’jœ¸v IÁê+‡ñZCƒƒYWÂW¢ =à—ÆqŠÊ$¸¼¹y·&:ïVü+$–’ÎÉ?tõˆ¯¦¼ºˆ< ¤5YÕÜWnI¶¼јqïžÕoÇW"(ÆOS<'uö2#¨à`çÖ¹¿ÚȺϟm† z§Zí<+§¬A¤wÁlõ­©KE¢ôÚy¯<…Âx×z±Íz¶(û[hÁéÅr-(Œ9òøõ¦Øê6’\ƒ~ðuzHQyÏb)¶‘ù®Vf\ã#b }ŠÙ¨ø¡Uì%Ú¿wµsÞP`vaòƒÈ­Û˜|ìäasjm#òŽå‘Q%¬{ÎWæSÉÅiC¤YR=VØ&b̘px⢛Mó¥ßÐv­a\é¼í”ÚAä÷¦C B— “‘׬ÊР  ªôÖCv¡B¹æ­=¢À‹¼QÁ¨¼Jß»Á犳lÁÖC…Í \1‡¥IÌ×%6€£ŠÐ”¨…FܽgÈI$`vÍfÜ\ ‚êÙè¨âTx·Áô«/¹Do-sß©\Û,ÌJ  Ó¶—süÈ8­Ae’(­jý‚Ö@ÂÞÕ‘}`¦ÜÇc Þ±­4d²/$ó0àUø&V’8UAnæºHW :ô¤š$Y­œã ¤lÇ21ÚÐÕyR)÷ŠpsTd¶MÁ¤L'aZzrC".½Æ*ÔÐÄðå£'©\Dñ.jXôø¡”„ˆ&:})ÇH´žC#€žzt¨®,í˜$b4m¦¯ÅeokòÑž§šÚU´×áÂsž•¤4¸ÄgÌPA8éW ÒáŠÜ¦ÐdH¨‚3€}jý³Å äsRNC.ñ“РȽ´Žñ@“ÇCX÷:-ˆe_%CsW¿³-$D1ŒÅh¶q»*¨ïL}ÎgÛµN;Õ¤Ó-lÿÕÆ6ã‚:×®hê‘|‘äWQám&"Ĉ¬ã¹Òj6ð\ÚùeWhãõÍÿÂ?`.™ü°ºV¼:|PI<.ET]²ÞnHÔm?6+v=±Cû¾r*(´§pM:æÕ|¿-N22Eg­¨w+š­¨h°^"Å*†¨íü?kfW˺f§Ù¹ó$Îyã­M‡íÄ‘DªÙ¨î´;3"ù«¶sPÝh“ÛyoàöoNÓ,ôòŠˆÈôëQjšT:„Ì&D9èS¸ÐÒ×Nk{H¶±Eehž¹ù·D¾Þ»t¶ŽP †¡}ª2õç “xØ’¼^˜±ì‰“8äúóÿf3Ç×®SE½¹]@È –ï]ž§¯ý–ÁC‡Jæ ñEÌs‚~éã5èz-Äw°,Øù°9ªþ !¬e85‡á5ÕþQÉ<Ö¶£}…g ·¯½flÛ²‚²ŽJKíbl̈ãq_B×â˜æ|á­Yõ´lI°0ç>´Øõ”¹Êêbª\O·wv!9¨¬n`†dËÒ¦ºÔ¢‚]®Ë’:UT¿P@YB«r(Öµ ƒ`¬§$w¬U•ѼÆÏ=ûV£êPJ#©n¤æ¦mB1")˜ ß±Ež2ã ëRÌ<è¶/UïY·o¥¡3 6jó»ÍNY.›gÝŠètÛÔkX÷œÓ’æ&@ÀÓÚ{u€0qžõM.̧Aó©’æHeÉ”|ç¥[:‹*üì¬;TBì9óöät=*í¸¶¸‹,Ê[µEŒA‹ªÀúÖ¼2¬våp9®gW×þÎê±É¸“ŠžmAäÓL±ÒšÃÓ¼C4·^L˜ ßšéò'Ø¡R;U¨Û bØç©«2kP|¤æµ-Œ’¢ãñÉ 8;½{UKçŽÞ6˪·Ö³T.›ÝsÛª²C!Æð,©æíV]á«•U ó ÷©t˘®YÔHôºŒñ[@$.^¹¬^—’ uòÇ Wµ[骑ߎ*¬WhŒ¼×îáªÓÉPãs“W^â4dõ®G[ñzÙNV,o5sÃ^ KðÌän­¨õK—GpW< »*A"äT¶© (å G5`ªÎ0ÿ5J`Чk“ǽJ7yycóW7s® ]S쥃r@ë]V™"Ïl~b9ïéZA?N{Ô7lwnDÇZ«‘Æ…äÆI¨ï¶”¬F= `j#·ÓY­¹»kCAñ°¯UþߎD\…ÇNõFâháI ¯­gÅ®[\ÊУ®áÚ³uG¦ãÍù³ÆkKGÔST·IÑŽ=+rß‘ÃÐPBä g=jXdŽv$òOLTwÆ»¶Œ‘Ø×œ[Há67`W¤+6ÅtëÄläû^˜ñ2üÀV.’~ͨɻwÄ‘É:Ç*}ÏjÅ’Í„) o—Ò½'ÂNWM‰Gn¤Òø’Fû,ÁAÆ>õføUöéÍ‚sš£â¸$’’z ä÷à*8`zV¥å–t•”¶F1RxjÍ4ÌáqЯ¯^È÷þR¶@êESŽi-Ý^&z±¨ê“Õ¼9ª‘]M&`MXÕåíã¸$óÔÓÅ”©§Euæ6qÀ­n…ö†UÇΙù³Yz` ®zõ¨na–Îñ³yg½YX$¾»A œµè6²éÖ€í¿¡zËÌžR²«Xþ*µymJÆü(5çºm˜¹¸`ÇMO¨E%¥ÊœŒöÍKoà”3–y<æ žîââí¢FÀO\éÓ¦æ$7Z±¬O0 2H@# ª¬÷Ïf&2½©Ñ\]Ý@U]€^õ«á˹e™ rHQšë"Œ¾J’rH¥¸ÝöG›kÌïã™uŒÍ׊ëôÈ%M>a'åë\‰W›ˆÛ«V’Ü]ØÞ$fRCÊ·5}iíì+ÄW05‡a3L}q^à½Sí¶Ywù—Žk£dÞùÜ:×7âkK‡‰„m†í^x·w¢ôÃ,åJç½Úµã_4bw#>µ­§M¨Ýj$,ÌO4ïk7_iû2LËŽ ª^±w§Þ¡33<óW|U¯\»¬jJ©È5‘ ß\%ꑆO5ÄŸj—Tˆ™ ÞF=«¾ðÞ4v!n¤,Hܾթwf‘Ƙ$¯ozÌÕåìLq£Iâ¼Å¬î.µ“n{z“[ÓØ^è–bX›üXªÖwºäfT$·S]Æ¿ua£ ”8ô¨ó[6fì»m8 JÕMfæãÃÆx[21ߊçíuÍ[Ri¡Áç¥v.³q{¤Î¤,`©5Â[[_j>'t.w«rkÕt§{Y>ÌØ$“[2€éÜF U½¹[K¸fPsšóy|E©ê×oökÞ¯éþ šw{+·Ì pzãµÕ¼›ÄBÜ@U¯Lð¦‚,4ýÏ´JG8®‘!'÷g kšñÓÙI$RcnqŠóMK÷ÖX+e³ÎOZëüYeöÊÃŽMsZ^§ªZØh–1’;W]áÏ»Àí*;ºá5KTñµÅýܶ¶ƒ`^rÝkCž"šæãì²·ïTu®Òi$ŽØ»aŸñ^}a¶É#ðØäW¥!;zò?K‚ÒvŽù¡¼=k<åÕBóÎ*ìúU©ÓZ#3–šæSDW–=˜d'¥uV0}™6Æ…\b©k²¸Óä,¿{µgø_ÙìÄð"«ëö×7H¦Åwp+,i³Î-m–ÇÞô­ ´™¿³Và1Y–V×¶ÿ¸‘µ¹&¥ÔôI—ý#i>¹¦ÅÅölgøˆ©u-G¶ŽHнMU†Õä+Û|ÃŒš—]í4¨ÒBÏJÍŠòâ]9-öåzZpi³Úigjny3À¬ë yàsæÆTf¨IÜXï/ÑøOHdDžA·#­v¾ZÉnå›$tÆj…½ÎnXlÚ¡y9¬~襱òÆåÁ® Oy¡».ˆ-Ú®jle¾‰ü·bºˆ‡Ûl— ä%¶–ËRv‘\Ô’$ÚƒD"SÇSNÖÒ8àÚIQÍL›[FòʶìqTô÷hmäFFÝÚŸ¡É,wìQ[{qÁé^‰eÉŒ¯-ÔµYž@'â¸OXý›SŠE\ã’+JÒöYìßlGj­rГý¦ï"gRê34—hËOZ¿§Oyb’ª“Ç YðBˆ‹‘°`+¿ðE¿‘»ÄÁC]©‰6ÀFòÍ®ö»7v¯0ñf˜`ÔU VœYréwÞT¡ó]÷†´§ŠÇÍ‘@få³Ö°•«saéD<áÏ+2ô]'ï‘Ò©Íy-ï[ú~¦Òm’_”c[fd¹€Ù$ÖuÙ!ã_™SLÓ$„4’ü¬z ßXÄÑ„p2¨RÛ†©ô«PF!Œ4öÏp‰å§Ü9ÍXP-´¬¬÷¿Gbˆr:ƒDwò£9ÞéZ6H³Ü3ÀϬݢ[¹*¹¦Û8œodÀô§˜ Hde{VV§¨Ã`ÎîTqÔW;mã%»¿À7'ºöxã(å°Ät§›ˆåŒ äö©`ÛÂNñ»= RkèÞv òöÍM4QË`‰ª²éÉ'1䑃R[¬vî±’wŸ¥tIË$ eÔ˜ˆc½Ml߸ăœgšM ˆ¯Õx¶“†ÏÍÞ¬*#©úâ“rB²z®÷~sâ%ïúU;©p˸`†Æ]²™Œô©n&J àö©N;zõÅVó•Ô¶Áœàæ‘–8bÈèMUY"bXzâ°µ»…U žµvÞâ;kbÓH£8­(ïmæ‡äpHî*¥Ã«Î»[æ­kÇ6Ûpyd±ªé©G!uñÖ¸[ R/^>wq[º–±öcüÀôæ×ºÓEzÉÜç‚)‘øŽxEp»Al¥•Xt¯C³š6·òÎÒã’qQ<1¤Ó‰è*È%°ûpO£– ª]±Ç#ÙȃåÉ#½TkEòÛ T㚯mc´³ÊËÜ÷©N¬¨ŠÜsí^{¨F§Ä ƒ¦î•·®%Å®Ÿ±|€zVTZ†¨Úw«Ô×Aá-IõËp~„×W<%å*Hè)œ²#‘ƒÐOŽPŒ\y«Ð)™‚tÏÒ¯ ‘b!F ޵æz߈5 JHíE8ÍgZkSµç‘+8W¤iãÌ´ˆˆòûy­˜` ‡® 6áZE ‚y$lBa;f›päGµ?:óO›È»~ï=k3ÂÚT“¼w´*óÖ­êšýÝÞ¨míßjÇiú^«wæ<>fYySBx‡R{ׂWÆ+2mwQmHÃæt5xjÚÅÅÊÛFÄâ½AµºàÜ?%y«âÅŒ›ŠÏÖ„hÉV ¯ojœ[ùÙb8¥bë÷w:nšÓÄ>aŸÊ¸k/jSÛÉ2&výãéW,¼eyu òЗNµ»á϶ f[€ˆyô¬ÝoÄ×j"ÊËÿ*5ëÍ6ê8ïøßÐÓêcx#48F!w‚;LÙ™~WÚj©~ÊØ NI䊬w4Eœ´Árm,ä=F;õ¯<½¼ë«:Œ(5¹¯ß‹­1g$`TìdxôŒƒÈ=jß‚¾IÛ+Ïc]ÊÊÁ¾|O¶ÐȃniÑE™rH5j"c‘FqëW¯cxt×’5ˆÈúWŽÝÞ»ë2ùÿ» àVD,SQó¶ÀxÏzõíâ[«hÙ~Mª:÷®’9Uy„neClç½[8Èð*»Ä…™ëžõÃ|@’$Ó„LCHOLVG„ï"[#wÏéTVÀC¬É=ê²ÆÄó[ZM”j­Ó)ŽMeø¿O›OÔxø¬»½êÞÞ-DîÜü×gá &Go'\—Áæ½ *¤aQT`rhY:œŒÅA,’©Ù€Pœ†nÔ4-渷ðÖ‹æUÑç8˜Jóï ] ä¶:žÕcÁ© ¦QÓ8"“ÃÒ ×ocßç V¬ôé4ÿ›‹…;ðÝhñ@[ûëxà%˜áªÞ2‹ËÓìã%w n­Ìð‹¢.Ñ•¶Û§ƒÙö®îÞ´ß4Òø~æ(ó¸ƒÀë\î¢<³H&}­»¡ë]N‰b–&å’vóŠÇÒ"ŠMnu‘(l®jGlž$‹ 7OJèü[¶©8ÞŒ9ö¥ðåå½¶vÈé\½ÍªÞêrË…y8=ë¬ð1š»…|c¹Û:oÊ{+’Ð?á$»€ ®ÎòÌ]'PsŠóMgB󘕀+7VvŸáÈÒãt˸û×Kk§íaTô«¿gäÚ1ɠÖ.ÇÀ¹ºsà1@qŠ<$Ñÿe®N:Vì‘Á#0dU’Ò×Î(Uõ$ñu]ª@<æ¥ò­[rÐU>Þ(É †Æs޵›¬[­ËœÆ«Žµ›q§ÂÚr…EzV-œ1Arc* þuÖépÚ· Ÿ©ÙCäo\ž•eJrȪGJ«{R]‚ÈîäU›{A&%El{U‘¦BÈØA·[؃`ÏlSÖa½Xîêi²¶È÷2g=ª®‹;wcšHíþÉ n!‰ëëYQD÷-%¹ øÔ+áËP~dRÙ­?ì‹gA¬1€}*A¥ZAo°Â…OØlìíî@OR*ö²ãœ˜'³W‘W:Õ•…e|0Wõ­Y /fc9é^U­é1K®m cŽ+A<+kòíAÁæ» *Ö8`Ù´b¯Cåí~›¨,~s£ó¨‘Ýä\ƒÐµ|¨f J‚=z×7®é¶÷¿ë£W|üµWGðÕµ­ÉtŒu«úž—o0dò“4û +k UUÏïIske©°Žd´ñIw¦[ʉnÊ6&2¾Õ«go”J±*í*k‹¬)'åúU[+¢dØAÇó­1Àr8Ë™`Î=*–§§ NÝâ”uªv²ƒN6ûAÝÔŠ-<+gi˜”Ü)4ï YZêr&_9lÖ½þ“muGŒ`1Yöž´‚q.ÅcïPk>µÔn¤PqØÖUß„m°„(9àqÒ§‹ÂQ.œmÎJ µsDðÔZpu xÅAá‹iegT+ÎN hÙøvÕ-Žå_˜uÏZÊ“Âv¶÷-4Qà‘œƒXÒønÝîÌä3åÛŒv¦Ìä¡€ïS¡Ä.G‘Æ©‘Á8ǽsž,ž5ÒØ7ñexfli¡Tµ´÷pÅ"£ÉbjÜwvÈÀ—^SU§½ŠYË,€óÒ‡rdÊê*x/D2Î2M%ÔÑÈŠñÈ=yëY÷Wª¶¸ÏLV<2Gç†8-í[Vò¯-¸†u ×8 ¹@Íg 1V›ëÞ‘ÚEsÀòjÁš!‚¬¹Å[[—RЬ„0äU‰$ÓiÎÐ £s"*ãxã©Ol²ch}ë:è=eß´ÐÓíu8Ÿ>hÇ^Õj=YQ‡’ë·¡•zK…˜drÄdUPçï¸qTµ?¦™ò(<¯¡Ò|HÚ‰ò½k£@<¼n³DèåÜ9¨‚"ƒ"ri±Í+eúÖ.±â#`v:Xðj循·:ZÊ[o~ôA7ž„†\ã5J_Ç áµs }߈#Óö«“–õ­]7Q{ÄYG ǬêºÈÓ37ÊzZÏÓüWöû—D8À¢Ž]Eäv @ÝZ–rÈŘ‚x5«e(XØÉÏ8©Ißœe}É \,UŽAïÖ¯,±†FéÖ§’V(1·Þª“Û…ù±žâ™ÊÆ£o ÔÔwWQ6öÞ»ˆ¬{Ù÷À»˜’[eùºs[ºqº·¶igºcŽk)ïeŽFcšT¾»³¹I!Øzf¨ê÷wIv¤9Úz`Õs%庤åÈš¼oï¼…¸-…Ï<×G¾ë¤HÛÇ'Ö¹6Õ.®åcîÕˆu‹‹c±ÎTsUm/ï%™£±"®Yj·Pê")%fÇ5èö+ç[¯#=Iªz”DLWƒø³Y·š¤Öºc<ƒ\lڵܪYœŒtvÊùî-3¤p eÉ©]ÁpT6yãšÒ´ñì2 ‘¸-½Šx„êV6=k½µ¸šõ!‘xF¿p’2.X`ps\Þ»,öv²I–¸4ñUôŽð‘–š–ÃÅ7&BíAÅ\³ñÜ·Û@Ž*][Å’Gqä[à¶*ƃâi>Ð!¹8fïLñŠf¶ÕFáòôõNßÅ4ê =Zܼñ³[ªCoó:õ£ x¸j—ÞBÇ8õ®ÍÝc´íDs:@¤Žq\O‰<`úeòÛÅÉ<š‹Iñ„×—ÐÛ°Ú<Õ¿x¬ZÌÐ@Ûå=1Yº?ŠîãÔ;¨Ùwʯk~3šÇTáABJ«oãiZøG$Ec=­P×UŸ©ùy)µ>¡/›k ¢Æ1Zj«¢*¨°8©­­ãB(:ŽÕÏÇn!VÔî'šÓµ‰m­¤bƒæSH_ôÉ /u …þÖWØvç¥zeÈO ƒ’:U+ËõbAÆâ+YžOìÂ#A•Îk‘Ú$…%ðÕí.AB6NIÁöª· «ªp23ÅI‘$dc¯jÔº°¸Ôlàh¹ÀÆ XšdµÒ<‡ûê0TzÕàÝH ¤ô½«ö@ .gÜÔrí·é^iãkYF¡Œ…c¦júrnÚî©ê²!³Ž=¸#µ_’æÐ(ã¥ZðÄéý›"ô+X7—5±(É­=zíf°L}ãÖ§“|þNÈÍá‹I‘dÆpzÕ_*>¥)ÇCi5(â“Äh ü¹æº¹ì#k{xP¸÷5ÃÙÙŸí áŒ|œ[Z~–!ÔÔ ß•É>•Zâ8_Ä‹À#<ÕÿìW¶HÕGÌ•éÞŒ>ó?€~«27”W Œ×3­“2Hйɯ+Ìõ½2M:ùWQU.4éô먥ÚHsø×w¡è,’Eó¿9®FëIuמ92ƒ9É=«Z %R€‰·ò:T.ZÞ$ÇË÷«¨ÓôË4ÐÊŠX.AÇzáœÍ¯É>ÀNAõ­­'M{mr2õ=:f½uNë|0ÀïOR²&0Çc^Uã`¼×9ØGzÌÑmf³Õ£PC‚qÍh,,ž'g»\!<]mͶž²Gp#RGB+“׌xŠØž9úW[/‡íf·IÖ!ÀàŠóIôÇÄ2,¯±NpkB;%°®7%†²¡‘æK‰l\šê~ÝÆ°ÍÈCTüi]n*>b9—â-2+{(¤ ‡=ÅImehay\ä×KðþaöGP"´/lõÉïÝíäeŒtþ´¾·¶jmîzûV¼øHäcÎs>u}Nôÿ =kjZ,wò#€0 Žkç­vÖhu0BgƒNnË2(t­û„º‹MS ãø³YöQê³]©vm Œ“^‹k¤K¸ó·šç<`ßñ.(:îÏáSøLŸì¸ò ®85±-Ü2oFaÆqUR$AÈëOÚEß‘ƒWD+$.€½¸¬¦³†92ÑíÓá¦@ä°ˆ(k6ëI·žà¨EÏ]ÕPi0}¥Ö}"Õ±Õ sŒREj¶û•Q{€:ÕÓí%s$‘€IôÅLÚd&à=jM?JµŽ2Æ%'&­Å Ø¼Ä`÷«×Öé ©…⹑àò"¯ËmA,n€‚½}ë"ÓD¶K£ëœV„>¶#lžX•ž²óË‘“ØÔ‹áˆî•F:бŠ@HëUdðÔw ò±ÎNzÖ®•¡ÛØ(h×Ó]&Ÿ—üi·Ncˆ´i’ZÃÔtÑs´ß9+ЊÇþÂSxÇÒ¤} íÔÉ8îi¯¡C%±AÛŒÕí;EŠÝ E…ȪóøvÒIþd‰«/á8®]U× zÒ·ðô6vÍnJ‘Y·^··#» [ C­*dn*u𼳙ʂÀ÷­Ûm<Ħ&Q´=+"ûÃ^\nÀSì*埇¢´S…-Æ ªqxNÒ[眂9Õ‹Ï Z\N&~•ÔéQY[ˆÕ‰\p _”“޹˕koÁNÀw5SQÐ"ÔV L`•©$ðõ¼áD¨¿ ­dcDŽ Î+:ûÃ^;»®ÒÞªú_†`Šì>î@È&“Qð…­õ陾özÖŒZ$v°ÇG•ëïYZƒâ¼™%S±ÎrE[Ò<'Ï#y¬:gµt­ *¨È©£ˆ¤@”À"¹ë¯ Ûj7†WN@8õ«º…í­ Iå‚㹺—†-oÛ{.ÖêX ‚-Þ¼†%‰èOj«yàÛ;‰–bs é[vöM²ÛîíÖ²¯ü+kupDà SWÖ–ñ¼{ ÀÏz×Á–¾sŒ•Vç´´_ÚØ0pIàTúƒ­ïîVæBASÆ+?Wðº^Ç;SI/…"m´4¥Çñ}kR6t]˜G@jÅÃî‰ëU¤Tx~vËvÍ\¶” ÆáéH²Å ŽsÏ¿Jð™(%1Ö¬Ûi<Ò§ÅZNóÈèj´2À$*¼ã­VÔ¯b´VrÇn3Í3B×mu Äã ~U¯u9 ¹üýk8¤r±,~oOJµŠahÔüøâ£Ëe0ç­Z¶U ŒwíDóåÈ ã‘ÅV¶¹¶ûFO™F6žµ%ÍÔV±ùÒ¾ÀzJf¨ÛÝ!d`þõ~YAä¤_sAïW”ªÇ’Ü÷Î7ˆÔœpjXãýñ~AÛÀ<@…Ãî#Ò˜êÙ!Tâ©b’‡$äžôß8™U©÷ËéžôI3<€6žþ• RØ"«ˆÃË»oËŒS¡Iã>ÕlIø°cžÝ«ŸÔõË+)ÄM/SVíœß[ù±?ËŽ ;ìÇÌ]Àm Ö´"”Šܸ xÎ1ŒTW@´D0¹/ ŒëWÃ8Q'Jé/gŠ7P޼W þ¸î'õéN &)Oçg ä«)êhŒÅ<ÎX’ݪf‰V2¸ìEqþ1µŽ; ç%™°3Z^P4¸Er¾0üòàð [²Â<#Ý\ݽýü×,¾aÖ´,u›¤¾ò&bA©õÍjé À{ÖKjÚ\LJ°àV¶‰5ô÷"y󴟼{Wd—*ë÷²CUµ½E¬´ã" ±5ÇÜkwMh'fïÒ¶týDÞi*¾×Qž•ÊÝk·²]˜ËnÁéW4ýjîÊìy£åls[Zηöx”üÎ8År·æîK_:~Cr+[ Ï‚~RzWTÙŒ¶ÑUïÞç쥓Œ+‡“Vº7m’H=*Ä:Ôö÷Cx;»WG‰ï ›2‚ºVáñ•d²I\ú×?'‰¯%æPLdô­½;ÄÜÚ³&7¨è* o\ðm>g·ZŸNñd²\ýšEÃç5ÓZ—œ‚Nâ§4ÛâD‡hÁë\­®ß[jÚ7qPÜøŽò7]Çdø’î#U'œÖ°Õ¦KAuu‘‘Æ+5ü_xv•?»S[Öþ*’ïO,©’£,+.?HUÁBH=+sLñbIc$’¡FQÖ°Ï‹¦7/"«4y®çÃÚ„z¬Dç‘]8@T®3ÐUMoP[ &fãhÏæËã+;IÜÎ+^ÓT“WÓä’Q„Á®cDÕäÓ5 ÞÎr@º½/Å­¨]ù7G£Uñ·»û=«”öª–(¸‡QÝåsÐSõŸMgv˜ct­;Ͻ„ªœ²óE¿‰$¹ÒÞåásŠå´mjöë[f]ÇæäÕ×x¦òXôuÌlGrMWðŒ„h’NŠÇŽæ£‹Æ¢ © `Û× õ­Ɖ{va+åÉŒëF½âñ¦Þˆ%ˆÎeÅã̰ʓ'¥wz&«öØc•ԂºÚ¿8䃚‰¥Xä;ÎA5®êñé¶Âi'®_þC²FÁà1®µ͘¹6•ÈÍqƒÇán]ND@‘+¬ÑµHõ]8L¡€'=êüŒD$F@ t®gÄZõÆ“¦îEÌŽ$v¬Ÿk×:‚´r`y Y>=…a¸‚eÈbyÁ«Z‹¾Ãg …f@9>•ÛØkÝÛ­Ìr‚›y'µgÜø¶Í.Ö(Ûzƒ‚{WQ¥ßÇz›Ñ†Â:Š’íÊÆä €+Œð¬’ FùˆL‡ÖW‹u{µÕBUñ§Ý¡†ÙðÅK` ­gö¦NF@êÌ·1ÛÆfô5JY$»Äêyä ÝŠEä–8ï\¯db@2Ãu_ðÓÒW'î­s¾4•A(¹%;J¸ØNÁUÆkD‰eº™ŸåçƒGÙUu¥î;šƒÄq¼@œŠ¯É–eˆ½Íw:LÐÜZ)z•¡iyŠ‚SÆRÉ›²8Á'ŒšóÉão±ä±$ö­]_ôQ ûÕžñ†×‘…ó«:‡–·Q2Ù­k–ï-µ¼È¼qQja´˜Óh 1Vü*ª4oÞõÚ¼#ÈäŽ*´ñ,vÞc󎂸+tŠm}̃ ö®±Å­ @ f—[thâ)ŒTw;¦Óc “È©´«qdÁ¥ ŽÆ´ô[adnè£KGt:̬TOOÆ‘F'EÆ(‹zø•\žyÏjÒÖíãZ¶ì’7cµ[ñ¥ƒA›`Í&»<+áè#8ÞÀV†…/á’ª}§5OÁPÁ«róaJž†º?]Eý”Wƒ TðTˆt)ˆãµaXØÅu⫇à®x0¶ŽÓÆå ן⦎_®AÄ{V¯†4Û‹ñ,Ò£?@;W¨Ú {]ªBôQÒµ“t Ôw)»cë^wã½N µ9-Ÿº+’×^OìÛfÆÔ`z×Vº„OáÈãsÇ•ÈÍyÿö=Û³MnÁã;qÒ½CÀH_DØÀ§‘]CÄÛ€=kšñ…’.…#Î{ÊðO“œ§ä ß5—ñ –v·UÚ2Ý…Akooá°Dc,}èÑ.§_ Jc*+;C·¼¹ŠWòËdœî®óÂÝZÙKÏónàg¥t2ÎÍi*±çšâ´[§Š[°€·ï{VWˆà½ŸPóiéšÍÔü[ Ç®é^#í,£k#X×áº- G½Ö°4K–þÕá›nyæ½+O»! ¶\‘Á#¥rþ1¸‘<Šè4iq ´û­*Úà> g€i² Šßb¨ 'ô¦[h0ÛñŽõsûÛÚ!¸÷5ƒ¬x}šðN„aEcÜéÓ\6ÝŠº}+M6–I :Öµ¤_g•ŸgÅ6úÓí¤ù„2’0+ûÃöfUasó #Óí-p±ÆN"ˆü=k+™T õ柋i4¸–Ü:«§@†@@â³o´;i#(ÆÌÕ+CŠÖMÛ@È­Y£•eOB)c¶3BñÊÇq\ùðí¤>wñ†çš­{ [Í8” ç¯5žŠãhÁÛŒý*[]% #*Ì^·¸OPkOûlY"à’k6Cor1–=iðxM>Ön$9lŽk¬´…R-…±ƒëÞ¦¹2Eãåæ¹=nÕo$Û&9ãZ,Ú´*i«šŒä§9ëÅkjºjê6Ò €{×+…rçËb‘ýq[ÃñC`ѪòF³MÓ<,¶w)4d€y8ï]ö±Üþé€)Üæçðj ó•VoºJè4Í5t˜R ’ <õ­Z@í¸ v£Ôtèu 'ŽU?ʰ!ð­º9HÉEýjòøb `¨aóc½gi¾¶‚êWB~ ž”Ûý­çß¹ÉÏZ|þ·ËV@8aSèþŠÖí¦”ï‘Fr{V®¥¥[ëÊ ú“Ò°¯<ð2’§ÍZ~Ðã±´’Ûp ôïQIàøÒéæ…ÈßÉÇJ³yá¸olV9•QëMÒ¼)›m&Ö%\p3QhÞ[}BKœüÝjMCÂÈš¯Û\ÍÓÌ_h¦]`µÄ Ê[‚*Ý–ˆF­ÙÑâE9$šêõ-6ê{›6…ʪ7ֺ̓¸O•¾´N2AUé\—‰ü/«r%N$ÏZÁ¸ðL·AažbÂ?»ŠÓ±ðªÁe,S9pWjûRÚøUmÆ%8'œ÷®›MÓbÓ òãÂŽ§Þ®« ÉRvâªê61ÜÚiNAÍs–^k)¾YXÄNBÕÃúôÄl횊ç­wg / 1É«Ú?†?³l$¶•ƒ©íëL_Ëoæ}•Â9Ò·4ííìJ¼‡Ís’j[ØU,åPß6:×áL··»¹_3®ÛìQHİ^8Å|ÝaòÌÀ|Äõ V%¶žØÈOaZ~†m.b7cøª¶…6¶à0 Ï W¢[Û$ ̇ŽõÈø«çØÌ9Ý‚k«ðìxÒâtNBõ«W»|°íòšŽ2ùóÜ š9 Ç»pô&®%ã79 íž•—ªHAÈ9Ry¬—dT©æ¤û}Ú/œp+BÂíåŒù¬ÛªÄ—)Ñ·šÊ‹s3€ß0¬írô$ µðÉÖ™¡kñJþY9lVõµÆë—f>è5 íÃIw½HÇL ¾°oµØ¼qšu´¤HÇ–RÄÓÉ­HÍÙpr¼vª¬wB  šã|æ¬×žXŒ‡5ÓMwqnÀ<Š sŠòûO ‰gi œ)'ô­8<3Vò¼ÄJäf±¤ðôÈ–þXaÐQ¦ø^hnVErOSŠícF@dÎF9®OưES¿8®§Ã(?± Ls¶¹ßêS[Þ‹hßs“€=+.KíKO’’:ÚcW»†t}¡ù"«Å«j¥b‘ŠÖ­êÚü©oCFê*ƒ\ê6ñ¥Ì‡õÅ\»Ôd“L[‹pÄžMT³×¯dµvé°qL‡Ä·q:çæQÍKcww"I3aUG&©O-Þ¢®Ñ&èÓ©4ÿ @dÔäÏGJÐÕ|A4‹CiëPZkWSê‘£à†<â½ %·íã§­IokµÄ‡žÃµ^™-Ôc½szþ¶–6¬ØSž‚¸F×gXŒÅr®{U¸®c‚Áo ßÖŸ·tª³*|ƒøˆàÖü~#Y¬ ‰´ÊJ˲ñL·w- Ü)’ø¦Xo„&,sŠ»yâµXYrYøÛš«?Še¶<Šrz ­}qªYJò!D5“¢j÷Hâ ǽuZv¦u{F ‚TäŠå5KæMc÷a”)ì+Ó<3,·v‰+@ϵç‰[‚zÔ©n«J‘O˜y!x9®K^ñ(Ó¤H†InÕA¼o„HÚ3Ž¢¦¸ñ(¶ˆnÎdåV¬i¾0Fº8)»Uê¯gd^"KÔWšY‹JôHÁØ–ŸÆ½ë[D²wØéPEãÑ)ºòxç­dø“Y‘•dn9ÀïZÚeõÄÖŒdl•PÓüQ?ö¨ÎüVÏ‹¦:ªÙ$M€Ø5Ü[E)µYB¸~Tå·®ÜIëOŽÒH‹)QíŠÍñ> 4­9˜).zq^EÅæ«{¿æÎîÕèñø…4..AÜGz,ül†î8Â’òOJÐÖ|Eo ,jÙž‚£Ó|IÅÊÛ¶V_CÅ6óÅö¶’äžqV£ñíšÜv*{qV'ñµ½¼È„åd9Î+¤†ê;èUá ¡¦íd}¼`Õ¤¶Ÿ•‰æ‡ÂÀÍ…éÅpÚ·Šá´»6꥜}ìU­ÄPê[ãUaå ÄÕvñ`k™c„3l$Vž—®ÛÞA#)Ð}ÖëTÇitmËa—­F|agqt°SØâqâ›kGD”çqàŠÝK¨Í‡Úw€»wdö®Q|_oó팺ƒ–aÚ»TS´ó¢#$p*{ò§Nfo½ƒšä<¼—…:ù‡š›Äv7|\Ž+ŠVµ¹eÉS[¢T’¾b)e³,£ð3š±e ±çÐÖHšU܃¦@5ÃxÝvmà`·jé|?»‹”Wâ½6oíT¸ã<⯠ìÞÅÓÌ”Ž˜Íbx–5{xBÆCg¦1]k¶ JàzæüW¥Ë & „íK{r—z*Å€``Tú“1ÓZ9ÁU#…5-œ¶Ú«Zǯڃa=Ž£ä'ÌÀÅv7z;Çáé«c&¹Íål,'Y–<`Ô~?´ç#åÝPêP¥Æ©"·=j½¤/mªG·æ«×´Åí£fç®M]ØXB£æïPLÒª4G%OSØWãXãŽÈ3“Ú¸%°à §+Œ…«·PLúM¹ §šÛBš¨ µŸ ÙÏ*LÇîóŒÕM)=iÁ8Á¦_ÉæëjèÕc^r†ÝGj wÂn_+ž•ÞjÙ§†ØG…Ì|u®OÃQÆ-nD~¦­ø>B5[„åç­A{ mâ¬J£fî•èúTñ òm¶€1òûVÙ„¼9r9¦«yckè3ŠŽm²†-϶kʼpÑË~©•e®}~ѱ4ë¹+[P»·ºžð*£‡U\ÿ8Ûê—ö²è.27ã¿5™àd·òä,FâÕâT¹mo Sv4ë&DHäi#¬kq16.ËÀì„O¥>ÙeMòIÙàÂñY†M6_3 XJ伡yËÛ[ø…Kãøã-np í[š7‡ì®´ø]PoTÎ}랆ØÿÂjévINT”Ín‹-Ͳ€\ò¥Eâ H›Ä¶°¶3Œ·jgŠláŠîÍaŒ ÈŠÐñ$Å¡ZÈ|Îk´ð[»h±#æº6DiÇ$~•$*ðs´TwRD-¤Œt ^)­XMs¯\Ig&OqV¼9-żwp+1CÏ­\ð„x[·˜1cÔº4Nþ"¸D$G‚H¬§Óã¸ñ™ŒFHõ©¼Mc®§j‘€›8ô«ž'µ‚ÛGFE%øÃUø®ç—Á›;¶uk—дû›«ISp9ÏÞ<×}à{ mmdI$SƒÇ5Õ_ 2ç)®;ÁÒKçs€dù@úÖ¾¶’ÊðžAÁã?JóãnQÝŠã­>ÓU·‚š@NqŠê-åóÀ`+έÛ@ªä)Ü•>X?x®ŒKƒÍq^<_*:’Í]o‡SF·,JŽø«÷zlS!.ŠÁ»šÉ]O·vo-UÇARM¢ØÞì2„¨ê*[}.Þßr¢íU/ô¸.Æç=3XQximÄdJÖû”¤à Ãvª1èvÍ?žT©ëVF‰ksp—rË×Ú¶f´C–q³oZäµ_ Ú¼¬Ñ®^µŸáKx<œÕÙ´ 7f“Ë íÞ£³Ð!Šý_É õ®ƒËx—r¨À4D ƒ’2#ŒÇq=ÅfêºM¾¨ÉÊŽÙ¬‰<+oˆÓ5 ÚÉbÚ»zJÊŸÂ0Ç„Û éØV¥¾•oaf4ËϽaOá•»žIá÷ Õ(‘ý˜›Ù÷H{æ¶®.c‚%!r ëUå¹[‡UaµHàúSa]ŒG˜X+×¼+§z& F9ªŸð†1DÜw(ìi“ø,Ix lã“RÉàS3Yz£©¤¿ð£®š#aºŸz§áÏ ÜÛÝ«–m™Îuš¿…“Qˆy˜ ¼‡BÃÁÌ×ó͹GEõ­mWÂÖ÷ F«µ—¡¥B4s¤Z³`»m±®4Ë{¬Ìl¥ˆÔö¯HÐôÈììÒö†Qɺ"Rë ’*D¶Ø€•E*QÔ°àÆ¸ïhwº„.ðÈÊ3šç´o _Ù.ñ6ÍÇšÚÕ¼/6®!̹*+§Ðô–ÓlÖ"Ûˆ5‘¯xv;›Åº·“Ë›ÔTZg†Ý¯ ÍÌ‚YOj¯«ø6ký`^$»XŠQð„÷÷—™ŽÊ›Qð|÷vé”\b·¼7¢Í§Zˆ^C³=jéZ$UÀå}úÔ@°Šl±©_˜d0Á®ã ý¥5Ì.FóÀKðßÙåyd_1Ücž1Q\ø\ÅpM´… œ[Òt8l<Ýò3ŽIê+$ø2Hõc~³uj­­xNïR»IÝÀò ?QðµÎ£ajÇ®kKGÐÞÃO[y¾~1Šª|!*NæÖm‘»r+­Ñtèìlö`'¹£^w[ <¤ë×ò®3ÀîGÚw)#Í8®Îkqsµ¶ƒ^Eâ ]-ìsd°ê+…²ß\Räïõ¯[ÓãxláF;Jަ¶`™†žüTå7¡•]@Íp^=”·ÎÓ‡®£BN• nʱ-ÞøÊ—uª…d³SKnêѪu>¹«tpà61Üç5F[¸¼ü‚˜¬ËÿÚY®Fìô­KÈá[(Ã#ÒªÍ2Ë+Ãôã¥GctÖîÑxaÞ¯ý½Da]ÆG¡¹• ³JxãŒw¦ÁuZ¨^XõïµF¬¥$7J.8a‚k@¸d1±Ï±’_‘”*ñÅ4¿™!ži‚uWlmüê'ó'!ÏLqŠ´cÀïQ]±X“aÈÏÖ}ƹg(Ó l`Ô–7©,o´­Þ˜,Ñ®²œ©ô«2Z "6@hŠÖ82  1çŠ|±ª€›¸ëMG‘²€T Ú¤xÁVJ|JÒ8}«ïZTr´ŒÓÖ¡š!%¾2¨n•E6†Áè8«ÐmfùG¤–ù›È§K½U=éÙÆ Hªþpç’: ¯}ÈŒœ€N8©¬-¼¨ çåq•Qyæˆ-m.çǧaMc#Ý>0ã§zšî1$6@HŠÏ·Ñ!ŠE˜( ÔäV¤­"ñÖcßxóS-ËAû§¥,1ucÜR²*«0àT1ÛFÀÜ=鬮8³ÎIö«C{(¶OZcǹþe»U˜Üpª;Rcv2@9ëŠw’ uÏZ2•ÛÈïRÇŸ@2jfp˜\ryæ ‘wœ¯i. ’5ÏnõZo1“€:dб +l7 “ÚdцDÇÞÅTžÉžóÏ^N1ŒÖ„gtMä‘KQ“øWã¨Ý¦\Ȭ9¬ÝWXŠM+D  oønXaðÙn}k˜Ñf¼E,Î)n)|Nñ&ºyÅXñ øŸIERãŠÀ0\G3³„^…o­[&ŒPJ`àt®;H"_M+A9ÍM´?ŠØž8ÅAso,%ß0#-Á§k‘–ˆE–}Ç¥mI¤¤Úf3¼(É5ÇZ@òHlÙz–Î)`¼{Dè[šï&ÓRßLBƒªüƸ24m}Ãu\+~,Ëû¹¯W°H‘@ù€ÏÖ­Ê» u`2Gã×ñ¿ü%¬’ò7t=ª_¥¨h%UqŽEI|è¾PÜœÇzÂc9ÓˆU=+_Â7+1ǰ¨5b¹ñHR>SŒÞ—V‚85+Qì â£×î3{=WU«²_ÞÅ$îŠF2*ï‹áh­bû:-ðÔ66SÜéƒj§=êk+‚Êáe!”À®D´Ž÷Yhßîg¯HÒ4+=._8€ ŽI®žßRµ»FX3Œ÷«–ø6Å[“HÑ3íÍ?hÜ8É+ÛµNäE’@1ÓÞŸ½FI aˆH[ "¦V"WÎJÞ\±†#ŒtªÆuÁHÆ[­>ü¹C `žh«*DËžrj5“%±Ö“î9f玆¥þè¾á’:R”$ œÓX)-´ŽÂŸ*1*ýÐTJIfwâ¬bsÀ=Á¤ÙÏ+Þye_˜ñ·4ü¼o»ŒgS%êF=*xe1ü¤p=i²ŒXç½#9!‹Æ1Š7cëšó8ŠO˜äð; R¹%¶ãŠ! ŽI>•#GÉcËÓÒ«*†˜6ñÚ§ 6üêh‰UG8ÍF©ó¶í¤ëKµ•\ž+;Wf|§£m95Îx(·Ø®ˆbIª>*»XîáVPÓÖµeA@àØâšŒƒªÝ±Vb@aN 'ÌÙ=—¥W–MÿÂ×¥yߌX5Ü$aÅwZc,z\Dà©QšmÞŸm}nÁâ zÖKx>Ñ› €GL榇D‚ÞÝ­‚˜ÁZ¥ká›Q#ȱäŽþµφ­î® Ž¿7aUeðôs…I:b®¿…£6©;Olô¨G…ÄQÉIP09¦éžKIL‡–“ûJ;ÝÁÍw1ùAÁÚ0y©¥ft'8æ¹mSÃK{öˆØ,ŸÞà©epeœ³ƒ‘ZKá0t¥¶’ÄñYçÁRhfs…éK§ø5í\°|®8¨ãð¬òkFnœæ¥¹ð“Ý^™¼ÓòÖ±¦Hº‚´±F3QA¥yóÄ,ã`ÙËW¡.†·zrA8øÕ8¼3sò¡lGíVÃò}íÙÿxÙÉ=ë ËÀ÷6—ŸhI0®¶öÍ®4áñ…û¨økÃ÷zeü͸7é]ڱ碃֡’]ÇäLŒT…c¸®0¾µ8À\¾=½ª?—f]ËR¤ÑF /Ž H˜zóOÈea·#¦3U 2…p½‰©",̤TFjï>µVV+'–ƒŸïTœï*ç4²+;ŽÑÛš™xœuõ¥RJ®à3ëD‚Ge$p8Ô«lF@99ëS ùFO½ RsÀæ‘QW-À9àÓ‹·c<Ò3o•AóÍ!,Ò€Q޵`§ y¤;7c®{f˜ce‘Q·ëP™v¸ÍHÁÚ)R3œ·Jªœg¦iÇ;ŽÕéUU‹Ý]£oZ˜ ;Æ=sOµyÏLž•l íɨ42Ÿ)xÁëœÖf²ir“‚ÛIÌø&mÖR¨6ó»Þ¶ï4Xo¤Kb8¬«‰Ld©û£©=ª¥Ž¡ åËÇ©1òkfIc;TXtªòH« @ynõÉVÜp§Ö¼ÿÆê¿j{—ÅwJƒ£ÂŒ{£­\H׿!†Þ›ideŒ­Ð®€e¼Æäw"«¼n qƒÒ²/¼Eii"ÄÄ#-U ñ¤ãbʹÎsíHþ$€Ül&Þ­]k6ñ“yàö©´ín+à#WC'¨«Fåá¹es‘R\^¨µ3I€çéTì5¯£$¯;qRMs*±ÎUOLÓ”ïÁjs@|¯1¹=U7®Ž¨<µÖW=_I v·t«°Â¨w)É8ŽInµÄøUŠM5ä$0à­s¾sö‡`K1<’kЉùÉ~µ6?)äÁ~œÓîdHÆXý+Ï|uq½#·z§t„ÄUWç ÔQ[ùéór1\o‰ô5–’8Îñž}«ðÔ ú„ÎNGAUõèÏUÜ„„Ï8­‹—z,)±~Ø­¯ é­¦Ûù÷^:š|¾*\Ê!‹r§š’ Xjºtà­sÚ~¹ö;‰"@ÙÃWÇ‹²“Ó5x¦[i¾t`­ë]…®©ºœÎ¸Qº¸ýKÅ*×,Ñd+F×ÄÐŦ‹†9cÇV,»ˆ9é]N‹â+{ô ¿xVÄoçÈÀdŽ Ó¦S÷Ða±ŒÔD–EÊüÀc>õzÌ»dà€*…ây{Æ;U%¼K8Uå^’ÃÒ²‹ ó¤x1çì*×öÄWy¹C9ÎÂeNËžG5Ðh>%³»+a»=êkÙ¨.Ãù@çÖª·çÅ+‚O8®ÇÂRJÖó1l×WlCÊÙÏËÙºUĸ`O*{9U™”¶íW Áeý*\t¯>ñEÝì:²H&`®ÙÆk®ÓüOmq#Ì<Í£ë[º¼cMiQÎJæ¹ _Ï{©Ü '-8Z¡¨Ïuo☢ó]cf× ^ê–ö–¥”—ÍyF¥©Huekk—*ÏÓ8ÅzºëiºT u'£–úS-¼Q¦,  €éÅl\kö¶Ö~q‘pzV<>3°–P‚|±8â¶e×--mÕäœ*ã9'FÚ°¹M™ã&¶t­bÛRcä•8î+\±ÆÐ3Šƒ.ÛvàNM>Fpª~^;æ¸ø˜ØGöx ÍŒæ©øNîùf{‰® ÄW8­1ãˆ>ØêÇåCƒ].¬ÛjV$Lâ¸?k3ǪÃs”Rã])×­ôí:¹€TriañŽœå˜Ž ­I5x’É®ƒ‚»r®KÃÞ2Kính¦Îì'Õ-ìÑÞiT.x¨l¼Marq Ê_=[ºÔ–ó@¼óÄÞ*»ËÙÜåé]_ƒu9µM1%›ïÖµæÕ-mnVÔˇcÒ¯²™#O$Ö_ˆ®pFrPà×7à@‘hï!l¹$r;Ö¦­RÉ?\óM;dþi&mÇU_Ê"¹œvÝÆkg^×¯í®¶ÅñÚ¬øZúúõÙî#*;fº‰0FgÒ¼ÓÇ‹ê6ûNw75Þèq¬!ämUžüVÀfÚÅ”>STVf•›ih3«•Œ?#©§DJÄBÃ$U BÜ:#’:W”j‘K¥kÆHÔ®OjÕÔô–¹Ñ>ÔT—o˜“T<)·—©ÎÈÎMv~*ŠUÒ\D1¶¹ û&àÊ@žI<Ñ᥶]·—ƒô¦iv‘ËâY‰\ñMÕáŒë‘ y§xކÝ6à Ñ-åÂx|,lr@Î+"Öå±nÏ\Ö®—h±és™È Wðô0y“´€x­/ ¶Ívt…Ï5êGnPAÝS‚ ˜äþ4±·–̤nSß®*bUÐdœNôƉ]›Ü ×-ây#µ±•áO¥y𸠧J"O—9Öÿ…·]h­aœå³\ݾ˜.¼G,Y®zô«v1ýÄ‚4$Žàt«~&®µèabLJEQñ%µ¼Gå¨ kµð” .^©®Ì‰Ägç=ê8ÔùŒ¬Cø§‹]³îCÇñ ÕÁòÀùºsU —\‘´ôë˵«É¯¼P-$fX•ºf®M¤›}JÞH¤Â÷ºÖo‹ä^B žM7XÓVÛM†â2wì×g¡@·~))Þ±<‘®»vHñK¯ÊŸð”Úåy«k -æ·mm¹„lyª¾$Ó­­/mŒxS¼ V÷‹ KáˆJ–ܪ¬ïx]µ]:9ÄŒ¯Æj§ŒZëLòl'9ɬÃm:ZE,0¸|pEmß%íκ\« õª>ѤÔ-]å•‚¯?zºo‡ÓɹsjdfEϯ[‡8#^Ô'—rÙäSe$dz5ä><Óñ¬[ «¿"ºÇ¶µ³Ðãeùæ"¼ðÜD‹pmâ/»?3V÷€oÊÃ:Êå@~»©ž5ò¥Ô-9ËŽwUÿAü#Q•l£œô¬}/BWðÉ»%‹„$15Òø]E߆]dmÛAÎkÂ:U¼šÅ䬠lo—5[Æú”ÃRŽÙIOAYÉö˜DOoˆÀŽ@æµõZöu´µ%À¼}iô¬Øe$¯L’kžÕü;£x³¸¼UÃa–_ea¶[ëæ¸ÜGR*OÂ_jÙÈ~ïb CkgäJ7ƒÇ5B? ‘¾Ï6ÕôëO¸ðä­hÖð0 GÍïY–º²r]¾ñÇÒ¬i»´Ô¾Ñ¿å-ÏÓ5è6äy[ ÈQÚ¥É&[h󩣕GœtÍ=ÁÜ»8íQÊÌɰ•=`ëÚj_i®÷ñœ×-oàÙæ±u/„sGðµí„nl!/½W°ðµÔ£NÇvìæ˜¾»þÖûQ`9àU½OÃrß8— H¼äV ï†õ ²ŽÚxSM¸Ó XîØbº™#e'Ÿ¼)èË\ “É4n"Rãt©dKä<{SLašN $俏?øvS«¥í²Œ“’ >ÞÎúä ñ…eþ/JÀ×4›ë­EJ!*ÁêêWšdqmáF1[ÚU–£‡ÚÔ §C@Ñ5 ;R‘ÝÍÔúÓ5oêºØ¸@0¼ŒVž©áÛ†‚+¸Çïá¹»ÏjÚ”«+Y Vž£ j·:E€qÁ­Ï é·š~š!¸(àc­Mâ .©gˆ¿¼^rk'OÒµ'³û2ÁcqŠÐÕ4k‘¢4Iço”Ö~ƒ£j6t‘É\ƒz„tBÃW’îxö+žýëÓy­•Ú£ÖžÄùˆp¥1‚}é.rÁ1’:מø³BÔµ B9 PR6ÊŸZЋK½¹ÑÌ2F1Üçãð]êÇ"oU„sõ©l<uhØB|·äàÓ5oj7—JˆÑ†ÐkGVðõýΘ¶Ùù€éRØhZŒ’Ï ±\ Õ¯ èךU”°NFÃÐÖ|~¿°Ö]í€1ÌÙ'=*î»àö¿TpÓ§5VÏK½ó–`M‹÷š­ë$|Šæu?TÔ¢ò„XÛŒ×]á[+‹=1c¸`½T¿šûþq–‹v{Wo/åõïéYÞ Eþ˹ÞÀ‡ƒà…i4‚ 2j]SAŽòàHÙïÞ¨À†C—ÁQØTîbQ±-ÓŽ•<Êpr£$f’{Åóò«ƒÞ´~éYA5æ¾8uä–n•ßx}"dMœ1AŠÑ’S·‚1Ži-ð¹à;úS®®–.N+5Órœçš£u©ÛÆâ=ë»v1š»ʲ8^†£šã‚P‘’iE’ üá†yëJðŸ;pm„ö§B<¹ÚI†Iû¦¬ÄÆ{ô>•@£qäÓöƒ!Úq޵+†*¹ vôãš¡{<•¶àéU®/aƒk ~µzckdn7õ$TX¤G'%‰ôâ’Úq’{víV¢- °-¹1Á5n9á\1 iÍ"åqü>½éòNT¯_J¬’ÞGÞfïUõ  †ÝÆ¥Šò4·¿ÅÖ­6å„lÆè{TQJ^!…³‚jqn`€N28ª"y¢ÜnÎMG

X¨ê)ňBHŽkƒñ‰®ô‹èG¶l+¢±Õc¸¶Wr I­#wûµ «LðÆì®T=iÐ\7}쎕‘âe-£Ü¶sr=+#Á¯äè`dŸö£­øÁ,/|–S‘WB)¹£(ã=«M°!O˜qÎGj€Ì]ˆ¦—hóî“Ôš’VVˆÇ¡¯*ñjÄÊÙ[»}ãÒµ/e¼†Ú8­X8Ë æ4˜ Þ"‘.[’Š—Äp˜5˜’ Óå¨ÒbÔ,ä.rÜñYÚÅ·Ù®Ò8â½V«ØÌÇV‡ÎVL0¯hÒ’!ldÁÅ^ ¥€8lš[ˆ„q0Ïa^_ã=jÅO›$¶+‘º+5ªîP 5£b‘ê+o`ïþ*±âo2É"·Œ°^„U‚o²£Ã£ïU»ùžãLY%ÿX5¡¦x~æ÷MŠpí¸ó׊oŠ®§¶†ÞÔ9 +tßfR±{7­v¾žWµVŸ9»ûR²&ÕƒÏ~Ý6€ œÍG<%KqÁdÖ|ÖBKs¹°pkƵˋĆ N d×wi [é °œäWek%ö³2ïÚ çbH¥Òµ¸bYNÖ=ëkÆÆœ’$‡8çÎèún¡©[ #•¸íšØÖZþÒÚÒÉÜåú°5©¦¾“eÔS¾þ§š×¤Ô|9¼3vdœ×1e<‰ÒK#y‹ïMѯØyË+bÜšî4(=åyK;ŒãwA\sÃ7öô–ñJBäçæ­ çÓ5ë`³–YMÕì(¿º”Ì{š¸„9cšcV<(梖¯òàv¤–a/ÂA5䦷w­ëRYÁ#,`px¬+ë »-^¥!×#iï]çˆ5Y4ÝÝc|Hø&±† úK_}¤ôÝÕ©á»×ÔôÙ±Ü«Ž½ë2ÞãìŸnŠgo3o5_Ãz´ðÍwo4‡a5wv’6#ol°Ü§5ÄèËw{¨ÜÃö‡¤Œî­ß ]][x†[‘@ã<â½D@ÌÉ¥ŠÜF_<äðqÒ©j–RÜY¸Gˆ<׈:H|^byI*Ù-]‰uù-tx­âw%°»³ŒVmõ…ÅŽ¥¬d s]ß„ï[WÒ-®YŠÈ¼µÓ¤Le€lúæ$n«ž Ç­yŸÄŸ’ÝÌ[ŒU;[èôqtg# .jm;ÅÒyœñŒu®5|S¨ê)•Ôg€+Õ<'©>£a¥²Wå5§¯ª.‰rKpTäúV'‚àó4tÝÈ'©úÕ?èÝ^‰^•£Ûœ6Ð=M6âì6PsÁªí+0¹ã¥[ƒŽç­KÁ)9cž y§¸ÖmÆr3+¤±š/°Få{õªO¡¬×iWØäãŠY<8ðÊnea/¦j–µ£›ûeeUF^†³´ý*öCH@Q‘ƒQÏ¡ÝÜjBáÛ'®}*Þ¥¢Mv"_$ 𽇤ŸO1Jp¬EÒ¯-.~ʘØ}«u¼90ÒÌ[öùiº‡.™›%ŽWÕ|3u>¤'‰”2j O-ÄSJƒ Ù8®å Š8ÁùIè*äW ˜ãâ¦3”Ãn5ƒâ;5½Óe@;qø×£xp‹yÄŠIèjÐð·‡Êéæ•AœÚ®ø“ÃPFtÀ+ʚķÓõ?$Z¼x^}j¦¯£]¬+iœšê<,.ãµX.†Ô Å3ľëæ!äs\í¾Ÿ¨K·XT¨8É«µÑ´e±´Ub÷õ¿o(† ;Ž\ûPÁ ÜsCÞ¡Ujï yšFÀ2Hé^Wâ½.íÓsnÏzÒâøiò»(à ¬ÝÖîYåkrC’iúµ¥õöº“y*1VüLg}5 [b[š±à¥–+c ±Àë[z¾”÷L“̆1••…«Ù]êqEn!eŒæ·c´VŸªó 5rÓøzíÖdSä¹É"”øRdÖ¢ò˜œäý+½–ÌÙiå"0\ç–zmûko,·ÌOåWHÔ?·mäû;2+õ¯^G e(méïOR¿1Õ¤Nq•ãóJÇË qÞªß'›g"g¯¯:lú'ˆ^vŒ˜KšTÔ$¾Õ­çޱMtzõ“êú43Ä„2•™ÝÊi¯dÑ·˜F1]ƒ4u°Ò˜ÈŸ¼“’ sºï‡çÆ#LE!"¡Ö|-q¯lÖ¨pà Jínån‚ɳæé\g„t¸ºymßæ%©´D¼‹ÅòÜ=³…~kÕmÝÊ&x#¨©–`Y³‘Na¹@$sÚ¼ƒ[°º±ñcݤ%‘ÛÕ«}£O«èñŸ%DªA Õ[¤»½Ó“KXícÚ»_iK£é‘A‚Às“Þº/0 &L.Fi «$y^}ëÎ|{eqy$BnÚÜÒµÁ>ks*m#ð¬ oʾ†—$Vv…eoe›k»kÒ¼5h¶¶¸ åIU¹þÁ¹Ýƒ•8Ådø*dþÆEPI³] ÃødŒœæ±˜!' 8à ÉòÜ˼‘œô«l˜E'žÕ%´x÷œä}($K/5æ^1cý½lü»…uñXÆÖÑH2>PjճĵÎb}iÒ^•M¼žýê«æYÊ„ÇJ‘­’p óš®»7” #¤ÑÈå¶ã úV•œÍGåqÁª*RMCÎeÈôÅkJûБíéU™J*·n¹«×qM”`»}OSQM<BÆ;Uoô’ƒwb*žÕNú˪ŒíOÓ%Š$*B“К×òàFÑ#$Õ ¹¢› Š»7zTÖ‹rbQÀ«éx‹•`7t»“# ,LT†áRFP0r)³•\wã­lÚ¬wY@ãœb{iªŽÈ¡-¡Ü¬C¼SÓÊy8A•9éR¼‚PÀ i¢#,¡”õô© ¡œäŽOqþPXà–¨‹›NÜUk½&ÒêdDbEeÅ£YÛíQ Gˆ­O²@°ˆÊFªx¬Ãil÷ŒÅ#éÅo[["[.Æ5$(™ª±ó w>ÜœµJî%”´L‡±i§AŒÆœN•fKhäÈEÏ­LFCp=*Þ\tõ¦%çÈ$úÓÞÒ ‡"«q=êdˆGÝ »¨¨–Þ!ó\ç­N­òäyíPÈÒoÃýÓVcfŠ=¨ Žù¨îmâ”y…Îk=¬`’pGaTg²eÄK‚§°íP¦—nnš$Èï[qíc8â² é<¤ 9ÆìSô}FdÖqÉò“Îk¦ñ2]ýn!r ŒœWk«j3FÁg`’s]?…µë‰‘ãšS…ç5£­Ýê7’ÛZœ¢¶ ¬¯£ ›S^Ão–" ÃÖªÅaäÝ<¤íâµUw©,ß—Zæ|In%Ó¥à•õ¯3³¿6³*’ n‚·´;K½A<ÓpåOEÍSñMœÖ’#1ç¹Ï¡u¨¥Ÿ‡`aòÈWµf(Ô¤Ó–ôJÇ@­¶žK¿ Ê×8Lä×i~ÖöL‰!WÝÚ»=Êé,ÖúiÉR2FkQ×.õ+×…&òãCÏZ» ë·p_5´®$Lu­½bmKQ[P¹^µÏßÙÜÃâ x¦!˜° ŠöM*R-#G8Æ+S,SjqÆ9¨çfhÊž6÷¨íÒ)aáŽãÇ5Íx—Ãͨ§–§79ô®wćLÑØ.Âö¬ß èÑê:\Êê9<Zº†¤Óãœcƒ’Aî+›Ñâ¹ýÒZü§¹ô®ƒ@Õ/-µÆ³»bÙÎ1WÕÉë~–æ÷íVäïQÉ ß®–cÞß‚ZÍÐô›Ý2ó.0 Á­{F–þÜ8nµÌ·‡®ä·0ZŽ=úÂ-§…ö¨¬´»äÔEÒ¦àæ¬êmýÖ§þH œæ£ñw—f$ò²«ÜU»æX<-å8B8¬òhlÞ(×vþ+oMÑî †FU̯Ë{VF¦ß&¶eòÆ s[Zï†%yRò5Ï T0ÛÞL«nÐÆM6ûÃW_jŽXcÜTqЧªØê7b0ð‘´ãñ®Óé{”q¸Ù°sšèáÁÞ•U¹«á6€r§¥eêQHa}«—Çé^W5µÌwò™£f,N0)¶vW6úšÜ´,©ž ušÅÓŸíemî1\Γ—ap3¿·„dŽîeØÃ9ãGaa¨ÜµÊ•ÉÍVÓgY¼»’ɬdF 2j„zY±Ödk„Ê3u­»}-.n‰·@¥†3éQÙéï¢kæYòWÜ+7Z¿kÃ2#^þ•×·ˆ'´Â‹ïf»{iícr˜Žõ#1u Œ“ÖŸl ,€O9ö§H#‹ž ×ã›Ìؼ*™sÜ ƒÀ·Ch‘²•r1“ë]F§:Cg+`–Áæ¼ÇC¼òõÛ‰6ùûԶײKãáNϸ*ÃéóÛø¥¯Ý "œ’{TšÍœºþ«nÖÈÁ–=ª®«f«©­µÒ~è ¶:cYj°5”¦E=}ª jÂáT…æfY6ÀÓ—†l FáJ9P¶jÑÄ ‘»^Þ(ã0Ã'µ]ûÝÁYN Uÿ²,„²^:ÎçÆâ{ f§¡Ã~L¢1¸°ÉªiÞ·‚í¥û>OS]­¦#·ÛŽ{Ö„K!˜G^êDòH‘(Šå7„÷¤·,jðpjìÈOº„ÍR¿Ñ-n%Üb_ÄSàÒÒØ‘SfÚ±ý‡i-®ó{ÀôªßØÐ¬9xÁ_îÔÉ¢Ú¥º„=@ZTKuˆã ;Ô“é\\üÑ.Õç5¡o¦Û$€¢àt¥¾Ó ‘Kº†ü+è6{•¯g¥[*Æ¥U¶.AaVöeTîÀÝŽ Zò–5URIïVVb,Ànõ]‘d$£Ö³ï4»k•>djÄ>”‹£Åo,)‘ÜT“Ù‡k0e#§­R‹Ãö)‰|• ÐñO‹Ã¶Kp$XWvsš¸ÚU²«©PTœœõ§Áim?»Eç5 Öi|Y"^:qÖ¤‹H´¶’ÜzzŠ­¨h–—è­2`zç ³ðÕ¤7X£Ý·ý®•Ñ4aB®:ã¿J”ÛD ëŽNj9@B®§ ŽžµRçKKÞ%@@Ò°ßI´ŠäDc^OAZpéV¶ñ²ª¨VëÅK§èÖq¿š¡T7BY¼Òín>ú#`ðMUþφܜÅLS§Ó-®–6ÙïƒUî´›ih”Œð Z±³ŽÚ<"3ŒÕ“â¨Cèóçg¦ªø h«ÁÉ®ŒG°ÅI÷¯›a9§ dç<ÔºSõ"ëÃz×Gª¯›¦å‰&Ÿá{™ZêKŸ,q½ ùlÓ½y_‰8×bnûÅzEŸÍe?Üþ”Ë‹‡òN¾”¨ÅâÀªÒcfv®}j¬7$¥6ûUé£QRÖ€·Ò±€µÅ麥ÜÚ€W“"»Ë¸“ž¹«Â$X°ŸÙ]“3Šeëy{6àg­’b zÒ\"ƒ¸šŠ`£«U‰X©‡RØ«ã,£#5np÷©àrbÀâ®ù¬€mdU'ýýÁó50EXð•²ê  TQHD„§Ê7ÀA'¯QUƒ•έ¬)å;æ­["²r*&ù „zTÐJâ%9äŠmÍÔ©o¸•gh¹ÇqÑzƒê*Xþb§ÆJÊ tÍZ™Š‘Œrk:ùC[ŽÄ¿QRر[~¾ÜÒ´Œ (À殓¸)>Ƥißy^¨§âUŒŽh$ïö"¡žæH˜ª‘Œw–ì\înN:v«°áòJŠiùŠuÏ6àúŠÅšwY጗5«ó!`ÝKj ÃÎOÖ¦ò‘ãÁQŽ´–±"îÂõ5-ÇÊÔØÜ¸bÝ…2F%”Æ*Pç`€Ëÿwäô«ò±ç‚v÷©mNåPGœU©] ‚=+:y V‚{ÕÕÇpC/ÎPx©AÜ£>½ª‡‰².—3T|òéÐŒšØ™ˆs‚:ÿÙleptonica-1.70/prog/Leptonica.jpg0000444000175000017500000001510310373310455015073 0ustar dandanÿØÿàJFIF``ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀn|"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ú)’Í ¾i4þó°õª¬éqŒ¾¥f zΣúÓQod&ÒܽER²Öt½NGŽÃR³»’1—X'Y pv†šv`š{QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP«á‹ B´]Iy$‡ÚX(úp+Âüo¨]ÙA, ØO5•NyÚô™õó'Ä©IÓ¤sƽ|¶¤›•ÞËO#‡­n§§|0YøGOKh•$¸g™ñó;79?È{W¥ÇŸ,g­yïÃÈÊø{H 0Eœ C°W¢€ySnRm±I$QE# (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *¥ö¥m§ÆZv9 »h‘X~ñŒ'}A¢„E¬¢%Ëä·ÍKœT¹zšª3pu-¢:z)dt¥ª2 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€°PI8³·-P[9¤Xä“ýVã÷ϧ֭ÞÀnm^5mŒ«zòeðέwâFÔµç IþnÄûzÏß’´±Ú1¦½Þ¯ô5Ї+os؃ ƒÅ-giO# Öu™Q@Q@Q@Q@Q@|·ñ ÷´Dõ;‰¯¨¤m‘³c;A5ò×È-= z¹gÛôÿ3‹öOkðütïúõ‹ÿAÞWà?ùiÿõëþ‚+¼¯-îv-‚Š(¤0¨§¸ŠÚ#$ÎGsOw…@+…½Ô—VñY°æÖÎ14ÉÙØœ*Ÿn§ð®lEw©Ãâ–ßæÍ! ݽ‘Ò wÎ]öÖ“Ii1€~ž¿…"kèI >ðèGài¶é-áÜOÊzT:¥”VÖÆægUÙÜœq\¸¨biRuaSU®©[úû˦á)r¸›6×¶÷‘ï†@Ã8> ú}ÄëmJêìª3ˆÐ±ü…xîâë‰Ñpy(¹þsþH¤êTUy7<×Vª¬¡¹îÚ—ˆtí-OqÿîîÇç\ùø ±+s ëåɃüª;i?d %ŒW³0ù¦ºQ+1õçøb¹íwÀŸeï´˜Ú"£sÛ©%HÿgÐûUUöÉsDªßXQæ½CÑ|K¦ëˆße—§ß…øeÿî+UÝcBîÁUFI=…|é&¥u¡Þ[ê–ÎCÄÙ wØŠ÷­SR³ŠxÎRD¹ô#4ðÕXë¹XLC­ Ës‚ø¯E4R V‘q]Ì¥wuägµpñZx{í›K›4¡ØÂ¹Ç¯Eø§º$„ò¶íø×ðL‘ê@ùx_ý¹ÔdñSê§:qËâùn›Úÿ©éºŽŸ[¼¶ºò¢ÿ¬¸Ÿ¢þ}O°®ÑX0ÈéXÖöyjsÆ*Õíâi:sÍ&2>è=Î+¾œ%µîÏ ¬àÝãUóW×4í ÐÜê7I `p äýrËãýBýº?…µ ›b2“ˈÕǨÎ2?ãt ã_êú—ïì4çÛ@Ü«ÊˆŽ„ÛÜzW¨ÛE5ÙÜI éŠìš§Aò5Í.½¿–.u2vG,~'Kgr-õMkYODv(Oû¹oÀ×O¡x»Gñ䲸Å ½¼£k¯áÜ{ŒŠ‡Zð­¶¹¦Égv•‡ÊÃï#v`{ùÿUµÔü9«8<7ö2àJ‡ŽÍô#®Ì>†. ErÍ}ÆjÔ¡$å¬YõW¼¾‚Æ-ó碢'ð¹oxÅ]ÂÇR=ˆÁ\v®Çµy3„ Ü^èî„¢ìú¶¡ã‹=:–[Y°ƒ$ù›Dñ…ž¯¢¾­$fÎÔ9U2¸%±Á<{ñ^sñ<¯µ.@&<Œÿ°µÏxÆóıÛÿi;aÙ3-Æ@™ËIõœ~žµÃµ]WÐöêá0ÐÃB«Ñ¿ÊÝGÔ~,iP;¥¦$U820%søSO‹BI.-"žØŸ™­É £èIÏæ+«†ÏÌ·[x!Žp»DhTLtÅy‡ü#‘|òÛ"¤—Ø£XuÇ·JX‡ZœyÔ¿å눩ìe v×þöm/V²Ö,!½±e‚Q•aü½µ]¯ ø;¬Kjz{91Å*H€ž›÷ÈüëÛâ}ñ†®ºrç‚‘åbi*UeЂKèàe±Ü?:Æ»ÖlQ·µxIžwÚ£#êOÐ ×ÔÔµ“óéüÅy.«4‘üIÓ6¹à>9ÿ¦o^n#^˜QRÑùÃŽƒ¦åma€F©ˆú –²ôwi Æ®jÑét—@!IíŽõê6’»9¥%v.«®iÚ,>eõÂÇè½Xþ‡'feßo¡j/iäzãÏxSþ&™ñ.  ·0´WäD€ãpÿhyôÇ­vÑ[M:岬—<Õïcí&¯{Ž¥ñV 1Fû1$„íò·lútëøWm¥jRj|7¦ÒiqŸqOb}k”¹ðRɯnö_´Ü Ûn›p°oSï]—g$c.OøS§¯‰Üt£5w7rÆ­«C¥[4²`°RÛsŽ=Myݶ»â n´ÝBßOÓ–C¿%ØŽ¸ŸÌÕ_‹o¯[Ü0²±¸¸³¹ˆ ðÆ_i8éëøÕ?…š^§§hÒE¨Äð´÷U…ÆFr;g?Ʋ÷ªTqwIÍ©áè)ÆÎoçoø&†£q⭴ͪËyoœ<±³Ü©'йá/‰rÝë £k ’ÿǽʻÎ3µ‡LžÄWxúT6/Š H…XÔ+çFÚFµa,yY#•`ô!³YTR£R./FuáåO‡©‘\Ëf•§ÑÖEÊšucè·Fh€cÏJØ®óÁ#Ÿþ=äÿtÿ*ùcÇÇÐ×ÔóÿǼŸîŸå_,xûýdîšõ²Ï†§¡ÃŒÞ'¸ø zMŠJÛÆ¹Ê+º®+ÁÃu§ýqOýWk^SÜîAER–§&ËaîÕæ\Â/kÃ3LcáTžwø×¦ë M‰aü útþµæwq;ÅÞôŠaå¹ôÎ9üÀ¯ [ÙæævVüκqæ¢ìw)u¨Dvvë ã™§8ü€æªÉ¥Ãts¨Ë%óuøþùkVÊsœö«ñYÇ8ɯQa`ß5FäüÿËoÀÃÚ;Yhsñè¡ÊˆãH¢*"à ¿gmöhÂûU€¡FÅ-t™œÏŒÈƒêÇô¯!ðùž,ÕOU ÿßF½oÆßñåüù ò‡œx—Wÿv?æÕÉÿ1üÅ|qÓmÑ`VÇ5y‘YH `Ô?ñîµfºÎÓÂ~$i±éz¨@û—ØŸë]ÇÃYøJW<›D?†Î?LW3ñsuþ«m¤Úósté¶{ý9ü+¸ðµ¢Ú™þµÞh££ÜWüF·/{w é",‹ùcùƒ]ø§jg••©~U“Ãú:Ž‹gûF\ס"…@y_à ðÚjٹĶŒPöIÈ?Óð¯US•·ƒRŠhè§%(¦”0Á £`RÑTY Ìi$$9GRN®VñG‡¼?82Nfœœ,q –>•—ñ'ƦX̶íód¢qÔÕhigc­v‚ãX»Q+Lã&%a«éÁäõ<ö®i)ÉÆ:ëN5R¶­ì¿Í¾¿â­gfÒ“K³=$»}®Gû¸-ú ñ?ÜÍw}m4Ãif\ƾ†ÅäMò“ŒdŠùóÆh¿Ûzrm|ÄÀ…a^ Jw;ð”éU´RÓ¡ï^û¿t•Îxwî èë¼ðHî[iYˆ!$žÜWË>8hf¹Xã•Y”pké­oJ]kL–Åï.­c“‡kfPì=2Êx¯'Ô¾ èþ{4wú»z´±ÿñè౨F\ú·ÐåÄRF¹z_€ï`¾Òlä‚Dqä `­¤?wµâÖ? ,md5 YèRdÿ@­…øylÿ‰Ö¾?íå?øŠÁÃÝÔßÝÿÑJªÞ?üÓ¤–8Wt’"V8¬ñ–›>®4,>¥yÖO³ãË„yß LŸjâæøgc*Ú¶ºs×ý"?þ"ºOhVÞÓÖÃM·dBwI#òò7÷˜÷þC¶)IPŠÑ¹?K!§Q½U¿®eYáhÛ2á‡Ö¼÷X…-®Îð`¸äpÃÖ½Ù#ù³“U5}"ÛWµ1\FvõCÚ¼LÇ.Ž2)ÞÒ[3²…wIùö©EXe}ñŽÇ<{×]ÄR¨d‘Hö5å÷¾ Ô¬ægÓõIc^É${¿PEúF¸ÌïZ`½ ÃSù’•c†þТ¹&”’ë{?ÔªžÆNéØôƾ·Y–*¼ÍÒ49?_aõ«ÊèöqØ®Ûhß{ýùdmÎÿSý:WIm¹oJõ)ûK^¥¯äa+t9¿,àÑÏè+ÊþB·5‰XL@~n ¯PñËm¨Yò¯#ð|:ž¡ªÇ ì¶‘£FÆ ï'séýk·íô<æßÖ]•ô=òÎæ·æp;¸¬xÃJÒ¢!g[›¦ùc·€ïgnÊãÇ‚¡™÷Üjz”£û¡ÕGè¹­Ý'A°ÒNëIHæf%ä#ýæÉüoz²:/Z]üL+A»}Nok@i\°Áœ‹t?û1ýÍvšM¡‚=Ärimì™Ø„Èõ¯¤|%â-{JŽâÒU`@Ü™ù£>„v5м¥xž ^Û‘GÉ*ü®ŸB?—Jóؾ^èׯmÄ–L8 ³qÇ¡ ®kѯˆ£‹JS÷eßtqÓ¥R†‘ÕÒHPI É&¼WâgˆfñF§†|8¦î~DŽœ¢ òÄö9ÿ]𶥨B°ë^*Õ.âþ(¡U€7×­méžÓô›ci¤Ø¥´lrä]Ï«1äþ&¹á:t=è¾itìeTÑ«#Â>‡BÓíôÛœGóI.0ds÷›üö½Ý<¸Uj¥Žž¶ë–ÖgõÊÝÝÙºG…|[hÍåä~bï2·<ýÑ]/Ã< i q}M/‰>iºÔ·sêš¼³ÊŘ™cäÿߺ¡¢ü7¶Ò®Q£¿Õ¼µ9òÅÈEo®Ðë\t©Ô„œ­¹êâq*Ò…4ߺ·¶ç®¯ÝJóÿ‰ÒǬäTýÓõ?Jíìäc©cæ$žž§šå¼cà+/Î.o5 I ®ÔŠQG°(OëZׄ§œØ°£]TžÈòï„è‚óUäng§\|Õï¶œ['Ò¼nßá5Áx5 Z3ÓrÌ€ÿèéڰӬⴧe^­4­#îI§J2ŒTY8©Ó©7R~–4õŒ™öþb¼“PA'Ä+yUÔ…Fý“^³©XBÐÂÓÍ ž¦"ýA¯6¸ø} Z¹ŽÿR2g9iÿˆ®F´ñQ«¤WÞL'MÅõ=FÿEúVôY¯ôĽ´B÷ÙÜ‹ÕÓ¸ã¯çVô+YtÔØÓÜÌOy¤Î>€`~•Ñãr ÷Üãí!Ë5kœ•iƤ\ÇÏ:F¨ú^¨·¶Œt’2pzW³è^+Óu;dhH¥Ç1Êv¯áX>(øq§jÓ=ÜK[†9/Àcî½?,ã‡Ã­JÞl rAz nqõÝý+ž:Ô´Ž¨â¥F½#ª=’çUÓìâ2Ü^Ûă»H~£§oö›u³·ú¹mó¨œ{žµçzO‚ôûyV[Ï´jŽqrÙ@ÝñÍwÖ¾sãpÂöº£Îþ#²Ñë-Ÿ¼xmBæÂ\‰mæd ýx?Zô¿ê–Z†›m™£¤j’FÌR:zqÅixçÀ>*è;Zß*íÆ3¸v ;ÿ:óhþêv×_\Ûz¥¿ÌGýõÇë\”éV¥7˪gÐWÅa1T¢§xÉ|ÏbÕÕàÔ$»º¹¹€’™Â ÈÇAõ=ëÕ!•Þ0Nsí]PrkÞ<ʪš—îÛk̹M1¡<¨§QTd3Êû¢*?îŠ}Ï*?îŠQ¢EQE1âG2Šìpÿp~U=B‰÷V¤¢Šãø?ã]×ÄRÎÑV)dg’~P}k‚øw©éÖS^,÷qBd”8ó(#ëÒ¸Ô—·gd¾²Û=ÒÖÞ?%IPOÒ¬ˆÐtQUôëˆn¬£šÞh溊‡ì±v¤XÕz uQEŒªÝFi¾TÝú(Uz P@#–Šg•÷E(ÈP :Š)žRáú(žRáþ‚Š(#5[ÄÇ%KED¶Ñ)ÈQR 0)h ¨¨ZÖ'9*3ô©¨ ’Þ$袤*ÁRÑ@}š,ço5 E€)h Š( Š( Š( Š( Š( Š( V𦋨yô«Y¥c’òF“õ5Î'Ãí"9w.hzy"½“ÐRå]‰åc>Â)!DUFŽ€VS((¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÿÙleptonica-1.70/prog/barcodetest2.jpg0000444000175000017500000002020010770123131015522 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀPÒ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷^i1KGje EP0£qE©(¢€ (¢ïbŠLàæ€ÒŠN( c&”u¦ž)hŠõ£¾h<ŠSÏJ9¤—µèïA –Š(æŽh¥Í%qE-%P0¢ŠCÔPž”€ÑE/jJ3I@ ÚHz -%q@‚–’Š\QÍ4dâ…™¥ÅéOJNÔdÐ â”àÓy¢€z %¼ÑŽ(É¢‰EP©ZZJ ŽÔf€QF}(÷ ”½ZCÖ€ (æ’€bŽ´bKžh) )âh¼QIE@ëŠAHx ¥i½©EÒ SŠNô´´™æŠRÒRŒPE-”Rd§®)EÞǤšOóŠ7!O?¯?Ê€Û‡üë/ÄwSZh·3C#Ç"¡ îéùU- Pžïà <òn¡;ŽsÞ…¨®o™sÓ¯­.sÉuœu¯Ô¼]­C¨ÏzƒíW`9®ÚÏZ½o5ÓÎÍ>>÷z–ìì7µÏFÞ>uÇÖ“wGâkÍu}QƒÁ1]¬ì%oâÏ5â Fo A,·.di‚äÙâî®ÞǨu¸4…м£¶IªÉ;ÿg,€üÛ3“ŸJá­5Ûù4­YÚã&9R{Sz ì™è%Æ2X}(ܾßyޝ®êPø6Öî;‰ìÀXþUÅÿÂo­ÛöéRmsè Ã?|LŠ cøÐúó^wu®ßÇá{ …Ÿ÷²8â³¼mâ=OO{!ktèlŸj.ÀõmßíÊÏW·"¼¯_ñ¥iá;+¸ndYŸ©#9­ÿ‡ú½Ö«¢¼÷“™eÉä Qq©#‘ÓóúR†užr+‚±Öï%Ôõˆšà•„ƒ'å­¯_Ü_hÞeÌ»¤ÜÃ$qÖ…«°8Ž¿îÐ$N›«Ï>"xƒRÒ&µ[KŠÄä¯z†ÿÄ‚x2źu™±“·Þ‹é[”óÐúfÙ8ä}G5æ¾ñ©uá»ùå¹Üè V#§•ÖøJþkÝ ¦”¼‡9cŸSB¿G8 t¥Í0&Š8¢€8¯ ø›UÖµ `¸·Hã‹!Ø7®ÛµsÞÑÿ³4±¸6cæ>}k¡¦ôBBPiqņ`x¬cÃ×dqò•CÃÿÂ%'”?Ö´|Vâž»ìÎðÐÇ„S×aÇëN;“ÔðýPík¾šôŸ‡çÝæ¼ÿVEþÕ¹Ãrd?νNÏü 1Ž?¥D¾!¿•õÏù'¶øõ—Ç„-ý7_çSk||?€{ÔZo>¶?ôÙj¡¤_È'ñ¯ë¡êÈÇû-y?êÇjó½9OöF¸÷Ûú×¢ Ùiÿ\ÿ¥yΞs¥k~Ò57¸–Ö3ü@6ü?´ òàƒ‘Åyê¡Ágpzf½_R~ÛsÏõ¯7‹ ør¥L†R¼ÈðvœI#÷‹Žk+â+ú~y&1ZׄiÙéæ.++â$j[OmÙÄc•'°ú â\/´þØÇJê¾ ¾|“Ǿk–ñBçÀÚå]?ÂàWÃ.'qȧÔ]ô豫k¿7ZÞð#AÛ“÷ÛùÖÿ!msžÆ·|ΈßoçN?ºœÅ½Æk\Á5[TÏü+›~æ­|W?é6ƒ±8¨5%ÛðæÜžqŠHor?–>ÔI6Þ¿wþÏü#VÇ=«‚ðyÏ…u qòÿwþãÃvÃÚ„ éGJQÒ’–˜´PQB¨SÆ)ô‡š(h=);Ñ@уâ±ï|†¨økæð¤`ñòëWüVâCv?Ø5ᯟÂ1û#S‰+sÄ5¡VåSœÈk¿ÓAÈ>ŸÒ¸]\*j×8?òÔÿ3]å‰ÿŠˆþífß¼†þWÖò~B@çµE¥’<l1ÿ-×ùÔšÁÇÃÈ 3J;¼!lé²ÕCgò ŸõØõuñ*^yØ?•yņH×½ëчüƒWýÁü«Î,ä®ÿ¾õRÝú‰lQ×܇ö‡¶FkÏoš3~9®ÿÄ?7Ãë]£¸¯?€«( ÷銉l4z}ëøC´áþÚÿ:Éø†YŸOÇîÆ*Õ¼?ñGéßõÑk7âbM<ÿÓ1G@â!»Á:x÷º†K@¼k˜ñá °lWMðÑËhªê>„Z{(ÕµÎ=kgÀ,C8ÿžüëOçV×s×·<Ɔqÿ=ùÑÉêr¿ÙìÉìÄæ«jxo‡0çî÷ö«?ÐÉ5®20MA¨œü=ƒ<úÒC{‘ø(áMDÎÓƒ^ƒàÿäÃúšàüóx[Pø×wàùmù¡:^ô´E0 (¢€AéGjJ(íE¥Œ?ývØ5›áž<$ž›´|Wÿ"õßû†³¼5ÿ"zgŸ‘©ÄOsÂõµgÖ®€$4ÿ:ôM7þIùÒ¼ÿXeÕÎϘk¿Ó¿äAcÛmg/‰_"Ö”‡ÐóPèÿò'Û÷zÿ:›[?ñ@DÞ†¡Òùðu¾8ýòÿ:ª{?Tø¿®Ç«¯:bŸúgý+Îl8Ò5ÌóûÃ^ŒŸò Oúæ?•yÖŸ“¥kŸïš©|OÔKá(ë ŸYƒÁ$s^vUC1‘^‡­6ßZ“í^vg#8J‰•Ó/3ÿv›ÿ]ùŠÌø‰ÓNÇ]ƒ?•j^ÿfŽxµ™ñOú3þ¬*:_¹_iÿ…u |?&3Ô×%â3éìyé]WÃ,ŸÉ‚zš®£èCbvêºàÿgúVç€xЯ˜ßιëo^㺇ãÿ®üèŽäõ9oŠçlÖ˜ë“Uu,‡U¯‹+ûûBzdÕmSþIܺRê67Á¤Ÿ jÿø×{à~|7o\ƒAÔ{ Ÿã]÷ä[·úP@¥#šhíN&˜ æŠ\Ñ@Í%PA4RÃñYÿŠzïýÃYÞ?ñGÇî5hx¯þEë¬tØx¬ß |ãî54.§†ëv¿uŽÒšôM ¶#ë×§Ö¥Ö•á_À2–Wþë|ÏeþuTþòýSâ=]1ý–ŸõÏúWœé¯ÿÍtÓFþUèÑ‚tÄãþYå^sb›ts¸ÞÕRø|&oˆIÿ…}k_ë^pe P)`A¯IÖøð¯©=óårÌÀ~*$8ž™vŒÞ Ó€?ƿβþ#ƒÿî€*Ö»m¾ÓÉ?òÑsùÖOÄS¸iǶÁG@â@ƒÀ¶$œãÓü/aÿìžìq\¿ˆ“>°_Zé¾.<9/¨cUÔ}tïùëÃØÖÿ€?äsÿ=ùÖŸŸíÍwèk{À °›þº7ó¢;“Ôæ>+¨y­~lüÕWP?ñn çÒ¬|Y’×¹ªš‰áÄ8éHl<§þ]@³ý+¿ð(džàÏ¥p^ oø¥5þÏø×{àfÝáÛLP8è)){RsLAE- Z9£Š\Ð1) v Fгýwþ᪠ø=?Üj¿â³ÿýçýs5™ásÿzcŸ‘©­ÅÔñ ]?â{t}%5èškÅÞ»zWŸkA—V»;¿å©þuè:bçáóäT?ˆrøY[YÂü=„š‹K9ð…¹ÿ¦Ëüê]mOü+¸G¥E¥®<oùì¿Îœ>ê¿AOâ=b3-?ë˜þUçZnN•®ƒÓÌzôhùÒÓþ¹å^u§gû/]ÿ®ŒJ©üAÐËñÉðòØúμáefa޾µèúþ[áõ¾Gë^t¿)ã¦E-O¼þ½?ÞE¬ßˆ)ӿ똭K¦ à­;þº-eüDÿ˜qì*:—ÄdŸXqÅt¿ ä_“Ý«šñ nð.žÚÅtŸ |;/±§Ôob?þCšð†·|ÿ ?é£:ÁÓÏüOuï¡­ï‡ÿò$ÿÏFÇçDw'©ËüY\=¯ÔÕ[ñ‡ÍXø½##Yª®A|fªßø·/¨Ò[ ‡ƒ¶ÿÂ)©ÿô®ÿÀ˜>·5çÞ çšô_ñ®ÿÀœxjÜv¡:Žô½©Z)° (¢€E%- ) ”‡â³ÿýÞ癬¿ ø=01ò6+OŃþ)Û¯÷ fx\gÂŽŸ#S[“ÔðígiÖ®@bzsù×¢éŸ/€ îyæ´¨šÍÑnóOèZcøWçéPþ"ŸÂC­ü:ˆûÕm,àû~åºÿ:±¬Ÿø·çÖ¢ÒÕGƒ`ÃËuþuPø_Ëô"=b?ù¦?çŸô¯8ÓÆ4­tŸï·ò¯G‹þA‹ÿ\Çò¯8±oø”ëãÑÞœ¾!ô35æÿ‹qjG$‘^h…÷í#Šô­xnøsj0¯<#Ë952)lz}ÊgÁw¯˜¹ª?0ŸØ3ùV…ÑðƒéÄw‘k7âãOÏüótï.< cƒÇZé>œø~_MÝ+ñ>°õÒ|.ÇöŸï}GЭ`TëÚèPsƒ[ÿùÐÿ¦üëOÿî¸=ox+¡·ýtoçN;“Ôåþ-)w¶?xš¥¨|¿ àúU¿‹a·ÚH95SP?ñn!ÊÔ­†÷ÁEáÔˆ½ÿï| φíñ^à’_º˜ÿgúW¡xvønßÖ„'¹Ó™¥¢ŠlaE-¦Š aHh ô  /sáû±þÁþU›áù#=ü¶­/È¿yÿ\Ífx[Ÿ§ûMnOSÄ5pN¹xé©í^…¦ÿc°þ•ÀëåÀàŸ0×{§ø T?ˆ§ð‘k_òO¡[I$x:?åºÿ:ŸXl|<…»Ôzcàè6ÿÏeþuPø_ȉüHõˆÿäŸîå^mcÿ ½{ßjôxÉþËCÿLÇò¯:°#û/^Ï÷Þœ¾&5±›®óðîÔ'cßë^yÁm§æjô=pãáõ¶?¼+Î}ëÚ¦E#Ôîïƒ4á´`:ÿ:ËøŽÌɧœû±Z·LÍà­<÷2/ZÎø…•OÉ÷cš:oˆÿ„ÀgŽk§ø`6èÿ½\ψÆ| §óõ®Ÿá—:™é¸ÑÔ} öxƒ]úå[Þ?ñ"oúèßα4ós\úJÛðΆßõÑ¿Tw'©Êü\Ë5¶98ª·Ù íÆy5sâÐÇÙ=2j½ëøWPg¥ î3Á /…õ.?‡úWàSÿäò®Á»ÂÚŽÓŸÿZï<â›·¡n&uR Z¦4QE!ޤ b”ô¤ŠJJZ\ PŠ¿äwÿ\Ífx\Å ƒý†­OøÝÏÈk7Ç…cqòëMnKÜðg?Ûw˜<ù†½Nçáó»Ïå\±Æ³tÄu× iƒ?\tùjÄ7ð•õu-ðî E¥.ßÀ:feþu&³•øuRZ›¥6ï[ÚeþuPøËô¾$z´Cþ%iÿ\Çò¯9°éº÷ûÍ^“ü‚ãÿp*ó}??^_öÍT¾ [ZéáÕ¯#¨¯9R ·5èúâmøol¨î=kÍü½­Ž ÷¨Ñê· iÿï­f|Fá4ãÿLÅi^ xOÿ®‹Y¿~eÓÏý3tÞ!ñCiã׺†þÁ—ýã\ψÛþ(;¨®§áˆÿ‰Ÿï:¡ž¿ñ;×?Ý5µà ÿb6xýáëõ5‹aÿ!ílvÚ•mü?ÿžÒ7óªÄOS–ø´ o›zUKý£á¬@œÕ‹Ä)µÁÇ'¥V¿ñláç&¥ ‡À>Ô¿Ýÿï¼1á¸>µÁxáMDç#o?­wÞçÃp}h[ˆêJ;QEWQ¡(¢Šq<âŽÔsE Š\Rз18ôZá5PƒX¹óææk½Ó| õZ‡ñü%M`ÿŸ‰išHǃ ÿ®Ëüê]`Å»ˆ÷ÿ"l?õÙT~ò¾$zÔ_ò ‹ýÁü«Î4Ñþ¯öÍz4ò ýÁü«Íôãÿýxú;*©|BZD¡¬0mP@aÆ+Î]¼É²^‹®É:¶qÉ·Ö¼á$Ùü$ëQ"ã±é÷láÓØŒþñxük;â!ýÞœ@ê‚´®<`O?½_çYÿÿ‰pÏXÅ/ˆ0< b{dWOðÀÿÄŽ\ÿz¹­}U¼d¹î+¥ød¸ÐeõÝGÚBÿ‰þ¹ô5·à Æå£:±ÿþº3Žò­Ï‡¼èOÿ]ùÕGâ'©Í|Z+þŠHMR¾qÿ ÚØv«ŸÈ?ew5JôŶˆzRࣟ ê?îÿw~Ïü#vÿZàü Ï…µ{¯ø×{àOù ü™¤·:Š))jºŒZ)9¢€E'zZ@%R”0üSÎ…wþåfxPgÂ1õ嵆^¹‘ðê݇"¼î1Ÿ— “Ú½[ÿ’wl}b¼ö‰Çz‰LºP<`?éªÿ:Íøˆ2ººåZ·8oØqÿ-ñõ¬ÏˆL£û79ËëéÅ/ˆ2<`:k§øds¡ÊÚ®o^;¼ `v“Èï]/ÃLLxÑöìë§ØÖç€_v†ä 1¿bX€uýsÝOò­¿.47ÿ®üê£ñ ©Ëü]LýŽ»S½ñmaµ^ø³ÏÙGxÕ+ßù&ÑýjF÷à…uŸáþ•ÝxþE¸?æk€ð@ÿŠWQöZôÿÈ· q3§©h(íUÔaE%ê){RRi ÑÚ€0üOÿ +¡ÿLÍfxW‰þéþfµbôúÖwÄ.!ÓÉþç_´¥m¾ ÓÉ˯ó¬ßˆƒ)§Ÿö…ÐMtø@ì:Gjê>4Iè¥s^ Ïü –]±]Âñÿ)NsÉ£¨ú °ç^Ö»e?\V×€:#óÿ-ùÖ%™Î½­z)­¯ÿÈÿë£:iûÄu9ÏŠ§æµÎ>ñªü|8O­h|UMÆ×ýãToзÔ¸üélSÜÁþ)}GÓmwÞÈðäõ®ÁHSÃz'¢ÿwÞ;¼;8ÿ3M÷:zQF(æ˜ÐQIÍ€’’Š(R:sKI@#W}è*åŠY~†Eðº$ˆU‚ u ªÿ+r=ë ]ñ–‡WÈ~ê%4ì++¬éwïªÏ$v²°.z)æ»2ÊuðL‘$cî‘ZxƒV¾4+„èK€3]­¤{íÐË–Är¹©ûW+ìžcªÙ\¿€RÙÁûOJJ³¹OÑ q0Ê•5ëR·˜¬ëqh°F‘*4Ò63ÜÓøW©-_S^%`‰H9)Ò¼úÂÖqc­©ŠL³¿/Zô[Ik(¤•v3(%}*AŒá@ÉÁ÷ª{Š;M¬Ø\Éà( H˜º¶J…>µÁ®‰¨±Ì?à½ËÄž#¶ÐãX6i>äkŠç£ñ.®Š&“A}GÒ¥ê=Š·w àË(„[ÌŽâ³üye4écåC#²ÇÎõÅz~“*ê|S=¸ˆ°ûŒ¼Š±waf‡eä cùДkvsø&Î! åBšèþÛMi¢È’ÂÊÄžH¨ç×|F&1®Š Ç#\xÏUÓî¡·ºÓ¼•‘±»~Qœ£umwÿ ò(Ä,Ò‚>]§5¿qã'½•“MÓdºQÆYk¡Ðfº¾µ?n²û9åZ:½NÁö7qxsSÛº;)Úë]¿‚ ’(Þ6FðOjè½@ö""¨Uô (íGq@Ä¢Š(ÔP( ¢ƒÖ’€±Ž½+Í!Š;ˆÒ­áÜq¿5釜ñÖ¸ïxZKÛÄÔ4ù¾ÏxƒóùPT¨ˆ¡T(`b¤ã<…ü«Í5-KÅšŸq,LŠÀek½Ñ.å¾ÒážAó:äœÔ·i$ ²º¢—'’N+Éî¼Gk?‹^{ˆ¤™-ò¨ª™¯OÔ÷6Ÿ6ÂÙÙÆµr>ÓlΟ,ì“4„É»¨çü)¥Í17mÑhzýž±û;è>hÈä}k\òzñ\#A—à‡ "0/OÆ»°8ÿió!yo­¢ÇãëG¸ äíùI ô„R÷Àf¹ŸÚiï§™ï@Ü£*ÈA5‰à]^[‡¼º¹‘-AÌjä’E&3ÑÕp8ÀúR°-€yúŒÒŽ1Ô †êf‚ÚGÉȽ03µbÇGµinTú¦¸]>ÞóÆ Žöd1XÂÙ@ËÖ—E³ok“Ýê Ub­zE´0ÚF% £ €'H„KÓ¥qß<Ïì0 Üö®ÌN3ØÖv­¥ÇªØIm n‡WÃÖö°höþB& GRkir:μâ3Åz<6·I, r¡ºŠÜð^³}ªGp·Á ‘>>C@n(çdæŠNh¥¤4QE´w¥íI@Àõ¢Š(>Ã'µsâø‰®Göi‡ËÇ9àæºsëI@q¨èž'Õ­ü‹¦„'_”×m£Y½Ž›A(¸â´6AùRâ“åpÊ …#ð®*÷@Öl/e—F»TIŽYšíù¤Ç úzSÙÝåü;áɬîÚþþq5Ó p0tøÇN~´ï¯?Z=iéÐÆ^Ö5«è¬‘ˆSœÆj M;ÆVqª,¶áUp¡3^Œ89 qÒ€3tU¿[%þБ Ùç¯È—d¹©JJ@pW¾Õ,µ nô{Ï)d9d|òj[-Ä—WQÉ}¨í‰:¬Y»œSqÇ΀41¨ÎSU5Qzl›ì;EÇð‰:~•|t£×Þ€8I"ñŒ‘´dÛ|Þõ¡àý÷HŠá¯ bI›qØ+©Ú=)Ý=h£žÔ´´”£­&(ïKÚ€QE-%(¢…'4¦Žh(Å-”S°1M¦Gj(¤RÑJ:Ð!)9§RS¢–ŠNÔ‚Ú€ñEéh´sKJ:Ò´½¨=h šSGz(À¢Š(¢–’….h¤=h¢”t¤ Š( AEPGzJpéšCA¢ÐÒQE-v£­0H)M¥'w¢Žô€ZSÒŽôQ@ E-sIÍ-!4 ^ÔÞM-(ë@ Í´†'z8ŒÐQIK@”¢€ÖƒÖŽ3E'4w¥âŠ(íš(…Š)h(ïE´Q“š(£µPQKEÿÙleptonica-1.70/prog/cootoots.png0000444000175000017500000003100610427545121015032 0ustar dandan‰PNG  IHDRyùø8á„ pHYs.#.#x¥?v IDATxœíÝMãÚ™pjtÑì 5Åkd‘Œ¬s nÜETZç¼ð&@¾AÐN/¼zL‹*—q•E£c6R(-òÌÆ ·jd4gqÑDvÀpQ¦q™E€&A }”>Í“sHI¥jQý°ªôVÆó·o•Šzûõá;y^4±[éjÛ|AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA¹ȧ«c\ç M_¡c–»ƒ˜VY%dš»ƒ"m-‹ßÝA¾¦ÑÉC>{iöÖ@ƒkÛÙ)PwAÆN4êªG„ɲRŸÃi¤Q^Ýè‘fH ×Zº¯éòÓ|c ÿ~…t?P¤$Zu I“üCÓ»šÑ-Z›éš>Ð*TñÕ£ªU%èzÑÚH.ؤ Ô£ŠUºÚ¾v¿}ÜAéÔÎAògÚ“å´=–ƒžMAÚ–A$¡!ÿû*{ÔÊ@µû¬ôL-9h lT“ Ïål3%äI6ÛÚÚ³í>Ë@Of g»:Ø%ÐÞŽä‘âƒmo-»Òf {íÊî2–€¶t<´t¿³£•Ï2ëúddÓ âêh[:@“ Û¡9ÐvÐR¹Cý¬doï͸"ò( ¶v<ô¨äo ts–Õ¦³ìž—iV6˦»›o ôhÉáÇÖ@û… –<ŒÝ¨x–µ4Ay–,C[Ânt°pÖÑÒ¾ÚÎZ¦.Xíg'Š TŸíË>ßÖj¯.éÕg üTúYv~¿eP{g@ê:õ ”_ýP ÇÛºú‘² VOäak~Áê™ükk—cÔ­;»¤—²Kz ´µ+hÙÝ ìòëy”¨.Ä*Ú~oë¢'—³&Ò .— »+]F$— ¡‘î–Î:ä[‰³w§³«ÓÑýn£ý9Ýs]OAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAP–ƒR²AÆu–ƒ¸±IÇ,… ¦&²MSò‚¸F…oàÛ›taR!(U/܈҅IÅ J6*Èe õ«bT–€ª'‘eøµ®úºfÒò ƒ(6ÎîZA_—™fÓ<¼úa°Nã•^í5Þ±ŽC&£u‚ܫҠ ï|5oh¬¯Ô/¿â},Ñhñ +Lðê ‹ŽÓG4^§Gåw²„ìñø5MÖ ŠíÛ’×k.¡èV :\²fЭf=#úè úŽô6 &ê%Aœpªµ|]k|ÉåÛb W8‚¤4µ™Üë&ÙŸ}A¥ÜÏ?Ïmõò@NÏ«—O'dÏ 5!{ö–ÖIIÁi7zö|`é7@"ÅÙzÈž>ïMÁÓ/¼ñ|0û̃>¤{‹ûÊ¥ÇÔ‰xÿ©â^[ÐiЖ‚ (‚‚ (‚ò€@WTÌe9È‘ÿ‘ÍA¦)©#EO†¬õ,¨8ŸÅë=„-L1H°JP°…K2Ÿ¹[¸ÎX òE¶P{;ú'ð=iâéïèŸY…í‹>ÿª®?þb@çü;‰,Â#üüñ€jü0¼8” xöj;Ò¬c/’ðl@©õÿFK¹ Ž"AAâî(5c‡ô{amÄS3Q 'V ŸmÄd )P½ún€¢®á× £J½mo¥ß/%È'aôÃæfwhK߉¾à¥äùÄAþ«Í)æò€Î:nuýruYúø 솲´Ö;SËó€–¡-APAPAPAPAPAPAPAPAPAPAPAPþ\@dµŠ¹Ü ´ÆfËK*4‘üwªªz²Åúž©­i^/©Ð41ðªü1¨,¾ÂÈ›/硋ϯ$Nª³/B/¨€jˆˆ“Éãt Þ´±¤¡ÚÝT@5ÄHL—£Õ6Ìÿhœ8ͧe¿¼h(f‹Ý(º1;›”ÏgrEo•ŽR 8Mª\ÜÉÙ0h >Œ2Z¤$á”Û“>¼ŒÈgN¯äìô^•h—·PœjQ«KqUUf^\2#jÒÏäÚ§ù¾(ÐÐpy¤Y ê›ô·t½ â1³f¨@ìò¤ËŒÁ‘ ®ùûk"gÚ?êîè³Ï4ë ýÝç´ qßJAÃ(fúP®Ñ®ª%|ÙgZ½IDûš]'iöºQÇ¢g%kéqÌÈ0ÛÄ …¢è ³/Èžü;Ž£ƒNS†=·gœð¦EëRJ× ÒŒà&Èo1»N5ù·|¢aå ¡wFN%¨YkÖ× ¢îˆÑÈüˆuĉ\÷‡£¨ÝîPùLoèíÙ=nòf#­´X]%Hn÷$Èb J+¨§@Vºz,ôÔä掠}{Í ^Àl7ÛÕV`3y(2䈵xº¨ #=à–žì­äHPo rF£XíÝÈF,b du]‚þŠYDü‹—+ò,ù½ Ë OA£¦Ú>~‡ÉXýźAÆi$wV| †DʼnüϘ‚Râw¨*A¢z²VP:‰w4R ®Ž¢(¢©Á©¡+¾vP¯É];§¯„/Üž›ƒžÈ¯6ªäËßœF©ñ‡)ètÝ n¥%z6§r_a÷zÞÐoýÔ{ÿF¾a=Ñ u@ Cî V#ÔX/HžgtŸÅ¢kGlß Ú×´vM>ñ•íêÐ?šZ¬Ù¾f“•u¡² 4IP T#>u}Fµ·$ä2ˆX ¿*A]¹öå3‚z³:Ð$“õiÖòž 7P‡ÏI(Û“Cí¡z>«ìaæÏåÜ~}AAAAAAAAAAAAA”‡Ê®s”¹1>šÜÏŸ^ QW¹o}ÿs9èà 3>¼šNøûëEÓïSWhFÙ×*ÃAïî ŠåEöô¯ ¤®PM¾çúùt"£Œf·Dûêg­¬Éä¿Aª÷ï Ƭg„ìææXD—Ó ÓjJâg¿8UwfsÐ^㨟}œqý–[ƒŒÔ›õ0gíÝç–¿«¯^>õ'¨X8¯îRw¿å¿û”Ïz›€fEÖÏo«%ƒ©eG"1-¡9ÄØá]Ajùß9¨ŸM˜”P<+2’_á æ@Y‡­Óš}u?ï <•¼¹Rßö¿ä)Ñ ÒF¯%è4cÎìÓQ].ž}ï”™ßQ‹ªµép䤆/ªi…Ó~E¤ö×T#ý€rò¹=T rrɯ+pǥŠßÛâלºnZô¨AÒJd™O+þžîâT¢º&|V• ˆt}C‚Ò «DFòõníT‚ªá†F4 :3´K¦w+þÝA¦5vûŽsÞfš6g²„XXoGõ®/ÈY+4*"ˆGr¡FËHôOò%qÒ»8–sÉú‡q„½I©A‚iäìga žÂ«ƒ~k‹ß˜Ià¸Îox[˜² Žû±{ÖŽUÅ­Ö"‚$Î&Zm‘þèÆâ8pÏmµPAÌ‚D¾¦/—¡ºeGd‡Á(ˆáês*~[KN%¨-A‡rù‘ ÝÛ{«UM³üßÉ KŒåDw¿%KåùËcþ|ü­.ߘÚ”¨ž‹¼¾]´l¹ Ñ0ŒÃÞf—Ü¿ªù¤ïöÚ©)¾ŸƒÄÀªÆŒ¨m¦>  ÄÔD³*·ëÏÏ$h@.ô¼„æ@5u¹0B7Ù]@ª„êôr$úÁ£vÚòÓCùݧœÆj'ÛW7¬IW‚ 1äD‚Ž~+P µ,Ü|–ÉB Ç©d xcTJåæìÕ NJ+t¬>•Û±ª•&7Ë^ê¶…«úWN[¦¹¢’B Œ T³e õñ¿»È›€| Šž1YBOåFq R÷[rÐd–¹ªCèkP4+¡Ä§y )ã°;ƒT É-ë+?‘/A–hdkÙ8ÿn¹žô¹í^ƒR*AmK-Ôœ›Óµ,I"»ïä 5ËøO‚8LᣪBWIGòßÅ"Þ±„ig«½Ñ)h¨@±\íÅ0YV›Ç‘qJ‚xä_Ô¿È—!þ\nJ®ƒìžü·²ÄacnrÑ$ÜR…¼ÙkGU¹ªZJ"'ŽÂzCp‹·Û‘ï‹—mÁ‰ÜàDqt2’ YBgÄŽäjßä¶²D ÑEPEÒªÐ9«vù8ÕXÓ0Ô®#²}¹arסË?÷u5ªÂ§‘®µl^j¦µôÏ*òØrà_²j¤ùrדþ…®k¶oW?«ø-ý²Dý¹EPUÕƒSËHj¨ýù)³‰4D"²9aœ\É”*“Û!f²„¹ŒÔÕùAÛx¤ç n°C¿jèBÿ;ãRD¢Z­FœÜ ´² ‡‹Ólð]ky‹{ÒÔßµF³Êç>™u–Ð⮽D?fkõ;*ÑÇÛAþb=ìß®4;«½N‰ŽºâņÍAP ÈØ©Þ²›èܯ`3°$w:Y U Ÿ]Y ¾|h²ßYO½ûY4{aZëpaBXöÂ¤í‚ Í,åÌÜYÛ’µô¿^pÀV r™P—¨9Ùß­e+Pt"O2¬yZçiF%jk\_%^a ØŠ«ž6˜iÜÞ@ï}Û¬hƯZëlë Aœ[bÌÛq Ü¡ëxuÒsj‡kðß. jHO$È ‡PÇ1×R×ÿKRSÄœÇzzI©söÅZzË/»Ú3 ’%$—c òº)uÞèëvÜĸ<$÷Ô,S º}çÁNâ äN@gÛñÔÊ굃Ê.Ô¼ÓVËPô>[¨] r²ûO×/Þ.£æºé«',¼â ô€Ù¬ÑnWEÏö.÷i¯§5èt ¼øz <>/˜/#¯7an~ ¼›CÒ9"-ØAï˪È4Dåädà›†^í22ï£1îÔŸÁõx Ï/O¤mŒ‹AWsE›L~ÚE/¼g š<˜Ó ­APAPåá€o×Þ¨&Á²K;+kæV´x+çÆ°àì‡êç:H)>@£'“‹[ÆÜAf¬Ž/Ô_žNñçꑳøÞµ€RN@NÚ˜y—ª…)ÏŽJ66Ëf —·ç@N~{)–¿6 2ÂÉBíÎÝáJD/ï$N%h³ õ5ˆÔ%Ñ ´©eHüèmìƒ+NÙñ»+~ì ý\®w½ÈÖÿ`ÙDü°Ï“õVzþÖOü'§â4jÆ å¤ú]§~ª?nIeœ„F㇌l”¾xû«ð¯ß6¾/þáO±oœµ(ûV³^ˆÿúøONB;ÒÆÎaX7+qS £· —:â—:޽š<“qÏÚ‰øþ7ã°ç _KÎŽÃ ói°1ÐøíSôñß¿‘ “‰Ä•ñåï“ÐñDÀSÝØÃsúwâð÷ãàÅDà^…âé¹9äó±{ayñO¼i„¢q®@czõ¡8j®Ó— ‹Ý +qȆ@<­SoH%Ègm rê/\Ñn„^ Xì[I£ @L3/Ú±Ô~_„,d#ï¼\l $$(®Ë¥Æ²’ð¼•×0Ÿ»irD8–3Í;h'gtC &A¯_Ô“‘0ÛqøòY"þ¨›ß«¦ûcUXðÏ—ÃÏ£—dS Ú¯¾þáJ^Zî×_ÿÔ|RáfÔªöâ2jÕ>v¢îÆÐlÑóŒá{UqûX\Õä!œ_'Q;”ŽÃˆ¥‡á×?H†dC mAPAPAPAPAPAPAPAP¥ø ùxJJK´3ºmNDAo²K@“zÅãë)k¨¾¬Ù¥@ª%0ÔV».c ¼v©fÕÂÚ|z‰Æs·Í\wŸñÊdßå¥Ü¦“ ‚þK(ž€èl ‘ÿUsP‰këE|߸ŒOâÑ)ÿ—ˆ¨xú“=°æê¶·1¶ot£JìWXEè"â¿}`†ft/£ýí€x’’Z»­zª ââ×?K¼žNƒÄé®dßôBÐf;ï©BôûŽøÍ×ym‡¡»º{õü6 @4Ÿ´ù8¡¹¢ùƒwDð|Ç=0H”(²›“%¤@„¸‚~WôœPtu v#Mƒ1YB‰,!úËÔp‚Jx)VŠË²]çz“f ØË@¯N˜îµD­ ”Ü$z3²Yöj»NÀV Ë5 ìç °ILjJ'¨/×2—?_%È-¢SÉ—!ÕE”#hô(X!È)âš-äFñ?ºÄȶCªs3§/ tÕ5Åè­ó^îb?ªŸÿùJØÓ oóç³–sB½Aµ*˜{>ÛIkdT ¤þ{ü…Qí¶ZOžµZº8ÐÔûÕŸ×+~ËÐ?j‹Ñ¤ŠýlÂ|üùFÓ:ýù„T#]»H~hf‹êÖnG¬U§òhÑQÒ¥Õ¨Mô¼Ô?ø£’¦âƒ,5á*+¡lBÞˆ`á B£e@'¸.Ö5TðZ  ¯›¼ìÈÛ5»k ðúÌc7@þusé57œÎ‚™=\sÓò<ãÜ~›A”‡šôûH?ª‰¿ƒØg’"ÒÏÈ®€üGTþä:-ÕCÏJ³¤G‚omù3~G O Öš%²¾ AßíH Ñ ªƒâ(¡4»’gUbÒ§Áë§+ÿï n§¥Ú°ûÅgæ€Dj½s(k>.ý7;âÇ¡cóz#FÞv‡ol±ÿƒ`xßÝ P¾âì0ò×Û1Á÷[!Þ‡îíÿ²}·%ÈÏAßÝ!Ù Hîæ¿9½oéFN6> Jéùs5ÖõK É€„Qû¢§Öþ±khÕvkP×l=OÄ É‚«·Î.€ñA„Ӄū r>uÿvú ¿È4ËAWÓtŽY–ƒú“ß%ºN]e–‚f'm¢O½¹,Ù“>z(g®Û ‚   ‚   ‚   ‚   ‚   ‚  ÊÃåz‰µ÷½>Ÿr {iû V‘’+eØ´C}:éŒ5¡p|ôÿ~×jºvÙ*_ü€N@“^ÇˆÏ Á9È/¦G÷i´F&.‚ä?>mæ/LçKh:Q%ÉïÄ2û^ÒæÜG.ñ¬Õ™€Äh2qDïw5«i“…i‹%4Zyó µÆ%ã èòãwß&i9PVÁ›¸áqJ9 „#zÁ3P”þGÑ“Ìd '¤”Òßtì;ƒ(- ª 4Ýoš--Õĉ¯G4¥uÝ·*â„äÛÕaä’íkŸ““»x§Ì2¤¶ ri{iÕ×õ¦iX¾pýÓ¤´¼©U…ôä2ôÚü±OùeÒ;ÕHcácK%ꔯc¨†6è´ã8ñˆ©·‹¥!ðŒÔlŒœ:nˆÑЩÅ#1v~™¸Žsf.~n)- ÒxK‚úäP‚Ž(‘ m<:W 7‘qqô4JPûn ”ÌmÚ–ƒÔZVáÕ$IDý˨KÓjTíÊØ•ë\lwU rŸúÄq^tÄ]*u‹”Éoú„“$‰©ÎfYWµÏ¡§©]qä$Q£àIÐë#_HÐâÇ–Ëy§ ˆ©eˆÛÕ+ ”¨r²FxD‚<'Ö5Ú¤ýñ(T ûŽ —¥¶C dZB‚Üúw$ÈÒo€×KN§ ?îê—™v'n¶–uŒl¡jDI'U u¢úÍ@ÑXÎÖ¢u;Žc‡˜«cɽ…,-¹ëgPì@|ˆÆj8É;wW+R 5ݧGq|f4å–Q‚ÑPõ‰f»  ” ÷÷f ø8ŠßK±o6Pþz×Uàó>€=õ¼êîþCÖj@d»ƒøßª¡ÚO5ß÷»Œ½Ó¬ ä«‘‘yeP#bà;òÈlP¯Œ;öÛU½×“Û·I#>i œôä¿ØHàº'Ñè”9âêxÈO¢È¿ôŒ—š&$.¢Ü["“ŸÉÿìˆV%ÈŽ,£Z­vÅâH # ̵»ˆ³fBmÕà³öÄž>¼‚^{Û”=¦¾‘ñfoºÂ A@â5´þDJ,Ô­M8fA|#mfyX¶Ay€ ~•ùhœõJ0ÚZz\˺Ä4ŸÈmP¼ÁëyË@iå\ýÚ'æ÷T5ÝíƒD¢."¦”˜mñ!ÙÊ[èráXòˆ—@g»bÁ…=géOwFƒ=y^è±1ûÙPÀŽ]Ñ7¿µÏŽÂ«Ã]ù­ž¸hkÍý/Âý/¶’Kò›–.4Ë´R-¬otc¾ tÑþ‰Ðx³ÖÂ~m@Ív(jVç8=twšT7Ó£ôÈ»ØèèÅ û[3EÓL_ðíè¥@ÔÞÐE;‘ Cþ‚‡^ýxë n×%(• „^}û%Äͦöb˜ó§ßŒÜý;v ³BÓÄg_Sm̵h@©ògU¤Üoûk¿ñ ‚¶AAAAAAAAAAAAAAAAAAAAAAAAAXŠW*¬IDATAAYR‘äxµkß–kK ¡Mê—s=eÕ,7T¾t:i’’ª ‰–ýuÇR«õ¦v õÀîh|ÔW?è¶@Y‡~±$]7rÚ.(˜‚fý°n 'Ä% Xœðñ¥HÉHÍ·ËÀ©¦ÖÂ"kï qÙ2Ä+þ3Í– &‹ixÚëJ ñúÀÞ ÈØý¯º²„‚HUf®èfƒÆïÚôÎÃ:Ý4Œc¦«Á‹&ô³I\Ã(j¾®#FH ¯¶oø¼CˆC/ßk# GŒºFL‚êMÊ:kß<.ÙnÀl ¢HŒXZ'œ2{K Cô$¨—·êH‰¸ŒÒz½¢@kfI#á çACÒ¹Íì;™x1Œ„¹SP³n¨FªþV@ir& *A¼Ù$L‚"{[ ÓÔË@®j¡,A‘`;â;Ò«±Ù½@zK›„Óm¸!§Çâ‚ÑÓ (N©aš­ÛØ ˆé¢;ˆEWDû5ð¦è±*§š©±½µŸ5ƒ q9Lĉˆˆ1"®¸Îi7­°æ]‡Ý¼¨(ª7ƒ«5B¦¹h) Zûê5IyÐZ×y¸ ¢­Ö‘² tS#á•a{û] ‚   ‚   ‚   ‚   ‚ <,PJ6ŸÎ'AQe³#s©ƒ.Yv^x­÷Cч/¹µàkÏ´'´Ç­uzXsZ?¥èñÕ(IM{ (-¢j4`&„Ã;ÔXk§(CQPgb”j× ¶¾V'R»¨2YGÎù:AF9P×3P;pÎÿVèÓ[ÏÊö]Õx9ÍA¡s®¥¿z×.ºhv™~a¹®ê 0M‚Ž]§v`ÅÑÕp= :.R›ÄêdÔ¬cű·Žº:)!e@Y·ôöA<ôŽX,Aë¸ÕšR§àÂå"Hí¾¢l:v÷-~Äâ¸K×*5øƒZÐx;[¨{Ðé< TÐO_1(€ºœ¿P µT÷J©WÐéÛ§@V2äy í È ¯ $¨SП}ñBƒ:4€Ö3Ä=q :2,\íg©ípÛ`œ·Õj¿ÐkeÞ»³H?”&µ¯'\e²W¼E7ÛH¿H~9«Dš]edPe ³ù¾ox7ûßöæûÇžvØ=7áºÃìYÚ“7\‚øš–qCm­#Mn­Idp«iHPDç:ä¾þ~;7'ÈW°¹ 7zðön‚äR0°K•ÐæR°Y|hçeÛ‚   ‚  ÊîqÖ—O¢ì’RÁ ëÌ’†&Týв‹;QB{êÄPžàó]uT/ϼwD³£úqV­j7@Ù)¥ÑñŸ :ïé8“sÒ»°· ò¾¥'"i>¶«þè ^}L· R=x}Û<ïˆfß´þ¾mÐE;l‹ìçQÌãÞ¶AMë­‹9;ÿ>ŽÇ±³ePØ´Ò†ÕB=fÇÉ™½]ÐkËúÃa"úýú‹$ü(ÙîZ¦zðæõÃ@¼ršÏ_Ó$ýrë ³6o‚:¦â_õ-ƒêO$h(l êÑP|'Ü.ˆ?éhÍÎA%•%ô½ ß=}['[ib¯™|ÓžÕúa5ô¤`(Ø ‚DÖƒ·õSõ`üÖÿ¯à®Í¦A[ ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚ <ÐP|¢ÞÙ¤w‚ü׊Û,ëf#˜‚xA3rf3u”Ó{ƒ^•©ZYY¢ýXäµi¹©Úôy'dYäþ]4Ú~ÙF‚HФZhp£Fo^›6µ÷&hñƒË€êeêäg·ÅÉu Õ©Líl†Î^Ýôsúe@½› R t·Ð2uò3Á2P²Rªåƒ²o¡§±þG#bÏû‚ NjMB×&úIJÞ– Ö|Ÿ‰S&T÷hÃ|•»-hqâbÅJ…¦•¨êë¾Yq¤/2´Úþ¾Þýܨø#¦wAG‚ÒjT×Úš­1U “t£ÛWJçE¥[\'¿yFÃ7ur%A¡[uÈAàùæ8ˆã`Ð;kJÂ3ÍܳÚl=ÒHúw•j$ ¶;æX~óÈ©Ólqq‡4â äÇÉ8‰‡á…±ØûC½Ù4y;‰CçÂúÉ­=‚u&²b-ù£9NXŸ×mµHyãõGAÀY2c7ümºtÒf³ÓHæzjÔç[g\TIa¤æ+Hëd 'p§­#ãp†iªösÐa @•;Ôê‰E™:ùLÕ÷ — T•šä½iÑ0¢#rC–h?íLAιÑ[ƒ’r µšMH:-!ïu,BfœcW–¯@cá(ÐaÚXàœÛŒÜT¦N~jæ i 9’ ±˜d ×SÐt–ùäܾC7­AÑ!NHþ0ÛjñU%¤ºÕ“ ‘ý®¨¥(ÌV{6µQ *¨¬ $,Êš%š‘%j«(7Ãn(ALâd$aX¿:Ƹ ë©Q¤k­8ƒÞí‹SÛ¡˜ý,ÿ©•ÈÍ“Ô2=” ¦i19M\Ï™¶xŸ}ÎUþq æZ¸EÿˆÅ}ÙSùÃÔZr×1¨G *#G?Mxår´§µZQ8vkTTxů5kµÚ_EíŸøÄÐþƒjDðQ«I#d¾‘Àuý’ ‘í:j–~‡^‰¨Q½'RýÒ7÷Ú-˸¼<='¢"÷eµú^è‘eøº~âSJAã ”MH皸"WÁ Q¶ƒÜtöÈ_a÷M÷]Ç[aWÅùôv²vÐà–RÔ’î®)]LûT¼V-\É©ô`…]€­ä“|È$æbÃÖ‚ (äõ3®S¼/›ÔÞ¹G ^²¶|¤ŽñÙ;—lгô‚U*ÉCDº1XZÁ;ÿe+ðèÆ4‰ÝyWé{yÐÞW?ì¨÷˜}]£º0.]‡ê· j>¯|û䳺é¦ÿîºNóù_n”šaï›Ö/,7uö›aoÛ Fß9‚‹ã~> /̵tjq+P›:§qpѦix^4ÈöAv¿»-Á¿}^È¿¶ :}"AG‚û t·;« B’ %nýx@”$^=]o`0Ô~GÏoï;—ûV9˶ âmƒvCo¯AØO/‡ûÆÖAòä~(Ä…E¹ˆCùksž%  >N!hSý™¥ô«3®SZû8*ŸH!h=]Å”ËCyqÚD–>)¡¾ø¨ã~úÉŽûë:ùq^'¿klA¶yÖ‘Õxè§Aë‚   ‚  ʃÍ…‘M@¦)½Ÿ€òrdc± O óÃþÆ4å;úÓˆe ‚f)]NêþÜÏ ¥ô¿Ä ¯ê°X?·«Ä}µmЯD5:¨ôäa¹þتÒnnôëôEhjºèóðçÇaóùÆúï^jðÄ3?ýqØ; ÍpcÒ/«¾¬“¾ÙI³#×ôÎ6æùèHܳ#¯AßlÄùQpaƸÇ^ÃþfË T7“PÐЫ·Ic“#ã‚Æé ·–çÂê´wt4” WС^·Òíƒbþ¤¢$ÃTÓªõƒÎAXÐaȆAŸ~÷=þÖ¬›FÁ¿‚Ô…¯ü`ñ½LïÐíƒæ¢â|» J¤ « H&AnrÇ^Åî– 0`iSA³Ñv0è=Ý'æTzkAAAAAAAAAAAAù4ˆµí 9f)E“ªOÜ²×øÝ…Õý–Ü/æ¿Óµ‚¥ú8ÏbL»{ï¬tNËôq®j–Îê;®·„()Smmä—±ÙðÎzA)uüÅ_±ô Ãqô¨cU5\Èv î2ƒät]ïéß6-k­ ó2 v֙ͥëºÎ›ºu¼¾‹øjä Õq¿¡õ%h}÷]RzV”f W^Ö­Ÿ®ô²LøyPW®eõ„±WÄ# Br$h…}a/|w©!VÔH\Y ‘Ô²ž¯4 eöeªã~nç ~jµ×y3±4(¥³Y¶ÆµLÕ#/Rµåó’ £5‚x¹!VÔ!¸Ã@wNëæQu,ÞMj´¿JmÕóûû¹FY€i#:?Ÿõšú!{ƒÊU~×m®ã~VÔ¿Ù"HuÜßÕ‡C¿zâ›O*y·÷=ù…Y#€ñ|ÿ›m>žWÁg‹o˜tÜ?*ÊjæE4 £d(·ü§ï'­\¯²æÙ?8œüƒ³FïçÛ¤òûßÜH ÿójÒŒáz$^9Жƒ (‚‚ (‚‚ (‚R by ÎúÒ,M†(1Öx´,Å '¯tæÜ~<©{§Dó_ýþæ Ó×¶óß}ºAÉ$KºjQ%Q·?<»Þƒ„¸<£®8ƒàö·­$Ï„þs—<ñ+W@O‡u2ý öHÿ)Púý¡ŠJz<Úôš¿ôHw;8àÇÁŽ€^¯A…iíÈöB‚Æ»:·†H›fîÄBÍí—ˆŒvDk?=; ½g»JµºÞ?Ð9éj?ÚàØ!ËA¢+ aN^7VÛIÔA[ ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚   ‚  Êj@éñ*>%Ëj@üpŸ’eE%´k ñ7+ù•?Wп^ɧ¨ü¹‚V×$‚ ¬Ô_ɧ¨ü™îËVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAÙ=Ðÿ…Ýžù—ìIEND®B`‚leptonica-1.70/prog/weasel8.240c.png0000444000175000017500000000705410565760321015212 0ustar dandan‰PNG  IHDRRI™ãñgAMA± üaÐPLTEÿÿÿ!!!)))111999BBBJJJRRRZZZccckkksss{{{„„„ŒŒŒ”””œœœ¥¥¥­­­µµµ½½½ÆÆÆÎÎÎÖÖÖÞÞÞçççïïï÷÷÷ïçç÷ïïÿ÷÷ÞÖÖçÞÞ½µµ­¥¥µ­­Æ½½œ””¥œœZRRRJJ911cRR)!!!9c!)9BRks{„Œ”œ¥­µ½ÎZ!„1!Œ{scRJJ91B1)9)!R9)œ„scJ9ZB1„cJ¥{Z­„cΜsÆ”kœsR½Œcƽµ¥œ”„{scZR­œŒB91kZJ”{csZBJ9)B1!!”Œ„½­œZRJscRœ„k1)!ZJ9{cJ¥„cRB1Æœsœ{Z½”k”sRµŒckR9ŒkJ­„ZΜkcJ1ïçÞ­¥œJB9)!Æœkµ”k­Œc¥„Zœ{R½”c”sJν¥­”skZB”{ZŒsR„kJ{cBsZ9kR1çÖ½cR9½œkµ”c­ŒZ¥„RscJZJ1ŒsJRB)„kB¥œŒ91!cR1JB11))!B9!{sZ÷÷ïÿÿ÷ÎÎÆÖÖÎÞÞÖççÞ½½µ­­¥µµ­ÆÆ½””Œœœ”¥¥œŒŒ„{{s„„{kkcccZRRJJJB11)))!RRBJJ9!!RR9JJ1BJ9÷ÿïçïçï÷ï÷ÿ÷ÖÞÖ­µ­½Æ½ï÷÷÷ÿÿÖÞÞµ½½¥­­­µµœ¥¥ZccBJJïï÷÷÷ÿÆÆÎÎÎÖÖÖÞÞÞçµµ½¥¥­­­µ½½Æœœ¥„„ŒcckBBJ119))1ÎÆÎÖÎÖ½µ½­¥­µ­µÆ½ÆB9B1)1×Wð‡8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I °IDATxœÕ˜ýcwÇï’´MÒ$MsϹä6™u̲ °ì›©LÝŸ6×´ ÌX¯mèºêÖƒÒéN 8@ÑŠŒ ¡î‡cÀj¬º­è`®£Ol覬Sùþ ~¾ß»$w—ìó“kB/Ü«ïÏÃ÷óýÜQÔÿ…E|ºO×uŸÃðIãX„¿^¤ŸÆzñ´yœÒOéÏ:ˆÅÅb±ÉCÎCƯ¼½½F¥w¤ƒÒ„(MœDÓ&Ä÷~§<ý´©ÇäI¸æÐ¤ó'Á7“pðÀ&Þ$ýÈø¿4©(VäéXY;dX-¶(Ö( ¹]~ÏŠ‚`ÓïLÚ¿T#Á¡y"ÖXÝKŸœFAX L$¹(ˆ—m*}W}<Ó0ìù<Œ ¡Ÿ©j7 /˜Ffgª+=†Ð†‘€‹þÕŠôÆã1|”¼ð¥*8}[Õ´=cµ/µ£ôªÛK¡0F^mS/køÏU’ìx_bWû*A8w9àNíÔ4USÑ)@^xÙ¡__ž‹J¯Ê×@Æ£ÒÁsî_r5z‰ç/{ÏlU1QëÚ‹jŽƒÊv• ãcˆ’À_&"ÿ)‰Œ{‹¶/ÁòAW¦þÙ«eÒîðÄ›€ŒÛÏó¥L% \/JIqV”V×÷ªZ×ÀQº aŸáuG7"qóì¢SœÚá‹×EåÏf¹³¢·rÏ]ý}4M÷ w ‚ÏØï†ÝÂ,‘S%ÏKXÆòKLÈñ’ ZYŽåÅ™ „RC{ºØ.ú[P¡ÇËiŒb a㇉Çh4¼ÃZˆ<¨ÌÐgˆËWß¶#£N (dY q Þ³ÓïE©UëÕò4‚@Ç„³Âñ•BŒR( 0& à2ÀXüv‹ü”mW53%·{µ!z!´÷Jb)A!LÂ…<ç]~½îõ:n59W·V45ÿžk¸ßŒ¥½.eƒHáE.‘7Üf?d\ [-85Uµ¿#@'*Y2¥P&5&ñ6Ãñä²oþgk‘cýԺ莯Ϟ ø²QÅ$úàˆ‰B‘G˜zc¯jѸcëcðï|n/ýsC¥-–Þ( ±óŠ,XÎá!ŽYŽõ'2ƒÛWw¶Þ™ÚŸÚ—Ú›Î%èö æA9­CO‘X^°«Ä¢ejÑîóø q›eCôï]åÆrÃû¾ Õ>œzrÛ®¼÷;úÛù2±Œ‚HX~¶0r$lþ4;]Cö£ýkw€ªôX¦ES{ÕBhŸDëÜ6”¤$Cz‹y6rÍea%ÖV¡þ-wÓFŠ×´ª…Üä–Ä/Kc HŠŠ‹l„!«Å ‰wžñÓ}›¿ýÇ’fKòá½­‘=^N¥¢<ËàÀ™YÆ?<¿ÐïêkÝYȶJVL~‘›Ú6”ª”p…cˆ5 ¢ÄsçÙ,ö 2šÑ),Un¬BK®äŸ R‰ ¤€A’¢rTÂíŒñ¢ï+^Ûbk-Eß„ª|Ü<Û‚Ô%Ò+¢R~TyF„°!wãF­ÐyŠk°x˜–s;Û†.âΫ„¼5Œ‰ÏL1âEém>j¥¿™çRWJÒƒ‘ñ8ðVVVx¼Õá@…ÿ’ëÅûz­}¬ Lí-¯F%HÒÔ–{¡ÊˆµvïÙöPfm9U®t ¶+]ݱQÄL¢,KÒl„0s9„h:1šî²E²œãšÖ*)»JïaQee¥›¦sDdw×@çºÖÝm«WlêîrUm+ÝÎd¬Rôú«Ãµ!#r5 Ñ½=]ª¥teÛãÃð×Úº4ÕZ ª–ò•ìãrÑqž}žÞ›Éôìk€–³Ùº;¬í6”ØØav¨Ô:@¥m‡ÔÉi a óÒkð%ƒCi„†»òWoïGí!×ߨ0LE$M½w•Ô%/‘y÷7Xå_)\‘Ù^K²2pçðx#@ïꥉã–McHç^µ9®Ÿ3 TÂ\Á^×·Ðg0øîý4IÙhm=ù\¥V’a€´·`ý²7<—pªÝaÙ¨×lÚ¼ôêvT´NÛ®¾?ì,u0x ’I[ ¡Ô Ω6˜éùEº¹}!ÏS-EbÚŒ"YOä³MŸqÄrÊ\>¢±É££ýí©þ3¹÷=ÞP8òlØõCuu.Ol{ÈÖ„µ­íœæ¢/ÛUòdÌ’Ím›‹ø¯»ÎãòèÁZ–eÀjÜ0´^®­ÛèNª¹æ;wçÐJš›ÀÃp ÄÅÂ,C ËLχǼABÍïy 5ôDÆl%F­o{ø Ê}ºŽ —Ñ®u£¯sy(‡›0¶ç&üþù¶ÛbÎY½Z׺Çûþf a¯c&ò>SžŽ‹ùíÑ€žçæŸâ‹ÌźǾжw@lï]ÿƒ€§`{Ƨ¦b¦H8nèœu2LÈÚ7õôtfvíÊü´§gsǰû Ê=º~ĸ<JIÛ8ŒÓcØæL¡8šl8Qµ¤†NÐ4ÂýX¢¿mÓ#ß#—Æ…ˆ×åòùu‡ã8–o˶ѥÎ5ˆÊ“õ”’»þ ·_Pýµ_¼çþû¿ÿãò«ù€{Ìãcd*ì¼áƒñ?vÀ"’ãç`VÍ'(âz—z£á–%7'o¥õâE2ãw7VÔüƒø‹3þŠcõÄe+†é™ºqC$ ×Súg››šW~n9úÈ «#—·v"O•E$G_Ît}n&ï¸çKTýò››“Ÿ¿%yÃ1·ð=¯‹®ŠÈB¸$ã¼`+Í!눼øœU.^¶´ù–ÍÉéšjOÕñ kßiH,·REÞܸñ25‚Êz—-K&›–'oG®ŠàUjùJ9$ž¯øñ¹|U’ì0lMã»T-ºaySÓbRHQGKoø`‚ægàíÈ W7>Sg]ŒwL¢â£h Ô傲—q²´.ó|~ÄÝÞºùƒÇà¾ãÄ ¾úû xó¦¹9¹bì5;O zPµÙ;ŽúxÇ2"o4Ó!”Øs¦o뺊ªñCs¥¨¿x–&WÞ°´< T`Rf™Ú€ÏÜÕ…æö²öXž€ZÌ~ÈB(™ªÜÖ–Ìj-u’RN^¤¨sc3”’½²tåmMK¼SÇŽ½YUil®ªoñ4¬gímã·ä)­OÏ?¯õ]‚·ô^üìÖ÷/]×ߺä|ªë° u4”IiŠd}œ›ãÊÛÌÇœ7mJšt •Iòõµ Qyòå0ãAVsuccess = FALSE; return ERROR_INT("pix not made", procName, 1); } pixGetDimensions(pix, &w, &h, NULL); if (w > MAX_WIDTH) { factor = (l_float32)MAX_WIDTH / (l_float32)w; pixs = pixScale(pix, factor, factor); } else pixs = pixClone(pix); pixDestroy(&pix); pixa = pixaCreate(0); /* Median cut quantizer (no dither; 5 sigbits) */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 16, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 128, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 256, 5, 1, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (with dither; 5 sigbits) */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 0); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 16, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 128, 5, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 256, 5, 1, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (no dither; 6 sigbits) */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 32); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 16, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 128, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 0, 0, 256, 6, 1, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (with dither; 6 sigbits) */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 0); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 16, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 128, 6, 1, 1); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantGeneral(pixs, 1, 0, 256, 6, 10, 1); PixSave32(pixa, pixc, rp); /* Median cut quantizer (mixed color/gray) */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 0); pixc = pixMedianCutQuantMixed(pixs, 20, 10, 0, 0, 0); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantMixed(pixs, 60, 20, 0, 0, 0); PixSave32(pixa, pixc, rp); pixc = pixMedianCutQuantMixed(pixs, 180, 40, 0, 0, 0); PixSave32(pixa, pixc, rp); /* Simple 256 cube octcube quantizer */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 0); pixc = pixFixedOctcubeQuant256(pixs, 0); /* no dither */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuant256(pixs, 1); /* dither */ PixSave32(pixa, pixc, rp); /* 2-pass octree quantizer */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 0); pixc = pixOctreeColorQuant(pixs, 128, 0); /* no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeColorQuant(pixs, 240, 0); /* no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeColorQuant(pixs, 128, 1); /* dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeColorQuant(pixs, 240, 1); /* dither */ PixSave32(pixa, pixc, rp); /* Simple adaptive quantization to 4 or 8 bpp, specifying ncolors */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 0); pixc = pixOctreeQuantNumColors(pixs, 8, 0); /* fixed: 8 colors */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantNumColors(pixs, 16, 0); /* fixed: 16 colors */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantNumColors(pixs, 64, 0); /* fixed: 64 colors */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantNumColors(pixs, 256, 0); /* fixed: 256 colors */ PixSave32(pixa, pixc, rp); /* Quantize to fully populated octree (RGB) at given level */ pixSaveTiled(pixs, pixa, 1.0, 1, SPACE, 0); pixc = pixFixedOctcubeQuantGenRGB(pixs, 2); /* level 2 */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuantGenRGB(pixs, 3); /* level 3 */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuantGenRGB(pixs, 4); /* level 4 */ PixSave32(pixa, pixc, rp); pixc = pixFixedOctcubeQuantGenRGB(pixs, 5); /* level 5 */ PixSave32(pixa, pixc, rp); /* Generate 32 bpp RGB image with num colors <= 256 */ pixt = pixOctreeQuantNumColors(pixs, 256, 0); /* cmapped version */ pix32 = pixRemoveColormap(pixt, REMOVE_CMAP_BASED_ON_SRC); /* Quantize image with few colors at fixed octree leaf level */ pixSaveTiled(pixt, pixa, 1.0, 1, SPACE, 0); pixc = pixFewColorsOctcubeQuant1(pix32, 2); /* level 2 */ PixSave32(pixa, pixc, rp); pixc = pixFewColorsOctcubeQuant1(pix32, 3); /* level 3 */ PixSave32(pixa, pixc, rp); pixc = pixFewColorsOctcubeQuant1(pix32, 4); /* level 4 */ PixSave32(pixa, pixc, rp); pixc = pixFewColorsOctcubeQuant1(pix32, 5); /* level 5 */ PixSave32(pixa, pixc, rp); /* Quantize image by population */ pixSaveTiled(pixt, pixa, 1.0, 1, SPACE, 0); pixc = pixOctreeQuantByPopulation(pixs, 3, 0); /* level 3, no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantByPopulation(pixs, 3, 1); /* level 3, dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantByPopulation(pixs, 4, 0); /* level 4, no dither */ PixSave32(pixa, pixc, rp); pixc = pixOctreeQuantByPopulation(pixs, 4, 1); /* level 4, dither */ PixSave32(pixa, pixc, rp); /* Mixed color/gray octree quantizer */ pixSaveTiled(pixt, pixa, 1.0, 1, SPACE, 0); pixc = pixOctcubeQuantMixedWithGray(pix32, 8, 64, 10); /* max delta = 10 */ PixSave32(pixa, pixc, rp); pixc = pixOctcubeQuantMixedWithGray(pix32, 8, 64, 30); /* max delta = 30 */ PixSave32(pixa, pixc, rp); pixc = pixOctcubeQuantMixedWithGray(pix32, 8, 64, 50); /* max delta = 50 */ PixSave32(pixa, pixc, rp); /* Run the high-level converter */ pixSaveTiled(pixt, pixa, 1.0, 1, SPACE, 0); pixc = pixConvertRGBToColormap(pix32, 1); PixSave32(pixa, pixc, rp); pixDestroy(&pix32); pixDestroy(&pixt); pixd = pixaDisplay(pixa, 0, 0); pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); sprintf(buf, "/tmp/disp.%d.jpg", i); pixWrite(buf, pixd, IFF_JFIF_JPEG); pixDestroy(&pixs); pixDestroy(&pixd); pixaDestroy(&pixa); return 0; } static void PixSave32(PIXA *pixa, PIX *pixc, L_REGPARAMS *rp) { PIX *pix32; pix32 = pixConvertTo32(pixc); pixSaveTiled(pix32, pixa, 1.0, 0, SPACE, 0); regTestWritePixAndCheck(rp, pix32, IFF_JFIF_JPEG); pixDestroy(&pixc); pixDestroy(&pix32); } leptonica-1.70/prog/test-cmap-alpha2.png0000444000175000017500000000105512047007755016232 0ustar dandan‰PNG  IHDRxxºÆàtEXtSoftwareAdobe ImageReadyqÉe<PLTEÿÿÿUÂÓ~tRNS@æØf°IDATxÚìÚᮃ0àsÞÿ¥o²d™³¶@ 2oá¯Ê7m\**n ¾"! ?± Û²ÐCæDÃŒ9cÕž²l½J‹hb¬,çÛß11 –¦­Ìqlß;«Ý³\°®N]ß0Y„¬œm[¤,RÞÃ!ÆZª‚©‚9=1ZEl >[çú%Eh`&Àºº<w¦ù{«ªY{o·ŒñB±mïl E¿§‡áöÔÁú®Uø½FxÜ.ÏÝ'Ïù;°ªxü˜†ªwö¹f ù5ð°Ý>ÈÇ#¾a{YTÌ­&í™8_žUqýsÜá&³tÆÞ—º©1v˜\=E ϶¶Ç › ã˜Ëðä_½Aìãøûa°/ŒÓ“Ø>%é•ù`ÂH€¹%Œ˜˜Ñ0v‚™ #f&Œ_…_ó,ØÚWœP˜‰0Dþc|½Võáβ|oÍF Ì,ª?頀ݮ8nÅ| Ç-Õ†J·Ç~œ`\÷ö„‘3F ¬úÀ#FŒ‚ .¸à‚ .x /g™„cùƒ_éõ¦¢"2þMÙ(ÉßIEND®B`‚leptonica-1.70/prog/barcode-codabar-300.png0000444000175000017500000000556110772323334016463 0ustar dandan‰PNG  IHDRV-õÇ%gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I ¥IDATxœí›±Ž¬È… #]’V“v€šuH€.‰dW~&kËWÖHÓYó»~‹á~ÁM,tsµ,媢€ª¢ ˜f$[v·vuw¥éoÏ9ÿùfV=~ثփõ`=XÖƒõ`ý¯°j›üQ¢¿o[Y¡NþÈ‚í¬hÆjø0V @ðQ¬ïÃXvFY¿Á[k£±‚{Y™Wz¥ ãàÝ ÍÁ»›Ôv¬Ãð‡g`ÆÀŽÁlb…Z Ã@¬|¹ŸгÌ0v7°p]‘p>±cꥫ©¿xˈ¿˜¡ïqk –±…Õ¥cÇç@G,Xºæ&–‰XYÐøV¨ß ‘}ë`V¸™U#Ö¹c¶°‚Æ%,_×o­¡mÉõÞ"}O!îıZÃØÄòлK׎}Ô¯çm,t¿\3ýÖÑÙÖïÀg-Dûèt´Û`K'ð½'wˆeobáçùëŒY^xØÀÂÏÇXƒà‡³ö‚ntì~¶ïfA`À Ýû?£½†üuök—X¥[oþKV³Þóz°¬ÿ3Vfndýõ¹þã]ylÜÁzß3#jݧ<…À:ç0Ü¿“õ/øÜ?Áä-ð”éQëø„å¯e…ASk0=ºà©€WàøˆÕR–‹X-8,±JóíèÕZ‘»ökoôžÕP]rmP¯áÞ:ÃL¿X^©Ý.=K¢«™õØx%LËéXµ–PÖEÉjUº+À¬ŒõW–%×åÎyĺ ÂÊt{Ĭ†°à«Xj…Ìã ë@Y>Ó µ®„ê<6*íR^êì‘Ç×Ù9Vʼ8V‚uåk¾÷ý9]½GÂZ5G§ï*›}×ûÓ¬p¬¹~™²¼x·!/‹ñ(Ü uï'ýbòº ýB¬‹Èšêâû†x$¬¨cuº.­0GYöŸ˜ìSÊ2-¾«¬GgfŽŸØ¼Bê‘öþÀv¢¬ŸæöQ`žÕu"e<&³]•çeZL¿ ÀRéâ=’çЙé}?Gq[Â2iØõëJY|¿N\ösºlÌBÏŒG‡í„u²WåõIÈ yLM—aõy1s”²º9]šë½ 6¯%ƘWŽ÷yL†®"]é0Çwåu£ýJû9Z¬GÊZÓ/»»¤«‘Ëï6çq&{¶÷tŽC^ªìWt•ìÐÈz:1¯«ŠØìæHzßïcß/ôŸ³GýJ™»:aÀyåôæÐÞ_pö…˜ýŒ.fŽZžR&3ÇTØm•.Ú¯¾«Ÿ×¥c;T­èDÏÎãÁazofuQ\^g6{IW§Uèw{ôèLûEn¡¹ØÕü"t•aE+ç8éÄp£»½bŽ·¾WKrï×ía¡~ÝRš×UšíÄÌnÓ{¿Ã7‡÷øŠ;1ãŠNôsô…ÞËvhÁ#Éõ¾VökE^sWÅì…~UKsdvèÖ÷ža“N¬è×Ð{~· fŽïÊ+]¸…j]-›×®c™ân3·æõ4ÓûcßÕî™Æ²«uV<ö~dIî×b^5ß â‘<¥pF]ò›Ãên¡ÁÞhaGºòNôs<óºP¿v ?Çzë2°œÅ®¢9B%‹ÛÇ1{cM^â3 eŸˆŸË+go!ÙíZôø"Ó…<–²¼ŽKÙ¨ØNˆ,fŽûžåpw" ¬Ë¢g:Á±L†•À=eyu]Õ§s”wâÔ{LøNìè=i^ ýbX½®eï•Ù„Óì‰Çí£CY“½˜—ItM<Ƽ®ŽuYÈfi=kG³ÊLŸz”w‚Ék/zìXÓ¼bcÏzìX’WJ;±NÇ*GVðI¿„¼(ëØ³°Ç½´_B^¶¨+³wÆ~á9ryÅSVËf¿³g;<¢o[§¾xŽÕ4û‰GgèW:èrJ./™.{`iÝ…ÇS¶Èb;!æÕ{Ì «$q^{:GOè—-zä»J<"Ö±÷è]>µ?Ìdûµç’Ÿ#aMó tiïƒ\Èk7x”uB²Û¼Ç‘U@pTtu`• ëÌívw 1{kô¨ØGíEdYN—WIçØuB•½6fúÕ{Ü÷7‡ÉKÁ:NYh·O,‹z,Ç}œtBrs†ìÏ{'J-úµÈzûu®X]Ǿ«Š¼rËçYz¯k¯Ð5Éžñxª†9îû»ê/æÕ݉I^ÜÇ}œÑ•ÓÞ¿ð¬£à‘f_°7Gš×A6Ç;G”}:xTf?í=e9Õ´«þLï½™›ã×eOX“¼øÞwѳ#T±Æ¼$ó©.üÚ»³ýšÌ±èz™Ì‘äå/°4!¯#ßUf\èe5³Ù¯ð¨î½È‚Ý͙хY–Ìã©u×ÜhwM¿(ke¿Ø¼öò¼–=bV:;ÇÓ*VEòB¯Œ.Y'höáâ%;„b‘²hWç:qïªSŠ]=ÒÝ^b鉄•H²_ÒeakóZìj©%û)+¹#/Ê<„åKtåkòâ<ÊY8û|VWEYÉ•ë=éD‚ŽÂ{Ç÷ëI’×Êì±Çl`íÉ…ÖaÚ/Š$yy¤«žlŽ${ ³®Ç¥ì½\ìD7ÇŸÙì¯Ò¼¦,®_?²}ü™ÃÀZѯj̾? ,°;°º yqº*º9õrýÚ=êcö~òr‡ÝN£;°./….Í+&ÙÑ·@9ù<ŒØ¯HÞ{¦b^áÀZ“W0²L”òظ ‹éW2äušõØëÊh^yJY;¾ä# ø#qFÔzMmÌÍ1Cy5\^ãñg÷ü ƶÙ—<{³ëj—ýu˜cUÀ|iT¿J¡ôøTÄØ#ü–FÀ…ðŸÿð«Á#¢+²[P}Íl̸ZÁ‚vT™ñËßÞófë^ÿ!Ö¯ˆ2¯5á_îeµ|ƒ! õøÀ íÚP¿cžÂÒ†o-B-Ã,`fZÓýfØ»Y ˆ 5À õ Ô¿?Ú—<¯¿x÷°Z1 Ù<Û,пí4)ëç»XÍgû’Ôf )ë³W¤uÝÚw±;*JÌú³Z7@¬ ÞÉ2Íœ°lÌj¾`ÖÓ}¬Fvõ=úNXltý›-,¡e6ºœ5bE[Y Œ Àªñ’ͺ²ÿÖIð­µoÛYž™$ePÀOúfViÛùWô3!úæ¼Ð»sØx) ÿ¸ÁаÊèDÇBÿpï)«âXßïÛÇuõª7Ì ¼ÛÞ=¬±Ð㵄W;¿ Eo½´(ïeá;£îí"©˾9Úð{Y b=ÛÆ Ú!³¼÷F·®÷rÁ7ÚLC,ôìÐÛ;ŸÀËL¡S›µŽXqИðå>V”&z¦XzÊ&¬eýþ¶HXËzßëÁz°¬ëÁz°¬ëÁz°¬ëÁú/cýLõX¶‘F÷ÉtIMEØ,}žå tEXtSoftwareESP Ghostscript 815.02 Æ”Å_IEND®B`‚leptonica-1.70/prog/barcode-39-300.png0000444000175000017500000000703010772051641015313 0ustar dandan‰PNG  IHDRSõn’_gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I LIDATxœíœ¿ŽÛÊÆGP¦2« . Mª<ƒ |”÷\ª V4T°»z?Fº˜‚ )î#xnG1ð\Mæ‡3gþP”½ÜäZ_Øwqïê§óï|sFëb¯öAЃõ`=XÖƒõ`=X¿UV÷j¬gõG%OÝÎÈBXþ±¿µ V¦ó±®(1,жý§³°Z´4,‚žúOgaQ´0¬zfVŠ ë#]§çc‘¼4¬]»Æ‡ùXõ–l cÉ¬|N#Ûw‹]‹«ž“EŸPÊÝÈýÎYïçdX[ „³ʹSfe}”#FѲBйY邬—uÇY¨Ãå¬,Š?’L²®¨Kgfå%Ù.]*Xè¾é~VÍY9‹¡lnÖ¶&lW¢T¤ÈÌ,„-%‹âòÕX-æ%ÎÈ¢z 1_=0›‘Å3ê'ÁZгdÇY³æ!um«]Í|¦|ž?\?qÖ»tF?+ynP‘)?—ß%»Y¿G<éÛe½á½ú)›y·iÅ?üLÁr·™wgëÐR+9ÿÊ-šqíPÂ×Q‰ãEò½7Ÿuå… |]¯|O¼&ìrêÎ}¾Þ2ÊØ—ûßÉú±ÿ/Öß·ù̬´ «––exÖ¿Ÿ»ûv¹´í‚.YU±¤\½(«ûü¹Ì1ÊÛbZ>y§¥Ôfå?ÌznØW’4 +±Ð©gm«]ÉJ¿ŸµÍ¯O9*PÛ!þÔÙ±N*ÅZ­8k#êZÖþ.Öß¾ñ.7MC’_3Ü­3ÎÚ´šµkx’¤‹×uN­k{}B]ØåŸàI(ä[¦×•dɇԬ£ÒP³ŠèWœEóOû_j̯Xk´)Ô3T¬b©ºÞ[u ‹¡_ṫgÖðGÃiZ•)ÂmÏ: Q,>*=k 5,ê~}xf•xæ=KÔ¥žaÛ³ø3©•†+á S—£á²‚9+¬½ÍºhVu$‚•ñŠ%kã°r›åöËÕðÄxAž†­aÃYRCÅÚ¸Þ4ì´Gúub»@¿î+í|Ï˺¬~ö|5a Ï’åö ú,Þ¯¾ç ¿_UÌ)`v¿Ä|ñYÌ—•QÀZÃ@Ο<¶«†èY^Ï÷‚ºo4*£üùª‚ý¢–ç­ŒÚ8u­¼ìU¬‘ùÂ^¿Úa–k–…†­É þº®bÂ,‡5´úEÌ,r>t½è—ïÃÖY½†$îC:ÆR>Üû,ãùÞ‡^n¤e؇M47œ~oHÏ›<ä¶VΧ2¦ †£¹fYZç—åÃ#ôFŸQ›>7ªxFscè—ò¡ã Ù¯2¼o4ñ~% _ £@nxÙkùpznD5³X-8+1Ôp4çÏ£uíœsYÜ¿Z;7°£áèYé{cmû°gá˜7r'7nô+4_òpÔåŸ_p–ÛIÞ÷kÎe3Ëdð†ïùÅÈùåökmÏ×Îñ|ï ÍB«ÔóFœ¥}¸³ìö‹³²•Å {žÕMŸ¯ÌxƒxÞP¶ 7z–ÞˆîœeÃZ„¼ÑÚý2žó5YCÑ/Ø‹‹åCa™ŒyÝ£ü~)¯_·2ŠNÔПe‡µ‚uí¬]4¦aaUPC'£´†íÆÍ(gŸ¿q_>z>T¬`¿ÜYμ=Š,FòаJPñÎe?­×ˆ&)®†¡Yv}hò0ílñº8_àü*Ëžel²wÚ™=+õ¨RßóÞ|¾–ÝEM¿²,ºGY;€¾îQ°_YŽìØÁ»ù]» _îY¹²ûE_d°ÏêíûòÄ<´sÛ¯æF _wŸ)á½×»Ãöý²}ˆîÒ0¾cί•QëŽÝ&¸€]”¸çò¤ÝÆö|)³×»§”ÖùU¸çrúCwí ÎC ï•o¼}~qÓ‡ãýÂÖ¹|KÃûöð6¬!x~w‡çÕn3¶cF÷Þô¾}cÚ7tš†bF|wl›åz¾öîDâ;>´UóÅkž|.³a?ôv¶ÂݱSÅêú¯â,±ÁN<+‹Ð(ºÛhÖ°Ï[³ÐÐõ¼î ³D]bËØ°Ú²®cÔ±›„æKy>Ư¥È.OÚÙø%K³NâFúekˆõ=å2h(¾ùt;×=kÐðìílJÃéW}¸÷|me¯`]ÞX…û%½‘é~Ñ)ýJªªV;ö !°6+UŠº´{mV̇’5ìØå s×Ã)è—ÅŠ¥4ì3ê+¨¡ñ†åÃø®5YÚC¿¬YŽiX‹ºkÈÞ³çyéåѳ²^C‹U‡g™(–ÔpeÏÐÐô q —N¿Ïý¹;ô,«. 5Ô¬Çjí~YFûµ‡óÕ³vYî}xæ¬ýÀ*€ç£yèzžŽø?ªôa­sc §ƒíy÷FHÃÁ©¥áBkˆá|‰v™º¦{¾õ<Ï·NKCÈÊ 7vãBÖ)À²û%<ÞèìùêëÕpx€ÈÀhX€Y¶X°_SXi_õ<çëòЫë†çun¬ fožeáÃÂհ޳ªªñ!Ãø s^öË÷!`{>íëòs#µ²×Ôµ>¤Ž†!±ÎJ—u8[¬LÏ—òF=䯠áÍù"RC=Ë›¾_°ú~&ÏÞYIîì×à~q冟óïüÜí—f­{ÖÂb1,â×h¨ÏeÓ¯©>$–7¼3E³€†§^CÍZAoÄXÕ/=ËFÃEHCÀªÓt´®˜†Uµ“éÊe`]›kðáx¿¬ŒrûÕ™~ +Û[×ñ~9,íyþ° x¾†ÞðX±YV¦!.ë„úutY“=_UGËó—ð| íùšÈ|ØXuÖAçáÕõ¼S×Z±Š›,U—x&ÓƒE¿RØ/w¾ÖAVÌŠe{~ÐpI+àù;ûu±û5Ìr;°Nƒ†^]`–E]­aíFX}¿„†™ÒÐÎy^—DzûeÔíKQ-s>±½Ñ ÝìU¬ÓíùJ,Ó/£a¡5¤6‹?d1°Ê€ù÷–“Þ‡¢®Lõk¡û¥sã߯=±^Ãjë—ªk˜¯Lû°5ž×u­Ã>ôYA / _W“Q=ËÓ0Ú/áÃv‚†6KiØYžOšºg÷\u5aÖAÕu´|h{ä<`ɺö½†Oj¾nfÔrð†Ñ°pΨ!õrc­Y#‚Œ²¼Ñƒá¬Ïo¾”†é=óEµ7žçÞHÂÞx¾Ä ÌÐPx#¬ƒða3êv¿Ö,Úó2çE]on²¨é×nt¾ŽÁù:Vp–¥†™íùv<7|ÖЯә.íœ_ƒY®äàçü9<_TÎWPÃPö®Á|UÆ@ÃsLÃh¿ä3<Ïû³ìä¡öá1Þ/w–[3ËÔf3xÞ÷ay£_[—åCŒVnöVQÖ.ÄŠõ«Ÿ¯“+WÃÞóâÛ¦Ô0èC*û•VMãi¨ç jèWfräáø|yyèôkíž_×g¯Ëš®¡í`F}oÜÚ¨çyàÓÉCx¦NÐó̈çÁܰ4$ɰc¯Ï¹aiØLceKy>¬¡èWæzþó¼ÚÙŸõÁ×ð½ç Ûó­É¨fÌ–êW¯áUü …Å:8³l³ÎgöË??}a,¨aâíQ½††%5|¿vYZà ±_»È›àÀºFú5ì6©•óz·©ñ¾Ì¯Ûí§0$Ð/Ár4ÜXó%êÚ÷¬§þÕñäüýk`ùgeHC¼ýÊÑ[LD5 åF+»ü&ô¾ŸŒžÌÂ艳Úçîú§ç$ø¬ ;©~}%i¿ØÃGXgšNîò±^ããÁz°¬ÿiÖ×™Y ûÄp‰ž"ÓßðãNV½UomƒØ^°²yX½Aˆ!HäûÀñ…Íʺ¢D²ÈŸsÎúÝ_®X¼22«ÃÉqù…?~‡¹†{vÍÅOJ¼8ësÅ‹èr¾6óOÎW,–ª¹Xlϸݞ%ë(Šš›%~®ÿ{Ã>Í©!û™k(Xd}ž_CɲWè—zI"YûÍõíb6–xK1QÁ¬D|–yFÍij¬X”'ÈÜ,ñæ˜BÃŽïôHfï\rV¨7ü¬çžež²Ý’U-gvs³0oKØ¿‰Ííy‘êœÅ/_ûYsC°~åw ѯý+°.ü—ð|%YójH{Vó uQñ³‘Läa*2êùé-Ú¾ësˆÕn‹lÄù%÷—`å> ¡âK•‡(O_Žu݆XâÙ«E[¹³åôþ·cmyþ"þë÷¼¼q‡7¾°¿>‹72ûþߨÝáÁúﱦ泚WdÍúñ`=XQÖä2Áf‚±tIMEØ(^Iöh tEXtSoftwareESP Ghostscript 815.02 Æ”Å_IEND®B`‚leptonica-1.70/prog/feynman-stamp.jpg0000444000175000017500000003407210445375013015743 0ustar dandanÿØÿàJFIFÿþ“Software::XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) CREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ¿("ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ö[[iÒi.Ñ·©ác<ž=*ÖÉîæVš6Š4ç½I%¤‹«•fùt«ä€ '€(¼RÚÏæÀŒñ°ÁAK¡”I%ÎKH1APèÅŠÿhÁ¹NÝÐÒÿÂC¤ùˆAÿ}RºÛw5¸RTýÙ=*G°ä’%^CÞ£ÿ„ƒHÿ „÷Õðèÿôƒþú¢è缕<å1Ç8þñ§<ZÏæÛ©e# •ü$:?ý ÿ¾©Ã]ÒKøïª.‚á´3o–èíÆ:`T{.âG¶@Ho»'e§néóýýõCëºT|µü {µAaϧí·Q bU;·risÝÊžrãœâ4‹®éDq ïR¶»¥ Ë_B»Qt;1d‚KYüëu.­Ã þ”ChÓo’ëï?tÀ¨‰´@pu;ûêøI´Bä'oÿ}S˜ý·p+[ÆŒê~ëúT`ºˆ‰ŽCßÞ¡$ÑIÀÔ­ÿïªx×´“Òþÿ vbˆç¼uY‘£:ÿµK$ÚÏç[©d ŒSˆ4€pu?ïªQ¯é$djãýêWB°ømLŦ¹{q·ÐT{.àW·K+}Ù?»Juý$øsþõ/öö•œ}¾ûê‹¡ÙŽm< `#b%^wÞ›²âéÑeB‘§_öé?·t¬€oáÏoš”kºQ8û|9ÿz‹¡Xt–ïm8šÝK)1Š"µiÙ¦¹ão ¦{ISΡÿP|A¤“¨A÷¨º 1 ]Û«Á—Vûýß­Htåà+0ùƒg¿¿µF{1Ü¡Sç^Ï”óúÒÜ-÷]–æSÇë_JëºT7z†®ã³€Ý%p"sΣ𭭬¾2ÕÑ­-Ê‹hˆPã“íUÈî.cæ€e“rÅ=Ô„‹)ãõ¨Nòb9nܯ$ Oø×Ñ? |<–z®½-ͬdI;ìÜ€àyÒ«|Óa–]zî[hœ5ìÈ¥bCÀ¦ ÅÌ|þÎÍåMxÅy`%<~´Šdugóîö¯WóNë^óðÛMŠßâ—Ší'¶ˆ¨‰dUd ÈzT>!Ò Ó>xž&µ…eÝ4ˆþXÈóÁ§Êû…Î á Ëÿ "Ô5Ä® “žµõíÒYYËu %b]Ä ùoàÒ‘ñÔƒ‘µsŸ¡¯ªˆ•e Ž T6‘ãøÛÄ~+ñK|«¥*@I yŠô_#Gðî¢ Ká²caÉ''Š*É4ôÿ+-»>~NCš³{ÿ3ºj©au{B„,móIØûU«Óþƒ7û†“Øeÿ½Cþ¾$ÿÐl´üѳn›N’IÏû§U =2÷YÖ¯ltøZYÞæ@Œÿ®¯Áš6™mâKFÖµ(¶]@±lRTîÏ#ëÅs$lpÈw"’@ï]…BÚZêšÓñöxA€žî5ƒ©Eo§êW6ðJ&†7 =²x¯EÖü/øfËKðÜÞ}ÐQq<–pAçÛ4’Ô.yú#<¬rdbÇñ9ªìá#Ku<žµÓêº=¾‘<C}Ó°jÇœÆqÎsïÅqZ”ŸhÔÜŽŠ§I{Åt%E¶ÚqQ.Ÿ7j|V,lêà 2i¸ÉÆ=«¤Ããm¤R^Mö†\‚¡*NHŠOQZm½œ·SáS“Á5»Äš5‘ŠÚ#$­ÌqLÓnÍ•»…Øwz¯5Ðé÷ÚxÓž\)˜gr·&ƒH¤ŠÚcÏ%Ô·"ÎYdÉ®¯Ã·ŠtÖ·¹I šP œõ¯7¾ž{¹‚¦s»ˆÇq]—‡-bÒ5 bþä(¶pïH8Çå@ÏmñÑkº{ˆlT—^œ÷®vxãŠÇÁ‘äáuçý“\Þ¡ñ‡G–]Zcc8K‹q gzõÿççø¯c&Ÿ¢$mÇ›§Ý´í¹”î1ùÓ9¬ö;ø4xƒWÖ5EÔ%·6öQ“ÈÀ63Ô+³[ùlÓ¶±ª™„nι8ö=p:·ÄýëGÔÎÂà]ß[ˆˆioÆ£ŠšS¾„ÇOœ}…÷Ió¯÷qY6”‚Ìê´(^¯߉V&`È$aÀÚµ=³'ÄË;³ÈšÞ5Ü;àà5ˆºv©á}ON²±¸†æì¾ÌÎGJÕâ¶æé’ɧÜy–‘ª»o^p¸¨çŽ× 3[”jÞ7,<¯"úaµ>PpHçÒiä\/ýCá¯,“â>™'‡§°ûÊïq$£ççúÖªübðõ¼ïsŸrnZ‡w˜¸ãÚš”o¸Yìq­Z?‹nùãír6®íµ‰¯>:¦žÖð¬vꬲ,`1ẞ¦¼Û¾&²ÑXí×9ìàãø·ciâû]DY\}-#‚Eܹ;AÏóªW´ëâ”Èu|¸‰qòÙæ´æDÙžã彞µiin 5ʇqõ×)à«c¦hât·/¬\–ßü@¹ãô®|bÒ£ñE®¤ö“µ¼6ÑÅ´8ÎðOëY^!ø¥¥jVŸm§ÚÜBö÷²\¿ïlñÇ×ô§Ì‚ÌôØ€Ð>%x¯Rä]* „î9©þ)4/ð¯Q¹‰Gï­÷=ðkÏu‹ú üZ¢Åap³ÞX%¶ó"ã#ÿ×TuoŠº~±ðÚoY…ã¡A#0Æ;{Ñt2þ ‘ÿ Ðz*ÿ#_QÞ›e1´Ûö¿»Ü23_-üB¿íG¢¯ò5õgNMØ%¹â:„uÍkÄóÞë3ʳG!! “ƒŒÑ]n£ñ+FÄ §X(º˜6hˆÀ<ä¡¢¬“±·y,ä[y”íò¸bôâÆsá5^Þ9.å[‰˜mCò(*ÅïüxÍþé¡ìÉ:~¥y£ë×w¶ªN·2¸gøU[éaÖ£Õfoß$¾c{ÿœÑ'×ßõó'þ„i“ÇæÆÜdcšã½Î’óFKYB«þ‰p‘É!· š‚__[ø’êúÂQìø##p8­kØdøy>±»7ɾ%õpr¶P“ÕþcøÓ–¥¨‹4­#¶é‹{“\ı“u&ヸ×NŒ¨ 0+˜vßtîyæ®R…BW;ƒÁà„ :4ô±¥èWZ¬»"ÏN:ÖãJæZC#”f¬Ã¥ÞÎß%»œð¾õ§>ƒa+)\ìGj£2jA£ˆÔá†;W®|Fðä~Òã‚Õ‰eNµyõ¥º}ŒÜÈ¡`NôÎ:Ð%®¨×¼±¶‡O#p÷$t®}@2•a‚N)çV{ëÀŠãÉŒ *^Ïó®zÍ\™`F *ñëQœÜÀqÏÖžÇ 3J…‰'ò¬,"3™dÁ¡©c‚8òÛA /Nie8„㌊`WX˜îÆsÆhkse ߥFÔägôó3ÇëT!æA"2²…p=:Õ&©à~µ;î+—oQëOu@¹$têi :­ÛMO5æ ˆ¬òȪÌ98#[2hZ,ZDrD;çqÆÑ·9:·AMÖµ]6þÒÚ;+&·ò˜«JÄ`àcµÐ =®ò*"eØíw¤¹·šÚqÑ2ÌÀ¹ÍX³ÕGÕmïâ‰^Xz£¨`ß®ÆòK(lfñN¨?2~âÌàÝ;z`ƒU4&Î7SÒæÑÞ$»`²J¡¼²9PFAªÉ‚+gBÓãñ¡¨Iª¼²ˆH ¹rzRkºž›y§ÚÁac%»ÛÊÁåb`;UXFDIÚƒ,xP=hžÞòÒt·¸¶t¸|‡-ž˜§4Í ©Eýàå>µèš•í¼zÞ®Ð/Š0¶öÛT ŒW¡ÈÍ5¨Šÿ t™ô‰öpܺù®ˆûÁ‚E}2Ê` ž ŽµòßÂK‰®>'Å-Ã³Èø$“Ó¯Ú¾Ÿ¼3‹I¾Ë·Ï òn­a± ÃK '÷ÛãxaYØ’Œ2I9'W™xÂzöµâ[‹ÍZâe’)IØÌÀmÉÆh«뤋«ÈšÝp±¶YÇFö«wßñã?û†«Û;Z8·•0¾G ô«ßñã?û††Æòôûïúú“ÿB4ñÈÉè:SdCöûî?åæOýÓÂv â¸Ù¹q5[¯ìß°;‡‡$‚Ã,3ïLI˜`+=ê4ˆsŸÎ¥ïtíRõcF^©æIt®O RG9ö«Z¤x™3Ó•2Ü?uÅZ) È"½+ÁbÛVE¶3Ä’ŽŠã$ý+ÏÝ¢¹©¬oZÎá.md!”çh<Ó-êöWz +4NŸ¿/̧è+ ‡ý&(çµq Øå_•o ª ñvŸâÍm. ý¡FÓIí[‰`4ɾPZ&=:šf ôc­Ë±­&WîÛ¸?…\òÎàv8ú𦑿à.eÉÈ%ªü–Æ`r÷¦C—`Н5æÄv •3Âb''ÍfÜDn%;NÕ#<‹ã¿$VPX!Ûæ±Èö"¸M3Â÷‹¡Ëª\©&<ަ»ÿYéšßÄàÕnR [UFÃoà‚*ŸÄIlÚ[}2Æm‘…ḠŽ+9»#£¡ÊZM ¤ åFZI$'ž=½*ÒÝØF>ÌÖìÖg–òzüÕ”-®"GGµ(˜§ßŒ×nÂ6-õÝ:êé#¿¶òâˆþäŒ(§ÍëÅTÕ#¸[Ð÷mØÙŽÞÜ}+.X㜮Ɠ]¬QhÛcÒïnDˆÑ«E br9ëÇ¥VèFLzÆ›.›öfþÎ5ò7’zẎjÈÖô‹“ö[Ë-ÖsÌ+îï–Ç¡{Õ­+ˆŸÒ(€àÍÅsZòÞŪÍý¢s# ÇÆÏáÀúU(£I]#y@Byl×w4Z Ø6‡s}ÝÔ±kr¬~GaÐç“Mk¸¶9Í;ZÓ´ÛHí-­Ø¥Ë½bÀ³'\)þš³'ˆôD‘´élOöH›ÏÞËãšçÚÆãOšK{¨Ìr¯##ªö?Tž?1‚°âšmh:ý/ĺ³¨ÄuKU†îÅ›Œ* p7¨7Íë‘_&­7öŽ|ãÊ€¡û¸J«ob—7PÚ´‹ ÈØ2žÕèSéþ¸wÐïušxíÑì§W ¼¬9Rq“Ú«âÇ9e®iÚ]ŒV6Ö²y3’/X°,Pó…=¹©G‰4I%k ôçR ÑTI¼ýì¾9ÌÜA=Ü–×Q4R!8VêW±üjp21­ àÑÚiž"ѵkøÛWµŽÈ[R¨ ã…Þ |ÜW%¬Å{·*êd™ß”Ï¡û¸˜ªq„šâ—"ØvƽÅá^)4‰õšá V³™d92žªN2p;U­IØËøFü,Ë|Ÿîãõ¯©údšù{áU­ÅÅ4¶º…£‘HÀnëÎå_N][¥Ý´–ò Á*pZCbe¹Ãj?´8µøì,qs8l<°°x>¸¢ ðïË]Wîͽˤ¹ã’N9ïEY'mn’]Ê·2œ*1Øž•bûþ_ËX°ü³¯pO·`PWŠØ¢x­…È ½C{Ô×Õtè>Ó$ösÈp8®»HðjÖ‰:]ˆó×$×e¤|=’(ž;›ÿ6Ïî,!»-ÏÑõ‰t»è®íÝãxÛ?{ƒ_Dh>)—XÐ䑪¸-ÇlW…x¶öZäzu…ÚÊnd*É#©¯£4M 7ÂÐéÆ7ri™Ôµµ9]G↛¥¡uŒÌょjç›ã]Ô²·°lžƒå8¬¯ü4‹@•/d½&ÒiXÈY›äj¿‡¾µæ¹öz½´¶ †“åbqéš Q…®‘èz.©â=~1#\[ª7ðù\ŠßÓg¹8¼˜ú°ÄÅà}Rm^)-¯$Ž(ß—V`¤}®Ú[cgn¶p³K1œç4"%n†6»á[-Sì— f-#úJóx{Tµ×]¤´’XÌj¨í^Ñw«XÚ<M 2 ç¦Es7·£Í–FñáCsS8)+ocÈΟvƒæ¶’1ÛuW’ÞíIÝ#é]Þ¡x’}ôç€pŔɯ:ƒÚ¹Ý$¶,ædŠ/⑇½#Eûµ;‰oá9®†úÚXm!¸ž5hfbŠÁqȪ3¤B-:ŸÒ³q°ŒMFioŒKv2!ä2ñž1ЍD[—o+Þµ °$QUž™„h¹‘ŽæŸ0¬(•@8ÛL™¡Ã0c÷_<ŠÒÕto커¶yVI<µí2:UUy£ŽFØŒpÌ{ @Z»¿º¿Ž?µm.Š0\dš¢FqózUÍVÎ]&ÿìr0s嬙Ýa‘T²84Àd‡ z玢«L˶G©ÈrÇ?§1f85>§¶§ªZØDFùŸnãÎ*Ò¨ê÷Z«F÷7¢„ €03ëTâsÖ®]Û¥µÜ°$‹ BT°õj£ðÆBÍ„w73H—hÃ'Ê+ôæ¸ÛQd;ŽkU âAÝr„t·£QŒçµ`ƒ²pùïÒ·¡|ª¶*Ê[ž—àÝký[3]f¹ã4Ó4i­,b7¬Ÿq1Ç¡Á¯ŠîxòÐ’¸éŠ·£ë“éׯ3Ÿ1än~Gë@ÜSgMðçMŸÄ>5Žúål2o`{šú%È0£¼Ûá X› ™£+ö™‹ü¶kÒ¼²NX`wª0ªï+שּׂ5{)l/PZX]‰­nçB8¶1ô­øH ÓµóavÛ^B6dú×@o#xÁSÅ\ÑØŽÚÐØÛ¯™0;}3ÍyÏÅ7†ôØã´p/î U=vñk¸šäK&2DkÉç­|­ñ^—Ä>-º‹áýÚ©=6ñšEEu;k÷P.f2LI.Ùé])¸ó“tlÍ ë^9¤j¯jw©ö"»í'XD0Ã$r(6ßSZyrÿ7Z¡t@bñ”Œ053³³üØÁåxïUnIJãº}k9Æö–¥á{ȯdÝ5¸i!Œ6IÅrÖÅdwÏð’1øÕÝí¬5¥~b-󧨭Y¼17Áö´ŽöqæÇÏFäqPÈz3¹Œ¬çå5»à›=.}iîuV)obÆMØUçÕ›¿iìí(…´|LÙ=G_Ö¨k­áß ­¢0–K÷e2¯FCÊŠÊÖw&æEüæãQ¹˜Jy±½W<~•ŸsóÂàœv¤¦ð1Þ¤u©¥ÖbÓuo[j1HeÕ-Ù–m÷Q@ ‘\jnÚ2{fº 0—R›I)òjJ €ç9§Má+$•âþÓˆ=»¹ä»HŠÛ9o—z°íôª­á‹X®«Žã÷v„–ÿYß>¼WIªëz]Ž­¤øzhÖØÚlšGl›rôÀüùªŠ±-ž_LŽÇ$±b~¦¶·™¬·ÚbXÄ 4x\§‘úV+L½…SŒ“QK&~QMyøí@\šb;?ƒã ú/õ¯¨/šá,¦kU 8_œšùáü”¸>‹ýkêŠÚ-ÏÐ<1â ij^ê·+Å)&2Hr@ã4Wk¨|BðüÚYÙH—°í çƒëÍd]¼hëm*pìv¸àž÷þ<'ïò‚’òU¸”Ÿ‘qÍX¾°œ°h`|y&åó7é2qÿ4–ºeγqm ¼ðM!F”t_Z”KÌóH†H’îBê;ƽKL¾oi—šžŒ-ltûHèäˆ 8c‘ë\ÑÜÚç·Ñêšþ¡¢+f¬ã¶‰{H÷â¸T†Y%¸‚^_%жßáÁÅhé"á|]g%»‡˜Ý± Øžk¿ø€tÿ è ¤Ù¤r_^fI%P27ß^µ®å^Ç“±ÛÃu­kÙJ$‡¯µcõ\½I­]DÉ,Ôe}òjÑe¸ÜîÀéO;隬’VéÁfÓå‘R튡êÊØÅG[áÆñ&{gx¶sEg#ãÎ#ä=ýkÛtÝ/í‘jwz›JB«ãvP¸ï^e¦YZ^éP[Yø¿O’"˜3°ÍvZ^‘8‰`}nÞèú@N("z›~&Ò4h:AÔc(á°G§Jŵ¾¸¶ˆÛHáÄ]¢¹ÏxfãHÔÆ¡o©»!ÆèÝÙª‹êÍxâÖÙÿxÀÝy q†›aÕÄ×Q[Û°Èl¹<ðkçÿˆ:aÒ¼]8÷r€àŽ„žM{±ÓàÒôÒ¦PnrIëë^ñ/DKÿ Á©Û†3@ìdïò€óGÆæ)A< ×E¤jBU rƹ‚IJ›Ì`€ƒ‚(&=Uo ±£ •rWYÑ6àçìkÑ.\ZFd$Œ×AÔqÆÜòG64ôX"›YI$¹¶!å=±Ò±µ Iîõ‰äópùPîä(jdÛÊÇo±ëX‘ÍŒõ¯@×¼ŸøFåŽáI•™ =ÍqšD"[¡‘¸Ôˆq÷Ò:-8˜í‘:fµ¢Èûý5Ú,«†^§ERÃwN†¡›X¿%ì×­•ÁU*ã¥C(KgîÔP’¯ÔcµI0瞆³bd-!8ÛÀªåÉ= Xv;[¥U'¯¨¢]j7’ZDeù—½RðÔö~ø–WT<‹r”ð1Ï­u~ÓáÑ'ðÔ×òIy=Ϋ,Qmc¶69Á®vãB´ñ7Æ)´»Ö+ ¡AÚp{Õ'ÜL܃Q{_†Ú¦«s¼©ºžKq1ݸÈÆ}\ð•Ô·°j^5׿’ÎÅí‘بùQj·k§'‡>êðBn!²šV†5à²îg=xÅaüFÕd½øc¡¸Œ[Åqpê#@mÚ1)yGÀ—ö—ÆHçÓ hmŽÜ –<äñë_I2«©GPÊz‚2 |­ð}6üH¶¶ßë_Qß<ée3Z®éÂå3“]PÚÆRÜËKÒ¼=¨ù‘É ;gcŒ’zœQ^g¢xsÄ~"ñ4·Ú¬Ò£E)Âd€$3EY'®’³ÞÄÖËò£|î:·|@±Ÿ<|¦«ÚÈmdû4©‚OÊý{U»…G·‘dRTŽ@ë@Ë4gP¿ù€ÅÌÞ5 Íÿ–‹ô¯v“ÁžÊÒé·ÁÚFb~ÑÔ“W4¿†ÞÖDŠÊí1’sX{9s£ç“4yåÔÅBòDy,¬G¥}?ÿ WÁŸóësÿ›ÿ OÁyÿ[Ÿü5J ¯h—É~Ž2{f·|2‘4Ò8a…ù×Ðßð¤¼?åÒëŸúx5nÓá/„ì‘– iÀn¹˜š¤™Q«y•£ÜëWbÚÂ"ìz·Pµ…ã ì§þÏóÕ¥v5ôöŸáÝ7LU[H<½¿Ä?s—ß ü-¨Ü›‹˜nšBʼn‘ɪ±^Ý\ùËÃÒÅkoz„e–<“Ÿz÷ßøD¬uÿéæÂE·šÞ¬ƒûÄ çp| ð’Ç*-µÈ®Ö"sœWUg¢YXXGgu.sI&ˆTíc“ð¯Ží®öV§òísøÎi{:>py"U?8üêMY}\¶ÕmZkvß´Œçü澋o„>aƒkqÿD~ ø;9û-Îë¹§ì¤.tx¾©ñçPÒîôø­£…nóæ>Å““Òž~*]²³XþØÐ-¿±qµz{ײ™ðqÿ—k¯ü4/ÁŸŽE­Ïýÿ4ý“tx¾ñ6îÆÎÎ-£šKK‡¸…ö/ÊÍF‹ãëm7_½ñÕ·›©J€FR\~5íàǃHÿ[Ÿûþi?áKø0cýçþÿš~É‹+âo‰º‡‰4it§ ‚bKåFN}Åfk~3¸×t?I¸ò’”ÂØé^ø> x3}–ëŸúx4•ðaû-Ïþ=›#Æ>Èñ&܆îÆ¾ªï\^…ð»ÂþÕ—RÓ­çK”Æ LX~UÖ^Û}²Êk}ìžbíܧV±V!»œf¥ñA´×£°µ+=Îì;ÄÀ<õõ¢³¼3ðÒ TšK÷óݤ.’äó’N9¢¨GW¤ø‡NñCÄÖ(Í$’<å—0ðî£kc-žsäÚÜ.×BO׎x  6´»ï-m%X7ùbè¸ÙN}ûWSâOXøgFmFèïýÔ`àÈ}s>ð •¶„RåO ?8ýª·‹¼9¨YØ\Zè·k¤Ù"ÐuÈçƒïV|+ðþÊßC1Ý yœ}ðyÏÖ€:Ÿø’ÃÃz3êWN Ìh ‡ÐVG‚üiã4ik%¬±ó¶FpÏÅqzï…ug]¶µ»»c ‰“é_Jìî<)™§Cs¥bÈenÄã¸ï@xÏâ=‡„.â³6Ò]ݾ Š&¨#ƒÍtš6³i®i1ê6Î<–ó÷HêҼ˾ ¹¾ñú†·(¸¶rNxÉã©­ox{P°´¸ƒC¹ò ºM’!'×#ž½KkñoKºñ1Ò…¤«,Ý—‚sžý««ñ‰,<5¢I©Ý8d º4Cè+•ð—€,àÑ/<Òg.9ë\þ¿ámcWÕ­l.n•ì “r!<ôÇ­v~ ñõŸ‹¼ÈÅ»ÚÜ'>\Œ +žŒþ#XxBâ+So%åÛòÐÄÀ2©ŸZ’oŧéÖ÷n!½·•óÁ8î;Šä<3à«­CÄSjÜ¢áËuÝž2}Ízn‰­ÚkºDz•«)ºäýÒ:ƒô®óã.Ÿo­Ie™qs GkÏ®ÐrA©|]áíBÇN¸·Ðî<ˆ.Sd‰žƒ®G#=êÇ‚| ga¦fò5–W剿€(xƒâm´÷–V1<„\`ìtúƒEt±xIƒS‰ 9ŠÿÙleptonica-1.70/prog/colorsegtest.c0000644000175000017500000000742212242267012015340 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorsegtest.c * * See colorseg.c for details. * * Just for fun, try these combinations of the 4 parameters below on * the image tetons.jpg: * 30 20 5 10 (20 colors) * 40 20 7 15 (19 colors) * 50 12 5 12 (12 colors) * 50 12 3 12 (12 colors) * 30 13 3 13 (12 colors) * 30 20 3 20 (20 colors) * 15 20 5 15 (19 colors) * 80 20 3 20 (12 colors) * 100 15 5 15 (7 colors) * 100 15 2 15 (7 colors) * 100 15 0 15 (7 colors) * 30 15 0 15 (12 colors) * 150 15 0 15 (4 colors) * 150 15 2 15 (4 colors) * 180 6 2 6 (3 colors) * 180 6 0 6 (3 colors) */ #include "allheaders.h" static const l_int32 MAX_DIST = 120; static const l_int32 MAX_COLORS = 15; static const l_int32 SEL_SIZE = 4; static const l_int32 FINAL_COLORS = 15; int main(int argc, char **argv) { l_int32 max_dist, max_colors, sel_size, final_colors; PIX *pixs, *pixd, *pixt; char *filein, *fileout; static char mainName[] = "colorsegtest"; if (argc != 3 && argc != 7) return ERROR_INT( "Syntax: colorsegtest filein fileout" " [max_dist max_colors sel_size final_colors]\n" " Default values are: max_dist = 120\n" " max_colors = 15\n" " sel_size = 4\n" " final_colors = 15\n", mainName, 1); filein = argv[1]; fileout = argv[2]; if (argc == 3) { /* use default values */ max_dist = MAX_DIST; max_colors = MAX_COLORS; sel_size = SEL_SIZE; final_colors = FINAL_COLORS; } else { /* 6 input args */ max_dist = atoi(argv[3]); max_colors = atoi(argv[4]); sel_size = atoi(argv[5]); final_colors = atoi(argv[6]); } if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); startTimer(); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); pixd = pixColorSegment(pixt, max_dist, max_colors, sel_size, final_colors); fprintf(stderr, "Time to segment: %7.3f sec\n", stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/convertfilestopdf.c0000644000175000017500000001020112244775411016361 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convertfilestopdf.c * * Converts all image files in the given directory with matching substring * to a pdf, with the specified scaling factor <= 1.0 applied to all * images. * * See below for syntax and usage. * * The images are displayed at a resolution that depends on the * input resolution (res) and the scaling factor (scalefact) that * is applied to the images before conversion to pdf. Internally * we multiply these, so that the generated pdf will render at the * same resolution as if it hadn't been scaled. By downscaling, you * reduce the size of the images. For jpeg, downscaling reduces * pdf size by the square of the scale factor. The jpeg quality can * be specified from 1 (very poor) to 100 (best available, but * still lossy); use 0 for the default (75). */ #include #include "allheaders.h" int main(int argc, char **argv) { char *dirin, *substr, *title, *fileout; l_int32 ret, res, type, quality; l_float32 scalefactor; static char mainName[] = "convertfilestopdf"; if (argc != 9) { fprintf(stderr, " Syntax: convertfilestopdf dirin substr res" " scalefactor encoding_type title fileout\n" " dirin: input directory for image files\n" " substr: Use 'allfiles' to convert all files\n" " in the directory.\n" " res: Input resolution of each image;\n" " assumed to all be the same\n" " scalefactor: Use to scale all images\n" " encoding_type:\n" " L_JPEG_ENCODE = 1\n" " L_G4_ENCODE = 2\n" " L_FLATE_ENCODE = 3, or 0 for per-page default)\n" " quality: used for jpeg; 0 for default (75);\n" " otherwise select from 1 to 100\n" " title: Use 'none' to omit\n" " fileout: Output pdf file\n"); return 1; } dirin = argv[1]; substr = argv[2]; res = atoi(argv[3]); scalefactor = atof(argv[4]); type = atoi(argv[5]); quality = atoi(argv[6]); title = argv[7]; fileout = argv[8]; if (!strcmp(substr, "allfiles")) substr = NULL; if (scalefactor <= 0.0 || scalefactor > 1.0) { L_WARNING("invalid scalefactor: setting to 1.0\n", mainName); scalefactor = 1.0; } if (!strcmp(title, "none")) title = NULL; ret = convertFilesToPdf(dirin, substr, res, scalefactor, type, quality, title, fileout); return ret; } leptonica-1.70/prog/dwalinearlow.3.c0000644000175000017500000234703011707074305015466 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: * l_int32 fmorphopgen_low_3() * * Static Low-level: * void fdilate_3_*() * void ferode_3_*() */ #include "allheaders.h" static void fdilate_3_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_76(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_76(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_77(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_77(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_78(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_78(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_79(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_79(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_80(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_80(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_81(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_81(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_82(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_82(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_83(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_83(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_84(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_84(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_85(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_85(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_86(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_86(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_87(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_87(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_88(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_88(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_89(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_89(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_90(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_90(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_91(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_91(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_92(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_92(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_93(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_93(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_94(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_94(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_95(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_95(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_96(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_96(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_97(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_97(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_98(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_98(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_99(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_99(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_100(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_100(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_101(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_101(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_102(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_102(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_103(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_103(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_104(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_104(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_105(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_105(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_106(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_106(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_107(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_107(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_108(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_108(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_109(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_109(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_110(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_110(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_111(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_111(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_112(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_112(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_113(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_113(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_114(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_114(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_115(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_115(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_116(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_116(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_117(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_117(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_118(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_118(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_119(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_119(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_120(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_120(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_121(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_121(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_122(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_122(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_3_123(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_3_123(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! * fmorphopgen_low_3() * * a dispatcher to appropriate low-level code */ l_int32 fmorphopgen_low_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fdilate_3_0(datad, w, h, wpld, datas, wpls); break; case 1: ferode_3_0(datad, w, h, wpld, datas, wpls); break; case 2: fdilate_3_1(datad, w, h, wpld, datas, wpls); break; case 3: ferode_3_1(datad, w, h, wpld, datas, wpls); break; case 4: fdilate_3_2(datad, w, h, wpld, datas, wpls); break; case 5: ferode_3_2(datad, w, h, wpld, datas, wpls); break; case 6: fdilate_3_3(datad, w, h, wpld, datas, wpls); break; case 7: ferode_3_3(datad, w, h, wpld, datas, wpls); break; case 8: fdilate_3_4(datad, w, h, wpld, datas, wpls); break; case 9: ferode_3_4(datad, w, h, wpld, datas, wpls); break; case 10: fdilate_3_5(datad, w, h, wpld, datas, wpls); break; case 11: ferode_3_5(datad, w, h, wpld, datas, wpls); break; case 12: fdilate_3_6(datad, w, h, wpld, datas, wpls); break; case 13: ferode_3_6(datad, w, h, wpld, datas, wpls); break; case 14: fdilate_3_7(datad, w, h, wpld, datas, wpls); break; case 15: ferode_3_7(datad, w, h, wpld, datas, wpls); break; case 16: fdilate_3_8(datad, w, h, wpld, datas, wpls); break; case 17: ferode_3_8(datad, w, h, wpld, datas, wpls); break; case 18: fdilate_3_9(datad, w, h, wpld, datas, wpls); break; case 19: ferode_3_9(datad, w, h, wpld, datas, wpls); break; case 20: fdilate_3_10(datad, w, h, wpld, datas, wpls); break; case 21: ferode_3_10(datad, w, h, wpld, datas, wpls); break; case 22: fdilate_3_11(datad, w, h, wpld, datas, wpls); break; case 23: ferode_3_11(datad, w, h, wpld, datas, wpls); break; case 24: fdilate_3_12(datad, w, h, wpld, datas, wpls); break; case 25: ferode_3_12(datad, w, h, wpld, datas, wpls); break; case 26: fdilate_3_13(datad, w, h, wpld, datas, wpls); break; case 27: ferode_3_13(datad, w, h, wpld, datas, wpls); break; case 28: fdilate_3_14(datad, w, h, wpld, datas, wpls); break; case 29: ferode_3_14(datad, w, h, wpld, datas, wpls); break; case 30: fdilate_3_15(datad, w, h, wpld, datas, wpls); break; case 31: ferode_3_15(datad, w, h, wpld, datas, wpls); break; case 32: fdilate_3_16(datad, w, h, wpld, datas, wpls); break; case 33: ferode_3_16(datad, w, h, wpld, datas, wpls); break; case 34: fdilate_3_17(datad, w, h, wpld, datas, wpls); break; case 35: ferode_3_17(datad, w, h, wpld, datas, wpls); break; case 36: fdilate_3_18(datad, w, h, wpld, datas, wpls); break; case 37: ferode_3_18(datad, w, h, wpld, datas, wpls); break; case 38: fdilate_3_19(datad, w, h, wpld, datas, wpls); break; case 39: ferode_3_19(datad, w, h, wpld, datas, wpls); break; case 40: fdilate_3_20(datad, w, h, wpld, datas, wpls); break; case 41: ferode_3_20(datad, w, h, wpld, datas, wpls); break; case 42: fdilate_3_21(datad, w, h, wpld, datas, wpls); break; case 43: ferode_3_21(datad, w, h, wpld, datas, wpls); break; case 44: fdilate_3_22(datad, w, h, wpld, datas, wpls); break; case 45: ferode_3_22(datad, w, h, wpld, datas, wpls); break; case 46: fdilate_3_23(datad, w, h, wpld, datas, wpls); break; case 47: ferode_3_23(datad, w, h, wpld, datas, wpls); break; case 48: fdilate_3_24(datad, w, h, wpld, datas, wpls); break; case 49: ferode_3_24(datad, w, h, wpld, datas, wpls); break; case 50: fdilate_3_25(datad, w, h, wpld, datas, wpls); break; case 51: ferode_3_25(datad, w, h, wpld, datas, wpls); break; case 52: fdilate_3_26(datad, w, h, wpld, datas, wpls); break; case 53: ferode_3_26(datad, w, h, wpld, datas, wpls); break; case 54: fdilate_3_27(datad, w, h, wpld, datas, wpls); break; case 55: ferode_3_27(datad, w, h, wpld, datas, wpls); break; case 56: fdilate_3_28(datad, w, h, wpld, datas, wpls); break; case 57: ferode_3_28(datad, w, h, wpld, datas, wpls); break; case 58: fdilate_3_29(datad, w, h, wpld, datas, wpls); break; case 59: ferode_3_29(datad, w, h, wpld, datas, wpls); break; case 60: fdilate_3_30(datad, w, h, wpld, datas, wpls); break; case 61: ferode_3_30(datad, w, h, wpld, datas, wpls); break; case 62: fdilate_3_31(datad, w, h, wpld, datas, wpls); break; case 63: ferode_3_31(datad, w, h, wpld, datas, wpls); break; case 64: fdilate_3_32(datad, w, h, wpld, datas, wpls); break; case 65: ferode_3_32(datad, w, h, wpld, datas, wpls); break; case 66: fdilate_3_33(datad, w, h, wpld, datas, wpls); break; case 67: ferode_3_33(datad, w, h, wpld, datas, wpls); break; case 68: fdilate_3_34(datad, w, h, wpld, datas, wpls); break; case 69: ferode_3_34(datad, w, h, wpld, datas, wpls); break; case 70: fdilate_3_35(datad, w, h, wpld, datas, wpls); break; case 71: ferode_3_35(datad, w, h, wpld, datas, wpls); break; case 72: fdilate_3_36(datad, w, h, wpld, datas, wpls); break; case 73: ferode_3_36(datad, w, h, wpld, datas, wpls); break; case 74: fdilate_3_37(datad, w, h, wpld, datas, wpls); break; case 75: ferode_3_37(datad, w, h, wpld, datas, wpls); break; case 76: fdilate_3_38(datad, w, h, wpld, datas, wpls); break; case 77: ferode_3_38(datad, w, h, wpld, datas, wpls); break; case 78: fdilate_3_39(datad, w, h, wpld, datas, wpls); break; case 79: ferode_3_39(datad, w, h, wpld, datas, wpls); break; case 80: fdilate_3_40(datad, w, h, wpld, datas, wpls); break; case 81: ferode_3_40(datad, w, h, wpld, datas, wpls); break; case 82: fdilate_3_41(datad, w, h, wpld, datas, wpls); break; case 83: ferode_3_41(datad, w, h, wpld, datas, wpls); break; case 84: fdilate_3_42(datad, w, h, wpld, datas, wpls); break; case 85: ferode_3_42(datad, w, h, wpld, datas, wpls); break; case 86: fdilate_3_43(datad, w, h, wpld, datas, wpls); break; case 87: ferode_3_43(datad, w, h, wpld, datas, wpls); break; case 88: fdilate_3_44(datad, w, h, wpld, datas, wpls); break; case 89: ferode_3_44(datad, w, h, wpld, datas, wpls); break; case 90: fdilate_3_45(datad, w, h, wpld, datas, wpls); break; case 91: ferode_3_45(datad, w, h, wpld, datas, wpls); break; case 92: fdilate_3_46(datad, w, h, wpld, datas, wpls); break; case 93: ferode_3_46(datad, w, h, wpld, datas, wpls); break; case 94: fdilate_3_47(datad, w, h, wpld, datas, wpls); break; case 95: ferode_3_47(datad, w, h, wpld, datas, wpls); break; case 96: fdilate_3_48(datad, w, h, wpld, datas, wpls); break; case 97: ferode_3_48(datad, w, h, wpld, datas, wpls); break; case 98: fdilate_3_49(datad, w, h, wpld, datas, wpls); break; case 99: ferode_3_49(datad, w, h, wpld, datas, wpls); break; case 100: fdilate_3_50(datad, w, h, wpld, datas, wpls); break; case 101: ferode_3_50(datad, w, h, wpld, datas, wpls); break; case 102: fdilate_3_51(datad, w, h, wpld, datas, wpls); break; case 103: ferode_3_51(datad, w, h, wpld, datas, wpls); break; case 104: fdilate_3_52(datad, w, h, wpld, datas, wpls); break; case 105: ferode_3_52(datad, w, h, wpld, datas, wpls); break; case 106: fdilate_3_53(datad, w, h, wpld, datas, wpls); break; case 107: ferode_3_53(datad, w, h, wpld, datas, wpls); break; case 108: fdilate_3_54(datad, w, h, wpld, datas, wpls); break; case 109: ferode_3_54(datad, w, h, wpld, datas, wpls); break; case 110: fdilate_3_55(datad, w, h, wpld, datas, wpls); break; case 111: ferode_3_55(datad, w, h, wpld, datas, wpls); break; case 112: fdilate_3_56(datad, w, h, wpld, datas, wpls); break; case 113: ferode_3_56(datad, w, h, wpld, datas, wpls); break; case 114: fdilate_3_57(datad, w, h, wpld, datas, wpls); break; case 115: ferode_3_57(datad, w, h, wpld, datas, wpls); break; case 116: fdilate_3_58(datad, w, h, wpld, datas, wpls); break; case 117: ferode_3_58(datad, w, h, wpld, datas, wpls); break; case 118: fdilate_3_59(datad, w, h, wpld, datas, wpls); break; case 119: ferode_3_59(datad, w, h, wpld, datas, wpls); break; case 120: fdilate_3_60(datad, w, h, wpld, datas, wpls); break; case 121: ferode_3_60(datad, w, h, wpld, datas, wpls); break; case 122: fdilate_3_61(datad, w, h, wpld, datas, wpls); break; case 123: ferode_3_61(datad, w, h, wpld, datas, wpls); break; case 124: fdilate_3_62(datad, w, h, wpld, datas, wpls); break; case 125: ferode_3_62(datad, w, h, wpld, datas, wpls); break; case 126: fdilate_3_63(datad, w, h, wpld, datas, wpls); break; case 127: ferode_3_63(datad, w, h, wpld, datas, wpls); break; case 128: fdilate_3_64(datad, w, h, wpld, datas, wpls); break; case 129: ferode_3_64(datad, w, h, wpld, datas, wpls); break; case 130: fdilate_3_65(datad, w, h, wpld, datas, wpls); break; case 131: ferode_3_65(datad, w, h, wpld, datas, wpls); break; case 132: fdilate_3_66(datad, w, h, wpld, datas, wpls); break; case 133: ferode_3_66(datad, w, h, wpld, datas, wpls); break; case 134: fdilate_3_67(datad, w, h, wpld, datas, wpls); break; case 135: ferode_3_67(datad, w, h, wpld, datas, wpls); break; case 136: fdilate_3_68(datad, w, h, wpld, datas, wpls); break; case 137: ferode_3_68(datad, w, h, wpld, datas, wpls); break; case 138: fdilate_3_69(datad, w, h, wpld, datas, wpls); break; case 139: ferode_3_69(datad, w, h, wpld, datas, wpls); break; case 140: fdilate_3_70(datad, w, h, wpld, datas, wpls); break; case 141: ferode_3_70(datad, w, h, wpld, datas, wpls); break; case 142: fdilate_3_71(datad, w, h, wpld, datas, wpls); break; case 143: ferode_3_71(datad, w, h, wpld, datas, wpls); break; case 144: fdilate_3_72(datad, w, h, wpld, datas, wpls); break; case 145: ferode_3_72(datad, w, h, wpld, datas, wpls); break; case 146: fdilate_3_73(datad, w, h, wpld, datas, wpls); break; case 147: ferode_3_73(datad, w, h, wpld, datas, wpls); break; case 148: fdilate_3_74(datad, w, h, wpld, datas, wpls); break; case 149: ferode_3_74(datad, w, h, wpld, datas, wpls); break; case 150: fdilate_3_75(datad, w, h, wpld, datas, wpls); break; case 151: ferode_3_75(datad, w, h, wpld, datas, wpls); break; case 152: fdilate_3_76(datad, w, h, wpld, datas, wpls); break; case 153: ferode_3_76(datad, w, h, wpld, datas, wpls); break; case 154: fdilate_3_77(datad, w, h, wpld, datas, wpls); break; case 155: ferode_3_77(datad, w, h, wpld, datas, wpls); break; case 156: fdilate_3_78(datad, w, h, wpld, datas, wpls); break; case 157: ferode_3_78(datad, w, h, wpld, datas, wpls); break; case 158: fdilate_3_79(datad, w, h, wpld, datas, wpls); break; case 159: ferode_3_79(datad, w, h, wpld, datas, wpls); break; case 160: fdilate_3_80(datad, w, h, wpld, datas, wpls); break; case 161: ferode_3_80(datad, w, h, wpld, datas, wpls); break; case 162: fdilate_3_81(datad, w, h, wpld, datas, wpls); break; case 163: ferode_3_81(datad, w, h, wpld, datas, wpls); break; case 164: fdilate_3_82(datad, w, h, wpld, datas, wpls); break; case 165: ferode_3_82(datad, w, h, wpld, datas, wpls); break; case 166: fdilate_3_83(datad, w, h, wpld, datas, wpls); break; case 167: ferode_3_83(datad, w, h, wpld, datas, wpls); break; case 168: fdilate_3_84(datad, w, h, wpld, datas, wpls); break; case 169: ferode_3_84(datad, w, h, wpld, datas, wpls); break; case 170: fdilate_3_85(datad, w, h, wpld, datas, wpls); break; case 171: ferode_3_85(datad, w, h, wpld, datas, wpls); break; case 172: fdilate_3_86(datad, w, h, wpld, datas, wpls); break; case 173: ferode_3_86(datad, w, h, wpld, datas, wpls); break; case 174: fdilate_3_87(datad, w, h, wpld, datas, wpls); break; case 175: ferode_3_87(datad, w, h, wpld, datas, wpls); break; case 176: fdilate_3_88(datad, w, h, wpld, datas, wpls); break; case 177: ferode_3_88(datad, w, h, wpld, datas, wpls); break; case 178: fdilate_3_89(datad, w, h, wpld, datas, wpls); break; case 179: ferode_3_89(datad, w, h, wpld, datas, wpls); break; case 180: fdilate_3_90(datad, w, h, wpld, datas, wpls); break; case 181: ferode_3_90(datad, w, h, wpld, datas, wpls); break; case 182: fdilate_3_91(datad, w, h, wpld, datas, wpls); break; case 183: ferode_3_91(datad, w, h, wpld, datas, wpls); break; case 184: fdilate_3_92(datad, w, h, wpld, datas, wpls); break; case 185: ferode_3_92(datad, w, h, wpld, datas, wpls); break; case 186: fdilate_3_93(datad, w, h, wpld, datas, wpls); break; case 187: ferode_3_93(datad, w, h, wpld, datas, wpls); break; case 188: fdilate_3_94(datad, w, h, wpld, datas, wpls); break; case 189: ferode_3_94(datad, w, h, wpld, datas, wpls); break; case 190: fdilate_3_95(datad, w, h, wpld, datas, wpls); break; case 191: ferode_3_95(datad, w, h, wpld, datas, wpls); break; case 192: fdilate_3_96(datad, w, h, wpld, datas, wpls); break; case 193: ferode_3_96(datad, w, h, wpld, datas, wpls); break; case 194: fdilate_3_97(datad, w, h, wpld, datas, wpls); break; case 195: ferode_3_97(datad, w, h, wpld, datas, wpls); break; case 196: fdilate_3_98(datad, w, h, wpld, datas, wpls); break; case 197: ferode_3_98(datad, w, h, wpld, datas, wpls); break; case 198: fdilate_3_99(datad, w, h, wpld, datas, wpls); break; case 199: ferode_3_99(datad, w, h, wpld, datas, wpls); break; case 200: fdilate_3_100(datad, w, h, wpld, datas, wpls); break; case 201: ferode_3_100(datad, w, h, wpld, datas, wpls); break; case 202: fdilate_3_101(datad, w, h, wpld, datas, wpls); break; case 203: ferode_3_101(datad, w, h, wpld, datas, wpls); break; case 204: fdilate_3_102(datad, w, h, wpld, datas, wpls); break; case 205: ferode_3_102(datad, w, h, wpld, datas, wpls); break; case 206: fdilate_3_103(datad, w, h, wpld, datas, wpls); break; case 207: ferode_3_103(datad, w, h, wpld, datas, wpls); break; case 208: fdilate_3_104(datad, w, h, wpld, datas, wpls); break; case 209: ferode_3_104(datad, w, h, wpld, datas, wpls); break; case 210: fdilate_3_105(datad, w, h, wpld, datas, wpls); break; case 211: ferode_3_105(datad, w, h, wpld, datas, wpls); break; case 212: fdilate_3_106(datad, w, h, wpld, datas, wpls); break; case 213: ferode_3_106(datad, w, h, wpld, datas, wpls); break; case 214: fdilate_3_107(datad, w, h, wpld, datas, wpls); break; case 215: ferode_3_107(datad, w, h, wpld, datas, wpls); break; case 216: fdilate_3_108(datad, w, h, wpld, datas, wpls); break; case 217: ferode_3_108(datad, w, h, wpld, datas, wpls); break; case 218: fdilate_3_109(datad, w, h, wpld, datas, wpls); break; case 219: ferode_3_109(datad, w, h, wpld, datas, wpls); break; case 220: fdilate_3_110(datad, w, h, wpld, datas, wpls); break; case 221: ferode_3_110(datad, w, h, wpld, datas, wpls); break; case 222: fdilate_3_111(datad, w, h, wpld, datas, wpls); break; case 223: ferode_3_111(datad, w, h, wpld, datas, wpls); break; case 224: fdilate_3_112(datad, w, h, wpld, datas, wpls); break; case 225: ferode_3_112(datad, w, h, wpld, datas, wpls); break; case 226: fdilate_3_113(datad, w, h, wpld, datas, wpls); break; case 227: ferode_3_113(datad, w, h, wpld, datas, wpls); break; case 228: fdilate_3_114(datad, w, h, wpld, datas, wpls); break; case 229: ferode_3_114(datad, w, h, wpld, datas, wpls); break; case 230: fdilate_3_115(datad, w, h, wpld, datas, wpls); break; case 231: ferode_3_115(datad, w, h, wpld, datas, wpls); break; case 232: fdilate_3_116(datad, w, h, wpld, datas, wpls); break; case 233: ferode_3_116(datad, w, h, wpld, datas, wpls); break; case 234: fdilate_3_117(datad, w, h, wpld, datas, wpls); break; case 235: ferode_3_117(datad, w, h, wpld, datas, wpls); break; case 236: fdilate_3_118(datad, w, h, wpld, datas, wpls); break; case 237: ferode_3_118(datad, w, h, wpld, datas, wpls); break; case 238: fdilate_3_119(datad, w, h, wpld, datas, wpls); break; case 239: ferode_3_119(datad, w, h, wpld, datas, wpls); break; case 240: fdilate_3_120(datad, w, h, wpld, datas, wpls); break; case 241: ferode_3_120(datad, w, h, wpld, datas, wpls); break; case 242: fdilate_3_121(datad, w, h, wpld, datas, wpls); break; case 243: ferode_3_121(datad, w, h, wpld, datas, wpls); break; case 244: fdilate_3_122(datad, w, h, wpld, datas, wpls); break; case 245: ferode_3_122(datad, w, h, wpld, datas, wpls); break; case 246: fdilate_3_123(datad, w, h, wpld, datas, wpls); break; case 247: ferode_3_123(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fdilate_3_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr); } } } static void ferode_3_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr); } } } static void fdilate_3_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_3_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_3_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_3_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_3_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_3_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_3_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_3_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_3_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_3_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_3_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_3_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_3_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_3_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_3_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_3_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_3_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_3_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_3_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_3_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_3_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_3_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_3_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_3_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_3_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_3_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_3_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_3_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_3_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)); } } } static void ferode_3_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)); } } } static void fdilate_3_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)); } } } static void ferode_3_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)); } } } static void fdilate_3_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_3_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_3_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_3_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_3_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_3_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_3_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_3_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_3_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)); } } } static void ferode_3_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)); } } } static void fdilate_3_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)); } } } static void ferode_3_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)); } } } static void fdilate_3_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_3_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_3_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_3_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_3_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)); } } } static void ferode_3_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)); } } } static void fdilate_3_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)); } } } static void ferode_3_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)); } } } static void fdilate_3_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_3_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_3_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_3_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_3_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_3_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_3_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_3_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_3_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_3_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_3_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_3_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_3_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_3_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_3_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_3_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_3_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)); } } } static void ferode_3_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)); } } } static void fdilate_3_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)); } } } static void ferode_3_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)); } } } static void fdilate_3_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_3_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_3_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_3_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_3_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_3_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_3_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_3_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_3_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)); } } } static void ferode_3_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)); } } } static void fdilate_3_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)); } } } static void ferode_3_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)); } } } static void fdilate_3_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_3_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_3_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_3_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_3_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)); } } } static void ferode_3_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)); } } } static void fdilate_3_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)); } } } static void ferode_3_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)); } } } static void fdilate_3_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_3_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_3_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_3_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_3_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_3_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_3_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_3_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_3_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)); } } } static void ferode_3_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)); } } } static void fdilate_3_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)); } } } static void ferode_3_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)); } } } static void fdilate_3_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)); } } } static void ferode_3_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)); } } } static void fdilate_3_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)); } } } static void ferode_3_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)); } } } static void fdilate_3_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)); } } } static void ferode_3_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)); } } } static void fdilate_3_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)); } } } static void ferode_3_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)); } } } static void fdilate_3_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)); } } } static void ferode_3_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)); } } } static void fdilate_3_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)); } } } static void ferode_3_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)); } } } static void fdilate_3_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)) | ((*(sptr) >> 30) | (*(sptr - 1) << 2)); } } } static void ferode_3_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)) & ((*(sptr) << 30) | (*(sptr + 1) >> 2)); } } } static void fdilate_3_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 31) | (*(sptr + 1) >> 1)) | ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)) | ((*(sptr) >> 30) | (*(sptr - 1) << 2)); } } } static void ferode_3_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 31) | (*(sptr - 1) << 1)) & ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)) & ((*(sptr) << 30) | (*(sptr + 1) >> 2)); } } } static void fdilate_3_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 31) | (*(sptr + 1) >> 1)) | ((*(sptr) << 30) | (*(sptr + 1) >> 2)) | ((*(sptr) << 29) | (*(sptr + 1) >> 3)) | ((*(sptr) << 28) | (*(sptr + 1) >> 4)) | ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 26) | (*(sptr + 1) >> 6)) | ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)) | ((*(sptr) >> 26) | (*(sptr - 1) << 6)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)) | ((*(sptr) >> 28) | (*(sptr - 1) << 4)) | ((*(sptr) >> 29) | (*(sptr - 1) << 3)) | ((*(sptr) >> 30) | (*(sptr - 1) << 2)) | ((*(sptr) >> 31) | (*(sptr - 1) << 1)); } } } static void ferode_3_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 31) | (*(sptr - 1) << 1)) & ((*(sptr) >> 30) | (*(sptr - 1) << 2)) & ((*(sptr) >> 29) | (*(sptr - 1) << 3)) & ((*(sptr) >> 28) | (*(sptr - 1) << 4)) & ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 26) | (*(sptr - 1) << 6)) & ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)) & ((*(sptr) << 26) | (*(sptr + 1) >> 6)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)) & ((*(sptr) << 28) | (*(sptr + 1) >> 4)) & ((*(sptr) << 29) | (*(sptr + 1) >> 3)) & ((*(sptr) << 30) | (*(sptr + 1) >> 2)) & ((*(sptr) << 31) | (*(sptr + 1) >> 1)); } } } static void fdilate_3_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr); } } } static void ferode_3_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr); } } } static void fdilate_3_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_3_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_3_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_3_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_3_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_3_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_3_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_3_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_3_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_3_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_3_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_3_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_3_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_3_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_3_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_3_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_3_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_3_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_3_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_3_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_3_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_3_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_3_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_3_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_3_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)); } } } static void ferode_3_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)); } } } static void fdilate_3_76(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)); } } } static void ferode_3_76(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)); } } } static void fdilate_3_77(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)); } } } static void ferode_3_77(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)); } } } static void fdilate_3_78(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)); } } } static void ferode_3_78(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)); } } } static void fdilate_3_79(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)); } } } static void ferode_3_79(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)); } } } static void fdilate_3_80(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)); } } } static void ferode_3_80(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)); } } } static void fdilate_3_81(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)); } } } static void ferode_3_81(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)); } } } static void fdilate_3_82(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)); } } } static void ferode_3_82(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)); } } } static void fdilate_3_83(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)); } } } static void ferode_3_83(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)); } } } static void fdilate_3_84(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)); } } } static void ferode_3_84(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)); } } } static void fdilate_3_85(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)); } } } static void ferode_3_85(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)); } } } static void fdilate_3_86(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)); } } } static void ferode_3_86(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)); } } } static void fdilate_3_87(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)); } } } static void ferode_3_87(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)); } } } static void fdilate_3_88(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)); } } } static void ferode_3_88(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)); } } } static void fdilate_3_89(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)); } } } static void ferode_3_89(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)); } } } static void fdilate_3_90(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)); } } } static void ferode_3_90(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)); } } } static void fdilate_3_91(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)); } } } static void ferode_3_91(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)); } } } static void fdilate_3_92(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)); } } } static void ferode_3_92(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)); } } } static void fdilate_3_93(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)); } } } static void ferode_3_93(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)); } } } static void fdilate_3_94(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)); } } } static void ferode_3_94(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)); } } } static void fdilate_3_95(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)); } } } static void ferode_3_95(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)); } } } static void fdilate_3_96(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)); } } } static void ferode_3_96(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)); } } } static void fdilate_3_97(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)); } } } static void ferode_3_97(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)); } } } static void fdilate_3_98(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)); } } } static void ferode_3_98(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)); } } } static void fdilate_3_99(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)); } } } static void ferode_3_99(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)); } } } static void fdilate_3_100(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)); } } } static void ferode_3_100(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)); } } } static void fdilate_3_101(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)); } } } static void ferode_3_101(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)); } } } static void fdilate_3_102(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)); } } } static void ferode_3_102(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)); } } } static void fdilate_3_103(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)); } } } static void ferode_3_103(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)); } } } static void fdilate_3_104(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)); } } } static void ferode_3_104(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)); } } } static void fdilate_3_105(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)); } } } static void ferode_3_105(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)); } } } static void fdilate_3_106(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)); } } } static void ferode_3_106(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)); } } } static void fdilate_3_107(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)); } } } static void ferode_3_107(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)); } } } static void fdilate_3_108(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)); } } } static void ferode_3_108(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)); } } } static void fdilate_3_109(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)); } } } static void ferode_3_109(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)); } } } static void fdilate_3_110(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)); } } } static void ferode_3_110(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)); } } } static void fdilate_3_111(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)); } } } static void ferode_3_111(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)); } } } static void fdilate_3_112(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)); } } } static void ferode_3_112(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)); } } } static void fdilate_3_113(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)); } } } static void ferode_3_113(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)); } } } static void fdilate_3_114(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)); } } } static void ferode_3_114(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)); } } } static void fdilate_3_115(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)); } } } static void ferode_3_115(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)); } } } static void fdilate_3_116(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)); } } } static void ferode_3_116(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)); } } } static void fdilate_3_117(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)); } } } static void ferode_3_117(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)); } } } static void fdilate_3_118(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)); } } } static void ferode_3_118(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)); } } } static void fdilate_3_119(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)); } } } static void ferode_3_119(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)); } } } static void fdilate_3_120(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)); } } } static void ferode_3_120(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)); } } } static void fdilate_3_121(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)) | (*(sptr - wpls30)); } } } static void ferode_3_121(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)) & (*(sptr + wpls30)); } } } static void fdilate_3_122(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls31)) | (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)) | (*(sptr - wpls30)); } } } static void ferode_3_122(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls31)) & (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)) & (*(sptr + wpls30)); } } } static void fdilate_3_123(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls31)) | (*(sptr + wpls30)) | (*(sptr + wpls29)) | (*(sptr + wpls28)) | (*(sptr + wpls27)) | (*(sptr + wpls26)) | (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)) | (*(sptr - wpls26)) | (*(sptr - wpls27)) | (*(sptr - wpls28)) | (*(sptr - wpls29)) | (*(sptr - wpls30)) | (*(sptr - wpls31)); } } } static void ferode_3_123(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25, wpls26, wpls27, wpls28; l_int32 wpls29, wpls30, wpls31; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; wpls26 = 26 * wpls; wpls27 = 27 * wpls; wpls28 = 28 * wpls; wpls29 = 29 * wpls; wpls30 = 30 * wpls; wpls31 = 31 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls31)) & (*(sptr - wpls30)) & (*(sptr - wpls29)) & (*(sptr - wpls28)) & (*(sptr - wpls27)) & (*(sptr - wpls26)) & (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)) & (*(sptr + wpls26)) & (*(sptr + wpls27)) & (*(sptr + wpls28)) & (*(sptr + wpls29)) & (*(sptr + wpls30)) & (*(sptr + wpls31)); } } } leptonica-1.70/prog/displayboxa.c0000644000175000017500000000632712244775330015156 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * displayboxa.c * * displayboxa filein width fileout [fontdir] * * This reads a boxa from file and generates a composite view of the * boxes, one per "page", tiled in rows. * The pix that backs each box is chosen to be the minimum size that * supports every box in the boxa. Each pix (and the box it backs) * is scaled so that the pix width is @width in pixels. * If @fontdir is specified, the number of each box is written below it. * * The minimum allowed width of the backing pix is 30, and the default * width is 100. */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout, *fontdir; l_int32 w, h, width, sep; l_float32 scalefact; L_BMF *bmf; BOXA *boxa1, *boxa2; PIX *pixd; static char mainName[] = "displayboxa"; if (argc != 4 && argc != 5) { fprintf(stderr, "Syntax error in displayboxa:\n" " displayboxa filein width fileout [fontdir]\n"); return 1; } filein = argv[1]; fileout = argv[3]; fontdir = (argc == 4) ? NULL : argv[4]; width = atoi(argv[2]); if (width < 30) { L_ERROR("width too small; setting to 100\n", mainName); width = 100; } if ((boxa1 = boxaRead(filein)) == NULL) return ERROR_INT("boxa not made", mainName, 1); boxaGetExtent(boxa1, &w, &h, NULL); scalefact = (l_float32)width / (l_float32)w; boxa2 = boxaTransform(boxa1, 0, 0, scalefact, scalefact); sep = L_MIN(width / 5, 20); pixd = boxaDisplayTiled(boxa2, NULL, 1500, 2, 1.0, 0, sep, 2, fontdir); pixWrite(fileout, pixd, IFF_PNG); pixDisplay(pixd, 100, 100); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/pageseg2-mask.png0000444000175000017500000010763411112654453015623 0ustar dandan‰PNG  IHDRrGt pHYsÊ&ó? IDATxœìÝËr£ºö0pQ òæE¼Ãk¹kgºzaÞ ý"çÛ!•A†~ƒ6]xhR˜Tú´Ö’„ââKŸóoUu:±1ü,@è.Æ/<°¯Œ…ËŠ}5b(°Œõï«u|8¢OæÇ ïâX+ñ¯d¬R¯Å»ÆñøZ•®Ï…Ÿ<6„lcÆg5þ‰Oa_2ãŒï/½ÀKöeØ}ñiŸÄ°¥XåIzÑ@gHì?sWG ÿdÁi_IïÏ <0d.¼QOòŽVÇ'î!9ƒb LŒÁ¯  ¬Âwð>O—ŸåÿjÀXø<5üžþO €§†?ÀSÃà©áðÔðxjø<5üžþO €§†?ÀSÃà©áðÔðxjø<5üžþO €§†?ÀSÃàq!3:U\dø<5\<0ÿ<1ü7]¨. üžþO pýìÞóDüäÛœ1¿d,(h«$ ¾ªÏíàÿ%`s^4ïÐ×@¿pþÃC?00€ñ%Ã’U˜] 02ù%³‹‚© qj‹K²Ë^k`y™À&«xâè†>/åâ_åñÂçþKÍüš€g7^dÉçÆe ò,ZŠ:®=^úüyÇÓ§âO¿xvã•ø¹#tZÀˆçÑRþ"›‰œ"Cžßøe˜%õWc^Dk!àüAcQŠ¿ˆx‘àãû—“U­9óêø·扸&ãøG?•±_…OÙÕWk¯ÊTÄTŽwqåâì²8úQ$£Ûlö•À €w –A^y|,nX_ |¨X¥Qˆg¯þ.½’ÅásQ±ëèVóOõµ%«%°¤'‰2XGÁ'?R:ÀÌÂÜk€^Åâ`WÔÂ~WÇÿJàcøCfcÿ­à¼ŽVÿÆ>ÿÊ' C0\-ce:Ø ô$0ºbüsÏñ ðF×Ñ ‹Å³ùË€­›P `JC‘»¹`*“™Jf˜h ”¾X·€/&°« ‹¾Oñ¨ |’H xÔ‰RÉ [øuðµÀ3 ¹~°Àg1‹°ür`”qÈ¿p&²U›IûŒ¿—~ˆÜ×^F"¡ó £*€Ï˜p†EÌèWÉgú\9jŽ9jÆÄµF\<•}‘‹ýÒuS&a˜c™„P&ñJ(Ü}nMaë& x-En ªKuÌ…ÐŒAù=ùB …ýÈšªUxI3婵J÷bé²H?0þO ”!¼P Š¿‹Áä¿È?' ¨üZæÖ}sû?Àÿ3Àlà“Ÿ¼ÏFUÍÿ)Xåg‹ÁíîŸpŠ­¹Ñ†N±sjš?ÀÿCÀ”¶ò3ú¿˜yùÀΦÿ ÎÑws3MøJ`6x¦ðøyÀ‘„úf q‘À»KÞþ/Û ~ðˆ6ú`€ÿÔ³Dý20?0zJçQ¥ÈÛ–qX@Î6ƒŽGÃL¹ž‚DôóÛtÞs„àßëXn·ÉÎt]¡g :Ã5¿?á&ù8 jú¡^*Pd=.èÿþ~)…ÿýÀO,Õýæ< ʤ®®¢; L.øþZ0?g~‹\BhàûþB€%ƒeAÛ¯ò€œ_&°øV\k ÿ8øYw± 4Ð~V æn lû¸ W,Ä]ñ…˘Ïg—ÌDÖO¯fú.–õÎ\}ÏápQÉùü檾_ p™é‚ËrÇçõÕÆà2 ³* —¯L‚Ëê WE¸\àþÒÜÆ îÿû_›åî“ ªþ¿ø¼t Ì¯õ>üƒ§/þ&ù&ÑeuW˜à—Þ$ÿ5À‹M/¸Wì“ü£Ë&ÿÀ¡»øë€:/ø×¥ù…u*s™Àô¿x©ÉLòvéÀ¿ÿÿÇ¡^ê]Ì.^ú)Ž.=Ã%—lx‰Àìòñเ—™^>°åõ¿¬?Ød¨ª®éŸœ|—ñ…ßöü¡¶ÿ 9Vsj ~*Ðì›? ¸=#°ò‡ß‡SÜŒ™ƒ¯çš™©> þ〄zÛb›‚LÿÃøÀ¤ù“]7p~¦œá$f!üåÓ›MaÊLk„ð±@ w°”@lÐÀØF] l$L˳ËÐôÜÀºô˜ÑFLF¡xô³Ø „Ó ‡ú ˆi!ÎÕ!$иqN¾n`4˜I`-wÍdܰh›Ûh"°º¡ýõƒ^`(!`ã×%ŒŽ¡ÆÁ¬tp"PO äú˜[ÀÊ ,%Œö‡S×Åùù€‘‘Ýj€t¦Æ€ø~\XÀH†Á þT/­@:S,™Ìñ‰Ücx:pi¹˜Œ=Ø~ æj‡N`sò&œâÝ Í‚˜d` ¿^É=âì„ðZt<Ã!#ÚÝ“ ,`Ô›#•m İœð¬@4[´?0”@|^k"þ8 ~2¹á4 x?Q9/0Æ] —äqùnÔ¾[À¤85?X°Ð@ñf è[@v:ãàá$YÓqàu ˜H q¨€üé$`ü‘ÀÇ Ž½êIý> ×Êx&ðÊÊy“#˜›ÀZ~Ò.äkgJŸèêŒõ37ðF¾6?0^öËCðošh–D+“ü§îVȆð 9Ç£FN`|8°ê '°É–)à aðz¨0ejê8óXÇyßök m`Ö j{ýÀä( ¶‚O–žxM1Ü4{Ú ¼¿çc0—Ï­˜0¤i‡uýÈÇòPªŽþËe L`*‡‡Nl ŸË¬V YÀݥ⠂ûºXµ€ê“ PN:5ØüqPÍ»åâ6°¦2‹Õã“Uò^÷Ä`I*¬Œ<Œ d TÁÌ;@Jgš#e%ù@ „È–ƒÀìk€ñT``™š‡8x/ëù•Gm 1ËPe·:ÀãÒA>L@z)‚_›9³ˆ…hÈX@Ú˜ ÐÌ àã18 äGÙYï@s`¶”Y-'Ç•«§†õëª=v:PW_«_]@Ï <*ÃzH z*ú ôOR‰¿}“œhÝ$Õ!ÀÐ ŒÎ d- ž1ñö¬ŒZ@ªXüø„Úx’µ 죴ñ'#LòO†•ñ)y^§}LŒC|00©N#8»`®³0]`¬€ñ 0>7Ðo€¾*¸¨ð[ÀÜÈnÀØ8Ĺs3žªR@9K©ä}@ïS€eH!o¯†€Ñ}Yì<È>¨º£4@ØG%OaØO”ôíªÃ€{n†ƒ€Ì¨¤v“3OˆÁ> û2`` öɲÍN=‹í Ì^0& |pA/Öd n ]‰þÁÀB×ûj`¦€¼Œ¾(kXÓ^ ª£VÀNCÎIu3]`e=•›éêf&“œðÌ1X6@hhPùA L_àê¹ø™ÀBSªu/P7…1Yª›3+K},𾈡l€ªÐÄ@½8œg¯Îì‹Á)À¸Ìöâ…,¸>Ð3€ñ8°Ógá(`2Xå±åçZõ›9 p<3¬/ízô{ñÇ=ÈŒ=·€úæ ;ðþ [@io0ýÊŒZÀ_ ÛÀèc~AÀÄRŸP'0R@ÕVr Ð=‹«NF9N19,ºÀ¬ªE(Í[?XROj8)9~ 6{}œ¸vCè9Ô™uÕ©Bëé8 ®åw#XÙ@UÓÕ„ä=ÎÏäÁ0–@ÞË åø9€ö] ô€ø ¯´ºÊŸtÞ$ÜÊü ÔÜt€¡<"%ØÐŸ0L}ùÏžz&ÀRî¥2´r×- 5\ãì@<8û›S¯¢(6[[ƒ3ßK Ì0iéK¦äØVö\gôI#Çzp›=.žì±Ÿô#úÝãçêt°ÖÁޤܕÇCj%`ëÎû'6Ǫ?l­ùÇ•ç À±p°–KI\00¾l`¡®ëKê£ Œ°If. ˜œ|¹P`*“¼Üî6ÁÕ«¸×ö{GóÙ`r°T¥5²Z®õ±á…ÝRwì]|ó†À­£~fã“™ùD‹0nòæQ,¶P9A*»‡\>³v¾é8`L1¸ªr›ªÃÄs\ ˆŽ•h`ŽløË~ö},Г@Oí<¡˜ÔõF¡¦Lض۳O®pÛd·, 8V®b ÓYÔ5oÒ_¥Úè4 “À{G~ÐFºhN/„\u·¥c©‘»Ôí5 NfãQ`(¡q1’XK+z7?b°NÀÄÊC§3øß×õä± ,i«ì\À·‰@OU=‘§{qÉcE(oúôLÀ¿0+W™Ä TÝñõó`(Q©€éÇß$ðÑ {€êïP¶Ä†tŒò ÊèÞ71˜†Ó¡ÊýÝ|PžbþÄ—S€A ´É¹€æ5èK`ä=@ù¿J ? HµFHºg#@ø€p((Õð‘k LÒÓ0'ÓªˆG¹¶”5@L êÌÀ–€QEýÖós¯F¥æMlª ¬$P^‘.XåThj7Tm hô<êZ‘@8rO—€ õÈ#'ZPì0-z ˜6@Ö×E`zVàVo&"`°¶q¥€¼Ø®²¶€Ù pÍåÏw‘lÏL,`ÄUýG°rÙ0Dðö÷ ¿þžxŠ ¾< ˜ôó^ ¦1÷*ñd?GY?P¶ÎÆýÀ²ˆ»¤¯ö » ÀÊ,ÜÀTI[MûÓ€XùCÀ§ÚÀ€zLvSÀ·¨¿£1sÓ@ìA©äú`._®‡ jX€±nâÔÀ|X6À°H¹9AR-#£˜÷==­$—¢à4X4¹'ðƆM¢8™ ßÔR©–û{¬'æ˜0Q@ˆ‰3óƒX¾—µšq Ø<‹‡€;¨J pÕ¢>„àËÓ) 3€x”•…a°º®·Æ§¨+ì9¸9Õ0µ+Ñ50æ‰ÙÒ@}„¦ Œ{€ž ¤ÑömÜ+6^(PVNg¬[˯€ùP†_|j¹Ñº;˜ôeåQ‚•5Ú=À»`L›AÕ[VQâ{÷e9™Þ uó ת¨êÖÆÇ*:È |Šx}@YÓ 4CLJfàú( ßŒ0Å­ä™¶€F†u1ÈͼSâ@Yýôc̘N©&^Ýl÷Py> W@xÍ•R@h|(À-Fë(PÖ°&=@_”ºX ý׿C5› L¦Kf¬õ(i€Å[1¼ñe>+]Ma- nLTÀ¢(sZE¨îâ§ì ÈxJ‚_ÆãÓ€^/ðªäMDú6PÅà΀÷ ˜#p=ôM`<L™3O­u¬1î¦ÔW. 9ç(P5&Æ#À˜²Ë‘n`ÕÛÅs¶sºç”y®Z9$3cÀp(û×rù#Ò |Uýês ¨êâ›­OÕay5 K`d!.:@Y&Î:3UHàŽâºˆxó¢[ËÑÕ—¨üwk`*¥d °ÒgÚ Üâ³í—ømºO•86?ö6 èÛ@]³àÖôÁ¢È_sæ—Œ8׸¡u!Æw$úÍ·“€±† èµ€‰öTp:|U#°ñ€V,ÞH ,¿ßÿ+¶´×IÀXÝ¿c@ÞyÝZwÊ|†¨-þMœ@¨fsƒðÆFtQMR]›™V”›‘ÏõÁÀŒáòTÜc GÉ$ êM‡x/á•ÒS£ðb¤5uÔi(Sìh˜"01ß5€¯¯T}Öþ ÝÀlHí$ 0’@ìÂ'é-$ìÕÞpG@¨C‚"Ë•OâYUí$XÄke^Ìw$3*7S²v‘T¾&ó%Têü¡ÞªENÊÌ{€¹¬L ÜÁ­n)j’Ç“D©Ä—XÝÕñCÔ¥%m ¸ŸB5ˆêLÑ¡˜9bÐFD’¸£÷å!@Ý&h°•YP@&÷Ü Æ°±„Pòl"«ÞTA~¸æTÞûǃ¡ªŽ²|]&© X õ ÷5“CŠ&º†wmiEb·ü‹€˜%ÕE` î z%½VïeÜ ,À”1•_WÝRÐs{ MySk£Ëö¸W‘b̓;êœ]75;Ù>udù§ñn¾nË!`ÚÕa50YÝï:À‚5}ù·ƒÀŒÉµ\šžG‡ëy§O%zJÈïŸé…øèVÃ@Õw+@«ßŒWÊëÔ¬*ÞÚ£Šî8Åãï‰^ÑÀýƒ€ªCc¢²7ªÂŒœÀ¢j7ãáqŸVâÊ…ŒŒ,¢‡ŠTøYxÛÀÐn'! ?Ì+¨Hx+ìWpiˆ_–²ÄùKEùʬÀ¼é³¥Ë£vKÓPÇ ÌœãËö\ ÎU+Ise¬ˆ6“3ÊX²Ûê, K:»•šë²5õåoð¾÷ð°}çSª,Œi°ì‚ç†cÀ­BaÕj¦ßÒÛlÒAîÊJš@U4;Q)/°fV‡Ÿ²ù\Sb­»Và•áˆÁ^`!Fµ>)fMÀöµžÑ³Æñ4xŠP&L5åsðÿ!PŧL»@ÌÆ—êÅ‹Q·¸‡F RsN»¥Ib Þ«˜Í}(ªÔd3›ìœ1ØÔ-™SÕå8¤˜€)F^Ÿ=‰iäòûkò÷:ØÒŽ2UîU•¨-`Ît]œ1€‰ù²OˆG<ˆ%99ý¥3¡²æþ å|M=@Òðn@¬ b}c¸†Ä"9]ÌLÕI'¹Ò‹2Ä×ÿãðñJß!Gón¾e'9Y§ìƒ_ħm"7f@«¹#Ð÷@ËS€\^þeAûŠñ½nç2 TII7¼ßðTà1A«~ \<ððniï?HÏ‘Ú1È€s ¹Y¿"F¢ñmº¶À+î¼Y*ú”á»òqÆúsH§‚0‹>1é1VF®m ÙöÔVìs€ô,Æ#ån`­jZ} È>x/þí»MUpl<èÊÏBØ?n ®`ˆ‹Ï&|)œ7É%1…îþÇÌ͆œ¿‹1,t 1˜}cð]ñ¦á.1„©Ù^ü)7I]·â¨ …È:À:ⲑ>›¥CñÎz›'÷[ضžáöðCVz×î‹Ë–ãÀE¬³´Tll€T¨À,2•ƒ4LkÆ17ECÃ4J¡£Ê5^.)Ô|Ì([í—P1s#þµf2SŒ›ªœÀiª>:­º8ÒÊaP8Ày”ù~¿àµø×ŽI£ÿ Lz5vŠ›—J'™@¨Þæª!H™›Á”²Á“€¹¶ºQ› 9€ÆKpîúÐ ½ÀlX#pv g´’v{39 +¯YéOò`r:0sëc€éAÀn5°ôŒú›´ 2ƒAz-®:/‡*qGDÔÒÝg&îàʼn@Ï,³6ð:È|Î"÷¯$PVZ×\ŒPžºçƒ‰† àì``vzÝO¦Ó€Þd`pçæm`åˆÁÜç)ýŒ€Œ„¦¦þd¦4× ßÎ,0œ T!9Øl±ãë[ù»ê®¨=¥ (žÅpc@£ÿßL.•.C Vì³F«º+ʰr™êš]÷Mr$PWóoÙ¸YÚ@)6³üi…@hßÂQˆ“EÌ Ê7‡f¤Í““€­tðL@l–SM÷.໼kZÀŒQ a?±îM"7Ó¸M©þðMàÖ†£@ãY<šÎ Òð£u(C<¤È Œmà@2£"íJý5dä{*!<+Ðþ{hf›é M—W TQèŠGÈnA2ÓÍ5 kpàQ·MõWÈ0—ŸPù­Q`hƒ´4Ê$Z@9Üûƒ4å‚ L_Ñ’n`èú(a© MmšP–ê, ‡L‚<ý ×è67åt¿ TEw B÷ï€>³hÍ=þ]¦HyâÇV·býJî‚}b"‘½KËiÀæ¢^òf¾6yÖ!$]àG…60¨›gk†#]¾¸7€ò"£ØÆkÛ@lpÏ/XK ah´”G@=‹€õ׉¾äúV‹ôI¿ø—>›á.×ÅÛ6;žÅZO’¿ô-b› é!Rb#WxqÀŒ5ã?ÜÀyó ú"à?F—FðºÉk|ó YLu½Ž Ud_LŒq.gUÓ§ ,>Xw¼,{OßßEYÙ+ÄW¸?xxŒ>¬9@C\ƒÃ@‘n€ÙYQn`­ú­´~1H `˜{ŠÚ¸©å¯=k4 Ùk=ݪæXþd oÍöÉ y5¢JäÖØt.û`nSNO(^Ò u|z BV<5€5k_ûA3›õ>?øþÖ…ßø.€õÑéà@uÿîL8ÓÖª­°ô³¨”…Ì*rcQäïòÿ:)qÄã+eoJ¨²Mu}ß ¯ñÍ_×qFyãÂîíaj¬éZlÄ ÌQQ_$H+Þ'¼x1úƒ«”ÔIE@hî|Ê\À;>ä<ÐÀÜnж=Íð ܽO–;Ρ֮ֆð–bøÝLÙÏÝÀöDþ/“òo¿5@˜£X_%j’$ÖX†bã u§|u¯àCÜRŸÄtÈBXö÷Â3 ”cœ@Æ®<pÕªë_Là‹9¦Iŵ{ÁÄšºO{¼¦JŽ9µtCwí]–¤˜¼Î¡-¼­U4DÅ»Qͺðä2Oq6 ¬ßÕň»¾è›3B&xŸ‡Ž~+Ï+`¬dÅšBèC§Ê]pwu•²rÌdt4ñk tkå›ï¼ÔÀÊ $L­ˆÓZkXŽÿªÿRÀX$p•X‡¼Z@Ý ÄßÜÁޝX$½ÀY 87€úI’u`qdoX_7À%oF€W,¼|˜9h- ·SýéE2Á¢>`d«À,˜† ëªZè²ãkB°Síw?Ä}Ò‰ ¢Aî ”˜À?4@Æœ@‘"Ð3Y]ŒÕõzKýÉ{€wÜF]`ÞtBo€â#TwµÇ `Ê‚Ǻ=v/¿l ø!€ñOô ˆe†)áû>`ÿ]¢…’£_ëg®Îªf4¦tðQ&1É80TKpÉK¢ƒE‰#ÈÖ<»^܈‹êè>æñ ’Òù7ÌÅ<‹_E*ï=c$ò|!²I¡òÒHiˆ'R 3"7À¿9x⃭ =º¡ ´ü`ÅÄɱzsK`e´ì~9Ð ¬«°i8Õ!ÒSËu€ÔOæ@ úô°nWòK`©W21ƒji€Æ¯ÜÙ­¡°mýïvzéí{~Ñ2ctt|8° u£à ŽÒ’̨˜¨­³ž 빀Ч!`áÖa§X§ÃP¥æUrGÿáPãâÚÒ”Ó¥ú»j:¦jà#¼ì+`¹¯iÂ+аˆž„E´¾g}@x»€oý@ ( @‰½ðß–¯X9€0ÇÈZËé/Cèñ¯¤ȧù8Ðè_îÞÝ0ä+j‘iàâB€cºé PÜm q[Þªú@àëËË»–¿}I†¸ÄÉ ²^Pâ±J"‘Ýò»@<óæ¢T`ñOW+šiýg,nÍÓPËà‰ÒÁ¢pn­'ñ°œ@ºD¼<„Ç|ÍpD{èÃw™(©Îà4l¡^U×CùºÝ ã2Ì0òm&«úM BSð:¬LO2³}-`ÞÍÍdrCQ´dÌ©¯ å„([¾Tã8vT@Zz(¤!‚™÷ Õ) £‹×ëÐJ­oF€Þ¶›”Ñ·snR¸p÷KcL¯®l ô_g¡UtÝúS€ÐºOÀ…÷ xýw#YÅM‚À‚:‘¦ HT=À%Ís|ÝŠÀ ÉÌ@åáÖ „Nʉ†“€óI@ŽéÆ}eÀ€"[$öp0>÷5Þ%ÿðQàè¾I˜3xÛf&0›âîl ô¬›Äœ”),Ô@ÖXMÈ aî¦8¡Ð¦r>/ã”Æk ì€×p§xϹ ̽;+HÚ$qŽ g¡ B,«dD2CÏu^ÄͲT•}1Eºéï ùšOóaBýêòÞË(ï†T`d IDAThœö—ÑE¢/W7Pv‰É"½áoÞ Fv+­wì…504@è®ZãXyÌÛ¬ ä ¼‡ß¹l¬ò³“é@ { 4n^(÷W›ã5à.`Ó€¡VfkÚõý24%šÜÔÄu³C×°Ù,ÿý° CS[Ý6½² ÜlqõëÏrf•ç- :òv»Mºw±FÍþŒŽ÷h}!à²4†1ÿº¤‹¨l>Õr xÕƒœìè£é@Ú¨hé6™ Û@«ØïŠAÊ»ç pß¾¶€Ïðêº ÄßßÜ@53 lnài@6 |o7‡k5íK˜¬îmà_æv“€›1à”ЗNà®ȯ¯—- 9‡A÷IÂdµ¸øÐ¢Ljš¥Hj¨‚Â*ÒÇGqSܳ8 ±ËšPo`#±…ÈÝÈ U/¯±Ú*)ÄÆ —5qâòmçÖfB“º“2<W“ÈÈn)þW…¾¬Ã›Š¯Ô爹“ã…Ìa”f¡É ˆŸÕm±¹Í:ïaKÈ2ÕK<È(ÝòÕ<8s¡®Ed¿8Ö¦@FF«VŽºŒUû¬FÖF@?CàbFÀY,¨æ“†\¯ 0{k¿YÀ¦êu‹‘.w:;èmùæçF,Ìúv  È²4Œü¬hÜ4¢khNï7ŒØ1ØŸí  'OuÕý·Cx¥°Ù¢üi¥&Q@ʆCÛã·žk†-GØÔ0@¦B«Ÿ}(‚æ3芮îó²–- ußà†2wW¤O&Ž›D]† SÛŒ±›à@ ö©‚Îüê‘ ÕUx'“™‚ÉB“ܶ-Ù¦P8§Ð‘ÌØ@±O‘²«ÌÚÃeºÀBÔ+4Xhé ÷¾E ÿÈK¬<’oáºÚa¡¬Á H[/9´œ½ÀÜB#Õ°8`"s¼£Ü¸;Î'TÚ/w€x+W"."¨ÿm1î—gîˆã]uf†ÁòÁÍ>xßvmXÙWz ¸‡A‡z _m€MxNàú °;µB¨ôñÓ· 0|³ë\[Ó€QçdðGÓ)4fÛEའl²[Ÿ„ùA[@OwùöæúbÞê[øÚÔíGj+è!7ØŒ¿¹çIµ¿}) Y›ÎfóÕª7~XÀ&ã½T[A÷)õu¶Jc\—AM…÷ß4° àz0˜”[o€tc\G4Òþ…gßðRôì‰Õ,àr˜b •{óXà°>è¿óóæC¨æO&ŸÆ€ ý~÷Âwûܯǀ¢H”áêȩɆ†¬§ì`ÁR4°C°IB=9UÅ+5ò‘µÌØ5vD ³Š<…WÂûR$‘oÀïR_¿îvüqU.b9†oßéük]„‰ƒ ·ƒ”ßÓÏé·&õ÷¨]”A ôóhcÙœ…k2a~ɹÌâ\ÛCÁú&q¦ê㸽^8j†cb¥¸Èä…˜2½ìPyPSÖÔ“D¸ù&csÌhЪ½b®ó8 ¨?®€Th ”§Ü­jê?( Êf°*˜&°Û;¡ý8¦P9kH ËÉšÂ`ä² ˜‚€é00ëÝ)!ÿ>0< èêÞÑlG® ¹všRo°`9Œ€q/°ýN8ï©ÙSÞ$¾¦X°²dÆM"ŒÆÀˆ»ÜëFÇÓ^7Àfªuƒ‹‚F¤/bƒo°f6Pö]ÏÀnåöàî` ]Ì¡€·`ÔP@!5¶:aï7ÿE䀿áëœ8AÁ*1Q¢8‡sþÊ„:sÏ’1 n“ØoËFVö¹Ä¥xZ9ü:€ÎÛ8w|f²É[oLôuŸ#x8¶,]'ÿ`ð‘À¨ T+µ°ÝO­Ä©"`·ÔäÝ]ß]r¶2ÉÓAe’‹æN ëi¬žÅk ¨þê³)%½ÚK¤=—öŸ™èJgƀƎ±%¦©ÊømŸÛÀUó!ÞngêìçS€ûæˆÍB+¯n .M¬’†©›@Õ»nŸë6.\¯ŸÔI5[m´èNeœÙ¶ÊØmàæ`æÊwÝ7q?°ýº¤–âˆåuÄËè.ƒž¸<”¯Fá&1ÐÏÇÝ›À2Œx§LáF­:0ìKMßÞ€+̰8b?#üÕSw£%±³lRP?[Ÿº¿òþtÚ‘ÎÔ8[ïßív’ÈüU†ýk0Ö ¡ ç÷‚úv¢€ q ^G÷? „abع§Ù øc>ì¤3åp0Ð2y5³7v †±CÿD|Ý~_X¯ñÙÀl:0Ç¥=Žç¶Ó™š^÷FøŸÕóÈ=œÈi?0nA['õ~›ú}ý@«Jàƒýét·O·\!<™¤^¥Y¸ØÈ¶bΣgظ2›{ Âd£ptÏ%õÑ!`·ì‚S—O)ÕÉvÌ=ëÃprŒ%Ð<‰ Õ ˜ c2 Ñk™/qDÃ\GH•6{zÕ….0Fn`MŠì« ø°Æ…S€ž¬Hù(`øšûY¬C>¨öá™ ´N H ; È ~Òµžuñøªue¶ª>ÐÀ+9ˆ€+ Ì™f¡ó&i‡žt­R‰^køÅ‡iÈõ¤¶Öø²"–ž Íd&NYXˆ¤ ú8YÓ°%½^ Ÿ…p²®aðê Q SÆï¯8Õz‰— ˜îê¨á˜ž.Ðÿ11Áí6)g1Lï9ø(¶ÆS€ò…kÞ2eŒ¿±3æRŸvâþ~4@ãÕ!`·Òäxàðäê°¿ýíÁÀnµ“ÜÄ t F…ì¹ÕÄu«@ß>ô—Ôšda*0ª¬•9×ü0pR˜ºñ0qmù©Àlp¯·T]ó'qZ“¸ÀÆœÖ)Ç ÿ-UƒbS–CòæúÌñ As†¥ÃÀ¸Ù+¤ª»I0`cDL³w¿Ú¨¸„ß_5°h€´º-XF²1îaî²€Õt`ÙÆ“€(9ÜK Ç³½ÈÉíó6»5Ã>Èû%y¬ÖöÉ`Í«=ü-CòqÀ:®¾MúòJÈX¶íÌðK•ôÕDÖÕ,p¹ñDx^$%)¢¾[0`/ Dq*È ²:öcù¥”㓉À5 íôøW Ë㨘ÂvTÞ Ò5åÐî•Q©Q“ú#BL¯Î8œÔ¹…”51X³XEaåbnÝÛhàœ}k¯¨) '΢Iü$ Z°€Ô“Õm lUÂ(¯ì›2.à¤%£ÀÐ^p8;(B²S[yjí¿rðuyÖ §*<\sÁT——6p8·ÅpV³¸%`3@'i¡sÙ 06€‹ä@Î;1¨C7_ÈEbnÙq@v0Ðï_:7‰Š+f ›$. ¼NdÃÆpl1 – ȘU¦ëwçý{É®qœ¥ªv‘,†Ô€¸gz¾¹¥Hÿ:˜›À¨îÚÀ‡·’Ý$üÿU"Žp•8†-å)LÜ÷ÌóyR"0‘ÀšwYr˜WZ„ÜLx—Î!7:ºœRhÄàºÝñè¹ l.ÌÁ…ø(¬šWzzåC8Þs¾ÀÿH ¾á¶{¿õ&’S€¼Y“b°É „aÙ6°5?ñ]²I§¸¹ÝpsHno1kˆÙ{ÏmàИpl(lÚíâG£pß Ýº õŠ1¶ìÿu€¥B~b)þÆì¤ÜÏ9‹rh{¥(a!ÕJ=Ðë㮌ø’²; TIެ8ÇYc!ðñÿ¡À4¨åñ!í œÊ|˜` ‰† Í|X È àBG u n50>èià˜[mÅóíê0`ÀJ÷ÃÀk Ö½ d>ˆXß0àlA³*Nfü¥o`¢€iȨ*Äç^Á ”I6‚€½ù¨³ÛÃuˆ¢¼JU7€¾†¿Ôütí3liàcðÆ&©6®‡ù8H.Õîý†Ìœ.Ñ+zž½´R‹Q‡ý_åàóÿUùO·Ïµ÷ÂÆ%,¸.Ž‹§Åß²6¼ŒJ³Ãß’«Dd_ m² w欫E²®ùz{ÍTãÅbê…ÿÿbu/P_ƒ®P´o{ªJÝ87¶6ZdìBžz¹š¹,:hu‚ @\â8`g_cí$î—G€êËLR‘<=Å=Ç<8¾N³§ju àÚÞÉ—i!êt<{N1Ô¶pù±Ú‡ t‹Êéã—¼=e•Y°žÌ%ð'¾Ð#Ѷjgpv²Tþñ€© l 4Ë­–ân€ù9€L€FÒ4`†@Òt— éßføüüÎ`*ΣhÿoøTðWÐxÉZ’&ɆµQ¢¯ïªèv›‰‡w0ƒVÝ=}å)*0•¿H`;·Õi'Á×Yá€ÃC¡‚ÕÊÿ“ÞÜ4@Þ„u†n%0·€‘ ªçöÀXdL`‰ÀìÕn!04€ÞÀ¤ëîŒ2éñkØFsu%%¤W¼ãé·½œ³o¹zXO¶·¦x¿š'%–1ÊWF|†2IŒwqw‚Ÿ_i`y pz Êw,©tpv“äXÓòíÚg,à•LsX6iÎ(„²ˆl4JŽúé2[º[ýF©Q^uÇ…%‡öiÙ­c€í u§¬‡WãU(0kïd¨þxܯ^Pr×W†¬Fÿ:àÄ0 ˜M¶ V~Ý÷§ó£ƒð¡^£õµæµÖ®ºƒ"¹pê:98”Pç“€«^`©€jàÐ`;¡nW˜@ìäßþê˜ÀP¶ŒŒÞÁÞ Íû';1hÌ.×NàÏ 5ÿÂQÀvEû0ãX”yàÊ…9—b\úf7‚å†B8äu5±þ[!‡áúèÿ'0Áôw˜”!ø(à/ØBäï)¯Î±C~Ä™šª6À"˜âÁEA–_0³#Ç=lo4„m¡²YNºQÑÌÊKu¥(`†{fü¶m€°>R 5ï'·n ÖŽH ”“&7˜ð'4ïm¦ã°ýD³W4aHAÀ(…øz°ƒáêx Ìq)½315vSÎ%ð6%Uœ÷oÓã­Fe˜Éå÷°œh`†@QÄëÃÚCàSŠ7 Τ%È„v™ìëG-žÅ3˜™@‘‚ 0ÅÙe|•Ì”ÌD«Œ’jЩTZq P×~ì»ÀB”$!A†¡Kþ6§ú÷a-Y‹$Z¡)L¤Ó°Ü–æÃÕo,SaB §á @=¦Ò™Ì;ìV? o5 øÞÎpØNŽB!<0·l€<]O®7:h`X70ž Ó€â"·€á½f˜pGv ³ßëÁÏz&0V£Ï*zxÙ@¸øj»®½Õçq³¹Ò >¬<}5ठ·Æv/+Ñéc,)²ØÓɶºŠçn€ð ÑëcÏ=ë:ž Üæ=Àßv—K7›P»ñ ,Uú.3ÿ&0›ƒ¹ý’ O–Lû€Ûêº@5Â,?XðÚâ³ýÕ Ì]¦ @™Ù`m`êUŠér)ò ÝnEVªŠDÇÀ¤ØìÚ“@¨šÛ°k—"›±€:Í\”šbê»25[ϺHKºìü ôÌŠEv^/zˆíF¥\«šPÄV7 ¸=šôVà*ŸËáEr-¥i-î¼]h€Þ» ”Ð7ã€yXI`¡Ì.Ž‚®êœÞµ0`@\ˆ)p†@Þ¾äô!½õ%°˜-ÔÄ]G3juÂ|nÃÀ•·k€›ý> yP'3+{€GG¸k`·›!‹Y2Ì\@fkIà“œÖwK77›#°v!Ä]`sÏàù G]½€BÈN-8I €´ZïaÀ²‰I¸4=Ùôïb7É(’’®}ˆÄ˜Š%ü§Ä¸¡«\H`8 HýÜ ÚƒO70l JÅ1‡ö$‘¢xÏ…ˆÍ» ÚEîd[Çó¹ØVTÅGÆ?¸°ÚµW^_‰¤Ù+3|(J\.éöÇÁ@s)^F¼ƒö¤Î}aC?î]ï©™„är%S´Ý›ÔcTŽ:C 8­›2—ÏDßx4-3¥ÑÿåÀ’€û´.]@3C|0>H½0|MÜt¿1ÓÛrú€‰ýçT —ã uÊ4y<Ý©âüÀdÚh 0ÌaÙ @ šq\F Fy«•BÏ‘¡™A{c.âºÄm±[>éR„q¬ç¸ip2ë¨sUZ‚š¥wcp‰HݹÞ5¿ÇHíMe4mÀ‹.Õ~š˜:ø¦h©47›Kàò8 ßËÕÕ­Ò{ðÕ Ü´–ÆžŒùí6i¿Ñ.åï8éjSP¯â½¸Àîù2ûöÂwÏ|óZ!&ö©Kâd¬ç ÖÑ/—0=ÃA@¸¾_%éßS½Þ);½Ðc\ª0Å!0c^Ì7z>¾‰UЩ'ø…±ôNê³S)`ÑzÃÌp =‘¹ƒ¿ýZ MË®b0ŽÅÞa롆øŠFªcg4˜³#› ÄEøþ.Q“R»€PNóœ7@Õ•0BöhîËÁ˜ïø` /T³DÔœó'q„'ȧ•Œ9‘%µ€ž¾æxãÆÓ€‰ôà’‘×Í p%ް:¸“Àì`HÏÇIÀ‡ÙÕ bœ“¼˜¹tŠó1 á€&‚|*…øÝ@}#° Bˆ‡Ìæ5«)u#e8µÌÒ¸)|dŽ#•Ü@ÆÌd†€ ;Ÿ0' 6C^E¹.Éôÿ!Nœ¬*¢Ê"¨¡•íÖl‘dÅ"Qé`©žLvÀÄ ‰ç×,ðßdàóÖ&. #Èñ.Ða¥6¾Ukcë-3Œ•Ü àÛ–—­ZöÅ`?0û  Ñ‹çm»Eàû§ÇŠu&û`‰³ÄQ; ,#rÂß{¼Û=û``™¼—0¹bÉö…‰eî2mïURFzJ{Cþ¡À±R“¾0“Àæ.0²¨_šÆœç’cGo=\lpú’ YÊ0`]ôåfx{ Y^z…š~UÀ[¿Õ¦íåÏŽ†©g4 T/™@ÕËö­„ÈÛðÍüŒؼ24Ð÷o‡ gÓvÒqza1qùlvàݹ)7ðŸ›ÀDŸ³*,Ëà6…®!¸"‹±=¦ 3^F!îï Zˆ¯`0/Ì‘ÈçFOYð"2 âÀ·)TÐdÃ@å€RdIÀàé>g³ÄêLÙBcjíÃ=ýƒú}Њâ{?"7X°0ÇrößcŒRŠàê[D£B3òpƒÅ­ 8ÚœùÙ ”Sà vL¡z`®8o÷` ©jVemf ²C‚3ëN Ô1g„²/øŽÀyœK âx£1 Bl-`o b+„®~a£9Ì‹ ÀìJsK¦,üÀÄÎ- ‹¦LËe}ʇ¹0Éo5Y¸KRzmø”µ©˜A:(€0³#ƒ^ dm`0i²âöEíÅk` <Ç ¶¿0ÄΖ,"œO)Þ¸¤i5Æ­Ï`÷:/a>‘0¸]MÉÔƒ©Ì½ôB„¨€ g{ÀQaá÷\yÇ1&ƒ0#`a%àF Š÷ƒbŽAsySåGsyÑ-(BœgAœ`Æ”bˆë àT€2Ï4œßj‰/Ÿ !´:î—=yå‘ü`óøÚy§»§o |º¬™¿þí +Vöu<¨K‡€‘ù™,~ãoëuº+¬X1›!xÓV$CÝÓø4¹|0Œ- H¯ßÖëuö2l…V„̦±æX[éãp¡éd`>LLà=kÙið õ\¯’è‰cŸU8éÏvC†çæPppW5l>->ëu¾Ð̯6ë›@ÌG|RÀG–=À<¢L÷È–ßQ%K9y š­x/°p]1À:¯d p'΀Â|3«VÖ<¢9ؘ_û|UÌ$pèal\j¸ðºØaIÀèC• zÖÙIX…niý¾©1øÚîlàÒÒ$qlg‡žu­¼ùrùq>g°ì}’zŒ!f49Ó"*n¢œ]Ç9óïèÁM¥˜ •….§!ôÞ®†¬7ü(1•÷¬¸è‚]—šbü&Oà½Þ·€ÌknÕ€ÜWX—l°E6„Z=ñƒâô‡ß+ÜÕUm >w¥_à.‡õQ4pÈ‘MòV-l“j¸5 ňÙTQèö*Õbز`ÐbÜñ]¦€Ñ!À¨ ,xùÏ(paçjØW¸RÀ€Ø‹ l:0^#PS Ÿ²2vÏ#0èú`Lw±H©“'‘R¥ô¬Úߧྴ€"ûh¡âNq°}@†ý¾ZÀ”:$ € Bà”<ü{ÏMbáx¬©6ÃB÷¼Õ],`B Ì'=žE[Q¢ 0~€¾«½@\¿ùºÆSÀßcá¸s²r IDAT‹Þ0Ò@º¬°¢B2Óÿ(ñ%ðŽ×â s|Àá÷ L˜”4®i+`Xû0cKP\E¥tCíÖíR”IE.óð*¤ÞîõÞ#`\Š¿ûSj dÿðúEÜ(,Z¯k6Ä0m2àõ Ó5ØyØ*ß ßÓÀöoÜÔ|ù×ò,@ÙÁm˜öÃø¾ƒ¼Âµ1½×vÁ½œ0!õaÀ¬(.^'ÃE¹^cÀ Sz0iþÒŸ)âÀ€0V#nTÏ\[Cª>´!Ñý@X£“!ð½÷ÚjM½¸µÈˇ{BH’B ð ÀH|î8ï9T)qï½(`í«­ t[ùÏ]ûª?!„ÞÆˆ1¸|# õ,1»FI`Ь½ –PQa~®;SSúo­~<ÈÊ…§þ„©Šd:)w Ëì­~k±_m… c³o (’m ìMõ´;_´Ï¼ƒ^Ñâ8 hOû€êäÏ塘âù V-ì®`…r¼=‚þt&ÒW§lšJ}ZHÅé¿¿ýÎi• MH";:‡:]O΋+!~ƒ9Kn¹ê"pÌç  Øål!ÊZ0<€°`" AÏ{€Í<$”¦)ö úé[¬ d ÙŸÿ Ö}ñ6a é‚-ž"O]ˉʠ!ËcFh W…½ a¤9¨Ÿh·°©úH±g/oò·ñ‹ŽW9¸‹sO–êJ3E-fâ¤w€} aL,ཛྷV¬ ü¹' OÐsÈÀ^ÅŒ˜@?SÀ(ýÀ¾tÆFPM­°ávÈ`@Ëj³‚¸ÜMŠâ,45rX&ÕìIgŒnÝ z Ha¸²™„®IýÀ,ný~`LÀÞÛØÂ";ü­ …H}þ0¼–À›v0¢j˜ ˜Oæc@ˆDèK·‡ÏôÅM‚+(X@Ö–L Ö²Xøè¾m`øŽ@\Îì¶L4P¤Hœ± §cÁü–Øü%WZÍh¦iœg“GŸ—²Í0P=3ìšãøë²Øxžâ•4{57É÷ß¿ë=t‡HÿP<+Ò(…9npâ ¾½Rô„@Xƒ'ñŒx‰,>b²à±Àñ+Ü$=À¤¤„ß•=ÀáP›Í+›ö }->ÜÀ€»¿ë‹Áʺ¥aà~_Az5¡ \Orã·Zxúš¤èŒÂÀ¼»=‘³USzWÑ‘@3l:Ë¦ŽØ9v‰ü>£n#œÜÁ±x@Ø9v~ ˆÓß#0þt 3ÏYO˜xkóN¶¿¡9ñ鎞ÛGrU¿8è+¥Šó˜Ã‹50†÷[Lbàõ”º9÷_¡Òåéf¢'U¯.Š 8V˜b >†Š¿-óIÀ ûx WÀ~‡¬üª˜[ÀªP< xûÑ@ê6m`QÐ+û’LnŸ¡ÿg³åDàF㸺†žb_¿Û)¡WÛ@®XõYyy¹Øw ©<ôà(ÛÀ}‡”$ êPäq l[F4ÿIÄEr"€í”Ðã­ŽôaÆö÷Éc@ˆC'0…>)LŸ–òÃ…œ5ª?x´¥‡Ùæ¦ópZãH6 ÁLØN }¸~Ü@Ö$I°ä›%>?iJÿá‰` ^¤ôp&¥2væ'ƒs`¡¯Î=¬>øSÅ!€ÖE¥!]màÎl.«_çm YÇ,Ó¨ „—ïåüêš#Œƒƒ€Lsjá[„ hÞ²±Vr*7¯÷"‰j·Ë! › \@œéOYlîc¨àP@ãæ c>ü)¿ uô´ØQ_ø†Q5@FÀH‚ä]ÌÂg 5xÈ<2‰®SúCç—vÿÁ9L‰Ž“\Êžxx ¦ƒ@¬!ú.“ñ£€vË"–«A]õ8Ëæº²øRxkõݪŃàMNº–@­` mõ#À:©}Q'nyÇ×|'=©xß‹/ø~+z…XFFâC«ËVç2GÊ`>q ˜C BøSéà‰¬zOA qrv >m 5@`j+¿Öé LxØÞçîyÇë6wÞ, . ÖP( ,’¥ÐL«&ú;c ¾Ø;èÕÜi^ ø®’ÚN¡ö%@Š 7ÎØð^Æ ê-éî¹IÆ€²Ûd!RL7ð/¹!›Ú­&Dú·§qà_9tÄÁ¨, e­£"€ÆÊïß@ú6E$ Èó™Zj`Ô\Ä]SϲFßUQp&&ÛëS ÄV}È™ ˜œÄõÊ ÌsVÀ§ç.p·ª]ÀHcÚ+…Gbðqô&!`åÖ½@g 6p«ûÚÀ;~·y‡rSÉß^Ÿ vû£À 嫸VЉB¡žÖ)¡ÏRÄow1óxk ƒ5—«wFò ‡6Þ‚¢R,J' ~tÎ&iÚ«CÅéV(Å¥vÂA`°µÊ*/0!`$rfµÜ0ÆüeXÇ%ºªR#¥©+áÓq½xðÃ\¯ ¸² SI™ü¿&Î'´¿Oc;3Ùéè0`¡€N¸¬ÐÞúmãÞ˼³³ý‰œ8Æû¡œ±.0"àO”d§kæ;ÒAYºg­f¨Ùú„À{„3mT[@±ån“Næ"2dޤÎ+ønÕÌÝÈΊ¾Äæ3¤çVn wÅ Cà_¸_pow²1 èOŠ[5ÃöÎ0‚© HC°HZ;Ç»$¸1<ÖMàaF—¸" H’&Uó>#ˆ>:÷è¬|ýK–Rm÷÷”B=F"€Ø#pP<ó¡ôßÙÇtÑ,50¶XÄ èn«•5_a ˆaÏëÔ­zaåëä§(ÓÆ|¹Ê",EÀno<9»@š8¬`þ^ck¯ºœw¼³†ß” +Öé†>`)€æ :T—\Û@}ÌpxDÎT í#Ÿ ô è¹jÀÕù€ƒÁ‘® ؃ä_LÜ@u§$ØLž²«°hôS,R1DU‡©â˜£T§€ÏÈ àßPÕ$€ñ €f–?£’¿š›cÝÅf#Üš ª.@uÒ슌D¾0wfkô8Íöb ÄUq’‰À7ˆß¬^pªó˜´v¦€¸.4, c„­dF£“€U5äN “ÏbŸ¿ ÍQ惨þHàÆœcí¹L°wŒºÀ_,|Îð_è‚Ýù<Ì&d·D)½š‰4Ÿ‡it·çe]Âøl˜¬ f`Hz•5&Y)‹íÕ^Í¢}X߈ÌBRÇT2›ÁòQ ,žÉä¨lèRt@¨PƒQ"ý1Ø dõ_8€ FWÇ’äaÓ÷z á¼·¼ V) —c×ó£"n€M`Ükè¾9|ͱcèóÚüîÖ¹¼WÀ™ (¶Šë¹¼›D.oî7© §»€>‘¸àèÈ–a/PÄÏ=öXúKžk 4°Êå*4úî-èŒPG£1`r0°²‘¾8ØÛ·³Gúõ0)`…³Ì Ë@+¼ˆˆ³8f ê ´bP†úOX‰›$ôÔýŒ–% °^œ Lú€%3›c›N±0‘÷ê:4g´êq(^_0ëôšòxÒ½¢ÄðÒÊóg·Dþ­†~x> hàüöÝú¼ÈU f­Ý™ÏEZ= lI&æqITwèÜÅ*•:| Ø^¨üü@ù¡ýçãÉÀZ¨Èûn’€᠜׻zŽrñ'U¥…˜õåº[(û¼4³{\ªq;jî|r+Oͼèw˜M•)Vе< P¢9˜ª®¢»²8:w©Úúqðº $Ó,(úzp©†Ä½+àÆ¸÷­¿œ%Âϯ°–78;0r[ uÀ³Ð_o‡&aðsñ*¡Û|=ã/¯#@‘}|âµÙ’Ȭ2Û—q«J†­®Q›_‹£’-‚’0+“@ž³ºÂ)m˜‡‘Jf>,%pæý¦à,ìÃ^`åŸ „wˆ…ÊðçHƒß²¹c0²¹<ì&Á2c’Ãô.2}# ç¨Y˜,[@Z— ;Ùl5¨ç„Ã?À·-·&0.±’UNÆÊaÑ Žd6…yâ•ë+Qæ ኈJÈ4 „\ÇœæY>* 4|ê‰Ah³h€0$<ùÂ`Ù±êÉÑNBA<ö#üåÐü`§6ÞÑw‹Íƒ_‰5²—€â΀>Žÿpêy£ÞZþ£Á80sKŠ©¸fÞXŽ#y¨úmàÛªbWXñœa-|ž,†?Øé\n  OSGgp†9Œøêp†2I;¡^ Ä`¦÷ßó•(ÑÝûp†!Ó𕢬 |Ìdq;¥üb•Gƒ‚×\—ô[kºÉ@ìõ¬zç5ï¸c4þÀߪ‚>`kºÉÀÒÐÿPt“Ó‘w‘(›¨n×XyopeÝä~(ðý>нÍú€ðIp!2à ºO:€¿O® ·Ùd ¿ÂlÓ0e×à”ÑŽ–|ÅE°€p>K Ä™[ ¾Áݲ(„ãÝ~§Yù‚ï¿‹i™…—sÌÍTWŒÚDô¼¼ÓhÔ‘¤Q#\Ï­ç?æ”b0Æ•½ÌSü¿–·Ž]WÌ_¥Å¤ÌB3Ðu-M%¬øòž‹'.¶@ujÎC•Tg]€0Á¦Ð庬ñ2B Þkã¥:¹VŸl©¬ˆŠª5²kU÷!2¢^aO½ë‹TqñàÕdàµGŠWÔNá˜sì…Ô}Ô¥4¿o±î¸”—i@'{x;ø-·…†®žG˜@Æ(Ç&P$‡ƒÀðpào ø @Ö l–É6Í%öÜj3fÙÜü€9ÅÞ¿½( 8eØb'Gmu{è =¤AÚIˆ]V< „E·OãíÅf ðxõ’·¼]çµx4¹Š?à-œá¼ðw£À‚]á¬3Ø£”ºÃa÷jàQÉßÑɶƒ"¨Òc<Éžr ø¹_óûÝ.ïÆ‹³øŽW7WÞ› ÞÄßEꊂ¿{£˜Æw€ß¹Ø$„N`7äð> çÑ/U­îƒ±L¾˜á\º‰¸nßG€Lü1H}X“”k2ò±Y–ücz¿ié…ÛÙ­½j.jU£@Õ¥ìË€2Øû6J¬0QÀŒ +ÞÌ4rw°3]—ýõ¦ü–±~qødÄæJÄáT kí®XS‰¢ø¦¾ˆL»Àí‡eèbxùH`ê=?*`çYŒ?áÀöÞüÖ¡0‚,ÄÏ]ó¼Žã-´Ž ì´“è7{ú³Vºê† ø÷D`nÕà«C¡la/ðÛAÀ…,Žr|1.`p:Ðo€Î¦08k€28L ü2zˆó à‚¸‡i>¶gq1€((ºÀè0›dˆ]E H?(Žú;U(²ƒ ¤%†8ŸI`ðcÊÈDyJà’¸ ±†!¢µ#ó±kP™ÆC@#À‹²ÛØ“äš2I>ÌÈ”ó$b7Id=ö2¬“€Ü4Â!ùAtÎÒï5ùê`§•åS€ÙÀÚŸDÆnÏ |àö$vx€¯³ÛóÛÓ.è ò.¦eób‘ɼ¾âY˜³Ù¤Ýšw±±žåé@ð”˜CJfƃ•PÇòEñK³BÓh:kûâ–*?ŒÅ§ßü;.’“œXjTÌÿ=˜X@ì‘X¼J&‹ò¨Q— |.^–Ñæ%æWì:†)T‹ 9j¾*¸L¢_Ê:ÄÅx ”Sˆò ßuºf |ÈaÂ8Xhzi.¨CîȤL˜Yð³$O êö‘1v-GèÐZªÙQ<}sÃ^ú€+ôÚ@ë,?LsëçL2xÔP¥{PM¨£f¬ÄEþªàûÎe]n„m  -<8íA®.`«¢Ï‚ôŠßŠb’Y&Mâ>­†Håh™ž´ qÜ §nÇ‘¬ôC®f„A^´ðŽê8H“îêAG vçrÌá\fm`Á³.0pœb„öâŽ5Œ»À€;Èlà qeUâ-তÕ!iEëÕl*°TÀ—k% gzaå’™˜É›Ä£^vâ¡@@Hf$˦-àÖ8Å4æ‡:‰"hð&ŒË,¨9µ%Q¸„+þQ±3ĈÅO ]¡œ-èó€a8¤4Ÿr%…xÌï^§49ãË6P”ø l7–œázX³`äÿ…Ë´Pž 4އEºŒäðšYÀªÔ_B¾&€Ë"©ŠR,œK@v$0U@ìý´èóÐÏé‡ìFtdùÝÀ]v»9BfÞ^ÙÀ…èåS€á±À×ÉÀ¢ a)ìì5Xµ€l¤ëd kÝË ˜Ž–ê"\šÀÑbç_4ŤXÒ¢Œ60€iÿ ¾>˜‰´ª¢dæQÞ$Ó€±@™y- Ó Ú¤-m` ý –Ir/ ø=‡Þ0ÿâãx‹;ôf[ȉè å¢'IÉõœQ•GI]g´¾‡Nß y¿„^¹^;™99GÝŸÝjrÌ»¾G!´{µ2 Ÿ|û.?XÀæ÷ÌÊQtšìpB™dù_Œº»ŠîÓ뤙WŽSÆ÷ú¤fÜ)†r0ìµ–‡sw §䔵W@ÞF‡·§©á2 v#S¯#pOÀå‰À•Ö, U™â` ‹k˜A—±€ñ80í6…žÉÀ•&õM¸9˜Y@X½‚âÜä"Eã±(g#=Ñÿâ•^ÌÈ#`uƒ=+`Öì K"o´nGü„²SîcÙ¢ Ô„Ó+±û…§eC¡Gº}í€PøÂiªs T3®1¨Š%`wî pcµ4­D±nj u 6~¸Ãn;rò­ÐËý,)hzÊ5¹•<p!±€µùg½~o€E(.Còó·c°ÈÚ@ï@ Q³À?N@"ذ^ÈiÛb:µ²LBÀâT ;"Ž/3€bo/Øåm!°¦ïKÀ.ÆOq“Ì0ŸÔ# Ô_Bó㸻€!<êJÿ±€Ö³`5§Å¥ uGé‚ txKŠóWèÜ܉hÀ€³Ϊ7¸Ö@E7ýâ§Ü±!ëy›Lœœ§"/ï¬Tó?,Ï |hkzÀÁÙug¶:e’ð®åï~îŒ@¾ÂLOÏcØL§”I&‡C§ ÿÏWƇÔsc IDAT ^Ò0añºQ¾ÈŽnxe‘ýQµÝ P +h¯1f TCð½¸ÓÚÙ.u ÿàë$`ùÞVGuÍ%ía:°¢¹ `Ο6°_¾ò·gñV)’ê`õ½¸º©ácýR\/ AkíOÁËàM‚QÔαÕ'‚NäP9š›¹ŠrøÆÈ@¿“¤åBGâ“ÁƒÒ@TL!Ò3¼©‰:5¬våÀWkV¦,Æ0ržd´jeR3Oö3¡ŸÌqž ñ 4°™.›^â] oÕQPŽÙt ,'a HñU²@Y YËym±Rº —~)ˆ;ŠÚÁJô§¬Œx9Ͱðµ$àS&•Î5ŠLÏ&Ð_5À‡Qà* ~ Üe¸ê.Dü5@ª]ç?вè¡@ü Àj>šPw€±qŠ]Àä$ dˆÃ9óI@qòf,ìV FÃu `ÄSËÖL¤  yu}8ÐG ã.îÂk½À-äÛé l{ÐD0¡(BNR2ƒ:†K»z´Ô0.¾ë!ÅPågzÊø««˜Œt¬ÅlS«–“yð$ú·Ä¬—Hc"ê™6 ¬`òh°‹²R}~w›'ô$y¦ÜÌmÉ« ²B ¿^%IÂÀbâ2;ËC%o-à*²²ü¥³QaR~°Y(iopT¢—ræî[óEÊgÛËoÜL&€›6°:ج¹ÓÍßVhNÂbð\Y~Ýó©s‚Oh'ÀÙ¹€ÁnçfWÉW“éÀ¹„Ö ¿™ÏÖíT`…~* acA“"¼ÑlÏræ±ü ?žð{ÙÅ šËû}2p 5îK¨6¹kb÷+‘¢îPõ.’>8À¯îÒŠ€{õEF€+ªbëëY•¾º€tãëÈÎ\üyp»Zâ< ±°nþ{w“Ü*³$ ¸ ÙØ-¶Å‰Wmpxà¡vpµ‘þúàð@Cíà‡º‡9ÔW™Yů%[œ¾ª¸÷¼¶„Äc$ ë/k'ö𥉎6`ʯ| øNi |Þä™Üÿª°Ä>ûàA$oÖÎA¤…ÏßE*vkñ¼{˜hÞÖë$©¾ ‘™BùÇ[XsZùf1SŽAAñnᙀÏܦœ`/D1&3¬^aû©×ºZ~.ª:C‘Ƙ&`^Á Ôˆ/3ÛO?!ÿ®3 >Ò—‡_•s³áUL:€¢9]ƒi ¼ÇíŽ }bR€äaJ^ dP¾z,0" OÀä(P4€3¨¢µvHIÊK`3`å Ü=$ôUüv 8¸@àcŒ:€qÄz¿{Êw2x8#€¶ˆ0F«ˆ'(½Œ06P{Á4Ç€Ô‹[6JŒb¿+¬~¤°C;1BKêÈ`Ù3˜¤“¤Ƚ`^K|¢ÆÐõXù€îúsÔöm`Š@ÝÁVžïtèéËL˜Ö#jyS…¡xÏy‡ Ó'f/½ÿ|³<¡§)ËäÝëãÝBã`DmŽx¯Õ-êx#`]5ûIºÖì(Ý©´ ‘UG\GÄÖ;%êÀÕä/#F¿l?ÜQi2Qƒ@| ؽ1´ývó»)ý‘®! =  ¢0°ò° àê  5Ôœ#л7.tHàS©BWˆ¯N¬€vÕºíkàG (ëðáb5vå3ßGÕÖÞp«ø €ô–Üuqv‹-Ö±R,ZGpŸ½@O-pñe SúÐê:Ç?b”¯¼Áß½°yèž„– <$¾óѺ ˆßA6ê;YßhÕèp°ViJñ¶Aæ§„Anî ¦(0kË¡ÑV7 ä@÷iø+vXëð٬å{¼?;K˜ÿ /‹0¢†!r^ 2ùÒ8¸¹%î9¾ [¼,lŒë œÅ‰ŠY( «òËéa*Øí$ ½›ê¨E­ÄC¿ø0l†"œ²ú!?¼8/«uò¹‚©a|LMQ’ïçe­pk÷¼éB+·Œà,Ìü%/51@Àëq™JAƒk,’¦iø¶úD üdÉÚbîÄ4oHПY9~ÞÏm&+6ïÅüW¤™a%0ÒÀ°Æ Õ€.foîÚt ˜i #0“€öWšhQë»”V@ûI—-  @ì Ä6é¸Ê/ ­x :€|¸ÒTrÑ ŒJ ‡M÷G€‡ç`P}Ä `µsˆ«ä6»L d@üˆékTãà à@ªæÙkZÆ—âø ˜Ò7° ÄÝLí ¨[; Sãàä¿]ÀM˜X¯»§¬Ö± | NR&ä%°@`Z#ÄîêíZeÐí–ÿºœµ€¢v¡¶ÞRJæÍðê,ß"\øòAÈVçÄ\]f0Q|WŒDeês¡eLí/ƒ•b¦[ ì cÇx¦€å@½ðyóB Ó;+ ز¦6Úí°Ðú¢?ìÈ‚ÀמÍ;* }@Þvõz|X¸—b4Ò,kP'áS{êÚv ÐÞmZ@,qsÌ•2R/°ÝÝ0 lM£ª h½é+_^Ì´Y†F43y :‹áÛ¼†0rYÕ‚òö™)Ôï„߃õŸò, é{a|C8ìÓÌÙ¦Ò0ä.Ä·¹¼®wžzF ă„7zÙ¦j‹é® `V:€ìÓÜ­j (<¬Ó0Ò@w5hR ü›9Yù¶K¬™î…1øŸ,'U[E€;`°: øøUàV–SH;ó|I`GOeÄÑ߸n ŽÓà ï8WÀ¼øÒ8‹â5Í((Ò£Øh:µ»é‚’Ñè’¬\Ý^:]ÆõÃíØ‰©N’…xvñN“# 7# ®ÎHÉ—™›‘u¯ÜNªÞŽî<¡ÒЪZ…´3ÕFhaG ¸Žcbæù,ðÈ`Á[ùé!°`ôטÀ¥0VÀbP R Žœ_Ë–rÆ=È àT­¨Ý~`ªÙ€†,ë²6“)Cå«t…,4ô9 …ºÝÀ`²=ÛÀâ‚@§ ÌitAÑb ÷<Ü(`†CÿС¤½@§ârˆ-[0ªFj¸ÊЉÆŒ¬Œú€p'Ù§¾ÜßÌD ˜Ç7ÝG0aÁ=%Âkž•AOî¢f s;¤ÿ¤‹«#Û ôš@ïëÀŽŽ¨“€Næ%ÕAæ]0ä_ì+ß ±ÏÓ?SiÛœ&¾§Q2lRïø.1Þ,#^5žÍLgÔ?äøŒKoŽ×þGQ/¤¹}‰ëé&‡žÖ†ÆI’˜ÀM ,¿î0Tÿ}/8¦õ`ZÕŸPÖh¸«®„Ð8ÀÃ{ÑZÝvWmlã±ÀÂ磱ÀÕéÀ] Äo•À;*Ó‚®%\Öª .ŒNó3¢ÂI1DÆ‘\ÔF x"ùò6=£ä¯<Ì]ù̓~„ÔQ Oí³8›_Ý‚–«hsYwšÃ¤ ~A÷aòÓ¼w C•£LÏ¢HÄq£8eÈ«SeiëEMÓ*ÄÐ÷ÆÚ;Ë àµM ¯…[ Ó9`ö£éCB¸_Ð8=e(W¯C¦<¨§Œ}JÒAÖ!- þM^?P”i ÂtBÒèÕ«Ãg%PÖ'›Àp ¦ 8&°Ü¸‘ ¸è1–;Ou ÌÚ éòtY ôL 7:¶Ô‰ÜC·Œì«ñ@˜ŽT@zì[@1˜úìùû¡ ”^—>báªØm³¡#˜ˆ˜G_¾tqØbÈ}/˜Ñø2|®G€ØŠÐ d™Àb,«…s¸ìá¸ÊÐÅAå·€LÆp+:‹gMà^£Xž˜ˆ£i¡ ÆÕµ0}™ñ#ã,n™¨wÇ–©X`%ÃÞi¼P‡¡ZòÊ´¢9MsyöÑêBà(,½,,0=ùEUb–Êë`ˆ“›°âJ¹ýtqXk›Þ§Ùº˜ßA(jªøàüqÎÀ5ºËö__·®q«»°z$íÝøš@#)Õ 5jûþ9óçÛ©0êaM4€#ËÅ— n MÀȃ¿ˆA# zÛëHm½×/‡P}J«d§R-ÜãbÙBw¤Ð>ᮾBU7‘þ€é´ÎƒÆGœêüƒ\W@$‹ä.Œ^yQ%§X¨ŽMuÜât `†3s³€U7‘Ô²€zfâ5—AåîëJ`NÀ÷˜°ãm 5Øô¹þáÌ©æ`tiPäƒ@L0ަpî©v`Ýã_”uˆT ËÁ³ ¡ò°©—Â\G<ÀaΡQÖàƒÔ 2ó,@="‡úW hqTŒ83H|U¨÷i#X(lîÖ‚V&ž¢Ž¨$¦HA\$ ÁM6ÐÍ¥pXðÏ¡ ‹€sÐ4¥”YÛ6˱7É\5ÃÈÄ¡ö†Äj\fDkpY,è"0a8F€ £™P¬V*Ã&˜-! xQÝL&ÇNI¦uP@üsšÀÜþ& 'à¿Jà _Š@ˆ¶pF„üÔI–kÖ€ñi@~:|.NÒÏz€£žU_“a hau„ q h5‹#À²§© 32²> ÷*à¢dêÐÉSW‹E¹8ªôº¿ƒýÀ Ô´0RÎÊ0—ž„!÷2œXèT5(¨¡ŽÃg°œßZ'U­D¾2Ä‘oˆrú.3ÐYóKPùè/ Äd…³ÌôòAt™!\¦|>··U{"E`Î|¯u„ˆ³,ᢚÁ(6† öóÓ+¡n…j'wã_Ø"£€ %»â޼|º‰.àBý”ú¡|OWð»<úg‹7PY}t hã¢#þ] ëõƒÀ¾ÒÏêÏ­{6£±âÍ'zZ§Û;«W_>TÀŽž“nà`S0ˆ¨;&Ñ7€›>`Ô|koØ„&Ñ!ÿÐhÑïšcÔÚçÑrià©û⻪.šUµÏg‘Á=ùDœ—ã²é%Á@r: œw«v‰DÆn~ ˆ]Û%P7±ìé%PgZªñ–opKÀ=q‡Ÿåª%ŠjãñÀ‹Å ,+Z~ÔÑ8à þœžÜÒ¬ÐÍðÐæÕÆ&0¹kaŒ[¹µ‡s%MàËçŸ~`^¾mVl—Öi”ñ…³’µö8c0Iêf/‡0 €2‚]D/Eðïæð¼dQ¯4Yï¿¡»%wÔ-6q1r¢™ÆÈ„.NÀû„#á1¶OT%Ê6‡a׉§:rBÊ®?ÁãöˆQBtq5çCV» s8VDf‚‚ޥТ#1 ܨJÄ*8ñI!L å/®€8D¦ŒjpñHˆá,ù¡ÁËU@6ò}%hAz0j£fQ6k6 a½È ¤ñÐS@n- O@Oaå´F³ÝM×H³!Œž' ÄÕ­Ã.  tÛÀ¼ø/ ÃA`ú%`4(+P^< t…–)ÐúÎ0§Ž° é»H] %0éº5 cG€ðL=ü õ¡ ‡{;%0¨!‘[½•ê,ÆÚeµY¨ÎbŽÀ´6BþçF¥ ÆdÄ ã>3ç÷P Wp! µ4aõ1ÐiTð:èš×AK³ò,vʉ­ë×päsø-å:?øP¦‘G0Mv‚GÁæE…$˜¢Ýƒ†Ô=Þ`\ùA=幸Ïr‘ÊM sQÃG#«‘j°¤}V £©£©Dê¿C@ûP¥µ”ˆ,U¨dƃÍa2µò4¨Ë`tu ÑÃ#^ÚÀªÔû¨ÀÁ^© X%[îH»Ü„æ†õâúîZGC¯xõOíh©Á*ä?LÈ{€õJ¶îÇóŒúZ?Äg‚9Ú°'„†Å.5üM™¾bH}u²nËí1'NF¬[5#i‰·Z@¾À÷VW)˜ã9°÷9ò¶Þf´a \+ …òõ€€^¸SËÜ,5‚Ó¢ ¨†õþYHO¯àŸ;ȸçAoÎAz8f§ µaw£èø¾”G˦ǀi¸éÚM DëpAs_¸ë2+¬ ¸" «÷rÿÅ9ÀØyNgAßË ,(ÁaZƒ yç¡à96æýn—3ì'IìÄY Σœ-îäM|ý, zÀö߯·ô S«BdÁå71Ä´LC¸¥âF„d̲z4óRÔçÕa.&ìÁz:ø˜±‡e9Ô5ÁÈh¤[ ‡£©5Æjx¸O/Æ*–Ê…ó«+ îãìœÆËFWµëªõ !Dša,$-`JÑŠ%j±ò€>Q”AUÆK T±ÜG'Â:™ Ve×e–§ l ìQ@5‚òH L‰À§jù7iÈ€Ð(@» ´…(¡Ü~CÀ°8 LH!Þ •Ž:C@ÿ`Pê%4™S£6P ±ÒV‰d@¯ A°%Ð5 0xµgSö ô”P(®&™EÅ–@¯&ú,.‹ÂQjùe€™ô%º«ƒ|Ž@fus*0efŒT:7ìYæº?H¹^똩4Û’Ü–·Œ@uäxåd?/«ª2ô—™ç¼-p±gÊ<×Ájž›¹¬«Ô‘i¤žƒþ3ã:Hµ²EëBmÍ‘G:²7‡ï7R’}±:¡klPU%D ¸ü+zÑÅ4±Øô´€õ€µè´™w Œj§¡v~õßþ}žÕOÒþéüñリè^ 60Å‚•¿c,[D¿åë=Ôê$«°Ó &.öÖâ §{ÉØ^ÉK þ 3GõÈ&”Ѱðè[ï¾)  qsבºÒ7g N.ŒRNkÀ3[¸; s“Aäü‰{Ö'onQ»ÔI!’®ŒXÿh ôªw‰k—^ ¸ÕÏ(à¡ p/ßuiêF?0«eXïü  Ü5€œ>ÌåªÔñI@ó2³1NˆI%0ñš@o¾rðƒG¿ ܈¼ʯÄZ"#ÈgK@ºÉâ4eb+`Œ3rðîì<½ O~ Õê2´‘|¥•Âè‹eìÚåMúþ4ØF͠ဠt‘Ìl5Äë¾”Àu¬²Ä˜œ«—Èz ¿ƒ¨nó²)ÍU]VfÊF nAãfàø) Š@HQÈL/,ê¶€fõ&f¿pèÖ‰@WVXuÅÀÁ è"Э€0i Ó äÐ¥³Xã> v(EÞó¦~ô×I 8ïÊ/ÆE€jhT† Ì”@ø~/ð­f wTIDAT@ÞÌZ@¯èÄÐj‡?bù… ƒ~ ¥®ƒÐßóYW#€žó@˜‚RÕ;Gu‡¡ L æ1¨—1C Ó@U °ä‚©³6žÅd¤ÕÄôq`ÿY\…ê³;–@]9ª€x’À‚i }û|e¡á•õ ³" èÞë¿Ü¶ÎûVv õþ¡ É[–À”†ìÍìÜH‡éU¤ _T]ÁÐ*`òÖ+VÜ3 ôðAþËùœyžp6 à]ûNb˲ï^ÑÞX‚¤â¸pl*ÔéQË¢Â- ±ºR’Bñô£€‡`Õ^þ 6yö-ýz2°»ŒF§Æƒ“€ÇK°;Ç›ò·o³°¼µ[”/täT±‡;M QÌÞAõðss»z¹°Zuë¨àçï« ñh ‚ææõ§Ç•ÿ à®Ø{QøàÿÂRƒQ9¯>ÌœpeM(Cfèc|ù£ÀœÝÑå/ÑaŽù3c‚103È?WjùÉR¶Ûºõp‹ª\д‰ž. Rè.p£LÞëþd‘ÅÿÁq×Oœ*PAÔ>”òJmS6°ZÓàÈöo*m u &›EÓîó¿È®ÌÂ^`F@ €ì‚ÀÁ)­Â;RTf± zPYØ œÆ®êëáVªéébåÌX š±÷„Êü·³³àí1)k2nÈœýÉþ‹ßµ÷`gsù{Û×Ôµ®¤¼t‡_(z0_w™5ÐÀÜmÞÊ€ëÂÀK túÉ$€­ˆº¬_ìÒ)Ûi &ÓTš&,çu¥V™^àyª@enoÀóÉ€0éês]TÀ,z™ÔÌ0ä‡ÂRQ‡)Æfö„€ >bÑœäL f™‚ š^05 Ê0[਴”Úù§Ì `Þ&ײ¡ìoöA,¦äÔ²€mP_ÙÌQ£,wéT€ŸòƒÎm]ËŒVòv¼ó¸Gòpî³<úÈŠcï}‘â™@=…¼µÐ§PÀÂÎa&ëáCók½#@áä8nþ«ÀV}ò‹ÀŽá$‘ÀÇð¤}^ ØQÚÀB •m•¼|ߢöxJY\šEO$DŽqdxp¨Nò`½|ðí¥Üh}ØÕØ}ð¦ËmM`@ûŠ+²Hà àêQhàý··ë m Ìï È£ýõ…ºu`A@ëõ[>nÅ^Ö׃·Â¿›ÃÓÁŒc­ÁKÓù±#3gcÜ‹cÕ'B#ÅhÄÊËÌU€µ|3©ü/¡¨iAøú-@ãùÈÚ@·äðeMÀ ^fê@ãu]G°@`„C# V@póò¦ŸWŠÕàj³AàÇW€É 0Ä~’H~Äa¨?âߘH ¬×8‚B}ý†j5b"@¶ÈÔX² _ÔÎâÍfsu ¼ò<‡õRá…Ù¿¸¬€Ù•€ªü.7ü½zûSÞIÜõúªÀ—Á€µ«ü0p8¢þ `5²° 8œnÀÜo7àÉÀÕùI@8IÔš1ê­R?Ê‹`9!àŽ€:åÌÛ\xNèOHQèò`¹–—çÀ‹…½ç¹~B²ìK«×uÓNà.6°z÷âyŸ)`Ú<’ß ŒÝå}†‰ƒÄÿ+‚:0 ¼Õ­Äö*@ì†p˜Ì‚©—L 6›5|+eý½ 4öü·:ü–´Öä# Õ´‰Ý®Ž}çuкVÊê@€»ïžp;oëw |Yîöñ3@:®@ßÚð€“åž÷ŸWz%01€³,ë­Š:²} °õ§¬ Lõ…zÖ€¼¬Þù'€LPBùºÐg¾«€‹ ȯ¤Z¼úò:(7€ôÚ¡Þ©{ñ4€º¨v‘0é„€ž\]Xí¼ò îîÌ#¸J'Œ¨.3<úàð¤ø§Êà/ÔÑrý½À÷Óå (‚ßx«‹w<òR6®æ1JT²‡J­³39L(Òï–™2×Á£Àƒ 8ú#æpÁ¿D4ƒ»Ê—g^u&æeÀ<ˆ$r¯¬æà$²Ju&ÞJ‡üqà&ÓF)†*Ì$ð1ÇJ“ŒÆ¦ŒM`W ̼ 9³ÒÀ÷Ù>—w^8‚m}ð´z±KÑŒ ¡Lè»h]ÈêÀ×'Xëü0©ïð2@^P- "e&AUgú2Ðù.à#¾x9 ¿ÄI¢&¼ 0Á7U•äšG°è®5¦ôÁnÜX>É}×¹°çNr2CÊ8ßݤ™fwÞã×e}ùë@ÖºÕ¥¢Z<\ç~›P ÏKÍD~¶€:?ÂÄ€­IÏWÆ-`W™{“V•¦ÆZ^7`?u?Màç%€—ŠUù¸.ð-w÷&ððóG0wúBþØæ|8¸¼”|S癫QBÈO«{ìù Ö2M˜ïܧª“„ök}ø ý°Ùdñ‹DÌì¬xð{€°Ps äÓZðiêÀçé36‘˜m$#! ¦Xã>íe:@Øpá׊•uøðâ—™jóÓ¯ƒŒó;ö¨ uvy ûe`³¨Uë/ ¬ZþÛõ0½4P•Ÿ–ï{pD!bÖz<ÂÇÓæÃ^õW¶€9i jQXOX.Û¹£'ÞN~ÏIò`{xžõgq Ü4€›‰á$ù€v£å{ˬFØWÀâGãö7ßIÒLc‹/l¸âÂBzºÆ÷ƒ œFKX–”ÃA*Ì>å#þ^àg ”ÿ‘À]Œ†§Äþ"àSz ¿ÔYœÀk7ðõDàw_f˜à¦8¬v^ èÀ‚.©ïlùiÀï½Êjgè@..wÍ] ´¶Ù|B×ÁOñ•`½nè‹È…µÍ#û0 ÛÒ[Ý€ã€]µ;uàjê@15`qgìí÷Ä€p’äðžÐ §Ò›I3ä.®²õ“ožÖ qàäà©@|Óès}ض¶ÿ -3›ŠÃq aíô×—Õ þˆ/Ó|:ðg/ÔD3°^›Ã+äÿò —wãthXÊáQX>¶Äkzjw?Ìz€©Ê÷8¤ôüÄ€3úðŒØ»$·.­9] 'Lº0= oà㪢Sª7` +.ÿ@7Äh`¢7Œ-Âä¡)ÅÃ^Ìàñç'yÿô±I¯ÝOBÍ÷uÇžÛ‘£ææ|¹·ÓyÇ;ª'/u×vž$]÷—ð4à³¹xn°Îâ¡Þ? ”gñÖ\06b€ýkäü,ð]Ö‹¹¹K <ãBýe`×YŒ@ÇØÙ5½GÐ\.›$0´#°ð‡¸§WÙÉT€Øæ`ü‡@|'þW'0“ÿvSy§>ù2ÃÁ^¿ŒÙ- ä'­_¸PÐ÷üõ Ý .”u’àû$€‡ CˆIÛ§|Ý&™»2Șðé]—Мg­ ±zE«Ð$Ù‚ýz›v;Bþ ÈÎf:\‰f©Îb<Ž>º#nðøumÈ¢n Óó{Sº_¾“\¥ƒ:¿,Ô€e½ø(Ðî^8šùû€<ór@” ·ør¦» Ì® LC/ó!ۛȜU•M¯ºŽ¶úI.„‹tòšÖ€oç“#9%u”†±Ñ@£ôu…] 4€)¬çXn&üA°»OQá¼Èoˆ ýzVïIò3Å<‚œyø XœÁdíÚtkóÀ.Ⱥ€vr%`†!¿‹ÀBaÒd€&Çßv.ô¯¤³˜åÓâ%Ã&“2Ì a“‹À¬‘JãŠ@š2²…¸‡0.3ùÌz=g~ñ…8ç´\˜°ˆV¢`ÊP:! è(׺ ÐýèÂAyŸЛ8ð]LˆY‹€’f%íušÀ=ð)è®›0Љ£) ”÷XÞMz›ß~˜aD–ÈÊ}oˆ[z/òèCÕOe(ã<ä¶TE(ãþ)a¾U,äÿv@¤Ð.yÝhƼÕmèÔý“ ®œÿ•ÀtºÀ$š0Q@F@ȳX§q¡ „˜@¼Ìȳx:@j¿ƒ–jè‹bù?gB@º¥´Ú%'ônÀ  gâÀv™pòÕÎðÿ:0unÀó€]s·TqÒÓt”¿Ø[¦ò߀7à xÞ€7à xþ=@«ìן0Pµ Ü€Áª»ËýZ'I˜»LÉɳøê@*f¥ ¾ZWm€M <›Õ6¹Ðé×FÆìÒÕIÀŽç»ËªúѺ ˆ#Þ§ ´Ò á2ÃpíS«@ã,þI•¬Z»Î8‹ÝòÓ-~¥Æu¥e½‡Ê\Ø"»›{,È¢(÷Ï<ºCSn©Kzà“”—þùùU‚àgœòŸ ¥ýýýÍaQàßÞÀëÂÈÄ·ÄÃÃìëëÜÛÛ¹¸¸‘¦Ñßßß°¯°tŒ¾ÇÇÇ–±í²³·ð×w4®;óóóöôòÄqf–ᛓ “ÂÃÆÿô"ßåðåàà’|$îìæ¢¥¯®«¡¡‚ÀÅÏËÖËÍÔâùýúûüþØÙÝÕÒÇñøñŽ«ëýþýüýÿÿýýÿÿýéëðÌÉÁåãßÿÿÏ“^V“`Ytžï‰‘¥³¿Ø—‰U–|Ó½iLp»ÕÔÔn×ÌÌÌÿÿÿÆ¿&»8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.I ÔIDATxœí˜{\SçÇO: *è1$TàÀKP ‚ƒD¢Ñ .EŒ˜ AÀkUÄ©xÁ Ѫõ’V§(ké¼T¥S«¦]s‘xfwÖníºÖÎÝœ[wÓ®«åìyr“‹8Ýgû£ïGùœüÞ÷<Ï÷<ÏsÞóœC°ÿãA| ð PýÆS0¿éߟ5`üànòùIEßÝ9øÜûŸ5ëÙ!CƦLj.É•Ö;z¬^š™z*{áoŸ`РY?2àê5@Een}mõ/¬jãÓÚ ™©©Ç£ž Þ¯4¤ÿFµ­×Hž©«šìhÐzƒ>Îñé8i¦QYÝ=þ#ˆg~úJ=p*ù*juŠZC×fWו­V›å?&`7Àf-ÕK€è«º¬kâvoÆ(ÞÙúË-äàl¶÷`ÀàÜ–\åf³žñ“Æ 7; žd¯Àßö`~v}VcÏÚBjìO´W¹Úº¯A€7öæ*7òÉ€Åf´ßŠægv6Ÿ40#44tÆCš×â]7€¼ÃæéÝp¾ëˆƒå˜ g^P^nâÚðá¼=½´¼¦¦Ó>€äWR¡pä~ûй…ó FM„H 3{Ù¦/H ›& .?ójëà×Wòb¸Ûdq½R Z!6YÛí¶ÀîÄp7? çs/ܹóWêê®l)1~I [¦:¤ð&pæÚ1@?¯‘—þ•}"ÿYW+.)[žœÁ ìÿûEˆ÷t—‰1·wÖ,‚ Æ‘ÓƒTÿðÖ(\|ëŸ^-Òhgj%ã(ìco}«ßÓó‚bÞ]´f~TQ¦Tb\ãEäÊõÖŒ+©²¬Å<\øÞ§ú™ªƒbr.ü-4bDºXN /ÊdÆW aWïcv¶Q^€·@å¿ÿtÀ’uR©¤þ¶ˆáñ>.vmÔ;p~?ÏcbXMØ4Çhê»Áy·Æz´ÁÁé›6–k¸ßZõõ½{u)--®Çh€iŠgûê €X#…qa•Ÿ´íX¹ìâ´˜˜ ¿tk§Wl„.ëå¼<ξ¿ºƒú⮯ae´³ò–Ò"t™î`·—A‡À/ûÑÃ% ˆò)ÅnîИ˜˜=?ÃÒ‰ÕiE-°™rÇr8œï¸´?æ¼&â»6XÂ&Üq)U’”á¶<šÒŸ1.¡¡|:ÿAG9DV~#…@J÷ƒ“M³œ4wî!±Sð€çë:nø,<»Úùò¯MXáõD ÖÛy”k†! qVºÝÐæþ‡‰¨f×]ÓÞN;Ìg%RIÒ*(RCާ-Œ°Iàp¨õrƯëéÜqR ©Õ€gUcж)ÂçŽàòx Ð3hó¯^Hq´¨õZ{ÝG*•õaX“Åd²X,îˆS¯“®Z^E0x%— ë`ÛÌãYf¾ÁçQLÁLY«üÑçD!ɲ(ŸÊ÷‰‘{k᧺W¿Þ칈߅ÈÖÝÒ¬ÐE†£2–¥Éµ×I¯9•†bÉNçD Ù’E’*_OG‘mÔ¬M¯eãE"­H$²òâ;Y @ºpmCùù•E¯E[£Ýz<KB(Âñ•meÃñaÒm…øèưùH§€Ÿ„H“ÔÞ¶¾â¸ò2ì¤HÏŠ°_ø£Y{ÇºÃØ×ÔX:r­~ê <‹SŽEV{ óu;PxÚ_Ê¢PxS8ú #include "allheaders.h" #define NPLOTS 5 #define MINVAL 30 #define MAXVAL 210 int main(int argc, char **argv) { char *filein, *fileout; char bigbuf[512]; l_int32 iplot, same; l_float32 gam; l_float64 gamma[NPLOTS] = {.5, 1.0, 1.5, 2.0, 2.5}; GPLOT *gplot; NUMA *na, *nax; PIX *pixs, *pixd; static char mainName[] = "gammatest"; if (argc != 4) return ERROR_INT(" Syntax: gammatest filein gam fileout", mainName, 1); filein = argv[1]; gam = atof(argv[2]); fileout = argv[3]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); startTimer(); pixd = pixGammaTRC(NULL, pixs, gam, MINVAL, MAXVAL); fprintf(stderr, "Time for gamma: %7.3f sec\n", stopTimer()); pixGammaTRC(pixs, pixs, gam, MINVAL, MAXVAL); pixEqual(pixs, pixd, &same); if (!same) fprintf(stderr, "Error in pixGammaTRC!\n"); pixWrite(fileout, pixs, IFF_JFIF_JPEG); pixDestroy(&pixs); na = numaGammaTRC(gam, MINVAL, MAXVAL); gplotSimple1(na, GPLOT_X11, "/tmp/junkroot", "gamma trc"); numaDestroy(&na); /* Plot gamma TRC maps */ gplot = gplotCreate("/tmp/junkmap", GPLOT_X11, "Mapping function for gamma correction", "value in", "value out"); nax = numaMakeSequence(0.0, 1.0, 256); for (iplot = 0; iplot < NPLOTS; iplot++) { na = numaGammaTRC(gamma[iplot], 30, 215); sprintf(bigbuf, "gamma = %3.1f", gamma[iplot]); gplotAddPlot(gplot, nax, na, GPLOT_LINES, bigbuf); numaDestroy(&na); } gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); return 0; } leptonica-1.70/prog/overlap_reg.c0000644000175000017500000000653212240302740015125 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * overlap_reg.c * * Tests the function that combines boxes that overlap into * their bounding regions. */ #include "allheaders.h" /* Determines maximum size of boxes */ static const l_float32 maxsize[] = {5.0, 10.0, 15.0, 20.0, 25.0, 26.0, 27.0}; int main(int argc, char **argv) { l_int32 i, k, x, y, w, h; BOX *box; BOXA *boxa1, *boxa2; PIX *pix1, *pix2, *pixd; PIXA *pixa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; for (k = 0; k < 7; k++) { srand(45617); pixa = pixaCreate(2); boxa1 = boxaCreate(0); for (i = 0; i < 500; i++) { x = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); y = (l_int32)(600.0 * (l_float64)rand() / (l_float64)RAND_MAX); w = (l_int32) (1.0 + maxsize[k] * (l_float64)rand() / (l_float64)RAND_MAX); h = (l_int32) (1.0 + maxsize[k] * (l_float64)rand() / (l_float64)RAND_MAX); box = boxCreate(x, y, w, h); boxaAddBox(boxa1, box, L_INSERT); } pix1 = pixCreate(660, 660, 1); pixRenderBoxa(pix1, boxa1, 1, L_SET_PIXELS); pixaAddPix(pixa, pix1, L_INSERT); boxa2 = boxaCombineOverlaps(boxa1); pix2 = pixCreate(660, 660, 1); pixRenderBoxa(pix2, boxa2, 1, L_SET_PIXELS); pixaAddPix(pixa, pix2, L_INSERT); pixd = pixaDisplayTiledInRows(pixa, 1, 1500, 1.0, 0, 50, 2); pixDisplayWithTitle(pixd, 100, 100 + 100 * k, NULL, rp->display); regTestWritePixAndCheck(rp, pixd, IFF_PNG); fprintf(stderr, "%d: n_init = %d, n_final = %d\n", k, boxaGetCount(boxa1), boxaGetCount(boxa2)); pixDestroy(&pixd); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixaDestroy(&pixa); } return regTestCleanup(rp); } leptonica-1.70/prog/barcode-i2of5-300.png0000444000175000017500000000442510770123063016005 0ustar dandan‰PNG  IHDRõŸiâ®gAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IIIDATxœíš¿Ž#¹ÆÙnàx€á9»`-¾ÂN& ïM ÇNö)Ô-°B=‚e»O /Ü81Œ60 ,»¥žþC²I­ðêÅìvùSU}õUQ;/z$yðþÁ?øÿàüWæ?ÞÅŸêÌ|£)<š/rf¾Qi(OGOò*+ñh‚ÉT$óÄ'd‰¿Äo(-ÈÏkFðÍ™ 6?Aý*"¼ü3ù@xþ ò¯lS­XRHvåyÞðÜË¿ê;–?Ѽ~aeµzJ«>•<­2ºÑt«Þ‰M½lxì=¶³ò0˴çŠë¤~^Òð53üyíᙉMK‹D>¿òÞð•À2Ë7ù„nžôø<»åïO{ü‚$êy}Í?‡~ÿ-Õû5û„ºù¯ú>ýÚúš%P¬Tß­ny32”œ"ä%ŽÁl%òÊðÌøÏ¼†;Úñ[õÂ7ÈÓzÉq~pÉoZÿ{ø&~¥Mýù=O4´Z™ùk¾fç§åW†GÿcÌ1¬™Aœgiögæ×?© C¾ÀI"ȉ¾ò@.•€›7ñqþùV7ûÃðî£Ìî@4•§3|¾"ããþ"ŒñKp?~û>bÇÎÊ7O ÇÎÍÇ=¿>þŸ T"cy½…Š ¾"ä’ñ¿àÛ%´ž”Y-ñ\Aw9czžÿ£¢g8žÑox:«—AüÇ¿ç‚ë×W’ɤNO°=@sÚ°æ+1|Á˜+ÎÈ‚«–¯Ò²åùˆÏ™«~½¸ñÂðØ!Ïy—ÿ’´ñçù¬åßò_.{ü|þb’ÿ²ÓÏÿÊ/†|O¿@~Ñê?å“ þuÑÖßö¯í“ÿ2Œ¿åré7Ÿ¿˜äßé·Õ¿?äÛþ'-¿»ò™¿ÿÞòßÍÄçÖúe—ÿõ7úÍöõøjÊõwÔ¿ô¿«_Î÷ÏÄg½ü£øÉ°~k|機ÌóüZ?©ýþSNýô-þ©ŸÿêÆoóŽŸÄg½þø.þÍ+ŸþãüåÒæ?WüÅ͇¡ÿ–qþÖ/ê!?“2Ê?¨þ«ø„¯—ªÍ¿òÖÏY>àcëÇøœÙõïçïë?ëÏÿÒߪëö÷[þ¢ï?¯~yo~NÃøCó¯ýýKN–ü«¹úÝú_ã<õ7¼îírªßÁß>¨ÿ_õô÷ΟU¿©Ô¬_Ýòwÿù×Þ¡_nôã˜ò¾ûëêÿéü õóúßÁOôóøÇîßaÿúç7ÿ ê½ü3ûǺÿ»ù©zó㜿©ÿ{üÁ[>ÔÏâßÀùï¯ ÿ_ùÖ?£ùrP¿Û3ówðêG¸­ÿ¦"¨ÿÈëYýýþ±çßßþýk­ÿW1¢ÿ[ý³ù_ý£Z¾ûÿÍ¿N¾É_ êïó3ñYWÿÐ?˜ÿ2,ÿ¾ÿÊ»ø…­þûãÃ_ÝÁã´vý‹àÕd÷¿¿ÿË ?ç?«þñú©¶ÿ§~_? ÓŸuúÝôwäÿ2wÚýšÒñû(ý‡ùŸúþ‰­¿ë¿ ¨êß®þÿQoÿbüóæß½Ýÿù÷x¿HÃø;÷ðEÔüÙôÛGÍߨÿ·Ÿ–Åίmú‡[ößj2?/d9ß¿©ÿãõëüä_æöæÏÜû7HÿÅHÿ±úÇÿù[ý?Ò?¨wÞ?SÿeQûw~ÿßßÌ>?Áû'nÿzô—£ùqñÜ‘ÿ÷Üý3×?ýÔÆƒµÿ~1Õúûk~¨Ñþù’ý}Šößtÿ8ö·ß?VÿFøOºî/ä©OËý3¨ÿª¯˜Ç»ý3ö¿=¾ÿþq¾ÿòï?oýýûÓŸÞæW쟙û§Ë¬÷¯ÿþëÕ?ÑûŸûòÕOoüê÷Ö?ÚßûQüŠºë·å¿Ç÷úg¨ÿ”ëßPÿQýñQ?J]ü*,þNGêçÊÿŽþ¹ø ÿTPÚùcËÏÕ_Ùû_Íå?¬ŸNü[¿æ_yòßMóÇ/+våÃüKcú·óõ_úonþÜõïCòïôSý¿ñ5=ý~pƒçô»þ´-”Ö`¬úÉäçÏpùôÉAYø}óáÎs™¥,üσð_•ogU¦E 1¿}Ö„Õ¼ ¯§^RÛ9;ÿ3ä¢bpB¾`æ“x_(µ´óGÜrmyZÕ÷‚Ñ*±´óxï²M ¥þýŸvPËõ‚Ïµí¤ƒW‚íPâšÛŸAJx'·p^Q%vü äÙ?JËI;_S•ù äù¿á‚|†|ÎKÃë?àËÿ‡*8ò3ònùõ‹8íº?ËÃδð¬~Täõ™Ãÿ§}4/±•È/ÞSøY“5?DÆgŠÊ‹$O$|ðʶ1ñw ¹¢—‹\?ÑìÕ·œ¤q¼ž/ þ†ýçrÍóßÅäÄy…Ó‡p‡6àxñã1*~Ž#|¨ò-jØÃçˆþ#o>¯\ìá/ÈÇøóg &¼í¤ƒ×8òÏ&•IØ‹Ã?bx%€_Ìàìö'ä³'¾‹™£uÃglwFþ•ÿ–^N1ü_鮄‹ú–•©ÌyÜþ“„æ)\´Yƒ2Ó$‹Û¿†Çýy’UL³ÿy_™Ï™€JúžÿûûïÁ?øÿàü×áÿ {÷˜i²2‚tIMEØ)­Zðü tEXtSoftwareESP Ghostscript 815.02 Æ”Å_IEND®B`‚leptonica-1.70/prog/aneurisms8.jpg0000444000175000017500000003260607503776020015267 0ustar dandanÿØÿàJFIFÿþXCREATOR: XV Version 3.10a Rev: 12/29/94 (PNG patch 1.2) Quality = 75, Smoothing = 0 ÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ëÌËÜA@àöéþò¤Ž6Eƒ€kV”ØùqŸÏçH-SÏ8`y¿Ï¿ùë§olƒ©9ëîiþK#“Î:ãò©£˜+*°9ÝŒÓ.˜Gó/+×õÿ?˜ªèÉ"®Þxè>ŸýzÛ²´òÕe˜à@õà‰¬ÝrõçeDlEŽÕ‘1X)àúþ?ãSXDÀ²’rO#çüš&  àŒãüÿŸæõ», <qþ_ó×=ÃÜMœñ×?çð­+H•J€ùéßÚ´b‹ Ä€½qM¹¾X#®8>œÿõÇåT’çt¤nêzzŸéR(eËÿ?çÚ´,åÂì$sÛüý(¸0¡‡SAÖ –F$`uíéÏùýjD8,y'¡ÿ>çõ§H.1ÎG·ÿ¯õ¤WUʶíL—oŽYŽÏçþ{0±xøùW¿ÏùþNÚõ´Ëh~ùX¬c×üûΫ_j›ñ°ÄC©^ùÿ=ªÍò³è²r0Nk˜… œ‘ÏÓüóúÖ•‚¢ÈèXr?ÇüZK©¶±U ô?çÞ ó”í sÇ9ÿ?JÐóbxw>L(õëY×r$уœæ³–)w¼G¿ÓùRyïî\’X`½ÿúßZÓ&žêçj)ù½{ýOκD’ÊÇ L ÄŒŸçñ¢-otØ"?óֳ繖{ÛÈõÇù÷5j+Ë…Cp3øŸóÐûl߯í–8Ïùúþ´è\1™¿‡9ÎqQZj·àíc³qàþ?ã[âô%¿›2¨§©¦%ý„ƒ$Gb)RîÅÜ('ÛüûÕ††9T˜ð ïŠÌ›O™f.AaœñøÓIÚ 7áþúTVᢟÍÉWùÿZÂq»þ_ýzÐ[F…Xóè=¿ÏåOhr¸ûÙ¿çüâ‘‹ §8#*Ïùþwì­^@’¨:úTÓjÑ©DQ#€2Mc^ßMt yÀÏEôª6j-¤hÉ>¿_þµt· >’ªƒå8Ír&F·§!NM:9 Ro'œ~|ÿúÿ3W.”Ëoç Èçôª–áePî6œp{ö§Ä0Çû¿ýoóù~Uæž8Ø‚Gþ¿ýz€Ü«‚}øÿ… ™‰#8ÏçÓüÿ*Øc¦‰—çšAÁôúžþÕ…o})•‹u8=Ï·ùÍi$€’ÃŒ“øž)ð\…“‘ž˜ãüÿŸ­j,©a²OLçüû~´Øä2È !8ÈüýçR\!·ÓÛhËÐuªZtM,ʧ×$Õ½bëb*)qY–Ò‡f$zN*ü#iç'óÿ9ÿ"®Ç|ñó¿#ñÿëV½­çšþ ¤»´$c'Ò³¦‚EÜm¸ŒqþÎk*Ö-É»« ~úêÔ³»œÀàó×üñR¥´(0?]·ÓÙœ4€A"}�Æv×?öyägœ~\ó¥’%…wO URp%ýþºß€£H¬Û¶ŒóÛüÿJä¥Ïpª¼c#çð§ù_0ÃrÈÎjä71Ç”Ý èz{OóŠFdm/\gñÿÐÖEõëZ“ÃñüùþUá’r„F'÷ÿõÖ”«¼Jû@,3×üÿ“L·»w¹|ÀÙqÀãüôiëÓ«y0“òãòÿ Á`ÈÙP=Éõ÷ÿ=«Vд‹ÉÀ'ŸóùþF´-á_Ì”~ç­I}L#Ž5=9'úþ_•>ÞöV“hEEçÃÿ­ùTîÎÜ@ïî(Œ4#…(ÎÐÿ…`Ïq%ÓºÌp9öïSF±Ãy½ùõÿ?O 1˜z“Ïùö?­E Ó=Î÷Á÷äõë Ž\*Œàñ“ùŸÀU«{ùI #ùS®5O,XX¬Àü«€Gôÿ>Õr(å#¦O_ËüþUm¥ò!QÔóëRÛNdlƒòŽO=ÏÞÖ'æçª wÑN:qþÏjI’9P—ÆsÖ¢DB F0¤g"´UWû2HÐŽƒ#¯ÇMû†ÊŽIÆ~¸ÿçD,s» Æ>ãÿ­úúÒ^;1NÿëŸñ¢2dÜpsÔç?J§}oö²©Ž2j€Aj…Éÿ>õæ¤fˆ)ÎqÓüÿž*k1Í„œç$g©çúÿ:êõtK›¹E‡\~5Ï»%‰AíþOëK Æ2X1<ñ“×üÿ_zÕ[ôXÖ6<‘ßüý?ztvßÎ0GùüêÕ›†œ‰23ž=kivÇœF?/óÏéHt”¡Ïëþx®sÈ&f$¯nßýoΤr¨€>Ÿ þ•4m»*£nIÉÎ?Ï_óŠ€ì†EÚóþ*ÓŠE2nnøäŸóõ«ÒN±¦Ñ›9oJŒämþ]êTpÀÚ?—ÿ[üŠ|“—Æ3þϧ֩5ÊJvóϧ_þ±ý}8Ô–V%¿ôÿëU{©‚DX°#žGùö¬§– C1õçÿ­üªbÊ!ÚÇ$ŸÂ¡¶¼Èý‡ùþUrÒð¤Ø@¬‡‚ϽTñ ˆŒ,ñ¿Î=ÿÎ?ȬEÃdŽ™þµS†Wó ‘ÆqŒóØ~µvQ*Øy©+ <~ýa\ýåó4ŠìÝ89éþxªí:¼„KgúÔ© ² £æÅIæ´R Œ þ~‚º›i–ïCtCƒéþx®xH%ó[œéëÿÖü꩹aq·¯ÍßñÿëV“à²ã €yÿ?篥iYÃ4Ž#,=qÓüÿh…xä%¢*Úÿ?ZšK—P8ü}?Ï4ŹHV>þyþµ;0Krwntë×ÿ¯UÚÎ9¸%ORj §q;ž•Nl™”Ú0 úŸÏÒ¯EÏ"n'oãÛÿ×WÚ!!U €_^*ôj¢=«É“ëֳộgq¼cßñÿÖ‹†K†$džÿÎëU>Î``ÌÜþýzÐ{¨¡±ÚÄsŒY±ÝïLù=?ÏãùUa2K)Br}‡ùõÿœú¿*¾Ï´d£ŸlV¾™­y1®†ôÇ?©þ†¯5¾zÅ¢sgŸóøR[è6¸“í ©ëÖ§tˆ>i$2žÂªÅ­i²>Ȭ²¹9fÿ>æ­4ºeòídßÞÇNOøŸòi³¤´…¦B$CÎ ¤¶c ÜHþ|ð­HÀ ]Çh®eÖê Ygr8ã<žk>Kû?;ØzòOj°·²—YøÇ8>ÿçó­7Si%ËÈÅ8Àÿ?…VÖæW*ðIòàäW?ö’w|ø`?/óƒù}j5»`ûŸ;”ž¿‡øTßnI¡0®‘Á'“ôý+6úå´˜‚«çw=Ï·ç[^Õ¢º k4{ã~™õÿ8ªüz\3·  tôèk6†xvÛÎÞŒ?Ïù=¤RòÊpAçüÿž+Dh–ÑBÒN73cíþ¥cjöÖCObªa8Ås˧3BÉæ‰ÿëÖ¥Í;“dmsæHøßè3Çøþ¿(ÓKﲇŸÐgÿfýjXïäËgŽzsþsúÕý>åŒÁœñ»§§ùÿÚ‡P067mFôü«¥{«ìÈwMÁϧýÏ­fÛ^!Ä¡G'nïóôý}iëqæmX(Ç_A‘þ?¡«’3GÃsŸÇ?çùU8ïÝÀÙqÔþµz ÄãŒà þýΪÌ.T€õü¿úÿ_‚F*öÀÉzóùþ¨eD2œ¡ãŸN?Æ´å³P°ÊsÀ÷©£¸FL:w®kTG R7äàñ×üóúV3Á ]ãæÁ¥¶ ÆTðp÷ÿëÕÈDq¡‘ŸŒôÿ?ç¬MtH|­Î?X3;¬ÌŽr~¿ýaSw!G\v§ Óò¬äŽo<4A€ëžßçŸÒ²u[Ó>¢°ãØqý?È®—N¿‡GXS`œsþz~b³uìË1ºÃBÀdŽÇ"°bÔ¾Ë h#Ó?çÒ®Zx¦A•8ÈßO×üâº]7R}N?*OÞœrIè?È?&¼‘éö¢-¹läƒÇùÿëý+ŒmfE•U¾àNÕµ'ÚvÎïc§ùæ°þÕ"£Aíþ}êÂÌ ä‘ÆAçëZQºd*ðIüªk‹Ã½TœcüÿŸ_ZÕÓ¯$*©»pàí<öÿ?¯­k:‰ãܸ£òÿë“U!‘ˆÁ'$tïÛüþ§hÅ8‘‰ä`~_áúÓäSÃðÿë~bŸ1…`rp?Q$‘ěϟÓÿ­úV¬Q;Æ=ãðÿëVÕ¬Tcw#Üõ¿JѲÔZܘäË'~?Ï¡ÿ9­Ô,›s2€G^+–¸¹·…sŒ g×üæª^J±äŽIô#üÿCT-¡ó\ÊÄ£\/çWtýÄÀœ•¯ª,‘áF=ÿ*̸gV(¹gÝ.$ Ãà??ëùSewˆþQ»·ùüj œÛ#( duÏBOÿ_ôö¬+›Ü“ód|Ý»ŸÎ©Nt•và‘œøŸÀÓ®ä–áC1Çñÿ>¾Õ%„ÂÜfÃ1ãßžϽF×qM*»üÀ}ÿÏþÌk>ïRóg Úƒuÿ?ÔûÖUㆹi6ŒŽ>§ð5"Ì­¦?]ã®Ï·óõ5ˆ¬É (ÇïpóþMY¼ºU‰TýìÇ?Ïò?­fá™qŽüÿŸÎ¦¶ ó‹dÿþ½hjšD6PFé:¸dÉöÿ9¬É.šD(¹*;;óùÕ9\œƒŒ ÝOÅO0yç¯n¿ýoËéWô±o%È[§+Ÿ˜Çüþ~Õ=ÛÇ Ë l´Xãw¯ùïRZ܃'*^=ÏãùèŹ\8nü~‡ü+¯ÞëMNI*9ÇLŸæ)¶Ó­¿‰^Ÿçñ媠ƒœ~çò«(V}ìv­¨/eŒFI8ÏL}?ÏùãZÜA|2­†¦zÿœ~µcìÒÕ©ê=?Èÿ8¥wû4,Bå°~µ˜d’Wg)€=ItðµzÚæÜÌY½AüÿÃüŠÊ½r·lTà/òåPÅ#¶ž8éþ~•¶Û€:á¿ÀJŽáüÉG#¡Ï4ª>B‹Œàrzóþ]äd”Ø ã?—ÿ^ž×ÍÊ?Ïôüª¢q!>ŸçüööápÀô çòéþ*NU€n8鞟wüþ,O±—ôíS¬¸ Ç$ãŒÿ?ÓüñV¡—2ÀuùÅmZ@ÎGðþ¿éè1Òé3Ëd„L¥†ß®Ï?ŸÒµ?±æÔ™§´ŒªçŸ~¿çñ¤›M¹³Sç!Êç§óÍ\°·ðd·ePoóéüëªM"ÖX÷LR>@^„ÿœœ šÚÛJ‹9£ëZQÞéä*6Aë×§ÿ\P˦IÆs‘Æ?ÏÒ¢—O·™vÁ*Ž?Ïù÷®6Y›ÊÄg€1ž¸éþ󬩊mÌ2sÔž¿çF9.g)‘×üýçùË}b’Z±R€Žç¿ÿ­\Ä–r³»ŽqïÖªºMÈFõ?ýΪjrºìLäÓñÿëV` r@ãßþ¯óÞhÜDÁ”r1øð?Ãõ¨npYs“’O'üñùÒK÷‘· ž:žÿçðªŠÈ$óíëþ@ý*°ÒqŒcôÿ ¼-.’ÈÞyg8þ_§çXóIæÉÁÉ$ôïéüÅ>ÞèªáyVc¾sÿÅΤ‚H…ß﹌ž@î9ÿ?zF‡máU%º}¼r¿ùçó®7Æ`Ú‘þÌ#Çôþ§üšç¢-­ÜàÿŸóúœXGʨ'¶ üúÿ絈ÜïB§#ŸOñý=Î4­.djç£Óîÿõÿ/®;³‹cs8܈ üÝ ãÿ¯þsV®|A|¬±#ìPÀá8§ùÿõÖ¥‹+p³Û$§3§®/Š'¹uÚˆ±ñòÅj¾¬uUF'…M`B]ÀŒzuæ–ô ù—æ$ŽŸçÞ’Ê%x̯¿€¹ÆjêìBs]£ÍsB# ycn;ý?ÇôªWȬW(=ä?ÏáYâ9IÏ—œð;úÿŸÏÖ¥¼u…R1x'òÏøVÍÈ€€*s’T ³IÇn9üÿŸç‡ª1¸;wqÇ_óþ}é6ÖPSû¿¯¯ò¤Òãù óø~pJì¹^AROåÿìÿžíYsFÇ¿ùö¨nN™'pëþ}æj!9TU8Úqéÿêþ~õ¢uÉÛM62¡ÀçŸçôÿ<Ö PYð–<ÿŸÇüôP0zûœýyþ´­œúžãüýOçW¾ÚòDp0>Ÿç©ÿ=``òƒ¼‚H$c¸ÿëþcñ“ó¤óù·ùëjÞÎiT¤ 8þêMj[X"F¯1ÆìaG^ƒüOé[1‹(ºÚî ç¯ÓüOùÎ4ã½kØV0Dq(û£·ù$Õ¸Ö3'b$þ?çñ÷¥bŽŒ¸ë‘Ç¥_° nJNF0{šÖÓžb[…úñþz~•´Ä 䎀{Õ¨Z&A¼coóþzÍ ñ³m…rp?ÏùçóŠþâUˆ S’??óŸ×Ú±â`çv Èïü¿ZȾ/“œ ·¥ã{pBŒŒþµbêý¢îL=1ÛóúV4êèv̧5]cûH*Œt·?ýzÆ¿YŒ€8ÏÍ×òÿÎØp##<ÿŸz±}¹éÓžžŸç𪒱 @õãüþ?çYÉ$`tÇNý?Ïãìi‹¨É÷ÿ9 @ Ú@ÈÏùüÇùÍDü /CŸóìçLÇÍŽÙÿ?Κ~ï¡ê߯ÿ^‚Íœ uïô?ý×Òœ¬wsï×üÿž}dÜOÊN8ä¨ÿëÓc'^Iÿ?çéZÜ·—´¹^:óïü¿ Våš@wç¦Ϩ­è äôÿ>ßç5z%û<9\c×ÿ­VíŸûÜ2}xÿ?¥I ظ(ûÿœ¶$”OÊá}ë¢Ó£1@ïÓüþU½³`6ã’Ï×ôüdu‹k¶õgãå€Ïó¬»[§‚ኂHÏóþ_εeºÄ!q‚Oñüë'N€1è1þzþ´û»ušá [-†Çó¨õ¶Ó­¶Æå¤+É?çé\³^3Ìzòxÿ?çùUK™âw;»g'üÿžŸ†[JVS°cëþ/ÊÁwpäãžOùü/n¶håà.:ŸzcÙÉ|ÿ 8<ÿŸ¯éYs.dè;ôü?úÿ¥@Ä0Q´gv$ˆ¨Y]¾‡ùóþqb+4’ÐËæíu ßÿWò¬÷O—˜þCüùëߘc“ÛüúÓÓãÇÊ: tÁÿëÊ›ŽAçnœþ_ÓÚ•²ªF2;tì?Çòü¥O™sÐñØt?ÔžŽŒå” õ#O˨ÿ#‰op9ÆÞƒŽ8ÿúzV•„*eŒãóŒŸðô­hÐ…û¼ôöãüþ^• žnÌœ°cÐÿž:Ñ·‰|ŸÈbÜ€9àóùV…½²", sëþµ ’ÖfÁH_Ë¿ø ÒI’2+Ï8íóúÔÓßI$;Wq'Œv5Aåue8ÈÈüûÓâ¹!‡ÈyÏùÿ?þ®ŠÞÌÉdZáÖŽë\ä9BŇ8ãüû~u«g2Ëqd ŒŸÃÿ­ù×1:µÌî猎?ÏOóÖ“Øá‰ã=ûž?Ï\+õ 0ÙŒûÿŸ¥E,>TcŸœŒÿžØý?,‡œ™3†9<ŠÑÒçA8Ý…·¿ùÊŸ«[%/!Ê6ãéþJÀ˜‚͵$ƒíU »2î sÛÛŸþ¸ýi˜Csþsùÿ:ƒ,c‚0—õý*³’AÏõÿõÿ:ŒN@êxÏù÷„ò¼qŽ¿ˆÿ×óTRYxÈíÔñþ?¨üfŠÒi"2ßÞ8úõÿJM„7lgüþ¥=¶q’«–ðHãpNƒ,qîkWL´vœ £’:ú“[³é©W…ÒFÉ'Žßçñ;ÄÖÖëæ u_ÿUY€GubÈØÿ8ý+l´¤ôüÅ>#·ð8þŸçó«vòɽT± Œóþz{Ö€gL`Žçñü«sM3¤%ä-øž¿ç?εm¦ðȯÓnNŸòÿ9¥°Ù 6ÅÉþÏ5i¹ó³9Ï=Ï_×óØ²¿Û[„2:Ÿlþu½k¨2am¡Eœ’9?áßó«Ò¤ –T.ê82yþ¿Î±uëŸ0¢ (ÀP£€9ýjÆ,Íw|à‡éþòü£ûDŠìäóþúÚ§JŠe’mÐ>AÉ븴ñ¥ŽWD'­sZlÑ(}ÂXÈáÔg÷ÿ=ª”Á݆JóÓ=ðÏài÷VƒNˆåÿxùü¹ÿëVÜ/p (­e´2@s€ÍÇùÿ=+CGµ’KÈvàr=?Ïù÷ÍÔãf¿}ÊOLþCü*¼ð‘+`’? ¯»,,îÓÇ?_óùÕ¶_0²ò¥‡_óþri÷vb;e•F@êAè~¿çùV4ƒkpÇáŒÿ‡éPÈIŽœÿ,ÿ‡ó¥T%FN3þ¥/‘òäýàGOÃü?Z’2‰L’Üòþ¿çù4)8>ÃúŸÆ§ð¥NF~Ÿçÿ¯SÀ›Èã™ÿâÎj¶«Ý[,oº9â;¿ÏùÇå‘m$¥[îì+wîsóÚ«Þ¼¢1¸>¿äš‡bžI™ˆmy$cüõÿ8ªZ¾>Ôýî;V,¬Tàç©öÿõþžÕtJeÓ•\“Ç^ÏùÅf1Ur§@ôÏùÇùâ¤ÚVÅ€Aáþé\ô±0$œñoO𭪣m;sÐ÷Ãü÷…˜aB.p>¹?çç4¡‹)*W¨=:ñÿÖ6@ `9üiøùN88Ç?çüþj :®ÜäõüÿÏçèj{hËH…==¹ÿ?—Öº›%ûE°ÌxÛžý¿úÕ½md¦ÇµIèO>•.žÑÙÄNòÙ¥jY]³?Ë!×ðÿë~µmu9³±~bОŸçñ¨¬÷ÍtYÏrIéþÏzÖòK˜9á±þÏãMµŒ‰Àa…ò>¿ýjÞ[idÚ…QŠ|–åm¶¿¡É?‡øU†?4 p8ý­qéz±_©FÎH=zóþy®»U/=œ ÜÏjÁº²‚hCô!y>ÿÏÐÖnù¡“ýÎàßóôþ~õ»eyk}fÖÚ‚bl½Gùÿ?rÚ¶”ö$Íf|Ëby#·?ýåPØÙ-Õʳ¯î¸f8à÷ÿ?ZMKV>bÛÚ‘(ÇÏ©ÿ=ýëäy±ÍÐŒŸÀõÿJ Ð.ó’:žAÿ>õzÎ¥…ÓqÝ· cÓ?ýzɺ´!ðrNqÓŸþ½h¨ö@@gë\ÍØùˆT^qþ}ä+±Ðí„¶Ž¹®Gùöý\‘ l˜± ­IµUÛÉÿ/þ¿ëZ6¶jÀÈô¥V;7‘øß‘éÇù&¤ÒîcX<Ȥ 2‘“Ï_ëþzØñU²é–ˆ-bŽN[hï^~-Ù®^êsŽúôÉ ™Ý‚r\õíþVX¼¿t`“ÁüúÿŸ½XµóÕÕqÏùÿ=*=aíyE`XòHíÏùü©4l¹pzÏ?Oþ¿ä+>î(ÖW|Þ¤ŸÒ³$óÆÌ áÿ>ÿÊIv¥$8!rOçRˆ³GñóÿÖ5b måP¿3gŒdÿžk6H|ÉJª}ÏãúŠ¿L’ºNïñÿëÿœÖ³Z4›€Æ3´wëþí|9i v®íž?:šáq1ׯaþqù ŽdyžÇ°äVå•”âU Aù³øVÕÌÑÙÛ§’¨e#—ÛÔñYlžg… î¹ü?Ͻ+oœûŽ[ðíþžÊclûî8=zÿú¿:ÔòÃG¾¥N?/þµRˆ:ÉóqýÐ !ùÕ‡ñ¿  ~Ÿýjåí]Pí à§ùü+£Ñ{ævœÏ¥a¢Æ.fGr=ÎqÈÿ?þº²ÆùVÚOn}øÕ]V%—NØ€qžŸ‰¨t Cö†1mƒ+ïþxÿ&µdÆ¡Äwi2WŸóí\TÖEò¥O÷ÿ8ç—¸îŽ8Çlþ½G2ŸssŽHü³üÏçH­q0Rœ*õ>¼óøÕ­Z6ŸOI¢AFï^ÕGGžßÎE#pê;qÿÙ~”ßiëö•hÕ8Î1Ž¿þ±úV=½ºµÀS‘ÏQþÎáuôõWZuÓü*“Y4,ˆdÃóê*ÅœM BNCg€:ÿž:Ö¹ÒÐYýª5Ã7Þçñý+ ®%SœÜþ}¿_¥tVÀ›D?x…Çùü«¤Ó£ÓX¶qɪ&ä<ØÃ3d€¯â#øîY¬vð«Î¦I[„ñþúõ¶“9‰@Â!<ÜÈ¥¸SæÇ7(ãÿ>Ÿ­Hö¶ÊƒHê*¥q1VÄœ û ‹å¦cÁç{ÿõ\Žá *qLöëŽõ}¼›Ü gŸóõ«vÆ#aÏæ¹DÒ`m‚õ:pŸóšÛÓln-.UÖxž68#<öÿ?ç…â‹s§ê *±òæ©4‹Ynäû˜@F[¿ˆ®fMãœ5¥ÌR ü£8?çÐúTΘ‚[¸[{ /¶?ýŸÓéTæ;Ý(Ç_Ëÿ×ùS­•eppÜà~»¼©¥º¿!«Yçh9 ëþ}?JßÓ¬V{p*¸=:÷ÿë×Kqk¾–‘G—sÎÜýƳm”Å c«s†«1Ü#Üàäêxë[¶`É Éãüþ•¡w—ÀÀ»“þ¤¶Ò¨9öëþ~¿¯ãRîä˜a³ÉéøŸÆ†¶u@Å 8ÎOZtEÃcåê*Ŭ»fdÁÁÎkpsGÞǸeS)þ÷ãëCí2嘀søqþ©­ià°ñ”pÉp±Î3õ§êÐÍ¥h-He”u5ÃG³!ÁàžO~®Ajá)Ú6úûÿõ«O…ä†H7ncǧùãüšå^ m®^ÁJ“õÿ"§@€á˜î8Á?çßô«BÝgÜÕÙrUHöïþ}kDNݠ㿹ÿõþµNæÆHq,™aGøÿ?‰ª'Ê¡€'°ÿ?ç­k½‰¶ÒLŒrÒ(Ú½qÇùÿ&¹‰ch˜¸H$äqïý?_~6´ÝVËcez7äBÃõª·ºLÖ3LÉnzÏoò³f°§ÞA“œ`}º§½Þ›²Õ¾e\aÓÒ¹ÁgsmwåÍR¯cþ­oé»IðWÐýOùü}«sPE€Nx_¯ùïYLË3¹°3ŸÓÿ¯Wlmc{€Û ½ÏãùŠémcŽÕÁ(=1øÑzƒÎ »Ïñ ðẟñ¨>ÊCòp¤ðÏãùU©mËÂ8üÿúÿ¥fMi&ü/BFqôÿõ~U•„‰0R¬NNqÈçüõ­ˆ¶@Áv‚??óý^±¹i®N`@ÿ?çš¼Ë6HÏãV¼´æ~IÆS’s»·on?ýT¬˜öÓ3¸#œŸcV¢¨>Æ•$BÜ0ÇùÿæÒ_=H‘H^¿_óÍgß°XÎÓ€ Çùüÿ?Ë>й8=;þþºëo­ŸWðàKcûÀ9ö®bÖ/°’¦œŒýÏáWÄq\BÄ@õ÷57"ÞFàOùýÎ i\ºO¢¼ª>èéïþqþs\ƒ_É+ªéNŽY&l+*Œþ?çüEZíPÀ³/nùäˆÿ=a½ÒcÔÑg¶'$=ÈÇéTí4{›©Ò ¤1ªŽX§ùüªMZæÖŽÎÝw*€ _óš‚ te%FO9ý(]!§º“¸dg·5fÏL[[ Ë• ׯZ¯{dEñvLã8ôÿ?wüâ­YĬ¦>€ÖŽ µo0ž¼ŸcùÔôò£s(^çSh××ϱ˜'$zuÿ?k^Ø&áq ‚9-´ÿŸòjŒÊ² ±òôÏùõÿ8­.Ù!˜ ÄžOó×üóVàa´„gŽ?ÏãP4ÆYwèxïÓÿ¯WUØù¸Ïøõª}½NýýoçR#dzrŒdŽ}j¿›.ì»qÏùÿ?þ°O9m„°ë\üWh,w`p; T¶[„œ3xXªrªœ€OsJÔ.¬§ÁÊfi­?ÚE5’^F¿¨÷¬<Ý„¡Â‘Æn*&PΩOÍùãü*ÖÒ¦[¸ZÕ𡇮ÏSùVUÞ‰öIÙi#k•zpb>^}}xÿõÒI4¶ò„lã'|ÿŸÒ¬Ç¼8‘F?QZv7ò\Ê`¸äqÍsšÆ‚öwÅÕI…¾î?ÏùþrÛZE†oÁ}ÎOæ*IäG)ŽœûžGõ4¶û 2ÀƒƒøžÏ­K«@¬QÔœsÇ¿ùÏëPZÙJúŸ¯ÿ®¶Œf(¾a“ž}?ÏùïTf@JÜ`û Ô>lƒ± ·–úV®‘¨N¤,Ê#‘ŠÖk :ä ä8çf;{g¢‚LäÖf©,¶qˆü¼©ÝcTmev&O½Ïùþ•}‰Xd×ü?Z³ö¹9lŽçüÿ“Oû ñ)#æ# KÍœLUíäç=ù÷©z0>S–ãœ}?úõÏ]æ+‚Œƒ Öÿ?çš[kÓ„ËIÈéóÇùÍi´ÄÀ¢‚Äu=qš­y>ÈüÄp?Z–„kš D[÷ƒ#¯OJåYín¬»•`^MhÚÂe—,PÙ51†8%ÌM†Á<ŸaþEkÛ_Á"}žô(þëõõº[|è¿»9ŽƒüÿO¥aMR?$€Fùöÿ=o@"0rHíþ~”È!#/Áç¯ùü+KSI&ÑÙ“Õkˆ†|ÎC±$kDJVØ6ätçëù³ku—‚xÿ>õ§¨Xôðð©2(<£üóúW= ÞBØš7SÇ8éÏÿ®º=رÇ\ž¼úÿ*’ê2¨¹àçYbí+)÷üÿúõ"A$+¸gŒ÷ÿ?çéZ+<‰i‡ûì¼ûRØÊbœçq#¿JÛ-í¹Ž@7b±Ž=›0ncíú€­M.ÕTŠ€I⤗P"skœu54w{È}2sV2Ïjiu¥q«²þŒBIƒïþGéQ}”G Y=ëOŽ@O–#ÝËüŸþµ:HU*9>˜ÿëÕ)[Ibì œŒÿOóÒ´5¨!’Õu‰LƒãÝCŒ2a²:Óîàt·уŸóþ{ÔZtòÇ‘r¹ˆME¨øzÒàË3åàå€úÿúëŸó’)Aƒ9ÿ?ŸçZ^©8tæµ’i<œÃ“è=i°ÞNù[¤FB0ùü??z˜Xªqhr¬s°z“L†àIœ®Çç#çÿ­BÄÒHÄŒŽ?óý 2HÒ)rÝrNùöÔèPl^ƒóþ•$jè½6àŒã·ϯåO7Fßk.àÿùú~•©°q4\`sž¿ç5¡o0s}JÁ)¿d9“*6\¿°‘3|n"ÃXÊÏÄ’L*¡þ®™`iïLÜåì‚IëXÿ¸aÎŒçšÓ)“Ä4‚÷D&2îfÄÄ{gÊ“˜Nà¯U¬¥öLÚ¼xçfnZ±ÑÎx‡rŠwÀ”%öäHŠ1°¸¹qf:Ÿs~r"‘)%>FÀè:«>‘<“Ší%0Éñd>wsëÌ™à\LŠŽ’C9×bŠ¿ˆk~Ó{ÏÍl÷½¾½qÚ9£ç?B¦—Ékd:…Ÿ çNÌÓ|L9;ƒ29LfO®€I:c>-Ø-01*'üi8+°œNåµèŸÉ&N1bbÑ3±3öSã™8Ô'WÀÏŒg#SOq'Lö0x& íÎþ%½ÄĸzL3·#¦S™¿òåMoœc©É#e)qžééçñÄ–L;yvȵ ê¸pÀdRSD3bJSšƒò|"ÜΘòSLÔî8´»™E¦±/'á™’_K¸C»ÛS"ì1¶;úéÆMÉEc}ôÓÔåXמ‰1è§éŽêô- ³áþ<¾‚ú¤42M3dbbLL#Î'ñÕ™;‡:NýÝÌaç®{…LÔçÐß±(ôwĤҾ™dÆ@‘ÅšO!&Í>²—#o«ä#°"² ˆ‰ÏUÒ3S¦1ý$@?ÎtSýòoÚK™¥ˆ‘ƒýĦ ,¨üg=“NwÃ$Xx¯/è|xŸ£vpÐà~ß‚r^hw¯ßš¾™œÈ<Ó: ¿±ö¢Ž™ÙF¦bBïŒ +“SkoWÈ…_U¼#¦˜R—óuoç‹LY´#&˾XÏ”,üºC&zlkKž.ü³þ‰ˆÉø?¾Eq¿ƒƒò6 Vå6L¼_eYÞ†¡ž‹VL¹ØÓ oÏåþ‹UÒ¯LÏ´¶Ý-Ê®™Öë§EÙÓë;™À,ÑIÍ”¬¿ªk¦¯I][RRóU&‰ d²k˜^÷Àbaì+Lþ™É®|Ťg¦i¸yý ¡o®¬•æk˜ÂµÝuÏ“¯4‰¡²zK/ÁàU LéòWxÛ]·S1y³ß3åh(„瘱ºÔˆ)YϤ»›'«˜®\ÍdÑ j0•e=Ó8\'»f j¼É4-™²6LŒµPpÛ1ÙšéõSºÌôUõiª\ÓÀÔY%/™ /™ Ä,鯒)ÉÊê‹LyÒèIKÀu·½0é§%“Ž@§ãòpõ‘¸ZdÒµAµŽo8Þ¦ߊé%=-bRpfœ×Lg|œ-0á0,EåO¶ðžuâ²´c¦¼KM©¹¸Át¾Ê”âÔ jYzª0ÎMÇÝ3Q…šcÅLþê‚WÓáÀ$s¨^©M4 öˆ‰¥,úΙ,2å–æ(ð)ƶbÒ§¬²Â”&ÎÂ$Pÿ¨×Á2…BÒ}1Åö#†ðĦfJ€)õÃ^ä§Îf&ÜlaÅ„‚BîœÉ0i#K‘©&´»K¦¬ÉÄó“¨96|›>g 2u\Ç5KrZ›B‘Á †˜|“שZbb—¢¦"ž¹1(6Æ¢,™9sÙ±W¼€oO¦æ[ >šÂ×zjÞ`Š .€÷ˆ)Çy¢8cg.:fÒø(Ld’iæ™2,»ÀdªTͤ9(V`*„ŠLŒ:Üœw6ç˜àû2#¬T옘®€*ˆ‘Ðȱª˜ +²™xÆÍÏÓ™ì– qeRø«ÙËW¨”£ªCûÓ$~.ôS”ŸàБ˜D¹ 0 ûSØ€æ,é–)÷LNhöòtZA‹“´Ò3,?:A&†•š&-ž|†åôQ/LÎÁ³{™DdðºÐÏ{&Í=“c' CÅŸ"Ó>e›L@U™®íL{¦Ã—ɘTti]"Ô³¸Á4E¦$0¡/ž€ŠíÜG;CÝ"Óè¥tÁ7˜üd˜g °C!¦11mg»›.óL®bº|‰MZáƒh0‰Š ê8^½®ƒ sWW®±ëaÜBLôì.^rbJšL9o2áú8ž;°ÔÝ4KsSÚ1Ó•×È“(í'bªË ô¾ÔÑ>ªÒy–XÁˆ©c=˜r©ÎðïU8íꙬ\('Ô™x‹æ¹gúsFd 2uV¡LgR16ÂÙrÊÉ÷rÈTÄÓ8?¤ \ö cotz øTš;²[&´ÃÏþ,ƒ~L[–dòSÄUL3Ôõ`ÔÁØ ¾üH¡½ÐÝÀ¥Á½ï˜+pù5¹YaÂÑU!4•ˆrŠLúXÐòB¦®Z^`;\¿ôLPFò[—ÇDãgí‹ÈëLñ ã™ÎØy„ÓvÐWcIgš¼ÁtDL8^HüÈSVWEªAÀ09'&{Î\„ã` ê Ÿ[Ú™6(ª72c6R˜nÒ\k‰üÍþ¼F«P.b_ˆï¡ ]“º®Vd‹U‚÷t| e‹åØÕ,lk%N/òaLËòâ§÷©)?õ‹­oþo×~1Eò®y囯ë?Hÿ@ÿKó£¿úƒôüwºEß,éÃê¸êƒéínAþùÇưÒZ:dZ‘"-þè«ÿð?çÿúÛ7Û}n'«©ÛÉ#S;ydj'ûÊä ÊýdR‚ºòëÙ‰J{!¿ž=d;ñBi/äwh†¦Xò‹6nò~nÒW‰‘_òÙ’ÏÓ@Lö†Ÿ2¡¸Šgë|vΔæ–Yœ)Y¬¢½`‚!açÈÄÇcŦ;ñIiÁdÏOGb2™Mõ|O˜æùñ…ɉ˜ÍÌ|ðVX3%#9sȤ÷†é2%3­Îì Sq\ “Н­Yõ7‚ÉþRqœ#SLvºL6µŸ¦xvmìßÛ¦Ä@}&y-i'~Æ­˜ŠäP~†Lù>0åRk,§Cñ™ÓàV'2ñ+svLìÙalÁTDå,ºÊ g™:sOÝŠ)L*£ý`òìž)&ägWàÁ±S¾Ý5“¨™"dJ+&ôi£×N¿æ«LVRɼõ°_ “M4º+(¼;4}OL>‚&É1¸çí’À„ñ‹èºÓžçU<9ø“7fŠv1¡ß&'¦]öz5oèd‹~ê²É„nr¦˜nâ™X`²Ò3©îøÚ1y¨[¨Ô ˜ Œ/(™×ivºk¦”n$QOSÎyÅTn–\ï–Éë3Â7&‘óI`JÉ&˜«c¦Sb+§¢\ÔL¹à¹ì0ª%½Ð—UåLÁPÅÊšÉHž‹3ùy^œã„™†aIÆ“„ÉG(Ž¡û`¬cÚ5˜R`z¶k]°Â©“r¼ä=»{¦Ø3ÅðìÒ&S†ïˆ…I„Ý2Q´j2ØP\ìtý ˜Æ &K:sêâ’ÉÄ`kÆ»µÉ+&n9ú dš%“Èi<“áØÛ‰ ™ò’ -ôÌÍv; U2½õL™Ì@›ÏlÍ$a,<Ûí„OYÇÇ\qŠQT Í§& öco@ÜìT F¨˜a "C=`Ñ“ž" ý¤ÝÚé”2 ôköLY*Åàéô­é0r»<4ËD)`Ĥ™‰)l›fð4Õ«Ý2iL˜(nÚš&-¸‰òØÏdàÀkÖ®™àÁ@·a[8Ä„îUU9ã꼫z¶c& ö‘#èÎïÜõb†%Ì6aw\Ç]V9Šõ›w®­øùÌòÁì “náO]|½[&õ>ß7”5n¿˜–%êj¬õ¿3V?»'ìŸ>…øÿ‹ãò7ŽÿËGNøä—¾0?ùw6ÜS´Üùé­ü}o~âœíåa>È?ü[Ã0m3QðŸò-o/¾Z÷5û꫽oòÈÔN™ÚÉ#S;ÙW&Ì̾œ)sH©˜÷¯…Ö¨Ó}eJ‡F©d_™²Ô×ñoÝ{÷îþô.Ä”˜ùóó‰J´ì7cv;A¦$¸ãÇNˆÁ¿¡‰<ÓTLøoh"Ït(ÇJë³ÃgBðÃÁ=k½Ïáœèsv)'â3Ùy†Îc‰‰žÙóËäZüžì<“é‡1IñÚSž\ó¼xVý0˜ÄÄ8Kp3\bâÈt?AìG»³ž ËIs½Ï3½¦rJ\Á‡÷²ñ-ã‰gú2ù,Ù]`ÒÙdŽLò3ùåžè'ã¦ãéÜœòÙÞèLí¦ÔßÐÛív1ú.¦¹B» Ý£>·Þb–½J÷ÈV™»[ûÝüàS@¦;] ß û:æÜ7ydj'Líä‘©<2µ“½eú:>W0Ij0-\f"Ðô¹·iÐ?ÇqOY™<%¬^dÊ™Ú:†ÌJšžL¡t{J7T1%>ˆ¬bZ¬¿ðvœKÓ\oúI7T2©%¦¥4þ똬0ý((?FˆÑÙØ6˜˜Yìƒ Ï+&|ªYŠL=)òÀ”ã&:²nw•…’dZU20AM·¼'E˜ m5á½.“‰°¢Ü# ™"dêË L¸‹Yd"ž—L¸‘LB¯QKÄÀ”÷åÀ홞 I˜È¾‹%o¯™ŠÀÔ±RøÁþÅÈ$+&¨äÌE¥Û6"6˜80} ‰IÓˆUTÅ$]vÊ0ÑQ8ƒáñÁ2VÔõÍäÈMc»`¸½F&U¦WÁúìç1ÇÚ* Êhwž™|e5\=xB9T;¢ ílJ×QUê•Ix¦ÊÁÀ„CvQ«óÛ¯÷S´Ð;Sê™*žE¯‡y€Ý`’EßL34?~d)€©x&Ü8¤òÁëb¿—¶gyßLdbgM£AkË3 Ã0’)™ð·qƒÓ7{…U; 5ÇžéÆ•ëè˜8óõnì*Þ3S[mD.4obJšL‡¬LÞã™è|Ÿ}K`Òçnظ£µÝY>JÚ2mº*0]Í:ZŸGÒºIíçá‚mÉ÷ßÝ̺b/yv™3x…ø|ýâHÅÔÑøÌYÎ#ÝBMåòpý`ÉtÓ“rö0µY•µÉçw3uÕ»(‘ŸJ>™¶!›äóõ©BK¦ÛŽ˜4+Nåd2iQ=Mz“éŽÉ²ËÓ˜Z¨í>—kïJº˜LWS¸ì4Éy+¦é]L)0uæ¯gFIÆ'm\£Æw2Í;d=Îø¤Ëi|“M¦ÀÔÑÓ¤8<'­˜ø]L"¾™vÅÄÝá ´»QÆ…¸ƒ)ÛW_tWN'Ðî^ß_ÇsySc}!»a£“„·ÑO™6é'—ɳ˜&ïÃ%³££S>ßÏdâÏù¦¾…œe»Ú”S±ÑS_µèï ‹7÷w$]1ivúŒEWê~»€˜6Ù*þŠŽ˜ K9›N[ØOÄ$ïbêj³2mÀ´Ó\¹÷Ié 9Ä^i›¤ô…4¸mIˆ‰mäÐ(• ¹ÏtÆôðì±È„Ž»ßt–ìåáÖ!ÍcW]5¼‡6hŒb7ºÓ“íÖ7îáÙu(ž“^uÃ4ë ² çUbêx:`ºE¦¬&¢¥,sôôyxd0ÍÈW§è€I£'lü`“•âC×ÙRüÁ3Èž Ê©‹½‘)¿w“{oL¯=Sz™´¼‡éþÕ4`úŠ˜¬ôŸxSâ"•ÜÃtwÕW®´é(„F®,Om“¯®ÓbÆ^4‹L!áALðw!SrçEjAWP¬meç÷Ž›TLðe*y¿–i›ªoq«´uhÕ"“F’pÀ[ÅM¦,5k™¶Q[ R60éšiQ§ÒŽqõ‚û*¦ÈGÞ#Sžõ‡¶q3Ήi¥ëI×ÅhÙÓÇËLÕ@ >‚ÆÌôVL˜Ò;˜þ½ Ѳ¶ŒkÊp+ûgèÀß|vy“‰7¦¶qU-x±†‰\=¼††67ž18ñbåÈÒ8¼Z` ÿ쌷÷ËoÔ€¶qÁ\Ïd¶ê,¼*„ù48†{¦12ë“•ZÔå”E^‡ ·øvn¡ñ:&lä&UáUŽ‘©5má–¥x HÓK0Éßy:´Ï}{¥IÉ­Ö£MLÖG_—L¶Á4ǃF&½ÈT9ñ #Ñ´µÚ­Êi-“W<,¼Ê¹ŽÊZ¬ñ¸‰c8ú½ÉÄ+&¨NºbÚÊõ9+Ä:¦¸oÇЃqŒojwдÞááÖ¿ÚÌÄß5 c·ÛU5»\äÒ((MF> ´²Ù1úÆ¿ZÐOÈD>…ŽÛØ&_e)2m·«ªZË䢓D•‘©Õ4¿M-¶zÕd‚Bµq.lL±Z<¹üŒ%cÐj«øH5B¦¥O *(•˜¢@y„Äà&Žw—´r…)Éc?Ê"ã“ØíâmõH¨•ÈÓ&Ñ`Jà‰á!Åmo˜àù‘‡2Ž‘ þœ‰•fK¦SdZ2%ô…ZU•Tã¾Àp0©ß!¸É_LŠ˜’¨nÉ9É¥ÞŽÉŽ |W§ü®0] õWØSw1Õú 7 ¿ÂçU1 6Š'вc½M'l72¥d‡SïI‘¡5nñ€J»ÑßáöÎø¼I2bJ¯&ϰwÚ–i¥dÇB*z\1¥ôŽÂÁs}ð&¤g¦¢ŠƒP\Pº‚»92¥[ùåÏ61¹e¦„Þ™"I}h–1åhFD¹Ä-M9w·'²íòÜŒöÎ[>ULõ³K0<4™áªJ}X)§ü@€&{¦‰p·W.¾Úr†úiy°Dvá•@I‡Õ §>èà#¡<Ì‘Éy¦K`’È4;+·eZYð£L<Ú¸b¢Â3Üp¨>¬a’žIÓ¸dÚnz2&·<Õî­V<úW±×ViâêC“ £²ž©&nL™»ºÚr̾–É+Ô,0ù=6=wõa)n0 #[ Ó4[é½Z0•ñàAþ˜Hrèwÿ¸d¢Î××'‹8y8,0+¦)ñ‰C¦¹Jç Ÿ¶bR™–ÎQCDÿ"…Âú¦¨®ÃïD+U &_Ÿ¦`ªx¦)0)¶Ý¼ù:&Ÿö@Õ L Ú냯½ ¦‹0lÒ¹‹q†{Á@,½Õ[æ—PF¼8üòasŽâ{<¾fÑÕ% Ö‡¦½*_»1]Ïr0€o·Í¡¢‘i±‡ô$ÚÇ9VLªŠ‡L«ƒ[e:¥Õ)Ê ßºêmó•˜U¦œÂ0åF^1Ué=TÉflƒiŽ9J¦Â3q¿ æöL‹D9‹3ŸŸ…^S^.9ј†tX`·“1®N÷ûNÒ_À±«³r+&+Wf}1u¿£Yxe”i£xðž¥fÒÈ”{гÔL™d¾Í®b²˜rX˜}hvuõžŒYPJ¦j,<,ÉJ9%ƒâ4ê8Û‹‚[¨ã{WNUA Jã¥bÊ÷©²}K¦t`”¢ªFl£L¿y·]üFGLrÍŒôf‰>`ùúC˜ÔL«wùû·•g4þ’à"ÚW¢ëBJ&ÛüeIT4 S#ÐN²ÞˆžULX³º5è¾ú‘þ3ìà—ÿð0ýõß½~mõ›Ÿk¬ße{ÑÙ¹&µ[`Òûѳ,0™}³ 4˜ìL4˜Š}³ 4×Í÷¤Š/0-ùÄ&M¦W¸¤É´/É÷Õcßä‘©<2µ“G¦v²¯L_…—é $µ ÓçÞpÊ“2#&6˜T ÈÖìÒÑ?Ó¡7zk&JnPí³:CÇï†[xº#¦´É4¡DÓ.Âȼ꼳̖™ŠÑYs_d z¢&S„×µÊ0þ&YÙùjþz²À¤q8ÚdbÄ$ûdÊOé[W;í¿ÆZÍ*&ã ¡æOì†)OXš]\$Yñ*á“:v)ŒûíTbþëB6v /¤N¡<û/§S–°£cv’°S6ŠD&If’pË-2}šó"vcl„>ùM¿LöRÚ `A& b‡‘Ä(ÂS82›Ø3ÙØF9+þòýœÜY‚éÍLGGGÇ/N€éYô™F#dŠt”'øìLd˜e ~±gOÙyTbzÊìå‘<8>=:9 Î ÁÝÓÑHˆˆ])æ™43ìþá/ÈtÜ3¦ƒäà8=:Nåäu!'îðp$O§˜„žOµ±gçÇÇ™Ο¿ìõÙbzžüæqz˜Ä×È”1›ÏÌEÍ>³s{–¿º…`æâüôHöÍtΞ§921b‚ç"žÁÝ‘É"S?Ùž]ž~1ùùå¨_&¨µžÉ&œ9ŸÉLˆëyÆ hX<ŸÚ4;“ær¦ƒd"0_…øUhw“œ+¬áÐöôÁÀ”î€)ýï)Õ§F ”“æN¨“tðó 4Á0I·¦K‰E„íþ+©@¦#‰LW&LŸ’±c.<»íâ«·fbw2m:Ý_0.ÅpÅwÞ\¯=Û£´cÒl—k{ÈEw2M½?ÄîœÚ)É"6äóœz_d`Ÿ¾IDAT–Ý-Zaë5J¿†™_æßÝâê'öŸ_’zk Åâb‡‹ æ^ÏTûÓàîy;t¯&•¬e*ªå<ÿj˜òš)Æt»Û%„˜Ö*:ƒôpС¬Àý1ÑÝ«ÝÁÞÐQ×K±s±tµëLK&?Mç•b‘:sÕ\¶Uà!˜ò4ÌTf/™ìN™RœZU©g²IÉt24Ó-K“ ÍìbH&œ2ÕL–LþI¬9 n—ëSŸ‹ %SÆ’x‘)jfËCBé*‰ñ.˜À>*™|£Ïã&NLEeFm“ñ™0RÉä3l[¾ž‰ïŒ ,¤rËJ߉XÑT’À„§ëU}ZS •vÉäS”¹Ä„}pQ™Q}Z •¶÷ú´aàfÒfWpKµûÑdÑ;`J1Ÿh¼ÊÔ¼Œ—)ßUB¹Þúf‚Æ„Æô­{o… “ÌËåTîj ŸbÿLDu*µÇa—hfÍ-‹§ŒÐû¼ƒºãóîvVÙÀ”a7LB;/3¢¥ÍË0'…)s‘ï†I`æKÃ81%ôÆâXóÈYÊ€†µ=Ù¦I¦˜Žë¤_ ¡ÐodJ7GrGL–˜"}z4µx<^‹ÙëR76# ϲ_&EL9<¸ÈsÚüÕâUPË,3Ò“>E&Ù/SJé[¹‘Wæó—ñz¦ÔQ–ëÔÍt=úr’§t²À4…*\®ùâz.sʇýòL¼è5&Î3aíÛ˜Ü"S5ÊŠ‰é5X5ãqÁûÓ#&J6?¦[`ŠšLU–ј¦;‰ Ón÷:U3Å6%&VA¸2Ñl`rÀ$]ÌñÙõn`¡€.LçÄäoçÕ¬SÅTpô®éb§žVL‰gŠï`*¤€úÖ™Šîí\ê3hwa¢)^dŠ“ЂÛ01-zŽLùË0ÑD07Ó•¯ã…PwÙ öûÒœ%öå‘ï„}&ÞE¦B0Ä]ÒúgšaçL¯¤:‘>ó1–VWLS´Ô J‘cæçÉÆoìŠ ;¤öcÒ§Í”3¾ÀĵÌÁfa¨0·ÙÖ嘦žÉ*$&Ÿµ C1Q1Í(  ˜bÏÔç¬]Áün(8Fù c…ôÎX0&€ñz¥gdkÂØT¸,R½3‘{=æJ”ÕY:b24%žÕ·ô|q’Sq¨q}Î$®ócý~«ÌuM‚àKqºUã¹>g«øàø?cÜWZ¿³~å`Ü.4ì¡Lê®X8þÅâõ³µß²[¦9ønï~Á[3Ý)âCžká®ß|ýþý§¿Ëž^e”|¹ŽÿßÙºcü iã?^|çã½cºGþð“.ÆùÕÞúÙï›<2µ“G¦v²¯L«[ÜÙÔï@0LÈ 2…t¨&X¾÷‡2…)¹jmÌ8+™™üË“œ)]dºÅ:gú aùmvøÑ¹´ò‡\¦oÞyÌ70=O7±fOÁPÔ\ÅJÚØÌí1S,1òK9ÓAÂbö †@ež Å'L* vÙ9SqÄãéܰC`ÊbÅ œ~Ö31‘ñA˜Ž$ŸÏnÍʼnø1O•†:þ)0½<8z†0å#`º6&?‘bÂçSLŸÓùÉèNÌv®ïã¥Ä­ÓÄ4ó2A9]$r"núœÖÙÈ4âÖ2Ïôcžé¼dºó>—í721`Òì6?IÄŒEžéÕ'z1xÚè2–dâòcÏ”ïÆ’Ì®×y¦¡ÓS¦”˜öA?áaæÌ«ÚsðÍIʸ©3Ç>>$<ý?=;bRAgö»Òž)róªvÑÐKK¢‹Š)Vû0nq±Ó6*‡y±¸’—qZ•6»ZkúúLЇ ¬Wnç^ë˜fÐÁTAš ß›žfXÖ!ßÞ¦nàAgˆ%qÔÖJ¦|p&r;Ôˆá=.æ{À¤¾øÍŸC7é'ÏKÐk„V;¦–®Ý//¿Þ;¦»äÇ÷éyöôIôH;l=þöü»÷\_ÇH¬É(þëý²~Óýò_U¯L§8ÿÒýÂÓÕ»ýyúñ|¢>úÚ¥îý×>¼¯¾Úû&Líä‘©<2µ“}eºÁTµ¯•7%Ä’Ì7%Bö•IÓÐ$µ„X’G¦{™XŠÑo_+xŠ;O0¼F|,‰Š Óœ%Y2ôŠgÊ"Íô3–àþôC…¸äW#•™ Ú#&>i}1:ž½°á™ò£DL'ZÛä09Hö„éTŠùÄ›~.+ùbh¢PNRÎ_›[Ëãbèu ·Ls`b—C¯! ,0‰LîI»35“j?ê¸I¹„:>·)¦¢Ù&7žé×’ƒt?˜40Μ[ÐNûÂ4w³ÉÕTÍóÑ<íÓÔͰžçÐÛ ¾h^1)´ Ü?mOtÁÌÝèÈ>¿uh=í‹ýTÊþíƒ+ù¾Žƒ÷M™ÚÉ#S;ydj'Líä‘©<2µ“?ULrãGzw>ØÄD )×Jÿ[›˜6‡ûw•ÜÄ´1Äsî››˜6Ž©lÿî›Èôźӛ˜Ìn˜^¯ž¶5ÓRvaÕ¿K)2­)³ÂTj€Lô¾©Ó&&^ô©*7-&wÈ„Žk¶ÌSßÕ÷L†U×ïŽ 2 ]î­£ä“ 5;œ•.lÕÕ“ßÑkuÎʤ¾ªž‡òÙsË´ÞµTî„É@ ÕLY]ɦþ²Àä\ÑëŒÎWL¶bbÄTàK˜ÂV3 ûõ¬˜p÷S1ETVVL<„)¢ý%ýÝ81Q žñLÁ?Ò?»~séÕL¸]oéÌîç¤}”’¦.> JÓ+Óòtû&¨Ì•1L²Œ*ÉRŒ«ÖAŸªX½3ÙšI®2Qô¦x¦œ˜,íƒÙⓊ ›fßɰ¯H*¦òV¾]q… œc•.·6d´åÍn˜P9VqæV¦œ#C„íèÐüAQávE½3¥Si×&nðYEöP8}QÖƒÛ:í€IWLþf^ ù†u:²`$h[©IUVÁ~™h·ƒµL:²‘Ipßî Ã"iÚ3SâÃq“†°´á«2)n¿oÀHÐgIý‘¢_û—˜,¢äQØ%̹ƒ˜dþ3cr>I«Ï°ó]1e¤ÊÞß3MULAÖSdj<-}Ü;“õLo¼Èdp£¾\ŽA7éÆ8мêw»üs>¹˜Xdª^–öÎT”LﱋóL)Ì'1nÁsÆ'«ÔøHïö=6´AêÑ ÍÒé³È‘zk¿qaøˆaýÛãh"S¤.O*=ÎñÖøPÑ.õÎó0¢ñí~ª 7{Í7Eµ/j#¡­TÔL¬fr½FÆ"öòöW¾.e©ñ»6¡ŽPLó"õÚÀøáV¯ó‡ÈDùy¨„²À„¥‚›H“W:¶Àäªr’®×-¯ˆ©C&WõjøÔð%Õ¡[¿Y˜w=ÀwÒåÝ;{`Z#ºÙóëøm|]_ÝR¡[&UG4=ɾ—ý•Ô¹7zÈ@xŸ{bKyÖ¯wâ1Ý-F_£ŸùûEÇX‘5{9-ŠIßíÓ’ÿ]÷mþ‚ýÄ>1Ý/ßÌØ'ì{ß¾ùÉ­>õ§js@ydj'Lí„ìÌ¡!–„ÆòzhŒ¡±¿î Ê/(=ð;pÌɯ;ÛR¶}þFÿâëß¡y•qwLša4ý†›- BäF&“Î\gÏN±‹dí ó¶Lóî¶¾20i7ÿ’‰ŽÂØž´drŽof‚1HwL“¼=Ó¦«Sôº£ÑÑ$%²‹¸Íz!гt3ÓõdÒ/Î;‰U‹IŽ\­Ÿ LדŽ6¼;sÈŽbÕBMÙäh½§NÉtÝS–Ú£ÑAœµ`2é=L³Ž˜TŒÛÀ>½ÿRɵ¸bêHCi–Ÿ¤Bˆ6Lî.¦Ûë뛎˜,èñ˜Z4™©;JÖÞ•˜æ××ó®4yv’dB´Iq7¾ƒISWžö䔵câw07»¾61Éü脉öLk÷†¡>xÜ“(ŽN¤âí½WâŽr²lº®œ¿€éÚ¼Ÿ)—w19µ1ñüèø²U»³ÉL9ת+¦Øž_Ê6úÉ$wè'·è®Vu²ONž¿||7Œnê[hb¹3&vqÀâ6ýfñæþޤ«m? o9dñU […˜ä.˜LTˆh2k‘ꘒ»˜TGL[IþÓkO—LÙQ*Ù°4Y2í|ÃK”{˜v¾)Ê=LƒÈ#S;ÉÓµ§÷uîpßä‘©ôÅT¤ølOLñé‹É>`ÌÑÓCÆA}1é¬T÷ŤàeÓSöP¦å~iÈA¢ü­ä׳<|xXžAú‹âxÙxÿ§¥QÆÃöPCæ‚?`nÛû‰-1=ÌJsÑ(ë»#™Vá½?]¼tîAL8hÓ²Átg*úbÕu™²%¦‡íEP ÓÂæ®6hWoVúŒ6Åt̤ïb2ìtùn4׳äF¨ÄdSýµþÌ«Áxõб“ÄÇT8O-îÔQø>tÃ|·-“öLI‘Ìë*ƒ¼ek*_ÁCzÚÔÜpŽ•/3„ïÊp»-“:XË”#:XúÐãÒذH'äµJ˜”XbÊ.Â÷¡¿´Ïõ¹Å®´j´ÌÄh2 ×ÐI݇›P‡ ªÁDÍ ™̦ÛVŽ»ÐíÑ3ÙöδÙ)2¥õØ­ˆQ™t L¯¢ޝP4K@CgèÌ‹‡ Qiyª ˆÂ÷‘«-µŸb '9v¹Ä”sü»42©$ ÞÌ:ñ³&*F_T†.¢Yž³¾œ–§ Š8|_޾¬Äd·a*–™„™!ÎÔ|ÀºJ|‡H›6VìÙ2SVþ]v™I·g‚R^b²ÂŒ‚ºb*ã Âû†­/dùmAeä"0Q%Mà-÷>w1Å«Lht&“zv¥R… ¹ß·‰7. þ™ø¦vå&sV}Wüµ"0±©VJy™‰ãªg–ŽiÅ1µ¨è•g‚æSàIpÐXÌ¥ÏhB…X2ù?Aáž©`OÛ"a)/3ÅXÊ™0AM¬™ÚÇ"UL²*9Šr &¬T»\j Ŧdé^™÷Ï„Óèp´Ä„vÂútù^lÅ”¦ªÖL9/™òr7Pj…Vú] ‰‰Áso ôÓ…ô*ÃKQ .¶»‹³¸ŠSh!&Á’UVAñóÐ1tµdÉbO' =&Èå“и%cÂŽD!½Êð;?Û#épeÈžã_Ò¾BUá„uK¥}[‘ ¾.0…Wј˜Ò&¸X‰LDã§ïÍH8eJ¦öÃ5ÿ[°ñÌuD7˜ÈàÓ5Sö)'%LL¥#¦S`‚6a)ðNóµ @Ä%Ɇƒ Éiá™ 3‰. µ ºR…Ÿ>Žp ´õœ~ÅÔ|Ú‹ˆSEJ)œÆ¿B±ŒâÙo‰ óýÛÀ”såx!}ŸâomNA‘Ùs¯˜Û2ùRV+L²À-@±(ÐN‚W)'L*Øjy`*¢ñ2Ó¾CeÈ”âø¬õ–ç¡»_ab¿ÁÉÒôÃ$´ƒ]`Â`H(Ÿ©óf\ÉäˆIx=W3a¸ 0¹m˜‚Y”.l´-|X¦g‚¦%èu 9œŸa<ä,¤±ë˜²š ¾×§˜ˆÉ5U?¶=@‘ôÊ3½ÀÍAÝÄ¡«úTp°|¨ýŽk¦h{¦«õLE`šUå4 LGÄÄ+&˜òh’SÑ`‚¤;SëúT15'g¸W憾<óLWT`ÎŽ©àÌyc>±ÀäLÜ"“,™Z¯ÍÖL“X92•ábá•Ã>3ç‚Q0õsźdÒbb8Ø4“Šé–NC¬ãb ý´‘©ÀΟv Td{=oÓ,U¬©|ꔌ…æÁÄDWLôeW\s2$€ ôSѺo!¦[`jjþq`’”™™d™£Ä¦*U—”‚ì&Š—’ØA]y·_œÓR1V@T*öXB™æ­™ü_DûF®2y›G¹ò2I('ìæé@ªa‘é+úVŒä)²/…–[Œ[0÷ˆŠÖ0åÄ„¿Á›uV2ËYJ1ÜšFëµí ‡H—¾‚ “ ‰Œ)‘|þì‚m˜ð;cÚËr…)«¤nŒF é@åçc#xX¶dí­`k`2¬¦TµßË›b‰ùR“Àºe“r‚‡˜Ê?éh’7˜ ö8§:|–0´08t<8¾8‚_tûY2ƒ_(—&N±’E&½uÒ˜þΉIºòàÇwo¿ù£Äݾqåì †¶ò2á¡rPÕp*¯­Xú‹–\²S˜¼¦z· ¼SÎR¬ X>b¶”>ðÛÖ@·ñÆnÉu kE½H®“æ{ Y sæ™îñäçï‡Êœ±›¨É¿Î¾ªšþs0½2mù T”ïþ«åÓ/Øüñ[Ýàä/o,è‹ûŽK>¤tÕ2Ý#¿þÖ?”!™(ÿ?ùaindex + 1); pixWrite(buf, pixt, IFF_SPIX); regTestCheckFile(rp, buf); /* nfiles + 2 * i */ pixt2 = pixRead(buf); regTestComparePix(rp, pixt, pixt2); /* nfiles + 2 * i + 1 */ pixDestroy(&pixs); pixDestroy(&pixt); pixDestroy(&pixt2); } /* Test read header. Note that for rgb input, spp = 3, * but for 32 bpp spix, we set spp = 4. */ data = NULL; for (i = 0; i < nfiles; i++) { pixs = pixRead(filename[i]); pixWriteMem(&data, &size, pixs, IFF_SPIX); pixReadHeader(filename[i], &format, &w, &h, &bps, &spp, &iscmap); pixReadHeaderMem(data, size, &format2, &w2, &h2, &bps2, &spp2, &iscmap2); if (format2 != IFF_SPIX || w != w2 || h != h2 || bps != bps2 || iscmap != iscmap2) { if (rp->fp) fprintf(rp->fp, "Failure comparing data"); else fprintf(stderr, "Failure comparing data"); } pixDestroy(&pixs); lept_free(data); } #if 0 /* Do timing */ for (i = 0; i < nfiles; i++) { pixs = pixRead(filename[i]); startTimer(); pixSerializeToMemory(pixs, &data32, &size); pixd = pixDeserializeFromMemory(data32, size); fprintf(stderr, "Time for %s: %7.3f sec\n", filename[i], stopTimer()); lept_free(data32); pixDestroy(&pixs); pixDestroy(&pixd); } #endif return regTestCleanup(rp); } leptonica-1.70/prog/pdf2png0000750000175000017500000000170110237312020013722 0ustar dandan#!/bin/bash # pdf2png # # Rasterizes a PDF file, saving as a set of binary png images # # input: PDF # root name of output files # output: png binary files for each page # scriptname=${0##*/} if test $# != 2 then echo "usage: " $scriptname " inpdffile outpngroot" exit -1 fi inpdffile=$1 outpngroot=$2 # strip off directory and suffix parts of $1 to use in other names basename=${1##*/} baseroot=${basename%.*} # make names for temporary files tmppdffile=${baseroot}.$$_.pdf tmppdfroot=${tmppdffile%.*} # have the temporary files deleted on exit, interrupt, etc: trap "/bin/rm -f ${tmppdfroot}*" EXIT SIGHUP SIGINT SIGTERM cp $inpdffile $tmppdffile # need mysterious "primer" #echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -r300x300 -q - ${tmppdffile} echo "0 neg 0 neg" translate | gs -sDEVICE=pngmono -sOutputFile=${outpngroot}%03d.png -g2550x3300 -r300x300 -q - ${tmppdffile} leptonica-1.70/prog/recogtest1.c0000644000175000017500000001605412265246153014714 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * recogtest1.c * * Tests the recog utility using the bootstrap number set, * for both training and identification */ #include "string.h" #include "allheaders.h" /* Set match method */ static const l_int32 match_method = L_USE_AVERAGE; /* static const l_int32 match_method = L_USE_ALL; */ static const l_int32 scaledw = 20; static const l_int32 scaledh = 32; l_int32 main(int argc, char **argv) { l_int32 i, j, n, val, index, w, h, ignore; l_float32 score; char *fname, *strchar; char buf[256]; BOX *box; BOXA *boxat; NUMA *naindex, *nascore, *naindext, *nascoret; PIX *pixs, *pixd, *pixt, *pixdb; PIXA *pixa, *pixat; L_RECOG *recog, *recog2; L_RECOGA *recoga; SARRAY *sa, *satext, *satextt; if (argc != 1) { fprintf(stderr, " Syntax: recogtest1\n"); return 1; } recog = NULL; recog2 = NULL; #if 0 /* Generate a simple bootstrap pixa (bootnum1.pa) for number images in directory 'recog/bootnums' */ recog = recogCreate(scaledw, scaledh, match_method, 100, 1, "fonts"); sa = getSortedPathnamesInDirectory("recog/bootnums", "png", 0, 0); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { fprintf(stderr, "Can't read %s\n", fname); continue; } pixGetDimensions(pixs, &w, &h, NULL); box = boxCreate(0, 0, w, h); recogTrainLabelled(recog, pixs, box, NULL, 1, 1); pixDestroy(&pixs); boxDestroy(&box); } recogTrainingFinished(recog, 1); recogWritePixa("/tmp/bootnum1.pa", recog); snprintf(buf, sizeof(buf), "displaypixa /tmp/bootnum1.pa 1.0 2 1 0 /tmp/bootnum1.png fonts"); ignore = system(buf); sarrayDestroy(&sa); #else pixa = pixaRead("recog/digits/bootnum1.pa"); recog = recogCreateFromPixa(pixa, scaledw, scaledh, match_method, 120, 1, "fonts"); snprintf(buf, sizeof(buf), "displaypixa recog/digits/bootnum1.pa 1.0 2 1 0 " "/tmp/bootnum1.png fonts"); ignore = system(buf); pixaDestroy(&pixa); #endif #if 0 /* roman, one per image */ recog = recogCreate(20, 32, match_method, 100, 1, "fonts"); sa = getSortedPathnamesInDirectory("charset", "png", 0, 0); n = sarrayGetCount(sa); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { fprintf(stderr, "Can't read %s\n", fname); continue; } pixGetDimensions(pixs, &w, &h, NULL); box = boxCreate(0, 0, w, h); recogTrainLabelled(recog, pixs, box, NULL, 0, 1); pixDestroy(&pixs); boxDestroy(&box); } recogTrainingFinished(recog, 1); sarrayDestroy(&sa); #endif #if 1 fprintf(stderr, "Print Stats\n"); recogShowContent(stderr, recog, 1); #endif #if 1 fprintf(stderr, "AverageSamples\n"); recogAverageSamples(recog, 1); pixt = pixaGetPix(recog->pixadb_ave, 0, L_CLONE); pixWrite("/tmp/unscaled_ave.png", pixt, IFF_PNG); pixDestroy(&pixt); pixt = pixaGetPix(recog->pixadb_ave, 1, L_CLONE); pixWrite("/tmp/scaled_ave.png", pixt, IFF_PNG); pixDestroy(&pixt); #endif #if 1 /* Split touching characters */ fprintf(stderr, "Split touching\n"); pixd = pixRead("pagenums/pagenum.29.png"); /* 25 or 29 */ recoga = recogaCreateFromRecog(recog); recogaIdentifyMultiple(recoga, pixd, 3, -1, -1, &boxat, &pixat, &pixdb, 1); pixDisplay(pixdb, 800, 800); boxaWriteStream(stderr, boxat); pixt = pixaDisplay(pixat, 0, 0); pixDisplay(pixt, 1200, 800); pixDestroy(&pixdb); pixDestroy(&pixt); pixDestroy(&pixd); pixaDestroy(&pixat); boxaDestroy(&boxat); #endif #if 1 recogDebugAverages(recog, 0); recogShowMatchesInRange(recog, recog->pixa_tr, 0.65, 1.0, 0); pixWrite("/tmp/match_ave1.png", recog->pixdb_range, IFF_PNG); recogShowMatchesInRange(recog, recog->pixa_tr, 0.0, 1.0, 0); pixWrite("/tmp/match_ave2.png", recog->pixdb_range, IFF_PNG); #endif #if 0 /* Show that the pixa interface works for the entire set */ recogIdentifyPixa(recog, recog->pixa_tr, NULL, &pixd); pixWrite("/tmp/pixd2", pixd, IFF_PNG); n = numaGetCount(naindex); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); numaGetFValue(nascore, i, &score); strchar = sarrayGetString(satext, i, L_NOCOPY); fprintf(stderr, "%d: index = %d, text = %s, score = %5.3f\n", i, index, strchar, score); } pixDisplay(pixd, 0, 100); pixDestroy(&pixd); pixaDestroy(&pixa); numaDestroy(&naindex); sarrayDestroy(&satext); numaDestroy(&nascore); #endif #if 1 /* We can do about 5M correlations/sec */ fprintf(stderr, "Remove outliers\n"); recogRemoveOutliers(recog, 0.7, 0.5, 1); #endif #if 1 fprintf(stderr, "Debug averages\n"); recogDebugAverages(recog, 0); pixWrite("/tmp/averages.png", recog->pixdb_ave, IFF_PNG); #endif #if 1 fprintf(stderr, "Print stats 2\n"); recogShowContent(stderr, recog, 1); recogWrite("/tmp/rec1.rec", recog); recog2 = recogRead("/tmp/rec1.rec"); recogMakeBmf(recog2, "fonts", 0); recogWrite("/tmp/rec2.rec", recog2); fprintf(stderr, "Debug averages 2\n"); recogDebugAverages(recog2, 1); recogShowMatchesInRange(recog2, recog->pixa_tr, 0.0, 1.0, 1); pixWrite("/tmp/match_ave3.png", recog2->pixdb_range, IFF_PNG); recogDestroy(&recog2); #endif recogaDestroy(&recoga); return 0; } leptonica-1.70/prog/contrast-orig-60.jpg0000444000175000017500000032133211314513124016171 0ustar dandanÿØÿàJFIFÿÛC    $.' ",#(7),01444'9=82<.342ÿÀ ”úÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ë5…M²o,`@QÏåÔ×—]ßêúç™#°e”©Œô¸ô={W¯è7qj†Ýb$(ÈY?Ïá]g&]ÊßÝnÿ¦(k¥7‰æ…ΰqQIpòÊB6{ä p}±‡#¾rÜT*¯vÀ"÷ ­l–Þ/Ÿ“è:T¢P€…\Õýu6ñ“ÁúÐá™x_›§& ÞÄçØæ˜ªc=©QXnÇÐõ§aCð #ÔR Á»œ’~†ž¬ûŠõþ”ü¹ëØûМîõͶð7R2äúŸ\ÓÒåI;‡4˜ù²OOÊœ:㜞hç¦)NÏOzŒn1ÛçÜW¯ëÍ=G'©§ƒ„çÚ£nùp1Þ•ü)2Á°zdþ¨O\óëŠPr¤†çëNeàNzdv¥Gm»xÎj«j–ɦË~ÎE´A™˜©ÏÊH8¹ø¯äš IRÊä … CV‡#?8'9íÆi“ëqZËw,ÅcÚ6;I!”xžŸ—5eÜ´gn c* À5WQÖ­t‹¸¾-IÀÚ¥¹Á' éÁ?…X{Ô;‘ºîL7,¼r=¹±ÞÇ$²Â²©’õä¸ïž.ÇhùF9É pùë^8ªPQŽ7cŠößÀÍ`ˆs½@ê9íÍDuíAoo ¶†98 &rIg^Ç\‘øöª·ëqMp¬ŽmâŸož‘†gˆ;•rÈ>^œœœb™§êú¿šûk…€­«~yFX€@;dƒŒ#…¹çÔÞþê`â%*9Œ¬Nå€AàŸºG™w¨‹Y4ØÚky¡ÜêѲ X1ÀÈÎJžqžã4ýBþ[¨’ê ›Ï>C¨ŠmÃj«c ¸ß–äp9€¥±ÕnÍÅôz¤Ð423@«2$Tù¾\äåº{ j¥¦¯© o-$[£ r…[iæ=Ì `ÃÏAÔŒØMSP’]9Rß 7Éq¾ÝÔÄáC“Ïp ÿ¼G'‘N½Ô5Hnm-P·ƒ÷g;YG9éŒç$tF¥©Ý]B—¶Â$h¤Ý˜ÊÊÈ=HÁ,øõ ­ÑÁãiT’:Ž”` NÏ|Ð3Ó Žã=i猞pJhÛŒŽzš˜ägžâ—`#Ó¿µ {dc ¨‹/N@èIâœWÌLŽ£¡D8Ü0;dTEp~^>î?ýtÒ€’c‚8ý)£ænHUÇ$ iRŸt¼sŽ”ÒT€Bäþ*ˆÿ¬eÉÁë‘ÅE PCeYO<õÇlÖ}Õäv—pYTmç;ŽêEbi†e„,¡ÙÔ,`ïU]ÙóxÇJg8G äAö¬³¡X«JÉo‡Ý¹ˆ‘—=»ݽ;b´‘#¶b‰B(M¨ Î:޹ÿ?<„0;‰'q㚉`U†Ò«òøý( ŒùÀ8=qô®Çòˆt܆:cŸþµtŸ” /Pàæ Ïá]î¹ig'‡µî£FÂòoáÚ»üÅ|œG=kè_l:c’O€G­x¾š3¯E‚Gï:×¾h¤Ij›z3‘Çnn@y'åÈÅ)ùð[$“R.Ý¡€ëÚ¤$ :â‘Ü*‘Œâ6ŽqÞŸæ&¦ Ówo|gò¥ù¸#†ô©s“Î3뚈²’:g°§ÚNNir¤€A< L‚Nzu…7 œ‚'°â›œ6=±AÀsïIŸ”燞sÈ1¨ÎK‘ŸlSdnû¸ï@t#Ž=©ÀáÿúÝé22yéíA9Èè>½i‚ &ÐzñéZBçÔ×%àíéõ¦–(¤ã;rqëNÝ»æÝóf“hR9?Bsýi •Îç¥5ÎåÉù€çõSÆáòŽ˜¥  ÈìqŸÒ˜Ä 8ÇÌpFêcC(b;óQ3¶9qœôûS$?( ß:ú QÈ8L60pO¯¹ôª¬pÌòp£†8ô9ÿõÓ<ÏÞ„à:Œþ{SXìl=I?ç?ýjd¦@¬9Luëž¿‰¦oR¨¬ØêH<z÷ÿîãWƒâŽ„ZG¹ šî`n21îjXnVHVD‘22APi¦ê&”":;•ÜT8'J ÄHB<ʬçä àgéKŠIägEJJ•ÊŒjä¢ñ&µqâMOH¶°²‘¬1‘§¿á¯/ˆ¬çìïo,S43D͸+Ž£#¯Q[>n1Ó¯nµSSÔ%²Òî®à€Löñ´ž[1@Àr~lqžÔÍ#U:®gåùFâ!/–;r3Œâ©ÛëòÜxžëFkeŒAn³,áó¸1ÇÝÀÇçZæl/<œu#üúÓ„ÅHw< “Íl`uî)Æ@¸Æ9çÖV½âðö•&£-´“ÛÆG™ä•Êä€:‘ÜŠ¤þ#™ôÖ½ojfÑy¹Ýe1Ÿ»ædñÛÑGp Q¿MÀyíša»Š;…„¸YK<3y wŒýES¶ÔZçQ»´kK¨Ì Ÿ¿höÇ&áœ#gœt5`É–\‚àðsÔv§yèpÀƒƒúqP´H^äp/óïLPµËF¼:Œ²ƒÈÎpH:ϳÖ#ÔUäŠ)£D‘¡"hÊ*yÀ=ºTâå«G;Ôr\F²6r•ÔbeWÞÇœ¶\‘Æ{Ô2N®å†YHÈmÜq‘QËq n8 d â¢k ÒªÍ“€EJ¸dÝ"€p03ž9þ•À‡G¬¹íÀ}ôÔ+”ȹÁà.:‘üªa)XŽq¸ðsÓ5çÞ4¶ªXãåíÓŒ~\WSð…Gö&¡ß7㢹3øJ­"ÏÍ}ï^g_HøÆ4:SŒ •ÈÀ¯ÐÀ]v9à?ËŸïuÏáþîsj„±n1“WѲ{ ñô«;‹…VÚ9çß4ï0oÆÐrycÛœTæP€çîÇç7ú¥™øÅa3]ÁåÇbгoVMÏòÙºqô«þ<¼·I|9ÓÃ^ ˜3€v åùì3Ö³.%ûgмgmg$fæ]9c‰#q¹Ýc îÔº ÿ‡u;ÝRî}RÐǶÐË7î$N [hUëéŽ9 yÚl oM±GxWçòüܺäsŒu£â‰mõ]ÇI–3r×°5™Œd¨î$vP:ú`fºT_ XÉ4úövæÂ¬.%ÛÎÞK`ž™ã֏ߨÚêž(ñkÍ-”½ãì÷2EÆçÏÜažêïôÛ[h¶l“É»·dqÉùí9¦ø¢M'YðêBWJÒžæg–h"EE›`Ä2•¨É2{dQ×RÛOð߉ntVæúk \Ì… &X)ÆÅqRsß'ææ¬Úsx“Á¢Ä[ùA¤1yXÿVŒcµP³ÃÄ+ ™ ÀÃŽ÷'õ ]#Àö×7Ãi%¦àÒ(hüÕB–ÉÆFN=È«š†™§ÚxÅ%Ò]‡„Ü4+Á.ÖåqÀ'h8Ïâ©Çamauà[‹[hḙ@–Di3Îã߯Z±¥A¦x‹Lñë/] ÙRáÝ”<§äÁ=cŽÙޫݬ~ñ5г´VÄ6A- ‘gý#µçpfÏS×¥z™§Ûéz]½  @gŽIÇry>渋K«¿ˆÞ([[ù,ÈŽÜ1‰ýØþð8ééQx¯Ã¶:£OÍÌldiNéÜ[àÈì*Ö§ck¥kº&‘4Z~§q<׊ò³yÎaX±äÔwªZ¨þÇñ¯§iè"°›C–æKtâ4n]Àt^c9ª3éßbð•­Ø=ÒêÐÇ„¬Þ`fQåíÎ üÝíõεÕ亼Ay«½¾$U=  Ê¥Ò­.o4ýY²Å ò帘»7ž§‡²Ûy'8#€*´±KsâÃ&¥¨¤VqDð$WN¡Ä͑ϨéÓÛ¦ †kØ4o j§R¾{»»ëx¥ß9(èÙû½ç=Îkº·ÓÌzåÖ ×÷n’ƪ¶®ßºÔv'©ü1>$/üPZ‘éŸ(ãŽx‚–Ö|èºjCjѳnH­YË ›†ó!w9ãžÝk;Äڵņ­;]½êi3[ª[ÞØÈÛm%äuR7grž}MHËßÄø]JcþÉóU¢•¶ŸÞÇ=ô¦¶£ª.¡ãS›m„QKnÅì&6|·p9Ç|óYÿmÖbÓ¼7~ºäÏ6¥4pK‰<µ¹ÈûÃÜõôVލ[kZþ™.£ö˜í¡Žh&»PnÊOÌT—8üCa®]@µ7Ò]¥äR¥Ì²FNè»·Dv©#$ŒŽÇ|šg‡aŸþŸHú­Ãy3"b@Œ$ùù‡'qÒ²Ÿ]Ödø|úÒßv“gò—æRáG8Ï¥kA>£iã¥ßÞÇwö¾z~à'”Ḿ8îMeIâ-JâÍ5gD’]@Ùµ”‚"õ8!‹÷ê=+¨Ã©ÄÈ9 U[þÛž™Î=ñÊË R¹ œdÓ=út¨%Q!,pÇi'x9öïR«°óýص.åtÀƒ ~”bdÛ±8öíQyq(Ù´2ó ¼6iV­àòb*0#UùGÐS£†(3É ¸Éü*¼zm•¤’ÜÛÚ[Å,€™$H‚³ýHš’h„°•—c#)Œ¹9µS¶Ñt‹)ÒâÛK³Šq$ŠÝU†x8 g¥I¥é×þ_Û¬­îLgåó¡WÛŸLƒè)³iÖw6‰g-­¼–‹µ|‡Œz:z}(M2Â+3g•¼V›HhR0“òô çšç®ü!Zî•y¤ÚØYÇfí#ª¦Ã)a·¨¹Ç^µ¥yáíöòK»­:ÚIäR­$‘Xcþf–mHŸO|ºu³Y«nXV [Ô8=z{ÒÇ¢éGMþÍK(E¡?êáOÔwüiN‡¥±´ÿCLÚqoÉýÐÿgž?ú›sá½"çP]RM2ÚKÅ!¼Æ_N‡Ó=9>žÕ Z^£wâ»Ôä²{KIì–o3$mÌ„ñÀ$qÔóÆ+uÔ„?1²,´-.ËP–òÞK™8y<Ç&N?‹'æëÞ—VÑtýn8ÓP‹ÎŠ6Þ©æ2Øëò‘“N½Ò,o­ ˜Ì±ÆU£-#o‡Fà}óž´ÄÒtøÁb5Âyr¼Îd.6å‰ãñÓ“ÅWµðö›oöuŽ&d·; IgwXÏ@UX1ž=;SãÑ,—U›SE&òuÈ^W ¯¦ ÆÒ©XøCFÓî„ö±HÉæÇ ™š(ÜBqžzö트¾°3j3fq& ¡nXLNð>Qôã#ŽÕ]¼-fö6Vb[‘”ÂktóFceâÓ^¼¿‡PuŽéƒˆZa¿iPÄõÀë·°ÍPÜ'†ƒý°¿eyCî6Ùo½»ûþ¢¦¹Òï“ÄëOw¦8L"€ã’pKñ’8úûf¹+.¡&îÎúå56ŒSi[Ÿ{•iX pX‘ǧJï$RZ4GŒ’yÁ9§~õ ªÆÿ8ÎÎë×늉âc–V#99É ûzñMX3a•Øl?ŸÍ‘³´)ÈäƒÎ3þÞ•éq#1ÜçÞÇ?¯µ;g˜ùs»#‘à Ky{Èq‘“êúçüó\?nKêÍ`@2:6λ„;±up~Öp?à+\WÆù­¿ëÅ?ô7¯;¯¡¾ \ì·@~\gÛüô¯ ÖWÍ×(ICÿÙuÈÇâ?‰ôªúmÎ¥y œ-,ò°TEúÞõõ5´gµŠØ¹cj›‰ëÖ‚ì#=€oóšrI´*±®IþŸáÅN6pIRóÉ¡¶³<íί4² )G¡##ŠfÌqÛükŸ—Å"?G¢ý–ãg2´‚nK¨\cø~öXñœVfŸâht_ø™5 ›Ùí xZ5Ù$Â%ØKÚ2G\tö®µõí8iö×BRðÜàۈљ¤ÈÜ0 nö‰Ìn®Œz2°~UÍüD¼½°°Ón4ûé­äšö;gòØ`«ìG^:Ôo¨Þè¾8Ó´³©I}gu4w! Á´¿r¨àãúÃfׯšýÜVv—ë%Ä®ñ**?U=¿"zàã4æñN†^0n™cy<µ¸1H!g —nÃÎ{ö5‰?ˆF‘ã}BKTs`¶K,q2ÚÅ»8óɽt^ÒgÑÓVKÈšÅþì¹ã9c®ìñŒg5æ¯ç‡õItëÖŠæÖs˜¶¼,²îÆFqÜr:V†ü[¦ÝiÚU­î© ê—«2·œöÈwg/^jçÚ¾Ñâ;˜í5¸$HíŠ5Š"³Dû¾ù9϶ӊçôÍnïQð ½åÞ¹…ý˸[©•1òÈFœƒ¹?‰´Ø|E%Ì)pc21w ´’¡WýæÜN:à{Š}„îúÆ¡Z ¨ÆRÚ0»íÎwÏ$¾•nÛTÓ5 ·ÖÓÊ€±Hå ØéœøSµ´Ù.…š_Û™÷2–A¹ˆûÃê&¯+ 3m8Ï'MV·Õtëé Z_ÚÜHœíŠEvQë€x×9‰.u_ÝiúuΜ!´’ó¶ãr¬¤É°ƒÕGLÈ9ö¿â½CPÒ4)/ôÁ–"¹ŠhØù™` `óïPèºòx—Cóí-¯¡;n!š2Þ\Á\‚G\ÌVt;ë›Ý ×T¿’i¡Y±•TR3ƒ’r}øúUè綸͆dtè|Τq¼¥O¦ïóíI¿|›w®ìçäŽEdŬO7Œ¥Ñ^Ö(áK1:HŒKŸ›hÏLwõíÏj³¯jShÚ=Ƨ´Sùyä+•îAÁ皥i©ø‚÷MƒRƒKÓŒs²¤npäõxñükrÚéî¬!¹• $jÆ&ÎTßÃ¥,­„8Psœ÷ïMeÆ÷ܺ:ãñ¦•]¤‚9^ztéUàžæžÒ;×ê¯"'CgŸ}§üšžEÎ ü¼ûŸóü«?S¸º³´–æÎÚKÙ `“’_aÏ5zRÃ÷hÛp#‚Oþµgtè ùˆý?ZŠx$¸bÍ€†Î{‰ý*,JØ,êÄpAãžN?:¬òÈœ0l·8$õàg§ÓëM’vû4jSÀ=9ÿ*‰ÚX·fùŸñ3MŽy£„£1iBîÎ@çÇ_zq˜ÉˆBä3Ó'Š–Ýd„™¶ãÔƒ€NvôtéM.aºÜ¨'Œwíϯ~¾”õ”±Ü­ž¼ {tôUV#,÷¾‡üö5æþ,!5i°\dñÐ ï>0}QPz]dªðý+øÊ¸ñ¿ýy'þ†õçuî^9%ì$m½‰Ï¥yÏ…QfÖD2 ’ûñº†VÇLƒÁ¯hÒ47LRöZ}½³È6±Š5‡g®;Ö¼ÌÉ<‚ÜŸñ© n0  ÿ«(Vxþd<·¯Ó5*ÂÊŠ“Ç (õéR,C=È=[·¸¢MßÀO$c¯¥B«ºS€AÈÝïÀÿä/Ú|T†Yb¸1Ï¥ˆ#d…˜4†lã qÉ=ëT-æˆ]øîEݶX€„”?¼Äl¿/¯8zZÏæÃKðv©wÓéÖ¶òAvÑn nÌ ‚ÿõÆ{?-…×Û/4«)Ä77]Î\5ÃyÃó€03î}+âlÖ¯§i6’º³hÅ,‘õ" G§8®¯OÓtm.&½³†ÎÚ<½ÌapÉ×%ûŽõÇx_:…üQp†ê{»¶Œ+a¾uÂ7¨Éèj¬÷v·ÿ GP§RX£µ=&«÷:öÝŸJ»§Ë‘ã둪]GlF™ f`‹)_¼A=psÒ³•WCÐd¹šÎmâ-£\ÆB[FOË)^áOÒ›kp“j~7Ž+ï¶Í=ŠB“>!|í @$=³“S]Çi¬|5Ñ´›)`›Q‘mÖŒ‚ÑH6ïc»…ß“ïŽõ¥c4Kñ;\bKÆséÉïô®P:ƒ*ÅFnv‚Xuó‰? ®¦kˆm>*+]OѰŒìgàsÔÖ&¦Ó¬ÿ ˜Ì¢;PvõÛ³çÿÇwV¦œt[ûíöß\»¾»„kk‡ta— ¹QUs’:qÉÔÒ¼í"çG-OC»º-g.q=¬Ž!€<ã/ŸÇ§µ¾#5Ü~™à `2 º ~o+?6>§h>ÄÓ|P±É©øRãO`nEêˆü²9·Û™:u] ~ŸáÕ¼câ³þmº‚ããùæ¯xµOü#ÒöÝ=¾}9™+ÄZeç‡õñV‘@_ø˜Z/TîþÄwüýs[Ìo³xÒà“¦ÏGD¦0Þ¿1àÿJ—RÑ¢¼ñÕö›a-o´’÷W „|tÜ8ÁúûÓ<,µâÓíg²…dðú¸™|±ƒ8%ô çÅ´Õ=&Ê [Âðk2ê¶ð]Bæy®Å°7 c[vO \ré[öÅ›âáÆq¥¨‹æ´Ì1ž=þ¸ýj#t®€)6㺑ۓþ{V$!´š{«fY¢¹µ‰e’OŸaçpÆC;gŸJÉt….âsjï±®´žZ6qó603è}³I¨ø²;OZé1ÛÝÈšI"·wУž¼žƒ×8‰µí+NÖõ‹»Rý’‰.mÚ'h­‰ÈVP¿¨ãŸqZrëÚw›d Ì>ÞrÚO›¿?/ËÇ<ãÖ _éR]Çkö–iLQHbq¿?*ɤðz¼U­T^M¦Lš|¢‚¸ŽFça?ÅÏ\W-©I«XøŸCÒ¡ñù‚ÿÎó‹Ga±AO—ç[ö’Üèé{&©ª‹bSìÒJ«¼d`®FNz2zRéÊ[‘w²[dÛãu1·ûJ@+øRCâ )¼¥[Å&XŒñðÙdËtéïPè#´ñ“ÜÛ ;„ó´1 ÜŽ3Œâ³üE¯Ýé³XiÚ|Ë©_ÈV;;#AË3ΠÇLÜÙx‚ÓMškjK›Åˆ•Žx#»cøB€AÏL’=sZSk–6Ñws¼†%ÆòeÉ@3R=ýšGo+ÝB‰s´ '·×9*»ëÚ<±I?ö¥›Å#‰Ð„$ð Ž•:_Z$1N'ŒÃ&6Hd|ž6ž‡5Z•Ó²[\A+Fû\DêÅ =ðx©-ï¬ÝÄBê1بA*–$HÀ<ý*Ho­¥¼{eº‰§3FnéÖ›%åˆÁ,¶¾{¶7dçÛêhûE—ÚLàùfJî‡}*¤h—Tº7‰hÖ€ ¶( ”äûÁ÷b¬!´U•7Dr)¯\gÓ­(·¶Ww‘cçýÀééíÖ£0À$c€ ©$*¸àÿ*& †_™¸ŒíQ¼j™ €@È 1ž)fF$ntàÿúª³Ç©ØQHåˆÁçüŠ‚eƒ ˱Hbc?¯áúS –-²®€ðúÕ Ä²2®FÂK¾âr1Ï_ÀSþ]›Xºœã;¸Ï¥Q“q›Ì€ñÎqß ÔjJMûÒŒéžÜ 1NIA„'UùBž½JÿõéóFï €LăƒòõëJ»R6Š-£œ¯Þã¯ùõ« ñC*U“,Tèz~DSüÏ”aNAÇ^ÙïùW™x•ĺÝÌq–<Ó^•ðo#Ãw¸ÿŸ£ÿ ­qŸ¿äs·–)ÿ¡½yækÙ~#*‹QÈÏÞ¸ï¡}d`žo­{•¤Jð®xÛŒägd «æž2UFriÍÞ:s»ÇÖ¦Œ•c…ÃpîäZœ¨§^HX;‚<ŒnÄSƒ<ôàóÅDA28¹§Çƒw3R"e‰@{œŽ3Iå‡}¹û§‘ÚžÀmÙ—Ï÷½ÎkÖݵŸYèÏ£ ”ÜÍp:«J l@øÇ{=2u¬?éSè^!ѵÝ?ûSR¹ŠCñ˜Úf0äeF2x'«J¹äš7Ž/u­o$Óu[hL3ÅnîQck(”œ“ÈÿëeCsaá¿Ⱥ]Æûmä>u¡.#÷¡O FÞŽ «Úª<}u65)b¹ÓÑb¸¹‚AærÄä£@=:Œähw¶×_ ÿ±âî5 ÒXc·XÎâììCsÆÑÔ·A޹­p?áñž…à‘ãMY¤°ÄÒo”0ã€{Ö¥°¶ƒTñ¯ŒmfÜÖ÷‘A D{_iõÇÖ«xkMÖnô˨n•s¦Û˦ÙÈÙlÿ¬0#ûZÈÑgÐî´»-*æÆþ]rÓj‹ &œ*Êœ<íAß8àgƒÐú~Á‚0JãÖ¸?jÖKñÉ%Ü(-Dþv猲`ô'sÇ/öKÍ Q»óÿ²íîíM2”,›U¾^@==qß ¾¥ákhuMR2{9¡ uq3;¬íŒÀsógÓ wâ·ž=\»Ð5 ¢îHRKW3o& òÿd’xë’zb¯ü2º¼mf³©º€Èf‰[æLÈÄn³Û=j¯‹á:g‹4Oº;ÙÛn·º*¥¼¥`À9g3sì=k¨—\ÒáµK†¼‚D“ˆ–ÞÒžÁ@ä“í\ï†'òüCâx5°ÞµÈœ4„eíÈÂQùf¹T²ÂÚ3ÆÒo©·ŽA`bÀp{O¸>õÑZZYMñ3XY-­ßmŒ`Šzðzûqô®f+x.>øTܤL¿Ú‚"ÏŽÉ&ážÀŒgé]-æ‘g´„ÓíáŒiþÝJL;@MëÓŽ?éTîã’NryÎIïO¹i×צµ=ãTHç+=¤â@¿Š†Pôã€ykGq¥j~lÇ£]jÆD¸Œbkiü͸ ö ¥~Ÿ\UJItÖñÛi©ä:µ¨Rãj°!ÈÇCÉ9úšÓñ%µ¥¦áÛ­ŠxÝã]»‘ÃeIAïøûÔÙeç‰|b—p,Š‘BèýÖ1X\÷ëÉõ­¿3ÂzT²|ÄC´–9ÆëŠèYâ”2Œ0GÁ Ó>ôÙÊ’Éó °=ÿÏô¨Ñ`éÈ^˜¨'‚@ §8äúþCñ5Q@ˆ)S¹ÆFÿö½OçUç…ÌGð–$zÓ×ÿÕTå· ¹è þÓ€3íÐñQý”yk» 9ŽOcúýj•x˜¬e˜; äçÅ@ÖÉæG—U^Ð3Ð߯-®ÙÌÙáIãЇøñV<9œn#8çÓߟÒ(Éà y{?Ö¬¬‘±…²ÎO¡=1õõ§0‘¹äó€¤ô_óú×™xåÖnpccó¯Nø<â›»8ãímøü«\_ÆqÿœÏ6Iÿ¡½yÞ½›âP lÉ玵Êx=Ú©bHÆ=M{}º²Â¿68Á=?XVýØØ’pß7OZ“´ ù‡¡ëÿë§($/Ì@öçÜçSÆÊeãŒ~ó©P¢œä)ê23ŸZ%!ÉUf””–‚ÀHùüúS³"¶IQÁüê]Çrî¡ÇùüjMÀƒïQ’>ðl‘’{SQ'©çÛ­FÛy'ƒ×šz´dº†û§êýt€)/±ºLf¡¸·ïJг®ß22»—>›˜¬ýÃðxoM[k›‰íГÌT”ÉÉÆÕÉÏ\Ö˜Ž&ØF¸?çëM‘# U€ÈÁÆzœTgfàG§QMm¡¶í^9Å48Ÿ§åO1†xž)»W=úçšo’ŒIÀÆqH‘$ln€â–›ºÎHÏ­#–tçÞ©&›g ¯-µœÉ/.éRßR)—zuûÆ×v°ÌÈÙO20ÛO¨Èàô¦^éö—1©»¶Žà ;L±+•éê?Î*¹ðöÒ¼‡M³.r]Œ “œƒÛ¿5•­xVÞúÚÒÒÆ+K(`º[¦ˆZ‚²°ÁZÔ²Ñì,£x ³·‰eM³G¸ &}F:vçÔÔ–Ze®œäéÖVÖ»ñ»ÉŒF3ǽ$: ÓßCaWŽIi’Wõ ‘Ôäæ•ôm-f3®Ÿ˜ÈfÞ É×yÛ=úûÓ¢Ñl!u¹ŽÆ “Ï$ä0õ|tÝמ´ÔÐì`º¸’;d‰îr';r%ÿ{ž{õõ÷ªöú%……Ä/’(‹qŒ³1g¨@NžûqQ·‡ìK² Ý( æ¾dç€NïÃèqÞ¥³Ó ÓmVÎÊ%X±p§ÑrN=)DQÌ\:(l·ËŒ``ŸÆ¢š’Åà I$AÇùíDà¸*²mÉ“ÐzgßšŠ]ÊXHÇw|}sÇçúU[†Þ"¡Xòsž1ž{zš®CàLYÆù±Ï·­WŸ{–ŒJ .F3Èî?˜üªVS¹ÚLg–<Ÿo¯UVó$—hÊ…LžA$×éMWŸõ™`~PÏ××ÁàÓĤÌK!Žqœ‚?Éý)ó¸•ר¼rÜè*XœœaIÈÓç½OÛ+«½AÏqŒu5a¼!‰ñ»'ž­ywˆ±ý¯q´õ§Œôæ½Cá†ðµÙÏ?lnÿek‘øÁ?‹íÎ ÿBNAÿmë€û#t×°|NT6a$Žs# ©É‘þuívð‘6 púÕ¢ƒP¤ €?3Q•ØÇyû¹è¿åN‰I=3RÈ—ÌRy?0ÏðíÿÖ« ‰ÎNHæ”"ª·sŸÎš,{vöÿ¯IµOÉÏò§ªuÀÈŒŽ îää0sœŽi»|²q¤çŽsÖ¤P ±W;O_~jX€Ûr¼‚zþ6vþ•‰‰ß¸†þ÷šzÑ?Z@O*‡åÎxª–¯¨¦‹§=üË,‘ÆÊ qcqËHHïQÜjšr‡óu+HŒ<9iWä%°ç‘¡¿Õ-­l ½@na•ãÜ©{…S’@#$w§YêÞÞ߉2½¤‹³má¾^Ob:ÔVdþ#²¶ÔΟ$W¿Ú#´çfÝÎ¥‘³»$¨Æ21Vãñ Ei¦ÁŠ*´®Ÿ;30\Içnàzr`Ôì.Ò-¯`q+2LJ¼+×o®1ÚŸöÓôY£óÜ8ÏnüЗ–~_˜.¡ØÍµHm'¿=ù⣒öÜ_¦æ´ª3W±Õ%Co;!Ž7pR±¸ Ø އ­I&£i ñ·–P’îŒm*z9`œã•?Nõs ´y …¸‹…!”üdž;¹cñ©7¶|¿˜çŽœŽ:ÓÍUœ>Bq×vã¿çQÆÓ;Øo9§ÕÙ™GRW‚8ô¤T1ÚíL€AÀàŸç×ô¦·–‘œ£³‚÷5XoI]„ŒB}ÕeÏ<ðIüõæ£;¿  pWƒìaPÜI JmPq¸lwïÏÒ«º2Ü9eÛÂç'ðçRàïÑéÆqÆxëþ5"$Œë»§ÁÆ1ÎsïšU¼½Í”ap»p= š„$rFe]Ø'q\Ûüÿ…Vçcr­Žƒüÿ*tj®Ûy›!Ç9ÆO®F ¾7…ê(%³“‚sÓð¥“_!Yr‘Îsþ}êi!|Dlmä'9Ï'ןÔÓÄr¡$¾ÒÍ…lçȯ0ñݪ]0bŦ$œwɯRøA‘á[“Çü~¿þ‚•/Œü-&µ­¥Ú °ù³Ø’qÍáp®TÉAÁäÖ×ÄòÂÒ.˜'x¬/†É¾þ`@9ôÿ8¯i,JT`ÔTÊÜ.rHV¦Ê«3ycÆqÖ•2H¦1´þU8@¬ œ`‚(rŒãëþzÒ¸‘÷NîÇšc‡”®0žxïNP½H'Ý)TÚLg(~SëÇQƒþóûÇŽß\ÔX;‚HÁËwÉïR|Äg39>”×ËG'­F¼d1'¯>´é3‘Áô<ÔJ]ÆJnß7JhÊ䑻О3ÀªZΚھ™-“Mäît}ÁC•ƒ×Ô Ë“Âï-ô·’ßÈ]äI>x÷`$Þj¨ç€O~J7‡Oö-¾“çf8gYK¼†Û'™Œg'¦ ì´Y4ë«§‚h’ ›9àŽ£-›AÏ…9ÇcëÅmo°kW\´’G;[ˆ‘á[rIõ\°ú1¢¿Žx.D ·Eää*Ä_ÝÄ„{`u¨ì|'-´°Hob‘#DFís’4ˆWæà‚Ç'×åƒÔ˜Çùô¨Ú+ðÝLã 6ËéÒ’!v²|÷>iç¢ Î9ïM ¨É#nÔ@3n?ÇéùÒË¥ómÔ\à“n¿ËéUÞÇpú)PrM°Î8ã¯iÙÔR<Éx¬0pL889ëN_¢{„ õ>Iãÿªr½Ô‰® SÓQ8?ƒ{Ò3Þ¤ )šœà¡º¿ÇþqP™.òÍŒçjÀ÷é-ÂÆ’,GË##9êÿìÕy$yd++>O%p8õ5Î¥‚6ާút¨D°1bûÛ²€1Ÿò*ºÌ›Y—œüÿ1PM#qŒ«¹62GN3Û¡4ÈOŸp‰‚Ó—ì8ÿ ¶ŒZVb¨8Áçê1ÓŸÃÒJ“ÆÆÒ¯÷ûŒsNµ£Æ%° ›A;ÿ‹?_~´ðÊ7WwVížœûž1ÅyFµ)}Jíýfþ¦½cá?ᜑÖñúÿºµŽ´¬ûT£iìzçüæ‚IÛÎzÓÞ9ôŽÍå† r3‚{RBÅ·oÈ(w Ç¿£ß¸í\ÿŸJa”§œä·áH¸ó6¨ÇÓüiœ1ŸR)­'ÊÎ3œp×üâ™ îU‘óž¼gžxü*`þaŽÎ¼pO±ëõâ+¼+àÏ\SJ+ $1+ó`ž1H yA~lçc·?âiëåü»s´ôÀÀ÷žµTL~Ó&äÛƒ•ê9ýGåRÍ.Ì.1žqŽÕÐ)VŸQ€8þtu,AèG ƒÓ5¸ŒÉåFÿ1ç cžµJé⌻†‰Á?(öÿ=©¦hÞ6$çgEòÉØp?ÿ]V%e £æóÅ1žØåãG=±žÿZ„H]ÃH#pÐóÿ×ü*‘Š&a1Ø­’AÉ<ñÎ8¦:FZ=˜ƒ÷=¿ÉEÃa•W7ƒžŸ¥Sr’0WÁãüóRÛ…’MØ]Á°rqþ¯Ò¥UŒ4œlà¨þ§Þ¥Uà9ùÈè[¿==ªÑ*6R2þ?áRl T—8\m,8ÏcíÔ~uäZ“y1$åœç#Üׯ|&]¾n8k§?¢é\'ÆËã8†Oüy§CþÓןçÜײ|Msö s“Ç5™ðÈ~öà‚s‘Àÿ?Jõ ØQ´žàã§ãKæØóÏ5 •fŒçq#Œò?zl,»чãŸËùÔìÃ<)Ï÷³Ó?LÏŒ>Ñž¹ÿMÎé'‘ži‚&Õäöçõ¥-·÷™Û‘ÎïJh¹ÚÁ!A@9Ϧ)VE€Ï$qøJR͸g¡8©7ª Ú¸Á¦d%Iüigå ÷@üÿ•4IŸ™HË òzý)\…N㩬Ê#ÿdq@|¹ýv¤YJžyÏÒ¡vÛ6##š¹<œûRdmÂóŽGËH¸†<É R–8Î=JO12ü°ÇCNF [nA¤fÀïÇÞ÷⛹UXäO$öõ¥.Š™þèä`“Qo ¬TÚsÇ­5˜€ži­´c õ<~1|£?d6¯Oð4þ ’HäçëH²„„Kg¯ÿZŸ+G´¨^Ár@À 'Tܸ ŸËú~´#îÙ…PÏOçL&v *–Æ~÷#=>ƒôö¡Ÿ÷‡s,| ŽH?áÇZ €g”n2Ý9ÇґȪ„(Aê¿ÈsõªÅcÊÈ\¨ FïSô…BàȲbêIÚs ÿרö•&HÕ›qèG§Z¯µ¤½)<*œŸÇñ棺Nó¹¶¸È äñð¥Wž '2»ñTäepNjâºn± GN^ôãïfrÜÏ>½3þò-LâîLóÀú׳ü)o‚P㆞CÓè+Îþ0gþDÎ3öDÿО¸ öO‰¹þÎAÇÞCáš®éY¹±ôÿ8¯YP¥JðîO¥+(@ œ.qš“af  dúƒ‘OTC1aR"Ç ÄrP*mªX0õÿ>ÔÒ…|òzñLÉ^qŽ „ƒæ#±Þ´¦-Ù8\g'Žiφ^0Ø1“ëŸóÖœU¼Å AìGAüé ÄB<`1“€*&]›åé×§aN  Úsþ{SvœóØzÿŸj{!sÛ#’Ùæ“¤íù»‘ÇÒ£%Iä“×µj°È>¿Ï™›œzŠa(x2 ˜4¼q@ؼmR@ÇÐR\…öÎ?ýt@1·ëß­.ìW;¿ŸÒÜuãÔ9ÚÈÏO\~5"î]Û²Iãq¡0ê6œçÜÔL~Oð¤Àn<9ñÅF»ì·$sØÓÃ#ǰüÿÏ4Ý©±»Œtãêhc M½pyÈïõõ§ߘ1œp 6Dœð=ÀçÓ¯Ö¡xnŽ›WoLmÀÿÇZA G\3Óëþ4Ï(0*$sÈõüh‘!™N@RAÉZ‚GABÒ0rÛó‚{çð¨l¬±Î>lOåÖžUò²)ù³ÀÏ@['ôÅSž)À,Íò³uÜäþ—I~ÜàŒ¹ü껬‘Içh ÀÇ8ÿ>µQ•Ñ%\—ç$çœU‚IòÁˆÜª dÁ#ñþT*8‰•IÊ…ûÄð=*ƒ‹‡•Q€Å†Nx,=8éR…”ª„@ªädÿ3ÉçÞ­( ¹“=מ1ÿ릌­¼Ã«àg¯N}y«`fAµ@Al“ü¿ÏÖ¬»ù“  —þÏõ¯#ÔÀ7Rcþz7éÍ{Oµ à‹r9Ý$‡žß7ÿZ¼Ûâþá6Æ>ʘãÝ«¯_ø™³!õ<㹨>G¾9£tõ¯UŒ“ Œð>´3íÈÃߟð¡¥à0em¸'§ùÅXWRw3­ÉëR†ÎÇ&žæÃp:}Î)IƒƒƒÇ¥2\giƒÉ¦/N98èéR«}zS”“AÆsJ¤íúŒ¦ƒ… @Æ:T[‹dœíÏ ÷¡¦POô©¥ÀÁéÇ­³¸ój{6pzw¨ˆFM£vG9üiŽªÊrIeär 4¦Ùy`qþ~´Ç‰AÁÁ8Æp8¨ãA÷|ÏÓÛÿ­š‘RýFb–EÝÁLd9ãëëšleʇH<…eÇ_o¡…ENΦ\¯UÎFL};þu¢!ñYéß9#ô ,ªªGù†O#²þ}i?zªKWOÏëUå’O³ÆÞÁ$gîœ~­2o9TlW¶6¯6:þ¿Î©8¹hX+²– ÈíÓ¹ÈÇ·?Ò¡–IB²:`®~]¤ûŽi‚åö|ÙgÁBð~½ê7ÀBêÉ888úû}jÞñ9v>gðàcÇLÓ’`Ò0…À£6‘zÊæÚhày"xÝdfuQ…$“œvíX)©ø‹MXì—wôø¤xäò³åv€àîXÔ‚?ˆt­›ÍcT@³º†ÌËs4¡1m.2~b¸Ü8Ážr fÅâ?Í ²¦‡°¤rÊbx¤ òmÂdŒ;›È!xôêzLj'°´û-•Õ«ÉxQ®%u( üÁNYsµNHÇ=M âÏFЭΈ#C ³*ÈB=HÇð¼8éU¢ñöªñÇ2h’_“ž[žŸu«2ëÆúÛ® "²š ênJ`àdò¿2¶x'ûµOŽï„QìP“<`Ku°¨‰óaI/’@3Íhßxšxô-SHrn³$–æP:Bï°± Êxþ•ÿŠn-ô 7S†âûc2°•Î#²29ûÆãš§ xÖãT»°´{$JÏ*Îd*±*?0ÊŽF;ՋϽž­qaö(¤h]7ÚpIcÉù>Qûî¼ýÓY×~=¹·œªØ…òÄèÒç!V\¨lpÛ¢89zg„>>kdº3Z1°”FJ‰] zœ'$g’8ÆHÕÒ|i©§êwKk,bÂ?2EV XÇŽœå_o^¤x–ëY×ÞŽ8í¡·g“p.ìâGO‘³¿'\sU.>"[A`&‚ÆF•¡2¦dR¿p° Œp ãqœf·´]r=TΟ¼/ò¨e…‚W+÷òTŸÄ×´/o¡±³šîfu†/#m-€9'ž••Š4ë–òDÒù»üµó-¤L¶í¥FTdŒŒã§~*µÏ‹tõ’ÑàKm!e–a¸yAc2cyl»FGõñM“ÎbDN©äɆ%ÙšPWn21å5ZÔõ84’ÞK²&$nX Çîƒü!áYÍâxÜpBžpy2Ã+Í ÎçýYä¹ô«¿o'F´¿bbŽTY¥ç;®ãÆ9ôüj›ø’Ã|«,»ÈYVW_¼˜HÆ8 DÝ¥>M{OXÜM{ d+n;OI?M­Çû'ÐÔÖÚ…´ÓÉ3,“GÁI'*pwcÐÿ1Ký¯o­ ÄÐÆè¥Ü3c rsíü©»`ìí¶¥¾öªOÞÛØúñõâo«Aq:Ä·PÌâ%lq–¸邽?¼).5à,×7à )Ú;ç$û Ô+­Ùíùï R2ÜŽ¹öoʤT³’êXḆiè‡,œã'OÒ¨Ýkö–r‹ync:¬€°ýÞàXgØ…?˜õ©F£nóæBdP§nñ•$àd~#óªWZÄE$ûâÚˆfáÆæp^ôøîÒê4û¸b@1¶sŒÿ#T~ßm<æ8Ÿ~]_‚G¡û§¥Kà`±«€äü­¿9Áì~ ÕF›.Õì1“Ÿò*6&1º²ì XûŸæi“;2oŒdvÀéõÏZcÝ(ˆ>Lôàp?ÿ­D¡šRªPK|Ãûv?ç­XÈd\˜`:Çô§4¡gA Ø#ê\~?Z½ç0?6X§÷[^>£µ,™JJ tçü;דݑ¿§rx¯uøf˜ð%‡¾ò?ﶯ,ø²¸ñÄÄ÷†?å\6z¿Ä¹7EŒðyö©¾àX1+ŸŸ9ôÿ8®ãZÔΗ¤Ix±‰L;~F}‰`¼œZæ`ñåÝÕ‹˜tÝ—"7dap1 HAž@RsצY'‹µ[c.ý-æ‚3+JíQ¼Ž‰òA8=óZCÄ„þÓï`‡ =ãE0XŠ .ÛÕIÂõàn¨4]_–M>Þ÷M”™6¬Ó´N¹;#9 ÎÜž>LqÎ _Yñ´÷‚Ò;¶f·mßÕyÎépsëéæñ^·t°$Z|öÃÍ€´žC ÊÛ7Œ0éó8Îr6dNcâr Ése,ë$qi#ÚbÊC¸¶ÕÉ#÷qŽ%oj¯oƒ¡Ïnîª ·ü±ÝåáÛ*xÌúær:ãEüG¨ØèÚ’ØIwqwo™±´‡!7 Çsp>CøQoêw„l5Øþâ혼{v'o ÐcóÏ|TÚωÛÃÚŒu¦ŽeƒÊˆÒ»·à*ÇUõþ!Uÿá:¼[S8ÐätHâD› „m¤—§)Ϲþï$û\¹¹Ó¡xa`E¤[YX¢ —â=­»\+ÙÊZ7òÆ|çt€ûŒìàsÔtäÖ¾¥¼7V iºæò¤8Ü—¶H#,‡A¼ZG‡ìuibH’êb­ä(d²€p½OåÞ¦¸ñe¼Z=®§åH"’IÑ£ËáBÃ’0vy9ôÀÏ!ø‹§³waƒˆÔƒ$³(çv+E·Ä.iaŠÞÎúG•a@ˆ '>¬äwýG4ؼw§½º´öR£¼sɲ0¬PÈpyà‘<ðIúãKEñ$®¨öPÚËHLŽÏ´DŒ…p î¤æµïÖÚ]>å/qöV‰üï›hØGÍÎF3YÃCÒD¡ÌŸ5¤W»mf`Å—ž ~£¡5¾ÑvÇ©Ûÿ<ÄÎí›7cwÞÛÆz÷ëÍ$š&Ÿy ù¨ò y³» XŒäó‚íCŒtšâkRÞ8fXÞ)% ©!Øw 8R§œ2TŽ™Ï6—¥Z¥± ÐùF("`Ç‚Á3×<Èߟ>ÚrÙÃ>Ž4³¹"~÷;p??Ôõ’þÓá¶>lrËSäb €¬ïŒÓçpsœƒŠ®š6¨,g3°‚ K(ßVƒ†9WÉÁ?NmXØØi·P^Çs!imÖËó ³œeŽ·>­êj-[B]Nêk´\FïFªUY@+´ã#?‘ê3Ž´/†•,ä·šùæ’TEgò²V‘NÜœ·$çwqM‡C†Öw¸µ¹š ‰?—#  ‘òdd.6çhϦ.k:U¶¬¤“>c—z“0 ‚§å`À˜õ«6÷ú{fFvŒ¼ÂA¹@2¬0ÉféÕ‰«öš\v7“\ÛÊL¬²#«| }ÿ? ª×zoÛ®Ze•—,®Wh 1œŸFÏ×Ö²£ðô py²)‹§ÈÖÌdäç‘ò/瞘§q£È×î©,"Ý¢hËà—ådçhãþZžý+bÒÒ;U•Hä2ÎdÀM¸ÝØsíXsèQyP¯ÚP˜Õ" °Ø]ÿÅ»®ÿv¨ítµMBÚv‘ŒfD+æ7Ë· ç·vsÔöícVµþи‚Xf†%Œ†ù£äüêÝs‘÷Î*¥®klÖ²$ЖLdˆÜÙÈa†à@9ÏARjÖ0ja>x”¤n9MÅIàcé×§ëTÛFµÝ'ïbËJ]¤Û†e;·–Ç*ÄqŽ‚¤‡DŽ'BÆ Oæ0Á,ü0ˆþ.Àt÷ÔGerÎø@¿áþ&¦™.w—PÌFN}zuïÍZòÙ—*–;Š·LÔ’³%´é¹vŸºsÛüŠò;’I?¥{Ïìÿ¦¸ÿú¯)ø°å¼ypE†0=¾\ÿZâp=kÕ>$ ±ÄùwwëVþ.Ý5˜då±Ðõë°ÕõÓ4“vo‹órç };¡¥xœjz5Ö¨mDBKF$/ŸÝ‡êz6šÊ¸ñ…ë½»ÃhѾkÈŒÛüåQ€vð3œï޽å1¿k&[}!e·i!–Ù;n:f:ÿül[ø§XW¸‘tÙnàV¸eoºq‚äHÆrzõ­÷Ö¦µðÑÔeµN6²uËm8Æzô÷Ç5…îâϧçLŠŠ”¢²ÃÉÈäƒ+ßw§R¦øÛP‘"–{%4A$Mv 6 +“×>µ›ã‹éd‹í‘o"ëvFŒD„‚v“»å)ê{Ž÷´_Ï®jÖ±,)o ‰6ôß¼± )ëÁô5&£ã ­3ZžÄXÅ4q´+Äd—WbrF?„={óLÒ|]6¥¬ÁfövðFÆ`ظ.I@¤ù@ ‡ÈõöÅKªø¬XjÙ‹Mæ5-$¡.ÛG'`îáíT`ñòKsGOÚ®cùŒÜ¨o+cþ›3Ù¨·øÌa—L‘›Ëi[dª@UEvÇ«OËì=xœøòŒ»Ø³l€MòJ®Îà®s€Àúàô¦Ÿˆ¶©:Ïi3ùo.<¤aL˜x爎O¸ãbÇÄ)©è׌0¼^[ʃÌà¦zàûõë Ûâ-«ZÆ·Vw+p–Âiü•òùoqÇQßÖŸ{â½æãì×vS4‘Ü` e†V#¤¾¹ÆsÔf&øƒ¥$P,vw­æ*ùQ,Cœ€BŒ6;ñ§¯k風Árð–Gr$CO»àdŒ·ÿ­Ku¬$µÔ ùÞN# 0Rì ŽÝ7Qk>‘â=;íRZ1‚ ·m˜`È3’÷èx=z`ÖT1Ó®îx¬]íß9Ìkæ™CÄ‹ŽqÞŽsRCâ=ïÉa¦6ùæA@}˜cÉàý¡zsó:Õ½ YÓuI’ÇOû; 1¤ØˆÊ •*@ä©ü«SWµþÑÒï-·lY x„›wcr‘œ{f¹ýGŸm·ºÅÕ´2ÜLd’DµÁÿSåà|ÙÛ¯r;œÖ—Áèæá㺂?=¤bÂß$±wqŸ›œn ‚ c¿Gà«u¼7 öåÌ»ÛݼÉŽ½Ã…ú(ú—Á±Å ,wQ#«©¥·Î¥müž=›ç‡ÔóIÿÀµ6¬²[¬qp‰Œ¬Šå“s m ôížˆÚž¬÷cÉuy1¬áð‡æî‘Á¹ÿt~–žº‚íV4·1Ã{.–\ey «+(bxë€zZiИ Ëo"ÆÉòyÌ•H”0Àê MŽ:9÷#ðõöÈü÷Žb y²C1ó\­±ˆí%@ÎH`Iÿ¿£Åqef‘ß2I3F$w ó‰aŽF@Õ‰DA˜F%ùÇ攈U• yãØÇ ½ÿ!JéŸ1[øpÞôÓ¦ÒÏü$þçëL&%]ß)À$ýÌ¿¥FÁa„ÜÕ¿ã×ùÔ$^`!áÏ<óßÚªËk’5Ã’r$óÉÅ4Ä¿xêe|î)ÆHíÜvïýj)ÕIgwRsØý*"i\pW `žr_ëõ¨ÎÍÍjÛ|ÅN3ùþ•N43ùxwÚ¥H;ôÿ<Ô’F¨ØÞê9'¿AüÍ+LHd/ÊAßÓ¿§4ؤvß½@«ÂƒyÜ!WƒéüªHöÉ(d!¡ºÛÿ×ëVS”¼Äo,wl†ÿ=?ýt]am§/’ ާçé×õ¯'ºùIý+ß¼ð6™·¯–NàF¼wâ‹gâÿû±ÿè¸êõ‰å‡åQóuîÎ+GáÚÿĬóóø×_«êPèúT—׳G(*0 ÉÇsúW4|lé §™#y$a29Aå«¿'‚22O=ÿ)!ñ¬ŸeûPÓCB±—¹Àm²Î¯Qòœu!¸äUísÄ1èFÊõ4¤–{ø÷Jêv2… pX®æÆzt¦Cã‡rd9EU™‘^ä/(P$äžÝH5¿|Ïø–ź(¼À~ؤ7Ì€xÚÛ½O@=&‡ÆÒÜjOcm§Dó­Ï®¶« KÉù2?ÕÓø…X>'¹¼ÖÆšM ’‚V'Œ6î;íê3W4u5K‹ØM¸Coœ8“!†ç^N89BqèAï˜Ý‰“–EÆw`È8ôèFmÚxŠ´}KR¹·šÞ+9¤ãùYþ\gÆs‘×ôº>¸5nêÚH£²´‹æiÏæ—e#ƒŒ|X¶Þ4²BeºÓZ;G·Y"+c+#m<ŒäGÇë[:–Ÿ…µÙÓåÍÔ‚4  !qœ)€FÒy=¸ëÎ&§ã­--$û5«OsD–!´¨$'<£×Úµìµ].ûF¹™,ä{ `@F¶áÂÿqO|¼{Š¡oâýÕ¼QI[w…Š$òÉ+»dÇóÎ*8µ¿ }f‹IF )d§s¬#Ç®6ŸC·Ž•gWºÒ4;5F´1ÎÅ÷˜öí^3¸îtéÛµ¯jíä‘èök°Cƒ*Ûí ¥³³pÿh±Ç¨5Ñ2§ÇQŽ•Ä÷Pµ¼ñ«ÄøÜŒ2g¿­q/áËØtëI´ý<[jqÏu.øÄA€"S$’;Ôc·=1Zš\ZìÁycòì$¹™ä@"Q‚_kd·ðƒÐô9?0¨îæÖe¿ÔVÉä‘ “Ë(*©€2HÎï0÷ÈÆx8¬ásâ%–—uÜ0!6αˆßsÊâ9ªF~SÔúV¦šºÁ»¶“ÎbòÝ¥g†5,r»AÆ}_¦>èÏ©‹Q¸Ö¡¿¹[8¤þV„A°ÙC'»ŒóÓîñóf¾¡¯ÃÓ=¥À+Ê©‡;O•'Ÿœ&H$|ݺ RÕÖõÙ-å `¶€¡âç!ãû¿œ‘j:¼’Ù4–Ò~òM·Z°òùL€OFO<9¶eÕZô_´05ÁLÛ4rG2†óÏ™–QŽnA=+:}WZž†Æå&ûýÆÊO–P¨N:‚3»¯u3¥¯Ëqv^CIäÊ_ÌT„—ÄØà|Ëócèk:×RÕŠØ[4HÀ²+ÎðÉó.Ø›nÁË¸É |¾Æ­jwWÖ÷ÐÚYˆZ0‰¹Þ&~LЧ•`0-ÿ5@ë”–Ì–Š¬Š¡¢H ‹ÿt1+Œg޹¨ßS¿ŽIP¬nÌÂgŽL¸ÞàlÆ@ÀU<ž„sÅO}tðhšeÁÃ1HÃï-Îc'õíƒÖ¢–òc¡Å}!UråYq…ÿY·=N~¹Ç¾9¨oîÜh¶ºšªæ@¬Qº‚T’ õíõôç¨]㼊"<²LÑ2‚AvUÜ=z=GLÕHõf2ÂXÂìñÂIY2¸ä×9=9ü9¨âÕ‹¬FF‹2F¬ —j)!óÎÊSÛÒ•oíÚE ¶±õÚ䀃òÿž)×:·3&̘³ó,¸bÂ2ÙÆ:azúÒÅ«<—É‚û‚HÂà a±Æ@-ôôúÖÎ7Ψ¡€UÀî3žÕn1—R#ƒŒzw÷㊑ce$ä®IQžp{qŸÎ¦¼ÀÓ¤hƒåžøÈ þÓùù]ÚþõÆJ÷Ï© ÒûƒS^5ñCÇ×Ý~ìYÏû‹\}zwÄŒnƒÎqÇ¥müŸX§ñŽ•¡Fú{[λ$@£xÁ€ùHã€xâ¯\x•E¼Ôbµplçû9Žo—.)9ãžÕV?ÛÂ'ŠîÚgœ\ÊÞ9Ó¿yþ‰}檆ehÕX’ñ®9nd^n}3Ç4¨6Ê÷|o‰#Ädƒ‰ çv<¦Ï>ŸA'ü%Z;É K¹RyŒ(ñÀ­¸¯-À$á{ñß#=j·Š5í*Î Ý)í$¸• 0Œ’‘—ʰ7÷éœÖ‡Úôå×m´»»Dûtð)mŠ­œŒŸ›þYžÝ‡J«'‹´x'º´6·M2Êјã„=·2¶0yÿVÝqœ ›EÖô›Û»»[ >xnaˆù«ä$g vìàö#ƃĞ 8°L”Ÿ±¦B•É'€'#¯^*yµýö+k,Xå–8–¢ '˜# #¸îžjÔgE¼Ðîu 8bk©A¶]²7͸®xcòž} Ôqkú2‹ë{‹´VpÍÆ¥g,#Îp0NePAãÞ£ÕG†t¢g–Æ)n/-÷Ư ØêˆJ§#å/8q‘ҫêxVK2nt«[Fe WìÊß(XÜã ‹üñÁÅÖ×<;|cÒm‰DÖÂf8{¬dP;ñZú%Æ4M-­TÌ¿0ˆl.Pdz O­j·cÒæ¼òÌ‚ó”rØ÷Zä®|Eu&–nZÔÀФì!˜ðÒG·$®2Tg¨#¡­-XšæþòÂw†xüÉÞ9òB« *@cçàçµgËâ©í4¶>lmq4%àfb‹…NT/§¯>Ü ÔÓ5f¿½[v·Ž"Q&â†'T`FÑŒ“‘Ž sŠÏ›Äaâi>Ëná#–à¸ù•#È`Ãoz/O½ÏLjç–ñà6I {üóždxÆÑÎèóCL(‘•Ýí@n]|쯔Xá±ËáÇËÇN½)ÿð“Àl‹ÊÒ¢P¡†éW’@Ûþ¥½y"žþ$u‹jù€FÍ0ççOÝãÎ\c9Áüt4ýAõ)$UÑ£i#mÍÊà‚ЃÁU¼Öã‚ë쨎ҬÁFp£ióŸ@ÇNªGU¼UnƒÎ–;¨¢VU“nq±Ÿ8 {(ÿ¾—Š’ï^XîD7V²Å…Üì; ,FpHÆØØ“Î8¨?á"…¥XÅ¥ë;àŒ¹Š+cº€Ã=«Ú…ØÒâÈ]­Õ–2A)'$ä~¾†³ŸÄÂY,Þ8å6ó)ùˆ]ÁÉEîû¹Ær§¶j?øHäkž(Þb {˜Æ†%~\àí`}=ûU‰u(þËÑINþZDîݹqÆ:çU}zåVŽ9ÂÈv h–}ꬽr0ÌÏôªÒkðº$ÁnŽT6|¾H*[=OߥT›]ݾhämœ©•”¨Ü~_^Ô]k¶ÑÑÊû°;O Æÿ¾‡_èh’ímÄyÔ2NÐ ã“þpi/u(íˆÊV@¡™YO'§þ¯j† è'.#.Ì£Ì.PàäOÐñõ÷¦ÿjÃ$¢8“Í’iWoÈØÁîÎ`ÈÈÕ€’¬N)Ç '×üõ«#"¬¥‰#œñßñãõ«ÄÃhß0' =(žFþ̸†ï-ÃñÇ<‘üëÌ/9™™@‚yïž |¥å¿å€â¼WâvOõúEÿ¢Ö¹ôω~:"º/Eß$€I"º}nî->)e·û@iâO-±Ô¸¹ô<§ã\ÞŸâ‹ÞÆasÄ¢$UްUbAîᔞø"¬j:ÔvW2XYÆMÿœ‡•v 0ƒ’¯ãŸÅÞ#ñ-¦œ×Zzƒ%çÙL«¸1­†Èà}y¦Áâ­;Lµòîmݼû4(Uy•'=!9=G¾,Oã+®>ȶ’‹ˆÊyŠì›g̬FG˜8öçÇtÿ±ù’ÛܶèÚBñƪ»@”äç··N™«ë¬X®iw´â;¹<¨!T@\€p9!@*œôÇ­sòøÓK±°ÚUœÛR®#Û¼ÇæÈþ~ÕÐÛk¶º5Þ«­È†8ÝÍ!‚ƒ¸ÏN‡#µfßx@¿á½Ó§‘^5PŸ¼Ü#;CÏü¶_A×§&³ <†úßJº“ÎDµVHCn/3`]Ç¢œ}êm^ûEÒõCgq¤Ç!òQ•–;·6ÕNqÿ<Éç€{ }äš[G}).›PŒÜ§•h¬\q†`yë äúœ÷5˜ºß‡~Î.‰h‚Eq¹m#‘3އ†ÁíŒz Òµ“LÖ¦Ô$¸Ó³5²(¸K˜r¯ß sœö>*´~%ðÜ÷pÞ4gíj«‰ßt‘©ÚW‘“‚$êzsPK¨øjëq·Óíe–ࣿ›áƒÌ9ÁÉÜIã#=ÅGeã0KjæÐ[ËuëƒÐ¦v² ãæÊyàO©­k³¡ÅŠÏk‹vÖñµ¾IáW;qÁÃ(õö5BMW‹2•·Ù^u»-¹>Z³p¿/*}Á½\Ó%Ò5y®ã°¶ÌOk˘ö« gUM¾Û\tôª‘Üx{ìËçÚÛÂÒ@“ù~Q$D̪„:ü‰Ÿî=3W-ãðïˆ$`†æX \nˆ‚±•s€DœsèjƒÂ—UÆ£6ÿe‡),†6|‹…Á‚ ¸Ñì`Z‚‹€¬¢FPp¸àø9ƒL´¹(ýÑdV*{qŒû¾”Ëý>ÞéhËþ'r õè3Œãù{T0 G0Í.Þf#î#‚OÌ >§“Ï8ÍKckf.q°šC‚ÍòðÊ z–­hbìÞIåyééŸÎ¦·ˆ‰Ð»¹(Ìß7ùÿ<ÔÁ mûýNvôíýi/\>ﲘ˜óÇn8¯/¹F -Ÿ,ÿ>õô„#ÁúQÉÉ·Zñ/‰Ëjâ/ýµÈâ½â€Ü@œägò®»À®G‡á^œuç&¶ž¶PË2ÚÈð³0Pò¨ búÊsŸåY¶šÌšµÃEogd³$ <†ê"ŒH B§•+åòr@ uëM°»]bí,.tÛ/&X.K”B­²9<¢Ï|çô¨îu3LµKKm5ŸL‚áã™ JS(Ø®ãÎÖBNpyv©åÖ´9.e„i~|‰y‚¿gC¾OÞeñž¿º~O<ZqñV.Ÿp"°’XI<ÖâÝNìrì;çzr{õÆ"´Õ|3'ší£žèŨ-„¡›ËW®xà(ã8ïV¦:m¾&£&bL\B«¤1+p¤àÇ)²ëþÕ&uªÜÊì-÷Ëj¤¿.U2zå£8£éK7‰ü?(ŠàÛ5ÌÐ3ý™M¹cUV'€JŒ2’{cžER»ñ‡f›´»{‰ÿqGää¤N ILAëWô}wL½šòÎè÷“»#îwó†Ä;#Œ+¯ËØJ§-ß„ô†“L½³¶Hí‚¢Ÿ!¥vÜ ’ß/¢Žç ô©Yð¯2¢&í¦PÆÙþð%‰'6a'Ô”öW¾—1ý’-ö*ÂRÞF,͹J… žÙ0+Y¯4;­>ßTR’YÙÜËå7îú /ôç;ŠÈÔ5O 4oæA4QÖ/)аûÁ@ÛœüÃ=×qÎ9¥Ñµ¿@èñBlä›dj79ݵðHÈ4ã“ëWøvúÂâý{[s—w/—ÊË•Ïü‚LcŒ õñf‹£]ÜGciwt­4H»V4ˆL’CuÉûÀô«ÃPðÅ•ŒºYDûÆ|àÌÌlÞ'œÂü¤à¯¨4’¿ƒîç%¥‰æ*sHûøTÁ œ†ÀNŸ1éÏ5§¡&“˜4~Pè¬äpªícÁ+·ž§Žµ§yo õ»CrBGFÚA !¸ ƒÈ>µJOè÷J“Eæ+å›tîs• [9ë‚ÝO<òj´núŒ«l'ÕœyÒX¹”gœ7,O|dŽÔÏì]W—NH‰ƌї|14*zã<ÔfßD¸2NÆ@U÷I#¬‹±€ŽL¹lcb<úcÔTáÝ:öÚháG‰‚7±|/ÈÉ ä‘†G\õã‹Ú]˜Ó4¥¶Œ¨ IÀR“È’G<òOSU[Ãö n°ÿ¤yJŽ‹špªÝ@·ù9©Ÿ imwã1s±° n#$óØôçÜÑ'†­¤·kV{‘™æ*™3É?7PH%‰9' ò­=Mme³ûÍ×Ùòþb•`(Cäg à€Oqá{Y¦x?´.ž®ÌŠéó ìÍÆÞFéæ;ŠÔ±ÓÖÁ¦Y$IJ“¸† <ÉT5 ÖâWiîÌm-Йö¼Çå…”©à9¨!ðó3u36ÙžH„daCJ²Ó'”üzf¡>¶Vb%”—ÍÊ¢«‚K(c÷R{`ÃV/h±[\³A‡Mè‘ò 2uUùˆÜy99­K+qgË™I^TSÓ,sƒíœþ•–ú+ w­Ëü²¼Š¯m¡ÃnŒŸ¾ØçŒÕFðêÆÛb¼ùTðYrB(ŒóÏ1/§SM“@’UwŽè!i¼àDA›‚Ǔߖ#Üqë˜mì ˆ¸ûAp¬ÜÆì³Ÿ\q¿®;}ríJÌß~ñf>_–ñ¾åÏ Tä ðxëÏÓŠ­a§=˜¬¨Í2á°»pw1ãŸöÀéÚ¢›I†]Anšb›HÌh£;çØ£ðª?ØØ¶ ‹»o$Eáu'¯S¿?ð³g¥…»†éLhê@bÛýì㜌ï•o@ì!<*(ôê9ÿõSáº&PìŒí' ×¹«é)ÈÉÎF}©5 ‚é÷RIòX€vž?Zò›™·ó‚<û×О,¾Ò‡qj˜Áö¯øšsãíGéþ‹ZäkÐ~!`_BõÍw š °ÀŽqÇùÍmê³XÛZÆo£Y!Þ(`[·^?Ï5iâ}·CfažTOÝÛBòB ðOúÕ<ÔÕèot94ë½UtˆŠY4æ5° Ø'{!ï’~½qUGˆ|?§G%Ì:(Q+íÛq² »ãˆ¤é‘¨««Í ØMgö› ’Þ9h÷[£f(¬ÍîK(8ÎqíT4_MÕl&º¸Ñmb‹LŽ9¡TEctóÌ·ð¨,üMá+{´’ÖÁ-¦ÛÖ+0®—r—Ÿ˜Ͼ)“뾺œ4z]µÄ× …ÚhTn Â<î–Æâ28í‘Îiâ-å·´[{ifŒM+,K¼HD{@Àçpœ|ÙÉÎ9­[…ðÍ’Ù‡Ò­ˆ¹Röñ­˜Ï!A8ÀÁåAÏãÐâškž…æ+Hc4]-ù䇶ã€f$Ðn-šÚX\Ùí@Hò¬ÅŸ‚;³uêzd‘Wnn|;¡\}žh`·w_4(fÎ@ê0çÛñÌþÐðµ¬×=¶.ÒÍnÉÃFÛ€gîD}ˆNîï¶„}—K·žq IkE·å‘ɱžž¹ïη‡î4;Ç:…ŒBaˆ‡i u\žG®G/*¥Õ÷„u ¥¸¹ ,²/˜îc-Ç)Î3ž*Œ¯à»{ùÍËÈSÊØmå†P±žI mÎzÜ’OÌqŠÛ^•mký¶œä©YPe#–9Ã1æ9ÁÏ­eÅ«è §.•=Œ°[ÞÀ·jóÀdwü‡®9^;Töš†5Õ–QjeŸdrJÅœ”Ü Œ>~öÐ2Tä㚎8ü*[¬OĬ $”ÀDTrzaaÆx8ëF’޲ЧÓ×QYÎXÈ·7Ý(¹=ˆ9é–㨫Ri¾k1¨Ü80Üf/>K™™ò²u-ÎT°÷Îj m|!<2†hî"ŒÉ!AtåA<>Ð[h?8çŽH>ôÉmüxÆây¡[‚œ=é,ÑŒädîç=ëcG¶±†êú{k‘s<Ò+JûÁe]¸E$uÉÉç’j]rÉõ-2K8Äe™Ñ±"nSµÔœŽüÇÿ®²-ü! O%Àž“(ÉþŽ?vË3JBüßtî+@98ªëà´Ãÿ¤ª»ev·aduÇ'ýXóËìiW “,“ÜC1,0M¾J6I0 c€|ͧ=@#¿ o™¬Þ»FÌ{4þyDƒø½bñö§·Úà]DF÷xÓcˆ±Ý•Úãè~‚¯Ç¡Í†›JŽa•$+Ú_v8Î9êAès„§hX<–ï'Ùà€RUBIVîeztuVþ“-ÞŸif!*²G.à’¨B¤’xÈa’NTsÞ²ŸÃú³HA¸…±.e-4‹ö‘¸°-Áä¿ø‘ü9¬Én¸¶yÄ>ZÏö—–¨yÛÐ2–ÿsVNª¬ŠÖò‘,³J@™Çœ­0xùr;út&©Í¡ë€ùBýC`…fº˜ÜÆ;3/Í×äÏZ|šn¤÷6æIc‘ÒFŽK¹—¶FfÇËód¼•sQ‡P¼Ñ!·µÍ½ÎÅ/ºáÉC´ÿÉb:ç=k9´ý]e{u˱>Y¹}½b8S—;eûß•Ÿ.ãJð¼ƒÊg¹A# Œ3’Yب©ûÝ{b³ÓM×RH‡Ú÷[£ÆØy˜°À㜅éÓç#°4ÉtÍv;tEŸÍ ,^b¿9GÏr7ü½Éªíg®ÆwGy#£9íÊ Ç$zŒníÞ%X¹¶Ääþð1m¡@8À8bp:±éÔ,vú°2NÓΉ¢6.ù vž½—¾x¯ª¦¦fO°²…/@HäÄqø §ö]B7,nд›ðDd}ô;€ê8 JðêfH%Q(P¤¹hðI1îý“†>µbñïdº¶ŽÙ\ÄoÀ\ã#±ç¦zŽÊ=Q¤„\JíEiCǹÈ$xàŒgÞ¶!€™³È)ór3ÏãÒ§¶„´û]…+ŒäúUØ™c&\åŽ Ç~jž¶èt»’«»‚Üc0 (ÎGLìÿ¾G¥K‰<<¶ó'Ùm®Jêmv¬ÅÑŽwo›§$S¤ñ†Í¬ok¤Er¤LE° ‚F®â½x[o|žzÕ©¼Eákèa’kh§ŽßbÆÒZ†îU`Ÿ»ÆÞ8çdÒjúÆá×¹Ó¿²–;y|¸îžhåÁùy8‘ÛƒíQ%ç„!’ÛL¶Ó`••ã¶E6ü&AlžH!NOSøæ–MKÖúÍõ•æ¼¶ÎJ!-æq–Î89)Ÿ $ÓWðh´mÑÛˆö¡ÇÙO*Áqò÷8ÿc»Å«ígD±Õ-­µ;xcŽÒÙ'¶¹1’;†Ðü¼Gǯè*¼Ú§‚®³X¤A ¥³’~/÷›þÑõ4é–ñÙÈl·EyÍ‹‘TÈIœ|Ç‚9ÏJ%Öü)©_<ú„qIÚ RvF`É™å@ãpç»Ôâ‹eð~±r–6«Ò<`üË ,ªœÇ;däg88>ÍÓ¢ð~£2G¹óf‘‚¬‚U$ƒ Ï\ þôÁ<÷ ¥j~Óîæ°`.etó'‡åÌecçtd('ÜšßÁ©§-ú"ýŽek`Ëæ&F60žÀ=0¸íUîcð5ìí$ó+JÀ#;O)Ü00KÏÊ'Ó8©!ñV4>Y’Xã¼y|á+cœäîÊ‚ãoô9¢Ko]=² gŠ$‚ö—Tp£ïÓ^üüÕ4+ h·WvñÈ–’£ÞIóŠŽXž=@àw >ðÞ˜mažd[›eYIn Ÿ•FØé>Ÿ!íšÏÒlü,Ö ÈDI w–àÆÒ"œ7Ý+Ó xÖ¹¼ðì¢ÊÍ'Žu´’)!Ë÷-NíÃ8=²IÇBqO·Ó<*þMœ/jü9Š5¹%±"Û~là¡'ŽÃ=«8éž k9­‹Z¤"g%$œ®2¤àx¹úšØÑEP¼þÌhÚàGÍä¶@P ôãß§µZÖ#º}5…²3J6eG Ì¡Ô°É r þuÍ-¿‰,¦¸XÖÒI¤“hh÷ÒÊß'Ì0pc<œc=ëCX]]â³·³–tº{yw4F<¤– žßÒª<~$eŸlÓ;“:ħÉÛoQé¥IÏSYðØx›OÓÞ$}ƒy†0Ð)sü<Åןà ؆ÇV…V­í£YG!„Ò…U`rÈ9ïÀ,x#§zÆy|@Ö¦)ínfW•‰‰NçÝ÷¸PyãŽôo¼ :Ö¯yÚÛHò˜çl$vþfÐ¥yõ+Áç“ZCS×gš ”O5mî£Ï ØFF9Æ0PÜêöú6ŒñÃp×KÙ„ˆIfò˜€ÄŒŒ¾ÐI§Ms¨Ï¢j3¢7ž¿ñîÆŽÿ"œì#9ÜXtíÞ©GW¶žè¬wÛ´Îádµ“*»ãòFÈqƒVõ ­N >Ö[8HžPÍ"ˆ€B39\°×óΟX×·\ì†c’6·•‰=øSÇÌ9펦¦šûTEä«y’I¼¦Xv„ ¸\)9$ûzóU5-SSòØÅnK‰>THÝå‘1’O!Ô±Çaž¸&¢mjù]°ÃåªBb‘ “†ÝŽ€g+Œç4ùõ˜t¡?•‘æ(Ì*b»ˆä…!Gýô;U+½Vø®×µHÕJ©r\"ï\©$òpwÓ·­R—Y¸_; ~Ûó•a³9éýóØt?JšûQ{[˜átŒ,¼1,A\‘Î}³ÿê¬á¬Èm&|\£mùí #¯Ì#ZzšZ^Á•e‘vá›ÉÀ=1O³ÕZêêÚ%͸"pp­ž€Œ’1Î=O¥t0$`ÈH –#ƒÿ×=»3A ‘Œ3s×ÿ­QF\í2.SÙúçð¨5ˆšM.ë2ÀÏBr ¯7¼æ:¾Isþ}ëèŸ §üRÚaà³GŸûäW…|Nÿ’ƒ©ÿÛ/ý•Èâ»ß0mb Zôo º-¨R>èü«OXþÊ’Ö$ÕteÈ@U‰ÜUû¿ìî϶Iâ¹ CàÛ&µ•'ša ´šbÛ¾`Ï„àGLÏ×N[ß 4ŸfšÚ9Z"-Ö?²»ãi~ÛÈR’r8=3NMOÁ1ź8í^4o–ÜŒ~SÓ±Ç=¸Î8©­õO¼’$–Ö°`¨|–É]ˆá´mÈp˜î0=†­¼^ñd/¼W JÑ”n |Ø8Úÿ“V%ýç†ô‹ýB8´˜^êÄA1±¸´˜%zýÝà“ܶ)‡W𞫨I%Õ‘Eš/=n%Wð\ö^ ÈÏP£¸«ûÂ"1Ø‹(Ç• òü¿1‡8È+²OCÁõ§‹ß kšÈ‚KS,¯ÇË…õ ©`Û'_|T·²øGN¹¸Žéü©8ž@ ‡£HêÙÆ:¶¥1î<umiis4OY· È1œ©Qí•Ç·¢©Êž­'ÙÖm–¯,qþðŒr±AryÁ=«r{Oi7êó/“+ƒ¶Ydv'äÎIÏȃ9ô¬á?ƒô‡þÐG‹Í‹tˆGb[s»Ÿ½–“eº`Ô)„.çšâuX¦‚æRÉq; ?˜K6ÝØÁhËz`÷¥»‹@¼X4T¸xíìfŠDa9elZ±br<¶Î:íÃîôO Z\Úé·»VbóG¾b‘²=¹ÝžC ß è^ x‹f×níGgÝ?x¶ð{ÔÚŽŸá»m>Mi•ç‰ î–ÙÉ!‘rìpcLÿ»ù¶úË·’Ësq{hZDØ]ív˜ûÇéV.´¯ø‚ô±xneLN#¹ÉHe#ñÕ½:JȺÐ<5*Iê1G9Y#Y Èb­ 7õÉ~8û¾ÔižÓæ±e¾3Ïsk‡ÞŽN7‘Ó§«Y´=E¼´¾hÖLÁ-ÅÉ!@<çæ`1Û=…e6•á[»fÕVü¤G)É‘ mr]׺r7sÚµ¼;e¥XùŸÙ·ïq$°Ä$I$VdEfTAãŸAïZzµéÓ´ó:ª|®ŠYþêå€,O`ý;u¬ñ5ÇÚ⡆0d„<€—\)$Ü’@ãg4š 1ÛÁ2ù;ؽÏÎ[ÉiN@\ß©«CžuëÛ·#¹“?+Hè{È:÷nüNïÆ-&‹<"[LöòI:¾ÖUS°Œ¿,FÓÎÃõêaoY,žL¶W+.â¨>VÜÁÊœOpzõ¦/ˆì¤y±Î„2…g@6î yà c=3Ç­F¾(±TYäIå…]Ÿ9*ÁÝŽ‡·ô ëÑÞi—wë*Tyo,d+p}GÛ½FhÞⱟ³ÜÁpO˜¨$Ž9ÃúéšÔöñoˆDSÌD`ñ’rÎ賆ª±ÝOäeäGÂ2'Ë' òŒäç2(ôéHú½²H±¥YÊQãÃq·×Ÿ§^¸¦Üj0Àɸ+§™Äd•Q·qaÛº{Ô?Úöò1;™BîÉØ@¤ãÓ_JÓÓoú2íåFÍ€#9'• ŽqÓw¿cíW”írê£ eONGºš!×2`·8㎤u?AéR¼ÂÓôÿ]czhwJKcg§·zó Ýžv=sÏò¯¢¼>Íÿæž#ìÑãé´W„|KÉø©“×÷_ú)+”Åw>9O/[7eq‘í^™á¸ü½Û¯1Œàf®jbÄGl×í±Qå°;ðzcž›²=3ž+—y¼.eŽaª¢4hÄùƒ¾ïäñƒÖ›mªxrÆæY7I+({´šEa—Ý)1ôOúÌ9Üzçê¾vû;é’,yQª+7Ì#пn@…kÅ(tÁ©Úؤöât€²Âà©rŠ0àl8ƒŠšÊÿºl†k’±)crJ8@0äœÅÀÉSuqá´Õ–ÇRO%¤‰§I™cŸ$NXÈÆ@ïU³àÖWδ ³½ðªY—OC™c¶M6òÛÂâ YY\G}ˆ—QHØO‘Ë3s×ç“’ œàU­.Û¶3@Ö׉%ż¾\e®ˆ#~ ãhÀcŸqÿΣ¨ZHÛ/.îäTŽXflÅŒºž»àŒtúÕ‹…ðŵÓËqukñLÎÅn6r¡[¡È\þÍGy£xe<µ¼QƶÞT;®Ø +/÷¹HFÚëÒŸ©\xgT¶X§¾²š8IQþ•ŒnR˜Ènబˋ E뼑Ø0qöÜyä7+óóÌÈë銱.á7‘ÌÓÛ $$HðîË™2ÍÔù’ÄúpÈ4ÿ \éð߈ŴÏò ¦Ø7«È@839«·²hZ›As=Õ´³* Çr>b…Áç•CùzÖm–Ÿái4ØÝªe"yðê$Q·sJ²g=ØJ³#xpéiáát«lÜRP0‰wéŒ`æ©Áá/ ÜܼPÉNá(™]Žmø õŸá Ž9«ºm®¤êÓÉk¨DeŸ(ñ´èv’ìÛBýXÖ5µ‡‡oµ š-JG!Òìƒ*…s¿ÊJäYòAÈÏQVbð–ƒÅ%­ëÂÖàM¹%¤2–ùy#æêAäž*îí7[±µurÒiíí8eV'Ëûç#üúf«éB¶É,¤DW¢fÚcxùOAG9úÖÞ‡¤[ivóAmpó³H7»2±RT €Efúõ4ËdšEi3,qmE%œ(ÇNäViñ€‚V•Ø4/+?–ŒB„iÏá;mB]6âÛbÆ3#JÆ<¸$¼Iûìwc ž ‘Vƒx9„‹:+;®c†%7= síÏ«pj~o¤MrÒAèþt¯°K3H͸ÇGV$€`Tšfá}T^­•œ%m]Ä›dMˆFß›•Ú©Î9ÀúÓï?áÖ3q4–·,„ f8Ù•ÀÚ—\pNXUC…~ÒÖ›ƒ$Ð+´¢íÙWBŽü–ùЯSƒj¹§iº³§ý•-œÛXI%¼cÍ8;”g7̤8ëêzV/üR‘jOfúUßÚ^픤“nLŒ?3õ;ÆpO©®ŠËHðü1C©Zü‹UR&[–(±’[nOcY÷z„.îšk›‹C4ÎÎ1v9.7v/œwÕnî×ÂÚŒQE=Í«µµ·”ª.FD,ýÁ\qëÎeׇ|9,±ËmªÇjDé#·Úò2de° É óǵO¨ižÐâ–9šXV[y“ÊWÜ^/-C‘ž4ïž=ùOì Q‚;8µd…äiÒ®”ƒ“‚@ç#p'Øç·fmAþÏ·Ó.n£TÓåó¶Ë"»‰?0aŒþƒ¨Ç5›©iŠ˜j/¶spÚDbÝY[h™@ã¦:ч´­D±j·'” ‘ †4ÜALòaA“ǧZcøsÃÒL–m«\‹åج»Q–PÅ‚qò*N3øŠ»¤øgG²Õ¢½³½•îc]ËÌ„6T®â6çÙàãŸN*SFÒìÖ;›«ûˆšÚvœíÚK&W”)8Þ1UÓÁL»·—;!bBˆJˆÊŽ6Ž@oÓžõmâÑ<4÷ <òFשóHÐp ŒœªáFJ“Û$*¯ü":XxßÝy¾W„ *—’ˆ=y?QkMð­Ž“ªZ]Çw,ÓB¢0¬Ë†ýØ@ ÍixÃñh“^ÏòJnÝK©ÚüÌÜ÷ÍijÚÜZ¼*°«+òå6•`Àç Ž@5™ý•¤Âdxö,€)[†RÛÍ×,ÄÈÉÅ-©Ó%Ò¾Çm°–»0@+&ìò{ýâ~´ñáý&!,B"Á•ÑÔÌì0ä1êÙ•#¿9«°,."Lq¯!v<÷$äþ5‰6‰¢Ù,1I¥ Ä¡GtFH xíÞiZUÁk`—-O’wM.@!N2[•¯|V½üOnb‰Rêãc•9RŽz€k>ÂÎÖÊAº2;Dä14?(Éã±ÀëùpÛ %šFi”NèåVC´0e Ó?(ü½ÎsåÒ4«gޏ¹ŒÜ8*»Ï3 ¸cÀüp84§Ãw-“,Åw3K™ÄÄ—É8xÝ1×Ú®Z,v6L~ÔfŠ&e’I[v à€€1ÛóÍUÿ„~ÛÉ7]\„•„›Wi ûÃ"vþbG×œŠ§‡¦éðA‹é’+U-ò…@%sÎÞ2Ê‚x#5'ü#VÖ¾K‹«²ñìÚ@  ÁùŽqØýjÕ͘գ…çr<¹–M¨„nã€xÏñgñëPA£Ccukrg—|J±‚årʨ= ?Sô¥žÉoü™VçkG+P†ìÈÃÜòG1Y7z%bF¾;¾Ì`XË.p#dÈFÏó¨'Ð<ùähÁ“xb€†-‘בó½8éÎ[>†—ª÷ßÅå™I%P9v~ 8<¾*ŒšÇò¥èd8a·%Xo -Ûy8=zTRè£.Ðãò³´+žzüäŸÃ¥jG ègºÞœö¹íô¬Ë6Ig»V™@‘вä¸9<àç­Oc¤ý–ågiV@€¢3•ûÃŽpÍÓ•j¦á (‚z°<¸öëR£ŒJ3g ï×4呎㰎ŽsÏøÕMmäþÇ—1;ÆÞƒ=së^w¸0È`6Žõô>†ìÚžvŒ5´g÷ExOÄ¥#Ǻ—óËÿE­rœ×mã&'Äh1Œc¯Ö½[EȰ€c À§kvú\ö‘Ū­±„±ÙçH*@Æ{ãuf,~¸¸ó{I;I…¼È ]dçæãæ@qÓŠEÓ¼%,Ĉ´ögxÈX§ÀéÆ \{Tñøg §Ù#‰m¾7o³ 9ÝŒp%¶›àÑ2Ooqh1 Tt½<› ¿7ç?(ÇéV´kÿ ZM{c§É*º!ßq¸Jvª„±É*àz Š-'Ã#I´ÔV1mnè’ÂóNWoW©à~ õªvš….­¯¼¨{7h¤w”¬a”®HÉ瘗9ô¿:Zqðþ”­so©AsÛ ÞèÛ ,2qÆÌgØûÔw¯á¨îþ×8†[©.cy6H¬Uö˜”‘œ€3bsRi¶ºß…§Ñ´k¸Dwp8ÊÌ¡Ô •àð õç¦y¬÷Òô .úKK‹É…ËÃ<¬Àí9dppFï3r þðŽàã™yákmCUº¾·ÔeŽâWv 8B­p1×'R}pj„^ Ò$2¬š„°¢º ¤,jI8;‰òǧÞéÐÒÏá­M€#êWiö™J‘˜ÆL¹RpÀêiÇÂD­mnú…ÈÉ™ÐV%\ãnIÚ€àñÇLmižÓ´f+Ø.'2Å“±ÙHåH9ã=ê[ïÚ]ê|×yð¤1}¿rœ{ŸQˆu }7W¹·Ôõã‹O™ÃmPÉ"3$t1éÜt«Wö¶w¦Ÿ=ÛFãPÉC‡ëØ/#>†³‚­’‘ÞNIO/8äcÊ x#÷+ÈîOµV›Á0Ç%Ô×÷ d»¶Ú¹$‘Ž„dàŽ=²MløkÃ0è)pa¹3‹§” nç]ß ­ Rɯ!‹Ë•¡– VTÀܬW<ã#ŸnpzÖ*xU Ž# á_³»< Â1–‘$!€À#(0Ü¥V“ÁðÜDQµÛtB0D鑃÷¿é¡?ðV´MëNÕ¯o®~ÊV`ÁnÞüŒdôä’=zqU?áó羑ÖÖ3$ìêžPmê^6ù¹ç>_OsN>‰°|èV%f+’ ̲maŸ˜ »GО;¢ xEYQ‘°0ˆ¹á†ÛòúG=’×Á°ÙßÅv’®¼•€)neÈÎ}%QÿA6½áõÕ.w¬Éî 2nÎ0ê@ Äyú‰µ‹ÕRÙ|ÕF¶™dFîFGN™ÁéùÖ±×ÂFàE ÷*Ñž%ÙÕßË‘<ß÷ÉpI?ÜžÖ׊]ÒéÃBß½ÜÀ«œîÆÒX¶OÈ‹°iA¤]ذŽ6¸3±r‘+’p2=:U;=î«cæ¼q‚ZEI ‰@TÀRHl—MÙÆ0ì9îÝkFº¸`ð4›i-ÎùJ‘¹”Ž@=ý)–zn«o©A-ÅÊÉn¬ØQpÄ ÜçnùøeF6÷À©u=+Q¼Ô`–’ UH[—N1nŒ²±µÉ ežôÊBG´–•)» Œío›?ÅÓ’jEÒux%2,îI+I"%ÃüÀÈíÇ÷xe錑Ï\Õ{];TŠê9og[ •iŒr apò Ï|Óo¬/.>бIŸ2>}¸O,‚¥FÞ çÓ郣 ¼FÙSËr±…e]Ü«_¯__zç.mus/Ù‹¬!DD˜Æ`c?FüûÕy´»Ö’è$o e•Tùƒ$»O'Ù½é M~i‘ aÐ|»¤êIôÛþE8C¬•}ìß»$#¨ ÌÏ^ÐsÔñSÙ‹¸X}¡$HrH PYÏÌ9Á^Ÿãµç-À} ¯Íïýi"FÜKe助ÅH¹GËÉ’øÕ/nHq±v¯×ŸOÒ¸+—f#sg…Çè5á¿å'ÇšˆÇAÿÈk\Žã]Ÿ‹|T=Çõì6ß±C´ðUqžÕ¿aimmöÛŶ‚˲±x1²ìôÈcžøê9Ù4ï‹x®ÌÂŽ41Î !Uã¡VŒôçqW—á§”Îob4ë9arš@¹ä7ø½6”økþ7±Käû(œ…•Q°[xã¶[hÁ®*+oxjKoÄ“µ¬Ñ¬Á¥—hÙ·8>€ŒgéÔwX¼/áXçŠá5iW÷Ѹ¶ L ÊŽO?.s×6%ƒÃ÷¾·ˆÝ]>Û÷1Ê€3Œf8RAaœwÈ= Okc£Káëëkkç:uÓÌZPë„ÜÄ8VÆ1œàœýqT‡‡¼>$‘ç¾2)-æ,² V.%lœŽ%“ÇØQ7‡tï!-}*ÉæÅòŒAT‚ÌT²‚#ÉãÔÔš6‘¥é÷ŒÖÚ²4°¬®Í‚¨,Î0Û†2@j¯ÔˬA¡½×ö­æ«42yHËe|XK¸ ¤’ 篯Cáí>/]é]Íöiò]ƒË‘ƒ·ŒòžîqŠÆÿ„FŠÖEþлh¼¶,ìéºã9Ûé#þžœÌþÓ'”_Ûê3ùŒÂâ6YóPqŽFd?†)÷zn•aá¸|?w|Èn[ÉŒ %‹\ŒsÀ Ö†‘¤[éWGs,8ù¼Ìqó»öÇñH }k›Ó¾Z$Q ë2_-’Ay] ŒŒ†ÝŸ_¥Y>²Sò_6L-˜Q“”‘ LùŒO¿5bÇúu•ò_® ¸²šWwtUÆàÅ•›Ðn$ß­V¾ðvŸ¯j×É""¨ƒå*6Ÿæ;Ò7€tã Çö©ÝcVfþ"¯¸ä2Ú¸ÈÀQWá·þÁ½Ñüó¶îIÌ)’¥Ž}{V;x6ÊþYãƒWUH²•Š5lgÍ#pÏ ùŒ9àªâ™uàKFš(ZHYSrÒ1ù¸úŒuàLÖÔz¾Ÿá­VÊMA]™¤’v@%—òyîrOãV<3£Ã¥ ˘o£»[ÖI  G9$äzãÓÕv;Ç·…l•š?0V' ì˜9 Oçi䎌¶Þ"Ž$-æL¡›í L¹™<ÀS˸#1tßZXÇ ¬2G"ÛªîU€ÎÖëÛ=ªÞ™¨_Þj×pê—rÛ¼†£M€o˜œäŒ``uw9­[›a§]E£Ûˆå• €N6¯¸ÎÁÆxÏ^õÍý]´ó¤µ¶xÖ•Ï‘½³,Ï‚Ù$pÑžã8ã­ÿ„‘QŠ›”Å&îJ‰ùÿ¦g§<ð=é%‡ÄªP=Ám²2Ž8Ë2ƒ•bÜÎ9:šTƒ_ûM±’YLfyZPcˆá<ÀOO”§9äçðš=ž£öÍâÈ—7Äy ‘ (^ÀsŸSMÒV‚ú¸\[ˆÂlò”*‘xä ˜È? MF¹¦½(“³«Ä»þì®g 7sÓ zÕyíµ£ýÔ×$±Gq*´ŽdÉ̬y>^ÌÕfömN;K¡ã»1Ÿ6Rê%(0„g€Xcqàâ¬i’ÞOms%ÈB–ò4a¡̸ÏÌ “Ÿ”¨ãœ« Ŷ›UÒôÛ9˜Ý]K:Fd†X%sQóg’A9=°qùΚƴط{±³HVRáz¹üÇŒŽûy’iæ“D¾’ç÷d4i›2˵ Èc‘É#ŸOj§<­ö».KÄU¸·TïUfó€b¤ðn°'ž´ûýBòÖêH¡·Þ#„º³ÄÌ¡‚ƒ€AÁÎX}G|b³å¼½¹½†žQ[… Ñ+0y¬­Žzm Ns÷‡µ&§%ܦØaE ÊË#7–7Í·¿Aé€AÅPŸUš–$T‘|Æcœ~ñ€9Ï`ôç¨â«GªNO–ˆ!0[ŽX >‡ø‰ú A«Ë$//—"0J³œœ¨9éÓ<}xÍZk£2[2Èc?iòKD䡈Æ{ (5´ÓIq´Ìè·c¸(SÊfí€yö­ØbpìˆT(\ôÉqýjâ,K!A0 îöž(DàoÜÀÁ?ÍñѤ;, )àŸ^ùÿ<×?Sƒž½«èÝ @ðæ×þ=cê1ü"¼âI'Çúžé—þŠJås]¿‰Ø©È?2ôéÖ½“M‰Ò3׎¿…R×l¬n$±ké6ùr—U 2œ.HmÀŒ`uàôÁ°¤ð¾¦1ïî"ŽÔ,œ¬{¶6ä“å)8÷§CàÝd·+¬Nï‹åÆeŒœ®Ì)AÎ"N:ðy«-à­/ÝÍ©MˆˆT¼‘Œ(T ÷;…UôöÏ5xZév^»Ó§Ö^kAnpË"™"€ AÈÂç8ïôª6þ Ð&³(5;£¬‘î©Âùª[”ÊüôéÔu»ž‡yáµþÒ•ío®KG;²£É#K»åïÆ:f¬Cáý Òîšð¥Ìs:Ì‹!xAò™_Ìdìwc˜ëSXø:×F{K–½+'2ÿªÝ¢óŽ|°Äã9ôëL¾ðÅŸˆ¯/ï¡¿F7!HŠ\À@Và~Sӹ皬ÿ<ÿ9^ý61”…Kl*äÄ`dtÁã­A?‚Žú\®§Lfs ~Ṉs&Õ`Ù85vÃÂ“Ûø:ãEšâ!,ÎHš8òyÁÉ\õÈÇ «Yøíç†GÕYâIÖ_'Ê*§nïGê`½úTð¯d‰w®¶¶ê–âx`Ù…TeÉùû’ý;S£ð,·2ÅtºëKŒì`™Â2°2…ÃdGÔWG.s7‡¥Ò¦¼Y${cn³±€c XŒòs“Æ;rýGmnbóÖEÅ‚#*T¤h‡¹Èù™=i–ìµy£ðÈÔ.œÊÂâE/ÑBùåCöBóô™câ[çŠH"D¹¹k£ù¡ZaæÌ î>Uç†É#·QñeÃ[Ý,Q¤Lm$¸†gpiGduR9ÈUϦâ1ÍɼS+Hlà“÷Œæ\mÙ‰DY|)ÆíÁ‡¶j¸ñx1û“±9q–Û†Áòþc—ÇAøTÒj·ßð†^ê1̯s¸ !n0’:®00píέR>"šÂФ—1„³]òH•#ÉÂ| ù›¸¼Tm¯_Éu ¸ŠÜDh¤E›;vK®wÄã€x>ÕfËt¶éœxšp‘¸RUv³o †ÂƒùõÅ«ÝRK+ñpÈ»SpUËJ¨_çQÜ_I=–wnÒ[¥ä‘³•Uc°¡m½=» Ï]~êêî¦$BðÄaKrY—ÉÞ¹wnvãê9«2k—FöwÎhÕ!HàšÜÆ É!]Ä0V8Ç€yçž§ê7w÷ó ñ3,R¤¶®Ó¬æ$ò”a×Ì‘TŒ·pƒŸZˆx™n%…’Öä;œÒ=À ¨w6 ùq"õ5 × ¦&[G ,jÐÄ6îbKóœã¢7Φ–åàtŠH Hà•ØA;Ac“Ø•ÿ ƹÖÔFï'Ι“8ÓîëÓŒzûRdfHY~mäe§Î“œõ"’+ø.ídš<¤k†bG¶ïäG¿5 ú½œ¡hÕÀýá/ <`6ì`ã†T°M ÍÚ¬¸–â&çpÃ@8ìG¥iK#y‡=AwíhJ ¿.3†Ï¶Jþ´{ˆgk†Òw˜º( å¤`ž§9ôúÑkàkHÌL·eDqÃ@¥ü§ ¤‘ÜàMEÿ…Ý´Fà(ZÕŒp…ÞUdˆ–Áå€b2{¯É«Z·‡-uG³ÓäÔ Moh鵿hÈN #ÇcÈÇZ¡‚-þØ—©©S•PˆÊÐòÏ×­6ÛÀ0Àcc}½¡1Ã@%O96æÝ–ú2Öìç'‘óðO’ï³Si>¼¶ð½þ‘uq’åƒy‘©Æ6¨Ô!g’%UŨÓ&l£ Æ:ÞoDÁÊ_H2ûÔ° O2œ:Ÿß7>ÃÞ«Aá+s=—Û “$$€2¨dDV¸ÏîÏ=úIoá+9n%Š MÝ­äŒÎÉûÖ™pO<—<óÀ©`økiqcr·®ÍlÈûLcø<³Ç¹§Go£Aoo%ºæ1µâHä,@Ê‘ò“ÈáqžÅKm™5ÈÕáaæÍ%Œ§¡¤Î3€™ãøEUÚ-ìÓ1…Ê%ógBBõEpXc ”_CÅKm¥YZ\ àÈ`Œˆ$ ¬ûßüÇ'žIÇnµizdóK¾Þee›qùÝFâRBWœrÁIÇR¾µ5æŸc$Ò\Á#;Äaqæ2«'<©#9Á5WûK’àÌ ¥%Y¤ó.U”©$78 ŸN* ü=¦ýžHQ'ŠC\;6ß•—×ÑØ~?J[;;%Ó•I,i²eØ*üÛ”«dñ¹sÔþU þÓ¤H£û+íQû¿˜‚˜@_Lnr;ƒAD6V“ÛÇ5´÷~D²-Ò’ù]Ç©Ã:úr)m,­´›…’Ùey KÖ!`Œü=}úsP®‹f‹˜h‹27ÉóU÷Èé£èŠ;SaÐ¡í¼««ƒåüµm¸ÂnÚËÿMíS^é‘Ivò™gW‘‘Ã&–ÈA9É9Î{qU'ðøSö›{»„ùüÆ$)?q×ӯό°' E n! ‰! Ê|³Üò¹éÔ6G'4Zy¶¹³Kà ¸ÞeRê] ¬FGãÞªÇkkâåI~ü‘¹!ƒ Ià{d¼{b–Ò`yäŠS;Éò•r6Œ d9b=…PtÚDo%MËF(@•œc†'žrEBúT VœŸ2=²p9S´pàü£óééšlèSí Û²•ìP©ÇáœvöÇ&±…[Ì3àÈÂwß¿®zdã4YÛ¦ovT‰cBª~b0#qß¿J׎Pɳ¯U$çÜóRÁ2n••¿¼¯ÿ[õ?JTWgïŠmNp=ë7Äwtœ#1rãï v9çë\,ÜH{ó_Høm˜økM8~Íå´W…üIløÿTúÇÿ¢Ö¹ZíµBOŽ@'¤«šö»WgO”){ö¬]sMŽêïO¾ží`KY×Br1’¸÷Ýô¬½RßAñ·g¾þ .bûÆüȤ«òQ´Á‰©m¼ ¨¶’;ÇýÓ.G–rÛ^6üÇœF£Ò§¸ð µÕô÷þäJ—?*ÎâI-èݽ*œ ­¼–u"QØd·¯ÈÊ;òFìçÔ | k4¿n‹PŽx&”\‚‘H3)²¸$þ÷†í´V—…´[]]Ù¦¥ò\ís¨WÚŸ.HÉÝ“ÔúæªMàT}^[ãw -vnü¡»{˜ü‹øã„‚‰Œ®Íª2ä”Ê6F7¹©í<5ºm\ÍòÆ ¼MÀWW*>|m8騱÷?ƒî’Æ(ÿ´<ü´*g,ѼHª¡±óÀ…l82ž¹Ü×íþÊ;v¾[Mó¦ÖfÆü¸9q޵‰ƒuE„Cÿ %Êí_¼ªÄ¡!2W-Ôì9ÿ|þ5­¼ tÐL«¯·¸ŽedMÛ7ºìÏÞùºs“]&©§O@°ËÚbpü•;[zí"¹øCuÈ,^ÞÓZXK½B¼‹´îœ`àd²çýÜõ®›EÓæÓtƵ’Uvó¥q"“Œ;³½Nÿ®¹‡ðÿ‰"ÓËE«Kq2A2`^H ¹R Œ`ž~c“À5 ð¿‰dófRŠ;—‹igºý7pÑ›ph~&q›Vi>HÕ6]H0 ¶~RI*ÌÆHÆ1‹¡ë0ß#ÛëWn.CyÎï/’§$37‚6òÍiøcN¾Óì®N£"Kq<‰)q+HXùH„’@êTœ{Ú®ê"ùíœHb{y¼ÈÎíd £ŸÓéX#Â6³[ ­å:ãzY|¸ÓÎ" ys‘Ðj?…Âý¡ÖÂĈ¹;Wzí“ÖªMá$¨ûr£l13˜8+ˆÔ`g†ýÒó“ÔñÓÞf¸ŽUÔysI,@ÅÛÍÃüÜ€xíØö¢Ç‰amt—ˆê¸¿vÉÛ¸1 vÀõÛ|÷æ^Fuv–ƒ»¨uÿhÔÚŸ‡Î¡ªEt.­ãDyOýü8Á9ý§½2 Çg¤]é±ÜFÒ…8¶€|´CòçJdò3¸ýk%¼+#kRÜá,Ž$(0…e.U9ã#ƒë–úS‚£kxai ÊÛ*-¸%VEÝ×®eVõÊþ"QáY£ºŠX¦cŠ_0 gfì}§þú=iÚ†懧Ù< Ih‹˜±ä•Ùµ°;g¯¶íTî<5vcwr&-FXð¹ËÁÀáÈlgÙêG¥ÞEðƒaUŸqýì‡%‰ ÜN1Ž§Ò±âðî±…L°–…÷f~2ñ¶0‡ü ¥ZÕ´­ZãUó­.DQùM&R¬ VÀ¬§‚:sÐb;½+W¸ŠXáBM“ÊÛIer=HãÓ€jœÚ6¶ùo´í 0î\rç^ätÆMDÚN¦÷Þy¸Ä…ÊJØPe-Œcæã¥M¦é—¶—1ù÷†+uEQ.TˆÚT'9éÚ«Üi÷ïv$iåX¼Ã€“8ãÍ'ÿsoʲ^Âþh®RI%.Š"/#Œ<°¤.x??9ö÷æI¬µ#Èf–rWavá±ÆÞJ÷íùà ®¡ˆ$w1ýì 9è½zç£qïÛµtƒPUŒ¾æ(w[ÛÈüqÛúÖ•€½…pò&Õ$+óž9ö?ý~õ~Yd úã#4æi7*4i´òGuÁ§3´EÑ‹f?)ÿÉãÿ×YÞ$v:>–QÉ9ì}k‡”‚ïÆ9é_Iø\ƒá]/<“i?ð^ñ/ˆŸ§î±ÿ~Ö¹Jì¯7Ôc¬«Ö½²*BžÙÃñŠúÜ–¿é"!nŰÑïÉ܇#‘ƒòãèÆ¹ø¼±Ãóß#œ æØüÿêÎ?wê>ñéWÃ6‚{¨õ;F‰Yd”e°²|êX‰* rIIÈæ¥µð [yk«’<¹#Œ¬$ÞŠ¥ÓÁùI?Þ zVÖ•á‘£êO|.@öþ@‰#`ª2ÁfbÇÝíÜ×Ðü%.“¬AzÚ«KåD"1ydo_-“¸ã”Ïÿª«Üø oí»·Õ–Ô¤²:mʰ)|nÝÉÁÛÓ§jµyáÛØü/g¦YÝ–h§Í“•w|í‚ÅŽGl㚆ËÃÛÍWÚô÷¥1y^eXØmáýXŽÊ3TÇ‚ïm-Ò œ[4â_6FP™_”ÿ7Äц5È~Ìnñ-õµÄ/«æ‰ÑÝÉ‚ ¹²™aµ”uÇqÅ'ü#ž!…nÍž§ 1ÜË$ª‰<„f”ƒ¼rÑçvsNmÄM<ÿÚy’2ƒ/'ϼŒP¿(èÚéœö:Ä>!Ô´ÛOìù`°¼Vß8󛨿0Ï8?Žk&ç@ñMÅ¥Õœºœ%ÆåòÚgä(íÎèøï´þ:Þ$Ò5í@…Ó¯¢‚Ý­š7Ž%XÜç(3ÛÖ-·…5}!'d¶¶í2¶Y[©ÙRISüB^?ÛÏ^Fö‘e«Û_“y{ö‹coµ·²“椑€8ÎñÈ켞‚¦«mi(Õ¥Y¥2…[?.ÅvÉÝ»óà—V·¹¸žÂhl†à<«›w.ÇëÏÌTàñÁúW==‰WOTÈ.„AC Fßõp?ÚóFìúwþßÓa½†Ï"C2O!R͸˜Ë’ƒvyÂãߊÆ[ j{Ý4êÒÅo*4ÊdVAªî~é,˜ÇßGW†òshö±I(Žv2FŒ²Fr@#q^+&Ê ~g¬ëoÔÆèÉG矻¸J2@#¦5uµîíÃwCêqÊ6©©}§d?Ù·‘¹md&5ówRT)ã×8â® ›“áè<Á#]¥Ü$-¸¸Qœ÷Îr=yªz~©},‹éˆUNG+³nKs½Çü£¾™dÔ/œ%-£dHd*\z…éè>•¼¿eº»µY¼É(ówI äôÉ'¦:¡¨\Ïý¡n"‘ˆV QI%³‘ê;}3Æj¡Ö5³|ûÆ· ̇͂zgß_Ê’ãV¼Yæ0X;×$’#“dzøR¶¥*»FÛgvæ$†Sן˜žüŠ[ Fk«ØÜ¸«oºãaõ5°$,ÊÄ&AÉQÇý~¢¥Œ‚͸°É;±ôã¿ÓžµbIƒÜ˓ԱçœgúÖ‰îa})68Üe¨cϵqÒI¹Øž¹ï_HøP«xOHn§ìqÿè"¼/âSgâ¨qŽbãþÙ%r¿…vr†œ1œs]lj>!XxrQcR^ß _1CíHò ¶Í÷x7$ŠÌÓuÅñ´ê«;XÜàǷp!×h`r2Tí9à~£bËÂÐ=³ nB‘J²•hÛlã–î¡ÇLçOMðèÓt«í<êH³^@Ç"¥XC°3’~Rßþ¬Õ[Ÿê÷Wé­É„2H™”‰>\–À8í·Þ›càÍOìA®5™Ä ’9òä;rs»æ+~.H«ƒÁÚ‡Ùäë·F]¨ ï`„‰77s€Sj`sœš¯/ƒuñw$‹â9Ô3’¤Ë!Ú§wð“Ž7/ýóïQÉám^kchúÑcöc¨nfY%qÈÜêGÁZZö‰ª][éöÖ:Œv³G‘¸iÝ ’ 6òqƒS¶¨\hvS\‡¹‚ñn ™ä  ›~ÒØÉ¸üF6‘àÿiæÑ$ÖÙÛÌŒðÁränê½2>ïC“ÈÇ:𦋬]ê3ÜYßÿ£È˜Ü™x°Gä H nÜ œ‚ÁìWëœI4ï†Ì:„ ùq°zžr¹ÏÝÏÐúÔÚjx¦ÿd’ÝOmƒîEÉ‚/C˜½ø'êÓiã2‘n½G>JùŸ* ?!±ê:d}W¡H¬ÆPU±6æLªóÃ(lœç>Ü⿈u»–M¨‹<•YÂC&$&3ŒÜœvd€oéš­ÜššÙºoGžr%þ!‰d  Ú‹ƒŽýAÀ,»ñöº­Õ¨Š±mÃ4…FwÄ¿7qþ·®1òõ<âÖ™©M}q=´‰I20Ûeù²8 eé{ã5‰mâ ÈÑÌ–?kd•”ʆ¥‘`s¹P}'§:> ÕÎŽcÛ 2þêI|»wå9<‘Ú—MÖ>ßröæÜ",e²>^“k —8úúd䯊åWo2ÆçýTûØãÎÀ Pg&ßø‡¯x˜G5œfÚ2wÚnUÂäü¤ ž¼äsÖg⇺{X屉®‹þ·p@茤ü¹çÌÁèžEXÔu«{É­­–,FmX°V2m…HÚp¸G#޹â;lj·(‘@è­9f‘2¢¸]£’6°ù½AéLŸ][gW1¬­!†Y”¨;”ŽÌ=ÿ,Õã-į%³´[B®ÉwJ¸÷£ >¢®ê÷Ëi¨iÖò oy<ûV€®Ð«˜Õö’Hþó`ôéO†öÚíŠElcTDv’Br~vRÿ€ŸÌôªÚ)ç:B“¾ÙUçxù±ÿœÐ·°ÞFÒEÈÝóF@qÎ6äô5žuKTŽ7tß*åU½yá¾§Šdš’¬–Î$ÈÊ:cj’£=}øÆj+‰ü™ü¶6°$ºû‹Ò¥µš)å{vÊ‘’YÀÇþ*jÐt…Ù4ùxVËñ«*ÈŠÎÑÈñ÷©£08eÉà)ôäV?‰H]* dþDÿZ䛩 µôŸ„|!¥zý–?ýW†|KÀøƒªxÿôZW)]”e?¿í\Þ¿ÑxƒP[€|ß´9l÷É'5»ðóN¸Ô|R‰²BÞf’hÎ `¡Pß÷Ó/ç^žšª/“X¹žßÏÝ~ÔñîA~éÜw`lrïxkQÕõ¹±ºŽË–ZgB¬‹0È*üôSùþ:6žÖ?±µ»[ýDÜË ÇéY£r°é´cñžr8+=|-â…ŒíÖ¤Pc`‘-ãªÄK7Šß+px €0GM X³Ñ5›oµÄo®Ô®ò|¯å*n,A# ¤ƒÉ#¬óá¿$ëÿw•È[éXíÝ/Fd8ÀhøèvsëPÛxKÄ–J£ Wg0´‹s!Ü~A ¯?4ˆÜôÚqï~ÏÚô~"³¾½¾ŽæÖ Ò6ɉXJ¡@+‡8tùŽSNâ)õ{×[Ù °k°å²ñîŒü¡s· êÍÎ0)ñxwÄQq¬JÊ.™DćˆçhÆÐTä #$cw9ªÐx{ÅVö°G§HR4òÒVE*¢ T¼–nwÁ“è~ x¢’îÿíI ‰É”0Ѷd$³ÇS“Vµ=Y»ðÞ— wQÿkÛÊ.%–Rpc‚bÀ~ªsi^3inZ-J$ÙŒq™2Peö€J猦}vžµdé>.V¸Î°Œ™P›iûêOQŒm.¿ð÷®‡C]U4ăVHÍÄ`*ÈÍ8äÇëŸj¾W €:zñ@ B‚¸¤#k““Œp8$BªäŒwàPNXà®};Rí !,KqÁì?Î)’#Êö9¤ÆÅ'— u˜èΙP9àSãÊ®yÈâ©ê:ªØ4a¢šw—vØâ› '¯·^:ÖMÏŒ,-Ð;-ÉW‹ÎL(ùâ*ìsÓ¹ÁÁã§"žÞ&²H‡› È8;Ï–>@¥2ÇžŸ¼Cǯ±ÂÇâ[iÎ#ŽäòI,•Šî d‘GNÇ·5ü%S®mÙ÷D‹¸ðA}™ùsžsÓ wÅ6鱨”É7Ì‹"%Ы°qŽÅQþ˜úUF{dÒΡr‹`F}Ajsén\Ü[Åu$d*¹ÙF9ô,„údzÔI&„ʲAœ@(Z5B݃Œö±ŸCïLŽóJXÌ6ßcHX3DVã©Æôáj¡}+j¢Ádò0ÈP¨ ®Bu8çëÆ*?;JPZ%µEa·åÚ»ÉÀÇbZ…d³·Ô–#omÄ áwI¹Ï^1Þ£kÍ:Ûþ=ÖÝQ²ß#ª€F98úñý3UbNw ©m¸€Ê»÷ì;”~CÒ«­DxtŽ6@ à pyüq×Ò‘¥µ¹Hä‘‘·&pç^½õÊ¥Ž+rH” Ãäœ÷ëÏzrº±gØ0@û¤ý1þ¦I$q·*¸ëù~T摲Ŋ«ƒóšÆñáon[±bpųŒsÓÞ¹Ã÷³_Hø9‰ð~“œ`Ú§€¯ø•ŸøX:¦}cÿÑk\­vÚXøìÞi8½z>µàý\_:òÓ%@óãb¯Ç¯cøƒW4M&ÃÃÖ’ZéÖÞTrÒw;‘ÀÉ'ÜñÐdñÍ2iö/ìcQ9}¤Œ¶ò'8F5*x»I[Ùm¼ìùe:†1Î~Pç^G0ïZSx¦ÒßBþÖŽ9g´ìSŒŒü¤nÆrv€r>´’x§LŽQ÷ âM9*yÆq‘ü$õíÍ>h3á Ô`$•ÆÓÈÈÏ× 'è9­/´Bë5pI nÖKøšÆ F[IḀC›$¬ÄRv®yÎXôÉô©ÄúRÊ1ªÚ=Ê=7g=:`ý9¢çÄúm†¨¶7-åb!#JÌ¢5°“’ISÀ•eYÉO™½~âpN8éU¢‹Ã÷¶öî±F‘l ’¸HK9nyç8<ŽhŽÛ@IŒo‰A—Ïó›`fä†Ý÷·½qíN}3Fw’&…|´î¬Ïò©¸ðvã ÝÚ­}žÄiòØ1g¶ºyO9l)P¸œù“ЦtÍ&\¼¶ò’ãq‘¦ryÙÎíÙÏîÓŸaïV.`²h¡†h]ÖƒÍl©“œœî=}ꕆƒu {xãx†Kù€:2¨’20‹Çls×™áÓtí6ánmâxÜ9ä’Bƒ‘žIØ¿=óU£Ómg7\ƒ1–0™† ÀÁÿdsõ÷©§Ò´ù]${wÜ’4‹û΋‰Ž{²ƒéÅgË¡iÏ·XçUTòÂîÎÃ?ï’Fi‘éöj“(žá&ožb®FwuÏêŒûƒj+ -$IÖòË R³ «aõèž¹–ÞßN¿¶Šæ7Y•#¸óX®õ¨]ßw(|v¨›FðU²•{›E01Gy÷>P»NOGßû¿ZHðÔp·ö~¡k ÈÛ{N$RJ¨ØTœ7 ¼zýh½ÓôCKÓ¬£ÔíRÚÕA,’©2ǵ¢ÆìŒd’ õ©§Ð´­c–FTµYZU’K€¨w:¶ ?ÂYTŽüc<‘YÍáÏ6b:’nDºNPìÛÛ©^ùɧÁ¢øhÍ%Ü:´°=½ÎƈÍäFPx…qÏ!~´ÍbUÓmšÿT»i,<Ëy-¥Ë(%ÙÆ?ÕÇ\ûÑg£x2YV$¹Ý!‘¤ +ãå ° Èhó;’:œÔÒ¼=£i1íK­ésh-ö»"‰e· ¡rpǑۓÏ5šÚ…ŒQéâóÌ”D°´±2’&EfÚ»r<¶äŽ„ç;ªøEôi<Ç]RUÀ_™$ˆ*bà.0'Ç^=-i6Ö]ÄÐZjÒ<½2@ØdYqÜ ‚~ïrÇÒ©Zø;MŽH¡‹R¼g‰ÃY À1ËÐSÒ£ÿ…l¦Þ·Ü=²2Û¹¿Õ€<¥QWm<am Cϸ”Äa)½†@Œ¶DŒ{V–‰£E ißd·–Yœ±gÆáÀ‘Œà3íF­SÜX™.RÞT˜¼AÈñFL`òx~‚²ÛÂv»£"êA,&'M謙Xü³ò‘Ñ” û¨=ªýΔ’Ù[[Å1‰­Z9#*ƒ®ÊŒ Æ8#Ž<1›D_PÚ¾R[ ð© »Bã H-?¡Í  ¥­ÕµÉ¿ŒK%x†S'Q»ž%#· j©†¢@×QŒà]ц-µ"\gpÿž`œc©Æ1šVð܉k Žx%›÷0$áks³-“’^3ŽÕ~òÉf³·†Ùã"•ãÞ®`¹ç¯PjÎ>+$ Ô`ÚHÒ ò†iíaŸ˜01ŒU)<"É!{‹Ve`s'óÉíßðÓ5•…í¦­u¨Ë%žÉœåä8ÛrxmÝóžGŒr-ßé s~—3MjJ ‰!Ÿs(<çnêÇ8²ãðˆ#ˆ]õchâ,§p,[žH`\…Ë-ºfŽBnŠÚnaÚ¡Uö}˜ç#-Éã8Å:ßÀz<´‘µÀrÒgtL0bÆ>ïý®:ÕWð–¼û‚ßÈ!`‘¼>[ ‚rQïךћÃrÜèÏiý£8=&ŠgQ#FÃ*‚zãÉϸ5Hx JK9-¾Ñt‘¹P[+¸b#ÁÛüJNzúŒSn~i7BCö«ÕIY>Uc!*2½3+uç§4é¼§Ü$Î×Wgy“æÜ¼órËÿMœþUømöwH/.¦gW.€ Q²0ÔƒØõÏJÐÕü+g¬Iù$"áФ26Þe# ¥eÉà+%óSí·¥dR_qV'ä‘3’¹Î$nþj¼ÿ,žJ^\(”xBy.xã?ÆGÓ­ÈümȽœ…•¥]Ê8f’9p9j];Âqéw‰=­äÁ‘<•RY1•'Ä#é¸ûWBO?(ÏNôù‡8úŠ~8gœäsõ¬bÎ{Ù´¹bA"Û]y¯ó`íòÝxÏ|°ü«k n{ÛÉÞGTvŒÇw_"¨d,Úì+ó»7¿RÛZ‚[!r×’$¬ªë Ód–ì2a8ɹ̶ú~µ"†¿•®Yg…šE”yeRDmÊ„p@Vç×<_ÕmïEíÅÔ±Ýl«n’¶JŽ['>¹SÇüóúVjiW6×:d‘i³8¶šYn%gˆK3¼eYñ»’03Ð{ éZÃvn/î%ŽHE×–FC*á›°î'û ô"¹ø­üIaÿy4…@ù匹|sœ–Û‘ÐRÍa©Í* ¢¸"F·uq$yk¹c‚q»i^™úž´õ‹ÄžLO&ÿ8m3‚ÑídòÐ0_GÝ¿ùzóŒTËc5¿‡öeó>Ú$1à;l7A³òä}ÜCTšÂæÊ[Éç…äI®£”*(ÝÄÎÄppF9ÜØëŽÜhêvÿm’ÑT¼H¥b©-xÈÇB3ê:U + £ÔâYU"f†à¢$xXT¼[F g qÐj»=FáŒW/"ÂÓbEEBª¾hÆ8$©L“žà{е®U'†M5üÈÈýâƒAêAê¹tÀ¬¶þд–UQ<‘T¶-ÎÖ*b†B<ÃÇœ3M©»Ás‹ƒ"«ù¨-K*¾SäÈê2 úÕÍNæâÚ[dµ‰˜;þøˆY€(<€{=N¼`Å©\Ík4B¹GÌJÄÍÕÐ`€8. Ë{ÛâÌRÛæ^§ìï€@sÏNuþ*…î/<Ýæ&#1±Â·Ì³Án}ª8®n.–%•c@ÿ|ùMãœçŸçQ]Mq±mƒ‚prA{ûÔ>l±iÑIJ¥Ô±$ç>ÿVk»#"ª©AÇ=8©ì™HdQ¸±ÜõÀsVX…¹âˆ÷î ÃÀ=êtŒF’0l <¼ÆUKž0Oùõ¨Dl®¡·£®xÿ=)L{W+œ×õ¨ŽÕؤÇ\xoƒÝéÌ»Ô ÜTðsþzRD nÇGE¥1ö¸‚‚Nï|æ–]ʸHŽÜsùÓC6âNáNEË1 »ŒsÒ˜å ÉÀÈ+øñUÃ>ü6@ÆAîOsÞ¥çaIÁ })Ñ¡dn0zÓ;X’[äñO‹–ô>¼ÿŸÎ²{Æ-#â V(ÜïLŽ›£äa}^†š§éš¯&±5ÄÑD"Ž9…Â,Û¤ œÈÑü™_›î·^On½S›X)pÑ%´†MÞY\ä¸à‘ÈÊ}úqЉµ¸Ì*Âö?÷‹’J+Ça†¿+è¿x3K8û:óšñOˆßò>jXÿôZ×1^‹ðû?ðÜH2HSüëÖQ,zzf£ÃgQò‚]¼Ô†YÆÕ% Žxö«jÎ2Ô“Žoñ©Öv ¸@d-–ãüñRJ_w°y$ÿZBÍ·ràqŸ˜uÿ9¦NÌÀÛww’7lŒ‡Ó¥F%f\¸÷ÍZŽGު͎=¹íþ}éL¬ø@ôü)žï>öàTŽFiÆVòøV×ðªí;Ô³·VåÚ3ÓƒëߊBî_æ FFNz~TÙ'òØ 1Á9Å7ÏØËòàç'žôÃpDtdôÇù÷¤Y^Aó)'9ÿ=©%%WiÇ>ÿçŠ<æÞ©ÊŽ}ñÁ©BîÙf>x5(P#!@ü&²'šàkÖÖªUVKy§l÷ehÀ aÍ`EâK›†±LKö˜à @É$RI‘ì6ÌúVÅäÐømµU(dK??aáI »¼â¨[ø…šõ`h¥9†~KFï#‡%Fü ž9ë‘J¾+Óe' *ü›Étä>YÉÏ á¾€ú'×,<¦ŽæÒ¢VŽâVRHüÀnSÆp>‡E¨E5ôk¬±ÜÜ!ÞÏß•1Ô÷¸Ç_½õ¦êÚ”š}»-¤G,™#„RØ9ìxõ¨¡ÖlæYfHÀyf3¹ŽÞ™aƒøö8lú½¥ÐŽãÌ[€ª¿$,ÁUÛ`ù€àP1U%ñ%ŠXµÌ,d °  9V)“Žëþ#-Äv©³8Ž#fÈe(àÆí#¸•Nj9õû!×rª»rÛ¹lÈ?w®9#·>•-ÛCi2Ë+‘¶¢¶Òv几!yÇ'Ú«Í«C%ÕÄ9wcP™RL¤—Pœl'##¿j‚ kNŠÝ.„M°Se€l)ÚàƒÇniæþÃ%~ÐŽÛÌ ´gAà ãîôôÏZ«=þ’ÖbQom2‘WÈ sÇnÎ8#ÔR4zmœÍæ[ÛÆ&VЀU@éÓ‘ÇøÔ.úh·2ýšÝc“iVH‡$°8³øUžÍ•wÛÛ®Çd 6rFñÓHÒ(¤Ú H[‰`:`öíŒUcšÊo8”/×óò¨ X¥²ÆžC¨ŠžŸçùÕyRO5<’¤äº÷üɨ·Bc(¾T`Œð}»þ•,B1—Ç#pc†ïÇâiêùŒóŒcùR»+!`äÁõ«–NvŽAÈNßÒ²¼Pá®`ÁÎç#¡ÏJÁë_Dx.B|¥…Qźæ¼_â)Çš™3þ‹Zæ+ÑþãûZ䑞ó¯Z‰>N:îÒ$X’§‘È'éR$¨²ãåñÎ?J°Œ–.r9ã¥N¬ië‘ËãžÜT«pî8\ðxÏ —váÎÛ…ÿ>´Žû‰Üp¨õšMáãÈÎÂz“øPÉæÙÔŸ­dé±Ég¬êì,™Rîì:Ê6´D£'œòÊÜuç8æ«ê–z‹ë¢ÿO‰b—ì‰oö’à™°*NN7‘Í5¡ñ#2k™â‘¡¸vHDLŠêëå(,¼©]ÝyõÅWKo%üÐË̬‚"]ð¾RžÛ÷³Â‘`K%þñ¢g-$ŽìÅ„A*í Ç$¡o½ŸÀõºSšòlÞ][[Ý¢BNK¶A §€¡qß“’N«ñHŠ·SÈ¥Y Ç*¾r*²áFO•½½7}*Ë>¾³•YY­„ˆ›™#Y6oæN›wc‚¤}Ü‚0z¹‹~ÍÃŽ¹éúÒI$` TùY°@ŸëM&6”‚r¸ÎæïQ¬€™pÃjÿWz3†8¡<{BÉÛ¶O²2%Bò0}¿d,² „Æ ?†HÏù÷¥‘МwàŠ÷dGØÀ *ÜVq^Û\]L‘ʪÐÄZ]›·•È89*?JÎc¡B#´X¡EÄâeP¸\m=•ÈöïRFtilÒÚk9-§ fIÇÌ:äðyúÔ7qè«x<­Â˜¡Qæüá¿€r'Sêj¬Í¢Á*H‰`øFTq„ˆ ÄrF3ïNh´;gŠÚSi’ΈŒCJWœÿÁÏn=([]5c¤‚ÝÄ2âã¸ä±ÁápO ©÷Q[jÉ:Ì¥…»¼$ï(Sg#ŒëÚ«¦Ÿ`’¬¢µÀ>bŸ´·ÎÞ§w̼@Çi§ßêxÓ4„'—µwÃG!çŽ r>€ŠtšNšBD-ˆB±ìóXå ‚Ø8ÉÁ=8¨§Ò4÷%£îÇúÁ+PŽwg?"óÛmUþβº’xWCåȾk÷L äòJ7QýãÞ®ÝÚÅx±‹˜dvŒåH‘ ‘èzü£üæªC¥Yù±“ ÆÈ@V2¸Û‚Ø ÏæoΓûTòˆAVR$ ‚¨`ç¦ÑÃÖ©\h6o3»,¬ n#vCdïïרÎ8¨ßH‹r=Ël³?ÌÊ wà_CùòÛËX®Ù_Θ:`ŠûêyãÕåPKn‹k¨’]ŠCnãpÂÝÇP;U)ôëyPƒu0nIàsË7÷}]ºS²5³I]J°e'hÜä*• Y_vÖ; ÙÉéÇRx¨¥²‹Î2K¾I%AçŸcÃÚ•àÛÄ…Ý|²6°\‘Ž•PÚÆ¯‚ÌH¨¶—ÑÀ-'¸’XžUh¶}Õ+»«ï­>={M?Ù¢)2ºˆ&Ý‚t$ƒèp1ƒÎ~”–:ü7—-ký{nb diQÆKŒá‰Ó®Z±Ôlõk¹¶bbfeÆÒ6’§å#=Aª1ëöÆÉnšÚåmfÉ—`ÄÛˆU 3¸n$cpipI µÂMÍp–å$ìw¦pHÃyç9Á¦Ëâ}<\KpË Šw¶,€æ*r{(?ˆ©-|A§]Íp¬û%•cØš/5G\ò‡ö_J°þ ³{§µÙ3²F ‹·˜ò¥°ÝÆ@<ôÎsUOˆ´¹!71¬p¤òº®|”q•,:ôçŒ98«š¾›yu4P³£˜@ëü@àÝ }ªíÄö–ë:Æe`‘+nn¸ýj=:úÆöÒ ¸gÈ™WagÁä=yéÖ§/pö Ç5šÛ,˳pRwñž0>¾Ô—76VörܼÊ"ˆf;qÉàwýjX¤²êà ¹äà ŒƒÍ+ˆÐüÀÝ2{ûTWöÑKq+2E³I·' ž:“Ú«Éwkkh÷ÎåmãˆÌï´Ÿ—‰ÀçÞ¬f9pl©‚N:Ó•£Xààp:Uàšë4š G4aѱŒ†Î#ò©“‚ zçÕ™¨[‰µk¯´K ÀF¸tb¤©È=Ñy^}‰¬» I†Kq+LB«ûÃB<®9ÛŒ÷'­:Om-suwnêdó5¾ýïšGÞü;ðMCa¢^iº„S±·š x„HY0ØØpÉàœGLsÞ˜ÚO(yd„¢ÊX ÜX4‚L788$ìÇÖ‡ŒSÙ9&H™<ÇQŒ¢F¨Sœ†(¤ôÆ m­ÁxÖ7Ø\€Ìê6sSŽžµ\Î’"RIÁ^iÔªaC.qÇéþ}*&tbç –8Ý·¼[“Ãöî×ì'›æ1:’¸Ú£GÈ?^1Ic¤[X\^Iå]¸Âq´0P¤Žü€3PÂ9iX5Ôÿg€)€|»£œ‘ÎÜ`{sÖ¡»ðÞŸª]]­ÍãK4¤<ªsîݸÜÌ3ߟjŠÓÂúdÿgš;„¹´­Ê+*º±‡'‚6€~¼ÔòxzÊ`ê¿n÷sN»\í²ŠžIÏÞ( uÎH¦Zxj /Ox Ì £y¦Ku"E'q~eê;Ux|Ki¶ôʶèË .B»sýÎKmõÇͼнäR3Û-²9‰³ «Àß·(lc9ï]j$PB‘B¡""€€0¸íQ¾@ÌTá}ù™ªéi«Gö7`,ݦÄÇQŒsž*=ë}/_•­ÚG·’æSæ}¢EÄRGƹ`ÙàŽG`i Óµ¯íÒââpQ¼Åuº ~í½ã³#=¹ôtz¦ Ší bòàŠ6Ûpä]e<ã‡Vè;U»[ RÒ×T[‹™e’`ÞC}§8?1R¿/ÉÁ_ïtöç)ôeRVŽbg–$Î7Ä’·L“œ28ÏBK§êQîu–t’I É"ÏÓ÷J¹ÇL‚¦8î8¨ÿ³õ…ž)1rò‚$ó÷)ÿG)žþfO©¦ÝÙj÷+<0´­o,2F#še|WÀÏ䯩ÀžkGUŽþâr–mܶõA€ž\r¸Ç¯NÝk>æÛTžà« ^×ÎŽHãi¼{Z2wœüÃå|r}ý ŸûrÚŸXÏîÀ¹+)ÎÑÔîòçOŠkéô´gYüÃt¬RDEùD¸Ïžz’)¶°k²¬-+ÈÛÊù­!Œ`ËÕHÏ÷¨^ÓT¼ľÉnóËÄryr+cÂIN>µ!WyYZfAå|¨±ÆÁ vžA8$晪¦¥u¥ÇÇ™$‰Ò`»7 àqÁ9ÎǵTžÛV$Œº ˜¨‰Â†É'#nxõ¨–=M¢‹y;Ù]›1 ä…êr3žzœÖ{¦ >Ycv8ƒãîð=ßòüÒY¯7‡’6vÉeýÑÿlcþÿ}UCy80Á.-žP‚~ïoÅ¿S1˜_ˆÊ_õ›^êNÝê3\· 3¾ÂcýO'Ó½ÊÙDJ•v8ì9ÃÜ u¶éD:የÚG`tÏ¿¥\·Œ#EŒQÆ>”’E½˜m] ‘¸ž•b$0tD#®Kc·ZÁñ +v1éëYôo‚°|¥u?èëøWˆ|B'þ½S?ß_ýk™ÍzÏÂæ@.ƒpI¯P ÈÀ G s\^±e¨¿‹´›øôÙ¥¶³VYw8²jÍÖ…«^ÜË8ž1È%UyÝX)Ó‚åå”ã'¡çµX½,Óy“Ʊ;Bp—²‚º–ÀÛœ”ܼ{ ñ³£éú…œ·†öçÎI$&ûC?˽ˆùJ§ ôë€)ÇV>'ûWŸör«)O´>NU6„mÈen„pÞ¹¦ëzUö£QÙ]}˜,rüñÌѶæG#øFY½Ê¯jÏ}Äj²ˆµ$Ü®^ÙäÎßÞ;a†9DKƒœ Øì s ø†9dt½PÎæ_øûpÎê# ¸íå~VÊôùÎ;c µ±¸ƒH†Ê ‘K ²ÆŽ\¶Ö r@Ïõ¬› VÅ•åÔ¬ÐÃ’bk¦“kyj¤äõ#úg牴kÍI"Ý „*ee6©#¡Æ_­P·Òõ´½·>uÊÚÅ.UM× eIÅ”À ñíœMZßQž8?³Ù–HåG˜UXa¸lqÈüí“fqÇ÷IsÞ°­¬5ëK‹©!ˆÆÒÌlGpóò»ùÎß,ñƒ‘–ÿf–;O·2^Þ«¾p+m…̘l|½“'¿?•5‹ÒGs*\ taÁ}©¸äŸ½¸?Æ«ª (‘¼­#*…g|eøêpçàcÚ²uk«ÛKûXm­žHæp%o!Ü*–9^˜žp:œñƒÏ'ˆµgµ´™mà"æØ4dYI–“Êg*vHÎß›¡ÝíV«®ˆî™­’fHãÎx‡äçù?7 6ûÒ[W»?»H ‹†ˆ°´‘„x˜Ç’w`ð¥‰ÆÞzŠ‚}[V‚bŽÆS# Ècm+`æm¤OR‘ñè㎙{u©Ëmô5öÅôñÛHmí£YfU)'îT‘Ý9V`Ô0jÞ«O"[G¨,*vuR¶6žxêLg<Ž”ÍFöâÖâKXÄ{¢¶Þ<Æ ±*Ü‚@9õíÆr¥Öîk†`»X^TŸÝ»džr .8é‚z—ŸM&ÂÜ`ä2Hx9‹×þºcœ”ò;$ºëÉ \1‰Ôq“r ç‘· ä~ÈõÆß M䆚]‹‰ð¿òÌàc¤‡ñ\u"¤¾Õ¦²¼’%‰dX£ÉÄØvʳFÞƒiϱª×šµÒéóº"Å>Ü’ ýߘy\ êO¥ëÒ'›EIq ܲ‚|~a”üÉϼê·XTÀ™$ ®L‘d”cÕYµYÿ墮ÀÈr’ç,AÀÛ‚>_cÓžicÔÞêHQâÀ“å%eß—+Óמ¸ªw:”±JáÉóÕ™†w Æ8ûÃJuÕëÀÑÂT?Ë’IÇÍ£ðÉëT~Ýû×B›QT¸R0Aƒƒø~T²Þ¶Ý®®>N€ƒƒó{ÿ²icäBá÷ÁNSœçŸONôûWWŒ4d®8ÜdzúŠ•†Oš¤ŽHþU$˜Ææf<ÿý3D2F@>f1þ>ýëÄ_ÛÓË$(Ÿ\šÊšú?Á@éXÇ6ë^ñƒã½W¼_ýk›ÍzÿÃÃØ\«UŸž=«Ñ€uˆ¨Œç­r×Ú®¯ 3-æwY%T_±9*ÈW•ê óÇÞ<ñ…’Mc[Íhìå“å•c hÿëTþíA”eÆ[Qœ=cZ†öSö ªN¦ÚgHÀy~e;ÿåžJäÙíÆö‘¨êW“Ü­í£Åå(1·”À6K9êF;dt99ÀŃ\ñ 66é™#n¬Ñ½¤Å„žT¬FælŸsýüuÅMwâ l$Ò[XB‚Ðn²• ‹¶CœAU8'·ß\Gý¯®´ë Å¢¼~bñZÍÀ–œ‡éµÜúar2*¤Þ.ñ¥ˆ’âÎ?1ö²âÒQ´“9]Ù L‘Ð?N•¿¨j7–÷vÄ3êÛæÒH2@_”ü¹ˆbp6óXž ׬´¸"{9'#‡çkYºùjX1Ý÷$gÔ ^“ÄÌ[fÝ$]ÉÕµqˆÖuŒwJ’ý?NjñºÐÅt¶áƒÛJíÙ¥R’/å$òJî~BàsÒc¯ë!&qža†7;bœ´Ž§næ^Š óóq‚mkzž±cemqcdnZlå61`Ûr2208 çÔV{k“ꊈ!gBà£eU¢•À98VáA#¿ëwÃúµíÖŠïzÑ`TR푼‘ËO\±ÿ²zUX¼G¨u-¢JmVc 7oBÀƒÓ€§$sÜdü&·!Xì¢!Ĺ/î|Ï0¯8@NÓŒõ'ºßx¦õ-® "ÌI³L®w(L:àm\öùºð7hë:ÄúlvRıH’¹¨2_;€œõfP^M%¶µ-Í•äшXÁÄmÊIò+tëÁ$~ |a-¼²^Öh7)ãa :NÜ眓ϵhè¾"}^öD1ˆ° ›˜‘,‘œu|€ñÓwST‡Œ&[©PØ@ñ¤År—$Èß¾1d.ÎNFqž•¥ãÿ³gû:Ço0¶i¢¹YAL„FÚ¤¯/óýÜtãFBÁ½6à7åUîõ+i.Ñçµ²&“Ìh‰h”m ÿ»†Ûí»{;ÆdA’Lsü• ¤Ž;Ž¿äÔ§_wº……Õ›`,Œ 8ëŸL÷ïP¾»ªHËGdA´ç ä}±?Ë.íq¸ÆCª’¬0@ » ïþ}ê™×!º„M7—~`»XðA#'Ç¿½DnÃÅŽäE¸€ùùô\gôªO}ÈKm¶Ê3g ¹ žÝÍBú¼ˆ²¿1!‰RxÀ'ŒtÇáP5Í·ÝTQ¹¶ƒ³œôÿëT-,+a2¹°Î;SÞKe@å˜Ôð…r:u¯"ž†&@ÐĪ hŸB=jQ;3UJŒ}áÁöþ”Én7“…nr8'G;É$gÝNEcꬦåvgäœu5Kojú3Á§ ÒqŒ}+ÂüyƒãWóÛú 縯fø^¿ñ,€ñ¯FÆä t÷àñ\¤ž+Wžkh-g‚â$o0|¤yËsêrØú{T‹âÈ]­î‘m˜êÊ a¢ÞCz‘×Ö¶®5y ²¶™a`ÒÜ¥¿”X|»¤*NA>„ŽçŽœÖ~Ÿã/6ÊÜÝYN×R …F>arÇDÝ}³íR×OÕ-áe löîí·Ãy‘¢à“Œ~ðñŒž1“Á«Œ ”ÛÈ–R­¼²"ïbÛùå±ì¼còÏ{V¾'Šòkx#Ó¯Q§ Tʪ˜U – ¶qûÅéžþ•Nûű_"ÉjÒÚ§˜ ,aÜʲD€ ?zB:gÓÞhü[lQ],®ÕL‘ÀC…R²¾Ò# °9ÃŽØëÏZOÃæC$pʰ$¯áe‰’)$* 6K ƒ±œÒ°ñµíìVmgyÒ©t1ˆÏàsÆx†õ¬Ù|ZaÔbífû7™Ê¶÷vcÎÞ&UaÎGSÊ}GaWŠôßìÈ.çm2+­¹e.ºã>ýrRÄ–s*Ooá܉ö1ã=ðs‘Q\x‹M·!î ‘åE-è»ËcׄnŸÔfÅž¹e{;ÛÄ%WUcµâeÎÒc#ý¡ùÕ1âM8ª*Î]€]ÈÀ’w€ôÍÇà=E$^*ÓžsÌHI6…ÏÞ*;FçÇ­L5í>Kv+D· nH³½˜'B9nHýj„'ÒÚÖu¾f‚Há’=®s†‘ARÝ‘:c«v‰cÊ» mÚ:ØíYÚŽ¦£aö<Ìí0Ž ð¤«¸b@Éã„磯jM&mj¿èv!UÆåòãQb#fôàü­‚zb¬Cs¤iò·”öP©¿aT@ÏN”~#ÔSaµÐî’8¢¶°•X‘¡ qŽ2çðªÞg‡þÒ. —M#´Å£t ͱ²Çx,r}Í>A£_Ýåã°¸¹q³slf?xmõècØúVrÍ£^O,¾U¢MÎH2°½×Œ¶Oó«7Nšx'¼·C’‘’I`ýGZÃû îΨ¾ÏFƒ}à§ï¢ ´´Òíõ#qm2,äˆB €T*ãÔô «[·YZyL"ùp»[88û¤gÚ’Htqöòš|Öú†'¨ÏÝ99ƒ“Ç5 ‚ßN‰HT‰í,Hôž'Àç¥fÁa¦Z‹X<*»K’Ãf1׆éŒr}j·ÒÐÆ …Ä)‡fÜNÑR¼(ÇJ|zUŽ %¹pÝÄÍ·8çјc¥=´û)#~‰®ýÜ ÿxøU1¦Ù)Œ„ud©YœmwgøæiÉpÈòCŒI·sNGâz ŸåéU?³,Ó"ù6€Wqã^¸?_ÈTW'”T¡Â¿Ë´òèsëTv@\9¾F.I çqïê Õf†ÅÙVýÚ/Ì£qÎTÉöô¤•!Èu|ÌF êH'?òª¯m )*¤ðsϯ¨¦€8ÈHÆ~èç€tcd$!8“ȧ!—6–Ï©æ˜èÀƒÔ¶Iö÷HUAaI(Î=eê@}µðéU@µôw„Té=1öd?¥xG9ñƬé·§°®v½·á„NtiÏ2’.•ß3É—$â²÷F½dkY#cüq|¤®æÏ#¬~H¨â_ «1Ž -dPU‚€àü…zsÁp?¼=Ft^} 4ëtŸì §°}¢,¸m: ÜUx­ü,ÐD±Ã¥=»2¨_.6Ú½ºåð=ÛÞ¥{½Qšu¸K9$@e¸²²·Ï€Oo“?‘©tû-æs“kŽfE-nŠCÄÌ™g*p} &4m*þÎÒ[{yg.‘,¨Û•.ÇÀ;>¤éÅC/†u®Ì¶¶¾E…§•cÄÌÊ„=ú§ãŠO7‚a4gIo“b˜Ê Àd`¡r:chô7ÙüÃbàm‹{ªqÎq“×ç<ÿ´}MG2ørUóä–ÅÕ•æ &ó¹Øsê™8î¾Õ•Ö€­onma´Ê.ôd¸`ýÌI׌\/†á{i-ÞIÙ#FIn2³~\¸r*C¥xy¬ÍËEmöm› ¢_ŒëœSôôªÐ¦‹y©Éi bW|ötíR*ØÒÛi:%¶­ý¶£·¬In·c8ýâ~líÏSÒ¥’Û@}î’Û°ó<òÇB9#ž9ÃqœÚ²hwZe½‰0µ¨ åGöƒ÷pT€sœ`°ÇLqMm7AMÆ&Ib‘ŸuÁ#d– nÀ±Ó½@t}úá–XÝø6àµÄ€Ëò·}ß7Ë#Œò~cVì4›.ž{u&L°/ç³à¶ÒzœsµJª|?¡¸”ˆÇ—qÉö‡*ܱÆ7cf8éÍA/‡4‘k¹I·FŽqpÙBw… –ÆA•±þõ7MÓ4ÕДS3ÚG18.ëåº>02w.3×®{TïáÝ%˜Ðº¶àÛ–â@Á‰sØñ“#ÿßFµ£ D#mÀÚ¬O?­fjcOžòÅ.¯L3[N³ÇºÍ†9òñÇN3&ÐtVÕŠ^LöÏ+ìXYJ®_{ª¹åÔ¹@t¡4x§yã[Ë—&X̼§Ë"llýÞ§j’:rqŒÔšv‘™uö„žy%òÌXm¼‚ÀŒíQœsôÉõª­áËuÜÉuv(Q uRIBŽ@óëNSOÒ­m¯m®`›Î‰QÌm´ÆF,[*ÀÜÀqümÚ©Þé:\ð´¦è²dx¤%Yš@Î9OÌ1ƒžž¼Õ•[Y[Üb;Ê—M›2ß. ­‘Ž:` ¾Yí’¸”D#DÂàn ˜\ü¼õҬɥG#"™Üy3¼ÁUvî-*Ë‚O¸è}jÑ“d6æiÈÚÝ_Ë^A ´œHò×®sÈéЗLÂM±Ð ìn®ÎÚF9sïÀÉÎI°ðI¨imtì>RT (9SÇ|N§5™ýލ#6÷-ä@LŠœ#nNsÛ…÷T'BW¶EuªÅ01ƒ¼¦í­Üg<õϵXA=•©´Èx±C·¡,Äç$är½óëT×JöwöÅØH€"³”Rv眑Ÿlôª°hMÒI! ±”0·’Ø9属Àíõ¨_BŠHöù¢BÞklñóÿ´Oñÿ㢥³¶–ÂV;òŽG˜0@ç‘–'9#Û­V›II–;Ï™¸îAÈ/»žp}?L¹²Iårç…ÚUA<ïß<ý?,Ö°ŠwÛ…û˜õéÞˆâX¦Ü±.Pmã·$÷'Ô~UZk|&6®ÓÆ1èÿÊ«K’ËÏ^GÓüçV-‹ ÁŒ|£”{SÁÛdŒg4¾s«Á»véH¹ó `ðô¬Ëì É1ÓŽ¿AP ×ÑþþÍ'·ú,gÿá~8ŒŸê½×AXIô¯pø`ª4<‘’\öé^€Ëò¸“‚®U<-¥KxñÁw87³áÔ²™!nG…`}HËdŒÔ­àûQ;LÚ– gV.ŽL`¡%2FcQÏž+GPÐàÕì’Ú{‰ÂÆkFW/º6BI örk> is]Mê73Í#ƒqxþ}Œ®€\€¤ƒÆÏצ&OYÂa•oï EŠ6Äq‚¡ÉÐŒs×ÏZÓ±ÒÖÍ$ q3Ç#³í}¤iÉPz¶>€{“sá½?U‰¦7óÈKJxÝ 3xÊä/C0cž¹9¨dðt)ºxõǸæ/›åà°e`Ü¢ð= ÃSÁ–Ÿg%ººW¦Ù™YSj®9_E>ÿ3zÔóøwO{˜"šì’g–hbb‡ymåÆ9ûçRÞ$ç &$ðQâqº( D˨Cä"Ó³†8ÿj©¾¬ù— Ù7;æ?ô¢¯ÌUv… '¯=¶«ö‹«Sœ…gfÉs!N3Î1ôþC›-ž§$3J²T•[€¼Bœ@Ãäôä~U¥} ×6¤Û|®]rå, ÁI?¥dÉeªµâù’3D²DÍ™FH`7?1às둊Om­ˆA>jH‘%dLñÐÿiú}qJ-õO;qI|¯9]uéûÏCÏ>1Øõ<š÷pê³YgI¤ÞŒ$Béÿ&û¼7¿=:bÞ§ “¬rª–òç7”T0n›¾´Í5.D’GtæAU «·s7ƒ€AÁsíUu kÉndòQ‰ƒÄC/»aÀcýãÏÖ©ùZƒÉûôŒªN{NzœðqŸOlÔö‚Qn†å™æòþlíùN: w÷ëY.—ì¾[»Èd„—'.Agð¦\‹ç ¸p›—eãä~Xªj·q/ÍÂ… ´ã'ž=q“ùRË#­©Aås¸ ÿJª«,cåÈp œc?ήDá‰c€ËëOvNPéÁéšfÑŽ+“ÔòNsÒ¤€•$¶ ÿŸJÇ¿¯$;H'½Aµó÷Oå_HxAOü":P$Ǥú¯*ñ^ƒqqâ}Jháw 9 …8þU€tIÁ ÃÏÐשü5SÿêaÌNGnµÜe  tÝ\“øZöÞçͰ{E O™ãàý£²ŒÿËU8}Ï¡­ H¾ÓÉ7o ¤ÀÑÞXæ;¨ÆÕañÐchÀìWÒ5«½F)´ÛÈ­¡òŠ3‰™[%s´7ŽG9ùJçãkÐêW ¬ŸÎ;/\ÆÌ ¸X®I+™;Nâ¤xŠh‡s‘‚Iy)–dqƒ·#*'¶äÍnÂâúÇÉ·Øf3E"‰$d+«  p+¼?®F— ox°E,ï+F—n›ƒK+c%NÎ2@ä®;æ·5 KÙô9í!¹ÿJkb©'˜T‡ÆdsלŠÅ]X†TÍ쯜Ï$kù‘ùŒUA?t…eèyÛƒÁÍgŸø–6“QFšÂ܆%R m îùúüÙÇjé´-.þÂâY¯d2-¡‡sÍæ¹*ò±Ëm\ðëÎOÄçkZ>¥qx÷tËndŽX¥}ñ/‘"acQËmÀŽH8íQ.™â%š;£q)¢»Åö¢;y¥—Œñp~æ~±&â#ä,×3mGùŠÝ°Êù¨Ä}ïî $õô!ÐÚx˜'–WCFÒʶð¤o݃‘ž£¾sƒŒ·š&¿yaq Éæ»™J˜6ÝÖï2N~óÆAÒµôÖÔ¢½›ÍûLöò\˜bó”¢aœ±¶ã°Eš_[kÇé"‘»¼©û~Lç¨ TZÓÄï<­™˜³2œ'œåƒŒüÅ£(£9ÁºÖsèÚð±Š3lí,6EfB‹ºP»Ië¸>xèzžoßÄv¢áÙo9ä*¡6¹_ÞÊGCòü›=²1Þ·n’æ÷Â÷ 3ÝKfÊ©2¨bå1†åëÔt£L‚ò;;‘t&óMÔÌ»Ø6P±('i£óË–/ ™aóA3NÑÈ] ŒºÉçfÝÀÏ^3ƒZÚ¸¼’Ä 11O ‘*–@à¸äÓ<ÏJæa±ñ5¥»[ÁñÛ‚ …š0^cò‚@Ç1O¯¸®æ5ƬÇ7aX:ΡyiªEH`D‘bÊ;4›]Y»»H霞¸À͵Ö5«‘cqb±¿/åÆvà‘ò–2ÙayÁÍBš¾·$Ø’ÒUMøó¿³ä&!º`Þ§îÂO³ŸÁWUÖaóTY8*%xÃÙÊâFó%ëÏËÀFëÎì(< »©sq¢]Ê eÔ­àg05»òÙm€x½°{ásŠ¡.§­D¯¾Ñd9ag*ôx†p '†~ƒ?&y¨ŸWÖRb‰jda^ÚERÿº$ØaÛ®0F0IOím]Ë*Ûb2í\mËG·8lgk¹#<úÔÚz¨–HfµŒCçy>dvò’¿x#¡ Æ0ǧÉ. 4­ üÙMŠÓ‡Ý¸‘o›y`2S¥S¹Öuµi¤·W“ËÉŒFÀ0òËîêxl#×Ó8«–•Ì÷²[È#2|ȇ?+ÏPsøu9âŒ:ÝÕÀMöñ£e>m­ó†l6ÞŠ>cúíæ«G­N`ŒÉ c…f쌢6O\¼çýÓSê·)ilêˉ$(þ^Hî2¹Á=½}³YßÛ’¬¶‚Ä!äl ǹäLñRVW/òòVg, ޹ç€qÏoΠ´¿šåÏ6Ä'o'jãŽ9<ñÓò™šåSxµ:Œ®âƒ.ÔšÎmNIa («&q) v³õÿwo犅u+Ê ¢<Œ‚ÏÁáxr@$óýj¸”Ú4¤®øÀ%•€$”çízR=Ü­o1 Žá» ô䑯9ª’]L²+Â’§-ÜdõÇ ñ \1.Ù#h<;cjkO+•€S‚F>ö==ªÍ©3DaR:~žßQWcœ‚§#¯¹¨ØÊ"*åYr ç&¤UßfpFA#޽kQ ÞÉÆ>ïœ ®8Îxâ¾ð™Ç„ô’§þ]#ú”Snþ(i:<²ØIo+OnJ0[ÛÛ¥sñvvv"œ€qúU¯‡\xf êxük²/œç× Wš†¶·Ú}ÓÇxd¬ñ}“(»¤„:äp@R®äŽM‹]_¸Œ™m'@‰3äéònb©*ã*%¤Ïð“÷ж·¯Ï§\æÎx'[yL XÈÞc&HNDd –#…çÖ5ÂÓmÜmh–1&Ÿ1ù£óÀ8 ä¯QŒ`æ½æ¥âòÞ yX„œ,ék!;Õ\®0vŒ`žHù†ë:¬r]*[L"wi-Ýìge¹ÌÅÛíAÑSÔÛL²–[CÄ—Û¡f¿ J¨ ÆCg¥S·»Ö[GÖï'ŽT½1¶·ØÄF~εTœœ‘ÀÎAëÐR}K\±º¿1@×0¹Ý›o/Ë„€$/Í!Úr­ß"µ§Ô5tÑ´ù †µÌÌ%ýÄŒ‰ˆÝ•` Uÿz«ëÿjŠgÆ›1·˜]±œ¡°Fö'/lVÿ„›Y…žÉw4`7—lÌòÃûÿs`ýwmâ£oê»QЉ°gCÿ­ÚÄ®}FÛ‚pO5Ðé—Rê6·EÆÂ]¡*€Y”,çþ½Á®fÂë\7ÂÞùgmÚ×B?Ô3A&T`{šŸKñªÖV0É4ÁI,ªãîâ;p;Éwç¿–xôÑÓ5»Ëõ»ib|˜D©±Xçæ‘pz’~@xìÝ=rÛÄ××Q)Ûo+ȧxîãùG'+“Ôð=øGñ•É· An²ù¬ ¹ #.rJ•õÏðäSÂMu¦iàÆn  #G¨9Üû 0éŸÆ®Xëwš“ÚÜÀ‘Iüñî%ÁÚ§8þïÌFze{ç6çÅ’[ÚÉ46°“™?vóa¬r9V7Èü §¬ãÄûÊ€–±¡™âmó`Æ@†~8´sÎîýéÂRn&…€6K±¼ÛguY¼ÈfÈ8áߣô&ñâÃhóMe ›n² >p¼sÛÁ< ÒÕ5¹4Û˜™`WeiJ$£÷‘©ÀÛ–ÆãŒy'ÐC"Ëocåe 1ÓëXZ¦¯ö=V„É*–Wêír8ú#uÆ{g „Ñoîïm®äŸk”à™U(cϨ§ÇœeÐ6wpÀÖ¦1*–ÜF9À𞓜“ö8¿ô^ãYݵÈ[xÅši¦xÁäý©H7$AU›øy|2ü½:üÜV—ü%"K‰m¾É/›æã_5pø3§þ¥úúŒãœijú¸Ò-¢¸•HvÈì#±UŸŽF8_ÓóV Õ–M6æñ¡‘4:3¨?!`ps·¶sžýEVþÜ‹ûµO"å Y6y8Ãì'n3ÁÉÆ3ŽÙâ³cñ}©› o;«H˜Ò2H‡ÁÎîgS‘ëí’ÛBLvÓ-¤3:J΃æ ò`ðÀÆ8 pGLæµfÕ–ßH}BkI¶§Êa‡ûÁr8î^„Uñe¢¹Wµº2“÷A˜2y™\<Ÿ)±Žø±¥x‚ÏTºx`Yw󇙷k)ÇÝÁÉëƒèr8ªkâyöÞ&´“ìò<ð—R IÒÿx|¤¹ÈÁ?…KŠ-X–6wk±ÀbÁ>PdòÃ7MÀ_”çŒf©ñ.Ь5%²˜ÜH‘¨‘bA++§˜ìú™É#€jî“­6 n-¥…£ž)dUnº¬®ƒ“ü þUOøHȼ€Ke$vòÉ,'•%gXƒ~é,8ÆG¸æ¯iºä”ms3ˆ† ")¼ã=lÕX=âX®chÐHÉ4b6°\áˆÇQÏOz¯?Št2Y%Rg³r¾eÈ|‘žœFýpHõÈΦ­¤ì¬¥W ;G„,ÖPxííU5 gìwOo»É*ýœ· .%—Ësׂyâ§±Ö¬u #Ks#î@Ŷ«•W N8;YO§5 þ Óí®§¶™¦VˆáÊÄÄÈô/çHþ!ÓÙÖ4vydPð¦ÃûÅ!ŽAÇLFßõ£q­XÞ[ÚH`ʨÿ–fFDlvóg‘ØÖþ§k§Í3Š#`vž>eUŒcçý? 0¸PÁO u…©]hËtbÔíà’àǾ!ÚwcS×k w< ‚ OG²·’;5”rÄ@pÛH ¼ýôúdgµF§Ã‘+ºÚéâXNÖXáRÙ Ü={a[ÐÕØ®tõÒ-•--â³BHT@¨ÇCÁ9ù¨ ·Ðï<Émm,&Lª—HÐämAã¦Ò1ì}*µ•ÞšÐnm-üÕ]ÈrÃh8àáY}x#¶*t)''ìö^lL Ìi‡Šß!{ÔO¢«mŠ"‡ùÜxÇ|Éœãdt©ÏöF¡.Y¬învÑ’¬B`òG¦òoz/³ícò&Ží¥ \¼Š¹e³»¨= ç¯5Y×Eû+ßùVû0]¦‹ §9Èô*?*!Ô4¹‘y‘+DåØ3)Îà¸ö;Ç?Z©,:jYÊoµ™rØ\>{ôÁÉüýê¤é¦o“m‚Áß9ÈûÙÏOŸÛ9÷ªÒÇepµÃ¢ÆÛ£p0¡†Ï˜ý?—¨¨Ëi­,‘ÆèŒ~L!·ƒ‘ŽùÜN^¾ôÙml£p’[ƦA€­‘Î9ã×úóP¬z|–í8U[v 3¼à žy?íûëµ;ìºcy†!ʳ+îr0Açwª¯9ííM–Î8edBÿXq×>¸<’G¡'¥SxâV ,6ì³c`õú÷ªÓYÛ±‹š7“ß®{šk[”?##¹%Ëœ˜¨VÖ»Õ ¢¯yÝ}=©.|­°»nÚ™•ºçíšÖÆ$“–'9Ç=}¿Îj{h#Œ¹R«òîÊ çò©ä…åó0:ŸåÓëUžÝ”|d99þu!FmóC ©çÿ×þuÏj JbH$‘ÊŽª(9¯£ü4­ÿ®“ÿ.qè¼ÆàÿÂkªçþ{ŸéX5ô/ÃÐËá›aÐ<ç¯5Õ³ÐSŒrÏÿ®¹Ë}{E½³K‰âŠÜ×1ùŸ” °bvà>ܶ:ã‘‘ÉU»ðª³[ù6 ¹’Ü'9r ކE>ÙÏzÐÕoü?-„×—ik|¶‰#dWll$…±Q×§zÖˆ¶Óììæ‰íí£¶˜“22Ž[ƒ»<xüTÍáÖXôسB9Ê[ @7n$|£¾äoÅ}ªB×AÓ¡Q.™iºmË-ºeˆ]ØéŽ‘ƒÏu•KFƒÂkj·éeºï¼çWb̸ÁÉ?7ïp{àäTÚ¸Ò,t›}:â(í¬g“ÉÄacD<¹'°Søšl‹á¹dóäM.FEåˆF 7Íœûï'þ}jå£èÞqòb³ŠåšD*› ¹Îñ’rcïÏÉÏÝáe´Ñí®¶Ï”3Hä¨uEÞÅ”’:ó„üv÷ÅUÓIÔ­¡¼´´…#Go)˜'ÌnÈÆp7sÎFqÞ²$´ðƧu ¬BÝ3΢!­ÂËòƒ’v„nF ƒÁ­Ë[{æÄÅ"Áž6 —,yŸ˜“ש5 á™eû$r¡2H  ;ƒ’FxËm?\{RÛ&§Ã4vïi_)q€o»ßŽ•VþÛÃÖZ}ÃÍo$ QÐ89!Ú8Ý…P°ôø¬ô9†cHFòëĘbrwV ÉêqÏ´xoL¿Ì´™íÿy½e´prFÿPF3#SSCa¤Û³y2„’²HÆ|1 Œ–ç€H¿½ß4·ßÙO:ÜÜËr"ÁóŠä ¡ç xúÔvV:T&9-£Ȋò÷ÍØ'Ðcw]¼t¢m'M»k‰Ý ‰wd™†I Cþ { ŠëIÐìmâhü½Ž ÷£1!Uvœ®|Â08æ§DÒ­‘£1xʃ;¹J”À'ƒ•_sŽsNšËMÖí’äfHåŒÅŸ1Ó1±©^:ãÒµ5E ‡j*€¾ÜV§oc&¦ÓMuaK7s ¿xYŽ8Ç8úJ¡{¢Cuu!žé€a»&0@?»ÿãC׿áfK%ÓÑ'H™8eT‚02=+)t‹Iáe-mÊÜIJ“ÈÁØ:v?L:]&ˆßjnÜ õϳ·éQ®–°]ŒÊ%Ê6Ý€nÚ Žœtl8Çnë=²\_yŒÊ휃µ· Ðçƒõ¨¾Ç ZrD×*Š›°:ÆAúU{4GxÓ‹¼98 0I}Ø<ò=ª¬Ê¶Ê«ùr!]〰ü=:Õ?ìøœ…•™HÜY9 f<Ž3Ú‘ô°‘‘3»vÜíXqÈɨ$ÓÒFfU9%À‚½³ÇÝýiaµØI0*ÊNFp¹ŒW“Nc%Ðo$ü£§üw˜útEpd™ñ1ôü~µ~+F‰6¬€îUÛ¹$ñÏNJ°ˆñpc·9ÏLsJ#v]¨ŒäüÜœŸÖ„ˆ—ÃtÜã©õïþx®sZO/U}Çò@q_JxeIðž•ÿ^pôÿpW€øßþG]Wþ»ŸéX5ô'€A>µPs•Î+­`¬``Ò°¥ð–%»Úæt€&ݨÀó°¦îAça+ôÇp 2ï–׷rÎ÷·¡¦rÎÌg1žOúbŸ‘©ßÂ6Sißf[ËøÔFñFQ×) ¦!•Æßr7p9­ËËï¬Ì<ª>VWB7+«V錆PzcŽEP·ðµµÚ]¥ÕÞàë!ÉO˜†‘ŽFÞægéŽØÆ*Ρgo®Å Çxê!•ŠÉnÊyÃFÊw;°ÇPEeÇàëHg†æ;›Ÿ2#“»Ëäq÷xâ%ä`òyU²†ò8f–å­–ÕŒË8*üŒ¤¶àF0Çò¬“àÍ4H_íW^O’" ¡XÐ+´•Ü1´sÇZµ¦ø~Â+Øu+{»‰3¾HÝdR²+—r –\¾y'îƒë›—¾¶Ô'2Nò¨eÈŠãk¨pã9rNÌ}ˆ›NÒáÓì ¶ŽGxãËà“Éöʲeðe–ËsrÑ$)2 ìQ \Jßüt4½ßIµÐÈI/¹•dà áZËÿ„Uo丛Vdg{“(Ž3”+”ŽIXœvfõ©að¥¬SµÂÌí–‘¶²)rÄŽGQ½€ì§v­æ9•‹;[t„mù¸_ÞGqž™5¡§èãMµšdq,Šç䨉Ó'û™üj‘ðÎéU…â‚“4±ï‡$æa1æùŽåÀé€O\æ¶/,DöÑ*ÎÒXäVxË•ÇQÛʹ‘à€ŽŽ/ Ùp’`H `d‘!ç=»ä×`XŽsŽF3þp+ŸÕ|>//nfYͳ•”th¤,@ãÀ‘íÏ\Öqð¥ÁŠð¼Ð³Ê¸‡ç#ióÞB9R1‡¡ÎÞ„Uˆü;uso -䑤uòT*¹e·†ãkgÀEÿþ¢ÆIhá[˜bK‡)±_— ùvƒÈän8 ­‡u8Ùœ=¾×ó\"\H6g‘†Q»"E¦6ƒŒUCH¿—H³´µ¸0Ï ‘,Ÿj‘w1—;±“óyÇO¥A¬GpK]*ÆÅv¢\»Àd$ä¯ÌH 6ž:Œj¯ü#ºÂ¿›%Ä ùqDå.ÝZ@¡ÁrÛ29`qÈëÏJ³•woq ƨÍ·&Ì: 䑎¡@öŠÿ@¹¸ÕZhÜ=¶èY³3+a ð0?Úó×Ö›§éZœgí7<~B¦rW~ÕåÛýàÇ9ïÓ“Tmtk׎–âd·Ü¾rßw`'“ÇÞN=ã®…~cŽK«© Î.?|ϹSÆc•ǰcÍW“HÕ"ck¶2í\?šÛIò€ÇN»ùÝéÇ|TÐXß%âŸ÷`¶TÊÌ9w ;¿P#Ô—IÔ(ÚÞóË), i€7–R9ôcŸ «:nŸ¸¬™´ýJ eÍòßd}Ö? ööÅ'دD™}îÊ9ÚビÎ9àŒcÐÆme{çÂ%óoù³&xÚ¹9ûÁºä}:ÕY­¯bšC ïg.%vþX#ßBÖ·î‹ ¸\®é…oQ××ðíÅu’\D§ ¥”íû™ÔýúŠ;k°%r 3(lXn'S/' ʸ`Ø¿6_lç¥6;{¥¹!DˆŒûÎ “—ßëZz}¬¦ÄÒ¾ã‚àÇ·ó«ÑÀÒ;Hè¯ëN†Ï·î¨rOLÓã¶{rHfÆ>l¿äb¸Ý|¯öÕÆß»•ëþè¬Àpké œxSI$Ë”<À|ýã~ë¡ëÞsámOíOö[ˆ#Œ´eA•Ûî¦Þà’ryVÜè^%†%nVkŸ4ˆ®ÊN åI%X}ìÉàÔiZ}ìß-ÔéæÊÍåJ’´„‚ÌC# Fà8ÏÝà0¥ð߈¥ÆÛÈ•„,¦5¾›O,(¼’Ü{Œä’qjßIÕ¬oe‘1,`ÜÜD¸ŽY ®Ñ'<Ž$mÇU9â¯ëö­ÍÅ”šl‘D#`f-;ÆXFÛ€ €Àð=pH8máGcä5äSˆ$‘É{)Æ9¶í¤ŽYN:qØ[·vz‹I¦¬MHáÛžæ³®tmÌó!»ž8óº8…ã§÷=I?0ùfà熼54]t;JÏ0†xнÓ7ùXÉîÉÓ¡Â’p‰¤x‰d„Ku0UŒDûnÛi˜×ý¨yÆ~Sß«-ôR »x—í¬²F%Û+2V$ –‡Êarˆã5£­Zk·ª¾$‰n°•eŽP§%døÎãɧlÈö7òèV°\;IqÒÈÁ&`YVLõÝýÜq“Ó©À5m¥köö°[ftµw"\(um²d©9Én‡t5«MRâa%‰—+gq””.%`¥ †çÞ«\A®ÿh\‹srm6ª¡óœæ.F}„¿‰êxÅ4³ñ6à]§Ù™ópQ2œŽpIpäg=Îp±ñ)1yž~QC ÉbŽa•X¯#Æ>ã<óÖ¦1ø’G+$*y…°ÌŒˆU“=òG {0<|ÜÐx°§îLêRȹƒwå¼OKdŒs×¶+® FAÏ¥szÐÖN²¦Òi–ËjR4l²î# ’A~g¯5VyLÒE*ùiD0ˆ]>dþóí.JóÊŽ:ÏX5´Ñ®¬Þ+œ{“ù ™ ™;ƒ­’¸\t=:•è4âñjWp…‘bžC, T…¤a϶Y¿=ƨ]êzÌR–²|³söwuU3 F\}ìÆ]Ž3‚1ÇBž#–úÎH.mi¤Xäm‰޲0 @`½2}}ë.]zí.[M0¼jæV‚Rø/0î ÂõoaRÙÞj[ÛKnÁ‰ùòZË’qù½9yFNØ7`’õ¼? ü±¹r…• edRÀ7Ê~b@É÷ÀªfóV-+KnDùgå´rÌ ¬¥€ÎI±ŒÞÕF+ÝZ'Xì¤&YÐÏm)wãÛø†Ü»¾1Zÿl‚;e«%e@ÎíbPsË?qQXE|-g’á$£ ¹<“órp1éïY×Ú°ýü–êHU)N±ÆyÆæÿcÖ›qyªn¹¸X„[v Ÿ8ówpOð€NàÔ³Oym¤Û™åUØuP •Æq‘Žznªóßߺ*ÅhZM¤˜Û÷xl Ü÷\ì=óU>ßzéå´q ÌLÀm#pÙmýâX¯Ôt¤[«µy—z…Q&דqÜIŒcÓðIÜÄw®Ä Zº\çæþ²Á¯¦¦¸Í:ïÄóéÖ÷ ^d–Ùæš$Ròyq•S€0¥‹Ðñס6"¼ñ’P!žXÒ&{Fklð‰G;p>\óø\]C[U i'>CK{&A3üÿ+œ,€#äã98„6®§©1WÒØKpïóÚHTA*¥qÁÆ8$ôÍmx–9›ÃײÁöµºH$0­®ðþa\/ Éä§^Õ‹su«iÚ”í¦Z]ÜE$ ˆæŠW]Û'•Ýù„JGmØâ¶“P½:Åäp4—*’4(ðúô©£×Ÿí‘Û5›¡ù<²+÷»"‘Ï9 ÜÂsª.Œ$‡h„±\<É6.˜ú^• ަë¡Aª_ e–8¤pŸòÍ\ žOAœŸj¼Co沬W[¶¤®X1Œm9=x¼ïŽ3ž"E. WbfŽTd\‚©#c;† ç<ðG¯¾ Wš(R ,±S ~NzóĪ~€žÕ5Æ ¶“ßÍfQ“ho}‰ÔóÈíþ/ˆÛ[Ý$G¼¦PHH …n¿+z⦋V{Éá†;K”óc,»ÕFvåŽNq×?­C«´ö–s\@°˜ÑK²È…·gsúU7Õ&°¸š+øCíæ7mfÁÉÎv§QS=Ú )ofµ#\¹I"*àô'ƒŒŸÿ^*¬Ú¬"à'•p3µÆÅNì<÷m½29úã6ïTÅÔ“è÷lÑÿªœNsÕ01Ç­Ñ"C!Øôÿë{Õi/£1ù{¼§-ûÅä–ÊŒ}ØsÿרÖù7uuÏèK2ŽçH×¥Ôe‹+Œœ‚Ã=û‘ü±W&º†Ûb¸*f-†'Àž¾ÔBÞjpIRHbTõç¯#½ €‡Þ¿1Æ ÿóÖœ£$?ˆî{Û§øÕ–]‰ÉfsŽ3ÛŸ­yÞ¼Yµ‹’ÙÎáœýg.3_Nh/†ôÐyÖ.¿îŠùãÆØÿ„ÓVÇüü5aWÑ~ ãÖJ8Œc­tw 4p9‰È”BûwÐgœsí\Œ>5’ëOkˆìž17ÈÍÿ¸’@ (1 ñê:Ö¾™­Ï6¯s§ÜD¬à–ŽD< ±@Ä^e8>Ý*hüIH!KYòí0½ˆ¤¹É#¡ úã=ø0ÅãKB‹'ÙnÀy™P,². “ß¼SŒtäg#3Ûøª;¦·Xm¦ÍÄisÆ äÉûܬèºqžòE®Í&¦ê}¹£Ì~gú°Ã=qε%·ˆc½³šx£”´KÕSüHêÅyàü„ôªð— [«˜õ+wHƒªÆñÃq‰iù¹9|gýMj6¯åClþEÁ’âF…"!C³(bzœ …c×õ⪿Š-Ê ÖéÏå^KyÞN>ð{ß¡¥_ÀÓG i÷Ûži#R±«ݸØí$…ŽOoÊ™o┺º¶·ŽÆí~Ðëß°`)ÝÃÝ0ǵ;Pñ5¾™sq¶wò-¶|ÇSo™`xPONßJÄö‚î+UŽåžbénH_ßr´îãžqÇLô¬ãã$Ò൵‹x¤‘Í»GÅ7ÁÛ =kSÔ—H²7’‡xÆÕÆsè2@ÿ8ª#Å–Béàk{œ¡ ­µq#(¿6A>t}p9ö§Ûë-6—÷0”’[©-¶ )YrO÷{Éôæ©/‹¬Ý.$+ €‘‘pY¢…뜔>˜ÈÆze-|U.xæK‡žh£E…¸Îq“··:Kÿ -ƒÆ—Zʦ%YK2!f@p[8l€äà`žzŠ5.Ÿb—E$-´·‰¿æç#9½O½m$«$¢bÛ]d¡'BOQïœ`â=GĶ3E:;%˰ˆ‘—Çýò¬Bëö ,pròX†ßõ¥_cõÁëœzô樯Š`mÜà µÏÙÒV„±Km»±èêzsùã¤#$ ç©ëXZ†¿ ¥ì°gv„Âda$ŒTÀ;ˆ#§åœQŤϩAq¦?%±Es•dGÈ\a~úsî9íVÛUÓôû¯ìöe…ÎP¶2ØÚ2UºžHªé­h€@‘²$n4O$¨Q¹Acå#®:Z®—þšx>Ï‹È%X e„r¡xà ç#ŽâŸ{{¥­Ó¥ä1­Ào2Hwló (ãøŠ‘QK£ÚZ½²Ëh¶Š6€(3»#Ç íÁô5XÍ¡ÜKq-Ìv.íòK#F¬XÆN9o^ÛyéIs>…˜“µ”»ä2³\0|±^¿6„}0 U¹ƒA[øwÁk‘$n¸¬¬àqœÛøpzT÷×ÖVÍçÝÂ’È‘¼©òmª63Ó·~´ÉdÑ[?•§‘•†L'Èð`ç§z…_Gˆa‚ÌWUFA$0ǾßütúSµ ëRâÊëdåÉʱR‹…/ósÇôNk­9ä‘äû+°Ábå îLúzƒÏä(¹žÁíKB …•—|,B¹H™äg’}2ÙŸO1†™-ãG\laÔ庞¹<þµϧÉmu)·d[’Gb0ß{=3Ï'“ÉÜ}NjHúlI²Yò®<¶÷P:©ü©Ñ›+xØ¡Œn\œHmõè1×Ú˜RÅÔÌÆRO˜8’r:a›×Ö–Hí.T[€UÎ1€zcÛôõª6¶–34…aÊ«mÞ²¹ùOû)ÈçŠsÙéã €…l’Rr-œçŽsÍDööRHþXv’s!ù‡äg¡Ï?ãOºòg|ÎÛ‚ ›üÃÎN9ïÅZŠHˆŒ‰$g<œ÷÷ÍIÉæ€@¸ŒçÒ§DvÛ†ÚÏê0 Çzs¾ÉŽqÇoóí\ˆmf샕Ü;ç°¬Õ ×ÓšX)¡Ø¨S•¶Œ㢾vñžá2Õs×í X˜¯£üª¾µáÕŽœ×C3*[³0Û€NáÚ³[Òf³ººì<È[)€ÀîÈùOÊÀgÚqœSmo¼=¾z¥¼ˆ­ûÏ'Ë1€¼©%FÖÚ§*yÀäQsáëTRÖÒOÞ<à¤q…Ž@›Ëz61É瑞jDÿ„Q.c¹DÓ–kLªà!Ëc…èpÇ4ZÜørᤊ+[Þ•• ¼¬±‘*c¯úÔºäQVuìý3Hñ*Y­-ËH`Š$ Ð_väu䊭e©iIq6ž,N’d…‘#EŸx=6œ1ã5=¶ Ü£Imc§KýÙ+À0p8ù1Ç¡ª¼wž¹µ’ÂHl¤2,H’¬~[’ªêPtÇø\Þ<êºHŸ/.>àÊrO\îÚ~¸ö¤{Ÿ Éw$Ãd ‰"gTØŽîùØ؞ªÍ¥¾…4Æ+X¬$’Ù”°@¬b#vÞËcêi¬|;$æé×2Lå{mÚW¯'kc‡Þ¢Ùá¹GÁñeÐåݕ烟˜þuVÚ ÏlfX4øƒÂªÇt*®ß”•8ùrƒ‚‡Ú®Cc£Ol,ãŽÞxâs!RÀ•,KdŽÙÜÞØ$tªøbêý- [·ž²rÿ+:²!\“÷²©Ž?„c ­8í4Ë‹AmA$ÊX¬o÷vãÈ9ÎNÉM'@G˜yKÄD°¼ªÉ#Ú«ØíÀîyÇCKŸáå¹YckS*±`Þ~I#syäüÍ×?xö&¤g‡ÁGÛo-7žAp¬9ê8ºãŒÒ\Yh×V–öÒù @c‰|Í¿º+´ô<Œ§åL’×A´ò¯©c.ÄìÛœ°ëó`…ã1ž(ŸLÑu6™æPe˜¶àfpN£?(=0X{ƒM¹ÓtHt鯙3 §óRW&<ìÈAÊ’y;qžù¨äÒ|:¨”U‘T~ýö|»c^wc!s÷ˆã§Ñ8ܼŒäs¸öô¬;”Ò%Ö%‰Ù¾Ü#…¤z¡Ï—ÏÝ's;õô¦Å éµ°X\,Fцsò²*ªžOPGÐÄå×Z4z…Åäó;C,1 …ILg –=\ž1Œ ¢ž²·ž),ÑX4}âJ7-Øe~œU‹_ iz—öhR2ÇfAS¹vàŽÿ/<ž2M:ëO¶¹¹7,ò«Ÿ(`ùn];z±¬¶ðî•5Ô‘ý®ág¸ß!UuË :“ÊöϵDº••ÇŸÅØ˜7n²ò8ƒ‘Ï^bt û³¥í×—ø„jã÷jÊÉ´ezXg¯©8’ãÃV·¡–îç$» „.󹱕þùØ‘Œ`bΩag{²);•€$H6ãœç8úwªŸØë3¸º¸F™ŸÌ—æËýÞıÇ\Šuއo¦Þ–ŠyÈEÛ±¶z‘ü[fe¤2‰vàŒ¶ìÏëéëT_DŒÇä‹­èP´×^½9óš–M>3ż“iÉf(>é /Lûw&³¦ÑüÄbòíÇ÷{H%HÈàs’?^´Á¤Þá›-‡Œ•aßýŸ×Ú£}$‡-ˆ‡•ŒAg=Wzc¸ÍlÀȨÈ“–-´zŽÿOþµ>U ’ ½†}O¿µKáQ² 6©î{ð:…=rŒClm¸/8ú~uçÚþµvo¿ß¯JÌ\,—n•j@XTý|ßã@á3Õ¿ëá« ¾–ðŠã@´B3ûµÏÖ·å ,/ÉR 1xê:~—†tŒÉ {ãßÇŽ9ˆrJŸl1b¸þƒ o 麒JÏuzâáY‹c.ј̜Ž¡+Žý‘‰.<#e|nw^](˜ R˜,còÙ¹^ LAŽªWþ¶¸˜ÛÃ¬Ï Ì¬ÓˆäÅGš$,¸ðì9$ã=*ퟃⷹµ–K¶á—ÍrbE,â%Œcn®[n*¼ŒVí¬siÃKžöP÷1<ÂËæHvüÄqØð? ¥sá{k©"ónî›dQDɹFIü¹ÉÜsŒ{b§³Ó--lÛOûd·9]¬Ò”µ—| v¶OZË µ[¸ç}Nò[€Á³'–K.Jðƒ ÈÁã¯'3ŸÚ*$&úõ£XÐ#²¨;s ÐýîO=1ž³t¯¯fÁqˆÕ7á@d ñ+›'§¥nZé±X¬ÞS» $2|dŽ;qÞ±¥ðeƒÉ²¼ÎaV+Ùú•ÊXò¸4ƒÂ0Iyow5ì³Ïkù¢‰¸SòÿÊFO+‚{ô > Ò®,mîZEU‰VC²EÝN*rCöGB+KKÑbÒd‘ ‘ÈuD)´*ü£Ú¸PqÀ¥PŸÃVé4AïÊ1™ä‰($™ÖàŽ¼à§åš¹¤h‘èöfüÄ`ªY£Tb£¸¨Ž;œÖjøJj}²FE‰`pb Y©\c0ØîsϠ×Ã0Ém§Û@x­š0ÁFá¾@ÛÈ'¦P cžj½ß…fbdµº‰g-º´{ŠÌ²ªðq†Çù¹cP¿á’ ‹szâ)ËHãÉYþWŸ•x~_n¼œÌ|0à Ô#F's!‡9£< Üsç¾ztª— ”ÛÈÐÞÅ$ªŒ4E’'$GúóÏû"´¬<= ðåö™s,1µÐ3À ÆõÁ'q峓ØUy|*$œÜAu¹a)Ùoò4‚HߦþîFyêIÏ5Ò ¸çž¼?Ï5Ïk]Nþk™%ˆ‰ÝBKð<©L‡<ò1\Tºæ’šÄ0"MXÜ—ŠX÷#‚¬¸##‘œqøŒGðnùa2͉¹LŠcÂÎ@”oVýàÿ¾}ÆþšX¶M=¼Ùq¼Ë2ícF@##ÜC—ê7PÜ‚Ðy²ÊÌ_ N<ƒòrxc¿“ÁîzÕý#M–Âöök†þÔÊØR[¦îK{ãœãœq…\©ü?p.±}—1\M*±b§/­Aö”òÖ8Ô ¸” í °;xÁÇÊ8úqR .ò íä TÍ#Ê¿h ƒ2§8A¼qžM;Y‚mEqcw5´ÈNIWÁ\ÀžBþõæ­þ‘ysjÐùÂft*¬îùÉ„§B8‰8«Wvfií™#g0͸©8,6•Çáœþ‘ý—¨ÜÃ.ûÒÞ[‰›å%c$gïþ·j–-?PI·4Ó½¾öÞ†v߂όr g‘œç½hlõòMÄÒJÑÝ•ÏFS€00NÓЭL¶·1é’Æ¡¼Æ2 ø)¹‰QžGÇáYòØjÁÕöÎWb»Ó{Œ{#õœ2Zß±ˆÉ#m13Góa°ãœ’2¾¹üòè`½–hä¸ùcx÷0|Û}}¹©†Îýn.L K~b¥N##žùÎ=ºÖ…œo$VóBÊàÆx•fÄñÌ̡ԜØëŸñþTöC„]ª€€rCÐZt1¦YñìpHÏíúWŸx€c[½éŸ7°ö¬µÎà;f¾¦µ´‰Gdút¯›¼oÇuaùxjÁÍ}/áQ³ÃÖ€Ž|¥ç×þµm\B'µ–,ðñ²ÊHäcœ"+ßÁñÇ,LíÀ¤²o€)p«"€HàyÇ8÷¬ù|3«[Ù0ŒÄóEhbYb•„‡÷.˜rÌ­×øGµt¾·¾¶³òomVÕw©óCÌîJ€8 ÜœŽqY·>Õ$Õ%ºY-\þôfI”y£-ð8 ªS#`Ìc€qŒVÆ­§My¤EglÜÅ4. “°,±È¬C?-œ)äçŸÎ¹é|7®:[Þ´PÍ9•ãŠñ€ÒLÇi*ÁOÏp9Ø~µ½ªØO}§Å H^T¸†VÌŒ¶2–ä{øâ°.´J–ŽoUžŽICNçÌp’¬…N2èù~ï$lZy®{ë—Inw[ E¹ˆ € ¬ òrG¶kcJŠûì ¡< ˆòïÝæ°E,Ýñ? çaÐ5›[ˆæ†VYżqy­r\HX°'æ889ü+_I´Ô-ôöŠòiÞvló‰p28ÎHÿ s’ÚøˆGmm<—mrá“|2+ p»™ú(ónzú•3é÷™ç<%‰#3,¸ †TeÚ21„\ÇN¦oaâ%V2<ÎÒ´fGK…R#9 ‰ÁÜ1[ZDŒbà^¶ïßsåŠ8àãŽqÓ>‚¹ÿìÍ}΋̎gŠ!5q•ówdgŽY@>àò§°ç~`ÓÚ¹íBjmQ’5/d&…‘±鬸£ñU¼6‹²y±oš ƒw˜#”8ÝŸïyX>úÒ5—ˆç€}±'s‰F|†Fj”ÝÛîqøvÏ/‘|TêŠ&– Ê …D$«í” ƒ•Ü"ÆyÁëœãCCMZK‹£©†Pyqp~lŒ ŸCœœ‚:ŠÏÓíµ”¾¶Ë­ˆaçG寖ó‹€såtþñ÷£Rµ×c×@´r4ùvï Gû²À© IÁÚÞüŠÊXµ›eXã‚Y™diaIbá\­ÇÊOò¹'øºúX·þÔZ†á ä–ó–C5°—2çp®SÓ¶jîº5¶´QµÏE³'•`O™ BÁ= ¨´yµ©á[µž4)–/m´”e‰8ÚÁÁ ðAÆCu9¯–êôƲ´qXÑmK«)ÙÎGR |ޏàw¨—Ù„°†åN@Ú¶l7E½•›Ô8½Oãµ+ßjƘá+åîaåÈåŠõ8ÇGn sRÞ^^C¥Û\¥¾÷’0Y:»ñ€rF:þg«5)¯-ÞmÁ`îxÁ$Œ@ú’:ú‘Yój— wnß,†V”dFÙáˆÏm̽zú`á’j“$SKͳsnP’§=ÁüAÅI©Ý5¢+'̤¹ ¼ ÁPŸO\õé±_9Óg¹eVîÜ¡¸8õÇ#j¹gwöË#pp]q‘ÁG¯¿\Uø’#lü*œs¸ž? L34iÎg¡ïÓׯ¥) ¼É¼È dîþî8ãÐó­|ƒ¬ÝG2gŽüVbòãë_TÄvÀœtŽÕóWŽN|o«ÿ×Á¬ ŠúcÃkÔ‚y‰I'¿¹!%À|9uÛ5ÊZEâøeŒOq;£…–@|’̸œ™‡9áGãsµ…¦kºŠéÖIp‘É8 Ìêà±ò£m˜PNò]ðqÕ‡`_©ãçÞ¹ëlÛ_Ü[â `™#`Óm`­å&1÷~r3ê¸Ï¦<þ4œ$Æ;ŒÆŽÃ7,DR¸ão*|®FC)ö«w*ò>ÔV¦XB³*\®çÈŒü‰Ôçq#±Ú9ç‹v:•Íüƒ*[K4 PÍàÄ®2qÀ;°;qY?ð–^_­³ÙY´]¬d\1U™ 3’‡¨$tã¨5(ñd²y Œco”½Ú«Æ9\ï>ö;{Õý#W—S¹º‰àXÖÝš3‰Ã’C2°+ÔWŒõµUÒ5[«û‰-äXÕÝ][ÍËÒ8Ƴ§läž2ÇŠn,ígkˆ„Æbææ&鱂'×Ô‘Ímiú½{Õ6ÌB†o¾¹`¦9Úzî:‚l!yž$6@Îì>Sp $e#l† dâeãØûfxuÆ»–ÝÇkJÄó(dÁA&7`À á=ø2M©ÜK C¨EŒÉ$^Z92³"óŽÞ?•U \9†Dò¼Á6ç_•—pÀÉØÜûû:Mh¥ü6ïk(feV;Ô…,Ì£õCøÂw«¥êÛL$ÞHÚ ‰ 2®=~ðÏáÇL²M~H¶·¢0˜V!HO½Œüýcí˜î5:dWpÄØ7+–àdþðFGÎqÔp*Æ¿[]5½­É–cûÈðŠÊ»¶“œgœñÔt¤“ZT‰Å<’6Sän`â6ÇÍýò:žýMIoz·o+G É¡ž2¡ÎHàŽÝ*œÚŒ_Ï Âd‰Da ¹Ë(‘ÇËúúSd½˜YÚº#²N…T|Ç+»Ô»Õ1¬k,°‰€JƒÀo“w\ô AíØSßQ‡ªÌq… ±!qŸ÷¸§]ßÇo*££©h‹+ÏFß^w T–®'A åŠÈ£ }ÿÏ¥Y·R±4™ã8lŽ?§ò©”0¾:Œ1郓Š<¨œ.× à.zg¿ùü+Íõà³yµB3 íYŠ?x9ïÖ¾«ˆ*¢Œq_4xçð›êøhjÀÅ};á£E´bGú¡ÓžÕ­Jü£¸äzU´AŒ©ÎSšš&dÞ¬ߺ@ùG£©ÿõV%ÓåFa$…sµÁ·rTå—iÎrŒ0y'¸ËÅ[BDç,SY|€]”–;p0UºàqצmÚj–—èײ4‘g`,¯8Ï|v"©¿Št˜¢/$Ò(Vel[Èv¡Žp¼|¬>þ†–ßY†óV’ÊÞ2éešl2®U—‘ƒPM4ø‚É.eµ+2Ê&X0-Ýbðû¼ŸLgÐÔÄ:WîÜ\ÚsŒciçŽΧ' 'öîŒQœîTnÄ¥TŸ»ŒeÀÏNhMsOk•‚4]ÎÍ»"bX°~cŒÈÉô9,÷ZvšñG<0£Ó#ù_whå²>àQ6¥¥1ŒnÎ$o,ʹÆOO—%Ç=÷{ÔZ}Å…î‰0 gUÝn#]À6Ò¸ÇF^½éð>ðo†+guìùØÔ#îözûUDm Œe"±G…ÌQï‰T©GÇNdã½F5 U·S-®gP®nwJ¬yéòœtéRÚ¦xÌÑ[XK UI6,mµG §N?Ýö¦]^i–±-´ðE82QBœc#®K89Æ3ÔÕYN•Zî Xr‚ÒPS¦ÌñÆJŠI4¶•L/`Áœ`Wæ!8ç©;O×Õ]&ÓLÛ`[_µÈÍ)ØÀrxÿxÿßF£žâÅõ#ª>ÒU$ÞdÆáó gøp~™÷¨šKI­` —Š%Ìb68AãÆ©Ì4ðòš6%‰CÀ #ƒÆAÆ=*SލŒ°!ÎdèsÛØ õ8ü{½ÙF›cB¿)ÆsƒAö}»Õ«kxmàctuf<î뻞§¿5nb²ÅÜö<ôý8¥Ï–2™#wËŽGóõ朌² ·åÀ<`c<ûd~uæ¾ %µ«ÒFOšNk2,™“Ù…}P÷@ñœWÍ5çÆš¹ÿ§–¬úcÃm Ô¨äļ¥mS‚@ÏLŽù¨õMLékÝyfU†õLüÍïµrqߪþ5±ò$žéZ5 (Œ¡Ý½ îÇeT‘ôÁ犰Þ,Ó£·¬èQNàîኜà`†Éé€NqSËâ;5‰–•Ûd’!#Ë›#8`:gÚ¤²ñ •íìVVñ˾XLêJ`lp}yÜÇ¡Î*À¦¡â«(4ùob3,Lñ!FUª3à608SúRj^#]í¡¸€º¼â}øß&~XñŽ H9ìzb§·ñ>˜d‚¦^1Œ¶³ïª$ílzãÞ¤Ô5¶´šú­Œ’Z[¥Ãn“hebã°'#Ë=¹È©¯5eo ÒDÌ^X¡!OC#*g=ÆZ°Æö¶ñ3Km6ØÃ^ µ[hÞ†àHÛÏnkV-jÚM:êúa$1Ú™‘ˆ_-˜1RÌÓÓòŠ…|E¦2,_jmÌv ÂùÜI{ ½FØÒ’9\m“ГŸœ~µ_R×­t«›ˆçIA†4rFݬ¬$#’F?Õ0çãÖ¢·ñn›<ën¢c!`§¦dXÆyã,ÃŽ£¸vóU6E ³¸¸7'ËŒÄS‚³mù˜vCíÈæªÛxŸL»KY®†àd\0$'ÊG\âE•s=ÃË^|3;Ä7mà»®8éUG‡´V2‡ýh!‡ÚË3çïrC3zŒñŠ£´ÁüŽIÜËç>%!‹å†pü±<ç­\µ±µ±E‚Øþí~à’VsŒc«qYÉá]!ÛùVE*Ëö‡ ‚»?½ýÐáRŦéºeÃÜC,ò)Gw!Yòp™8›<3ØS%Ólc¾ûAG¼òÞcc~Ï/v3ºqôªØš<(mÖ7@P†Fù©ïþÄ•DúV•ä b2îCƒ“ó7Ë!Ï<“<¹‹àÀõé’pzœçƪè¶RNÓy×@Èìä!Ÿ~ ôÝ“ëózTø{L°‚0××h‰!TÞÈÝ€T|¿Å…`;Hq¹Ü©s÷¤==.§gi-¸–YbÆÛBºçѳ‚yDöçšn¡ggx‹4§kBI(ϱíè+,èÖ3¶êPѲ«+ˆt#®#Cï¸Óìt‹kYREžBTºª•H;r§ÝÎIéUµ=6Úé\Í!X™6ä mÜí·Ãñl0%¬M…brÄìU#¸çšÈµÒ3n¢æeVU!L_?dÃn8Áv§Ë¤ÄÊÛD¡—†@ÛpÙä«Çמ*ÂX)Ó$´ó“$\Ž9ÏnsתhmŵšCæy¾[³+ƒ’Kw'¦O~ÕeXyr/  äçÓÙ©.Ž¡€Xø\dŽ š7- p¬GQǯ?y¾ºÄê·½qç£ÍgB¹¸Œ´?}Rª CœñÅ|Íãa·Æš¸ÿ§–¬,úOà ¶ƒgŒŒÄ¸ÇÒµî Áo,Á_- ùiŒ¾9À>ý+Ÿi—VÍ$ÖËGÌO2$ù°®C(cž<·ˆ8ìj{9´‹›mVâ}-›Ìe_³FÒws¸•'¡9ð@ˆk>¹³Ÿ™Kù‹k8Ù‰@Ò0sÉßVÜÕùuÒÚÚäèДÔ"yËG }`Ç8$…©ÎÎøª6šîiKe¢È6T…Õ#-½ÄC‹g8tŸLgJ5­ P6­‰öƒr­å¶‹$™>ñã’rÞϺÕh5ýi¦xth’ä­k ì ,w,d¡ÀëWµ[í&ÓRš;½¢h#å#rV@wƒ€ˆÃ<ñ‘V5 VÎ?±Íý˜nšêñ‡U)tNý&éîsÔÓ´»½S¼?`²d•#I•Ì%²»€$pHó2GbÙïUíÿN’ïí™]ƒƒ%¶åCæ;¿6@;ðúôØ<( –k¨&PŸ:µ±Ã¶I-øÜKõ`1SXxb;)­9Ð,vñ™‘\x ¼’0z·­hê:9½Ô-.üô oœ£©?Ĭ!†Ûß#ۊǷ𶜸¾Œ±"v„”HÙÆW’zrqÍfðb#f ˆ#o/ha&9ž½üÅ'×`Hÿá[+\C¹ã)þ¨€˜ÊWƒœ•úcéWm|;ö}^ÒðK}œ‚Ÿ»;ÕD>^ÀK·?7~IúÓ56â÷ÄÌ#ÙoHDäࣉ7£®HÏ£wéUáðĪÆ.QY#‰U(ÊNæ_÷× Ý8úTqørúØÚn¡ŒC"Hч`£o– ÇÏCóuÁ;«·†/¿³D\D€GäÈžk*¶"xÞ:ë‘Û`äÔ’èú²4÷%ƒÜŸ4DRY2èÑŽqò‚§ öõÎ+Qô‹…XjwC !c# c9d'ž½{ñÁ¬ëý+Pžxw‚âÑ6em¥6I»*¨¸lŽ9ÇJ¢ÚV®–` ¢f7úS°rUpG ‘Ïó»&£þÊÕä¶dç-—,JñSŒõWúnúÕË->ò9¯Mä­*¹bŠ$ÞÜq´`m8ÀïœvÀªwZeôÓ;‰›Ë&A¬Ä܈§Ucö³ô±=Ìš+¢:-È€ òÜ›œO_|ŸÆ±§Ó®äšxÉ*o@ªó ¤‚ëÃsžsQ›IÛ÷¬ì‹*‰x£^™Ç§Ðg±Ô¼ LÎÉò®Ñ& óÉàaº{f®ê6òϧ¤jI‰Fp¯÷°yçŽÂ³„7èÑìWXŒò«®#²;mÈÇ¿®+U ›dܡܨÆÎxž´ô#f‘´†u#?çùTÑF"Ú ªNìóÇøÓ¥yCâ 6FF=+Ïu¡Rï óO#¦¨Û‘ö¨óýñŸÎ¾«U1ëLf¾eñ¿üŽº¿ý|µ`ó_IøbE¢÷ò‡‡5{P¹ž緇͙c.‘7°ñéøÖ|þ%[N6Gx‚#/˜‡` #s¸‡=6åzòi­ã{U¸Ø _ºpþbìz§-Ù~pÙì3Å[³ñ(¹:¤¯ ˜,íüí¨£Ì$I22õ ñúr}øm¾¿4òê/´rÅii¼B¿3Ë&é Ý6Ÿ,ãŒÃ§J§s¬iÖüÞ5ؼÛp ¶ToŒ)ç,GüóÀÏ×¥Lž/Òã»o2'Y$9!‚áq)ˆsÐbO¥I¡ø‚ÇWŽ;gŽîŒq\(VbÀPO8Ïáƒé[óCÌ[fˆSiÁÇŒðqÅ1á¶×í0Å.Ñò‰ÿõ‡åNK;X‹,VЦô á"2ŽÇè8ÒKchë 5»¬EV4hA ´`cŽ0 ÀšŠ=/L3m2ÌCy 1†ÜO^~µ$Z}…›IsºHXæHbPß63Èð ü*”:nšPFúeŠ„ÜªžB`n8îÏÕ:ÚØ‚Ì4Û-åË’ ï, lã®UNzäALþÉÒ@®™b±ˆü¼y ÝÛ¶ôéžqëÍ>]6Âòå'žÊÚYÆ‘áRÀ‘‚F@Í2-7M¶¸ó­¬-¢•£ ¹b Û.G8¨ü@t. Óm *â¦8퓊†×DÑ,-<„ÓíÂN×]ÃÉ>Àfž4Ý/ÌÿgÚy«!˜Ÿ%x~~lúûõ©dÓ4æRÒ"!•Æ1ûåqé´zS-tÍ>ÊÌZÁ$Hû’>V Npi#Ñ4„ F›f³iÄJr¤c:v¨N£®4ë19ýÒŒ‚ ô÷¡ÇzpÒì–åœZ[‰]·–òÀ,s‘Ï®yú’jò|èÙá‰ìzŠæoŸZœÉÎÈC4L a•DXQžþ³ïuÏ\)ñC=Ç¡h¥0…1}íÒìÏ¡‹u^Hç2ˆµÅ-Ì×inp‚&t8BY‡9| Ÿn„hXG{sáñöŮ焖ˆ•Cp‘‘Æ3žäö¬Û(|Aj–1<“T 1a 2€±pH mÿX8ÉÇáYrÿÂCa4ËPgËÙ ]Þ\„œ(Ï#>œžÝ6´¹/fðóÉ<’ý©üÂ¸ØØí @ ØsÓ9Î+6Ù¼F²@·Α$E›÷PÌw|¤‚1´mÁÇ$ŒqR[>·À×>tñü¾bâ<2˜Én€aƒü gcƒÉ­]NK´³xm°n¥;#|ýÜŸ¼x=OCÒ°m®5ë;8mƒnlÞ$ ËåóîîSÐðO¥\ÒšúMVòâháDà y8_Q´©Ï?ÐAq¨j/=мÛx®¼¯´C˜Ê ÷AÈ*ÀžÍž)ö7‚æK{¿¹'òïÎ+Üê“Åw$P¢±RK»ó¦ãùÒ´o6å ´¾ìm<63Øã?[›hÝù—á»ôäþç£ãNî õÀçýaL2ÈÎ¥HFÜH?¦{÷®V;¯îOLÈMTµÿ¸xÏÎ8õ澨LìíÓÖ¾eñ ÆšÀ®œ~µ‡Å}áVÝ ÙœýØ×ùVÔï÷I_âë×5ü÷i ¡€Èí1$‹îÊnÃgƒÆ3ÈÇNµ¹¨Âìö #§Ï2¯—ŸÞ©Bƒîç's|¼ŽÕkTºº‹GIôÈä’T‘QÐ&A¸©Æ} Ýž˜‡5—k®ëJ->Õg‰'À‘J#ÃFœI;È9èG±x§T;¿±XÜùHî& ç!þ"@ úÔ¿Ö%µÔmàKFš9%w»‹ØÇ8Àïß¶*•߈/ ¾¹µM)ŒqVvr¯#å9#r z“ýÞM3ÄwÚ¢[ÜZ¤)$PQؘÜJØõãŽõ[þ«ØnŸÎÓÑ”G‘R6U÷¸ù‰t qèkKQÖn¡ûˆ$}¤“bDiuØUp';ˆÇSŽ*°ñtè Ë¤´Ry¦6æùÎ$½ò£?6Tägˆfñ”ÒÁ›[8oÞ™§!BîŒ÷é¨ÏLmaÚ„ñŠ‘8þÏÀ?ušãóù‰\(ýç¸ùM>ý£VKO²ì ?”d‘LMÎ1×1cí š_Í&§mc °}Ù‚G”œ…Q&NÑП/åÎA z‚mnHg¸a;£ ·l‰6(rs€¤ÙÆŸZ¼kk RJÖr*,{È,»€òËãü>¹üIü]m¶Îf YBà4ŠX0Ï»'>â®Yk‘j—QÛ¤r+¿˜C)³h9’\ §‘ÍP¶ñ [ë‹KµBÈDf2c{ubØ-Êðr­ÇLÆž.³`ŽñJT¾Æ!£á‰;wd—#=A\V­|S§\Üà # —|’FªÁºŒ`Ž ãj¯Õ»Mâ«?³Ç:Ûܲ:³žY rg9” ¸ÏT¶ñ<^y&ÚwÌ‚4‘TrL’  7p3³ÉaÂ×J¸*KmëÁùô®jÿÄA{}EŠ×i˜;Õ>BÎê0Ìàd“Œkï^ZÇyøíîCœ10VU€´k‘êí×û§ð±sãI¢·yÒÒ*Λ^|2íI”€§÷`cÕ‡nKæñ‰‰|Èâ¶ÇšÐ…{…A|Œ(mƒ<†àµ«ëO+þæ -¤›.Û (8?1ÏØÒišëê7·pÉk>X 0”¶ð$xÎF?Õ“ß‚+&ãÅ—Wiuk¡¶š v|¨!¶²‚Wçsè3íH¾)“s1·ˆ;Š8XÕƒL Ý·?òÈž¹jÆ‹«Ü^\]YK³FÎÉ #æA3 0@AÓ9À¨íüKq9ò絈0›c²Kœ˜Ä„¼Sžœ`ޏ {­Ïe«N²GæZ$q‰”cæqÜ|œóÀªçÅÂ8 c áÃý3: }Ò~m¼gƒƒ‹Óê²G¦Åv-þy&D1™U%Äg•ÏsõõÁâ³?á&1 Lñ1h¦d;Ã(’EHÁÄx«Û{´èïLNVV˜ÀÁ ¼ ÎqߟʡÄñçÉó+–TÃÛ¸».:ÿ°ßäŠm¿ŠW|ï,2˜Œ¾\M•>Xr§'¯Qž*¹ñ[F&o)„;ÆÞ_Ì­ó˜çîqÒ¢%’'v–-ÎÎÈiÃ1€I,yùÿ—N÷#¼†xn¥ ,ID»”XØ$ämèEe¶·n°™ ½Â3£H¡“`ùFxÉôàuéDšÌ"C$êU·mGÊRAù°GÏÔcúÕyõ˜#ÜBÊ$ äƒ÷wdg'û‡ÛR¥ð¹¼ÙÈ ƒ¼²p:qž™ÅôñÜüŠŒ$;@%º…-ŸÐž°ÿk,|È‚7 UÔ ñ¹†F:ýÓW-®h–d,TîíÆ2}>jÛ2”R>gÛów# ¥ßh•••O*1Æ?¦zSÖ7–5ù†ôcŒgüæ¸=]OÛîxó^½MR´ÿèy9ó·½}K*¾þÕó'ŒN|g¬Ÿú|—ÿB5‹ŠúÃSÅkáx®';!†ß{ŸE$þU庇Äÿ\ß¼¶×KkwÄŒ{’¹'ßÔœc¥zž‹ªjú·„T_)nfJE n!Šî'sIï€r*ÅÖ§}­¬:„°Jªé+Y>äù±Œméòœ†ÙÎ1U!ñŽ£{d·6šsÎXK¼¬Ø‹[wá}ÃÁ ­/Sšâê{[¤VòÜÄ’Em‘”Ç98À*9?x0íYu¬ÉæËeq~ÛZs3éå Ú (äÔ†’«:Mε>©*êëk›‚€Å€Ñn_)‰Ç ~o—ŽHèi°ê:¬lR4Ws^E%ÄrZ°V’r6¨ÈàŒ¯QOmWXŽ9¥:l¦ìQš'bšÉ‚ª7—kp§ƒøÓfÕ5U1Ó§Û,­yP±(`F1ßûu­=T½ÔÞH®aHZ+u’VE*ÈÍü%[8 «þF¬­>ëUv°k»iîe1Ǿk›Mo#£ „| }[ž‚ͦ³ªµŠóL•7ìG–Ecó¤çjqò°9ÀPÊÃŽ´Û“­½ôÖðÍ:Y™ÂG4q!h±lœ©I'ž¡—Áâ¾…s«3?öÉšÊü²D§s¹TP ¯gY?RjÜÚ…Ü7WLÞyò&Ãl’$BŠCn H9'œ…Áõ¬¨üQ~—$I¦I™TÊ‘°e1/ÙÑöœ.N\²Ž3}1W×Zº»Û\è A3,$› §9B  úUÍ[Yš YôØ Ê² äÚ`ÎÑwF±ªZf©wq©¼W*iÖ7XÈû²á8ãrœŽ»±Û—z­Åº\ÊéûÈ®Œkl²ñž·qœçqù„àäÕ üG i´µ` í"Vf †$Ÿ—€:gõΖ-zk«„†{5M)ERÇ(  ù†0HfÁ°zà‘bòòî+»Û´[G 1G0cIò ¼°GÏ¿=x¦š¾¤’ÇŽÞHˆcö¨UŠ&ØKÃ0FFpA'éQ¸±wI&Š) µbˆ§ym›C0K.:ŸÊ8ÓŒò¬Z|%’x­&WEcmŒ‘ÊñÇO¥Jl4ØIÅ•¸,#Q…9·NOýô}j),´ß5²‹tAüÝ3Æ=‡ä)An `³ìNNæÇ ¥g7MD -cPr¼ ô}ùýi³iúi$ùkë¸wtü~^ÕYì4ÄBÂ`ÆwuÏþ„j³XÆÞnÅ”¤Ãþ`}p*FŠÑ»|æ<0bäc¨íׂéФ7PÞ·”ë¹…¶ ìò:©n ô>•Õj0\´±À³y1Üm¸Qæ´`0ÈbÞ» 9ÉîqUïἓEYEr· 4aYåŠyŠ_ý6–$>„ç"xžK³ÍlÑ´sFVEuÝ$bHó–ÁÙæ ¸îpsK%Ω·'˺3-È*©èþÎp3‘ÉÀËmvF1ŠÍ¸×õÛHfž}èëž•c¬†9$>nÁÄ`1–ÀÇLÌUKˆa3¤fDWrÛ#,q“R8ÿëÔrÉlgoôˆš@NWz’­¸< à}OÒ¢0C‚HÁ_ǯJcÙ P¸Á#ØöíÒ«Ëq´fF{uö¥E±Žzðs÷}¿0Oùâ ¸Ò9c%Á+–8ÉúwïQÇQÍ$)¡mö[ >hŸi r=åŠ[…×2Nš¯m<Ärr7 €:âH9ŠÞ?ü¦[IÃHÄFrDq‚à¸Hxï·Œf”Zø¢Òk‰RâYUŠ8GhÎØÛÆ›‘Ó…#$œÝYµ´¼ŠY¼ù-ÂJó[ˆÐ’«‚›X dò»Ks‘К³{ܺÃÈRy-Ì(±¬3ìɹ·–äg? ïÀ#<ãÚ[ø¥,m╤2À!å7HC¡}Äð7÷ÀÎsËã‹Å!Š]I#FÁrQ¡Ü1‘Û œr \ 8ÛÙF°Ä²8ˆ¯™)!‚IŒóÎXÆ>€çݲ§ˆÚê‰^C¼ŒÇ±ž½A9\g#†b¶ÏÚ ÕÝÚÚi-^(£]Œ ‡ÞÁŽ2à‚O ïŠÌ¼¶ñ j×w6r`óÙ£·’Lˆ0¤r2¥ÉIã“Vl—Ä©Â.ãµk6tÂÈÑ€HÎAÏ8à tªž^µi{qmir7I²yÖDTÝ’ûLƒæ$ð8GbqK,ž({œÿg#wD "…‘ (~»A<þ]ª+©üPö7–)„î*vç'Sšdº ÒG$—J²yf0Ë;’ŒD88É9RvôÏé×ò¬oÌ[·ƒ;Œ™GröµÔ îxUo•L™ e3œžx××òжÌsI¾&#î±Ã¯ùïVWp“ tÏiŠ6¦æä;d•=ýyâ§£”Œ œð_åüëŠÖˆû}ÞÒ» ‡xõÅRÓ€þسÏï×>ÿ0¯¨£Ýò¯—ñùùëÅnèž“L¹¾y"¶-ró3í ´…•x@HÚØ;˜à€ ƒJñŸ¤iÖvf…m-QQòe28+Œ½[ŸQ,Z^¯¨èV‘êR”¿IÚC,L3ù‚• à#‘sš‚ßLñ¢AÚCn¸gXWh ]‚§Œ @çø‡§ ‘âeY'mBxaD(Iœäléæ1 ã§ät"´Ô§¶ºŽòöE[ˆŠF°º“AÉ µNGj‚è·ö=żW©²ZºMÛT³³l_î¨(#œƒŠ|š. oTp Í ¹ó[‘þcÀèÉøŽW;zM£éZŽŸ%¬“¿ž#†dlÈFæfŒ©#¦F×äuÈîMt„¯!ºŽiÈP’Ø;—®}}©™Áe #< ÒpÜõhíRÀ©ùIõ¤VB£8Ôv¦üŒÀ©ùOñçHæ89Æ1þ}i¿)ÈUN™†9?äÔlªAn~¤;CnÆ “Å D2dã N´ÇXÆæ3ØšA´ž0Tç8èM((Ùã8 ÿŸZ%Ü-Îç ö®Zî mnæŽ/8Úå¾a"|À´$`ÁJ9õÕ™m¾÷®’}£|q£nýÙß.T“Áb¢<`ðq’9Ê/ÂGÓn{x–YáÌ#˜‘Ï`íÓŸz”Ç®O OwŠñÌÜZ4N¡”Heã>ý2:U†-~Xà»<²7!˜FK,{°g Œ÷ëRÉ®n¬n.ážxmœL1.G(9ù¾öJ÷ÇNzÕ½aõOì úlRyòn/÷l$}î:í¯÷ÅCa¥&º—z…¼b‰Ò2Í Kªƒ€s’©“Ûæ8éÍo®GwvH–×2™dhÕ L’ªG<¶ÔOQóäŽu´xu6RuEhÜ †%U(Nç 9É;½ºt#œ[ýGV‹P–7yá¶’í!ˆ¬*NÝîÁ´ç…CßúΣ¯îö4wl¸’àQŒ*Á[Ì8À'‚N8ÍZ¹“Y†[…g`¤¯úà;@q…Îã¹ò¸8ÇÝãšïw¬\Ù´Ex’þàìŠÙ°FèË’G9xÛÜsŒsDwºË4‰6»ì؇Æ~cÝ[ | ƒ§9ê1Œ›¶sÝÉ9†ê‰Ãç ðsž}zsn5KWd<ª$лýãíéˌӠÅHo5IghͺÄLŠ w;AeËg€F lvÇ4²}ªM:Ö_-¢šc ˜,EŠ©á†ßÏóük&{ÛÆžäMy¸;!p %sÎ #­9µ Q÷l¶ŒŸå1;`mcÎp ùGCÜ{UI¦‰a–$.Y˜¼eIØÌ9þcß5åšàÙ]Ês®Z7T!X… }r?ÒªJæÞêQ·ÎBÙV9À8Lž3Ç,qìy­8K´HìT<‡’€pzŒúã?[UÊɹUqÇÓ×üãúËå ‘#py$ã¿õ Ä€¡@w$‚0#<þθ][?kº ÿË^õ_JÖìAÿŸ„ÿÐ…}@#®;WË~+çÅúÏýMÿ¡šÉ¯¢4%ÿ‰t›g­mˆb¼cŒûÖµ²"«=Ž{ã°«ÀŒŽOAÎ)­ߟ”äò=é P gœsú s`¨9ÀÏZŒˆ÷ç 8äúR @Å ½Î @|¹À=Ï.Ü€ m¥I¸Çà:â‘ãU´uëBÄBm pÏZTU#´ž‡üý)¡So2àÛ4„)_½ß#ðÿë*nÐÊûFAì”,{C}ÁõÍÔòÊÝ>ŸäSJ((ÉNyÿõÔ[ !ŒÒ- ޽=j"Uã$p8ïQ$A€!ÎAã¦Gÿ?Z‘ÕY‡©9¨¤Nwuäþ4¢MÁÉoOëAlŒçÞ¸ªlXÏËþÏNúÿ¥28ðä»ü¤6÷èI§c.ª¸Q‘“ÀÉ=¹¥ áʬƒåá{S—<œö¨$È9T÷Nõä÷¨åØÊÀIó¸ 6oþ½1Ñ% ¬UJ u<XÉXNIqòž€ä z2™ Œ `ò1éú÷ô¤€¶wr0G9¦²±<?‡ zj7c<…‡*IS’:éPyN¡»ãòðqLT2]ÀU+†Ã}ô5!Gbc#ƒÑ}?ÏÖ –ÓH#~=#úT&1 k·iÜ9 ò=OóªÒ(«>ÒØlž=§^•¶Ò²‡&2ûOSŽHôÇëPºÈ™uÚ¤žpøäœóúÕUBÑïxˆ,NlÒu+ÁU<çãü¡)#ì`äØõÿëTwÞb•R9õ?ýcUÐLP…€Ç–'ê/Ö­pªl<7¯OÂ’!.á¼6äóþ} JÎù]¬Ý î9Î9ãó8ÿ&¥B>T'ôç¡ôæ¸Mcæ¾½'¨œçó5_FÉ×ôâ:ý¦>ÿí úpîPvŽ•òçŠN|]¬Ÿ[é¿ô3YUô^Œ¥laùz  ÖìCv€:öÅiÅ1ÙǦ:ÿœSœ31Q‚óÖ§U*ßy "˜B åžHéøþB‡©,FzŽÜP£oñÐŽ†£e ¸ÜI=sŸ_åNòÎÎp0¾¿çŠj¢‰fëëS¢î<| úRbrä?)ü{ШB§ËÇçüô¤xË!çóŸóýi¯ϵXdŽGõ¨¼³ÊŽFsÓ¹4±±•* ’SOÚ3AÇ8Z‰É$®HÆó¦ï!°8ǰ§9;$ž=ÿ*¬7«ç <|þ⤑7aøÀìGOóÇåQÇ’›X€ôãôòiÆÜúdÿ:·¨ã'“œŸóšO,—ó9´ÉbpHãÿ=úÕyY€A-Ô~´‘K!Tb„ `€ÄŒÿZ‘A9b='ÿ­L&Ev^W#÷> Ð ÇBsÇ4à lF*Uãå$ ûãõ§±#°=©…HÁÆ@`Óq[ñÎsM8ÁùyÏz@©÷Áëò÷õ¨äuòÉÜ2F?Ȥ;Ѝ?lžir†O­SþÒ°i|¶»ß;vç;ô.>¼u¥Šö ¥…b¸…ÙÔ:pw’öàóìi©wc4 Çq–,mqË»hç®ÞqéÏJ|W–“¾Ø®cweÞXW±Ç§#ŸzbÞÙ4Œ¢æ À|È2qÏâ@üjY®¢‡&YR>3—p¾ßÔ~u_í–lÇeÌb»V@XÔuêx©<Øå%‰£hœ€Ðýi¥£Ý•™ $ã q×jƒ6Ϙ8 ~døTÞL&,•—õö¦Æ¸V6œóÉ I,Nr9Çùÿ8 Æª2 `v#­FcW¸Æìu§øu¤(Q&G¤qŠ¡Ø0Ç‚yȦl9L® n 9Çãš–4B˜‘“ÛÖœåö`sþ}E†e€x6xçôâ“b”œ0Ã`•ëéïHbýß+_¯=)¸ÜÍЦ:É5ZGFb¬Ù=óŒb˜ñÎÑ€NàTT²£/°@/ݳm pq“ÀçÓÿ×^{̳‚Ù&L‘ÓšfЏ×tìuûL|Ÿ÷…}B œzWË^+ÿ‘ÃZÿ¯éÿô3YX¯£4|}Š,tÇ~3þy­¸dÐ ÿ*Õ·ÎÝ»w/Á©Á ± Ÿj•Fì7RFA=iÍ׌uèji68 õ¤;ÆOÔòœ‘qQmœà ©€Éù¹ÈíëK³hÎI"—GŒûŒŽõð‡n0O‰ðOÞäíJùÚ99Ѓ€wæ›"†;0ÅïO1«€däqïQº‚¹öÅsðˆÂ5½72ï@ªQ‹0™G=÷.3Ü{óKiᵆæÚãí’oŠÝa,ƒi`3Ç\c’zg=ðHªoà¨D°¼z…Ô"9( (hŒ@.àJ€1Üôúa4ÿ ͧð_³ÉäùÚ5R«ò Ãn@N8ôÉ ±'†¢ûIžÞA ¢5ÚH1NOq 1Ó½ž&³¾| ݤTÂï †9#PG¤,}Î9TzÇ„WT·¸·^P¸B„„Îјʅç§îÆ}rzU«<æ&¾yw]ý¨)E 2™\ ç’9'ײ¡ðƒDË·bh’0 ÜŠãÉÄuÈPsÕO­Aqà˧Ô瞸B=²DÁ±˜„dËž ã¹UÎÝZ_Ø÷QÃ<0¥®Çº[… än+³¾^§k1<ò{Ñá­m f\ý¡Z5_͉%}Í×÷˜ï÷sžp3,¼1cß=»JnMÁß3be“/@`¯^½êEðܱj"çÎ(Á~Xp»Õ³÷FY¶`ž>RGÌy7J¸»ð¬\‹ c‰;e~R¹ííéY?ð‹Ì‘Ê‚+bÒ]‰~EóK>NNØ1ÅYÓt««]Q¥š4Àe ÊW*¢0½”wÍoíf ¼7ËŸOz]Á@9'9ë¥!VÚŒtί9§ˆ•—'¯AŽâ…@W7cÁÙ>`Ë¿îàdŸ|f¡}­ ™Èëך®ðJÓ‚Ëžyí×úR3*öPc9¡£m>ñãÛñàT #aI#Œpr9éÚ£“g–¤)\œÛ·'üþTÏ%’FáJ3ÐgZA1.œôà}Ð8ªå76S$O`:ÔCÁÉg ¨0>óílp:ägžj¸$¦ 1»üÿœÓ6«6Ö`g¥8DTI†Ï9Ëuzã=銤·ÎÀŽÛˆ9'œŸóéNòËÁ!FO=sþxð®ù.ÝAlÒhCwˆôÕ=î£ÿÐ…}>ƒràçŸjùcÅ#/ÖGý?Mÿ¡šÊ¯¢ô¦+i,x>•± sÆî§<Ÿ­mÆØ8w\’pAÿ ±Žx8§’Çj®'œñ¥/—€;ž„úÒ”@$Œt ¡ÀÇAíŠB„œ–•È“o!GCÜTŠHçø…FHÌ®§¨£d€FGTd¶ÞÁ{PÌcÜRîË óΙæ®ò8ßî=©“68Üq‘÷F ‹ îm§aÉS‘rÇ|Ž>”Ö9”c€¿!;T¿aØs“JÄlfVÆÏãKÒT†R¼}A¦Êä‚{:ç®E0HªåÛ—Ád~DÒB¨Ü~ð À¯áQ!Vf9ÁÀ})ŒÛS Üž{ÿŸëP3Œ°”3n: v¥‘³àyF[=ª¸i€ÚwzœŒš‰†ˆ$–\2?Ïjyp y`Aû¼sÛü*œë¼&çù€ÎìrHâ  $¤œlçç^Ÿç­+c”Ûž#9÷5^p¦wÈã)#ªrG…'¯#žN¥¤ãüŽÔÆc$¬¡IP‚+Îu.½wG4¾9ñ.—žŸk‹?÷Я§âÇ—œšùcÅXÿ„ÃZ#þ§ÿÐÍd×кi‘m×vÆ0=}«rÜ22>•³-F8äôçÚ¬„ýãsÝÿÏüF=ÎiÎÇŒ¯Íü¨Éä7_SN_¼ ÈÇ:Q窒ò=¸¤!û¸Ï§JäíÈìµ5‰Ü–zR£9]ÛŽO ~ð]A 6ãÇÖ”g‚ƒÓÖšUÐ|§¿#>ýj9± *ws€HïKqŽ{ö§(Ú¸#íI“޽*2Ìx#ŒpsŒÒy¿0ÇC××½WÉ‘ŽîzöÏùü¨rsÌr0{æ€Ï¹Áõõü© òǃ×ëL$¨-Aìy¨šFBÅúò)­+;, ‘–É¥Rù “†ãŽAúšcÇ€s“»Ó˜Äx;›ÐóøSP³Ë àtÏùÅ<‚ÌsÏúTJç¨8ÈéRn°þ×ô¥ äà`ñÏcH2ÑüªOl’i§qR¤ ŽAÈ횈`@c¸N3R’¤ƒµ×'wñçÒš»¶£# lþ?çéLª|£ ž qQ|ÐFW–ÎsëQ¸;B?xq޹çôïP˜A‰ˆÜ¬Nr~ô†Gdœ+c'o¿#4M—F†2ÌÜUY. “îSëþ{ñQ¤…Ç(>_˜¶:œvªï¹Ñ \§qØœŠpO´(p¬I\äðúݪ»%Šu˜Æ?Éýj´±4kæ-Ü*ž¾ÿçÖ£ÞW‘ç8ùGáH ”`Ë‚F9<÷4Œ’2‘€#`7 Ç'ß?J‘-!Àä±Û×éüª©ûû™X3rN2ë\¤xÜ“óOœx—KÅÜ_ú¯¨|œuÅ|¯âùuúþ›§ûæ³1^Ýkãß Ç |ïþ'ÿZ–>:ð•ÝäÑ_©–WXÐy ’p9ۊÏnWnW¥L±Ú¯'g&¤ qÓ§SNý×LΑäÿÀ HI$IÿhÐa…¹îyÎê>Ï#z|Æ—ÈŒœŸø£È‹8Çá¸Ó¼´Æ9ãý£I¶2;úu4 ¦8=:óH lxlãýªB"cßNhÄXŒzæ‚aÏÌËÇ<š@ÐŒ¸Ç­![vÀ;N=é pŒŒtâ˜c¶Ý˨?QL’X'+ŸLQTäÓC6äÕ®" Qæ”åʧ?Û·ð$‡ÿˆ§®™/µYöÝsúT¦å_7ŠIîE iœa®‘³ÇÝÇõ©’34$úíÿëÓZÕ~[ˆBžyCÏþ=L6œs>êOþÍM:XëçÛŽzùgòûÔã§¾p.mÿ®dÿìô£NËÓÀØõCÿÅSŽš¹ùä…˜2§§ýõQÿf}¯ÊyÿÇ©ãMM§t°î'®Óþ4£J‹iRbÉ=BŸñ©M…Xý3·ŸçGö|YY0:ÿë é‘`®à;â£MÑsèz€x¥]Ð ÇÜ‘šFÑm $–õù¸¥5®:œç9ÝÖ˜Ú ›`å²½÷tãÃáË6ÎYÁ>˜ÿ cxfÉÏÞqôÇøRŸ iûBï÷‡ø{š_øF´ü‚K–å$Ž?JOøF´ýÄî|ýGON•ü"Ö[¸•À=@Ç5ø6Éóûé99Ðÿ÷Ȥÿ„ØEËdž @qH¾€0ÿIl˜P1QŸ@Pµ°?Ä/Ò¹­CàßÚuE \¶>9éëT,~I£_ÛêwšÝ²Ák*ÎùhÚ§qÉ'Žk²—ÅžŸí½;¿K¤'ù×Îì©?ˆu)bq$ou++ŽŒ ’ Sü)•­árG‹4‚?çòý WÓöŒeˆ–ê c“S¦2Øåb=sÉæ¦T ê ü¸Ý~Oô§ àòx#ŒŸJWãw|2hÉÝÇ9þB¤#©äÓÔ#¯4¾Z€NOSÜýiÆ¢?ëžpqžý3I±w:ç$wÇÿ®Tð02?*d£’I'oL“MÜJ©Î qÛ§øÓ&pœE". œdqŸZL',IÁ?LÐ bÙ'©}ë–‘þ¥!@î™-ó uíšYÙ¤Û1úâŽÌ޹« ªr¨R8¦í ¸  w©Ùwœ±àO½W Tœcä8{õúÔ²( ;ýiƒß9àöéPÊLJv±êy'Ú”’ dʓקCO•B«` display); pix3 = pixConnCompTransform(pix1, 8, 16); pix4 = pixConvert16To8(pix3, L_LS_BYTE); regTestCompareSimilarPix(rp, pix2, pix4, 3, 0.001, 0); /* 2 */ pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test connected component area labelling */ fprintf(stderr, "Test c.c. area labelling\n"); pix2 = pixConnCompAreaTransform(pix1, 8); pix3 = pixConvert16To8(pix2, L_CLIP_TO_255); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 3 */ pixDisplayWithTitle(pix3, 0, 350, NULL, rp->display); pixMultConstantGray(pix2, 0.3); pix4 = pixConvert16To8(pix2, L_LS_BYTE); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 4 */ pixDisplayWithTitle(pix4, 0, 700, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); /* Test color transform: 4-fold symmetry */ fprintf(stderr, "Test color transform: 4-fold symmetry\n"); pix1 = pixRead("form1.tif"); pix2 = pixRotateOrth(pix1, 1); pix3 = pixRotateOrth(pix1, 2); pix4 = pixRotateOrth(pix1, 3); pix5 = pixLocToColorTransform(pix1); regTestWritePixAndCheck(rp, pix5, IFF_PNG); /* 5 */ pix6 = pixLocToColorTransform(pix2); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 6 */ FindEMD(pix5, pix6, &distr, &distg, &distb); regTestCompareValues(rp, 0.12, distr, 0.01); /* 7 */ regTestCompareValues(rp, 0.00, distg, 0.01); /* 8 */ regTestCompareValues(rp, 0.00, distb, 0.01); /* 9 */ fprintf(stderr, "90 deg rotation: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix6); pix6 = pixLocToColorTransform(pix3); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 10 */ FindEMD(pix5, pix6, &distr, &distg, &distb); regTestCompareValues(rp, 0.12, distr, 0.01); /* 11 */ regTestCompareValues(rp, 0.09, distg, 0.01); /* 12 */ regTestCompareValues(rp, 0.00, distb, 0.01); /* 13 */ fprintf(stderr, "180 deg rotation: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix6); pix6 = pixLocToColorTransform(pix4); regTestWritePixAndCheck(rp, pix6, IFF_PNG); /* 14 */ FindEMD(pix5, pix6, &distr, &distg, &distb); regTestCompareValues(rp, 0.00, distr, 0.01); /* 15 */ regTestCompareValues(rp, 0.09, distg, 0.01); /* 16 */ regTestCompareValues(rp, 0.00, distb, 0.01); /* 17 */ fprintf(stderr, "270 deg rotation: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); /* Test color transform: same form with translation */ fprintf(stderr, "Test color transform with translation\n"); pix1 = pixRead("form1.tif"); pix2 = pixLocToColorTransform(pix1); pixDisplayWithTitle(pix2, 0, 0, NULL, rp->display); pixTranslate(pix1, pix1, 10, 10, L_BRING_IN_WHITE); pix3 = pixLocToColorTransform(pix1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 18 */ pixDisplayWithTitle(pix3, 470, 0, NULL, rp->display); FindEMD(pix2, pix3, &distr, &distg, &distb); regTestCompareValues(rp, 1.76, distr, 0.01); /* 19 */ regTestCompareValues(rp, 2.65, distg, 0.01); /* 20 */ regTestCompareValues(rp, 2.03, distb, 0.01); /* 21 */ fprintf(stderr, "Translation dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Test color transform: same form with small rotation */ fprintf(stderr, "Test color transform with small rotation\n"); pix1 = pixRead("form1.tif"); pix2 = pixLocToColorTransform(pix1); pixRotateShearCenterIP(pix1, 0.1, L_BRING_IN_WHITE); pix3 = pixLocToColorTransform(pix1); regTestWritePixAndCheck(rp, pix3, IFF_PNG); /* 22 */ pixDisplayWithTitle(pix3, 880, 0, NULL, rp->display); FindEMD(pix2, pix3, &distr, &distg, &distb); regTestCompareValues(rp, 1.50, distr, 0.01); /* 23 */ regTestCompareValues(rp, 1.71, distg, 0.01); /* 24 */ regTestCompareValues(rp, 1.42, distb, 0.01); /* 25 */ fprintf(stderr, "Rotation dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); /* Test color transform: 2 different forms */ fprintf(stderr, "Test color transform (2 forms)\n"); pix1 = pixRead("form1.tif"); pix2 = pixLocToColorTransform(pix1); pixDisplayWithTitle(pix2, 0, 600, NULL, rp->display); pix3 = pixRead("form2.tif"); pix4 = pixLocToColorTransform(pix3); regTestWritePixAndCheck(rp, pix4, IFF_PNG); /* 25 */ pixDisplayWithTitle(pix4, 470, 600, NULL, rp->display); FindEMD(pix2, pix4, &distr, &distg, &distb); regTestCompareValues(rp, 6.10, distr, 0.02); /* 27 */ regTestCompareValues(rp, 11.13, distg, 0.01); /* 28 */ regTestCompareValues(rp, 10.53, distb, 0.01); /* 29 */ fprintf(stderr, "Different forms: dist (r,g,b) = (%5.2f, %5.2f, %5.2f)\n", distr, distg, distb); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return regTestCleanup(rp); } void FindEMD(PIX *pix1, PIX *pix2, l_float32 *pdistr, l_float32 *pdistg, l_float32 *pdistb) { NUMA *nar1, *nar2, *nag1, *nag2, *nab1, *nab2; pixGetColorHistogram(pix1, 1, &nar1, &nag1, &nab1); pixGetColorHistogram(pix2, 1, &nar2, &nag2, &nab2); numaEarthMoverDistance(nar1, nar2, pdistr); numaEarthMoverDistance(nag1, nag2, pdistg); numaEarthMoverDistance(nab1, nab2, pdistb); numaDestroy(&nar1); numaDestroy(&nar2); numaDestroy(&nag1); numaDestroy(&nag2); numaDestroy(&nab1); numaDestroy(&nab2); return; } leptonica-1.70/prog/alphaxform_reg.c0000644000175000017500000002122012240303530015603 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * alphaxform_reg.c * * This tests the alpha blending functions when used with various * transforms (scaling, rotation, affine, projective, bilinear). * * It also tests the version that are wrapped in a gamma transform, * which is a technique for getting a truer color on transforming, * because it undoes the gamma that has been applied to an image * before transforming and then re-applying the gamma transform. */ #include "allheaders.h" static void MakePtas(l_int32 i, l_int32 npts, PTA **pptas, PTA **pptad); static const l_int32 x1[] = { 300, 300, 300, 95, 32 }; static const l_int32 y1[] = { 1200, 1200, 1250, 2821, 934 }; static const l_int32 x2[] = { 1200, 1200, 1125, 1432, 487 }; static const l_int32 y2[] = { 1100, 1100, 1100, 2682, 934 }; static const l_int32 x3[] = { 200, 200, 200, 232, 32 }; static const l_int32 y3[] = { 200, 200, 200, 657, 67 }; static const l_int32 x4[] = { 1200, 1200, 1125, 1432, 487 }; static const l_int32 y4[] = { 200, 200, 200, 242, 84 }; static const l_int32 xp1[] = { 500, 300, 350, 117, 32 }; static const l_int32 yp1[] = { 1700, 1400, 1100, 2629, 934 }; static const l_int32 xp2[] = { 850, 400, 1100, 1664, 487 }; static const l_int32 yp2[] = { 850, 500, 1300, 2432, 804 }; static const l_int32 xp3[] = { 450, 200, 400, 183, 61 }; static const l_int32 yp3[] = { 300, 300, 400, 490, 83 }; static const l_int32 xp4[] = { 850, 1000, 1100, 1664, 487 }; static const l_int32 yp4[] = { 350, 350, 400, 532, 114 }; int main(int argc, char **argv) { PIX *pixs2, *pixs3, *pixb1, *pixb2, *pixb3; PIX *pixr2, *pixr3; PIX *pixc1, *pixc2, *pixc3, *pixcs1, *pixcs2, *pixcs3; PIX *pixd, *pixt1, *pixt2, *pixt3; PTA *ptas1, *ptas2, *ptas3, *ptad1, *ptad2, *ptad3; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixc1 = pixRead("test24.jpg"); pixc2 = pixRead("wyom.jpg"); pixc3 = pixRead("marge.jpg"); /* Test alpha blend scaling */ pixd = pixCreate(900, 400, 32); pixSetAll(pixd); pixs2 = pixScaleWithAlpha(pixc2, 0.5, 0.5, NULL, 0.3); pixs3 = pixScaleWithAlpha(pixc3, 0.4, 0.4, NULL, 0.7); pixb1 = pixBlendWithGrayMask(pixd, pixs3, NULL, 100, 100); pixb2 = pixBlendWithGrayMask(pixb1, pixs2, NULL, 300, 130); pixb3 = pixBlendWithGrayMask(pixb2, pixs3, NULL, 600, 160); regTestWritePixAndCheck(rp, pixb3, IFF_PNG); /* 0 */ pixDisplayWithTitle(pixb3, 900, 100, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixs2); pixDestroy(&pixs3); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixb3); /* Test alpha blend rotation */ pixd = pixCreate(1200, 800, 32); pixSetAll(pixd); pixr3 = pixRotateWithAlpha(pixc3, -0.3, NULL, 1.0); pixr2 = pixRotateWithAlpha(pixc2, +0.3, NULL, 1.0); pixb3 = pixBlendWithGrayMask(pixd, pixr3, NULL, 100, 100); pixb2 = pixBlendWithGrayMask(pixb3, pixr2, NULL, 400, 100); regTestWritePixAndCheck(rp, pixb2, IFF_PNG); /* 1 */ pixDisplayWithTitle(pixb2, 500, 100, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixr3); pixDestroy(&pixr2); pixDestroy(&pixb3); pixDestroy(&pixb2); pixcs1 = pixScale(pixc1, 0.35, 0.35); pixcs2 = pixScale(pixc2, 0.55, 0.55); pixcs3 = pixScale(pixc3, 0.65, 0.65); /* Test alpha blend affine */ pixd = pixCreate(800, 900, 32); pixSetAll(pixd); MakePtas(2, 3, &ptas1, &ptad1); MakePtas(4, 3, &ptas2, &ptad2); MakePtas(3, 3, &ptas3, &ptad3); pixt1 = pixAffinePtaWithAlpha(pixcs1, ptad1, ptas1, NULL, 1.0, 300); pixt2 = pixAffinePtaWithAlpha(pixcs2, ptad2, ptas2, NULL, 0.8, 400); pixt3 = pixAffinePtaWithAlpha(pixcs3, ptad3, ptas3, NULL, 0.7, 300); pixb1 = pixBlendWithGrayMask(pixd, pixt1, NULL, -250, 20); pixb2 = pixBlendWithGrayMask(pixb1, pixt2, NULL, -150, -250); pixb3 = pixBlendWithGrayMask(pixb2, pixt3, NULL, -100, 220); regTestWritePixAndCheck(rp, pixb3, IFF_PNG); /* 2 */ pixDisplayWithTitle(pixb3, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixb3); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); ptaDestroy(&ptas1); ptaDestroy(&ptas2); ptaDestroy(&ptas3); ptaDestroy(&ptad1); ptaDestroy(&ptad2); ptaDestroy(&ptad3); /* Test alpha blend projective */ pixd = pixCreate(900, 900, 32); pixSetAll(pixd); MakePtas(2, 4, &ptas1, &ptad1); MakePtas(4, 4, &ptas2, &ptad2); MakePtas(3, 4, &ptas3, &ptad3); pixt1 = pixProjectivePtaWithAlpha(pixcs1, ptad1, ptas1, NULL, 1.0, 300); pixt2 = pixProjectivePtaWithAlpha(pixcs2, ptad2, ptas2, NULL, 0.8, 400); pixt3 = pixProjectivePtaWithAlpha(pixcs3, ptad3, ptas3, NULL, 0.7, 400); pixb1 = pixBlendWithGrayMask(pixd, pixt1, NULL, -150, 20); pixb2 = pixBlendWithGrayMask(pixb1, pixt2, NULL, -50, -250); pixb3 = pixBlendWithGrayMask(pixb2, pixt3, NULL, -100, 220); regTestWritePixAndCheck(rp, pixb3, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixb3, 300, 100, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixb3); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); ptaDestroy(&ptas1); ptaDestroy(&ptas2); ptaDestroy(&ptas3); ptaDestroy(&ptad1); ptaDestroy(&ptad2); ptaDestroy(&ptad3); /* Test alpha blend bilinear */ pixd = pixCreate(900, 900, 32); pixSetAll(pixd); MakePtas(2, 4, &ptas1, &ptad1); MakePtas(4, 4, &ptas2, &ptad2); MakePtas(3, 4, &ptas3, &ptad3); pixt1 = pixBilinearPtaWithAlpha(pixcs1, ptad1, ptas1, NULL, 1.0, 300); pixt2 = pixBilinearPtaWithAlpha(pixcs2, ptad2, ptas2, NULL, 0.8, 400); pixt3 = pixBilinearPtaWithAlpha(pixcs3, ptad3, ptas3, NULL, 0.7, 400); pixb1 = pixBlendWithGrayMask(pixd, pixt1, NULL, -150, 20); pixb2 = pixBlendWithGrayMask(pixb1, pixt2, NULL, -50, -250); pixb3 = pixBlendWithGrayMask(pixb2, pixt3, NULL, -100, 220); regTestWritePixAndCheck(rp, pixb3, IFF_PNG); /* 4 */ pixDisplayWithTitle(pixb3, 500, 100, NULL, rp->display); pixDestroy(&pixd); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixb3); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); ptaDestroy(&ptas1); ptaDestroy(&ptas2); ptaDestroy(&ptas3); ptaDestroy(&ptad1); ptaDestroy(&ptad2); ptaDestroy(&ptad3); pixDestroy(&pixc1); pixDestroy(&pixc2); pixDestroy(&pixc3); pixDestroy(&pixcs1); pixDestroy(&pixcs2); pixDestroy(&pixcs3); return regTestCleanup(rp); } static void MakePtas(l_int32 i, l_int32 npts, /* 3 or 4 */ PTA **pptas, PTA **pptad) { *pptas = ptaCreate(npts); ptaAddPt(*pptas, x1[i], y1[i]); ptaAddPt(*pptas, x2[i], y2[i]); ptaAddPt(*pptas, x3[i], y3[i]); if (npts == 4) ptaAddPt(*pptas, x4[i], y4[i]); *pptad = ptaCreate(npts); ptaAddPt(*pptad, xp1[i], yp1[i]); ptaAddPt(*pptad, xp2[i], yp2[i]); ptaAddPt(*pptad, xp3[i], yp3[i]); if (npts == 4) ptaAddPt(*pptad, xp4[i], yp4[i]); return; } leptonica-1.70/prog/seedfilltest.c0000640000175000017500000001255612242265636015324 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * seedfilltest.c * */ #include "allheaders.h" #define NTIMES 5 #define CONNECTIVITY 8 #define XS 150 #define YS 150 #define DFLAG 1 int main(int argc, char **argv) { char *filein, *fileout; l_int32 i; l_uint32 val; l_float32 size; PIX *pixs, *pixd, *pixm, *pixmi, *pixt1, *pixt2, *pixt3; static char mainName[] = "seedfilltest"; if (argc != 3) return ERROR_INT(" Syntax: seedfilltest filein fileout", mainName, 1); filein = argv[1]; fileout = argv[2]; pixd = NULL; if ((pixm = pixRead(filein)) == NULL) return ERROR_INT("pixm not made", mainName, 1); pixmi = pixInvert(NULL, pixm); size = pixGetWidth(pixm) * pixGetHeight(pixm); pixs = pixCreateTemplate(pixm); for (i = 0; i < 100; i++) { pixGetPixel(pixm, XS + 5 * i, YS + 5 * i, &val); if (val == 0) break; } if (i == 100) return ERROR_INT("no seed pixel found", mainName, 1); pixSetPixel(pixs, XS + 5 * i, YS + 5 * i, 1); #if 0 /* hole filling; use "hole-filler.png" */ pixt1 = pixHDome(pixmi, 100, 4); pixt2 = pixThresholdToBinary(pixt1, 10); /* pixInvert(pixt1, pixt1); */ pixDisplay(pixt1, 100, 500); pixDisplay(pixt2, 600, 500); pixt3 = pixHolesByFilling(pixt2, 4); pixDilateBrick(pixt3, pixt3, 7, 7); pixd = pixConvertTo8(pixt3, FALSE); pixDisplay(pixd, 0, 100); pixSeedfillGray(pixd, pixmi, CONNECTIVITY); pixInvert(pixd, pixd); pixDisplay(pixmi, 500, 100); pixDisplay(pixd, 1000, 100); pixWrite("/tmp/junkpixm.png", pixmi, IFF_PNG); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); #endif #if 0 /* hole filling; use "hole-filler.png" */ pixt1 = pixThresholdToBinary(pixm, 110); pixInvert(pixt1, pixt1); pixDisplay(pixt1, 100, 500); pixt2 = pixHolesByFilling(pixt1, 4); pixd = pixConvertTo8(pixt2, FALSE); pixDisplay(pixd, 0, 100); pixSeedfillGray(pixd, pixmi, CONNECTIVITY); pixInvert(pixd, pixd); pixDisplay(pixmi, 500, 100); pixDisplay(pixd, 1000, 100); pixWrite("/tmp/junkpixm.png", pixmi, IFF_PNG); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); #endif #if 0 /* hole filling; use "hole-filler.png" */ pixd = pixInvert(NULL, pixm); pixAddConstantGray(pixd, -50); pixDisplay(pixd, 0, 100); /* pixt1 = pixThresholdToBinary(pixd, 20); pixDisplayWithTitle(pixt1, 600, 600, "pixt1", DFLAG); */ pixSeedfillGray(pixd, pixmi, CONNECTIVITY); /* pixInvert(pixd, pixd); */ pixDisplay(pixmi, 500, 100); pixDisplay(pixd, 1000, 100); pixWrite("/tmp/junkpixm.png", pixmi, IFF_PNG); pixWrite("/tmp/junkpixd.png", pixd, IFF_PNG); #endif #if 0 /* test in-place seedfill for speed */ pixd = pixClone(pixs); startTimer(); pixSeedfillBinary(pixs, pixs, pixmi, CONNECTIVITY); fprintf(stderr, "Filling rate: %7.4f Mpix/sec\n", (size/1000000.) / stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixOr(pixd, pixd, pixm); pixWrite("/tmp/junkout1.png", pixd, IFF_PNG); #endif #if 0 /* test seedfill to dest for speed */ pixd = pixCreateTemplate(pixm); startTimer(); for (i = 0; i < NTIMES; i++) { pixSeedfillBinary(pixd, pixs, pixmi, CONNECTIVITY); } fprintf(stderr, "Filling rate: %7.4f Mpix/sec\n", (size/1000000.) * NTIMES / stopTimer()); pixWrite(fileout, pixd, IFF_PNG); pixOr(pixd, pixd, pixm); pixWrite("/tmp/junkout1.png", pixd, IFF_PNG); #endif /* use same connectivity to compare with the result of the * slow parallel operation */ #if 1 pixDestroy(&pixd); pixd = pixSeedfillMorph(pixs, pixmi, 100, CONNECTIVITY); pixOr(pixd, pixd, pixm); pixWrite("/tmp/junkout2.png", pixd, IFF_PNG); #endif pixDestroy(&pixs); pixDestroy(&pixm); pixDestroy(&pixmi); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/candelabrum-11.jpg0000444000175000017500000016402011325123752015654 0ustar dandanÿØÿàJFIFKKÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀTÄ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ç<=¦1<ª²\’[ÌuÝ´gäWP–åqŒsY^‘ÍÍÂ2sånãýîZéÂeA9µ&мôÇj¡ŒCœ÷¦˜òxÍO·Ì€îC“ž´ª§9è?úÔ€aMªÜ–ôöU${piZ0Œò>”ò›°N:ÓÊfÝ<Åm§?Z_#\ajØL€s“ÍIŽAö  ŸgF,2ARy(Ä©È<ãš´Þxù‰Í0ü€œÇ_Zböp:íLû*ÀrMZ+=ñDjßÄ9çŠC+­ºã'9=ªHà€éŽÕc)ãšUà€zÐ>W_½š² ráI°ñ‘Ç­+½¿ËËíÏJtvê1ƒœ½jv xnA¤R¤ä.r‹ýáŠQ#b¬à;tà´Õ‰C/ž(ºDxeÍ+G“§#õ©ÕgÓdäÓ¶œõ‹¨ðt8éKåe@Ú®mÈàdÒD¥ÁÞXv‹Y¡;@^ úf˜°³¹' =…](8éúÒ ùþ÷áE…r™·ç§©L%GÝÏg`'#9ð‡iØM”ѱFÚ™a Ž3V‚ç Ü9er{Óµ„ÙXE¸gœp{TÞY Ó¥=v¸,'Úœß('#µ;"n@ñnãæÇJ_' qÓ•°)Ï<ç¹ÞšJ彪õ€u<MÀ=F:Òg#¶)r•ÁSs‰}ù9©#* ¯­1 _–ç<~UUÝYÈV½Ï"‰ƒd Œ•À÷5ãGÄZþ¬8žöt•$ÃÄçäÛzô­iRu/c:•;\ö}£¶@¤Èa´ô'®+ͯ¾%Þ™d]>Òˆ,’d“ïÛ‘?üBïóÞŽs„G•k-N¦o±ì>Zç‰ã÷¦ä+nc´)=zW¯Œõôž1 ûHYçÅnj'Q³ðv¡6·vÒ]Þ²¬Qn ÏaÐpOACõk°UÓÙ†$BN*GAÚ— :gµxׇ Ôï¡x-®å¶´Œ´“I~ïN¼ôýkKAÕµ k†¹¹¿™4À¬«’oysžý)Ë Õìīߡê£ÀÆ}i»°Ù#5æKâ½jk‰¿³mÊF€nICHzu>„Õ9<]â·”mm¤mHúàÿ:K .ãuÑë‹€1ìsN/ó{äW”x–Ѻ6äÈY#ùEkhߤ¿¿ŠÞþÚ!9Ý:±qi<<Ò¾à«Åž€]#Pì@4®àƒèF*Œº´VÂc&c#9A»9éÒ¹æñæœ× ½µÜ̹Tqõ5œa)lâ·gS!Áç{t¦ÆÙL˜èkÎô]>¥y¨ÌÑØ–Ûæ;³Â®=‡5{SñôP@cnL¬ÃwÚ¨P{ñÖ´ö½‘Ú6¹Ü÷ÉéžÔ¡¾\s\…—‹gºÐõ ¶¶ˆÜÙó¶2Yc ×9mñUòn$š;vlªãžüò0(T&ï`u¢zš»rN:Ò»‚àÏæv^9ÕÚÞk¹Å¬±  ÅÊqÁëÓ„ò3íV5/ˆÚAi%½“Î³Ãæ“¿qƒÁäÏØÏ¢/ÚÇ©ÛïòÈݓŠtÜ$ âuÏêC`l-•–î/4¹ùȼÔÖ¾7³³³Š+˜ÞKæ@óGk@cןZ=”­pö±½ŽÈœŒZxlƒÇ¥y^¡ã[«ë[Ôµžâµ²Œ  ê§¾iñ|HÔʈ~ÅnnaÚL Sï“Uõy“íâzgÚ1 …ÁÆæ=jÁá ¯Já¬"k.p—³g¤¼Äš…¾$ø•«n¸þü$gõªú¼Éö±=¼€Ü.GÓµ¿&¼³þ…Ó]Øj¢#»í£vGb‡úb¨ju‹½YZÎæ+k—£Æ2ÊV4*«ØÿÕÆ0 · £`ÙÐŒT0Lg†6*FG"§V Ç\V/sQqÇݹÏ4ü8ÍFËÈ\÷íÞ˜…Q:wáÞ!Ž=©OZ…þBp:ԱᓑÈ4}óƒœÚ€x ö4\ÛŽjœu©N᫸dqškÊp1@Ìéoµ‘û;œäbBqŸsR0@ÛŽ0 r=îvlXÃ`íÏQÅ(}ârsIrsÖ§ê˜Èèj’3cCrç'ƒPÈNÎ_J—Ämã?•D2ÏÓ¨4É)O2[Ã$Ì@TRÄú2kÃ5 ¿íë«÷}ĬBgî÷ÏåÅ{n²»tkó· [¹ÿÇMx–›Lë"¡Ú›AÇ«`õÀÏãŠíÁÙ&ÎlN­#kNð„fÍu WPŠÒ͆AV·§ó­ O èú§Ÿý‘©<²Ä0ë4.Hã°#ð§xÂXì­t˜šÝ Š<}š@q—ž>„~&©h—º–c-é6ÖöWlà3a lqŽ3íZóNQæLÊÑO–Ãoa¨×6˜Hã…þuã<n¸®zÍÇR¶¸¹€5f #pÿ2óœÀóéZ6šˆŽÒêÞ[s²+c{¹[©f<îöïXV¶rµiq /… H8ÈÇý}ëH++2%½ÑÓ_éO yíQ„˜{‰•×Ìeğ\Ó®ô;é×ËŽ;MÊ!¸æv#?SÆ:úÔQhËq͸$V÷E°’BÊW sÊîç­.±¨Ý[@šx™VRÌŒ9û¨qެÓw²e4ŒI'(¢4¹vóEŒïLÿöÇéT Ó,¥MÚBUð±[® üºþfµ¬t95žGIM¬MûÉ /!þê~=ëBßS‡OÔm`¶Ñm"–')ûç"FÈîÇŒŸq[s%¢3å¾ç0ö× VI Ô]›!L㓎)¶wvvŠÍqÒÎÒñÈr>ã<Gc^‹sŸs¬i×~AµŸ-º"@]ǃÿGZµui¦ê–ík}lo®ãs› ÝÈlŒÇ¿ZmÝìû3…Ó¢ÓõZm> É–ÑÓÍ·óÁ!H*ÿäsR%œ_Ï,pÜ¥Õ°DbŒOîèÙëŽ;æ¨\øvòÒÚ]A]¼2mMχْ7pxã>õ½áVðßé²±ÛÛÄÖ²2·,½A#Ú®[]­™[[Ó ’9ï/!™nn0–è«°¼˜›—ŒŸ­s1ÛKjVIUJ@qò’Q]‰âÔ.u¹‘¯ÃZ‚Šï… mÜz¯åL×â×ËN7kn¨WÈ·ò\ÀàðÐsN Ù.â’Õ‰g®KkØ)ò!“å¶·Q"zƒÈ÷ëVüCá‹;HƒSµ’òý' É)|`z:ÎðÜ—M}"-äp\²2@×lÝŽ™ óÍhØhÞ!ÔžöÅ.–ÔÄ‹Ǹ…‘}sÈíJ^ëÞÃZ£ž‰¥Òä2¯’†Nr8ê:Å–ë,ztö®î.‹ ¤r»îqõýkwM°2]Éx#¾[ÐÚ£e†lãœu®sL§ÖaŽÕd߉'¨÷ô¥Zw»!£èû4eµ‰X傌öíSª€sšdc*8ê9©prO¥yÝN¾€À•ÀÅO½HF;ÔlÄò½hâbÄv­<ä?ZŠ6ó0Fv‘sSŽ@¤˜íaàÊ3ž§=)>`çåõ©Æ #…p¦$R*ç>†ž¯0;b¤¹Î(¤šÝd“vO§Šeheiq³ØÜ¾HÄŒ9úš‘r@R2q‚iú`ÊéOA3õíó@0@œW)ÒÉbBA ‚t§¡Ë¥;v2¸ïùÒ0#•l Æ­lC'v: ŒûÔY ñpjMŸ^¢( ;pzÓÕ‹BŽ ŠúmÚ•ZIëÁ¯ Òæû>c vâo>ëÌwc ¨¤÷ãÚ½Žû+ap@F}ûWø|Y¶‹wçÌë2ÊdclV'#¿©í]x…œÕ÷D#‡X—TƨÞdª»cdÆ çƒÇJÑðý͸´·þÕÔ#û$.|»Vˆ?Íß9éëTüOÚf¿Ó! ,»(ÿt¡­[ÝÛ^‚êûEn2<{€®ï”zãð5ÒÚåIìsÙó;õ¹ÎŸª+L‰4%CBU dŒ`zb¥³º·»Óõ;é$dx£eŽ5Û»Œ¨ô=+*÷R†‰7%–êØùyeûËÛ ãœÐËi·>dLÇYHÊãƒô暆–{ƒ–·%iw,ªa°ÀmDZõéZ.»§Oáä¤XDq¤L‡¿ËÑ@äô>õæp(À•NÕÎ:ñßñ¯Cÿ„O¹µŽ{KùáŽes†c#éQ]B˘ª\×÷L{é4cª¬ëË€9ÉÏÒšþ?:´ñB»Glå}pCäh‹Š[„“¹kNÔlí,£³¸”ý•%’v`È ÊíÜþ!–'‡P[E³!0™˜³6wöíÜ‘íYØYØÍi ´é·˜ÉÀ,W'içœ~«õ{€n%šöHž=Íö|,`g äßÞ“ŠÜ{õûËM_ì÷‰yž\'6í žç$qTç[K ªño™Ãn}ûÇ©‘Ùª}a"·‡O¹FX¡–Gd†&,##Xž¼öãëY×7Q [p†U˜—V,Ü*g µi¢±2zÝ[¸R)·À#b$êObOåúÒyÿ0æ<×¢çøëÎGçWôý2ÏRžhïsˆ¶¨`êA#=9àŽ=)?áK{葵a,œ|¦ÞqÎyÎ{Sæì+I’Ø®—–¤·À  E6;c¾j¾±£É¦Ãm>Z+{˜ÃíÉ%J‘ëžõ½iöMÍ&k;R¼¦“–}ùçæ `þ•{ƃé2Ù®ß awƒžÝ8¬”ß>M9ާ#¤ØJ·²Ás÷f# Û¡ãOšÑöO‘j‚)|¦¡Žà“œÒéé¥D&¶\\N…,P;ŸZÔ¶¿ž+kÛìEz$mÌåqåœqò‘þ5rm2b“E-Á'Ñõw™D†5võõ#úSôûkȬ..ÖÆÛ;Ø;…fR1é“éW|7}ogöáqsIýÀ¼LT‹w-Ü’^LÜY$™†âá|¶© ÁãØÔÉ»±¤¬…’;m/B¶²šäÄ.˜› ÊçI==3ULµ«XDª è20@ñÁú ÖÖ¿m{wg Ãt%ù<ß,F2ÎàrG~kxzm%ÕçÛc¹º ºgU8P£¹íô¬ùí—Éwc‘ñ,zQ‡L†Ê8Deät8f9ÛÏêj½¶¡nmÌo,&GmXáNIÈö¯q¦iúŒ-²%‰Pd&w$lÎ>oîóÓ­g[ø_TžGkhX€vçÌM˜ãœäžG?hœylÈißBk/Þy‰<òÈ®Oî𠞇>œŠuÝŒT²º7‚@Ï›€Ä›¯8ϰâ«jÚU¾›o %ߟy,…AFqÉä ûÓ4ñsq2FÒFÂ6åÎÕÔ.@ý8¢ÊÜÑ vfÝêI¨Éö¦e’ÒЕ6¡žNÏ©÷ªºœÿÛ—)e.”¶wÆZó ;2'©­XNÔM¬·Öþk<ž8- ™Må‡ÓSE}&/Ëfц¶q‹g•Û|L;0zr8úT'n›ÓûÌËy.5m3M‰=ÌjÛ˜¾ 'ý1[qÿjEn–ÐZ^b ’x†ÆÉ=·rGÍ;FW—i¥"º‰Ø4íÓh'è¼ûæ´®ylîâŠÕe€Ä¬ÇsžO¸Ëˉ/®Å̪ŠÒ çöýqN¶Å%kIX8’Î 2>d ?VûùªšÍanHþÇ8«,ÅqzãŠóžçbB® å¸?JcOýEH9ë‚heéFàFÑ@¤œN*F8ÂlžiˆØÎ㑚4ñ°` ð1ÞžvãŽ*4A¸¿ ‘ŒSؼM ÀÁæ˜Ãåáo£bJ#µÊÒ/Îy4S\ÔUèISK]±ß+`þýøÿk ¬° T¶q¼ÔAl¯˜H„óQÊxêW­r&v˸HNáÉ"œÞ—¸÷¬ƒhZfl\úv"˜9'ž)Ü©çÔt¦F]—çB‡‘Éÿ ¡œ2•až0G¨¯¿ÒN‘âW²¸yb‚BÞ[Æq•`vþ¸ñ¯ps‡íŽõâÞ/ñšÆ§%®"6ÖÒ2ÂÊ¿1ìI>™®¼%îÒØæÄÚÊåJÆk½:Úþòiï XÀ&'ÜPž ƒ’¤`ç<j…ï þΊ$¿KUCG!\`œã|Ôï êcks%«·ÛP‰J7ú¹£•>‡¿zܽñ¤‘éÐÞ&‘m‰~ì‰(`èFº2vµÌUž·04¨/µmJ=6æo³[Ę0Qåñ÷ŠúäŽM3Åz§ö¦¶«lÅâ|˜ˆþ/R>§úVt÷"ÿPy¤b{ÆC‚ª bpÞ£§é[š7‡'¿š8íÉ)¼n°@QþÏ¿ëì;Û´_3%7%ÊŒ»­.ãN±·» ˜®Ñ”ñÂx9÷ëôÍkA«ê³hÿÙör´vÈWt¼r äã®*ç‰^x¾ËC¢´‰cQOÚ ?\qM»Òî¼)ª5üQIq`Ì>uÎäèpGçÒ£™I+î>V›¶Å2x-Xuko1“Ê’ñábêxc0:dÖÕ¥Ó£¸ûid¤.K.â22ÄÑ«kæòé¥ûw6åÉDiß÷£Î?!ЇN“U›Q{è,¼©@g%`Š!ÀsSÉÕÉl…0¾ÝcxŠ1•n#Èã± J¶eûE•ƒÜyvÈ©#·UQœ.G#$Ë{VCs­Ëö‡¶+$¸dYTovôÏSùWI¬"éÆÞÎëdé.ÙçÇG$*Ž?€zAU.ˆQêÄñ[è鄶™ZÝ·#2¸t#Èü«œ´Ñ¤Ô´›ÛŸ´=¯ÎcaÕJƒøŸU¸FšAy±Fø•cŒ*GèÈ¿nÕoCÕá¶ÛÌfH䉣B>fOB½ñÈÈçŠ"œa”µ14«™-ç†eÁ,l˜v]¹ëóÅtÚ[–ŽöÞÆ9î¥fÌr!òävå~™ÇZ¡ý˜.ôÙ¡µ…¦XÈk{œym³$…`Øã“È¥¸Õ¤Óô˜të˜ÙãÚGÇ=~â‡ï; º¬Ìû‹íA-m4éà{Kx¤Ü ÁËœõ9ûÆw,·W+xT™§ŒùÆ!ÇÇÁ÷¥®}¦Ùí£s%±…(¡Çâ:úU¯•Y\ÈÃjÜgלÿ“Z(é{åæ[kxm¡óg;|¿õq–ËIŸä;ûÑa{5¤ ]s°ä  HÁâ«I¦ê1i©©Ï[w}¡›‚Ýóô¥–éÉ+ùÐ> ª·C߇švOÌW%–[hïÁò‚Û?%Q†Bç§ø­ÏxŽ×RÒ£°³Œ,HÊrÝzsøt¬K´¶ûe¯—q#E"îê SÐŒtíZöSxr¼–â9Lhû!çç—¯?K¶ŽÃWØšÎö÷M¶³–Gk=C*‘’W#㧨§ÛÉ–’΂ií倢¤ìFÞO ÈçéYöóÜYÙËs¼ßÙÈQKu^xü«8‚s:h mW# 63Œã¯Nþµ* ¶7'¡uâå#¶e2½ÂùQ&O<{OèkJ×íšN§uoûÉ^ÂÊêH æ{c‘Ö¯èÖÚT[æ‚påɕ۩UQÐf¥Ôõ 6 mN2¼òà»®¨'9vì?§.Wv±J6Ôĺ´º¹•oÙüÂJ#³±è=OO¥\Öl™©ÛØC/™/ÊÆIœaY‰Ï^ƒ{M½°µÒ­­rê±È\Ý:i¹FsØ=*½GS“Q[ˆtû«+D#.ÖÛš@ Üvô¡6Ý‚É#rîM2ßOµ†ÒùâÝR5xÌý°FFGzçµ[‹¹¥[¦ŠÚTŽPÆ{G py$ÛK?T{š½Û]Í™!’@ÆaÎÒ¬qŸjÊִˈôñ¹!XâgV]ß™,s²‡Š—{œàv“ïKo&«©^ܵóºZ[Áº[[N¹è€ƒ“ŽçšÍÔvìW*¹WÄ×v2|?YK[åcEX0à^µÃCc4×v:fäfFX'$)ËúKË–’ò[+¥ûœS4ŸgNv>¸}I­MóûT‚êKµ5ÚåY\†U=†@ÕÂ<‘²&Ræzžçh ÛD8ùTV‚àj¥ž1œ±Êލ«ƒ'®®u¡¤N1ÇZ\6â—nrqô§p£Ö"²¨RzO­>o›“šy$¯OÆ”Ô1yÆ1`™A¸ç§J“=1HCr:ÒÈÁ‡z‹Œªð1Ò¦|$öëP:œdž¦ªáw(o¼zQNâ$òÔoFYIÚÜtœN* $ò1BÑo 7pF:×›Áð©þÖ^çSFI(þb;dž¯LmÀn<çšÁ2zV°©('Êg8F[œ”¿tï4È—WJûB&Éï)¥¹ðmÛ:½¶­²LnÌ–‘1Î1œàsÅu,ç8ç8ÎqÆi0NÀ\ãi'ÖŸµží‰Â:Ô>j÷w&y5;YYÀ3E³@øSôÿ x¾Ü­·öÇ“i»¬ÌH_öF8â½—Ç’Í2c×oqéWíç·èg졹Äx›Â…ö¥m}¦]*É J™•ÎàW¡ÎÕÑl5èäÿ‰®¡ è«*8º·¹Àé[[¾@rAÚ=éÀüù zœ€}©:’qåcäIÜÇ›Áº5ÁG Û¶2<–Ú2Ùä~”ÏøD¶DÑǪވÜò›bäøo^'°á9aó{ԩ˸ùWc¹ð‹#2Þ^-Ã|ÆpA8Ç#¨“Á/6•µþ¢Íso‘±pð@`z€EuÒȪv±ÉÚIúS$8uØ3È<õ«ö“¶âåcƒÑ¼©GªDÚ£Á%Œd“¶D‡œdcÔçš×½ð>v‰×pÉò_þ"º"üG-¸Ó& ‘†'°$ž)º“n÷„V–8‹ê6-5’QHØ%cñŠÊ“ÀºÉM¿m·xËnÈØÏ®1^œ]wí¹¨—žqéOÛÍ ÙAžuÃ{÷cç^Û ÿg-þÐé> ÓtÇY¥?j˜rAò¯üº1:ÂÄÈʪ_±ÇZ{(1ƒÓ­)Ö¨ô¸ãN ¡âµûàŠd†Hœ2–SÆ1Åa/Ãç}1Ökõ7™ ÆØ÷ük¸…;ñ• c=¨e+m¬~oJ#RQVLRŒdîÎ*×Ã:ôwQÊ÷|†¼µŒ³aAî8àý9¨gøyt muû^íòAÆìç óú×{ïf`¤| }iâ"%Ü€äç9æ«ÛNú ÙÆÚ™ú&‘ý—§=¥ÜËrò3I+IcϬ|;KŸ6M&émð-çf}Q]š¡g©û¼ÔžYÝTòFk59FWL·¸Ù£ÌÃÝyö¡º³PB`U:óbTbŽ,xcÄ|¯â­×8+gÿB<Ð~ý¡Œ²k÷’OÕ°#¡êk±ýÚ¸RÊñHÍLïUU6…<š^ÒkaòEœ2xg\M:$¹´ómg’â#$ä|£‘ÀÉ$Ö†Ÿá ¶¼’ÿY¾2\H-þP­žH?€®¢]ÞYp}zSžPË€2xü(u$Ñ&qšŸ…µ¦µ–¹¸o‰²0G~2?J´_]¬qÝêZy@r¡qÿ|×hH,Àc“Ø{R*ËÉ$/¡TbpG Þ º±™oKmJéHÄsƒkî¡|'­j }[XžÔ´c1 dãîŒv»¶Üæ‚»–BÉ骲¦ŽsWðÝö¿¤Z…å¬>VÖg†ÎXuÁ=¶+ž¾ø«[í‹OÕ"‘2X,‹°öî3“^’¹ß÷{~tï-ÞX÷&“ŸÒˆÔ”tÏ#Á^)¶§Š;mç†e—³î9­´%”¶+5¤I:ìb· ÀÇ>½kÓ§B¥Œ) éP›!yÆz柶“ÞÂöq[eÂûÖ\j1mÁ,±‚yÇ­e7€üCn#·xâ1Hãî˸)ÏZöVA&ÞÁ¦´2H 3µÁcéV«K©.šèhÚÀ±C;T Õµ`N8â£SòŽƒ"Iÿ&¹¯©Ñaü’W'ëJ@àPh=r8¦!ŒUzx¥''ü(+òçzO,pÇ­aÜc¦);O·jPFý) Þ±è(`G¸iwœß/Ò"’„tâ¤+µxÎr3šab,8îiPÆ $1¢¬ã<ÑLZ¹ùzÄ„ŸÄÖdŒÉ*ˆŠÓÑ5©W&ÝIõ?1ÿëÖX\Ü·9&¹Vç[ØŸ’ »i¹äž§?Ҝܨ® ?jõÇz´A óŒtã4âÝÐf¥àóƒÚšF8ÎG>õD÷>*3ùgÏ¥XO¼ ÏZ¤€9š5±Ïø–þ]7G–HK©›ÉGRíÀüºÖOýbKë ‹ çw¼´b 劓ýGåPêz¥•ç-£ºº†+]6?3÷’V”ãˆþ•…¨jvZ'£Ôôû¸f´ºâu‰Ãc<6qøê…;ÖڽNyÍss-‘ênÉ–pqQà3|¸ûÕ¸óUN0sDlTßÞ5«±#F¼t²|T†57¶ºÄÇp$ßé<âóÁ f¦wmz+‰4$—O5ÏøÊ®<15½º3K#F€ ÿhVûK–Ú<œZ‚7bî`TÅ´Ó)Ùèrðø.ChÖµ&” $¸é\¦úŸˆîtë­Bô“ÙkÕ%‘‹ôàó/¾:¿ÝÜMûêº)ÊN2lÆi&¬ljžF³Ù^^I:¨hãž@Tût®¾ÎB,!3ÆRO,SÔr*UvÎF:Hç‚:ƒšÅÊRÒF‰$‡P@àK´A8檣:Æàmê¾­q=¦{2Ê‘;©÷Å.[» JڜƯâk½K[MBp¬NÙnqÓqôõ­¡à‹/±•kËæ¸lÿ¤Ûp>¸Î+…øvCxŽVbwùG“Ü’3^´’ŸÞ)Úr3ZÕýÛQ‰7ÏïHóxüA¬ø;\þÎÕd{»"Aù,PÿŸé^§ñ]A±8xœwpkξ'Zƒ¦é÷mó2ÈPœv#ÿ­[ŸÂV›Ècî ñN¤T §Ô!'¸ô;5Ú»~b0:TÛU“¾HªEßs6@Âð1H²Ê¬ ¾Añ\ü¦ÜÇ›ø÷ÃIk«Y>‰‰up$vE’Å0ÙïÖºøÉu˜ÆŸ¨0‹Sˆ`îãÍ¿×ÔTúØ2xßAÿa'n?Ý…ã? ËçwFÊ]ÂÛ¥Hº¶?ˆ{ú×BjqQ—Þbï9Díµ½ÓY·T»W"0J…r¹$cœu®ÀZUµ®…öé ÓY¹#‡#¦qÚ›á/oZ´WERú5ùq¼âÔUÏÈÍá›y%$÷Ú²jQ‹‹4RŒš’GL±39ïÓ/–ƒ®Wsìặ'Òšîň x\c8¨³*èæüu¶ÐnõK»¸n`Ìr¿xÇNõoÁÖâ]ÏPž{™®f‹s´²³O÷sT¼w!ÿ„:ùy' ÿ¡ ½à©^_Ø’2|ž§êk[~ïæguÎu0pxëR`t?•SVu}¹'íÊOÒ±å/™> ñZ\ðiö±‹Vä…†Ãý¦=‡_Êž4«¹V5½Ô®šGp·"4_¦Zá´‰æ¹ø»v÷'çzF`ôÍzk>]7q‚kiG’É©s]œ†±g®xr¿Ó量´Oš[k¯‚ú†ëZ¾ñ=Ÿˆ,Dð!ƒìt'”?à}kUÈš'Fo“¡'½yOƒе^Àúu©X°`p9ï\æÃƒ…ˆ8ö§çqÀééLUçž´õ‘øÓAaùxÏãPË1@H]þÔ’É—òÁ#›*Œ<ç=é64ŒXµë‰oä·û6ÕŒ\x­­> ‚yÓŸÞ?;s÷G¥PÓô°³Mpã™v°é[i šh$ú =qŽ*8BGëO–Qlà ð2*OÖ›!2ïßú )ç‘E+”MwLNp„¯ëX«Ÿ´7ÍÉ'WA¨±@¬·Ï& ÃòO&¹bu=‹DgìMž9ÿ¥B#åè5*à“ÎkDCC[nìw8¦ G¹§°ÈÈÀâ£'qßö§q ƒÉœñ\ö¹â};D°¸ÜÄ×QŒ²å»q]ùùÒ±/|#¡ßÞKyueæNãçmíÉéÓ8«¦âŸ¼DÓ·ºr~Ð4½OG[›ûX®o.Îîü ·CG|9¥Úøri¬í-íä‰ÃªaœžüžÕÚYiZ~”² +HàX äãÖ©ßhúV«2IykìŠB–Î1Ÿ­míŸ=÷mÔÂðvµ¡¢ÚE5ÔBítcf˜¯N:ô®µ`lnÈ?6~•—máÒò+¨4øcš3”tÏ·‘€êGµg9'+ĨA¥fWòË«Fp3Y~(_/Ã:¡.ú3ƒžœŠÛÈ• ¡«éZÝ©µ»Y=Û°’ɸ¢/ÞM­,PðÁK i…I 8=ÇVŒ¼/$„kZYd¿€î`¿Æqî?Q]>“¤Xh–† ŒHÇ-óÉüjÔŽqœŒš¥Q©·r'Há|ª¶¹®^]ºl“ì±Ç"ÿ´ ä{WoäôùΪv§i÷×ÖИæ¹¼Ãqø ÑiÀ#8ïDåÍ+¡AYYŒxÔœd“’j12ÙnWšrÉ™1‘Œu§¤Š=V§QèE$* ³6<ä×–xb{xü{tÏ2$nfK`xæ½;S´µÔí^Îëq±¹Qˆãê+ þ0°#¸>kkNJ1iõ3š»V:$Œd7$qHËzŒäSp@°Æ¸DTg ›¿º]¹9ê3Ò²lÕ$I`¦ÓÓô¥–Ú;ˆÞ79W §ñ$ÊÜRrÊJ=èM‰Øò+;Á¾.U¾„@”-ýä'†νŠ☠·Fã Ž„õOPÒ4ýnØÅ}l’Œâ_¡¬è<15Œ+Ž»on:Dv¶>„Ž+YÍTI½ƒƒò0~%\¥ËXhÖŠe»/½£NHã~¦»o i ¦hVrŒK ÞÌy#õªÚ^§é×uo-Ü£æžfÜçñ=+z9~l €0*gRñP] Œ=ç&HöàÆÙ$du¦Cn¥As–QÅL²*®\õ¡œÝÛÚ²4²8½núΈº4r\F¡"—yg)aÆ*ìD1:+FFÞ¹ƒ\ýǃ<;<óK&˜IX³±‘³ž§¿±§Ãmakœ"8£á=?:Òm4’")ݶp>7ðÆ›tÌ¡È˽éÂTË)Î{懓ð§§ëQvU‘æþ1Ò®t/Ûx¢Ê2ñ.Â'lqŸ¡Wu¥jVzÅŒWVÓ,±È¹ã¨>„v§°-·rå[ךŸÁ:D×=±º°‘Ìm&1†ü:~U§:’J[¢9]Ñ©­êºv‡§Éww"¯XÇ%Û°Ö¹xjæu­êQ„¸¾bÉQIÏ?ZÝÓ¼-¤é×"sÜÜ.1=Ë™lô­ÉeòÔ’\ ž´9Ú<±ê%»²KvHÇOj°Ñ—ä7B Aáºç<š¸€c¯~k+šØ“0ãåõ©r9Í/NOåHG¡â€*¢¹”’ŠûÄÔ²€HÝÉ#=©Kc€i¸ùÎyæ˜1øcŒ3Í?’4¨2£à½c֞IJ6S»$Ô|æ§$ ƒÎj3´ vÇJTt;ͲàHqÇÖŠaråñÙI$}Î+šN/%ïóèïQgT/ñsøÁrãÄk•hvt$V@0NúÕŒ6Iþà §î°6çqNB v"¬†9ºväu¨;9qž ïS¾vzâ£çw½2DVÁ§^?*…°Çy#5;9>õ\n?LZ¤KegYXüøûÃ8¦GØô#¿­^Ø d您8Çn‚jW'£¾µ‹Œôf?oRwc…?á]¶ã¿C\† >"xT"ûª£­aÓo¡œÛM#¦Óõ­7XI……ÊÌñà0~}«P.dR8®*òqñ3N:hEfšìä`ãv;ÿõ«¢ñN°ú/‡®¯"ÚeQ¶?f<úÑ(ê’êz;ôïW²²•-g˜yøÝ増l}&›g©ØêRÉ¥ÂÈè>u# ¿Ppj§„,VÃE‚ITµíډ畹f-Ï'èj/é±¶Ÿ.±žEý’™#™8$v·¨4ínQ]Úæ³òÐÚ9'µs÷>5ÓV†Ýn/xqm`¸ëšÏñwˆ%—ÁW1õ¶žƒaúbºiPèú-µº*ïØ­#Ë1äÓåQä&îìŠzGŠ,5k“k–+•É1J›IÕcW׬4qÝÌØ ¨æ?…MucgèÖŸo ‚Gñ.3Ïåú×+à[fÕﯵëÔó&i6ÄHÈ^ç†RQiË¢º|½M¼u¥¡és”‚¯,XþuÔ¨i ò‘ÚªêºM®³fö×( ²óž úRjÚ’i,·8¢m@OV<Ö¡´íÊŠ³[&­ey¨ÜØC({ˆY@àvëSKµ`¾"D‹c+€%<1âk øïVx®ÆË¶W óŸ¼x÷9ü+ÒM¼wû&]é"ÊzEHrZÛ9s^ç?Œ´C±ÛPAt©'ñâ¦_è €uúŸáoð©|KgnžÔŠÛÄ·$ƒŽ)þ·‰ü)¦³F…¼®¥A5^ç/0½înSCG¾‹V±KË}Þ\ò–\t$Jmö£iawko3íšæB‘¨çñúV…¬Ú@°ÛF©tU óÿDºÅ½æ»ot‹sc6-TH(‡æ8÷9?…Lb¤üŠmÅyžåº"àã ¬ËXÚjQé³´¿i”‚"-øUÍ T‹[Ñ­¯âàH¸eÏ*Ýü븉Å‹eÁm¶%ŽyÁÉ¥êÔºOEc¶#1ü¼ñŒšÏÖ5KM"Ù&½˜¤DíÞ¾:V–@Ø€uÉëX^8Ùÿ^¨åþÌ)E^I0z'bö™o«Ú‹«'ß à1B¼þ"›¨_Úh–Âêú_- ¹' ½'…ˆÿ„_LÆ6ý–2>»Es,Þ$“Q³šò¾Á؃¸_ßžsø ÄÕ(§+tmFýNïÊ& ŒuÏ­`j-Ñ4íJk+«±Ñ…Þ ±ŒãIàd랃Ì?é߸”g¸ïøŒVªhúlsM1´„Í+wt I>çéS¤[R÷’hÅÿ„ãçf58ðÙn3ëÇsLñ•ª_ý’Æég‘cßò)#ã¯å\Ï„á‚Oxš7·‰¢WãŠí­´­>ÎøÝÛÚÅ ­Œ˜×oÏAÇZ¹¨ÇBcÍ-GÞN–V¯ss*E y.íÀ¤†T¹%ŒîI0> Ö‰âO\/‡L¢š/>g݃œâ03þ×?…EðöýçÑeÓn˜ Í6C€žÃîŸéøT8û¼Å){Ü¥ÍSÄZ~zßM,F\ÄLÁ¿1šŽiVªë9ºBV´ÌŠÅø˜è§B2œ'Û$ç ÆkgTñ—‡cÑîIÖáv”kp¤3çŒ`Õ¨û©Ûr[Õ«›°ì¹·†hœeW_pFiÊ¥T©çžµ™0iÖÑ[+,"%¬r@Ç&­¨PH©¬›.Ä{w1äÇãMšÙf1³`llýjÃ08fœ$N9 )]ŽÈUàcýjš*Œ8ëúÓ¢mɸŒñƒB÷$wÇ4…Lpiäîé¸à÷Í1*y©7~4ÞÇ…8œJH‡œS·íÏCš…[!’ê.Ù>RIãæ#·Ò½ kXîUã•IGùX ŒƒÛŠÍ¶ð¶“cyö»[vŠcœ••ðßQœ¸ÉE?2%ìq’G7ÃýtÜĆ]ð'hÛ’}¿^k¦ñ™ñ…¦ŠÉÒO9‘xb5¯¨é¶šƒÙÝÄ$…ñ‘üŽj¾ Øè°=½˜pŽÅˆi ÁöÍS¨¥ÕÈÖ Ï j‰£ÛÂÿ-媈fŒðÈG®*¯Œõ&m)ô‹cæßÝ‹ ¶Òy'Ðbº ÍL¼˜\Énc€d‰ÌlF;• šu®•ci9x`ÄŽiX–r=7h抗0rJÖ9xZâYY[ü÷J*ÿ6+OÃZä:Æ— Vâ ,l~`Àc8ô÷®›h* ÓŠÉ¼ðΓy;Ï-¢ ˆåã&69ë’¤gñ£5i#Nè§y©A%ô:Kïs…Ÿ¸¸ïõ®sÁ×+ ^Þhwïå;¾ûvn@xàþºûOÒP­¬!>c–'sÄóK¥Xê1$W–É2¨ã#‘ô=E>x¥ËÐ9$ÝÊÚ¦±‘b÷NC¿ðG»ÏL ÊÔä][^ÓôéZ(£k©ãlœaAõäšÐƒÂ:,+8µgt`SÌ•˜/ÐVdÐôÏ·h›EûP9órOJ¢¶Y3Äž±ŸB¹û5¼W›ÑÒ0Ç=~€ÕŸk#Vðô*–ã<œt?•mÜÙÃwÜ(xd2çQT4Ï i]к³€Ç+)HÄcéšDãg¸84î„ñSÅ+¨Œ¹ç=ý)ÞÛÿ€n1 æµ/´ë]NÑìî¢/ãr‚F{ö§éºM¦•oökHÙ"¬å±ôÉâ§™rXjšæ_ˆõc¡¶ÉB\Oˆaç³qŸÃ9«o‡ô¨ì’anà ¥Ú%%±ÜœU›ÝMÔÝöÎ)Ê )qÐUÛKd·!U©¡OzQ̹t#æÔàü1?ö'е/Èÿ»i ÖÀ9ç‘•]Uð´n¶A°¯NGÐËá¯ì–1‹‚ÛüÜŽsš±?‡4‹™¤–[L’pÏ·–„Õ:‘nýÑ*›Z¸½·¶ˆO$Ȉƒ,Å€VŠî£½ð>¡p»•d€2‡8ÈÇZÔo h?)m6Ùã9=:VÞ•g¨Û,7–ÑÍ œ„n™*¢še8IÜçôV 7Á—²ÈCd¤ã$ƒñ«Z6•jtëv¹·‚{™¿y4mìÇ'ŸNjòøoE­b4ûso¸?–W ZÒ´°¶² µ‰"‰OÊŠ89®€ ô¹ç©pžø•=¯Ë–©eQÀW?P:ïÙ”J:gÕKï hzẻӣ–fë#g?δb´ŽÞ†0ÁB®âI{žhœâìƒW<çÂ̧ÇÞ&*ÙLöwOz†­h^é¶š‹ÚÜIJC ”“ÏåNsŒ¤(ÂI·§Zk¶¯}kÏvìéæ(%#*Àgñ¬Û•ƒÂ~:²žHlu(Œ àð•vºnk¤Û­µŒ&(ƒT¹nݳUuo ézä±É¨A$­á?zÀ4ÕEÍ®Âävó9ºK¨øj1"€obßU®“V“F]>q«5¸µa‡Ž˜õ?J¹qá"ôÀ.ìÖvB#HK6½Wx}œnÓb=ÆI ~´œâÒ]†¡+¶Oa}m{ck4é¨òÕ†Þ‚®ä98¥ŠÚ(‚¤hT`*Žô©ŒiŒcŠŽdW+*3 Ã{u¦È¹µÎ^8ëW )Žz cKoP3Žh¿`·rX6¬*:T‰è8çŠl{Iî*O”“ÅIhRÀcŸ­"ðN_9öÀÐ0ý}úSÔg¨¢àFÃ>ôòp;Ó” ´Ž02Å1oCØt§2j`yü1Š”Ø8☇~4ÖÎG<Ó·sŒw¦£œb3($¢” Ï*3ô¢˜ƒP[˜Fà?$ôõª›Ä¨rO©ÅZÕ#o&6B2­œ¸8#½TiLà`v®tt±%ÉäôÈ=ªE\À9Îi Ǩ©0 jFrW5V&äîòÝ01œÔM´’ã­HHŒ Gµw±Ëòþ4Ä5†T䞆˜˜P¸<ägšIY‚6Ñü& IwÜŽ{ÓBd¤íÁÏ9¡¤<ã TL]¡ ŽH8Çj\3  ŽzS²¹-»óá†þ*i” wM1‘•B¨œšO-²8äUY QLŠIQžÜÓb;hä–cɦ²çnq´Žæ&†HãmŒCöGZ„ïrÇ‹4;yLrêVûÑ€a»8íÚ´Òá[lˆÛÑe+Üv¯8Ón…"—J×ôÜÛÜÈOÚÀÞ¬?ç>ÕßÛ$kmƒE³r6ãŠÒpQ؈ɲ̒¬vÞk| )$±U×4ß,}l2Ïœ¸>½êÌÑ ­^@x¤R¬ÐŒsšóÏ Üi6z-É»¶ó's‘ldùGNpGëD`¤› I§c¹ŠæÞî)&¶™%Œ1ù‘ƒ}8©£”aTà<Õ oìÄ{8DÜ~õPöÝÍh›åÉÈ E&Õ÷ ‹P·–òKe–6™H,›†åâ™y©Úéñ©»ž(C ½±\v«cyŠu WIÍd"i!ýha–ý1Z×~#±Ñ®" ({ÅrSƒ¸ʯ‘húÎö:˜äÜ‹†0ȧ xàSc´*À†È½‡4psc k= Ô§&½k³o¥1au0Ü `ŽyýkMämà2rzוjW°Ky/ˆ£˜µä ÇÆÁ~^¸Ç=õK}·1¤ÈÀ¤‰¸}«© nâ©>`ÀàŽrzVcø«H·º{YïaŠxÛk¬‡n23Ö¶~ÎsÜô¬Ë½#OŠ+‹™l yYÞG@Äàc¿°¨.Ì©sn#ø«CT$궘ûÑÈ­d¹ã!ѰÊá½pþÓ-/¼ ©qm ‚G|—@Hˆ®â+A¤h6¢G`:Sœcd(ÊM\‘dl¨n„þUGTÖôÝ%‘o.â…ä(fäþtDÁÕÎN3ǽpž‰5­WZÖnP5ɸ1 a‹è=?úÔF)¦ÞÈnRZw;K VßS…§²ž£e?]G!ÆÞ•Áx†ì?h·Ö*PßIä\Fœ 9‘øþ•Þydå³ê)J)$×P‹m´Æ^ê0éËç^\E c{¶?SU­5ý6ï ¡k4÷Q%¶=«/ÇÑ)ð^£$˜;cAà3\³­Ž³eáýLQ©•+Jb14hæ9 ϶sU iÆäÊM;™æœÈ깦@É#*Hè æ¥1`ÌÇ cÚ˜aÂl"²ÐÓR©Ölc¾[)/-ÅÓò!2 Ävâ­ Ü9\6çŠóýR4…9¶$ä{=zÙÎìŸîàÕÊ1­Ô˜¹;[†åF}y¤IðßtmÇ?ZŒ~=ý)ÉóЇa«ƒM°Ég8éHg$•ã¦AÆ*G…˜ç°< ÔrDV=Ø9Áæùf,Fì6áÐv¨'RòCÇù¸§ªx`ÄOû;9ùÉ[#šwKQY½ HIãÐSœº¨\äy§ ù~÷8ëOÚ<šÏS@+ò#žÇµL„•÷5.Xƒ¸ãÒ¥GN¼SBbŒ})“®Hžx8 ¾qÎ)2r üi§q4`ƒØu§†À sM9ǧzÝÏÖ˜‡dç!@¦r'¥?'×4Æ\޹ÔÀc3+ÖŠ –ä/Z(‹Šº6?ÀN?X¬›väöç±pÀ߀ü²cúŠÉ™ÁÐÍa©ÐÖƒVB³c9QÞŸ¹Êz Wl3Èïš–%\÷ª$wR<“Ò€íÍ9ˆ‘Ó_jL“Æ;zÓ #ŽxçšV8Èà°8§À°Qž D²Œç¸ô÷§™¶žùüjå+«¬ÂòfŽÉäŠ#+…%c\ÇÓšä¼;.¡£hßdŸEºy|ÆbQÓ'?Þ®ªBÀ|ØC«l$NxÏzQvVµw)h­~Öm&¢9RÉ#/eâ´wàq·h¦c  áÏ›´Pêhzê3#FŽôkµÅÍ£ÁÄÁ£vu9 0ãÖ©=—‹í5 E¤ŒÏ<@áQ¶ù®›ª¿–4à£~âú¾õ\Î÷'”±æ xg5•­&¡w¤Ém¥´iT£4¬FÕç$c½]U&FNGjTFÐîÇZ•½ÊnúCM¼&b·7G“µ\„ôÎqøô©¼+iªiÚLvZ¡ƒ÷$/çzûñÚµÂþñŽ=:÷¡@d©ïÒ›––º–<Åä†ÏNõŸªµÍÆ‘u¤k$òDÑÆ¬ÛG¹¦¦ÒI «»³+D½Ön!1ëbÚhÐfD2Ê{œ?ZÜL:‚p~•FÛÃØÔ‘‡ÅL­¸ãu¡ÅêZN¸ÿ-µ¸m!–Òß÷*¢l6Â,sþñ⻵–>ŒF@ɨeV8êy¨Ûæ · cƒMË™+ô¹[±m¦ŒÉç¥r"nÜ1Œ¢ÎQ€<œc4ÀdÛ€>÷563/5Ð]­ŒŒÒ¥7†éTK>Òu=h Täãf‹j Nŧ– ¢Lœdc›$ëÔ‚{ ¯µÞ?R§jCÆwg¯J,‚츬}ãÓVƒÆyª¡ïV"9÷ÆqP ÓÔC:õ¥çÏ4ªyäSØ‘…Ô¦G9ëÍ'S? oLži¹y8¦&;«qÒžà`p9¨Ãªžz ^bPgïcëEFìwv¢ Œfÿ÷-×ê+2ê5)¸Œ`Ö¿”?´Ê.î[qT®cmŽ7£§ÊŽÆQQŒqúÔˆx Å9”‡< ~U p:5ª2{‹½Œ¹Ûòç±éR60@ô4BWkpi\aÉ‘LDC%€'Š .:ý(îäƒÒ˜Ó|„c'­\†>@ ž2ªÌHn8Í+ÍÌFzb i¸åzƒE‰m>€hÀÊãæ¨ÙömÊëIçâÉ'­…Єää<¨,Ç·áQI9 Ò,ÌÅ!;1]H¶çx$`S¼´ËqœÚš$!Àqó1MóA‘Æh³ ¢Fù 6çö4ŠXú;UcSM+Nk¹ʧäš[crFWü$ßñYFžPB<ÌL˜ÝN•©«É<]Äö«–5߉s´Éé^{,±[ØiÚë^³]5ñàÈÀÉÃcŒð1]‡ˆµ˜"ðôîŒdûJâòÆíÛ‡oÃ5¼©ê¬cèîXÐõØõ=jS*Âцó”gä+ׯáIá­^ï\ÒÚòxaqdŒ(9à‘Îk+gþÖcƒ£_ ºð@RœøñŸÆ¬øGPˆé×qeÓÊšYu ì,H8ôÅ'ga©½.%¿‰õh¢W0Ú< }ö7HÕƒœn'?J¿â}OTÒæÓÍ”°®e0’=Ä3wëúVo…~Åwwr“@Íp—r\CæÆÀcÃx§ø¾èý»K‰-îf0\¤òyQÚœúSå\ö°]ò|T¶n\<à Ì‹€OÓµsÖz†³'ŒîténmÍœ(&Ú°à•nÎzûûU‹-|êZŒp[Ùܬ>Yy%ž"˜9à õïYšuâŸjÅ:¤±$QÈÑ0”’yÅLbõº–Ɔ¿«ÞE­Ùé6×±Xyñ4‚âD –ã5yïu+Â3^ÞˆæÔ …Ù¶•ˆ'²üG5Œ÷²Xêºd÷Âx¦Š&b’t= K£Ï©i~ W¼·–âd¸,æ2ØÁÈSCŠå@›»&ðìú¥ÑŠæmJÛ) Ý¹T¤™û¼uÍ÷ºÍ¯‹ll-îmþÉp! XÆFsß5C@³Ž?½Æöú\–ùdFD2g¡»ý*ÍëÌ|y`ëopÑE‘´Â"P3`Ž ,¹Ÿ ]ò—<_¬ê:-­­ý£D`YBÍ,ËÔsÆ4¾'ñéûu˜W–R¢ÃrO_¦3Qk70ϯXé÷·[€æWòXÇ–] öÒ¹‹ÛKË _ZÞ¤’‹mÖv!T’Ë¿;àü) ¥p”šnÇuw«¾‰á³¨jÌ‘‚DC ìzŸÂ²./¼Sk¦ÿl²tUÉbî ß ž¸öíK¯Z¿‰ü- Tš%<ËÕW›Ä¦óEšÖ;KÏí9bÙöf F:ã÷¥þ`äuº6§o¬éß[s˸0G±ükGI#§R+Ò¢ ðhûFùZÞ=Ò,c9v<ãñ5ÐZ^Ûh.U]XÃnϨ¬¥ ]¶4SèËå†ÜÖ”FqUA;/–ÝëLfpìÛˆÁgŠžV>d['ŽW×5’èPJ‰äÇ#ޤI ¬Ññ1‘ÇZ9t6¤²ÀL€îÀô§¡‚ñÓ­C$ŽbV-Ô㌓ŒœpiØ9‘(O˜“‚3ÀÅ)@dû¿Jªeb¥™ŽCcØR¤ŒÄåÏÔò±ó¢Û Øië€[8ÇÖ©®í‰–>üõ¥aÃ7˜ÀîÀ4ùEÍræÎŸžG5"ã$ bšœ¢ÿïÏ5 Æì㋸ŽÀg¨©ãø¨àä€)IO·j.;.¤‚=§pcÈéž•°‡eÜ2A©Õ—j’A$S$‘x9š.ÇdWû-±™T•äT¿g\68éJ õÍ 8¸Iö(w:e³qÓ4yap2H$ñšåu¿ߨÈ~ÇfÓÙÉnYn ø8éÛŠ‹Ãä›å‹TÕ¢°•B>{û{STånbyã{ GÌ 8¥ò‘Ãd“ÁÏ5Âø“\Õ ×BÙÊ©onˆþ^Ü™IÈÇô­û¿èöa–è Ôe¢E,Tõçކ“„´œv:ˆ’O½9aG `œ×Øø¾úÍõ&»–MBÀ€$%HbzÖºi|S§i––Íw#¥ÄщÛ¤äg¢TäN,Þ0‚Ù œqÍ 3ÉÈ7Ä[s"ÓgÇ ìê?5Vóź…ûÿgGas`ò’¢XÎù?y@#מô½”Çí!Ðïü pG´Ñn™'ŽõCE–ö=×ûE]mÆëÁàœwÆ3W¾ÑŒáXœóŽÕh­:’˜bØw(#äRÇ•ó·¥F.G÷N1ž”Ó2‰Áõ^j5‘gìê9뜊ˆ@ZFVÏ\ƒR ‡Ë@>”‰8 ÏCJìVCšÝJ€M'Ù“nÒp=)Ï:ªärAéM7'nvóéž”]ŽÈW… ãL1|»wjš' lœÒ9Ü„Ñv‚ɬ ‚„O=)ëlHG|SDI[#çdŠz\«rƒÈŇº9#PNG'šC-ïHf ªy!›ŸjlŽøb‹•_SF¡¡b$P»W°©9à ‚ÚãωoZ³É\ã&5¶€9$gšyÇ?ZpeéÆ}ixQü莘ëíP6'æ¦ãæ9⣑wwâ˜X7|èU€Ãc¦Ç×€Àâ¥ÁçžÝ舎FzT¤gô¦‡®y© ç ~4À&Šcž(¦IeËÕ@Îbsü«:õ†Öl`gE\WWÕw‚&ê>•—wp¸ ñ\«s®ÝF_4G»,yÞµ$`îñŒÔPàÈ<ŒàÔˆôàÔÍvGaUݾbØã¦™@rGlT w1zdŒ,BôíP—* ¯qÞ¬” µ&®i§bZ¹O{ÊI9Í?,Î@Áþ Lœãµ0@zâ®ä¨•C·šÒ¸Ï4×ËB„Œ°èU»`§ Æ)\|¥gYò ’^’PÉЙb˜«ÁyéÞ›'?(‘ÞŽarj@ʼäŒTjܼž•:ǃÐç"¤| ߌðx¡66‘\åvïí¦²nѪìnT”íšq+´3Nâå)³qµG=8®éG3RŽJ\øÑv72r½y¯‰5;)µ9-,í IId¸¹ÛÉãæÆ8îMzC¯‘ëë^[u¥\éšì¢íTC4¯"H[†B[©íÉkj)]ÜÊ«vFŸˆ`[‹;QGd–á¡ÀÊïÎ S‚?:±¤è6wÖ²^¼Š-_.Qr­H9n»x&¥¹—O¶ðÅŠk öÈŒ…¶Í¸D9#æöTºÅ¬:fŸswÜÞMy¶p6FAè}*¹¬M•îEced’}“N½iôÍ@^!&æ…¶’wõö©u=Sò}²ZEû€n™÷|ÙÏ9Çò¬[]R†êÒ'³•dS+¸Wlr2?È­û·¶Ð®?â_zðLWÌ6÷í£§S§Ü³ÑÜÓSÒËU†÷Oµº9åWû/˜0~PßîýïÆ´tíÄÖy¢V‚x¸Ž‚âSžsžÝýO­Gªj6ZŽ£c~^áa—ä’M™6í·§ðÉ q[Û6šŒ‹%ΰ¶vÀâ8!” _йŒúQ)JÛ F%Öµ‡Ãö:…ú0 Éæº3aA¢LÔZ4z¡`÷dÚÞN«ºêic Äã“ÏoNÕKÄ^‘í ›Læ!š’LÌ̤cø›¶zf¨ø~Òë ·:mÃ%ôko€¡€ä¶2ç§Ö¥YÆ÷Ô·u+[B­ü|_cŸO½i-f.ñ*¡<®O$d€\Öm+FÒdÏ—ªˆÚVÁämRÞýúæ¶5´M#QÓí¤‚êyAÝmZE‹'Ç®gW[Yu­BéµXfV'bª’ùÛ´.q€UÅóX†¬wÚ°Úÿ‡í¯Ä~\Ž0èGÁǵjyÇ©s“žÕ‹á=çAÐÅ•Üë3—.6tP{ þtAŠä“\ÓiI¥±Ñt®B±H:’­!‰‹GÇš˜J£æ'ŽÔâáˆÉÔó1ò¡ª’»ÎŸÎšcfn@Úx89ûÀŸ—œæ†!p7ßš\Öa¥Y˜ÔeFìã-ŒqVÓ9VÏ4˜V ½28¢áb8Ç–€[ŽivðpÁqÓŠ‘$¸úSËbŽfEb¿½vÀÉ÷¤Ž'^y©¦?»=Ç’"ÅPä ˜â‹±r¢31cœƒ“R¤oå¸ 2ÞÝ)ÛƒƒÏ¯½/˜«÷™G©¢ì|©´€CAóqš‘²ËŽž˜¨ÕÔç±ÅHŸw€=¥}uZh=GcúÒŒm俀F9ÎAüé29ö4ÀiDs‚´ýŸ»ÇJBFIàc®iÄE"L¯$ž”6X`w¢Eluô‹Æs’ÄFÄ®6Œš²8Aš‹n$TªÙã½$†Èˆ9ÿ)Í SƒŒÑNäØH:›ÈStúŠÉ¹;‰P° j*™/‡Ý8?˜¬–Îþän®dvw£ÜÔ±¿}ÜUnsþ.~^2lŒ;0’xÏCLÛ”àŽƒµ`Ýjºœ:»[-´MuÚáÀÊ‘ßÐç5¸Œvp:qÖ­ÆÄÞãK•“œ{To#@6p 9·:‘žpy¦ÉÎ[#vŸÌŽO,N±åUÎR{õäWZã × a§[éþ)ºMV5Øî×o#|ŒKdûdZÒšZ²'rœñÛXÝ>–^{¸ÄÂY-ãPØz±ÉãÐWW§ëvú¬›x™. ^`|dzcGÒ¹(®/lµQw¦9ߨ7œ¶âßvA$ã~§=1ZW?dðõíåͺ“,È"ߕߒÌ ZN)è÷3‹¶Æ5ö¯u¨^o¸¸Óí ’Ìvaëžk ÓuK‹ÝB+ÛÓo ­” 6H3ÆOÓ8¬¨üCª½ÇÚ‚Ù+ªÉîÚÎ{WG4ÐøƒÂÉ{*MTiqË£­VI48ê÷0áy5Árÿ$M}*¼…'$Rs]µßöÿ†ÅÝœ¥ê²»FؤúW™[›˜58í÷Ê¥X T~ŽÄqϽ#ÖzN˜úäŽËºiUaFsŒóÓ4êÅElÈÖu]SUAÓ¯ *¤›u ó0é–8Ï^õsLñÖ—#G~.n.$ ËÆèøî;g²ú ’o0áÒ¦e88yOON}j¦©«G;oMo)¤bi2Ñ6NðAþ,mÁô•¬Ð¯gtÍèµ +^€êIí.ìXä²m’ z‚ ƒI¢iÝ齂f¹hd/±FýJ…†k"Ù'ƒW²þÚ»[¨5 ¹|'—Ñ€8ô=óßµMá{ gñµþ£h²&—˜Ñß8—8Æ3ÔyúTµdìÊZµs¾u8è=Í ?x7gZ•0ÓÓ Wåë\×7hƒjìéëŠd¹ :-] óö÷¤1ØÆzŽô\+©&BpÄã¹éJä…›ŒZ°DhIn76#Ç‘ÂàÁ“#B¥Ø•b ðqÅJŒvä/jzG€=)Â4nÜb‹‡+)çæ,Ï_Zošr“ŸJÑòñÁÀF 'õæŽa(üʼncÔ|´àIDΤXˆ ô椯ÜÚzþ+”®€ á‡8Å+ Ę ŠœÀùs×¥!]¸ÆzóC}F¢$*c…@¤t©blä€?Mw$dã¥9c A“ÎjueÙ%bS“É9ö§/Þ?Σق8õ¡nßÊ©2GœtíùѹwמEêi¤@y¦ bJ¶1ÀéP£¹,@>Õ8ÂŽqš ‚3íÖ– G‘’¤sÚž[xÀÈÅG•íÁ÷¥nsש⬒ ¶IæŠF]çvÞÔT ³Es8^¢ãñ—mÙ [w)ºéˆÏ10ü+0EÚG;ô¬Òö$/†Áô§n8Æ229ªò(mÝ3š|nvä’r28­‘ˆUÛ¥aýæ>¸ãdȫǰ¦á™r½ri˜%xÏËÒȰ®Ä)!±Ö”8ã-Îi³•ºô5^@JãœtëT•ÉnŇ˜)ÏJF¸]Øî}{Uv‰Ž1œmÇ4íàFs֪ȆÙlHŒÅBÒ¨f'¦ ›"U±ëP„vÝ“Œ¨lp™1)8nhóòè›y œúT~TŽŒ/H¾ýÄ¡p1NÈWd>ØÙ½Àæ’9bT€:äÔrE"ÀpØlÓÌnKàsÖ‹ M“¤ÀÄI8Ȧ<ã*cùqH±I厀¨¤¼À ÎÓÓì…y IÙòŒŒÔžtb<óÍTŒ4ë" ªN@j]¥H~_zVAÌÆ½ÊÇ‘þXÀ,Iì+.Ã[Ó|F’Ûf`>Éãu'…ZÔìe¿Ò®-•ü³$lªÞŸZà<;­Þi¶ó[G.±åGš0ÜòîžIíZ QmnD¤ÓEù#½Ðn¥´V&Ü´Žþ[ŒñЀqß ¤×SŸ´#ÚX6Áûµç…ñúšÖ—Äí1êúT+ƒˆÞdÜ}ö¶ Ch¾Ô¥& Ùm¤AÄF|`sÓ9äô­.Ö­Û³)]ZIdCHޏÚá]0p020ǦGÖ„¼×ÚÚ-#N¹l`/–7Fž¤ö—pYZ=×ö†¤÷“(­¥ÉsÉË``t^ý«©ðêØ%€‚ÍãûZÄ ø—oïdýážý)·ew¨$Û2®|4‚ëL±7oŸ³Ê <åÔƒ¿þúlþ™©kÐ-Æ™y:cËÃFcU2'û¡…eCw¨ÞîmBà\[Iä¯*H|ÿ|ŠôYLGÃörkv«s)Š5hÊo1°1Ï|Ò“qµõWò9[m>Ym™T-…Ã1wãéõ¦E#éê×K&DÛ*I‰#dã õõñSO£iðÜÈ.EÆŸ ´3H®S^ÊÃЃ޴gÖü%¢„–ÊÚ ›³,F77ýôzQÍ}µ­¾ƒ´_ý²øjš¤1 †€ ?ímíøóúUÇñȳ¹HîtÉà²y$¹oU89^Ã5“sã-l/ÚM½´Žv¬»ZEÏpX3YÙk^:óÍ,r푚^"ì¨úu¤¡z{ ˤO]K‚ÑFÈA Î3Å9Ý×Ëe*¾ÜTVÖb!‰X„‰Wž¸©„ €¬Nd ñ\Új/šÊ]—jçÖ¤óòPá“P´EŒœä2àÔ‚•üãM!«Üb±‘oïãÖžnd*Á`A¡mÙ»=ißfË“œ×­-fNȲ+‘õ§Àån|qÒ’X‹€˜Â‚1Q¬S ‹3Üc<Š–Õ†“¹ Ùˆ+ÁbM5%e«ààf…ƒ†,qœšy„‚ìx,1×µV„ûÂÜ\4PîE Üuè9¦´òË­Žx²ÂÒm§qÒ‘£dš¬7Ì8K#Ÿ”®áÎHê)¾tÏ ¶T2i'ï]LŸ‚ö©ÙL~Xft#½˜–·&tÞxäÅ]GIè*¼P¤H­J# ÄP÷е¶¢žH!¸ô¥ ÏóMŒaŸzxP½:šH¡Àü¾ô;g­!û¤zÒŽƒÖ¨²ÈP2;äÔ…”±R0@¦3„]ýM<Ø ŒéM\ü¬Ü(#Ö‘‡R¤dŠm?0îi“b´²í|Û±¢–MŒÀã·¢³±¡rR7œädŸÂ¹uuyvxn¹ë]Ó%˜cê9í\•¼ÿ¼#ý¬Ú²‰¼–†¨lÅ [f8Á¨ão—w§¬`õ.õëZ#6?p=h|`‡óªÂášþ[`>ê+ço©#úTäóŒvõ«±K{šC†ob;l“QnØ™Q¹Ž3Þ©+’Ø®#i<Æ ó€2x"¢,XçDX!Œ’ÌY‡~•IÙu\äw%—åó$Ï7q×ó­ý+ÁöÒéÎu˜ÒYÝòè#õ®’>ù|ä±âœr¸#Œu­¥ROm ÔR1nt }#N¸›Fb¿D&9d%ÈÀÎy#Ž•…á=B+íAå’îs}< yùÌxÁ,sÐg ö5Ýmf•ò¬ ô‘C(ò¢XÎ2HP3IMÙ¦»º8kÍêÛV²Ó&˜Ïq{9¹’â8ˆ Ê0¤®sõ­ýa“KðÕµ†°òß ‡Ù%©Ì|’¿N?*èÜÝÃleO:l”By uÅNCÙ–+ŠNmÚãQJö8ÿ‡†ý­.£¼-7(€J„|g·JÙñ7‡F­¦…†A[¹•J.KpA±Ö¶Jãf᜚°Tl`ñsRäù¹–…%hò³Î¾Zê1ÜÞ »Y!±hÂùs¯Áêöâ»ûK{;6ÙÁ(ÿ3Ô “ߊsÇ—bT‚>´*Švd€—;¸à¹U‹â8Ø‚Ã$…úÔÞjo¶2qƒTnÅÍ áŽN*]¹uÚƒóº¢Èw9ýÛ…|ªÎøÑQXŒãU…ŽE ¸ã‚)&mÃK) .Y‹ ©¢×ìËÍ"‘³qΦÀJ§$ýy¬Kè÷7‰Z¥£¹Ú²Žµ¨ŽË R±.-+ Jì².#ÜÀ‘òõÅ9gÃa¾èɬèÙÊU·Éæ§^R‚œP”™qf‹ŒŸ½È÷ O+à ÔúUTûЂ >¿…*«f±ð;ÑʇÌÉÚê= †IÆzRùñù@ç9éïUÉ%Y8žôØþUˆ•.G=jl>bVØ s“Î84}¢48,GÔNŽ|Òä`Ô4n„®U—â‚ýKK2HÓ ;b§;HãÔU[`VÚ5ãu50 o$Œäb¡îZÚäŠ9`zR©ù˜ØÓ2 ÇAÅòs·€¤„–ê0jRᘌõ4Æ‚=E28›pÉã4]ŽÝË· AóÆ1ŒŽ*ÇÔ ñÞš½CŽ3šw&Ä€?Jäc½8 «Ï§zz¸c­Q%6C‘…ÈÅ#¯#“ÒŠ›2®A«Hؼ§¢àœûWm i70Nk ñìaXc\™'øÖdv¨ÂíŒ`qXGE©ÒÉapݸ皛ÌÚ™`:UX”+aG5f29ÏlqZ£&96…䎣½;œdH¤|ž¦“ªu=Qs1ä…ÎAPÈ ƒøõ§1 O^‡­0\+.O=ø«D16(=9 i|¥fÎ9ÏÔÉ%%Wn9j/;çÜ +¸´ìɹ8EfÈÆNiÂ?»œŠƒÍ(i¾{ÄਚL.‰öc«õ ª6—¢Ñ®_1$ûR\Ýu Î~´Y‰4Gs76²Ã4jð²á•ºkÊílt›¸5y¡¶fžI z}¼E‹ Ó8ëï^‰­B[·ÓŒYAFiX Ž£­UðæŸu¤é1ÛJ‰"ÆäƒÜ“;šÖœ¹bÝÈš»B?ˆmü=§XØÞù·7Æ$#Á=†N}ꬾ'˜j”ÒÚJ4ÛLD¤(,dÎ~œÔé¤]'‰®5’Õã‘W™…Æ=y㚨|9zúió]#¼×>mÃ/Ê –ÜÀ¤Ð”yt%ÚAfò­´ò‘`ˆǜǟ—ÛÞ´?á&´u9YÙìʆps¹ÏðqÀªÚ¶u¨>ž–òõ©fn>lã N¦³ 𮣌úhžÔ%Ä…çûÇg ©_qŽþ´Ôa`¼®uz}çöž—+ °²Œ2žœÂ¸í{F·³ðü"íd—Uº‘c³³Ä刌c=«³ÜÛ,e|»kŸ¸²×.µû[é­ìŒvˆÁ"·,xݾ”CF9j‡øN†kÙ-ds¦eV Fàô楗ÆZX¸ž̲»¼hH8õäÕ9t-UtùbŽ[užöìÍt¡˜ \}ÑŽOAž™ª0ø_U5€g„-ÐHP÷ƒÎt^ì›m‘ï-©qã 6±»žÚ;†1F[Ë8%¸óàÔßð”­•…½´˜Ý<"K„1ä®q¹³Ðf›©è“Í¥éúvœcŠeRåÆ~Eç§~yª÷š£u­OóÄlnÌM3“óíOàКIA‡¼É5FÎÛIJj—„›].?-B —šNp>‹üë~?X<³Æw ¶¶Î΃ÑOû^Õ˦ƒ­\[˜¦šÔ$Ú‰¸œœg×·‘<-¬ÛZ_Å–­ ì²G#„#·c%ºn1µ›ä¶Gc£ë0júa½Š)Cí+"àäwú`ÖGÚìÛ3Gb÷h·Œ‡aòÔÕËÝzχ¼§_øk»ÈB]\+ϤàÄvþÿé¾ÏssàØîC!WdŒ·]€àUGе˽1t«NÚ+DŒ#‹XwP1Œ“ÆqW®t{ÍšUž‰~¶0ÚÒGŒî_O~ý}ki¾dÓ{³(«4Ò:²ƒ9 œÒ°U\`tô¨d,Ìí žÆ˜ìþQRÄà‘¸æå7椫œ‚:Uá"2*îã ïTUËÆë¹¸îMJ䥰ÃãÞ…qï:™6…ä ý(M¥8oj€•i¸b¤} 5dgT#9Éf“a©.¥µ 7̽)]ªHléU#“ïæS÷¸9¨Ë³+‘Ž>´Xw¹¡" 2Y±Àɧ“œŒäb«Z“ä®öÉ#“S†#׌Ò{l9HÇ=*%gÝœdz z.F3Ò‚¸o”þ•#ÚiÜvæ£ã¹ê(ç c94Љ ŒprqŠP6ü¤ fž¸¤ÚŒ1úlDààŠ\s×½¤ûv ·<õçB!ÜõÅÖlœ‘ú)Rl …P][>Õ‚ûáºed+–Ít!Öm]‡P¨Gª–¯ ¼ŒF7 `ZæÙ{¢‚•Ü;K{r)‹ ×kÈ¥LŒØVèÁrtäL㌞<äœçŒž)2ž¢«b¥ÜA_^+9uM>MЋûV`p@•M_˜ð'-?*ùòX™d}À$(r;óþÑF’©}v0«7 î÷ˆÂ™£Qþøæ˜×VÊáZâÇÍóH:c­xdȬAŠ)÷Ÿ?®hÁofÀm sþFñÏå[}ZËs%Zýa:…˜‘syoÏy«ÏëOûM«)"ê§©Þ;u¯![M<³+Yì#œµÓñ4Ñm`0¿gÎ2n›ÿ¥ìpö±êÓkdOûÍNÎ<Á™zRoi3ÅÆ§fJùê8¯/[&S¶Å õûSÿñ5etYFÖM%V ÓIŒzõýŒ{‡<»Žú–›+®Ûûc´îâU§6§¦¬eþßnT“Ϙ y´º\ª¿.ƒb é™\çó’«ý£ž}*ÄmÏv8üD”½„_QûFº¢º…„‰¸^Àw¾`ÿW¿ÓÕ†oàÎ3*Šò3q`¤°Ùdñ÷fÿâéG’À2iö\u—ÿ‹¦°öê/jz·öÆ”ßíbH#ýrõ¥þÙÒKý£n Æ?z>žµå«nØØsÑB>?ô:RÖñ‚ÂÂÁúÿ£(tpUaþUè¥ á”RNW=†êŠ””ctÊ…KÊÌê£# 37q“Þ¬, |Ç“ŽµÁøòúG¸¶HÓìkö¶UV;Žà8éÀcÍwבÜÚÇ:Ç"Sê e(´“îh𽋆8B4ŽUW#$œ •9£Ìn¬¡È®#Gò|Eâ-fãTS$6ùPÛ¹Ìh«ГŽõ½¡;˹4w‹2•ó¢¾EÀ8ã¶iJ6•ÍFŽjº¶Ã‚ɘ%²2 ss•ºG¼dž3\f¥ku§xºëRÐãù£%¹µÏ™÷cѸ©t™ôM[Å6ú……¬*ÆÑäaå€É uÉ>ÉæŸ'[èëc·xbq‚2ÀÒFð\Hê’£4'c…9ÚqÐÕ{ÍB+9¯%XÈÜú â¼u=¶·©[]G4oyÞâdÛó£'ô©Pm7ØnI4Ž×íšqP>ßmŒqûÁÛñ«&˜nB6cÕçò`ñ?ˆÄZ^íŠ#µQ0 CëÏ9íÍwz}¼VÖVöð!H¡@¨„“Ž:sJk•] I’$ ´Ž¥ªD·Hå2(Œ1ï\ÿ‰u›í&m,ZG ý¦ãÉ1ˆÆAÇo­eKâ­qmµG–^n–ù›6×M»¾QŒçëéDa&®œS±×\ÝÚÀíÒ'–Ò¬C–e^¸ê S´×t޳2 w, :àðHú!Ö¬¡UžÐUFœcõîR#1_˜©Vè;ñ^%­2ÂA«®«]úã8×^»´sbvD0Ko,R*Ë$71‚pÌŽ¤ú Ø?©5©¢Û¾¤VÝõw´ºaÄ/*ßCž`jpyQÆê˜LœÛ<àÔÓO5Ôé ¢s$j|¤@>N„Ïç]6´9“³;ðUóHÖPŒã˜9þuªióè—‘ZÞ?Ú£o‰È#qî½Hýzë<«Éªé/Ñg»¶pŽ[©³úþUwÄÚ"jzLˆª|øK g$0íø×*©(Ï–Fü‘”oÎg¼TUŽ&š9r>e~uÎ)óÝÝDà]L.{—– Ç·¯?NqY–:…Í‘Y-®&f>h Ã}GCøÖÌB gtqˆá¿#åmŠãØÍúWKVÜÁk±~ÕŒ‘*ÚC Á†Nõoé]ŽšínQ´±A»îù È÷$q\‘¨Ë§K0GPãîÙU ÷GsŒVΡâ+Ý^Î-2)í§âIžTsÜ¡sšÆp•ì¶4„•µ:É´+¸ʳ¶Vn’y(¥sÚŽ”Ús„›ìâ0›Ë4#§|p3ùÔ¾ÿ„sS6÷÷öék4AÕcvp8ÿ€ÕÏjâYí-à`è¨$àå]ÝÎ:‚*”¤¥ËЧÊã~¦S¤ 33ÃlSnÌø=Ê©ã=²síT|ÈRVŒÉ ¿.àñ:t<ƒìjÅ­¸eY§•^N>}¯3äd‚~êŽìýZ—¤:CÅMj Œµ¼Vû‘¹Á ää“ëô­6Ð÷9ø­ßTÖ4ûËgÜBžB޹ü3]óø7BqΞ …ÏÊï×ó¬ØCq¬jÄjÂÙdh­—¶:œžõØÃv.`WŒmFÈç¾3úV5ªJöCZQV»8Í~ÇAðå’Iý’’Ë#@]ˆürkˆÆ.¤iíáW È#.U s“]¿ÑdŸIãó¦`@8$`t®6KE–ÐÈv»,‡q,ãò!‡äkz.ñ»êeU{Ú¿ÞbLÛ,$:ÈÕœ×qàBÍ£Ýû«tûâ+‹ž6‰ãˆÀä#@[9ûý1]÷à†‹°4ÌÙüúÔ« )¯x½‡ª0Ôž[»Y&¾]£0°1·zc?ixwH¾Òô˜lo.#œÄ0ŒŠGËØÖÕ¹9#5¨êw6þ%Ñí­î#0\´‰4{A<.AÏjäæ”´:yÔŠ κ½Æ§¦^›9§âxÌ{ã”ö$d`Õ­Ã÷:uÝíä÷qÏ-äŠî=Š¥F8äš½ou-¯žuÛVˆÎDLÍ ôCž¦¯E{g=Ä–ñ\DòÅþ±eúŠ—9ZÃQ‰Ï Wÿ„†]Iµ(<©c0›ùf¤Ï^O5=¿…ííu‰l¦ûd°}’O55S–ìNGÖ¨Éá#!ÕOö„àj_ë—jð:`qéÅUÑ/äÓ|TúMö·ö¥’Ö7ÄÒ.Dåˆ*¿áô®Ô}òGz¦å ”e©Ì IÌSǨÌZ Ch£S…Àù¾¹Õ(¼ñÙi–ÃQ—˰—ÍLÂ>c’yüÈüjOxŠâÃÅšU”Gm"¥Óã 3î3ø[š¦«gö»¥À®².vÜú 9ª+yŠÐwò(èºúLײÉyöµNf#ÊÛµôÀÝCAžïZ²¿›×qX|¬‚XaŽséü«Dk¨!T‘ÒxŒÉ2.Shë’:vüê”0Ò/$Š5iÄ´m{ww)çÝSƒÉ>ô1ÁϓֆÂÄO#†áGçE4ŽNëEHÉìÙ~Ô<ìÏ^µVåÉv'¥Koµ\ep6c sUî6í8Ÿf·6l¨£g$‘ÔÔx99”Ð;ž}éìÁP‚p1Z#6C Ú9$ñPŒ+=*Ã2°ùX;sPÌ»0U¡#X®76H÷¯‘d»Ôo†Õ2Mt-Ø—5î¥ÃçnkÅlm6þWûN ÄöÞºð¯vsb:µ«k‹Kä´¿…axÓ? ç¦pO¥3D±¹ººœÁ‚ð(.¹9#88­oˆÎÞ³còcþÑi7¢öKØÝ–ÚâHØ»s•ü1ü«Ž¶²¿¡ÓODy·‰4™4­vèÀŸèÌ¢láVàþF²àe†t>hF2²7~ÇëšôÏÚµºÛëÆ$ß$éŒï…¾ðÇ·Zóë$Û|¥$ÚA‘öã”ÏŸÞ\~Fº©T掦!ihK¨M »MNÝUMÄl$U貯Þüúþ5­¢ê$xzs¦[ËöËrä‚’)ÏÝ88üp+ HZÊÊc î!7A(Ëúä~U6™,vÈË T¸„ùªY¸uë†Æ70  îj¥vÂO[šº„71Ú[L×FÊ]OrÊ“í*ÇÜO8Î@õ¬ .ÚIo™`XòÀ“œ«îOÿ­]†½qæ‰cç]Åwt¢Gf„WaÏ|Ù÷®2Êúk ˜’†ÁEå—zc‘žÙ¥M·µÑµ®4VÇ HZåÛmÉ vÆQN:1‘ÜV=Åѹ‡Êtu}¡!\px sù •×VÔ¢‹Ëµ¹¸Gl—X~ógŸ˜p{s]V—¢BºÝ‹@›íc7Wg©ÞOȤûf‡%¨ÒrfµÏ—á¯2#•’8мfFïù“W´6-áí?Ä øñXþ)_í+Ù,þæÎÙîf¯´„Ö·<9|7§äË®I|{ÜÙ|VG?ãiÖ6Òæ“Rá²ÄÀí\¦—;O<Д ë!à+l,?"+¬ø“üK,éö‚?JÇÑ.ZÚPÌAŽÒÚDA³£ñ5½7û»™Í{å­fÑV 3Q„·“3ÂÄH,yé]ÃÌ?…W=ßýª­â+O³xGGGR&…N0vš¿ðÙü$¼ ù¬?QYÍÞ•üËŠ÷þFýð»þúK!›¦…Ä@§ÆiÒØ.­áÉ µ–ãGtL >Ì|Çœ÷÷¯I™§®Ò~n2¢°D´6tÛÔóW1IáÍKÈ…äŽ`NÊ‘œù{ÁÊŽü ØðüñËãÍJé-¦.-£1´‘Ï?JìtûËmJÐ]Ú’cf+–Rƒô«Ý‘”)Ég’=j]±*žÎç ×ÖÞ#ÖaÖ,&¸ûc¯ÙåXLŠñ€AÆk?Y7ÏâË1¦ÞK%ò¡£€² Q^‡¨XèФ׳¬1;¬a›8ÜzUШrF¥%VÚØ=ô¹çÞLsx¯F/§Í,iaå9’ÕˆV8Û¸‘Ðý+/V´ºŸT·¹—C»†Þ×Pw˜Á yŽ“» à W«òy¥%Ž9#Šk;Ø#мÓäŸáåÝ®•cqnwGo78ß’ìXgzϾµ‹RðÕÛi¾½†âA ’" *ÙÀôQž}ë°×5ÈôIlVKIfŠòuƒzLÕ¸oR[‹¸Zc[}¤Ë"ᜩöïMM¥{"n×9xL¶¾.šñ´ÉÚ «4ËåðŽ¥‰ÞOÝ<ŽkCC×n5=µ íq*oS'pr¤”÷Î(ÿ„¢Òï͵³²¸¼¹]a1íW mÍÁSÛÖµ4™£»Ó-®#´’Ñ2 ‘6”öÇjRz]¡Æ=™çZ®s}¢^ê2iZ‚ë]‰#@¬v…#gãG\u5Ô_5Æ­á²O•ä¸hËÛʲ€À°!±èk©*­Ôr)>ñe'Vÿ öV9-/Ã÷ºGˆíÖ)M"—ÊV90³Ê{Ž2=9§Ú[ê'ÇZ…ÊÚ4V2B‘ù¯˜©=9÷®¥0ÌJó†è{SÊm=:Ôº[–¡mެ5-*óXŽ=5•¥ŠXäQ‚Ë‚¯’0ãQ6€WCÑt{Ûy.a†Oß²0ÚŸ+ õÏVúWx‹€@¹¨¥´I3ÇÇ­Ù‚¢ºœ¾•i¨ésÞ}±¾Õq$pJƒ/*.ã‚?¼3zg‚-®-|>ñ]ÛK ÑÈç¡æ$Œz×T-Ôc©$a.G—µºµ‡ìÒÖã­Ûä/¡éRîëÖ F `}jMØùHã=k'¹ªØb(ÏrjeÚáÔR)ÝìNs@\7ÁÏ¥8¿ƒÏ§¥4Àü©FÍìG L’\í9íҘėÀ<J\ð}@©3îzS¸¬5œŽ3Ïì óÈã­ ¬ãiéšã ¸*YHˆÈ€òÇÚŠ`rŠrÕ±dº»Î ‚Zåw–l¦ºKý¡rc“Ÿ/§P 8«y,¥·š ¶CÈl~•±Œœ¯zk+21É÷§²ü¡½U£'¹ FIaD|U(œe0|€’Ä2;Ò8Éç±Å4  Š6Ñ€rkÆtæÿ‰¤Žpq©Âzú³×´Ë‘•ÎkÄôÒÉ©2”;ˆ<™ø®Ì6Ò9q£Ð Ž[›‹ ,%“OVû5ÅÐ?*³qŒzr9®bââÿÂw_gtlÊÛÊÀâXÏUo§_cõª‚“‡!2k›˜¿àI š†´ø#|àóÓ«U}.þ]3Ç7RÉÍ­õÄ:oR1üÇçSü:[}Fb¼´êqøÉÔï­$Òïí<‰…Ü„“G*(À%½sžßʪÉÎH›¾DÏM›dмrÆ|·]­žàñ\Æ•Œ6÷:&°!Ÿì2æ#8£r¸ÏåZžÔ_[Эîr í (ÿlpÇñ®ÇúZˆíõ^ ŽA¸TôÏãüë*kÞäf“nÜÈå`Ñ“[Öæ[1äÛyÅ}íŸýj’O j×Fí"U‘­£(Âó×wÎsU›WžÖ1gcò/˜72 ¡ŽO¯é^ŽòÍugk5‚nIäácp’€7gÛŒþUÓ9Ê0Œc#“Ð|75ö}ZÍmpa£Î2NN8öíëJž{8CªÅ#ÂÞ[!ˆ» ó^ŠÒD¨Û¦U¼“€½ùü®OMmââ–ñÇ”$‡¦önw”â²IɾRÜ#\ßÓu³—p—VËo=†RhÔ| G±‡™í´›­jí3qvMÞ˜A÷GåüëQ·ƒSñ„Iá}<ƒgß­CjQoÌi4Ì_ÊZ >5BÎ.À\äãŽ;ÕÍ/DÔuígÖÞ(¢Ä‹k ‡FŽ ö£Çñ´:Mµâ³)†å;sëj©¨ësê:.‡e é êLYÛ´Ó&µÜˆ–’w5|gq.Ç¡ÍêcÆJ“á¶ÂÑ>üŽÄç¾qýfkš3iD6é4’ڛȌBC¹£?6F}:VÇøÿâ”´e=Û>ÿ1¨••-;•gPéµ$¸“MœYÏä\&9 ç{Ëñ®gÃÚæ©«Mfä,ÂÙžíZò¾âª¼cøzë¤pcñYZ~o¦­è¶‘ã{¹VuÆP·qÚ²‹Š™¬£&q” ÏÏë×üšš÷Â:Uö¡åŹi”,$#xzþ4Üéö„͸®”DòÍ"ªÆ¹fè1Œ“OŠò˜’X]dŽEÜŒ¼‚* ìÚk á‰ãß"•boPqÜq‘íU4=-Â+8ßÌ .F9$“ØsÒ°÷lmï\Íñ£ªZêºM½ÄQ%ÜÏowð’;ûVSøŸY‹F¾gòÝ•ò[4ÙT•çàáª×ŠBÏ­èq¼w ^wŠ6ýØÚTç8­Ï ØM§-–Ù'œvHAgÎw1îsÍkxE+£;I·c:KíZ}^/B8å0<òݤX;w`*‚zóÖ¦ðÞ±{~š¥…ó &°”ÇçªàH2pqëÅ^ŸE³¿heËö˜†á¬€c$zûÕ;J³Ó­ŒÈQ]‹9-’íÜ“ÜÔ¹ÂÅ{9_SB&R€íŠGYÞ¤X‰/à»N8¬ºÑQ•9=èPIþtŠãÇZUÉþ´ b®N1øS±†äóÖšlàzÓ‡LädˆÜ È㨩 9Æs×”p¼{SOÝíÞÉ·’Æ!Ö0Þ••]FrA"–Hц‘V(Msr'¥3A”¢Ý ’-õÊ#‘òBäž)¸) œ? Y$1ê̸$‘¸væ‘Àe1É´©'ŒpjQ]Ab7õàS™¹Ûh8ö§,~Zâ™.×ãœUÅmÜ8t¨Ø‘Üõ§!NzqÍFÇkFiÜ›:±ã¨ ô¯…ÖÛS¾ ’±^Fà§l¤Z÷b21޵â6á&ñ ÊmÀ›PDÛìe'úWVíØŽ‡g{ršµqkyffÓ/ÜÜîìaùÀÀ4ž2žÉEÚ£Ymãf™Ó?| ?ñìþ“Æ{ý^×O´ŽFq»„PÇkpz‘Ž˜ëÞ°üGu}-…ëÚ,2’&ÔŒÏ {©n*Ḳe+]#[áúˆt ›’1¾áˆú+¶{ÝCQ‘mì䙤‘¦ÂŽJ’yçë]†³gà¸<0Yd_×ü+Ðå{Y´Û”Vaæy.ÜcÇׯ֮:Jl‰|1FÏ‚ä¼Ñ5ÉtB&€]¯³È÷tÏå]¾©e¥§Og66Ê¥Çó®cÆyÖZ´@ùÖ3)%GðÏëŠéâ•.-àš#”‘wƒìEcQÞÓ5†—âÿfœAó2pùÆU Šè¼'m¬I~’C+C\I+íLäã< _iÂÛľtQ— $ ÙÁþŸv1é*Ú vv÷eóÀ27¤r œWMJ‹‘y˜Æóò%Ô´Ùu®¤Óä·š;ˆÌ3E3¥”Ütü+”Ö4¸ô]Áu"K{<‚IJ °P¿CÏá]¾“¦¶˜.£–·’_5.6g¨Ïqšà<[k{q¯Aes y® hÒ2J¦NÉíÁ5•/‹–ú=¯mM‡zh‡O¸Ôçûóe#cÔ <þgùV-åýÞ£â‰õ+ ¦ˆD|¸Èä„éœ0O5Õký‘¡E¦Ú¯™Úîx'òæ¡›ÁoÉe=ÅœÄb‡*ØîGÿ^…5Ìç.¡Ê좺ËI­[ÜJÃP¸îo0ŒzÇ5Ûøu—–@ÿ2ã=pƹCJ¹Ó/àŠëTy !`áq€9'=k£ð"Ò®­U÷¬7’"·¨â[8h*wS±?È“ÂóA*ñ’¸ëób¹=gA½Òü¦]É—=¬ìYwd¨c‘úù×]ã5fð•÷É÷UH%z ã¥fxÊÂóP³·YšÉ-ƒs TGã,ÀòxéŒóJ“²K¥ÇSVÛ.ë¨Õü)¤ß¨¤¹…™zó’üêÿÉþ;d'$;ÿèF±Õì|¤A"°ÜFÅz`—'©ðõü"P²òÞcgë¸ÔÎ+Ù´»• >tüŽÆkØà†Gl•›hÉãÚ±ôïé7Zb]¹š4.#;¢c‚I1Î+Bevóv 1‰”À×)‘¬Éà˜4ïìÿ.êÎXÊ¡™|÷ßgE­Ks•ô:«kJa¨ÚÉs*5´DÏò01©Ü?•$~ Òô»žòY•íã”gbƒ{`p9êkž6úÌ·zõ̺Lﬖ‘&FÃF Ïû_¥Gq£êÓÛéF ¼¶‚(ÖàJ£f$Wù—#ëO’=ÅÏ.‡%Äa]³£'¹¨|s¢\YnYf* ÄÛCÄãÖÔ¥Ò)Yc,ëÔñÓšàâÑu¡áÈ,ΘþzêŸjÚeLÝ»×ð©„"÷*S—C¯ÓüS¦^¥Û¬ûRÓ™‹¡L\qMÅÖrYß\ {Áö"­,F/Ÿiä6:ãÖAÓõ¯í­núÎÙ"yícKg•”†d㑞àñše•–¿i{¬] 8Þ{¸b<ó©‚Üž)ò@JR5/üA¤ê:-麊ïì*#Þè¤d¸ ¸ ûŒúT÷þ0°Óo'³6÷³MmÉ ŠØCüYö®r-]‡Â·z2[Á$M:›|Ì »qÝÀôã¾Õ¡&›«I®ê—‹eŠâÈA3€w žxé’GáG$;‹š} ëâí.úîÚÞœ›¥Ý sŒà7sTmµ-.Ù¯õ8$ºYÈ‚XÜœ4œO®EPƒCÖ¢³ðݼ–ПìÙ33,ýFãÐÓ­´]JM?P‚÷L‚T¹½iš7›a\¤t`@§Ë³i>‡Si¨Ã¨A °¬ˆ ÊèTäê+@:† õ>õÈÍo«é~ HVáŸQ‰~GHÌ»Žîߌ þ5¿n.䕜¢—@x Žp~µœ ‹Œ™“k¯é66Úò›•O¶˜æˆ—€AÒ®ÃâKƒ~ŸÙF$–9`em¼œ€FH85Ë\èÚÕÖ“} ب’çR!|õ¦Tò}~\~5zãOÕ[WÖ®"±Ü·+o 3(Ë þCæý*Ü`ÈR’5¬üS¦^Ío^jµÄfX™âeWÉž  ø³N[).äIÄQÜ›VýÙ8pqÎ;VLV«ÞI,Ï—§ÆË9©ÚJmãžGüjÎ…®ý†úÆ;8dŠ]GíK/ž²ï ŒcŽèöp¾ãö“±Ý‡ ä ð­:L(3);±€½¿*çfðýÅÍÓÜVö4ÖêË„ÊãåãµhhúEÞ™ip“ßOzÒ°(eê¼b²åŠêiÏ)t7!•2žTyÁíQǸ&cœÔ‹´¨ÆEfÍVÂ1(¬Y°­:7 2>þ´ÉâYce+ê)–ªÉlŒ:RB|‚qŽàðiÃåôÇ5<îÁÏn)ò['ßÄXb ©^àR?\dž¿…06ìqÇ¿Z‘•HêF} ذ2ÁKê)NN f”“»ãŒn œúúÐ"p7u¢šäƒÇ§­É#ŸbêGs•ÝùÔgÒcœmoCO‚êJ̬q=8¦<ªñ°\ýà>••õ7è°€{ÔÝQŠ‘ú/§šÒ4ÒlÎsi´ŽÉWìß 98?cÉ=¾oÿ]sÚM¯™>‘h²nc8“ 6¯Íœt"º=py R"H>D+ϹZÎÑí®!ñMc5¥ûya%pÄùI뻦ãéŠ"ýÙ?6Z¤vÚ¤6÷ZUͼò¤q̆=ìp2FêkŸð%è›G’Âfk MÎr¹ãú×=ãkû›ýXipÈVq¼Ã1çéÇçT<'u6‡®@ó¨KkÅòÃ7CÏ ôÈÇçJ4_²wõ©ïèŽÏÇs]i"ê8ÖGµ%™IÆä# ?‘ü+•·×îÞÖÞêâ/´­¬{ Må0Ü Ÿïc¯5èò0uh˜ Å Ÿâ¼Â}OÃúÅÌP£¢íÛ‚@# ããÔQiÅÅô º;£Òì.µ´渶Ø&ç…Çá\·‡íRñ;\ÎÁÆ—n¶Ûºî“œþY"¨êþ-¾F¤SE4'?.å’rèoèÑÂ=à÷¸˜fo-§”ž¥ÈÎè*ye¿1ó)5äT¸¾Ó®=È?ýjËñIÕ®µMBY>Õý”‰ÎTHŽjç<ëêóMæ»Ã…½z~¸5¥¿sboûËgŠ•&𞪸å`=½9®^ßS]º´ ÜÙÙÆ¾]´d,Š –rHW=úšêuäi<=«!cÿÎqøW“i“ÚÑg)äh¬üô=G_Ò¦„/:²³Gw«jãVð¥­ÌQ4R äVCÈÈ$ðz[?oƒ­ß¼îNÞ5•⛨o<+asm•·71lÛÈVŸÃ×oøD-IP_}ÍJk÷_1ÁûëÐëöŒ(ÀÆ N»CxÈ›;“Ð웯ã=ó^oq¨G i:„zÍßš×ÂØ¡`ÊP»Gsõ¬cMÉÊ¢‰ê@ò0:ç‘Mó1 ¸ÛÆîÕÀAªê:Kx–¾šïì,шfVe9üçéÒh|3©ÞCâr$°óQQŽíàƒ¿%Ž=00)û-uµÓCÐ ƒ1žõ‹®ê×LÚbÃr¥Õâ@ûÛwzqÏ×3,6ðé¶]júŒÍžÑ‰2€à7Tj'½’ïÂÞ7—/¾[Ômÿ7F'×暥mAÔÒÇ¢I¹awE áÕ¼•LCo[Õõ/N²•-àIæ¿Kr…· ŒØ{‘ùWBî I¯5’â9|%¢Ísvïêã2É)$(‘ñ“Ÿ@*KÙ ¹ñ%½•Ì÷p°ó2´‚9¹áXç¶Z§KK T=Ã9õ á\æ¼ëJÔ#þØðà‚üȉ§9c”°ùTu “PéÜé–´ˆï=Ò[‰’å&gI"wáöŸºÊ3ǵ'Eì5UçÚîdñ[@€Zà yÜŽ¬Çåß‚OáZ¼qÓ½p0^y>"Ó ¦«q=¥Å¤²J¦c(b a±ëÏOjè<;}-þ‡ö‰oåÁ`dD(:ž0y ™Ó²¸ãSSKO{¹¡Þ[-»,¬¨†Ü ðÜzúU–[?5æÑ]¼7j­s–Ö JË1ݳÌ#÷³áó-§Šu­=n¦¸†1 Š%—yV`wr %J×cK´Ž¿`ÜqMwœ+Ï/êK¯ºê·‘ý¬ÑÜa8éÓ#«–“ÞAâ ŸQšq©Z3Ï‘µX `TcJ~ÇÌN¶»³ÁãëNÈ ç­pzTÚ¶¥u§ý¬© Ö{BwmÂp:û×CkªÁqw{s3Kl`>èÎp>¼TJ“LÒ5S[á¹Î2sC“Žã棶o17úÔŒ¤àä‚k6­¡¢wÔdmæÇ¸rpiù8'ªãšW_|j ñÆ{P&ÆŽ¹ÉëO#:äS0TŒt)KdŽH°ó\`äy>ÜÈ9Úk‹8^Üñ*„ È8éYž!“v“`œa¯ çæÏôªÞ °¶º‚çZ´žË^$ûL^b¼P{wÏ¥p¥t“:¤ìô9‹‹)õ­jöêÙ[ý"FXwcæE_½ÏnOQX·±Júe¼ÆbÏò™]¾hðNùÖ¥þºÎa½Šr×{1 S±cÚCnàrIŽ˜¨-ìÃ[G 9s3#X æ'ŽßÖ»bÚJç4­Ðô? _G¬è°Üo>r“)ìàcÿ¯Xl%Š ]VîLÅ/”ôÏê?¯¤^Í£øÍ¢”˜íµ0v…R݈Á çÔz×q¨Á§¦Íg*“!CÇ~Çð<×+½:ŠKc¡{ð·SÊ4§ñ½eopìñE‡#øU“Œ{œ~uÖøöú%Š×K3>ùyjŽåLø{¤›oï.×yö ×õþUÈx—P:¦½¨M‡Ê,F:…ãü:ßã«äŒ~ ~l»aÅÞ·uf®“CFqë uþfÒõytûÅÙÚ¬ð360P¬¿^yþu>‘ªÇ{ å@ÿ‹w¥t°kg\–uy¬ÙY]«íŒ€UÆ0x抱oÐ ÒßsÐí¥³¸–êfËÂ게wÆ+“Ñíb³ø£¨Á ,hÖû¯Ý5wÃöV>Sk-Ú›Û÷ ð§—Øg½BYaø®ŒrD¶G§¨ýj犷2[XÙ»¤ßs¥Õ­÷éWè~ëÛ¶îÙ5äÚfë-_D¼’4ØBƒôÇ^ý:×±\:Im"/>bmˆ5ⱘƒi‹v…¢FÜè?9ý+L=ìÑ5­uc®¾’¼§,3$ö´l<);›P®Ÿáì@x>Äú—ïþÑ®2{ûKÇ2¬ï|·Ä¨Œ0`ª2@®¿À?ñGéñ²÷|èÒ¨Ÿ³ù…6¹þGS5¬ñ͇WR¬™êQTφ4@‹Óm¼¤;•6p:ýx$²Co ×D•TRì}‡&±-üi$±Û^O¥É›s(Ž;“ b 8¯P ïX%;^&¼ÑÙ›qi:M”æu··Š{ÈÎ@Lö>µJÓNðĆëL´M=°g·M¹8ç‘íúWâ éï—ÄS\é7Ù‚Ážj‘mÆw×$xö­íþÎ Û[KÍ'ì÷6v"D¹yÈCÛך· %{‹š-í¡ÓI¡éBâ{cÆ­+®3Ò¡ŽÃAû,«‰¶œ³CUÚç;ñéUÄwWvæîßIilãs(V`#*zŽ*–³ept‹HXãž9$¶a·÷)$¨?­gË2œ£Ðé×M°[O±-¬+nFL~X+×<Ž”Åðþ–.RQal |¥ùG ¬mÄSêó³‹TKug`“,¤66ºãƒÜU‹ÿ^Á¬Ýé¶šWŸ$6âto8(`xç?³NÃæƒW±²º] û$,çg”6çץޯÞÚ$‚4Œ‚6ªúV§Œd¹“J”é“Gc¨Ÿ.9ÚEÈ“Á_N4âk×Õ+[ .,¢¹ÒHªÛ³Ñ˜qŒê{Rä˜s@ÜJ±„!†Öö”,avƒÖªOs¢éÖWm#Ûòãb c‚çï £ªë÷–ž!±Óìtä¸k˜ÝÜ´ èƲüG¨E{áÃö%‚X%HF ü¤1 zUIÚâ”â¶-K£ŸøJ4éô»/&ÈZʆâE Ï­Ž éé[ÚE¤Zk$-ÚÊìd˜àù®IÜN8ëšÌ¶×ç·ÔcÒ/,<©$šÕÒPË QÊž ?GÖ’O FÞÁ!ÂÈâÝXž}ðh’›Aš‹¡i?g>Ô(bÀy+€ØëŒuÅI•aov÷qZ“°ÃH¨7Ô÷®j߯wsf3é #Ôc& ³YÀÎ=‡½Y‡Å€éW³ÝYÉÕ¤ßgxUƒoãhSß9. R¦j¿‡´¢n X[Ÿ´s)1ƒ¿œóëÍ5P?k=Žc^„Çënt?„s6wt8˜I¿¼OšÍƒ‚2}©ƒ¹õ­ŒXö$¨ Á'±¨É†:ñNé÷}}*"ÜõÍ1Ê ©#·jñ}&­o £®š'CèP‚>µíÇ vƒÒ¼bÚf‹Ä-!R jˆ[²Ì+¯ ´¬sb4iŒÕ­žÖêIšpÓÚ8ŠUq´ŸF_^1ÿת—sÍ=Õ¬lÙPG–9ÀÉí]g‰]5-ZhIv«„žêT}²:p äzžk†ÞH5«;rû—ÎO-ð@`[‚í]P•ãvsÍZZ‡âÉþɤÙÜ2±]ÄÌ8Éþ•ÁÍ,—+<òÜI$/–@ªIäzó]ÿ‚®‡ º—HÄÄW"°BìDÑFèîøÇ§§óõã:ܹ¥UïXÊ‹d)iòàß*žÜþ\×]¥i·¦Ùö…;dš¿ÈJ¼dr¾ãÚ¨gnŠ¡£[ï…${Ž9ëúû­@ú³FTi›ä–>`0zg¸ö#×¥T¯-ˆVAâghc¶†0¡ÕüØÖ3º=½ž3ÔÝ}Ez‡~5mÚíq¹Óçô`pkÍlíå–[»›¦vBT…\üÜzwé]µ -.äÓ%pÐÝ+Oà‚AŽ3YÖ¹§Bé¿^¦Ï‹îãÒü;tÊ¡Zã÷jÆIÎOó¯9Ñìí®'‹Ì¸•PœP“׿ºoNú†¯m¦Bß$y™è½þ‚¹eŠK;¸.aŽLe!zî^•]j~lš®ó4nHŒ¬‰O(åÔ탌‚ÜäñÓ¥QÔ`Ìí$8û,¤H Ÿç5ÐÅwí’·•0îö'М“øqøôªÏ¥Ëe;­ŒŠK–VAó ý~=G®)XM\ÍÒ/­ì®Pº–G{|ýž–fl` ô +gÃRÉqâý2òYd–iüÐÌç¸^˜ìk1âšME[r ªþ§¶}sÅ]ðøšé Öæ Òl‚ àšs³Mù :4z¼ÑnÙÃý x®‰e&¥ª[ÛÅ,A–7f2‚U=OoÿU{Ã/Ɇ^+Ãô¸í!¿¼Q Îcr™°¦ÑÆ=ÍsáåîÈÞ´Rh×¹‰Ÿ@´Ôn>innpFP‘£…ÚrINO\×Sðå¼ÏÀ@»–EüzÿZåµin#hlÚÒ{k}ÞlLኩG:²k¯øs´ù/lã¦{ˆDhÁKК~Òl=œÉØh:ݤšjêPKl"1Û‡ˆîð2ÞÂmáFÑôro`dÓâh±åŸŸpÁ=x8Åu±>à„íÉç#¥XÀøY§Ïõ êk§]ˆÏÛ.îÒ;vk|CÀ$ï|’ Îö­‹ojV·jûtrNlÓ父þ,äw­÷½·Ž³yñ ˆÎÆq»ò¥:…¤rbK˜‘ð Wp8'¯¿ÝIÚÂP÷9{o ߦ¤YÿhÃ25ÑÏÏŽƒïzV Ð/¬u{–³ÔZ; æûD–æ NãËmlð ö­÷»€]‹e¹‡ÎÚ[ÊÜ7íQÄzQ’ä=ì@۲屴þ4s͇,VÿB»ŸZ²Ôío[ƒE¸263Ü`ñÖ¨Íá«/X´“PMÚŒË)‘`ÁLcŒnäaEti«éòÍ 1ÝÀÒL¡ãA ÜÊz;ŠV°&4[ÈL’3$jeˆêÒ’œÃ–™ ¡_ý©o¯/bšò+R•D-ÕˆÉ$œJNðõ݆’n¡3€è% 1'$g¯&º.­îÕþÏq¥£|í#±¬ë¹®n|Acmâ;h žwY\ò<~9?… rzŒV¦<^½·‡CA¨D²Ø•ÌçÇ?7TsxBòx58濯.Vê9#ˆƒ©ã<Žvm"·==j·[¼»hË«m+¸g>”½¬÷+ÙÄæu [Õ4˜í.u W•nS „…€z’9¡ô UuCPK»]×6ÂO(ü¸èzóÔ×J÷1+•y‘IìHÏ=(k˜ÞOšžn3´°Î>”•IÙÄä-¼)©ZÃ¥K ʽÓQ¡ÃËìN2J¿£èW6×ÚíÔñ›‹æ–<íEQ€¯ÖºRê2x&«È È0W©ûY0öqEˆÔ"ª.qK·÷ʼn#Œb™!9`sÓš~wgžEdka}6ÒÄgZQ‚Gcژ˞ >äPËœ®G^* %„c=Z“œž£Ž)­N@éÓšLhPX…‘ÇaVWŒu!¹=N¸àf„L‡ùNr?JFÈPqÞžuÀô¨ØN8íÒ¬‚«ÆÒqŠ*)+ry¢‹<¨Ls¶ž1‘Îy¬ÒJ¨goJÔï+ar¬ù>AózW:Üé{8,r1‚3ÏZ‚Iõ­ËÎ1H~Q€3íšÕ1²>œàTC¦{€x©¶€C0Ïz@9Î8Ç¥RB"*¤ǧ¼?R2®±©‹xˆ¾Èe?2¶÷ÀõÏé^ã2žXž¯×#K}sX„Ò5È1…êNìœzk¯ £hçÄìˆæÔ.a†{V¼ºpùíægùíƒsøVχt‰›S¶ÔõIâŠ8qäÃ4ÛŸÛ©à Â6Wþ$w(yÃg?ŽG5 i³Í2«ÙÜÂ=~ÈÀøs]m]Yhs-ÏP×lƱ ÝZE4rJWrò>òœãúWZÚX¹ wtú|ÊÄH®­„#§¯=Oj­—4m½fà¨ÃòùÒ\ZO#çì¸Þé6GãžjiÕZ㜜ìk&•aq§Ã9kkx• ™e“2M‡<ã’8Ûo·lñº6 ‘Ž)ó6»“Y1ÛKhŒänyÛ `Åy«’Ê<…•1É[rœ‘ß5Vó$ÒÕR뾮 ûyü¹®f¶èø`£åëÛÖ«4K£.âSÐHX¿ßÆ7~jKh´ï Hö‘M#1+°ÇÑçPO&AÁ×k y`œŽüùRK§A¾å©®¤ŽíoâNÒ öÈ2ò@=p­MF k=ú'߉Öî4þ K`}O^•Î4ÆàìÝEÐìÈÆxûÇÀÓœ"HLÓ¿xXÎ2ëëøfŽP¹iŶ¡Í¢¿ˆüïÚdü¸ÆŸµVŽMR%ÝnZH·7|­ÈêF}?™¨/.!ž1å\€Ä€K–ÝõéýjÖŸie4Úöki˜ŽåÈH8?–zÕY$Nå«=G]ŠàI«H|Î3´c=út­?Ûêω Ô&w{;V.]ºnÆ6Œþ‹ªŒSSCz0[í­ù¯Ó©­{V¾·Í½Æ§©Z8CkËÇ CÅD­f–åGus×™CB£#¥x犴i4ÏÜÈòKû–FŒpÄžTóZnª‘¿“âmD·Ü -« Äÿ*lòøTˆØËÈ~<¹íã^:ä îÏáXÒƒ¦÷6©>u±$r"Ù·Û¦™CcbÅWåluöÍz7€·'ƒ,ðÜbCÏûƼÝôë½xEÝÄoóŸÝm`à ݘG&½GÀà¦õ clçýãOÒ‚Ükù­¡ÒîZéÕ`‘!sÆÆ+Ït«Khü ÜQJÍ,ë¢Ñ³‡$Œvã;W§Oå[ZK3tw° ’p3ÀïP躖µ¦¥íšH°ÈXë´ðpkžj7±¼¡wfÏ>Õmͪ¼€ØY6H¹#ó¯Qò6Œô⤘'tɪöâö'%¤ê¦ÇÀ6â.¥†ÝKF3¸íàþX?•twicÜA‚\F$PÃ3SÝXÚÞÀ"¹…e‹«#y©Ö8Ñ–£fÜ8³”“Ô¥,Ôb³¼Ôu½>{«4רEÍÌ%@<œr8àæµ–Þ9¶µ’ÙZ±òÔ% ‡@= ÆM[] [—íÖ·Ú~—zn‚ßLß2¡è6íÉÇnEuv|zuµ¬n̶ñÃ1ä€1ZN¢KB#M·©ç©{o'Š´‹Ä±k5[›ˆæ&6i ½±ß<qOµ²V´ñM¨Óö›ËpÑo÷‘‡Ê±Ž}+¼³¾³ÔÚcg2ËäHb“gf«H½ˆÿõÔûkiaû+«Üó>h%×|3(³ºm¬Þ]í™pÁ@ÆqÓ¯=+3ìv_ð‹4±XÈ.¿µw![vßåù™àã8Û^·áÎAÆ*sà ¼=¿ý‹îyâF–¾#ÖàÑmŒM5| ‘S0ÉãŒg‘T m>â_ ù6m¡ÚG>ø 1! l’>nFkÓ\Är21ÀëXšÞ—©ßêúUŧلR™œHä$mÀÄÓTÞ¡*mlG¢\$÷ÚÌS­ÒÉàˆç¤q°á8&¸‹½:+Ëß-µ¼¨­ê­ªÇ;[åùƒcåÇ$ó^Ÿc¥ÛX¬ÂÌebîîåËÜžÃô¬ßè·ÚmÞ¥5ÜÖò­ìþ­€1Ïl Q¨•ڦݑÌE•ïŽÚÑ ÏŒgal9XŸÄã²åÉá»Èï`sâCrÌ·÷¥÷|¥O]¸ÇN1^ªÐæPûÝíOØ™ÎÞx¥í‡ì®rÖ«â%½ó&¸³šØ)>J¡ NÞ~¸æ­éWZÅÚÜ&©a²ªƒŽ@á½En˜£qH”`ñȬÝDú*vêF¢=ˆ ^ŸZ°¸J¬è®ñÀ=ÅI½²ôàf³5Ø”ËÁ¦2ƒòƒÍ'ÝÇ4×D‘rG#½1 Sœvë@PZ—i“ïH3ÇÖ€ ÛN;vì½{Ó ÎÁÇQR©Æ(ªØ_ ’G23´ôâ¦û¹úsÍDÌÁõâ©Qeär[ÞŠŠS†ÀŠ*®M’¥×yÀ_º=}k:hò­“žõ }®_x‡O©¬Ù÷’T1Ír­Î§±]d Á€*:r1KÆîi¶Ž½*5 61‚ jŒXðã¦Z\à`œw¦‡Ü@#½8¾1Ÿîàb­Dà€G©k˜ŸÁ:4÷S]Í®ò¹f_5±œäô®¡°Ù œf Ž£ŽsW 8ìÈ”SÜæ¤ðF°âÅ׎¾kÿCÿF„¸Äc8?¿nZê7ù¶ã$Œçšh…Ž2s–É>µj¤»à»Éð~ˆNï²È1Äïùõ¨ÓÁ:BH7l:‘ç+§–Üçh'~4,.žSö²î'Øæ_Áºv2“j)¿¦Ûñ(ð^Ÿƒþ›©©=qs×ô®QˆA‘ßñ«"̇'Ök.áÉÇ/màm6 榫’HK Ÿ ,ž°`غԆÕãý-«¡û+d•}„ç¥>XÛ ÁYnØr.ˆätá,h·ÚŠ.1°OÀý*Sà»ISÕ@GÚr?•t’æ V礅6““ÔrqÞ‡Z}ƩDZÇ »íEˆà0q@ðE›D?Óµ üœ™_ʺù$íã·ʼnÌkëŽsGµŸpöqìqÐø U›þ&—oA±O_¨«Px×râþ˜n9Š#üֺŕœœòا¤$wžzSu§ÜJšìr?ð¯âTfƒï-øö‹ŸÒ—þ°“1Ö±œƒøWr¶ä¯lúæ!·ó3ŽÔ{iwf»ÏÆuûUUÈÚµEþX®¯@³:>‡m§—ó|•#ÌÆÜäúV¡ƒçBÇÜR=» ?Nx¥RRVÔ]ÑäŽÖW ‰‰çÚ¸Ÿjz®‡áãe´ºl²yl 0•w¹Îq×Ú»›‹U¸¶š'b©*b:€F+Oð}½‚ZÃö««‹;wób‚V]ªýAàyç(„£ËfŒ¯t2ûÄš§‰-m›ìfÚ{#ÈFÝ(R8sŽŸJ|>!Õ¥Öõ8JY-†žàÊß6ò… ™õ¢OÂ×bêFî"·&éQv¾÷Qœ}jö™áqg¨êWOy$éþ¶)p}9ð8¦Ý; Ó½ŒÏx—ÄZ–¤²]é4«„2E.0c†‹<~uÕE¨Åq†)"e‰¶I´ð§ÐúW-mà½JÊ1oeâk¸,ÔyJÅW=[pøfÖ×F¸Ó£’`—!ŒÓýã³ub}iO‘»¡ÅOcDɾ@  õŸ®jí¤è÷7Ž ²&#QüNN~dU3HM6 8¥–Hâ]¡äl±O[ðôZÃ@.®îbH[z,N,9‚H©\—×b½û¯‚VëI×/téà’Ýî Žà,Œ–+œ‚{œÖ׆µ-júÿRžæê -b¼’ÝbX°ß. ž•tø~?íè5W»¸kˆ¢òÕK(B§¨ÀóÏÖ¦Òt m>úòâÚyÿ#;BdÌaÉÉ zÕJQwdÆ2VE#ªjúÆ£“womŸ „¬Ñoó_l÷QÎ8ª7:þ­>(”O>œQ¡ÝF ä¯_~µ©qá_XmNÖúîÊYÈ7 o&Õ—£±¦Þx.ÃPžòYf¼í€yÑÅ9Tb3·×´sSY”.5-rMvÊÆÒkHÅÆç±xÉÚüdã>ü ¡Šu¿ìÝ7S”Zý•î…¬ñªÌÛŠ–·N•Ò À—ö÷‰{z%‚³©2.6~]{þM¼mý—š—÷« Sý¡u$>sýÞ™çñ¦¥NÂqÍmwU&w‚Í | Ž¬x†McG«ëÖšö™i{=¤°_ÄîvBTÆUsÉÈé] ¦Oax<è¤@¯ž ÷ã¿zãE¾›ã N]Fkƒag˜1*Ç¥*j-49s]2H|Y«®‡ ä‹k$­©FÊ ïÚÁúÕÝ_ÄZ•†«n;U·k´·òÚLÉ(oâtÓdðLR#Fšìq Ÿ´¤@©T|îàëëIuàáqy5ÊêÄÒ\¥Ðí‘}ÈÎ=ºS½+‡-K®½ªÏâûÛ(ÒÕl-?0»@`In}ºVÕž¥k{¿ìwN#1G ƒïYÃlšìÚŠ^7•uK«f‰YeÚ¸ö­ OÓ7ýŠÚ;ràØ gœÿZ‰{>…ÅO©¤²†äÍ+t°}OZ@6(QÐqJn˜¬M€„…Áõ¨Û È$g®M<·8íMfÇ@y a¹†Ü mÙ=éˆøãµ?¨Ôw¦!1ÎsŒõ✠By>´1ãÎ:Òªîl±>Ô ˆpIÇ'ëD¤Ÿ¥8¯¦GšŒ’:ñÍ4IJVýáä­ ÑÛ61ž(ª±76ãÿÇ©‹úÖeÁPÌJŽñ­HQZðuÝå7ó•vA•—ví\«s§¡T²:’:ÓN7ñØâ¤lŒwâ¢9 œ¿k69FÐ~i͆õàsQ«Ásž 9_q,9튲 z½ëéš|÷1ÛIpbÙSÿÖ®jùºUµìºlê$˜BHû‡$Œ‚zŽ+¦ÖìßSÑîìâuY&B› 8ïí\€ðÖ¯ÿ´Zt«iæZ̲CµÉÞwqï[SPq×¹ŒÜ¯¡·oâ;v½Ôí§íþņ’GÆ6úÒXøžÊòâž ‹´dÛ<É…˜ØÿJÄ“CÔ¯nµv¼[x£¿…19%GÏÖ¤[ NîãKÃzxߺ93ç0 qøÕò@žiš¶ž(°Ôu/±À_~YrÈ@ ½¿,þU§q{ ´—7R,QGÉ-ØW=áh/->Þ·¶’Âe§F.¤aNZ±â{ µ}%í`#Í+¢·ˆçÒq5ºrµËVÞ#Ó¦miUãˆÍåÉVeõõZßÇ:,ÓE¸Ì‰*’$hÎÜŒü¹õãµTšýKP·ÔZÁí…­«ª£ºî‘ØcîûœVbhÚÂhš%¡³&[;¿6\J¸ >½yý*”!Ô\ò:»OX]ØÝÞ+L‹iŸ9"ÇNh²ñ>›ªN-à’@Íš›ã*{àž½km7W߯0ÓË è‚CûÔÏnOqƒÏT*FSÜ •ÉëEýáûˆ/æ¼€j‹þîIeËdq×ÇáRÚ IüE¤ÞÉ£]õƒÂÙ(Nî;íUaÓux|5£Äºd¾}•ÿŸ,;Ô ±Èçîãýy“)6µGX¾"Ò§³¼¸ŠçrYǘØ:u#5-®½¥É}oiäMqŸ˜È¸ÎsŒW=s¢Þê’k·ÂÙ­d½²ÐÀì»Ü€~fÁ u­W°·ÖN±£\Ë£Î6+ÚNçUk¯Yê’Ë«¿˜ˆYX¡ ê SÐŒñXþ,“˼ðýÁ¹‘ߨs¿h+‚N*‡Ãz~£i{xZÖKKŒ¶•ÕÊHN[f ÂT¾$Šâ]WAHlî$Š µšY7*.äþ4ÒJzmÇSq5Ý6÷M¸»¶½É„•’Bp\ô¨ôߨj24·•P1)Važ d{×%{£j:…¯‰"†ÒhÌ·ÑÏ”mª€ú§ô«Wv·ºÖ³muň¶·–6’eÚY@ ì9éB§àç#¢$Òn/RÖ+´yØ£±ÛÔК±w§XAöëÓo îP%uÉéÍs>k±me§Þh³C5šmiË\ nSœ’ÞýYñÈ_øDnˆŠ4N;ï^•. ™!ûGÊÙ±¹¦\Á4ñ^ÂñC‘++·sQCâ"âÞy¢¾‰¢„+HùáC Žk{¥ÕµMZ=:X¡–ÃÈ”æ\gè9ªñE{gáÍ(´gyàeYP Ìd)öää÷4ý”CÚLëaÕì.^‚þÝÚ@Y\eÇ®*g™•ÙóÂÅp^Ónâ"ÞãL¸Kø¥šHî¤\ÁìüʉȮ£J‡XŠ;¤Õn ¸%‡–ѦÞ=Å)AEèÆ§)t:ÊÊOSÚ‡}½X(ÍAÿ,g§¥?`g!‰ä Á›­‡–ʇ>ã½1‰Ð☑°§+ϧ¯$ƒÍœœö«*ËÁ'µVT"CÒ¤Œg${Š, ”H9ÆE;cÎAô¨ÑðÛÙ§«åö޽j‘  žàb¡‰dó$óv•Ý”ÀíïSHÇ·LS\€ø¦Iz­çð;QS\£´Äš+Dô!£Q ‹ØJŒ‚®éY—¬Mä€ôíZ‘0Ñ?¼3éÅd_0ûCsô®C©lDòmÉ'ŒãrA$gvF8ü*D`ʤsý)q‰rp{óVˆl¯Æ9Æ@朌OÝ ®zæ†Â±À<Š`ÂŒµY lבAÓJ ÇfséšåtßêSßXÏ=´#NÔâ….{“ÓšÒñtö‰á«¡wýÊB.HËöéïÏá\}ºé“Cáf¼™–ßË–9šÊ€ã¡ã“Öº)Â.7g=I´ìza1Èq‘ɵ[) Éð¯8º½¶þßµ’Í"2M8ÀU*«Ÿ»Žæ¯Â$›ÄúÕÛ^\7öpY¢$ù]¶“ƒíÛ{ºÚß¡ØÉÆÙ9àŠgž›Ô6Ms’j7ºmüšä2M:-°Ý–ÈÎÜn mÇ`:Uÿ¡_^ͺ42”lA.’‰JwM›ùP¹Çzz¯ë“Þ¸í Í6[¥Šî[¤}<Ým‘(þÄcƒŸÒkqq§¦{m¨Í;^È©—¥[ê h¦ÏÌ󙊆àõïøU:zXJzÜîJmbsëÇ¥ r+Ó#®*çûTëZ —öËyÒC –H@*ÅAç‚~µœÚ¶»ºƒj†Ag|mÌB0<ì62ÇôÅB ÚÜ·ZÝßTÓ®.ã…m®¾Î#l¿Ä+J5 <ãZ£%üI5´/"¤·9§© gZ”'T—OóÇÚc@å§·­gÊËæL×*7ã‚iKª¨ÀÉ8é\¦¿}}štQÝI´ò•¸ž!ó(ÇzgÖ²Zó\ƒÂì÷ó‚’mµ2D¡Š1ã¸?¥iM¤îC©ÐôA4 õž3Rp«@+‡Ö//´Ý4[¾¾VàÅ%Ë‹2¶9P00 äÓnµ-Rõ¼0°êešñ ’€‚BÈÏ#ž”½“}EíR:èµ—S’Í-çÂ&ó.ÏöÚ­^VãÂ:W u[û}WT·7vÁ µâyWb+±#æ#éúÕK-WR–ÂÚƒ\}–’9„{pÌ¥ˆöô¥ì›µHîRÄdu£hR;W›Hú´ ¶Ô?µfine° ¹Âã?—åZ'QÔÓPñ'PrZ b;GîØ©<~TÝÑ‚­ÝÐRÌ=2H30b€È™*ÅFF} y¥®¡â [C-«ƒý§!XÄXPw uo­t~ Ô.î#ÔlïnÌ–w’B²·Vç52¢â¯qƲnÖ7õN1aÞ¯$÷ #Š$3·\ öÀæ²¼/cuÖ§{rdF»ŸtÍBqCWG_ßÿ χÈàE9 ؽ~¿áSé·š†¼%½‡Q6ÑÅvѬ °*ƒ»<äàô#ùmPæN^…OÄGO[wþ͹"Kﲓ8Ü=Aí[6÷m-ÍÌMk"$avÊØÛ&Fxút® úîêïJˆÝÝÌ:úÆ””>àUÛ½z÷Kÿ„‰ÄåãµxÈ1p3Ó¨Ï>•NÑ*vgoË3ºì*Tã$h?,‚MÃÁâ¸ëë—Ð4‹B×V–çÏòâV ‘³6<Î: ÇN+;ÄŸÚÚw†/¼ýXI“Eå´m–E' “އ¨¤©]èÊutØôV#·¥(PO9äŠÃÒÖXì‚ɨIwüK#¨§Jæ.µ›¯øI-$¶Õ¦™^ÿìÏÆDJœåIîÃ×éQM¶®Sª’Øí5Mf×IHVe•䔑P¡wlu p*µ»{Ý%õ {¡±\²ÿ ¡ÏÍY^OS»¿ŸQû<¶/n°6Ò|g9ç-Œç=«:Æ[è4oj1겫%ÅÀÙ±>ðà7LƒÀ­%ó#Ú³¿[£=œr¼F’0Í}å$t>õC\Ó#Öô±d×Ã`Ìcç sïŠçRiõ=nÇL¸¾¸‚$ÓVà´RliÜàr}ºÕ+}SQ’ÂÂ&¿™HÕͪNÌÑ òxçÿ­Diµ³Q=;¸ó*!vEåÈŸ~8§îW8#Þ¸Q©^iÞ%ˆ]Mv¶-’÷s)p3“ÜsøV¾œ/´Ô¸½Ôuhæ³dRœçoœà aPé5­ËUWc£Ç$míJà äcµfZêð^i+©nh Ø_.¸;GÒ¥†ú BÒ›K$R8‡ø—_:4csŒvô5 ;y8äzuªÈû‰PO0:Õ€ 0=ª øŒàâ€{úb•T«}쌞)zsÏJV‘äÝÉÝǰ£ssxôô§ž”Æq—©Î>”Àtj:ç9ûP¿ë7qÓšfâ‰Ðúc®Jã4N¤ÊÌ:cœÓÉÌ| …~éSçdÕ"YFPZBqEm•F@âŠÑ".[œäd¯æ fê1ç“°ëZS’·ö˜<4½}x5WRtÒ’xqõ:–Æ\\0Å<âF8À¨3†íÁ©GLŒU¢ÖB¤ñü=j&*œõ5bC¼ƒÐqQº›Žõh‚µÌ÷°471$ÈAAŽj·ö–Ö±Ú½»C lSëW]sŒc<ŠŒ9VǦ*“ka4Œ™ü-¤\Le{8„¾aºäGôö¨ìt-/Myõ#N¸c$„‚ûžü~u»¼·ÞëÛ“[ÃbWçiûѾng¨œ¬ŠN›k—±X%«J‰æ/•±³ŽAR évwj··Û!Ý·æ;W>ƒµlÅ+"³¾0M=TàñëøÐäï ãÛSš—š<“\.@× XLø<~"¥¿ð~›¨YZ[K+à!X6[Á&ºîw¨’Ö+ËsoqÉ ©Œ2š©-5'ÙÇ] á; õ8/mî§E´Qk Œ vÎ2*&ð-±ÓËí÷‚/?ÏÎW–Æ9⺛[H,m’RÔUèN6¶G©§í%}ÃÙDZÊé¶Óuïžêæê@ A)&xÉõ>õr-¿á&›Q™ã8ËQyã%sÆiϧA5Ì7 ¬d·ÉB” õàƬï`dôü*e6Ýî5kXá¼Pöðë:dWòOkc´‚êÛù)Úµ¿ˆÎ§dÓÝê<~YŠ[‡mÁùÈ‚EváUÎn\‚)ð"Ć8âXÓ² ÇãUí}Ûu²¼®aj²¾ŠÝ<û˜š(Zt“–B:7­C?‚a¸°ÓmþáZÁŽÙ—ˆ=G·lWH`C4r1}é’¤9ÁúŽŸ¥H‡t5Òk©^ΡÎIà¨n.u)§Ô.Y¯PÆFF ýqŠ‚²µémjíÒêŽA¹˜cæ'ðÆ=ë¬]‚Bv(wåŽ:ÔË‚¼G¶ŸpöPìrçÂ6«á_ìI.î w‰8Ü0r튯‚,cK¯*æî1uÄØp£’py>¦ºò~ï=é¡C ¹ÈÇÒ—µŸqû8v9ÛéðK`Ææñ…úÓ}Óœ“Àü>•¡¤ønÓE’y­^rg;¤2H[Ÿ_þ½kÀär éRP1Ž:t¤êM­Æ¡Ð˸ðõŽ¡ôë#\B¸üÖG°  iƒTkõŽHæw'—+*± QÁ5\xÆ#ªÚÙ¶u µÄ W ›œz)ç9®˜·ãŒði·8îĹ%ÐçO„4w·XLs™ð.™?½×­Z_i‘½Óù7Cïva ÷Ö§cŽõOTÕ"Òl ËÅ$Ü…Ž(ÆYØôÖ—<Þ—)Æ VŠ–¾Ñm,î-¡²ŒAr1*NáØdš„x;HM"m5`ao> |ä¶GNO¥\ÒuxuÍ=om„‘ å9ÊpA­µó[°Q¦õHϰҭtÛ´¶-åGÇ$“øšÍ_èßi2ˆÝ[Ï€²°Çp+iP‡%OÊ{{Õœ)\cø¤ªK{Â=Œ‡ðÖ—&§ý¤ö‘¡œŽã¾:ïQÍá]i®¬cÝps)Éùûž‡Ö¶Ö0œúʹýsÄRizµŒ:t·MtËa Q¸‡?‡z¨¹ÉèÉjWh»'‡t¹­âŠ[H¤.ØÃuAèZtº›,0,–P2Ûñ •á>Ÿ•sËã{¥±šâ]ÔÙMåß*•ˆz¯v<ŠÕ¹×î]“MŠÄIþ„n¢s.7vÇN9«q¨‰S‡bÚhZRMréekœ‰¸ûù뚢ž ðúK¸X‚ ä#HÅÿtœUÝ[‡YÒ-ïÚ!KŸ‘Ÿ=:Ö›à áô¨rœ]®\c lŠ7vB[ máe‰™6«í ÓƒÇáQhú%®“b–ÑûX¹vêIëZMÁÿgn-·©æv±\‘½ÅEÈÁì)ÙIÅ08 œâ‘X36TäpsRU‰NÒ1ž½…!\/¾)ª­¸ñ‘éI’;sÐ lçœSprïZRzg¶ 4 Gåšhä`S*Ùê;”kˆCvqÚŸü*Aã'"€À!'UMˆ¿1Îy4òr„zõ¨Áà19êdù†p9éMÈ%PƒÉÅùAÜ2qÇ¥¥ÈÔ‘ãÿL´ÿË~™ö5§¬¯´ç¦W¸æRÚ­ˆÇGcÿŽÒêÍ—lc=È®>§OC ×kÖ‘NŽr9© üÄŽMFÜôê+Dg"^Ý2i>÷¯Zj?ŸŒá°ÍZ$Œ`0çi9íQÈŠrA9ùYU¹ü§¨ß{A${ÓÌànŽÔàà€µ!Œª[’;šB¬ØSã+«Œ  …œ6€2O­!,ž8§õ9ã­;‰¡™gV—åfûÙ« €czSüø##ŸÊž:CŒ`uëEÂÖ·åaŽsŽ9¢4`Ù-ÀΔW8-ŒzR«€»@ ‘ýÒp)ÁC:œrOzn@'œŒJdÚAês@ x'ÓHT6iÙ$gŽé@à `ç­!‹³û¸Î ?Ë%Iï)ªJ–ãøx?L¬ã?°Ï/¦}Í!  uæžU±×9š#'<çžæ– ¬"Ç–-ž1øÔE‘œÄTˆp@#­<‹ÔãÞÆm¨ ÆrqNh}zãŠSò‚wN:Ž‚ÄUõíQ̬·’£ÌÁÚLÔ €A9Ç4¬!8#ÇcÈ΋âù5 +¹¬žY­®w+Mq»?P[…ö<×­F€ŽN8éÚ› kk’UߘäãÍ.âp;{zUÔ«Ïk¢!K”yBäƒÍaø’×S¸ÓÄ,‘G;6 ²£ƒÏøÖÉl‘“Ž™¤ÆÇ5 Vw-Å5cÃ:m曥yï™æeò¨Àã8äç'ñ­°''9äñŠÎƒN’ ^êí®ä‘&U 9+p=ø­W S”®î•‡ÐÀRª—#M4çŒc­È%@ÏÖ «0ÇZâÉÞÑ„Í38Q’H#““Ç¥v‡Æ0)’.å'ñ­!>Vg8s#ÍæÐüM-¯ˆ`ŽÂMFpÃ3.qžp~€u­ ­+Ä{¦ÞÛ-¼Sýƒì×_0;yÏõÛ29Ï\š\HÀñš¿nûìWs‡Òü-ÿ†lìu¨þÍ=«0…á3$žÎk²µ´K[m¢,ÑÅEf9$:Ô£Œò(‰#ŠjT`Ú¢SrܨAG` …ÚyÇçJ“Ó=ù õÚz |ÔŽÔlhr´áò61ì2)Jüß×½ ˜àg£­+ ázcœg¥&vN?*D.H?Z{l+gÖ˜†ãc“íKÆIÉJEAç zö¡—«b€sMnØ#>”!r0©£ï`‘ϵ5@|ã·A@É\ã>”íØ°  œ@Áƒïœ{RwÁôê)ã$óIî1L9è 'psC-éMÉWÉÆ}ûЀy ÚÏJkÄvô£i'‘ÜQt„/ñu8õ¤à–„ÓWnN8Ç¥N:Nõç)ü*P‡$1Á4 ã—€2=zSÕ±éÐSwÎxð2zžƒ¥=šL®ÞM?oÝ¢ƒÏ­àm úô©ËM¼æ‘EiõSߥ ¿/¤ãqàðzæ˜Á¶  Í*Ú;due2H^x=ꪱ>½ ¤ƒvŒÒlv.d†Á©êãÇJˆH§åÏ8é@vW .NAëJáb}»F1ÇZg=û`šª‹sïS€ÙëÈ"€Ü^; CØP0§ñt¥ãò¤Æ:1ŒsÜõ§(;>bqž)ª7;S³ÇÏz@6EwvÅe ŒHöeÏ8ý)Y8#Š Ð„€H$fÎìÕ"¡OO¥&×J,FqƒéFO±Ïz“q#NzC” ¨àÓ~Qžœ÷40玽i  õô23ÜPÜPHÎ9Í÷¦€ À9 äÐztõÍZ2sHb g¯çNé׊@ç¦iŽZ˜®1ß8Î:Òù‰"Ž:ŠríÓ'­4(¿Ò€òä‘ÉÅ(JLd’9ã¥#µ0ñ€=:RqÚšÃsŒÖœ»‰ úÓâ0éžõÈ|ÈÇJ—8ÀϯZb°9éšh*=éûN ¤þš_L· ŒÆIÇ=‰¦¹#bÏ+ƒøÔr°‰søf© •eœ«óŽ”VmÜŦÈÈOz+Ks¨õÄ‘Õ} ÎêdmެAêi#9Ž¼Ô 8óO=éñ>yêy­R!–•D£!€éU¥iÆîÕ:Mò)%*üòh™‰ îÁã§6C(ÁÆ{Sºü¾†Œ¶u÷ªõQœžÔÕµˆ3]¬ã–­J¬û¹4¨?v8à:, ‘…eÊžA=êE*?-8a¹ÿj‘Ô†ãîã=hÅpp)NCÞ•G˃Î1HÃk’ïœSªß/'¶*tÀb¾õT ’3Ø`Ô±òÀŸZV(™0Ps€ 8<Šr‡ 9½é±Ó“Í; _ˆèx©°ÓðI Ï´XîËp(,±·?…m?(üE1Û*3Æ(c¸œñűÁ'éM$2¶{œS·âÁ¥5ŸnI<éM™ËÚ«ü"‚ÊÇéÚ”‚<z¢GAé×½ Ü@ð 2qõ§„Æ03Å-€c#ô£p ãŸjRê§éžÔÖ9^ž´ rçÁ>”îFy¦€?½ÅÄ;šbÏSŽ”axàsÖšNòM$ŒFåã¥8œg _za•ŽöW¹RK¹Æ=é'Óã™Ne™sýÖ~”Æ[É òqU¦·IXœóŽjÉà…žFGZ.1®ôÙLÛ£UpFIàsøÑ[8Ý¢«“ÊŠó @ÀEU¹&—hŠ+™t6ècÈ{š#¶(¢µ‰“ÜVb”Ȥ&b§¦(¢¬Ï©&NHÏCBsIæŠ*ÄÉ#cïŸåR6ôô¢ŠÅo”`zœƒ‘ô4Q@!ÍÂãéA'zƒš( ]Fã+ŸP)ñœøRe¢H”eŽ?†¥v úQEÆÆäGÖ• d9õ¢Š@‰ÿ‡ñÅ"¤ÐŒÑE"‘3˜aQàc‰¢ŠCT1Sm ÒŠ)!1ˆRsÒœe G ðh¢„1ÌrßARƒÀ=zÑE :È ®ëúTTÌ R&q@ç#ÒŠ)ôpÀgŒô¥*1øbŠ) UA‘õ¥¯w¢Š†Ê£¥Dqäž1EÓƒ‘sž)#'“E ˆÙ¤*Npب •òÌ@=(¢š&hÈëN^ryúQE4 '8÷¨Ðä}qE!2\O­+ \ž(¢˜†Ô31yâŠ(ê2-9ËA!<üÿÐU·*€:sEØÈžVŽ0jU9“${QEw (¢Ò?ÿÙleptonica-1.70/prog/histotest.c0000640000175000017500000000662412242266321014652 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * histotest.c * * Makes histograms of grayscale and color pixels * from a pix. For RGB color, this uses * rgb --> octcube indexing. * * histotest filein sigbits * * where the number of octcubes is 8^(sigbits) * * For gray, sigbits is ignored. */ #include "allheaders.h" int main(int argc, char **argv) { char *filein; l_int32 d, sigbits; GPLOT *gplot; NUMA *na; PIX *pixs; static char mainName[] = "histotest"; if (argc != 3) return ERROR_INT(" Syntax: histotest filein sigbits", mainName, 1); filein = argv[1]; sigbits = atoi(argv[2]); if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("depth not 8 or 32 bpp", mainName, 1); if (d == 32) { startTimer(); if ((na = pixOctcubeHistogram(pixs, sigbits, NULL)) == NULL) return ERROR_INT("na not made", mainName, 1); fprintf(stderr, "histo time = %7.3f sec\n", stopTimer()); gplot = gplotCreate("/tmp/junkrootc", GPLOT_X11, "color histogram with octcube indexing", "octcube index", "number of pixels in cube"); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, "input pix"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } else { if ((na = pixGetGrayHistogram(pixs, 1)) == NULL) return ERROR_INT("na not made", mainName, 1); numaWrite("/tmp/junkna", na); gplot = gplotCreate("/tmp/junkrootg", GPLOT_X11, "grayscale histogram", "gray value", "number of pixels"); gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, "input pix"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } pixDestroy(&pixs); numaDestroy(&na); return 0; } leptonica-1.70/prog/fpix2_reg.c0000644000175000017500000001000612240303113014467 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fpix2_reg.c * * Regression test for FPix: * - rotation by multiples of 90 degrees * - adding borders of various types */ #include "allheaders.h" int main(int argc, char **argv) { FPIX *fpix1, *fpix2, *fpix3, *fpix4; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; /* Test orthogonal rotations */ pix1 = pixRead("marge.jpg"); pix2 = pixConvertTo8(pix1, 0); fpix1 = pixConvertToFPix(pix2, 1); fpix2 = fpixRotateOrth(fpix1, 1); pix3 = fpixConvertToPix(fpix2, 8, L_CLIP_TO_ZERO, 0); pix4 = pixRotateOrth(pix2, 1); regTestComparePix(rp, pix3, pix4); /* 0 */ pixDisplayWithTitle(pix3, 100, 100, NULL, rp->display); fpix3 = fpixRotateOrth(fpix1, 2); pix5 = fpixConvertToPix(fpix3, 8, L_CLIP_TO_ZERO, 0); pix6 = pixRotateOrth(pix2, 2); regTestComparePix(rp, pix5, pix6); /* 1 */ pixDisplayWithTitle(pix5, 560, 100, NULL, rp->display); fpix4 = fpixRotateOrth(fpix1, 3); pix7 = fpixConvertToPix(fpix4, 8, L_CLIP_TO_ZERO, 0); pix8 = pixRotateOrth(pix2, 3); regTestComparePix(rp, pix7, pix8); /* 2 */ pixDisplayWithTitle(pix7, 1170, 100, NULL, rp->display); pixDisplayWithTitle(pix2, 560, 580, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); fpixDestroy(&fpix1); fpixDestroy(&fpix2); fpixDestroy(&fpix3); fpixDestroy(&fpix4); /* Test adding various borders */ pix1 = pixRead("marge.jpg"); pix2 = pixConvertTo8(pix1, 0); fpix1 = pixConvertToFPix(pix2, 1); fpix2 = fpixAddMirroredBorder(fpix1, 21, 21, 25, 25); pix3 = fpixConvertToPix(fpix2, 8, L_CLIP_TO_ZERO, 0); pix4 = pixAddMirroredBorder(pix2, 21, 21, 25, 25); regTestComparePix(rp, pix3, pix4); /* 3 */ pixDisplayWithTitle(pix3, 100, 1000, NULL, rp->display); fpix3 = fpixAddContinuedBorder(fpix1, 21, 21, 25, 25); pix5 = fpixConvertToPix(fpix3, 8, L_CLIP_TO_ZERO, 0); pix6 = pixAddContinuedBorder(pix2, 21, 21, 25, 25); regTestComparePix(rp, pix5, pix6); /* 4 */ pixDisplayWithTitle(pix5, 750, 1000, NULL, rp->display); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); pixDestroy(&pix6); fpixDestroy(&fpix1); fpixDestroy(&fpix2); fpixDestroy(&fpix3); return regTestCleanup(rp); } leptonica-1.70/prog/dewarptest1.c0000644000175000017500000001505112107725234015070 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarptest1.c * * This exercise functions in dewarp.c for dewarping based on lines * of horizontal text. It also creates a 24-image pdf of steps * in the process. */ #include "allheaders.h" #define DO_QUAD 1 #define DO_CUBIC 0 #define DO_QUARTIC 0 l_int32 main(int argc, char **argv) { L_DEWARP *dew1, *dew2; L_DEWARPA *dewa; PIX *pixs, *pixn, *pixg, *pixb, *pixd, *pixt1, *pixt2; PIX *pixs2, *pixn2, *pixg2, *pixb2, *pixd2; /* pixs = pixRead("1555-7.jpg"); */ pixs = pixRead("cat-35.jpg"); /* pixs = pixRead("cat-10.jpg"); */ /* Normalize for varying background and binarize */ pixn = pixBackgroundNormSimple(pixs, NULL, NULL); pixg = pixConvertRGBToGray(pixn, 0.5, 0.3, 0.2); pixb = pixThresholdToBinary(pixg, 130); /* Run the basic functions */ dewa = dewarpaCreate(2, 30, 1, 10, 30); dewarpaUseBothArrays(dewa, 1); dew1 = dewarpCreate(pixb, 10); dewarpaInsertDewarp(dewa, dew1); dewarpBuildPageModel(dew1, "/tmp/dewarp_model1.pdf"); dewarpaApplyDisparity(dewa, 10, pixg, 200, 0, 0, &pixd, "/tmp/dewarp_apply1.pdf"); /* Write out some of the files to be imaged */ lept_rmdir("dewtest"); lept_mkdir("dewtest"); pixWrite("/tmp/dewtest/001.jpg", pixs, IFF_JFIF_JPEG); pixWrite("/tmp/dewtest/002.jpg", pixn, IFF_JFIF_JPEG); pixWrite("/tmp/dewtest/003.jpg", pixg, IFF_JFIF_JPEG); pixWrite("/tmp/dewtest/004.png", pixb, IFF_TIFF_G4); pixWrite("/tmp/dewtest/005.jpg", pixd, IFF_JFIF_JPEG); pixt1 = pixRead("/tmp/dewmod/002.png"); pixWrite("/tmp/dewtest/006.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewmod/003.png"); pixWrite("/tmp/dewtest/007.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewmod/006.png"); pixWrite("/tmp/dewtest/008.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewmod/007.png"); pixWrite("/tmp/dewtest/009.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewapply/002.png"); pixWrite("/tmp/dewtest/010.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewapply/003.png"); pixWrite("/tmp/dewtest/011.png", pixt1, IFF_PNG); pixt2 = pixThresholdToBinary(pixt1, 130); pixWrite("/tmp/dewtest/012.png", pixt2, IFF_TIFF_G4); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRead("/tmp/dewmod/004a.png"); pixWrite("/tmp/dewtest/013.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewmod/004b.png"); pixWrite("/tmp/dewtest/014.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewmod/005a.png"); pixWrite("/tmp/dewtest/015.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewmod/005b.png"); pixWrite("/tmp/dewtest/016.png", pixt1, IFF_PNG); pixDestroy(&pixt1); /* Normalize another image, that may not have enough textlines * to build an accurate model */ /* pixs2 = pixRead("1555-3.jpg"); */ pixs2 = pixRead("cat-7.jpg"); /* pixs2 = pixRead("cat-14.jpg"); */ pixn2 = pixBackgroundNormSimple(pixs2, NULL, NULL); pixg2 = pixConvertRGBToGray(pixn2, 0.5, 0.3, 0.2); pixb2 = pixThresholdToBinary(pixg2, 130); /* Apply the previous disparity model to this image */ dew2 = dewarpCreate(pixb2, 14); dewarpaInsertDewarp(dewa, dew2); dewarpaInsertRefModels(dewa, 0, 1); dewarpaInfo(stderr, dewa); dewarpaApplyDisparity(dewa, 14, pixg2, 200, 0, 0, &pixd2, "/tmp/dewarp_apply2.pdf"); dewarpaDestroy(&dewa); /* Write out files for the second image */ pixWrite("/tmp/dewtest/017.jpg", pixs2, IFF_JFIF_JPEG); pixWrite("/tmp/dewtest/018.jpg", pixg2, IFF_JFIF_JPEG); pixWrite("/tmp/dewtest/019.png", pixb2, IFF_TIFF_G4); pixWrite("/tmp/dewtest/020.jpg", pixd2, IFF_JFIF_JPEG); pixt1 = pixRead("/tmp/dewmod/006.png"); pixWrite("/tmp/dewtest/021.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewapply/002.png"); pixWrite("/tmp/dewtest/022.png", pixt1, IFF_PNG); pixt2 = pixThresholdToBinary(pixt1, 130); pixWrite("/tmp/dewtest/023.png", pixt2, IFF_TIFF_G4); pixDestroy(&pixt1); pixDestroy(&pixt2); pixt1 = pixRead("/tmp/dewmod/007.png"); pixWrite("/tmp/dewtest/024.png", pixt1, IFF_PNG); pixDestroy(&pixt1); pixt1 = pixRead("/tmp/dewapply/003.png"); pixWrite("/tmp/dewtest/025.png", pixt1, IFF_PNG); pixt2 = pixThresholdToBinary(pixt1, 130); pixWrite("/tmp/dewtest/026.png", pixt2, IFF_TIFF_G4); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Generate the big pdf file */ convertFilesToPdf("/tmp/dewtest", NULL, 135, 1.0, 0, 0, "Dewarp Test", "/tmp/dewarp.pdf"); fprintf(stderr, "pdf file made: /tmp/dewarp.pdf\n"); pixDestroy(&pixs); pixDestroy(&pixn); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixd); pixDestroy(&pixs2); pixDestroy(&pixn2); pixDestroy(&pixg2); pixDestroy(&pixb2); pixDestroy(&pixd2); return 0; } leptonica-1.70/prog/renderfonts.c0000644000175000017500000000753712242265724015173 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * renderfonts.c * * This tests the font rendering functions */ #include "allheaders.h" #define NFONTS 9 #define DIRECTORY "./fonts" const l_int32 sizes[] = { 4, 6, 8, 10, 12, 14, 16, 18, 20 }; #define DEBUG 0 int main(int argc, char **argv) { char *filein, *fileout, *textstr; l_int32 i, d, size, width, wtext, overflow; l_uint32 val; L_BMF *bmf; PIX *pixs, *pix; static char mainName[] = "renderfonts"; if (argc != 4) return ERROR_INT("Syntax: renderfonts filein size fileout", mainName, 1); filein = argv[1]; size = atoi(argv[2]); fileout = argv[3]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); d = pixGetDepth(pixs); if (d == 8) val = 128; else if (d == 16) val = 0x8000; else if (d == 32) composeRGBPixel(128, 0, 255, &val); else return ERROR_INT("pixs not 8, 16 or 32 bpp", mainName, 1); bmf = bmfCreate(DIRECTORY, size); #if 0 /* render a character of text */ pix = pixaGetPix(bmf->pixa, 45, L_CLONE); startTimer(); for (i = 0; i < 10000; i++) pixSetMaskedGeneral(pixs, pix, val, 150, 150); fprintf(stderr, "time: %7.3f sec\n", stopTimer()); pixWrite(fileout, pixs, IFF_JFIF_JPEG); pixDestroy(&pix); #endif #if 0 /* render a line of text; use marge.jpg with size 14 */ bmfGetStringWidth(bmf, "This is a funny cat!", &width); fprintf(stderr, "String width: %d pixels\n", width); pixSetTextline(pixs, bmf, "This is a funny cat!", 0x8000ff00, 50, 250, &width, &overflow); pixWrite(fileout, pixs, IFF_JFIF_JPEG); fprintf(stderr, "Text width = %d\n", width); if (overflow) fprintf(stderr, "Text overflow beyond image boundary\n"); #endif #if 1 /* render a block of text; use marge.jpg with size 14 */ textstr = stringNew("This is a cat! This is a funny cat! This is a funny funny cat! This is a funny funny funny cat!"); wtext = pixGetWidth(pixs) - 70; pixSetTextblock(pixs, bmf, textstr, 0x4040ff00, 50, 50, wtext, 1, &overflow); pixWrite(fileout, pixs, IFF_JFIF_JPEG); if (overflow) fprintf(stderr, "Text overflow beyond image boundary\n"); lept_free(textstr); #endif pixDestroy(&pixs); bmfDestroy(&bmf); return 0; } leptonica-1.70/prog/weasel8.5g.png0000444000175000017500000000163710400443670015047 0ustar dandan‰PNG  IHDRRI™ãñPLTE???¿¿¿ÿÿÿw7AÖ pHYsb&26IDATxœµ˜‹v!Döÿ¿¹2¾ÔMRÛÓ“lvoFPžŸðH¦¯OHò¾Lôçfð„ˆH<©ˆñWn©ò0†§C )¯ÃÈ:&ër`žU6*eÎ| :èd¨!5úŽâ×|®’‘oðþ%R/ÌÀI!=•ãsÎ5’‘—šш%î?uÞ’šõªQ¬Œï‰C(K’ 1EÁDž%"~=쀼Ó° H¾D®@­… O*ä…Äfšnàò Ò'mUd3ÒúÄ+•±xÜ”édüLœ³R3™6R\`­çºÒ¨Ù+tƒ—¨¡ ¹h’Û{»£â-ä˜L›—.ÑÇÁi;žz¸%h*H$ÈI.$60,”ÉG>RV¤\‹Òêê⺇¬N±Ê$W¥¬òœwra¦*Üê+ȹ™¤æÒ•¸ä!¥”ê$uGk—=dv•JÙÈZú°,1ìÆÕìô¤”—Žj[ šW¯÷H|<È“éÙò‰Ü ÛÄA6X½ÆV0NȺpÑX¤EF^©úWWÌä’’µüâó‰g-)#½±fâ)]zZ8µw±4{V=!áuløjÎU—O$«mL­.ŸB‹çš¬oÎfpêmùoAâ‹:””¼Åzöö—f_®kY·Fß*ÂÛ º@¶ö/)oä w"ßäæRyÙ‚wH5Uç ¼S¯NÞ¤Ç'R<Ä„æ)‘VœñöÄ7"ùl`¨?tå%¾,[Ò%Y·lUõÁ´M´AƉ£»ÇßH„yä½Fjuk%Bòû|y­2íUç¬î#$#–œw«ÞáõåÄ‘“äGøR%Ã9³…¾@¢¾õeœ7[0·m¸À(.ÞBXu¬y½A–V $%öŠ<«D/lÀÒy³Ê3’Ó±¦uo€tõ¶³#);¤ÂÂÐÌ$Í[·–È 2-…\›º3„rÍN½¸EªEæ;€Äb¹ Q©›…¢c¢7½M?C¾áóšp©[›æ–OˆhäÄ9úð¹*â¶ù<5·_üãvB>ÛSéåxfä×ÌgEþvü é@Fn¼qëIEND®B`‚leptonica-1.70/prog/coffeebeans.png0000444000175000017500000000462107503776025015436 0ustar dandan‰PNG  IHDRt •ËgAMA± üa8tEXtSoftwareXV Version 3.10a Rev: 12/29/94 (PNG patch 1.2)Ý.IñIDATxœ¥™=r9…Qª –Œ Ö˜40& †zn0WàhÒP¨0Ö8{‡½ Ž‚5ÖÜÚcʨ­ä{‰Ÿú¡ZªZb÷Ç 3‘™@Ó­_}Ìu ÿnÀ~7pùn`¸|ýóÕ´×€+†\¯ð·€]š+À| ˜Î½R€pîøøs“ààûv`y't¾˜ß Za¸¢pÅ’Ë;¡VhÈE¦1Û-0«Hˆï;±öÔo±L*ë¸BYÿc†n ¸LÔo‹+>Ø%¾Ý•“<·¬+ °¦ßXÌô¦ÀNáÆl.hö@6·°uŠùP€9 &¶Þ˜L/,'À°Ž rÞ60¨°ÀØ}äPaÄÄf(œ4aV8ÎÁa}óûC˜ ˜Ï8ýEšð¥—#àtï)4˜ ¬ª°õf—ø9~"ﺳ!˜Tæ8(ònÀ/ïFùC`’׃Â$ð³ÐÆ_u+vÖ6™6º:c´wëv@ܱ£)Õ1ì e‚*ÀïrU”žÿ]09³KE›~‘ÅÌ®ŠAz†œzt›«8 t Í´WYñ’|ÔRl8â„â­ð:Êb >bŽ â ý©ÛN²]Q¨rHR0—±Rðe¢­¼} ˜Íð˜`_ú©š¨¡¿ÄYñå~³ãÍêÅHQø¥ƒ[Àÿ–€‰›·Ò·Pˆ|Ÿr<–³­X1ØCt“Ž"ÉÜ|2 8Âwc"þÀLæ"€Làô Düž ®ÑT! ¾~¤‚o¤nÎ9•r#Áò‘ þ†€¼Õº0BLì}œ³ˆ`©€O0ssþ3~‘w£ÉäG£[ —'Úð‹¾×Q÷@0—Eß=º¸-®q|î—¦-€¸ï.þ½5’ ø®©QS?®ïTA¼ù\ñöœî»ƒB¬ݤÀé±âô“*‰‚?3£^€¢PÙAÊ16„'ÿù‰Á¥ž¹X€›ZÀ“A pwZY¹X³èr<$þ˜5áÂ5E¡[5jº…9-}rh5éMØ]} ¹.)¬~Uà’º'„p“øÌH8€ºhJ;$aÒ$ƒÍËÍY¤l-úCD?"œj…ºèŒx³S¶¦  vîúsÍØz ìV€y—ìÀ´ïž Т°ûþ» Œ;îÞ€ÄçO€¤°ÊôÂþP)àgw¤UÈÇ2Ä{*Úp¦0e… Y°=Sxdšpªð3‚ÄêQA€W¦ZÙÒQlÙoPP`©­mXÏ?kÁ ›êiÈêµZQëi(°hÑ – ³œá\ 0l–°Ï ¦Yý# ‰n¶QÀÖ€ù ÀnwÀÂ’Õ¬Iá¶ÞB8FÅdan,,&Àýâ.#ÐV€4‘.õ[<€feBÀ#­ï)íŒF)ÖS8n úaÁæ@î­›œžm3£´å¶R ä‘ÊÄ“' Ÿ1})Y1úŸçmt®©þ]€s˜·– ÀÁÑ­;?Ñvé×®¬;ÿÌR`P ,]Rî©“ùL¯W9Âø{¶(3Ds´Ü&=^clcÒßd ]î h 8¾˜¥äußpZý°‡›ÙÀr|§›Y :uÈ–Œ¿õ#¥Ñ}’“²ÍÞ$ÐXtá’Ë-Àm¬kÊñeLÀÉé>Îôb€Œ®%Ç¢édzêuƒGn´[{fw‘†k å Ø/]¸Cš|bëxjà#²Éo.º9›¶IŸvÚ¿o¹ÏÕ‹"8Gœ}É€çÍ2ÀãBhL£ç¨‘ >§ä ;ñjJt  _ymeõÔ"qÛõm ôzý8MìmûEÖ€;(©™¸d 6ºWÜÿÆ–C´X ø³´±Lbâ ëó½2"§Ñr@`ææµPZ­8š9­†ÛõaŒl¸Xipo“‹×‘­y¿êm¬Ù+6÷–c1-‹TT°¨ÙÚ'Àz4)¬†íq«Éèµ×ó¯eÉU€E’ÉÒi\ /à­i§E²ô­>7'¼«äUõør C_ÆóWõ„oÖ xÄÓÇÑš5°–[Ú Ëá¹VÓ- •\òl‡˜è* _MiA Ð.ÀW}Î` —`‰qy©6“½nHfˆQƒ%ŽQULñ îÅìZ=À«¯Æþ)+ý[Ðí/jÌ7ÔØá `ý”ûÏ“¯elíée–‡V¦áôëGÜúÓ¯¶ ÀeÛ¦È90ÀÓÝã™B¯“<û•í(¾5¨€Nï(N°ß˜¾t_þÍl'ÍŒÇutIMEÒ‚¹_IEND®B`‚leptonica-1.70/prog/weasel8.5g.nocmap.png0000444000175000017500000000207310400443670016316 0ustar dandan‰PNG  IHDRRI‹V. pHYsb&2íIDATxœ­˜Q²Û EO2Ù—´3`e½ZYû¶1`;mÓés0.!á×o~º¼œÈ+鿞O??ºBÊå_ 7Þ $ÁüÏåø·Rò²'%ý{,Ï*óiàÏ_ÉaDΧw žù„ôŽªHà¥õÏ€òØå Ùë,ÖÕ, ž÷¥oÙ(怊%¯o'äƒJÛVŠ´WçýYóžx3o¬¨ {ü±Erê:×§A¥,Ö+ìZ“› «½PüšûÕ‰_ûµ’ ̶öaÌåsAÔðˆà€Ý”Ï’¨¹¦Pqg¿_°²ø $‡¹ ×êåŒGZHT¤í,é^ì”I墙 i®EÄrâƒ÷¬¾ ¶\†3rÕ®ˆ+o‘K¢Êì 4 Ø|hlk)¿îVÙß@¸ðXthæÑz¥>˜m6`Å×È`……yÝä‘êîì&11?û€ë"…9ᵑ»Óãéhuð˜w&ŸÚؼš»ÅWÀ\ÂÎæö±¡“—*ëá½8ši–ù¾‘HS8èËÇr!±Dês³¶Ó¯Qævl蔬lsÏešù†¬Fo„¥‹k®žîRMÍ"âkâ=RÔðcÉÖ!ý¯‘¢Ë{WÄãËI_®×R€Èq­ïaZv¼RY[·ï r[oœeåI¥¶VíŠ!2(ìâ.Qz¤JõßEõΤe_E~DšS°.£È€.¯´nÔ'ƒ‘€aDõ<´‹Ï\~+T²+Ÿ—‘[RØÅæïN‰% ¯±ÚÛ\å0¸P —ÞÔO\íVb5èªÎÛ„…IlÉçM$~èÃíùËéë÷¿gдÿñ+þ›Èëç¿«ÿ‘ÌÚp@}IEND®B`‚leptonica-1.70/prog/contrast1.jpg0000444000175000017500000005551307510363231015103 0ustar dandanÿØÿàJFIFÿÛC   %# , #&')*)-0-(0%()(ÿÀ A¬ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÚ?ô¡É>Ôps@)ÇjN¸ÎiÜzšoéÒ‚ŠëA#§z@~´òHéHHÏøÓ[#Þ”î<b•7 rs×ÐR`÷ôƒŽÔ1' Ç½;±íMÛ׋œô§wÆ:R¯^i:6Oݧx¤ì£qäw¤ÜE4§ƒNäñÇJiôÍ&xô§7ëH>¦”ò1A#­4sÆ:QÞ”ðhÇ­+cÒž;zÒƒŒRgóùÒdžz\”£ ß^8 ®ƒK“·€’9õ£>¦†Ç\RžNJ6ç€jô\ æœO>ô¼ãš†åHN¸¤Rçµ§Ni8õ¥ÁïKž1šCIÆO­;'šSÇ5óã¦*`sŠ©è=é:ç) ÷†€yÅ/zBqÒÛ­9³Ç½çRy9Ô° –+>:Ò#=ià p*cŸ”ñUØòsšLŽ¢—“Ž˜÷¦“ÎHîù¦†$“úPHü*$¿¥N§Üb¯4ÖàœŠ99⎲>´­“CíHIàb•Ïz:P=é»»šǦ !ÎxÍ*ðzRžrMéͽM Ø=x¤ôô£%LQÈŒŽ)yëŠBqíKÁSA €)NyÏáŠÉ ç'ƒ¡ÇZR>\šdÀô;ûP™Ûê)ùÉ ýïzaã©§ƒG¸¤n½p:Rä}ÐM+0ÀxÍ=pFI挌ÒžxéIœsÇž½œàŸzxtÏãP“Å.xÆ:P8Ï4¸]§iŽ?È¥\šoñc £ð§}h<-'aFìç­<ÒúuÅ!÷4Ö8è8§)ÊŠ7`þ´v9àÓ³ŽÅ ïAóœÑÛ­5‰<úÓ³ÓÖœ‚jÜmŽ©ûóNÏ_jBA¤''<æÇ¹ FzP̓ýhÎHÏjPyæ‚p)7ô™ù©I´¹š®cS&êHü)sÆsHPi7§Ö8'R–æšd´å`ÞôìðOéLÞ=1Ugåòz±Jlî6 GX ‘’j#(u¨·äóÖŒž‚‚@<Ѹc9â¸8ŠSÁÐx§²ƒqL…ʶÓÈúÓ®j8æ’$Ü™=j9 GÅYNW±‚_Z‚¹¹©eb)QÜõ¨f6WŒS‘²¹&£Æ_?=ÆTã®)°õïš—¿aQÉ鯑0sNÜ28ÏZqÁ4)ÈÅo¥'RqO þ½0:žÔ)ù@¨ÈÃg4ön)!ç$æ¤oº;S®?¥5¹=1NR0=)AÊò~jŠûÒè($9¥^¼t I»Œv¦ç‚F)ÇëÖ„´ò8 “Çzc‚8æ‘~ïÓÖ•ŽW§OCJÅ0šž@úúÓ ž”¤N)FT{RðÃÛÞšÌ){àÔ’SÍI jˆeÃzÕ•éPܘ0ÆhwýÈ'©¥µäsÁ÷©fg5 ³uÏJ}Á@êi-ŒmÃsÔÔ‘ä ¨¥À|ž*`~\Š®'ö«jØÇ½;'œÔsýÓšŠÛŒóÅ:D&OÔQµ±Ö¡RDÞÔùþï#¡© #Ë)“œÍJ¬ûÓYò¼œ‚ƒøÒËÐb¬)ù~•^sHíIÝäuô¦¿øÔ§•‘ŠañÖ¾N~Ûÿ×ü)‡ÆÚùçíÌ>ˆ¿áLoëì9Ô$ÿ¾GøSOŒ5Óÿ1GÐð¦ÿÂ]®çþBSòsÔS[ÅZÓ JãþúÅGÿ .³ÏüL®¹ÿ¦†˜|C«žº•×ýý4Ó®ê¤ÿÈFï'þš·øÓ³©·÷_÷õ¿Æ›ý«~NMåÁ?õտƶ¼¨Ý¿‰´ñ%Ô®¦P0ò+ß!cß½8žE"AíJx9£¦9O\Ò9àf›‚bš2‘ô¥ÜI#8£Ûõ¡ºâš7.sÓ4·û´vöÍ’Z§{¨Úiá~ÙOûø?–OŠ¡†˜Ý;ËÿÖ¨OÅ)ÂéÀÛ_þµ7þ•À9|÷ðÿ…â¥ÐÉ|_÷ðÿ…Fÿ®ØäXB?àf£o‰÷Ç¥”÷cL_‰Ú’–ÒØrOõ¨ßâfªíþ¢ØLñ¤?õp>HmTúí?ãQŸ‰:É9Ùkÿ|ñ¦ÿÂÆÖ÷¿f_øÿ^£oˆzáé$þÙÓOÄxÿËh‡ý³ÃãíxŸøùAúf)?á>ñÜ À>‘¯øS[Çž!?òþGÒ5ÿ añψ?è ÿ÷Âÿ…FÞ3×Ù²u?ï‘þÃâýtÿÌJoÃáMokŒyÔî?¨ÛÄúÓ}íJçþû4ÓâMdœNïþþckú±ë¨ÝÿßÓþ5öÞ¨F¡wÿ[üi­«êƒ}rí«5µKóÖöçþþ7øÓúìòng?W4ÓysÞâ_ûìÓ~Ó1Îfçý£M3Hz»~tß1¿¼:7·÷çFãëFO­&hͤɥɣ4})(É¥Í&h͹¤Í£4QEfŒÑš(ÍfŠ3E¤¢ŠZJ\ÑIKH -%´f¶<"vø“N9Çï”tÏzú*ÊZsqŠb«È?-<}îô úšváŸ\ÑŸ|PÇ$ô¤nOzTçè õÆ>”\Ð;ñMô¤lãŽ>”ŒAæ?ÉÙbrØÉúW—–4›4™¥Í%.i3EŽh š3G4„ÑšZ(ÍQšLÑš)hÍ&hÍ´QIÚŒÑFii3š3Fh£4Qš3E%QEQEQEÑE-%QE-”QÞ–’Š(¢€h4Qš ”½¨¢‚h¢ŒÑFh¢—¶h­o ¾"ÓÈÏúåéõ¯£##`úSϾ1ŠjpI‘ïJ9=¥$cŽ” 1HBJCœûúR·ZMÇœt©Iè3øÐÿŸÖIñÔœŽ¦šätȯ2øÄ?qd}ÏzòÓIIEŠ(Ï­»%QIKEQJ &h¢Š(¤¥£4RRÑE(Íw¤¥ô¤¥ÍRt¢Š)GJ8¤4RRÑEQEQA¢Š(¢Š(ïGz(íIE-%fçEQŠ(ŒÒÐhÍQEQÞ´ü5ÿ!ý?<==»Šú>ˆ×ÓàrGOÆž1œÒ†8f—ƒš@ J\d’?• ã9¨Áf|.pZRqN$1Á•dœ`b“±Í ÁÀü鸟ç^kñTÚÙ8Æwï^Ti(¢Š(¤¢Š(£šZJ) RRÑIE´”RÑEQE ¢Š^1Iš_¯QÅ!¢ƒš(ü©E¤¢ƒGz ´(£"ŽüP( PMEJ)iQš)h¢ÑA£4(ïE/j1IKE%/4w£4QZ^8×,3ŒyÉ×ê+èØOȸî*Uã¯àp~”Àyw§Œdf”·$f‘OHzæ—·=iãži~¾Ôy$~4ÒH8Æ(uÎ(ÎzCÅy·Æøð³$¾{W”öâ’’–’–Ž´†ŒúÑEQEJZ)qÖ’·Ó8¤ÁàsIÚ”tæ’ƒÞŠ^‡õ¥cž)JAÖÆ1ÞŽ´ª íF?•7uRžF&)M'z\w¤4¾œ~T˜£ã¦(?ÒÉ¢“µ¥"Ž(ëIEÍ£¸ç𤴼Ei)h4 O¥-%ލ<ÒbŠ:Qš\ÑHh©qGjJZJZJ_¥&h¢” \ñIEw«Ú)Û«Yž8•zýkèëVýÚP*bNé“J íH1ƒJ‘Í ûØ=iüކ€;tö¤<FzñA ž}ª6å² .N9¦·ÝëÍ5ÛŒr+Ï>/s¥Úãûçµy1¤¤ ÒÒQEQE-RRõ¥9ŽôcŠ©‚aI=ºûSíHŠ ¥#Å4ÿœS•x9ÿ?ýjc=i0sÉçüþ´í‡AïQ‘ŠP:v£ëHO4 zt¥$t¥/ n3Š>¸ ûuÍ'êi{óœcµ OçIÆ}èíͤ});óŠLҌуڎyÅõ<Òsžô QÚE(Å€( ivôéNQ‘Ôê­!ãJ1ƒŽh#Ž”ÑÅ)(£”¸¤#žØ Ž{~t†“Ó†F?¥&jLu¥¥Æ)1GÒ“‘JqÔRv£QFi:ÒÒw RçŠ(ϯ4QœUÍ ãT´?ôÕz}kèë\cêNLÙ¤S£éÔPÇ>¤ÓóÓô¦±Ã gÞ•Ï<œñNÏZsÏJh'sqÅŽqœRs·‘ˆéÊá=¿‰ºŽhn˜®âÞNçNÕäg­&zQšJ(¢ƒGçERÒŽx¥#½QÜRõÅ9ÿŸ­5sïøU‡8LôÆJƒ¿@??óŠz8éÇ?çùQ _ÈsL MXHþVÎ{uÎ?éL‘ ±Ý¼c±ëÿë¦*–n†‚¤mç·ùü)‡Ž”qF=:gÖ‚~”à¹ÏN™ÿ?áHFÒ·jAAäÐ2s×­.`zÓ{ž)p LzÒŽzu¤Î)){sIKš1G4”õZV<’>´uìi@< Nã‘NG wõ¤~½¿JAÏg§js€ïùTt¤` LŠ•8?ŽqøÐÈ‹=yÏ_ÇÞ“<~Îippi˜¤=©@ô£·4§ºzÐxãŽ)@þTí¾Ý©äc4›NÁëþoÓô¥Ç<Ò0Á4†ŒtÅ&rh¢ŒQGãIE-kM;u b?ç¢ôú×ÑÖ ›xÎFvåVœÆ1O¦{QÉä(\€9¤a»?Zy\š1ódÒ^i{gµ7¨Í(® 5°§=¨¥Dßx iONz×ñdÄŽ>DÏÒ¼~ƒIùÒÑF(æŒQGc¥QJ3Å)çëJžô¸Æ1BGõéÿê§8ãœõïM^¿j{A3?ãÐS—ϵ)íÓ¦?ÏøÓ88Íörjt¾{{þ]j&ÏÒ„ŸÇ?ý§µX ò³qÇÐà_éPKÔç¯Ôóõ *ã·æ?ÏãF9#¦yÅDF½(ÏjvÜׯùÅ0ŽOõ©TñŒŸ×¯øÒ•ã€I¨Õ3Mü:U¡¥#ŽÞ¿ÏãL#“ŒRàæš@¥SÈ ëIÛ­/nôƒŒÒíKþy¤4ƒ£­IÓèiH§ùÿõÒ9úRöÍ9Ýàç=¿§½1†1éíŸÒ‘IÉãñÆ?¤§9÷Ïõ¨±×®iÀ¥5†9©#íöçžýu# ·ÓƒñúÓÉä¸êùúÔžZ°$àçðÿõZ…Óàûôÿ<ûTd`ñéÚ•{Ÿò)v–ƒõ?Ö¸õÏ¿ùÍ*ýîùö<ÓÜÇn?Ÿ‡µ)î20\õºRŽFqßµGNéÛòÿëÓBƒŽùúÿU8 tëœñþ cóÓô¦íëžßçò¦°>†N qM絃IŠJ(¥úTö'pôûãù×ÒVý÷ò«Cc(õRúƒŸÂ€O~isŽ¢Ÿ^¿JqÏOòi¹"…'‘ý(aÅ rA¦¶æ|ãZBqŒõ¦0$æ†Î;× ñ]IО>q×ê+Ç&))H£õ¥Í'zZ)hï‘IGjQÒÓùRã¯JC@ÀÇçA=;R¨ü¿ÏéJÝ_ÆŽI=N?ÿ]J€)#œãß?þ¿Zlˆôíœú©€zþ´õÎôÖúçýo¯½*àg¿éN~Tž=z~¿ýj`xãÚ¥†Û‘ÈÇÿ[éïI çÅ$c¡ç¯ùü}ª}Ä3’x+ž·¿­@üç¦qø{PªpÜtžz…+ry8ïŸ×ú~RXpsÓßÿ×HN‡>”åÆ:Œg=?^=©¤(''šqP»‡NÝAÿ?ZQ€§¦Ïç@Ç8çóøÓQüÿÏz#íÓ4à ïÇ㌅FAç={æ‘Éçóÿ=i^´éE%¥áÒŽéqóþx¤§ Îÿ]K—$g¶zû{Ò󃌟Lgôö¦€ ?OóøSÙvú‚zhnOóïïLÈ8þ‚œ c>ùè??þµ+ò Sx9§.@Ç#ü÷¥tù¹'Ÿ^¿Ï­,«. B½GÓÞ¥U.n{ãnz{{zÐP€;}rF?øšy+dÈÎsøgúTr¯ÌýsœõÐñ×Þ¡+ÁúžÔ›Aî:fœªãóòi00Çéùõè€:œrGåÿ×§÷\žüú©ê¤“Œý@ÿëõöúÓÏÊÉ/nßN?Æ¢Æ1é|cü)@ãœûç?¯ô )¿\{çüj#9þ!_IéÇ6pwù?…ZèsœÓ€`ÑŽÍ úÒçƒAúf”‚OzM´KJxÅ'E8 s“MúÓO¥!¸Šƒþ)Öÿ|v÷ã&’”S° 7”¿…(ÇãHF3@ëÚœ@Çjf:RŠQíKÈàS‰ÆÏù€uÅ.ÓŽùüÎiœñŠ–?»À÷ÿ>Ô„pxçÞ›ÐZ™à“ƒÛ¿çÖšàg±Èö¦ëSGÂ)ãÒ˜F{Ÿð÷¥tädgœçõ©$ µŽXäûõ÷÷¨rrzŸoóúÔ¨:q·#éþ’ ãéž{ð¦ #\ÿžµ(PG898ã>Ý8>õãi>ßð¤®1ëÐ~ýjW?t×üÿJc`o_Óÿ¯BöïÇÿ]*ç#õýÆ€IÀùºöþžô9ôéíœ~ÔåèÛ½8ëþqÿÖ¦ò3œÿŸóÅ5‡<ƒÇùüédéOÈÂãŽÿý§µFã‘Ûõ¤8çò¤ýƘÃpã=z óô÷¤U' ÏÓüô§2¸Lÿõþ”×ïxäÓqÏOn£üþ5f#ò¯“× Î?—õ u ‘»;¸óÿëSòÐŽ˜ ãüsúTo€œ˜ëéבïQÉÐãžÇüç§½>§8Ïù÷¤E,G ŸoéïNXÏñíŸÓÛÖ¸qð¦³c9Ïü úÔª~÷¯×üóïMlÀÝŸçù~~´ªpù‡Läùÿõ©­ŽÇÓüÿ…4áp¤sÓ¨ü³ýiÝ}nN?ÏÖ¢aËwç½äõÿ?Ö‚ObxçÜ’@ÉéïþqJñ÷ºwÍ; ß8Ï?_ñ¤ÆpgžÕ´Ò8¤¢R@q2`ãæô–—ÿ6ç$üƒùUÅßÖ˜zƒðÿ<{S¢8ÏN9çŸÏÖ•ñ‚:ãqþ}j” f¬BüÁ1Çåÿ×íFÁŽÜœ`‘ùõé:ׯœ[ ýsÿ×úûS€OúP¤çùJž,íŽsŸÃ?Ò¤^YrX±>ùÏÿÿÖ§í`ûÜmÎsíïëøSsœzämÎõÞßJ…ÀËt^˜õéÒŽ1Žý_­1y=§oóŸz08'çúÒ3ð3Ó;²1ùÿõ©«Ž½úÿ]H«…n펼zuéïLnçùÿõÿ*vNIË\þ}iÿ1+ßðõö÷õ¨q‚¹úãðöõ¦Çÿ_=?•†TçŒÿÖ˜’ÓþŸZFÈÈǵ äþ´»€ÆöÍLv§)އ·*‰º‘œÿŸçJ9Æ;ž´Ò§j¶Oùÿ ]îsßúÔmÔõ¦š)iW¨¯£4ÿ‰MŸÝŠÔ-Ó—99ÏJF=Ï”7#Å'®iêÜ})›²Ø𓾠&vžôW#¥ œt¦ãžIÅùÒi‚q\ŸÄÑŸ Üãëþ𤘈­%O ¦ž€_óÅFzs’sG8ï×ßüæÀþëþúÔŸÊ”¯Š·NiHAã&‘H•#°ÆluÅ0‘è*ƒž¿­>§?çõ¤äàzôª1Û¿¿Oð§H9ÏãþzRýi<ã¡çó§'QŽxÍH¬S1Ï@þµ1°vŒ€Ò‚@8Èã·åÿצ?<“œÒr3Ö§…ðIqéNFăvÏON½=¹æ•UÀãîÉ÷ÿgÿ¯UnpsßvsøÿJ‰N9$Ÿ×üiw 7_ÿÓúÒ O·áõéÓÚœ»Aç=Ž?OÿUJQ@w¦:Ž=¿úõ\c p{vÿ"žàzœç¦}ÿúÔéå=9Ïõë×Ú˜ÍóÀ``çNi[ú~ŸáQsÈ<}ÏÒŒžž¾œÿúéFp8={JvâSŽ¿§øRdGsÈÏôéLl`ôÿ RÓìdçƒÇ°ÿ?Ö™Ççüö¦œzcéM£ÖŒq@úÒ¯Q_CøjE:M£eOÈ:Vºù=E"¶ÆiíÈéÍ5W“øTi8Ï=iWïJß{ØSY°0sÍ Ü`ÒžýÅFj¸<~T™ç‘Í>•ÉüH9ð½ØÎËÛÜW‡J(íKÚŒQ­æŠqé×ÑëÎ>´ÖëŠ)G±§/Ö˜ziÊ2;~4ý¿+;ŸëMÉÉÎjXø\å¸OëP‘ƒ“øR©ÁÇâ)\ûcžýiTðG?­H¼‚F3׌Çÿ­Q±Oóßÿ­R(†ÜŒÏÿZ¥oáÈŒ`žÞz{Ô'¶9üZ#]ÍüYÏ^ÿϯµ9ˆçƒÏ§ôçó¦c$ñÛßþª³ Û¸ö ÎsÇÛÓð¨db[ø¿óÖ£É;@Í?(ÆOn3ôÿ hlzuÎHŸÿZ‡êH~GcÛ·åÿסX“ÈÇJvpF;ÿõúõö¦ñÏN˜§'#üÿœR€Fqùãñö¡ÞÈ`sß?¯½4òO_óýiÜÛ·ôãó¨¸ãüÿN”†Ë>´}9⃃Iߊ{tJn3ŠSÊõ=höÏ_óøÒœàåIëÒ”y§ê: ž:ûФq‘œõè(ÈÆxëœñþ i`G`sžŸçò¦œw?¥.zÒŽ¿…=[æ}sß>½zÓH9Ò”}ÜŸÓ?çÖÇÓëIÐZ~GãóÛ­†ñÈúãÿ­R;goÌ:gÿ¯ôö¦0=GéAÇ ëŒd~_ýzzà†èsïŒÿ…!n äuÉãñë×Ú“>çüÿ_Z‘_ Ogz}=`ã¦}s‚=ý¨QÏ9ëß?¯¿¥:^‡“ŒôïŸñ¨—{óÛúSØ€OCÆxÿõtö¨Hç°â€0yÿ?çÖ…=²{S‰àsÎsŸë@'×¾x ’ÇÓŠBA'wd’sׯ֚:ŸLSÉùF Æßój`=>ÿÏJ#Èúçüæ•N=rOãÿë¤bNzãÚ“øO×ÿ¯ô¥ 9ÉÇ)ê0ǧ¡ÏòÿëÐqÐúôÿ>µ 縤4Ó@¥kè_ øvÄ‚Iòú·ZØBH9§¨QKžxëHµÍøüðÅîEμ$õ¤=h¤£©¢ŠZQGçÖÉ÷¥$Óix§ŸÊ—¨‘A<õ¥äñÏáM=ûQëš)Û†þT€ŽôŸóÒ”p;=xöÿëõêLä’qú ÿ‡õ¦ç,pAïŸëÿÖ¦ŒHãµ=W€¯ùâ˜Àçžç¿ùé@që׿¯øÔŒOÌïׯøÓ:ôÏNÔ(÷3ÓüñHzëI‚p=ÿÏÿ®œŠ1ÎO9ÿ YI$ŽNr1Ï¿ÿZíä÷öÿ?¥<ƒÛŽŸäô÷¨Èù‡~:“Òœ£%}ÿŸøúTÉ• ß{¨ÎsÿÅS2„œçøsúZ‰ùb8Ç·OÿU8 d;ÿ_éN“žÍÇ¿ãïïQcsC´~}:Ó=1õ¤éé@£=EÒ‚xÅÇjq$ÿŽi¹<õ<Ô‘õ#Óßÿ×Ol†ìF8#ü©…‡¦xÿ'§OjEÁÅ)××ôÿëÓF§_^´q“þÏÒ•°¤Çò§@ÁôïþzS@<`¿çñ¥S‘ƒ‘Ïùüi?‰í@;AÀçúS™‰Ï\Þ“v§1Nv8˜¦H9ç¯AO 89Ç9ÿëÿõ¨# vã®:ÿœÓ O·ùö§ãƒžM3’xÏùþ´«œ®3Ÿj]­ÿׯ?šAÁÉ?ŽhçüÏZP1ëCppxíM2)C3@=¸äãüÿ.3Ô½épA$uÿ?¯µJäóøOëøÓ°z(è=ú{{zÓ€ ϾÎ*¾;æ›ÖþRŠúÁgþ)›s×ÜÖò tëŠv8'ŠU#88¥ÆzR/z{cñ )Ý×ð¥<Ó[9Íâ‘Î94 œsȦñÆ)1ÀȦ‘Çó®{Ç>¾éþ¯½x)ëHi(¢ƒERçéH9â—ÔæÎ>ñ9ÅÉÇ$ çüûÓHÉÿ Q?ÏùÅd’xúÒG®i1ùÑùf—#“õÅ8 ÓÓ­I»!·OëL=sžÏëJ¤Œcðö§ƒ•ÿ3Óü)„ö?­'cׯùüh$’x8öÿ=iÇ¡÷œR6;úqþ?J€JéÓÓŸÆšzväÐ9§\ÿŸð¥ÛÁ¥Ø2~¿ý}(^8ãùéO\“Îï\Ÿó×Òœ€wÃÞ` ç·ô¦–åºåüºRÁéùõ©pü;ÿ/¯½3ø©ã€¼{ÿõÿúÔ×4¨xëŽqÇoo¥+/QŽÏ¿OzSXž~¿þ¿Ê/ ççñ¢5ÉþŸÓúÓŠ`/`~¸Ç¯Óÿ¯AVÇ×?¯µ(\ƒŸ^ÿ˧_zy^qŒóޏçÓ§_çQÈÛYºóÀÇùúTLùéóþzSRt¤Í%/~+ß| †ðµŽ0>NÝ&º1‘ôþT™ÏNiØ8ô¥^œžqJ½9¦¼v0r4¹äÐFAÇZAÈç­5€ ñC—½©ËŽô„ŒŠFàsŒVFï ßò#=³^zÒJ(£½Š(⎆ŒÐiiE÷¥)´QKHM.O ûP:ñOϽϷµ.pOð¦ñ“Ú—©ãÒ†9Ç"“Ÿ—üÿ“NLŽž½¿¥ xÆ?ÏøSyÁýiI'=Ïõ¦F:Òx§þ½¹ãñ£#‘ßüÿœÒ1Îpiè@ÎHÿ=ÿúÔ çôü¾œÔ›ˆ·¯oN½)¹Ï>¿×Ú˜3ß9Ï|ÿœÓËg#ž¾ÿç4Â}8üéËÔŸoÃáM|–ïŒw¦ÜÒž˜9£ŽzÏÿª”àæœÁü»ŸÆ›´g§ëF9é ‚8ÿ?Γóü)ry “Ïôí½zçüþ´€í8"œXdp)ÈzP0:µŒ?ϧÿ^—œÒœàç¯_óïíLäž*Eà.sÓðÿõSx8ÝÇ×?­'·ïž¿ãNÛÁ<õÇÿ[§Z\ryϦ;ý8¤#Ÿlgÿ¯Ó§µ:1‚3ØwÇùÿ ~Å$qß$~_ýz€Âã'¯?áýi¸ëƒÆsÿ×úûPW¯ôÿõÒ2äžÀãç¥(÷ãŸóéNU$“Ž¼ç¯øúSˆ*ó×¶sŸñÿëSS¨ÆO?Ãý*B2¤Ÿäq^*6ÏÍŸÌÿZUfÈöÁþ__zSŒàxöçúÓGðž3× üÿúÔî>\ã׌{ûý)'gsþEHà gð—^žõä—byúõüj0§9ÿ?­ =?*V;ñþ `¤=h¯{ðnðµ–0~CÐc¹®™§Î;<òi ÇCN+Ú•OŠsƒž9úÓ‚}é9ûн8šSÆ `÷¦vÇ´uÀÎ)­’3ÅaøÀgÃz€ÉÿTÝ>•à­7ëIøQEJ)i QE)é>´ p4zsùÑF9¤Ç¥QKÒŠP}É9¥$ÿú¿ÏZ\’;v£wüÿ‘Mç4ìò3þúô p3ùú© Ï¥=(Î â‚rx œcž ?äRƒÀæ“=}?OÿU/bZxNxúõÿPIàôÿ 2rôÿ=ºP‡·~yüzt¦çŽ{ÓAÇn¼R1ÎiÊx>ŸçšB•áOSò€F~½þ¾ÔÕ9êÏãNÉÁ9ÏoóÖœ{ãôþžÔÖèŸùíMQŽÔ¤p0=©˜Ï\~1N çÿÕOñíÿÖÿëÒ6{sÇùïIé×üÿZrF3ŸÇ?‡½Œz{JLnç·éÿê§t ×ñþ¿ÒšI9àÿŸëOry§nÿ¥8¨HçŒû~Ÿ¥BAp=iÉŒg8íþÆœyq׿/þ½u'ŸÓúñAëßsßëׯµ"uî0;ŸÎ¤@öÇáéþí ñœñê?Ÿô§`ŒŒîÇ?çïS][Œã_ñ¤é»¡ãŒúº{PR6Ž3ÿ×éÓÚœ»WŽÿý_¯jSµ™AÁíŽáŸëJHÁ$û ÿ†?ZYH+޹O¾=}ª>äœ zsýjHÆCÇÀíí×îûÓYI˜vïÿëééøS€!—;³øçñ÷ôü*@¹Äç ÎIöÿkÿ­Pmù@<öïôöõ¤g;vöê=¿NžÕ IëïÛô§ëÇ·ÿ[ëïAN8ÆqùÓOAÈÏ_óþ 'aJ+Þ¾Þ±ÎI zýMtÃâ•xíÅ/Ó5‚jUǾ}éÄj3“ŒÒgü(ÇóH=(lóŠhã9¤ÁÀíMzÐG cø°áý@uýËtëÒ¾|¼x¦ÒQEQERb–ƒF=¨Í( QÒŒÑõ¥"ŠCíKéýhqŸZQŽi>´¿ˆ¥=1MïJz÷ëF~¹¤$ý(â‚O½'çJ(Í qž•! ä£Óüþ4ƒ8ó 0”¹éÛ¿ç­4œàzzRdœZF?äѓȥè B(éŽÔì|£×41Ï®)ÀdÉöçü('’×?×ÿ­KÜô©¹ÛÛõÿz{Ò²íÁßüþU~½ÏãNQœrOþžôãééí@a“’1ëþGJwF9ì9ÝÛëÇåNÀ`09é×ôé×Þ˜Š _þ°ÏøZ Œg=?_þµ.Aô~8ÿ° ¶?§^žô1Ûœqþ~´Ðä¶_óÞžqþZh8#Û°ÿ=*ÂaÓùç<}Ù¦ŸâàŽ‹·×Ê‘¸'9ëøý:u¤=qþ}©clqÓ9þ¿Ojr¸d¨œàô¥<à 8Á#òÿëö  #±ÉÆ ðöúÓÇú³Ó“×8ÏëÁþt¬ØÝ“ן|úõëíõ¦=0çòçóüi¡ /aÉçÿÄÓ@Á³Ÿ|þ¿Ò…pëŒûç?ãN {ð#ŸozaÉ^xËÛÚ“ŽàzõºS%ÆzŽ=*¦ñšQ^ãðÇð‹[œŒä×TóñÅJÇŒôúP2@Í&Üià(ž})=†GÖŸ»¨<Æy¦“–Æi=8Å)ä:R×®zSAü0°¡‰ü+/Ä_6‰|0ò›¯Ò¾z“ï·Ö›MÍv¥¤¥¤¢Š(Å”½h¢Š)síJ3ŠCÓ4 rõi:9¤Í.h8Í;}>´Þ;P0O' sÖ“¿Z3ëÞ’—i3Í(óG¥'ZQÓš:8Ï4 ƒÐROç@>”v¥=óAÎyÎiFI0x✽Lõéúÿõ©äá; Ëüi=n—ÿ^œOîúSì:~~ýhL9 {úéÒ1ÊÀ펟Κ¤žÿ[áOòNzÿõ¤vl¶IëÎsœÿ'PyíN—ùíÓÚ›Éü©Pö§¯N1ý=¾´åÃzr}†}éXO#r?ŸÿZñ¸p8ìsýi»ˆ8ã¦:ñôëÒœ[§ÓœŸçÏåLÝÓ¯_óøÒ‚Hg9ãþžôÏôëÃښĜÿŸò(ÁãÇÿZŒ‚FGlŸzOËò¥V Žž¿çü)Ä€8åJ~ëtôÇ_ÃéïIާçÿ×¥“ߦúýzÓ׆^£¿Ë×ð÷õ¥ åGnØÎ1ííëN%°¡¸‰Î1ÿÄÿõé ÉÆy ý§ãC–Èn½úÿ/½ïMßó~ŸÓÏÖ¸ŒôÁÿëôéíI€OߟÇüô¦ŒdÆ0pqíÿ×§G‚ c$œsŸcéõ§¾>öwsÔŒgëÏšäd¶ëׯµW‘²N8è?ýuJ{Âî|+ÝûÌ8®¸€qJÝ8±ƒÁüé¯^”ñŒ{ç½;q‘õ¦±Ï ñJzç¥7Ù¥àã)GúS9£$uéQ æ•Á$Vf¼q¤Þ‚ýËsŒãŠùæ_õõ4ÊJ(¢Š3š '4´bŠ(¤¥íE¢—Ú’Š)xÍèÍ©@&—È8¤9&—=èÔÔ™¥ÇZCŽhâ’Ž)}):Òó“ÖŒž´dޤæE¥S³Çj=:~4 àù¤ÏL~”õÎ8çü)ç€sÆ}sþqLló×ß4©œàgüú{ÐGÝõ¤~Ÿ¯ÿZžptÜñ¨Û©Î:ãüÿ'#ŒÒ·|chŠQÁ:zÿõéëž;êxÿõSÔœtïß?¯ô ““Û¿\ÿñT„œ’G±Çù÷¤b2HÆ1ø}ztö¦ž{vÿ=©¸éÇ9õý?úô£ï‡·§ùúÒõ¹9íÍ47$œzçúÿõ©Íßza㯧ùü) éƒGBê?ÏZvr=zéK¸c÷ÿ?…;w×·Óùtô¥9Ëp}ó×ñã­;o<žqÓßÓëïH[•9÷àóþ4œ >ÿýþµ(!y{`ãüi¹0Àôõü:ô÷ žXŽGç­ÎN{ÿœõëOVŒ‚ á?¨÷õ¤8p{véoo_ÆšAÈ÷çµ9˜‘‚O^ùý¥FÎ~`Aëßüõ¨‰ëM¢Šöß…‡w…Pq÷o¥v`û úÓ•@÷=h(4¨09=)’Çœ~áÓÔPǤ¥)(ãšE&‘Îp3ŠS’£<Š`A¾”ñšÏÖWv›vx›§Ò¾uœbg펊JJZ(¢Š:ÒQŠZ(¢Š;RQKKIE¥æ“¸¹À£4§ò O¹¤$q@=;QG×õ ži?-'¥ Ó€Î•!8'¥¤>ÔƒƒKE(çü(ü '­ß4g$g§¥=pOn¾”1äôõéþ*Cßô§¯9éÓçüi3“Öœ6ärsôÿëõ¥É!@Ï^ƒúSpŸËðö¦ô'#ó ’ §r?Ïñ uà:gŸóÓÚœ§¾:zóŠ g8Æ8ü¿úôÂ㜀sô¦–É<Œuè)Ê@ïŒRÈúRH=?ð¥$ô>¼ç?­!s·õÿ? cÏô£w\œñÇùô¦ƒßúRç€zÓÀùsÅ79ôëB ÇçOÝŒô¥Ï°<‘×¥46zzuÏZrä•äúñœçüi7\g·ô¤ÞqþÎ)èÜ6>ßµFü±'õ¥œc=©ùé9íþÆ¢'õ¦î¤Îh&óE½¯áA'Âã9âVÆ í@àt¡zÿ:x^G@)W§\Ò(çŠbçžht'=)ÁF ¤ öŒqQíÎqëNƘ9=è ààÕ=I?â]q“ÿ,ÛÛµ|ésÿýãüêJJJZ(bŠ QG¥QE%´QE¢Š^(Í&h—9ë@£µÇÒŠCKÞƒIKÒ“4êi4Qž(¢Š\ñIE(Å.zw¥d“߯ùüiyãü)ÍÐñÛóéMÿ \œƒÏùþ´)är:sôŽ{Ö˜pE7ÜS³Œôôÿ?ãJXuö§+gõúÓí+‚F?»ÛéLf$d}8'§øS{Òýh-ÆsAϧjRñÁþtÖ}(ÎzÒæ•x©ÉéƒÏoð¤ `ž¼Ÿñ¥_Ç$þ9ÿeN3íן¥àp{ŸÂ›Ç=hÏlΔ€8$ÔdsÁÍ(÷ÇáJp3ÏOJi<ñFòzÒf’Š;bŽ”Râ½§á&[ÃLé+!]ÒFCÉÍ“òšvÃŽ”»"€ŒJ]”ÎüøSYNðOJrç8Ï0ÈÓ:rM)dⓞ”Üv>´ÁªšÿAœQ†Ò¾q»é2ãûÇùÔ8 ô¤¢ŽôRQE-%­-%QKE袊(¢Š(¤¥£Š(¢Š)h4”QKÚŒu¤ŽÔQߊ(£“š£§z3ŠPH S²(bzSsJ AךZ ãÞŒž½)xÍ+¯Nô€ãÖŒÒfƒÅ&i}iKhíHOJjOëG<õ¥?C@àÒŒŠ3ÅøÑœç4¤ŽzPLSIçµri3ÅóÖ‚i ô¢Š(íE%--{_Á“ŸJ ûãÓè+ÐöýiBñÍ9Ex¥ÆOoÆ£ÓòWaéßÚ¡éFÂBhe$c¨ ¡Å&Å ŒŽq“LÜqÅ>lU{艶”ü'é_6_Œ^Î?Û?ΫšLÑGÒŠ(¢Š(Ç4QIÚŠ)h¢Š(£½QE-%¢Š(¢Š(¢Š)hŒúQ͆Š3éEQ@RçGjOÆšJ3Š))h$IKIGZQÒ’”(Ï­Q@<ÒœJ(Ï¥!4f”sš3ØÑÖ“ŠJZ))h¢ŽÔQE/í?±ý…qÈÏœz}z@è”ì}) žœRŽ´¤ õ4…}©¬9éJçŠCÓ¥íJæ“›´sHGµV»â 2pppkæ]H§ÜsŸœõúÕR(£µ'4RÒQEQF(¢Š(¢Š1ERÑEŠ(¤Å½(¢“´”´QEQE%QERžhJJZ(¢’—QF(¤Å¥£¸üi1F=©qIŠ1F(Å. & 4}(Áô£iô¥ÚÞ†‚‡ÐþT¢'=¿*_"Oùæß•8ZÎzC'ýòiÂÊèô·›þø4å°»=-g?ðR.•~ÿrÊäý"4á£jGþ\.¿ïÓ…”»O¥O¥O`*PŒ{Ê—Êî7åJ ”ôÏü”ZÎzC'ýòiâÆèãóø¥}áÇú,çþÙšxÒïŽ1gqÿ~Íê„dÜ[Ïü)ëð¿R8ÍÕ¸ü H¿ o[Ø?4ÿøU—c¯âÙøÔ«ðªcø™/¿îøÒ…nR„_ýzwü*Á“ÿ#ÿ~¿úôõøX›9Ô[?õÌ9~E›P“?î ‘>[æþb}”R…¶Ÿóû>Ý2|-°þ;Ë’}°?¥;þvšü|ÝÅž¿ ô¼çÜ“þðÿ ü+-!~ô—8ÿ|…8|4шÎë“ÿmøT«ð×DÀÊÎ~²SÇà b˜y =~hYÁ·sÿm¥tô3ïó·øÓÇÃýþ|³öÛüiÃÀz8(àMþ4åð>„üƒâüIÿø'B'þAÐñè*Eð~†üƒm¿ïŠwü": é¦ÚçýÁO_ hÀcû6Ó?õÉjAá­ g}®ë’ÿ…#hR4ûQôˆPš&œ8[ aŽŸº~•mt{Æ,àävŒSÆ•f¹Å¬#=ö ›hE´_÷À§ý†Ü.<¤ÙEc€`“þù¤xcϯt§¤‘÷EKä¯÷ú Uû ~¾J€2¿J_-sÐRùkƆsÐSV5•6Tî?•H‹˜ÆEqÞ ?Ø ¶Õ£¶¸Ä7 £:íƒ&TŽj=Ä0Ò¦S‘šv3íGNqAüiÆš9j Å9x½¹ë@g)õÍ0óÓ"˜ßÖ°|[ª6§íƒw9òáOV#ùÔƒÁÚ"ÿÌ:õZxðž‹ü:m¶?Üõð¾ŽÆk×þyŠ•|7£®1§Zÿߥ£þí-NÂÔÛ!OM NSen=1©G²SŬì i¶€ü¶ñ~)ßÙÖ£‚<öE/Ø­øýÒgýÚwÙ"òÍGà)ÂÖÕ"(lT„`óÍ;µFü)>•°w©#éQ¹ÍNƒ‘N<)Øöæ–›!ÀÎ3Q‰ ãµLœc¥ åz޵É“ê*ÂcÍfk6êv3[N»‘Æ>•“àmFW†m6ø‘yeû¶ÏV{ô®‘ÇÏ×¥<ÅKn´üsGÒ£•°=©±r'š—ÏÀÙ§ûœP[ïri€‚:óH2j;‰8ÝØ€ d’z âôXÛÄ!“U”Ÿ±Û²ž„Ž ~d×h(w9¨älëO¡úŽô:f”ã´ÒGUÅ.AÏjE>œÐØ„Špi3Á¡œô¨æä8¢03Ò¥(Úš£9¤pxÍBdç¥JœŽ˜¥ ö)5W޹§m¦à“ýh"”/<ñKšç=)zÓ±À * œ®;S¢fÆH5.3Œæ‚¼qPÌÅqëDE$ T½h Š\bŒdÑŽ¸Õ,œ/LJH€ÎjQÈíKŒð9£8&€Àãž+ô ÕbÛúio›#·­K÷ûb˜À.NE=BÈ›¸Ïn•Èx¥HÖm5Ëpvnòn@ü®¶ÙÖuIPådéVdPŠ!8QJdñÔP&õ¦L>ldóOQ·¦Hç4…H\Ò³•]C3““š–3ƒƒÚ’FÁêk–ñ•ô·FbÒnÎà¹þŸnh–QØXEmùcÿëՙܥ“pSý*¸H«h¤(9¦LÜŽp)0qA9\~´Þ© ˜ëQ*…b=†[Œâ¤EëÍ)ö¦HvŽ)ª½é ÃOJI½jHÆ'¥4Š0pyªª3/?­ZPÀÇ4«Ú‚8¦ t8§’}"€5½ *óšqS}E9G¤zSrV¸ê*Äcåå^s@ëUîzŒÓâéÉ©2 â— ÿ €2i‚EúÓò¥;yàS ¨Ç&š[ð®GY|i£0$‚~]ym£ Ç9<úb˜˜Ü{Š˜0QëK#dRÆsÒ¤išXä š¥äS܇êÛ_iûó׊\î,ã©¢g>gJRÛ:‚sO]ÄdRÆçvÓR1Ú¼Š‰XÉÓ¥6BA敎*ENrh•NàyÅ)m©ïH~M&óÕ!åInÏZ[†ÀÀëMŠ6'vî1ÐRNÿ^¥·SŒæ›pÌéJ‘ásšˆ30x¤’!ŒŠ‚0KcgiTâ¢TÞ;Ó¼¢6ñÀ§H‹·5NâÎ=BÎ{iW1È¥NkÀóËÜè×­þ‘fÄG“ËGü'ò"ºó"£•vGÅ6»yëM‘71"¥‚ãšz& -ûÂsRn¸¦OÊ÷5¿³Å?p}=ꦫ{¤—0TA’kðm¬—S\ë€ù÷_êÕ¿‚>ÃòÅuñéM“¨æœÌMW ;’9©Ëž=ÍE! ŒSüÀ:qÒ˜YH§,¡@¥sÆE41'Œç¹§+°ÆA©”äT3° ïéMóYF?•4¾XJùÅ*Hß(Õ€IñJ:B8ëTYšvŽju.½©ÈùëDÏ´ u70É©0¯ãQ¹o_z˜Å’£™pÝjX€Ö™7_z–5ù{P8>mLÄ,~†’$ÝÍ9â{ÔQñ;Q!ËãµN‹€0?‚lúš•W1LNd§Ê¹Ö£ˆ€ELëÁãœT œQ ÉÀæ§Pv¥B£÷œç³€ jreT`}G!Ā䊙Îc'¯–ø<Ñp>^”èWåÁ©ÂàRm ÿרeˆâ“l€ þ½G)9ÅLŸêÿ¥GÎìçò¤—†Çj³ÔWc5$$mÔ7 ûʱùEWóy«1ÍV„~øñVdÆÓü…Am‚H•:bF=©¾K63RÄ8^µÉøÊÝôíFÓ^¶ÎmÈK€?Š3Á?†søWYgp—6Ñ͆GPÀõâ’ä†LGzŽ =ïMed8~4gæâ—yf ?Z”B;Ô2®Æ ×bÒaÉ´€‰nXqô_ç]wÙÄ1*ÇÀ,#åïQûìg½K,Yd †óLÓçàÞc Žt¾Z|* r>´¾Pã_e9ã=*IŒT(Ûœu¥u8¨á?6 2P7ñšœ +PÞÕaÔ>• n'޵gëùÒ¨à÷¡Æš¨¼Îr8õ«@uâª?É&=Ô¶ÜgŠ76rãš‘˜3L,Ç#$*TóÖ™0ËŽyÍ<Ç­,n¤g½E!Ë÷«1àÔ7=A©£fzT@¸jP_#4ËœŒsRC÷).ÈE20DG“IÚ²Ý1Þª8Ì™ V3š³x5ßtâ¹-yqâ= ãþZ0ÿÇZºeR¬†Êã¦AùÉÈh`Ž?:‚p&ŸÜ¦Í÷ÅJ§åç½A’$_õt[ò½sRÈFÜ“U£sÜRʤ>Oa(ôªóÞ 8AÅB$©dÆÌÔPIdáGJ®ÛCuÁ4ÁÃp?ÕŒð*$ÿ]ŽÞõ!`ŽÔü‚*åÀäT®?vGzdû¹¢~óùS •ÝOÖ§‹îŸ¥4}áô£ø×éP]vúÓ¢û‹M»éD?ê6/¿VŸ úÕc÷…t*«Jlÿp}k“ñü‡´úîô]:ÿ¯;u5?ë*ÀïPÜ«4ZýÊ.{})ÿòÍi‡ï­Jÿpþ5?wñ§Í÷’ }ÇUúR/ÜZо*xþ託ï­>OõmPE÷ªÄŸêÍT“ïŠxÿ\ŸJ´ßêÍB¿|Säê>”ÔõüiféøS"íMŸ úÔöÿxU±ü4Ò¢“îÔÚŸAI7Aõ¨“ýgáW úUSÕ©­þ¨Uˆ¿ÕÓÞ4©AûÆœ>ïàiÅMH;Ô§îˆ}áNë? ‘º~Â_ÿÉL²ÿ¯SüÍví÷éÇֿÿÙleptonica-1.70/prog/weasel-44c.png0000444000175000017500000000300410400443670015023 0ustar dandan‰PNG  IHDRRI™ãñ„PLTE' )#/,)JZ!F6(rB9BQF2fQ7JJHZccnXEqcQlllŽ„1!´’rOŽ{k¥{ZΊ„w§…Y¶eÆ›l’‘‘œœ¥œ¥¥¦œ•°¨œ¯¯¯½½Æ½Æ½Ç½·Æ½ÆÆÆ½çÖ½ÔÔÔÞÞççÞÞççÞúúú>ƒO pHYsb&2&IDATxœµ˜ c¢8Çââ…â‘ú€´u½¸òý¿ßÍD êíÞ¬­m%¿ýg^y@ýÇ þ¤¯¤GH^×7|¿ÞÆ/Kÿ^1ÉGHQÛ+þýv¿ìõ†Ÿ\‡Ãi8ýlÞ/›óëD¥ÏnÍ‹Ôö½Øá/J;`¢Ê ]‘8Ð(€s`Æ\Œ1gc4Ú—±ÿ—W‘­õ4ªªR ÏGs9Á€L\ÞF>œi «5 äJ©ôo¨ ‰e”QBRVd%ˆ7‘„úu™#b ‰"n€UÉA椵! º‹Ôà0 HãÈ@Û ’Æy™=à±›÷.Æ mˆUýéÄi`˜Hs NˆT9jFu3µöØ>¦·Ï€˜3~b pðúrð«gÎT{c'¶Æa‹œGz€Æ|„ˆ(“Ÿ§Y¤—¨]!ö8¥êÜÀaRiƒ@ 6BÖ*K“$a §ôŒî²ä!_R•ˆœÆbF¸ӽ˧2Ž|-Ø:‘¾¸tȘ²’”±±[Sìžž¶áZXˆ)— Z]e6 P(âP¤%öŸ@È]/šVû•†O€{f¡êäéêvì»pÎü йWU¶8Û:çÌ>Ÿ«*Hõá–ÂÅ9Ϋ\¡RHý ’Äçsn, !±nÃ$~{mέ§ÈG¿´F²¶R25XægFº¥PCß^š}X(,Í»C©r§TÆ“d4z—OÖtf‰nÄíh˜Ü3Te´æ&“BȺ­té]*×rÒÁêàþ–“›ÇH>‡lº£ó¹JwŠT ‘V£«Å»Höp_ÉYëÁ”fœ×¨°12ARÕ0>Pâ²1Ý„o2Ò ƒ&[æ„a먗X“õ7Œ´mOÊÆ›;±w±—­GªŽ‰¾ˆn©‰£$F÷1¬{4Ôµîˆã}L™E¸}ó#»–©]Ò®93¸ýiÖG³V(?™öËv38\}š¯¿ïHŒ+ã0Ë%Bfj@Ö³C3ñ‰•®”Ø'!|È©ÈnõùÒ_rŒÄú§p%º¶¬¡E—æ pÊÝŽzIÚl®¹¾´Ìþ÷XóL ún7òíìeáÏÌ΀á3Ñß?"Ê©Ïýápþ§IéÆÎÞïË‘ºþ†¬6«þ¡Ëºb—¶†'HtH±,–E±\ÂÏ»>š®î0äÌŽ'žÕl¹*6ÅjI”·—¤O÷>•aû:àb ‹E±Bj´Šær|yI›‹Íf¹Üüxxï7£ª±“GKô$˜_Úö-•X|ºÉdzø®JLtzf‰)”„ˆo!©5æ Å´&å{HìA{F÷g"Ú '}aâ¤ví×i‹±v–Þ»9æWÉûI­Ü|c>ÒŸ°°Àœd^¤~¦’¶X16–­DÓz+]L$`éxoU,˜gHÆÊ-@o·å†°¨@Wú¢#oÌ ©}+ü*ÝÊ~àqMñŽ tåôjÝbž!±J²ÔaÛñ. "* LËñ©7·÷í\õÐQ>†2ZOè³-q›"Zt§35£Þ yN%m^Êu•`tÙMÙзöJ|JÊÎËLöý0AÎ_ÜþõÊî¨ÝÝý…kò5]‰ÖýûÄÿh£‹ÛúÛ¿5ðÉN™*këIEND®B`‚leptonica-1.70/prog/feyn-fract2.tif0000444000175000017500000001153011507500067015277 0ustar dandanII*š& roÿÿÿÿù €WŒ) §Ó ÉNð‘Ã_!Ÿ;Jau„ªµ°«ÿ8—­º@Ó÷~/­‡_»rÏ¿7úOúõUÈ­´BY?!Ÿ_^ ¨0@É"Xá%ôõ± „Ó”ŒC¢~A{_^ ? ƒd4ßUý4q°ÂhS4káCpºÛ$T™Ê§„Ddÿöu¼§Þž˜A„F¢>!ðØ`À-‚·WAdá–y†ú 'aB¶ƒN̈Hec®;ºÝ-¤› Ð ÑÊ«¨&¡4ƒÊîý]ûjÕÒzI&ÑÆØ[¨M0¡2°ƒ×ÿ[ën­'I ÌÂÝ n{h2%ó‚~k N­m.ûT½ßJÒpBøA¿GÁCÖïè^ïíW½6ž¿úÓt«ÿŠøfšý¥mÿ¿÷}£á¡vþ¿Ð¡¦4ì úWüi7¯ýWõÚÛOïû$!·^þƒ¾•½ëêþéÃÝê¿kü(dJåŽqÊuÿ_Ýé¾·¯ïùàÎÂ)Þÿÿºp÷ÿZÿíßþ­ü28z Ø;ý×ûÿ†ÿýŸ±ÖžÝ¿ßuþÝoø  4þ­á’¾þ­×ýßÿÓM6úc½/nïû?ÿ¦› »ZgP!÷vE‹"Çý¿_‰ãûNÔSö—Ã?°×µÛ ¸ýÿˆ˜ÕmU6]Ž8vƒìŽÓw¯Ä‚Õ4M1H5¦™ÐÅÜ{ëøˆ†M“AµW­Z·_‰ îÂa:´Õ4›PÒµüDLà h4Ó$a ÚŠm%ñÁ0ƒ …†šb ñ ³za4Òiâ" ¸0¿‚‡fPøˆˆÿÿ[ »ÐdHÔÁ>Ò!’?û ÖΟ ´áBä2AV}u ÛHç¬á p«¨a7<1B™ ÌUè_A„ ‚` ÈæAEë¯„Ó ¦!x d'¶©ÿªa L(A„É#XsÁZ8txÚõ ‚ àcÌ‹Òt›»ÝB 0˜AÄŸÿé[!çOoºà©„ÂvoTý&•ØA„“ó@î’LDC$/!—Úþ;mS´ÝÔ3@Œ#æîôÁ ¼òûWÿ¦½ßç®›÷ÓÐ`ƒ!˜pƒUÕ/÷ýÒ‡IÙ"Ãa‚a „Žƒ—2gÿû}ý°žOÞ>ÃTÓT «'2'Ï¿ÿß_JÝ7ôm4y´y†ÒÅ„Âh0˜"@`Á fƒWïõ×Q¯éÝ/d‡§H6& L!a0˜L&ƒîÿþ©×µ÷Þõm§]- ÌôpÚƒ ˜Oúÿþ—÷ò8*Î9Ü§íº­§A‚{}M—£ÇUOÿþ¿ ÿZ! ém×_ÓíÈq!ý6†ïÿûð_ûÓÝõÿÿ§L+ÂÂM½}·ÿúx]ï×û_úßïCw}ÃKì2W×ÿé…ÿÿÝ/ùÔoÿ¯îhaX":ñëÿ_£ï¥õ¿ßÿ< ?Úë­z#Ún¿ÿÒÈlã”3â¯ÿÿåÞ¿úö›I;ô°¾¿×B#ïþ»ÿÏ—zö+^ÒbÕ¾×½/ïõþõ¾|ËMÐa80Kš°ÖŸz¿ÚÒ÷õÿë¾’ØL+Tâ©ãŽïÿÿïßÿ×ÿ0¾éÒ¯ Ú_uO_o_ÿý~"$vm*aA5(ÓH8a%]'¿ìˆúÿßïþ"2@( ‚i…U†)¥M×úÿ¿þfaƒ ­„©Å=…]¿¿²«öú`ˆ8a;ÖÅZuÒÙoÛ /«Õ߈ˆƒ0 šM6˜a+‹ê?ÿ¿G5†i´ ›IÛ]Ý¥PÉ߈Ða}5t º~ÚVÇêAµÄ…paµiÒa4Ø4–¾„D" kà 4Óbm~"A¥È.9 ; õi6j""$(ä08amiЈˆ0°™±N=¥ÒãYÁ,ã6°¡2—^ ™K /L((í¥AwGµ¯ÐkúQmÈd†kþÓ„ €Ðÿî˜'ÿà¤2z¿¨Oÿð¿¯áH/d3(Aÿ xÐ}<&<‚þC0uð›_é„ð@È=‚ÐgˉÔ]ý8xL&„2ŽGLƒFk¿£ŽöôÁVÓ—2zïé:7£Ä}ma;4ÈaÉaËítÿ«¸f‚ßX°ƒÓ2 Ñ2gµ«TßVôÓមP¡0M ŽJÈNññ_Waw}xUM4Ô&L ÈeAr<ý{ëšëÒy<Ö0¨òé‚„ÓÁC6 ylÅý_Vëþš„ZM&ÙF?µPª0L&2‚VA;ÿþ¿Õªx@îŒýš ÐçöXP˜M È{'„$ò ÿÿ¿ZîÉå Òß·„] Pš„„ÁB †]‚“ÿÿõÿúá >úîžö…£í£5L*„ÓOÈÃ%29j ¿ÿÿÿð¿t‡šAaÚed‹ ´46††´/T `ƒ½ûÿñêëCbì'aNUm&é¾ÓÝ‚¦ÿÿÿøªPÿzÒÒt·=Û ©É… ¯v—ÿÿàºÓÂïw¦Ÿoì.Á;(7'wa(}mýïõÿþ …Öx4[ÿõ×Cf„ ÚvÖ¾žŸlŠî¾¿ß~ ëÞ¿ÿ¿Cí==Òm:ôü0Nëoû¯ð¸-Óíúÿ·__·»­‹¤ÒoÅ=}~Ÿ~¾¿íîÿÿHÔþ•õ~±Þí¥ýðý/GžõÃÿê³áŸÿ{i_´Á„“n¯°žÙ(õð—íïÿÿ}¾¾ÃÖÓ‚lPMbøÿOöûß_ÿÿÿ®Öý½„Õ´š“Õt^{÷ßÿÿÿ÷zoáá„[V›:$›_èèŸ Ž2áõÿºîÿÿ½¿oÂkaBM ƒN®68e¼}ÿZþÿÿôÅ÷ÄD50“A¸MÚ×ýwú¾ÿëöü7ˆÎ; ög(uM5wWßí÷¶BÿûO¦Þ",Ò¦¶i&© œRÿö“k ?ÿ\>†XMšjôÂi¦»ÔCb¿ÒíÈWûr7ÄD  -„ši¦ƒ °Ê›ý}[öAÝ Ž2ä5Ú¦šlU4š­¯ÿ°ÉÚnž""!‘Í3zM§¤Ðh8i^ÕüxˆˆØ9C”9ÇŸi ÂeL$iÅÂö•½×ˆˆˆˆ`˜&`WÂN¦Öñf)t\2Ö­iµâ"0L»LòJ[Tüø3A„ËÈ0ƒAþ„D Áõþ«õÈÆ•a7€¡|àPꆗaÒ^™ €Q ¤Âü&ž?‚Û]kÖ^,¸d\Zr#²n=i ñtÓ!wþ ɨ Ì?Ø\ƒN&×Á DA ¼Uz¥ÂNCÑWw}— @ÄÄ$¾«´Óèü6I© ž˜Pƒ!P™ §ˆ¾d5Ò>š…PT퓆U¯¤<ô⦚„5¿!Ÿ>˜AÞ–Õ¯ž¨öðšxA„ ‡™ g­zß»Oº ØWń d3G'„>[èvû«¤Øf`‡Õ¦¡2ù0AÊŸ¹þ÷]‹4a>ÖºA°ÍÑéª *„Á 2 d<òC÷ÞºÕÐðÅ^´›žm¡SA„,&  Á4¡™ÿ¶•7]ý6óBÓ¤éí;Û[KlœªêôÃL$Á ÑðÙÛữþ|j@ŸÿþÅ&£iÒj¯y¡ºh-èÕ¿¿«ÿMφ’…×ÕðñëØHi;il‡õZ²rÝü?¾¿·\øgÿ×j¿taÐ=ì.þHvïºþÃz׿ýõëW·k»OÈ€šc¿íîýÿÿõýÛçÃ?­¿z®¾u÷M‘cu_Ãßýíõú>¿×ý¦íZª¯uý¿ÿ÷Jßÿ·öÿÚtÔRw .Ë{[û!‡{ÿú·ôû÷ÿÛi¦©œl(·¦Ëa“Ë{ïÿª¾ûH/îB;°šÓiÚ´£ø×²8ïÿí¾ÿÃÿ…ÿ \pa{ …AŠ×jö;lŽÿý^ÿ½ýŠ üð±!žA¦š ƒO´ŸÿòpöDÿ·÷ü$D0M0š°› Š­®í·a§ Šÿ ² ŽýaéÄpÎ ®ÚÚ=?í?¨¸0_lŽ,‹ ¾´—úâ!„ÈèŽÂh0˜A«aÂašý«LkÇôëô""!„L%aZi Ðh0ƒ†•5~é÷ÿû¨ˆÌÎøÕ5bšt ª¿I­ý¤"")š7ÿh4ÂM:iа—iÿ $""!›F Âi¯ 5QME/±B"!‚ &}v ªÝ0žÂÃ5 ¥ &ž\5°M]àÏ0X`ƒ†!¬hDG^µë!’ì´2Ï„È+ZYÁ¬˜R& S úßX;ù €]ë” } †@®ÂÚwÝ2ƒFd ±Ç§ëÈ)œÐ˜R‚ŽÿwЙ†ÈP_}‘Ð_ž¿N#ì?ȹâªÐo„þ¶™¡6ÿñßÞü„r Á.!£?l0¿õ „ y ÛÁ Ö$„à©û¿ óMŽ'„²s"ù ÷¾¯Æ¨ýÕ8°P˜L2»]ßÙ¤ú£ÖÁ ¦2®C’ïü†@ha6“þ‹ ’P@¿œ~CRõIy£´üyG°¶ ©ºD€@òæ@ŒÒ^ëÚÞÚ‚ ²r!ÔõBôˆ<ÂxA d â°‘u÷ÿûÚa<úÉŽ«pÁ% Æ"zah f‚çÀóýýÿ @Úï:¬BT}l&P°h0“!p‚ˆOQûþë÷öœ8`ƒ¥ ƒëŠ„Ði’9 4u €—ý/o÷éêú÷ªE Ÿ>iêðT/þÿ¾¿i§·Iák¤MUþ˜a/ ÷øýoÍ'íS£Å–®“Âl8t?ö+Û¿õÿ÷uëšAw½:¶ï%ã0Èÿµí×úÿýÿý Ub•$ß»êA‡ö ßép_ÿu÷au÷û_¯ ¼?ß‚þ«M¾¸ÿÃÿÙ˜?×ÑÀQßÿ û÷þ«ÖÚ«_ká|“¿ï£;þû~î¿ßÿúanïïúôÿÓªÒ‚éíÿÿ„)U?þ½ÿnþ÷ÿÿPšl;Nþ¯Uÿ_mmp¿·ÿ×Õ§ 0œ0’öÿÿÝÐFwð߿߲B_iÜRa5øÿýº¿K§ÞúúñÙ´¡ßV“A„A Ý4ï^öÈ£ýwxÿñ"ãMw¦ÓTôÛ¸¾Õ!Þëþâ$ ì» ¯Ù¦­4i§}~ðûìŠúëäô/DDDYv˜Mzi¦m7ö-X0Ÿ°Â·OúzCˆ°ƒ@Èæ0Õi Ø¶‚ :¸‡uöƒôõqP#é„í´˜N‚oi=¥ »_q!›Ú­šJÞ6˜0”k:ß¡!”8`ˆ?» ­‚ªb'þ¢"!‚agÌ Ði¦CA ëÛHDD  &´ý„„A‚ Ði­Š…°„pÂÁ‚Çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿü˜> äÈp¸OÿO÷ x,‡« È*éÞáªt=—Dp3*àÁÖ"½  ÿéá‚ Fþák«ô×äãééõuôŸú² .º¤ÿîCDyõÒ°˜MJ\Ègòcõÿ„-p˜ dÁƒ‘ÑpÖÿ¯ÔZaB ‘Ï¥ý7(8faá4?ÿÓVmLͣµÿä1œ[_ é¶NL0ƒ¥j2H%eG×ú[O×Í}4нwéöán¿9¶Ÿ›ŽŸþ—ý~l0ƒ ¡ÿîýýÉú ÞµÿþýÒùÀoVÞºoÿ_õò kúõ¯¥ÿÖÝoüm¯¿ÿÿ¯‡õþ¯ÿûî» ßÿÒ×ú_ý×éy¤uÓû×ÅnþŠëþýë¿{ôÚ_}Úúýmÿ‚vžä‡÷¯ÿëµÂ a5°][Kë!á¿ö+´ÐaM;IUð› HH÷­ë¶aÃM:öô׿ ºMR{ƒ?¶Ò^ݬDXD/8a{ûõ†D‚]< Õƒ8á|DRÜ5„@â)¯Ú «M…ëBìŽ b˜jºÄDD0^–)y ÈýS¤´­|ÒK Õ%ì ½%°…q®¶±ÿÿÿÿÿÿÿÿÿÿ€€®ãã‘HP(HHleptonica-1.70/prog/scaletest1.c0000644000175000017500000000541212242265651014677 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * scaletest1.c * * scaletest1 filein scalex scaley fileout * where * scalex, scaley are floating point input */ #include "allheaders.h" int main(int argc, char **argv) { char *filein, *fileout; l_int32 d; l_float32 scalex, scaley; PIX *pixs, *pixd; static char mainName[] = "scaletest1"; if (argc != 5) return ERROR_INT(" Syntax: scaletest1 filein scalex scaley fileout", mainName, 1); filein = argv[1]; scalex = atof(argv[2]); scaley = atof(argv[3]); fileout = argv[4]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); /* choose type of scaling operation */ #if 1 pixd = pixScale(pixs, scalex, scaley); #elif 0 pixd = pixScaleLI(pixs, scalex, scaley); #elif 0 pixd = pixScaleSmooth(pixs, scalex, scaley); #elif 0 pixd = pixScaleAreaMap(pixs, scalex, scaley); #elif 0 pixd = pixScaleBySampling(pixs, scalex, scaley); #else pixd = pixScaleToGray(pixs, scalex); #endif d = pixGetDepth(pixd); #if 1 if (d <= 8) pixWrite(fileout, pixd, IFF_PNG); else pixWrite(fileout, pixd, IFF_JFIF_JPEG); #else pixWrite(fileout, pixd, IFF_PNG); #endif pixDestroy(&pixs); pixDestroy(&pixd); return 0; } leptonica-1.70/prog/barcodetest.c0000644000175000017500000000552512242267067015136 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * barcodetest.c * * barcodetest filein * * For each barcode in the image, if the barcode format is supported, * this deskews and crops it, and then decodes it twice: * (1) as is (deskewed) * (2) after 180 degree rotation */ #include "allheaders.h" #include "readbarcode.h" int main(int argc, char **argv) { char *filein; PIX *pixs; SARRAY *saw1, *saw2, *saw3, *sad1, *sad2, *sad3; static char mainName[] = "barcodetest"; if (argc != 2) return ERROR_INT(" Syntax: barcodetest filein", mainName, 1); filein = argv[1]; if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", mainName, 1); sad1 = pixProcessBarcodes(pixs, L_BF_ANY, L_USE_WIDTHS, &saw1, 0); sarrayWrite("/tmp/junksaw1", saw1); sarrayWrite("/tmp/junksad1", sad1); sarrayDestroy(&saw1); sarrayDestroy(&sad1); pixRotate180(pixs, pixs); sad2 = pixProcessBarcodes(pixs, L_BF_ANY, L_USE_WIDTHS, &saw2, 0); sarrayWrite("/tmp/junksaw2", saw2); sarrayWrite("/tmp/junksad2", sad2); sarrayDestroy(&saw2); sarrayDestroy(&sad2); /* sad3 = pixProcessBarcodes(pixs, L_BF_ANY, L_USE_WINDOW, &saw3, 1); sarrayWrite("/tmp/junksaw3", saw3); sarrayWrite("/tmp/junksad3", sad3); sarrayDestroy(&saw3); sarrayDestroy(&sad3); */ pixDestroy(&pixs); return 0; } leptonica-1.70/prog/convertsegfilestopdf.c0000644000175000017500000001566712265771042017104 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convertsegfilestopdf.c * * Converts all image files in the page directory with matching substring * to a pdf. Image regions are downscaled by the scalefactor and * encoded as jpeg. Non-image regions with depth > 1 are automatically * scaled up by 2x and thresholded if the encoding type is G4; * otherwise, no scaling is performed on them. To convert all * files in the page directory, use 'allfiles' for its substring. * Likewise to use all files in the mask directory, use 'allfiles' * for its substring. * * A typical invocation would be something like: * convertsegfilestopdf /tmp/segpages allfiles /tmp/segmasks allfiles \ * 300 2 160 skip 0.5 [title] [output pdf] * This upscales by 2x all non-image regions to 600 ppi, and downscales * by 0.5 all image regions to 150 ppi. * * If used on a set of images without segmentation data, a typical * invocation would be: * convertsegfilestopdf /tmp/pages allfiles skip skip \ * 300 2 160 skip 1.0 [title] [output pdf] * If the page images have depth > 1 bpp, this will upscale all pages * by 2x (to 600 ppi), and then convert the images to 1 bpp. * Note that 'skip' is used three times to omit all segmentation data. * * See below for further syntax and usage. * * Again, note that the image regions are displayed at a resolution * that depends on the input resolution (res) and the scaling factor * (scalefact) that is applied to the images before conversion to pdf. * Internally we multiply these, so that the generated pdf will render * at the same resolution as if it hadn't been scaled. When we * downscale the image regions, this: * (1) reduces the size of the images. For jpeg, downscaling * reduces by square of the scale factor the 'image' segmented part. * (2) regenerates the jpeg with quality = 75 after downscaling. * * If you already have a boxaafile of the image regions, use 'skip' for * maskdir. Otherwise, this will generate the boxaa from the mask images. * * A regression test that uses this is pdfseg_reg, which * generates images and the boxaa file in /tmp/segtest/. */ #include #include "allheaders.h" int main(int argc, char **argv) { char *pagedir, *pagesubstr, *maskdir, *masksubstr; char *title, *fileout, *boxaafile, *boxaapath; l_int32 ret, res, type, thresh; l_float32 scalefactor; BOXAA *baa; static char mainName[] = "convertsegfilestopdf"; if (argc != 12) { fprintf(stderr, " Syntax: convertsegfilestopdf dirin substr res type thresh \\ \n" " boxaafile scalefactor title fileout\n" " where\n" " pagedir: input directory for image files\n" " pagesubstr: Use 'allfiles' to convert all files\n" " in the directory\n" " maskdir: input directory for mask files;\n" " use 'skip' to skip \n" " masksubstr: Use 'allfiles' to convert all files\n" " in the directory; 'skip' to skip\n" " res: Input resolution of each image;\n" " assumed to all be the same\n" " type: compression used for non-image regions:\n" " 0: default (G4 encoding)\n" " 1: JPEG encoding\n" " 2: G4 encoding\n" " 3: PNG encoding\n" " thresh: threshold for binarization; use 0 for default\n" " boxaafile: Optional file of 'image' regions within\n" " each page. This contains a boxa for each\n" " page, consisting of a set of regions.\n" " Use 'skip' to skip.\n" " scalefactor: Use to scale down the image regions\n" " title: Use 'none' to omit\n" " fileout: Output pdf file\n"); return 1; } pagedir = argv[1]; pagesubstr = argv[2]; maskdir = argv[3]; masksubstr = argv[4]; res = atoi(argv[5]); type = atoi(argv[6]); thresh = atoi(argv[7]); boxaafile = argv[8]; scalefactor = atof(argv[9]); title = argv[10]; fileout = argv[11]; if (!strcmp(pagesubstr, "allfiles")) pagesubstr = NULL; if (!strcmp(maskdir, "skip")) maskdir = NULL; if (!strcmp(masksubstr, "allfiles")) masksubstr = NULL; if (scalefactor <= 0.0 || scalefactor > 1.0) { L_WARNING("invalid scalefactor: setting to 1.0\n", mainName); scalefactor = 1.0; } if (type != 1 && type != 2 && type != 3) type = L_G4_ENCODE; if (thresh <= 0) thresh = 150; if (!strcmp(title, "none")) title = NULL; if (maskdir) /* use this; ignore any input boxaafile */ baa = convertNumberedMasksToBoxaa(maskdir, masksubstr, 0, 0); else if (strcmp(boxaafile, "skip")) { /* use the boxaafile */ boxaapath = genPathname(boxaafile, NULL); baa = boxaaRead(boxaapath); lept_free(boxaapath); } else /* no maskdir and no input boxaafile */ baa = NULL; ret = convertSegmentedFilesToPdf(pagedir, pagesubstr, res, type, thresh, baa, 75, scalefactor, title, fileout); boxaaDestroy(&baa); return ret; } leptonica-1.70/prog/dewarprules.c0000644000175000017500000001407212240076030015153 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarprules.c * * A challenge was presented in: * http://stackoverflow.com/questions/10196198/how-to-remove-convexity-defects-in-sudoku-square/10226971#10226971 * * Solutions were given there using mathematica and opencv. */ #include "string.h" #include "allheaders.h" l_int32 main(int argc, char **argv) { l_int32 i, w, h, n; BOXA *boxa1; L_DEWARP *dew; L_DEWARPA *dewa; PIX *pixs, *pixd, *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7; PIX *pix8, *pix9, *pix10; PIXA *pixa1, *pixa2; if (argc != 1) { fprintf(stderr, " Syntax: dewarprules\n"); return 1; } #if 1 /* Extract the basic grid from the sudoku image */ pixs = pixRead("warped_sudoku.jpg"); pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixConvertTo1(pixs, 220); boxa1 = pixConnComp(pix1, &pixa1, 8); pixa2 = pixaSelectBySize(pixa1, 400, 400, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); pix2 = pixaDisplay(pixa2, w, h); /* grid */ pixDisplay(pix1, 600, 300); pixDisplay(pix2, 100, 100); #else /* Extract the grid from the graph paper image */ pixs = pixRead("warped_paper.jpg"); pixDisplay(pixs, 1500, 1000); pix3 = pixConvertTo8(pixs, 0); pix4 = pixBackgroundNormSimple(pix3, NULL, NULL); pix5 = pixGammaTRC(NULL, pix4, 1.0, 50, 200); pix1 = pixConvertTo1(pix5, 220); pixGetDimensions(pix1, &w, &h, NULL); boxa1 = pixConnComp(pix1, &pixa1, 8); pixa2 = pixaSelectBySize(pixa1, 400, 400, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); pix2 = pixaDisplay(pixa2, w, h); /* grid */ pixDisplay(pix1, 600, 300); pixDisplay(pix2, 600, 400); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); #endif #if 1 /* -------------------------------------------------------------------* * Use dewarpBuildLineModel() to correct using both horizontal * and vertical lines with one dew. * -------------------------------------------------------------------*/ dewa = dewarpaCreate(1, 30, 1, 4, 50); dewarpaSetCurvatures(dewa, 500, 0, 500, 100, 100); dewarpaUseBothArrays(dewa, 1); dew = dewarpCreate(pix2, 0); dewarpaInsertDewarp(dewa, dew); dewarpBuildLineModel(dew, 10, "/tmp/sud.pdf"); dewarpaApplyDisparity(dewa, 0, pix1, 255, 0, 0, &pix3, NULL); dewarpaApplyDisparity(dewa, 0, pix2, 255, 0, 0, &pix4, NULL); pixDisplay(pix3, 500, 100); pixDisplay(pix4, 600, 100); pixDestroy(&pix3); pixDestroy(&pix4); dewarpaDestroy(&dewa); #endif #if 0 /* -------------------------------------------------------------------* * Hack: use dewarpBuildPageModel() twice, first straightening * the horizontal lines, then rotating the result by 90 degrees * and doing it again, and finally rotating back by -90 degrees. * -------------------------------------------------------------------*/ /* Extract the horizontal lines */ pix3 = pixMorphSequence(pix2, "d1.3 + c6.1 + o8.1", 0); pixDisplay(pix3, 600, 100); /* Correct for vertical disparity */ dewa = dewarpaCreate(1, 30, 1, 4, 50); dewarpaSetCurvatures(dewa, 500, 0, 500, 100, 100); dewarpaUseBothArrays(dewa, 0); dew = dewarpCreate(pix3, 0); dewarpaInsertDewarp(dewa, dew); dewarpBuildPageModel(dew, "/tmp/sud1.pdf"); dewarpaApplyDisparity(dewa, 0, pix1, 255, 0, 0, &pix4, NULL); dewarpaApplyDisparity(dewa, 0, pix2, 255, 0, 0, &pix5, NULL); pixDisplay(pix4, 500, 100); pixDisplay(pix5, 600, 100); dewarpaDestroy(&dewa); /* Rotate result 90 degrees */ pix6 = pixRotateOrth(pix4, 1); pix7 = pixRotateOrth(pix5, 1); /* grid: vertical lines now are horiz */ /* Extract the vertical lines (which are now horizontal) */ pix8 = pixMorphSequence(pix7, "d1.3 + c6.1 + o8.1", 0); pixDisplay(pix8, 600, 500); /* Correct for vertical (now horizontal) disparity */ dewa = dewarpaCreate(1, 30, 1, 4, 50); dewarpaSetCurvatures(dewa, 500, 0, 500, 100, 100); dewarpaUseBothArrays(dewa, 0); dew = dewarpCreate(pix8, 0); dewarpaInsertDewarp(dewa, dew); dewarpBuildPageModel(dew, "/tmp/sud2.pdf"); dewarpaApplyDisparity(dewa, 0, pix6, 255, 0, 0, &pix9, NULL); dewarpaApplyDisparity(dewa, 0, pix8, 255, 0, 0, &pix10, NULL); pixd = pixRotateOrth(pix9, 3); pixDisplay(pix10, 600, 300); pixDisplay(pixd, 600, 700); #endif pixDestroy(&pixs); pixDestroy(&pix1); pixDestroy(&pix2); boxaDestroy(&boxa1); pixaDestroy(&pixa1); pixaDestroy(&pixa2); return 0; } leptonica-1.70/prog/maze_reg.c0000644000175000017500000001222612240302772014413 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * maze_reg.c * * Tests the functions in maze.c: binary and gray maze search, * largest rectangle in bg or fg. */ #include #include "allheaders.h" #define NPATHS 6 static const l_int32 x0[NPATHS] = {42, 73, 73, 42, 324, 471}; static const l_int32 y0[NPATHS] = {117, 319, 319, 117, 170, 201}; static const l_int32 x1[NPATHS] = {419, 419, 233, 326, 418, 128}; static const l_int32 y1[NPATHS] = {383, 383, 112, 168, 371, 341}; static const l_int32 NBOXES = 20; static const l_int32 POLARITY = 0; /* background */ int main(int argc, char **argv) { l_int32 i, w, h, bx, by, bw, bh, index, rval, gval, bval; BOX *box; BOXA *boxa; PIX *pixm, *pixs, *pixg, *pixt, *pixd; PIXA *pixa; PIXCMAP *cmap; PTA *pta; PTAA *ptaa; L_REGPARAMS *rp; if (regTestSetup(argc, argv, &rp)) return 1; pixa = pixaCreate(0); /* ---------------- Shortest path in binary maze ---------------- */ /* Generate the maze */ pixm = generateBinaryMaze(200, 200, 20, 20, 0.65, 0.25); pixd = pixExpandBinaryReplicate(pixm, 3); pixSaveTiledOutline(pixd, pixa, 1.0, 1, 20, 2, 32); pixDestroy(&pixd); /* Find the shortest path between two points */ pta = pixSearchBinaryMaze(pixm, 20, 20, 170, 170, NULL); pixt = pixDisplayPta(NULL, pixm, pta); pixd = pixScaleBySampling(pixt, 3., 3.); pixSaveTiledOutline(pixd, pixa, 1.0, 0, 20, 2, 32); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 0 */ ptaDestroy(&pta); pixDestroy(&pixt); pixDestroy(&pixd); pixDestroy(&pixm); /* ---------------- Shortest path in gray maze ---------------- */ pixg = pixRead("test8.jpg"); pixGetDimensions(pixg, &w, &h, NULL); ptaa = ptaaCreate(NPATHS); for (i = 0; i < NPATHS; i++) { if (x0[i] >= w || x1[i] >= w || y0[i] >= h || y1[i] >= h) { fprintf(stderr, "path %d extends beyond image; skipping\n", i); continue; } pta = pixSearchGrayMaze(pixg, x0[i], y0[i], x1[i], y1[i], NULL); ptaaAddPta(ptaa, pta, L_INSERT); } pixt = pixDisplayPtaa(pixg, ptaa); pixd = pixScaleBySampling(pixt, 2., 2.); pixSaveTiledOutline(pixd, pixa, 1.0, 1, 20, 2, 32); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 1 */ ptaaDestroy(&ptaa); pixDestroy(&pixg); pixDestroy(&pixt); pixDestroy(&pixd); /* ---------------- Largest rectangles in image ---------------- */ pixs = pixRead("test1.png"); pixd = pixConvertTo8(pixs, FALSE); cmap = pixcmapCreateRandom(8, 1, 1); pixSetColormap(pixd, cmap); boxa = boxaCreate(0); for (i = 0; i < NBOXES; i++) { pixFindLargestRectangle(pixs, POLARITY, &box, NULL); boxGetGeometry(box, &bx, &by, &bw, &bh); pixSetInRect(pixs, box); fprintf(stderr, "bx = %5d, by = %5d, bw = %5d, bh = %5d, area = %d\n", bx, by, bw, bh, bw * bh); boxaAddBox(boxa, box, L_INSERT); } for (i = 0; i < NBOXES; i++) { index = 32 + (i & 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); box = boxaGetBox(boxa, i, L_CLONE); pixRenderHashBoxArb(pixd, box, 6, 2, L_NEG_SLOPE_LINE, 1, rval, gval, bval); boxDestroy(&box); } pixSaveTiledOutline(pixd, pixa, 1.0, 1, 20, 2, 32); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 2 */ pixDestroy(&pixs); pixDestroy(&pixd); boxaDestroy(&boxa); pixd = pixaDisplay(pixa, 0, 0); regTestWritePixAndCheck(rp, pixd, IFF_PNG); /* 3 */ pixDisplayWithTitle(pixd, 100, 100, NULL, rp->display); pixDestroy(&pixd); pixaDestroy(&pixa); return regTestCleanup(rp); } leptonica-1.70/src/0000755000175000017500000000000012274453055012303 5ustar dandanleptonica-1.70/src/allheaders_top.txt0000644000175000017500000000323511722537063016034 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_ALLHEADERS_H #define LEPTONICA_ALLHEADERS_H #define LIBLEPT_MAJOR_VERSION 1 #define LIBLEPT_MINOR_VERSION 70 #include "alltypes.h" #ifndef NO_PROTOS leptonica-1.70/src/ptra.c0000644000175000017500000007337312244230002013410 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ptra.c * * Ptra creation and destruction * L_PTRA *ptraCreate() * void *ptraDestroy() * * Add/insert/remove/replace generic ptr object * l_int32 ptraAdd() * static l_int32 ptraExtendArray() * l_int32 ptraInsert() * void *ptraRemove() * void *ptraRemoveLast() * void *ptraReplace() * l_int32 ptraSwap() * l_int32 ptraCompactArray() * * Other array operations * l_int32 ptraReverse() * l_int32 ptraJoin() * * Simple Ptra accessors * l_int32 ptraGetMaxIndex() * l_int32 ptraGetActualCount() * void *ptraGetPtrToItem() * * Ptraa creation and destruction * L_PTRAA *ptraaCreate() * void *ptraaDestroy() * * Ptraa accessors * l_int32 ptraaGetSize() * l_int32 ptraaInsertPtra() * L_PTRA *ptraaGetPtra() * * Ptraa conversion * L_PTRA *ptraaFlattenToPtra() * * Notes on the Ptra: * * (1) The Ptra is a struct, not an array. Always use the accessors * in this file, never the fields directly. * (2) Items can be placed anywhere in the allocated ptr array, * including one index beyond the last ptr (in which case the * ptr array is realloc'd). * (3) Thus, the items on the ptr array need not be compacted. In * general there will be null pointers in the ptr array. * (4) A compacted array will remain compacted on removal if * arbitrary items are removed with compaction, or if items * are removed from the end of the array. * (5) For addition to and removal from the end of the array, this * functions exactly like a stack, and with the same O(1) cost. * (6) This differs from the generic stack in that we allow * random access for insertion, removal and replacement. * Removal can be done without compacting the array. * Insertion into a null ptr in the array has no effect on * the other pointers, but insertion into a location already * occupied by an item has a cost proportional to the * distance to the next null ptr in the array. * (7) Null ptrs are valid input args for both insertion and * replacement; this allows arbitrary swapping. * (8) The item in the array with the largest index is at pa->imax. * This can be any value from -1 (initialized; all array ptrs * are null) up to pa->nalloc - 1 (the last ptr in the array). * (9) In referring to the array: the first ptr is the "top" or * "beginning"; the last pointer is the "bottom" or "end"; * items are shifted "up" towards the top when compaction occurs; * and items are shifted "down" towards the bottom when forced to * move due to an insertion. * (10) It should be emphasized that insertion, removal and replacement * are general: * * You can insert an item into any ptr location in the * allocated ptr array, as well as into the next ptr address * beyond the allocated array (in which case a realloc will occur). * * You can remove or replace an item from any ptr location * in the allocated ptr array. * * When inserting into an occupied location, you have * three options for downshifting. * * When removing, you can either leave the ptr null or * compact the array. * * Notes on the Ptraa: * * (1) The Ptraa is a fixed size ptr array for holding Ptra. * In that respect, it is different from other pointer arrays, which * are extensible and grow using the *Add*() functions. * (2) In general, the Ptra ptrs in the Ptraa can be randomly occupied. * A typical usage is to allow an O(n) horizontal sort of Pix, * where the size of the Ptra array is the width of the image, * and each Ptra is an array of all the Pix at a specific x location. */ #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'importe quoi */ /* Static function */ static l_int32 ptraExtendArray(L_PTRA *pa); /*--------------------------------------------------------------------------* * Ptra creation and destruction * *--------------------------------------------------------------------------*/ /*! * ptraCreate() * * Input: size of ptr array to be alloc'd (0 for default) * Return: pa, or null on error */ L_PTRA * ptraCreate(l_int32 n) { L_PTRA *pa; PROCNAME("ptraCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((pa = (L_PTRA *)CALLOC(1, sizeof(L_PTRA))) == NULL) return (L_PTRA *)ERROR_PTR("pa not made", procName, NULL); if ((pa->array = (void **)CALLOC(n, sizeof(void *))) == NULL) return (L_PTRA *)ERROR_PTR("ptr array not made", procName, NULL); pa->nalloc = n; pa->imax = -1; pa->nactual = 0; return pa; } /*! * ptraDestroy() * * Input: &ptra () * freeflag (TRUE to free each remaining item in the array) * warnflag (TRUE to warn if any remaining items are not destroyed) * Return: void * * Notes: * (1) If @freeflag == TRUE, frees each item in the array. * (2) If @freeflag == FALSE and warnflag == TRUE, and there are * items on the array, this gives a warning and destroys the array. * If these items are not owned elsewhere, this will cause * a memory leak of all the items that were on the array. * So if the items are not owned elsewhere and require their * own destroy function, they must be destroyed before the ptra. * (3) If warnflag == FALSE, no warnings will be issued. This is * useful if the items are owned elsewhere, such as a * PixMemoryStore(). * (4) To destroy the ptra, we destroy the ptr array, then * the ptra, and then null the contents of the input ptr. */ void ptraDestroy(L_PTRA **ppa, l_int32 freeflag, l_int32 warnflag) { l_int32 i, nactual; void *item; L_PTRA *pa; PROCNAME("ptraDestroy"); if (ppa == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((pa = *ppa) == NULL) return; ptraGetActualCount(pa, &nactual); if (nactual > 0) { if (freeflag) { for (i = 0; i <= pa->imax; i++) { if ((item = ptraRemove(pa, i, L_NO_COMPACTION)) != NULL) FREE(item); } } else if (warnflag) { L_WARNING("potential memory leak of %d items in ptra\n", procName, nactual); } } FREE(pa->array); FREE(pa); *ppa = NULL; return; } /*--------------------------------------------------------------------------* * Add/insert/remove/replace generic ptr object * *--------------------------------------------------------------------------*/ /*! * ptraAdd() * * Input: ptra * item (generic ptr to a struct) * Return: 0 if OK, 1 on error * * Notes: * (1) This adds the element to the next location beyond imax, * which is the largest occupied ptr in the array. This is * what you expect from a stack, where all ptrs up to and * including imax are occupied, but here the occuption of * items in the array is entirely arbitrary. */ l_int32 ptraAdd(L_PTRA *pa, void *item) { l_int32 imax; PROCNAME("ptraAdd"); if (!pa) return ERROR_INT("pa not defined", procName, 1); if (!item) return ERROR_INT("item not defined", procName, 1); ptraGetMaxIndex(pa, &imax); if (imax >= pa->nalloc - 1 && ptraExtendArray(pa)) return ERROR_INT("extension failure", procName, 1); pa->array[imax + 1] = (void *)item; pa->imax++; pa->nactual++; return 0; } /*! * ptraExtendArray() * * Input: ptra * Return: 0 if OK, 1 on error */ static l_int32 ptraExtendArray(L_PTRA *pa) { PROCNAME("ptraExtendArray"); if (!pa) return ERROR_INT("pa not defined", procName, 1); if ((pa->array = (void **)reallocNew((void **)&pa->array, sizeof(void *) * pa->nalloc, 2 * sizeof(void *) * pa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); pa->nalloc *= 2; return 0; } /*! * ptraInsert() * * Input: ptra * index (location in ptra to insert new value) * item (generic ptr to a struct; can be null) * shiftflag (L_AUTO_DOWNSHIFT, L_MIN_DOWNSHIFT, L_FULL_DOWNSHIFT) * Return: 0 if OK, 1 on error * * Notes: * (1) This checks first to see if the location is valid, and * then if there is presently an item there. If there is not, * it is simply inserted into that location. * (2) If there is an item at the insert location, items must be * moved down to make room for the insert. In the downward * shift there are three options, given by @shiftflag. * - If @shiftflag == L_AUTO_DOWNSHIFT, a decision is made * whether, in a cascade of items, to downshift a minimum * amount or for all items above @index. The decision is * based on the expectation of finding holes (null ptrs) * between @index and the bottom of the array. * Assuming the holes are distributed uniformly, if 2 or more * holes are expected, we do a minimum shift. * - If @shiftflag == L_MIN_DOWNSHIFT, the downward shifting * cascade of items progresses a minimum amount, until * the first empty slot is reached. This mode requires * some computation before the actual shifting is done. * - If @shiftflag == L_FULL_DOWNSHIFT, a shifting cascade is * performed where pa[i] --> pa[i + 1] for all i >= index. * Then, the item is inserted at pa[index]. * (3) If you are not using L_AUTO_DOWNSHIFT, the rule of thumb is * to use L_FULL_DOWNSHIFT if the array is compacted (each * element points to an item), and to use L_MIN_DOWNSHIFT * if there are a significant number of null pointers. * There is no penalty to using L_MIN_DOWNSHIFT for a * compacted array, however, because the full shift is required * and we don't do the O(n) computation to look for holes. * (4) This should not be used repeatedly on large arrays, * because the function is generally O(n). * (5) However, it can be used repeatedly if we start with an empty * ptr array and insert only once at each location. For example, * you can support an array of Numa, where at each ptr location * you store either 0 or 1 Numa, and the Numa can be added * randomly to the ptr array. */ l_int32 ptraInsert(L_PTRA *pa, l_int32 index, void *item, l_int32 shiftflag) { l_int32 i, ihole, imax; l_float32 nexpected; PROCNAME("ptraInsert"); if (!pa) return ERROR_INT("pa not defined", procName, 1); if (index < 0 || index > pa->nalloc) return ERROR_INT("index not in [0 ... nalloc]", procName, 1); if (shiftflag != L_AUTO_DOWNSHIFT && shiftflag != L_MIN_DOWNSHIFT && shiftflag != L_FULL_DOWNSHIFT) return ERROR_INT("invalid shiftflag", procName, 1); if (item) pa->nactual++; if (index == pa->nalloc) { /* can happen when index == n */ if (ptraExtendArray(pa)) return ERROR_INT("extension failure", procName, 1); } /* We are inserting into a hole or adding to the end of the array. * No existing items are moved. */ ptraGetMaxIndex(pa, &imax); if (pa->array[index] == NULL) { pa->array[index] = item; if (item && index > imax) /* new item put beyond max so far */ pa->imax = index; return 0; } /* We are inserting at the location of an existing item, * forcing the existing item and those below to shift down. * First, extend the array automatically if the last element * (nalloc - 1) is occupied (imax). This may not be necessary * in every situation, but only an anomalous sequence of insertions * into the array would cause extra ptr allocation. */ if (imax >= pa->nalloc - 1 && ptraExtendArray(pa)) return ERROR_INT("extension failure", procName, 1); /* If there are no holes, do a full downshift. * Otherwise, if L_AUTO_DOWNSHIFT, use the expected number * of holes between index and n to determine the shift mode */ if (imax + 1 == pa->nactual) { shiftflag = L_FULL_DOWNSHIFT; } else if (shiftflag == L_AUTO_DOWNSHIFT) { if (imax < 10) { shiftflag = L_FULL_DOWNSHIFT; /* no big deal */ } else { nexpected = (l_float32)(imax - pa->nactual) * (l_float32)((imax - index) / imax); shiftflag = (nexpected > 2.0) ? L_MIN_DOWNSHIFT : L_FULL_DOWNSHIFT; } } if (shiftflag == L_MIN_DOWNSHIFT) { /* run down looking for a hole */ for (ihole = index + 1; ihole <= imax; ihole++) { if (pa->array[ihole] == NULL) break; } } else { /* L_FULL_DOWNSHIFT */ ihole = imax + 1; } for (i = ihole; i > index; i--) pa->array[i] = pa->array[i - 1]; pa->array[index] = (void *)item; if (ihole == imax + 1) /* the last item was shifted down */ pa->imax++; return 0; } /*! * ptraRemove() * * Input: ptra * index (element to be removed) * flag (L_NO_COMPACTION, L_COMPACTION) * Return: item, or null on error * * Notes: * (1) If flag == L_NO_COMPACTION, this removes the item and * nulls the ptr on the array. If it takes the last item * in the array, pa->n is reduced to the next item. * (2) If flag == L_COMPACTION, this compacts the array for * for all i >= index. It should not be used repeatedly on * large arrays, because compaction is O(n). * (3) The ability to remove without automatic compaction allows * removal with cost O(1). */ void * ptraRemove(L_PTRA *pa, l_int32 index, l_int32 flag) { l_int32 i, imax, fromend, icurrent; void *item; PROCNAME("ptraRemove"); if (!pa) return (void *)ERROR_PTR("pa not defined", procName, NULL); ptraGetMaxIndex(pa, &imax); if (index < 0 || index > imax) return (void *)ERROR_PTR("index not in [0 ... imax]", procName, NULL); item = pa->array[index]; if (item) pa->nactual--; pa->array[index] = NULL; /* If we took the last item, need to reduce pa->n */ fromend = (index == imax); if (fromend) { for (i = index - 1; i >= 0; i--) { if (pa->array[i]) break; } pa->imax = i; } /* Compact from index to the end of the array */ if (!fromend && flag == L_COMPACTION) { for (icurrent = index, i = index + 1; i <= imax; i++) { if (pa->array[i]) pa->array[icurrent++] = pa->array[i]; } pa->imax = icurrent - 1; } return item; } /*! * ptraRemoveLast() * * Input: ptra * Return: item, or null on error or if the array is empty */ void * ptraRemoveLast(L_PTRA *pa) { l_int32 imax; PROCNAME("ptraRemoveLast"); if (!pa) return (void *)ERROR_PTR("pa not defined", procName, NULL); /* Remove the last item in the array. No compaction is required. */ ptraGetMaxIndex(pa, &imax); if (imax >= 0) return ptraRemove(pa, imax, L_NO_COMPACTION); else /* empty */ return NULL; } /*! * ptraReplace() * * Input: ptra * index (element to be replaced) * item (new generic ptr to a struct; can be null) * freeflag (TRUE to free old item; FALSE to return it) * Return: item (old item, if it exists and is not freed), * or null on error */ void * ptraReplace(L_PTRA *pa, l_int32 index, void *item, l_int32 freeflag) { l_int32 imax; void *olditem; PROCNAME("ptraReplace"); if (!pa) return (void *)ERROR_PTR("pa not defined", procName, NULL); ptraGetMaxIndex(pa, &imax); if (index < 0 || index > imax) return (void *)ERROR_PTR("index not in [0 ... imax]", procName, NULL); olditem = pa->array[index]; pa->array[index] = item; if (!item && olditem) pa->nactual--; else if (item && !olditem) pa->nactual++; if (freeflag == FALSE) return olditem; if (olditem) FREE(olditem); return NULL; } /*! * ptraSwap() * * Input: ptra * index1 * index2 * Return: 0 if OK, 1 on error */ l_int32 ptraSwap(L_PTRA *pa, l_int32 index1, l_int32 index2) { l_int32 imax; void *item; PROCNAME("ptraSwap"); if (!pa) return ERROR_INT("pa not defined", procName, 1); if (index1 == index2) return 0; ptraGetMaxIndex(pa, &imax); if (index1 < 0 || index1 > imax || index2 < 0 || index2 > imax) return ERROR_INT("invalid index: not in [0 ... imax]", procName, 1); item = ptraRemove(pa, index1, L_NO_COMPACTION); item = ptraReplace(pa, index2, item, FALSE); ptraInsert(pa, index1, item, L_MIN_DOWNSHIFT); return 0; } /*! * ptraCompactArray() * * Input: ptra * Return: 0 if OK, 1 on error * * Notes: * (1) This compacts the items on the array, filling any empty ptrs. * (2) This does not change the size of the array of ptrs. */ l_int32 ptraCompactArray(L_PTRA *pa) { l_int32 i, imax, nactual, index; PROCNAME("ptraCompactArray"); if (!pa) return ERROR_INT("pa not defined", procName, 1); ptraGetMaxIndex(pa, &imax); ptraGetActualCount(pa, &nactual); if (imax + 1 == nactual) return 0; /* Compact the array */ for (i = 0, index = 0; i <= imax; i++) { if (pa->array[i]) pa->array[index++] = pa->array[i]; } pa->imax = index - 1; if (nactual != index) L_ERROR("index = %d; != nactual\n", procName, index); return 0; } /*----------------------------------------------------------------------* * Other array operations * *----------------------------------------------------------------------*/ /*! * ptraReverse() * * Input: ptra * Return: 0 if OK, 1 on error */ l_int32 ptraReverse(L_PTRA *pa) { l_int32 i, imax; PROCNAME("ptraReverse"); if (!pa) return ERROR_INT("pa not defined", procName, 1); ptraGetMaxIndex(pa, &imax); for (i = 0; i < (imax + 1) / 2; i++) ptraSwap(pa, i, imax - i); return 0; } /*! * ptraJoin() * * Input: ptra1 (add to this one) * ptra2 (appended to ptra1, and emptied of items; can be null) * Return: 0 if OK, 1 on error */ l_int32 ptraJoin(L_PTRA *pa1, L_PTRA *pa2) { l_int32 i, imax; void *item; PROCNAME("ptraJoin"); if (!pa1) return ERROR_INT("pa1 not defined", procName, 1); if (!pa2) return 0; ptraGetMaxIndex(pa2, &imax); for (i = 0; i <= imax; i++) { item = ptraRemove(pa2, i, L_NO_COMPACTION); ptraAdd(pa1, item); } return 0; } /*----------------------------------------------------------------------* * Simple ptra accessors * *----------------------------------------------------------------------*/ /*! * ptraGetMaxIndex() * * Input: ptra * &maxindex ( index of last item in the array); * Return: 0 if OK; 1 on error * * Notes: * (1) The largest index to an item in the array is @maxindex. * @maxindex is one less than the number of items that would be * in the array if there were no null pointers between 0 * and @maxindex - 1. However, because the internal ptr array * need not be compacted, there may be null pointers at * indices below @maxindex; for example, if items have * been removed. * (2) When an item is added to the end of the array, it goes * into pa->array[maxindex + 1], and maxindex is then * incremented by 1. * (3) If there are no items in the array, this returns @maxindex = -1. */ l_int32 ptraGetMaxIndex(L_PTRA *pa, l_int32 *pmaxindex) { PROCNAME("ptraGetMaxIndex"); if (!pa) return ERROR_INT("pa not defined", procName, 1); if (!pmaxindex) return ERROR_INT("&maxindex not defined", procName, 1); *pmaxindex = pa->imax; return 0; } /*! * ptraGetActualCount() * * Input: ptra * &count ( actual number of items on the ptr array) * Return: 0 if OK; 1 on error * * Notes: * (1) The actual number of items on the ptr array, pa->nactual, * will be smaller than pa->n if the array is not compacted. */ l_int32 ptraGetActualCount(L_PTRA *pa, l_int32 *pcount) { PROCNAME("ptraGetActualCount"); if (!pa) return ERROR_INT("pa not defined", procName, 1); if (!pcount) return ERROR_INT("&count not defined", procName, 1); *pcount = pa->nactual; return 0; } /*! * ptraGetPtrToItem() * * Input: ptra * index (of element to be retrieved) * Return: a ptr to the element, or null on error * * Notes: * (1) This returns a ptr to the item. You must cast it to * the type of item. Do not destroy it; the item belongs * to the Ptra. * (2) This can access all possible items on the ptr array. * If an item doesn't exist, it returns null. */ void * ptraGetPtrToItem(L_PTRA *pa, l_int32 index) { PROCNAME("ptraGetPtrToItem"); if (!pa) return (void *)ERROR_PTR("pa not defined", procName, NULL); if (index < 0 || index >= pa->nalloc) return (void *)ERROR_PTR("index not in [0 ... nalloc-1]", procName, NULL); return pa->array[index]; } /*--------------------------------------------------------------------------* * Ptraa creation and destruction * *--------------------------------------------------------------------------*/ /*! * ptraaCreate() * * Input: size of ptr array to be alloc'd * Return: paa, or null on error * * Notes: * (1) The ptraa is generated with a fixed size, that can not change. * The ptra can be generated and inserted randomly into this array. */ L_PTRAA * ptraaCreate(l_int32 n) { L_PTRAA *paa; PROCNAME("ptraaCreate"); if (n <= 0) return (L_PTRAA *)ERROR_PTR("n must be > 0", procName, NULL); if ((paa = (L_PTRAA *)CALLOC(1, sizeof(L_PTRAA))) == NULL) return (L_PTRAA *)ERROR_PTR("paa not made", procName, NULL); if ((paa->ptra = (L_PTRA **)CALLOC(n, sizeof(L_PTRA *))) == NULL) return (L_PTRAA *)ERROR_PTR("ptr array not made", procName, NULL); paa->nalloc = n; return paa; } /*! * ptraaDestroy() * * Input: &paa () * freeflag (TRUE to free each remaining item in each ptra) * warnflag (TRUE to warn if any remaining items are not destroyed) * Return: void * * Notes: * (1) See ptraDestroy() for use of @freeflag and @warnflag. * (2) To destroy the ptraa, we destroy each ptra, then the ptr array, * then the ptraa, and then null the contents of the input ptr. */ void ptraaDestroy(L_PTRAA **ppaa, l_int32 freeflag, l_int32 warnflag) { l_int32 i, n; L_PTRA *pa; L_PTRAA *paa; PROCNAME("ptraaDestroy"); if (ppaa == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((paa = *ppaa) == NULL) return; ptraaGetSize(paa, &n); for (i = 0; i < n; i++) { pa = ptraaGetPtra(paa, i, L_REMOVE); ptraDestroy(&pa, freeflag, warnflag); } FREE(paa->ptra); FREE(paa); *ppaa = NULL; return; } /*--------------------------------------------------------------------------* * Ptraa accessors * *--------------------------------------------------------------------------*/ /*! * ptraaGetSize() * * Input: ptraa * &size ( size of ptr array) * Return: 0 if OK; 1 on error */ l_int32 ptraaGetSize(L_PTRAA *paa, l_int32 *psize) { PROCNAME("ptraaGetSize"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (!psize) return ERROR_INT("&size not defined", procName, 1); *psize = paa->nalloc; return 0; } /*! * ptraaInsertPtra() * * Input: ptraa * index (location in array for insertion) * ptra (to be inserted) * Return: 0 if OK; 1 on error * * Notes: * (1) Caller should check return value. On success, the Ptra * is inserted in the Ptraa and is owned by it. However, * on error, the Ptra remains owned by the caller. */ l_int32 ptraaInsertPtra(L_PTRAA *paa, l_int32 index, L_PTRA *pa) { l_int32 n; PROCNAME("ptraaInsertPtra"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (!pa) return ERROR_INT("pa not defined", procName, 1); ptraaGetSize(paa, &n); if (index < 0 || index >= n) return ERROR_INT("invalid index", procName, 1); if (paa->ptra[index] != NULL) return ERROR_INT("ptra alread stored at index", procName, 1); paa->ptra[index] = pa; return 0; } /*! * ptraaGetPtra() * * Input: ptraa * index (location in array) * accessflag (L_HANDLE_ONLY, L_REMOVE) * Return: ptra (at index location), or NULL on error or if there * is no ptra there. * * Notes: * (1) This returns the ptra ptr. If @accessflag == L_HANDLE_ONLY, * the ptra is left on the ptraa. If @accessflag == L_REMOVE, * the ptr in the ptraa is set to NULL, and the caller * is responsible for disposing of the ptra (either putting it * back on the ptraa, or destroying it). * (2) This returns NULL if there is no Ptra at the index location. */ L_PTRA * ptraaGetPtra(L_PTRAA *paa, l_int32 index, l_int32 accessflag) { l_int32 n; L_PTRA *pa; PROCNAME("ptraaGetPtra"); if (!paa) return (L_PTRA *)ERROR_PTR("paa not defined", procName, NULL); ptraaGetSize(paa, &n); if (index < 0 || index >= n) return (L_PTRA *)ERROR_PTR("invalid index", procName, NULL); if (accessflag != L_HANDLE_ONLY && accessflag != L_REMOVE) return (L_PTRA *)ERROR_PTR("invalid accessflag", procName, NULL); pa = paa->ptra[index]; if (accessflag == L_REMOVE) paa->ptra[index] = NULL; return pa; } /*--------------------------------------------------------------------------* * Ptraa conversion * *--------------------------------------------------------------------------*/ /*! * ptraaFlattenToPtra() * * Input: ptraa * Return: ptra, or null on error * * Notes: * (1) This 'flattens' the ptraa to a ptra, taking the items in * each ptra, in order, starting with the first ptra, etc. * (2) As a side-effect, the ptra are all removed from the ptraa * and destroyed, leaving an empty ptraa. */ L_PTRA * ptraaFlattenToPtra(L_PTRAA *paa) { l_int32 i, n; L_PTRA *pat, *pad; PROCNAME("ptraaFlattenToPtra"); if (!paa) return (L_PTRA *)ERROR_PTR("paa not defined", procName, NULL); pad = ptraCreate(0); ptraaGetSize(paa, &n); for (i = 0; i < n; i++) { pat = ptraaGetPtra(paa, i, L_REMOVE); if (!pat) continue; ptraJoin(pad, pat); ptraDestroy(&pat, FALSE, FALSE); /* they're all empty */ } return pad; } leptonica-1.70/src/pixabasic.c0000664000175000017500000020733312263572756014434 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixabasic.c * * Pixa creation, destruction, copying * PIXA *pixaCreate() * PIXA *pixaCreateFromPix() * PIXA *pixaCreateFromBoxa() * PIXA *pixaSplitPix() * void pixaDestroy() * PIXA *pixaCopy() * * Pixa addition * l_int32 pixaAddPix() * l_int32 pixaAddBox() * static l_int32 pixaExtendArray() * l_int32 pixaExtendArrayToSize() * * Pixa accessors * l_int32 pixaGetCount() * l_int32 pixaChangeRefcount() * PIX *pixaGetPix() * l_int32 pixaGetPixDimensions() * PIX *pixaGetBoxa() * l_int32 pixaGetBoxaCount() * BOX *pixaGetBox() * l_int32 pixaGetBoxGeometry() * l_int32 pixaSetBoxa() * PIX **pixaGetPixArray() * l_int32 pixaVerifyDepth() * l_int32 pixaIsFull() * l_int32 pixaCountText() * void ***pixaGetLinePtrs() * * Pixa array modifiers * l_int32 pixaReplacePix() * l_int32 pixaInsertPix() * l_int32 pixaRemovePix() * l_int32 pixaRemovePixAndSave() * l_int32 pixaInitFull() * l_int32 pixaClear() * * Pixa and Pixaa combination * l_int32 pixaJoin() * l_int32 pixaaJoin() * * Pixaa creation, destruction * PIXAA *pixaaCreate() * PIXAA *pixaaCreateFromPixa() * void pixaaDestroy() * * Pixaa addition * l_int32 pixaaAddPixa() * l_int32 pixaaExtendArray() * l_int32 pixaaAddPix() * l_int32 pixaaAddBox() * * Pixaa accessors * l_int32 pixaaGetCount() * PIXA *pixaaGetPixa() * BOXA *pixaaGetBoxa() * PIX *pixaaGetPix() * l_int32 pixaaVerifyDepth() * l_int32 pixaaIsFull() * * Pixaa array modifiers * l_int32 pixaaInitFull() * l_int32 pixaaReplacePixa() * l_int32 pixaaClear() * l_int32 pixaaTruncate() * * Pixa serialized I/O (requires png support) * PIXA *pixaRead() * PIXA *pixaReadStream() * l_int32 pixaWrite() * l_int32 pixaWriteStream() * * Pixaa serialized I/O (requires png support) * PIXAA *pixaaReadFromFiles() * PIXAA *pixaaRead() * PIXAA *pixaaReadStream() * l_int32 pixaaWrite() * l_int32 pixaaWriteStream() * * * Important note on reference counting: * Reference counting for the Pixa is analogous to that for the Boxa. * See pix.h for details. pixaCopy() provides three possible modes * of copy. The basic rule is that however a Pixa is obtained * (e.g., from pixaCreate*(), pixaCopy(), or a Pixaa accessor), * it is necessary to call pixaDestroy() on it. */ #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ /* Static functions */ static l_int32 pixaExtendArray(PIXA *pixa); /*---------------------------------------------------------------------* * Pixa creation, destruction, copy * *---------------------------------------------------------------------*/ /*! * pixaCreate() * * Input: n (initial number of ptrs) * Return: pixa, or null on error */ PIXA * pixaCreate(l_int32 n) { PIXA *pixa; PROCNAME("pixaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((pixa = (PIXA *)CALLOC(1, sizeof(PIXA))) == NULL) return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); pixa->n = 0; pixa->nalloc = n; pixa->refcount = 1; if ((pixa->pix = (PIX **)CALLOC(n, sizeof(PIX *))) == NULL) return (PIXA *)ERROR_PTR("pix ptrs not made", procName, NULL); if ((pixa->boxa = boxaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("boxa not made", procName, NULL); return pixa; } /*! * pixaCreateFromPix() * * Input: pixs (with individual components on a lattice) * n (number of components) * cellw (width of each cell) * cellh (height of each cell) * Return: pixa, or null on error * * Notes: * (1) For bpp = 1, we truncate each retrieved pix to the ON * pixels, which we assume for now start at (0,0) */ PIXA * pixaCreateFromPix(PIX *pixs, l_int32 n, l_int32 cellw, l_int32 cellh) { l_int32 w, h, d, nw, nh, i, j, index; PIX *pix, *pixt; PIXA *pixa; PROCNAME("pixaCreateFromPix"); if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); if (n <= 0) return (PIXA *)ERROR_PTR("n must be > 0", procName, NULL); if ((pixa = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if ((pixt = pixCreate(cellw, cellh, d)) == NULL) return (PIXA *)ERROR_PTR("pixt not made", procName, NULL); nw = (w + cellw - 1) / cellw; nh = (h + cellh - 1) / cellh; for (i = 0, index = 0; i < nh; i++) { for (j = 0; j < nw && index < n; j++, index++) { pixRasterop(pixt, 0, 0, cellw, cellh, PIX_SRC, pixs, j * cellw, i * cellh); if (d == 1 && !pixClipToForeground(pixt, &pix, NULL)) pixaAddPix(pixa, pix, L_INSERT); else pixaAddPix(pixa, pixt, L_COPY); } } pixDestroy(&pixt); return pixa; } /*! * pixaCreateFromBoxa() * * Input: pixs * boxa * &cropwarn ( TRUE if the boxa extent * is larger than pixs. * Return: pixad, or null on error * * Notes: * (1) This simply extracts from pixs the region corresponding to each * box in the boxa. * (2) The 3rd arg is optional. If the extent of the boxa exceeds the * size of the pixa, so that some boxes are either clipped * or entirely outside the pix, a warning is returned as TRUE. * (3) pixad will have only the properly clipped elements, and * the internal boxa will be correct. */ PIXA * pixaCreateFromBoxa(PIX *pixs, BOXA *boxa, l_int32 *pcropwarn) { l_int32 i, n, w, h, wbox, hbox, cropwarn; BOX *box, *boxc; PIX *pixd; PIXA *pixad; PROCNAME("pixaCreateFromBoxa"); if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIXA *)ERROR_PTR("boxa not defined", procName, NULL); n = boxaGetCount(boxa); if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); boxaGetExtent(boxa, &wbox, &hbox, NULL); pixGetDimensions(pixs, &w, &h, NULL); cropwarn = FALSE; if (wbox > w || hbox > h) cropwarn = TRUE; if (pcropwarn) *pcropwarn = cropwarn; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_COPY); if (cropwarn) { /* if box is outside pixs, pixd is NULL */ pixd = pixClipRectangle(pixs, box, &boxc); /* may be NULL */ if (pixd) { pixaAddPix(pixad, pixd, L_INSERT); pixaAddBox(pixad, boxc, L_INSERT); } boxDestroy(&box); } else { pixd = pixClipRectangle(pixs, box, NULL); pixaAddPix(pixad, pixd, L_INSERT); pixaAddBox(pixad, box, L_INSERT); } } return pixad; } /*! * pixaSplitPix() * * Input: pixs (with individual components on a lattice) * nx (number of mosaic cells horizontally) * ny (number of mosaic cells vertically) * borderwidth (of added border on all sides) * bordercolor (in our RGBA format: 0xrrggbbaa) * Return: pixa, or null on error * * Notes: * (1) This is a variant on pixaCreateFromPix(), where we * simply divide the image up into (approximately) equal * subunits. If you want the subimages to have essentially * the same aspect ratio as the input pix, use nx = ny. * (2) If borderwidth is 0, we ignore the input bordercolor and * redefine it to white. * (3) The bordercolor is always used to initialize each tiled pix, * so that if the src is clipped, the unblitted part will * be this color. This avoids 1 pixel wide black stripes at the * left and lower edges. */ PIXA * pixaSplitPix(PIX *pixs, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor) { l_int32 w, h, d, cellw, cellh, i, j; PIX *pixt; PIXA *pixa; PROCNAME("pixaSplitPix"); if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); if (nx <= 0 || ny <= 0) return (PIXA *)ERROR_PTR("nx and ny must be > 0", procName, NULL); borderwidth = L_MAX(0, borderwidth); if ((pixa = pixaCreate(nx * ny)) == NULL) return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); cellw = (w + nx - 1) / nx; /* round up */ cellh = (h + ny - 1) / ny; for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { if ((pixt = pixCreate(cellw + 2 * borderwidth, cellh + 2 * borderwidth, d)) == NULL) return (PIXA *)ERROR_PTR("pixt not made", procName, NULL); pixCopyColormap(pixt, pixs); if (borderwidth == 0) { /* initialize full image to white */ if (d == 1) pixClearAll(pixt); else pixSetAll(pixt); } else { pixSetAllArbitrary(pixt, bordercolor); } pixRasterop(pixt, borderwidth, borderwidth, cellw, cellh, PIX_SRC, pixs, j * cellw, i * cellh); pixaAddPix(pixa, pixt, L_INSERT); } } return pixa; } /*! * pixaDestroy() * * Input: &pixa () * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the pixa. * (2) Always nulls the input ptr. */ void pixaDestroy(PIXA **ppixa) { l_int32 i; PIXA *pixa; PROCNAME("pixaDestroy"); if (ppixa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((pixa = *ppixa) == NULL) return; /* Decrement the refcount. If it is 0, destroy the pixa. */ pixaChangeRefcount(pixa, -1); if (pixa->refcount <= 0) { for (i = 0; i < pixa->n; i++) pixDestroy(&pixa->pix[i]); FREE(pixa->pix); boxaDestroy(&pixa->boxa); FREE(pixa); } *ppixa = NULL; return; } /*! * pixaCopy() * * Input: pixas * copyflag (see pix.h for details): * L_COPY makes a new pixa and copies each pix and each box * L_CLONE gives a new ref-counted handle to the input pixa * L_COPY_CLONE makes a new pixa and inserts clones of * all pix and boxes * Return: new pixa, or null on error */ PIXA * pixaCopy(PIXA *pixa, l_int32 copyflag) { l_int32 i; BOX *boxc; PIX *pixc; PIXA *pixac; PROCNAME("pixaCopy"); if (!pixa) return (PIXA *)ERROR_PTR("pixa not defined", procName, NULL); if (copyflag == L_CLONE) { pixaChangeRefcount(pixa, 1); return pixa; } if (copyflag != L_COPY && copyflag != L_COPY_CLONE) return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); if ((pixac = pixaCreate(pixa->n)) == NULL) return (PIXA *)ERROR_PTR("pixac not made", procName, NULL); for (i = 0; i < pixa->n; i++) { if (copyflag == L_COPY) { pixc = pixaGetPix(pixa, i, L_COPY); boxc = pixaGetBox(pixa, i, L_COPY); } else { /* copy-clone */ pixc = pixaGetPix(pixa, i, L_CLONE); boxc = pixaGetBox(pixa, i, L_CLONE); } pixaAddPix(pixac, pixc, L_INSERT); pixaAddBox(pixac, boxc, L_INSERT); } return pixac; } /*---------------------------------------------------------------------* * Pixa addition * *---------------------------------------------------------------------*/ /*! * pixaAddPix() * * Input: pixa * pix (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK; 1 on error */ l_int32 pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag) { l_int32 n; PIX *pixc; PROCNAME("pixaAddPix"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (copyflag == L_INSERT) pixc = pix; else if (copyflag == L_COPY) pixc = pixCopy(NULL, pix); else if (copyflag == L_CLONE) pixc = pixClone(pix); else return ERROR_INT("invalid copyflag", procName, 1); if (!pixc) return ERROR_INT("pixc not made", procName, 1); n = pixaGetCount(pixa); if (n >= pixa->nalloc) pixaExtendArray(pixa); pixa->pix[n] = pixc; pixa->n++; return 0; } /*! * pixaAddBox() * * Input: pixa * box * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 pixaAddBox(PIXA *pixa, BOX *box, l_int32 copyflag) { PROCNAME("pixaAddBox"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) return ERROR_INT("invalid copyflag", procName, 1); boxaAddBox(pixa->boxa, box, copyflag); return 0; } /*! * pixaExtendArray() * * Input: pixa * Return: 0 if OK; 1 on error * * Notes: * (1) Doubles the size of the pixa and boxa ptr arrays. */ static l_int32 pixaExtendArray(PIXA *pixa) { PROCNAME("pixaExtendArray"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); return pixaExtendArrayToSize(pixa, 2 * pixa->nalloc); } /*! * pixaExtendArrayToSize() * * Input: pixa * Return: 0 if OK; 1 on error * * Notes: * (1) If necessary, reallocs new pixa and boxa ptrs arrays to @size. * The pixa and boxa ptr arrays must always be equal in size. */ l_int32 pixaExtendArrayToSize(PIXA *pixa, l_int32 size) { PROCNAME("pixaExtendArrayToSize"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (size > pixa->nalloc) { if ((pixa->pix = (PIX **)reallocNew((void **)&pixa->pix, sizeof(PIX *) * pixa->nalloc, size * sizeof(PIX *))) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); pixa->nalloc = size; } return boxaExtendArrayToSize(pixa->boxa, size); } /*---------------------------------------------------------------------* * Pixa accessors * *---------------------------------------------------------------------*/ /*! * pixaGetCount() * * Input: pixa * Return: count, or 0 if no pixa */ l_int32 pixaGetCount(PIXA *pixa) { PROCNAME("pixaGetCount"); if (!pixa) return ERROR_INT("pixa not defined", procName, 0); return pixa->n; } /*! * pixaChangeRefcount() * * Input: pixa * Return: 0 if OK, 1 on error */ l_int32 pixaChangeRefcount(PIXA *pixa, l_int32 delta) { PROCNAME("pixaChangeRefcount"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); pixa->refcount += delta; return 0; } /*! * pixaGetPix() * * Input: pixa * index (to the index-th pix) * accesstype (L_COPY or L_CLONE) * Return: pix, or null on error */ PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype) { PIX *pix; PROCNAME("pixaGetPix"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); if (index < 0 || index >= pixa->n) return (PIX *)ERROR_PTR("index not valid", procName, NULL); if ((pix = pixa->pix[index]) == NULL) { L_ERROR("no pix at pixa[%d]\n", procName, index); return (PIX *)ERROR_PTR("pix not found!", procName, NULL); } if (accesstype == L_COPY) return pixCopy(NULL, pix); else if (accesstype == L_CLONE) return pixClone(pix); else return (PIX *)ERROR_PTR("invalid accesstype", procName, NULL); } /*! * pixaGetPixDimensions() * * Input: pixa * index (to the index-th box) * &w, &h, &d (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 pixaGetPixDimensions(PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd) { PIX *pix; PROCNAME("pixaGetPixDimensions"); if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (index < 0 || index >= pixa->n) return ERROR_INT("index not valid", procName, 1); if ((pix = pixaGetPix(pixa, index, L_CLONE)) == NULL) return ERROR_INT("pix not found!", procName, 1); pixGetDimensions(pix, pw, ph, pd); pixDestroy(&pix); return 0; } /*! * pixaGetBoxa() * * Input: pixa * accesstype (L_COPY, L_CLONE, L_COPY_CLONE) * Return: boxa, or null on error */ BOXA * pixaGetBoxa(PIXA *pixa, l_int32 accesstype) { PROCNAME("pixaGetBoxa"); if (!pixa) return (BOXA *)ERROR_PTR("pixa not defined", procName, NULL); if (!pixa->boxa) return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (BOXA *)ERROR_PTR("invalid accesstype", procName, NULL); return boxaCopy(pixa->boxa, accesstype); } /*! * pixaGetBoxaCount() * * Input: pixa * Return: count, or 0 on error */ l_int32 pixaGetBoxaCount(PIXA *pixa) { PROCNAME("pixaGetBoxaCount"); if (!pixa) return ERROR_INT("pixa not defined", procName, 0); return boxaGetCount(pixa->boxa); } /*! * pixaGetBox() * * Input: pixa * index (to the index-th pix) * accesstype (L_COPY or L_CLONE) * Return: box (if null, not automatically an error), or null on error * * Notes: * (1) There is always a boxa with a pixa, and it is initialized so * that each box ptr is NULL. * (2) In general, we expect that there is either a box associated * with each pix, or no boxes at all in the boxa. * (3) Having no boxes is thus not an automatic error. Whether it * is an actual error is determined by the calling program. * If the caller expects to get a box, it is an error; see, e.g., * pixaGetBoxGeometry(). */ BOX * pixaGetBox(PIXA *pixa, l_int32 index, l_int32 accesstype) { BOX *box; PROCNAME("pixaGetBox"); if (!pixa) return (BOX *)ERROR_PTR("pixa not defined", procName, NULL); if (!pixa->boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); if (index < 0 || index >= pixa->boxa->n) return (BOX *)ERROR_PTR("index not valid", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE) return (BOX *)ERROR_PTR("invalid accesstype", procName, NULL); box = pixa->boxa->box[index]; if (box) { if (accesstype == L_COPY) return boxCopy(box); else /* accesstype == L_CLONE */ return boxClone(box); } else { return NULL; } } /*! * pixaGetBoxGeometry() * * Input: pixa * index (to the index-th box) * &x, &y, &w, &h (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { BOX *box; PROCNAME("pixaGetBoxGeometry"); if (px) *px = 0; if (py) *py = 0; if (pw) *pw = 0; if (ph) *ph = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (index < 0 || index >= pixa->n) return ERROR_INT("index not valid", procName, 1); if ((box = pixaGetBox(pixa, index, L_CLONE)) == NULL) return ERROR_INT("box not found!", procName, 1); boxGetGeometry(box, px, py, pw, ph); boxDestroy(&box); return 0; } /*! * pixaSetBoxa() * * Input: pixa * boxa * accesstype (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error * * Notes: * (1) This destroys the existing boxa in the pixa. */ l_int32 pixaSetBoxa(PIXA *pixa, BOXA *boxa, l_int32 accesstype) { PROCNAME("pixaSetBoxa"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (accesstype != L_INSERT && accesstype != L_COPY && accesstype != L_CLONE) return ERROR_INT("invalid access type", procName, 1); boxaDestroy(&pixa->boxa); if (accesstype == L_INSERT) pixa->boxa = boxa; else pixa->boxa = boxaCopy(boxa, accesstype); return 0; } /*! * pixaGetPixArray() * * Input: pixa * Return: pix array, or null on error * * Notes: * (1) This returns a ptr to the actual array. The array is * owned by the pixa, so it must not be destroyed. * (2) The caller should always check if the return value is NULL * before accessing any of the pix ptrs in this array! */ PIX ** pixaGetPixArray(PIXA *pixa) { PROCNAME("pixaGetPixArray"); if (!pixa) return (PIX **)ERROR_PTR("pixa not defined", procName, NULL); return pixa->pix; } /*! * pixaVerifyDepth() * * Input: pixa * &maxdepth ( max depth of all pix) * Return: depth (return 0 if they're not all the same, or on error) * * Notes: * (1) It is considered to be an error if there are no pix. */ l_int32 pixaVerifyDepth(PIXA *pixa, l_int32 *pmaxdepth) { l_int32 i, n, d, depth, maxdepth, same; PROCNAME("pixaVerifyDepth"); if (pmaxdepth) *pmaxdepth = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 0); depth = 0; n = pixaGetCount(pixa); maxdepth = 0; same = 1; for (i = 0; i < n; i++) { if (pixaGetPixDimensions(pixa, i, NULL, NULL, &d)) return ERROR_INT("pix depth not found", procName, 0); maxdepth = L_MAX(maxdepth, d); if (i == 0) depth = d; else if (d != depth) same = 0; } if (pmaxdepth) *pmaxdepth = maxdepth; return (same == 1) ? depth : 0; } /*! * pixaIsFull() * * Input: pixa * &fullpa ( 1 if pixa is full) * &fullba ( 1 if boxa is full) * Return: 0 if OK, 1 on error * * Notes: * (1) A pixa is "full" if the array of pix is fully * occupied from index 0 to index (pixa->n - 1). */ l_int32 pixaIsFull(PIXA *pixa, l_int32 *pfullpa, l_int32 *pfullba) { l_int32 i, n, full; BOXA *boxa; PIX *pix; PROCNAME("pixaIsFull"); if (pfullpa) *pfullpa = 0; if (pfullba) *pfullba = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); if (pfullpa) { full = 1; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) { full = 0; break; } pixDestroy(&pix); } *pfullpa = full; } if (pfullba) { boxa = pixaGetBoxa(pixa, L_CLONE); boxaIsFull(boxa, pfullba); boxaDestroy(&boxa); } return 0; } /*! * pixaCountText() * * Input: pixa * &ntext ( number of pix with non-empty text strings) * Return: 0 if OK, 1 on error. * * Notes: * (1) All pix have non-empty text strings if the returned value @ntext * equals the pixa count. */ l_int32 pixaCountText(PIXA *pixa, l_int32 *pntext) { char *text; l_int32 i, n; PIX *pix; PROCNAME("pixaCountText"); if (!pntext) return ERROR_INT("&ntext not defined", procName, 1); *pntext = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; text = pixGetText(pix); if (text && strlen(text) > 0) (*pntext)++; pixDestroy(&pix); } return 0; } /*! * pixaGetLinePtrs() * * Input: pixa (of pix that all have the same depth) * &size ( number of pix in the pixa) * Return: array of array of line ptrs, or null on error * * Notes: * (1) See pixGetLinePtrs() for details. * (2) It is best if all pix in the pixa are the same size. * The size of each line ptr array is equal to the height * of the pix that it refers to. * (3) This is an array of arrays. To destroy it: * for (i = 0; i < size; i++) * FREE(lineset[i]); * FREE(lineset); */ void *** pixaGetLinePtrs(PIXA *pixa, l_int32 *psize) { l_int32 i, n; void **lineptrs; void ***lineset; PIX *pix; PROCNAME("pixaGetLinePtrs"); if (psize) *psize = 0; if (!pixa) return (void ***)ERROR_PTR("pixa not defined", procName, NULL); if (pixaVerifyDepth(pixa, NULL) == 0) return (void ***)ERROR_PTR("pixa not all same depth", procName, NULL); n = pixaGetCount(pixa); if (psize) *psize = n; if ((lineset = (void ***)CALLOC(n, sizeof(void **))) == NULL) return (void ***)ERROR_PTR("lineset not made", procName, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); lineptrs = pixGetLinePtrs(pix, NULL); lineset[i] = lineptrs; pixDestroy(&pix); } return lineset; } /*---------------------------------------------------------------------* * Pixa array modifiers * *---------------------------------------------------------------------*/ /*! * pixaReplacePix() * * Input: pixa * index (to the index-th pix) * pix (insert to replace existing one) * box ( insert to replace existing) * Return: 0 if OK, 1 on error * * Notes: * (1) In-place replacement of one pix. * (2) The previous pix at that location is destroyed. */ l_int32 pixaReplacePix(PIXA *pixa, l_int32 index, PIX *pix, BOX *box) { BOXA *boxa; PROCNAME("pixaReplacePix"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (index < 0 || index >= pixa->n) return ERROR_INT("index not valid", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixDestroy(&(pixa->pix[index])); pixa->pix[index] = pix; if (box) { boxa = pixa->boxa; if (index > boxa->n) return ERROR_INT("boxa index not valid", procName, 1); boxaReplaceBox(boxa, index, box); } return 0; } /*! * pixaInsertPix() * * Input: pixa * index (at which pix is to be inserted) * pixs (new pix to be inserted) * box ( new box to be inserted) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts pixa[i] --> pixa[i + 1] for all i >= index, * and then inserts at pixa[index]. * (2) To insert at the beginning of the array, set index = 0. * (3) It should not be used repeatedly on large arrays, * because the function is O(n). * (4) To append a pix to a pixa, it's easier to use pixaAddPix(). */ l_int32 pixaInsertPix(PIXA *pixa, l_int32 index, PIX *pixs, BOX *box) { l_int32 i, n; PROCNAME("pixaInsertPix"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); if (index < 0 || index > n) return ERROR_INT("index not in {0...n}", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (n >= pixa->nalloc) { /* extend both ptr arrays */ pixaExtendArray(pixa); boxaExtendArray(pixa->boxa); } pixa->n++; for (i = n; i > index; i--) pixa->pix[i] = pixa->pix[i - 1]; pixa->pix[index] = pixs; /* Optionally, insert the box */ if (box) boxaInsertBox(pixa->boxa, index, box); return 0; } /*! * pixaRemovePix() * * Input: pixa * index (of pix to be removed) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts pixa[i] --> pixa[i - 1] for all i > index. * (2) It should not be used repeatedly on large arrays, * because the function is O(n). * (3) The corresponding box is removed as well, if it exists. */ l_int32 pixaRemovePix(PIXA *pixa, l_int32 index) { l_int32 i, n, nbox; BOXA *boxa; PIX **array; PROCNAME("pixaRemovePix"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); /* Remove the pix */ array = pixa->pix; pixDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; pixa->n--; /* Remove the box if it exists */ boxa = pixa->boxa; nbox = boxaGetCount(boxa); if (index < nbox) boxaRemoveBox(boxa, index); return 0; } /*! * pixaRemovePixAndSave() * * Input: pixa * index (of pix to be removed) * &pix ( removed pix) * &box ( removed box) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts pixa[i] --> pixa[i - 1] for all i > index. * (2) It should not be used repeatedly on large arrays, * because the function is O(n). * (3) The corresponding box is removed as well, if it exists. * (4) The removed pix and box can either be retained or destroyed. */ l_int32 pixaRemovePixAndSave(PIXA *pixa, l_int32 index, PIX **ppix, BOX **pbox) { l_int32 i, n, nbox; BOXA *boxa; PIX **array; PROCNAME("pixaRemovePixAndSave"); if (ppix) *ppix = NULL; if (pbox) *pbox = NULL; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); /* Remove the pix */ array = pixa->pix; if (ppix) *ppix = pixaGetPix(pixa, index, L_CLONE); pixDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; pixa->n--; /* Remove the box if it exists */ boxa = pixa->boxa; nbox = boxaGetCount(boxa); if (index < nbox) boxaRemoveBoxAndSave(boxa, index, pbox); return 0; } /*! * pixaInitFull() * * Input: pixa (typically empty) * pix ( to be replicated into the entire pixa ptr array) * box ( to be replicated into the entire boxa ptr array) * Return: 0 if OK, 1 on error * * Notes: * (1) This initializes a pixa by filling up the entire pix ptr array * with copies of @pix. If @pix == NULL, we use a tiny placeholder * pix (w = h = d = 1). Any existing pix are destroyed. * It also optionally fills the boxa with copies of @box. * After this operation, the numbers of pix and (optionally) * boxes are equal to the number of allocated ptrs. * (2) Note that we use pixaReplacePix() instead of pixaInsertPix(). * They both have the same effect when inserting into a NULL ptr * in the pixa ptr array: * (3) If the boxa is not initialized (i.e., filled with boxes), * later insertion of boxes will cause an error, because the * 'n' field is 0. * (4) Example usage. This function is useful to prepare for a * random insertion (or replacement) of pix into a pixa. * To randomly insert pix into a pixa, without boxes, up to * some index "max": * Pixa *pixa = pixaCreate(max); * pixaInitFull(pixa, NULL, NULL); * An existing pixa with a smaller ptr array can also be reused: * pixaExtendArrayToSize(pixa, max); * pixaInitFull(pixa, NULL, NULL); * The initialization allows the pixa to always be properly * filled, even if all pix (and boxes) are not later replaced. */ l_int32 pixaInitFull(PIXA *pixa, PIX *pix, BOX *box) { l_int32 i, n; PIX *pixt; PROCNAME("pixaInitFull"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixa->nalloc; pixa->n = n; for (i = 0; i < n; i++) { if (pix) pixt = pixCopy(NULL, pix); else pixt = pixCreate(1, 1, 1); pixaReplacePix(pixa, i, pixt, NULL); } if (box) boxaInitFull(pixa->boxa, box); return 0; } /*! * pixaClear() * * Input: pixa * Return: 0 if OK, 1 on error * * Notes: * (1) This destroys all pix in the pixa, as well as * all boxes in the boxa. The ptrs in the pix ptr array * are all null'd. The number of allocated pix, n, is set to 0. */ l_int32 pixaClear(PIXA *pixa) { l_int32 i, n; PROCNAME("pixaClear"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) pixDestroy(&pixa->pix[i]); pixa->n = 0; return boxaClear(pixa->boxa); } /*---------------------------------------------------------------------* * Pixa and Pixaa combination * *---------------------------------------------------------------------*/ /*! * pixaJoin() * * Input: pixad (dest pixa; add to this one) * pixas ( source pixa; add from this one) * istart (starting index in pixas) * iend (ending index in pixas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) This appends a clone of each indicated pix in pixas to pixad * (2) istart < 0 is taken to mean 'read from the start' (istart = 0) * (3) iend < 0 means 'read to the end' * (4) If pixas is NULL or contains no pix, this is a no-op. */ l_int32 pixaJoin(PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend) { l_int32 i, n, nb; BOXA *boxas, *boxad; PIX *pix; PROCNAME("pixaJoin"); if (!pixad) return ERROR_INT("pixad not defined", procName, 1); if (!pixas || ((n = pixaGetCount(pixas)) == 0)) return 0; if (istart < 0) istart = 0; if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", procName, 1); for (i = istart; i <= iend; i++) { pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixad, pix, L_INSERT); } boxas = pixaGetBoxa(pixas, L_CLONE); boxad = pixaGetBoxa(pixad, L_CLONE); nb = pixaGetBoxaCount(pixas); iend = L_MIN(iend, nb - 1); boxaJoin(boxad, boxas, istart, iend); boxaDestroy(&boxas); /* just the clones */ boxaDestroy(&boxad); return 0; } /*! * pixaaJoin() * * Input: paad (dest pixaa; add to this one) * paas ( source pixaa; add from this one) * istart (starting index in pixaas) * iend (ending index in pixaas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) This appends a clone of each indicated pixa in paas to pixaad * (2) istart < 0 is taken to mean 'read from the start' (istart = 0) * (3) iend < 0 means 'read to the end' */ l_int32 pixaaJoin(PIXAA *paad, PIXAA *paas, l_int32 istart, l_int32 iend) { l_int32 i, n; PIXA *pixa; PROCNAME("pixaaJoin"); if (!paad) return ERROR_INT("pixaad not defined", procName, 1); if (!paas) return 0; if (istart < 0) istart = 0; n = pixaaGetCount(paas, NULL); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", procName, 1); for (i = istart; i <= iend; i++) { pixa = pixaaGetPixa(paas, i, L_CLONE); pixaaAddPixa(paad, pixa, L_INSERT); } return 0; } /*---------------------------------------------------------------------* * Pixaa creation and destruction * *---------------------------------------------------------------------*/ /*! * pixaaCreate() * * Input: n (initial number of pixa ptrs) * Return: paa, or null on error * * Notes: * (1) A pixaa provides a 2-level hierarchy of images. * A common use is for segmentation masks, which are * inexpensive to store in png format. * (2) For example, suppose you want a mask for each textline * in a two-column page. The textline masks for each column * can be represented by a pixa, of which there are 2 in the pixaa. * The boxes for the textline mask components within a column * can have their origin referred to the column rather than the page. * Then the boxa field can be used to represent the two box (regions) * for the columns, and the (x,y) components of each box can * be used to get the absolute position of the textlines on * the page. */ PIXAA * pixaaCreate(l_int32 n) { PIXAA *paa; PROCNAME("pixaaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((paa = (PIXAA *)CALLOC(1, sizeof(PIXAA))) == NULL) return (PIXAA *)ERROR_PTR("paa not made", procName, NULL); paa->n = 0; paa->nalloc = n; if ((paa->pixa = (PIXA **)CALLOC(n, sizeof(PIXA *))) == NULL) { pixaaDestroy(&paa); return (PIXAA *)ERROR_PTR("pixa ptrs not made", procName, NULL); } paa->boxa = boxaCreate(n); return paa; } /*! * pixaaCreateFromPixa() * * Input: pixa * n (number specifying subdivision of pixa) * type (L_CHOOSE_CONSECUTIVE, L_CHOOSE_SKIP_BY) * copyflag (L_CLONE, L_COPY) * Return: paa, or null on error * * Notes: * (1) This subdivides a pixa into a set of smaller pixa that * are accumulated into a pixaa. * (2) If type == L_CHOOSE_CONSECUTIVE, the first 'n' pix are * put in a pixa and added to pixaa, then the next 'n', etc. * If type == L_CHOOSE_SKIP_BY, the first pixa is made by * aggregating pix[0], pix[n], pix[2*n], etc. * (3) The copyflag specifies if each new pix is a copy or a clone. */ PIXAA * pixaaCreateFromPixa(PIXA *pixa, l_int32 n, l_int32 type, l_int32 copyflag) { l_int32 count, i, j, npixa; PIX *pix; PIXA *pixat; PIXAA *paa; PROCNAME("pixaaCreateFromPixa"); if (!pixa) return (PIXAA *)ERROR_PTR("pixa not defined", procName, NULL); count = pixaGetCount(pixa); if (count == 0) return (PIXAA *)ERROR_PTR("no pix in pixa", procName, NULL); if (n <= 0) return (PIXAA *)ERROR_PTR("n must be > 0", procName, NULL); if (type != L_CHOOSE_CONSECUTIVE && type != L_CHOOSE_SKIP_BY) return (PIXAA *)ERROR_PTR("invalid type", procName, NULL); if (copyflag != L_CLONE && copyflag != L_COPY) return (PIXAA *)ERROR_PTR("invalid copyflag", procName, NULL); if (type == L_CHOOSE_CONSECUTIVE) npixa = (count + n - 1) / n; else /* L_CHOOSE_SKIP_BY */ npixa = L_MIN(n, count); paa = pixaaCreate(npixa); if (type == L_CHOOSE_CONSECUTIVE) { for (i = 0; i < count; i++) { if (i % n == 0) pixat = pixaCreate(n); pix = pixaGetPix(pixa, i, copyflag); pixaAddPix(pixat, pix, L_INSERT); if (i % n == n - 1) pixaaAddPixa(paa, pixat, L_INSERT); } if (i % n != 0) pixaaAddPixa(paa, pixat, L_INSERT); } else { /* L_CHOOSE_SKIP_BY */ for (i = 0; i < npixa; i++) { pixat = pixaCreate(count / npixa + 1); for (j = i; j < count; j += n) { pix = pixaGetPix(pixa, j, copyflag); pixaAddPix(pixat, pix, L_INSERT); } pixaaAddPixa(paa, pixat, L_INSERT); } } return paa; } /*! * pixaaDestroy() * * Input: &paa * Return: void */ void pixaaDestroy(PIXAA **ppaa) { l_int32 i; PIXAA *paa; PROCNAME("pixaaDestroy"); if (ppaa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((paa = *ppaa) == NULL) return; for (i = 0; i < paa->n; i++) pixaDestroy(&paa->pixa[i]); FREE(paa->pixa); boxaDestroy(&paa->boxa); FREE(paa); *ppaa = NULL; return; } /*---------------------------------------------------------------------* * Pixaa addition * *---------------------------------------------------------------------*/ /*! * pixaaAddPixa() * * Input: paa * pixa (to be added) * copyflag: * L_INSERT inserts the pixa directly * L_COPY makes a new pixa and copies each pix and each box * L_CLONE gives a new handle to the input pixa * L_COPY_CLONE makes a new pixa and inserts clones of * all pix and boxes * Return: 0 if OK; 1 on error */ l_int32 pixaaAddPixa(PIXAA *paa, PIXA *pixa, l_int32 copyflag) { l_int32 n; PIXA *pixac; PROCNAME("pixaaAddPixa"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE && copyflag != L_COPY_CLONE) return ERROR_INT("invalid copyflag", procName, 1); if (copyflag == L_INSERT) { pixac = pixa; } else { if ((pixac = pixaCopy(pixa, copyflag)) == NULL) return ERROR_INT("pixac not made", procName, 1); } n = pixaaGetCount(paa, NULL); if (n >= paa->nalloc) pixaaExtendArray(paa); paa->pixa[n] = pixac; paa->n++; return 0; } /*! * pixaaExtendArray() * * Input: paa * Return: 0 if OK; 1 on error */ l_int32 pixaaExtendArray(PIXAA *paa) { PROCNAME("pixaaExtendArray"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if ((paa->pixa = (PIXA **)reallocNew((void **)&paa->pixa, sizeof(PIXA *) * paa->nalloc, 2 * sizeof(PIXA *) * paa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); paa->nalloc = 2 * paa->nalloc; return 0; } /*! * pixaaAddPix() * * Input: paa (input paa) * index (index of pixa in paa) * pix (to be added) * box ( to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK; 1 on error */ l_int32 pixaaAddPix(PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag) { PIXA *pixa; PROCNAME("pixaaAddPix"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if ((pixa = pixaaGetPixa(paa, index, L_CLONE)) == NULL) return ERROR_INT("pixa not found", procName, 1); pixaAddPix(pixa, pix, copyflag); if (box) pixaAddBox(pixa, box, copyflag); pixaDestroy(&pixa); return 0; } /*! * pixaaAddBox() * * Input: paa * box * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error * * Notes: * (1) The box can be used, for example, to hold the support region * of a pixa that is being added to the pixaa. */ l_int32 pixaaAddBox(PIXAA *paa, BOX *box, l_int32 copyflag) { PROCNAME("pixaaAddBox"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) return ERROR_INT("invalid copyflag", procName, 1); boxaAddBox(paa->boxa, box, copyflag); return 0; } /*---------------------------------------------------------------------* * Pixaa accessors * *---------------------------------------------------------------------*/ /*! * pixaaGetCount() * * Input: paa * &na ( number of pix in each pixa) * Return: count, or 0 if no pixaa * * Notes: * (1) If paa is empty, a returned na will also be empty. */ l_int32 pixaaGetCount(PIXAA *paa, NUMA **pna) { l_int32 i, n; NUMA *na; PIXA *pixa; PROCNAME("pixaaGetCount"); if (pna) *pna = NULL; if (!paa) return ERROR_INT("paa not defined", procName, 0); n = paa->n; if (pna) { if ((na = numaCreate(n)) == NULL) return ERROR_INT("na not made", procName, 0); *pna = na; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); numaAddNumber(na, pixaGetCount(pixa)); pixaDestroy(&pixa); } } return n; } /*! * pixaaGetPixa() * * Input: paa * index (to the index-th pixa) * accesstype (L_COPY, L_CLONE, L_COPY_CLONE) * Return: pixa, or null on error * * Notes: * (1) L_COPY makes a new pixa with a copy of every pix * (2) L_CLONE just makes a new reference to the pixa, * and bumps the counter. You would use this, for example, * when you need to extract some data from a pix within a * pixa within a pixaa. * (3) L_COPY_CLONE makes a new pixa with a clone of every pix * and box * (4) In all cases, you must invoke pixaDestroy() on the returned pixa */ PIXA * pixaaGetPixa(PIXAA *paa, l_int32 index, l_int32 accesstype) { PIXA *pixa; PROCNAME("pixaaGetPixa"); if (!paa) return (PIXA *)ERROR_PTR("paa not defined", procName, NULL); if (index < 0 || index >= paa->n) return (PIXA *)ERROR_PTR("index not valid", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (PIXA *)ERROR_PTR("invalid accesstype", procName, NULL); if ((pixa = paa->pixa[index]) == NULL) { /* shouldn't happen! */ L_ERROR("missing pixa[%d]\n", procName, index); return (PIXA *)ERROR_PTR("pixa not found at index", procName, NULL); } return pixaCopy(pixa, accesstype); } /*! * pixaaGetBoxa() * * Input: paa * accesstype (L_COPY, L_CLONE) * Return: boxa, or null on error * * Notes: * (1) L_COPY returns a copy; L_CLONE returns a new reference to the boxa. * (2) In both cases, invoke boxaDestroy() on the returned boxa. */ BOXA * pixaaGetBoxa(PIXAA *paa, l_int32 accesstype) { PROCNAME("pixaaGetBoxa"); if (!paa) return (BOXA *)ERROR_PTR("paa not defined", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE) return (BOXA *)ERROR_PTR("invalid access type", procName, NULL); return boxaCopy(paa->boxa, accesstype); } /*! * pixaaGetPix() * * Input: paa * index (index into the pixa array in the pixaa) * ipix (index into the pix array in the pixa) * accessflag (L_COPY or L_CLONE) * Return: pix, or null on error */ PIX * pixaaGetPix(PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag) { PIX *pix; PIXA *pixa; PROCNAME("pixaaGetPix"); if ((pixa = pixaaGetPixa(paa, index, L_CLONE)) == NULL) return (PIX *)ERROR_PTR("pixa not retrieved", procName, NULL); if ((pix = pixaGetPix(pixa, ipix, accessflag)) == NULL) L_ERROR("pix not retrieved\n", procName); pixaDestroy(&pixa); return pix; } /*! * pixaaVerifyDepth() * * Input: paa * &maxdepth ( max depth of all pix in pixaa) * Return: depth (return 0 if they're not all the same, or on error) */ l_int32 pixaaVerifyDepth(PIXAA *paa, l_int32 *pmaxdepth) { l_int32 i, npixa, d, maxd, maxdepth, same; PIXA *pixa; PROCNAME("pixaaVerifyDepth"); if (pmaxdepth) *pmaxdepth = 0; if (!paa) return ERROR_INT("paa not defined", procName, 0); npixa = pixaaGetCount(paa, NULL); maxdepth = 0; same = 1; for (i = 0; i < npixa; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); if (pixaGetCount(pixa) > 0) { d = pixaVerifyDepth(pixa, &maxd); maxdepth = L_MAX(maxdepth, maxd); /* biggest up to this point */ if (d != maxdepth) same = 0; } pixaDestroy(&pixa); } if (pmaxdepth) *pmaxdepth = maxdepth; return (same == 1) ? maxdepth : 0; } /*! * pixaaIsFull() * * Input: paa * &full ( 1 if all pixa in the paa have full pix arrays) * Return: return 0 if OK, 1 on error * * Notes: * (1) Does not require boxa associated with each pixa to be full. */ l_int32 pixaaIsFull(PIXAA *paa, l_int32 *pfull) { l_int32 i, n, full; PIXA *pixa; PROCNAME("pixaaIsFull"); if (!pfull) return ERROR_INT("&full not defined", procName, 0); *pfull = 0; if (!paa) return ERROR_INT("paa not defined", procName, 0); n = pixaaGetCount(paa, NULL); full = 1; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pixaIsFull(pixa, &full, NULL); pixaDestroy(&pixa); if (!full) break; } *pfull = full; return 0; } /*---------------------------------------------------------------------* * Pixaa array modifiers * *---------------------------------------------------------------------*/ /*! * pixaaInitFull() * * Input: paa (typically empty) * pixa (to be replicated into the entire pixa ptr array) * Return: 0 if OK, 1 on error * * Notes: * (1) This initializes a pixaa by filling up the entire pixa ptr array * with copies of @pixa. Any existing pixa are destroyed. * (2) Example usage. This function is useful to prepare for a * random insertion (or replacement) of pixa into a pixaa. * To randomly insert pixa into a pixaa, up to some index "max": * Pixaa *paa = pixaaCreate(max); * Pixa *pixa = pixaCreate(1); // if you want little memory * pixaaInitFull(paa, pixa); // copy it to entire array * pixaDestroy(&pixa); // no longer needed * The initialization allows the pixaa to always be properly filled. */ l_int32 pixaaInitFull(PIXAA *paa, PIXA *pixa) { l_int32 i, n; PIXA *pixat; PROCNAME("pixaaInitFull"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = paa->nalloc; paa->n = n; for (i = 0; i < n; i++) { pixat = pixaCopy(pixa, L_COPY); pixaaReplacePixa(paa, i, pixat); } return 0; } /*! * pixaaReplacePixa() * * Input: paa * index (to the index-th pixa) * pixa (insert to replace existing one) * Return: 0 if OK, 1 on error * * Notes: * (1) This allows random insertion of a pixa into a pixaa, with * destruction of any existing pixa at that location. * The input pixa is now owned by the pixaa. * (2) No other pixa in the array are affected. * (3) The index must be within the allowed set. */ l_int32 pixaaReplacePixa(PIXAA *paa, l_int32 index, PIXA *pixa) { PROCNAME("pixaaReplacePixa"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (index < 0 || index >= paa->n) return ERROR_INT("index not valid", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); pixaDestroy(&(paa->pixa[index])); paa->pixa[index] = pixa; return 0; } /*! * pixaaClear() * * Input: paa * Return: 0 if OK, 1 on error * * Notes: * (1) This destroys all pixa in the pixaa, and nulls the ptrs * in the pixa ptr array. */ l_int32 pixaaClear(PIXAA *paa) { l_int32 i, n; PROCNAME("pixaClear"); if (!paa) return ERROR_INT("paa not defined", procName, 1); n = pixaaGetCount(paa, NULL); for (i = 0; i < n; i++) pixaDestroy(&paa->pixa[i]); paa->n = 0; return 0; } /*! * pixaaTruncate() * * Input: paa * Return: 0 if OK, 1 on error * * Notes: * (1) This identifies the largest index containing a pixa that * has any pix within it, destroys all pixa above that index, * and resets the count. */ l_int32 pixaaTruncate(PIXAA *paa) { l_int32 i, n, np; PIXA *pixa; PROCNAME("pixaaTruncate"); if (!paa) return ERROR_INT("paa not defined", procName, 1); n = pixaaGetCount(paa, NULL); for (i = n - 1; i >= 0; i--) { pixa = pixaaGetPixa(paa, i, L_CLONE); if (!pixa) { paa->n--; continue; } np = pixaGetCount(pixa); pixaDestroy(&pixa); if (np == 0) { pixaDestroy(&paa->pixa[i]); paa->n--; } else { break; } } return 0; } /*---------------------------------------------------------------------* * Pixa serialized I/O * *---------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /*! * pixaRead() * * Input: filename * Return: pixa, or null on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ PIXA * pixaRead(const char *filename) { FILE *fp; PIXA *pixa; PROCNAME("pixaRead"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXA *)ERROR_PTR("no libpng: can't read data", procName, NULL); #endif /* !HAVE_LIBPNG */ if (!filename) return (PIXA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXA *)ERROR_PTR("stream not opened", procName, NULL); if ((pixa = pixaReadStream(fp)) == NULL) { fclose(fp); return (PIXA *)ERROR_PTR("pixa not read", procName, NULL); } fclose(fp); return pixa; } /*! * pixaReadStream() * * Input: stream * Return: pixa, or null on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ PIXA * pixaReadStream(FILE *fp) { l_int32 n, i, xres, yres, version; l_int32 ignore; BOXA *boxa; PIX *pix; PIXA *pixa; PROCNAME("pixaReadStream"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXA *)ERROR_PTR("no libpng: can't read data", procName, NULL); #endif /* !HAVE_LIBPNG */ if (!fp) return (PIXA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nPixa Version %d\n", &version) != 1) return (PIXA *)ERROR_PTR("not a pixa file", procName, NULL); if (version != PIXA_VERSION_NUMBER) return (PIXA *)ERROR_PTR("invalid pixa version", procName, NULL); if (fscanf(fp, "Number of pix = %d\n", &n) != 1) return (PIXA *)ERROR_PTR("not a pixa file", procName, NULL); if ((boxa = boxaReadStream(fp)) == NULL) return (PIXA *)ERROR_PTR("boxa not made", procName, NULL); if ((pixa = pixaCreate(n)) == NULL) { boxaDestroy(&boxa); return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); } boxaDestroy(&pixa->boxa); pixa->boxa = boxa; for (i = 0; i < n; i++) { if ((fscanf(fp, " pix[%d]: xres = %d, yres = %d\n", &ignore, &xres, &yres)) != 3) { pixaDestroy(&pixa); return (PIXA *)ERROR_PTR("res reading error", procName, NULL); } if ((pix = pixReadStreamPng(fp)) == NULL) { pixaDestroy(&pixa); return (PIXA *)ERROR_PTR("pix not read", procName, NULL); } pixSetXRes(pix, xres); pixSetYRes(pix, yres); pixaAddPix(pixa, pix, L_INSERT); } return pixa; } /*! * pixaWrite() * * Input: filename * pixa * Return: 0 if OK, 1 on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ l_int32 pixaWrite(const char *filename, PIXA *pixa) { FILE *fp; PROCNAME("pixaWrite"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't write data", procName, 1); #endif /* !HAVE_LIBPNG */ if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (pixaWriteStream(fp, pixa)) return ERROR_INT("pixa not written to stream", procName, 1); fclose(fp); return 0; } /*! * pixaWriteStream() * * Input: stream (opened for "wb") * pixa * Return: 0 if OK, 1 on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ l_int32 pixaWriteStream(FILE *fp, PIXA *pixa) { l_int32 n, i; PIX *pix; PROCNAME("pixaWriteStream"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't write data", procName, 1); #endif /* !HAVE_LIBPNG */ if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); fprintf(fp, "\nPixa Version %d\n", PIXA_VERSION_NUMBER); fprintf(fp, "Number of pix = %d\n", n); boxaWriteStream(fp, pixa->boxa); for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) return ERROR_INT("pix not found", procName, 1); fprintf(fp, " pix[%d]: xres = %d, yres = %d\n", i, pix->xres, pix->yres); pixWriteStreamPng(fp, pix, 0.0); pixDestroy(&pix); } return 0; } /*---------------------------------------------------------------------* * Pixaa serialized I/O * *---------------------------------------------------------------------*/ /*! * pixaaReadFromFiles() * * Input: dirname (directory) * substr ( substring filter on filenames; can be NULL) * first (0-based) * nfiles (use 0 for everything from @first to the end) * Return: paa, or null on error or if no pixa files are found. * * Notes: * (1) The files must be serialized pixa files (e.g., *.pa) * If some files cannot be read, warnings are issued. * (2) Use @substr to filter filenames in the directory. If * @substr == NULL, this takes all files. * (3) After filtering, use @first and @nfiles to select * a contiguous set of files, that have been lexically * sorted in increasing order. */ PIXAA * pixaaReadFromFiles(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles) { char *fname; l_int32 i, n; PIXA *pixa; PIXAA *paa; SARRAY *sa; PROCNAME("pixaaReadFromFiles"); if (!dirname) return (PIXAA *)ERROR_PTR("dirname not defined", procName, NULL); sa = getSortedPathnamesInDirectory(dirname, substr, first, nfiles); if (!sa || ((n = sarrayGetCount(sa)) == 0)) { sarrayDestroy(&sa); return (PIXAA *)ERROR_PTR("no pixa files found", procName, NULL); } paa = pixaaCreate(n); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if ((pixa = pixaRead(fname)) == NULL) { L_ERROR("pixa not read for %d-th file", procName, i); continue; } pixaaAddPixa(paa, pixa, L_INSERT); } sarrayDestroy(&sa); return paa; } /*! * pixaaRead() * * Input: filename * Return: paa, or null on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ PIXAA * pixaaRead(const char *filename) { FILE *fp; PIXAA *paa; PROCNAME("pixaaRead"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXAA *)ERROR_PTR("no libpng: can't read data", procName, NULL); #endif /* !HAVE_LIBPNG */ if (!filename) return (PIXAA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXAA *)ERROR_PTR("stream not opened", procName, NULL); if ((paa = pixaaReadStream(fp)) == NULL) { fclose(fp); return (PIXAA *)ERROR_PTR("paa not read", procName, NULL); } fclose(fp); return paa; } /*! * pixaaReadStream() * * Input: stream * Return: paa, or null on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ PIXAA * pixaaReadStream(FILE *fp) { l_int32 n, i, version; l_int32 ignore; BOXA *boxa; PIXA *pixa; PIXAA *paa; PROCNAME("pixaaReadStream"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return (PIXAA *)ERROR_PTR("no libpng: can't read data", procName, NULL); #endif /* !HAVE_LIBPNG */ if (!fp) return (PIXAA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nPixaa Version %d\n", &version) != 1) return (PIXAA *)ERROR_PTR("not a pixaa file", procName, NULL); if (version != PIXAA_VERSION_NUMBER) return (PIXAA *)ERROR_PTR("invalid pixaa version", procName, NULL); if (fscanf(fp, "Number of pixa = %d\n", &n) != 1) return (PIXAA *)ERROR_PTR("not a pixaa file", procName, NULL); if ((paa = pixaaCreate(n)) == NULL) return (PIXAA *)ERROR_PTR("paa not made", procName, NULL); if ((boxa = boxaReadStream(fp)) == NULL) return (PIXAA *)ERROR_PTR("boxa not made", procName, NULL); boxaDestroy(&paa->boxa); paa->boxa = boxa; for (i = 0; i < n; i++) { if ((fscanf(fp, "\n\n --------------- pixa[%d] ---------------\n", &ignore)) != 1) { return (PIXAA *)ERROR_PTR("text reading", procName, NULL); } if ((pixa = pixaReadStream(fp)) == NULL) return (PIXAA *)ERROR_PTR("pixa not read", procName, NULL); pixaaAddPixa(paa, pixa, L_INSERT); } return paa; } /*! * pixaaWrite() * * Input: filename * paa * Return: 0 if OK, 1 on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ l_int32 pixaaWrite(const char *filename, PIXAA *paa) { FILE *fp; PROCNAME("pixaaWrite"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't read data", procName, 1); #endif /* !HAVE_LIBPNG */ if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!paa) return ERROR_INT("paa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (pixaaWriteStream(fp, paa)) return ERROR_INT("paa not written to stream", procName, 1); fclose(fp); return 0; } /*! * pixaaWriteStream() * * Input: stream (opened for "wb") * paa * Return: 0 if OK, 1 on error * * Notes: * (1) The pix are stored in the file as png. * If the png library is not linked, this will fail. */ l_int32 pixaaWriteStream(FILE *fp, PIXAA *paa) { l_int32 n, i; PIXA *pixa; PROCNAME("pixaaWriteStream"); #if !HAVE_LIBPNG /* defined in environ.h and config_auto.h */ return ERROR_INT("no libpng: can't read data", procName, 1); #endif /* !HAVE_LIBPNG */ if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!paa) return ERROR_INT("paa not defined", procName, 1); n = pixaaGetCount(paa, NULL); fprintf(fp, "\nPixaa Version %d\n", PIXAA_VERSION_NUMBER); fprintf(fp, "Number of pixa = %d\n", n); boxaWriteStream(fp, paa->boxa); for (i = 0; i < n; i++) { if ((pixa = pixaaGetPixa(paa, i, L_CLONE)) == NULL) return ERROR_INT("pixa not found", procName, 1); fprintf(fp, "\n\n --------------- pixa[%d] ---------------\n", i); pixaWriteStream(fp, pixa); pixaDestroy(&pixa); } return 0; } leptonica-1.70/src/arrayaccess.h0000644000175000017500000002013111707052573014751 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_ARRAY_ACCESS_H #define LEPTONICA_ARRAY_ACCESS_H /* * arrayaccess.h * * 1, 2, 4, 8, 16 and 32 bit data access within an array of 32-bit words * * This is used primarily to access 1, 2, 4, 8, 16 and 32 bit pixels * in a line of image data, represented as an array of 32-bit words. * * pdata: pointer to first 32-bit word in the array * n: index of the pixel in the array * * Function calls for these accessors are defined in arrayaccess.c. * * However, for efficiency we use the inline macros for all accesses. * Even though the 2 and 4 bit set* accessors are more complicated, * they are about 10% faster than the function calls. * * The 32 bit access is just a cast and ptr arithmetic. We include * it so that the input ptr can be void*. * * At the end of this file is code for invoking the function calls * instead of inlining. * * The macro SET_DATA_BIT_VAL(pdata, n, val) is a bit slower than * if (val == 0) * CLEAR_DATA_BIT(pdata, n); * else * SET_DATA_BIT(pdata, n); */ /* Use the inline accessors (except with _MSC_VER), because they * are faster. */ #define USE_INLINE_ACCESSORS 1 #if USE_INLINE_ACCESSORS #ifndef _MSC_VER /*--------------------------------------------------* * 1 bit access * *--------------------------------------------------*/ #define GET_DATA_BIT(pdata, n) \ ((*((l_uint32 *)(pdata) + ((n) >> 5)) >> (31 - ((n) & 31))) & 1) #define SET_DATA_BIT(pdata, n) \ (*((l_uint32 *)(pdata) + ((n) >> 5)) |= (0x80000000 >> ((n) & 31))) #define CLEAR_DATA_BIT(pdata, n) \ (*((l_uint32 *)(pdata) + ((n) >> 5)) &= ~(0x80000000 >> ((n) & 31))) #define SET_DATA_BIT_VAL(pdata, n, val) \ ({l_uint32 *_TEMP_WORD_PTR_; \ _TEMP_WORD_PTR_ = (l_uint32 *)(pdata) + ((n) >> 5); \ *_TEMP_WORD_PTR_ &= ~(0x80000000 >> ((n) & 31)); \ *_TEMP_WORD_PTR_ |= ((val) << (31 - ((n) & 31))); \ }) /*--------------------------------------------------* * 2 bit access * *--------------------------------------------------*/ #define GET_DATA_DIBIT(pdata, n) \ ((*((l_uint32 *)(pdata) + ((n) >> 4)) >> (2 * (15 - ((n) & 15)))) & 3) #define SET_DATA_DIBIT(pdata, n, val) \ ({l_uint32 *_TEMP_WORD_PTR_; \ _TEMP_WORD_PTR_ = (l_uint32 *)(pdata) + ((n) >> 4); \ *_TEMP_WORD_PTR_ &= ~(0xc0000000 >> (2 * ((n) & 15))); \ *_TEMP_WORD_PTR_ |= (((val) & 3) << (30 - 2 * ((n) & 15))); \ }) #define CLEAR_DATA_DIBIT(pdata, n) \ (*((l_uint32 *)(pdata) + ((n) >> 4)) &= ~(0xc0000000 >> (2 * ((n) & 15)))) /*--------------------------------------------------* * 4 bit access * *--------------------------------------------------*/ #define GET_DATA_QBIT(pdata, n) \ ((*((l_uint32 *)(pdata) + ((n) >> 3)) >> (4 * (7 - ((n) & 7)))) & 0xf) #define SET_DATA_QBIT(pdata, n, val) \ ({l_uint32 *_TEMP_WORD_PTR_; \ _TEMP_WORD_PTR_ = (l_uint32 *)(pdata) + ((n) >> 3); \ *_TEMP_WORD_PTR_ &= ~(0xf0000000 >> (4 * ((n) & 7))); \ *_TEMP_WORD_PTR_ |= (((val) & 15) << (28 - 4 * ((n) & 7))); \ }) #define CLEAR_DATA_QBIT(pdata, n) \ (*((l_uint32 *)(pdata) + ((n) >> 3)) &= ~(0xf0000000 >> (4 * ((n) & 7)))) /*--------------------------------------------------* * 8 bit access * *--------------------------------------------------*/ #ifdef L_BIG_ENDIAN #define GET_DATA_BYTE(pdata, n) \ (*((l_uint8 *)(pdata) + (n))) #else /* L_LITTLE_ENDIAN */ #define GET_DATA_BYTE(pdata, n) \ (*(l_uint8 *)((l_uintptr_t)((l_uint8 *)(pdata) + (n)) ^ 3)) #endif /* L_BIG_ENDIAN */ #ifdef L_BIG_ENDIAN #define SET_DATA_BYTE(pdata, n, val) \ (*((l_uint8 *)(pdata) + (n)) = (val)) #else /* L_LITTLE_ENDIAN */ #define SET_DATA_BYTE(pdata, n, val) \ (*(l_uint8 *)((l_uintptr_t)((l_uint8 *)(pdata) + (n)) ^ 3) = (val)) #endif /* L_BIG_ENDIAN */ /*--------------------------------------------------* * 16 bit access * *--------------------------------------------------*/ #ifdef L_BIG_ENDIAN #define GET_DATA_TWO_BYTES(pdata, n) \ (*((l_uint16 *)(pdata) + (n))) #else /* L_LITTLE_ENDIAN */ #define GET_DATA_TWO_BYTES(pdata, n) \ (*(l_uint16 *)((l_uintptr_t)((l_uint16 *)(pdata) + (n)) ^ 2)) #endif /* L_BIG_ENDIAN */ #ifdef L_BIG_ENDIAN #define SET_DATA_TWO_BYTES(pdata, n, val) \ (*((l_uint16 *)(pdata) + (n)) = (val)) #else /* L_LITTLE_ENDIAN */ #define SET_DATA_TWO_BYTES(pdata, n, val) \ (*(l_uint16 *)((l_uintptr_t)((l_uint16 *)(pdata) + (n)) ^ 2) = (val)) #endif /* L_BIG_ENDIAN */ /*--------------------------------------------------* * 32 bit access * *--------------------------------------------------*/ #define GET_DATA_FOUR_BYTES(pdata, n) \ (*((l_uint32 *)(pdata) + (n))) #define SET_DATA_FOUR_BYTES(pdata, n, val) \ (*((l_uint32 *)(pdata) + (n)) = (val)) #endif /* ! _MSC_VER */ #endif /* USE_INLINE_ACCESSORS */ /*--------------------------------------------------* * Slower, using function calls for all accessors * *--------------------------------------------------*/ #if !USE_INLINE_ACCESSORS || defined(_MSC_VER) #define GET_DATA_BIT(pdata, n) l_getDataBit(pdata, n) #define SET_DATA_BIT(pdata, n) l_setDataBit(pdata, n) #define CLEAR_DATA_BIT(pdata, n) l_clearDataBit(pdata, n) #define SET_DATA_BIT_VAL(pdata, n, val) l_setDataBitVal(pdata, n, val) #define GET_DATA_DIBIT(pdata, n) l_getDataDibit(pdata, n) #define SET_DATA_DIBIT(pdata, n, val) l_setDataDibit(pdata, n, val) #define CLEAR_DATA_DIBIT(pdata, n) l_clearDataDibit(pdata, n) #define GET_DATA_QBIT(pdata, n) l_getDataQbit(pdata, n) #define SET_DATA_QBIT(pdata, n, val) l_setDataQbit(pdata, n, val) #define CLEAR_DATA_QBIT(pdata, n) l_clearDataQbit(pdata, n) #define GET_DATA_BYTE(pdata, n) l_getDataByte(pdata, n) #define SET_DATA_BYTE(pdata, n, val) l_setDataByte(pdata, n, val) #define GET_DATA_TWO_BYTES(pdata, n) l_getDataTwoBytes(pdata, n) #define SET_DATA_TWO_BYTES(pdata, n, val) l_setDataTwoBytes(pdata, n, val) #define GET_DATA_FOUR_BYTES(pdata, n) l_getDataFourBytes(pdata, n) #define SET_DATA_FOUR_BYTES(pdata, n, val) l_setDataFourBytes(pdata, n, val) #endif /* !USE_INLINE_ACCESSORS || _MSC_VER */ #endif /* LEPTONICA_ARRAY_ACCESS_H */ leptonica-1.70/src/pix3.c0000644000175000017500000027311412244225736013342 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pix3.c * * This file has these operations: * * (1) Mask-directed operations * (2) Full-image bit-logical operations * (3) Foreground pixel counting operations on 1 bpp images * (4) Average and variance of pixel values * (5) Mirrored tiling of a smaller image * * * Masked operations * l_int32 pixSetMasked() * l_int32 pixSetMaskedGeneral() * l_int32 pixCombineMasked() * l_int32 pixCombineMaskedGeneral() * l_int32 pixPaintThroughMask() * PIX *pixPaintSelfThroughMask() * PIX *pixMakeMaskFromLUT() * PIX *pixSetUnderTransparency() * * One and two-image boolean operations on arbitrary depth images * PIX *pixInvert() * PIX *pixOr() * PIX *pixAnd() * PIX *pixXor() * PIX *pixSubtract() * * Foreground pixel counting in 1 bpp images * l_int32 pixZero() * l_int32 pixForegroundFraction() * NUMA *pixaCountPixels() * l_int32 pixCountPixels() * NUMA *pixCountByRow() * NUMA *pixCountByColumn() * NUMA *pixCountPixelsByRow() * NUMA *pixCountPixelsByColumn() * l_int32 pixCountPixelsInRow() * NUMA *pixGetMomentByColumn() * l_int32 pixThresholdPixelSum() * l_int32 *makePixelSumTab8() * l_int32 *makePixelCentroidTab8() * * Average of pixel values in gray images * NUMA *pixAverageByRow() * NUMA *pixAverageByColumn() * l_int32 pixAverageInRect() * * Variance of pixel values in gray images * NUMA *pixVarianceByRow() * NUMA *pixVarianceByColumn() * l_int32 pixVarianceInRect() * * Average of absolute value of pixel differences in gray images * NUMA *pixAbsDiffByRow() * NUMA *pixAbsDiffByColumn() * l_int32 pixAbsDiffInRect() * l_int32 pixAbsDiffOnLine() * * Count of pixels with specific value * * l_int32 pixCountArbInRect() * * Mirrored tiling * PIX *pixMirroredTiling() * * Static helper function * static l_int32 findTilePatchCenter() */ #include #include #include "allheaders.h" static l_int32 findTilePatchCenter(PIX *pixs, BOX *box, l_int32 dir, l_uint32 targdist, l_uint32 *pdist, l_int32 *pxc, l_int32 *pyc); #ifndef NO_CONSOLE_IO #define EQUAL_SIZE_WARNING 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Masked operations * *-------------------------------------------------------------*/ /*! * pixSetMasked() * * Input: pixd (1, 2, 4, 8, 16 or 32 bpp; or colormapped) * pixm ( 1 bpp mask; no operation if NULL) * val (value to set at each masked pixel) * Return: 0 if OK; 1 on error * * Notes: * (1) In-place operation. * (2) NOTE: For cmapped images, this calls pixSetMaskedCmap(). * @val must be the 32-bit color representation of the RGB pixel. * It is not the index into the colormap! * (2) If pixm == NULL, a warning is given. * (3) This is an implicitly aligned operation, where the UL * corners of pixd and pixm coincide. A warning is * issued if the two image sizes differ significantly, * but the operation proceeds. * (4) Each pixel in pixd that co-locates with an ON pixel * in pixm is set to the specified input value. * Other pixels in pixd are not changed. * (5) You can visualize this as painting the color through * the mask, as a stencil. * (6) If you do not want to have the UL corners aligned, * use the function pixSetMaskedGeneral(), which requires * you to input the UL corner of pixm relative to pixd. * (7) Implementation details: see comments in pixPaintThroughMask() * for when we use rasterop to do the painting. */ l_int32 pixSetMasked(PIX *pixd, PIX *pixm, l_uint32 val) { l_int32 wd, hd, wm, hm, w, h, d, wpld, wplm; l_int32 i, j, rval, gval, bval; l_uint32 *datad, *datam, *lined, *linem; PROCNAME("pixSetMasked"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixm) { L_WARNING("no mask; nothing to do\n", procName); return 0; } if (pixGetColormap(pixd)) { extractRGBValues(val, &rval, &gval, &bval); return pixSetMaskedCmap(pixd, pixm, 0, 0, rval, gval, bval); } if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); d = pixGetDepth(pixd); if (d == 1) val &= 1; else if (d == 2) val &= 3; else if (d == 4) val &= 0x0f; else if (d == 8) val &= 0xff; else if (d == 16) val &= 0xffff; else if (d != 32) return ERROR_INT("pixd not 1, 2, 4, 8, 16 or 32 bpp", procName, 1); pixGetDimensions(pixm, &wm, &hm, NULL); /* If d == 1, use rasterop; it's about 25x faster */ if (d == 1) { if (val == 0) { PIX *pixmi = pixInvert(NULL, pixm); pixRasterop(pixd, 0, 0, wm, hm, PIX_MASK, pixmi, 0, 0); pixDestroy(&pixmi); } else { /* val == 1 */ pixRasterop(pixd, 0, 0, wm, hm, PIX_PAINT, pixm, 0, 0); } return 0; } /* For d < 32, use rasterop for val == 0 (black); ~3x faster. */ if (d < 32 && val == 0) { PIX *pixmd = pixUnpackBinary(pixm, d, 1); pixRasterop(pixd, 0, 0, wm, hm, PIX_MASK, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } /* For d < 32, use rasterop for val == maxval (white); ~3x faster. */ if (d < 32 && val == ((1 << d) - 1)) { PIX *pixmd = pixUnpackBinary(pixm, d, 0); pixRasterop(pixd, 0, 0, wm, hm, PIX_PAINT, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } pixGetDimensions(pixd, &wd, &hd, &d); w = L_MIN(wd, wm); h = L_MIN(hd, hm); if (L_ABS(wd - wm) > 7 || L_ABS(hd - hm) > 7) /* allow a small tolerance */ L_WARNING("pixd and pixm sizes differ\n", procName); datad = pixGetData(pixd); datam = pixGetData(pixm); wpld = pixGetWpl(pixd); wplm = pixGetWpl(pixm); for (i = 0; i < h; i++) { lined = datad + i * wpld; linem = datam + i * wplm; for (j = 0; j < w; j++) { if (GET_DATA_BIT(linem, j)) { switch(d) { case 2: SET_DATA_DIBIT(lined, j, val); break; case 4: SET_DATA_QBIT(lined, j, val); break; case 8: SET_DATA_BYTE(lined, j, val); break; case 16: SET_DATA_TWO_BYTES(lined, j, val); break; case 32: *(lined + j) = val; break; default: return ERROR_INT("shouldn't get here", procName, 1); } } } } return 0; } /*! * pixSetMaskedGeneral() * * Input: pixd (8, 16 or 32 bpp) * pixm ( 1 bpp mask; no operation if null) * val (value to set at each masked pixel) * x, y (location of UL corner of pixm relative to pixd; * can be negative) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place operation. * (2) Alignment is explicit. If you want the UL corners of * the two images to be aligned, use pixSetMasked(). * (3) A typical use would be painting through the foreground * of a small binary mask pixm, located somewhere on a * larger pixd. Other pixels in pixd are not changed. * (4) You can visualize this as painting the color through * the mask, as a stencil. * (5) This uses rasterop to handle clipping and different depths of pixd. * (6) If pixd has a colormap, you should call pixPaintThroughMask(). * (7) Why is this function here, if pixPaintThroughMask() does the * same thing, and does it more generally? I've retained it here * to show how one can paint through a mask using only full * image rasterops, rather than pixel peeking in pixm and poking * in pixd. It's somewhat baroque, but I found it amusing. */ l_int32 pixSetMaskedGeneral(PIX *pixd, PIX *pixm, l_uint32 val, l_int32 x, l_int32 y) { l_int32 wm, hm, d; PIX *pixmu, *pixc; PROCNAME("pixSetMaskedGeneral"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixm) /* nothing to do */ return 0; d = pixGetDepth(pixd); if (d != 8 && d != 16 && d != 32) return ERROR_INT("pixd not 8, 16 or 32 bpp", procName, 1); if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); /* Unpack binary to depth d, with inversion: 1 --> 0, 0 --> 0xff... */ if ((pixmu = pixUnpackBinary(pixm, d, 1)) == NULL) return ERROR_INT("pixmu not made", procName, 1); /* Clear stenciled pixels in pixd */ pixGetDimensions(pixm, &wm, &hm, NULL); pixRasterop(pixd, x, y, wm, hm, PIX_SRC & PIX_DST, pixmu, 0, 0); /* Generate image with requisite color */ if ((pixc = pixCreateTemplate(pixmu)) == NULL) return ERROR_INT("pixc not made", procName, 1); pixSetAllArbitrary(pixc, val); /* Invert stencil mask, and paint color color into stencil */ pixInvert(pixmu, pixmu); pixAnd(pixmu, pixmu, pixc); /* Finally, repaint stenciled pixels, with val, in pixd */ pixRasterop(pixd, x, y, wm, hm, PIX_SRC | PIX_DST, pixmu, 0, 0); pixDestroy(&pixmu); pixDestroy(&pixc); return 0; } /*! * pixCombineMasked() * * Input: pixd (1 bpp, 8 bpp gray or 32 bpp rgb; no cmap) * pixs (1 bpp, 8 bpp gray or 32 bpp rgb; no cmap) * pixm ( 1 bpp mask; no operation if NULL) * Return: 0 if OK; 1 on error * * Notes: * (1) In-place operation; pixd is changed. * (2) This sets each pixel in pixd that co-locates with an ON * pixel in pixm to the corresponding value of pixs. * (3) pixs and pixd must be the same depth and not colormapped. * (4) All three input pix are aligned at the UL corner, and the * operation is clipped to the intersection of all three images. * (5) If pixm == NULL, it's a no-op. * (6) Implementation: see notes in pixCombineMaskedGeneral(). * For 8 bpp selective masking, you might guess that it * would be faster to generate an 8 bpp version of pixm, * using pixConvert1To8(pixm, 0, 255), and then use a * general combine operation * d = (d & ~m) | (s & m) * on a word-by-word basis. Not always. The word-by-word * combine takes a time that is independent of the mask data. * If the mask is relatively sparse, the byte-check method * is actually faster! */ l_int32 pixCombineMasked(PIX *pixd, PIX *pixs, PIX *pixm) { l_int32 w, h, d, ws, hs, ds, wm, hm, dm, wmin, hmin; l_int32 wpl, wpls, wplm, i, j, val; l_uint32 *data, *datas, *datam, *line, *lines, *linem; PIX *pixt; PROCNAME("pixCombineMasked"); if (!pixm) /* nothing to do */ return 0; if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixd, &w, &h, &d); pixGetDimensions(pixs, &ws, &hs, &ds); pixGetDimensions(pixm, &wm, &hm, &dm); if (d != ds) return ERROR_INT("pixs and pixd depths differ", procName, 1); if (dm != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (d != 1 && d != 8 && d != 32) return ERROR_INT("pixd not 1, 8 or 32 bpp", procName, 1); if (pixGetColormap(pixd) || pixGetColormap(pixs)) return ERROR_INT("pixs and/or pixd is cmapped", procName, 1); /* For d = 1, use rasterop. pixt is the part from pixs, under * the fg of pixm, that is to be combined with pixd. We also * use pixt to remove all fg of pixd that is under the fg of pixm. * Then pixt and pixd are combined by ORing. */ wmin = L_MIN(w, L_MIN(ws, wm)); hmin = L_MIN(h, L_MIN(hs, hm)); if (d == 1) { pixt = pixAnd(NULL, pixs, pixm); pixRasterop(pixd, 0, 0, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC), pixm, 0, 0); pixRasterop(pixd, 0, 0, wmin, hmin, PIX_SRC | PIX_DST, pixt, 0, 0); pixDestroy(&pixt); return 0; } data = pixGetData(pixd); datas = pixGetData(pixs); datam = pixGetData(pixm); wpl = pixGetWpl(pixd); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); if (d == 8) { for (i = 0; i < hmin; i++) { line = data + i * wpl; lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (GET_DATA_BIT(linem, j)) { val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(line, j, val); } } } } else { /* d == 32 */ for (i = 0; i < hmin; i++) { line = data + i * wpl; lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (GET_DATA_BIT(linem, j)) line[j] = lines[j]; } } } return 0; } /*! * pixCombineMaskedGeneral() * * Input: pixd (1 bpp, 8 bpp gray or 32 bpp rgb) * pixs (1 bpp, 8 bpp gray or 32 bpp rgb) * pixm ( 1 bpp mask) * x, y (origin of pixs and pixm relative to pixd; can be negative) * Return: 0 if OK; 1 on error * * Notes: * (1) In-place operation; pixd is changed. * (2) This is a generalized version of pixCombinedMasked(), where * the source and mask can be placed at the same (arbitrary) * location relative to pixd. * (3) pixs and pixd must be the same depth and not colormapped. * (4) The UL corners of both pixs and pixm are aligned with * the point (x, y) of pixd, and the operation is clipped to * the intersection of all three images. * (5) If pixm == NULL, it's a no-op. * (6) Implementation. There are two ways to do these. In the first, * we use rasterop, ORing the part of pixs under the mask * with pixd (which has been appropriately cleared there first). * In the second, the mask is used one pixel at a time to * selectively replace pixels of pixd with those of pixs. * Here, we use rasterop for 1 bpp and pixel-wise replacement * for 8 and 32 bpp. To use rasterop for 8 bpp, for example, * we must first generate an 8 bpp version of the mask. * The code is simple: * * Pix *pixm8 = pixConvert1To8(NULL, pixm, 0, 255); * Pix *pixt = pixAnd(NULL, pixs, pixm8); * pixRasterop(pixd, x, y, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC), * pixm8, 0, 0); * pixRasterop(pixd, x, y, wmin, hmin, PIX_SRC | PIX_DST, * pixt, 0, 0); * pixDestroy(&pixt); * pixDestroy(&pixm8); */ l_int32 pixCombineMaskedGeneral(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 x, l_int32 y) { l_int32 d, w, h, ws, hs, ds, wm, hm, dm, wmin, hmin; l_int32 wpl, wpls, wplm, i, j, val; l_uint32 *data, *datas, *datam, *line, *lines, *linem; PIX *pixt; PROCNAME("pixCombineMaskedGeneral"); if (!pixm) /* nothing to do */ return 0; if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixd, &w, &h, &d); pixGetDimensions(pixs, &ws, &hs, &ds); pixGetDimensions(pixm, &wm, &hm, &dm); if (d != ds) return ERROR_INT("pixs and pixd depths differ", procName, 1); if (dm != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (d != 1 && d != 8 && d != 32) return ERROR_INT("pixd not 1, 8 or 32 bpp", procName, 1); if (pixGetColormap(pixd) || pixGetColormap(pixs)) return ERROR_INT("pixs and/or pixd is cmapped", procName, 1); /* For d = 1, use rasterop. pixt is the part from pixs, under * the fg of pixm, that is to be combined with pixd. We also * use pixt to remove all fg of pixd that is under the fg of pixm. * Then pixt and pixd are combined by ORing. */ wmin = L_MIN(ws, wm); hmin = L_MIN(hs, hm); if (d == 1) { pixt = pixAnd(NULL, pixs, pixm); pixRasterop(pixd, x, y, wmin, hmin, PIX_DST & PIX_NOT(PIX_SRC), pixm, 0, 0); pixRasterop(pixd, x, y, wmin, hmin, PIX_SRC | PIX_DST, pixt, 0, 0); pixDestroy(&pixt); return 0; } wpl = pixGetWpl(pixd); data = pixGetData(pixd); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wplm = pixGetWpl(pixm); datam = pixGetData(pixm); for (i = 0; i < hmin; i++) { if (y + i < 0 || y + i >= h) continue; line = data + (y + i) * wpl; lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wmin; j++) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { switch (d) { case 8: val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(line, x + j, val); break; case 32: *(line + x + j) = *(lines + j); break; default: return ERROR_INT("shouldn't get here", procName, 1); } } } } return 0; } /*! * pixPaintThroughMask() * * Input: pixd (1, 2, 4, 8, 16 or 32 bpp; or colormapped) * pixm ( 1 bpp mask) * x, y (origin of pixm relative to pixd; can be negative) * val (pixel value to set at each masked pixel) * Return: 0 if OK; 1 on error * * Notes: * (1) In-place operation. Calls pixSetMaskedCmap() for colormapped * images. * (2) For 1, 2, 4, 8 and 16 bpp gray, we take the appropriate * number of least significant bits of val. * (3) If pixm == NULL, it's a no-op. * (4) The mask origin is placed at (x,y) on pixd, and the * operation is clipped to the intersection of rectangles. * (5) For rgb, the components in val are in the canonical locations, * with red in location COLOR_RED, etc. * (6) Implementation detail 1: * For painting with val == 0 or val == maxval, you can use rasterop. * If val == 0, invert the mask so that it's 0 over the region * into which you want to write, and use PIX_SRC & PIX_DST to * clear those pixels. To write with val = maxval (all 1's), * use PIX_SRC | PIX_DST to set all bits under the mask. * (7) Implementation detail 2: * The rasterop trick can be used for depth > 1 as well. * For val == 0, generate the mask for depth d from the binary * mask using * pixmd = pixUnpackBinary(pixm, d, 1); * and use pixRasterop() with PIX_MASK. For val == maxval, * pixmd = pixUnpackBinary(pixm, d, 0); * and use pixRasterop() with PIX_PAINT. * But note that if d == 32 bpp, it is about 3x faster to use * the general implementation (not pixRasterop()). * (8) Implementation detail 3: * It might be expected that the switch in the inner loop will * cause large branching delays and should be avoided. * This is not the case, because the entrance is always the * same and the compiler can correctly predict the jump. */ l_int32 pixPaintThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val) { l_int32 d, w, h, wm, hm, wpl, wplm, i, j, rval, gval, bval; l_uint32 *data, *datam, *line, *linem; PROCNAME("pixPaintThroughMask"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixm) /* nothing to do */ return 0; if (pixGetColormap(pixd)) { extractRGBValues(val, &rval, &gval, &bval); return pixSetMaskedCmap(pixd, pixm, x, y, rval, gval, bval); } if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); d = pixGetDepth(pixd); if (d == 1) val &= 1; else if (d == 2) val &= 3; else if (d == 4) val &= 0x0f; else if (d == 8) val &= 0xff; else if (d == 16) val &= 0xffff; else if (d != 32) return ERROR_INT("pixd not 1, 2, 4, 8, 16 or 32 bpp", procName, 1); pixGetDimensions(pixm, &wm, &hm, NULL); /* If d == 1, use rasterop; it's about 25x faster. */ if (d == 1) { if (val == 0) { PIX *pixmi = pixInvert(NULL, pixm); pixRasterop(pixd, x, y, wm, hm, PIX_MASK, pixmi, 0, 0); pixDestroy(&pixmi); } else { /* val == 1 */ pixRasterop(pixd, x, y, wm, hm, PIX_PAINT, pixm, 0, 0); } return 0; } /* For d < 32, use rasterop if val == 0 (black); ~3x faster. */ if (d < 32 && val == 0) { PIX *pixmd = pixUnpackBinary(pixm, d, 1); pixRasterop(pixd, x, y, wm, hm, PIX_MASK, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } /* For d < 32, use rasterop if val == maxval (white); ~3x faster. */ if (d < 32 && val == ((1 << d) - 1)) { PIX *pixmd = pixUnpackBinary(pixm, d, 0); pixRasterop(pixd, x, y, wm, hm, PIX_PAINT, pixmd, 0, 0); pixDestroy(&pixmd); return 0; } /* All other cases */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); wplm = pixGetWpl(pixm); datam = pixGetData(pixm); for (i = 0; i < hm; i++) { if (y + i < 0 || y + i >= h) continue; line = data + (y + i) * wpl; linem = datam + i * wplm; for (j = 0; j < wm; j++) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { switch (d) { case 2: SET_DATA_DIBIT(line, x + j, val); break; case 4: SET_DATA_QBIT(line, x + j, val); break; case 8: SET_DATA_BYTE(line, x + j, val); break; case 16: SET_DATA_TWO_BYTES(line, x + j, val); break; case 32: *(line + x + j) = val; break; default: return ERROR_INT("shouldn't get here", procName, 1); } } } } return 0; } /*! * pixPaintSelfThroughMask() * * Input: pixd (8 bpp gray or 32 bpp rgb; not colormapped) * pixm (1 bpp mask) * x, y (origin of pixm relative to pixd; must not be negative) * tilesize (requested size for tiling) * searchdir (L_HORIZ, L_VERT) * Return: 0 if OK; 1 on error * * Notes: * (1) In-place operation; pixd is changed. * (2) If pixm == NULL, it's a no-op. * (3) The mask origin is placed at (x,y) on pixd, and the * operation is clipped to the intersection of pixd and the * fg of the mask. * (4) The tilesize is the the requested size for tiling. The * actual size for each c.c. will be bounded by the minimum * dimension of the c.c. and the distance at which the tile * center is located. * (5) searchdir is the direction with respect to the b.b. of each * mask component, from which the square patch is chosen and * tiled onto the image, clipped by the mask component. * (6) Specifically, a mirrored tiling, generated from pixd, * is used to construct the pixels that are painted onto * pixd through pixm. */ l_int32 pixPaintSelfThroughMask(PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_int32 tilesize, l_int32 searchdir) { l_int32 w, h, d, wm, hm, dm, i, n, xc, yc, bx, by, bw, bh; l_int32 depth, cctilesize; l_uint32 dist, minside, retval; BOX *box, *boxt; BOXA *boxa; PIX *pix, *pixf, *pixdf, *pixt, *pixc; PIXA *pixa; PROCNAME("pixPaintSelfThroughMask"); if (!pixm) /* nothing to do */ return 0; if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixGetColormap(pixd) != NULL) return ERROR_INT("pixd has colormap", procName, 1); pixGetDimensions(pixd, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixd not 8 or 32 bpp", procName, 1); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (x < 0 || y < 0) return ERROR_INT("x and y must be non-negative", procName, 1); if (tilesize < 1) return ERROR_INT("tilesize must be >= 1", procName, 1); if (searchdir != L_HORIZ && searchdir != L_VERT) return ERROR_INT("searchdir not in {L_HORIZ, L_VERT}", procName, 1); /* Embed mask in full sized mask */ if (wm < w || hm < h) { pixf = pixCreate(w, h, 1); pixRasterop(pixf, x, y, wm, hm, PIX_SRC, pixm, 0, 0); } else { pixf = pixCopy(NULL, pixm); } /* Get connected components of mask */ boxa = pixConnComp(pixf, &pixa, 8); if ((n = pixaGetCount(pixa)) == 0) { L_WARNING("no fg in mask\n", procName); pixDestroy(&pixf); pixaDestroy(&pixa); boxaDestroy(&boxa); return 1; } /* Get distance function for the mask */ pixInvert(pixf, pixf); depth = (tilesize < 256) ? 8 : 16; pixdf = pixDistanceFunction(pixf, 4, depth, L_BOUNDARY_BG); pixDestroy(&pixf); /* For each c.c., generate a representative tile for texturizing * and apply it through the mask. The input 'tilesize' is the * requested value. findTilePatchCenter() returns the distance * at which this patch can safely be found. */ retval = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); box = pixaGetBox(pixa, i, L_CLONE); boxGetGeometry(box, &bx, &by, &bw, &bh); minside = L_MIN(bw, bh); findTilePatchCenter(pixdf, box, searchdir, L_MIN(minside, tilesize), &dist, &xc, &yc); cctilesize = L_MIN(tilesize, dist); /* for this c.c. */ if (cctilesize < 1) { L_WARNING("region not found!\n", procName); pixDestroy(&pix); boxDestroy(&box); retval = 1; continue; } /* Extract the selected square from pixd, and generate * an image the size of the b.b. of the c.c., which * is then painted through the c.c. mask. */ boxt = boxCreate(L_MAX(0, xc - dist / 2), L_MAX(0, yc - dist / 2), cctilesize, cctilesize); pixt = pixClipRectangle(pixd, boxt, NULL); pixc = pixMirroredTiling(pixt, bw, bh); pixCombineMaskedGeneral(pixd, pixc, pix, bx, by); pixDestroy(&pix); pixDestroy(&pixt); pixDestroy(&pixc); boxDestroy(&box); boxDestroy(&boxt); } pixDestroy(&pixdf); pixaDestroy(&pixa); boxaDestroy(&boxa); return retval; } /*! * pixMakeMaskFromLUT() * * Input: pixs (2, 4 or 8 bpp; can be colormapped) * tab (256-entry LUT; 1 means to write to mask) * Return: pixd (1 bpp mask), or null on error * * Notes: * (1) This generates a 1 bpp mask image, where a 1 is written in * the mask for each pixel in pixs that has a value corresponding * to a 1 in the LUT. * (2) The LUT should be of size 256. */ PIX * pixMakeMaskFromLUT(PIX *pixs, l_int32 *tab) { l_int32 w, h, d, i, j, val, wpls, wpld; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixMakeMaskFromLUT"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!tab) return (PIX *)ERROR_PTR("tab not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("pix not 2, 4 or 8 bpp", procName, NULL); pixd = pixCreate(w, h, 1); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 2) val = GET_DATA_DIBIT(lines, j); else if (d == 4) val = GET_DATA_QBIT(lines, j); else /* d == 8 */ val = GET_DATA_BYTE(lines, j); if (tab[val] == 1) SET_DATA_BIT(lined, j); } } return pixd; } /*! * pixSetUnderTransparency() * * Input: pixs (32 bpp rgba) * val (32 bit unsigned color to use where alpha == 0) * debug (displays layers of pixs) * Return: pixd (32 bpp rgba), or null on error * * Notes: * (1) This sets the r, g and b components under every fully * transparent alpha component to @val. The alpha components * are unchanged. * (2) Full transparency is denoted by alpha == 0. Setting * all pixels to a constant @val where alpha is transparent * can improve compressibility by reducing the entropy. * (3) The visual result depends on how the image is displayed. * (a) For display devices that respect the use of the alpha * layer, this will not affect the appearance. * (b) For typical leptonica operations, alpha is ignored, * so there will be a change in appearance because this * resets the rgb values in the fully transparent region. * (4) pixRead() and pixWrite() will, by default, read and write * 4-component (rgba) pix in png format. To ignore the alpha * component after reading, or omit it on writing, pixSetSpp(..., 3). * (5) Here are some examples: * * To convert all fully transparent pixels in a 4 component * (rgba) png file to white: * pixs = pixRead(); * pixd = pixSetUnderTransparency(pixs, 0xffffff00, 0); * * To write pixd with the alpha component: * pixWrite(, pixd, IFF_PNG); * * To write and rgba image without the alpha component, first do: * pixSetSpp(pixd, 3); * If you later want to use the alpha, spp must be reset to 4. * * (fancier) To remove the alpha by blending the image over * a white background: * pixRemoveAlpha() * This changes all pixel values where the alpha component is * not opaque (255). * (6) Caution. rgb images in leptonica typically have value 0 in * the alpha channel, which is fully transparent. If spp for * such an image were changed from 3 to 4, the image becomes * fully transparent, and this function will set each pixel to @val. * If you really want to set every pixel to the same value, * use pixSetAllArbitrary(). * (7) This is useful for compressing an RGBA image where the part * of the image that is fully transparent is random junk; compression * is typically improved by setting that region to a constant. * For rendering as a 3 component RGB image over a uniform * background of arbitrary color, use pixAlphaBlendUniform(). */ PIX * pixSetUnderTransparency(PIX *pixs, l_uint32 val, l_int32 debug) { PIX *pixg, *pixm, *pixt, *pixd; PROCNAME("pixSetUnderTransparency"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not defined or not 32 bpp", procName, NULL); if (pixGetSpp(pixs) != 4) { L_WARNING("no alpha channel; returning a copy\n", procName); return pixCopy(NULL, pixs); } /* Make a mask from the alpha component with ON pixels * wherever the alpha component is fully transparent (0). * The hard way: * l_int32 *lut = (l_int32 *)CALLOC(256, sizeof(l_int32)); * lut[0] = 1; * pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); * pixm = pixMakeMaskFromLUT(pixg, lut); * FREE(lut); * But there's an easier way to set pixels in a mask where * the alpha component is 0 ... */ pixg = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pixm = pixThresholdToBinary(pixg, 1); if (debug) { pixt = pixDisplayLayersRGBA(pixs, 0xffffff00, 600); pixDisplay(pixt, 0, 0); pixDestroy(&pixt); } pixd = pixCopy(NULL, pixs); pixSetMasked(pixd, pixm, (val & 0xffffff00)); pixDestroy(&pixg); pixDestroy(&pixm); return pixd; } /*-------------------------------------------------------------* * One and two-image boolean ops on arbitrary depth images * *-------------------------------------------------------------*/ /*! * pixInvert() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs * Return: pixd, or null on error * * Notes: * (1) This inverts pixs, for all pixel depths. * (2) There are 3 cases: * (a) pixd == null, ~src --> new pixd * (b) pixd == pixs, ~src --> src (in-place) * (c) pixd != pixs, ~src --> input pixd * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixInvert(NULL, pixs); * (b) pixInvert(pixs, pixs); * (c) pixInvert(pixd, pixs); */ PIX * pixInvert(PIX *pixd, PIX *pixs) { PROCNAME("pixInvert"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_NOT(PIX_DST), NULL, 0, 0); /* invert pixd */ return pixd; } /*! * pixOr() * * Input: pixd (; this can be null, equal to pixs1, * different from pixs1) * pixs1 (can be == pixd) * pixs2 (must be != pixd) * Return: pixd always * * Notes: * (1) This gives the union of two images with equal depth, * aligning them to the the UL corner. pixs1 and pixs2 * need not have the same width and height. * (2) There are 3 cases: * (a) pixd == null, (src1 | src2) --> new pixd * (b) pixd == pixs1, (src1 | src2) --> src1 (in-place) * (c) pixd != pixs1, (src1 | src2) --> input pixd * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixOr(NULL, pixs1, pixs2); * (b) pixOr(pixs1, pixs1, pixs2); * (c) pixOr(pixd, pixs1, pixs2); * (4) The size of the result is determined by pixs1. * (5) The depths of pixs1 and pixs2 must be equal. * (6) Note carefully that the order of pixs1 and pixs2 only matters * for the in-place case. For in-place, you must have * pixd == pixs1. Setting pixd == pixs2 gives an incorrect * result: the copy puts pixs1 image data in pixs2, and * the rasterop is then between pixs2 and pixs2 (a no-op). */ PIX * pixOr(PIX *pixd, PIX *pixs1, PIX *pixs2) { PROCNAME("pixOr"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixd == pixs2) return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", procName, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); #endif /* EQUAL_SIZE_WARNING */ /* Prepare pixd to be a copy of pixs1 */ if ((pixd = pixCopy(pixd, pixs1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, pixd); /* src1 | src2 --> dest */ pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_SRC | PIX_DST, pixs2, 0, 0); return pixd; } /*! * pixAnd() * * Input: pixd (; this can be null, equal to pixs1, * different from pixs1) * pixs1 (can be == pixd) * pixs2 (must be != pixd) * Return: pixd always * * Notes: * (1) This gives the intersection of two images with equal depth, * aligning them to the the UL corner. pixs1 and pixs2 * need not have the same width and height. * (2) There are 3 cases: * (a) pixd == null, (src1 & src2) --> new pixd * (b) pixd == pixs1, (src1 & src2) --> src1 (in-place) * (c) pixd != pixs1, (src1 & src2) --> input pixd * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixAnd(NULL, pixs1, pixs2); * (b) pixAnd(pixs1, pixs1, pixs2); * (c) pixAnd(pixd, pixs1, pixs2); * (4) The size of the result is determined by pixs1. * (5) The depths of pixs1 and pixs2 must be equal. * (6) Note carefully that the order of pixs1 and pixs2 only matters * for the in-place case. For in-place, you must have * pixd == pixs1. Setting pixd == pixs2 gives an incorrect * result: the copy puts pixs1 image data in pixs2, and * the rasterop is then between pixs2 and pixs2 (a no-op). */ PIX * pixAnd(PIX *pixd, PIX *pixs1, PIX *pixs2) { PROCNAME("pixAnd"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixd == pixs2) return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", procName, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); #endif /* EQUAL_SIZE_WARNING */ /* Prepare pixd to be a copy of pixs1 */ if ((pixd = pixCopy(pixd, pixs1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, pixd); /* src1 & src2 --> dest */ pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_SRC & PIX_DST, pixs2, 0, 0); return pixd; } /*! * pixXor() * * Input: pixd (; this can be null, equal to pixs1, * different from pixs1) * pixs1 (can be == pixd) * pixs2 (must be != pixd) * Return: pixd always * * Notes: * (1) This gives the XOR of two images with equal depth, * aligning them to the the UL corner. pixs1 and pixs2 * need not have the same width and height. * (2) There are 3 cases: * (a) pixd == null, (src1 ^ src2) --> new pixd * (b) pixd == pixs1, (src1 ^ src2) --> src1 (in-place) * (c) pixd != pixs1, (src1 ^ src2) --> input pixd * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixXor(NULL, pixs1, pixs2); * (b) pixXor(pixs1, pixs1, pixs2); * (c) pixXor(pixd, pixs1, pixs2); * (4) The size of the result is determined by pixs1. * (5) The depths of pixs1 and pixs2 must be equal. * (6) Note carefully that the order of pixs1 and pixs2 only matters * for the in-place case. For in-place, you must have * pixd == pixs1. Setting pixd == pixs2 gives an incorrect * result: the copy puts pixs1 image data in pixs2, and * the rasterop is then between pixs2 and pixs2 (a no-op). */ PIX * pixXor(PIX *pixd, PIX *pixs1, PIX *pixs2) { PROCNAME("pixXor"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixd == pixs2) return (PIX *)ERROR_PTR("cannot have pixs2 == pixd", procName, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); #endif /* EQUAL_SIZE_WARNING */ /* Prepare pixd to be a copy of pixs1 */ if ((pixd = pixCopy(pixd, pixs1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, pixd); /* src1 ^ src2 --> dest */ pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), PIX_SRC ^ PIX_DST, pixs2, 0, 0); return pixd; } /*! * pixSubtract() * * Input: pixd (; this can be null, equal to pixs1, * equal to pixs2, or different from both pixs1 and pixs2) * pixs1 (can be == pixd) * pixs2 (can be == pixd) * Return: pixd always * * Notes: * (1) This gives the set subtraction of two images with equal depth, * aligning them to the the UL corner. pixs1 and pixs2 * need not have the same width and height. * (2) Source pixs2 is always subtracted from source pixs1. * The result is * pixs1 \ pixs2 = pixs1 & (~pixs2) * (3) There are 4 cases: * (a) pixd == null, (src1 - src2) --> new pixd * (b) pixd == pixs1, (src1 - src2) --> src1 (in-place) * (c) pixd == pixs2, (src1 - src2) --> src2 (in-place) * (d) pixd != pixs1 && pixd != pixs2), * (src1 - src2) --> input pixd * (4) For clarity, if the case is known, use these patterns: * (a) pixd = pixSubtract(NULL, pixs1, pixs2); * (b) pixSubtract(pixs1, pixs1, pixs2); * (c) pixSubtract(pixs2, pixs1, pixs2); * (d) pixSubtract(pixd, pixs1, pixs2); * (5) The size of the result is determined by pixs1. * (6) The depths of pixs1 and pixs2 must be equal. */ PIX * pixSubtract(PIX *pixd, PIX *pixs1, PIX *pixs2) { l_int32 w, h; PROCNAME("pixSubtract"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixGetDepth(pixs1) != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("depths of pixs* unequal", procName, pixd); #if EQUAL_SIZE_WARNING if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal sizes\n", procName); #endif /* EQUAL_SIZE_WARNING */ pixGetDimensions(pixs1, &w, &h, NULL); if (!pixd) { pixd = pixCopy(NULL, pixs1); pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); /* src1 & (~src2) */ } else if (pixd == pixs1) { pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); /* src1 & (~src2) */ } else if (pixd == pixs2) { pixRasterop(pixd, 0, 0, w, h, PIX_NOT(PIX_DST) & PIX_SRC, pixs1, 0, 0); /* src1 & (~src2) */ } else { /* pixd != pixs1 && pixd != pixs2 */ pixCopy(pixd, pixs1); /* sizes pixd to pixs1 if unequal */ pixRasterop(pixd, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixs2, 0, 0); /* src1 & (~src2) */ } return pixd; } /*-------------------------------------------------------------* * Pixel counting * *-------------------------------------------------------------*/ /*! * pixZero() * * Input: pix (all depths; not colormapped) * &empty ( 1 if all bits in image are 0; 0 otherwise) * Return: 0 if OK; 1 on error * * Notes: * (1) For a binary image, if there are no fg (black) pixels, empty = 1. * (2) For a grayscale image, if all pixels are black (0), empty = 1. * (3) For an RGB image, if all 4 components in every pixel is 0, * empty = 1. */ l_int32 pixZero(PIX *pix, l_int32 *pempty) { l_int32 w, h, wpl, i, j, fullwords, endbits; l_uint32 endmask; l_uint32 *data, *line; PROCNAME("pixZero"); if (!pempty) return ERROR_INT("pempty not defined", procName, 1); *pempty = 1; if (!pix) return ERROR_INT("pix not defined", procName, 1); if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", procName, 1); w = pixGetWidth(pix) * pixGetDepth(pix); h = pixGetHeight(pix); wpl = pixGetWpl(pix); data = pixGetData(pix); fullwords = w / 32; endbits = w & 31; endmask = 0xffffffff << (32 - endbits); for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < fullwords; j++) if (*line++) { *pempty = 0; return 0; } if (endbits) { if (*line & endmask) { *pempty = 0; return 0; } } } return 0; } /*! * pixForegroundFraction() * * Input: pix (1 bpp) * &fract ( fraction of ON pixels) * Return: 0 if OK; 1 on error */ l_int32 pixForegroundFraction(PIX *pix, l_float32 *pfract) { l_int32 w, h, count; PROCNAME("pixForegroundFraction"); if (!pfract) return ERROR_INT("pfract not defined", procName, 1); *pfract = 0.0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", procName, 1); pixCountPixels(pix, &count, NULL); pixGetDimensions(pix, &w, &h, NULL); *pfract = (l_float32)count / (l_float32)(w * h); return 0; } /*! * pixaCountPixels() * * Input: pixa (array of 1 bpp pix) * Return: na of ON pixels in each pix, or null on error */ NUMA * pixaCountPixels(PIXA *pixa) { l_int32 d, i, n, count; l_int32 *tab; NUMA *na; PIX *pix; PROCNAME("pixaCountPixels"); if (!pixa) return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); if ((n = pixaGetCount(pixa)) == 0) return numaCreate(1); pix = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pix); pixDestroy(&pix); if (d != 1) return (NUMA *)ERROR_PTR("pixa not 1 bpp", procName, NULL); tab = makePixelSumTab8(); if ((na = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixCountPixels(pix, &count, tab); numaAddNumber(na, count); pixDestroy(&pix); } FREE(tab); return na; } /*! * pixCountPixels() * * Input: pix (1 bpp) * &count ( count of ON pixels) * tab8 ( 8-bit pixel lookup table) * Return: 0 if OK; 1 on error */ l_int32 pixCountPixels(PIX *pix, l_int32 *pcount, l_int32 *tab8) { l_uint32 endmask; l_int32 w, h, wpl, i, j; l_int32 fullwords, endbits, sum; l_int32 *tab; l_uint32 *data; PROCNAME("pixCountPixels"); if (!pcount) return ERROR_INT("pcount not defined", procName, 1); *pcount = 0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", procName, 1); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; pixGetDimensions(pix, &w, &h, NULL); wpl = pixGetWpl(pix); data = pixGetData(pix); fullwords = w >> 5; endbits = w & 31; endmask = 0xffffffff << (32 - endbits); sum = 0; for (i = 0; i < h; i++, data += wpl) { for (j = 0; j < fullwords; j++) { l_uint32 word = data[j]; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (endbits) { l_uint32 word = data[j] & endmask; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } } *pcount = sum; if (!tab8) FREE(tab); return 0; } /*! * pixCountByRow() * * Input: pix (1 bpp) * box ( clipping box for count; can be null) * Return: na of number of ON pixels by row, or null on error * * Notes: * (1) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. */ NUMA * pixCountByRow(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; NUMA *na; PROCNAME("pixCountByRow"); if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); if (!box) return pixCountPixelsByRow(pix, NULL); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, ystart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { count = 0; line = data + i * wpl; for (j = xstart; j < xend; j++) { if (GET_DATA_BIT(line, j)) count++; } numaAddNumber(na, count); } return na; } /*! * pixCountByColumn() * * Input: pix (1 bpp) * box ( clipping box for count; can be null) * Return: na of number of ON pixels by column, or null on error * * Notes: * (1) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. */ NUMA * pixCountByColumn(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, count, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; NUMA *na; PROCNAME("pixCountByColumn"); if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); if (!box) return pixCountPixelsByColumn(pix); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, xstart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { count = 0; for (i = ystart; i < yend; i++) { line = data + i * wpl; if (GET_DATA_BIT(line, j)) count++; } numaAddNumber(na, count); } return na; } /*! * pixCountPixelsByRow() * * Input: pix (1 bpp) * tab8 ( 8-bit pixel lookup table) * Return: na of counts, or null on error */ NUMA * pixCountPixelsByRow(PIX *pix, l_int32 *tab8) { l_int32 h, i, count; l_int32 *tab; NUMA *na; PROCNAME("pixCountPixelsByRow"); if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; h = pixGetHeight(pix); if ((na = numaCreate(h)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < h; i++) { pixCountPixelsInRow(pix, i, &count, tab); numaAddNumber(na, count); } if (!tab8) FREE(tab); return na; } /*! * pixCountPixelsByColumn() * * Input: pix (1 bpp) * Return: na of counts in each column, or null on error */ NUMA * pixCountPixelsByColumn(PIX *pix) { l_int32 i, j, w, h, wpl; l_uint32 *line, *data; l_float32 *array; NUMA *na; PROCNAME("pixCountPixelsByColumn"); if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); pixGetDimensions(pix, &w, &h, NULL); if ((na = numaCreate(w)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, w); array = numaGetFArray(na, L_NOCOPY); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < w; j++) { if (GET_DATA_BIT(line, j)) array[j] += 1.0; } } return na; } /*! * pixCountPixelsInRow() * * Input: pix (1 bpp) * row number * &count ( sum of ON pixels in raster line) * tab8 ( 8-bit pixel lookup table) * Return: 0 if OK; 1 on error */ l_int32 pixCountPixelsInRow(PIX *pix, l_int32 row, l_int32 *pcount, l_int32 *tab8) { l_uint32 word, endmask; l_int32 j, w, h, wpl; l_int32 fullwords, endbits, sum; l_int32 *tab; l_uint32 *line; PROCNAME("pixCountPixelsInRow"); if (!pcount) return ERROR_INT("pcount not defined", procName, 1); *pcount = 0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", procName, 1); pixGetDimensions(pix, &w, &h, NULL); if (row < 0 || row >= h) return ERROR_INT("row out of bounds", procName, 1); wpl = pixGetWpl(pix); line = pixGetData(pix) + row * wpl; fullwords = w >> 5; endbits = w & 31; endmask = 0xffffffff << (32 - endbits); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; sum = 0; for (j = 0; j < fullwords; j++) { word = line[j]; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (endbits) { word = line[j] & endmask; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } *pcount = sum; if (!tab8) FREE(tab); return 0; } /*! * pixGetMomentByColumn() * * Input: pix (1 bpp) * order (of moment, either 1 or 2) * Return: na of first moment of fg pixels, by column, or null on error */ NUMA * pixGetMomentByColumn(PIX *pix, l_int32 order) { l_int32 i, j, w, h, wpl; l_uint32 *line, *data; l_float32 *array; NUMA *na; PROCNAME("pixGetMomentByColumn"); if (!pix || pixGetDepth(pix) != 1) return (NUMA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); if (order != 1 && order != 2) return (NUMA *)ERROR_PTR("order of moment not 1 or 2", procName, NULL); pixGetDimensions(pix, &w, &h, NULL); if ((na = numaCreate(w)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, w); array = numaGetFArray(na, L_NOCOPY); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < w; j++) { if (GET_DATA_BIT(line, j)) { if (order == 1) array[j] += i; else /* order == 2 */ array[j] += i * i; } } } return na; } /*! * pixThresholdPixelSum() * * Input: pix (1 bpp) * threshold * &above ( 1 if above threshold; * 0 if equal to or less than threshold) * tab8 ( 8-bit pixel lookup table) * Return: 0 if OK; 1 on error * * Notes: * (1) This sums the ON pixels and returns immediately if the count * goes above threshold. It is therefore more efficient * for matching images (by running this function on the xor of * the 2 images) than using pixCountPixels(), which counts all * pixels before returning. */ l_int32 pixThresholdPixelSum(PIX *pix, l_int32 thresh, l_int32 *pabove, l_int32 *tab8) { l_uint32 word, endmask; l_int32 *tab; l_int32 w, h, wpl, i, j; l_int32 fullwords, endbits, sum; l_uint32 *line, *data; PROCNAME("pixThresholdPixelSum"); if (!pabove) return ERROR_INT("pabove not defined", procName, 1); *pabove = 0; if (!pix || pixGetDepth(pix) != 1) return ERROR_INT("pix not defined or not 1 bpp", procName, 1); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; pixGetDimensions(pix, &w, &h, NULL); wpl = pixGetWpl(pix); data = pixGetData(pix); fullwords = w >> 5; endbits = w & 31; endmask = 0xffffffff << (32 - endbits); sum = 0; for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < fullwords; j++) { word = line[j]; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (endbits) { word = line[j] & endmask; if (word) { sum += tab[word & 0xff] + tab[(word >> 8) & 0xff] + tab[(word >> 16) & 0xff] + tab[(word >> 24) & 0xff]; } } if (sum > thresh) { *pabove = 1; if (!tab8) FREE(tab); return 0; } } if (!tab8) FREE(tab); return 0; } /*! * makePixelSumTab8() * * Input: void * Return: table of 256 l_int32, or null on error * * Notes: * (1) This table of integers gives the number of 1 bits * in the 8 bit index. */ l_int32 * makePixelSumTab8(void) { l_uint8 byte; l_int32 i; l_int32 *tab; PROCNAME("makePixelSumTab8"); if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 256; i++) { byte = (l_uint8)i; tab[i] = (byte & 0x1) + ((byte >> 1) & 0x1) + ((byte >> 2) & 0x1) + ((byte >> 3) & 0x1) + ((byte >> 4) & 0x1) + ((byte >> 5) & 0x1) + ((byte >> 6) & 0x1) + ((byte >> 7) & 0x1); } return tab; } /*! * makePixelCentroidTab8() * * Input: void * Return: table of 256 l_int32, or null on error * * Notes: * (1) This table of integers gives the centroid weight of the 1 bits * in the 8 bit index. In other words, if sumtab is obtained by * makePixelSumTab8, and centroidtab is obtained by * makePixelCentroidTab8, then, for 1 <= i <= 255, * centroidtab[i] / (float)sumtab[i] * is the centroid of the 1 bits in the 8-bit index i, where the * MSB is considered to have position 0 and the LSB is considered * to have position 7. */ l_int32 * makePixelCentroidTab8(void) { l_int32 i; l_int32 *tab; PROCNAME("makePixelCentroidTab8"); if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("tab not made", procName, NULL); tab[0] = 0; tab[1] = 7; for (i = 2; i < 4; i++) { tab[i] = tab[i - 2] + 6; } for (i = 4; i < 8; i++) { tab[i] = tab[i - 4] + 5; } for (i = 8; i < 16; i++) { tab[i] = tab[i - 8] + 4; } for (i = 16; i < 32; i++) { tab[i] = tab[i - 16] + 3; } for (i = 32; i < 64; i++) { tab[i] = tab[i - 32] + 2; } for (i = 64; i < 128; i++) { tab[i] = tab[i - 64] + 1; } for (i = 128; i < 256; i++) { tab[i] = tab[i - 128]; } return tab; } /*-------------------------------------------------------------* * Average of pixel values in gray images * *-------------------------------------------------------------*/ /*! * pixAverageByRow() * * Input: pix (8 or 16 bpp; no colormap) * box ( clipping box for sum; can be null) * type (L_WHITE_IS_MAX, L_BLACK_IS_MAX) * Return: na of pixel averages by row, or null on error * * Notes: * (1) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. * (2) If type == L_BLACK_IS_MAX, black pixels get the maximum * value (0xff for 8 bpp, 0xffff for 16 bpp) and white get 0. */ NUMA * pixAverageByRow(PIX *pix, BOX *box, l_int32 type) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; l_float64 norm, sum; NUMA *na; PROCNAME("pixAverageByRow"); if (!pix) return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); if (type != L_WHITE_IS_MAX && type != L_BLACK_IS_MAX) return (NUMA *)ERROR_PTR("invalid type", procName, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); norm = 1. / (l_float32)bw; if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, ystart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { sum = 0.0; line = data + i * wpl; if (d == 8) { for (j = xstart; j < xend; j++) sum += GET_DATA_BYTE(line, j); if (type == L_BLACK_IS_MAX) sum = bw * 255 - sum; } else { /* d == 16 */ for (j = xstart; j < xend; j++) sum += GET_DATA_TWO_BYTES(line, j); if (type == L_BLACK_IS_MAX) sum = bw * 0xffff - sum; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * pixAverageByColumn() * * Input: pix (8 or 16 bpp; no colormap) * box ( clipping box for sum; can be null) * type (L_WHITE_IS_MAX, L_BLACK_IS_MAX) * Return: na of pixel averages by column, or null on error * * Notes: * (1) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. * (2) If type == L_BLACK_IS_MAX, black pixels get the maximum * value (0xff for 8 bpp, 0xffff for 16 bpp) and white get 0. */ NUMA * pixAverageByColumn(PIX *pix, BOX *box, l_int32 type) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh; l_uint32 *line, *data; l_float32 norm, sum; NUMA *na; PROCNAME("pixAverageByColumn"); if (!pix) return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); if (type != L_WHITE_IS_MAX && type != L_BLACK_IS_MAX) return (NUMA *)ERROR_PTR("invalid type", procName, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, xstart, 1); norm = 1. / (l_float32)bh; data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { sum = 0.0; if (d == 8) { for (i = ystart; i < yend; i++) { line = data + i * wpl; sum += GET_DATA_BYTE(line, j); } if (type == L_BLACK_IS_MAX) sum = bh * 255 - sum; } else { /* d == 16 */ for (i = ystart; i < yend; i++) { line = data + i * wpl; sum += GET_DATA_TWO_BYTES(line, j); } if (type == L_BLACK_IS_MAX) sum = bh * 0xffff - sum; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * pixAverageInRect() * * Input: pix (1, 2, 4, 8 bpp; not cmapped) * box ( if null, use entire image) * &ave ( average of pixel values in region) * Return: 0 if OK; 1 on error */ l_int32 pixAverageInRect(PIX *pix, BOX *box, l_float32 *pave) { l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh; l_uint32 *data, *line; l_float64 ave; PROCNAME("pixAverageInRect"); if (!pave) return ERROR_INT("pave not defined", procName, 1); *pave = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("pix not 1, 2, 4 or 8 bpp", procName, 1); if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", procName, 1); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); ave = 0; for (i = ystart; i < yend; i++) { line = data + i * wpl; for (j = xstart; j < xend; j++) { if (d == 1) ave += GET_DATA_BIT(line, j); else if (d == 2) ave += GET_DATA_DIBIT(line, j); else if (d == 4) ave += GET_DATA_QBIT(line, j); else /* d == 8 */ ave += GET_DATA_BYTE(line, j); } } *pave = ave / (bw * bh); return 0; } /*------------------------------------------------------------------* * Variance of pixel values in gray images * *------------------------------------------------------------------*/ /*! * pixVarianceByRow() * * Input: pix (8 or 16 bpp; no colormap) * box ( clipping box for variance; can be null) * Return: na of rmsdev by row, or null on error * * Notes: * (1) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. * (2) We are actually computing the RMS deviation in each row. * This is the square root of the variance. */ NUMA * pixVarianceByRow(PIX *pix, BOX *box) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val; l_uint32 *line, *data; l_float64 sum1, sum2, norm, ave, var, rootvar; NUMA *na; PROCNAME("pixVarianceByRow"); if (!pix) return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, ystart, 1); norm = 1. / (l_float32)bw; data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { sum1 = sum2 = 0.0; line = data + i * wpl; for (j = xstart; j < xend; j++) { if (d == 8) val = GET_DATA_BYTE(line, j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(line, j); sum1 += val; sum2 += val * val; } ave = norm * sum1; var = norm * sum2 - ave * ave; rootvar = sqrt(var); numaAddNumber(na, (l_float32)rootvar); } return na; } /*! * pixVarianceByColumn() * * Input: pix (8 or 16 bpp; no colormap) * box ( clipping box for variance; can be null) * Return: na of rmsdev by column, or null on error * * Notes: * (1) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. * (2) We are actually computing the RMS deviation in each row. * This is the square root of the variance. */ NUMA * pixVarianceByColumn(PIX *pix, BOX *box) { l_int32 i, j, w, h, d, wpl, xstart, xend, ystart, yend, bw, bh, val; l_uint32 *line, *data; l_float64 sum1, sum2, norm, ave, var, rootvar; NUMA *na; PROCNAME("pixVarianceByColumn"); if (!pix) return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 16) return (NUMA *)ERROR_PTR("pix not 8 or 16 bpp", procName, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, xstart, 1); norm = 1. / (l_float32)bh; data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { sum1 = sum2 = 0.0; for (i = ystart; i < yend; i++) { line = data + wpl * i; if (d == 8) val = GET_DATA_BYTE(line, j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(line, j); sum1 += val; sum2 += val * val; } ave = norm * sum1; var = norm * sum2 - ave * ave; rootvar = sqrt(var); numaAddNumber(na, (l_float32)rootvar); } return na; } /*! * pixVarianceInRect() * * Input: pix (1, 2, 4, 8 bpp; not cmapped) * box ( if null, use entire image) * &rootvar ( sqrt variance of pixel values in region) * Return: 0 if OK; 1 on error */ l_int32 pixVarianceInRect(PIX *pix, BOX *box, l_float32 *prootvar) { l_int32 w, h, d, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val; l_uint32 *data, *line; l_float64 sum1, sum2, norm, ave, var; PROCNAME("pixVarianceInRect"); if (!prootvar) return ERROR_INT("prootvar not defined", procName, 1); *prootvar = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("pix not 1, 2, 4 or 8 bpp", procName, 1); if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", procName, 1); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); sum1 = sum2 = 0.0; for (i = ystart; i < yend; i++) { line = data + i * wpl; for (j = xstart; j < xend; j++) { if (d == 1) { val = GET_DATA_BIT(line, j); sum1 += val; sum2 += val * val; } else if (d == 2) { val = GET_DATA_DIBIT(line, j); sum1 += val; sum2 += val * val; } else if (d == 4) { val = GET_DATA_QBIT(line, j); sum1 += val; sum2 += val * val; } else { /* d == 8 */ val = GET_DATA_BYTE(line, j); sum1 += val; sum2 += val * val; } } } norm = 1.0 / (bw * bh); ave = norm * sum1; var = norm * sum2 - ave * ave; *prootvar = (l_float32)sqrt(var); return 0; } /*---------------------------------------------------------------------* * Average of absolute value of pixel differences in gray images * *---------------------------------------------------------------------*/ /*! * pixAbsDiffByRow() * * Input: pix (8 bpp; no colormap) * box ( clipping box for region; can be null) * Return: na of abs val pixel difference averages by row, or null on error * * Notes: * (1) This is an average over differences of adjacent pixels along * each row. * (2) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. */ NUMA * pixAbsDiffByRow(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1; l_uint32 *line, *data; l_float64 norm, sum; NUMA *na; PROCNAME("pixAbsDiffByRow"); if (!pix || pixGetDepth(pix) != 8) return (NUMA *)ERROR_PTR("pix undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); if (bw < 2) return (NUMA *)ERROR_PTR("row width must be >= 2", procName, NULL); norm = 1. / (l_float32)(bw - 1); if ((na = numaCreate(bh)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, ystart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = ystart; i < yend; i++) { sum = 0.0; line = data + i * wpl; val0 = GET_DATA_BYTE(line, xstart); for (j = xstart + 1; j < xend; j++) { val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * pixAbsDiffByColumn() * * Input: pix (8 bpp; no colormap) * box ( clipping box for region; can be null) * Return: na of abs val pixel difference averages by column, * or null on error * * Notes: * (1) This is an average over differences of adjacent pixels along * each column. * (2) To resample for a bin size different from 1, use * numaUniformSampling() on the result of this function. */ NUMA * pixAbsDiffByColumn(PIX *pix, BOX *box) { l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh, val0, val1; l_uint32 *line, *data; l_float64 norm, sum; NUMA *na; PROCNAME("pixAbsDiffByColumn"); if (!pix || pixGetDepth(pix) != 8) return (NUMA *)ERROR_PTR("pix undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pix) != NULL) return (NUMA *)ERROR_PTR("pix colormapped", procName, NULL); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return (NUMA *)ERROR_PTR("invalid clipping box", procName, NULL); if (bh < 2) return (NUMA *)ERROR_PTR("column height must be >= 2", procName, NULL); norm = 1. / (l_float32)(bh - 1); if ((na = numaCreate(bw)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetParameters(na, xstart, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (j = xstart; j < xend; j++) { sum = 0.0; line = data + ystart * wpl; val0 = GET_DATA_BYTE(line, j); for (i = ystart + 1; i < yend; i++) { line = data + i * wpl; val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } numaAddNumber(na, (l_float32)(norm * sum)); } return na; } /*! * pixAbsDiffInRect() * * Input: pix (8 bpp; not cmapped) * box ( if null, use entire image) * dir (differences along L_HORIZONTAL_LINE or L_VERTICAL_LINE) * &absdiff ( average of abs diff pixel values in region) * Return: 0 if OK; 1 on error * * Notes: * (1) This gives the average over the abs val of differences of * adjacent pixels values, along either each * row: dir == L_HORIZONTAL_LINE * column: dir == L_VERTICAL_LINE */ l_int32 pixAbsDiffInRect(PIX *pix, BOX *box, l_int32 dir, l_float32 *pabsdiff) { l_int32 w, h, wpl, i, j, xstart, xend, ystart, yend, bw, bh, val0, val1; l_uint32 *data, *line; l_float64 norm, sum; PROCNAME("pixAbsDiffInRect"); if (!pabsdiff) return ERROR_INT("pave not defined", procName, 1); *pabsdiff = 0; if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix undefined or not 8 bpp", procName, 1); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return ERROR_INT("invalid direction", procName, 1); if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", procName, 1); pixGetDimensions(pix, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); if (dir == L_HORIZONTAL_LINE) { norm = 1. / (l_float32)(bh * (bw - 1)); sum = 0.0; for (i = ystart; i < yend; i++) { line = data + i * wpl; val0 = GET_DATA_BYTE(line, xstart); for (j = xstart + 1; j < xend; j++) { val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } } } else { /* vertical line */ norm = 1. / (l_float32)(bw * (bh - 1)); sum = 0.0; for (j = xstart; j < xend; j++) { line = data + ystart * wpl; val0 = GET_DATA_BYTE(line, j); for (i = ystart + 1; i < yend; i++) { line = data + i * wpl; val1 = GET_DATA_BYTE(line, j); sum += L_ABS(val1 - val0); val0 = val1; } } } *pabsdiff = (l_float32)(norm * sum); return 0; } /*! * pixAbsDiffOnLine() * * Input: pix (8 bpp; not cmapped) * x1, y1 (first point; x1 <= x2, y1 <= y2) * x2, y2 (first point) * &absdiff ( average of abs diff pixel values on line) * Return: 0 if OK; 1 on error * * Notes: * (1) This gives the average over the abs val of differences of * adjacent pixels values, along a line that is either horizontal * or vertical. * (2) If horizontal, require x1 < x2; if vertical, require y1 < y2. */ l_int32 pixAbsDiffOnLine(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_float32 *pabsdiff) { l_int32 w, h, i, j, dir, size, sum; l_uint32 val0, val1; PROCNAME("pixAbsDiffOnLine"); if (!pabsdiff) return ERROR_INT("pave not defined", procName, 1); *pabsdiff = 0; if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix undefined or not 8 bpp", procName, 1); if (y1 == y2) { dir = L_HORIZONTAL_LINE; } else if (x1 == x2) { dir = L_VERTICAL_LINE; } else { return ERROR_INT("line is neither horiz nor vert", procName, 1); } if (pixGetColormap(pix) != NULL) return ERROR_INT("pix is colormapped", procName, 1); pixGetDimensions(pix, &w, &h, NULL); sum = 0; if (dir == L_HORIZONTAL_LINE) { x1 = L_MAX(x1, 0); x2 = L_MIN(x2, w - 1); if (x1 >= x2) return ERROR_INT("x1 >= x2", procName, 1); size = x2 - x1; pixGetPixel(pix, x1, y1, &val0); for (j = x1 + 1; j <= x2; j++) { pixGetPixel(pix, j, y1, &val1); sum += L_ABS((l_int32)val1 - (l_int32)val0); val0 = val1; } } else { /* vertical */ y1 = L_MAX(y1, 0); y2 = L_MIN(y2, h - 1); if (y1 >= y2) return ERROR_INT("y1 >= y2", procName, 1); size = y2 - y1; pixGetPixel(pix, x1, y1, &val0); for (i = y1 + 1; i <= y2; i++) { pixGetPixel(pix, x1, i, &val1); sum += L_ABS((l_int32)val1 - (l_int32)val0); val0 = val1; } } *pabsdiff = (l_float32)sum / (l_float32)size; return 0; } /*-------------------------------------------------------------* * Count of pixels with specific value * *-------------------------------------------------------------*/ /*! * pixCountArbInRect() * * Input: pixs (8 bpp, or colormapped) * box () over which count is made; * use entire image null) * val (pixel value to count) * factor (subsampling factor; integer >= 1) * &count ( count; estimate it if factor > 1) * Return: na (histogram), or null on error * * Notes: * (1) If pixs is cmapped, @val is compared to the colormap index; * otherwise, @val is compared to the grayscale value. * (2) Set the subsampling @factor > 1 to reduce the amount of computation. * If @factor > 1, multiply the count by @factor * @factor. */ l_int32 pixCountArbInRect(PIX *pixs, BOX *box, l_int32 val, l_int32 factor, l_int32 *pcount) { l_int32 i, j, bx, by, bw, bh, w, h, wpl, pixval; l_uint32 *data, *line; PROCNAME("pixCountArbInRect"); if (!pcount) return ERROR_INT("&count not defined", procName, 1); *pcount = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return ERROR_INT("pixs neither 8 bpp nor colormapped", procName, 1); if (factor < 1) return ERROR_INT("sampling factor < 1", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (!box) { for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { pixval = GET_DATA_BYTE(line, j); if (pixval == val) (*pcount)++; } } } else { boxGetGeometry(box, &bx, &by, &bw, &bh); for (i = 0; i < bh; i += factor) { if (by + i < 0 || by + i >= h) continue; line = data + (by + i) * wpl; for (j = 0; j < bw; j += factor) { if (bx + j < 0 || bx + j >= w) continue; pixval = GET_DATA_BYTE(line, bx + j); if (pixval == val) (*pcount)++; } } } if (factor > 1) /* assume pixel color is randomly distributed */ *pcount = *pcount * factor * factor; return 0; } /*-------------------------------------------------------------* * Mirrored tiling of a smaller image * *-------------------------------------------------------------*/ /*! * pixMirroredTiling() * * Input: pixs (8 or 32 bpp, small tile; to be replicated) * w, h (dimensions of output pix) * Return: pixd (usually larger pix, mirror-tiled with pixs), * or null on error * * Notes: * (1) This uses mirrored tiling, where each row alternates * with LR flips and every column alternates with TB * flips, such that the result is a tiling with identical * 2 x 2 tiles, each of which is composed of these transforms: * ----------------- * | 1 | LR | * ----------------- * | TB | LR/TB | * ----------------- */ PIX * pixMirroredTiling(PIX *pixs, l_int32 w, l_int32 h) { l_int32 wt, ht, d, i, j, nx, ny; PIX *pixd, *pixsfx, *pixsfy, *pixsfxy, *pix; PROCNAME("pixMirroredTiling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &wt, &ht, &d); if (wt <= 0 || ht <= 0) return (PIX *)ERROR_PTR("pixs size illegal", procName, NULL); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", procName, NULL); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopySpp(pixd, pixs); nx = (w + wt - 1) / wt; ny = (h + ht - 1) / ht; pixsfx = pixFlipLR(NULL, pixs); pixsfy = pixFlipTB(NULL, pixs); pixsfxy = pixFlipTB(NULL, pixsfx); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pix = pixs; if ((i & 1) && !(j & 1)) pix = pixsfy; else if (!(i & 1) && (j & 1)) pix = pixsfx; else if ((i & 1) && (j & 1)) pix = pixsfxy; pixRasterop(pixd, j * wt, i * ht, wt, ht, PIX_SRC, pix, 0, 0); } } pixDestroy(&pixsfx); pixDestroy(&pixsfy); pixDestroy(&pixsfxy); return pixd; } /*! * findTilePatchCenter() * * Input: pixs (8 or 16 bpp; distance function of a binary mask) * box (region of pixs to search around) * searchdir (L_HORIZ or L_VERT; direction to search) * targdist (desired distance of selected patch center from fg) * &dist ( actual distance of selected location) * &xc, &yc ( location of selected patch center) * Return: 0 if OK, 1 on error * * Notes: * (1) This looks for a patch of non-masked image, that is outside * but near the input box. The input pixs is a distance * function giving the distance from the fg in a binary mask. * (2) The target distance implicitly specifies a desired size * for the patch. The location of the center of the patch, * and the actual distance from fg are returned. * (3) If the target distance is larger than 255, a 16-bit distance * transform is input. * (4) It is assured that a square centered at (xc, yc) and of * size 'dist' will not intersect with the fg of the binary * mask that was used to generate pixs. * (5) We search away from the component, in approximately * the center 1/3 of its dimension. This gives a better chance * of finding patches that are close to the component. */ static l_int32 findTilePatchCenter(PIX *pixs, BOX *box, l_int32 searchdir, l_uint32 targdist, l_uint32 *pdist, l_int32 *pxc, l_int32 *pyc) { l_int32 w, h, bx, by, bw, bh, left, right, top, bot, i, j; l_int32 xstart, xend, ystart, yend; l_uint32 val, maxval; PROCNAME("findTilePatchCenter"); if (!pdist || !pxc || !pyc) return ERROR_INT("&pdist, &pxc, &pyc not all defined", procName, 1); *pdist = *pxc = *pyc = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); boxGetGeometry(box, &bx, &by, &bw, &bh); if (searchdir == L_HORIZ) { left = bx; /* distance to left of box */ right = w - bx - bw + 1; /* distance to right of box */ ystart = by + bh / 3; yend = by + 2 * bh / 3; maxval = 0; if (left > right) { /* search to left */ for (j = bx - 1; j >= 0; j--) { for (i = ystart; i <= yend; i++) { pixGetPixel(pixs, j, i, &val); if (val > maxval) { maxval = val; *pxc = j; *pyc = i; *pdist = val; if (val >= targdist) return 0; } } } } else { /* search to right */ for (j = bx + bw; j < w; j++) { for (i = ystart; i <= yend; i++) { pixGetPixel(pixs, j, i, &val); if (val > maxval) { maxval = val; *pxc = j; *pyc = i; *pdist = val; if (val >= targdist) return 0; } } } } } else { /* searchdir == L_VERT */ top = by; /* distance above box */ bot = h - by - bh + 1; /* distance below box */ xstart = bx + bw / 3; xend = bx + 2 * bw / 3; maxval = 0; if (top > bot) { /* search above */ for (i = by - 1; i >= 0; i--) { for (j = xstart; j <=xend; j++) { pixGetPixel(pixs, j, i, &val); if (val > maxval) { maxval = val; *pxc = j; *pyc = i; *pdist = val; if (val >= targdist) return 0; } } } } else { /* search below */ for (i = by + bh; i < h; i++) { for (j = xstart; j <=xend; j++) { pixGetPixel(pixs, j, i, &val); if (val > maxval) { maxval = val; *pxc = j; *pyc = i; *pdist = val; if (val >= targdist) return 0; } } } } } pixGetPixel(pixs, *pxc, *pyc, pdist); return 0; } leptonica-1.70/src/pixalloc.c0000644000175000017500000004341712244226424014266 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixalloc.c * * Custom memory storage with allocator and deallocator * * l_int32 pmsCreate() * void pmsDestroy() * void *pmsCustomAlloc() * void pmsCustomDealloc() * void *pmsGetAlloc() * l_int32 pmsGetLevelForAlloc() * l_int32 pmsGetLevelForDealloc() * void pmsLogInfo() */ #include "allheaders.h" /*-------------------------------------------------------------------------* * Pix Memory Storage * * * * This is a simple utility for handling pix memory storage. It is * * enabled by setting the PixMemoryManager allocators to the functions * * that are defined here * * pmsCustomAlloc() * * pmsCustomDealloc() * * Use pmsCreate() at the beginning to do the pre-allocation, and * * pmsDestroy() at the end to clean it up. * *-------------------------------------------------------------------------*/ /* * In the following, the "memory" refers to the image data * field that is used within the pix. The memory store is a * continuous block of memory, that is logically divided into * smaller "chunks" starting with a set at a minimum size, and * followed by sets of increasing size that are a power of 2 larger * than the minimum size. You must specify the number of chunks * of each size. * * A requested data chunk, if it exists, is borrowed from the memory * storage, and returned after use. If the chunk is too small, or * too large, or if all chunks in the appropriate size range are * in use, the memory is allocated dynamically and freed after use. * * There are four parameters that determine the use of pre-allocated memory: * * minsize: any requested chunk smaller than this is allocated * dynamically and destroyed after use. No preallocated * memory is used. * smallest: the size of the smallest pre-allocated memory chunk. * nlevels: the number of different sizes of data chunks, each a * power of 2 larger than 'smallest'. * numalloc: a Numa of size 'nlevels' containing the number of data * chunks for each size that are in the memory store. * * As an example, suppose: * minsize = 0.5MB * smallest = 1.0MB * nlevels = 4 * numalloc = {10, 5, 5, 5} * Then the total amount of allocated memory (in MB) is * 10 * 1 + 5 * 2 + 5 * 4 + 5 * 8 = 80 MB * Any pix requiring less than 0.5 MB or more than 8 MB of memory will * not come from the memory store. Instead, it will be dynamically * allocated and freed after use. * * How is this implemented? * * At setup, the full data block size is computed and allocated. * The addresses of the individual chunks are found, and the pointers * are stored in a set of Ptra (generic pointer arrays), using one Ptra * for each of the sizes of the chunks. When returning a chunk after * use, it is necessary to determine from the address which size level * (ptra) the chunk belongs to. This is done by comparing the address * of the associated chunk. * * In the event that memory chunks need to be dynamically allocated, * either (1) because they are too small or too large for the memory * store or (2) because all the pix of that size (i.e., in the * appropriate level) in the memory store are in use, the * addresses generated will be outside the pre-allocated block. * After use they won't be returned to a ptra; instead the deallocator * will free them. */ struct PixMemoryStore { struct L_Ptraa *paa; /* Holds ptrs to allocated memory */ size_t minsize; /* Pix smaller than this (in bytes) */ /* are allocated dynamically */ size_t smallest; /* Smallest mem (in bytes) alloc'd */ size_t largest; /* Larest mem (in bytes) alloc'd */ size_t nbytes; /* Size of allocated block w/ all chunks */ l_int32 nlevels; /* Num of power-of-2 sizes pre-alloc'd */ size_t *sizes; /* Mem sizes at each power-of-2 level */ l_int32 *allocarray; /* Number of mem alloc'd at each size */ l_uint32 *baseptr; /* ptr to allocated array */ l_uint32 *maxptr; /* ptr just beyond allocated memory */ l_uint32 **firstptr; /* array of ptrs to first chunk in size */ l_int32 *memused; /* log: total # of pix used (by level) */ l_int32 *meminuse; /* log: # of pix in use (by level) */ l_int32 *memmax; /* log: max # of pix in use (by level) */ l_int32 *memempty; /* log: # of pix alloc'd because */ /* the store was empty (by level) */ char *logfile; /* log: set to null if no logging */ }; typedef struct PixMemoryStore L_PIX_MEM_STORE; static L_PIX_MEM_STORE *CustomPMS = NULL; /*! * pmsCreate() * * Input: minsize (of data chunk that can be supplied by pms) * smallest (bytes of the smallest pre-allocated data chunk. * numalloc (array with the number of data chunks for each * size that are in the memory store) * logfile (use for debugging; null otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This computes the size of the block of memory required * and allocates it. Each chunk starts on a 32-bit word boundary. * The chunk sizes are in powers of 2, starting at @smallest, * and the number of levels and chunks at each level is * specified by @numalloc. * (2) This is intended to manage the image data for a small number * of relatively large pix. The system malloc is expected to * handle very large numbers of small chunks efficiently. * (3) Important: set the allocators and call this function * before any pix have been allocated. Destroy all the pix * in the normal way before calling pmsDestroy(). * (4) The pms struct is stored in a static global, so this function * is not thread-safe. When used, there must be only one thread * per process. */ l_int32 pmsCreate(size_t minsize, size_t smallest, NUMA *numalloc, const char *logfile) { l_int32 nlevels, i, j, nbytes; l_int32 *alloca; l_float32 nchunks; l_uint32 *baseptr, *data; l_uint32 **firstptr; size_t *sizes; L_PIX_MEM_STORE *pms; L_PTRA *pa; L_PTRAA *paa; PROCNAME("createPMS"); if (!numalloc) return ERROR_INT("numalloc not defined", procName, 1); numaGetSum(numalloc, &nchunks); if (nchunks > 1000.0) L_WARNING("There are %.0f chunks\n", procName, nchunks); if ((pms = (L_PIX_MEM_STORE *)CALLOC(1, sizeof(L_PIX_MEM_STORE))) == NULL) return ERROR_INT("pms not made", procName, 1); CustomPMS = pms; /* Make sure that minsize and smallest are multiples of 32 bit words */ if (minsize % 4 != 0) minsize -= minsize % 4; pms->minsize = minsize; nlevels = numaGetCount(numalloc); pms->nlevels = nlevels; if ((sizes = (size_t *)CALLOC(nlevels, sizeof(size_t))) == NULL) return ERROR_INT("sizes not made", procName, 1); pms->sizes = sizes; if (smallest % 4 != 0) smallest += 4 - (smallest % 4); pms->smallest = smallest; for (i = 0; i < nlevels; i++) sizes[i] = smallest * (1 << i); pms->largest = sizes[nlevels - 1]; alloca = numaGetIArray(numalloc); pms->allocarray = alloca; if ((paa = ptraaCreate(nlevels)) == NULL) return ERROR_INT("paa not made", procName, 1); pms->paa = paa; for (i = 0, nbytes = 0; i < nlevels; i++) nbytes += alloca[i] * sizes[i]; pms->nbytes = nbytes; if ((baseptr = (l_uint32 *)CALLOC(nbytes / 4, sizeof(l_uint32))) == NULL) return ERROR_INT("calloc fail for baseptr", procName, 1); pms->baseptr = baseptr; pms->maxptr = baseptr + nbytes / 4; /* just beyond the memory store */ if ((firstptr = (l_uint32 **)CALLOC(nlevels, sizeof(l_uint32 *))) == NULL) return ERROR_INT("calloc fail for firstptr", procName, 1); pms->firstptr = firstptr; data = baseptr; for (i = 0; i < nlevels; i++) { if ((pa = ptraCreate(alloca[i])) == NULL) return ERROR_INT("pa not made", procName, 1); ptraaInsertPtra(paa, i, pa); firstptr[i] = data; for (j = 0; j < alloca[i]; j++) { ptraAdd(pa, data); data += sizes[i] / 4; } } if (logfile) { pms->memused = (l_int32 *)CALLOC(nlevels, sizeof(l_int32)); pms->meminuse = (l_int32 *)CALLOC(nlevels, sizeof(l_int32)); pms->memmax = (l_int32 *)CALLOC(nlevels, sizeof(l_int32)); pms->memempty = (l_int32 *)CALLOC(nlevels, sizeof(l_int32)); pms->logfile = stringNew(logfile); } return 0; } /*! * pmsDestroy() * * Input: (none) * Return: void * * Notes: * (1) Important: call this function at the end of the program, after * the last pix has been destroyed. */ void pmsDestroy() { L_PIX_MEM_STORE *pms; if ((pms = CustomPMS) == NULL) return; ptraaDestroy(&pms->paa, FALSE, FALSE); /* don't touch the ptrs */ FREE(pms->baseptr); /* free the memory */ if (pms->logfile) { pmsLogInfo(); FREE(pms->logfile); FREE(pms->memused); FREE(pms->meminuse); FREE(pms->memmax); FREE(pms->memempty); } FREE(pms->sizes); FREE(pms->allocarray); FREE(pms->firstptr); FREE(pms); CustomPMS = NULL; return; } /*! * pmsCustomAlloc() * * Input: nbytes (min number of bytes in the chunk to be retrieved) * Return: data (ptr to chunk) * * Notes: * (1) This attempts to find a suitable pre-allocated chunk. * If not found, it dynamically allocates the chunk. * (2) If logging is turned on, the allocations that are not taken * from the memory store, and are at least as large as the * minimum size the store can handle, are logged to file. */ void * pmsCustomAlloc(size_t nbytes) { l_int32 level; void *data; L_PIX_MEM_STORE *pms; L_PTRA *pa; PROCNAME("pmsCustomAlloc"); if ((pms = CustomPMS) == NULL) return (void *)ERROR_PTR("pms not defined", procName, NULL); pmsGetLevelForAlloc(nbytes, &level); if (level < 0) { /* size range invalid; must alloc */ if ((data = pmsGetAlloc(nbytes)) == NULL) return (void *)ERROR_PTR("data not made", procName, NULL); } else { /* get from store */ pa = ptraaGetPtra(pms->paa, level, L_HANDLE_ONLY); data = ptraRemoveLast(pa); if (data && pms->logfile) { pms->memused[level]++; pms->meminuse[level]++; if (pms->meminuse[level] > pms->memmax[level]) pms->memmax[level]++; } if (!data) { /* none left at this level */ data = pmsGetAlloc(nbytes); if (pms->logfile) pms->memempty[level]++; } } return data; } /*! * pmsCustomDealloc() * * Input: data (to be freed or returned to the storage) * Return: void */ void pmsCustomDealloc(void *data) { l_int32 level; L_PIX_MEM_STORE *pms; L_PTRA *pa; PROCNAME("pmsCustomDealloc"); if ((pms = CustomPMS) == NULL) { L_ERROR("pms not defined\n", procName); return; } if (pmsGetLevelForDealloc(data, &level) == 1) { L_ERROR("level not found\n", procName); return; } if (level < 0) { /* no logging; just free the data */ FREE(data); } else { /* return the data to the store */ pa = ptraaGetPtra(pms->paa, level, L_HANDLE_ONLY); ptraAdd(pa, data); if (pms->logfile) pms->meminuse[level]--; } return; } /*! * pmsGetAlloc() * * Input: nbytes * Return: data * * Notes: * (1) This is called when a request for pix data cannot be * obtained from the preallocated memory store. After use it * is freed like normal memory. * (2) If logging is on, only write out allocs that are as large as * the minimum size handled by the memory store. * (3) size_t is %lu on 64 bit platforms and %u on 32 bit platforms. * The C99 platform-independent format specifier for size_t is %zu, * but windows hasn't conformed, so we are forced to go back to * C89, use %lu, and cast to get platform-independence. Ugh. */ void * pmsGetAlloc(size_t nbytes) { void *data; FILE *fp; L_PIX_MEM_STORE *pms; PROCNAME("pmsGetAlloc"); if ((pms = CustomPMS) == NULL) return (void *)ERROR_PTR("pms not defined", procName, NULL); if ((data = (void *)CALLOC(nbytes, sizeof(char))) == NULL) return (void *)ERROR_PTR("data not made", procName, NULL); if (pms->logfile && nbytes >= pms->smallest) { fp = fopenWriteStream(pms->logfile, "a"); fprintf(fp, "Alloc %lu bytes at %p\n", (unsigned long)nbytes, data); fclose(fp); } return data; } /*! * pmsGetLevelForAlloc() * * Input: nbytes (min number of bytes in the chunk to be retrieved) * &level (; -1 if either too small or too large) * Return: 0 if OK, 1 on error */ l_int32 pmsGetLevelForAlloc(size_t nbytes, l_int32 *plevel) { l_int32 i; l_float64 ratio; L_PIX_MEM_STORE *pms; PROCNAME("pmsGetLevelForAlloc"); if (!plevel) return ERROR_INT("&level not defined", procName, 1); *plevel = -1; if ((pms = CustomPMS) == NULL) return ERROR_INT("pms not defined", procName, 1); if (nbytes < pms->minsize || nbytes > pms->largest) return 0; /* -1 */ ratio = (l_float64)nbytes / (l_float64)(pms->smallest); for (i = 0; i < pms->nlevels; i++) { if (ratio <= 1.0) break; ratio /= 2.0; } *plevel = i; return 0; } /*! * pmsGetLevelForDealloc() * * Input: data (ptr to memory chunk) * &level ( level in memory store; -1 if allocated * outside the store) * Return: 0 if OK, 1 on error */ l_int32 pmsGetLevelForDealloc(void *data, l_int32 *plevel) { l_int32 i; l_uint32 *first; L_PIX_MEM_STORE *pms; PROCNAME("pmsGetLevelForDealloc"); if (!plevel) return ERROR_INT("&level not defined", procName, 1); *plevel = -1; if (!data) return ERROR_INT("data not defined", procName, 1); if ((pms = CustomPMS) == NULL) return ERROR_INT("pms not defined", procName, 1); if (data < (void *)pms->baseptr || data >= (void *)pms->maxptr) return 0; /* -1 */ for (i = 1; i < pms->nlevels; i++) { first = pms->firstptr[i]; if (data < (void *)first) break; } *plevel = i - 1; return 0; } /*! * pmsLogInfo() * * Input: (none) * Return: void */ void pmsLogInfo() { l_int32 i; L_PIX_MEM_STORE *pms; if ((pms = CustomPMS) == NULL) return; fprintf(stderr, "Total number of pix used at each level\n"); for (i = 0; i < pms->nlevels; i++) fprintf(stderr, " Level %d (%lu bytes): %d\n", i, (unsigned long)pms->sizes[i], pms->memused[i]); fprintf(stderr, "Max number of pix in use at any time in each level\n"); for (i = 0; i < pms->nlevels; i++) fprintf(stderr, " Level %d (%lu bytes): %d\n", i, (unsigned long)pms->sizes[i], pms->memmax[i]); fprintf(stderr, "Number of pix alloc'd because none were available\n"); for (i = 0; i < pms->nlevels; i++) fprintf(stderr, " Level %d (%lu bytes): %d\n", i, (unsigned long)pms->sizes[i], pms->memempty[i]); return; } leptonica-1.70/src/parseprotos.c0000640000175000017500000010146312267060336015027 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * parseprotos.c * * char *parseForProtos() * * Static helpers * static l_int32 getNextNonCommentLine() * static l_int32 getNextNonBlankLine() * static l_int32 getNextNonDoubleSlashLine() * static l_int32 searchForProtoSignature() * static char *captureProtoSignature() * static char *cleanProtoSignature() * static l_int32 skipToEndOfFunction() * static l_int32 skipToMatchingBrace() * static l_int32 skipToSemicolon() * static l_int32 getOffsetForCharacter() * static l_int32 getOffsetForMatchingRP() */ #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 512; /* max token size */ static l_int32 getNextNonCommentLine(SARRAY *sa, l_int32 start, l_int32 *pnext); static l_int32 getNextNonBlankLine(SARRAY *sa, l_int32 start, l_int32 *pnext); static l_int32 getNextNonDoubleSlashLine(SARRAY *sa, l_int32 start, l_int32 *pnext); static l_int32 searchForProtoSignature(SARRAY *sa, l_int32 begin, l_int32 *pstart, l_int32 *pstop, l_int32 *pcharindex, l_int32 *pfound); static char * captureProtoSignature(SARRAY *sa, l_int32 start, l_int32 stop, l_int32 charindex); static char * cleanProtoSignature(char *str); static l_int32 skipToEndOfFunction(SARRAY *sa, l_int32 start, l_int32 charindex, l_int32 *pnext); static l_int32 skipToMatchingBrace(SARRAY *sa, l_int32 start, l_int32 lbindex, l_int32 *prbline, l_int32 *prbindex); static l_int32 skipToSemicolon(SARRAY *sa, l_int32 start, l_int32 charindex, l_int32 *pnext); static l_int32 getOffsetForCharacter(SARRAY *sa, l_int32 start, char tchar, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset); static l_int32 getOffsetForMatchingRP(SARRAY *sa, l_int32 start, l_int32 soffsetlp, l_int32 boffsetlp, l_int32 toffsetlp, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset); /* * parseForProtos() * * Input: filein (output of cpp) * prestring ( string that prefaces each decl; * use NULL to omit) * Return: parsestr (string of function prototypes), or NULL on error * * Notes: * (1) We parse the output of cpp: * cpp -ansi * Three plans were attempted, with success on the third. * (2) Plan 1. A cursory examination of the cpp output indicated that * every function was preceeded by a cpp comment statement. * So we just need to look at statements beginning after comments. * Unfortunately, this is NOT the case. Some functions start * without cpp comment lines, typically when there are no * comments in the source that immediately precede the function. * (3) Plan 2. Consider the keywords in the language that start * parts of the cpp file. Some, like 'typedef', 'enum', * 'union' and 'struct', are followed after a while by '{', * and eventually end with '}, plus an optional token and a * final ';' Others, like 'extern' and 'static', are never * the beginnings of global function definitions. Function * prototypes have one or more sets of '(' followed eventually * by a ')', and end with ';'. But function definitions have * tokens, followed by '(', more tokens, ')' and then * immediately a '{'. We would generate a prototype from this * by adding a ';' to all tokens up to the ')'. So we use * these special tokens to decide what we are parsing. And * whenever a function definition is found and the prototype * extracted, we skip through the rest of the function * past the corresponding '}'. This token ends a line, and * is often on a line of its own. But as it turns out, * the only keyword we need to consider is 'static'. * (4) Plan 3. Consider the parentheses and braces for various * declarations. A struct, enum, or union has a pair of * braces followed by a semicolon. They cannot have parentheses * before the left brace, but a struct can have lots of parentheses * within the brace set. A function prototype has no braces. * A function declaration can have sets of left and right * parentheses, but these are followed by a left brace. * So plan 3 looks at the way parentheses and braces are * organized. Once the beginning of a function definition * is found, the prototype is extracted and we search for * the ending right brace. * (5) To find the ending right brace, it is necessary to do some * careful parsing. For example, in this file, we have * left and right braces as characters, and these must not * be counted. Somewhat more tricky, the file fhmtauto.c * generates code, and includes a right brace in a string. * So we must not include braces that are in strings. But how * do we know if something is inside a string? Keep state, * starting with not-inside, and every time you hit a double quote * that is not escaped, toggle the condition. Any brace * found in the state of being within a string is ignored. * (6) When a prototype is extracted, it is put in a canonical * form (i.e., cleaned up). Finally, we check that it is * not static and save it. (If static, it is ignored). * (7) The @prestring for unix is NULL; it is included here so that * you can use Microsoft's declaration for importing or * exporting to a dll. See environ.h for examples of use. * Here, we set: @prestring = "LEPT_DLL ". Note in particular * the space character that will separate 'LEPT_DLL' from * the standard unix prototype that follows. */ char * parseForProtos(const char *filein, const char *prestring) { char *strdata, *str, *newstr, *parsestr, *secondword; l_int32 start, next, stop, charindex, found; size_t nbytes; SARRAY *sa, *saout, *satest; PROCNAME("parseForProtos"); if (!filein) return (char *)ERROR_PTR("filein not defined", procName, NULL); /* Read in the cpp output into memory, one string for each * line in the file, omitting blank lines. */ strdata = (char *)l_binaryRead(filein, &nbytes); sa = sarrayCreateLinesFromString(strdata, 0); saout = sarrayCreate(0); next = 0; while (1) { /* repeat after each non-static prototype is extracted */ searchForProtoSignature(sa, next, &start, &stop, &charindex, &found); if (!found) break; /* fprintf(stderr, " start = %d, stop = %d, charindex = %d\n", start, stop, charindex); */ str = captureProtoSignature(sa, start, stop, charindex); /* Make sure that the signature found by cpp is neither * static nor extern. We get 'extern' declarations from * header files, and with some versions of cpp running on * #include we get something of the form: * extern ... (( ... )) ... ( ... ) { ... * For this, the 1st '(' is the lp, the 2nd ')' is the rp, * and there is a lot of garbage between the rp and the lb. * It is easiest to simply reject any signature that starts * with 'extern'. Note also that an 'extern' token has been * prepended to each prototype, so the 'static' or * 'extern' keywords we are looking for, if they exist, * would be the second word. */ satest = sarrayCreateWordsFromString(str); secondword = sarrayGetString(satest, 1, 0); if (strcmp(secondword, "static") && /* not static */ strcmp(secondword, "extern")) { /* not extern */ if (prestring) { /* prepend it to the prototype */ newstr = stringJoin(prestring, str); sarrayAddString(saout, newstr, L_INSERT); FREE(str); } else { sarrayAddString(saout, str, L_INSERT); } } else { FREE(str); } sarrayDestroy(&satest); skipToEndOfFunction(sa, stop, charindex, &next); if (next == -1) break; } /* Flatten into a string with newlines between prototypes */ parsestr = sarrayToString(saout, 1); FREE(strdata); sarrayDestroy(&sa); sarrayDestroy(&saout); return parsestr; } /* * getNextNonCommentLine() * * Input: sa (output from cpp, by line) * start (starting index to search) * &next ( index of first uncommented line after * the start line) * Return: 0 if OK, 1 on error * * Notes: * (1) Skips over all consecutive comment lines, beginning at 'start' * (2) If all lines to the end are '#' comments, return next = -1 */ static l_int32 getNextNonCommentLine(SARRAY *sa, l_int32 start, l_int32 *pnext) { char *str; l_int32 i, n; PROCNAME("getNextNonCommentLine"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pnext) return ERROR_INT("&pnext not defined", procName, 1); /* Init for situation where this line and all following are comments */ *pnext = -1; n = sarrayGetCount(sa); for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, 0)) == NULL) return ERROR_INT("str not returned; shouldn't happen", procName, 1); if (str[0] != '#') { *pnext = i; return 0; } } return 0; } /* * getNextNonBlankLine() * * Input: sa (output from cpp, by line) * start (starting index to search) * &next ( index of first nonblank line after * the start line) * Return: 0 if OK, 1 on error * * Notes: * (1) Skips over all consecutive blank lines, beginning at 'start' * (2) A blank line has only whitespace characters (' ', '\t', '\n', '\r') * (3) If all lines to the end are blank, return next = -1 */ static l_int32 getNextNonBlankLine(SARRAY *sa, l_int32 start, l_int32 *pnext) { char *str; l_int32 i, j, n, len; PROCNAME("getNextNonBlankLine"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pnext) return ERROR_INT("&pnext not defined", procName, 1); /* Init for situation where this line and all following are blank */ *pnext = -1; n = sarrayGetCount(sa); for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, 0)) == NULL) return ERROR_INT("str not returned; shouldn't happen", procName, 1); len = strlen(str); for (j = 0; j < len; j++) { if (str[j] != ' ' && str[j] != '\t' && str[j] != '\n' && str[j] != '\r') { /* non-blank */ *pnext = i; return 0; } } } return 0; } /* * getNextNonDoubleSlashLine() * * Input: sa (output from cpp, by line) * start (starting index to search) * &next ( index of first uncommented line after * the start line) * Return: 0 if OK, 1 on error * * Notes: * (1) Skips over all consecutive '//' lines, beginning at 'start' * (2) If all lines to the end start with '//', return next = -1 */ static l_int32 getNextNonDoubleSlashLine(SARRAY *sa, l_int32 start, l_int32 *pnext) { char *str; l_int32 i, n, len; PROCNAME("getNextNonDoubleSlashLine"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pnext) return ERROR_INT("&pnext not defined", procName, 1); /* Init for situation where this line and all following * start with '//' */ *pnext = -1; n = sarrayGetCount(sa); for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, 0)) == NULL) return ERROR_INT("str not returned; shouldn't happen", procName, 1); len = strlen(str); if (len < 2 || str[0] != '/' || str[1] != '/') { *pnext = i; return 0; } } return 0; } /* * searchForProtoSignature() * * Input: sa (output from cpp, by line) * begin (beginning index to search) * &start ( starting index for function definition) * &stop ( index of line on which proto is completed) * &charindex ( char index of completing ')' character) * &found ( 1 if valid signature is found; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) If this returns found == 0, it means that there are no * more function definitions in the file. Caller must check * this value and exit the loop over the entire cpp file. * (2) This follows plan 3 (see above). We skip comment and blank * lines at the beginning. Then we don't check for keywords. * Instead, find the relative locations of the first occurrences * of these four tokens: left parenthesis (lp), right * parenthesis (rp), left brace (lb) and semicolon (sc). * (3) The signature of a function definition looks like this: * .... '(' .... ')' '{' * where the lp and rp must both precede the lb, with only * whitespace between the rp and the lb. The '....' * are sets of tokens that have no braces. * (4) If a function definition is found, this returns found = 1, * with 'start' being the first line of the definition and * 'charindex' being the position of the ')' in line 'stop' * at the end of the arg list. */ static l_int32 searchForProtoSignature(SARRAY *sa, l_int32 begin, l_int32 *pstart, l_int32 *pstop, l_int32 *pcharindex, l_int32 *pfound) { l_int32 next, rbline, rbindex, scline; l_int32 soffsetlp, soffsetrp, soffsetlb, soffsetsc; l_int32 boffsetlp, boffsetrp, boffsetlb, boffsetsc; l_int32 toffsetlp, toffsetrp, toffsetlb, toffsetsc; PROCNAME("searchForProtoSignature"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pstart) return ERROR_INT("&start not defined", procName, 1); if (!pstop) return ERROR_INT("&stop not defined", procName, 1); if (!pcharindex) return ERROR_INT("&charindex not defined", procName, 1); if (!pfound) return ERROR_INT("&found not defined", procName, 1); *pfound = FALSE; while (1) { /* Skip over sequential '#' comment lines */ getNextNonCommentLine(sa, begin, &next); if (next == -1) return 0; if (next != begin) { begin = next; continue; } /* Skip over sequential blank lines */ getNextNonBlankLine(sa, begin, &next); if (next == -1) return 0; if (next != begin) { begin = next; continue; } /* Skip over sequential lines starting with '//' */ getNextNonDoubleSlashLine(sa, begin, &next); if (next == -1) return 0; if (next != begin) { begin = next; continue; } /* Search for specific character sequence patterns; namely * a lp, a matching rp, a lb and a semicolon. * Abort the search if no lp is found. */ getOffsetForCharacter(sa, next, '(', &soffsetlp, &boffsetlp, &toffsetlp); if (soffsetlp == -1) break; getOffsetForMatchingRP(sa, next, soffsetlp, boffsetlp, toffsetlp, &soffsetrp, &boffsetrp, &toffsetrp); getOffsetForCharacter(sa, next, '{', &soffsetlb, &boffsetlb, &toffsetlb); getOffsetForCharacter(sa, next, ';', &soffsetsc, &boffsetsc, &toffsetsc); /* We've found a lp. Now weed out the case where a matching * rp and a lb are not both found. */ if (soffsetrp == -1 || soffsetlb == -1) break; /* Check if a left brace occurs before a left parenthesis; * if so, skip it */ if (toffsetlb < toffsetlp) { skipToMatchingBrace(sa, next + soffsetlb, boffsetlb, &rbline, &rbindex); skipToSemicolon(sa, rbline, rbindex, &scline); begin = scline + 1; continue; } /* Check if a semicolon occurs before a left brace or * a left parenthesis; if so, skip it */ if ((soffsetsc != -1) && (toffsetsc < toffsetlb || toffsetsc < toffsetlp)) { skipToSemicolon(sa, next, 0, &scline); begin = scline + 1; continue; } /* OK, it should be a function definition. We haven't * checked that there is only white space between the * rp and lb, but we've only seen problems with two * extern inlines in sys/stat.h, and this is handled * later by eliminating any prototype beginning with 'extern'. */ *pstart = next; *pstop = next + soffsetrp; *pcharindex = boffsetrp; *pfound = TRUE; break; } return 0; } /* * captureProtoSignature() * * Input: sa (output from cpp, by line) * start (starting index to search; never a comment line) * stop (index of line on which pattern is completed) * charindex (char index of completing ')' character) * Return: cleanstr (prototype string), or NULL on error * * Notes: * (1) Return all characters, ending with a ';' after the ')' */ static char * captureProtoSignature(SARRAY *sa, l_int32 start, l_int32 stop, l_int32 charindex) { char *str, *newstr, *protostr, *cleanstr; SARRAY *sap; l_int32 i; PROCNAME("captureProtoSignature"); if (!sa) return (char *)ERROR_PTR("sa not defined", procName, NULL); sap = sarrayCreate(0); for (i = start; i < stop; i++) { str = sarrayGetString(sa, i, 1); sarrayAddString(sap, str, 0); } str = sarrayGetString(sa, stop, 1); str[charindex + 1] = '\0'; newstr = stringJoin(str, ";"); sarrayAddString(sap, newstr, 0); FREE(str); protostr = sarrayToString(sap, 2); sarrayDestroy(&sap); cleanstr = cleanProtoSignature(protostr); FREE(protostr); return cleanstr; } /* * cleanProtoSignature() * * Input: instr (input prototype string) * Return: cleanstr (clean prototype string), or NULL on error * * Notes: * (1) Adds 'extern' at beginning and regularizes spaces * between tokens. */ static char * cleanProtoSignature(char *instr) { char *str, *cleanstr; char buf[L_BUF_SIZE]; char externstring[] = "extern"; l_int32 i, j, nwords, nchars, index, len; SARRAY *sa, *saout; PROCNAME("cleanProtoSignature"); if (!instr) return (char *)ERROR_PTR("instr not defined", procName, NULL); sa = sarrayCreateWordsFromString(instr); nwords = sarrayGetCount(sa); saout = sarrayCreate(0); sarrayAddString(saout, externstring, 1); for (i = 0; i < nwords; i++) { str = sarrayGetString(sa, i, 0); nchars = strlen(str); index = 0; for (j = 0; j < nchars; j++) { if (index > L_BUF_SIZE - 6) return (char *)ERROR_PTR("token too large", procName, NULL); if (str[j] == '(') { buf[index++] = ' '; buf[index++] = '('; buf[index++] = ' '; } else if (str[j] == ')') { buf[index++] = ' '; buf[index++] = ')'; } else { buf[index++] = str[j]; } } buf[index] = '\0'; sarrayAddString(saout, buf, 1); } /* Flatten to a prototype string with spaces added after * each word, and remove the last space */ cleanstr = sarrayToString(saout, 2); len = strlen(cleanstr); cleanstr[len - 1] = '\0'; sarrayDestroy(&sa); sarrayDestroy(&saout); return cleanstr; } /* * skipToEndOfFunction() * * Input: sa (output from cpp, by line) * start (index of starting line with left bracket to search) * lbindex (starting char index for left bracket) * &next (index of line following the ending '}' for function * Return: 0 if OK, 1 on error */ static l_int32 skipToEndOfFunction(SARRAY *sa, l_int32 start, l_int32 lbindex, l_int32 *pnext) { l_int32 end, rbindex; l_int32 soffsetlb, boffsetlb, toffsetlb; PROCNAME("skipToEndOfFunction"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pnext) return ERROR_INT("&next not defined", procName, 1); getOffsetForCharacter(sa, start, '{', &soffsetlb, &boffsetlb, &toffsetlb); skipToMatchingBrace(sa, start + soffsetlb, boffsetlb, &end, &rbindex); if (end == -1) { /* shouldn't happen! */ *pnext = -1; return 1; } *pnext = end + 1; return 0; } /* * skipToMatchingBrace() * * Input: sa (output from cpp, by line) * start (index of starting line with left bracket to search) * lbindex (starting char index for left bracket) * &stop (index of line with the matching right bracket) * &rbindex (char index of matching right bracket) * Return: 0 if OK, 1 on error * * Notes: * (1) If the matching right brace is not found, returns * stop = -1. This shouldn't happen. */ static l_int32 skipToMatchingBrace(SARRAY *sa, l_int32 start, l_int32 lbindex, l_int32 *pstop, l_int32 *prbindex) { char *str; l_int32 i, j, jstart, n, sumbrace, found, instring, nchars; PROCNAME("skipToMatchingBrace"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pstop) return ERROR_INT("&stop not defined", procName, 1); if (!prbindex) return ERROR_INT("&rbindex not defined", procName, 1); instring = 0; /* init to FALSE; toggle on double quotes */ *pstop = -1; n = sarrayGetCount(sa); sumbrace = 1; found = FALSE; for (i = start; i < n; i++) { str = sarrayGetString(sa, i, 0); jstart = 0; if (i == start) jstart = lbindex + 1; nchars = strlen(str); for (j = jstart; j < nchars; j++) { /* Toggle the instring state every time you encounter * a double quote that is NOT escaped. */ if (j == jstart && str[j] == '\"') instring = 1 - instring; if (j > jstart && str[j] == '\"' && str[j-1] != '\\') instring = 1 - instring; /* Record the braces if they are neither a literal character * nor within a string. */ if (str[j] == '{' && str[j+1] != '\'' && !instring) { sumbrace++; } else if (str[j] == '}' && str[j+1] != '\'' && !instring) { sumbrace--; if (sumbrace == 0) { found = TRUE; *prbindex = j; break; } } } if (found) { *pstop = i; return 0; } } return ERROR_INT("matching right brace not found", procName, 1); } /* * skipToSemicolon() * * Input: sa (output from cpp, by line) * start (index of starting line to search) * charindex (starting char index for search) * &next (index of line containing the next ';') * Return: 0 if OK, 1 on error * * Notes: * (1) If the semicolon isn't found, returns next = -1. * This shouldn't happen. * (2) This is only used in contexts where the semicolon is * not within a string. */ static l_int32 skipToSemicolon(SARRAY *sa, l_int32 start, l_int32 charindex, l_int32 *pnext) { char *str; l_int32 i, j, n, jstart, nchars, found; PROCNAME("skipToSemicolon"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pnext) return ERROR_INT("&next not defined", procName, 1); *pnext = -1; n = sarrayGetCount(sa); found = FALSE; for (i = start; i < n; i++) { str = sarrayGetString(sa, i, 0); jstart = 0; if (i == start) jstart = charindex + 1; nchars = strlen(str); for (j = jstart; j < nchars; j++) { if (str[j] == ';') { found = TRUE;; break; } } if (found) { *pnext = i; return 0; } } return ERROR_INT("semicolon not found", procName, 1); } /* * getOffsetForCharacter() * * Input: sa (output from cpp, by line) * start (starting index in sa to search; never a comment line) * tchar (we are searching for the first instance of this) * &soffset ( offset in strings from start index) * &boffset ( offset in bytes within string in which * the character is first found) * &toffset ( offset in total bytes from beginning of * string indexed by 'start' to the location where * the character is first found) * Return: 0 if OK, 1 on error * * Notes: * (1) We are searching for the first instance of 'tchar', starting * at the beginning of the string indexed by start. * (2) If the character is not found, soffset is returned as -1, * and the other offsets are set to very large numbers. The * caller must check the value of soffset. * (3) This is only used in contexts where it is not necessary to * consider if the character is inside a string. */ static l_int32 getOffsetForCharacter(SARRAY *sa, l_int32 start, char tchar, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset) { char *str; l_int32 i, j, n, nchars, totchars, found; PROCNAME("getOffsetForCharacter"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!psoffset) return ERROR_INT("&soffset not defined", procName, 1); if (!pboffset) return ERROR_INT("&boffset not defined", procName, 1); if (!ptoffset) return ERROR_INT("&toffset not defined", procName, 1); *psoffset = -1; /* init to not found */ *pboffset = 100000000; *ptoffset = 100000000; n = sarrayGetCount(sa); found = FALSE; totchars = 0; for (i = start; i < n; i++) { if ((str = sarrayGetString(sa, i, 0)) == NULL) return ERROR_INT("str not returned; shouldn't happen", procName, 1); nchars = strlen(str); for (j = 0; j < nchars; j++) { if (str[j] == tchar) { found = TRUE; break; } } if (found) break; totchars += nchars; } if (found) { *psoffset = i - start; *pboffset = j; *ptoffset = totchars + j; } return 0; } /* * getOffsetForMatchingRP() * * Input: sa (output from cpp, by line) * start (starting index in sa to search; never a comment line) * soffsetlp (string offset to first LP) * boffsetlp (byte offset within string to first LP) * toffsetlp (total byte offset to first LP) * &soffset ( offset in strings from start index) * &boffset ( offset in bytes within string in which * the matching RP is found) * &toffset ( offset in total bytes from beginning of * string indexed by 'start' to the location where * the matching RP is found); * Return: 0 if OK, 1 on error * * Notes: * (1) We are searching for the matching right parenthesis (RP) that * corresponds to the first LP found beginning at the string * indexed by start. * (2) If the matching RP is not found, soffset is returned as -1, * and the other offsets are set to very large numbers. The * caller must check the value of soffset. * (3) This is only used in contexts where it is not necessary to * consider if the character is inside a string. * (4) We must do this because although most arg lists have a single * left and right parenthesis, it is possible to construct * more complicated prototype declarations, such as those * where functions are passed in. The C++ rules for prototypes * are strict, and require that for functions passed in as args, * the function name arg be placed in parenthesis, as well * as its arg list, thus incurring two extra levels of parentheses. */ static l_int32 getOffsetForMatchingRP(SARRAY *sa, l_int32 start, l_int32 soffsetlp, l_int32 boffsetlp, l_int32 toffsetlp, l_int32 *psoffset, l_int32 *pboffset, l_int32 *ptoffset) { char *str; l_int32 i, j, n, nchars, totchars, leftmatch, firstline, jstart, found; PROCNAME("getOffsetForMatchingRP"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!psoffset) return ERROR_INT("&soffset not defined", procName, 1); if (!pboffset) return ERROR_INT("&boffset not defined", procName, 1); if (!ptoffset) return ERROR_INT("&toffset not defined", procName, 1); *psoffset = -1; /* init to not found */ *pboffset = 100000000; *ptoffset = 100000000; n = sarrayGetCount(sa); found = FALSE; totchars = toffsetlp; leftmatch = 1; /* count of (LP - RP); we're finished when it goes to 0. */ firstline = start + soffsetlp; for (i = firstline; i < n; i++) { if ((str = sarrayGetString(sa, i, 0)) == NULL) return ERROR_INT("str not returned; shouldn't happen", procName, 1); nchars = strlen(str); jstart = 0; if (i == firstline) jstart = boffsetlp + 1; for (j = jstart; j < nchars; j++) { if (str[j] == '(') leftmatch++; else if (str[j] == ')') leftmatch--; if (leftmatch == 0) { found = TRUE; break; } } if (found) break; if (i == firstline) totchars += nchars - boffsetlp; else totchars += nchars; } if (found) { *psoffset = i - start; *pboffset = j; *ptoffset = totchars + j; } return 0; } leptonica-1.70/src/pixconv.c0000644000175000017500000034377212252644437014157 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixconv.c * * These functions convert between images of different types * without scaling. * * Conversion from 8 bpp grayscale to 1, 2, 4 and 8 bpp * PIX *pixThreshold8() * * Conversion from colormap to full color or grayscale * PIX *pixRemoveColormapGeneral() * PIX *pixRemoveColormap() * * Add colormap losslessly (8 to 8) * l_int32 pixAddGrayColormap8() * PIX *pixAddMinimalGrayColormap8() * * Conversion from RGB color to grayscale * PIX *pixConvertRGBToLuminance() * PIX *pixConvertRGBToGray() * PIX *pixConvertRGBToGrayFast() * PIX *pixConvertRGBToGrayMinMax() * PIX *pixConvertRGBToGraySatBoost() * * Conversion from grayscale to colormap * PIX *pixConvertGrayToColormap() -- 2, 4, 8 bpp * PIX *pixConvertGrayToColormap8() -- 8 bpp only * * Colorizing conversion from grayscale to color * PIX *pixColorizeGray() -- 8 bpp or cmapped * * Conversion from RGB color to colormap * PIX *pixConvertRGBToColormap() * * Quantization for relatively small number of colors in source * l_int32 pixQuantizeIfFewColors() * * Conversion from 16 bpp to 8 bpp * PIX *pixConvert16To8() * * Conversion from grayscale to false color * PIX *pixConvertGrayToFalseColor() * * Unpacking conversion from 1 bpp to 2, 4, 8, 16 and 32 bpp * PIX *pixUnpackBinary() * PIX *pixConvert1To16() * PIX *pixConvert1To32() * * Unpacking conversion from 1 bpp to 2 bpp * PIX *pixConvert1To2Cmap() * PIX *pixConvert1To2() * * Unpacking conversion from 1 bpp to 4 bpp * PIX *pixConvert1To4Cmap() * PIX *pixConvert1To4() * * Unpacking conversion from 1, 2 and 4 bpp to 8 bpp * PIX *pixConvert1To8() * PIX *pixConvert2To8() * PIX *pixConvert4To8() * * Unpacking conversion from 8 bpp to 16 bpp * PIX *pixConvert8To16() * * Top-level conversion to 1 bpp * PIX *pixConvertTo1() * PIX *pixConvertTo1BySampling() * * Top-level conversion to 8 bpp * PIX *pixConvertTo8() * PIX *pixConvertTo8BySampling() * PIX *pixConvertTo8Color() * * Top-level conversion to 16 bpp * PIX *pixConvertTo16() * * Top-level conversion to 32 bpp (RGB) * PIX *pixConvertTo32() *** * PIX *pixConvertTo32BySampling() *** * PIX *pixConvert8To32() *** * * Top-level conversion to 8 or 32 bpp, without colormap * PIX *pixConvertTo8Or32 * * Conversion between 24 bpp and 32 bpp rgb * PIX *pixConvert24To32() * PIX *pixConvert32To24() * * Removal of alpha component by blending with white background * PIX *pixRemoveAlpha() * * Lossless depth conversion (unpacking) * PIX *pixConvertLossless() * * Conversion for printing in PostScript * PIX *pixConvertForPSWrap() * * Scaling conversion to subpixel RGB * PIX *pixConvertToSubpixelRGB() * PIX *pixConvertGrayToSubpixelRGB() * PIX *pixConvertColorToSubpixelRGB() * * *** indicates implicit assumption about RGB component ordering */ #include #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_CONVERT_TO_COLORMAP 0 #define DEBUG_UNROLLING 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Conversion from 8 bpp grayscale to 1, 2 4 and 8 bpp * *-------------------------------------------------------------*/ /*! * pixThreshold8() * * Input: pix (8 bpp grayscale) * d (destination depth: 1, 2, 4 or 8) * nlevels (number of levels to be used for colormap) * cmapflag (1 if makes colormap; 0 otherwise) * Return: pixd (thresholded with standard dest thresholds), * or null on error * * Notes: * (1) This uses, by default, equally spaced "target" values * that depend on the number of levels, with thresholds * halfway between. For N levels, with separation (N-1)/255, * there are N-1 fixed thresholds. * (2) For 1 bpp destination, the number of levels can only be 2 * and if a cmap is made, black is (0,0,0) and white * is (255,255,255), which is opposite to the convention * without a colormap. * (3) For 1, 2 and 4 bpp, the nlevels arg is used if a colormap * is made; otherwise, we take the most significant bits * from the src that will fit in the dest. * (4) For 8 bpp, the input pixs is quantized to nlevels. The * dest quantized with that mapping, either through a colormap * table or directly with 8 bit values. * (5) Typically you should not use make a colormap for 1 bpp dest. * (6) This is not dithering. Each pixel is treated independently. */ PIX * pixThreshold8(PIX *pixs, l_int32 d, l_int32 nlevels, l_int32 cmapflag) { PIX *pixd; PIXCMAP *cmap; PROCNAME("pixThreshold8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (cmapflag && nlevels < 2) return (PIX *)ERROR_PTR("nlevels must be at least 2", procName, NULL); switch (d) { case 1: pixd = pixThresholdToBinary(pixs, 128); if (cmapflag) { cmap = pixcmapCreateLinear(1, 2); pixSetColormap(pixd, cmap); } break; case 2: pixd = pixThresholdTo2bpp(pixs, nlevels, cmapflag); break; case 4: pixd = pixThresholdTo4bpp(pixs, nlevels, cmapflag); break; case 8: pixd = pixThresholdOn8bpp(pixs, nlevels, cmapflag); break; default: return (PIX *)ERROR_PTR("d must be in {1,2,4,8}", procName, NULL); } if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); return pixd; } /*-------------------------------------------------------------* * Conversion from colormapped pix * *-------------------------------------------------------------*/ /*! * pixRemoveColormapGeneral() * * Input: pixs (any depth, with or without colormap) * type (REMOVE_CMAP_TO_BINARY, * REMOVE_CMAP_TO_GRAYSCALE, * REMOVE_CMAP_TO_FULL_COLOR, * REMOVE_CMAP_WITH_ALPHA, * REMOVE_CMAP_BASED_ON_SRC) * ifnocmap (L_CLONE, L_COPY) * Return: pixd (always a new pix; without colormap), or null on error * * Notes: * (1) Convenience function that allows choice between returning * a clone or a copy if pixs does not have a colormap. * (2) See pixRemoveColormap(). */ PIX * pixRemoveColormapGeneral(PIX *pixs, l_int32 type, l_int32 ifnocmap) { PROCNAME("pixRemoveColormapGeneral"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (ifnocmap != L_CLONE && ifnocmap != L_COPY) return (PIX *)ERROR_PTR("invalid value for ifnocmap", procName, NULL); if (pixGetColormap(pixs)) return pixRemoveColormap(pixs, type); if (ifnocmap == L_CLONE) return pixClone(pixs); else return pixCopy(NULL, pixs); } /*! * pixRemoveColormap() * * Input: pixs (see restrictions below) * type (REMOVE_CMAP_TO_BINARY, * REMOVE_CMAP_TO_GRAYSCALE, * REMOVE_CMAP_TO_FULL_COLOR, * REMOVE_CMAP_WITH_ALPHA, * REMOVE_CMAP_BASED_ON_SRC) * Return: pixd (without colormap), or null on error * * Notes: * (1) If pixs does not have a colormap, a clone is returned. * (2) Otherwise, the input pixs is restricted to 1, 2, 4 or 8 bpp. * (3) Use REMOVE_CMAP_TO_BINARY only on 1 bpp pix. * (4) For grayscale conversion from RGB, use a weighted average * of RGB values, and always return an 8 bpp pix, regardless * of whether the input pixs depth is 2, 4 or 8 bpp. * (5) REMOVE_CMAP_BASED_ON_SRC and REMOVE_CMAP_TO_FULL_COLOR * ignore the alpha components. For 32-bit pixel output, * the alpha byte is set to 0 and spp = 3. */ PIX * pixRemoveColormap(PIX *pixs, l_int32 type) { l_int32 sval, rval, gval, bval; l_int32 i, j, k, w, h, d, wpls, wpld, ncolors, count; l_int32 colorfound; l_int32 *rmap, *gmap, *bmap, *amap, *graymap; l_uint32 *datas, *lines, *datad, *lined, *lut; l_uint32 sword, dword; PIXCMAP *cmap; PIX *pixd; PROCNAME("pixRemoveColormap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if ((cmap = pixGetColormap(pixs)) == NULL) return pixClone(pixs); if (type != REMOVE_CMAP_TO_BINARY && type != REMOVE_CMAP_TO_GRAYSCALE && type != REMOVE_CMAP_TO_FULL_COLOR && type != REMOVE_CMAP_WITH_ALPHA && type != REMOVE_CMAP_BASED_ON_SRC) { L_WARNING("Invalid type; converting based on src\n", procName); type = REMOVE_CMAP_BASED_ON_SRC; } pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("pixs must be {1,2,4,8} bpp", procName, NULL); if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap)) return (PIX *)ERROR_PTR("colormap arrays not made", procName, NULL); if (d != 1 && type == REMOVE_CMAP_TO_BINARY) { L_WARNING("not 1 bpp; can't remove cmap to binary\n", procName); type = REMOVE_CMAP_BASED_ON_SRC; } if (type == REMOVE_CMAP_BASED_ON_SRC) { /* select output type depending on colormap */ pixcmapHasColor(cmap, &colorfound); if (!colorfound) { if (d == 1) type = REMOVE_CMAP_TO_BINARY; else type = REMOVE_CMAP_TO_GRAYSCALE; } else { type = REMOVE_CMAP_TO_FULL_COLOR; } } ncolors = pixcmapGetCount(cmap); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (type == REMOVE_CMAP_TO_BINARY) { if ((pixd = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixcmapGetColor(cmap, 0, &rval, &gval, &bval); if (rval == 0) /* photometrically inverted from standard */ pixInvert(pixd, pixd); pixDestroyColormap(pixd); } else if (type == REMOVE_CMAP_TO_GRAYSCALE) { if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if ((graymap = (l_int32 *)CALLOC(ncolors, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("calloc fail for graymap", procName, NULL); for (i = 0; i < pixcmapGetCount(cmap); i++) { graymap[i] = (rmap[i] + 2 * gmap[i] + bmap[i]) / 4; } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; switch (d) /* depth test above; no default permitted */ { case 8: /* Unrolled 4x */ for (j = 0, count = 0; j + 3 < w; j += 4, count++) { sword = lines[count]; dword = (graymap[(sword >> 24) & 0xff] << 24) | (graymap[(sword >> 16) & 0xff] << 16) | (graymap[(sword >> 8) & 0xff] << 8) | graymap[sword & 0xff]; lined[count] = dword; } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_BYTE(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING #define CHECK_VALUE(a, b, c) if (GET_DATA_BYTE(a, b) != c) { \ fprintf(stderr, "Error: mismatch at %d, %d vs %d\n", \ j, GET_DATA_BYTE(a, b), c); } for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #endif break; case 4: /* Unrolled 8x */ for (j = 0, count = 0; j + 7 < w; j += 8, count++) { sword = lines[count]; dword = (graymap[(sword >> 28) & 0xf] << 24) | (graymap[(sword >> 24) & 0xf] << 16) | (graymap[(sword >> 20) & 0xf] << 8) | graymap[(sword >> 16) & 0xf]; lined[2 * count] = dword; dword = (graymap[(sword >> 12) & 0xf] << 24) | (graymap[(sword >> 8) & 0xf] << 16) | (graymap[(sword >> 4) & 0xf] << 8) | graymap[sword & 0xf]; lined[2 * count + 1] = dword; } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_QBIT(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #endif break; case 2: /* Unrolled 16x */ for (j = 0, count = 0; j + 15 < w; j += 16, count++) { sword = lines[count]; dword = (graymap[(sword >> 30) & 0x3] << 24) | (graymap[(sword >> 28) & 0x3] << 16) | (graymap[(sword >> 26) & 0x3] << 8) | graymap[(sword >> 24) & 0x3]; lined[4 * count] = dword; dword = (graymap[(sword >> 22) & 0x3] << 24) | (graymap[(sword >> 20) & 0x3] << 16) | (graymap[(sword >> 18) & 0x3] << 8) | graymap[(sword >> 16) & 0x3]; lined[4 * count + 1] = dword; dword = (graymap[(sword >> 14) & 0x3] << 24) | (graymap[(sword >> 12) & 0x3] << 16) | (graymap[(sword >> 10) & 0x3] << 8) | graymap[(sword >> 8) & 0x3]; lined[4 * count + 2] = dword; dword = (graymap[(sword >> 6) & 0x3] << 24) | (graymap[(sword >> 4) & 0x3] << 16) | (graymap[(sword >> 2) & 0x3] << 8) | graymap[sword & 0x3]; lined[4 * count + 3] = dword; } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_DIBIT(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { sval = GET_DATA_DIBIT(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #endif break; case 1: /* Unrolled 8x */ for (j = 0, count = 0; j + 31 < w; j += 32, count++) { sword = lines[count]; for (k = 0; k < 4; k++) { /* The top byte is always the relevant one */ dword = (graymap[(sword >> 31) & 0x1] << 24) | (graymap[(sword >> 30) & 0x1] << 16) | (graymap[(sword >> 29) & 0x1] << 8) | graymap[(sword >> 28) & 0x1]; lined[8 * count + 2 * k] = dword; dword = (graymap[(sword >> 27) & 0x1] << 24) | (graymap[(sword >> 26) & 0x1] << 16) | (graymap[(sword >> 25) & 0x1] << 8) | graymap[(sword >> 24) & 0x1]; lined[8 * count + 2 * k + 1] = dword; sword <<= 8; /* Move up the next byte */ } } /* Cleanup partial word */ for (; j < w; j++) { sval = GET_DATA_BIT(lines, j); gval = graymap[sval]; SET_DATA_BYTE(lined, j, gval); } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { sval = GET_DATA_BIT(lines, j); gval = graymap[sval]; CHECK_VALUE(lined, j, gval); } #undef CHECK_VALUE #endif break; default: return NULL; } } if (graymap) FREE(graymap); } else { /* type == REMOVE_CMAP_TO_FULL_COLOR or REMOVE_CMAP_WITH_ALPHA */ if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); if (type == REMOVE_CMAP_WITH_ALPHA) pixSetSpp(pixd, 4); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if ((lut = (l_uint32 *)CALLOC(ncolors, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("calloc fail for lut", procName, NULL); for (i = 0; i < ncolors; i++) { if (type == REMOVE_CMAP_TO_FULL_COLOR) composeRGBPixel(rmap[i], gmap[i], bmap[i], lut + i); else /* full color plus alpha */ composeRGBAPixel(rmap[i], gmap[i], bmap[i], amap[i], lut + i); } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) sval = GET_DATA_BYTE(lines, j); else if (d == 4) sval = GET_DATA_QBIT(lines, j); else if (d == 2) sval = GET_DATA_DIBIT(lines, j); else if (d == 1) sval = GET_DATA_BIT(lines, j); else return NULL; if (sval >= ncolors) L_WARNING("pixel value out of bounds\n", procName); else lined[j] = lut[sval]; } } FREE(lut); } FREE(rmap); FREE(gmap); FREE(bmap); FREE(amap); return pixd; } /*-------------------------------------------------------------* * Add colormap losslessly (8 to 8) * *-------------------------------------------------------------*/ /*! * pixAddGrayColormap8() * * Input: pixs (8 bpp) * Return: 0 if OK, 1 on error * * Notes: * (1) If pixs has a colormap, this is a no-op. */ l_int32 pixAddGrayColormap8(PIX *pixs) { PIXCMAP *cmap; PROCNAME("pixAddGrayColormap8"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return 0; cmap = pixcmapCreateLinear(8, 256); pixSetColormap(pixs, cmap); return 0; } /*! * pixAddMinimalGrayColormap8() * * Input: pixs (8 bpp) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a colormapped version of the input image * that has the same number of colormap entries as the * input image has unique gray levels. */ PIX * pixAddMinimalGrayColormap8(PIX *pixs) { l_int32 ncolors, w, h, i, j, wplt, wpld, index, val; l_int32 *inta, *revmap; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixAddMinimalGrayColormap8"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); /* Eliminate the easy cases */ pixNumColors(pixs, 1, &ncolors); cmap = pixGetColormap(pixs); if (cmap) { if (pixcmapGetCount(cmap) == ncolors) /* irreducible */ return pixCopy(NULL, pixs); else pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); } else { if (ncolors == 256) { pixt = pixCopy(NULL, pixs); pixAddGrayColormap8(pixt); return pixt; } pixt = pixClone(pixs); } /* Find the gray levels and make a reverse map */ pixGetDimensions(pixt, &w, &h, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); inta = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < h; i++) { linet = datat + i * wplt; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); inta[val] = 1; } } cmap = pixcmapCreate(8); revmap = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0, index = 0; i < 256; i++) { if (inta[i]) { pixcmapAddColor(cmap, i, i, i); revmap[i] = index++; } } /* Set all pixels in pixd to the colormap index */ pixd = pixCreateTemplate(pixt); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); SET_DATA_BYTE(lined, j, revmap[val]); } } pixDestroy(&pixt); FREE(inta); FREE(revmap); return pixd; } /*-------------------------------------------------------------* * Conversion from RGB color to grayscale * *-------------------------------------------------------------*/ /*! * pixConvertRGBToLuminance() * * Input: pix (32 bpp RGB) * Return: 8 bpp pix, or null on error * * Notes: * (1) Use a standard luminance conversion. */ PIX * pixConvertRGBToLuminance(PIX *pixs) { return pixConvertRGBToGray(pixs, 0.0, 0.0, 0.0); } /*! * pixConvertRGBToGray() * * Input: pix (32 bpp RGB) * rwt, gwt, bwt (non-negative; these should add to 1.0, * or use 0.0 for default) * Return: 8 bpp pix, or null on error * * Notes: * (1) Use a weighted average of the RGB values. */ PIX * pixConvertRGBToGray(PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 word; l_uint32 *datas, *lines, *datad, *lined; l_float32 sum; PIX *pixd; PROCNAME("pixConvertRGBToGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0) return (PIX *)ERROR_PTR("weights not all >= 0.0", procName, NULL); /* Make sure the sum of weights is 1.0; otherwise, you can get * overflow in the gray value. */ if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) { rwt = L_RED_WEIGHT; gwt = L_GREEN_WEIGHT; bwt = L_BLUE_WEIGHT; } sum = rwt + gwt + bwt; if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ L_WARNING("weights don't sum to 1; maintaining ratios\n", procName); rwt = rwt / sum; gwt = gwt / sum; bwt = bwt / sum; } pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { word = *(lines + j); val = (l_int32)(rwt * ((word >> L_RED_SHIFT) & 0xff) + gwt * ((word >> L_GREEN_SHIFT) & 0xff) + bwt * ((word >> L_BLUE_SHIFT) & 0xff) + 0.5); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * pixConvertRGBToGrayFast() * * Input: pix (32 bpp RGB) * Return: 8 bpp pix, or null on error * * Notes: * (1) This function should be used if speed of conversion * is paramount, and the green channel can be used as * a fair representative of the RGB intensity. It is * several times faster than pixConvertRGBToGray(). * (2) To combine RGB to gray conversion with subsampling, * use pixScaleRGBToGrayFast() instead. */ PIX * pixConvertRGBToGrayFast(PIX *pixs) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; PROCNAME("pixConvertRGBToGrayFast"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++, lines++) { val = ((*lines) >> L_GREEN_SHIFT) & 0xff; SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * pixConvertRGBToGrayMinMax() * * Input: pix (32 bpp RGB) * type (L_CHOOSE_MIN or L_CHOOSE_MAX) * Return: 8 bpp pix, or null on error * * Notes: * (1) This chooses either the min or the max of the three * RGB sample values. */ PIX * pixConvertRGBToGrayMinMax(PIX *pixs, l_int32 type) { l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, val; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; PROCNAME("pixConvertRGBToGrayMinMax"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX) return (PIX *)ERROR_PTR("invalid type", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); if (type == L_CHOOSE_MIN) { val = L_MIN(rval, gval); val = L_MIN(val, bval); } else { /* type == L_CHOOSE_MAX */ val = L_MAX(rval, gval); val = L_MAX(val, bval); } SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * pixConvertRGBToGraySatBoost() * * Input: pixs (32 bpp rgb) * refval (between 1 and 255; typ. less than 128) * Return: pixd (8 bpp), or null on error * * Notes: * (1) This returns the max component value, boosted by * the saturation. The maximum boost occurs where * the maximum component value is equal to some reference value. * This particular weighting is due to Dany Qumsiyeh. * (2) For gray pixels (zero saturation), this returns * the intensity of any component. * (3) For fully saturated pixels ('fullsat'), this rises linearly * with the max value and has a slope equal to 255 divided * by the reference value; for a max value greater than * the reference value, it is clipped to 255. * (4) For saturation values in between, the output is a linear * combination of (2) and (3), weighted by saturation. * It falls between these two curves, and does not exceed 255. * (5) This can be useful for distinguishing an object that has nonzero * saturation from a gray background. For this, the refval * should be chosen near the expected value of the background, * to achieve maximum saturation boost there. */ PIX * pixConvertRGBToGraySatBoost(PIX *pixs, l_int32 refval) { l_int32 w, h, d, i, j, wplt, wpld; l_int32 rval, gval, bval, sval, minrg, maxrg, min, max, delta; l_int32 fullsat, newval; l_float32 *invmax, *ratio; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; PROCNAME("pixConvertRGBToGraySatBoost"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not cmapped or rgb", procName, NULL); if (refval < 1 || refval > 255) return (PIX *)ERROR_PTR("refval not in [1 ... 255]", procName, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); invmax = (l_float32 *)CALLOC(256, sizeof(l_float32)); ratio = (l_float32 *)CALLOC(256, sizeof(l_float32)); for (i = 1; i < 256; i++) { /* i == 0 --> delta = sval = newval = 0 */ invmax[i] = 1.0 / (l_float32)i; ratio[i] = (l_float32)i / (l_float32)refval; } for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(linet[j], &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; if (delta == 0) /* gray; no chroma */ sval = 0; else sval = (l_int32)(255. * (l_float32)delta * invmax[max] + 0.5); fullsat = L_MIN(255, 255 * ratio[max]); newval = (sval * fullsat + (255 - sval) * max) / 255; SET_DATA_BYTE(lined, j, newval); } } pixDestroy(&pixt); FREE(invmax); FREE(ratio); return pixd; } /*---------------------------------------------------------------------------* * Conversion from grayscale to colormap * *---------------------------------------------------------------------------*/ /*! * pixConvertGrayToColormap() * * Input: pixs (2, 4 or 8 bpp grayscale) * Return: pixd (2, 4 or 8 bpp with colormap), or null on error * * Notes: * (1) This is a simple interface for adding a colormap to a * 2, 4 or 8 bpp grayscale image without causing any * quantization. There is some similarity to operations * in grayquant.c, such as pixThresholdOn8bpp(), where * the emphasis is on quantization with an arbitrary number * of levels, and a colormap is an option. * (2) Returns a copy if pixs already has a colormap. * (3) For 8 bpp src, this is a lossless transformation. * (4) For 2 and 4 bpp src, this generates a colormap that * assumes full coverage of the gray space, with equally spaced * levels: 4 levels for d = 2 and 16 levels for d = 4. * (5) In all cases, the depth of the dest is the same as the src. */ PIX * pixConvertGrayToColormap(PIX *pixs) { l_int32 d; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixConvertGrayToColormap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("pixs not 2, 4 or 8 bpp", procName, NULL); if (pixGetColormap(pixs)) { L_WARNING("pixs already has a colormap\n", procName); return pixCopy(NULL, pixs); } if (d == 8) /* lossless conversion */ return pixConvertGrayToColormap8(pixs, 2); /* Build a cmap with equally spaced target values over the * full 8 bpp range. */ pixd = pixCopy(NULL, pixs); cmap = pixcmapCreateLinear(d, 1 << d); pixSetColormap(pixd, cmap); return pixd; } /*! * pixConvertGrayToColormap8() * * Input: pixs (8 bpp grayscale) * mindepth (of pixd; valid values are 2, 4 and 8) * Return: pixd (2, 4 or 8 bpp with colormap), or null on error * * Notes: * (1) Returns a copy if pixs already has a colormap. * (2) This is a lossless transformation; there is no quantization. * We compute the number of different gray values in pixs, * and construct a colormap that has exactly these values. * (3) 'mindepth' is the minimum depth of pixd. If mindepth == 8, * pixd will always be 8 bpp. Let the number of different * gray values in pixs be ngray. If mindepth == 4, we attempt * to save pixd as a 4 bpp image, but if ngray > 16, * pixd must be 8 bpp. Likewise, if mindepth == 2, * the depth of pixd will be 2 if ngray <= 4 and 4 if ngray > 4 * but <= 16. */ PIX * pixConvertGrayToColormap8(PIX *pixs, l_int32 mindepth) { l_int32 ncolors, w, h, depth, i, j, wpls, wpld; l_int32 index, num, val, newval; l_int32 array[256]; l_uint32 *lines, *lined, *datas, *datad; NUMA *na; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixConvertGrayToColormap8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) { L_WARNING("invalid value of mindepth; setting to 8\n", procName); mindepth = 8; } if (pixGetColormap(pixs)) { L_WARNING("pixs already has a colormap\n", procName); return pixCopy(NULL, pixs); } na = pixGetGrayHistogram(pixs, 1); numaGetCountRelativeToZero(na, L_GREATER_THAN_ZERO, &ncolors); if (mindepth == 8 || ncolors > 16) depth = 8; else if (mindepth == 4 || ncolors > 4) depth = 4; else depth = 2; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, depth); cmap = pixcmapCreate(depth); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); index = 0; for (i = 0; i < 256; i++) { numaGetIValue(na, i, &num); if (num > 0) { pixcmapAddColor(cmap, i, i, i); array[i] = index; index++; } } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); newval = array[val]; if (depth == 2) SET_DATA_DIBIT(lined, j, newval); else if (depth == 4) SET_DATA_QBIT(lined, j, newval); else /* depth == 8 */ SET_DATA_BYTE(lined, j, newval); } } numaDestroy(&na); return pixd; } /*---------------------------------------------------------------------------* * Colorizing conversion from grayscale to color * *---------------------------------------------------------------------------*/ /*! * pixColorizeGray() * * Input: pixs (8 bpp gray; 2, 4 or 8 bpp colormapped) * color (32 bit rgba pixel) * cmapflag (1 for result to have colormap; 0 for RGB) * Return: pixd (8 bpp colormapped or 32 bpp rgb), or null on error * * Notes: * (1) This applies the specific color to the grayscale image. * (2) If pixs already has a colormap, it is removed to gray * before colorizing. */ PIX * pixColorizeGray(PIX *pixs, l_uint32 color, l_int32 cmapflag) { l_int32 i, j, w, h, wplt, wpld, val8; l_uint32 *datad, *datat, *lined, *linet, *tab; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixColorizeGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8 bpp or cmapped", procName, NULL); if (pixGetColormap(pixs)) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixt = pixClone(pixs); cmap = pixcmapGrayToColor(color); if (cmapflag) { pixd = pixCopy(NULL, pixt); pixSetColormap(pixd, cmap); pixDestroy(&pixt); return pixd; } /* Make an RGB pix */ pixcmapToRGBTable(cmap, &tab, NULL); pixGetDimensions(pixt, &w, &h, NULL); pixd = pixCreate(w, h, 32); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { lined = datad + i * wpld; linet = datat + i * wplt; for (j = 0; j < w; j++) { val8 = GET_DATA_BYTE(linet, j); lined[j] = tab[val8]; } } pixDestroy(&pixt); pixcmapDestroy(&cmap); FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Conversion from RGB color to colormap * *---------------------------------------------------------------------------*/ /*! * pixConvertRGBToColormap() * * Input: pixs (32 bpp rgb) * ditherflag (1 to dither, 0 otherwise) * Return: pixd (2, 4 or 8 bpp with colormap), or null on error * * Notes: * (1) This function has two relatively simple modes of color * quantization: * (a) If the image is made orthographically and has not more * than 256 'colors' at the level 4 octcube leaves, * it is quantized nearly exactly. The ditherflag * is ignored. * (b) Most natural images have more than 256 different colors; * in that case we use adaptive octree quantization, * with dithering if requested. * (2) If there are not more than 256 occupied level 4 octcubes, * the color in the colormap that represents all pixels in * one of those octcubes is given by the first pixel that * falls into that octcube. * (3) If there are more than 256 colors, we use adaptive octree * color quantization. * (4) Dithering gives better visual results on images where * there is a color wash (a slow variation of color), but it * is about twice as slow and results in significantly larger * files when losslessly compressed (e.g., into png). */ PIX * pixConvertRGBToColormap(PIX *pixs, l_int32 ditherflag) { l_int32 ncolors; NUMA *na; PIX *pixd; PROCNAME("pixConvertRGBToColormap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (pixGetSpp(pixs) == 4) L_WARNING("pixs has alpha; removing\n", procName); /* Get the histogram and count the number of occupied level 4 * leaf octcubes. We don't yet know if this is the number of * actual colors, but if it's not, all pixels falling into * the same leaf octcube will be assigned to the color of the * first pixel that lands there. */ na = pixOctcubeHistogram(pixs, 4, &ncolors); /* If there are too many occupied leaf octcubes to be * represented directly in a colormap, fall back to octree * quantization, optionally with dithering. */ if (ncolors > 256) { numaDestroy(&na); if (ditherflag) L_INFO("More than 256 colors; using octree quant with dithering\n", procName); else L_INFO("More than 256 colors; using octree quant; no dithering\n", procName); return pixOctreeColorQuant(pixs, 240, ditherflag); } /* There are not more than 256 occupied leaf octcubes. * Quantize to those octcubes. */ pixd = pixFewColorsOctcubeQuant2(pixs, 4, na, ncolors, NULL); numaDestroy(&na); return pixd; } /*---------------------------------------------------------------------------* * Quantization for relatively small number of colors in source * *---------------------------------------------------------------------------*/ /*! * pixQuantizeIfFewColors() * * Input: pixs (8 bpp gray or 32 bpp rgb) * maxcolors (max number of colors allowed to be returned * from pixColorsForQuantization(); use 0 for default) * mingraycolors (min number of gray levels that a grayscale * image is quantized to; use 0 for default) * octlevel (for octcube quantization: 3 or 4) * &pixd (2, 4 or 8 bpp quantized; null if too many colors) * Return: 0 if OK, 1 on error or if pixs can't be quantized into * a small number of colors. * * Notes: * (1) This is a wrapper that tests if the pix can be quantized * with good quality using a small number of colors. If so, * it does the quantization, defining a colormap and using * pixels whose value is an index into the colormap. * (2) If the image has color, it is quantized with 8 bpp pixels. * If the image is essentially grayscale, the pixels are * either 4 or 8 bpp, depending on the size of the required * colormap. * (3) @octlevel = 3 works well for most images. However, for best * quality, at a cost of more colors in the colormap, use * @octlevel = 4. * (4) If the image already has a colormap, it returns a clone. */ l_int32 pixQuantizeIfFewColors(PIX *pixs, l_int32 maxcolors, l_int32 mingraycolors, l_int32 octlevel, PIX **ppixd) { l_int32 d, ncolors, iscolor, graycolors; PIX *pixg, *pixd; PROCNAME("pixQuantizeIfFewColors"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("pixs not defined", procName, 1); if (pixGetColormap(pixs) != NULL) { *ppixd = pixClone(pixs); return 0; } if (maxcolors <= 0) maxcolors = 15; /* default */ if (maxcolors > 50) L_WARNING("maxcolors > 50; very large!\n", procName); if (mingraycolors <= 0) mingraycolors = 10; /* default */ if (mingraycolors > 30) L_WARNING("mingraycolors > 30; very large!\n", procName); if (octlevel != 3 && octlevel != 4) { L_WARNING("invalid octlevel; setting to 3\n", procName); octlevel = 3; } /* Test the number of colors. For color, the octcube leaves * are at level 4. */ pixColorsForQuantization(pixs, 0, &ncolors, &iscolor, 0); if (ncolors > maxcolors) return ERROR_INT("too many colors", procName, 1); /* Quantize! * (1) For color: * If octlevel == 4, try to quantize to an octree where * the octcube leaves are at level 4. If that fails, * back off to level 3. * If octlevel == 3, quantize to level 3 directly. * For level 3, the quality is usually good enough and there * is negligible chance of getting more than 256 colors. * (2) For grayscale, multiply ncolors by 1.5 for extra quality, * but use at least mingraycolors and not more than 256. */ if (iscolor) { pixd = pixFewColorsOctcubeQuant1(pixs, octlevel); if (!pixd) { /* backoff */ pixd = pixFewColorsOctcubeQuant1(pixs, octlevel - 1); if (octlevel == 3) /* shouldn't happen */ L_WARNING("quantized at level 2; low quality\n", procName); } } else { /* image is really grayscale */ if (d == 32) pixg = pixConvertRGBToLuminance(pixs); else pixg = pixClone(pixs); graycolors = L_MAX(mingraycolors, (l_int32)(1.5 * ncolors)); graycolors = L_MIN(graycolors, 256); if (graycolors < 16) pixd = pixThresholdTo4bpp(pixg, graycolors, 1); else pixd = pixThresholdOn8bpp(pixg, graycolors, 1); pixDestroy(&pixg); } *ppixd = pixd; if (!pixd) return ERROR_INT("pixd not made", procName, 1); else return 0; } /*---------------------------------------------------------------------------* * Conversion from 16 bpp to 8 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvert16To8() * * Input: pixs (16 bpp) * type (L_LS_BYTE, L_MS_BYTE, L_CLIP_TO_255) * Return: pixd (8 bpp), or null on error * * Notes: * (1) For each dest pixel, use either the LSB, the MSB, or the * min(val, 255) for each 16-bit src pixel. */ PIX * pixConvert16To8(PIX *pixs, l_int32 type) { l_uint16 dsword; l_int32 w, h, wpls, wpld, i, j; l_uint32 sword, first, second; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixConvert16To8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 16) return (PIX *)ERROR_PTR("pixs not 16 bpp", procName, NULL); if (type != L_LS_BYTE && type != L_MS_BYTE && type != L_CLIP_TO_255) return (PIX *)ERROR_PTR("invalid type", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Convert 2 pixels at a time */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (type == L_LS_BYTE) { for (j = 0; j < wpls; j++) { sword = *(lines + j); dsword = ((sword >> 8) & 0xff00) | (sword & 0xff); SET_DATA_TWO_BYTES(lined, j, dsword); } } else if (type == L_MS_BYTE) { for (j = 0; j < wpls; j++) { sword = *(lines + j); dsword = ((sword >> 16) & 0xff00) | ((sword >> 8) & 0xff); SET_DATA_TWO_BYTES(lined, j, dsword); } } else { /* type == L_CLIP_TO_255 */ for (j = 0; j < wpls; j++) { sword = *(lines + j); first = (sword >> 24) ? 255 : ((sword >> 16) & 0xff); second = ((sword >> 8) & 0xff) ? 255 : (sword & 0xff); dsword = (first << 8) | second; SET_DATA_TWO_BYTES(lined, j, dsword); } } } return pixd; } /*---------------------------------------------------------------------------* * Conversion from grayscale to false color *---------------------------------------------------------------------------*/ /*! * pixConvertGrayToFalseColor() * * Input: pixs (8 or 16 bpp grayscale) * gamma factor (0.0 or 1.0 for default; > 1.0 for brighter; * 2.0 is quite nice) * Return: pixd (8 bpp with colormap), or null on error * * Notes: * (1) For 8 bpp input, this simply adds a colormap to the input image. * (2) For 16 bpp input, it first converts to 8 bpp, using the MSB, * and then adds the colormap. * (3) The colormap is modeled after the Matlab "jet" configuration. */ PIX * pixConvertGrayToFalseColor(PIX *pixs, l_float32 gamma) { l_int32 d, i, rval, bval, gval; l_int32 *curve; l_float32 invgamma, x; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixConvertGrayToFalseColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 16) return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", procName, NULL); if (d == 16) { pixd = pixConvert16To8(pixs, L_MS_BYTE); } else { /* d == 8 */ if (pixGetColormap(pixs)) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixd = pixCopy(NULL, pixs); } if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); if ((cmap = pixcmapCreate(8)) == NULL) return (PIX *)ERROR_PTR("cmap not made", procName, NULL); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); /* Generate curve for transition part of color map */ if ((curve = (l_int32 *)CALLOC(64, sizeof(l_int32)))== NULL) return (PIX *)ERROR_PTR("curve not made", procName, NULL); if (gamma == 0.0) gamma = 1.0; invgamma = 1. / gamma; for (i = 0; i < 64; i++) { x = (l_float32)i / 64.; curve[i] = (l_int32)(255. * powf(x, invgamma) + 0.5); } for (i = 0; i < 256; i++) { if (i < 32) { rval = 0; gval = 0; bval = curve[i + 32]; } else if (i < 96) { /* 32 - 95 */ rval = 0; gval = curve[i - 32]; bval = 255; } else if (i < 160) { /* 96 - 159 */ rval = curve[i - 96]; gval = 255; bval = curve[159 - i]; } else if (i < 224) { /* 160 - 223 */ rval = 255; gval = curve[223 - i]; bval = 0; } else { /* 224 - 255 */ rval = curve[287 - i]; gval = 0; bval = 0; } pixcmapAddColor(cmap, rval, gval, bval); } FREE(curve); return pixd; } /*---------------------------------------------------------------------------* * Unpacking conversion from 1 bpp to 2, 4, 8, 16 and 32 bpp * *---------------------------------------------------------------------------*/ /*! * pixUnpackBinary() * * Input: pixs (1 bpp) * depth (of destination: 2, 4, 8, 16 or 32 bpp) * invert (0: binary 0 --> grayscale 0 * binary 1 --> grayscale 0xff... * 1: binary 0 --> grayscale 0xff... * binary 1 --> grayscale 0) * Return: pixd (2, 4, 8, 16 or 32 bpp), or null on error * * Notes: * (1) This function calls special cases of pixConvert1To*(), * for 2, 4, 8, 16 and 32 bpp destinations. */ PIX * pixUnpackBinary(PIX *pixs, l_int32 depth, l_int32 invert) { PIX *pixd; PROCNAME("pixUnpackBinary"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (depth != 2 && depth != 4 && depth != 8 && depth != 16 && depth != 32) return (PIX *)ERROR_PTR("depth not 2, 4, 8, 16 or 32 bpp", procName, NULL); if (depth == 2) { if (invert == 0) pixd = pixConvert1To2(NULL, pixs, 0, 3); else /* invert bits */ pixd = pixConvert1To2(NULL, pixs, 3, 0); } else if (depth == 4) { if (invert == 0) pixd = pixConvert1To4(NULL, pixs, 0, 15); else /* invert bits */ pixd = pixConvert1To4(NULL, pixs, 15, 0); } else if (depth == 8) { if (invert == 0) pixd = pixConvert1To8(NULL, pixs, 0, 255); else /* invert bits */ pixd = pixConvert1To8(NULL, pixs, 255, 0); } else if (depth == 16) { if (invert == 0) pixd = pixConvert1To16(NULL, pixs, 0, 0xffff); else /* invert bits */ pixd = pixConvert1To16(NULL, pixs, 0xffff, 0); } else { if (invert == 0) pixd = pixConvert1To32(NULL, pixs, 0, 0xffffffff); else /* invert bits */ pixd = pixConvert1To32(NULL, pixs, 0xffffffff, 0); } return pixd; } /*! * pixConvert1To16() * * Input: pixd ( 16 bpp, can be null) * pixs (1 bpp) * val0 (16 bit value to be used for 0s in pixs) * val1 (16 bit value to be used for 1s in pixs) * Return: pixd (16 bpp) * * Notes: * (1) If pixd is null, a new pix is made. * (2) If pixd is not null, it must be of equal width and height * as pixs. It is always returned. */ PIX * pixConvert1To16(PIX *pixd, PIX *pixs, l_uint16 val0, l_uint16 val1) { l_int32 w, h, i, j, dibit, ndibits, wpls, wpld; l_uint16 val[2]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; PROCNAME("pixConvert1To16"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); if (pixGetDepth(pixd) != 16) return (PIX *)ERROR_PTR("pixd not 16 bpp", procName, pixd); } else { if ((pixd = pixCreate(w, h, 16)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); /* Use a table to convert 2 src bits at a time */ if ((tab = (l_uint32 *)CALLOC(4, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); val[0] = val0; val[1] = val1; for (index = 0; index < 4; index++) { tab[index] = (val[(index >> 1) & 1] << 16) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); ndibits = (w + 1) / 2; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < ndibits; j++) { dibit = GET_DATA_DIBIT(lines, j); lined[j] = tab[dibit]; } } FREE(tab); return pixd; } /*! * pixConvert1To32() * * Input: pixd ( 32 bpp, can be null) * pixs (1 bpp) * val0 (32 bit value to be used for 0s in pixs) * val1 (32 bit value to be used for 1s in pixs) * Return: pixd (32 bpp) * * Notes: * (1) If pixd is null, a new pix is made. * (2) If pixd is not null, it must be of equal width and height * as pixs. It is always returned. */ PIX * pixConvert1To32(PIX *pixd, PIX *pixs, l_uint32 val0, l_uint32 val1) { l_int32 w, h, i, j, wpls, wpld, bit; l_uint32 val[2]; l_uint32 *datas, *datad, *lines, *lined; PROCNAME("pixConvert1To32"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); if (pixGetDepth(pixd) != 32) return (PIX *)ERROR_PTR("pixd not 32 bpp", procName, pixd); } else { if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); val[0] = val0; val[1] = val1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j 2 bpp, can be null) * pixs (1 bpp) * val0 (2 bit value to be used for 0s in pixs) * val1 (2 bit value to be used for 1s in pixs) * Return: pixd (2 bpp) * * Notes: * (1) If pixd is null, a new pix is made. * (2) If pixd is not null, it must be of equal width and height * as pixs. It is always returned. * (3) A simple unpacking might use val0 = 0 and val1 = 3. * (4) If you want a colormapped pixd, use pixConvert1To2Cmap(). */ PIX * pixConvert1To2(PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1) { l_int32 w, h, i, j, byteval, nbytes, wpls, wpld; l_uint8 val[2]; l_uint32 index; l_uint16 *tab; l_uint32 *datas, *datad, *lines, *lined; PROCNAME("pixConvert1To2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); if (pixGetDepth(pixd) != 2) return (PIX *)ERROR_PTR("pixd not 2 bpp", procName, pixd); } else { if ((pixd = pixCreate(w, h, 2)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); /* Use a table to convert 8 src bits to 16 dest bits */ if ((tab = (l_uint16 *)CALLOC(256, sizeof(l_uint16))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); val[0] = val0; val[1] = val1; for (index = 0; index < 256; index++) { tab[index] = (val[(index >> 7) & 1] << 14) | (val[(index >> 6) & 1] << 12) | (val[(index >> 5) & 1] << 10) | (val[(index >> 4) & 1] << 8) | (val[(index >> 3) & 1] << 6) | (val[(index >> 2) & 1] << 4) | (val[(index >> 1) & 1] << 2) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); nbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nbytes; j++) { byteval = GET_DATA_BYTE(lines, j); SET_DATA_TWO_BYTES(lined, j, tab[byteval]); } } FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Conversion from 1 bpp to 4 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvert1To4Cmap() * * Input: pixs (1 bpp) * Return: pixd (4 bpp, cmapped) * * Notes: * (1) Input 0 is mapped to (255, 255, 255); 1 is mapped to (0, 0, 0) */ PIX * pixConvert1To4Cmap(PIX *pixs) { PIX *pixd; PIXCMAP *cmap; PROCNAME("pixConvert1To4Cmap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if ((pixd = pixConvert1To4(NULL, pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmap = pixcmapCreate(4); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); return pixd; } /*! * pixConvert1To4() * * Input: pixd ( 4 bpp, can be null) * pixs (1 bpp) * val0 (4 bit value to be used for 0s in pixs) * val1 (4 bit value to be used for 1s in pixs) * Return: pixd (4 bpp) * * Notes: * (1) If pixd is null, a new pix is made. * (2) If pixd is not null, it must be of equal width and height * as pixs. It is always returned. * (3) A simple unpacking might use val0 = 0 and val1 = 15, or v.v. * (4) If you want a colormapped pixd, use pixConvert1To4Cmap(). */ PIX * pixConvert1To4(PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1) { l_int32 w, h, i, j, byteval, nbytes, wpls, wpld; l_uint8 val[2]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; PROCNAME("pixConvert1To4"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); if (pixGetDepth(pixd) != 4) return (PIX *)ERROR_PTR("pixd not 4 bpp", procName, pixd); } else { if ((pixd = pixCreate(w, h, 4)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); /* Use a table to convert 8 src bits to 32 bit dest word */ if ((tab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); val[0] = val0; val[1] = val1; for (index = 0; index < 256; index++) { tab[index] = (val[(index >> 7) & 1] << 28) | (val[(index >> 6) & 1] << 24) | (val[(index >> 5) & 1] << 20) | (val[(index >> 4) & 1] << 16) | (val[(index >> 3) & 1] << 12) | (val[(index >> 2) & 1] << 8) | (val[(index >> 1) & 1] << 4) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); nbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nbytes; j++) { byteval = GET_DATA_BYTE(lines, j); lined[j] = tab[byteval]; } } FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Conversion from 1, 2 and 4 bpp to 8 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvert1To8() * * Input: pixd ( 8 bpp, can be null) * pixs (1 bpp) * val0 (8 bit value to be used for 0s in pixs) * val1 (8 bit value to be used for 1s in pixs) * Return: pixd (8 bpp) * * Notes: * (1) If pixd is null, a new pix is made. * (2) If pixd is not null, it must be of equal width and height * as pixs. It is always returned. * (3) A simple unpacking might use val0 = 0 and val1 = 255, or v.v. * (4) In a typical application where one wants to use a colormap * with the dest, you can use val0 = 0, val1 = 1 to make a * non-cmapped 8 bpp pix, and then make a colormap and set 0 * and 1 to the desired colors. Here is an example: * pixd = pixConvert1To8(NULL, pixs, 0, 1); * cmap = pixCreate(8); * pixcmapAddColor(cmap, 255, 255, 255); * pixcmapAddColor(cmap, 0, 0, 0); * pixSetColormap(pixd, cmap); */ PIX * pixConvert1To8(PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1) { l_int32 w, h, i, j, qbit, nqbits, wpls, wpld; l_uint8 val[2]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; PROCNAME("pixConvert1To8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (w != pixGetWidth(pixd) || h != pixGetHeight(pixd)) return (PIX *)ERROR_PTR("pix sizes unequal", procName, pixd); if (pixGetDepth(pixd) != 8) return (PIX *)ERROR_PTR("pixd not 8 bpp", procName, pixd); } else { if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); /* Use a table to convert 4 src bits at a time */ if ((tab = (l_uint32 *)CALLOC(16, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); val[0] = val0; val[1] = val1; for (index = 0; index < 16; index++) { tab[index] = (val[(index >> 3) & 1] << 24) | (val[(index >> 2) & 1] << 16) | (val[(index >> 1) & 1] << 8) | val[index & 1]; } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); nqbits = (w + 3) / 4; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nqbits; j++) { qbit = GET_DATA_QBIT(lines, j); lined[j] = tab[qbit]; } } FREE(tab); return pixd; } /*! * pixConvert2To8() * * Input: pixs (2 bpp) * val0 (8 bit value to be used for 00 in pixs) * val1 (8 bit value to be used for 01 in pixs) * val2 (8 bit value to be used for 10 in pixs) * val3 (8 bit value to be used for 11 in pixs) * cmapflag (TRUE if pixd is to have a colormap; FALSE otherwise) * Return: pixd (8 bpp), or null on error * * Notes: * - A simple unpacking might use val0 = 0, * val1 = 85 (0x55), val2 = 170 (0xaa), val3 = 255. * - If cmapflag is TRUE: * - The 8 bpp image is made with a colormap. * - If pixs has a colormap, the input values are ignored and * the 8 bpp image is made using the colormap * - If pixs does not have a colormap, the input values are * used to build the colormap. * - If cmapflag is FALSE: * - The 8 bpp image is made without a colormap. * - If pixs has a colormap, the input values are ignored, * the colormap is removed, and the values stored in the 8 bpp * image are from the colormap. * - If pixs does not have a colormap, the input values are * used to populate the 8 bpp image. */ PIX * pixConvert2To8(PIX *pixs, l_uint8 val0, l_uint8 val1, l_uint8 val2, l_uint8 val3, l_int32 cmapflag) { l_int32 w, h, i, j, nbytes, wpls, wpld, dibit, ncolor; l_int32 rval, gval, bval, byte; l_uint8 val[4]; l_uint32 index; l_uint32 *tab, *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmaps, *cmapd; PROCNAME("pixConvert2To8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 2) return (PIX *)ERROR_PTR("pixs not 2 bpp", procName, NULL); cmaps = pixGetColormap(pixs); if (cmaps && cmapflag == FALSE) return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag == TRUE) { /* pixd will have a colormap */ cmapd = pixcmapCreate(8); /* 8 bpp standard cmap */ if (cmaps) { /* use the existing colormap from pixs */ ncolor = pixcmapGetCount(cmaps); for (i = 0; i < ncolor; i++) { pixcmapGetColor(cmaps, i, &rval, &gval, &bval); pixcmapAddColor(cmapd, rval, gval, bval); } } else { /* make a colormap from the input values */ pixcmapAddColor(cmapd, val0, val0, val0); pixcmapAddColor(cmapd, val1, val1, val1); pixcmapAddColor(cmapd, val2, val2, val2); pixcmapAddColor(cmapd, val3, val3, val3); } pixSetColormap(pixd, cmapd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { dibit = GET_DATA_DIBIT(lines, j); SET_DATA_BYTE(lined, j, dibit); } } return pixd; } /* Last case: no colormap in either pixs or pixd. * Use input values and build a table to convert 1 src byte * (4 src pixels) at a time */ if ((tab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); val[0] = val0; val[1] = val1; val[2] = val2; val[3] = val3; for (index = 0; index < 256; index++) { tab[index] = (val[(index >> 6) & 3] << 24) | (val[(index >> 4) & 3] << 16) | (val[(index >> 2) & 3] << 8) | val[index & 3]; } nbytes = (w + 3) / 4; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < nbytes; j++) { byte = GET_DATA_BYTE(lines, j); lined[j] = tab[byte]; } } FREE(tab); return pixd; } /*! * pixConvert4To8() * * Input: pixs (4 bpp) * cmapflag (TRUE if pixd is to have a colormap; FALSE otherwise) * Return: pixd (8 bpp), or null on error * * Notes: * - If cmapflag is TRUE: * - pixd is made with a colormap. * - If pixs has a colormap, it is copied and the colormap * index values are placed in pixd. * - If pixs does not have a colormap, a colormap with linear * trc is built and the pixel values in pixs are placed in * pixd as colormap index values. * - If cmapflag is FALSE: * - pixd is made without a colormap. * - If pixs has a colormap, it is removed and the values stored * in pixd are from the colormap (converted to gray). * - If pixs does not have a colormap, the pixel values in pixs * are used, with shift replication, to populate pixd. */ PIX * pixConvert4To8(PIX *pixs, l_int32 cmapflag) { l_int32 w, h, i, j, wpls, wpld, ncolor; l_int32 rval, gval, bval, byte, qbit; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmaps, *cmapd; PROCNAME("pixConvert4To8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 4) return (PIX *)ERROR_PTR("pixs not 4 bpp", procName, NULL); cmaps = pixGetColormap(pixs); if (cmaps && cmapflag == FALSE) return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag == TRUE) { /* pixd will have a colormap */ cmapd = pixcmapCreate(8); if (cmaps) { /* use the existing colormap from pixs */ ncolor = pixcmapGetCount(cmaps); for (i = 0; i < ncolor; i++) { pixcmapGetColor(cmaps, i, &rval, &gval, &bval); pixcmapAddColor(cmapd, rval, gval, bval); } } else { /* make a colormap with a linear trc */ for (i = 0; i < 16; i++) pixcmapAddColor(cmapd, 17 * i, 17 * i, 17 * i); } pixSetColormap(pixd, cmapd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { qbit = GET_DATA_QBIT(lines, j); SET_DATA_BYTE(lined, j, qbit); } } return pixd; } /* Last case: no colormap in either pixs or pixd. * Replicate the qbit value into 8 bits. */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { qbit = GET_DATA_QBIT(lines, j); byte = (qbit << 4) | qbit; SET_DATA_BYTE(lined, j, byte); } } return pixd; } /*---------------------------------------------------------------------------* * Unpacking conversion from 8 bpp to 16 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvert8To16() * * Input: pixs (8 bpp; colormap removed to gray) * leftshift (number of bits: 0 is no shift; * 8 replicates in MSB and LSB of dest) * Return: pixd (16 bpp), or null on error * * Notes: * (1) For left shift of 8, the 8 bit value is replicated in both * the MSB and the LSB of the pixels in pixd. That way, we get * proportional mapping, with a correct map from 8 bpp white * (0xff) to 16 bpp white (0xffff). */ PIX * pixConvert8To16(PIX *pixs, l_int32 leftshift) { l_int32 i, j, w, h, d, wplt, wpld, val; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; PROCNAME("pixConvert8To16"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (leftshift < 0 || leftshift > 8) return (PIX *)ERROR_PTR("leftshift not in [0 ... 8]", procName, NULL); if (pixGetColormap(pixs) != NULL) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixt = pixClone(pixs); pixd = pixCreate(w, h, 16); pixCopyResolution(pixd, pixs); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); if (leftshift == 8) val = val | (val << leftshift); else val <<= leftshift; SET_DATA_TWO_BYTES(lined, j, val); } } pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 1 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvertTo1() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * threshold (for final binarization, relative to 8 bpp) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This is a top-level function, with simple default values * used in pixConvertTo8() if unpacking is necessary. * (2) Any existing colormap is removed. * (3) If the input image has 1 bpp and no colormap, the operation is * lossless and a copy is returned. */ PIX * pixConvertTo1(PIX *pixs, l_int32 threshold) { l_int32 d, color0, color1, rval, gval, bval; PIX *pixg, *pixd; PIXCMAP *cmap; PROCNAME("pixConvertTo1"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", procName, NULL); cmap = pixGetColormap(pixs); if (d == 1) { if (!cmap) { return pixCopy(NULL, pixs); } else { /* strip the colormap off, and invert if reasonable for standard binary photometry. */ pixcmapGetColor(cmap, 0, &rval, &gval, &bval); color0 = rval + gval + bval; pixcmapGetColor(cmap, 1, &rval, &gval, &bval); color1 = rval + gval + bval; pixd = pixCopy(NULL, pixs); pixDestroyColormap(pixd); if (color1 > color0) pixInvert(pixd, pixd); return pixd; } } /* For all other depths, use 8 bpp as an intermediary */ pixg = pixConvertTo8(pixs, FALSE); pixd = pixThresholdToBinary(pixg, threshold); pixDestroy(&pixg); return pixd; } /*! * pixConvertTo1BySampling() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * factor (submsampling factor; integer >= 1) * threshold (for final binarization, relative to 8 bpp) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This is a fast, quick/dirty, top-level converter. * (2) See pixConvertTo1() for default values. */ PIX * pixConvertTo1BySampling(PIX *pixs, l_int32 factor, l_int32 threshold) { l_float32 scalefactor; PIX *pixt, *pixd; PROCNAME("pixConvertTo1BySampling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); scalefactor = 1. / (l_float32)factor; pixt = pixScaleBySampling(pixs, scalefactor, scalefactor); pixd = pixConvertTo1(pixt, threshold); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 8 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvertTo8() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * cmapflag (TRUE if pixd is to have a colormap; FALSE otherwise) * Return: pixd (8 bpp), or null on error * * Notes: * (1) This is a top-level function, with simple default values * for unpacking. * (2) The result, pixd, is made with a colormap if specified. * It is always a new image -- never a clone. For example, * if d == 8, and cmapflag matches the existence of a cmap * in pixs, the operation is lossless and it returns a copy. * (3) The default values used are: * - 1 bpp: val0 = 255, val1 = 0 * - 2 bpp: 4 bpp: even increments over dynamic range * - 8 bpp: lossless if cmap matches cmapflag * - 16 bpp: use most significant byte * (4) If 32 bpp RGB, this is converted to gray. If you want * to do color quantization, you must specify the type * explicitly, using the color quantization code. */ PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag) { l_int32 d; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixConvertTo8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", procName, NULL); if (d == 1) { if (!cmapflag) { return pixConvert1To8(NULL, pixs, 255, 0); } else { pixd = pixConvert1To8(NULL, pixs, 0, 1); cmap = pixcmapCreate(8); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); return pixd; } } else if (d == 2) { return pixConvert2To8(pixs, 0, 85, 170, 255, cmapflag); } else if (d == 4) { return pixConvert4To8(pixs, cmapflag); } else if (d == 8) { cmap = pixGetColormap(pixs); if ((cmap && cmapflag) || (!cmap && !cmapflag)) { return pixCopy(NULL, pixs); } else if (cmap) { /* !cmapflag */ return pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); } else { /* !cmap && cmapflag; add colormap to pixd */ pixd = pixCopy(NULL, pixs); pixAddGrayColormap8(pixd); return pixd; } } else if (d == 16) { pixd = pixConvert16To8(pixs, L_MS_BYTE); if (cmapflag) pixAddGrayColormap8(pixd); return pixd; } else { /* d == 32 */ pixd = pixConvertRGBToLuminance(pixs); if (cmapflag) pixAddGrayColormap8(pixd); return pixd; } } /*! * pixConvertTo8BySampling() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * factor (submsampling factor; integer >= 1) * cmapflag (TRUE if pixd is to have a colormap; FALSE otherwise) * Return: pixd (8 bpp), or null on error * * Notes: * (1) This is a fast, quick/dirty, top-level converter. * (2) See pixConvertTo8() for default values. */ PIX * pixConvertTo8BySampling(PIX *pixs, l_int32 factor, l_int32 cmapflag) { l_float32 scalefactor; PIX *pixt, *pixd; PROCNAME("pixConvertTo8BySampling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); scalefactor = 1. / (l_float32)factor; pixt = pixScaleBySampling(pixs, scalefactor, scalefactor); pixd = pixConvertTo8(pixt, cmapflag); pixDestroy(&pixt); return pixd; } /*! * pixConvertTo8Color() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * dither (1 to dither if necessary; 0 otherwise) * Return: pixd (8 bpp, cmapped), or null on error * * Notes: * (1) This is a top-level function, with simple default values * for unpacking. * (2) The result, pixd, is always made with a colormap. * (3) If d == 8, the operation is lossless and it returns a copy. * (4) The default values used for increasing depth are: * - 1 bpp: val0 = 255, val1 = 0 * - 2 bpp: 4 bpp: even increments over dynamic range * (5) For 16 bpp, use the most significant byte. * (6) For 32 bpp RGB, use octcube quantization with optional dithering. */ PIX * pixConvertTo8Color(PIX *pixs, l_int32 dither) { l_int32 d; PROCNAME("pixConvertTo8Color"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not {1,2,4,8,16,32}", procName, NULL); if (d != 32) return pixConvertTo8(pixs, 1); return pixConvertRGBToColormap(pixs, dither); } /*---------------------------------------------------------------------------* * Top-level conversion to 16 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvertTo16() * * Input: pixs (1, 8 bpp) * Return: pixd (16 bpp), or null on error * * Usage: Top-level function, with simple default values for unpacking. * 1 bpp: val0 = 0xffff, val1 = 0 * 8 bpp: replicates the 8 bit value in both the MSB and LSB * of the 16 bit pixel. */ PIX * pixConvertTo16(PIX *pixs) { l_int32 d; PROCNAME("pixConvertTo16"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d == 1) return pixConvert1To16(NULL, pixs, 0xffff, 0); else if (d == 8) return pixConvert8To16(pixs, 8); else return (PIX *)ERROR_PTR("src depth not 1 or 8 bpp", procName, NULL); } /*---------------------------------------------------------------------------* * Top-level conversion to 32 bpp * *---------------------------------------------------------------------------*/ /*! * pixConvertTo32() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * Return: pixd (32 bpp), or null on error * * Usage: Top-level function, with simple default values for unpacking. * 1 bpp: val0 = 255, val1 = 0 * and then replication into R, G and B components * 2 bpp: if colormapped, use the colormap values; otherwise, * use val0 = 0, val1 = 0x55, val2 = 0xaa, val3 = 255 * and replicate gray into R, G and B components * 4 bpp: if colormapped, use the colormap values; otherwise, * replicate 2 nybs into a byte, and then into R,G,B components * 8 bpp: if colormapped, use the colormap values; otherwise, * replicate gray values into R, G and B components * 16 bpp: replicate MSB into R, G and B components * 24 bpp: unpack the pixels, maintaining word alignment on each scanline * 32 bpp: makes a copy * * Notes: * (1) Never returns a clone of pixs. * (2) Implicit assumption about RGB component ordering. */ PIX * pixConvertTo32(PIX *pixs) { l_int32 d; PIX *pixt, *pixd; PROCNAME("pixConvertTo32"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d == 1) { return pixConvert1To32(NULL, pixs, 0xffffffff, 0); } else if (d == 2) { pixt = pixConvert2To8(pixs, 0, 85, 170, 255, TRUE); pixd = pixConvert8To32(pixt); pixDestroy(&pixt); return pixd; } else if (d == 4) { pixt = pixConvert4To8(pixs, TRUE); pixd = pixConvert8To32(pixt); pixDestroy(&pixt); return pixd; } else if (d == 8) { return pixConvert8To32(pixs); } else if (d == 16) { pixt = pixConvert16To8(pixs, L_MS_BYTE); pixd = pixConvert8To32(pixt); pixDestroy(&pixt); return pixd; } else if (d == 24) { return pixConvert24To32(pixs); } else if (d == 32) { return pixCopy(NULL, pixs); } else { return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8, 16, 32 bpp", procName, NULL); } } /*! * pixConvertTo32BySampling() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * factor (submsampling factor; integer >= 1) * Return: pixd (32 bpp), or null on error * * Notes: * (1) This is a fast, quick/dirty, top-level converter. * (2) See pixConvertTo32() for default values. */ PIX * pixConvertTo32BySampling(PIX *pixs, l_int32 factor) { l_float32 scalefactor; PIX *pixt, *pixd; PROCNAME("pixConvertTo32BySampling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); scalefactor = 1. / (l_float32)factor; pixt = pixScaleBySampling(pixs, scalefactor, scalefactor); pixd = pixConvertTo32(pixt); pixDestroy(&pixt); return pixd; } /*! * pixConvert8To32() * * Input: pix (8 bpp) * Return: 32 bpp rgb pix, or null on error * * Notes: * (1) If there is no colormap, replicates the gray value * into the 3 MSB of the dest pixel. * (2) Implicit assumption about RGB component ordering. */ PIX * pixConvert8To32(PIX *pixs) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; l_uint32 *tab; PIX *pixd; PROCNAME("pixConvert8To32"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); /* Replication table */ if ((tab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 256; i++) tab[i] = (i << 24) | (i << 16) | (i << 8); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); lined[j] = tab[val]; } } FREE(tab); return pixd; } /*---------------------------------------------------------------------------* * Top-level conversion to 8 or 32 bpp, without colormap * *---------------------------------------------------------------------------*/ /*! * pixConvertTo8Or32() * * Input: pixs (1, 2, 4, 8, 16, with or without colormap; or 32 bpp rgb) * copyflag (use 0 to return clone if pixs does not need to * be changed; 1 to return a copy in those situations) * warnflag (1 to issue warning if colormap is removed; else 0) * Return: pixd (8 bpp grayscale or 32 bpp rgb), or null on error * * Notes: * (1) If there is a colormap, the colormap is removed to 8 or 32 bpp, * depending on whether the colors in the colormap are all gray. * (2) If the input is either rgb or 8 bpp without a colormap, * this returns either a clone or a copy, depending on @copyflag. * (3) Otherwise, the pix is converted to 8 bpp grayscale. * In all cases, pixd does not have a colormap. */ PIX * pixConvertTo8Or32(PIX *pixs, l_int32 copyflag, l_int32 warnflag) { l_int32 d; PIX *pixd; PROCNAME("pixConvertTo8Or32"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (pixGetColormap(pixs)) { if (warnflag) L_WARNING("pix has colormap; removing\n", procName); pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); } else if (d == 8 || d == 32) { if (copyflag == 0) pixd = pixClone(pixs); else pixd = pixCopy(NULL, pixs); } else { pixd = pixConvertTo8(pixs, 0); } /* Sanity check on result */ d = pixGetDepth(pixd); if (d != 8 && d != 32) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, NULL); } return pixd; } /*---------------------------------------------------------------------------* * Conversion between 24 bpp and 32 bpp rgb * *---------------------------------------------------------------------------*/ /*! * pixConvert24To32() * * Input: pixs (24 bpp rgb) * Return: pixd (32 bpp rgb), or null on error * * Notes: * (1) 24 bpp rgb pix are not supported in leptonica, except for a small * number of formatted write operations. The data is a byte array, * with pixels in order r,g,b, and padded to 32 bit boundaries * in each line. * (2) Because 24 bpp rgb pix are conveniently generated by programs * such as xpdf (which has SplashBitmaps that store the raster * data in consecutive 24-bit rgb pixels), it is useful to provide * 24 bpp pix that simply incorporate that data. The only things * we can do with these are: * (a) write them to file in png, jpeg, tiff and pnm * (b) interconvert between 24 and 32 bpp in memory (for testing). */ PIX * pixConvert24To32(PIX *pixs) { l_uint8 *lines; l_int32 w, h, d, i, j, wpls, wpld, rval, gval, bval; l_uint32 pixel; l_uint32 *datas, *datad, *lined; PIX *pixd; PROCNAME("pixConvert24to32"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 24) return (PIX *)ERROR_PTR("pixs not 24 bpp", procName, NULL); pixd = pixCreateNoInit(w, h, 32); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = (l_uint8 *)(datas + i * wpls); lined = datad + i * wpld; for (j = 0; j < w; j++) { rval = *lines++; gval = *lines++; bval = *lines++; composeRGBPixel(rval, gval, bval, &pixel); lined[j] = pixel; } } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * pixConvert32To24() * * Input: pixs (32 bpp rgb) * Return: pixd (24 bpp rgb), or null on error * * Notes: * (1) See pixconvert24To32(). */ PIX * pixConvert32To24(PIX *pixs) { l_uint8 *rgbdata8; l_int32 w, h, d, i, j, wpls, wpld, rval, gval, bval; l_uint32 *datas, *lines, *rgbdata; PIX *pixd; PROCNAME("pixConvert32to24"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateNoInit(w, h, 24); rgbdata = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; rgbdata8 = (l_uint8 *)(rgbdata + i * wpld); for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); *rgbdata8++ = rval; *rgbdata8++ = gval; *rgbdata8++ = bval; } } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); return pixd; } /*---------------------------------------------------------------------------* * Removal of alpha component by blending with white background * *---------------------------------------------------------------------------*/ /*! * pixRemoveAlpha() * * Input: pixs (any depth) * Return: pixd (if 32 bpp rgba, pixs blended over a white background; * a clone of pixs otherwise), and null on error * * Notes: * (1) This is a wrapper on pixAlphaBlendUniform() */ PIX * pixRemoveAlpha(PIX *pixs) { PROCNAME("pixRemoveAlpha"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) return pixAlphaBlendUniform(pixs, 0xffffff00); else return pixClone(pixs); } /*---------------------------------------------------------------------------* * Lossless depth conversion (unpacking) * *---------------------------------------------------------------------------*/ /*! * pixConvertLossless() * * Input: pixs (1, 2, 4, 8 bpp, not cmapped) * d (destination depth: 2, 4 or 8) * Return: pixd (2, 4 or 8 bpp), or null on error * * Notes: * (1) This is a lossless unpacking (depth-increasing) * conversion. If ds is the depth of pixs, then * - if d < ds, returns NULL * - if d == ds, returns a copy * - if d > ds, does the unpacking conversion * (2) If pixs has a colormap, this is an error. */ PIX * pixConvertLossless(PIX *pixs, l_int32 d) { l_int32 w, h, ds, wpls, wpld, i, j, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixConvertLossless"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("invalid dest depth", procName, NULL); pixGetDimensions(pixs, &w, &h, &ds); if (d < ds) return (PIX *)ERROR_PTR("depth > d", procName, NULL); else if (d == ds) return pixCopy(NULL, pixs); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); /* Unpack the bits */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; switch (ds) { case 1: for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if (d == 8) SET_DATA_BYTE(lined, j, val); else if (d == 4) SET_DATA_QBIT(lined, j, val); else /* d == 2 */ SET_DATA_DIBIT(lined, j, val); } break; case 2: for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(lines, j); if (d == 8) SET_DATA_BYTE(lined, j, val); else /* d == 4 */ SET_DATA_QBIT(lined, j, val); } case 4: for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(lines, j); SET_DATA_BYTE(lined, j, val); } break; } } return pixd; } /*---------------------------------------------------------------------------* * Conversion for printing in PostScript * *---------------------------------------------------------------------------*/ /*! * pixConvertForPSWrap() * * Input: pixs (1, 2, 4, 8, 16, 32 bpp) * Return: pixd (1, 8, or 32 bpp), or null on error * * Notes: * (1) For wrapping in PostScript, we convert pixs to * 1 bpp, 8 bpp (gray) and 32 bpp (RGB color). * (2) Colormaps are removed. For pixs with colormaps, the * images are converted to either 8 bpp gray or 32 bpp * RGB, depending on whether the colormap has color content. * (3) Images without colormaps, that are not 1 bpp or 32 bpp, * are converted to 8 bpp gray. */ PIX * pixConvertForPSWrap(PIX *pixs) { l_int32 d; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixConvertForPSWrap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); switch (d) { case 1: case 32: pixd = pixClone(pixs); break; case 2: if (cmap) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixd = pixConvert2To8(pixs, 0, 0x55, 0xaa, 0xff, FALSE); break; case 4: if (cmap) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixd = pixConvert4To8(pixs, FALSE); break; case 8: pixd = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); break; case 16: pixd = pixConvert16To8(pixs, L_MS_BYTE); break; default: fprintf(stderr, "depth not in {1, 2, 4, 8, 16, 32}"); return NULL; } return pixd; } /*---------------------------------------------------------------------------* * Scaling conversion to subpixel RGB * *---------------------------------------------------------------------------*/ /*! * pixConvertToSubpixelRGB() * * Input: pixs (8 bpp grayscale, 32 bpp rgb, or colormapped) * scalex, scaley (anisotropic scaling permitted between * source and destination) * order (of subpixel rgb color components in composition of pixd: * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR) * * Return: pixd (32 bpp), or null on error * * Notes: * (1) If pixs has a colormap, it is removed based on its contents * to either 8 bpp gray or rgb. * (2) For horizontal subpixel splitting, the input image * is rescaled by @scaley vertically and by 3.0 times * @scalex horizontally. Then each horizontal triplet * of pixels is mapped back to a single rgb pixel, with the * r, g and b values being assigned based on the pixel triplet. * For gray triplets, the r, g, and b values are set equal to * the three gray values. For color triplets, the r, g and b * values are set equal to the components from the appropriate * subpixel. Vertical subpixel splitting is handled similarly. * (3) See pixConvertGrayToSubpixelRGB() and * pixConvertColorToSubpixelRGB() for further details. */ PIX * pixConvertToSubpixelRGB(PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order) { l_int32 d; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixConvertToSubpixelRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return (PIX *)ERROR_PTR("pix not 8 or 32 bpp and not cmapped", procName, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factors must be > 0", procName, NULL); if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) return (PIX *)ERROR_PTR("invalid subpixel order", procName, NULL); if ((pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); d = pixGetDepth(pixt); pixd = NULL; if (d == 8) pixd = pixConvertGrayToSubpixelRGB(pixt, scalex, scaley, order); else if (d == 32) pixd = pixConvertColorToSubpixelRGB(pixt, scalex, scaley, order); else L_ERROR("invalid depth %d\n", procName, d); pixDestroy(&pixt); return pixd; } /*! * pixConvertGrayToSubpixelRGB() * * Input: pixs (8 bpp or colormapped) * scalex, scaley * order (of subpixel rgb color components in composition of pixd: * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR) * * Return: pixd (32 bpp), or null on error * * Notes: * (1) If pixs has a colormap, it is removed to 8 bpp. * (2) For horizontal subpixel splitting, the input gray image * is rescaled by @scaley vertically and by 3.0 times * @scalex horizontally. Then each horizontal triplet * of pixels is mapped back to a single rgb pixel, with the * r, g and b values being assigned from the triplet of gray values. * Similar operations are used for vertical subpixel splitting. * (3) This is a form of subpixel rendering that tends to give the * resulting text a sharper and somewhat chromatic display. * For horizontal subpixel splitting, the observable difference * between @order=L_SUBPIXEL_ORDER_RGB and * @order=L_SUBPIXEL_ORDER_BGR is reduced by optical diffusers * in the display that make the pixel color appear to emerge * from the entire pixel. */ PIX * pixConvertGrayToSubpixelRGB(PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order) { l_int32 w, h, d, wd, hd, wplt, wpld, i, j, rval, gval, bval, direction; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt1, *pixt2, *pixd; PIXCMAP *cmap; PROCNAME("pixConvertGrayToSubpixelRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && !cmap) return (PIX *)ERROR_PTR("pix not 8 bpp & not cmapped", procName, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factors must be > 0", procName, NULL); if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) return (PIX *)ERROR_PTR("invalid subpixel order", procName, NULL); direction = (order == L_SUBPIXEL_ORDER_RGB || order == L_SUBPIXEL_ORDER_BGR) ? L_HORIZ : L_VERT; pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); if (direction == L_HORIZ) pixt2 = pixScale(pixt1, 3.0 * scalex, scaley); else /* L_VERT */ pixt2 = pixScale(pixt1, scalex, 3.0 * scaley); pixGetDimensions(pixt2, &w, &h, NULL); wd = (direction == L_HORIZ) ? w / 3 : w; hd = (direction == L_VERT) ? h / 3 : h; pixd = pixCreate(wd, hd, 32); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datat = pixGetData(pixt2); wplt = pixGetWpl(pixt2); if (direction == L_HORIZ) { for (i = 0; i < hd; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { rval = GET_DATA_BYTE(linet, 3 * j); gval = GET_DATA_BYTE(linet, 3 * j + 1); bval = GET_DATA_BYTE(linet, 3 * j + 2); if (order == L_SUBPIXEL_ORDER_RGB) composeRGBPixel(rval, gval, bval, &lined[j]); else /* order BGR */ composeRGBPixel(bval, gval, rval, &lined[j]); } } } else { /* L_VERT */ for (i = 0; i < hd; i++) { linet = datat + 3 * i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { rval = GET_DATA_BYTE(linet, j); gval = GET_DATA_BYTE(linet + wplt, j); bval = GET_DATA_BYTE(linet + 2 * wplt, j); if (order == L_SUBPIXEL_ORDER_VRGB) composeRGBPixel(rval, gval, bval, &lined[j]); else /* order VBGR */ composeRGBPixel(bval, gval, rval, &lined[j]); } } } pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixConvertColorToSubpixelRGB() * * Input: pixs (32 bpp or colormapped) * scalex, scaley * order (of subpixel rgb color components in composition of pixd: * L_SUBPIXEL_ORDER_RGB, L_SUBPIXEL_ORDER_BGR, * L_SUBPIXEL_ORDER_VRGB, L_SUBPIXEL_ORDER_VBGR) * * Return: pixd (32 bpp), or null on error * * Notes: * (1) If pixs has a colormap, it is removed to 32 bpp rgb. * If the colormap has no color, pixConvertGrayToSubpixelRGB() * should be called instead, because it will give the same result * more efficiently. The function pixConvertToSubpixelRGB() * will do the best thing for all cases. * (2) For horizontal subpixel splitting, the input rgb image * is rescaled by @scaley vertically and by 3.0 times * @scalex horizontally. Then for each horizontal triplet * of pixels, the r component of the final pixel is selected * from the r component of the appropriate pixel in the triplet, * and likewise for g and b. Vertical subpixel splitting is * handled similarly. */ PIX * pixConvertColorToSubpixelRGB(PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order) { l_int32 w, h, d, wd, hd, wplt, wpld, i, j, rval, gval, bval, direction; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt1, *pixt2, *pixd; PIXCMAP *cmap; PROCNAME("pixConvertColorToSubpixelRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 32 && !cmap) return (PIX *)ERROR_PTR("pix not 32 bpp & not cmapped", procName, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factors must be > 0", procName, NULL); if (order != L_SUBPIXEL_ORDER_RGB && order != L_SUBPIXEL_ORDER_BGR && order != L_SUBPIXEL_ORDER_VRGB && order != L_SUBPIXEL_ORDER_VBGR) return (PIX *)ERROR_PTR("invalid subpixel order", procName, NULL); direction = (order == L_SUBPIXEL_ORDER_RGB || order == L_SUBPIXEL_ORDER_BGR) ? L_HORIZ : L_VERT; pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); if (direction == L_HORIZ) pixt2 = pixScale(pixt1, 3.0 * scalex, scaley); else /* L_VERT */ pixt2 = pixScale(pixt1, scalex, 3.0 * scaley); pixGetDimensions(pixt2, &w, &h, NULL); wd = (direction == L_HORIZ) ? w / 3 : w; hd = (direction == L_VERT) ? h / 3 : h; pixd = pixCreate(wd, hd, 32); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datat = pixGetData(pixt2); wplt = pixGetWpl(pixt2); if (direction == L_HORIZ) { for (i = 0; i < hd; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { if (order == L_SUBPIXEL_ORDER_RGB) { extractRGBValues(linet[3 * j], &rval, NULL, NULL); extractRGBValues(linet[3 * j + 1], NULL, &gval, NULL); extractRGBValues(linet[3 * j + 2], NULL, NULL, &bval); } else { /* order BGR */ extractRGBValues(linet[3 * j], NULL, NULL, &bval); extractRGBValues(linet[3 * j + 1], NULL, &gval, NULL); extractRGBValues(linet[3 * j + 2], &rval, NULL, NULL); } composeRGBPixel(rval, gval, bval, &lined[j]); } } } else { /* L_VERT */ for (i = 0; i < hd; i++) { linet = datat + 3 * i * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { if (order == L_SUBPIXEL_ORDER_VRGB) { extractRGBValues(linet[j], &rval, NULL, NULL); extractRGBValues((linet + wplt)[j], NULL, &gval, NULL); extractRGBValues((linet + 2 * wplt)[j], NULL, NULL, &bval); } else { /* order VBGR */ extractRGBValues(linet[j], NULL, NULL, &bval); extractRGBValues((linet + wplt)[j], NULL, &gval, NULL); extractRGBValues((linet + 2 * wplt)[j], &rval, NULL, NULL); } composeRGBPixel(rval, gval, bval, &lined[j]); } } } if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } leptonica-1.70/src/Makefile.in0000644000175000017500000011325512274452340014353 0ustar dandan# Makefile.in generated by automake 1.11.3 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 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@ 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@ noinst_PROGRAMS = xtractprotos$(EXEEXT) subdir = src DIST_COMMON = $(pkginclude_HEADERS) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(srcdir)/endianness.h.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 = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config_auto.h CONFIG_CLEAN_FILES = endianness.h 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)" "$(DESTDIR)$(pkgincludedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = liblept_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_liblept_la_OBJECTS = adaptmap.lo affine.lo affinecompose.lo \ arrayaccess.lo bardecode.lo baseline.lo bbuffer.lo \ bilateral.lo bilinear.lo binarize.lo binexpand.lo binreduce.lo \ blend.lo bmf.lo bmpio.lo bmpiostub.lo boxbasic.lo boxfunc1.lo \ boxfunc2.lo boxfunc3.lo boxfunc4.lo bytearray.lo ccbord.lo \ ccthin.lo classapp.lo colorcontent.lo coloring.lo colormap.lo \ colormorph.lo colorquant1.lo colorquant2.lo colorseg.lo \ colorspace.lo compare.lo conncomp.lo convertfiles.lo \ convolve.lo convolvelow.lo correlscore.lo dewarp1.lo \ dewarp2.lo dewarp3.lo dewarp4.lo dnabasic.lo dwacomb.2.lo \ dwacomblow.2.lo edge.lo enhance.lo fhmtauto.lo fhmtgen.1.lo \ fhmtgenlow.1.lo finditalic.lo flipdetect.lo fliphmtgen.lo \ fmorphauto.lo fmorphgen.1.lo fmorphgenlow.1.lo fpix1.lo \ fpix2.lo gifio.lo gifiostub.lo gplot.lo graphics.lo \ graymorph.lo graymorphlow.lo grayquant.lo grayquantlow.lo \ heap.lo jbclass.lo jp2kio.lo jp2kiostub.lo jpegio.lo \ jpegiostub.lo kernel.lo leptwin.lo libversions.lo list.lo \ maze.lo morph.lo morphapp.lo morphdwa.lo morphseq.lo \ numabasic.lo numafunc1.lo numafunc2.lo pageseg.lo paintcmap.lo \ parseprotos.lo partition.lo pdfio.lo pdfiostub.lo pix1.lo \ pix2.lo pix3.lo pix4.lo pix5.lo pixabasic.lo pixacc.lo \ pixafunc1.lo pixafunc2.lo pixalloc.lo pixarith.lo pixcomp.lo \ pixconv.lo pixlabel.lo pixtiling.lo pngio.lo pngiostub.lo \ pnmio.lo pnmiostub.lo projective.lo psio1.lo psio1stub.lo \ psio2.lo psio2stub.lo ptabasic.lo ptafunc1.lo ptra.lo \ quadtree.lo queue.lo rank.lo readbarcode.lo readfile.lo \ recogbasic.lo recogdid.lo recogident.lo recogtrain.lo \ regutils.lo rop.lo ropiplow.lo roplow.lo rotate.lo rotateam.lo \ rotateamlow.lo rotateorth.lo rotateorthlow.lo rotateshear.lo \ runlength.lo sarray.lo scale.lo scalelow.lo seedfill.lo \ seedfilllow.lo sel1.lo sel2.lo selgen.lo shear.lo skew.lo \ spixio.lo stack.lo sudoku.lo textops.lo tiffio.lo \ tiffiostub.lo utils.lo viewfiles.lo warper.lo watershed.lo \ webpio.lo webpiostub.lo writefile.lo zlibmem.lo zlibmemstub.lo liblept_la_OBJECTS = $(am_liblept_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent liblept_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(liblept_la_LDFLAGS) $(LDFLAGS) -o $@ PROGRAMS = $(noinst_PROGRAMS) xtractprotos_SOURCES = xtractprotos.c xtractprotos_OBJECTS = xtractprotos.$(OBJEXT) xtractprotos_LDADD = $(LDADD) xtractprotos_DEPENDENCIES = liblept.la DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles 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_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ 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_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; SOURCES = $(liblept_la_SOURCES) xtractprotos.c DIST_SOURCES = $(liblept_la_SOURCES) xtractprotos.c HEADERS = $(pkginclude_HEADERS) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ 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@ ENDIANNESS = @ENDIANNESS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GDI_LIBS = @GDI_LIBS@ GIFLIB_LIBS = @GIFLIB_LIBS@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ JPEG_LIBS = @JPEG_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBM = @LIBM@ LIBOBJS = @LIBOBJS@ LIBPNG_LIBS = @LIBPNG_LIBS@ LIBS = @LIBS@ LIBTIFF_LIBS = @LIBTIFF_LIBS@ LIBTOOL = @LIBTOOL@ LIBWEBP_LIBS = @LIBWEBP_LIBS@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ 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@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ ZLIB_LIBS = @ZLIB_LIBS@ 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_DUMPBIN = @ac_ct_DUMPBIN@ 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@ 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@ 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@ AM_CFLAGS = $(DEBUG_FLAGS) lib_LTLIBRARIES = liblept.la liblept_la_LIBADD = $(LIBM) $(ZLIB_LIBS) $(LIBPNG_LIBS) $(JPEG_LIBS) $(GIFLIB_LIBS) $(LIBTIFF_LIBS) $(LIBWEBP_LIBS) $(GDI_LIBS) liblept_la_LDFLAGS = -no-undefined -version-info 4:1:0 liblept_la_SOURCES = adaptmap.c affine.c \ affinecompose.c arrayaccess.c \ bardecode.c baseline.c bbuffer.c \ bilateral.c bilinear.c binarize.c \ binexpand.c binreduce.c \ blend.c bmf.c bmpio.c bmpiostub.c \ boxbasic.c boxfunc1.c boxfunc2.c boxfunc3.c boxfunc4.c \ bytearray.c ccbord.c ccthin.c classapp.c \ colorcontent.c coloring.c \ colormap.c colormorph.c \ colorquant1.c colorquant2.c \ colorseg.c colorspace.c \ compare.c conncomp.c convertfiles.c \ convolve.c convolvelow.c correlscore.c \ dewarp1.c dewarp2.c dewarp3.c dewarp4.c \ dnabasic.c dwacomb.2.c dwacomblow.2.c \ edge.c enhance.c \ fhmtauto.c fhmtgen.1.c fhmtgenlow.1.c \ finditalic.c flipdetect.c fliphmtgen.c \ fmorphauto.c fmorphgen.1.c fmorphgenlow.1.c \ fpix1.c fpix2.c gifio.c gifiostub.c \ gplot.c graphics.c graymorph.c graymorphlow.c \ grayquant.c grayquantlow.c heap.c jbclass.c \ jp2kio.c jp2kiostub.c jpegio.c jpegiostub.c \ kernel.c leptwin.c libversions.c list.c maze.c \ morph.c morphapp.c morphdwa.c morphseq.c \ numabasic.c numafunc1.c numafunc2.c \ pageseg.c paintcmap.c \ parseprotos.c partition.c \ pdfio.c pdfiostub.c \ pix1.c pix2.c pix3.c pix4.c pix5.c \ pixabasic.c pixacc.c pixafunc1.c pixafunc2.c \ pixalloc.c pixarith.c pixcomp.c pixconv.c \ pixlabel.c pixtiling.c pngio.c pngiostub.c \ pnmio.c pnmiostub.c projective.c \ psio1.c psio1stub.c psio2.c psio2stub.c \ ptabasic.c ptafunc1.c ptra.c \ quadtree.c queue.c rank.c \ readbarcode.c readfile.c \ recogbasic.c recogdid.c recogident.c \ recogtrain.c regutils.c \ rop.c ropiplow.c roplow.c \ rotate.c rotateam.c rotateamlow.c \ rotateorth.c rotateorthlow.c rotateshear.c \ runlength.c sarray.c \ scale.c scalelow.c \ seedfill.c seedfilllow.c \ sel1.c sel2.c selgen.c \ shear.c skew.c spixio.c \ stack.c sudoku.c textops.c \ tiffio.c tiffiostub.c \ utils.c viewfiles.c \ warper.c watershed.c \ webpio.c webpiostub.c \ writefile.c zlibmem.c zlibmemstub.c pkginclude_HEADERS = allheaders.h alltypes.h \ array.h arrayaccess.h bbuffer.h bilateral.h bmf.h bmp.h \ ccbord.h dewarp.h endianness.h environ.h \ gplot.h heap.h imageio.h jbclass.h \ leptwin.h list.h \ morph.h pix.h ptra.h queue.h readbarcode.h \ recog.h regutils.h stack.h sudoku.h watershed.h LDADD = liblept.la EXTRA_DIST = arrayaccess.h.vc \ endiantest.c endianness.h.dist \ hmttemplate1.txt hmttemplate2.txt \ leptonica-license.txt \ morphtemplate1.txt morphtemplate2.txt all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(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) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/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: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): endianness.h: $(top_builddir)/config.status $(srcdir)/endianness.h.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)" @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 " $(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)'; for p in $$list; do \ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \ test "$$dir" != "$$p" || dir=.; \ echo "rm -f \"$${dir}/so_locations\""; \ rm -f "$${dir}/so_locations"; \ done liblept.la: $(liblept_la_OBJECTS) $(liblept_la_DEPENDENCIES) $(EXTRA_liblept_la_DEPENDENCIES) $(AM_V_CCLD)$(liblept_la_LINK) -rpath $(libdir) $(liblept_la_OBJECTS) $(liblept_la_LIBADD) $(LIBS) clean-noinstPROGRAMS: @list='$(noinst_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 xtractprotos$(EXEEXT): $(xtractprotos_OBJECTS) $(xtractprotos_DEPENDENCIES) $(EXTRA_xtractprotos_DEPENDENCIES) @rm -f xtractprotos$(EXEEXT) $(AM_V_CCLD)$(LINK) $(xtractprotos_OBJECTS) $(xtractprotos_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adaptmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/affine.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/affinecompose.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arrayaccess.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bardecode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/baseline.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bbuffer.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bilateral.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bilinear.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binarize.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binexpand.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/binreduce.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blend.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmf.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmpio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bmpiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxbasic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxfunc1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxfunc2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxfunc3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/boxfunc4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bytearray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccbord.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccthin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/classapp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorcontent.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/coloring.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colormap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colormorph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorquant1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorquant2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorseg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/colorspace.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compare.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conncomp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convertfiles.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolve.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convolvelow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/correlscore.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarp1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarp2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarp3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dewarp4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dnabasic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwacomb.2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dwacomblow.2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/edge.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/enhance.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fhmtauto.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fhmtgen.1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fhmtgenlow.1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/finditalic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/flipdetect.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fliphmtgen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmorphauto.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmorphgen.1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmorphgenlow.1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpix1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fpix2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gifio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gifiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gplot.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graphics.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graymorph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/graymorphlow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grayquant.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grayquantlow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/heap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jbclass.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jp2kio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jp2kiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpegio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jpegiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/leptwin.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libversions.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/maze.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/morph.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/morphapp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/morphdwa.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/morphseq.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numabasic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numafunc1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numafunc2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pageseg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paintcmap.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parseprotos.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/partition.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdfio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pdfiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pix1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pix2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pix3.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pix4.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pix5.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixabasic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixacc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixafunc1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixafunc2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixalloc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixarith.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixcomp.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixconv.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixlabel.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pixtiling.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pngiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnmio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pnmiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/projective.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psio1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psio1stub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psio2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/psio2stub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptabasic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptafunc1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptra.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quadtree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/queue.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rank.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readbarcode.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readfile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recogbasic.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recogdid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recogident.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recogtrain.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regutils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rop.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ropiplow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/roplow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotate.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotateam.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotateamlow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotateorth.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotateorthlow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rotateshear.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runlength.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sarray.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scale.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scalelow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seedfill.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seedfilllow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sel1.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sel2.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selgen.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shear.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/skew.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/spixio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stack.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sudoku.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textops.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tiffiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/viewfiles.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/warper.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/watershed.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webpio.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/webpiostub.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/writefile.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xtractprotos.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zlibmem.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zlibmemstub.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.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 install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) test -z "$(pkgincludedir)" || $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ 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)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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 CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) 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; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ 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" 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 "$(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 $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(HEADERS) installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(pkgincludedir)"; 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 \ clean-noinstPROGRAMS 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 html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS 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 -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-libLTLIBRARIES uninstall-pkgincludeHEADERS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool clean-noinstPROGRAMS ctags \ dist-hook 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-pkgincludeHEADERS 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-libLTLIBRARIES \ uninstall-pkgincludeHEADERS allheaders: $(liblept_la_SOURCES) @test -x xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -prestring=LEPT_DLL -protos=inline $(liblept_la_SOURCES) dist-hook: cp "$(distdir)"/endianness.h{.dist,} # 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: leptonica-1.70/src/bytearray.c0000664000175000017500000004022512266012101014436 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bytearray.c * * Functions for handling byte arrays, in analogy with C++ 'strings' * * Creation, copy, clone, destruction * L_BYTEA *l_byteaCreate() * L_BYTEA *l_byteaInitFromMem() * L_BYTEA *l_byteaInitFromFile() * L_BYTEA *l_byteaInitFromStream() * L_BYTEA *l_byteaCopy() * L_BYTEA *l_byteaClone() * void l_byteaDestroy() * * Accessors * size_t l_byteaGetSize() * l_uint8 *l_byteaGetData() * l_uint8 *l_byteaCopyData() * * Appending * l_int32 l_byteaAppendData() * l_int32 l_byteaAppendString() * static l_int32 l_byteaExtendArrayToSize() * * Join/Split * l_int32 l_byteaJoin() * l_int32 l_byteaSplit() * * Search * l_int32 l_byteaFindEachSequence() * * Output to file * l_int32 l_byteaWrite() * l_int32 l_byteaWriteStream() * * The internal data array is always null-terminated, for ease of use * in the event that it is an ascii string without null bytes. */ #include #include "allheaders.h" static const l_int32 INITIAL_ARRAYSIZE = 200; /* n'import quoi */ /* Static function */ static l_int32 l_byteaExtendArrayToSize(L_BYTEA *ba, size_t size); /*---------------------------------------------------------------------* * Creation, copy, clone, destruction * *---------------------------------------------------------------------*/ /*! * l_byteaCreate() * * Input: n (determines initial size of data array) * Return: l_bytea, or null on error * * Notes: * (1) The allocated array is n + 1 bytes. This allows room * for null termination. */ L_BYTEA * l_byteaCreate(size_t nbytes) { L_BYTEA *ba; PROCNAME("l_byteaCreate"); if (nbytes <= 0) nbytes = INITIAL_ARRAYSIZE; if ((ba = (L_BYTEA *)CALLOC(1, sizeof(L_BYTEA))) == NULL) return (L_BYTEA *)ERROR_PTR("ba not made", procName, NULL); if ((ba->data = (l_uint8 *)CALLOC(nbytes + 1, sizeof(l_uint8))) == NULL) return (L_BYTEA *)ERROR_PTR("ba array not made", procName, NULL); ba->nalloc = nbytes + 1; ba->refcount = 1; return ba; } /*! * l_byteaInitFromMem() * * Input: data (to be copied to the array) * size (amount of data) * Return: l_bytea, or null on error */ L_BYTEA * l_byteaInitFromMem(l_uint8 *data, size_t size) { L_BYTEA *ba; PROCNAME("l_byteaInitFromMem"); if (!data) return (L_BYTEA *)ERROR_PTR("data not defined", procName, NULL); if (size <= 0) return (L_BYTEA *)ERROR_PTR("no bytes to initialize", procName, NULL); if ((ba = l_byteaCreate(size)) == NULL) return (L_BYTEA *)ERROR_PTR("ba not made", procName, NULL); memcpy(ba->data, data, size); ba->size = size; return ba; } /*! * l_byteaInitFromFile() * * Input: fname * Return: l_bytea, or null on error */ L_BYTEA * l_byteaInitFromFile(const char *fname) { FILE *fp; L_BYTEA *ba; PROCNAME("l_byteaInitFromFile"); if (!fname) return (L_BYTEA *)ERROR_PTR("fname not defined", procName, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (L_BYTEA *)ERROR_PTR("file stream not opened", procName, NULL); if ((ba = l_byteaInitFromStream(fp)) == NULL) return (L_BYTEA *)ERROR_PTR("ba not made", procName, NULL); fclose(fp); return ba; } /*! * l_byteaInitFromStream() * * Input: stream * Return: l_bytea, or null on error */ L_BYTEA * l_byteaInitFromStream(FILE *fp) { l_uint8 *data; size_t nbytes; L_BYTEA *ba; PROCNAME("l_byteaInitFromStream"); if (!fp) return (L_BYTEA *)ERROR_PTR("stream not defined", procName, NULL); if ((data = l_binaryReadStream(fp, &nbytes)) == NULL) return (L_BYTEA *)ERROR_PTR("data not read", procName, NULL); if ((ba = l_byteaCreate(nbytes)) == NULL) return (L_BYTEA *)ERROR_PTR("ba not made", procName, NULL); memcpy(ba->data, data, nbytes); ba->size = nbytes; FREE(data); return ba; } /*! * l_byteaCopy() * * Input: bas (source lba) * copyflag (L_COPY, L_CLONE) * Return: clone or copy of bas, or null on error * * Notes: * (1) If cloning, up the refcount and return a ptr to @bas. */ L_BYTEA * l_byteaCopy(L_BYTEA *bas, l_int32 copyflag) { PROCNAME("l_byteaCopy"); if (!bas) return (L_BYTEA *)ERROR_PTR("bas not defined", procName, NULL); if (copyflag == L_CLONE) { bas->refcount++; return bas; } return l_byteaInitFromMem(bas->data, bas->size); } /*! * l_byteaDestroy() * * Input: &ba () * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the lba. * (2) Always nulls the input ptr. * (3) If the data has been previously removed, the lba will * have been nulled, so this will do nothing. */ void l_byteaDestroy(L_BYTEA **pba) { L_BYTEA *ba; PROCNAME("l_byteaDestroy"); if (pba == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((ba = *pba) == NULL) return; /* Decrement the ref count. If it is 0, destroy the lba. */ ba->refcount--; if (ba->refcount <= 0) { if (ba->data) FREE(ba->data); FREE(ba); } *pba = NULL; return; } /*---------------------------------------------------------------------* * Accessors * *---------------------------------------------------------------------*/ /*! * l_byteaGetSize() * * Input: ba * Return: size of stored byte array, or 0 on error */ size_t l_byteaGetSize(L_BYTEA *ba) { PROCNAME("l_byteaGetSize"); if (!ba) return ERROR_INT("ba not defined", procName, 0); return ba->size; } /*! * l_byteaGetData() * * Input: ba * &size ( size of data in lba) * Return: ptr to existing data array, or NULL on error * * Notes: * (1) The returned ptr is owned by @ba. Do not free it! */ l_uint8 * l_byteaGetData(L_BYTEA *ba, size_t *psize) { PROCNAME("l_byteaGetData"); if (!ba) return (l_uint8 *)ERROR_PTR("ba not defined", procName, NULL); if (!psize) return (l_uint8 *)ERROR_PTR("&size not defined", procName, NULL); *psize = ba->size; return ba->data; } /*! * l_byteaCopyData() * * Input: ba * &size ( size of data in lba) * Return: copy of data in use in the data array, or null on error. * * Notes: * (1) The returned data is owned by the caller. The input @ba * still owns the original data array. */ l_uint8 * l_byteaCopyData(L_BYTEA *ba, size_t *psize) { l_uint8 *data; PROCNAME("l_byteaCopyData"); if (!psize) return (l_uint8 *)ERROR_PTR("&size not defined", procName, NULL); *psize = 0; if (!ba) return (l_uint8 *)ERROR_PTR("ba not defined", procName, NULL); data = l_byteaGetData(ba, psize); return l_binaryCopy(data, *psize); } /*---------------------------------------------------------------------* * Appending * *---------------------------------------------------------------------*/ /*! * l_byteaAppendData() * * Input: ba * newdata (byte array to be appended) * size (size of data array) * Return: 0 if OK, 1 on error */ l_int32 l_byteaAppendData(L_BYTEA *ba, l_uint8 *newdata, size_t newbytes) { size_t size, nalloc, reqsize; PROCNAME("l_byteaAppendData"); if (!ba) return ERROR_INT("ba not defined", procName, 1); if (!newdata) return ERROR_INT("newdata not defined", procName, 1); size = l_byteaGetSize(ba); reqsize = size + newbytes + 1; nalloc = ba->nalloc; if (nalloc < reqsize) l_byteaExtendArrayToSize(ba, 2 * reqsize); memcpy((char *)(ba->data + size), (char *)newdata, newbytes); ba->size += newbytes; return 0; } /*! * l_byteaAppendString() * * Input: ba * str (null-terminated string to be appended) * Return: 0 if OK, 1 on error */ l_int32 l_byteaAppendString(L_BYTEA *ba, char *str) { size_t size, len, nalloc, reqsize; PROCNAME("l_byteaAppendString"); if (!ba) return ERROR_INT("ba not defined", procName, 1); if (!str) return ERROR_INT("str not defined", procName, 1); size = l_byteaGetSize(ba); len = strlen(str); reqsize = size + len + 1; nalloc = ba->nalloc; if (nalloc < reqsize) l_byteaExtendArrayToSize(ba, 2 * reqsize); memcpy(ba->data + size, str, len); ba->size += len; return 0; } /*! * l_byteaExtendArrayToSize() * * Input: ba * size (new size of lba data array) * Return: 0 if OK; 1 on error */ static l_int32 l_byteaExtendArrayToSize(L_BYTEA *ba, size_t size) { PROCNAME("l_byteaExtendArrayToSize"); if (!ba) return ERROR_INT("ba not defined", procName, 1); if (size > ba->nalloc) { if ((ba->data = (l_uint8 *)reallocNew((void **)&ba->data, ba->nalloc, size)) == NULL) return ERROR_INT("new array not returned", procName, 1); ba->nalloc = size; } return 0; } /*---------------------------------------------------------------------* * String join/split * *---------------------------------------------------------------------*/ /*! * l_byteaJoin() * * Input: ba1 * &ba2 (data array is added to the one in ba1, and * then ba2 is destroyed) * Return: 0 if OK, 1 on error * * Notes: * (1) It is a no-op, not an error, for @ba2 to be null. */ l_int32 l_byteaJoin(L_BYTEA *ba1, L_BYTEA **pba2) { l_uint8 *data2; size_t nbytes2; L_BYTEA *ba2; PROCNAME("l_byteaJoin"); if (!ba1) return ERROR_INT("ba1 not defined", procName, 1); if (!pba2) return ERROR_INT("&ba2 not defined", procName, 1); if ((ba2 = *pba2) == NULL) return 0; data2 = l_byteaGetData(ba2, &nbytes2); l_byteaAppendData(ba1, data2, nbytes2); l_byteaDestroy(pba2); return 0; } /*! * l_byteaSplit() * * Input: ba1 (lba to split; array bytes nulled beyond the split loc) * splitloc (location in ba1 to split; ba2 begins there) * &ba2 ( with data starting at splitloc) * Return: 0 if OK, 1 on error */ l_int32 l_byteaSplit(L_BYTEA *ba1, size_t splitloc, L_BYTEA **pba2) { l_uint8 *data1; size_t nbytes1, nbytes2; PROCNAME("l_byteaSplit"); if (!pba2) return ERROR_INT("&ba2 not defined", procName, 1); *pba2 = NULL; if (!ba1) return ERROR_INT("ba1 not defined", procName, 1); data1 = l_byteaGetData(ba1, &nbytes1); if (splitloc >= nbytes1) return ERROR_INT("splitloc invalid", procName, 1); nbytes2 = nbytes1 - splitloc; /* Make the new lba */ *pba2 = l_byteaInitFromMem(data1 + splitloc, nbytes2); /* Null the removed bytes in the input lba */ memset(data1 + splitloc, 0, nbytes2); ba1->size = splitloc; return 0; } /*---------------------------------------------------------------------* * Search * *---------------------------------------------------------------------*/ /*! * l_byteaFindEachSequence() * * Input: ba * sequence (subarray of bytes to find in data) * seqlen (length of sequence, in bytes) * &da ( byte positions of each occurrence of @sequence) * Return: 0 if OK, 1 on error */ l_int32 l_byteaFindEachSequence(L_BYTEA *ba, l_uint8 *sequence, l_int32 seqlen, L_DNA **pda) { l_uint8 *data; size_t size; PROCNAME("l_byteaFindEachSequence"); if (!pda) return ERROR_INT("&da not defined", procName, 1); *pda = NULL; if (!ba) return ERROR_INT("ba not defined", procName, 1); if (!sequence) return ERROR_INT("sequence not defined", procName, 1); data = l_byteaGetData(ba, &size); *pda = arrayFindEachSequence(data, size, sequence, seqlen); return 0; } /*---------------------------------------------------------------------* * Output to file * *---------------------------------------------------------------------*/ /*! * l_byteaWrite() * * Input: fname (output file) * ba * startloc (first byte to output) * endloc (last byte to output; use 0 to write to the * end of the data array) * Return: 0 if OK, 1 on error */ l_int32 l_byteaWrite(const char *fname, L_BYTEA *ba, size_t startloc, size_t endloc) { l_int32 ret; FILE *fp; PROCNAME("l_byteaWrite"); if (!fname) return ERROR_INT("fname not defined", procName, 1); if (!ba) return ERROR_INT("ba not defined", procName, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); ret = l_byteaWriteStream(fp, ba, startloc, endloc); fclose(fp); return ret; } /*! * l_byteaWriteStream() * * Input: stream (opened for binary write) * ba * startloc (first byte to output) * endloc (last byte to output; use 0 to write to the * end of the data array) * Return: 0 if OK, 1 on error */ l_int32 l_byteaWriteStream(FILE *fp, L_BYTEA *ba, size_t startloc, size_t endloc) { l_uint8 *data; size_t size, nbytes; PROCNAME("l_byteaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!ba) return ERROR_INT("ba not defined", procName, 1); data = l_byteaGetData(ba, &size); if (startloc >= size) return ERROR_INT("invalid startloc", procName, 1); if (endloc == 0) endloc = size - 1; nbytes = endloc - startloc + 1; if (nbytes < 1) return ERROR_INT("endloc must be >= startloc", procName, 1); fwrite(data + startloc, 1, nbytes, fp); return 0; } leptonica-1.70/src/partition.c0000644000175000017500000005616412244225434014467 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * partition.c * * Whitespace block extraction * BOXA *boxaGetWhiteblocks() * * Helpers * static PARTEL *partelCreate() * static void partelDestroy() * static l_int32 partelSetSize() * static BOXA *boxaGenerateSubboxes() * static BOX *boxaSelectPivotBox() * static l_int32 boxaCheckIfOverlapIsSmall() * BOXA *boxaPruneSortedOnOverlap() */ #include "allheaders.h" struct PartitionElement { l_float32 size; /* sorting key */ BOX *box; /* region of the element */ BOXA *boxa; /* set of intersecting boxes */ }; typedef struct PartitionElement PARTEL; static PARTEL * partelCreate(BOX *box); static void partelDestroy(PARTEL **ppartel); static l_int32 partelSetSize(PARTEL *partel, l_int32 sortflag); static BOXA * boxaGenerateSubboxes(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract); static BOX * boxaSelectPivotBox(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract); static l_int32 boxCheckIfOverlapIsBig(BOX *box, BOXA *boxa, l_float32 maxoverlap); static const l_int32 DEFAULT_MAX_POPS = 20000; /* a big number! */ #ifndef NO_CONSOLE_IO #define OUTPUT_HEAP_STATS 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Whitespace block extraction * *------------------------------------------------------------------*/ /*! * boxaGetWhiteblocks() * * Input: boxas (typically, a set of bounding boxes of fg components) * box (initial region; typically including all boxes in boxas; * if null, it computes the region to include all boxes * in boxas) * sortflag (L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, * L_SORT_BY_PERIMETER, L_SORT_BY_AREA) * maxboxes (maximum number of output whitespace boxes; e.g., 100) * maxoverlap (maximum fractional overlap of a box by any * of the larger boxes; e.g., 0.2) * maxperim (maximum half-perimeter, in pixels, for which * pivot is selected by proximity to box centroid; * e.g., 200) * fract (fraction of box diagonal that is an acceptable * distance from the box centroid to select the pivot; * e.g., 0.2) * maxpops (maximum number of pops from the heap; use 0 as default) * Return: boxa (of sorted whitespace boxes), or null on error * * Notes: * (1) This uses the elegant Breuel algorithm, found in "Two * Geometric Algorithms for Layout Analysis", 2002, * url: "citeseer.ist.psu.edu/breuel02two.html". * It starts with the bounding boxes (b.b.) of the connected * components (c.c.) in a region, along with the rectangle * representing that region. It repeatedly divides the * rectangle into four maximal rectangles that exclude a * pivot rectangle, sorting them in a priority queue * according to one of the six sort flags. It returns a boxa * of the "largest" set that have no intersection with boxes * from the input boxas. * (2) If box == NULL, the initial region is the minimal region * that includes the origin and every box in boxas. * (3) maxboxes is the maximum number of whitespace boxes that will * be returned. The actual number will depend on the image * and the values chosen for maxoverlap and maxpops. In many * cases, the actual number will be 'maxboxes'. * (4) maxoverlap allows pruning of whitespace boxes depending on * the overlap. To avoid all pruning, use maxoverlap = 1.0. * To select only boxes that have no overlap with each other * (maximal pruning), choose maxoverlap = 0.0. * Otherwise, no box can have more than the 'maxoverlap' fraction * of its area overlapped by any larger (in the sense of the * sortflag) box. * (5) Choose maxperim (actually, maximum half-perimeter) to * represent a c.c. that is small enough so that you don't care * about the white space that could be inside of it. For all such * c.c., the pivot for 'quadfurcation' of a rectangle is selected * as having a reasonable proximity to the rectangle centroid. * (6) Use fract in the range [0.0 ... 1.0]. Set fract = 0.0 * to choose the small box nearest the centroid as the pivot. * If you choose fract > 0.0, it is suggested that you call * boxaPermuteRandom() first, to permute the boxes (see usage below). * This should reduce the search time for each of the pivot boxes. * (7) Choose maxpops to be the maximum number of rectangles that * are popped from the heap. This is an indirect way to limit the * execution time. Use 0 for default (a fairly large number). * At any time, you can expect the heap to contain about * 2.5 times as many boxes as have been popped off. * (8) The output result is a sorted set of overlapping * boxes, constrained by 'maxboxes', 'maxoverlap' and 'maxpops'. * (9) The main defect of the method is that it abstracts out the * actual components, retaining only the b.b. for analysis. * Consider a component with a large b.b. If this is chosen * as a pivot, all white space inside is immediately taken * out of consideration. Furthermore, even if it is never chosen * as a pivot, as the partitioning continues, at no time will * any of the whitespace inside this component be part of a * rectangle with zero overlapping boxes. Thus, the interiors * of all boxes are necessarily excluded from the union of * the returned whitespace boxes. * (10) USAGE: One way to accommodate to this weakness is to remove such * large b.b. before starting the computation. For example, * if 'box' is an input image region containing 'boxa' b.b. of c.c.: * * // Faster pivot choosing * boxaPermuteRandom(boxa, boxa); * * // Remove anything either large width or height * boxat = boxaSelectBySize(boxa, maxwidth, maxheight, * L_SELECT_IF_BOTH, L_SELECT_IF_LT, * NULL); * * boxad = boxaGetWhiteblocks(boxat, box, type, maxboxes, * maxoverlap, maxperim, fract, * maxpops); * * The result will be rectangular regions of "white space" that * extend into (and often through) the excluded components. * (11) As a simple example, suppose you wish to find the columns on a page. * First exclude large c.c. that may block the columns, and then call: * * boxad = boxaGetWhiteblocks(boxa, box, L_SORT_BY_HEIGHT, * 20, 0.15, 200, 0.2, 2000); * * to get the 20 tallest boxes with no more than 0.15 overlap * between a box and any of the taller ones, and avoiding the * use of any c.c. with a b.b. half perimeter greater than 200 * as a pivot. */ BOXA * boxaGetWhiteblocks(BOXA *boxas, BOX *box, l_int32 sortflag, l_int32 maxboxes, l_float32 maxoverlap, l_int32 maxperim, l_float32 fract, l_int32 maxpops) { l_int32 i, w, h, n, nsub, npush, npop; BOX *boxsub; BOXA *boxa, *boxa4, *boxasub, *boxad; PARTEL *partel; L_HEAP *lh; PROCNAME("boxaGetWhiteblocks"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (sortflag != L_SORT_BY_WIDTH && sortflag != L_SORT_BY_HEIGHT && sortflag != L_SORT_BY_MIN_DIMENSION && sortflag != L_SORT_BY_MAX_DIMENSION && sortflag != L_SORT_BY_PERIMETER && sortflag != L_SORT_BY_AREA) return (BOXA *)ERROR_PTR("invalid sort flag", procName, NULL); if (maxboxes < 1) { maxboxes = 1; L_WARNING("setting maxboxes = 1\n", procName); } if (maxoverlap < 0.0 || maxoverlap > 1.0) return (BOXA *)ERROR_PTR("invalid maxoverlap", procName, NULL); if (maxpops == 0) maxpops = DEFAULT_MAX_POPS; if (!box) { boxaGetExtent(boxas, &w, &h, NULL); box = boxCreate(0, 0, w, h); } /* Prime the heap */ lh = lheapCreate(20, L_SORT_DECREASING); partel = partelCreate(box); partel->boxa = boxaCopy(boxas, L_CLONE); partelSetSize(partel, sortflag); lheapAdd(lh, partel); boxad = boxaCreate(0); npush = npop = 0; while (1) { if ((partel = (PARTEL *)lheapRemove(lh)) == NULL) /* we're done */ break; npop++; /* How many boxes have we retrieved from the queue? */ if (npop > maxpops) break; /* Extract the contents */ boxa = boxaCopy(partel->boxa, L_CLONE); box = boxClone(partel->box); partelDestroy(&partel); /* Can we output this one? */ n = boxaGetCount(boxa); if (n == 0) { if (boxCheckIfOverlapIsBig(box, boxad, maxoverlap) == 0) boxaAddBox(boxad, box, L_INSERT); else boxDestroy(&box); boxaDestroy(&boxa); if (boxaGetCount(boxad) >= maxboxes) /* we're done */ break; continue; } /* Generate up to 4 subboxes and put them on the heap */ boxa4 = boxaGenerateSubboxes(box, boxa, maxperim, fract); boxDestroy(&box); nsub = boxaGetCount(boxa4); for (i = 0; i < nsub; i++) { boxsub = boxaGetBox(boxa4, i, L_CLONE); boxasub = boxaIntersectsBox(boxa, boxsub); partel = partelCreate(boxsub); partel->boxa = boxasub; partelSetSize(partel, sortflag); lheapAdd(lh, partel); boxDestroy(&boxsub); } npush += nsub; /* How many boxes have we put on the queue? */ /* boxaWriteStream(stderr, boxa4); */ boxaDestroy(&boxa4); boxaDestroy(&boxa); } #if OUTPUT_HEAP_STATS fprintf(stderr, "Heap statistics:\n"); fprintf(stderr, " Number of boxes pushed: %d\n", npush); fprintf(stderr, " Number of boxes popped: %d\n", npop); #endif /* OUTPUT_HEAP_STATS */ /* Clean up the heap */ while ((partel = (PARTEL *)lheapRemove(lh)) != NULL) partelDestroy(&partel); lheapDestroy(&lh, FALSE); return boxad; } /*------------------------------------------------------------------* * Helpers * *------------------------------------------------------------------*/ /*! * partelCreate() * * Input: box (region; inserts a copy) * Return: partel, or null on error */ static PARTEL * partelCreate(BOX *box) { PARTEL *partel; PROCNAME("partelCreate"); if ((partel = (PARTEL *)CALLOC(1, sizeof(PARTEL))) == NULL) return (PARTEL *)ERROR_PTR("partel not made", procName, NULL); partel->box = boxCopy(box); return partel; } /*! * partelDestroy() * * Input: &partel () * Return: void */ static void partelDestroy(PARTEL **ppartel) { PARTEL *partel; PROCNAME("partelDestroy"); if (ppartel == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((partel = *ppartel) == NULL) return; boxDestroy(&partel->box); boxaDestroy(&partel->boxa); FREE(partel); *ppartel = NULL; return; } /*! * partelSetSize() * * Input: partel * sortflag (L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, * L_SORT_BY_PERIMETER, L_SORT_BY_AREA) * Return: 0 if OK, 1 on error */ static l_int32 partelSetSize(PARTEL *partel, l_int32 sortflag) { l_int32 w, h; PROCNAME("partelSetSize"); if (!partel) return ERROR_INT("partel not defined", procName, 1); boxGetGeometry(partel->box, NULL, NULL, &w, &h); if (sortflag == L_SORT_BY_WIDTH) partel->size = (l_float32)w; else if (sortflag == L_SORT_BY_HEIGHT) partel->size = (l_float32)h; else if (sortflag == L_SORT_BY_MIN_DIMENSION) partel->size = (l_float32)L_MIN(w, h); else if (sortflag == L_SORT_BY_MAX_DIMENSION) partel->size = (l_float32)L_MAX(w, h); else if (sortflag == L_SORT_BY_PERIMETER) partel->size = (l_float32)(w + h); else if (sortflag == L_SORT_BY_AREA) partel->size = (l_float32)(w * h); else return ERROR_INT("invalid sortflag", procName, 1); return 0; } /*! * boxaGenerateSubboxes() * * Input: box (region to be split into up to four overlapping subregions) * boxa (boxes of rectangles intersecting the box) * maxperim (maximum half-perimeter for which pivot * is selected by proximity to box centroid) * fract (fraction of box diagonal that is an acceptable * distance from the box centroid to select the pivot) * Return: boxa (of four or less overlapping subrectangles of the box), * or null on error */ static BOXA * boxaGenerateSubboxes(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract) { l_int32 x, y, w, h, xp, yp, wp, hp; BOX *boxp; /* pivot box */ BOX *boxsub; BOXA *boxa4; PROCNAME("boxaGenerateSubboxes"); if (!box) return (BOXA *)ERROR_PTR("box not defined", procName, NULL); if (!boxa) return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); boxa4 = boxaCreate(4); boxp = boxaSelectPivotBox(box, boxa, maxperim, fract); boxGetGeometry(box, &x, &y, &w, &h); boxGetGeometry(boxp, &xp, &yp, &wp, &hp); boxDestroy(&boxp); if (xp > x) { /* left sub-box */ boxsub = boxCreate(x, y, xp - x, h); boxaAddBox(boxa4, boxsub, L_INSERT); } if (yp > y) { /* top sub-box */ boxsub = boxCreate(x, y, w, yp - y); boxaAddBox(boxa4, boxsub, L_INSERT); } if (xp + wp < x + w) { /* right sub-box */ boxsub = boxCreate(xp + wp, y, x + w - xp - wp, h); boxaAddBox(boxa4, boxsub, L_INSERT); } if (yp + hp < y + h) { /* bottom sub-box */ boxsub = boxCreate(x, yp + hp, w, y + h - yp - hp); boxaAddBox(boxa4, boxsub, L_INSERT); } return boxa4; } /*! * boxaSelectPivotBox() * * Input: box (containing box; to be split by the pivot box) * boxa (boxes of rectangles, from which 1 is to be chosen) * maxperim (maximum half-perimeter for which pivot * is selected by proximity to box centroid) * fract (fraction of box diagonal that is an acceptable * distance from the box centroid to select the pivot) * Return: box (pivot box for subdivision into 4 rectangles), or * null on error * * Notes: * (1) This is a tricky piece that wasn't discussed in the * Breuel's 2002 paper. * (2) Selects a box from boxa whose centroid is reasonably close to * the centroid of the containing box (xc, yc) and whose * half-perimeter does not exceed the maxperim value. * (3) If there are no boxes in the boxa that are small enough, * then it selects the smallest of the larger boxes, * without reference to its location in the containing box. * (4) If a small box has a centroid at a distance from the * centroid of the containing box that is not more than * the fraction 'fract' of the diagonal of the containing * box, that box is chosen as the pivot, terminating the * search for the nearest small box. * (5) Use fract in the range [0.0 ... 1.0]. Set fract = 0.0 * to choose the small box nearest the centroid. * (6) Choose maxperim to represent a connected component that is * small enough so that you don't care about the white space * that could be inside of it. */ static BOX * boxaSelectPivotBox(BOX *box, BOXA *boxa, l_int32 maxperim, l_float32 fract) { l_int32 i, n, bw, bh, w, h; l_int32 smallfound, minindex, perim, minsize; l_float32 delx, dely, mindist, threshdist, dist, x, y, cx, cy; BOX *boxt; PROCNAME("boxaSelectPivotBox"); if (!box) return (BOX *)ERROR_PTR("box not defined", procName, NULL); if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); n = boxaGetCount(boxa); if (n == 0) return (BOX *)ERROR_PTR("no boxes in boxa", procName, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract out of bounds; using 0.0\n", procName); fract = 0.0; } boxGetGeometry(box, NULL, NULL, &w, &h); boxGetCenter(box, &x, &y); threshdist = fract * (w * w + h * h); mindist = 1000000000.; minindex = 0; smallfound = FALSE; for (i = 0; i < n; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(boxt, NULL, NULL, &bw, &bh); boxGetCenter(boxt, &cx, &cy); boxDestroy(&boxt); if (bw + bh > maxperim) continue; smallfound = TRUE; delx = cx - x; dely = cy - y; dist = delx * delx + dely * dely; if (dist <= threshdist) return boxaGetBox(boxa, i, L_COPY); if (dist < mindist) { minindex = i; mindist = dist; } } /* If there are small boxes but none are within 'fract' of the * centroid, return the nearest one. */ if (smallfound == TRUE) return boxaGetBox(boxa, minindex, L_COPY); /* No small boxes; return the smallest of the large boxes */ minsize = 1000000000; minindex = 0; for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &bw, &bh); perim = bw + bh; if (perim < minsize) { minsize = perim; minindex = i; } } return boxaGetBox(boxa, minindex, L_COPY); } /*! * boxCheckIfOverlapIsBig() * * Input: box (to be tested) * boxa (of boxes already stored) * maxoverlap (maximum fractional overlap of the input box * by any of the boxes in boxa) * Return: 0 if box has small overlap with every box in boxa; * 1 otherwise or on error */ static l_int32 boxCheckIfOverlapIsBig(BOX *box, BOXA *boxa, l_float32 maxoverlap) { l_int32 i, n, bigoverlap; l_float32 fract; BOX *boxt; PROCNAME("boxCheckIfOverlapIsBig"); if (!box) return ERROR_INT("box not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (maxoverlap < 0.0 || maxoverlap > 1.0) return ERROR_INT("invalid maxoverlap", procName, 1); n = boxaGetCount(boxa); if (n == 0 || maxoverlap == 1.0) return 0; bigoverlap = 0; for (i = 0; i < n; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); boxOverlapFraction(boxt, box, &fract); boxDestroy(&boxt); if (fract > maxoverlap) { bigoverlap = 1; break; } } return bigoverlap; } /*! * boxaPruneSortedOnOverlap() * * Input: boxas (sorted by size in decreasing order) * maxoverlap (maximum fractional overlap of a box by any * of the larger boxes) * Return: boxad (pruned), or null on error * * Notes: * (1) This selectively removes smaller boxes when they are overlapped * by any larger box by more than the input 'maxoverlap' fraction. * (2) To avoid all pruning, use maxoverlap = 1.0. To select only * boxes that have no overlap with each other (maximal pruning), * set maxoverlap = 0.0. * (3) If there are no boxes in boxas, returns an empty boxa. */ BOXA * boxaPruneSortedOnOverlap(BOXA *boxas, l_float32 maxoverlap) { l_int32 i, j, n, remove; l_float32 fract; BOX *box1, *box2; BOXA *boxad; PROCNAME("boxaPruneSortedOnOverlap"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (maxoverlap < 0.0 || maxoverlap > 1.0) return (BOXA *)ERROR_PTR("invalid maxoverlap", procName, NULL); n = boxaGetCount(boxas); if (n == 0 || maxoverlap == 1.0) return boxaCopy(boxas, L_COPY); boxad = boxaCreate(0); box2 = boxaGetBox(boxas, 0, L_COPY); boxaAddBox(boxad, box2, L_INSERT); for (j = 1; j < n; j++) { /* prune on j */ box2 = boxaGetBox(boxas, j, L_COPY); remove = FALSE; for (i = 0; i < j; i++) { /* test on i */ box1 = boxaGetBox(boxas, i, L_CLONE); boxOverlapFraction(box1, box2, &fract); boxDestroy(&box1); if (fract > maxoverlap) { remove = TRUE; break; } } if (remove == TRUE) boxDestroy(&box2); else boxaAddBox(boxad, box2, L_INSERT); } return boxad; } leptonica-1.70/src/pixarith.c0000644000175000017500000013166012244226465014306 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixarith.c * * One-image grayscale arithmetic operations (8, 16, 32 bpp) * l_int32 pixAddConstantGray() * l_int32 pixMultConstantGray() * * Two-image grayscale arithmetic operations (8, 16, 32 bpp) * PIX *pixAddGray() * PIX *pixSubtractGray() * * Grayscale threshold operation (8, 16, 32 bpp) * PIX *pixThresholdToValue() * * Image accumulator arithmetic operations * PIX *pixInitAccumulate() * PIX *pixFinalAccumulate() * PIX *pixFinalAccumulateThreshold() * l_int32 pixAccumulate() * l_int32 pixMultConstAccumulate() * * Absolute value of difference * PIX *pixAbsDifference() * * Sum of color images * PIX *pixAddRGB() * * Two-image min and max operations (8 and 16 bpp) * PIX *pixMinOrMax() * * Scale pix for maximum dynamic range in 8 bpp image: * PIX *pixMaxDynamicRange() * * Log base2 lookup * l_float32 *makeLogBase2Tab() * l_float32 getLogBase2() * * The image accumulator operations are used when you expect * overflow from 8 bits on intermediate results. For example, * you might want a tophat contrast operator which is * 3*I - opening(I,S) - closing(I,S) * To use these operations, first use the init to generate * a 16 bpp image, use the accumulate to add or subtract 8 bpp * images from that, or the multiply constant to multiply * by a small constant (much less than 256 -- we don't want * overflow from the 16 bit images!), and when you're finished * use final to bring the result back to 8 bpp, clipped * if necessary. There is also a divide function, which * can be used to divide one image by another, scaling the * result for maximum dynamic range, and giving back the * 8 bpp result. * * A simpler interface to the arithmetic operations is * provided in pixacc.c. */ #include #include #include "allheaders.h" /*-------------------------------------------------------------* * One-image grayscale arithmetic operations * *-------------------------------------------------------------*/ /*! * pixAddConstantGray() * * Input: pixs (8, 16 or 32 bpp) * val (amount to add to each pixel) * Return: 0 if OK, 1 on error * * Notes: * (1) In-place operation. * (2) No clipping for 32 bpp. * (3) For 8 and 16 bpp, if val > 0 the result is clipped * to 0xff and 0xffff, rsp. * (4) For 8 and 16 bpp, if val < 0 the result is clipped to 0. */ l_int32 pixAddConstantGray(PIX *pixs, l_int32 val) { l_int32 i, j, w, h, d, wpl, pval; l_uint32 *data, *line; PROCNAME("pixAddConstantGray"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return ERROR_INT("pixs not 8, 16 or 32 bpp", procName, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 8) { if (val < 0) { for (j = 0; j < w; j++) { pval = GET_DATA_BYTE(line, j); pval = L_MAX(0, pval + val); SET_DATA_BYTE(line, j, pval); } } else { /* val >= 0 */ for (j = 0; j < w; j++) { pval = GET_DATA_BYTE(line, j); pval = L_MIN(255, pval + val); SET_DATA_BYTE(line, j, pval); } } } else if (d == 16) { if (val < 0) { for (j = 0; j < w; j++) { pval = GET_DATA_TWO_BYTES(line, j); pval = L_MAX(0, pval + val); SET_DATA_TWO_BYTES(line, j, pval); } } else { /* val >= 0 */ for (j = 0; j < w; j++) { pval = GET_DATA_TWO_BYTES(line, j); pval = L_MIN(0xffff, pval + val); SET_DATA_TWO_BYTES(line, j, pval); } } } else { /* d == 32; no check for overflow (< 0 or > 0xffffffff) */ for (j = 0; j < w; j++) *(line + j) += val; } } return 0; } /*! * pixMultConstantGray() * * Input: pixs (8, 16 or 32 bpp) * val (>= 0.0; amount to multiply by each pixel) * Return: 0 if OK, 1 on error * * Notes: * (1) In-place operation; val must be >= 0. * (2) No clipping for 32 bpp. * (3) For 8 and 16 bpp, the result is clipped to 0xff and 0xffff, rsp. */ l_int32 pixMultConstantGray(PIX *pixs, l_float32 val) { l_int32 i, j, w, h, d, wpl, pval; l_uint32 upval; l_uint32 *data, *line; PROCNAME("pixMultConstantGray"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return ERROR_INT("pixs not 8, 16 or 32 bpp", procName, 1); if (val < 0.0) return ERROR_INT("val < 0.0", procName, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 8) { for (j = 0; j < w; j++) { pval = GET_DATA_BYTE(line, j); pval = (l_int32)(val * pval); pval = L_MIN(255, pval); SET_DATA_BYTE(line, j, pval); } } else if (d == 16) { for (j = 0; j < w; j++) { pval = GET_DATA_TWO_BYTES(line, j); pval = (l_int32)(val * pval); pval = L_MIN(0xffff, pval); SET_DATA_TWO_BYTES(line, j, pval); } } else { /* d == 32; no clipping */ for (j = 0; j < w; j++) { upval = *(line + j); upval = (l_uint32)(val * upval); *(line + j) = upval; } } } return 0; } /*-------------------------------------------------------------* * Two-image grayscale arithmetic ops * *-------------------------------------------------------------*/ /*! * pixAddGray() * * Input: pixd (; this can be null, equal to pixs1, or * different from pixs1) * pixs1 (can be == to pixd) * pixs2 * Return: pixd always * * Notes: * (1) Arithmetic addition of two 8, 16 or 32 bpp images. * (2) For 8 and 16 bpp, we do explicit clipping to 0xff and 0xffff, * respectively. * (3) Alignment is to UL corner. * (4) There are 3 cases. The result can go to a new dest, * in-place to pixs1, or to an existing input dest: * * pixd == null: (src1 + src2) --> new pixd * * pixd == pixs1: (src1 + src2) --> src1 (in-place) * * pixd != pixs1: (src1 + src2) --> input pixd * (5) pixs2 must be different from both pixd and pixs1. */ PIX * pixAddGray(PIX *pixd, PIX *pixs1, PIX *pixs2) { l_int32 i, j, d, ws, hs, w, h, wpls, wpld, val, sum; l_uint32 *datas, *datad, *lines, *lined; PROCNAME("pixAddGray"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixs2 == pixs1) return (PIX *)ERROR_PTR("pixs2 and pixs1 must differ", procName, pixd); if (pixs2 == pixd) return (PIX *)ERROR_PTR("pixs2 and pixd must differ", procName, pixd); d = pixGetDepth(pixs1); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pix are not 8, 16 or 32 bpp", procName, pixd); if (pixGetDepth(pixs2) != d) return (PIX *)ERROR_PTR("depths differ (pixs1, pixs2)", procName, pixd); if (pixd && (pixGetDepth(pixd) != d)) return (PIX *)ERROR_PTR("depths differ (pixs1, pixd)", procName, pixd); if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal in size\n", procName); if (pixd && !pixSizesEqual(pixs1, pixd)) L_WARNING("pixs1 and pixd not equal in size\n", procName); if (pixs1 != pixd) pixd = pixCopy(pixd, pixs1); /* pixd + pixs2 ==> pixd */ datas = pixGetData(pixs2); datad = pixGetData(pixd); wpls = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); pixGetDimensions(pixs2, &ws, &hs, NULL); pixGetDimensions(pixd, &w, &h, NULL); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lined = datad + i * wpld; lines = datas + i * wpls; if (d == 8) { for (j = 0; j < w; j++) { sum = GET_DATA_BYTE(lines, j) + GET_DATA_BYTE(lined, j); val = L_MIN(sum, 255); SET_DATA_BYTE(lined, j, val); } } else if (d == 16) { for (j = 0; j < w; j++) { sum = GET_DATA_TWO_BYTES(lines, j) + GET_DATA_TWO_BYTES(lined, j); val = L_MIN(sum, 0xffff); SET_DATA_TWO_BYTES(lined, j, val); } } else { /* d == 32; no clipping */ for (j = 0; j < w; j++) *(lined + j) += *(lines + j); } } return pixd; } /*! * pixSubtractGray() * * Input: pixd (; this can be null, equal to pixs1, or * different from pixs1) * pixs1 (can be == to pixd) * pixs2 * Return: pixd always * * Notes: * (1) Arithmetic subtraction of two 8, 16 or 32 bpp images. * (2) Source pixs2 is always subtracted from source pixs1. * (3) Do explicit clipping to 0. * (4) Alignment is to UL corner. * (5) There are 3 cases. The result can go to a new dest, * in-place to pixs1, or to an existing input dest: * (a) pixd == null (src1 - src2) --> new pixd * (b) pixd == pixs1 (src1 - src2) --> src1 (in-place) * (d) pixd != pixs1 (src1 - src2) --> input pixd * (6) pixs2 must be different from both pixd and pixs1. */ PIX * pixSubtractGray(PIX *pixd, PIX *pixs1, PIX *pixs2) { l_int32 i, j, w, h, ws, hs, d, wpls, wpld, val, diff; l_uint32 *datas, *datad, *lines, *lined; PROCNAME("pixSubtractGray"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixs2 == pixs1) return (PIX *)ERROR_PTR("pixs2 and pixs1 must differ", procName, pixd); if (pixs2 == pixd) return (PIX *)ERROR_PTR("pixs2 and pixd must differ", procName, pixd); d = pixGetDepth(pixs1); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pix are not 8, 16 or 32 bpp", procName, pixd); if (pixGetDepth(pixs2) != d) return (PIX *)ERROR_PTR("depths differ (pixs1, pixs2)", procName, pixd); if (pixd && (pixGetDepth(pixd) != d)) return (PIX *)ERROR_PTR("depths differ (pixs1, pixd)", procName, pixd); if (!pixSizesEqual(pixs1, pixs2)) L_WARNING("pixs1 and pixs2 not equal in size\n", procName); if (pixd && !pixSizesEqual(pixs1, pixd)) L_WARNING("pixs1 and pixd not equal in size\n", procName); if (pixs1 != pixd) pixd = pixCopy(pixd, pixs1); /* pixd - pixs2 ==> pixd */ datas = pixGetData(pixs2); datad = pixGetData(pixd); wpls = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); pixGetDimensions(pixs2, &ws, &hs, NULL); pixGetDimensions(pixd, &w, &h, NULL); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lined = datad + i * wpld; lines = datas + i * wpls; if (d == 8) { for (j = 0; j < w; j++) { diff = GET_DATA_BYTE(lined, j) - GET_DATA_BYTE(lines, j); val = L_MAX(diff, 0); SET_DATA_BYTE(lined, j, val); } } else if (d == 16) { for (j = 0; j < w; j++) { diff = GET_DATA_TWO_BYTES(lined, j) - GET_DATA_TWO_BYTES(lines, j); val = L_MAX(diff, 0); SET_DATA_TWO_BYTES(lined, j, val); } } else { /* d == 32; no clipping */ for (j = 0; j < w; j++) *(lined + j) -= *(lines + j); } } return pixd; } /*-------------------------------------------------------------* * Grayscale threshold operation * *-------------------------------------------------------------*/ /*! * pixThresholdToValue() * * Input: pixd (; if not null, must be equal to pixs) * pixs (8, 16, 32 bpp) * threshval * setval * Return: pixd always * * Notes: * - operation can be in-place (pixs == pixd) or to a new pixd * - if setval > threshval, sets pixels with a value >= threshval to setval * - if setval < threshval, sets pixels with a value <= threshval to setval * - if setval == threshval, no-op */ PIX * pixThresholdToValue(PIX *pixd, PIX *pixs, l_int32 threshval, l_int32 setval) { l_int32 i, j, w, h, d, wpld, setabove; l_uint32 *datad, *lined; PROCNAME("pixThresholdToValue"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); d = pixGetDepth(pixs); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not 8, 16 or 32 bpp", procName, pixd); if (pixd && (pixs != pixd)) return (PIX *)ERROR_PTR("pixd exists and is not pixs", procName, pixd); if (threshval < 0 || setval < 0) return (PIX *)ERROR_PTR("threshval & setval not < 0", procName, pixd); if (d == 8 && setval > 255) return (PIX *)ERROR_PTR("setval > 255 for 8 bpp", procName, pixd); if (d == 16 && setval > 0xffff) return (PIX *)ERROR_PTR("setval > 0xffff for 16 bpp", procName, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); if (setval == threshval) { L_WARNING("setval == threshval; no operation\n", procName); return pixd; } datad = pixGetData(pixd); pixGetDimensions(pixd, &w, &h, NULL); wpld = pixGetWpl(pixd); if (setval > threshval) setabove = TRUE; else setabove = FALSE; for (i = 0; i < h; i++) { lined = datad + i * wpld; if (setabove == TRUE) { if (d == 8) { for (j = 0; j < w; j++) { if (GET_DATA_BYTE(lined, j) - threshval >= 0) SET_DATA_BYTE(lined, j, setval); } } else if (d == 16) { for (j = 0; j < w; j++) { if (GET_DATA_TWO_BYTES(lined, j) - threshval >= 0) SET_DATA_TWO_BYTES(lined, j, setval); } } else { /* d == 32 */ for (j = 0; j < w; j++) { if (*(lined + j) >= threshval) *(lined + j) = setval; } } } else { /* set if below or at threshold */ if (d == 8) { for (j = 0; j < w; j++) { if (GET_DATA_BYTE(lined, j) - threshval <= 0) SET_DATA_BYTE(lined, j, setval); } } else if (d == 16) { for (j = 0; j < w; j++) { if (GET_DATA_TWO_BYTES(lined, j) - threshval <= 0) SET_DATA_TWO_BYTES(lined, j, setval); } } else { /* d == 32 */ for (j = 0; j < w; j++) { if (*(lined + j) <= threshval) *(lined + j) = setval; } } } } return pixd; } /*-------------------------------------------------------------* * Image accumulator arithmetic operations * *-------------------------------------------------------------*/ /*! * pixInitAccumulate() * * Input: w, h (of accumulate array) * offset (initialize the 32 bpp to have this * value; not more than 0x40000000) * Return: pixd (32 bpp), or null on error * * Notes: * (1) The offset must be >= 0. * (2) The offset is used so that we can do arithmetic * with negative number results on l_uint32 data; it * prevents the l_uint32 data from going negative. * (3) Because we use l_int32 intermediate data results, * these should never exceed the max of l_int32 (0x7fffffff). * We do not permit the offset to be above 0x40000000, * which is half way between 0 and the max of l_int32. * (4) The same offset should be used for initialization, * multiplication by a constant, and final extraction! * (5) If you're only adding positive values, offset can be 0. */ PIX * pixInitAccumulate(l_int32 w, l_int32 h, l_uint32 offset) { PIX *pixd; PROCNAME("pixInitAccumulate"); if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); if (offset > 0x40000000) offset = 0x40000000; pixSetAllArbitrary(pixd, offset); return pixd; } /*! * pixFinalAccumulate() * * Input: pixs (32 bpp) * offset (same as used for initialization) * depth (8, 16 or 32 bpp, of destination) * Return: pixd (8, 16 or 32 bpp), or null on error * * Notes: * (1) The offset must be >= 0 and should not exceed 0x40000000. * (2) The offset is subtracted from the src 32 bpp image * (3) For 8 bpp dest, the result is clipped to [0, 0xff] * (4) For 16 bpp dest, the result is clipped to [0, 0xffff] */ PIX * pixFinalAccumulate(PIX *pixs, l_uint32 offset, l_int32 depth) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixFinalAccumulate"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (depth != 8 && depth != 16 && depth != 32) return (PIX *)ERROR_PTR("dest depth not 8, 16, 32 bpp", procName, NULL); if (offset > 0x40000000) offset = 0x40000000; pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); /* but how did pixs get it initially? */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (depth == 8) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j] - offset; val = L_MAX(0, val); val = L_MIN(255, val); SET_DATA_BYTE(lined, j, (l_uint8)val); } } } else if (depth == 16) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j] - offset; val = L_MAX(0, val); val = L_MIN(0xffff, val); SET_DATA_TWO_BYTES(lined, j, (l_uint16)val); } } } else { /* depth == 32 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) lined[j] = lines[j] - offset; } } return pixd; } /*! * pixFinalAccumulateThreshold() * * Input: pixs (32 bpp) * offset (same as used for initialization) * threshold (values less than this are set in the destination) * Return: pixd (1 bpp), or null on error * * Notes: * (1) The offset must be >= 0 and should not exceed 0x40000000. * (2) The offset is subtracted from the src 32 bpp image */ PIX * pixFinalAccumulateThreshold(PIX *pixs, l_uint32 offset, l_uint32 threshold) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixFinalAccumulateThreshold"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (offset > 0x40000000) offset = 0x40000000; pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); /* but how did pixs get it initially? */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j] - offset; if (val >= threshold) { SET_DATA_BIT(lined, j); } } } return pixd; } /*! * pixAccumulate() * * Input: pixd (32 bpp) * pixs (1, 8, 16 or 32 bpp) * op (L_ARITH_ADD or L_ARITH_SUBTRACT) * Return: 0 if OK; 1 on error * * Notes: * (1) This adds or subtracts each pixs value from pixd. * (2) This clips to the minimum of pixs and pixd, so they * do not need to be the same size. * (3) The alignment is to the origin (UL corner) of pixs & pixd. */ l_int32 pixAccumulate(PIX *pixd, PIX *pixs, l_int32 op) { l_int32 i, j, w, h, d, wd, hd, wpls, wpld; l_uint32 *datas, *datad, *lines, *lined; PROCNAME("pixAccumulate"); if (!pixd || (pixGetDepth(pixd) != 32)) return ERROR_INT("pixd not defined or not 32 bpp", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); d = pixGetDepth(pixs); if (d != 1 && d != 8 && d != 16 && d != 32) return ERROR_INT("pixs not 1, 8, 16 or 32 bpp", procName, 1); if (op != L_ARITH_ADD && op != L_ARITH_SUBTRACT) return ERROR_INT("op must be in {L_ARITH_ADD, L_ARITH_SUBTRACT}", procName, 1); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); pixGetDimensions(pixs, &w, &h, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); w = L_MIN(w, wd); h = L_MIN(h, hd); if (d == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += GET_DATA_BIT(lines, j); } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= GET_DATA_BIT(lines, j); } } } else if (d == 8) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += GET_DATA_BYTE(lines, j); } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= GET_DATA_BYTE(lines, j); } } } else if (d == 16) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += GET_DATA_TWO_BYTES(lines, j); } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= GET_DATA_TWO_BYTES(lines, j); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (op == L_ARITH_ADD) { for (j = 0; j < w; j++) lined[j] += lines[j]; } else { /* op == L_ARITH_SUBTRACT */ for (j = 0; j < w; j++) lined[j] -= lines[j]; } } } return 0; } /*! * pixMultConstAccumulate() * * Input: pixs (32 bpp) * factor * offset (same as used for initialization) * Return: 0 if OK; 1 on error * * Notes: * (1) The offset must be >= 0 and should not exceed 0x40000000. * (2) This multiplies each pixel, relative to offset, by the input factor * (3) The result is returned with the offset back in place. */ l_int32 pixMultConstAccumulate(PIX *pixs, l_float32 factor, l_uint32 offset) { l_int32 i, j, w, h, wpl, val; l_uint32 *data, *line; PROCNAME("pixMultConstAccumulate"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (offset > 0x40000000) offset = 0x40000000; pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = line[j] - offset; val = (l_int32)(val * factor); val += offset; line[j] = (l_uint32)val; } } return 0; } /*-----------------------------------------------------------------------* * Absolute value of difference * *-----------------------------------------------------------------------*/ /*! * pixAbsDifference() * * Input: pixs1, pixs2 (both either 8 or 16 bpp gray, or 32 bpp RGB) * Return: pixd, or null on error * * Notes: * (1) The depth of pixs1 and pixs2 must be equal. * (2) Clips computation to the min size, aligning the UL corners * (3) For 8 and 16 bpp, assumes one gray component. * (4) For 32 bpp, assumes 3 color components, and ignores the * LSB of each word (the alpha channel) * (5) Computes the absolute value of the difference between * each component value. */ PIX * pixAbsDifference(PIX *pixs1, PIX *pixs2) { l_int32 i, j, w, h, w2, h2, d, wpls1, wpls2, wpld, val1, val2, diff; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rdiff, gdiff, bdiff; l_uint32 *datas1, *datas2, *datad, *lines1, *lines2, *lined; PIX *pixd; PROCNAME("pixAbsDifference"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); d = pixGetDepth(pixs1); if (d != pixGetDepth(pixs2)) return (PIX *)ERROR_PTR("src1 and src2 depths unequal", procName, NULL); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depths not in {8, 16, 32}", procName, NULL); pixGetDimensions(pixs1, &w, &h, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); w = L_MIN(w, w2); h = L_MIN(h, h2); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs1); datas1 = pixGetData(pixs1); datas2 = pixGetData(pixs2); datad = pixGetData(pixd); wpls1 = pixGetWpl(pixs1); wpls2 = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); if (d == 8) { for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(lines1, j); val2 = GET_DATA_BYTE(lines2, j); diff = L_ABS(val1 - val2); SET_DATA_BYTE(lined, j, diff); } } } else if (d == 16) { for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { val1 = GET_DATA_TWO_BYTES(lines1, j); val2 = GET_DATA_TWO_BYTES(lines2, j); diff = L_ABS(val1 - val2); SET_DATA_TWO_BYTES(lined, j, diff); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines1[j], &rval1, &gval1, &bval1); extractRGBValues(lines2[j], &rval2, &gval2, &bval2); rdiff = L_ABS(rval1 - rval2); gdiff = L_ABS(gval1 - gval2); bdiff = L_ABS(bval1 - bval2); composeRGBPixel(rdiff, gdiff, bdiff, lined + j); } } } return pixd; } /*-----------------------------------------------------------------------* * Sum of color images * *-----------------------------------------------------------------------*/ /*! * pixAddRGB() * * Input: pixs1, pixs2 (32 bpp RGB, or colormapped) * Return: pixd, or null on error * * Notes: * (1) Clips computation to the minimum size, aligning the UL corners. * (2) Removes any colormap to RGB, and ignores the LSB of each * pixel word (the alpha channel). * (3) Adds each component value, pixelwise, clipping to 255. * (4) This is useful to combine two images where most of the * pixels are essentially black, such as in pixPerceptualDiff(). */ PIX * pixAddRGB(PIX *pixs1, PIX *pixs2) { l_int32 i, j, w, h, d, w2, h2, d2, wplc1, wplc2, wpld; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; l_uint32 *datac1, *datac2, *datad, *linec1, *linec2, *lined; PIX *pixc1, *pixc2, *pixd; PROCNAME("pixAddRGB"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); pixGetDimensions(pixs1, &w, &h, &d); pixGetDimensions(pixs2, &w2, &h2, &d2); if (!pixGetColormap(pixs1) && d != 32) return (PIX *)ERROR_PTR("pixs1 not cmapped or rgb", procName, NULL); if (!pixGetColormap(pixs2) && d2 != 32) return (PIX *)ERROR_PTR("pixs2 not cmapped or rgb", procName, NULL); if (pixGetColormap(pixs1)) pixc1 = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); else pixc1 = pixClone(pixs1); if (pixGetColormap(pixs2)) pixc2 = pixRemoveColormap(pixs2, REMOVE_CMAP_TO_FULL_COLOR); else pixc2 = pixClone(pixs2); w = L_MIN(w, w2); h = L_MIN(h, h2); pixd = pixCreate(w, h, 32); pixCopyResolution(pixd, pixs1); datac1 = pixGetData(pixc1); datac2 = pixGetData(pixc2); datad = pixGetData(pixd); wplc1 = pixGetWpl(pixc1); wplc2 = pixGetWpl(pixc2); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linec1 = datac1 + i * wplc1; linec2 = datac2 + i * wplc2; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(linec1[j], &rval1, &gval1, &bval1); extractRGBValues(linec2[j], &rval2, &gval2, &bval2); rval = L_MIN(255, rval1 + rval2); gval = L_MIN(255, gval1 + gval2); bval = L_MIN(255, bval1 + bval2); composeRGBPixel(rval, gval, bval, lined + j); } } pixDestroy(&pixc1); pixDestroy(&pixc2); return pixd; } /*-----------------------------------------------------------------------* * Two-image min and max operations (8 and 16 bpp) * *-----------------------------------------------------------------------*/ /*! * pixMinOrMax() * * Input: pixd ( destination: this can be null, * equal to pixs1, or different from pixs1) * pixs1 (can be == to pixd) * pixs2 * type (L_CHOOSE_MIN, L_CHOOSE_MAX) * Return: pixd always * * Notes: * (1) This gives the min or max of two images, component-wise. * (2) The depth can be 8 or 16 bpp for 1 component, and 32 bpp * for a 3 component image. For 32 bpp, ignore the LSB * of each word (the alpha channel) * (3) There are 3 cases: * - if pixd == null, Min(src1, src2) --> new pixd * - if pixd == pixs1, Min(src1, src2) --> src1 (in-place) * - if pixd != pixs1, Min(src1, src2) --> input pixd */ PIX * pixMinOrMax(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 type) { l_int32 d, ws, hs, w, h, wpls, wpld, i, j, vals, vald, val; l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval; l_uint32 *datas, *datad, *lines, *lined; PROCNAME("pixMinOrMax"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixs1 == pixs2) return (PIX *)ERROR_PTR("pixs1 and pixs2 must differ", procName, pixd); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX) return (PIX *)ERROR_PTR("invalid type", procName, pixd); d = pixGetDepth(pixs1); if (pixGetDepth(pixs2) != d) return (PIX *)ERROR_PTR("depths unequal", procName, pixd); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not 8, 16 or 32 bpp", procName, pixd); if (pixs1 != pixd) pixd = pixCopy(pixd, pixs1); pixGetDimensions(pixs2, &ws, &hs, NULL); pixGetDimensions(pixd, &w, &h, NULL); w = L_MIN(w, ws); h = L_MIN(h, hs); datas = pixGetData(pixs2); datad = pixGetData(pixd); wpls = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (d == 8) { for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); vald = GET_DATA_BYTE(lined, j); if (type == L_CHOOSE_MIN) val = L_MIN(vals, vald); else /* type == L_CHOOSE_MAX */ val = L_MAX(vals, vald); SET_DATA_BYTE(lined, j, val); } } else if (d == 16) { for (j = 0; j < w; j++) { vals = GET_DATA_TWO_BYTES(lines, j); vald = GET_DATA_TWO_BYTES(lined, j); if (type == L_CHOOSE_MIN) val = L_MIN(vals, vald); else /* type == L_CHOOSE_MAX */ val = L_MAX(vals, vald); SET_DATA_TWO_BYTES(lined, j, val); } } else { /* d == 32 */ for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval1, &gval1, &bval1); extractRGBValues(lined[j], &rval2, &gval2, &bval2); if (type == L_CHOOSE_MIN) { rval = L_MIN(rval1, rval2); gval = L_MIN(gval1, gval2); bval = L_MIN(bval1, bval2); } else { /* type == L_CHOOSE_MAX */ rval = L_MAX(rval1, rval2); gval = L_MAX(gval1, gval2); bval = L_MAX(bval1, bval2); } composeRGBPixel(rval, gval, bval, lined + j); } } } return pixd; } /*-----------------------------------------------------------------------* * Scale for maximum dynamic range in 8 bpp image * *-----------------------------------------------------------------------*/ /*! * pixMaxDynamicRange() * * Input: pixs (4, 8, 16 or 32 bpp source) * type (L_LINEAR_SCALE or L_LOG_SCALE) * Return: pixd (8 bpp), or null on error * * Notes: * (1) Scales pixel values to fit maximally within the dest 8 bpp pixd * (2) Uses a LUT for log scaling */ PIX * pixMaxDynamicRange(PIX *pixs, l_int32 type) { l_uint8 dval; l_int32 i, j, w, h, d, wpls, wpld, max, sval; l_uint32 *datas, *datad; l_uint32 word; l_uint32 *lines, *lined; l_float32 factor; l_float32 *tab; PIX *pixd; PROCNAME("pixMaxDynamicRange"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {4,8,16,32} bpp", procName, NULL); if (type != L_LINEAR_SCALE && type != L_LOG_SCALE) return (PIX *)ERROR_PTR("invalid type", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* Get max */ max = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { word = *(lines + j); if (d == 4) { max = L_MAX(max, word >> 28); max = L_MAX(max, (word >> 24) & 0xf); max = L_MAX(max, (word >> 20) & 0xf); max = L_MAX(max, (word >> 16) & 0xf); max = L_MAX(max, (word >> 12) & 0xf); max = L_MAX(max, (word >> 8) & 0xf); max = L_MAX(max, (word >> 4) & 0xf); max = L_MAX(max, word & 0xf); } else if (d == 8) { max = L_MAX(max, word >> 24); max = L_MAX(max, (word >> 16) & 0xff); max = L_MAX(max, (word >> 8) & 0xff); max = L_MAX(max, word & 0xff); } else if (d == 16) { max = L_MAX(max, word >> 16); max = L_MAX(max, word & 0xffff); } else { /* d == 32 */ max = L_MAX(max, word); } } } /* Map to the full dynamic range of 8 bpp output */ if (d == 4) { if (type == L_LINEAR_SCALE) { factor = 255. / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_QBIT(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255. / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } FREE(tab); } } else if (d == 8) { if (type == L_LINEAR_SCALE) { factor = 255. / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255. / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } FREE(tab); } } else if (d == 16) { if (type == L_LINEAR_SCALE) { factor = 255. / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_TWO_BYTES(lines, j); dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255. / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_TWO_BYTES(lines, j); dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } FREE(tab); } } else { /* d == 32 */ if (type == L_LINEAR_SCALE) { factor = 255. / (l_float32)max; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = lines[j]; dval = (l_uint8)(factor * (l_float32)sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } } else { /* type == L_LOG_SCALE) */ tab = makeLogBase2Tab(); factor = 255. / getLogBase2(max, tab); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = lines[j]; dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5); SET_DATA_BYTE(lined, j, dval); } } FREE(tab); } } return pixd; } /*-----------------------------------------------------------------------* * Log base2 lookup * *-----------------------------------------------------------------------*/ /* * makeLogBase2Tab() * * Input: void * Return: table (giving the log[base 2] of val) */ l_float32 * makeLogBase2Tab(void) { l_int32 i; l_float32 log2; l_float32 *tab; PROCNAME("makeLogBase2Tab"); if ((tab = (l_float32 *)CALLOC(256, sizeof(l_float32))) == NULL) return (l_float32 *)ERROR_PTR("tab not made", procName, NULL); log2 = (l_float32)log((l_float32)2); for (i = 0; i < 256; i++) tab[i] = (l_float32)log((l_float32)i) / log2; return tab; } /* * getLogBase2() * * Input: val * logtab (256-entry table of logs) * Return: logdist, or 0 on error */ l_float32 getLogBase2(l_int32 val, l_float32 *logtab) { PROCNAME("getLogBase2"); if (!logtab) return ERROR_INT("logtab not defined", procName, 0); if (val < 0x100) return logtab[val]; else if (val < 0x10000) return 8.0 + logtab[val >> 8]; else if (val < 0x1000000) return 16.0 + logtab[val >> 16]; else return 24.0 + logtab[val >> 24]; } leptonica-1.70/src/recogtrain.c0000644000175000017500000024716612265645107014625 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * recogtrain.c * * Training on labelled data * l_int32 recogTrainLabelled() * l_int32 recogProcessMultLabelled() * PIX *recogProcessSingleLabelled() * l_int32 recogAddSamples() * PIX *recogScaleCharacter() * l_int32 recogAverageSamples() * l_int32 pixaAccumulateSamples() * l_int32 recogTrainingFinished() * l_int32 recogRemoveOutliers() * * Evaluate training status * l_int32 recogaTrainingDone() * l_int32 recogaFinishAveraging() * * Training on unlabelled data * l_int32 recogTrainUnlabelled() * * Padding the training set * l_int32 recogPadTrainingSet() * l_int32 *recogMapIndexToIndex() * static l_int32 recogAverageClassGeom() * l_int32 recogaBestCorrelForPadding() * l_int32 recogCorrelAverages() * l_int32 recogSetPadParams() * static l_int32 recogGetCharsetSize() * static l_int32 recogCharsetAvailable() * * Debugging * l_int32 recogaShowContent() * l_int32 recogShowContent() * l_int32 recogDebugAverages() * l_int32 recogShowAverageTemplates() * PIX *recogShowMatchesInRange() * PIX *recogShowMatch() * l_int32 recogMakeBmf() * * Static helpers * static char *l_charToString() * static void addDebugImage1() * static void addDebugImage2() */ #include #include "allheaders.h" /* Static functions */ static l_int32 *recogMapIndexToIndex(L_RECOG *recog1, L_RECOG *recog2); static l_int32 recogAverageClassGeom(L_RECOG *recog, NUMA **pnaw, NUMA **pnah); static l_int32 recogGetCharsetSize(l_int32 type); static l_int32 recogCharsetAvailable(l_int32 type); static char *l_charToString(char byte); static void debugAddImage1(PIXA *pixa1, PIX *pix1, PIX *pix2, L_BMF *bmf, l_float32 score); static void debugAddImage2(PIXA **ppixadb, PIXA *pixa1, L_BMF *bmf, l_int32 index); /* Defaults in pixRemoveOutliers() */ static const l_float32 DEFAULT_TARGET_SCORE = 0.75; /* keep everything above */ static const l_float32 DEFAULT_MIN_FRACTION = 0.5; /* to be kept */ /* Padding parameters for recognizer */ static const char * DEFAULT_BOOT_DIR = "recog/digits"; static const char * DEFAULT_BOOT_PATTERN = "digit_set"; static const char * DEFAULT_BOOT_PATH = "recog/digits/bootnum1.pa"; static const l_int32 DEFAULT_CHARSET_TYPE = L_ARABIC_NUMERALS; static const l_int32 DEFAULT_MIN_NOPAD = 3; static const l_int32 DEFAULT_MAX_AFTERPAD = 15; static const l_int32 MIN_TOTAL_SAMPLES = 10; /* min char samples in recog */ /*------------------------------------------------------------------------* * Training * *------------------------------------------------------------------------*/ /*! * recogTrainLabelled() * * Input: recog (in training mode) * pixs (if depth > 1, will be thresholded to 1 bpp) * box ( cropping box) * text ( if null, use text field in pix) * multflag (1 if one or more contiguous ascii characters; * 0 for a single arbitrary character) * debug (1 to display images of samples not captured) * Return: 0 if OK, 1 on error * * Notes: * (1) Training is restricted to the addition of either: * (a) multflag == 0: a single character in an arbitrary * (e.g., UTF8) charset * (b) multflag == 1: one or more ascii characters rendered * contiguously in pixs * (2) If box != null, it should represent the cropped location of * the character image. * (3) If multflag == 1, samples will be rejected if the number of * connected components does not equal to the number of ascii * characters in the textstring. In that case, if debug == 1, * the rejected samples will be displayed. */ l_int32 recogTrainLabelled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 multflag, l_int32 debug) { l_int32 ret; PIXA *pixa; PROCNAME("recogTrainLabelled"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (multflag == 0) { ret = recogProcessSingleLabelled(recog, pixs, box, text, &pixa); } else { ret = recogProcessMultLabelled(recog, pixs, box, text, &pixa, debug); } if (ret) return ERROR_INT("failure to add training data", procName, 1); recogAddSamples(recog, pixa, -1, debug); pixaDestroy(&pixa); return 0; } /*! * recogProcessMultLabelled() * * Input: recog (in training mode) * pixs (if depth > 1, will be thresholded to 1 bpp) * box ( cropping box) * text ( if null, use text field in pix) * &pixa ( of split and thresholded characters) * debug (1 to display images of samples not captured) * Return: 0 if OK, 1 on error * * Notes: * (1) This crops and segments one or more labelled and contiguous * ascii characters, for input in training. It is a special case. * (2) The character images are bundled into a pixa with the * character text data embedded in each pix. * (3) Where there is more than one character, this does some * noise reduction and extracts the resulting character images * from left to right. No scaling is performed. */ l_int32 recogProcessMultLabelled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIXA **ppixa, l_int32 debug) { char *textdata, *textstr; l_int32 textinpix, textin, nchars, ncomp, i; BOX *box2; BOXA *boxa1, *boxa2, *boxa3, *boxa4; PIX *pixc, *pixb, *pixt, *pix1, *pix2; PROCNAME("recogProcessMultLabelled"); if (!ppixa) return ERROR_INT("&pixa not defined", procName, 1); *ppixa = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Find the text; this will be stored with the output images */ textin = text && (text[0] != '\0'); textinpix = pixs->text && (pixs->text[0] != '\0'); if (!textin && !textinpix) { L_ERROR("no text: %d\n", procName, recog->samplenum); return 1; } textdata = (textin) ? text : pixs->text; /* do not free */ /* Crop and binarize if necessary */ if (box) pixc = pixClipRectangle(pixs, box, NULL); else pixc = pixClone(pixs); if (pixGetDepth(pixc) > 1) pixb = pixConvertTo1(pixc, recog->threshold); else pixb = pixClone(pixc); pixDestroy(&pixc); /* We segment the set of characters as follows: * (1) A large vertical closing should consolidate most characters. Do not attempt to split touching characters using openings, because this is likely to break actual characters. */ pix1 = pixMorphSequence(pixb, "c1.70", 0); /* (2) Include overlapping components and remove small ones */ boxa1 = pixConnComp(pix1, NULL, 8); boxa2 = boxaCombineOverlaps(boxa1); boxa3 = boxaSelectBySize(boxa2, 2, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); pixDestroy(&pix1); boxaDestroy(&boxa1); boxaDestroy(&boxa2); /* (3) Make sure the components equal the number of text characters */ ncomp = boxaGetCount(boxa3); nchars = strlen(textdata); if (ncomp != nchars) { L_ERROR("ncomp (%d) != nchars (%d); samplenum = %d\n", procName, ncomp, nchars, recog->samplenum); if (debug) { pixt = pixConvertTo32(pixb); pixRenderBoxaArb(pixt, boxa3, 1, 255, 0, 0); pixDisplay(pixt, 10 * recog->samplenum, 100); pixDestroy(&pixt); } pixDestroy(&pixb); boxaDestroy(&boxa3); return 1; } /* (4) Sort the components from left to right and extract them */ boxa4 = boxaSort(boxa3, L_SORT_BY_X, L_SORT_INCREASING, NULL); boxaDestroy(&boxa3); /* Save the results, with one character in each pix */ *ppixa = pixaCreate(ncomp); for (i = 0; i < ncomp; i++) { box2 = boxaGetBox(boxa4, i, L_CLONE); pix2 = pixClipRectangle(pixb, box2, NULL); textstr = l_charToString(textdata[i]); pixSetText(pix2, textstr); /* inserts a copy */ pixaAddPix(*ppixa, pix2, L_INSERT); boxDestroy(&box2); FREE(textstr); } pixDestroy(&pixb); boxaDestroy(&boxa4); return 0; } /*! * recogProcessSingleLabelled() * * Input: recog (in training mode) * pixs (if depth > 1, will be thresholded to 1 bpp) * box ( cropping box) * text ( if null, use text field in pix) * &pixa (one pix, 1 bpp, labelled) * Return: 0 if OK, 1 on error * * Notes: * (1) This crops and binarizes the input image, generating a pix * of one character where the charval is inserted into the pix. */ l_int32 recogProcessSingleLabelled(L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIXA **ppixa) { char *textdata; l_int32 textinpix, textin; PIX *pixc, *pixb, *pixd; PROCNAME("recogProcessSingleLabelled"); if (!ppixa) return ERROR_INT("&pixa not defined", procName, 1); *ppixa = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Find the text; this will be stored with the output images */ textin = text && (text[0] != '\0'); textinpix = (pixs->text && (pixs->text[0] != '\0')); if (!textin && !textinpix) { L_ERROR("no text: %d\n", procName, recog->samplenum); return 1; } textdata = (textin) ? text : pixs->text; /* do not free */ /* Crop and binarize if necessary */ if (box) pixc = pixClipRectangle(pixs, box, NULL); else pixc = pixClone(pixs); if (pixGetDepth(pixc) > 1) pixb = pixConvertTo1(pixc, recog->threshold); else pixb = pixClone(pixc); pixDestroy(&pixc); /* Clip to foreground and save */ pixClipToForeground(pixb, &pixd, NULL); pixDestroy(&pixb); if (!pixd) return ERROR_INT("pixd is empty", procName, 1); pixSetText(pixd, textdata); *ppixa = pixaCreate(1); pixaAddPix(*ppixa, pixd, L_INSERT); return 0; } /*! * recogAddSamples() * * Input: recog * pixa (1 or more characters) * classindex (use -1 if not forcing into a specified class) * debug * Return: 0 if OK, 1 on error * * Notes: * (1) The pix in the pixa are all 1 bpp, and the character string * labels are embedded in the pix. * (2) Note: this function decides what class each pix belongs in. * When input is from a multifont pixaa, with a valid value * for @classindex, the character string label in each pix * is ignored, and @classindex is used as the class index * for all the pix in the pixa. Thus, for that situation we * use this class index to avoid making the decision through a * lookup based on the character strings embedded in the pix. * (3) When a recog is initially filled with samples, the pixaa_u * array is initialized to accept up to 256 different classes. * When training is finished, the arrays are truncated to the * actual number of classes. To pad an existing recog from * the boot recognizers, training is started again; if samples * from a new class are added, the pixaa_u array must be * extended by adding a pixa to hold them. */ l_int32 recogAddSamples(L_RECOG *recog, PIXA *pixa, l_int32 classindex, l_int32 debug) { char *text; l_int32 i, n, npa, charint, index; PIX *pixb; PIXA *pixa1; PIXAA *paa; PROCNAME("recogAddSamples"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixa) { L_ERROR("pixa not defined: %d\n", procName, recog->samplenum); return 1; } if (recog->train_done) return ERROR_INT("training has been completed", procName, 1); if ((n = pixaGetCount(pixa)) == 0) ERROR_INT("no pix in the pixa", procName, 1); paa = recog->pixaa_u; for (i = 0; i < n; i++) { pixb = pixaGetPix(pixa, i, L_CLONE); if (classindex < 0) { /* Determine the class array index. Check if the class * alreadly exists, and if not, add it. */ text = pixGetText(pixb); if (l_convertCharstrToInt(text, &charint) == 1) { L_ERROR("invalid text: %s\n", procName, text); pixDestroy(&pixb); continue; } if (recogGetClassIndex(recog, charint, text, &index) == 1) { /* New class must be added */ npa = pixaaGetCount(paa, NULL); if (index > npa) L_ERROR("index %d > npa %d!!\n", procName, index, npa); if (index == npa) { /* paa needs to be extended */ L_INFO("Adding new class and pixa with index %d\n", procName, index); pixa1 = pixaCreate(10); pixaaAddPixa(paa, pixa1, L_INSERT); } } if (debug) { L_INFO("Identified text label: %s\n", procName, text); L_INFO("Identified: charint = %d, index = %d\n", procName, charint, index); } } else { index = classindex; } /* Insert the unscaled character image into the right pixa. * (Unscaled images are required to split touching characters.) */ recog->samplenum++; pixaaAddPix(paa, index, pixb, NULL, L_INSERT); } return 0; } /*! * recogScaleCharacter() * * Input: recog * pixs (1 bpp, to be scaled) * Return: pixd (scaled) if OK, null on error */ PIX * recogScaleCharacter(L_RECOG *recog, PIX *pixs) { l_int32 w, h; PROCNAME("recogScaleCharacter"); if (!recog) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((recog->scalew == 0 || recog->scalew == w) && (recog->scaleh == 0 || recog->scaleh == h)) /* no scaling */ return pixClone(pixs); else return pixScaleToSize(pixs, recog->scalew, recog->scaleh); } /*! * recogAverageSamples() * * Input: recog * debug * Return: 0 on success, 1 on failure * * Notes: * (1) This is called when training is finished, and after * outliers have been removed. * Both unscaled and scaled inputs are averaged. * Averages must be computed before any identification is done. * (2) Set debug = 1 to view the resulting templates * and their centroids. */ l_int32 recogAverageSamples(L_RECOG *recog, l_int32 debug) { l_int32 i, nsamp, size, area; l_float32 x, y; PIXA *pixat, *pixa_sel; PIX *pix1, *pix2; PTA *ptat; PROCNAME("recogAverageSamples"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (recog->ave_done) { if (debug) /* always do this if requested */ recogShowAverageTemplates(recog); return 0; } /* Remove any previous averaging data */ size = recog->setsize; pixaDestroy(&recog->pixa_u); ptaDestroy(&recog->pta_u); numaDestroy(&recog->nasum_u); recog->pixa_u = pixaCreate(size); recog->pta_u = ptaCreate(size); recog->nasum_u = numaCreate(size); pixaDestroy(&recog->pixa); ptaDestroy(&recog->pta); numaDestroy(&recog->nasum); recog->pixa = pixaCreate(size); recog->pta = ptaCreate(size); recog->nasum = numaCreate(size); /* Unscaled bitmaps: compute averaged bitmap, centroid, and fg area */ for (i = 0; i < size; i++) { pixat = pixaaGetPixa(recog->pixaa_u, i, L_CLONE); ptat = ptaaGetPta(recog->ptaa_u, i, L_CLONE); nsamp = pixaGetCount(pixat); nsamp = L_MIN(nsamp, 256); /* we only use the first 256 */ if (nsamp == 0) { /* no information for this class */ pix1 = pixCreate(1, 1, 1); pixaAddPix(recog->pixa_u, pix1, L_INSERT); ptaAddPt(recog->pta_u, 0, 0); numaAddNumber(recog->nasum_u, 0); } else { pixaAccumulateSamples(pixat, ptat, &pix1, &x, &y); nsamp = (nsamp == 1) ? 2 : nsamp; /* special case thresh */ pix2 = pixThresholdToBinary(pix1, nsamp / 2); pixInvert(pix2, pix2); pixaAddPix(recog->pixa_u, pix2, L_INSERT); ptaAddPt(recog->pta_u, x, y); pixCountPixels(pix2, &area, recog->sumtab); numaAddNumber(recog->nasum_u, area); /* foreground */ pixDestroy(&pix1); } pixaDestroy(&pixat); ptaDestroy(&ptat); } /* Any classes for which there are no samples will have a 1x1 * pix as a placeholder. This must not be included when * finding the size range of the averaged templates. */ pixa_sel = pixaSelectBySize(recog->pixa_u, 5, 5, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); pixaSizeRange(pixa_sel, &recog->minwidth_u, &recog->minheight_u, &recog->maxwidth_u, &recog->maxheight_u); pixaDestroy(&pixa_sel); /* Scaled bitmaps: compute averaged bitmap, centroid, and fg area */ for (i = 0; i < size; i++) { pixat = pixaaGetPixa(recog->pixaa, i, L_CLONE); ptat = ptaaGetPta(recog->ptaa, i, L_CLONE); nsamp = pixaGetCount(pixat); nsamp = L_MIN(nsamp, 256); /* we only use the first 256 */ if (nsamp == 0) { /* no information for this class */ pix1 = pixCreate(1, 1, 1); pixaAddPix(recog->pixa, pix1, L_INSERT); ptaAddPt(recog->pta, 0, 0); numaAddNumber(recog->nasum, 0); } else { pixaAccumulateSamples(pixat, ptat, &pix1, &x, &y); nsamp = (nsamp == 1) ? 2 : nsamp; /* special case thresh */ pix2 = pixThresholdToBinary(pix1, nsamp / 2); pixInvert(pix2, pix2); pixaAddPix(recog->pixa, pix2, L_INSERT); ptaAddPt(recog->pta, x, y); pixCountPixels(pix2, &area, recog->sumtab); numaAddNumber(recog->nasum, area); /* foreground */ pixDestroy(&pix1); } pixaDestroy(&pixat); ptaDestroy(&ptat); } pixa_sel = pixaSelectBySize(recog->pixa, 5, 5, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); pixaSizeRange(pixa_sel, &recog->minwidth, NULL, &recog->maxwidth, NULL); pixaDestroy(&pixa_sel); /* Get min and max splitting dimensions */ recog->min_splitw = L_MAX(5, recog->minwidth_u - 5); recog->min_splith = L_MAX(5, recog->minheight_u - 5); recog->max_splith = recog->maxheight_u + 12; /* allow for skew */ if (debug) recogShowAverageTemplates(recog); recog->ave_done = TRUE; return 0; } /*! * pixaAccumulateSamples() * * Input: pixa (of samples from the same class, 1 bpp) * pta ( of centroids of the samples) * &ppixd ( accumulated samples, 8 bpp) * &px ( average x coordinate of centroids) * &py ( average y coordinate of centroids) * Return: 0 on success, 1 on failure * * Notes: * (1) This generates an aligned (by centroid) sum of the input pix. * (2) We use only the first 256 samples; that's plenty. * (3) If pta is not input, we generate two tables, and discard * after use. If this is called many times, it is better * to precompute the pta. */ l_int32 pixaAccumulateSamples(PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py) { l_int32 i, n, maxw, maxh, xdiff, ydiff; l_int32 *centtab, *sumtab; l_float32 x, y, xave, yave; PIX *pix1, *pix2, *pixsum; PTA *ptac; PROCNAME("pixaAccumulateSamples"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (px) *px = 0; if (py) *py = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); if (pta && ptaGetCount(pta) != n) return ERROR_INT("pta count differs from pixa count", procName, 1); n = L_MIN(n, 256); /* take the first 256 only */ if (n == 0) return ERROR_INT("pixa array empty", procName, 1); if (pta) { ptac = ptaClone(pta); } else { /* generate them here */ ptac = ptaCreate(n); centtab = makePixelCentroidTab8(); sumtab = makePixelSumTab8(); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); pixCentroid(pix1, centtab, sumtab, &xave, &yave); ptaAddPt(ptac, xave, yave); } FREE(centtab); FREE(sumtab); } /* Find the average value of the centroids */ xave = yave = 0; for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); xave += x; yave += y; } xave = xave / (l_float32)n; yave = yave / (l_float32)n; if (px) *px = xave; if (py) *py = yave; /* Place all centroids at their average value and sum the results */ pixaSizeRange(pixa, NULL, NULL, &maxw, &maxh); pixsum = pixInitAccumulate(maxw, maxh, 0); pix1 = pixCreate(maxw, maxh, 1); for (i = 0; i < n; i++) { pix2 = pixaGetPix(pixa, i, L_CLONE); ptaGetPt(ptac, i, &x, &y); xdiff = (l_int32)(x - xave); ydiff = (l_int32)(y - yave); pixClearAll(pix1); pixRasterop(pix1, xdiff, ydiff, maxw, maxh, PIX_SRC, pix2, 0, 0); pixAccumulate(pixsum, pix1, L_ARITH_ADD); pixDestroy(&pix2); } *ppixd = pixFinalAccumulate(pixsum, 0, 8); pixDestroy(&pix1); pixDestroy(&pixsum); ptaDestroy(&ptac); return 0; } /*! * recogTrainingFinished() * * Input: recog * debug * Return: 0 if OK, 1 on error * * Notes: * (1) This must be called after all training samples have been added. * (2) Set debug = 1 to view the resulting templates * and their centroids. * (3) The following things are done here: * (a) Allocate (or reallocate) storage for (possibly) scaled * bitmaps, centroids, and fg areas. * (b) Generate the (possibly) scaled bitmaps. * (c) Compute centroid and fg area data for both unscaled and * scaled bitmaps. * (d) Compute the averages for both scaled and unscaled bitmaps * (e) Truncate the pixaa, ptaa and numaa arrays down from * 256 to the actual size. * (4) Putting these operations here makes it simple to recompute * the recog with different scaling on the bitmaps. * (5) Removal of outliers must happen after this is called. */ l_int32 recogTrainingFinished(L_RECOG *recog, l_int32 debug) { l_int32 i, j, size, nc, ns, area; l_float32 xave, yave; PIX *pix, *pixd; PIXA *pixa; PIXAA *paa; PTA *pta; PTAA *ptaa; PROCNAME("recogTrainingFinished"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (recog->train_done) return 0; /* Generate the storage for the possibly-scaled training bitmaps */ size = recog->maxarraysize; paa = pixaaCreate(size); pixa = pixaCreate(1); pixaaInitFull(paa, pixa); pixaDestroy(&pixa); pixaaDestroy(&recog->pixaa); recog->pixaa = paa; /* Generate the storage for the unscaled centroid training data */ ptaa = ptaaCreate(size); pta = ptaCreate(0); ptaaInitFull(ptaa, pta); ptaaDestroy(&recog->ptaa_u); recog->ptaa_u = ptaa; /* Generate the storage for the possibly-scaled centroid data */ ptaa = ptaaCreate(size); ptaaInitFull(ptaa, pta); ptaDestroy(&pta); ptaaDestroy(&recog->ptaa); recog->ptaa = ptaa; /* Generate the storage for the fg area data */ numaaDestroy(&recog->naasum_u); numaaDestroy(&recog->naasum); recog->naasum_u = numaaCreateFull(size, 0); recog->naasum = numaaCreateFull(size, 0); paa = recog->pixaa_u; nc = recog->setsize; for (i = 0; i < nc; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); ns = pixaGetCount(pixa); for (j = 0; j < ns; j++) { /* Save centroid and area data for the unscaled pix */ pix = pixaGetPix(pixa, j, L_CLONE); pixCentroid(pix, recog->centtab, recog->sumtab, &xave, &yave); ptaaAddPt(recog->ptaa_u, i, xave, yave); pixCountPixels(pix, &area, recog->sumtab); numaaAddNumber(recog->naasum_u, i, area); /* foreground */ /* Insert the (optionally) scaled character image, and * save centroid and area data for it */ pixd = recogScaleCharacter(recog, pix); pixaaAddPix(recog->pixaa, i, pixd, NULL, L_INSERT); pixCentroid(pixd, recog->centtab, recog->sumtab, &xave, &yave); ptaaAddPt(recog->ptaa, i, xave, yave); pixCountPixels(pixd, &area, recog->sumtab); numaaAddNumber(recog->naasum, i, area); pixDestroy(&pix); } pixaDestroy(&pixa); } /* Get the template averages */ recog->ave_done = FALSE; recogAverageSamples(recog, debug); /* Truncate the arrays to those with non-empty containers */ pixaaTruncate(recog->pixaa_u); pixaaTruncate(recog->pixaa); ptaaTruncate(recog->ptaa_u); ptaaTruncate(recog->ptaa); numaaTruncate(recog->naasum_u); numaaTruncate(recog->naasum); recog->train_done = TRUE; return 0; } /*! * recogRemoveOutliers() * * Input: recog (after training samples are entered) * targetscore (keep everything with at least this score) * minfract (minimum fraction to retain) * debug (1 for debug output) * Return: 0 if OK, 1 on error * * Notes: * (1) Removing outliers is particularly important when recognition * goes against all the samples in the training set, as opposed * to the averages for each class. The reason is that we get * an identification error if a mislabeled sample is a best * match for an input bitmap. * (2) However, the score values depend strongly on the quality * of the character images. To avoid losing too many samples, * we supplement a target score for retention with a minimum * fraction that we must keep. With poor quality images, we * may keep samples with a score less than the targetscore, * in order to satisfy the @minfract requirement. * (3) We always require that at least one sample will be retained. * (4) Where the training set is from the same source (e.g., the * same book), use a relatively large minscore; say, ~0.8. * (5) Method: for each class, generate the averages and match each * scaled sample against the average. Decide which * samples will be ejected, and throw out both the * scaled and unscaled samples and associated data. * Recompute the average without the poor matches. */ l_int32 recogRemoveOutliers(L_RECOG *recog, l_float32 targetscore, l_float32 minfract, l_int32 debug) { l_int32 i, j, nremoved, n, nkeep, ngood, ival, area1, area2; l_float32 x1, y1, x2, y2, score, val; NUMA *nasum, *nasum_u, *nascore, *nainvert, *nasort; PIX *pix1, *pix2; PIXA *pixa, *pixa_u; PTA *pta, *pta_u; PROCNAME("recogRemoveOutliers"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (recog->train_done == FALSE) return ERROR_INT("recog training is not finished", procName, 1); targetscore = L_MIN(targetscore, 1.0); if (targetscore <= 0.0) targetscore = DEFAULT_TARGET_SCORE; minfract = L_MIN(minfract, 1.0); if (minfract <= 0.0) minfract = DEFAULT_MIN_FRACTION; nremoved = 0; for (i = 0; i < recog->setsize; i++) { /* Access the average template and values for scaled * images in this class */ pix1 = pixaGetPix(recog->pixa, i, L_CLONE); ptaGetPt(recog->pta, i, &x1, &y1); numaGetIValue(recog->nasum, i, &area1); /* Get the sorted scores for each sample in the class */ pixa = pixaaGetPixa(recog->pixaa, i, L_CLONE); pta = ptaaGetPta(recog->ptaa, i, L_CLONE); nasum = numaaGetNuma(recog->naasum, i, L_CLONE); n = pixaGetCount(pixa); nascore = numaCreate(n); for (j = 0; j < n; j++) { pix2 = pixaGetPix(pixa, j, L_CLONE); ptaGetPt(pta, j, &x2, &y2); numaGetIValue(nasum, j, &area2); pixCorrelationScoreSimple(pix1, pix2, area1, area2, x1 - x2, y1 - y2, 5, 5, recog->sumtab, &score); numaAddNumber(nascore, score); if (score == 0.0) /* typ. large size difference */ fprintf(stderr, "Got 0 score for i = %d, j = %d\n", i, j); pixDestroy(&pix2); } pixDestroy(&pix1); /* Symbolically, na[i] = nasort[nainvert[i]] */ numaSortGeneral(nascore, &nasort, NULL, &nainvert, L_SORT_DECREASING, L_SHELL_SORT); /* Determine the cutoff in samples to keep */ nkeep = (l_int32)(minfract * n + 0.5); ngood = n; for (j = 0; j < n; j++) { numaGetFValue(nasort, j, &val); if (val < targetscore) { ngood = j + 1; break; } } nkeep = L_MAX(1, L_MAX(nkeep, ngood)); nremoved += (n - nkeep); if (debug && nkeep < n) { fprintf(stderr, "Removing %d of %d items from class %d\n", n - nkeep, n, i); } /* Remove the samples with low scores. Iterate backwards * in the original arrays, because we're compressing them * in place as elements are removed, and we must preserve * the indexing of elements not yet removed. */ if (nkeep < n) { pixa_u = pixaaGetPixa(recog->pixaa_u, i, L_CLONE); pta_u = ptaaGetPta(recog->ptaa_u, i, L_CLONE); nasum_u = numaaGetNuma(recog->naasum_u, i, L_CLONE); for (j = n - 1; j >= 0; j--) { /* ival is nainvert[j], which is the index into * nasort that corresponds to the same element in * na that is indexed by j (i.e., na[j]). We retain * the first nkeep elements in nasort. */ numaGetIValue(nainvert, j, &ival); if (ival < nkeep) continue; pixaRemovePix(pixa, j); ptaRemovePt(pta, j); numaRemoveNumber(nasum, j); pixaRemovePix(pixa_u, j); ptaRemovePt(pta_u, j); numaRemoveNumber(nasum_u, j); if (debug) { numaGetFValue(nascore, j, &val); fprintf(stderr, " removed item %d: score %7.3f\n", ival, val); } } pixaDestroy(&pixa_u); ptaDestroy(&pta_u); numaDestroy(&nasum_u); } pixaDestroy(&pixa); ptaDestroy(&pta); numaDestroy(&nasum); numaDestroy(&nascore); numaDestroy(&nainvert); numaDestroy(&nasort); } /* If anything was removed, recompute the average templates */ if (nremoved > 0) { recog->samplenum -= nremoved; recog->ave_done = FALSE; /* force recomputation */ recogAverageSamples(recog, debug); } return 0; } /*------------------------------------------------------------------------* * Evaluate training status * *------------------------------------------------------------------------*/ /*! * recogaTrainingDone() * * Input: recoga * &done (1 if training finished on all recog; 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 recogaTrainingDone(L_RECOGA *recoga, l_int32 *pdone) { l_int32 i; L_RECOG *recog; PROCNAME("recogaTrainingDone"); if (!pdone) return ERROR_INT("&done not defined", procName, 1); *pdone = 0; if (!recoga) return ERROR_INT("recoga not defined", procName, 1); for (i = 0; i < recoga->n; i++) { if ((recog = recogaGetRecog(recoga, i)) == NULL) return ERROR_INT("recog not found", procName, 1); if (!recog->train_done) return 0; } *pdone = 1; return 0; } /*! * recogaFinishAveraging() * * Input: recoga * Return: 0 if OK, 1 on error */ l_int32 recogaFinishAveraging(L_RECOGA *recoga) { l_int32 i; L_RECOG *recog; PROCNAME("recogaFinishAveraging"); if (!recoga) return ERROR_INT("recoga not defined", procName, 1); for (i = 0; i < recoga->n; i++) { if ((recog = recogaGetRecog(recoga, i)) == NULL) return ERROR_INT("recog not found", procName, 1); if (!recog->ave_done) recogAverageSamples(recog, 0); } return 0; } /*------------------------------------------------------------------------* * Training on unlabelled data * *------------------------------------------------------------------------*/ /*! * recogTrainUnlabelled() * * Input: recog (in training mode: the input characters in pixs are * inserted after labelling) * recogboot (labels the input) * pixs (if depth > 1, will be thresholded to 1 bpp) * box ( cropping box) * singlechar (1 if pixs is a single character; 0 otherwise) * minscore (min score for accepting the example; e.g., 0.75) * debug (1 for debug output saved to recog; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This trains on unlabelled data, using a bootstrap recognizer * to apply the labels. In this way, we can build a recognizer * using a source of unlabelled data. * (2) The input pix can have several (non-touching) characters. * If box != NULL, we treat the region in the box as a single char * If box == NULL, use all of pixs: * if singlechar == 0, we identify each c.c. as a single character * if singlechar == 1, we treat pixs as a single character * Multiple chars are identified separately by recogboot and * inserted into recog. * (3) recogboot is a trained recognizer. It would typically be * constructed from a variety of sources, and use the average * templates for scoring. * (4) For debugging, if bmf is defined in the recog, the correlation * scores are generated and saved (by adding to the pixadb_boot * field) with the matching images. */ l_int32 recogTrainUnlabelled(L_RECOG *recog, L_RECOG *recogboot, PIX *pixs, BOX *box, l_int32 singlechar, l_float32 minscore, l_int32 debug) { char *text; l_float32 score; NUMA *nascore, *na; PIX *pixc, *pixb, *pixdb; PIXA *pixa, *pixaf; PROCNAME("recogTrainUnlabelled"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!recogboot) return ERROR_INT("recogboot not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Optionally crop */ if (box) pixc = pixClipRectangle(pixs, box, NULL); else pixc = pixClone(pixs); /* Binarize if necessary */ if (pixGetDepth(pixc) > 1) pixb = pixConvertTo1(pixc, recog->threshold); else pixb = pixClone(pixc); pixDestroy(&pixc); /* Identify the components using recogboot */ if (singlechar == 1) { if (!debug) { recogIdentifyPix(recogboot, pixb, NULL); } else { recogIdentifyPix(recogboot, pixb, &pixdb); pixaAddPix(recog->pixadb_boot, pixdb, L_INSERT); } rchExtract(recogboot->rch, NULL, &score, &text, NULL, NULL, NULL, NULL); /* Threshold based on the score, and insert in a pixa */ pixaf = pixaCreate(1); if (score >= minscore) { pixSetText(pixb, text); pixaAddPix(pixaf, pixb, L_CLONE); FREE(text); /* In use pixs is "unlabelled", so we only find a text * string in the input pixs when testing with labelled data. */ if (debug && ((text = pixGetText(pixs)) != NULL)) L_INFO("Testing: input pix has character label: %s\n", procName, text); } } else { /* possibly multiple characters */ /* Split into characters */ pixSplitIntoCharacters(pixb, 5, 5, NULL, &pixa, NULL); if (!debug) { recogIdentifyPixa(recogboot, pixa, NULL, NULL); } else { recogIdentifyPixa(recogboot, pixa, NULL, &pixdb); pixaAddPix(recog->pixadb_boot, pixdb, L_INSERT); } /* Threshold the pixa based on the score */ rchaExtract(recogboot->rcha, NULL, &nascore, NULL, NULL, NULL, NULL, NULL); na = numaMakeThresholdIndicator(nascore, minscore, L_SELECT_IF_GTE); pixaf = pixaSelectWithIndicator(pixa, na, NULL); pixaDestroy(&pixa); numaDestroy(&nascore); numaDestroy(&na); } pixDestroy(&pixb); /* Insert the labelled components */ recogAddSamples(recog, pixaf, -1, debug); pixaDestroy(&pixaf); return 0; } /*------------------------------------------------------------------------* * Padding the training set * *------------------------------------------------------------------------*/ /*! * recogPadTrainingSet() * * Input: &recog (to be replaced if padding or more drastic measures * are necessary; otherwise, it is unchanged.) * debug (1 for debug output saved to recog; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) Before calling this, call recogSetPadParams() if you want * non-default values for the character set type, min_nopad * and max_afterpad values, and paths for labelled bitmap * character sets that can be used to augment an input recognizer. * (2) If all classes in @recog have at least min_nopad samples, * nothing is done. If the total number of samples in @recog * is very small, @recog is replaced by a boot recog from the * specified bootpath. Otherwise (the intermediate case), * @recog is replaced by one with scaling to fixed height, * where an array of recog are used to augment the input recog. * (3) If padding or total replacement is done, this destroys * the input recog and replaces it by a new one. If the recog * belongs to a recoga, the replacement is also done in the recoga. */ l_int32 recogPadTrainingSet(L_RECOG **precog, l_int32 debug) { const char *bootdir, *bootpattern, *bootpath; char *boottext, *fontdir; l_int32 i, k, min_nopad, npix, nclass, nboot, nsamp, nextra, ntoadd; l_int32 ave_height, targeth, setid, index, allclasses; l_int32 *lut; l_float32 minval, sum; NUMA *naclass, *naheight, *naset, *naindex, *nascore, *naave; PIX *pix1, *pix2; PIXA *pixaboot, *pixa1, *pixa2, *pixadb; PIXAA *paa, *paa1; L_RECOG *rec1, *recog, *recogboot; L_RECOGA *recoga; PROCNAME("recogPadTrainingSet"); if (!precog) return ERROR_INT("&recog not defined", procName, 1); if ((recog = *precog) == NULL) return ERROR_INT("recog not defined", procName, 1); /* ------------------------------------------------- * First, test if we need to use a boot recognizer. * ------------------------------------------------- */ /* Are we asking for any padding at all? */ min_nopad = recog->min_nopad; if (min_nopad <= 0) return 0; /* Do we have samples from all classes? */ paa = recog->pixaa_u; /* unscaled bitmaps */ nclass = pixaaGetCount(paa, &naclass); allclasses = (nclass == recog->charset_size) ? 1 : 0; /* Are there enough samples in each class already? */ numaGetMin(naclass, &minval, NULL); numaDestroy(&naclass); if (allclasses && minval >= min_nopad) return 0; /* --------------------------------------------------------- * We need a boot recognizer. If there are too few characters * in the input recog, don't bother with padding. Destroy the * input recog and return a generic boot recognizer that will * be run using scaling both width and height. * ----------------------------------------------------------*/ fontdir = (recog->fontdir) ? stringNew(recog->fontdir) : NULL; if (recog->samplenum < MIN_TOTAL_SAMPLES) { L_WARNING("too few samples in recog; using bootrecog only\n", procName); bootpath = recog->bootpath; L_INFO("boot path = %s\n", procName, bootpath); if ((pixaboot = pixaRead(bootpath)) == NULL) return ERROR_INT("pixaboot not read", procName, 1); rec1 = recogCreateFromPixa(pixaboot, 20, 32, L_USE_AVERAGE, 100, 1, fontdir); recogReplaceInRecoga(&recog, rec1); /* destroys recog */ *precog = rec1; pixaDestroy(&pixaboot); FREE(fontdir); return 0; } /* --------------------------------------------------------- * We need to pad the input recog. Do this with an array of * boot recog with different 'fonts'. For each class that must * be padded with samples, choose the boot recog from the recog * array that has the best correlation to samples of that class. * --------------------------------------------------------- */ /* Do we have boot recog for this charset? * TODO: add some more of 'em */ if (recogCharsetAvailable(recog->charset_type) == FALSE) return ERROR_INT("charset type not available", procName, 1); bootdir = recog->bootdir; bootpattern = recog->bootpattern; L_INFO("dir = %s; pattern = %s\n", procName, bootdir, bootpattern); L_INFO("min_nopad = %d; max_afterpad = %d\n", procName, min_nopad, recog->max_afterpad); /* To pad the input recognizer, use an array of recog, generated * from pixa with files specified by bootdir and bootpattern. * The samples are scaled to h = 32 to allow correlation with the * averages from a copy of the input recog, also scaled to h = 32. */ if ((paa1 = pixaaReadFromFiles(bootdir, bootpattern, 0, 0)) == NULL) return ERROR_INT("boot recog files not found", procName, 1); recoga = recogaCreateFromPixaa(paa1, 0, 32, L_USE_AVERAGE, 100, 1, fontdir); pixaaDestroy(&paa1); if (!recoga) return ERROR_INT("recoga not made", procName, 1); /* The parameters of the input recog must match those of the * boot array. Replace the input recog with a new one, that * uses the average templates for matching, scaled to h = 32. */ rec1 = recogCreateFromRecog(recog, 0, 32, L_USE_AVERAGE, 100, 1, fontdir); recogReplaceInRecoga(&recog, rec1); /* destroys recog */ *precog = rec1; recog = rec1; FREE(fontdir); /* Now for each class in the recog, decide which recog in recoga * should be used to select samples for padding the recog. */ pixadb = (debug) ? pixaCreate(0) : NULL; recogBestCorrelForPadding(rec1, recoga, &naset, &naindex, &nascore, &naave, &pixadb); if (pixadb) { numaWriteStream(stderr, naset); numaWriteStream(stderr, naindex); numaWriteStream(stderr, nascore); numaWriteStream(stderr, naave); pix1 = pixaDisplayLinearly(pixadb, L_VERT, 1.0, 0, 20, 0, NULL); pixWrite("/tmp/padmatch.png", pix1, IFF_PNG); pixDestroy(&pix1); pixaDestroy(&pixadb); } /* Allow more examples to be added to the input/returned recog */ recog->train_done = FALSE; /* --------------------------------------------------------- * For the existing classes in recog, add samples from the boot * recognizer where needed. For each sample, scale isotropically * to the average unscaled height for the given class. * ----------------------------------------------------------*/ recogAverageClassGeom(recog, NULL, &naheight); numaGetSum(naheight, &sum); paa = recog->pixaa_u; pixaaGetCount(paa, &naclass); ave_height = (l_int32)(sum / nclass); for (i = 0; i < nclass; i++) { numaGetIValue(naclass, i, &npix); if (npix >= min_nopad) continue; numaGetIValue(naheight, i, &targeth); /* Locate the images to be added */ numaGetIValue(naset, i, &setid); if ((rec1 = recogaGetRecog(recoga, setid)) == NULL) { L_ERROR("For class %d, didn't find recog %d\n", procName, i, setid); continue; } numaGetIValue(naindex, i, &index); /* class index in rec */ if ((pixa1 = pixaaGetPixa(rec1->pixaa_u, index, L_CLONE)) == NULL) { L_ERROR("For recog %d, didn't find class %d\n", procName, setid, index); continue; } /* Decide how many of them to scale and add */ nboot = pixaGetCount(pixa1); nextra = recog->max_afterpad - npix; if (nextra <= 0) continue; /* this should not be triggered */ ntoadd = L_MIN(nextra, nboot); L_INFO("For class %d, using %d samples from index %d in recog %d\n", procName, i, ntoadd, index, setid); /* Add them */ pixa2 = pixaCreate(ntoadd); boottext = sarrayGetString(rec1->sa_text, index, L_NOCOPY); for (k = 0; k < ntoadd; k++) { pix1 = pixaGetPix(pixa1, k, L_CLONE); pix2 = pixScaleToSize(pix1, 0, targeth); pixSetText(pix2, boottext); pixaAddPix(pixa2, pix2, L_INSERT); pixDestroy(&pix1); } recogAddSamples(recog, pixa2, i, 0); pixaDestroy(&pixa1); pixaDestroy(&pixa2); } /* --------------------------------------------------------------- * Check if there are missing classes. If there are, add these * classes and use samples from the bootrecog with the highest * overall correlation with the input recog. Use the average * unscaled height of all the recog classes, which should be fine * for all-caps, where character heights are similar, but may give * bad estimates for old digit fonts where the digits "0", "1" and * "2" are often shorter. * ------------------------------------------------------------ */ numaGetMax(naave, NULL, &index); /* best of the recoga set */ recogboot = recogaGetRecog(recoga, index); nboot = recogGetCount(recogboot); L_INFO("nboot = %d, nclass = %d, best index = %d\n", procName, nboot, nclass, index); if (nboot > nclass) { /* missing some classes in recog */ L_INFO("Adding %d classes to the recog\n", procName, nboot - nclass); targeth = ave_height; if ((lut = recogMapIndexToIndex(recogboot, recog)) == NULL) return ERROR_INT("index-to-index lut not made", procName, 1); for (i = 0; i < nboot; i++) { if (lut[i] >= 0) /* already have this class */ continue; pixaboot = pixaaGetPixa(recogboot->pixaa_u, i, L_CLONE); nsamp = pixaGetCount(pixaboot); ntoadd = L_MIN(recog->max_afterpad, nsamp); pixa1 = pixaCreate(ntoadd); boottext = sarrayGetString(recogboot->sa_text, i, L_NOCOPY); L_INFO("Adding %d chars of type '%s' from recog %d\n", procName, ntoadd, boottext, index); for (k = 0; k < ntoadd; k++) { pix1 = pixaGetPix(pixaboot, k, L_CLONE); pix2 = pixScaleToSize(pix1, 0, targeth); pixSetText(pix2, boottext); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } recogAddSamples(recog, pixa1, -1, debug); pixaDestroy(&pixaboot); pixaDestroy(&pixa1); } FREE(lut); } recogTrainingFinished(recog, 0); if (debug) { recogShowContent(stderr, recog, 1); recogDebugAverages(recog, 1); } numaDestroy(&naclass); numaDestroy(&naheight); numaDestroy(&naset); numaDestroy(&naindex); numaDestroy(&nascore); numaDestroy(&naave); recogaDestroy(&recoga); return 0; } /*! * recogMapIndexToIndex() * * Input: recog1 * recog2 * Return: lut (from recog1 --> recog2), or null on error * * Notes: * (1) This returns a map from each index in recog1 to the * corresponding index in recog2. Caller must free. * (2) If the character string doesn't exist in any of the classes * in recog2, the value -1 is inserted in the lut. */ static l_int32 * recogMapIndexToIndex(L_RECOG *recog1, L_RECOG *recog2) { char *charstr; l_int32 index1, index2, n1; l_int32 *lut; PROCNAME("recogMapIndexToIndex"); if (!recog1 || !recog2) return (l_int32 *)ERROR_PTR("recog1 and recog2 not both defined", procName, NULL); n1 = recog1->setsize; if ((lut = (l_int32 *)CALLOC(n1, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("lut not made", procName, NULL); for (index1 = 0; index1 < n1; index1++) { recogGetClassString(recog1, index1, &charstr); if (!charstr) { L_ERROR("string not found for index %d\n", procName, index1); lut[index1] = -1; continue; } recogStringToIndex(recog2, charstr, &index2); lut[index1] = index2; FREE(charstr); } return lut; } /*! * recogAverageClassGeom() * * Input: recog * &naw ( average widths for each class) * &nah ( average heights for each class) * Return: 0 if OK, 1 on error */ static l_int32 recogAverageClassGeom(L_RECOG *recog, NUMA **pnaw, NUMA **pnah) { l_int32 i, j, w, h, sumw, sumh, npix, nclass; NUMA *naw, *nah; PIXA *pixa; PROCNAME("recogAverageClassGeom"); if (!pnaw && !pnah) return ERROR_INT("nothing to do", procName, 1); if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((nclass = pixaaGetCount(recog->pixaa_u, NULL)) == 0) return ERROR_INT("no classes", procName, 1); naw = numaCreate(nclass); nah = numaCreate(nclass); for (i = 0; i < nclass; i++) { if ((pixa = pixaaGetPixa(recog->pixaa_u, i, L_CLONE)) == NULL) { L_WARNING("pixa[%d] not found\n", procName, i); continue; } sumw = sumh = 0; npix = pixaGetCount(pixa); for (j = 0; j < npix; j++) { pixaGetPixDimensions(pixa, j, &w, &h, NULL); sumw += w; sumh += h; } numaAddNumber(naw, (l_int32)((l_float32)sumw / npix + 0.5)); numaAddNumber(nah, (l_int32)((l_float32)sumh / npix + 0.5)); pixaDestroy(&pixa); } if (pnaw) *pnaw = naw; else numaDestroy(&naw); if (pnah) *pnah = nah; else numaDestroy(&nah); return 0; } /*! * recogBestCorrelForPadding() * * Input: recog (typically the recog to be padded) * recoga (array of recogs for potentially providing the padding) * &naset ( of indices into the sets to be matched) * &naindex ( of matching indices into the best set) * &nascore ( of best correlation scores) * &naave ( average of correlation scores from each recog) * &pixadb ( debug images; use NULL for no debug) * Return: 0 if OK, 1 on error * * Notes: * (1) This finds, for each class in recog, the best matching template * in the recoga. For that best match, it returns: * * the recog set index in the recoga, * * the index in that recog for the class, * * the score for the best match * (2) It also returns in @naave, for each recog in recoga, the * average overall correlation for all averaged templates to * those in the input recog. The recog with the largest average * can supply templates in cases where the input recog has * no examples. * (3) For classes in recog1 for which no corresponding class * is found in any recog in recoga, the index -1 is stored * in both naset and naindex, and 0.0 is stored in nascore. * (4) Both recog and all the recog in recoga should be generated * with isotropic scaling to the same character height (e.g., 30). */ l_int32 recogBestCorrelForPadding(L_RECOG *recog, L_RECOGA *recoga, NUMA **pnaset, NUMA **pnaindex, NUMA **pnascore, NUMA **pnasum, PIXA **ppixadb) { l_int32 i, j, n, nrec, index, maxindex, maxset; l_float32 score, maxscore; NUMA *nain, *nasc, *naset, *naindex, *nascore, *nasum; NUMAA *naain, *naasc; L_RECOG *rec; PROCNAME("recogBestCorrelForPadding"); if (!pnaset) return ERROR_INT("&naset not defined", procName, 1); *pnaset = NULL; if (!pnaindex) return ERROR_INT("&naindex not defined", procName, 1); *pnaindex = NULL; if (!pnascore) return ERROR_INT("&nascore not defined", procName, 1); *pnascore = NULL; if (!pnasum) return ERROR_INT("&nasum not defined", procName, 1); *pnasum = NULL; if (!recog) return ERROR_INT("recog is not defined", procName, 1); if (!recoga) return ERROR_INT("recoga is not defined", procName, 1); if (!recog->train_done) return ERROR_INT("recog training is not finished", procName, 1); /* Gather the correlation data */ n = recog->setsize; nrec = recogaGetCount(recoga); if (n == 0 || nrec == 0) return ERROR_INT("recog or recoga is empty", procName, 1); naain = numaaCreate(nrec); naasc = numaaCreate(nrec); for (i = 0; i < nrec; i++) { rec = recogaGetRecog(recoga, i); recogCorrelAverages(recog, rec, &nain, &nasc, ppixadb); numaaAddNuma(naain, nain, L_INSERT); numaaAddNuma(naasc, nasc, L_INSERT); } /* Find the best matches */ naset = numaCreate(n); naindex = numaCreate(n); nascore = numaCreate(n); nasum = numaMakeConstant(0.0, nrec); /* accumulate sum over recognizers */ for (i = 0; i < n; i++) { /* over classes in recog */ maxscore = 0.0; maxindex = -1; maxset = -1; for (j = 0; j < nrec; j++) { /* over recognizers */ numaaGetValue(naain, j, i, NULL, &index); /* index in j to i */ if (index == -1) continue; numaaGetValue(naasc, j, i, &score, NULL); /* score in j to i */ numaAddToNumber(nasum, j, score); if (score > maxscore) { maxscore = score; maxindex = index; maxset = j; } } numaAddNumber(naset, maxset); numaAddNumber(naindex, maxindex); numaAddNumber(nascore, maxscore); } *pnaset = naset; *pnaindex = naindex; *pnascore = nascore; *pnasum = numaTransform(nasum, 0.0, 1. / (l_float32)n); numaDestroy(&nasum); numaaDestroy(&naain); numaaDestroy(&naasc); return 0; } /*! * recogCorrelAverages() * * Input: recog1 (typically the recog to be padded) * recog2 (potentially providing the padding) * &naindex ( of classes in 2 with respect to classes in 1) * &nascore ( correlation scores of corresponding classes) * &pixadb ( debug images) * Return: 0 if OK, 1 on error * * Notes: * (1) Use this for potentially padding recog1 with instances in recog2. * The recog have been generated with isotropic scaling to the * same fixed height (e.g., 30). The training has been "finished" * in the sense that all arrays have been computed and they * could potentially be used as they are. This is necessary * for doing the correlation between scaled images. * However, this function is called when there is a request to * augument some of the examples in classes in recog1. * (2) Iterate over classes in recog1, finding the corresponding * class in recog2 and computing the correlation score between * the average templates of the two. naindex is a LUT between * the index of a class in recog1 and the corresponding one in recog2. * (3) For classes in recog1 that do not exist in recog2, the index * -1 is stored in naindex, and 0.0 is stored in the score. */ l_int32 recogCorrelAverages(L_RECOG *recog1, L_RECOG *recog2, NUMA **pnaindex, NUMA **pnascore, PIXA **ppixadb) { l_int32 i1, i2, n1, area1, area2, wvar; l_int32 *lut; l_float32 x1, y1, x2, y2, score; PIX *pix1, *pix2; PIXA *pixa1; PROCNAME("recogCorrelAverages"); if (!pnaindex) return ERROR_INT("&naindex not defined", procName, 1); *pnaindex = NULL; if (!pnascore) return ERROR_INT("&nascore not defined", procName, 1); *pnascore = NULL; if (!recog1 || !recog2) return ERROR_INT("recog1 and recog2 not both defined", procName, 1); if (!recog1->train_done || !recog2->train_done) return ERROR_INT("recog training is not finished", procName, 1); if ((lut = recogMapIndexToIndex(recog1, recog2)) == NULL) return ERROR_INT("index-to-index lut not made", procName, 1); n1 = recog1->setsize; *pnaindex = numaCreateFromIArray(lut, n1); *pnascore = numaMakeConstant(0.0, n1); pixa1 = (ppixadb) ? pixaCreate(n1) : NULL; for (i1 = 0; i1 < n1; i1++) { /* Access the average templates and values for this class */ if ((i2 = lut[i1]) == -1) { L_INFO("no class in 2 corresponds to index %d in 1\n", procName, i1); continue; } pix1 = pixaGetPix(recog1->pixa, i1, L_CLONE); ptaGetPt(recog1->pta, i1, &x1, &y1); numaGetIValue(recog1->nasum, i1, &area1); pix2 = pixaGetPix(recog2->pixa, i2, L_CLONE); ptaGetPt(recog2->pta, i2, &x2, &y2); numaGetIValue(recog2->nasum, i2, &area2); /* Find their correlation and save the results. * The heights should all be scaled to the same value (e.g., 30), * but the widths can vary, so we need a large tolerance (wvar) * to force correlation between all templates. */ wvar = 0.6 * recog1->scaleh; pixCorrelationScoreSimple(pix1, pix2, area1, area2, x1 - x2, y1 - y2, wvar, 0, recog1->sumtab, &score); numaSetValue(*pnascore, i1, score); debugAddImage1(pixa1, pix1, pix2, recog1->bmf, score); pixDestroy(&pix1); pixDestroy(&pix2); } debugAddImage2(ppixadb, pixa1, recog1->bmf, recog2->index); pixaDestroy(&pixa1); FREE(lut); return 0; } /*! * recogSetPadParams() * * Input: recog (to be padded, if necessary) * bootdir ( directory to bootstrap labelled pixa) * bootpattern ( pattern for bootstrap labelled pixa) * bootpath ( path to single bootstrap labelled pixa) * type (character set type; -1 for default; see enum in recog.h) * size (character set size; -1 for default) * min_nopad (min number in a class without padding; -1 default) * max_afterpad (max number of samples in padded classes; * -1 for default) * Return: 0 if OK, 1 on error * * Notes: * (1) This is used to augment or replace a book-adapted recognizer (BAR). * It is called when the recognizer is created, and must be * called again before recogPadTrainingSet() if non-default * values are to be used. * (2) Default values allow for some padding. To disable padding, * set @min_nopad = 0. * (3) Constraint on @min_nopad and @max_afterpad guarantees that * padding will be allowed if requested. * (4) The file directory (@bootdir) and tail pattern (@bootpattern) * are used to identify serialized pixa, from which we can * generate an array of recog. These can be used to augment * an input but incomplete BAR (book adapted recognizer). * (5) If the BAR is very sparse, we will ignore it and use a generic * bootstrap recognizer at @bootpath. */ l_int32 recogSetPadParams(L_RECOG *recog, const char *bootdir, const char *bootpattern, const char *bootpath, l_int32 type, l_int32 min_nopad, l_int32 max_afterpad) { PROCNAME("recogSetPadParams"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (min_nopad >= 0 && max_afterpad >= 0 && min_nopad >= max_afterpad) return ERROR_INT("min_ must be less than max_", procName, 1); FREE(recog->bootdir); FREE(recog->bootpattern); FREE(recog->bootpath); recog->bootdir = (bootdir) ? stringNew(bootdir) : stringNew(DEFAULT_BOOT_DIR); recog->bootpattern = (bootpattern) ? stringNew(bootpattern) : stringNew(DEFAULT_BOOT_PATTERN); recog->bootpath = (bootpath) ? stringNew(bootpath) : stringNew(DEFAULT_BOOT_PATH); recog->charset_type = (type >= 0) ? type : DEFAULT_CHARSET_TYPE; recog->charset_size = recogGetCharsetSize(recog->charset_type); recog->min_nopad = (min_nopad >= 0) ? min_nopad : DEFAULT_MIN_NOPAD; recog->max_afterpad = (max_afterpad >= 0) ? max_afterpad : DEFAULT_MAX_AFTERPAD; return 0; } /*! * recogGetCharsetSize() * * Input: type (of charset) * Return: size of charset, or 0 if unknown or on error */ static l_int32 recogGetCharsetSize(l_int32 type) { PROCNAME("recogGetCharsetSize"); switch (type) { case L_UNKNOWN: return 0; case L_ARABIC_NUMERALS: return 10; case L_LC_ROMAN_NUMERALS: return 7; case L_UC_ROMAN_NUMERALS: return 7; case L_LC_ALPHA: return 26; case L_UC_ALPHA: return 26; default: L_ERROR("invalid charset_type %d\n", procName, type); return 0; } return 0; /* shouldn't happen */ } /*! * recogCharsetAvailable() * * Input: type (of charset for padding) * Return: 1 if available; 0 if not. */ static l_int32 recogCharsetAvailable(l_int32 type) { l_int32 ret; PROCNAME("recogCharsetAvailable"); switch (type) { case L_ARABIC_NUMERALS: ret = TRUE; break; case L_LC_ROMAN_NUMERALS: case L_UC_ROMAN_NUMERALS: case L_LC_ALPHA: case L_UC_ALPHA: L_INFO("charset type %d not available", procName, type); ret = FALSE; break; default: L_INFO("charset type %d is unknown", procName, type); ret = FALSE; break; } return ret; } /*------------------------------------------------------------------------* * Debugging * *------------------------------------------------------------------------*/ /*! * recogaShowContent() * * Input: stream * recoga * display (1 for showing template images, 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 recogaShowContent(FILE *fp, L_RECOGA *recoga, l_int32 display) { l_int32 i, n; L_RECOG *recog; PROCNAME("recogaShowContent"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!recoga) return ERROR_INT("recog not defined", procName, 1); if ((n = recogaGetCount(recoga)) == 0) return ERROR_INT("no recog found", procName, 1); fprintf(fp, "\nDebug print of recoga contents:\n"); for (i = 0; i < n; i++) { if ((recog = recogaGetRecog(recoga, i)) == NULL) { L_ERROR("recog %d not found!\n", procName, i); continue; } fprintf(fp, "\nRecog %d:\n", i); if (recog->train_done == FALSE) L_WARNING("training for recog %d is not finished\n", procName, i); recogShowContent(fp, recog, display); } return 0; } /*! * recogShowContent() * * Input: stream * recog * display (1 for showing template images, 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 recogShowContent(FILE *fp, L_RECOG *recog, l_int32 display) { l_int32 i, val, count; PIX *pix; NUMA *na; PROCNAME("recogShowContent"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!recog) return ERROR_INT("recog not defined", procName, 1); fprintf(fp, "Debug print of recog contents\n"); fprintf(fp, " Setsize: %d\n", recog->setsize); fprintf(fp, " Binarization threshold: %d\n", recog->threshold); fprintf(fp, " Maximum matching y-jiggle: %d\n", recog->maxyshift); if (recog->templ_type == L_USE_ALL) fprintf(fp, " Using all samples for matching\n"); else fprintf(fp, " Using averaged template for matching\n"); if (recog->scalew == 0) fprintf(fp, " No width scaling of templates\n"); else fprintf(fp, " Template width scaled to %d\n", recog->scalew); if (recog->scaleh == 0) fprintf(fp, " No height scaling of templates\n"); else fprintf(fp, " Template height scaled to %d\n", recog->scaleh); fprintf(fp, " Number of samples in each class:\n"); pixaaGetCount(recog->pixaa_u, &na); for (i = 0; i < recog->setsize; i++) { l_dnaGetIValue(recog->dna_tochar, i, &val); numaGetIValue(na, i, &count); if (val < 128) fprintf(fp, " class %d, char %c: %d\n", i, val, count); else fprintf(fp, " class %d, val %d: %d\n", i, val, count); } numaDestroy(&na); if (display) { pix = pixaaDisplayByPixa(recog->pixaa_u, 20, 20, 1000); pixDisplay(pix, 0, 0); pixDestroy(&pix); if (recog->train_done) { pix = pixaaDisplayByPixa(recog->pixaa, 20, 20, 1000); pixDisplay(pix, 800, 0); pixDestroy(&pix); } } return 0; } /*! * recogDebugAverages() * * Input: recog * debug (0 no output; 1 for images; 2 for text; 3 for both) * Return: 0 if OK, 1 on error * * Notes: * (1) Generates an image that pairs each of the input images used * in training with the average template that it is best * correlated to. This is written into the recog. * (2) It also generates pixa_tr of all the input training images, * which can be used, e.g., in recogShowMatchesInRange(). */ l_int32 recogDebugAverages(L_RECOG *recog, l_int32 debug) { l_int32 i, j, n, np, index; l_float32 score; PIX *pix1, *pix2, *pix3; PIXA *pixa, *pixat; PIXAA *paa1, *paa2; PROCNAME("recogDebugAverages"); if (!recog) return ERROR_INT("recog not defined", procName, 1); /* Mark the training as finished if necessary, and make sure * that the average templates have been built. */ recogAverageSamples(recog, 0); paa1 = recog->pixaa; /* Save a pixa of all the training examples */ if (!recog->pixa_tr) recog->pixa_tr = pixaaFlattenToPixa(paa1, NULL, L_CLONE); /* Destroy any existing image and make a new one */ if (recog->pixdb_ave) pixDestroy(&recog->pixdb_ave); n = pixaaGetCount(paa1, NULL); paa2 = pixaaCreate(n); for (i = 0; i < n; i++) { pixa = pixaCreate(0); pixat = pixaaGetPixa(paa1, i, L_CLONE); np = pixaGetCount(pixat); for (j = 0; j < np; j++) { pix1 = pixaaGetPix(paa1, i, j, L_CLONE); recogIdentifyPix(recog, pix1, &pix2); rchExtract(recog->rch, &index, &score, NULL, NULL, NULL, NULL, NULL); if (debug >= 2) fprintf(stderr, "index = %d, score = %7.3f\n", index, score); pix3 = pixAddBorder(pix2, 2, 1); pixaAddPix(pixa, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pixaaAddPixa(paa2, pixa, L_INSERT); pixaDestroy(&pixat); } recog->pixdb_ave = pixaaDisplayByPixa(paa2, 20, 20, 2500); if (debug % 2) pixDisplay(recog->pixdb_ave, 100, 100); pixaaDestroy(&paa2); return 0; } /*! * recogShowAverageTemplates() * * Input: recog * Return: 0 on success, 1 on failure * * Notes: * (1) This debug routine generates a display of the averaged templates, * both scaled and unscaled, with the centroid visible in red. */ l_int32 recogShowAverageTemplates(L_RECOG *recog) { l_int32 i, size; l_float32 x, y; PIX *pix1, *pix2, *pixr; PIXA *pixat, *pixadb; PROCNAME("recogShowAverageTemplates"); if (!recog) return ERROR_INT("recog not defined", procName, 1); fprintf(stderr, "minwidth_u = %d, minheight_u = %d, maxheight_u = %d\n", recog->minwidth_u, recog->minheight_u, recog->maxheight_u); fprintf(stderr, "minw = %d, minh = %d, maxh = %d\n", recog->min_splitw, recog->min_splith, recog->max_splith); pixaDestroy(&recog->pixadb_ave); pixr = pixCreate(3, 3, 32); /* 3x3 red square for centroid location */ pixSetAllArbitrary(pixr, 0xff000000); pixadb = pixaCreate(2); /* Unscaled bitmaps */ size = recog->setsize; pixat = pixaCreate(size); for (i = 0; i < size; i++) { if ((pix1 = pixaGetPix(recog->pixa_u, i, L_CLONE)) == NULL) continue; pix2 = pixConvertTo32(pix1); ptaGetPt(recog->pta_u, i, &x, &y); pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3, PIX_SRC, pixr, 0, 0); pixaAddPix(pixat, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixat, 32, 3000, 1.0, 0, 20, 0); pixaAddPix(pixadb, pix1, L_INSERT); pixDisplay(pix1, 100, 100); pixaDestroy(&pixat); /* Scaled bitmaps */ pixat = pixaCreate(size); for (i = 0; i < size; i++) { if ((pix1 = pixaGetPix(recog->pixa, i, L_CLONE)) == NULL) continue; pix2 = pixConvertTo32(pix1); ptaGetPt(recog->pta, i, &x, &y); pixRasterop(pix2, (l_int32)(x - 0.5), (l_int32)(y - 0.5), 3, 3, PIX_SRC, pixr, 0, 0); pixaAddPix(pixat, pix2, L_INSERT); pixDestroy(&pix1); } pix1 = pixaDisplayTiledInRows(pixat, 32, 3000, 1.0, 0, 20, 0); pixaAddPix(pixadb, pix1, L_INSERT); pixDisplay(pix1, 100, 100); pixaDestroy(&pixat); pixDestroy(&pixr); recog->pixadb_ave = pixadb; return 0; } /*! * recogShowMatchesInRange() * * Input: recog * pixa (of 1 bpp images to match) * minscore, maxscore (range to include output) * display (to display the result) * Return: 0 if OK, 1 on error * * Notes: * (1) This gives a visual output of the best matches for a given * range of scores. Each pair of images can optionally be * labelled with the index of the best match and the correlation. * If the bmf has been previously made, it will be used here. * (2) To use this, save a set of 1 bpp images (labelled or * unlabelled) that can be given to a recognizer in a pixa. * Then call this function with the pixa and parameters * to filter a range of score. */ l_int32 recogShowMatchesInRange(L_RECOG *recog, PIXA *pixa, l_float32 minscore, l_float32 maxscore, l_int32 display) { l_int32 i, n, index, depth; l_float32 score; NUMA *nascore, *naindex; PIX *pix1, *pix2; PIXA *pixa1, *pixa2; PROCNAME("recogShowMatchesInRange"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); /* Run the recognizer on the set of images */ n = pixaGetCount(pixa); nascore = numaCreate(n); naindex = numaCreate(n); pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); recogIdentifyPix(recog, pix1, &pix2); rchExtract(recog->rch, &index, &score, NULL, NULL, NULL, NULL, NULL); numaAddNumber(nascore, score); numaAddNumber(naindex, index); pixaAddPix(pixa1, pix2, L_INSERT); pixDestroy(&pix1); } /* Filter the set and optionally add text to each */ pixa2 = pixaCreate(n); depth = 1; for (i = 0; i < n; i++) { numaGetFValue(nascore, i, &score); if (score < minscore || score > maxscore) continue; pix1 = pixaGetPix(pixa1, i, L_CLONE); numaGetIValue(naindex, i, &index); pix2 = recogShowMatch(recog, pix1, NULL, NULL, index, score); if (i == 0) depth = pixGetDepth(pix2); pixaAddPix(pixa2, pix2, L_INSERT); pixDestroy(&pix1); } /* Package it up */ pixDestroy(&recog->pixdb_range); if (pixaGetCount(pixa2) > 0) { recog->pixdb_range = pixaDisplayTiledInRows(pixa2, depth, 2500, 1.0, 0, 20, 1); if (display) pixDisplay(recog->pixdb_range, 300, 100); } else { L_INFO("no character matches in the range of scores\n", procName); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); numaDestroy(&nascore); numaDestroy(&naindex); return 0; } /*! * recogShowMatch() * * Input: recog * pix1 (input pix; several possibilities) * pix2 ( matching template) * box ( region in pix1 for which pix2 matches) * index (index of matching template; use -1 to disable printing) * score (score of match) * Return: pixd (pair of images, showing input pix and best template), * or null on error. * * Notes: * (1) pix1 can be one of these: * (a) The input pix alone, which can be either a single character * (box == NULL) or several characters that need to be * segmented. If more than character is present, the box * region is displayed with an outline. * (b) Both the input pix and the matching template. In this case, * pix2 and box will both be null. * (2) If the bmf has been made (by a call to recogMakeBmf()) * and the index >= 0, the index and score will be rendered; * otherwise their values will be ignored. */ PIX * recogShowMatch(L_RECOG *recog, PIX *pix1, PIX *pix2, BOX *box, l_int32 index, l_float32 score) { char buf[32]; L_BMF *bmf; PIX *pix3, *pix4, *pix5, *pixd; PIXA *pixa; PROCNAME("recogShowMatch"); if (!recog) return (PIX *)ERROR_PTR("recog not defined", procName, NULL); if (!pix1) return (PIX *)ERROR_PTR("pix1 not defined", procName, NULL); bmf = (recog->bmf && index >= 0) ? recog->bmf : NULL; if (!pix2 && !box && !bmf) /* nothing to do */ return pixCopy(NULL, pix1); pix3 = pixConvertTo32(pix1); if (box) pixRenderBoxArb(pix3, box, 1, 255, 0, 0); if (pix2) { pixa = pixaCreate(2); pixaAddPix(pixa, pix3, L_CLONE); pixaAddPix(pixa, pix2, L_CLONE); pix4 = pixaDisplayTiledInRows(pixa, 1, 500, 1.0, 0, 15, 0); pixaDestroy(&pixa); } else { pix4 = pixCopy(NULL, pix3); } pixDestroy(&pix3); if (bmf) { pix5 = pixAddBorderGeneral(pix4, 55, 55, 0, 0, 0xffffff00); snprintf(buf, sizeof(buf), "I = %d, S = %4.3f", index, score); pixd = pixAddSingleTextblock(pix5, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); pixDestroy(&pix5); } else { pixd = pixClone(pix4); } pixDestroy(&pix4); return pixd; } /*! * recogMakeBmf() * * Input: recog * fontdir (for bitmap fonts; typically "fonts") * size (of font; even integer between 4 and 20; default is 6) * Return: 0 if OK, 1 on error * * Notes: * (1) This can be used to (re)set the size of the font used for * debug labelling. */ l_int32 recogMakeBmf(L_RECOG *recog, const char *fontdir, l_int32 size) { PROCNAME("recogMakeBmf"); if (!recog || !fontdir) return ERROR_INT("recog and fontdir not both defined", procName, 1); if (size < 4 || size > 20 || (size % 2)) size = 6; if (size == recog->bmf_size) return 0; /* no change */ bmfDestroy(&recog->bmf); recog->bmf = bmfCreate(fontdir, size); recog->bmf_size = size; return 0; } /*------------------------------------------------------------------------* * Static helpers * *------------------------------------------------------------------------*/ static char * l_charToString(char byte) { char *str; str = (char *)CALLOC(2, sizeof(char)); str[0] = byte; return str; } /* * debugAddImage1() * * Input: pixa1 ( for accumulating pairs of images * pix1, pix2 * bmf * score (rendered using the bmf) * Return: void * * Notes: * (1) If pixa1 is NULL, do nothing. Otherwise, we add a pair of * images with a score. This is accumulated for each * corresponding class templates in the two recog. */ static void debugAddImage1(PIXA *pixa1, PIX *pix1, PIX *pix2, L_BMF *bmf, l_float32 score) { char buf[16]; PIX *pix3, *pix4, *pix5; PIXA *pixa2; if (!pixa1) return; pixa2 = pixaCreate(2); pix3 = pixAddBorder(pix1, 5, 0); pixaAddPix(pixa2, pix3, L_INSERT); pix3 = pixAddBorder(pix2, 5, 0); pixaAddPix(pixa2, pix3, L_INSERT); pix4 = pixaDisplayTiledInRows(pixa2, 32, 1000, 1.0, 0, 20, 2); snprintf(buf, sizeof(buf), "%5.3f", score); pix5 = pixAddSingleTextline(pix4, bmf, buf, 0xff000000, L_ADD_BELOW); pixaAddPix(pixa1, pix5, L_INSERT); pixDestroy(&pix4); pixaDestroy(&pixa2); return; } /* * debugAddImage2() * * Input: &pixadb ( * pixa1 ( accumulated pairs of images) * bmf * index (of recog in recoga) * Return: void * * Notes: * (1) If pixa1 is NULL, do nothing. * (2) If this is the first time this function is called, then * *ppixadb == NULL, so we create pixadb (storing the ptr at ppixadb). * (3) Display pixa1 into a pix and add to pixadb. * (4) Subsequent calls, for different recognizers that could be used * for augmenting the instances, add to pixadb. */ static void debugAddImage2(PIXA **ppixadb, PIXA *pixa1, L_BMF *bmf, l_int32 index) { char buf[16]; PIX *pix1, *pix2, *pix3, *pix4; if (!pixa1) return; if (ppixadb == NULL) { L_ERROR("@pixadb is NULL; shouldn't happen!\n", "debugAddImage2"); return; } if (*ppixadb == NULL) *ppixadb = pixaCreate(0); pix1 = pixaDisplayTiledInRows(pixa1, 32, 2000, 1.0, 0, 20, 0); snprintf(buf, sizeof(buf), "Recog %d", index); pix2 = pixAddSingleTextline(pix1, bmf, buf, 0xff000000, L_ADD_BELOW); pix3 = pixAddBorder(pix2, 5, 0); pix4 = pixAddBorder(pix3, 2, 1); pixaAddPix(*ppixadb, pix4, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); return; } leptonica-1.70/src/bbuffer.h0000644000175000017500000000510512270566061014066 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_BBUFFER_H #define LEPTONICA_BBUFFER_H /* * bbuffer.h * * Expandable byte buffer for reading data in from memory and * writing data out to other memory. * * This implements a queue of bytes, so data read in is put * on the "back" of the queue (i.e., the end of the byte array) * and data written out is taken from the "front" of the queue * (i.e., from an index marker "nwritten" that is initially set at * the beginning of the array.) As usual with expandable * arrays, we keep the size of the allocated array and the * number of bytes that have been read into the array. * * For implementation details, see bbuffer.c. */ struct ByteBuffer { l_int32 nalloc; /* size of allocated byte array */ l_int32 n; /* number of bytes read into to the array */ l_int32 nwritten; /* number of bytes written from the array */ l_uint8 *array; /* byte array */ }; typedef struct ByteBuffer BBUFFER; #endif /* LEPTONICA_BBUFFER_H */ leptonica-1.70/src/imageio.h0000664000175000017500000001674312262317771014104 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_IMAGEIO_H #define LEPTONICA_IMAGEIO_H /* ------------------ Image file format types -------------- */ /* * The IFF_DEFAULT flag is used to write the file out in the * same (input) file format that the pix was read from. If the pix * was not read from file, the input format field will be * IFF_UNKNOWN and the output file format will be chosen to * be compressed and lossless; namely, IFF_TIFF_G4 for d = 1 * and IFF_PNG for everything else. IFF_JP2 is for jpeg2000, which * is not supported in leptonica. * * In the future, new format types that have defined extensions * will be added before IFF_DEFAULT, and will be kept in sync with * the file format extensions in writefile.c. The positions of * file formats before IFF_DEFAULT will remain invariant. */ enum { IFF_UNKNOWN = 0, IFF_BMP = 1, IFF_JFIF_JPEG = 2, IFF_PNG = 3, IFF_TIFF = 4, IFF_TIFF_PACKBITS = 5, IFF_TIFF_RLE = 6, IFF_TIFF_G3 = 7, IFF_TIFF_G4 = 8, IFF_TIFF_LZW = 9, IFF_TIFF_ZIP = 10, IFF_PNM = 11, IFF_PS = 12, IFF_GIF = 13, IFF_JP2 = 14, IFF_WEBP = 15, IFF_LPDF = 16, IFF_DEFAULT = 17, IFF_SPIX = 18 }; /* ---------------------- Format header ids --------------------- */ enum { BMP_ID = 0x4d42, TIFF_BIGEND_ID = 0x4d4d, /* MM - for 'motorola' */ TIFF_LITTLEEND_ID = 0x4949 /* II - for 'intel' */ }; /* ------------------ Gray hinting in jpeg reader --------------- */ enum { L_HINT_GRAY = 1, /* only want grayscale information */ }; /* ------------------ Pdf formated encoding types --------------- */ enum { L_JPEG_ENCODE = 1, /* use dct encoding: 8 and 32 bpp, no cmap */ L_G4_ENCODE = 2, /* use ccitt g4 fax encoding: 1 bpp */ L_FLATE_ENCODE = 3, /* use flate encoding: any depth, cmap ok */ L_JP2K_ENCODE = 4 /* use jp2k encoding: 8 and 32 bpp, no cmap */ }; /* ------------------ Compressed image data --------------------- */ /* * In use, either datacomp or data85 will be produced, depending * on whether the data needs to be ascii85 encoded. PostScript * requires ascii85 encoding; pdf does not. * * For the colormap (flate compression only), PostScript uses ascii85 * encoding and pdf uses a bracketed array of space-separated * hex-encoded rgb triples. Only tiff g4 (type == L_G4_ENCODE) uses * the minisblack field. */ struct L_Compressed_Data { l_int32 type; /* encoding type: L_JPEG_ENCODE, etc */ l_uint8 *datacomp; /* gzipped raster data */ size_t nbytescomp; /* number of compressed bytes */ char *data85; /* ascii85-encoded gzipped raster data */ size_t nbytes85; /* number of ascii85 encoded bytes */ char *cmapdata85; /* ascii85-encoded uncompressed cmap */ char *cmapdatahex; /* hex pdf array for the cmap */ l_int32 ncolors; /* number of colors in cmap */ l_int32 w; /* image width */ l_int32 h; /* image height */ l_int32 bps; /* bits/sample; typ. 1, 2, 4 or 8 */ l_int32 spp; /* samples/pixel; typ. 1 or 3 */ l_int32 minisblack; /* tiff g4 photometry */ size_t nbytes; /* number of uncompressed raster bytes */ l_int32 res; /* resolution (ppi) */ }; typedef struct L_Compressed_Data L_COMP_DATA; /* ------------------------ Pdf multi-image flags ------------------------ */ enum { L_FIRST_IMAGE = 1, /* first image to be used */ L_NEXT_IMAGE = 2, /* intermediate image; not first or last */ L_LAST_IMAGE = 3 /* last image to be used */ }; /* ------------------ Intermediate pdf generation data -------------------- */ /* * This accumulates data for generating a pdf of a single page consisting * of an arbitrary number of images. * * None of the strings have a trailing newline. */ struct L_Pdf_Data { char *title; /* optional title for pdf */ l_int32 n; /* number of images */ l_int32 ncmap; /* number of colormaps */ struct L_Ptra *cida; /* array of compressed image data */ char *id; /* %PDF-1.2 id string */ char *obj1; /* catalog string */ char *obj2; /* metadata string */ char *obj3; /* pages string */ char *obj4; /* page string (variable data) */ char *obj5; /* content string (variable data) */ char *poststream; /* post-binary-stream string */ char *trailer; /* trailer string (variable data) */ struct Pta *xy; /* store (xpt, ypt) array */ struct Pta *wh; /* store (wpt, hpt) array */ struct Box *mediabox; /* bounding region for all images */ struct Sarray *saprex; /* pre-binary-stream xobject strings */ struct Sarray *sacmap; /* colormap pdf object strings */ struct L_Dna *objsize; /* sizes of each pdf string object */ struct L_Dna *objloc; /* location of each pdf string object */ l_int32 xrefloc; /* location of xref */ }; typedef struct L_Pdf_Data L_PDF_DATA; #endif /* LEPTONICA_IMAGEIO_H */ leptonica-1.70/src/edge.c0000664000175000017500000005526712237462462013375 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * edge.c * * Sobel edge detecting filter * PIX *pixSobelEdgeFilter() * * Two-sided edge gradient filter * PIX *pixTwoSidedEdgeFilter() * * Measurement of edge smoothness * l_int32 pixMeasureEdgeSmoothness() * NUMA *pixGetEdgeProfile() * l_int32 pixGetLastOffPixelInRun() * l_int32 pixGetLastOnPixelInRun() * * * The Sobel edge detector uses these two simple gradient filters. * * 1 2 1 1 0 -1 * 0 0 0 2 0 -2 * -1 -2 -1 1 0 -1 * * (horizontal) (vertical) * * To use both the vertical and horizontal filters, set the orientation * flag to L_ALL_EDGES; this sums the abs. value of their outputs, * clipped to 255. * * See comments below for displaying the resulting image with * the edges dark, both for 8 bpp and 1 bpp. */ #include "allheaders.h" /*----------------------------------------------------------------------* * Sobel edge detecting filter * *----------------------------------------------------------------------*/ /*! * pixSobelEdgeFilter() * * Input: pixs (8 bpp; no colormap) * orientflag (L_HORIZONTAL_EDGES, L_VERTICAL_EDGES, L_ALL_EDGES) * Return: pixd (8 bpp, edges are brighter), or null on error * * Notes: * (1) Invert pixd to see larger gradients as darker (grayscale). * (2) To generate a binary image of the edges, threshold * the result using pixThresholdToBinary(). If the high * edge values are to be fg (1), invert after running * pixThresholdToBinary(). * (3) Label the pixels as follows: * 1 4 7 * 2 5 8 * 3 6 9 * Read the data incrementally across the image and unroll * the loop. * (4) This runs at about 45 Mpix/sec on a 3 GHz processor. */ PIX * pixSobelEdgeFilter(PIX *pixs, l_int32 orientflag) { l_int32 w, h, d, i, j, wplt, wpld, gx, gy, vald; l_int32 val1, val2, val3, val4, val5, val6, val7, val8, val9; l_uint32 *datat, *linet, *datad, *lined; PIX *pixt, *pixd; PROCNAME("pixSobelEdgeFilter"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (orientflag != L_HORIZONTAL_EDGES && orientflag != L_VERTICAL_EDGES && orientflag != L_ALL_EDGES) return (PIX *)ERROR_PTR("invalid orientflag", procName, NULL); /* Add 1 pixel (mirrored) to each side of the image. */ if ((pixt = pixAddMirroredBorder(pixs, 1, 1, 1, 1)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); /* Compute filter output at each location. */ pixd = pixCreateTemplate(pixs); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (j == 0) { /* start a new row */ val1 = GET_DATA_BYTE(linet, j); val2 = GET_DATA_BYTE(linet + wplt, j); val3 = GET_DATA_BYTE(linet + 2 * wplt, j); val4 = GET_DATA_BYTE(linet, j + 1); val5 = GET_DATA_BYTE(linet + wplt, j + 1); val6 = GET_DATA_BYTE(linet + 2 * wplt, j + 1); val7 = GET_DATA_BYTE(linet, j + 2); val8 = GET_DATA_BYTE(linet + wplt, j + 2); val9 = GET_DATA_BYTE(linet + 2 * wplt, j + 2); } else { /* shift right by 1 pixel; update incrementally */ val1 = val4; val2 = val5; val3 = val6; val4 = val7; val5 = val8; val6 = val9; val7 = GET_DATA_BYTE(linet, j + 2); val8 = GET_DATA_BYTE(linet + wplt, j + 2); val9 = GET_DATA_BYTE(linet + 2 * wplt, j + 2); } if (orientflag == L_HORIZONTAL_EDGES) vald = L_ABS(val1 + 2 * val4 + val7 - val3 - 2 * val6 - val9) >> 3; else if (orientflag == L_VERTICAL_EDGES) vald = L_ABS(val1 + 2 * val2 + val3 - val7 - 2 * val8 - val9) >> 3; else { /* L_ALL_EDGES */ gx = L_ABS(val1 + 2 * val2 + val3 - val7 - 2 * val8 - val9) >> 3; gy = L_ABS(val1 + 2 * val4 + val7 - val3 - 2 * val6 - val9) >> 3; vald = L_MIN(255, gx + gy); } SET_DATA_BYTE(lined, j, vald); } } pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Two-sided edge gradient filter * *----------------------------------------------------------------------*/ /*! * pixTwoSidedEdgeFilter() * * Input: pixs (8 bpp; no colormap) * orientflag (L_HORIZONTAL_EDGES, L_VERTICAL_EDGES) * Return: pixd (8 bpp, edges are brighter), or null on error * * Notes: * (1) For detecting vertical edges, this considers the * difference of the central pixel from those on the left * and right. For situations where the gradient is the same * sign on both sides, this computes and stores the minimum * (absolute value of the) difference. The reason for * checking the sign is that we are looking for pixels within * a transition. By contrast, for single pixel noise, the pixel * value is either larger than or smaller than its neighbors, * so the gradient would change direction on each side. Horizontal * edges are handled similarly, looking for vertical gradients. * (2) To generate a binary image of the edges, threshold * the result using pixThresholdToBinary(). If the high * edge values are to be fg (1), invert after running * pixThresholdToBinary(). * (3) This runs at about 60 Mpix/sec on a 3 GHz processor. * It is about 30% faster than Sobel, and the results are * similar. */ PIX * pixTwoSidedEdgeFilter(PIX *pixs, l_int32 orientflag) { l_int32 w, h, d, i, j, wpls, wpld; l_int32 cval, rval, bval, val, lgrad, rgrad, tgrad, bgrad; l_uint32 *datas, *lines, *datad, *lined; PIX *pixd; PROCNAME("pixTwoSidedEdgeFilter"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (orientflag != L_HORIZONTAL_EDGES && orientflag != L_VERTICAL_EDGES) return (PIX *)ERROR_PTR("invalid orientflag", procName, NULL); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (orientflag == L_VERTICAL_EDGES) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; cval = GET_DATA_BYTE(lines, 1); lgrad = cval - GET_DATA_BYTE(lines, 0); for (j = 1; j < w - 1; j++) { rval = GET_DATA_BYTE(lines, j + 1); rgrad = rval - cval; if (lgrad * rgrad > 0) { if (lgrad < 0) val = -L_MAX(lgrad, rgrad); else val = L_MIN(lgrad, rgrad); SET_DATA_BYTE(lined, j, val); } lgrad = rgrad; cval = rval; } } } else { /* L_HORIZONTAL_EDGES) */ for (j = 0; j < w; j++) { lines = datas + wpls; cval = GET_DATA_BYTE(lines, j); /* for line 1 */ tgrad = cval - GET_DATA_BYTE(datas, j); for (i = 1; i < h - 1; i++) { lines += wpls; /* for line i + 1 */ lined = datad + i * wpld; bval = GET_DATA_BYTE(lines, j); bgrad = bval - cval; if (tgrad * bgrad > 0) { if (tgrad < 0) val = -L_MAX(tgrad, bgrad); else val = L_MIN(tgrad, bgrad); SET_DATA_BYTE(lined, j, val); } tgrad = bgrad; cval = bval; } } } return pixd; } /*----------------------------------------------------------------------* * Measurement of edge smoothness * *----------------------------------------------------------------------*/ /*! * pixMeasureEdgeSmoothness() * * Input: pixs (1 bpp) * side (L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT) * minjump (minimum jump to be counted; >= 1) * minreversal (minimum reversal size for new peak or valley) * &jpl ( jumps/length: number of jumps, * normalized to length of component side) * &jspl ( jumpsum/length: sum of all * sufficiently large jumps, normalized to length * of component side) * &rpl ( reversals/length: number of * peak-to-valley or valley-to-peak reversals, * normalized to length of component side) * debugfile ( displays constructed edge; use NULL * for no output) * Return: 0 if OK, 1 on error * * Notes: * (1) This computes three measures of smoothness of the edge of a * connected component: * * jumps/length: (jpl) the number of jumps of size >= @minjump, * normalized to the length of the side * * jump sum/length: (jspl) the sum of all jump lengths of * size >= @minjump, normalized to the length of the side * * reversals/length: (rpl) the number of peak <--> valley * reversals, using @minreverse as a minimum deviation of * the peak or valley from its preceeding extremum, * normalized to the length of the side * (2) The input pix should be a single connected component, but * this is not required. */ l_int32 pixMeasureEdgeSmoothness(PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal, l_float32 *pjpl, l_float32 *pjspl, l_float32 *prpl, const char *debugfile) { l_int32 i, n, val, nval, diff, njumps, jumpsum, nreversal; NUMA *na, *nae; PROCNAME("pixMeasureEdgeSmoothness"); if (pjpl) *pjpl = 0.0; if (pjspl) *pjspl = 0.0; if (prpl) *prpl = 0.0; if (!pjpl && !pjspl && !prpl && !debugfile) return ERROR_INT("no output requested", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (side != L_FROM_LEFT && side != L_FROM_RIGHT && side != L_FROM_TOP && side != L_FROM_BOT) return ERROR_INT("invalid side", procName, 1); if (minjump < 1) return ERROR_INT("invalid minjump; must be >= 1", procName, 1); if (minreversal < 1) return ERROR_INT("invalid minreversal; must be >= 1", procName, 1); if ((na = pixGetEdgeProfile(pixs, side, debugfile)) == NULL) return ERROR_INT("edge profile not made", procName, 1); if ((n = numaGetCount(na)) < 2) { numaDestroy(&na); return 0; } if (pjpl || pjspl) { jumpsum = 0; njumps = 0; numaGetIValue(na, 0, &val); for (i = 1; i < n; i++) { numaGetIValue(na, i, &nval); diff = L_ABS(nval - val); if (diff >= minjump) { njumps++; jumpsum += diff; } val = nval; } if (pjpl) *pjpl = (l_float32)njumps / (l_float32)(n - 1); if (pjspl) *pjspl = (l_float32)jumpsum / (l_float32)(n - 1); } if (prpl) { nae = numaFindExtrema(na, minreversal); nreversal = numaGetCount(nae) - 1; *prpl = (l_float32)nreversal / (l_float32)(n - 1); numaDestroy(&nae); } numaDestroy(&na); return 0; } /*! * pixGetEdgeProfile() * * Input: pixs (1 bpp) * side (L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT) * debugfile ( displays constructed edge; use NULL * for no output) * Return: na (of fg edge pixel locations), or null on error */ NUMA * pixGetEdgeProfile(PIX *pixs, l_int32 side, const char *debugfile) { l_int32 x, y, w, h, loc, index, ival; l_uint32 val; NUMA *na; PIX *pixt; PIXCMAP *cmap; PROCNAME("pixGetEdgeProfile"); if (!pixs || pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (side != L_FROM_LEFT && side != L_FROM_RIGHT && side != L_FROM_TOP && side != L_FROM_BOT) return (NUMA *)ERROR_PTR("invalid side", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (side == L_FROM_LEFT || side == L_FROM_RIGHT) na = numaCreate(h); else na = numaCreate(w); if (side == L_FROM_LEFT) { pixGetLastOffPixelInRun(pixs, 0, 0, L_FROM_LEFT, &loc); loc = (loc == w - 1) ? 0 : loc + 1; /* back to the left edge */ numaAddNumber(na, loc); for (y = 1; y < h; y++) { pixGetPixel(pixs, loc, y, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, loc, y, L_FROM_RIGHT, &loc); } else { pixGetLastOffPixelInRun(pixs, loc, y, L_FROM_LEFT, &loc); loc = (loc == w - 1) ? 0 : loc + 1; } numaAddNumber(na, loc); } } else if (side == L_FROM_RIGHT) { pixGetLastOffPixelInRun(pixs, w - 1, 0, L_FROM_RIGHT, &loc); loc = (loc == 0) ? w - 1 : loc - 1; /* back to the right edge */ numaAddNumber(na, loc); for (y = 1; y < h; y++) { pixGetPixel(pixs, loc, y, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, loc, y, L_FROM_LEFT, &loc); } else { pixGetLastOffPixelInRun(pixs, loc, y, L_FROM_RIGHT, &loc); loc = (loc == 0) ? w - 1 : loc - 1; } numaAddNumber(na, loc); } } else if (side == L_FROM_TOP) { pixGetLastOffPixelInRun(pixs, 0, 0, L_FROM_TOP, &loc); loc = (loc == h - 1) ? 0 : loc + 1; /* back to the top edge */ numaAddNumber(na, loc); for (x = 1; x < w; x++) { pixGetPixel(pixs, x, loc, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, x, loc, L_FROM_BOT, &loc); } else { pixGetLastOffPixelInRun(pixs, x, loc, L_FROM_TOP, &loc); loc = (loc == h - 1) ? 0 : loc + 1; } numaAddNumber(na, loc); } } else { /* side == L_FROM_BOT */ pixGetLastOffPixelInRun(pixs, 0, h - 1, L_FROM_BOT, &loc); loc = (loc == 0) ? h - 1 : loc - 1; /* back to the bottom edge */ numaAddNumber(na, loc); for (x = 1; x < w; x++) { pixGetPixel(pixs, x, loc, &val); if (val == 1) { pixGetLastOnPixelInRun(pixs, x, loc, L_FROM_TOP, &loc); } else { pixGetLastOffPixelInRun(pixs, x, loc, L_FROM_BOT, &loc); loc = (loc == 0) ? h - 1 : loc - 1; } numaAddNumber(na, loc); } } if (debugfile) { pixt = pixConvertTo8(pixs, TRUE); cmap = pixGetColormap(pixt); pixcmapAddColor(cmap, 255, 0, 0); index = pixcmapGetCount(cmap) - 1; if (side == L_FROM_LEFT || side == L_FROM_RIGHT) { for (y = 0; y < h; y++) { numaGetIValue(na, y, &ival); pixSetPixel(pixt, ival, y, index); } } else { /* L_FROM_TOP or L_FROM_BOT */ for (x = 0; x < w; x++) { numaGetIValue(na, x, &ival); pixSetPixel(pixt, x, ival, index); } } pixWrite(debugfile, pixt, IFF_PNG); pixDestroy(&pixt); } return na; } /* * pixGetLastOffPixelInRun() * * Input: pixs (1 bpp) * x, y (starting location) * direction (L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT) * &loc ( location in scan direction coordinate * of last OFF pixel found) * Return: na (of fg edge pixel locations), or null on error * * Notes: * (1) Search starts from the pixel at (x, y), which is OFF. * (2) It returns the location in the scan direction of the last * pixel in the current run that is OFF. * (3) The interface for these pixel run functions is cleaner when * you ask for the last pixel in the current run, rather than the * first pixel of opposite polarity that is found, because the * current run may go to the edge of the image, in which case * no pixel of opposite polarity is found. */ l_int32 pixGetLastOffPixelInRun(PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc) { l_int32 loc, w, h; l_uint32 val; PROCNAME("pixGetLastOffPixelInRun"); if (!ploc) return ERROR_INT("&loc not defined", procName, 1); *ploc = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); if (direction != L_FROM_LEFT && direction != L_FROM_RIGHT && direction != L_FROM_TOP && direction != L_FROM_BOT) return ERROR_INT("invalid side", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (direction == L_FROM_LEFT) { for (loc = x; loc < w; loc++) { pixGetPixel(pixs, loc, y, &val); if (val == 1) break; } *ploc = loc - 1; } else if (direction == L_FROM_RIGHT) { for (loc = x; loc >= 0; loc--) { pixGetPixel(pixs, loc, y, &val); if (val == 1) break; } *ploc = loc + 1; } else if (direction == L_FROM_TOP) { for (loc = y; loc < h; loc++) { pixGetPixel(pixs, x, loc, &val); if (val == 1) break; } *ploc = loc - 1; } else if (direction == L_FROM_BOT) { for (loc = y; loc >= 0; loc--) { pixGetPixel(pixs, x, loc, &val); if (val == 1) break; } *ploc = loc + 1; } return 0; } /* * pixGetLastOnPixelInRun() * * Input: pixs (1 bpp) * x, y (starting location) * direction (L_FROM_LEFT, L_FROM_RIGHT, L_FROM_TOP, L_FROM_BOT) * &loc ( location in scan direction coordinate * of first ON pixel found) * Return: na (of fg edge pixel locations), or null on error * * Notes: * (1) Search starts from the pixel at (x, y), which is ON. * (2) It returns the location in the scan direction of the last * pixel in the current run that is ON. */ l_int32 pixGetLastOnPixelInRun(PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc) { l_int32 loc, w, h; l_uint32 val; PROCNAME("pixLastOnPixelInRun"); if (!ploc) return ERROR_INT("&loc not defined", procName, 1); *ploc = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); if (direction != L_FROM_LEFT && direction != L_FROM_RIGHT && direction != L_FROM_TOP && direction != L_FROM_BOT) return ERROR_INT("invalid side", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (direction == L_FROM_LEFT) { for (loc = x; loc < w; loc++) { pixGetPixel(pixs, loc, y, &val); if (val == 0) break; } *ploc = loc - 1; } else if (direction == L_FROM_RIGHT) { for (loc = x; loc >= 0; loc--) { pixGetPixel(pixs, loc, y, &val); if (val == 0) break; } *ploc = loc + 1; } else if (direction == L_FROM_TOP) { for (loc = y; loc < h; loc++) { pixGetPixel(pixs, x, loc, &val); if (val == 0) break; } *ploc = loc - 1; } else if (direction == L_FROM_BOT) { for (loc = y; loc >= 0; loc--) { pixGetPixel(pixs, x, loc, &val); if (val == 0) break; } *ploc = loc + 1; } return 0; } leptonica-1.70/src/jpegiostub.c0000644000175000017500000001324412154432452014621 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jpegiostub.c * * Stubs for jpegio.c functions */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if !HAVE_LIBJPEG /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadJpeg(const char *filename, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn) { return (PIX * )ERROR_PTR("function not present", "pixReadJpeg", NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadStreamJpeg(FILE *fp, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { return (PIX * )ERROR_PTR("function not present", "pixReadStreamJpeg", NULL); } /* ----------------------------------------------------------------------*/ l_int32 readHeaderJpeg(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { return ERROR_INT("function not present", "readHeaderJpeg", 1); } /* ----------------------------------------------------------------------*/ l_int32 freadHeaderJpeg(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { return ERROR_INT("function not present", "freadHeaderJpeg", 1); } /* ----------------------------------------------------------------------*/ l_int32 fgetJpegResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", "fgetJpegResolution", 1); } /* ----------------------------------------------------------------------*/ l_int32 fgetJpegComment(FILE *fp, l_uint8 **pcomment) { return ERROR_INT("function not present", "fgetJpegComment", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteJpeg(const char *filename, PIX *pix, l_int32 quality, l_int32 progressive) { return ERROR_INT("function not present", "pixWriteJpeg", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamJpeg(FILE *fp, PIX *pix, l_int32 quality, l_int32 progressive) { return ERROR_INT("function not present", "pixWriteStreamJpeg", 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemJpeg(const l_uint8 *cdata, size_t size, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { return (PIX * )ERROR_PTR("function not present", "pixReadMemJpeg", NULL); } /* ----------------------------------------------------------------------*/ l_int32 readHeaderMemJpeg(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { return ERROR_INT("function not present", "readHeaderMemJpeg", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemJpeg(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 progressive) { return ERROR_INT("function not present", "pixWriteMemJpeg", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixSetChromaSampling(PIX *pix, l_int32 sampling) { return ERROR_INT("function not present", "pixSetChromaSampling", 1); } /* ----------------------------------------------------------------------*/ l_int32 extractJpegDataFromFile(const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", "extractJpegDataFromFile", 1); } /* ----------------------------------------------------------------------*/ l_int32 extractJpegDataFromArray(const void *data, size_t nbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", "extractJpegDataFromArray", 1); } /* --------------------------------------------*/ #endif /* !HAVE_LIBJPEG */ /* --------------------------------------------*/ leptonica-1.70/src/endianness.h.in0000600000175000017500000000034011432324706015170 0ustar dandan#if !defined (L_BIG_ENDIAN) && !defined (L_LITTLE_ENDIAN) # if @APPLE_UNIVERSAL_BUILD@ # ifdef __BIG_ENDIAN__ # define L_BIG_ENDIAN # else # define L_LITTLE_ENDIAN # endif # else # define @ENDIANNESS@ # endif #endif leptonica-1.70/src/numabasic.c0000644000175000017500000015354712244224515014422 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * numabasic.c * * Numa creation, destruction, copy, clone, etc. * NUMA *numaCreate() * NUMA *numaCreateFromIArray() * NUMA *numaCreateFromFArray() * void *numaDestroy() * NUMA *numaCopy() * NUMA *numaClone() * l_int32 numaEmpty() * * Add/remove number (float or integer) * l_int32 numaAddNumber() * static l_int32 numaExtendArray() * l_int32 numaInsertNumber() * l_int32 numaRemoveNumber() * l_int32 numaReplaceNumber() * * Numa accessors * l_int32 numaGetCount() * l_int32 numaSetCount() * l_int32 numaGetIValue() * l_int32 numaGetFValue() * l_int32 numaSetValue() * l_int32 numaShiftValue() * l_int32 *numaGetIArray() * l_float32 *numaGetFArray() * l_int32 numaGetRefcount() * l_int32 numaChangeRefcount() * l_int32 numaGetParameters() * l_int32 numaSetParameters() * l_int32 numaCopyParameters() * * Convert to string array * SARRAY *numaConvertToSarray() * * Serialize numa for I/O * NUMA *numaRead() * NUMA *numaReadStream() * l_int32 numaWrite() * l_int32 numaWriteStream() * * Numaa creation, destruction, truncation * NUMAA *numaaCreate() * NUMAA *numaaCreateFull() * NUMAA *numaaTruncate() * void *numaaDestroy() * * Add Numa to Numaa * l_int32 numaaAddNuma() * l_int32 numaaExtendArray() * * Numaa accessors * l_int32 numaaGetCount() * l_int32 numaaGetNumaCount() * l_int32 numaaGetNumberCount() * NUMA **numaaGetPtrArray() * NUMA *numaaGetNuma() * NUMA *numaaReplaceNuma() * l_int32 numaaGetValue() * l_int32 numaaAddNumber() * * Serialize numaa for I/O * NUMAA *numaaRead() * NUMAA *numaaReadStream() * l_int32 numaaWrite() * l_int32 numaaWriteStream() * * Numa2d creation, destruction * NUMA2D *numa2dCreate() * void *numa2dDestroy() * * Numa2d Accessors * l_int32 numa2dAddNumber() * l_int32 numa2dGetCount() * NUMA *numa2dGetNuma() * l_int32 numa2dGetFValue() * l_int32 numa2dGetIValue() * * NumaHash creation, destruction * NUMAHASH *numaHashCreate() * void *numaHashDestroy() * * NumaHash Accessors * NUMA *numaHashGetNuma() * void *numaHashAdd() * * (1) The Numa is a struct holding an array of floats. It can also * be used to store l_int32 values, with some loss of precision * for floats larger than about 10 million. Use the L_Dna instead * if integers larger than a few million need to be stored. * * (2) Always use the accessors in this file, never the fields directly. * * (3) Storing and retrieving numbers: * * * to append a new number to the array, use numaAddNumber(). If * the number is an int, it will will automatically be converted * to l_float32 and stored. * * * to reset a value stored in the array, use numaSetValue(). * * * to increment or decrement a value stored in the array, * use numaShiftValue(). * * * to obtain a value from the array, use either numaGetIValue() * or numaGetFValue(), depending on whether you are retrieving * an integer or a float. This avoids doing an explicit cast, * such as * (a) return a l_float32 and cast it to an l_int32 * (b) cast the return directly to (l_float32 *) to * satisfy the function prototype, as in * numaGetFValue(na, index, (l_float32 *)&ival); [ugly!] * * (4) int <--> float conversions: * * Tradition dictates that type conversions go automatically from * l_int32 --> l_float32, even though it is possible to lose * precision for large integers, whereas you must cast (l_int32) * to go from l_float32 --> l_int32 because you're truncating * to the integer value. * * (5) As with other arrays in leptonica, the numa has both an allocated * size and a count of the stored numbers. When you add a number, it * goes on the end of the array, and causes a realloc if the array * is already filled. However, in situations where you want to * add numbers randomly into an array, such as when you build a * histogram, you must set the count of stored numbers in advance. * This is done with numaSetCount(). If you set a count larger * than the allocated array, it does a realloc to the size requested. * * (6) In situations where the data in a numa correspond to a function * y(x), the values can be either at equal spacings in x or at * arbitrary spacings. For the former, we can represent all x values * by two parameters: startx (corresponding to y[0]) and delx * for the change in x for adjacent values y[i] and y[i+1]. * startx and delx are initialized to 0.0 and 1.0, rsp. * For arbitrary spacings, we use a second numa, and the two * numas are typically denoted nay and nax. * * (7) The numa is also the basic struct used for histograms. Every numa * has startx and delx fields, initialized to 0.0 and 1.0, that can * be used to represent the "x" value for the location of the * first bin and the bin width, respectively. Accessors are the * numa*Parameters() functions. All functions that make numa * histograms must set these fields properly, and many functions * that use numa histograms rely on the correctness of these values. */ #include #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 50; /* n'importe quoi */ /* Static function */ static l_int32 numaExtendArray(NUMA *na); /*--------------------------------------------------------------------------* * Numa creation, destruction, copy, clone, etc. * *--------------------------------------------------------------------------*/ /*! * numaCreate() * * Input: size of number array to be alloc'd (0 for default) * Return: na, or null on error */ NUMA * numaCreate(l_int32 n) { NUMA *na; PROCNAME("numaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((na = (NUMA *)CALLOC(1, sizeof(NUMA))) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); if ((na->array = (l_float32 *)CALLOC(n, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("number array not made", procName, NULL); na->nalloc = n; na->n = 0; na->refcount = 1; na->startx = 0.0; na->delx = 1.0; return na; } /*! * numaCreateFromIArray() * * Input: iarray (integer) * size (of the array) * Return: na, or null on error * * Notes: * (1) We can't insert this int array into the numa, because a numa * takes a float array. So this just copies the data from the * input array into the numa. The input array continues to be * owned by the caller. */ NUMA * numaCreateFromIArray(l_int32 *iarray, l_int32 size) { l_int32 i; NUMA *na; PROCNAME("numaCreateFromIArray"); if (!iarray) return (NUMA *)ERROR_PTR("iarray not defined", procName, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); na = numaCreate(size); for (i = 0; i < size; i++) numaAddNumber(na, iarray[i]); return na; } /*! * numaCreateFromFArray() * * Input: farray (float) * size (of the array) * copyflag (L_INSERT or L_COPY) * Return: na, or null on error * * Notes: * (1) With L_INSERT, ownership of the input array is transferred * to the returned numa, and all @size elements are considered * to be valid. */ NUMA * numaCreateFromFArray(l_float32 *farray, l_int32 size, l_int32 copyflag) { l_int32 i; NUMA *na; PROCNAME("numaCreateFromFArray"); if (!farray) return (NUMA *)ERROR_PTR("farray not defined", procName, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); if (copyflag != L_INSERT && copyflag != L_COPY) return (NUMA *)ERROR_PTR("invalid copyflag", procName, NULL); na = numaCreate(size); if (copyflag == L_INSERT) { if (na->array) FREE(na->array); na->array = farray; na->n = size; } else { /* just copy the contents */ for (i = 0; i < size; i++) numaAddNumber(na, farray[i]); } return na; } /*! * numaDestroy() * * Input: &na () * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the numa. * (2) Always nulls the input ptr. */ void numaDestroy(NUMA **pna) { NUMA *na; PROCNAME("numaDestroy"); if (pna == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((na = *pna) == NULL) return; /* Decrement the ref count. If it is 0, destroy the numa. */ numaChangeRefcount(na, -1); if (numaGetRefcount(na) <= 0) { if (na->array) FREE(na->array); FREE(na); } *pna = NULL; return; } /*! * numaCopy() * * Input: na * Return: copy of numa, or null on error */ NUMA * numaCopy(NUMA *na) { l_int32 i; NUMA *cna; PROCNAME("numaCopy"); if (!na) return (NUMA *)ERROR_PTR("na not defined", procName, NULL); if ((cna = numaCreate(na->nalloc)) == NULL) return (NUMA *)ERROR_PTR("cna not made", procName, NULL); cna->startx = na->startx; cna->delx = na->delx; for (i = 0; i < na->n; i++) numaAddNumber(cna, na->array[i]); return cna; } /*! * numaClone() * * Input: na * Return: ptr to same numa, or null on error */ NUMA * numaClone(NUMA *na) { PROCNAME("numaClone"); if (!na) return (NUMA *)ERROR_PTR("na not defined", procName, NULL); numaChangeRefcount(na, 1); return na; } /*! * numaEmpty() * * Input: na * Return: 0 if OK; 1 on error * * Notes: * (1) This does not change the allocation of the array. * It just clears the number of stored numbers, so that * the array appears to be empty. */ l_int32 numaEmpty(NUMA *na) { PROCNAME("numaEmpty"); if (!na) return ERROR_INT("na not defined", procName, 1); na->n = 0; return 0; } /*--------------------------------------------------------------------------* * Number array: add number and extend array * *--------------------------------------------------------------------------*/ /*! * numaAddNumber() * * Input: na * val (float or int to be added; stored as a float) * Return: 0 if OK, 1 on error */ l_int32 numaAddNumber(NUMA *na, l_float32 val) { l_int32 n; PROCNAME("numaAddNumber"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (n >= na->nalloc) numaExtendArray(na); na->array[n] = val; na->n++; return 0; } /*! * numaExtendArray() * * Input: na * Return: 0 if OK, 1 on error */ static l_int32 numaExtendArray(NUMA *na) { PROCNAME("numaExtendArray"); if (!na) return ERROR_INT("na not defined", procName, 1); if ((na->array = (l_float32 *)reallocNew((void **)&na->array, sizeof(l_float32) * na->nalloc, 2 * sizeof(l_float32) * na->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); na->nalloc *= 2; return 0; } /*! * numaInsertNumber() * * Input: na * index (location in na to insert new value) * val (float32 or integer to be added) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts na[i] --> na[i + 1] for all i >= index, * and then inserts val as na[index]. * (2) It should not be used repeatedly on large arrays, * because the function is O(n). * */ l_int32 numaInsertNumber(NUMA *na, l_int32 index, l_float32 val) { l_int32 i, n; PROCNAME("numaInsertNumber"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (index < 0 || index > n) return ERROR_INT("index not in {0...n}", procName, 1); if (n >= na->nalloc) numaExtendArray(na); for (i = n; i > index; i--) na->array[i] = na->array[i - 1]; na->array[index] = val; na->n++; return 0; } /*! * numaRemoveNumber() * * Input: na * index (element to be removed) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts na[i] --> na[i - 1] for all i > index. * (2) It should not be used repeatedly on large arrays, * because the function is O(n). */ l_int32 numaRemoveNumber(NUMA *na, l_int32 index) { l_int32 i, n; PROCNAME("numaRemoveNumber"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); for (i = index + 1; i < n; i++) na->array[i - 1] = na->array[i]; na->n--; return 0; } /*! * numaReplaceNumber() * * Input: na * index (element to be replaced) * val (new value to replace old one) * Return: 0 if OK, 1 on error */ l_int32 numaReplaceNumber(NUMA *na, l_int32 index, l_float32 val) { l_int32 n; PROCNAME("numaReplaceNumber"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); na->array[index] = val; return 0; } /*----------------------------------------------------------------------* * Numa accessors * *----------------------------------------------------------------------*/ /*! * numaGetCount() * * Input: na * Return: count, or 0 if no numbers or on error */ l_int32 numaGetCount(NUMA *na) { PROCNAME("numaGetCount"); if (!na) return ERROR_INT("na not defined", procName, 0); return na->n; } /*! * numaSetCount() * * Input: na * newcount * Return: 0 if OK, 1 on error * * Notes: * (1) If newcount <= na->nalloc, this resets na->n. * Using newcount = 0 is equivalent to numaEmpty(). * (2) If newcount > na->nalloc, this causes a realloc * to a size na->nalloc = newcount. * (3) All the previously unused values in na are set to 0.0. */ l_int32 numaSetCount(NUMA *na, l_int32 newcount) { PROCNAME("numaSetCount"); if (!na) return ERROR_INT("na not defined", procName, 1); if (newcount > na->nalloc) { if ((na->array = (l_float32 *)reallocNew((void **)&na->array, sizeof(l_float32) * na->nalloc, sizeof(l_float32) * newcount)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); na->nalloc = newcount; } na->n = newcount; return 0; } /*! * numaGetFValue() * * Input: na * index (into numa) * &val ( float value; 0.0 on error) * Return: 0 if OK; 1 on error * * Notes: * (1) Caller may need to check the function return value to * decide if a 0.0 in the returned ival is valid. */ l_int32 numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval) { PROCNAME("numaGetFValue"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (!na) return ERROR_INT("na not defined", procName, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", procName, 1); *pval = na->array[index]; return 0; } /*! * numaGetIValue() * * Input: na * index (into numa) * &ival ( integer value; 0 on error) * Return: 0 if OK; 1 on error * * Notes: * (1) Caller may need to check the function return value to * decide if a 0 in the returned ival is valid. */ l_int32 numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival) { l_float32 val; PROCNAME("numaGetIValue"); if (!pival) return ERROR_INT("&ival not defined", procName, 1); *pival = 0; if (!na) return ERROR_INT("na not defined", procName, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", procName, 1); val = na->array[index]; *pival = (l_int32)(val + L_SIGN(val) * 0.5); return 0; } /*! * numaSetValue() * * Input: na * index (to element to be set) * val (to set element) * Return: 0 if OK; 1 on error */ l_int32 numaSetValue(NUMA *na, l_int32 index, l_float32 val) { PROCNAME("numaSetValue"); if (!na) return ERROR_INT("na not defined", procName, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", procName, 1); na->array[index] = val; return 0; } /*! * numaShiftValue() * * Input: na * index (to element to change relative to the current value) * diff (increment if diff > 0 or decrement if diff < 0) * Return: 0 if OK; 1 on error */ l_int32 numaShiftValue(NUMA *na, l_int32 index, l_float32 diff) { PROCNAME("numaShiftValue"); if (!na) return ERROR_INT("na not defined", procName, 1); if (index < 0 || index >= na->n) return ERROR_INT("index not valid", procName, 1); na->array[index] += diff; return 0; } /*! * numaGetIArray() * * Input: na * Return: a copy of the bare internal array, integerized * by rounding, or null on error * Notes: * (1) A copy of the array is always made, because we need to * generate an integer array from the bare float array. * The caller is responsible for freeing the array. * (2) The array size is determined by the number of stored numbers, * not by the size of the allocated array in the Numa. * (3) This function is provided to simplify calculations * using the bare internal array, rather than continually * calling accessors on the numa. It is typically used * on an array of size 256. */ l_int32 * numaGetIArray(NUMA *na) { l_int32 i, n, ival; l_int32 *array; PROCNAME("numaGetIArray"); if (!na) return (l_int32 *)ERROR_PTR("na not defined", procName, NULL); n = numaGetCount(na); if ((array = (l_int32 *)CALLOC(n, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("array not made", procName, NULL); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); array[i] = ival; } return array; } /*! * numaGetFArray() * * Input: na * copyflag (L_NOCOPY or L_COPY) * Return: either the bare internal array or a copy of it, * or null on error * * Notes: * (1) If copyflag == L_COPY, it makes a copy which the caller * is responsible for freeing. Otherwise, it operates * directly on the bare array of the numa. * (2) Very important: for L_NOCOPY, any writes to the array * will be in the numa. Do not write beyond the size of * the count field, because it will not be accessable * from the numa! If necessary, be sure to set the count * field to a larger number (such as the alloc size) * BEFORE calling this function. Creating with numaMakeConstant() * is another way to insure full initialization. */ l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag) { l_int32 i, n; l_float32 *array; PROCNAME("numaGetFArray"); if (!na) return (l_float32 *)ERROR_PTR("na not defined", procName, NULL); if (copyflag == L_NOCOPY) { array = na->array; } else { /* copyflag == L_COPY */ n = numaGetCount(na); if ((array = (l_float32 *)CALLOC(n, sizeof(l_float32))) == NULL) return (l_float32 *)ERROR_PTR("array not made", procName, NULL); for (i = 0; i < n; i++) array[i] = na->array[i]; } return array; } /*! * numaGetRefCount() * * Input: na * Return: refcount, or UNDEF on error */ l_int32 numaGetRefcount(NUMA *na) { PROCNAME("numaGetRefcount"); if (!na) return ERROR_INT("na not defined", procName, UNDEF); return na->refcount; } /*! * numaChangeRefCount() * * Input: na * delta (change to be applied) * Return: 0 if OK, 1 on error */ l_int32 numaChangeRefcount(NUMA *na, l_int32 delta) { PROCNAME("numaChangeRefcount"); if (!na) return ERROR_INT("na not defined", procName, 1); na->refcount += delta; return 0; } /*! * numaGetParameters() * * Input: na * &startx ( startx) * &delx ( delx) * Return: 0 if OK, 1 on error */ l_int32 numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx) { PROCNAME("numaGetParameters"); if (!na) return ERROR_INT("na not defined", procName, 1); if (pstartx) *pstartx = na->startx; if (pdelx) *pdelx = na->delx; return 0; } /*! * numaSetParameters() * * Input: na * startx (x value corresponding to na[0]) * delx (difference in x values for the situation where the * elements of na correspond to the evaulation of a * function at equal intervals of size @delx) * Return: 0 if OK, 1 on error */ l_int32 numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx) { PROCNAME("numaSetParameters"); if (!na) return ERROR_INT("na not defined", procName, 1); na->startx = startx; na->delx = delx; return 0; } /*! * numaCopyParameters() * * Input: nad (destination Numa) * nas (source Numa) * Return: 0 if OK, 1 on error */ l_int32 numaCopyParameters(NUMA *nad, NUMA *nas) { l_float32 start, binsize; PROCNAME("numaCopyParameters"); if (!nas || !nad) return ERROR_INT("nas and nad not both defined", procName, 1); numaGetParameters(nas, &start, &binsize); numaSetParameters(nad, start, binsize); return 0; } /*----------------------------------------------------------------------* * Convert to string array * *----------------------------------------------------------------------*/ /*! * numaConvertToSarray() * * Input: na * size1 (size of conversion field) * size2 (for float conversion: size of field to the right * of the decimal point) * addzeros (for integer conversion: to add lead zeros) * type (L_INTEGER_VALUE, L_FLOAT_VALUE) * Return: a sarray of the float values converted to strings * representing either integer or float values; or null on error. * * Notes: * (1) For integer conversion, size2 is ignored. * For float conversion, addzeroes is ignored. */ SARRAY * numaConvertToSarray(NUMA *na, l_int32 size1, l_int32 size2, l_int32 addzeros, l_int32 type) { char fmt[32], strbuf[64]; l_int32 i, n, ival; l_float32 fval; SARRAY *sa; PROCNAME("numaConvertToSarray"); if (!na) return (SARRAY *)ERROR_PTR("na not defined", procName, NULL); if (type != L_INTEGER_VALUE && type != L_FLOAT_VALUE) return (SARRAY *)ERROR_PTR("invalid type", procName, NULL); if (type == L_INTEGER_VALUE) { if (addzeros) snprintf(fmt, sizeof(fmt), "%%0%dd", size1); else snprintf(fmt, sizeof(fmt), "%%%dd", size1); } else { /* L_FLOAT_VALUE */ snprintf(fmt, sizeof(fmt), "%%%d.%df", size1, size2); } n = numaGetCount(na); if ((sa = sarrayCreate(n)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); for (i = 0; i < n; i++) { if (type == L_INTEGER_VALUE) { numaGetIValue(na, i, &ival); snprintf(strbuf, sizeof(strbuf), fmt, ival); } else { /* L_FLOAT_VALUE */ numaGetFValue(na, i, &fval); snprintf(strbuf, sizeof(strbuf), fmt, fval); } sarrayAddString(sa, strbuf, L_COPY); } return sa; } /*----------------------------------------------------------------------* * Serialize numa for I/O * *----------------------------------------------------------------------*/ /*! * numaRead() * * Input: filename * Return: na, or null on error */ NUMA * numaRead(const char *filename) { FILE *fp; NUMA *na; PROCNAME("numaRead"); if (!filename) return (NUMA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (NUMA *)ERROR_PTR("stream not opened", procName, NULL); if ((na = numaReadStream(fp)) == NULL) { fclose(fp); return (NUMA *)ERROR_PTR("na not read", procName, NULL); } fclose(fp); return na; } /*! * numaReadStream() * * Input: stream * Return: numa, or null on error */ NUMA * numaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; l_float32 val, startx, delx; NUMA *na; PROCNAME("numaReadStream"); if (!fp) return (NUMA *)ERROR_PTR("stream not defined", procName, NULL); ret = fscanf(fp, "\nNuma Version %d\n", &version); if (ret != 1) return (NUMA *)ERROR_PTR("not a numa file", procName, NULL); if (version != NUMA_VERSION_NUMBER) return (NUMA *)ERROR_PTR("invalid numa version", procName, NULL); if (fscanf(fp, "Number of numbers = %d\n", &n) != 1) return (NUMA *)ERROR_PTR("invalid number of numbers", procName, NULL); if ((na = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, " [%d] = %f\n", &index, &val) != 2) return (NUMA *)ERROR_PTR("bad input data", procName, NULL); numaAddNumber(na, val); } /* Optional data */ if (fscanf(fp, "startx = %f, delx = %f\n", &startx, &delx) == 2) numaSetParameters(na, startx, delx); return na; } /*! * numaWrite() * * Input: filename, na * Return: 0 if OK, 1 on error */ l_int32 numaWrite(const char *filename, NUMA *na) { FILE *fp; PROCNAME("numaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (numaWriteStream(fp, na)) return ERROR_INT("na not written to stream", procName, 1); fclose(fp); return 0; } /*! * numaWriteStream() * * Input: stream, na * Return: 0 if OK, 1 on error */ l_int32 numaWriteStream(FILE *fp, NUMA *na) { l_int32 i, n; l_float32 startx, delx; PROCNAME("numaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); fprintf(fp, "\nNuma Version %d\n", NUMA_VERSION_NUMBER); fprintf(fp, "Number of numbers = %d\n", n); for (i = 0; i < n; i++) fprintf(fp, " [%d] = %f\n", i, na->array[i]); fprintf(fp, "\n"); /* Optional data */ numaGetParameters(na, &startx, &delx); if (startx != 0.0 || delx != 1.0) fprintf(fp, "startx = %f, delx = %f\n", startx, delx); return 0; } /*--------------------------------------------------------------------------* * Numaa creation, destruction * *--------------------------------------------------------------------------*/ /*! * numaaCreate() * * Input: size of numa ptr array to be alloc'd (0 for default) * Return: naa, or null on error * */ NUMAA * numaaCreate(l_int32 n) { NUMAA *naa; PROCNAME("numaaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((naa = (NUMAA *)CALLOC(1, sizeof(NUMAA))) == NULL) return (NUMAA *)ERROR_PTR("naa not made", procName, NULL); if ((naa->numa = (NUMA **)CALLOC(n, sizeof(NUMA *))) == NULL) return (NUMAA *)ERROR_PTR("numa ptr array not made", procName, NULL); naa->nalloc = n; naa->n = 0; return naa; } /*! * numaaCreateFull() * * Input: ntop: size of numa ptr array to be alloc'd * n: size of individual numa arrays to be alloc'd (0 for default) * Return: naa, or null on error * * Notes: * (1) This allocates numaa and fills the array with allocated numas. * In use, after calling this function, use * numaaAddNumber(naa, index, val); * to add val to the index-th numa in naa. */ NUMAA * numaaCreateFull(l_int32 ntop, l_int32 n) { l_int32 i; NUMAA *naa; NUMA *na; naa = numaaCreate(ntop); for (i = 0; i < ntop; i++) { na = numaCreate(n); numaaAddNuma(naa, na, L_INSERT); } return naa; } /*! * numaaTruncate() * * Input: naa * Return: 0 if OK, 1 on error * * Notes: * (1) This identifies the largest index containing a numa that * has any numbers within it, destroys all numa above that index, * and resets the count. */ l_int32 numaaTruncate(NUMAA *naa) { l_int32 i, n, nn; NUMA *na; PROCNAME("numaaTruncate"); if (!naa) return ERROR_INT("naa not defined", procName, 1); n = numaaGetCount(naa); for (i = n - 1; i >= 0; i--) { na = numaaGetNuma(naa, i, L_CLONE); if (!na) continue; nn = numaGetCount(na); numaDestroy(&na); if (nn == 0) numaDestroy(&naa->numa[i]); else break; } naa->n = i + 1; return 0; } /*! * numaaDestroy() * * Input: &numaa * Return: void */ void numaaDestroy(NUMAA **pnaa) { l_int32 i; NUMAA *naa; PROCNAME("numaaDestroy"); if (pnaa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((naa = *pnaa) == NULL) return; for (i = 0; i < naa->n; i++) numaDestroy(&naa->numa[i]); FREE(naa->numa); FREE(naa); *pnaa = NULL; return; } /*--------------------------------------------------------------------------* * Add Numa to Numaa * *--------------------------------------------------------------------------*/ /*! * numaaAddNuma() * * Input: naa * na (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag) { l_int32 n; NUMA *nac; PROCNAME("numaaAddNuma"); if (!naa) return ERROR_INT("naa not defined", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); if (copyflag == L_INSERT) { nac = na; } else if (copyflag == L_COPY) { if ((nac = numaCopy(na)) == NULL) return ERROR_INT("nac not made", procName, 1); } else if (copyflag == L_CLONE) { nac = numaClone(na); } else { return ERROR_INT("invalid copyflag", procName, 1); } n = numaaGetCount(naa); if (n >= naa->nalloc) numaaExtendArray(naa); naa->numa[n] = nac; naa->n++; return 0; } /*! * numaaExtendArray() * * Input: naa * Return: 0 if OK, 1 on error */ l_int32 numaaExtendArray(NUMAA *naa) { PROCNAME("numaaExtendArray"); if (!naa) return ERROR_INT("naa not defined", procName, 1); if ((naa->numa = (NUMA **)reallocNew((void **)&naa->numa, sizeof(NUMA *) * naa->nalloc, 2 * sizeof(NUMA *) * naa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); naa->nalloc *= 2; return 0; } /*----------------------------------------------------------------------* * Numaa accessors * *----------------------------------------------------------------------*/ /*! * numaaGetCount() * * Input: naa * Return: count (number of numa), or 0 if no numa or on error */ l_int32 numaaGetCount(NUMAA *naa) { PROCNAME("numaaGetCount"); if (!naa) return ERROR_INT("naa not defined", procName, 0); return naa->n; } /*! * numaaGetNumaCount() * * Input: naa * index (of numa in naa) * Return: count of numbers in the referenced numa, or 0 on error. */ l_int32 numaaGetNumaCount(NUMAA *naa, l_int32 index) { PROCNAME("numaaGetNumaCount"); if (!naa) return ERROR_INT("naa not defined", procName, 0); if (index < 0 || index >= naa->n) return ERROR_INT("invalid index into naa", procName, 0); return numaGetCount(naa->numa[index]); } /*! * numaaGetNumberCount() * * Input: naa * Return: count (total number of numbers in the numaa), * or 0 if no numbers or on error */ l_int32 numaaGetNumberCount(NUMAA *naa) { NUMA *na; l_int32 n, sum, i; PROCNAME("numaaGetNumberCount"); if (!naa) return ERROR_INT("naa not defined", procName, 0); n = numaaGetCount(naa); for (sum = 0, i = 0; i < n; i++) { na = numaaGetNuma(naa, i, L_CLONE); sum += numaGetCount(na); numaDestroy(&na); } return sum; } /*! * numaaGetPtrArray() * * Input: naa * Return: the internal array of ptrs to Numa, or null on error * * Notes: * (1) This function is convenient for doing direct manipulation on * a fixed size array of Numas. To do this, it sets the count * to the full size of the allocated array of Numa ptrs. * The originating Numaa owns this array: DO NOT free it! * (2) Intended usage: * Numaa *naa = numaaCreate(n); * Numa **array = numaaGetPtrArray(naa); * ... [manipulate Numas directly on the array] * numaaDestroy(&naa); * (3) Cautions: * - Do not free this array; it is owned by tne Numaa. * - Do not call any functions on the Numaa, other than * numaaDestroy() when you're finished with the array. * Adding a Numa will force a resize, destroying the ptr array. * - Do not address the array outside its allocated size. * With the bare array, there are no protections. If the * allocated size is n, array[n] is an error. */ NUMA ** numaaGetPtrArray(NUMAA *naa) { PROCNAME("numaaGetPtrArray"); if (!naa) return (NUMA **)ERROR_PTR("naa not defined", procName, NULL); naa->n = naa->nalloc; return naa->numa; } /*! * numaaGetNuma() * * Input: naa * index (to the index-th numa) * accessflag (L_COPY or L_CLONE) * Return: numa, or null on error */ NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag) { PROCNAME("numaaGetNuma"); if (!naa) return (NUMA *)ERROR_PTR("naa not defined", procName, NULL); if (index < 0 || index >= naa->n) return (NUMA *)ERROR_PTR("index not valid", procName, NULL); if (accessflag == L_COPY) return numaCopy(naa->numa[index]); else if (accessflag == L_CLONE) return numaClone(naa->numa[index]); else return (NUMA *)ERROR_PTR("invalid accessflag", procName, NULL); } /*! * numaaReplaceNuma() * * Input: naa * index (to the index-th numa) * numa (insert and replace any existing one) * Return: 0 if OK, 1 on error * * Notes: * (1) Any existing numa is destroyed, and the input one * is inserted in its place. * (2) If the index is invalid, return 1 (error) */ l_int32 numaaReplaceNuma(NUMAA *naa, l_int32 index, NUMA *na) { l_int32 n; PROCNAME("numaaReplaceNuma"); if (!naa) return ERROR_INT("naa not defined", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaaGetCount(naa); if (index < 0 || index >= n) return ERROR_INT("index not valid", procName, 1); numaDestroy(&naa->numa[index]); naa->numa[index] = na; return 0; } /*! * numaaGetValue() * * Input: naa * i (index of numa within numaa) * j (index into numa) * fval ( float value) * ival ( int value) * Return: 0 if OK, 1 on error */ l_int32 numaaGetValue(NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival) { l_int32 n; NUMA *na; PROCNAME("numaaGetValue"); if (!pfval && !pival) return ERROR_INT("no return val requested", procName, 1); if (pfval) *pfval = 0.0; if (pival) *pival = 0; if (!naa) return ERROR_INT("naa not defined", procName, 1); n = numaaGetCount(naa); if (i < 0 || i >= n) return ERROR_INT("invalid index into naa", procName, 1); na = naa->numa[i]; if (j < 0 || j >= na->n) return ERROR_INT("invalid index into na", procName, 1); if (pfval) *pfval = na->array[j]; if (pival) *pival = (l_int32)(na->array[j]); return 0; } /*! * numaaAddNumber() * * Input: naa * index (of numa within numaa) * val (float or int to be added; stored as a float) * Return: 0 if OK, 1 on error * * Notes: * (1) Adds to an existing numa only. */ l_int32 numaaAddNumber(NUMAA *naa, l_int32 index, l_float32 val) { l_int32 n; NUMA *na; PROCNAME("numaaAddNumber"); if (!naa) return ERROR_INT("naa not defined", procName, 1); n = numaaGetCount(naa); if (index < 0 || index >= n) return ERROR_INT("invalid index in naa", procName, 1); na = numaaGetNuma(naa, index, L_CLONE); numaAddNumber(na, val); numaDestroy(&na); return 0; } /*----------------------------------------------------------------------* * Serialize numaa for I/O * *----------------------------------------------------------------------*/ /*! * numaaRead() * * Input: filename * Return: naa, or null on error */ NUMAA * numaaRead(const char *filename) { FILE *fp; NUMAA *naa; PROCNAME("numaaRead"); if (!filename) return (NUMAA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (NUMAA *)ERROR_PTR("stream not opened", procName, NULL); if ((naa = numaaReadStream(fp)) == NULL) { fclose(fp); return (NUMAA *)ERROR_PTR("naa not read", procName, NULL); } fclose(fp); return naa; } /*! * numaaReadStream() * * Input: stream * Return: naa, or null on error */ NUMAA * numaaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; NUMA *na; NUMAA *naa; PROCNAME("numaaReadStream"); if (!fp) return (NUMAA *)ERROR_PTR("stream not defined", procName, NULL); ret = fscanf(fp, "\nNumaa Version %d\n", &version); if (ret != 1) return (NUMAA *)ERROR_PTR("not a numa file", procName, NULL); if (version != NUMA_VERSION_NUMBER) return (NUMAA *)ERROR_PTR("invalid numaa version", procName, NULL); if (fscanf(fp, "Number of numa = %d\n\n", &n) != 1) return (NUMAA *)ERROR_PTR("invalid number of numa", procName, NULL); if ((naa = numaaCreate(n)) == NULL) return (NUMAA *)ERROR_PTR("naa not made", procName, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, "Numa[%d]:", &index) != 1) return (NUMAA *)ERROR_PTR("invalid numa header", procName, NULL); if ((na = numaReadStream(fp)) == NULL) return (NUMAA *)ERROR_PTR("na not made", procName, NULL); numaaAddNuma(naa, na, L_INSERT); } return naa; } /*! * numaaWrite() * * Input: filename, naa * Return: 0 if OK, 1 on error */ l_int32 numaaWrite(const char *filename, NUMAA *naa) { FILE *fp; PROCNAME("numaaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!naa) return ERROR_INT("naa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (numaaWriteStream(fp, naa)) return ERROR_INT("naa not written to stream", procName, 1); fclose(fp); return 0; } /*! * numaaWriteStream() * * Input: stream, naa * Return: 0 if OK, 1 on error */ l_int32 numaaWriteStream(FILE *fp, NUMAA *naa) { l_int32 i, n; NUMA *na; PROCNAME("numaaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!naa) return ERROR_INT("naa not defined", procName, 1); n = numaaGetCount(naa); fprintf(fp, "\nNumaa Version %d\n", NUMA_VERSION_NUMBER); fprintf(fp, "Number of numa = %d\n\n", n); for (i = 0; i < n; i++) { if ((na = numaaGetNuma(naa, i, L_CLONE)) == NULL) return ERROR_INT("na not found", procName, 1); fprintf(fp, "Numa[%d]:", i); numaWriteStream(fp, na); numaDestroy(&na); } return 0; } /*--------------------------------------------------------------------------* * Numa2d creation, destruction * *--------------------------------------------------------------------------*/ /*! * numa2dCreate() * * Input: nrows (of 2d array) * ncols (of 2d array) * initsize (initial size of each allocated numa) * Return: numa2d, or null on error * * Notes: * (1) The numa2d holds a doubly-indexed array of numa. * (2) The numa ptr array is initialized with all ptrs set to NULL. * (3) The numas are created only when a number is to be stored * at an index (i,j) for which a numa has not yet been made. */ NUMA2D * numa2dCreate(l_int32 nrows, l_int32 ncols, l_int32 initsize) { l_int32 i; NUMA2D *na2d; PROCNAME("numa2dCreate"); if (nrows <= 1 || ncols <= 1) return (NUMA2D *)ERROR_PTR("rows, cols not both >= 1", procName, NULL); if ((na2d = (NUMA2D *)CALLOC(1, sizeof(NUMA2D))) == NULL) return (NUMA2D *)ERROR_PTR("na2d not made", procName, NULL); na2d->nrows = nrows; na2d->ncols = ncols; na2d->initsize = initsize; /* Set up the 2D array */ if ((na2d->numa = (NUMA ***)CALLOC(nrows, sizeof(NUMA **))) == NULL) return (NUMA2D *)ERROR_PTR("numa row array not made", procName, NULL); for (i = 0; i < nrows; i++) { if ((na2d->numa[i] = (NUMA **)CALLOC(ncols, sizeof(NUMA *))) == NULL) return (NUMA2D *)ERROR_PTR("numa cols not made", procName, NULL); } return na2d; } /*! * numa2dDestroy() * * Input: &numa2d () * Return: void */ void numa2dDestroy(NUMA2D **pna2d) { l_int32 i, j; NUMA2D *na2d; PROCNAME("numa2dDestroy"); if (pna2d == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((na2d = *pna2d) == NULL) return; for (i = 0; i < na2d->nrows; i++) { for (j = 0; j < na2d->ncols; j++) numaDestroy(&na2d->numa[i][j]); FREE(na2d->numa[i]); } FREE(na2d->numa); FREE(na2d); *pna2d = NULL; return; } /*--------------------------------------------------------------------------* * Numa2d accessors * *--------------------------------------------------------------------------*/ /*! * numa2dAddNumber() * * Input: na2d * row of 2d array * col of 2d array * val (float or int to be added; stored as a float) * Return: 0 if OK, 1 on error */ l_int32 numa2dAddNumber(NUMA2D *na2d, l_int32 row, l_int32 col, l_float32 val) { NUMA *na; PROCNAME("numa2dAddNumber"); if (!na2d) return ERROR_INT("na2d not defined", procName, 1); if (row < 0 || row >= na2d->nrows) return ERROR_INT("row out of bounds", procName, 1); if (col < 0 || col >= na2d->ncols) return ERROR_INT("col out of bounds", procName, 1); if ((na = na2d->numa[row][col]) == NULL) { na = numaCreate(na2d->initsize); na2d->numa[row][col] = na; } numaAddNumber(na, val); return 0; } /*! * numa2dGetCount() * * Input: na2d * row of 2d array * col of 2d array * Return: size of numa at [row][col], or 0 if the numa doesn't exist * or on error */ l_int32 numa2dGetCount(NUMA2D *na2d, l_int32 row, l_int32 col) { NUMA *na; PROCNAME("numa2dGetCount"); if (!na2d) return ERROR_INT("na2d not defined", procName, 0); if (row < 0 || row >= na2d->nrows) return ERROR_INT("row out of bounds", procName, 0); if (col < 0 || col >= na2d->ncols) return ERROR_INT("col out of bounds", procName, 0); if ((na = na2d->numa[row][col]) == NULL) return 0; else return na->n; } /*! * numa2dGetNuma() * * Input: na2d * row of 2d array * col of 2d array * Return: na (a clone of the numa if it exists) or null if it doesn't * * Notes: * (1) This does not give an error if the index is out of bounds. */ NUMA * numa2dGetNuma(NUMA2D *na2d, l_int32 row, l_int32 col) { NUMA *na; PROCNAME("numa2dGetNuma"); if (!na2d) return (NUMA *)ERROR_PTR("na2d not defined", procName, NULL); if (row < 0 || row >= na2d->nrows || col < 0 || col >= na2d->ncols) return NULL; if ((na = na2d->numa[row][col]) == NULL) return NULL; return numaClone(na); } /*! * numa2dGetFValue() * * Input: na2d * row of 2d array * col of 2d array * index (into numa) * &val ( float value) * Return: 0 if OK, 1 on error */ l_int32 numa2dGetFValue(NUMA2D *na2d, l_int32 row, l_int32 col, l_int32 index, l_float32 *pval) { NUMA *na; PROCNAME("numa2dGetFValue"); if (!na2d) return ERROR_INT("na2d not defined", procName, 1); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (row < 0 || row >= na2d->nrows) return ERROR_INT("row out of bounds", procName, 1); if (col < 0 || col >= na2d->ncols) return ERROR_INT("col out of bounds", procName, 1); if ((na = na2d->numa[row][col]) == NULL) return ERROR_INT("numa does not exist", procName, 1); return numaGetFValue(na, index, pval); } /*! * numa2dGetIValue() * * Input: na2d * row of 2d array * col of 2d array * index (into numa) * &val ( integer value) * Return: 0 if OK, 1 on error */ l_int32 numa2dGetIValue(NUMA2D *na2d, l_int32 row, l_int32 col, l_int32 index, l_int32 *pval) { NUMA *na; PROCNAME("numa2dGetIValue"); if (!na2d) return ERROR_INT("na2d not defined", procName, 1); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0; if (row < 0 || row >= na2d->nrows) return ERROR_INT("row out of bounds", procName, 1); if (col < 0 || col >= na2d->ncols) return ERROR_INT("col out of bounds", procName, 1); if ((na = na2d->numa[row][col]) == NULL) return ERROR_INT("numa does not exist", procName, 1); return numaGetIValue(na, index, pval); } /*--------------------------------------------------------------------------* * Number array hash: Creation and destruction * *--------------------------------------------------------------------------*/ /*! * numaHashCreate() * * Input: nbuckets (the number of buckets in the hash table, * which should be prime.) * initsize (initial size of each allocated numa; 0 for default) * Return: ptr to new nahash, or null on error * * Note: actual numa are created only as required by numaHashAdd() */ NUMAHASH * numaHashCreate(l_int32 nbuckets, l_int32 initsize) { NUMAHASH *nahash; PROCNAME("numaHashCreate"); if (nbuckets <= 0) return (NUMAHASH *)ERROR_PTR("negative hash size", procName, NULL); if ((nahash = (NUMAHASH *)CALLOC(1, sizeof(NUMAHASH))) == NULL) return (NUMAHASH *)ERROR_PTR("nahash not made", procName, NULL); if ((nahash->numa = (NUMA **)CALLOC(nbuckets, sizeof(NUMA *))) == NULL) { FREE(nahash); return (NUMAHASH *)ERROR_PTR("numa ptr array not made", procName, NULL); } nahash->nbuckets = nbuckets; nahash->initsize = initsize; return nahash; } /*! * numaHashDestroy() * * Input: &nahash () * Return: void */ void numaHashDestroy(NUMAHASH **pnahash) { NUMAHASH *nahash; l_int32 i; PROCNAME("numaHashDestroy"); if (pnahash == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((nahash = *pnahash) == NULL) return; for (i = 0; i < nahash->nbuckets; i++) numaDestroy(&nahash->numa[i]); FREE(nahash->numa); FREE(nahash); *pnahash = NULL; } /*--------------------------------------------------------------------------* * Number array hash: Add elements and return numas *--------------------------------------------------------------------------*/ /*! * numaHashGetNuma() * * Input: nahash * key (key to be hashed into a bucket number) * Return: ptr to numa */ NUMA * numaHashGetNuma(NUMAHASH *nahash, l_uint32 key) { l_int32 bucket; NUMA *na; PROCNAME("numaHashGetNuma"); if (!nahash) return (NUMA *)ERROR_PTR("nahash not defined", procName, NULL); bucket = key % nahash->nbuckets; na = nahash->numa[bucket]; if (na) return numaClone(na); else return NULL; } /*! * numaHashAdd() * * Input: nahash * key (key to be hashed into a bucket number) * value (float value to be appended to the specific numa) * Return: 0 if OK; 1 on error */ l_int32 numaHashAdd(NUMAHASH *nahash, l_uint32 key, l_float32 value) { l_int32 bucket; NUMA *na; PROCNAME("numaHashAdd"); if (!nahash) return ERROR_INT("nahash not defined", procName, 1); bucket = key % nahash->nbuckets; na = nahash->numa[bucket]; if (!na) { if ((na = numaCreate(nahash->initsize)) == NULL) return ERROR_INT("na not made", procName, 1); nahash->numa[bucket] = na; } numaAddNumber(na, value); return 0; } leptonica-1.70/src/boxbasic.c0000644000175000017500000015005612253073021014234 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * boxbasic.c * * Basic 'class' functions for box, boxa and boxaa, * including accessors and serialization. * * Box creation, copy, clone, destruction * BOX *boxCreate() * BOX *boxCreateValid() * BOX *boxCopy() * BOX *boxClone() * void boxDestroy() * * Box accessors * l_int32 boxGetGeometry() * l_int32 boxSetGeometry() * l_int32 boxGetSideLocation() * l_int32 boxGetRefcount() * l_int32 boxChangeRefcount() * l_int32 boxIsValid() * * Boxa creation, copy, destruction * BOXA *boxaCreate() * BOXA *boxaCopy() * void boxaDestroy() * * Boxa array extension * l_int32 boxaAddBox() * l_int32 boxaExtendArray() * l_int32 boxaExtendArrayToSize() * * Boxa accessors * l_int32 boxaGetCount() * l_int32 boxaGetValidCount() * BOX *boxaGetBox() * BOX *boxaGetValidBox() * l_int32 boxaGetBoxGeometry() * l_int32 boxaIsFull() * * Boxa array modifiers * l_int32 boxaReplaceBox() * l_int32 boxaInsertBox() * l_int32 boxaRemoveBox() * l_int32 boxaRemoveBoxAndSave() * l_int32 boxaInitFull() * l_int32 boxaClear() * * Boxaa creation, copy, destruction * BOXAA *boxaaCreate() * BOXAA *boxaaCopy() * void boxaaDestroy() * * Boxaa array extension * l_int32 boxaaAddBoxa() * l_int32 boxaaExtendArray() * l_int32 boxaaExtendArrayToSize() * * Boxaa accessors * l_int32 boxaaGetCount() * l_int32 boxaaGetBoxCount() * BOXA *boxaaGetBoxa() * BOX *boxaaGetBox() * * Boxaa array modifiers * l_int32 boxaaInitFull() * l_int32 boxaaExtendWithInit() * l_int32 boxaaReplaceBoxa() * l_int32 boxaaInsertBoxa() * l_int32 boxaaRemoveBoxa() * l_int32 boxaaAddBox() * * Boxaa serialized I/O * BOXAA *boxaaReadFromFiles() * BOXAA *boxaaRead() * BOXAA *boxaaReadStream() * l_int32 boxaaWrite() * l_int32 boxaaWriteStream() * * Boxa serialized I/O * BOXA *boxaRead() * BOXA *boxaReadStream() * BOXA *boxaReadMem() * l_int32 boxaWrite() * l_int32 boxaWriteStream() * l_int32 boxaWriteMem() * * Box print (for debug) * l_int32 boxPrintStreamInfo() * * Most functions use only valid boxes, which are boxes that have both * width and height > 0. However, a few functions, such as * boxaGetMedian() do not assume that all boxes are valid. For any * function that can use a boxa with invalid boxes, it is convenient * to use these accessors: * boxaGetValidCount() : count of valid boxes * boxaGetValidBox() : returns NULL for invalid boxes */ #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ /*---------------------------------------------------------------------* * Box creation, destruction and copy * *---------------------------------------------------------------------*/ /*! * boxCreate() * * Input: x, y, w, h * Return: box, or null on error * * Notes: * (1) This clips the box to the +quad. If no part of the * box is in the +quad, this returns NULL. * (2) We allow you to make a box with w = 0 and/or h = 0. * This does not represent a valid region, but it is useful * as a placeholder in a boxa for which the index of the * box in the boxa is important. This is an atypical * situation; usually you want to put only valid boxes with * nonzero width and height in a boxa. If you have a boxa * with invalid boxes, the accessor boxaGetValidBox() * will return NULL on each invalid box. * (3) If you want to create only valid boxes, use boxCreateValid(), * which returns NULL if either w or h is 0. */ BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h) { BOX *box; PROCNAME("boxCreate"); if (w < 0 || h < 0) return (BOX *)ERROR_PTR("w and h not both >= 0", procName, NULL); if (x < 0) { /* take part in +quad */ w = w + x; x = 0; if (w <= 0) return (BOX *)ERROR_PTR("x < 0 and box off +quad", procName, NULL); } if (y < 0) { /* take part in +quad */ h = h + y; y = 0; if (h <= 0) return (BOX *)ERROR_PTR("y < 0 and box off +quad", procName, NULL); } if ((box = (BOX *)CALLOC(1, sizeof(BOX))) == NULL) return (BOX *)ERROR_PTR("box not made", procName, NULL); boxSetGeometry(box, x, y, w, h); box->refcount = 1; return box; } /*! * boxCreateValid() * * Input: x, y, w, h * Return: box, or null on error * * Notes: * (1) This returns NULL if either w = 0 or h = 0. */ BOX * boxCreateValid(l_int32 x, l_int32 y, l_int32 w, l_int32 h) { PROCNAME("boxCreateValid"); if (w <= 0 || h <= 0) return (BOX *)ERROR_PTR("w and h not both > 0", procName, NULL); return boxCreate(x, y, w, h); } /*! * boxCopy() * * Input: box * Return: copy of box, or null on error */ BOX * boxCopy(BOX *box) { BOX *boxc; PROCNAME("boxCopy"); if (!box) return (BOX *)ERROR_PTR("box not defined", procName, NULL); boxc = boxCreate(box->x, box->y, box->w, box->h); return boxc; } /*! * boxClone() * * Input: box * Return: ptr to same box, or null on error */ BOX * boxClone(BOX *box) { PROCNAME("boxClone"); if (!box) return (BOX *)ERROR_PTR("box not defined", procName, NULL); boxChangeRefcount(box, 1); return box; } /*! * boxDestroy() * * Input: &box () * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the box. * (2) Always nulls the input ptr. */ void boxDestroy(BOX **pbox) { BOX *box; PROCNAME("boxDestroy"); if (pbox == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((box = *pbox) == NULL) return; boxChangeRefcount(box, -1); if (boxGetRefcount(box) <= 0) FREE(box); *pbox = NULL; return; } /*---------------------------------------------------------------------* * Box accessors * *---------------------------------------------------------------------*/ /*! * boxGetGeometry() * * Input: box * &x, &y, &w, &h (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { PROCNAME("boxGetGeometry"); if (px) *px = 0; if (py) *py = 0; if (pw) *pw = 0; if (ph) *ph = 0; if (!box) return ERROR_INT("box not defined", procName, 1); if (px) *px = box->x; if (py) *py = box->y; if (pw) *pw = box->w; if (ph) *ph = box->h; return 0; } /*! * boxSetGeometry() * * Input: box * x, y, w, h (use -1 to leave unchanged) * Return: 0 if OK, 1 on error */ l_int32 boxSetGeometry(BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h) { PROCNAME("boxSetGeometry"); if (!box) return ERROR_INT("box not defined", procName, 1); if (x != -1) box->x = x; if (y != -1) box->y = y; if (w != -1) box->w = w; if (h != -1) box->h = h; return 0; } /*! * boxGetSideLocation() * * Input: box * side (L_GET_LEFT, L_GET_RIGHT, L_GET_TOP, L_GET_BOT) * &loc ( location) * Return: 0 if OK, 1 on error * * Notes: * (1) All returned values are within the box. In particular: * right = left + width - 1 * bottom = top + height - 1 */ l_int32 boxGetSideLocation(BOX *box, l_int32 side, l_int32 *ploc) { l_int32 x, y, w, h; PROCNAME("boxGetSideLocation"); if (!ploc) return ERROR_INT("&loc not defined", procName, 1); *ploc = 0; if (!box) return ERROR_INT("box not defined", procName, 1); boxGetGeometry(box, &x, &y, &w, &h); if (side == L_GET_LEFT) *ploc = x; else if (side == L_GET_RIGHT) *ploc = x + w - 1; else if (side == L_GET_TOP) *ploc = y; else if (side == L_GET_BOT) *ploc = y + h - 1; else return ERROR_INT("invalid side", procName, 1); return 0; } l_int32 boxGetRefcount(BOX *box) { PROCNAME("boxGetRefcount"); if (!box) return ERROR_INT("box not defined", procName, UNDEF); return box->refcount; } l_int32 boxChangeRefcount(BOX *box, l_int32 delta) { PROCNAME("boxChangeRefcount"); if (!box) return ERROR_INT("box not defined", procName, 1); box->refcount += delta; return 0; } /*! * boxIsValid() * * Input: box * &valid ( 1 if valid; 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 boxIsValid(BOX *box, l_int32 *pvalid) { PROCNAME("boxIsValid"); if (!pvalid) return ERROR_INT("&valid not defined", procName, 1); *pvalid = 0; if (!box) return ERROR_INT("box not defined", procName, 1); if (box->w > 0 && box->h > 0) *pvalid = 1; return 0; } /*---------------------------------------------------------------------* * Boxa creation, destruction, copy, extension * *---------------------------------------------------------------------*/ /*! * boxaCreate() * * Input: n (initial number of ptrs) * Return: boxa, or null on error */ BOXA * boxaCreate(l_int32 n) { BOXA *boxa; PROCNAME("boxaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((boxa = (BOXA *)CALLOC(1, sizeof(BOXA))) == NULL) return (BOXA *)ERROR_PTR("boxa not made", procName, NULL); boxa->n = 0; boxa->nalloc = n; boxa->refcount = 1; if ((boxa->box = (BOX **)CALLOC(n, sizeof(BOX *))) == NULL) return (BOXA *)ERROR_PTR("boxa ptrs not made", procName, NULL); return boxa; } /*! * boxaCopy() * * Input: boxa * copyflag (L_COPY, L_CLONE, L_COPY_CLONE) * Return: new boxa, or null on error * * Notes: * (1) See pix.h for description of the copyflag. * (2) The copy-clone makes a new boxa that holds clones of each box. */ BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag) { l_int32 i; BOX *boxc; BOXA *boxac; PROCNAME("boxaCopy"); if (!boxa) return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); if (copyflag == L_CLONE) { boxa->refcount++; return boxa; } if (copyflag != L_COPY && copyflag != L_COPY_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); if ((boxac = boxaCreate(boxa->nalloc)) == NULL) return (BOXA *)ERROR_PTR("boxac not made", procName, NULL); for (i = 0; i < boxa->n; i++) { if (copyflag == L_COPY) boxc = boxaGetBox(boxa, i, L_COPY); else /* copy-clone */ boxc = boxaGetBox(boxa, i, L_CLONE); boxaAddBox(boxac, boxc, L_INSERT); } return boxac; } /*! * boxaDestroy() * * Input: &boxa () * Return: void * * Note: * - Decrements the ref count and, if 0, destroys the boxa. * - Always nulls the input ptr. */ void boxaDestroy(BOXA **pboxa) { l_int32 i; BOXA *boxa; PROCNAME("boxaDestroy"); if (pboxa == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((boxa = *pboxa) == NULL) return; /* Decrement the ref count. If it is 0, destroy the boxa. */ boxa->refcount--; if (boxa->refcount <= 0) { for (i = 0; i < boxa->n; i++) boxDestroy(&boxa->box[i]); FREE(boxa->box); FREE(boxa); } *pboxa = NULL; return; } /*! * boxaAddBox() * * Input: boxa * box (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag) { l_int32 n; BOX *boxc; PROCNAME("boxaAddBox"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (copyflag == L_INSERT) boxc = box; else if (copyflag == L_COPY) boxc = boxCopy(box); else if (copyflag == L_CLONE) boxc = boxClone(box); else return ERROR_INT("invalid copyflag", procName, 1); if (!boxc) return ERROR_INT("boxc not made", procName, 1); n = boxaGetCount(boxa); if (n >= boxa->nalloc) boxaExtendArray(boxa); boxa->box[n] = boxc; boxa->n++; return 0; } /*! * boxaExtendArray() * * Input: boxa * Return: 0 if OK; 1 on error * * Notes: * (1) Reallocs with doubled size of ptr array. */ l_int32 boxaExtendArray(BOXA *boxa) { PROCNAME("boxaExtendArray"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); return boxaExtendArrayToSize(boxa, 2 * boxa->nalloc); } /*! * boxaExtendArrayToSize() * * Input: boxa * size (new size of boxa array) * Return: 0 if OK; 1 on error * * Notes: * (1) If necessary, reallocs new boxa ptr array to @size. */ l_int32 boxaExtendArrayToSize(BOXA *boxa, l_int32 size) { PROCNAME("boxaExtendArrayToSize"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (size > boxa->nalloc) { if ((boxa->box = (BOX **)reallocNew((void **)&boxa->box, sizeof(BOX *) * boxa->nalloc, size * sizeof(BOX *))) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); boxa->nalloc = size; } return 0; } /*---------------------------------------------------------------------* * Boxa accessors * *---------------------------------------------------------------------*/ /*! * boxaGetCount() * * Input: boxa * Return: count (of all boxes); 0 if no boxes or on error */ l_int32 boxaGetCount(BOXA *boxa) { PROCNAME("boxaGetCount"); if (!boxa) return ERROR_INT("boxa not defined", procName, 0); return boxa->n; } /*! * boxaGetValidCount() * * Input: boxa * Return: count (of valid boxes); 0 if no valid boxes or on error */ l_int32 boxaGetValidCount(BOXA *boxa) { l_int32 n, i, w, h, count; PROCNAME("boxaGetValidCount"); if (!boxa) return ERROR_INT("boxa not defined", procName, 0); n = boxaGetCount(boxa); for (i = 0, count = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); if (w > 0 && h > 0) count++; } return count; } /*! * boxaGetBox() * * Input: boxa * index (to the index-th box) * accessflag (L_COPY or L_CLONE) * Return: box, or null on error */ BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag) { PROCNAME("boxaGetBox"); if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); if (index < 0 || index >= boxa->n) return (BOX *)ERROR_PTR("index not valid", procName, NULL); if (accessflag == L_COPY) return boxCopy(boxa->box[index]); else if (accessflag == L_CLONE) return boxClone(boxa->box[index]); else return (BOX *)ERROR_PTR("invalid accessflag", procName, NULL); } /*! * boxaGetValidBox() * * Input: boxa * index (to the index-th box) * accessflag (L_COPY or L_CLONE) * Return: box, or null if box is not valid or on error * * Notes: * (1) This returns NULL for an invalid box in a boxa. * For a box to be valid, both the width and height must be > 0. * (2) We allow invalid boxes, with w = 0 or h = 0, as placeholders * in boxa for which the index of the box in the boxa is important. * This is an atypical situation; usually you want to put only * valid boxes in a boxa. */ BOX * boxaGetValidBox(BOXA *boxa, l_int32 index, l_int32 accessflag) { l_int32 w, h; BOX *box; PROCNAME("boxaGetValidBox"); if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); if ((box = boxaGetBox(boxa, index, accessflag)) == NULL) return (BOX *)ERROR_PTR("box not returned", procName, NULL); boxGetGeometry(box, NULL, NULL, &w, &h); if (w <= 0 || h <= 0) /* not valid, but not necessarily an error */ boxDestroy(&box); return box; } /*! * boxaGetBoxGeometry() * * Input: boxa * index (to the index-th box) * &x, &y, &w, &h (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { BOX *box; PROCNAME("boxaGetBoxGeometry"); if (px) *px = 0; if (py) *py = 0; if (pw) *pw = 0; if (ph) *ph = 0; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (index < 0 || index >= boxa->n) return ERROR_INT("index not valid", procName, 1); if ((box = boxaGetBox(boxa, index, L_CLONE)) == NULL) return ERROR_INT("box not found!", procName, 1); boxGetGeometry(box, px, py, pw, ph); boxDestroy(&box); return 0; } /*! * boxaIsFull() * * Input: boxa * &full (return> 1 if boxa is full) * Return: 0 if OK, 1 on error */ l_int32 boxaIsFull(BOXA *boxa, l_int32 *pfull) { l_int32 i, n, full; BOX *box; PROCNAME("boxaIsFull"); if (!pfull) return ERROR_INT("&full not defined", procName, 1); *pfull = 0; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); full = 1; for (i = 0; i < n; i++) { if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) { full = 0; break; } boxDestroy(&box); } *pfull = full; return 0; } /*---------------------------------------------------------------------* * Boxa array modifiers * *---------------------------------------------------------------------*/ /*! * boxaReplaceBox() * * Input: boxa * index (to the index-th box) * box (insert to replace existing one) * Return: 0 if OK, 1 on error * * Notes: * (1) In-place replacement of one box. * (2) The previous box at that location, if any, is destroyed. */ l_int32 boxaReplaceBox(BOXA *boxa, l_int32 index, BOX *box) { PROCNAME("boxaReplaceBox"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (index < 0 || index >= boxa->n) return ERROR_INT("index not valid", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); boxDestroy(&(boxa->box[index])); boxa->box[index] = box; return 0; } /*! * boxaInsertBox() * * Input: boxa * index (location in boxa to insert new value) * box (new box to be inserted) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts box[i] --> box[i + 1] for all i >= index, * and then inserts box as box[index]. * (2) To insert at the beginning of the array, set index = 0. * (3) To append to the array, it's easier to use boxaAddBox(). * (4) This should not be used repeatedly to insert into large arrays, * because the function is O(n). */ l_int32 boxaInsertBox(BOXA *boxa, l_int32 index, BOX *box) { l_int32 i, n; BOX **array; PROCNAME("boxaInsertBox"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); if (index < 0 || index > n) return ERROR_INT("index not in {0...n}", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (n >= boxa->nalloc) boxaExtendArray(boxa); array = boxa->box; boxa->n++; for (i = n; i > index; i--) array[i] = array[i - 1]; array[index] = box; return 0; } /*! * boxaRemoveBox() * * Input: boxa * index (of box to be removed) * Return: 0 if OK, 1 on error * * Notes: * (1) This removes box[index] and then shifts * box[i] --> box[i - 1] for all i > index. * (2) It should not be used repeatedly to remove boxes from * large arrays, because the function is O(n). */ l_int32 boxaRemoveBox(BOXA *boxa, l_int32 index) { l_int32 i, n; BOX **array; PROCNAME("boxaRemoveBox"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); array = boxa->box; boxDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; boxa->n--; return 0; } /*! * boxaRemoveBoxAndSave() * * Input: boxa * index (of box to be removed) * &box ( removed box) * Return: 0 if OK, 1 on error * * Notes: * (1) This removes box[index] and then shifts * box[i] --> box[i - 1] for all i > index. * (2) It should not be used repeatedly to remove boxes from * large arrays, because the function is O(n). */ l_int32 boxaRemoveBoxAndSave(BOXA *boxa, l_int32 index, BOX **pbox) { l_int32 i, n; BOX **array; PROCNAME("boxaRemoveBoxAndSave"); if (pbox) *pbox = NULL; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); if (pbox) *pbox = boxaGetBox(boxa, index, L_CLONE); array = boxa->box; boxDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; boxa->n--; return 0; } /*! * boxaInitFull() * * Input: boxa (typically empty) * box ( to be replicated into the entire ptr array) * Return: 0 if OK, 1 on error * * Notes: * (1) This initializes a boxa by filling up the entire box ptr array * with copies of @box. If @box == NULL, use a placeholder box * of zero size. Any existing boxes are destroyed. * After this opepration, the number of boxes is equal to * the number of allocated ptrs. * (2) Note that we use boxaReplaceBox() instead of boxaInsertBox(). * They both have the same effect when inserting into a NULL ptr * in the boxa ptr array: * (3) Example usage. This function is useful to prepare for a * random insertion (or replacement) of boxes into a boxa. * To randomly insert boxes into a boxa, up to some index "max": * Boxa *boxa = boxaCreate(max); * boxaInitFull(boxa, NULL); * If you want placeholder boxes of non-zero size: * Boxa *boxa = boxaCreate(max); * Box *box = boxCreate(...); * boxaInitFull(boxa, box); * boxDestroy(&box); * If we have an existing boxa with a smaller ptr array, it can * be reused for up to max boxes: * boxaExtendArrayToSize(boxa, max); * boxaInitFull(boxa, NULL); * The initialization allows the boxa to always be properly * filled, even if all the boxes are not later replaced. * If you want to know which boxes have been replaced, * and you initialized with invalid zero-sized boxes, * use boxaGetValidBox() to return NULL for the invalid boxes. */ l_int32 boxaInitFull(BOXA *boxa, BOX *box) { l_int32 i, n; BOX *boxt; PROCNAME("boxaInitFull"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxa->nalloc; boxa->n = n; for (i = 0; i < n; i++) { if (box) boxt = boxCopy(box); else boxt = boxCreate(0, 0, 0, 0); boxaReplaceBox(boxa, i, boxt); } return 0; } /*! * boxaClear() * * Input: boxa * Return: 0 if OK, 1 on error * * Notes: * (1) This destroys all boxes in the boxa, setting the ptrs * to null. The number of allocated boxes, n, is set to 0. */ l_int32 boxaClear(BOXA *boxa) { l_int32 i, n; PROCNAME("boxaClear"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); for (i = 0; i < n; i++) boxDestroy(&boxa->box[i]); boxa->n = 0; return 0; } /*--------------------------------------------------------------------------* * Boxaa creation, destruction * *--------------------------------------------------------------------------*/ /*! * boxaaCreate() * * Input: size of boxa ptr array to be alloc'd (0 for default) * Return: baa, or null on error */ BOXAA * boxaaCreate(l_int32 n) { BOXAA *baa; PROCNAME("boxaaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((baa = (BOXAA *)CALLOC(1, sizeof(BOXAA))) == NULL) return (BOXAA *)ERROR_PTR("baa not made", procName, NULL); if ((baa->boxa = (BOXA **)CALLOC(n, sizeof(BOXA *))) == NULL) return (BOXAA *)ERROR_PTR("boxa ptr array not made", procName, NULL); baa->nalloc = n; baa->n = 0; return baa; } /*! * boxaaCopy() * * Input: baas (input boxaa to be copied) * copyflag (L_COPY, L_CLONE) * Return: baad (new boxaa, composed of copies or clones of the boxa * in baas), or null on error * * Notes: * (1) L_COPY makes a copy of each boxa in baas. * L_CLONE makes a clone of each boxa in baas. */ BOXAA * boxaaCopy(BOXAA *baas, l_int32 copyflag) { l_int32 i, n; BOXA *boxa; BOXAA *baad; PROCNAME("boxaaCopy"); if (!baas) return (BOXAA *)ERROR_PTR("baas not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXAA *)ERROR_PTR("invalid copyflag", procName, NULL); n = boxaaGetCount(baas); baad = boxaaCreate(n); for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baas, i, copyflag); boxaaAddBoxa(baad, boxa, L_INSERT); } return baad; } /*! * boxaaDestroy() * * Input: &boxaa () * Return: void */ void boxaaDestroy(BOXAA **pbaa) { l_int32 i; BOXAA *baa; PROCNAME("boxaaDestroy"); if (pbaa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((baa = *pbaa) == NULL) return; for (i = 0; i < baa->n; i++) boxaDestroy(&baa->boxa[i]); FREE(baa->boxa); FREE(baa); *pbaa = NULL; return; } /*--------------------------------------------------------------------------* * Add Boxa to Boxaa * *--------------------------------------------------------------------------*/ /*! * boxaaAddBoxa() * * Input: boxaa * boxa (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 boxaaAddBoxa(BOXAA *baa, BOXA *ba, l_int32 copyflag) { l_int32 n; BOXA *bac; PROCNAME("boxaaAddBoxa"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if (!ba) return ERROR_INT("ba not defined", procName, 1); if (copyflag != L_INSERT && copyflag != L_COPY && copyflag != L_CLONE) return ERROR_INT("invalid copyflag", procName, 1); if (copyflag == L_INSERT) bac = ba; else bac = boxaCopy(ba, copyflag); n = boxaaGetCount(baa); if (n >= baa->nalloc) boxaaExtendArray(baa); baa->boxa[n] = bac; baa->n++; return 0; } /*! * boxaaExtendArray() * * Input: boxaa * Return: 0 if OK, 1 on error */ l_int32 boxaaExtendArray(BOXAA *baa) { PROCNAME("boxaaExtendArray"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if ((baa->boxa = (BOXA **)reallocNew((void **)&baa->boxa, sizeof(BOXA *) * baa->nalloc, 2 * sizeof(BOXA *) * baa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); baa->nalloc *= 2; return 0; } /*! * boxaaExtendArrayToSize() * * Input: boxaa * size (new size of boxa array) * Return: 0 if OK; 1 on error * * Notes: * (1) If necessary, reallocs the boxa ptr array to @size. */ l_int32 boxaaExtendArrayToSize(BOXAA *baa, l_int32 size) { PROCNAME("boxaaExtendArrayToSize"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if (size > baa->nalloc) { if ((baa->boxa = (BOXA **)reallocNew((void **)&baa->boxa, sizeof(BOXA *) * baa->nalloc, size * sizeof(BOXA *))) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); baa->nalloc = size; } return 0; } /*----------------------------------------------------------------------* * Boxaa accessors * *----------------------------------------------------------------------*/ /*! * boxaaGetCount() * * Input: boxaa * Return: count (number of boxa), or 0 if no boxa or on error */ l_int32 boxaaGetCount(BOXAA *baa) { PROCNAME("boxaaGetCount"); if (!baa) return ERROR_INT("baa not defined", procName, 0); return baa->n; } /*! * boxaaGetBoxCount() * * Input: boxaa * Return: count (number of boxes), or 0 if no boxes or on error */ l_int32 boxaaGetBoxCount(BOXAA *baa) { BOXA *boxa; l_int32 n, sum, i; PROCNAME("boxaaGetBoxCount"); if (!baa) return ERROR_INT("baa not defined", procName, 0); n = boxaaGetCount(baa); for (sum = 0, i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); sum += boxaGetCount(boxa); boxaDestroy(&boxa); } return sum; } /*! * boxaaGetBoxa() * * Input: boxaa * index (to the index-th boxa) * accessflag (L_COPY or L_CLONE) * Return: boxa, or null on error */ BOXA * boxaaGetBoxa(BOXAA *baa, l_int32 index, l_int32 accessflag) { l_int32 n; PROCNAME("boxaaGetBoxa"); if (!baa) return (BOXA *)ERROR_PTR("baa not defined", procName, NULL); n = boxaaGetCount(baa); if (index < 0 || index >= n) return (BOXA *)ERROR_PTR("index not valid", procName, NULL); if (accessflag != L_COPY && accessflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid accessflag", procName, NULL); return boxaCopy(baa->boxa[index], accessflag); } /*! * boxaaGetBox() * * Input: baa * iboxa (index into the boxa array in the boxaa) * ibox (index into the box array in the boxa) * accessflag (L_COPY or L_CLONE) * Return: box, or null on error */ BOX * boxaaGetBox(BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag) { BOX *box; BOXA *boxa; PROCNAME("boxaaGetBox"); if ((boxa = boxaaGetBoxa(baa, iboxa, L_CLONE)) == NULL) return (BOX *)ERROR_PTR("boxa not retrieved", procName, NULL); if ((box = boxaGetBox(boxa, ibox, accessflag)) == NULL) L_ERROR("box not retrieved\n", procName); boxaDestroy(&boxa); return box; } /*----------------------------------------------------------------------* * Boxaa array modifiers * *----------------------------------------------------------------------*/ /*! * boxaaInitFull() * * Input: boxaa (typically empty) * boxa (to be replicated into the entire ptr array) * Return: 0 if OK, 1 on error * * Notes: * (1) This initializes a boxaa by filling up the entire boxa ptr array * with copies of @boxa. Any existing boxa are destroyed. * After this operation, the number of boxa is equal to * the number of allocated ptrs. * (2) Note that we use boxaaReplaceBox() instead of boxaInsertBox(). * They both have the same effect when inserting into a NULL ptr * in the boxa ptr array * (3) Example usage. This function is useful to prepare for a * random insertion (or replacement) of boxa into a boxaa. * To randomly insert boxa into a boxaa, up to some index "max": * Boxaa *baa = boxaaCreate(max); * // initialize the boxa * Boxa *boxa = boxaCreate(...); * ... [optionally fix with boxes] * boxaaInitFull(baa, boxa); * A typical use is to initialize the array with empty boxa, * and to replace only a subset that must be aligned with * something else, such as a pixa. */ l_int32 boxaaInitFull(BOXAA *baa, BOXA *boxa) { l_int32 i, n; BOXA *boxat; PROCNAME("boxaaInitFull"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = baa->nalloc; baa->n = n; for (i = 0; i < n; i++) { boxat = boxaCopy(boxa, L_COPY); boxaaReplaceBoxa(baa, i, boxat); } return 0; } /*! * boxaaExtendWithInit() * * Input: boxaa * maxindex * boxa (to be replicated into the extended ptr array) * Return: 0 if OK, 1 on error * * Notes: * (1) This should be used on an existing boxaa that has been * fully loaded with boxa. It then extends the boxaa, * loading all the additional ptrs with copies of boxa. * Typically, boxa will be empty. */ l_int32 boxaaExtendWithInit(BOXAA *baa, l_int32 maxindex, BOXA *boxa) { l_int32 i, n; PROCNAME("boxaaExtendWithInit"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); /* Extend the ptr array if necessary */ n = boxaaGetCount(baa); if (maxindex < n) return 0; boxaaExtendArrayToSize(baa, maxindex + 1); /* Fill the new entries with copies of boxa */ for (i = n; i <= maxindex; i++) boxaaAddBoxa(baa, boxa, L_COPY); return 0; } /*! * boxaaReplaceBoxa() * * Input: boxaa * index (to the index-th boxa) * boxa (insert and replace any existing one) * Return: 0 if OK, 1 on error * * Notes: * (1) Any existing boxa is destroyed, and the input one * is inserted in its place. * (2) If the index is invalid, return 1 (error) */ l_int32 boxaaReplaceBoxa(BOXAA *baa, l_int32 index, BOXA *boxa) { l_int32 n; PROCNAME("boxaaReplaceBoxa"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaaGetCount(baa); if (index < 0 || index >= n) return ERROR_INT("index not valid", procName, 1); boxaDestroy(&baa->boxa[index]); baa->boxa[index] = boxa; return 0; } /*! * boxaaInsertBoxa() * * Input: boxaa * index (location in boxaa to insert new boxa) * boxa (new boxa to be inserted) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts boxa[i] --> boxa[i + 1] for all i >= index, * and then inserts boxa as boxa[index]. * (2) To insert at the beginning of the array, set index = 0. * (3) To append to the array, it's easier to use boxaaAddBoxa(). * (4) This should not be used repeatedly to insert into large arrays, * because the function is O(n). */ l_int32 boxaaInsertBoxa(BOXAA *baa, l_int32 index, BOXA *boxa) { l_int32 i, n; BOXA **array; PROCNAME("boxaaInsertBoxa"); if (!baa) return ERROR_INT("baa not defined", procName, 1); n = boxaaGetCount(baa); if (index < 0 || index > n) return ERROR_INT("index not in {0...n}", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (n >= baa->nalloc) boxaaExtendArray(baa); array = baa->boxa; baa->n++; for (i = n; i > index; i--) array[i] = array[i - 1]; array[index] = boxa; return 0; } /*! * boxaaRemoveBoxa() * * Input: boxaa * index (of the boxa to be removed) * Return: 0 if OK, 1 on error * * Notes: * (1) This removes boxa[index] and then shifts * boxa[i] --> boxa[i - 1] for all i > index. * (2) The removed boxaa is destroyed. * (2) This should not be used repeatedly on large arrays, * because the function is O(n). */ l_int32 boxaaRemoveBoxa(BOXAA *baa, l_int32 index) { l_int32 i, n; BOXA **array; PROCNAME("boxaaRemoveBox"); if (!baa) return ERROR_INT("baa not defined", procName, 1); n = boxaaGetCount(baa); if (index < 0 || index >= n) return ERROR_INT("index not valid", procName, 1); array = baa->boxa; boxaDestroy(&array[index]); for (i = index + 1; i < n; i++) array[i - 1] = array[i]; array[n - 1] = NULL; baa->n--; return 0; } /*! * boxaaAddBox() * * Input: boxaa * index (of boxa with boxaa) * box (to be added) * accessflag (L_INSERT, L_COPY or L_CLONE) * Return: 0 if OK, 1 on error * * Notes: * (1) Adds to an existing boxa only. */ l_int32 boxaaAddBox(BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag) { l_int32 n; BOXA *boxa; PROCNAME("boxaaAddBox"); if (!baa) return ERROR_INT("baa not defined", procName, 1); n = boxaaGetCount(baa); if (index < 0 || index >= n) return ERROR_INT("index not valid", procName, 1); if (accessflag != L_INSERT && accessflag != L_COPY && accessflag != L_CLONE) return ERROR_INT("invalid accessflag", procName, 1); boxa = boxaaGetBoxa(baa, index, L_CLONE); boxaAddBox(boxa, box, accessflag); boxaDestroy(&boxa); return 0; } /*---------------------------------------------------------------------* * Boxaa serialized I/O * *---------------------------------------------------------------------*/ /*! * boxaaReadFromFiles() * * Input: dirname (directory) * substr ( substring filter on filenames; can be NULL) * first (0-based) * nfiles (use 0 for everything from @first to the end) * Return: baa, or null on error or if no boxa files are found. * * Notes: * (1) The files must be serialized boxa files (e.g., *.ba). * If some files cannot be read, warnings are issued. * (2) Use @substr to filter filenames in the directory. If * @substr == NULL, this takes all files. * (3) After filtering, use @first and @nfiles to select * a contiguous set of files, that have been lexically * sorted in increasing order. */ BOXAA * boxaaReadFromFiles(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles) { char *fname; l_int32 i, n; BOXA *boxa; BOXAA *baa; SARRAY *sa; PROCNAME("boxaaReadFromFiles"); if (!dirname) return (BOXAA *)ERROR_PTR("dirname not defined", procName, NULL); sa = getSortedPathnamesInDirectory(dirname, substr, first, nfiles); if (!sa || ((n = sarrayGetCount(sa)) == 0)) { sarrayDestroy(&sa); return (BOXAA *)ERROR_PTR("no pixa files found", procName, NULL); } baa = boxaaCreate(n); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if ((boxa = boxaRead(fname)) == NULL) { L_ERROR("boxa not read for %d-th file", procName, i); continue; } boxaaAddBoxa(baa, boxa, L_INSERT); } sarrayDestroy(&sa); return baa; } /*! * boxaaRead() * * Input: filename * Return: boxaa, or null on error */ BOXAA * boxaaRead(const char *filename) { FILE *fp; BOXAA *baa; PROCNAME("boxaaRead"); if (!filename) return (BOXAA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (BOXAA *)ERROR_PTR("stream not opened", procName, NULL); if ((baa = boxaaReadStream(fp)) == NULL) { fclose(fp); return (BOXAA *)ERROR_PTR("boxaa not read", procName, NULL); } fclose(fp); return baa; } /*! * boxaaReadStream() * * Input: stream * Return: boxaa, or null on error */ BOXAA * boxaaReadStream(FILE *fp) { l_int32 n, i, x, y, w, h, version; l_int32 ignore; BOXA *boxa; BOXAA *baa; PROCNAME("boxaaReadStream"); if (!fp) return (BOXAA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nBoxaa Version %d\n", &version) != 1) return (BOXAA *)ERROR_PTR("not a boxaa file", procName, NULL); if (version != BOXAA_VERSION_NUMBER) return (BOXAA *)ERROR_PTR("invalid boxa version", procName, NULL); if (fscanf(fp, "Number of boxa = %d\n", &n) != 1) return (BOXAA *)ERROR_PTR("not a boxaa file", procName, NULL); if ((baa = boxaaCreate(n)) == NULL) return (BOXAA *)ERROR_PTR("boxaa not made", procName, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, "\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d", &ignore, &x, &y, &w, &h) != 5) return (BOXAA *)ERROR_PTR("boxa descr not valid", procName, NULL); if ((boxa = boxaReadStream(fp)) == NULL) return (BOXAA *)ERROR_PTR("boxa not made", procName, NULL); boxaaAddBoxa(baa, boxa, L_INSERT); } return baa; } /*! * boxaaWrite() * * Input: filename * boxaa * Return: 0 if OK, 1 on error */ l_int32 boxaaWrite(const char *filename, BOXAA *baa) { FILE *fp; PROCNAME("boxaaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!baa) return ERROR_INT("baa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (boxaaWriteStream(fp, baa)) return ERROR_INT("baa not written to stream", procName, 1); fclose(fp); return 0; } /*! * boxaaWriteStream() * * Input: stream * boxaa * Return: 0 if OK, 1 on error */ l_int32 boxaaWriteStream(FILE *fp, BOXAA *baa) { l_int32 n, i, x, y, w, h; BOX *box; BOXA *boxa; PROCNAME("boxaaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!baa) return ERROR_INT("baa not defined", procName, 1); n = boxaaGetCount(baa); fprintf(fp, "\nBoxaa Version %d\n", BOXAA_VERSION_NUMBER); fprintf(fp, "Number of boxa = %d\n", n); for (i = 0; i < n; i++) { if ((boxa = boxaaGetBoxa(baa, i, L_CLONE)) == NULL) return ERROR_INT("boxa not found", procName, 1); boxaGetExtent(boxa, NULL, NULL, &box); boxGetGeometry(box, &x, &y, &w, &h); fprintf(fp, "\nBoxa[%d] extent: x = %d, y = %d, w = %d, h = %d", i, x, y, w, h); boxaWriteStream(fp, boxa); boxDestroy(&box); boxaDestroy(&boxa); } return 0; } /*---------------------------------------------------------------------* * Boxa serialized I/O * *---------------------------------------------------------------------*/ /*! * boxaRead() * * Input: filename * Return: boxa, or null on error */ BOXA * boxaRead(const char *filename) { FILE *fp; BOXA *boxa; PROCNAME("boxaRead"); if (!filename) return (BOXA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (BOXA *)ERROR_PTR("stream not opened", procName, NULL); if ((boxa = boxaReadStream(fp)) == NULL) { fclose(fp); return (BOXA *)ERROR_PTR("boxa not read", procName, NULL); } fclose(fp); return boxa; } /*! * boxaReadStream() * * Input: stream * Return: boxa, or null on error */ BOXA * boxaReadStream(FILE *fp) { l_int32 n, i, x, y, w, h, version; l_int32 ignore; BOX *box; BOXA *boxa; PROCNAME("boxaReadStream"); if (!fp) return (BOXA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nBoxa Version %d\n", &version) != 1) return (BOXA *)ERROR_PTR("not a boxa file", procName, NULL); if (version != BOXA_VERSION_NUMBER) return (BOXA *)ERROR_PTR("invalid boxa version", procName, NULL); if (fscanf(fp, "Number of boxes = %d\n", &n) != 1) return (BOXA *)ERROR_PTR("not a boxa file", procName, NULL); if ((boxa = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxa not made", procName, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, " Box[%d]: x = %d, y = %d, w = %d, h = %d\n", &ignore, &x, &y, &w, &h) != 5) return (BOXA *)ERROR_PTR("box descr not valid", procName, NULL); if ((box = boxCreate(x, y, w, h)) == NULL) return (BOXA *)ERROR_PTR("box not made", procName, NULL); boxaAddBox(boxa, box, L_INSERT); } return boxa; } /*! * boxaReadMem() * * Input: data (ascii) * size (of data; can use strlen to get it) * Return: boxa, or null on error */ BOXA * boxaReadMem(const l_uint8 *data, size_t size) { FILE *fp; BOXA *boxa; PROCNAME("boxaReadMem"); if (!data) return (BOXA *)ERROR_PTR("data not defined", procName, NULL); /* De-serialize: write serialized data to file and read back as boxa. * We are writing to file first, instead of reading from the memory * buffer, because the gnu extension fmemopen() is not available * with other runtimes. */ fp = tmpfile(); fwrite(data, 1, size, fp); rewind(fp); boxa = boxaReadStream(fp); fclose(fp); if (!boxa) L_ERROR("boxa not read\n", procName); return boxa; } /*! * boxaWrite() * * Input: filename * boxa * Return: 0 if OK, 1 on error */ l_int32 boxaWrite(const char *filename, BOXA *boxa) { FILE *fp; PROCNAME("boxaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (boxaWriteStream(fp, boxa)) return ERROR_INT("boxa not written to stream", procName, 1); fclose(fp); return 0; } /*! * boxaWriteStream() * * Input: stream * boxa * Return: 0 if OK, 1 on error */ l_int32 boxaWriteStream(FILE *fp, BOXA *boxa) { l_int32 n, i; BOX *box; PROCNAME("boxaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); fprintf(fp, "\nBoxa Version %d\n", BOXA_VERSION_NUMBER); fprintf(fp, "Number of boxes = %d\n", n); for (i = 0; i < n; i++) { if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) return ERROR_INT("box not found", procName, 1); fprintf(fp, " Box[%d]: x = %d, y = %d, w = %d, h = %d\n", i, box->x, box->y, box->w, box->h); boxDestroy(&box); } return 0; } /*! * boxaWriteMem() * * Input: &data ( data of serialized boxa; ascii) * &size ( size of returned data) * boxa * Return: 0 if OK, 1 on error */ l_int32 boxaWriteMem(l_uint8 **pdata, size_t *psize, BOXA *boxa) { l_int32 ret; FILE *fp; PROCNAME("boxaWriteMem"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); *pdata = NULL; if (!psize) return ERROR_INT("&size not defined", procName, 1 ); *psize = 0; if (!boxa) return ERROR_INT("&boxa not defined", procName, 1 ); /* Serialize: write to file and read serialized data back into memory */ fp = tmpfile(); ret = boxaWriteStream(fp, boxa); rewind(fp); *pdata = l_binaryReadStream(fp, psize); fclose(fp); return ret; } /*---------------------------------------------------------------------* * Debug printing * *---------------------------------------------------------------------*/ /*! * boxPrintStreamInfo() * * Input: stream * box * Return: 0 if OK, 1 on error * * Notes: * (1) This outputs debug info. Use serialization functions to * write to file if you want to read the data back. */ l_int32 boxPrintStreamInfo(FILE *fp, BOX *box) { PROCNAME("boxPrintStreamInfo"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); fprintf(fp, " Box: x = %d, y = %d, w = %d, h = %d\n", box->x, box->y, box->w, box->h); return 0; } leptonica-1.70/src/shear.c0000644000175000017500000007142112244231320013540 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * shear.c * * About arbitrary lines * PIX *pixHShear() * PIX *pixVShear() * * About special 'points': UL corner and center * PIX *pixHShearCorner() * PIX *pixVShearCorner() * PIX *pixHShearCenter() * PIX *pixVShearCenter() * * In place about arbitrary lines * l_int32 pixHShearIP() * l_int32 pixVShearIP() * * Linear interpolated shear about arbitrary lines * PIX *pixHShearLI() * PIX *pixVShearLI() * * Static helper * static l_float32 normalizeAngleForShear() */ #include #include #include "allheaders.h" /* Shear angle must not get too close to -pi/2 or pi/2 */ static const l_float32 MIN_DIFF_FROM_HALF_PI = 0.04; static l_float32 normalizeAngleForShear(l_float32 radang, l_float32 mindif); #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * About arbitrary lines * *-------------------------------------------------------------*/ /*! * pixHShear() * * Input: pixd (, this can be null, equal to pixs, * or different from pixs) * pixs (no restrictions on depth) * yloc (location of horizontal line, measured from origin) * angle (in radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, always * * Notes: * (1) There are 3 cases: * (a) pixd == null (make a new pixd) * (b) pixd == pixs (in-place) * (c) pixd != pixs * (2) For these three cases, use these patterns, respectively: * pixd = pixHShear(NULL, pixs, ...); * pixHShear(pixs, pixs, ...); * pixHShear(pixd, pixs, ...); * (3) This shear leaves the horizontal line of pixels at y = yloc * invariant. For a positive shear angle, pixels above this * line are shoved to the right, and pixels below this line * move to the left. * (4) With positive shear angle, this can be used, along with * pixVShear(), to perform a cw rotation, either with 2 shears * (for small angles) or in the general case with 3 shears. * (5) Changing the value of yloc is equivalent to translating * the result horizontally. * (6) This brings in 'incolor' pixels from outside the image. * (7) For in-place operation, pixs cannot be colormapped, * because the in-place operation only blits in 0 or 1 bits, * not an arbitrary colormap index. * (8) The angle is brought into the range [-pi, -pi]. It is * not permitted to be within MIN_DIFF_FROM_HALF_PI radians * from either -pi/2 or pi/2. */ PIX * pixHShear(PIX *pixd, PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 y, yincr, inityincr, hshift; l_float32 tanangle, invangle; PROCNAME("pixHShear"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", procName, pixd); if (pixd == pixs) { /* in place */ if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, pixd); pixHShearIP(pixd, yloc, radang, incolor); return pixd; } /* Make sure pixd exists and is same size as pixs */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else { /* pixd != pixs */ pixResizeImageData(pixd, pixs); } /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MIN_DIFF_FROM_HALF_PI); if (radang == 0.0 || tan(radang) == 0.0) return pixCopy(pixd, pixs); /* Initialize to value of incoming pixels */ pixSetBlackOrWhite(pixd, incolor); pixGetDimensions(pixs, &w, &h, NULL); sign = L_SIGN(radang); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); inityincr = (l_int32)(invangle / 2.); yincr = (l_int32)invangle; pixRasterop(pixd, 0, yloc - inityincr, w, 2 * inityincr, PIX_SRC, pixs, 0, yloc - inityincr); for (hshift = 1, y = yloc + inityincr; y < h; hshift++) { yincr = (l_int32)(invangle * (hshift + 0.5) + 0.5) - (y - yloc); if (h - y < yincr) /* reduce for last one if req'd */ yincr = h - y; pixRasterop(pixd, -sign*hshift, y, w, yincr, PIX_SRC, pixs, 0, y); #if DEBUG fprintf(stderr, "y = %d, hshift = %d, yincr = %d\n", y, hshift, yincr); #endif /* DEBUG */ y += yincr; } for (hshift = -1, y = yloc - inityincr; y > 0; hshift--) { yincr = (y - yloc) - (l_int32)(invangle * (hshift - 0.5) + 0.5); if (y < yincr) /* reduce for last one if req'd */ yincr = y; pixRasterop(pixd, -sign*hshift, y - yincr, w, yincr, PIX_SRC, pixs, 0, y - yincr); #if DEBUG fprintf(stderr, "y = %d, hshift = %d, yincr = %d\n", y - yincr, hshift, yincr); #endif /* DEBUG */ y -= yincr; } return pixd; } /*! * pixVShear() * * Input: pixd (, this can be null, equal to pixs, * or different from pixs) * pixs (no restrictions on depth) * xloc (location of vertical line, measured from origin) * angle (in radians; not too close to +-(pi / 2)) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error * * Notes: * (1) There are 3 cases: * (a) pixd == null (make a new pixd) * (b) pixd == pixs (in-place) * (c) pixd != pixs * (2) For these three cases, use these patterns, respectively: * pixd = pixVShear(NULL, pixs, ...); * pixVShear(pixs, pixs, ...); * pixVShear(pixd, pixs, ...); * (3) This shear leaves the vertical line of pixels at x = xloc * invariant. For a positive shear angle, pixels to the right * of this line are shoved downward, and pixels to the left * of the line move upward. * (4) With positive shear angle, this can be used, along with * pixHShear(), to perform a cw rotation, either with 2 shears * (for small angles) or in the general case with 3 shears. * (5) Changing the value of xloc is equivalent to translating * the result vertically. * (6) This brings in 'incolor' pixels from outside the image. * (7) For in-place operation, pixs cannot be colormapped, * because the in-place operation only blits in 0 or 1 bits, * not an arbitrary colormap index. * (8) The angle is brought into the range [-pi, -pi]. It is * not permitted to be within MIN_DIFF_FROM_HALF_PI radians * from either -pi/2 or pi/2. */ PIX * pixVShear(PIX *pixd, PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 x, xincr, initxincr, vshift; l_float32 tanangle, invangle; PROCNAME("pixVShear"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", procName, NULL); if (pixd == pixs) { /* in place */ if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, pixd); pixVShearIP(pixd, xloc, radang, incolor); return pixd; } /* Make sure pixd exists and is same size as pixs */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else { /* pixd != pixs */ pixResizeImageData(pixd, pixs); } /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MIN_DIFF_FROM_HALF_PI); if (radang == 0.0 || tan(radang) == 0.0) return pixCopy(pixd, pixs); /* Initialize to value of incoming pixels */ pixSetBlackOrWhite(pixd, incolor); pixGetDimensions(pixs, &w, &h, NULL); sign = L_SIGN(radang); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); initxincr = (l_int32)(invangle / 2.); xincr = (l_int32)invangle; pixRasterop(pixd, xloc - initxincr, 0, 2 * initxincr, h, PIX_SRC, pixs, xloc - initxincr, 0); for (vshift = 1, x = xloc + initxincr; x < w; vshift++) { xincr = (l_int32)(invangle * (vshift + 0.5) + 0.5) - (x - xloc); if (w - x < xincr) /* reduce for last one if req'd */ xincr = w - x; pixRasterop(pixd, x, sign*vshift, xincr, h, PIX_SRC, pixs, x, 0); #if DEBUG fprintf(stderr, "x = %d, vshift = %d, xincr = %d\n", x, vshift, xincr); #endif /* DEBUG */ x += xincr; } for (vshift = -1, x = xloc - initxincr; x > 0; vshift--) { xincr = (x - xloc) - (l_int32)(invangle * (vshift - 0.5) + 0.5); if (x < xincr) /* reduce for last one if req'd */ xincr = x; pixRasterop(pixd, x - xincr, sign*vshift, xincr, h, PIX_SRC, pixs, x - xincr, 0); #if DEBUG fprintf(stderr, "x = %d, vshift = %d, xincr = %d\n", x - xincr, vshift, xincr); #endif /* DEBUG */ x -= xincr; } return pixd; } /*-------------------------------------------------------------* * Shears about UL corner and center * *-------------------------------------------------------------*/ /*! * pixHShearCorner() * * Input: pixd (, if not null, must be equal to pixs) * pixs * angle (in radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error. * * Notes: * (1) See pixHShear() for usage. * (2) This does a horizontal shear about the UL corner, with (+) shear * pushing increasingly leftward (-x) with increasing y. */ PIX * pixHShearCorner(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { PROCNAME("pixHShearCorner"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); return pixHShear(pixd, pixs, 0, radang, incolor); } /*! * pixVShearCorner() * * Input: pixd (, if not null, must be equal to pixs) * pixs * angle (in radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error. * * Notes: * (1) See pixVShear() for usage. * (2) This does a vertical shear about the UL corner, with (+) shear * pushing increasingly downward (+y) with increasing x. */ PIX * pixVShearCorner(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { PROCNAME("pixVShearCorner"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); return pixVShear(pixd, pixs, 0, radang, incolor); } /*! * pixHShearCenter() * * Input: pixd (, if not null, must be equal to pixs) * pixs * angle (in radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error. * * Notes: * (1) See pixHShear() for usage. * (2) This does a horizontal shear about the center, with (+) shear * pushing increasingly leftward (-x) with increasing y. */ PIX * pixHShearCenter(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { PROCNAME("pixHShearCenter"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); return pixHShear(pixd, pixs, pixGetHeight(pixs) / 2, radang, incolor); } /*! * pixVShearCenter() * * Input: pixd (, if not null, must be equal to pixs) * pixs * angle (in radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error. * * Notes: * (1) See pixVShear() for usage. * (2) This does a vertical shear about the center, with (+) shear * pushing increasingly downward (+y) with increasing x. */ PIX * pixVShearCenter(PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor) { PROCNAME("pixVShearCenter"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); return pixVShear(pixd, pixs, pixGetWidth(pixs) / 2, radang, incolor); } /*--------------------------------------------------------------------------* * In place about arbitrary lines * *--------------------------------------------------------------------------*/ /*! * pixHShearIP() * * Input: pixs * yloc (location of horizontal line, measured from origin) * angle (in radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place version of pixHShear(); see comments there. * (2) This brings in 'incolor' pixels from outside the image. * (3) pixs cannot be colormapped, because the in-place operation * only blits in 0 or 1 bits, not an arbitrary colormap index. * (4) Does a horizontal full-band shear about the line with (+) shear * pushing increasingly leftward (-x) with increasing y. */ l_int32 pixHShearIP(PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 y, yincr, inityincr, hshift; l_float32 tanangle, invangle; PROCNAME("pixHShearIP"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid incolor value", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); /* Normalize angle */ radang = normalizeAngleForShear(radang, MIN_DIFF_FROM_HALF_PI); if (radang == 0.0 || tan(radang) == 0.0) return 0; sign = L_SIGN(radang); pixGetDimensions(pixs, &w, &h, NULL); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); inityincr = (l_int32)(invangle / 2.); yincr = (l_int32)invangle; if (inityincr > 0) pixRasteropHip(pixs, yloc - inityincr, 2 * inityincr, 0, incolor); for (hshift = 1, y = yloc + inityincr; y < h; hshift++) { yincr = (l_int32)(invangle * (hshift + 0.5) + 0.5) - (y - yloc); if (yincr == 0) continue; if (h - y < yincr) /* reduce for last one if req'd */ yincr = h - y; pixRasteropHip(pixs, y, yincr, -sign*hshift, incolor); y += yincr; } for (hshift = -1, y = yloc - inityincr; y > 0; hshift--) { yincr = (y - yloc) - (l_int32)(invangle * (hshift - 0.5) + 0.5); if (yincr == 0) continue; if (y < yincr) /* reduce for last one if req'd */ yincr = y; pixRasteropHip(pixs, y - yincr, yincr, -sign*hshift, incolor); y -= yincr; } return 0; } /*! * pixVShearIP() * * Input: pixs (all depths; not colormapped) * xloc (location of vertical line, measured from origin) * angle (in radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place version of pixVShear(); see comments there. * (2) This brings in 'incolor' pixels from outside the image. * (3) pixs cannot be colormapped, because the in-place operation * only blits in 0 or 1 bits, not an arbitrary colormap index. * (4) Does a vertical full-band shear about the line with (+) shear * pushing increasingly downward (+y) with increasing x. */ l_int32 pixVShearIP(PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor) { l_int32 sign, w, h; l_int32 x, xincr, initxincr, vshift; l_float32 tanangle, invangle; PROCNAME("pixVShearIP"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid incolor value", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); /* Normalize angle */ radang = normalizeAngleForShear(radang, MIN_DIFF_FROM_HALF_PI); if (radang == 0.0 || tan(radang) == 0.0) return 0; sign = L_SIGN(radang); pixGetDimensions(pixs, &w, &h, NULL); tanangle = tan(radang); invangle = L_ABS(1. / tanangle); initxincr = (l_int32)(invangle / 2.); xincr = (l_int32)invangle; if (initxincr > 0) pixRasteropVip(pixs, xloc - initxincr, 2 * initxincr, 0, incolor); for (vshift = 1, x = xloc + initxincr; x < w; vshift++) { xincr = (l_int32)(invangle * (vshift + 0.5) + 0.5) - (x - xloc); if (xincr == 0) continue; if (w - x < xincr) /* reduce for last one if req'd */ xincr = w - x; pixRasteropVip(pixs, x, xincr, sign*vshift, incolor); x += xincr; } for (vshift = -1, x = xloc - initxincr; x > 0; vshift--) { xincr = (x - xloc) - (l_int32)(invangle * (vshift - 0.5) + 0.5); if (xincr == 0) continue; if (x < xincr) /* reduce for last one if req'd */ xincr = x; pixRasteropVip(pixs, x - xincr, xincr, sign*vshift, incolor); x -= xincr; } return 0; } /*-------------------------------------------------------------------------* * Linear interpolated shear about arbitrary lines * *-------------------------------------------------------------------------*/ /*! * pixHShearLI() * * Input: pixs (8 bpp or 32 bpp, or colormapped) * yloc (location of horizontal line, measured from origin) * angle (in radians, in range (-pi/2 ... pi/2)) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd (sheared), or null on error * * Notes: * (1) This does horizontal shear with linear interpolation for * accurate results on 8 bpp gray, 32 bpp rgb, or cmapped images. * It is relatively slow compared to the sampled version * implemented by rasterop, but the result is much smoother. * (2) This shear leaves the horizontal line of pixels at y = yloc * invariant. For a positive shear angle, pixels above this * line are shoved to the right, and pixels below this line * move to the left. * (3) Any colormap is removed. * (4) The angle is brought into the range [-pi/2 + del, pi/2 - del], * where del == MIN_DIFF_FROM_HALF_PI. */ PIX * pixHShearLI(PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor) { l_int32 i, jd, x, xp, xf, w, h, d, wm, wpls, wpld, val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; l_float32 tanangle, xshift; PIX *pix, *pixd; PROCNAME("pixHShearLI"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", procName, NULL); if (yloc < 0 || yloc >= h) return (PIX *)ERROR_PTR("yloc not in [0 ... h-1]", procName, NULL); if (pixGetColormap(pixs)) pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix = pixClone(pixs); /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MIN_DIFF_FROM_HALF_PI); if (radang == 0.0 || tan(radang) == 0.0) { pixDestroy(&pix); return pixCopy(NULL, pixs); } /* Initialize to value of incoming pixels */ pixd = pixCreateTemplate(pix); pixSetBlackOrWhite(pixd, incolor); /* Standard linear interp: subdivide each pixel into 64 parts */ d = pixGetDepth(pixd); /* 8 or 32 */ datas = pixGetData(pix); datad = pixGetData(pixd); wpls = pixGetWpl(pix); wpld = pixGetWpl(pixd); tanangle = tan(radang); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; xshift = (yloc - i) * tanangle; for (jd = 0; jd < w; jd++) { x = (l_int32)(64.0 * (-xshift + jd) + 0.5); xp = x / 64; xf = x & 63; wm = w - 1; if (xp < 0 || xp > wm) continue; if (d == 8) { if (xp < wm) { val = ((63 - xf) * GET_DATA_BYTE(lines, xp) + xf * GET_DATA_BYTE(lines, xp + 1) + 31) / 63; } else { /* xp == wm */ val = GET_DATA_BYTE(lines, xp); } SET_DATA_BYTE(lined, jd, val); } else { /* d == 32 */ if (xp < wm) { word0 = *(lines + xp); word1 = *(lines + xp + 1); rval = ((63 - xf) * ((word0 >> L_RED_SHIFT) & 0xff) + xf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - xf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + xf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - xf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + xf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + jd); } else { /* xp == wm */ lined[jd] = lines[xp]; } } } } pixDestroy(&pix); return pixd; } /*! * pixVShearLI() * * Input: pixs (8 bpp or 32 bpp, or colormapped) * xloc (location of vertical line, measured from origin) * angle (in radians, in range (-pi/2 ... pi/2)) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd (sheared), or null on error * * Notes: * (1) This does vertical shear with linear interpolation for * accurate results on 8 bpp gray, 32 bpp rgb, or cmapped images. * It is relatively slow compared to the sampled version * implemented by rasterop, but the result is much smoother. * (2) This shear leaves the vertical line of pixels at x = xloc * invariant. For a positive shear angle, pixels to the right * of this line are shoved downward, and pixels to the left * of the line move upward. * (3) Any colormap is removed. * (4) The angle is brought into the range [-pi/2 + del, pi/2 - del], * where del == MIN_DIFF_FROM_HALF_PI. */ PIX * pixVShearLI(PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor) { l_int32 id, y, yp, yf, j, w, h, d, hm, wpls, wpld, val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; l_float32 tanangle, yshift; PIX *pix, *pixd; PROCNAME("pixVShearLI"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor value", procName, NULL); if (xloc < 0 || xloc >= w) return (PIX *)ERROR_PTR("xloc not in [0 ... w-1]", procName, NULL); if (pixGetColormap(pixs)) pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix = pixClone(pixs); /* Normalize angle. If no rotation, return a copy */ radang = normalizeAngleForShear(radang, MIN_DIFF_FROM_HALF_PI); if (radang == 0.0 || tan(radang) == 0.0) { pixDestroy(&pix); return pixCopy(NULL, pixs); } /* Initialize to value of incoming pixels */ pixd = pixCreateTemplate(pix); pixSetBlackOrWhite(pixd, incolor); /* Standard linear interp: subdivide each pixel into 64 parts */ d = pixGetDepth(pixd); /* 8 or 32 */ datas = pixGetData(pix); datad = pixGetData(pixd); wpls = pixGetWpl(pix); wpld = pixGetWpl(pixd); tanangle = tan(radang); for (j = 0; j < w; j++) { yshift = (j - xloc) * tanangle; for (id = 0; id < h; id++) { y = (l_int32)(64.0 * (-yshift + id) + 0.5); yp = y / 64; yf = y & 63; hm = h - 1; if (yp < 0 || yp > hm) continue; lines = datas + yp * wpls; lined = datad + id * wpld; if (d == 8) { if (yp < hm) { val = ((63 - yf) * GET_DATA_BYTE(lines, j) + yf * GET_DATA_BYTE(lines + wpls, j) + 31) / 63; } else { /* yp == hm */ val = GET_DATA_BYTE(lines, j); } SET_DATA_BYTE(lined, j, val); } else { /* d == 32 */ if (yp < hm) { word0 = *(lines + j); word1 = *(lines + wpls + j); rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) + yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + j); } else { /* yp == hm */ lined[j] = lines[j]; } } } } pixDestroy(&pix); return pixd; } /*-------------------------------------------------------------------------* * Angle normalization * *-------------------------------------------------------------------------*/ static l_float32 normalizeAngleForShear(l_float32 radang, l_float32 mindif) { l_float32 pi2; PROCNAME("normalizeAngleForShear"); /* Bring angle into range [-pi/2, pi/2] */ pi2 = 3.14159265 / 2.0; if (radang < -pi2 || radang > pi2) radang = radang - (l_int32)(radang / pi2) * pi2; /* If angle is too close to pi/2 or -pi/2, move it */ if (radang > pi2 - mindif) { L_WARNING("angle close to pi/2; shifting away\n", procName); radang = pi2 - mindif; } else if (radang < -pi2 + mindif) { L_WARNING("angle close to -pi/2; shifting away\n", procName); radang = -pi2 + mindif; } return radang; } leptonica-1.70/src/convertfiles.c0000640000175000017500000001242212244221163015135 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convertfiles.c * * Conversion to 1 bpp * l_int32 convertFilesTo1bpp() * * These are utility functions that will perform depth conversion * on selected files, writing the results to a specified directory. * We start with conversion to 1 bpp. */ #include #include "allheaders.h" /*------------------------------------------------------------------* * Conversion to 1 bpp * *------------------------------------------------------------------*/ /*! * convertFilesTo1bpp() * * Input: dirin * substr ( substring filter on filenames; can be NULL) * upscaling (1, 2 or 4; only for input color or grayscale) * thresh (global threshold for binarization; use 0 for default) * firstpage * npages (use 0 to do all from @firstpage to the end) * dirout * outformat (IFF_PNG, IFF_TIFF_G4) * Return: 0 if OK, 1 on error * * Notes: * (1) Images are sorted lexicographically, and the names in the * output directory are retained except for the extension. */ l_int32 convertFilesTo1bpp(const char *dirin, const char *substr, l_int32 upscaling, l_int32 thresh, l_int32 firstpage, l_int32 npages, const char *dirout, l_int32 outformat) { l_int32 i, nfiles; char buf[512]; char *fname, *tail, *basename; PIX *pixs, *pixg1, *pixg2, *pixb; SARRAY *safiles; PROCNAME("convertFilesTo1bpp"); if (!dirin) return ERROR_INT("dirin", procName, 1); if (!dirout) return ERROR_INT("dirout", procName, 1); if (upscaling != 1 && upscaling != 2 && upscaling != 4) return ERROR_INT("invalid upscaling factor", procName, 1); if (thresh <= 0) thresh = 180; if (firstpage < 0) firstpage = 0; if (npages < 0) npages = 0; if (outformat != IFF_TIFF_G4) outformat = IFF_PNG; safiles = getSortedPathnamesInDirectory(dirin, substr, firstpage, npages); if (!safiles) return ERROR_INT("safiles not made", procName, 1); if ((nfiles = sarrayGetCount(safiles)) == 0) { sarrayDestroy(&safiles); return ERROR_INT("no matching files in the directory", procName, 1); } for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { L_WARNING("Couldn't read file %s\n", procName, fname); continue; } if (pixGetDepth(pixs) == 32) pixg1 = pixConvertRGBToLuminance(pixs); else pixg1 = pixClone(pixs); pixg2 = pixRemoveColormap(pixg1, REMOVE_CMAP_TO_GRAYSCALE); if (pixGetDepth(pixg2) == 1) { pixb = pixClone(pixg2); } else { if (upscaling == 1) pixb = pixThresholdToBinary(pixg2, thresh); else if (upscaling == 2) pixb = pixScaleGray2xLIThresh(pixg2, thresh); else /* upscaling == 4 */ pixb = pixScaleGray4xLIThresh(pixg2, thresh); } pixDestroy(&pixs); pixDestroy(&pixg1); pixDestroy(&pixg2); splitPathAtDirectory(fname, NULL, &tail); splitPathAtExtension(tail, &basename, NULL); if (outformat == IFF_TIFF_G4) { snprintf(buf, sizeof(buf), "%s/%s.tif", dirout, basename); pixWrite(buf, pixb, IFF_TIFF_G4); } else { snprintf(buf, sizeof(buf), "%s/%s.png", dirout, basename); pixWrite(buf, pixb, IFF_PNG); } pixDestroy(&pixb); FREE(tail); FREE(basename); } sarrayDestroy(&safiles); return 0; } leptonica-1.70/src/jpegio.c0000644000175000017500000015503012244223624013722 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jpegio.c * * Read jpeg from file * PIX *pixReadJpeg() [special top level] * PIX *pixReadStreamJpeg() * * Read jpeg metadata from file * l_int32 readHeaderJpeg() * l_int32 freadHeaderJpeg() * l_int32 fgetJpegResolution() * l_int32 fgetJpegComment() * * Write jpeg to file * l_int32 pixWriteJpeg() [special top level] * l_int32 pixWriteStreamJpeg() * * Read/write to memory * PIX *pixReadMemJpeg() * l_int32 readHeaderMemJpeg() * l_int32 pixWriteMemJpeg() * * Setting special flag * l_int32 pixSetChromaSampling() * * Static system helpers * static void jpeg_error_catch_all_1() * static void jpeg_error_catch_all_2() * static l_uint8 jpeg_getc() * static l_int32 jpeg_comment_callback() * * Extraction of jpeg header info by parsing [deprecated] * l_int32 extractJpegDataFromFile() * l_int32 extractJpegDataFromArray() * static l_int32 extractJpegHeaderDataFallback() * static l_int32 locateJpegImageParameters() * static l_int32 getNextJpegMarker() * static l_int32 getTwoByteParameter() * * Documentation: libjpeg.doc can be found, along with all * source code, at ftp://ftp.uu.net/graphics/jpeg * Download and untar the file: jpegsrc.v6b.tar.gz * A good paper on jpeg can also be found there: wallace.ps.gz * * The functions in libjpeg make it very simple to compress * and decompress images. On input (decompression from file), * 3 component color images can be read into either an 8 bpp Pix * with a colormap or a 32 bpp Pix with RGB components. For output * (compression to file), all color Pix, whether 8 bpp with a * colormap or 32 bpp, are written compressed as a set of three * 8 bpp (rgb) images. * * Low-level error handling * ------------------------ * The default behavior of the jpeg library is to call exit. * This is often undesirable, and the caller should make the * decision when to abort a process. To prevent the jpeg library * from calling exit(), setjmp() has been inserted into all * readers and writers, and the cinfo struct has been set up so that * the low-level jpeg library will call a special error handler * that doesn't exit, instead of the default function error_exit(). * * To avoid race conditions and make these functions thread-safe in * the rare situation where calls to two threads are simultaneously * failing on bad jpegs, we insert a local copy of the jmp_buf struct * into the cinfo.client_data field, and use this on longjmp. * For extracting the jpeg comment, we have the added complication * that the client_data field must also return the jpeg comment, * and we use a different error handler. * * How to avoid subsampling the chroma channels * -------------------------------------------- * When writing, you can avoid subsampling the U,V (chroma) * channels. This gives higher quality for the color, which is * important for some situations. The default subsampling is 2x2 on * both channels. Before writing, call pixSetChromaSampling(pix, 0) * to prevent chroma subsampling. * * Compressing to memory and decompressing from memory * --------------------------------------------------- * On systems like windows without fmemopen() and open_memstream(), * we write data to a temp file and read it back for operations * between pix and compressed-data, such as pixReadMemJpeg() and * pixWriteMemJpeg(). * * Vestigial code: parsing the jpeg file for header metadata * --------------------------------------------------------- * For extracting header metadata, we used to parse the file, looking * for specific markers. This is error-prone because of non-standard * jpeg files and you should use readHeaderJpeg() and readHeaderMemJpeg() * instead. Nevertheless, it is retained here in case you want to * understand a bit about how to parse jpeg markers. */ #include #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if HAVE_LIBJPEG /* defined in environ.h */ /* --------------------------------------------*/ #include /* jconfig.h makes the error of setting * #define HAVE_STDLIB_H * which conflicts with config_auto.h (where it is set to 1) and results * for some gcc compiler versions in a warning. The conflict is harmless * but we suppress it by undefining the variable. */ #undef HAVE_STDLIB_H #include "jpeglib.h" static void jpeg_error_catch_all_1(j_common_ptr cinfo); static void jpeg_error_catch_all_2(j_common_ptr cinfo); static l_uint8 jpeg_getc(j_decompress_ptr cinfo); /* Note: 'boolean' is defined in jmorecfg.h. We use it explicitly * here because for windows where __MINGW32__ is defined, * the prototype for jpeg_comment_callback() is given as * returning a boolean. */ static boolean jpeg_comment_callback(j_decompress_ptr cinfo); /* This is saved in the client_data field of cinfo, and used both * to retrieve the comment from its callback and to handle * exceptions with a longjmp. */ struct callback_data { jmp_buf jmpbuf; l_uint8 *comment; }; /* Static helpers for extraction of jpeg data (not used) */ static l_int32 extractJpegHeaderDataFallback(const void *data, size_t nbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp); static l_int32 locateJpegImageParameters(l_uint8 *, size_t, l_int32 *); static l_int32 getNextJpegMarker(l_uint8 *, size_t, l_int32 *); static l_int32 getTwoByteParameter(l_uint8 *, l_int32); #ifndef NO_CONSOLE_IO #define DEBUG_INFO 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Read jpeg from file * *---------------------------------------------------------------------*/ /*! * pixReadJpeg() * * Input: filename * colormap flag (0 means return RGB image if color; * 1 means create colormap and return 8 bpp * palette image if color) * reduction (scaling factor: 1, 2, 4 or 8) * &nwarn ( number of warnings about * corrupted data) * Return: pix, or null on error * * Images reduced by factors of 2, 4 or 8 can be returned * significantly faster than full resolution images. * * The jpeg library will return warnings (or exit) if * the jpeg data is bad. Use this function if you want the * jpeg library to create an 8 bpp palette image, or to * tell if the jpeg data has been corrupted. For corrupt jpeg * data, there are two possible outcomes: * (1) a damaged pix will be returned, along with a nonzero * number of warnings, or * (2) for sufficiently serious problems, the library will attempt * to exit (caught by our error handler) and no pix will be returned. */ PIX * pixReadJpeg(const char *filename, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn) { l_int32 ret; l_uint8 *comment; FILE *fp; PIX *pix; PROCNAME("pixReadJpeg"); if (pnwarn) *pnwarn = 0; if (!filename) return (PIX *)ERROR_PTR("filename not defined", procName, NULL); if (cmflag != 0 && cmflag != 1) cmflag = 0; /* default */ if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) return (PIX *)ERROR_PTR("reduction not in {1,2,4,8}", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR("image file not found", procName, NULL); pix = pixReadStreamJpeg(fp, cmflag, reduction, pnwarn, 0); if (pix) { ret = fgetJpegComment(fp, &comment); if (!ret && comment) pixSetText(pix, (char *)comment); FREE(comment); } fclose(fp); if (!pix) return (PIX *)ERROR_PTR("image not returned", procName, NULL); return pix; } /*! * pixReadStreamJpeg() * * Input: stream * colormap flag (0 means return RGB image if color; * 1 means create colormap and return 8 bpp * palette image if color) * reduction (scaling factor: 1, 2, 4 or 8) * &nwarn ( number of warnings) * hint: (a bitwise OR of L_HINT_* values); use 0 for no hints * Return: pix, or null on error * * Usage: see pixReadJpeg() * Notes: * (1) This does not get the jpeg comment. */ PIX * pixReadStreamJpeg(FILE *fp, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { l_int32 cyan, yellow, magenta, black; l_int32 i, j, k, rval, gval, bval; l_int32 w, h, wpl, spp, ncolors, cindex, ycck, cmyk; l_uint32 *data; l_uint32 *line, *ppixel; JSAMPROW rowbuffer; PIX *pix; PIXCMAP *cmap; struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; jmp_buf jmpbuf; /* must be local to the function */ PROCNAME("pixReadStreamJpeg"); if (!fp) return (PIX *)ERROR_PTR("fp not defined", procName, NULL); if (pnwarn) *pnwarn = 0; /* init */ if (cmflag != 0 && cmflag != 1) cmflag = 0; /* default */ if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) return (PIX *)ERROR_PTR("reduction not in {1,2,4,8}", procName, NULL); if (BITS_IN_JSAMPLE != 8) /* set in jmorecfg.h */ return (PIX *)ERROR_PTR("BITS_IN_JSAMPLE != 8", procName, NULL); rewind(fp); pix = NULL; rowbuffer = NULL; /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); jerr.error_exit = jpeg_error_catch_all_1; cinfo.client_data = (void *)&jmpbuf; if (setjmp(jmpbuf)) { pixDestroy(&pix); FREE(rowbuffer); return (PIX *)ERROR_PTR("internal jpeg error", procName, NULL); } /* Initialize jpeg structs for decompression */ jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); cinfo.scale_denom = reduction; cinfo.scale_num = 1; if (hint & L_HINT_GRAY) cinfo.out_color_space = JCS_GRAYSCALE; jpeg_calc_output_dimensions(&cinfo); /* Allocate the image and a row buffer */ spp = cinfo.out_color_components; w = cinfo.output_width; h = cinfo.output_height; ycck = (cinfo.jpeg_color_space == JCS_YCCK && spp == 4 && cmflag == 0); cmyk = (cinfo.jpeg_color_space == JCS_CMYK && spp == 4 && cmflag == 0); if (spp != 1 && spp != 3 && !ycck && !cmyk) { return (PIX *)ERROR_PTR("spp must be 1 or 3, or YCCK or CMYK", procName, NULL); } if ((spp == 3 && cmflag == 0) || ycck || cmyk) { /* rgb or 4 bpp color */ rowbuffer = (JSAMPROW)CALLOC(sizeof(JSAMPLE), spp * w); pix = pixCreate(w, h, 32); } else { /* 8 bpp gray or colormapped */ rowbuffer = (JSAMPROW)CALLOC(sizeof(JSAMPLE), w); pix = pixCreate(w, h, 8); } if (!rowbuffer || !pix) { if (rowbuffer) FREE(rowbuffer); pixDestroy(&pix); return (PIX *)ERROR_PTR("rowbuffer or pix not made", procName, NULL); } if (spp == 1) { /* Grayscale or colormapped */ jpeg_start_decompress(&cinfo); } else { /* Color; spp == 3 or YCCK or CMYK */ if (cmflag == 0) { /* -- 24 bit color in 32 bit pix or YCCK/CMYK -- */ cinfo.quantize_colors = FALSE; jpeg_start_decompress(&cinfo); } else { /* Color quantize to 8 bits */ cinfo.quantize_colors = TRUE; cinfo.desired_number_of_colors = 256; jpeg_start_decompress(&cinfo); /* Construct a pix cmap */ cmap = pixcmapCreate(8); ncolors = cinfo.actual_number_of_colors; for (cindex = 0; cindex < ncolors; cindex++) { rval = cinfo.colormap[0][cindex]; gval = cinfo.colormap[1][cindex]; bval = cinfo.colormap[2][cindex]; pixcmapAddColor(cmap, rval, gval, bval); } pixSetColormap(pix, cmap); } } wpl = pixGetWpl(pix); data = pixGetData(pix); /* Decompress */ if ((spp == 3 && cmflag == 0) || ycck || cmyk) { /* -- 24 bit color -- */ for (i = 0; i < h; i++) { if (jpeg_read_scanlines(&cinfo, &rowbuffer, (JDIMENSION)1) != 1) return (PIX *)ERROR_PTR("bad read scanline", procName, NULL); ppixel = data + i * wpl; if (spp == 3) { for (j = k = 0; j < w; j++) { SET_DATA_BYTE(ppixel, COLOR_RED, rowbuffer[k++]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowbuffer[k++]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowbuffer[k++]); ppixel++; } } else { /* This is a conversion from CMYK -> RGB that ignores color profiles, and is invoked when the image header claims to be in CMYK or YCCK colorspace. If in YCCK, libjpeg may be doing YCCK -> CMYK under the hood. To understand why the colors need to be inverted on read-in for the Adobe marker, see the "Special color spaces" section of "Using the IJG JPEG Library" by Thomas G. Lane: http://www.jpegcameras.com/libjpeg/libjpeg-3.html#ss3.1 The non-Adobe conversion is equivalent to: rval = black - black * cyan / 255 ... The Adobe conversion is equivalent to: rval = black - black * (255 - cyan) / 255 ... Note that cyan is the complement to red, and we are subtracting the complement color (weighted by black) from black. For Adobe conversions, where they've already inverted the CMY but not the K, we have to invert again. The results must be clipped to [0 ... 255]. */ for (j = k = 0; j < w; j++) { cyan = rowbuffer[k++]; magenta = rowbuffer[k++]; yellow = rowbuffer[k++]; black = rowbuffer[k++]; if (cinfo.saw_Adobe_marker) { rval = (black * cyan) / 255; gval = (black * magenta) / 255; bval = (black * yellow) / 255; } else { rval = black * (255 - cyan) / 255; gval = black * (255 - magenta) / 255; bval = black * (255 - yellow) / 255; } rval = L_MIN(L_MAX(rval, 0), 255); gval = L_MIN(L_MAX(gval, 0), 255); bval = L_MIN(L_MAX(bval, 0), 255); composeRGBPixel(rval, gval, bval, ppixel); ppixel++; } } } } else { /* 8 bpp grayscale or colormapped pix */ for (i = 0; i < h; i++) { if (jpeg_read_scanlines(&cinfo, &rowbuffer, (JDIMENSION)1) != 1) return (PIX *)ERROR_PTR("bad read scanline", procName, NULL); line = data + i * wpl; for (j = 0; j < w; j++) SET_DATA_BYTE(line, j, rowbuffer[j]); } } if (pnwarn) *pnwarn = cinfo.err->num_warnings; /* If the pixel density is neither 1 nor 2, it may not be defined. * In that case, don't set the resolution. */ if (cinfo.density_unit == 1) { /* pixels per inch */ pixSetXRes(pix, cinfo.X_density); pixSetYRes(pix, cinfo.Y_density); } else if (cinfo.density_unit == 2) { /* pixels per centimeter */ pixSetXRes(pix, (l_int32)((l_float32)cinfo.X_density * 2.54 + 0.5)); pixSetYRes(pix, (l_int32)((l_float32)cinfo.Y_density * 2.54 + 0.5)); } jpeg_finish_decompress(&cinfo); jpeg_destroy_decompress(&cinfo); FREE(rowbuffer); return pix; } /*---------------------------------------------------------------------* * Read jpeg metadata from file * *---------------------------------------------------------------------*/ /*! * readHeaderJpeg() * * Input: filename * &w () * &h () * &spp (, samples/pixel) * &ycck (, 1 if ycck color space; 0 otherwise) * &cmyk (, 1 if cmyk color space; 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 readHeaderJpeg(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { l_int32 ret; FILE *fp; PROCNAME("readHeaderJpeg"); if (!pw && !ph && !pspp && !pycck && !pcmyk) return ERROR_INT("no results requested", procName, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (pycck) *pycck = 0; if (pcmyk) *pcmyk = 0; if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); ret = freadHeaderJpeg(fp, pw, ph, pspp, pycck, pcmyk); fclose(fp); return ret; } /*! * freadHeaderJpeg() * * Input: stream * &w () * &h () * &spp (, samples/pixel) * &ycck (, 1 if ycck color space; 0 otherwise) * &cmyk (, 1 if cmyk color space; 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 freadHeaderJpeg(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { l_int32 spp; struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; jmp_buf jmpbuf; /* must be local to the function */ PROCNAME("freadHeaderJpeg"); if (!pw && !ph && !pspp && !pycck && !pcmyk) return ERROR_INT("no results requested", procName, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (pycck) *pycck = 0; if (pcmyk) *pcmyk = 0; if (!fp) return ERROR_INT("stream not defined", procName, 1); rewind(fp); /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); cinfo.client_data = (void *)&jmpbuf; jerr.error_exit = jpeg_error_catch_all_1; if (setjmp(jmpbuf)) return ERROR_INT("internal jpeg error", procName, 1); /* Initialize the jpeg structs for reading the header */ jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); jpeg_calc_output_dimensions(&cinfo); spp = cinfo.out_color_components; if (pspp) *pspp = spp; if (pw) *pw = cinfo.output_width; if (ph) *ph = cinfo.output_height; if (pycck) *pycck = (cinfo.jpeg_color_space == JCS_YCCK && spp == 4); if (pcmyk) *pcmyk = (cinfo.jpeg_color_space == JCS_CMYK && spp == 4); jpeg_destroy_decompress(&cinfo); rewind(fp); return 0; } /* * fgetJpegResolution() * * Input: stream (opened for read) * &xres, &yres ( resolution in ppi) * Return: 0 if OK; 1 on error * * Notes: * (1) If neither resolution field is set, this is not an error; * the returned resolution values are 0 (designating 'unknown'). * (2) Side-effect: this rewinds the stream. */ l_int32 fgetJpegResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; jmp_buf jmpbuf; /* must be local to the function */ PROCNAME("fgetJpegResolution"); if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", procName, 1); *pxres = *pyres = 0; if (!fp) return ERROR_INT("stream not opened", procName, 1); rewind(fp); /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); cinfo.client_data = (void *)&jmpbuf; jerr.error_exit = jpeg_error_catch_all_1; if (setjmp(jmpbuf)) return ERROR_INT("internal jpeg error", procName, 1); /* Initialize the jpeg structs for reading the header */ jpeg_create_decompress(&cinfo); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); /* It is common for the input resolution to be omitted from the * jpeg file. If density_unit is not 1 or 2, simply return 0. */ if (cinfo.density_unit == 1) { /* pixels/inch */ *pxres = cinfo.X_density; *pyres = cinfo.Y_density; } else if (cinfo.density_unit == 2) { /* pixels/cm */ *pxres = (l_int32)((l_float32)cinfo.X_density * 2.54 + 0.5); *pyres = (l_int32)((l_float32)cinfo.Y_density * 2.54 + 0.5); } jpeg_destroy_decompress(&cinfo); rewind(fp); return 0; } /* * fgetJpegComment() * * Input: stream (opened for read) * &comment ( comment) * Return: 0 if OK; 1 on error * * Notes: * (1) Side-effect: this rewinds the stream. */ l_int32 fgetJpegComment(FILE *fp, l_uint8 **pcomment) { struct jpeg_decompress_struct cinfo; struct jpeg_error_mgr jerr; struct callback_data cb_data; /* contains local jmp_buf */ PROCNAME("fgetJpegComment"); if (!pcomment) return ERROR_INT("&comment not defined", procName, 1); *pcomment = NULL; if (!fp) return ERROR_INT("stream not opened", procName, 1); rewind(fp); /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); jerr.error_exit = jpeg_error_catch_all_2; cb_data.comment = NULL; cinfo.client_data = (void *)&cb_data; if (setjmp(cb_data.jmpbuf)) { FREE(cb_data.comment); return ERROR_INT("internal jpeg error", procName, 1); } /* Initialize the jpeg structs for reading the header */ jpeg_create_decompress(&cinfo); jpeg_set_marker_processor(&cinfo, JPEG_COM, jpeg_comment_callback); jpeg_stdio_src(&cinfo, fp); jpeg_read_header(&cinfo, TRUE); /* Save the result */ *pcomment = cb_data.comment; jpeg_destroy_decompress(&cinfo); rewind(fp); return 0; } /*---------------------------------------------------------------------* * Writing Jpeg * *---------------------------------------------------------------------*/ /*! * pixWriteJpeg() * * Input: filename * pix * quality (1 - 100; 75 is default) * progressive (0 for baseline sequential; 1 for progressive) * Return: 0 if OK; 1 on error */ l_int32 pixWriteJpeg(const char *filename, PIX *pix, l_int32 quality, l_int32 progressive) { FILE *fp; PROCNAME("pixWriteJpeg"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (pixWriteStreamJpeg(fp, pix, quality, progressive)) { fclose(fp); return ERROR_INT("pix not written to stream", procName, 1); } fclose(fp); return 0; } /*! * pixWriteStreamJpeg() * * Input: stream * pix (8 or 32 bpp) * quality (1 - 100; 75 is default value; 0 is also default) * progressive (0 for baseline sequential; 1 for progressive) * Return: 0 if OK, 1 on error * * Notes: * (1) Under the covers, the library transforms rgb to a * luminence-chromaticity triple, each component of which is * also 8 bits, and compresses that. It uses 2 Huffman tables, * a higher resolution one (with more quantization levels) * for luminosity and a lower resolution one for the chromas. * (2) Progressive encoding gives better compression, at the * expense of slower encoding and decoding. * (3) Standard chroma subsampling is 2x2 on both the U and V * channels. For highest quality, use no subsampling; this * option is set by pixSetChromaSampling(pix, 0). * (4) There are three possibilities: * * Grayscale image, no colormap: compress as 8 bpp image. * * rgb full color image: copy each line into the color * line buffer, and compress as three 8 bpp images. * * 8 bpp colormapped image: convert each line to three * 8 bpp line images in the color line buffer, and * compress as three 8 bpp images. * (5) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16 * and 32 bpp. However, it is possible, and in some cases desirable, * to write out a jpeg file using an rgb pix that has 24 bpp. * This can be created by appending the raster data for a 24 bpp * image (with proper scanline padding) directly to a 24 bpp * pix that was created without a data array. See note in * pixWriteStreamPng() for an example. */ l_int32 pixWriteStreamJpeg(FILE *fp, PIX *pix, l_int32 quality, l_int32 progressive) { l_uint8 byteval; l_int32 xres, yres; l_int32 i, j, k; l_int32 w, h, d, wpl, spp, colorflg, rowsamples; l_int32 *rmap, *gmap, *bmap; l_uint32 *ppixel, *line, *data; JSAMPROW rowbuffer; PIXCMAP *cmap; struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; const char *text; jmp_buf jmpbuf; /* must be local to the function */ PROCNAME("pixWriteStreamJpeg"); if (!fp) return ERROR_INT("stream not open", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 8 && d != 24 && d != 32) return ERROR_INT("bpp must be 8, 24 or 32", procName, 1); if (quality <= 0) quality = 75; /* default */ rewind(fp); rowbuffer = NULL; rmap = NULL; gmap = NULL; bmap = NULL; /* Modify the jpeg error handling to catch fatal errors */ cinfo.err = jpeg_std_error(&jerr); cinfo.client_data = (void *)&jmpbuf; jerr.error_exit = jpeg_error_catch_all_1; if (setjmp(jmpbuf)) { FREE(rowbuffer); if (colorflg == 1) { FREE(rmap); FREE(gmap); FREE(bmap); } return ERROR_INT("internal jpeg error", procName, 1); } /* Initialize the jpeg structs for compression */ jpeg_create_compress(&cinfo); jpeg_stdio_dest(&cinfo, fp); cinfo.image_width = w; cinfo.image_height = h; /* Set the color space and number of components */ if (d == 32 || d == 24) { colorflg = 2; /* rgb; no colormap */ } else if ((cmap = pixGetColormap(pix)) == NULL) { colorflg = 0; /* 8 bpp grayscale; no colormap */ } else { colorflg = 1; /* 8 bpp; colormap */ pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); } if (colorflg == 0) { cinfo.input_components = 1; cinfo.in_color_space = JCS_GRAYSCALE; } else { /* colorflg == 1 or 2 */ cinfo.input_components = 3; cinfo.in_color_space = JCS_RGB; } jpeg_set_defaults(&cinfo); /* Setting optimize_coding to TRUE seems to improve compression * by approx 2-4 percent, and increases comp time by approx 20%. */ cinfo.optimize_coding = FALSE; /* Set resolution in pixels/in (density_unit: 1 = in, 2 = cm) */ xres = pixGetXRes(pix); yres = pixGetYRes(pix); if ((xres != 0) && (yres != 0)) { cinfo.density_unit = 1; /* designates pixels per inch */ cinfo.X_density = xres; cinfo.Y_density = yres; } /* Set the quality and progressive parameters */ jpeg_set_quality(&cinfo, quality, TRUE); if (progressive) jpeg_simple_progression(&cinfo); /* Set the chroma subsampling parameters. This is done in * YUV color space. The Y (intensity) channel is never subsampled. * The standard subsampling is 2x2 on both the U and V channels. * Notation on this is confusing. For a nice illustrations, see * http://en.wikipedia.org/wiki/Chroma_subsampling * The standard subsampling is written as 4:2:0. * We allow high quality where there is no subsampling on the * chroma channels: denoted as 4:4:4. */ if (pix->special == L_NO_CHROMA_SAMPLING_JPEG) { cinfo.comp_info[0].h_samp_factor = 1; cinfo.comp_info[0].v_samp_factor = 1; cinfo.comp_info[1].h_samp_factor = 1; cinfo.comp_info[1].v_samp_factor = 1; cinfo.comp_info[2].h_samp_factor = 1; cinfo.comp_info[2].v_samp_factor = 1; pix->special = 0; } jpeg_start_compress(&cinfo, TRUE); if ((text = pixGetText(pix))) jpeg_write_marker(&cinfo, JPEG_COM, (const JOCTET *)text, strlen(text)); /* Allocate row buffer */ spp = cinfo.input_components; rowsamples = spp * w; if ((rowbuffer = (JSAMPROW)CALLOC(sizeof(JSAMPLE), rowsamples)) == NULL) return ERROR_INT("calloc fail for rowbuffer", procName, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + i * wpl; if (colorflg == 0) { /* 8 bpp gray */ for (j = 0; j < w; j++) rowbuffer[j] = GET_DATA_BYTE(line, j); } else if (colorflg == 1) { /* 8 bpp colormapped */ for (j = 0; j < w; j++) { byteval = GET_DATA_BYTE(line, j); rowbuffer[3 * j + COLOR_RED] = rmap[byteval]; rowbuffer[3 * j + COLOR_GREEN] = gmap[byteval]; rowbuffer[3 * j + COLOR_BLUE] = bmap[byteval]; } } else { /* colorflg == 2 */ if (d == 24) { /* See note 4 above; special case of 24 bpp rgb */ jpeg_write_scanlines(&cinfo, (JSAMPROW *)&line, 1); } else { /* standard 32 bpp rgb */ ppixel = line; for (j = k = 0; j < w; j++) { rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); ppixel++; } } } if (d != 24) jpeg_write_scanlines(&cinfo, &rowbuffer, 1); } jpeg_finish_compress(&cinfo); FREE(rowbuffer); if (colorflg == 1) { FREE(rmap); FREE(gmap); FREE(bmap); } jpeg_destroy_compress(&cinfo); return 0; } /*---------------------------------------------------------------------* * Read/write to memory * *---------------------------------------------------------------------*/ #if HAVE_FMEMOPEN extern FILE *open_memstream(char **data, size_t *size); extern FILE *fmemopen(void *data, size_t size, const char *mode); #endif /* HAVE_FMEMOPEN */ /*! * pixReadMemJpeg() * * Input: cdata (const; jpeg-encoded) * size (of data) * colormap flag (0 means return RGB image if color; * 1 means create colormap and return 8 bpp * palette image if color) * reduction (scaling factor: 1, 2, 4 or 8) * &nwarn ( number of warnings) * hint (bitwise OR of L_HINT_* values; use 0 for no hint) * Return: pix, or null on error * * Notes: * (1) The @size byte of @data must be a null character. * (2) See pixReadJpeg() for usage. */ PIX * pixReadMemJpeg(const l_uint8 *cdata, size_t size, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint) { l_int32 ret; l_uint8 *comment; FILE *fp; PIX *pix; PROCNAME("pixReadMemJpeg"); if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); #if HAVE_FMEMOPEN if ((fp = fmemopen((l_uint8 *)cdata, size, "r")) == NULL) return (PIX *)ERROR_PTR("stream not opened", procName, NULL); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); fwrite(cdata, 1, size, fp); rewind(fp); #endif /* HAVE_FMEMOPEN */ pix = pixReadStreamJpeg(fp, cmflag, reduction, pnwarn, hint); if (pix) { ret = fgetJpegComment(fp, &comment); if (!ret && comment) { pixSetText(pix, (char *)comment); FREE(comment); } } fclose(fp); if (!pix) L_ERROR("pix not read\n", procName); return pix; } /*! * readHeaderMemJpeg() * * Input: cdata (const; jpeg-encoded) * size (of data) * &w () * &h () * &spp (, samples/pixel) * &ycck (, 1 if ycck color space; 0 otherwise) * &cmyk (, 1 if cmyk color space; 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 readHeaderMemJpeg(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk) { l_int32 ret; FILE *fp; PROCNAME("readHeaderMemJpeg"); if (!pw && !ph && !pspp && !pycck && !pcmyk) return ERROR_INT("no results requested", procName, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (pycck) *pycck = 0; if (pcmyk) *pcmyk = 0; if (!cdata) return ERROR_INT("cdata not defined", procName, 1); #if HAVE_FMEMOPEN if ((fp = fmemopen((l_uint8 *)cdata, size, "r")) == NULL) return ERROR_INT("stream not opened", procName, 1); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); fwrite(cdata, 1, size, fp); rewind(fp); #endif /* HAVE_FMEMOPEN */ ret = freadHeaderJpeg(fp, pw, ph, pspp, pycck, pcmyk); fclose(fp); return ret; } /*! * pixWriteMemJpeg() * * Input: &data ( data of jpeg compressed image) * &size ( size of returned data) * pix * quality (1 - 100; 75 is default value; 0 is also default) * progressive (0 for baseline sequential; 1 for progressive) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixWriteStreamJpeg() for usage. This version writes to * memory instead of to a file stream. */ l_int32 pixWriteMemJpeg(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 progressive) { l_int32 ret; FILE *fp; PROCNAME("pixWriteMemJpeg"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); *pdata = NULL; if (!psize) return ERROR_INT("&size not defined", procName, 1 ); *psize = 0; if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", procName, 1); ret = pixWriteStreamJpeg(fp, pix, quality, progressive); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); ret = pixWriteStreamJpeg(fp, pix, quality, progressive); rewind(fp); *pdata = l_binaryReadStream(fp, psize); #endif /* HAVE_FMEMOPEN */ fclose(fp); return ret; } /*---------------------------------------------------------------------* * Setting for chroma sampling on write * *---------------------------------------------------------------------*/ /*! * pixSetChromaSampling() * * Input: pix * sampling (1 for subsampling; 0 for no subsampling) * Return: 0 if OK, 1 on error * * Notes: * (1) The default is for 2x2 chroma subsampling because the files are * considerably smaller and the appearance is typically satisfactory. * Call this with @sampling == 0 for full resolution output in * chroma channels for jpeg writing. */ l_int32 pixSetChromaSampling(PIX *pix, l_int32 sampling) { PROCNAME("pixSetChromaSampling"); if (!pix) return ERROR_INT("pix not defined", procName, 1 ); if (sampling) pix->special = 0; /* default */ else pix->special = L_NO_CHROMA_SAMPLING_JPEG; return 0; } /*---------------------------------------------------------------------* * Static system helpers * *---------------------------------------------------------------------*/ /*! * jpeg_error_catch_all_1() * * Notes: * (1) The default jpeg error_exit() kills the process, but we * never want a call to leptonica to kill a process. If you * do want this behavior, remove the calls to these error handlers. * (2) This is used where cinfo->client_data holds only jmpbuf. */ static void jpeg_error_catch_all_1(j_common_ptr cinfo) { jmp_buf *pjmpbuf = (jmp_buf *)cinfo->client_data; (*cinfo->err->output_message) (cinfo); jpeg_destroy(cinfo); longjmp(*pjmpbuf, 1); return; } /*! * jpeg_error_catch_all_2() * * Notes: * (1) This is used where cinfo->client_data needs to hold both * the jmpbuf and the jpeg comment data. * (2) On error, the comment data will be freed by the caller. */ static void jpeg_error_catch_all_2(j_common_ptr cinfo) { struct callback_data *pcb_data; pcb_data = (struct callback_data *)cinfo->client_data; (*cinfo->err->output_message) (cinfo); jpeg_destroy(cinfo); longjmp(pcb_data->jmpbuf, 1); return; } /* This function was borrowed from libjpeg */ static l_uint8 jpeg_getc(j_decompress_ptr cinfo) { struct jpeg_source_mgr *datasrc; datasrc = cinfo->src; if (datasrc->bytes_in_buffer == 0) { if (! (*datasrc->fill_input_buffer) (cinfo)) { return 0; } } datasrc->bytes_in_buffer--; return GETJOCTET(*datasrc->next_input_byte++); } /*! * jpeg_comment_callback() * * Notes: * (1) This is used to read the jpeg comment (JPEG_COM). * See the note above the declaration for why it returns * a "boolean". */ static boolean jpeg_comment_callback(j_decompress_ptr cinfo) { l_int32 length, i; l_uint8 *comment; struct callback_data *pcb_data; /* Get the size of the comment */ length = jpeg_getc(cinfo) << 8; length += jpeg_getc(cinfo); length -= 2; if (length <= 0) return 1; /* Extract the comment from the file */ if ((comment = (l_uint8 *)CALLOC(length + 1, sizeof(l_uint8))) == NULL) return 0; for (i = 0; i < length; i++) comment[i] = jpeg_getc(cinfo); /* Save the comment and return */ pcb_data = (struct callback_data *)cinfo->client_data; pcb_data->comment = comment; return 1; } /*---------------------------------------------------------------------* * Extraction of jpeg header info by parsing -- deprecated * *---------------------------------------------------------------------*/ /*! * extractJpegDataFromFile() * * Input: filein * &data ( binary jpeg compressed file data) * &nbytes ( size of binary jpeg data) * &w ( image width) * &h ( image height) * &bps ( bits/sample; should be 8) * &spp ( samples/pixel; should be 1 or 3) * Return: 0 if OK, 1 on error */ l_int32 extractJpegDataFromFile(const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp) { l_uint8 *data; l_int32 format, ret; size_t nbytes; PROCNAME("extractJpegDataFromFile"); if (pdata) *pdata = NULL; if (pnbytes) *pnbytes = 0; if (!pw && !ph && !pbps && !pspp) return ERROR_INT("no output data requested", procName, 1); if (pw) *pw = 0; if (ph) *pw = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (!filein) return ERROR_INT("filein not defined", procName, 1); findFileFormat(filein, &format); if (format != IFF_JFIF_JPEG) return ERROR_INT("filein not jfif jpeg", procName, 1); if ((data = l_binaryRead(filein, &nbytes)) == NULL) return ERROR_INT("inarray not made", procName, 1); /* On error, free the data */ ret = extractJpegDataFromArray(data, nbytes, pw, ph, pbps, pspp); if (ret) { FREE(data); } else { if (pnbytes) *pnbytes = nbytes; if (pdata) *pdata = data; else FREE(data); } return ret; } /*! * extractJpegDataFromArray() * * Input: data (binary data consisting of the entire jpeg file) * nbytes (size of binary data) * &w ( image width) * &h ( image height) * &bps ( bits/sample; should be 8) * &spp ( samples/pixel; should be 1, 3 or 4) * Return: 0 if OK, 1 on error */ l_int32 extractJpegDataFromArray(const void *data, size_t nbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp) { l_uint8 *data8; l_int32 imeta, msize, bps, w, h, spp; PROCNAME("extractJpegDataFromArray"); if (!pw && !ph && !pbps && !pspp) return ERROR_INT("no output data requested", procName, 1); if (pw) *pw = 0; if (ph) *pw = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (!data) return ERROR_INT("data not defined", procName, 1); data8 = (l_uint8 *)data; /* Find where the image metadata begins in header: * 0xc0 is start of metadata for baseline DCT; * 0xc1 is start of metadata for extended sequential DCT; * ... */ imeta = 0; if (locateJpegImageParameters(data8, nbytes, &imeta) == 0) { /* Save the metadata */ msize = getTwoByteParameter(data8, imeta); /* metadata size */ bps = data8[imeta + 2]; h = getTwoByteParameter(data8, imeta + 3); w = getTwoByteParameter(data8, imeta + 5); spp = data8[imeta + 7]; if (pbps) *pbps = bps; if (ph) *ph = h; if (pw) *pw = w; if (pspp) *pspp = spp; #if DEBUG_INFO fprintf(stderr, "w = %d, h = %d, bps = %d, spp = %d\n", w, h, bps, spp); fprintf(stderr, "imeta = %d, msize = %d\n", imeta, msize); #endif /* DEBUG_INFO */ /* Is the data obviously bad? */ if (h <= 0 || w <= 0 || bps != 8 || (spp != 1 && spp !=3 && spp != 4)) { L_WARNING("invalid image parameters:\n", procName); L_WARNING("fallback to read the entire file\n", procName); return extractJpegHeaderDataFallback(data, nbytes, pw, ph, pbps, pspp); } } else { L_WARNING("parsing failure; fallback to read entire file\n", procName); return extractJpegHeaderDataFallback(data, nbytes, pw, ph, pbps, pspp); } return 0; } /*! * extractJpegHeaderDataFallback() * * Input: data (binary data consisting of the entire jpeg file) * nbytes (size of binary data) * &w ( image width) * &h ( image height) * &bps ( bits/sample; should be 8) * &spp ( samples/pixel; should be 1 or 3) * Return: 0 if OK, 1 on error * * Notes: * (1) This gets the header data by uncompressing the jpeg * data into a pix. It can be used when header parsing fails. * (2) This cannot distinguish between 3 and 4 spp, so it returns 3. */ static l_int32 extractJpegHeaderDataFallback(const void *data, size_t nbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp) { l_uint8 *data8; l_int32 w, h, d, spp; PIX *pix; PROCNAME("extractJpegHeaderDataFallback"); if (!pw && !ph && !pbps && !pspp) return ERROR_INT("no output data requested", procName, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 8; if (pspp) *pspp = 0; if (!data) return ERROR_INT("data not defined", procName, 1); data8 = (l_uint8 *)data; if ((pix = pixReadMemJpeg(data8, nbytes, 0, 1, NULL, 0)) == NULL) return ERROR_INT("unable to read jpeg", procName, 1); pixGetDimensions(pix, &w, &h, &d); spp = (d == 8) ? 1 : 3; if (ph) *ph = h; if (pw) *pw = w; if (pspp) *pspp = spp; pixDestroy(&pix); return 0; } /* * locateJpegImageParameters() * * Input: inarray (binary jpeg) * size (of the data array) * &index ( location of image metadata) * Return: 0 if OK, 1 on error. Caller must check this! * * Notes: * (1) The metadata in jpeg files is a mess. There are markers * for the chunks that are always preceeded by 0xff. * It is possible to have 0xff in the binary data that is * not a marker, and this is always 'escaped' by a following * 0x0 byte. The two bytes following the marker give the * chunk size, inclusive of those two bytes. The jpeg parser * runs through the file, looking for special markers such * as 0xc0 and 0xc2 that indicate the beginning of a metadata * frame that gives the image size, depth, etc. * (2) The markers listed here appear to be the only ones that * we need to worry about. It would have been nice to have * avoided the switch with all these markers, but * unfortunately the parser for the jpeg header is set * to accept any byte marker that's not on the approved list! * So we have to look for a flag that's not on the list * (and is not 0 or followed by 0xff), and then interpret * the size of the data chunk and skip it. Why do this? * Such a chunk may contain a thumbnail version of the image, * so if we don't skip it, we will find a pair of bytes such * as 0xffc0 within the chunk, followed by the metadata * (e.g., w and h dimensions) for the thumbnail. Not what we want. * (3) There exist jpeg files with the sequence 0xffXXff, where XX * is apparently a random marker not on the 'approved' list. * These clearly need to be escaped, because there are no * chunks of size as great as 0xff00 that can be skipped * (remember: for chunks that must be skipped, the 2 bytes * after the marker give the chunk size). * (4) For marker definitions, see, e.g.: * http://www.digicamsoft.com/itu/itu-t81-36.html */ static l_int32 locateJpegImageParameters(l_uint8 *inarray, size_t size, l_int32 *pindex) { l_uint8 val; l_int32 index, skiplength; PROCNAME("locateJpegImageParameters"); if (!inarray) return ERROR_INT("inarray not defined", procName, 1); if (!pindex) return ERROR_INT("&index not defined", procName, 1); index = 0; /* start at the beginning of the data */ while (1) { if (getNextJpegMarker(inarray, size, &index)) break; if ((val = inarray[index]) == 0) /* ignore if "escaped" */ continue; if (inarray[index + 1] == 0xff) /* ignore if 'ff' immediately after */ continue; /* fprintf(stderr, " marker %x at %o, %d\n", val, index, index); */ switch(val) { /* These are valid metadata start of frame locations */ case 0xc0: /* M_SOF0 */ case 0xc1: /* M_SOF1 */ case 0xc2: /* M_SOF2 */ case 0xc3: /* M_SOF3 */ case 0xc5: /* M_SOF5 */ case 0xc6: /* M_SOF6 */ case 0xc7: /* M_SOF7 */ case 0xc9: /* M_SOF9 */ case 0xca: /* M_SOF10 */ case 0xcd: /* M_SOF13 */ case 0xce: /* M_SOF14 */ case 0xcf: /* M_SOF15 */ *pindex = index + 1; /* found it */ return 0; /* Go on -- these are on the 'approved' list and are * not chunks that must be skipped */ case 0x01: /* M_TEM */ case 0xd0: /* M_RST0 */ case 0xd1: /* M_RST1 */ case 0xd2: /* M_RST2 */ case 0xd3: /* M_RST3 */ case 0xd4: /* M_RST4 */ case 0xd5: /* M_RST5 */ case 0xd6: /* M_RST6 */ case 0xd7: /* M_RST7 */ case 0xd8: /* M_SOI */ case 0xd9: /* M_EOI */ case 0xe0: /* M_APP0 */ case 0xee: /* M_APP14 */ break; /* Everything else is assumed to be a chunk that must be skipped */ default: skiplength = getTwoByteParameter(inarray, index + 1); /* fprintf(stderr, " skipping: %d bytes at %d\n", skiplength, index); */ index += skiplength; break; } } return 1; /* not found */ } /* * getNextJpegMarker() * * Input: array (jpeg data) * size (from current point to the end) * &index (input current and the last position searched. * If it is not at the end of the array, we return * the first byte that is not 0xff, after * having encountered at least one 0xff.) * Return: 0 if a marker is found, 1 if the end of the array is reached * * Notes: * (1) In jpeg, 0xff is used to mark the end of a data segment. * There may be more than one 0xff in succession. But not every * 0xff marks the end of a segment. It is possible, though * rare, that 0xff can occur within some data. In that case, * the marker is "escaped", by following it with 0x00. * (2) This function parses a jpeg data stream. It doesn't * _really_ get the next marker, because it doesn't check if * the 0xff is escaped. But the caller checks for this escape * condition, and ignores the marker if escaped. */ static l_int32 getNextJpegMarker(l_uint8 *array, size_t size, l_int32 *pindex) { l_uint8 val; l_int32 index; PROCNAME("getNextJpegMarker"); if (!array) return ERROR_INT("array not defined", procName, 1); if (!pindex) return ERROR_INT("&index not defined", procName, 1); index = *pindex; /* initial location in array */ while (index < size) { /* skip to 0xff */ val = array[index++]; if (val == 0xff) break; } while (index < size) { /* skip repeated 0xff */ val = array[index++]; if (val != 0xff) break; } *pindex = index - 1; if (index >= size) return 1; else return 0; } static l_int32 getTwoByteParameter(l_uint8 *array, l_int32 index) { return (l_int32)((array[index]) << 8) + (l_int32)(array[index + 1]); } /* --------------------------------------------*/ #endif /* HAVE_LIBJPEG */ /* --------------------------------------------*/ leptonica-1.70/src/bilateral.c0000664000175000017500000007353012274210707014413 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bilateral.c * * Top level approximate separable grayscale or color bilateral filtering * PIX *pixBilateral() * PIX *pixBilateralGray() * * Implementation of approximate separable bilateral filter * static L_BILATERAL *bilateralCreate() * static void *bilateralDestroy() * static PIX *bilateralApply() * * Slow, exact implementation of grayscale or color bilateral filtering * PIX *pixBilateralExact() * PIX *pixBilateralGrayExact() * PIX *pixBlockBilateralExact() * * Kernel helper function * L_KERNEL *makeRangeKernel() * * This includes both a slow, exact implementation of the bilateral * filter algorithm (given by Sylvain Paris and Frédo Durand), * and a fast, approximate and separable implementation (following * Yang, Tan and Ahuja). See bilateral.h for algorithmic details. * * The bilateral filter has the nice property of applying a gaussian * filter to smooth parts of the image that don't vary too quickly, * while at the same time preserving edges. The filter is nonlinear * and cannot be decomposed into two separable filters; however, * there exists an approximate method that is separable. To further * speed up the separable implementation, you can generate the * intermediate data at reduced resolution. * * The full kernel is composed of two parts: a spatial gaussian filter * and a nonlinear "range" filter that depends on the intensity difference * between the reference pixel at the spatial kernel origin and any other * pixel within the kernel support. * * In our implementations, the range filter is a parameterized, * one-sided, 256-element, monotonically decreasing gaussian function * of the absolute value of the difference between pixel values; namely, * abs(I2 - I1). In general, any decreasing function can be used, * and more generally, any two-dimensional kernel can be used if * you wish to relax the 'abs' condition. (In that case, the range * filter can be 256 x 256). */ #include #include "allheaders.h" #include "bilateral.h" static L_BILATERAL *bilateralCreate(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction); static PIX *bilateralApply(L_BILATERAL *bil); static void bilateralDestroy(L_BILATERAL **pbil); #ifndef NO_CONSOLE_IO #define DEBUG_BILATERAL 0 #endif /* ~NO_CONSOLE_IO */ /*--------------------------------------------------------------------------* * Top level approximate separable grayscale or color bilateral filtering * *--------------------------------------------------------------------------*/ /*! * pixBilateral() * * Input: pixs (8 bpp gray or 32 bpp rgb, no colormap) * spatial_stdev (of gaussian kernel; in pixels, > 0.5) * range_stdev (of gaussian range kernel; > 5.0; typ. 50.0) * ncomps (number of intermediate sums J(k,x); in [4 ... 30]) * reduction (1, 2 or 4) * Return: pixd (bilateral filtered image), or null on error * * Notes: * (1) This performs a relatively fast, separable bilateral * filtering operation. The time is proportional to ncomps * and varies inversely approximately as the cube of the * reduction factor. See bilateral.h for algorithm details. * (2) We impose minimum values for range_stdev and ncomps to * avoid nasty artifacts when either are too small. We also * impose a constraint on their product: * ncomps * range_stdev >= 100. * So for values of range_stdev >= 25, ncomps can be as small as 4. * Here is a qualitative, intuitive explanation for this constraint. * Call the difference in k values between the J(k) == 'delta', where * 'delta' ~ 200 / ncomps * Then this constraint is roughly equivalent to the condition: * 'delta' < 2 * range_stdev * Note that at an intensity difference of (2 * range_stdev), the * range part of the kernel reduces the effect by the factor 0.14. * This constraint requires that we have a sufficient number of * PCBs (i.e, a small enough 'delta'), so that for any value of * image intensity I, there exists a k (and a PCB, J(k), such that * |I - k| < range_stdev * Any fewer PCBs and we don't have enough to support this condition. * (3) The upper limit of 30 on ncomps is imposed because the * gain in accuracy is not worth the extra computation. * (4) The size of the gaussian kernel is twice the spatial_stdev * on each side of the origin. The minimum value of * spatial_stdev, 0.5, is required to have a finite sized * spatial kernel. In practice, a much larger value is used. * (5) Computation of the intermediate images goes inversely * as the cube of the reduction factor. If you can use a * reduction of 2 or 4, it is well-advised. * (6) The range kernel is defined over the absolute value of pixel * grayscale differences, and hence must have size 256 x 1. * Values in the array represent the multiplying weight * depending on the absolute gray value difference between * the source pixel and the neighboring pixel, and should * be monotonically decreasing. * (7) Interesting observation. Run this on prog/fish24.jpg, with * range_stdev = 60, ncomps = 6, and spatial_dev = {10, 30, 50}. * As spatial_dev gets larger, we get the counter-intuitive * result that the body of the red fish becomes less blurry. */ PIX * pixBilateral(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction) { l_int32 d; l_float32 sstdev; /* scaled spatial stdev */ PIX *pixt, *pixr, *pixg, *pixb, *pixd; PROCNAME("pixBilateral"); if (!pixs || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not defined or cmapped", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (reduction != 1 && reduction != 2 && reduction != 4) return (PIX *)ERROR_PTR("reduction invalid", procName, NULL); sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ if (sstdev < 0.5) return (PIX *)ERROR_PTR("sstdev < 0.5", procName, NULL); if (range_stdev <= 5.0) return (PIX *)ERROR_PTR("range_stdev <= 5.0", procName, NULL); if (ncomps < 4 || ncomps > 30) return (PIX *)ERROR_PTR("ncomps not in [4 ... 30]", procName, NULL); if (ncomps * range_stdev < 100.0) return (PIX *)ERROR_PTR("ncomps * range_stdev < 100.0", procName, NULL); if (d == 8) return pixBilateralGray(pixs, spatial_stdev, range_stdev, ncomps, reduction); pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, reduction); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, reduction); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixBilateralGray(pixt, spatial_stdev, range_stdev, ncomps, reduction); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*! * pixBilateralGray() * * Input: pixs (8 bpp gray) * spatial_stdev (of gaussian kernel; in pixels, > 0.5) * range_stdev (of gaussian range kernel; > 5.0; typ. 50.0) * ncomps (number of intermediate sums J(k,x); in [4 ... 30]) * reduction (1, 2 or 4) * Return: pixd (8 bpp bilateral filtered image), or null on error * * Notes: * (1) See pixBilateral() for constraints on the input parameters. * (2) See pixBilateral() for algorithm details. */ PIX * pixBilateralGray(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction) { l_float32 sstdev; /* scaled spatial stdev */ PIX *pixd; L_BILATERAL *bil; PROCNAME("pixBilateralGray"); if (!pixs || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not defined or cmapped", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp gray", procName, NULL); if (reduction != 1 && reduction != 2 && reduction != 4) return (PIX *)ERROR_PTR("reduction invalid", procName, NULL); sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ if (sstdev < 0.5) return (PIX *)ERROR_PTR("sstdev < 0.5", procName, NULL); if (range_stdev <= 5.0) return (PIX *)ERROR_PTR("range_stdev <= 5.0", procName, NULL); if (ncomps < 4 || ncomps > 30) return (PIX *)ERROR_PTR("ncomps not in [4 ... 30]", procName, NULL); if (ncomps * range_stdev < 100.0) return (PIX *)ERROR_PTR("ncomps * range_stdev < 100.0", procName, NULL); bil = bilateralCreate(pixs, spatial_stdev, range_stdev, ncomps, reduction); if (!bil) return (PIX *)ERROR_PTR("bil not made", procName, NULL); pixd = bilateralApply(bil); bilateralDestroy(&bil); return pixd; } /*----------------------------------------------------------------------* * Implementation of approximate separable bilateral filter * *----------------------------------------------------------------------*/ /*! * bilateralCreate() * * Input: pixs (8 bpp gray, no colormap) * spatial_stdev (of gaussian kernel; in pixels, > 0.5) * range_stdev (of gaussian range kernel; > 5.0; typ. 50.0) * ncomps (number of intermediate sums J(k,x); in [4 ... 30]) * reduction (1, 2 or 4) * Return: bil, or null on error * * Notes: * (1) This initializes a bilateral filtering operation, generating all * the data required. It takes most of the time in the bilateral * filtering operation. * (2) See bilateral.h for details of the algorithm. * (3) See pixBilateral() for constraints on input parameters, which * are not checked here. */ static L_BILATERAL * bilateralCreate(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction) { l_int32 w, ws, wd, h, hs, hd, i, j, k, index; l_int32 border, minval, maxval, spatial_size; l_int32 halfwidth, wpls, wplt, wpld, kval, nval, dval; l_float32 sstdev, fval1, fval2, denom, sum, norm, kern; l_int32 *nc, *kindex; l_float32 *kfract, *range, *spatial; l_uint32 *datas, *datat, *datad, *lines, *linet, *lined; L_BILATERAL *bil; PIX *pixt, *pixt2, *pixsc, *pixd; PIXA *pixac; PROCNAME("bilateralCreate"); sstdev = spatial_stdev / (l_float32)reduction; /* reduced spat. stdev */ if ((bil = (L_BILATERAL *)CALLOC(1, sizeof(L_BILATERAL))) == NULL) return (L_BILATERAL *)ERROR_PTR("bil not made", procName, NULL); bil->spatial_stdev = sstdev; bil->range_stdev = range_stdev; bil->reduction = reduction; bil->ncomps = ncomps; if (reduction == 1) { pixt = pixClone(pixs); } else if (reduction == 2) { pixt = pixScaleAreaMap2(pixs); } else { /* reduction == 4) */ pixt2 = pixScaleAreaMap2(pixs); pixt = pixScaleAreaMap2(pixt2); pixDestroy(&pixt2); } pixGetExtremeValue(pixt, 1, L_SELECT_MIN, NULL, NULL, NULL, &minval); pixGetExtremeValue(pixt, 1, L_SELECT_MAX, NULL, NULL, NULL, &maxval); bil->minval = minval; bil->maxval = maxval; border = (l_int32)(2 * sstdev + 1); pixsc = pixAddMirroredBorder(pixt, border, border, border, border); bil->pixsc = pixsc; pixDestroy(&pixt); bil->pixs = pixClone(pixs); /* -------------------------------------------------------------------- * * Generate arrays for interpolation of J(k,x): * (1.0 - kfract[.]) * J(kindex[.], x) + kfract[.] * J(kindex[.] + 1, x), * where I(x) is the index into kfract[] and kindex[], * and x is an index into the 2D image array. * -------------------------------------------------------------------- */ /* nc is the set of k values to be used in J(k,x) */ nc = (l_int32 *)CALLOC(ncomps, sizeof(l_int32)); for (i = 0; i < ncomps; i++) nc[i] = minval + i * (maxval - minval) / (ncomps - 1); bil->nc = nc; /* kindex maps from intensity I(x) to the lower k index for J(k,x) */ kindex = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = minval, k = 0; i <= maxval && k < ncomps - 1; k++) { fval2 = nc[k + 1]; while (i < fval2) { kindex[i] = k; i++; } } kindex[maxval] = ncomps - 2; bil->kindex = kindex; /* kfract maps from intensity I(x) to the fraction of J(k+1,x) used */ kfract = (l_float32 *)CALLOC(256, sizeof(l_float32)); /* from lower */ for (i = minval, k = 0; i <= maxval && k < ncomps - 1; k++) { fval1 = nc[k]; fval2 = nc[k + 1]; while (i < fval2) { kfract[i] = (l_float32)(i - fval1) / (l_float32)(fval2 - fval1); i++; } } kfract[maxval] = 1.0; bil->kfract = kfract; #if DEBUG_BILATERAL for (i = minval; i <= maxval; i++) fprintf(stderr, "kindex[%d] = %d; kfract[%d] = %5.3f\n", i, kindex[i], i, kfract[i]); for (i = 0; i < ncomps; i++) fprintf(stderr, "nc[%d] = %d\n", i, nc[i]); #endif /* DEBUG_BILATERAL */ /* -------------------------------------------------------------------- * * Generate 1-D kernel arrays (spatial and range) * * -------------------------------------------------------------------- */ spatial_size = 2 * sstdev + 1; spatial = (l_float32 *)CALLOC(spatial_size, sizeof(l_float32)); denom = 2. * sstdev * sstdev; for (i = 0; i < spatial_size; i++) spatial[i] = expf(-(l_float32)(i * i) / denom); bil->spatial = spatial; range = (l_float32 *)CALLOC(256, sizeof(l_float32)); denom = 2. * range_stdev * range_stdev; for (i = 0; i < 256; i++) range[i] = expf(-(l_float32)(i * i) / denom); bil->range = range; /* -------------------------------------------------------------------- * * Generate principal bilateral component images * * -------------------------------------------------------------------- */ pixac = pixaCreate(ncomps); pixGetDimensions(pixsc, &ws, &hs, NULL); datas = pixGetData(pixsc); wpls = pixGetWpl(pixsc); pixGetDimensions(pixs, &w, &h, NULL); wd = (w + reduction - 1) / reduction; hd = (h + reduction - 1) / reduction; halfwidth = (l_int32)(2.0 * sstdev); for (index = 0; index < ncomps; index++) { pixt = pixCopy(NULL, pixsc); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); kval = nc[index]; /* Separable convolutions: horizontal first */ for (i = 0; i < hd; i++) { lines = datas + (border + i) * wpls; linet = datat + (border + i) * wplt; for (j = 0; j < wd; j++) { sum = 0.0; norm = 0.0; for (k = -halfwidth; k <= halfwidth; k++) { nval = GET_DATA_BYTE(lines, border + j + k); kern = spatial[L_ABS(k)] * range[L_ABS(kval - nval)]; sum += kern * nval; norm += kern; } dval = (l_int32)((sum / norm) + 0.5); SET_DATA_BYTE(linet, border + j, dval); } } /* Vertical convolution */ pixd = pixCreate(wd, hd, 8); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { linet = datat + (border + i) * wplt; lined = datad + i * wpld; for (j = 0; j < wd; j++) { sum = 0.0; norm = 0.0; for (k = -halfwidth; k <= halfwidth; k++) { nval = GET_DATA_BYTE(linet + k * wplt, border + j); kern = spatial[L_ABS(k)] * range[L_ABS(kval - nval)]; sum += kern * nval; norm += kern; } dval = (l_int32)((sum / norm) + 0.5); SET_DATA_BYTE(lined, j, dval); } } pixDestroy(&pixt); pixaAddPix(pixac, pixd, L_INSERT); } bil->pixac = pixac; bil->lineset = (l_uint32 ***)pixaGetLinePtrs(pixac, NULL); return bil; } /*! * bilateralApply() * * Input: bil * Return: pixd */ static PIX * bilateralApply(L_BILATERAL *bil) { l_int32 i, j, k, ired, jred, w, h, wpls, wpld, ncomps, reduction; l_int32 vals, vald, lowval, hival; l_int32 *kindex; l_float32 fract; l_float32 *kfract; l_uint32 *lines, *lined, *datas, *datad; l_uint32 ***lineset = NULL; /* for set of PBC */ PIX *pixs, *pixd; PIXA *pixac; PROCNAME("bilateralApply"); if (!bil) return (PIX *)ERROR_PTR("bil not defined", procName, NULL); pixs = bil->pixs; ncomps = bil->ncomps; kindex = bil->kindex; kfract = bil->kfract; reduction = bil->reduction; pixac = bil->pixac; lineset = bil->lineset; if (pixaGetCount(pixac) != ncomps) return (PIX *)ERROR_PTR("PBC images do not exist", procName, NULL); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; ired = i / reduction; for (j = 0; j < w; j++) { jred = j / reduction; vals = GET_DATA_BYTE(lines, j); k = kindex[vals]; lowval = GET_DATA_BYTE(lineset[k][ired], jred); hival = GET_DATA_BYTE(lineset[k + 1][ired], jred); fract = kfract[vals]; vald = (l_int32)((1.0 - fract) * lowval + fract * hival + 0.5); SET_DATA_BYTE(lined, j, vald); } } return pixd; } /*! * bilateralDestroy() * * Input: &bil * Return: void */ static void bilateralDestroy(L_BILATERAL **pbil) { l_int32 i; L_BILATERAL *bil; PROCNAME("bilateralDestroy"); if (pbil == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((bil = *pbil) == NULL) return; pixDestroy(&bil->pixs); pixDestroy(&bil->pixsc); pixaDestroy(&bil->pixac); FREE(bil->spatial); FREE(bil->range); FREE(bil->nc); FREE(bil->kindex); FREE(bil->kfract); for (i = 0; i < bil->ncomps; i++) FREE(bil->lineset[i]); FREE(bil->lineset); FREE(bil); *pbil = NULL; return; } /*----------------------------------------------------------------------* * Exact implementation of grayscale or color bilateral filtering * *----------------------------------------------------------------------*/ /*! * pixBilateralExact() * * Input: pixs (8 bpp gray or 32 bpp rgb) * spatial_kel (gaussian kernel) * range_kel ( 256 x 1, monotonically decreasing) * Return: pixd (8 bpp bilateral filtered image) * * Notes: * (1) The spatial_kel is a conventional smoothing kernel, typically a * 2-d Gaussian kernel or other block kernel. It can be either * normalized or not, but must be everywhere positive. * (2) The range_kel is defined over the absolute value of pixel * grayscale differences, and hence must have size 256 x 1. * Values in the array represent the multiplying weight for each * gray value difference between the target pixel and center of the * kernel, and should be monotonically decreasing. * (3) If range_kel == NULL, a constant weight is applied regardless * of the range value difference. This degenerates to a regular * pixConvolve() with a normalized kernel. */ PIX * pixBilateralExact(PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel) { l_int32 d; PIX *pixt, *pixr, *pixg, *pixb, *pixd; PROCNAME("pixBilateralExact"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs is cmapped", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (!spatial_kel) return (PIX *)ERROR_PTR("spatial_ke not defined", procName, NULL); if (d == 8) { return pixBilateralGrayExact(pixs, spatial_kel, range_kel); } else { /* d == 32 */ pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixBilateralGrayExact(pixt, spatial_kel, range_kel); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixBilateralGrayExact(pixt, spatial_kel, range_kel); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixBilateralGrayExact(pixt, spatial_kel, range_kel); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } } /*! * pixBilateralGrayExact() * * Input: pixs (8 bpp gray) * spatial_kel (gaussian kernel) * range_kel ( 256 x 1, monotonically decreasing) * Return: pixd (8 bpp bilateral filtered image) * * Notes: * (1) See pixBilateralExact(). */ PIX * pixBilateralGrayExact(PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel) { l_int32 i, j, id, jd, k, m, w, h, d, sx, sy, cx, cy, wplt, wpld; l_int32 val, center_val; l_uint32 *datat, *datad, *linet, *lined; l_float32 sum, weight_sum, weight; L_KERNEL *keli; PIX *pixt, *pixd; PROCNAME("pixBilateralGrayExact"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be gray", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (!spatial_kel) return (PIX *)ERROR_PTR("spatial kel not defined", procName, NULL); if (!range_kel) return pixConvolve(pixs, spatial_kel, 8, 1); if (range_kel->sx != 256 || range_kel->sy != 1) return (PIX *)ERROR_PTR("range kel not {256 x 1", procName, NULL); keli = kernelInvert(spatial_kel); kernelGetParameters(keli, &sy, &sx, &cy, &cx); if ((pixt = pixAddMirroredBorder(pixs, cx, sx - cx, cy, sy - cy)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixCreate(w, h, 8); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0, id = 0; id < h; i++, id++) { lined = datad + id * wpld; for (j = 0, jd = 0; jd < w; j++, jd++) { center_val = GET_DATA_BYTE(datat + (i + cy) * wplt, j + cx); weight_sum = 0.0; sum = 0.0; for (k = 0; k < sy; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < sx; m++) { val = GET_DATA_BYTE(linet, j + m); weight = keli->data[k][m] * range_kel->data[0][L_ABS(center_val - val)]; weight_sum += weight; sum += val * weight; } } SET_DATA_BYTE(lined, jd, (l_int32)(sum / weight_sum + 0.5)); } } kernelDestroy(&keli); pixDestroy(&pixt); return pixd; } /*! * pixBlockBilateralExact() * * Input: pixs (8 bpp gray or 32 bpp rgb) * spatial_stdev (> 0.0) * range_stdev (> 0.0) * Return: pixd (8 bpp or 32 bpp bilateral filtered image) * * Notes: * (1) See pixBilateralExact(). This provides an interface using * the standard deviations of the spatial and range filters. * (2) The convolution window halfwidth is 2 * spatial_stdev, * and the square filter size is 4 * spatial_stdev + 1. * The kernel captures 95% of total energy. This is compensated * by normalization. * (3) The range_stdev is analogous to spatial_halfwidth in the * grayscale domain [0...255], and determines how much damping of the * smoothing operation is applied across edges. The larger this * value is, the smaller the damping. The smaller the value, the * more edge details are preserved. These approximations are useful * for deciding the appropriate cutoff. * kernel[1 * stdev] ~= 0.6 * kernel[0] * kernel[2 * stdev] ~= 0.14 * kernel[0] * kernel[3 * stdev] ~= 0.01 * kernel[0] * If range_stdev is infinite there is no damping, and this * becomes a conventional gaussian smoothing. * This value does not affect the run time. * (4) If range_stdev is negative or zero, the range kernel is * ignored and this degenerates to a straight gaussian convolution. * (5) This is very slow for large spatial filters. The time * on a 3GHz pentium is roughly * T = 1.2 * 10^-8 * (A * sh^2) sec * where A = # of pixels, sh = spatial halfwidth of filter. */ PIX* pixBlockBilateralExact(PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev) { l_int32 d, halfwidth; L_KERNEL *spatial_kel, *range_kel; PIX *pixd; PROCNAME("pixBlockBilateralExact"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs is cmapped", procName, NULL); if (spatial_stdev <= 0.0) return (PIX *)ERROR_PTR("invalid spatial stdev", procName, NULL); if (range_stdev <= 0.0) return (PIX *)ERROR_PTR("invalid range stdev", procName, NULL); halfwidth = 2 * spatial_stdev; spatial_kel = makeGaussianKernel(halfwidth, halfwidth, spatial_stdev, 1.0); range_kel = makeRangeKernel(range_stdev); pixd = pixBilateralExact(pixs, spatial_kel, range_kel); kernelDestroy(&spatial_kel); kernelDestroy(&range_kel); return pixd; } /*----------------------------------------------------------------------* * Kernel helper function * *----------------------------------------------------------------------*/ /*! * makeRangeKernel() * * Input: range_stdev (> 0) * Return: kel, or null on error * * Notes: * (1) Creates a one-sided Gaussian kernel with the given * standard deviation. At grayscale difference of one stdev, * the kernel falls to 0.6, and to 0.01 at three stdev. * (2) A typical input number might be 20. Then pixels whose * value differs by 60 from the center pixel have their * weight in the convolution reduced by a factor of about 0.01. */ L_KERNEL * makeRangeKernel(l_float32 range_stdev) { l_int32 x; l_float32 val, denom; L_KERNEL *kel; PROCNAME("makeRangeKernel"); if (range_stdev <= 0.0) return (L_KERNEL *)ERROR_PTR("invalid stdev <= 0", procName, NULL); denom = 2. * range_stdev * range_stdev; if ((kel = kernelCreate(1, 256)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); kernelSetOrigin(kel, 0, 0); for (x = 0; x < 256; x++) { val = expf(-(l_float32)(x * x) / denom); kernelSetElement(kel, 0, x, val); } return kel; } leptonica-1.70/src/sel1.c0000644000175000017500000020350312267060516013314 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sel1.c * * Basic ops on Sels and Selas * * Create/destroy/copy: * SELA *selaCreate() * void selaDestroy() * SEL *selCreate() * void selDestroy() * SEL *selCopy() * SEL *selCreateBrick() * SEL *selCreateComb() * * Helper proc: * l_int32 **create2dIntArray() * * Extension of sela: * SELA *selaAddSel() * static l_int32 selaExtendArray() * * Accessors: * l_int32 selaGetCount() * SEL *selaGetSel() * char *selGetName() * l_int32 selSetName() * l_int32 selaFindSelByName() * l_int32 selGetElement() * l_int32 selSetElement() * l_int32 selGetParameters() * l_int32 selSetOrigin() * l_int32 selGetTypeAtOrigin() * char *selaGetBrickName() * char *selaGetCombName() * static char *selaComputeCompositeParameters() * l_int32 getCompositeParameters() * SARRAY *selaGetSelnames() * * Max translations for erosion and hmt * l_int32 selFindMaxTranslations() * * Rotation by multiples of 90 degrees * SEL *selRotateOrth() * * Sela and Sel serialized I/O * SELA *selaRead() * SELA *selaReadStream() * SEL *selRead() * SEL *selReadStream() * l_int32 selaWrite() * l_int32 selaWriteStream() * l_int32 selWrite() * l_int32 selWriteStream() * * Building custom hit-miss sels from compiled strings * SEL *selCreateFromString() * char *selPrintToString() [for debugging] * * Building custom hit-miss sels from a simple file format * SELA *selaCreateFromFile() * static SEL *selCreateFromSArray() * * Making hit-only sels from Pta and Pix * SEL *selCreateFromPta() * SEL *selCreateFromPix() * * Making hit-miss sels from Pix and image files * SEL *selReadFromColorImage() * SEL *selCreateFromColorPix() * * Printable display of sel * PIX *selDisplayInPix() * PIX *selaDisplayInPix() * * Usage notes: * In this file we have seven functions that make sels: * (1) selCreate(), with input (h, w, [name]) * The generic function. Roll your own, using selSetElement(). * (2) selCreateBrick(), with input (h, w, cy, cx, val) * The most popular function. Makes a rectangular sel of * all hits, misses or don't-cares. We have many morphology * operations that create a sel of all hits, use it, and * destroy it. * (3) selCreateFromString() with input (text, h, w, [name]) * Adam Langley's clever function, allows you to make a hit-miss * sel from a string in code that is geometrically laid out * just like the actual sel. * (4) selaCreateFromFile() with input (filename) * This parses a simple file format to create an array of * hit-miss sels. The sel data uses the same encoding * as in (3), with geometrical layout enforced. * (5) selCreateFromPta() with input (pta, cy, cx, [name]) * Another way to make a sel with only hits. * (6) selCreateFromPix() with input (pix, cy, cx, [name]) * Yet another way to make a sel from hits. * (7) selCreateFromColorPix() with input (pix, name). * Another way to make a general hit-miss sel, starting with * an image editor. * In addition, there are three functions in selgen.c that * automatically generate a hit-miss sel from a pix and * a number of parameters. This is useful for problems like * "find all patterns that look like this one." * * Consistency, being the hobgoblin of small minds, * is adhered to here in the dimensioning and accessing of sels. * Everything is done in standard matrix (row, column) order. * When we set specific elements in a sel, we likewise use * (row, col) ordering: * selSetElement(), with input (row, col, type) */ #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 256; static const l_int32 INITIAL_PTR_ARRAYSIZE = 50; /* n'import quoi */ static const l_int32 MANY_SELS = 1000; /* Static functions */ static l_int32 selaExtendArray(SELA *sela); static SEL *selCreateFromSArray(SARRAY *sa, l_int32 first, l_int32 last); struct CompParameterMap { l_int32 size; l_int32 size1; l_int32 size2; char selnameh1[20]; char selnameh2[20]; char selnamev1[20]; char selnamev2[20]; }; static const struct CompParameterMap comp_parameter_map[] = { { 2, 2, 1, "sel_2h", "", "sel_2v", "" }, { 3, 3, 1, "sel_3h", "", "sel_3v", "" }, { 4, 2, 2, "sel_2h", "sel_comb_4h", "sel_2v", "sel_comb_4v" }, { 5, 5, 1, "sel_5h", "", "sel_5v", "" }, { 6, 3, 2, "sel_3h", "sel_comb_6h", "sel_3v", "sel_comb_6v" }, { 7, 7, 1, "sel_7h", "", "sel_7v", "" }, { 8, 4, 2, "sel_4h", "sel_comb_8h", "sel_4v", "sel_comb_8v" }, { 9, 3, 3, "sel_3h", "sel_comb_9h", "sel_3v", "sel_comb_9v" }, { 10, 5, 2, "sel_5h", "sel_comb_10h", "sel_5v", "sel_comb_10v" }, { 11, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, { 12, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, { 13, 4, 3, "sel_4h", "sel_comb_12h", "sel_4v", "sel_comb_12v" }, { 14, 7, 2, "sel_7h", "sel_comb_14h", "sel_7v", "sel_comb_14v" }, { 15, 5, 3, "sel_5h", "sel_comb_15h", "sel_5v", "sel_comb_15v" }, { 16, 4, 4, "sel_4h", "sel_comb_16h", "sel_4v", "sel_comb_16v" }, { 17, 4, 4, "sel_4h", "sel_comb_16h", "sel_4v", "sel_comb_16v" }, { 18, 6, 3, "sel_6h", "sel_comb_18h", "sel_6v", "sel_comb_18v" }, { 19, 5, 4, "sel_5h", "sel_comb_20h", "sel_5v", "sel_comb_20v" }, { 20, 5, 4, "sel_5h", "sel_comb_20h", "sel_5v", "sel_comb_20v" }, { 21, 7, 3, "sel_7h", "sel_comb_21h", "sel_7v", "sel_comb_21v" }, { 22, 11, 2, "sel_11h", "sel_comb_22h", "sel_11v", "sel_comb_22v" }, { 23, 6, 4, "sel_6h", "sel_comb_24h", "sel_6v", "sel_comb_24v" }, { 24, 6, 4, "sel_6h", "sel_comb_24h", "sel_6v", "sel_comb_24v" }, { 25, 5, 5, "sel_5h", "sel_comb_25h", "sel_5v", "sel_comb_25v" }, { 26, 5, 5, "sel_5h", "sel_comb_25h", "sel_5v", "sel_comb_25v" }, { 27, 9, 3, "sel_9h", "sel_comb_27h", "sel_9v", "sel_comb_27v" }, { 28, 7, 4, "sel_7h", "sel_comb_28h", "sel_7v", "sel_comb_28v" }, { 29, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, { 30, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, { 31, 6, 5, "sel_6h", "sel_comb_30h", "sel_6v", "sel_comb_30v" }, { 32, 8, 4, "sel_8h", "sel_comb_32h", "sel_8v", "sel_comb_32v" }, { 33, 11, 3, "sel_11h", "sel_comb_33h", "sel_11v", "sel_comb_33v" }, { 34, 7, 5, "sel_7h", "sel_comb_35h", "sel_7v", "sel_comb_35v" }, { 35, 7, 5, "sel_7h", "sel_comb_35h", "sel_7v", "sel_comb_35v" }, { 36, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, { 37, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, { 38, 6, 6, "sel_6h", "sel_comb_36h", "sel_6v", "sel_comb_36v" }, { 39, 13, 3, "sel_13h", "sel_comb_39h", "sel_13v", "sel_comb_39v" }, { 40, 8, 5, "sel_8h", "sel_comb_40h", "sel_8v", "sel_comb_40v" }, { 41, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, { 42, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, { 43, 7, 6, "sel_7h", "sel_comb_42h", "sel_7v", "sel_comb_42v" }, { 44, 11, 4, "sel_11h", "sel_comb_44h", "sel_11v", "sel_comb_44v" }, { 45, 9, 5, "sel_9h", "sel_comb_45h", "sel_9v", "sel_comb_45v" }, { 46, 9, 5, "sel_9h", "sel_comb_45h", "sel_9v", "sel_comb_45v" }, { 47, 8, 6, "sel_8h", "sel_comb_48h", "sel_8v", "sel_comb_48v" }, { 48, 8, 6, "sel_8h", "sel_comb_48h", "sel_8v", "sel_comb_48v" }, { 49, 7, 7, "sel_7h", "sel_comb_49h", "sel_7v", "sel_comb_49v" }, { 50, 10, 5, "sel_10h", "sel_comb_50h", "sel_10v", "sel_comb_50v" }, { 51, 10, 5, "sel_10h", "sel_comb_50h", "sel_10v", "sel_comb_50v" }, { 52, 13, 4, "sel_13h", "sel_comb_52h", "sel_13v", "sel_comb_52v" }, { 53, 9, 6, "sel_9h", "sel_comb_54h", "sel_9v", "sel_comb_54v" }, { 54, 9, 6, "sel_9h", "sel_comb_54h", "sel_9v", "sel_comb_54v" }, { 55, 11, 5, "sel_11h", "sel_comb_55h", "sel_11v", "sel_comb_55v" }, { 56, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, { 57, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, { 58, 8, 7, "sel_8h", "sel_comb_56h", "sel_8v", "sel_comb_56v" }, { 59, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, { 60, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, { 61, 10, 6, "sel_10h", "sel_comb_60h", "sel_10v", "sel_comb_60v" }, { 62, 9, 7, "sel_9h", "sel_comb_63h", "sel_9v", "sel_comb_63v" }, { 63, 9, 7, "sel_9h", "sel_comb_63h", "sel_9v", "sel_comb_63v" } }; /*------------------------------------------------------------------------* * Create / Destroy / Copy * *------------------------------------------------------------------------*/ /*! * selaCreate() * * Input: n (initial number of sel ptrs; use 0 for default) * Return: sela, or null on error */ SELA * selaCreate(l_int32 n) { SELA *sela; PROCNAME("selaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if (n > MANY_SELS) L_WARNING("%d sels\n", procName, n); if ((sela = (SELA *)CALLOC(1, sizeof(SELA))) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); sela->nalloc = n; sela->n = 0; /* make array of se ptrs */ if ((sela->sel = (SEL **)CALLOC(n, sizeof(SEL *))) == NULL) return (SELA *)ERROR_PTR("sel ptrs not made", procName, NULL); return sela; } /*! * selaDestroy() * * Input: &sela () * Return: void */ void selaDestroy(SELA **psela) { SELA *sela; l_int32 i; if (!psela) return; if ((sela = *psela) == NULL) return; for (i = 0; i < sela->n; i++) selDestroy(&sela->sel[i]); FREE(sela->sel); FREE(sela); *psela = NULL; return; } /*! * selCreate() * * Input: height, width * name ( sel name; can be null) * Return: sel, or null on error * * Notes: * (1) selCreate() initializes all values to 0. * (2) After this call, (cy,cx) and nonzero data values must be * assigned. If a text name is not assigned here, it will * be needed later when the sel is put into a sela. */ SEL * selCreate(l_int32 height, l_int32 width, const char *name) { SEL *sel; PROCNAME("selCreate"); if ((sel = (SEL *)CALLOC(1, sizeof(SEL))) == NULL) return (SEL *)ERROR_PTR("sel not made", procName, NULL); if (name) sel->name = stringNew(name); sel->sy = height; sel->sx = width; if ((sel->data = create2dIntArray(height, width)) == NULL) return (SEL *)ERROR_PTR("data not allocated", procName, NULL); return sel; } /*! * selDestroy() * * Input: &sel () * Return: void */ void selDestroy(SEL **psel) { l_int32 i; SEL *sel; PROCNAME("selDestroy"); if (psel == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((sel = *psel) == NULL) return; for (i = 0; i < sel->sy; i++) FREE(sel->data[i]); FREE(sel->data); if (sel->name) FREE(sel->name); FREE(sel); *psel = NULL; return; } /*! * selCopy() * * Input: sel * Return: a copy of the sel, or null on error */ SEL * selCopy(SEL *sel) { l_int32 sx, sy, cx, cy, i, j; SEL *csel; PROCNAME("selCopy"); if (!sel) return (SEL *)ERROR_PTR("sel not defined", procName, NULL); if ((csel = (SEL *)CALLOC(1, sizeof(SEL))) == NULL) return (SEL *)ERROR_PTR("csel not made", procName, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); csel->sy = sy; csel->sx = sx; csel->cy = cy; csel->cx = cx; if ((csel->data = create2dIntArray(sy, sx)) == NULL) return (SEL *)ERROR_PTR("sel data not made", procName, NULL); for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) csel->data[i][j] = sel->data[i][j]; if (sel->name) csel->name = stringNew(sel->name); return csel; } /*! * selCreateBrick() * * Input: height, width * cy, cx (origin, relative to UL corner at 0,0) * type (SEL_HIT, SEL_MISS, or SEL_DONT_CARE) * Return: sel, or null on error * * Notes: * (1) This is a rectangular sel of all hits, misses or don't cares. */ SEL * selCreateBrick(l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, l_int32 type) { l_int32 i, j; SEL *sel; PROCNAME("selCreateBrick"); if (h <= 0 || w <= 0) return (SEL *)ERROR_PTR("h and w must both be > 0", procName, NULL); if (type != SEL_HIT && type != SEL_MISS && type != SEL_DONT_CARE) return (SEL *)ERROR_PTR("invalid sel element type", procName, NULL); if ((sel = selCreate(h, w, NULL)) == NULL) return (SEL *)ERROR_PTR("sel not made", procName, NULL); selSetOrigin(sel, cy, cx); for (i = 0; i < h; i++) for (j = 0; j < w; j++) sel->data[i][j] = type; return sel; } /*! * selCreateComb() * * Input: factor1 (contiguous space between comb tines) * factor2 (number of comb tines) * direction (L_HORIZ, L_VERT) * Return: sel, or null on error * * Notes: * (1) This generates a comb Sel of hits with the origin as * near the center as possible. */ SEL * selCreateComb(l_int32 factor1, l_int32 factor2, l_int32 direction) { l_int32 i, size, z; SEL *sel; PROCNAME("selCreateComb"); if (factor1 < 1 || factor2 < 1) return (SEL *)ERROR_PTR("factors must be >= 1", procName, NULL); if (direction != L_HORIZ && direction != L_VERT) return (SEL *)ERROR_PTR("invalid direction", procName, NULL); size = factor1 * factor2; if (direction == L_HORIZ) { sel = selCreate(1, size, NULL); selSetOrigin(sel, 0, size / 2); } else { sel = selCreate(size, 1, NULL); selSetOrigin(sel, size / 2, 0); } for (i = 0; i < factor2; i++) { if (factor2 & 1) /* odd */ z = factor1 / 2 + i * factor1; else z = factor1 / 2 + i * factor1; /* fprintf(stderr, "i = %d, factor1 = %d, factor2 = %d, z = %d\n", i, factor1, factor2, z); */ if (direction == L_HORIZ) selSetElement(sel, 0, z, SEL_HIT); else selSetElement(sel, z, 0, SEL_HIT); } return sel; } /*! * create2dIntArray() * * Input: sy (rows == height) * sx (columns == width) * Return: doubly indexed array (i.e., an array of sy row pointers, * each of which points to an array of sx ints) * * Notes: * (1) The array[sy][sx] is indexed in standard "matrix notation", * with the row index first. */ l_int32 ** create2dIntArray(l_int32 sy, l_int32 sx) { l_int32 i; l_int32 **array; PROCNAME("create2dIntArray"); if ((array = (l_int32 **)CALLOC(sy, sizeof(l_int32 *))) == NULL) return (l_int32 **)ERROR_PTR("ptr array not made", procName, NULL); for (i = 0; i < sy; i++) { if ((array[i] = (l_int32 *)CALLOC(sx, sizeof(l_int32))) == NULL) return (l_int32 **)ERROR_PTR("array not made", procName, NULL); } return array; } /*------------------------------------------------------------------------* * Extension of sela * *------------------------------------------------------------------------*/ /*! * selaAddSel() * * Input: sela * sel to be added * selname (ignored if already defined in sel; * req'd in sel when added to a sela) * copyflag (for sel: 0 inserts, 1 copies) * Return: 0 if OK; 1 on error * * Notes: * (1) This adds a sel, either inserting or making a copy. * (2) Because every sel in a sela must have a name, it copies * the input name if necessary. You can input NULL for * selname if the sel already has a name. */ l_int32 selaAddSel(SELA *sela, SEL *sel, const char *selname, l_int32 copyflag) { l_int32 n; SEL *csel; PROCNAME("selaAddSel"); if (!sela) return ERROR_INT("sela not defined", procName, 1); if (!sel) return ERROR_INT("sel not defined", procName, 1); if (!sel->name && !selname) return ERROR_INT("added sel must have name", procName, 1); if (copyflag == TRUE) { if ((csel = selCopy(sel)) == NULL) return ERROR_INT("csel not made", procName, 1); } else { /* copyflag is false; insert directly */ csel = sel; } if (!csel->name) csel->name = stringNew(selname); n = selaGetCount(sela); if (n >= sela->nalloc) selaExtendArray(sela); sela->sel[n] = csel; sela->n++; return 0; } /*! * selaExtendArray() * * Input: sela * Return: 0 if OK; 1 on error */ static l_int32 selaExtendArray(SELA *sela) { PROCNAME("selaExtendArray"); if (!sela) return ERROR_INT("sela not defined", procName, 1); if ((sela->sel = (SEL **)reallocNew((void **)&sela->sel, sizeof(SEL *) * sela->nalloc, 2 * sizeof(SEL *) * sela->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); sela->nalloc = 2 * sela->nalloc; return 0; } /*----------------------------------------------------------------------* * Accessors * *----------------------------------------------------------------------*/ /*! * selaGetCount() * * Input: sela * Return: count, or 0 on error */ l_int32 selaGetCount(SELA *sela) { PROCNAME("selaGetCount"); if (!sela) return ERROR_INT("sela not defined", procName, 0); return sela->n; } /*! * selaGetSel() * * Input: sela * index of sel to be retrieved (not copied) * Return: sel, or null on error * * Notes: * (1) This returns a ptr to the sel, not a copy, so the caller * must not destroy it! */ SEL * selaGetSel(SELA *sela, l_int32 i) { PROCNAME("selaGetSel"); if (!sela) return (SEL *)ERROR_PTR("sela not defined", procName, NULL); if (i < 0 || i >= sela->n) return (SEL *)ERROR_PTR("invalid index", procName, NULL); return sela->sel[i]; } /*! * selGetName() * * Input: sel * Return: sel name (not copied), or null if no name or on error */ char * selGetName(SEL *sel) { PROCNAME("selGetName"); if (!sel) return (char *)ERROR_PTR("sel not defined", procName, NULL); return sel->name; } /*! * selSetName() * * Input: sel * name (; can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) Always frees the existing sel name, if defined. * (2) If name is not defined, just clears any existing sel name. */ l_int32 selSetName(SEL *sel, const char *name) { PROCNAME("selSetName"); if (!sel) return ERROR_INT("sel not defined", procName, 1); return stringReplace(&sel->name, name); } /*! * selaFindSelByName() * * Input: sela * sel name * &index () * &sel ( sel (not a copy)) * Return: 0 if OK; 1 on error */ l_int32 selaFindSelByName(SELA *sela, const char *name, l_int32 *pindex, SEL **psel) { l_int32 i, n; char *sname; SEL *sel; PROCNAME("selaFindSelByName"); if (pindex) *pindex = -1; if (psel) *psel = NULL; if (!sela) return ERROR_INT("sela not defined", procName, 1); n = selaGetCount(sela); for (i = 0; i < n; i++) { if ((sel = selaGetSel(sela, i)) == NULL) { L_WARNING("missing sel\n", procName); continue; } sname = selGetName(sel); if (sname && (!strcmp(name, sname))) { if (pindex) *pindex = i; if (psel) *psel = sel; return 0; } } return 1; } /*! * selGetElement() * * Input: sel * row * col * &type ( SEL_HIT, SEL_MISS, SEL_DONT_CARE) * Return: 0 if OK; 1 on error */ l_int32 selGetElement(SEL *sel, l_int32 row, l_int32 col, l_int32 *ptype) { PROCNAME("selGetElement"); if (!ptype) return ERROR_INT("&type not defined", procName, 1); *ptype = SEL_DONT_CARE; if (!sel) return ERROR_INT("sel not defined", procName, 1); if (row < 0 || row >= sel->sy) return ERROR_INT("sel row out of bounds", procName, 1); if (col < 0 || col >= sel->sx) return ERROR_INT("sel col out of bounds", procName, 1); *ptype = sel->data[row][col]; return 0; } /*! * selSetElement() * * Input: sel * row * col * type (SEL_HIT, SEL_MISS, SEL_DONT_CARE) * Return: 0 if OK; 1 on error * * Notes: * (1) Because we use row and column to index into an array, * they are always non-negative. The location of the origin * (and the type of operation) determine the actual * direction of the rasterop. */ l_int32 selSetElement(SEL *sel, l_int32 row, l_int32 col, l_int32 type) { PROCNAME("selSetElement"); if (!sel) return ERROR_INT("sel not defined", procName, 1); if (type != SEL_HIT && type != SEL_MISS && type != SEL_DONT_CARE) return ERROR_INT("invalid sel element type", procName, 1); if (row < 0 || row >= sel->sy) return ERROR_INT("sel row out of bounds", procName, 1); if (col < 0 || col >= sel->sx) return ERROR_INT("sel col out of bounds", procName, 1); sel->data[row][col] = type; return 0; } /*! * selGetParameters() * * Input: sel * &sy, &sx, &cy, &cx (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 selGetParameters(SEL *sel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx) { PROCNAME("selGetParameters"); if (psy) *psy = 0; if (psx) *psx = 0; if (pcy) *pcy = 0; if (pcx) *pcx = 0; if (!sel) return ERROR_INT("sel not defined", procName, 1); if (psy) *psy = sel->sy; if (psx) *psx = sel->sx; if (pcy) *pcy = sel->cy; if (pcx) *pcx = sel->cx; return 0; } /*! * selSetOrigin() * * Input: sel * cy, cx * Return: 0 if OK; 1 on error */ l_int32 selSetOrigin(SEL *sel, l_int32 cy, l_int32 cx) { PROCNAME("selSetOrigin"); if (!sel) return ERROR_INT("sel not defined", procName, 1); sel->cy = cy; sel->cx = cx; return 0; } /*! * selGetTypeAtOrigin() * * Input: sel * &type ( SEL_HIT, SEL_MISS, SEL_DONT_CARE) * Return: 0 if OK; 1 on error or if origin is not found */ l_int32 selGetTypeAtOrigin(SEL *sel, l_int32 *ptype) { l_int32 sx, sy, cx, cy, i, j; PROCNAME("selGetTypeAtOrigin"); if (!ptype) return ERROR_INT("&type not defined", procName, 1); *ptype = SEL_DONT_CARE; /* init */ if (!sel) return ERROR_INT("sel not defined", procName, 1); selGetParameters(sel, &sy, &sx, &cy, &cx); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { if (i == cy && j == cx) { selGetElement(sel, i, j, ptype); return 0; } } } return ERROR_INT("sel origin not found", procName, 1); } /*! * selaGetBrickName() * * Input: sela * hsize, vsize (of brick sel) * Return: sel name (new string), or null if no name or on error */ char * selaGetBrickName(SELA *sela, l_int32 hsize, l_int32 vsize) { l_int32 i, nsels, sx, sy; SEL *sel; PROCNAME("selaGetBrickName"); if (!sela) return (char *)ERROR_PTR("sela not defined", procName, NULL); nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selGetParameters(sel, &sy, &sx, NULL, NULL); if (hsize == sx && vsize == sy) return stringNew(selGetName(sel)); } return (char *)ERROR_PTR("sel not found", procName, NULL); } /*! * selaGetCombName() * * Input: sela * size (the product of sizes of the brick and comb parts) * direction (L_HORIZ, L_VERT) * Return: sel name (new string), or null if name not found or on error * * Notes: * (1) Combs are by definition 1-dimensional, either horiz or vert. * (2) Use this with comb Sels; e.g., from selaAddDwaCombs(). */ char * selaGetCombName(SELA *sela, l_int32 size, l_int32 direction) { char *selname; char combname[L_BUF_SIZE]; l_int32 i, nsels, sx, sy, found; SEL *sel; PROCNAME("selaGetCombName"); if (!sela) return (char *)ERROR_PTR("sela not defined", procName, NULL); if (direction != L_HORIZ && direction != L_VERT) return (char *)ERROR_PTR("invalid direction", procName, NULL); /* Derive the comb name we're looking for */ if (direction == L_HORIZ) snprintf(combname, L_BUF_SIZE, "sel_comb_%dh", size); else /* direction == L_VERT */ snprintf(combname, L_BUF_SIZE, "sel_comb_%dv", size); found = FALSE; nsels = selaGetCount(sela); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); selGetParameters(sel, &sy, &sx, NULL, NULL); if (sy != 1 && sx != 1) /* 2-D; not a comb */ continue; selname = selGetName(sel); if (!strcmp(selname, combname)) { found = TRUE; break; } } if (found) return stringNew(selname); else return (char *)ERROR_PTR("sel not found", procName, NULL); } /* --------- Function used to generate code in this file ---------- */ #if 0 static void selaComputeCompositeParameters(const char *fileout); /*! * selaComputeCompParameters() * * Input: output filename * Return: void * * Notes: * (1) This static function was used to construct the comp_parameter_map[] * array at the top of this file. It is static because it does * not need to be called again. It remains here to show how * the composite parameter map was computed. * (2) The output file was pasted directly into comp_parameter_map[]. * The composite parameter map is used to quickly determine * the linear decomposition parameters and sel names. */ static void selaComputeCompositeParameters(const char *fileout) { char *str, *nameh1, *nameh2, *namev1, *namev2; char buf[L_BUF_SIZE]; l_int32 size, size1, size2, len; SARRAY *sa; SELA *selabasic, *selacomb; selabasic = selaAddBasic(NULL); selacomb = selaAddDwaCombs(NULL); sa = sarrayCreate(64); for (size = 2; size < 64; size++) { selectComposableSizes(size, &size1, &size2); nameh1 = selaGetBrickName(selabasic, size1, 1); namev1 = selaGetBrickName(selabasic, 1, size1); if (size2 > 1) { nameh2 = selaGetCombName(selacomb, size1 * size2, L_HORIZ); namev2 = selaGetCombName(selacomb, size1 * size2, L_VERT); } else { nameh2 = stringNew(""); namev2 = stringNew(""); } snprintf(buf, L_BUF_SIZE, " { %d, %d, %d, \"%s\", \"%s\", \"%s\", \"%s\" },", size, size1, size2, nameh1, nameh2, namev1, namev2); sarrayAddString(sa, buf, L_COPY); FREE(nameh1); FREE(nameh2); FREE(namev1); FREE(namev2); } str = sarrayToString(sa, 1); len = strlen(str); l_binaryWrite(fileout, "w", str, len + 1); FREE(str); sarrayDestroy(&sa); selaDestroy(&selabasic); selaDestroy(&selacomb); return; } #endif /* -------------------------------------------------------------------- */ /*! * getCompositeParameters() * * Input: size * &size1 ( brick factor size) * &size2 ( comb factor size) * &nameh1 ( name of horiz brick) * &nameh2 ( name of horiz comb) * &namev1 ( name of vert brick) * &namev2 ( name of vert comb) * Return: 0 if OK, 1 on error * * Notes: * (1) This uses the big lookup table at the top of this file. * (2) All returned strings are copies that must be freed. */ l_int32 getCompositeParameters(l_int32 size, l_int32 *psize1, l_int32 *psize2, char **pnameh1, char **pnameh2, char **pnamev1, char **pnamev2) { l_int32 index; PROCNAME("selaGetSelnames"); if (psize1) *psize1 = 0; if (psize2) *psize2 = 0; if (pnameh1) *pnameh1 = NULL; if (pnameh2) *pnameh2 = NULL; if (pnamev1) *pnamev1 = NULL; if (pnamev2) *pnamev2 = NULL; if (size < 2 || size > 63) return ERROR_INT("valid size range is {2 ... 63}", procName, 1); index = size - 2; if (psize1) *psize1 = comp_parameter_map[index].size1; if (psize2) *psize2 = comp_parameter_map[index].size2; if (pnameh1) *pnameh1 = stringNew(comp_parameter_map[index].selnameh1); if (pnameh2) *pnameh2 = stringNew(comp_parameter_map[index].selnameh2); if (pnamev1) *pnamev1 = stringNew(comp_parameter_map[index].selnamev1); if (pnamev2) *pnamev2 = stringNew(comp_parameter_map[index].selnamev2); return 0; } /*! * selaGetSelnames() * * Input: sela * Return: sa (of all sel names), or null on error */ SARRAY * selaGetSelnames(SELA *sela) { char *selname; l_int32 i, n; SEL *sel; SARRAY *sa; PROCNAME("selaGetSelnames"); if (!sela) return (SARRAY *)ERROR_PTR("sela not defined", procName, NULL); if ((n = selaGetCount(sela)) == 0) return (SARRAY *)ERROR_PTR("no sels in sela", procName, NULL); if ((sa = sarrayCreate(n)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); for (i = 0; i < n; i++) { sel = selaGetSel(sela, i); selname = selGetName(sel); sarrayAddString(sa, selname, 1); } return sa; } /*----------------------------------------------------------------------* * Max translations for erosion and hmt * *----------------------------------------------------------------------*/ /*! * selFindMaxTranslations() * * Input: sel * &xp, &yp, &xn, &yn ( max shifts) * Return: 0 if OK; 1 on error * * Note: these are the maximum shifts for the erosion operation. * For example, when j < cx, the shift of the image * is +x to the cx. This is a positive xp shift. */ l_int32 selFindMaxTranslations(SEL *sel, l_int32 *pxp, l_int32 *pyp, l_int32 *pxn, l_int32 *pyn) { l_int32 sx, sy, cx, cy, i, j; l_int32 maxxp, maxyp, maxxn, maxyn; PROCNAME("selaFindMaxTranslations"); if (!pxp || !pyp || !pxn || !pyn) return ERROR_INT("&xp (etc) defined", procName, 1); *pxp = *pyp = *pxn = *pyn = 0; if (!sel) return ERROR_INT("sel not defined", procName, 1); selGetParameters(sel, &sy, &sx, &cy, &cx); maxxp = maxyp = maxxn = maxyn = 0; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { if (sel->data[i][j] == 1) { maxxp = L_MAX(maxxp, cx - j); maxyp = L_MAX(maxyp, cy - i); maxxn = L_MAX(maxxn, j - cx); maxyn = L_MAX(maxyn, i - cy); } } } *pxp = maxxp; *pyp = maxyp; *pxn = maxxn; *pyn = maxyn; return 0; } /*----------------------------------------------------------------------* * Rotation by multiples of 90 degrees * *----------------------------------------------------------------------*/ /*! * selRotateOrth() * * Input: sel * quads (0 - 4; number of 90 degree cw rotations) * Return: seld, or null on error */ SEL * selRotateOrth(SEL *sel, l_int32 quads) { l_int32 i, j, ni, nj, sx, sy, cx, cy, nsx, nsy, ncx, ncy, type; SEL *seld; PROCNAME("selRotateOrth"); if (!sel) return (SEL *)ERROR_PTR("sel not defined", procName, NULL); if (quads < 0 || quads > 4) return (SEL *)ERROR_PTR("quads not in {0,1,2,3,4}", procName, NULL); if (quads == 0 || quads == 4) return selCopy(sel); selGetParameters(sel, &sy, &sx, &cy, &cx); if (quads == 1) { /* 90 degrees cw */ nsx = sy; nsy = sx; ncx = sy - cy - 1; ncy = cx; } else if (quads == 2) { /* 180 degrees cw */ nsx = sx; nsy = sy; ncx = sx - cx - 1; ncy = sy - cy - 1; } else { /* 270 degrees cw */ nsx = sy; nsy = sx; ncx = cy; ncy = sx - cx - 1; } seld = selCreateBrick(nsy, nsx, ncy, ncx, SEL_DONT_CARE); if (sel->name) seld->name = stringNew(sel->name); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { selGetElement(sel, i, j, &type); if (quads == 1) { ni = j; nj = sy - i - 1; } else if (quads == 2) { ni = sy - i - 1; nj = sx - j - 1; } else { /* quads == 3 */ ni = sx - j - 1; nj = i; } selSetElement(seld, ni, nj, type); } } return seld; } /*----------------------------------------------------------------------* * Sela and Sel serialized I/O * *----------------------------------------------------------------------*/ /*! * selaRead() * * Input: filename * Return: sela, or null on error */ SELA * selaRead(const char *fname) { FILE *fp; SELA *sela; PROCNAME("selaRead"); if (!fname) return (SELA *)ERROR_PTR("fname not defined", procName, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (SELA *)ERROR_PTR("stream not opened", procName, NULL); if ((sela = selaReadStream(fp)) == NULL) return (SELA *)ERROR_PTR("sela not returned", procName, NULL); fclose(fp); return sela; } /*! * selaReadStream() * * Input: stream * Return: sela, or null on error */ SELA * selaReadStream(FILE *fp) { l_int32 i, n, version; SEL *sel; SELA *sela; PROCNAME("selaReadStream"); if (!fp) return (SELA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nSela Version %d\n", &version) != 1) return (SELA *)ERROR_PTR("not a sela file", procName, NULL); if (version != SEL_VERSION_NUMBER) return (SELA *)ERROR_PTR("invalid sel version", procName, NULL); if (fscanf(fp, "Number of Sels = %d\n\n", &n) != 1) return (SELA *)ERROR_PTR("not a sela file", procName, NULL); if ((sela = selaCreate(n)) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); sela->nalloc = n; for (i = 0; i < n; i++) { if ((sel = selReadStream(fp)) == NULL) return (SELA *)ERROR_PTR("sel not made", procName, NULL); selaAddSel(sela, sel, NULL, 0); } return sela; } /*! * selRead() * * Input: filename * Return: sel, or null on error */ SEL * selRead(const char *fname) { FILE *fp; SEL *sel; PROCNAME("selRead"); if (!fname) return (SEL *)ERROR_PTR("fname not defined", procName, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (SEL *)ERROR_PTR("stream not opened", procName, NULL); if ((sel = selReadStream(fp)) == NULL) return (SEL *)ERROR_PTR("sela not returned", procName, NULL); fclose(fp); return sel; } /*! * selReadStream() * * Input: stream * Return: sel, or null on error */ SEL * selReadStream(FILE *fp) { char *selname; char linebuf[L_BUF_SIZE]; l_int32 sy, sx, cy, cx, i, j, version, ignore; SEL *sel; PROCNAME("selReadStream"); if (!fp) return (SEL *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, " Sel Version %d\n", &version) != 1) return (SEL *)ERROR_PTR("not a sel file", procName, NULL); if (version != SEL_VERSION_NUMBER) return (SEL *)ERROR_PTR("invalid sel version", procName, NULL); if (fgets(linebuf, L_BUF_SIZE, fp) == NULL) return (SEL *)ERROR_PTR("error reading into linebuf", procName, NULL); selname = stringNew(linebuf); sscanf(linebuf, " ------ %s ------", selname); if (fscanf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", &sy, &sx, &cy, &cx) != 4) return (SEL *)ERROR_PTR("dimensions not read", procName, NULL); if ((sel = selCreate(sy, sx, selname)) == NULL) return (SEL *)ERROR_PTR("sel not made", procName, NULL); selSetOrigin(sel, cy, cx); for (i = 0; i < sy; i++) { ignore = fscanf(fp, " "); for (j = 0; j < sx; j++) ignore = fscanf(fp, "%1d", &sel->data[i][j]); ignore = fscanf(fp, "\n"); } ignore = fscanf(fp, "\n"); FREE(selname); return sel; } /*! * selaWrite() * * Input: filename * sela * Return: 0 if OK, 1 on error */ l_int32 selaWrite(const char *fname, SELA *sela) { FILE *fp; PROCNAME("selaWrite"); if (!fname) return ERROR_INT("fname not defined", procName, 1); if (!sela) return ERROR_INT("sela not defined", procName, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); selaWriteStream(fp, sela); fclose(fp); return 0; } /*! * selaWriteStream() * * Input: stream * sela * Return: 0 if OK, 1 on error */ l_int32 selaWriteStream(FILE *fp, SELA *sela) { l_int32 i, n; SEL *sel; PROCNAME("selaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!sela) return ERROR_INT("sela not defined", procName, 1); n = selaGetCount(sela); fprintf(fp, "\nSela Version %d\n", SEL_VERSION_NUMBER); fprintf(fp, "Number of Sels = %d\n\n", n); for (i = 0; i < n; i++) { if ((sel = selaGetSel(sela, i)) == NULL) continue; selWriteStream(fp, sel); } return 0; } /*! * selWrite() * * Input: filename * sel * Return: 0 if OK, 1 on error */ l_int32 selWrite(const char *fname, SEL *sel) { FILE *fp; PROCNAME("selWrite"); if (!fname) return ERROR_INT("fname not defined", procName, 1); if (!sel) return ERROR_INT("sel not defined", procName, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); selWriteStream(fp, sel); fclose(fp); return 0; } /*! * selWriteStream() * * Input: stream * sel * Return: 0 if OK, 1 on error */ l_int32 selWriteStream(FILE *fp, SEL *sel) { l_int32 sx, sy, cx, cy, i, j; PROCNAME("selWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!sel) return ERROR_INT("sel not defined", procName, 1); selGetParameters(sel, &sy, &sx, &cy, &cx); fprintf(fp, " Sel Version %d\n", SEL_VERSION_NUMBER); fprintf(fp, " ------ %s ------\n", selGetName(sel)); fprintf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", sy, sx, cy, cx); for (i = 0; i < sy; i++) { fprintf(fp, " "); for (j = 0; j < sx; j++) fprintf(fp, "%d", sel->data[i][j]); fprintf(fp, "\n"); } fprintf(fp, "\n"); return 0; } /*----------------------------------------------------------------------* * Building custom hit-miss sels from compiled strings * *----------------------------------------------------------------------*/ /*! * selCreateFromString() * * Input: text * height, width * name ( sel name; can be null) * Return: sel of the given size, or null on error * * Notes: * (1) The text is an array of chars (in row-major order) where * each char can be one of the following: * 'x': hit * 'o': miss * ' ': don't-care * (2) Use an upper case char to indicate the origin of the Sel. * When the origin falls on a don't-care, use 'C' as the uppecase * for ' '. * (3) The text can be input in a format that shows the 2D layout; e.g., * static const char *seltext = "x " * "x Oo " * "x " * "xxxxx"; */ SEL * selCreateFromString(const char *text, l_int32 h, l_int32 w, const char *name) { SEL *sel; l_int32 y, x; char ch; PROCNAME("selCreateFromString"); if (h < 1) return (SEL *)ERROR_PTR("height must be > 0", procName, NULL); if (w < 1) return (SEL *)ERROR_PTR("width must be > 0", procName, NULL); sel = selCreate(h, w, name); for (y = 0; y < h; ++y) { for (x = 0; x < w; ++x) { ch = *(text++); switch (ch) { case 'X': selSetOrigin(sel, y, x); case 'x': selSetElement(sel, y, x, SEL_HIT); break; case 'O': selSetOrigin(sel, y, x); case 'o': selSetElement(sel, y, x, SEL_MISS); break; case 'C': selSetOrigin(sel, y, x); case ' ': selSetElement(sel, y, x, SEL_DONT_CARE); break; case '\n': /* ignored */ continue; default: selDestroy(&sel); return (SEL *)ERROR_PTR("unknown char", procName, NULL); } } } return sel; } /*! * selPrintToString() * * Input: sel * Return: str (string; caller must free) * * Notes: * (1) This is an inverse function of selCreateFromString. * It prints a textual representation of the SEL to a malloc'd * string. The format is the same as selCreateFromString * except that newlines are inserted into the output * between rows. * (2) This is useful for debugging. However, if you want to * save some Sels in a file, put them in a Sela and write * them out with selaWrite(). They can then be read in * with selaRead(). */ char * selPrintToString(SEL *sel) { char is_center; char *str, *strptr; l_int32 type; l_int32 sx, sy, cx, cy, x, y; PROCNAME("selPrintToString"); if (!sel) return (char *)ERROR_PTR("sel not defined", procName, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); if ((str = (char *)CALLOC(1, sy * (sx + 1) + 1)) == NULL) return (char *)ERROR_PTR("calloc fail for str", procName, NULL); strptr = str; for (y = 0; y < sy; ++y) { for (x = 0; x < sx; ++x) { selGetElement(sel, y, x, &type); is_center = (x == cx && y == cy); switch (type) { case SEL_HIT: *(strptr++) = is_center ? 'X' : 'x'; break; case SEL_MISS: *(strptr++) = is_center ? 'O' : 'o'; break; case SEL_DONT_CARE: *(strptr++) = is_center ? 'C' : ' '; break; } } *(strptr++) = '\n'; } return str; } /*----------------------------------------------------------------------* * Building custom hit-miss sels from a simple file format * *----------------------------------------------------------------------*/ /*! * selaCreateFromFile() * * Input: filename * Return: sela, or null on error * * Notes: * (1) The file contains a sequence of Sel descriptions. * (2) Each Sel is formatted as follows: * - Any number of comment lines starting with '#' are ignored * - The next line contains the selname * - The next lines contain the Sel data. They must be * formatted similarly to the string format in * selCreateFromString(), with each line beginning and * ending with a double-quote, and showing the 2D layout. * - Each Sel ends when a blank line, a comment line, or * the end of file is reached. * (3) See selCreateFromString() for a description of the string * format for the Sel data. As an example, here are the lines * of is a valid file for a single Sel. In the file, all lines * are left-justified: * # diagonal sel * sel_5diag * "x " * " x " * " X " * " x " * " x" */ SELA * selaCreateFromFile(const char *filename) { char *filestr, *line; l_int32 i, n, first, last, nsel, insel; size_t nbytes; NUMA *nafirst, *nalast; SARRAY *sa; SEL *sel; SELA *sela; PROCNAME("selaCreateFromFile"); if (!filename) return (SELA *)ERROR_PTR("filename not defined", procName, NULL); filestr = (char *)l_binaryRead(filename, &nbytes); sa = sarrayCreateLinesFromString(filestr, 1); FREE(filestr); n = sarrayGetCount(sa); sela = selaCreate(0); /* Find the start and end lines for each Sel. * We allow the "blank" lines to be null strings or * to have standard whitespace (' ','\t',\'n') or be '#'. */ nafirst = numaCreate(0); nalast = numaCreate(0); insel = FALSE; for (i = 0; i < n; i++) { line = sarrayGetString(sa, i, L_NOCOPY); if (!insel && (line[0] != '\0' && line[0] != ' ' && line[0] != '\t' && line[0] != '\n' && line[0] != '#')) { numaAddNumber(nafirst, i); insel = TRUE; continue; } if (insel && (line[0] == '\0' || line[0] == ' ' || line[0] == '\t' || line[0] == '\n' || line[0] == '#')) { numaAddNumber(nalast, i - 1); insel = FALSE; continue; } } if (insel) /* fell off the end of the file */ numaAddNumber(nalast, n - 1); /* Extract sels */ nsel = numaGetCount(nafirst); for (i = 0; i < nsel; i++) { numaGetIValue(nafirst, i, &first); numaGetIValue(nalast, i, &last); if ((sel = selCreateFromSArray(sa, first, last)) == NULL) { fprintf(stderr, "Error reading sel from %d to %d\n", first, last); selaDestroy(&sela); sarrayDestroy(&sa); numaDestroy(&nafirst); numaDestroy(&nalast); return (SELA *)ERROR_PTR("bad sela file", procName, NULL); } selaAddSel(sela, sel, NULL, 0); } numaDestroy(&nafirst); numaDestroy(&nalast); sarrayDestroy(&sa); return sela; } /*! * selCreateFromSArray() * * Input: sa * first (line of sarray where Sel begins) * last (line of sarray where Sel ends) * Return: sela, or null on error * * Notes: * (1) The Sel contains the following lines: * - The first line is the selname * - The remaining lines contain the Sel data. They must * be formatted similarly to the string format in * selCreateFromString(), with each line beginning and * ending with a double-quote, and showing the 2D layout. * - 'last' gives the last line in the Sel data. * (2) See selCreateFromString() for a description of the string * format for the Sel data. As an example, here are the lines * of is a valid file for a single Sel. In the file, all lines * are left-justified: * # diagonal sel * sel_5diag * "x " * " x " * " X " * " x " * " x" */ static SEL * selCreateFromSArray(SARRAY *sa, l_int32 first, l_int32 last) { char ch; char *name, *line; l_int32 n, len, i, w, h, y, x; SEL *sel; PROCNAME("selCreateFromSArray"); if (!sa) return (SEL *)ERROR_PTR("sa not defined", procName, NULL); n = sarrayGetCount(sa); if (first < 0 || first >= n || last <= first || last >= n) return (SEL *)ERROR_PTR("invalid range", procName, NULL); name = sarrayGetString(sa, first, L_NOCOPY); h = last - first; line = sarrayGetString(sa, first + 1, L_NOCOPY); len = strlen(line); if (line[0] != '"' || line[len - 1] != '"') return (SEL *)ERROR_PTR("invalid format", procName, NULL); w = len - 2; if ((sel = selCreate(h, w, name)) == NULL) return (SEL *)ERROR_PTR("sel not made", procName, NULL); for (i = first + 1; i <= last; i++) { line = sarrayGetString(sa, i, L_NOCOPY); y = i - first - 1; for (x = 0; x < w; ++x) { ch = line[x + 1]; /* skip the leading double-quote */ switch (ch) { case 'X': selSetOrigin(sel, y, x); case 'x': selSetElement(sel, y, x, SEL_HIT); break; case 'O': selSetOrigin(sel, y, x); case 'o': selSetElement(sel, y, x, SEL_MISS); break; case 'C': selSetOrigin(sel, y, x); case ' ': selSetElement(sel, y, x, SEL_DONT_CARE); break; default: selDestroy(&sel); return (SEL *)ERROR_PTR("unknown char", procName, NULL); } } } return sel; } /*----------------------------------------------------------------------* * Making hit-only SELs from Pta and Pix * *----------------------------------------------------------------------*/ /*! * selCreateFromPta() * * Input: pta * cy, cx (origin of sel) * name ( sel name; can be null) * Return: sel (of minimum required size), or null on error * * Notes: * (1) The origin and all points in the pta must be positive. */ SEL * selCreateFromPta(PTA *pta, l_int32 cy, l_int32 cx, const char *name) { l_int32 i, n, x, y, w, h; BOX *box; SEL *sel; PROCNAME("selCreateFromPta"); if (!pta) return (SEL *)ERROR_PTR("pta not defined", procName, NULL); if (cy < 0 || cx < 0) return (SEL *)ERROR_PTR("(cy, cx) not both >= 0", procName, NULL); n = ptaGetCount(pta); if (n == 0) return (SEL *)ERROR_PTR("no pts in pta", procName, NULL); box = ptaGetBoundingRegion(pta); boxGetGeometry(box, &x, &y, &w, &h); boxDestroy(&box); if (x < 0 || y < 0) return (SEL *)ERROR_PTR("not all x and y >= 0", procName, NULL); sel = selCreate(y + h, x + w, name); selSetOrigin(sel, cy, cx); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); selSetElement(sel, y, x, SEL_HIT); } return sel; } /*! * selCreateFromPix() * * Input: pix * cy, cx (origin of sel) * name ( sel name; can be null) * Return: sel, or null on error * * Notes: * (1) The origin must be positive. */ SEL * selCreateFromPix(PIX *pix, l_int32 cy, l_int32 cx, const char *name) { SEL *sel; l_int32 i, j, w, h, d; l_uint32 val; PROCNAME("selCreateFromPix"); if (!pix) return (SEL *)ERROR_PTR("pix not defined", procName, NULL); if (cy < 0 || cx < 0) return (SEL *)ERROR_PTR("(cy, cx) not both >= 0", procName, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 1) return (SEL *)ERROR_PTR("pix not 1 bpp", procName, NULL); sel = selCreate(h, w, name); selSetOrigin(sel, cy, cx); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pix, j, i, &val); if (val) selSetElement(sel, i, j, SEL_HIT); } } return sel; } /*----------------------------------------------------------------------* * Making hit-miss sels from color Pix and image files * *----------------------------------------------------------------------*/ /*! * * selReadFromColorImage() * * Input: pathname * Return: sel if OK; null on error * * Notes: * (1) Loads an image from a file and creates a (hit-miss) sel. * (2) The sel name is taken from the pathname without the directory * and extension. */ SEL * selReadFromColorImage(const char *pathname) { PIX *pix; SEL *sel; char *basename, *selname; PROCNAME("selReadFromColorImage"); splitPathAtExtension (pathname, &basename, NULL); splitPathAtDirectory (basename, NULL, &selname); FREE(basename); if ((pix = pixRead(pathname)) == NULL) return (SEL *)ERROR_PTR("pix not returned", procName, NULL); if ((sel = selCreateFromColorPix(pix, selname)) == NULL) return (SEL *)ERROR_PTR("sel not made", procName, NULL); FREE(selname); pixDestroy(&pix); return sel; } /*! * * selCreateFromColorPix() * * Input: pixs (cmapped or rgb) * selname ( sel name; can be null) * Return: sel if OK, null on error * * Notes: * (1) The sel size is given by the size of pixs. * (2) In pixs, hits are represented by green pixels, misses by red * pixels, and don't-cares by white pixels. * (3) In pixs, there may be no misses, but there must be at least 1 hit. * (4) At most there can be only one origin pixel, which is optionally * specified by using a lower-intensity pixel: * if a hit: dark green * if a miss: dark red * if a don't care: gray * If there is no such pixel, the origin defaults to the approximate * center of the sel. */ SEL * selCreateFromColorPix(PIX *pixs, char *selname) { PIXCMAP *cmap; SEL *sel; l_int32 hascolor, hasorigin, nohits; l_int32 w, h, d, i, j, red, green, blue; l_uint32 pixval; PROCNAME("selCreateFromColorPix"); if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); hascolor = FALSE; cmap = pixGetColormap(pixs); if (cmap) pixcmapHasColor(cmap, &hascolor); pixGetDimensions(pixs, &w, &h, &d); if (hascolor == FALSE && d != 32) return (SEL *)ERROR_PTR("pixs has no color", procName, NULL); if ((sel = selCreate (h, w, NULL)) == NULL) return (SEL *)ERROR_PTR ("sel not made", procName, NULL); selSetOrigin (sel, h / 2, w / 2); selSetName(sel, selname); hasorigin = FALSE; nohits = TRUE; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel (pixs, j, i, &pixval); if (cmap) { pixcmapGetColor (cmap, pixval, &red, &green, &blue); } else { red = GET_DATA_BYTE (&pixval, COLOR_RED); green = GET_DATA_BYTE (&pixval, COLOR_GREEN); blue = GET_DATA_BYTE (&pixval, COLOR_BLUE); } if (red < 255 && green < 255 && blue < 255) { if (hasorigin) L_WARNING("multiple origins in sel image\n", procName); selSetOrigin (sel, i, j); hasorigin = TRUE; } if (!red && green && !blue) { nohits = FALSE; selSetElement (sel, i, j, SEL_HIT); } else if (red && !green && !blue) { selSetElement (sel, i, j, SEL_MISS); } else if (red && green && blue) { selSetElement (sel, i, j, SEL_DONT_CARE); } else { selDestroy(&sel); return (SEL *)ERROR_PTR("invalid color", procName, NULL); } } } if (nohits) { selDestroy(&sel); return (SEL *)ERROR_PTR("no hits in sel", procName, NULL); } return sel; } /*----------------------------------------------------------------------* * Printable display of sel * *----------------------------------------------------------------------*/ /*! * selDisplayInPix() * * Input: sel * size (of grid interiors; odd; minimum size of 13 is enforced) * gthick (grid thickness; minimum size of 2 is enforced) * Return: pix (display of sel), or null on error * * Notes: * (1) This gives a visual representation of a general (hit-miss) sel. * (2) The empty sel is represented by a grid of intersecting lines. * (3) Three different patterns are generated for the sel elements: * - hit (solid black circle) * - miss (black ring; inner radius is radius2) * - origin (cross, XORed with whatever is there) */ PIX * selDisplayInPix(SEL *sel, l_int32 size, l_int32 gthick) { l_int32 i, j, w, h, sx, sy, cx, cy, type, width; l_int32 radius1, radius2, shift1, shift2, x0, y0; PIX *pixd, *pix2, *pixh, *pixm, *pixorig; PTA *pta1, *pta2, *pta1t, *pta2t; PROCNAME("selDisplayInPix"); if (!sel) return (PIX *)ERROR_PTR("sel not defined", procName, NULL); if (size < 13) { L_WARNING("size < 13; setting to 13\n", procName); size = 13; } if (size % 2 == 0) size++; if (gthick < 2) { L_WARNING("grid thickness < 2; setting to 2\n", procName); gthick = 2; } selGetParameters(sel, &sy, &sx, &cy, &cx); w = size * sx + gthick * (sx + 1); h = size * sy + gthick * (sy + 1); pixd = pixCreate(w, h, 1); /* Generate grid lines */ for (i = 0; i <= sy; i++) pixRenderLine(pixd, 0, gthick / 2 + i * (size + gthick), w - 1, gthick / 2 + i * (size + gthick), gthick, L_SET_PIXELS); for (j = 0; j <= sx; j++) pixRenderLine(pixd, gthick / 2 + j * (size + gthick), 0, gthick / 2 + j * (size + gthick), h - 1, gthick, L_SET_PIXELS); /* Generate hit and miss patterns */ radius1 = (l_int32)(0.85 * ((size - 1) / 2) + 0.5); /* of hit */ radius2 = (l_int32)(0.65 * ((size - 1) / 2) + 0.5); /* inner miss radius */ pta1 = generatePtaFilledCircle(radius1); pta2 = generatePtaFilledCircle(radius2); shift1 = (size - 1) / 2 - radius1; /* center circle in square */ shift2 = (size - 1) / 2 - radius2; pta1t = ptaTransform(pta1, shift1, shift1, 1.0, 1.0); pta2t = ptaTransform(pta2, shift2, shift2, 1.0, 1.0); pixh = pixGenerateFromPta(pta1t, size, size); /* hits */ pix2 = pixGenerateFromPta(pta2t, size, size); pixm = pixSubtract(NULL, pixh, pix2); /* Generate crossed lines for origin pattern */ pixorig = pixCreate(size, size, 1); width = size / 8; pixRenderLine(pixorig, size / 2, (l_int32)(0.12 * size), size / 2, (l_int32)(0.88 * size), width, L_SET_PIXELS); pixRenderLine(pixorig, (l_int32)(0.15 * size), size / 2, (l_int32)(0.85 * size), size / 2, width, L_FLIP_PIXELS); pixRasterop(pixorig, size / 2 - width, size / 2 - width, 2 * width, 2 * width, PIX_NOT(PIX_DST), NULL, 0, 0); /* Specialize origin pattern for this sel */ selGetTypeAtOrigin(sel, &type); if (type == SEL_HIT) pixXor(pixorig, pixorig, pixh); else if (type == SEL_MISS) pixXor(pixorig, pixorig, pixm); /* Paste the patterns in */ y0 = gthick; for (i = 0; i < sy; i++) { x0 = gthick; for (j = 0; j < sx; j++) { selGetElement(sel, i, j, &type); if (i == cy && j == cx) /* origin */ pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixorig, 0, 0); else if (type == SEL_HIT) pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixh, 0, 0); else if (type == SEL_MISS) pixRasterop(pixd, x0, y0, size, size, PIX_SRC, pixm, 0, 0); x0 += size + gthick; } y0 += size + gthick; } pixDestroy(&pix2); pixDestroy(&pixh); pixDestroy(&pixm); pixDestroy(&pixorig); ptaDestroy(&pta1); ptaDestroy(&pta1t); ptaDestroy(&pta2); ptaDestroy(&pta2t); return pixd; } /*! * selaDisplayInPix() * * Input: sela * size (of grid interiors; odd; minimum size of 13 is enforced) * gthick (grid thickness; minimum size of 2 is enforced) * spacing (between sels, both horizontally and vertically) * ncols (number of sels per "line") * Return: pix (display of all sels in sela), or null on error * * Notes: * (1) This gives a visual representation of all the sels in a sela. * (2) See notes in selDisplayInPix() for display params of each sel. * (3) This gives the nicest results when all sels in the sela * are the same size. */ PIX * selaDisplayInPix(SELA *sela, l_int32 size, l_int32 gthick, l_int32 spacing, l_int32 ncols) { l_int32 nsels, i, w, width; PIX *pixt, *pixd; PIXA *pixa; SEL *sel; PROCNAME("selaDisplayInPix"); if (!sela) return (PIX *)ERROR_PTR("sela not defined", procName, NULL); if (size < 13) { L_WARNING("size < 13; setting to 13\n", procName); size = 13; } if (size % 2 == 0) size++; if (gthick < 2) { L_WARNING("grid thickness < 2; setting to 2\n", procName); gthick = 2; } if (spacing < 5) { L_WARNING("spacing < 5; setting to 5\n", procName); spacing = 5; } /* Accumulate the pix of each sel */ nsels = selaGetCount(sela); pixa = pixaCreate(nsels); for (i = 0; i < nsels; i++) { sel = selaGetSel(sela, i); pixt = selDisplayInPix(sel, size, gthick); pixaAddPix(pixa, pixt, L_INSERT); } /* Find the tiled output width, using just the first * ncols pix in the pixa. If all pix have the same width, * they will align properly in columns. */ width = 0; ncols = L_MIN(nsels, ncols); for (i = 0; i < ncols; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, NULL, NULL); width += w; pixDestroy(&pixt); } width += (ncols + 1) * spacing; /* add spacing all around as well */ pixd = pixaDisplayTiledInRows(pixa, 1, width, 1.0, 0, spacing, 0); pixaDestroy(&pixa); return pixd; } leptonica-1.70/src/queue.c0000640000175000017500000002263112244230053013557 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * queue.c * * Create/Destroy L_Queue * L_QUEUE *lqueueCreate() * void *lqueueDestroy() * * Operations to add/remove to/from a L_Queue * l_int32 lqueueAdd() * static l_int32 lqueueExtendArray() * void *lqueueRemove() * * Accessors * l_int32 lqueueGetCount() * * Debug output * l_int32 lqueuePrint() * * The lqueue is a fifo that implements a queue of void* pointers. * It can be used to hold a queue of any type of struct. * Internally, it maintains two counters: * nhead: location of head (in ptrs) from the beginning * of the buffer * nelem: number of ptr elements stored in the queue * As items are added to the queue, nelem increases. * As items are removed, nhead increases and nelem decreases. * Any time the tail reaches the end of the allocated buffer, * all the pointers are shifted to the left, so that the head * is at the beginning of the array. * If the buffer becomes more than 3/4 full, it doubles in size. * * [A circular queue would allow us to skip the shifting and * to resize only when the buffer is full. For most applications, * the extra work we do for a linear queue is not significant.] */ #include #include "allheaders.h" static const l_int32 MIN_BUFFER_SIZE = 20; /* n'importe quoi */ static const l_int32 INITIAL_BUFFER_ARRAYSIZE = 1024; /* n'importe quoi */ /* Static function */ static l_int32 lqueueExtendArray(L_QUEUE *lq); /*--------------------------------------------------------------------------* * L_Queue create/destroy * *--------------------------------------------------------------------------*/ /*! * lqueueCreate() * * Input: size of ptr array to be alloc'd (0 for default) * Return: lqueue, or null on error * * Notes: * (1) Allocates a ptr array of given size, and initializes counters. */ L_QUEUE * lqueueCreate(l_int32 nalloc) { L_QUEUE *lq; PROCNAME("lqueueCreate"); if (nalloc < MIN_BUFFER_SIZE) nalloc = INITIAL_BUFFER_ARRAYSIZE; if ((lq = (L_QUEUE *)CALLOC(1, sizeof(L_QUEUE))) == NULL) return (L_QUEUE *)ERROR_PTR("lq not made", procName, NULL); if ((lq->array = (void **)CALLOC(nalloc, sizeof(void *))) == NULL) return (L_QUEUE *)ERROR_PTR("ptr array not made", procName, NULL); lq->nalloc = nalloc; lq->nhead = lq->nelem = 0; return lq; } /*! * lqueueDestroy() * * Input: &lqueue () * freeflag (TRUE to free each remaining struct in the array) * Return: void * * Notes: * (1) If freeflag is TRUE, frees each struct in the array. * (2) If freeflag is FALSE but there are elements on the array, * gives a warning and destroys the array. This will * cause a memory leak of all the items that were on the queue. * So if the items require their own destroy function, they * must be destroyed before the queue. The same applies to the * auxiliary stack, if it is used. * (3) To destroy the L_Queue, we destroy the ptr array, then * the lqueue, and then null the contents of the input ptr. */ void lqueueDestroy(L_QUEUE **plq, l_int32 freeflag) { void *item; L_QUEUE *lq; PROCNAME("lqueueDestroy"); if (plq == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((lq = *plq) == NULL) return; if (freeflag) { while(lq->nelem > 0) { item = lqueueRemove(lq); FREE(item); } } else if (lq->nelem > 0) { L_WARNING("memory leak of %d items in lqueue!\n", procName, lq->nelem); } if (lq->array) FREE(lq->array); if (lq->stack) lstackDestroy(&lq->stack, freeflag); FREE(lq); *plq = NULL; return; } /*--------------------------------------------------------------------------* * Accessors * *--------------------------------------------------------------------------*/ /*! * lqueueAdd() * * Input: lqueue * item to be added to the tail of the queue * Return: 0 if OK, 1 on error * * Notes: * (1) The algorithm is as follows. If the queue is populated * to the end of the allocated array, shift all ptrs toward * the beginning of the array, so that the head of the queue * is at the beginning of the array. Then, if the array is * more than 0.75 full, realloc with double the array size. * Finally, add the item to the tail of the queue. */ l_int32 lqueueAdd(L_QUEUE *lq, void *item) { PROCNAME("lqueueAdd"); if (!lq) return ERROR_INT("lq not defined", procName, 1); if (!item) return ERROR_INT("item not defined", procName, 1); /* If filled to the end and the ptrs can be shifted to the left, * shift them. */ if ((lq->nhead + lq->nelem >= lq->nalloc) && (lq->nhead != 0)) { memmove(lq->array, lq->array + lq->nhead, sizeof(void *) * lq->nelem); lq->nhead = 0; } /* If necessary, expand the allocated array by a factor of 2 */ if (lq->nelem > 0.75 * lq->nalloc) lqueueExtendArray(lq); /* Now add the item */ lq->array[lq->nhead + lq->nelem] = (void *)item; lq->nelem++; return 0; } /*! * lqueueExtendArray() * * Input: lqueue * Return: 0 if OK, 1 on error */ static l_int32 lqueueExtendArray(L_QUEUE *lq) { PROCNAME("lqueueExtendArray"); if (!lq) return ERROR_INT("lq not defined", procName, 1); if ((lq->array = (void **)reallocNew((void **)&lq->array, sizeof(void *) * lq->nalloc, 2 * sizeof(void *) * lq->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); lq->nalloc = 2 * lq->nalloc; return 0; } /*! * lqueueRemove() * * Input: lqueue * Return: ptr to item popped from the head of the queue, * or null if the queue is empty or on error * * Notes: * (1) If this is the last item on the queue, so that the queue * becomes empty, nhead is reset to the beginning of the array. */ void * lqueueRemove(L_QUEUE *lq) { void *item; PROCNAME("lqueueRemove"); if (!lq) return (void *)ERROR_PTR("lq not defined", procName, NULL); if (lq->nelem == 0) return NULL; item = lq->array[lq->nhead]; lq->array[lq->nhead] = NULL; if (lq->nelem == 1) lq->nhead = 0; /* reset head ptr */ else (lq->nhead)++; /* can't go off end of array because nelem > 1 */ lq->nelem--; return item; } /*! * lqueueGetCount() * * Input: lqueue * Return: count, or 0 on error */ l_int32 lqueueGetCount(L_QUEUE *lq) { PROCNAME("lqueueGetCount"); if (!lq) return ERROR_INT("lq not defined", procName, 0); return lq->nelem; } /*---------------------------------------------------------------------* * Debug output * *---------------------------------------------------------------------*/ /*! * lqueuePrint() * * Input: stream * lqueue * Return: 0 if OK; 1 on error */ l_int32 lqueuePrint(FILE *fp, L_QUEUE *lq) { l_int32 i; PROCNAME("lqueuePrint"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!lq) return ERROR_INT("lq not defined", procName, 1); fprintf(fp, "\n L_Queue: nalloc = %d, nhead = %d, nelem = %d, array = %p\n", lq->nalloc, lq->nhead, lq->nelem, lq->array); for (i = lq->nhead; i < lq->nhead + lq->nelem; i++) fprintf(fp, "array[%d] = %p\n", i, lq->array[i]); return 0; } leptonica-1.70/src/endiantest.c0000644000175000017500000000406412041070110014564 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * endiantest.c * * This test was contributed by Bill Janssen. When used with the * gnu compiler, it allows efficient computation of the endian * flag as part of the normal compilation process. As a result, * it is not necessary to set this flag either manually or * through the configure Makefile generator. */ #include int main() { /* fprintf(stderr, "doing the test\n"); */ long v = 0x04030201; if (*((unsigned char *)(&v)) == 0x04) printf("L_BIG_ENDIAN\n"); else printf("L_LITTLE_ENDIAN\n"); return 0; } leptonica-1.70/src/warper.c0000644000175000017500000014644412244232020013744 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * warper.c * * High-level captcha interface * PIX *pixSimpleCaptcha() * * Random sinusoidal warping * PIX *pixRandomHarmonicWarp() * * Helper functions * static l_float64 *generateRandomNumberArray() * static l_int32 applyWarpTransform() * * Version using a LUT for sin * PIX *pixRandomHarmonicWarpLUT() * static l_int32 applyWarpTransformLUT() * static l_int32 makeSinLUT() * static l_float32 getSinFromLUT() * * Stereoscopic warping * PIX *pixWarpStereoscopic() * * Linear and quadratic horizontal stretching * PIX *pixStretchHorizontal() * PIX *pixStretchHorizontalSampled() * PIX *pixStretchHorizontalLI() * * Quadratic vertical shear * PIX *pixQuadraticVShear() * PIX *pixQuadraticVShearSampled() * PIX *pixQuadraticVShearLI() * * Stereo from a pair of images * PIX *pixStereoFromPair() */ #include #include "allheaders.h" static l_float64 *generateRandomNumberArray(l_int32 size); static l_int32 applyWarpTransform(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *px, l_float32 *py); #define USE_SIN_TABLE 0 /* Suggested input to pixStereoFromPair(). These are weighting * factors for input to the red channel from the left image. */ static const l_float32 L_DEFAULT_RED_WEIGHT = 0.0; static const l_float32 L_DEFAULT_GREEN_WEIGHT = 0.7; static const l_float32 L_DEFAULT_BLUE_WEIGHT = 0.3; /*----------------------------------------------------------------------* * High-level example captcha interface * *----------------------------------------------------------------------*/ /*! * pixSimpleCaptcha() * * Input: pixs (8 bpp; no colormap) * border (added white pixels on each side) * nterms (number of x and y harmonic terms) * seed (of random number generator) * color (for colorizing; in 0xrrggbb00 format; use 0 for black) * cmapflag (1 for colormap output; 0 for rgb) * Return: pixd (8 bpp cmap or 32 bpp rgb), or null on error * * Notes: * (1) This uses typical default values for generating captchas. * The magnitudes of the harmonic warp are typically to be * smaller when more terms are used, even though the phases * are random. See, for example, prog/warptest.c. */ PIX * pixSimpleCaptcha(PIX *pixs, l_int32 border, l_int32 nterms, l_uint32 seed, l_uint32 color, l_int32 cmapflag) { l_int32 k; l_float32 xmag[] = {7.0, 5.0, 4.0, 3.0}; l_float32 ymag[] = {10.0, 8.0, 6.0, 5.0}; l_float32 xfreq[] = {0.12, 0.10, 0.10, 0.11}; l_float32 yfreq[] = {0.15, 0.13, 0.13, 0.11}; PIX *pixg, *pixgb, *pixw, *pixd; PROCNAME("pixSimpleCaptcha"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (nterms < 1 || nterms > 4) return (PIX *)ERROR_PTR("nterms must be in {1,2,3,4}", procName, NULL); k = nterms - 1; pixg = pixConvertTo8(pixs, 0); pixgb = pixAddBorder(pixg, border, 255); pixw = pixRandomHarmonicWarp(pixgb, xmag[k], ymag[k], xfreq[k], yfreq[k], nterms, nterms, seed, 255); pixd = pixColorizeGray(pixw, color, cmapflag); pixDestroy(&pixg); pixDestroy(&pixgb); pixDestroy(&pixw); return pixd; } /*----------------------------------------------------------------------* * Random sinusoidal warping * *----------------------------------------------------------------------*/ /*! * pixRandomHarmonicWarp() * * Input: pixs (8 bpp; no colormap) * xmag, ymag (maximum magnitude of x and y distortion) * xfreq, yfreq (maximum magnitude of x and y frequency) * nx, ny (number of x and y harmonic terms) * seed (of random number generator) * grayval (color brought in from the outside; * 0 for black, 255 for white) * Return: pixd (8 bpp; no colormap), or null on error * * Notes: * (1) To generate the warped image p(x',y'), set up the transforms * that are in getWarpTransform(). For each (x',y') in the * dest, the warp function computes the originating location * (x, y) in the src. The differences (x - x') and (y - y') * are given as a sum of products of sinusoidal terms. Each * term is multiplied by a maximum amplitude (in pixels), and the * angle is determined by a frequency and phase, and depends * on the (x', y') value of the dest. Random numbers with * a variable input seed are used to allow the warping to be * unpredictable. A linear interpolation is used to find * the value for the source at (x, y); this value is written * into the dest. * (2) This can be used to generate 'captcha's, which are somewhat * randomly distorted images of text. A typical set of parameters * for a captcha are: * xmag = 4.0 ymag = 6.0 * xfreq = 0.10 yfreq = 0.13 * nx = 3 ny = 3 * Other examples can be found in prog/warptest.c. */ PIX * pixRandomHarmonicWarp(PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval) { l_int32 w, h, d, i, j, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; l_float64 *randa; PIX *pixd; PROCNAME("pixRandomHarmonicWarp"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); /* Compute filter output at each location. We iterate over * the destination pixels. For each dest pixel, use the * warp function to compute the four source pixels that * contribute, at the location (x, y). Each source pixel * is divided into 16 x 16 subpixels to get an approximate value. */ srand(seed); randa = generateRandomNumberArray(5 * (nx + ny)); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { applyWarpTransform(xmag, ymag, xfreq, yfreq, randa, nx, ny, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } FREE(randa); return pixd; } /*----------------------------------------------------------------------* * Static helper functions * *----------------------------------------------------------------------*/ static l_float64 * generateRandomNumberArray(l_int32 size) { l_int32 i; l_float64 *randa; PROCNAME("generateRandomNumberArray"); if ((randa = (l_float64 *)CALLOC(size, sizeof(l_float64))) == NULL) return (l_float64 *)ERROR_PTR("calloc fail for randa", procName, NULL); /* Return random values between 0.5 and 1.0 */ for (i = 0; i < size; i++) randa[i] = 0.5 * (1.0 + (l_float64)rand() / (l_float64)RAND_MAX); return randa; } /*! * applyWarpTransform() * * Notes: * (1) Uses the internal sin function. */ static l_int32 applyWarpTransform(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *px, l_float32 *py) { l_int32 i; l_float64 twopi, x, y, anglex, angley; twopi = 6.283185; for (i = 0, x = xp; i < nx; i++) { anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2]; angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4]; x += xmag * randa[3 * i] * sin(anglex) * sin(angley); } for (i = nx, y = yp; i < nx + ny; i++) { angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2]; anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4]; y += ymag * randa[3 * i] * sin(angley) * sin(anglex); } *px = (l_float32)x; *py = (l_float32)y; return 0; } #if USE_SIN_TABLE /*----------------------------------------------------------------------* * Version using a LUT for sin * *----------------------------------------------------------------------*/ static l_int32 applyWarpTransformLUT(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *lut, l_int32 npts, l_float32 *px, l_float32 *py); static l_int32 makeSinLUT(l_int32 npts, NUMA **pna); static l_float32 getSinFromLUT(l_float32 *tab, l_int32 npts, l_float32 radang); /*! * pixRandomHarmonicWarpLUT() * * Input: pixs (8 bpp; no colormap) * xmag, ymag (maximum magnitude of x and y distortion) * xfreq, yfreq (maximum magnitude of x and y frequency) * nx, ny (number of x and y harmonic terms) * seed (of random number generator) * grayval (color brought in from the outside; * 0 for black, 255 for white) * Return: pixd (8 bpp; no colormap), or null on error * * Notes: * (1) See notes and inline comments in pixRandomHarmonicWarp(). * This version uses a LUT for the sin function. It is not * appreciably faster than using the built-in sin function, * and is here for comparison only. */ PIX * pixRandomHarmonicWarpLUT(PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval) { l_int32 w, h, d, i, j, wpls, wpld, val, npts; l_uint32 *datas, *datad, *lined; l_float32 x, y; l_float32 *lut; l_float64 *randa; NUMA *na; PIX *pixd; PROCNAME("pixRandomHarmonicWarp"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); /* Compute filter output at each location. We iterate over * the destination pixels. For each dest pixel, use the * warp function to compute the four source pixels that * contribute, at the location (x, y). Each source pixel * is divided into 16 x 16 subpixels to get an approximate value. */ srand(seed); randa = generateRandomNumberArray(5 * (nx + ny)); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); npts = 100; makeSinLUT(npts, &na); lut = numaGetFArray(na, L_NOCOPY); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { applyWarpTransformLUT(xmag, ymag, xfreq, yfreq, randa, nx, ny, j, i, lut, npts, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } numaDestroy(&na); FREE(randa); return pixd; } /*! * applyWarpTransformLUT() * * Notes: * (1) Uses an LUT for computing sin(theta). There is little speed * advantage to using the LUT. */ static l_int32 applyWarpTransformLUT(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *lut, l_int32 npts, l_float32 *px, l_float32 *py) { l_int32 i; l_float64 twopi, x, y, anglex, angley, sanglex, sangley; twopi = 6.283185; for (i = 0, x = xp; i < nx; i++) { anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2]; angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4]; sanglex = getSinFromLUT(lut, npts, anglex); sangley = getSinFromLUT(lut, npts, angley); x += xmag * randa[3 * i] * sanglex * sangley; } for (i = nx, y = yp; i < nx + ny; i++) { angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2]; anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4]; sanglex = getSinFromLUT(lut, npts, anglex); sangley = getSinFromLUT(lut, npts, angley); y += ymag * randa[3 * i] * sangley * sanglex; } *px = (l_float32)x; *py = (l_float32)y; return 0; } static l_int32 makeSinLUT(l_int32 npts, NUMA **pna) { l_int32 i, n; l_float32 delx, fval; NUMA *na; PROCNAME("makeSinLUT"); if (!pna) return ERROR_INT("&na not defined", procName, 1); *pna = NULL; if (npts < 2) return ERROR_INT("npts < 2", procName, 1); n = 2 * npts + 1; na = numaCreate(n); *pna = na; delx = 3.14159265 / (l_float32)npts; numaSetParameters(na, 0.0, delx); for (i = 0; i < n / 2; i++) numaAddNumber(na, (l_float32)sin((l_float64)i * delx)); for (i = 0; i < n / 2; i++) { numaGetFValue(na, i, &fval); numaAddNumber(na, -fval); } numaAddNumber(na, 0); return 0; } static l_float32 getSinFromLUT(l_float32 *tab, l_int32 npts, l_float32 radang) { l_int32 index; l_float32 twopi, invtwopi, findex, diff; /* Restrict radang to [0, 2pi] */ twopi = 6.283185; invtwopi = 0.1591549; if (radang < 0.0) radang += twopi * (1.0 - (l_int32)(-radang * invtwopi)); else if (radang > 0.0) radang -= twopi * (l_int32)(radang * invtwopi); /* Interpolate */ findex = (2.0 * (l_float32)npts) * (radang * invtwopi); index = (l_int32)findex; if (index == 2 * npts) return tab[index]; diff = findex - index; return (1.0 - diff) * tab[index] + diff * tab[index + 1]; } #endif /* USE_SIN_TABLE */ /*---------------------------------------------------------------------------* * Stereoscopic warping * *---------------------------------------------------------------------------*/ /*! * pixWarpStereoscopic() * * Input: pixs (any depth, colormap ok) * zbend (horizontal separation in pixels of red and cyan * at the left and right sides, that gives rise to * quadratic curvature out of the image plane) * zshiftt (uniform pixel translation difference between * red and cyan, that pushes the top of the image * plane away from the viewer (zshiftt > 0) or * towards the viewer (zshiftt < 0)) * zshiftb (uniform pixel translation difference between * red and cyan, that pushes the bottom of the image * plane away from the viewer (zshiftb > 0) or * towards the viewer (zshiftb < 0)) * ybendt (multiplicative parameter for in-plane vertical * displacement at the left or right edge at the top: * y = ybendt * (2x/w - 1)^2 ) * ybendb (same as ybendt, except at the left or right edge * at the bottom) * redleft (1 if the red filter is on the left; 0 otherwise) * Return: pixd (32 bpp), or null on error * * Notes: * (1) This function splits out the red channel, mucks around with * it, then recombines with the unmolested cyan channel. * (2) By using a quadratically increasing shift of the red * pixels horizontally and away from the vertical centerline, * the image appears to bend quadratically out of the image * plane, symmetrically with respect to the vertical center * line. A positive value of @zbend causes the plane to be * curved away from the viewer. We use linearly interpolated * stretching to avoid the appearance of kinks in the curve. * (3) The parameters @zshiftt and @zshiftb tilt the image plane * about a horizontal line through the center, and at the * same time move that line either in toward the viewer or away. * This is implemented by a combination of horizontal shear * about the center line (for the tilt) and horizontal * translation (to move the entire plane in or out). * A positive value of @zshiftt moves the top of the plane * away from the viewer, and a positive value of @zshiftb * moves the bottom of the plane away. We use linear interpolated * shear to avoid visible vertical steps in the tilted image. * (4) The image can be bent in the plane and about the vertical * centerline. The centerline does not shift, and the * parameter @ybend gives the relative shift at left and right * edges, with a downward shift for positive values of @ybend. * (6) When writing out a steroscopic (red/cyan) image in jpeg, * first call pixSetChromaSampling(pix, 0) to get sufficient * resolution in the red channel. * (7) Typical values are: * zbend = 20 * zshiftt = 15 * zshiftb = -15 * ybendt = 30 * ybendb = 0 * If the disparity z-values are too large, it is difficult for * the brain to register the two images. * (8) This function has been cleverly reimplemented by Jeff Breidenbach. * The original implementation used two 32 bpp rgb images, * and merged them at the end. The result is somewhat faded, * and has a parameter "thresh" that controls the amount of * color in the result. (The present implementation avoids these * two problems, skipping both the colorization and the alpha * blending at the end, and is about 3x faster) * The basic operations with 32 bpp are as follows: * // Immediate conversion to 32 bpp * Pix *pixt1 = pixConvertTo32(pixs); * // Do vertical shear * Pix *pixr = pixQuadraticVerticalShear(pixt1, L_WARP_TO_RIGHT, * ybendt, ybendb, * L_BRING_IN_WHITE); * // Colorize two versions, toward red and cyan * Pix *pixc = pixCopy(NULL, pixr); * l_int32 thresh = 150; // if higher, get less original color * pixColorGray(pixr, NULL, L_PAINT_DARK, thresh, 255, 0, 0); * pixColorGray(pixc, NULL, L_PAINT_DARK, thresh, 0, 255, 255); * // Shift the red pixels; e.g., by stretching * Pix *pixrs = pixStretchHorizontal(pixr, L_WARP_TO_RIGHT, * L_QUADRATIC_WARP, zbend, * L_INTERPOLATED, * L_BRING_IN_WHITE); * // Blend the shifted red and unshifted cyan 50:50 * Pix *pixg = pixCreate(w, h, 8); * pixSetAllArbitrary(pixg, 128); * pixd = pixBlendWithGrayMask(pixrs, pixc, pixg, 0, 0); */ PIX * pixWarpStereoscopic(PIX *pixs, l_int32 zbend, l_int32 zshiftt, l_int32 zshiftb, l_int32 ybendt, l_int32 ybendb, l_int32 redleft) { l_int32 w, h, zshift; l_float32 angle; BOX *boxleft, *boxright; PIX *pixt, *pixt2, *pixt3; PIX *pixr, *pixg, *pixb; PIX *pixv1, *pixv2, *pixv3, *pixv4; PIX *pixr1, *pixr2, *pixr3, *pixr4, *pixrs, *pixrss; PIX *pixd; PROCNAME("pixWarpStereoscopic"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Convert to the output depth, 32 bpp. */ pixt = pixConvertTo32(pixs); /* If requested, do a quad vertical shearing, pushing pixels up * or down, depending on their distance from the centerline. */ pixGetDimensions(pixs, &w, &h, NULL); boxleft = boxCreate(0, 0, w / 2, h); boxright = boxCreate(w / 2, 0, w - w / 2, h); if (ybendt != 0 || ybendb != 0) { pixv1 = pixClipRectangle(pixt, boxleft, NULL); pixv2 = pixClipRectangle(pixt, boxright, NULL); pixv3 = pixQuadraticVShear(pixv1, L_WARP_TO_LEFT, ybendt, ybendb, L_INTERPOLATED, L_BRING_IN_WHITE); pixv4 = pixQuadraticVShear(pixv2, L_WARP_TO_RIGHT, ybendt, ybendb, L_INTERPOLATED, L_BRING_IN_WHITE); pixt2 = pixCreate(w, h, 32); pixRasterop(pixt2, 0, 0, w / 2, h, PIX_SRC, pixv3, 0, 0); pixRasterop(pixt2, w / 2, 0, w - w / 2, h, PIX_SRC, pixv4, 0, 0); pixDestroy(&pixv1); pixDestroy(&pixv2); pixDestroy(&pixv3); pixDestroy(&pixv4); } else { pixt2 = pixClone(pixt); } /* Split out the 3 components */ pixr = pixGetRGBComponent(pixt2, COLOR_RED); pixg = pixGetRGBComponent(pixt2, COLOR_GREEN); pixb = pixGetRGBComponent(pixt2, COLOR_BLUE); pixDestroy(&pixt); pixDestroy(&pixt2); /* The direction of the stereo disparity below is set * for the red filter to be over the left eye. If the red * filter is over the right eye, invert the horizontal shifts. */ if (redleft) { zbend = -zbend; zshiftt = -zshiftt; zshiftb = -zshiftb; } /* Shift the red pixels horizontally by an amount that * increases quadratically from the centerline. */ if (zbend == 0) { pixrs = pixClone(pixr); } else { pixr1 = pixClipRectangle(pixr, boxleft, NULL); pixr2 = pixClipRectangle(pixr, boxright, NULL); pixr3 = pixStretchHorizontal(pixr1, L_WARP_TO_LEFT, L_QUADRATIC_WARP, zbend, L_INTERPOLATED, L_BRING_IN_WHITE); pixr4 = pixStretchHorizontal(pixr2, L_WARP_TO_RIGHT, L_QUADRATIC_WARP, zbend, L_INTERPOLATED, L_BRING_IN_WHITE); pixrs = pixCreate(w, h, 8); pixRasterop(pixrs, 0, 0, w / 2, h, PIX_SRC, pixr3, 0, 0); pixRasterop(pixrs, w / 2, 0, w - w / 2, h, PIX_SRC, pixr4, 0, 0); pixDestroy(&pixr1); pixDestroy(&pixr2); pixDestroy(&pixr3); pixDestroy(&pixr4); } /* Perform a combination of horizontal shift and shear of * red pixels. The causes the plane of the image to tilt and * also move forward or backward. */ if (zshiftt == 0 && zshiftb == 0) { pixrss = pixClone(pixrs); } else if (zshiftt == zshiftb) { pixrss = pixTranslate(NULL, pixrs, zshiftt, 0, L_BRING_IN_WHITE); } else { angle = (l_float32)(zshiftb - zshiftt) / (l_float32)pixGetHeight(pixrs); zshift = (zshiftt + zshiftb) / 2; pixt3 = pixTranslate(NULL, pixrs, zshift, 0, L_BRING_IN_WHITE); pixrss = pixHShearLI(pixt3, h / 2, angle, L_BRING_IN_WHITE); pixDestroy(&pixt3); } /* Combine the unchanged cyan (g,b) image with the shifted red */ pixd = pixCreateRGBImage(pixrss, pixg, pixb); boxDestroy(&boxleft); boxDestroy(&boxright); pixDestroy(&pixrs); pixDestroy(&pixrss); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*----------------------------------------------------------------------* * Linear and quadratic horizontal stretching * *----------------------------------------------------------------------*/ /*! * pixStretchHorizontal() * * Input: pixs (1, 8 or 32 bpp) * dir (L_WARP_TO_LEFT or L_WARP_TO_RIGHT) * type (L_LINEAR_WARP or L_QUADRATIC_WARP) * hmax (horizontal displacement at edge) * operation (L_SAMPLED or L_INTERPOLATED) * incolor (L_BRING_IN_WHITE or L_BRING_IN_BLACK) * Return: pixd (stretched/compressed), or null on error * * Notes: * (1) If @hmax > 0, this is an increase in the coordinate value of * pixels in pixd, relative to the same pixel in pixs. * (2) If @dir == L_WARP_TO_LEFT, the pixels on the right edge of * the image are not moved. So, for example, if @hmax > 0 * and @dir == L_WARP_TO_LEFT, the pixels in pixd are * contracted toward the right edge of the image, relative * to those in pixs. * (3) If @type == L_LINEAR_WARP, the pixel positions are moved * to the left or right by an amount that varies linearly with * the horizontal location. * (4) If @operation == L_SAMPLED, the dest pixels are taken from * the nearest src pixel. Otherwise, we use linear interpolation * between pairs of sampled pixels. */ PIX * pixStretchHorizontal(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 operation, l_int32 incolor) { l_int32 d; PROCNAME("pixStretchHorizontal"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (operation != L_SAMPLED && operation != L_INTERPOLATED) return (PIX *)ERROR_PTR("invalid operation", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (d == 1 && operation == L_INTERPOLATED) { L_WARNING("Using sampling for 1 bpp\n", procName); operation = L_INTERPOLATED; } if (operation == L_SAMPLED) return pixStretchHorizontalSampled(pixs, dir, type, hmax, incolor); else return pixStretchHorizontalLI(pixs, dir, type, hmax, incolor); } /*! * pixStretchHorizontalSampled() * * Input: pixs (1, 8 or 32 bpp) * dir (L_WARP_TO_LEFT or L_WARP_TO_RIGHT) * type (L_LINEAR_WARP or L_QUADRATIC_WARP) * hmax (horizontal displacement at edge) * incolor (L_BRING_IN_WHITE or L_BRING_IN_BLACK) * Return: pixd (stretched/compressed), or null on error * * Notes: * (1) See pixStretchHorizontal() for details. */ PIX * pixStretchHorizontalSampled(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor) { l_int32 i, j, jd, w, wm, h, d, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixStretchHorizontalSampled"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); pixd = pixCreateTemplate(pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wm = w - 1; for (jd = 0; jd < w; jd++) { if (dir == L_WARP_TO_LEFT) { if (type == L_LINEAR_WARP) j = jd - (hmax * (wm - jd)) / wm; else /* L_QUADRATIC_WARP */ j = jd - (hmax * (wm - jd) * (wm - jd)) / (wm * wm); } else if (dir == L_WARP_TO_RIGHT) { if (type == L_LINEAR_WARP) j = jd - (hmax * jd) / wm; else /* L_QUADRATIC_WARP */ j = jd - (hmax * jd * jd) / (wm * wm); } if (j < 0 || j > w - 1) continue; switch (d) { case 1: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = GET_DATA_BIT(lines, j); if (val) SET_DATA_BIT(lined, jd); } break; case 8: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(lined, jd, val); } break; case 32: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; lined[jd] = lines[j]; } break; default: L_ERROR("invalid depth: %d\n", procName, d); pixDestroy(&pixd); return NULL; } } return pixd; } /*! * pixStretchHorizontalLI() * * Input: pixs (1, 8 or 32 bpp) * dir (L_WARP_TO_LEFT or L_WARP_TO_RIGHT) * type (L_LINEAR_WARP or L_QUADRATIC_WARP) * hmax (horizontal displacement at edge) * incolor (L_BRING_IN_WHITE or L_BRING_IN_BLACK) * Return: pixd (stretched/compressed), or null on error * * Notes: * (1) See pixStretchHorizontal() for details. */ PIX * pixStretchHorizontalLI(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor) { l_int32 i, j, jd, jp, jf, w, wm, h, d, wpls, wpld, val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixStretchHorizontalLI"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); if (type != L_LINEAR_WARP && type != L_QUADRATIC_WARP) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); /* Standard linear interpolation, subdividing each pixel into 64 */ pixd = pixCreateTemplate(pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wm = w - 1; for (jd = 0; jd < w; jd++) { if (dir == L_WARP_TO_LEFT) { if (type == L_LINEAR_WARP) j = 64 * jd - 64 * (hmax * (wm - jd)) / wm; else /* L_QUADRATIC_WARP */ j = 64 * jd - 64 * (hmax * (wm - jd) * (wm - jd)) / (wm * wm); } else if (dir == L_WARP_TO_RIGHT) { if (type == L_LINEAR_WARP) j = 64 * jd - 64 * (hmax * jd) / wm; else /* L_QUADRATIC_WARP */ j = 64 * jd - 64 * (hmax * jd * jd) / (wm * wm); } jp = j / 64; jf = j & 0x3f; if (jp < 0 || jp > wm) continue; switch (d) { case 8: if (jp < wm) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = ((63 - jf) * GET_DATA_BYTE(lines, jp) + jf * GET_DATA_BYTE(lines, jp + 1) + 31) / 63; SET_DATA_BYTE(lined, jd, val); } } else { /* jp == wm */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; val = GET_DATA_BYTE(lines, jp); SET_DATA_BYTE(lined, jd, val); } } break; case 32: if (jp < wm) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; word0 = *(lines + jp); word1 = *(lines + jp + 1); rval = ((63 - jf) * ((word0 >> L_RED_SHIFT) & 0xff) + jf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - jf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + jf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - jf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + jf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + jd); } } else { /* jp == wm */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; lined[jd] = lines[jp]; } } break; default: L_ERROR("invalid depth: %d\n", procName, d); pixDestroy(&pixd); return NULL; } } return pixd; } /*----------------------------------------------------------------------* * Quadratic vertical shear * *----------------------------------------------------------------------*/ /*! * pixQuadraticVShear() * * Input: pixs (1, 8 or 32 bpp) * dir (L_WARP_TO_LEFT or L_WARP_TO_RIGHT) * vmaxt (max vertical displacement at edge and at top) * vmaxb (max vertical displacement at edge and at bottom) * operation (L_SAMPLED or L_INTERPOLATED) * incolor (L_BRING_IN_WHITE or L_BRING_IN_BLACK) * Return: pixd (stretched), or null on error * * Notes: * (1) This gives a quadratic bending, upward or downward, as you * move to the left or right. * (2) If @dir == L_WARP_TO_LEFT, the right edge is unchanged, and * the left edge pixels are moved maximally up or down. * (3) Parameters @vmaxt and @vmaxb control the maximum amount of * vertical pixel shear at the top and bottom, respectively. * If @vmaxt > 0, the vertical displacement of pixels at the * top is downward. Likewise, if @vmaxb > 0, the vertical * displacement of pixels at the bottom is downward. * (4) If @operation == L_SAMPLED, the dest pixels are taken from * the nearest src pixel. Otherwise, we use linear interpolation * between pairs of sampled pixels. * (5) This is for quadratic shear. For uniform (linear) shear, * use the standard shear operators. */ PIX * pixQuadraticVShear(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 operation, l_int32 incolor) { l_int32 w, h, d; PROCNAME("pixQuadraticVShear"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); if (operation != L_SAMPLED && operation != L_INTERPOLATED) return (PIX *)ERROR_PTR("invalid operation", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (vmaxt == 0 && vmaxb == 0) return pixCopy(NULL, pixs); if (operation == L_INTERPOLATED && d == 1) { L_WARNING("no interpolation for 1 bpp; using sampling\n", procName); operation = L_SAMPLED; } if (operation == L_SAMPLED) return pixQuadraticVShearSampled(pixs, dir, vmaxt, vmaxb, incolor); else /* operation == L_INTERPOLATED */ return pixQuadraticVShearLI(pixs, dir, vmaxt, vmaxb, incolor); } /*! * pixQuadraticVShearSampled() * * Input: pixs (1, 8 or 32 bpp) * dir (L_WARP_TO_LEFT or L_WARP_TO_RIGHT) * vmaxt (max vertical displacement at edge and at top) * vmaxb (max vertical displacement at edge and at bottom) * incolor (L_BRING_IN_WHITE or L_BRING_IN_BLACK) * Return: pixd (stretched), or null on error * * Notes: * (1) See pixQuadraticVShear() for details. */ PIX * pixQuadraticVShearSampled(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor) { l_int32 i, j, id, w, h, d, wm, hm, wpls, wpld, val; l_uint32 *datas, *datad, *lines, *lined; l_float32 delrowt, delrowb, denom1, denom2, dely; PIX *pixd; PROCNAME("pixQuadraticVShearSampled"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (vmaxt == 0 && vmaxb == 0) return pixCopy(NULL, pixs); pixd = pixCreateTemplate(pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wm = w - 1; hm = h - 1; denom1 = 1. / (l_float32)h; denom2 = 1. / (l_float32)(wm * wm); for (j = 0; j < w; j++) { if (dir == L_WARP_TO_LEFT) { delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2; delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2; } else if (dir == L_WARP_TO_RIGHT) { delrowt = (l_float32)(vmaxt * j * j) * denom2; delrowb = (l_float32)(vmaxb * j * j) * denom2; } switch (d) { case 1: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = id - (l_int32)(dely + 0.5); if (i < 0 || i > hm) continue; lines = datas + i * wpls; lined = datad + id * wpld; val = GET_DATA_BIT(lines, j); if (val) SET_DATA_BIT(lined, j); } break; case 8: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = id - (l_int32)(dely + 0.5); if (i < 0 || i > hm) continue; lines = datas + i * wpls; lined = datad + id * wpld; val = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(lined, j, val); } break; case 32: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = id - (l_int32)(dely + 0.5); if (i < 0 || i > hm) continue; lines = datas + i * wpls; lined = datad + id * wpld; lined[j] = lines[j]; } break; default: L_ERROR("invalid depth: %d\n", procName, d); pixDestroy(&pixd); return NULL; } } return pixd; } /*! * pixQuadraticVShearLI() * * Input: pixs (8 or 32 bpp, or colormapped) * dir (L_WARP_TO_LEFT or L_WARP_TO_RIGHT) * vmaxt (max vertical displacement at edge and at top) * vmaxb (max vertical displacement at edge and at bottom) * incolor (L_BRING_IN_WHITE or L_BRING_IN_BLACK) * Return: pixd (stretched), or null on error * * Notes: * (1) See pixQuadraticVShear() for details. */ PIX * pixQuadraticVShearLI(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor) { l_int32 i, j, id, yp, yf, w, h, d, wm, hm, wpls, wpld; l_int32 val, rval, gval, bval; l_uint32 word0, word1; l_uint32 *datas, *datad, *lines, *lined; l_float32 delrowt, delrowb, denom1, denom2, dely; PIX *pix, *pixd; PIXCMAP *cmap; PROCNAME("pixQuadraticVShearLI"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d == 1) return (PIX *)ERROR_PTR("pixs is 1 bpp", procName, NULL); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return (PIX *)ERROR_PTR("pixs not 8, 32 bpp, or cmap", procName, NULL); if (dir != L_WARP_TO_LEFT && dir != L_WARP_TO_RIGHT) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (vmaxt == 0 && vmaxb == 0) return pixCopy(NULL, pixs); /* Remove any existing colormap */ if (cmap) pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pix = pixClone(pixs); d = pixGetDepth(pix); if (d != 8 && d != 32) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid depth", procName, NULL); } /* Standard linear interp: subdivide each pixel into 64 parts */ pixd = pixCreateTemplate(pix); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); datas = pixGetData(pix); datad = pixGetData(pixd); wpls = pixGetWpl(pix); wpld = pixGetWpl(pixd); wm = w - 1; hm = h - 1; denom1 = 1.0 / (l_float32)h; denom2 = 1.0 / (l_float32)(wm * wm); for (j = 0; j < w; j++) { if (dir == L_WARP_TO_LEFT) { delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2; delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2; } else if (dir == L_WARP_TO_RIGHT) { delrowt = (l_float32)(vmaxt * j * j) * denom2; delrowb = (l_float32)(vmaxb * j * j) * denom2; } switch (d) { case 8: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = 64 * id - (l_int32)(64.0 * dely); yp = i / 64; yf = i & 63; if (yp < 0 || yp > hm) continue; lines = datas + yp * wpls; lined = datad + id * wpld; if (yp < hm) { val = ((63 - yf) * GET_DATA_BYTE(lines, j) + yf * GET_DATA_BYTE(lines + wpls, j) + 31) / 63; } else { /* yp == hm */ val = GET_DATA_BYTE(lines, j); } SET_DATA_BYTE(lined, j, val); } break; case 32: for (id = 0; id < h; id++) { dely = (delrowt * (hm - id) + delrowb * id) * denom1; i = 64 * id - (l_int32)(64.0 * dely); yp = i / 64; yf = i & 63; if (yp < 0 || yp > hm) continue; lines = datas + yp * wpls; lined = datad + id * wpld; if (yp < hm) { word0 = *(lines + j); word1 = *(lines + wpls + j); rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) + yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63; gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) + yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63; bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) + yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63; composeRGBPixel(rval, gval, bval, lined + j); } else { /* yp == hm */ lined[j] = lines[j]; } } break; default: L_ERROR("invalid depth: %d\n", procName, d); pixDestroy(&pix); pixDestroy(&pixd); return NULL; } } pixDestroy(&pix); return pixd; } /*----------------------------------------------------------------------* * Stereo from a pair of images * *----------------------------------------------------------------------*/ /*! * pixStereoFromPair() * * Input: pix1 (32 bpp rgb) * pix2 (32 bpp rgb) * rwt, gwt, bwt (weighting factors used for each component in pix1 to determine the output red channel) * Return: pixd (stereo enhanced), or null on error * * Notes: * (1) pix1 and pix2 are a pair of stereo images, ideally taken * concurrently in the same plane, with some lateral translation. * (2) The output red channel is determined from @pix1. * The output green and blue channels are taken from the green * and blue channels, respectively, of @pix2. * (3) The weights determine how much of each component in @pix1 * goes into the output red channel. The sum of weights * must be 1.0. If it's not, we scale the weights to * satisfy this criterion. * (4) The most general pixel mapping allowed here is: * rval = rwt * r1 + gwt * g1 + bwt * b1 (from pix1) * gval = g2 (from pix2) * bval = b2 (from pix2) * (5) The simplest method is to use rwt = 1.0, gwt = 0.0, bwt = 0.0, * but this causes unpleasant visual artifacts with red in the image. * Use of green and blue from @pix1 in the red channel, * instead of red, tends to fix that problem. */ PIX * pixStereoFromPair(PIX *pix1, PIX *pix2, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, j, w, h, wpl1, wpl2, rval, gval, bval; l_uint32 word1, word2; l_uint32 *data1, *data2, *datad, *line1, *line2, *lined; l_float32 sum; PIX *pixd; PROCNAME("pixStereoFromPair"); if (!pix1 || !pix2) return (PIX *)ERROR_PTR("pix1, pix2 not both defined", procName, NULL); if (pixGetDepth(pix1) != 32 || pixGetDepth(pix2) != 32) return (PIX *)ERROR_PTR("pix1, pix2 not both 32 bpp", procName, NULL); /* Make sure the sum of weights is 1.0; otherwise, you can get * overflow in the gray value. */ if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) { rwt = L_DEFAULT_RED_WEIGHT; gwt = L_DEFAULT_GREEN_WEIGHT; bwt = L_DEFAULT_BLUE_WEIGHT; } sum = rwt + gwt + bwt; if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ L_WARNING("weights don't sum to 1; maintaining ratios\n", procName); rwt = rwt / sum; gwt = gwt / sum; bwt = bwt / sum; } pixGetDimensions(pix1, &w, &h, NULL); pixd = pixCreateTemplate(pix1); data1 = pixGetData(pix1); data2 = pixGetData(pix2); datad = pixGetData(pixd); wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); for (i = 0; i < h; i++) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; lined = datad + i * wpl1; /* wpl1 works for pixd */ for (j = 0; j < w; j++) { word1 = *(line1 + j); word2 = *(line2 + j); rval = (l_int32)(rwt * ((word1 >> L_RED_SHIFT) & 0xff) + gwt * ((word1 >> L_GREEN_SHIFT) & 0xff) + bwt * ((word1 >> L_BLUE_SHIFT) & 0xff) + 0.5); gval = (word2 >> L_GREEN_SHIFT) & 0xff; bval = (word2 >> L_BLUE_SHIFT) & 0xff; composeRGBPixel(rval, gval, bval, lined + j); } } return pixd; } leptonica-1.70/src/pixlabel.c0000644000175000017500000002701012252644465014252 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixlabel.c * * Label pixels by an index for connected component membership * PIX *pixConnCompTransform() * * Label pixels by the area of their connected component * PIX *pixConnCompAreaTransform() * * Label pixels with spatially-dependent color coding * PIX *pixLocToColorTransform() * * Pixels get labelled in various ways throughout the leptonica library, * but most of the labelling is implicit, where the new value isn't * even considered to be a label -- it is just a transformed pixel value * that may be transformed again by another operation. Quantization * by thresholding, and dilation by a structuring element, are examples * of these typical image processing operations. * * However, there are some explicit labelling procedures that are useful * as end-points of analysis, where it typically would not make sense * to do further image processing on the result. Assigning false color * based on pixel properties is an example of such labelling operations. * Such operations typically have 1 bpp input images, and result * in grayscale or color images. * * The procedures in this file are concerned with such explicit labelling. * Some of these labelling procedures are also in other places in leptonica: * * runlength.c: * This file has two labelling transforms based on runlengths: * pixStrokeWidthTransform() and pixvRunlengthTransform(). * The pixels are labelled based on the width of the "stroke" to * which they belong, or on the length of the horizontal or * vertical run in which they are a member. Runlengths can easily * be filtered using a threshold. * * pixafunc2.c: * This file has an operation, pixaDisplayRandomCmap(), that * randomly labels pix in a pixa (that are typically found using * pixConnComp) with up to 256 values, and assigns each value to * a random colormap color. * * seedfill.c: * This file has pixDistanceFunction(), that labels each pixel with * its distance from either the foreground or the background. */ #include #include #include "allheaders.h" /*-----------------------------------------------------------------------* * Label pixels by an index for connected component membership * *-----------------------------------------------------------------------*/ /*! * pixConnCompTransform() * * Input: pixs (1 bpp) * connect (connectivity: 4 or 8) * depth (of pixd: 8 or 16 bpp; use 0 for auto determination) * Return: pixd (8 or 16 bpp), or null on error * * Notes: * (1) pixd is 8 or 16 bpp, and the pixel values label the fg component, * starting with 1. Pixels in the bg are labelled 0. * (2) If @depth = 0, the depth of pixd is 8 if the number of c.c. * is less than 254, and 16 otherwise. * (3) If @depth = 8, the assigned label for the n-th component is * 1 + n % 254. We use mod 254 because 0 is uniquely assigned * to black: e.g., see pixcmapCreateRandom(). Likewise, * if @depth = 16, the assigned label uses mod(2^16 - 2). */ PIX * pixConnCompTransform(PIX *pixs, l_int32 connect, l_int32 depth) { l_int32 i, n, index, w, h, xb, yb, wb, hb; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa; PROCNAME("pixConnCompTransform"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connect != 4 && connect != 8) return (PIX *)ERROR_PTR("connectivity must be 4 or 8", procName, NULL); if (depth != 0 && depth != 8 && depth != 16) return (PIX *)ERROR_PTR("depth must be 0, 8 or 16", procName, NULL); boxa = pixConnComp(pixs, &pixa, connect); n = pixaGetCount(pixa); boxaDestroy(&boxa); pixGetDimensions(pixs, &w, &h, NULL); if (depth == 0) { depth = (n < 254) ? 8 : 16; } pixd = pixCreate(w, h, depth); if (n == 0) { /* no fg */ pixaDestroy(&pixa); return pixd; } /* Label each component and blit it in */ for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); pix1 = pixaGetPix(pixa, i, L_CLONE); if (depth == 8) { index = 1 + (i % 254); pix2 = pixConvert1To8(NULL, pix1, 0, index); } else { /* depth == 16 */ index = 1 + (i % 0xfffe); pix2 = pixConvert1To16(NULL, pix1, 0, index); } pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix2, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa); return pixd; } /*-----------------------------------------------------------------------* * Label pixels by the area of their connected component * *-----------------------------------------------------------------------*/ /*! * pixConnCompAreaTransform() * * Input: pixs (1 bpp) * connect (connectivity: 4 or 8) * Return: pixd (16 bpp), or null on error * * Notes: * (1) The pixel values in pixd label the area of the fg component * to which the pixel belongs. Pixels in the bg are labelled 0. * (2) The pixel values cannot exceed 2^16 - 1, even if the area * of the c.c. is larger. * (3) For purposes of visualization, the output can be converted * to 8 bpp, using pixConvert16To8() or pixMaxDynamicRange(). */ PIX * pixConnCompAreaTransform(PIX *pixs, l_int32 connect) { l_int32 i, n, npix, w, h, xb, yb, wb, hb; l_int32 *tab8; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa; PROCNAME("pixConnCompTransform"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connect != 4 && connect != 8) return (PIX *)ERROR_PTR("connectivity must be 4 or 8", procName, NULL); boxa = pixConnComp(pixs, &pixa, connect); n = pixaGetCount(pixa); boxaDestroy(&boxa); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 16); if (n == 0) { /* no fg */ pixaDestroy(&pixa); return pixd; } /* Label each component and blit it in */ tab8 = makePixelSumTab8(); for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); pix1 = pixaGetPix(pixa, i, L_CLONE); pixCountPixels(pix1, &npix, tab8); npix = L_MIN(npix, 0xffff); pix2 = pixConvert1To16(NULL, pix1, 0, npix); pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pix2, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa); FREE(tab8); return pixd; } /*-----------------------------------------------------------------------* * Label pixels with spatially-dependent color coding * *-----------------------------------------------------------------------*/ /*! * pixLocToColorTransform() * * Input: pixs (1 bpp) * Return: pixd (32 bpp rgb), or null on error * * Notes: * (1) This generates an RGB image where each component value * is coded depending on the (x.y) location and the size * of the fg connected component that the pixel in pixs belongs to. * It is independent of the 4-fold orthogonal orientation, and * only weakly depends on translations and small angle rotations. * Background pixels are black. * (2) Such encodings can be compared between two 1 bpp images * by performing this transform and calculating the * "earth-mover" distance on the resulting R,G,B histograms. */ PIX * pixLocToColorTransform(PIX *pixs) { l_int32 w, h, w2, h2, wpls, wplr, wplg, wplb, wplcc, i, j, rval, gval, bval; l_float32 invw2, invh2; l_uint32 *datas, *datar, *datag, *datab, *datacc; l_uint32 *lines, *liner, *lineg, *lineb, *linecc; PIX *pix1, *pixcc, *pixr, *pixg, *pixb, *pixd; PROCNAME("pixLocToColorTransform"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); /* Label each pixel with the area of the c.c. to which it belongs. * Clip the result to 255 in an 8 bpp pix. This is used for * the blue component of pixd. */ pixGetDimensions(pixs, &w, &h, NULL); w2 = w / 2; h2 = h / 2; invw2 = 255.0 / (l_float32)w2; invh2 = 255.0 / (l_float32)h2; pix1 = pixConnCompAreaTransform(pixs, 8); pixcc = pixConvert16To8(pix1, L_CLIP_TO_255); pixDestroy(&pix1); /* Label the red and green components depending on the location * of the fg pixels, in a way that is 4-fold rotationally invariant. */ pixr = pixCreate(w, h, 8); pixg = pixCreate(w, h, 8); pixb = pixCreate(w, h, 8); wpls = pixGetWpl(pixs); wplr = pixGetWpl(pixr); wplg = pixGetWpl(pixg); wplb = pixGetWpl(pixb); wplcc = pixGetWpl(pixcc); datas = pixGetData(pixs); datar = pixGetData(pixr); datag = pixGetData(pixg); datab = pixGetData(pixb); datacc = pixGetData(pixcc); for (i = 0; i < h; i++) { lines = datas + i * wpls; liner = datar + i * wplr; lineg = datag + i * wplg; lineb = datab + i * wplb; linecc = datacc+ i * wplcc; for (j = 0; j < w; j++) { if (GET_DATA_BIT(lines, j) == 0) continue; if (w < h) { rval = invh2 * L_ABS((l_float32)(i - h2)); gval = invw2 * L_ABS((l_float32)(j - w2)); } else { rval = invw2 * L_ABS((l_float32)(j - w2)); gval = invh2 * L_ABS((l_float32)(i - h2)); } bval = GET_DATA_BYTE(linecc, j); SET_DATA_BYTE(liner, j, rval); SET_DATA_BYTE(lineg, j, gval); SET_DATA_BYTE(lineb, j, bval); } } pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixcc); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } leptonica-1.70/src/leptonica-license.txt0000644000175000017500000000275411707052223016442 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ leptonica-1.70/src/morph.h0000644000175000017500000002124511707052573013605 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_MORPH_H #define LEPTONICA_MORPH_H /* * morph.h * * Contains the following structs: * struct Sel * struct Sela * struct Kernel * * Contains definitions for: * morphological b.c. flags * structuring element types * runlength flags for granulometry * direction flags for grayscale morphology * morphological operation flags * standard border size * grayscale intensity scaling flags * morphological tophat flags * arithmetic and logical operator flags * grayscale morphology selection flags * distance function b.c. flags * image comparison flags * color content flags */ /*-------------------------------------------------------------------------* * Sel and Sel array * *-------------------------------------------------------------------------*/ #define SEL_VERSION_NUMBER 1 struct Sel { l_int32 sy; /* sel height */ l_int32 sx; /* sel width */ l_int32 cy; /* y location of sel origin */ l_int32 cx; /* x location of sel origin */ l_int32 **data; /* {0,1,2}; data[i][j] in [row][col] order */ char *name; /* used to find sel by name */ }; typedef struct Sel SEL; struct Sela { l_int32 n; /* number of sel actually stored */ l_int32 nalloc; /* size of allocated ptr array */ struct Sel **sel; /* sel ptr array */ }; typedef struct Sela SELA; /*-------------------------------------------------------------------------* * Kernel * *-------------------------------------------------------------------------*/ #define KERNEL_VERSION_NUMBER 2 struct L_Kernel { l_int32 sy; /* kernel height */ l_int32 sx; /* kernel width */ l_int32 cy; /* y location of kernel origin */ l_int32 cx; /* x location of kernel origin */ l_float32 **data; /* data[i][j] in [row][col] order */ }; typedef struct L_Kernel L_KERNEL; /*-------------------------------------------------------------------------* * Morphological boundary condition flags * * * Two types of boundary condition for erosion. * The global variable MORPH_BC takes on one of these two values. * See notes in morph.c for usage. *-------------------------------------------------------------------------*/ enum { SYMMETRIC_MORPH_BC = 0, ASYMMETRIC_MORPH_BC = 1 }; /*-------------------------------------------------------------------------* * Structuring element types * *-------------------------------------------------------------------------*/ enum { SEL_DONT_CARE = 0, SEL_HIT = 1, SEL_MISS = 2 }; /*-------------------------------------------------------------------------* * Runlength flags for granulometry * *-------------------------------------------------------------------------*/ enum { L_RUN_OFF = 0, L_RUN_ON = 1 }; /*-------------------------------------------------------------------------* * Direction flags for grayscale morphology, granulometry, * * composable Sels, and convolution * *-------------------------------------------------------------------------*/ enum { L_HORIZ = 1, L_VERT = 2, L_BOTH_DIRECTIONS = 3 }; /*-------------------------------------------------------------------------* * Morphological operation flags * *-------------------------------------------------------------------------*/ enum { L_MORPH_DILATE = 1, L_MORPH_ERODE = 2, L_MORPH_OPEN = 3, L_MORPH_CLOSE = 4, L_MORPH_HMT = 5 }; /*-------------------------------------------------------------------------* * Grayscale intensity scaling flags * *-------------------------------------------------------------------------*/ enum { L_LINEAR_SCALE = 1, L_LOG_SCALE = 2 }; /*-------------------------------------------------------------------------* * Morphological tophat flags * *-------------------------------------------------------------------------*/ enum { L_TOPHAT_WHITE = 0, L_TOPHAT_BLACK = 1 }; /*-------------------------------------------------------------------------* * Arithmetic and logical operator flags * * (use on grayscale images and Numas) * *-------------------------------------------------------------------------*/ enum { L_ARITH_ADD = 1, L_ARITH_SUBTRACT = 2, L_ARITH_MULTIPLY = 3, /* on numas only */ L_ARITH_DIVIDE = 4, /* on numas only */ L_UNION = 5, /* on numas only */ L_INTERSECTION = 6, /* on numas only */ L_SUBTRACTION = 7, /* on numas only */ L_EXCLUSIVE_OR = 8 /* on numas only */ }; /*-------------------------------------------------------------------------* * Min/max selection flags * *-------------------------------------------------------------------------*/ enum { L_CHOOSE_MIN = 1, /* useful in a downscaling "erosion" */ L_CHOOSE_MAX = 2, /* useful in a downscaling "dilation" */ L_CHOOSE_MAX_MIN_DIFF = 3 /* useful in a downscaling contrast */ }; /*-------------------------------------------------------------------------* * Distance function b.c. flags * *-------------------------------------------------------------------------*/ enum { L_BOUNDARY_BG = 1, /* assume bg outside image */ L_BOUNDARY_FG = 2 /* assume fg outside image */ }; /*-------------------------------------------------------------------------* * Image comparison flags * *-------------------------------------------------------------------------*/ enum { L_COMPARE_XOR = 1, L_COMPARE_SUBTRACT = 2, L_COMPARE_ABS_DIFF = 3 }; /*-------------------------------------------------------------------------* * Color content flags * *-------------------------------------------------------------------------*/ enum { L_MAX_DIFF_FROM_AVERAGE_2 = 1, L_MAX_MIN_DIFF_FROM_2 = 2, L_MAX_DIFF = 3 }; /*-------------------------------------------------------------------------* * Standard size of border added around images for special processing * *-------------------------------------------------------------------------*/ static const l_int32 ADDED_BORDER = 32; /* pixels, not bits */ #endif /* LEPTONICA_MORPH_H */ leptonica-1.70/src/boxfunc1.c0000644000175000017500000014735712244216720014206 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * boxfunc1.c * * Box geometry * l_int32 boxContains() * l_int32 boxIntersects() * BOXA *boxaContainedInBox() * BOXA *boxaIntersectsBox() * BOXA *boxaClipToBox() * BOXA *boxaCombineOverlaps() * BOX *boxOverlapRegion() * BOX *boxBoundingRegion() * l_int32 boxOverlapFraction() * l_int32 boxOverlapArea() * BOXA *boxaHandleOverlaps() * l_int32 boxSeparationDistance() * l_int32 boxContainsPt() * BOX *boxaGetNearestToPt() * l_int32 boxIntersectByLine() * l_int32 boxGetCenter() * BOX *boxClipToRectangle() * l_int32 boxClipToRectangleParams() * BOX *boxRelocateOneSide() * BOX *boxAdjustSides() * BOXA *boxaSetSide() * BOXA *boxaAdjustWidthToTarget() * BOXA *boxaAdjustHeightToTarget() * l_int32 boxEqual() * l_int32 boxaEqual() * l_int32 boxSimilar() * l_int32 boxaSimilar() * * Boxa combine and split * l_int32 boxaJoin() * l_int32 boxaaJoin() * l_int32 boxaSplitEvenOdd() * BOXA *boxaMergeEvenOdd() */ #include "allheaders.h" /*---------------------------------------------------------------------* * Box geometry * *---------------------------------------------------------------------*/ /*! * boxContains() * * Input: box1, box2 * &result ( 1 if box2 is entirely contained within * box1, and 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 boxContains(BOX *box1, BOX *box2, l_int32 *presult) { PROCNAME("boxContains"); if (!box1 || !box2) return ERROR_INT("box1 and box2 not both defined", procName, 1); if ((box1->x <= box2->x) && (box1->y <= box2->y) && (box1->x + box1->w >= box2->x + box2->w) && (box1->y + box1->h >= box2->y + box2->h)) *presult = 1; else *presult = 0; return 0; } /*! * boxIntersects() * * Input: box1, box2 * &result ( 1 if any part of box2 is contained * in box1, and 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 boxIntersects(BOX *box1, BOX *box2, l_int32 *presult) { l_int32 left1, left2, top1, top2, right1, right2, bot1, bot2; PROCNAME("boxIntersects"); if (!box1 || !box2) return ERROR_INT("box1 and box2 not both defined", procName, 1); left1 = box1->x; left2 = box2->x; top1 = box1->y; top2 = box2->y; right1 = box1->x + box1->w - 1; bot1 = box1->y + box1->h - 1; right2 = box2->x + box2->w - 1; bot2 = box2->y + box2->h - 1; if ((bot2 >= top1) && (bot1 >= top2) && (right1 >= left2) && (right2 >= left1)) *presult = 1; else *presult = 0; return 0; } /*! * boxaContainedInBox() * * Input: boxas * box (for containment) * Return: boxad (boxa with all boxes in boxas that are * entirely contained in box), or null on error * * Notes: * (1) All boxes in boxa that are entirely outside box are removed. */ BOXA * boxaContainedInBox(BOXA *boxas, BOX *box) { l_int32 i, n, val; BOX *boxt; BOXA *boxad; PROCNAME("boxaContainedInBox"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (!box) return (BOXA *)ERROR_PTR("box not defined", procName, NULL); if ((n = boxaGetCount(boxas)) == 0) return boxaCreate(1); /* empty */ boxad = boxaCreate(0); for (i = 0; i < n; i++) { boxt = boxaGetBox(boxas, i, L_CLONE); boxContains(box, boxt, &val); if (val == 1) boxaAddBox(boxad, boxt, L_COPY); boxDestroy(&boxt); /* destroy the clone */ } return boxad; } /*! * boxaIntersectsBox() * * Input: boxas * box (for intersecting) * Return boxad (boxa with all boxes in boxas that intersect box), * or null on error * * Notes: * (1) All boxes in boxa that intersect with box (i.e., are completely * or partially contained in box) are retained. */ BOXA * boxaIntersectsBox(BOXA *boxas, BOX *box) { l_int32 i, n, val; BOX *boxt; BOXA *boxad; PROCNAME("boxaIntersectsBox"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (!box) return (BOXA *)ERROR_PTR("box not defined", procName, NULL); if ((n = boxaGetCount(boxas)) == 0) return boxaCreate(1); /* empty */ boxad = boxaCreate(0); for (i = 0; i < n; i++) { boxt = boxaGetBox(boxas, i, L_CLONE); boxIntersects(box, boxt, &val); if (val == 1) boxaAddBox(boxad, boxt, L_COPY); boxDestroy(&boxt); /* destroy the clone */ } return boxad; } /*! * boxaClipToBox() * * Input: boxas * box (for clipping) * Return boxad (boxa with boxes in boxas clipped to box), * or null on error * * Notes: * (1) All boxes in boxa not intersecting with box are removed, and * the remaining boxes are clipped to box. */ BOXA * boxaClipToBox(BOXA *boxas, BOX *box) { l_int32 i, n; BOX *boxt, *boxo; BOXA *boxad; PROCNAME("boxaClipToBox"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (!box) return (BOXA *)ERROR_PTR("box not defined", procName, NULL); if ((n = boxaGetCount(boxas)) == 0) return boxaCreate(1); /* empty */ boxad = boxaCreate(0); for (i = 0; i < n; i++) { boxt = boxaGetBox(boxas, i, L_CLONE); if ((boxo = boxOverlapRegion(box, boxt)) != NULL) boxaAddBox(boxad, boxo, L_INSERT); boxDestroy(&boxt); } return boxad; } /*! * boxaCombineOverlaps() * * Input: boxas * Return: boxad (where each set of boxes in boxas that overlap are * combined into a single bounding box in boxad), or * null on error. * * Notes: * (1) If there are no overlapping boxes, it simply returns a copy * of @boxas. * (2) The alternative method of painting each rectanle and finding * the 4-connected components gives the wrong result, because * two non-overlapping rectangles, when rendered, can still * be 4-connected, and hence they will be joined. * (3) A bad case is to have n boxes, none of which overlap. * Then you have one iteration with O(n^2) compares. This * is still faster than painting each rectangle and finding * the connected components, even for thousands of rectangles. */ BOXA * boxaCombineOverlaps(BOXA *boxas) { l_int32 i, j, n1, n2, inter, interfound, niters; BOX *box1, *box2, *box3; BOXA *boxat1, *boxat2; PROCNAME("boxaCombineOverlaps"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); boxat1 = boxaCopy(boxas, L_COPY); n1 = boxaGetCount(boxat1); niters = 0; /* fprintf(stderr, "%d iters: %d boxes\n", niters, n1); */ while (1) { /* loop until no change from previous iteration */ niters++; boxat2 = boxaCreate(n1); for (i = 0; i < n1; i++) { box1 = boxaGetBox(boxat1, i, L_COPY); if (i == 0) { boxaAddBox(boxat2, box1, L_INSERT); continue; } n2 = boxaGetCount(boxat2); /* Now test box1 against all boxes already put in boxat2. * If it is found to intersect with an existing box, * replace that box by the union of the two boxes, * and break to the outer loop. If no overlap is * found, add box1 to boxat2. */ interfound = FALSE; for (j = 0; j < n2; j++) { box2 = boxaGetBox(boxat2, j, L_CLONE); boxIntersects(box1, box2, &inter); if (inter == 1) { box3 = boxBoundingRegion(box1, box2); boxaReplaceBox(boxat2, j, box3); boxDestroy(&box1); boxDestroy(&box2); interfound = TRUE; break; } boxDestroy(&box2); } if (interfound == FALSE) boxaAddBox(boxat2, box1, L_INSERT); } n2 = boxaGetCount(boxat2); /* fprintf(stderr, "%d iters: %d boxes\n", niters, n2); */ if (n2 == n1) /* we're done */ break; n1 = n2; boxaDestroy(&boxat1); boxat1 = boxat2; } boxaDestroy(&boxat1); return boxat2; } /*! * boxOverlapRegion() * * Input: box1, box2 (two boxes) * Return: box (of overlap region between input boxes), * or null if no overlap or on error */ BOX * boxOverlapRegion(BOX *box1, BOX *box2) { l_int32 x, y, w, h, left1, left2, top1, top2, right1, right2, bot1, bot2; PROCNAME("boxOverlapRegion"); if (!box1) return (BOX *)ERROR_PTR("box1 not defined", procName, NULL); if (!box2) return (BOX *)ERROR_PTR("box2 not defined", procName, NULL); left1 = box1->x; left2 = box2->x; top1 = box1->y; top2 = box2->y; right1 = box1->x + box1->w - 1; bot1 = box1->y + box1->h - 1; right2 = box2->x + box2->w - 1; bot2 = box2->y + box2->h - 1; if ((bot2 < top1) || (bot1 < top2) || (right1 < left2) || (right2 < left1)) return NULL; x = (left1 > left2) ? left1 : left2; y = (top1 > top2) ? top1 : top2; w = L_MIN(right1 - x + 1, right2 - x + 1); h = L_MIN(bot1 - y + 1, bot2 - y + 1); return boxCreate(x, y, w, h); } /*! * boxBoundingRegion() * * Input: box1, box2 (two boxes) * Return: box (of bounding region containing the input boxes), * or null on error */ BOX * boxBoundingRegion(BOX *box1, BOX *box2) { l_int32 left, top, right1, right2, right, bot1, bot2, bot; PROCNAME("boxBoundingRegion"); if (!box1) return (BOX *)ERROR_PTR("box1 not defined", procName, NULL); if (!box2) return (BOX *)ERROR_PTR("box2 not defined", procName, NULL); left = L_MIN(box1->x, box2->x); top = L_MIN(box1->y, box2->y); right1 = box1->x + box1->w - 1; right2 = box2->x + box2->w - 1; right = L_MAX(right1, right2); bot1 = box1->y + box1->h - 1; bot2 = box2->y + box2->h - 1; bot = L_MAX(bot1, bot2); return boxCreate(left, top, right - left + 1, bot - top + 1); } /*! * boxOverlapFraction() * * Input: box1, box2 (two boxes) * &fract ( the fraction of box2 overlapped by box1) * Return: 0 if OK, 1 on error. * * Notes: * (1) The result depends on the order of the input boxes, * because the overlap is taken as a fraction of box2. */ l_int32 boxOverlapFraction(BOX *box1, BOX *box2, l_float32 *pfract) { l_int32 w2, h2, w, h; BOX *boxo; PROCNAME("boxOverlapFraction"); if (!pfract) return ERROR_INT("&fract not defined", procName, 1); *pfract = 0.0; if (!box1) return ERROR_INT("box1 not defined", procName, 1); if (!box2) return ERROR_INT("box2 not defined", procName, 1); if ((boxo = boxOverlapRegion(box1, box2)) == NULL) /* no overlap */ return 0; boxGetGeometry(box2, NULL, NULL, &w2, &h2); boxGetGeometry(boxo, NULL, NULL, &w, &h); *pfract = (l_float32)(w * h) / (l_float32)(w2 * h2); boxDestroy(&boxo); return 0; } /*! * boxOverlapArea() * * Input: box1, box2 (two boxes) * &area ( the number of pixels in the overlap) * Return: 0 if OK, 1 on error. */ l_int32 boxOverlapArea(BOX *box1, BOX *box2, l_int32 *parea) { l_int32 w, h; BOX *box; PROCNAME("boxOverlapArea"); if (!parea) return ERROR_INT("&area not defined", procName, 1); *parea = 0; if (!box1) return ERROR_INT("box1 not defined", procName, 1); if (!box2) return ERROR_INT("box2 not defined", procName, 1); if ((box = boxOverlapRegion(box1, box2)) == NULL) /* no overlap */ return 0; boxGetGeometry(box, NULL, NULL, &w, &h); *parea = w * h; boxDestroy(&box); return 0; } /*! * boxaHandleOverlaps() * * Input: boxas * op (L_COMBINE, L_REMOVE_SMALL) * range (> 0, forward distance over which overlaps are checked) * min_overlap (minimum fraction of smaller box required for * overlap to count; 0.0 to ignore) * max_ratio (maximum fraction of small/large areas for * overlap to count; 1.0 to ignore) * &namap ( combining map) * Return: boxad, or null on error. * * Notes: * (1) For all n(n-1)/2 box pairings, if two boxes overlap, either: * (a) op == L_COMBINE: get the bounding region for the two, * replace the larger with the bounding region, and remove * the smaller of the two, or * (b) op == L_REMOVE_SMALL: just remove the smaller. * (2) If boxas is 2D sorted, range can be small, but if it is * not spatially sorted, range should be large to allow all * pairwise comparisons to be made. * (3) The @min_overlap parameter allows ignoring small overlaps. * If @min_overlap == 1.0, only boxes fully contained in larger * boxes can be considered for removal; if @min_overlap == 0.0, * this constraint is ignored. * (4) The @max_ratio parameter allows ignoring overlaps between * boxes that are not too different in size. If @max_ratio == 0.0, * no boxes can be removed; if @max_ratio == 1.0, this constraint * is ignored. */ BOXA * boxaHandleOverlaps(BOXA *boxas, l_int32 op, l_int32 range, l_float32 min_overlap, l_float32 max_ratio, NUMA **pnamap) { l_int32 i, j, n, w, h, area1, area2, val; l_int32 overlap_area; l_float32 overlap_ratio, area_ratio; BOX *box1, *box2, *box3; BOXA *boxat, *boxad; NUMA *namap; PROCNAME("boxaHandleOverlaps"); if (pnamap) *pnamap = NULL; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (op != L_COMBINE && op != L_REMOVE_SMALL) return (BOXA *)ERROR_PTR("invalid op", procName, NULL); n = boxaGetCount(boxas); if (n == 0) return boxaCreate(1); /* empty */ if (range == 0) { L_WARNING("range is 0\n", procName); return boxaCopy(boxas, L_COPY); } /* Identify smaller boxes in overlap pairs, and mark to eliminate. */ namap = numaMakeConstant(-1, n); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxas, i, L_CLONE); boxGetGeometry(box1, NULL, NULL, &w, &h); area1 = w * h; if (area1 == 0) { boxDestroy(&box1); continue; } for (j = i + 1; j < i + 1 + range && j < n; j++) { box2 = boxaGetBox(boxas, j, L_CLONE); boxOverlapArea(box1, box2, &overlap_area); if (overlap_area > 0) { boxGetGeometry(box2, NULL, NULL, &w, &h); area2 = w * h; if (area2 == 0) { /* do nothing */ } else if (area1 >= area2) { overlap_ratio = (l_float32)overlap_area / area2; area_ratio = (l_float32)area2 / (l_float32)area1; if (overlap_ratio >= min_overlap && area_ratio <= max_ratio) { numaSetValue(namap, j, i); } } else { overlap_ratio = overlap_area / area1; area_ratio = (l_float32)area1 / (l_float32)area2; if (overlap_ratio >= min_overlap && area_ratio <= max_ratio) { numaSetValue(namap, i, j); } } } boxDestroy(&box2); } boxDestroy(&box1); } boxat = boxaCopy(boxas, L_COPY); if (op == L_COMBINE) { /* Resize the larger of the pair to the bounding region */ for (i = 0; i < n; i++) { numaGetIValue(namap, i, &val); if (val >= 0) { box1 = boxaGetBox(boxas, i, L_CLONE); /* smaller */ box2 = boxaGetBox(boxas, val, L_CLONE); /* larger */ box3 = boxBoundingRegion(box1, box2); boxaReplaceBox(boxat, val, box3); boxDestroy(&box1); boxDestroy(&box2); } } } /* Remove the smaller of the pairs */ boxad = boxaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(namap, i, &val); if (val == -1) { box1 = boxaGetBox(boxat, i, L_COPY); boxaAddBox(boxad, box1, L_INSERT); } } boxaDestroy(&boxat); if (pnamap) *pnamap = namap; else numaDestroy(&namap); return boxad; } /*! * boxSeparationDistance() * * Input: box1, box2 (two boxes, in any order) * &h_sep ( horizontal separation) * &v_sep ( vertical separation) * Return: 0 if OK, 1 on error * * Notes: * (1) This measures horizontal and vertical separation of the * two boxes. If the boxes are touching but have no pixels * in common, the separation is 0. If the boxes overlap by * a distance d, the returned separation is -d. */ l_int32 boxSeparationDistance(BOX *box1, BOX *box2, l_int32 *ph_sep, l_int32 *pv_sep) { l_int32 left1, left2, top1, top2, right1, right2, bot1, bot2; PROCNAME("boxSeparationDistance"); if (!ph_sep && !pv_sep) return ERROR_INT("nothing to do", procName, 1); if (ph_sep) *ph_sep = 0; if (pv_sep) *pv_sep = 0; if (!box1 || !box2) return ERROR_INT("box1 and box2 not both defined", procName, 1); if (ph_sep) { left1 = box1->x; left2 = box2->x; right1 = box1->x + box1->w; /* 1 pixel to right of the box */ right2 = box2->x + box2->w; if (left2 >= left1) *ph_sep = left2 - right1; else *ph_sep = left1 - right2; } if (pv_sep) { top1 = box1->y; top2 = box2->y; bot1 = box1->y + box1->h; /* 1 pixel below the box */ bot2 = box2->y + box2->h; if (top2 >= top1) *pv_sep = top2 - bot1; else *pv_sep = top1 - bot2; } return 0; } /*! * boxContainsPt() * * Input: box * x, y (a point) * &contains ( 1 if box contains point; 0 otherwise) * Return: 0 if OK, 1 on error. */ l_int32 boxContainsPt(BOX *box, l_float32 x, l_float32 y, l_int32 *pcontains) { l_int32 bx, by, bw, bh; PROCNAME("boxContainsPt"); if (!pcontains) return ERROR_INT("&contains not defined", procName, 1); *pcontains = 0; if (!box) return ERROR_INT("&box not defined", procName, 1); boxGetGeometry(box, &bx, &by, &bw, &bh); if (x >= bx && x < bx + bw && y >= by && y < by + bh) *pcontains = 1; return 0; } /*! * boxaGetNearestToPt() * * Input: boxa * x, y (point) * Return box (box with centroid closest to the given point [x,y]), * or NULL if no boxes in boxa) * * Notes: * (1) Uses euclidean distance between centroid and point. */ BOX * boxaGetNearestToPt(BOXA *boxa, l_int32 x, l_int32 y) { l_int32 i, n, minindex; l_float32 delx, dely, dist, mindist, cx, cy; BOX *box; PROCNAME("boxaGetNearestToPt"); if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); if ((n = boxaGetCount(boxa)) == 0) return (BOX *)ERROR_PTR("n = 0", procName, NULL); mindist = 1000000000.; minindex = 0; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetCenter(box, &cx, &cy); delx = (l_float32)(cx - x); dely = (l_float32)(cy - y); dist = delx * delx + dely * dely; if (dist < mindist) { minindex = i; mindist = dist; } boxDestroy(&box); } return boxaGetBox(boxa, minindex, L_COPY); } /*! * boxGetCenter() * * Input: box * &cx, &cy ( location of center of box) * Return 0 if OK, 1 on error */ l_int32 boxGetCenter(BOX *box, l_float32 *pcx, l_float32 *pcy) { l_int32 x, y, w, h; PROCNAME("boxGetCenter"); if (!pcx || !pcy) return ERROR_INT("&cx, &cy not both defined", procName, 1); *pcx = *pcy = 0; if (!box) return ERROR_INT("box not defined", procName, 1); boxGetGeometry(box, &x, &y, &w, &h); *pcx = (l_float32)(x + 0.5 * w); *pcy = (l_float32)(y + 0.5 * h); return 0; } /*! * boxIntersectByLine() * * Input: box * x, y (point that line goes through) * slope (of line) * (&x1, &y1) ( 1st point of intersection with box) * (&x2, &y2) ( 2nd point of intersection with box) * &n ( number of points of intersection) * Return: 0 if OK, 1 on error * * Notes: * (1) If the intersection is at only one point (a corner), the * coordinates are returned in (x1, y1). * (2) Represent a vertical line by one with a large but finite slope. */ l_int32 boxIntersectByLine(BOX *box, l_int32 x, l_int32 y, l_float32 slope, l_int32 *px1, l_int32 *py1, l_int32 *px2, l_int32 *py2, l_int32 *pn) { l_int32 bx, by, bw, bh, xp, yp, xt, yt, i, n; l_float32 invslope; PTA *pta; PROCNAME("boxIntersectByLine"); if (!px1 || !py1 || !px2 || !py2) return ERROR_INT("&x1, &y1, &x2, &y2 not all defined", procName, 1); *px1 = *py1 = *px2 = *py2 = 0; if (!pn) return ERROR_INT("&n not defined", procName, 1); *pn = 0; if (!box) return ERROR_INT("box not defined", procName, 1); boxGetGeometry(box, &bx, &by, &bw, &bh); if (slope == 0.0) { if (y >= by && y < by + bh) { *py1 = *py2 = y; *px1 = bx; *px2 = bx + bw - 1; } return 0; } if (slope > 1000000.0) { if (x >= bx && x < bx + bw) { *px1 = *px2 = x; *py1 = by; *py2 = by + bh - 1; } return 0; } /* Intersection with top and bottom lines of box */ pta = ptaCreate(2); invslope = 1.0 / slope; xp = (l_int32)(x + invslope * (y - by)); if (xp >= bx && xp < bx + bw) ptaAddPt(pta, xp, by); xp = (l_int32)(x + invslope * (y - by - bh + 1)); if (xp >= bx && xp < bx + bw) ptaAddPt(pta, xp, by + bh - 1); /* Intersection with left and right lines of box */ yp = (l_int32)(y + slope * (x - bx)); if (yp >= by && yp < by + bh) ptaAddPt(pta, bx, yp); yp = (l_int32)(y + slope * (x - bx - bw + 1)); if (yp >= by && yp < by + bh) ptaAddPt(pta, bx + bw - 1, yp); /* There is a maximum of 2 unique points; remove duplicates. */ n = ptaGetCount(pta); if (n > 0) { ptaGetIPt(pta, 0, px1, py1); /* accept the first one */ *pn = 1; } for (i = 1; i < n; i++) { ptaGetIPt(pta, i, &xt, &yt); if ((*px1 != xt) || (*py1 != yt)) { *px2 = xt; *py2 = yt; *pn = 2; break; } } ptaDestroy(&pta); return 0; } /*! * boxClipToRectangle() * * Input: box * wi, hi (rectangle representing image) * Return: part of box within given rectangle, or NULL on error * or if box is entirely outside the rectangle * * Notes: * (1) This can be used to clip a rectangle to an image. * The clipping rectangle is assumed to have a UL corner at (0, 0), * and a LR corner at (wi - 1, hi - 1). */ BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi) { BOX *boxd; PROCNAME("boxClipToRectangle"); if (!box) return (BOX *)ERROR_PTR("box not defined", procName, NULL); if (box->x >= wi || box->y >= hi || box->x + box->w <= 0 || box->y + box->h <= 0) return (BOX *)ERROR_PTR("box outside rectangle", procName, NULL); boxd = boxCopy(box); if (boxd->x < 0) { boxd->w += boxd->x; boxd->x = 0; } if (boxd->y < 0) { boxd->h += boxd->y; boxd->y = 0; } if (boxd->x + boxd->w > wi) boxd->w = wi - boxd->x; if (boxd->y + boxd->h > hi) boxd->h = hi - boxd->y; return boxd; } /*! * boxClipToRectangleParams() * * Input: box ( requested box; can be null) * w, h (clipping box size; typ. the size of an image) * &xstart () * &ystart () * &xend ( one pixel beyond clipping box) * ¥d ( one pixel beyond clipping box) * &bw ( clipped width) * &bh ( clipped height) * Return: 0 if OK; 1 on error * * Notes: * (1) The return value should be checked. If it is 1, the * returned parameter values are bogus. * (2) This simplifies the selection of pixel locations within * a given rectangle: * for (i = ystart; i < yend; i++ { * ... * for (j = xstart; j < xend; j++ { * .... */ l_int32 boxClipToRectangleParams(BOX *box, l_int32 w, l_int32 h, l_int32 *pxstart, l_int32 *pystart, l_int32 *pxend, l_int32 *pyend, l_int32 *pbw, l_int32 *pbh) { l_int32 bw, bh; BOX *boxc; PROCNAME("boxClipToRectangleParams"); if (!pxstart || !pystart || !pxend || !pyend) return ERROR_INT("invalid ptr input", procName, 1); *pxstart = *pystart = 0; *pxend = w; *pyend = h; if (pbw) *pbw = w; if (pbh) *pbh = h; if (!box) return 0; if ((boxc = boxClipToRectangle(box, w, h)) == NULL) return ERROR_INT("box outside image", procName, 1); boxGetGeometry(boxc, pxstart, pystart, &bw, &bh); boxDestroy(&boxc); if (pbw) *pbw = bw; if (pbh) *pbh = bh; if (bw == 0 || bh == 0) return ERROR_INT("invalid clipping box", procName, 1); *pxend = *pxstart + bw; /* 1 past the end */ *pyend = *pystart + bh; /* 1 past the end */ return 0; } /*! * boxRelocateOneSide() * * Input: boxd (; this can be null, equal to boxs, * or different from boxs); * boxs (starting box; to have one side relocated) * loc (new location of the side that is changing) * sideflag (L_FROM_LEFT, etc., indicating the side that moves) * Return: boxd, or null on error or if the computed boxd has * width or height <= 0. * * Notes: * (1) Set boxd == NULL to get new box; boxd == boxs for in-place; * or otherwise to resize existing boxd. * (2) For usage, suggest one of these: * boxd = boxRelocateOneSide(NULL, boxs, ...); // new * boxRelocateOneSide(boxs, boxs, ...); // in-place * boxRelocateOneSide(boxd, boxs, ...); // other */ BOX * boxRelocateOneSide(BOX *boxd, BOX *boxs, l_int32 loc, l_int32 sideflag) { l_int32 x, y, w, h; PROCNAME("boxRelocateOneSide"); if (!boxs) return (BOX *)ERROR_PTR("boxs not defined", procName, NULL); if (!boxd) boxd = boxCopy(boxs); boxGetGeometry(boxs, &x, &y, &w, &h); if (sideflag == L_FROM_LEFT) boxSetGeometry(boxd, loc, -1, w + x - loc, -1); else if (sideflag == L_FROM_RIGHT) boxSetGeometry(boxd, -1, -1, loc - x + 1, -1); else if (sideflag == L_FROM_TOP) boxSetGeometry(boxd, -1, loc, -1, h + y - loc); else if (sideflag == L_FROM_BOT) boxSetGeometry(boxd, -1, -1, -1, loc - y + 1); return boxd; } /*! * boxAdjustSides() * * Input: boxd (; this can be null, equal to boxs, * or different from boxs) * boxs (starting box; to have sides adjusted) * delleft, delright, deltop, delbot (changes in location of * each side) * Return: boxd, or null on error or if the computed boxd has * width or height <= 0. * * Notes: * (1) Set boxd == NULL to get new box; boxd == boxs for in-place; * or otherwise to resize existing boxd. * (2) For usage, suggest one of these: * boxd = boxAdjustSides(NULL, boxs, ...); // new * boxAdjustSides(boxs, boxs, ...); // in-place * boxAdjustSides(boxd, boxs, ...); // other * (1) New box dimensions are cropped at left and top to x >= 0 and y >= 0. * (2) For example, to expand in-place by 20 pixels on each side, use * boxAdjustSides(box, box, -20, 20, -20, 20); */ BOX * boxAdjustSides(BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot) { l_int32 x, y, w, h, xl, xr, yt, yb, wnew, hnew; PROCNAME("boxAdjustSides"); if (!boxs) return (BOX *)ERROR_PTR("boxs not defined", procName, NULL); boxGetGeometry(boxs, &x, &y, &w, &h); xl = L_MAX(0, x + delleft); yt = L_MAX(0, y + deltop); xr = x + w + delright; /* one pixel beyond right edge */ yb = y + h + delbot; /* one pixel below bottom edge */ wnew = xr - xl; hnew = yb - yt; if (wnew < 1 || hnew < 1) return (BOX *)ERROR_PTR("boxd has 0 area", procName, NULL); if (!boxd) return boxCreate(xl, yt, wnew, hnew); boxSetGeometry(boxd, xl, yt, wnew, hnew); return boxd; } /*! * boxaSetSide() * * Input: boxad (use null to get a new one; same as boxas for in-place) * boxas * side (L_SET_LEFT, L_SET_RIGHT, L_SET_TOP, L_SET_BOT) * val (location to set for given side, for each box) * thresh (min abs difference to cause resetting to @val) * Return: boxad, or null on error * * Notes: * (1) Sets the given side of each box. Use boxad == NULL for a new * boxa, and boxad == boxas for in-place. * (2) Use one of these: * boxad = boxaSetSide(NULL, boxas, ...); // new * boxaSetSide(boxas, boxas, ...); // in-place */ BOXA * boxaSetSide(BOXA *boxad, BOXA *boxas, l_int32 side, l_int32 val, l_int32 thresh) { l_int32 x, y, w, h, n, i, diff; BOX *box; PROCNAME("boxaSetSide"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (boxad && (boxas != boxad)) return (BOXA *)ERROR_PTR("not in-place", procName, NULL); if (side != L_SET_LEFT && side != L_SET_RIGHT && side != L_SET_TOP && side != L_SET_BOT) return (BOXA *)ERROR_PTR("invalid side", procName, NULL); if (val < 0) return (BOXA *)ERROR_PTR("val < 0", procName, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); n = boxaGetCount(boxad); for (i = 0; i < n; i++) { box = boxaGetBox(boxad, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); if (side == L_SET_LEFT) { diff = x - val; if (L_ABS(diff) >= thresh) boxSetGeometry(box, val, y, w + diff, h); } else if (side == L_SET_RIGHT) { diff = x + w -1 - val; if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, y, val - x + 1, h); } else if (side == L_SET_TOP) { diff = y - val; if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, val, w, h + diff); } else { /* side == L_SET_BOT */ diff = y + h - 1 - val; if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, y, w, val - y + 1); } boxDestroy(&box); } return boxad; } /*! * boxaAdjustWidthToTarget() * * Input: boxad (use null to get a new one; same as boxas for in-place) * boxas * sides (L_ADJUST_LEFT, L_ADJUST_RIGHT, L_ADJUST_LEFTL_AND_RIGHT) * target (target width if differs by more than thresh) * thresh (min abs difference in width to cause adjustment) * Return: boxad, or null on error * * Notes: * (1) Conditionally adjusts the width of each box, by moving * the indicated edges (left and/or right) if the width differs * by @thresh or more from @target. * (2) Use boxad == NULL for a new boxa, and boxad == boxas for in-place. * Use one of these: * boxad = boxaAdjustWidthToTarget(NULL, boxas, ...); // new * boxaAdjustWidthToTarget(boxas, boxas, ...); // in-place */ BOXA * boxaAdjustWidthToTarget(BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh) { l_int32 x, y, w, h, n, i, diff; BOX *box; PROCNAME("boxaAdjustWidthToTarget"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (boxad && (boxas != boxad)) return (BOXA *)ERROR_PTR("not in-place", procName, NULL); if (sides != L_ADJUST_LEFT && sides != L_ADJUST_RIGHT && sides != L_ADJUST_LEFT_AND_RIGHT) return (BOXA *)ERROR_PTR("invalid sides", procName, NULL); if (target < 1) return (BOXA *)ERROR_PTR("target < 1", procName, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); n = boxaGetCount(boxad); for (i = 0; i < n; i++) { box = boxaGetBox(boxad, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); diff = w - target; if (sides == L_ADJUST_LEFT) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, L_MAX(0, x + diff), y, target, h); } else if (sides == L_ADJUST_RIGHT) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, y, target, h); } else { /* sides == L_ADJUST_LEFT_AND_RIGHT */ if (L_ABS(diff) >= thresh) boxSetGeometry(box, L_MAX(0, x + diff/2), y, target, h); } boxDestroy(&box); } return boxad; } /*! * boxaAdjustHeightToTarget() * * Input: boxad (use null to get a new one) * boxas * sides (L_ADJUST_TOP, L_ADJUST_BOT, L_ADJUST_TOP_AND_BOT) * target (target height if differs by more than thresh) * thresh (min abs difference in height to cause adjustment) * Return: boxad, or null on error * * Notes: * (1) Conditionally adjusts the height of each box, by moving * the indicated edges (top and/or bot) if the height differs * by @thresh or more from @target. * (2) Use boxad == NULL for a new boxa, and boxad == boxas for in-place. * Use one of these: * boxad = boxaAdjustHeightToTarget(NULL, boxas, ...); // new * boxaAdjustHeightToTarget(boxas, boxas, ...); // in-place */ BOXA * boxaAdjustHeightToTarget(BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh) { l_int32 x, y, w, h, n, i, diff; BOX *box; PROCNAME("boxaAdjustHeightToTarget"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (boxad && (boxas != boxad)) return (BOXA *)ERROR_PTR("not in-place", procName, NULL); if (sides != L_ADJUST_TOP && sides != L_ADJUST_BOT && sides != L_ADJUST_TOP_AND_BOT) return (BOXA *)ERROR_PTR("invalid sides", procName, NULL); if (target < 1) return (BOXA *)ERROR_PTR("target < 1", procName, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); n = boxaGetCount(boxad); for (i = 0; i < n; i++) { box = boxaGetBox(boxad, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); diff = h - target; if (sides == L_ADJUST_TOP) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, L_MAX(0, y + diff), w, target); } else if (sides == L_ADJUST_BOT) { if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, y, w, target); } else { /* sides == L_ADJUST_TOP_AND_BOT */ if (L_ABS(diff) >= thresh) boxSetGeometry(box, x, L_MAX(0, y + diff/2), w, target); } boxDestroy(&box); } return boxad; } /*! * boxEqual() * * Input: box1 * box2 * &same ( 1 if equal; 0 otherwise) * Return 0 if OK, 1 on error */ l_int32 boxEqual(BOX *box1, BOX *box2, l_int32 *psame) { PROCNAME("boxEqual"); if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; if (!box1 || !box2) return ERROR_INT("box1 and box2 not both defined", procName, 1); if (box1->x == box2->x && box1->y == box2->y && box1->w == box2->w && box1->h == box2->h) *psame = 1; return 0; } /*! * boxaEqual() * * Input: boxa1 * boxa2 * maxdist * &naindex ( index array of correspondences * &same ( 1 if equal; 0 otherwise) * Return 0 if OK, 1 on error * * Notes: * (1) The two boxa are the "same" if they contain the same * boxes and each box is within @maxdist of its counterpart * in their positions within the boxa. This allows for * small rearrangements. Use 0 for maxdist if the boxa * must be identical. * (2) This applies only to geometry and ordering; refcounts * are not considered. * (3) @maxdist allows some latitude in the ordering of the boxes. * For the boxa to be the "same", corresponding boxes must * be within @maxdist of each other. Note that for large * @maxdist, we should use a hash function for efficiency. * (4) naindex[i] gives the position of the box in boxa2 that * corresponds to box i in boxa1. It is only returned if the * boxa are equal. */ l_int32 boxaEqual(BOXA *boxa1, BOXA *boxa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame) { l_int32 i, j, n, jstart, jend, found, samebox; l_int32 *countarray; BOX *box1, *box2; NUMA *na; PROCNAME("boxaEqual"); if (pnaindex) *pnaindex = NULL; if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; if (!boxa1 || !boxa2) return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); n = boxaGetCount(boxa1); if (n != boxaGetCount(boxa2)) return 0; countarray = (l_int32 *)CALLOC(n, sizeof(l_int32)); na = numaMakeConstant(0.0, n); for (i = 0; i < n; i++) { box1 = boxaGetBox(boxa1, i, L_CLONE); jstart = L_MAX(0, i - maxdist); jend = L_MIN(n-1, i + maxdist); found = FALSE; for (j = jstart; j <= jend; j++) { box2 = boxaGetBox(boxa2, j, L_CLONE); boxEqual(box1, box2, &samebox); if (samebox && countarray[j] == 0) { countarray[j] = 1; numaReplaceNumber(na, i, j); found = TRUE; boxDestroy(&box2); break; } boxDestroy(&box2); } boxDestroy(&box1); if (!found) { numaDestroy(&na); FREE(countarray); return 0; } } *psame = 1; if (pnaindex) *pnaindex = na; else numaDestroy(&na); FREE(countarray); return 0; } /*! * boxSimilar() * * Input: box1 * box2 * leftdiff, rightdiff, topdiff, botdiff * &similar ( 1 if similar; 0 otherwise) * Return 0 if OK, 1 on error * * Notes: * (1) The values of leftdiff (etc) are the maximum allowed deviations * between the locations of the left (etc) sides. If any side * pairs differ by more than this amount, the boxes are not similar. */ l_int32 boxSimilar(BOX *box1, BOX *box2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 *psimilar) { l_int32 loc1, loc2; PROCNAME("boxSimilar"); if (!psimilar) return ERROR_INT("&similar not defined", procName, 1); *psimilar = 0; if (!box1 || !box2) return ERROR_INT("box1 and box2 not both defined", procName, 1); boxGetSideLocation(box1, L_GET_LEFT, &loc1); boxGetSideLocation(box2, L_GET_LEFT, &loc2); if (L_ABS(loc1 - loc2) > leftdiff) return 0; boxGetSideLocation(box1, L_GET_RIGHT, &loc1); boxGetSideLocation(box2, L_GET_RIGHT, &loc2); if (L_ABS(loc1 - loc2) > rightdiff) return 0; boxGetSideLocation(box1, L_GET_TOP, &loc1); boxGetSideLocation(box2, L_GET_TOP, &loc2); if (L_ABS(loc1 - loc2) > topdiff) return 0; boxGetSideLocation(box1, L_GET_BOT, &loc1); boxGetSideLocation(box2, L_GET_BOT, &loc2); if (L_ABS(loc1 - loc2) > botdiff) return 0; *psimilar = 1; return 0; } /*! * boxaSimilar() * * Input: boxa1 * boxa2 * leftdiff, rightdiff, topdiff, botdiff * debugflag (output details of non-similar boxes) * &similar ( 1 if similar; 0 otherwise) * Return 0 if OK, 1 on error * * Notes: * (1) See boxSimilar() for parameter usage. * (2) Corresponding boxes are taken in order in the two boxa. * (3) With debugflag == 1, boxes continue to be tested after failure. */ l_int32 boxaSimilar(BOXA *boxa1, BOXA *boxa2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 debugflag, l_int32 *psimilar) { l_int32 i, n, match, mismatch; BOX *box1, *box2; PROCNAME("boxaSimilar"); if (!psimilar) return ERROR_INT("&similar not defined", procName, 1); *psimilar = 0; if (!boxa1 || !boxa2) return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); n = boxaGetCount(boxa1); if (n != boxaGetCount(boxa2)) return 0; mismatch = FALSE; for (i = 0; i < n; i++) { box1 = boxaGetBox(boxa1, i, L_CLONE); box2 = boxaGetBox(boxa2, i, L_CLONE); boxSimilar(box1, box2, leftdiff, rightdiff, topdiff, botdiff, &match); boxDestroy(&box1); boxDestroy(&box2); if (!match) { mismatch = TRUE; if (debugflag) fprintf(stderr, "box %d not similar\n", i); else return 0; } } if (!mismatch) *psimilar = 1; return 0; } /*----------------------------------------------------------------------* * Boxa combine and split * *----------------------------------------------------------------------*/ /*! * boxaJoin() * * Input: boxad (dest boxa; add to this one) * boxas (source boxa; add from this one) * istart (starting index in boxas) * iend (ending index in boxas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) This appends a clone of each indicated box in boxas to boxad * (2) istart < 0 is taken to mean 'read from the start' (istart = 0) * (3) iend < 0 means 'read to the end' * (4) if boxas == NULL or has no boxes, this is a no-op. */ l_int32 boxaJoin(BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend) { l_int32 n, i; BOX *box; PROCNAME("boxaJoin"); if (!boxad) return ERROR_INT("boxad not defined", procName, 1); if (!boxas || ((n = boxaGetCount(boxas)) == 0)) return 0; if (istart < 0) istart = 0; if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", procName, 1); for (i = istart; i <= iend; i++) { box = boxaGetBox(boxas, i, L_CLONE); boxaAddBox(boxad, box, L_INSERT); } return 0; } /*! * boxaaJoin() * * Input: baad (dest boxaa; add to this one) * baas (source boxaa; add from this one) * istart (starting index in baas) * iend (ending index in baas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) This appends a clone of each indicated boxa in baas to baad * (2) istart < 0 is taken to mean 'read from the start' (istart = 0) * (3) iend < 0 means 'read to the end' * (4) if baas == NULL, this is a no-op. */ l_int32 boxaaJoin(BOXAA *baad, BOXAA *baas, l_int32 istart, l_int32 iend) { l_int32 n, i; BOXA *boxa; PROCNAME("boxaaJoin"); if (!baad) return ERROR_INT("baad not defined", procName, 1); if (!baas) return 0; if (istart < 0) istart = 0; n = boxaaGetCount(baas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", procName, 1); for (i = istart; i <= iend; i++) { boxa = boxaaGetBoxa(baas, i, L_CLONE); boxaaAddBoxa(baad, boxa, L_INSERT); } return 0; } /*! * boxaSplitEvenOdd() * * Input: boxa * fillflag (1 to put invalid boxes in place; 0 to omit) * &boxae, &boxao ( save even and odd boxes in their * separate boxa, setting the other type to invalid boxes.) * Return: 0 if OK, 1 on error * * Notes: * (1) If @fillflag == 1, boxae has copies of the even boxes * in their original location, and nvalid boxes are placed * in the odd array locations. And v.v. * (2) If @fillflag == 0, boxae has only copies of the even boxes. */ l_int32 boxaSplitEvenOdd(BOXA *boxa, l_int32 fillflag, BOXA **pboxae, BOXA **pboxao) { l_int32 i, n; BOX *box, *boxt; PROCNAME("boxaSplitEvenOdd"); if (!pboxae || !pboxao) return ERROR_INT("&boxae and &boxao not defined", procName, 1); *pboxae = *pboxao = NULL; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); *pboxae = boxaCreate(n); *pboxao = boxaCreate(n); if (fillflag == 0) { /* don't fill with invalid boxes; end up with half-size boxa */ for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_COPY); if ((i & 1) == 0) boxaAddBox(*pboxae, box, L_INSERT); else boxaAddBox(*pboxao, box, L_INSERT); } } else { for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_COPY); boxt = boxCreate(0, 0, 0, 0); /* empty placeholder */ if ((i & 1) == 0) { boxaAddBox(*pboxae, box, L_INSERT); boxaAddBox(*pboxao, boxt, L_INSERT); } else { boxaAddBox(*pboxae, boxt, L_INSERT); boxaAddBox(*pboxao, box, L_INSERT); } } } return 0; } /*! * boxaMergeEvenOdd() * * Input: boxae (boxes to go in even positions in merged boxa) * boxao (boxes to go in odd positions in merged boxa) * fillflag (1 if there are invalid boxes in placeholders) * Return: boxad (merged), or null on error * * Notes: * (1) This is essentially the inverse of boxaSplitEvenOdd(). * Typically, boxae and boxao were generated by boxaSplitEvenOdd(), * and the value of @fillflag needs to be the same in both calls. * (2) If @fillflag == 1, both boxae and boxao are of the same size; * otherwise boxae may have one more box than boxao. */ BOXA * boxaMergeEvenOdd(BOXA *boxae, BOXA *boxao, l_int32 fillflag) { l_int32 i, n, ne, no; BOX *box; BOXA *boxad; PROCNAME("boxaMergeEvenOdd"); if (!boxae || !boxao) return (BOXA *)ERROR_PTR("boxae and boxao not defined", procName, NULL); ne = boxaGetCount(boxae); no = boxaGetCount(boxao); if (ne < no || ne > no + 1) return (BOXA *)ERROR_PTR("boxa sizes invalid", procName, NULL); boxad = boxaCreate(ne); if (fillflag == 0) { /* both are approx. half-sized; all valid boxes */ n = ne + no; for (i = 0; i < n; i++) { if ((i & 1) == 0) box = boxaGetBox(boxae, i / 2, L_COPY); else box = boxaGetBox(boxao, i / 2, L_COPY); boxaAddBox(boxad, box, L_INSERT); } } else { /* both are full size and have invalid placeholders */ for (i = 0; i < ne; i++) { if ((i & 1) == 0) box = boxaGetBox(boxae, i, L_COPY); else box = boxaGetBox(boxao, i, L_COPY); boxaAddBox(boxad, box, L_INSERT); } } return boxad; } leptonica-1.70/src/convolvelow.c0000640000175000017500000004267612244235265015035 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convolvelow.c * * Grayscale block convolution * void blockconvLow() * void blockconvAccumLow() * * Binary block sum and rank filter * void blocksumLow() */ #include "allheaders.h" /*----------------------------------------------------------------------* * Grayscale Block Convolution * *----------------------------------------------------------------------*/ /*! * blockconvLow() * * Input: data (data of input image, to be convolved) * w, h, wpl * dataa (data of 32 bpp accumulator) * wpla (accumulator) * wc (convolution "half-width") * hc (convolution "half-height") * Return: void * * Notes: * (1) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1). * (2) The lack of symmetry between the handling of the * first (hc + 1) lines and the last (hc) lines, * and similarly with the columns, is due to fact that * for the pixel at (x,y), the accumulator values are * taken at (x + wc, y + hc), (x - wc - 1, y + hc), * (x + wc, y - hc - 1) and (x - wc - 1, y - hc - 1). * (3) We compute sums, normalized as if there were no reduced * area at the boundary. This under-estimates the value * of the boundary pixels, so we multiply them by another * normalization factor that is greater than 1. * (4) This second normalization is done first for the first * hc + 1 lines; then for the last hc lines; and finally * for the first wc + 1 and last wc columns in the intermediate * lines. * (5) The caller should verify that wc < w and hc < h. * Under those conditions, illegal reads and writes can occur. * (6) Implementation note: to get the same results in the interior * between this function and pixConvolve(), it is necessary to * add 0.5 for roundoff in the main loop that runs over all pixels. * However, if we do that and have white (255) pixels near the * image boundary, some overflow occurs for pixels very close * to the boundary. We can't fix this by subtracting from the * normalized values for the boundary pixels, because this results * in underflow if the boundary pixels are black (0). Empirically, * adding 0.25 (instead of 0.5) before truncating in the main * loop will not cause overflow, but this gives some * off-by-1-level errors in interior pixel values. So we add * 0.5 for roundoff in the main loop, and for pixels within a * half filter width of the boundary, use a L_MIN of the * computed value and 255 to avoid overflow during normalization. */ void blockconvLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc) { l_int32 i, j, imax, imin, jmax, jmin; l_int32 wn, hn, fwc, fhc, wmwc, hmhc; l_float32 norm, normh, normw; l_uint32 val; l_uint32 *linemina, *linemaxa, *line; PROCNAME("blockconvLow"); wmwc = w - wc; hmhc = h - hc; if (wmwc <= 0 || hmhc <= 0) { L_ERROR("wc >= w || hc >=h\n", procName); return; } fwc = 2 * wc + 1; fhc = 2 * hc + 1; norm = 1. / (fwc * fhc); /*------------------------------------------------------------* * compute, using b.c. only to set limits on the accum image * *------------------------------------------------------------*/ for (i = 0; i < h; i++) { imin = L_MAX(i - 1 - hc, 0); imax = L_MIN(i + hc, h - 1); line = data + wpl * i; linemina = dataa + wpla * imin; linemaxa = dataa + wpla * imax; for (j = 0; j < w; j++) { jmin = L_MAX(j - 1 - wc, 0); jmax = L_MIN(j + wc, w - 1); val = linemaxa[jmax] - linemaxa[jmin] + linemina[jmin] - linemina[jmax]; val = (l_uint8)(norm * val + 0.5); /* see comment above */ SET_DATA_BYTE(line, j, val); } } /*------------------------------------------------------------* * now fix normalization for boundary pixels * *------------------------------------------------------------*/ for (i = 0; i <= hc; i++) { /* first hc + 1 lines */ hn = hc + i; normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ line = data + wpl * i; for (j = 0; j <= wc; j++) { wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh, 255); SET_DATA_BYTE(line, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } } for (i = hmhc; i < h; i++) { /* last hc lines */ hn = hc + h - i; normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ line = data + wpl * i; for (j = 0; j <= wc; j++) { wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh, 255); SET_DATA_BYTE(line, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normh * normw, 255); SET_DATA_BYTE(line, j, val); } } for (i = hc + 1; i < hmhc; i++) { /* intermediate lines */ line = data + wpl * i; for (j = 0; j <= wc; j++) { /* first wc + 1 columns */ wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normw, 255); SET_DATA_BYTE(line, j, val); } for (j = wmwc; j < w; j++) { /* last wc columns */ wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(line, j); val = (l_uint8)L_MIN(val * normw, 255); SET_DATA_BYTE(line, j, val); } } return; } /* * blockconvAccumLow() * * Input: datad (32 bpp dest) * w, h, wpld (of 32 bpp dest) * datas (1, 8 or 32 bpp src) * d (bpp of src) * wpls (of src) * Return: void * * Notes: * (1) The general recursion relation is * a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1) * For the first line, this reduces to the special case * a(i,j) = v(i,j) + a(i, j-1) * For the first column, the special case is * a(i,j) = v(i,j) + a(i-1, j) */ void blockconvAccumLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls) { l_uint8 val; l_int32 i, j; l_uint32 val32; l_uint32 *lines, *lined, *linedp; PROCNAME("blockconvAccumLow"); lines = datas; lined = datad; if (d == 1) { /* Do the first line */ for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if (j == 0) lined[0] = val; else lined[j] = lined[j - 1] + val; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* curr dest line */ linedp = lined - wpld; /* prev dest line */ for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if (j == 0) lined[0] = val + linedp[0]; else lined[j] = val + lined[j - 1] + linedp[j] - linedp[j - 1]; } } } else if (d == 8) { /* Do the first line */ for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (j == 0) lined[0] = val; else lined[j] = lined[j - 1] + val; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* curr dest line */ linedp = lined - wpld; /* prev dest line */ for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (j == 0) lined[0] = val + linedp[0]; else lined[j] = val + lined[j - 1] + linedp[j] - linedp[j - 1]; } } } else if (d == 32) { /* Do the first line */ for (j = 0; j < w; j++) { val32 = lines[j]; if (j == 0) lined[0] = val32; else lined[j] = lined[j - 1] + val32; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* curr dest line */ linedp = lined - wpld; /* prev dest line */ for (j = 0; j < w; j++) { val32 = lines[j]; if (j == 0) lined[0] = val32 + linedp[0]; else lined[j] = val32 + lined[j - 1] + linedp[j] - linedp[j - 1]; } } } else { L_ERROR("depth not 1, 8 or 32 bpp\n", procName); } return; } /*----------------------------------------------------------------------* * Binary Block Sum/Rank * *----------------------------------------------------------------------*/ /*! * blocksumLow() * * Input: datad (of 8 bpp dest) * w, h, wpl (of 8 bpp dest) * dataa (of 32 bpp accum) * wpla (of 32 bpp accum) * wc, hc (convolution "half-width" and "half-height") * Return: void * * Notes: * (1) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1). * (2) The lack of symmetry between the handling of the * first (hc + 1) lines and the last (hc) lines, * and similarly with the columns, is due to fact that * for the pixel at (x,y), the accumulator values are * taken at (x + wc, y + hc), (x - wc - 1, y + hc), * (x + wc, y - hc - 1) and (x - wc - 1, y - hc - 1). * (3) Compute sums of ON pixels within the block filter size, * normalized between 0 and 255, as if there were no reduced * area at the boundary. This under-estimates the value * of the boundary pixels, so we multiply them by another * normalization factor that is greater than 1. * (4) This second normalization is done first for the first * hc + 1 lines; then for the last hc lines; and finally * for the first wc + 1 and last wc columns in the intermediate * lines. * (5) The caller should verify that wc < w and hc < h. * Under those conditions, illegal reads and writes can occur. */ void blocksumLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc) { l_int32 i, j, imax, imin, jmax, jmin; l_int32 wn, hn, fwc, fhc, wmwc, hmhc; l_float32 norm, normh, normw; l_uint32 val; l_uint32 *linemina, *linemaxa, *lined; PROCNAME("blocksumLow"); wmwc = w - wc; hmhc = h - hc; if (wmwc <= 0 || hmhc <= 0) { L_ERROR("wc >= w || hc >=h\n", procName); return; } fwc = 2 * wc + 1; fhc = 2 * hc + 1; norm = 255. / (fwc * fhc); /*------------------------------------------------------------* * compute, using b.c. only to set limits on the accum image * *------------------------------------------------------------*/ for (i = 0; i < h; i++) { imin = L_MAX(i - 1 - hc, 0); imax = L_MIN(i + hc, h - 1); lined = datad + wpl * i; linemina = dataa + wpla * imin; linemaxa = dataa + wpla * imax; for (j = 0; j < w; j++) { jmin = L_MAX(j - 1 - wc, 0); jmax = L_MIN(j + wc, w - 1); val = linemaxa[jmax] - linemaxa[jmin] - linemina[jmax] + linemina[jmin]; val = (l_uint8)(norm * val); SET_DATA_BYTE(lined, j, val); } } /*------------------------------------------------------------* * now fix normalization for boundary pixels * *------------------------------------------------------------*/ for (i = 0; i <= hc; i++) { /* first hc + 1 lines */ hn = hc + i; normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ lined = datad + wpl * i; for (j = 0; j <= wc; j++) { wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh); SET_DATA_BYTE(lined, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } } for (i = hmhc; i < h; i++) { /* last hc lines */ hn = hc + h - i; normh = (l_float32)fhc / (l_float32)hn; /* > 1 */ lined = datad + wpl * i; for (j = 0; j <= wc; j++) { wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } for (j = wc + 1; j < wmwc; j++) { val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh); SET_DATA_BYTE(lined, j, val); } for (j = wmwc; j < w; j++) { wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normh * normw); SET_DATA_BYTE(lined, j, val); } } for (i = hc + 1; i < hmhc; i++) { /* intermediate lines */ lined = datad + wpl * i; for (j = 0; j <= wc; j++) { /* first wc + 1 columns */ wn = wc + j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normw); SET_DATA_BYTE(lined, j, val); } for (j = wmwc; j < w; j++) { /* last wc columns */ wn = wc + w - j; normw = (l_float32)fwc / (l_float32)wn; /* > 1 */ val = GET_DATA_BYTE(lined, j); val = (l_uint8)(val * normw); SET_DATA_BYTE(lined, j, val); } } return; } leptonica-1.70/src/seedfill.c0000644000175000017500000017346412244230733014246 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * seedfill.c * * Binary seedfill (source: Luc Vincent) * PIX *pixSeedfillBinary() * PIX *pixSeedfillBinaryRestricted() * * Applications of binary seedfill to find and fill holes, * remove c.c. touching the border and fill bg from border: * PIX *pixHolesByFilling() * PIX *pixFillClosedBorders() * PIX *pixExtractBorderConnComps() * PIX *pixRemoveBorderConnComps() * PIX *pixFillBgFromBorder() * * Hole-filling of components to bounding rectangle * PIX *pixFillHolesToBoundingRect() * * Gray seedfill (source: Luc Vincent:fast-hybrid-grayscale-reconstruction) * l_int32 pixSeedfillGray() * l_int32 pixSeedfillGrayInv() * * Gray seedfill (source: Luc Vincent: sequential-reconstruction algorithm) * l_int32 pixSeedfillGraySimple() * l_int32 pixSeedfillGrayInvSimple() * * Gray seedfill variations * PIX *pixSeedfillGrayBasin() * * Distance function (source: Luc Vincent) * PIX *pixDistanceFunction() * * Seed spread (based on distance function) * PIX *pixSeedspread() * * Local extrema: * l_int32 pixLocalExtrema() * static l_int32 pixQualifyLocalMinima() * l_int32 pixSelectedLocalExtrema() * PIX *pixFindEqualValues() * * Selection of minima in mask of connected components * PTA *pixSelectMinInConnComp() * * Removal of seeded connected components from a mask * PIX *pixRemoveSeededComponents() * * * ITERATIVE RASTER-ORDER SEEDFILL * * The basic method in the Vincent seedfill (aka reconstruction) * algorithm is simple. We describe here the situation for * binary seedfill. Pixels are sampled in raster order in * the seed image. If they are 4-connected to ON pixels * either directly above or to the left, and are not masked * out by the mask image, they are turned on (or remain on). * (Ditto for 8-connected, except you need to check 3 pixels * on the previous line as well as the pixel to the left * on the current line. This is extra computational work * for relatively little gain, so it is preferable * in most situations to use the 4-connected version.) * The algorithm proceeds from UR to LL of the image, and * then reverses and sweeps up from LL to UR. * These double sweeps are iterated until there is no change. * At this point, the seed has entirely filled the region it * is allowed to, as delimited by the mask image. * * The grayscale seedfill is a straightforward generalization * of the binary seedfill, and is described in seedfillLowGray(). * * For some applications, the filled seed will later be OR'd * with the negative of the mask. This is used, for example, * when you flood fill into a 4-connected region of OFF pixels * and you want the result after those pixels are turned ON. * * Note carefully that the mask we use delineates which pixels * are allowed to be ON as the seed is filled. We will call this * a "filling mask". As the seed expands, it is repeatedly * ANDed with the filling mask: s & fm. The process can equivalently * be formulated using the inverse of the filling mask, which * we will call a "blocking mask": bm = ~fm. As the seed * expands, the blocking mask is repeatedly used to prevent * the seed from expanding into the blocking mask. This is done * by set subtracting the blocking mask from the expanded seed: * s - bm. Set subtraction of the blocking mask is equivalent * to ANDing with the inverse of the blocking mask: s & (~bm). * But from the inverse relation between blocking and filling * masks, this is equal to s & fm, which proves the equivalence. * * For efficiency, the pixels can be taken in larger units * for processing, but still in raster order. It is natural * to take them in 32-bit words. The outline of the work * to be done for 4-cc (not including special cases for boundary * words, such as the first line or the last word in each line) * is as follows. Let the filling mask be m. The * seed is to fill "under" the mask; i.e., limited by an AND * with the mask. Let the current word be w, the word * in the line above be wa, and the previous word in the * current line be wp. Let t be a temporary word that * is used in computation. Note that masking is performed by * w & m. (If we had instead used a "blocking" mask, we * would perform masking by the set subtraction operation, * w - m, which is defined to be w & ~m.) * * The entire operation can be implemented with shifts, * logical operations and tests. For each word in the seed image * there are two steps. The first step is to OR the word with * the word above and with the rightmost pixel in wp (call it "x"). * Because wp is shifted one pixel to its right, "x" is ORed * to the leftmost pixel of w. We then clip to the ON pixels in * the mask. The result is * t <-- (w | wa | x000... ) & m * We've now finished taking data from above and to the left. * The second step is to allow filling to propagate horizontally * in t, always making sure that it is properly masked at each * step. So if filling can be done (i.e., t is neither all 0s * nor all 1s), iteratively take: * t <-- (t | (t >> 1) | (t << 1)) & m * until t stops changing. Then write t back into w. * * Finally, the boundary conditions require we note that in doing * the above steps: * (a) The words in the first row have no wa * (b) The first word in each row has no wp in that row * (c) The last word in each row must be masked so that * pixels don't propagate beyond the right edge of the * actual image. (This is easily accomplished by * setting the out-of-bound pixels in m to OFF.) */ #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_PRINT_ITERS 0 #endif /* ~NO_CONSOLE_IO */ /* Two-way (UL --> LR, LR --> UL) sweep iterations; typically need only 4 */ static const l_int32 MAX_ITERS = 40; /* Static function */ static l_int32 pixQualifyLocalMinima(PIX *pixs, PIX *pixm, l_int32 maxval); /*-----------------------------------------------------------------------* * Vincent's Iterative Binary Seedfill method * *-----------------------------------------------------------------------*/ /*! * pixSeedfillBinary() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs; 1 bpp) * pixs (1 bpp seed) * pixm (1 bpp filling mask) * connectivity (4 or 8) * Return: pixd always * * Notes: * (1) This is for binary seedfill (aka "binary reconstruction"). * (2) There are 3 cases: * (a) pixd == null (make a new pixd) * (b) pixd == pixs (in-place) * (c) pixd != pixs * (3) If you know the case, use these patterns for clarity: * (a) pixd = pixSeedfillBinary(NULL, pixs, ...); * (b) pixSeedfillBinary(pixs, pixs, ...); * (c) pixSeedfillBinary(pixd, pixs, ...); * (4) The resulting pixd contains the filled seed. For some * applications you want to OR it with the inverse of * the filling mask. * (5) The input seed and mask images can be different sizes, but * in typical use the difference, if any, would be only * a few pixels in each direction. If the sizes differ, * the clipping is handled by the low-level function * seedfillBinaryLow(). */ PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 i, boolval; l_int32 hd, hm, wpld, wplm; l_uint32 *datad, *datam; PIX *pixt; PROCNAME("pixSeedfillBinary"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, pixd); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, pixd); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not in {4,8}", procName, pixd); /* Prepare pixd as a copy of pixs if not identical */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); /* pixt is used to test for completion */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); hd = pixGetHeight(pixd); hm = pixGetHeight(pixm); /* included so seedfillBinaryLow() can clip */ datad = pixGetData(pixd); datam = pixGetData(pixm); wpld = pixGetWpl(pixd); wplm = pixGetWpl(pixm); pixSetPadBits(pixm, 0); for (i = 0; i < MAX_ITERS; i++) { pixCopy(pixt, pixd); seedfillBinaryLow(datad, hd, wpld, datam, hm, wplm, connectivity); pixEqual(pixd, pixt, &boolval); if (boolval == 1) { #if DEBUG_PRINT_ITERS fprintf(stderr, "Binary seed fill converged: %d iters\n", i + 1); #endif /* DEBUG_PRINT_ITERS */ break; } } pixDestroy(&pixt); return pixd; } /*! * pixSeedfillBinaryRestricted() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs; 1 bpp) * pixs (1 bpp seed) * pixm (1 bpp filling mask) * connectivity (4 or 8) * xmax (max distance in x direction of fill into the mask) * ymax (max distance in y direction of fill into the mask) * Return: pixd always * * Notes: * (1) See usage for pixSeedfillBinary(), which has unrestricted fill. * In pixSeedfillBinary(), the filling distance is unrestricted * and can be larger than pixs, depending on the topology of * th mask. * (2) There are occasions where it is useful not to permit the * fill to go more than a certain distance into the mask. * @xmax specifies the maximum horizontal distance allowed * in the fill; @ymax does likewise in the vertical direction. * (3) Operationally, the max "distance" allowed for the fill * is a linear distance from the original seed, independent * of the actual mask topology. * (4) Another formulation of this problem, not implemented, * would use the manhattan distance from the seed, as * determined by a breadth-first search starting at the seed * boundaries and working outward where the mask fg allows. * How this might use the constraints of separate xmax and ymax * is not clear. */ PIX * pixSeedfillBinaryRestricted(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 xmax, l_int32 ymax) { l_int32 w, h; PIX *pixr, *pixt; PROCNAME("pixSeedfillBinaryRestricted"); if (xmax <= 0 && ymax <= 0) /* no filling permitted */ return pixClone(pixs); if (xmax < 0 || ymax < 0) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); /* Full fill from the seed into the mask. */ if ((pixt = pixSeedfillBinary(NULL, pixs, pixm, connectivity)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); /* Dilate the seed. This gives the maximal region where changes * are permitted. Invert to get the region where pixs is * not allowed to change. */ pixr = pixDilateCompBrick(NULL, pixs, 2 * xmax + 1, 2 * ymax + 1); pixInvert(pixr, pixr); /* Blank the region of pixt specified by the fg of pixr. * This is not the final result, because it may have fg that * is not accessible from the seed in the restricted distance. * There we treat this as a new mask, and eliminate the * bad fg regions by doing a second seedfill from the original seed. */ pixGetDimensions(pixs, &w, &h, NULL); pixRasterop(pixt, 0, 0, w, h, PIX_DST & PIX_NOT(PIX_SRC), pixr, 0, 0); /* Fill again from the seed, into this new mask. */ pixd = pixSeedfillBinary(pixd, pixs, pixt, connectivity); pixDestroy(&pixt); pixDestroy(&pixr); return pixd; } /*! * pixHolesByFilling() * * Input: pixs (1 bpp) * connectivity (4 or 8) * Return: pixd (inverted image of all holes), or null on error * * Action: * (1) Start with 1-pixel black border on otherwise white pixd * (2) Use the inverted pixs as the filling mask to fill in * all the pixels from the border to the pixs foreground * (3) OR the result with pixs to have an image with all * ON pixels except for the holes. * (4) Invert the result to get the holes as foreground * * Notes: * (1) To get 4-c.c. holes of the 8-c.c. as foreground, use * 4-connected filling; to get 8-c.c. holes of the 4-c.c. * as foreground, use 8-connected filling. */ PIX * pixHolesByFilling(PIX *pixs, l_int32 connectivity) { PIX *pixsi, *pixd; PROCNAME("pixHolesByFilling"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); if ((pixsi = pixInvert(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixsi not made", procName, NULL); pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); pixSeedfillBinary(pixd, pixd, pixsi, connectivity); pixOr(pixd, pixd, pixs); pixInvert(pixd, pixd); pixDestroy(&pixsi); return pixd; } /*! * pixFillClosedBorders() * * Input: pixs (1 bpp) * filling connectivity (4 or 8) * Return: pixd (all topologically outer closed borders are filled * as connected comonents), or null on error * * Notes: * (1) Start with 1-pixel black border on otherwise white pixd * (2) Subtract input pixs to remove border pixels that were * also on the closed border * (3) Use the inverted pixs as the filling mask to fill in * all the pixels from the outer border to the closed border * on pixs * (4) Invert the result to get the filled component, including * the input border * (5) If the borders are 4-c.c., use 8-c.c. filling, and v.v. * (6) Closed borders within c.c. that represent holes, etc., are filled. */ PIX * pixFillClosedBorders(PIX *pixs, l_int32 connectivity) { PIX *pixsi, *pixd; PROCNAME("pixFillClosedBorders"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); pixSubtract(pixd, pixd, pixs); if ((pixsi = pixInvert(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixsi not made", procName, NULL); pixSeedfillBinary(pixd, pixd, pixsi, connectivity); pixInvert(pixd, pixd); pixDestroy(&pixsi); return pixd; } /*! * pixExtractBorderConnComps() * * Input: pixs (1 bpp) * filling connectivity (4 or 8) * Return: pixd (all pixels in the src that are in connected * components touching the border), or null on error */ PIX * pixExtractBorderConnComps(PIX *pixs, l_int32 connectivity) { PIX *pixd; PROCNAME("pixExtractBorderConnComps"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); /* Start with 1 pixel wide black border as seed in pixd */ if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixSetOrClearBorder(pixd, 1, 1, 1, 1, PIX_SET); /* Fill in pixd from the seed, using pixs as the filling mask. * This fills all components from pixs that are touching the border. */ pixSeedfillBinary(pixd, pixd, pixs, connectivity); return pixd; } /*! * pixRemoveBorderConnComps() * * Input: pixs (1 bpp) * filling connectivity (4 or 8) * Return: pixd (all pixels in the src that are not touching the * border) or null on error * * Notes: * (1) This removes all fg components touching the border. */ PIX * pixRemoveBorderConnComps(PIX *pixs, l_int32 connectivity) { PIX *pixd; PROCNAME("pixRemoveBorderConnComps"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); /* Fill from a 1 pixel wide seed at the border into all components * in pixs (the filling mask) that are touching the border */ pixd = pixExtractBorderConnComps(pixs, connectivity); /* Save in pixd only those components in pixs not touching the border */ pixXor(pixd, pixd, pixs); return pixd; } /*! * pixFillBgFromBorder() * * Input: pixs (1 bpp) * filling connectivity (4 or 8) * Return: pixd (with the background c.c. touching the border * filled to foreground), or null on error * * Notes: * (1) This fills all bg components touching the border to fg. * It is the photometric inverse of pixRemoveBorderConnComps(). * (2) Invert the result to get the "holes" left after this fill. * This can be done multiple times, extracting holes within * holes after each pair of fillings. Specifically, this code * peels away n successive embeddings of components: * pix1 = * for (i = 0; i < 2 * n; i++) { * pix2 = pixFillBgFromBorder(pix1, 8); * pixInvert(pix2, pix2); * pixDestroy(&pix1); * pix1 = pix2; * } */ PIX * pixFillBgFromBorder(PIX *pixs, l_int32 connectivity) { PIX *pixd; PROCNAME("pixFillBgFromBorder"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); /* Invert to turn bg touching the border to a fg component. * Extract this by filling from a 1 pixel wide seed at the border. */ pixInvert(pixs, pixs); pixd = pixExtractBorderConnComps(pixs, connectivity); pixInvert(pixs, pixs); /* restore pixs */ /* Bit-or the filled bg component with pixs */ pixOr(pixd, pixd, pixs); return pixd; } /*-----------------------------------------------------------------------* * Hole-filling of components to bounding rectangle * *-----------------------------------------------------------------------*/ /*! * pixFillHolesToBoundingRect() * * Input: pixs (1 bpp) * minsize (min number of pixels in the hole) * maxhfract (max hole area as fraction of fg pixels in the cc) * minfgfract (min fg area as fraction of bounding rectangle) * Return: pixd (pixs, with some holes possibly filled and some c.c. * possibly expanded to their bounding rects), * or null on error * * Notes: * (1) This does not fill holes that are smaller in area than 'minsize'. * (2) This does not fill holes with an area larger than * 'maxhfract' times the fg area of the c.c. * (3) This does not expand the fg of the c.c. to bounding rect if * the fg area is less than 'minfgfract' times the area of the * bounding rect. * (4) The decisions are made as follows: * - Decide if we are filling the holes; if so, when using * the fg area, include the filled holes. * - Decide based on the fg area if we are filling to a bounding rect. * If so, do it. * If not, fill the holes if the condition is satisfied. * (5) The choice of minsize depends on the resolution. * (6) For solidifying image mask regions on printed materials, * which tend to be rectangular, values for maxhfract * and minfgfract around 0.5 are reasonable. */ PIX * pixFillHolesToBoundingRect(PIX *pixs, l_int32 minsize, l_float32 maxhfract, l_float32 minfgfract) { l_int32 i, x, y, w, h, n, nfg, nh, ntot, area; l_int32 *tab; l_float32 hfract; /* measured hole fraction */ l_float32 fgfract; /* measured fg fraction */ BOXA *boxa; PIX *pixd, *pixfg, *pixh; PIXA *pixa; PROCNAME("pixFillHolesToBoundingRect"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); pixd = pixCopy(NULL, pixs); boxa = pixConnComp(pixd, &pixa, 8); n = boxaGetCount(boxa); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); area = w * h; if (area < minsize) continue; pixfg = pixaGetPix(pixa, i, L_COPY); pixh = pixHolesByFilling(pixfg, 4); /* holes only */ pixCountPixels(pixfg, &nfg, tab); pixCountPixels(pixh, &nh, tab); hfract = (l_float32)nh / (l_float32)nfg; ntot = nfg; if (hfract <= maxhfract) /* we will fill the holes (at least) */ ntot = nfg + nh; fgfract = (l_float32)ntot / (l_float32)area; if (fgfract >= minfgfract) { /* fill to bounding rect */ pixSetAll(pixfg); pixRasterop(pixd, x, y, w, h, PIX_SRC, pixfg, 0, 0); } else if (hfract <= maxhfract) { /* fill just the holes */ pixRasterop(pixd, x, y, w, h, PIX_DST | PIX_SRC , pixh, 0, 0); } pixDestroy(&pixfg); pixDestroy(&pixh); } boxaDestroy(&boxa); pixaDestroy(&pixa); FREE(tab); return pixd; } /*-----------------------------------------------------------------------* * Vincent's hybrid Grayscale Seedfill method * *-----------------------------------------------------------------------*/ /*! * pixSeedfillGray() * * Input: pixs (8 bpp seed; filled in place) * pixm (8 bpp filling mask) * connectivity (4 or 8) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place filling operation on the seed, pixs, * where the clipping mask is always above or at the level * of the seed as it is filled. * (2) For details of the operation, see the description in * seedfillGrayLow() and the code there. * (3) As an example of use, see the description in pixHDome(). * There, the seed is an image where each pixel is a fixed * amount smaller than the corresponding mask pixel. * (4) Reference paper : * L. Vincent, Morphological grayscale reconstruction in image * analysis: applications and efficient algorithms, IEEE Transactions * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. */ l_int32 pixSeedfillGray(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 h, w, wpls, wplm; l_uint32 *datas, *datam; PROCNAME("pixSeedfillGray"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", procName, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", procName, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); seedfillGrayLow(datas, w, h, wpls, datam, wplm, connectivity); return 0; } /*! * pixSeedfillGrayInv() * * Input: pixs (8 bpp seed; filled in place) * pixm (8 bpp filling mask) * connectivity (4 or 8) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place filling operation on the seed, pixs, * where the clipping mask is always below or at the level * of the seed as it is filled. Think of filling up a basin * to a particular level, given by the maximum seed value * in the basin. Outside the filled region, the mask * is above the filling level. * (2) Contrast this with pixSeedfillGray(), where the clipping mask * is always above or at the level of the fill. An example * of its use is the hdome fill, where the seed is an image * where each pixel is a fixed amount smaller than the * corresponding mask pixel. * (3) The basin fill, pixSeedfillGrayBasin(), is a special case * where the seed pixel values are generated from the mask, * and where the implementation uses pixSeedfillGray() by * inverting both the seed and mask. */ l_int32 pixSeedfillGrayInv(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 h, w, wpls, wplm; l_uint32 *datas, *datam; PROCNAME("pixSeedfillGrayInv"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", procName, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", procName, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); seedfillGrayInvLow(datas, w, h, wpls, datam, wplm, connectivity); return 0; } /*-----------------------------------------------------------------------* * Vincent's Iterative Grayscale Seedfill method * *-----------------------------------------------------------------------*/ /*! * pixSeedfillGraySimple() * * Input: pixs (8 bpp seed; filled in place) * pixm (8 bpp filling mask) * connectivity (4 or 8) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place filling operation on the seed, pixs, * where the clipping mask is always above or at the level * of the seed as it is filled. * (2) For details of the operation, see the description in * seedfillGrayLowSimple() and the code there. * (3) As an example of use, see the description in pixHDome(). * There, the seed is an image where each pixel is a fixed * amount smaller than the corresponding mask pixel. * (4) Reference paper : * L. Vincent, Morphological grayscale reconstruction in image * analysis: applications and efficient algorithms, IEEE Transactions * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. */ l_int32 pixSeedfillGraySimple(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 i, h, w, wpls, wplm, boolval; l_uint32 *datas, *datam; PIX *pixt; PROCNAME("pixSeedfillGraySimple"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", procName, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", procName, 1); /* This is used to test for completion */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return ERROR_INT("pixt not made", procName, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < MAX_ITERS; i++) { pixCopy(pixt, pixs); seedfillGrayLowSimple(datas, w, h, wpls, datam, wplm, connectivity); pixEqual(pixs, pixt, &boolval); if (boolval == 1) { #if DEBUG_PRINT_ITERS L_INFO("Gray seed fill converged: %d iters\n", procName, i + 1); #endif /* DEBUG_PRINT_ITERS */ break; } } pixDestroy(&pixt); return 0; } /*! * pixSeedfillGrayInvSimple() * * Input: pixs (8 bpp seed; filled in place) * pixm (8 bpp filling mask) * connectivity (4 or 8) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place filling operation on the seed, pixs, * where the clipping mask is always below or at the level * of the seed as it is filled. Think of filling up a basin * to a particular level, given by the maximum seed value * in the basin. Outside the filled region, the mask * is above the filling level. * (2) Contrast this with pixSeedfillGraySimple(), where the clipping mask * is always above or at the level of the fill. An example * of its use is the hdome fill, where the seed is an image * where each pixel is a fixed amount smaller than the * corresponding mask pixel. */ l_int32 pixSeedfillGrayInvSimple(PIX *pixs, PIX *pixm, l_int32 connectivity) { l_int32 i, h, w, wpls, wplm, boolval; l_uint32 *datas, *datam; PIX *pixt; PROCNAME("pixSeedfillGrayInvSimple"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm not defined or not 8 bpp", procName, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not in {4,8}", procName, 1); /* Make sure the sizes of seed and mask images are the same */ if (pixSizesEqual(pixs, pixm) == 0) return ERROR_INT("pixs and pixm sizes differ", procName, 1); /* This is used to test for completion */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return ERROR_INT("pixt not made", procName, 1); datas = pixGetData(pixs); datam = pixGetData(pixm); wpls = pixGetWpl(pixs); wplm = pixGetWpl(pixm); pixGetDimensions(pixs, &w, &h, NULL); for (i = 0; i < MAX_ITERS; i++) { pixCopy(pixt, pixs); seedfillGrayInvLowSimple(datas, w, h, wpls, datam, wplm, connectivity); pixEqual(pixs, pixt, &boolval); if (boolval == 1) { #if DEBUG_PRINT_ITERS L_INFO("Gray seed fill converged: %d iters\n", procName, i + 1); #endif /* DEBUG_PRINT_ITERS */ break; } } pixDestroy(&pixt); return 0; } /*-----------------------------------------------------------------------* * Gray seedfill variations * *-----------------------------------------------------------------------*/ /*! * pixSeedfillGrayBasin() * * Input: pixb (binary mask giving seed locations) * pixm (8 bpp basin-type filling mask) * delta (amount of seed value above mask) * connectivity (4 or 8) * Return: pixd (filled seed) if OK, null on error * * Notes: * (1) This fills from a seed within basins defined by a filling mask. * The seed value(s) are greater than the corresponding * filling mask value, and the result has the bottoms of * the basins raised by the initial seed value. * (2) The seed has value 255 except where pixb has fg (1), which * are the seed 'locations'. At the seed locations, the seed * value is the corresponding value of the mask pixel in pixm * plus @delta. If @delta == 0, we return a copy of pixm. * (3) The actual filling is done using the standard grayscale filling * operation on the inverse of the mask and using the inverse * of the seed image. After filling, we return the inverse of * the filled seed. * (4) As an example of use: pixm can describe a grayscale image * of text, where the (dark) text pixels are basins of * low values; pixb can identify the local minima in pixm (say, at * the bottom of the basins); and delta is the amount that we wish * to raise (lighten) the basins. We construct the seed * (a.k.a marker) image from pixb, pixm and @delta. */ PIX * pixSeedfillGrayBasin(PIX *pixb, PIX *pixm, l_int32 delta, l_int32 connectivity) { PIX *pixbi, *pixmi, *pixsd; PROCNAME("pixSeedfillGrayBasin"); if (!pixb || pixGetDepth(pixb) != 1) return (PIX *)ERROR_PTR("pixb undefined or not 1 bpp", procName, NULL); if (!pixm || pixGetDepth(pixm) != 8) return (PIX *)ERROR_PTR("pixm undefined or not 8 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not in {4,8}", procName, NULL); if (delta <= 0) { L_WARNING("delta <= 0; returning a copy of pixm\n", procName); return pixCopy(NULL, pixm); } /* Add delta to every pixel in pixm */ pixsd = pixCopy(NULL, pixm); pixAddConstantGray(pixsd, delta); /* Prepare the seed. Write 255 in all pixels of * ([pixm] + delta) where pixb is 0. */ pixbi = pixInvert(NULL, pixb); pixSetMasked(pixsd, pixbi, 255); /* Fill the inverse seed, using the inverse clipping mask */ pixmi = pixInvert(NULL, pixm); pixInvert(pixsd, pixsd); pixSeedfillGray(pixsd, pixmi, connectivity); /* Re-invert the filled seed */ pixInvert(pixsd, pixsd); pixDestroy(&pixbi); pixDestroy(&pixmi); return pixsd; } /*-----------------------------------------------------------------------* * Vincent's Distance Function method * *-----------------------------------------------------------------------*/ /*! * pixDistanceFunction() * * Input: pixs (1 bpp source) * connectivity (4 or 8) * outdepth (8 or 16 bits for pixd) * boundcond (L_BOUNDARY_BG, L_BOUNDARY_FG) * Return: pixd, or null on error * * Notes: * (1) This computes the distance of each pixel from the nearest * background pixel. All bg pixels therefore have a distance of 0, * and the fg pixel distances increase linearly from 1 at the * boundary. It can also be used to compute the distance of * each pixel from the nearest fg pixel, by inverting the input * image before calling this function. Then all fg pixels have * a distance 0 and the bg pixel distances increase linearly * from 1 at the boundary. * (2) The algorithm, described in Leptonica on the page on seed * filling and connected components, is due to Luc Vincent. * In brief, we generate an 8 or 16 bpp image, initialized * with the fg pixels of the input pix set to 1 and the * 1-boundary pixels (i.e., the boundary pixels of width 1 on * the four sides set as either: * * L_BOUNDARY_BG: 0 * * L_BOUNDARY_FG: max * where max = 0xff for 8 bpp and 0xffff for 16 bpp. * Then do raster/anti-raster sweeps over all pixels interior * to the 1-boundary, where the value of each new pixel is * taken to be 1 more than the minimum of the previously-seen * connected pixels (using either 4 or 8 connectivity). * Finally, set the 1-boundary pixels using the mirrored method; * this removes the max values there. * (3) Using L_BOUNDARY_BG clamps the distance to 0 at the * boundary. Using L_BOUNDARY_FG allows the distance * at the image boundary to "float". * (4) For 4-connected, one could initialize only the left and top * 1-boundary pixels, and go all the way to the right * and bottom; then coming back reset left and top. But we * instead use a method that works for both 4- and 8-connected. */ PIX * pixDistanceFunction(PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond) { l_int32 w, h, wpld; l_uint32 *datad; PIX *pixd; PROCNAME("pixDistanceFunction"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("!pixs or pixs not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (outdepth != 8 && outdepth != 16) return (PIX *)ERROR_PTR("outdepth not 8 or 16 bpp", procName, NULL); if (boundcond != L_BOUNDARY_BG && boundcond != L_BOUNDARY_FG) return (PIX *)ERROR_PTR("invalid boundcond", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, outdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Initialize the fg pixels to 1 and the bg pixels to 0 */ pixSetMasked(pixd, pixs, 1); if (boundcond == L_BOUNDARY_BG) { distanceFunctionLow(datad, w, h, outdepth, wpld, connectivity); } else { /* L_BOUNDARY_FG: set boundary pixels to max val */ pixRasterop(pixd, 0, 0, w, 1, PIX_SET, NULL, 0, 0); /* top */ pixRasterop(pixd, 0, h - 1, w, 1, PIX_SET, NULL, 0, 0); /* bot */ pixRasterop(pixd, 0, 0, 1, h, PIX_SET, NULL, 0, 0); /* left */ pixRasterop(pixd, w - 1, 0, 1, h, PIX_SET, NULL, 0, 0); /* right */ distanceFunctionLow(datad, w, h, outdepth, wpld, connectivity); /* Set each boundary pixel equal to the pixel next to it */ pixSetMirroredBorder(pixd, 1, 1, 1, 1); } return pixd; } /*-----------------------------------------------------------------------* * Seed spread (based on distance function) * *-----------------------------------------------------------------------*/ /*! * pixSeedspread() * * Input: pixs (8 bpp source) * connectivity (4 or 8) * Return: pixd, or null on error * * Notes: * (1) The raster/anti-raster method for implementing this filling * operation was suggested by Ray Smith. * (2) This takes an arbitrary set of nonzero pixels in pixs, which * can be sparse, and spreads (extrapolates) the values to * fill all the pixels in pixd with the nonzero value it is * closest to in pixs. This is similar (though not completely * equivalent) to doing a Voronoi tiling of the image, with a * tile surrounding each pixel that has a nonzero value. * All pixels within a tile are then closer to its "central" * pixel than to any others. Then assign the value of the * "central" pixel to each pixel in the tile. * (3) This is implemented by computing a distance function in parallel * with the fill. The distance function uses free boundary * conditions (assumed maxval outside), and it controls the * propagation of the pixels in pixd away from the nonzero * (seed) values. This is done in 2 traversals (raster/antiraster). * In the raster direction, whenever the distance function * is nonzero, the spread pixel takes on the value of its * predecessor that has the minimum distance value. In the * antiraster direction, whenever the distance function is nonzero * and its value is replaced by a smaller value, the spread * pixel takes the value of the predecessor with the minimum * distance value. * (4) At boundaries where a pixel is equidistant from two * nearest nonzero (seed) pixels, the decision of which value * to use is arbitrary (greedy in search for minimum distance). * This can give rise to strange-looking results, particularly * for 4-connectivity where the L1 distance is computed from * steps in N,S,E and W directions (no diagonals). */ PIX * pixSeedspread(PIX *pixs, l_int32 connectivity) { l_int32 w, h, wplt, wplg; l_uint32 *datat, *datag; PIX *pixm, *pixt, *pixg, *pixd; PROCNAME("pixSeedspread"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("!pixs or pixs not 8 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); /* Add a 4 byte border to pixs. This simplifies the computation. */ pixg = pixAddBorder(pixs, 4, 0); pixGetDimensions(pixg, &w, &h, NULL); /* Initialize distance function pixt. Threshold pixs to get * a 0 at the seed points where the pixs pixel is nonzero, and * a 1 at all points that need to be filled. Use this as a * mask to set a 1 in pixt at all non-seed points. Also, set all * pixt pixels in an interior boundary of width 1 to the * maximum value. For debugging, to view the distance function, * use pixConvert16To8(pixt, 0) on small images. */ pixm = pixThresholdToBinary(pixg, 1); pixt = pixCreate(w, h, 16); pixSetMasked(pixt, pixm, 1); pixRasterop(pixt, 0, 0, w, 1, PIX_SET, NULL, 0, 0); /* top */ pixRasterop(pixt, 0, h - 1, w, 1, PIX_SET, NULL, 0, 0); /* bot */ pixRasterop(pixt, 0, 0, 1, h, PIX_SET, NULL, 0, 0); /* left */ pixRasterop(pixt, w - 1, 0, 1, h, PIX_SET, NULL, 0, 0); /* right */ datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Do the interpolation and remove the border. */ datag = pixGetData(pixg); wplg = pixGetWpl(pixg); seedspreadLow(datag, w, h, wplg, datat, wplt, connectivity); pixd = pixRemoveBorder(pixg, 4); pixDestroy(&pixm); pixDestroy(&pixg); pixDestroy(&pixt); return pixd; } /*-----------------------------------------------------------------------* * Local extrema * *-----------------------------------------------------------------------*/ /*! * pixLocalExtrema() * * Input: pixs (8 bpp) * maxmin (max allowed for the min in a 3x3 neighborhood; * use 0 for default which is to have no upper bound) * minmax (min allowed for the max in a 3x3 neighborhood; * use 0 for default which is to have no lower bound) * &ppixmin ( mask of local minima) * &ppixmax ( mask of local maxima) * Return: 0 if OK, 1 on error * * Notes: * (1) This gives the actual local minima and maxima. * A local minimum is a pixel whose surrounding pixels all * have values at least as large, and likewise for a local * maximum. For the local minima, @maxmin is the upper * bound for the value of pixs. Likewise, for the local maxima, * @minmax is the lower bound for the value of pixs. * (2) The minima are found by starting with the erosion-and-equality * approach of pixSelectedLocalExtrema(). This is followed * by a qualification step, where each c.c. in the resulting * minimum mask is extracted, the pixels bordering it are * located, and they are queried. If all of those pixels * are larger than the value of that minimum, it is a true * minimum and its c.c. is saved; otherwise the c.c. is * rejected. Note that if a bordering pixel has the * same value as the minimum, it must then have a * neighbor that is smaller, so the component is not a * true minimum. * (3) The maxima are found by inverting the image and looking * for the minima there. * (4) The generated masks can be used as markers for * further operations. */ l_int32 pixLocalExtrema(PIX *pixs, l_int32 maxmin, l_int32 minmax, PIX **ppixmin, PIX **ppixmax) { PIX *pixmin, *pixmax, *pixt1, *pixt2; PROCNAME("pixLocalExtrema"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!ppixmin && !ppixmax) return ERROR_INT("neither &pixmin, &pixmax are defined", procName, 1); if (maxmin <= 0) maxmin = 254; if (minmax <= 0) minmax = 1; if (ppixmin) { pixt1 = pixErodeGray(pixs, 3, 3); pixmin = pixFindEqualValues(pixs, pixt1); pixDestroy(&pixt1); pixQualifyLocalMinima(pixs, pixmin, maxmin); *ppixmin = pixmin; } if (ppixmax) { pixt1 = pixInvert(NULL, pixs); pixt2 = pixErodeGray(pixt1, 3, 3); pixmax = pixFindEqualValues(pixt1, pixt2); pixDestroy(&pixt2); pixQualifyLocalMinima(pixt1, pixmax, 255 - minmax); *ppixmax = pixmax; pixDestroy(&pixt1); } return 0; } /*! * pixQualifyLocalMinima() * * Input: pixs (8 bpp image from which pixm has been extracted) * pixm (1 bpp mask of values equal to min in 3x3 neighborhood) * maxval (max allowed for the min in a 3x3 neighborhood; * use 0 for default which is to have no upper bound) * Return: 0 if OK, 1 on error * * Notes: * (1) This function acts in-place to remove all c.c. in pixm * that are not true local minima in pixs. As seen in * pixLocalExtrema(), the input pixm are found by selecting those * pixels of pixs whose values do not change with a 3x3 * grayscale erosion. Here, we require that for each c.c. * in pixm, all pixels in pixs that correspond to the exterior * boundary pixels of the c.c. have values that are greater * than the value within the c.c. * (2) The maximum allowed value for each local minimum can be * bounded with @maxval. Use 0 for default, which is to have * no upper bound (equivalent to maxval == 254). */ static l_int32 pixQualifyLocalMinima(PIX *pixs, PIX *pixm, l_int32 maxval) { l_int32 n, i, j, k, x, y, w, h, xc, yc, wc, hc, xon, yon; l_int32 vals, wpls, wplc, ismin; l_uint32 val; l_uint32 *datas, *datac, *lines, *linec; BOXA *boxa; PIX *pixt1, *pixt2, *pixc; PIXA *pixa; PROCNAME("pixQualifyLocalMinima"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm not defined or not 1 bpp", procName, 1); if (maxval <= 0) maxval = 254; pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); boxa = pixConnComp(pixm, &pixa, 8); n = pixaGetCount(pixa); for (k = 0; k < n; k++) { boxaGetBoxGeometry(boxa, k, &xc, &yc, &wc, &hc); pixt1 = pixaGetPix(pixa, k, L_COPY); pixt2 = pixAddBorder(pixt1, 1, 0); pixc = pixDilateBrick(NULL, pixt2, 3, 3); pixXor(pixc, pixc, pixt2); /* exterior boundary pixels */ datac = pixGetData(pixc); wplc = pixGetWpl(pixc); nextOnPixelInRaster(pixt1, 0, 0, &xon, &yon); pixGetPixel(pixs, xc + xon, yc + yon, &val); if (val > maxval) { /* too large; erase */ pixRasterop(pixm, xc, yc, wc, hc, PIX_XOR, pixt1, 0, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixc); continue; } ismin = TRUE; /* Check all values in pixs that correspond to the exterior * boundary pixels of the c.c. in pixm. Verify that the * value in the c.c. is always less. */ for (i = 0, y = yc - 1; i < hc + 2 && y >= 0 && y < h; i++, y++) { lines = datas + y * wpls; linec = datac + i * wplc; for (j = 0, x = xc - 1; j < wc + 2 && x >= 0 && x < w; j++, x++) { if (GET_DATA_BIT(linec, j)) { vals = GET_DATA_BYTE(lines, x); if (vals <= val) { /* not a minimum! */ ismin = FALSE; break; } } } if (!ismin) break; } if (!ismin) /* erase it */ pixRasterop(pixm, xc, yc, wc, hc, PIX_XOR, pixt1, 0, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixc); } boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } /*! * pixSelectedLocalExtrema() * * Input: pixs (8 bpp) * mindist (-1 for keeping all pixels; >= 0 specifies distance) * &ppixmin ( mask of local minima) * &ppixmax ( mask of local maxima) * Return: 0 if OK, 1 on error * * Notes: * (1) This selects those local 3x3 minima that are at least a * specified distance from the nearest local 3x3 maxima, and v.v. * for the selected set of local 3x3 maxima. * The local 3x3 minima is the set of pixels whose value equals * the value after a 3x3 brick erosion, and the local 3x3 maxima * is the set of pixels whose value equals the value after * a 3x3 brick dilation. * (2) mindist is the minimum distance allowed between * local 3x3 minima and local 3x3 maxima, in an 8-connected sense. * mindist == 1 keeps all pixels found in step 1. * mindist == 0 removes all pixels from each mask that are * both a local 3x3 minimum and a local 3x3 maximum. * mindist == 1 removes any local 3x3 minimum pixel that touches a * local 3x3 maximum pixel, and likewise for the local maxima. * To make the decision, visualize each local 3x3 minimum pixel * as being surrounded by a square of size (2 * mindist + 1) * on each side, such that no local 3x3 maximum pixel is within * that square; and v.v. * (3) The generated masks can be used as markers for further operations. */ l_int32 pixSelectedLocalExtrema(PIX *pixs, l_int32 mindist, PIX **ppixmin, PIX **ppixmax) { PIX *pixmin, *pixmax, *pixt, *pixtmin, *pixtmax; PROCNAME("pixSelectedLocalExtrema"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!ppixmin || !ppixmax) return ERROR_INT("&pixmin and &pixmax not both defined", procName, 1); pixt = pixErodeGray(pixs, 3, 3); pixmin = pixFindEqualValues(pixs, pixt); pixDestroy(&pixt); pixt = pixDilateGray(pixs, 3, 3); pixmax = pixFindEqualValues(pixs, pixt); pixDestroy(&pixt); /* Remove all points that are within the prescribed distance * from each other. */ if (mindist < 0) { /* remove no points */ *ppixmin = pixmin; *ppixmax = pixmax; } else if (mindist == 0) { /* remove points belonging to both sets */ pixt = pixAnd(NULL, pixmin, pixmax); *ppixmin = pixSubtract(pixmin, pixmin, pixt); *ppixmax = pixSubtract(pixmax, pixmax, pixt); pixDestroy(&pixt); } else { pixtmin = pixDilateBrick(NULL, pixmin, 2 * mindist + 1, 2 * mindist + 1); pixtmax = pixDilateBrick(NULL, pixmax, 2 * mindist + 1, 2 * mindist + 1); *ppixmin = pixSubtract(pixmin, pixmin, pixtmax); *ppixmax = pixSubtract(pixmax, pixmax, pixtmin); pixDestroy(&pixtmin); pixDestroy(&pixtmax); } return 0; } /*! * pixFindEqualValues() * * Input: pixs1 (8 bpp) * pixs2 (8 bpp) * Return: pixd (1 bpp mask), or null on error * * Notes: * (1) The two images are aligned at the UL corner, and the returned * image has ON pixels where the pixels in pixs1 and pixs2 * have equal values. */ PIX * pixFindEqualValues(PIX *pixs1, PIX *pixs2) { l_int32 w1, h1, w2, h2, w, h; l_int32 i, j, val1, val2, wpls1, wpls2, wpld; l_uint32 *datas1, *datas2, *datad, *lines1, *lines2, *lined; PIX *pixd; PROCNAME("pixFindEqualValues"); if (!pixs1 || pixGetDepth(pixs1) != 8) return (PIX *)ERROR_PTR("pixs1 undefined or not 8 bpp", procName, NULL); if (!pixs2 || pixGetDepth(pixs2) != 8) return (PIX *)ERROR_PTR("pixs2 undefined or not 8 bpp", procName, NULL); pixGetDimensions(pixs1, &w1, &h1, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); w = L_MIN(w1, w2); h = L_MIN(h1, h2); pixd = pixCreate(w, h, 1); datas1 = pixGetData(pixs1); datas2 = pixGetData(pixs2); datad = pixGetData(pixd); wpls1 = pixGetWpl(pixs1); wpls2 = pixGetWpl(pixs2); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines1 = datas1 + i * wpls1; lines2 = datas2 + i * wpls2; lined = datad + i * wpld; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(lines1, j); val2 = GET_DATA_BYTE(lines2, j); if (val1 == val2) SET_DATA_BIT(lined, j); } } return pixd; } /*-----------------------------------------------------------------------* * Selection of minima in mask connected components * *-----------------------------------------------------------------------*/ /*! * pixSelectMinInConnComp() * * Input: pixs (8 bpp) * pixm (1 bpp) * &pta ( pta of min pixel locations) * &nav ( numa of minima values) * Return: 0 if OK, 1 on error. * * Notes: * (1) For each 8 connected component in pixm, this finds * a pixel in pixs that has the lowest value, and saves * it in a Pta. If several pixels in pixs have the same * minimum value, it picks the first one found. * (2) For a mask pixm of true local minima, all pixels in each * connected component have the same value in pixs, so it is * fastest to select one of them using a special seedfill * operation. Not yet implemented. */ l_int32 pixSelectMinInConnComp(PIX *pixs, PIX *pixm, PTA **ppta, NUMA **pnav) { l_int32 bx, by, bw, bh, i, j, c, n; l_int32 xs, ys, minx, miny, wpls, wplt, val, minval; l_uint32 *datas, *datat, *lines, *linet; BOXA *boxa; NUMA *nav; PIX *pixt, *pixs2, *pixm2; PIXA *pixa; PTA *pta; PROCNAME("pixSelectMinInConnComp"); if (!ppta) return ERROR_INT("&pta not defined", procName, 1); *ppta = NULL; if (pnav) *pnav = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm undefined or not 1 bpp", procName, 1); /* Crop to the min size if necessary */ if (pixCropToMatch(pixs, pixm, &pixs2, &pixm2)) { pixDestroy(&pixs2); pixDestroy(&pixm2); return ERROR_INT("cropping failure", procName, 1); } /* Find value and location of min value pixel in each component */ boxa = pixConnComp(pixm2, &pixa, 8); n = boxaGetCount(boxa); pta = ptaCreate(n); *ppta = pta; nav = numaCreate(n); datas = pixGetData(pixs2); wpls = pixGetWpl(pixs2); for (c = 0; c < n; c++) { pixt = pixaGetPix(pixa, c, L_CLONE); boxaGetBoxGeometry(boxa, c, &bx, &by, &bw, &bh); if (bw == 1 && bh == 1) { ptaAddPt(pta, bx, by); numaAddNumber(nav, GET_DATA_BYTE(datas + by * wpls, bx)); pixDestroy(&pixt); continue; } datat = pixGetData(pixt); wplt = pixGetWpl(pixt); minx = miny = 1000000; minval = 256; for (i = 0; i < bh; i++) { ys = by + i; lines = datas + ys * wpls; linet = datat + i * wplt; for (j = 0; j < bw; j++) { xs = bx + j; if (GET_DATA_BIT(linet, j)) { val = GET_DATA_BYTE(lines, xs); if (val < minval) { minval = val; minx = xs; miny = ys; } } } } ptaAddPt(pta, minx, miny); numaAddNumber(nav, GET_DATA_BYTE(datas + miny * wpls, minx)); pixDestroy(&pixt); } boxaDestroy(&boxa); pixaDestroy(&pixa); if (pnav) *pnav = nav; else numaDestroy(&nav); pixDestroy(&pixs2); pixDestroy(&pixm2); return 0; } /*-----------------------------------------------------------------------* * Removal of seeded connected components from a mask * *-----------------------------------------------------------------------*/ /*! * pixRemoveSeededComponents() * * Input: pixd (; this can be null or equal to pixm; 1 bpp) * pixs (1 bpp seed) * pixm (1 bpp filling mask) * connectivity (4 or 8) * bordersize (amount of border clearing) * Return: pixd, or null on error * * Notes: * (1) This removes each component in pixm for which there is * at least one seed in pixs. If pixd == NULL, this returns * the result in a new pixd. Otherwise, it is an in-place * operation on pixm. In no situation is pixs altered, * because we do the filling with a copy of pixs. * (2) If bordersize > 0, it also clears all pixels within a * distance @bordersize of the edge of pixd. This is here * because pixLocalExtrema() typically finds local minima * at the border. Use @bordersize >= 2 to remove these. */ PIX * pixRemoveSeededComponents(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 bordersize) { PIX *pixt; PROCNAME("pixRemoveSeededComponents"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, pixd); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, pixd); if (pixd && pixd != pixm) return (PIX *)ERROR_PTR("operation not inplace", procName, pixd); pixt = pixCopy(NULL, pixs); pixSeedfillBinary(pixt, pixt, pixm, connectivity); pixd = pixXor(pixd, pixm, pixt); if (bordersize > 0) pixSetOrClearBorder(pixd, bordersize, bordersize, bordersize, bordersize, PIX_CLR); pixDestroy(&pixt); return pixd; } leptonica-1.70/src/textops.c0000664000175000017500000010215012265025457014157 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * textops.c * * Font layout * PIX *pixAddSingleTextblock() * PIX *pixAddSingleTextline() * l_int32 pixSetTextblock() * l_int32 pixSetTextline() * PIXA *pixaAddTextNumber() * PIXA *pixaAddTextline() * * Text size estimation and partitioning * SARRAY *bmfGetLineStrings() * NUMA *bmfGetWordWidths() * l_int32 bmfGetStringWidth() * * Text splitting * SARRAY *splitStringToParagraphs() * static l_int32 stringAllWhitespace() * static l_int32 stringLeadingWhitespace() * * This is a simple utility to put text on images. One font and style * is provided, with a variety of pt sizes. For example, to put a * line of green 10 pt text on an image, with the beginning baseline * at (50, 50): * L_Bmf *bmf = bmfCreate("./fonts", 10); * const char *textstr = "This is a funny cat"; * pixSetTextline(pixs, bmf, textstr, 0x00ff0000, 50, 50, NULL, NULL); * * The simplest interfaces for adding text to an image are * pixAddSingleTextline() and pixAddSingleTextblock(). */ #include #include "allheaders.h" static l_int32 stringAllWhitespace(char *textstr, l_int32 *pval); static l_int32 stringLeadingWhitespace(char *textstr, l_int32 *pval); /*---------------------------------------------------------------------* * Font layout * *---------------------------------------------------------------------*/ /*! * pixAddSingleTextblock() * * Input: pixs (input pix; colormap ok) * bmf (bitmap font data) * textstr ( text string to be added) * val (color to set the text) * location (L_ADD_ABOVE, L_ADD_AT_TOP, L_ADD_AT_BOT, L_ADD_BELOW) * &overflow ( 1 if text overflows * allocated region and is clipped; 0 otherwise) * Return: pixd (new pix with rendered text), or null on error * * Notes: * (1) This function paints a set of lines of text over an image. * If @location is L_ADD_ABOVE or L_ADD_BELOW, the pix size * is expanded with a border and rendered over the border. * (2) @val is the pixel value to be painted through the font mask. * It should be chosen to agree with the depth of pixs. * If it is out of bounds, an intermediate value is chosen. * For RGB, use hex notation: 0xRRGGBB00, where RR is the * hex representation of the red intensity, etc. * (3) If textstr == NULL, use the text field in the pix. * (4) If there is a colormap, this does the best it can to use * the requested color, or something similar to it. * (5) Typical usage is for labelling a pix with some text data. */ PIX * pixAddSingleTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow) { char *linestr; l_int32 w, h, d, i, y, xstart, ystart, extra, spacer, rval, gval, bval; l_int32 nlines, htext, ovf, overflow, offset, index; l_uint32 textcolor; PIX *pixd; PIXCMAP *cmap, *cmapd; SARRAY *salines; PROCNAME("pixAddSingleTextblock"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!bmf) return (PIX *)ERROR_PTR("bmf not defined", procName, NULL); if (location != L_ADD_ABOVE && location != L_ADD_AT_TOP && location != L_ADD_AT_BOT && location != L_ADD_BELOW) return (PIX *)ERROR_PTR("invalid location", procName, NULL); if (!textstr) textstr = pixGetText(pixs); if (!textstr) { L_ERROR("no textstring defined\n", procName); return pixCopy(NULL, pixs); } /* Make sure the "color" value for the text will work * for the pix. If the pix is not colormapped and the * value is out of range, set it to mid-range. */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; xstart = (l_int32)(0.1 * w); salines = bmfGetLineStrings(bmf, textstr, w - 2 * xstart, 0, &htext); if (!salines) return (PIX *)ERROR_PTR("line string sa not made", procName, NULL); nlines = sarrayGetCount(salines); /* Add white border if required */ spacer = 10; /* pixels away from image boundary or added border */ if (location == L_ADD_ABOVE || location == L_ADD_BELOW) { extra = htext + 2 * spacer; pixd = pixCreate(w, h + extra, d); pixCopyColormap(pixd, pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); if (location == L_ADD_ABOVE) pixRasterop(pixd, 0, extra, w, h, PIX_SRC, pixs, 0, 0); else /* add below */ pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); } else { pixd = pixCopy(NULL, pixs); } cmapd = pixGetColormap(pixd); /* bmf->baselinetab[93] is the approximate distance from * the top of the tallest character to the baseline. 93 was chosen * at random, as all the baselines are essentially equal for * each character in a font. */ offset = bmf->baselinetab[93]; if (location == L_ADD_ABOVE || location == L_ADD_AT_TOP) ystart = offset + spacer; else if (location == L_ADD_AT_BOT) ystart = h - htext - spacer + offset; else /* add below */ ystart = h + offset + spacer; /* If cmapped, add the color if necessary to the cmap. If the * cmap is full, use the nearest color to the requested color. */ if (cmapd) { extractRGBValues(val, &rval, &gval, &bval); pixcmapAddNearestColor(cmapd, rval, gval, bval, &index); pixcmapGetColor(cmapd, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &textcolor); } else { textcolor = val; } /* Keep track of overflow condition on line width */ overflow = 0; for (i = 0, y = ystart; i < nlines; i++) { linestr = sarrayGetString(salines, i, 0); pixSetTextline(pixd, bmf, linestr, textcolor, xstart, y, NULL, &ovf); y += bmf->lineheight + bmf->vertlinesep; if (ovf) overflow = 1; } /* Also consider vertical overflow where there is too much text to * fit inside the image: the cases L_ADD_AT_TOP and L_ADD_AT_BOT. * The text requires a total of htext + 2 * spacer vertical pixels. */ if (location == L_ADD_AT_TOP || location == L_ADD_AT_BOT) { if (h < htext + 2 * spacer) overflow = 1; } if (poverflow) *poverflow = overflow; sarrayDestroy(&salines); return pixd; } /*! * pixAddSingleTextline() * * Input: pixs (input pix; colormap ok) * bmf (bitmap font data) * textstr ( text string to be added) * val (color to set the text) * location (L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT) * Return: pixd (new pix with rendered text), or null on error * * Notes: * (1) This function expands an image as required to paint a single * line of text adjacent to the image. * (2) @val is the pixel value to be painted through the font mask. * It should be chosen to agree with the depth of pixs. * If it is out of bounds, an intermediate value is chosen. * For RGB, use hex notation: 0xRRGGBB00, where RR is the * hex representation of the red intensity, etc. * (3) If textstr == NULL, use the text field in the pix. * (4) If there is a colormap, this does the best it can to use * the requested color, or something similar to it. * (5) Typical usage is for labelling a pix with some text data. */ PIX * pixAddSingleTextline(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location) { l_int32 w, h, d, wtext, htext, wadd, hadd, spacer, hbaseline; l_int32 rval, gval, bval, index; l_uint32 textcolor; PIX *pixd; PIXCMAP *cmap, *cmapd; PROCNAME("pixAddSingleTextline"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!bmf) return (PIX *)ERROR_PTR("bmf not defined", procName, NULL); if (location != L_ADD_ABOVE && location != L_ADD_BELOW && location != L_ADD_LEFT && location != L_ADD_RIGHT) return (PIX *)ERROR_PTR("invalid location", procName, NULL); if (!textstr) textstr = pixGetText(pixs); if (!textstr) { L_ERROR("no textstring defined\n", procName); return pixCopy(NULL, pixs); } /* Make sure the "color" value for the text will work * for the pix. If the pix is not colormapped and the * value is out of range, set it to mid-range. */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; /* Get the necessary text size */ bmfGetStringWidth(bmf, textstr, &wtext); hbaseline = bmf->baselinetab[93]; htext = 1.5 * hbaseline; /* Add white border */ spacer = 10; /* pixels away from the added border */ if (location == L_ADD_ABOVE || location == L_ADD_BELOW) { hadd = htext + spacer; pixd = pixCreate(w, h + hadd, d); pixCopyColormap(pixd, pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); if (location == L_ADD_ABOVE) pixRasterop(pixd, 0, hadd, w, h, PIX_SRC, pixs, 0, 0); else /* add below */ pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); } else { /* L_ADD_LEFT or L_ADD_RIGHT */ wadd = wtext + spacer; pixd = pixCreate(w + wadd, h, d); pixCopyColormap(pixd, pixs); pixSetBlackOrWhite(pixd, L_BRING_IN_WHITE); if (location == L_ADD_LEFT) pixRasterop(pixd, wadd, 0, w, h, PIX_SRC, pixs, 0, 0); else /* add to right */ pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); } /* If cmapped, add the color if necessary to the cmap. If the * cmap is full, use the nearest color to the requested color. */ cmapd = pixGetColormap(pixd); if (cmapd) { extractRGBValues(val, &rval, &gval, &bval); pixcmapAddNearestColor(cmapd, rval, gval, bval, &index); pixcmapGetColor(cmapd, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &textcolor); } else { textcolor = val; } /* Add the text */ if (location == L_ADD_ABOVE) pixSetTextline(pixd, bmf, textstr, textcolor, (w - wtext) / 2, hbaseline, NULL, NULL); else if (location == L_ADD_BELOW) pixSetTextline(pixd, bmf, textstr, textcolor, (w - wtext) / 2, h + spacer + hbaseline, NULL, NULL); else if (location == L_ADD_LEFT) pixSetTextline(pixd, bmf, textstr, textcolor, 0, (h - htext) / 2 + hbaseline, NULL, NULL); else /* location == L_ADD_RIGHT */ pixSetTextline(pixd, bmf, textstr, textcolor, w + spacer, (h - htext) / 2 + hbaseline, NULL, NULL); return pixd; } /*! * pixSetTextblock() * * Input: pixs (input image) * bmf (bitmap font data) * textstr (block text string to be set) * val (color to set the text) * x0 (left edge for each line of text) * y0 (baseline location for the first text line) * wtext (max width of each line of generated text) * firstindent (indentation of first line, in x-widths) * &overflow ( 0 if text is contained in * input pix; 1 if it is clipped) * Return: 0 if OK, 1 on error * * Notes: * (1) This function paints a set of lines of text over an image. * (2) @val is the pixel value to be painted through the font mask. * It should be chosen to agree with the depth of pixs. * If it is out of bounds, an intermediate value is chosen. * For RGB, use hex notation: 0xRRGGBB00, where RR is the * hex representation of the red intensity, etc. * The last two hex digits are 00 (byte value 0), assigned to * the A component. Note that, as usual, RGBA proceeds from * left to right in the order from MSB to LSB (see pix.h * for details). * (3) If there is a colormap, this does the best it can to use * the requested color, or something similar to it. */ l_int32 pixSetTextblock(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 wtext, l_int32 firstindent, l_int32 *poverflow) { char *linestr; l_int32 d, h, i, w, x, y, nlines, htext, xwidth, wline, ovf, overflow; SARRAY *salines; PIXCMAP *cmap; PROCNAME("pixSetTextblock"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!bmf) return ERROR_INT("bmf not defined", procName, 1); if (!textstr) return ERROR_INT("textstr not defined", procName, 1); /* Make sure the "color" value for the text will work * for the pix. If the pix is not colormapped and the * value is out of range, set it to mid-range. */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; if (w < x0 + wtext) { L_WARNING("reducing width of textblock\n", procName); wtext = w - x0 - w / 10; if (wtext <= 0) return ERROR_INT("wtext too small; no room for text", procName, 1); } salines = bmfGetLineStrings(bmf, textstr, wtext, firstindent, &htext); if (!salines) return ERROR_INT("line string sa not made", procName, 1); nlines = sarrayGetCount(salines); bmfGetWidth(bmf, 'x', &xwidth); y = y0; overflow = 0; for (i = 0; i < nlines; i++) { if (i == 0) x = x0 + firstindent * xwidth; else x = x0; linestr = sarrayGetString(salines, i, 0); pixSetTextline(pixs, bmf, linestr, val, x, y, &wline, &ovf); y += bmf->lineheight + bmf->vertlinesep; if (ovf) overflow = 1; } /* (y0 - baseline) is the top of the printed text. Character * 93 was chosen at random, as all the baselines are essentially * equal for each character in a font. */ if (h < y0 - bmf->baselinetab[93] + htext) overflow = 1; if (poverflow) *poverflow = overflow; sarrayDestroy(&salines); return 0; } /*! * pixSetTextline() * * Input: pixs (input image) * bmf (bitmap font data) * textstr (text string to be set on the line) * val (color to set the text) * x0 (left edge for first char) * y0 (baseline location for all text on line) * &width ( width of generated text) * &overflow ( 0 if text is contained in * input pix; 1 if it is clipped) * Return: 0 if OK, 1 on error * * Notes: * (1) This function paints a line of text over an image. * (2) @val is the pixel value to be painted through the font mask. * It should be chosen to agree with the depth of pixs. * If it is out of bounds, an intermediate value is chosen. * For RGB, use hex notation: 0xRRGGBB00, where RR is the * hex representation of the red intensity, etc. * The last two hex digits are 00 (byte value 0), assigned to * the A component. Note that, as usual, RGBA proceeds from * left to right in the order from MSB to LSB (see pix.h * for details). * (3) If there is a colormap, this does the best it can to use * the requested color, or something similar to it. */ l_int32 pixSetTextline(PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 *pwidth, l_int32 *poverflow) { char chr; l_int32 d, i, x, w, nchar, baseline, index, rval, gval, bval; l_uint32 textcolor; PIX *pix; PIXCMAP *cmap; PROCNAME("pixSetTextline"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!bmf) return ERROR_INT("bmf not defined", procName, 1); if (!textstr) return ERROR_INT("teststr not defined", procName, 1); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d == 1 && val > 1) val = 1; else if (d == 2 && val > 3 && !cmap) val = 2; else if (d == 4 && val > 15 && !cmap) val = 8; else if (d == 8 && val > 0xff && !cmap) val = 128; else if (d == 16 && val > 0xffff) val = 0x8000; else if (d == 32 && val < 256) val = 0x80808000; /* If cmapped, add the color if necessary to the cmap. If the * cmap is full, use the nearest color to the requested color. */ if (cmap) { extractRGBValues(val, &rval, &gval, &bval); pixcmapAddNearestColor(cmap, rval, gval, bval, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &textcolor); } else textcolor = val; nchar = strlen(textstr); x = x0; for (i = 0; i < nchar; i++) { chr = textstr[i]; if ((l_int32)chr == 10) continue; /* NL */ pix = bmfGetPix(bmf, chr); bmfGetBaseline(bmf, chr, &baseline); pixPaintThroughMask(pixs, pix, x, y0 - baseline, textcolor); w = pixGetWidth(pix); x += w + bmf->kernwidth; pixDestroy(&pix); } if (pwidth) *pwidth = x - bmf->kernwidth - x0; if (poverflow) *poverflow = (x > pixGetWidth(pixs) - 1) ? 1 : 0; return 0; } /*! * pixaAddTextNumber() * * Input: pixas (input pixa; colormap ok) * bmf (bitmap font data) * numa ( number array; use 1 ... n if null) * val (color to set the text) * location (L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT) * Return: pixad (new pixa with rendered numbers), or null on error * * Notes: * (1) Typical usage is for labelling each pix in a pixa with a number. * (2) This function paints numbers external to each pix, in a position * given by @location. In all cases, the pix is expanded on * on side and the number is painted over white in the added region. * (3) @val is the pixel value to be painted through the font mask. * It should be chosen to agree with the depth of pixs. * If it is out of bounds, an intermediate value is chosen. * For RGB, use hex notation: 0xRRGGBB00, where RR is the * hex representation of the red intensity, etc. * (4) If na == NULL, number each pix sequentially, starting with 1. * (5) If there is a colormap, this does the best it can to use * the requested color, or something similar to it. */ PIXA * pixaAddTextNumber(PIXA *pixas, L_BMF *bmf, NUMA *na, l_uint32 val, l_int32 location) { char textstr[128]; l_int32 i, n, index; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaAddTextNumber"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (!bmf) return (PIXA *)ERROR_PTR("bmf not defined", procName, NULL); if (location != L_ADD_ABOVE && location != L_ADD_BELOW && location != L_ADD_LEFT && location != L_ADD_RIGHT) return (PIXA *)ERROR_PTR("invalid location", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (na) numaGetIValue(na, i, &index); else index = i + 1; snprintf(textstr, sizeof(textstr), "%d", index); pix2 = pixAddSingleTextline(pix1, bmf, textstr, val, location); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } return pixad; } /*! * pixaAddTextline() * * Input: pixas (input pixa; colormap ok) * bmf (bitmap font data) * sa ( sarray; use text embedded in each pix if null) * val (color to set the text) * location (L_ADD_ABOVE, L_ADD_BELOW, L_ADD_LEFT, L_ADD_RIGHT) * Return: pixad (new pixa with rendered text), or null on error * * Notes: * (1) This function paints a line of text external to each pix, * in a position given by @location. In all cases, the pix is * expanded as necessary to accommodate the text. * (2) @val is the pixel value to be painted through the font mask. * It should be chosen to agree with the depth of pixs. * If it is out of bounds, an intermediate value is chosen. * For RGB, use hex notation: 0xRRGGBB00, where RR is the * hex representation of the red intensity, etc. * (3) If sa == NULL, use the text embedded in each pix. * (4) If sa has a smaller count than pixa, issue a warning * but do not use any embedded text. * (5) If there is a colormap, this does the best it can to use * the requested color, or something similar to it. */ PIXA * pixaAddTextline(PIXA *pixas, L_BMF *bmf, SARRAY *sa, l_uint32 val, l_int32 location) { char *textstr; l_int32 i, n, nstr; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaAddTextline"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (!bmf) return (PIXA *)ERROR_PTR("bmf not defined", procName, NULL); if (location != L_ADD_ABOVE && location != L_ADD_BELOW && location != L_ADD_LEFT && location != L_ADD_RIGHT) return (PIXA *)ERROR_PTR("invalid location", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); nstr = (sa) ? sarrayGetCount(sa) : 0; if (nstr > 0 && nstr < n) L_WARNING("There are %d strings and %d pix\n", procName, nstr, n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); if (i < nstr) textstr = sarrayGetString(sa, i, L_NOCOPY); else textstr = pixGetText(pix1); pix2 = pixAddSingleTextline(pix1, bmf, textstr, val, location); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } return pixad; } /*---------------------------------------------------------------------* * Text size estimation and partitioning * *---------------------------------------------------------------------*/ /*! * bmfGetLineStrings() * * Input: bmf * textstr * maxw (max width of a text line in pixels) * firstindent (indentation of first line, in x-widths) * &h ( height required to hold text bitmap) * Return: sarray of text strings for each line, or null on error * * Notes: * (1) Divides the input text string into an array of text strings, * each of which will fit within maxw bits of width. */ SARRAY * bmfGetLineStrings(L_BMF *bmf, const char *textstr, l_int32 maxw, l_int32 firstindent, l_int32 *ph) { char *linestr; l_int32 i, ifirst, sumw, newsum, w, nwords, nlines, len, xwidth; NUMA *na; SARRAY *sa, *sawords; PROCNAME("bmfGetLineStrings"); if (!bmf) return (SARRAY *)ERROR_PTR("bmf not defined", procName, NULL); if (!textstr) return (SARRAY *)ERROR_PTR("teststr not defined", procName, NULL); if ((sawords = sarrayCreateWordsFromString(textstr)) == NULL) return (SARRAY *)ERROR_PTR("sawords not made", procName, NULL); if ((na = bmfGetWordWidths(bmf, textstr, sawords)) == NULL) return (SARRAY *)ERROR_PTR("na not made", procName, NULL); nwords = numaGetCount(na); if (nwords == 0) return (SARRAY *)ERROR_PTR("no words in textstr", procName, NULL); bmfGetWidth(bmf, 'x', &xwidth); if ((sa = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); ifirst = 0; numaGetIValue(na, 0, &w); sumw = firstindent * xwidth + w; for (i = 1; i < nwords; i++) { numaGetIValue(na, i, &w); newsum = sumw + bmf->spacewidth + w; if (newsum > maxw) { linestr = sarrayToStringRange(sawords, ifirst, i - ifirst, 2); if (!linestr) continue; len = strlen(linestr); if (len > 0) /* it should always be */ linestr[len - 1] = '\0'; /* remove the last space */ sarrayAddString(sa, linestr, 0); ifirst = i; sumw = w; } else sumw += bmf->spacewidth + w; } linestr = sarrayToStringRange(sawords, ifirst, nwords - ifirst, 2); if (linestr) sarrayAddString(sa, linestr, 0); nlines = sarrayGetCount(sa); *ph = nlines * bmf->lineheight + (nlines - 1) * bmf->vertlinesep; sarrayDestroy(&sawords); numaDestroy(&na); return sa; } /*! * bmfGetWordWidths() * * Input: bmf * textstr * sa (of individual words) * Return: numa (of word lengths in pixels for the font represented * by the bmf), or null on error */ NUMA * bmfGetWordWidths(L_BMF *bmf, const char *textstr, SARRAY *sa) { char *wordstr; l_int32 i, nwords, width; NUMA *na; PROCNAME("bmfGetWordWidths"); if (!bmf) return (NUMA *)ERROR_PTR("bmf not defined", procName, NULL); if (!textstr) return (NUMA *)ERROR_PTR("teststr not defined", procName, NULL); if (!sa) return (NUMA *)ERROR_PTR("sa not defined", procName, NULL); nwords = sarrayGetCount(sa); if ((na = numaCreate(nwords)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < nwords; i++) { wordstr = sarrayGetString(sa, i, 0); /* not a copy */ bmfGetStringWidth(bmf, wordstr, &width); numaAddNumber(na, width); } return na; } /*! * bmfGetStringWidth() * * Input: bmf * textstr * &w ( width of text string, in pixels for the * font represented by the bmf) * Return: 0 if OK, 1 on error */ l_int32 bmfGetStringWidth(L_BMF *bmf, const char *textstr, l_int32 *pw) { char chr; l_int32 i, w, width, nchar; PROCNAME("bmfGetStringWidth"); if (!bmf) return ERROR_INT("bmf not defined", procName, 1); if (!textstr) return ERROR_INT("teststr not defined", procName, 1); if (!pw) return ERROR_INT("&w not defined", procName, 1); nchar = strlen(textstr); w = 0; for (i = 0; i < nchar; i++) { chr = textstr[i]; bmfGetWidth(bmf, chr, &width); if (width != UNDEF) w += width + bmf->kernwidth; } w -= bmf->kernwidth; /* remove last one */ *pw = w; return 0; } /*---------------------------------------------------------------------* * Text splitting * *---------------------------------------------------------------------*/ /*! * splitStringToParagraphs() * * Input: textstring * splitting flag (see enum in bmf.h; valid values in {1,2,3}) * Return: sarray (where each string is a paragraph of the input), * or null on error. */ SARRAY * splitStringToParagraphs(char *textstr, l_int32 splitflag) { char *linestr, *parastring; l_int32 nlines, i, allwhite, leadwhite; SARRAY *salines, *satemp, *saout; PROCNAME("splitStringToParagraphs"); if (!textstr) return (SARRAY *)ERROR_PTR("textstr not defined", procName, NULL); if ((salines = sarrayCreateLinesFromString(textstr, 1)) == NULL) return (SARRAY *)ERROR_PTR("salines not made", procName, NULL); nlines = sarrayGetCount(salines); saout = sarrayCreate(0); satemp = sarrayCreate(0); linestr = sarrayGetString(salines, 0, 0); sarrayAddString(satemp, linestr, 1); for (i = 1; i < nlines; i++) { linestr = sarrayGetString(salines, i, 0); stringAllWhitespace(linestr, &allwhite); stringLeadingWhitespace(linestr, &leadwhite); if ((splitflag == SPLIT_ON_LEADING_WHITE && leadwhite) || (splitflag == SPLIT_ON_BLANK_LINE && allwhite) || (splitflag == SPLIT_ON_BOTH && (allwhite || leadwhite))) { parastring = sarrayToString(satemp, 1); /* add nl to each line */ sarrayAddString(saout, parastring, 0); /* insert */ sarrayDestroy(&satemp); satemp = sarrayCreate(0); } sarrayAddString(satemp, linestr, 1); } parastring = sarrayToString(satemp, 1); /* add nl to each line */ sarrayAddString(saout, parastring, 0); /* insert */ sarrayDestroy(&satemp); return saout; } /*! * stringAllWhitespace() * * Input: textstring * &val ( 1 if all whitespace; 0 otherwise) * Return: 0 if OK, 1 on error */ static l_int32 stringAllWhitespace(char *textstr, l_int32 *pval) { l_int32 len, i; PROCNAME("stringAllWhitespace"); if (!textstr) return ERROR_INT("textstr not defined", procName, 1); if (!pval) return ERROR_INT("&va not defined", procName, 1); len = strlen(textstr); *pval = 1; for (i = 0; i < len; i++) { if (textstr[i] != ' ' && textstr[i] != '\t' && textstr[i] != '\n') { *pval = 0; return 0; } } return 0; } /*! * stringLeadingWhitespace() * * Input: textstring * &val ( 1 if leading char is ' ' or '\t'; 0 otherwise) * Return: 0 if OK, 1 on error */ static l_int32 stringLeadingWhitespace(char *textstr, l_int32 *pval) { PROCNAME("stringLeadingWhitespace"); if (!textstr) return ERROR_INT("textstr not defined", procName, 1); if (!pval) return ERROR_INT("&va not defined", procName, 1); *pval = 0; if (textstr[0] == ' ' || textstr[0] == '\t') *pval = 1; return 0; } leptonica-1.70/src/roplow.c0000644000175000017500000022251112244236677014002 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * roplow.c * * Low level dest-only * void rasteropUniLow() * static void rasteropUniWordAlignedlLow() * static void rasteropUniGeneralLow() * * Low level src and dest * void rasteropLow() * static void rasteropWordAlignedLow() * static void rasteropVAlignedLow() * static void rasteropGeneralLow() * */ #include #include "allheaders.h" #define COMBINE_PARTIAL(d, s, m) ( ((d) & ~(m)) | ((s) & (m)) ) static const l_int32 SHIFT_LEFT = 0; static const l_int32 SHIFT_RIGHT = 1; static void rasteropUniWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op); static void rasteropUniGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op); static void rasteropWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy); static void rasteropVAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy); static void rasteropGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy); static const l_uint32 lmask32[] = {0x0, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000, 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff}; static const l_uint32 rmask32[] = {0x0, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; /*--------------------------------------------------------------------* * Low-level dest-only rasterops * *--------------------------------------------------------------------*/ /*! * rasteropUniLow() * * Input: datad (ptr to dest image data) * dpixw (width of dest) * dpixh (height of dest) * depth (depth of src and dest) * dwpl (wpl of dest) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * Return: void * * Action: scales width, performs clipping, checks alignment, and * dispatches for the rasterop. */ void rasteropUniLow(l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op) { l_int32 dhangw, dhangh; /* -------------------------------------------------------* * scale horizontal dimensions by depth * -------------------------------------------------------*/ if (depth != 1) { dpixw *= depth; dx *= depth; dw *= depth; } /* -------------------------------------------------------* * clip rectangle to dest image * -------------------------------------------------------*/ /* first, clip horizontally (dx, dw) */ if (dx < 0) { dw += dx; /* reduce dw */ dx = 0; } dhangw = dx + dw - dpixw; /* rect ovhang dest to right */ if (dhangw > 0) dw -= dhangw; /* reduce dw */ /* then, clip vertically (dy, dh) */ if (dy < 0) { dh += dy; /* reduce dh */ dy = 0; } dhangh = dy + dh - dpixh; /* rect ovhang dest below */ if (dhangh > 0) dh -= dhangh; /* reduce dh */ /* if clipped entirely, quit */ if ((dw <= 0) || (dh <= 0)) return; /* -------------------------------------------------------* * dispatch to aligned or non-aligned blitters * -------------------------------------------------------*/ if ((dx & 31) == 0) rasteropUniWordAlignedLow(datad, dwpl, dx, dy, dw, dh, op); else rasteropUniGeneralLow(datad, dwpl, dx, dy, dw, dh, op); return; } /*--------------------------------------------------------------------* * Static low-level uni rasterop with word alignment * *--------------------------------------------------------------------*/ /*! * rasteropUniWordAlignedLow() * * Input: datad (ptr to dest image data) * dwpl (wpl of dest) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * Return: void * * This is called when the dest rect is left aligned * on (32-bit) word boundaries. That is: dx & 31 == 0. * * We make an optimized implementation of this because * it is a common case: e.g., operating on a full dest image. */ static void rasteropUniWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op) { l_int32 nfullw; /* number of full words */ l_uint32 *pfword; /* ptr to first word */ l_int32 lwbits; /* number of ovrhang bits in last partial word */ l_uint32 lwmask; /* mask for last partial word */ l_uint32 *lined; l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ nfullw = dw >> 5; lwbits = dw & 31; if (lwbits) lwmask = lmask32[lwbits]; pfword = datad + dwpl * dy + (dx >> 5); /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_CLR: for (i = 0; i < dh; i++) { lined = pfword + i * dwpl; for (j = 0; j < nfullw; j++) *lined++ = 0x0; if (lwbits) *lined = COMBINE_PARTIAL(*lined, 0x0, lwmask); } break; case PIX_SET: for (i = 0; i < dh; i++) { lined = pfword + i * dwpl; for (j = 0; j < nfullw; j++) *lined++ = 0xffffffff; if (lwbits) *lined = COMBINE_PARTIAL(*lined, 0xffffffff, lwmask); } break; case PIX_NOT(PIX_DST): for (i = 0; i < dh; i++) { lined = pfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lined); lined++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lined), lwmask); } break; default: fprintf(stderr, "Operation %d not permitted here!\n", op); } return; } /*--------------------------------------------------------------------* * Static low-level uni rasterop without word alignment * *--------------------------------------------------------------------*/ /*! * rasteropUniGeneralLow() * * Input: datad (ptr to dest image data) * dwpl (wpl of dest) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * Return: void */ static void rasteropUniGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op) { l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ l_int32 dfwpart2b; /* boolean (1, 0) if first dest word is doubly partial */ l_uint32 dfwmask; /* mask for first partial dest word */ l_int32 dfwbits; /* first word dest bits in ovrhang */ l_uint32 *pdfwpart; /* ptr to first partial dest word */ l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ l_int32 dnfullw; /* number of full words in dest */ l_uint32 *pdfwfull; /* ptr to first full dest word */ l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ l_uint32 dlwmask; /* mask for last partial dest word */ l_int32 dlwbits; /* last word dest bits in ovrhang */ l_uint32 *pdlwpart; /* ptr to last partial dest word */ l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* is the first word partial? */ if ((dx & 31) == 0) { /* if not */ dfwpartb = 0; dfwbits = 0; } else { /* if so */ dfwpartb = 1; dfwbits = 32 - (dx & 31); dfwmask = rmask32[dfwbits]; pdfwpart = datad + dwpl * dy + (dx >> 5); } /* is the first word doubly partial? */ if (dw >= dfwbits) { /* if not */ dfwpart2b = 0; } else { /* if so */ dfwpart2b = 1; dfwmask &= lmask32[32 - dfwbits + dw]; } /* is there a full dest word? */ if (dfwpart2b == 1) { /* not */ dfwfullb = 0; dnfullw = 0; } else { dnfullw = (dw - dfwbits) >> 5; if (dnfullw == 0) { /* if not */ dfwfullb = 0; } else { /* if so */ dfwfullb = 1; if (dfwpartb) pdfwfull = pdfwpart + 1; else pdfwfull = datad + dwpl * dy + (dx >> 5); } } /* is the last word partial? */ dlwbits = (dx + dw) & 31; if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ dlwpartb = 0; } else { dlwpartb = 1; dlwmask = lmask32[dlwbits]; if (dfwpartb) pdlwpart = pdfwpart + 1 + dnfullw; else pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw; } /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_CLR: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, dfwmask); pdfwpart += dwpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = 0x0; pdfwfull += dwpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, dlwmask); pdlwpart += dwpl; } } break; case PIX_SET: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0xffffffff, dfwmask); pdfwpart += dwpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = 0xffffffff; pdfwfull += dwpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0xffffffff, dlwmask); pdlwpart += dwpl; } } break; case PIX_NOT(PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*pdfwpart), dfwmask); pdfwpart += dwpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(pdfwfull + j)); pdfwfull += dwpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pdlwpart), dlwmask); pdlwpart += dwpl; } } break; default: fprintf(stderr, "Operation %d not permitted here!\n", op); } return; } /*--------------------------------------------------------------------* * Low-level src and dest rasterops * *--------------------------------------------------------------------*/ /*! * rasteropLow() * * Input: datad (ptr to dest image data) * dpixw (width of dest) * dpixh (height of dest) * depth (depth of src and dest) * dwpl (wpl of dest) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * datas (ptr to src image data) * spixw (width of src) * spixh (height of src) * swpl (wpl of src) * sx (x val of UL corner of src rectangle) * sy (y val of UL corner of src rectangle) * Return: void * * Action: Scales width, performs clipping, checks alignment, and * dispatches for the rasterop. * * Warning: the two images must have equal depth. This is not checked. */ void rasteropLow(l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 spixw, l_int32 spixh, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 dhangw, shangw, dhangh, shangh; /* -------------------------------------------------------* * scale horizontal dimensions by depth * -------------------------------------------------------*/ if (depth != 1) { dpixw *= depth; dx *= depth; dw *= depth; spixw *= depth; sx *= depth; } /* -------------------------------------------------------* * clip to max rectangle within both src and dest * -------------------------------------------------------*/ /* first, clip horizontally (sx, dx, dw) */ if (dx < 0) { sx -= dx; /* increase sx */ dw += dx; /* reduce dw */ dx = 0; } if (sx < 0) { dx -= sx; /* increase dx */ dw += sx; /* reduce dw */ sx = 0; } dhangw = dx + dw - dpixw; /* rect ovhang dest to right */ if (dhangw > 0) dw -= dhangw; /* reduce dw */ shangw = sx + dw - spixw; /* rect ovhang src to right */ if (shangw > 0) dw -= shangw; /* reduce dw */ /* then, clip vertically (sy, dy, dh) */ if (dy < 0) { sy -= dy; /* increase sy */ dh += dy; /* reduce dh */ dy = 0; } if (sy < 0) { dy -= sy; /* increase dy */ dh += sy; /* reduce dh */ sy = 0; } dhangh = dy + dh - dpixh; /* rect ovhang dest below */ if (dhangh > 0) dh -= dhangh; /* reduce dh */ shangh = sy + dh - spixh; /* rect ovhang src below */ if (shangh > 0) dh -= shangh; /* reduce dh */ /* if clipped entirely, quit */ if ((dw <= 0) || (dh <= 0)) return; /* -------------------------------------------------------* * dispatch to aligned or non-aligned blitters * -------------------------------------------------------*/ if (((dx & 31) == 0) && ((sx & 31) == 0)) rasteropWordAlignedLow(datad, dwpl, dx, dy, dw, dh, op, datas, swpl, sx, sy); else if ((dx & 31) == (sx & 31)) rasteropVAlignedLow(datad, dwpl, dx, dy, dw, dh, op, datas, swpl, sx, sy); else rasteropGeneralLow(datad, dwpl, dx, dy, dw, dh, op, datas, swpl, sx, sy); return; } /*--------------------------------------------------------------------* * Static low-level rasterop with vertical word alignment * *--------------------------------------------------------------------*/ /*! * rasteropWordAlignedLow() * * Input: datad (ptr to dest image data) * dwpl (wpl of dest) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * datas (ptr to src image data) * swpl (wpl of src) * sx (x val of UL corner of src rectangle) * sy (y val of UL corner of src rectangle) * Return: void * * This is called when both the src and dest rects * are left aligned on (32-bit) word boundaries. * That is: dx & 31 == 0 and sx & 31 == 0 * * We make an optimized implementation of this because * it is a common case: e.g., two images are rasterop'd * starting from their UL corners (0,0). */ static void rasteropWordAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 nfullw; /* number of full words */ l_uint32 *psfword; /* ptr to first src word */ l_uint32 *pdfword; /* ptr to first dest word */ l_int32 lwbits; /* number of ovrhang bits in last partial word */ l_uint32 lwmask; /* mask for last partial word */ l_uint32 *lines, *lined; l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ nfullw = dw >> 5; lwbits = dw & 31; if (lwbits) lwmask = lmask32[lwbits]; psfword = datas + swpl * sy + (sx >> 5); pdfword = datad + dwpl * dy + (dx >> 5); /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_SRC: for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = *lines; lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, *lines, lwmask); } break; case PIX_NOT(PIX_SRC): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines), lwmask); } break; case (PIX_SRC | PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines | *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines | *lined), lwmask); } break; case (PIX_SRC & PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines & *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines & *lined), lwmask); } break; case (PIX_SRC ^ PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines ^ *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines ^ *lined), lwmask); } break; case (PIX_NOT(PIX_SRC) | PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (~(*lines) | *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (~(*lines) | *lined), lwmask); } break; case (PIX_NOT(PIX_SRC) & PIX_DST): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (~(*lines) & *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (~(*lines) & *lined), lwmask); } break; case (PIX_SRC | PIX_NOT(PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines | ~(*lined)); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines | ~(*lined)), lwmask); } break; case (PIX_SRC & PIX_NOT(PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = (*lines & ~(*lined)); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, (*lines & ~(*lined)), lwmask); } break; case (PIX_NOT(PIX_SRC | PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines | *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines | *lined), lwmask); } break; case (PIX_NOT(PIX_SRC & PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines & *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines & *lined), lwmask); } break; /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ case (PIX_NOT(PIX_SRC ^ PIX_DST)): for (i = 0; i < dh; i++) { lines = psfword + i * swpl; lined = pdfword + i * dwpl; for (j = 0; j < nfullw; j++) { *lined = ~(*lines ^ *lined); lined++; lines++; } if (lwbits) *lined = COMBINE_PARTIAL(*lined, ~(*lines ^ *lined), lwmask); } break; default: fprintf(stderr, "Operation %d invalid\n", op); } return; } /*--------------------------------------------------------------------* * Static low-level rasterop with vertical word alignment * *--------------------------------------------------------------------*/ /*! * rasteropVAlignedLow() * * Input: datad (ptr to dest image data) * dwpl (wpl of dest) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * datas (ptr to src image data) * swpl (wpl of src) * sx (x val of UL corner of src rectangle) * sy (y val of UL corner of src rectangle) * Return: void * * This is called when the left side of the src and dest * rects have the same alignment relative to (32-bit) word * boundaries; i.e., (dx & 31) == (sx & 31) */ static void rasteropVAlignedLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ l_int32 dfwpart2b; /* boolean (1, 0) if first dest word is doubly partial */ l_uint32 dfwmask; /* mask for first partial dest word */ l_int32 dfwbits; /* first word dest bits in ovrhang */ l_uint32 *pdfwpart; /* ptr to first partial dest word */ l_uint32 *psfwpart; /* ptr to first partial src word */ l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ l_int32 dnfullw; /* number of full words in dest */ l_uint32 *pdfwfull; /* ptr to first full dest word */ l_uint32 *psfwfull; /* ptr to first full src word */ l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ l_uint32 dlwmask; /* mask for last partial dest word */ l_int32 dlwbits; /* last word dest bits in ovrhang */ l_uint32 *pdlwpart; /* ptr to last partial dest word */ l_uint32 *pslwpart; /* ptr to last partial src word */ l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* is the first word partial? */ if ((dx & 31) == 0) { /* if not */ dfwpartb = 0; dfwbits = 0; } else { /* if so */ dfwpartb = 1; dfwbits = 32 - (dx & 31); dfwmask = rmask32[dfwbits]; pdfwpart = datad + dwpl * dy + (dx >> 5); psfwpart = datas + swpl * sy + (sx >> 5); } /* is the first word doubly partial? */ if (dw >= dfwbits) { /* if not */ dfwpart2b = 0; } else { /* if so */ dfwpart2b = 1; dfwmask &= lmask32[32 - dfwbits + dw]; } /* is there a full dest word? */ if (dfwpart2b == 1) { /* not */ dfwfullb = 0; dnfullw = 0; } else { dnfullw = (dw - dfwbits) >> 5; if (dnfullw == 0) { /* if not */ dfwfullb = 0; } else { /* if so */ dfwfullb = 1; if (dfwpartb) { pdfwfull = pdfwpart + 1; psfwfull = psfwpart + 1; } else { pdfwfull = datad + dwpl * dy + (dx >> 5); psfwfull = datas + swpl * sy + (sx >> 5); } } } /* is the last word partial? */ dlwbits = (dx + dw) & 31; if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ dlwpartb = 0; } else { dlwpartb = 1; dlwmask = lmask32[dlwbits]; if (dfwpartb) { pdlwpart = pdfwpart + 1 + dnfullw; pslwpart = psfwpart + 1 + dnfullw; } else { pdlwpart = datad + dwpl * dy + (dx >> 5) + dnfullw; pslwpart = datas + swpl * sy + (sx >> 5) + dnfullw; } } /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_SRC: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case PIX_NOT(PIX_SRC): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) |= *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) &= *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC ^ PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) ^= *(psfwfull + j); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~(*psfwpart) | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) |= ~(*(psfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~(*pslwpart) | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~(*psfwpart) & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) &= ~(*(psfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~(*pslwpart) & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart | ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = *(psfwfull + j) | ~(*(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart | ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (*psfwpart & ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = *(psfwfull + j) & ~(*(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (*pslwpart & ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC | PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j) | *(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC & PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j) & *(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ case (PIX_NOT(PIX_SRC ^ PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(*psfwpart ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) *(pdfwfull + j) = ~(*(psfwfull + j) ^ *(pdfwfull + j)); pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(*pslwpart ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; default: fprintf(stderr, "Operation %x invalid\n", op); } return; } /*--------------------------------------------------------------------* * Static low-level rasterop without vertical word alignment * *--------------------------------------------------------------------*/ /*! * rasteropGeneralLow() * * Input: datad (ptr to dest image data) * dwpl (wpl of dest) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * datas (ptr to src image data) * swpl (wpl of src) * sx (x val of UL corner of src rectangle) * sy (y val of UL corner of src rectangle) * Return: void * * This is called when the src and dest rects are * do not have the same (32-bit) word alignment. * * The method is a generalization of rasteropVAlignLow(). * There, the src image pieces were directly merged * with the dest. Here, we shift the source bits * to fill words that are aligned with the dest, and * then use those "source words" exactly in place * of the source words that were used in rasteropVAlignLow(). * * The critical parameter is thus the shift required * for the src. Consider the left edge of the rectangle. * The overhang into the src and dest words are found, * and the difference is exactly this shift. There are * two separate cases, depending on whether the src pixels * are shifted left or right. If the src overhang is * larger than the dest overhang, the src is shifted to * the right, a number of pixels equal to the shift are * left over for filling the next dest word, if necessary. * But if the dest overhang is larger than the src, * the src is shifted to the left, and it may also be * necessary to shift an equal number of pixels in from * the next src word. However, in both cases, after * the first partial (or complete) dest word has been * filled, the next src pixels will come from a left * shift that exhausts the pixels in the src word. */ static void rasteropGeneralLow(l_uint32 *datad, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 swpl, l_int32 sx, l_int32 sy) { l_int32 dfwpartb; /* boolean (1, 0) if first dest word is partial */ l_int32 dfwpart2b; /* boolean (1, 0) if 1st dest word is doubly partial */ l_uint32 dfwmask; /* mask for first partial dest word */ l_int32 dfwbits; /* first word dest bits in overhang; 0-31 */ l_int32 dhang; /* dest overhang in first partial word, */ /* or 0 if dest is word aligned (same as dfwbits) */ l_uint32 *pdfwpart; /* ptr to first partial dest word */ l_uint32 *psfwpart; /* ptr to first partial src word */ l_int32 dfwfullb; /* boolean (1, 0) if there exists a full dest word */ l_int32 dnfullw; /* number of full words in dest */ l_uint32 *pdfwfull; /* ptr to first full dest word */ l_uint32 *psfwfull; /* ptr to first full src word */ l_int32 dlwpartb; /* boolean (1, 0) if last dest word is partial */ l_uint32 dlwmask; /* mask for last partial dest word */ l_int32 dlwbits; /* last word dest bits in ovrhang */ l_uint32 *pdlwpart; /* ptr to last partial dest word */ l_uint32 *pslwpart; /* ptr to last partial src word */ l_uint32 sword; /* compose src word aligned with the dest words */ l_int32 sfwbits; /* first word src bits in overhang (1-32), */ /* or 32 if src is word aligned */ l_int32 shang; /* source overhang in the first partial word, */ /* or 0 if src is word aligned (not same as sfwbits) */ l_int32 sleftshift; /* bits to shift left for source word to align */ /* with the dest. Also the number of bits that */ /* get shifted to the right to align with the dest. */ l_int32 srightshift; /* bits to shift right for source word to align */ /* with dest. Also, the number of bits that get */ /* shifted left to align with the dest. */ l_int32 srightmask; /* mask for selecting sleftshift bits that have */ /* been shifted right by srightshift bits */ l_int32 sfwshiftdir; /* either SHIFT_LEFT or SHIFT_RIGHT */ l_int32 sfwaddb; /* boolean: do we need an additional sfw right shift? */ l_int32 slwaddb; /* boolean: do we need an additional slw right shift? */ l_int32 i, j; /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* To get alignment of src with dst (e.g., in the * full words) the src must do a left shift of its * relative overhang in the current src word, * and OR that with a right shift of * (31 - relative overhang) from the next src word. * We find the absolute overhangs, the relative overhangs, * the required shifts and the src mask */ if ((sx & 31) == 0) shang = 0; else shang = 32 - (sx & 31); if ((dx & 31) == 0) dhang = 0; else dhang = 32 - (dx & 31); if (shang == 0 && dhang == 0) { /* this should be treated by an aligned operation, not by this general rasterop! */ sleftshift = 0; srightshift = 0; srightmask = rmask32[0]; } else { if (dhang > shang) sleftshift = dhang - shang; else sleftshift = 32 - (shang - dhang); srightshift = 32 - sleftshift; srightmask = rmask32[sleftshift]; } /* is the first dest word partial? */ if ((dx & 31) == 0) { /* if not */ dfwpartb = 0; dfwbits = 0; } else { /* if so */ dfwpartb = 1; dfwbits = 32 - (dx & 31); dfwmask = rmask32[dfwbits]; pdfwpart = datad + dwpl * dy + (dx >> 5); psfwpart = datas + swpl * sy + (sx >> 5); sfwbits = 32 - (sx & 31); if (dfwbits > sfwbits) { sfwshiftdir = SHIFT_LEFT; /* and shift by sleftshift */ if (dw < shang) sfwaddb = 0; else sfwaddb = 1; /* and rshift in next src word by srightshift */ } else { sfwshiftdir = SHIFT_RIGHT; /* and shift by srightshift */ } } /* is the first dest word doubly partial? */ if (dw >= dfwbits) { /* if not */ dfwpart2b = 0; } else { /* if so */ dfwpart2b = 1; dfwmask &= lmask32[32 - dfwbits + dw]; } /* is there a full dest word? */ if (dfwpart2b == 1) { /* not */ dfwfullb = 0; dnfullw = 0; } else { dnfullw = (dw - dfwbits) >> 5; if (dnfullw == 0) { /* if not */ dfwfullb = 0; } else { /* if so */ dfwfullb = 1; pdfwfull = datad + dwpl * dy + ((dx + dhang) >> 5); psfwfull = datas + swpl * sy + ((sx + dhang) >> 5); /* yes, dhang */ } } /* is the last dest word partial? */ dlwbits = (dx + dw) & 31; if (dfwpart2b == 1 || dlwbits == 0) { /* if not */ dlwpartb = 0; } else { dlwpartb = 1; dlwmask = lmask32[dlwbits]; pdlwpart = datad + dwpl * dy + ((dx + dhang) >> 5) + dnfullw; pslwpart = datas + swpl * sy + ((sx + dhang) >> 5) + dnfullw; if (dlwbits <= srightshift) /* must be <= here !!! */ slwaddb = 0; /* we got enough bits from current src word */ else slwaddb = 1; /* must rshift in next src word by srightshift */ } /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ switch (op) { case PIX_SRC: /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, sword, dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, sword, dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case PIX_NOT(PIX_SRC): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~sword, dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~sword, dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) |= sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) &= sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC ^ PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) ^= sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) | PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~sword | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) |= ~sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~sword | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC) & PIX_DST): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (~sword & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) &= ~sword; } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (~sword & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC | PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword | ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = sword | ~(*(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword | ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_SRC & PIX_NOT(PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, (sword & ~(*pdfwpart)), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = sword & ~(*(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, (sword & ~(*pdlwpart)), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC | PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(sword | *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~(sword | *(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(sword | *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; case (PIX_NOT(PIX_SRC & PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(sword & *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~(sword & *(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(sword & *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; /* this is three cases: ~(s ^ d), ~s ^ d, s ^ ~d */ case (PIX_NOT(PIX_SRC ^ PIX_DST)): /* do the first partial word */ if (dfwpartb) { for (i = 0; i < dh; i++) { if (sfwshiftdir == SHIFT_LEFT) { sword = *psfwpart << sleftshift; if (sfwaddb) sword = COMBINE_PARTIAL(sword, *(psfwpart + 1) >> srightshift, srightmask); } else { /* shift right */ sword = *psfwpart >> srightshift; } *pdfwpart = COMBINE_PARTIAL(*pdfwpart, ~(sword ^ *pdfwpart), dfwmask); pdfwpart += dwpl; psfwpart += swpl; } } /* do the full words */ if (dfwfullb) { for (i = 0; i < dh; i++) { for (j = 0; j < dnfullw; j++) { sword = COMBINE_PARTIAL(*(psfwfull + j) << sleftshift, *(psfwfull + j + 1) >> srightshift, srightmask); *(pdfwfull + j) = ~(sword ^ *(pdfwfull + j)); } pdfwfull += dwpl; psfwfull += swpl; } } /* do the last partial word */ if (dlwpartb) { for (i = 0; i < dh; i++) { sword = *pslwpart << sleftshift; if (slwaddb) sword = COMBINE_PARTIAL(sword, *(pslwpart + 1) >> srightshift, srightmask); *pdlwpart = COMBINE_PARTIAL(*pdlwpart, ~(sword ^ *pdlwpart), dlwmask); pdlwpart += dwpl; pslwpart += swpl; } } break; default: fprintf(stderr, "Operation %x invalid\n", op); } return; } leptonica-1.70/src/pageseg.c0000644000175000017500000007230512244204374014064 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pageseg.c * * Top level page segmentation * l_int32 pixGetRegionsBinary() * * Halftone region extraction * PIX *pixGenHalftoneMask() * * Textline extraction * PIX *pixGenTextlineMask() * * Textblock extraction * PIX *pixGenTextblockMask() * * Location of page foreground * PIX *pixFindPageForeground() * * Extraction of characters from image with only text * l_int32 pixSplitIntoCharacters() * BOXA *pixSplitComponentWithProfile() */ #include "allheaders.h" /*------------------------------------------------------------------* * Top level page segmentation * *------------------------------------------------------------------*/ /*! * pixGetRegionsBinary() * * Input: pixs (1 bpp, assumed to be 300 to 400 ppi) * &pixhm ( halftone mask) * &pixtm ( textline mask) * &pixtb ( textblock mask) * debug (flag: set to 1 for debug output) * Return: 0 if OK, 1 on error * * Notes: * (1) It is best to deskew the image before segmenting. * (2) The debug flag enables a number of outputs. These * are included to show how to generate and save/display * these results. */ l_int32 pixGetRegionsBinary(PIX *pixs, PIX **ppixhm, PIX **ppixtm, PIX **ppixtb, l_int32 debug) { char *tempname; l_int32 htfound, tlfound; PIX *pixr, *pixt1, *pixt2; PIX *pixtext; /* text pixels only */ PIX *pixhm2; /* halftone mask; 2x reduction */ PIX *pixhm; /* halftone mask; */ PIX *pixtm2; /* textline mask; 2x reduction */ PIX *pixtm; /* textline mask */ PIX *pixvws; /* vertical white space mask */ PIX *pixtb2; /* textblock mask; 2x reduction */ PIX *pixtbf2; /* textblock mask; 2x reduction; small comps filtered */ PIX *pixtb; /* textblock mask */ PROCNAME("pixGetRegionsBinary"); if (ppixhm) *ppixhm = NULL; if (ppixtm) *ppixtm = NULL; if (ppixtb) *ppixtb = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", procName, 1); /* 2x reduce, to 150 -200 ppi */ pixr = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); pixDisplayWrite(pixr, debug); /* Get the halftone mask */ pixhm2 = pixGenHalftoneMask(pixr, &pixtext, &htfound, debug); /* Get the textline mask from the text pixels */ pixtm2 = pixGenTextlineMask(pixtext, &pixvws, &tlfound, debug); /* Get the textblock mask from the textline mask */ pixtb2 = pixGenTextblockMask(pixtm2, pixvws, debug); pixDestroy(&pixr); pixDestroy(&pixtext); pixDestroy(&pixvws); /* Remove small components from the mask, where a small * component is defined as one with both width and height < 60 */ pixtbf2 = pixSelectBySize(pixtb2, 60, 60, 4, L_SELECT_IF_EITHER, L_SELECT_IF_GTE, NULL); pixDestroy(&pixtb2); pixDisplayWriteFormat(pixtbf2, debug, IFF_PNG); /* Expand all masks to full resolution, and do filling or * small dilations for better coverage. */ pixhm = pixExpandReplicate(pixhm2, 2); pixt1 = pixSeedfillBinary(NULL, pixhm, pixs, 8); pixOr(pixhm, pixhm, pixt1); pixDestroy(&pixt1); pixDisplayWriteFormat(pixhm, debug, IFF_PNG); pixt1 = pixExpandReplicate(pixtm2, 2); pixtm = pixDilateBrick(NULL, pixt1, 3, 3); pixDestroy(&pixt1); pixDisplayWriteFormat(pixtm, debug, IFF_PNG); pixt1 = pixExpandReplicate(pixtbf2, 2); pixtb = pixDilateBrick(NULL, pixt1, 3, 3); pixDestroy(&pixt1); pixDisplayWriteFormat(pixtb, debug, IFF_PNG); pixDestroy(&pixhm2); pixDestroy(&pixtm2); pixDestroy(&pixtbf2); /* Debug: identify objects that are neither text nor halftone image */ if (debug) { pixt1 = pixSubtract(NULL, pixs, pixtm); /* remove text pixels */ pixt2 = pixSubtract(NULL, pixt1, pixhm); /* remove halftone pixels */ pixDisplayWriteFormat(pixt2, 1, IFF_PNG); pixDestroy(&pixt1); pixDestroy(&pixt2); } /* Debug: display textline components with random colors */ if (debug) { l_int32 w, h; BOXA *boxa; PIXA *pixa; boxa = pixConnComp(pixtm, &pixa, 8); pixGetDimensions(pixtm, &w, &h, NULL); pixt1 = pixaDisplayRandomCmap(pixa, w, h); pixcmapResetColor(pixGetColormap(pixt1), 0, 255, 255, 255); pixDisplay(pixt1, 100, 100); pixDisplayWriteFormat(pixt1, 1, IFF_PNG); pixaDestroy(&pixa); boxaDestroy(&boxa); pixDestroy(&pixt1); } /* Debug: identify the outlines of each textblock */ if (debug) { PIXCMAP *cmap; PTAA *ptaa; ptaa = pixGetOuterBordersPtaa(pixtb); tempname = genTempFilename("/tmp", "tb_outlines.ptaa", 0, 0); ptaaWrite(tempname, ptaa, 1); FREE(tempname); pixt1 = pixRenderRandomCmapPtaa(pixtb, ptaa, 1, 16, 1); cmap = pixGetColormap(pixt1); pixcmapResetColor(cmap, 0, 130, 130, 130); pixDisplay(pixt1, 500, 100); pixDisplayWriteFormat(pixt1, 1, IFF_PNG); pixDestroy(&pixt1); ptaaDestroy(&ptaa); } /* Debug: get b.b. for all mask components */ if (debug) { BOXA *bahm, *batm, *batb; bahm = pixConnComp(pixhm, NULL, 4); batm = pixConnComp(pixtm, NULL, 4); batb = pixConnComp(pixtb, NULL, 4); tempname = genTempFilename("/tmp", "htmask.boxa", 0, 0); boxaWrite(tempname, bahm); FREE(tempname); tempname = genTempFilename("/tmp", "textmask.boxa", 0, 0); boxaWrite(tempname, batm); FREE(tempname); tempname = genTempFilename("/tmp", "textblock.boxa", 0, 0); boxaWrite(tempname, batb); FREE(tempname); boxaDestroy(&bahm); boxaDestroy(&batm); boxaDestroy(&batb); } if (ppixhm) *ppixhm = pixhm; else pixDestroy(&pixhm); if (ppixtm) *ppixtm = pixtm; else pixDestroy(&pixtm); if (ppixtb) *ppixtb = pixtb; else pixDestroy(&pixtb); return 0; } /*------------------------------------------------------------------* * Halftone region extraction * *------------------------------------------------------------------*/ /*! * pixGenHalftoneMask() * * Input: pixs (1 bpp, assumed to be 150 to 200 ppi) * &pixtext ( text part of pixs) * &htfound ( 1 if the mask is not empty) * debug (flag: 1 for debug output) * Return: pixd (halftone mask), or null on error */ PIX * pixGenHalftoneMask(PIX *pixs, PIX **ppixtext, l_int32 *phtfound, l_int32 debug) { l_int32 empty; PIX *pixt1, *pixt2, *pixhs, *pixhm, *pixd; PROCNAME("pixGenHalftoneMask"); if (ppixtext) *ppixtext = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); /* Compute seed for halftone parts at 8x reduction */ pixt1 = pixReduceRankBinaryCascade(pixs, 4, 4, 3, 0); pixt2 = pixOpenBrick(NULL, pixt1, 5, 5); pixhs = pixExpandReplicate(pixt2, 8); /* back to 2x reduction */ pixDestroy(&pixt1); pixDestroy(&pixt2); pixDisplayWriteFormat(pixhs, debug, IFF_PNG); /* Compute mask for connected regions */ pixhm = pixCloseSafeBrick(NULL, pixs, 4, 4); pixDisplayWriteFormat(pixhm, debug, IFF_PNG); /* Fill seed into mask to get halftone mask */ pixd = pixSeedfillBinary(NULL, pixhs, pixhm, 4); #if 0 /* Moderate opening to remove thin lines, etc. */ pixOpenBrick(pixd, pixd, 10, 10); pixDisplayWrite(pixd, debug); #endif /* Check if mask is empty */ pixZero(pixd, &empty); if (phtfound) { *phtfound = 0; if (!empty) *phtfound = 1; } /* Optionally, get all pixels that are not under the halftone mask */ if (ppixtext) { if (empty) *ppixtext = pixCopy(NULL, pixs); else *ppixtext = pixSubtract(NULL, pixs, pixd); pixDisplayWriteFormat(*ppixtext, debug, IFF_PNG); } pixDestroy(&pixhs); pixDestroy(&pixhm); return pixd; } /*------------------------------------------------------------------* * Textline extraction * *------------------------------------------------------------------*/ /*! * pixGenTextlineMask() * * Input: pixs (1 bpp, assumed to be 150 to 200 ppi) * &pixvws ( vertical whitespace mask) * &tlfound ( 1 if the mask is not empty) * debug (flag: 1 for debug output) * Return: pixd (textline mask), or null on error * * Notes: * (1) The input pixs should be deskewed. * (2) pixs should have no halftone pixels. * (3) Both the input image and the returned textline mask * are at the same resolution. */ PIX * pixGenTextlineMask(PIX *pixs, PIX **ppixvws, l_int32 *ptlfound, l_int32 debug) { l_int32 empty; PIX *pixt1, *pixt2, *pixvws, *pixd; PROCNAME("pixGenTextlineMask"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ppixvws) return (PIX *)ERROR_PTR("&pixvws not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); /* First we need a vertical whitespace mask. Invert the image. */ pixt1 = pixInvert(NULL, pixs); /* The whitespace mask will break textlines where there * is a large amount of white space below or above. * This can be prevented by identifying regions of the * inverted image that have large horizontal extent (bigger than * the separation between columns) and significant * vertical extent (bigger than the separation between * textlines), and subtracting this from the bg. */ pixt2 = pixMorphCompSequence(pixt1, "o80.60", 0); pixSubtract(pixt1, pixt1, pixt2); pixDisplayWriteFormat(pixt1, debug, IFF_PNG); pixDestroy(&pixt2); /* Identify vertical whitespace by opening the remaining bg. * o5.1 removes thin vertical bg lines and o1.200 extracts * long vertical bg lines. */ pixvws = pixMorphCompSequence(pixt1, "o5.1 + o1.200", 0); *ppixvws = pixvws; pixDisplayWriteFormat(pixvws, debug, IFF_PNG); pixDestroy(&pixt1); /* Three steps to getting text line mask: * (1) close the characters and words in the textlines * (2) open the vertical whitespace corridors back up * (3) small opening to remove noise */ pixt1 = pixCloseSafeBrick(NULL, pixs, 30, 1); pixDisplayWrite(pixt1, debug); pixd = pixSubtract(NULL, pixt1, pixvws); pixOpenBrick(pixd, pixd, 3, 3); pixDisplayWriteFormat(pixd, debug, IFF_PNG); pixDestroy(&pixt1); /* Check if text line mask is empty */ if (ptlfound) { *ptlfound = 0; pixZero(pixd, &empty); if (!empty) *ptlfound = 1; } return pixd; } /*------------------------------------------------------------------* * Textblock extraction * *------------------------------------------------------------------*/ /*! * pixGenTextblockMask() * * Input: pixs (1 bpp, textline mask, assumed to be 150 to 200 ppi) * pixvws (vertical white space mask) * debug (flag: 1 for debug output) * Return: pixd (textblock mask), or null on error * * Notes: * (1) Both the input masks (textline and vertical white space) and * the returned textblock mask are at the same resolution. * (2) The result is somewhat noisy, in that small "blocks" of * text may be included. These can be removed by post-processing, * using, e.g., * pixSelectBySize(pix, 60, 60, 4, L_SELECT_IF_EITHER, * L_SELECT_IF_GTE, NULL); */ PIX * pixGenTextblockMask(PIX *pixs, PIX *pixvws, l_int32 debug) { PIX *pixt1, *pixt2, *pixt3, *pixd; PROCNAME("pixGenTextblockMask"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixvws) return (PIX *)ERROR_PTR("pixvws not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); /* Join pixels vertically to make a textblock mask */ pixt1 = pixMorphSequence(pixs, "c1.10 + o4.1", 0); pixDisplayWriteFormat(pixt1, debug, IFF_PNG); /* Solidify the textblock mask and remove noise: * (1) For each cc, close the blocks and dilate slightly * to form a solid mask. * (2) Small horizontal closing between components. * (3) Open the white space between columns, again. * (4) Remove small components. */ pixt2 = pixMorphSequenceByComponent(pixt1, "c30.30 + d3.3", 8, 0, 0, NULL); pixCloseSafeBrick(pixt2, pixt2, 10, 1); pixDisplayWriteFormat(pixt2, debug, IFF_PNG); pixt3 = pixSubtract(NULL, pixt2, pixvws); pixDisplayWriteFormat(pixt3, debug, IFF_PNG); pixd = pixSelectBySize(pixt3, 25, 5, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); pixDisplayWriteFormat(pixd, debug, IFF_PNG); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); return pixd; } /*------------------------------------------------------------------* * Location of page foreground * *------------------------------------------------------------------*/ /*! * pixFindPageForeground() * * Input: pixs (full resolution (any type or depth) * threshold (for binarization; typically about 128) * mindist (min distance of text from border to allow * cleaning near border; at 2x reduction, this * should be larger than 50; typically about 70) * erasedist (when conditions are satisfied, erase anything * within this distance of the edge; * typically 30 at 2x reduction) * pagenum (use for debugging when called repeatedly; labels * debug images that are assembled into pdfdir) * showmorph (set to a negative integer to show steps in * generating masks; this is typically used * for debugging region extraction) * display (set to 1 to display mask and selected region * for debugging a single page) * pdfdir (subdirectory of /tmp where images showing the * result are placed when called repeatedly; use * null if no output requested) * Return: box (region including foreground, with some pixel noise * removed), or null if not found * * Notes: * (1) This doesn't simply crop to the fg. It attempts to remove * pixel noise and junk at the edge of the image before cropping. * The input @threshold is used if pixs is not 1 bpp. * (2) There are several debugging options, determined by the * last 4 arguments. * (3) If you want pdf output of results when called repeatedly, * the pagenum arg labels the images written, which go into * /tmp//.png. In that case, * you would clean out the /tmp directory before calling this * function on each page: * lept_rmdir(pdfdir); * lept_mkdir(pdfdir); */ BOX * pixFindPageForeground(PIX *pixs, l_int32 threshold, l_int32 mindist, l_int32 erasedist, l_int32 pagenum, l_int32 showmorph, l_int32 display, const char *pdfdir) { char buf[64]; l_int32 flag, nbox, intersects; l_int32 w, h, bx, by, bw, bh, left, right, top, bottom; PIX *pixb, *pixb2, *pixseed, *pixsf, *pixm, *pix1, *pixg2; BOX *box, *boxfg, *boxin, *boxd; BOXA *ba1, *ba2; PROCNAME("pixFindPageForeground"); if (!pixs) return (BOX *)ERROR_PTR("pixs not defined", procName, NULL); /* Binarize, downscale by 0.5, remove the noise to generate a seed, * and do a seedfill back from the seed into those 8-connected * components of the binarized image for which there was at least * one seed pixel. Also clear out any components that are within * 10 pixels of the edge at 2x reduction. */ flag = (showmorph) ? -1 : 0; /* if showmorph == -1, write intermediate * images to /tmp/seq_output_1.pdf */ pixb = pixConvertTo1(pixs, threshold); pixb2 = pixScale(pixb, 0.5, 0.5); pixseed = pixMorphSequence(pixb2, "o1.2 + c9.9 + o3.5", flag); pixsf = pixSeedfillBinary(NULL, pixseed, pixb2, 8); pixSetOrClearBorder(pixsf, 10, 10, 10, 10, PIX_SET); pixm = pixRemoveBorderConnComps(pixsf, 8); if (display) pixDisplay(pixm, 100, 100); /* Now, where is the main block of text? We want to remove noise near * the edge of the image, but to do that, we have to be convinced that * (1) there is noise and (2) it is far enough from the text block * and close enough to the edge. For each edge, if the block * is more than mindist from that edge, then clean 'erasedist' * pixels from the edge. */ pix1 = pixMorphSequence(pixm, "c50.50", flag - 1); ba1 = pixConnComp(pix1, NULL, 8); ba2 = boxaSort(ba1, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); pixGetDimensions(pix1, &w, &h, NULL); nbox = boxaGetCount(ba2); if (nbox > 1) { box = boxaGetBox(ba2, 0, L_CLONE); boxGetGeometry(box, &bx, &by, &bw, &bh); left = (bx > mindist) ? erasedist : 0; right = (w - bx - bw > mindist) ? erasedist : 0; top = (by > mindist) ? erasedist : 0; bottom = (h - by - bh > mindist) ? erasedist : 0; pixSetOrClearBorder(pixm, left, right, top, bottom, PIX_CLR); boxDestroy(&box); } pixDestroy(&pix1); boxaDestroy(&ba1); boxaDestroy(&ba2); /* Locate the foreground region; don't bother cropping */ pixClipToForeground(pixm, NULL, &boxfg); /* Sanity check the fg region. Make sure it's not confined * to a thin boundary on the left and right sides of the image, * in which case it is likely to be noise. */ if (boxfg) { boxin = boxCreate(0.1 * w, 0, 0.8 * w, h); boxIntersects(boxfg, boxin, &intersects); if (!intersects) { L_INFO("found only noise on page %d\n", procName, pagenum); boxDestroy(&boxfg); } boxDestroy(&boxin); } boxd = NULL; if (!boxfg) { L_INFO("no fg region found for page %d\n", procName, pagenum); } else { boxAdjustSides(boxfg, boxfg, -2, 2, -2, 2); /* tiny expansion */ boxd = boxTransform(boxfg, 0, 0, 2.0, 2.0); /* Write image showing box for this page. This is to be * bundled up into a pdf of all the pages, which can be * generated by convertFilesToPdf() */ if (pdfdir) { pixg2 = pixConvert1To4Cmap(pixb); pixRenderBoxArb(pixg2, boxd, 3, 255, 0, 0); snprintf(buf, sizeof(buf), "/tmp/%s/%05d.png", pdfdir, pagenum); if (display) pixDisplay(pixg2, 700, 100); pixWrite(buf, pixg2, IFF_PNG); pixDestroy(&pixg2); } } pixDestroy(&pixb); pixDestroy(&pixb2); pixDestroy(&pixseed); pixDestroy(&pixsf); pixDestroy(&pixm); boxDestroy(&boxfg); return boxd; } /*------------------------------------------------------------------* * Extraction of characters from image with only text * *------------------------------------------------------------------*/ /*! * pixSplitIntoCharacters() * * Input: pixs (1 bpp, contains only deskewed text) * minw (minimum component width for initial filtering; typ. 4) * minh (minimum component height for initial filtering; typ. 4) * &boxa ( character bounding boxes) * &pixa ( character images) * &pixdebug ( showing splittings) * * Return: 0 if OK, 1 on error * * Notes: * (1) This is a simple function that attempts to find split points * based on vertical pixel profiles. * (2) It should be given an image that has an arbitrary number * of text characters. * (3) The returned pixa includes the boxes from which the * (possibly split) components are extracted. */ l_int32 pixSplitIntoCharacters(PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdebug) { l_int32 ncomp, i, xoff, yoff; BOXA *boxa1, *boxa2, *boxat1, *boxat2, *boxad; BOXAA *baa; PIX *pix, *pix1, *pix2, *pixdb; PIXA *pixa1, *pixadb; PROCNAME("pixSplitIntoCharacters"); if (pboxa) *pboxa = NULL; if (ppixa) *ppixa = NULL; if (ppixdebug) *ppixdebug = NULL; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); /* Remove the small stuff */ pix1 = pixSelectBySize(pixs, minw, minh, 8, L_SELECT_IF_BOTH, L_SELECT_IF_GT, NULL); /* Small vertical close for consolidation */ pix2 = pixMorphSequence(pix1, "c1.10", 0); pixDestroy(&pix1); /* Get the 8-connected components */ boxa1 = pixConnComp(pix2, &pixa1, 8); pixDestroy(&pix2); boxaDestroy(&boxa1); /* Split the components if obvious */ ncomp = pixaGetCount(pixa1); boxa2 = boxaCreate(ncomp); pixadb = (ppixdebug) ? pixaCreate(ncomp) : NULL; for (i = 0; i < ncomp; i++) { pix = pixaGetPix(pixa1, i, L_CLONE); if (ppixdebug) { boxat1 = pixSplitComponentWithProfile(pix, 10, 7, &pixdb); if (pixdb) pixaAddPix(pixadb, pixdb, L_INSERT); } else { boxat1 = pixSplitComponentWithProfile(pix, 10, 7, NULL); } pixaGetBoxGeometry(pixa1, i, &xoff, &yoff, NULL, NULL); boxat2 = boxaTransform(boxat1, xoff, yoff, 1.0, 1.0); boxaJoin(boxa2, boxat2, 0, -1); pixDestroy(&pix); boxaDestroy(&boxat1); boxaDestroy(&boxat2); } pixaDestroy(&pixa1); /* Generate the debug image */ if (ppixdebug) { if (pixaGetCount(pixadb) > 0) { *ppixdebug = pixaDisplayTiledInRows(pixadb, 32, 1500, 1.0, 0, 20, 1); } pixaDestroy(&pixadb); } /* Do a 2D sort on the bounding boxes, and flatten the result to 1D */ baa = boxaSort2d(boxa2, NULL, 0, 0, 5); boxad = boxaaFlattenToBoxa(baa, NULL, L_CLONE); boxaaDestroy(&baa); boxaDestroy(&boxa2); /* Optionally extract the pieces from the input image */ if (ppixa) *ppixa = pixClipRectangles(pixs, boxad); if (pboxa) *pboxa = boxad; else boxaDestroy(&boxad); return 0; } /*! * pixSplitComponentWithProfile() * * Input: pixs (1 bpp, exactly one connected component) * delta (distance used in extrema finding in a numa; typ. 10) * mindel (minimum required difference between profile minimum * and profile values +2 and -2 away; typ. 7) * &pixdebug ( debug image of splitting) * Return: boxa (of c.c. after splitting), or null on error * * Notes: * (1) This will split the most obvious cases of touching characters. * The split points it is searching for are narrow and deep * minimima in the vertical pixel projection profile, after a * large vertical closing has been applied to the component. */ BOXA * pixSplitComponentWithProfile(PIX *pixs, l_int32 delta, l_int32 mindel, PIX **ppixdebug) { l_int32 w, h, n2, i, firstmin, xmin, xshift; l_int32 nmin, nleft, nright, nsplit, isplit, ncomp; l_int32 *array1, *array2; BOX *box; BOXA *boxad; NUMA *na1, *na2, *nasplit; PIX *pix1, *pixdb; PROCNAME("pixSplitComponentsWithProfile"); if (ppixdebug) *ppixdebug = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixa undefined or not 1 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); /* Closing to consolidate characters vertically */ pix1 = pixCloseSafeBrick(NULL, pixs, 1, 100); /* Get extrema of column projections */ boxad = boxaCreate(2); na1 = pixCountPixelsByColumn(pix1); /* w elements */ pixDestroy(&pix1); na2 = numaFindExtrema(na1, delta); n2 = numaGetCount(na2); if (n2 < 3) { /* no split possible */ box = boxCreate(0, 0, w, h); boxaAddBox(boxad, box, L_INSERT); numaDestroy(&na1); numaDestroy(&na2); return boxad; } /* Look for sufficiently deep and narrow minima. * All minima of of interest must be surrounded by max on each * side. firstmin is the index of first possible minimum. */ array1 = numaGetIArray(na1); array2 = numaGetIArray(na2); if (ppixdebug) numaWriteStream(stderr, na2); firstmin = (array1[array2[0]] > array1[array2[1]]) ? 1 : 2; nasplit = numaCreate(n2); /* will hold split locations */ for (i = firstmin; i < n2 - 1; i+= 2) { xmin = array2[i]; nmin = array1[xmin]; if (xmin + 2 >= w) break; /* no more splits possible */ nleft = array1[xmin - 2]; nright = array1[xmin + 2]; if (ppixdebug) { fprintf(stderr, "Splitting: xmin = %d, w = %d; nl = %d, nmin = %d, nr = %d\n", xmin, w, nleft, nmin, nright); } if (nleft - nmin >= mindel && nright - nmin >= mindel) /* split */ numaAddNumber(nasplit, xmin); } nsplit = numaGetCount(nasplit); #if 0 if (ppixdebug && nsplit > 0) gplotSimple1(na1, GPLOT_X11, "/tmp/splitroot", NULL); #endif numaDestroy(&na1); numaDestroy(&na2); FREE(array1); FREE(array2); if (nsplit == 0) { /* no splitting */ box = boxCreate(0, 0, w, h); boxaAddBox(boxad, box, L_INSERT); return boxad; } /* Use split points to generate b.b. after splitting */ for (i = 0, xshift = 0; i < nsplit; i++) { numaGetIValue(nasplit, i, &isplit); box = boxCreate(xshift, 0, isplit - xshift, h); boxaAddBox(boxad, box, L_INSERT); xshift = isplit + 1; } box = boxCreate(xshift, 0, w - xshift, h); boxaAddBox(boxad, box, L_INSERT); numaDestroy(&nasplit); if (ppixdebug) { pixdb = pixConvertTo32(pixs); ncomp = boxaGetCount(boxad); for (i = 0; i < ncomp; i++) { box = boxaGetBox(boxad, i, L_CLONE); pixRenderBoxBlend(pixdb, box, 1, 255, 0, 0, 0.5); boxDestroy(&box); } *ppixdebug = pixdb; } return boxad; } leptonica-1.70/src/grayquantlow.c0000640000175000017500000007564612244745162015222 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * grayquantlow.c * * Thresholding from 8 bpp to 1 bpp * * Floyd-Steinberg dithering to binary * void ditherToBinaryLow() * void ditherToBinaryLineLow() * * Simple (pixelwise) binarization * void thresholdToBinaryLow() * void thresholdToBinaryLineLow() * * A slower version of Floyd-Steinberg dithering that uses LUTs * void ditherToBinaryLUTLow() * void ditherToBinaryLineLUTLow() * l_int32 make8To1DitherTables() * * Thresholding from 8 bpp to 2 bpp * * Floyd-Steinberg-like dithering to 2 bpp * void ditherTo2bppLow() * void ditherTo2bppLineLow() * l_int32 make8To2DitherTables() * * Simple thresholding to 2 bpp * void thresholdTo2bppLow() * * Thresholding from 8 bpp to 4 bpp * * Simple thresholding to 4 bpp * void thresholdTo4bppLow() */ #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_UNROLLING 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Binarization by Floyd-Steinberg Dithering * *------------------------------------------------------------------*/ /* * ditherToBinaryLow() * * See comments in pixDitherToBinary() in binarize.c */ void ditherToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip) { l_int32 i; l_uint32 *lined; /* do all lines except last line */ memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ for (i = 0; i < h - 1; i++) { memcpy(bufs1, bufs2, 4 * wpls); memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); lined = datad + i * wpld; ditherToBinaryLineLow(lined, w, bufs1, bufs2, lowerclip, upperclip, 0); } /* do last line */ memcpy(bufs1, bufs2, 4 * wpls); lined = datad + (h - 1) * wpld; ditherToBinaryLineLow(lined, w, bufs1, bufs2, lowerclip, upperclip, 1); return; } /* * ditherToBinaryLineLow() * * Input: lined (ptr to beginning of dest line * w (width of image in pixels) * bufs1 (buffer of current source line) * bufs2 (buffer of next source line) * lowerclip (lower clip distance to black) * upperclip (upper clip distance to white) * lastlineflag (0 if not last dest line, 1 if last dest line) * Return: void * * Dispatches FS error diffusion dithering for * a single line of the image. If lastlineflag == 0, * both source buffers are used; otherwise, only bufs1 * is used. We use source buffers because the error * is propagated into them, and we don't want to change * the input src image. * * We break dithering out line by line to make it * easier to combine functions like interpolative * scaling and error diffusion dithering, as such a * combination of operations obviates the need to * generate a 2x grayscale image as an intermediary. */ void ditherToBinaryLineLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip, l_int32 lastlineflag) { l_int32 j; l_int32 oval, eval; l_uint8 fval1, fval2, rval, bval, dval; if (lastlineflag == 0) { for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (oval > 127) { /* binarize to OFF */ if ((eval = 255 - oval) > upperclip) { /* subtract from neighbors */ fval1 = (3 * eval) / 8; fval2 = eval / 4; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MAX(0, rval - fval1); SET_DATA_BYTE(bufs1, j + 1, rval); bval = GET_DATA_BYTE(bufs2, j); bval = L_MAX(0, bval - fval1); SET_DATA_BYTE(bufs2, j, bval); dval = GET_DATA_BYTE(bufs2, j + 1); dval = L_MAX(0, dval - fval2); SET_DATA_BYTE(bufs2, j + 1, dval); } } else { /* oval <= 127; binarize to ON */ SET_DATA_BIT(lined, j); /* ON pixel */ if (oval > lowerclip) { /* add to neighbors */ fval1 = (3 * oval) / 8; fval2 = oval / 4; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MIN(255, rval + fval1); SET_DATA_BYTE(bufs1, j + 1, rval); bval = GET_DATA_BYTE(bufs2, j); bval = L_MIN(255, bval + fval1); SET_DATA_BYTE(bufs2, j, bval); dval = GET_DATA_BYTE(bufs2, j + 1); dval = L_MIN(255, dval + fval2); SET_DATA_BYTE(bufs2, j + 1, dval); } } } /* do last column: j = w - 1 */ oval = GET_DATA_BYTE(bufs1, j); if (oval > 127) { /* binarize to OFF */ if ((eval = 255 - oval) > upperclip) { /* subtract from neighbors */ fval1 = (3 * eval) / 8; bval = GET_DATA_BYTE(bufs2, j); bval = L_MAX(0, bval - fval1); SET_DATA_BYTE(bufs2, j, bval); } } else { /*oval <= 127; binarize to ON */ SET_DATA_BIT(lined, j); /* ON pixel */ if (oval > lowerclip) { /* add to neighbors */ fval1 = (3 * oval) / 8; bval = GET_DATA_BYTE(bufs2, j); bval = L_MIN(255, bval + fval1); SET_DATA_BYTE(bufs2, j, bval); } } } else { /* lastlineflag == 1 */ for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (oval > 127) { /* binarize to OFF */ if ((eval = 255 - oval) > upperclip) { /* subtract from neighbors */ fval1 = (3 * eval) / 8; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MAX(0, rval - fval1); SET_DATA_BYTE(bufs1, j + 1, rval); } } else { /* oval <= 127; binarize to ON */ SET_DATA_BIT(lined, j); /* ON pixel */ if (oval > lowerclip) { /* add to neighbors */ fval1 = (3 * oval) / 8; rval = GET_DATA_BYTE(bufs1, j + 1); rval = L_MIN(255, rval + fval1); SET_DATA_BYTE(bufs1, j + 1, rval); } } } /* do last pixel: (i, j) = (h - 1, w - 1) */ oval = GET_DATA_BYTE(bufs1, j); if (oval < 128) SET_DATA_BIT(lined, j); /* ON pixel */ } return; } /*------------------------------------------------------------------* * Simple binarization with fixed threshold * *------------------------------------------------------------------*/ /* * thresholdToBinaryLow() * * If the source pixel is less than thresh, * the dest will be 1; otherwise, it will be 0 */ void thresholdToBinaryLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls, l_int32 thresh) { l_int32 i; l_uint32 *lines, *lined; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; thresholdToBinaryLineLow(lined, w, lines, d, thresh); } return; } /* * thresholdToBinaryLineLow() * */ void thresholdToBinaryLineLow(l_uint32 *lined, l_int32 w, l_uint32 *lines, l_int32 d, l_int32 thresh) { l_int32 j, k, gval, scount, dcount; l_uint32 sword, dword; PROCNAME("thresholdToBinaryLineLow"); switch (d) { case 4: /* Unrolled as 4 source words, 1 dest word */ for (j = 0, scount = 0, dcount = 0; j + 31 < w; j += 32) { dword = 0; for (k = 0; k < 4; k++) { sword = lines[scount++]; dword <<= 8; gval = (sword >> 28) & 0xf; /* Trick used here and below: if gval < thresh then * gval - thresh < 0, so its high-order bit is 1, and * ((gval - thresh) >> 31) & 1 == 1; likewise, if * gval >= thresh, then ((gval - thresh) >> 31) & 1 == 0 * Doing it this way avoids a random (and thus easily * mispredicted) branch on each pixel. */ dword |= ((gval - thresh) >> 24) & 128; gval = (sword >> 24) & 0xf; dword |= ((gval - thresh) >> 25) & 64; gval = (sword >> 20) & 0xf; dword |= ((gval - thresh) >> 26) & 32; gval = (sword >> 16) & 0xf; dword |= ((gval - thresh) >> 27) & 16; gval = (sword >> 12) & 0xf; dword |= ((gval - thresh) >> 28) & 8; gval = (sword >> 8) & 0xf; dword |= ((gval - thresh) >> 29) & 4; gval = (sword >> 4) & 0xf; dword |= ((gval - thresh) >> 30) & 2; gval = sword & 0xf; dword |= ((gval - thresh) >> 31) & 1; } lined[dcount++] = dword; } if (j < w) { dword = 0; for (; j < w; j++) { if ((j & 7) == 0) { sword = lines[scount++]; } gval = (sword >> 28) & 0xf; sword <<= 4; dword |= (((gval - thresh) >> 31) & 1) << (31 - (j & 31)); } lined[dcount] = dword; } #if DEBUG_UNROLLING #define CHECK_BIT(a, b, c) if (GET_DATA_BIT(a, b) != c) { \ fprintf(stderr, "Error: mismatch at %d/%d(%d), %d vs %d\n", \ j, w, d, GET_DATA_BIT(a, b), c); } for (j = 0; j < w; j++) { gval = GET_DATA_QBIT(lines, j); CHECK_BIT(lined, j, gval < thresh ? 1 : 0); } #endif break; case 8: /* Unrolled as 8 source words, 1 dest word */ for (j = 0, scount = 0, dcount = 0; j + 31 < w; j += 32) { dword = 0; for (k = 0; k < 8; k++) { sword = lines[scount++]; dword <<= 4; gval = (sword >> 24) & 0xff; dword |= ((gval - thresh) >> 28) & 8; gval = (sword >> 16) & 0xff; dword |= ((gval - thresh) >> 29) & 4; gval = (sword >> 8) & 0xff; dword |= ((gval - thresh) >> 30) & 2; gval = sword & 0xff; dword |= ((gval - thresh) >> 31) & 1; } lined[dcount++] = dword; } if (j < w) { dword = 0; for (; j < w; j++) { if ((j & 3) == 0) { sword = lines[scount++]; } gval = (sword >> 24) & 0xff; sword <<= 8; dword |= (((gval - thresh) >> 31) & 1) << (31 - (j & 31)); } lined[dcount] = dword; } #if DEBUG_UNROLLING for (j = 0; j < w; j++) { gval = GET_DATA_BYTE(lines, j); CHECK_BIT(lined, j, gval < thresh ? 1 : 0); } #undef CHECK_BIT #endif break; default: L_ERROR("src depth not 4 or 8 bpp\n", procName); break; } return; } /*---------------------------------------------------------------------* * Alternate implementation of dithering that uses lookup tables. * * This is analogous to the method used in dithering to 2 bpp. * *---------------------------------------------------------------------*/ /*! * ditherToBinaryLUTLow() * * Low-level function for doing Floyd-Steinberg error diffusion * dithering from 8 bpp (datas) to 1 bpp (datad). Two source * line buffers, bufs1 and bufs2, are provided, along with three * 256-entry lookup tables: tabval gives the output pixel value, * tab38 gives the extra (plus or minus) transferred to the pixels * directly to the left and below, and tab14 gives the extra * transferred to the diagonal below. The choice of 3/8 and 1/4 * is traditional but arbitrary when you use a lookup table; the * only constraint is that the sum is 1. See other comments below. */ void ditherToBinaryLUTLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14) { l_int32 i; l_uint32 *lined; /* do all lines except last line */ memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ for (i = 0; i < h - 1; i++) { memcpy(bufs1, bufs2, 4 * wpls); memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); lined = datad + i * wpld; ditherToBinaryLineLUTLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 0); } /* do last line */ memcpy(bufs1, bufs2, 4 * wpls); lined = datad + (h - 1) * wpld; ditherToBinaryLineLUTLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 1); return; } /*! * ditherToBinaryLineLUTLow() * * Input: lined (ptr to beginning of dest line * w (width of image in pixels) * bufs1 (buffer of current source line) * bufs2 (buffer of next source line) * tabval (value to assign for current pixel) * tab38 (excess value to give to neighboring 3/8 pixels) * tab14 (excess value to give to neighboring 1/4 pixel) * lastlineflag (0 if not last dest line, 1 if last dest line) * Return: void */ void ditherToBinaryLineLUTLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14, l_int32 lastlineflag) { l_int32 j; l_int32 oval, tab38val, tab14val; l_uint8 rval, bval, dval; if (lastlineflag == 0) { for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); rval = GET_DATA_BYTE(bufs1, j + 1); bval = GET_DATA_BYTE(bufs2, j); dval = GET_DATA_BYTE(bufs2, j + 1); tab38val = tab38[oval]; if (tab38val == 0) continue; tab14val = tab14[oval]; if (tab38val < 0) { rval = L_MAX(0, rval + tab38val); bval = L_MAX(0, bval + tab38val); dval = L_MAX(0, dval + tab14val); } else { rval = L_MIN(255, rval + tab38val); bval = L_MIN(255, bval + tab38val); dval = L_MIN(255, dval + tab14val); } SET_DATA_BYTE(bufs1, j + 1, rval); SET_DATA_BYTE(bufs2, j, bval); SET_DATA_BYTE(bufs2, j + 1, dval); } /* do last column: j = w - 1 */ oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); bval = GET_DATA_BYTE(bufs2, j); tab38val = tab38[oval]; if (tab38val < 0) { bval = L_MAX(0, bval + tab38val); SET_DATA_BYTE(bufs2, j, bval); } else if (tab38val > 0 ) { bval = L_MIN(255, bval + tab38val); SET_DATA_BYTE(bufs2, j, bval); } } else { /* lastlineflag == 1 */ for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); rval = GET_DATA_BYTE(bufs1, j + 1); tab38val = tab38[oval]; if (tab38val == 0) continue; if (tab38val < 0) rval = L_MAX(0, rval + tab38val); else rval = L_MIN(255, rval + tab38val); SET_DATA_BYTE(bufs1, j + 1, rval); } /* do last pixel: (i, j) = (h - 1, w - 1) */ oval = GET_DATA_BYTE(bufs1, j); if (tabval[oval]) SET_DATA_BIT(lined, j); } return; } /*! * make8To1DitherTables() * * Input: &tabval (value assigned to output pixel; 0 or 1) * &tab38 (amount propagated to pixels left and below) * &tab14 (amount propagated to pixel to left and down) * lowerclip (values near 0 where the excess is not propagated) * upperclip (values near 255 where the deficit is not propagated) * * Return: 0 if OK, 1 on error */ l_int32 make8To1DitherTables(l_int32 **ptabval, l_int32 **ptab38, l_int32 **ptab14, l_int32 lowerclip, l_int32 upperclip) { l_int32 i; l_int32 *tabval, *tab38, *tab14; PROCNAME("make8To1DitherTables"); if (!ptabval || !ptab38 || !ptab14) return ERROR_INT("table ptrs not all defined", procName, 1); /* 3 lookup tables: 1-bit value, (3/8)excess, and (1/4)excess */ if ((tabval = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("tabval not made", procName, 1); if ((tab38 = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("tab38 not made", procName, 1); if ((tab14 = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("tab14 not made", procName, 1); *ptabval = tabval; *ptab38 = tab38; *ptab14 = tab14; for (i = 0; i < 256; i++) { if (i <= lowerclip) { tabval[i] = 1; tab38[i] = 0; tab14[i] = 0; } else if (i < 128) { tabval[i] = 1; tab38[i] = (3 * i + 4) / 8; tab14[i] = (i + 2) / 4; } else if (i < 255 - upperclip) { tabval[i] = 0; tab38[i] = (3 * (i - 255) + 4) / 8; tab14[i] = ((i - 255) + 2) / 4; } else { /* i >= 255 - upperclip */ tabval[i] = 0; tab38[i] = 0; tab14[i] = 0; } } return 0; } /*------------------------------------------------------------------* * Dithering to 2 bpp * *------------------------------------------------------------------*/ /* * ditherTo2bppLow() * * Low-level function for doing Floyd-Steinberg error diffusion * dithering from 8 bpp (datas) to 2 bpp (datad). Two source * line buffers, bufs1 and bufs2, are provided, along with three * 256-entry lookup tables: tabval gives the output pixel value, * tab38 gives the extra (plus or minus) transferred to the pixels * directly to the left and below, and tab14 gives the extra * transferred to the diagonal below. The choice of 3/8 and 1/4 * is traditional but arbitrary when you use a lookup table; the * only constraint is that the sum is 1. See other comments * below and in grayquant.c. */ void ditherTo2bppLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14) { l_int32 i; l_uint32 *lined; /* do all lines except last line */ memcpy(bufs2, datas, 4 * wpls); /* prime the buffer */ for (i = 0; i < h - 1; i++) { memcpy(bufs1, bufs2, 4 * wpls); memcpy(bufs2, datas + (i + 1) * wpls, 4 * wpls); lined = datad + i * wpld; ditherTo2bppLineLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 0); } /* do last line */ memcpy(bufs1, bufs2, 4 * wpls); lined = datad + (h - 1) * wpld; ditherTo2bppLineLow(lined, w, bufs1, bufs2, tabval, tab38, tab14, 1); return; } /* * ditherTo2bppLineLow() * * Input: lined (ptr to beginning of dest line * w (width of image in pixels) * bufs1 (buffer of current source line) * bufs2 (buffer of next source line) * tabval (value to assign for current pixel) * tab38 (excess value to give to neighboring 3/8 pixels) * tab14 (excess value to give to neighboring 1/4 pixel) * lastlineflag (0 if not last dest line, 1 if last dest line) * Return: void * * Dispatches error diffusion dithering for * a single line of the image. If lastlineflag == 0, * both source buffers are used; otherwise, only bufs1 * is used. We use source buffers because the error * is propagated into them, and we don't want to change * the input src image. * * We break dithering out line by line to make it * easier to combine functions like interpolative * scaling and error diffusion dithering, as such a * combination of operations obviates the need to * generate a 2x grayscale image as an intermediary. */ void ditherTo2bppLineLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14, l_int32 lastlineflag) { l_int32 j; l_int32 oval, tab38val, tab14val; l_uint8 rval, bval, dval; if (lastlineflag == 0) { for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); rval = GET_DATA_BYTE(bufs1, j + 1); bval = GET_DATA_BYTE(bufs2, j); dval = GET_DATA_BYTE(bufs2, j + 1); tab38val = tab38[oval]; tab14val = tab14[oval]; if (tab38val < 0) { rval = L_MAX(0, rval + tab38val); bval = L_MAX(0, bval + tab38val); dval = L_MAX(0, dval + tab14val); } else { rval = L_MIN(255, rval + tab38val); bval = L_MIN(255, bval + tab38val); dval = L_MIN(255, dval + tab14val); } SET_DATA_BYTE(bufs1, j + 1, rval); SET_DATA_BYTE(bufs2, j, bval); SET_DATA_BYTE(bufs2, j + 1, dval); } /* do last column: j = w - 1 */ oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); bval = GET_DATA_BYTE(bufs2, j); tab38val = tab38[oval]; if (tab38val < 0) bval = L_MAX(0, bval + tab38val); else bval = L_MIN(255, bval + tab38val); SET_DATA_BYTE(bufs2, j, bval); } else { /* lastlineflag == 1 */ for (j = 0; j < w - 1; j++) { oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); rval = GET_DATA_BYTE(bufs1, j + 1); tab38val = tab38[oval]; if (tab38val < 0) rval = L_MAX(0, rval + tab38val); else rval = L_MIN(255, rval + tab38val); SET_DATA_BYTE(bufs1, j + 1, rval); } /* do last pixel: (i, j) = (h - 1, w - 1) */ oval = GET_DATA_BYTE(bufs1, j); SET_DATA_DIBIT(lined, j, tabval[oval]); } return; } /*! * make8To2DitherTables() * * Input: &tabval (value assigned to output pixel; 0, 1, 2 or 3) * &tab38 (amount propagated to pixels left and below) * &tab14 (amount propagated to pixel to left and down) * cliptoblack (values near 0 where the excess is not propagated) * cliptowhite (values near 255 where the deficit is not propagated) * * Return: 0 if OK, 1 on error */ l_int32 make8To2DitherTables(l_int32 **ptabval, l_int32 **ptab38, l_int32 **ptab14, l_int32 cliptoblack, l_int32 cliptowhite) { l_int32 i; l_int32 *tabval, *tab38, *tab14; PROCNAME("make8To2DitherTables"); /* 3 lookup tables: 2-bit value, (3/8)excess, and (1/4)excess */ if ((tabval = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("tabval not made", procName, 1); if ((tab38 = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("tab38 not made", procName, 1); if ((tab14 = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("tab14 not made", procName, 1); *ptabval = tabval; *ptab38 = tab38; *ptab14 = tab14; for (i = 0; i < 256; i++) { if (i <= cliptoblack) { tabval[i] = 0; tab38[i] = 0; tab14[i] = 0; } else if (i < 43) { tabval[i] = 0; tab38[i] = (3 * i + 4) / 8; tab14[i] = (i + 2) / 4; } else if (i < 85) { tabval[i] = 1; tab38[i] = (3 * (i - 85) - 4) / 8; tab14[i] = ((i - 85) - 2) / 4; } else if (i < 128) { tabval[i] = 1; tab38[i] = (3 * (i - 85) + 4) / 8; tab14[i] = ((i - 85) + 2) / 4; } else if (i < 170) { tabval[i] = 2; tab38[i] = (3 * (i - 170) - 4) / 8; tab14[i] = ((i - 170) - 2) / 4; } else if (i < 213) { tabval[i] = 2; tab38[i] = (3 * (i - 170) + 4) / 8; tab14[i] = ((i - 170) + 2) / 4; } else if (i < 255 - cliptowhite) { tabval[i] = 3; tab38[i] = (3 * (i - 255) - 4) / 8; tab14[i] = ((i - 255) - 2) / 4; } else { /* i >= 255 - cliptowhite */ tabval[i] = 3; tab38[i] = 0; tab14[i] = 0; } } return 0; } /*------------------------------------------------------------------* * Simple thresholding to 2 bpp * *------------------------------------------------------------------*/ /* * thresholdTo2bppLow() * * Low-level function for thresholding from 8 bpp (datas) to * 2 bpp (datad), using thresholds implicitly defined through @tab, * a 256-entry lookup table that gives a 2-bit output value * for each possible input. * * For each line, unroll the loop so that for each 32 bit src word, * representing four consecutive 8-bit pixels, we compose one byte * of output consisiting of four 2-bit pixels. */ void thresholdTo2bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab) { l_uint8 sval1, sval2, sval3, sval4, dval; l_int32 i, j, k; l_uint32 *lines, *lined; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < wpls; j++) { k = 4 * j; sval1 = GET_DATA_BYTE(lines, k); sval2 = GET_DATA_BYTE(lines, k + 1); sval3 = GET_DATA_BYTE(lines, k + 2); sval4 = GET_DATA_BYTE(lines, k + 3); dval = (tab[sval1] << 6) | (tab[sval2] << 4) | (tab[sval3] << 2) | tab[sval4]; SET_DATA_BYTE(lined, j, dval); } } return; } /*------------------------------------------------------------------* * Simple thresholding to 4 bpp * *------------------------------------------------------------------*/ /* * thresholdTo4bppLow() * * Low-level function for thresholding from 8 bpp (datas) to * 4 bpp (datad), using thresholds implicitly defined through @tab, * a 256-entry lookup table that gives a 4-bit output value * for each possible input. * * For each line, unroll the loop so that for each 32 bit src word, * representing four consecutive 8-bit pixels, we compose two bytes * of output consisiting of four 4-bit pixels. */ void thresholdTo4bppLow(l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab) { l_uint8 sval1, sval2, sval3, sval4; l_uint16 dval; l_int32 i, j, k; l_uint32 *lines, *lined; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < wpls; j++) { k = 4 * j; sval1 = GET_DATA_BYTE(lines, k); sval2 = GET_DATA_BYTE(lines, k + 1); sval3 = GET_DATA_BYTE(lines, k + 2); sval4 = GET_DATA_BYTE(lines, k + 3); dval = (tab[sval1] << 12) | (tab[sval2] << 8) | (tab[sval3] << 4) | tab[sval4]; SET_DATA_TWO_BYTES(lined, j, dval); } } return; } leptonica-1.70/src/ptabasic.c0000644000175000017500000007474612244227530014251 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ptabasic.c * * Pta creation, destruction, copy, clone, empty * PTA *ptaCreate() * PTA *ptaCreateFromNuma() * void ptaDestroy() * PTA *ptaCopy() * PTA *ptaCopyRange() * PTA *ptaClone() * l_int32 ptaEmpty() * * Pta array extension * l_int32 ptaAddPt() * static l_int32 ptaExtendArrays() * * Pta insertion and removal * l_int32 ptaInsertPt() * l_int32 ptaRemovePt() * * Pta accessors * l_int32 ptaGetRefcount() * l_int32 ptaChangeRefcount() * l_int32 ptaGetCount() * l_int32 ptaGetPt() * l_int32 ptaGetIPt() * l_int32 ptaSetPt() * l_int32 ptaGetArrays() * * Pta serialized for I/O * PTA *ptaRead() * PTA *ptaReadStream() * l_int32 ptaWrite() * l_int32 ptaWriteStream() * * Ptaa creation, destruction * PTAA *ptaaCreate() * void ptaaDestroy() * * Ptaa array extension * l_int32 ptaaAddPta() * static l_int32 ptaaExtendArray() * * Ptaa accessors * l_int32 ptaaGetCount() * l_int32 ptaaGetPta() * l_int32 ptaaGetPt() * * Ptaa array modifiers * l_int32 ptaaInitFull() * l_int32 ptaaReplacePta() * l_int32 ptaaAddPt() * l_int32 ptaaTruncate() * * Ptaa serialized for I/O * PTAA *ptaaRead() * PTAA *ptaaReadStream() * l_int32 ptaaWrite() * l_int32 ptaaWriteStream() */ #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ /* Static functions */ static l_int32 ptaExtendArrays(PTA *pta); static l_int32 ptaaExtendArray(PTAA *ptaa); /*---------------------------------------------------------------------* * Pta creation, destruction, copy, clone * *---------------------------------------------------------------------*/ /*! * ptaCreate() * * Input: n (initial array sizes) * Return: pta, or null on error. */ PTA * ptaCreate(l_int32 n) { PTA *pta; PROCNAME("ptaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((pta = (PTA *)CALLOC(1, sizeof(PTA))) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); pta->n = 0; pta->nalloc = n; ptaChangeRefcount(pta, 1); /* sets to 1 */ if ((pta->x = (l_float32 *)CALLOC(n, sizeof(l_float32))) == NULL) return (PTA *)ERROR_PTR("x array not made", procName, NULL); if ((pta->y = (l_float32 *)CALLOC(n, sizeof(l_float32))) == NULL) return (PTA *)ERROR_PTR("y array not made", procName, NULL); return pta; } /*! * ptaCreateFromNuma() * * Input: nax ( can be null) * nay * Return: pta, or null on error. */ PTA * ptaCreateFromNuma(NUMA *nax, NUMA *nay) { l_int32 i, n; l_float32 startx, delx, xval, yval; PTA *pta; PROCNAME("ptaCreateFromNuma"); if (!nay) return (PTA *)ERROR_PTR("nay not defined", procName, NULL); n = numaGetCount(nay); if (nax && numaGetCount(nax) != n) return (PTA *)ERROR_PTR("nax and nay sizes differ", procName, NULL); pta = ptaCreate(n); numaGetParameters(nay, &startx, &delx); for (i = 0; i < n; i++) { if (nax) numaGetFValue(nax, i, &xval); else /* use implicit x values from nay */ xval = startx + i * delx; numaGetFValue(nay, i, &yval); ptaAddPt(pta, xval, yval); } return pta; } /*! * ptaDestroy() * * Input: &pta () * Return: void * * Note: * - Decrements the ref count and, if 0, destroys the pta. * - Always nulls the input ptr. */ void ptaDestroy(PTA **ppta) { PTA *pta; PROCNAME("ptaDestroy"); if (ppta == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((pta = *ppta) == NULL) return; ptaChangeRefcount(pta, -1); if (ptaGetRefcount(pta) <= 0) { FREE(pta->x); FREE(pta->y); FREE(pta); } *ppta = NULL; return; } /*! * ptaCopy() * * Input: pta * Return: copy of pta, or null on error */ PTA * ptaCopy(PTA *pta) { l_int32 i; l_float32 x, y; PTA *npta; PROCNAME("ptaCopy"); if (!pta) return (PTA *)ERROR_PTR("pta not defined", procName, NULL); if ((npta = ptaCreate(pta->nalloc)) == NULL) return (PTA *)ERROR_PTR("npta not made", procName, NULL); for (i = 0; i < pta->n; i++) { ptaGetPt(pta, i, &x, &y); ptaAddPt(npta, x, y); } return npta; } /*! * ptaCopyRange() * * Input: ptas * istart (starting index in ptas) * iend (ending index in ptas; use 0 to copy to end) * Return: 0 if OK, 1 on error */ PTA * ptaCopyRange(PTA *ptas, l_int32 istart, l_int32 iend) { l_int32 n, i, x, y; PTA *ptad; PROCNAME("ptaCopyRange"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); n = ptaGetCount(ptas); if (istart < 0) istart = 0; if (istart >= n) return (PTA *)ERROR_PTR("istart out of bounds", procName, NULL); if (iend <= 0 || iend >= n) iend = n - 1; if (istart > iend) return (PTA *)ERROR_PTR("istart > iend; no pts", procName, NULL); if ((ptad = ptaCreate(iend - istart + 1)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = istart; i <= iend; i++) { ptaGetIPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } return ptad; } /*! * ptaClone() * * Input: pta * Return: ptr to same pta, or null on error */ PTA * ptaClone(PTA *pta) { PROCNAME("ptaClone"); if (!pta) return (PTA *)ERROR_PTR("pta not defined", procName, NULL); ptaChangeRefcount(pta, 1); return pta; } /*! * ptaEmpty() * * Input: pta * Return: 0 if OK, 1 on error * * Note: this only resets the "n" field, for reuse */ l_int32 ptaEmpty(PTA *pta) { PROCNAME("ptaEmpty"); if (!pta) return ERROR_INT("ptad not defined", procName, 1); pta->n = 0; return 0; } /*---------------------------------------------------------------------* * Pta array extension * *---------------------------------------------------------------------*/ /*! * ptaAddPt() * * Input: pta * x, y * Return: 0 if OK, 1 on error */ l_int32 ptaAddPt(PTA *pta, l_float32 x, l_float32 y) { l_int32 n; PROCNAME("ptaAddPt"); if (!pta) return ERROR_INT("pta not defined", procName, 1); n = pta->n; if (n >= pta->nalloc) ptaExtendArrays(pta); pta->x[n] = x; pta->y[n] = y; pta->n++; return 0; } /*! * ptaExtendArrays() * * Input: pta * Return: 0 if OK; 1 on error */ static l_int32 ptaExtendArrays(PTA *pta) { PROCNAME("ptaExtendArrays"); if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((pta->x = (l_float32 *)reallocNew((void **)&pta->x, sizeof(l_float32) * pta->nalloc, 2 * sizeof(l_float32) * pta->nalloc)) == NULL) return ERROR_INT("new x array not returned", procName, 1); if ((pta->y = (l_float32 *)reallocNew((void **)&pta->y, sizeof(l_float32) * pta->nalloc, 2 * sizeof(l_float32) * pta->nalloc)) == NULL) return ERROR_INT("new y array not returned", procName, 1); pta->nalloc = 2 * pta->nalloc; return 0; } /*---------------------------------------------------------------------* * Pta insertion and removal * *---------------------------------------------------------------------*/ /*! * ptaInsertPt() * * Input: pta * index (at which pt is to be inserted) * x, y (point values) * Return: 0 if OK; 1 on error */ l_int32 ptaInsertPt(PTA *pta, l_int32 index, l_int32 x, l_int32 y) { l_int32 i, n; PROCNAME("ptaInsertPt"); if (!pta) return ERROR_INT("pta not defined", procName, 1); n = ptaGetCount(pta); if (index < 0 || index > n) return ERROR_INT("index not in {0...n}", procName, 1); if (n > pta->nalloc) ptaExtendArrays(pta); pta->n++; for (i = n; i > index; i--) { pta->x[i] = pta->x[i - 1]; pta->y[i] = pta->y[i - 1]; } pta->x[index] = x; pta->y[index] = y; return 0; } /*! * ptaRemovePt() * * Input: pta * index (of point to be removed) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts pta[i] --> pta[i - 1] for all i > index. * (2) It should not be used repeatedly on large arrays, * because the function is O(n). */ l_int32 ptaRemovePt(PTA *pta, l_int32 index) { l_int32 i, n; PROCNAME("ptaRemovePt"); if (!pta) return ERROR_INT("pta not defined", procName, 1); n = ptaGetCount(pta); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); /* Remove the point */ for (i = index + 1; i < n; i++) { pta->x[i - 1] = pta->x[i]; pta->y[i - 1] = pta->y[i]; } pta->n--; return 0; } /*---------------------------------------------------------------------* * Pta accessors * *---------------------------------------------------------------------*/ l_int32 ptaGetRefcount(PTA *pta) { PROCNAME("ptaGetRefcount"); if (!pta) return ERROR_INT("pta not defined", procName, 1); return pta->refcount; } l_int32 ptaChangeRefcount(PTA *pta, l_int32 delta) { PROCNAME("ptaChangeRefcount"); if (!pta) return ERROR_INT("pta not defined", procName, 1); pta->refcount += delta; return 0; } /*! * ptaGetCount() * * Input: pta * Return: count, or 0 if no pta */ l_int32 ptaGetCount(PTA *pta) { PROCNAME("ptaGetCount"); if (!pta) return ERROR_INT("pta not defined", procName, 0); return pta->n; } /*! * ptaGetPt() * * Input: pta * index (into arrays) * &x ( float x value) * &y ( float y value) * Return: 0 if OK; 1 on error */ l_int32 ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py) { PROCNAME("ptaGetPt"); if (px) *px = 0; if (py) *py = 0; if (!pta) return ERROR_INT("pta not defined", procName, 1); if (index < 0 || index >= pta->n) return ERROR_INT("invalid index", procName, 1); if (px) *px = pta->x[index]; if (py) *py = pta->y[index]; return 0; } /*! * ptaGetIPt() * * Input: pta * index (into arrays) * &x ( integer x value) * &y ( integer y value) * Return: 0 if OK; 1 on error */ l_int32 ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py) { PROCNAME("ptaGetIPt"); if (px) *px = 0; if (py) *py = 0; if (!pta) return ERROR_INT("pta not defined", procName, 1); if (index < 0 || index >= pta->n) return ERROR_INT("invalid index", procName, 1); if (px) *px = (l_int32)(pta->x[index] + 0.5); if (py) *py = (l_int32)(pta->y[index] + 0.5); return 0; } /*! * ptaSetPt() * * Input: pta * index (into arrays) * x, y * Return: 0 if OK; 1 on error */ l_int32 ptaSetPt(PTA *pta, l_int32 index, l_float32 x, l_float32 y) { PROCNAME("ptaSetPt"); if (!pta) return ERROR_INT("pta not defined", procName, 1); if (index < 0 || index >= pta->n) return ERROR_INT("invalid index", procName, 1); pta->x[index] = x; pta->y[index] = y; return 0; } /*! * ptaGetArrays() * * Input: pta * &nax ( numa of x array) * &nay ( numa of y array) * Return: 0 if OK; 1 on error or if pta is empty * * Notes: * (1) This copies the internal arrays into new Numas. */ l_int32 ptaGetArrays(PTA *pta, NUMA **pnax, NUMA **pnay) { l_int32 i, n; NUMA *nax, *nay; PROCNAME("ptaGetArrays"); if (!pnax && !pnay) return ERROR_INT("no output requested", procName, 1); if (pnax) *pnax = NULL; if (pnay) *pnay = NULL; if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((n = ptaGetCount(pta)) == 0) return ERROR_INT("pta is empty", procName, 1); if (pnax) { if ((nax = numaCreate(n)) == NULL) return ERROR_INT("nax not made", procName, 1); *pnax = nax; for (i = 0; i < n; i++) nax->array[i] = pta->x[i]; nax->n = n; } if (pnay) { if ((nay = numaCreate(n)) == NULL) return ERROR_INT("nay not made", procName, 1); *pnay = nay; for (i = 0; i < n; i++) nay->array[i] = pta->y[i]; nay->n = n; } return 0; } /*---------------------------------------------------------------------* * Pta serialized for I/O * *---------------------------------------------------------------------*/ /*! * ptaRead() * * Input: filename * Return: pta, or null on error */ PTA * ptaRead(const char *filename) { FILE *fp; PTA *pta; PROCNAME("ptaRead"); if (!filename) return (PTA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PTA *)ERROR_PTR("stream not opened", procName, NULL); if ((pta = ptaReadStream(fp)) == NULL) { fclose(fp); return (PTA *)ERROR_PTR("pta not read", procName, NULL); } fclose(fp); return pta; } /*! * ptaReadStream() * * Input: stream * Return: pta, or null on error */ PTA * ptaReadStream(FILE *fp) { char typestr[128]; l_int32 i, n, ix, iy, type, version; l_float32 x, y; PTA *pta; PROCNAME("ptaReadStream"); if (!fp) return (PTA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\n Pta Version %d\n", &version) != 1) return (PTA *)ERROR_PTR("not a pta file", procName, NULL); if (version != PTA_VERSION_NUMBER) return (PTA *)ERROR_PTR("invalid pta version", procName, NULL); if (fscanf(fp, " Number of pts = %d; format = %s\n", &n, typestr) != 2) return (PTA *)ERROR_PTR("not a pta file", procName, NULL); if (!strcmp(typestr, "float")) type = 0; else /* typestr is "integer" */ type = 1; if ((pta = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); for (i = 0; i < n; i++) { if (type == 0) { /* data is float */ if (fscanf(fp, " (%f, %f)\n", &x, &y) != 2) return (PTA *)ERROR_PTR("error reading floats", procName, NULL); ptaAddPt(pta, x, y); } else { /* data is integer */ if (fscanf(fp, " (%d, %d)\n", &ix, &iy) != 2) return (PTA *)ERROR_PTR("error reading ints", procName, NULL); ptaAddPt(pta, ix, iy); } } return pta; } /*! * ptaWrite() * * Input: filename * pta * type (0 for float values; 1 for integer values) * Return: 0 if OK, 1 on error */ l_int32 ptaWrite(const char *filename, PTA *pta, l_int32 type) { FILE *fp; PROCNAME("ptaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (ptaWriteStream(fp, pta, type)) return ERROR_INT("pta not written to stream", procName, 1); fclose(fp); return 0; } /*! * ptaWriteStream() * * Input: stream * pta * type (0 for float values; 1 for integer values) * Return: 0 if OK; 1 on error */ l_int32 ptaWriteStream(FILE *fp, PTA *pta, l_int32 type) { l_int32 i, n, ix, iy; l_float32 x, y; PROCNAME("ptaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); n = ptaGetCount(pta); fprintf(fp, "\n Pta Version %d\n", PTA_VERSION_NUMBER); if (type == 0) fprintf(fp, " Number of pts = %d; format = float\n", n); else /* type == 1 */ fprintf(fp, " Number of pts = %d; format = integer\n", n); for (i = 0; i < n; i++) { if (type == 0) { /* data is float */ ptaGetPt(pta, i, &x, &y); fprintf(fp, " (%f, %f)\n", x, y); } else { /* data is integer */ ptaGetIPt(pta, i, &ix, &iy); fprintf(fp, " (%d, %d)\n", ix, iy); } } return 0; } /*---------------------------------------------------------------------* * PTAA creation, destruction * *---------------------------------------------------------------------*/ /*! * ptaaCreate() * * Input: n (initial number of ptrs) * Return: ptaa, or null on error */ PTAA * ptaaCreate(l_int32 n) { PTAA *ptaa; PROCNAME("ptaaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((ptaa = (PTAA *)CALLOC(1, sizeof(PTAA))) == NULL) return (PTAA *)ERROR_PTR("ptaa not made", procName, NULL); ptaa->n = 0; ptaa->nalloc = n; if ((ptaa->pta = (PTA **)CALLOC(n, sizeof(PTA *))) == NULL) return (PTAA *)ERROR_PTR("pta ptrs not made", procName, NULL); return ptaa; } /*! * ptaaDestroy() * * Input: &ptaa * Return: void */ void ptaaDestroy(PTAA **pptaa) { l_int32 i; PTAA *ptaa; PROCNAME("ptaaDestroy"); if (pptaa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((ptaa = *pptaa) == NULL) return; for (i = 0; i < ptaa->n; i++) ptaDestroy(&ptaa->pta[i]); FREE(ptaa->pta); FREE(ptaa); *pptaa = NULL; return; } /*---------------------------------------------------------------------* * PTAA array extension * *---------------------------------------------------------------------*/ /*! * ptaaAddPta() * * Input: ptaa * pta (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag) { l_int32 n; PTA *ptac; PROCNAME("ptaaAddPta"); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); if (copyflag == L_INSERT) { ptac = pta; } else if (copyflag == L_COPY) { if ((ptac = ptaCopy(pta)) == NULL) return ERROR_INT("ptac not made", procName, 1); } else if (copyflag == L_CLONE) { if ((ptac = ptaClone(pta)) == NULL) return ERROR_INT("pta clone not made", procName, 1); } else { return ERROR_INT("invalid copyflag", procName, 1); } n = ptaaGetCount(ptaa); if (n >= ptaa->nalloc) ptaaExtendArray(ptaa); ptaa->pta[n] = ptac; ptaa->n++; return 0; } /*! * ptaaExtendArray() * * Input: ptaa * Return: 0 if OK, 1 on error */ static l_int32 ptaaExtendArray(PTAA *ptaa) { PROCNAME("ptaaExtendArray"); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); if ((ptaa->pta = (PTA **)reallocNew((void **)&ptaa->pta, sizeof(PTA *) * ptaa->nalloc, 2 * sizeof(PTA *) * ptaa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); ptaa->nalloc = 2 * ptaa->nalloc; return 0; } /*---------------------------------------------------------------------* * Ptaa accessors * *---------------------------------------------------------------------*/ /*! * ptaaGetCount() * * Input: ptaa * Return: count, or 0 if no ptaa */ l_int32 ptaaGetCount(PTAA *ptaa) { PROCNAME("ptaaGetCount"); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 0); return ptaa->n; } /*! * ptaaGetPta() * * Input: ptaa * index (to the i-th pta) * accessflag (L_COPY or L_CLONE) * Return: pta, or null on error */ PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag) { PROCNAME("ptaaGetPta"); if (!ptaa) return (PTA *)ERROR_PTR("ptaa not defined", procName, NULL); if (index < 0 || index >= ptaa->n) return (PTA *)ERROR_PTR("index not valid", procName, NULL); if (accessflag == L_COPY) return ptaCopy(ptaa->pta[index]); else if (accessflag == L_CLONE) return ptaClone(ptaa->pta[index]); else return (PTA *)ERROR_PTR("invalid accessflag", procName, NULL); } /*! * ptaaGetPt() * * Input: ptaa * ipta (to the i-th pta) * jpt (index to the j-th pt in the pta) * &x ( float x value) * &y ( float y value) * Return: 0 if OK; 1 on error */ l_int32 ptaaGetPt(PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py) { PTA *pta; PROCNAME("ptaaGetPt"); if (px) *px = 0; if (py) *py = 0; if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); if (ipta < 0 || ipta >= ptaa->n) return ERROR_INT("index ipta not valid", procName, 1); pta = ptaaGetPta(ptaa, ipta, L_CLONE); if (jpt < 0 || jpt >= pta->n) { ptaDestroy(&pta); return ERROR_INT("index jpt not valid", procName, 1); } ptaGetPt(pta, jpt, px, py); ptaDestroy(&pta); return 0; } /*---------------------------------------------------------------------* * Ptaa array modifiers * *---------------------------------------------------------------------*/ /*! * ptaaInitFull() * * Input: ptaa (can have non-null ptrs in the ptr array) * pta (to be replicated into the entire ptr array) * Return: 0 if OK; 1 on error */ l_int32 ptaaInitFull(PTAA *ptaa, PTA *pta) { l_int32 n, i; PTA *ptat; PROCNAME("ptaaInitFull"); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); n = ptaa->nalloc; ptaa->n = n; for (i = 0; i < n; i++) { ptat = ptaCopy(pta); ptaaReplacePta(ptaa, i, ptat); } return 0; } /*! * ptaaReplacePta() * * Input: ptaa * index (to the index-th pta) * pta (insert and replace any existing one) * Return: 0 if OK, 1 on error * * Notes: * (1) Any existing pta is destroyed, and the input one * is inserted in its place. * (2) If the index is invalid, return 1 (error) */ l_int32 ptaaReplacePta(PTAA *ptaa, l_int32 index, PTA *pta) { l_int32 n; PROCNAME("ptaaReplacePta"); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); n = ptaaGetCount(ptaa); if (index < 0 || index >= n) return ERROR_INT("index not valid", procName, 1); ptaDestroy(&ptaa->pta[index]); ptaa->pta[index] = pta; return 0; } /*! * ptaaAddPt() * * Input: ptaa * ipta (to the i-th pta) * x,y (point coordinates) * Return: 0 if OK; 1 on error */ l_int32 ptaaAddPt(PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y) { PTA *pta; PROCNAME("ptaaAddPt"); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); if (ipta < 0 || ipta >= ptaa->n) return ERROR_INT("index ipta not valid", procName, 1); pta = ptaaGetPta(ptaa, ipta, L_CLONE); ptaAddPt(pta, x, y); ptaDestroy(&pta); return 0; } /*! * ptaaTruncate() * * Input: ptaa * Return: 0 if OK, 1 on error * * Notes: * (1) This identifies the largest index containing a pta that * has any points within it, destroys all pta above that index, * and resets the count. */ l_int32 ptaaTruncate(PTAA *ptaa) { l_int32 i, n, np; PTA *pta; PROCNAME("ptaaTruncate"); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); n = ptaaGetCount(ptaa); for (i = n - 1; i >= 0; i--) { pta = ptaaGetPta(ptaa, i, L_CLONE); if (!pta) { ptaa->n--; continue; } np = ptaGetCount(pta); ptaDestroy(&pta); if (np == 0) { ptaDestroy(&ptaa->pta[i]); ptaa->n--; } else { break; } } return 0; } /*---------------------------------------------------------------------* * Ptaa serialized for I/O * *---------------------------------------------------------------------*/ /*! * ptaaRead() * * Input: filename * Return: ptaa, or null on error */ PTAA * ptaaRead(const char *filename) { FILE *fp; PTAA *ptaa; PROCNAME("ptaaRead"); if (!filename) return (PTAA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PTAA *)ERROR_PTR("stream not opened", procName, NULL); if ((ptaa = ptaaReadStream(fp)) == NULL) { fclose(fp); return (PTAA *)ERROR_PTR("ptaa not read", procName, NULL); } fclose(fp); return ptaa; } /*! * ptaaReadStream() * * Input: stream * Return: ptaa, or null on error */ PTAA * ptaaReadStream(FILE *fp) { l_int32 i, n, version; PTA *pta; PTAA *ptaa; PROCNAME("ptaaReadStream"); if (!fp) return (PTAA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nPtaa Version %d\n", &version) != 1) return (PTAA *)ERROR_PTR("not a ptaa file", procName, NULL); if (version != PTA_VERSION_NUMBER) return (PTAA *)ERROR_PTR("invalid ptaa version", procName, NULL); if (fscanf(fp, "Number of Pta = %d\n", &n) != 1) return (PTAA *)ERROR_PTR("not a ptaa file", procName, NULL); if ((ptaa = ptaaCreate(n)) == NULL) return (PTAA *)ERROR_PTR("ptaa not made", procName, NULL); for (i = 0; i < n; i++) { if ((pta = ptaReadStream(fp)) == NULL) return (PTAA *)ERROR_PTR("error reading pta", procName, NULL); ptaaAddPta(ptaa, pta, L_INSERT); } return ptaa; } /*! * ptaaWrite() * * Input: filename * ptaa * type (0 for float values; 1 for integer values) * Return: 0 if OK, 1 on error */ l_int32 ptaaWrite(const char *filename, PTAA *ptaa, l_int32 type) { FILE *fp; PROCNAME("ptaaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (ptaaWriteStream(fp, ptaa, type)) return ERROR_INT("ptaa not written to stream", procName, 1); fclose(fp); return 0; } /*! * ptaaWriteStream() * * Input: stream * ptaa * type (0 for float values; 1 for integer values) * Return: 0 if OK; 1 on error */ l_int32 ptaaWriteStream(FILE *fp, PTAA *ptaa, l_int32 type) { l_int32 i, n; PTA *pta; PROCNAME("ptaaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); n = ptaaGetCount(ptaa); fprintf(fp, "\nPtaa Version %d\n", PTA_VERSION_NUMBER); fprintf(fp, "Number of Pta = %d\n", n); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); ptaWriteStream(fp, pta, type); ptaDestroy(&pta); } return 0; } leptonica-1.70/src/colorspace.c0000644000175000017500000014744012063703134014603 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorspace.c * * Colorspace conversion between RGB and HSV * PIX *pixConvertRGBToHSV() * PIX *pixConvertHSVToRGB() * l_int32 convertRGBToHSV() * l_int32 convertHSVToRGB() * l_int32 pixcmapConvertRGBToHSV() * l_int32 pixcmapConvertHSVToRGB() * PIX *pixConvertRGBToHue() * PIX *pixConvertRGBToSaturation() * PIX *pixConvertRGBToValue() * * Selection and display of range of colors in HSV space * PIX *pixMakeRangeMaskHS() * PIX *pixMakeRangeMaskHV() * PIX *pixMakeRangeMaskSV() * PIX *pixMakeHistoHS() * PIX *pixMakeHistoHV() * PIX *pixMakeHistoSV() * PIX *pixFindHistoPeaksHSV() * PIX *displayHSVColorRange() * * Colorspace conversion between RGB and YUV * PIX *pixConvertRGBToYUV() * PIX *pixConvertYUVToRGB() * l_int32 convertRGBToYUV() * l_int32 convertYUVToRGB() * l_int32 pixcmapConvertRGBToYUV() * l_int32 pixcmapConvertYUVToRGB() */ #include #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_HISTO 1 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------------* * Colorspace conversion between RGB and HSB * *---------------------------------------------------------------------------*/ /*! * pixConvertRGBToHSV() * * Input: pixd (can be NULL; if not NULL, must == pixs) * pixs * Return: pixd always * * Notes: * (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL. * (2) The definition of our HSV space is given in convertRGBToHSV(). * (3) The h, s and v values are stored in the same places as * the r, g and b values, respectively. Here, they are explicitly * placed in the 3 MS bytes in the pixel. * (4) Normalizing to 1 and considering the r,g,b components, * a simple way to understand the HSV space is: * - v = max(r,g,b) * - s = (max - min) / max * - h ~ (mid - min) / (max - min) [apart from signs and constants] * (5) Normalizing to 1, some properties of the HSV space are: * - For gray values (r = g = b) along the continuum between * black and white: * s = 0 (becoming undefined as you approach black) * h is undefined everywhere * - Where one component is saturated and the others are zero: * v = 1 * s = 1 * h = 0 (r = max), 1/3 (g = max), 2/3 (b = max) * - Where two components are saturated and the other is zero: * v = 1 * s = 1 * h = 1/2 (if r = 0), 5/6 (if g = 0), 1/6 (if b = 0) */ PIX * pixConvertRGBToHSV(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, hval, sval, vval; l_uint32 *line, *data; PIXCMAP *cmap; PROCNAME("pixConvertRGBToHSV"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or rgb", procName, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertRGBToHSV(cmap); return pixd; } /* Convert RGB image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); line[j] = (hval << 24) | (sval << 16) | (vval << 8); } } return pixd; } /*! * pixConvertHSVToRGB() * * Input: pixd (can be NULL; if not NULL, must == pixs) * pixs * Return: pixd always * * Notes: * (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL. * (2) The user takes responsibility for making sure that pixs is * in our HSV space. The definition of our HSV space is given * in convertRGBToHSV(). * (3) The h, s and v values are stored in the same places as * the r, g and b values, respectively. Here, they are explicitly * placed in the 3 MS bytes in the pixel. */ PIX * pixConvertHSVToRGB(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, hval, sval, vval; l_uint32 pixel; l_uint32 *line, *data; PIXCMAP *cmap; PROCNAME("pixConvertHSVToRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or hsv", procName, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertHSVToRGB(cmap); return pixd; } /* Convert HSV image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; hval = pixel >> 24; sval = (pixel >> 16) & 0xff; vval = (pixel >> 8) & 0xff; convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } return pixd; } /*! * convertRGBToHSV() * * Input: rval, gval, bval (RGB input) * &hval, &sval, &vval ( HSV values) * Return: 0 if OK, 1 on error * * Notes: * (1) The range of returned values is: * h [0 ... 239] * s [0 ... 255] * v [0 ... 255] * (2) If r = g = b, the pixel is gray (s = 0), and we define h = 0. * (3) h wraps around, so that h = 0 and h = 240 are equivalent * in hue space. * (4) h has the following correspondence to color: * h = 0 magenta * h = 40 red * h = 80 yellow * h = 120 green * h = 160 cyan * h = 200 blue */ l_int32 convertRGBToHSV(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *phval, l_int32 *psval, l_int32 *pvval) { l_int32 minrg, maxrg, min, max, delta; l_float32 h; PROCNAME("convertRGBToHSV"); if (!phval || !psval || !pvval) return ERROR_INT("&hval, &sval, &vval not all defined", procName, 1); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; *pvval = max; if (delta == 0) { /* gray; no chroma */ *phval = 0; *psval = 0; } else { *psval = (l_int32)(255. * (l_float32)delta / (l_float32)max + 0.5); if (rval == max) /* between magenta and yellow */ h = (l_float32)(gval - bval) / (l_float32)delta; else if (gval == max) /* between yellow and cyan */ h = 2. + (l_float32)(bval - rval) / (l_float32)delta; else /* between cyan and magenta */ h = 4. + (l_float32)(rval - gval) / (l_float32)delta; h *= 40.0; if (h < 0.0) h += 240.0; if (h >= 239.5) h = 0.0; *phval = (l_int32)(h + 0.5); } return 0; } /*! * convertHSVToRGB() * * Input: hval, sval, vval * &rval, &gval, &bval ( RGB values) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertRGBToHSV() for valid input range of HSV values * and their interpretation in color space. */ l_int32 convertHSVToRGB(l_int32 hval, l_int32 sval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 i, x, y, z; l_float32 h, f, s; PROCNAME("convertHSVToRGB"); if (!prval || !pgval || !pbval) return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); if (sval == 0) { /* gray */ *prval = vval; *pgval = vval; *pbval = vval; } else { if (hval < 0 || hval > 240) return ERROR_INT("invalid hval", procName, 1); if (hval == 240) hval = 0; h = (l_float32)hval / 40.; i = (l_int32)h; f = h - i; s = (l_float32)sval / 255.; x = (l_int32)(vval * (1. - s) + 0.5); y = (l_int32)(vval * (1. - s * f) + 0.5); z = (l_int32)(vval * (1. - s * (1. - f)) + 0.5); switch (i) { case 0: *prval = vval; *pgval = z; *pbval = x; break; case 1: *prval = y; *pgval = vval; *pbval = x; break; case 2: *prval = x; *pgval = vval; *pbval = z; break; case 3: *prval = x; *pgval = y; *pbval = vval; break; case 4: *prval = z; *pgval = x; *pbval = vval; break; case 5: *prval = vval; *pgval = x; *pbval = y; break; default: /* none possible */ return 1; } } return 0; } /*! * pixcmapConvertRGBToHSV() * * Input: colormap * Return: 0 if OK; 1 on error * * Notes: * - in-place transform * - See convertRGBToHSV() for def'n of HSV space. * - replaces: r --> h, g --> s, b --> v */ l_int32 pixcmapConvertRGBToHSV(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, hval, sval, vval; PROCNAME("pixcmapConvertRGBToHSV"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); pixcmapResetColor(cmap, i, hval, sval, vval); } return 0; } /*! * pixcmapConvertHSVToRGB() * * Input: colormap * Return: 0 if OK; 1 on error * * Notes: * - in-place transform * - See convertRGBToHSV() for def'n of HSV space. * - replaces: h --> r, s --> g, v --> b */ l_int32 pixcmapConvertHSVToRGB(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, hval, sval, vval; PROCNAME("pixcmapConvertHSVToRGB"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &hval, &sval, &vval); convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); pixcmapResetColor(cmap, i, rval, gval, bval); } return 0; } /*! * pixConvertRGBToHue() * * Input: pixs (32 bpp RGB or 8 bpp with colormap) * Return: pixd (8 bpp hue of HSV), or null on error * * Notes: * (1) The conversion to HSV hue is in-lined here. * (2) If there is a colormap, it is removed. * (3) If you just want the hue component, this does it * at about 10 Mpixels/sec/GHz, which is about * 2x faster than using pixConvertRGBToHSV() */ PIX * pixConvertRGBToHue(PIX *pixs) { l_int32 w, h, d, wplt, wpld; l_int32 i, j, rval, gval, bval, hval, minrg, min, maxrg, max, delta; l_float32 fh; l_uint32 pixel; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; PROCNAME("pixConvertRGBToHue"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("not cmapped or rgb", procName, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); /* Convert RGB image */ pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; extractRGBValues(pixel, &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; if (delta == 0) { /* gray; no chroma */ hval = 0; } else { if (rval == max) /* between magenta and yellow */ fh = (l_float32)(gval - bval) / (l_float32)delta; else if (gval == max) /* between yellow and cyan */ fh = 2. + (l_float32)(bval - rval) / (l_float32)delta; else /* between cyan and magenta */ fh = 4. + (l_float32)(rval - gval) / (l_float32)delta; fh *= 40.0; if (fh < 0.0) fh += 240.0; hval = (l_int32)(fh + 0.5); } SET_DATA_BYTE(lined, j, hval); } } pixDestroy(&pixt); return pixd; } /*! * pixConvertRGBToSaturation() * * Input: pixs (32 bpp RGB or 8 bpp with colormap) * Return: pixd (8 bpp sat of HSV), or null on error * * Notes: * (1) The conversion to HSV sat is in-lined here. * (2) If there is a colormap, it is removed. * (3) If you just want the saturation component, this does it * at about 12 Mpixels/sec/GHz. */ PIX * pixConvertRGBToSaturation(PIX *pixs) { l_int32 w, h, d, wplt, wpld; l_int32 i, j, rval, gval, bval, sval, minrg, min, maxrg, max, delta; l_uint32 pixel; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; PROCNAME("pixConvertRGBToSaturation"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("not cmapped or rgb", procName, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); /* Convert RGB image */ pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; extractRGBValues(pixel, &rval, &gval, &bval); minrg = L_MIN(rval, gval); min = L_MIN(minrg, bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); delta = max - min; if (delta == 0) /* gray; no chroma */ sval = 0; else sval = (l_int32)(255. * (l_float32)delta / (l_float32)max + 0.5); SET_DATA_BYTE(lined, j, sval); } } pixDestroy(&pixt); return pixd; } /*! * pixConvertRGBToValue() * * Input: pixs (32 bpp RGB or 8 bpp with colormap) * Return: pixd (8 bpp max component intensity of HSV), or null on error * * Notes: * (1) The conversion to HSV sat is in-lined here. * (2) If there is a colormap, it is removed. * (3) If you just want the value component, this does it * at about 35 Mpixels/sec/GHz. */ PIX * pixConvertRGBToValue(PIX *pixs) { l_int32 w, h, d, wplt, wpld; l_int32 i, j, rval, gval, bval, maxrg, max; l_uint32 pixel; l_uint32 *linet, *lined, *datat, *datad; PIX *pixt, *pixd; PROCNAME("pixConvertRGBToValue"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("not cmapped or rgb", procName, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); /* Convert RGB image */ pixd = pixCreate(w, h, 8); pixCopyResolution(pixd, pixs); wplt = pixGetWpl(pixt); datat = pixGetData(pixt); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; extractRGBValues(pixel, &rval, &gval, &bval); maxrg = L_MAX(rval, gval); max = L_MAX(maxrg, bval); SET_DATA_BYTE(lined, j, max); } } pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Selection and display of range of colors in HSV space * *---------------------------------------------------------------------------*/ /*! * pixMakeRangeMaskHS() * * Input: pixs (32 bpp rgb) * huecenter (center value of hue range) * huehw (half-width of hue range) * satcenter (center value of saturation range) * sathw (half-width of saturation range) * regionflag (L_INCLUDE_REGION, L_EXCLUDE_REGION) * Return: pixd (1 bpp mask over selected pixels), or null on error * * Notes: * (1) The pixels are selected based on the specified ranges of * hue and saturation. For selection or exclusion, the pixel * HS component values must be within both ranges. Care must * be taken in finding the hue range because of wrap-around. * (2) Use @regionflag == L_INCLUDE_REGION to take only those * pixels within the rectangular region specified in HS space. * Use @regionflag == L_EXCLUDE_REGION to take all pixels except * those within the rectangular region specified in HS space. */ PIX * pixMakeRangeMaskHS(PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 satcenter, l_int32 sathw, l_int32 regionflag) { l_int32 i, j, w, h, wplt, wpld, hstart, hend, sstart, send, hval, sval; l_int32 *hlut, *slut; l_uint32 pixel; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; PROCNAME("pixMakeRangeMaskHS"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) return (PIX *)ERROR_PTR("invalid regionflag", procName, NULL); /* Set up LUTs for hue and saturation. These have the value 1 * within the specified intervals of hue and saturation. */ hlut = (l_int32 *)CALLOC(240, sizeof(l_int32)); slut = (l_int32 *)CALLOC(256, sizeof(l_int32)); sstart = L_MAX(0, satcenter - sathw); send = L_MIN(255, satcenter + sathw); for (i = sstart; i <= send; i++) slut[i] = 1; hstart = (huecenter - huehw + 240) % 240; hend = (huecenter + huehw + 240) % 240; if (hstart < hend) { for (i = hstart; i <= hend; i++) hlut[i] = 1; } else { /* wrap */ for (i = hstart; i < 240; i++) hlut[i] = 1; for (i = 0; i <= hend; i++) hlut[i] = 1; } /* Generate the mask */ pixt = pixConvertRGBToHSV(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreateNoInit(w, h, 1); if (regionflag == L_INCLUDE_REGION) pixClearAll(pixd); else /* L_EXCLUDE_REGION */ pixSetAll(pixd); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; sval = (pixel >> L_GREEN_SHIFT) & 0xff; if (hlut[hval] == 1 && slut[sval] == 1) { if (regionflag == L_INCLUDE_REGION) SET_DATA_BIT(lined, j); else /* L_EXCLUDE_REGION */ CLEAR_DATA_BIT(lined, j); } } } FREE(hlut); FREE(slut); pixDestroy(&pixt); return pixd; } /*! * pixMakeRangeMaskHV() * * Input: pixs (32 bpp rgb) * huecenter (center value of hue range) * huehw (half-width of hue range) * valcenter (center value of max intensity range) * valhw (half-width of max intensity range) * regionflag (L_INCLUDE_REGION, L_EXCLUDE_REGION) * Return: pixd (1 bpp mask over selected pixels), or null on error * * Notes: * (1) The pixels are selected based on the specified ranges of * hue and max intensity values. For selection or exclusion, * the pixel HV component values must be within both ranges. * Care must be taken in finding the hue range because of wrap-around. * (2) Use @regionflag == L_INCLUDE_REGION to take only those * pixels within the rectangular region specified in HV space. * Use @regionflag == L_EXCLUDE_REGION to take all pixels except * those within the rectangular region specified in HV space. */ PIX * pixMakeRangeMaskHV(PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag) { l_int32 i, j, w, h, wplt, wpld, hstart, hend, vstart, vend, hval, vval; l_int32 *hlut, *vlut; l_uint32 pixel; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; PROCNAME("pixMakeRangeMaskHV"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) return (PIX *)ERROR_PTR("invalid regionflag", procName, NULL); /* Set up LUTs for hue and maximum intensity (val). These have * the value 1 within the specified intervals of hue and value. */ hlut = (l_int32 *)CALLOC(240, sizeof(l_int32)); vlut = (l_int32 *)CALLOC(256, sizeof(l_int32)); vstart = L_MAX(0, valcenter - valhw); vend = L_MIN(255, valcenter + valhw); for (i = vstart; i <= vend; i++) vlut[i] = 1; hstart = (huecenter - huehw + 240) % 240; hend = (huecenter + huehw + 240) % 240; if (hstart < hend) { for (i = hstart; i <= hend; i++) hlut[i] = 1; } else { for (i = hstart; i < 240; i++) hlut[i] = 1; for (i = 0; i <= hend; i++) hlut[i] = 1; } /* Generate the mask */ pixt = pixConvertRGBToHSV(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreateNoInit(w, h, 1); if (regionflag == L_INCLUDE_REGION) pixClearAll(pixd); else /* L_EXCLUDE_REGION */ pixSetAll(pixd); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (hlut[hval] == 1 && vlut[vval] == 1) { if (regionflag == L_INCLUDE_REGION) SET_DATA_BIT(lined, j); else /* L_EXCLUDE_REGION */ CLEAR_DATA_BIT(lined, j); } } } FREE(hlut); FREE(vlut); pixDestroy(&pixt); return pixd; } /*! * pixMakeRangeMaskSV() * * Input: pixs (32 bpp rgb) * satcenter (center value of saturation range) * sathw (half-width of saturation range) * valcenter (center value of max intensity range) * valhw (half-width of max intensity range) * regionflag (L_INCLUDE_REGION, L_EXCLUDE_REGION) * Return: pixd (1 bpp mask over selected pixels), or null on error * * Notes: * (1) The pixels are selected based on the specified ranges of * saturation and max intensity (val). For selection or * exclusion, the pixel SV component values must be within both ranges. * (2) Use @regionflag == L_INCLUDE_REGION to take only those * pixels within the rectangular region specified in SV space. * Use @regionflag == L_EXCLUDE_REGION to take all pixels except * those within the rectangular region specified in SV space. */ PIX * pixMakeRangeMaskSV(PIX *pixs, l_int32 satcenter, l_int32 sathw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag) { l_int32 i, j, w, h, wplt, wpld, sval, vval, sstart, send, vstart, vend; l_int32 *slut, *vlut; l_uint32 pixel; l_uint32 *datat, *datad, *linet, *lined; PIX *pixt, *pixd; PROCNAME("pixMakeRangeMaskSV"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (regionflag != L_INCLUDE_REGION && regionflag != L_EXCLUDE_REGION) return (PIX *)ERROR_PTR("invalid regionflag", procName, NULL); /* Set up LUTs for saturation and max intensity (val). * These have the value 1 within the specified intervals of * saturation and max intensity. */ slut = (l_int32 *)CALLOC(256, sizeof(l_int32)); vlut = (l_int32 *)CALLOC(256, sizeof(l_int32)); sstart = L_MAX(0, satcenter - sathw); send = L_MIN(255, satcenter + sathw); vstart = L_MAX(0, valcenter - valhw); vend = L_MIN(255, valcenter + valhw); for (i = sstart; i <= send; i++) slut[i] = 1; for (i = vstart; i <= vend; i++) vlut[i] = 1; /* Generate the mask */ pixt = pixConvertRGBToHSV(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreateNoInit(w, h, 1); if (regionflag == L_INCLUDE_REGION) pixClearAll(pixd); else /* L_EXCLUDE_REGION */ pixSetAll(pixd); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linet[j]; sval = (pixel >> L_GREEN_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (slut[sval] == 1 && vlut[vval] == 1) { if (regionflag == L_INCLUDE_REGION) SET_DATA_BIT(lined, j); else /* L_EXCLUDE_REGION */ CLEAR_DATA_BIT(lined, j); } } } FREE(slut); FREE(vlut); pixDestroy(&pixt); return pixd; } /*! * pixMakeHistoHS() * * Input: pixs (HSV colorspace) * factor (subsampling factor; integer) * &nahue ( hue histogram) * &nasat ( saturation histogram) * Return: pixd (32 bpp histogram in hue and saturation), or null on error * * Notes: * (1) pixs is a 32 bpp image in HSV colorspace; hue is in the "red" * byte, saturation is in the "green" byte. * (2) In pixd, hue is displayed vertically; saturation horizontally. * The dimensions of pixd are w = 256, h = 240, and the depth * is 32 bpp. The value at each point is simply the number * of pixels found at that value of hue and saturation. */ PIX * pixMakeHistoHS(PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnasat) { l_int32 i, j, w, h, wplt, hval, sval, nd; l_uint32 pixel; l_uint32 *datat, *linet; void **lined32; NUMA *nahue, *nasat; PIX *pixt, *pixd; PROCNAME("pixMakeHistoHS"); if (pnahue) *pnahue = NULL; if (pnasat) *pnasat = NULL; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (pnahue) { nahue = numaCreate(240); numaSetCount(nahue, 240); *pnahue = nahue; } if (pnasat) { nasat = numaCreate(256); numaSetCount(nasat, 256); *pnasat = nasat; } if (factor <= 1) pixt = pixClone(pixs); else pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, 1.0 / (l_float32)factor); /* Create the hue-saturation histogram */ pixd = pixCreate(256, 240, 32); lined32 = pixGetLinePtrs(pixd, NULL); pixGetDimensions(pixt, &w, &h, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { linet = datat + i * wplt; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; #if DEBUG_HISTO if (hval > 239) { fprintf(stderr, "hval = %d for (%d,%d)\n", hval, i, j); continue; } #endif /* DEBUG_HISTO */ sval = (pixel >> L_GREEN_SHIFT) & 0xff; if (pnahue) numaShiftValue(nahue, hval, 1.0); if (pnasat) numaShiftValue(nasat, sval, 1.0); nd = GET_DATA_FOUR_BYTES(lined32[hval], sval); SET_DATA_FOUR_BYTES(lined32[hval], sval, nd + 1); } } FREE(lined32); pixDestroy(&pixt); return pixd; } /*! * pixMakeHistoHV() * * Input: pixs (HSV colorspace) * factor (subsampling factor; integer) * &nahue ( hue histogram) * &naval ( max intensity (value) histogram) * Return: pixd (32 bpp histogram in hue and value), or null on error * * Notes: * (1) pixs is a 32 bpp image in HSV colorspace; hue is in the "red" * byte, max intensity ("value") is in the "blue" byte. * (2) In pixd, hue is displayed vertically; intensity horizontally. * The dimensions of pixd are w = 256, h = 240, and the depth * is 32 bpp. The value at each point is simply the number * of pixels found at that value of hue and intensity. */ PIX * pixMakeHistoHV(PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnaval) { l_int32 i, j, w, h, wplt, hval, vval, nd; l_uint32 pixel; l_uint32 *datat, *linet; void **lined32; NUMA *nahue, *naval; PIX *pixt, *pixd; PROCNAME("pixMakeHistoHV"); if (pnahue) *pnahue = NULL; if (pnaval) *pnaval = NULL; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (pnahue) { nahue = numaCreate(240); numaSetCount(nahue, 240); *pnahue = nahue; } if (pnaval) { naval = numaCreate(256); numaSetCount(naval, 256); *pnaval = naval; } if (factor <= 1) pixt = pixClone(pixs); else pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, 1.0 / (l_float32)factor); /* Create the hue-value histogram */ pixd = pixCreate(256, 240, 32); lined32 = pixGetLinePtrs(pixd, NULL); pixGetDimensions(pixt, &w, &h, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { linet = datat + i * wplt; for (j = 0; j < w; j++) { pixel = linet[j]; hval = (pixel >> L_RED_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (pnahue) numaShiftValue(nahue, hval, 1.0); if (pnaval) numaShiftValue(naval, vval, 1.0); nd = GET_DATA_FOUR_BYTES(lined32[hval], vval); SET_DATA_FOUR_BYTES(lined32[hval], vval, nd + 1); } } FREE(lined32); pixDestroy(&pixt); return pixd; } /*! * pixMakeHistoSV() * * Input: pixs (HSV colorspace) * factor (subsampling factor; integer) * &nasat ( sat histogram) * &naval ( max intensity (value) histogram) * Return: pixd (32 bpp histogram in sat and value), or null on error * * Notes: * (1) pixs is a 32 bpp image in HSV colorspace; sat is in the "green" * byte, max intensity ("value") is in the "blue" byte. * (2) In pixd, sat is displayed vertically; intensity horizontally. * The dimensions of pixd are w = 256, h = 256, and the depth * is 32 bpp. The value at each point is simply the number * of pixels found at that value of saturation and intensity. */ PIX * pixMakeHistoSV(PIX *pixs, l_int32 factor, NUMA **pnasat, NUMA **pnaval) { l_int32 i, j, w, h, wplt, sval, vval, nd; l_uint32 pixel; l_uint32 *datat, *linet; void **lined32; NUMA *nasat, *naval; PIX *pixt, *pixd; PROCNAME("pixMakeHistoSV"); if (pnasat) *pnasat = NULL; if (pnaval) *pnaval = NULL; if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (pnasat) { nasat = numaCreate(256); numaSetCount(nasat, 256); *pnasat = nasat; } if (pnaval) { naval = numaCreate(256); numaSetCount(naval, 256); *pnaval = naval; } if (factor <= 1) pixt = pixClone(pixs); else pixt = pixScaleBySampling(pixs, 1.0 / (l_float32)factor, 1.0 / (l_float32)factor); /* Create the hue-value histogram */ pixd = pixCreate(256, 256, 32); lined32 = pixGetLinePtrs(pixd, NULL); pixGetDimensions(pixt, &w, &h, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); for (i = 0; i < h; i++) { linet = datat + i * wplt; for (j = 0; j < w; j++) { pixel = linet[j]; sval = (pixel >> L_GREEN_SHIFT) & 0xff; vval = (pixel >> L_BLUE_SHIFT) & 0xff; if (pnasat) numaShiftValue(nasat, sval, 1.0); if (pnaval) numaShiftValue(naval, vval, 1.0); nd = GET_DATA_FOUR_BYTES(lined32[sval], vval); SET_DATA_FOUR_BYTES(lined32[sval], vval, nd + 1); } } FREE(lined32); pixDestroy(&pixt); return pixd; } /*! * pixFindHistoPeaksHSV() * * Input: pixs (32 bpp; HS, HV or SV histogram; not changed) * type (L_HS_HISTO, L_HV_HISTO or L_SV_HISTO) * width (half width of sliding window) * height (half height of sliding window) * npeaks (number of peaks to look for) * erasefactor (ratio of erase window size to sliding window size) * &pta (locations of maximum for each integrated peak area) * &natot (integrated peak areas) * &pixa ( pixa for debugging; NULL to skip) * Return: 0 if OK, 1 on error * * Notes: * (1) pixs is a 32 bpp histogram in a pair of HSV colorspace. It * should be thought of as a single sample with 32 bps (bits/sample). * (2) After each peak is found, the peak is erased with a window * that is centered on the peak and scaled from the sliding * window by @erasefactor. Typically, @erasefactor is chosen * to be > 1.0. * (3) Data for a maximum of @npeaks is returned in @pta and @natot. * (4) For debugging, after the pixa is returned, display with: * pixd = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2); */ l_int32 pixFindHistoPeaksHSV(PIX *pixs, l_int32 type, l_int32 width, l_int32 height, l_int32 npeaks, l_float32 erasefactor, PTA **ppta, NUMA **pnatot, PIXA **ppixa) { l_int32 i, xmax, ymax, ewidth, eheight; l_uint32 maxval; BOX *box; NUMA *natot; PIX *pixh, *pixw, *pixt1, *pixt2, *pixt3; PTA *pta; PROCNAME("pixFindHistoPeaksHSV"); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs undefined or not 32 bpp", procName, 1); if (!ppta || !pnatot) return ERROR_INT("&pta and &natot not both defined", procName, 1); if (type != L_HS_HISTO && type != L_HV_HISTO && type != L_SV_HISTO) return ERROR_INT("invalid HSV histo type", procName, 1); if ((pta = ptaCreate(npeaks)) == NULL) return ERROR_INT("pta not made", procName, 1); *ppta = pta; if ((natot = numaCreate(npeaks)) == NULL) return ERROR_INT("natot not made", procName, 1); *pnatot = natot; *ppta = pta; if (type == L_SV_HISTO) pixh = pixAddMirroredBorder(pixs, width + 1, width + 1, height + 1, height + 1); else /* type == L_HS_HISTO or type == L_HV_HISTO */ pixh = pixAddMixedBorder(pixs, width + 1, width + 1, height + 1, height + 1); /* Get the total count in the sliding window. If the window * fully covers the peak, this will be the integrated * volume under the peak. */ pixw = pixWindowedMean(pixh, width, height, 1, 0); pixDestroy(&pixh); /* Sequentially identify and erase peaks in the histogram. * If requested for debugging, save a pixa of the sequence of * false color histograms. */ if (ppixa) *ppixa = pixaCreate(0); for (i = 0; i < npeaks; i++) { pixGetMaxValueInRect(pixw, NULL, &maxval, &xmax, &ymax); if (maxval == 0) break; numaAddNumber(natot, maxval); ptaAddPt(pta, xmax, ymax); ewidth = (l_int32)(width * erasefactor); eheight = (l_int32)(height * erasefactor); box = boxCreate(xmax - ewidth, ymax - eheight, 2 * ewidth + 1, 2 * eheight + 1); if (ppixa) { pixt1 = pixMaxDynamicRange(pixw, L_LINEAR_SCALE); pixaAddPix(*ppixa, pixt1, L_INSERT); pixt2 = pixConvertGrayToFalseColor(pixt1, 1.0); pixaAddPix(*ppixa, pixt2, L_INSERT); pixt1 = pixMaxDynamicRange(pixw, L_LOG_SCALE); pixt2 = pixConvertGrayToFalseColor(pixt1, 1.0); pixaAddPix(*ppixa, pixt2, L_INSERT); pixt3 = pixConvertTo32(pixt1); pixRenderHashBoxArb(pixt3, box, 6, 2, L_NEG_SLOPE_LINE, 1, 255, 100, 100); pixaAddPix(*ppixa, pixt3, L_INSERT); pixDestroy(&pixt1); } pixClearInRect(pixw, box); boxDestroy(&box); if (type == L_HS_HISTO || type == L_HV_HISTO) { /* clear wraps at bottom and top */ if (ymax - eheight < 0) { /* overlap to bottom */ box = boxCreate(xmax - ewidth, 240 + ymax - eheight, 2 * ewidth + 1, eheight - ymax); } else if (ymax + eheight > 239) { /* overlap to top */ box = boxCreate(xmax - ewidth, 0, 2 * ewidth + 1, ymax + eheight - 239); } else { box = NULL; } if (box) { pixClearInRect(pixw, box); boxDestroy(&box); } } } pixDestroy(&pixw); return 0; } /*! * displayHSVColorRange() * * Input: hval (hue center value; in range [0 ... 240] * sval (saturation center value; in range [0 ... 255] * vval (max intensity value; in range [0 ... 255] * huehw (half-width of hue range; > 0) * sathw (half-width of saturation range; > 0) * nsamp (number of samplings in each half-width in hue and sat) * factor (linear size of each color square, in pixels; > 3) * Return: pixd (32 bpp set of color squares over input range), * or null on error * * Notes: * (1) The total number of color samplings in each of the hue * and saturation directions is 2 * nsamp + 1. */ PIX * displayHSVColorRange(l_int32 hval, l_int32 sval, l_int32 vval, l_int32 huehw, l_int32 sathw, l_int32 nsamp, l_int32 factor) { l_int32 i, j, w, huedelta, satdelta, hue, sat, rval, gval, bval; PIX *pixt, *pixd; PROCNAME("displayHSVColorRange"); if (hval < 0 || hval > 240) return (PIX *)ERROR_PTR("invalid hval", procName, NULL); if (huehw < 5 || huehw > 120) return (PIX *)ERROR_PTR("invalid huehw", procName, NULL); if (sval - sathw < 0 || sval + sathw > 255) return (PIX *)ERROR_PTR("invalid sval/sathw", procName, NULL); if (nsamp < 1 || factor < 3) return (PIX *)ERROR_PTR("invalid nsamp or rep. factor", procName, NULL); if (vval < 0 || vval > 255) return (PIX *)ERROR_PTR("invalid vval", procName, NULL); w = (2 * nsamp + 1); huedelta = (l_int32)((l_float32)huehw / (l_float32)nsamp); satdelta = (l_int32)((l_float32)sathw / (l_float32)nsamp); pixt = pixCreate(w, w, 32); for (i = 0; i < w; i++) { hue = hval + huedelta * (i - nsamp); if (hue < 0) hue += 240; if (hue >= 240) hue -= 240; for (j = 0; j < w; j++) { sat = sval + satdelta * (j - nsamp); convertHSVToRGB(hue, sat, vval, &rval, &gval, &bval); pixSetRGBPixel(pixt, j, i, rval, gval, bval); } } pixd = pixExpandReplicate(pixt, factor); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------------* * Colorspace conversion between RGB and YUV * *---------------------------------------------------------------------------*/ /*! * pixConvertRGBToYUV() * * Input: pixd (can be NULL; if not NULL, must == pixs) * pixs * Return: pixd always * * Notes: * (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL. * (2) The Y, U and V values are stored in the same places as * the r, g and b values, respectively. Here, they are explicitly * placed in the 3 MS bytes in the pixel. * (3) Normalizing to 1 and considering the r,g,b components, * a simple way to understand the YUV space is: * - Y = weighted sum of (r,g,b) * - U = weighted difference between Y and B * - V = weighted difference between Y and R * (4) Following video conventions, Y, U and V are in the range: * Y: [16, 235] * U: [16, 240] * V: [16, 240] * (5) For the coefficients in the transform matrices, see eq. 4 in * "Frequently Asked Questions about Color" by Charles Poynton, * http://www.poynton.com/notes/colour_and_gamma/ColorFAQ.html */ PIX * pixConvertRGBToYUV(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, yval, uval, vval; l_uint32 *line, *data; PIXCMAP *cmap; PROCNAME("pixConvertRGBToYUV"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or rgb", procName, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertRGBToYUV(cmap); return pixd; } /* Convert RGB image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); line[j] = (yval << 24) | (uval << 16) | (vval << 8); } } return pixd; } /*! * pixConvertYUVToRGB() * * Input: pixd (can be NULL; if not NULL, must == pixs) * pixs * Return: pixd always * * Notes: * (1) For pixs = pixd, this is in-place; otherwise pixd must be NULL. * (2) The user takes responsibility for making sure that pixs is * in YUV space. * (3) The Y, U and V values are stored in the same places as * the r, g and b values, respectively. Here, they are explicitly * placed in the 3 MS bytes in the pixel. */ PIX * pixConvertYUVToRGB(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, i, j, rval, gval, bval, yval, uval, vval; l_uint32 pixel; l_uint32 *line, *data; PIXCMAP *cmap; PROCNAME("pixConvertYUVToRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd defined and not inplace", procName, pixd); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("not cmapped or hsv", procName, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); cmap = pixGetColormap(pixd); if (cmap) { /* just convert the colormap */ pixcmapConvertYUVToRGB(cmap); return pixd; } /* Convert YUV image */ pixGetDimensions(pixd, &w, &h, NULL); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; yval = pixel >> 24; uval = (pixel >> 16) & 0xff; vval = (pixel >> 8) & 0xff; convertYUVToRGB(yval, uval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } return pixd; } /*! * convertRGBToYUV() * * Input: rval, gval, bval (RGB input) * &yval, &uval, &vval ( YUV values) * Return: 0 if OK, 1 on error * * Notes: * (1) The range of returned values is: * Y [16 ... 235] * U [16 ... 240] * V [16 ... 240] */ l_int32 convertRGBToYUV(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pyval, l_int32 *puval, l_int32 *pvval) { l_float32 norm; PROCNAME("convertRGBToYUV"); if (!pyval || !puval || !pvval) return ERROR_INT("&yval, &uval, &vval not all defined", procName, 1); norm = 1.0 / 256.; *pyval = (l_int32)(16.0 + norm * (65.738 * rval + 129.057 * gval + 25.064 * bval) + 0.5); *puval = (l_int32)(128.0 + norm * (-37.945 * rval -74.494 * gval + 112.439 * bval) + 0.5); *pvval = (l_int32)(128.0 + norm * (112.439 * rval - 94.154 * gval - 18.285 * bval) + 0.5); return 0; } /*! * convertYUVToRGB() * * Input: yval, uval, vval * &rval, &gval, &bval ( RGB values) * Return: 0 if OK, 1 on error * * Notes: * (1) The range of valid input values is: * Y [16 ... 235] * U [16 ... 240] * V [16 ... 240] * (2) Conversion of RGB --> YUV --> RGB leaves the image unchanged. * (3) The YUV gamut is larger than the RBG gamut; many YUV values * will result in an invalid RGB value. We clip individual * r,g,b components to the range [0, 255], and do not test input. */ l_int32 convertYUVToRGB(l_int32 yval, l_int32 uval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 rval, gval, bval; l_float32 norm, ym, um, vm; PROCNAME("convertYUVToRGB"); if (!prval || !pgval || !pbval) return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); norm = 1.0 / 256.; ym = yval - 16.0; um = uval - 128.0; vm = vval - 128.0; rval = (l_int32)(norm * (298.082 * ym + 408.583 * vm) + 0.5); gval = (l_int32)(norm * (298.082 * ym - 100.291 * um - 208.120 * vm) + 0.5); bval = (l_int32)(norm * (298.082 * ym + 516.411 * um) + 0.5); *prval = L_MIN(255, L_MAX(0, rval)); *pgval = L_MIN(255, L_MAX(0, gval)); *pbval = L_MIN(255, L_MAX(0, bval)); return 0; } /*! * pixcmapConvertRGBToYUV() * * Input: colormap * Return: 0 if OK; 1 on error * * Notes: * - in-place transform * - See convertRGBToYUV() for def'n of YUV space. * - replaces: r --> y, g --> u, b --> v */ l_int32 pixcmapConvertRGBToYUV(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, yval, uval, vval; PROCNAME("pixcmapConvertRGBToYUV"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); convertRGBToYUV(rval, gval, bval, &yval, &uval, &vval); pixcmapResetColor(cmap, i, yval, uval, vval); } return 0; } /*! * pixcmapConvertYUVToRGB() * * Input: colormap * Return: 0 if OK; 1 on error * * Notes: * - in-place transform * - See convertRGBToYUV() for def'n of YUV space. * - replaces: y --> r, u --> g, v --> b */ l_int32 pixcmapConvertYUVToRGB(PIXCMAP *cmap) { l_int32 i, ncolors, rval, gval, bval, yval, uval, vval; PROCNAME("pixcmapConvertYUVToRGB"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &yval, &uval, &vval); convertYUVToRGB(yval, uval, vval, &rval, &gval, &bval); pixcmapResetColor(cmap, i, rval, gval, bval); } return 0; } leptonica-1.70/src/pdfio.c0000644000175000017500000036125012265645104013555 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pdfio.c * * |=============================================================| * | Important note | * |=============================================================| * | Some of these functions require libtiff, libjpeg, and libz | * | If you do not have these libraries, you must set | * | #define USE_PDFIO 0 | * | in environ.h. This will link pdfiostub.c | * |=============================================================| * * Set 1. These functions convert a set of image files * to a multi-page pdf file, with one image on each page. * All images are rendered at the same (input) resolution. * The images can be specified as being in a directory, or they * can be in an sarray. The output pdf can be either a file * or an array of bytes in memory. * * Set 2. These functions are a special case of set 1, where * no scaling or change in quality is requires. For jpeg and * jp2k images, the bytes in each jpeg file can be directly * incorporated into the output pdf, and the wrapping up of * multiple image files is very fast. For other image formats, * the image must be read and then the G4 or Flate (gzip) * encodings are generated. * * Set 3. These functions convert a set of images in memory * to a multi-page pdf, with one image on each page. The pdf * output can be either a file or an array of bytes in memory. * * Set 4. These functions implement a pdf output "device driver" * for wrapping (encoding) any number of images on a single page * in pdf. The input can be either an image file or a Pix; * the pdf output can be either a file or an array of bytes in memory. * * Set 5. These "segmented" functions take a set of image * files, along with optional segmentation information, and * generate a multi-page pdf file, where each page consists * in general of a mixed raster pdf of image and non-image regions. * The segmentation information for each page can be input as * either a mask over the image parts, or as a Boxa of those * regions. * * Set 6. These "segmented" functions convert an image and * an optional Boxa of image regions into a mixed raster pdf file * for the page. The input image can be either a file or a Pix. * * Set 7. These functions take a set of single-page pdf files * and concatenates them into a multi-page pdf. * The input can be a set of single page pdf files, or of * pdf 'strings' in memory. The output can be either a file or * an array of bytes in memory. * * The images in the pdf file can be rendered using a pdf viewer, * such as gv, evince, xpdf or acroread. * * Reference on the pdf file format: * http://www.adobe.com/devnet/pdf/pdf_reference_archive.html * * 1. Convert specified image files to pdf (one image file per page) * l_int32 convertFilesToPdf() * l_int32 saConvertFilesToPdf() * l_int32 saConvertFilesToPdfData() * l_int32 selectDefaultPdfEncoding() * * 2. Convert specified image files to pdf without scaling * l_int32 convertUnscaledFilesToPdf() * l_int32 saConvertUnscaledFilesToPdf() * l_int32 saConvertUnscaledFilesToPdfData() * l_int32 convertUnscaledToPdfData() * static L_COMP_DATA *l_generateJp2kData() * static l_int32 cidConvertToPdfData() * * 3. Convert multiple images to pdf (one image per page) * l_int32 pixaConvertToPdf() * l_int32 pixaConvertToPdfData() * * 4. Single page, multi-image converters * l_int32 convertToPdf() * l_int32 convertImageDataToPdf() * l_int32 convertToPdfData() * l_int32 convertImageDataToPdfData() * l_int32 pixConvertToPdf() * l_int32 pixConvertToPdfData() * l_int32 pixWriteStreamPdf() * * 5. Segmented multi-page, multi-image converter * l_int32 convertSegmentedFilesToPdf() * BOXAA *convertNumberedMasksToBoxaa() * * 6. Segmented single page, multi-image converters * l_int32 convertToPdfSegmented() * l_int32 pixConvertToPdfSegmented() * l_int32 convertToPdfDataSegmented() * l_int32 pixConvertToPdfDataSegmented() * * Helper functions for generating the output pdf string * static l_int32 l_generatePdf() * static void generateFixedStringsPdf() * static void generateMediaboxPdf() * static l_int32 generatePageStringPdf() * static l_int32 generateContentStringPdf() * static l_int32 generatePreXStringsPdf() * static l_int32 generateColormapStringsPdf() * static void generateTrailerPdf() * static l_int32 makeTrailerStringPdf() * static l_int32 generateOutputDataPdf() * * 7. Multi-page concatenation * l_int32 concatenatePdf() * l_int32 saConcatenatePdf() * l_int32 ptraConcatenatePdf() * l_int32 concatenatePdfToData() * l_int32 saConcatenatePdfToData() * l_int32 ptraConcatenatePdfToData() * * Helper functions for generating the multi-page pdf output * static l_int32 parseTrailerPdf() * static char *generatePagesObjStringPdf() * static L_BYTEA *substituteObjectNumbers() * * Create/destroy/access pdf data * static L_PDF_DATA *pdfdataCreate() * static void pdfdataDestroy() * static L_COMP_DATA *pdfdataGetCid() * * Set flags for special modes * void l_pdfSetG4ImageMask() * void l_pdfSetDateAndVersion() * * The top-level multi-image functions can be visualized as follows: * Output pdf data to file: * convertToPdf() and convertImageDataToPdf() * --> pixConvertToPdf() * --> pixConvertToPdfData() * * Output pdf data to array in memory: * convertToPdfData() and convertImageDataToPdfData() * --> pixConvertToPdfData() * * The top-level segmented image functions can be visualized as follows: * Output pdf data to file: * convertToPdfSegmented() * --> pixConvertToPdfSegmented() * --> pixConvertToPdfDataSegmented() * * Output pdf data to array in memory: * convertToPdfDataSegmented() * --> pixConvertToPdfDataSegmented() * * For multi-page concatenation, there are three different types of input * (1) directory and optional filename filter * (2) sarray of filenames * (3) ptra of byte arrays of pdf data * and two types of output for the concatenated pdf data * (1) filename * (2) data array and size * High-level interfaces are given for each of the six combinations. * * Note: When wrapping small images into pdf, it is useful to give * them a relatively low resolution value, to avoid rounding errors * when rendering the images. For example, if you want an image * of width w pixels to be 5 inches wide on a screen, choose a * resolution w/5. * * The very fast functions in section (2) require neither transcoding * nor parsing of the compressed jpeg file, because the pdf representation * of DCT-encoded images simply includes the entire jpeg-encoded data * as a byte array in the pdf file. This was a good choice on the part * of the pdf designers. They could have chosen to do the same with FLATE * encoding, by including the png file data as a byte array in the * pdf, but unfortunately they didn't. Whereas png compression * uses a two-dimensional predictor, flate compression simply * gzips the image data. So transcoding of png images is reguired; * to wrap them in flate encoding you must uncompress the image, * gzip the image data, recompress with gzip and generate a colormap * object if it exists. And the resulting one-dimensional compression * is worse than png. For CCITT-G4 compression, again, you can not simply * include a tiff G4 file -- you must either parse it and extract the * G4 compressed data within it, or uncompress to a raster and * compress again. */ #include #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ /* Typical scan resolution in ppi (pixels/inch) */ static const l_int32 DEFAULT_INPUT_RES = 300; /* Static helpers */ static L_COMP_DATA *l_generateJp2kData(const char *fname); static l_int32 cidConvertToPdfData(L_COMP_DATA *cid, const char *title, l_uint8 **pdata, size_t *pnbytes); static l_int32 l_generatePdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd); static void generateFixedStringsPdf(L_PDF_DATA *lpd); static void generateMediaboxPdf(L_PDF_DATA *lpd); static l_int32 generatePageStringPdf(L_PDF_DATA *lpd); static l_int32 generateContentStringPdf(L_PDF_DATA *lpd); static l_int32 generatePreXStringsPdf(L_PDF_DATA *lpd); static l_int32 generateColormapStringsPdf(L_PDF_DATA *lpd); static void generateTrailerPdf(L_PDF_DATA *lpd); static char *makeTrailerStringPdf(L_DNA *daloc); static l_int32 generateOutputDataPdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd); static l_int32 parseTrailerPdf(L_BYTEA *bas, L_DNA **pda); static char *generatePagesObjStringPdf(NUMA *napage); static L_BYTEA *substituteObjectNumbers(L_BYTEA *bas, NUMA *na_objs); static L_PDF_DATA *pdfdataCreate(const char *title); static void pdfdataDestroy(L_PDF_DATA **plpd); static L_COMP_DATA *pdfdataGetCid(L_PDF_DATA *lpd, l_int32 index); /* ---------------- Defaults for rendering options ----------------- */ /* Output G4 as writing through image mask; this is the default */ static l_int32 var_WRITE_G4_IMAGE_MASK = 1; /* Write date/time and lib version into pdf; this is the default */ static l_int32 var_WRITE_DATE_AND_VERSION = 1; #define L_SMALLBUF 256 #define L_BIGBUF 2048 /* must be able to hold hex colormap */ #ifndef NO_CONSOLE_IO #define DEBUG_MULTIPAGE 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Convert specified image files to pdf (one image file per page) * *---------------------------------------------------------------------*/ /*! * convertFilesToPdf() * * Input: directory name (containing images) * substr ( substring filter on filenames; can be NULL) * res (input resolution of all images) * scalefactor (scaling factor applied to each image; > 0.0) * type (encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default) * quality (used for JPEG only; 0 for default (75)) * title ( pdf title; if null, taken from the first * image filename) * fileout (pdf file of all images) * Return: 0 if OK, 1 on error * * Notes: * (1) If @substr is not NULL, only image filenames that contain * the substring can be used. If @substr == NULL, all files * in the directory are used. * (2) The files in the directory, after optional filtering by * the substring, are lexically sorted in increasing order * before concatenation. * (3) The scalefactor is applied to each image before encoding. * If you enter a value <= 0.0, it will be set to 1.0. * (4) Specifying one of the three encoding types for @type forces * all images to be compressed with that type. Use 0 to have * the type determined for each image based on depth and whether * or not it has a colormap. */ l_int32 convertFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_int32 ret; SARRAY *sa; PROCNAME("convertFilesToPdf"); if (!dirname) return ERROR_INT("dirname not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", procName, 1); ret = saConvertFilesToPdf(sa, res, scalefactor, type, quality, title, fileout); sarrayDestroy(&sa); return ret; } /*! * saConvertFilesToPdf() * * Input: sarray (of pathnames for images) * res (input resolution of all images) * scalefactor (scaling factor applied to each image; > 0.0) * type (encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default) * quality (used for JPEG only; 0 for default (75)) * title ( pdf title; if null, taken from the first * image filename) * fileout (pdf file of all images) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertFilesToPdf(). */ l_int32 saConvertFilesToPdf(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("saConvertFilesToPdf"); if (!sa) return ERROR_INT("sa not defined", procName, 1); ret = saConvertFilesToPdfData(sa, res, scalefactor, type, quality, title, &data, &nbytes); if (ret) { if (data) FREE(data); return ERROR_INT("pdf data not made", procName, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); if (ret) L_ERROR("pdf data not written to file\n", procName); return ret; } /*! * saConvertFilesToPdfData() * * Input: sarray (of pathnames for images) * res (input resolution of all images) * scalefactor (scaling factor applied to each image; > 0.0) * type (encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default) * quality (used for JPEG only; 0 for default (75)) * title ( pdf title; if null, taken from the first * image filename) * &data ( output pdf data (of all images) * &nbytes ( size of output pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertFilesToPdf(). */ l_int32 saConvertFilesToPdfData(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { char *fname; const char *pdftitle; l_uint8 *imdata; l_int32 i, n, ret, pagetype, npages, scaledres; size_t imbytes; L_BYTEA *ba; PIX *pixs, *pix; L_PTRA *pa_data; PROCNAME("saConvertFilesToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!sa) return ERROR_INT("sa not defined", procName, 1); if (scalefactor <= 0.0) scalefactor = 1.0; if (type < 0 || type > L_FLATE_ENCODE) { L_WARNING("invalid compression type; using per-page default\n", procName); type = 0; } /* Generate all the encoded pdf strings */ n = sarrayGetCount(sa); pa_data = ptraCreate(n); pdftitle = NULL; for (i = 0; i < n; i++) { if (i && (i % 10 == 0)) fprintf(stderr, ".. %d ", i); fname = sarrayGetString(sa, i, L_NOCOPY); if ((pixs = pixRead(fname)) == NULL) { L_ERROR("image not readable from file %s\n", procName, fname); continue; } if (!pdftitle) pdftitle = (title) ? title : fname; if (scalefactor != 1.0) pix = pixScale(pixs, scalefactor, scalefactor); else pix = pixClone(pixs); scaledres = (l_int32)(res * scalefactor); if (type != 0) { pagetype = type; } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { L_ERROR("encoding type selection failed for file %s\n", procName, fname); continue; } ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, 0, 0, scaledres, pdftitle, NULL, 0); pixDestroy(&pix); pixDestroy(&pixs); if (ret) { L_ERROR("pdf encoding failed for %s\n", procName, fname); continue; } ba = l_byteaInitFromMem(imdata, imbytes); if (imdata) FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &npages); if (npages == 0) { L_ERROR("no pdf files made\n", procName); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate them */ fprintf(stderr, "\nconcatenating ... "); ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); fprintf(stderr, "done\n"); ptraGetActualCount(pa_data, &npages); /* recalculate in case it changes */ for (i = 0; i < npages; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*! * selectDefaultPdfEncoding() * * Input: pix * &type ( L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * * Notes: * (1) This attempts to choose an encoding for the pix that results * in the smallest file, assuming that if jpeg encoded, it will * use quality = 75. The decision is approximate, in that * (a) all colormapped images will be losslessly encoded with * gzip (flate), and (b) an image with less than about 20 colors * is likely to be smaller if flate encoded than if encoded * as a jpeg (dct). For example, an image made by pixScaleToGray3() * will have 10 colors, and flate encoding will give about * twice the compression as jpeg with quality = 75. */ l_int32 selectDefaultPdfEncoding(PIX *pix, l_int32 *ptype) { l_int32 w, h, d, factor, ncolors; PIXCMAP *cmap; PROCNAME("selectDefaultPdfEncoding"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!ptype) return ERROR_INT("&type not defined", procName, 1); *ptype = L_FLATE_ENCODE; /* default universal encoding */ pixGetDimensions(pix, &w, &h, &d); cmap = pixGetColormap(pix); if (d == 8 && !cmap) { factor = L_MAX(1, (l_int32)sqrt((l_float64)(w * h) / 20000.)); pixNumColors(pix, factor, &ncolors); if (ncolors < 20) *ptype = L_FLATE_ENCODE; else *ptype = L_JPEG_ENCODE; } else if (d == 1) { *ptype = L_G4_ENCODE; } else if (cmap || d == 2 || d == 4) { *ptype = L_FLATE_ENCODE; } else if (d == 8 || d == 32) { *ptype = L_JPEG_ENCODE; } else { return ERROR_INT("type selection failure", procName, 1); } return 0; } /*---------------------------------------------------------------------* * Convert specified image files to pdf without scaling * *---------------------------------------------------------------------*/ /*! * convertUnscaledFilesToPdf() * * Input: directory name (containing images) * substr ( substring filter on filenames; can be NULL) * title ( pdf title; if null, taken from the first * image filename) * fileout (pdf file of all images) * Return: 0 if OK, 1 on error * * Notes: * (1) If @substr is not NULL, only image filenames that contain * the substring can be used. If @substr == NULL, all files * in the directory are used. * (2) The files in the directory, after optional filtering by * the substring, are lexically sorted in increasing order * before concatenation. * (3) For jpeg and jp2k, this is very fast because the compressed * data is wrapped up and concatenated. For png and tiffg4, * the images must be read and recompressed. */ l_int32 convertUnscaledFilesToPdf(const char *dirname, const char *substr, const char *title, const char *fileout) { l_int32 ret; SARRAY *sa; PROCNAME("convertUnscaledFilesToPdf"); if (!dirname) return ERROR_INT("dirname not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", procName, 1); ret = saConvertUnscaledFilesToPdf(sa, title, fileout); sarrayDestroy(&sa); return ret; } /*! * saConvertUnscaledFilesToPdf() * * Input: sarray (of pathnames for images) * title ( pdf title; if null, taken from the first * image filename) * fileout (pdf file of all images) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertUnscaledFilesToPdf(). */ l_int32 saConvertUnscaledFilesToPdf(SARRAY *sa, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("saConvertUnscaledFilesToPdf"); if (!sa) return ERROR_INT("sa not defined", procName, 1); ret = saConvertUnscaledFilesToPdfData(sa, title, &data, &nbytes); if (ret) { if (data) FREE(data); return ERROR_INT("pdf data not made", procName, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); if (ret) L_ERROR("pdf data not written to file\n", procName); return ret; } /*! * saConvertUnscaledFilesToPdfData() * * Input: sarray (of pathnames for images) * title ( pdf title; if null, taken from the first * image filename) * &data ( output pdf data (of all images) * &nbytes ( size of output pdf data) * Return: 0 if OK, 1 on error */ l_int32 saConvertUnscaledFilesToPdfData(SARRAY *sa, const char *title, l_uint8 **pdata, size_t *pnbytes) { char *fname; l_uint8 *imdata; l_int32 i, n, ret, npages; size_t imbytes; L_BYTEA *ba; L_PTRA *pa_data; PROCNAME("saConvertUnscaledFilesToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!sa) return ERROR_INT("sa not defined", procName, 1); /* Generate all the encoded pdf strings */ n = sarrayGetCount(sa); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if (i && (i % 10 == 0)) fprintf(stderr, ".. %d ", i); fname = sarrayGetString(sa, i, L_NOCOPY); /* Generate the pdf data */ if (convertUnscaledToPdfData(fname, title, &imdata, &imbytes)) continue; /* ... and add it to the array of single page data */ ba = l_byteaInitFromMem(imdata, imbytes); if (imdata) FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &npages); if (npages == 0) { L_ERROR("no pdf files made", procName); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate to generate a multipage pdf */ fprintf(stderr, "\nconcatenating ... "); ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); fprintf(stderr, "done\n"); /* Clean up */ ptraGetActualCount(pa_data, &npages); /* maybe failed to read some files */ for (i = 0; i < npages; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*! * convertUnscaledToPdfData() * * Input: fname (of image file) * title ( pdf title; can be NULL) * &data ( output pdf data for image) * &nbytes ( size of output pdf data) * Return: 0 if OK, 1 on error */ l_int32 convertUnscaledToPdfData(const char *fname, const char *title, l_uint8 **pdata, size_t *pnbytes) { const char *pdftitle = NULL; char *tail = NULL; l_int32 format; L_COMP_DATA *cid; PROCNAME("convertUnscaledToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!fname) return ERROR_INT("fname not defined", procName, 1); findFileFormat(fname, &format); if (format == IFF_UNKNOWN) { L_WARNING("file %s format is unknown; skip\n", procName, fname); return 1; } if (format == IFF_PS || format == IFF_LPDF) { L_WARNING("file %s format is %d; skip\n", procName, fname, format); return 1; } /* Generate the image data required for pdf generation, always * in binary (not ascii85) coding. */ if (format == IFF_JFIF_JPEG) cid = l_generateJpegData(fname, 0); else if (format == IFF_JP2) cid = l_generateJp2kData(fname); else if (format == IFF_TIFF_G4) cid = l_generateG4Data(fname, 0); else /* format == IFF_PNG, etc */ cid = l_generateFlateData(fname, 0); if (!cid) { L_ERROR("file %s format is %d; unreadable\n", procName, fname, format); return 1; } /* If @title == NULL, use the tail of @fname. */ if (title) { pdftitle = title; } else { splitPathAtDirectory(fname, NULL, &tail); pdftitle = tail; } /* Generate the pdf string for this page (image). This destroys * the cid by attaching it to an lpd and destroying the lpd. */ cidConvertToPdfData(cid, pdftitle, pdata, pnbytes); FREE(tail); return 0; } /*! * l_generateJp2kData() * * Input: fname (of jp2k file) * Return: cid (containing jp2k data), or null on error * * Notes: * (1) This is only called after the file is verified to be jp2k. * (2) It is here and not in psio2.c because jp2k can't be wrapped * in PostScript. */ static L_COMP_DATA * l_generateJp2kData(const char *fname) { l_uint8 *data = NULL; l_int32 w, h, spp; size_t nbytes; L_COMP_DATA *cid; PROCNAME("l_generateJp2kData"); if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); if ((cid = (L_COMP_DATA *)CALLOC(1, sizeof(L_COMP_DATA))) == NULL) return (L_COMP_DATA *)ERROR_PTR("cid not made", procName, NULL); /* The returned jp2k data in memory is the entire jp2k file */ if ((cid->datacomp = l_binaryRead(fname, &nbytes)) == NULL) return (L_COMP_DATA *)ERROR_PTR("data not extracted", procName, NULL); readHeaderJp2k(fname, &w, &h, &spp); cid->type = L_JP2K_ENCODE; cid->nbytescomp = nbytes; cid->w = w; cid->h = h; cid->bps = 8; cid->spp = spp; cid->res = 0; /* don't know how to extract this */ return cid; } /*! * cidConvertToPdfData() * * Input: cid (compressed image data -- of jp2k image) * title ( pdf title; can be NULL) * &data ( output pdf data for image) * &nbytes ( size of output pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) Caller must not destroy the cid. It is absorbed in the * lpd and destroyed by this function. */ static l_int32 cidConvertToPdfData(L_COMP_DATA *cid, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_int32 res, ret; l_float32 wpt, hpt; L_PDF_DATA *lpd = NULL; PROCNAME("cidConvertToPdfData"); if (!pdata || !pnbytes) return ERROR_INT("&data and &nbytes not both defined", procName, 1); *pdata = NULL; *pnbytes = 0; if (!cid) return ERROR_INT("cid not defined", procName, 1); /* Get media box parameters, in pts */ res = cid->res; if (res <= 0) res = DEFAULT_INPUT_RES; wpt = cid->w * 72. / res; hpt = cid->h * 72. / res; /* Set up the pdf data struct (lpd) */ if ((lpd = pdfdataCreate(title)) == NULL) return ERROR_INT("lpd not made", procName, 1); ptraAdd(lpd->cida, cid); lpd->n++; ptaAddPt(lpd->xy, 0, 0); /* xpt = ypt = 0 */ ptaAddPt(lpd->wh, wpt, hpt); /* Generate the pdf string and destroy the lpd */ ret = l_generatePdf(pdata, pnbytes, lpd); pdfdataDestroy(&lpd); if (ret) return ERROR_INT("pdf output not made", procName, 1); return 0; } /*---------------------------------------------------------------------* * Convert multiple images to pdf (one image per page) * *---------------------------------------------------------------------*/ /*! * pixaConvertToPdf() * * Input: pixa (containing images all at the same resolution) * res (override the resolution of each input image, in ppi; * use 0 to respect the resolution embedded in the input) * scalefactor (scaling factor applied to each image; > 0.0) * type (encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default) * quality (used for JPEG only; 0 for default (75)) * title ( pdf title; if null, taken from the first * image filename) * fileout (pdf file of all images) * Return: 0 if OK, 1 on error * * Notes: * (1) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without * colormap and many colors, or 32 bpp; FLATE for anything else. * (2) The scalefactor must be > 0.0; otherwise it is set to 1.0. * (3) Specifying one of the three encoding types for @type forces * all images to be compressed with that type. Use 0 to have * the type determined for each image based on depth and whether * or not it has a colormap. */ l_int32 pixaConvertToPdf(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("pixaConvertToPdf"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); ret = pixaConvertToPdfData(pixa, res, scalefactor, type, quality, title, &data, &nbytes); if (ret) { FREE(data); return ERROR_INT("conversion to pdf failed", procName, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); if (ret) L_ERROR("pdf data not written to file\n", procName); return ret; } /*! * pixaConvertToPdfData() * * Input: pixa (containing images all at the same resolution) * res (input resolution of all images) * scalefactor (scaling factor applied to each image; > 0.0) * type (encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default) * quality (used for JPEG only; 0 for default (75)) * title ( pdf title) * &data ( output pdf data (of all images) * &nbytes ( size of output pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixaConvertToPdf(). */ l_int32 pixaConvertToPdfData(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_uint8 *imdata; l_int32 i, n, ret, scaledres, pagetype; size_t imbytes; L_BYTEA *ba; PIX *pixs, *pix; L_PTRA *pa_data; PROCNAME("pixaConvertToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (scalefactor <= 0.0) scalefactor = 1.0; if (type < 0 || type > L_FLATE_ENCODE) { L_WARNING("invalid compression type; using per-page default\n", procName); type = 0; } /* Generate all the encoded pdf strings */ n = pixaGetCount(pixa); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if ((pixs = pixaGetPix(pixa, i, L_CLONE)) == NULL) { L_ERROR("pix[%d] not retrieved\n", procName, i); continue; } if (scalefactor != 1.0) pix = pixScale(pixs, scalefactor, scalefactor); else pix = pixClone(pixs); pixDestroy(&pixs); scaledres = (l_int32)(res * scalefactor); if (type != 0) { pagetype = type; } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { L_ERROR("encoding type selection failed for pix[%d]\n", procName, i); pixDestroy(&pix); continue; } ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, 0, 0, scaledres, title, NULL, 0); pixDestroy(&pix); if (ret) { L_ERROR("pdf encoding failed for pix[%d]\n", procName, i); continue; } ba = l_byteaInitFromMem(imdata, imbytes); if (imdata) FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &n); if (n == 0) { L_ERROR("no pdf files made\n", procName); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate them */ ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ for (i = 0; i < n; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*---------------------------------------------------------------------* * Single page, multi-image converters * *---------------------------------------------------------------------*/ /*! * convertToPdf() * * Input: filein (input image file -- any format) * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for JPEG only; 0 for default (75)) * fileout (output pdf file; only required on last image on page) * x, y (location of lower-left corner of image, in pixels, * relative to the PostScript origin (0,0) at * the lower-left corner of the page) * res (override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input) * title ( pdf title; if null, taken from filein) * &lpd (ptr to lpd, which is created on the first invocation * and returned until last image is processed, at which * time it is destroyed) * position (in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE) * Return: 0 if OK, 1 on error * * Notes: * (1) To wrap only one image in pdf, input @plpd = NULL, and * the value of @position will be ignored: * convertToPdf(... type, quality, x, y, res, NULL, 0); * (2) To wrap multiple images on a single pdf page, this is called * once for each successive image. Do it this way: * L_PDF_DATA *lpd; * convertToPdf(... type, quality, x, y, res, &lpd, L_FIRST_IMAGE); * convertToPdf(... type, quality, x, y, res, &lpd, L_NEXT_IMAGE); * ... * convertToPdf(... type, quality, x, y, res, &lpd, L_LAST_IMAGE); * This will write the result to the value of @fileout specified * in the first call; succeeding values of @fileout are ignored. * On the last call: the pdf data bytes are computed and written * to @fileout, lpd is destroyed internally, and the returned * value of lpd is null. So the client has nothing to clean up. * (3) (a) Set @res == 0 to respect the resolution embedded in the * image file. If no resolution is embedded, it will be set * to the default value. * (b) Set @res to some other value to override the file resolution. * (4) (a) If the input @res and the resolution of the output device * are equal, the image will be "displayed" at the same size * as the original. * (b) If the input @res is 72, the output device will render * the image at 1 pt/pixel. * (c) Some possible choices for the default input pix resolution are: * 72 ppi Render pix on any output device at one pt/pixel * 96 ppi Windows default for generated display images * 300 ppi Typical default for scanned images. * We choose 300, which is sensible for rendering page images. * However, images come from a variety of sources, and * some are explicitly created for viewing on a display. */ l_int32 convertToPdf(const char *filein, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("convertToPdf"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!plpd || (position == L_LAST_IMAGE)) { if (!fileout) return ERROR_INT("fileout not defined", procName, 1); } if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (convertToPdfData(filein, type, quality, &data, &nbytes, x, y, res, title, plpd, position)) return ERROR_INT("pdf data not made", procName, 1); if (!plpd || (position == L_LAST_IMAGE)) { ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); if (ret) return ERROR_INT("pdf data not written to file", procName, 1); } return 0; } /*! * convertImageDataToPdf() * * Input: imdata (array of formatted image data; e.g., png, jpeg) * size (size of image data) * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for JPEG only; 0 for default (75)) * fileout (output pdf file; only required on last image on page) * x, y (location of lower-left corner of image, in pixels, * relative to the PostScript origin (0,0) at * the lower-left corner of the page) * res (override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input) * title ( pdf title) * &lpd (ptr to lpd, which is created on the first invocation * and returned until last image is processed, at which * time it is destroyed) * position (in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE) * Return: 0 if OK, 1 on error * * Notes: * (1) If @res == 0 and the input resolution field is 0, * this will use DEFAULT_INPUT_RES. * (2) See comments in convertToPdf(). */ l_int32 convertImageDataToPdf(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_int32 ret; PIX *pix; PROCNAME("convertImageDataToPdf"); if (!imdata) return ERROR_INT("image data not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (!plpd || (position == L_LAST_IMAGE)) { if (!fileout) return ERROR_INT("fileout not defined", procName, 1); } if ((pix = pixReadMem(imdata, size)) == NULL) return ERROR_INT("pix not read", procName, 1); ret = pixConvertToPdf(pix, type, quality, fileout, x, y, res, title, plpd, position); pixDestroy(&pix); return ret; } /*! * convertToPdfData() * * Input: filein (input image file -- any format) * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for JPEG only; 0 for default (75)) * &data ( pdf data in memory) * &nbytes ( number of bytes in pdf data) * x, y (location of lower-left corner of image, in pixels, * relative to the PostScript origin (0,0) at * the lower-left corner of the page) * res (override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input) * title ( pdf title; if null, use filein) * &lpd (ptr to lpd, which is created on the first invocation * and returned until last image is processed, at which * time it is destroyed) * position (in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE) * Return: 0 if OK, 1 on error * * Notes: * (1) If @res == 0 and the input resolution field is 0, * this will use DEFAULT_INPUT_RES. * (2) See comments in convertToPdf(). */ l_int32 convertToPdfData(const char *filein, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { PIX *pix; PROCNAME("convertToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if ((pix = pixRead(filein)) == NULL) return ERROR_INT("pix not made", procName, 1); pixConvertToPdfData(pix, type, quality, pdata, pnbytes, x, y, res, (title) ? title : filein, plpd, position); pixDestroy(&pix); return 0; } /*! * convertImageDataToPdfData() * * Input: imdata (array of formatted image data; e.g., png, jpeg) * size (size of image data) * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for JPEG only; 0 for default (75)) * &data ( pdf data in memory) * &nbytes ( number of bytes in pdf data) * x, y (location of lower-left corner of image, in pixels, * relative to the PostScript origin (0,0) at * the lower-left corner of the page) * res (override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input) * title ( pdf title) * &lpd (ptr to lpd, which is created on the first invocation * and returned until last image is processed, at which * time it is destroyed) * position (in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE) * Return: 0 if OK, 1 on error * * Notes: * (1) If @res == 0 and the input resolution field is 0, * this will use DEFAULT_INPUT_RES. * (2) See comments in convertToPdf(). */ l_int32 convertImageDataToPdfData(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_int32 ret; PIX *pix; PROCNAME("convertImageDataToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!imdata) return ERROR_INT("image data not defined", procName, 1); if (plpd) { /* part of multi-page invocation */ if (position == L_FIRST_IMAGE) *plpd = NULL; } if ((pix = pixReadMem(imdata, size)) == NULL) return ERROR_INT("pix not read", procName, 1); ret = pixConvertToPdfData(pix, type, quality, pdata, pnbytes, x, y, res, title, plpd, position); pixDestroy(&pix); return ret; } /*! * pixConvertToPdf() * * Input: pix * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for JPEG only; 0 for default (75)) * fileout (output pdf file; only required on last image on page) * x, y (location of lower-left corner of image, in pixels, * relative to the PostScript origin (0,0) at * the lower-left corner of the page) * res (override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input) * title ( pdf title) * &lpd (ptr to lpd, which is created on the first invocation * and returned until last image is processed) * position (in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE) * Return: 0 if OK, 1 on error * * Notes: * (1) If @res == 0 and the input resolution field is 0, * this will use DEFAULT_INPUT_RES. * (2) This only writes data to fileout if it is the last * image to be written on the page. * (3) See comments in convertToPdf(). */ l_int32 pixConvertToPdf(PIX *pix, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("pixConvertToPdf"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (!plpd || (position == L_LAST_IMAGE)) { if (!fileout) return ERROR_INT("fileout not defined", procName, 1); } if (pixConvertToPdfData(pix, type, quality, &data, &nbytes, x, y, res, title, plpd, position)) return ERROR_INT("pdf data not made", procName, 1); if (!plpd || (position == L_LAST_IMAGE)) { ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); if (ret) return ERROR_INT("pdf data not written to file", procName, 1); } return 0; } /*! * pixConvertToPdfData() * * Input: pix (all depths; cmap OK) * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for JPEG only; 0 for default (75)) * &data ( pdf array) * &nbytes ( number of bytes in pdf array) * x, y (location of lower-left corner of image, in pixels, * relative to the PostScript origin (0,0) at * the lower-left corner of the page) * res (override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input) * title ( pdf title) * &lpd (ptr to lpd, which is created on the first invocation * and returned until last image is processed) * position (in image sequence: L_FIRST_IMAGE, L_NEXT_IMAGE, * L_LAST_IMAGE) * Return: 0 if OK, 1 on error * * Notes: * (1) If @res == 0 and the input resolution field is 0, * this will use DEFAULT_INPUT_RES. * (2) This only writes @data if it is the last image to be * written on the page. * (3) See comments in convertToPdf(). */ l_int32 pixConvertToPdfData(PIX *pix, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { l_int32 pixres, w, h, ret; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid = NULL; L_PDF_DATA *lpd = NULL; PROCNAME("pixConvertToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); if (plpd) { /* part of multi-page invocation */ if (position == L_FIRST_IMAGE) *plpd = NULL; } /* Generate the compressed image data. It must NOT * be ascii85 encoded. */ pixGenerateCIData(pix, type, quality, 0, &cid); if (!cid) return ERROR_INT("cid not made", procName, 1); /* Get media box in pts. Guess the input image resolution * based on the input parameter @res, the resolution data in * the pix, and the size of the image. */ pixres = cid->res; w = cid->w; h = cid->h; if (res <= 0.0) { if (pixres > 0) res = pixres; else res = DEFAULT_INPUT_RES; } xpt = x * 72. / res; ypt = y * 72. / res; wpt = w * 72. / res; hpt = h * 72. / res; /* Set up lpd */ if (!plpd) { /* single image */ if ((lpd = pdfdataCreate(title)) == NULL) return ERROR_INT("lpd not made", procName, 1); } else if (position == L_FIRST_IMAGE) { /* first of multiple images */ if ((lpd = pdfdataCreate(title)) == NULL) return ERROR_INT("lpd not made", procName, 1); *plpd = lpd; } else { /* not the first of multiple images */ lpd = *plpd; } /* Add the data to the lpd */ ptraAdd(lpd->cida, cid); lpd->n++; ptaAddPt(lpd->xy, xpt, ypt); ptaAddPt(lpd->wh, wpt, hpt); /* If a single image or the last of multiple images, * generate the pdf and destroy the lpd */ if (!plpd || (position == L_LAST_IMAGE)) { ret = l_generatePdf(pdata, pnbytes, lpd); pdfdataDestroy(&lpd); if (plpd) *plpd = NULL; if (ret) return ERROR_INT("pdf output not made", procName, 1); } return 0; } /*! * pixWriteStreamPdf() * * Input: fp (stream opened for writing) * pix (all depths, cmap OK) * res (override the resolution of the input image, in ppi; * use 0 to respect the resolution embedded in the input) * title ( pdf title; taken from the first image * placed on a page; e.g., an input image filename) * Return: 0 if OK, 1 on error * * Notes: * (1) This is the simplest interface for writing a single image * with pdf encoding. It uses G4 encoding for 1 bpp, * JPEG encoding for 8 bpp (no cmap) and 32 bpp, and FLATE * encoding for everything else. */ l_int32 pixWriteStreamPdf(FILE *fp, PIX *pix, l_int32 res, const char *title) { l_uint8 *data; l_int32 ret, d, type; size_t nbytes; PIXCMAP *cmap; PROCNAME("pixWriteStreamPdf"); if (!fp) return ERROR_INT("stream not opened", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); d = pixGetDepth(pix); cmap = pixGetColormap(pix); if (d == 1) type = L_G4_ENCODE; else if (cmap || d == 2 || d == 4 || d == 16) type = L_FLATE_ENCODE; else /* d == 8 (no cmap) or d == 32 */ type = L_JPEG_ENCODE; if (pixConvertToPdfData(pix, type, 75, &data, &nbytes, 0, 0, res, title, NULL, 0)) return ERROR_INT("pdf data not made", procName, 1); ret = fwrite(data, 1, nbytes, fp); FREE(data); if (ret) return ERROR_INT("pdf data not written to stream", procName, 1); return 0; } /*---------------------------------------------------------------------* * Segmented multi-page, multi-image converter * *---------------------------------------------------------------------*/ /*! * convertSegmentedFilesToPdf() * * Input: directory name (containing images) * substr ( substring filter on filenames; can be NULL) * res (input resolution of all images) * type (compression type for non-image regions; the * image regions are always compressed with L_JPEG_ENCODE) * thresh (used for converting gray --> 1 bpp with L_G4_ENCODE) * boxaa ( of image regions) * quality (used for JPEG only; 0 for default (75)) * scalefactor (scaling factor applied to each image region) * title ( pdf title; if null, taken from the first * image filename) * fileout (pdf file of all images) * Return: 0 if OK, 1 on error * * Notes: * (1) If @substr is not NULL, only image filenames that contain * the substring can be used. If @substr == NULL, all files * in the directory are used. * (2) The files in the directory, after optional filtering by * the substring, are lexically sorted in increasing order * before concatenation. * (3) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without * colormap and many colors, or 32 bpp; FLATE for anything else. * (4) The boxaa, if it exists, contains one boxa of "image regions" * for each image file. The boxa must be aligned with the * sorted set of images. * (5) The scalefactor is applied to each image region. It is * typically < 1.0, to save bytes in the final pdf, because * the resolution is often not critical in non-text regions. * (6) If the non-image regions have pixel depth > 1 and the encoding * type is G4, they are automatically scaled up by 2x and * thresholded. Otherwise, no scaling is performed on them. * (7) Note that this function can be used to generate multipage * G4 compressed pdf from any input, by using @boxaa == NULL * and @type == L_G4_ENCODE. */ l_int32 convertSegmentedFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_int32 type, l_int32 thresh, BOXAA *baa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { char *fname; l_uint8 *imdata, *data; l_int32 i, npages, nboxa, nboxes, ret; size_t imbytes, databytes; BOXA *boxa; L_BYTEA *ba; L_PTRA *pa_data; SARRAY *sa; PROCNAME("convertSegmentedFilesToPdf"); if (!dirname) return ERROR_INT("dirname not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((sa = getNumberedPathnamesInDirectory(dirname, substr, 0, 0, 10000)) == NULL) return ERROR_INT("sa not made", procName, 1); npages = sarrayGetCount(sa); /* If necessary, extend the boxaa, which is page-aligned with * the image files, to be as large as the set of images. */ if (baa) { nboxa = boxaaGetCount(baa); if (nboxa < npages) { boxa = boxaCreate(1); boxaaExtendWithInit(baa, npages, boxa); boxaDestroy(&boxa); } } /* Generate and save all the encoded pdf strings */ pa_data = ptraCreate(npages); for (i = 0; i < npages; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if (!strcmp(fname, "")) continue; boxa = NULL; if (baa) { boxa = boxaaGetBoxa(baa, i, L_CLONE); nboxes = boxaGetCount(boxa); if (nboxes == 0) boxaDestroy(&boxa); } ret = convertToPdfDataSegmented(fname, res, type, thresh, boxa, quality, scalefactor, title, &imdata, &imbytes); boxaDestroy(&boxa); /* safe; in case nboxes > 0 */ if (ret) { L_ERROR("pdf encoding failed for %s\n", procName, fname); continue; } ba = l_byteaInitFromMem(imdata, imbytes); if (imdata) FREE(imdata); ptraAdd(pa_data, ba); } sarrayDestroy(&sa); ptraGetActualCount(pa_data, &npages); if (npages == 0) { L_ERROR("no pdf files made\n", procName); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate */ ret = ptraConcatenatePdfToData(pa_data, NULL, &data, &databytes); /* Clean up */ ptraGetActualCount(pa_data, &npages); /* recalculate in case it changes */ for (i = 0; i < npages; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); if (ret) { if (data) FREE(data); return ERROR_INT("pdf data not made", procName, 1); } ret = l_binaryWrite(fileout, "w", data, databytes); FREE(data); if (ret) L_ERROR("pdf data not written to file\n", procName); return ret; } /*! * convertNumberedMasksToBoxaa() * * Input: directory name (containing mask images) * substr ( substring filter on filenames; can be NULL) * numpre (number of characters in name before number) * numpost (number of characters in name after number, up * to a dot before an extension) * including an extension and the dot separator) * Return: boxaa of mask regions, or null on error * * Notes: * (1) This is conveniently used to generate the input boxaa * for convertSegmentedFilesToPdf(). It guarantees that the * boxa will be aligned with the page images, even if some * of the boxa are empty. */ BOXAA * convertNumberedMasksToBoxaa(const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost) { char *fname; l_int32 i, n; BOXA *boxa; BOXAA *baa; PIX *pix; SARRAY *sa; PROCNAME("convertNumberedMasksToBoxaa"); if (!dirname) return (BOXAA *)ERROR_PTR("dirname not defined", procName, NULL); if ((sa = getNumberedPathnamesInDirectory(dirname, substr, numpre, numpost, 10000)) == NULL) return (BOXAA *)ERROR_PTR("sa not made", procName, NULL); /* Generate and save all the encoded pdf strings */ n = sarrayGetCount(sa); baa = boxaaCreate(n); boxa = boxaCreate(1); boxaaInitFull(baa, boxa); boxaDestroy(&boxa); for (i = 0; i < n; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); if (!strcmp(fname, "")) continue; if ((pix = pixRead(fname)) == NULL) { L_WARNING("invalid image on page %d\n", procName, i); continue; } boxa = pixConnComp(pix, NULL, 8); boxaaReplaceBoxa(baa, i, boxa); pixDestroy(&pix); } sarrayDestroy(&sa); return baa; } /*---------------------------------------------------------------------* * Segmented single page, multi-image converters * *---------------------------------------------------------------------*/ /*! * convertToPdfSegmented() * * Input: filein (input image file -- any format) * res (input image resolution; typ. 300 ppi; use 0 for default) * type (compression type for non-image regions; the * image regions are always compressed with L_JPEG_ENCODE) * thresh (used for converting gray --> 1 bpp with L_G4_ENCODE) * boxa ( of image regions; can be null) * quality (used for jpeg image regions; 0 for default) * scalefactor (used for jpeg regions; must be <= 1.0) * title ( pdf title; typically taken from the * input file for the pix) * fileout (output pdf file) * Return: 0 if OK, 1 on error * * Notes: * (1) If there are no image regions, set @boxa == NULL; * @quality and @scalefactor are ignored. * (2) Typically, @scalefactor is < 1.0, because the image regions * can be rendered at a lower resolution (for better compression) * than the text regions. If @scalefactor == 0, we use 1.0. * If the input image is 1 bpp and scalefactor < 1.0, we * use scaleToGray() to downsample the image regions to gray * before compressing them. * (3) If the compression type for non-image regions is L_G4_ENCODE * and bpp > 1, the image is upscaled 2x and thresholded * to 1 bpp. That is the only situation where @thresh is used. * (4) The parameter @quality is only used for image regions. * If @type == L_JPEG_ENCODE, default jpeg quality (75) is * used for the non-image regions. * (5) Processing matrix for non-image regions. * * Input G4 JPEG FLATE * ----------|--------------------------------------------------- * 1 bpp | 1x, 1 bpp 1x flate, 1 bpp 1x, 1 bpp * | * cmap | 2x, 1 bpp 1x flate, cmap 1x, cmap * | * 2,4 bpp | 2x, 1 bpp 1x flate 1x, 2,4 bpp * no cmap | 2,4 bpp * | * 8,32 bpp | 2x, 1 bpp 1x (jpeg) 1x, 8,32 bpp * no cmap | 8,32 bpp * * Summary: * (a) if G4 is requested, G4 is used, with 2x upscaling * for all cases except 1 bpp. * (b) if JPEG is requested, use flate encoding for all cases * except 8 bpp without cmap and 32 bpp (rgb). * (c) if FLATE is requested, use flate with no transformation * of the raster data. * (6) Calling options/sequence for these functions: * file --> file (convertToPdfSegmented) * pix --> file (pixConvertToPdfSegmented) * pix --> data (pixConvertToPdfDataSegmented) * file --> data (convertToPdfDataSegmented) * pix --> data (pixConvertToPdfDataSegmented) */ l_int32 convertToPdfSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { l_int32 ret; PIX *pixs; PROCNAME("convertToPdfSegmented"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (boxa && scalefactor > 1.0) { L_WARNING("setting scalefactor to 1.0\n", procName); scalefactor = 1.0; } if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", procName, 1); ret = pixConvertToPdfSegmented(pixs, res, type, thresh, boxa, quality, scalefactor, (title) ? title : filein, fileout); pixDestroy(&pixs); return ret; } /*! * pixConvertToPdfSegmented() * * Input: pixs (any depth, cmap OK) * res (input image resolution; typ. 300 ppi; use 0 for default) * type (compression type for non-image regions; the * image regions are always compressed with L_JPEG_ENCODE) * thresh (used for converting gray --> 1 bpp with L_G4_ENCODE) * boxa ( of image regions; can be null) * quality (used for jpeg image regions; 0 for default) * scalefactor (used for jpeg regions; must be <= 1.0) * title ( pdf title; typically taken from the * input file for the pix) * fileout (output pdf file) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertToPdfSegmented() for details. */ l_int32 pixConvertToPdfSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("pixConvertToPdfSegmented"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (boxa && scalefactor > 1.0) { L_WARNING("setting scalefactor to 1.0\n", procName); scalefactor = 1.0; } ret = pixConvertToPdfDataSegmented(pixs, res, type, thresh, boxa, quality, scalefactor, title, &data, &nbytes); if (ret) return ERROR_INT("pdf generation failure", procName, 1); ret = l_binaryWrite(fileout, "w", data, nbytes); if (data) FREE(data); return ret; } /*! * convertToPdfDataSegmented() * * Input: filein (input image file -- any format) * res (input image resolution; typ. 300 ppi; use 0 for default) * type (compression type for non-image regions; the * image regions are always compressed with L_JPEG_ENCODE) * thresh (used for converting gray --> 1 bpp with L_G4_ENCODE) * boxa ( image regions; can be null) * quality (used for jpeg image regions; 0 for default) * scalefactor (used for jpeg regions; must be <= 1.0) * title ( pdf title; if null, uses filein) * &data ( pdf data in memory) * &nbytes ( number of bytes in pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) If there are no image regions, set @boxa == NULL; * @quality and @scalefactor are ignored. * (2) Typically, @scalefactor is < 1.0. The image regions are */ l_int32 convertToPdfDataSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_int32 ret; PIX *pixs; PROCNAME("convertToPdfDataSegmented"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (boxa && scalefactor > 1.0) { L_WARNING("setting scalefactor to 1.0\n", procName); scalefactor = 1.0; } if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("pixs not made", procName, 1); ret = pixConvertToPdfDataSegmented(pixs, res, type, thresh, boxa, quality, scalefactor, (title) ? title : filein, pdata, pnbytes); pixDestroy(&pixs); return ret; } /*! * pixConvertToPdfDataSegmented() * * Input: pixs (any depth, cmap OK) * res (input image resolution; typ. 300 ppi; use 0 for default) * type (compression type for non-image regions; the * image regions are always compressed with L_JPEG_ENCODE) * thresh (used for converting gray --> 1 bpp with L_G4_ENCODE) * boxa ( of image regions; can be null) * quality (used for jpeg image regions; 0 for default) * scalefactor (used for jpeg regions; must be <= 1.0) * title ( pdf title; typically taken from the * input file for the pix) * &data ( pdf data in memory) * &nbytes ( number of bytes in pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertToPdfSegmented() for details. */ l_int32 pixConvertToPdfDataSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_int32 i, nbox, seq, bx, by, bw, bh, upscale; l_float32 scale; BOX *box, *boxc, *box2; PIX *pix, *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6; PIXCMAP *cmap; L_PDF_DATA *lpd; PROCNAME("pixConvertToPdfDataSegmented"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (boxa && (scalefactor <= 0.0 || scalefactor > 1.0)) { L_WARNING("setting scalefactor to 1.0\n", procName); scalefactor = 1.0; } /* Adjust scalefactor so that the product with res gives an integer */ if (res <= 0) res = DEFAULT_INPUT_RES; scale = (l_float32)((l_int32)(scalefactor * res + 0.5)) / (l_float32)res; cmap = pixGetColormap(pixs); /* Simple case: single image to be encoded */ if (!boxa || boxaGetCount(boxa) == 0) { if (pixGetDepth(pixs) > 1 && type == L_G4_ENCODE) { if (cmap) pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixt1 = pixConvertTo8(pixs, FALSE); pixt2 = pixScaleGray2xLIThresh(pixt1, thresh); pixConvertToPdfData(pixt2, type, quality, pdata, pnbytes, 0, 0, 2 * res, title, NULL, 0); pixDestroy(&pixt1); pixDestroy(&pixt2); } else { pixConvertToPdfData(pixs, type, quality, pdata, pnbytes, 0, 0, res, title, NULL, 0); } return 0; } /* Multiple images to be encoded. If @type == L_G4_ENCODE, * jpeg encode a version of pixs that is blanked in the non-image * regions, and paint the scaled non-image part onto it through a mask. * Otherwise, we must put the non-image part down first and * then render all the image regions separately on top of it, * at their own resolution. */ pixt1 = pixSetBlackOrWhiteBoxa(pixs, boxa, L_SET_WHITE); /* non-image */ nbox = boxaGetCount(boxa); if (type == L_G4_ENCODE) { pixt2 = pixCreateTemplate(pixs); /* only image regions */ pixSetBlackOrWhite(pixt2, L_SET_WHITE); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); pix = pixClipRectangle(pixs, box, &boxc); boxGetGeometry(boxc, &bx, &by, &bw, &bh); pixRasterop(pixt2, bx, by, bw, bh, PIX_SRC, pix, 0, 0); pixDestroy(&pix); boxDestroy(&box); boxDestroy(&boxc); } pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pixt3) == 1) pixt4 = pixScaleToGray(pixt3, scale); else pixt4 = pixScale(pixt3, scale, scale); pixConvertToPdfData(pixt4, L_JPEG_ENCODE, quality, pdata, pnbytes, 0, 0, (l_int32)(scale * res), title, &lpd, L_FIRST_IMAGE); if (pixGetDepth(pixt1) == 1) { pixt5 = pixClone(pixt1); upscale = 1; } else { pixt6 = pixConvertTo8(pixt1, 0); pixt5 = pixScaleGray2xLIThresh(pixt6, thresh); pixDestroy(&pixt6); upscale = 2; } pixConvertToPdfData(pixt5, L_G4_ENCODE, quality, pdata, pnbytes, 0, 0, upscale * res, title, &lpd, L_LAST_IMAGE); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); pixDestroy(&pixt5); } else { /* Put the non-image part down first. This is the full size of the page, so we can use it to find the page height in pixels, which is required for determining the LL corner of the image relative to the LL corner of the page. */ pixConvertToPdfData(pixt1, type, quality, pdata, pnbytes, 0, 0, res, title, &lpd, L_FIRST_IMAGE); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); pixt2 = pixClipRectangle(pixs, box, &boxc); pixt3 = pixRemoveColormap(pixt2, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pixt3) == 1) pixt4 = pixScaleToGray(pixt3, scale); else pixt4 = pixScale(pixt3, scale, scale); box2 = boxTransform(boxc, 0, 0, scale, scale); boxGetGeometry(box2, &bx, &by, NULL, &bh); seq = (i == nbox - 1) ? L_LAST_IMAGE : L_NEXT_IMAGE; pixConvertToPdfData(pixt4, L_JPEG_ENCODE, quality, pdata, pnbytes, bx, by, (l_int32)(scale * res), title, &lpd, seq); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); boxDestroy(&box); boxDestroy(&boxc); boxDestroy(&box2); } } pixDestroy(&pixt1); return 0; } /*---------------------------------------------------------------------* * Helper functions for generating the output pdf string * *---------------------------------------------------------------------*/ /*! * l_generatePdf() * * Input: &data ( pdf array) * &nbytes ( number of bytes in pdf array) * lpd (all the required input image data) * Return: 0 if OK, 1 on error * * Notes: * (1) On error, no data is returned. * (2) The objects are: * 1: Catalog * 2: Info * 3: Pages * 4: Page * 5: Contents (rendering command) * 6 to 6+n-1: n XObjects * 6+n to 6+n+m-1: m colormaps */ static l_int32 l_generatePdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd) { PROCNAME("l_generatePdf"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!lpd) return ERROR_INT("lpd not defined", procName, 1); generateFixedStringsPdf(lpd); generateMediaboxPdf(lpd); generatePageStringPdf(lpd); generateContentStringPdf(lpd); generatePreXStringsPdf(lpd); generateColormapStringsPdf(lpd); generateTrailerPdf(lpd); return generateOutputDataPdf(pdata, pnbytes, lpd); } static void generateFixedStringsPdf(L_PDF_DATA *lpd) { char buf[L_SMALLBUF]; char *version, *datestr; SARRAY *sa; /* Accumulate data for the header and objects 1-3 */ lpd->id = stringNew("%PDF-1.5\n"); l_dnaAddNumber(lpd->objsize, strlen(lpd->id)); lpd->obj1 = stringNew("1 0 obj\n" "<<\n" "/Type /Catalog\n" "/Pages 3 0 R\n" ">>\n" "endobj\n"); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj1)); sa = sarrayCreate(0); sarrayAddString(sa, (char *)"2 0 obj\n" "<<\n", L_COPY); if (var_WRITE_DATE_AND_VERSION) { datestr = l_getFormattedDate(); snprintf(buf, sizeof(buf), "/CreationDate (D:%s)\n", datestr); sarrayAddString(sa, (char *)buf, L_COPY); FREE(datestr); version = getLeptonicaVersion(); snprintf(buf, sizeof(buf), "/Producer (leptonica: %s)\n", version); FREE(version); } else { snprintf(buf, sizeof(buf), "/Producer (leptonica)\n"); } sarrayAddString(sa, (char *)buf, L_COPY); if (lpd->title) { snprintf(buf, sizeof(buf), "/Title (%s)\n", lpd->title); sarrayAddString(sa, (char *)buf, L_COPY); } sarrayAddString(sa, (char *)">>\n" "endobj\n", L_COPY); lpd->obj2 = sarrayToString(sa, 0); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj2)); sarrayDestroy(&sa); lpd->obj3 = stringNew("3 0 obj\n" "<<\n" "/Type /Pages\n" "/Kids [ 4 0 R ]\n" "/Count 1\n" ">>\n"); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj3)); /* Do the post-datastream string */ lpd->poststream = stringNew("\n" "endstream\n" "endobj\n"); return; } static void generateMediaboxPdf(L_PDF_DATA *lpd) { l_int32 i; l_float32 xpt, ypt, wpt, hpt, maxx, maxy; /* First get the full extent of all the images. * This is the mediabox, in pts. */ maxx = maxy = 0; for (i = 0; i < lpd->n; i++) { ptaGetPt(lpd->xy, i, &xpt, &ypt); ptaGetPt(lpd->wh, i, &wpt, &hpt); maxx = L_MAX(maxx, xpt + wpt); maxy = L_MAX(maxy, ypt + hpt); } lpd->mediabox = boxCreate(0, 0, (l_int32)(maxx + 0.5), (l_int32)(maxy + 0.5)); /* ypt is in standard image coordinates: the location of * the UL image corner with respect to the UL media box corner. * Rewrite each ypt for PostScript coordinates: the location of * the LL image corner with respect to the LL media box corner. */ for (i = 0; i < lpd->n; i++) { ptaGetPt(lpd->xy, i, &xpt, &ypt); ptaGetPt(lpd->wh, i, &wpt, &hpt); ptaSetPt(lpd->xy, i, xpt, maxy - ypt - hpt); } return; } static l_int32 generatePageStringPdf(L_PDF_DATA *lpd) { char *buf; char *xstr; l_int32 bufsize, i, wpt, hpt; SARRAY *sa; PROCNAME("generatePageStringPdf"); /* Allocate 1000 bytes for the boilerplate text, and * 50 bytes for each reference to an image in the * ProcSet array. */ bufsize = 1000 + 50 * lpd->n; if ((buf = (char *)CALLOC(bufsize, sizeof(char))) == NULL) return ERROR_INT("calloc fail for buf", procName, 1); boxGetGeometry(lpd->mediabox, NULL, NULL, &wpt, &hpt); sa = sarrayCreate(lpd->n); for (i = 0; i < lpd->n; i++) { snprintf(buf, bufsize, "/Im%d %d 0 R ", i + 1, 6 + i); sarrayAddString(sa, buf, L_COPY); } if ((xstr = sarrayToString(sa, 0)) == NULL) return ERROR_INT("xstr not found", procName, 1); sarrayDestroy(&sa); snprintf(buf, bufsize, "4 0 obj\n" "<<\n" "/Type /Page\n" "/Parent 3 0 R\n" "/MediaBox [%d %d %d %d]\n" "/Contents 5 0 R\n" "/Resources\n" "<<\n" "/XObject << %s >>\n" "/ProcSet [ /ImageB /ImageI /ImageC ]\n" ">>\n" ">>\n" "endobj\n", 0, 0, wpt, hpt, xstr); lpd->obj4 = stringNew(buf); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj4)); sarrayDestroy(&sa); FREE(buf); FREE(xstr); return 0; } static l_int32 generateContentStringPdf(L_PDF_DATA *lpd) { char *buf; char *cstr; l_int32 i, bufsize; l_float32 xpt, ypt, wpt, hpt; SARRAY *sa; PROCNAME("generateContentStringPdf"); bufsize = 1000 + 200 * lpd->n; if ((buf = (char *)CALLOC(bufsize, sizeof(char))) == NULL) return ERROR_INT("calloc fail for buf", procName, 1); sa = sarrayCreate(lpd->n); for (i = 0; i < lpd->n; i++) { ptaGetPt(lpd->xy, i, &xpt, &ypt); ptaGetPt(lpd->wh, i, &wpt, &hpt); snprintf(buf, bufsize, "q %.4f %.4f %.4f %.4f %.4f %.4f cm /Im%d Do Q\n", wpt, 0.0, 0.0, hpt, xpt, ypt, i + 1); sarrayAddString(sa, buf, L_COPY); } if ((cstr = sarrayToString(sa, 0)) == NULL) return ERROR_INT("cstr not found", procName, 1); sarrayDestroy(&sa); snprintf(buf, bufsize, "5 0 obj\n" "<< /Length %d >>\n" "stream\n" "%s" "endstream\n" "endobj\n", (l_int32)strlen(cstr), cstr); lpd->obj5 = stringNew(buf); l_dnaAddNumber(lpd->objsize, strlen(lpd->obj5)); sarrayDestroy(&sa); FREE(buf); FREE(cstr); return 0; } static l_int32 generatePreXStringsPdf(L_PDF_DATA *lpd) { char buff[256]; char buf[L_BIGBUF]; char *cstr, *bstr, *fstr, *xstr; l_int32 i, cmindex; L_COMP_DATA *cid; SARRAY *sa; PROCNAME("generatePreXStringsPdf"); sa = lpd->saprex; cmindex = 6 + lpd->n; /* starting value */ for (i = 0; i < lpd->n; i++) { if ((cid = pdfdataGetCid(lpd, i)) == NULL) return ERROR_INT("cid not found", procName, 1); if (cid->type == L_G4_ENCODE) { if (var_WRITE_G4_IMAGE_MASK) { cstr = stringNew("/ImageMask true\n" "/ColorSpace /DeviceGray"); } else { cstr = stringNew("/ColorSpace /DeviceGray"); } bstr = stringNew("/BitsPerComponent 1\n" "/Interpolate true"); snprintf(buff, sizeof(buff), "/Filter /CCITTFaxDecode\n" "/DecodeParms\n" "<<\n" "/K -1\n" "/Columns %d\n" ">>", cid->w); fstr = stringNew(buff); } else if (cid->type == L_JPEG_ENCODE) { if (cid->spp == 1) cstr = stringNew("/ColorSpace /DeviceGray"); else if (cid->spp == 3) cstr = stringNew("/ColorSpace /DeviceRGB"); else L_ERROR("spp!= 1 && spp != 3\n", procName); bstr = stringNew("/BitsPerComponent 8"); fstr = stringNew("/Filter /DCTDecode"); } else if (cid->type == L_JP2K_ENCODE) { if (cid->spp == 1) cstr = stringNew("/ColorSpace /DeviceGray"); else if (cid->spp == 3) cstr = stringNew("/ColorSpace /DeviceRGB"); else L_ERROR("spp!= 1 && spp != 3\n", procName); bstr = stringNew("/BitsPerComponent 8"); fstr = stringNew("/Filter /JPXDecode"); } else { /* type == L_FLATE_ENCODE */ if (cid->ncolors > 0) { /* cmapped */ snprintf(buff, sizeof(buff), "/ColorSpace %d 0 R", cmindex++); cstr = stringNew(buff); } else { if (cid->spp == 1 && cid->bps == 1) cstr = stringNew("/ColorSpace /DeviceGray\n" "/Decode [1 0]"); else if (cid->spp == 1) /* 8 bpp */ cstr = stringNew("/ColorSpace /DeviceGray"); else if (cid->spp == 3) cstr = stringNew("/ColorSpace /DeviceRGB"); else L_ERROR("unknown colorspace\n", procName); } snprintf(buff, sizeof(buff), "/BitsPerComponent %d", cid->bps); bstr = stringNew(buff); fstr = stringNew("/Filter /FlateDecode"); } snprintf(buf, sizeof(buf), "%d 0 obj\n" "<<\n" "/Length %lu\n" "/Subtype /Image\n" "%s\n" /* colorspace */ "/Width %d\n" "/Height %d\n" "%s\n" /* bits/component */ "%s\n" /* filter */ ">>\n" "stream\n", 6 + i, (unsigned long)cid->nbytescomp, cstr, cid->w, cid->h, bstr, fstr); xstr = stringNew(buf); sarrayAddString(sa, xstr, L_INSERT); l_dnaAddNumber(lpd->objsize, strlen(xstr) + cid->nbytescomp + strlen(lpd->poststream)); FREE(cstr); FREE(bstr); FREE(fstr); } return 0; } static l_int32 generateColormapStringsPdf(L_PDF_DATA *lpd) { char buf[L_BIGBUF]; char *cmstr; l_int32 i, cmindex, ncmap; L_COMP_DATA *cid; SARRAY *sa; PROCNAME("generateColormapStringsPdf"); /* In our canonical format, we have 5 objects, followed * by n XObjects, followed by m colormaps, so the index of * the first colormap object is 6 + n. */ sa = lpd->sacmap; cmindex = 6 + lpd->n; /* starting value */ ncmap = 0; for (i = 0; i < lpd->n; i++) { if ((cid = pdfdataGetCid(lpd, i)) == NULL) return ERROR_INT("cid not found", procName, 1); if (cid->ncolors == 0) continue; ncmap++; snprintf(buf, sizeof(buf), "%d 0 obj\n" "[ /Indexed /DeviceRGB\n" "%d\n" "%s\n" "]\n" "endobj\n", cmindex, cid->ncolors - 1, cid->cmapdatahex); cmindex++; cmstr = stringNew(buf); l_dnaAddNumber(lpd->objsize, strlen(cmstr)); sarrayAddString(sa, cmstr, L_INSERT); } lpd->ncmap = ncmap; return 0; } static void generateTrailerPdf(L_PDF_DATA *lpd) { l_int32 i, n, size, linestart; L_DNA *daloc, *dasize; /* Let nobj be the number of numbered objects. These numbered * objects are indexed by their pdf number in arrays naloc[] * and nasize[]. The 0th object is the 9 byte header. Then * the number of objects in nasize, which includes the header, * is n = nobj + 1. The array naloc[] has n + 1 elements, * because it includes as the last element the starting * location of xref. The indexing of these objects, their * starting locations and sizes are: * * Object number Starting location Size * ------------- ----------------- -------------- * 0 daloc[0] = 0 dasize[0] = 9 * 1 daloc[1] = 9 dasize[1] = 49 * n daloc[n] dasize[n] * xref daloc[n+1] * * We first generate daloc. */ dasize = lpd->objsize; daloc = lpd->objloc; linestart = 0; l_dnaAddNumber(daloc, linestart); /* header */ n = l_dnaGetCount(dasize); for (i = 0; i < n; i++) { l_dnaGetIValue(dasize, i, &size); linestart += size; l_dnaAddNumber(daloc, linestart); } l_dnaGetIValue(daloc, n, &lpd->xrefloc); /* save it */ /* Now make the actual trailer string */ lpd->trailer = makeTrailerStringPdf(daloc); } static char * makeTrailerStringPdf(L_DNA *daloc) { char *outstr; char buf[L_BIGBUF]; l_int32 i, n, linestart, xrefloc; SARRAY *sa; PROCNAME("makeTrailerStringPdf"); if (!daloc) return (char *)ERROR_PTR("daloc not defined", procName, NULL); n = l_dnaGetCount(daloc) - 1; /* numbered objects + 1 (yes, +1) */ sa = sarrayCreate(0); snprintf(buf, sizeof(buf), "xref\n" "0 %d\n" "0000000000 65535 f \n", n); sarrayAddString(sa, (char *)buf, L_COPY); for (i = 1; i < n; i++) { l_dnaGetIValue(daloc, i, &linestart); snprintf(buf, sizeof(buf), "%010d 00000 n \n", linestart); sarrayAddString(sa, (char *)buf, L_COPY); } l_dnaGetIValue(daloc, n, &xrefloc); snprintf(buf, sizeof(buf), "trailer\n" "<<\n" "/Size %d\n" "/Root 1 0 R\n" "/Info 2 0 R\n" ">>\n" "startxref\n" "%d\n" "%%%%EOF\n", n, xrefloc); sarrayAddString(sa, (char *)buf, L_COPY); outstr = sarrayToString(sa, 0); sarrayDestroy(&sa); return outstr; } /*! * generateOutputDataPdf() * * Input: &data ( pdf data array) * &nbytes ( size of pdf data array) * lpd (input data used to make pdf) * Return: 0 if OK, 1 on error * * Notes: * (1) Only called from l_generatePdf(). On error, no data is returned. */ static l_int32 generateOutputDataPdf(l_uint8 **pdata, size_t *pnbytes, L_PDF_DATA *lpd) { char *str; l_uint8 *data; l_int32 nimages, i, len; l_int32 *sizes, *locs; size_t nbytes; L_COMP_DATA *cid; PROCNAME("generateOutputDataPdf"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); nbytes = lpd->xrefloc + strlen(lpd->trailer); *pnbytes = nbytes; if ((data = (l_uint8 *)CALLOC(nbytes, sizeof(l_uint8))) == NULL) return ERROR_INT("calloc fail for data", procName, 1); *pdata = data; sizes = l_dnaGetIArray(lpd->objsize); locs = l_dnaGetIArray(lpd->objloc); memcpy((char *)data, lpd->id, sizes[0]); memcpy((char *)(data + locs[1]), lpd->obj1, sizes[1]); memcpy((char *)(data + locs[2]), lpd->obj2, sizes[2]); memcpy((char *)(data + locs[3]), lpd->obj3, sizes[3]); memcpy((char *)(data + locs[4]), lpd->obj4, sizes[4]); memcpy((char *)(data + locs[5]), lpd->obj5, sizes[5]); /* Each image has 3 parts: variable preamble, the compressed * data stream, and the fixed poststream. */ nimages = lpd->n; for (i = 0; i < nimages; i++) { if ((cid = pdfdataGetCid(lpd, i)) == NULL) /* this should not happen */ return ERROR_INT("cid not found", procName, 1); str = sarrayGetString(lpd->saprex, i, L_NOCOPY); len = strlen(str); memcpy((char *)(data + locs[6 + i]), str, len); memcpy((char *)(data + locs[6 + i] + len), (char *)cid->datacomp, cid->nbytescomp); memcpy((char *)(data + locs[6 + i] + len + cid->nbytescomp), lpd->poststream, strlen(lpd->poststream)); } /* Each colormap is simply a stored string */ for (i = 0; i < lpd->ncmap; i++) { str = sarrayGetString(lpd->sacmap, i, L_NOCOPY); memcpy((char *)(data + locs[6 + nimages + i]), str, strlen(str)); } /* And finally the trailer */ memcpy((char *)(data + lpd->xrefloc), lpd->trailer, strlen(lpd->trailer)); FREE(sizes); FREE(locs); return 0; } /*---------------------------------------------------------------------* * Multi-page concatenation * *---------------------------------------------------------------------*/ /*! * concatenatePdf() * * Input: directory name (containing single-page pdf files) * substr ( substring filter on filenames; can be NULL) * fileout (concatenated pdf file) * Return: 0 if OK, 1 on error * * Notes: * (1) This only works with leptonica-formatted single-page pdf files. * (2) If @substr is not NULL, only filenames that contain * the substring can be returned. If @substr == NULL, * none of the filenames are filtered out. * (3) The files in the directory, after optional filtering by * the substring, are lexically sorted in increasing order * before concatenation. */ l_int32 concatenatePdf(const char *dirname, const char *substr, const char *fileout) { l_int32 ret; SARRAY *sa; PROCNAME("concatenatePdf"); if (!dirname) return ERROR_INT("dirname not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", procName, 1); ret = saConcatenatePdf(sa, fileout); sarrayDestroy(&sa); return ret; } /*! * saConcatenatePdf() * * Input: sarray (of pathnames for single-page pdf files) * fileout (concatenated pdf file) * Return: 0 if OK, 1 on error * * Notes: * (1) This only works with leptonica-formatted single-page pdf files. */ l_int32 saConcatenatePdf(SARRAY *sa, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("saConcatenatePdf"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); ret = saConcatenatePdfToData(sa, &data, &nbytes); if (ret) return ERROR_INT("pdf data not made", procName, 1); ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); return ret; } /*! * ptraConcatenatePdf() * * Input: ptra (array of pdf strings, each for a single-page pdf file) * fileout (concatenated pdf file) * Return: 0 if OK, 1 on error * * Notes: * (1) This only works with leptonica-formatted single-page pdf files. */ l_int32 ptraConcatenatePdf(L_PTRA *pa, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("ptraConcatenatePdf"); if (!pa) return ERROR_INT("pa not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); ret = ptraConcatenatePdfToData(pa, NULL, &data, &nbytes); if (ret) return ERROR_INT("pdf data not made", procName, 1); ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); return ret; } /*! * concatenatePdfToData() * * Input: directory name (containing single-page pdf files) * substr ( substring filter on filenames; can be NULL) * &data ( concatenated pdf data in memory) * &nbytes ( number of bytes in pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) This only works with leptonica-formatted single-page pdf files. * (2) If @substr is not NULL, only filenames that contain * the substring can be returned. If @substr == NULL, * none of the filenames are filtered out. * (3) The files in the directory, after optional filtering by * the substring, are lexically sorted in increasing order * before concatenation. */ l_int32 concatenatePdfToData(const char *dirname, const char *substr, l_uint8 **pdata, size_t *pnbytes) { l_int32 ret; SARRAY *sa; PROCNAME("concatenatePdfToData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!dirname) return ERROR_INT("dirname not defined", procName, 1); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return ERROR_INT("sa not made", procName, 1); ret = saConcatenatePdfToData(sa, pdata, pnbytes); sarrayDestroy(&sa); return ret; } /*! * saConcatenatePdfToData() * * Input: sarray (of pathnames for single-page pdf files) * &data ( concatenated pdf data in memory) * &nbytes ( number of bytes in pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) This only works with leptonica-formatted single-page pdf files. */ l_int32 saConcatenatePdfToData(SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { char *fname; l_int32 i, npages, ret; L_BYTEA *bas; L_PTRA *pa_data; /* input pdf data for each page */ PROCNAME("saConcatenatePdfToData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!sa) return ERROR_INT("sa not defined", procName, 1); /* Read the pdf files into memory */ if ((npages = sarrayGetCount(sa)) == 0) return ERROR_INT("no filenames found", procName, 1); pa_data = ptraCreate(npages); for (i = 0; i < npages; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); bas = l_byteaInitFromFile(fname); ptraAdd(pa_data, bas); } ret = ptraConcatenatePdfToData(pa_data, sa, pdata, pnbytes); /* Cleanup: some pages could have been removed */ ptraGetActualCount(pa_data, &npages); for (i = 0; i < npages; i++) { bas = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&bas); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*! * ptraConcatenatePdfToData() * * Input: ptra (array of pdf strings, each for a single-page pdf file) * sarray ( of pathnames for input pdf files) * &data ( concatenated pdf data in memory) * &nbytes ( number of bytes in pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) This only works with leptonica-formatted single-page pdf files. * pdf files generated by other programs will have unpredictable * (and usually bad) results. The requirements for each pdf file: * (a) The Catalog and Info objects are the first two. * (b) Object 3 is Pages * (c) Object 4 is Page * (d) The remaining objects are Contents, XObjects, and ColorSpace * (2) We remove trailers from each page, and append the full trailer * for all pages at the end. * (3) For all but the first file, remove the ID and the first 3 * objects (catalog, info, pages), so that each subsequent * file has only objects of these classes: * Page, Contents, XObject, ColorSpace (Indexed RGB). * For those objects, we substitute these refs to objects * in the local file: * Page: Parent(object 3), Contents, XObject(typically multiple) * XObject: [ColorSpace if indexed] * The Pages object on the first page (object 3) has a Kids array * of references to all the Page objects, with a Count equal * to the number of pages. Each Page object refers back to * this parent. */ l_int32 ptraConcatenatePdfToData(L_PTRA *pa_data, SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { char *fname, *str_pages, *str_trailer; l_uint8 *pdfdata, *data; l_int32 i, j, index, nobj, npages; l_int32 *sizes, *locs; size_t size; L_BYTEA *bas, *bad, *bat1, *bat2; L_DNA *da_locs, *da_sizes, *da_outlocs, *da; L_DNAA *daa_locs; /* object locations on each page */ NUMA *na_objs, *napage; NUMAA *naa_objs; /* object mapping numbers to new values */ PROCNAME("ptraConcatenatePdfToData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!pa_data) return ERROR_INT("pa_data not defined", procName, 1); /* Parse the files and find the object locations. * Remove file data that cannot be parsed. */ ptraGetActualCount(pa_data, &npages); daa_locs = l_dnaaCreate(npages); for (i = 0; i < npages; i++) { bas = (L_BYTEA *)ptraGetPtrToItem(pa_data, i); if (parseTrailerPdf(bas, &da_locs) != 0) { bas = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&bas); if (sa) { fname = sarrayGetString(sa, i, L_NOCOPY); L_ERROR("can't parse file %s; skipping\n", procName, fname); } else { L_ERROR("can't parse file %d; skipping\n", procName, i); } } else { l_dnaaAddDna(daa_locs, da_locs, L_INSERT); } } /* Recompute npages in case some of the files were not pdf */ ptraCompactArray(pa_data); ptraGetActualCount(pa_data, &npages); if (npages == 0) { l_dnaaDestroy(&daa_locs); return ERROR_INT("no parsable pdf files found", procName, 1); } /* Find the mapping from initial to final object numbers */ naa_objs = numaaCreate(npages); /* stores final object numbers */ napage = numaCreate(npages); /* stores "Page" object numbers */ index = 0; for (i = 0; i < npages; i++) { da = l_dnaaGetDna(daa_locs, i, L_CLONE); nobj = l_dnaGetCount(da); if (i == 0) { numaAddNumber(napage, 4); /* object 4 on first page */ na_objs = numaMakeSequence(0.0, 1.0, nobj - 1); index = nobj - 1; } else { /* skip the first 3 objects in each file */ numaAddNumber(napage, index); /* Page object is first we add */ na_objs = numaMakeConstant(0.0, nobj - 1); numaReplaceNumber(na_objs, 3, 3); /* refers to parent of all */ for (j = 4; j < nobj - 1; j++) numaSetValue(na_objs, j, index++); } numaaAddNuma(naa_objs, na_objs, L_INSERT); l_dnaDestroy(&da); } /* Make the Pages object (#3) */ str_pages = generatePagesObjStringPdf(napage); /* Build the output */ bad = l_byteaCreate(5000); da_outlocs = l_dnaCreate(0); /* locations of all output objects */ for (i = 0; i < npages; i++) { bas = (L_BYTEA *)ptraGetPtrToItem(pa_data, i); pdfdata = l_byteaGetData(bas, &size); da_locs = l_dnaaGetDna(daa_locs, i, L_CLONE); /* locs on this page */ na_objs = numaaGetNuma(naa_objs, i, L_CLONE); /* obj # on this page */ nobj = l_dnaGetCount(da_locs) - 1; da_sizes = l_dnaMakeDelta(da_locs); /* object sizes on this page */ sizes = l_dnaGetIArray(da_sizes); locs = l_dnaGetIArray(da_locs); if (i == 0) { l_byteaAppendData(bad, pdfdata, sizes[0]); l_byteaAppendData(bad, pdfdata + locs[1], sizes[1]); l_byteaAppendData(bad, pdfdata + locs[2], sizes[2]); l_byteaAppendString(bad, str_pages); for (j = 0; j < 4; j++) l_dnaAddNumber(da_outlocs, locs[j]); } for (j = 4; j < nobj; j++) { l_dnaAddNumber(da_outlocs, l_byteaGetSize(bad)); bat1 = l_byteaInitFromMem(pdfdata + locs[j], sizes[j]); bat2 = substituteObjectNumbers(bat1, na_objs); data = l_byteaGetData(bat2, &size); l_byteaAppendData(bad, data, size); l_byteaDestroy(&bat1); l_byteaDestroy(&bat2); } if (i == npages - 1) /* last one */ l_dnaAddNumber(da_outlocs, l_byteaGetSize(bad)); FREE(sizes); FREE(locs); l_dnaDestroy(&da_locs); numaDestroy(&na_objs); l_dnaDestroy(&da_sizes); } /* Add the trailer */ str_trailer = makeTrailerStringPdf(da_outlocs); l_byteaAppendString(bad, str_trailer); /* Transfer the output data */ *pdata = l_byteaCopyData(bad, pnbytes); l_byteaDestroy(&bad); #if DEBUG_MULTIPAGE fprintf(stderr, "******** object mapper **********"); numaaWriteStream(stderr, naa_objs); fprintf(stderr, "******** Page object numbers ***********"); numaWriteStream(stderr, napage); fprintf(stderr, "******** Pages object ***********\n"); fprintf(stderr, "%s\n", str_pages); #endif /* DEBUG_MULTIPAGE */ numaDestroy(&napage); numaaDestroy(&naa_objs); l_dnaDestroy(&da_outlocs); l_dnaaDestroy(&daa_locs); FREE(str_pages); FREE(str_trailer); return 0; } /*---------------------------------------------------------------------* * Helper functions for generating the multi-page pdf output * *---------------------------------------------------------------------*/ /*! * parseTrailerPdf() * * Input: bas (lba of a pdf file) * da ( byte locations of the beginning of each object) * Return: 0 if OK, 1 on error */ static l_int32 parseTrailerPdf(L_BYTEA *bas, L_DNA **pda) { char *str; l_uint8 nl = '\n'; l_uint8 *data; l_int32 i, j, start, startloc, xrefloc, found, loc, nobj, objno, trailer_ok; size_t size; L_DNA *da, *daobj, *daxref; SARRAY *sa; PROCNAME("parseTrailerPdf"); if (!pda) return ERROR_INT("&da not defined", procName, 1); *pda = NULL; if (!bas) return ERROR_INT("bas not defined", procName, 1); data = l_byteaGetData(bas, &size); if (strncmp((char *)data, "%PDF-1.", 7) != 0) return ERROR_INT("PDF header signature not found", procName, 1); /* Search for "startxref" starting 50 bytes from the EOF */ start = 0; if (size > 50) start = size - 50; arrayFindSequence(data + start, size - start, (l_uint8 *)"startxref\n", 10, &loc, &found); if (!found) return ERROR_INT("startxref not found!", procName, 1); if (sscanf((char *)(data + start + loc + 10), "%d\n", &xrefloc) != 1) return ERROR_INT("xrefloc not found!", procName, 1); if (xrefloc < 0 || xrefloc >= size) return ERROR_INT("invalid xrefloc!", procName, 1); sa = sarrayCreateLinesFromString((char *)(data + xrefloc), 0); str = sarrayGetString(sa, 1, L_NOCOPY); if ((sscanf(str, "0 %d", &nobj)) != 1) return ERROR_INT("nobj not found", procName, 1); /* Get starting locations. The numa index is the * object number. loc[0] is the ID; loc[nobj + 1] is xrefloc. */ da = l_dnaCreate(nobj + 1); *pda = da; for (i = 0; i < nobj; i++) { str = sarrayGetString(sa, i + 2, L_NOCOPY); sscanf(str, "%d", &startloc); l_dnaAddNumber(da, startloc); } l_dnaAddNumber(da, xrefloc); #if DEBUG_MULTIPAGE fprintf(stderr, "************** Trailer string ************\n"); fprintf(stderr, "xrefloc = %d", xrefloc); sarrayWriteStream(stderr, sa); fprintf(stderr, "************** Object locations ************"); l_dnaWriteStream(stderr, da); #endif /* DEBUG_MULTIPAGE */ sarrayDestroy(&sa); /* Verify correct parsing */ trailer_ok = TRUE; for (i = 1; i < nobj; i++) { l_dnaGetIValue(da, i, &startloc); if ((sscanf((char *)(data + startloc), "%d 0 obj", &objno)) != 1) { L_ERROR("bad trailer for object %d\n", procName, i); trailer_ok = FALSE; break; } } /* If the trailer is broken, reconstruct the correct obj locations */ if (!trailer_ok) { L_INFO("rebuilding pdf trailer\n", procName); l_dnaEmpty(da); l_dnaAddNumber(da, 0); l_byteaFindEachSequence(bas, (l_uint8 *)" 0 obj\n", 7, &daobj); nobj = l_dnaGetCount(daobj); for (i = 0; i < nobj; i++) { l_dnaGetIValue(daobj, i, &loc); for (j = loc - 1; j > 0; j--) { if (data[j] == nl) break; } l_dnaAddNumber(da, j + 1); } l_byteaFindEachSequence(bas, (l_uint8 *)"xref", 4, &daxref); l_dnaGetIValue(daxref, 0, &loc); l_dnaAddNumber(da, loc); l_dnaDestroy(&daobj); l_dnaDestroy(&daxref); } return 0; } static char * generatePagesObjStringPdf(NUMA *napage) { char *str; char *buf; l_int32 i, n, index, bufsize; SARRAY *sa; PROCNAME("generatePagesObjStringPdf"); if (!napage) return (char *)ERROR_PTR("napage not defined", procName, NULL); n = numaGetCount(napage); bufsize = 100 + 16 * n; /* large enough to hold the output string */ buf = (char *)CALLOC(bufsize, sizeof(char)); sa = sarrayCreate(n); for (i = 0; i < n; i++) { numaGetIValue(napage, i, &index); snprintf(buf, bufsize, " %d 0 R ", index); sarrayAddString(sa, buf, L_COPY); } str = sarrayToString(sa, 0); snprintf(buf, bufsize - 1, "3 0 obj\n" "<<\n" "/Type /Pages\n" "/Kids [%s]\n" "/Count %d\n" ">>\n", str, n); sarrayDestroy(&sa); FREE(str); return buf; } /*! * substituteObjectNumbers() * * Input: bas (lba of a pdf object) * na_objs (object number mapping array) * Return: bad (lba of rewritten pdf for the object) * * Notes: * (1) Interpret the first set of bytes as the object number, * map to the new number, and write it out. * (2) Find all occurrences of this 4-byte sequence: " 0 R" * (3) Find the location and value of the integer preceeding this, * and map it to the new value. * (4) Rewrite the object with new object numbers. */ static L_BYTEA * substituteObjectNumbers(L_BYTEA *bas, NUMA *na_objs) { l_uint8 space = ' '; l_uint8 *datas; l_uint8 buf[32]; /* only needs to hold one integer in ascii format */ l_int32 start, nrepl, i, j, objin, objout; l_int32 *objs, *matches; size_t size; L_BYTEA *bad; L_DNA *da_match; datas = l_byteaGetData(bas, &size); bad = l_byteaCreate(100); objs = numaGetIArray(na_objs); /* object number mapper */ /* Substitute the object number on the first line */ sscanf((char *)datas, "%d", &objin); objout = objs[objin]; snprintf((char *)buf, 32, "%d", objout); l_byteaAppendString(bad, (char *)buf); /* Find the set of matching locations for object references */ arrayFindSequence(datas, size, &space, 1, &start, NULL); da_match = arrayFindEachSequence(datas, size, (l_uint8 *)" 0 R", 4); if (!da_match) { l_byteaAppendData(bad, datas + start, size - start); FREE(objs); return bad; } /* Substitute all the object reference numbers */ nrepl = l_dnaGetCount(da_match); matches = l_dnaGetIArray(da_match); for (i = 0; i < nrepl; i++) { /* Find the first space before the object number */ for (j = matches[i] - 1; j > 0; j--) { if (datas[j] == space) break; } /* Copy bytes from 'start' up to the object number */ l_byteaAppendData(bad, datas + start, j - start + 1); sscanf((char *)(datas + j + 1), "%d", &objin); objout = objs[objin]; snprintf((char *)buf, 32, "%d", objout); l_byteaAppendString(bad, (char *)buf); start = matches[i]; } l_byteaAppendData(bad, datas + start, size - start); FREE(objs); FREE(matches); l_dnaDestroy(&da_match); return bad; } /*---------------------------------------------------------------------* * Create/destroy/access pdf data * *---------------------------------------------------------------------*/ static L_PDF_DATA * pdfdataCreate(const char *title) { L_PDF_DATA *lpd; lpd = (L_PDF_DATA *)CALLOC(1, sizeof(L_PDF_DATA)); if (title) lpd->title = stringNew(title); lpd->cida = ptraCreate(10); lpd->xy = ptaCreate(10); lpd->wh = ptaCreate(10); lpd->saprex = sarrayCreate(10); lpd->sacmap = sarrayCreate(10); lpd->objsize = l_dnaCreate(20); lpd->objloc = l_dnaCreate(20); return lpd; } static void pdfdataDestroy(L_PDF_DATA **plpd) { l_int32 i; L_COMP_DATA *cid; L_PDF_DATA *lpd; PROCNAME("pdfdataDestroy"); if (plpd== NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((lpd = *plpd) == NULL) return; if (lpd->title) FREE(lpd->title); for (i = 0; i < lpd->n; i++) { cid = (L_COMP_DATA *)ptraRemove(lpd->cida, i, L_NO_COMPACTION); l_compdataDestroy(&cid); } ptraDestroy(&lpd->cida, 0, 0); if (lpd->id) FREE(lpd->id); if (lpd->obj1) FREE(lpd->obj1); if (lpd->obj2) FREE(lpd->obj2); if (lpd->obj3) FREE(lpd->obj3); if (lpd->obj4) FREE(lpd->obj4); if (lpd->obj5) FREE(lpd->obj5); if (lpd->poststream) FREE(lpd->poststream); if (lpd->trailer) FREE(lpd->trailer); if (lpd->xy) ptaDestroy(&lpd->xy); if (lpd->wh) ptaDestroy(&lpd->wh); if (lpd->mediabox) boxDestroy(&lpd->mediabox); if (lpd->saprex) sarrayDestroy(&lpd->saprex); if (lpd->sacmap) sarrayDestroy(&lpd->sacmap); if (lpd->objsize) l_dnaDestroy(&lpd->objsize); if (lpd->objloc) l_dnaDestroy(&lpd->objloc); FREE(lpd); *plpd = NULL; return; } static L_COMP_DATA * pdfdataGetCid(L_PDF_DATA *lpd, l_int32 index) { PROCNAME("pdfdataGetCid"); if (!lpd) return (L_COMP_DATA *)ERROR_PTR("lpd not defined", procName, NULL); if (index < 0 || index >= lpd->n) return (L_COMP_DATA *)ERROR_PTR("invalid image index", procName, NULL); return (L_COMP_DATA *)ptraGetPtrToItem(lpd->cida, index); } /*---------------------------------------------------------------------* * Set flags for special modes * *---------------------------------------------------------------------*/ /*! * l_pdfSetG4ImageMask() * * Input: flag (1 for writing g4 data as fg only through a mask; * 0 for writing fg and bg) * Return: void * * Notes: * (1) The default is for writing only the fg (through the mask). * That way when you write a 1 bpp image, the bg is transparent, * so any previously written image remains visible behind it. */ void l_pdfSetG4ImageMask(l_int32 flag) { var_WRITE_G4_IMAGE_MASK = flag; } /*! * l_pdfSetDateAndVersion() * * Input: flag (1 for writing date/time and leptonica version; * 0 for omitting this from the metadata) * Return: void * * Notes: * (1) The default is for writing this data. For regression tests * that compare output against golden files, it is useful to omit. */ void l_pdfSetDateAndVersion(l_int32 flag) { var_WRITE_DATE_AND_VERSION = flag; } /* --------------------------------------------*/ #endif /* USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.70/src/dwacomb.2.c0000644000175000017500000002607011707052573014230 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * * PIX *pixMorphDwa_2() * PIX *pixFMorphopGen_2() */ #include #include "allheaders.h" PIX *pixMorphDwa_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); PIX *pixFMorphopGen_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); l_int32 fmorphopgen_low_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 76; static char SEL_NAMES[][80] = { "sel_comb_4h", "sel_comb_4v", "sel_comb_5h", "sel_comb_5v", "sel_comb_6h", "sel_comb_6v", "sel_comb_7h", "sel_comb_7v", "sel_comb_8h", "sel_comb_8v", "sel_comb_9h", "sel_comb_9v", "sel_comb_10h", "sel_comb_10v", "sel_comb_12h", "sel_comb_12v", "sel_comb_14h", "sel_comb_14v", "sel_comb_15h", "sel_comb_15v", "sel_comb_16h", "sel_comb_16v", "sel_comb_18h", "sel_comb_18v", "sel_comb_20h", "sel_comb_20v", "sel_comb_21h", "sel_comb_21v", "sel_comb_22h", "sel_comb_22v", "sel_comb_24h", "sel_comb_24v", "sel_comb_25h", "sel_comb_25v", "sel_comb_27h", "sel_comb_27v", "sel_comb_28h", "sel_comb_28v", "sel_comb_30h", "sel_comb_30v", "sel_comb_32h", "sel_comb_32v", "sel_comb_33h", "sel_comb_33v", "sel_comb_35h", "sel_comb_35v", "sel_comb_36h", "sel_comb_36v", "sel_comb_39h", "sel_comb_39v", "sel_comb_40h", "sel_comb_40v", "sel_comb_42h", "sel_comb_42v", "sel_comb_44h", "sel_comb_44v", "sel_comb_45h", "sel_comb_45v", "sel_comb_48h", "sel_comb_48v", "sel_comb_49h", "sel_comb_49v", "sel_comb_50h", "sel_comb_50v", "sel_comb_52h", "sel_comb_52v", "sel_comb_54h", "sel_comb_54v", "sel_comb_55h", "sel_comb_55v", "sel_comb_56h", "sel_comb_56v", "sel_comb_60h", "sel_comb_60v", "sel_comb_63h", "sel_comb_63v"}; /*! * pixMorphDwa_2() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This simply adds a border, calls the appropriate * pixFMorphopGen_*(), and removes the border. * See the notes for that function. * (2) The size of the border depends on the operation * and the boundary conditions. */ PIX * pixMorphDwa_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixMorphDwa_2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); pixt2 = pixFMorphopGen_2(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * pixFMorphopGen_2() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This is a dwa operation, and the Sels must be limited in * size to not more than 31 pixels about the origin. * (2) A border of appropriate size (32 pixels, or 64 pixels * for safe closing with asymmetric b.c.) must be added before * this function is called. * (3) This handles all required setting of the border pixels * before erosion and dilation. * (4) The closing operation is safe; no pixels can be removed * near the boundary. */ PIX * pixFMorphopGen_2(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; PROCNAME("pixFMorphopGen_2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); fmorphopgen_low_2(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); fmorphopgen_low_2(datat, w, h, wpls, datas, wpls, index+1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_2(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); fmorphopgen_low_2(datad, w, h, wpld, datat, wpls, index+1); } pixDestroy(&pixt); } return pixd; } leptonica-1.70/src/bmpiostub.c0000644000175000017500000000507311707052573014460 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bmpiostub.c * * Stubs for bmpio.c functions */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_BMPIO /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamBmp(FILE *fp) { return (PIX * )ERROR_PTR("function not present", "pixReadStreamBmp", NULL); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamBmp(FILE *fp, PIX *pix) { return ERROR_INT("function not present", "pixWriteStreamBmp", 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemBmp(const l_uint8 *cdata, size_t size) { return (PIX *)ERROR_PTR("function not present", "pixReadMemBmp", NULL); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemBmp(l_uint8 **pdata, size_t *psize, PIX *pix) { return ERROR_INT("function not present", "pixWriteMemBmp", 1); } /* --------------------------------------------*/ #endif /* !USE_BMPIO */ /* --------------------------------------------*/ leptonica-1.70/src/pnmio.c0000644000175000017500000006243312244227236013576 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pnmio.c * * Stream interface * PIX *pixReadStreamPnm() * l_int32 readHeaderPnm() * l_int32 freadHeaderPnm() * l_int32 pixWriteStreamPnm() * l_int32 pixWriteStreamAsciiPnm() * * Read/write to memory * PIX *pixReadMemPnm() * l_int32 sreadHeaderPnm() * l_int32 pixWriteMemPnm() * * Local helpers * static l_int32 pnmReadNextAsciiValue(); * static l_int32 pnmSkipCommentLines(); * * These are here by popular demand, with the help of Mattias * Kregert (mattias@kregert.se), who provided the first implementation. * * The pnm formats are exceedingly simple, because they have * no compression and no colormaps. They support images that * are 1 bpp; 2, 4, 8 and 16 bpp grayscale; and rgb. * * The original pnm formats ("ascii") are included for completeness, * but their use is deprecated for all but tiny iconic images. * They are extremely wasteful of memory; for example, the P1 binary * ascii format is 16 times as big as the packed uncompressed * format, because 2 characters are used to represent every bit * (pixel) in the image. Reading is slow because we check for extra * white space and EOL at every sample value. * * The packed pnm formats ("raw") give file sizes similar to * bmp files, which are uncompressed packed. However, bmp * are more flexible, because they can support colormaps. * * We don't differentiate between the different types ("pbm", * "pgm", "ppm") at the interface level, because this is really a * "distinction without a difference." You read a file, you get * the appropriate Pix. You write a file from a Pix, you get the * appropriate type of file. If there is a colormap on the Pix, * and the Pix is more than 1 bpp, you get either an 8 bpp pgm * or a 24 bpp RGB pnm, depending on whether the colormap colors * are gray or rgb, respectively. * * This follows the general policy that the I/O routines don't * make decisions about the content of the image -- you do that * with image processing before you write it out to file. * The I/O routines just try to make the closest connection * possible between the file and the Pix in memory. * * On systems like windows without fmemopen() and open_memstream(), * we write data to a temp file and read it back for operations * between pix and compressed-data, such as pixReadMemPnm() and * pixWriteMemPnm(). */ #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PNMIO /* defined in environ.h */ /* --------------------------------------------*/ static l_int32 pnmReadNextAsciiValue(FILE *fp, l_int32 *pval); static l_int32 pnmSkipCommentLines(FILE *fp); /* a sanity check on the size read from file */ static const l_int32 MAX_PNM_WIDTH = 100000; static const l_int32 MAX_PNM_HEIGHT = 100000; /*--------------------------------------------------------------------* * Stream interface * *--------------------------------------------------------------------*/ /*! * pixReadStreamPnm() * * Input: stream opened for read * Return: pix, or null on error */ PIX * pixReadStreamPnm(FILE *fp) { l_uint8 val8, rval8, gval8, bval8; l_uint16 val16; l_int32 w, h, d, bpl, wpl, i, j, type; l_int32 val, rval, gval, bval; l_uint32 rgbval; l_uint32 *line, *data; PIX *pix; PROCNAME("pixReadStreamPnm"); if (!fp) return (PIX *)ERROR_PTR("fp not defined", procName, NULL); if (freadHeaderPnm(fp, &w, &h, &d, &type, NULL, NULL)) return (PIX *)ERROR_PTR( "header read failed", procName, NULL); if ((pix = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR( "pix not made", procName, NULL); data = pixGetData(pix); wpl = pixGetWpl(pix); /* Old "ascii" format */ if (type <= 3) { for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { if (type == 1 || type == 2) { if (pnmReadNextAsciiValue(fp, &val)) return (PIX *)ERROR_PTR( "read abend", procName, pix); pixSetPixel(pix, j, i, val); } else { /* type == 3 */ if (pnmReadNextAsciiValue(fp, &rval)) return (PIX *)ERROR_PTR( "read abend", procName, pix); if (pnmReadNextAsciiValue(fp, &gval)) return (PIX *)ERROR_PTR( "read abend", procName, pix); if (pnmReadNextAsciiValue(fp, &bval)) return (PIX *)ERROR_PTR( "read abend", procName, pix); composeRGBPixel(rval, gval, bval, &rgbval); pixSetPixel(pix, j, i, rgbval); } } } return pix; } /* "raw" format for 1 bpp */ if (type == 4) { bpl = (d * w + 7) / 8; for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < bpl; j++) { if (fread(&val8, 1, 1, fp) != 1) return (PIX *)ERROR_PTR( "read error in 4", procName, pix); SET_DATA_BYTE(line, j, val8); } } return pix; } /* "raw" format for grayscale */ if (type == 5) { bpl = (d * w + 7) / 8; for (i = 0; i < h; i++) { line = data + i * wpl; if (d != 16) { for (j = 0; j < w; j++) { if (fread(&val8, 1, 1, fp) != 1) return (PIX *)ERROR_PTR( "error in 5", procName, pix); if (d == 2) SET_DATA_DIBIT(line, j, val8); else if (d == 4) SET_DATA_QBIT(line, j, val8); else /* d == 8 */ SET_DATA_BYTE(line, j, val8); } } else { /* d == 16 */ for (j = 0; j < w; j++) { if (fread(&val16, 2, 1, fp) != 1) return (PIX *)ERROR_PTR( "16 bpp error", procName, pix); SET_DATA_TWO_BYTES(line, j, val16); } } } return pix; } /* "raw" format, type == 6; rgb */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { if (fread(&rval8, 1, 1, fp) != 1) return (PIX *)ERROR_PTR( "read error type 6", procName, pix); if (fread(&gval8, 1, 1, fp) != 1) return (PIX *)ERROR_PTR( "read error type 6", procName, pix); if (fread(&bval8, 1, 1, fp) != 1) return (PIX *)ERROR_PTR( "read error type 6", procName, pix); composeRGBPixel(rval8, gval8, bval8, &rgbval); line[j] = rgbval; } } return pix; } /*! * readHeaderPnm() * * Input: filename * &w () * &h () * &d () * &type ( pnm type) * &bps (, bits/sample) * &spp (, samples/pixel) * Return: 0 if OK, 1 on error */ l_int32 readHeaderPnm(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { l_int32 ret; FILE *fp; PROCNAME("readHeaderPnm"); if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (ptype) *ptype = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); ret = freadHeaderPnm(fp, pw, ph, pd, ptype, pbps, pspp); fclose(fp); return ret; } /*! * freadHeaderPnm() * * Input: stream opened for read * &w () * &h () * &d () * &type ( pnm type) * &bps (, bits/sample) * &spp (, samples/pixel) * Return: 0 if OK, 1 on error */ l_int32 freadHeaderPnm(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { l_int32 w, h, d, type; l_int32 maxval; PROCNAME("freadHeaderPnm"); if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (ptype) *ptype = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (!fp) return ERROR_INT("fp not defined", procName, 1); if (fscanf(fp, "P%d\n", &type) != 1) return ERROR_INT("invalid read for type", procName, 1); if (type < 1 || type > 6) return ERROR_INT("invalid pnm file", procName, 1); if (pnmSkipCommentLines(fp)) return ERROR_INT("no data in file", procName, 1); if (fscanf(fp, "%d %d\n", &w, &h) != 2) return ERROR_INT("invalid read for w,h", procName, 1); if (w <= 0 || h <= 0 || w > MAX_PNM_WIDTH || h > MAX_PNM_HEIGHT) return ERROR_INT("invalid size", procName, 1); /* Get depth of pix */ if (type == 1 || type == 4) { d = 1; } else if (type == 2 || type == 5) { if (fscanf(fp, "%d\n", &maxval) != 1) return ERROR_INT("invalid read for maxval (2,5)", procName, 1); if (maxval == 3) { d = 2; } else if (maxval == 15) { d = 4; } else if (maxval == 255) { d = 8; } else if (maxval == 0xffff) { d = 16; } else { fprintf(stderr, "maxval = %d\n", maxval); return ERROR_INT("invalid maxval", procName, 1); } } else { /* type == 3 || type == 6; this is rgb */ if (fscanf(fp, "%d\n", &maxval) != 1) return ERROR_INT("invalid read for maxval (3,6)", procName, 1); if (maxval != 255) L_WARNING("unexpected maxval = %d\n", procName, maxval); d = 32; } if (pw) *pw = w; if (ph) *ph = h; if (pd) *pd = d; if (ptype) *ptype = type; if (pbps) *pbps = (d == 32) ? 8 : d; if (pspp) *pspp = (d == 32) ? 3 : 1; return 0; } /*! * pixWriteStreamPnm() * * Input: stream opened for write * pix * Return: 0 if OK; 1 on error * * Notes: * (1) This writes "raw" packed format only: * 1 bpp --> pbm (P4) * 2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm (P5) * 2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm (P6) * (2) 24 bpp rgb are not supported in leptonica, but this will * write them out as a packed array of bytes (3 to a pixel). */ l_int32 pixWriteStreamPnm(FILE *fp, PIX *pix) { l_uint8 val8; l_uint8 pel[4]; l_uint16 val16; l_int32 h, w, d, ds, i, j, wpls, bpl, filebpl, writeerror, maxval; l_uint32 *pword, *datas, *lines; PIX *pixs; PROCNAME("pixWriteStreamPnm"); if (!fp) return ERROR_INT("fp not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 24 && d != 32) return ERROR_INT("d not in {1,2,4,8,16,24,32}", procName, 1); /* If a colormap exists, remove and convert to grayscale or rgb */ if (pixGetColormap(pix) != NULL) pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); else pixs = pixClone(pix); ds = pixGetDepth(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); writeerror = 0; if (ds == 1) { /* binary */ fprintf(fp, "P4\n# Raw PBM file written by leptonica " "(www.leptonica.com)\n%d %d\n", w, h); bpl = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < bpl; j++) { val8 = GET_DATA_BYTE(lines, j); fwrite(&val8, 1, 1, fp); } } } else if (ds == 2 || ds == 4 || ds == 8 || ds == 16) { /* grayscale */ maxval = (1 << ds) - 1; fprintf(fp, "P5\n# Raw PGM file written by leptonica " "(www.leptonica.com)\n%d %d\n%d\n", w, h, maxval); if (ds != 16) { for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { if (ds == 2) val8 = GET_DATA_DIBIT(lines, j); else if (ds == 4) val8 = GET_DATA_QBIT(lines, j); else /* ds == 8 */ val8 = GET_DATA_BYTE(lines, j); fwrite(&val8, 1, 1, fp); } } } else { /* ds == 16 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val16 = GET_DATA_TWO_BYTES(lines, j); fwrite(&val16, 2, 1, fp); } } } } else { /* rgb color */ fprintf(fp, "P6\n# Raw PPM file written by leptonica " "(www.leptonica.com)\n%d %d\n255\n", w, h); if (d == 24) { /* packed, 3 bytes to a pixel */ filebpl = 3 * w; for (i = 0; i < h; i++) { /* write out each raster line */ lines = datas + i * wpls; if (fwrite(lines, 1, filebpl, fp) != filebpl) writeerror = 1; } } else { /* 32 bpp rgb */ for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < wpls; j++) { pword = lines + j; pel[0] = GET_DATA_BYTE(pword, COLOR_RED); pel[1] = GET_DATA_BYTE(pword, COLOR_GREEN); pel[2] = GET_DATA_BYTE(pword, COLOR_BLUE); if (fwrite(&pel, 1, 3, fp) != 3) writeerror = 1; } } } } pixDestroy(&pixs); if (writeerror) return ERROR_INT("image write fail", procName, 1); return 0; } /*! * pixWriteStreamAsciiPnm() * * Input: stream opened for write * pix * Return: 0 if OK; 1 on error * * Writes "ascii" format only: * 1 bpp --> pbm (P1) * 2, 4, 8, 16 bpp, no colormap or grayscale colormap --> pgm (P2) * 2, 4, 8 bpp with color-valued colormap, or rgb --> rgb ppm (P3) */ l_int32 pixWriteStreamAsciiPnm(FILE *fp, PIX *pix) { char buffer[256]; l_uint8 cval[3]; l_int32 h, w, d, ds, i, j, k, maxval, count; l_uint32 val; PIX *pixs; PROCNAME("pixWriteStreamAsciiPnm"); if (!fp) return ERROR_INT("fp not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return ERROR_INT("d not in {1,2,4,8,16,32}", procName, 1); /* If a colormap exists, remove and convert to grayscale or rgb */ if (pixGetColormap(pix) != NULL) pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); else pixs = pixClone(pix); ds = pixGetDepth(pixs); if (ds == 1) { /* binary */ fprintf(fp, "P1\n# Ascii PBM file written by leptonica " "(www.leptonica.com)\n%d %d\n", w, h); count = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); if (val == 0) fputc('0', fp); else /* val == 1 */ fputc('1', fp); fputc(' ', fp); count += 2; if (count >= 70) fputc('\n', fp); } } } else if (ds == 2 || ds == 4 || ds == 8 || ds == 16) { /* grayscale */ maxval = (1 << ds) - 1; fprintf(fp, "P2\n# Ascii PGM file written by leptonica " "(www.leptonica.com)\n%d %d\n%d\n", w, h, maxval); count = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); if (ds == 2) { sprintf(buffer, "%1d ", val); fwrite(buffer, 1, 2, fp); count += 2; } else if (ds == 4) { sprintf(buffer, "%2d ", val); fwrite(buffer, 1, 3, fp); count += 3; } else if (ds == 8) { sprintf(buffer, "%3d ", val); fwrite(buffer, 1, 4, fp); count += 4; } else { /* ds == 16 */ sprintf(buffer, "%5d ", val); fwrite(buffer, 1, 6, fp); count += 6; } if (count >= 60) { fputc('\n', fp); count = 0; } } } } else { /* rgb color */ fprintf(fp, "P3\n# Ascii PPM file written by leptonica " "(www.leptonica.com)\n%d %d\n255\n", w, h); count = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixs, j, i, &val); cval[0] = GET_DATA_BYTE(&val, COLOR_RED); cval[1] = GET_DATA_BYTE(&val, COLOR_GREEN); cval[2] = GET_DATA_BYTE(&val, COLOR_BLUE); for (k = 0; k < 3; k++) { sprintf(buffer, "%3d ", cval[k]); fwrite(buffer, 1, 4, fp); count += 4; if (count >= 60) { fputc('\n', fp); count = 0; } } } } } pixDestroy(&pixs); return 0; } /*---------------------------------------------------------------------* * Read/write to memory * *---------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ #if HAVE_FMEMOPEN extern FILE *open_memstream(char **data, size_t *size); extern FILE *fmemopen(void *data, size_t size, const char *mode); #endif /* HAVE_FMEMOPEN */ /*! * pixReadMemPnm() * * Input: cdata (const; pnm-encoded) * size (of data) * Return: pix, or null on error * * Notes: * (1) The @size byte of @data must be a null character. */ PIX * pixReadMemPnm(const l_uint8 *cdata, size_t size) { FILE *fp; PIX *pix; PROCNAME("pixReadMemPnm"); if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); #if HAVE_FMEMOPEN if ((fp = fmemopen((l_uint8 *)cdata, size, "r")) == NULL) return (PIX *)ERROR_PTR("stream not opened", procName, NULL); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); fwrite(cdata, 1, size, fp); rewind(fp); #endif /* HAVE_FMEMOPEN */ pix = pixReadStreamPnm(fp); fclose(fp); if (!pix) L_ERROR("pix not read\n", procName); return pix; } /*! * sreadHeaderPnm() * * Input: cdata (const; pnm-encoded) * size (of data) * &w () * &h () * &d () * &type ( pnm type) * &bps (, bits/sample) * &spp (, samples/pixel) * Return: 0 if OK, 1 on error */ l_int32 sreadHeaderPnm(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { l_int32 ret; FILE *fp; PROCNAME("sreadHeaderPnm"); if (!cdata) return ERROR_INT("cdata not defined", procName, 1); #if HAVE_FMEMOPEN if ((fp = fmemopen((l_uint8 *)cdata, size, "r")) == NULL) return ERROR_INT("stream not opened", procName, 1); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); fwrite(cdata, 1, size, fp); rewind(fp); #endif /* HAVE_FMEMOPEN */ ret = freadHeaderPnm(fp, pw, ph, pd, ptype, pbps, pspp); fclose(fp); if (ret) return ERROR_INT("header data read failed", procName, 1); return 0; } /*! * pixWriteMemPnm() * * Input: &data ( data of tiff compressed image) * &size ( size of returned data) * pix * Return: 0 if OK, 1 on error * * Notes: * (1) See pixWriteStreamPnm() for usage. This version writes to * memory instead of to a file stream. */ l_int32 pixWriteMemPnm(l_uint8 **pdata, size_t *psize, PIX *pix) { l_int32 ret; FILE *fp; PROCNAME("pixWriteMemPnm"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); if (!psize) return ERROR_INT("&size not defined", procName, 1 ); if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", procName, 1); ret = pixWriteStreamPnm(fp, pix); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); ret = pixWriteStreamPnm(fp, pix); rewind(fp); *pdata = l_binaryReadStream(fp, psize); #endif /* HAVE_FMEMOPEN */ fclose(fp); return ret; } /*--------------------------------------------------------------------* * Static helpers * *--------------------------------------------------------------------*/ /*! * pnmReadNextAsciiValue() * * Return: 0 if OK, 1 on error or EOF. * * Notes: * (1) This reads the next sample value in ascii from the the file. */ static l_int32 pnmReadNextAsciiValue(FILE *fp, l_int32 *pval) { l_int32 c, ignore; PROCNAME("pnmReadNextAsciiValue"); if (!fp) return ERROR_INT("stream not open", procName, 1); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0; do { /* skip whitespace */ if ((c = fgetc(fp)) == EOF) return 1; } while (c == ' ' || c == '\t' || c == '\n' || c == '\r'); fseek(fp, -1L, SEEK_CUR); /* back up one byte */ ignore = fscanf(fp, "%d", pval); return 0; } /*! * pnmSkipCommentLines() * * Return: 0 if OK, 1 on error or EOF * * Notes: * (1) Comment lines begin with '#' * (2) Usage: caller should check return value for EOF */ static l_int32 pnmSkipCommentLines(FILE *fp) { l_int32 c; PROCNAME("pnmSkipCommentLines"); if (!fp) return ERROR_INT("stream not open", procName, 1); if ((c = fgetc(fp)) == EOF) return 1; if (c == '#') { do { /* each line starting with '#' */ do { /* this entire line */ if ((c = fgetc(fp)) == EOF) return 1; } while (c != '\n'); if ((c = fgetc(fp)) == EOF) return 1; } while (c == '#'); } /* Back up one byte */ fseek(fp, -1L, SEEK_CUR); return 0; } /* --------------------------------------------*/ #endif /* USE_PNMIO */ /* --------------------------------------------*/ leptonica-1.70/src/rotateshear.c0000644000175000017500000004544412246303602014772 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotateshear.c * * Shear rotation about arbitrary point using 2 and 3 shears * * PIX *pixRotateShear() * PIX *pixRotate2Shear() * PIX *pixRotate3Shear() * * Shear rotation in-place about arbitrary point using 3 shears * l_int32 pixRotateShearIP() * * Shear rotation around the image center * PIX *pixRotateShearCenter() (2 or 3 shears) * l_int32 pixRotateShearCenterIP() (3 shears) * * Rotation is measured in radians; clockwise rotations are positive. * * Rotation by shear works on images of any depth, * including 8 bpp color paletted images and 32 bpp * rgb images. It works by translating each src pixel * value to the appropriate pixel in the rotated dest. * For 8 bpp grayscale images, it is about 10-15x faster * than rotation by area-mapping. * * This speed and flexibility comes at the following cost, * relative to area-mapped rotation: * * - Jaggies are created on edges of straight lines * * - For large angles, where you must use 3 shears, * there is some extra clipping from the shears. * * For small angles, typically less than 0.05 radians, * rotation can be done with 2 orthogonal shears. * Two such continuous shears (as opposed to the discrete * shears on a pixel lattice that we have here) give * a rotated image that has a distortion in the lengths * of the two rotated and still-perpendicular axes. The * length/width ratio changes by a fraction * * 0.5 * (angle)**2 * * For an angle of 0.05 radians, this is about 1 part in * a thousand. This distortion is absent when you use * 3 continuous shears with the correct angles (see below). * * Of course, the image is on a discrete pixel lattice. * Rotation by shear gives an approximation to a continuous * rotation, leaving pixel jaggies at sharp boundaries. * For very small rotations, rotating from a corner gives * better sensitivity than rotating from the image center. * Here's why. Define the shear "center" to be the line such * that the image is sheared in opposite directions on * each side of and parallel to the line. For small * rotations there is a "dead space" on each side of the * shear center of width equal to half the shear angle, * in radians. Thus, when the image is sheared about the center, * the dead space width equals the shear angle, but when * the image is sheared from a corner, the dead space * width is only half the shear angle. * * All horizontal and vertical shears are implemented by * rasterop. The in-place rotation uses special in-place * shears that copy rows sideways or columns vertically * without buffering, and then rewrite old pixels that are * no longer covered by sheared pixels. For that rewriting, * you have the choice of using white or black pixels. * (Note that this may give undesirable results for colormapped * images, where the white and black values are arbitrary * indexes into the colormap, and may not even exist.) * * Rotation by shear is fast and depth-independent. However, it * does not work well for large rotation angles. In fact, for * rotation angles greater than about 7 degrees, more pixels are * lost at the edges than when using pixRotationBySampling(), which * only loses pixels because they are rotated out of the image. * For larger rotations, use pixRotationBySampling() or, for * more accuracy when d > 1 bpp, pixRotateAM(). * * For small angles, when comparing the quality of rotation by * sampling and by shear, you can see that rotation by sampling * is slightly more accurate. However, the difference in * accuracy of rotation by sampling when compared to 3-shear and * (for angles less than 2 degrees, when compared to 2-shear) is * less than 1 pixel at any point. For very small angles, rotation by * sampling is much slower than rotation by shear. The speed difference * depends on the pixel depth and the rotation angle. Rotation * by shear is very fast for small angles and for small depth (esp. 1 bpp). * Rotation by sampling speed is independent of angle and relatively * more efficient for 8 and 32 bpp images. Here are some timings * for the ratio of rotation times: (time for sampling)/ (time for shear) * * depth (bpp) ratio (2 deg) ratio (10 deg) * ----------------------------------------------------- * 1 25 6 * 8 5 2.6 * 32 1.6 1.0 * * In summary: * * For d == 1 and small angles, use rotation by shear. By default * this will use 2-shear rotations, because 3-shears cause more * visible artifacts in straight lines and, for small angles, the * distortion in asperity ratio is small. * * For d > 1, shear is faster than sampling, which is faster than * area mapping. However, area mapping gives the best results. * These results are used in selecting the rotation methods in * pixRotateShear(). * * There has been some work on what is called a "quasishear * rotation" ("The Quasi-Shear Rotation, Eric Andres, * DGCI 1996, pp. 307-314). I believe they use a 3-shear * approximation to the continuous rotation, exactly as * we do here. The approximation is due to being on * a square pixel lattice. They also use integers to specify * the rotation angle and center offset, but that makes * little sense on a machine where you have a few GFLOPS * and only a few hundred floating point operations to do (!) * They also allow subpixel specification of the center of * rotation, which I haven't bothered with, and claim that * better results are possible if each of the 4 quadrants is * handled separately. * * But the bottom line is that you are going to see shear lines when * you rotate 1 bpp images. Although the 3-shear rotation is * mathematically exact in the limit of infinitesimal pixels, artifacts * will be evident in real images. One might imagine using dithering * to break up the horizontal and vertical shear lines, but this * is hard with block shears, where you need to dither on the block * boundaries. Dithering (by accumulation of 'error') with sampling * makes more sense, but I haven't tried to do this. There is only * so much you can do with 1 bpp images! */ #include #include #include "allheaders.h" static const l_float32 MIN_ANGLE_TO_ROTATE = 0.001; /* radians; ~0.06 deg */ static const l_float32 MAX_2_SHEAR_ANGLE = 0.06; /* radians; ~3 deg */ static const l_float32 LIMIT_SHEAR_ANGLE = 0.35; /* radians; ~20 deg */ /*------------------------------------------------------------------* * Rotations about an arbitrary point * *------------------------------------------------------------------*/ /*! * pixRotateShear() * * Input: pixs * xcen (x value for which there is no horizontal shear) * ycen (y value for which there is no vertical shear) * angle (radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error. * * Notes: * (1) This rotates an image about the given point, using * either 2 or 3 shears. * (2) A positive angle gives a clockwise rotation. * (3) This brings in 'incolor' pixels from outside the image. * (4) For rotation angles larger than about 0.35 radians, we issue * a warning because you should probably be using another method * (either sampling or area mapping) */ PIX * pixRotateShear(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { PROCNAME("pixRotateShear"); if (!pixs) return (PIX *)(PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); if (L_ABS(angle) <= MAX_2_SHEAR_ANGLE) return pixRotate2Shear(pixs, xcen, ycen, angle, incolor); if (L_ABS(angle) > LIMIT_SHEAR_ANGLE) L_WARNING("%6.2f radians; large angle for shear rotation\n", procName, L_ABS(angle)); return pixRotate3Shear(pixs, xcen, ycen, angle, incolor); } /*! * pixRotate2Shear() * * Input: pixs * xcen, ycen (center of rotation) * angle (radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error. * * Notes: * (1) This rotates the image about the given point, using the 2-shear * method. It should only be used for angles smaller than * MAX_2_SHEAR_ANGLE. For larger angles, a warning is issued. * (2) A positive angle gives a clockwise rotation. * (3) 2-shear rotation by a specified angle is equivalent * to the sequential transformations * x' = x + tan(angle) * (y - ycen) for x-shear * y' = y + tan(angle) * (x - xcen) for y-shear * (4) Computation of tan(angle) is performed within the shear operation. * (5) This brings in 'incolor' pixels from outside the image. * (6) If the image has an alpha layer, it is rotated separately by * two shears. */ PIX * pixRotate2Shear(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { PIX *pix1, *pix2, *pixd; PROCNAME("pixRotate2Shear"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); if (L_ABS(angle) > MAX_2_SHEAR_ANGLE) L_WARNING("%6.2f radians; large angle for 2-shear rotation\n", procName, L_ABS(angle)); if ((pix1 = pixHShear(NULL, pixs, ycen, angle, incolor)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); if ((pixd = pixVShear(NULL, pix1, xcen, angle, incolor)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixDestroy(&pix1); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); /* L_BRING_IN_WHITE brings in opaque for the alpha component */ pix2 = pixRotate2Shear(pix1, xcen, ycen, angle, L_BRING_IN_WHITE); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * pixRotate3Shear() * * Input: pixs * xcen, ycen (center of rotation) * angle (radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK); * Return: pixd, or null on error. * * Notes: * (1) This rotates the image about the given point, using the 3-shear * method. It should only be used for angles smaller than * LIMIT_SHEAR_ANGLE. For larger angles, a warning is issued. * (2) A positive angle gives a clockwise rotation. * (3) 3-shear rotation by a specified angle is equivalent * to the sequential transformations * y' = y + tan(angle/2) * (x - xcen) for first y-shear * x' = x + sin(angle) * (y - ycen) for x-shear * y' = y + tan(angle/2) * (x - xcen) for second y-shear * (4) Computation of tan(angle) is performed in the shear operations. * (5) This brings in 'incolor' pixels from outside the image. * (6) If the image has an alpha layer, it is rotated separately by * two shears. * (7) The algorithm was published by Alan Paeth: "A Fast Algorithm * for General Raster Rotation," Graphics Interface '86, * pp. 77-81, May 1986. A description of the method, along with * an implementation, can be found in Graphics Gems, p. 179, * edited by Andrew Glassner, published by Academic Press, 1990. */ PIX * pixRotate3Shear(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { l_float32 hangle; PIX *pix1, *pix2, *pixd; PROCNAME("pixRotate3Shear"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)(PIX *)ERROR_PTR("invalid incolor value", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); if (L_ABS(angle) > LIMIT_SHEAR_ANGLE) { L_WARNING("%6.2f radians; large angle for 3-shear rotation\n", procName, L_ABS(angle)); } hangle = atan(sin(angle)); if ((pixd = pixVShear(NULL, pixs, xcen, angle / 2., incolor)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); if ((pix1 = pixHShear(NULL, pixd, ycen, hangle, incolor)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); pixVShear(pixd, pix1, xcen, angle / 2., incolor); pixDestroy(&pix1); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); /* L_BRING_IN_WHITE brings in opaque for the alpha component */ pix2 = pixRotate3Shear(pix1, xcen, ycen, angle, L_BRING_IN_WHITE); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*------------------------------------------------------------------* * Rotations in-place about an arbitrary point * *------------------------------------------------------------------*/ /*! * pixRotateShearIP() * * Input: pixs (any depth; not colormapped) * xcen, ycen (center of rotation) * angle (radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: 0 if OK; 1 on error * * Notes: * (1) This does an in-place rotation of the image about the * specified point, using the 3-shear method. It should only * be used for angles smaller than LIMIT_SHEAR_ANGLE. * For larger angles, a warning is issued. * (2) A positive angle gives a clockwise rotation. * (3) 3-shear rotation by a specified angle is equivalent * to the sequential transformations * y' = y + tan(angle/2) * (x - xcen) for first y-shear * x' = x + sin(angle) * (y - ycen) for x-shear * y' = y + tan(angle/2) * (x - xcen) for second y-shear * (4) Computation of tan(angle) is performed in the shear operations. * (5) This brings in 'incolor' pixels from outside the image. * (6) The pix cannot be colormapped, because the in-place operation * only blits in 0 or 1 bits, not an arbitrary colormap index. */ l_int32 pixRotateShearIP(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { l_float32 hangle; PROCNAME("pixRotateShearIP"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid value for incolor", procName, 1); if (pixGetColormap(pixs) != NULL) return ERROR_INT("pixs is colormapped", procName, 1); if (angle == 0.0) return 0; if (L_ABS(angle) > LIMIT_SHEAR_ANGLE) { L_WARNING("%6.2f radians; large angle for in-place 3-shear rotation\n", procName, L_ABS(angle)); } hangle = atan(sin(angle)); pixHShearIP(pixs, ycen, angle / 2., incolor); pixVShearIP(pixs, xcen, hangle, incolor); pixHShearIP(pixs, ycen, angle / 2., incolor); return 0; } /*------------------------------------------------------------------* * Rotations about the image center * *------------------------------------------------------------------*/ /*! * pixRotateShearCenter() * * Input: pixs * angle (radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error */ PIX * pixRotateShearCenter(PIX *pixs, l_float32 angle, l_int32 incolor) { PROCNAME("pixRotateShearCenter"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); return pixRotateShear(pixs, pixGetWidth(pixs) / 2, pixGetHeight(pixs) / 2, angle, incolor); } /*! * pixRotateShearCenterIP() * * Input: pixs * angle (radians) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: 0 if OK, 1 on error */ l_int32 pixRotateShearCenterIP(PIX *pixs, l_float32 angle, l_int32 incolor) { PROCNAME("pixRotateShearCenterIP"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); return pixRotateShearIP(pixs, pixGetWidth(pixs) / 2, pixGetHeight(pixs) / 2, angle, incolor); } leptonica-1.70/src/rotateam.c0000644000175000017500000003625612246236255014277 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotateam.c * * Grayscale and color rotation for area mapping (== interpolation) * * Rotation about the image center * PIX *pixRotateAM() * PIX *pixRotateAMColor() * PIX *pixRotateAMGray() * * Rotation about the UL corner of the image * PIX *pixRotateAMCorner() * PIX *pixRotateAMColorCorner() * PIX *pixRotateAMGrayCorner() * * Faster color rotation about the image center * PIX *pixRotateAMColorFast() * * Rotations are measured in radians; clockwise is positive. * * The basic area mapping grayscale rotation works on 8 bpp images. * For color, the same method is applied to each color separately. * This can be done in two ways: (1) as here, computing each dest * rgb pixel from the appropriate four src rgb pixels, or (2) separating * the color image into three 8 bpp images, rotate each of these, * and then combine the result. Method (1) is about 2.5x faster. * We have also implemented a fast approximation for color area-mapping * rotation (pixRotateAMColorFast()), which is about 25% faster * than the standard color rotator. If you need the extra speed, * use it. * * Area mapping works as follows. For each dest * pixel you find the 4 source pixels that it partially * covers. You then compute the dest pixel value as * the area-weighted average of those 4 source pixels. * We make two simplifying approximations: * * - For simplicity, compute the areas as if the dest * pixel were translated but not rotated. * * - Compute area overlaps on a discrete sub-pixel grid. * Because we are using 8 bpp images with 256 levels, * it is convenient to break each pixel into a * 16x16 sub-pixel grid, and count the number of * overlapped sub-pixels. * * It is interesting to note that the digital filter that * implements the area mapping algorithm for rotation * is identical to the digital filter used for linear * interpolation when arbitrarily scaling grayscale images. * * The advantage of area mapping over pixel sampling * in grayscale rotation is that the former naturally * blurs sharp edges ("anti-aliasing"), so that stair-step * artifacts are not introduced. The disadvantage is that * it is significantly slower. * * But it is still pretty fast. With standard 3 GHz hardware, * the anti-aliased (area-mapped) color rotation speed is * about 15 million pixels/sec. * * The function pixRotateAMColorFast() is about 10-20% faster * than pixRotateAMColor(). The quality is slightly worse, * and if you make many successive small rotations, with a * total angle of 360 degrees, it has been noted that the * center wanders -- it seems to be doing a 1 pixel translation * in addition to the rotation. */ #include #include "allheaders.h" static const l_float32 MIN_ANGLE_TO_ROTATE = 0.001; /* radians; ~0.06 deg */ /*------------------------------------------------------------------* * Rotation about the center * *------------------------------------------------------------------*/ /*! * pixRotateAM() * * Input: pixs (2, 4, 8 bpp gray or colormapped, or 32 bpp RGB) * angle (radians; clockwise is positive) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Rotates about image center. * (2) A positive angle gives a clockwise rotation. * (3) Brings in either black or white pixels from the boundary. */ PIX * pixRotateAM(PIX *pixs, l_float32 angle, l_int32 incolor) { l_int32 d; l_uint32 fillval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixRotateAM"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) == 1) return (PIX *)ERROR_PTR("pixs is 1 bpp", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual incoming color */ fillval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) fillval = 255; else /* d == 32 */ fillval = 0xffffff00; } if (d == 8) pixd = pixRotateAMGray(pixt2, angle, fillval); else /* d == 32 */ pixd = pixRotateAMColor(pixt2, angle, fillval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixRotateAMColor() * * Input: pixs (32 bpp) * angle (radians; clockwise is positive) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error * * Notes: * (1) Rotates about image center. * (2) A positive angle gives a clockwise rotation. * (3) Specify the color to be brought in from outside the image. */ PIX * pixRotateAMColor(PIX *pixs, l_float32 angle, l_uint32 colorval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pix1, *pix2, *pixd; PROCNAME("pixRotateAMColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorLow(datad, w, h, wpld, datas, wpls, angle, colorval); if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixRotateAMGray(pix1, angle, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * pixRotateAMGray() * * Input: pixs (8 bpp) * angle (radians; clockwise is positive) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error * * Notes: * (1) Rotates about image center. * (2) A positive angle gives a clockwise rotation. * (3) Specify the grayvalue to be brought in from outside the image. */ PIX * pixRotateAMGray(PIX *pixs, l_float32 angle, l_uint8 grayval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixRotateAMGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMGrayLow(datad, w, h, wpld, datas, wpls, angle, grayval); return pixd; } /*------------------------------------------------------------------* * Rotation about the UL corner * *------------------------------------------------------------------*/ /*! * pixRotateAMCorner() * * Input: pixs (1, 2, 4, 8 bpp gray or colormapped, or 32 bpp RGB) * angle (radians; clockwise is positive) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Rotates about the UL corner of the image. * (2) A positive angle gives a clockwise rotation. * (3) Brings in either black or white pixels from the boundary. */ PIX * pixRotateAMCorner(PIX *pixs, l_float32 angle, l_int32 incolor) { l_int32 d; l_uint32 fillval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixRotateAMCorner"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual incoming color */ fillval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) fillval = 255; else /* d == 32 */ fillval = 0xffffff00; } if (d == 8) pixd = pixRotateAMGrayCorner(pixt2, angle, fillval); else /* d == 32 */ pixd = pixRotateAMColorCorner(pixt2, angle, fillval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixRotateAMColorCorner() * * Input: pixs * angle (radians; clockwise is positive) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error * * Notes: * (1) Rotates the image about the UL corner. * (2) A positive angle gives a clockwise rotation. * (3) Specify the color to be brought in from outside the image. */ PIX * pixRotateAMColorCorner(PIX *pixs, l_float32 angle, l_uint32 fillval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pix1, *pix2, *pixd; PROCNAME("pixRotateAMColorCorner"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorCornerLow(datad, w, h, wpld, datas, wpls, angle, fillval); if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixRotateAMGrayCorner(pix1, angle, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * pixRotateAMGrayCorner() * * Input: pixs * angle (radians; clockwise is positive) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error * * Notes: * (1) Rotates the image about the UL corner. * (2) A positive angle gives a clockwise rotation. * (3) Specify the grayvalue to be brought in from outside the image. */ PIX * pixRotateAMGrayCorner(PIX *pixs, l_float32 angle, l_uint8 grayval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixRotateAMGrayCorner"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMGrayCornerLow(datad, w, h, wpld, datas, wpls, angle, grayval); return pixd; } /*------------------------------------------------------------------* * Fast rotation about the center * *------------------------------------------------------------------*/ /*! * pixRotateAMColorFast() * * Input: pixs * angle (radians; clockwise is positive) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error * * Notes: * (1) This rotates a color image about the image center. * (2) A positive angle gives a clockwise rotation. * (3) It uses area mapping, dividing each pixel into * 16 subpixels. * (4) It is about 10% to 20% faster than the more accurate linear * interpolation function pixRotateAMColor(), * which uses 256 subpixels. * (5) For some reason it shifts the image center. * No attempt is made to rotate the alpha component. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixRotateAMColorFast(PIX *pixs, l_float32 angle, l_uint32 colorval) { l_int32 w, h, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixRotateAMColorFast"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotateAMColorFastLow(datad, w, h, wpld, datas, wpls, angle, colorval); return pixd; } leptonica-1.70/src/leptwin.c0000644000175000017500000002636712060445666014151 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * leptwin.c * * This file contains Leptonica routines needed only on Microsoft Windows * * Currently it only contains one public function * (based on dibsectn.c by jmh, 03-30-98): * * HBITMAP pixGetWindowsHBITMAP(PIX *pix) */ #ifdef _WIN32 #include #include #include "allheaders.h" #include "leptwin.h" /* Macro to determine the number of bytes per line in the DIB bits. * This accounts for DWORD alignment by adding 31 bits, * then dividing by 32, then rounding up to the next highest * count of 4-bytes. Then, we multiply by 4 to get the total byte count. */ #define BYTESPERLINE(Width, BPP) ((l_int32)((((DWORD)(Width) * (DWORD)(BPP) + 31) >> 5)) << 2) /* ********************************************************************** DWORD DSImageBitsSize(LPBITMAPINFO pbmi) PARAMETERS: LPBITMAPINFO - pointer to a BITMAPINFO describing a DIB RETURNS: DWORD - the size, in bytes, of the DIB's image bits REMARKS: Calculates and returns the size, in bytes, of the image bits for the DIB described by the BITMAPINFO. ********************************************************************** */ static DWORD DSImageBitsSize(LPBITMAPINFO pbmi) { switch(pbmi->bmiHeader.biCompression) { case BI_RLE8: /* wrong if haven't called DSCreateDIBSection or * CreateDIBSection with this pbmi */ case BI_RLE4: return pbmi->bmiHeader.biSizeImage; break; default: /* should not have to use "default" */ case BI_RGB: case BI_BITFIELDS: return BYTESPERLINE(pbmi->bmiHeader.biWidth, \ pbmi->bmiHeader.biBitCount * pbmi->bmiHeader.biPlanes) * pbmi->bmiHeader.biHeight; break; } return 0; } /* ********************************************************************** DWORD ImageBitsSize(HBITMAP hbitmap) PARAMETERS: HBITMAP - hbitmap RETURNS: DWORD - the size, in bytes, of the HBITMAP's image bits REMARKS: Calculates and returns the size, in bytes, of the image bits for the DIB described by the HBITMAP. ********************************************************************** */ static DWORD ImageBitsSize(HBITMAP hBitmap) { DIBSECTION ds; GetObject(hBitmap, sizeof(DIBSECTION), &ds); switch( ds.dsBmih.biCompression ) { case BI_RLE8: /* wrong if haven't called DSCreateDIBSection or * CreateDIBSection with this pbmi */ case BI_RLE4: return ds.dsBmih.biSizeImage; break; default: /* should not have to use "default" */ case BI_RGB: case BI_BITFIELDS: return BYTESPERLINE(ds.dsBmih.biWidth, \ ds.dsBmih.biBitCount * ds.dsBmih.biPlanes) * ds.dsBmih.biHeight; break; } return 0; } /*! * setColormap(LPBITMAPINFO pbmi, PIXCMAP *cmap) * * Input: pbmi (pointer to a BITMAPINFO describing a DIB) * cmap (leptonica colormap) * Return: number of colors in cmap */ static int setColormap(LPBITMAPINFO pbmi, PIXCMAP *cmap) { l_int32 i, nColors, rval, gval, bval; nColors = pixcmapGetCount(cmap); for (i = 0; i < nColors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); pbmi->bmiColors[i].rgbRed = rval; pbmi->bmiColors[i].rgbGreen = gval; pbmi->bmiColors[i].rgbBlue = bval; pbmi->bmiColors[i].rgbReserved = 0; } pbmi->bmiHeader.biClrUsed = nColors; return nColors; } /* ********************************************************************** HBITMAP DSCreateBitmapInfo(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) PARAMETERS: l_int32 width - Desired width of the DIBSection l_int32 height - Desired height of the DIBSection l_int32 depth - Desired bit-depth of the DIBSection PIXCMAP cmap - leptonica colormap for depths < 16 RETURNS: LPBITMAPINFO - a ptr to BITMAPINFO of the desired size and bit-depth NULL on failure REMARKS: Creates a BITMAPINFO based on the criteria passed in as parameters. ********************************************************************** */ static LPBITMAPINFO DSCreateBitmapInfo(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) { l_int32 nInfoSize; LPBITMAPINFO pbmi; LPDWORD pMasks; nInfoSize = sizeof(BITMAPINFOHEADER); if( depth <= 8 ) nInfoSize += sizeof(RGBQUAD) * (1 << depth); if((depth == 16) || (depth == 32)) nInfoSize += (3 * sizeof(DWORD)); /* Create the header big enough to contain color table and * bitmasks if needed. */ pbmi = (LPBITMAPINFO)malloc(nInfoSize); if (!pbmi) return NULL; ZeroMemory(pbmi, nInfoSize); pbmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER); pbmi->bmiHeader.biWidth = width; pbmi->bmiHeader.biHeight = height; pbmi->bmiHeader.biPlanes = 1; pbmi->bmiHeader.biBitCount = depth; /* override below for 16 and 32 bpp */ pbmi->bmiHeader.biCompression = BI_RGB; /* ?? not sure if this is right? */ pbmi->bmiHeader.biSizeImage = DSImageBitsSize(pbmi); pbmi->bmiHeader.biXPelsPerMeter = 0; pbmi->bmiHeader.biYPelsPerMeter = 0; pbmi->bmiHeader.biClrUsed = 0; /* override below */ pbmi->bmiHeader.biClrImportant = 0; switch(depth) { case 24: /* 24bpp requires no special handling */ break; case 16: /* if it's 16bpp, fill in the masks and override the * compression. These are the default masks -- you * could change them if needed. */ pMasks = (LPDWORD)(pbmi->bmiColors); pMasks[0] = 0x00007c00; pMasks[1] = 0x000003e0; pMasks[2] = 0x0000001f; pbmi->bmiHeader.biCompression = BI_BITFIELDS; break; case 32: /* if it's 32 bpp, fill in the masks and override * the compression */ pMasks = (LPDWORD)(pbmi->bmiColors); /*pMasks[0] = 0x00ff0000; */ /*pMasks[1] = 0x0000ff00; */ /*pMasks[2] = 0x000000ff; */ pMasks[0] = 0xff000000; pMasks[1] = 0x00ff0000; pMasks[2] = 0x0000ff00; pbmi->bmiHeader.biCompression = BI_BITFIELDS; break; case 8: case 4: case 1: setColormap(pbmi, cmap); break; } return pbmi; } /* ********************************************************************** HBITMAP DSCreateDIBSection(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) PARAMETERS: l_int32 width - Desired width of the DIBSection l_int32 height - Desired height of the DIBSection l_int32 depth - Desired bit-depth of the DIBSection PIXCMAP cmap - leptonica colormap for depths < 16 RETURNS: HBITMAP - a DIBSection HBITMAP of the desired size and bit-depth NULL on failure REMARKS: Creates a DIBSection based on the criteria passed in as parameters. ********************************************************************** */ static HBITMAP DSCreateDIBSection(l_int32 width, l_int32 height, l_int32 depth, PIXCMAP *cmap) { HBITMAP hBitmap; l_int32 nInfoSize; LPBITMAPINFO pbmi; HDC hRefDC; LPBYTE pBits; pbmi = DSCreateBitmapInfo (width, height, depth, cmap); if (!pbmi) return NULL; hRefDC = GetDC(NULL); hBitmap = CreateDIBSection(hRefDC, pbmi, DIB_RGB_COLORS, (void **) &pBits, NULL, 0); nInfoSize = GetLastError(); ReleaseDC(NULL, hRefDC); free(pbmi); return hBitmap; } /*! * pixGetWindowsHBITMAP() * * Input: pix * Return: Windows hBitmap, or null on error * * Notes: * (1) It's the responsibility of the caller to destroy the * returned hBitmap with a call to DeleteObject (or with * something that eventually calls DeleteObject). */ HBITMAP pixGetWindowsHBITMAP(PIX *pix) { l_int32 width, height, depth; l_uint32 *data; HBITMAP hBitmap = NULL; BITMAP bm; DWORD imageBitsSize; PIX *pixt = NULL; PIXCMAP *cmap; PROCNAME("pixGetWindowsHBITMAP"); if (!pix) return (HBITMAP)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pix, &width, &height, &depth); cmap = pixGetColormap(pix); if (depth == 24) depth = 32; if (depth == 2) { pixt = pixConvert2To8(pix, 0, 85, 170, 255, TRUE); if (!pixt) return (HBITMAP)ERROR_PTR("unable to convert pix from 2bpp to 8bpp", procName, NULL); depth = pixGetDepth(pixt); cmap = pixGetColormap(pixt); } if (depth < 16) { if (!cmap) cmap = pixcmapCreateLinear(depth, 1< #include "allheaders.h" /* --------------------------------------------*/ #if USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ /*-------------------------------------------------------------* * Convert files in a directory to PS * *-------------------------------------------------------------*/ /* * convertFilesToPS() * * Input: dirin (input directory) * substr ( substring filter on filenames; can be NULL) * res (typ. 300 or 600 ppi) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a PS file for all image files in a specified * directory that contain the substr pattern to be matched. * (2) Each image is written to a separate page in the output PS file. * (3) All images are written compressed: * * if tiffg4 --> use ccittg4 * * if jpeg --> use dct * * all others --> use flate * If the image is jpeg or tiffg4, we use the existing compressed * strings for the encoding; otherwise, we read the image into * a pix and flate-encode the pieces. * (4) The resolution is often confusing. It is interpreted * as the resolution of the output display device: "If the * input image were digitized at 300 ppi, what would it * look like when displayed at res ppi." So, for example, * if res = 100 ppi, then the display pixels are 3x larger * than the 300 ppi pixels, and the image will be rendered * 3x larger. * (5) The size of the PostScript file is independent of the resolution, * because the entire file is encoded. The res parameter just * tells the PS decomposer how to render the page. Therefore, * for minimum file size without loss of visual information, * if the output res is less than 300, you should downscale * the image to the output resolution before wrapping in PS. * (6) The "canvas" on which the image is rendered, at the given * output resolution, is a standard page size (8.5 x 11 in). */ l_int32 convertFilesToPS(const char *dirin, const char *substr, l_int32 res, const char *fileout) { SARRAY *sa; PROCNAME("convertFilesToPS"); if (!dirin) return ERROR_INT("dirin not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (res <= 0) { L_INFO("setting res to 300 ppi\n", procName); res = 300; } if (res < 10 || res > 4000) L_WARNING("res is typically in the range 300-600 ppi\n", procName); /* Get all filtered and sorted full pathnames. */ sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); /* Generate the PS file. Don't use bounding boxes. */ l_psWriteBoundingBox(FALSE); sarrayConvertFilesToPS(sa, res, fileout); l_psWriteBoundingBox(TRUE); sarrayDestroy(&sa); return 0; } /* * sarrayConvertFilesToPS() * * Input: sarray (of full path names) * res (typ. 300 or 600 ppi) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertFilesToPS() */ l_int32 sarrayConvertFilesToPS(SARRAY *sa, l_int32 res, const char *fileout) { char *fname; l_int32 i, nfiles, index, firstfile, ret, format; PROCNAME("sarrayConvertFilesToPS"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (res <= 0) { L_INFO("setting res to 300 ppi\n", procName); res = 300; } if (res < 10 || res > 4000) L_WARNING("res is typically in the range 300-600 ppi\n", procName); nfiles = sarrayGetCount(sa); firstfile = TRUE; for (i = 0, index = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); ret = pixReadHeader(fname, &format, NULL, NULL, NULL, NULL, NULL); if (ret) continue; if (format == IFF_UNKNOWN) continue; writeImageCompressedToPSFile(fname, fileout, res, &firstfile, &index); } return 0; } /* * convertFilesFittedToPS() * * Input: dirin (input directory) * substr ( substring filter on filenames; can be NULL) * xpts, ypts (desired size in printer points; use 0 for default) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a PS file for all files in a specified directory * that contain the substr pattern to be matched. * (2) Each image is written to a separate page in the output PS file. * (3) All images are written compressed: * * if tiffg4 --> use ccittg4 * * if jpeg --> use dct * * all others --> use flate * If the image is jpeg or tiffg4, we use the existing compressed * strings for the encoding; otherwise, we read the image into * a pix and flate-encode the pieces. * (4) The resolution is internally determined such that the images * are rendered, in at least one direction, at 100% of the given * size in printer points. Use 0.0 for xpts or ypts to get * the default value, which is 612.0 or 792.0, rsp. * (5) The size of the PostScript file is independent of the resolution, * because the entire file is encoded. The @xpts and @ypts * parameter tells the PS decomposer how to render the page. */ l_int32 convertFilesFittedToPS(const char *dirin, const char *substr, l_float32 xpts, l_float32 ypts, const char *fileout) { SARRAY *sa; PROCNAME("convertFilesFittedToPS"); if (!dirin) return ERROR_INT("dirin not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (xpts <= 0.0) { L_INFO("setting xpts to 612.0 ppi\n", procName); xpts = 612.0; } if (ypts <= 0.0) { L_INFO("setting ypts to 792.0 ppi\n", procName); ypts = 792.0; } if (xpts < 100.0 || xpts > 2000.0 || ypts < 100.0 || ypts > 2000.0) L_WARNING("xpts,ypts are typically in the range 500-800\n", procName); /* Get all filtered and sorted full pathnames. */ sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); /* Generate the PS file. Don't use bounding boxes. */ l_psWriteBoundingBox(FALSE); sarrayConvertFilesFittedToPS(sa, xpts, ypts, fileout); l_psWriteBoundingBox(TRUE); sarrayDestroy(&sa); return 0; } /* * sarrayConvertFilesFittedToPS() * * Input: sarray (of full path names) * xpts, ypts (desired size in printer points; use 0 for default) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) See convertFilesFittedToPS() */ l_int32 sarrayConvertFilesFittedToPS(SARRAY *sa, l_float32 xpts, l_float32 ypts, const char *fileout) { char *fname; l_int32 ret, i, w, h, nfiles, index, firstfile, format, res; PROCNAME("sarrayConvertFilesFittedToPS"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (xpts <= 0.0) { L_INFO("setting xpts to 612.0\n", procName); xpts = 612.0; } if (ypts <= 0.0) { L_INFO("setting ypts to 792.0\n", procName); ypts = 792.0; } if (xpts < 100.0 || xpts > 2000.0 || ypts < 100.0 || ypts > 2000.0) L_WARNING("xpts,ypts are typically in the range 500-800\n", procName); nfiles = sarrayGetCount(sa); firstfile = TRUE; for (i = 0, index = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); ret = pixReadHeader(fname, &format, &w, &h, NULL, NULL, NULL); if (ret) continue; if (format == IFF_UNKNOWN) continue; /* Be sure the entire image is wrapped */ if (xpts * h < ypts * w) res = (l_int32)((l_float32)w * 72.0 / xpts); else res = (l_int32)((l_float32)h * 72.0 / ypts); writeImageCompressedToPSFile(fname, fileout, res, &firstfile, &index); } return 0; } /* * writeImageCompressedToPSFile() * * Input: filein (input image file) * fileout (output ps file) * res (output printer resolution) * &firstfile ( 1 if the first image; * 0 otherwise) * &index ( index of image in output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This wraps a single page image in PS. * (2) The input file can be in any format. It is compressed as follows: * * if in tiffg4 --> use ccittg4 * * if in jpeg --> use dct * * all others --> use flate * (3) Before the first call, set @firstpage = 1. After writing * the first page, it will be set to 0. * (4) @index is incremented if the page is successfully written. */ l_int32 writeImageCompressedToPSFile(const char *filein, const char *fileout, l_int32 res, l_int32 *pfirstfile, l_int32 *pindex) { const char *op; l_int32 format, retval; PROCNAME("writeImageCompressedToPSFile"); if (!pfirstfile || !pindex) return ERROR_INT("&firstfile and &index not defined", procName, 1); findFileFormat(filein, &format); if (format == IFF_UNKNOWN) { L_ERROR("format of %s not known\n", procName, filein); return 1; } op = (*pfirstfile == TRUE) ? "w" : "a"; if (format == IFF_JFIF_JPEG) { retval = convertJpegToPS(filein, fileout, op, 0, 0, res, 1.0, *pindex + 1, TRUE); if (retval == 0) { *pfirstfile = FALSE; (*pindex)++; } } else if (format == IFF_TIFF_G4) { retval = convertG4ToPS(filein, fileout, op, 0, 0, res, 1.0, *pindex + 1, FALSE, TRUE); if (retval == 0) { *pfirstfile = FALSE; (*pindex)++; } } else { /* all other image formats */ retval = convertFlateToPS(filein, fileout, op, 0, 0, res, 1.0, *pindex + 1, TRUE); if (retval == 0) { *pfirstfile = FALSE; (*pindex)++; } } return retval; } /*-------------------------------------------------------------* * Convert mixed text/image files to PS * *-------------------------------------------------------------*/ /* * convertSegmentedPagesToPS() * * Input: pagedir (input page image directory) * pagestr ( substring filter on page filenames; * can be NULL) * maskdir (input mask image directory) * maskstr ( substring filter on mask filenames; * can be NULL) * numpre (number of characters in name before number) * numpost (number of characters in name after number) * maxnum (only consider page numbers up to this value) * textscale (scale of text output relative to pixs) * imagescale (scale of image output relative to pixs) * threshold (for binarization; typ. about 190; 0 for default) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a PS file for all page image and mask files in two * specified directories and that contain the page numbers as * specified below. The two directories can be the same, in which * case the page and mask files are differentiated by the two * substrings for string matches. * (2) The page images are taken in lexicographic order. * Mask images whose numbers match the page images are used to * segment the page images. Page images without a matching * mask image are scaled, thresholded and rendered entirely as text. * (3) Each PS page is generated as a compressed representation of * the page image, where the part of the image under the mask * is suitably scaled and compressed as DCT (i.e., jpeg), and * the remaining part of the page is suitably scaled, thresholded, * compressed as G4 (i.e., tiff g4), and rendered by painting * black through the resulting text mask. * (4) The scaling is typically 2x down for the DCT component * (@imagescale = 0.5) and 2x up for the G4 component * (@textscale = 2.0). * (5) The resolution is automatically set to fit to a * letter-size (8.5 x 11 inch) page. * (6) Both the DCT and the G4 encoding are PostScript level 2. * (7) It is assumed that the page number is contained within * the basename (the filename without directory or extension). * @numpre is the number of characters in the basename * preceeding the actual page numer; @numpost is the number * following the page number. Note: the same numbers must be * applied to both the page and mask image names. * (8) To render a page as is -- that is, with no thresholding * of any pixels -- use a mask in the mask directory that is * full size with all pixels set to 1. If the page is 1 bpp, * it is not necessary to have a mask. */ l_int32 convertSegmentedPagesToPS(const char *pagedir, const char *pagestr, const char *maskdir, const char *maskstr, l_int32 numpre, l_int32 numpost, l_int32 maxnum, l_float32 textscale, l_float32 imagescale, l_int32 threshold, const char *fileout) { l_int32 pageno, i, npages; PIX *pixs, *pixm; SARRAY *sapage, *samask; PROCNAME("convertSegmentedPagesToPS"); if (!pagedir) return ERROR_INT("pagedir not defined", procName, 1); if (!maskdir) return ERROR_INT("maskdir not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (threshold <= 0) { L_INFO("setting threshold to 190\n", procName); threshold = 190; } /* Get numbered full pathnames; max size of sarray is maxnum */ sapage = getNumberedPathnamesInDirectory(pagedir, pagestr, numpre, numpost, maxnum); samask = getNumberedPathnamesInDirectory(maskdir, maskstr, numpre, numpost, maxnum); sarrayPadToSameSize(sapage, samask, (char *)""); if ((npages = sarrayGetCount(sapage)) == 0) { sarrayDestroy(&sapage); sarrayDestroy(&samask); return ERROR_INT("no matching pages found", procName, 1); } /* Generate the PS file */ pageno = 1; for (i = 0; i < npages; i++) { if ((pixs = pixReadIndexed(sapage, i)) == NULL) continue; pixm = pixReadIndexed(samask, i); pixWriteSegmentedPageToPS(pixs, pixm, textscale, imagescale, threshold, pageno, fileout); pixDestroy(&pixs); pixDestroy(&pixm); pageno++; } sarrayDestroy(&sapage); sarrayDestroy(&samask); return 0; } /* * pixWriteSegmentedPageToPS() * * Input: pixs (all depths; colormap ok) * pixm ( 1 bpp segmentation mask over image region) * textscale (scale of text output relative to pixs) * imagescale (scale of image output relative to pixs) * threshold (threshold for binarization; typ. 190) * pageno (page number in set; use 1 for new output file) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates the PS string for a mixed text/image page, * and adds it to an existing file if @pageno > 1. * The PS output is determined by fitting the result to * a letter-size (8.5 x 11 inch) page. * (2) The two images (pixs and pixm) are at the same resolution * (typically 300 ppi). They are used to generate two compressed * images, pixb and pixc, that are put directly into the output * PS file. * (3) pixb is the text component. In the PostScript world, we think of * it as a mask through which we paint black. It is produced by * scaling pixs by @textscale, and thresholding to 1 bpp. * (4) pixc is the image component, which is that part of pixs under * the mask pixm. It is scaled from pixs by @imagescale. * (5) Typical values are textscale = 2.0 and imagescale = 0.5. * (6) If pixm == NULL, the page has only text. If it is all black, * the page is all image and has no text. * (7) This can be used to write a multi-page PS file, by using * sequential page numbers with the same output file. It can * also be used to write separate PS files for each page, * by using different output files with @pageno = 0 or 1. */ l_int32 pixWriteSegmentedPageToPS(PIX *pixs, PIX *pixm, l_float32 textscale, l_float32 imagescale, l_int32 threshold, l_int32 pageno, const char *fileout) { l_int32 alltext, notext, d, ret; l_uint32 val; l_float32 scaleratio; PIX *pixmi, *pixmis, *pixt, *pixg, *pixsc, *pixb, *pixc; PROCNAME("pixWriteSegmentedPageToPS"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (imagescale <= 0.0 || textscale <= 0.0) return ERROR_INT("relative scales must be > 0.0", procName, 1); /* Analyze the page. Determine the ratio by which the * binary text mask is scaled relative to the image part. * If there is no image region (alltext == TRUE), the * text mask will be rendered directly to fit the page, * and scaleratio = 1.0. */ alltext = TRUE; notext = FALSE; scaleratio = 1.0; if (pixm) { pixZero(pixm, &alltext); /* pixm empty: all text */ if (alltext) { pixm = NULL; /* treat it as not existing here */ } else { pixmi = pixInvert(NULL, pixm); pixZero(pixmi, ¬ext); /* pixm full; no text */ pixDestroy(&pixmi); scaleratio = textscale / imagescale; } } if (pixGetDepth(pixs) == 1) { /* render tiff g4 */ pixb = pixClone(pixs); pixc = NULL; } else { pixt = pixConvertTo8Or32(pixs, 0, 0); /* this can be a clone of pixs */ /* Get the binary text mask. Note that pixg cannot be a * clone of pixs, because it may be altered by pixSetMasked(). */ pixb = NULL; if (notext == FALSE) { d = pixGetDepth(pixt); if (d == 8) pixg = pixCopy(NULL, pixt); else /* d == 32 */ pixg = pixConvertRGBToLuminance(pixt); if (pixm) /* clear out the image parts */ pixSetMasked(pixg, pixm, 255); if (textscale == 1.0) pixsc = pixClone(pixg); else if (textscale >= 0.7) pixsc = pixScaleGrayLI(pixg, textscale, textscale); else pixsc = pixScaleAreaMap(pixg, textscale, textscale); pixb = pixThresholdToBinary(pixsc, threshold); pixDestroy(&pixg); pixDestroy(&pixsc); } /* Get the scaled image region */ pixc = NULL; if (pixm) { if (imagescale == 1.0) pixsc = pixClone(pixt); /* can possibly be a clone of pixs */ else pixsc = pixScale(pixt, imagescale, imagescale); /* If pixm is not full, clear the pixels in pixsc * corresponding to bg in pixm, where there can be text * that is written through the mask pixb. Note that * we could skip this and use pixsc directly in * pixWriteMixedToPS(); however, clearing these * non-image regions to a white background will reduce * the size of pixc (relative to pixsc), and hence * reduce the size of the PS file that is generated. * Use a copy so that we don't accidentally alter pixs. */ if (notext == FALSE) { pixmis = pixScale(pixm, imagescale, imagescale); pixmi = pixInvert(NULL, pixmis); val = (d == 8) ? 0xff : 0xffffff00; pixc = pixCopy(NULL, pixsc); pixSetMasked(pixc, pixmi, val); /* clear non-image part */ pixDestroy(&pixmis); pixDestroy(&pixmi); } else { pixc = pixClone(pixsc); } pixDestroy(&pixsc); } pixDestroy(&pixt); } /* Generate the PS file. Don't use bounding boxes. */ l_psWriteBoundingBox(FALSE); ret = pixWriteMixedToPS(pixb, pixc, scaleratio, pageno, fileout); l_psWriteBoundingBox(TRUE); pixDestroy(&pixb); pixDestroy(&pixc); return ret; } /* * pixWriteMixedToPS() * * Input: pixb ( 1 bpp "mask"; typically for text) * pixc ( 8 or 32 bpp image regions) * scale (relative scale factor for rendering pixb * relative to pixc; typ. 4.0) * pageno (page number in set; use 1 for new output file) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This low level function generates the PS string for a mixed * text/image page, and adds it to an existing file if * @pageno > 1. * (2) The two images (pixb and pixc) are typically generated at the * resolution that they will be rendered in the PS file. * (3) pixb is the text component. In the PostScript world, we think of * it as a mask through which we paint black. * (4) pixc is the (typically halftone) image component. It is * white in the rest of the page. To minimize the size of the * PS file, it should be rendered at a resolution that is at * least equal to its actual resolution. * (5) @scale gives the ratio of resolution of pixb to pixc. * Typical resolutions are: 600 ppi for pixb, 150 ppi for pixc; * so @scale = 4.0. If one of the images is not defined, * the value of @scale is ignored. * (6) We write pixc with DCT compression (jpeg). This is followed * by painting the text as black through the mask pixb. If * pixc doesn't exist (alltext), we write the text with the * PS "image" operator instead of the "imagemask" operator, * because ghostscript's ps2pdf is flaky when the latter is used. * (7) The actual output resolution is determined by fitting the * result to a letter-size (8.5 x 11 inch) page. */ l_int32 pixWriteMixedToPS(PIX *pixb, PIX *pixc, l_float32 scale, l_int32 pageno, const char *fileout) { const char tnameb[] = "/tmp/junk_pix_write_mixed.tif"; const char tnamec[] = "/tmp/junk_pix_write_mixed.jpg"; const char *op; l_int32 resb, resc, endpage, maskop, ret; PROCNAME("pixWriteMixedToPS"); if (!pixb && !pixc) return ERROR_INT("pixb and pixc both undefined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); /* Compute the resolution that fills a letter-size page. */ if (!pixc) { resb = getResLetterPage(pixGetWidth(pixb), pixGetHeight(pixb), 0); } else { resc = getResLetterPage(pixGetWidth(pixc), pixGetHeight(pixc), 0); if (pixb) resb = (l_int32)(scale * resc); } /* Write the jpeg image first */ if (pixc) { pixWrite(tnamec, pixc, IFF_JFIF_JPEG); endpage = (pixb) ? FALSE : TRUE; op = (pageno <= 1) ? "w" : "a"; ret = convertJpegToPS(tnamec, fileout, op, 0, 0, resc, 1.0, pageno, endpage); if (ret) return ERROR_INT("jpeg data not written", procName, 1); } /* Write the binary data, either directly or, if there is * a jpeg image on the page, through the mask. */ if (pixb) { pixWrite(tnameb, pixb, IFF_TIFF_G4); op = (pageno <= 1 && !pixc) ? "w" : "a"; maskop = (pixc) ? 1 : 0; ret = convertG4ToPS(tnameb, fileout, op, 0, 0, resb, 1.0, pageno, maskop, 1); if (ret) return ERROR_INT("tiff data not written", procName, 1); } return 0; } /*-------------------------------------------------------------* * Convert any image file to PS for embedding * *-------------------------------------------------------------*/ /* * convertToPSEmbed() * * Input: filein (input image file -- any format) * fileout (output ps file) * level (compression: 1 (uncompressed), 2 or 3) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a wrapper function that generates a PS file with * a bounding box, from any input image file. * (2) Do the best job of compression given the specified level. * @level=3 does flate compression on anything that is not * tiffg4 (1 bpp) or jpeg (8 bpp or rgb). * (3) If @level=2 and the file is not tiffg4 or jpeg, it will * first be written to file as jpeg with quality = 75. * This will remove the colormap and cause some degradation * in the image. * (4) The bounding box is required when a program such as TeX * (through epsf) places and rescales the image. It is * sized for fitting the image to an 8.5 x 11.0 inch page. */ l_int32 convertToPSEmbed(const char *filein, const char *fileout, l_int32 level) { const char nametif[] = "/tmp/junk_convert_ps_embed.tif"; const char namejpg[] = "/tmp/junk_convert_ps_embed.jpg"; l_int32 d, format; PIX *pix, *pixs; PROCNAME("convertToPSEmbed"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (level != 1 && level != 2 && level != 3) { L_ERROR("invalid level specified; using level 2\n", procName); level = 2; } if (level == 1) { /* no compression */ pixWritePSEmbed(filein, fileout); return 0; } /* Find the format and write out directly if in jpeg or tiff g4 */ findFileFormat(filein, &format); if (format == IFF_JFIF_JPEG) { convertJpegToPSEmbed(filein, fileout); return 0; } else if (format == IFF_TIFF_G4) { convertG4ToPSEmbed(filein, fileout); return 0; } else if (format == IFF_UNKNOWN) { L_ERROR("format of %s not known\n", procName, filein); return 1; } /* If level 3, flate encode. */ if (level == 3) { convertFlateToPSEmbed(filein, fileout); return 0; } /* OK, it's level 2, so we must convert to jpeg or tiff g4 */ if ((pixs = pixRead(filein)) == NULL) return ERROR_INT("image not read from file", procName, 1); d = pixGetDepth(pixs); if ((d == 2 || d == 4) && !pixGetColormap(pixs)) pix = pixConvertTo8(pixs, 0); else if (d == 16) pix = pixConvert16To8(pixs, 1); else pix = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pix); if (d == 1) { pixWrite(nametif, pix, IFF_TIFF_G4); convertG4ToPSEmbed(nametif, fileout); } else { pixWrite(namejpg, pix, IFF_JFIF_JPEG); convertJpegToPSEmbed(namejpg, fileout); } pixDestroy(&pix); pixDestroy(&pixs); return 0; } /*-------------------------------------------------------------* * Write all images in a pixa out to PS * *-------------------------------------------------------------*/ /* * pixaWriteCompressedToPS() * * Input: pixa (any set of images) * fileout (output ps file) * res (of input image) * level (compression: 2 or 3) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a PS file of multiple page images, all * with bounding boxes. * (2) It compresses to: * cmap + level2: jpeg * cmap + level3: flate * 1 bpp: tiffg4 * 2 or 4 bpp + level2: jpeg * 2 or 4 bpp + level3: flate * 8 bpp: jpeg * 16 bpp: flate * 32 bpp: jpeg * (3) To generate a pdf, use: ps2pdf */ l_int32 pixaWriteCompressedToPS(PIXA *pixa, const char *fileout, l_int32 res, l_int32 level) { char *tname, *g4_name, *jpeg_name, *png_name; l_int32 i, n, firstfile, index, writeout, d; PIX *pix, *pixt; PIXCMAP *cmap; PROCNAME("pixaWriteCompressedToPS"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (level != 2 && level != 3) { L_ERROR("only levels 2 and 3 permitted; using level 2\n", procName); level = 2; } n = pixaGetCount(pixa); firstfile = TRUE; index = 0; g4_name = genTempFilename("/tmp", "temp_compr.tif", 0, 0); jpeg_name = genTempFilename("/tmp", "temp_compr.jpg", 0, 0); png_name = genTempFilename("/tmp", "temp_compr.png", 0, 0); for (i = 0; i < n; i++) { writeout = TRUE; pix = pixaGetPix(pixa, i, L_CLONE); d = pixGetDepth(pix); cmap = pixGetColormap(pix); if (d == 1) { tname = g4_name; pixWrite(tname, pix, IFF_TIFF_G4); } else if (cmap) { if (level == 2) { pixt = pixConvertForPSWrap(pix); tname = jpeg_name; pixWrite(tname, pixt, IFF_JFIF_JPEG); pixDestroy(&pixt); } else { /* level == 3 */ tname = png_name; pixWrite(tname, pix, IFF_PNG); } } else if (d == 16) { if (level == 2) L_WARNING("d = 16; must write out flate\n", procName); tname = png_name; pixWrite(tname, pix, IFF_PNG); } else if (d == 2 || d == 4) { if (level == 2) { pixt = pixConvertTo8(pix, 0); tname = jpeg_name; pixWrite(tname, pixt, IFF_JFIF_JPEG); pixDestroy(&pixt); } else { /* level == 3 */ tname = png_name; pixWrite(tname, pix, IFF_PNG); } } else if (d == 8 || d == 32) { tname = jpeg_name; pixWrite(tname, pix, IFF_JFIF_JPEG); } else { /* shouldn't happen */ L_ERROR("invalid depth: %d\n", procName, d); writeout = FALSE; } pixDestroy(&pix); if (writeout) writeImageCompressedToPSFile(tname, fileout, res, &firstfile, &index); } FREE(g4_name); FREE(jpeg_name); FREE(png_name); return 0; } /* --------------------------------------------*/ #endif /* USE_PSIO */ /* --------------------------------------------*/ leptonica-1.70/src/morphdwa.c0000644000175000017500000017247312244204105014271 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * morphdwa.c * * Binary morphological (dwa) ops with brick Sels * PIX *pixDilateBrickDwa() * PIX *pixErodeBrickDwa() * PIX *pixOpenBrickDwa() * PIX *pixCloseBrickDwa() * * Binary composite morphological (dwa) ops with brick Sels * PIX *pixDilateCompBrickDwa() * PIX *pixErodeCompBrickDwa() * PIX *pixOpenCompBrickDwa() * PIX *pixCloseCompBrickDwa() * * Binary extended composite morphological (dwa) ops with brick Sels * PIX *pixDilateCompBrickExtendDwa() * PIX *pixErodeCompBrickExtendDwa() * PIX *pixOpenCompBrickExtendDwa() * PIX *pixCloseCompBrickExtendDwa() * l_int32 getExtendedCompositeParameters() * * These are higher-level interfaces for dwa morphology with brick Sels. * Because many morphological operations are performed using * separable brick Sels, it is useful to have a simple interface * for this. * * We have included all 58 of the brick Sels that are generated * by selaAddBasic(). These are sufficient for all the decomposable * bricks up to size 63, which is the limit for dwa Sels with * origins at the center of the Sel. * * All three sets can be used as the basic interface for general * brick operations. Here are the internal calling sequences: * * (1) If you try to apply a non-decomposable operation, such as * pixErodeBrickDwa(), with a Sel size that doesn't exist, * this calls a decomposable operation, pixErodeCompBrickDwa(), * instead. This can differ in linear Sel size by up to * 2 pixels from the request. * * (2) If either Sel brick dimension is greater than 63, the extended * composite function is called. * * (3) The extended composite function calls the composite function * a number of times with size 63, and once with size < 63. * Because each operation with a size of 63 is done compositely * with 7 x 9 (exactly 63), the net result is correct in * length to within 2 pixels. * * For composite operations, both using a comb and extended (beyond 63), * horizontal and vertical operations are composed separately * and sequentially. * * We have also included use of all the 76 comb Sels that are generated * by selaAddDwaCombs(). The generated code is in dwacomb.2.c * and dwacomblow.2.c. These are used for the composite dwa * brick operations. * * The non-composite brick operations, such as pixDilateBrickDwa(), * will call the associated composite operation in situations where * the requisite brick Sel has not been compiled into fmorphgen*.1.c. * * If you want to use brick Sels that are not represented in the * basic set of 58, you must generate the dwa code to implement them. * You have three choices for how to use these: * * (1) Add both the new Sels and the dwa code to the library: * - For simplicity, add your new brick Sels to those defined * in selaAddBasic(). * - Recompile the library. * - Make prog/fmorphautogen. * - Run prog/fmorphautogen, to generate new versions of the * dwa code in fmorphgen.1.c and fmorphgenlow.1.c. * - Copy these two files to src. * - Recompile the library again. * - Use the new brick Sels in your program and compile it. * * (2) Make both the new Sels and dwa code outside the library, * and link it directly to an executable: * - Write a function to generate the new Sels in a Sela, and call * fmorphautogen(sela, , filename) to generate the code. * - Compile your program that uses the newly generated function * pixMorphDwa_(), and link to the two new C files. * * (3) Make the new Sels in the library and use the dwa code outside it: * - Add code in the library to generate your new brick Sels. * (It is suggested that you NOT add these Sels to the * selaAddBasic() function; write a new function that generates * a new Sela.) * - Recompile the library. * - Write a small program that generates the Sela and calls * fmorphautogen(sela, , filename) to generate the code. * - Compile your program that uses the newly generated function * pixMorphDwa_(), and link to the two new C files. * As an example of this approach, see prog/dwamorph*_reg.c: * - added selaAddDwaLinear() to sel2.c * - wrote dwamorph1_reg.c, to generate the dwa code. * - compiled and linked the generated code with the application, * dwamorph2_reg.c. (Note: because this was a regression test, * dwamorph1_reg also builds and runs the application program.) */ #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_SEL_LOOKUP 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------* * Binary morphological (dwa) ops with brick Sels * *-----------------------------------------------------------------*/ /*! * pixDilateBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) These implement 2D brick Sels, using linear Sels generated * with selaAddBasic(). * (2) A brick Sel has hits for all elements. * (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (4) Do separably if both hsize and vsize are > 1. * (5) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (6) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (7) For clarity, if the case is known, use these patterns: * (a) pixd = pixDilateBrickDwa(NULL, pixs, ...); * (b) pixDilateBrickDwa(pixs, pixs, ...); * (c) pixDilateBrickDwa(pixd, pixs, ...); * (8) The size of pixd is determined by pixs. * (9) If either linear Sel is not found, this calls * the appropriate decomposible function. */ PIX * pixDilateBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixDilateBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", procName); if (selnameh) FREE(selnameh); if (selnamev) FREE(selnamev); return pixDilateCompBrickDwa(pixd, pixs, hsize, vsize); } if (vsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnameh); FREE(selnameh); } else if (hsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_DILATE, selnamev); FREE(selnamev); } else { pixt1 = pixAddBorder(pixs, 32, 0); pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); pixFMorphopGen_1(pixt1, pixt3, L_MORPH_DILATE, selnamev); pixt2 = pixRemoveBorder(pixt1, 32); pixDestroy(&pixt1); pixDestroy(&pixt3); FREE(selnameh); FREE(selnamev); } if (!pixd) return pixt2; pixTransferAllData(pixd, &pixt2, 0, 0); return pixd; } /*! * pixErodeBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) These implement 2D brick Sels, using linear Sels generated * with selaAddBasic(). * (2) A brick Sel has hits for all elements. * (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (4) Do separably if both hsize and vsize are > 1. * (5) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (6) Note that we must always set or clear the border pixels * before each operation, depending on the the b.c. * (symmetric or asymmetric). * (7) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (8) For clarity, if the case is known, use these patterns: * (a) pixd = pixErodeBrickDwa(NULL, pixs, ...); * (b) pixErodeBrickDwa(pixs, pixs, ...); * (c) pixErodeBrickDwa(pixd, pixs, ...); * (9) The size of the result is determined by pixs. * (10) If either linear Sel is not found, this calls * the appropriate decomposible function. */ PIX * pixErodeBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixErodeBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", procName); if (selnameh) FREE(selnameh); if (selnamev) FREE(selnamev); return pixErodeCompBrickDwa(pixd, pixs, hsize, vsize); } if (vsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnameh); FREE(selnameh); } else if (hsize == 1) { pixt2 = pixMorphDwa_1(NULL, pixs, L_MORPH_ERODE, selnamev); FREE(selnamev); } else { pixt1 = pixAddBorder(pixs, 32, 0); pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pixt1, pixt3, L_MORPH_ERODE, selnamev); pixt2 = pixRemoveBorder(pixt1, 32); pixDestroy(&pixt1); pixDestroy(&pixt3); FREE(selnameh); FREE(selnamev); } if (!pixd) return pixt2; pixTransferAllData(pixd, &pixt2, 0, 0); return pixd; } /*! * pixOpenBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) These implement 2D brick Sels, using linear Sels generated * with selaAddBasic(). * (2) A brick Sel has hits for all elements. * (3) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (4) Do separably if both hsize and vsize are > 1. * (5) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (6) Note that we must always set or clear the border pixels * before each operation, depending on the the b.c. * (symmetric or asymmetric). * (7) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (8) For clarity, if the case is known, use these patterns: * (a) pixd = pixOpenBrickDwa(NULL, pixs, ...); * (b) pixOpenBrickDwa(pixs, pixs, ...); * (c) pixOpenBrickDwa(pixd, pixs, ...); * (9) The size of the result is determined by pixs. * (10) If either linear Sel is not found, this calls * the appropriate decomposible function. */ PIX * pixOpenBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixOpenBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", procName); if (selnameh) FREE(selnameh); if (selnamev) FREE(selnamev); return pixOpenCompBrickDwa(pixd, pixs, hsize, vsize); } pixt1 = pixAddBorder(pixs, 32, 0); if (vsize == 1) { /* horizontal only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnameh); FREE(selnameh); } else if (hsize == 1) { /* vertical only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_OPEN, selnamev); FREE(selnamev); } else { /* do separable */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev); FREE(selnameh); FREE(selnamev); pixDestroy(&pixt3); } pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * pixCloseBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) This is a 'safe' closing; we add an extra border of 32 OFF * pixels for the standard asymmetric b.c. * (2) These implement 2D brick Sels, using linear Sels generated * with selaAddBasic(). * (3) A brick Sel has hits for all elements. * (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (5) Do separably if both hsize and vsize are > 1. * (6) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (7) Note that we must always set or clear the border pixels * before each operation, depending on the the b.c. * (symmetric or asymmetric). * (8) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (9) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseBrickDwa(NULL, pixs, ...); * (b) pixCloseBrickDwa(pixs, pixs, ...); * (c) pixCloseBrickDwa(pixd, pixs, ...); * (10) The size of the result is determined by pixs. * (11) If either linear Sel is not found, this calls * the appropriate decomposible function. */ PIX * pixCloseBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 bordercolor, bordersize, found; char *selnameh, *selnamev; SELA *sela; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixCloseBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); sela = selaAddBasic(NULL); found = TRUE; selnameh = selnamev = NULL; if (hsize > 1) { selnameh = selaGetBrickName(sela, hsize, 1); if (!selnameh) found = FALSE; } if (vsize > 1) { selnamev = selaGetBrickName(sela, 1, vsize); if (!selnamev) found = FALSE; } selaDestroy(&sela); if (!found) { L_INFO("Calling the decomposable dwa function\n", procName); if (selnameh) FREE(selnameh); if (selnamev) FREE(selnamev); return pixCloseCompBrickDwa(pixd, pixs, hsize, vsize); } /* For "safe closing" with ASYMMETRIC_MORPH_BC, we always need * an extra 32 OFF pixels around the image (in addition to * the 32 added pixels for all dwa operations), whereas with * SYMMETRIC_MORPH_BC this is not necessary. */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 0) /* asymmetric b.c. */ bordersize = 64; else /* symmetric b.c. */ bordersize = 32; pixt1 = pixAddBorder(pixs, bordersize, 0); if (vsize == 1) { /* horizontal only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh); FREE(selnameh); } else if (hsize == 1) { /* vertical only */ pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev); FREE(selnamev); } else { /* do separable */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev); FREE(selnameh); FREE(selnamev); pixDestroy(&pixt3); } pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*-----------------------------------------------------------------* * Binary composite morphological (dwa) ops with brick Sels * *-----------------------------------------------------------------*/ /*! * pixDilateCompBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) These implement a separable composite dilation with 2D brick Sels. * (2) For efficiency, it may decompose each linear morphological * operation into two (brick + comb). * (3) A brick Sel has hits for all elements. * (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (5) Do separably if both hsize and vsize are > 1. * (6) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (7) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (8) For clarity, if the case is known, use these patterns: * (a) pixd = pixDilateCompBrickDwa(NULL, pixs, ...); * (b) pixDilateCompBrickDwa(pixs, pixs, ...); * (c) pixDilateCompBrickDwa(pixd, pixs, ...); * (9) The size of pixd is determined by pixs. * (10) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixDilateCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixDilateCompBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize > 63 || vsize > 63) return pixDilateCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); #if DEBUG_SEL_LOOKUP fprintf(stderr, "nameh1=%s, nameh2=%s, namev1=%s, namev2=%s\n", selnameh1, selnameh2, selnamev1, selnamev2); fprintf(stderr, "hsize1=%d, hsize2=%d, vsize1=%d, vsize2=%d\n", hsize1, hsize2, vsize1, vsize2); #endif /* DEBUG_SEL_LOOKUP */ pixt1 = pixAddBorder(pixs, 64, 0); if (vsize == 1) { if (hsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); pixDestroy(&pixt3); } } else if (hsize == 1) { if (vsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnamev2); pixDestroy(&pixt3); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); else { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt3 = pixFMorphopGen_2(NULL, pixt2, L_MORPH_DILATE, selnameh2); pixDestroy(&pixt2); } if (vsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); else { pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt2, L_MORPH_DILATE, selnamev2); } pixDestroy(&pixt3); } pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) FREE(selnameh1); if (selnameh2) FREE(selnameh2); if (selnamev1) FREE(selnamev1); if (selnamev2) FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*! * pixErodeCompBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) These implement a separable composite erosion with 2D brick Sels. * (2) For efficiency, it may decompose each linear morphological * operation into two (brick + comb). * (3) A brick Sel has hits for all elements. * (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (5) Do separably if both hsize and vsize are > 1. * (6) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (7) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (8) For clarity, if the case is known, use these patterns: * (a) pixd = pixErodeCompBrickDwa(NULL, pixs, ...); * (b) pixErodeCompBrickDwa(pixs, pixs, ...); * (c) pixErodeCompBrickDwa(pixd, pixs, ...); * (9) The size of pixd is determined by pixs. * (10) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixErodeCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2, bordercolor; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixErodeCompBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize > 63 || vsize > 63) return pixErodeCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); /* For symmetric b.c., bordercolor == 1 for erosion */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); pixt1 = pixAddBorder(pixs, 64, bordercolor); if (vsize == 1) { if (hsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); pixDestroy(&pixt3); } } else if (hsize == 1) { if (vsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnamev2); pixDestroy(&pixt3); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1) pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); else { pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt3 = pixFMorphopGen_2(NULL, pixt2, L_MORPH_ERODE, selnameh2); pixDestroy(&pixt2); } if (vsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); else { pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt2, L_MORPH_ERODE, selnamev2); } pixDestroy(&pixt3); } pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) FREE(selnameh1); if (selnameh2) FREE(selnameh2); if (selnamev1) FREE(selnamev1); if (selnamev2) FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*! * pixOpenCompBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) These implement a separable composite opening with 2D brick Sels. * (2) For efficiency, it may decompose each linear morphological * operation into two (brick + comb). * (3) A brick Sel has hits for all elements. * (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (5) Do separably if both hsize and vsize are > 1. * (6) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (7) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (8) For clarity, if the case is known, use these patterns: * (a) pixd = pixOpenCompBrickDwa(NULL, pixs, ...); * (b) pixOpenCompBrickDwa(pixs, pixs, ...); * (c) pixOpenCompBrickDwa(pixd, pixs, ...); * (9) The size of pixd is determined by pixs. * (10) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixOpenCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2, bordercolor; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixOpenCompBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize > 63 || vsize > 63) return pixOpenCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); /* For symmetric b.c., initialize erosion with bordercolor == 1 */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); pixt1 = pixAddBorder(pixs, 64, bordercolor); if (vsize == 1) { if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnameh1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnameh2); } } else if (hsize == 1) { if (vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); } else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnamev2); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1 && vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev1); } else if (vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnameh1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnamev1); } else if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_ERODE, selnamev2); if (bordercolor == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_DILATE, selnameh1); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); } else { /* both directions are combed */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_ERODE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); if (bordercolor == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_CLR); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); } } pixDestroy(&pixt3); pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) FREE(selnameh1); if (selnameh2) FREE(selnameh2); if (selnamev1) FREE(selnamev1); if (selnamev2) FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*! * pixCloseCompBrickDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) This implements a separable composite safe closing with 2D * brick Sels. * (2) For efficiency, it may decompose each linear morphological * operation into two (brick + comb). * (3) A brick Sel has hits for all elements. * (4) The origin of the Sel is at (x, y) = (hsize/2, vsize/2) * (5) Do separably if both hsize and vsize are > 1. * (6) It is necessary that both horizontal and vertical Sels * of the input size are defined in the basic sela. * (7) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (8) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseCompBrickDwa(NULL, pixs, ...); * (b) pixCloseCompBrickDwa(pixs, pixs, ...); * (c) pixCloseCompBrickDwa(pixd, pixs, ...); * (9) The size of pixd is determined by pixs. * (10) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixCloseCompBrickDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { char *selnameh1, *selnameh2, *selnamev1, *selnamev2; l_int32 hsize1, hsize2, vsize1, vsize2, setborder; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixCloseCompBrickDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize > 63 || vsize > 63) return pixCloseCompBrickExtendDwa(pixd, pixs, hsize, vsize); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); hsize1 = hsize2 = vsize1 = vsize2 = 1; selnameh1 = selnameh2 = selnamev1 = selnamev2 = NULL; if (hsize > 1) getCompositeParameters(hsize, &hsize1, &hsize2, &selnameh1, &selnameh2, NULL, NULL); if (vsize > 1) getCompositeParameters(vsize, &vsize1, &vsize2, NULL, NULL, &selnamev1, &selnamev2); pixt3 = NULL; /* For symmetric b.c., PIX_SET border for erosions */ setborder = getMorphBorderPixelColor(L_MORPH_ERODE, 1); pixt1 = pixAddBorder(pixs, 64, 0); if (vsize == 1) { if (hsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnameh1); else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnameh2); } } else if (hsize == 1) { if (vsize2 == 1) pixt2 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_CLOSE, selnamev1); else { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnamev1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnamev2); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); } } else { /* vsize and hsize both > 1 */ if (hsize2 == 1 && vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev1); } else if (vsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); if (setborder == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnamev1); } else if (hsize2 == 1) { pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_1(NULL, pixt3, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt3, pixt2, L_MORPH_DILATE, selnamev2); if (setborder == 1) pixSetOrClearBorder(pixt3, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt2, pixt3, L_MORPH_ERODE, selnameh1); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); } else { /* both directions are combed */ pixt3 = pixFMorphopGen_1(NULL, pixt1, L_MORPH_DILATE, selnameh1); pixt2 = pixFMorphopGen_2(NULL, pixt3, L_MORPH_DILATE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_DILATE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_DILATE, selnamev2); if (setborder == 1) pixSetOrClearBorder(pixt2, 64, 64, 64, 64, PIX_SET); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnameh1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnameh2); pixFMorphopGen_1(pixt3, pixt2, L_MORPH_ERODE, selnamev1); pixFMorphopGen_2(pixt2, pixt3, L_MORPH_ERODE, selnamev2); } } pixDestroy(&pixt3); pixDestroy(&pixt1); pixt1 = pixRemoveBorder(pixt2, 64); pixDestroy(&pixt2); if (selnameh1) FREE(selnameh1); if (selnameh2) FREE(selnameh2); if (selnamev1) FREE(selnamev1); if (selnamev2) FREE(selnamev2); if (!pixd) return pixt1; pixTransferAllData(pixd, &pixt1, 0, 0); return pixd; } /*--------------------------------------------------------------------------* * Binary expanded composite morphological (dwa) ops with brick Sels * *--------------------------------------------------------------------------*/ /*! * pixDilateCompBrickExtendDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) Ankur Jain suggested and implemented extending the composite * DWA operations beyond the 63 pixel limit. This is a * simplified and approximate implementation of the extension. * This allows arbitrary Dwa morph operations using brick Sels, * by decomposing the horizontal and vertical dilations into * a sequence of 63-element dilations plus a dilation of size * between 3 and 62. * (2) The 63-element dilations are exact, whereas the extra dilation * is approximate, because the underlying decomposition is * in pixDilateCompBrickDwa(). See there for further details. * (3) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (4) There is no need to call this directly: pixDilateCompBrickDwa() * calls this function if either brick dimension exceeds 63. */ PIX * pixDilateCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 i, nops, nh, extrah, nv, extrav; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixDilateCompBrickExtendDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize < 64 && vsize < 64) return pixDilateCompBrickDwa(pixd, pixs, hsize, vsize); if (hsize > 63) getExtendedCompositeParameters(hsize, &nh, &extrah, NULL); if (vsize > 63) getExtendedCompositeParameters(vsize, &nv, &extrav, NULL); /* Horizontal dilation first: pixs --> pixt2. Do not alter pixs. */ pixt1 = pixCreateTemplateNoInit(pixs); /* temp image */ if (hsize == 1) pixt2 = pixClone(pixs); else if (hsize < 64) pixt2 = pixDilateCompBrickDwa(NULL, pixs, hsize, 1); else if (hsize == 64) /* approximate */ pixt2 = pixDilateCompBrickDwa(NULL, pixs, 63, 1); else { nops = (extrah < 3) ? nh : nh + 1; if (nops & 1) { /* odd */ if (extrah > 2) pixt2 = pixDilateCompBrickDwa(NULL, pixs, extrah, 1); else pixt2 = pixDilateCompBrickDwa(NULL, pixs, 63, 1); for (i = 0; i < nops / 2; i++) { pixDilateCompBrickDwa(pixt1, pixt2, 63, 1); pixDilateCompBrickDwa(pixt2, pixt1, 63, 1); } } else { /* nops even */ if (extrah > 2) { pixDilateCompBrickDwa(pixt1, pixs, extrah, 1); pixt2 = pixDilateCompBrickDwa(NULL, pixt1, 63, 1); } else { /* they're all 63s */ pixDilateCompBrickDwa(pixt1, pixs, 63, 1); pixt2 = pixDilateCompBrickDwa(NULL, pixt1, 63, 1); } for (i = 0; i < nops / 2 - 1; i++) { pixDilateCompBrickDwa(pixt1, pixt2, 63, 1); pixDilateCompBrickDwa(pixt2, pixt1, 63, 1); } } } /* Vertical dilation: pixt2 --> pixt3. */ if (vsize == 1) pixt3 = pixClone(pixt2); else if (vsize < 64) pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, vsize); else if (vsize == 64) /* approximate */ pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, 63); else { nops = (extrav < 3) ? nv : nv + 1; if (nops & 1) { /* odd */ if (extrav > 2) pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, extrav); else pixt3 = pixDilateCompBrickDwa(NULL, pixt2, 1, 63); for (i = 0; i < nops / 2; i++) { pixDilateCompBrickDwa(pixt1, pixt3, 1, 63); pixDilateCompBrickDwa(pixt3, pixt1, 1, 63); } } else { /* nops even */ if (extrav > 2) { pixDilateCompBrickDwa(pixt1, pixt2, 1, extrav); pixt3 = pixDilateCompBrickDwa(NULL, pixt1, 1, 63); } else { /* they're all 63s */ pixDilateCompBrickDwa(pixt1, pixt2, 1, 63); pixt3 = pixDilateCompBrickDwa(NULL, pixt1, 1, 63); } for (i = 0; i < nops / 2 - 1; i++) { pixDilateCompBrickDwa(pixt1, pixt3, 1, 63); pixDilateCompBrickDwa(pixt3, pixt1, 1, 63); } } } pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * pixErodeCompBrickExtendDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) See pixDilateCompBrickExtendDwa() for usage. * (2) There is no need to call this directly: pixErodeCompBrickDwa() * calls this function if either brick dimension exceeds 63. */ PIX * pixErodeCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 i, nops, nh, extrah, nv, extrav; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixErodeCompBrickExtendDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize < 64 && vsize < 64) return pixErodeCompBrickDwa(pixd, pixs, hsize, vsize); if (hsize > 63) getExtendedCompositeParameters(hsize, &nh, &extrah, NULL); if (vsize > 63) getExtendedCompositeParameters(vsize, &nv, &extrav, NULL); /* Horizontal erosion first: pixs --> pixt2. Do not alter pixs. */ pixt1 = pixCreateTemplateNoInit(pixs); /* temp image */ if (hsize == 1) pixt2 = pixClone(pixs); else if (hsize < 64) pixt2 = pixErodeCompBrickDwa(NULL, pixs, hsize, 1); else if (hsize == 64) /* approximate */ pixt2 = pixErodeCompBrickDwa(NULL, pixs, 63, 1); else { nops = (extrah < 3) ? nh : nh + 1; if (nops & 1) { /* odd */ if (extrah > 2) pixt2 = pixErodeCompBrickDwa(NULL, pixs, extrah, 1); else pixt2 = pixErodeCompBrickDwa(NULL, pixs, 63, 1); for (i = 0; i < nops / 2; i++) { pixErodeCompBrickDwa(pixt1, pixt2, 63, 1); pixErodeCompBrickDwa(pixt2, pixt1, 63, 1); } } else { /* nops even */ if (extrah > 2) { pixErodeCompBrickDwa(pixt1, pixs, extrah, 1); pixt2 = pixErodeCompBrickDwa(NULL, pixt1, 63, 1); } else { /* they're all 63s */ pixErodeCompBrickDwa(pixt1, pixs, 63, 1); pixt2 = pixErodeCompBrickDwa(NULL, pixt1, 63, 1); } for (i = 0; i < nops / 2 - 1; i++) { pixErodeCompBrickDwa(pixt1, pixt2, 63, 1); pixErodeCompBrickDwa(pixt2, pixt1, 63, 1); } } } /* Vertical erosion: pixt2 --> pixt3. */ if (vsize == 1) pixt3 = pixClone(pixt2); else if (vsize < 64) pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, vsize); else if (vsize == 64) /* approximate */ pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, 63); else { nops = (extrav < 3) ? nv : nv + 1; if (nops & 1) { /* odd */ if (extrav > 2) pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, extrav); else pixt3 = pixErodeCompBrickDwa(NULL, pixt2, 1, 63); for (i = 0; i < nops / 2; i++) { pixErodeCompBrickDwa(pixt1, pixt3, 1, 63); pixErodeCompBrickDwa(pixt3, pixt1, 1, 63); } } else { /* nops even */ if (extrav > 2) { pixErodeCompBrickDwa(pixt1, pixt2, 1, extrav); pixt3 = pixErodeCompBrickDwa(NULL, pixt1, 1, 63); } else { /* they're all 63s */ pixErodeCompBrickDwa(pixt1, pixt2, 1, 63); pixt3 = pixErodeCompBrickDwa(NULL, pixt1, 1, 63); } for (i = 0; i < nops / 2 - 1; i++) { pixErodeCompBrickDwa(pixt1, pixt3, 1, 63); pixErodeCompBrickDwa(pixt3, pixt1, 1, 63); } } } pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * pixOpenCompBrickExtendDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * (1) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (2) There is no need to call this directly: pixOpenCompBrickDwa() * calls this function if either brick dimension exceeds 63. */ PIX * pixOpenCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; PROCNAME("pixOpenCompBrickExtendDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); pixt = pixErodeCompBrickExtendDwa(NULL, pixs, hsize, vsize); pixd = pixDilateCompBrickExtendDwa(pixd, pixt, hsize, vsize); pixDestroy(&pixt); return pixd; } /*! * pixCloseCompBrickExtendDwa() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * (1) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (2) There is no need to call this directly: pixCloseCompBrickDwa() * calls this function if either brick dimension exceeds 63. */ PIX * pixCloseCompBrickExtendDwa(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 bordercolor, borderx, bordery; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixCloseCompBrickExtendDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); /* For "safe closing" with ASYMMETRIC_MORPH_BC, we always need * an extra 32 OFF pixels around the image (in addition to * the 32 added pixels for all dwa operations), whereas with * SYMMETRIC_MORPH_BC this is not necessary. */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 0) { /* asymmetric b.c. */ borderx = 32 + (hsize / 64) * 32; bordery = 32 + (vsize / 64) * 32; } else /* symmetric b.c. */ borderx = bordery = 32; pixt1 = pixAddBorderGeneral(pixs, borderx, borderx, bordery, bordery, 0); pixt2 = pixDilateCompBrickExtendDwa(NULL, pixt1, hsize, vsize); pixErodeCompBrickExtendDwa(pixt1, pixt2, hsize, vsize); pixt3 = pixRemoveBorderGeneral(pixt1, borderx, borderx, bordery, bordery); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixTransferAllData(pixd, &pixt3, 0, 0); return pixd; } /*! * getExtendedCompositeParameters() * * Input: size (of linear Sel) * &pn ( number of 63 wide convolutions) * &pextra ( size of extra Sel) * &actualsize ( actual size used in operation) * Return: 0 if OK, 1 on error * * Notes: * (1) The DWA implementation allows Sels to be used with hits * up to 31 pixels from the origin, either horizontally or * vertically. Larger Sels can be used if decomposed into * a set of operations with Sels not exceeding 63 pixels * in either width or height (and with the origin as close * to the center of the Sel as possible). * (2) This returns the decomposition of a linear Sel of length * @size into a set of @n Sels of length 63 plus an extra * Sel of length @extra. * (3) For notation, let w == @size, n == @n, and e == @extra. * We have 1 < e < 63. * * Then if w < 64, we have n = 0 and e = w. * The general formula for w > 63 is: * w = 63 + (n - 1) * 62 + (e - 1) * * Where did this come from? Each successive convolution with * a Sel of length L adds a total length (L - 1) to w. * This accounts for using 62 for each additional Sel of size 63, * and using (e - 1) for the additional Sel of size e. * * Solving for n and e for w > 63: * n = 1 + Int((w - 63) / 62) * e = w - 63 - (n - 1) * 62 + 1 * * The extra part is decomposed into two factors f1 and f2, * and the actual size of the extra part is * e' = f1 * f2 * Then the actual width is: * w' = 63 + (n - 1) * 62 + f1 * f2 - 1 */ l_int32 getExtendedCompositeParameters(l_int32 size, l_int32 *pn, l_int32 *pextra, l_int32 *pactualsize) { l_int32 n, extra, fact1, fact2; PROCNAME("getExtendedCompositeParameters"); if (!pn || !pextra) return ERROR_INT("&n and &extra not both defined", procName, 1); if (size <= 63) { n = 0; extra = L_MIN(1, size); } else { /* size > 63 */ n = 1 + (l_int32)((size - 63) / 62); extra = size - 63 - (n - 1) * 62 + 1; } if (pactualsize) { selectComposableSizes(extra, &fact1, &fact2); *pactualsize = 63 + (n - 1) * 62 + fact1 * fact2 - 1; } *pn = n; *pextra = extra; return 0; } leptonica-1.70/src/enhance.c0000664000175000017500000021523412262575606014065 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * enhance.c * * Gamma TRC (tone reproduction curve) mapping * PIX *pixGammaTRC() * PIX *pixGammaTRCMasked() * PIX *pixGammaTRCWithAlpha() * NUMA *numaGammaTRC() * * Contrast enhancement * PIX *pixContrastTRC() * PIX *pixContrastTRCMasked() * NUMA *numaContrastTRC() * * Histogram equalization * PIX *pixEqualizeTRC() * NUMA *numaEqualizeTRC() * * Generic TRC mapper * PIX *pixTRCMap() * * Unsharp-masking * PIX *pixUnsharpMasking() * PIX *pixUnsharpMaskingGray() * PIX *pixUnsharpMaskingFast() * PIX *pixUnsharpMaskingGrayFast() * PIX *pixUnsharpMaskingGray1D() * PIX *pixUnsharpMaskingGray2D() * * Hue and saturation modification * PIX *pixModifyHue() * PIX *pixModifySaturation() * l_int32 pixMeasureSaturation() * PIX *pixModifyBrightness() * * Color shifting * PIX *pixColorShiftRGB() * * General multiplicative constant color transform * PIX *pixMultConstantColor() * PIX *pixMultMatrixColor() * * Edge by bandpass * PIX *pixHalfEdgeByBandpass() * * Gamma correction, contrast enhancement and histogram equalization * apply a simple mapping function to each pixel (or, for color * images, to each sample (i.e., r,g,b) of the pixel). * * - Gamma correction either lightens the image or darkens * it, depending on whether the gamma factor is greater * or less than 1.0, respectively. * * - Contrast enhancement darkens the pixels that are already * darker than the middle of the dynamic range (128) * and lightens pixels that are lighter than 128. * * - Histogram equalization remaps to have the same number * of image pixels at each of 256 intensity values. This is * a quick and dirty method of adjusting contrast and brightness * to bring out details in both light and dark regions. * * Unsharp masking is a more complicated enhancement. * A "high frequency" image, generated by subtracting * the smoothed ("low frequency") part of the image from * itself, has all the energy at the edges. This "edge image" * has 0 average value. A fraction of the edge image is * then added to the original, enhancing the differences * between pixel values at edges. Because we represent * images as l_uint8 arrays, we preserve dynamic range and * handle negative values by doing all the arithmetic on * shifted l_uint16 arrays; the l_uint8 values are recovered * at the end. * * Hue and saturation modification work in HSV space. Because * this is too large for efficient table lookup, each pixel value * is transformed to HSV, modified, and transformed back. * It's not the fastest way to do this, but the method is * easily understood. * * Unsharp masking is never in-place, and returns a clone if no * operation is to be performed. */ #include #include "allheaders.h" /* Scales contrast enhancement factor to have a useful range * between 0.0 and 1.0 */ static const l_float32 ENHANCE_SCALE_FACTOR = 5.; /* Default number of pixels sampled to determine histogram */ static const l_int32 DEFAULT_HISTO_SAMPLES = 100000; /*-------------------------------------------------------------* * Gamma TRC (tone reproduction curve) mapping * *-------------------------------------------------------------*/ /*! * pixGammaTRC() * * Input: pixd ( null or equal to pixs) * pixs (8 or 32 bpp; or 2, 4 or 8 bpp with colormap) * gamma (gamma correction; must be > 0.0) * minval (input value that gives 0 for output; can be < 0) * maxval (input value that gives 255 for output; can be > 255) * Return: pixd always * * Notes: * (1) pixd must either be null or equal to pixs. * For in-place operation, set pixd == pixs: * pixGammaTRC(pixs, pixs, ...); * To get a new image, set pixd == null: * pixd = pixGammaTRC(NULL, pixs, ...); * (2) If pixs is colormapped, the colormap is transformed, * either in-place or in a copy of pixs. * (3) We use a gamma mapping between minval and maxval. * (4) If gamma < 1.0, the image will appear darker; * if gamma > 1.0, the image will appear lighter; * (5) If gamma = 1.0 and minval = 0 and maxval = 255, no * enhancement is performed; return a copy unless in-place, * in which case this is a no-op. * (6) For color images that are not colormapped, the mapping * is applied to each component. * (7) minval and maxval are not restricted to the interval [0, 255]. * If minval < 0, an input value of 0 is mapped to a * nonzero output. This will turn black to gray. * If maxval > 255, an input value of 255 is mapped to * an output value less than 255. This will turn * white (e.g., in the background) to gray. * (8) Increasing minval darkens the image. * (9) Decreasing maxval bleaches the image. * (10) Simultaneously increasing minval and decreasing maxval * will darken the image and make the colors more intense; * e.g., minval = 50, maxval = 200. * (11) See numaGammaTRC() for further examples of use. */ PIX * pixGammaTRC(PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 d; NUMA *nag; PIXCMAP *cmap; PROCNAME("pixGammaTRC"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); gamma = 1.0; } if (minval >= maxval) return (PIX *)ERROR_PTR("minval not < maxval", procName, pixd); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); if (gamma == 1.0 && minval == 0 && maxval == 255) /* no-op */ return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if (cmap) { pixcmapGammaTRC(pixGetColormap(pixd), gamma, minval, maxval); return pixd; } /* pixd is 8 or 32 bpp */ if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return (PIX *)ERROR_PTR("nag not made", procName, pixd); pixTRCMap(pixd, NULL, nag); numaDestroy(&nag); return pixd; } /*! * pixGammaTRCMasked() * * Input: pixd ( null or equal to pixs) * pixs (8 or 32 bpp; not colormapped) * pixm ( null or 1 bpp) * gamma (gamma correction; must be > 0.0) * minval (input value that gives 0 for output; can be < 0) * maxval (input value that gives 255 for output; can be > 255) * Return: pixd always * * Notes: * (1) Same as pixGammaTRC() except mapping is optionally over * a subset of pixels described by pixm. * (2) Masking does not work for colormapped images. * (3) See pixGammaTRC() for details on how to use the parameters. */ PIX * pixGammaTRCMasked(PIX *pixd, PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 d; NUMA *nag; PROCNAME("pixGammaTRCMasked"); if (!pixm) return pixGammaTRC(pixd, pixs, gamma, minval, maxval); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("invalid: pixs has a colormap", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); if (minval >= maxval) return (PIX *)ERROR_PTR("minval not < maxval", procName, pixd); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); gamma = 1.0; } if (gamma == 1.0 && minval == 0 && maxval == 255) return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return (PIX *)ERROR_PTR("nag not made", procName, pixd); pixTRCMap(pixd, pixm, nag); numaDestroy(&nag); return pixd; } /*! * pixGammaTRCWithAlpha() * * Input: pixd ( null or equal to pixs) * pixs (32 bpp) * gamma (gamma correction; must be > 0.0) * minval (input value that gives 0 for output; can be < 0) * maxval (input value that gives 255 for output; can be > 255) * Return: pixd always * * Notes: * (1) See usage notes in pixGammaTRC(). * (2) This version saves the alpha channel. It is only valid * for 32 bpp (no colormap), and is a bit slower. */ PIX * pixGammaTRCWithAlpha(PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval) { NUMA *nag; PIX *pixalpha; PROCNAME("pixGammaTRCWithAlpha"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); gamma = 1.0; } if (minval >= maxval) return (PIX *)ERROR_PTR("minval not < maxval", procName, pixd); if (gamma == 1.0 && minval == 0 && maxval == 255) return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); pixalpha = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); /* save */ if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return (PIX *)ERROR_PTR("nag not made", procName, pixd); pixTRCMap(pixd, NULL, nag); pixSetRGBComponent(pixd, pixalpha, L_ALPHA_CHANNEL); /* restore */ pixSetSpp(pixd, 4); numaDestroy(&nag); pixDestroy(&pixalpha); return pixd; } /*! * numaGammaTRC() * * Input: gamma (gamma factor; must be > 0.0) * minval (input value that gives 0 for output) * maxval (input value that gives 255 for output) * Return: na, or null on error * * Notes: * (1) The map is returned as a numa; values are clipped to [0, 255]. * (2) To force all intensities into a range within fraction delta * of white, use: minval = -256 * (1 - delta) / delta * maxval = 255 * (3) To force all intensities into a range within fraction delta * of black, use: minval = 0 * maxval = 256 * (1 - delta) / delta */ NUMA * numaGammaTRC(l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 i, val; l_float32 x, invgamma; NUMA *na; PROCNAME("numaGammaTRC"); if (minval >= maxval) return (NUMA *)ERROR_PTR("minval not < maxval", procName, NULL); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); gamma = 1.0; } invgamma = 1. / gamma; na = numaCreate(256); for (i = 0; i < minval; i++) numaAddNumber(na, 0); for (i = minval; i <= maxval; i++) { if (i < 0) continue; if (i > 255) continue; x = (l_float32)(i - minval) / (l_float32)(maxval - minval); val = (l_int32)(255. * powf(x, invgamma) + 0.5); val = L_MAX(val, 0); val = L_MIN(val, 255); numaAddNumber(na, val); } for (i = maxval + 1; i < 256; i++) numaAddNumber(na, 255); return na; } /*-------------------------------------------------------------* * Contrast enhancement * *-------------------------------------------------------------*/ /*! * pixContrastTRC() * * Input: pixd ( null or equal to pixs) * pixs (8 or 32 bpp; or 2, 4 or 8 bpp with colormap) * factor (0.0 is no enhancement) * Return: pixd always * * Notes: * (1) pixd must either be null or equal to pixs. * For in-place operation, set pixd == pixs: * pixContrastTRC(pixs, pixs, ...); * To get a new image, set pixd == null: * pixd = pixContrastTRC(NULL, pixs, ...); * (2) If pixs is colormapped, the colormap is transformed, * either in-place or in a copy of pixs. * (3) Contrast is enhanced by mapping each color component * using an atan function with maximum slope at 127. * Pixels below 127 are lowered in intensity and pixels * above 127 are increased. * (4) The useful range for the contrast factor is scaled to * be in (0.0 to 1.0), but larger values can also be used. * (5) If factor == 0.0, no enhancement is performed; return a copy * unless in-place, in which case this is a no-op. * (6) For color images that are not colormapped, the mapping * is applied to each component. */ PIX * pixContrastTRC(PIX *pixd, PIX *pixs, l_float32 factor) { l_int32 d; NUMA *nac; PIXCMAP *cmap; PROCNAME("pixContrastTRC"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); if (factor < 0.0) { L_WARNING("factor must be >= 0.0; using 0.0\n", procName); factor = 0.0; } if (factor == 0.0) return pixCopy(pixd, pixs); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if (cmap) { pixcmapContrastTRC(pixGetColormap(pixd), factor); return pixd; } /* pixd is 8 or 32 bpp */ if ((nac = numaContrastTRC(factor)) == NULL) return (PIX *)ERROR_PTR("nac not made", procName, pixd); pixTRCMap(pixd, NULL, nac); numaDestroy(&nac); return pixd; } /*! * pixContrastTRCMasked() * * Input: pixd ( null or equal to pixs) * pixs (8 or 32 bpp; or 2, 4 or 8 bpp with colormap) * pixm ( null or 1 bpp) * factor (0.0 is no enhancement) * Return: pixd always * * Notes: * (1) Same as pixContrastTRC() except mapping is optionally over * a subset of pixels described by pixm. * (2) Masking does not work for colormapped images. * (3) See pixContrastTRC() for details on how to use the parameters. */ PIX * pixContrastTRCMasked(PIX *pixd, PIX *pixs, PIX *pixm, l_float32 factor) { l_int32 d; NUMA *nac; PROCNAME("pixContrastTRCMasked"); if (!pixm) return pixContrastTRC(pixd, pixs, factor); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("invalid: pixs has a colormap", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, pixd); if (factor < 0.0) { L_WARNING("factor must be >= 0.0; using 0.0\n", procName); factor = 0.0; } if (factor == 0.0) return pixCopy(pixd, pixs); if (!pixd) /* start with a copy if not in-place */ pixd = pixCopy(NULL, pixs); if ((nac = numaContrastTRC(factor)) == NULL) return (PIX *)ERROR_PTR("nac not made", procName, pixd); pixTRCMap(pixd, pixm, nac); numaDestroy(&nac); return pixd; } /*! * numaContrastTRC() * * Input: factor (generally between 0.0 (no enhancement) * and 1.0, but can be larger than 1.0) * Return: na, or null on error * * Notes: * (1) The mapping is monotonic increasing, where 0 is mapped * to 0 and 255 is mapped to 255. * (2) As 'factor' is increased from 0.0 (where the mapping is linear), * the map gets closer to its limit as a step function that * jumps from 0 to 255 at the center (input value = 127). */ NUMA * numaContrastTRC(l_float32 factor) { l_int32 i, val; l_float64 x, ymax, ymin, dely, scale; NUMA *na; PROCNAME("numaContrastTRC"); if (factor < 0.0) { L_WARNING("factor must be >= 0.0; using 0.0; no enhancement\n", procName); factor = 0.0; } if (factor == 0.0) return numaMakeSequence(0, 1, 256); /* linear map */ scale = ENHANCE_SCALE_FACTOR; ymax = atan((l_float64)(1.0 * factor * scale)); ymin = atan((l_float64)(-127. * factor * scale / 128.)); dely = ymax - ymin; na = numaCreate(256); for (i = 0; i < 256; i++) { x = (l_float64)i; val = (l_int32)((255. / dely) * (-ymin + atan((l_float64)(factor * scale * (x - 127.) / 128.))) + 0.5); numaAddNumber(na, val); } return na; } /*-------------------------------------------------------------* * Histogram equalization * *-------------------------------------------------------------*/ /*! * pixEqualizeTRC() * * Input: pixd ( null or equal to pixs) * pixs (8 bpp gray, 32 bpp rgb, or colormapped) * fract (fraction of equalization movement of pixel values) * factor (subsampling factor; integer >= 1) * Return: pixd, or null on error * * Notes: * (1) pixd must either be null or equal to pixs. * For in-place operation, set pixd == pixs: * pixEqualizeTRC(pixs, pixs, ...); * To get a new image, set pixd == null: * pixd = pixEqualizeTRC(NULL, pixs, ...); * (2) In histogram equalization, a tone reproduction curve * mapping is used to make the number of pixels at each * intensity equal. * (3) If fract == 0.0, no equalization is performed; return a copy * unless in-place, in which case this is a no-op. * If fract == 1.0, equalization is complete. * (4) Set the subsampling factor > 1 to reduce the amount of computation. * (5) If pixs is colormapped, the colormap is removed and * converted to rgb or grayscale. * (6) If pixs has color, equalization is done in each channel * separately. * (7) Note that even if there is a colormap, we can get an * in-place operation because the intermediate image pixt * is copied back to pixs (which for in-place is the same * as pixd). */ PIX * pixEqualizeTRC(PIX *pixd, PIX *pixs, l_float32 fract, l_int32 factor) { l_int32 d; NUMA *na; PIX *pixt, *pix8; PIXCMAP *cmap; PROCNAME("pixEqualizeTRC"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (d != 8 && d != 32 && !cmap) return (PIX *)ERROR_PTR("pixs not 8/32 bpp or cmapped", procName, NULL); if (fract < 0.0 || fract > 1.0) return (PIX *)ERROR_PTR("fract not in [0.0 ... 1.0]", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("sampling factor < 1", procName, NULL); if (fract == 0.0) return pixCopy(pixd, pixs); /* If there is a colormap, remove it. */ if (cmap) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixt = pixClone(pixs); /* Make a copy if necessary */ pixd = pixCopy(pixd, pixt); pixDestroy(&pixt); d = pixGetDepth(pixd); if (d == 8) { na = numaEqualizeTRC(pixd, fract, factor); pixTRCMap(pixd, NULL, na); numaDestroy(&na); } else { /* 32 bpp */ pix8 = pixGetRGBComponent(pixd, COLOR_RED); na = numaEqualizeTRC(pix8, fract, factor); pixTRCMap(pix8, NULL, na); pixSetRGBComponent(pixd, pix8, COLOR_RED); numaDestroy(&na); pixDestroy(&pix8); pix8 = pixGetRGBComponent(pixd, COLOR_GREEN); na = numaEqualizeTRC(pix8, fract, factor); pixTRCMap(pix8, NULL, na); pixSetRGBComponent(pixd, pix8, COLOR_GREEN); numaDestroy(&na); pixDestroy(&pix8); pix8 = pixGetRGBComponent(pixd, COLOR_BLUE); na = numaEqualizeTRC(pix8, fract, factor); pixTRCMap(pix8, NULL, na); pixSetRGBComponent(pixd, pix8, COLOR_BLUE); numaDestroy(&na); pixDestroy(&pix8); } return pixd; } /*! * numaEqualizeTRC() * * Input: pix (8 bpp, no colormap) * fract (fraction of equalization movement of pixel values) * factor (subsampling factor; integer >= 1) * Return: nad, or null on error * * Notes: * (1) If fract == 0.0, no equalization will be performed. * If fract == 1.0, equalization is complete. * (2) Set the subsampling factor > 1 to reduce the amount of computation. * (3) The map is returned as a numa with 256 values, specifying * the equalized value (array value) for every input value * (the array index). */ NUMA * numaEqualizeTRC(PIX *pix, l_float32 fract, l_int32 factor) { l_int32 iin, iout, itarg; l_float32 val, sum; NUMA *nah, *nasum, *nad; PROCNAME("numaEqualizeTRC"); if (!pix) return (NUMA *)ERROR_PTR("pix not defined", procName, NULL); if (pixGetDepth(pix) != 8) return (NUMA *)ERROR_PTR("pix not 8 bpp", procName, NULL); if (fract < 0.0 || fract > 1.0) return (NUMA *)ERROR_PTR("fract not in [0.0 ... 1.0]", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); if (fract == 0.0) L_WARNING("fract = 0.0; no equalization requested\n", procName); if ((nah = pixGetGrayHistogram(pix, factor)) == NULL) return (NUMA *)ERROR_PTR("histogram not made", procName, NULL); numaGetSum(nah, &sum); nasum = numaGetPartialSums(nah); nad = numaCreate(256); for (iin = 0; iin < 256; iin++) { numaGetFValue(nasum, iin, &val); itarg = (l_int32)(255. * val / sum + 0.5); iout = iin + (l_int32)(fract * (itarg - iin)); iout = L_MIN(iout, 255); /* to be safe */ numaAddNumber(nad, iout); } numaDestroy(&nah); numaDestroy(&nasum); return nad; } /*-------------------------------------------------------------* * Generic TRC mapping * *-------------------------------------------------------------*/ /*! * pixTRCMap() * * Input: pixs (8 grayscale or 32 bpp rgb; not colormapped) * pixm ( 1 bpp mask) * na (mapping array) * Return: pixd, or null on error * * Notes: * (1) This operation is in-place on pixs. * (2) For 32 bpp, this applies the same map to each of the r,g,b * components. * (3) The mapping array is of size 256, and it maps the input * index into values in the range [0, 255]. * (4) If defined, the optional 1 bpp mask pixm has its origin * aligned with pixs, and the map function is applied only * to pixels in pixs under the fg of pixm. * (5) For 32 bpp, this does not save the alpha channel. */ l_int32 pixTRCMap(PIX *pixs, PIX *pixm, NUMA *na) { l_int32 w, h, d, wm, hm, wpl, wplm, i, j, sval8, dval8; l_int32 *tab; l_uint32 sval32, dval32; l_uint32 *data, *datam, *line, *linem; PROCNAME("pixTRCMap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); if (numaGetCount(na) != 256) return ERROR_INT("na not of size 256", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); if (pixm) { if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); } tab = numaGetIArray(na); /* get the array for efficiency */ wpl = pixGetWpl(pixs); data = pixGetData(pixs); if (!pixm) { if (d == 8) { for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { sval8 = GET_DATA_BYTE(line, j); dval8 = tab[sval8]; SET_DATA_BYTE(line, j, dval8); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { sval32 = *(line + j); dval32 = tab[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | tab[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | tab[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; *(line + j) = dval32; } } } } else { datam = pixGetData(pixm); wplm = pixGetWpl(pixm); pixGetDimensions(pixm, &wm, &hm, NULL); if (d == 8) { for (i = 0; i < h; i++) { if (i >= hm) break; line = data + i * wpl; linem = datam + i * wplm; for (j = 0; j < w; j++) { if (j >= wm) break; if (GET_DATA_BIT(linem, j) == 0) continue; sval8 = GET_DATA_BYTE(line, j); dval8 = tab[sval8]; SET_DATA_BYTE(line, j, dval8); } } } else { /* d == 32 */ for (i = 0; i < h; i++) { if (i >= hm) break; line = data + i * wpl; linem = datam + i * wplm; for (j = 0; j < w; j++) { if (j >= wm) break; if (GET_DATA_BIT(linem, j) == 0) continue; sval32 = *(line + j); dval32 = tab[(sval32 >> L_RED_SHIFT) & 0xff] << L_RED_SHIFT | tab[(sval32 >> L_GREEN_SHIFT) & 0xff] << L_GREEN_SHIFT | tab[(sval32 >> L_BLUE_SHIFT) & 0xff] << L_BLUE_SHIFT; *(line + j) = dval32; } } } } FREE(tab); return 0; } /*-----------------------------------------------------------------------* * Unsharp masking * *-----------------------------------------------------------------------*/ /*! * pixUnsharpMasking() * * Input: pixs (all depths except 1 bpp; with or without colormaps) * halfwidth ("half-width" of smoothing filter) * fract (fraction of edge added back into image) * Return: pixd, or null on error * * Notes: * (1) We use symmetric smoothing filters of odd dimension, * typically use sizes of 3, 5, 7, etc. The @halfwidth parameter * for these is (size - 1)/2; i.e., 1, 2, 3, etc. * (2) The fract parameter is typically taken in the * range: 0.2 < fract < 0.7 * (3) Returns a clone if no sharpening is requested. */ PIX * pixUnsharpMasking(PIX *pixs, l_int32 halfwidth, l_float32 fract) { l_int32 d; PIX *pixt, *pixd, *pixr, *pixrs, *pixg, *pixgs, *pixb, *pixbs; PROCNAME("pixUnsharpMasking"); if (!pixs || (pixGetDepth(pixs) == 1)) return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", procName, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", procName); return pixClone(pixs); } if (halfwidth == 1 || halfwidth == 2) return pixUnsharpMaskingFast(pixs, halfwidth, fract, L_BOTH_DIRECTIONS); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pixt = pixConvertTo8Or32(pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); /* Sharpen */ d = pixGetDepth(pixt); if (d == 8) { pixd = pixUnsharpMaskingGray(pixt, halfwidth, fract); } else { /* d == 32 */ pixr = pixGetRGBComponent(pixs, COLOR_RED); pixrs = pixUnsharpMaskingGray(pixr, halfwidth, fract); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixgs = pixUnsharpMaskingGray(pixg, halfwidth, fract); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixbs = pixUnsharpMaskingGray(pixb, halfwidth, fract); pixDestroy(&pixb); pixd = pixCreateRGBImage(pixrs, pixgs, pixbs); pixDestroy(&pixrs); pixDestroy(&pixgs); pixDestroy(&pixbs); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); } pixDestroy(&pixt); return pixd; } /*! * pixUnsharpMaskingGray() * * Input: pixs (8 bpp; no colormap) * halfwidth ("half-width" of smoothing filter) * fract (fraction of edge added back into image) * Return: pixd, or null on error * * Notes: * (1) We use symmetric smoothing filters of odd dimension, * typically use sizes of 3, 5, 7, etc. The @halfwidth parameter * for these is (size - 1)/2; i.e., 1, 2, 3, etc. * (2) The fract parameter is typically taken in the range: * 0.2 < fract < 0.7 * (3) Returns a clone if no sharpening is requested. */ PIX * pixUnsharpMaskingGray(PIX *pixs, l_int32 halfwidth, l_float32 fract) { l_int32 w, h, d; PIX *pixc, *pixd; PIXACC *pixacc; PROCNAME("pixUnsharpMaskingGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", procName); return pixClone(pixs); } if (halfwidth == 1 || halfwidth == 2) return pixUnsharpMaskingGrayFast(pixs, halfwidth, fract, L_BOTH_DIRECTIONS); if ((pixc = pixBlockconvGray(pixs, NULL, halfwidth, halfwidth)) == NULL) return (PIX *)ERROR_PTR("pixc not made", procName, NULL); /* Steps: * (1) edge image is pixs - pixc (this is highpass part) * (2) multiply edge image by fract * (3) add fraction of edge to pixs * * To show how this is done with both interfaces to arithmetic * on integer Pix, here is the implementation in the lower-level * function calls: * pixt = pixInitAccumulate(w, h, 0x10000000)) == NULL) * pixAccumulate(pixt, pixs, L_ARITH_ADD); * pixAccumulate(pixt, pixc, L_ARITH_SUBTRACT); * pixMultConstAccumulate(pixt, fract, 0x10000000); * pixAccumulate(pixt, pixs, L_ARITH_ADD); * pixd = pixFinalAccumulate(pixt, 0x10000000, 8)) == NULL) * pixDestroy(&pixt); * * The code below does the same thing using the Pixacc accumulator, * hiding the details of the offset that is needed for subtraction. */ pixacc = pixaccCreate(w, h, 1); pixaccAdd(pixacc, pixs); pixaccSubtract(pixacc, pixc); pixaccMultConst(pixacc, fract); pixaccAdd(pixacc, pixs); pixd = pixaccFinal(pixacc, 8); pixaccDestroy(&pixacc); pixDestroy(&pixc); return pixd; } /*! * pixUnsharpMaskingFast() * * Input: pixs (all depths except 1 bpp; with or without colormaps) * halfwidth ("half-width" of smoothing filter; 1 and 2 only) * fract (fraction of high frequency added to image) * direction (L_HORIZ, L_VERT, L_BOTH_DIRECTIONS) * Return: pixd, or null on error * * Notes: * (1) The fast version uses separable 1-D filters directly on * the input image. The halfwidth is either 1 (full width = 3) * or 2 (full width = 5). * (2) The fract parameter is typically taken in the * range: 0.2 < fract < 0.7 * (3) To skip horizontal sharpening, use @fracth = 0.0; ditto for @fractv * (4) For one dimensional filtering (as an example): * For @halfwidth = 1, the low-pass filter is * L: 1/3 1/3 1/3 * and the high-pass filter is * H = I - L: -1/3 2/3 -1/3 * For @halfwidth = 2, the low-pass filter is * L: 1/5 1/5 1/5 1/5 1/5 * and the high-pass filter is * H = I - L: -1/5 -1/5 4/5 -1/5 -1/5 * The new sharpened pixel value is found by adding some fraction * of the high-pass filter value (which sums to 0) to the * initial pixel value: * N = I + fract * H * (5) For 2D, the sharpening filter is not separable, because the * vertical filter depends on the horizontal location relative * to the filter origin, and v.v. So we either do the full * 2D filter (for @halfwidth == 1) or do the low-pass * convolution separably and then compose with the original pix. * (6) Returns a clone if no sharpening is requested. */ PIX * pixUnsharpMaskingFast(PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction) { l_int32 d; PIX *pixt, *pixd, *pixr, *pixrs, *pixg, *pixgs, *pixb, *pixbs; PROCNAME("pixUnsharpMaskingFast"); if (!pixs || (pixGetDepth(pixs) == 1)) return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", procName, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", procName); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); if (direction != L_HORIZ && direction != L_VERT && direction != L_BOTH_DIRECTIONS) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pixt = pixConvertTo8Or32(pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); /* Sharpen */ d = pixGetDepth(pixt); if (d == 8) { pixd = pixUnsharpMaskingGrayFast(pixt, halfwidth, fract, direction); } else { /* d == 32 */ pixr = pixGetRGBComponent(pixs, COLOR_RED); pixrs = pixUnsharpMaskingGrayFast(pixr, halfwidth, fract, direction); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixgs = pixUnsharpMaskingGrayFast(pixg, halfwidth, fract, direction); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixbs = pixUnsharpMaskingGrayFast(pixb, halfwidth, fract, direction); pixDestroy(&pixb); pixd = pixCreateRGBImage(pixrs, pixgs, pixbs); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); pixDestroy(&pixrs); pixDestroy(&pixgs); pixDestroy(&pixbs); } pixDestroy(&pixt); return pixd; } /*! * pixUnsharpMaskingGrayFast() * * Input: pixs (8 bpp; no colormap) * halfwidth ("half-width" of smoothing filter: 1 or 2) * fract (fraction of high frequency added to image) * direction (L_HORIZ, L_VERT, L_BOTH_DIRECTIONS) * Return: pixd, or null on error * * Notes: * (1) For usage and explanation of the algorithm, see notes * in pixUnsharpMaskingFast(). * (2) Returns a clone if no sharpening is requested. */ PIX * pixUnsharpMaskingGrayFast(PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction) { PIX *pixd; PROCNAME("pixUnsharpMaskingGrayFast"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", procName); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); if (direction != L_HORIZ && direction != L_VERT && direction != L_BOTH_DIRECTIONS) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); if (direction != L_BOTH_DIRECTIONS) pixd = pixUnsharpMaskingGray1D(pixs, halfwidth, fract, direction); else /* 2D sharpening */ pixd = pixUnsharpMaskingGray2D(pixs, halfwidth, fract); return pixd; } /*! * pixUnsharpMaskingGray1D() * * Input: pixs (8 bpp; no colormap) * halfwidth ("half-width" of smoothing filter: 1 or 2) * fract (fraction of high frequency added to image) * direction (of filtering; use L_HORIZ or L_VERT) * Return: pixd, or null on error * * Notes: * (1) For usage and explanation of the algorithm, see notes * in pixUnsharpMaskingFast(). * (2) Returns a clone if no sharpening is requested. */ PIX * pixUnsharpMaskingGray1D(PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction) { l_int32 w, h, d, wpls, wpld, i, j, ival; l_uint32 *datas, *datad; l_uint32 *lines, *lines0, *lines1, *lines2, *lines3, *lines4, *lined; l_float32 val, a[5]; PIX *pixd; PROCNAME("pixUnsharpMaskingGray1D"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", procName); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); /* Initialize pixd with pixels from pixs that will not be * set when computing the sharpened values. */ pixd = pixCopyBorder(NULL, pixs, halfwidth, halfwidth, halfwidth, halfwidth); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (halfwidth == 1) { a[0] = -fract / 3.0; a[1] = 1.0 + fract * 2.0 / 3.0; a[2] = a[0]; } else { /* halfwidth == 2 */ a[0] = -fract / 5.0; a[1] = a[0]; a[2] = 1.0 + fract * 4.0 / 5.0; a[3] = a[0]; a[4] = a[0]; } if (direction == L_HORIZ) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (halfwidth == 1) { for (j = 1; j < w - 1; j++) { val = a[0] * GET_DATA_BYTE(lines, j - 1) + a[1] * GET_DATA_BYTE(lines, j) + a[2] * GET_DATA_BYTE(lines, j + 1); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } else { /* halfwidth == 2 */ for (j = 2; j < w - 2; j++) { val = a[0] * GET_DATA_BYTE(lines, j - 2) + a[1] * GET_DATA_BYTE(lines, j - 1) + a[2] * GET_DATA_BYTE(lines, j) + a[3] * GET_DATA_BYTE(lines, j + 1) + a[4] * GET_DATA_BYTE(lines, j + 2); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } } else { /* direction == L_VERT */ if (halfwidth == 1) { for (i = 1; i < h - 1; i++) { lines0 = datas + (i - 1) * wpls; lines1 = datas + i * wpls; lines2 = datas + (i + 1) * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = a[0] * GET_DATA_BYTE(lines0, j) + a[1] * GET_DATA_BYTE(lines1, j) + a[2] * GET_DATA_BYTE(lines2, j); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } else { /* halfwidth == 2 */ for (i = 2; i < h - 2; i++) { lines0 = datas + (i - 2) * wpls; lines1 = datas + (i - 1) * wpls; lines2 = datas + i * wpls; lines3 = datas + (i + 1) * wpls; lines4 = datas + (i + 2) * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = a[0] * GET_DATA_BYTE(lines0, j) + a[1] * GET_DATA_BYTE(lines1, j) + a[2] * GET_DATA_BYTE(lines2, j) + a[3] * GET_DATA_BYTE(lines3, j) + a[4] * GET_DATA_BYTE(lines4, j); ival = (l_int32)val; ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } } } return pixd; } /*! * pixUnsharpMaskingGray2D() * * Input: pixs (8 bpp; no colormap) * halfwidth ("half-width" of smoothing filter: 1 or 2) * fract (fraction of high frequency added to image) * Return: pixd, or null on error * * Notes: * (1) For halfwidth == 1, we implement the full sharpening filter * directly. For halfwidth == 2, we implement the the lowpass * filter separably and then compute the sharpening result locally. * (2) Returns a clone if no sharpening is requested. */ PIX * pixUnsharpMaskingGray2D(PIX *pixs, l_int32 halfwidth, l_float32 fract) { l_int32 w, h, d, wpls, wpld, wplf, i, j, ival, sval; l_uint32 *datas, *datad, *lines, *lines0, *lines1, *lines2, *lined; l_float32 val, a[9]; l_float32 *dataf, *linef, *linef0, *linef1, *linef2, *linef3, *linef4; PIX *pixd; FPIX *fpix; PROCNAME("pixUnsharpMaskingGray2D"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs not 8 bpp or has cmap", procName, NULL); if (fract <= 0.0 || halfwidth <= 0) { L_WARNING("no sharpening requested; clone returned\n", procName); return pixClone(pixs); } if (halfwidth != 1 && halfwidth != 2) return (PIX *)ERROR_PTR("halfwidth must be 1 or 2", procName, NULL); pixd = pixCopyBorder(NULL, pixs, halfwidth, halfwidth, halfwidth, halfwidth); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (halfwidth == 1) { for (i = 0; i < 9; i++) a[i] = -fract / 9.0; a[4] = 1.0 + fract * 8.0 / 9.0; for (i = 1; i < h - 1; i++) { lines0 = datas + (i - 1) * wpls; lines1 = datas + i * wpls; lines2 = datas + (i + 1) * wpls; lined = datad + i * wpld; for (j = 1; j < w - 1; j++) { val = a[0] * GET_DATA_BYTE(lines0, j - 1) + a[1] * GET_DATA_BYTE(lines0, j) + a[2] * GET_DATA_BYTE(lines0, j + 1) + a[3] * GET_DATA_BYTE(lines1, j - 1) + a[4] * GET_DATA_BYTE(lines1, j) + a[5] * GET_DATA_BYTE(lines1, j + 1) + a[6] * GET_DATA_BYTE(lines2, j - 1) + a[7] * GET_DATA_BYTE(lines2, j) + a[8] * GET_DATA_BYTE(lines2, j + 1); ival = (l_int32)(val + 0.5); ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } return pixd; } /* For halfwidth == 2, do the low pass separably. Store * the result of horizontal smoothing in an intermediate fpix. */ fpix = fpixCreate(w, h); dataf = fpixGetData(fpix); wplf = fpixGetWpl(fpix); for (i = 2; i < h - 2; i++) { lines = datas + i * wpls; linef = dataf + i * wplf; for (j = 2; j < w - 2; j++) { val = GET_DATA_BYTE(lines, j - 2) + GET_DATA_BYTE(lines, j - 1) + GET_DATA_BYTE(lines, j) + GET_DATA_BYTE(lines, j + 1) + GET_DATA_BYTE(lines, j + 2); linef[j] = val; } } /* Do vertical smoothing to finish the low-pass filter. * At each pixel, if L is the lowpass value, I is the * src pixel value and f is the fraction of highpass to * be added to I, then the highpass filter value is * H = I - L * and the new sharpened value is * N = I + f * H. */ for (i = 2; i < h - 2; i++) { linef0 = dataf + (i - 2) * wplf; linef1 = dataf + (i - 1) * wplf; linef2 = dataf + i * wplf; linef3 = dataf + (i + 1) * wplf; linef4 = dataf + (i + 2) * wplf; lined = datad + i * wpld; lines = datas + i * wpls; for (j = 2; j < w - 2; j++) { val = 0.04 * (linef0[j] + linef1[j] + linef2[j] + linef3[j] + linef4[j]); /* L: lowpass filter value */ sval = GET_DATA_BYTE(lines, j); /* I: source pixel */ ival = (l_int32)(sval + fract * (sval - val) + 0.5); ival = L_MAX(0, ival); ival = L_MIN(255, ival); SET_DATA_BYTE(lined, j, ival); } } fpixDestroy(&fpix); return pixd; } /*-----------------------------------------------------------------------* * Hue and saturation modification * *-----------------------------------------------------------------------*/ /*! * pixModifyHue() * * Input: pixd ( can be null or equal to pixs) * pixs (32 bpp rgb) * fract (between -1.0 and 1.0) * Return: pixd, or null on error * * Notes: * (1) pixd must either be null or equal to pixs. * For in-place operation, set pixd == pixs: * pixEqualizeTRC(pixs, pixs, ...); * To get a new image, set pixd == null: * pixd = pixEqualizeTRC(NULL, pixs, ...); * (1) Use fract > 0.0 to increase hue value; < 0.0 to decrease it. * 1.0 (or -1.0) represents a 360 degree rotation; i.e., no change. * (2) If no modification is requested (fract = -1.0 or 0 or 1.0), * return a copy unless in-place, in which case this is a no-op. * (3) See discussion of color-modification methods, in coloring.c. */ PIX * pixModifyHue(PIX *pixd, PIX *pixs, l_float32 fract) { l_int32 w, h, d, i, j, wpl, delhue; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; PROCNAME("pixModifyHue"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs colormapped", procName, NULL); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or pixs", procName, pixd); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (L_ABS(fract) > 1.0) return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", procName, NULL); pixd = pixCopy(pixd, pixs); delhue = (l_int32)(240 * fract); if (delhue == 0 || delhue == 240 || delhue == -240) { L_WARNING("no change requested in hue\n", procName); return pixd; } if (delhue < 0) delhue += 240; data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); hval = (hval + delhue) % 240; convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); return pixd; } /*! * pixModifySaturation() * * Input: pixd ( can be null, existing or equal to pixs) * pixs (32 bpp rgb) * fract (between -1.0 and 1.0) * Return: pixd, or null on error * * Notes: * (1) If fract > 0.0, it gives the fraction that the pixel * saturation is moved from its initial value toward 255. * If fract < 0.0, it gives the fraction that the pixel * saturation is moved from its initial value toward 0. * The limiting values for fract = -1.0 (1.0) thus set the * saturation to 0 (255). * (2) If fract = 0, no modification is requested; return a copy * unless in-place, in which case this is a no-op. * (3) See discussion of color-modification methods, in coloring.c. */ PIX * pixModifySaturation(PIX *pixd, PIX *pixs, l_float32 fract) { l_int32 w, h, d, i, j, wpl; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; PROCNAME("pixModifySaturation"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (L_ABS(fract) > 1.0) return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", procName, NULL); pixd = pixCopy(pixd, pixs); if (fract == 0.0) { L_WARNING("no change requested in saturation\n", procName); return pixd; } data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); if (fract < 0.0) sval = (l_int32)(sval * (1.0 + fract)); else sval = (l_int32)(sval + fract * (255 - sval)); convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); return pixd; } /*! * pixMeasureSaturation() * * Input: pixs (32 bpp rgb) * factor (subsampling factor; integer >= 1) * &sat ( average saturation) * Return: pixd, or null on error */ l_int32 pixMeasureSaturation(PIX *pixs, l_int32 factor, l_float32 *psat) { l_int32 w, h, d, i, j, wpl, sum, count; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; PROCNAME("pixMeasureSaturation"); if (!psat) return ERROR_INT("pixs not defined", procName, 1); *psat = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (factor < 1) return ERROR_INT("subsampling factor < 1", procName, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0, sum = 0, count = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); sum += sval; count++; } } if (count > 0) *psat = (l_float32)sum / (l_float32)count; return 0; } /*! * pixModifyBrightness() * * Input: pixd ( can be null, existing or equal to pixs) * pixs (32 bpp rgb) * fract (between -1.0 and 1.0) * Return: pixd, or null on error * * Notes: * (1) If fract > 0.0, it gives the fraction that the v-parameter, * which is max(r,g,b), is moved from its initial value toward 255. * If fract < 0.0, it gives the fraction that the v-parameter * is moved from its initial value toward 0. * The limiting values for fract = -1.0 (1.0) thus set the * v-parameter to 0 (255). * (2) If fract = 0, no modification is requested; return a copy * unless in-place, in which case this is a no-op. * (3) See discussion of color-modification methods, in coloring.c. */ PIX * pixModifyBrightness(PIX *pixd, PIX *pixs, l_float32 fract) { l_int32 w, h, d, i, j, wpl; l_int32 rval, gval, bval, hval, sval, vval; l_uint32 *data, *line; PROCNAME("pixModifyBrightness"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (L_ABS(fract) > 1.0) return (PIX *)ERROR_PTR("fract not in [-1.0 ... 1.0]", procName, NULL); pixd = pixCopy(pixd, pixs); if (fract == 0.0) { L_WARNING("no change requested in brightness\n", procName); return pixd; } data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); convertRGBToHSV(rval, gval, bval, &hval, &sval, &vval); if (fract > 0.0) vval = (l_int32)(vval + fract * (255.0 - vval)); else vval = (l_int32)(vval * (1.0 + fract)); convertHSVToRGB(hval, sval, vval, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, line + j); } } if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 1.0, 1.0); return pixd; } /*-----------------------------------------------------------------------* * Color shifting * *-----------------------------------------------------------------------*/ /*! * pixColorShiftRGB() * * Input: pixs (32 bpp rgb) * rfract (fractional shift in red component) * gfract (fractional shift in green component) * bfract (fractional shift in blue component) * Return: pixd, or null on error * * Notes: * (1) This allows independent fractional shifts of the r,g and b * components. A positive shift pushes to saturation (255); * a negative shift pushes toward 0 (black). * (2) The effect can be imagined using a color wheel that consists * (for our purposes) of these 6 colors, separated by 60 degrees: * red, magenta, blue, cyan, green, yellow * (3) So, for example, a negative shift of the blue component * (bfract < 0) could be accompanied by positive shifts * of red and green to make an image more yellow. * (4) Examples of limiting cases: * rfract = 1 ==> r = 255 * rfract = -1 ==> r = 0 */ PIX * pixColorShiftRGB(PIX *pixs, l_float32 rfract, l_float32 gfract, l_float32 bfract) { l_int32 w, h, i, j, wpls, wpld, rval, gval, bval; l_int32 *rlut, *glut, *blut; l_uint32 *datas, *datad, *lines, *lined; l_float32 fi; PIX *pixd; PROCNAME("pixColorShiftRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (rfract < -1.0 || rfract > 1.0) return (PIX *)ERROR_PTR("rfract not in [-1.0,...,1.0]", procName, NULL); if (gfract < -1.0 || gfract > 1.0) return (PIX *)ERROR_PTR("gfract not in [-1.0,...,1.0]", procName, NULL); if (bfract < -1.0 || bfract > 1.0) return (PIX *)ERROR_PTR("bfract not in [-1.0,...,1.0]", procName, NULL); if (rfract == 0.0 && gfract == 0.0 && bfract == 0.0) return pixCopy(NULL, pixs); rlut = (l_int32 *)CALLOC(256, sizeof(l_int32)); glut = (l_int32 *)CALLOC(256, sizeof(l_int32)); blut = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { fi = i; if (rfract >= 0) { rlut[i] = (l_int32)(fi + (255.0 - fi) * rfract); } else { rlut[i] = (l_int32)(fi * (1.0 + rfract)); } if (gfract >= 0) { glut[i] = (l_int32)(fi + (255.0 - fi) * gfract); } else { glut[i] = (l_int32)(fi * (1.0 + gfract)); } if (bfract >= 0) { blut[i] = (l_int32)(fi + (255.0 - fi) * bfract); } else { blut[i] = (l_int32)(fi * (1.0 + bfract)); } } pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreate(w, h, 32); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); composeRGBPixel(rlut[rval], glut[gval], blut[bval], lined + j); } } FREE(rlut); FREE(glut); FREE(blut); return pixd; } /*-----------------------------------------------------------------------* * General multiplicative constant color transform * *-----------------------------------------------------------------------*/ /* * pixMultConstantColor() * * Input: pixs (colormapped or rgb) * rfact, gfact, bfact (multiplicative factors on each component) * Return: pixd (colormapped or rgb, with colors scaled), or null on error * * Notes: * (1) rfact, gfact and bfact can only have non-negative values. * They can be greater than 1.0. All transformed component * values are clipped to the interval [0, 255]. * (2) For multiplication with a general 3x3 matrix of constants, * use pixMultMatrixColor(). */ PIX * pixMultConstantColor(PIX *pixs, l_float32 rfact, l_float32 gfact, l_float32 bfact) { l_int32 i, j, w, h, d, wpls, wpld; l_int32 ncolors, rval, gval, bval, nrval, ngval, nbval; l_uint32 nval; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixMultConstantColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); rfact = L_MAX(0.0, rfact); gfact = L_MAX(0.0, gfact); bfact = L_MAX(0.0, bfact); if (cmap) { if ((pixd = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmap = pixGetColormap(pixd); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); nrval = (l_int32)(rfact * rval); ngval = (l_int32)(gfact * gval); nbval = (l_int32)(bfact * bval); nrval = L_MIN(255, nrval); ngval = L_MIN(255, ngval); nbval = L_MIN(255, nbval); pixcmapResetColor(cmap, i, nrval, ngval, nbval); } return pixd; } if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); nrval = (l_int32)(rfact * rval); ngval = (l_int32)(gfact * gval); nbval = (l_int32)(bfact * bval); nrval = L_MIN(255, nrval); ngval = L_MIN(255, ngval); nbval = L_MIN(255, nbval); composeRGBPixel(nrval, ngval, nbval, &nval); *(lined + j) = nval; } } return pixd; } /* * pixMultMatrixColor() * * Input: pixs (colormapped or rgb) * kernel (3x3 matrix of floats) * Return: pixd (colormapped or rgb), or null on error * * Notes: * (1) The kernel is a data structure used mostly for floating point * convolution. Here it is a 3x3 matrix of floats that are used * to transform the pixel values by matrix multiplication: * nrval = a[0,0] * rval + a[0,1] * gval + a[0,2] * bval * ngval = a[1,0] * rval + a[1,1] * gval + a[1,2] * bval * nbval = a[2,0] * rval + a[2,1] * gval + a[2,2] * bval * (2) The matrix can be generated in several ways. * See kernel.c for details. Here are two of them: * (a) kel = kernelCreate(3, 3); * kernelSetElement(kel, 0, 0, val00); * kernelSetElement(kel, 0, 1, val01); * ... * (b) from a static string; e.g.,: * const char *kdata = " 0.6 0.3 -0.2 " * " 0.1 1.2 0.4 " * " -0.4 0.2 0.9 "; * kel = kernelCreateFromString(3, 3, 0, 0, kdata); * (3) For the special case where the matrix is diagonal, it is easier * to use pixMultConstantColor(). * (4) Matrix entries can have positive and negative values, and can * be larger than 1.0. All transformed component values * are clipped to [0, 255]. */ PIX * pixMultMatrixColor(PIX *pixs, L_KERNEL *kel) { l_int32 i, j, index, kw, kh, w, h, d, wpls, wpld; l_int32 ncolors, rval, gval, bval, nrval, ngval, nbval; l_uint32 nval; l_uint32 *datas, *datad, *lines, *lined; l_float32 v[9]; /* use linear array for convenience */ PIX *pixd; PIXCMAP *cmap; PROCNAME("pixMultMatrixColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!kel) return (PIX *)ERROR_PTR("kel not defined", procName, NULL); kernelGetParameters(kel, &kw, &kh, NULL, NULL); if (kw != 3 || kh != 3) return (PIX *)ERROR_PTR("matrix not 3x3", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); for (i = 0, index = 0; i < 3; i++) for (j = 0; j < 3; j++, index++) kernelGetElement(kel, i, j, v + index); if (cmap) { if ((pixd = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmap = pixGetColormap(pixd); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); nrval = (l_int32)(v[0] * rval + v[1] * gval + v[2] * bval); ngval = (l_int32)(v[3] * rval + v[4] * gval + v[5] * bval); nbval = (l_int32)(v[6] * rval + v[7] * gval + v[8] * bval); nrval = L_MAX(0, L_MIN(255, nrval)); ngval = L_MAX(0, L_MIN(255, ngval)); nbval = L_MAX(0, L_MIN(255, nbval)); pixcmapResetColor(cmap, i, nrval, ngval, nbval); } return pixd; } if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); nrval = (l_int32)(v[0] * rval + v[1] * gval + v[2] * bval); ngval = (l_int32)(v[3] * rval + v[4] * gval + v[5] * bval); nbval = (l_int32)(v[6] * rval + v[7] * gval + v[8] * bval); nrval = L_MAX(0, L_MIN(255, nrval)); ngval = L_MAX(0, L_MIN(255, ngval)); nbval = L_MAX(0, L_MIN(255, nbval)); composeRGBPixel(nrval, ngval, nbval, &nval); *(lined + j) = nval; } } return pixd; } /*-------------------------------------------------------------* * Half-edge by bandpass * *-------------------------------------------------------------*/ /*! * pixHalfEdgeByBandpass() * * Input: pixs (8 bpp gray or 32 bpp rgb) * sm1h, sm1v ("half-widths" of smoothing filter sm1) * sm2h, sm2v ("half-widths" of smoothing filter sm2) * (require sm2 != sm1) * Return: pixd, or null on error * * Notes: * (1) We use symmetric smoothing filters of odd dimension, * typically use 3, 5, 7, etc. The smoothing parameters * for these are 1, 2, 3, etc. The filter size is related * to the smoothing parameter by * size = 2 * smoothing + 1 * (2) Because we take the difference of two lowpass filters, * this is actually a bandpass filter. * (3) We allow both filters to be anisotropic. * (4) Consider either the h or v component of the 2 filters. * Depending on whether sm1 > sm2 or sm2 > sm1, we get * different halves of the smoothed gradients (or "edges"). * This difference of smoothed signals looks more like * a second derivative of a transition, which we rectify * by not allowing the signal to go below zero. If sm1 < sm2, * the sm2 transition is broader, so the difference between * sm1 and sm2 signals is positive on the upper half of * the transition. Likewise, if sm1 > sm2, the sm1 - sm2 * signal difference is positive on the lower half of * the transition. */ PIX * pixHalfEdgeByBandpass(PIX *pixs, l_int32 sm1h, l_int32 sm1v, l_int32 sm2h, l_int32 sm2v) { l_int32 d; PIX *pixg, *pixacc, *pixc1, *pixc2; PROCNAME("pixHalfEdgeByBandpass"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (sm1h == sm2h && sm1v == sm2v) return (PIX *)ERROR_PTR("sm2 = sm1", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (d == 32) pixg = pixConvertRGBToLuminance(pixs); else /* d == 8 */ pixg = pixClone(pixs); /* Make a convolution accumulator and use it twice */ if ((pixacc = pixBlockconvAccum(pixg)) == NULL) return (PIX *)ERROR_PTR("pixacc not made", procName, NULL); if ((pixc1 = pixBlockconvGray(pixg, pixacc, sm1h, sm1v)) == NULL) return (PIX *)ERROR_PTR("pixc1 not made", procName, NULL); if ((pixc2 = pixBlockconvGray(pixg, pixacc, sm2h, sm2v)) == NULL) return (PIX *)ERROR_PTR("pixc2 not made", procName, NULL); pixDestroy(&pixacc); /* Compute the half-edge using pixc1 - pixc2. */ pixSubtractGray(pixc1, pixc1, pixc2); pixDestroy(&pixg); pixDestroy(&pixc2); return pixc1; } leptonica-1.70/src/readfile.c0000640000175000017500000011346712265645112014227 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * readfile.c: reads image on file into memory * * Top-level functions for reading images from file * PIXA *pixaReadFiles() * PIXA *pixaReadFilesSA() * PIX *pixRead() * PIX *pixReadWithHint() * PIX *pixReadIndexed() * PIX *pixReadStream() * * Read header information from file * l_int32 pixReadHeader() * * Format finders * l_int32 findFileFormat() * l_int32 findFileFormatStream() * l_int32 findFileFormatBuffer() * l_int32 fileFormatIsTiff() * * Read from memory * PIX *pixReadMem() * l_int32 pixReadHeaderMem() * * Test function for I/O with different formats * l_int32 ioFormatTest() * * Supported file formats: * (1) Reading is supported without any external libraries: * bmp * pnm (including pbm, pgm, etc) * spix (raw serialized) * (2) Reading is supported with installation of external libraries: * png * jpg (standard jfif version) * tiff (including most varieties of compression) * gif * webp * (3) This file format is recognized by the library but reading * is not supported: * jp2 (jpeg2000) * (4) All other file types will get an "unknown format" error. */ #include #include "allheaders.h" /* choose type of PIX to be generated */ enum { READ_24_BIT_COLOR = 0, /* read in as 24 (really 32) bit pix */ CONVERT_TO_PALETTE = 1, /* convert to 8 bit colormapped pix */ READ_GRAY = 2 /* read gray only */ }; /* Output files for ioFormatTest(). * Note that the test for jpeg is not yet implemented */ static const char *FILE_BMP = "/tmp/junkout.bmp"; static const char *FILE_PNG = "/tmp/junkout.png"; static const char *FILE_PNM = "/tmp/junkout.pnm"; static const char *FILE_G3 = "/tmp/junkout_g3.tif"; static const char *FILE_G4 = "/tmp/junkout_g4.tif"; static const char *FILE_RLE = "/tmp/junkout_rle.tif"; static const char *FILE_PB = "/tmp/junkout_packbits.tif"; static const char *FILE_LZW = "/tmp/junkout_lzw.tif"; static const char *FILE_ZIP = "/tmp/junkout_zip.tif"; static const char *FILE_TIFF = "/tmp/junkout.tif"; static const char *FILE_JPG = "/tmp/junkout.jpg"; /* I found these from the source code to the unix file */ /* command. man 1 file */ static const unsigned char JP2K_CODESTREAM[4] = { 0xff, 0x4f, 0xff, 0x51 }; static const unsigned char JP2K_IMAGE_DATA[12] = { 0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A }; /*---------------------------------------------------------------------* * Top-level functions for reading images from file * *---------------------------------------------------------------------*/ /*! * pixaReadFiles() * * Input: dirname * substr ( substring filter on filenames; can be null) * Return: pixa, or null on error * * Notes: * (1) @dirname is the full path for the directory. * (2) @substr is the part of the file name (excluding * the directory) that is to be matched. All matching * filenames are read into the Pixa. If substr is NULL, * all filenames are read into the Pixa. */ PIXA * pixaReadFiles(const char *dirname, const char *substr) { PIXA *pixa; SARRAY *sa; PROCNAME("pixaReadFiles"); if (!dirname) return (PIXA *)ERROR_PTR("dirname not defined", procName, NULL); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return (PIXA *)ERROR_PTR("sa not made", procName, NULL); pixa = pixaReadFilesSA(sa); sarrayDestroy(&sa); return pixa; } /*! * pixaReadFilesSA() * * Input: sarray (full pathnames for all files) * Return: pixa, or null on error */ PIXA * pixaReadFilesSA(SARRAY *sa) { char *str; l_int32 i, n; PIX *pix; PIXA *pixa; PROCNAME("pixaReadFilesSA"); if (!sa) return (PIXA *)ERROR_PTR("sa not defined", procName, NULL); n = sarrayGetCount(sa); pixa = pixaCreate(n); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); if ((pix = pixRead(str)) == NULL) { L_WARNING("pix not read from file %s\n", procName, str); continue; } pixaAddPix(pixa, pix, L_INSERT); } return pixa; } /*! * pixRead() * * Input: filename (with full pathname or in local directory) * Return: pix if OK; null on error * * Notes: * (1) See at top of file for supported formats. */ PIX * pixRead(const char *filename) { FILE *fp; PIX *pix; PROCNAME("pixRead"); if (!filename) return (PIX *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR("image file not found", procName, NULL); if ((pix = pixReadStream(fp, 0)) == NULL) { fclose(fp); return (PIX *)ERROR_PTR("pix not read", procName, NULL); } /* Close the stream except if GIF under windows, because * DGifCloseFile() closes the windows file stream! */ if (pixGetInputFormat(pix) != IFF_GIF) fclose(fp); #ifndef _WIN32 else /* gif file */ fclose(fp); #endif /* ! _WIN32 */ return pix; } /*! * pixReadWithHint() * * Input: filename (with full pathname or in local directory) * hint (bitwise OR of L_HINT_* values for jpeg; use 0 for no hint) * Return: pix if OK; null on error * * Notes: * (1) The hint is not binding, but may be used to optimize jpeg decoding. * Use 0 for no hinting. */ PIX * pixReadWithHint(const char *filename, l_int32 hint) { FILE *fp; PIX *pix; PROCNAME("pixReadWithHint"); if (!filename) return (PIX *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR("image file not found", procName, NULL); pix = pixReadStream(fp, hint); fclose(fp); if (!pix) return (PIX *)ERROR_PTR("image not returned", procName, NULL); return pix; } /*! * pixReadIndexed() * * Input: sarray (of full pathnames) * index (into pathname array) * Return: pix if OK; null if not found * * Notes: * (1) This function is useful for selecting image files from a * directory, where the integer @index is embedded into * the file name. * (2) This is typically done by generating the sarray using * getNumberedPathnamesInDirectory(), so that the @index * pathname would have the number @index in it. The size * of the sarray should be the largest number (plus 1) appearing * in the file names, respecting the constraints in the * call to getNumberedPathnamesInDirectory(). * (3) Consequently, for some indices into the sarray, there may * be no pathnames in the directory containing that number. * By convention, we place empty C strings ("") in those * locations in the sarray, and it is not an error if such * a string is encountered and no pix is returned. * Therefore, the caller must verify that a pix is returned. * (4) See convertSegmentedPagesToPS() in src/psio1.c for an * example of usage. */ PIX * pixReadIndexed(SARRAY *sa, l_int32 index) { char *fname; l_int32 n; PIX *pix; PROCNAME("pixReadIndexed"); if (!sa) return (PIX *)ERROR_PTR("sa not defined", procName, NULL); n = sarrayGetCount(sa); if (index < 0 || index >= n) return (PIX *)ERROR_PTR("index out of bounds", procName, NULL); fname = sarrayGetString(sa, index, L_NOCOPY); if (fname[0] == '\0') return NULL; if ((pix = pixRead(fname)) == NULL) { L_ERROR("pix not read from file %s\n", procName, fname); return NULL; } return pix; } /*! * pixReadStream() * * Input: fp (file stream) * hint (bitwise OR of L_HINT_* values for jpeg; use 0 for no hint) * Return: pix if OK; null on error * * Notes: * (1) The hint only applies to jpeg. */ PIX * pixReadStream(FILE *fp, l_int32 hint) { l_int32 format, ret; l_uint8 *comment; PIX *pix; PROCNAME("pixReadStream"); if (!fp) return (PIX *)ERROR_PTR("stream not defined", procName, NULL); pix = NULL; findFileFormatStream(fp, &format); switch (format) { case IFF_BMP: if ((pix = pixReadStreamBmp(fp)) == NULL ) return (PIX *)ERROR_PTR( "bmp: no pix returned", procName, NULL); break; case IFF_JFIF_JPEG: if ((pix = pixReadStreamJpeg(fp, READ_24_BIT_COLOR, 1, NULL, hint)) == NULL) return (PIX *)ERROR_PTR( "jpeg: no pix returned", procName, NULL); ret = fgetJpegComment(fp, &comment); if (!ret && comment) pixSetText(pix, (char *)comment); FREE(comment); break; case IFF_PNG: if ((pix = pixReadStreamPng(fp)) == NULL) return (PIX *)ERROR_PTR("png: no pix returned", procName, NULL); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: if ((pix = pixReadStreamTiff(fp, 0)) == NULL) /* page 0 by default */ return (PIX *)ERROR_PTR("tiff: no pix returned", procName, NULL); break; case IFF_PNM: if ((pix = pixReadStreamPnm(fp)) == NULL) return (PIX *)ERROR_PTR("pnm: no pix returned", procName, NULL); break; case IFF_GIF: if ((pix = pixReadStreamGif(fp)) == NULL) return (PIX *)ERROR_PTR("gif: no pix returned", procName, NULL); break; case IFF_JP2: return (PIX *)ERROR_PTR("jp2: format not supported", procName, NULL); break; case IFF_WEBP: if ((pix = pixReadStreamWebP(fp)) == NULL) return (PIX *)ERROR_PTR("webp: no pix returned", procName, NULL); break; case IFF_SPIX: if ((pix = pixReadStreamSpix(fp)) == NULL) return (PIX *)ERROR_PTR("spix: no pix returned", procName, NULL); break; case IFF_UNKNOWN: return (PIX *)ERROR_PTR( "Unknown format: no pix returned", procName, NULL); break; } if (pix) pixSetInputFormat(pix, format); return pix; } /*---------------------------------------------------------------------* * Read header information from file * *---------------------------------------------------------------------*/ /*! * pixReadHeader() * * Input: filename (with full pathname or in local directory) * &format ( file format) * &w, &h ( width and height) * &bps bits/sample * &spp samples/pixel (1, 3 or 4) * &iscmap ( 1 if cmap exists; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This reads the actual headers for jpeg, png, tiff and pnm. * For bmp and gif, we cheat and read the entire file into a pix, * from which we extract the "header" information. */ l_int32 pixReadHeader(const char *filename, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 format, ret, w, h, d, bps, spp, iscmap; l_int32 type; /* ignored */ FILE *fp; PIX *pix; PROCNAME("pixReadHeader"); if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (pformat) *pformat = 0; iscmap = 0; /* init to false */ if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); findFileFormatStream(fp, &format); fclose(fp); switch (format) { case IFF_BMP: /* cheating: reading the entire file */ if ((pix = pixRead(filename)) == NULL) return ERROR_INT( "bmp: pix not read", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (pixGetColormap(pix)) iscmap = 1; pixDestroy(&pix); bps = (d == 32) ? 8 : d; spp = (d == 32) ? 3 : 1; break; case IFF_JFIF_JPEG: ret = readHeaderJpeg(filename, &w, &h, &spp, NULL, NULL); bps = 8; if (ret) return ERROR_INT( "jpeg: no header info returned", procName, 1); break; case IFF_PNG: ret = readHeaderPng(filename, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT( "png: no header info returned", procName, 1); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: /* Reading page 0 by default; possibly redefine format */ ret = readHeaderTiff(filename, 0, &w, &h, &bps, &spp, NULL, &iscmap, &format); if (ret) return ERROR_INT( "tiff: no header info returned", procName, 1); break; case IFF_PNM: ret = readHeaderPnm(filename, &w, &h, &d, &type, &bps, &spp); if (ret) return ERROR_INT( "pnm: no header info returned", procName, 1); break; case IFF_GIF: /* cheating: reading the entire file */ if ((pix = pixRead(filename)) == NULL) return ERROR_INT( "gif: pix not read", procName, 1); pixGetDimensions(pix, &w, &h, &d); pixDestroy(&pix); iscmap = 1; /* always colormapped; max 256 colors */ spp = 1; bps = d; break; case IFF_JP2: ret = readHeaderJp2k(filename, &w, &h, &spp); bps = 8; break; case IFF_WEBP: if (readHeaderWebP(filename, &w, &h, &spp)) return ERROR_INT( "webp: no header info returned", procName, 1); bps = 8; break; case IFF_SPIX: ret = readHeaderSpix(filename, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT( "spix: no header info returned", procName, 1); break; case IFF_UNKNOWN: L_ERROR("unknown format in file %s\n", procName, filename); return 1; break; } if (pw) *pw = w; if (ph) *ph = h; if (pbps) *pbps = bps; if (pspp) *pspp = spp; if (piscmap) *piscmap = iscmap; if (pformat) *pformat = format; return 0; } /*---------------------------------------------------------------------* * Format finders * *---------------------------------------------------------------------*/ /*! * findFileFormat() * * Input: filename * &format () * Return: 0 if OK, 1 on error or if format is not recognized */ l_int32 findFileFormat(const char *filename, l_int32 *pformat) { l_int32 ret; FILE *fp; PROCNAME("findFileFormat"); if (!pformat) return ERROR_INT("&format not defined", procName, 1); *pformat = IFF_UNKNOWN; if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); ret = findFileFormatStream(fp, pformat); fclose(fp); return ret; } /*! * findFileFormatStream() * * Input: fp (file stream) * &format () * Return: 0 if OK, 1 on error or if format is not recognized * * Notes: * (1) Important: Side effect -- this resets fp to BOF. */ l_int32 findFileFormatStream(FILE *fp, l_int32 *pformat) { l_uint8 firstbytes[12]; l_int32 format; PROCNAME("findFileFormatStream"); if (!pformat) return ERROR_INT("&format not defined", procName, 1); *pformat = IFF_UNKNOWN; if (!fp) return ERROR_INT("stream not defined", procName, 1); rewind(fp); if (fnbytesInFile(fp) < 12) return ERROR_INT("truncated file", procName, 1); if (fread((char *)&firstbytes, 1, 12, fp) != 12) return ERROR_INT("failed to read first 12 bytes of file", procName, 1); rewind(fp); findFileFormatBuffer(firstbytes, &format); if (format == IFF_TIFF) { findTiffCompression(fp, &format); rewind(fp); } *pformat = format; if (format == IFF_UNKNOWN) return 1; else return 0; } /*! * findFileFormatBuffer() * * Input: byte buffer (at least 12 bytes in size; we can't check) * &format () * Return: 0 if OK, 1 on error or if format is not recognized * * Notes: * (1) This determines the file format from the first 12 bytes in * the compressed data stream, which are stored in memory. * (2) For tiff files, this returns IFF_TIFF. The specific tiff * compression is then determined using findTiffCompression(). */ l_int32 findFileFormatBuffer(const l_uint8 *buf, l_int32 *pformat) { l_uint16 twobytepw; PROCNAME("findFileFormatBuffer"); if (!pformat) return ERROR_INT("&format not defined", procName, 1); *pformat = IFF_UNKNOWN; if (!buf) return ERROR_INT("byte buffer not defined", procName, 0); /* Check the bmp and tiff 2-byte header ids */ ((char *)(&twobytepw))[0] = buf[0]; ((char *)(&twobytepw))[1] = buf[1]; if (convertOnBigEnd16(twobytepw) == BMP_ID) { *pformat = IFF_BMP; return 0; } if (twobytepw == TIFF_BIGEND_ID || twobytepw == TIFF_LITTLEEND_ID) { *pformat = IFF_TIFF; return 0; } /* Check for the p*m 2-byte header ids */ if ((buf[0] == 'P' && buf[1] == '4') || /* newer packed */ (buf[0] == 'P' && buf[1] == '1')) { /* old format */ *pformat = IFF_PNM; return 0; } if ((buf[0] == 'P' && buf[1] == '5') || /* newer */ (buf[0] == 'P' && buf[1] == '2')) { /* old */ *pformat = IFF_PNM; return 0; } if ((buf[0] == 'P' && buf[1] == '6') || /* newer */ (buf[0] == 'P' && buf[1] == '3')) { /* old */ *pformat = IFF_PNM; return 0; } /* Consider the first 11 bytes of the standard JFIF JPEG header: * - The first two bytes are the most important: 0xffd8. * - The next two bytes are the jfif marker: 0xffe0. * Not all jpeg files have this marker. * - The next two bytes are the header length. * - The next 5 bytes are a null-terminated string. * For JFIF, the string is "JFIF", naturally. For others it * can be "Exif" or just about anything else. * - Because of all this variability, we only check the first * two byte marker. All jpeg files are identified as * IFF_JFIF_JPEG. */ if (buf[0] == 0xff && buf[1] == 0xd8) { *pformat = IFF_JFIF_JPEG; return 0; } /* Check for the 8 byte PNG signature (png_signature in png.c): * {137, 80, 78, 71, 13, 10, 26, 10} */ if (buf[0] == 137 && buf[1] == 80 && buf[2] == 78 && buf[3] == 71 && buf[4] == 13 && buf[5] == 10 && buf[6] == 26 && buf[7] == 10) { *pformat = IFF_PNG; return 0; } /* Look for "GIF87a" or "GIF89a" */ if (buf[0] == 'G' && buf[1] == 'I' && buf[2] == 'F' && buf[3] == '8' && (buf[4] == '7' || buf[4] == '9') && buf[5] == 'a') { *pformat = IFF_GIF; return 0; } /* Check for both types of jp2k file */ if (strncmp((const char *)buf, (char *)JP2K_CODESTREAM, 4) == 0 || strncmp((const char *)buf, (char *)JP2K_IMAGE_DATA, 12) == 0) { *pformat = IFF_JP2; return 0; } /* Check for webp */ if (buf[0] == 'R' && buf[1] == 'I' && buf[2] == 'F' && buf[3] == 'F' && buf[8] == 'W' && buf[9] == 'E' && buf[10] == 'B' && buf[11] == 'P') { *pformat = IFF_WEBP; return 0; } /* Check for "spix" serialized pix */ if (buf[0] == 's' && buf[1] == 'p' && buf[2] == 'i' && buf[3] == 'x') { *pformat = IFF_SPIX; return 0; } /* File format identifier not found; unknown */ return 1; } /*! * fileFormatIsTiff() * * Input: fp (file stream) * Return: 1 if file is tiff; 0 otherwise or on error */ l_int32 fileFormatIsTiff(FILE *fp) { l_int32 format; PROCNAME("fileFormatIsTiff"); if (!fp) return ERROR_INT("stream not defined", procName, 0); findFileFormatStream(fp, &format); if (format == IFF_TIFF || format == IFF_TIFF_PACKBITS || format == IFF_TIFF_RLE || format == IFF_TIFF_G3 || format == IFF_TIFF_G4 || format == IFF_TIFF_LZW || format == IFF_TIFF_ZIP) return 1; else return 0; } /*---------------------------------------------------------------------* * Read from memory * *---------------------------------------------------------------------*/ /*! * pixReadMem() * * Input: data (const; encoded) * datasize (size of data) * Return: pix, or null on error * * Notes: * (1) This is a variation of pixReadStream(), where the data is read * from a memory buffer rather than a file. * (2) On windows, this will only read tiff formatted files from * memory. For other formats, it requires fmemopen(3). * Attempts to read those formats will fail at runtime. * (3) findFileFormatBuffer() requires up to 8 bytes to decide on * the format. That determines the constraint here. */ PIX * pixReadMem(const l_uint8 *data, size_t size) { l_int32 format; PIX *pix; PROCNAME("pixReadMem"); if (!data) return (PIX *)ERROR_PTR("data not defined", procName, NULL); if (size < 8) return (PIX *)ERROR_PTR("size < 8", procName, NULL); pix = NULL; findFileFormatBuffer(data, &format); switch (format) { case IFF_BMP: if ((pix = pixReadMemBmp(data, size)) == NULL ) return (PIX *)ERROR_PTR( "bmp: no pix returned", procName, NULL); break; case IFF_JFIF_JPEG: if ((pix = pixReadMemJpeg(data, size, READ_24_BIT_COLOR, 1, NULL, 0)) == NULL) return (PIX *)ERROR_PTR( "jpeg: no pix returned", procName, NULL); break; case IFF_PNG: if ((pix = pixReadMemPng(data, size)) == NULL) return (PIX *)ERROR_PTR("png: no pix returned", procName, NULL); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: /* Reading page 0 by default */ if ((pix = pixReadMemTiff(data, size, 0)) == NULL) return (PIX *)ERROR_PTR("tiff: no pix returned", procName, NULL); break; case IFF_PNM: if ((pix = pixReadMemPnm(data, size)) == NULL) return (PIX *)ERROR_PTR("pnm: no pix returned", procName, NULL); break; case IFF_GIF: if ((pix = pixReadMemGif(data, size)) == NULL) return (PIX *)ERROR_PTR("gif: no pix returned", procName, NULL); break; case IFF_JP2: return (PIX *)ERROR_PTR("jp2: format not supported", procName, NULL); break; case IFF_SPIX: if ((pix = pixReadMemSpix(data, size)) == NULL) return (PIX *)ERROR_PTR("spix: no pix returned", procName, NULL); break; case IFF_UNKNOWN: return (PIX *)ERROR_PTR("Unknown format: no pix returned", procName, NULL); break; } /* Set the input format. For tiff reading from memory we lose * the actual input format; for 1 bpp, default to G4. */ if (pix) { if (format == IFF_TIFF && pixGetDepth(pix) == 1) format = IFF_TIFF_G4; pixSetInputFormat(pix, format); } return pix; } /*! * pixReadHeaderMem() * * Input: data (const; encoded) * datasize (size of data) * &format ( image format) * &w, &h ( width and height) * &bps bits/sample * &spp samples/pixel (1, 3 or 4) * &iscmap ( 1 if cmap exists; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This reads the actual headers for jpeg, png, tiff and pnm. * For bmp and gif, we cheat and read all the data into a pix, * from which we extract the "header" information. * (2) On windows, this will only read tiff formatted files from * memory. For other formats, it requires fmemopen(3). * Attempts to read those formats will fail at runtime. * (3) findFileFormatBuffer() requires up to 8 bytes to decide on * the format. That determines the constraint here. */ l_int32 pixReadHeaderMem(const l_uint8 *data, size_t size, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 format, ret, w, h, d, bps, spp, iscmap; l_int32 type; /* not used */ PIX *pix; PROCNAME("pixReadHeaderMem"); if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (pformat) *pformat = 0; iscmap = 0; /* init to false */ if (!data) return ERROR_INT("data not defined", procName, 1); if (size < 8) return ERROR_INT("size < 8", procName, 1); findFileFormatBuffer(data, &format); switch (format) { case IFF_BMP: /* cheating: read the pix */ if ((pix = pixReadMemBmp(data, size)) == NULL) return ERROR_INT( "bmp: pix not read", procName, 1); pixGetDimensions(pix, &w, &h, &d); pixDestroy(&pix); bps = (d == 32) ? 8 : d; spp = (d == 32) ? 3 : 1; break; case IFF_JFIF_JPEG: ret = readHeaderMemJpeg(data, size, &w, &h, &spp, NULL, NULL); bps = 8; if (ret) return ERROR_INT( "jpeg: no header info returned", procName, 1); break; case IFF_PNG: ret = sreadHeaderPng(data, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT( "png: no header info returned", procName, 1); break; case IFF_TIFF: case IFF_TIFF_PACKBITS: case IFF_TIFF_RLE: case IFF_TIFF_G3: case IFF_TIFF_G4: case IFF_TIFF_LZW: case IFF_TIFF_ZIP: /* Reading page 0 by default; possibly redefine format */ ret = readHeaderMemTiff(data, size, 0, &w, &h, &bps, &spp, NULL, &iscmap, &format); if (ret) return ERROR_INT( "tiff: no header info returned", procName, 1); break; case IFF_PNM: ret = sreadHeaderPnm(data, size, &w, &h, &d, &type, &bps, &spp); if (ret) return ERROR_INT( "pnm: no header info returned", procName, 1); break; case IFF_GIF: /* cheating: read the pix */ if ((pix = pixReadMemGif(data, size)) == NULL) return ERROR_INT( "gif: pix not read", procName, 1); pixGetDimensions(pix, &w, &h, &d); pixDestroy(&pix); iscmap = 1; /* always colormapped; max 256 colors */ spp = 1; bps = d; break; case IFF_JP2: ret = sreadHeaderJp2k(data, size, &w, &h, &spp); bps = 8; break; case IFF_SPIX: ret = sreadHeaderSpix((l_uint32 *)data, &w, &h, &bps, &spp, &iscmap); if (ret) return ERROR_INT( "pnm: no header info returned", procName, 1); break; case IFF_UNKNOWN: return ERROR_INT("unknown format; no data returned", procName, 1); break; } if (pw) *pw = w; if (ph) *ph = h; if (pbps) *pbps = bps; if (pspp) *pspp = spp; if (piscmap) *piscmap = iscmap; if (pformat) *pformat = format; return 0; } /*---------------------------------------------------------------------* * Test function for I/O with different formats * *---------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /*! * ioFormatTest() * * Input: filename (input file) * Return: 0 if OK; 1 on error or if the test fails * * Notes: * (1) This writes and reads a set of output files losslessly * in different formats to /tmp, and tests that the * result before and after is unchanged. * (2) This should work properly on input images of any depth, * with and without colormaps. * (3) All supported formats are tested for bmp, png, tiff and * non-ascii pnm. Ascii pnm also works (but who'd ever want * to use it?) We allow 2 bpp bmp, although it's not * supported elsewhere. And we don't support reading * 16 bpp png, although this can be turned on in pngio.c. * (4) This silently skips png or tiff testing if HAVE_LIBPNG * or HAVE_LIBTIFF are 0, respectively. */ l_int32 ioFormatTest(const char *filename) { l_int32 d, equal, problems; PIX *pixs, *pixc, *pixt, *pixt2; PIXCMAP *cmap; PROCNAME("ioFormatTest"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((pixs = pixRead(filename)) == NULL) return ERROR_INT("pixs not made", procName, 1); /* Note that the reader automatically removes colormaps * from 1 bpp BMP images, but not from 8 bpp BMP images. * Therefore, if our 8 bpp image initially doesn't have a * colormap, we are going to need to remove it from any * pix read from a BMP file. */ pixc = pixClone(pixs); /* laziness */ /* This does not test the alpha layer pixels, because most * formats don't support it. Remove any alpha. */ if (pixGetSpp(pixc) == 4) pixSetSpp(pixc, 3); cmap = pixGetColormap(pixc); /* colormap; can be NULL */ d = pixGetDepth(pixc); problems = FALSE; /* ----------------------- BMP -------------------------- */ /* BMP works for 1, 2, 4, 8 and 32 bpp images. * It always writes colormaps for 1 and 8 bpp, so we must * remove it after readback if the input image doesn't have * a colormap. Although we can write/read 2 bpp BMP, nobody * else can read them! */ if (d == 1 || d == 8) { L_INFO("write/read bmp\n", procName); pixWrite(FILE_BMP, pixc, IFF_BMP); pixt = pixRead(FILE_BMP); if (!cmap) pixt2 = pixRemoveColormap(pixt, REMOVE_CMAP_BASED_ON_SRC); else pixt2 = pixClone(pixt); pixEqual(pixc, pixt2, &equal); if (!equal) { L_INFO(" **** bad bmp image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); pixDestroy(&pixt2); } if (d == 2 || d == 4 || d == 32) { L_INFO("write/read bmp\n", procName); pixWrite(FILE_BMP, pixc, IFF_BMP); pixt = pixRead(FILE_BMP); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad bmp image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); } /* ----------------------- PNG -------------------------- */ #if HAVE_LIBPNG /* PNG works for all depths, but here, because we strip * 16 --> 8 bpp on reading, we don't test png for 16 bpp. */ if (d != 16) { L_INFO("write/read png\n", procName); pixWrite(FILE_PNG, pixc, IFF_PNG); pixt = pixRead(FILE_PNG); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad png image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); } #endif /* HAVE_LIBPNG */ /* ----------------------- TIFF -------------------------- */ #if HAVE_LIBTIFF /* TIFF works for 1, 2, 4, 8, 16 and 32 bpp images. * Because 8 bpp tiff always writes 256 entry colormaps, the * colormap sizes may be different for 8 bpp images with * colormap; we are testing if the image content is the same. * Likewise, the 2 and 4 bpp tiff images with colormaps * have colormap sizes 4 and 16, rsp. This test should * work properly on the content, regardless of the number * of color entries in pixc. */ /* tiff uncompressed works for all pixel depths */ L_INFO("write/read uncompressed tiff\n", procName); pixWrite(FILE_TIFF, pixc, IFF_TIFF); pixt = pixRead(FILE_TIFF); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad tiff uncompressed image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); /* tiff lzw works for all pixel depths */ L_INFO("write/read lzw compressed tiff\n", procName); pixWrite(FILE_LZW, pixc, IFF_TIFF_LZW); pixt = pixRead(FILE_LZW); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad tiff lzw compressed image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); /* tiff adobe deflate (zip) works for all pixel depths */ L_INFO("write/read zip compressed tiff\n", procName); pixWrite(FILE_ZIP, pixc, IFF_TIFF_ZIP); pixt = pixRead(FILE_ZIP); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad tiff zip compressed image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); /* tiff g4, g3, rle and packbits work for 1 bpp */ if (d == 1) { L_INFO("write/read g4 compressed tiff\n", procName); pixWrite(FILE_G4, pixc, IFF_TIFF_G4); pixt = pixRead(FILE_G4); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad tiff g4 image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); L_INFO("write/read g3 compressed tiff\n", procName); pixWrite(FILE_G3, pixc, IFF_TIFF_G3); pixt = pixRead(FILE_G3); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad tiff g3 image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); L_INFO("write/read rle compressed tiff\n", procName); pixWrite(FILE_RLE, pixc, IFF_TIFF_RLE); pixt = pixRead(FILE_RLE); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad tiff rle image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); L_INFO("write/read packbits compressed tiff\n", procName); pixWrite(FILE_PB, pixc, IFF_TIFF_PACKBITS); pixt = pixRead(FILE_PB); pixEqual(pixc, pixt, &equal); if (!equal) { L_INFO(" **** bad tiff packbits image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); } #endif /* HAVE_LIBTIFF */ /* ----------------------- PNM -------------------------- */ /* pnm works for 1, 2, 4, 8, 16 and 32 bpp. * pnm doesn't have colormaps, so when we write colormapped * pix out as pnm, the colormap is removed. Thus for the test, * we must remove the colormap from pixc before testing. */ L_INFO("write/read pnm\n", procName); pixWrite(FILE_PNM, pixc, IFF_PNM); pixt = pixRead(FILE_PNM); if (cmap) pixt2 = pixRemoveColormap(pixc, REMOVE_CMAP_BASED_ON_SRC); else pixt2 = pixClone(pixc); pixEqual(pixt, pixt2, &equal); if (!equal) { L_INFO(" **** bad pnm image ****\n", procName); problems = TRUE; } pixDestroy(&pixt); pixDestroy(&pixt2); if (problems == FALSE) L_INFO("All formats read and written OK!\n", procName); pixDestroy(&pixc); pixDestroy(&pixs); return problems; } leptonica-1.70/src/rotateorthlow.c0000640000175000017500000004104612244745145015366 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotateorthlow.c * * 90-degree rotation (cw) * void rotate90Low() * * LR-flip * void flipLRLow() * * TB-flip * void flipTBLow() * * Byte reverse tables * l_uint8 *makeReverseByteTab1() * l_uint8 *makeReverseByteTab2() * l_uint8 *makeReverseByteTab4() */ #include #include "allheaders.h" /*------------------------------------------------------------------* * 90 degree rotation * *------------------------------------------------------------------*/ /*! * rotate90Low() * * direction: 1 for cw rotation * -1 for ccw rotation * * Notes: * (1) The dest must be cleared in advance because not * all source pixels are written to the destination. */ void rotate90Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 d, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 direction) { l_int32 i, j, k, m, iend, nswords; l_uint32 val, word; l_uint32 *lines, *lined; PROCNAME("rotate90Low"); if (direction == 1) { /* clockwise */ switch (d) { case 32: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { lined[j] = lines[i]; lines -= wpls; } } break; case 16: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_TWO_BYTES(lines, i))) SET_DATA_TWO_BYTES(lined, j, val); lines -= wpls; } } break; case 8: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_BYTE(lines, i))) SET_DATA_BYTE(lined, j, val); lines -= wpls; } } break; case 4: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_QBIT(lines, i))) SET_DATA_QBIT(lined, j, val); lines -= wpls; } } break; case 2: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { if ((val = GET_DATA_DIBIT(lines, i))) SET_DATA_DIBIT(lined, j, val); lines -= wpls; } } break; case 1: nswords = hd / 32; for (j = 0; j < wd; j++) { lined = datad; lines = datas + (wd - 1 - j) * wpls; for (k = 0; k < nswords; k++) { word = lines[k]; if (!word) { lined += 32 * wpld; continue; } else { iend = 32 * (k + 1); for (m = 0, i = 32 * k; i < iend; i++, m++) { if ((word << m) & 0x80000000) SET_DATA_BIT(lined, j); lined += wpld; } } } for (i = 32 * nswords; i < hd; i++) { if (GET_DATA_BIT(lines, i)) SET_DATA_BIT(lined, j); lined += wpld; } } break; default: L_ERROR("illegal depth\n", procName); break; } } else { /* direction counter-clockwise */ switch (d) { case 32: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { lined[j] = lines[hd - 1 - i]; lines += wpls; } } break; case 16: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_TWO_BYTES(lines, hd - 1 - i))) SET_DATA_TWO_BYTES(lined, j, val); lines += wpls; } } break; case 8: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_BYTE(lines, hd - 1 - i))) SET_DATA_BYTE(lined, j, val); lines += wpls; } } break; case 4: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_QBIT(lines, hd - 1 - i))) SET_DATA_QBIT(lined, j, val); lines += wpls; } } break; case 2: for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { if ((val = GET_DATA_DIBIT(lines, hd - 1 - i))) SET_DATA_DIBIT(lined, j, val); lines += wpls; } } break; case 1: nswords = hd / 32; for (j = 0; j < wd; j++) { lined = datad + (hd - 1) * wpld; lines = datas + (wd - 1 - j) * wpls; for (k = 0; k < nswords; k++) { word = lines[k]; if (!word) { lined -= 32 * wpld; continue; } else { iend = 32 * (k + 1); for (m = 0, i = 32 * k; i < iend; i++, m++) { if ((word << m) & 0x80000000) SET_DATA_BIT(lined, wd - 1 - j); lined -= wpld; } } } for (i = 32 * nswords; i < hd; i++) { if (GET_DATA_BIT(lines, i)) SET_DATA_BIT(lined, wd - 1 - j); lined -= wpld; } } break; default: L_ERROR("illegal depth\n", procName); break; } } return; } /*------------------------------------------------------------------* * Left/right flip * *------------------------------------------------------------------*/ /*! * flipLRLow() * * Notes: * (1) The pixel access routines allow a trivial implementation. * However, for d < 8, it is more efficient to right-justify * each line to a 32-bit boundary and then extract bytes and * do pixel reversing. In those cases, as in the 180 degree * rotation, we right-shift the data (if necessary) to * right-justify on the 32 bit boundary, and then read the * bytes off each raster line in reverse order, reversing * the pixels in each byte using a table. These functions * for 1, 2 and 4 bpp were tested against the "trivial" * version (shown here for 4 bpp): * for (i = 0; i < h; i++) { * line = data + i * wpl; * memcpy(buffer, line, bpl); * for (j = 0; j < w; j++) { * val = GET_DATA_QBIT(buffer, w - 1 - j); * SET_DATA_QBIT(line, j, val); * } * } * (2) This operation is in-place. */ void flipLRLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 d, l_int32 wpl, l_uint8 *tab, l_uint32 *buffer) { l_int32 extra, shift, databpl, bpl, i, j; l_uint32 val; l_uint32 *line; PROCNAME("flipLRLow"); bpl = 4 * wpl; switch (d) { case 32: for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) line[j] = buffer[w - 1 - j]; } break; case 16: for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(buffer, w - 1 - j); SET_DATA_TWO_BYTES(line, j, val); } } break; case 8: for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) { val = GET_DATA_BYTE(buffer, w - 1 - j); SET_DATA_BYTE(line, j, val); } } break; case 4: extra = (w * d) & 31; if (extra) shift = 8 - extra / 4; else shift = 0; if (shift) rasteropHipLow(data, h, d, wpl, 0, h, shift); databpl = (w + 1) / 2; for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < databpl; j++) { val = GET_DATA_BYTE(buffer, bpl - 1 - j); SET_DATA_BYTE(line, j, tab[val]); } } break; case 2: extra = (w * d) & 31; if (extra) shift = 16 - extra / 2; else shift = 0; if (shift) rasteropHipLow(data, h, d, wpl, 0, h, shift); databpl = (w + 3) / 4; for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < databpl; j++) { val = GET_DATA_BYTE(buffer, bpl - 1 - j); SET_DATA_BYTE(line, j, tab[val]); } } break; case 1: extra = (w * d) & 31; if (extra) shift = 32 - extra; else shift = 0; if (shift) rasteropHipLow(data, h, d, wpl, 0, h, shift); databpl = (w + 7) / 8; for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < databpl; j++) { val = GET_DATA_BYTE(buffer, bpl - 1 - j); SET_DATA_BYTE(line, j, tab[val]); } } break; default: L_ERROR("depth not permitted for LR rot\n", procName); return; } return; } /*------------------------------------------------------------------* * Top/bottom flip * *------------------------------------------------------------------*/ /*! * flipTBLow() * * Notes: * (1) This is simple and fast. We use the memcpy function * to do all the work on aligned data, regardless of pixel * depth. * (2) This operation is in-place. */ void flipTBLow(l_uint32 *data, l_int32 h, l_int32 wpl, l_uint32 *buffer) { l_int32 i, k, h2, bpl; l_uint32 *linet, *lineb; h2 = h / 2; bpl = 4 * wpl; for (i = 0, k = h - 1; i < h2; i++, k--) { linet = data + i * wpl; lineb = data + k * wpl; memcpy(buffer, linet, bpl); memcpy(linet, lineb, bpl); memcpy(lineb, buffer, bpl); } return; } /*------------------------------------------------------------------* * Byte reverse tables * *------------------------------------------------------------------*/ /*! * makeReverseByteTab1() * * Notes: * (1) This generates an 8 bit lookup table for reversing * the order of eight 1-bit pixels. */ l_uint8 * makeReverseByteTab1(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeReverseByteTab1"); if ((tab = (l_uint8 *)CALLOC(256, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 256; i++) tab[i] = ((0x80 & i) >> 7) | ((0x40 & i) >> 5) | ((0x20 & i) >> 3) | ((0x10 & i) >> 1) | ((0x08 & i) << 1) | ((0x04 & i) << 3) | ((0x02 & i) << 5) | ((0x01 & i) << 7); return tab; } /*! * makeReverseByteTab2() * * Notes: * (1) This generates an 8 bit lookup table for reversing * the order of four 2-bit pixels. */ l_uint8 * makeReverseByteTab2(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeReverseByteTab2"); if ((tab = (l_uint8 *)CALLOC(256, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 256; i++) tab[i] = ((0xc0 & i) >> 6) | ((0x30 & i) >> 2) | ((0x0c & i) << 2) | ((0x03 & i) << 6); return tab; } /*! * makeReverseByteTab4() * * Notes: * (1) This generates an 8 bit lookup table for reversing * the order of two 4-bit pixels. */ l_uint8 * makeReverseByteTab4(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeReverseByteTab4"); if ((tab = (l_uint8 *)CALLOC(256, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 256; i++) tab[i] = ((0xf0 & i) >> 4) | ((0x0f & i) << 4); return tab; } leptonica-1.70/src/pixafunc1.c0000664000175000017500000021755012273206605014355 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixafunc1.c * * Filters * PIX *pixSelectBySize() * PIXA *pixaSelectBySize() * NUMA *pixaMakeSizeIndicator() * * PIX *pixSelectByPerimToAreaRatio() * PIXA *pixaSelectByPerimToAreaRatio() * PIX *pixSelectByPerimSizeRatio() * PIXA *pixaSelectByPerimSizeRatio() * PIX *pixSelectByAreaFraction() * PIXA *pixaSelectByAreaFraction() * PIX *pixSelectByWidthHeightRatio() * PIXA *pixaSelectByWidthHeightRatio() * * PIXA *pixaSelectWithIndicator() * l_int32 pixRemoveWithIndicator() * l_int32 pixAddWithIndicator() * PIX *pixaRenderComponent() * * Sort functions * PIXA *pixaSort() * PIXA *pixaBinSort() * PIXA *pixaSortByIndex() * PIXAA *pixaSort2dByIndex() * * Pixa and Pixaa range selection * PIXA *pixaSelectRange() * PIXAA *pixaaSelectRange() * * Pixa and Pixaa scaling * PIXAA *pixaaScaleToSize() * PIXAA *pixaaScaleToSizeVar() * PIXA *pixaScaleToSize() * * Miscellaneous * PIXA *pixaAddBorderGeneral() * PIXA *pixaaFlattenToPixa() * l_int32 pixaaSizeRange() * l_int32 pixaSizeRange() * PIXA *pixaClipToPix() * l_int32 pixaGetRenderingDepth() * l_int32 pixaHasColor() * l_int32 pixaAnyColormaps() * l_int32 pixaGetDepthInfo() * PIXA *pixaConvertToSameDepth() * l_int32 pixaEqual() */ #include #include "allheaders.h" /* For more than this number of c.c. in a binarized image of * semi-perimeter (w + h) about 5000 or less, the O(n) binsort * is faster than the O(nlogn) shellsort. */ static const l_int32 MIN_COMPS_FOR_BIN_SORT = 200; /*---------------------------------------------------------------------* * Filters * *---------------------------------------------------------------------*/ /* * These filters work on the connected components of 1 bpp images. * They are typically used on pixa that have been generated from a Pix * using pixConnComp(), so that the corresponding Boxa is available. * * The filters remove or retain c.c. based on these properties: * (a) size [pixaFindDimensions()] * (b) area-to-perimeter ratio [pixaFindAreaPerimRatio()] * (c) foreground area as a fraction of bounding box area (w * h) * [pixaFindForegroundArea()] * (d) number of foreground pixels [pixaCountPixels()] * (e) width/height aspect ratio [pixFindWidthHeightRatio()] * * We provide two different high-level interfaces: * (1) Functions that use one of the filters on either * a pix or the pixa of components. * (2) A general method that generates numas of indicator functions, * logically combines them, and efficiently removes or adds * the selected components. * * For interface (1), the filtering is performed with a single function call. * This is the easiest way to do simple filtering. These functions * are named pixSelectBy*() and pixaSelectBy*(), where the '*' is one of: * Size * PerimToAreaRatio * PerimSizeRatio * AreaFraction * WidthHeightRatio * * For more complicated filtering, use the general method (2). * The numa indicator functions for a pixa are generated by these functions: * pixaFindDimensions() * pixaFindPerimToAreaRatio() * pixaFindPerimSizeRatio() * pixaFindAreaFraction() * pixaCountPixels() * pixaFindWidthHeightRatio() * pixaFindWidthHeightProduct() * * Here is an illustration using the general method. Suppose you want * all 8-connected components that have a height greater than 40 pixels, * a width not more than 30 pixels, between 150 and 300 fg pixels, * and a perimeter-to-size ratio between 1.2 and 2.0. * * // Generate the pixa of 8 cc pieces. * boxa = pixConnComp(pixs, &pixa, 8); * * // Extract the data we need about each component. * pixaFindDimensions(pixa, &naw, &nah); * nas = pixaCountPixels(pixa); * nar = pixaFindPerimSizeRatio(pixa); * * // Build the indicator arrays for the set of components, * // based on thresholds and selection criteria. * na1 = numaMakeThresholdIndicator(nah, 40, L_SELECT_IF_GT); * na2 = numaMakeThresholdIndicator(naw, 30, L_SELECT_IF_LTE); * na3 = numaMakeThresholdIndicator(nas, 150, L_SELECT_IF_GTE); * na4 = numaMakeThresholdIndicator(nas, 300, L_SELECT_IF_LTE); * na5 = numaMakeThresholdIndicator(nar, 1.2, L_SELECT_IF_GTE); * na6 = numaMakeThresholdIndicator(nar, 2.0, L_SELECT_IF_LTE); * * // Combine the indicator arrays logically to find * // the components that will be retained. * nad = numaLogicalOp(NULL, na1, na2, L_INTERSECTION); * numaLogicalOp(nad, nad, na3, L_INTERSECTION); * numaLogicalOp(nad, nad, na4, L_INTERSECTION); * numaLogicalOp(nad, nad, na5, L_INTERSECTION); * numaLogicalOp(nad, nad, na6, L_INTERSECTION); * * // Invert to get the components that will be removed. * numaInvert(nad, nad); * * // Remove the components, in-place. * pixRemoveWithIndicator(pixs, pixa, nad); */ /*! * pixSelectBySize() * * Input: pixs (1 bpp) * width, height (threshold dimensions) * connectivity (4 or 8) * type (L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH) * relation (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 otherwise) * Return: filtered pixd, or null on error * * Notes: * (1) The args specify constraints on the size of the * components that are kept. * (2) If unchanged, returns a copy of pixs. Otherwise, * returns a new pix with the filtered components. * (3) If the selection type is L_SELECT_WIDTH, the input * height is ignored, and v.v. * (4) To keep small components, use relation = L_SELECT_IF_LT or * L_SELECT_IF_LTE. * To keep large components, use relation = L_SELECT_IF_GT or * L_SELECT_IF_GTE. */ PIX * pixSelectBySize(PIX *pixs, l_int32 width, l_int32 height, l_int32 connectivity, l_int32 type, l_int32 relation, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; PROCNAME("pixSelectBySize"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid relation", procName, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Identify and select the components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectBySize(pixas, width, height, type, relation, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * pixaSelectBySize() * * Input: pixas * width, height (threshold dimensions) * type (L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH) * relation (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 otherwise) * Return: pixad, or null on error * * Notes: * (1) The args specify constraints on the size of the * components that are kept. * (2) Uses pix and box clones in the new pixa. * (3) If the selection type is L_SELECT_WIDTH, the input * height is ignored, and v.v. * (4) To keep small components, use relation = L_SELECT_IF_LT or * L_SELECT_IF_LTE. * To keep large components, use relation = L_SELECT_IF_GT or * L_SELECT_IF_GTE. */ PIXA * pixaSelectBySize(PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged) { NUMA *na; PIXA *pixad; PROCNAME("pixaSelectBySize"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (PIXA *)ERROR_PTR("invalid type", procName, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid relation", procName, NULL); /* Compute the indicator array for saving components */ na = pixaMakeSizeIndicator(pixas, width, height, type, relation); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, na, pchanged); numaDestroy(&na); return pixad; } /*! * pixaMakeSizeIndicator() * * Input: pixa * width, height (threshold dimensions) * type (L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH) * relation (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * Return: na (indicator array), or null on error * * Notes: * (1) The args specify constraints on the size of the * components that are kept. * (2) If the selection type is L_SELECT_WIDTH, the input * height is ignored, and v.v. * (3) To keep small components, use relation = L_SELECT_IF_LT or * L_SELECT_IF_LTE. * To keep large components, use relation = L_SELECT_IF_GT or * L_SELECT_IF_GTE. */ NUMA * pixaMakeSizeIndicator(PIXA *pixa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation) { l_int32 i, n, w, h, ival; NUMA *na; PROCNAME("pixaMakeSizeIndicator"); if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (NUMA *)ERROR_PTR("invalid type", procName, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (NUMA *)ERROR_PTR("invalid relation", procName, NULL); n = pixaGetCount(pixa); na = numaCreate(n); for (i = 0; i < n; i++) { ival = 0; pixaGetPixDimensions(pixa, i, &w, &h, NULL); switch (type) { case L_SELECT_WIDTH: if ((relation == L_SELECT_IF_LT && w < width) || (relation == L_SELECT_IF_GT && w > width) || (relation == L_SELECT_IF_LTE && w <= width) || (relation == L_SELECT_IF_GTE && w >= width)) ival = 1; break; case L_SELECT_HEIGHT: if ((relation == L_SELECT_IF_LT && h < height) || (relation == L_SELECT_IF_GT && h > height) || (relation == L_SELECT_IF_LTE && h <= height) || (relation == L_SELECT_IF_GTE && h >= height)) ival = 1; break; case L_SELECT_IF_EITHER: if (((relation == L_SELECT_IF_LT) && (w < width || h < height)) || ((relation == L_SELECT_IF_GT) && (w > width || h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width || h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width || h >= height))) ival = 1; break; case L_SELECT_IF_BOTH: if (((relation == L_SELECT_IF_LT) && (w < width && h < height)) || ((relation == L_SELECT_IF_GT) && (w > width && h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width && h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width && h >= height))) ival = 1; break; default: L_WARNING("can't get here!\n", procName); break; } numaAddNumber(na, ival); } return na; } /*! * pixSelectByPerimToAreaRatio() * * Input: pixs (1 bpp) * thresh (threshold ratio of fg boundary to fg pixels) * connectivity (4 or 8) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixd, or null on error * * Notes: * (1) The args specify constraints on the size of the * components that are kept. * (2) If unchanged, returns a copy of pixs. Otherwise, * returns a new pix with the filtered components. * (3) This filters "thick" components, where a thick component * is defined to have a ratio of boundary to interior pixels * that is smaller than a given threshold value. * (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save the thicker * components, and L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them. */ PIX * pixSelectByPerimToAreaRatio(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; PROCNAME("pixSelectByPerimToAreaRatio"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter thin components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByPerimToAreaRatio(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * pixaSelectByPerimToAreaRatio() * * Input: pixas * thresh (threshold ratio of fg boundary to fg pixels) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixad, or null on error * * Notes: * (1) Returns a pixa clone if no components are removed. * (2) Uses pix and box clones in the new pixa. * (3) See pixSelectByPerimToAreaRatio(). */ PIXA * pixaSelectByPerimToAreaRatio(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; PROCNAME("pixaSelectByPerimToAreaRatio"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", procName, NULL); /* Compute component ratios. */ na = pixaFindPerimToAreaRatio(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * pixSelectByPerimSizeRatio() * * Input: pixs (1 bpp) * thresh (threshold ratio of fg boundary to fg pixels) * connectivity (4 or 8) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixd, or null on error * * Notes: * (1) The args specify constraints on the size of the * components that are kept. * (2) If unchanged, returns a copy of pixs. Otherwise, * returns a new pix with the filtered components. * (3) This filters components with smooth vs. dendritic shape, using * the ratio of the fg boundary pixels to the circumference of * the bounding box, and comparing it to a threshold value. * (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save the smooth * boundary components, and L_SELECT_IF_GT or L_SELECT_IF_GTE * to remove them. */ PIX * pixSelectByPerimSizeRatio(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; PROCNAME("pixSelectByPerimSizeRatio"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter thin components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByPerimSizeRatio(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * pixaSelectByPerimSizeRatio() * * Input: pixas * thresh (threshold ratio of fg boundary to b.b. circumference) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixad, or null on error * * Notes: * (1) Returns a pixa clone if no components are removed. * (2) Uses pix and box clones in the new pixa. * (3) See pixSelectByPerimSizeRatio(). */ PIXA * pixaSelectByPerimSizeRatio(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; PROCNAME("pixaSelectByPerimSizeRatio"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", procName, NULL); /* Compute component ratios. */ na = pixaFindPerimSizeRatio(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * pixSelectByAreaFraction() * * Input: pixs (1 bpp) * thresh (threshold ratio of fg pixels to (w * h)) * connectivity (4 or 8) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixd, or null on error * * Notes: * (1) The args specify constraints on the amount of foreground * coverage of the components that are kept. * (2) If unchanged, returns a copy of pixs. Otherwise, * returns a new pix with the filtered components. * (3) This filters components based on the fraction of fg pixels * of the component in its bounding box. * (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components * with less than the threshold fraction of foreground, and * L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them. */ PIX * pixSelectByAreaFraction(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; PROCNAME("pixSelectByAreaFraction"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByAreaFraction(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * pixaSelectByAreaFraction() * * Input: pixas * thresh (threshold ratio of fg pixels to (w * h)) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixad, or null on error * * Notes: * (1) Returns a pixa clone if no components are removed. * (2) Uses pix and box clones in the new pixa. * (3) This filters components based on the fraction of fg pixels * of the component in its bounding box. * (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components * with less than the threshold fraction of foreground, and * L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them. */ PIXA * pixaSelectByAreaFraction(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; PROCNAME("pixaSelectByAreaFraction"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", procName, NULL); /* Compute component ratios. */ na = pixaFindAreaFraction(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * pixSelectByWidthHeightRatio() * * Input: pixs (1 bpp) * thresh (threshold ratio of width/height) * connectivity (4 or 8) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixd, or null on error * * Notes: * (1) The args specify constraints on the width-to-height ratio * for components that are kept. * (2) If unchanged, returns a copy of pixs. Otherwise, * returns a new pix with the filtered components. * (3) This filters components based on the width-to-height ratios. * (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components * with less than the threshold ratio, and * L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them. */ PIX * pixSelectByWidthHeightRatio(PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged) { l_int32 w, h, empty, changed, count; BOXA *boxa; PIX *pixd; PIXA *pixas, *pixad; PROCNAME("pixSelectByWidthHeightRatio"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (pchanged) *pchanged = FALSE; /* Check if any components exist */ pixZero(pixs, &empty); if (empty) return pixCopy(NULL, pixs); /* Filter components */ boxa = pixConnComp(pixs, &pixas, connectivity); pixad = pixaSelectByWidthHeightRatio(pixas, thresh, type, &changed); boxaDestroy(&boxa); pixaDestroy(&pixas); if (!changed) { pixaDestroy(&pixad); return pixCopy(NULL, pixs); } /* Render the result */ if (pchanged) *pchanged = TRUE; pixGetDimensions(pixs, &w, &h, NULL); count = pixaGetCount(pixad); if (count == 0) { /* return empty pix */ pixd = pixCreateTemplate(pixs); } else { pixd = pixaDisplay(pixad, w, h); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); } pixaDestroy(&pixad); return pixd; } /*! * pixaSelectByWidthHeightRatio() * * Input: pixas * thresh (threshold ratio of width/height) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: pixad, or null on error * * Notes: * (1) Returns a pixa clone if no components are removed. * (2) Uses pix and box clones in the new pixa. * (3) This filters components based on the width-to-height ratio * of each pix. * (4) Use L_SELECT_IF_LT or L_SELECT_IF_LTE to save components * with less than the threshold ratio, and * L_SELECT_IF_GT or L_SELECT_IF_GTE to remove them. */ PIXA * pixaSelectByWidthHeightRatio(PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged) { NUMA *na, *nai; PIXA *pixad; PROCNAME("pixaSelectByWidthHeightRatio"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (type != L_SELECT_IF_LT && type != L_SELECT_IF_GT && type != L_SELECT_IF_LTE && type != L_SELECT_IF_GTE) return (PIXA *)ERROR_PTR("invalid type", procName, NULL); /* Compute component ratios. */ na = pixaFindWidthHeightRatio(pixas); /* Generate indicator array for elements to be saved. */ nai = numaMakeThresholdIndicator(na, thresh, type); numaDestroy(&na); /* Filter to get output */ pixad = pixaSelectWithIndicator(pixas, nai, pchanged); numaDestroy(&nai); return pixad; } /*! * pixaSelectWithIndicator() * * Input: pixas * na (indicator numa) * &changed ( 1 if changed; 0 if clone returned) * Return: pixad, or null on error * * Notes: * (1) Returns a pixa clone if no components are removed. * (2) Uses pix and box clones in the new pixa. * (3) The indicator numa has values 0 (ignore) and 1 (accept). * (4) If the source boxa is not fully populated, it is left * empty in the dest pixa. */ PIXA * pixaSelectWithIndicator(PIXA *pixas, NUMA *na, l_int32 *pchanged) { l_int32 i, n, nbox, ival, nsave; BOX *box; PIX *pixt; PIXA *pixad; PROCNAME("pixaSelectWithIndicator"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (!na) return (PIXA *)ERROR_PTR("na not defined", procName, NULL); nsave = 0; n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) nsave++; } if (nsave == n) { if (pchanged) *pchanged = FALSE; return pixaCopy(pixas, L_CLONE); } if (pchanged) *pchanged = TRUE; pixad = pixaCreate(nsave); nbox = pixaGetBoxaCount(pixas); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 0) continue; pixt = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixad, pixt, L_INSERT); if (nbox == n) { /* fully populated boxa */ box = pixaGetBox(pixas, i, L_CLONE); pixaAddBox(pixad, box, L_INSERT); } } return pixad; } /*! * pixRemoveWithIndicator() * * Input: pixs (1 bpp pix from which components are removed; in-place) * pixa (of connected components in pixs) * na (numa indicator: remove components corresponding to 1s) * Return: 0 if OK, 1 on error * * Notes: * (1) This complements pixAddWithIndicator(). Here, the selected * components are set subtracted from pixs. */ l_int32 pixRemoveWithIndicator(PIX *pixs, PIXA *pixa, NUMA *na) { l_int32 i, n, ival, x, y, w, h; BOX *box; PIX *pix; PROCNAME("pixRemoveWithIndicator"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); n = pixaGetCount(pixa); if (n != numaGetCount(na)) return ERROR_INT("pixa and na sizes not equal", procName, 1); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) { pix = pixaGetPix(pixa, i, L_CLONE); box = pixaGetBox(pixa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixs, x, y, w, h, PIX_DST & PIX_NOT(PIX_SRC), pix, 0, 0); boxDestroy(&box); pixDestroy(&pix); } } return 0; } /*! * pixAddWithIndicator() * * Input: pixs (1 bpp pix from which components are added; in-place) * pixa (of connected components, some of which will be put * into pixs) * na (numa indicator: add components corresponding to 1s) * Return: 0 if OK, 1 on error * * Notes: * (1) This complements pixRemoveWithIndicator(). Here, the selected * components are added to pixs. */ l_int32 pixAddWithIndicator(PIX *pixs, PIXA *pixa, NUMA *na) { l_int32 i, n, ival, x, y, w, h; BOX *box; PIX *pix; PROCNAME("pixAddWithIndicator"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); n = pixaGetCount(pixa); if (n != numaGetCount(na)) return ERROR_INT("pixa and na sizes not equal", procName, 1); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) { pix = pixaGetPix(pixa, i, L_CLONE); box = pixaGetBox(pixa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixs, x, y, w, h, PIX_SRC | PIX_DST, pix, 0, 0); boxDestroy(&box); pixDestroy(&pix); } } return 0; } /*! * pixaRenderComponent() * * Input: pixs ( 1 bpp pix) * pixa (of 1 bpp connected components, one of which will * be rendered in pixs, with its origin determined * by the associated box.) * index (of component to be rendered) * Return: pixd, or null on error * * Notes: * (1) If pixs is null, this generates an empty pix of a size determined * by union of the component bounding boxes, and including the origin. * (2) The selected component is blitted into pixs. */ PIX * pixaRenderComponent(PIX *pixs, PIXA *pixa, l_int32 index) { l_int32 n, x, y, w, h, maxdepth; BOX *box; BOXA *boxa; PIX *pix; PROCNAME("pixaRenderComponent"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, pixs); n = pixaGetCount(pixa); if (index < 0 || index >= n) return (PIX *)ERROR_PTR("invalid index", procName, pixs); if (pixs && (pixGetDepth(pixs) != 1)) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixs); pixaVerifyDepth(pixa, &maxdepth); if (maxdepth > 1) return (PIX *)ERROR_PTR("not all pix with d == 1", procName, pixs); boxa = pixaGetBoxa(pixa, L_CLONE); if (!pixs) { boxaGetExtent(boxa, &w, &h, NULL); pixs = pixCreate(w, h, 1); } pix = pixaGetPix(pixa, index, L_CLONE); box = boxaGetBox(boxa, index, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixs, x, y, w, h, PIX_SRC | PIX_DST, pix, 0, 0); boxDestroy(&box); pixDestroy(&pix); boxaDestroy(&boxa); return pixs; } /*---------------------------------------------------------------------* * Sort functions * *---------------------------------------------------------------------*/ /*! * pixaSort() * * Input: pixas * sorttype (L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, * L_SORT_BY_HEIGHT, L_SORT_BY_MIN_DIMENSION, * L_SORT_BY_MAX_DIMENSION, L_SORT_BY_PERIMETER, * L_SORT_BY_AREA, L_SORT_BY_ASPECT_RATIO) * sortorder (L_SORT_INCREASING, L_SORT_DECREASING) * &naindex ( index of sorted order into * original array) * copyflag (L_COPY, L_CLONE) * Return: pixad (sorted version of pixas), or null on error * * Notes: * (1) This sorts based on the data in the boxa. If the boxa * count is not the same as the pixa count, this returns an error. * (2) The copyflag refers to the pix and box copies that are * inserted into the sorted pixa. These are either L_COPY * or L_CLONE. */ PIXA * pixaSort(PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, n, x, y, w, h; BOXA *boxa; NUMA *na, *naindex; PIXA *pixad; PROCNAME("pixaSort"); if (pnaindex) *pnaindex = NULL; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_MIN_DIMENSION && sorttype != L_SORT_BY_MAX_DIMENSION && sorttype != L_SORT_BY_PERIMETER && sorttype != L_SORT_BY_AREA && sorttype != L_SORT_BY_ASPECT_RATIO) return (PIXA *)ERROR_PTR("invalid sort type", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (PIXA *)ERROR_PTR("invalid sort order", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copy flag", procName, NULL); if ((boxa = pixas->boxa) == NULL) /* not owned; do not destroy */ return (PIXA *)ERROR_PTR("boxa not found", procName, NULL); n = pixaGetCount(pixas); if (boxaGetCount(boxa) != n) return (PIXA *)ERROR_PTR("boxa and pixa counts differ", procName, NULL); /* Use O(n) binsort if possible */ if (n > MIN_COMPS_FOR_BIN_SORT && ((sorttype == L_SORT_BY_X) || (sorttype == L_SORT_BY_Y) || (sorttype == L_SORT_BY_WIDTH) || (sorttype == L_SORT_BY_HEIGHT) || (sorttype == L_SORT_BY_PERIMETER))) return pixaBinSort(pixas, sorttype, sortorder, pnaindex, copyflag); /* Build up numa of specific data */ if ((na = numaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_MIN_DIMENSION: numaAddNumber(na, L_MIN(w, h)); break; case L_SORT_BY_MAX_DIMENSION: numaAddNumber(na, L_MAX(w, h)); break; case L_SORT_BY_PERIMETER: numaAddNumber(na, w + h); break; case L_SORT_BY_AREA: numaAddNumber(na, w * h); break; case L_SORT_BY_ASPECT_RATIO: numaAddNumber(na, (l_float32)w / (l_float32)h); break; default: L_WARNING("invalid sort type\n", procName); } } /* Get the sort index for data array */ if ((naindex = numaGetSortIndex(na, sortorder)) == NULL) return (PIXA *)ERROR_PTR("naindex not made", procName, NULL); /* Build up sorted pixa using sort index */ if ((pixad = pixaSortByIndex(pixas, naindex, copyflag)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); numaDestroy(&na); return pixad; } /*! * pixaBinSort() * * Input: pixas * sorttype (L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, * L_SORT_BY_HEIGHT, L_SORT_BY_PERIMETER) * sortorder (L_SORT_INCREASING, L_SORT_DECREASING) * &naindex ( index of sorted order into * original array) * copyflag (L_COPY, L_CLONE) * Return: pixad (sorted version of pixas), or null on error * * Notes: * (1) This sorts based on the data in the boxa. If the boxa * count is not the same as the pixa count, this returns an error. * (2) The copyflag refers to the pix and box copies that are * inserted into the sorted pixa. These are either L_COPY * or L_CLONE. * (3) For a large number of boxes (say, greater than 1000), this * O(n) binsort is much faster than the O(nlogn) shellsort. * For 5000 components, this is over 20x faster than boxaSort(). * (4) Consequently, pixaSort() calls this function if it will * likely go much faster. */ PIXA * pixaBinSort(PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, n, x, y, w, h; BOXA *boxa; NUMA *na, *naindex; PIXA *pixad; PROCNAME("pixaBinSort"); if (pnaindex) *pnaindex = NULL; if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_PERIMETER) return (PIXA *)ERROR_PTR("invalid sort type", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (PIXA *)ERROR_PTR("invalid sort order", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copy flag", procName, NULL); /* Verify that the pixa and its boxa have the same count */ if ((boxa = pixas->boxa) == NULL) /* not owned; do not destroy */ return (PIXA *)ERROR_PTR("boxa not found", procName, NULL); n = pixaGetCount(pixas); if (boxaGetCount(boxa) != n) return (PIXA *)ERROR_PTR("boxa and pixa counts differ", procName, NULL); /* Generate Numa of appropriate box dimensions */ if ((na = numaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_PERIMETER: numaAddNumber(na, w + h); break; default: L_WARNING("invalid sort type\n", procName); } } /* Get the sort index for data array */ if ((naindex = numaGetBinSortIndex(na, sortorder)) == NULL) return (PIXA *)ERROR_PTR("naindex not made", procName, NULL); /* Build up sorted pixa using sort index */ if ((pixad = pixaSortByIndex(pixas, naindex, copyflag)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); numaDestroy(&na); return pixad; } /*! * pixaSortByIndex() * * Input: pixas * naindex (na that maps from the new pixa to the input pixa) * copyflag (L_COPY, L_CLONE) * Return: pixad (sorted), or null on error */ PIXA * pixaSortByIndex(PIXA *pixas, NUMA *naindex, l_int32 copyflag) { l_int32 i, n, index; BOX *box; PIX *pix; PIXA *pixad; PROCNAME("pixaSortByIndex"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (!naindex) return (PIXA *)ERROR_PTR("naindex not defined", procName, NULL); if (copyflag != L_CLONE && copyflag != L_COPY) return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); pix = pixaGetPix(pixas, index, copyflag); box = pixaGetBox(pixas, index, copyflag); pixaAddPix(pixad, pix, L_INSERT); pixaAddBox(pixad, box, L_INSERT); } return pixad; } /*! * pixaSort2dByIndex() * * Input: pixas * naa (numaa that maps from the new pixaa to the input pixas) * copyflag (L_CLONE or L_COPY) * Return: paa (sorted), or null on error */ PIXAA * pixaSort2dByIndex(PIXA *pixas, NUMAA *naa, l_int32 copyflag) { l_int32 pixtot, ntot, i, j, n, nn, index; BOX *box; NUMA *na; PIX *pix; PIXA *pixa; PIXAA *paa; PROCNAME("pixaSort2dByIndex"); if (!pixas) return (PIXAA *)ERROR_PTR("pixas not defined", procName, NULL); if (!naa) return (PIXAA *)ERROR_PTR("naindex not defined", procName, NULL); /* Check counts */ ntot = numaaGetNumberCount(naa); pixtot = pixaGetCount(pixas); if (ntot != pixtot) return (PIXAA *)ERROR_PTR("element count mismatch", procName, NULL); n = numaaGetCount(naa); paa = pixaaCreate(n); for (i = 0; i < n; i++) { na = numaaGetNuma(naa, i, L_CLONE); nn = numaGetCount(na); pixa = pixaCreate(nn); for (j = 0; j < nn; j++) { numaGetIValue(na, j, &index); pix = pixaGetPix(pixas, index, copyflag); box = pixaGetBox(pixas, index, copyflag); pixaAddPix(pixa, pix, L_INSERT); pixaAddBox(pixa, box, L_INSERT); } pixaaAddPixa(paa, pixa, L_INSERT); numaDestroy(&na); } return paa; } /*---------------------------------------------------------------------* * Pixa and Pixaa range selection * *---------------------------------------------------------------------*/ /*! * pixaSelectRange() * * Input: pixas * first (use 0 to select from the beginning) * last (use 0 to select to the end) * copyflag (L_COPY, L_CLONE) * Return: pixad, or null on error * * Notes: * (1) The copyflag specifies what we do with each pix from pixas. * Specifically, L_CLONE inserts a clone into pixad of each * selected pix from pixas. */ PIXA * pixaSelectRange(PIXA *pixas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, npix, i; PIX *pix; PIXA *pixad; PROCNAME("pixaSelectRange"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); n = pixaGetCount(pixas); first = L_MAX(0, first); if (last <= 0) last = n - 1; if (first >= n) return (PIXA *)ERROR_PTR("invalid first", procName, NULL); if (first > last) return (PIXA *)ERROR_PTR("first > last", procName, NULL); npix = last - first + 1; pixad = pixaCreate(npix); for (i = first; i <= last; i++) { pix = pixaGetPix(pixas, i, copyflag); pixaAddPix(pixad, pix, L_INSERT); } return pixad; } /*! * pixaaSelectRange() * * Input: paas * first (use 0 to select from the beginning) * last (use 0 to select to the end) * copyflag (L_COPY, L_CLONE) * Return: paad, or null on error * * Notes: * (1) The copyflag specifies what we do with each pixa from paas. * Specifically, L_CLONE inserts a clone into paad of each * selected pixa from paas. */ PIXAA * pixaaSelectRange(PIXAA *paas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, npixa, i; PIXA *pixa; PIXAA *paad; PROCNAME("pixaaSelectRange"); if (!paas) return (PIXAA *)ERROR_PTR("paas not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXAA *)ERROR_PTR("invalid copyflag", procName, NULL); n = pixaaGetCount(paas, NULL); first = L_MAX(0, first); if (last <= 0) last = n - 1; if (first >= n) return (PIXAA *)ERROR_PTR("invalid first", procName, NULL); if (first > last) return (PIXAA *)ERROR_PTR("first > last", procName, NULL); npixa = last - first + 1; paad = pixaaCreate(npixa); for (i = first; i <= last; i++) { pixa = pixaaGetPixa(paas, i, copyflag); pixaaAddPixa(paad, pixa, L_INSERT); } return paad; } /*---------------------------------------------------------------------* * Pixa and Pixaa scaling * *---------------------------------------------------------------------*/ /*! * pixaaScaleToSize() * * Input: paas * wd (target width; use 0 if using height as target) * hd (target height; use 0 if using width as target) * Return: paad, or null on error * * Notes: * (1) This guarantees that each output scaled image has the * dimension(s) you specify. * - To specify the width with isotropic scaling, set @hd = 0. * - To specify the height with isotropic scaling, set @wd = 0. * - If both @wd and @hd are specified, the image is scaled * (in general, anisotropically) to that size. * - It is an error to set both @wd and @hd to 0. */ PIXAA * pixaaScaleToSize(PIXAA *paas, l_int32 wd, l_int32 hd) { l_int32 n, i; PIXA *pixa1, *pixa2; PIXAA *paad; PROCNAME("pixaaScaleToSize"); if (!paas) return (PIXAA *)ERROR_PTR("paas not defined", procName, NULL); if (wd <= 0 && hd <= 0) return (PIXAA *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); n = pixaaGetCount(paas, NULL); paad = pixaaCreate(n); for (i = 0; i < n; i++) { pixa1 = pixaaGetPixa(paas, i, L_CLONE); pixa2 = pixaScaleToSize(pixa1, wd, hd); pixaaAddPixa(paad, pixa2, L_INSERT); pixaDestroy(&pixa1); } return paad; } /*! * pixaaScaleToSizeVar() * * Input: paas * nawd ( target widths; use NULL if using height) * nahd ( target height; use NULL if using width) * Return: paad, or null on error * * Notes: * (1) This guarantees that the scaled images in each pixa have the * dimension(s) you specify in the numas. * - To specify the width with isotropic scaling, set @nahd = NULL. * - To specify the height with isotropic scaling, set @nawd = NULL. * - If both @nawd and @nahd are specified, the image is scaled * (in general, anisotropically) to that size. * - It is an error to set both @nawd and @nahd to NULL. * (2) If either nawd and/or nahd is defined, it must have the same * count as the number of pixa in paas. */ PIXAA * pixaaScaleToSizeVar(PIXAA *paas, NUMA *nawd, NUMA *nahd) { l_int32 n, i, wd, hd; PIXA *pixa1, *pixa2; PIXAA *paad; PROCNAME("pixaaScaleToSizeVar"); if (!paas) return (PIXAA *)ERROR_PTR("paas not defined", procName, NULL); if (!nawd && !nahd) return (PIXAA *)ERROR_PTR("!nawd && !nahd", procName, NULL); n = pixaaGetCount(paas, NULL); if (nawd && (n != numaGetCount(nawd))) return (PIXAA *)ERROR_PTR("nawd wrong size", procName, NULL); if (nahd && (n != numaGetCount(nahd))) return (PIXAA *)ERROR_PTR("nahd wrong size", procName, NULL); paad = pixaaCreate(n); for (i = 0; i < n; i++) { wd = hd = 0; if (nawd) numaGetIValue(nawd, i, &wd); if (nahd) numaGetIValue(nahd, i, &hd); pixa1 = pixaaGetPixa(paas, i, L_CLONE); pixa2 = pixaScaleToSize(pixa1, wd, hd); pixaaAddPixa(paad, pixa2, L_INSERT); pixaDestroy(&pixa1); } return paad; } /*! * pixaScaleToSize() * * Input: pixas * wd (target width; use 0 if using height as target) * hd (target height; use 0 if using width as target) * Return: pixad, or null on error * * Notes: * (1) See pixaaScaleToSize() */ PIXA * pixaScaleToSize(PIXA *pixas, l_int32 wd, l_int32 hd) { l_int32 n, i; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaScaleToSize"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (wd <= 0 && hd <= 0) return (PIXA *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixScaleToSize(pix1, wd, hd); pixCopyText(pix2, pix1); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } return pixad; } /*---------------------------------------------------------------------* * Miscellaneous functions * *---------------------------------------------------------------------*/ /*! * pixaAddBorderGeneral() * * Input: pixad (can be null or equal to pixas) * pixas (containing pix of all depths; colormap ok) * left, right, top, bot (number of pixels added) * val (value of added border pixels) * Return: pixad (with border added to each pix), including on error * * Notes: * (1) For binary images: * white: val = 0 * black: val = 1 * For grayscale images: * white: val = 2 ** d - 1 * black: val = 0 * For rgb color images: * white: val = 0xffffff00 * black: val = 0 * For colormapped images, use 'index' found this way: * white: pixcmapGetRankIntensity(cmap, 1.0, &index); * black: pixcmapGetRankIntensity(cmap, 0.0, &index); * (2) For in-place replacement of each pix with a bordered version, * use @pixad = @pixas. To make a new pixa, use @pixad = NULL. * (3) In both cases, the boxa has sides adjusted as if it were * expanded by the border. */ PIXA * pixaAddBorderGeneral(PIXA *pixad, PIXA *pixas, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val) { l_int32 i, n, nbox; BOX *box; BOXA *boxad; PIX *pixs, *pixd; PROCNAME("pixaAddBorderGeneral"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, pixad); if (left < 0 || right < 0 || top < 0 || bot < 0) return (PIXA *)ERROR_PTR("negative border added!", procName, pixad); if (pixad && (pixad != pixas)) return (PIXA *)ERROR_PTR("pixad defined but != pixas", procName, pixad); n = pixaGetCount(pixas); if (!pixad) pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixs = pixaGetPix(pixas, i, L_CLONE); pixd = pixAddBorderGeneral(pixs, left, right, top, bot, val); if (pixad == pixas) /* replace */ pixaReplacePix(pixad, i, pixd, NULL); else pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixs); } nbox = pixaGetBoxaCount(pixas); boxad = pixaGetBoxa(pixad, L_CLONE); for (i = 0; i < nbox; i++) { if ((box = pixaGetBox(pixas, i, L_COPY)) == NULL) { L_WARNING("box %d not found\n", procName, i); break; } boxAdjustSides(box, box, -left, right, -top, bot); if (pixad == pixas) /* replace */ boxaReplaceBox(boxad, i, box); else boxaAddBox(boxad, box, L_INSERT); } boxaDestroy(&boxad); return pixad; } /*! * pixaaFlattenToPixa() * * Input: paa * &naindex ( the pixa index in the pixaa) * copyflag (L_COPY or L_CLONE) * Return: pixa, or null on error * * Notes: * (1) This 'flattens' the pixaa to a pixa, taking the pix in * order in the first pixa, then the second, etc. * (2) If &naindex is defined, we generate a Numa that gives, for * each pix in the pixaa, the index of the pixa to which it belongs. */ PIXA * pixaaFlattenToPixa(PIXAA *paa, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, j, m, mb, n; BOX *box; NUMA *naindex; PIX *pix; PIXA *pixa, *pixat; PROCNAME("pixaaFlattenToPixa"); if (pnaindex) *pnaindex = NULL; if (!paa) return (PIXA *)ERROR_PTR("paa not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (PIXA *)ERROR_PTR("invalid copyflag", procName, NULL); if (pnaindex) { naindex = numaCreate(0); *pnaindex = naindex; } n = pixaaGetCount(paa, NULL); pixa = pixaCreate(n); for (i = 0; i < n; i++) { pixat = pixaaGetPixa(paa, i, L_CLONE); m = pixaGetCount(pixat); mb = pixaGetBoxaCount(pixat); for (j = 0; j < m; j++) { pix = pixaGetPix(pixat, j, copyflag); pixaAddPix(pixa, pix, L_INSERT); if (j < mb) { box = pixaGetBox(pixat, j, copyflag); pixaAddBox(pixa, box, L_INSERT); } if (pnaindex) numaAddNumber(naindex, i); /* save 'row' number */ } pixaDestroy(&pixat); } return pixa; } /*! * pixaaSizeRange() * * Input: paa * &minw, &minh, &maxw, &maxh ( range of * dimensions of all boxes) * Return: 0 if OK, 1 on error */ l_int32 pixaaSizeRange(PIXAA *paa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, minpw, minph, maxpw, maxph, i, n; PIXA *pixa; PROCNAME("pixaaSizeRange"); if (!paa) return ERROR_INT("paa not defined", procName, 1); if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", procName, 1); minw = minh = 100000000; maxw = maxh = 0; n = pixaaGetCount(paa, NULL); for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pixaSizeRange(pixa, &minpw, &minph, &maxpw, &maxph); if (minpw < minw) minw = minpw; if (minph < minh) minh = minph; if (maxpw > maxw) maxw = maxpw; if (maxph > maxh) maxh = maxph; pixaDestroy(&pixa); } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * pixaSizeRange() * * Input: pixa * &minw, &minh, &maxw, &maxh ( range of * dimensions of pix in the array) * Return: 0 if OK, 1 on error */ l_int32 pixaSizeRange(PIXA *pixa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, i, n, w, h; PIX *pix; PROCNAME("pixaSizeRange"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", procName, 1); minw = minh = 1000000; maxw = maxh = 0; n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); w = pixGetWidth(pix); h = pixGetHeight(pix); if (w < minw) minw = w; if (h < minh) minh = h; if (w > maxw) maxw = w; if (h > maxh) maxh = h; pixDestroy(&pix); } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * pixaClipToPix() * * Input: pixas * pixs * Return: pixad, or null on error * * Notes: * (1) This is intended for use in situations where pixas * was originally generated from the input pixs. * (2) Returns a pixad where each pix in pixas is ANDed * with its associated region of the input pixs. This * region is specified by the the box that is associated * with the pix. * (3) In a typical application of this function, pixas has * a set of region masks, so this generates a pixa of * the parts of pixs that correspond to each region * mask component, along with the bounding box for * the region. */ PIXA * pixaClipToPix(PIXA *pixas, PIX *pixs) { l_int32 i, n; BOX *box; PIX *pix, *pixc; PIXA *pixad; PROCNAME("pixaClipToPix"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); n = pixaGetCount(pixas); if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); box = pixaGetBox(pixas, i, L_COPY); pixc = pixClipRectangle(pixs, box, NULL); pixAnd(pixc, pixc, pix); pixaAddPix(pixad, pixc, L_INSERT); pixaAddBox(pixad, box, L_INSERT); pixDestroy(&pix); } return pixad; } /*! * pixaGetRenderingDepth() * * Input: pixa * &depth ( depth required to render if all * colormaps are removed) * Return: 0 if OK; 1 on error */ l_int32 pixaGetRenderingDepth(PIXA *pixa, l_int32 *pdepth) { l_int32 hascolor, maxdepth; PROCNAME("pixaGetRenderingDepth"); if (!pdepth) return ERROR_INT("&depth not defined", procName, 1); *pdepth = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); pixaHasColor(pixa, &hascolor); if (hascolor) { *pdepth = 32; return 0; } pixaGetDepthInfo(pixa, &maxdepth, NULL); if (maxdepth == 1) *pdepth = 1; else /* 2, 4, 8 or 16 */ *pdepth = 8; return 0; } /*! * pixaHasColor() * * Input: pixa * &hascolor ( 1 if any pix is rgb or has * a colormap with color; 0 otherwise) * Return: 0 if OK; 1 on error */ l_int32 pixaHasColor(PIXA *pixa, l_int32 *phascolor) { l_int32 i, n, hascolor, d; PIX *pix; PIXCMAP *cmap; PROCNAME("pixaHasColor"); if (!phascolor) return ERROR_INT("&hascolor not defined", procName, 1); *phascolor = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if ((cmap = pixGetColormap(pix)) != NULL) pixcmapHasColor(cmap, &hascolor); d = pixGetDepth(pix); pixDestroy(&pix); if (d == 32 || hascolor == 1) { *phascolor = 1; break; } } return 0; } /*! * pixaAnyColormaps() * * Input: pixa * &hascmap ( 1 if any pix has a colormap; 0 otherwise) * Return: 0 if OK; 1 on error */ l_int32 pixaAnyColormaps(PIXA *pixa, l_int32 *phascmap) { l_int32 i, n; PIX *pix; PIXCMAP *cmap; PROCNAME("pixaAnyColormaps"); if (!phascmap) return ERROR_INT("&hascmap not defined", procName, 1); *phascmap = 0; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); cmap = pixGetColormap(pix); pixDestroy(&pix); if (cmap) { *phascmap = 1; return 0; } } return 0; } /*! * pixaGetDepthInfo() * * Input: pixa * &maxdepth ( max pixel depth of pix in pixa) * &same ( true if all depths are equal) * Return: 0 if OK; 1 on error */ l_int32 pixaGetDepthInfo(PIXA *pixa, l_int32 *pmaxdepth, l_int32 *psame) { l_int32 i, n, d, d0; l_int32 maxd, same; /* depth info */ PROCNAME("pixaGetDepthInfo"); if (!pmaxdepth && !psame) return 0; if (pmaxdepth) *pmaxdepth = 0; if (psame) *psame = TRUE; if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if ((n = pixaGetCount(pixa)) == 0) return ERROR_INT("pixa is empty", procName, 1); same = TRUE; maxd = 0; for (i = 0; i < n; i++) { pixaGetPixDimensions(pixa, i, NULL, NULL, &d); if (i == 0) d0 = d; else if (d != d0) same = FALSE; if (d > maxd) maxd = d; } if (pmaxdepth) *pmaxdepth = maxd; if (psame) *psame = same; return 0; } /*! * pixaConvertToSameDepth() * * Input: pixas * Return: pixad, or null on error * * Notes: * (1) If any pix has a colormap, they are all converted to rgb. * Otherwise, they are all converted to the maximum depth of * all the pix. * (2) This can be used to allow lossless rendering onto a single pix. */ PIXA * pixaConvertToSameDepth(PIXA *pixas) { l_int32 i, n, same, hascmap, maxdepth; PIX *pix, *pixt; PIXA *pixat, *pixad; PROCNAME("pixaConvertToSameDepth"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); /* Remove colormaps to rgb */ if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("no components", procName, NULL); pixaAnyColormaps(pixas, &hascmap); if (hascmap) { pixat = pixaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixas, i, L_CLONE); pix = pixConvertTo32(pixt); pixaAddPix(pixat, pix, L_INSERT); pixDestroy(&pixt); } } else { pixat = pixaCopy(pixas, L_CLONE); } pixaGetDepthInfo(pixat, &maxdepth, &same); if (!same) { /* at least one pix has depth > 1 */ pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixat, i, L_CLONE); if (maxdepth <= 8) pix = pixConvertTo8(pixt, 0); else pix = pixConvertTo32(pixt); pixaAddPix(pixad, pix, L_INSERT); pixDestroy(&pixt); } } else { pixad = pixaCopy(pixat, L_CLONE); } pixaDestroy(&pixat); return pixad; } /*! * pixaEqual() * * Input: pixa1 * pixa2 * maxdist * &naindex ( index array of correspondences * &same ( 1 if equal; 0 otherwise) * Return 0 if OK, 1 on error * * Notes: * (1) The two pixa are the "same" if they contain the same * boxa and the same ordered set of pix. However, if they * have boxa, the pix in each pixa can differ in ordering * by an amount given by the parameter @maxdist. If they * don't have a boxa, the @maxdist parameter is ignored, * and the ordering must be identical. * (2) This applies only to boxa geometry, pixels and ordering; * other fields in the pix are ignored. * (3) naindex[i] gives the position of the box in pixa2 that * corresponds to box i in pixa1. It is only returned if the * pixa have boxa and the boxa are equal. * (4) In situations where the ordering is very different, so that * a large @maxdist is required for "equality", this should be * implemented with a hash function for efficiency. */ l_int32 pixaEqual(PIXA *pixa1, PIXA *pixa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame) { l_int32 i, j, n, same, sameboxa; BOXA *boxa1, *boxa2; NUMA *na; PIX *pix1, *pix2; PROCNAME("pixaEqual"); if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; sameboxa = 0; na = NULL; if (!pixa1 || !pixa2) return ERROR_INT("pixa1 and pixa2 not both defined", procName, 1); n = pixaGetCount(pixa1); if (n != pixaGetCount(pixa2)) return 0; boxa1 = pixaGetBoxa(pixa1, L_CLONE); boxa2 = pixaGetBoxa(pixa2, L_CLONE); if (!boxa1 && !boxa2) maxdist = 0; /* exact ordering required */ if (boxa1 && !boxa2) { boxaDestroy(&boxa1); return 0; } if (!boxa1 && boxa2) { boxaDestroy(&boxa2); return 0; } if (boxa1 && boxa2) { boxaEqual(boxa1, boxa2, maxdist, &na, &sameboxa); boxaDestroy(&boxa1); boxaDestroy(&boxa2); if (!sameboxa) { numaDestroy(&na); return 0; } } for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); if (na) numaGetIValue(na, i, &j); else j = i; pix2 = pixaGetPix(pixa2, j, L_CLONE); pixEqual(pix1, pix2, &same); pixDestroy(&pix1); pixDestroy(&pix2); if (!same) { numaDestroy(&na); return 0; } } *psame = 1; if (pnaindex) *pnaindex = na; else numaDestroy(&na); return 0; } leptonica-1.70/src/ropiplow.c0000644000175000017500000003603412244745031014323 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ropiplow.c * * Low level in-place full height vertical block transfer * * void rasteropVipLow() * * Low level in-place full width horizontal block transfer * * void rasteropHipLow() * void shiftDataHorizontalLow() */ #include #include "allheaders.h" #define COMBINE_PARTIAL(d, s, m) ( ((d) & ~(m)) | ((s) & (m)) ) static const l_uint32 lmask32[] = {0x0, 0x80000000, 0xc0000000, 0xe0000000, 0xf0000000, 0xf8000000, 0xfc000000, 0xfe000000, 0xff000000, 0xff800000, 0xffc00000, 0xffe00000, 0xfff00000, 0xfff80000, 0xfffc0000, 0xfffe0000, 0xffff0000, 0xffff8000, 0xffffc000, 0xffffe000, 0xfffff000, 0xfffff800, 0xfffffc00, 0xfffffe00, 0xffffff00, 0xffffff80, 0xffffffc0, 0xffffffe0, 0xfffffff0, 0xfffffff8, 0xfffffffc, 0xfffffffe, 0xffffffff}; static const l_uint32 rmask32[] = {0x0, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; /*--------------------------------------------------------------------* * Low-level Vertical In-place Rasterop * *--------------------------------------------------------------------*/ /*! * rasteropVipLow() * * Input: data (ptr to image data) * pixw (width) * pixh (height) * depth (depth) * wpl (wpl) * x (x val of UL corner of rectangle) * w (width of rectangle) * shift (+ shifts data downward in vertical column) * Return: 0 if OK; 1 on error. * * Notes: * (1) This clears the pixels that are left exposed after the * translation. You can consider them as pixels that are * shifted in from outside the image. This can be later * overridden by the incolor parameter in higher-level functions * that call this. For example, for images with depth > 1, * these pixels are cleared to black; to be white they * must later be SET to white. See, e.g., pixRasteropVip(). * (2) This function scales the width to accommodate any depth, * performs clipping, and then does the in-place rasterop. */ void rasteropVipLow(l_uint32 *data, l_int32 pixw, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 x, l_int32 w, l_int32 shift) { l_int32 fwpartb; /* boolean (1, 0) if first word is partial */ l_int32 fwpart2b; /* boolean (1, 0) if first word is doubly partial */ l_uint32 fwmask; /* mask for first partial word */ l_int32 fwbits; /* first word bits in ovrhang */ l_uint32 *pdfwpart; /* ptr to first partial dest word */ l_uint32 *psfwpart; /* ptr to first partial src word */ l_int32 fwfullb; /* boolean (1, 0) if there exists a full word */ l_int32 nfullw; /* number of full words */ l_uint32 *pdfwfull; /* ptr to first full dest word */ l_uint32 *psfwfull; /* ptr to first full src word */ l_int32 lwpartb; /* boolean (1, 0) if last word is partial */ l_uint32 lwmask; /* mask for last partial word */ l_int32 lwbits; /* last word bits in ovrhang */ l_uint32 *pdlwpart; /* ptr to last partial dest word */ l_uint32 *pslwpart; /* ptr to last partial src word */ l_int32 dirwpl; /* directed wpl (-wpl * sign(shift)) */ l_int32 absshift; /* absolute value of shift; for use in iterator */ l_int32 vlimit; /* vertical limit value for iterations */ l_int32 i, j; /*--------------------------------------------------------* * Scale horizontal dimensions by depth * *--------------------------------------------------------*/ if (depth != 1) { pixw *= depth; x *= depth; w *= depth; } /*--------------------------------------------------------* * Clip horizontally * *--------------------------------------------------------*/ if (x < 0) { w += x; /* reduce w */ x = 0; /* clip to x = 0 */ } if (x >= pixw || w <= 0) /* no part of vertical slice is in the image */ return; if (x + w > pixw) w = pixw - x; /* clip to x + w = pixw */ /*--------------------------------------------------------* * Preliminary calculations * *--------------------------------------------------------*/ /* is the first word partial? */ if ((x & 31) == 0) { /* if not */ fwpartb = 0; fwbits = 0; } else { /* if so */ fwpartb = 1; fwbits = 32 - (x & 31); fwmask = rmask32[fwbits]; if (shift >= 0) { /* go up from bottom */ pdfwpart = data + wpl * (pixh - 1) + (x >> 5); psfwpart = data + wpl * (pixh - 1 - shift) + (x >> 5); } else { /* go down from top */ pdfwpart = data + (x >> 5); psfwpart = data - wpl * shift + (x >> 5); } } /* is the first word doubly partial? */ if (w >= fwbits) { /* if not */ fwpart2b = 0; } else { /* if so */ fwpart2b = 1; fwmask &= lmask32[32 - fwbits + w]; } /* is there a full dest word? */ if (fwpart2b == 1) { /* not */ fwfullb = 0; nfullw = 0; } else { nfullw = (w - fwbits) >> 5; if (nfullw == 0) { /* if not */ fwfullb = 0; } else { /* if so */ fwfullb = 1; if (fwpartb) { pdfwfull = pdfwpart + 1; psfwfull = psfwpart + 1; } else if (shift >= 0) { /* go up from bottom */ pdfwfull = data + wpl * (pixh - 1) + (x >> 5); psfwfull = data + wpl * (pixh - 1 - shift) + (x >> 5); } else { /* go down from top */ pdfwfull = data + (x >> 5); psfwfull = data - wpl * shift + (x >> 5); } } } /* is the last word partial? */ lwbits = (x + w) & 31; if (fwpart2b == 1 || lwbits == 0) { /* if not */ lwpartb = 0; } else { lwpartb = 1; lwmask = lmask32[lwbits]; if (fwpartb) { pdlwpart = pdfwpart + 1 + nfullw; pslwpart = psfwpart + 1 + nfullw; } else if (shift >= 0) { /* go up from bottom */ pdlwpart = data + wpl * (pixh - 1) + (x >> 5) + nfullw; pslwpart = data + wpl * (pixh - 1 - shift) + (x >> 5) + nfullw; } else { /* go down from top */ pdlwpart = data + (x >> 5) + nfullw; pslwpart = data - wpl * shift + (x >> 5) + nfullw; } } /* determine the direction of flow from the shift * If the shift >= 0, data flows downard from src * to dest, starting at the bottom and working up. * If shift < 0, data flows upward from src to * dest, starting at the top and working down. */ dirwpl = (shift >= 0) ? -wpl : wpl; absshift = L_ABS(shift); vlimit = L_MAX(0, pixh - absshift); /*--------------------------------------------------------* * Now we're ready to do the ops * *--------------------------------------------------------*/ /* Do the first partial word */ if (fwpartb) { for (i = 0; i < vlimit; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, *psfwpart, fwmask); pdfwpart += dirwpl; psfwpart += dirwpl; } /* Clear the incoming pixels */ for (i = vlimit; i < pixh; i++) { *pdfwpart = COMBINE_PARTIAL(*pdfwpart, 0x0, fwmask); pdfwpart += dirwpl; } } /* Do the full words */ if (fwfullb) { for (i = 0; i < vlimit; i++) { for (j = 0; j < nfullw; j++) *(pdfwfull + j) = *(psfwfull + j); pdfwfull += dirwpl; psfwfull += dirwpl; } /* Clear the incoming pixels */ for (i = vlimit; i < pixh; i++) { for (j = 0; j < nfullw; j++) *(pdfwfull + j) = 0x0; pdfwfull += dirwpl; } } /* Do the last partial word */ if (lwpartb) { for (i = 0; i < vlimit; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, *pslwpart, lwmask); pdlwpart += dirwpl; pslwpart += dirwpl; } /* Clear the incoming pixels */ for (i = vlimit; i < pixh; i++) { *pdlwpart = COMBINE_PARTIAL(*pdlwpart, 0x0, lwmask); pdlwpart += dirwpl; } } return; } /*--------------------------------------------------------------------* * Low-level Horizontal In-place Rasterop * *--------------------------------------------------------------------*/ /*! * rasteropHipLow() * * Input: data (ptr to image data) * pixh (height) * depth (depth) * wpl (wpl) * y (y val of UL corner of rectangle) * h (height of rectangle) * shift (+ shifts data to the left in a horizontal column) * Return: 0 if OK; 1 on error. * * Notes: * (1) This clears the pixels that are left exposed after the rasterop. * Therefore, for Pix with depth > 1, these pixels become black, * and must be subsequently SET if they are to be white. * For example, see pixRasteropHip(). * (2) This function performs clipping and calls shiftDataHorizontalLine() * to do the in-place rasterop on each line. */ void rasteropHipLow(l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift) { l_int32 i; l_uint32 *line; /* clip band if necessary */ if (y < 0) { h += y; /* reduce h */ y = 0; /* clip to y = 0 */ } if (h <= 0 || y > pixh) /* no part of horizontal slice is in the image */ return; if (y + h > pixh) h = pixh - y; /* clip to y + h = pixh */ for (i = y; i < y + h; i++) { line = data + i * wpl; shiftDataHorizontalLow(line, wpl, line, wpl, shift * depth); } } /*! * shiftDataHorizontalLow() * * Input: datad (ptr to beginning of dest line) * wpld (wpl of dest) * datas (ptr to beginning of src line) * wpls (wpl of src) * shift (horizontal shift of block; >0 is to right) * Return: void * * Notes: * (1) This can also be used for in-place operation; see, e.g., * rasteropHipLow(). * (2) We are clearing the pixels that are shifted in from * outside the image. This can be overridden by the * incolor parameter in higher-level functions that call this. */ void shiftDataHorizontalLow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 shift) { l_int32 j, firstdw, wpl, rshift, lshift; l_uint32 *lined, *lines; lined = datad; lines = datas; if (shift >= 0) { /* src shift to right; data flows to * right, starting at right edge and * progressing leftward. */ firstdw = shift / 32; wpl = L_MIN(wpls, wpld - firstdw); lined += firstdw + wpl - 1; lines += wpl - 1; rshift = shift & 31; if (rshift == 0) { for (j = 0; j < wpl; j++) *lined-- = *lines--; /* clear out the rest to the left edge */ for (j = 0; j < firstdw; j++) *lined-- = 0; } else { lshift = 32 - rshift; for (j = 1; j < wpl; j++) { *lined-- = *(lines - 1) << lshift | *lines >> rshift; lines--; } *lined = *lines >> rshift; /* partial first */ /* clear out the rest to the left edge */ *lined &= ~lmask32[rshift]; lined--; for (j = 0; j < firstdw; j++) *lined-- = 0; } } else { /* src shift to left; data flows to left, starting * at left edge and progressing rightward. */ firstdw = (-shift) / 32; wpl = L_MIN(wpls - firstdw, wpld); lines += firstdw; lshift = (-shift) & 31; if (lshift == 0) { for (j = 0; j < wpl; j++) *lined++ = *lines++; /* clear out the rest to the right edge */ for (j = 0; j < firstdw; j++) *lined++ = 0; } else { rshift = 32 - lshift; for (j = 1; j < wpl; j++) { *lined++ = *lines << lshift | *(lines + 1) >> rshift; lines++; } *lined = *lines << lshift; /* partial last */ /* clear out the rest to the right edge */ /* first clear the lshift pixels of this partial word */ *lined &= ~rmask32[lshift]; lined++; /* then the remaining words to the right edge */ for (j = 0; j < firstdw; j++) *lined++ = 0; } } return; } leptonica-1.70/src/runlength.c0000640000175000017500000004672712244235353014465 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * runlength.c * * Label pixels by membership in runs * PIX *pixStrokeWidthTransform() * static PIX *pixFindMinRunsOrthogonal() * PIX *pixRunlengthTransform() * * Find runs along horizontal and vertical lines * l_int32 pixFindHorizontalRuns() * l_int32 pixFindVerticalRuns() * * Compute runlength-to-membership transform on a line * l_int32 runlengthMembershipOnLine() * * Make byte position LUT * l_int32 makeMSBitLocTab() */ #include #include #include "allheaders.h" static PIX *pixFindMinRunsOrthogonal(PIX *pixs, l_float32 angle, l_int32 depth); /*-----------------------------------------------------------------------* * Label pixels by membership in runs * *-----------------------------------------------------------------------*/ /*! * pixStrokeWidthTransform() * * Input: pixs (1 bpp) * color (0 for white runs, 1 for black runs) * depth (of pixd: 8 or 16 bpp) * nangles (2, 4, 6 or 8) * Return: pixd (8 or 16 bpp), or null on error * * Notes: * (1) The dest Pix is 8 or 16 bpp, with the pixel values * equal to the stroke width in which it is a member. * The values are clipped to the max pixel value if necessary. * (2) The color determines if we're labelling white or black strokes. * (3) A pixel that is not a member of the chosen color gets * value 0; it belongs to a width of length 0 of the * chosen color. * (4) This chooses, for each dest pixel, the minimum of sets * of runlengths through each pixel. Here are the sets: * nangles increment set * ------- --------- -------------------------------- * 2 90 {0, 90} * 4 45 {0, 45, 90, 135} * 6 30 {0, 30, 60, 90, 120, 150} * 8 22.5 {0, 22.5, 45, 67.5, 90, 112.5, 135, 157.5} * (5) Runtime scales linearly with (nangles - 2). */ PIX * pixStrokeWidthTransform(PIX *pixs, l_int32 color, l_int32 depth, l_int32 nangles) { l_float32 angle, pi; PIX *pixh, *pixv, *pixt, *pixg1, *pixg2, *pixg3, *pixg4; PROCNAME("pixStrokeWidthTransform"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (depth != 8 && depth != 16) return (PIX *)ERROR_PTR("depth must be 8 or 16 bpp", procName, NULL); if (nangles != 2 && nangles != 4 && nangles != 6 && nangles != 8) return (PIX *)ERROR_PTR("nangles not in {2,4,6,8}", procName, NULL); /* Use fg runs for evaluation */ if (color == 0) pixt = pixInvert(NULL, pixs); else pixt = pixClone(pixs); /* Find min length at 0 and 90 degrees */ pixh = pixRunlengthTransform(pixt, 1, L_HORIZONTAL_RUNS, depth); pixv = pixRunlengthTransform(pixt, 1, L_VERTICAL_RUNS, depth); pixg1 = pixMinOrMax(NULL, pixh, pixv, L_CHOOSE_MIN); pixDestroy(&pixh); pixDestroy(&pixv); pixg2 = pixg3 = pixg4 = NULL; pi = 3.1415926535; if (nangles == 4 || nangles == 8) { /* Find min length at +45 and -45 degrees */ angle = pi / 4.0; pixg2 = pixFindMinRunsOrthogonal(pixt, angle, depth); } if (nangles == 6) { /* Find min length at +30 and -60 degrees */ angle = pi / 6.0; pixg2 = pixFindMinRunsOrthogonal(pixt, angle, depth); /* Find min length at +60 and -30 degrees */ angle = pi / 3.0; pixg3 = pixFindMinRunsOrthogonal(pixt, angle, depth); } if (nangles == 8) { /* Find min length at +22.5 and -67.5 degrees */ angle = pi / 8.0; pixg3 = pixFindMinRunsOrthogonal(pixt, angle, depth); /* Find min length at +67.5 and -22.5 degrees */ angle = 3.0 * pi / 8.0; pixg4 = pixFindMinRunsOrthogonal(pixt, angle, depth); } pixDestroy(&pixt); if (nangles > 2) pixMinOrMax(pixg1, pixg1, pixg2, L_CHOOSE_MIN); if (nangles > 4) pixMinOrMax(pixg1, pixg1, pixg3, L_CHOOSE_MIN); if (nangles > 6) pixMinOrMax(pixg1, pixg1, pixg4, L_CHOOSE_MIN); pixDestroy(&pixg2); pixDestroy(&pixg3); pixDestroy(&pixg4); return pixg1; } /*! * pixFindMinRunsOrthogonal() * * Input: pixs (1 bpp) * angle (in radians) * depth (of pixd: 8 or 16 bpp) * Return: pixd (8 or 16 bpp), or null on error * * Notes: * (1) This computes, for each fg pixel in pixs, the minimum of * the runlengths going through that pixel in two orthogonal * directions: at @angle and at (90 + @angle). * (2) We use rotation by shear because the forward and backward * rotations by the same angle are exact inverse operations. * As a result, the nonzero pixels in pixd correspond exactly * to the fg pixels in pixs. This is not the case with * sampled rotation, due to spatial quantization. Nevertheless, * the result suffers from lack of exact correspondence * between original and rotated pixels, also due to spatial * quantization, causing some boundary pixels to be * shifted from bg to fg or v.v. */ static PIX * pixFindMinRunsOrthogonal(PIX *pixs, l_float32 angle, l_int32 depth) { l_int32 w, h, diag, xoff, yoff; PIX *pixb, *pixr, *pixh, *pixv, *pixg1, *pixg2, *pixd; BOX *box; PROCNAME("pixFindMinRunsOrthogonal"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); /* Rasterop into the center of a sufficiently large image * so we don't lose pixels for any rotation angle. */ pixGetDimensions(pixs, &w, &h, NULL); diag = (l_int32)(sqrt((l_float64)(w * w + h * h)) + 2.5); xoff = (diag - w) / 2; yoff = (diag - h) / 2; pixb = pixCreate(diag, diag, 1); pixRasterop(pixb, xoff, yoff, w, h, PIX_SRC, pixs, 0, 0); /* Rotate about the 'center', get the min of orthogonal transforms, * rotate back, and crop the part corresponding to pixs. */ pixr = pixRotateShear(pixb, diag / 2, diag / 2, angle, L_BRING_IN_WHITE); pixh = pixRunlengthTransform(pixr, 1, L_HORIZONTAL_RUNS, depth); pixv = pixRunlengthTransform(pixr, 1, L_VERTICAL_RUNS, depth); pixg1 = pixMinOrMax(NULL, pixh, pixv, L_CHOOSE_MIN); pixg2 = pixRotateShear(pixg1, diag / 2, diag / 2, -angle, L_BRING_IN_WHITE); box = boxCreate(xoff, yoff, w, h); pixd = pixClipRectangle(pixg2, box, NULL); pixDestroy(&pixb); pixDestroy(&pixr); pixDestroy(&pixh); pixDestroy(&pixv); pixDestroy(&pixg1); pixDestroy(&pixg2); boxDestroy(&box); return pixd; } /*! * pixRunlengthTransform() * * Input: pixs (1 bpp) * color (0 for white runs, 1 for black runs) * direction (L_HORIZONTAL_RUNS, L_VERTICAL_RUNS) * depth (8 or 16 bpp) * Return: pixd (8 or 16 bpp), or null on error * * Notes: * (1) The dest Pix is 8 or 16 bpp, with the pixel values * equal to the runlength in which it is a member. * The length is clipped to the max pixel value if necessary. * (2) The color determines if we're labelling white or black runs. * (3) A pixel that is not a member of the chosen color gets * value 0; it belongs to a run of length 0 of the * chosen color. * (4) To convert for maximum dynamic range, either linear or * log, use pixMaxDynamicRange(). */ PIX * pixRunlengthTransform(PIX *pixs, l_int32 color, l_int32 direction, l_int32 depth) { l_int32 i, j, w, h, wpld, bufsize, maxsize, n; l_int32 *start, *end, *buffer; l_uint32 *datad, *lined; PIX *pixt, *pixd; PROCNAME("pixRunlengthTransform"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (depth != 8 && depth != 16) return (PIX *)ERROR_PTR("depth must be 8 or 16 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (direction == L_HORIZONTAL_RUNS) maxsize = 1 + w / 2; else if (direction == L_VERTICAL_RUNS) maxsize = 1 + h / 2; else return (PIX *)ERROR_PTR("invalid direction", procName, NULL); bufsize = L_MAX(w, h); if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if ((start = (l_int32 *)CALLOC(maxsize, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("start not made", procName, NULL); if ((end = (l_int32 *)CALLOC(maxsize, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("end not made", procName, NULL); if ((buffer = (l_int32 *)CALLOC(bufsize, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); /* Use fg runs for evaluation */ if (color == 0) pixt = pixInvert(NULL, pixs); else pixt = pixClone(pixs); if (direction == L_HORIZONTAL_RUNS) { for (i = 0; i < h; i++) { pixFindHorizontalRuns(pixt, i, start, end, &n); runlengthMembershipOnLine(buffer, w, depth, start, end, n); lined = datad + i * wpld; if (depth == 8) { for (j = 0; j < w; j++) SET_DATA_BYTE(lined, j, buffer[j]); } else { /* depth == 16 */ for (j = 0; j < w; j++) SET_DATA_TWO_BYTES(lined, j, buffer[j]); } } } else { /* L_VERTICAL_RUNS */ for (j = 0; j < w; j++) { pixFindVerticalRuns(pixt, j, start, end, &n); runlengthMembershipOnLine(buffer, h, depth, start, end, n); if (depth == 8) { for (i = 0; i < h; i++) { lined = datad + i * wpld; SET_DATA_BYTE(lined, j, buffer[i]); } } else { /* depth == 16 */ for (i = 0; i < h; i++) { lined = datad + i * wpld; SET_DATA_TWO_BYTES(lined, j, buffer[i]); } } } } pixDestroy(&pixt); FREE(start); FREE(end); FREE(buffer); return pixd; } /*-----------------------------------------------------------------------* * Find runs along horizontal and vertical lines * *-----------------------------------------------------------------------*/ /*! * pixFindHorizontalRuns() * * Input: pix (1 bpp) * y (line to traverse) * xstart (returns array of start positions for fg runs) * xend (returns array of end positions for fg runs) * &n ( the number of runs found) * Return: 0 if OK; 1 on error * * Notes: * (1) This finds foreground horizontal runs on a single scanline. * (2) To find background runs, use pixInvert() before applying * this function. * (3) The xstart and xend arrays are input. They should be * of size w/2 + 1 to insure that they can hold * the maximum number of runs in the raster line. */ l_int32 pixFindHorizontalRuns(PIX *pix, l_int32 y, l_int32 *xstart, l_int32 *xend, l_int32 *pn) { l_int32 inrun; /* boolean */ l_int32 index, w, h, d, j, wpl, val; l_uint32 *line; PROCNAME("pixFindHorizontalRuns"); if (!pn) return ERROR_INT("&n not defined", procName, 1); *pn = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1) return ERROR_INT("pix not 1 bpp", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y not in [0 ... h - 1]", procName, 1); if (!xstart) return ERROR_INT("xstart not defined", procName, 1); if (!xend) return ERROR_INT("xend not defined", procName, 1); wpl = pixGetWpl(pix); line = pixGetData(pix) + y * wpl; inrun = FALSE; index = 0; for (j = 0; j < w; j++) { val = GET_DATA_BIT(line, j); if (!inrun) { if (val) { xstart[index] = j; inrun = TRUE; } } else { if (!val) { xend[index++] = j - 1; inrun = FALSE; } } } /* Finish last run if necessary */ if (inrun) xend[index++] = w - 1; *pn = index; return 0; } /*! * pixFindVerticalRuns() * * Input: pix (1 bpp) * x (line to traverse) * ystart (returns array of start positions for fg runs) * yend (returns array of end positions for fg runs) * &n ( the number of runs found) * Return: 0 if OK; 1 on error * * Notes: * (1) This finds foreground vertical runs on a single scanline. * (2) To find background runs, use pixInvert() before applying * this function. * (3) The ystart and yend arrays are input. They should be * of size h/2 + 1 to insure that they can hold * the maximum number of runs in the raster line. */ l_int32 pixFindVerticalRuns(PIX *pix, l_int32 x, l_int32 *ystart, l_int32 *yend, l_int32 *pn) { l_int32 inrun; /* boolean */ l_int32 index, w, h, d, i, wpl, val; l_uint32 *data, *line; PROCNAME("pixFindVerticalRuns"); if (!pn) return ERROR_INT("&n not defined", procName, 1); *pn = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1) return ERROR_INT("pix not 1 bpp", procName, 1); if (x < 0 || x >= w) return ERROR_INT("x not in [0 ... w - 1]", procName, 1); if (!ystart) return ERROR_INT("ystart not defined", procName, 1); if (!yend) return ERROR_INT("yend not defined", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); inrun = FALSE; index = 0; for (i = 0; i < h; i++) { line = data + i * wpl; val = GET_DATA_BIT(line, x); if (!inrun) { if (val) { ystart[index] = i; inrun = TRUE; } } else { if (!val) { yend[index++] = i - 1; inrun = FALSE; } } } /* Finish last run if necessary */ if (inrun) yend[index++] = h - 1; *pn = index; return 0; } /*-----------------------------------------------------------------------* * Compute runlength-to-membership transform on a line * *-----------------------------------------------------------------------*/ /*! * runlengthMembershipOnLine() * * Input: buffer (into which full line of data is placed) * size (full size of line; w or h) * depth (8 or 16 bpp) * start (array of start positions for fg runs) * end (array of end positions for fg runs) * n (the number of runs) * Return: 0 if OK; 1 on error * * Notes: * (1) Converts a set of runlengths into a buffer of * runlength membership values. * (2) Initialization of the array gives pixels that are * not within a run the value 0. */ l_int32 runlengthMembershipOnLine(l_int32 *buffer, l_int32 size, l_int32 depth, l_int32 *start, l_int32 *end, l_int32 n) { l_int32 i, j, first, last, diff, max; PROCNAME("runlengthMembershipOnLine"); if (!buffer) return ERROR_INT("buffer not defined", procName, 1); if (!start) return ERROR_INT("start not defined", procName, 1); if (!end) return ERROR_INT("end not defined", procName, 1); if (depth == 8) max = 0xff; else /* depth == 16 */ max = 0xffff; memset(buffer, 0, 4 * size); for (i = 0; i < n; i++) { first = start[i]; last = end[i]; diff = last - first + 1; diff = L_MIN(diff, max); for (j = first; j <= last; j++) buffer[j] = diff; } return 0; } /*-----------------------------------------------------------------------* * Make byte position LUT * *-----------------------------------------------------------------------*/ /*! * makeMSBitLocTab() * * Input: bitval (either 0 or 1) * Return: table (giving, for an input byte, the MS bit location, * starting at 0 with the MSBit in the byte), * or null on error. * * Notes: * (1) If bitval == 1, it finds the leftmost ON pixel in a byte; * otherwise if bitval == 0, it finds the leftmost OFF pixel. * (2) If there are no pixels of the indicated color in the byte, * this returns 8. */ l_int32 * makeMSBitLocTab(l_int32 bitval) { l_int32 i, j; l_int32 *tab; l_uint8 byte, mask; PROCNAME("makeMSBitLocTab"); if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 256; i++) { byte = (l_uint8)i; if (bitval == 0) byte = ~byte; tab[i] = 8; mask = 0x80; for (j = 0; j < 8; j++) { if (byte & mask) { tab[i] = j; break; } mask >>= 1; } } return tab; } leptonica-1.70/src/hmttemplate2.txt0000644000175000017500000000711611707052573015457 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast hit-miss transform with auto-generated sels * * Dispatcher: --- * l_int32 fhmtgen_low_*() * * Static Low-level: --- * void fhmt_*_*() */ #include "allheaders.h" --- This file is: hmttemplate2.txt --- --- insert static protos here /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /*! --- * fhmtgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fhmt* routines } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fhmt_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ---------------------- pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.70/src/alltypes.h0000644000175000017500000000425512270566037014320 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_ALLTYPES_H #define LEPTONICA_ALLTYPES_H /* Standard */ #include #include #include /* General and configuration defs */ #include "environ.h" /* Generic and non-image-specific containers */ #include "array.h" #include "bbuffer.h" #include "heap.h" #include "list.h" #include "ptra.h" #include "queue.h" #include "stack.h" /* Imaging */ #include "arrayaccess.h" #include "bmf.h" #include "ccbord.h" #include "dewarp.h" #include "gplot.h" #include "imageio.h" #include "jbclass.h" #include "morph.h" #include "pix.h" #include "recog.h" #include "regutils.h" #include "sudoku.h" #include "watershed.h" #endif /* LEPTONICA_ALLTYPES_H */ leptonica-1.70/src/maze.c0000640000175000017500000012605712244204041013374 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * maze.c * * This is a game with a pedagogical slant. A maze is represented * by a binary image. The ON pixels (fg) are walls. The goal is * to navigate on OFF pixels (bg), using Manhattan steps * (N, S, E, W), between arbitrary start and end positions. * The problem is thus to find the shortest route between two points * in a binary image that are 4-connected in the bg. This is done * with a breadth-first search, implemented with a queue. * We also use a queue of pointers to generate the maze (image). * * PIX *generateBinaryMaze() * static MAZEEL *mazeelCreate() * * PIX *pixSearchBinaryMaze() * static l_int32 localSearchForBackground() * * Generalizing a maze to a grayscale image, the search is * now for the "shortest" or least cost path, for some given * cost function. * * PIX *pixSearchGrayMaze() * * * Elegant method for finding largest white (or black) rectangle * in an image. * * l_int32 pixFindLargestRectangle() */ #include #ifdef _WIN32 #include #include #endif /* _WIN32 */ #include "allheaders.h" static const l_int32 MIN_MAZE_WIDTH = 50; static const l_int32 MIN_MAZE_HEIGHT = 50; static const l_float32 DEFAULT_WALL_PROBABILITY = 0.65; static const l_float32 DEFAULT_ANISOTROPY_RATIO = 0.25; enum { /* direction from parent to newly created element */ START_LOC = 0, DIR_NORTH = 1, DIR_SOUTH = 2, DIR_WEST = 3, DIR_EAST = 4 }; struct MazeElement { l_float32 distance; l_int32 x; l_int32 y; l_uint32 val; /* value of maze pixel at this location */ l_int32 dir; /* direction from parent to child */ }; typedef struct MazeElement MAZEEL; static MAZEEL *mazeelCreate(l_int32 x, l_int32 y, l_int32 dir); static l_int32 localSearchForBackground(PIX *pix, l_int32 *px, l_int32 *py, l_int32 maxrad); #ifndef NO_CONSOLE_IO #define DEBUG_PATH 0 #define DEBUG_MAZE 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Binary maze generation as cellular automaton * *---------------------------------------------------------------------*/ /*! * generateBinaryMaze() * * Input: w, h (size of maze) * xi, yi (initial location) * wallps (probability that a pixel to the side is ON) * ranis (ratio of prob that pixel in forward direction * is a wall to the probability that pixel in * side directions is a wall) * Return: pix, or null on error * * Notes: * (1) We have two input probability factors that determine the * density of walls and average length of straight passages. * When ranis < 1.0, you are more likely to generate a wall * to the side than going forward. Enter 0.0 for either if * you want to use the default values. * (2) This is a type of percolation problem, and exhibits * different phases for different parameters wallps and ranis. * For larger values of these parameters, regions in the maze * are not explored because the maze generator walls them * off and cannot get through. The boundary between the * two phases in this two-dimensional parameter space goes * near these values: * wallps ranis * 0.35 1.00 * 0.40 0.85 * 0.45 0.70 * 0.50 0.50 * 0.55 0.40 * 0.60 0.30 * 0.65 0.25 * 0.70 0.19 * 0.75 0.15 * 0.80 0.11 * (3) Because there is a considerable amount of overhead in calling * pixGetPixel() and pixSetPixel(), this function can be sped * up with little effort using raster line pointers and the * GET_DATA* and SET_DATA* macros. */ PIX * generateBinaryMaze(l_int32 w, l_int32 h, l_int32 xi, l_int32 yi, l_float32 wallps, l_float32 ranis) { l_int32 x, y, dir; l_uint32 val; l_float32 frand, wallpf, testp; MAZEEL *el, *elp; PIX *pixd; /* the destination maze */ PIX *pixm; /* for bookkeeping, to indicate pixels already visited */ L_QUEUE *lq; /* On Windows, seeding is apparently necessary to get decent mazes. * Windows rand() returns a value up to 2^15 - 1, whereas unix * rand() returns a value up to 2^31 - 1. Therefore the generated * mazes will differ on the two platforms. */ #ifdef _WIN32 srand(28*333); #endif /* _WIN32 */ if (w < MIN_MAZE_WIDTH) w = MIN_MAZE_WIDTH; if (h < MIN_MAZE_HEIGHT) h = MIN_MAZE_HEIGHT; if (xi <= 0 || xi >= w) xi = w / 6; if (yi <= 0 || yi >= h) yi = h / 5; if (wallps < 0.05 || wallps > 0.95) wallps = DEFAULT_WALL_PROBABILITY; if (ranis < 0.05 || ranis > 1.0) ranis = DEFAULT_ANISOTROPY_RATIO; wallpf = wallps * ranis; #if DEBUG_MAZE fprintf(stderr, "(w, h) = (%d, %d), (xi, yi) = (%d, %d)\n", w, h, xi, yi); fprintf(stderr, "Using: prob(wall) = %7.4f, anisotropy factor = %7.4f\n", wallps, ranis); #endif /* DEBUG_MAZE */ /* These are initialized to OFF */ pixd = pixCreate(w, h, 1); pixm = pixCreate(w, h, 1); lq = lqueueCreate(0); /* Prime the queue with the first pixel; it is OFF */ el = mazeelCreate(xi, yi, START_LOC); pixSetPixel(pixm, xi, yi, 1); /* mark visited */ lqueueAdd(lq, el); /* While we're at it ... */ while (lqueueGetCount(lq) > 0) { elp = (MAZEEL *)lqueueRemove(lq); x = elp->x; y = elp->y; dir = elp->dir; if (x > 0) { /* check west */ pixGetPixel(pixm, x - 1, y, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x - 1, y, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_WEST) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x - 1, y, 1); } else { /* not a wall */ el = mazeelCreate(x - 1, y, DIR_WEST); lqueueAdd(lq, el); } } } if (y > 0) { /* check north */ pixGetPixel(pixm, x, y - 1, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x, y - 1, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_NORTH) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x, y - 1, 1); } else { /* not a wall */ el = mazeelCreate(x, y - 1, DIR_NORTH); lqueueAdd(lq, el); } } } if (x < w - 1) { /* check east */ pixGetPixel(pixm, x + 1, y, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x + 1, y, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_EAST) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x + 1, y, 1); } else { /* not a wall */ el = mazeelCreate(x + 1, y, DIR_EAST); lqueueAdd(lq, el); } } } if (y < h - 1) { /* check south */ pixGetPixel(pixm, x, y + 1, &val); if (val == 0) { /* not yet visited */ pixSetPixel(pixm, x, y + 1, 1); /* mark visited */ frand = (l_float32)rand() / (l_float32)RAND_MAX; testp = wallps; if (dir == DIR_SOUTH) testp = wallpf; if (frand <= testp) { /* make it a wall */ pixSetPixel(pixd, x, y + 1, 1); } else { /* not a wall */ el = mazeelCreate(x, y + 1, DIR_SOUTH); lqueueAdd(lq, el); } } } FREE(elp); } lqueueDestroy(&lq, TRUE); pixDestroy(&pixm); return pixd; } static MAZEEL * mazeelCreate(l_int32 x, l_int32 y, l_int32 dir) { MAZEEL *el; el = (MAZEEL *)CALLOC(1, sizeof(MAZEEL)); el->x = x; el->y = y; el->dir = dir; return el; } /*---------------------------------------------------------------------* * Binary maze search * *---------------------------------------------------------------------*/ /*! * pixSearchBinaryMaze() * * Input: pixs (1 bpp, maze) * xi, yi (beginning point; use same initial point * that was used to generate the maze) * xf, yf (end point, or close to it) * &ppixd ( maze with path illustrated, or * if no path possible, the part of the maze * that was searched) * Return: pta (shortest path), or null if either no path * exists or on error * * Notes: * (1) Because of the overhead in calling pixGetPixel() and * pixSetPixel(), we have used raster line pointers and the * GET_DATA* and SET_DATA* macros for many of the pix accesses. * (2) Commentary: * The goal is to find the shortest path between beginning and * end points, without going through walls, and there are many * ways to solve this problem. * We use a queue to implement a breadth-first search. Two auxiliary * "image" data structures can be used: one to mark the visited * pixels and one to give the direction to the parent for each * visited pixels. The first structure is used to avoid putting * pixels on the queue more than once, and the second is used * for retracing back to the origin, like the breadcrumbs in * Hansel and Gretel. Each pixel taken off the queue is destroyed * after it is used to locate the allowed neighbors. In fact, * only one distance image is required, if you initialize it * to some value that signifies "not yet visited." (We use * a binary image for marking visited pixels because it is clearer.) * This method for a simple search of a binary maze is implemented in * searchBinaryMaze(). * An alternative method would store the (manhattan) distance * from the start point with each pixel on the queue. The children * of each pixel get a distance one larger than the parent. These * values can be stored in an auxiliary distance map image * that is constructed simultaneously with the search. Once the * end point is reached, the distance map is used to backtrack * along a minimum path. There may be several equal length * minimum paths, any one of which can be chosen this way. */ PTA * pixSearchBinaryMaze(PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd) { l_int32 i, j, x, y, w, h, d, found; l_uint32 val, rpixel, gpixel, bpixel; void **lines1, **linem1, **linep8, **lined32; MAZEEL *el, *elp; PIX *pixd; /* the shortest path written on the maze image */ PIX *pixm; /* for bookkeeping, to indicate pixels already visited */ PIX *pixp; /* for bookkeeping, to indicate direction to parent */ L_QUEUE *lq; PTA *pta; PROCNAME("pixSearchBinaryMaze"); if (ppixd) *ppixd = NULL; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PTA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (xi <= 0 || xi >= w) return (PTA *)ERROR_PTR("xi not valid", procName, NULL); if (yi <= 0 || yi >= h) return (PTA *)ERROR_PTR("yi not valid", procName, NULL); pixGetPixel(pixs, xi, yi, &val); if (val != 0) return (PTA *)ERROR_PTR("(xi,yi) not bg pixel", procName, NULL); pixd = NULL; pta = NULL; /* Find a bg pixel near input point (xf, yf) */ localSearchForBackground(pixs, &xf, &yf, 5); #if DEBUG_MAZE fprintf(stderr, "(xi, yi) = (%d, %d), (xf, yf) = (%d, %d)\n", xi, yi, xf, yf); #endif /* DEBUG_MAZE */ pixm = pixCreate(w, h, 1); /* initialized to OFF */ pixp = pixCreate(w, h, 8); /* direction to parent stored as enum val */ lines1 = pixGetLinePtrs(pixs, NULL); linem1 = pixGetLinePtrs(pixm, NULL); linep8 = pixGetLinePtrs(pixp, NULL); lq = lqueueCreate(0); /* Prime the queue with the first pixel; it is OFF */ el = mazeelCreate(xi, yi, 0); /* don't need direction here */ pixSetPixel(pixm, xi, yi, 1); /* mark visited */ lqueueAdd(lq, el); /* Fill up the pix storing directions to parents, * stopping when we hit the point (xf, yf) */ found = FALSE; while (lqueueGetCount(lq) > 0) { elp = (MAZEEL *)lqueueRemove(lq); x = elp->x; y = elp->y; if (x == xf && y == yf) { found = TRUE; FREE(elp); break; } if (x > 0) { /* check to west */ val = GET_DATA_BIT(linem1[y], x - 1); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y], x - 1); /* mark visited */ val = GET_DATA_BIT(lines1[y], x - 1); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y], x - 1, DIR_EAST); /* parent E */ el = mazeelCreate(x - 1, y, 0); lqueueAdd(lq, el); } } } if (y > 0) { /* check north */ val = GET_DATA_BIT(linem1[y - 1], x); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y - 1], x); /* mark visited */ val = GET_DATA_BIT(lines1[y - 1], x); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y - 1], x, DIR_SOUTH); /* parent S */ el = mazeelCreate(x, y - 1, 0); lqueueAdd(lq, el); } } } if (x < w - 1) { /* check east */ val = GET_DATA_BIT(linem1[y], x + 1); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y], x + 1); /* mark visited */ val = GET_DATA_BIT(lines1[y], x + 1); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y], x + 1, DIR_WEST); /* parent W */ el = mazeelCreate(x + 1, y, 0); lqueueAdd(lq, el); } } } if (y < h - 1) { /* check south */ val = GET_DATA_BIT(linem1[y + 1], x); if (val == 0) { /* not yet visited */ SET_DATA_BIT(linem1[y + 1], x); /* mark visited */ val = GET_DATA_BIT(lines1[y + 1], x); if (val == 0) { /* bg, not a wall */ SET_DATA_BYTE(linep8[y + 1], x, DIR_NORTH); /* parent N */ el = mazeelCreate(x, y + 1, 0); lqueueAdd(lq, el); } } } FREE(elp); } lqueueDestroy(&lq, TRUE); pixDestroy(&pixm); FREE(linem1); if (ppixd) { pixd = pixUnpackBinary(pixs, 32, 1); *ppixd = pixd; } composeRGBPixel(255, 0, 0, &rpixel); /* start point */ composeRGBPixel(0, 255, 0, &gpixel); composeRGBPixel(0, 0, 255, &bpixel); /* end point */ if (!found) { L_INFO(" No path found\n", procName); if (pixd) { /* paint all visited locations */ lined32 = pixGetLinePtrs(pixd, NULL); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linep8[i], j); if (val != 0 && pixd) SET_DATA_FOUR_BYTES(lined32[i], j, gpixel); } } FREE(lined32); } } else { /* write path onto pixd */ L_INFO(" Path found\n", procName); pta = ptaCreate(0); x = xf; y = yf; while (1) { ptaAddPt(pta, x, y); if (x == xi && y == yi) break; if (pixd) pixSetPixel(pixd, x, y, gpixel); pixGetPixel(pixp, x, y, &val); if (val == DIR_NORTH) y--; else if (val == DIR_SOUTH) y++; else if (val == DIR_EAST) x++; else if (val == DIR_WEST) x--; } } if (pixd) { pixSetPixel(pixd, xi, yi, rpixel); pixSetPixel(pixd, xf, yf, bpixel); } pixDestroy(&pixp); FREE(lines1); FREE(linep8); return pta; } /*! * localSearchForBackground() * * Input: &x, &y (starting position for search; return found position) * maxrad (max distance to search from starting location) * Return: 0 if bg pixel found; 1 if not found */ static l_int32 localSearchForBackground(PIX *pix, l_int32 *px, l_int32 *py, l_int32 maxrad) { l_int32 x, y, w, h, r, i, j; l_uint32 val; x = *px; y = *py; pixGetPixel(pix, x, y, &val); if (val == 0) return 0; /* For each value of r, restrict the search to the boundary * pixels in a square centered on (x,y), clipping to the * image boundaries if necessary. */ pixGetDimensions(pix, &w, &h, NULL); for (r = 1; r < maxrad; r++) { for (i = -r; i <= r; i++) { if (y + i < 0 || y + i >= h) continue; for (j = -r; j <= r; j++) { if (x + j < 0 || x + j >= w) continue; if (L_ABS(i) != r && L_ABS(j) != r) /* not on "r ring" */ continue; pixGetPixel(pix, x + j, y + i, &val); if (val == 0) { *px = x + j; *py = y + i; return 0; } } } } return 1; } /*---------------------------------------------------------------------* * Gray maze search * *---------------------------------------------------------------------*/ /*! * pixSearchGrayMaze() * * Input: pixs (1 bpp, maze) * xi, yi (beginning point; use same initial point * that was used to generate the maze) * xf, yf (end point, or close to it) * &ppixd ( maze with path illustrated, or * if no path possible, the part of the maze * that was searched) * Return: pta (shortest path), or null if either no path * exists or on error * * Commentary: * Consider first a slight generalization of the binary maze * search problem. Suppose that you can go through walls, * but the cost is higher (say, an increment of 3 to go into * a wall pixel rather than 1)? You're still trying to find * the shortest path. One way to do this is with an ordered * queue, and a simple way to visualize an ordered queue is as * a set of stacks, each stack being marked with the distance * of each pixel in the stack from the start. We place the * start pixel in stack 0, pop it, and process its 4 children. * Each pixel is given a distance that is incremented from that * of its parent (0 in this case), depending on if it is a wall * pixel or not. That value may be recorded on a distance map, * according to the algorithm below. For children of the first * pixel, those not on a wall go in stack 1, and wall * children go in stack 3. Stack 0 being emptied, the process * then continues with pixels being popped from stack 1. * Here is the algorithm for each child pixel. The pixel's * distance value, were it to be placed on a stack, is compared * with the value for it that is on the distance map. There * are three possible cases: * (1) If the pixel has not yet been registered, it is pushed * on its stack and the distance is written to the map. * (2) If it has previously been registered with a higher distance, * the distance on the map is relaxed to that of the * current pixel, which is then placed on its stack. * (3) If it has previously been registered with an equal * or lower value, the pixel is discarded. * The pixels are popped and processed successively from * stack 1, and when stack 1 is empty, popping starts on stack 2. * This continues until the destination pixel is popped off * a stack. The minimum path is then derived from the distance map, * going back from the end point as before. This is just Dijkstra's * algorithm for a directed graph; here, the underlying graph * (consisting of the pixels and four edges connecting each pixel * to its 4-neighbor) is a special case of a directed graph, where * each edge is bi-directional. The implementation of this generalized * maze search is left as an exercise to the reader. * * Let's generalize a bit further. Suppose the "maze" is just * a grayscale image -- think of it as an elevation map. The cost * of moving on this surface depends on the height, or the gradient, * or whatever you want. All that is required is that the cost * is specified and non-negative on each link between adjacent * pixels. Now the problem becomes: find the least cost path * moving on this surface between two specified end points. * For example, if the cost across an edge between two pixels * depends on the "gradient", you can use: * cost = 1 + L_ABS(deltaV) * where deltaV is the difference in value between two adjacent * pixels. If the costs are all integers, we can still use an array * of stacks to avoid ordering the queue (e.g., by using a heap sort.) * This is a neat problem, because you don't even have to build a * maze -- you can can use it on any grayscale image! * * Rather than using an array of stacks, a more practical * approach is to implement with a priority queue, which is * a queue that is sorted so that the elements with the largest * (or smallest) key values always come off first. The * priority queue is efficiently implemented as a heap, and * this is how we do it. Suppose you run the algorithm * using a priority queue, doing the bookkeeping with an * auxiliary image data structure that saves the distance of * each pixel put on the queue as before, according to the method * described above. We implement it as a 2-way choice by * initializing the distance array to a large value and putting * a pixel on the queue if its distance is less than the value * found on the array. When you finally pop the end pixel from * the queue, you're done, and you can trace the path backward, * either always going downhill or using an auxiliary image to * give you the direction to go at each step. This is implemented * here in searchGrayMaze(). * * Do we really have to use a sorted queue? Can we solve this * generalized maze with an unsorted queue of pixels? (Or even * an unsorted stack, doing a depth-first search (DFS)?) * Consider a different algorithm for this generalized maze, where * we travel again breadth first, but this time use a single, * unsorted queue. An auxiliary image is used as before to * store the distances and to determine if pixels get pushed * on the stack or dropped. As before, we must allow pixels * to be revisited, with relaxation of the distance if a shorter * path arrives later. As a result, we will in general have * multiple instances of the same pixel on the stack with different * distances. However, because the queue is not ordered, some of * these pixels will be popped when another instance with a lower * distance is still on the stack. Here, we're just popping them * in the order they go on, rather than setting up a priority * based on minimum distance. Thus, unlike the priority queue, * when a pixel is popped we have to check the distance map to * see if a pixel with a lower distance has been put on the queue, * and, if so, we discard the pixel we just popped. So the * "while" loop looks like this: * - pop a pixel from the queue * - check its distance against the distance stored in the * distance map; if larger, discard * - otherwise, for each of its neighbors: * - compute its distance from the start pixel * - compare this distance with that on the distance map: * - if the distance map value higher, relax the distance * and push the pixel on the queue * - if the distance map value is lower, discard the pixel * * How does this loop terminate? Before, with an ordered queue, * it terminates when you pop the end pixel. But with an unordered * queue (or stack), the first time you hit the end pixel, the * distance is not guaranteed to be correct, because the pixels * along the shortest path may not have yet been visited and relaxed. * Because the shortest path can theoretically go anywhere, * we must keep going. How do we know when to stop? Dijkstra * uses an ordered queue to systematically remove nodes from * further consideration. (Each time a pixel is popped, we're * done with it; it's "finalized" in the Dijkstra sense because * we know the shortest path to it.) However, with an unordered * queue, the brute force answer is: stop when the queue * (or stack) is empty, because then every pixel in the image * has been assigned its minimum "distance" from the start pixel. * * This is similar to the situation when you use a stack for the * simpler uniform-step problem: with breadth-first search (BFS) * the pixels on the queue are automatically ordered, so you are * done when you locate the end pixel as a neighbor of a popped pixel; * whereas depth-first search (DFS), using a stack, requires, * in general, a search of every accessible pixel. Further, if * a pixel is revisited with a smaller distance, that distance is * recorded and the pixel is put on the stack again. * * But surely, you ask, can't we stop sooner? What if the * start and end pixels are very close to each other? * OK, suppose they are, and you have very high walls and a * long snaking level path that is actually the minimum cost. * That long path can wind back and forth across the entire * maze many times before ending up at the end point, which * could be just over a wall from the start. With the unordered * queue, you very quickly get a high distance for the end * pixel, which will be relaxed to the minimum distance only * after all the pixels of the path have been visited and placed * on the queue, multiple times for many of them. So that's the * price for not ordering the queue! */ PTA * pixSearchGrayMaze(PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd) { l_int32 x, y, w, h, d; l_uint32 val, valr, vals, rpixel, gpixel, bpixel; void **lines8, **liner32, **linep8; l_int32 cost, dist, distparent, sival, sivals; MAZEEL *el, *elp; PIX *pixd; /* optionally plot the path on this RGB version of pixs */ PIX *pixr; /* for bookkeeping, to indicate the minimum distance */ /* to pixels already visited */ PIX *pixp; /* for bookkeeping, to indicate direction to parent */ L_HEAP *lh; PTA *pta; PROCNAME("pixSearchGrayMaze"); if (ppixd) *ppixd = NULL; if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PTA *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (xi <= 0 || xi >= w) return (PTA *)ERROR_PTR("xi not valid", procName, NULL); if (yi <= 0 || yi >= h) return (PTA *)ERROR_PTR("yi not valid", procName, NULL); pixd = NULL; pta = NULL; pixr = pixCreate(w, h, 32); pixSetAll(pixr); /* initialize to max value */ pixp = pixCreate(w, h, 8); /* direction to parent stored as enum val */ lines8 = pixGetLinePtrs(pixs, NULL); linep8 = pixGetLinePtrs(pixp, NULL); liner32 = pixGetLinePtrs(pixr, NULL); lh = lheapCreate(0, L_SORT_INCREASING); /* always remove closest pixels */ /* Prime the heap with the first pixel */ pixGetPixel(pixs, xi, yi, &val); el = mazeelCreate(xi, yi, 0); /* don't need direction here */ el->distance = 0; pixGetPixel(pixs, xi, yi, &val); el->val = val; pixSetPixel(pixr, xi, yi, 0); /* distance is 0 */ lheapAdd(lh, el); /* Breadth-first search with priority queue (implemented by a heap), labeling direction to parents in pixp and minimum distance to visited pixels in pixr. Stop when we pull the destination point (xf, yf) off the queue. */ while (lheapGetCount(lh) > 0) { elp = (MAZEEL *)lheapRemove(lh); if (!elp) return (PTA *)ERROR_PTR("heap broken!!", procName, NULL); x = elp->x; y = elp->y; if (x == xf && y == yf) { /* exit condition */ FREE(elp); break; } distparent = (l_int32)elp->distance; val = elp->val; sival = val; if (x > 0) { /* check to west */ vals = GET_DATA_BYTE(lines8[y], x - 1); valr = GET_DATA_FOUR_BYTES(liner32[y], x - 1); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y], x - 1, dist); /* new dist */ SET_DATA_BYTE(linep8[y], x - 1, DIR_EAST); /* parent to E */ el = mazeelCreate(x - 1, y, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } if (y > 0) { /* check north */ vals = GET_DATA_BYTE(lines8[y - 1], x); valr = GET_DATA_FOUR_BYTES(liner32[y - 1], x); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y - 1], x, dist); /* new dist */ SET_DATA_BYTE(linep8[y - 1], x, DIR_SOUTH); /* parent to S */ el = mazeelCreate(x, y - 1, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } if (x < w - 1) { /* check east */ vals = GET_DATA_BYTE(lines8[y], x + 1); valr = GET_DATA_FOUR_BYTES(liner32[y], x + 1); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y], x + 1, dist); /* new dist */ SET_DATA_BYTE(linep8[y], x + 1, DIR_WEST); /* parent to W */ el = mazeelCreate(x + 1, y, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } if (y < h - 1) { /* check south */ vals = GET_DATA_BYTE(lines8[y + 1], x); valr = GET_DATA_FOUR_BYTES(liner32[y + 1], x); sivals = (l_int32)vals; cost = 1 + L_ABS(sivals - sival); /* cost to move to this pixel */ dist = distparent + cost; if (dist < valr) { /* shortest path so far to this pixel */ SET_DATA_FOUR_BYTES(liner32[y + 1], x, dist); /* new dist */ SET_DATA_BYTE(linep8[y + 1], x, DIR_NORTH); /* parent to N */ el = mazeelCreate(x, y + 1, 0); el->val = vals; el->distance = dist; lheapAdd(lh, el); } } FREE(elp); } lheapDestroy(&lh, TRUE); if (ppixd) { pixd = pixConvert8To32(pixs); *ppixd = pixd; } composeRGBPixel(255, 0, 0, &rpixel); /* start point */ composeRGBPixel(0, 255, 0, &gpixel); composeRGBPixel(0, 0, 255, &bpixel); /* end point */ x = xf; y = yf; pta = ptaCreate(0); while (1) { /* write path onto pixd */ ptaAddPt(pta, x, y); if (x == xi && y == yi) break; if (pixd) pixSetPixel(pixd, x, y, gpixel); pixGetPixel(pixp, x, y, &val); if (val == DIR_NORTH) y--; else if (val == DIR_SOUTH) y++; else if (val == DIR_EAST) x++; else if (val == DIR_WEST) x--; pixGetPixel(pixr, x, y, &val); #if DEBUG_PATH fprintf(stderr, "(x,y) = (%d, %d); dist = %d\n", x, y, val); #endif /* DEBUG_PATH */ } if (pixd) { pixSetPixel(pixd, xi, yi, rpixel); pixSetPixel(pixd, xf, yf, bpixel); } pixDestroy(&pixp); pixDestroy(&pixr); FREE(lines8); FREE(linep8); FREE(liner32); return pta; } /*---------------------------------------------------------------------* * Largest rectangle in an image * *---------------------------------------------------------------------*/ /*! * pixFindLargestRectangle() * * Input: pixs (1 bpp) * polarity (0 within background, 1 within foreground) * &box ( largest rectangle, either by area or * by perimeter) * debugflag (1 to output image with rectangle drawn on it) * Return: 0 if OK, 1 on error * * Notes: * (1) Why is this here? This is a simple and elegant solution to * a problem in computational geometry that at first appears * quite difficult: what is the largest rectangle that can * be placed in the image, covering only pixels of one polarity * (bg or fg)? The solution is O(n), where n is the number * of pixels in the image, and it requires nothing more than * using a simple recursion relation in a single sweep of the image. * (2) In a sweep from UL to LR with left-to-right being the fast * direction, calculate the largest white rectangle at (x, y), * using previously calculated values at pixels #1 and #2: * #1: (x, y - 1) * #2: (x - 1, y) * We also need the most recent "black" pixels that were seen * in the current row and column. * Consider the largest area. There are only two possibilities: * (a) Min(w(1), horizdist) * (h(1) + 1) * (b) Min(h(2), vertdist) * (w(2) + 1) * where * horizdist: the distance from the rightmost "black" pixel seen * in the current row across to the current pixel * vertdist: the distance from the lowest "black" pixel seen * in the current column down to the current pixel * and we choose the Max of (a) and (b). * (3) To convince yourself that these recursion relations are correct, * it helps to draw the maximum rectangles at #1 and #2. * Then for #1, you try to extend the rectangle down one line, * so that the height is h(1) + 1. Do you get the full * width of #1, w(1)? It depends on where the black pixels are * in the current row. You know the final width is bounded by w(1) * and w(2) + 1, but the actual value depends on the distribution * of black pixels in the current row that are at a distance * from the current pixel that is between these limits. * We call that value "horizdist", and the area is then given * by the expression (a) above. Using similar reasoning for #2, * where you attempt to extend the rectangle to the right * by 1 pixel, you arrive at (b). The largest rectangle is * then found by taking the Max. */ l_int32 pixFindLargestRectangle(PIX *pixs, l_int32 polarity, BOX **pbox, const char *debugfile) { l_int32 i, j, w, h, d, wpls, val; l_int32 wp, hp, w1, w2, h1, h2, wmin, hmin, area1, area2; l_int32 xmax, ymax; /* LR corner of the largest rectangle */ l_int32 maxarea, wmax, hmax, vertdist, horizdist, prevfg; l_int32 *lowestfg; l_uint32 *datas, *lines; l_uint32 **linew, **lineh; BOX *box; PIX *pixw, *pixh; /* keeps the width and height for the largest */ /* rectangles whose LR corner is located there. */ PROCNAME("pixFindLargestRectangle"); if (!pbox) return ERROR_INT("&box not defined", procName, 1); *pbox = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return ERROR_INT("pixs not 1 bpp", procName, 1); if (polarity != 0 && polarity != 1) return ERROR_INT("invalid polarity", procName, 1); /* Initialize lowest "fg" seen so far for each column */ lowestfg = (l_int32 *)CALLOC(w, sizeof(l_int32)); for (i = 0; i < w; i++) lowestfg[i] = -1; /* The combination (val ^ polarity) is the color for which we * are searching for the maximum rectangle. For polarity == 0, * we search in the bg (white). */ pixw = pixCreate(w, h, 32); /* stores width */ pixh = pixCreate(w, h, 32); /* stores height */ linew = (l_uint32 **)pixGetLinePtrs(pixw, NULL); lineh = (l_uint32 **)pixGetLinePtrs(pixh, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); maxarea = xmax = ymax = wmax = hmax = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; prevfg = -1; for (j = 0; j < w; j++) { val = GET_DATA_BIT(lines, j); if ((val ^ polarity) == 0) { /* bg (0) if polarity == 0, etc. */ if (i == 0 && j == 0) { wp = hp = 1; } else if (i == 0) { wp = linew[i][j - 1] + 1; hp = 1; } else if (j == 0) { wp = 1; hp = lineh[i - 1][j] + 1; } else { /* Expand #1 prev rectangle down */ w1 = linew[i - 1][j]; h1 = lineh[i - 1][j]; horizdist = j - prevfg; wmin = L_MIN(w1, horizdist); /* width of new rectangle */ area1 = wmin * (h1 + 1); /* Expand #2 prev rectangle to right */ w2 = linew[i][j - 1]; h2 = lineh[i][j - 1]; vertdist = i - lowestfg[j]; hmin = L_MIN(h2, vertdist); /* height of new rectangle */ area2 = hmin * (w2 + 1); if (area1 > area2) { wp = wmin; hp = h1 + 1; } else { wp = w2 + 1; hp = hmin; } } } else { /* fg (1) if polarity == 0; bg (0) if polarity == 1 */ prevfg = j; lowestfg[j] = i; wp = hp = 0; } linew[i][j] = wp; lineh[i][j] = hp; if (wp * hp > maxarea) { maxarea = wp * hp; xmax = j; ymax = i; wmax = wp; hmax = hp; } } } /* Translate from LR corner to Box coords (UL corner, w, h) */ box = boxCreate(xmax - wmax + 1, ymax - hmax + 1, wmax, hmax); *pbox = box; if (debugfile) { PIX *pixdb; pixdb = pixConvertTo8(pixs, TRUE); pixRenderHashBoxArb(pixdb, box, 6, 2, L_NEG_SLOPE_LINE, 1, 255, 0, 0); pixWrite(debugfile, pixdb, IFF_PNG); pixDestroy(&pixdb); } FREE(linew); FREE(lineh); FREE(lowestfg); pixDestroy(&pixw); pixDestroy(&pixh); return 0; } leptonica-1.70/src/endianness.h0000644000175000017500000000031511465431403014574 0ustar dandan#if !defined (L_BIG_ENDIAN) && !defined (L_LITTLE_ENDIAN) # if 0 # ifdef __BIG_ENDIAN__ # define L_BIG_ENDIAN # else # define L_LITTLE_ENDIAN # endif # else # define L_LITTLE_ENDIAN # endif #endif leptonica-1.70/src/pixtiling.c0000644000175000017500000003343412244210563014455 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixtiling.c * * PIXTILING *pixTilingCreate() * void *pixTilingDestroy() * l_int32 pixTilingGetCount() * l_int32 pixTilingGetSize() * PIX *pixTilingGetTile() * l_int32 pixTilingNoStripOnPaint() * l_int32 pixTilingPaintTile() * * * This provides a simple way to split an image into tiles * and to perform operations independently on each tile. * * The tile created with pixTilingGetTile() can have pixels in * adjacent tiles for computation. The number of extra pixels * on each side of the tile is given by an 'overlap' parameter * to pixTilingCreate(). For tiles at the boundary of * the input image, quasi-overlap pixels are created by reflection * symmetry into the tile. * * Here's a typical intended usage. Suppose you want to parallelize * the operation on an image, by operating on tiles. For each * tile, you want to generate an in-place image result at the same * resolution. Suppose you choose a one-dimensional vertical tiling, * where the desired tile width is 256 pixels and the overlap is * 30 pixels on left and right sides: * * PIX *pixd = pixCreateTemplateNoInit(pixs); // output * PIXTILING *pt = pixTilingCreate(pixs, 0, 1, 256, 30, 0); * pixTilingGetCount(pt, &nx, NULL); * for (j = 0; j < nx; j++) { * PIX *pixt = pixTilingGetTile(pt, 0, j); * SomeInPlaceOperation(pixt, 30, 0, ...); * pixTilingPaintTile(pixd, 0, j, pixt, pt); * pixDestroy(&pixt); * } * * In this example, note the following: * - The unspecfified in-place operation could instead generate * a new pix. If this is done, the resulting pix must be the * same size as pixt, because pixTilingPaintTile() makes that * assumption, removing the overlap pixels before painting * into the destination. * - The 'overlap' parameters have been included in your function, * to indicate which pixels are not in the exterior overlap region. * You will need to change only pixels that are not in the overlap * region, because those are the pixels that will be painted * into the destination. * - For tiles on the outside of the image, mirrored pixels are * added to substitute for the overlap that is added to interior * tiles. This allows you to implement your function without * reference to which tile it is; no special coding is necessary * for pixels that are near the image boundary. * - The tiles are labeled by (i, j) = (row, column), * and in this example there is one row and nx columns. */ #include "allheaders.h" /*! * pixTilingCreate() * * Input: pixs (pix to be tiled; any depth; colormap OK) * nx (number of tiles across image) * ny (number of tiles down image) * w (desired width of each tile) * h (desired height of each tile) * overlap (amount of overlap into neighboring tile on each side) * Return: pixtiling, or null on error * * Notes: * (1) We put a clone of pixs in the PixTiling. * (2) The input to pixTilingCreate() for horizontal tiling can be * either the number of tiles across the image or the approximate * width of the tiles. If the latter, the actual width will be * determined by making all tiles but the last of equal width, and * making the last as close to the others as possible. The same * consideration is applied independently to the vertical tiling. * To specify tile width, set nx = 0; to specify the number of * tiles horizontally across the image, set w = 0. * (3) If pixs is to be tiled in one-dimensional strips, use ny = 1 for * vertical strips and nx = 1 for horizontal strips. * (4) The overlap must not be larger than the width or height of * the leftmost or topmost tile(s). */ PIXTILING * pixTilingCreate(PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap) { l_int32 width, height; PIXTILING *pt; PROCNAME("pixTilingCreate"); if (!pixs) return (PIXTILING *)ERROR_PTR("pixs not defined", procName, NULL); if (nx < 1 && w < 1) return (PIXTILING *)ERROR_PTR("invalid width spec", procName, NULL); if (ny < 1 && h < 1) return (PIXTILING *)ERROR_PTR("invalid height spec", procName, NULL); /* Find the tile width and number of tiles. All tiles except the * rightmost ones have the same width. The width of the * rightmost ones are at least the width of the others and * less than twice that width. Ditto for tile height. */ pixGetDimensions(pixs, &width, &height, NULL); if (nx == 0) nx = L_MAX(1, width / w); w = width / nx; /* possibly reset */ if (ny == 0) ny = L_MAX(1, height / h); h = height / ny; /* possibly reset */ if (xoverlap > w || yoverlap > h) { L_INFO("tile width = %d, tile height = %d\n", procName, w, h); return (PIXTILING *)ERROR_PTR("overlap too large", procName, NULL); } if ((pt = (PIXTILING *)CALLOC(1, sizeof(PIXTILING))) == NULL) return (PIXTILING *)ERROR_PTR("pt not made", procName, NULL); pt->pix = pixClone(pixs); pt->xoverlap = xoverlap; pt->yoverlap = yoverlap; pt->nx = nx; pt->ny = ny; pt->w = w; pt->h = h; pt->strip = TRUE; return pt; } /*! * pixTilingDestroy() * * Input: &pt () * Return: void */ void pixTilingDestroy(PIXTILING **ppt) { PIXTILING *pt; PROCNAME("pixTilingDestroy"); if (ppt == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((pt = *ppt) == NULL) return; pixDestroy(&pt->pix); FREE(pt); *ppt = NULL; return; } /*! * pixTilingGetCount() * * Input: pt (pixtiling) * &nx ( nx; can be null) * &ny ( ny; can be null) * Return: 0 if OK, 1 on error */ l_int32 pixTilingGetCount(PIXTILING *pt, l_int32 *pnx, l_int32 *pny) { PROCNAME("pixTilingGetCount"); if (!pt) return ERROR_INT("pt not defined", procName, 1); if (pnx) *pnx = pt->nx; if (pny) *pny = pt->ny; return 0; } /*! * pixTilingGetSize() * * Input: pt (pixtiling) * &w ( tile width; can be null) * &h ( tile height; can be null) * Return: 0 if OK, 1 on error */ l_int32 pixTilingGetSize(PIXTILING *pt, l_int32 *pw, l_int32 *ph) { PROCNAME("pixTilingGetSize"); if (!pt) return ERROR_INT("pt not defined", procName, 1); if (pw) *pw = pt->w; if (ph) *ph = pt->h; return 0; } /*! * pixTilingGetTile() * * Input: pt (pixtiling) * i (tile row index) * j (tile column index) * Return: pixd (tile with appropriate boundary (overlap) pixels added), * or null on error */ PIX * pixTilingGetTile(PIXTILING *pt, l_int32 i, l_int32 j) { l_int32 wpix, hpix, wt, ht, nx, ny; l_int32 xoverlap, yoverlap, wtlast, htlast; l_int32 left, top, xtraleft, xtraright, xtratop, xtrabot, width, height; BOX *box; PIX *pixs, *pixt, *pixd; PROCNAME("pixTilingGetTile"); if (!pt) return (PIX *)ERROR_PTR("pt not defined", procName, NULL); if ((pixs = pt->pix) == NULL) return (PIX *)ERROR_PTR("pix not found", procName, NULL); pixTilingGetCount(pt, &nx, &ny); if (i < 0 || i >= ny) return (PIX *)ERROR_PTR("invalid row index i", procName, NULL); if (j < 0 || j >= nx) return (PIX *)ERROR_PTR("invalid column index j", procName, NULL); /* Grab the tile with as much overlap as exists within the * input pix. First, compute the (left, top) coordinates. */ pixGetDimensions(pixs, &wpix, &hpix, NULL); pixTilingGetSize(pt, &wt, &ht); xoverlap = pt->xoverlap; yoverlap = pt->yoverlap; wtlast = wpix - wt * (nx - 1); htlast = hpix - ht * (ny - 1); left = L_MAX(0, j * wt - xoverlap); top = L_MAX(0, i * ht - yoverlap); /* Get the width and height of the tile, including whatever * overlap is available. */ if (nx == 1) width = wpix; else if (j == 0) width = wt + xoverlap; else if (j == nx - 1) width = wtlast + xoverlap; else width = wt + 2 * xoverlap; if (ny == 1) height = hpix; else if (i == 0) height = ht + yoverlap; else if (i == ny - 1) height = htlast + yoverlap; else height = ht + 2 * yoverlap; box = boxCreate(left, top, width, height); pixt = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); /* Add overlap as a mirrored border, in the 8 special cases where * the tile touches the border of the input pix. The xtratop (etc) * parameters are required where the tile is either full width * or full height. */ xtratop = xtrabot = xtraleft = xtraright = 0; if (nx == 1) xtraleft = xtraright = xoverlap; if (ny == 1) xtratop = xtrabot = yoverlap; if (i == 0 && j == 0) pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, yoverlap, xtrabot); else if (i == 0 && j == nx - 1) pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, yoverlap, xtrabot); else if (i == ny - 1 && j == 0) pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, xtratop, yoverlap); else if (i == ny - 1 && j == nx - 1) pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, xtratop, yoverlap); else if (i == 0) pixd = pixAddMirroredBorder(pixt, 0, 0, yoverlap, xtrabot); else if (i == ny - 1) pixd = pixAddMirroredBorder(pixt, 0, 0, xtratop, yoverlap); else if (j == 0) pixd = pixAddMirroredBorder(pixt, xoverlap, xtraright, 0, 0); else if (j == nx - 1) pixd = pixAddMirroredBorder(pixt, xtraleft, xoverlap, 0, 0); else pixd = pixClone(pixt); pixDestroy(&pixt); return pixd; } /*! * pixTilingNoStripOnPaint() * * Input: pt (pixtiling) * Return: 0 if OK, 1 on error * * Notes: * (1) The default for paint is to strip out the overlap pixels * that are added by pixTilingGetTile(). However, some * operations will generate an image with these pixels * stripped off. This tells the paint operation not * to strip the added boundary pixels when painting. */ l_int32 pixTilingNoStripOnPaint(PIXTILING *pt) { PROCNAME("pixTilingNoStripOnPaint"); if (!pt) return ERROR_INT("pt not defined", procName, 1); pt->strip = FALSE; return 0; } /*! * pixTilingPaintTile() * * Input: pixd (dest: paint tile onto this, without overlap) * i (tile row index) * j (tile column index) * pixs (source: tile to be painted from) * pt (pixtiling struct) * Return: 0 if OK, 1 on error */ l_int32 pixTilingPaintTile(PIX *pixd, l_int32 i, l_int32 j, PIX *pixs, PIXTILING *pt) { l_int32 w, h; PROCNAME("pixTilingPaintTile"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pt) return ERROR_INT("pt not defined", procName, 1); if (i < 0 || i >= pt->ny) return ERROR_INT("invalid row index i", procName, 1); if (j < 0 || j >= pt->nx) return ERROR_INT("invalid column index j", procName, 1); /* Strip added border pixels off if requested */ pixGetDimensions(pixs, &w, &h, NULL); if (pt->strip == TRUE) pixRasterop(pixd, j * pt->w, i * pt->h, w - 2 * pt->xoverlap, h - 2 * pt->yoverlap, PIX_SRC, pixs, pt->xoverlap, pt->yoverlap); else pixRasterop(pixd, j * pt->w, i * pt->h, w, h, PIX_SRC, pixs, 0, 0); return 0; } leptonica-1.70/src/colormap.c0000644000175000017500000014754412244517742014303 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colormap.c * * Colormap creation, copy, destruction, addition * PIXCMAP *pixcmapCreate() * PIXCMAP *pixcmapCreateRandom() * PIXCMAP *pixcmapCreateLinear() * PIXCMAP *pixcmapCopy() * void pixcmapDestroy() * l_int32 pixcmapAddColor() * l_int32 pixcmapAddRGBA() * l_int32 pixcmapAddNewColor() * l_int32 pixcmapAddNearestColor() * l_int32 pixcmapUsableColor() * l_int32 pixcmapAddBlackOrWhite() * l_int32 pixcmapSetBlackAndWhite() * l_int32 pixcmapGetCount() * l_int32 pixcmapGetDepth() * l_int32 pixcmapGetMinDepth() * l_int32 pixcmapGetFreeCount() * l_int32 pixcmapClear() * * Colormap random access and test * l_int32 pixcmapGetColor() * l_int32 pixcmapGetColor32() * l_int32 pixcmapGetRGBA() * l_int32 pixcmapGetRGBA32() * l_int32 pixcmapResetColor() * l_int32 pixcmapGetIndex() * l_int32 pixcmapHasColor() * l_int32 pixcmapIsOpaque() * l_int32 pixcmapCountGrayColors() * l_int32 pixcmapGetRankIntensity() * l_int32 pixcmapGetNearestIndex() * l_int32 pixcmapGetNearestGrayIndex() * l_int32 pixcmapGetComponentRange() * l_int32 pixcmapGetExtremeValue() * * Colormap conversion * PIXCMAP *pixcmapGrayToColor() * PIXCMAP *pixcmapColorToGray() * * Colormap I/O * l_int32 pixcmapReadStream() * l_int32 pixcmapWriteStream() * * Extract colormap arrays and serialization * l_int32 pixcmapToArrays() * l_int32 pixcmapToRGBTable() * l_int32 pixcmapSerializeToMemory() * PIXCMAP *pixcmapDeserializeFromMemory() * char *pixcmapConvertToHex() * * Colormap transforms * l_int32 pixcmapGammaTRC() * l_int32 pixcmapContrastTRC() * l_int32 pixcmapShiftIntensity() * l_int32 pixcmapShiftByComponent() */ #include #include "allheaders.h" /*-------------------------------------------------------------* * Colormap creation and addition * *-------------------------------------------------------------*/ /*! * pixcmapCreate() * * Input: depth (bpp, of pix) * Return: cmap, or null on error */ PIXCMAP * pixcmapCreate(l_int32 depth) { RGBA_QUAD *cta; PIXCMAP *cmap; PROCNAME("pixcmapCreate"); if (depth != 1 && depth != 2 && depth !=4 && depth != 8) return (PIXCMAP *)ERROR_PTR("depth not in {1,2,4,8}", procName, NULL); if ((cmap = (PIXCMAP *)CALLOC(1, sizeof(PIXCMAP))) == NULL) return (PIXCMAP *)ERROR_PTR("cmap not made", procName, NULL); cmap->depth = depth; cmap->nalloc = 1 << depth; if ((cta = (RGBA_QUAD *)CALLOC(cmap->nalloc, sizeof(RGBA_QUAD))) == NULL) return (PIXCMAP *)ERROR_PTR("cta not made", procName, NULL); cmap->array = cta; cmap->n = 0; return cmap; } /*! * pixcmapCreateRandom() * * Input: depth (bpp, of pix; 2, 4 or 8) * hasblack (1 if the first color is black; 0 if no black) * haswhite (1 if the last color is white; 0 if no white) * Return: cmap, or null on error * * Notes: * (1) This sets up a colormap with random colors, * where the first color is optionally black, the last color * is optionally white, and the remaining colors are * chosen randomly. * (2) The number of randomly chosen colors is: * 2^(depth) - haswhite - hasblack * (3) Because rand() is seeded, it might disrupt otherwise * deterministic results if also used elsewhere in a program. * (4) rand() is not threadsafe, and will generate garbage if run * on multiple threads at once -- though garbage is generally * what you want from a random number generator! * (5) Modern rand()s have equal randomness in low and high order * bits, but older ones don't. Here, we're just using rand() * to choose colors for output. */ PIXCMAP * pixcmapCreateRandom(l_int32 depth, l_int32 hasblack, l_int32 haswhite) { l_int32 ncolors, i; l_int32 red[256], green[256], blue[256]; PIXCMAP *cmap; PROCNAME("pixcmapCreateRandom"); if (depth != 2 && depth != 4 && depth != 8) return (PIXCMAP *)ERROR_PTR("depth not in {2, 4, 8}", procName, NULL); if (hasblack != 0) hasblack = 1; if (haswhite != 0) haswhite = 1; cmap = pixcmapCreate(depth); ncolors = 1 << depth; if (hasblack) /* first color is optionally black */ pixcmapAddColor(cmap, 0, 0, 0); for (i = hasblack; i < ncolors - haswhite; i++) { red[i] = (l_uint32)rand() & 0xff; green[i] = (l_uint32)rand() & 0xff; blue[i] = (l_uint32)rand() & 0xff; pixcmapAddColor(cmap, red[i], green[i], blue[i]); } if (haswhite) /* last color is optionally white */ pixcmapAddColor(cmap, 255, 255, 255); return cmap; } /*! * pixcmapCreateLinear() * * Input: d (depth of pix for this colormap; 1, 2, 4 or 8) * nlevels (valid in range [2, 2^d]) * Return: cmap, or null on error * * Notes: * (1) Colormap has equally spaced gray color values * from black (0, 0, 0) to white (255, 255, 255). */ PIXCMAP * pixcmapCreateLinear(l_int32 d, l_int32 nlevels) { l_int32 maxlevels, i, val; PIXCMAP *cmap; PROCNAME("pixcmapCreateLinear"); if (d != 1 && d != 2 && d !=4 && d != 8) return (PIXCMAP *)ERROR_PTR("d not in {1, 2, 4, 8}", procName, NULL); maxlevels = 1 << d; if (nlevels < 2 || nlevels > maxlevels) return (PIXCMAP *)ERROR_PTR("invalid nlevels", procName, NULL); cmap = pixcmapCreate(d); for (i = 0; i < nlevels; i++) { val = (255 * i) / (nlevels - 1); pixcmapAddColor(cmap, val, val, val); } return cmap; } /*! * pixcmapCopy() * * Input: cmaps * Return: cmapd, or null on error */ PIXCMAP * pixcmapCopy(PIXCMAP *cmaps) { l_int32 nbytes; PIXCMAP *cmapd; PROCNAME("pixcmapCopy"); if (!cmaps) return (PIXCMAP *)ERROR_PTR("cmaps not defined", procName, NULL); if ((cmapd = (PIXCMAP *)CALLOC(1, sizeof(PIXCMAP))) == NULL) return (PIXCMAP *)ERROR_PTR("cmapd not made", procName, NULL); nbytes = cmaps->nalloc * sizeof(RGBA_QUAD); if ((cmapd->array = (void *)CALLOC(1, nbytes)) == NULL) return (PIXCMAP *)ERROR_PTR("cmap array not made", procName, NULL); memcpy(cmapd->array, cmaps->array, nbytes); cmapd->n = cmaps->n; cmapd->nalloc = cmaps->nalloc; cmapd->depth = cmaps->depth; return cmapd; } /*! * pixcmapDestroy() * * Input: &cmap () * Return: void */ void pixcmapDestroy(PIXCMAP **pcmap) { PIXCMAP *cmap; PROCNAME("pixcmapDestroy"); if (pcmap == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((cmap = *pcmap) == NULL) return; FREE(cmap->array); FREE(cmap); *pcmap = NULL; return; } /*! * pixcmapAddColor() * * Input: cmap * rval, gval, bval (colormap entry to be added; each number * is in range [0, ... 255]) * Return: 0 if OK, 1 on error * * Notes: * (1) This always adds the color if there is room. * (2) The alpha component is 255 (opaque) */ l_int32 pixcmapAddColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval) { RGBA_QUAD *cta; PROCNAME("pixcmapAddColor"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (cmap->n >= cmap->nalloc) return ERROR_INT("no free color entries", procName, 1); cta = (RGBA_QUAD *)cmap->array; cta[cmap->n].red = rval; cta[cmap->n].green = gval; cta[cmap->n].blue = bval; cta[cmap->n].alpha = 255; cmap->n++; return 0; } /*! * pixcmapAddRGBA() * * Input: cmap * rval, gval, bval, aval (colormap entry to be added; * each number is in range [0, ... 255]) * Return: 0 if OK, 1 on error * * Notes: * (1) This always adds the color if there is room. */ l_int32 pixcmapAddRGBA(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval) { RGBA_QUAD *cta; PROCNAME("pixcmapAddRGBA"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (cmap->n >= cmap->nalloc) return ERROR_INT("no free color entries", procName, 1); cta = (RGBA_QUAD *)cmap->array; cta[cmap->n].red = rval; cta[cmap->n].green = gval; cta[cmap->n].blue = bval; cta[cmap->n].alpha = aval; cmap->n++; return 0; } /*! * pixcmapAddNewColor() * * Input: cmap * rval, gval, bval (colormap entry to be added; each number * is in range [0, ... 255]) * &index ( index of color) * Return: 0 if OK, 1 on error; 2 if unable to add color * * Notes: * (1) This only adds color if not already there. * (2) The alpha component is 255 (opaque) * (3) This returns the index of the new (or existing) color. * (4) Returns 2 with a warning if unable to add this color; * the caller should check the return value. */ l_int32 pixcmapAddNewColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { PROCNAME("pixcmapAddNewColor"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); /* Check if the color is already present. */ if (!pixcmapGetIndex(cmap, rval, gval, bval, pindex)) /* found */ return 0; /* We need to add the color. Is there room? */ if (cmap->n >= cmap->nalloc) { L_WARNING("no free color entries\n", procName); return 2; } /* There's room. Add it. */ pixcmapAddColor(cmap, rval, gval, bval); *pindex = pixcmapGetCount(cmap) - 1; return 0; } /*! * pixcmapAddNearestColor() * * Input: cmap * rval, gval, bval (colormap entry to be added; each number * is in range [0, ... 255]) * &index ( index of color) * Return: 0 if OK, 1 on error * * Notes: * (1) This only adds color if not already there. * (2) The alpha component is 255 (opaque) * (3) If it's not in the colormap and there is no room to add * another color, this returns the index of the nearest color. */ l_int32 pixcmapAddNearestColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { PROCNAME("pixcmapAddNearestColor"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); /* Check if the color is already present. */ if (!pixcmapGetIndex(cmap, rval, gval, bval, pindex)) /* found */ return 0; /* We need to add the color. Is there room? */ if (cmap->n < cmap->nalloc) { pixcmapAddColor(cmap, rval, gval, bval); *pindex = pixcmapGetCount(cmap) - 1; return 0; } /* There's no room. Return the index of the nearest color */ pixcmapGetNearestIndex(cmap, rval, gval, bval, pindex); return 0; } /*! * pixcmapUsableColor() * * Input: cmap * rval, gval, bval (colormap entry to be added; each number * is in range [0, ... 255]) * usable ( 1 if usable; 0 if not) * Return: 0 if OK, 1 on error * * Notes: * (1) This checks if the color already exists or if there is * room to add it. It makes no change in the colormap. */ l_int32 pixcmapUsableColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pusable) { l_int32 index; PROCNAME("pixcmapUsableColor"); if (!pusable) return ERROR_INT("&usable not defined", procName, 1); *pusable = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); /* Is there room to add it? */ if (cmap->n < cmap->nalloc) { *pusable = 1; return 0; } /* No room; check if the color is already present. */ if (!pixcmapGetIndex(cmap, rval, gval, bval, &index)) /* found */ *pusable = 1; return 0; } /*! * pixcmapAddBlackOrWhite() * * Input: cmap * color (0 for black, 1 for white) * &index ( index of color; can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) This only adds color if not already there. * (2) The alpha component is 255 (opaque) * (3) This sets index to the requested color. * (4) If there is no room in the colormap, returns the index * of the closest color. */ l_int32 pixcmapAddBlackOrWhite(PIXCMAP *cmap, l_int32 color, l_int32 *pindex) { l_int32 index; PROCNAME("pixcmapAddBlackOrWhite"); if (pindex) *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (color == 0) { /* black */ if (pixcmapGetFreeCount(cmap) > 0) pixcmapAddNewColor(cmap, 0, 0, 0, &index); else pixcmapGetRankIntensity(cmap, 0.0, &index); } else { /* white */ if (pixcmapGetFreeCount(cmap) > 0) pixcmapAddNewColor(cmap, 255, 255, 255, &index); else pixcmapGetRankIntensity(cmap, 1.0, &index); } if (pindex) *pindex = index; return 0; } /*! * pixcmapSetBlackAndWhite() * * Input: cmap * setblack (0 for no operation; 1 to set darkest color to black) * setwhite (0 for no operation; 1 to set lightest color to white) * Return: 0 if OK, 1 on error */ l_int32 pixcmapSetBlackAndWhite(PIXCMAP *cmap, l_int32 setblack, l_int32 setwhite) { l_int32 index; PROCNAME("pixcmapSetBlackAndWhite"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (setblack) { pixcmapGetRankIntensity(cmap, 0.0, &index); pixcmapResetColor(cmap, index, 0, 0, 0); } if (setwhite) { pixcmapGetRankIntensity(cmap, 1.0, &index); pixcmapResetColor(cmap, index, 255, 255, 255); } return 0; } /*! * pixcmapGetCount() * * Input: cmap * Return: count, or 0 on error */ l_int32 pixcmapGetCount(PIXCMAP *cmap) { PROCNAME("pixcmapGetCount"); if (!cmap) return ERROR_INT("cmap not defined", procName, 0); return cmap->n; } /*! * pixcmapGetFreeCount() * * Input: cmap * Return: free entries, or 0 on error */ l_int32 pixcmapGetFreeCount(PIXCMAP *cmap) { PROCNAME("pixcmapGetFreeCount"); if (!cmap) return ERROR_INT("cmap not defined", procName, 0); return (cmap->nalloc - cmap->n); } /*! * pixcmapGetDepth() * * Input: cmap * Return: depth, or 0 on error */ l_int32 pixcmapGetDepth(PIXCMAP *cmap) { PROCNAME("pixcmapGetDepth"); if (!cmap) return ERROR_INT("cmap not defined", procName, 0); return cmap->depth; } /*! * pixcmapGetMinDepth() * * Input: cmap * &mindepth ( minimum depth to support the colormap) * Return: 0 if OK, 1 on error * * Notes: * (1) On error, &mindepth is returned as 0. */ l_int32 pixcmapGetMinDepth(PIXCMAP *cmap, l_int32 *pmindepth) { l_int32 ncolors; PROCNAME("pixcmapGetMinDepth"); if (!pmindepth) return ERROR_INT("&mindepth not defined", procName, 1); *pmindepth = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); if (ncolors <= 4) *pmindepth = 2; else if (ncolors <= 16) *pmindepth = 4; else /* ncolors > 16 */ *pmindepth = 8; return 0; } /*! * pixcmapClear() * * Input: cmap * Return: 0 if OK, 1 on error * * Note: this removes the colors by setting the count to 0. */ l_int32 pixcmapClear(PIXCMAP *cmap) { PROCNAME("pixcmapClear"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); cmap->n = 0; return 0; } /*-------------------------------------------------------------* * Colormap random access * *-------------------------------------------------------------*/ /*! * pixcmapGetColor() * * Input: cmap * index * &rval, &gval, &bval ( each color value) * Return: 0 if OK, 1 if not accessable (caller should check) */ l_int32 pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { RGBA_QUAD *cta; PROCNAME("pixcmapGetColor"); if (!prval || !pgval || !pbval) return ERROR_INT("&rval, &gval, &bval not all defined", procName, 1); *prval = *pgval = *pbval = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (index < 0 || index >= cmap->n) return ERROR_INT("index out of bounds", procName, 1); cta = (RGBA_QUAD *)cmap->array; *prval = cta[index].red; *pgval = cta[index].green; *pbval = cta[index].blue; return 0; } /*! * pixcmapGetColor32() * * Input: cmap * index * &val32 ( 32-bit rgb color value) * Return: 0 if OK, 1 if not accessable (caller should check) * * Notes: * (1) The returned alpha channel value is 0. */ l_int32 pixcmapGetColor32(PIXCMAP *cmap, l_int32 index, l_uint32 *pval32) { l_int32 rval, gval, bval; PROCNAME("pixcmapGetColor32"); if (!pval32) return ERROR_INT("&val32 not defined", procName, 1); *pval32 = 0; if (pixcmapGetColor(cmap, index, &rval, &gval, &bval) != 0) return ERROR_INT("rgb values not found", procName, 1); composeRGBPixel(rval, gval, bval, pval32); return 0; } /*! * pixcmapGetRGBA() * * Input: cmap * index * &rval, &gval, &bval, &aval ( each color value) * Return: 0 if OK, 1 if not accessable (caller should check) */ l_int32 pixcmapGetRGBA(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval) { RGBA_QUAD *cta; PROCNAME("pixcmapGetRGBA"); if (!prval || !pgval || !pbval || !paval) return ERROR_INT("&rval, &gval, &bval, &aval not all defined", procName, 1); *prval = *pgval = *pbval = *paval = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (index < 0 || index >= cmap->n) return ERROR_INT("index out of bounds", procName, 1); cta = (RGBA_QUAD *)cmap->array; *prval = cta[index].red; *pgval = cta[index].green; *pbval = cta[index].blue; *paval = cta[index].alpha; return 0; } /*! * pixcmapGetRGBA32() * * Input: cmap * index * &val32 ( 32-bit rgba color value) * Return: 0 if OK, 1 if not accessable (caller should check) */ l_int32 pixcmapGetRGBA32(PIXCMAP *cmap, l_int32 index, l_uint32 *pval32) { l_int32 rval, gval, bval, aval; PROCNAME("pixcmapGetRGBA32"); if (!pval32) return ERROR_INT("&val32 not defined", procName, 1); *pval32 = 0; if (pixcmapGetRGBA(cmap, index, &rval, &gval, &bval, &aval) != 0) return ERROR_INT("rgba values not found", procName, 1); composeRGBAPixel(rval, gval, bval, aval, pval32); return 0; } /*! * pixcmapResetColor() * * Input: cmap * index * rval, gval, bval (colormap entry to be reset; each number * is in range [0, ... 255]) * Return: 0 if OK, 1 if not accessable (caller should check) * * Notes: * (1) This resets sets the color of an entry that has already * been set and included in the count of colors. * (2) The alpha component is 255 (opaque) */ l_int32 pixcmapResetColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval) { RGBA_QUAD *cta; PROCNAME("pixcmapResetColor"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (index < 0 || index >= cmap->n) return ERROR_INT("index out of bounds", procName, 1); cta = (RGBA_QUAD *)cmap->array; cta[index].red = rval; cta[index].green = gval; cta[index].blue = bval; cta[index].alpha = 255; return 0; } /*! * pixcmapGetIndex() * * Input: cmap * rval, gval, bval (colormap colors to search for; each number * is in range [0, ... 255]) * &index () * Return: 0 if found, 1 if not found (caller must check) */ l_int32 pixcmapGetIndex(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { l_int32 n, i; RGBA_QUAD *cta; PROCNAME("pixcmapGetIndex"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); n = pixcmapGetCount(cmap); cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < n; i++) { if (rval == cta[i].red && gval == cta[i].green && bval == cta[i].blue) { *pindex = i; return 0; } } return 1; } /*! * pixcmapHasColor() * * Input: cmap * &color ( TRUE if cmap has color; FALSE otherwise) * Return: 0 if OK, 1 on error */ l_int32 pixcmapHasColor(PIXCMAP *cmap, l_int32 *pcolor) { l_int32 n, i; l_int32 *rmap, *gmap, *bmap; PROCNAME("pixcmapHasColor"); if (!pcolor) return ERROR_INT("&color not defined", procName, 1); *pcolor = FALSE; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL)) return ERROR_INT("colormap arrays not made", procName, 1); n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { if ((rmap[i] != gmap[i]) || (rmap[i] != bmap[i])) { *pcolor = TRUE; break; } } FREE(rmap); FREE(gmap); FREE(bmap); return 0; } /*! * pixcmapIsOpaque() * * Input: cmap * &opaque ( TRUE if fully opaque: all entries are 255) * Return: 0 if OK, 1 on error */ l_int32 pixcmapIsOpaque(PIXCMAP *cmap, l_int32 *popaque) { l_int32 i, n; RGBA_QUAD *cta; PROCNAME("pixcmapIsOpaque"); if (!popaque) return ERROR_INT("&opaque not defined", procName, 1); *popaque = TRUE; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); n = pixcmapGetCount(cmap); cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < n; i++) { if (cta[i].alpha != 255) { *popaque = FALSE; break; } } return 0; } /*! * pixcmapCountGrayColors() * * Input: cmap * &ngray ( number of gray colors) * Return: 0 if OK, 1 on error * * Notes: * (1) This counts the unique gray colors, including black and white. */ l_int32 pixcmapCountGrayColors(PIXCMAP *cmap, l_int32 *pngray) { l_int32 n, i, rval, gval, bval, count; l_int32 *array; PROCNAME("pixcmapCountGrayColors"); if (!pngray) return ERROR_INT("&ngray not defined", procName, 1); *pngray = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); array = (l_int32 *)CALLOC(256, sizeof(l_int32)); n = pixcmapGetCount(cmap); count = 0; for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if ((rval == gval) && (rval == bval) && (array[rval] == 0)) { array[rval] = 1; count++; } } FREE(array); *pngray = count; return 0; } /*! * pixcmapGetRankIntensity() * * Input: cmap * rankval (0.0 for darkest, 1.0 for lightest color) * &index ( the index into the colormap that * corresponds to the rank intensity color) * Return: 0 if OK, 1 on error */ l_int32 pixcmapGetRankIntensity(PIXCMAP *cmap, l_float32 rankval, l_int32 *pindex) { l_int32 n, i, rval, gval, bval, rankindex; NUMA *na, *nasort; PROCNAME("pixcmapGetRankIntensity"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (rankval < 0.0 || rankval > 1.0) return ERROR_INT("rankval not in [0.0 ... 1.0]", procName, 1); n = pixcmapGetCount(cmap); na = numaCreate(n); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaAddNumber(na, rval + gval + bval); } nasort = numaGetSortIndex(na, L_SORT_INCREASING); rankindex = (l_int32)(rankval * (n - 1) + 0.5); numaGetIValue(nasort, rankindex, pindex); numaDestroy(&na); numaDestroy(&nasort); return 0; } /*! * pixcmapGetNearestIndex() * * Input: cmap * rval, gval, bval (colormap colors to search for; each number * is in range [0, ... 255]) * &index ( the index of the nearest color) * Return: 0 if OK, 1 on error (caller must check) * * Notes: * (1) Returns the index of the exact color if possible, otherwise the * index of the color closest to the target color. * (2) Nearest color is that which is the least sum-of-squares distance * from the target color. */ l_int32 pixcmapGetNearestIndex(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex) { l_int32 i, n, delta, dist, mindist; RGBA_QUAD *cta; PROCNAME("pixcmapGetNearestIndex"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = UNDEF; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if ((cta = (RGBA_QUAD *)cmap->array) == NULL) return ERROR_INT("cta not defined(!)", procName, 1); n = pixcmapGetCount(cmap); mindist = 3 * 255 * 255 + 1; for (i = 0; i < n; i++) { delta = cta[i].red - rval; dist = delta * delta; delta = cta[i].green - gval; dist += delta * delta; delta = cta[i].blue - bval; dist += delta * delta; if (dist < mindist) { *pindex = i; if (dist == 0) break; mindist = dist; } } return 0; } /*! * pixcmapGetNearestGrayIndex() * * Input: cmap * val (gray value to search for; in range [0, ... 255]) * &index ( the index of the nearest color) * Return: 0 if OK, 1 on error (caller must check) * * Notes: * (1) This should be used on gray colormaps. It uses only the * green value of the colormap. * (2) Returns the index of the exact color if possible, otherwise the * index of the color closest to the target color. */ l_int32 pixcmapGetNearestGrayIndex(PIXCMAP *cmap, l_int32 val, l_int32 *pindex) { l_int32 i, n, dist, mindist; RGBA_QUAD *cta; PROCNAME("pixcmapGetNearestGrayIndex"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (val < 0 || val > 255) return ERROR_INT("val not in [0 ... 255]", procName, 1); if ((cta = (RGBA_QUAD *)cmap->array) == NULL) return ERROR_INT("cta not defined(!)", procName, 1); n = pixcmapGetCount(cmap); mindist = 256; for (i = 0; i < n; i++) { dist = cta[i].green - val; dist = L_ABS(dist); if (dist < mindist) { *pindex = i; if (dist == 0) break; mindist = dist; } } return 0; } /*! * pixcmapGetComponentRange() * * Input: cmap * color (L_SELECT_RED, L_SELECT_GREEN or L_SELECT_BLUE) * &minval ( minimum value of component) * &maxval ( minimum value of component) * Return: 0 if OK, 1 on error * * Notes: * (1) Returns for selected components the extreme value * (either min or max) of the color component that is * found in the colormap. */ l_int32 pixcmapGetComponentRange(PIXCMAP *cmap, l_int32 color, l_int32 *pminval, l_int32 *pmaxval) { PROCNAME("pixcmapGetComponentRange"); if (pminval) *pminval = 0; if (pmaxval) *pmaxval = 0; if (!pminval && !pmaxval) return ERROR_INT("no result requested", procName, 1); if (color == L_SELECT_RED) { pixcmapGetExtremeValue(cmap, L_SELECT_MIN, pminval, NULL, NULL); pixcmapGetExtremeValue(cmap, L_SELECT_MAX, pmaxval, NULL, NULL); } else if (color == L_SELECT_GREEN) { pixcmapGetExtremeValue(cmap, L_SELECT_MIN, NULL, pminval, NULL); pixcmapGetExtremeValue(cmap, L_SELECT_MAX, NULL, pmaxval, NULL); } else if (color == L_SELECT_BLUE) { pixcmapGetExtremeValue(cmap, L_SELECT_MIN, NULL, NULL, pminval); pixcmapGetExtremeValue(cmap, L_SELECT_MAX, NULL, NULL, pmaxval); } else { return ERROR_INT("invalid color", procName, 1); } return 0; } /*! * pixcmapGetExtremeValue() * * Input: cmap * type (L_SELECT_MIN or L_SELECT_MAX) * &rval ( red component) * &gval ( green component) * &bval ( blue component) * Return: 0 if OK, 1 on error * * Notes: * (1) Returns for selected components the extreme value * (either min or max) of the color component that is * found in the colormap. */ l_int32 pixcmapGetExtremeValue(PIXCMAP *cmap, l_int32 type, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 i, n, rval, gval, bval, extrval, extgval, extbval; PROCNAME("pixcmapGetExtremeValue"); if (!prval && !pgval && !pbval) return ERROR_INT("no result requested for return", procName, 1); if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (type != L_SELECT_MIN && type != L_SELECT_MAX) return ERROR_INT("invalid type", procName, 1); if (type == L_SELECT_MIN) { extrval = 100000; extgval = 100000; extbval = 100000; } else { extrval = 0; extgval = 0; extbval = 0; } n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if ((type == L_SELECT_MIN && rval < extrval) || (type == L_SELECT_MAX && rval > extrval)) extrval = rval; if ((type == L_SELECT_MIN && gval < extgval) || (type == L_SELECT_MAX && gval > extgval)) extgval = gval; if ((type == L_SELECT_MIN && bval < extbval) || (type == L_SELECT_MAX && bval > extbval)) extbval = bval; } if (prval) *prval = extrval; if (pgval) *pgval = extgval; if (pbval) *pbval = extbval; return 0; } /*-------------------------------------------------------------* * Colormap conversion * *-------------------------------------------------------------*/ /*! * pixcmapGrayToColor() * * Input: color * Return: cmap, or null on error * * Notes: * (1) This creates a colormap that maps from gray to * a specific color. In the mapping, each component * is faded to white, depending on the gray value. * (2) In use, this is simply attached to a grayscale pix * to give it the input color. */ PIXCMAP * pixcmapGrayToColor(l_uint32 color) { l_int32 i, rval, gval, bval; PIXCMAP *cmap; extractRGBValues(color, &rval, &gval, &bval); cmap = pixcmapCreate(8); for (i = 0; i < 256; i++) { pixcmapAddColor(cmap, rval + (i * (255 - rval)) / 255, gval + (i * (255 - gval)) / 255, bval + (i * (255 - bval)) / 255); } return cmap; } /*! * pixcmapColorToGray() * * Input: cmap * rwt, gwt, bwt (non-negative; these should add to 1.0) * Return: cmap (gray), or null on error * * Notes: * (1) This creates a gray colormap from an arbitrary colormap. * (2) In use, attach the output gray colormap to the pix * (or a copy of it) that provided the input colormap. */ PIXCMAP * pixcmapColorToGray(PIXCMAP *cmaps, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, n, rval, gval, bval, val; l_float32 sum; PIXCMAP *cmapd; PROCNAME("pixcmapColorToGray"); if (!cmaps) return (PIXCMAP *)ERROR_PTR("cmaps not defined", procName, NULL); if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0) return (PIXCMAP *)ERROR_PTR("weights not all >= 0.0", procName, NULL); /* Make sure the sum of weights is 1.0; otherwise, you can get * overflow in the gray value. */ sum = rwt + gwt + bwt; if (sum == 0.0) { L_WARNING("all weights zero; setting equal to 1/3\n", procName); rwt = gwt = bwt = 0.33333; sum = 1.0; } if (L_ABS(sum - 1.0) > 0.0001) { /* maintain ratios with sum == 1.0 */ L_WARNING("weights don't sum to 1; maintaining ratios\n", procName); rwt = rwt / sum; gwt = gwt / sum; bwt = bwt / sum; } cmapd = pixcmapCopy(cmaps); n = pixcmapGetCount(cmapd); for (i = 0; i < n; i++) { pixcmapGetColor(cmapd, i, &rval, &gval, &bval); val = (l_int32)(rwt * rval + gwt * gval + bwt * bval + 0.5); pixcmapResetColor(cmapd, i, val, val, val); } return cmapd; } /*-------------------------------------------------------------* * Colormap I/O * *-------------------------------------------------------------*/ /*! * pixcmapReadStream() * * Input: stream * Return: cmap, or null on error */ PIXCMAP * pixcmapReadStream(FILE *fp) { l_int32 rval, gval, bval, aval, ignore; l_int32 i, index, ret, depth, ncolors; PIXCMAP *cmap; PROCNAME("pixcmapReadStream"); if (!fp) return (PIXCMAP *)ERROR_PTR("stream not defined", procName, NULL); ret = fscanf(fp, "\nPixcmap: depth = %d bpp; %d colors\n", &depth, &ncolors); if (ret != 2 || (depth != 1 && depth != 2 && depth != 4 && depth != 8) || (ncolors < 2 || ncolors > 256)) return (PIXCMAP *)ERROR_PTR("invalid cmap size", procName, NULL); ignore = fscanf(fp, "Color R-val G-val B-val Alpha\n"); ignore = fscanf(fp, "----------------------------------------\n"); if ((cmap = pixcmapCreate(depth)) == NULL) return (PIXCMAP *)ERROR_PTR("cmap not made", procName, NULL); for (i = 0; i < ncolors; i++) { if (fscanf(fp, "%3d %3d %3d %3d %3d\n", &index, &rval, &gval, &bval, &aval) != 5) return (PIXCMAP *)ERROR_PTR("invalid entry", procName, NULL); pixcmapAddRGBA(cmap, rval, gval, bval, aval); } return cmap; } /*! * pixcmapWriteStream() * * Input: stream, cmap * Return: 0 if OK, 1 on error */ l_int32 pixcmapWriteStream(FILE *fp, PIXCMAP *cmap) { l_int32 *rmap, *gmap, *bmap, *amap; l_int32 i; PROCNAME("pixcmapWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap)) return ERROR_INT("colormap arrays not made", procName, 1); fprintf(fp, "\nPixcmap: depth = %d bpp; %d colors\n", cmap->depth, cmap->n); fprintf(fp, "Color R-val G-val B-val Alpha\n"); fprintf(fp, "----------------------------------------\n"); for (i = 0; i < cmap->n; i++) fprintf(fp, "%3d %3d %3d %3d %3d\n", i, rmap[i], gmap[i], bmap[i], amap[i]); fprintf(fp, "\n"); FREE(rmap); FREE(gmap); FREE(bmap); FREE(amap); return 0; } /*----------------------------------------------------------------------* * Extract colormap arrays and serialization * *----------------------------------------------------------------------*/ /*! * pixcmapToArrays() * * Input: colormap * &rmap, &gmap, &bmap ( colormap arrays) * &amap ( alpha array) * Return: 0 if OK; 1 on error */ l_int32 pixcmapToArrays(PIXCMAP *cmap, l_int32 **prmap, l_int32 **pgmap, l_int32 **pbmap, l_int32 **pamap) { l_int32 *rmap, *gmap, *bmap, *amap; l_int32 i, ncolors; RGBA_QUAD *cta; PROCNAME("pixcmapToArrays"); if (!prmap || !pgmap || !pbmap) return ERROR_INT("&rmap, &gmap, &bmap not all defined", procName, 1); *prmap = *pgmap = *pbmap = NULL; if (pamap) *pamap = NULL; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); if (((rmap = (l_int32 *)CALLOC(ncolors, sizeof(l_int32))) == NULL) || ((gmap = (l_int32 *)CALLOC(ncolors, sizeof(l_int32))) == NULL) || ((bmap = (l_int32 *)CALLOC(ncolors, sizeof(l_int32))) == NULL)) return ERROR_INT("calloc fail for *map", procName, 1); *prmap = rmap; *pgmap = gmap; *pbmap = bmap; if (pamap) { amap = (l_int32 *)CALLOC(ncolors, sizeof(l_int32)); *pamap = amap; } cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < ncolors; i++) { rmap[i] = cta[i].red; gmap[i] = cta[i].green; bmap[i] = cta[i].blue; if (pamap) amap[i] = cta[i].alpha; } return 0; } /*! * pixcmapToRGBTable() * * Input: colormap * &tab ( table of rgba values for the colormap) * &ncolors ( size of table) * Return: 0 if OK; 1 on error */ l_int32 pixcmapToRGBTable(PIXCMAP *cmap, l_uint32 **ptab, l_int32 *pncolors) { l_int32 i, ncolors, rval, gval, bval, aval; l_uint32 *tab; PROCNAME("pixcmapToRGBTable"); if (!ptab) return ERROR_INT("&tab not defined", procName, 1); *ptab = NULL; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); if (pncolors) *pncolors = ncolors; if ((tab = (l_uint32 *)CALLOC(ncolors, sizeof(l_uint32))) == NULL) return ERROR_INT("tab not made", procName, 1); *ptab = tab; for (i = 0; i < ncolors; i++) { pixcmapGetRGBA(cmap, i, &rval, &gval, &bval, &aval); composeRGBAPixel(rval, gval, bval, aval, &tab[i]); } return 0; } /*! * pixcmapSerializeToMemory() * * Input: colormap * cpc (components/color: 3 for rgb, 4 for rgba) * &ncolors ( number of colors in table) * &data ( binary string, cpc bytes per color) * Return: 0 if OK; 1 on error * * Notes: * (1) When serializing to store in a pdf, use @cpc = 3. */ l_int32 pixcmapSerializeToMemory(PIXCMAP *cmap, l_int32 cpc, l_int32 *pncolors, l_uint8 **pdata) { l_int32 i, ncolors, rval, gval, bval, aval; l_uint8 *data; PROCNAME("pixcmapSerializeToMemory"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pncolors) return ERROR_INT("&ncolors not defined", procName, 1); *pncolors = 0; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (cpc != 3 && cpc != 4) return ERROR_INT("cpc not 3 or 4", procName, 1); ncolors = pixcmapGetCount(cmap); *pncolors = ncolors; if ((data = (l_uint8 *)CALLOC(cpc * ncolors, sizeof(l_uint8))) == NULL) return ERROR_INT("data not made", procName, 1); *pdata = data; for (i = 0; i < ncolors; i++) { pixcmapGetRGBA(cmap, i, &rval, &gval, &bval, &aval); data[cpc * i] = rval; data[cpc * i + 1] = gval; data[cpc * i + 2] = bval; if (cpc == 4) data[cpc * i + 3] = aval; } return 0; } /*! * pixcmapDeserializeFromMemory() * * Input: data (binary string, 3 or 4 bytes per color) * cpc (components/color: 3 for rgb, 4 for rgba) * ncolors * Return: cmap, or null on error */ PIXCMAP * pixcmapDeserializeFromMemory(l_uint8 *data, l_int32 cpc, l_int32 ncolors) { l_int32 i, d, rval, gval, bval, aval; PIXCMAP *cmap; PROCNAME("pixcmapDeserializeFromMemory"); if (!data) return (PIXCMAP *)ERROR_PTR("data not defined", procName, NULL); if (cpc != 3 && cpc != 4) return (PIXCMAP *)ERROR_PTR("cpc not 3 or 4", procName, NULL); if (ncolors == 0) return (PIXCMAP *)ERROR_PTR("no entries", procName, NULL); if (ncolors > 256) return (PIXCMAP *)ERROR_PTR("ncolors > 256", procName, NULL); if (ncolors > 16) d = 8; else if (ncolors > 4) d = 4; else if (ncolors > 2) d = 2; else d = 1; cmap = pixcmapCreate(d); for (i = 0; i < ncolors; i++) { rval = data[cpc * i]; gval = data[cpc * i + 1]; bval = data[cpc * i + 2]; if (cpc == 4) aval = data[cpc * i + 3]; else aval = 255; /* opaque */ pixcmapAddRGBA(cmap, rval, gval, bval, aval); } return cmap; } /*! * pixcmapConvertToHex() * * Input: data (binary serialized data) * ncolors (in colormap) * Return: hexdata (bracketed, space-separated ascii hex string), * or null on error. * * Notes: * (1) The number of bytes in @data is 3 * ncolors. * (2) Output is in form: * < r0g0b0 r1g1b1 ... rngnbn > * where r0, g0, b0 ... are each 2 bytes of hex ascii * (3) This is used in pdf files to express the colormap as an * array in ascii (human-readable) format. */ char * pixcmapConvertToHex(l_uint8 *data, l_int32 ncolors) { l_int32 i, j, hexbytes; char *hexdata = NULL; char buf[4]; PROCNAME("pixcmapConvertToHex"); if (!data) return (char *)ERROR_PTR("data not defined", procName, NULL); if (ncolors < 1) return (char *)ERROR_PTR("no colors", procName, NULL); hexbytes = 2 + (2 * 3 + 1) * ncolors + 2; hexdata = (char *)CALLOC(hexbytes, sizeof(char)); hexdata[0] = '<'; hexdata[1] = ' '; for (i = 0; i < ncolors; i++) { j = 2 + (2 * 3 + 1) * i; snprintf(buf, sizeof(buf), "%02x", data[3 * i]); hexdata[j] = buf[0]; hexdata[j + 1] = buf[1]; snprintf(buf, sizeof(buf), "%02x", data[3 * i + 1]); hexdata[j + 2] = buf[0]; hexdata[j + 3] = buf[1]; snprintf(buf, sizeof(buf), "%02x", data[3 * i + 2]); hexdata[j + 4] = buf[0]; hexdata[j + 5] = buf[1]; hexdata[j + 6] = ' '; } hexdata[j + 7] = '>'; hexdata[j + 8] = '\0'; return hexdata; } /*-------------------------------------------------------------* * Colormap transforms * *-------------------------------------------------------------*/ /*! * pixcmapGammaTRC() * * Input: colormap * gamma (gamma correction; must be > 0.0) * minval (input value that gives 0 for output; can be < 0) * maxval (input value that gives 255 for output; can be > 255) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place transform * (2) See pixGammaTRC() and numaGammaTRC() in enhance.c * for description and use of transform */ l_int32 pixcmapGammaTRC(PIXCMAP *cmap, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 rval, gval, bval, trval, tgval, tbval, i, ncolors; NUMA *nag; PROCNAME("pixcmapGammaTRC"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (gamma <= 0.0) { L_WARNING("gamma must be > 0.0; setting to 1.0\n", procName); gamma = 1.0; } if (minval >= maxval) return ERROR_INT("minval not < maxval", procName, 1); if (gamma == 1.0 && minval == 0 && maxval == 255) /* no-op */ return 0; if ((nag = numaGammaTRC(gamma, minval, maxval)) == NULL) return ERROR_INT("nag not made", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaGetIValue(nag, rval, &trval); numaGetIValue(nag, gval, &tgval); numaGetIValue(nag, bval, &tbval); pixcmapResetColor(cmap, i, trval, tgval, tbval); } numaDestroy(&nag); return 0; } /*! * pixcmapContrastTRC() * * Input: colormap * factor (generally between 0.0 (no enhancement) * and 1.0, but can be larger than 1.0) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place transform * (2) See pixContrastTRC() and numaContrastTRC() in enhance.c * for description and use of transform */ l_int32 pixcmapContrastTRC(PIXCMAP *cmap, l_float32 factor) { l_int32 i, ncolors, rval, gval, bval, trval, tgval, tbval; NUMA *nac; PROCNAME("pixcmapContrastTRC"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (factor < 0.0) { L_WARNING("factor must be >= 0.0; setting to 0.0\n", procName); factor = 0.0; } if ((nac = numaContrastTRC(factor)) == NULL) return ERROR_INT("nac not made", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaGetIValue(nac, rval, &trval); numaGetIValue(nac, gval, &tgval); numaGetIValue(nac, bval, &tbval); pixcmapResetColor(cmap, i, trval, tgval, tbval); } numaDestroy(&nac); return 0; } /*! * pixcmapShiftIntensity() * * Input: colormap * fraction (between -1.0 and +1.0) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place transform * (2) It does a proportional shift of the intensity for each color. * (3) If fraction < 0.0, it moves all colors towards (0,0,0). * This darkens the image. * If fraction > 0.0, it moves all colors towards (255,255,255) * This fades the image. * (4) The equivalent transform can be accomplished with pixcmapGammaTRC(), * but it is considerably more difficult (see numaGammaTRC()). */ l_int32 pixcmapShiftIntensity(PIXCMAP *cmap, l_float32 fraction) { l_int32 i, ncolors, rval, gval, bval; PROCNAME("pixcmapShiftIntensity"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (fraction < -1.0 || fraction > 1.0) return ERROR_INT("fraction not in [-1.0, 1.0]", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if (fraction < 0.0) pixcmapResetColor(cmap, i, (l_int32)((1.0 + fraction) * rval), (l_int32)((1.0 + fraction) * gval), (l_int32)((1.0 + fraction) * bval)); else pixcmapResetColor(cmap, i, rval + (l_int32)(fraction * (255 - rval)), gval + (l_int32)(fraction * (255 - gval)), bval + (l_int32)(fraction * (255 - bval))); } return 0; } /*! * pixcmapShiftByComponent() * * Input: colormap * srcval (source color: 0xrrggbb00) * dstval (target color: 0xrrggbb00) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place transform * (2) It implements pixelShiftByComponent() for each color. * The mapping is specified by srcval and dstval. * (3) If a component decreases, the component in the colormap * decreases by the same ratio. Likewise for increasing, except * all ratios are taken with respect to the distance from 255. */ l_int32 pixcmapShiftByComponent(PIXCMAP *cmap, l_uint32 srcval, l_uint32 dstval) { l_int32 i, ncolors, rval, gval, bval; l_uint32 newval; PROCNAME("pixcmapShiftByComponent"); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); pixelShiftByComponent(rval, gval, bval, srcval, dstval, &newval); extractRGBValues(newval, &rval, &gval, &bval); pixcmapResetColor(cmap, i, rval, gval, bval); } return 0; } leptonica-1.70/src/gifiostub.c0000644000175000017500000000541211707052573014444 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * gifiostub.c * * Stubs for gifio.c functions */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* -----------------------------------------------------------------*/ #if (!HAVE_LIBGIF) && (!HAVE_LIBUNGIF) /* defined in environ.h */ /* -----------------------------------------------------------------*/ PIX * pixReadStreamGif(FILE *fp) { return (PIX * )ERROR_PTR("function not present", "pixReadStreamGif", NULL); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamGif(FILE *fp, PIX *pix) { return ERROR_INT("function not present", "pixWriteStreamGif", 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemGif(const l_uint8 *cdata, size_t size) { return (PIX *)ERROR_PTR("function not present", "pixReadMemGif", NULL); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemGif(l_uint8 **pdata, size_t *psize, PIX *pix) { return ERROR_INT("function not present", "pixWriteMemGif", 1); } /* -----------------------------------------------------------------*/ #endif /* !HAVE_LIBGIF && !HAVE_LIBUNGIF */ /* -----------------------------------------------------------------*/ leptonica-1.70/src/numafunc2.c0000644000175000017500000025546312253072774014366 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * numafunc2.c * * Morphological (min/max) operations * NUMA *numaErode() * NUMA *numaDilate() * NUMA *numaOpen() * NUMA *numaClose() * * Other transforms * NUMA *numaTransform() * l_int32 numaWindowedStats() * NUMA *numaWindowedMean() * NUMA *numaWindowedMeanSquare() * l_int32 numaWindowedVariance() * NUMA *numaConvertToInt() * * Histogram generation and statistics * NUMA *numaMakeHistogram() * NUMA *numaMakeHistogramAuto() * NUMA *numaMakeHistogramClipped() * NUMA *numaRebinHistogram() * NUMA *numaNormalizeHistogram() * l_int32 numaGetStatsUsingHistogram() * l_int32 numaGetHistogramStats() * l_int32 numaGetHistogramStatsOnInterval() * l_int32 numaMakeRankFromHistogram() * l_int32 numaHistogramGetRankFromVal() * l_int32 numaHistogramGetValFromRank() * l_int32 numaDiscretizeRankAndIntensity() * l_int32 numaGetRankBinValues() * * Splitting a distribution * l_int32 numaSplitDistribution() * * Comparing two histograms * l_int32 numaEarthMoverDistance() * * Extrema finding * NUMA *numaFindPeaks() * NUMA *numaFindExtrema() * l_int32 *numaCountReversals() * * Threshold crossings and frequency analysis * l_int32 numaSelectCrossingThreshold() * NUMA *numaCrossingsByThreshold() * NUMA *numaCrossingsByPeaks() * NUMA *numaEvalBestHaarParameters() * l_int32 numaEvalHaarSum() * * Things to remember when using the Numa: * * (1) The numa is a struct, not an array. Always use accessors * (see numabasic.c), never the fields directly. * * (2) The number array holds l_float32 values. It can also * be used to store l_int32 values. See numabasic.c for * details on using the accessors. * * (3) Occasionally, in the comments we denote the i-th element of a * numa by na[i]. This is conceptual only -- the numa is not an array! * * Some general comments on histograms: * * (1) Histograms are the generic statistical representation of * the data about some attribute. Typically they're not * normalized -- they simply give the number of occurrences * within each range of values of the attribute. This range * of values is referred to as a 'bucket'. For example, * the histogram could specify how many connected components * are found for each value of their width; in that case, * the bucket size is 1. * * (2) In leptonica, all buckets have the same size. Histograms * are therefore specified by a numa of occurrences, along * with two other numbers: the 'value' associated with the * occupants of the first bucket and the size (i.e., 'width') * of each bucket. These two numbers then allow us to calculate * the value associated with the occupants of each bucket. * These numbers are fields in the numa, initialized to * a startx value of 0.0 and a binsize of 1.0. Accessors for * these fields are functions numa*Parameters(). All histograms * must have these two numbers properly set. */ #include #include "allheaders.h" /* bin sizes in numaMakeHistogram() */ static const l_int32 BinSizeArray[] = {2, 5, 10, 20, 50, 100, 200, 500, 1000,\ 2000, 5000, 10000, 20000, 50000, 100000, 200000,\ 500000, 1000000, 2000000, 5000000, 10000000,\ 200000000, 50000000, 100000000}; static const l_int32 NBinSizes = 24; #ifndef NO_CONSOLE_IO #define DEBUG_HISTO 0 #define DEBUG_CROSSINGS 0 #define DEBUG_FREQUENCY 0 #endif /* ~NO_CONSOLE_IO */ /*----------------------------------------------------------------------* * Morphological operations * *----------------------------------------------------------------------*/ /*! * numaErode() * * Input: nas * size (of sel; greater than 0, odd; origin implicitly in center) * Return: nad (eroded), or null on error * * Notes: * (1) The structuring element (sel) is linear, all "hits" * (2) If size == 1, this returns a copy * (3) General comment. The morphological operations are equivalent * to those that would be performed on a 1-dimensional fpix. * However, because we have not implemented morphological * operations on fpix, we do this here. Because it is only * 1 dimensional, there is no reason to use the more * complicated van Herk/Gil-Werman algorithm, and we do it * by brute force. */ NUMA * numaErode(NUMA *nas, l_int32 size) { l_int32 i, j, n, hsize, len; l_float32 minval; l_float32 *fa, *fas, *fad; NUMA *nad; PROCNAME("numaErode"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", procName); size++; } if (size == 1) return numaCopy(nas); /* Make a source fa (fas) that has an added (size / 2) boundary * on left and right, contains a copy of nas in the interior region * (between 'size' and 'size + n', and has large values * inserted in the boundary (because it is an erosion). */ n = numaGetCount(nas); hsize = size / 2; len = n + 2 * hsize; if ((fas = (l_float32 *)CALLOC(len, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("fas not made", procName, NULL); for (i = 0; i < hsize; i++) fas[i] = 1.0e37; for (i = hsize + n; i < len; i++) fas[i] = 1.0e37; fa = numaGetFArray(nas, L_NOCOPY); for (i = 0; i < n; i++) fas[hsize + i] = fa[i]; nad = numaMakeConstant(0, n); numaCopyParameters(nad, nas); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < n; i++) { minval = 1.0e37; /* start big */ for (j = 0; j < size; j++) minval = L_MIN(minval, fas[i + j]); fad[i] = minval; } FREE(fas); return nad; } /*! * numaDilate() * * Input: nas * size (of sel; greater than 0, odd; origin implicitly in center) * Return: nad (dilated), or null on error * * Notes: * (1) The structuring element (sel) is linear, all "hits" * (2) If size == 1, this returns a copy */ NUMA * numaDilate(NUMA *nas, l_int32 size) { l_int32 i, j, n, hsize, len; l_float32 maxval; l_float32 *fa, *fas, *fad; NUMA *nad; PROCNAME("numaDilate"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", procName); size++; } if (size == 1) return numaCopy(nas); /* Make a source fa (fas) that has an added (size / 2) boundary * on left and right, contains a copy of nas in the interior region * (between 'size' and 'size + n', and has small values * inserted in the boundary (because it is a dilation). */ n = numaGetCount(nas); hsize = size / 2; len = n + 2 * hsize; if ((fas = (l_float32 *)CALLOC(len, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("fas not made", procName, NULL); for (i = 0; i < hsize; i++) fas[i] = -1.0e37; for (i = hsize + n; i < len; i++) fas[i] = -1.0e37; fa = numaGetFArray(nas, L_NOCOPY); for (i = 0; i < n; i++) fas[hsize + i] = fa[i]; nad = numaMakeConstant(0, n); numaCopyParameters(nad, nas); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < n; i++) { maxval = -1.0e37; /* start small */ for (j = 0; j < size; j++) maxval = L_MAX(maxval, fas[i + j]); fad[i] = maxval; } FREE(fas); return nad; } /*! * numaOpen() * * Input: nas * size (of sel; greater than 0, odd; origin implicitly in center) * Return: nad (opened), or null on error * * Notes: * (1) The structuring element (sel) is linear, all "hits" * (2) If size == 1, this returns a copy */ NUMA * numaOpen(NUMA *nas, l_int32 size) { NUMA *nat, *nad; PROCNAME("numaOpen"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", procName); size++; } if (size == 1) return numaCopy(nas); nat = numaErode(nas, size); nad = numaDilate(nat, size); numaDestroy(&nat); return nad; } /*! * numaClose() * * Input: nas * size (of sel; greater than 0, odd; origin implicitly in center) * Return: nad (opened), or null on error * * Notes: * (1) The structuring element (sel) is linear, all "hits" * (2) If size == 1, this returns a copy * (3) We add a border before doing this operation, for the same * reason that we add a border to a pix before doing a safe closing. * Without the border, a small component near the border gets * clipped at the border on dilation, and can be entirely removed * by the following erosion, violating the basic extensivity * property of closing. */ NUMA * numaClose(NUMA *nas, l_int32 size) { NUMA *nab, *nat1, *nat2, *nad; PROCNAME("numaClose"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (size <= 0) return (NUMA *)ERROR_PTR("size must be > 0", procName, NULL); if ((size & 1) == 0 ) { L_WARNING("sel size must be odd; increasing by 1\n", procName); size++; } if (size == 1) return numaCopy(nas); nab = numaAddBorder(nas, size, size, 0); /* to preserve extensivity */ nat1 = numaDilate(nab, size); nat2 = numaErode(nat1, size); nad = numaRemoveBorder(nat2, size, size); numaDestroy(&nab); numaDestroy(&nat1); numaDestroy(&nat2); return nad; } /*----------------------------------------------------------------------* * Other transforms * *----------------------------------------------------------------------*/ /*! * numaTransform() * * Input: nas * shift (add this to each number) * scale (multiply each number by this) * Return: nad (with all values shifted and scaled, or null on error) * * Notes: * (1) Each number is shifted before scaling. * (2) The operation sequence is opposite to that for Box and Pta: * scale first, then shift. */ NUMA * numaTransform(NUMA *nas, l_float32 shift, l_float32 scale) { l_int32 i, n; l_float32 val; NUMA *nad; PROCNAME("numaTransform"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); if ((nad = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("nad not made", procName, NULL); numaCopyParameters(nad, nas); for (i = 0; i < n; i++) { numaGetFValue(nas, i, &val); val = scale * val + shift; numaAddNumber(nad, val); } return nad; } /*! * numaWindowedStats() * * Input: nas (input numa) * wc (half width of the window) * &nam ( mean value in window) * &nams ( mean square value in window) * &pnav ( variance in window) * &pnarv ( rms deviation from the mean) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a high-level convenience function for calculating * any or all of these derived arrays. * (2) These statistical measures over the values in the * rectangular window are: * - average value: (nam) * - average squared value: (nams) * - variance: <(x - )*(x - )> = - * (nav) * - square-root of variance: (narv) * where the brackets < .. > indicate that the average value is * to be taken over the window. * (3) Note that the variance is just the mean square difference from * the mean value; and the square root of the variance is the * root mean square difference from the mean, sometimes also * called the 'standard deviation'. * (4) Internally, use mirrored borders to handle values near the * end of each array. */ l_int32 numaWindowedStats(NUMA *nas, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv) { NUMA *nam, *nams; PROCNAME("numaWindowedStats"); if (!nas) return ERROR_INT("nas not defined", procName, 1); if (2 * wc + 1 > numaGetCount(nas)) L_WARNING("filter wider than input array!\n", procName); if (!pnav && !pnarv) { if (pnam) *pnam = numaWindowedMean(nas, wc); if (pnams) *pnams = numaWindowedMeanSquare(nas, wc); return 0; } nam = numaWindowedMean(nas, wc); nams = numaWindowedMeanSquare(nas, wc); numaWindowedVariance(nam, nams, pnav, pnarv); if (pnam) *pnam = nam; else numaDestroy(&nam); if (pnams) *pnams = nams; else numaDestroy(&nams); return 0; } /*! * numaWindowedMean() * * Input: nas * wc (half width of the convolution window) * Return: nad (after low-pass filtering), or null on error * * Notes: * (1) This is a convolution. The window has width = 2 * @wc + 1. * (2) We add a mirrored border of size @wc to each end of the array. */ NUMA * numaWindowedMean(NUMA *nas, l_int32 wc) { l_int32 i, n, n1, width; l_float32 sum, norm; l_float32 *fa1, *fad, *suma; NUMA *na1, *nad; PROCNAME("numaWindowedMean"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); width = 2 * wc + 1; /* filter width */ if (width > n) L_WARNING("filter wider than input array!\n", procName); na1 = numaAddSpecifiedBorder(nas, wc, wc, L_MIRRORED_BORDER); n1 = n + 2 * wc; fa1 = numaGetFArray(na1, L_NOCOPY); nad = numaMakeConstant(0, n); fad = numaGetFArray(nad, L_NOCOPY); /* Make sum array; note the indexing */ if ((suma = (l_float32 *)CALLOC(n1 + 1, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("suma not made", procName, NULL); sum = 0.0; suma[0] = 0.0; for (i = 0; i < n1; i++) { sum += fa1[i]; suma[i + 1] = sum; } norm = 1. / (2 * wc + 1); for (i = 0; i < n; i++) fad[i] = norm * (suma[width + i] - suma[i]); FREE(suma); numaDestroy(&na1); return nad; } /*! * numaWindowedMeanSquare() * * Input: nas * wc (half width of the window) * Return: nad (containing windowed mean square values), or null on error * * Notes: * (1) The window has width = 2 * @wc + 1. * (2) We add a mirrored border of size @wc to each end of the array. */ NUMA * numaWindowedMeanSquare(NUMA *nas, l_int32 wc) { l_int32 i, n, n1, width; l_float32 sum, norm; l_float32 *fa1, *fad, *suma; NUMA *na1, *nad; PROCNAME("numaWindowedMeanSquare"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); width = 2 * wc + 1; /* filter width */ if (width > n) L_WARNING("filter wider than input array!\n", procName); na1 = numaAddSpecifiedBorder(nas, wc, wc, L_MIRRORED_BORDER); n1 = n + 2 * wc; fa1 = numaGetFArray(na1, L_NOCOPY); nad = numaMakeConstant(0, n); fad = numaGetFArray(nad, L_NOCOPY); /* Make sum array; note the indexing */ if ((suma = (l_float32 *)CALLOC(n1 + 1, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("suma not made", procName, NULL); sum = 0.0; suma[0] = 0.0; for (i = 0; i < n1; i++) { sum += fa1[i] * fa1[i]; suma[i + 1] = sum; } norm = 1. / (2 * wc + 1); for (i = 0; i < n; i++) fad[i] = norm * (suma[width + i] - suma[i]); FREE(suma); numaDestroy(&na1); return nad; } /*! * numaWindowedVariance() * * Input: nam (windowed mean values) * nams (windowed mean square values) * &pnav ( numa of variance -- the ms deviation * from the mean) * &pnarv ( numa of rms deviation from the mean) * Return: 0 if OK, 1 on error * * Notes: * (1) The numas of windowed mean and mean square are precomputed, * using numaWindowedMean() and numaWindowedMeanSquare(). * (2) Either or both of the variance and square-root of variance * are returned, where the variance is the average over the * window of the mean square difference of the pixel value * from the mean: * <(x - )*(x - )> = - * */ l_int32 numaWindowedVariance(NUMA *nam, NUMA *nams, NUMA **pnav, NUMA **pnarv) { l_int32 i, nm, nms; l_float32 var; l_float32 *fam, *fams, *fav, *farv; NUMA *nav, *narv; /* variance and square root of variance */ PROCNAME("numaWindowedVariance"); if (!nam) return ERROR_INT("nam not defined", procName, 1); if (!nams) return ERROR_INT("nams not defined", procName, 1); if (!pnav && !pnarv) return ERROR_INT("neither &nav nor &narv are defined", procName, 1); nm = numaGetCount(nam); nms = numaGetCount(nams); if (nm != nms) return ERROR_INT("sizes of nam and nams differ", procName, 1); if (pnav) { nav = numaMakeConstant(0, nm); *pnav = nav; fav = numaGetFArray(nav, L_NOCOPY); } if (pnarv) { narv = numaMakeConstant(0, nm); *pnarv = narv; farv = numaGetFArray(narv, L_NOCOPY); } fam = numaGetFArray(nam, L_NOCOPY); fams = numaGetFArray(nams, L_NOCOPY); for (i = 0; i < nm; i++) { var = fams[i] - fam[i] * fam[i]; if (pnav) fav[i] = var; if (pnarv) farv[i] = (l_float32)sqrt(var); } return 0; } /*! * numaConvertToInt() * * Input: na * Return: na with all values rounded to nearest integer, or * null on error */ NUMA * numaConvertToInt(NUMA *nas) { l_int32 i, n, ival; NUMA *nad; PROCNAME("numaConvertToInt"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); if ((nad = numaCreate(n)) == NULL) return (NUMA *)ERROR_PTR("nad not made", procName, NULL); numaCopyParameters(nad, nas); for (i = 0; i < n; i++) { numaGetIValue(nas, i, &ival); numaAddNumber(nad, ival); } return nad; } /*----------------------------------------------------------------------* * Histogram generation and statistics * *----------------------------------------------------------------------*/ /*! * numaMakeHistogram() * * Input: na * maxbins (max number of histogram bins) * &binsize ( size of histogram bins) * &binstart ( start val of minimum bin; * input NULL to force start at 0) * Return: na consisiting of histogram of integerized values, * or null on error. * * Note: * (1) This simple interface is designed for integer data. * The bins are of integer width and start on integer boundaries, * so the results on float data will not have high precision. * (2) Specify the max number of input bins. Then @binsize, * the size of bins necessary to accommodate the input data, * is returned. It is one of the sequence: * {1, 2, 5, 10, 20, 50, ...}. * (3) If &binstart is given, all values are accommodated, * and the min value of the starting bin is returned. * Otherwise, all negative values are discarded and * the histogram bins start at 0. */ NUMA * numaMakeHistogram(NUMA *na, l_int32 maxbins, l_int32 *pbinsize, l_int32 *pbinstart) { l_int32 i, n, ival, hval; l_int32 iminval, imaxval, range, binsize, nbins, ibin; l_float32 val, ratio; NUMA *nai, *nahist; PROCNAME("numaMakeHistogram"); if (!na) return (NUMA *)ERROR_PTR("na not defined", procName, NULL); if (!pbinsize) return (NUMA *)ERROR_PTR("&binsize not defined", procName, NULL); /* Determine input range */ numaGetMin(na, &val, NULL); iminval = (l_int32)(val + 0.5); numaGetMax(na, &val, NULL); imaxval = (l_int32)(val + 0.5); if (pbinstart == NULL) { /* clip negative vals; start from 0 */ iminval = 0; if (imaxval < 0) return (NUMA *)ERROR_PTR("all values < 0", procName, NULL); } /* Determine binsize */ range = imaxval - iminval + 1; if (range > maxbins - 1) { ratio = (l_float64)range / (l_float64)maxbins; binsize = 0; for (i = 0; i < NBinSizes; i++) { if (ratio < BinSizeArray[i]) { binsize = BinSizeArray[i]; break; } } if (binsize == 0) return (NUMA *)ERROR_PTR("numbers too large", procName, NULL); } else { binsize = 1; } *pbinsize = binsize; nbins = 1 + range / binsize; /* +1 seems to be sufficient */ /* Redetermine iminval */ if (pbinstart && binsize > 1) { if (iminval >= 0) iminval = binsize * (iminval / binsize); else iminval = binsize * ((iminval - binsize + 1) / binsize); } if (pbinstart) *pbinstart = iminval; #if DEBUG_HISTO fprintf(stderr, " imaxval = %d, range = %d, nbins = %d\n", imaxval, range, nbins); #endif /* DEBUG_HISTO */ /* Use integerized data for input */ if ((nai = numaConvertToInt(na)) == NULL) return (NUMA *)ERROR_PTR("nai not made", procName, NULL); n = numaGetCount(nai); /* Make histogram, converting value in input array * into a bin number for this histogram array. */ if ((nahist = numaCreate(nbins)) == NULL) return (NUMA *)ERROR_PTR("nahist not made", procName, NULL); numaSetCount(nahist, nbins); numaSetParameters(nahist, iminval, binsize); for (i = 0; i < n; i++) { numaGetIValue(nai, i, &ival); ibin = (ival - iminval) / binsize; if (ibin >= 0 && ibin < nbins) { numaGetIValue(nahist, ibin, &hval); numaSetValue(nahist, ibin, hval + 1.0); } } numaDestroy(&nai); return nahist; } /*! * numaMakeHistogramAuto() * * Input: na (numa of floats; these may be integers) * maxbins (max number of histogram bins; >= 1) * Return: na consisiting of histogram of quantized float values, * or null on error. * * Notes: * (1) This simple interface is designed for accurate binning * of both integer and float data. * (2) If the array data is integers, and the range of integers * is smaller than @maxbins, they are binned as they fall, * with binsize = 1. * (3) If the range of data, (maxval - minval), is larger than * @maxbins, or if the data is floats, they are binned into * exactly @maxbins bins. * (4) Unlike numaMakeHistogram(), these bins in general have * non-integer location and width, even for integer data. */ NUMA * numaMakeHistogramAuto(NUMA *na, l_int32 maxbins) { l_int32 i, n, imin, imax, irange, ibin, ival, allints; l_float32 minval, maxval, range, binsize, fval; NUMA *nah; PROCNAME("numaMakeHistogramAuto"); if (!na) return (NUMA *)ERROR_PTR("na not defined", procName, NULL); maxbins = L_MAX(1, maxbins); /* Determine input range */ numaGetMin(na, &minval, NULL); numaGetMax(na, &maxval, NULL); /* Determine if values are all integers */ n = numaGetCount(na); numaHasOnlyIntegers(na, maxbins, &allints); /* Do simple integer binning if possible */ if (allints && (maxval - minval < maxbins)) { imin = (l_int32)minval; imax = (l_int32)maxval; irange = imax - imin + 1; nah = numaCreate(irange); numaSetCount(nah, irange); /* init */ numaSetParameters(nah, minval, 1.0); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); ibin = ival - imin; numaGetIValue(nah, ibin, &ival); numaSetValue(nah, ibin, ival + 1.0); } return nah; } /* Do float binning, even if the data is integers. */ range = maxval - minval; binsize = range / (l_float32)maxbins; if (range == 0.0) { nah = numaCreate(1); numaSetParameters(nah, minval, binsize); numaAddNumber(nah, n); return nah; } nah = numaCreate(maxbins); numaSetCount(nah, maxbins); numaSetParameters(nah, minval, binsize); for (i = 0; i < n; i++) { numaGetFValue(na, i, &fval); ibin = (l_int32)((fval - minval) / binsize); ibin = L_MIN(ibin, maxbins - 1); /* "edge" case; stay in bounds */ numaGetIValue(nah, ibin, &ival); numaSetValue(nah, ibin, ival + 1.0); } return nah; } /*! * numaMakeHistogramClipped() * * Input: na * binsize (typically 1.0) * maxsize (of histogram ordinate) * Return: na (histogram of bins of size @binsize, starting with * the na[0] (x = 0.0) and going up to a maximum of * x = @maxsize, by increments of @binsize), or null on error * * Notes: * (1) This simple function generates a histogram of values * from na, discarding all values < 0.0 or greater than * min(@maxsize, maxval), where maxval is the maximum value in na. * The histogram data is put in bins of size delx = @binsize, * starting at x = 0.0. We use as many bins as are * needed to hold the data. */ NUMA * numaMakeHistogramClipped(NUMA *na, l_float32 binsize, l_float32 maxsize) { l_int32 i, n, nbins, ival, ibin; l_float32 val, maxval; NUMA *nad; PROCNAME("numaMakeHistogramClipped"); if (!na) return (NUMA *)ERROR_PTR("na not defined", procName, NULL); if (binsize <= 0.0) return (NUMA *)ERROR_PTR("binsize must be > 0.0", procName, NULL); if (binsize > maxsize) binsize = maxsize; /* just one bin */ numaGetMax(na, &maxval, NULL); n = numaGetCount(na); maxsize = L_MIN(maxsize, maxval); nbins = (l_int32)(maxsize / binsize) + 1; /* fprintf(stderr, "maxsize = %7.3f, nbins = %d\n", maxsize, nbins); */ if ((nad = numaCreate(nbins)) == NULL) return (NUMA *)ERROR_PTR("nad not made", procName, NULL); numaSetParameters(nad, 0.0, binsize); numaSetCount(nad, nbins); /* interpret zeroes in bins as data */ for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); ibin = (l_int32)(val / binsize); if (ibin >= 0 && ibin < nbins) { numaGetIValue(nad, ibin, &ival); numaSetValue(nad, ibin, ival + 1.0); } } return nad; } /*! * numaRebinHistogram() * * Input: nas (input histogram) * newsize (number of old bins contained in each new bin) * Return: nad (more coarsely re-binned histogram), or null on error */ NUMA * numaRebinHistogram(NUMA *nas, l_int32 newsize) { l_int32 i, j, ns, nd, index, count, val; l_float32 start, oldsize; NUMA *nad; PROCNAME("numaRebinHistogram"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (newsize <= 1) return (NUMA *)ERROR_PTR("newsize must be > 1", procName, NULL); if ((ns = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("no bins in nas", procName, NULL); nd = (ns + newsize - 1) / newsize; if ((nad = numaCreate(nd)) == NULL) return (NUMA *)ERROR_PTR("nad not made", procName, NULL); numaGetParameters(nad, &start, &oldsize); numaSetParameters(nad, start, oldsize * newsize); for (i = 0; i < nd; i++) { /* new bins */ count = 0; index = i * newsize; for (j = 0; j < newsize; j++) { if (index < ns) { numaGetIValue(nas, index, &val); count += val; index++; } } numaAddNumber(nad, count); } return nad; } /*! * numaNormalizeHistogram() * * Input: nas (input histogram) * tsum (target sum of all numbers in dest histogram; * e.g., use @tsum= 1.0 if this represents a * probability distribution) * Return: nad (normalized histogram), or null on error */ NUMA * numaNormalizeHistogram(NUMA *nas, l_float32 tsum) { l_int32 i, ns; l_float32 sum, factor, fval; NUMA *nad; PROCNAME("numaNormalizeHistogram"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (tsum <= 0.0) return (NUMA *)ERROR_PTR("tsum must be > 0.0", procName, NULL); if ((ns = numaGetCount(nas)) == 0) return (NUMA *)ERROR_PTR("no bins in nas", procName, NULL); numaGetSum(nas, &sum); factor = tsum / sum; if ((nad = numaCreate(ns)) == NULL) return (NUMA *)ERROR_PTR("nad not made", procName, NULL); numaCopyParameters(nad, nas); for (i = 0; i < ns; i++) { numaGetFValue(nas, i, &fval); fval *= factor; numaAddNumber(nad, fval); } return nad; } /*! * numaGetStatsUsingHistogram() * * Input: na (an arbitrary set of numbers; not ordered and not * a histogram) * maxbins (the maximum number of bins to be allowed in * the histogram; use 0 for consecutive integer bins) * &min ( min value of set) * &max ( max value of set) * &mean ( mean value of set) * &variance ( variance) * &median ( median value of set) * rank (in [0.0 ... 1.0]; median has a rank 0.5; ignored * if &rval == NULL) * &rval ( value in na corresponding to @rank) * &histo ( Numa histogram; use NULL to prevent) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a simple interface for gathering statistics * from a numa, where a histogram is used 'under the covers' * to avoid sorting if a rank value is requested. In that case, * by using a histogram we are trading speed for accuracy, because * the values in @na are quantized to the center of a set of bins. * (2) If the median, other rank value, or histogram are not requested, * the calculation is all performed on the input Numa. * (3) The variance is the average of the square of the * difference from the mean. The median is the value in na * with rank 0.5. * (4) There are two situations where this gives rank results with * accuracy comparable to computing stastics directly on the input * data, without binning into a histogram: * (a) the data is integers and the range of data is less than * @maxbins, and * (b) the data is floats and the range is small compared to * @maxbins, so that the binsize is much less than 1. * (5) If a histogram is used and the numbers in the Numa extend * over a large range, you can limit the required storage by * specifying the maximum number of bins in the histogram. * Use @maxbins == 0 to force the bin size to be 1. * (6) This optionally returns the median and one arbitrary rank value. * If you need several rank values, return the histogram and use * numaHistogramGetValFromRank(nah, rank, &rval) * multiple times. */ l_int32 numaGetStatsUsingHistogram(NUMA *na, l_int32 maxbins, l_float32 *pmin, l_float32 *pmax, l_float32 *pmean, l_float32 *pvariance, l_float32 *pmedian, l_float32 rank, l_float32 *prval, NUMA **phisto) { l_int32 i, n; l_float32 minval, maxval, fval, mean, sum; NUMA *nah; PROCNAME("numaGetStatsUsingHistogram"); if (pmin) *pmin = 0.0; if (pmax) *pmax = 0.0; if (pmean) *pmean = 0.0; if (pmedian) *pmedian = 0.0; if (pvariance) *pvariance = 0.0; if (!na) return ERROR_INT("na not defined", procName, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("numa is empty", procName, 1); numaGetMin(na, &minval, NULL); numaGetMax(na, &maxval, NULL); if (pmin) *pmin = minval; if (pmax) *pmax = maxval; if (pmean || pvariance) { sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &fval); sum += fval; } mean = sum / (l_float32)n; if (pmean) *pmean = mean; } if (pvariance) { sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &fval); sum += fval * fval; } *pvariance = sum / (l_float32)n - mean * mean; } if (!pmedian && !prval && !phisto) return 0; nah = numaMakeHistogramAuto(na, maxbins); if (pmedian) numaHistogramGetValFromRank(nah, 0.5, pmedian); if (prval) numaHistogramGetValFromRank(nah, rank, prval); if (phisto) *phisto = nah; else numaDestroy(&nah); return 0; } /*! * numaGetHistogramStats() * * Input: nahisto (histogram: y(x(i)), i = 0 ... nbins - 1) * startx (x value of first bin: x(0)) * deltax (x increment between bins; the bin size; x(1) - x(0)) * &xmean ( mean value of histogram) * &xmedian ( median value of histogram) * &xmode ( mode value of histogram: * xmode = x(imode), where y(xmode) >= y(x(i)) for * all i != imode) * &xvariance ( variance of x) * Return: 0 if OK, 1 on error * * Notes: * (1) If the histogram represents the relation y(x), the * computed values that are returned are the x values. * These are NOT the bucket indices i; they are related to the * bucket indices by * x(i) = startx + i * deltax */ l_int32 numaGetHistogramStats(NUMA *nahisto, l_float32 startx, l_float32 deltax, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance) { PROCNAME("numaGetHistogramStats"); if (pxmean) *pxmean = 0.0; if (pxmedian) *pxmedian = 0.0; if (pxmode) *pxmode = 0.0; if (pxvariance) *pxvariance = 0.0; if (!nahisto) return ERROR_INT("nahisto not defined", procName, 1); return numaGetHistogramStatsOnInterval(nahisto, startx, deltax, 0, 0, pxmean, pxmedian, pxmode, pxvariance); } /*! * numaGetHistogramStatsOnInterval() * * Input: nahisto (histogram: y(x(i)), i = 0 ... nbins - 1) * startx (x value of first bin: x(0)) * deltax (x increment between bins; the bin size; x(1) - x(0)) * ifirst (first bin to use for collecting stats) * ilast (last bin for collecting stats; use 0 to go to the end) * &xmean ( mean value of histogram) * &xmedian ( median value of histogram) * &xmode ( mode value of histogram: * xmode = x(imode), where y(xmode) >= y(x(i)) for * all i != imode) * &xvariance ( variance of x) * Return: 0 if OK, 1 on error * * Notes: * (1) If the histogram represents the relation y(x), the * computed values that are returned are the x values. * These are NOT the bucket indices i; they are related to the * bucket indices by * x(i) = startx + i * deltax */ l_int32 numaGetHistogramStatsOnInterval(NUMA *nahisto, l_float32 startx, l_float32 deltax, l_int32 ifirst, l_int32 ilast, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance) { l_int32 i, n, imax; l_float32 sum, sumval, halfsum, moment, var, x, y, ymax; PROCNAME("numaGetHistogramStats"); if (pxmean) *pxmean = 0.0; if (pxmedian) *pxmedian = 0.0; if (pxmode) *pxmode = 0.0; if (pxvariance) *pxvariance = 0.0; if (!nahisto) return ERROR_INT("nahisto not defined", procName, 1); if (!pxmean && !pxmedian && !pxmode && !pxvariance) return ERROR_INT("nothing to compute", procName, 1); n = numaGetCount(nahisto); if (ilast <= 0) ilast = n - 1; if (ifirst < 0) ifirst = 0; if (ifirst > ilast || ifirst > n - 1) return ERROR_INT("ifirst is too large", procName, 1); for (sum = 0.0, moment = 0.0, var = 0.0, i = ifirst; i <= ilast ; i++) { x = startx + i * deltax; numaGetFValue(nahisto, i, &y); sum += y; moment += x * y; var += x * x * y; } if (sum == 0.0) return ERROR_INT("sum is 0", procName, 1); if (pxmean) *pxmean = moment / sum; if (pxvariance) *pxvariance = var / sum - moment * moment / (sum * sum); if (pxmedian) { halfsum = sum / 2.0; for (sumval = 0.0, i = ifirst; i <= ilast; i++) { numaGetFValue(nahisto, i, &y); sumval += y; if (sumval >= halfsum) { *pxmedian = startx + i * deltax; break; } } } if (pxmode) { ymax = -1.0e10; for (i = ifirst; i <= ilast; i++) { numaGetFValue(nahisto, i, &y); if (y > ymax) { ymax = y; imax = i; } } *pxmode = startx + imax * deltax; } return 0; } /*! * numaMakeRankFromHistogram() * * Input: startx (xval corresponding to first element in nay) * deltax (x increment between array elements in nay) * nasy (input histogram, assumed equally spaced) * npts (number of points to evaluate rank function) * &nax ( array of x values in range) * &nay ( rank array of specified npts) * Return: 0 if OK, 1 on error */ l_int32 numaMakeRankFromHistogram(l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 npts, NUMA **pnax, NUMA **pnay) { l_int32 i, n; l_float32 sum, fval; NUMA *nan, *nar; PROCNAME("numaMakeRankFromHistogram"); if (pnax) *pnax = NULL; if (!pnay) return ERROR_INT("&nay not defined", procName, 1); *pnay = NULL; if (!nasy) return ERROR_INT("nasy not defined", procName, 1); if (!pnay) return ERROR_INT("&nay not defined", procName, 1); if ((n = numaGetCount(nasy)) == 0) return ERROR_INT("no bins in nas", procName, 1); /* Normalize and generate the rank array corresponding to * the binned histogram. */ nan = numaNormalizeHistogram(nasy, 1.0); nar = numaCreate(n + 1); /* rank numa corresponding to nan */ sum = 0.0; numaAddNumber(nar, sum); /* first element is 0.0 */ for (i = 0; i < n; i++) { numaGetFValue(nan, i, &fval); sum += fval; numaAddNumber(nar, sum); } /* Compute rank array on full range with specified * number of points and correspondence to x-values. */ numaInterpolateEqxInterval(startx, deltax, nar, L_LINEAR_INTERP, startx, startx + n * deltax, npts, pnax, pnay); numaDestroy(&nan); numaDestroy(&nar); return 0; } /*! * numaHistogramGetRankFromVal() * * Input: na (histogram) * rval (value of input sample for which we want the rank) * &rank ( fraction of total samples below rval) * Return: 0 if OK, 1 on error * * Notes: * (1) If we think of the histogram as a function y(x), normalized * to 1, for a given input value of x, this computes the * rank of x, which is the integral of y(x) from the start * value of x to the input value. * (2) This function only makes sense when applied to a Numa that * is a histogram. The values in the histogram can be ints and * floats, and are computed as floats. The rank is returned * as a float between 0.0 and 1.0. * (3) The numa parameters startx and binsize are used to * compute x from the Numa index i. */ l_int32 numaHistogramGetRankFromVal(NUMA *na, l_float32 rval, l_float32 *prank) { l_int32 i, ibinval, n; l_float32 startval, binsize, binval, maxval, fractval, total, sum, val; PROCNAME("numaHistogramGetRankFromVal"); if (!prank) return ERROR_INT("prank not defined", procName, 1); *prank = 0.0; if (!na) return ERROR_INT("na not defined", procName, 1); numaGetParameters(na, &startval, &binsize); n = numaGetCount(na); if (rval < startval) return 0; maxval = startval + n * binsize; if (rval > maxval) { *prank = 1.0; return 0; } binval = (rval - startval) / binsize; ibinval = (l_int32)binval; if (ibinval >= n) { *prank = 1.0; return 0; } fractval = binval - (l_float32)ibinval; sum = 0.0; for (i = 0; i < ibinval; i++) { numaGetFValue(na, i, &val); sum += val; } numaGetFValue(na, ibinval, &val); sum += fractval * val; numaGetSum(na, &total); *prank = sum / total; /* fprintf(stderr, "binval = %7.3f, rank = %7.3f\n", binval, *prank); */ return 0; } /*! * numaHistogramGetValFromRank() * * Input: na (histogram) * rank (fraction of total samples) * &rval ( approx. to the bin value) * Return: 0 if OK, 1 on error * * Notes: * (1) If we think of the histogram as a function y(x), this returns * the value x such that the integral of y(x) from the start * value to x gives the fraction 'rank' of the integral * of y(x) over all bins. * (2) This function only makes sense when applied to a Numa that * is a histogram. The values in the histogram can be ints and * floats, and are computed as floats. The val is returned * as a float, even though the buckets are of integer width. * (3) The numa parameters startx and binsize are used to * compute x from the Numa index i. */ l_int32 numaHistogramGetValFromRank(NUMA *na, l_float32 rank, l_float32 *prval) { l_int32 i, n; l_float32 startval, binsize, rankcount, total, sum, fract, val; PROCNAME("numaHistogramGetValFromRank"); if (!prval) return ERROR_INT("prval not defined", procName, 1); *prval = 0.0; if (!na) return ERROR_INT("na not defined", procName, 1); if (rank < 0.0) { L_WARNING("rank < 0; setting to 0.0\n", procName); rank = 0.0; } if (rank > 1.0) { L_WARNING("rank > 1.0; setting to 1.0\n", procName); rank = 1.0; } n = numaGetCount(na); numaGetParameters(na, &startval, &binsize); numaGetSum(na, &total); rankcount = rank * total; /* count that corresponds to rank */ sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (sum + val >= rankcount) break; sum += val; } if (val <= 0.0) /* can == 0 if rank == 0.0 */ fract = 0.0; else /* sum + fract * val = rankcount */ fract = (rankcount - sum) / val; /* The use of the fraction of a bin allows a simple calculation * for the histogram value at the given rank. */ *prval = startval + binsize * ((l_float32)i + fract); /* fprintf(stderr, "rank = %7.3f, val = %7.3f\n", rank, *prval); */ return 0; } /*! * numaDiscretizeRankAndIntensity() * * Input: na (normalized histogram of probability density vs intensity) * nbins (number of bins at which the rank is divided) * &pnarbin ( rank bin value vs intensity) * &pnam ( median intensity in a bin vs * rank bin value, with @nbins of discretized rank values) * &pnar ( rank vs intensity; this is * a cumulative norm histogram) * &pnabb ( intensity at the right bin boundary * vs rank bin) * Return: 0 if OK, 1 on error * * Notes: * (1) We are inverting the rank(intensity) function to get * the intensity(rank) function at @nbins equally spaced * values of rank between 0.0 and 1.0. We save integer values * for the intensity. * (2) We are using the word "intensity" to describe the type of * array values, but any array of non-negative numbers will work. * (3) The output arrays give the following mappings, where the * input is a normalized histogram of array values: * array values --> rank bin number (narbin) * rank bin number --> median array value in bin (nam) * array values --> cumulative norm = rank (nar) * rank bin number --> array value at right bin edge (nabb) */ l_int32 numaDiscretizeRankAndIntensity(NUMA *na, l_int32 nbins, NUMA **pnarbin, NUMA **pnam, NUMA **pnar, NUMA **pnabb) { NUMA *nar; /* rank value as function of intensity */ NUMA *nam; /* median intensity in the rank bins */ NUMA *nabb; /* rank bin right boundaries (in intensity) */ NUMA *narbin; /* binned rank value as a function of intensity */ l_int32 i, j, npts, start, midfound, mcount, rightedge; l_float32 sum, midrank, endrank, val; PROCNAME("numaDiscretizeRankAndIntensity"); if (!na) return ERROR_INT("na not defined", procName, 1); if (nbins < 2) return ERROR_INT("nbins must be > 1", procName, 1); if (!pnarbin && !pnam && !pnar && !pnabb) return ERROR_INT("no output requested", procName, 1); /* Get cumulative normalized histogram (rank vs intensity value). * For a normalized histogram from an 8 bpp grayscale image * as input, we have 256 bins and 257 points in the * cumulative (rank) histogram. */ npts = numaGetCount(na); nar = numaCreate(npts + 1); sum = 0.0; numaAddNumber(nar, sum); /* left side of first bin */ for (i = 0; i < npts; i++) { numaGetFValue(na, i, &val); sum += val; numaAddNumber(nar, sum); } if ((nam = numaCreate(nbins)) == NULL) return ERROR_INT("nam not made", procName, 1); if ((narbin = numaCreate(npts)) == NULL) return ERROR_INT("narbin not made", procName, 1); if ((nabb = numaCreate(nbins)) == NULL) return ERROR_INT("nabb not made", procName, 1); /* We find the intensity value at the right edge of each of * the rank bins. We also find the median intensity in the bin, * where approximately half the samples are lower and half are * higher. This can be considered as a simple approximation * for the average intensity in the bin. */ start = 0; /* index in nar */ mcount = 0; /* count of median values in rank bins; not to exceed nbins */ for (i = 0; i < nbins; i++) { midrank = (l_float32)(i + 0.5) / (l_float32)(nbins); endrank = (l_float32)(i + 1.0) / (l_float32)(nbins); endrank = L_MAX(0.0, L_MIN(endrank - 0.001, 1.0)); midfound = FALSE; for (j = start; j < npts; j++) { /* scan up for each bin value */ numaGetFValue(nar, j, &val); /* Use (j == npts - 1) tests in case all weight is at top end */ if ((!midfound && val >= midrank) || (mcount < nbins && j == npts - 1)) { midfound = TRUE; numaAddNumber(nam, j); mcount++; } if ((val >= endrank) || (j == npts - 1)) { numaAddNumber(nabb, j); if (val == endrank) start = j; else start = j - 1; break; } } } numaSetValue(nabb, nbins - 1, npts - 1); /* extend to max */ /* Error checking: did we get data in all bins? */ if (mcount != nbins) L_WARNING("found data for %d bins; should be %d\n", procName, mcount, nbins); /* Generate LUT that maps from intensity to bin number */ start = 0; for (i = 0; i < nbins; i++) { numaGetIValue(nabb, i, &rightedge); for (j = start; j < npts; j++) { if (j <= rightedge) numaAddNumber(narbin, i); if (j > rightedge) { start = j; break; } if (j == npts - 1) { /* we're done */ start = j + 1; break; } } } if (pnarbin) *pnarbin = narbin; else numaDestroy(&narbin); if (pnam) *pnam = nam; else numaDestroy(&nam); if (pnar) *pnar = nar; else numaDestroy(&nar); if (pnabb) *pnabb = nabb; else numaDestroy(&nabb); return 0; } /*! * numaGetRankBinValues() * * Input: na (just an array of values) * nbins (number of bins at which the rank is divided) * &pnarbin ( rank bin value vs array value) * &pnam ( median intensity in a bin vs * rank bin value, with @nbins of discretized rank values) * Return: 0 if OK, 1 on error * * Notes: * (1) Simple interface for getting a binned rank representation * of an input array of values. This returns two mappings: * array value --> rank bin number (narbin) * rank bin number --> median array value in each rank bin (nam) */ l_int32 numaGetRankBinValues(NUMA *na, l_int32 nbins, NUMA **pnarbin, NUMA **pnam) { NUMA *nah, *nan; /* histo and normalized histo */ l_int32 maxbins, discardval; l_float32 maxval, delx; PROCNAME("numaGetRankBinValues"); if (pnarbin) *pnarbin = NULL; if (pnam) *pnam = NULL; if (!pnarbin && !pnam) return ERROR_INT("no output requested", procName, 1); if (!na) return ERROR_INT("na not defined", procName, 1); if (numaGetCount(na) == 0) return ERROR_INT("na is empty", procName, 1); if (nbins < 2) return ERROR_INT("nbins must be > 1", procName, 1); /* Get normalized histogram */ numaGetMax(na, &maxval, NULL); maxbins = L_MIN(100002, (l_int32)maxval + 2); nah = numaMakeHistogram(na, maxbins, &discardval, NULL); nan = numaNormalizeHistogram(nah, 1.0); /* Warn if there is a scale change. This shouldn't happen * unless the max value is above 100000. */ numaGetParameters(nan, NULL, &delx); if (delx > 1.0) L_WARNING("scale change: delx = %6.2f\n", procName, delx); /* Rank bin the results */ numaDiscretizeRankAndIntensity(nan, nbins, pnarbin, pnam, NULL, NULL); numaDestroy(&nah); numaDestroy(&nan); return 0; } /*----------------------------------------------------------------------* * Splitting a distribution * *----------------------------------------------------------------------*/ /*! * numaSplitDistribution() * * Input: na (histogram) * scorefract (fraction of the max score, used to determine * the range over which the histogram min is searched) * &splitindex ( index for splitting) * &ave1 ( average of lower distribution) * &ave2 ( average of upper distribution) * &num1 ( population of lower distribution) * &num2 ( population of upper distribution) * &nascore ( for debugging; otherwise use null) * Return: 0 if OK, 1 on error * * Notes: * (1) This function is intended to be used on a distribution of * values that represent two sets, such as a histogram of * pixel values for an image with a fg and bg, and the goal * is to determine the averages of the two sets and the * best splitting point. * (2) The Otsu method finds a split point that divides the distribution * into two parts by maximizing a score function that is the * product of two terms: * (a) the square of the difference of centroids, (ave1 - ave2)^2 * (b) fract1 * (1 - fract1) * where fract1 is the fraction in the lower distribution. * (3) This works well for images where the fg and bg are * each relatively homogeneous and well-separated in color. * However, if the actual fg and bg sets are very different * in size, and the bg is highly varied, as can occur in some * scanned document images, this will bias the split point * into the larger "bump" (i.e., toward the point where the * (b) term reaches its maximum of 0.25 at fract1 = 0.5. * To avoid this, we define a range of values near the * maximum of the score function, and choose the value within * this range such that the histogram itself has a minimum value. * The range is determined by scorefract: we include all abscissa * values to the left and right of the value that maximizes the * score, such that the score stays above (1 - scorefract) * maxscore. * The intuition behind this modification is to try to find * a split point that both has a high variance score and is * at or near a minimum in the histogram, so that the histogram * slope is small at the split point. * (4) We normalize the score so that if the two distributions * were of equal size and at opposite ends of the numa, the * score would be 1.0. */ l_int32 numaSplitDistribution(NUMA *na, l_float32 scorefract, l_int32 *psplitindex, l_float32 *pave1, l_float32 *pave2, l_float32 *pnum1, l_float32 *pnum2, NUMA **pnascore) { l_int32 i, n, bestsplit, minrange, maxrange, maxindex; l_float32 ave1, ave2, ave1prev, ave2prev; l_float32 num1, num2, num1prev, num2prev; l_float32 val, minval, sum, fract1; l_float32 norm, score, minscore, maxscore; NUMA *nascore, *naave1, *naave2, *nanum1, *nanum2; PROCNAME("numaSplitDistribution"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (n <= 1) return ERROR_INT("n = 1 in histogram", procName, 1); numaGetSum(na, &sum); if (sum <= 0.0) return ERROR_INT("sum <= 0.0", procName, 1); norm = 4.0 / ((n - 1) * (n - 1)); ave1prev = 0.0; numaGetHistogramStats(na, 0.0, 1.0, &ave2prev, NULL, NULL, NULL); num1prev = 0.0; num2prev = sum; maxindex = n / 2; /* initialize with something */ /* Split the histogram with [0 ... i] in the lower part * and [i+1 ... n-1] in upper part. First, compute an otsu * score for each possible splitting. */ nascore = numaCreate(n); if (pave2) naave1 = numaCreate(n); if (pave2) naave2 = numaCreate(n); if (pnum1) nanum1 = numaCreate(n); if (pnum2) nanum2 = numaCreate(n); maxscore = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); num1 = num1prev + val; if (num1 == 0) ave1 = ave1prev; else ave1 = (num1prev * ave1prev + i * val) / num1; num2 = num2prev - val; if (num2 == 0) ave2 = ave2prev; else ave2 = (num2prev * ave2prev - i * val) / num2; fract1 = num1 / sum; score = norm * (fract1 * (1 - fract1)) * (ave2 - ave1) * (ave2 - ave1); numaAddNumber(nascore, score); if (pave1) numaAddNumber(naave1, ave1); if (pave2) numaAddNumber(naave2, ave2); if (pnum1) numaAddNumber(nanum1, num1); if (pnum1) numaAddNumber(nanum2, num2); if (score > maxscore) { maxscore = score; maxindex = i; } num1prev = num1; num2prev = num2; ave1prev = ave1; ave2prev = ave2; } /* Next, for all contiguous scores within a specified fraction * of the max, choose the split point as the value with the * minimum in the histogram. */ minscore = (1. - scorefract) * maxscore; for (i = maxindex - 1; i >= 0; i--) { numaGetFValue(nascore, i, &val); if (val < minscore) break; } minrange = i + 1; for (i = maxindex + 1; i < n; i++) { numaGetFValue(nascore, i, &val); if (val < minscore) break; } maxrange = i - 1; numaGetFValue(na, minrange, &minval); bestsplit = minrange; for (i = minrange + 1; i <= maxrange; i++) { numaGetFValue(na, i, &val); if (val < minval) { minval = val; bestsplit = i; } } /* Add one to the bestsplit value to get the threshold value, * because when we take a threshold, as in pixThresholdToBinary(), * we always choose the set with values below the threshold. */ bestsplit = L_MIN(255, bestsplit + 1); if (psplitindex) *psplitindex = bestsplit; if (pave1) numaGetFValue(naave1, bestsplit, pave1); if (pave2) numaGetFValue(naave2, bestsplit, pave2); if (pnum1) numaGetFValue(nanum1, bestsplit, pnum1); if (pnum2) numaGetFValue(nanum2, bestsplit, pnum2); if (pnascore) { /* debug mode */ fprintf(stderr, "minrange = %d, maxrange = %d\n", minrange, maxrange); fprintf(stderr, "minval = %10.0f\n", minval); gplotSimple1(nascore, GPLOT_PNG, "/tmp/nascore", "Score for split distribution"); *pnascore = nascore; } else { numaDestroy(&nascore); } if (pave1) numaDestroy(&naave1); if (pave2) numaDestroy(&naave2); if (pnum1) numaDestroy(&nanum1); if (pnum2) numaDestroy(&nanum2); return 0; } /*----------------------------------------------------------------------* * Comparing two histograms * *----------------------------------------------------------------------*/ /*! * numaEarthMoverDistance() * * Input: na1, na2 (two numas of the same size, typically histograms) * &dist ( EM distance) * Return: 0 if OK, 1 on error * * Notes: * (1) The two numas must have the same size. They do not need to be * normalized to the same sum before applying the function. * (2) For a 1D discrete function, the implementation of the EMD * is trivial. Just keep filling or emptying buckets in one numa * to match the amount in the other, moving sequentially along * both arrays. * (3) We divide the sum of the absolute value of everything moved * (by 1 unit at a time) by the sum of the numa (amount of "earth") * to get the average distance that the "earth" was moved. * Further normalization, by the number of buckets (minus 1), * gives the distance as a fraction of the maximum possible * distance, which is n-1. This fraction is 1.0 for the situation * where all the 'earth' in the first array is at one end, and * all in the second array is at the other end. */ l_int32 numaEarthMoverDistance(NUMA *na1, NUMA *na2, l_float32 *pdist) { l_int32 n, norm, i; l_float32 sum1, sum2, diff, total; l_float32 *array1, *array3; NUMA *na3; PROCNAME("numaEarthMoverDistance"); if (!pdist) return ERROR_INT("&dist not defined", procName, 1); *pdist = 0.0; if (!na1 || !na2) return ERROR_INT("na1 and na2 not both defined", procName, 1); n = numaGetCount(na1); if (n != numaGetCount(na2)) return ERROR_INT("na1 and na2 have different size", procName, 1); /* Generate na3; normalize to na1 if necessary */ numaGetSum(na1, &sum1); numaGetSum(na2, &sum2); norm = (L_ABS(sum1 - sum2) < 0.00001 * L_ABS(sum1)) ? 1 : 0; if (!norm) na3 = numaTransform(na2, 0, sum1 / sum2); else na3 = numaCopy(na2); array1 = numaGetFArray(na1, L_NOCOPY); array3 = numaGetFArray(na3, L_NOCOPY); /* Move earth in n3 from array elements, to match n1 */ total = 0; for (i = 1; i < n; i++) { diff = array1[i - 1] - array3[i - 1]; array3[i] -= diff; total += L_ABS(diff); } *pdist = total / sum1; numaDestroy(&na3); return 0; } /*----------------------------------------------------------------------* * Extrema finding * *----------------------------------------------------------------------*/ /*! * numaFindPeaks() * * Input: source na * max number of peaks to be found * fract1 (min fraction of peak value) * fract2 (min slope) * Return: peak na, or null on error. * * Notes: * (1) The returned na consists of sets of four numbers representing * the peak, in the following order: * left edge; peak center; right edge; normalized peak area */ NUMA * numaFindPeaks(NUMA *nas, l_int32 nmax, l_float32 fract1, l_float32 fract2) { l_int32 i, k, n, maxloc, lloc, rloc; l_float32 fmaxval, sum, total, newtotal, val, lastval; l_float32 peakfract; NUMA *na, *napeak; PROCNAME("numaFindPeaks"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); numaGetSum(nas, &total); /* We munge this copy */ if ((na = numaCopy(nas)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); if ((napeak = numaCreate(4 * nmax)) == NULL) return (NUMA *)ERROR_PTR("napeak not made", procName, NULL); for (k = 0; k < nmax; k++) { numaGetSum(na, &newtotal); if (newtotal == 0.0) /* sanity check */ break; numaGetMax(na, &fmaxval, &maxloc); sum = fmaxval; lastval = fmaxval; lloc = 0; for (i = maxloc - 1; i >= 0; --i) { numaGetFValue(na, i, &val); if (val == 0.0) { lloc = i + 1; break; } if (val > fract1 * fmaxval) { sum += val; lastval = val; continue; } if (lastval - val > fract2 * lastval) { sum += val; lastval = val; continue; } lloc = i; break; } lastval = fmaxval; rloc = n - 1; for (i = maxloc + 1; i < n; ++i) { numaGetFValue(na, i, &val); if (val == 0.0) { rloc = i - 1; break; } if (val > fract1 * fmaxval) { sum += val; lastval = val; continue; } if (lastval - val > fract2 * lastval) { sum += val; lastval = val; continue; } rloc = i; break; } peakfract = sum / total; numaAddNumber(napeak, lloc); numaAddNumber(napeak, maxloc); numaAddNumber(napeak, rloc); numaAddNumber(napeak, peakfract); for (i = lloc; i <= rloc; i++) numaSetValue(na, i, 0.0); } numaDestroy(&na); return napeak; } /*! * numaFindExtrema() * * Input: nas (input values) * delta (relative amount to resolve peaks and valleys) * Return: nad (locations of extrema), or null on error * * Notes: * (1) This returns a sequence of extrema (peaks and valleys). * (2) The algorithm is analogous to that for determining * mountain peaks. Suppose we have a local peak, with * bumps on the side. Under what conditions can we consider * those 'bumps' to be actual peaks? The answer: if the * bump is separated from the peak by a saddle that is at * least 500 feet below the bump. * (3) Operationally, suppose we are looking for a peak. * We are keeping the largest value we've seen since the * last valley, and are looking for a value that is delta * BELOW our current peak. When we find such a value, * we label the peak, use the current value to label the * valley, and then do the same operation in reverse (looking * for a valley). */ NUMA * numaFindExtrema(NUMA *nas, l_float32 delta) { l_int32 i, n, found, loc, direction; l_float32 startval, val, maxval, minval; NUMA *nad; PROCNAME("numaFindExtrema"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); nad = numaCreate(0); /* We don't know if we'll find a peak or valley first, * but use the first element of nas as the reference point. * Break when we deviate by 'delta' from the first point. */ numaGetFValue(nas, 0, &startval); found = FALSE; for (i = 1; i < n; i++) { numaGetFValue(nas, i, &val); if (L_ABS(val - startval) >= delta) { found = TRUE; break; } } if (!found) return nad; /* it's empty */ /* Are we looking for a peak or a valley? */ if (val > startval) { /* peak */ direction = 1; maxval = val; } else { direction = -1; minval = val; } loc = i; /* Sweep through the rest of the array, recording alternating * peak/valley extrema. */ for (i = i + 1; i < n; i++) { numaGetFValue(nas, i, &val); if (direction == 1 && val > maxval ) { /* new local max */ maxval = val; loc = i; } else if (direction == -1 && val < minval ) { /* new local min */ minval = val; loc = i; } else if (direction == 1 && (maxval - val >= delta)) { numaAddNumber(nad, loc); /* save the current max location */ direction = -1; /* reverse: start looking for a min */ minval = val; loc = i; /* current min location */ } else if (direction == -1 && (val - minval >= delta)) { numaAddNumber(nad, loc); /* save the current min location */ direction = 1; /* reverse: start looking for a max */ maxval = val; loc = i; /* current max location */ } } /* Save the final extremum */ /* numaAddNumber(nad, loc); */ return nad; } /*! * numaCountReversals() * * Input: nas (input values) * minreversal (relative amount to resolve peaks and valleys) * &nr ( number of reversals * &nrpl ( reversal density: reversals/length) * Return: 0 if OK, 1 on error * * Notes: * (1) The input numa is can be generated from pixExtractAlongLine(). * If so, the x parameters can be used to find the reversal * frequency along a line. */ l_int32 numaCountReversals(NUMA *nas, l_float32 minreversal, l_int32 *pnr, l_float32 *pnrpl) { l_int32 n, nr; l_float32 delx, len; NUMA *nat; PROCNAME("numaCountReversals"); if (!pnr && !pnrpl) return ERROR_INT("neither &nr nor &nrpl are defined", procName, 1); if (pnr) *pnr = 0; if (pnrpl) *pnrpl = 0.0; if (!nas) return ERROR_INT("nas not defined", procName, 1); n = numaGetCount(nas); nat = numaFindExtrema(nas, minreversal); nr = numaGetCount(nat); if (pnr) *pnr = nr; if (pnrpl) { numaGetParameters(nas, NULL, &delx); len = delx * n; *pnrpl = (l_float32)nr / len; } numaDestroy(&nat); return 0; } /*----------------------------------------------------------------------* * Threshold crossings and frequency analysis * *----------------------------------------------------------------------*/ /*! * numaSelectCrossingThreshold() * * Input: nax ( numa of abscissa values; can be NULL) * nay (signal) * estthresh (estimated pixel threshold for crossing: e.g., for * images, white <--> black; typ. ~120) * &bestthresh ( robust estimate of threshold to use) * Return: 0 if OK, 1 on error * * Note: * (1) When a valid threshold is used, the number of crossings is * a maximum, because none are missed. If no threshold intersects * all the crossings, the crossings must be determined with * numaCrossingsByPeaks(). * (2) @estthresh is an input estimate of the threshold that should * be used. We compute the crossings with 41 thresholds * (20 below and 20 above). There is a range in which the * number of crossings is a maximum. Return a threshold * in the center of this stable plateau of crossings. * This can then be used with numaCrossingsByThreshold() * to get a good estimate of crossing locations. */ l_int32 numaSelectCrossingThreshold(NUMA *nax, NUMA *nay, l_float32 estthresh, l_float32 *pbestthresh) { l_int32 i, inrun, istart, iend, maxstart, maxend, runlen, maxrunlen; l_int32 val, maxval, nmax, count; l_float32 thresh, fmaxval, fmodeval; NUMA *nat, *nac; PROCNAME("numaSelectCrossingThreshold"); if (!nay) return ERROR_INT("nay not defined", procName, 1); /* Compute the number of crossings for different thresholds */ nat = numaCreate(41); for (i = 0; i < 41; i++) { thresh = estthresh - 80.0 + 4.0 * i; nac = numaCrossingsByThreshold(nax, nay, thresh); numaAddNumber(nat, numaGetCount(nac)); numaDestroy(&nac); } /* Find the center of the plateau of max crossings, which * extends from thresh[istart] to thresh[iend]. */ numaGetMax(nat, &fmaxval, NULL); maxval = (l_int32)fmaxval; nmax = 0; for (i = 0; i < 41; i++) { numaGetIValue(nat, i, &val); if (val == maxval) nmax++; } if (nmax < 3) { /* likely accidental max; try the mode */ numaGetMode(nat, &fmodeval, &count); if (count > nmax && fmodeval > 0.5 * fmaxval) maxval = (l_int32)fmodeval; /* use the mode */ } inrun = FALSE; iend = 40; maxrunlen = 0; for (i = 0; i < 41; i++) { numaGetIValue(nat, i, &val); if (val == maxval) { if (!inrun) { istart = i; inrun = TRUE; } continue; } if (inrun && (val != maxval)) { iend = i - 1; runlen = iend - istart + 1; inrun = FALSE; if (runlen > maxrunlen) { maxstart = istart; maxend = iend; maxrunlen = runlen; } } } if (inrun) { runlen = i - istart; if (runlen > maxrunlen) { maxstart = istart; maxend = i - 1; maxrunlen = runlen; } } #if 0 foundfirst = FALSE; iend = 40; for (i = 0; i < 41; i++) { numaGetIValue(nat, i, &val); if (val == maxval) { if (!foundfirst) { istart = i; foundfirst = TRUE; } } if ((val != maxval) && foundfirst) { iend = i - 1; break; } } nmax = iend - istart + 1; #endif *pbestthresh = estthresh - 80.0 + 2.0 * (l_float32)(maxstart + maxend); #if DEBUG_CROSSINGS fprintf(stderr, "\nCrossings attain a maximum at %d thresholds, between:\n" " thresh[%d] = %5.1f and thresh[%d] = %5.1f\n", nmax, maxstart, estthresh - 80.0 + 4.0 * maxstart, maxend, estthresh - 80.0 + 4.0 * maxend); fprintf(stderr, "The best choice: %5.1f\n", *pbestthresh); fprintf(stderr, "Number of crossings at the 41 thresholds:"); numaWriteStream(stderr, nat); #endif /* DEBUG_CROSSINGS */ numaDestroy(&nat); return 0; } /*! * numaCrossingsByThreshold() * * Input: nax ( numa of abscissa values; can be NULL) * nay (numa of ordinate values, corresponding to nax) * thresh (threshold value for nay) * Return: nad (abscissa pts at threshold), or null on error * * Notes: * (1) If nax == NULL, we use startx and delx from nay to compute * the crossing values in nad. */ NUMA * numaCrossingsByThreshold(NUMA *nax, NUMA *nay, l_float32 thresh) { l_int32 i, n; l_float32 startx, delx; l_float32 xval1, xval2, yval1, yval2, delta1, delta2, crossval, fract; NUMA *nad; PROCNAME("numaCrossingsByThreshold"); if (!nay) return (NUMA *)ERROR_PTR("nay not defined", procName, NULL); n = numaGetCount(nay); if (nax && (numaGetCount(nax) != n)) return (NUMA *)ERROR_PTR("nax and nay sizes differ", procName, NULL); nad = numaCreate(0); numaGetFValue(nay, 0, &yval1); numaGetParameters(nay, &startx, &delx); if (nax) numaGetFValue(nax, 0, &xval1); else xval1 = startx; for (i = 1; i < n; i++) { numaGetFValue(nay, i, &yval2); if (nax) numaGetFValue(nax, i, &xval2); else xval2 = startx + i * delx; delta1 = yval1 - thresh; delta2 = yval2 - thresh; if (delta1 == 0.0) { numaAddNumber(nad, xval1); } else if (delta2 == 0.0) { numaAddNumber(nad, xval2); } else if (delta1 * delta2 < 0.0) { /* crossing */ fract = L_ABS(delta1) / L_ABS(yval1 - yval2); crossval = xval1 + fract * (xval2 - xval1); numaAddNumber(nad, crossval); } xval1 = xval2; yval1 = yval2; } return nad; } /*! * numaCrossingsByPeaks() * * Input: nax ( numa of abscissa values) * nay (numa of ordinate values, corresponding to nax) * delta (parameter used to identify when a new peak can be found) * Return: nad (abscissa pts at threshold), or null on error * * Notes: * (1) If nax == NULL, we use startx and delx from nay to compute * the crossing values in nad. */ NUMA * numaCrossingsByPeaks(NUMA *nax, NUMA *nay, l_float32 delta) { l_int32 i, j, n, np, previndex, curindex; l_float32 startx, delx; l_float32 xval1, xval2, yval1, yval2, delta1, delta2; l_float32 prevval, curval, thresh, crossval, fract; NUMA *nap, *nad; PROCNAME("numaCrossingsByPeaks"); if (!nax) return (NUMA *)ERROR_PTR("nax not defined", procName, NULL); if (!nay) return (NUMA *)ERROR_PTR("nay not defined", procName, NULL); n = numaGetCount(nax); if (numaGetCount(nay) != n) return (NUMA *)ERROR_PTR("nax and nay sizes differ", procName, NULL); /* Find the extrema. Also add last point in nay to get * the last transition (from the last peak to the end). * The number of crossings is 1 more than the number of extrema. */ nap = numaFindExtrema(nay, delta); numaAddNumber(nap, n - 1); np = numaGetCount(nap); L_INFO("Number of crossings: %d\n", procName, np); /* Do all computation in index units of nax */ nad = numaCreate(np); /* output crossings, in nax units */ previndex = 0; /* prime the search with 1st point */ numaGetFValue(nay, 0, &prevval); /* prime the search with 1st point */ numaGetParameters(nay, &startx, &delx); for (i = 0; i < np; i++) { numaGetIValue(nap, i, &curindex); numaGetFValue(nay, curindex, &curval); thresh = (prevval + curval) / 2.0; if (nax) numaGetFValue(nax, previndex, &xval1); else xval1 = startx + previndex * delx; numaGetFValue(nay, previndex, &yval1); for (j = previndex + 1; j <= curindex; j++) { if (nax) numaGetFValue(nax, j, &xval2); else xval2 = startx + j * delx; numaGetFValue(nay, j, &yval2); delta1 = yval1 - thresh; delta2 = yval2 - thresh; if (delta1 == 0.0) { numaAddNumber(nad, xval1); break; } else if (delta2 == 0.0) { numaAddNumber(nad, xval2); break; } else if (delta1 * delta2 < 0.0) { /* crossing */ fract = L_ABS(delta1) / L_ABS(yval1 - yval2); crossval = xval1 + fract * (xval2 - xval1); numaAddNumber(nad, crossval); break; } xval1 = xval2; yval1 = yval2; } previndex = curindex; prevval = curval; } numaDestroy(&nap); return nad; } /*! * numaEvalBestHaarParameters() * * Input: nas (numa of non-negative signal values) * relweight (relative weight of (-1 comb) / (+1 comb) * contributions to the 'convolution'. In effect, * the convolution kernel is a comb consisting of * alternating +1 and -weight.) * nwidth (number of widths to consider) * nshift (number of shifts to consider for each width) * minwidth (smallest width to consider) * maxwidth (largest width to consider) * &bestwidth ( width giving largest score) * &bestshift ( shift giving largest score) * &bestscore ( convolution with * "Haar"-like comb) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a linear sweep of widths, evaluating at @nshift * shifts for each width, computing the score from a convolution * with a long comb, and finding the (width, shift) pair that * gives the maximum score. The best width is the "half-wavelength" * of the signal. * (2) The convolving function is a comb of alternating values * +1 and -1 * relweight, separated by the width and phased by * the shift. This is similar to a Haar transform, except * there the convolution is performed with a square wave. * (3) The function is useful for finding the line spacing * and strength of line signal from pixel sum projections. * (4) The score is normalized to the size of nas divided by * the number of half-widths. For image applications, the input is * typically an array of pixel projections, so one should * normalize by dividing the score by the image width in the * pixel projection direction. */ l_int32 numaEvalBestHaarParameters(NUMA *nas, l_float32 relweight, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore) { l_int32 i, j; l_float32 delwidth, delshift, width, shift, score; l_float32 bestwidth, bestshift, bestscore; PROCNAME("numaEvalBestHaarParameters"); if (!nas) return ERROR_INT("nas not defined", procName, 1); if (!pbestwidth || !pbestshift) return ERROR_INT("&bestwidth and &bestshift not defined", procName, 1); bestscore = 0.0; delwidth = (maxwidth - minwidth) / (nwidth - 1.0); for (i = 0; i < nwidth; i++) { width = minwidth + delwidth * i; delshift = width / (l_float32)(nshift); for (j = 0; j < nshift; j++) { shift = j * delshift; numaEvalHaarSum(nas, width, shift, relweight, &score); if (score > bestscore) { bestscore = score; bestwidth = width; bestshift = shift; #if DEBUG_FREQUENCY fprintf(stderr, "width = %7.3f, shift = %7.3f, score = %7.3f\n", width, shift, score); #endif /* DEBUG_FREQUENCY */ } } } *pbestwidth = bestwidth; *pbestshift = bestshift; if (pbestscore) *pbestscore = bestscore; return 0; } /*! * numaEvalHaarSum() * * Input: nas (numa of non-negative signal values) * width (distance between +1 and -1 in convolution comb) * shift (phase of the comb: location of first +1) * relweight (relative weight of (-1 comb) / (+1 comb) * contributions to the 'convolution'. In effect, * the convolution kernel is a comb consisting of * alternating +1 and -weight.) * &score ( convolution with "Haar"-like comb) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a convolution with a comb of alternating values * +1 and -relweight, separated by the width and phased by the shift. * This is similar to a Haar transform, except that for Haar, * (1) the convolution kernel is symmetric about 0, so the * relweight is 1.0, and * (2) the convolution is performed with a square wave. * (2) The score is normalized to the size of nas divided by * twice the "width". For image applications, the input is * typically an array of pixel projections, so one should * normalize by dividing the score by the image width in the * pixel projection direction. * (3) To get a Haar-like result, use relweight = 1.0. For detecting * signals where you expect every other sample to be close to * zero, as with barcodes or filtered text lines, you can * use relweight > 1.0. */ l_int32 numaEvalHaarSum(NUMA *nas, l_float32 width, l_float32 shift, l_float32 relweight, l_float32 *pscore) { l_int32 i, n, nsamp, index; l_float32 score, weight, val; PROCNAME("numaEvalHaarSum"); if (!pscore) return ERROR_INT("&score not defined", procName, 1); *pscore = 0.0; if (!nas) return ERROR_INT("nas not defined", procName, 1); if ((n = numaGetCount(nas)) < 2 * width) return ERROR_INT("nas size too small", procName, 1); score = 0.0; nsamp = (l_int32)((n - shift) / width); for (i = 0; i < nsamp; i++) { index = (l_int32)(shift + i * width); weight = (i % 2) ? 1.0 : -1.0 * relweight; numaGetFValue(nas, index, &val); score += weight * val; } *pscore = 2.0 * width * score / (l_float32)n; return 0; } leptonica-1.70/src/spixio.c0000644000175000017500000003225712244234061013762 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * spixio.c * * This does fast serialization of a pix in memory to file, * copying the raw data for maximum speed. The underlying * function serializes it to memory, and it is wrapped to be * callable from standard pixRead and pixWrite functions. * * Reading spix from file * PIX *pixReadStreamSpix() * l_int32 readHeaderSpix() * l_int32 freadHeaderSpix() * l_int32 sreadHeaderSpix() * * Writing spix to file * l_int32 pixWriteStreamSpix() * * Low-level serialization of pix to/from memory (uncompressed) * PIX *pixReadMemSpix() * l_int32 pixWriteMemSpix() * l_int32 pixSerializeToMemory() * PIX *pixDeserializeFromMemory() * */ #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_SERIALIZE 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------------* * Reading spix from file * *-----------------------------------------------------------------------*/ /*! * pixReadStreamSpix() * * Input: stream * Return: pix, or null on error. * * Notes: * (1) If called from pixReadStream(), the stream is positioned * at the beginning of the file. */ PIX * pixReadStreamSpix(FILE *fp) { size_t nbytes; l_uint8 *data; PIX *pix; PROCNAME("pixReadStreamSpix"); if (!fp) return (PIX *)ERROR_PTR("stream not defined", procName, NULL); if ((data = l_binaryReadStream(fp, &nbytes)) == NULL) return (PIX *)ERROR_PTR("data not read", procName, NULL); if ((pix = pixReadMemSpix(data, nbytes)) == NULL) { FREE(data); return (PIX *)ERROR_PTR("pix not made", procName, NULL); } FREE(data); return pix; } /*! * readHeaderSpix() * * Input: filename * &width () * &height () * &bps (, bits/sample) * &spp (, samples/pixel) * &iscmap (; input NULL to ignore) * Return: 0 if OK, 1 on error * * Notes: * (1) If there is a colormap, iscmap is returned as 1; else 0. */ l_int32 readHeaderSpix(const char *filename, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 ret; FILE *fp; PROCNAME("readHeaderSpix"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not defined", procName, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); ret = freadHeaderSpix(fp, pwidth, pheight, pbps, pspp, piscmap); fclose(fp); return ret; } /*! * freadHeaderSpix() * * Input: stream * &width () * &height () * &bps (, bits/sample) * &spp (, samples/pixel) * &iscmap (; input NULL to ignore) * Return: 0 if OK, 1 on error * * Notes: * (1) If there is a colormap, iscmap is returned as 1; else 0. */ l_int32 freadHeaderSpix(FILE *fp, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 nbytes, ret; l_uint32 *data; PROCNAME("freadHeaderSpix"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not defined", procName, 1); nbytes = fnbytesInFile(fp); if (nbytes < 32) return ERROR_INT("file too small to be spix", procName, 1); if ((data = (l_uint32 *)CALLOC(6, sizeof(l_uint32))) == NULL) return ERROR_INT("CALLOC fail for data", procName, 1); if (fread(data, 4, 6, fp) != 6) return ERROR_INT("error reading data", procName, 1); ret = sreadHeaderSpix(data, pwidth, pheight, pbps, pspp, piscmap); FREE(data); return ret; } /*! * sreadHeaderSpix() * * Input: data * &width () * &height () * &bps (, bits/sample) * &spp (, samples/pixel) * &iscmap (; input NULL to ignore) * Return: 0 if OK, 1 on error * * Notes: * (1) If there is a colormap, iscmap is returned as 1; else 0. */ l_int32 sreadHeaderSpix(const l_uint32 *data, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { char *id; l_int32 d, ncolors; PROCNAME("sreadHeaderSpix"); if (!data) return ERROR_INT("data not defined", procName, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not defined", procName, 1); *pwidth = *pheight = *pbps = *pspp = 0; if (piscmap) *piscmap = 0; /* Check file id */ id = (char *)data; if (id[0] != 's' || id[1] != 'p' || id[2] != 'i' || id[3] != 'x') return ERROR_INT("not a valid spix file", procName, 1); *pwidth = data[1]; *pheight = data[2]; d = data[3]; if (d <= 16) { *pbps = d; *pspp = 1; } else { *pbps = 8; *pspp = d / 8; /* if the pix is 32 bpp, call it 4 samples */ } ncolors = data[5]; if (piscmap) *piscmap = (ncolors == 0) ? 0 : 1; return 0; } /*-----------------------------------------------------------------------* * Writing spix to file * *-----------------------------------------------------------------------*/ /*! * pixWriteStreamSpix() * * Input: stream * pix * Return: 0 if OK; 1 on error */ l_int32 pixWriteStreamSpix(FILE *fp, PIX *pix) { l_uint8 *data; size_t size; PROCNAME("pixWriteStreamSpix"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (pixWriteMemSpix(&data, &size, pix)) return ERROR_INT("failure to write pix to memory", procName, 1); fwrite(data, 1, size, fp); FREE(data); return 0; } /*-----------------------------------------------------------------------* * Low-level serialization of pix to/from memory (uncompressed) * *-----------------------------------------------------------------------*/ /*! * pixReadMemSpix() * * Input: data (const; uncompressed) * size (of data) * Return: pix, or null on error */ PIX * pixReadMemSpix(const l_uint8 *data, size_t size) { return pixDeserializeFromMemory((l_uint32 *)data, size); } /*! * pixWriteMemSpix() * * Input: &data ( data of serialized, uncompressed pix) * &size ( size of returned data) * pix (all depths; colormap OK) * Return: 0 if OK, 1 on error */ l_int32 pixWriteMemSpix(l_uint8 **pdata, size_t *psize, PIX *pix) { return pixSerializeToMemory(pix, (l_uint32 **)pdata, psize); } /*! * pixSerializeToMemory() * * Input: pixs (all depths, colormap OK) * &data ( serialized data in memory) * &nbytes ( number of bytes in data string) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a fast serialization of the principal elements * of the pix, as follows: * "spix" (4 bytes) -- ID for file type * w (4 bytes) * h (4 bytes) * d (4 bytes) * wpl (4 bytes) * ncolors (4 bytes) -- in colormap; 0 if there is no colormap * cdata (4 * ncolors) -- size of serialized colormap array * rdatasize (4 bytes) -- size of serialized raster data * = 4 * wpl * h * rdata (rdatasize) */ l_int32 pixSerializeToMemory(PIX *pixs, l_uint32 **pdata, size_t *pnbytes) { char *id; l_int32 w, h, d, wpl, rdatasize, ncolors, nbytes, index; l_uint8 *cdata; /* data in colormap array (4 bytes/color table entry) */ l_uint32 *data; l_uint32 *rdata; /* data in pix raster */ PIXCMAP *cmap; PROCNAME("pixSerializeToMemory"); if (!pdata || !pnbytes) return ERROR_INT("&data and &nbytes not both defined", procName, 1); *pdata = NULL; *pnbytes = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); rdata = pixGetData(pixs); rdatasize = 4 * wpl * h; ncolors = 0; cdata = NULL; if ((cmap = pixGetColormap(pixs)) != NULL) pixcmapSerializeToMemory(cmap, 4, &ncolors, &cdata); nbytes = 24 + 4 * ncolors + 4 + rdatasize; if ((data = (l_uint32 *)CALLOC(nbytes / 4, sizeof(l_uint32))) == NULL) return ERROR_INT("data not made", procName, 1); *pdata = data; *pnbytes = nbytes; id = (char *)data; id[0] = 's'; id[1] = 'p'; id[2] = 'i'; id[3] = 'x'; data[1] = w; data[2] = h; data[3] = d; data[4] = wpl; data[5] = ncolors; if (ncolors > 0) memcpy((char *)(data + 6), (char *)cdata, 4 * ncolors); index = 6 + ncolors; data[index] = rdatasize; memcpy((char *)(data + index + 1), (char *)rdata, rdatasize); #if DEBUG_SERIALIZE fprintf(stderr, "Serialize: " "raster size = %d, ncolors in cmap = %d, total bytes = %d\n", rdatasize, ncolors, nbytes); #endif /* DEBUG_SERIALIZE */ FREE(cdata); return 0; } /*! * pixDeserializeFromMemory() * * Input: data (serialized data in memory) * nbytes (number of bytes in data string) * Return: pix, or NULL on error * * Notes: * (1) See pixSerializeToMemory() for the binary format. */ PIX * pixDeserializeFromMemory(const l_uint32 *data, size_t nbytes) { char *id; l_int32 w, h, d, imdatasize, ncolors; l_uint32 *imdata; /* data in pix raster */ PIX *pixd; PIXCMAP *cmap; PROCNAME("pixDeserializeFromMemory"); if (!data) return (PIX *)ERROR_PTR("data not defined", procName, NULL); if (nbytes < 28) return (PIX *)ERROR_PTR("invalid data", procName, NULL); id = (char *)data; if (id[0] != 's' || id[1] != 'p' || id[2] != 'i' || id[3] != 'x') return (PIX *)ERROR_PTR("invalid id string", procName, NULL); w = data[1]; h = data[2]; d = data[3]; if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pix not made", procName, NULL); ncolors = data[5]; if (ncolors > 0) { cmap = pixcmapDeserializeFromMemory((l_uint8 *)(&data[6]), 4, ncolors); if (!cmap) return (PIX *)ERROR_PTR("cmap not made", procName, NULL); pixSetColormap(pixd, cmap); } imdata = pixGetData(pixd); imdatasize = nbytes - 24 - 4 * ncolors - 4; if (imdatasize != data[6 + ncolors]) L_ERROR("imdatasize is inconsistent with nbytes\n", procName); memcpy((char *)imdata, (char *)(data + 7 + ncolors), imdatasize); #if DEBUG_SERIALIZE fprintf(stderr, "Deserialize: " "raster size = %d, ncolors in cmap = %d, total bytes = %lu\n", imdatasize, ncolors, nbytes); #endif /* DEBUG_SERIALIZE */ return pixd; } leptonica-1.70/src/morph.c0000644000175000017500000017363212244224427013604 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * morph.c * * Generic binary morphological ops implemented with rasterop * PIX *pixDilate() * PIX *pixErode() * PIX *pixHMT() * PIX *pixOpen() * PIX *pixClose() * PIX *pixCloseSafe() * PIX *pixOpenGeneralized() * PIX *pixCloseGeneralized() * * Binary morphological (raster) ops with brick Sels * PIX *pixDilateBrick() * PIX *pixErodeBrick() * PIX *pixOpenBrick() * PIX *pixCloseBrick() * PIX *pixCloseSafeBrick() * * Binary composed morphological (raster) ops with brick Sels * l_int32 selectComposableSels() * l_int32 selectComposableSizes() * PIX *pixDilateCompBrick() * PIX *pixErodeCompBrick() * PIX *pixOpenCompBrick() * PIX *pixCloseCompBrick() * PIX *pixCloseSafeCompBrick() * * Functions associated with boundary conditions * void resetMorphBoundaryCondition() * l_int32 getMorphBorderPixelColor() * * Static helpers for arg processing * static PIX *processMorphArgs1() * static PIX *processMorphArgs2() * * You are provided with many simple ways to do binary morphology. * In particular, if you are using brick Sels, there are six * convenient methods, all specially tailored for separable operations * on brick Sels. A "brick" Sel is a Sel that is a rectangle * of solid SEL_HITs with the origin at or near the center. * Note that a brick Sel can have one dimension of size 1. * This is very common. All the brick Sel operations are * separable, meaning the operation is done first in the horizontal * direction and then in the vertical direction. If one of the * dimensions is 1, this is a special case where the operation is * only performed in the other direction. * * These six brick Sel methods are enumerated as follows: * * (1) Brick Sels: pix*Brick(), where * = {Dilate, Erode, Open, Close}. * These are separable rasterop implementations. The Sels are * automatically generated, used, and destroyed at the end. * You can get the result as a new Pix, in-place back into the src Pix, * or written to another existing Pix. * * (2) Brick Sels: pix*CompBrick(), where * = {Dilate, Erode, Open, Close}. * These are separable, 2-way composite, rasterop implementations. * The Sels are automatically generated, used, and destroyed at the end. * You can get the result as a new Pix, in-place back into the src Pix, * or written to another existing Pix. For large Sels, these are * considerably faster than the corresponding pix*Brick() functions. * N.B.: The size of the Sels that are actually used are typically * close to, but not exactly equal to, the size input to the function. * * (3) Brick Sels: pix*BrickDwa(), where * = {Dilate, Erode, Open, Close}. * These are separable dwa (destination word accumulation) * implementations. They use auto-gen'd dwa code. You can get * the result as a new Pix, in-place back into the src Pix, * or written to another existing Pix. This is typically * about 3x faster than the analogous rasterop pix*Brick() * function, but it has the limitation that the Sel size must * be less than 63. This is pre-set to work on a number * of pre-generated Sels. If you want to use other Sels, the * code can be auto-gen'd for them; see the instructions in morphdwa.c. * * (4) Same as (1), but you run it through pixMorphSequence(), with * the sequence string either compiled in or generated using sprintf. * All intermediate images and Sels are created, used and destroyed. * You always get the result as a new Pix. For example, you can * specify a separable 11 x 17 brick opening as "o11.17", * or you can specify the horizontal and vertical operations * explicitly as "o11.1 + o1.11". See morphseq.c for details. * * (5) Same as (2), but you run it through pixMorphCompSequence(), with * the sequence string either compiled in or generated using sprintf. * All intermediate images and Sels are created, used and destroyed. * You always get the result as a new Pix. See morphseq.c for details. * * (6) Same as (3), but you run it through pixMorphSequenceDwa(), with * the sequence string either compiled in or generated using sprintf. * All intermediate images and Sels are created, used and destroyed. * You always get the result as a new Pix. See morphseq.c for details. * * If you are using Sels that are not bricks, you have two choices: * (a) simplest: use the basic rasterop implementations (pixDilate(), ...) * (b) fastest: generate the destination word accumumlation (dwa) * code for your Sels and compile it with the library. * * For an example, see flipdetect.c, which gives implementations * using hit-miss Sels with both the rasterop and dwa versions. * For the latter, the dwa code resides in fliphmtgen.c, and it * was generated by prog/flipselgen.c. Both the rasterop and dwa * implementations are tested by prog/fliptest.c. * * A global constant MORPH_BC is used to set the boundary conditions * for rasterop-based binary morphology. MORPH_BC, in morph.c, * is set by default to ASYMMETRIC_MORPH_BC for a non-symmetric * convention for boundary pixels in dilation and erosion: * All pixels outside the image are assumed to be OFF * for both dilation and erosion. * To use a symmetric definition, see comments in pixErode() * and reset MORPH_BC to SYMMETRIC_MORPH_BC, using * resetMorphBoundaryCondition(). * * Boundary artifacts are possible in closing when the non-symmetric * boundary conditions are used, because foreground pixels very close * to the edge can be removed. This can be avoided by using either * the symmetric boundary conditions or the function pixCloseSafe(), * which adds a border before the operation and removes it afterwards. * * The hit-miss transform (HMT) is the bit-and of 2 erosions: * (erosion of the src by the hits) & (erosion of the bit-inverted * src by the misses) * * The 'generalized opening' is an HMT followed by a dilation that uses * only the hits of the hit-miss Sel. * The 'generalized closing' is a dilation (again, with the hits * of a hit-miss Sel), followed by the HMT. * Both of these 'generalized' functions are idempotent. * * These functions are extensively tested in prog/binmorph1_reg.c, * prog/binmorph2_reg.c, and prog/binmorph3_reg.c. */ #include #include "allheaders.h" /* Global constant; initialized here; must be declared extern * in other files to access it directly. However, in most * cases that is not necessary, because it can be reset * using resetMorphBoundaryCondition(). */ LEPT_DLL l_int32 MORPH_BC = ASYMMETRIC_MORPH_BC; /* We accept this cost in extra rasterops for decomposing exactly. */ static const l_int32 ACCEPTABLE_COST = 5; /* Static helpers for arg processing */ static PIX * processMorphArgs1(PIX *pixd, PIX *pixs, SEL *sel, PIX **ppixt); static PIX * processMorphArgs2(PIX *pixd, PIX *pixs, SEL *sel); /*-----------------------------------------------------------------* * Generic binary morphological ops implemented with rasterop * *-----------------------------------------------------------------*/ /*! * pixDilate() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) This dilates src using hits in Sel. * (2) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixDilate(NULL, pixs, ...); * (b) pixDilate(pixs, pixs, ...); * (c) pixDilate(pixd, pixs, ...); * (4) The size of the result is determined by pixs. */ PIX * pixDilate(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 i, j, w, h, sx, sy, cx, cy, seldata; PIX *pixt; PROCNAME("pixDilate"); if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) return (PIX *)ERROR_PTR("processMorphArgs1 failed", procName, pixd); pixGetDimensions(pixs, &w, &h, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); pixClearAll(pixd); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { seldata = sel->data[i][j]; if (seldata == 1) { /* src | dst */ pixRasterop(pixd, j - cx, i - cy, w, h, PIX_SRC | PIX_DST, pixt, 0, 0); } } } pixDestroy(&pixt); return pixd; } /*! * pixErode() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) This erodes src using hits in Sel. * (2) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixErode(NULL, pixs, ...); * (b) pixErode(pixs, pixs, ...); * (c) pixErode(pixd, pixs, ...); * (4) The size of the result is determined by pixs. */ PIX * pixErode(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 i, j, w, h, sx, sy, cx, cy, seldata; l_int32 xp, yp, xn, yn; PIX *pixt; PROCNAME("pixErode"); if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) return (PIX *)ERROR_PTR("processMorphArgs1 failed", procName, pixd); pixGetDimensions(pixs, &w, &h, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); pixSetAll(pixd); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { seldata = sel->data[i][j]; if (seldata == 1) { /* src & dst */ pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC & PIX_DST, pixt, 0, 0); } } } /* Clear near edges. We do this for the asymmetric boundary * condition convention that implements erosion assuming all * pixels surrounding the image are OFF. If you use a * use a symmetric b.c. convention, where the erosion is * implemented assuming pixels surrounding the image * are ON, these operations are omitted. */ if (MORPH_BC == ASYMMETRIC_MORPH_BC) { selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); if (xp > 0) pixRasterop(pixd, 0, 0, xp, h, PIX_CLR, NULL, 0, 0); if (xn > 0) pixRasterop(pixd, w - xn, 0, xn, h, PIX_CLR, NULL, 0, 0); if (yp > 0) pixRasterop(pixd, 0, 0, w, yp, PIX_CLR, NULL, 0, 0); if (yn > 0) pixRasterop(pixd, 0, h - yn, w, yn, PIX_CLR, NULL, 0, 0); } pixDestroy(&pixt); return pixd; } /*! * pixHMT() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) The hit-miss transform erodes the src, using both hits * and misses in the Sel. It ANDs the shifted src for hits * and ANDs the inverted shifted src for misses. * (2) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixHMT(NULL, pixs, ...); * (b) pixHMT(pixs, pixs, ...); * (c) pixHMT(pixd, pixs, ...); * (4) The size of the result is determined by pixs. */ PIX * pixHMT(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 i, j, w, h, sx, sy, cx, cy, firstrasterop, seldata; l_int32 xp, yp, xn, yn; PIX *pixt; PROCNAME("pixHMT"); if ((pixd = processMorphArgs1(pixd, pixs, sel, &pixt)) == NULL) return (PIX *)ERROR_PTR("processMorphArgs1 failed", procName, pixd); pixGetDimensions(pixs, &w, &h, NULL); selGetParameters(sel, &sy, &sx, &cy, &cx); firstrasterop = TRUE; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { seldata = sel->data[i][j]; if (seldata == 1) { /* hit */ if (firstrasterop == TRUE) { /* src only */ pixClearAll(pixd); pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC, pixt, 0, 0); firstrasterop = FALSE; } else { /* src & dst */ pixRasterop(pixd, cx - j, cy - i, w, h, PIX_SRC & PIX_DST, pixt, 0, 0); } } else if (seldata == 2) { /* miss */ if (firstrasterop == TRUE) { /* ~src only */ pixSetAll(pixd); pixRasterop(pixd, cx - j, cy - i, w, h, PIX_NOT(PIX_SRC), pixt, 0, 0); firstrasterop = FALSE; } else { /* ~src & dst */ pixRasterop(pixd, cx - j, cy - i, w, h, PIX_NOT(PIX_SRC) & PIX_DST, pixt, 0, 0); } } } } /* Clear near edges */ selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); if (xp > 0) pixRasterop(pixd, 0, 0, xp, h, PIX_CLR, NULL, 0, 0); if (xn > 0) pixRasterop(pixd, w - xn, 0, xn, h, PIX_CLR, NULL, 0, 0); if (yp > 0) pixRasterop(pixd, 0, 0, w, yp, PIX_CLR, NULL, 0, 0); if (yn > 0) pixRasterop(pixd, 0, h - yn, w, yn, PIX_CLR, NULL, 0, 0); pixDestroy(&pixt); return pixd; } /*! * pixOpen() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) Generic morphological opening, using hits in the Sel. * (2) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (3) For clarity, if the case is known, use these patterns: * (a) pixd = pixOpen(NULL, pixs, ...); * (b) pixOpen(pixs, pixs, ...); * (c) pixOpen(pixd, pixs, ...); * (4) The size of the result is determined by pixs. */ PIX * pixOpen(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; PROCNAME("pixOpen"); if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); if ((pixt = pixErode(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); pixDilate(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*! * pixClose() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) Generic morphological closing, using hits in the Sel. * (2) This implementation is a strict dual of the opening if * symmetric boundary conditions are used (see notes at top * of this file). * (3) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (4) For clarity, if the case is known, use these patterns: * (a) pixd = pixClose(NULL, pixs, ...); * (b) pixClose(pixs, pixs, ...); * (c) pixClose(pixd, pixs, ...); * (5) The size of the result is determined by pixs. */ PIX * pixClose(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; PROCNAME("pixClose"); if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); if ((pixt = pixDilate(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); pixErode(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*! * pixCloseSafe() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) Generic morphological closing, using hits in the Sel. * (2) If non-symmetric boundary conditions are used, this * function adds a border of OFF pixels that is of * sufficient size to avoid losing pixels from the dilation, * and it removes the border after the operation is finished. * It thus enforces a correct extensive result for closing. * (3) If symmetric b.c. are used, it is not necessary to add * and remove this border. * (4) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (5) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseSafe(NULL, pixs, ...); * (b) pixCloseSafe(pixs, pixs, ...); * (c) pixCloseSafe(pixd, pixs, ...); * (6) The size of the result is determined by pixs. */ PIX * pixCloseSafe(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 xp, yp, xn, yn, xmax, xbord; PIX *pixt1, *pixt2; PROCNAME("pixCloseSafe"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (!sel) return (PIX *)ERROR_PTR("sel not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); /* Symmetric b.c. handles correctly without added pixels */ if (MORPH_BC == SYMMETRIC_MORPH_BC) return pixClose(pixd, pixs, sel); selFindMaxTranslations(sel, &xp, &yp, &xn, &yn); xmax = L_MAX(xp, xn); xbord = 32 * ((xmax + 31) / 32); /* full 32 bit words */ if ((pixt1 = pixAddBorderGeneral(pixs, xbord, xbord, yp, yn, 0)) == NULL) return (PIX *)ERROR_PTR("pixt1 not made", procName, pixd); pixClose(pixt1, pixt1, sel); if ((pixt2 = pixRemoveBorderGeneral(pixt1, xbord, xbord, yp, yn)) == NULL) return (PIX *)ERROR_PTR("pixt2 not made", procName, pixd); pixDestroy(&pixt1); if (!pixd) return pixt2; pixCopy(pixd, pixt2); pixDestroy(&pixt2); return pixd; } /*! * pixOpenGeneralized() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) Generalized morphological opening, using both hits and * misses in the Sel. * (2) This does a hit-miss transform, followed by a dilation * using the hits. * (3) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (4) For clarity, if the case is known, use these patterns: * (a) pixd = pixOpenGeneralized(NULL, pixs, ...); * (b) pixOpenGeneralized(pixs, pixs, ...); * (c) pixOpenGeneralized(pixd, pixs, ...); * (5) The size of the result is determined by pixs. */ PIX * pixOpenGeneralized(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; PROCNAME("pixOpenGeneralized"); if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); if ((pixt = pixHMT(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); pixDilate(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*! * pixCloseGeneralized() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * Return: pixd * * Notes: * (1) Generalized morphological closing, using both hits and * misses in the Sel. * (2) This does a dilation using the hits, followed by a * hit-miss transform. * (3) This operation is a dual of the generalized opening. * (4) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (5) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseGeneralized(NULL, pixs, ...); * (b) pixCloseGeneralized(pixs, pixs, ...); * (c) pixCloseGeneralized(pixd, pixs, ...); * (6) The size of the result is determined by pixs. */ PIX * pixCloseGeneralized(PIX *pixd, PIX *pixs, SEL *sel) { PIX *pixt; PROCNAME("pixCloseGeneralized"); if ((pixd = processMorphArgs2(pixd, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixd not returned", procName, pixd); if ((pixt = pixDilate(NULL, pixs, sel)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); pixHMT(pixd, pixt, sel); pixDestroy(&pixt); return pixd; } /*-----------------------------------------------------------------* * Binary morphological (raster) ops with brick Sels * *-----------------------------------------------------------------*/ /*! * pixDilateBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do separably if both hsize and vsize are > 1. * (4) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (5) For clarity, if the case is known, use these patterns: * (a) pixd = pixDilateBrick(NULL, pixs, ...); * (b) pixDilateBrick(pixs, pixs, ...); * (c) pixDilateBrick(pixd, pixs, ...); * (6) The size of the result is determined by pixs. */ PIX * pixDilateBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; PROCNAME("pixDilateBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); pixd = pixDilate(pixd, pixs, sel); selDestroy(&sel); } else { selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); pixt = pixDilate(NULL, pixs, selh); pixd = pixDilate(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * pixErodeBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do separably if both hsize and vsize are > 1. * (4) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (5) For clarity, if the case is known, use these patterns: * (a) pixd = pixErodeBrick(NULL, pixs, ...); * (b) pixErodeBrick(pixs, pixs, ...); * (c) pixErodeBrick(pixd, pixs, ...); * (6) The size of the result is determined by pixs. */ PIX * pixErodeBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; PROCNAME("pixErodeBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); pixd = pixErode(pixd, pixs, sel); selDestroy(&sel); } else { selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); pixt = pixErode(NULL, pixs, selh); pixd = pixErode(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * pixOpenBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do separably if both hsize and vsize are > 1. * (4) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (5) For clarity, if the case is known, use these patterns: * (a) pixd = pixOpenBrick(NULL, pixs, ...); * (b) pixOpenBrick(pixs, pixs, ...); * (c) pixOpenBrick(pixd, pixs, ...); * (6) The size of the result is determined by pixs. */ PIX * pixOpenBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; PROCNAME("pixOpenBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); pixd = pixOpen(pixd, pixs, sel); selDestroy(&sel); } else { /* do separably */ selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); pixt = pixErode(NULL, pixs, selh); pixd = pixErode(pixd, pixt, selv); pixDilate(pixt, pixd, selh); pixDilate(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * pixCloseBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do separably if both hsize and vsize are > 1. * (4) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (5) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseBrick(NULL, pixs, ...); * (b) pixCloseBrick(pixs, pixs, ...); * (c) pixCloseBrick(pixd, pixs, ...); * (6) The size of the result is determined by pixs. */ PIX * pixCloseBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *sel, *selh, *selv; PROCNAME("pixCloseBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); pixd = pixClose(pixd, pixs, sel); selDestroy(&sel); } else { /* do separably */ selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); pixt = pixDilate(NULL, pixs, selh); pixd = pixDilate(pixd, pixt, selv); pixErode(pixt, pixd, selh); pixErode(pixd, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } return pixd; } /*! * pixCloseSafeBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do separably if both hsize and vsize are > 1. * (4) Safe closing adds a border of 0 pixels, of sufficient size so * that all pixels in input image are processed within * 32-bit words in the expanded image. As a result, there is * no special processing for pixels near the boundary, and there * are no boundary effects. The border is removed at the end. * (5) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (6) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseBrick(NULL, pixs, ...); * (b) pixCloseBrick(pixs, pixs, ...); * (c) pixCloseBrick(pixd, pixs, ...); * (7) The size of the result is determined by pixs. */ PIX * pixCloseSafeBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 maxtrans, bordsize; PIX *pixsb, *pixt, *pixdb; SEL *sel, *selh, *selv; PROCNAME("pixCloseSafeBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); /* Symmetric b.c. handles correctly without added pixels */ if (MORPH_BC == SYMMETRIC_MORPH_BC) return pixCloseBrick(pixd, pixs, hsize, vsize); maxtrans = L_MAX(hsize / 2, vsize / 2); bordsize = 32 * ((maxtrans + 31) / 32); /* full 32 bit words */ pixsb = pixAddBorder(pixs, bordsize, 0); if (hsize == 1 || vsize == 1) { /* no intermediate result */ sel = selCreateBrick(vsize, hsize, vsize / 2, hsize / 2, SEL_HIT); pixdb = pixClose(NULL, pixsb, sel); selDestroy(&sel); } else { /* do separably */ selh = selCreateBrick(1, hsize, 0, hsize / 2, SEL_HIT); selv = selCreateBrick(vsize, 1, vsize / 2, 0, SEL_HIT); pixt = pixDilate(NULL, pixsb, selh); pixdb = pixDilate(NULL, pixt, selv); pixErode(pixt, pixdb, selh); pixErode(pixdb, pixt, selv); pixDestroy(&pixt); selDestroy(&selh); selDestroy(&selv); } pixt = pixRemoveBorder(pixdb, bordsize); pixDestroy(&pixsb); pixDestroy(&pixdb); if (!pixd) { pixd = pixt; } else { pixCopy(pixd, pixt); pixDestroy(&pixt); } return pixd; } /*-----------------------------------------------------------------* * Binary composed morphological (raster) ops with brick Sels * *-----------------------------------------------------------------*/ /* selectComposableSels() * * Input: size (of composed sel) * direction (L_HORIZ, L_VERT) * &sel1 ( contiguous sel; can be null) * &sel2 ( comb sel; can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) When using composable Sels, where the original Sel is * decomposed into two, the best you can do in terms * of reducing the computation is by a factor: * * 2 * sqrt(size) / size * * In practice, you get quite close to this. E.g., * * Sel size | Optimum reduction factor * -------- ------------------------ * 36 | 1/3 * 64 | 1/4 * 144 | 1/6 * 256 | 1/8 */ l_int32 selectComposableSels(l_int32 size, l_int32 direction, SEL **psel1, SEL **psel2) { l_int32 factor1, factor2; PROCNAME("selectComposableSels"); if (!psel1 && !psel2) return ERROR_INT("neither &sel1 nor &sel2 are defined", procName, 1); if (psel1) *psel1 = NULL; if (psel2) *psel2 = NULL; if (size < 1 || size > 250 * 250) return ERROR_INT("size < 1", procName, 1); if (direction != L_HORIZ && direction != L_VERT) return ERROR_INT("invalid direction", procName, 1); if (selectComposableSizes(size, &factor1, &factor2)) return ERROR_INT("factors not found", procName, 1); if (psel1) { if (direction == L_HORIZ) *psel1 = selCreateBrick(1, factor1, 0, factor1 / 2, SEL_HIT); else *psel1 = selCreateBrick(factor1, 1, factor1 / 2 , 0, SEL_HIT); } if (psel2) *psel2 = selCreateComb(factor1, factor2, direction); return 0; } /*! * selectComposableSizes() * * Input: size (of sel to be decomposed) * &factor1 ( larger factor) * &factor2 ( smaller factor) * Return: 0 if OK, 1 on error * * Notes: * (1) This works for Sel sizes up to 62500, which seems sufficient. * (2) The composable sel size is typically within +- 1 of * the requested size. Up to size = 300, the maximum difference * is +- 2. * (3) We choose an overall cost function where the penalty for * the size difference between input and actual is 4 times * the penalty for additional rasterops. * (4) Returned values: factor1 >= factor2 * If size > 1, then factor1 > 1. */ l_int32 selectComposableSizes(l_int32 size, l_int32 *pfactor1, l_int32 *pfactor2) { l_int32 i, midval, val1, val2m, val2p; l_int32 index, prodm, prodp; l_int32 mincost, totcost, rastcostm, rastcostp, diffm, diffp; l_int32 lowval[256]; l_int32 hival[256]; l_int32 rastcost[256]; /* excess in sum of sizes (extra rasterops) */ l_int32 diff[256]; /* diff between product (sel size) and input size */ PROCNAME("selectComposableSizes"); if (size < 1 || size > 250 * 250) return ERROR_INT("size < 1", procName, 1); if (!pfactor1 || !pfactor2) return ERROR_INT("&factor1 or &factor2 not defined", procName, 1); midval = (l_int32)(sqrt((l_float64)size) + 0.001); if (midval * midval == size) { *pfactor1 = *pfactor2 = midval; return 0; } /* Set up arrays. For each val1, optimize for lowest diff, * and save the rastcost, the diff, and the two factors. */ for (val1 = midval + 1, i = 0; val1 > 0; val1--, i++) { val2m = size / val1; val2p = val2m + 1; prodm = val1 * val2m; prodp = val1 * val2p; rastcostm = val1 + val2m - 2 * midval; rastcostp = val1 + val2p - 2 * midval; diffm = L_ABS(size - prodm); diffp = L_ABS(size - prodp); if (diffm <= diffp) { lowval[i] = L_MIN(val1, val2m); hival[i] = L_MAX(val1, val2m); rastcost[i] = rastcostm; diff[i] = diffm; } else { lowval[i] = L_MIN(val1, val2p); hival[i] = L_MAX(val1, val2p); rastcost[i] = rastcostp; diff[i] = diffp; } } /* Choose the optimum factors; use cost ratio 4 on diff */ mincost = 10000; for (i = 0; i < midval + 1; i++) { if (diff[i] == 0 && rastcost[i] < ACCEPTABLE_COST) { *pfactor1 = hival[i]; *pfactor2 = lowval[i]; return 0; } totcost = 4 * diff[i] + rastcost[i]; if (totcost < mincost) { mincost = totcost; index = i; } } *pfactor1 = hival[index]; *pfactor2 = lowval[index]; return 0; } /*! * pixDilateCompBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do compositely for each dimension > 1. * (4) Do separably if both hsize and vsize are > 1. * (5) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (6) For clarity, if the case is known, use these patterns: * (a) pixd = pixDilateCompBrick(NULL, pixs, ...); * (b) pixDilateCompBrick(pixs, pixs, ...); * (c) pixDilateCompBrick(pixd, pixs, ...); * (7) The dimensions of the resulting image are determined by pixs. * (8) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixDilateCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt1, *pixt2, *pixt3; SEL *selh1, *selh2, *selv1, *selv2; PROCNAME("pixDilateCompBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); pixt1 = pixAddBorder(pixs, 32, 0); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); if (vsize > 1) selectComposableSels(vsize, L_VERT, &selv1, &selv2); if (vsize == 1) { pixt2 = pixDilate(NULL, pixt1, selh1); pixt3 = pixDilate(NULL, pixt2, selh2); } else if (hsize == 1) { pixt2 = pixDilate(NULL, pixt1, selv1); pixt3 = pixDilate(NULL, pixt2, selv2); } else { pixt2 = pixDilate(NULL, pixt1, selh1); pixt3 = pixDilate(NULL, pixt2, selh2); pixDilate(pixt2, pixt3, selv1); pixDilate(pixt3, pixt2, selv2); } pixDestroy(&pixt1); pixDestroy(&pixt2); if (hsize > 1) { selDestroy(&selh1); selDestroy(&selh2); } if (vsize > 1) { selDestroy(&selv1); selDestroy(&selv2); } pixt1 = pixRemoveBorder(pixt3, 32); pixDestroy(&pixt3); if (!pixd) return pixt1; pixCopy(pixd, pixt1); pixDestroy(&pixt1); return pixd; } /*! * pixErodeCompBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do compositely for each dimension > 1. * (4) Do separably if both hsize and vsize are > 1. * (5) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (6) For clarity, if the case is known, use these patterns: * (a) pixd = pixErodeCompBrick(NULL, pixs, ...); * (b) pixErodeCompBrick(pixs, pixs, ...); * (c) pixErodeCompBrick(pixd, pixs, ...); * (7) The dimensions of the resulting image are determined by pixs. * (8) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixErodeCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *selh1, *selh2, *selv1, *selv2; PROCNAME("pixErodeCompBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); if (vsize > 1) selectComposableSels(vsize, L_VERT, &selv1, &selv2); if (vsize == 1) { pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); } else if (hsize == 1) { pixt = pixErode(NULL, pixs, selv1); pixd = pixErode(pixd, pixt, selv2); } else { pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); } pixDestroy(&pixt); if (hsize > 1) { selDestroy(&selh1); selDestroy(&selh2); } if (vsize > 1) { selDestroy(&selv1); selDestroy(&selv2); } return pixd; } /*! * pixOpenCompBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do compositely for each dimension > 1. * (4) Do separably if both hsize and vsize are > 1. * (5) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (6) For clarity, if the case is known, use these patterns: * (a) pixd = pixOpenCompBrick(NULL, pixs, ...); * (b) pixOpenCompBrick(pixs, pixs, ...); * (c) pixOpenCompBrick(pixd, pixs, ...); * (7) The dimensions of the resulting image are determined by pixs. * (8) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixOpenCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *selh1, *selh2, *selv1, *selv2; PROCNAME("pixOpenCompBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); if (vsize > 1) selectComposableSels(vsize, L_VERT, &selv1, &selv2); if (vsize == 1) { pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); pixDilate(pixt, pixd, selh1); pixDilate(pixd, pixt, selh2); } else if (hsize == 1) { pixt = pixErode(NULL, pixs, selv1); pixd = pixErode(pixd, pixt, selv2); pixDilate(pixt, pixd, selv1); pixDilate(pixd, pixt, selv2); } else { /* do separably */ pixt = pixErode(NULL, pixs, selh1); pixd = pixErode(pixd, pixt, selh2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); pixDilate(pixt, pixd, selh1); pixDilate(pixd, pixt, selh2); pixDilate(pixt, pixd, selv1); pixDilate(pixd, pixt, selv2); } pixDestroy(&pixt); if (hsize > 1) { selDestroy(&selh1); selDestroy(&selh2); } if (vsize > 1) { selDestroy(&selv1); selDestroy(&selv2); } return pixd; } /*! * pixCloseCompBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do compositely for each dimension > 1. * (4) Do separably if both hsize and vsize are > 1. * (5) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (6) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseCompBrick(NULL, pixs, ...); * (b) pixCloseCompBrick(pixs, pixs, ...); * (c) pixCloseCompBrick(pixd, pixs, ...); * (7) The dimensions of the resulting image are determined by pixs. * (8) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixCloseCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt; SEL *selh1, *selh2, *selv1, *selv2; PROCNAME("pixCloseCompBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); if (hsize > 1) selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); if (vsize > 1) selectComposableSels(vsize, L_VERT, &selv1, &selv2); if (vsize == 1) { pixt = pixDilate(NULL, pixs, selh1); pixd = pixDilate(pixd, pixt, selh2); pixErode(pixt, pixd, selh1); pixErode(pixd, pixt, selh2); } else if (hsize == 1) { pixt = pixDilate(NULL, pixs, selv1); pixd = pixDilate(pixd, pixt, selv2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); } else { /* do separably */ pixt = pixDilate(NULL, pixs, selh1); pixd = pixDilate(pixd, pixt, selh2); pixDilate(pixt, pixd, selv1); pixDilate(pixd, pixt, selv2); pixErode(pixt, pixd, selh1); pixErode(pixd, pixt, selh2); pixErode(pixt, pixd, selv1); pixErode(pixd, pixt, selv2); } pixDestroy(&pixt); if (hsize > 1) { selDestroy(&selh1); selDestroy(&selh2); } if (vsize > 1) { selDestroy(&selv1); selDestroy(&selv2); } return pixd; } /*! * pixCloseSafeCompBrick() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * hsize (width of brick Sel) * vsize (height of brick Sel) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) The origin is at (x, y) = (hsize/2, vsize/2) * (3) Do compositely for each dimension > 1. * (4) Do separably if both hsize and vsize are > 1. * (5) Safe closing adds a border of 0 pixels, of sufficient size so * that all pixels in input image are processed within * 32-bit words in the expanded image. As a result, there is * no special processing for pixels near the boundary, and there * are no boundary effects. The border is removed at the end. * (6) There are three cases: * (a) pixd == null (result into new pixd) * (b) pixd == pixs (in-place; writes result back to pixs) * (c) pixd != pixs (puts result into existing pixd) * (7) For clarity, if the case is known, use these patterns: * (a) pixd = pixCloseSafeCompBrick(NULL, pixs, ...); * (b) pixCloseSafeCompBrick(pixs, pixs, ...); * (c) pixCloseSafeCompBrick(pixd, pixs, ...); * (8) The dimensions of the resulting image are determined by pixs. * (9) CAUTION: both hsize and vsize are being decomposed. * The decomposer chooses a product of sizes (call them * 'terms') for each that is close to the input size, * but not necessarily equal to it. It attempts to optimize: * (a) for consistency with the input values: the product * of terms is close to the input size * (b) for efficiency of the operation: the sum of the * terms is small; ideally about twice the square * root of the input size. * So, for example, if the input hsize = 37, which is * a prime number, the decomposer will break this into two * terms, 6 and 6, so that the net result is a dilation * with hsize = 36. */ PIX * pixCloseSafeCompBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize) { l_int32 maxtrans, bordsize; PIX *pixsb, *pixt, *pixdb; SEL *selh1, *selh2, *selv1, *selv2; PROCNAME("pixCloseSafeCompBrick"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize and vsize not >= 1", procName, pixd); if (hsize == 1 && vsize == 1) return pixCopy(pixd, pixs); /* Symmetric b.c. handles correctly without added pixels */ if (MORPH_BC == SYMMETRIC_MORPH_BC) return pixCloseCompBrick(pixd, pixs, hsize, vsize); maxtrans = L_MAX(hsize / 2, vsize / 2); bordsize = 32 * ((maxtrans + 31) / 32); /* full 32 bit words */ pixsb = pixAddBorder(pixs, bordsize, 0); if (hsize > 1) selectComposableSels(hsize, L_HORIZ, &selh1, &selh2); if (vsize > 1) selectComposableSels(vsize, L_VERT, &selv1, &selv2); if (vsize == 1) { pixt = pixDilate(NULL, pixsb, selh1); pixdb = pixDilate(NULL, pixt, selh2); pixErode(pixt, pixdb, selh1); pixErode(pixdb, pixt, selh2); } else if (hsize == 1) { pixt = pixDilate(NULL, pixsb, selv1); pixdb = pixDilate(NULL, pixt, selv2); pixErode(pixt, pixdb, selv1); pixErode(pixdb, pixt, selv2); } else { /* do separably */ pixt = pixDilate(NULL, pixsb, selh1); pixdb = pixDilate(NULL, pixt, selh2); pixDilate(pixt, pixdb, selv1); pixDilate(pixdb, pixt, selv2); pixErode(pixt, pixdb, selh1); pixErode(pixdb, pixt, selh2); pixErode(pixt, pixdb, selv1); pixErode(pixdb, pixt, selv2); } pixDestroy(&pixt); pixt = pixRemoveBorder(pixdb, bordsize); pixDestroy(&pixsb); pixDestroy(&pixdb); if (!pixd) { pixd = pixt; } else { pixCopy(pixd, pixt); pixDestroy(&pixt); } if (hsize > 1) { selDestroy(&selh1); selDestroy(&selh2); } if (vsize > 1) { selDestroy(&selv1); selDestroy(&selv2); } return pixd; } /*-----------------------------------------------------------------* * Functions associated with boundary conditions * *-----------------------------------------------------------------*/ /*! * resetMorphBoundaryCondition() * * Input: bc (SYMMETRIC_MORPH_BC, ASYMMETRIC_MORPH_BC) * Return: void */ void resetMorphBoundaryCondition(l_int32 bc) { PROCNAME("resetMorphBoundaryCondition"); if (bc != SYMMETRIC_MORPH_BC && bc != ASYMMETRIC_MORPH_BC) { L_WARNING("invalid bc; using asymmetric\n", procName); bc = ASYMMETRIC_MORPH_BC; } MORPH_BC = bc; return; } /*! * getMorphBorderPixelColor() * * Input: type (L_MORPH_DILATE, L_MORPH_ERODE) * depth (of pix) * Return: color of border pixels for this operation */ l_uint32 getMorphBorderPixelColor(l_int32 type, l_int32 depth) { PROCNAME("getMorphBorderPixelColor"); if (type != L_MORPH_DILATE && type != L_MORPH_ERODE) return ERROR_INT("invalid type", procName, 0); if (depth != 1 && depth != 2 && depth != 4 && depth != 8 && depth != 16 && depth != 32) return ERROR_INT("invalid depth", procName, 0); if (MORPH_BC == ASYMMETRIC_MORPH_BC || type == L_MORPH_DILATE) return 0; /* Symmetric & erosion */ if (depth < 32) return ((1 << depth) - 1); else /* depth == 32 */ return 0xffffff00; } /*-----------------------------------------------------------------* * Static helpers for arg processing * *-----------------------------------------------------------------*/ /*! * processMorphArgs1() * * Input: pixd (; this can be null, equal to pixs, * or different from pixs) * pixs (1 bpp) * sel * &pixt () * Return: pixd, or null on error. * * Notes: * (1) This is used for generic erosion, dilation and HMT. */ static PIX * processMorphArgs1(PIX *pixd, PIX *pixs, SEL *sel, PIX **ppixt) { l_int32 sx, sy; PROCNAME("processMorphArgs1"); if (!ppixt) return (PIX *)ERROR_PTR("&pixt not defined", procName, pixd); *ppixt = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (!sel) return (PIX *)ERROR_PTR("sel not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); selGetParameters(sel, &sx, &sy, NULL, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("sel of size 0", procName, pixd); /* We require pixd to exist and to be the same size as pixs. * Further, pixt must be a copy (or clone) of pixs. */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); *ppixt = pixClone(pixs); } else { pixResizeImageData(pixd, pixs); if (pixd == pixs) { /* in-place; must make a copy of pixs */ if ((*ppixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); } else { *ppixt = pixClone(pixs); } } return pixd; } /*! * processMorphArgs2() * * This is used for generic openings and closings. */ static PIX * processMorphArgs2(PIX *pixd, PIX *pixs, SEL *sel) { l_int32 sx, sy; PROCNAME("processMorphArgs2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (!sel) return (PIX *)ERROR_PTR("sel not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, pixd); selGetParameters(sel, &sx, &sy, NULL, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("sel of size 0", procName, pixd); if (!pixd) return pixCreateTemplate(pixs); pixResizeImageData(pixd, pixs); return pixd; } leptonica-1.70/src/array.h0000644000175000017500000001427012270566054013576 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_ARRAY_H #define LEPTONICA_ARRAY_H /* * Contains the following structs: * struct Numa * struct Numaa * struct Numa2d * struct NumaHash * struct L_Dna * struct L_Dnaa * struct Sarray * struct L_Bytea * * Contains definitions for: * Numa interpolation flags * Numa and FPix border flags * Numa data type conversion to string */ /*------------------------------------------------------------------------* * Array Structs * *------------------------------------------------------------------------*/ #define NUMA_VERSION_NUMBER 1 /* Number array: an array of floats */ struct Numa { l_int32 nalloc; /* size of allocated number array */ l_int32 n; /* number of numbers saved */ l_int32 refcount; /* reference count (1 if no clones) */ l_float32 startx; /* x value assigned to array[0] */ l_float32 delx; /* change in x value as i --> i + 1 */ l_float32 *array; /* number array */ }; typedef struct Numa NUMA; /* Array of number arrays */ struct Numaa { l_int32 nalloc; /* size of allocated ptr array */ l_int32 n; /* number of Numa saved */ struct Numa **numa; /* array of Numa */ }; typedef struct Numaa NUMAA; /* Sparse 2-dimensional array of number arrays */ struct Numa2d { l_int32 nrows; /* number of rows allocated for ptr array */ l_int32 ncols; /* number of cols allocated for ptr array */ l_int32 initsize; /* initial size of each numa that is made */ struct Numa ***numa; /* 2D array of Numa */ }; typedef struct Numa2d NUMA2D; /* A hash table of Numas */ struct NumaHash { l_int32 nbuckets; l_int32 initsize; /* initial size of each numa that is made */ struct Numa **numa; }; typedef struct NumaHash NUMAHASH; #define DNA_VERSION_NUMBER 1 /* Double number array: an array of doubles */ struct L_Dna { l_int32 nalloc; /* size of allocated number array */ l_int32 n; /* number of numbers saved */ l_int32 refcount; /* reference count (1 if no clones) */ l_float64 startx; /* x value assigned to array[0] */ l_float64 delx; /* change in x value as i --> i + 1 */ l_float64 *array; /* number array */ }; typedef struct L_Dna L_DNA; /* Array of double number arrays */ struct L_Dnaa { l_int32 nalloc; /* size of allocated ptr array */ l_int32 n; /* number of L_Dna saved */ struct L_Dna **dna; /* array of L_Dna */ }; typedef struct L_Dnaa L_DNAA; #define SARRAY_VERSION_NUMBER 1 /* String array: an array of C strings */ struct Sarray { l_int32 nalloc; /* size of allocated ptr array */ l_int32 n; /* number of strings allocated */ l_int32 refcount; /* reference count (1 if no clones) */ char **array; /* string array */ }; typedef struct Sarray SARRAY; /* Byte array (analogous to C++ "string") */ struct L_Bytea { size_t nalloc; /* number of bytes allocated in data array */ size_t size; /* number of bytes presently used */ l_int32 refcount; /* reference count (1 if no clones) */ l_uint8 *data; /* data array */ }; typedef struct L_Bytea L_BYTEA; /*------------------------------------------------------------------------* * Array flags * *------------------------------------------------------------------------*/ /* Flags for interpolation in Numa */ enum { L_LINEAR_INTERP = 1, /* linear */ L_QUADRATIC_INTERP = 2 /* quadratic */ }; /* Flags for added borders in Numa and Fpix */ enum { L_CONTINUED_BORDER = 1, /* extended with same value */ L_SLOPE_BORDER = 2, /* extended with constant normal derivative */ L_MIRRORED_BORDER = 3 /* mirrored */ }; /* Flags for data type converted from Numa */ enum { L_INTEGER_VALUE = 1, /* convert to integer */ L_FLOAT_VALUE = 2 /* convert to float */ }; #endif /* LEPTONICA_ARRAY_H */ leptonica-1.70/src/dewarp4.c0000644000175000017500000010641412244233034014011 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarp4.c * * Single page dewarper * * Reference model (book-level, dewarpa) operations and debugging output * * Top-level single page dewarper * l_int32 dewarpSinglePage() * * Operations on dewarpa * l_int32 dewarpaListPages() * l_int32 dewarpaSetValidModels() * l_int32 dewarpaInsertRefModels() * l_int32 dewarpaStripRefModels() * l_int32 dewarpaRestoreModels() * * Dewarp debugging output * l_int32 dewarpaInfo() * l_int32 dewarpaModelStats() * static l_int32 dewarpaTestForValidModel() * l_int32 dewarpaShowArrays() * l_int32 dewarpDebug() * l_int32 dewarpShowResults() */ #include #include "allheaders.h" static l_int32 dewarpaTestForValidModel(L_DEWARPA *dewa, L_DEWARP *dew, l_int32 notests); /* Special parameter values */ static const l_int32 GRAYIN_VALUE = 200; /*----------------------------------------------------------------------* * Top-level single page dewarper * *----------------------------------------------------------------------*/ /*! * dewarpSinglePage() * * Input: pixs (with text, any depth) * thresh (for binarization) * adaptive (1 for adaptive thresholding; 0 for global threshold) * both (1 for horizontal and vertical; 0 for vertical only) * &pixd ( dewarped result) * &dewa ( dewa with single page; NULL to skip) * debug (1 for debugging output, 0 otherwise) * Return: 0 if OK, 1 on error (list of page numbers), or null on error * * Notes: * (1) Dewarps pixs and returns the result in &pixd. * (2) This uses default values for all model parameters. * (3) If pixs is 1 bpp, the parameters @adaptive and @thresh are ignored. * (4) If it can't build a model, returns a copy of pixs in &pixd. */ l_int32 dewarpSinglePage(PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 both, PIX **ppixd, L_DEWARPA **pdewa, l_int32 debug) { const char *debugfile; l_int32 vsuccess, ret; L_DEWARP *dew; L_DEWARPA *dewa; PIX *pix1, *pix2, *pixb; PROCNAME("dewarpSinglePage"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (pdewa) *pdewa = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); dewa = dewarpaCreate(1, 0, 1, 0, -1); dewarpaUseBothArrays(dewa, both); /* Generate a binary image, if necessary */ if (pixGetDepth(pixs) > 1) { pix1 = pixConvertTo8(pixs, 0); if (adaptive) pix2 = pixBackgroundNormSimple(pix1, NULL, NULL); else pix2 = pixClone(pix1); pixb = pixThresholdToBinary(pix2, thresh); pixDestroy(&pix1); pixDestroy(&pix2); } else { pixb = pixClone(pixs); } /* Generate the page model */ dew = dewarpCreate(pixb, 0); dewarpaInsertDewarp(dewa, dew); debugfile = (debug) ? "/tmp/dewarp_model.pdf" : NULL; dewarpBuildPageModel(dew, debugfile); dewarpaModelStatus(dewa, 0, &vsuccess, NULL); if (vsuccess == 0) { L_ERROR("failure to build model\n", procName); pixDestroy(&pixb); dewarpaDestroy(&dewa); *ppixd = pixCopy(NULL, pixs); return 0; } /* Apply the page model */ debugfile = (debug) ? "/tmp/dewarp_apply.pdf" : NULL; ret = dewarpaApplyDisparity(dewa, 0, pixs, 255, 0, 0, ppixd, debugfile); if (ret) L_ERROR("invalid model; failure to apply disparity\n", procName); if (pdewa) *pdewa = dewa; else dewarpaDestroy(&dewa); pixDestroy(&pixb); return 0; } /*----------------------------------------------------------------------* * Operations on dewarpa * *----------------------------------------------------------------------*/ /*! * dewarpaListPages() * * Input: dewa (populated with dewarp structs for pages) * Return: 0 if OK, 1 on error (list of page numbers), or null on error * * Notes: * (1) This generates two numas, stored in the dewarpa, that give: * (a) the page number for each dew that has a page model. * (b) the page number for each dew that has either a page * model or a reference model. * It can be called at any time. * (2) It is called by the dewarpa serializer before writing. */ l_int32 dewarpaListPages(L_DEWARPA *dewa) { l_int32 i; L_DEWARP *dew; NUMA *namodels, *napages; PROCNAME("dewarpaListPages"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); numaDestroy(&dewa->namodels); numaDestroy(&dewa->napages); namodels = numaCreate(dewa->maxpage + 1); napages = numaCreate(dewa->maxpage + 1); dewa->namodels = namodels; dewa->napages = napages; for (i = 0; i <= dewa->maxpage; i++) { if ((dew = dewarpaGetDewarp(dewa, i)) != NULL) { if (dew->hasref == 0) numaAddNumber(namodels, dew->pageno); numaAddNumber(napages, dew->pageno); } } return 0; } /*! * dewarpaSetValidModels() * * Input: dewa * notests * debug (1 to output information on invalid page models) * Return: 0 if OK, 1 on error * * Notes: * (1) A valid model must meet the rendering requirements, which * include whether or not a vertical disparity model exists * and conditions on curvatures for vertical and horizontal * disparity models. * (2) If @notests == 1, this ignores the curvature constraints * and assumes that all successfully built models are valid. * (3) This function does not need to be called by the application. * It is called by dewarpaInsertRefModels(), which * will destroy all invalid dewarps. Consequently, to inspect * an invalid dewarp model, it must be done before calling * dewarpaInsertRefModels(). */ l_int32 dewarpaSetValidModels(L_DEWARPA *dewa, l_int32 notests, l_int32 debug) { l_int32 i, n, maxcurv, diffcurv, diffedge; L_DEWARP *dew; PROCNAME("dewarpaSetValidModels"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); n = dewa->maxpage + 1; for (i = 0; i < n; i++) { if ((dew = dewarpaGetDewarp(dewa, i)) == NULL) continue; if (debug) { if (dew->hasref == 1) { L_INFO("page %d: has only a ref model\n", procName, i); } else if (dew->vsuccess == 0) { L_INFO("page %d: no model successfully built\n", procName, i); } else if (!notests) { maxcurv = L_MAX(L_ABS(dew->mincurv), L_ABS(dew->maxcurv)); diffcurv = dew->maxcurv - dew->mincurv; if (dewa->useboth && !dew->hsuccess) L_INFO("page %d: useboth, but no horiz disparity\n", procName, i); if (maxcurv > dewa->max_linecurv) L_INFO("page %d: max curvature %d > max_linecurv\n", procName, i, diffcurv); if (diffcurv < dewa->min_diff_linecurv) L_INFO("page %d: diff curv %d < min_diff_linecurv\n", procName, i, diffcurv); if (diffcurv > dewa->max_diff_linecurv) L_INFO("page %d: abs diff curv %d > max_diff_linecurv\n", procName, i, diffcurv); if (dew->hsuccess) { diffedge = L_ABS(dew->leftcurv - dew->rightcurv); if (L_ABS(dew->leftcurv) > dewa->max_edgecurv) L_INFO("page %d: left curvature %d > max_edgecurv\n", procName, i, dew->leftcurv); if (L_ABS(dew->rightcurv) > dewa->max_edgecurv) L_INFO("page %d: right curvature %d > max_edgecurv\n", procName, i, dew->rightcurv); if (diffedge > dewa->max_diff_edgecurv) L_INFO("page %d: abs diff left-right curv %d > " "max_diff_edgecurv\n", procName, i, diffedge); } } } dewarpaTestForValidModel(dewa, dew, notests); } return 0; } /*! * dewarpaInsertRefModels() * * Input: dewa * notests (if 1, ignore curvature constraints on model) * debug (1 to output information on invalid page models) * Return: 0 if OK, 1 on error * * Notes: * (1) This destroys all dewarp models that are invalid, and then * inserts reference models where possible. * (2) If @notests == 1, this ignores the curvature constraints * and assumes that all successfully built models are valid. * (3) If useboth == 0, it uses the closest valid model within the * distance and parity constraints. If useboth == 1, it tries * to use the closest allowed hvalid model; if it doesn't find * an hvalid model, it uses the closest valid model. * (4) For all pages without a model, this clears out any existing * invalid and reference dewarps, finds the nearest valid model * with the same parity, and inserts an empty dewarp with the * reference page. * (5) Then if it is requested to use both vertical and horizontal * disparity arrays (useboth == 1), it tries to replace any * hvalid == 0 model or reference with an hvalid == 1 reference. * (6) The distance constraint is that any reference model must * be within maxdist. Note that with the parity constraint, * no reference models will be used if maxdist < 2. * (7) This function must be called, even if reference models will * not be used. It should be called after building models on all * available pages, and after setting the rendering parameters. * (8) If the dewa has been serialized, this function is called by * dewarpaRead() when it is read back. It is also called * any time the rendering parameters are changed. * (9) Note: if this has been called with useboth == 1, and useboth * is reset to 0, you should first call dewarpRestoreModels() * to bring real models from the cache back to the primary array. */ l_int32 dewarpaInsertRefModels(L_DEWARPA *dewa, l_int32 notests, l_int32 debug) { l_int32 i, j, n, val, min, distdown, distup; L_DEWARP *dew; NUMA *na, *nah; PROCNAME("dewarpaInsertRefModels"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if (dewa->maxdist < 2) L_INFO("maxdist < 2; no ref models can be used\n", procName); /* Make an indicator numa for pages with valid models. */ dewarpaSetValidModels(dewa, notests, debug); n = dewa->maxpage + 1; na = numaMakeConstant(0, n); for (i = 0; i < n; i++) { dew = dewarpaGetDewarp(dewa, i); if (dew && dew->vvalid) numaReplaceNumber(na, i, 1); } /* Remove all existing ref models and restore models from cache */ dewarpaRestoreModels(dewa); /* Move invalid models to the cache, and insert reference dewarps * for pages that need to borrow a model. * First, try to find a valid model for each page. */ for (i = 0; i < n; i++) { numaGetIValue(na, i, &val); if (val == 1) continue; /* already has a valid model */ if ((dew = dewa->dewarp[i]) != NULL) { /* exists but is not valid; */ dewa->dewarpcache[i] = dew; /* move it to the cache */ dewa->dewarp[i] = NULL; } if (dewa->maxdist < 2) continue; /* can't use a ref model */ /* Look back for nearest model */ distdown = distup = dewa->maxdist + 1; for (j = i - 2; j >= 0 && distdown > dewa->maxdist; j -= 2) { numaGetIValue(na, j, &val); if (val == 1) distdown = i - j; } /* Look ahead for nearest model */ for (j = i + 2; j < n && distup > dewa->maxdist; j += 2) { numaGetIValue(na, j, &val); if (val == 1) distup = j - i; } min = L_MIN(distdown, distup); if (min > dewa->maxdist) continue; /* no valid model in range */ if (distdown <= distup) dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i - distdown)); else dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i + distup)); } numaDestroy(&na); /* If a valid model will do, we're finished. */ if (dewa->useboth == 0) { dewa->modelsready = 1; /* validated */ return 0; } /* The request is useboth == 1. Now try to find an hvalid model */ nah = numaMakeConstant(0, n); for (i = 0; i < n; i++) { dew = dewarpaGetDewarp(dewa, i); if (dew && dew->hvalid) numaReplaceNumber(nah, i, 1); } for (i = 0; i < n; i++) { numaGetIValue(nah, i, &val); if (val == 1) continue; /* already has a hvalid model */ if (dewa->maxdist < 2) continue; /* can't use a ref model */ distdown = distup = 100000; for (j = i - 2; j >= 0; j -= 2) { /* look back for nearest model */ numaGetIValue(nah, j, &val); if (val == 1) { distdown = i - j; break; } } for (j = i + 2; j < n; j += 2) { /* look ahead for nearest model */ numaGetIValue(nah, j, &val); if (val == 1) { distup = j - i; break; } } min = L_MIN(distdown, distup); if (min > dewa->maxdist) continue; /* no hvalid model within range */ /* We can replace the existing valid model with an hvalid model. * If it's not a reference, save it in the cache. */ if ((dew = dewarpaGetDewarp(dewa, i)) == NULL) { L_ERROR("dew is null for page %d!\n", procName, i); } else { if (dew->hasref == 0) { /* not a ref model */ dewa->dewarpcache[i] = dew; /* move it to the cache */ dewa->dewarp[i] = NULL; /* must null the ptr */ } } if (distdown <= distup) /* insert the hvalid ref model */ dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i - distdown)); else dewarpaInsertDewarp(dewa, dewarpCreateRef(i, i + distup)); } numaDestroy(&nah); dewa->modelsready = 1; /* validated */ return 0; } /*! * dewarpaStripRefModels() * * Input: dewa (populated with dewarp structs for pages) * Return: 0 if OK, 1 on error * * Notes: * (1) This examines each dew in a dewarpa, and removes * all that don't have their own page model (i.e., all * that have "references" to nearby pages with valid models). * These references were generated by dewarpaInsertRefModels(dewa). */ l_int32 dewarpaStripRefModels(L_DEWARPA *dewa) { l_int32 i; L_DEWARP *dew; PROCNAME("dewarpaStripRefModels"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); for (i = 0; i <= dewa->maxpage; i++) { if ((dew = dewarpaGetDewarp(dewa, i)) != NULL) { if (dew->hasref) dewarpDestroy(&dewa->dewarp[i]); } } dewa->modelsready = 0; /* Regenerate the page lists */ dewarpaListPages(dewa); return 0; } /*! * dewarpaRestoreModels() * * Input: dewa (populated with dewarp structs for pages) * Return: 0 if OK, 1 on error * * Notes: * (1) This puts all real models (and only real models) in the * primary dewarp array. First remove all dewarps that are * only references to other page models. Then move all models * that had been cached back into the primary dewarp array. * (2) After this is done, we still need to recompute and insert * the reference models before dewa->modelsready is true. */ l_int32 dewarpaRestoreModels(L_DEWARPA *dewa) { l_int32 i; L_DEWARP *dew; PROCNAME("dewarpaRestoreModels"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); /* Strip out ref models. Then only real models will be in the * primary dewarp array. */ dewarpaStripRefModels(dewa); /* The cache holds only real models, which are not necessarily valid. */ for (i = 0; i <= dewa->maxpage; i++) { if ((dew = dewa->dewarpcache[i]) != NULL) { if (dewa->dewarp[i]) { L_ERROR("dew in both cache and main array!: page %d\n", procName, i); } else { dewa->dewarp[i] = dew; dewa->dewarpcache[i] = NULL; } } } dewa->modelsready = 0; /* new ref models not yet inserted */ /* Regenerate the page lists */ dewarpaListPages(dewa); return 0; } /*----------------------------------------------------------------------* * Dewarp debugging output * *----------------------------------------------------------------------*/ /*! * dewarpaInfo() * * Input: fp * dewa * Return: 0 if OK, 1 on error */ l_int32 dewarpaInfo(FILE *fp, L_DEWARPA *dewa) { l_int32 i, n, pageno, nnone, nvsuccess, nvvalid, nhsuccess, nhvalid, nref; L_DEWARP *dew; PROCNAME("dewarpaInfo"); if (!fp) return ERROR_INT("dewa not defined", procName, 1); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); fprintf(fp, "\nDewarpaInfo: %p\n", dewa); fprintf(fp, "nalloc = %d, maxpage = %d\n", dewa->nalloc, dewa->maxpage); fprintf(fp, "sampling = %d, redfactor = %d, minlines = %d\n", dewa->sampling, dewa->redfactor, dewa->minlines); fprintf(fp, "maxdist = %d, useboth = %d\n", dewa->maxdist, dewa->useboth); dewarpaModelStats(dewa, &nnone, &nvsuccess, &nvvalid, &nhsuccess, &nhvalid, &nref); n = numaGetCount(dewa->napages); fprintf(stderr, "Total number of pages with a dew = %d\n", n); fprintf(stderr, "Number of pages without any models = %d\n", nnone); fprintf(stderr, "Number of pages with a vert model = %d\n", nvsuccess); fprintf(stderr, "Number of pages with a valid vert model = %d\n", nvvalid); fprintf(stderr, "Number of pages with both models = %d\n", nhsuccess); fprintf(stderr, "Number of pages with both models valid = %d\n", nhvalid); fprintf(stderr, "Number of pages with a ref model = %d\n", nref); for (i = 0; i < n; i++) { numaGetIValue(dewa->napages, i, &pageno); if ((dew = dewarpaGetDewarp(dewa, pageno)) == NULL) continue; fprintf(stderr, "Page: %d\n", dew->pageno); fprintf(stderr, " hasref = %d, refpage = %d\n", dew->hasref, dew->refpage); fprintf(stderr, " nlines = %d\n", dew->nlines); fprintf(stderr, " w = %d, h = %d, nx = %d, ny = %d\n", dew->w, dew->h, dew->nx, dew->ny); } return 0; } /*! * dewarpaModelStats() * * Input: dewa * &nnone ( number without any model) * &nvsuccess ( number with a vert model) * &nvvalid ( number with a valid vert model) * &nhsuccess ( number with both models) * &nhvalid ( number with both models valid) * &nref ( number with a reference model) * Return: 0 if OK, 1 on error * * Notes: * (1) A page without a model has no dew. It most likely failed to * generate a vertical model, and has not been assigned a ref * model from a neighboring page with a valid vertical model. * (2) A page has vsuccess == 1 if there is at least a model of the * vertical disparity. The model may be invalid, in which case * dewarpaInsertRefModels() will stash it in the cache and * attempt to replace it by a valid ref model. * (3) A vvvalid model is a vertical disparity model whose parameters * satisfy the constraints given in dewarpaSetValidModels(). * (4) A page has hsuccess == 1 if both the vertical and horizontal * disparity arrays have been constructed. * (5) An hvalid model has vertical and horizontal disparity * models whose parameters satisfy the constraints given * in dewarpaSetValidModels(). * (6) A page has a ref model if it failed to generate a valid * model but was assigned a vvalid or hvalid model on another * page (within maxdist) by dewarpaInsertRefModel(). * (7) This calls dewarpaTestForValidModel(); it ignores the vvalid * and hvalid fields. */ l_int32 dewarpaModelStats(L_DEWARPA *dewa, l_int32 *pnnone, l_int32 *pnvsuccess, l_int32 *pnvvalid, l_int32 *pnhsuccess, l_int32 *pnhvalid, l_int32 *pnref) { l_int32 i, n, pageno, nnone, nvsuccess, nvvalid, nhsuccess, nhvalid, nref; L_DEWARP *dew; PROCNAME("dewarpaModelStats"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); dewarpaListPages(dewa); n = numaGetCount(dewa->napages); nnone = nref = nvsuccess = nvvalid = nhsuccess = nhvalid = 0; for (i = 0; i < n; i++) { numaGetIValue(dewa->napages, i, &pageno); dew = dewarpaGetDewarp(dewa, pageno); if (!dew) { nnone++; continue; } if (dew->hasref == 1) nref++; if (dew->vsuccess == 1) nvsuccess++; if (dew->hsuccess == 1) nhsuccess++; dewarpaTestForValidModel(dewa, dew, 0); if (dew->vvalid == 1) nvvalid++; if (dew->hvalid == 1) nhvalid++; } if (pnnone) *pnnone = nnone; if (pnref) *pnref = nref; if (pnvsuccess) *pnvsuccess = nvsuccess; if (pnvvalid) *pnvvalid = nvvalid; if (pnhsuccess) *pnhsuccess = nhsuccess; if (pnhvalid) *pnhvalid = nhvalid; return 0; } /*! * dewarpaTestForValidModel() * * Input: dewa * dew * notests * Return: 0 if OK, 1 on error * * Notes: * (1) Computes validity of vertical (vvalid) model and both * vertical and horizontal (hvalid) models. * (2) If @notests == 1, this ignores the curvature constraints * and assumes that all successfully built models are valid. * (3) This is just about the models, not the rendering process, * so the value of useboth is not considered here. */ static l_int32 dewarpaTestForValidModel(L_DEWARPA *dewa, L_DEWARP *dew, l_int32 notests) { l_int32 maxcurv, diffcurv, diffedge; PROCNAME("dewarpaTestForValidModel"); if (!dewa || !dew) return ERROR_INT("dewa and dew not both defined", procName, 1); if (notests) { dew->vvalid = dew->vsuccess; dew->hvalid = dew->hsuccess; return 0; } /* No actual model was built */ if (dew->vsuccess == 0) return 0; /* Was previously found not to have a valid model */ if (dew->hasref == 1) return 0; /* vsuccess == 1; a vertical (line) model exists. * First test that the vertical curvatures are within allowed * bounds. Note that all curvatures are signed.*/ maxcurv = L_MAX(L_ABS(dew->mincurv), L_ABS(dew->maxcurv)); diffcurv = dew->maxcurv - dew->mincurv; if (maxcurv <= dewa->max_linecurv && diffcurv >= dewa->min_diff_linecurv && diffcurv <= dewa->max_diff_linecurv) { dew->vvalid = 1; } else { L_INFO("invalid vert model for page %d\n", procName, dew->pageno); } /* If a horizontal (edge) model exists, test for validity. */ if (dew->hsuccess) { diffedge = L_ABS(dew->leftcurv - dew->rightcurv); if (L_ABS(dew->leftcurv) <= dewa->max_edgecurv && L_ABS(dew->rightcurv) <= dewa->max_edgecurv && diffedge <= dewa->max_diff_edgecurv) { dew->hvalid = 1; } else { L_INFO("invalid horiz model for page %d\n", procName, dew->pageno); } } return 0; } /*! * dewarpaShowArrays() * * Input: dewa * scalefact (on contour images; typ. 0.5) * first (first page model to render) * last (last page model to render; use 0 to go to end) * Return: 0 if OK, 1 on error * * Notes: * (1) Generates a pdf of contour plots of the disparity arrays. * (2) This only shows actual models; not ref models */ l_int32 dewarpaShowArrays(L_DEWARPA *dewa, l_float32 scalefact, l_int32 first, l_int32 last) { char buf[256]; char *pathname; l_int32 i, svd, shd; L_BMF *bmf; L_DEWARP *dew; PIX *pixv, *pixvs, *pixh, *pixhs, *pixt, *pixd; PIXA *pixa; PROCNAME("dewarpaShowArrays"); if (!dewa) return ERROR_INT("dew not defined", procName, 1); if (first < 0 || first > dewa->maxpage) return ERROR_INT("first out of bounds", procName, 1); if (last <= 0 || last > dewa->maxpage) last = dewa->maxpage; if (last < first) return ERROR_INT("last < first", procName, 1); lept_rmdir("dewarparrays"); lept_mkdir("dewarparrays"); bmf = bmfCreate("./fonts", 8); fprintf(stderr, "Generating contour plots\n"); for (i = first; i <= last; i++) { if (i && ((i % 10) == 0)) fprintf(stderr, " .. %d", i); dew = dewarpaGetDewarp(dewa, i); if (!dew) continue; if (dew->hasref == 1) continue; svd = shd = 0; if (dew->sampvdispar) svd = 1; if (dew->samphdispar) shd = 1; if (!svd) { L_ERROR("sampvdispar not made for page %d!\n", procName, i); continue; } /* Generate contour plots at reduced resolution */ dewarpPopulateFullRes(dew, NULL, 0, 0); pixv = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); pixvs = pixScaleBySampling(pixv, scalefact, scalefact); pixDestroy(&pixv); if (shd) { pixh = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); pixhs = pixScaleBySampling(pixh, scalefact, scalefact); pixDestroy(&pixh); } dewarpMinimize(dew); /* Save side-by-side */ pixa = pixaCreate(2); pixaAddPix(pixa, pixvs, L_INSERT); if (shd) pixaAddPix(pixa, pixhs, L_INSERT); pixt = pixaDisplayTiledInRows(pixa, 32, 1500, 1.0, 0, 30, 2); snprintf(buf, sizeof(buf), "Page %d", i); pixd = pixAddSingleTextblock(pixt, bmf, buf, 0x0000ff00, L_ADD_BELOW, NULL); snprintf(buf, sizeof(buf), "arrays_%04d.png", i); pathname = genPathname("/tmp/dewarparrays", buf); pixWrite(pathname, pixd, IFF_PNG); pixaDestroy(&pixa); pixDestroy(&pixt); pixDestroy(&pixd); FREE(pathname); } bmfDestroy(&bmf); fprintf(stderr, "\n"); fprintf(stderr, "Generating pdf of contour plots\n"); convertFilesToPdf("/tmp/dewarparrays", NULL, 90, 1.0, L_FLATE_ENCODE, 0, "Disparity arrays", "/tmp/disparity_arrays.pdf"); fprintf(stderr, "Output written to: /tmp/disparity_arrays.pdf\n"); return 0; } /*! * dewarpDebug() * * Input: dew * subdir (a subdirectory of /tmp; e.g., "dew1") * index (to help label output images; e.g., the page number) * Return: 0 if OK, 1 on error * * Notes: * (1) Prints dewarp fields and generates disparity array contour images. * The contour images are written to file: * /tmp/[subdir]/pixv_[index].png */ l_int32 dewarpDebug(L_DEWARP *dew, const char *subdir, l_int32 index) { char outdir[256], fname[64]; char *pathname; l_int32 svd, shd; PIX *pixv, *pixh; PROCNAME("dewarpDebug"); if (!dew) return ERROR_INT("dew not defined", procName, 1); if (!subdir) return ERROR_INT("subdir not defined", procName, 1); fprintf(stderr, "pageno = %d, hasref = %d, refpage = %d\n", dew->pageno, dew->hasref, dew->refpage); fprintf(stderr, "sampling = %d, redfactor = %d, minlines = %d\n", dew->sampling, dew->redfactor, dew->minlines); svd = shd = 0; if (!dew->hasref) { if (dew->sampvdispar) svd = 1; if (dew->samphdispar) shd = 1; fprintf(stderr, "sampv = %d, samph = %d\n", svd, shd); fprintf(stderr, "w = %d, h = %d\n", dew->w, dew->h); fprintf(stderr, "nx = %d, ny = %d\n", dew->nx, dew->ny); fprintf(stderr, "nlines = %d\n", dew->nlines); if (svd) { fprintf(stderr, "(min,max,abs-diff) line curvature = (%d,%d,%d)\n", dew->mincurv, dew->maxcurv, dew->maxcurv - dew->mincurv); } if (shd) { fprintf(stderr, "(left,right,abs-diff) edge curvature = " "(%d,%d,%d)\n", dew->leftcurv, dew->rightcurv, L_ABS(dew->leftcurv - dew->rightcurv)); } } if (!svd && !shd) { fprintf(stderr, "No disparity arrays\n"); return 0; } dewarpPopulateFullRes(dew, NULL, 0, 0); lept_mkdir(subdir); snprintf(outdir, sizeof(outdir), "/tmp/%s", subdir); if (svd) { pixv = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); snprintf(fname, sizeof(fname), "pixv_%d.png", index); pathname = genPathname(outdir, fname); pixWrite(pathname, pixv, IFF_PNG); pixDestroy(&pixv); FREE(pathname); } if (shd) { pixh = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); snprintf(fname, sizeof(fname), "pixh_%d.png", index); pathname = genPathname(outdir, fname); pixWrite(pathname, pixh, IFF_PNG); pixDestroy(&pixh); FREE(pathname); } return 0; } /*! * dewarpShowResults() * * Input: dewa * sarray (of indexed input images) * boxa (crop boxes for input images; can be null) * firstpage, lastpage * pdfout (filename) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a pdf of image pairs (before, after) for * the designated set of input pages. * (2) If the boxa exists, its elements are aligned with numbers * in the filenames in @sa. It is used to crop the input images. * It is assumed that the dewa was generated from the cropped * images. No undercropping is applied before rendering. */ l_int32 dewarpShowResults(L_DEWARPA *dewa, SARRAY *sa, BOXA *boxa, l_int32 firstpage, l_int32 lastpage, const char *pdfout) { char bufstr[256]; l_int32 i, modelpage; L_BMF *bmf; BOX *box; L_DEWARP *dew; PIX *pixs, *pixc, *pixd, *pixt1, *pixt2; PIXA *pixa; PROCNAME("dewarpShowResults"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pdfout) return ERROR_INT("pdfout not defined", procName, 1); if (firstpage > lastpage) return ERROR_INT("invalid first/last page numbers", procName, 1); fprintf(stderr, "Dewarping and generating s/by/s view\n"); bmf = bmfCreate("./fonts", 6); lept_rmdir("dewarp_pdfout"); lept_mkdir("dewarp_pdfout"); for (i = firstpage; i <= lastpage; i++) { if (i && (i % 10 == 0)) fprintf(stderr, ".. %d ", i); pixs = pixReadIndexed(sa, i); if (boxa) { box = boxaGetBox(boxa, i, L_CLONE); pixc = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); } else pixc = pixClone(pixs); dew = dewarpaGetDewarp(dewa, i); pixd = NULL; if (dew) { dewarpaApplyDisparity(dewa, dew->pageno, pixc, GRAYIN_VALUE, 0, 0, &pixd, NULL); dewarpMinimize(dew); } pixa = pixaCreate(2); pixaAddPix(pixa, pixc, L_INSERT); if (pixd) pixaAddPix(pixa, pixd, L_INSERT); pixt1 = pixaDisplayTiledAndScaled(pixa, 32, 500, 2, 0, 35, 2); if (dew) { modelpage = (dew->hasref) ? dew->refpage : dew->pageno; snprintf(bufstr, sizeof(bufstr), "Page %d; using %d\n", i, modelpage); } else snprintf(bufstr, sizeof(bufstr), "Page %d; no dewarp\n", i); pixt2 = pixAddSingleTextblock(pixt1, bmf, bufstr, 0x0000ff00, L_ADD_BELOW, 0); snprintf(bufstr, sizeof(bufstr), "/tmp/dewarp_pdfout/%05d", i); pixWrite(bufstr, pixt2, IFF_JFIF_JPEG); pixaDestroy(&pixa); pixDestroy(&pixs); pixDestroy(&pixt1); pixDestroy(&pixt2); } fprintf(stderr, "\n"); fprintf(stderr, "Generating pdf of result\n"); convertFilesToPdf("/tmp/dewarp_pdfout", NULL, 100, 1.0, L_JPEG_ENCODE, 0, "Dewarp sequence", pdfout); fprintf(stderr, "Output written to: %s\n", pdfout); bmfDestroy(&bmf); return 0; } leptonica-1.70/src/watershed.h0000644000175000017500000000661712270566076014460 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_WATERSHED_H #define LEPTONICA_WATERSHED_H /* * watershed.h * * Simple data structure to hold watershed data. * All data here is owned by the L_WShed and must be freed. */ struct L_WShed { struct Pix *pixs; /* clone of input 8 bpp pixs */ struct Pix *pixm; /* clone of input 1 bpp seed (marker) pixm */ l_int32 mindepth; /* minimum depth allowed for a watershed */ struct Pix *pixlab; /* 16 bpp label pix */ struct Pix *pixt; /* scratch pix for computing wshed regions */ void **lines8; /* line ptrs for pixs */ void **linem1; /* line ptrs for pixm */ void **linelab32; /* line ptrs for pixlab */ void **linet1; /* line ptrs for pixt */ struct Pixa *pixad; /* result: 1 bpp pixa of watersheds */ struct Pta *ptas; /* pta of initial seed pixels */ struct Numa *nasi; /* numa of seed indicators; 0 if completed */ struct Numa *nash; /* numa of initial seed heights */ struct Numa *namh; /* numa of initial minima heights */ struct Numa *nalevels; /* result: numa of watershed levels */ l_int32 nseeds; /* number of seeds (markers) */ l_int32 nother; /* number of minima different from seeds */ l_int32 *lut; /* lut for pixel indices */ struct Numa **links; /* back-links into lut, for updates */ l_int32 arraysize; /* size of links array */ l_int32 debug; /* set to 1 for debug output */ }; typedef struct L_WShed L_WSHED; #endif /* LEPTONICA_WATERSHED_H */ leptonica-1.70/src/zlibmem.c0000664000175000017500000002036412262575612014116 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * zlibmem.c * * zlib operations in memory, using bbuffer * l_uint8 *zlibCompress() * l_uint8 *zlibUncompress() * * * This provides an example use of the byte buffer utility * (see bbuffer.c for details of how the bbuffer works internally). * We use zlib to compress and decompress a byte array from * one memory buffer to another. The standard method uses streams, * but here we use the bbuffer as an expandable queue of pixels * for both the reading and writing sides of each operation. * * With memory mapping, one should be able to compress between * memory buffers by using the file system to buffer everything in * the background, but the bbuffer implementation is more portable. */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if HAVE_LIBZ /* defined in environ.h */ /* --------------------------------------------*/ #include "zlib.h" static const l_int32 L_BUF_SIZE = 32768; static const l_int32 ZLIB_COMPRESSION_LEVEL = 6; #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*! * zlibCompress() * * Input: datain (byte buffer with input data) * nin (number of bytes of input data) * &nout ( number of bytes of output data) * Return: dataout (compressed data), or null on error * * Notes: * (1) We repeatedly read in and fill up an input buffer, * compress the data, and read it back out. zlib * uses two byte buffers internally in the z_stream * data structure. We use the bbuffers to feed data * into the fixed bufferin, and feed it out of bufferout, * in the same way that a pair of streams would normally * be used if the data were being read from one file * and written to another. This is done iteratively, * compressing L_BUF_SIZE bytes of input data at a time. */ l_uint8 * zlibCompress(l_uint8 *datain, size_t nin, size_t *pnout) { l_uint8 *dataout; l_int32 status; l_int32 flush; size_t nbytes; l_uint8 *bufferin, *bufferout; BBUFFER *bbin, *bbout; z_stream z; PROCNAME("zlibCompress"); if (!datain) return (l_uint8 *)ERROR_PTR("datain not defined", procName, NULL); /* Set up fixed size buffers used in z_stream */ if ((bufferin = (l_uint8 *)CALLOC(L_BUF_SIZE, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("bufferin not made", procName, NULL); if ((bufferout = (l_uint8 *)CALLOC(L_BUF_SIZE, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("bufferout not made", procName, NULL); /* Set up bbuffers and load bbin with the data */ if ((bbin = bbufferCreate(datain, nin)) == NULL) return (l_uint8 *)ERROR_PTR("bbin not made", procName, NULL); if ((bbout = bbufferCreate(NULL, 0)) == NULL) return (l_uint8 *)ERROR_PTR("bbout not made", procName, NULL); z.zalloc = (alloc_func)0; z.zfree = (free_func)0; z.opaque = (voidpf)0; z.next_in = bufferin; z.avail_in = 0; z.next_out = bufferout; z.avail_out = L_BUF_SIZE; status = deflateInit(&z, ZLIB_COMPRESSION_LEVEL); if (status != Z_OK) return (l_uint8 *)ERROR_PTR("deflateInit failed", procName, NULL); do { if (z.avail_in == 0) { z.next_in = bufferin; bbufferWrite(bbin, bufferin, L_BUF_SIZE, &nbytes); #if DEBUG fprintf(stderr, " wrote %d bytes to bufferin\n", nbytes); #endif /* DEBUG */ z.avail_in = nbytes; } flush = (bbin->n) ? Z_SYNC_FLUSH : Z_FINISH; status = deflate(&z, flush); #if DEBUG fprintf(stderr, " status is %d, bytesleft = %d, totalout = %d\n", status, z.avail_out, z.total_out); #endif /* DEBUG */ nbytes = L_BUF_SIZE - z.avail_out; if (nbytes) { bbufferRead(bbout, bufferout, nbytes); #if DEBUG fprintf(stderr, " read %d bytes from bufferout\n", nbytes); #endif /* DEBUG */ } z.next_out = bufferout; z.avail_out = L_BUF_SIZE; } while (flush != Z_FINISH); deflateEnd(&z); bbufferDestroy(&bbin); dataout = bbufferDestroyAndSaveData(&bbout, pnout); FREE(bufferin); FREE(bufferout); return dataout; } /*! * zlibUncompress() * * Input: datain (byte buffer with compressed input data) * nin (number of bytes of input data) * &nout ( number of bytes of output data) * Return: dataout (uncompressed data), or null on error * * Notes: * (1) See zlibCompress(). */ l_uint8 * zlibUncompress(l_uint8 *datain, size_t nin, size_t *pnout) { l_uint8 *dataout; l_uint8 *bufferin, *bufferout; l_int32 status; size_t nbytes; BBUFFER *bbin, *bbout; z_stream z; PROCNAME("zlibUncompress"); if (!datain) return (l_uint8 *)ERROR_PTR("datain not defined", procName, NULL); if ((bufferin = (l_uint8 *)CALLOC(L_BUF_SIZE, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("bufferin not made", procName, NULL); if ((bufferout = (l_uint8 *)CALLOC(L_BUF_SIZE, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("bufferout not made", procName, NULL); if ((bbin = bbufferCreate(datain, nin)) == NULL) return (l_uint8 *)ERROR_PTR("bbin not made", procName, NULL); if ((bbout = bbufferCreate(NULL, 0)) == NULL) return (l_uint8 *)ERROR_PTR("bbout not made", procName, NULL); z.zalloc = (alloc_func)0; z.zfree = (free_func)0; z.next_in = bufferin; z.avail_in = 0; z.next_out = bufferout; z.avail_out = L_BUF_SIZE; inflateInit(&z); for ( ; ; ) { if (z.avail_in == 0) { z.next_in = bufferin; bbufferWrite(bbin, bufferin, L_BUF_SIZE, &nbytes); /* fprintf(stderr, " wrote %d bytes to bufferin\n", nbytes); */ z.avail_in = nbytes; } if (z.avail_in == 0) break; status = inflate(&z, Z_SYNC_FLUSH); /* fprintf(stderr, " status is %d, bytesleft = %d, totalout = %d\n", status, z.avail_out, z.total_out); */ nbytes = L_BUF_SIZE - z.avail_out; if (nbytes) { bbufferRead(bbout, bufferout, nbytes); /* fprintf(stderr, " read %d bytes from bufferout\n", nbytes); */ } z.next_out = bufferout; z.avail_out = L_BUF_SIZE; } inflateEnd(&z); bbufferDestroy(&bbin); dataout = bbufferDestroyAndSaveData(&bbout, pnout); FREE(bufferin); FREE(bufferout); return dataout; } /* --------------------------------------------*/ #endif /* HAVE_LIBZ */ /* --------------------------------------------*/ leptonica-1.70/src/regutils.h0000664000175000017500000001377012267243267014330 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_REGUTILS_H #define LEPTONICA_REGUTILS_H /* * regutils.h * * Contains this regression test parameter packaging struct * struct L_RegParams * * The regression test utility allows you to write regression tests * that compare results with existing "golden files" and with * compiled in data. * * Regression tests can be called in three ways. * For example, for distance_reg: * * Case 1: distance_reg [generate] * This generates golden files in /tmp for the reg test. * * Case 2: distance_reg compare * This runs the test against the set of golden files. It * appends to 'outfile.txt' either "SUCCESS" or "FAILURE", * as well as the details of any parts of the test that failed. * It writes to a temporary file stream (fp) * * Case 3: distance_reg display * This runs the test but makes no comparison of the output * against the set of golden files. In addition, this displays * images and plots that are specified in the test under * control of the display variable. Display is enabled only * for this case. Using 'display' on the command line is optional. * * Regression tests follow the pattern given below. Tests are * automatically numbered sequentially, and it is convenient to * comment each with a number to keep track (for comparison tests * and for debugging). In an actual case, comparisons of pix and * of files can occur in any order. We give a specific order here * for clarity. * * L_REGPARAMS *rp; // holds data required by the test functions * * // Setup variables; optionally open stream * if (regTestSetup(argc, argv, &rp)) * return 1; * * // Test pairs of generated pix for identity. This compares * // two pix; no golden file is generated. * regTestComparePix(rp, pix1, pix2); // 0 * * // Test pairs of generated pix for similarity. This compares * // two pix; no golden file is generated. The last arg determines * // if stats are to be written to stderr. * regTestCompareSimilarPix(rp, pix1, pix2, 15, 0.001, 0); // 1 * * // Generation of outputs and testing for identity * // These files can be anything, of course. * regTestCheckFile(rp, ); // 2 * regTestCheckFile(rp, ); // 3 * * // Test pairs of output golden files for identity. Here we * // are comparing golden files 2 and 3. * regTestCompareFiles(rp, 2, 3); // 4 * * // "Write and check". This writes a pix using a canonical * // formulation for the local filename and either: * // case 1: generates a golden file * // case 2: compares the local file with a golden file * // case 3: generates local files and displays * // Here we write the pix compressed with png and jpeg, respectively; * // Then check against the golden file. The internal @index * // is incremented; it is embedded in the local filename and, * // if generating, in the golden file as well. * regTestWritePixAndCheck(rp, pix1, IFF_PNG); // 5 * regTestWritePixAndCheck(rp, pix2, IFF_JFIF_JPEG); // 6 * * // Display if reg test was called in 'display' mode * pixDisplayWithTitle(pix1, 100, 100, NULL, rp->display); * * // Clean up and output result * regTestCleanup(rp); */ /*-------------------------------------------------------------------------* * Regression test parameter packer * *-------------------------------------------------------------------------*/ struct L_RegParams { FILE *fp; /* stream to temporary output file for compare mode */ char *testname; /* name of test, without '_reg' */ char *tempfile; /* name of temp file for compare mode output */ l_int32 mode; /* generate, compare or display */ l_int32 index; /* index into saved files for this test; 0-based */ l_int32 success; /* overall result of the test */ l_int32 display; /* 1 if in display mode; 0 otherwise */ L_TIMER tstart; /* marks beginning of the reg test */ }; typedef struct L_RegParams L_REGPARAMS; /* Running modes for the test */ enum { L_REG_GENERATE = 0, L_REG_COMPARE = 1, L_REG_DISPLAY = 2 }; #endif /* LEPTONICA_REGUTILS_H */ leptonica-1.70/src/fpix2.c0000644000175000017500000021755212265645147013520 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fpix2.c * * This file has these FPix utilities: * - interconversions with pix, fpix, dpix * - min and max values * - integer scaling * - arithmetic operations * - set all * - border functions * - simple rasterop (source --> dest) * - geometric transforms * * Interconversions between Pix, FPix and DPix * FPIX *pixConvertToFPix() * DPIX *pixConvertToDPix() * PIX *fpixConvertToPix() * PIX *fpixDisplayMaxDynamicRange() [useful for debugging] * DPIX *fpixConvertToDPix() * PIX *dpixConvertToPix() * FPIX *dpixConvertToFPix() * * Min/max value * l_int32 fpixGetMin() * l_int32 fpixGetMax() * l_int32 dpixGetMin() * l_int32 dpixGetMax() * * Integer scaling * FPIX *fpixScaleByInteger() * DPIX *dpixScaleByInteger() * * Arithmetic operations * FPIX *fpixLinearCombination() * l_int32 fpixAddMultConstant() * DPIX *dpixLinearCombination() * l_int32 dpixAddMultConstant() * * Set all * l_int32 fpixSetAllArbitrary() * l_int32 dpixSetAllArbitrary() * * FPix border functions * FPIX *fpixAddBorder() * FPIX *fpixRemoveBorder() * FPIX *fpixAddMirroredBorder() * FPIX *fpixAddContinuedBorder() * FPIX *fpixAddSlopeBorder() * * FPix simple rasterop * l_int32 fpixRasterop() * * FPix rotation by multiples of 90 degrees * FPIX *fpixRotateOrth() * FPIX *fpixRotate180() * FPIX *fpixRotate90() * FPIX *fpixFlipLR() * FPIX *fpixFlipTB() * * FPix affine and projective interpolated transforms * FPIX *fpixAffinePta() * FPIX *fpixAffine() * FPIX *fpixProjectivePta() * FPIX *fpixProjective() * l_int32 linearInterpolatePixelFloat() * * Thresholding to 1 bpp Pix * PIX *fpixThresholdToPix() * * Generate function from components * FPIX *pixComponentFunction() */ #include #include "allheaders.h" /*--------------------------------------------------------------------* * FPix <--> Pix conversions * *--------------------------------------------------------------------*/ /*! * pixConvertToFPix() * * Input: pix (1, 2, 4, 8, 16 or 32 bpp) * ncomps (number of components: 3 for RGB, 1 otherwise) * Return: fpix, or null on error * * Notes: * (1) If colormapped, remove to grayscale. * (2) If 32 bpp and @ncomps == 3, this is RGB; convert to luminance. * In all other cases the src image is treated as having a single * component of pixel values. */ FPIX * pixConvertToFPix(PIX *pixs, l_int32 ncomps) { l_int32 w, h, d, i, j, val, wplt, wpld; l_uint32 uval; l_uint32 *datat, *linet; l_float32 *datad, *lined; PIX *pixt; FPIX *fpixd; PROCNAME("pixConvertToFPix"); if (!pixs) return (FPIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Convert to a single component */ if (pixGetColormap(pixs)) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else if (pixGetDepth(pixs) == 32 && ncomps == 3) pixt = pixConvertRGBToLuminance(pixs); else pixt = pixClone(pixs); pixGetDimensions(pixt, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) { pixDestroy(&pixt); return (FPIX *)ERROR_PTR("invalid depth", procName, NULL); } if ((fpixd = fpixCreate(w, h)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; if (d == 1) { for (j = 0; j < w; j++) { val = GET_DATA_BIT(linet, j); lined[j] = (l_float32)val; } } else if (d == 2) { for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(linet, j); lined[j] = (l_float32)val; } } else if (d == 4) { for (j = 0; j < w; j++) { val = GET_DATA_QBIT(linet, j); lined[j] = (l_float32)val; } } else if (d == 8) { for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); lined[j] = (l_float32)val; } } else if (d == 16) { for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(linet, j); lined[j] = (l_float32)val; } } else { /* d == 32 */ for (j = 0; j < w; j++) { uval = GET_DATA_FOUR_BYTES(linet, j); lined[j] = (l_float32)uval; } } } pixDestroy(&pixt); return fpixd; } /*! * pixConvertToDPix() * * Input: pix (1, 2, 4, 8, 16 or 32 bpp) * ncomps (number of components: 3 for RGB, 1 otherwise) * Return: dpix, or null on error * * Notes: * (1) If colormapped, remove to grayscale. * (2) If 32 bpp and @ncomps == 3, this is RGB; convert to luminance. * In all other cases the src image is treated as having a single * component of pixel values. */ DPIX * pixConvertToDPix(PIX *pixs, l_int32 ncomps) { l_int32 w, h, d, i, j, val, wplt, wpld; l_uint32 uval; l_uint32 *datat, *linet; l_float64 *datad, *lined; PIX *pixt; DPIX *dpixd; PROCNAME("pixConvertToDPix"); if (!pixs) return (DPIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Convert to a single component */ if (pixGetColormap(pixs)) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else if (pixGetDepth(pixs) == 32 && ncomps == 3) pixt = pixConvertRGBToLuminance(pixs); else pixt = pixClone(pixs); pixGetDimensions(pixt, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) { pixDestroy(&pixt); return (DPIX *)ERROR_PTR("invalid depth", procName, NULL); } if ((dpixd = dpixCreate(w, h)) == NULL) return (DPIX *)ERROR_PTR("dpixd not made", procName, NULL); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = dpixGetData(dpixd); wpld = dpixGetWpl(dpixd); for (i = 0; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; if (d == 1) { for (j = 0; j < w; j++) { val = GET_DATA_BIT(linet, j); lined[j] = (l_float64)val; } } else if (d == 2) { for (j = 0; j < w; j++) { val = GET_DATA_DIBIT(linet, j); lined[j] = (l_float64)val; } } else if (d == 4) { for (j = 0; j < w; j++) { val = GET_DATA_QBIT(linet, j); lined[j] = (l_float64)val; } } else if (d == 8) { for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); lined[j] = (l_float64)val; } } else if (d == 16) { for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(linet, j); lined[j] = (l_float64)val; } } else { /* d == 32 */ for (j = 0; j < w; j++) { uval = GET_DATA_FOUR_BYTES(linet, j); lined[j] = (l_float64)uval; } } } pixDestroy(&pixt); return dpixd; } /*! * fpixConvertToPix() * * Input: fpixs * outdepth (0, 8, 16 or 32 bpp) * negvals (L_CLIP_TO_ZERO, L_TAKE_ABSVAL) * errorflag (1 to output error stats; 0 otherwise) * Return: pixd, or null on error * * Notes: * (1) Use @outdepth = 0 to programmatically determine the * output depth. If no values are greater than 255, * it will set outdepth = 8; otherwise to 16 or 32. * (2) Because we are converting a float to an unsigned int * with a specified dynamic range (8, 16 or 32 bits), errors * can occur. If errorflag == TRUE, output the number * of values out of range, both negative and positive. * (3) If a pixel value is positive and out of range, clip to * the maximum value represented at the outdepth of 8, 16 * or 32 bits. */ PIX * fpixConvertToPix(FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag) { l_int32 w, h, i, j, wpls, wpld, maxval; l_uint32 vald; l_float32 val; l_float32 *datas, *lines; l_uint32 *datad, *lined; PIX *pixd; PROCNAME("fpixConvertToPix"); if (!fpixs) return (PIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (negvals != L_CLIP_TO_ZERO && negvals != L_TAKE_ABSVAL) return (PIX *)ERROR_PTR("invalid negvals", procName, NULL); if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {0,8,16,32}", procName, NULL); fpixGetDimensions(fpixs, &w, &h); datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); /* Adaptive determination of output depth */ if (outdepth == 0) { outdepth = 8; for (i = 0; i < h && outdepth < 32; i++) { lines = datas + i * wpls; for (j = 0; j < w && outdepth < 32; j++) { if (lines[j] > 65535.5) outdepth = 32; else if (lines[j] > 255.5) outdepth = 16; } } } maxval = (1 << outdepth) - 1; /* Gather statistics if @errorflag = TRUE */ if (errorflag) { l_int32 negs = 0; l_int32 overvals = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val = lines[j]; if (val < 0.0) negs++; else if (val > maxval) overvals++; } } if (negs > 0) L_ERROR("Number of negative values: %d\n", procName, negs); if (overvals > 0) L_ERROR("Number of too-large values: %d\n", procName, overvals); } /* Make the pix and convert the data */ if ((pixd = pixCreate(w, h, outdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; if (val >= 0.0) vald = (l_uint32)(val + 0.5); else if (negvals == L_CLIP_TO_ZERO) /* and val < 0.0 */ vald = 0; else vald = (l_uint32)(-val + 0.5); if (vald > maxval) vald = maxval; if (outdepth == 8) SET_DATA_BYTE(lined, j, vald); else if (outdepth == 16) SET_DATA_TWO_BYTES(lined, j, vald); else /* outdepth == 32 */ SET_DATA_FOUR_BYTES(lined, j, vald); } } return pixd; } /*! * fpixDisplayMaxDynamicRange() * * Input: fpixs * Return: pixd (8 bpp), or null on error */ PIX * fpixDisplayMaxDynamicRange(FPIX *fpixs) { l_uint8 dval; l_int32 i, j, w, h, wpls, wpld; l_float32 factor, sval, maxval; l_float32 *lines, *datas; l_uint32 *lined, *datad; PIX *pixd; PROCNAME("fpixDisplayMaxDynamicRange"); if (!fpixs) return (PIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixGetDimensions(fpixs, &w, &h); datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); maxval = 0.0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { sval = *(lines + j); if (sval > maxval) maxval = sval; } } pixd = pixCreate(w, h, 8); if (maxval == 0.0) return pixd; /* all pixels are 0 */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); factor = 255. / maxval; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { sval = *(lines + j); if (sval < 0.0) sval = 0.0; dval = (l_uint8)(factor * sval + 0.5); SET_DATA_BYTE(lined, j, dval); } } return pixd; } /*! * fpixConvertToDPix() * * Input: fpix * Return: dpix, or null on error */ DPIX * fpixConvertToDPix(FPIX *fpix) { l_int32 w, h, i, j, wpls, wpld; l_float32 val; l_float32 *datas, *lines; l_float64 *datad, *lined; DPIX *dpix; PROCNAME("fpixConvertToDPix"); if (!fpix) return (DPIX *)ERROR_PTR("fpix not defined", procName, NULL); fpixGetDimensions(fpix, &w, &h); if ((dpix = dpixCreate(w, h)) == NULL) return (DPIX *)ERROR_PTR("dpix not made", procName, NULL); datas = fpixGetData(fpix); datad = dpixGetData(dpix); wpls = fpixGetWpl(fpix); wpld = dpixGetWpl(dpix); /* 8 byte words */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; lined[j] = val; } } return dpix; } /*! * dpixConvertToPix() * * Input: dpixs * outdepth (0, 8, 16 or 32 bpp) * negvals (L_CLIP_TO_ZERO, L_TAKE_ABSVAL) * errorflag (1 to output error stats; 0 otherwise) * Return: pixd, or null on error * * Notes: * (1) Use @outdepth = 0 to programmatically determine the * output depth. If no values are greater than 255, * it will set outdepth = 8; otherwise to 16 or 32. * (2) Because we are converting a float to an unsigned int * with a specified dynamic range (8, 16 or 32 bits), errors * can occur. If errorflag == TRUE, output the number * of values out of range, both negative and positive. * (3) If a pixel value is positive and out of range, clip to * the maximum value represented at the outdepth of 8, 16 * or 32 bits. */ PIX * dpixConvertToPix(DPIX *dpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag) { l_int32 w, h, i, j, wpls, wpld, maxval; l_uint32 vald; l_float64 val; l_float64 *datas, *lines; l_uint32 *datad, *lined; PIX *pixd; PROCNAME("dpixConvertToPix"); if (!dpixs) return (PIX *)ERROR_PTR("dpixs not defined", procName, NULL); if (negvals != L_CLIP_TO_ZERO && negvals != L_TAKE_ABSVAL) return (PIX *)ERROR_PTR("invalid negvals", procName, NULL); if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {0,8,16,32}", procName, NULL); dpixGetDimensions(dpixs, &w, &h); datas = dpixGetData(dpixs); wpls = dpixGetWpl(dpixs); /* Adaptive determination of output depth */ if (outdepth == 0) { outdepth = 8; for (i = 0; i < h && outdepth < 32; i++) { lines = datas + i * wpls; for (j = 0; j < w && outdepth < 32; j++) { if (lines[j] > 65535.5) outdepth = 32; else if (lines[j] > 255.5) outdepth = 16; } } } maxval = (1 << outdepth) - 1; /* Gather statistics if @errorflag = TRUE */ if (errorflag) { l_int32 negs = 0; l_int32 overvals = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { val = lines[j]; if (val < 0.0) negs++; else if (val > maxval) overvals++; } } if (negs > 0) L_ERROR("Number of negative values: %d\n", procName, negs); if (overvals > 0) L_ERROR("Number of too-large values: %d\n", procName, overvals); } /* Make the pix and convert the data */ if ((pixd = pixCreate(w, h, outdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; if (val >= 0.0) { vald = (l_uint32)(val + 0.5); } else { /* val < 0.0 */ if (negvals == L_CLIP_TO_ZERO) vald = 0; else vald = (l_uint32)(-val + 0.5); } if (vald > maxval) vald = maxval; if (outdepth == 8) SET_DATA_BYTE(lined, j, vald); else if (outdepth == 16) SET_DATA_TWO_BYTES(lined, j, vald); else /* outdepth == 32 */ SET_DATA_FOUR_BYTES(lined, j, vald); } } return pixd; } /*! * dpixConvertToFPix() * * Input: dpix * Return: fpix, or null on error */ FPIX * dpixConvertToFPix(DPIX *dpix) { l_int32 w, h, i, j, wpls, wpld; l_float64 val; l_float32 *datad, *lined; l_float64 *datas, *lines; FPIX *fpix; PROCNAME("dpixConvertToFPix"); if (!dpix) return (FPIX *)ERROR_PTR("dpix not defined", procName, NULL); dpixGetDimensions(dpix, &w, &h); if ((fpix = fpixCreate(w, h)) == NULL) return (FPIX *)ERROR_PTR("fpix not made", procName, NULL); datas = dpixGetData(dpix); datad = fpixGetData(fpix); wpls = dpixGetWpl(dpix); /* 8 byte words */ wpld = fpixGetWpl(fpix); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; lined[j] = (l_float32)val; } } return fpix; } /*--------------------------------------------------------------------* * Min/max value * *--------------------------------------------------------------------*/ /*! * fpixGetMin() * * Input: fpix * &minval ( min value) * &xminloc ( x location of min) * &yminloc ( y location of min) * Return: 0 if OK; 1 on error */ l_int32 fpixGetMin(FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc) { l_int32 i, j, w, h, wpl, xminloc, yminloc; l_float32 *data, *line; l_float32 minval; PROCNAME("fpixGetMin"); if (!pminval && !pxminloc && !pyminloc) return ERROR_INT("nothing to do", procName, 1); if (pminval) *pminval = 0.0; if (pxminloc) *pxminloc = 0; if (pyminloc) *pyminloc = 0; if (!fpix) return ERROR_INT("fpix not defined", procName, 1); minval = +1.0e20; xminloc = 0; yminloc = 0; fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); wpl = fpixGetWpl(fpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] < minval) { minval = line[j]; xminloc = j; yminloc = i; } } } if (pminval) *pminval = minval; if (pxminloc) *pxminloc = xminloc; if (pyminloc) *pyminloc = yminloc; return 0; } /*! * fpixGetMax() * * Input: fpix * &maxval ( max value) * &xmaxloc ( x location of max) * &ymaxloc ( y location of max) * Return: 0 if OK; 1 on error */ l_int32 fpixGetMax(FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc) { l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc; l_float32 *data, *line; l_float32 maxval; PROCNAME("fpixGetMax"); if (!pmaxval && !pxmaxloc && !pymaxloc) return ERROR_INT("nothing to do", procName, 1); if (pmaxval) *pmaxval = 0.0; if (pxmaxloc) *pxmaxloc = 0; if (pymaxloc) *pymaxloc = 0; if (!fpix) return ERROR_INT("fpix not defined", procName, 1); maxval = -1.0e20; xmaxloc = 0; ymaxloc = 0; fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); wpl = fpixGetWpl(fpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] > maxval) { maxval = line[j]; xmaxloc = j; ymaxloc = i; } } } if (pmaxval) *pmaxval = maxval; if (pxmaxloc) *pxmaxloc = xmaxloc; if (pymaxloc) *pymaxloc = ymaxloc; return 0; } /*! * dpixGetMin() * * Input: dpix * &minval ( min value) * &xminloc ( x location of min) * &yminloc ( y location of min) * Return: 0 if OK; 1 on error */ l_int32 dpixGetMin(DPIX *dpix, l_float64 *pminval, l_int32 *pxminloc, l_int32 *pyminloc) { l_int32 i, j, w, h, wpl, xminloc, yminloc; l_float64 *data, *line; l_float64 minval; PROCNAME("dpixGetMin"); if (!pminval && !pxminloc && !pyminloc) return ERROR_INT("nothing to do", procName, 1); if (pminval) *pminval = 0.0; if (pxminloc) *pxminloc = 0; if (pyminloc) *pyminloc = 0; if (!dpix) return ERROR_INT("dpix not defined", procName, 1); minval = +1.0e300; xminloc = 0; yminloc = 0; dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] < minval) { minval = line[j]; xminloc = j; yminloc = i; } } } if (pminval) *pminval = minval; if (pxminloc) *pxminloc = xminloc; if (pyminloc) *pyminloc = yminloc; return 0; } /*! * dpixGetMax() * * Input: dpix * &maxval ( max value) * &xmaxloc ( x location of max) * &ymaxloc ( y location of max) * Return: 0 if OK; 1 on error */ l_int32 dpixGetMax(DPIX *dpix, l_float64 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc) { l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc; l_float64 *data, *line; l_float64 maxval; PROCNAME("dpixGetMax"); if (!pmaxval && !pxmaxloc && !pymaxloc) return ERROR_INT("nothing to do", procName, 1); if (pmaxval) *pmaxval = 0.0; if (pxmaxloc) *pxmaxloc = 0; if (pymaxloc) *pymaxloc = 0; if (!dpix) return ERROR_INT("dpix not defined", procName, 1); maxval = -1.0e20; xmaxloc = 0; ymaxloc = 0; dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { if (line[j] > maxval) { maxval = line[j]; xmaxloc = j; ymaxloc = i; } } } if (pmaxval) *pmaxval = maxval; if (pxmaxloc) *pxmaxloc = xmaxloc; if (pymaxloc) *pymaxloc = ymaxloc; return 0; } /*--------------------------------------------------------------------* * Special integer scaling * *--------------------------------------------------------------------*/ /*! * fpixScaleByInteger() * * Input: fpixs (low resolution, subsampled) * factor (scaling factor) * Return: fpixd (interpolated result), or null on error * * Notes: * (1) The width wd of fpixd is related to ws of fpixs by: * wd = factor * (ws - 1) + 1 (and ditto for the height) * We avoid special-casing boundary pixels in the interpolation * by constructing fpixd by inserting (factor - 1) interpolated * pixels between each pixel in fpixs. Then * wd = ws + (ws - 1) * (factor - 1) (same as above) * This also has the advantage that if we subsample by @factor, * throwing out all the interpolated pixels, we regain the * original low resolution fpix. */ FPIX * fpixScaleByInteger(FPIX *fpixs, l_int32 factor) { l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld; l_float32 val0, val1, val2, val3; l_float32 *datas, *datad, *lines, *lined, *fract; FPIX *fpixd; PROCNAME("fpixScaleByInteger"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixGetDimensions(fpixs, &ws, &hs); wd = factor * (ws - 1) + 1; hd = factor * (hs - 1) + 1; fpixd = fpixCreate(wd, hd); datas = fpixGetData(fpixs); datad = fpixGetData(fpixd); wpls = fpixGetWpl(fpixs); wpld = fpixGetWpl(fpixd); fract = (l_float32 *)CALLOC(factor, sizeof(l_float32)); for (i = 0; i < factor; i++) fract[i] = i / (l_float32)factor; for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; val2 = lines[wpls + j]; val3 = lines[wpls + j + 1]; for (k = 0; k < factor; k++) { /* rows of sub-block */ lined = datad + (i * factor + k) * wpld; for (m = 0; m < factor; m++) { /* cols of sub-block */ lined[j * factor + m] = val0 * (1.0 - fract[m]) * (1.0 - fract[k]) + val1 * fract[m] * (1.0 - fract[k]) + val2 * (1.0 - fract[m]) * fract[k] + val3 * fract[m] * fract[k]; } } } } /* Do the right-most column of fpixd, skipping LR corner */ for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; val0 = lines[ws - 1]; val1 = lines[wpls + ws - 1]; for (k = 0; k < factor; k++) { lined = datad + (i * factor + k) * wpld; lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k]; } } /* Do the bottom-most row of fpixd */ lines = datas + (hs - 1) * wpls; lined = datad + (hd - 1) * wpld; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; for (m = 0; m < factor; m++) lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m]; lined[wd - 1] = lines[ws - 1]; /* LR corner */ } FREE(fract); return fpixd; } /*! * dpixScaleByInteger() * * Input: dpixs (low resolution, subsampled) * factor (scaling factor) * Return: dpixd (interpolated result), or null on error * * Notes: * (1) The width wd of dpixd is related to ws of dpixs by: * wd = factor * (ws - 1) + 1 (and ditto for the height) * We avoid special-casing boundary pixels in the interpolation * by constructing fpixd by inserting (factor - 1) interpolated * pixels between each pixel in fpixs. Then * wd = ws + (ws - 1) * (factor - 1) (same as above) * This also has the advantage that if we subsample by @factor, * throwing out all the interpolated pixels, we regain the * original low resolution dpix. */ DPIX * dpixScaleByInteger(DPIX *dpixs, l_int32 factor) { l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld; l_float64 val0, val1, val2, val3; l_float64 *datas, *datad, *lines, *lined, *fract; DPIX *dpixd; PROCNAME("dpixScaleByInteger"); if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", procName, NULL); dpixGetDimensions(dpixs, &ws, &hs); wd = factor * (ws - 1) + 1; hd = factor * (hs - 1) + 1; dpixd = dpixCreate(wd, hd); datas = dpixGetData(dpixs); datad = dpixGetData(dpixd); wpls = dpixGetWpl(dpixs); wpld = dpixGetWpl(dpixd); fract = (l_float64 *)CALLOC(factor, sizeof(l_float64)); for (i = 0; i < factor; i++) fract[i] = i / (l_float64)factor; for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; val2 = lines[wpls + j]; val3 = lines[wpls + j + 1]; for (k = 0; k < factor; k++) { /* rows of sub-block */ lined = datad + (i * factor + k) * wpld; for (m = 0; m < factor; m++) { /* cols of sub-block */ lined[j * factor + m] = val0 * (1.0 - fract[m]) * (1.0 - fract[k]) + val1 * fract[m] * (1.0 - fract[k]) + val2 * (1.0 - fract[m]) * fract[k] + val3 * fract[m] * fract[k]; } } } } /* Do the right-most column of dpixd, skipping LR corner */ for (i = 0; i < hs - 1; i++) { lines = datas + i * wpls; val0 = lines[ws - 1]; val1 = lines[wpls + ws - 1]; for (k = 0; k < factor; k++) { lined = datad + (i * factor + k) * wpld; lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k]; } } /* Do the bottom-most row of dpixd */ lines = datas + (hs - 1) * wpls; lined = datad + (hd - 1) * wpld; for (j = 0; j < ws - 1; j++) { val0 = lines[j]; val1 = lines[j + 1]; for (m = 0; m < factor; m++) lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m]; lined[wd - 1] = lines[ws - 1]; /* LR corner */ } FREE(fract); return dpixd; } /*--------------------------------------------------------------------* * Arithmetic operations * *--------------------------------------------------------------------*/ /*! * fpixLinearCombination() * * Input: fpixd (; this can be null, equal to fpixs1, or * different from fpixs1) * fpixs1 (can be == to fpixd) * fpixs2 * a, b (multiplication factors on fpixs1 and fpixs2, rsp.) * Return: fpixd always * * Notes: * (1) Computes pixelwise linear combination: a * src1 + b * src2 * (2) Alignment is to UL corner. * (3) There are 3 cases. The result can go to a new dest, * in-place to fpixs1, or to an existing input dest: * * fpixd == null: (src1 + src2) --> new fpixd * * fpixd == fpixs1: (src1 + src2) --> src1 (in-place) * * fpixd != fpixs1: (src1 + src2) --> input fpixd * (4) fpixs2 must be different from both fpixd and fpixs1. */ FPIX * fpixLinearCombination(FPIX *fpixd, FPIX *fpixs1, FPIX *fpixs2, l_float32 a, l_float32 b) { l_int32 i, j, ws, hs, w, h, wpls, wpld; l_float32 *datas, *datad, *lines, *lined; PROCNAME("fpixLinearCombination"); if (!fpixs1) return (FPIX *)ERROR_PTR("fpixs1 not defined", procName, fpixd); if (!fpixs2) return (FPIX *)ERROR_PTR("fpixs2 not defined", procName, fpixd); if (fpixs1 == fpixs2) return (FPIX *)ERROR_PTR("fpixs1 == fpixs2", procName, fpixd); if (fpixs2 == fpixd) return (FPIX *)ERROR_PTR("fpixs2 == fpixd", procName, fpixd); if (fpixs1 != fpixd) fpixd = fpixCopy(fpixd, fpixs1); datas = fpixGetData(fpixs2); datad = fpixGetData(fpixd); wpls = fpixGetWpl(fpixs2); wpld = fpixGetWpl(fpixd); fpixGetDimensions(fpixs2, &ws, &hs); fpixGetDimensions(fpixd, &w, &h); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) lined[j] = a * lined[j] + b * lines[j]; } return fpixd; } /*! * fpixAddMultConstant() * * Input: fpix * addc (use 0.0 to skip the operation) * multc (use 1.0 to skip the operation) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place operation. * (2) It can be used to multiply each pixel by a constant, * and also to add a constant to each pixel. Multiplication * is done first. */ l_int32 fpixAddMultConstant(FPIX *fpix, l_float32 addc, l_float32 multc) { l_int32 i, j, w, h, wpl; l_float32 *line, *data; PROCNAME("fpixAddMultConstant"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); if (addc == 0.0 && multc == 1.0) return 0; fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); wpl = fpixGetWpl(fpix); for (i = 0; i < h; i++) { line = data + i * wpl; if (addc == 0.0) { for (j = 0; j < w; j++) line[j] *= multc; } else if (multc == 1.0) { for (j = 0; j < w; j++) line[j] += addc; } else { for (j = 0; j < w; j++) { line[j] = multc * line[j] + addc; } } } return 0; } /*! * dpixLinearCombination() * * Input: dpixd (; this can be null, equal to dpixs1, or * different from dpixs1) * dpixs1 (can be == to dpixd) * dpixs2 * a, b (multiplication factors on dpixs1 and dpixs2, rsp.) * Return: dpixd always * * Notes: * (1) Computes pixelwise linear combination: a * src1 + b * src2 * (2) Alignment is to UL corner. * (3) There are 3 cases. The result can go to a new dest, * in-place to dpixs1, or to an existing input dest: * * dpixd == null: (src1 + src2) --> new dpixd * * dpixd == dpixs1: (src1 + src2) --> src1 (in-place) * * dpixd != dpixs1: (src1 + src2) --> input dpixd * (4) dpixs2 must be different from both dpixd and dpixs1. */ DPIX * dpixLinearCombination(DPIX *dpixd, DPIX *dpixs1, DPIX *dpixs2, l_float32 a, l_float32 b) { l_int32 i, j, ws, hs, w, h, wpls, wpld; l_float64 *datas, *datad, *lines, *lined; PROCNAME("dpixLinearCombination"); if (!dpixs1) return (DPIX *)ERROR_PTR("dpixs1 not defined", procName, dpixd); if (!dpixs2) return (DPIX *)ERROR_PTR("dpixs2 not defined", procName, dpixd); if (dpixs1 == dpixs2) return (DPIX *)ERROR_PTR("dpixs1 == dpixs2", procName, dpixd); if (dpixs2 == dpixd) return (DPIX *)ERROR_PTR("dpixs2 == dpixd", procName, dpixd); if (dpixs1 != dpixd) dpixd = dpixCopy(dpixd, dpixs1); datas = dpixGetData(dpixs2); datad = dpixGetData(dpixd); wpls = dpixGetWpl(dpixs2); wpld = dpixGetWpl(dpixd); dpixGetDimensions(dpixs2, &ws, &hs); dpixGetDimensions(dpixd, &w, &h); w = L_MIN(ws, w); h = L_MIN(hs, h); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) lined[j] = a * lined[j] + b * lines[j]; } return dpixd; } /*! * dpixAddMultConstant() * * Input: dpix * addc (use 0.0 to skip the operation) * multc (use 1.0 to skip the operation) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place operation. * (2) It can be used to multiply each pixel by a constant, * and also to add a constant to each pixel. Multiplication * is done first. */ l_int32 dpixAddMultConstant(DPIX *dpix, l_float64 addc, l_float64 multc) { l_int32 i, j, w, h, wpl; l_float64 *line, *data; PROCNAME("dpixAddMultConstant"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); if (addc == 0.0 && multc == 1.0) return 0; dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); for (i = 0; i < h; i++) { line = data + i * wpl; if (addc == 0.0) { for (j = 0; j < w; j++) line[j] *= multc; } else if (multc == 1.0) { for (j = 0; j < w; j++) line[j] += addc; } else { for (j = 0; j < w; j++) line[j] = multc * line[j] + addc; } } return 0; } /*--------------------------------------------------------------------* * Set all * *--------------------------------------------------------------------*/ /*! * fpixSetAllArbitrary() * * Input: fpix * val (to set at each pixel) * Return: 0 if OK, 1 on error */ l_int32 fpixSetAllArbitrary(FPIX *fpix, l_float32 inval) { l_int32 i, j, w, h; l_float32 *data, *line; PROCNAME("fpixSetAllArbitrary"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpixGetDimensions(fpix, &w, &h); data = fpixGetData(fpix); for (i = 0; i < h; i++) { line = data + i * w; for (j = 0; j < w; j++) *(line + j) = inval; } return 0; } /*! * dpixSetAllArbitrary() * * Input: dpix * val (to set at each pixel) * Return: 0 if OK, 1 on error */ l_int32 dpixSetAllArbitrary(DPIX *dpix, l_float64 inval) { l_int32 i, j, w, h; l_float64 *data, *line; PROCNAME("dpixSetAllArbitrary"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpixGetDimensions(dpix, &w, &h); data = dpixGetData(dpix); for (i = 0; i < h; i++) { line = data + i * w; for (j = 0; j < w; j++) *(line + j) = inval; } return 0; } /*--------------------------------------------------------------------* * Border functions * *--------------------------------------------------------------------*/ /*! * fpixAddBorder() * * Input: fpixs * left, right, top, bot (pixels on each side to be added) * Return: fpixd, or null on error * * Notes: * (1) Adds border of '0' 32-bit pixels */ FPIX * fpixAddBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 ws, hs, wd, hd; FPIX *fpixd; PROCNAME("fpixAddBorder"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (left <= 0 && right <= 0 && top <= 0 && bot <= 0) return fpixCopy(NULL, fpixs); fpixGetDimensions(fpixs, &ws, &hs); wd = ws + left + right; hd = hs + top + bot; if ((fpixd = fpixCreate(wd, hd)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); fpixCopyResolution(fpixd, fpixs); fpixRasterop(fpixd, left, top, ws, hs, fpixs, 0, 0); return fpixd; } /*! * fpixRemoveBorder() * * Input: fpixs * left, right, top, bot (pixels on each side to be removed) * Return: fpixd, or null on error */ FPIX * fpixRemoveBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 ws, hs, wd, hd; FPIX *fpixd; PROCNAME("fpixRemoveBorder"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (left <= 0 && right <= 0 && top <= 0 && bot <= 0) return fpixCopy(NULL, fpixs); fpixGetDimensions(fpixs, &ws, &hs); wd = ws - left - right; hd = hs - top - bot; if (wd <= 0 || hd <= 0) return (FPIX *)ERROR_PTR("width & height not both > 0", procName, NULL); if ((fpixd = fpixCreate(wd, hd)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); fpixCopyResolution(fpixd, fpixs); fpixRasterop(fpixd, 0, 0, wd, hd, fpixs, left, top); return fpixd; } /*! * fpixAddMirroredBorder() * * Input: fpixs * left, right, top, bot (pixels on each side to be added) * Return: fpixd, or null on error * * Notes: * (1) See pixAddMirroredBorder() for situations of usage. */ FPIX * fpixAddMirroredBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; FPIX *fpixd; PROCNAME("fpixAddMirroredBorder"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixd = fpixAddBorder(fpixs, left, right, top, bot); fpixGetDimensions(fpixs, &w, &h); for (j = 0; j < left; j++) fpixRasterop(fpixd, left - 1 - j, top, 1, h, fpixd, left + j, top); for (j = 0; j < right; j++) fpixRasterop(fpixd, left + w + j, top, 1, h, fpixd, left + w - 1 - j, top); for (i = 0; i < top; i++) fpixRasterop(fpixd, 0, top - 1 - i, left + w + right, 1, fpixd, 0, top + i); for (i = 0; i < bot; i++) fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1, fpixd, 0, top + h - 1 - i); return fpixd; } /*! * fpixAddContinuedBorder() * * Input: fpixs * left, right, top, bot (pixels on each side to be added) * Return: fpixd, or null on error * * Notes: * (1) This adds pixels on each side whose values are equal to * the value on the closest boundary pixel. */ FPIX * fpixAddContinuedBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; FPIX *fpixd; PROCNAME("fpixAddContinuedBorder"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixd = fpixAddBorder(fpixs, left, right, top, bot); fpixGetDimensions(fpixs, &w, &h); for (j = 0; j < left; j++) fpixRasterop(fpixd, j, top, 1, h, fpixd, left, top); for (j = 0; j < right; j++) fpixRasterop(fpixd, left + w + j, top, 1, h, fpixd, left + w - 1, top); for (i = 0; i < top; i++) fpixRasterop(fpixd, 0, i, left + w + right, 1, fpixd, 0, top); for (i = 0; i < bot; i++) fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1, fpixd, 0, top + h - 1); return fpixd; } /*! * fpixAddSlopeBorder() * * Input: fpixs * left, right, top, bot (pixels on each side to be added) * Return: fpixd, or null on error * * Notes: * (1) This adds pixels on each side whose values have a normal * derivative equal to the normal derivative at the boundary * of fpixs. */ FPIX * fpixAddSlopeBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h, fullw, fullh; l_float32 val1, val2, del; FPIX *fpixd; PROCNAME("fpixAddSlopeBorder"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixd = fpixAddBorder(fpixs, left, right, top, bot); fpixGetDimensions(fpixs, &w, &h); /* Left */ for (i = top; i < top + h; i++) { fpixGetPixel(fpixd, left, i, &val1); fpixGetPixel(fpixd, left + 1, i, &val2); del = val1 - val2; for (j = 0; j < left; j++) fpixSetPixel(fpixd, j, i, val1 + del * (left - j)); } /* Right */ fullw = left + w + right; for (i = top; i < top + h; i++) { fpixGetPixel(fpixd, left + w - 1, i, &val1); fpixGetPixel(fpixd, left + w - 2, i, &val2); del = val1 - val2; for (j = left + w; j < fullw; j++) fpixSetPixel(fpixd, j, i, val1 + del * (j - left - w + 1)); } /* Top */ for (j = 0; j < fullw; j++) { fpixGetPixel(fpixd, j, top, &val1); fpixGetPixel(fpixd, j, top + 1, &val2); del = val1 - val2; for (i = 0; i < top; i++) fpixSetPixel(fpixd, j, i, val1 + del * (top - i)); } /* Bottom */ fullh = top + h + bot; for (j = 0; j < fullw; j++) { fpixGetPixel(fpixd, j, top + h - 1, &val1); fpixGetPixel(fpixd, j, top + h - 2, &val2); del = val1 - val2; for (i = top + h; i < fullh; i++) fpixSetPixel(fpixd, j, i, val1 + del * (i - top - h + 1)); } return fpixd; } /*--------------------------------------------------------------------* * Simple rasterop * *--------------------------------------------------------------------*/ /*! * fpixRasterop() * * Input: fpixd (dest fpix) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * fpixs (src fpix) * sx (x val of UL corner of src rectangle) * sy (y val of UL corner of src rectangle) * Return: 0 if OK; 1 on error. * * Notes: * (1) This is similiar in structure to pixRasterop(), except * it only allows copying from the source into the destination. * For that reason, no op code is necessary. Additionally, * all pixels are 32 bit words (float values), which makes * the copy very simple. * (2) Clipping of both src and dest fpix are done automatically. * (3) This allows in-place copying, without checking to see if * the result is valid: use for in-place with caution! */ l_int32 fpixRasterop(FPIX *fpixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, FPIX *fpixs, l_int32 sx, l_int32 sy) { l_int32 fsw, fsh, fdw, fdh, dhangw, shangw, dhangh, shangh; l_int32 i, j, wpls, wpld; l_float32 *datas, *datad, *lines, *lined; PROCNAME("fpixRasterop"); if (!fpixs) return ERROR_INT("fpixs not defined", procName, 1); if (!fpixd) return ERROR_INT("fpixd not defined", procName, 1); /* -------------------------------------------------------- * * Clip to maximum rectangle with both src and dest * * -------------------------------------------------------- */ fpixGetDimensions(fpixs, &fsw, &fsh); fpixGetDimensions(fpixd, &fdw, &fdh); /* First clip horizontally (sx, dx, dw) */ if (dx < 0) { sx -= dx; /* increase sx */ dw += dx; /* reduce dw */ dx = 0; } if (sx < 0) { dx -= sx; /* increase dx */ dw += sx; /* reduce dw */ sx = 0; } dhangw = dx + dw - fdw; /* rect overhang of dest to right */ if (dhangw > 0) dw -= dhangw; /* reduce dw */ shangw = sx + dw - fsw; /* rect overhang of src to right */ if (shangw > 0) dw -= shangw; /* reduce dw */ /* Then clip vertically (sy, dy, dh) */ if (dy < 0) { sy -= dy; /* increase sy */ dh += dy; /* reduce dh */ dy = 0; } if (sy < 0) { dy -= sy; /* increase dy */ dh += sy; /* reduce dh */ sy = 0; } dhangh = dy + dh - fdh; /* rect overhang of dest below */ if (dhangh > 0) dh -= dhangh; /* reduce dh */ shangh = sy + dh - fsh; /* rect overhang of src below */ if (shangh > 0) dh -= shangh; /* reduce dh */ /* if clipped entirely, quit */ if ((dw <= 0) || (dh <= 0)) return 0; /* -------------------------------------------------------- * * Copy block of data * * -------------------------------------------------------- */ datas = fpixGetData(fpixs); datad = fpixGetData(fpixd); wpls = fpixGetWpl(fpixs); wpld = fpixGetWpl(fpixd); datas += sy * wpls + sx; /* at UL corner of block */ datad += dy * wpld + dx; /* at UL corner of block */ for (i = 0; i < dh; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < dw; j++) { *lined = *lines; lines++; lined++; } } return 0; } /*--------------------------------------------------------------------* * Rotation by multiples of 90 degrees * *--------------------------------------------------------------------*/ /*! * fpixRotateOrth() * * Input: fpixs * quads (0-3; number of 90 degree cw rotations) * Return: fpixd, or null on error */ FPIX * fpixRotateOrth(FPIX *fpixs, l_int32 quads) { PROCNAME("fpixRotateOrth"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (quads < 0 || quads > 3) return (FPIX *)ERROR_PTR("quads not in {0,1,2,3}", procName, NULL); if (quads == 0) return fpixCopy(NULL, fpixs); else if (quads == 1) return fpixRotate90(fpixs, 1); else if (quads == 2) return fpixRotate180(NULL, fpixs); else /* quads == 3 */ return fpixRotate90(fpixs, -1); } /*! * fpixRotate180() * * Input: fpixd (; can be null, equal to fpixs, * or different from fpixs) * fpixs * Return: fpixd, or null on error * * Notes: * (1) This does a 180 rotation of the image about the center, * which is equivalent to a left-right flip about a vertical * line through the image center, followed by a top-bottom * flip about a horizontal line through the image center. * (2) There are 3 cases for input: * (a) fpixd == null (creates a new fpixd) * (b) fpixd == fpixs (in-place operation) * (c) fpixd != fpixs (existing fpixd) * (3) For clarity, use these three patterns, respectively: * (a) fpixd = fpixRotate180(NULL, fpixs); * (b) fpixRotate180(fpixs, fpixs); * (c) fpixRotate180(fpixd, fpixs); */ FPIX * fpixRotate180(FPIX *fpixd, FPIX *fpixs) { PROCNAME("fpixRotate180"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); /* Prepare pixd for in-place operation */ if ((fpixd = fpixCopy(fpixd, fpixs)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); fpixFlipLR(fpixd, fpixd); fpixFlipTB(fpixd, fpixd); return fpixd; } /*! * fpixRotate90() * * Input: fpixs * direction (1 = clockwise, -1 = counter-clockwise) * Return: fpixd, or null on error * * Notes: * (1) This does a 90 degree rotation of the image about the center, * either cw or ccw, returning a new pix. * (2) The direction must be either 1 (cw) or -1 (ccw). */ FPIX * fpixRotate90(FPIX *fpixs, l_int32 direction) { l_int32 i, j, wd, hd, wpls, wpld; l_float32 *datas, *datad, *lines, *lined; FPIX *fpixd; PROCNAME("fpixRotate90"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (direction != 1 && direction != -1) return (FPIX *)ERROR_PTR("invalid direction", procName, NULL); fpixGetDimensions(fpixs, &hd, &wd); if ((fpixd = fpixCreate(wd, hd)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); fpixCopyResolution(fpixd, fpixs); datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); if (direction == 1) { /* clockwise */ for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas + (wd - 1) * wpls; for (j = 0; j < wd; j++) { lined[j] = lines[i]; lines -= wpls; } } } else { /* ccw */ for (i = 0; i < hd; i++) { lined = datad + i * wpld; lines = datas; for (j = 0; j < wd; j++) { lined[j] = lines[hd - 1 - i]; lines += wpls; } } } return fpixd; } /*! * pixFlipLR() * * Input: fpixd (; can be null, equal to fpixs, * or different from fpixs) * fpixs * Return: fpixd, or null on error * * Notes: * (1) This does a left-right flip of the image, which is * equivalent to a rotation out of the plane about a * vertical line through the image center. * (2) There are 3 cases for input: * (a) fpixd == null (creates a new fpixd) * (b) fpixd == fpixs (in-place operation) * (c) fpixd != fpixs (existing fpixd) * (3) For clarity, use these three patterns, respectively: * (a) fpixd = fpixFlipLR(NULL, fpixs); * (b) fpixFlipLR(fpixs, fpixs); * (c) fpixFlipLR(fpixd, fpixs); * (4) If an existing fpixd is not the same size as fpixs, the * image data will be reallocated. */ FPIX * fpixFlipLR(FPIX *fpixd, FPIX *fpixs) { l_int32 i, j, w, h, wpl, bpl; l_float32 *line, *data, *buffer; PROCNAME("fpixFlipLR"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixGetDimensions(fpixs, &w, &h); /* Prepare fpixd for in-place operation */ if ((fpixd = fpixCopy(fpixd, fpixs)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); data = fpixGetData(fpixd); wpl = fpixGetWpl(fpixd); /* 4-byte words */ bpl = 4 * wpl; if ((buffer = (l_float32 *)CALLOC(wpl, sizeof(l_float32))) == NULL) return (FPIX *)ERROR_PTR("buffer not made", procName, NULL); for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) line[j] = buffer[w - 1 - j]; } FREE(buffer); return fpixd; } /*! * fpixFlipTB() * * Input: fpixd (; can be null, equal to fpixs, * or different from fpixs) * fpixs * Return: fpixd, or null on error * * Notes: * (1) This does a top-bottom flip of the image, which is * equivalent to a rotation out of the plane about a * horizontal line through the image center. * (2) There are 3 cases for input: * (a) fpixd == null (creates a new fpixd) * (b) fpixd == fpixs (in-place operation) * (c) fpixd != fpixs (existing fpixd) * (3) For clarity, use these three patterns, respectively: * (a) fpixd = fpixFlipTB(NULL, fpixs); * (b) fpixFlipTB(fpixs, fpixs); * (c) fpixFlipTB(fpixd, fpixs); * (4) If an existing fpixd is not the same size as fpixs, the * image data will be reallocated. */ FPIX * fpixFlipTB(FPIX *fpixd, FPIX *fpixs) { l_int32 i, k, h, h2, wpl, bpl; l_float32 *linet, *lineb, *data, *buffer; PROCNAME("fpixFlipTB"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); /* Prepare fpixd for in-place operation */ if ((fpixd = fpixCopy(fpixd, fpixs)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); data = fpixGetData(fpixd); wpl = fpixGetWpl(fpixd); fpixGetDimensions(fpixd, NULL, &h); if ((buffer = (l_float32 *)CALLOC(wpl, sizeof(l_float32))) == NULL) return (FPIX *)ERROR_PTR("buffer not made", procName, NULL); h2 = h / 2; bpl = 4 * wpl; for (i = 0, k = h - 1; i < h2; i++, k--) { linet = data + i * wpl; lineb = data + k * wpl; memcpy(buffer, linet, bpl); memcpy(linet, lineb, bpl); memcpy(lineb, buffer, bpl); } FREE(buffer); return fpixd; } /*--------------------------------------------------------------------* * Affine and projective interpolated transforms * *--------------------------------------------------------------------*/ /*! * fpixAffinePta() * * Input: fpixs (8 bpp) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * border (size of extension with constant normal derivative) * inval (value brought in; typ. 0) * Return: fpixd, or null on error * * Notes: * (1) If @border > 0, all four sides are extended by that distance, * and removed after the transformation is finished. Pixels * that would be brought in to the trimmed result from outside * the extended region are assigned @inval. The purpose of * extending the image is to avoid such assignments. * (2) On the other hand, you may want to give all pixels that * are brought in from outside fpixs a specific value. In that * case, set @border == 0. */ FPIX * fpixAffinePta(FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval) { l_float32 *vc; PTA *ptas2, *ptad2; FPIX *fpixs2, *fpixd, *fpixd2; PROCNAME("fpixAffinePta"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (!ptas) return (FPIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (FPIX *)ERROR_PTR("ptad not defined", procName, NULL); /* If a border is to be added, also translate the ptas */ if (border > 0) { ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); fpixs2 = fpixAddSlopeBorder(fpixs, border, border, border, border); } else { ptas2 = ptaClone(ptas); ptad2 = ptaClone(ptad); fpixs2 = fpixClone(fpixs); } /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad2, ptas2, &vc); fpixd2 = fpixAffine(fpixs2, vc, inval); fpixDestroy(&fpixs2); ptaDestroy(&ptas2); ptaDestroy(&ptad2); FREE(vc); if (border == 0) return fpixd2; /* Remove the added border */ fpixd = fpixRemoveBorder(fpixd2, border, border, border, border); fpixDestroy(&fpixd2); return fpixd; } /*! * fpixAffine() * * Input: fpixs (8 bpp) * vc (vector of 8 coefficients for projective transformation) * inval (value brought in; typ. 0) * Return: fpixd, or null on error */ FPIX * fpixAffine(FPIX *fpixs, l_float32 *vc, l_float32 inval) { l_int32 i, j, w, h, wpld; l_float32 val; l_float32 *datas, *datad, *lined; l_float32 x, y; FPIX *fpixd; PROCNAME("fpixAffine"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixGetDimensions(fpixs, &w, &h); if (!vc) return (FPIX *)ERROR_PTR("vc not defined", procName, NULL); datas = fpixGetData(fpixs); fpixd = fpixCreateTemplate(fpixs); fpixSetAllArbitrary(fpixd, inval); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ affineXformPt(vc, j, i, &x, &y); linearInterpolatePixelFloat(datas, w, h, x, y, inval, &val); *(lined + j) = val; } } return fpixd; } /*! * fpixProjectivePta() * * Input: fpixs (8 bpp) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * border (size of extension with constant normal derivative) * inval (value brought in; typ. 0) * Return: fpixd, or null on error * * Notes: * (1) If @border > 0, all four sides are extended by that distance, * and removed after the transformation is finished. Pixels * that would be brought in to the trimmed result from outside * the extended region are assigned @inval. The purpose of * extending the image is to avoid such assignments. * (2) On the other hand, you may want to give all pixels that * are brought in from outside fpixs a specific value. In that * case, set @border == 0. */ FPIX * fpixProjectivePta(FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval) { l_float32 *vc; PTA *ptas2, *ptad2; FPIX *fpixs2, *fpixd, *fpixd2; PROCNAME("fpixProjectivePta"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (!ptas) return (FPIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (FPIX *)ERROR_PTR("ptad not defined", procName, NULL); /* If a border is to be added, also translate the ptas */ if (border > 0) { ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); fpixs2 = fpixAddSlopeBorder(fpixs, border, border, border, border); } else { ptas2 = ptaClone(ptas); ptad2 = ptaClone(ptad); fpixs2 = fpixClone(fpixs); } /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad2, ptas2, &vc); fpixd2 = fpixProjective(fpixs2, vc, inval); fpixDestroy(&fpixs2); ptaDestroy(&ptas2); ptaDestroy(&ptad2); FREE(vc); if (border == 0) return fpixd2; /* Remove the added border */ fpixd = fpixRemoveBorder(fpixd2, border, border, border, border); fpixDestroy(&fpixd2); return fpixd; } /*! * fpixProjective() * * Input: fpixs (8 bpp) * vc (vector of 8 coefficients for projective transformation) * inval (value brought in; typ. 0) * Return: fpixd, or null on error */ FPIX * fpixProjective(FPIX *fpixs, l_float32 *vc, l_float32 inval) { l_int32 i, j, w, h, wpld; l_float32 val; l_float32 *datas, *datad, *lined; l_float32 x, y; FPIX *fpixd; PROCNAME("fpixProjective"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixGetDimensions(fpixs, &w, &h); if (!vc) return (FPIX *)ERROR_PTR("vc not defined", procName, NULL); datas = fpixGetData(fpixs); fpixd = fpixCreateTemplate(fpixs); fpixSetAllArbitrary(fpixd, inval); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ projectiveXformPt(vc, j, i, &x, &y); linearInterpolatePixelFloat(datas, w, h, x, y, inval, &val); *(lined + j) = val; } } return fpixd; } /*! * linearInterpolatePixelFloat() * * Input: datas (ptr to beginning of float image data) * wpls (32-bit word/line for this data array) * w, h (of image) * x, y (floating pt location for evaluation) * inval (float value brought in from the outside when the * input x,y location is outside the image) * &val ( interpolated float value) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a standard linear interpolation function. It is * equivalent to area weighting on each component, and * avoids "jaggies" when rendering sharp edges. */ l_int32 linearInterpolatePixelFloat(l_float32 *datas, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_float32 inval, l_float32 *pval) { l_int32 xpm, ypm, xp, yp, xf, yf; l_float32 v00, v01, v10, v11; l_float32 *lines; PROCNAME("linearInterpolatePixelFloat"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = inval; if (!datas) return ERROR_INT("datas not defined", procName, 1); /* Skip if off the edge */ if (x < 0.0 || y < 0.0 || x > w - 2.0 || y > h - 2.0) return 0; xpm = (l_int32)(16.0 * x + 0.5); ypm = (l_int32)(16.0 * y + 0.5); xp = xpm >> 4; yp = ypm >> 4; xf = xpm & 0x0f; yf = ypm & 0x0f; #if DEBUG if (xf < 0 || yf < 0) fprintf(stderr, "xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); #endif /* DEBUG */ /* Interpolate by area weighting. */ lines = datas + yp * w; v00 = (16.0 - xf) * (16.0 - yf) * (*(lines + xp)); v10 = xf * (16.0 - yf) * (*(lines + xp + 1)); v01 = (16.0 - xf) * yf * (*(lines + w + xp)); v11 = xf * yf * (*(lines + w + xp + 1)); *pval = (v00 + v01 + v10 + v11) / 256.0; return 0; } /*--------------------------------------------------------------------* * Thresholding to 1 bpp Pix * *--------------------------------------------------------------------*/ /*! * fpixThresholdToPix() * * Input: fpix * thresh * Return: pixd (1 bpp), or null on error * * Notes: * (1) For all values of fpix that are <= thresh, sets the pixel * in pixd to 1. */ PIX * fpixThresholdToPix(FPIX *fpix, l_float32 thresh) { l_int32 i, j, w, h, wpls, wpld; l_float32 *datas, *lines; l_uint32 *datad, *lined; PIX *pixd; PROCNAME("fpixThresholdToPix"); if (!fpix) return (PIX *)ERROR_PTR("fpix not defined", procName, NULL); fpixGetDimensions(fpix, &w, &h); datas = fpixGetData(fpix); wpls = fpixGetWpl(fpix); pixd = pixCreate(w, h, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (lines[j] <= thresh) SET_DATA_BIT(lined, j); } } return pixd; } /*--------------------------------------------------------------------* * Generate function from components * *--------------------------------------------------------------------*/ /*! * pixComponentFunction() * * Input: pix (32 bpp rgb) * rnum, gnum, bnum (coefficients for numerator) * rdenom, gdenom, bdenom (coefficients for denominator) * Return: fpixd, or null on error * * Notes: * (1) This stores a function of the component values of each * input pixel in @fpixd. * (2) The function is a ratio of linear combinations of component values. * There are two special cases for denominator coefficients: * (a) The denominator is 1.0: input 0 for all denominator coefficients * (b) Only one component is used in the denominator: input 1.0 * for that denominator component and 0.0 for the other two. * (3) If the denominator is 0, multiply by an arbitrary number that * is much larger than 1. Choose 256 "arbitrarily". * */ FPIX * pixComponentFunction(PIX *pix, l_float32 rnum, l_float32 gnum, l_float32 bnum, l_float32 rdenom, l_float32 gdenom, l_float32 bdenom) { l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, zerodenom, onedenom; l_float32 fnum, fdenom; l_uint32 *datas, *lines; l_float32 *datad, *lined, *recip; FPIX *fpixd; PROCNAME("pixComponentFunction"); if (!pix || pixGetDepth(pix) != 32) return (FPIX *)ERROR_PTR("pix undefined or not 32 bpp", procName, NULL); pixGetDimensions(pix, &w, &h, NULL); datas = pixGetData(pix); wpls = pixGetWpl(pix); fpixd = fpixCreate(w, h); datad = fpixGetData(fpixd); wpld = fpixGetWpl(fpixd); zerodenom = (rdenom == 0.0 && gdenom == 0.0 && bdenom == 0.0) ? 1: 0; onedenom = ((rdenom == 1.0 && gdenom == 0.0 && bdenom == 0.0) || (rdenom == 0.0 && gdenom == 1.0 && bdenom == 0.0) || (rdenom == 0.0 && gdenom == 0.0 && bdenom == 1.0)) ? 1 : 0; recip = NULL; if (onedenom) { recip = (l_float32 *)CALLOC(256, sizeof(l_float32)); recip[0] = 256; /* arbitrary large number */ for (i = 1; i < 256; i++) recip[i] = 1.0 / (l_float32)i; } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (zerodenom) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = rnum * rval + gnum * gval + bnum * bval; } } else if (onedenom && rdenom == 1.0) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = recip[rval] * (rnum * rval + gnum * gval + bnum * bval); } } else if (onedenom && gdenom == 1.0) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = recip[gval] * (rnum * rval + gnum * gval + bnum * bval); } } else if (onedenom && bdenom == 1.0) { for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); lined[j] = recip[bval] * (rnum * rval + gnum * gval + bnum * bval); } } else { /* general case */ for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); fnum = rnum * rval + gnum * gval + bnum * bval; fdenom = rdenom * rval + gdenom * gval + bdenom * bval; lined[j] = (fdenom == 0) ? 256.0 * fnum : fnum / fdenom; } } } FREE(recip); return fpixd; } leptonica-1.70/src/convolve.c0000640000175000017500000022345012244203353014273 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * convolve.c * * Top level grayscale or color block convolution * PIX *pixBlockconv() * * Grayscale block convolution * PIX *pixBlockconvGray() * * Accumulator for 1, 8 and 32 bpp convolution * PIX *pixBlockconvAccum() * * Un-normalized grayscale block convolution * PIX *pixBlockconvGrayUnnormalized() * * Tiled grayscale or color block convolution * PIX *pixBlockconvTiled() * PIX *pixBlockconvGrayTile() * * Convolution for mean, mean square, variance and rms deviation * in specified window * l_int32 pixWindowedStats() * PIX *pixWindowedMean() * PIX *pixWindowedMeanSquare() * l_int32 pixWindowedVariance() * DPIX *pixMeanSquareAccum() * * Binary block sum and rank filter * PIX *pixBlockrank() * PIX *pixBlocksum() * * Census transform * PIX *pixCensusTransform() * * Generic convolution (with Pix) * PIX *pixConvolve() * PIX *pixConvolveSep() * PIX *pixConvolveRGB() * PIX *pixConvolveRGBSep() * * Generic convolution (with float arrays) * FPIX *fpixConvolve() * FPIX *fpixConvolveSep() * * Convolution with bias (for non-negative output) * PIX *pixConvolveWithBias() * * Set parameter for convolution subsampling * void l_setConvolveSampling() * * Additive gaussian noise * PIX *pixAddGaussNoise() * l_float32 gaussDistribSampling() */ #include #include "allheaders.h" /* These globals determine the subsampling factors for * generic convolution of pix and fpix. Declare extern to use. * To change the values, use l_setConvolveSampling(). */ LEPT_DLL l_int32 ConvolveSamplingFactX = 1; LEPT_DLL l_int32 ConvolveSamplingFactY = 1; /*----------------------------------------------------------------------* * Top-level grayscale or color block convolution * *----------------------------------------------------------------------*/ /*! * pixBlockconv() * * Input: pix (8 or 32 bpp; or 2, 4 or 8 bpp with colormap) * wc, hc (half width/height of convolution kernel) * Return: pixd, or null on error * * Notes: * (1) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1) * (2) Returns a copy if both wc and hc are 0 * (3) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1, * where (w,h) are the dimensions of pixs. */ PIX * pixBlockconv(PIX *pix, l_int32 wc, l_int32 hc) { l_int32 w, h, d; PIX *pixs, *pixd, *pixr, *pixrc, *pixg, *pixgc, *pixb, *pixbc; PROCNAME("pixBlockconv"); if (!pix) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); if (wc < 0) wc = 0; if (hc < 0) hc = 0; pixGetDimensions(pix, &w, &h, &d); if (w < 2 * wc + 1 || h < 2 * hc + 1) { wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); L_WARNING("kernel too large; reducing!\n", procName); L_INFO("wc = %d, hc = %d\n", procName, wc, hc); } if (wc == 0 && hc == 0) /* no-op */ return pixCopy(NULL, pix); /* Remove colormap if necessary */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", procName); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else { pixs = pixClone(pix); } if (d != 8 && d != 32) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, NULL); } if (d == 8) { pixd = pixBlockconvGray(pixs, NULL, wc, hc); } else { /* d == 32 */ pixr = pixGetRGBComponent(pixs, COLOR_RED); pixrc = pixBlockconvGray(pixr, NULL, wc, hc); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixgc = pixBlockconvGray(pixg, NULL, wc, hc); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixbc = pixBlockconvGray(pixb, NULL, wc, hc); pixDestroy(&pixb); pixd = pixCreateRGBImage(pixrc, pixgc, pixbc); pixDestroy(&pixrc); pixDestroy(&pixgc); pixDestroy(&pixbc); } pixDestroy(&pixs); return pixd; } /*----------------------------------------------------------------------* * Grayscale block convolution * *----------------------------------------------------------------------*/ /*! * pixBlockconvGray() * * Input: pix (8 bpp) * accum pix (32 bpp; can be null) * wc, hc (half width/height of convolution kernel) * Return: pix (8 bpp), or null on error * * Notes: * (1) If accum pix is null, make one and destroy it before * returning; otherwise, just use the input accum pix. * (2) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1). * (3) Returns a copy if both wc and hc are 0. * (4) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1, * where (w,h) are the dimensions of pixs. */ PIX * pixBlockconvGray(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc) { l_int32 w, h, d, wpl, wpla; l_uint32 *datad, *dataa; PIX *pixd, *pixt; PROCNAME("pixBlockconvGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (wc < 0) wc = 0; if (hc < 0) hc = 0; if (w < 2 * wc + 1 || h < 2 * hc + 1) { wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); L_WARNING("kernel too large; reducing!\n", procName); L_INFO("wc = %d, hc = %d\n", procName, wc, hc); } if (wc == 0 && hc == 0) /* no-op */ return pixCopy(NULL, pixs); if (pixacc) { if (pixGetDepth(pixacc) == 32) { pixt = pixClone(pixacc); } else { L_WARNING("pixacc not 32 bpp; making new one\n", procName); if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); } } else { if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); } if ((pixd = pixCreateTemplate(pixs)) == NULL) { pixDestroy(&pixt); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } wpl = pixGetWpl(pixs); wpla = pixGetWpl(pixt); datad = pixGetData(pixd); dataa = pixGetData(pixt); blockconvLow(datad, w, h, wpl, dataa, wpla, wc, hc); pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Accumulator for 1, 8 and 32 bpp convolution * *----------------------------------------------------------------------*/ /*! * pixBlockconvAccum() * * Input: pixs (1, 8 or 32 bpp) * Return: accum pix (32 bpp), or null on error. * * Notes: * (1) The general recursion relation is * a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1) * For the first line, this reduces to the special case * a(i,j) = v(i,j) + a(i, j-1) * For the first column, the special case is * a(i,j) = v(i,j) + a(i-1, j) */ PIX * pixBlockconvAccum(PIX *pixs) { l_int32 w, h, d, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixBlockconvAccum"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 1, 8 or 32 bpp", procName, NULL); if ((pixd = pixCreate(w, h, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); blockconvAccumLow(datad, w, h, wpld, datas, d, wpls); return pixd; } /*----------------------------------------------------------------------* * Un-normalized grayscale block convolution * *----------------------------------------------------------------------*/ /*! * pixBlockconvGrayUnnormalized() * * Input: pixs (8 bpp) * wc, hc (half width/height of convolution kernel) * Return: pix (32 bpp; containing the convolution without normalizing * for the window size), or null on error * * Notes: * (1) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1). * (2) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1, * where (w,h) are the dimensions of pixs. * (3) Returns a copy if both wc and hc are 0. * (3) Adds mirrored border to avoid treating the boundary pixels * specially. Note that we add wc + 1 pixels to the left * and wc to the right. The added width is 2 * wc + 1 pixels, * and the particular choice simplifies the indexing in the loop. * Likewise, add hc + 1 pixels to the top and hc to the bottom. * (4) To get the normalized result, divide by the area of the * convolution kernel: (2 * wc + 1) * (2 * hc + 1) * Specifically, do this: * pixc = pixBlockconvGrayUnnormalized(pixs, wc, hc); * fract = 1. / ((2 * wc + 1) * (2 * hc + 1)); * pixMultConstantGray(pixc, fract); * pixd = pixGetRGBComponent(pixc, L_ALPHA_CHANNEL); * (5) Unlike pixBlockconvGray(), this always computes the accumulation * pix because its size is tied to wc and hc. * (6) Compare this implementation with pixBlockconvGray(), where * most of the code in blockconvLow() is special casing for * efficiently handling the boundary. Here, the use of * mirrored borders and destination indexing makes the * implementation very simple. */ PIX * pixBlockconvGrayUnnormalized(PIX *pixs, l_int32 wc, l_int32 hc) { l_int32 i, j, w, h, d, wpla, wpld, jmax; l_uint32 *linemina, *linemaxa, *lined, *dataa, *datad; PIX *pixsb, *pixacc, *pixd; PROCNAME("pixBlockconvGrayUnnormalized"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (wc < 0) wc = 0; if (hc < 0) hc = 0; if (w < 2 * wc + 1 || h < 2 * hc + 1) { wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); L_WARNING("kernel too large; reducing!\n", procName); L_INFO("wc = %d, hc = %d\n", procName, wc, hc); } if (wc == 0 && hc == 0) /* no-op */ return pixCopy(NULL, pixs); if ((pixsb = pixAddMirroredBorder(pixs, wc + 1, wc, hc + 1, hc)) == NULL) return (PIX *)ERROR_PTR("pixsb not made", procName, NULL); pixacc = pixBlockconvAccum(pixsb); pixDestroy(&pixsb); if (!pixacc) return (PIX *)ERROR_PTR("pixacc not made", procName, NULL); if ((pixd = pixCreate(w, h, 32)) == NULL) { pixDestroy(&pixacc); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } wpla = pixGetWpl(pixacc); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); dataa = pixGetData(pixacc); for (i = 0; i < h; i++) { lined = datad + i * wpld; linemina = dataa + i * wpla; linemaxa = dataa + (i + 2 * hc + 1) * wpla; for (j = 0; j < w; j++) { jmax = j + 2 * wc + 1; lined[j] = linemaxa[jmax] - linemaxa[j] - linemina[jmax] + linemina[j]; } } pixDestroy(&pixacc); return pixd; } /*----------------------------------------------------------------------* * Tiled grayscale or color block convolution * *----------------------------------------------------------------------*/ /*! * pixBlockconvTiled() * * Input: pix (8 or 32 bpp; or 2, 4 or 8 bpp with colormap) * wc, hc (half width/height of convolution kernel) * nx, ny (subdivision into tiles) * Return: pixd, or null on error * * Notes: * (1) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1) * (2) Returns a copy if both wc and hc are 0 * (3) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1, * where (w,h) are the dimensions of pixs. * (4) For nx == ny == 1, this defaults to pixBlockconv(), which * is typically about twice as fast, and gives nearly * identical results as pixBlockconvGrayTile(). * (5) If the tiles are too small, nx and/or ny are reduced * a minimum amount so that the tiles are expanded to the * smallest workable size in the problematic direction(s). * (6) Why a tiled version? Three reasons: * (a) Because the accumulator is a uint32, overflow can occur * for an image with more than 16M pixels. * (b) The accumulator array for 16M pixels is 64 MB; using * tiles reduces the size of this array. * (c) Each tile can be processed independently, in parallel, * on a multicore processor. */ PIX * pixBlockconvTiled(PIX *pix, l_int32 wc, l_int32 hc, l_int32 nx, l_int32 ny) { l_int32 i, j, w, h, d, xrat, yrat; PIX *pixs, *pixd, *pixc, *pixt; PIX *pixr, *pixrc, *pixg, *pixgc, *pixb, *pixbc; PIXTILING *pt; PROCNAME("pixBlockconvTiled"); if (!pix) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); if (wc < 0) wc = 0; if (hc < 0) hc = 0; pixGetDimensions(pix, &w, &h, &d); if (w < 2 * wc + 3 || h < 2 * hc + 3) { wc = L_MAX(0, L_MIN(wc, (w - 3) / 2)); hc = L_MAX(0, L_MIN(hc, (h - 3) / 2)); L_WARNING("kernel too large; reducing!\n", procName); L_INFO("wc = %d, hc = %d\n", procName, wc, hc); } if (wc == 0 && hc == 0) /* no-op */ return pixCopy(NULL, pix); if (nx <= 1 && ny <= 1) return pixBlockconv(pix, wc, hc); /* Test to see if the tiles are too small. The required * condition is that the tile dimensions must be at least * (wc + 2) x (hc + 2). */ xrat = w / nx; yrat = h / ny; if (xrat < wc + 2) { nx = w / (wc + 2); L_WARNING("tile width too small; nx reduced to %d\n", procName, nx); } if (yrat < hc + 2) { ny = h / (hc + 2); L_WARNING("tile height too small; ny reduced to %d\n", procName, ny); } /* Remove colormap if necessary */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", procName); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else { pixs = pixClone(pix); } if (d != 8 && d != 32) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("depth not 8 or 32 bpp", procName, NULL); } /* Note that the overlaps in the width and height that * are added to the tile are (wc + 2) and (hc + 2). * These overlaps are removed by pixTilingPaintTile(). * They are larger than the extent of the filter because * although the filter is symmetric with respect to its origin, * the implementation is asymmetric -- see the implementation in * pixBlockconvGrayTile(). */ if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pt = pixTilingCreate(pixs, nx, ny, 0, 0, wc + 2, hc + 2); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); /* Convolve over the tile */ if (d == 8) { pixc = pixBlockconvGrayTile(pixt, NULL, wc, hc); } else { /* d == 32 */ pixr = pixGetRGBComponent(pixt, COLOR_RED); pixrc = pixBlockconvGrayTile(pixr, NULL, wc, hc); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixt, COLOR_GREEN); pixgc = pixBlockconvGrayTile(pixg, NULL, wc, hc); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixt, COLOR_BLUE); pixbc = pixBlockconvGrayTile(pixb, NULL, wc, hc); pixDestroy(&pixb); pixc = pixCreateRGBImage(pixrc, pixgc, pixbc); pixDestroy(&pixrc); pixDestroy(&pixgc); pixDestroy(&pixbc); } pixTilingPaintTile(pixd, i, j, pixc, pt); pixDestroy(&pixt); pixDestroy(&pixc); } } pixDestroy(&pixs); pixTilingDestroy(&pt); return pixd; } /*! * pixBlockconvGrayTile() * * Input: pixs (8 bpp gray) * pixacc (32 bpp accum pix) * wc, hc (half width/height of convolution kernel) * Return: pixd, or null on error * * Notes: * (1) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1) * (2) Assumes that the input pixs is padded with (wc + 1) pixels on * left and right, and with (hc + 1) pixels on top and bottom. * The returned pix has these stripped off; they are only used * for computation. * (3) Returns a copy if both wc and hc are 0 * (4) Require that w > 2 * wc + 1 and h > 2 * hc + 1, * where (w,h) are the dimensions of pixs. */ PIX * pixBlockconvGrayTile(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc) { l_int32 w, h, d, wd, hd, i, j, imin, imax, jmin, jmax, wplt, wpld; l_float32 norm; l_uint32 val; l_uint32 *datat, *datad, *lined, *linemint, *linemaxt; PIX *pixt, *pixd; PROCNAME("pixBlockconvGrayTile"); if (!pixs) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (wc < 0) wc = 0; if (hc < 0) hc = 0; if (w < 2 * wc + 3 || h < 2 * hc + 3) { wc = L_MAX(0, L_MIN(wc, (w - 3) / 2)); hc = L_MAX(0, L_MIN(hc, (h - 3) / 2)); L_WARNING("kernel too large; reducing!\n", procName); L_INFO("wc = %d, hc = %d\n", procName, wc, hc); } if (wc == 0 && hc == 0) return pixCopy(NULL, pixs); wd = w - 2 * wc; hd = h - 2 * hc; if (pixacc) { if (pixGetDepth(pixacc) == 32) { pixt = pixClone(pixacc); } else { L_WARNING("pixacc not 32 bpp; making new one\n", procName); if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); } } else { if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); } if ((pixd = pixCreateTemplate(pixs)) == NULL) { pixDestroy(&pixt); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); norm = 1. / (l_float32)((2 * wc + 1) * (2 * hc + 1)); /* Do the convolution over the subregion of size (wd - 2, hd - 2), * which exactly corresponds to the size of the subregion that * will be extracted by pixTilingPaintTile(). Note that the * region in which points are computed is not symmetric about * the center of the images; instead the computation in * the accumulator image is shifted up and to the left by 1, * relative to the center, because the 4 accumulator sampling * points are taken at the LL corner of the filter and at 3 other * points that are shifted -wc and -hc to the left and above. */ for (i = hc; i < hc + hd - 2; i++) { imin = L_MAX(i - hc - 1, 0); imax = L_MIN(i + hc, h - 1); lined = datad + i * wpld; linemint = datat + imin * wplt; linemaxt = datat + imax * wplt; for (j = wc; j < wc + wd - 2; j++) { jmin = L_MAX(j - wc - 1, 0); jmax = L_MIN(j + wc, w - 1); val = linemaxt[jmax] - linemaxt[jmin] + linemint[jmin] - linemint[jmax]; val = (l_uint8)(norm * val + 0.5); SET_DATA_BYTE(lined, j, val); } } pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Convolution for mean, mean square, variance and rms deviation * *----------------------------------------------------------------------*/ /*! * pixWindowedStats() * * Input: pixs (8 bpp grayscale) * wc, hc (half width/height of convolution kernel) * hasborder (use 1 if it already has (wc + 1) border pixels * on left and right, and (hc + 1) on top and bottom; * use 0 to add kernel-dependent border) * &pixm ( 8 bpp mean value in window) * &pixms ( 32 bpp mean square value in window) * &fpixv ( float variance in window) * &fpixrv ( float rms deviation from the mean) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a high-level convenience function for calculating * any or all of these derived images. * (2) If @hasborder = 0, a border is added and the result is * computed over all pixels in pixs. Otherwise, no border is * added and the border pixels are removed from the output images. * (3) These statistical measures over the pixels in the * rectangular window are: * - average value:

(pixm) * - average squared value: (pixms) * - variance: <(p -

)*(p -

)> = -

*

(pixv) * - square-root of variance: (pixrv) * where the brackets < .. > indicate that the average value is * to be taken over the window. * (4) Note that the variance is just the mean square difference from * the mean value; and the square root of the variance is the * root mean square difference from the mean, sometimes also * called the 'standard deviation'. * (5) The added border, along with the use of an accumulator array, * allows computation without special treatment of pixels near * the image boundary, and runs in a time that is independent * of the size of the convolution kernel. */ l_int32 pixWindowedStats(PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, PIX **ppixm, PIX **ppixms, FPIX **pfpixv, FPIX **pfpixrv) { PIX *pixb, *pixm, *pixms; PROCNAME("pixWindowedStats"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (wc < 2 || hc < 2) return ERROR_INT("wc and hc not >= 2", procName, 1); if (!ppixm && !ppixms && !pfpixv && !pfpixrv) return ERROR_INT("no output requested", procName, 1); if (ppixm) *ppixm = NULL; if (ppixms) *ppixms = NULL; if (pfpixv) *pfpixv = NULL; if (pfpixrv) *pfpixrv = NULL; /* Add border if requested */ if (!hasborder) pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); else pixb = pixClone(pixs); if (!pfpixv && !pfpixrv) { if (ppixm) *ppixm = pixWindowedMean(pixb, wc, hc, 1, 1); if (ppixms) *ppixms = pixWindowedMeanSquare(pixb, wc, hc, 1); pixDestroy(&pixb); return 0; } pixm = pixWindowedMean(pixb, wc, hc, 1, 1); pixms = pixWindowedMeanSquare(pixb, wc, hc, 1); pixWindowedVariance(pixm, pixms, pfpixv, pfpixrv); if (ppixm) *ppixm = pixm; else pixDestroy(&pixm); if (ppixms) *ppixms = pixms; else pixDestroy(&pixms); pixDestroy(&pixb); return 0; } /*! * pixWindowedMean() * * Input: pixs (8 or 32 bpp grayscale) * wc, hc (half width/height of convolution kernel) * hasborder (use 1 if it already has (wc + 1) border pixels * on left and right, and (hc + 1) on top and bottom; * use 0 to add kernel-dependent border) * normflag (1 for normalization to get average in window; * 0 for the sum in the window (un-normalized)) * Return: pixd (8 or 32 bpp, average over kernel window) * * Notes: * (1) The input and output depths are the same. * (2) A set of border pixels of width (wc + 1) on left and right, * and of height (hc + 1) on top and bottom, must be on the * pix before the accumulator is found. The output pixd * (after convolution) has this border removed. * If @hasborder = 0, the required border is added. * (3) Typically, @normflag == 1. However, if you want the sum * within the window, rather than a normalized convolution, * use @normflag == 0. * (4) This builds a block accumulator pix, uses it here, and * destroys it. * (5) The added border, along with the use of an accumulator array, * allows computation without special treatment of pixels near * the image boundary, and runs in a time that is independent * of the size of the convolution kernel. */ PIX * pixWindowedMean(PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, l_int32 normflag) { l_int32 i, j, w, h, d, wd, hd, wplc, wpld, wincr, hincr; l_uint32 val; l_uint32 *datac, *datad, *linec1, *linec2, *lined; l_float32 norm; PIX *pixb, *pixc, *pixd; PROCNAME("pixWindowedMean"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (wc < 2 || hc < 2) return (PIX *)ERROR_PTR("wc and hc not >= 2", procName, NULL); /* Add border if requested */ if (!hasborder) pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); else pixb = pixClone(pixs); /* The output has wc + 1 border pixels stripped from each side * of pixb, and hc + 1 border pixels stripped from top and bottom. */ pixGetDimensions(pixb, &w, &h, NULL); wd = w - 2 * (wc + 1); hd = h - 2 * (hc + 1); if (wd < 2 || hd < 2) return (PIX *)ERROR_PTR("w or h too small for kernel", procName, NULL); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); /* Make the accumulator pix from pixb */ if ((pixc = pixBlockconvAccum(pixb)) == NULL) { pixDestroy(&pixb); pixDestroy(&pixd); return (PIX *)ERROR_PTR("pixc not made", procName, NULL); } wplc = pixGetWpl(pixc); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); datac = pixGetData(pixc); wincr = 2 * wc + 1; hincr = 2 * hc + 1; norm = 1.0; /* use this for sum-in-window */ if (normflag) norm = 1.0 / (wincr * hincr); for (i = 0; i < hd; i++) { linec1 = datac + i * wplc; linec2 = datac + (i + hincr) * wplc; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val = linec2[j + wincr] - linec2[j] - linec1[j + wincr] + linec1[j]; if (d == 8) { val = (l_uint8)(norm * val); SET_DATA_BYTE(lined, j, val); } else { /* d == 32 */ val = (l_uint32)(norm * val); lined[j] = val; } } } pixDestroy(&pixc); pixDestroy(&pixb); return pixd; } /*! * pixWindowedMeanSquare() * * Input: pixs (8 bpp grayscale) * wc, hc (half width/height of convolution kernel) * hasborder (use 1 if it already has (wc + 1) border pixels * on left and right, and (hc + 1) on top and bottom; * use 0 to add kernel-dependent border) * Return: pixd (32 bpp, average over rectangular window of * width = 2 * wc + 1 and height = 2 * hc + 1) * * Notes: * (1) A set of border pixels of width (wc + 1) on left and right, * and of height (hc + 1) on top and bottom, must be on the * pix before the accumulator is found. The output pixd * (after convolution) has this border removed. * If @hasborder = 0, the required border is added. * (2) The advantage is that we are unaffected by the boundary, and * it is not necessary to treat pixels within @wc and @hc of the * border differently. This is because processing for pixd * only takes place for pixels in pixs for which the * kernel is entirely contained in pixs. * (3) Why do we have an added border of width (@wc + 1) and * height (@hc + 1), when we only need @wc and @hc pixels * to satisfy this condition? Answer: the accumulators * are asymmetric, requiring an extra row and column of * pixels at top and left to work accurately. * (4) The added border, along with the use of an accumulator array, * allows computation without special treatment of pixels near * the image boundary, and runs in a time that is independent * of the size of the convolution kernel. */ PIX * pixWindowedMeanSquare(PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder) { l_int32 i, j, w, h, wd, hd, wpl, wpld, wincr, hincr; l_uint32 ival; l_uint32 *datad, *lined; l_float64 norm; l_float64 val; l_float64 *data, *line1, *line2; DPIX *dpix; PIX *pixb, *pixd; PROCNAME("pixWindowedMeanSquare"); if (!pixs || (pixGetDepth(pixs) != 8)) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (wc < 2 || hc < 2) return (PIX *)ERROR_PTR("wc and hc not >= 2", procName, NULL); /* Add border if requested */ if (!hasborder) pixb = pixAddBorderGeneral(pixs, wc + 1, wc + 1, hc + 1, hc + 1, 0); else pixb = pixClone(pixs); if ((dpix = pixMeanSquareAccum(pixb)) == NULL) return (PIX *)ERROR_PTR("dpix not made", procName, NULL); wpl = dpixGetWpl(dpix); data = dpixGetData(dpix); /* The output has wc + 1 border pixels stripped from each side * of pixb, and hc + 1 border pixels stripped from top and bottom. */ pixGetDimensions(pixb, &w, &h, NULL); wd = w - 2 * (wc + 1); hd = h - 2 * (hc + 1); if (wd < 2 || hd < 2) return (PIX *)ERROR_PTR("w or h too small for kernel", procName, NULL); if ((pixd = pixCreate(wd, hd, 32)) == NULL) { dpixDestroy(&dpix); pixDestroy(&pixb); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } wpld = pixGetWpl(pixd); datad = pixGetData(pixd); wincr = 2 * wc + 1; hincr = 2 * hc + 1; norm = 1.0 / (wincr * hincr); for (i = 0; i < hd; i++) { line1 = data + i * wpl; line2 = data + (i + hincr) * wpl; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val = line2[j + wincr] - line2[j] - line1[j + wincr] + line1[j]; ival = (l_uint32)(norm * val); lined[j] = ival; } } dpixDestroy(&dpix); pixDestroy(&pixb); return pixd; } /*! * pixWindowedVariance() * * Input: pixm (mean over window; 8 or 32 bpp grayscale) * pixms (mean square over window; 32 bpp) * &fpixv ( float variance -- the ms deviation * from the mean) * &fpixrv ( float rms deviation from the mean) * Return: 0 if OK, 1 on error * * Notes: * (1) The mean and mean square values are precomputed, using * pixWindowedMean() and pixWindowedMeanSquare(). * (2) Either or both of the variance and square-root of variance * are returned as an fpix, where the variance is the * average over the window of the mean square difference of * the pixel value from the mean: * <(p -

)*(p -

)> = -

*

* (3) To visualize the results: * - for both, use fpixDisplayMaxDynamicRange(). * - for rms deviation, simply convert the output fpix to pix, */ l_int32 pixWindowedVariance(PIX *pixm, PIX *pixms, FPIX **pfpixv, FPIX **pfpixrv) { l_int32 i, j, w, h, ws, hs, ds, wplm, wplms, wplv, wplrv, valm, valms; l_float32 var; l_uint32 *linem, *linems, *datam, *datams; l_float32 *linev, *linerv, *datav, *datarv; FPIX *fpixv, *fpixrv; /* variance and square root of variance */ PROCNAME("pixWindowedVariance"); if (!pfpixv && !pfpixrv) return ERROR_INT("&fpixv and &fpixrv not defined", procName, 1); if (pfpixv) *pfpixv = NULL; if (pfpixrv) *pfpixrv = NULL; if (!pixm || pixGetDepth(pixm) != 8) return ERROR_INT("pixm undefined or not 8 bpp", procName, 1); if (!pixms || pixGetDepth(pixms) != 32) return ERROR_INT("pixms undefined or not 32 bpp", procName, 1); pixGetDimensions(pixm, &w, &h, NULL); pixGetDimensions(pixms, &ws, &hs, &ds); if (w != ws || h != hs) return ERROR_INT("pixm and pixms sizes differ", procName, 1); if (pfpixv) { fpixv = fpixCreate(w, h); *pfpixv = fpixv; wplv = fpixGetWpl(fpixv); datav = fpixGetData(fpixv); } if (pfpixrv) { fpixrv = fpixCreate(w, h); *pfpixrv = fpixrv; wplrv = fpixGetWpl(fpixrv); datarv = fpixGetData(fpixrv); } wplm = pixGetWpl(pixm); wplms = pixGetWpl(pixms); datam = pixGetData(pixm); datams = pixGetData(pixms); for (i = 0; i < h; i++) { linem = datam + i * wplm; linems = datams + i * wplms; if (pfpixv) linev = datav + i * wplv; if (pfpixrv) linerv = datarv + i * wplrv; for (j = 0; j < w; j++) { valm = GET_DATA_BYTE(linem, j); if (ds == 8) valms = GET_DATA_BYTE(linems, j); else /* ds == 32 */ valms = (l_int32)linems[j]; var = (l_float32)valms - (l_float32)valm * valm; if (pfpixv) linev[j] = var; if (pfpixrv) linerv[j] = (l_float32)sqrt(var); } } return 0; } /*! * pixMeanSquareAccum() * * Input: pixs (8 bpp grayscale) * Return: dpix (64 bit array), or null on error * * Notes: * (1) Similar to pixBlockconvAccum(), this computes the * sum of the squares of the pixel values in such a way * that the value at (i,j) is the sum of all squares in * the rectangle from the origin to (i,j). * (2) The general recursion relation (v are squared pixel values) is * a(i,j) = v(i,j) + a(i-1, j) + a(i, j-1) - a(i-1, j-1) * For the first line, this reduces to the special case * a(i,j) = v(i,j) + a(i, j-1) * For the first column, the special case is * a(i,j) = v(i,j) + a(i-1, j) */ DPIX * pixMeanSquareAccum(PIX *pixs) { l_int32 i, j, w, h, wpl, wpls, val; l_uint32 *datas, *lines; l_float64 *data, *line, *linep; DPIX *dpix; PROCNAME("pixMeanSquareAccum"); if (!pixs || (pixGetDepth(pixs) != 8)) return (DPIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((dpix = dpixCreate(w, h)) == NULL) return (DPIX *)ERROR_PTR("dpix not made", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); data = dpixGetData(dpix); wpl = dpixGetWpl(dpix); lines = datas; line = data; for (j = 0; j < w; j++) { /* first line */ val = GET_DATA_BYTE(lines, j); if (j == 0) line[0] = val * val; else line[j] = line[j - 1] + val * val; } /* Do the other lines */ for (i = 1; i < h; i++) { lines = datas + i * wpls; line = data + i * wpl; /* current dest line */ linep = line - wpl;; /* prev dest line */ for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (j == 0) line[0] = linep[0] + val * val; else line[j] = line[j - 1] + linep[j] - linep[j - 1] + val * val; } } return dpix; } /*----------------------------------------------------------------------* * Binary block sum/rank * *----------------------------------------------------------------------*/ /*! * pixBlockrank() * * Input: pixs (1 bpp) * accum pix ( 32 bpp) * wc, hc (half width/height of block sum/rank kernel) * rank (between 0.0 and 1.0; 0.5 is median filter) * Return: pixd (1 bpp) * * Notes: * (1) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1) * (2) This returns a pixd where each pixel is a 1 if the * neighborhood (2 * wc + 1) x (2 * hc + 1)) pixels * contains the rank fraction of 1 pixels. Otherwise, * the returned pixel is 0. Note that the special case * of rank = 0.0 is always satisfied, so the returned * pixd has all pixels with value 1. * (3) If accum pix is null, make one, use it, and destroy it * before returning; otherwise, just use the input accum pix * (4) If both wc and hc are 0, returns a copy unless rank == 0.0, * in which case this returns an all-ones image. * (5) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1, * where (w,h) are the dimensions of pixs. */ PIX * pixBlockrank(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc, l_float32 rank) { l_int32 w, h, d, thresh; PIX *pixt, *pixd; PROCNAME("pixBlockrank"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); if (rank == 0.0) { pixd = pixCreateTemplate(pixs); pixSetAll(pixd); return pixd; } if (wc < 0) wc = 0; if (hc < 0) hc = 0; if (w < 2 * wc + 1 || h < 2 * hc + 1) { wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); L_WARNING("kernel too large; reducing!\n", procName); L_INFO("wc = %d, hc = %d\n", procName, wc, hc); } if (wc == 0 && hc == 0) return pixCopy(NULL, pixs); if ((pixt = pixBlocksum(pixs, pixacc, wc, hc)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); /* 1 bpp block rank filter output. * Must invert because threshold gives 1 for values < thresh, * but we need a 1 if the value is >= thresh. */ thresh = (l_int32)(255. * rank); pixd = pixThresholdToBinary(pixt, thresh); pixInvert(pixd, pixd); pixDestroy(&pixt); return pixd; } /*! * pixBlocksum() * * Input: pixs (1 bpp) * accum pix ( 32 bpp) * wc, hc (half width/height of block sum/rank kernel) * Return: pixd (8 bpp) * * Notes: * (1) If accum pix is null, make one and destroy it before * returning; otherwise, just use the input accum pix * (2) The full width and height of the convolution kernel * are (2 * wc + 1) and (2 * hc + 1) * (3) Use of wc = hc = 1, followed by pixInvert() on the * 8 bpp result, gives a nice anti-aliased, and somewhat * darkened, result on text. * (4) Require that w >= 2 * wc + 1 and h >= 2 * hc + 1, * where (w,h) are the dimensions of pixs. * (5) Returns in each dest pixel the sum of all src pixels * that are within a block of size of the kernel, centered * on the dest pixel. This sum is the number of src ON * pixels in the block at each location, normalized to 255 * for a block containing all ON pixels. For pixels near * the boundary, where the block is not entirely contained * within the image, we then multiply by a second normalization * factor that is greater than one, so that all results * are normalized by the number of participating pixels * within the block. */ PIX * pixBlocksum(PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc) { l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; PROCNAME("pixBlocksum"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (wc < 0) wc = 0; if (hc < 0) hc = 0; if (w < 2 * wc + 1 || h < 2 * hc + 1) { wc = L_MIN(wc, (w - 1) / 2); hc = L_MIN(hc, (h - 1) / 2); L_WARNING("kernel too large; reducing!\n", procName); L_INFO("wc = %d, hc = %d\n", procName, wc, hc); } if (wc == 0 && hc == 0) return pixCopy(NULL, pixs); if (pixacc) { if (pixGetDepth(pixacc) != 32) return (PIX *)ERROR_PTR("pixacc not 32 bpp", procName, NULL); pixt = pixClone(pixacc); } else { if ((pixt = pixBlockconvAccum(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); } /* 8 bpp block sum output */ if ((pixd = pixCreate(w, h, 8)) == NULL) { pixDestroy(&pixt); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); wpld = pixGetWpl(pixd); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); datat = pixGetData(pixt); blocksumLow(datad, w, h, wpld, datat, wplt, wc, hc); pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Census transform * *----------------------------------------------------------------------*/ /*! * pixCensusTransform() * * Input: pixs (8 bpp) * halfsize (of square over which neighbors are averaged) * accum pix ( 32 bpp) * Return: pixd (1 bpp) * * Notes: * (1) The Census transform was invented by Ramin Zabih and John Woodfill * ("Non-parametric local transforms for computing visual * correspondence", Third European Conference on Computer Vision, * Stockholm, Sweden, May 1994); see publications at * http://www.cs.cornell.edu/~rdz/index.htm * This compares each pixel against the average of its neighbors, * in a square of odd dimension centered on the pixel. * If the pixel is greater than the average of its neighbors, * the output pixel value is 1; otherwise it is 0. * (2) This can be used as an encoding for an image that is * fairly robust against slow illumination changes, with * applications in image comparison and mosaicing. * (3) The size of the convolution kernel is (2 * halfsize + 1) * on a side. The halfsize parameter must be >= 1. * (4) If accum pix is null, make one, use it, and destroy it * before returning; otherwise, just use the input accum pix */ PIX * pixCensusTransform(PIX *pixs, l_int32 halfsize, PIX *pixacc) { l_int32 i, j, w, h, wpls, wplv, wpld; l_int32 vals, valv; l_uint32 *datas, *datav, *datad, *lines, *linev, *lined; PIX *pixav, *pixd; PROCNAME("pixCensusTransform"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (halfsize < 1) return (PIX *)ERROR_PTR("halfsize must be >= 1", procName, NULL); /* Get the average of each pixel with its neighbors */ if ((pixav = pixBlockconvGray(pixs, pixacc, halfsize, halfsize)) == NULL) return (PIX *)ERROR_PTR("pixav not made", procName, NULL); /* Subtract the pixel from the average, and then compare * the pixel value with the remaining average */ pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) { pixDestroy(&pixav); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } datas = pixGetData(pixs); datav = pixGetData(pixav); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wplv = pixGetWpl(pixav); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; linev = datav + i * wplv; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valv = GET_DATA_BYTE(linev, j); if (vals > valv) SET_DATA_BIT(lined, j); } } pixDestroy(&pixav); return pixd; } /*----------------------------------------------------------------------* * Generic convolution * *----------------------------------------------------------------------*/ /*! * pixConvolve() * * Input: pixs (8, 16, 32 bpp; no colormap) * kernel * outdepth (of pixd: 8, 16 or 32) * normflag (1 to normalize kernel to unit sum; 0 otherwise) * Return: pixd (8, 16 or 32 bpp) * * Notes: * (1) This gives a convolution with an arbitrary kernel. * (2) The input pixs must have only one sample/pixel. * To do a convolution on an RGB image, use pixConvolveRGB(). * (3) The parameter @outdepth determines the depth of the result. * If the kernel is normalized to unit sum, the output values * can never exceed 255, so an output depth of 8 bpp is sufficient. * If the kernel is not normalized, it may be necessary to use * 16 or 32 bpp output to avoid overflow. * (4) If normflag == 1, the result is normalized by scaling all * kernel values for a unit sum. If the sum of kernel values * is very close to zero, the kernel can not be normalized and * the convolution will not be performed. A warning is issued. * (5) The kernel values can be positive or negative, but the * result for the convolution can only be stored as a positive * number. Consequently, if it goes negative, the choices are * to clip to 0 or take the absolute value. We're choosing * to take the absolute value. (Another possibility would be * to output a second unsigned image for the negative values.) * If you want to get a clipped result, or to keep the negative * values in the result, use fpixConvolve(), with the * converters in fpix2.c between pix and fpix. * (6) This uses a mirrored border to avoid special casing on * the boundaries. * (7) To get a subsampled output, call l_setConvolveSampling(). * The time to make a subsampled output is reduced by the * product of the sampling factors. * (8) The function is slow, running at about 12 machine cycles for * each pixel-op in the convolution. For example, with a 3 GHz * cpu, a 1 Mpixel grayscale image, and a kernel with * (sx * sy) = 25 elements, the convolution takes about 100 msec. */ PIX * pixConvolve(PIX *pixs, L_KERNEL *kel, l_int32 outdepth, l_int32 normflag) { l_int32 i, j, id, jd, k, m, w, h, d, wd, hd, sx, sy, cx, cy, wplt, wpld; l_int32 val; l_uint32 *datat, *datad, *linet, *lined; l_float32 sum; L_KERNEL *keli, *keln; PIX *pixt, *pixd; PROCNAME("pixConvolve"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not 8, 16, or 32 bpp", procName, NULL); if (!kel) return (PIX *)ERROR_PTR("kel not defined", procName, NULL); keli = kernelInvert(kel); kernelGetParameters(keli, &sy, &sx, &cy, &cx); if (normflag) keln = kernelNormalize(keli, 1.0); else keln = kernelCopy(keli); if ((pixt = pixAddMirroredBorder(pixs, cx, sx - cx, cy, sy - cy)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); wd = (w + ConvolveSamplingFactX - 1) / ConvolveSamplingFactX; hd = (h + ConvolveSamplingFactY - 1) / ConvolveSamplingFactY; pixd = pixCreate(wd, hd, outdepth); datat = pixGetData(pixt); datad = pixGetData(pixd); wplt = pixGetWpl(pixt); wpld = pixGetWpl(pixd); for (i = 0, id = 0; id < hd; i += ConvolveSamplingFactY, id++) { lined = datad + id * wpld; for (j = 0, jd = 0; jd < wd; j += ConvolveSamplingFactX, jd++) { sum = 0.0; for (k = 0; k < sy; k++) { linet = datat + (i + k) * wplt; if (d == 8) { for (m = 0; m < sx; m++) { val = GET_DATA_BYTE(linet, j + m); sum += val * keln->data[k][m]; } } else if (d == 16) { for (m = 0; m < sx; m++) { val = GET_DATA_TWO_BYTES(linet, j + m); sum += val * keln->data[k][m]; } } else { /* d == 32 */ for (m = 0; m < sx; m++) { val = *(linet + j + m); sum += val * keln->data[k][m]; } } } if (sum < 0.0) sum = -sum; /* make it non-negative */ if (outdepth == 8) SET_DATA_BYTE(lined, jd, (l_int32)(sum + 0.5)); else if (outdepth == 16) SET_DATA_TWO_BYTES(lined, jd, (l_int32)(sum + 0.5)); else /* outdepth == 32 */ *(lined + jd) = (l_uint32)(sum + 0.5); } } kernelDestroy(&keli); kernelDestroy(&keln); pixDestroy(&pixt); return pixd; } /*! * pixConvolveSep() * * Input: pixs (8, 16, 32 bpp; no colormap) * kelx (x-dependent kernel) * kely (y-dependent kernel) * outdepth (of pixd: 8, 16 or 32) * normflag (1 to normalize kernel to unit sum; 0 otherwise) * Return: pixd (8, 16 or 32 bpp) * * Notes: * (1) This does a convolution with a separable kernel that is * is a sequence of convolutions in x and y. The two * one-dimensional kernel components must be input separately; * the full kernel is the product of these components. * The support for the full kernel is thus a rectangular region. * (2) The input pixs must have only one sample/pixel. * To do a convolution on an RGB image, use pixConvolveSepRGB(). * (3) The parameter @outdepth determines the depth of the result. * If the kernel is normalized to unit sum, the output values * can never exceed 255, so an output depth of 8 bpp is sufficient. * If the kernel is not normalized, it may be necessary to use * 16 or 32 bpp output to avoid overflow. * (2) The @normflag parameter is used as in pixConvolve(). * (4) The kernel values can be positive or negative, but the * result for the convolution can only be stored as a positive * number. Consequently, if it goes negative, the choices are * to clip to 0 or take the absolute value. We're choosing * the former for now. Another possibility would be to output * a second unsigned image for the negative values. * (5) Warning: if you use l_setConvolveSampling() to get a * subsampled output, and the sampling factor is larger than * the kernel half-width, it is faster to use the non-separable * version pixConvolve(). This is because the first convolution * here must be done on every raster line, regardless of the * vertical sampling factor. If the sampling factor is smaller * than kernel half-width, it's faster to use the separable * convolution. * (6) This uses mirrored borders to avoid special casing on * the boundaries. */ PIX * pixConvolveSep(PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 outdepth, l_int32 normflag) { l_int32 d, xfact, yfact; L_KERNEL *kelxn, *kelyn; PIX *pixt, *pixd; PROCNAME("pixConvolveSep"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not 8, 16, or 32 bpp", procName, NULL); if (!kelx) return (PIX *)ERROR_PTR("kelx not defined", procName, NULL); if (!kely) return (PIX *)ERROR_PTR("kely not defined", procName, NULL); xfact = ConvolveSamplingFactX; yfact = ConvolveSamplingFactY; if (normflag) { kelxn = kernelNormalize(kelx, 1000.0); kelyn = kernelNormalize(kely, 0.001); l_setConvolveSampling(xfact, 1); pixt = pixConvolve(pixs, kelxn, 32, 0); l_setConvolveSampling(1, yfact); pixd = pixConvolve(pixt, kelyn, outdepth, 0); l_setConvolveSampling(xfact, yfact); /* restore */ kernelDestroy(&kelxn); kernelDestroy(&kelyn); } else { /* don't normalize */ l_setConvolveSampling(xfact, 1); pixt = pixConvolve(pixs, kelx, 32, 0); l_setConvolveSampling(1, yfact); pixd = pixConvolve(pixt, kely, outdepth, 0); l_setConvolveSampling(xfact, yfact); } pixDestroy(&pixt); return pixd; } /*! * pixConvolveRGB() * * Input: pixs (32 bpp rgb) * kernel * Return: pixd (32 bpp rgb) * * Notes: * (1) This gives a convolution on an RGB image using an * arbitrary kernel (which we normalize to keep each * component within the range [0 ... 255]. * (2) The input pixs must be RGB. * (3) The kernel values can be positive or negative, but the * result for the convolution can only be stored as a positive * number. Consequently, if it goes negative, we clip the * result to 0. * (4) To get a subsampled output, call l_setConvolveSampling(). * The time to make a subsampled output is reduced by the * product of the sampling factors. * (5) This uses a mirrored border to avoid special casing on * the boundaries. */ PIX * pixConvolveRGB(PIX *pixs, L_KERNEL *kel) { PIX *pixt, *pixr, *pixg, *pixb, *pixd; PROCNAME("pixConvolveRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs is not 32 bpp", procName, NULL); if (!kel) return (PIX *)ERROR_PTR("kel not defined", procName, NULL); pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixConvolve(pixt, kel, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixConvolve(pixt, kel, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixConvolve(pixt, kel, 8, 1); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*! * pixConvolveRGBSep() * * Input: pixs (32 bpp rgb) * kelx (x-dependent kernel) * kely (y-dependent kernel) * Return: pixd (32 bpp rgb) * * Notes: * (1) This does a convolution on an RGB image using a separable * kernel that is a sequence of convolutions in x and y. The two * one-dimensional kernel components must be input separately; * the full kernel is the product of these components. * The support for the full kernel is thus a rectangular region. * (2) The kernel values can be positive or negative, but the * result for the convolution can only be stored as a positive * number. Consequently, if it goes negative, we clip the * result to 0. * (3) To get a subsampled output, call l_setConvolveSampling(). * The time to make a subsampled output is reduced by the * product of the sampling factors. * (4) This uses a mirrored border to avoid special casing on * the boundaries. */ PIX * pixConvolveRGBSep(PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely) { PIX *pixt, *pixr, *pixg, *pixb, *pixd; PROCNAME("pixConvolveRGBSep"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs is not 32 bpp", procName, NULL); if (!kelx || !kely) return (PIX *)ERROR_PTR("kelx, kely not both defined", procName, NULL); pixt = pixGetRGBComponent(pixs, COLOR_RED); pixr = pixConvolveSep(pixt, kelx, kely, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixg = pixConvolveSep(pixt, kelx, kely, 8, 1); pixDestroy(&pixt); pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixb = pixConvolveSep(pixt, kelx, kely, 8, 1); pixDestroy(&pixt); pixd = pixCreateRGBImage(pixr, pixg, pixb); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return pixd; } /*----------------------------------------------------------------------* * Generic convolution with float array * *----------------------------------------------------------------------*/ /*! * fpixConvolve() * * Input: fpixs (32 bit float array) * kernel * normflag (1 to normalize kernel to unit sum; 0 otherwise) * Return: fpixd (32 bit float array) * * Notes: * (1) This gives a float convolution with an arbitrary kernel. * (2) If normflag == 1, the result is normalized by scaling all * kernel values for a unit sum. If the sum of kernel values * is very close to zero, the kernel can not be normalized and * the convolution will not be performed. A warning is issued. * (3) With the FPix, there are no issues about negative * array or kernel values. The convolution is performed * with single precision arithmetic. * (4) To get a subsampled output, call l_setConvolveSampling(). * The time to make a subsampled output is reduced by the * product of the sampling factors. * (5) This uses a mirrored border to avoid special casing on * the boundaries. */ FPIX * fpixConvolve(FPIX *fpixs, L_KERNEL *kel, l_int32 normflag) { l_int32 i, j, id, jd, k, m, w, h, wd, hd, sx, sy, cx, cy, wplt, wpld; l_float32 val; l_float32 *datat, *datad, *linet, *lined; l_float32 sum; L_KERNEL *keli, *keln; FPIX *fpixt, *fpixd; PROCNAME("fpixConvolve"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (!kel) return (FPIX *)ERROR_PTR("kel not defined", procName, NULL); keli = kernelInvert(kel); kernelGetParameters(keli, &sy, &sx, &cy, &cx); if (normflag) keln = kernelNormalize(keli, 1.0); else keln = kernelCopy(keli); fpixGetDimensions(fpixs, &w, &h); fpixt = fpixAddMirroredBorder(fpixs, cx, sx - cx, cy, sy - cy); if (!fpixt) return (FPIX *)ERROR_PTR("fpixt not made", procName, NULL); wd = (w + ConvolveSamplingFactX - 1) / ConvolveSamplingFactX; hd = (h + ConvolveSamplingFactY - 1) / ConvolveSamplingFactY; fpixd = fpixCreate(wd, hd); datat = fpixGetData(fpixt); datad = fpixGetData(fpixd); wplt = fpixGetWpl(fpixt); wpld = fpixGetWpl(fpixd); for (i = 0, id = 0; id < hd; i += ConvolveSamplingFactY, id++) { lined = datad + id * wpld; for (j = 0, jd = 0; jd < wd; j += ConvolveSamplingFactX, jd++) { sum = 0.0; for (k = 0; k < sy; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < sx; m++) { val = *(linet + j + m); sum += val * keln->data[k][m]; } } *(lined + jd) = sum; } } kernelDestroy(&keli); kernelDestroy(&keln); fpixDestroy(&fpixt); return fpixd; } /*! * fpixConvolveSep() * * Input: fpixs (32 bit float array) * kelx (x-dependent kernel) * kely (y-dependent kernel) * normflag (1 to normalize kernel to unit sum; 0 otherwise) * Return: fpixd (32 bit float array) * * Notes: * (1) This does a convolution with a separable kernel that is * is a sequence of convolutions in x and y. The two * one-dimensional kernel components must be input separately; * the full kernel is the product of these components. * The support for the full kernel is thus a rectangular region. * (2) The normflag parameter is used as in fpixConvolve(). * (3) Warning: if you use l_setConvolveSampling() to get a * subsampled output, and the sampling factor is larger than * the kernel half-width, it is faster to use the non-separable * version pixConvolve(). This is because the first convolution * here must be done on every raster line, regardless of the * vertical sampling factor. If the sampling factor is smaller * than kernel half-width, it's faster to use the separable * convolution. * (4) This uses mirrored borders to avoid special casing on * the boundaries. */ FPIX * fpixConvolveSep(FPIX *fpixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 normflag) { l_int32 xfact, yfact; L_KERNEL *kelxn, *kelyn; FPIX *fpixt, *fpixd; PROCNAME("fpixConvolveSep"); if (!fpixs) return (FPIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!kelx) return (FPIX *)ERROR_PTR("kelx not defined", procName, NULL); if (!kely) return (FPIX *)ERROR_PTR("kely not defined", procName, NULL); xfact = ConvolveSamplingFactX; yfact = ConvolveSamplingFactY; if (normflag) { kelxn = kernelNormalize(kelx, 1.0); kelyn = kernelNormalize(kely, 1.0); l_setConvolveSampling(xfact, 1); fpixt = fpixConvolve(fpixs, kelxn, 0); l_setConvolveSampling(1, yfact); fpixd = fpixConvolve(fpixt, kelyn, 0); l_setConvolveSampling(xfact, yfact); /* restore */ kernelDestroy(&kelxn); kernelDestroy(&kelyn); } else { /* don't normalize */ l_setConvolveSampling(xfact, 1); fpixt = fpixConvolve(fpixs, kelx, 0); l_setConvolveSampling(1, yfact); fpixd = fpixConvolve(fpixt, kely, 0); l_setConvolveSampling(xfact, yfact); } fpixDestroy(&fpixt); return fpixd; } /*------------------------------------------------------------------------* * Convolution with bias (for non-negative output) * *------------------------------------------------------------------------*/ /*! * pixConvolveWithBias() * * Input: pixs (8 bpp; no colormap) * kel1 * kel2 (can be null; use if separable) * force8 (if 1, force output to 8 bpp; otherwise, determine * output depth by the dynamic range of pixel values) * &bias ( applied bias) * Return: pixd (8 or 16 bpp) * * Notes: * (1) This does a convolution with either a single kernel or * a pair of separable kernels, and automatically applies whatever * bias (shift) is required so that the resulting pixel values * are non-negative. * (2) The kernel is always normalized. If there are no negative * values in the kernel, a standard normalized convolution is * performed, with 8 bpp output. If the sum of kernel values is * very close to zero, the kernel can not be normalized and * the convolution will not be performed. An error message results. * (3) If there are negative values in the kernel, the pix is * converted to an fpix, the convolution is done on the fpix, and * a bias (shift) may need to be applied. * (4) If force8 == TRUE and the range of values after the convolution * is > 255, the output values will be scaled to fit in [0 ... 255]. * If force8 == FALSE, the output will be either 8 or 16 bpp, * to accommodate the dynamic range of output values without scaling. */ PIX * pixConvolveWithBias(PIX *pixs, L_KERNEL *kel1, L_KERNEL *kel2, l_int32 force8, l_int32 *pbias) { l_int32 outdepth; l_float32 min1, min2, min, minval, maxval, range; FPIX *fpix1, *fpix2; PIX *pixd; PROCNAME("pixConvolveWithBias"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); if (!kel1) return (PIX *)ERROR_PTR("kel1 not defined", procName, NULL); /* Determine if negative values can be produced in the convolution */ kernelGetMinMax(kel1, &min1, NULL); min2 = 0.0; if (kel2) kernelGetMinMax(kel2, &min2, NULL); min = L_MIN(min1, min2); if (min >= 0.0) { if (!kel2) return pixConvolve(pixs, kel1, 8, 1); else return pixConvolveSep(pixs, kel1, kel2, 8, 1); } /* Bias may need to be applied; convert to fpix and convolve */ fpix1 = pixConvertToFPix(pixs, 1); if (!kel2) fpix2 = fpixConvolve(fpix1, kel1, 1); else fpix2 = fpixConvolveSep(fpix1, kel1, kel2, 1); fpixDestroy(&fpix1); /* Determine the bias and the dynamic range. * If the dynamic range is <= 255, just shift the values by the * bias, if any. * If the dynamic range is > 255, there are two cases: * (1) the output depth is not forced to 8 bpp * ==> apply the bias without scaling; outdepth = 16 * (2) the output depth is forced to 8 * ==> linearly map the pixel values to [0 ... 255]. */ fpixGetMin(fpix2, &minval, NULL, NULL); fpixGetMax(fpix2, &maxval, NULL, NULL); range = maxval - minval; *pbias = (minval < 0.0) ? -minval : 0.0; fpixAddMultConstant(fpix2, *pbias, 1.0); /* shift: min val ==> 0 */ if (range <= 255 || !force8) { /* no scaling of output values */ outdepth = (range > 255) ? 16 : 8; } else { /* scale output values to fit in 8 bpp */ fpixAddMultConstant(fpix2, 0.0, (255.0 / range)); outdepth = 8; } /* Convert back to pix; it won't do any clipping */ pixd = fpixConvertToPix(fpix2, outdepth, L_CLIP_TO_ZERO, 0); fpixDestroy(&fpix2); return pixd; } /*------------------------------------------------------------------------* * Set parameter for convolution subsampling * *------------------------------------------------------------------------*/ /*! * l_setConvolveSampling() * * Input: xfact, yfact (integer >= 1) * Return: void * * Notes: * (1) This sets the x and y output subsampling factors for generic pix * and fpix convolution. The default values are 1 (no subsampling). */ void l_setConvolveSampling(l_int32 xfact, l_int32 yfact) { if (xfact < 1) xfact = 1; if (yfact < 1) yfact = 1; ConvolveSamplingFactX = xfact; ConvolveSamplingFactY = yfact; } /*------------------------------------------------------------------------* * Additive gaussian noise * *------------------------------------------------------------------------*/ /*! * pixAddGaussianNoise() * * Input: pixs (8 bpp gray or 32 bpp rgb; no colormap) * stdev (of noise) * Return: pixd (8 or 32 bpp), or null on error * * Notes: * (1) This adds noise to each pixel, taken from a normal * distribution with zero mean and specified standard deviation. */ PIX * pixAddGaussianNoise(PIX *pixs, l_float32 stdev) { l_int32 i, j, w, h, d, wpls, wpld, val, rval, gval, bval; l_uint32 pixel; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixAddGaussianNoise"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); pixd = pixCreateTemplateNoInit(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) { val = GET_DATA_BYTE(lines, j); val += (l_int32)(stdev * gaussDistribSampling() + 0.5); val = L_MIN(255, L_MAX(0, val)); SET_DATA_BYTE(lined, j, val); } else { /* d = 32 */ pixel = *(lines + j); extractRGBValues(pixel, &rval, &gval, &bval); rval += (l_int32)(stdev * gaussDistribSampling() + 0.5); rval = L_MIN(255, L_MAX(0, rval)); gval += (l_int32)(stdev * gaussDistribSampling() + 0.5); gval = L_MIN(255, L_MAX(0, gval)); bval += (l_int32)(stdev * gaussDistribSampling() + 0.5); bval = L_MIN(255, L_MAX(0, bval)); composeRGBPixel(rval, gval, bval, lined + j); } } } return pixd; } /*! * gaussDistribSampling() * * Return: gaussian distributed variable with zero mean and unit stdev * * Notes: * (1) For an explanation of the Box-Muller method for generating * a normally distributed random variable with zero mean and * unit standard deviation, see Numerical Recipes in C, * 2nd edition, p. 288ff. * (2) This can be called sequentially to get samples that can be * used for adding noise to each pixel of an image, for example. */ l_float32 gaussDistribSampling() { static l_int32 select = 0; /* flips between 0 and 1 on successive calls */ static l_float32 saveval; l_float32 frand, xval, yval, rsq, factor; if (select == 0) { while (1) { /* choose a point in a 2x2 square, centered at origin */ frand = (l_float32)rand() / (l_float32)RAND_MAX; xval = 2.0 * frand - 1.0; frand = (l_float32)rand() / (l_float32)RAND_MAX; yval = 2.0 * frand - 1.0; rsq = xval * xval + yval * yval; if (rsq > 0.0 && rsq < 1.0) /* point is inside the unit circle */ break; } factor = sqrt(-2.0 * log(rsq) / rsq); saveval = xval * factor; select = 1; return yval * factor; } else { select = 0; return saveval; } } leptonica-1.70/src/conncomp.c0000640000175000017500000011553212244232552014260 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * conncomp.c * * Connected component counting and extraction, using Heckbert's * stack-based filling algorithm. * * 4- and 8-connected components: counts, bounding boxes and images * * Top-level calls: * BOXA *pixConnComp() * BOXA *pixConnCompPixa() * BOXA *pixConnCompBB() * l_int32 pixCountConnComp() * * Identify the next c.c. to be erased: * l_int32 nextOnPixelInRaster() * l_int32 nextOnPixelInRasterLow() * * Erase the c.c., saving the b.b.: * BOX *pixSeedfillBB() * BOX *pixSeedfill4BB() * BOX *pixSeedfill8BB() * * Just erase the c.c.: * l_int32 pixSeedfill() * l_int32 pixSeedfill4() * l_int32 pixSeedfill8() * * Static stack helper functions for single raster line seedfill: * static void pushFillsegBB() * static void pushFillseg() * static void popFillseg() * * The basic method in pixConnCompBB() is very simple. We scan the * image in raster order, looking for the next ON pixel. When it * is found, we erase it and every pixel of the 4- or 8-connected * component to which it belongs, using Heckbert's seedfill * algorithm. As pixels are erased, we keep track of the * minimum rectangle that encloses all erased pixels; after * the connected component has been erased, we save its * bounding box in an array of boxes. When all pixels in the * image have been erased, we have an array that describes every * 4- or 8-connected component in terms of its bounding box. * * pixConnCompPixa() is a slight variation on pixConnCompBB(), * where we additionally save an array of images (in a Pixa) * of each of the 4- or 8-connected components. This is done trivially * by maintaining two temporary images. We erase a component from one, * and use the bounding box to extract the pixels within the b.b. * from each of the two images. An XOR between these subimages * gives the erased component. Then we erase the component from the * second image using the XOR again, with the extracted component * placed on the second image at the location of the bounding box. * Rasterop does all the work. At the end, we have an array * of the 4- or 8-connected components, as well as an array of the * bounding boxes that describe where they came from in the original image. * * If you just want the number of connected components, pixCountConnComp() * is a bit faster than pixConnCompBB(), because it doesn't have to * keep track of the bounding rectangles for each c.c. */ #include "allheaders.h" /* * The struct FillSeg is used by the Heckbert seedfill algorithm to * hold information about image segments that are waiting to be * investigated. We use two Stacks, one to hold the FillSegs in use, * and an auxiliary Stack as a reservoir to hold FillSegs for re-use. */ struct FillSeg { l_int32 xleft; /* left edge of run */ l_int32 xright; /* right edge of run */ l_int32 y; /* run y */ l_int32 dy; /* parent segment direction: 1 above, -1 below) */ }; typedef struct FillSeg FILLSEG; /* Static accessors for FillSegs on a stack */ static void pushFillsegBB(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy); static void pushFillseg(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax); static void popFillseg(L_STACK *stack, l_int32 *pxleft, l_int32 *pxright, l_int32 *py, l_int32 *pdy); #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------------* * Bounding boxes of 4 Connected Components * *-----------------------------------------------------------------------*/ /*! * pixConnComp() * * Input: pixs (1 bpp) * &pixa ( pixa of each c.c.) * connectivity (4 or 8) * Return: boxa, or null on error * * Notes: * (1) This is the top-level call for getting bounding boxes or * a pixa of the components, and it can be used instead * of either pixConnCompBB() or pixConnCompPixa(), rsp. */ BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity) { PROCNAME("pixConnComp"); if (ppixa) *ppixa = NULL; if (!pixs) return (BOXA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (BOXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (!ppixa) return pixConnCompBB(pixs, connectivity); else return pixConnCompPixa(pixs, ppixa, connectivity); } /*! * pixConnCompPixa() * * Input: pixs (1 bpp) * &pixa ( pixa of each c.c.) * connectivity (4 or 8) * Return: boxa, or null on error * * Notes: * (1) This finds bounding boxes of 4- or 8-connected components * in a binary image, and saves images of each c.c * in a pixa array. * (2) It sets up 2 temporary pix, and for each c.c. that is * located in raster order, it erases the c.c. from one pix, * then uses the b.b. to extract the c.c. from the two pix using * an XOR, and finally erases the c.c. from the second pix. * (3) A clone of the returned boxa (where all boxes in the array * are clones) is inserted into the pixa. * (4) If the input is valid, this always returns a boxa and a pixa. * If pixs is empty, the boxa and pixa will be empty. */ BOXA * pixConnCompPixa(PIX *pixs, PIXA **ppixa, l_int32 connectivity) { l_int32 h, iszero; l_int32 x, y, xstart, ystart; PIX *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa; BOX *box; BOXA *boxa; L_STACK *stack, *auxstack; PROCNAME("pixConnCompPixa"); if (!ppixa) return (BOXA *)ERROR_PTR("&pixa not defined", procName, NULL); *ppixa = NULL; if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (BOXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); pixa = pixaCreate(0); *ppixa = pixa; pixZero(pixs, &iszero); if (iszero) return boxaCreate(1); /* return empty boxa */ if ((pixt1 = pixCopy(NULL, pixs)) == NULL) return (BOXA *)ERROR_PTR("pixt1 not made", procName, NULL); if ((pixt2 = pixCopy(NULL, pixs)) == NULL) return (BOXA *)ERROR_PTR("pixt2 not made", procName, NULL); h = pixGetHeight(pixs); if ((stack = lstackCreate(h)) == NULL) return (BOXA *)ERROR_PTR("stack not made", procName, NULL); if ((auxstack = lstackCreate(0)) == NULL) return (BOXA *)ERROR_PTR("auxstack not made", procName, NULL); stack->auxstack = auxstack; if ((boxa = boxaCreate(0)) == NULL) return (BOXA *)ERROR_PTR("boxa not made", procName, NULL); xstart = 0; ystart = 0; while (1) { if (!nextOnPixelInRaster(pixt1, xstart, ystart, &x, &y)) break; if ((box = pixSeedfillBB(pixt1, stack, x, y, connectivity)) == NULL) return (BOXA *)ERROR_PTR("box not made", procName, NULL); boxaAddBox(boxa, box, L_INSERT); /* Save the c.c. and remove from pixt2 as well */ pixt3 = pixClipRectangle(pixt1, box, NULL); pixt4 = pixClipRectangle(pixt2, box, NULL); pixXor(pixt3, pixt3, pixt4); pixRasterop(pixt2, box->x, box->y, box->w, box->h, PIX_SRC ^ PIX_DST, pixt3, 0, 0); pixaAddPix(pixa, pixt3, L_INSERT); pixDestroy(&pixt4); xstart = x; ystart = y; } #if DEBUG pixCountPixels(pixt1, &iszero, NULL); fprintf(stderr, "Number of remaining pixels = %d\n", iszero); pixWrite("junkremain", pixt1, IFF_PNG); #endif /* DEBUG */ /* Remove old boxa of pixa and replace with a clone copy */ boxaDestroy(&pixa->boxa); pixa->boxa = boxaCopy(boxa, L_CLONE); /* Cleanup, freeing the fillsegs on each stack */ lstackDestroy(&stack, TRUE); pixDestroy(&pixt1); pixDestroy(&pixt2); return boxa; } /*! * pixConnCompBB() * * Input: pixs (1 bpp) * connectivity (4 or 8) * Return: boxa, or null on error * * Notes: * (1) Finds bounding boxes of 4- or 8-connected components * in a binary image. * (2) This works on a copy of the input pix. The c.c. are located * in raster order and erased one at a time. In the process, * the b.b. is computed and saved. */ BOXA * pixConnCompBB(PIX *pixs, l_int32 connectivity) { l_int32 h, iszero; l_int32 x, y, xstart, ystart; PIX *pixt; BOX *box; BOXA *boxa; L_STACK *stack, *auxstack; PROCNAME("pixConnCompBB"); if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (BOXA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); pixZero(pixs, &iszero); if (iszero) return boxaCreate(1); /* return empty boxa */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (BOXA *)ERROR_PTR("pixt not made", procName, NULL); h = pixGetHeight(pixs); if ((stack = lstackCreate(h)) == NULL) return (BOXA *)ERROR_PTR("stack not made", procName, NULL); if ((auxstack = lstackCreate(0)) == NULL) return (BOXA *)ERROR_PTR("auxstack not made", procName, NULL); stack->auxstack = auxstack; if ((boxa = boxaCreate(0)) == NULL) return (BOXA *)ERROR_PTR("boxa not made", procName, NULL); xstart = 0; ystart = 0; while (1) { if (!nextOnPixelInRaster(pixt, xstart, ystart, &x, &y)) break; if ((box = pixSeedfillBB(pixt, stack, x, y, connectivity)) == NULL) return (BOXA *)ERROR_PTR("box not made", procName, NULL); boxaAddBox(boxa, box, L_INSERT); xstart = x; ystart = y; } #if DEBUG pixCountPixels(pixt, &iszero, NULL); fprintf(stderr, "Number of remaining pixels = %d\n", iszero); pixWrite("junkremain", pixt1, IFF_PNG); #endif /* DEBUG */ /* Cleanup, freeing the fillsegs on each stack */ lstackDestroy(&stack, TRUE); pixDestroy(&pixt); return boxa; } /*! * pixCountConnComp() * * Input: pixs (1 bpp) * connectivity (4 or 8) * &count ( * Return: 0 if OK, 1 on error * * Notes: * (1) This is the top-level call for getting the number of * 4- or 8-connected components in a 1 bpp image. * (2) It works on a copy of the input pix. The c.c. are located * in raster order and erased one at a time. */ l_int32 pixCountConnComp(PIX *pixs, l_int32 connectivity, l_int32 *pcount) { l_int32 h, iszero; l_int32 x, y, xstart, ystart; PIX *pixt; L_STACK *stack, *auxstack; PROCNAME("pixCountConnComp"); if (!pcount) return ERROR_INT("&count not defined", procName, 1); *pcount = 0; /* initialize the count to 0 */ if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not 4 or 8", procName, 1); pixZero(pixs, &iszero); if (iszero) return 0; if ((pixt = pixCopy(NULL, pixs)) == NULL) return ERROR_INT("pixt not made", procName, 1); h = pixGetDepth(pixs); if ((stack = lstackCreate(h)) == NULL) return ERROR_INT("stack not made", procName, 1); if ((auxstack = lstackCreate(0)) == NULL) return ERROR_INT("auxstack not made", procName, 1); stack->auxstack = auxstack; xstart = 0; ystart = 0; while (1) { if (!nextOnPixelInRaster(pixt, xstart, ystart, &x, &y)) break; pixSeedfill(pixt, stack, x, y, connectivity); (*pcount)++; xstart = x; ystart = y; } /* Cleanup, freeing the fillsegs on each stack */ lstackDestroy(&stack, TRUE); pixDestroy(&pixt); return 0; } /*! * nextOnPixelInRaster() * * Input: pixs (1 bpp) * xstart, ystart (starting point for search) * &x, &y ( coord value of next ON pixel) * Return: 1 if a pixel is found; 0 otherwise or on error */ l_int32 nextOnPixelInRaster(PIX *pixs, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py) { l_int32 w, h, d, wpl; l_uint32 *data; PROCNAME("nextOnPixelInRaster"); if (!pixs) return ERROR_INT("pixs not defined", procName, 0); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return ERROR_INT("pixs not 1 bpp", procName, 0); wpl = pixGetWpl(pixs); data = pixGetData(pixs); return nextOnPixelInRasterLow(data, w, h, wpl, xstart, ystart, px, py); } l_int32 nextOnPixelInRasterLow(l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py) { l_int32 i, x, y, xend, startword; l_uint32 *line, *pword; /* Look at the first word */ line = data + ystart * wpl; pword = line + (xstart / 32); if (*pword) { xend = xstart - (xstart % 32) + 31; for (x = xstart; x <= xend && x < w; x++) { if (GET_DATA_BIT(line, x)) { *px = x; *py = ystart; return 1; } } } /* Continue with the rest of the line */ startword = (xstart / 32) + 1; x = 32 * startword; for (pword = line + startword; x < w; pword++, x += 32) { if (*pword) { for (i = 0; i < 32 && x < w; i++, x++) { if (GET_DATA_BIT(line, x)) { *px = x; *py = ystart; return 1; } } } } /* Continue with following lines */ for (y = ystart + 1; y < h; y++) { line = data + y * wpl; for (pword = line, x = 0; x < w; pword++, x += 32) { if (*pword) { for (i = 0; i < 32 && x < w; i++, x++) { if (GET_DATA_BIT(line, x)) { *px = x; *py = y; return 1; } } } } } return 0; } /*! * pixSeedfillBB() * * Input: pixs (1 bpp) * stack (for holding fillsegs) * x,y (location of seed pixel) * connectivity (4 or 8) * Return: box or null on error * * Notes: * (1) This is the high-level interface to Paul Heckbert's * stack-based seedfill algorithm. */ BOX * pixSeedfillBB(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity) { BOX *box; PROCNAME("pixSeedfillBB"); if (!pixs || pixGetDepth(pixs) != 1) return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!stack) return (BOX *)ERROR_PTR("stack not defined", procName, NULL); if (connectivity != 4 && connectivity != 8) return (BOX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (connectivity == 4) { if ((box = pixSeedfill4BB(pixs, stack, x, y)) == NULL) return (BOX *)ERROR_PTR("box not made", procName, NULL); } else if (connectivity == 8) { if ((box = pixSeedfill8BB(pixs, stack, x, y)) == NULL) return (BOX *)ERROR_PTR("box not made", procName, NULL); } else { return (BOX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); } return box; } /*! * pixSeedfill4BB() * * Input: pixs (1 bpp) * stack (for holding fillsegs) * x,y (location of seed pixel) * Return: box or null on error. * * Notes: * (1) This is Paul Heckbert's stack-based 4-cc seedfill algorithm. * (2) This operates on the input 1 bpp pix to remove the fg seed * pixel, at (x,y), and all pixels that are 4-connected to it. * The seed pixel at (x,y) must initially be ON. * (3) Returns the bounding box of the erased 4-cc component. * (4) Reference: see Paul Heckbert's stack-based seed fill algorithm * in "Graphic Gems", ed. Andrew Glassner, Academic * Press, 1990. The algorithm description is given * on pp. 275-277; working C code is on pp. 721-722.) * The code here follows Heckbert's exactly, except * we use function calls instead of macros for * pushing data on and popping data off the stack. * This makes sense to do because Heckbert's fixed-size * stack with macros is dangerous: images exist that * will overrun the stack and crash. The stack utility * here grows dynamically as needed, and the fillseg * structures that are not in use are stored in another * stack for reuse. It should be noted that the * overhead in the function calls (vs. macros) is negligible. */ BOX * pixSeedfill4BB(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_int32 minx, maxx, miny, maxy; /* for bounding box of this c.c. */ l_uint32 *data, *line; BOX *box; PROCNAME("pixSeedfill4BB"); if (!pixs || pixGetDepth(pixs) != 1) return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!stack) return (BOX *)ERROR_PTR("stack not defined", procName, NULL); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be within the image and ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return NULL; /* Init stack to seed: * Must first init b.b. values to prevent valgrind from complaining; * then init b.b. boundaries correctly to seed. */ minx = miny = 100000; maxx = maxy = 0; pushFillsegBB(stack, x, x, y, 1, ymax, &minx, &maxx, &miny, &maxy); pushFillsegBB(stack, x, x, y + 1, -1, ymax, &minx, &maxx, &miny, &maxy); minx = maxx = x; miny = maxy = y; while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1 - 1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 - 1 and for x > x2 + 1. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1) /* pix at x1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1 - 1) /* leak on left? */ pushFillsegBB(stack, xstart, x1 - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); x = x1 + 1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillsegBB(stack, xstart, x - 1, y, dy, ymax, &minx, &maxx, &miny, &maxy); if (x > x2 + 1) /* leak on right? */ pushFillsegBB(stack, x2 + 1, x - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); skip: for (x++; x <= x2 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 && x <= xmax); } if ((box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1)) == NULL) return (BOX *)ERROR_PTR("box not made", procName, NULL); return box; } /*! * pixSeedfill8BB() * * Input: pixs (1 bpp) * stack (for holding fillsegs) * x,y (location of seed pixel) * Return: box or null on error. * * Notes: * (1) This is Paul Heckbert's stack-based 8-cc seedfill algorithm. * (2) This operates on the input 1 bpp pix to remove the fg seed * pixel, at (x,y), and all pixels that are 8-connected to it. * The seed pixel at (x,y) must initially be ON. * (3) Returns the bounding box of the erased 8-cc component. * (4) Reference: see Paul Heckbert's stack-based seed fill algorithm * in "Graphic Gems", ed. Andrew Glassner, Academic * Press, 1990. The algorithm description is given * on pp. 275-277; working C code is on pp. 721-722.) * The code here follows Heckbert's closely, except * the leak checks are changed for 8 connectivity. * See comments on pixSeedfill4BB() for more details. */ BOX * pixSeedfill8BB(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_int32 minx, maxx, miny, maxy; /* for bounding box of this c.c. */ l_uint32 *data, *line; BOX *box; PROCNAME("pixSeedfill8BB"); if (!pixs || pixGetDepth(pixs) != 1) return (BOX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!stack) return (BOX *)ERROR_PTR("stack not defined", procName, NULL); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return NULL; /* Init stack to seed: * Must first init b.b. values to prevent valgrind from complaining; * then init b.b. boundaries correctly to seed. */ minx = miny = 100000; maxx = maxy = 0; pushFillsegBB(stack, x, x, y, 1, ymax, &minx, &maxx, &miny, &maxy); pushFillsegBB(stack, x, x, y + 1, -1, ymax, &minx, &maxx, &miny, &maxy); minx = maxx = x; miny = maxy = y; while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 and for x > x2. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1 - 1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1 - 1) /* pix at x1 - 1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1) /* leak on left? */ pushFillsegBB(stack, xstart, x1 - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); x = x1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillsegBB(stack, xstart, x - 1, y, dy, ymax, &minx, &maxx, &miny, &maxy); if (x > x2) /* leak on right? */ pushFillsegBB(stack, x2 + 1, x - 1, y, -dy, ymax, &minx, &maxx, &miny, &maxy); skip: for (x++; x <= x2 + 1 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 + 1 && x <= xmax); } if ((box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1)) == NULL) return (BOX *)ERROR_PTR("box not made", procName, NULL); return box; } /*! * pixSeedfill() * * Input: pixs (1 bpp) * stack (for holding fillsegs) * x,y (location of seed pixel) * connectivity (4 or 8) * Return: 0 if OK, 1 on error * * Notes: * (1) This removes the component from pixs with a fg pixel at (x,y). * (2) See pixSeedfill4() and pixSeedfill8() for details. */ l_int32 pixSeedfill(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity) { l_int32 retval; PROCNAME("pixSeedfill"); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!stack) return ERROR_INT("stack not defined", procName, 1); if (connectivity != 4 && connectivity != 8) return ERROR_INT("connectivity not 4 or 8", procName, 1); if (connectivity == 4) retval = pixSeedfill4(pixs, stack, x, y); else /* connectivity == 8 */ retval = pixSeedfill8(pixs, stack, x, y); return retval; } /*! * pixSeedfill4() * * Input: pixs (1 bpp) * stack (for holding fillsegs) * x,y (location of seed pixel) * Return: 0 if OK, 1 on error * * Notes: * (1) This is Paul Heckbert's stack-based 4-cc seedfill algorithm. * (2) This operates on the input 1 bpp pix to remove the fg seed * pixel, at (x,y), and all pixels that are 4-connected to it. * The seed pixel at (x,y) must initially be ON. * (3) Reference: see pixSeedFill4BB() */ l_int32 pixSeedfill4(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_uint32 *data, *line; PROCNAME("pixSeedfill4"); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!stack) return ERROR_INT("stack not defined", procName, 1); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be within the image and ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return 0; /* Init stack to seed */ pushFillseg(stack, x, x, y, 1, ymax); pushFillseg(stack, x, x, y + 1, -1, ymax); while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1 - 1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 - 1 and for x > x2 + 1. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1) /* pix at x1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1 - 1) /* leak on left? */ pushFillseg(stack, xstart, x1 - 1, y, -dy, ymax); x = x1 + 1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillseg(stack, xstart, x - 1, y, dy, ymax); if (x > x2 + 1) /* leak on right? */ pushFillseg(stack, x2 + 1, x - 1, y, -dy, ymax); skip: for (x++; x <= x2 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 && x <= xmax); } return 0; } /*! * pixSeedfill8() * * Input: pixs (1 bpp) * stack (for holding fillsegs) * x,y (location of seed pixel) * Return: 0 if OK, 1 on error * * Notes: * (1) This is Paul Heckbert's stack-based 8-cc seedfill algorithm. * (2) This operates on the input 1 bpp pix to remove the fg seed * pixel, at (x,y), and all pixels that are 8-connected to it. * The seed pixel at (x,y) must initially be ON. * (3) Reference: see pixSeedFill8BB() */ l_int32 pixSeedfill8(PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y) { l_int32 w, h, xstart, wpl, x1, x2, dy; l_int32 xmax, ymax; l_uint32 *data, *line; PROCNAME("pixSeedfill8"); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!stack) return ERROR_INT("stack not defined", procName, 1); if (!stack->auxstack) stack->auxstack = lstackCreate(0); pixGetDimensions(pixs, &w, &h, NULL); xmax = w - 1; ymax = h - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); line = data + y * wpl; /* Check pix value of seed; must be ON */ if (x < 0 || x > xmax || y < 0 || y > ymax || (GET_DATA_BIT(line, x) == 0)) return 0; /* Init stack to seed */ pushFillseg(stack, x, x, y, 1, ymax); pushFillseg(stack, x, x, y + 1, -1, ymax); while (lstackGetCount(stack) > 0) { /* Pop segment off stack and fill a neighboring scan line */ popFillseg(stack, &x1, &x2, &y, &dy); line = data + y * wpl; /* A segment of scanline y - dy for x1 <= x <= x2 was * previously filled. We now explore adjacent pixels * in scan line y. There are three regions: to the * left of x1, between x1 and x2, and to the right of x2. * These regions are handled differently. Leaks are * possible expansions beyond the previous segment and * going back in the -dy direction. These can happen * for x < x1 and for x > x2. Any "leak" segments * are plugged with a push in the -dy (opposite) direction. * And any segments found anywhere are always extended * in the +dy direction. */ for (x = x1 - 1; x >= 0 && (GET_DATA_BIT(line, x) == 1); x--) CLEAR_DATA_BIT(line,x); if (x >= x1 - 1) /* pix at x1 - 1 was off and was not cleared */ goto skip; xstart = x + 1; if (xstart < x1) /* leak on left? */ pushFillseg(stack, xstart, x1 - 1, y, -dy, ymax); x = x1; do { for (; x <= xmax && (GET_DATA_BIT(line, x) == 1); x++) CLEAR_DATA_BIT(line, x); pushFillseg(stack, xstart, x - 1, y, dy, ymax); if (x > x2) /* leak on right? */ pushFillseg(stack, x2 + 1, x - 1, y, -dy, ymax); skip: for (x++; x <= x2 + 1 && x <= xmax && (GET_DATA_BIT(line, x) == 0); x++) ; xstart = x; } while (x <= x2 + 1 && x <= xmax); } return 0; } /*-----------------------------------------------------------------------* * Static stack helper functions: push and pop fillsegs * *-----------------------------------------------------------------------*/ /*! * pushFillsegBB() * * Input: stack * xleft, xright * y * dy * ymax, * &minx () * &maxx () * &miny () * &maxy () * Return: void * * Notes: * (1) This adds a line segment to the stack, and returns its size. * (2) The auxiliary stack is used as a storage area to recycle * fillsegs that are no longer in use. We only calloc new * fillsegs if the auxiliary stack is empty. */ static void pushFillsegBB(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy) { FILLSEG *fseg; L_STACK *auxstack; PROCNAME("pushFillsegBB"); if (!stack) { L_ERROR("stack not defined\n", procName); return; } *pminx = L_MIN(*pminx, xleft); *pmaxx = L_MAX(*pmaxx, xright); *pminy = L_MIN(*pminy, y); *pmaxy = L_MAX(*pmaxy, y); if (y + dy >= 0 && y + dy <= ymax) { if ((auxstack = stack->auxstack) == NULL) { L_ERROR("auxstack not defined\n", procName); return; } /* Get a fillseg to use */ if (lstackGetCount(auxstack) > 0) { fseg = (FILLSEG *)lstackRemove(auxstack); } else { if ((fseg = (FILLSEG *)CALLOC(1, sizeof(FILLSEG))) == NULL) { L_ERROR("fillseg not made\n", procName); return; } } fseg->xleft = xleft; fseg->xright = xright; fseg->y = y; fseg->dy = dy; lstackAdd(stack, fseg); } return; } /*! * pushFillseg() * * Input: stack * xleft, xright * y * dy * ymax * Return: void * * Notes: * (1) This adds a line segment to the stack. * (2) The auxiliary stack is used as a storage area to recycle * fillsegs that are no longer in use. We only calloc new * fillsegs if the auxiliary stack is empty. */ static void pushFillseg(L_STACK *stack, l_int32 xleft, l_int32 xright, l_int32 y, l_int32 dy, l_int32 ymax) { FILLSEG *fseg; L_STACK *auxstack; PROCNAME("pushFillseg"); if (!stack) { L_ERROR("stack not defined\n", procName); return; } if (y + dy >= 0 && y + dy <= ymax) { if ((auxstack = stack->auxstack) == NULL) { L_ERROR("auxstack not defined\n", procName); return; } /* Get a fillseg to use */ if (lstackGetCount(auxstack) > 0) { fseg = (FILLSEG *)lstackRemove(auxstack); } else { if ((fseg = (FILLSEG *)CALLOC(1, sizeof(FILLSEG))) == NULL) { L_ERROR("fillseg not made\n", procName); return; } } fseg->xleft = xleft; fseg->xright = xright; fseg->y = y; fseg->dy = dy; lstackAdd(stack, fseg); } return; } /*! * popFillseg() * * Input: stack * &xleft () * &xright () * &y () * &dy () * Return: void * * Notes: * (1) This removes a line segment from the stack, and returns its size. * (2) The surplussed fillseg is placed on the auxiliary stack * for future use. */ static void popFillseg(L_STACK *stack, l_int32 *pxleft, l_int32 *pxright, l_int32 *py, l_int32 *pdy) { FILLSEG *fseg; L_STACK *auxstack; PROCNAME("popFillseg"); if (!stack) { L_ERROR("stack not defined\n", procName); return; } if ((auxstack = stack->auxstack) == NULL) { L_ERROR("auxstack not defined\n", procName); return; } if ((fseg = (FILLSEG *)lstackRemove(stack)) == NULL) return; *pxleft = fseg->xleft; *pxright = fseg->xright; *py = fseg->y + fseg->dy; /* this now points to the new line */ *pdy = fseg->dy; /* Save it for re-use */ lstackAdd(auxstack, fseg); return; } leptonica-1.70/src/allheaders_bot.txt0000644000175000017500000000007611564024461016013 0ustar dandan#endif /* NO_PROTOS */ #endif /* LEPTONICA_ALLHEADERS_H */ leptonica-1.70/src/selgen.c0000644000175000017500000010571212244231261013720 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * selgen.c * * This file contains functions that generate hit-miss Sels * for doing a loose match to a small bitmap. The hit-miss * Sel is made from a given bitmap. Several "knobs" * are available to control the looseness of the match. * In general, a tight match will have fewer false positives * (bad matches) but more false negatives (missed patterns). * The values to be used depend on the quality and variation * of the image in which the pattern is to be searched, * and the relative penalties of false positives and * false negatives. Default values for the three knobs -- * minimum distance to boundary pixels, number of extra pixels * added to selected sides, and minimum acceptable runlength * in eroded version -- are provided. * * The generated hit-miss Sels can always be used in the * rasterop implementation of binary morphology (in morph.h). * If they are small enough (not more than 31 pixels extending * in any direction from the Sel origin), they can also be used * to auto-generate dwa code (fmorphauto.c). * * * Generate a subsampled structuring element * SEL *pixGenerateSelWithRuns() * SEL *pixGenerateSelRandom() * SEL *pixGenerateSelBoundary() * * Accumulate data on runs along lines * NUMA *pixGetRunCentersOnLine() * NUMA *pixGetRunsOnLine() * * Subsample boundary pixels in relatively ordered way * PTA *pixSubsampleBoundaryPixels() * PTA *adjacentOnPixelInRaster() * * Display generated sel with originating image * PIX *pixDisplayHitMissSel() */ #include "allheaders.h" /* default minimum distance of a hit-miss pixel element to * a boundary pixel of its color. */ static const l_int32 DEFAULT_DISTANCE_TO_BOUNDARY = 1; static const l_int32 MAX_DISTANCE_TO_BOUNDARY = 4; /* default min runlength to accept a hit or miss element located * at its center */ static const l_int32 DEFAULT_MIN_RUNLENGTH = 3; /* default scalefactor for displaying image and hit-miss sel * that is derived from it */ static const l_int32 DEFAULT_SEL_SCALEFACTOR = 7; static const l_int32 MAX_SEL_SCALEFACTOR = 31; /* should be big enough */ #ifndef NO_CONSOLE_IO #define DEBUG_DISPLAY_HM_SEL 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------* * Generate a subsampled structuring element * *-----------------------------------------------------------------*/ /*! * pixGenerateSelWithRuns() * * Input: pix (1 bpp, typically small, to be used as a pattern) * nhlines (number of hor lines along which elements are found) * nvlines (number of vert lines along which elements are found) * distance (min distance from boundary pixel; use 0 for default) * minlength (min runlength to set hit or miss; use 0 for default) * toppix (number of extra pixels of bg added above) * botpix (number of extra pixels of bg added below) * leftpix (number of extra pixels of bg added to left) * rightpix (number of extra pixels of bg added to right) * &pixe ( input pix expanded by extra pixels) * Return: sel (hit-miss for input pattern), or null on error * * Notes: * (1) The horizontal and vertical lines along which elements are * selected are roughly equally spaced. The actual locations of * the hits and misses are the centers of respective run-lengths. * (2) No elements are selected that are less than 'distance' pixels away * from a boundary pixel of the same color. This makes the * match much more robust to edge noise. Valid inputs of * 'distance' are 0, 1, 2, 3 and 4. If distance is either 0 or * greater than 4, we reset it to the default value. * (3) The 4 numbers for adding rectangles of pixels outside the fg * can be use if the pattern is expected to be surrounded by bg * (white) pixels. On the other hand, if the pattern may be near * other fg (black) components on some sides, use 0 for those sides. * (4) The pixels added to a side allow you to have miss elements there. * There is a constraint between distance, minlength, and * the added pixels for this to work. We illustrate using the * default values. If you add 5 pixels to the top, and use a * distance of 1, then you end up with a vertical run of at least * 4 bg pixels along the top edge of the image. If you use a * minimum runlength of 3, each vertical line will always find * a miss near the center of its run. However, if you use a * minimum runlength of 5, you will not get a miss on every vertical * line. As another example, if you have 7 added pixels and a * distance of 2, you can use a runlength up to 5 to guarantee * that the miss element is recorded. We give a warning if the * contraint does not guarantee a miss element outside the * image proper. * (5) The input pix, as extended by the extra pixels on selected sides, * can optionally be returned. For debugging, call * pixDisplayHitMissSel() to visualize the hit-miss sel superimposed * on the generating bitmap. */ SEL * pixGenerateSelWithRuns(PIX *pixs, l_int32 nhlines, l_int32 nvlines, l_int32 distance, l_int32 minlength, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe) { l_int32 ws, hs, w, h, x, y, xval, yval, i, j, nh, nm; l_float32 delh, delw; NUMA *nah, *nam; PIX *pixt1, *pixt2, *pixfg, *pixbg; PTA *ptah, *ptam; SEL *seld, *sel; PROCNAME("pixGenerateSelWithRuns"); if (ppixe) *ppixe = NULL; if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (SEL *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (nhlines < 1 && nvlines < 1) return (SEL *)ERROR_PTR("nvlines and nhlines both < 1", procName, NULL); if (distance <= 0) distance = DEFAULT_DISTANCE_TO_BOUNDARY; if (minlength <= 0) minlength = DEFAULT_MIN_RUNLENGTH; if (distance > MAX_DISTANCE_TO_BOUNDARY) { L_WARNING("distance too large; setting to max value\n", procName); distance = MAX_DISTANCE_TO_BOUNDARY; } /* Locate the foreground */ pixClipToForeground(pixs, &pixt1, NULL); if (!pixt1) return (SEL *)ERROR_PTR("pixt1 not made", procName, NULL); ws = pixGetWidth(pixt1); hs = pixGetHeight(pixt1); w = ws; h = hs; /* Crop out a region including the foreground, and add pixels * on sides depending on the side flags */ if (toppix || botpix || leftpix || rightpix) { x = y = 0; if (toppix) { h += toppix; y = toppix; if (toppix < distance + minlength) L_WARNING("no miss elements in added top pixels\n", procName); } if (botpix) { h += botpix; if (botpix < distance + minlength) L_WARNING("no miss elements in added bot pixels\n", procName); } if (leftpix) { w += leftpix; x = leftpix; if (leftpix < distance + minlength) L_WARNING("no miss elements in added left pixels\n", procName); } if (rightpix) { w += rightpix; if (rightpix < distance + minlength) L_WARNING("no miss elements in added right pixels\n", procName); } pixt2 = pixCreate(w, h, 1); pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); } else { pixt2 = pixClone(pixt1); } if (ppixe) *ppixe = pixClone(pixt2); pixDestroy(&pixt1); /* Identify fg and bg pixels that are at least 'distance' pixels * away from the boundary pixels in their set */ seld = selCreateBrick(2 * distance + 1, 2 * distance + 1, distance, distance, SEL_HIT); pixfg = pixErode(NULL, pixt2, seld); pixbg = pixDilate(NULL, pixt2, seld); pixInvert(pixbg, pixbg); selDestroy(&seld); pixDestroy(&pixt2); /* Accumulate hit and miss points */ ptah = ptaCreate(0); ptam = ptaCreate(0); if (nhlines >= 1) { delh = (l_float32)h / (l_float32)(nhlines + 1); for (i = 0, y = 0; i < nhlines; i++) { y += (l_int32)(delh + 0.5); nah = pixGetRunCentersOnLine(pixfg, -1, y, minlength); nam = pixGetRunCentersOnLine(pixbg, -1, y, minlength); nh = numaGetCount(nah); nm = numaGetCount(nam); for (j = 0; j < nh; j++) { numaGetIValue(nah, j, &xval); ptaAddPt(ptah, xval, y); } for (j = 0; j < nm; j++) { numaGetIValue(nam, j, &xval); ptaAddPt(ptam, xval, y); } numaDestroy(&nah); numaDestroy(&nam); } } if (nvlines >= 1) { delw = (l_float32)w / (l_float32)(nvlines + 1); for (i = 0, x = 0; i < nvlines; i++) { x += (l_int32)(delw + 0.5); nah = pixGetRunCentersOnLine(pixfg, x, -1, minlength); nam = pixGetRunCentersOnLine(pixbg, x, -1, minlength); nh = numaGetCount(nah); nm = numaGetCount(nam); for (j = 0; j < nh; j++) { numaGetIValue(nah, j, &yval); ptaAddPt(ptah, x, yval); } for (j = 0; j < nm; j++) { numaGetIValue(nam, j, &yval); ptaAddPt(ptam, x, yval); } numaDestroy(&nah); numaDestroy(&nam); } } /* Make the Sel with those points */ sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); nh = ptaGetCount(ptah); for (i = 0; i < nh; i++) { ptaGetIPt(ptah, i, &x, &y); selSetElement(sel, y, x, SEL_HIT); } nm = ptaGetCount(ptam); for (i = 0; i < nm; i++) { ptaGetIPt(ptam, i, &x, &y); selSetElement(sel, y, x, SEL_MISS); } pixDestroy(&pixfg); pixDestroy(&pixbg); ptaDestroy(&ptah); ptaDestroy(&ptam); return sel; } /*! * pixGenerateSelRandom() * * Input: pix (1 bpp, typically small, to be used as a pattern) * hitfract (fraction of allowable fg pixels that are hits) * missfract (fraction of allowable bg pixels that are misses) * distance (min distance from boundary pixel; use 0 for default) * toppix (number of extra pixels of bg added above) * botpix (number of extra pixels of bg added below) * leftpix (number of extra pixels of bg added to left) * rightpix (number of extra pixels of bg added to right) * &pixe ( input pix expanded by extra pixels) * Return: sel (hit-miss for input pattern), or null on error * * Notes: * (1) Either of hitfract and missfract can be zero. If both are zero, * the sel would be empty, and NULL is returned. * (2) No elements are selected that are less than 'distance' pixels away * from a boundary pixel of the same color. This makes the * match much more robust to edge noise. Valid inputs of * 'distance' are 0, 1, 2, 3 and 4. If distance is either 0 or * greater than 4, we reset it to the default value. * (3) The 4 numbers for adding rectangles of pixels outside the fg * can be use if the pattern is expected to be surrounded by bg * (white) pixels. On the other hand, if the pattern may be near * other fg (black) components on some sides, use 0 for those sides. * (4) The input pix, as extended by the extra pixels on selected sides, * can optionally be returned. For debugging, call * pixDisplayHitMissSel() to visualize the hit-miss sel superimposed * on the generating bitmap. */ SEL * pixGenerateSelRandom(PIX *pixs, l_float32 hitfract, l_float32 missfract, l_int32 distance, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe) { l_int32 ws, hs, w, h, x, y, i, j, thresh; l_uint32 val; PIX *pixt1, *pixt2, *pixfg, *pixbg; SEL *seld, *sel; PROCNAME("pixGenerateSelRandom"); if (ppixe) *ppixe = NULL; if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (SEL *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (hitfract <= 0.0 && missfract <= 0.0) return (SEL *)ERROR_PTR("no hits or misses", procName, NULL); if (hitfract > 1.0 || missfract > 1.0) return (SEL *)ERROR_PTR("fraction can't be > 1.0", procName, NULL); if (distance <= 0) distance = DEFAULT_DISTANCE_TO_BOUNDARY; if (distance > MAX_DISTANCE_TO_BOUNDARY) { L_WARNING("distance too large; setting to max value\n", procName); distance = MAX_DISTANCE_TO_BOUNDARY; } /* Locate the foreground */ pixClipToForeground(pixs, &pixt1, NULL); if (!pixt1) return (SEL *)ERROR_PTR("pixt1 not made", procName, NULL); ws = pixGetWidth(pixt1); hs = pixGetHeight(pixt1); w = ws; h = hs; /* Crop out a region including the foreground, and add pixels * on sides depending on the side flags */ if (toppix || botpix || leftpix || rightpix) { x = y = 0; if (toppix) { h += toppix; y = toppix; } if (botpix) h += botpix; if (leftpix) { w += leftpix; x = leftpix; } if (rightpix) w += rightpix; pixt2 = pixCreate(w, h, 1); pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); } else { pixt2 = pixClone(pixt1); } if (ppixe) *ppixe = pixClone(pixt2); pixDestroy(&pixt1); /* Identify fg and bg pixels that are at least 'distance' pixels * away from the boundary pixels in their set */ seld = selCreateBrick(2 * distance + 1, 2 * distance + 1, distance, distance, SEL_HIT); pixfg = pixErode(NULL, pixt2, seld); pixbg = pixDilate(NULL, pixt2, seld); pixInvert(pixbg, pixbg); selDestroy(&seld); pixDestroy(&pixt2); /* Generate the sel from a random selection of these points */ sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); if (hitfract > 0.0) { thresh = (l_int32)(hitfract * (l_float64)RAND_MAX); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixfg, j, i, &val); if (val) { if (rand() < thresh) selSetElement(sel, i, j, SEL_HIT); } } } } if (missfract > 0.0) { thresh = (l_int32)(missfract * (l_float64)RAND_MAX); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pixbg, j, i, &val); if (val) { if (rand() < thresh) selSetElement(sel, i, j, SEL_MISS); } } } } pixDestroy(&pixfg); pixDestroy(&pixbg); return sel; } /*! * pixGenerateSelBoundary() * * Input: pix (1 bpp, typically small, to be used as a pattern) * hitdist (min distance from fg boundary pixel) * missdist (min distance from bg boundary pixel) * hitskip (number of boundary pixels skipped between hits) * missskip (number of boundary pixels skipped between misses) * topflag (flag for extra pixels of bg added above) * botflag (flag for extra pixels of bg added below) * leftflag (flag for extra pixels of bg added to left) * rightflag (flag for extra pixels of bg added to right) * &pixe ( input pix expanded by extra pixels) * Return: sel (hit-miss for input pattern), or null on error * * Notes: * (1) All fg elements selected are exactly hitdist pixels away from * the nearest fg boundary pixel, and ditto for bg elements. * Valid inputs of hitdist and missdist are 0, 1, 2, 3 and 4. * For example, a hitdist of 0 puts the hits at the fg boundary. * Usually, the distances should be > 0 avoid the effect of * noise at the boundary. * (2) Set hitskip < 0 if no hits are to be used. Ditto for missskip. * If both hitskip and missskip are < 0, the sel would be empty, * and NULL is returned. * (3) The 4 flags determine whether the sel is increased on that side * to allow bg misses to be placed all along that boundary. * The increase in sel size on that side is the minimum necessary * to allow the misses to be placed at mindist. For text characters, * the topflag and botflag are typically set to 1, and the leftflag * and rightflag to 0. * (4) The input pix, as extended by the extra pixels on selected sides, * can optionally be returned. For debugging, call * pixDisplayHitMissSel() to visualize the hit-miss sel superimposed * on the generating bitmap. * (5) This is probably the best of the three sel generators, in the * sense that you have the most flexibility with the smallest number * of hits and misses. */ SEL * pixGenerateSelBoundary(PIX *pixs, l_int32 hitdist, l_int32 missdist, l_int32 hitskip, l_int32 missskip, l_int32 topflag, l_int32 botflag, l_int32 leftflag, l_int32 rightflag, PIX **ppixe) { l_int32 ws, hs, w, h, x, y, ix, iy, i, npt; PIX *pixt1, *pixt2, *pixt3, *pixfg, *pixbg; SEL *selh, *selm, *sel_3, *sel; PTA *ptah, *ptam; PROCNAME("pixGenerateSelBoundary"); if (ppixe) *ppixe = NULL; if (!pixs) return (SEL *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (SEL *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (hitdist < 0 || hitdist > 4 || missdist < 0 || missdist > 4) return (SEL *)ERROR_PTR("dist not in {0 .. 4}", procName, NULL); if (hitskip < 0 && missskip < 0) return (SEL *)ERROR_PTR("no hits or misses", procName, NULL); /* Locate the foreground */ pixClipToForeground(pixs, &pixt1, NULL); if (!pixt1) return (SEL *)ERROR_PTR("pixt1 not made", procName, NULL); ws = pixGetWidth(pixt1); hs = pixGetHeight(pixt1); w = ws; h = hs; /* Crop out a region including the foreground, and add pixels * on sides depending on the side flags */ if (topflag || botflag || leftflag || rightflag) { x = y = 0; if (topflag) { h += missdist + 1; y = missdist + 1; } if (botflag) h += missdist + 1; if (leftflag) { w += missdist + 1; x = missdist + 1; } if (rightflag) w += missdist + 1; pixt2 = pixCreate(w, h, 1); pixRasterop(pixt2, x, y, ws, hs, PIX_SRC, pixt1, 0, 0); } else { pixt2 = pixClone(pixt1); } if (ppixe) *ppixe = pixClone(pixt2); pixDestroy(&pixt1); /* Identify fg and bg pixels that are exactly hitdist and * missdist (rsp) away from the boundary pixels in their set. * Then get a subsampled set of these points. */ sel_3 = selCreateBrick(3, 3, 1, 1, SEL_HIT); if (hitskip >= 0) { selh = selCreateBrick(2 * hitdist + 1, 2 * hitdist + 1, hitdist, hitdist, SEL_HIT); pixt3 = pixErode(NULL, pixt2, selh); pixfg = pixErode(NULL, pixt3, sel_3); pixXor(pixfg, pixfg, pixt3); ptah = pixSubsampleBoundaryPixels(pixfg, hitskip); pixDestroy(&pixt3); pixDestroy(&pixfg); selDestroy(&selh); } if (missskip >= 0) { selm = selCreateBrick(2 * missdist + 1, 2 * missdist + 1, missdist, missdist, SEL_HIT); pixt3 = pixDilate(NULL, pixt2, selm); pixbg = pixDilate(NULL, pixt3, sel_3); pixXor(pixbg, pixbg, pixt3); ptam = pixSubsampleBoundaryPixels(pixbg, missskip); pixDestroy(&pixt3); pixDestroy(&pixbg); selDestroy(&selm); } selDestroy(&sel_3); pixDestroy(&pixt2); /* Generate the hit-miss sel from these point */ sel = selCreateBrick(h, w, h / 2, w / 2, SEL_DONT_CARE); if (hitskip >= 0) { npt = ptaGetCount(ptah); for (i = 0; i < npt; i++) { ptaGetIPt(ptah, i, &ix, &iy); selSetElement(sel, iy, ix, SEL_HIT); } } if (missskip >= 0) { npt = ptaGetCount(ptam); for (i = 0; i < npt; i++) { ptaGetIPt(ptam, i, &ix, &iy); selSetElement(sel, iy, ix, SEL_MISS); } } ptaDestroy(&ptah); ptaDestroy(&ptam); return sel; } /*-----------------------------------------------------------------* * Accumulate data on runs along lines * *-----------------------------------------------------------------*/ /*! * pixGetRunCentersOnLine() * * Input: pixs (1 bpp) * x, y (set one of these to -1; see notes) * minlength (minimum length of acceptable run) * Return: numa of fg runs, or null on error * * Notes: * (1) Action: this function computes the fg (black) and bg (white) * pixel runlengths along the specified horizontal or vertical line, * and returns a Numa of the "center" pixels of each fg run * whose length equals or exceeds the minimum length. * (2) This only works on horizontal and vertical lines. * (3) For horizontal runs, set x = -1 and y to the value * for all points along the raster line. For vertical runs, * set y = -1 and x to the value for all points along the * pixel column. * (4) For horizontal runs, the points in the Numa are the x * values in the center of fg runs that are of length at * least 'minlength'. For vertical runs, the points in the * Numa are the y values in the center of fg runs, again * of length 'minlength' or greater. * (5) If there are no fg runs along the line that satisfy the * minlength constraint, the returned Numa is empty. This * is not an error. */ NUMA * pixGetRunCentersOnLine(PIX *pixs, l_int32 x, l_int32 y, l_int32 minlength) { l_int32 w, h, i, r, nruns, len; NUMA *naruns, *nad; PROCNAME("pixGetRunCentersOnLine"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (x != -1 && y != -1) return (NUMA *)ERROR_PTR("x or y must be -1", procName, NULL); if (x == -1 && y == -1) return (NUMA *)ERROR_PTR("x or y cannot both be -1", procName, NULL); if ((nad = numaCreate(0)) == NULL) return (NUMA *)ERROR_PTR("nad not made", procName, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); if (x == -1) { /* horizontal run */ if (y < 0 || y >= h) return nad; naruns = pixGetRunsOnLine(pixs, 0, y, w - 1, y); } else { /* vertical run */ if (x < 0 || x >= w) return nad; naruns = pixGetRunsOnLine(pixs, x, 0, x, h - 1); } nruns = numaGetCount(naruns); /* extract run center values; the first run is always bg */ r = 0; /* cumulative distance along line */ for (i = 0; i < nruns; i++) { if (i % 2 == 0) { /* bg run */ numaGetIValue(naruns, i, &len); r += len; continue; } else { numaGetIValue(naruns, i, &len); if (len >= minlength) numaAddNumber(nad, r + len / 2); r += len; } } numaDestroy(&naruns); return nad; } /*! * pixGetRunsOnLine() * * Input: pixs (1 bpp) * x1, y1, x2, y2 * Return: numa, or null on error * * Notes: * (1) Action: this function uses the bresenham algorithm to compute * the pixels along the specified line. It returns a Numa of the * runlengths of the fg (black) and bg (white) runs, always * starting with a white run. * (2) If the first pixel on the line is black, the length of the * first returned run (which is white) is 0. */ NUMA * pixGetRunsOnLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2) { l_int32 w, h, x, y, npts; l_int32 i, runlen, preval; l_uint32 val; NUMA *numa; PTA *pta; PROCNAME("pixGetRunsOnLine"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); if (x1 < 0 || x1 >= w) return (NUMA *)ERROR_PTR("x1 not valid", procName, NULL); if (x2 < 0 || x2 >= w) return (NUMA *)ERROR_PTR("x2 not valid", procName, NULL); if (y1 < 0 || y1 >= h) return (NUMA *)ERROR_PTR("y1 not valid", procName, NULL); if (y2 < 0 || y2 >= h) return (NUMA *)ERROR_PTR("y2 not valid", procName, NULL); if ((pta = generatePtaLine(x1, y1, x2, y2)) == NULL) return (NUMA *)ERROR_PTR("pta not made", procName, NULL); if ((npts = ptaGetCount(pta)) == 0) return (NUMA *)ERROR_PTR("pta has no pts", procName, NULL); if ((numa = numaCreate(0)) == NULL) return (NUMA *)ERROR_PTR("numa not made", procName, NULL); for (i = 0; i < npts; i++) { ptaGetIPt(pta, i, &x, &y); pixGetPixel(pixs, x, y, &val); if (i == 0) { if (val == 1) { /* black pixel; append white run of size 0 */ numaAddNumber(numa, 0); } preval = val; runlen = 1; continue; } if (val == preval) { /* extend current run */ preval = val; runlen++; } else { /* end previous run */ numaAddNumber(numa, runlen); preval = val; runlen = 1; } } numaAddNumber(numa, runlen); /* append last run */ ptaDestroy(&pta); return numa; } /*-----------------------------------------------------------------* * Subsample boundary pixels in relatively ordered way * *-----------------------------------------------------------------*/ /*! * pixSubsampleBoundaryPixels() * * Input: pixs (1 bpp, with only boundary pixels in fg) * skip (number to skip between samples as you traverse boundary) * Return: pta, or null on error * * Notes: * (1) If skip = 0, we take all the fg pixels. * (2) We try to traverse the boundaries in a regular way. * Some pixels may be missed, and these are then subsampled * randomly with a fraction determined by 'skip'. * (3) The most natural approach is to use a depth first (stack-based) * method to find the fg pixels. However, the pixel runs are * 4-connected and there are relatively few branches. So * instead of doing a proper depth-first search, we get nearly * the same result using two nested while loops: the outer * one continues a raster-based search for the next fg pixel, * and the inner one does a reasonable job running along * each 4-connected coutour. */ PTA * pixSubsampleBoundaryPixels(PIX *pixs, l_int32 skip) { l_int32 x, y, xn, yn, xs, ys, xa, ya, count; PIX *pixt; PTA *pta; PROCNAME("pixSubsampleBoundaryPixels"); if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (skip < 0) return (PTA *)ERROR_PTR("skip < 0", procName, NULL); if (skip == 0) return ptaGetPixelsFromPix(pixs, NULL); pta = ptaCreate(0); pixt = pixCopy(NULL, pixs); xs = ys = 0; while (nextOnPixelInRaster(pixt, xs, ys, &xn, &yn)) { /* new series */ xs = xn; ys = yn; /* Add first point in this series */ ptaAddPt(pta, xs, ys); /* Trace out boundary, erasing all and saving every (skip + 1)th */ x = xs; y = ys; pixSetPixel(pixt, x, y, 0); count = 0; while (adjacentOnPixelInRaster(pixt, x, y, &xa, &ya)) { x = xa; y = ya; pixSetPixel(pixt, x, y, 0); if (count == skip) { ptaAddPt(pta, x, y); count = 0; } else { count++; } } } pixDestroy(&pixt); return pta; } /*! * adjacentOnPixelInRaster() * * Input: pixs (1 bpp) * x, y (current pixel) * xa, ya (adjacent ON pixel, found by simple CCW search) * Return: 1 if a pixel is found; 0 otherwise or on error * * Notes: * (1) Search is in 4-connected directions first; then on diagonals. * This allows traversal along a 4-connected boundary. */ l_int32 adjacentOnPixelInRaster(PIX *pixs, l_int32 x, l_int32 y, l_int32 *pxa, l_int32 *pya) { l_int32 w, h, i, xa, ya, found; l_int32 xdel[] = {-1, 0, 1, 0, -1, 1, 1, -1}; l_int32 ydel[] = {0, 1, 0, -1, 1, 1, -1, -1}; l_uint32 val; PROCNAME("adjacentOnPixelInRaster"); if (!pixs) return ERROR_INT("pixs not defined", procName, 0); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", procName, 0); w = pixGetWidth(pixs); h = pixGetHeight(pixs); found = 0; for (i = 0; i < 8; i++) { xa = x + xdel[i]; ya = y + ydel[i]; if (xa < 0 || xa >= w || ya < 0 || ya >= h) continue; pixGetPixel(pixs, xa, ya, &val); if (val == 1) { found = 1; *pxa = xa; *pya = ya; break; } } return found; } /*-----------------------------------------------------------------* * Display generated sel with originating image * *-----------------------------------------------------------------*/ /*! * pixDisplayHitMissSel() * * Input: pixs (1 bpp) * sel (hit-miss in general) * scalefactor (an integer >= 1; use 0 for default) * hitcolor (RGB0 color for center of hit pixels) * misscolor (RGB0 color for center of miss pixels) * Return: pixd (RGB showing both pixs and sel), or null on error * Notes: * (1) We don't allow scalefactor to be larger than MAX_SEL_SCALEFACTOR * (2) The colors are conveniently given as 4 bytes in hex format, * such as 0xff008800. The least significant byte is ignored. */ PIX * pixDisplayHitMissSel(PIX *pixs, SEL *sel, l_int32 scalefactor, l_uint32 hitcolor, l_uint32 misscolor) { l_int32 i, j, type; l_float32 fscale; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixDisplayHitMissSel"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (!sel) return (PIX *)ERROR_PTR("sel not defined", procName, NULL); if (scalefactor <= 0) scalefactor = DEFAULT_SEL_SCALEFACTOR; if (scalefactor > MAX_SEL_SCALEFACTOR) { L_WARNING("scalefactor too large; using max value\n", procName); scalefactor = MAX_SEL_SCALEFACTOR; } /* Generate a version of pixs with a colormap */ pixt = pixConvert1To8(NULL, pixs, 0, 1); cmap = pixcmapCreate(8); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixcmapAddColor(cmap, hitcolor >> 24, (hitcolor >> 16) & 0xff, (hitcolor >> 8) & 0xff); pixcmapAddColor(cmap, misscolor >> 24, (misscolor >> 16) & 0xff, (misscolor >> 8) & 0xff); pixSetColormap(pixt, cmap); /* Color the hits and misses */ for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { selGetElement(sel, i, j, &type); if (type == SEL_DONT_CARE) continue; if (type == SEL_HIT) pixSetPixel(pixt, j, i, 2); else /* type == SEL_MISS */ pixSetPixel(pixt, j, i, 3); } } /* Scale it up */ fscale = (l_float32)scalefactor; pixd = pixScaleBySampling(pixt, fscale, fscale); pixDestroy(&pixt); return pixd; } leptonica-1.70/src/recog.h0000664000175000017500000003612612264037231013556 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_RECOG_H #define LEPTONICA_RECOG_H /* * recog.h * * A simple utility for training and recognizing individual * machine-printed text characters. In an application, one can * envision using a number of these, one for each trained set. * * In training mode, a set of labelled bitmaps is presented, either * one at a time, or in a directory, or in a pixa. If in a directory, * or a pixa, the labelling text string must be embedded in the * text field of the image file. * * Any number of recognizers (L_Recog) can be trained and then used * together in an array (L_Recoga). All these trained structures * can be serialized to file and read back. The serialized version * holds all the bitmaps used for training, plus, for arbitrary * character sets, the UTF8 representation and the lookup table * mapping from the character representation to index. * * There are three levels of "sets" here: * * (1) Example set: the examples representing a character that * were printed in the same way, so that they can be combined * without scaling to form an "average" template for the character. * In the recognition phase, we use either this aligned average, * or the individual bitmaps. All examples in the set are given * the same character label. Example: the letter 'a' in the * predominant font in a book. * * (2) Character set (represented by L_Recog, a single recognizer): * The set of different characters, each of which is described * by (1). Each element of the set has a different character * label. Example: the digits '0' through '9' that are used for * page numbering in a book. * * (3) Recognizer set (represented by L_Recoga, an array of recogs): * A set of recognizers, each of which is described by (2). * In general, we do not want to combine the character sets * with the same labels within different recognizer sets, * because the bitmaps can differ in font type, style or size. * Example 1: the letter 'a' can be printed in two very different * ways (either with a large loop or with a smaller loop in * the lower half); both share the same label but need to be * distinguished so that they are not mixed when averaging. * Example 2: a recognizer trained for a book may be missing * some characters, so we need to supplement it with another * "generic" or "bootstrap" recognizer that has the additional * characters from a variety of sources. Bootstrap recognizers * must be run in a mode where all characters are scaled. * * In the recognition process, for each component in an input image, * each recognizer (L_Recog) records the best match (highest * correlation score). If there is more than one recognizer, these * results are aggregated to find the best match for each character * for all the recognizers, and this is stored in L_Recoga. */ #define RECOG_VERSION_NUMBER 1 struct L_Recoga { l_int32 n; /* number of recogs */ l_int32 nalloc; /* number of recog ptrs allocated */ struct L_Recog **recog; /* recog ptr array */ struct L_Rcha *rcha; /* stores the array of best chars */ }; typedef struct L_Recoga L_RECOGA; struct L_Recog { l_int32 scalew; /* scale all examples to this width; */ /* use 0 prevent horizontal scaling */ l_int32 scaleh; /* scale all examples to this height; */ /* use 0 prevent vertical scaling */ l_int32 templ_type; /* template type: either an average of */ /* examples (L_USE_AVERAGE) or the set */ /* of all examples (L_USE_ALL) */ l_int32 maxarraysize; /* initialize container arrays to this */ l_int32 setsize; /* size of character set */ l_int32 threshold; /* for binarizing if depth > 1 */ l_int32 maxyshift; /* vertical jiggle on nominal centroid */ /* alignment; typically 0 or 1 */ l_float32 asperity_fr; /* +- allowed fractional asperity ratio */ l_int32 charset_type; /* one of L_ARABIC_NUMERALS, etc. */ l_int32 charset_size; /* expected number of classes in charset */ char *bootdir; /* dir with bootstrap pixa charsets */ char *bootpattern; /* file pattern for bootstrap pixa charsets */ char *bootpath; /* path for single bootstrap pixa charset */ l_int32 min_nopad; /* min number of samples without padding */ l_int32 max_afterpad; /* max number of samples after padding */ l_int32 samplenum; /* keep track of number of training samples */ l_int32 minwidth_u; /* min width of averaged unscaled templates */ l_int32 maxwidth_u; /* max width of averaged unscaled templates */ l_int32 minheight_u; /* min height of averaged unscaled templates */ l_int32 maxheight_u; /* max height of averaged unscaled templates */ l_int32 minwidth; /* min width of averaged scaled templates */ l_int32 maxwidth; /* max width of averaged scaled templates */ l_int32 ave_done; /* set to 1 when averaged bitmaps are made */ l_int32 train_done; /* set to 1 when training is complete or */ /* identification has started */ l_int32 min_splitw; /* min component width kept in splitting */ l_int32 min_splith; /* min component height kept in splitting */ l_int32 max_splith; /* max component height kept in splitting */ struct Sarray *sa_text; /* text array for arbitrary char set */ struct L_Dna *dna_tochar; /* index-to-char lut for arbitrary char set */ l_int32 *centtab; /* table for finding centroids */ l_int32 *sumtab; /* table for finding pixel sums */ char *fname; /* serialized filename (if read) */ struct Pixaa *pixaa_u; /* all unscaled bitmaps for each class */ struct Pixa *pixa_u; /* averaged unscaled bitmaps for each class */ struct Ptaa *ptaa_u; /* centroids of all unscaled bitmaps */ struct Pta *pta_u; /* centroids of unscaled averaged bitmaps */ struct Numaa *naasum_u; /* area of all unscaled bitmap examples */ struct Numa *nasum_u; /* area of unscaled averaged bitmaps */ struct Pixaa *pixaa; /* all bitmap examples for each class */ struct Pixa *pixa; /* averaged bitmaps for each class */ struct Ptaa *ptaa; /* centroids of all bitmap examples */ struct Pta *pta; /* centroids of averaged bitmaps */ struct Numaa *naasum; /* area of all bitmap examples */ struct Numa *nasum; /* area of averaged bitmaps */ struct Pixa *pixa_tr; /* input training images */ struct Pixa *pixadb_ave; /* unscaled and scaled averaged bitmaps */ struct Pixa *pixa_id; /* input images for identifying */ struct Pix *pixdb_ave; /* debug: best match of input against ave. */ struct Pix *pixdb_range; /* debug: best matches within range */ struct Pixa *pixadb_boot; /* debug: bootstrap training results */ struct Pixa *pixadb_split; /* debug: splitting results */ char *fontdir; /* directory for bitmapped fonts */ struct L_Bmf *bmf; /* bmf fonts */ l_int32 bmf_size; /* font size of bmf; default is 6 pt */ struct L_Rdid *did; /* temp data used for image decoding */ struct L_Rch *rch; /* temp data used for holding best char */ struct L_Rcha *rcha; /* temp data used for array of best chars */ l_int32 bootrecog; /* 1 if using bootstrap samples; else 0 */ l_int32 index; /* recog index in recoga; -1 if no parent */ struct L_Recoga *parent; /* ptr to parent array; can be null */ }; typedef struct L_Recog L_RECOG; /* * Data returned from correlation matching on a single character */ struct L_Rch { l_int32 index; /* index of best template */ l_float32 score; /* correlation score of best template */ char *text; /* character string of best template */ l_int32 sample; /* index of best sample (within the best */ /* template class, if all samples are used) */ l_int32 xloc; /* x-location of template (delx + shiftx) */ l_int32 yloc; /* y-location of template (dely + shifty) */ l_int32 width; /* width of best template */ }; typedef struct L_Rch L_RCH; /* * Data returned from correlation matching on an array of characters */ struct L_Rcha { struct Numa *naindex; /* indices of best templates */ struct Numa *nascore; /* correlation scores of best templates */ struct Sarray *satext; /* character strings of best templates */ struct Numa *nasample; /* indices of best samples */ struct Numa *naxloc; /* x-locations of templates (delx + shiftx) */ struct Numa *nayloc; /* y-locations of templates (dely + shifty) */ struct Numa *nawidth; /* widths of best templates */ }; typedef struct L_Rcha L_RCHA; /* * Data used for decoding a line of characters. */ struct L_Rdid { struct Pix *pixs; /* clone of pix to be decoded */ l_int32 **counta; /* count array for each averaged template */ l_int32 **delya; /* best y-shift array per averaged template */ l_int32 narray; /* number of averaged templates */ l_int32 size; /* size of count array (width of pixs) */ l_int32 *setwidth; /* setwidths for each template */ struct Numa *nasum; /* pixel count in pixs by column */ struct Numa *namoment; /* first moment of pixels in pixs by column */ l_int32 fullarrays; /* 1 if full arrays are made; 0 otherwise */ l_float32 *beta; /* channel coeffs for template fg term */ l_float32 *gamma; /* channel coeffs for bit-and term */ l_float32 *trellisscore; /* score on trellis */ l_int32 *trellistempl; /* template on trellis (for backtrack) */ struct Numa *natempl; /* indices of best path templates */ struct Numa *naxloc; /* x locations of best path templates */ struct Numa *nadely; /* y locations of best path templates */ struct Numa *nawidth; /* widths of best path templates */ struct Numa *nascore; /* correlation scores: best path templates */ struct Numa *natempl_r; /* indices of best rescored templates */ struct Numa *naxloc_r; /* x locations of best rescoredtemplates */ struct Numa *nadely_r; /* y locations of best rescoredtemplates */ struct Numa *nawidth_r; /* widths of best rescoredtemplates */ struct Numa *nascore_r; /* correlation scores: rescored templates */ }; typedef struct L_Rdid L_RDID; /*-------------------------------------------------------------------------* * Flags for selecting processing * *-------------------------------------------------------------------------*/ enum { L_SELECT_UNSCALED = 0, /* select the unscaled bitmaps */ L_SELECT_SCALED = 1, /* select the scaled bitmaps */ L_SELECT_BOTH = 2 /* select both unscaled and scaled */ }; /*-------------------------------------------------------------------------* * Flags for determining what to test against * *-------------------------------------------------------------------------*/ enum { L_USE_AVERAGE = 0, /* form template from class average */ L_USE_ALL = 1 /* match against all elements of each class */ }; /*-------------------------------------------------------------------------* * Flags for describing limited character sets * *-------------------------------------------------------------------------*/ enum { L_UNKNOWN = 0, /* character set type is not specified */ L_ARABIC_NUMERALS = 1, /* 10 digits */ L_LC_ROMAN_NUMERALS = 2, /* 7 lower-case letters (i,v,x,l,c,d,m) */ L_UC_ROMAN_NUMERALS = 3, /* 7 upper-case letters (I,V,X,L,C,D,M) */ L_LC_ALPHA = 4, /* 26 lower-case letters */ L_UC_ALPHA = 5 /* 26 upper-case letters */ }; #endif /* LEPTONICA_RECOG_H */ leptonica-1.70/src/correlscore.c0000644000175000017500000011105312040555344014765 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * correlscore.c * * These are functions for computing correlation between * pairs of 1 bpp images. * * Optimized 2 pix correlators (for jbig2 clustering) * l_int32 pixCorrelationScore() * l_int32 pixCorrelationScoreThresholded() * * Simple 2 pix correlators * l_int32 pixCorrelationScoreSimple() * l_int32 pixCorrelationScoreShifted() * * There are other, more application-oriented functions, that * compute the correlation between two binary images, taking into * account small translational shifts, between two binary images. * These are: * compare.c: pixBestCorrelation() * Uses coarse-to-fine translations of full image * recogident.c: pixCorrelationBestShift() * Uses small shifts between c.c. centroids. */ #include #include "allheaders.h" /* -------------------------------------------------------------------- * * Optimized 2 pix correlators (for jbig2 clustering) * * -------------------------------------------------------------------- */ /*! * pixCorrelationScore() * * Input: pix1 (test pix, 1 bpp) * pix2 (exemplar pix, 1 bpp) * area1 (number of on pixels in pix1) * area2 (number of on pixels in pix2) * delx (x comp of centroid difference) * dely (y comp of centroid difference) * maxdiffw (max width difference of pix1 and pix2) * maxdiffh (max height difference of pix1 and pix2) * tab (sum tab for byte) * &score ( correlation score) * Return: 0 if OK, 1 on error * * Note: we check first that the two pix are roughly the same size. * For jbclass (jbig2) applications at roughly 300 ppi, maxdiffw and * maxdiffh should be at least 2. * * Only if they meet that criterion do we compare the bitmaps. * The centroid difference is used to align the two images to the * nearest integer for the correlation. * * The correlation score is the ratio of the square of the number of * pixels in the AND of the two bitmaps to the product of the number * of ON pixels in each. Denote the number of ON pixels in pix1 * by |1|, the number in pix2 by |2|, and the number in the AND * of pix1 and pix2 by |1 & 2|. The correlation score is then * (|1 & 2|)**2 / (|1|*|2|). * * This score is compared with an input threshold, which can * be modified depending on the weight of the template. * The modified threshold is * thresh + (1.0 - thresh) * weight * R * where * weight is a fixed input factor between 0.0 and 1.0 * R = |2| / area(2) * and area(2) is the total number of pixels in 2 (i.e., width x height). * * To understand why a weight factor is useful, consider what happens * with thick, sans-serif characters that look similar and have a value * of R near 1. Different characters can have a high correlation value, * and the classifier will make incorrect substitutions. The weight * factor raises the threshold for these characters. * * Yet another approach to reduce such substitutions is to run the classifier * in a non-greedy way, matching to the template with the highest * score, not the first template with a score satisfying the matching * constraint. However, this is not particularly effective. * * The implementation here gives the same result as in * pixCorrelationScoreSimple(), where a temporary Pix is made to hold * the AND and implementation uses rasterop: * pixt = pixCreateTemplate(pix1); * pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix2, 0, 0); * pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC & PIX_DST, pix1, 0, 0); * pixCountPixels(pixt, &count, tab); * pixDestroy(&pixt); * However, here it is done in a streaming fashion, counting as it goes, * and touching memory exactly once, giving a 3-4x speedup over the * simple implementation. This very fast correlation matcher was * contributed by William Rucklidge. */ l_int32 pixCorrelationScore(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; l_int32 wpl1, wpl2, lorow, hirow, locol, hicol; l_int32 x, y, pix1lskip, pix2lskip, rowwords1, rowwords2; l_uint32 word1, word2, andw; l_uint32 *row1, *row2; PROCNAME("pixCorrelationScore"); if (!pscore) return ERROR_INT("&score not defined", procName, 1); *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not 1 bpp", procName, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not 1 bpp", procName, 1); if (!tab) return ERROR_INT("tab not defined", procName, 1); if (area1 <= 0 || area2 <= 0) return ERROR_INT("areas must be > 0", procName, 1); /* Eliminate based on size difference */ pixGetDimensions(pix1, &wi, &hi, NULL); pixGetDimensions(pix2, &wt, &ht, NULL); delw = L_ABS(wi - wt); if (delw > maxdiffw) return 0; delh = L_ABS(hi - ht); if (delh > maxdiffh) return 0; /* Round difference to nearest integer */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); count = 0; wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); rowwords2 = wpl2; /* What rows of pix1 need to be considered? Only those underlying the * shifted pix2. */ lorow = L_MAX(idely, 0); hirow = L_MIN(ht + idely, hi); /* Get the pointer to the first row of each image that will be * considered. */ row1 = pixGetData(pix1) + wpl1 * lorow; row2 = pixGetData(pix2) + wpl2 * (lorow - idely); /* Similarly, figure out which columns of pix1 will be considered. */ locol = L_MAX(idelx, 0); hicol = L_MIN(wt + idelx, wi); if (idelx >= 32) { /* pix2 is shifted far enough to the right that pix1's first * word(s) won't contribute to the count. Increment its * pointer to point to the first word that will contribute, * and adjust other values accordingly. */ pix1lskip = idelx >> 5; /* # of words to skip on left */ row1 += pix1lskip; locol -= pix1lskip << 5; hicol -= pix1lskip << 5; idelx &= 31; } else if (idelx <= -32) { /* pix2 is shifted far enough to the left that its first word(s) * won't contribute to the count. Increment its pointer * to point to the first word that will contribute, * and adjust other values accordingly. */ pix2lskip = -((idelx + 31) >> 5); /* # of words to skip on left */ row2 += pix2lskip; rowwords2 -= pix2lskip; idelx += pix2lskip << 5; } if ((locol >= hicol) || (lorow >= hirow)) { /* there is no overlap */ count = 0; } else { /* How many words of each row of pix1 need to be considered? */ rowwords1 = (hicol + 31) >> 5; if (idelx == 0) { /* There's no lateral offset; simple case. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { andw = row1[x] & row2[x]; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } else if (idelx > 0) { /* pix2 is shifted to the right. word 0 of pix1 is touched by * word 0 of pix2; word 1 of pix1 is touched by word 0 and word * 1 of pix2, and so on up to the last word of pix1 (word N), * which is touched by words N-1 and N of pix1... if there is a * word N. Handle the two cases (pix2 has N-1 words and pix2 * has at least N words) separately. * * Note: we know that pix2 has at least N-1 words (i.e., * rowwords2 >= rowwords1 - 1) by the following logic. * We can pretend that idelx <= 31 because the >= 32 logic * above adjusted everything appropriately. Then * hicol <= wt + idelx <= wt + 31, so * hicol + 31 <= wt + 62 * rowwords1 = (hicol + 31) >> 5 <= (wt + 62) >> 5 * rowwords2 == (wt + 31) >> 5, so * rowwords1 <= rowwords2 + 1 */ if (rowwords2 < rowwords1) { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords2; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } /* Now the last iteration - we know that this is safe * (i.e. rowwords1 >= 2) because rowwords1 > rowwords2 * > 0 (if it was 0, we'd have taken the "count = 0" * fast-path out of here). */ word1 = row1[x]; word2 = row2[x - 1] << (32 - idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } else { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. This section is the same as above * except for the different limit on the loop, since * the last iteration is the same as all the other * iterations (beyond the first). */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords1; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } } else { /* pix2 is shifted to the left. word 0 of pix1 is touched by * word 0 and word 1 of pix2, and so on up to the last word of * pix1 (word N), which is touched by words N and N+1 of * pix2... if there is a word N+1. Handle the two cases (pix2 * has N words and pix2 has at least N+1 words) separately. */ if (rowwords1 < rowwords2) { /* pix2 has at least N+1 words, so every iteration through * the loop can be the same. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } else { /* pix2 has only N words, so the last iteration is broken * out. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1 - 1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } word1 = row1[x]; word2 = row2[x] << -idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } } } } *pscore = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); /* fprintf(stderr, "score = %5.3f, count = %d, area1 = %d, area2 = %d\n", *pscore, count, area1, area2); */ return 0; } /*! * pixCorrelationScoreThresholded() * * Input: pix1 (test pix, 1 bpp) * pix2 (exemplar pix, 1 bpp) * area1 (number of on pixels in pix1) * area2 (number of on pixels in pix2) * delx (x comp of centroid difference) * dely (y comp of centroid difference) * maxdiffw (max width difference of pix1 and pix2) * maxdiffh (max height difference of pix1 and pix2) * tab (sum tab for byte) * downcount (count of 1 pixels below each row of pix1) * score_threshold * Return: whether the correlation score is >= score_threshold * * * Note: we check first that the two pix are roughly the same size. * Only if they meet that criterion do we compare the bitmaps. * The centroid difference is used to align the two images to the * nearest integer for the correlation. * * The correlation score is the ratio of the square of the number of * pixels in the AND of the two bitmaps to the product of the number * of ON pixels in each. Denote the number of ON pixels in pix1 * by |1|, the number in pix2 by |2|, and the number in the AND * of pix1 and pix2 by |1 & 2|. The correlation score is then * (|1 & 2|)**2 / (|1|*|2|). * * This score is compared with an input threshold, which can * be modified depending on the weight of the template. * The modified threshold is * thresh + (1.0 - thresh) * weight * R * where * weight is a fixed input factor between 0.0 and 1.0 * R = |2| / area(2) * and area(2) is the total number of pixels in 2 (i.e., width x height). * * To understand why a weight factor is useful, consider what happens * with thick, sans-serif characters that look similar and have a value * of R near 1. Different characters can have a high correlation value, * and the classifier will make incorrect substitutions. The weight * factor raises the threshold for these characters. * * Yet another approach to reduce such substitutions is to run the classifier * in a non-greedy way, matching to the template with the highest * score, not the first template with a score satisfying the matching * constraint. However, this is not particularly effective. * * This very fast correlation matcher was contributed by William Rucklidge. */ l_int32 pixCorrelationScoreThresholded(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_int32 *downcount, l_float32 score_threshold) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; l_int32 wpl1, wpl2, lorow, hirow, locol, hicol, untouchable; l_int32 x, y, pix1lskip, pix2lskip, rowwords1, rowwords2; l_uint32 word1, word2, andw; l_uint32 *row1, *row2; l_float32 score; l_int32 threshold; PROCNAME("pixCorrelationScoreThresholded"); if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not 1 bpp", procName, 0); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not 1 bpp", procName, 0); if (!tab) return ERROR_INT("tab not defined", procName, 0); if (area1 <= 0 || area2 <= 0) return ERROR_INT("areas must be > 0", procName, 0); /* Eliminate based on size difference */ pixGetDimensions(pix1, &wi, &hi, NULL); pixGetDimensions(pix2, &wt, &ht, NULL); delw = L_ABS(wi - wt); if (delw > maxdiffw) return FALSE; delh = L_ABS(hi - ht); if (delh > maxdiffh) return FALSE; /* Round difference to nearest integer */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* Compute the correlation count that is needed so that * count * count / (area1 * area2) >= score_threshold */ threshold = (l_int32)ceil(sqrt(score_threshold * area1 * area2)); count = 0; wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); rowwords2 = wpl2; /* What rows of pix1 need to be considered? Only those underlying the * shifted pix2. */ lorow = L_MAX(idely, 0); hirow = L_MIN(ht + idely, hi); /* Get the pointer to the first row of each image that will be * considered. */ row1 = pixGetData(pix1) + wpl1 * lorow; row2 = pixGetData(pix2) + wpl2 * (lorow - idely); if (hirow <= hi) { /* Some rows of pix1 will never contribute to count */ untouchable = downcount[hirow - 1]; } /* Similarly, figure out which columns of pix1 will be considered. */ locol = L_MAX(idelx, 0); hicol = L_MIN(wt + idelx, wi); if (idelx >= 32) { /* pix2 is shifted far enough to the right that pix1's first * word(s) won't contribute to the count. Increment its * pointer to point to the first word that will contribute, * and adjust other values accordingly. */ pix1lskip = idelx >> 5; /* # of words to skip on left */ row1 += pix1lskip; locol -= pix1lskip << 5; hicol -= pix1lskip << 5; idelx &= 31; } else if (idelx <= -32) { /* pix2 is shifted far enough to the left that its first word(s) * won't contribute to the count. Increment its pointer * to point to the first word that will contribute, * and adjust other values accordingly. */ pix2lskip = -((idelx + 31) >> 5); /* # of words to skip on left */ row2 += pix2lskip; rowwords2 -= pix2lskip; idelx += pix2lskip << 5; } if ((locol >= hicol) || (lorow >= hirow)) { /* there is no overlap */ count = 0; } else { /* How many words of each row of pix1 need to be considered? */ rowwords1 = (hicol + 31) >> 5; if (idelx == 0) { /* There's no lateral offset; simple case. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { andw = row1[x] & row2[x]; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } /* If the count is over the threshold, no need to * calculate any futher. Likewise, return early if the * count plus the maximum count attainable from further * rows is below the threshold. */ if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } else if (idelx > 0) { /* pix2 is shifted to the right. word 0 of pix1 is touched by * word 0 of pix2; word 1 of pix1 is touched by word 0 and word * 1 of pix2, and so on up to the last word of pix1 (word N), * which is touched by words N-1 and N of pix1... if there is a * word N. Handle the two cases (pix2 has N-1 words and pix2 * has at least N words) separately. * * Note: we know that pix2 has at least N-1 words (i.e., * rowwords2 >= rowwords1 - 1) by the following logic. * We can pretend that idelx <= 31 because the >= 32 logic * above adjusted everything appropriately. Then * hicol <= wt + idelx <= wt + 31, so * hicol + 31 <= wt + 62 * rowwords1 = (hicol + 31) >> 5 <= (wt + 62) >> 5 * rowwords2 == (wt + 31) >> 5, so * rowwords1 <= rowwords2 + 1 */ if (rowwords2 < rowwords1) { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords2; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } /* Now the last iteration - we know that this is safe * (i.e. rowwords1 >= 2) because rowwords1 > rowwords2 * > 0 (if it was 0, we'd have taken the "count = 0" * fast-path out of here). */ word1 = row1[x]; word2 = row2[x - 1] << (32 - idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } else { for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { /* Do the first iteration so the loop can be * branch-free. This section is the same as above * except for the different limit on the loop, since * the last iteration is the same as all the other * iterations (beyond the first). */ word1 = row1[0]; word2 = row2[0] >> idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; for (x = 1; x < rowwords1; x++) { word1 = row1[x]; word2 = (row2[x] >> idelx) | (row2[x - 1] << (32 - idelx)); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } } else { /* pix2 is shifted to the left. word 0 of pix1 is touched by * word 0 and word 1 of pix2, and so on up to the last word of * pix1 (word N), which is touched by words N and N+1 of * pix2... if there is a word N+1. Handle the two cases (pix2 * has N words and pix2 has at least N+1 words) separately. */ if (rowwords1 < rowwords2) { /* pix2 has at least N+1 words, so every iteration through * the loop can be the same. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } else { /* pix2 has only N words, so the last iteration is broken * out. */ for (y = lorow; y < hirow; y++, row1 += wpl1, row2 += wpl2) { for (x = 0; x < rowwords1 - 1; x++) { word1 = row1[x]; word2 = row2[x] << -idelx; word2 |= row2[x + 1] >> (32 + idelx); andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; } word1 = row1[x]; word2 = row2[x] << -idelx; andw = word1 & word2; count += tab[andw & 0xff] + tab[(andw >> 8) & 0xff] + tab[(andw >> 16) & 0xff] + tab[andw >> 24]; if (count >= threshold) return TRUE; if (count + downcount[y] - untouchable < threshold) { return FALSE; } } } } } score = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); if (score >= score_threshold) { fprintf(stderr, "count %d < threshold %d but score %g >= score_threshold %g\n", count, threshold, score, score_threshold); } return FALSE; } /* -------------------------------------------------------------------- * * Simple 2 pix correlators (for jbig2 clustering) * * -------------------------------------------------------------------- */ /*! * pixCorrelationScoreSimple() * * Input: pix1 (test pix, 1 bpp) * pix2 (exemplar pix, 1 bpp) * area1 (number of on pixels in pix1) * area2 (number of on pixels in pix2) * delx (x comp of centroid difference) * dely (y comp of centroid difference) * maxdiffw (max width difference of pix1 and pix2) * maxdiffh (max height difference of pix1 and pix2) * tab (sum tab for byte) * &score ( correlation score, in range [0.0 ... 1.0]) * Return: 0 if OK, 1 on error * * Notes: * (1) This calculates exactly the same value as pixCorrelationScore(). * It is 2-3x slower, but much simpler to understand. * (2) The returned correlation score is 0.0 if the width or height * exceed @maxdiffw or @maxdiffh. */ l_int32 pixCorrelationScoreSimple(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, count; PIX *pixt; PROCNAME("pixCorrelationScoreSimple"); if (!pscore) return ERROR_INT("&score not defined", procName, 1); *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not 1 bpp", procName, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not 1 bpp", procName, 1); if (!tab) return ERROR_INT("tab not defined", procName, 1); if (!area1 || !area2) return ERROR_INT("areas must be > 0", procName, 1); /* Eliminate based on size difference */ pixGetDimensions(pix1, &wi, &hi, NULL); pixGetDimensions(pix2, &wt, &ht, NULL); delw = L_ABS(wi - wt); if (delw > maxdiffw) return 0; delh = L_ABS(hi - ht); if (delh > maxdiffh) return 0; /* Round difference to nearest integer */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* pixt = pixAnd(NULL, pix1, pix2), including shift. * To insure that pixels are ON only within the * intersection of pix1 and the shifted pix2: * (1) Start with pixt cleared and equal in size to pix1. * (2) Blit the shifted pix2 onto pixt. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pixt. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC & PIX_DST, pix1, 0, 0); pixCountPixels(pixt, &count, tab); pixDestroy(&pixt); *pscore = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); /* fprintf(stderr, "score = %5.3f, count = %d, area1 = %d, area2 = %d\n", *pscore, count, area1, area2); */ return 0; } /*! * pixCorrelationScoreShifted() * * Input: pix1 (1 bpp) * pix2 (1 bpp) * area1 (number of on pixels in pix1) * area2 (number of on pixels in pix2) * delx (x translation of pix2 relative to pix1) * dely (y translation of pix2 relative to pix1) * tab (sum tab for byte) * &score ( correlation score) * Return: 0 if OK, 1 on error * * Notes: * (1) This finds the correlation between two 1 bpp images, * when pix2 is shifted by (delx, dely) with respect * to each other. * (2) This is implemented by starting with a copy of pix1 and * ANDing its pixels with those of a shifted pix2. * (3) Get the pixel counts for area1 and area2 using piCountPixels(). * (4) A good estimate for a shift that would maximize the correlation * is to align the centroids (cx1, cy1; cx2, cy2), giving the * relative translations etransx and etransy: * etransx = cx1 - cx2 * etransy = cy1 - cy2 * Typically delx is chosen to be near etransx; ditto for dely. * This function is used in pixBestCorrelation(), where the * translations delx and dely are varied to find the best alignment. * (5) We do not check the sizes of pix1 and pix2, because they should * be comparable. */ l_int32 pixCorrelationScoreShifted(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 delx, l_int32 dely, l_int32 *tab, l_float32 *pscore) { l_int32 w1, h1, w2, h2, count; PIX *pixt; PROCNAME("pixCorrelationScoreShifted"); if (!pscore) return ERROR_INT("&score not defined", procName, 1); *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not 1 bpp", procName, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not 1 bpp", procName, 1); if (!tab) return ERROR_INT("tab not defined", procName, 1); if (!area1 || !area2) return ERROR_INT("areas must be > 0", procName, 1); pixGetDimensions(pix1, &w1, &h1, NULL); pixGetDimensions(pix2, &w2, &h2, NULL); /* To insure that pixels are ON only within the * intersection of pix1 and the shifted pix2: * (1) Start with pixt cleared and equal in size to pix1. * (2) Blit the shifted pix2 onto pixt. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pixt. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, delx, dely, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, w1, h1, PIX_SRC & PIX_DST, pix1, 0, 0); pixCountPixels(pixt, &count, tab); pixDestroy(&pixt); *pscore = (l_float32)count * (l_float32)count / ((l_float32)area1 * (l_float32)area2); return 0; } leptonica-1.70/src/allheaders.h0000644000175000017500000071046312274202651014565 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_ALLHEADERS_H #define LEPTONICA_ALLHEADERS_H #define LIBLEPT_MAJOR_VERSION 1 #define LIBLEPT_MINOR_VERSION 70 #include "alltypes.h" #ifndef NO_PROTOS /* * These prototypes were autogen'd by xtractprotos, v. 1.5 */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LEPT_DLL extern PIX * pixBackgroundNormSimple ( PIX *pixs, PIX *pixim, PIX *pixg ); LEPT_DLL extern PIX * pixBackgroundNorm ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy ); LEPT_DLL extern PIX * pixBackgroundNormMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval ); LEPT_DLL extern l_int32 pixBackgroundNormGrayArray ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixd ); LEPT_DLL extern l_int32 pixBackgroundNormRGBArrays ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern l_int32 pixBackgroundNormGrayArrayMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixd ); LEPT_DLL extern l_int32 pixBackgroundNormRGBArraysMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern l_int32 pixGetBackgroundGrayMap ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixd ); LEPT_DLL extern l_int32 pixGetBackgroundRGBMap ( PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb ); LEPT_DLL extern l_int32 pixGetBackgroundGrayMapMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixm ); LEPT_DLL extern l_int32 pixGetBackgroundRGBMapMorph ( PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb ); LEPT_DLL extern l_int32 pixFillMapHoles ( PIX *pix, l_int32 nx, l_int32 ny, l_int32 filltype ); LEPT_DLL extern PIX * pixExtendByReplication ( PIX *pixs, l_int32 addw, l_int32 addh ); LEPT_DLL extern l_int32 pixSmoothConnectedRegions ( PIX *pixs, PIX *pixm, l_int32 factor ); LEPT_DLL extern PIX * pixGetInvBackgroundMap ( PIX *pixs, l_int32 bgval, l_int32 smoothx, l_int32 smoothy ); LEPT_DLL extern PIX * pixApplyInvBackgroundGrayMap ( PIX *pixs, PIX *pixm, l_int32 sx, l_int32 sy ); LEPT_DLL extern PIX * pixApplyInvBackgroundRGBMap ( PIX *pixs, PIX *pixmr, PIX *pixmg, PIX *pixmb, l_int32 sx, l_int32 sy ); LEPT_DLL extern PIX * pixApplyVariableGrayMap ( PIX *pixs, PIX *pixg, l_int32 target ); LEPT_DLL extern PIX * pixGlobalNormRGB ( PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 mapval ); LEPT_DLL extern PIX * pixGlobalNormNoSatRGB ( PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 factor, l_float32 rank ); LEPT_DLL extern l_int32 pixThresholdSpreadNorm ( PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh, PIX **ppixth, PIX **ppixb, PIX **ppixd ); LEPT_DLL extern PIX * pixBackgroundNormFlex ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_int32 delta ); LEPT_DLL extern PIX * pixContrastNorm ( PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy ); LEPT_DLL extern l_int32 pixMinMaxTiles ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy, PIX **ppixmin, PIX **ppixmax ); LEPT_DLL extern l_int32 pixSetLowContrast ( PIX *pixs1, PIX *pixs2, l_int32 mindiff ); LEPT_DLL extern PIX * pixLinearTRCTiled ( PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, PIX *pixmin, PIX *pixmax ); LEPT_DLL extern PIX * pixAffineSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixAffineSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixAffinePta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixAffine ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixAffinePtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); LEPT_DLL extern PIX * pixAffineColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); LEPT_DLL extern PIX * pixAffinePtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); LEPT_DLL extern PIX * pixAffineGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); LEPT_DLL extern PIX * pixAffinePtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); LEPT_DLL extern l_int32 getAffineXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); LEPT_DLL extern l_int32 affineInvertXform ( l_float32 *vc, l_float32 **pvci ); LEPT_DLL extern l_int32 affineXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); LEPT_DLL extern l_int32 affineXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); LEPT_DLL extern l_int32 linearInterpolatePixelColor ( l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_uint32 colorval, l_uint32 *pval ); LEPT_DLL extern l_int32 linearInterpolatePixelGray ( l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_int32 grayval, l_int32 *pval ); LEPT_DLL extern l_int32 gaussjordan ( l_float32 **a, l_float32 *b, l_int32 n ); LEPT_DLL extern PIX * pixAffineSequential ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 bw, l_int32 bh ); LEPT_DLL extern l_float32 * createMatrix2dTranslate ( l_float32 transx, l_float32 transy ); LEPT_DLL extern l_float32 * createMatrix2dScale ( l_float32 scalex, l_float32 scaley ); LEPT_DLL extern l_float32 * createMatrix2dRotate ( l_float32 xc, l_float32 yc, l_float32 angle ); LEPT_DLL extern PTA * ptaTranslate ( PTA *ptas, l_float32 transx, l_float32 transy ); LEPT_DLL extern PTA * ptaScale ( PTA *ptas, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PTA * ptaRotate ( PTA *ptas, l_float32 xc, l_float32 yc, l_float32 angle ); LEPT_DLL extern BOXA * boxaTranslate ( BOXA *boxas, l_float32 transx, l_float32 transy ); LEPT_DLL extern BOXA * boxaScale ( BOXA *boxas, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern BOXA * boxaRotate ( BOXA *boxas, l_float32 xc, l_float32 yc, l_float32 angle ); LEPT_DLL extern PTA * ptaAffineTransform ( PTA *ptas, l_float32 *mat ); LEPT_DLL extern BOXA * boxaAffineTransform ( BOXA *boxas, l_float32 *mat ); LEPT_DLL extern l_int32 l_productMatVec ( l_float32 *mat, l_float32 *vecs, l_float32 *vecd, l_int32 size ); LEPT_DLL extern l_int32 l_productMat2 ( l_float32 *mat1, l_float32 *mat2, l_float32 *matd, l_int32 size ); LEPT_DLL extern l_int32 l_productMat3 ( l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *matd, l_int32 size ); LEPT_DLL extern l_int32 l_productMat4 ( l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *mat4, l_float32 *matd, l_int32 size ); LEPT_DLL extern l_int32 l_getDataBit ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataBit ( void *line, l_int32 n ); LEPT_DLL extern void l_clearDataBit ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataBitVal ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern l_int32 l_getDataDibit ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataDibit ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern void l_clearDataDibit ( void *line, l_int32 n ); LEPT_DLL extern l_int32 l_getDataQbit ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataQbit ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern void l_clearDataQbit ( void *line, l_int32 n ); LEPT_DLL extern l_int32 l_getDataByte ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataByte ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern l_int32 l_getDataTwoBytes ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataTwoBytes ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern l_int32 l_getDataFourBytes ( void *line, l_int32 n ); LEPT_DLL extern void l_setDataFourBytes ( void *line, l_int32 n, l_int32 val ); LEPT_DLL extern char * barcodeDispatchDecoder ( char *barstr, l_int32 format, l_int32 debugflag ); LEPT_DLL extern l_int32 barcodeFormatIsSupported ( l_int32 format ); LEPT_DLL extern NUMA * pixFindBaselines ( PIX *pixs, PTA **ppta, l_int32 debug ); LEPT_DLL extern PIX * pixDeskewLocal ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); LEPT_DLL extern l_int32 pixGetLocalSkewTransform ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, PTA **pptas, PTA **pptad ); LEPT_DLL extern NUMA * pixGetLocalSkewAngles ( PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 *pa, l_float32 *pb ); LEPT_DLL extern BBUFFER * bbufferCreate ( l_uint8 *indata, l_int32 nalloc ); LEPT_DLL extern void bbufferDestroy ( BBUFFER **pbb ); LEPT_DLL extern l_uint8 * bbufferDestroyAndSaveData ( BBUFFER **pbb, size_t *pnbytes ); LEPT_DLL extern l_int32 bbufferRead ( BBUFFER *bb, l_uint8 *src, l_int32 nbytes ); LEPT_DLL extern l_int32 bbufferReadStream ( BBUFFER *bb, FILE *fp, l_int32 nbytes ); LEPT_DLL extern l_int32 bbufferWrite ( BBUFFER *bb, l_uint8 *dest, size_t nbytes, size_t *pnout ); LEPT_DLL extern l_int32 bbufferWriteStream ( BBUFFER *bb, FILE *fp, size_t nbytes, size_t *pnout ); LEPT_DLL extern l_int32 bbufferBytesToWrite ( BBUFFER *bb, size_t *pnbytes ); LEPT_DLL extern l_int32 bbufferReadStdin ( l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern PIX * pixBilateral ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction ); LEPT_DLL extern PIX * pixBilateralGray ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev, l_int32 ncomps, l_int32 reduction ); LEPT_DLL extern PIX * pixBilateralExact ( PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel ); LEPT_DLL extern PIX * pixBilateralGrayExact ( PIX *pixs, L_KERNEL *spatial_kel, L_KERNEL *range_kel ); LEPT_DLL extern PIX* pixBlockBilateralExact ( PIX *pixs, l_float32 spatial_stdev, l_float32 range_stdev ); LEPT_DLL extern L_KERNEL * makeRangeKernel ( l_float32 range_stdev ); LEPT_DLL extern PIX * pixBilinearSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinearSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinearPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinear ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixBilinearPtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); LEPT_DLL extern PIX * pixBilinearColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); LEPT_DLL extern PIX * pixBilinearPtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); LEPT_DLL extern PIX * pixBilinearGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); LEPT_DLL extern PIX * pixBilinearPtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); LEPT_DLL extern l_int32 getBilinearXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); LEPT_DLL extern l_int32 bilinearXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); LEPT_DLL extern l_int32 bilinearXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); LEPT_DLL extern l_int32 pixOtsuAdaptiveThreshold ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, PIX **ppixth, PIX **ppixd ); LEPT_DLL extern PIX * pixOtsuThreshOnBackgroundNorm ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh ); LEPT_DLL extern PIX * pixMaskedThreshOnBackgroundNorm ( PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh ); LEPT_DLL extern l_int32 pixSauvolaBinarizeTiled ( PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 nx, l_int32 ny, PIX **ppixth, PIX **ppixd ); LEPT_DLL extern l_int32 pixSauvolaBinarize ( PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 addborder, PIX **ppixm, PIX **ppixsd, PIX **ppixth, PIX **ppixd ); LEPT_DLL extern PIX * pixSauvolaGetThreshold ( PIX *pixm, PIX *pixms, l_float32 factor, PIX **ppixsd ); LEPT_DLL extern PIX * pixApplyLocalThreshold ( PIX *pixs, PIX *pixth, l_int32 redfactor ); LEPT_DLL extern PIX * pixExpandBinaryReplicate ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixExpandBinaryPower2 ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixReduceBinary2 ( PIX *pixs, l_uint8 *intab ); LEPT_DLL extern PIX * pixReduceRankBinaryCascade ( PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4 ); LEPT_DLL extern PIX * pixReduceRankBinary2 ( PIX *pixs, l_int32 level, l_uint8 *intab ); LEPT_DLL extern l_uint8 * makeSubsampleTab2x ( void ); LEPT_DLL extern PIX * pixBlend ( PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); LEPT_DLL extern PIX * pixBlendMask ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type ); LEPT_DLL extern PIX * pixBlendGray ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type, l_int32 transparent, l_uint32 transpix ); LEPT_DLL extern PIX * pixBlendGrayInverse ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); LEPT_DLL extern PIX * pixBlendColor ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 transparent, l_uint32 transpix ); LEPT_DLL extern PIX * pixBlendColorByChannel ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 rfract, l_float32 gfract, l_float32 bfract, l_int32 transparent, l_uint32 transpix ); LEPT_DLL extern PIX * pixBlendGrayAdapt ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 shift ); LEPT_DLL extern PIX * pixFadeWithGray ( PIX *pixs, PIX *pixb, l_float32 factor, l_int32 type ); LEPT_DLL extern PIX * pixBlendHardLight ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract ); LEPT_DLL extern l_int32 pixBlendCmap ( PIX *pixs, PIX *pixb, l_int32 x, l_int32 y, l_int32 sindex ); LEPT_DLL extern PIX * pixBlendWithGrayMask ( PIX *pixs1, PIX *pixs2, PIX *pixg, l_int32 x, l_int32 y ); LEPT_DLL extern PIX * pixBlendBackgroundToColor ( PIX *pixd, PIX *pixs, BOX *box, l_uint32 color, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixMultiplyByColor ( PIX *pixd, PIX *pixs, BOX *box, l_uint32 color ); LEPT_DLL extern PIX * pixAlphaBlendUniform ( PIX *pixs, l_uint32 color ); LEPT_DLL extern PIX * pixAddAlphaToBlend ( PIX *pixs, l_float32 fract, l_int32 invert ); LEPT_DLL extern PIX * pixSetAlphaOverWhite ( PIX *pixs ); LEPT_DLL extern L_BMF * bmfCreate ( const char *dir, l_int32 size ); LEPT_DLL extern void bmfDestroy ( L_BMF **pbmf ); LEPT_DLL extern PIX * bmfGetPix ( L_BMF *bmf, char chr ); LEPT_DLL extern l_int32 bmfGetWidth ( L_BMF *bmf, char chr, l_int32 *pw ); LEPT_DLL extern l_int32 bmfGetBaseline ( L_BMF *bmf, char chr, l_int32 *pbaseline ); LEPT_DLL extern PIXA * pixaGetFont ( const char *dir, l_int32 size, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2 ); LEPT_DLL extern l_int32 pixaSaveFont ( const char *indir, const char *outdir, l_int32 size ); LEPT_DLL extern PIXA * pixaGenerateFont ( const char *dir, l_int32 size, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2 ); LEPT_DLL extern PIX * pixReadStreamBmp ( FILE *fp ); LEPT_DLL extern l_int32 pixWriteStreamBmp ( FILE *fp, PIX *pix ); LEPT_DLL extern PIX * pixReadMemBmp ( const l_uint8 *cdata, size_t size ); LEPT_DLL extern l_int32 pixWriteMemBmp ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern BOX * boxCreate ( l_int32 x, l_int32 y, l_int32 w, l_int32 h ); LEPT_DLL extern BOX * boxCreateValid ( l_int32 x, l_int32 y, l_int32 w, l_int32 h ); LEPT_DLL extern BOX * boxCopy ( BOX *box ); LEPT_DLL extern BOX * boxClone ( BOX *box ); LEPT_DLL extern void boxDestroy ( BOX **pbox ); LEPT_DLL extern l_int32 boxGetGeometry ( BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 boxSetGeometry ( BOX *box, l_int32 x, l_int32 y, l_int32 w, l_int32 h ); LEPT_DLL extern l_int32 boxGetSideLocation ( BOX *box, l_int32 side, l_int32 *ploc ); LEPT_DLL extern l_int32 boxGetRefcount ( BOX *box ); LEPT_DLL extern l_int32 boxChangeRefcount ( BOX *box, l_int32 delta ); LEPT_DLL extern l_int32 boxIsValid ( BOX *box, l_int32 *pvalid ); LEPT_DLL extern BOXA * boxaCreate ( l_int32 n ); LEPT_DLL extern BOXA * boxaCopy ( BOXA *boxa, l_int32 copyflag ); LEPT_DLL extern void boxaDestroy ( BOXA **pboxa ); LEPT_DLL extern l_int32 boxaAddBox ( BOXA *boxa, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_int32 boxaExtendArray ( BOXA *boxa ); LEPT_DLL extern l_int32 boxaExtendArrayToSize ( BOXA *boxa, l_int32 size ); LEPT_DLL extern l_int32 boxaGetCount ( BOXA *boxa ); LEPT_DLL extern l_int32 boxaGetValidCount ( BOXA *boxa ); LEPT_DLL extern BOX * boxaGetBox ( BOXA *boxa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern BOX * boxaGetValidBox ( BOXA *boxa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern l_int32 boxaGetBoxGeometry ( BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 boxaIsFull ( BOXA *boxa, l_int32 *pfull ); LEPT_DLL extern l_int32 boxaReplaceBox ( BOXA *boxa, l_int32 index, BOX *box ); LEPT_DLL extern l_int32 boxaInsertBox ( BOXA *boxa, l_int32 index, BOX *box ); LEPT_DLL extern l_int32 boxaRemoveBox ( BOXA *boxa, l_int32 index ); LEPT_DLL extern l_int32 boxaRemoveBoxAndSave ( BOXA *boxa, l_int32 index, BOX **pbox ); LEPT_DLL extern l_int32 boxaInitFull ( BOXA *boxa, BOX *box ); LEPT_DLL extern l_int32 boxaClear ( BOXA *boxa ); LEPT_DLL extern BOXAA * boxaaCreate ( l_int32 n ); LEPT_DLL extern BOXAA * boxaaCopy ( BOXAA *baas, l_int32 copyflag ); LEPT_DLL extern void boxaaDestroy ( BOXAA **pbaa ); LEPT_DLL extern l_int32 boxaaAddBoxa ( BOXAA *baa, BOXA *ba, l_int32 copyflag ); LEPT_DLL extern l_int32 boxaaExtendArray ( BOXAA *baa ); LEPT_DLL extern l_int32 boxaaExtendArrayToSize ( BOXAA *baa, l_int32 size ); LEPT_DLL extern l_int32 boxaaGetCount ( BOXAA *baa ); LEPT_DLL extern l_int32 boxaaGetBoxCount ( BOXAA *baa ); LEPT_DLL extern BOXA * boxaaGetBoxa ( BOXAA *baa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern BOX * boxaaGetBox ( BOXAA *baa, l_int32 iboxa, l_int32 ibox, l_int32 accessflag ); LEPT_DLL extern l_int32 boxaaInitFull ( BOXAA *baa, BOXA *boxa ); LEPT_DLL extern l_int32 boxaaExtendWithInit ( BOXAA *baa, l_int32 maxindex, BOXA *boxa ); LEPT_DLL extern l_int32 boxaaReplaceBoxa ( BOXAA *baa, l_int32 index, BOXA *boxa ); LEPT_DLL extern l_int32 boxaaInsertBoxa ( BOXAA *baa, l_int32 index, BOXA *boxa ); LEPT_DLL extern l_int32 boxaaRemoveBoxa ( BOXAA *baa, l_int32 index ); LEPT_DLL extern l_int32 boxaaAddBox ( BOXAA *baa, l_int32 index, BOX *box, l_int32 accessflag ); LEPT_DLL extern BOXAA * boxaaReadFromFiles ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); LEPT_DLL extern BOXAA * boxaaRead ( const char *filename ); LEPT_DLL extern BOXAA * boxaaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 boxaaWrite ( const char *filename, BOXAA *baa ); LEPT_DLL extern l_int32 boxaaWriteStream ( FILE *fp, BOXAA *baa ); LEPT_DLL extern BOXA * boxaRead ( const char *filename ); LEPT_DLL extern BOXA * boxaReadStream ( FILE *fp ); LEPT_DLL extern BOXA * boxaReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_int32 boxaWrite ( const char *filename, BOXA *boxa ); LEPT_DLL extern l_int32 boxaWriteStream ( FILE *fp, BOXA *boxa ); LEPT_DLL extern l_int32 boxaWriteMem ( l_uint8 **pdata, size_t *psize, BOXA *boxa ); LEPT_DLL extern l_int32 boxPrintStreamInfo ( FILE *fp, BOX *box ); LEPT_DLL extern l_int32 boxContains ( BOX *box1, BOX *box2, l_int32 *presult ); LEPT_DLL extern l_int32 boxIntersects ( BOX *box1, BOX *box2, l_int32 *presult ); LEPT_DLL extern BOXA * boxaContainedInBox ( BOXA *boxas, BOX *box ); LEPT_DLL extern BOXA * boxaIntersectsBox ( BOXA *boxas, BOX *box ); LEPT_DLL extern BOXA * boxaClipToBox ( BOXA *boxas, BOX *box ); LEPT_DLL extern BOXA * boxaCombineOverlaps ( BOXA *boxas ); LEPT_DLL extern BOX * boxOverlapRegion ( BOX *box1, BOX *box2 ); LEPT_DLL extern BOX * boxBoundingRegion ( BOX *box1, BOX *box2 ); LEPT_DLL extern l_int32 boxOverlapFraction ( BOX *box1, BOX *box2, l_float32 *pfract ); LEPT_DLL extern l_int32 boxOverlapArea ( BOX *box1, BOX *box2, l_int32 *parea ); LEPT_DLL extern BOXA * boxaHandleOverlaps ( BOXA *boxas, l_int32 op, l_int32 range, l_float32 min_overlap, l_float32 max_ratio, NUMA **pnamap ); LEPT_DLL extern l_int32 boxSeparationDistance ( BOX *box1, BOX *box2, l_int32 *ph_sep, l_int32 *pv_sep ); LEPT_DLL extern l_int32 boxContainsPt ( BOX *box, l_float32 x, l_float32 y, l_int32 *pcontains ); LEPT_DLL extern BOX * boxaGetNearestToPt ( BOXA *boxa, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 boxGetCenter ( BOX *box, l_float32 *pcx, l_float32 *pcy ); LEPT_DLL extern l_int32 boxIntersectByLine ( BOX *box, l_int32 x, l_int32 y, l_float32 slope, l_int32 *px1, l_int32 *py1, l_int32 *px2, l_int32 *py2, l_int32 *pn ); LEPT_DLL extern BOX * boxClipToRectangle ( BOX *box, l_int32 wi, l_int32 hi ); LEPT_DLL extern l_int32 boxClipToRectangleParams ( BOX *box, l_int32 w, l_int32 h, l_int32 *pxstart, l_int32 *pystart, l_int32 *pxend, l_int32 *pyend, l_int32 *pbw, l_int32 *pbh ); LEPT_DLL extern BOX * boxRelocateOneSide ( BOX *boxd, BOX *boxs, l_int32 loc, l_int32 sideflag ); LEPT_DLL extern BOX * boxAdjustSides ( BOX *boxd, BOX *boxs, l_int32 delleft, l_int32 delright, l_int32 deltop, l_int32 delbot ); LEPT_DLL extern BOXA * boxaSetSide ( BOXA *boxad, BOXA *boxas, l_int32 side, l_int32 val, l_int32 thresh ); LEPT_DLL extern BOXA * boxaAdjustWidthToTarget ( BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh ); LEPT_DLL extern BOXA * boxaAdjustHeightToTarget ( BOXA *boxad, BOXA *boxas, l_int32 sides, l_int32 target, l_int32 thresh ); LEPT_DLL extern l_int32 boxEqual ( BOX *box1, BOX *box2, l_int32 *psame ); LEPT_DLL extern l_int32 boxaEqual ( BOXA *boxa1, BOXA *boxa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame ); LEPT_DLL extern l_int32 boxSimilar ( BOX *box1, BOX *box2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 *psimilar ); LEPT_DLL extern l_int32 boxaSimilar ( BOXA *boxa1, BOXA *boxa2, l_int32 leftdiff, l_int32 rightdiff, l_int32 topdiff, l_int32 botdiff, l_int32 debugflag, l_int32 *psimilar ); LEPT_DLL extern l_int32 boxaJoin ( BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_int32 boxaaJoin ( BOXAA *baad, BOXAA *baas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_int32 boxaSplitEvenOdd ( BOXA *boxa, l_int32 fillflag, BOXA **pboxae, BOXA **pboxao ); LEPT_DLL extern BOXA * boxaMergeEvenOdd ( BOXA *boxae, BOXA *boxao, l_int32 fillflag ); LEPT_DLL extern BOXA * boxaTransform ( BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern BOX * boxTransform ( BOX *box, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern BOXA * boxaTransformOrdered ( BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order ); LEPT_DLL extern BOX * boxTransformOrdered ( BOX *boxs, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order ); LEPT_DLL extern BOXA * boxaRotateOrth ( BOXA *boxas, l_int32 w, l_int32 h, l_int32 rotation ); LEPT_DLL extern BOX * boxRotateOrth ( BOX *box, l_int32 w, l_int32 h, l_int32 rotation ); LEPT_DLL extern BOXA * boxaSort ( BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern BOXA * boxaBinSort ( BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern BOXA * boxaSortByIndex ( BOXA *boxas, NUMA *naindex ); LEPT_DLL extern BOXAA * boxaSort2d ( BOXA *boxas, NUMAA **pnaad, l_int32 delta1, l_int32 delta2, l_int32 minh1 ); LEPT_DLL extern BOXAA * boxaSort2dByIndex ( BOXA *boxas, NUMAA *naa ); LEPT_DLL extern l_int32 boxaExtractAsNuma ( BOXA *boxa, NUMA **pnax, NUMA **pnay, NUMA **pnaw, NUMA **pnah, l_int32 keepinvalid ); LEPT_DLL extern l_int32 boxaExtractAsPta ( BOXA *boxa, PTA **pptal, PTA **pptat, PTA **pptar, PTA **pptab, l_int32 keepinvalid ); LEPT_DLL extern BOX * boxaGetRankSize ( BOXA *boxa, l_float32 fract ); LEPT_DLL extern BOX * boxaGetMedian ( BOXA *boxa ); LEPT_DLL extern l_int32 boxaaGetExtent ( BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa ); LEPT_DLL extern BOXA * boxaaFlattenToBoxa ( BOXAA *baa, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern BOXA * boxaaFlattenAligned ( BOXAA *baa, l_int32 num, BOX *fillerbox, l_int32 copyflag ); LEPT_DLL extern BOXAA * boxaEncapsulateAligned ( BOXA *boxa, l_int32 num, l_int32 copyflag ); LEPT_DLL extern l_int32 boxaaAlignBox ( BOXAA *baa, BOX *box, l_int32 delta, l_int32 *pindex ); LEPT_DLL extern PIX * pixMaskConnComp ( PIX *pixs, l_int32 connectivity, BOXA **pboxa ); LEPT_DLL extern PIX * pixMaskBoxa ( PIX *pixd, PIX *pixs, BOXA *boxa, l_int32 op ); LEPT_DLL extern PIX * pixPaintBoxa ( PIX *pixs, BOXA *boxa, l_uint32 val ); LEPT_DLL extern PIX * pixSetBlackOrWhiteBoxa ( PIX *pixs, BOXA *boxa, l_int32 op ); LEPT_DLL extern PIX * pixPaintBoxaRandom ( PIX *pixs, BOXA *boxa ); LEPT_DLL extern PIX * pixBlendBoxaRandom ( PIX *pixs, BOXA *boxa, l_float32 fract ); LEPT_DLL extern PIX * pixDrawBoxa ( PIX *pixs, BOXA *boxa, l_int32 width, l_uint32 val ); LEPT_DLL extern PIX * pixDrawBoxaRandom ( PIX *pixs, BOXA *boxa, l_int32 width ); LEPT_DLL extern PIX * boxaaDisplay ( BOXAA *baa, l_int32 linewba, l_int32 linewb, l_uint32 colorba, l_uint32 colorb, l_int32 w, l_int32 h ); LEPT_DLL extern BOXA * pixSplitIntoBoxa ( PIX *pixs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder ); LEPT_DLL extern BOXA * pixSplitComponentIntoBoxa ( PIX *pix, BOX *box, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder ); LEPT_DLL extern l_int32 boxaCompareRegions ( BOXA *boxa1, BOXA *boxa2, l_int32 areathresh, l_int32 *pnsame, l_float32 *pdiffarea, l_float32 *pdiffxor, PIX **ppixdb ); LEPT_DLL extern BOXA * boxaSelectRange ( BOXA *boxas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern BOXAA * boxaaSelectRange ( BOXAA *baas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern BOXA * boxaSelectBySize ( BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern NUMA * boxaMakeSizeIndicator ( BOXA *boxa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation ); LEPT_DLL extern BOXA * boxaSelectByArea ( BOXA *boxas, l_int32 area, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern NUMA * boxaMakeAreaIndicator ( BOXA *boxa, l_int32 area, l_int32 relation ); LEPT_DLL extern BOXA * boxaSelectWithIndicator ( BOXA *boxas, NUMA *na, l_int32 *pchanged ); LEPT_DLL extern BOXA * boxaPermutePseudorandom ( BOXA *boxas ); LEPT_DLL extern BOXA * boxaPermuteRandom ( BOXA *boxad, BOXA *boxas ); LEPT_DLL extern l_int32 boxaSwapBoxes ( BOXA *boxa, l_int32 i, l_int32 j ); LEPT_DLL extern PTA * boxaConvertToPta ( BOXA *boxa, l_int32 ncorners ); LEPT_DLL extern BOXA * ptaConvertToBoxa ( PTA *pta, l_int32 ncorners ); LEPT_DLL extern BOXA * boxaSmoothSequence ( BOXA *boxas, l_float32 factor, l_int32 max_error, l_int32 debug ); LEPT_DLL extern BOXA * boxaLinearFit ( BOXA *boxas, l_float32 factor, l_int32 max_error, l_int32 debug ); LEPT_DLL extern BOXA * boxaConstrainSize ( BOXA *boxas, l_int32 width, l_int32 widthflag, l_int32 height, l_int32 heightflag ); LEPT_DLL extern BOXA * boxaReconcileEvenOddHeight ( BOXA *boxas, l_int32 sides, l_int32 delh, l_int32 op, l_float32 factor ); LEPT_DLL extern l_int32 boxaPlotSides ( BOXA *boxa, const char *plotname, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, l_int32 outformat ); LEPT_DLL extern l_int32 boxaGetExtent ( BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox ); LEPT_DLL extern l_int32 boxaGetCoverage ( BOXA *boxa, l_int32 wc, l_int32 hc, l_int32 exactflag, l_float32 *pfract ); LEPT_DLL extern l_int32 boxaaSizeRange ( BOXAA *baa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_int32 boxaSizeRange ( BOXA *boxa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_int32 boxaLocationRange ( BOXA *boxa, l_int32 *pminx, l_int32 *pminy, l_int32 *pmaxx, l_int32 *pmaxy ); LEPT_DLL extern l_int32 boxaGetArea ( BOXA *boxa, l_int32 *parea ); LEPT_DLL extern PIX * boxaDisplayTiled ( BOXA *boxa, PIXA *pixa, l_int32 maxwidth, l_int32 linewidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border, const char *fontdir ); LEPT_DLL extern L_BYTEA * l_byteaCreate ( size_t nbytes ); LEPT_DLL extern L_BYTEA * l_byteaInitFromMem ( l_uint8 *data, size_t size ); LEPT_DLL extern L_BYTEA * l_byteaInitFromFile ( const char *fname ); LEPT_DLL extern L_BYTEA * l_byteaInitFromStream ( FILE *fp ); LEPT_DLL extern L_BYTEA * l_byteaCopy ( L_BYTEA *bas, l_int32 copyflag ); LEPT_DLL extern void l_byteaDestroy ( L_BYTEA **pba ); LEPT_DLL extern size_t l_byteaGetSize ( L_BYTEA *ba ); LEPT_DLL extern l_uint8 * l_byteaGetData ( L_BYTEA *ba, size_t *psize ); LEPT_DLL extern l_uint8 * l_byteaCopyData ( L_BYTEA *ba, size_t *psize ); LEPT_DLL extern l_int32 l_byteaAppendData ( L_BYTEA *ba, l_uint8 *newdata, size_t newbytes ); LEPT_DLL extern l_int32 l_byteaAppendString ( L_BYTEA *ba, char *str ); LEPT_DLL extern l_int32 l_byteaJoin ( L_BYTEA *ba1, L_BYTEA **pba2 ); LEPT_DLL extern l_int32 l_byteaSplit ( L_BYTEA *ba1, size_t splitloc, L_BYTEA **pba2 ); LEPT_DLL extern l_int32 l_byteaFindEachSequence ( L_BYTEA *ba, l_uint8 *sequence, l_int32 seqlen, L_DNA **pda ); LEPT_DLL extern l_int32 l_byteaWrite ( const char *fname, L_BYTEA *ba, size_t startloc, size_t endloc ); LEPT_DLL extern l_int32 l_byteaWriteStream ( FILE *fp, L_BYTEA *ba, size_t startloc, size_t endloc ); LEPT_DLL extern CCBORDA * ccbaCreate ( PIX *pixs, l_int32 n ); LEPT_DLL extern void ccbaDestroy ( CCBORDA **pccba ); LEPT_DLL extern CCBORD * ccbCreate ( PIX *pixs ); LEPT_DLL extern void ccbDestroy ( CCBORD **pccb ); LEPT_DLL extern l_int32 ccbaAddCcb ( CCBORDA *ccba, CCBORD *ccb ); LEPT_DLL extern l_int32 ccbaGetCount ( CCBORDA *ccba ); LEPT_DLL extern CCBORD * ccbaGetCcb ( CCBORDA *ccba, l_int32 index ); LEPT_DLL extern CCBORDA * pixGetAllCCBorders ( PIX *pixs ); LEPT_DLL extern CCBORD * pixGetCCBorders ( PIX *pixs, BOX *box ); LEPT_DLL extern PTAA * pixGetOuterBordersPtaa ( PIX *pixs ); LEPT_DLL extern PTA * pixGetOuterBorderPta ( PIX *pixs, BOX *box ); LEPT_DLL extern l_int32 pixGetOuterBorder ( CCBORD *ccb, PIX *pixs, BOX *box ); LEPT_DLL extern l_int32 pixGetHoleBorder ( CCBORD *ccb, PIX *pixs, BOX *box, l_int32 xs, l_int32 ys ); LEPT_DLL extern l_int32 findNextBorderPixel ( l_int32 w, l_int32 h, l_uint32 *data, l_int32 wpl, l_int32 px, l_int32 py, l_int32 *pqpos, l_int32 *pnpx, l_int32 *pnpy ); LEPT_DLL extern void locateOutsideSeedPixel ( l_int32 fpx, l_int32 fpy, l_int32 spx, l_int32 spy, l_int32 *pxs, l_int32 *pys ); LEPT_DLL extern l_int32 ccbaGenerateGlobalLocs ( CCBORDA *ccba ); LEPT_DLL extern l_int32 ccbaGenerateStepChains ( CCBORDA *ccba ); LEPT_DLL extern l_int32 ccbaStepChainsToPixCoords ( CCBORDA *ccba, l_int32 coordtype ); LEPT_DLL extern l_int32 ccbaGenerateSPGlobalLocs ( CCBORDA *ccba, l_int32 ptsflag ); LEPT_DLL extern l_int32 ccbaGenerateSinglePath ( CCBORDA *ccba ); LEPT_DLL extern PTA * getCutPathForHole ( PIX *pix, PTA *pta, BOX *boxinner, l_int32 *pdir, l_int32 *plen ); LEPT_DLL extern PIX * ccbaDisplayBorder ( CCBORDA *ccba ); LEPT_DLL extern PIX * ccbaDisplaySPBorder ( CCBORDA *ccba ); LEPT_DLL extern PIX * ccbaDisplayImage1 ( CCBORDA *ccba ); LEPT_DLL extern PIX * ccbaDisplayImage2 ( CCBORDA *ccba ); LEPT_DLL extern l_int32 ccbaWrite ( const char *filename, CCBORDA *ccba ); LEPT_DLL extern l_int32 ccbaWriteStream ( FILE *fp, CCBORDA *ccba ); LEPT_DLL extern CCBORDA * ccbaRead ( const char *filename ); LEPT_DLL extern CCBORDA * ccbaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 ccbaWriteSVG ( const char *filename, CCBORDA *ccba ); LEPT_DLL extern char * ccbaWriteSVGString ( const char *filename, CCBORDA *ccba ); LEPT_DLL extern PIX * pixThin ( PIX *pixs, l_int32 type, l_int32 connectivity, l_int32 maxiters ); LEPT_DLL extern PIX * pixThinGeneral ( PIX *pixs, l_int32 type, SELA *sela, l_int32 maxiters ); LEPT_DLL extern PIX * pixThinExamples ( PIX *pixs, l_int32 type, l_int32 index, l_int32 maxiters, const char *selfile ); LEPT_DLL extern l_int32 jbCorrelation ( const char *dirin, l_float32 thresh, l_float32 weight, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag ); LEPT_DLL extern l_int32 jbRankHaus ( const char *dirin, l_int32 size, l_float32 rank, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag ); LEPT_DLL extern JBCLASSER * jbWordsInTextlines ( const char *dirin, l_int32 reduction, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weight, NUMA **pnatl, l_int32 firstpage, l_int32 npages ); LEPT_DLL extern l_int32 pixGetWordsInTextlines ( PIX *pixs, l_int32 reduction, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad, NUMA **pnai ); LEPT_DLL extern l_int32 pixGetWordBoxesInTextlines ( PIX *pixs, l_int32 reduction, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, NUMA **pnai ); LEPT_DLL extern NUMAA * boxaExtractSortedPattern ( BOXA *boxa, NUMA *na ); LEPT_DLL extern l_int32 numaaCompareImagesByBoxes ( NUMAA *naa1, NUMAA *naa2, l_int32 nperline, l_int32 nreq, l_int32 maxshiftx, l_int32 maxshifty, l_int32 delx, l_int32 dely, l_int32 *psame, l_int32 debugflag ); LEPT_DLL extern l_int32 pixColorContent ( PIX *pixs, l_int32 rwhite, l_int32 gwhite, l_int32 bwhite, l_int32 mingray, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern PIX * pixColorMagnitude ( PIX *pixs, l_int32 rwhite, l_int32 gwhite, l_int32 bwhite, l_int32 type ); LEPT_DLL extern PIX * pixMaskOverColorPixels ( PIX *pixs, l_int32 threshdiff, l_int32 mindist ); LEPT_DLL extern l_int32 pixColorFraction ( PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_int32 factor, l_float32 *ppixfract, l_float32 *pcolorfract ); LEPT_DLL extern l_int32 pixNumSignificantGrayColors ( PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_float32 minfract, l_int32 factor, l_int32 *pncolors ); LEPT_DLL extern l_int32 pixColorsForQuantization ( PIX *pixs, l_int32 thresh, l_int32 *pncolors, l_int32 *piscolor, l_int32 debug ); LEPT_DLL extern l_int32 pixNumColors ( PIX *pixs, l_int32 factor, l_int32 *pncolors ); LEPT_DLL extern l_int32 pixGetMostPopulatedColors ( PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors, l_uint32 **parray, PIXCMAP **pcmap ); LEPT_DLL extern PIX * pixSimpleColorQuantize ( PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors ); LEPT_DLL extern NUMA * pixGetRGBHistogram ( PIX *pixs, l_int32 sigbits, l_int32 factor ); LEPT_DLL extern l_int32 makeRGBIndexTables ( l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab, l_int32 sigbits ); LEPT_DLL extern l_int32 getRGBFromIndex ( l_uint32 index, l_int32 sigbits, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern PIX * pixColorGrayRegions ( PIX *pixs, BOXA *boxa, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixColorGray ( PIX *pixs, BOX *box, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern PIX * pixSnapColor ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff ); LEPT_DLL extern PIX * pixSnapColorCmap ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff ); LEPT_DLL extern PIX * pixLinearMapToTargetColor ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval ); LEPT_DLL extern l_int32 pixelLinearMapToTargetColor ( l_uint32 scolor, l_uint32 srcmap, l_uint32 dstmap, l_uint32 *pdcolor ); LEPT_DLL extern PIX * pixShiftByComponent ( PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval ); LEPT_DLL extern l_int32 pixelShiftByComponent ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 srcval, l_uint32 dstval, l_uint32 *ppixel ); LEPT_DLL extern l_int32 pixelFractionalShift ( l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fraction, l_uint32 *ppixel ); LEPT_DLL extern PIXCMAP * pixcmapCreate ( l_int32 depth ); LEPT_DLL extern PIXCMAP * pixcmapCreateRandom ( l_int32 depth, l_int32 hasblack, l_int32 haswhite ); LEPT_DLL extern PIXCMAP * pixcmapCreateLinear ( l_int32 d, l_int32 nlevels ); LEPT_DLL extern PIXCMAP * pixcmapCopy ( PIXCMAP *cmaps ); LEPT_DLL extern void pixcmapDestroy ( PIXCMAP **pcmap ); LEPT_DLL extern l_int32 pixcmapAddColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixcmapAddRGBA ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval ); LEPT_DLL extern l_int32 pixcmapAddNewColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_int32 pixcmapAddNearestColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_int32 pixcmapUsableColor ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pusable ); LEPT_DLL extern l_int32 pixcmapAddBlackOrWhite ( PIXCMAP *cmap, l_int32 color, l_int32 *pindex ); LEPT_DLL extern l_int32 pixcmapSetBlackAndWhite ( PIXCMAP *cmap, l_int32 setblack, l_int32 setwhite ); LEPT_DLL extern l_int32 pixcmapGetCount ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapGetFreeCount ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapGetDepth ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapGetMinDepth ( PIXCMAP *cmap, l_int32 *pmindepth ); LEPT_DLL extern l_int32 pixcmapClear ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapGetColor ( PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_int32 pixcmapGetColor32 ( PIXCMAP *cmap, l_int32 index, l_uint32 *pval32 ); LEPT_DLL extern l_int32 pixcmapGetRGBA ( PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval ); LEPT_DLL extern l_int32 pixcmapGetRGBA32 ( PIXCMAP *cmap, l_int32 index, l_uint32 *pval32 ); LEPT_DLL extern l_int32 pixcmapResetColor ( PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixcmapGetIndex ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_int32 pixcmapHasColor ( PIXCMAP *cmap, l_int32 *pcolor ); LEPT_DLL extern l_int32 pixcmapIsOpaque ( PIXCMAP *cmap, l_int32 *popaque ); LEPT_DLL extern l_int32 pixcmapCountGrayColors ( PIXCMAP *cmap, l_int32 *pngray ); LEPT_DLL extern l_int32 pixcmapGetRankIntensity ( PIXCMAP *cmap, l_float32 rankval, l_int32 *pindex ); LEPT_DLL extern l_int32 pixcmapGetNearestIndex ( PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex ); LEPT_DLL extern l_int32 pixcmapGetNearestGrayIndex ( PIXCMAP *cmap, l_int32 val, l_int32 *pindex ); LEPT_DLL extern l_int32 pixcmapGetComponentRange ( PIXCMAP *cmap, l_int32 color, l_int32 *pminval, l_int32 *pmaxval ); LEPT_DLL extern l_int32 pixcmapGetExtremeValue ( PIXCMAP *cmap, l_int32 type, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern PIXCMAP * pixcmapGrayToColor ( l_uint32 color ); LEPT_DLL extern PIXCMAP * pixcmapColorToGray ( PIXCMAP *cmaps, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern PIXCMAP * pixcmapReadStream ( FILE *fp ); LEPT_DLL extern l_int32 pixcmapWriteStream ( FILE *fp, PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapToArrays ( PIXCMAP *cmap, l_int32 **prmap, l_int32 **pgmap, l_int32 **pbmap, l_int32 **pamap ); LEPT_DLL extern l_int32 pixcmapToRGBTable ( PIXCMAP *cmap, l_uint32 **ptab, l_int32 *pncolors ); LEPT_DLL extern l_int32 pixcmapSerializeToMemory ( PIXCMAP *cmap, l_int32 cpc, l_int32 *pncolors, l_uint8 **pdata ); LEPT_DLL extern PIXCMAP * pixcmapDeserializeFromMemory ( l_uint8 *data, l_int32 cpc, l_int32 ncolors ); LEPT_DLL extern char * pixcmapConvertToHex ( l_uint8 *data, l_int32 ncolors ); LEPT_DLL extern l_int32 pixcmapGammaTRC ( PIXCMAP *cmap, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern l_int32 pixcmapContrastTRC ( PIXCMAP *cmap, l_float32 factor ); LEPT_DLL extern l_int32 pixcmapShiftIntensity ( PIXCMAP *cmap, l_float32 fraction ); LEPT_DLL extern l_int32 pixcmapShiftByComponent ( PIXCMAP *cmap, l_uint32 srcval, l_uint32 dstval ); LEPT_DLL extern PIX * pixColorMorph ( PIX *pixs, l_int32 type, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOctreeColorQuant ( PIX *pixs, l_int32 colors, l_int32 ditherflag ); LEPT_DLL extern PIX * pixOctreeColorQuantGeneral ( PIX *pixs, l_int32 colors, l_int32 ditherflag, l_float32 validthresh, l_float32 colorthresh ); LEPT_DLL extern l_int32 makeRGBToIndexTables ( l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab, l_int32 cqlevels ); LEPT_DLL extern void getOctcubeIndexFromRGB ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_uint32 *pindex ); LEPT_DLL extern PIX * pixOctreeQuantByPopulation ( PIX *pixs, l_int32 level, l_int32 ditherflag ); LEPT_DLL extern PIX * pixOctreeQuantNumColors ( PIX *pixs, l_int32 maxcolors, l_int32 subsample ); LEPT_DLL extern PIX * pixOctcubeQuantMixedWithGray ( PIX *pixs, l_int32 depth, l_int32 graylevels, l_int32 delta ); LEPT_DLL extern PIX * pixFixedOctcubeQuant256 ( PIX *pixs, l_int32 ditherflag ); LEPT_DLL extern PIX * pixFewColorsOctcubeQuant1 ( PIX *pixs, l_int32 level ); LEPT_DLL extern PIX * pixFewColorsOctcubeQuant2 ( PIX *pixs, l_int32 level, NUMA *na, l_int32 ncolors, l_int32 *pnerrors ); LEPT_DLL extern PIX * pixFewColorsOctcubeQuantMixed ( PIX *pixs, l_int32 level, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_float32 minfract, l_int32 maxspan ); LEPT_DLL extern PIX * pixFixedOctcubeQuantGenRGB ( PIX *pixs, l_int32 level ); LEPT_DLL extern PIX * pixQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric ); LEPT_DLL extern PIX * pixOctcubeQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric ); LEPT_DLL extern PIX * pixOctcubeQuantFromCmapLUT ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 *cmaptab, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab ); LEPT_DLL extern NUMA * pixOctcubeHistogram ( PIX *pixs, l_int32 level, l_int32 *pncolors ); LEPT_DLL extern l_int32 * pixcmapToOctcubeLUT ( PIXCMAP *cmap, l_int32 level, l_int32 metric ); LEPT_DLL extern l_int32 pixRemoveUnusedColors ( PIX *pixs ); LEPT_DLL extern l_int32 pixNumberOccupiedOctcubes ( PIX *pix, l_int32 level, l_int32 mincount, l_float32 minfract, l_int32 *pncolors ); LEPT_DLL extern PIX * pixMedianCutQuant ( PIX *pixs, l_int32 ditherflag ); LEPT_DLL extern PIX * pixMedianCutQuantGeneral ( PIX *pixs, l_int32 ditherflag, l_int32 outdepth, l_int32 maxcolors, l_int32 sigbits, l_int32 maxsub, l_int32 checkbw ); LEPT_DLL extern PIX * pixMedianCutQuantMixed ( PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh ); LEPT_DLL extern PIX * pixFewColorsMedianCutQuantMixed ( PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 maxncolors, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh ); LEPT_DLL extern l_int32 * pixMedianCutHisto ( PIX *pixs, l_int32 sigbits, l_int32 subsample ); LEPT_DLL extern PIX * pixColorSegment ( PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 selsize, l_int32 finalcolors ); LEPT_DLL extern PIX * pixColorSegmentCluster ( PIX *pixs, l_int32 maxdist, l_int32 maxcolors ); LEPT_DLL extern l_int32 pixAssignToNearestColor ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 level, l_int32 *countarray ); LEPT_DLL extern l_int32 pixColorSegmentClean ( PIX *pixs, l_int32 selsize, l_int32 *countarray ); LEPT_DLL extern l_int32 pixColorSegmentRemoveColors ( PIX *pixd, PIX *pixs, l_int32 finalcolors ); LEPT_DLL extern PIX * pixConvertRGBToHSV ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixConvertHSVToRGB ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 convertRGBToHSV ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *phval, l_int32 *psval, l_int32 *pvval ); LEPT_DLL extern l_int32 convertHSVToRGB ( l_int32 hval, l_int32 sval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_int32 pixcmapConvertRGBToHSV ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapConvertHSVToRGB ( PIXCMAP *cmap ); LEPT_DLL extern PIX * pixConvertRGBToHue ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToSaturation ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToValue ( PIX *pixs ); LEPT_DLL extern PIX * pixMakeRangeMaskHS ( PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 satcenter, l_int32 sathw, l_int32 regionflag ); LEPT_DLL extern PIX * pixMakeRangeMaskHV ( PIX *pixs, l_int32 huecenter, l_int32 huehw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag ); LEPT_DLL extern PIX * pixMakeRangeMaskSV ( PIX *pixs, l_int32 satcenter, l_int32 sathw, l_int32 valcenter, l_int32 valhw, l_int32 regionflag ); LEPT_DLL extern PIX * pixMakeHistoHS ( PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnasat ); LEPT_DLL extern PIX * pixMakeHistoHV ( PIX *pixs, l_int32 factor, NUMA **pnahue, NUMA **pnaval ); LEPT_DLL extern PIX * pixMakeHistoSV ( PIX *pixs, l_int32 factor, NUMA **pnasat, NUMA **pnaval ); LEPT_DLL extern l_int32 pixFindHistoPeaksHSV ( PIX *pixs, l_int32 type, l_int32 width, l_int32 height, l_int32 npeaks, l_float32 erasefactor, PTA **ppta, NUMA **pnatot, PIXA **ppixa ); LEPT_DLL extern PIX * displayHSVColorRange ( l_int32 hval, l_int32 sval, l_int32 vval, l_int32 huehw, l_int32 sathw, l_int32 nsamp, l_int32 factor ); LEPT_DLL extern PIX * pixConvertRGBToYUV ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixConvertYUVToRGB ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 convertRGBToYUV ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pyval, l_int32 *puval, l_int32 *pvval ); LEPT_DLL extern l_int32 convertYUVToRGB ( l_int32 yval, l_int32 uval, l_int32 vval, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_int32 pixcmapConvertRGBToYUV ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixcmapConvertYUVToRGB ( PIXCMAP *cmap ); LEPT_DLL extern l_int32 pixEqual ( PIX *pix1, PIX *pix2, l_int32 *psame ); LEPT_DLL extern l_int32 pixEqualWithAlpha ( PIX *pix1, PIX *pix2, l_int32 use_alpha, l_int32 *psame ); LEPT_DLL extern l_int32 pixEqualWithCmap ( PIX *pix1, PIX *pix2, l_int32 *psame ); LEPT_DLL extern l_int32 pixUsesCmapColor ( PIX *pixs, l_int32 *pcolor ); LEPT_DLL extern l_int32 pixCorrelationBinary ( PIX *pix1, PIX *pix2, l_float32 *pval ); LEPT_DLL extern PIX * pixDisplayDiffBinary ( PIX *pix1, PIX *pix2 ); LEPT_DLL extern l_int32 pixCompareBinary ( PIX *pix1, PIX *pix2, l_int32 comptype, l_float32 *pfract, PIX **ppixdiff ); LEPT_DLL extern l_int32 pixCompareGrayOrRGB ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); LEPT_DLL extern l_int32 pixCompareGray ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); LEPT_DLL extern l_int32 pixCompareRGB ( PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff ); LEPT_DLL extern l_int32 pixCompareTiled ( PIX *pix1, PIX *pix2, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixdiff ); LEPT_DLL extern NUMA * pixCompareRankDifference ( PIX *pix1, PIX *pix2, l_int32 factor ); LEPT_DLL extern l_int32 pixTestForSimilarity ( PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 maxfract, l_float32 maxave, l_int32 *psimilar, l_int32 printstats ); LEPT_DLL extern l_int32 pixGetDifferenceStats ( PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 *pfractdiff, l_float32 *pavediff, l_int32 printstats ); LEPT_DLL extern NUMA * pixGetDifferenceHistogram ( PIX *pix1, PIX *pix2, l_int32 factor ); LEPT_DLL extern l_int32 pixGetPerceptualDiff ( PIX *pixs1, PIX *pixs2, l_int32 sampling, l_int32 dilation, l_int32 mindiff, l_float32 *pfract, PIX **ppixdiff1, PIX **ppixdiff2 ); LEPT_DLL extern l_int32 pixGetPSNR ( PIX *pix1, PIX *pix2, l_int32 factor, l_float32 *ppsnr ); LEPT_DLL extern l_int32 pixCompareWithTranslation ( PIX *pix1, PIX *pix2, l_int32 thresh, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); LEPT_DLL extern l_int32 pixBestCorrelation ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 etransx, l_int32 etransy, l_int32 maxshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); LEPT_DLL extern BOXA * pixConnComp ( PIX *pixs, PIXA **ppixa, l_int32 connectivity ); LEPT_DLL extern BOXA * pixConnCompPixa ( PIX *pixs, PIXA **ppixa, l_int32 connectivity ); LEPT_DLL extern BOXA * pixConnCompBB ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern l_int32 pixCountConnComp ( PIX *pixs, l_int32 connectivity, l_int32 *pcount ); LEPT_DLL extern l_int32 nextOnPixelInRaster ( PIX *pixs, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py ); LEPT_DLL extern l_int32 nextOnPixelInRasterLow ( l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py ); LEPT_DLL extern BOX * pixSeedfillBB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity ); LEPT_DLL extern BOX * pixSeedfill4BB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern BOX * pixSeedfill8BB ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 pixSeedfill ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y, l_int32 connectivity ); LEPT_DLL extern l_int32 pixSeedfill4 ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 pixSeedfill8 ( PIX *pixs, L_STACK *stack, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 convertFilesTo1bpp ( const char *dirin, const char *substr, l_int32 upscaling, l_int32 thresh, l_int32 firstpage, l_int32 npages, const char *dirout, l_int32 outformat ); LEPT_DLL extern PIX * pixBlockconv ( PIX *pix, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixBlockconvGray ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixBlockconvAccum ( PIX *pixs ); LEPT_DLL extern PIX * pixBlockconvGrayUnnormalized ( PIX *pixs, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixBlockconvTiled ( PIX *pix, l_int32 wc, l_int32 hc, l_int32 nx, l_int32 ny ); LEPT_DLL extern PIX * pixBlockconvGrayTile ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); LEPT_DLL extern l_int32 pixWindowedStats ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, PIX **ppixm, PIX **ppixms, FPIX **pfpixv, FPIX **pfpixrv ); LEPT_DLL extern PIX * pixWindowedMean ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder, l_int32 normflag ); LEPT_DLL extern PIX * pixWindowedMeanSquare ( PIX *pixs, l_int32 wc, l_int32 hc, l_int32 hasborder ); LEPT_DLL extern l_int32 pixWindowedVariance ( PIX *pixm, PIX *pixms, FPIX **pfpixv, FPIX **pfpixrv ); LEPT_DLL extern DPIX * pixMeanSquareAccum ( PIX *pixs ); LEPT_DLL extern PIX * pixBlockrank ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc, l_float32 rank ); LEPT_DLL extern PIX * pixBlocksum ( PIX *pixs, PIX *pixacc, l_int32 wc, l_int32 hc ); LEPT_DLL extern PIX * pixCensusTransform ( PIX *pixs, l_int32 halfsize, PIX *pixacc ); LEPT_DLL extern PIX * pixConvolve ( PIX *pixs, L_KERNEL *kel, l_int32 outdepth, l_int32 normflag ); LEPT_DLL extern PIX * pixConvolveSep ( PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 outdepth, l_int32 normflag ); LEPT_DLL extern PIX * pixConvolveRGB ( PIX *pixs, L_KERNEL *kel ); LEPT_DLL extern PIX * pixConvolveRGBSep ( PIX *pixs, L_KERNEL *kelx, L_KERNEL *kely ); LEPT_DLL extern FPIX * fpixConvolve ( FPIX *fpixs, L_KERNEL *kel, l_int32 normflag ); LEPT_DLL extern FPIX * fpixConvolveSep ( FPIX *fpixs, L_KERNEL *kelx, L_KERNEL *kely, l_int32 normflag ); LEPT_DLL extern PIX * pixConvolveWithBias ( PIX *pixs, L_KERNEL *kel1, L_KERNEL *kel2, l_int32 force8, l_int32 *pbias ); LEPT_DLL extern void l_setConvolveSampling ( l_int32 xfact, l_int32 yfact ); LEPT_DLL extern PIX * pixAddGaussianNoise ( PIX *pixs, l_float32 stdev ); LEPT_DLL extern l_float32 gaussDistribSampling ( ); LEPT_DLL extern void blockconvLow ( l_uint32 *data, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc ); LEPT_DLL extern void blockconvAccumLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls ); LEPT_DLL extern void blocksumLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpl, l_uint32 *dataa, l_int32 wpla, l_int32 wc, l_int32 hc ); LEPT_DLL extern l_int32 pixCorrelationScore ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore ); LEPT_DLL extern l_int32 pixCorrelationScoreThresholded ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_int32 *downcount, l_float32 score_threshold ); LEPT_DLL extern l_int32 pixCorrelationScoreSimple ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 *tab, l_float32 *pscore ); LEPT_DLL extern l_int32 pixCorrelationScoreShifted ( PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 delx, l_int32 dely, l_int32 *tab, l_float32 *pscore ); LEPT_DLL extern L_DEWARP * dewarpCreate ( PIX *pixs, l_int32 pageno ); LEPT_DLL extern L_DEWARP * dewarpCreateRef ( l_int32 pageno, l_int32 refpage ); LEPT_DLL extern void dewarpDestroy ( L_DEWARP **pdew ); LEPT_DLL extern L_DEWARPA * dewarpaCreate ( l_int32 nptrs, l_int32 sampling, l_int32 redfactor, l_int32 minlines, l_int32 maxdist ); LEPT_DLL extern L_DEWARPA * dewarpaCreateFromPixacomp ( PIXAC *pixac, l_int32 useboth, l_int32 sampling, l_int32 minlines, l_int32 maxdist ); LEPT_DLL extern void dewarpaDestroy ( L_DEWARPA **pdewa ); LEPT_DLL extern l_int32 dewarpaDestroyDewarp ( L_DEWARPA *dewa, l_int32 pageno ); LEPT_DLL extern l_int32 dewarpaInsertDewarp ( L_DEWARPA *dewa, L_DEWARP *dew ); LEPT_DLL extern L_DEWARP * dewarpaGetDewarp ( L_DEWARPA *dewa, l_int32 index ); LEPT_DLL extern l_int32 dewarpaSetCurvatures ( L_DEWARPA *dewa, l_int32 max_linecurv, l_int32 min_diff_linecurv, l_int32 max_diff_linecurv, l_int32 max_edgecurv, l_int32 max_diff_edgecurv ); LEPT_DLL extern l_int32 dewarpaUseBothArrays ( L_DEWARPA *dewa, l_int32 useboth ); LEPT_DLL extern l_int32 dewarpaSetMaxDistance ( L_DEWARPA *dewa, l_int32 maxdist ); LEPT_DLL extern L_DEWARP * dewarpRead ( const char *filename ); LEPT_DLL extern L_DEWARP * dewarpReadStream ( FILE *fp ); LEPT_DLL extern l_int32 dewarpWrite ( const char *filename, L_DEWARP *dew ); LEPT_DLL extern l_int32 dewarpWriteStream ( FILE *fp, L_DEWARP *dew ); LEPT_DLL extern L_DEWARPA * dewarpaRead ( const char *filename ); LEPT_DLL extern L_DEWARPA * dewarpaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 dewarpaWrite ( const char *filename, L_DEWARPA *dewa ); LEPT_DLL extern l_int32 dewarpaWriteStream ( FILE *fp, L_DEWARPA *dewa ); LEPT_DLL extern l_int32 dewarpBuildPageModel ( L_DEWARP *dew, const char *debugfile ); LEPT_DLL extern l_int32 dewarpFindVertDisparity ( L_DEWARP *dew, PTAA *ptaa, l_int32 rotflag ); LEPT_DLL extern l_int32 dewarpFindHorizDisparity ( L_DEWARP *dew, PTAA *ptaa ); LEPT_DLL extern PTAA * dewarpGetTextlineCenters ( PIX *pixs, l_int32 debugflag ); LEPT_DLL extern PTAA * dewarpRemoveShortLines ( PIX *pixs, PTAA *ptaas, l_float32 fract, l_int32 debugflag ); LEPT_DLL extern l_int32 dewarpBuildLineModel ( L_DEWARP *dew, l_int32 opensize, const char *debugfile ); LEPT_DLL extern l_int32 dewarpaModelStatus ( L_DEWARPA *dewa, l_int32 pageno, l_int32 *pvsuccess, l_int32 *phsuccess ); LEPT_DLL extern l_int32 dewarpaApplyDisparity ( L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 grayin, l_int32 x, l_int32 y, PIX **ppixd, const char *debugfile ); LEPT_DLL extern l_int32 dewarpMinimize ( L_DEWARP *dew ); LEPT_DLL extern l_int32 dewarpPopulateFullRes ( L_DEWARP *dew, PIX *pix, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 dewarpSinglePage ( PIX *pixs, l_int32 thresh, l_int32 adaptive, l_int32 both, PIX **ppixd, L_DEWARPA **pdewa, l_int32 debug ); LEPT_DLL extern l_int32 dewarpaListPages ( L_DEWARPA *dewa ); LEPT_DLL extern l_int32 dewarpaSetValidModels ( L_DEWARPA *dewa, l_int32 notests, l_int32 debug ); LEPT_DLL extern l_int32 dewarpaInsertRefModels ( L_DEWARPA *dewa, l_int32 notests, l_int32 debug ); LEPT_DLL extern l_int32 dewarpaStripRefModels ( L_DEWARPA *dewa ); LEPT_DLL extern l_int32 dewarpaRestoreModels ( L_DEWARPA *dewa ); LEPT_DLL extern l_int32 dewarpaInfo ( FILE *fp, L_DEWARPA *dewa ); LEPT_DLL extern l_int32 dewarpaModelStats ( L_DEWARPA *dewa, l_int32 *pnnone, l_int32 *pnvsuccess, l_int32 *pnvvalid, l_int32 *pnhsuccess, l_int32 *pnhvalid, l_int32 *pnref ); LEPT_DLL extern l_int32 dewarpaShowArrays ( L_DEWARPA *dewa, l_float32 scalefact, l_int32 first, l_int32 last ); LEPT_DLL extern l_int32 dewarpDebug ( L_DEWARP *dew, const char *subdir, l_int32 index ); LEPT_DLL extern l_int32 dewarpShowResults ( L_DEWARPA *dewa, SARRAY *sa, BOXA *boxa, l_int32 firstpage, l_int32 lastpage, const char *pdfout ); LEPT_DLL extern L_DNA * l_dnaCreate ( l_int32 n ); LEPT_DLL extern L_DNA * l_dnaCreateFromIArray ( l_int32 *iarray, l_int32 size ); LEPT_DLL extern L_DNA * l_dnaCreateFromDArray ( l_float64 *darray, l_int32 size, l_int32 copyflag ); LEPT_DLL extern L_DNA * l_dnaMakeSequence ( l_float64 startval, l_float64 increment, l_int32 size ); LEPT_DLL extern void l_dnaDestroy ( L_DNA **pda ); LEPT_DLL extern L_DNA * l_dnaCopy ( L_DNA *da ); LEPT_DLL extern L_DNA * l_dnaClone ( L_DNA *da ); LEPT_DLL extern l_int32 l_dnaEmpty ( L_DNA *da ); LEPT_DLL extern l_int32 l_dnaAddNumber ( L_DNA *da, l_float64 val ); LEPT_DLL extern l_int32 l_dnaInsertNumber ( L_DNA *da, l_int32 index, l_float64 val ); LEPT_DLL extern l_int32 l_dnaRemoveNumber ( L_DNA *da, l_int32 index ); LEPT_DLL extern l_int32 l_dnaReplaceNumber ( L_DNA *da, l_int32 index, l_float64 val ); LEPT_DLL extern l_int32 l_dnaGetCount ( L_DNA *da ); LEPT_DLL extern l_int32 l_dnaSetCount ( L_DNA *da, l_int32 newcount ); LEPT_DLL extern l_int32 l_dnaGetDValue ( L_DNA *da, l_int32 index, l_float64 *pval ); LEPT_DLL extern l_int32 l_dnaGetIValue ( L_DNA *da, l_int32 index, l_int32 *pival ); LEPT_DLL extern l_int32 l_dnaSetValue ( L_DNA *da, l_int32 index, l_float64 val ); LEPT_DLL extern l_int32 l_dnaShiftValue ( L_DNA *da, l_int32 index, l_float64 diff ); LEPT_DLL extern l_int32 * l_dnaGetIArray ( L_DNA *da ); LEPT_DLL extern l_float64 * l_dnaGetDArray ( L_DNA *da, l_int32 copyflag ); LEPT_DLL extern l_int32 l_dnaGetRefcount ( L_DNA *da ); LEPT_DLL extern l_int32 l_dnaChangeRefcount ( L_DNA *da, l_int32 delta ); LEPT_DLL extern l_int32 l_dnaGetParameters ( L_DNA *da, l_float64 *pstartx, l_float64 *pdelx ); LEPT_DLL extern l_int32 l_dnaSetParameters ( L_DNA *da, l_float64 startx, l_float64 delx ); LEPT_DLL extern l_int32 l_dnaCopyParameters ( L_DNA *dad, L_DNA *das ); LEPT_DLL extern L_DNA * l_dnaRead ( const char *filename ); LEPT_DLL extern L_DNA * l_dnaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 l_dnaWrite ( const char *filename, L_DNA *da ); LEPT_DLL extern l_int32 l_dnaWriteStream ( FILE *fp, L_DNA *da ); LEPT_DLL extern L_DNAA * l_dnaaCreate ( l_int32 n ); LEPT_DLL extern void l_dnaaDestroy ( L_DNAA **pdaa ); LEPT_DLL extern l_int32 l_dnaaAddDna ( L_DNAA *daa, L_DNA *da, l_int32 copyflag ); LEPT_DLL extern l_int32 l_dnaaGetCount ( L_DNAA *daa ); LEPT_DLL extern l_int32 l_dnaaGetDnaCount ( L_DNAA *daa, l_int32 index ); LEPT_DLL extern l_int32 l_dnaaGetNumberCount ( L_DNAA *daa ); LEPT_DLL extern L_DNA * l_dnaaGetDna ( L_DNAA *daa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern l_int32 l_dnaaReplaceDna ( L_DNAA *daa, l_int32 index, L_DNA *da ); LEPT_DLL extern l_int32 l_dnaaGetValue ( L_DNAA *daa, l_int32 i, l_int32 j, l_float64 *pval ); LEPT_DLL extern l_int32 l_dnaaAddNumber ( L_DNAA *daa, l_int32 index, l_float64 val ); LEPT_DLL extern L_DNAA * l_dnaaRead ( const char *filename ); LEPT_DLL extern L_DNAA * l_dnaaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 l_dnaaWrite ( const char *filename, L_DNAA *daa ); LEPT_DLL extern l_int32 l_dnaaWriteStream ( FILE *fp, L_DNAA *daa ); LEPT_DLL extern L_DNA * l_dnaMakeDelta ( L_DNA *das ); LEPT_DLL extern NUMA * l_dnaConvertToNuma ( L_DNA *da ); LEPT_DLL extern L_DNA * numaConvertToDna ( NUMA *na ); LEPT_DLL extern l_int32 l_dnaJoin ( L_DNA *dad, L_DNA *das, l_int32 istart, l_int32 iend ); LEPT_DLL extern PIX * pixMorphDwa_2 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern PIX * pixFMorphopGen_2 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern l_int32 fmorphopgen_low_2 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); LEPT_DLL extern PIX * pixSobelEdgeFilter ( PIX *pixs, l_int32 orientflag ); LEPT_DLL extern PIX * pixTwoSidedEdgeFilter ( PIX *pixs, l_int32 orientflag ); LEPT_DLL extern l_int32 pixMeasureEdgeSmoothness ( PIX *pixs, l_int32 side, l_int32 minjump, l_int32 minreversal, l_float32 *pjpl, l_float32 *pjspl, l_float32 *prpl, const char *debugfile ); LEPT_DLL extern NUMA * pixGetEdgeProfile ( PIX *pixs, l_int32 side, const char *debugfile ); LEPT_DLL extern l_int32 pixGetLastOffPixelInRun ( PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc ); LEPT_DLL extern l_int32 pixGetLastOnPixelInRun ( PIX *pixs, l_int32 x, l_int32 y, l_int32 direction, l_int32 *ploc ); LEPT_DLL extern PIX * pixGammaTRC ( PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixGammaTRCMasked ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixGammaTRCWithAlpha ( PIX *pixd, PIX *pixs, l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern NUMA * numaGammaTRC ( l_float32 gamma, l_int32 minval, l_int32 maxval ); LEPT_DLL extern PIX * pixContrastTRC ( PIX *pixd, PIX *pixs, l_float32 factor ); LEPT_DLL extern PIX * pixContrastTRCMasked ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 factor ); LEPT_DLL extern NUMA * numaContrastTRC ( l_float32 factor ); LEPT_DLL extern PIX * pixEqualizeTRC ( PIX *pixd, PIX *pixs, l_float32 fract, l_int32 factor ); LEPT_DLL extern NUMA * numaEqualizeTRC ( PIX *pix, l_float32 fract, l_int32 factor ); LEPT_DLL extern l_int32 pixTRCMap ( PIX *pixs, PIX *pixm, NUMA *na ); LEPT_DLL extern PIX * pixUnsharpMasking ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); LEPT_DLL extern PIX * pixUnsharpMaskingGray ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); LEPT_DLL extern PIX * pixUnsharpMaskingFast ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); LEPT_DLL extern PIX * pixUnsharpMaskingGrayFast ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); LEPT_DLL extern PIX * pixUnsharpMaskingGray1D ( PIX *pixs, l_int32 halfwidth, l_float32 fract, l_int32 direction ); LEPT_DLL extern PIX * pixUnsharpMaskingGray2D ( PIX *pixs, l_int32 halfwidth, l_float32 fract ); LEPT_DLL extern PIX * pixModifyHue ( PIX *pixd, PIX *pixs, l_float32 fract ); LEPT_DLL extern PIX * pixModifySaturation ( PIX *pixd, PIX *pixs, l_float32 fract ); LEPT_DLL extern l_int32 pixMeasureSaturation ( PIX *pixs, l_int32 factor, l_float32 *psat ); LEPT_DLL extern PIX * pixModifyBrightness ( PIX *pixd, PIX *pixs, l_float32 fract ); LEPT_DLL extern PIX * pixColorShiftRGB ( PIX *pixs, l_float32 rfract, l_float32 gfract, l_float32 bfract ); LEPT_DLL extern PIX * pixMultConstantColor ( PIX *pixs, l_float32 rfact, l_float32 gfact, l_float32 bfact ); LEPT_DLL extern PIX * pixMultMatrixColor ( PIX *pixs, L_KERNEL *kel ); LEPT_DLL extern PIX * pixHalfEdgeByBandpass ( PIX *pixs, l_int32 sm1h, l_int32 sm1v, l_int32 sm2h, l_int32 sm2v ); LEPT_DLL extern l_int32 fhmtautogen ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_int32 fhmtautogen1 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_int32 fhmtautogen2 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern PIX * pixHMTDwa_1 ( PIX *pixd, PIX *pixs, char *selname ); LEPT_DLL extern PIX * pixFHMTGen_1 ( PIX *pixd, PIX *pixs, char *selname ); LEPT_DLL extern l_int32 fhmtgen_low_1 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); LEPT_DLL extern l_int32 pixItalicWords ( PIX *pixs, BOXA *boxaw, PIX *pixw, BOXA **pboxa, l_int32 debugflag ); LEPT_DLL extern l_int32 pixOrientDetect ( PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern l_int32 makeOrientDecision ( l_float32 upconf, l_float32 leftconf, l_float32 minupconf, l_float32 minratio, l_int32 *porient, l_int32 debug ); LEPT_DLL extern l_int32 pixUpDownDetect ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern l_int32 pixUpDownDetectGeneral ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug ); LEPT_DLL extern l_int32 pixOrientDetectDwa ( PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern l_int32 pixUpDownDetectDwa ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern l_int32 pixUpDownDetectGeneralDwa ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug ); LEPT_DLL extern l_int32 pixMirrorDetect ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern l_int32 pixMirrorDetectDwa ( PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug ); LEPT_DLL extern PIX * pixFlipFHMTGen ( PIX *pixd, PIX *pixs, char *selname ); LEPT_DLL extern l_int32 fmorphautogen ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_int32 fmorphautogen1 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern l_int32 fmorphautogen2 ( SELA *sela, l_int32 fileindex, const char *filename ); LEPT_DLL extern PIX * pixMorphDwa_1 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern PIX * pixFMorphopGen_1 ( PIX *pixd, PIX *pixs, l_int32 operation, char *selname ); LEPT_DLL extern l_int32 fmorphopgen_low_1 ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index ); LEPT_DLL extern FPIX * fpixCreate ( l_int32 width, l_int32 height ); LEPT_DLL extern FPIX * fpixCreateTemplate ( FPIX *fpixs ); LEPT_DLL extern FPIX * fpixClone ( FPIX *fpix ); LEPT_DLL extern FPIX * fpixCopy ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern l_int32 fpixResizeImageData ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern void fpixDestroy ( FPIX **pfpix ); LEPT_DLL extern l_int32 fpixGetDimensions ( FPIX *fpix, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 fpixSetDimensions ( FPIX *fpix, l_int32 w, l_int32 h ); LEPT_DLL extern l_int32 fpixGetWpl ( FPIX *fpix ); LEPT_DLL extern l_int32 fpixSetWpl ( FPIX *fpix, l_int32 wpl ); LEPT_DLL extern l_int32 fpixGetRefcount ( FPIX *fpix ); LEPT_DLL extern l_int32 fpixChangeRefcount ( FPIX *fpix, l_int32 delta ); LEPT_DLL extern l_int32 fpixGetResolution ( FPIX *fpix, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_int32 fpixSetResolution ( FPIX *fpix, l_int32 xres, l_int32 yres ); LEPT_DLL extern l_int32 fpixCopyResolution ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern l_float32 * fpixGetData ( FPIX *fpix ); LEPT_DLL extern l_int32 fpixSetData ( FPIX *fpix, l_float32 *data ); LEPT_DLL extern l_int32 fpixGetPixel ( FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval ); LEPT_DLL extern l_int32 fpixSetPixel ( FPIX *fpix, l_int32 x, l_int32 y, l_float32 val ); LEPT_DLL extern FPIXA * fpixaCreate ( l_int32 n ); LEPT_DLL extern FPIXA * fpixaCopy ( FPIXA *fpixa, l_int32 copyflag ); LEPT_DLL extern void fpixaDestroy ( FPIXA **pfpixa ); LEPT_DLL extern l_int32 fpixaAddFPix ( FPIXA *fpixa, FPIX *fpix, l_int32 copyflag ); LEPT_DLL extern l_int32 fpixaGetCount ( FPIXA *fpixa ); LEPT_DLL extern l_int32 fpixaChangeRefcount ( FPIXA *fpixa, l_int32 delta ); LEPT_DLL extern FPIX * fpixaGetFPix ( FPIXA *fpixa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_int32 fpixaGetFPixDimensions ( FPIXA *fpixa, l_int32 index, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 fpixaGetPixel ( FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 *pval ); LEPT_DLL extern l_int32 fpixaSetPixel ( FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 val ); LEPT_DLL extern DPIX * dpixCreate ( l_int32 width, l_int32 height ); LEPT_DLL extern DPIX * dpixCreateTemplate ( DPIX *dpixs ); LEPT_DLL extern DPIX * dpixClone ( DPIX *dpix ); LEPT_DLL extern DPIX * dpixCopy ( DPIX *dpixd, DPIX *dpixs ); LEPT_DLL extern l_int32 dpixResizeImageData ( DPIX *dpixd, DPIX *dpixs ); LEPT_DLL extern void dpixDestroy ( DPIX **pdpix ); LEPT_DLL extern l_int32 dpixGetDimensions ( DPIX *dpix, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 dpixSetDimensions ( DPIX *dpix, l_int32 w, l_int32 h ); LEPT_DLL extern l_int32 dpixGetWpl ( DPIX *dpix ); LEPT_DLL extern l_int32 dpixSetWpl ( DPIX *dpix, l_int32 wpl ); LEPT_DLL extern l_int32 dpixGetRefcount ( DPIX *dpix ); LEPT_DLL extern l_int32 dpixChangeRefcount ( DPIX *dpix, l_int32 delta ); LEPT_DLL extern l_int32 dpixGetResolution ( DPIX *dpix, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_int32 dpixSetResolution ( DPIX *dpix, l_int32 xres, l_int32 yres ); LEPT_DLL extern l_int32 dpixCopyResolution ( DPIX *dpixd, DPIX *dpixs ); LEPT_DLL extern l_float64 * dpixGetData ( DPIX *dpix ); LEPT_DLL extern l_int32 dpixSetData ( DPIX *dpix, l_float64 *data ); LEPT_DLL extern l_int32 dpixGetPixel ( DPIX *dpix, l_int32 x, l_int32 y, l_float64 *pval ); LEPT_DLL extern l_int32 dpixSetPixel ( DPIX *dpix, l_int32 x, l_int32 y, l_float64 val ); LEPT_DLL extern FPIX * fpixRead ( const char *filename ); LEPT_DLL extern FPIX * fpixReadStream ( FILE *fp ); LEPT_DLL extern l_int32 fpixWrite ( const char *filename, FPIX *fpix ); LEPT_DLL extern l_int32 fpixWriteStream ( FILE *fp, FPIX *fpix ); LEPT_DLL extern FPIX * fpixEndianByteSwap ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern DPIX * dpixRead ( const char *filename ); LEPT_DLL extern DPIX * dpixReadStream ( FILE *fp ); LEPT_DLL extern l_int32 dpixWrite ( const char *filename, DPIX *dpix ); LEPT_DLL extern l_int32 dpixWriteStream ( FILE *fp, DPIX *dpix ); LEPT_DLL extern DPIX * dpixEndianByteSwap ( DPIX *dpixd, DPIX *dpixs ); LEPT_DLL extern l_int32 fpixPrintStream ( FILE *fp, FPIX *fpix, l_int32 factor ); LEPT_DLL extern FPIX * pixConvertToFPix ( PIX *pixs, l_int32 ncomps ); LEPT_DLL extern DPIX * pixConvertToDPix ( PIX *pixs, l_int32 ncomps ); LEPT_DLL extern PIX * fpixConvertToPix ( FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag ); LEPT_DLL extern PIX * fpixDisplayMaxDynamicRange ( FPIX *fpixs ); LEPT_DLL extern DPIX * fpixConvertToDPix ( FPIX *fpix ); LEPT_DLL extern PIX * dpixConvertToPix ( DPIX *dpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag ); LEPT_DLL extern FPIX * dpixConvertToFPix ( DPIX *dpix ); LEPT_DLL extern l_int32 fpixGetMin ( FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc ); LEPT_DLL extern l_int32 fpixGetMax ( FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc ); LEPT_DLL extern l_int32 dpixGetMin ( DPIX *dpix, l_float64 *pminval, l_int32 *pxminloc, l_int32 *pyminloc ); LEPT_DLL extern l_int32 dpixGetMax ( DPIX *dpix, l_float64 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc ); LEPT_DLL extern FPIX * fpixScaleByInteger ( FPIX *fpixs, l_int32 factor ); LEPT_DLL extern DPIX * dpixScaleByInteger ( DPIX *dpixs, l_int32 factor ); LEPT_DLL extern FPIX * fpixLinearCombination ( FPIX *fpixd, FPIX *fpixs1, FPIX *fpixs2, l_float32 a, l_float32 b ); LEPT_DLL extern l_int32 fpixAddMultConstant ( FPIX *fpix, l_float32 addc, l_float32 multc ); LEPT_DLL extern DPIX * dpixLinearCombination ( DPIX *dpixd, DPIX *dpixs1, DPIX *dpixs2, l_float32 a, l_float32 b ); LEPT_DLL extern l_int32 dpixAddMultConstant ( DPIX *dpix, l_float64 addc, l_float64 multc ); LEPT_DLL extern l_int32 fpixSetAllArbitrary ( FPIX *fpix, l_float32 inval ); LEPT_DLL extern l_int32 dpixSetAllArbitrary ( DPIX *dpix, l_float64 inval ); LEPT_DLL extern FPIX * fpixAddBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixRemoveBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixAddMirroredBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixAddContinuedBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern FPIX * fpixAddSlopeBorder ( FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern l_int32 fpixRasterop ( FPIX *fpixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, FPIX *fpixs, l_int32 sx, l_int32 sy ); LEPT_DLL extern FPIX * fpixRotateOrth ( FPIX *fpixs, l_int32 quads ); LEPT_DLL extern FPIX * fpixRotate180 ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern FPIX * fpixRotate90 ( FPIX *fpixs, l_int32 direction ); LEPT_DLL extern FPIX * fpixFlipLR ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern FPIX * fpixFlipTB ( FPIX *fpixd, FPIX *fpixs ); LEPT_DLL extern FPIX * fpixAffinePta ( FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval ); LEPT_DLL extern FPIX * fpixAffine ( FPIX *fpixs, l_float32 *vc, l_float32 inval ); LEPT_DLL extern FPIX * fpixProjectivePta ( FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval ); LEPT_DLL extern FPIX * fpixProjective ( FPIX *fpixs, l_float32 *vc, l_float32 inval ); LEPT_DLL extern l_int32 linearInterpolatePixelFloat ( l_float32 *datas, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_float32 inval, l_float32 *pval ); LEPT_DLL extern PIX * fpixThresholdToPix ( FPIX *fpix, l_float32 thresh ); LEPT_DLL extern FPIX * pixComponentFunction ( PIX *pix, l_float32 rnum, l_float32 gnum, l_float32 bnum, l_float32 rdenom, l_float32 gdenom, l_float32 bdenom ); LEPT_DLL extern PIX * pixReadStreamGif ( FILE *fp ); LEPT_DLL extern l_int32 pixWriteStreamGif ( FILE *fp, PIX *pix ); LEPT_DLL extern PIX * pixReadMemGif ( const l_uint8 *cdata, size_t size ); LEPT_DLL extern l_int32 pixWriteMemGif ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern GPLOT * gplotCreate ( const char *rootname, l_int32 outformat, const char *title, const char *xlabel, const char *ylabel ); LEPT_DLL extern void gplotDestroy ( GPLOT **pgplot ); LEPT_DLL extern l_int32 gplotAddPlot ( GPLOT *gplot, NUMA *nax, NUMA *nay, l_int32 plotstyle, const char *plottitle ); LEPT_DLL extern l_int32 gplotSetScaling ( GPLOT *gplot, l_int32 scaling ); LEPT_DLL extern l_int32 gplotMakeOutput ( GPLOT *gplot ); LEPT_DLL extern l_int32 gplotGenCommandFile ( GPLOT *gplot ); LEPT_DLL extern l_int32 gplotGenDataFiles ( GPLOT *gplot ); LEPT_DLL extern l_int32 gplotSimple1 ( NUMA *na, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern l_int32 gplotSimple2 ( NUMA *na1, NUMA *na2, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern l_int32 gplotSimpleN ( NUMAA *naa, l_int32 outformat, const char *outroot, const char *title ); LEPT_DLL extern GPLOT * gplotRead ( const char *filename ); LEPT_DLL extern l_int32 gplotWrite ( const char *filename, GPLOT *gplot ); LEPT_DLL extern PTA * generatePtaLine ( l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2 ); LEPT_DLL extern PTA * generatePtaWideLine ( l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width ); LEPT_DLL extern PTA * generatePtaBox ( BOX *box, l_int32 width ); LEPT_DLL extern PTA * generatePtaBoxa ( BOXA *boxa, l_int32 width, l_int32 removedups ); LEPT_DLL extern PTA * generatePtaHashBox ( BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline ); LEPT_DLL extern PTA * generatePtaHashBoxa ( BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 removedups ); LEPT_DLL extern PTAA * generatePtaaBoxa ( BOXA *boxa ); LEPT_DLL extern PTAA * generatePtaaHashBoxa ( BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline ); LEPT_DLL extern PTA * generatePtaPolyline ( PTA *ptas, l_int32 width, l_int32 closeflag, l_int32 removedups ); LEPT_DLL extern PTA * convertPtaLineTo4cc ( PTA *ptas ); LEPT_DLL extern PTA * generatePtaFilledCircle ( l_int32 radius ); LEPT_DLL extern PTA * generatePtaFilledSquare ( l_int32 side ); LEPT_DLL extern PTA * generatePtaLineFromPt ( l_int32 x, l_int32 y, l_float64 length, l_float64 radang ); LEPT_DLL extern l_int32 locatePtRadially ( l_int32 xr, l_int32 yr, l_float64 dist, l_float64 radang, l_float64 *px, l_float64 *py ); LEPT_DLL extern PTA * generatePlotPtaFromNuma ( NUMA *na, l_int32 orient, l_int32 width, l_int32 refpos, l_int32 max, l_int32 drawref ); LEPT_DLL extern l_int32 pixRenderPta ( PIX *pix, PTA *pta, l_int32 op ); LEPT_DLL extern l_int32 pixRenderPtaArb ( PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_int32 pixRenderPtaBlend ( PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); LEPT_DLL extern l_int32 pixRenderLine ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_int32 op ); LEPT_DLL extern l_int32 pixRenderLineArb ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_int32 pixRenderLineBlend ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); LEPT_DLL extern l_int32 pixRenderBox ( PIX *pix, BOX *box, l_int32 width, l_int32 op ); LEPT_DLL extern l_int32 pixRenderBoxArb ( PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_int32 pixRenderBoxBlend ( PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract ); LEPT_DLL extern l_int32 pixRenderBoxa ( PIX *pix, BOXA *boxa, l_int32 width, l_int32 op ); LEPT_DLL extern l_int32 pixRenderBoxaArb ( PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval ); LEPT_DLL extern l_int32 pixRenderBoxaBlend ( PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 removedups ); LEPT_DLL extern l_int32 pixRenderHashBox ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op ); LEPT_DLL extern l_int32 pixRenderHashBoxArb ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixRenderHashBoxBlend ( PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract ); LEPT_DLL extern l_int32 pixRenderHashBoxa ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op ); LEPT_DLL extern l_int32 pixRenderHashBoxaArb ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixRenderHashBoxaBlend ( PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract ); LEPT_DLL extern l_int32 pixRenderPolyline ( PIX *pix, PTA *ptas, l_int32 width, l_int32 op, l_int32 closeflag ); LEPT_DLL extern l_int32 pixRenderPolylineArb ( PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_int32 closeflag ); LEPT_DLL extern l_int32 pixRenderPolylineBlend ( PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 closeflag, l_int32 removedups ); LEPT_DLL extern PIX * pixRenderRandomCmapPtaa ( PIX *pix, PTAA *ptaa, l_int32 polyflag, l_int32 width, l_int32 closeflag ); LEPT_DLL extern PIX * pixRenderPolygon ( PTA *ptas, l_int32 width, l_int32 *pxmin, l_int32 *pymin ); LEPT_DLL extern PIX * pixFillPolygon ( PIX *pixs, PTA *pta, l_int32 xmin, l_int32 ymin ); LEPT_DLL extern PIX * pixRenderContours ( PIX *pixs, l_int32 startval, l_int32 incr, l_int32 outdepth ); LEPT_DLL extern PIX * fpixAutoRenderContours ( FPIX *fpix, l_int32 ncontours ); LEPT_DLL extern PIX * fpixRenderContours ( FPIX *fpixs, l_float32 incr, l_float32 proxim ); LEPT_DLL extern PIX * pixErodeGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseGray ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseGray3 ( PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern void dilateGrayLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *maxarray ); LEPT_DLL extern void erodeGrayLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *minarray ); LEPT_DLL extern PIX * pixDitherToBinary ( PIX *pixs ); LEPT_DLL extern PIX * pixDitherToBinarySpec ( PIX *pixs, l_int32 lowerclip, l_int32 upperclip ); LEPT_DLL extern PIX * pixThresholdToBinary ( PIX *pixs, l_int32 thresh ); LEPT_DLL extern PIX * pixVarThresholdToBinary ( PIX *pixs, PIX *pixg ); LEPT_DLL extern PIX * pixDitherToBinaryLUT ( PIX *pixs, l_int32 lowerclip, l_int32 upperclip ); LEPT_DLL extern PIX * pixGenerateMaskByValue ( PIX *pixs, l_int32 val, l_int32 usecmap ); LEPT_DLL extern PIX * pixGenerateMaskByBand ( PIX *pixs, l_int32 lower, l_int32 upper, l_int32 inband, l_int32 usecmap ); LEPT_DLL extern PIX * pixDitherTo2bpp ( PIX *pixs, l_int32 cmapflag ); LEPT_DLL extern PIX * pixDitherTo2bppSpec ( PIX *pixs, l_int32 lowerclip, l_int32 upperclip, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdTo2bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdTo4bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdOn8bpp ( PIX *pixs, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixThresholdGrayArb ( PIX *pixs, const char *edgevals, l_int32 outdepth, l_int32 use_average, l_int32 setblack, l_int32 setwhite ); LEPT_DLL extern l_int32 * makeGrayQuantIndexTable ( l_int32 nlevels ); LEPT_DLL extern l_int32 * makeGrayQuantTargetTable ( l_int32 nlevels, l_int32 depth ); LEPT_DLL extern l_int32 makeGrayQuantTableArb ( NUMA *na, l_int32 outdepth, l_int32 **ptab, PIXCMAP **pcmap ); LEPT_DLL extern l_int32 makeGrayQuantColormapArb ( PIX *pixs, l_int32 *tab, l_int32 outdepth, PIXCMAP **pcmap ); LEPT_DLL extern PIX * pixGenerateMaskByBand32 ( PIX *pixs, l_uint32 refval, l_int32 delm, l_int32 delp ); LEPT_DLL extern PIX * pixGenerateMaskByDiscr32 ( PIX *pixs, l_uint32 refval1, l_uint32 refval2, l_int32 distflag ); LEPT_DLL extern PIX * pixGrayQuantFromHisto ( PIX *pixd, PIX *pixs, PIX *pixm, l_float32 minfract, l_int32 maxsize ); LEPT_DLL extern PIX * pixGrayQuantFromCmap ( PIX *pixs, PIXCMAP *cmap, l_int32 mindepth ); LEPT_DLL extern void ditherToBinaryLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip ); LEPT_DLL extern void ditherToBinaryLineLow ( l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip, l_int32 lastlineflag ); LEPT_DLL extern void thresholdToBinaryLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls, l_int32 thresh ); LEPT_DLL extern void thresholdToBinaryLineLow ( l_uint32 *lined, l_int32 w, l_uint32 *lines, l_int32 d, l_int32 thresh ); LEPT_DLL extern void ditherToBinaryLUTLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14 ); LEPT_DLL extern void ditherToBinaryLineLUTLow ( l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14, l_int32 lastlineflag ); LEPT_DLL extern l_int32 make8To1DitherTables ( l_int32 **ptabval, l_int32 **ptab38, l_int32 **ptab14, l_int32 lowerclip, l_int32 upperclip ); LEPT_DLL extern void ditherTo2bppLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14 ); LEPT_DLL extern void ditherTo2bppLineLow ( l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 *tabval, l_int32 *tab38, l_int32 *tab14, l_int32 lastlineflag ); LEPT_DLL extern l_int32 make8To2DitherTables ( l_int32 **ptabval, l_int32 **ptab38, l_int32 **ptab14, l_int32 cliptoblack, l_int32 cliptowhite ); LEPT_DLL extern void thresholdTo2bppLow ( l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab ); LEPT_DLL extern void thresholdTo4bppLow ( l_uint32 *datad, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab ); LEPT_DLL extern L_HEAP * lheapCreate ( l_int32 nalloc, l_int32 direction ); LEPT_DLL extern void lheapDestroy ( L_HEAP **plh, l_int32 freeflag ); LEPT_DLL extern l_int32 lheapAdd ( L_HEAP *lh, void *item ); LEPT_DLL extern void * lheapRemove ( L_HEAP *lh ); LEPT_DLL extern l_int32 lheapGetCount ( L_HEAP *lh ); LEPT_DLL extern l_int32 lheapSwapUp ( L_HEAP *lh, l_int32 index ); LEPT_DLL extern l_int32 lheapSwapDown ( L_HEAP *lh ); LEPT_DLL extern l_int32 lheapSort ( L_HEAP *lh ); LEPT_DLL extern l_int32 lheapSortStrictOrder ( L_HEAP *lh ); LEPT_DLL extern l_int32 lheapPrint ( FILE *fp, L_HEAP *lh ); LEPT_DLL extern JBCLASSER * jbRankHausInit ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_int32 size, l_float32 rank ); LEPT_DLL extern JBCLASSER * jbCorrelationInit ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor ); LEPT_DLL extern JBCLASSER * jbCorrelationInitWithoutComponents ( l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor ); LEPT_DLL extern l_int32 jbAddPages ( JBCLASSER *classer, SARRAY *safiles ); LEPT_DLL extern l_int32 jbAddPage ( JBCLASSER *classer, PIX *pixs ); LEPT_DLL extern l_int32 jbAddPageComponents ( JBCLASSER *classer, PIX *pixs, BOXA *boxas, PIXA *pixas ); LEPT_DLL extern l_int32 jbClassifyRankHaus ( JBCLASSER *classer, BOXA *boxa, PIXA *pixas ); LEPT_DLL extern l_int32 pixHaustest ( PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh ); LEPT_DLL extern l_int32 pixRankHaustest ( PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, l_float32 dely, l_int32 maxdiffw, l_int32 maxdiffh, l_int32 area1, l_int32 area3, l_float32 rank, l_int32 *tab8 ); LEPT_DLL extern l_int32 jbClassifyCorrelation ( JBCLASSER *classer, BOXA *boxa, PIXA *pixas ); LEPT_DLL extern l_int32 jbGetComponents ( PIX *pixs, l_int32 components, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad ); LEPT_DLL extern l_int32 pixWordMaskByDilation ( PIX *pixs, l_int32 maxdil, PIX **ppixm, l_int32 *psize ); LEPT_DLL extern l_int32 pixWordBoxesByDilation ( PIX *pixs, l_int32 maxdil, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxa, l_int32 *psize ); LEPT_DLL extern PIXA * jbAccumulateComposites ( PIXAA *pixaa, NUMA **pna, PTA **pptat ); LEPT_DLL extern PIXA * jbTemplatesFromComposites ( PIXA *pixac, NUMA *na ); LEPT_DLL extern JBCLASSER * jbClasserCreate ( l_int32 method, l_int32 components ); LEPT_DLL extern void jbClasserDestroy ( JBCLASSER **pclasser ); LEPT_DLL extern JBDATA * jbDataSave ( JBCLASSER *classer ); LEPT_DLL extern void jbDataDestroy ( JBDATA **pdata ); LEPT_DLL extern l_int32 jbDataWrite ( const char *rootout, JBDATA *jbdata ); LEPT_DLL extern JBDATA * jbDataRead ( const char *rootname ); LEPT_DLL extern PIXA * jbDataRender ( JBDATA *data, l_int32 debugflag ); LEPT_DLL extern l_int32 jbGetULCorners ( JBCLASSER *classer, PIX *pixs, BOXA *boxa ); LEPT_DLL extern l_int32 jbGetLLCorners ( JBCLASSER *classer ); LEPT_DLL extern l_int32 readHeaderJp2k ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); LEPT_DLL extern l_int32 freadHeaderJp2k ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); LEPT_DLL extern l_int32 sreadHeaderJp2k ( const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); LEPT_DLL extern PIX * pixReadJpeg ( const char *filename, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn ); LEPT_DLL extern PIX * pixReadStreamJpeg ( FILE *fp, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); LEPT_DLL extern l_int32 readHeaderJpeg ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); LEPT_DLL extern l_int32 freadHeaderJpeg ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); LEPT_DLL extern l_int32 fgetJpegResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_int32 fgetJpegComment ( FILE *fp, l_uint8 **pcomment ); LEPT_DLL extern l_int32 pixWriteJpeg ( const char *filename, PIX *pix, l_int32 quality, l_int32 progressive ); LEPT_DLL extern l_int32 pixWriteStreamJpeg ( FILE *fp, PIX *pix, l_int32 quality, l_int32 progressive ); LEPT_DLL extern PIX * pixReadMemJpeg ( const l_uint8 *cdata, size_t size, l_int32 cmflag, l_int32 reduction, l_int32 *pnwarn, l_int32 hint ); LEPT_DLL extern l_int32 readHeaderMemJpeg ( const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp, l_int32 *pycck, l_int32 *pcmyk ); LEPT_DLL extern l_int32 pixWriteMemJpeg ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 quality, l_int32 progressive ); LEPT_DLL extern l_int32 pixSetChromaSampling ( PIX *pix, l_int32 sampling ); LEPT_DLL extern l_int32 extractJpegDataFromFile ( const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern l_int32 extractJpegDataFromArray ( const void *data, size_t nbytes, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern L_KERNEL * kernelCreate ( l_int32 height, l_int32 width ); LEPT_DLL extern void kernelDestroy ( L_KERNEL **pkel ); LEPT_DLL extern L_KERNEL * kernelCopy ( L_KERNEL *kels ); LEPT_DLL extern l_int32 kernelGetElement ( L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 *pval ); LEPT_DLL extern l_int32 kernelSetElement ( L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 val ); LEPT_DLL extern l_int32 kernelGetParameters ( L_KERNEL *kel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx ); LEPT_DLL extern l_int32 kernelSetOrigin ( L_KERNEL *kel, l_int32 cy, l_int32 cx ); LEPT_DLL extern l_int32 kernelGetSum ( L_KERNEL *kel, l_float32 *psum ); LEPT_DLL extern l_int32 kernelGetMinMax ( L_KERNEL *kel, l_float32 *pmin, l_float32 *pmax ); LEPT_DLL extern L_KERNEL * kernelNormalize ( L_KERNEL *kels, l_float32 normsum ); LEPT_DLL extern L_KERNEL * kernelInvert ( L_KERNEL *kels ); LEPT_DLL extern l_float32 ** create2dFloatArray ( l_int32 sy, l_int32 sx ); LEPT_DLL extern L_KERNEL * kernelRead ( const char *fname ); LEPT_DLL extern L_KERNEL * kernelReadStream ( FILE *fp ); LEPT_DLL extern l_int32 kernelWrite ( const char *fname, L_KERNEL *kel ); LEPT_DLL extern l_int32 kernelWriteStream ( FILE *fp, L_KERNEL *kel ); LEPT_DLL extern L_KERNEL * kernelCreateFromString ( l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, const char *kdata ); LEPT_DLL extern L_KERNEL * kernelCreateFromFile ( const char *filename ); LEPT_DLL extern L_KERNEL * kernelCreateFromPix ( PIX *pix, l_int32 cy, l_int32 cx ); LEPT_DLL extern PIX * kernelDisplayInPix ( L_KERNEL *kel, l_int32 size, l_int32 gthick ); LEPT_DLL extern NUMA * parseStringForNumbers ( const char *str, const char *seps ); LEPT_DLL extern L_KERNEL * makeFlatKernel ( l_int32 height, l_int32 width, l_int32 cy, l_int32 cx ); LEPT_DLL extern L_KERNEL * makeGaussianKernel ( l_int32 halfheight, l_int32 halfwidth, l_float32 stdev, l_float32 max ); LEPT_DLL extern l_int32 makeGaussianKernelSep ( l_int32 halfheight, l_int32 halfwidth, l_float32 stdev, l_float32 max, L_KERNEL **pkelx, L_KERNEL **pkely ); LEPT_DLL extern L_KERNEL * makeDoGKernel ( l_int32 halfheight, l_int32 halfwidth, l_float32 stdev, l_float32 ratio ); LEPT_DLL extern char * getImagelibVersions ( ); LEPT_DLL extern void listDestroy ( DLLIST **phead ); LEPT_DLL extern l_int32 listAddToHead ( DLLIST **phead, void *data ); LEPT_DLL extern l_int32 listAddToTail ( DLLIST **phead, DLLIST **ptail, void *data ); LEPT_DLL extern l_int32 listInsertBefore ( DLLIST **phead, DLLIST *elem, void *data ); LEPT_DLL extern l_int32 listInsertAfter ( DLLIST **phead, DLLIST *elem, void *data ); LEPT_DLL extern void * listRemoveElement ( DLLIST **phead, DLLIST *elem ); LEPT_DLL extern void * listRemoveFromHead ( DLLIST **phead ); LEPT_DLL extern void * listRemoveFromTail ( DLLIST **phead, DLLIST **ptail ); LEPT_DLL extern DLLIST * listFindElement ( DLLIST *head, void *data ); LEPT_DLL extern DLLIST * listFindTail ( DLLIST *head ); LEPT_DLL extern l_int32 listGetCount ( DLLIST *head ); LEPT_DLL extern l_int32 listReverse ( DLLIST **phead ); LEPT_DLL extern l_int32 listJoin ( DLLIST **phead1, DLLIST **phead2 ); LEPT_DLL extern PIX * generateBinaryMaze ( l_int32 w, l_int32 h, l_int32 xi, l_int32 yi, l_float32 wallps, l_float32 ranis ); LEPT_DLL extern PTA * pixSearchBinaryMaze ( PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd ); LEPT_DLL extern PTA * pixSearchGrayMaze ( PIX *pixs, l_int32 xi, l_int32 yi, l_int32 xf, l_int32 yf, PIX **ppixd ); LEPT_DLL extern l_int32 pixFindLargestRectangle ( PIX *pixs, l_int32 polarity, BOX **pbox, const char *debugfile ); LEPT_DLL extern PIX * pixDilate ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixErode ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixHMT ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixOpen ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixClose ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixCloseSafe ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixOpenGeneralized ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixCloseGeneralized ( PIX *pixd, PIX *pixs, SEL *sel ); LEPT_DLL extern PIX * pixDilateBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseSafeBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern l_int32 selectComposableSels ( l_int32 size, l_int32 direction, SEL **psel1, SEL **psel2 ); LEPT_DLL extern l_int32 selectComposableSizes ( l_int32 size, l_int32 *pfactor1, l_int32 *pfactor2 ); LEPT_DLL extern PIX * pixDilateCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseSafeCompBrick ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern void resetMorphBoundaryCondition ( l_int32 bc ); LEPT_DLL extern l_uint32 getMorphBorderPixelColor ( l_int32 type, l_int32 depth ); LEPT_DLL extern PIX * pixExtractBoundary ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixMorphSequenceMasked ( PIX *pixs, PIX *pixm, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphSequenceByComponent ( PIX *pixs, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa ); LEPT_DLL extern PIXA * pixaMorphSequenceByComponent ( PIXA *pixas, const char *sequence, l_int32 minw, l_int32 minh ); LEPT_DLL extern PIX * pixMorphSequenceByRegion ( PIX *pixs, PIX *pixm, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa ); LEPT_DLL extern PIXA * pixaMorphSequenceByRegion ( PIX *pixs, PIXA *pixam, const char *sequence, l_int32 minw, l_int32 minh ); LEPT_DLL extern PIX * pixUnionOfMorphOps ( PIX *pixs, SELA *sela, l_int32 type ); LEPT_DLL extern PIX * pixIntersectionOfMorphOps ( PIX *pixs, SELA *sela, l_int32 type ); LEPT_DLL extern PIX * pixSelectiveConnCompFill ( PIX *pixs, l_int32 connectivity, l_int32 minw, l_int32 minh ); LEPT_DLL extern l_int32 pixRemoveMatchedPattern ( PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_int32 dsize ); LEPT_DLL extern PIX * pixDisplayMatchedPattern ( PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_uint32 color, l_float32 scale, l_int32 nlevels ); LEPT_DLL extern PIX * pixSeedfillMorph ( PIX *pixs, PIX *pixm, l_int32 maxiters, l_int32 connectivity ); LEPT_DLL extern NUMA * pixRunHistogramMorph ( PIX *pixs, l_int32 runtype, l_int32 direction, l_int32 maxsize ); LEPT_DLL extern PIX * pixTophat ( PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 type ); LEPT_DLL extern PIX * pixHDome ( PIX *pixs, l_int32 height, l_int32 connectivity ); LEPT_DLL extern PIX * pixFastTophat ( PIX *pixs, l_int32 xsize, l_int32 ysize, l_int32 type ); LEPT_DLL extern PIX * pixMorphGradient ( PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 smoothing ); LEPT_DLL extern PTA * pixaCentroids ( PIXA *pixa ); LEPT_DLL extern l_int32 pixCentroid ( PIX *pix, l_int32 *centtab, l_int32 *sumtab, l_float32 *pxave, l_float32 *pyave ); LEPT_DLL extern PIX * pixDilateBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseCompBrickDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixDilateCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixErodeCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixOpenCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern PIX * pixCloseCompBrickExtendDwa ( PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern l_int32 getExtendedCompositeParameters ( l_int32 size, l_int32 *pn, l_int32 *pextra, l_int32 *pactualsize ); LEPT_DLL extern PIX * pixMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphCompSequence ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphSequenceDwa ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern PIX * pixMorphCompSequenceDwa ( PIX *pixs, const char *sequence, l_int32 dispsep ); LEPT_DLL extern l_int32 morphSequenceVerify ( SARRAY *sa ); LEPT_DLL extern PIX * pixGrayMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy ); LEPT_DLL extern PIX * pixColorMorphSequence ( PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy ); LEPT_DLL extern NUMA * numaCreate ( l_int32 n ); LEPT_DLL extern NUMA * numaCreateFromIArray ( l_int32 *iarray, l_int32 size ); LEPT_DLL extern NUMA * numaCreateFromFArray ( l_float32 *farray, l_int32 size, l_int32 copyflag ); LEPT_DLL extern void numaDestroy ( NUMA **pna ); LEPT_DLL extern NUMA * numaCopy ( NUMA *na ); LEPT_DLL extern NUMA * numaClone ( NUMA *na ); LEPT_DLL extern l_int32 numaEmpty ( NUMA *na ); LEPT_DLL extern l_int32 numaAddNumber ( NUMA *na, l_float32 val ); LEPT_DLL extern l_int32 numaInsertNumber ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_int32 numaRemoveNumber ( NUMA *na, l_int32 index ); LEPT_DLL extern l_int32 numaReplaceNumber ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_int32 numaGetCount ( NUMA *na ); LEPT_DLL extern l_int32 numaSetCount ( NUMA *na, l_int32 newcount ); LEPT_DLL extern l_int32 numaGetFValue ( NUMA *na, l_int32 index, l_float32 *pval ); LEPT_DLL extern l_int32 numaGetIValue ( NUMA *na, l_int32 index, l_int32 *pival ); LEPT_DLL extern l_int32 numaSetValue ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_int32 numaShiftValue ( NUMA *na, l_int32 index, l_float32 diff ); LEPT_DLL extern l_int32 * numaGetIArray ( NUMA *na ); LEPT_DLL extern l_float32 * numaGetFArray ( NUMA *na, l_int32 copyflag ); LEPT_DLL extern l_int32 numaGetRefcount ( NUMA *na ); LEPT_DLL extern l_int32 numaChangeRefcount ( NUMA *na, l_int32 delta ); LEPT_DLL extern l_int32 numaGetParameters ( NUMA *na, l_float32 *pstartx, l_float32 *pdelx ); LEPT_DLL extern l_int32 numaSetParameters ( NUMA *na, l_float32 startx, l_float32 delx ); LEPT_DLL extern l_int32 numaCopyParameters ( NUMA *nad, NUMA *nas ); LEPT_DLL extern SARRAY * numaConvertToSarray ( NUMA *na, l_int32 size1, l_int32 size2, l_int32 addzeros, l_int32 type ); LEPT_DLL extern NUMA * numaRead ( const char *filename ); LEPT_DLL extern NUMA * numaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 numaWrite ( const char *filename, NUMA *na ); LEPT_DLL extern l_int32 numaWriteStream ( FILE *fp, NUMA *na ); LEPT_DLL extern NUMAA * numaaCreate ( l_int32 n ); LEPT_DLL extern NUMAA * numaaCreateFull ( l_int32 ntop, l_int32 n ); LEPT_DLL extern l_int32 numaaTruncate ( NUMAA *naa ); LEPT_DLL extern void numaaDestroy ( NUMAA **pnaa ); LEPT_DLL extern l_int32 numaaAddNuma ( NUMAA *naa, NUMA *na, l_int32 copyflag ); LEPT_DLL extern l_int32 numaaExtendArray ( NUMAA *naa ); LEPT_DLL extern l_int32 numaaGetCount ( NUMAA *naa ); LEPT_DLL extern l_int32 numaaGetNumaCount ( NUMAA *naa, l_int32 index ); LEPT_DLL extern l_int32 numaaGetNumberCount ( NUMAA *naa ); LEPT_DLL extern NUMA ** numaaGetPtrArray ( NUMAA *naa ); LEPT_DLL extern NUMA * numaaGetNuma ( NUMAA *naa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern l_int32 numaaReplaceNuma ( NUMAA *naa, l_int32 index, NUMA *na ); LEPT_DLL extern l_int32 numaaGetValue ( NUMAA *naa, l_int32 i, l_int32 j, l_float32 *pfval, l_int32 *pival ); LEPT_DLL extern l_int32 numaaAddNumber ( NUMAA *naa, l_int32 index, l_float32 val ); LEPT_DLL extern NUMAA * numaaRead ( const char *filename ); LEPT_DLL extern NUMAA * numaaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 numaaWrite ( const char *filename, NUMAA *naa ); LEPT_DLL extern l_int32 numaaWriteStream ( FILE *fp, NUMAA *naa ); LEPT_DLL extern NUMA2D * numa2dCreate ( l_int32 nrows, l_int32 ncols, l_int32 initsize ); LEPT_DLL extern void numa2dDestroy ( NUMA2D **pna2d ); LEPT_DLL extern l_int32 numa2dAddNumber ( NUMA2D *na2d, l_int32 row, l_int32 col, l_float32 val ); LEPT_DLL extern l_int32 numa2dGetCount ( NUMA2D *na2d, l_int32 row, l_int32 col ); LEPT_DLL extern NUMA * numa2dGetNuma ( NUMA2D *na2d, l_int32 row, l_int32 col ); LEPT_DLL extern l_int32 numa2dGetFValue ( NUMA2D *na2d, l_int32 row, l_int32 col, l_int32 index, l_float32 *pval ); LEPT_DLL extern l_int32 numa2dGetIValue ( NUMA2D *na2d, l_int32 row, l_int32 col, l_int32 index, l_int32 *pval ); LEPT_DLL extern NUMAHASH * numaHashCreate ( l_int32 nbuckets, l_int32 initsize ); LEPT_DLL extern void numaHashDestroy ( NUMAHASH **pnahash ); LEPT_DLL extern NUMA * numaHashGetNuma ( NUMAHASH *nahash, l_uint32 key ); LEPT_DLL extern l_int32 numaHashAdd ( NUMAHASH *nahash, l_uint32 key, l_float32 value ); LEPT_DLL extern NUMA * numaArithOp ( NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op ); LEPT_DLL extern NUMA * numaLogicalOp ( NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op ); LEPT_DLL extern NUMA * numaInvert ( NUMA *nad, NUMA *nas ); LEPT_DLL extern l_int32 numaSimilar ( NUMA *na1, NUMA *na2, l_float32 maxdiff, l_int32 *psimilar ); LEPT_DLL extern l_int32 numaAddToNumber ( NUMA *na, l_int32 index, l_float32 val ); LEPT_DLL extern l_int32 numaGetMin ( NUMA *na, l_float32 *pminval, l_int32 *piminloc ); LEPT_DLL extern l_int32 numaGetMax ( NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc ); LEPT_DLL extern l_int32 numaGetSum ( NUMA *na, l_float32 *psum ); LEPT_DLL extern NUMA * numaGetPartialSums ( NUMA *na ); LEPT_DLL extern l_int32 numaGetSumOnInterval ( NUMA *na, l_int32 first, l_int32 last, l_float32 *psum ); LEPT_DLL extern l_int32 numaHasOnlyIntegers ( NUMA *na, l_int32 maxsamples, l_int32 *pallints ); LEPT_DLL extern NUMA * numaSubsample ( NUMA *nas, l_int32 subfactor ); LEPT_DLL extern NUMA * numaMakeDelta ( NUMA *nas ); LEPT_DLL extern NUMA * numaMakeSequence ( l_float32 startval, l_float32 increment, l_int32 size ); LEPT_DLL extern NUMA * numaMakeConstant ( l_float32 val, l_int32 size ); LEPT_DLL extern NUMA * numaMakeAbsValue ( NUMA *nad, NUMA *nas ); LEPT_DLL extern NUMA * numaAddBorder ( NUMA *nas, l_int32 left, l_int32 right, l_float32 val ); LEPT_DLL extern NUMA * numaAddSpecifiedBorder ( NUMA *nas, l_int32 left, l_int32 right, l_int32 type ); LEPT_DLL extern NUMA * numaRemoveBorder ( NUMA *nas, l_int32 left, l_int32 right ); LEPT_DLL extern l_int32 numaGetNonzeroRange ( NUMA *na, l_float32 eps, l_int32 *pfirst, l_int32 *plast ); LEPT_DLL extern l_int32 numaGetCountRelativeToZero ( NUMA *na, l_int32 type, l_int32 *pcount ); LEPT_DLL extern NUMA * numaClipToInterval ( NUMA *nas, l_int32 first, l_int32 last ); LEPT_DLL extern NUMA * numaMakeThresholdIndicator ( NUMA *nas, l_float32 thresh, l_int32 type ); LEPT_DLL extern NUMA * numaUniformSampling ( NUMA *nas, l_int32 nsamp ); LEPT_DLL extern NUMA * numaReverse ( NUMA *nad, NUMA *nas ); LEPT_DLL extern NUMA * numaLowPassIntervals ( NUMA *nas, l_float32 thresh, l_float32 maxn ); LEPT_DLL extern NUMA * numaThresholdEdges ( NUMA *nas, l_float32 thresh1, l_float32 thresh2, l_float32 maxn ); LEPT_DLL extern l_int32 numaGetSpanValues ( NUMA *na, l_int32 span, l_int32 *pstart, l_int32 *pend ); LEPT_DLL extern l_int32 numaGetEdgeValues ( NUMA *na, l_int32 edge, l_int32 *pstart, l_int32 *pend, l_int32 *psign ); LEPT_DLL extern l_int32 numaInterpolateEqxVal ( l_float32 startx, l_float32 deltax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval ); LEPT_DLL extern l_int32 numaInterpolateArbxVal ( NUMA *nax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval ); LEPT_DLL extern l_int32 numaInterpolateEqxInterval ( l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnax, NUMA **pnay ); LEPT_DLL extern l_int32 numaInterpolateArbxInterval ( NUMA *nax, NUMA *nay, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady ); LEPT_DLL extern l_int32 numaFitMax ( NUMA *na, l_float32 *pmaxval, NUMA *naloc, l_float32 *pmaxloc ); LEPT_DLL extern l_int32 numaDifferentiateInterval ( NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady ); LEPT_DLL extern l_int32 numaIntegrateInterval ( NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, l_float32 *psum ); LEPT_DLL extern l_int32 numaSortGeneral ( NUMA *na, NUMA **pnasort, NUMA **pnaindex, NUMA **pnainvert, l_int32 sortorder, l_int32 sorttype ); LEPT_DLL extern NUMA * numaSortAutoSelect ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern NUMA * numaSortIndexAutoSelect ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern l_int32 numaChooseSortType ( NUMA *nas ); LEPT_DLL extern NUMA * numaSort ( NUMA *naout, NUMA *nain, l_int32 sortorder ); LEPT_DLL extern NUMA * numaBinSort ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern NUMA * numaGetSortIndex ( NUMA *na, l_int32 sortorder ); LEPT_DLL extern NUMA * numaGetBinSortIndex ( NUMA *nas, l_int32 sortorder ); LEPT_DLL extern NUMA * numaSortByIndex ( NUMA *nas, NUMA *naindex ); LEPT_DLL extern l_int32 numaIsSorted ( NUMA *nas, l_int32 sortorder, l_int32 *psorted ); LEPT_DLL extern l_int32 numaSortPair ( NUMA *nax, NUMA *nay, l_int32 sortorder, NUMA **pnasx, NUMA **pnasy ); LEPT_DLL extern NUMA * numaInvertMap ( NUMA *nas ); LEPT_DLL extern NUMA * numaPseudorandomSequence ( l_int32 size, l_int32 seed ); LEPT_DLL extern NUMA * numaRandomPermutation ( NUMA *nas, l_int32 seed ); LEPT_DLL extern l_int32 numaGetRankValue ( NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval ); LEPT_DLL extern l_int32 numaGetMedian ( NUMA *na, l_float32 *pval ); LEPT_DLL extern l_int32 numaGetBinnedMedian ( NUMA *na, l_int32 *pval ); LEPT_DLL extern l_int32 numaGetMode ( NUMA *na, l_float32 *pval, l_int32 *pcount ); LEPT_DLL extern l_int32 numaGetMedianVariation ( NUMA *na, l_float32 *pmedval, l_float32 *pmedvar ); LEPT_DLL extern l_int32 numaJoin ( NUMA *nad, NUMA *nas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_int32 numaaJoin ( NUMAA *naad, NUMAA *naas, l_int32 istart, l_int32 iend ); LEPT_DLL extern NUMA * numaaFlattenToNuma ( NUMAA *naa ); LEPT_DLL extern NUMA * numaErode ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaDilate ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaOpen ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaClose ( NUMA *nas, l_int32 size ); LEPT_DLL extern NUMA * numaTransform ( NUMA *nas, l_float32 shift, l_float32 scale ); LEPT_DLL extern l_int32 numaWindowedStats ( NUMA *nas, l_int32 wc, NUMA **pnam, NUMA **pnams, NUMA **pnav, NUMA **pnarv ); LEPT_DLL extern NUMA * numaWindowedMean ( NUMA *nas, l_int32 wc ); LEPT_DLL extern NUMA * numaWindowedMeanSquare ( NUMA *nas, l_int32 wc ); LEPT_DLL extern l_int32 numaWindowedVariance ( NUMA *nam, NUMA *nams, NUMA **pnav, NUMA **pnarv ); LEPT_DLL extern NUMA * numaConvertToInt ( NUMA *nas ); LEPT_DLL extern NUMA * numaMakeHistogram ( NUMA *na, l_int32 maxbins, l_int32 *pbinsize, l_int32 *pbinstart ); LEPT_DLL extern NUMA * numaMakeHistogramAuto ( NUMA *na, l_int32 maxbins ); LEPT_DLL extern NUMA * numaMakeHistogramClipped ( NUMA *na, l_float32 binsize, l_float32 maxsize ); LEPT_DLL extern NUMA * numaRebinHistogram ( NUMA *nas, l_int32 newsize ); LEPT_DLL extern NUMA * numaNormalizeHistogram ( NUMA *nas, l_float32 tsum ); LEPT_DLL extern l_int32 numaGetStatsUsingHistogram ( NUMA *na, l_int32 maxbins, l_float32 *pmin, l_float32 *pmax, l_float32 *pmean, l_float32 *pvariance, l_float32 *pmedian, l_float32 rank, l_float32 *prval, NUMA **phisto ); LEPT_DLL extern l_int32 numaGetHistogramStats ( NUMA *nahisto, l_float32 startx, l_float32 deltax, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance ); LEPT_DLL extern l_int32 numaGetHistogramStatsOnInterval ( NUMA *nahisto, l_float32 startx, l_float32 deltax, l_int32 ifirst, l_int32 ilast, l_float32 *pxmean, l_float32 *pxmedian, l_float32 *pxmode, l_float32 *pxvariance ); LEPT_DLL extern l_int32 numaMakeRankFromHistogram ( l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 npts, NUMA **pnax, NUMA **pnay ); LEPT_DLL extern l_int32 numaHistogramGetRankFromVal ( NUMA *na, l_float32 rval, l_float32 *prank ); LEPT_DLL extern l_int32 numaHistogramGetValFromRank ( NUMA *na, l_float32 rank, l_float32 *prval ); LEPT_DLL extern l_int32 numaDiscretizeRankAndIntensity ( NUMA *na, l_int32 nbins, NUMA **pnarbin, NUMA **pnam, NUMA **pnar, NUMA **pnabb ); LEPT_DLL extern l_int32 numaGetRankBinValues ( NUMA *na, l_int32 nbins, NUMA **pnarbin, NUMA **pnam ); LEPT_DLL extern l_int32 numaSplitDistribution ( NUMA *na, l_float32 scorefract, l_int32 *psplitindex, l_float32 *pave1, l_float32 *pave2, l_float32 *pnum1, l_float32 *pnum2, NUMA **pnascore ); LEPT_DLL extern l_int32 numaEarthMoverDistance ( NUMA *na1, NUMA *na2, l_float32 *pdist ); LEPT_DLL extern NUMA * numaFindPeaks ( NUMA *nas, l_int32 nmax, l_float32 fract1, l_float32 fract2 ); LEPT_DLL extern NUMA * numaFindExtrema ( NUMA *nas, l_float32 delta ); LEPT_DLL extern l_int32 numaCountReversals ( NUMA *nas, l_float32 minreversal, l_int32 *pnr, l_float32 *pnrpl ); LEPT_DLL extern l_int32 numaSelectCrossingThreshold ( NUMA *nax, NUMA *nay, l_float32 estthresh, l_float32 *pbestthresh ); LEPT_DLL extern NUMA * numaCrossingsByThreshold ( NUMA *nax, NUMA *nay, l_float32 thresh ); LEPT_DLL extern NUMA * numaCrossingsByPeaks ( NUMA *nax, NUMA *nay, l_float32 delta ); LEPT_DLL extern l_int32 numaEvalBestHaarParameters ( NUMA *nas, l_float32 relweight, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore ); LEPT_DLL extern l_int32 numaEvalHaarSum ( NUMA *nas, l_float32 width, l_float32 shift, l_float32 relweight, l_float32 *pscore ); LEPT_DLL extern l_int32 pixGetRegionsBinary ( PIX *pixs, PIX **ppixhm, PIX **ppixtm, PIX **ppixtb, l_int32 debug ); LEPT_DLL extern PIX * pixGenHalftoneMask ( PIX *pixs, PIX **ppixtext, l_int32 *phtfound, l_int32 debug ); LEPT_DLL extern PIX * pixGenTextlineMask ( PIX *pixs, PIX **ppixvws, l_int32 *ptlfound, l_int32 debug ); LEPT_DLL extern PIX * pixGenTextblockMask ( PIX *pixs, PIX *pixvws, l_int32 debug ); LEPT_DLL extern BOX * pixFindPageForeground ( PIX *pixs, l_int32 threshold, l_int32 mindist, l_int32 erasedist, l_int32 pagenum, l_int32 showmorph, l_int32 display, const char *pdfdir ); LEPT_DLL extern l_int32 pixSplitIntoCharacters ( PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdebug ); LEPT_DLL extern BOXA * pixSplitComponentWithProfile ( PIX *pixs, l_int32 delta, l_int32 mindel, PIX **ppixdebug ); LEPT_DLL extern l_int32 pixSetSelectCmap ( PIX *pixs, BOX *box, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixColorGrayRegionsCmap ( PIX *pixs, BOXA *boxa, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixColorGrayCmap ( PIX *pixs, BOX *box, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 addColorizedGrayToCmap ( PIXCMAP *cmap, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval, NUMA **pna ); LEPT_DLL extern l_int32 pixSetSelectMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixSetMaskedCmap ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern char * parseForProtos ( const char *filein, const char *prestring ); LEPT_DLL extern BOXA * boxaGetWhiteblocks ( BOXA *boxas, BOX *box, l_int32 sortflag, l_int32 maxboxes, l_float32 maxoverlap, l_int32 maxperim, l_float32 fract, l_int32 maxpops ); LEPT_DLL extern BOXA * boxaPruneSortedOnOverlap ( BOXA *boxas, l_float32 maxoverlap ); LEPT_DLL extern l_int32 convertFilesToPdf ( const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_int32 saConvertFilesToPdf ( SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_int32 saConvertFilesToPdfData ( SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 selectDefaultPdfEncoding ( PIX *pix, l_int32 *ptype ); LEPT_DLL extern l_int32 convertUnscaledFilesToPdf ( const char *dirname, const char *substr, const char *title, const char *fileout ); LEPT_DLL extern l_int32 saConvertUnscaledFilesToPdf ( SARRAY *sa, const char *title, const char *fileout ); LEPT_DLL extern l_int32 saConvertUnscaledFilesToPdfData ( SARRAY *sa, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 convertUnscaledToPdfData ( const char *fname, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 pixaConvertToPdf ( PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_int32 pixaConvertToPdfData ( PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 convertToPdf ( const char *filein, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_int32 convertImageDataToPdf ( l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_int32 convertToPdfData ( const char *filein, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_int32 convertImageDataToPdfData ( l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_int32 pixConvertToPdf ( PIX *pix, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_int32 pixConvertToPdfData ( PIX *pix, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position ); LEPT_DLL extern l_int32 pixWriteStreamPdf ( FILE *fp, PIX *pix, l_int32 res, const char *title ); LEPT_DLL extern l_int32 convertSegmentedFilesToPdf ( const char *dirname, const char *substr, l_int32 res, l_int32 type, l_int32 thresh, BOXAA *baa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); LEPT_DLL extern BOXAA * convertNumberedMasksToBoxaa ( const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost ); LEPT_DLL extern l_int32 convertToPdfSegmented ( const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); LEPT_DLL extern l_int32 pixConvertToPdfSegmented ( PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout ); LEPT_DLL extern l_int32 convertToPdfDataSegmented ( const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 pixConvertToPdfDataSegmented ( PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 concatenatePdf ( const char *dirname, const char *substr, const char *fileout ); LEPT_DLL extern l_int32 saConcatenatePdf ( SARRAY *sa, const char *fileout ); LEPT_DLL extern l_int32 ptraConcatenatePdf ( L_PTRA *pa, const char *fileout ); LEPT_DLL extern l_int32 concatenatePdfToData ( const char *dirname, const char *substr, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 saConcatenatePdfToData ( SARRAY *sa, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 ptraConcatenatePdfToData ( L_PTRA *pa_data, SARRAY *sa, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern void l_pdfSetG4ImageMask ( l_int32 flag ); LEPT_DLL extern void l_pdfSetDateAndVersion ( l_int32 flag ); LEPT_DLL extern void setPixMemoryManager ( void * ( ( *allocator ) ( size_t ) ), void ( ( *deallocator ) ( void * ) ) ); LEPT_DLL extern PIX * pixCreate ( l_int32 width, l_int32 height, l_int32 depth ); LEPT_DLL extern PIX * pixCreateNoInit ( l_int32 width, l_int32 height, l_int32 depth ); LEPT_DLL extern PIX * pixCreateTemplate ( PIX *pixs ); LEPT_DLL extern PIX * pixCreateTemplateNoInit ( PIX *pixs ); LEPT_DLL extern PIX * pixCreateHeader ( l_int32 width, l_int32 height, l_int32 depth ); LEPT_DLL extern PIX * pixClone ( PIX *pixs ); LEPT_DLL extern void pixDestroy ( PIX **ppix ); LEPT_DLL extern PIX * pixCopy ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 pixResizeImageData ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 pixCopyColormap ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 pixSizesEqual ( PIX *pix1, PIX *pix2 ); LEPT_DLL extern l_int32 pixTransferAllData ( PIX *pixd, PIX **ppixs, l_int32 copytext, l_int32 copyformat ); LEPT_DLL extern l_int32 pixSwapAndDestroy ( PIX **ppixd, PIX **ppixs ); LEPT_DLL extern l_int32 pixGetWidth ( PIX *pix ); LEPT_DLL extern l_int32 pixSetWidth ( PIX *pix, l_int32 width ); LEPT_DLL extern l_int32 pixGetHeight ( PIX *pix ); LEPT_DLL extern l_int32 pixSetHeight ( PIX *pix, l_int32 height ); LEPT_DLL extern l_int32 pixGetDepth ( PIX *pix ); LEPT_DLL extern l_int32 pixSetDepth ( PIX *pix, l_int32 depth ); LEPT_DLL extern l_int32 pixGetDimensions ( PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern l_int32 pixSetDimensions ( PIX *pix, l_int32 w, l_int32 h, l_int32 d ); LEPT_DLL extern l_int32 pixCopyDimensions ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 pixGetSpp ( PIX *pix ); LEPT_DLL extern l_int32 pixSetSpp ( PIX *pix, l_int32 spp ); LEPT_DLL extern l_int32 pixCopySpp ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 pixGetWpl ( PIX *pix ); LEPT_DLL extern l_int32 pixSetWpl ( PIX *pix, l_int32 wpl ); LEPT_DLL extern l_int32 pixGetRefcount ( PIX *pix ); LEPT_DLL extern l_int32 pixChangeRefcount ( PIX *pix, l_int32 delta ); LEPT_DLL extern l_int32 pixGetXRes ( PIX *pix ); LEPT_DLL extern l_int32 pixSetXRes ( PIX *pix, l_int32 res ); LEPT_DLL extern l_int32 pixGetYRes ( PIX *pix ); LEPT_DLL extern l_int32 pixSetYRes ( PIX *pix, l_int32 res ); LEPT_DLL extern l_int32 pixGetResolution ( PIX *pix, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_int32 pixSetResolution ( PIX *pix, l_int32 xres, l_int32 yres ); LEPT_DLL extern l_int32 pixCopyResolution ( PIX *pixd, PIX *pixs ); LEPT_DLL extern l_int32 pixScaleResolution ( PIX *pix, l_float32 xscale, l_float32 yscale ); LEPT_DLL extern l_int32 pixGetInputFormat ( PIX *pix ); LEPT_DLL extern l_int32 pixSetInputFormat ( PIX *pix, l_int32 informat ); LEPT_DLL extern l_int32 pixCopyInputFormat ( PIX *pixd, PIX *pixs ); LEPT_DLL extern char * pixGetText ( PIX *pix ); LEPT_DLL extern l_int32 pixSetText ( PIX *pix, const char *textstring ); LEPT_DLL extern l_int32 pixAddText ( PIX *pix, const char *textstring ); LEPT_DLL extern l_int32 pixCopyText ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIXCMAP * pixGetColormap ( PIX *pix ); LEPT_DLL extern l_int32 pixSetColormap ( PIX *pix, PIXCMAP *colormap ); LEPT_DLL extern l_int32 pixDestroyColormap ( PIX *pix ); LEPT_DLL extern l_uint32 * pixGetData ( PIX *pix ); LEPT_DLL extern l_int32 pixSetData ( PIX *pix, l_uint32 *data ); LEPT_DLL extern l_uint32 * pixExtractData ( PIX *pixs ); LEPT_DLL extern l_int32 pixFreeData ( PIX *pix ); LEPT_DLL extern void ** pixGetLinePtrs ( PIX *pix, l_int32 *psize ); LEPT_DLL extern l_int32 pixPrintStreamInfo ( FILE *fp, PIX *pix, const char *text ); LEPT_DLL extern l_int32 pixGetPixel ( PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval ); LEPT_DLL extern l_int32 pixSetPixel ( PIX *pix, l_int32 x, l_int32 y, l_uint32 val ); LEPT_DLL extern l_int32 pixGetRGBPixel ( PIX *pix, l_int32 x, l_int32 y, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern l_int32 pixSetRGBPixel ( PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval ); LEPT_DLL extern l_int32 pixGetRandomPixel ( PIX *pix, l_uint32 *pval, l_int32 *px, l_int32 *py ); LEPT_DLL extern l_int32 pixClearPixel ( PIX *pix, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 pixFlipPixel ( PIX *pix, l_int32 x, l_int32 y ); LEPT_DLL extern void setPixelLow ( l_uint32 *line, l_int32 x, l_int32 depth, l_uint32 val ); LEPT_DLL extern l_int32 pixGetBlackOrWhiteVal ( PIX *pixs, l_int32 op, l_uint32 *pval ); LEPT_DLL extern l_int32 pixClearAll ( PIX *pix ); LEPT_DLL extern l_int32 pixSetAll ( PIX *pix ); LEPT_DLL extern l_int32 pixSetAllGray ( PIX *pix, l_int32 grayval ); LEPT_DLL extern l_int32 pixSetAllArbitrary ( PIX *pix, l_uint32 val ); LEPT_DLL extern l_int32 pixSetBlackOrWhite ( PIX *pixs, l_int32 op ); LEPT_DLL extern l_int32 pixSetComponentArbitrary ( PIX *pix, l_int32 comp, l_int32 val ); LEPT_DLL extern l_int32 pixClearInRect ( PIX *pix, BOX *box ); LEPT_DLL extern l_int32 pixSetInRect ( PIX *pix, BOX *box ); LEPT_DLL extern l_int32 pixSetInRectArbitrary ( PIX *pix, BOX *box, l_uint32 val ); LEPT_DLL extern l_int32 pixBlendInRect ( PIX *pixs, BOX *box, l_uint32 val, l_float32 fract ); LEPT_DLL extern l_int32 pixSetPadBits ( PIX *pix, l_int32 val ); LEPT_DLL extern l_int32 pixSetPadBitsBand ( PIX *pix, l_int32 by, l_int32 bh, l_int32 val ); LEPT_DLL extern l_int32 pixSetOrClearBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op ); LEPT_DLL extern l_int32 pixSetBorderVal ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); LEPT_DLL extern l_int32 pixSetBorderRingVal ( PIX *pixs, l_int32 dist, l_uint32 val ); LEPT_DLL extern l_int32 pixSetMirroredBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixCopyBorder ( PIX *pixd, PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddBorder ( PIX *pixs, l_int32 npix, l_uint32 val ); LEPT_DLL extern PIX * pixAddBlackOrWhiteBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op ); LEPT_DLL extern PIX * pixAddBorderGeneral ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); LEPT_DLL extern PIX * pixRemoveBorder ( PIX *pixs, l_int32 npix ); LEPT_DLL extern PIX * pixRemoveBorderGeneral ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixRemoveBorderToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixAddMirroredBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddRepeatedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddMixedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern PIX * pixAddContinuedBorder ( PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot ); LEPT_DLL extern l_int32 pixShiftAndTransferAlpha ( PIX *pixd, PIX *pixs, l_float32 shiftx, l_float32 shifty ); LEPT_DLL extern PIX * pixDisplayLayersRGBA ( PIX *pixs, l_uint32 val, l_int32 maxw ); LEPT_DLL extern PIX * pixCreateRGBImage ( PIX *pixr, PIX *pixg, PIX *pixb ); LEPT_DLL extern PIX * pixGetRGBComponent ( PIX *pixs, l_int32 comp ); LEPT_DLL extern l_int32 pixSetRGBComponent ( PIX *pixd, PIX *pixs, l_int32 comp ); LEPT_DLL extern PIX * pixGetRGBComponentCmap ( PIX *pixs, l_int32 comp ); LEPT_DLL extern l_int32 pixCopyRGBComponent ( PIX *pixd, PIX *pixs, l_int32 comp ); LEPT_DLL extern l_int32 composeRGBPixel ( l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel ); LEPT_DLL extern l_int32 composeRGBAPixel ( l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel ); LEPT_DLL extern void extractRGBValues ( l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval ); LEPT_DLL extern void extractRGBAValues ( l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval ); LEPT_DLL extern l_int32 extractMinMaxComponent ( l_uint32 pixel, l_int32 type ); LEPT_DLL extern l_int32 pixGetRGBLine ( PIX *pixs, l_int32 row, l_uint8 *bufr, l_uint8 *bufg, l_uint8 *bufb ); LEPT_DLL extern PIX * pixEndianByteSwapNew ( PIX *pixs ); LEPT_DLL extern l_int32 pixEndianByteSwap ( PIX *pixs ); LEPT_DLL extern l_int32 lineEndianByteSwap ( l_uint32 *datad, l_uint32 *datas, l_int32 wpl ); LEPT_DLL extern PIX * pixEndianTwoByteSwapNew ( PIX *pixs ); LEPT_DLL extern l_int32 pixEndianTwoByteSwap ( PIX *pixs ); LEPT_DLL extern l_int32 pixGetRasterData ( PIX *pixs, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 pixAlphaIsOpaque ( PIX *pix, l_int32 *popaque ); LEPT_DLL extern l_uint8 ** pixSetupByteProcessing ( PIX *pix, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 pixCleanupByteProcessing ( PIX *pix, l_uint8 **lineptrs ); LEPT_DLL extern void l_setAlphaMaskBorder ( l_float32 val1, l_float32 val2 ); LEPT_DLL extern l_int32 pixSetMasked ( PIX *pixd, PIX *pixm, l_uint32 val ); LEPT_DLL extern l_int32 pixSetMaskedGeneral ( PIX *pixd, PIX *pixm, l_uint32 val, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 pixCombineMasked ( PIX *pixd, PIX *pixs, PIX *pixm ); LEPT_DLL extern l_int32 pixCombineMaskedGeneral ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 pixPaintThroughMask ( PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_uint32 val ); LEPT_DLL extern l_int32 pixPaintSelfThroughMask ( PIX *pixd, PIX *pixm, l_int32 x, l_int32 y, l_int32 tilesize, l_int32 searchdir ); LEPT_DLL extern PIX * pixMakeMaskFromLUT ( PIX *pixs, l_int32 *tab ); LEPT_DLL extern PIX * pixSetUnderTransparency ( PIX *pixs, l_uint32 val, l_int32 debug ); LEPT_DLL extern PIX * pixInvert ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixOr ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixAnd ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixXor ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixSubtract ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern l_int32 pixZero ( PIX *pix, l_int32 *pempty ); LEPT_DLL extern l_int32 pixForegroundFraction ( PIX *pix, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaCountPixels ( PIXA *pixa ); LEPT_DLL extern l_int32 pixCountPixels ( PIX *pix, l_int32 *pcount, l_int32 *tab8 ); LEPT_DLL extern NUMA * pixCountByRow ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixCountByColumn ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixCountPixelsByRow ( PIX *pix, l_int32 *tab8 ); LEPT_DLL extern NUMA * pixCountPixelsByColumn ( PIX *pix ); LEPT_DLL extern l_int32 pixCountPixelsInRow ( PIX *pix, l_int32 row, l_int32 *pcount, l_int32 *tab8 ); LEPT_DLL extern NUMA * pixGetMomentByColumn ( PIX *pix, l_int32 order ); LEPT_DLL extern l_int32 pixThresholdPixelSum ( PIX *pix, l_int32 thresh, l_int32 *pabove, l_int32 *tab8 ); LEPT_DLL extern l_int32 * makePixelSumTab8 ( void ); LEPT_DLL extern l_int32 * makePixelCentroidTab8 ( void ); LEPT_DLL extern NUMA * pixAverageByRow ( PIX *pix, BOX *box, l_int32 type ); LEPT_DLL extern NUMA * pixAverageByColumn ( PIX *pix, BOX *box, l_int32 type ); LEPT_DLL extern l_int32 pixAverageInRect ( PIX *pix, BOX *box, l_float32 *pave ); LEPT_DLL extern NUMA * pixVarianceByRow ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixVarianceByColumn ( PIX *pix, BOX *box ); LEPT_DLL extern l_int32 pixVarianceInRect ( PIX *pix, BOX *box, l_float32 *prootvar ); LEPT_DLL extern NUMA * pixAbsDiffByRow ( PIX *pix, BOX *box ); LEPT_DLL extern NUMA * pixAbsDiffByColumn ( PIX *pix, BOX *box ); LEPT_DLL extern l_int32 pixAbsDiffInRect ( PIX *pix, BOX *box, l_int32 dir, l_float32 *pabsdiff ); LEPT_DLL extern l_int32 pixAbsDiffOnLine ( PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_float32 *pabsdiff ); LEPT_DLL extern l_int32 pixCountArbInRect ( PIX *pixs, BOX *box, l_int32 val, l_int32 factor, l_int32 *pcount ); LEPT_DLL extern PIX * pixMirroredTiling ( PIX *pixs, l_int32 w, l_int32 h ); LEPT_DLL extern NUMA * pixGetGrayHistogram ( PIX *pixs, l_int32 factor ); LEPT_DLL extern NUMA * pixGetGrayHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor ); LEPT_DLL extern NUMA * pixGetGrayHistogramInRect ( PIX *pixs, BOX *box, l_int32 factor ); LEPT_DLL extern l_int32 pixGetColorHistogram ( PIX *pixs, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab ); LEPT_DLL extern l_int32 pixGetColorHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab ); LEPT_DLL extern NUMA * pixGetCmapHistogram ( PIX *pixs, l_int32 factor ); LEPT_DLL extern NUMA * pixGetCmapHistogramMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor ); LEPT_DLL extern NUMA * pixGetCmapHistogramInRect ( PIX *pixs, BOX *box, l_int32 factor ); LEPT_DLL extern l_int32 pixGetRankValue ( PIX *pixs, l_int32 factor, l_float32 rank, l_uint32 *pvalue ); LEPT_DLL extern l_int32 pixGetRankValueMaskedRGB ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *prval, l_float32 *pgval, l_float32 *pbval ); LEPT_DLL extern l_int32 pixGetRankValueMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *pval, NUMA **pna ); LEPT_DLL extern l_int32 pixGetAverageValue ( PIX *pixs, l_int32 factor, l_int32 type, l_uint32 *pvalue ); LEPT_DLL extern l_int32 pixGetAverageMaskedRGB ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *prval, l_float32 *pgval, l_float32 *pbval ); LEPT_DLL extern l_int32 pixGetAverageMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval ); LEPT_DLL extern l_int32 pixGetAverageTiledRGB ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixr, PIX **ppixg, PIX **ppixb ); LEPT_DLL extern PIX * pixGetAverageTiled ( PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type ); LEPT_DLL extern l_int32 pixRowStats ( PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar ); LEPT_DLL extern l_int32 pixColumnStats ( PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar ); LEPT_DLL extern l_int32 pixGetComponentRange ( PIX *pixs, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval ); LEPT_DLL extern l_int32 pixGetExtremeValue ( PIX *pixs, l_int32 factor, l_int32 type, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *pgrayval ); LEPT_DLL extern l_int32 pixGetMaxValueInRect ( PIX *pixs, BOX *box, l_uint32 *pmaxval, l_int32 *pxmax, l_int32 *pymax ); LEPT_DLL extern l_int32 pixGetBinnedComponentRange ( PIX *pixs, l_int32 nbins, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval, l_uint32 **pcarray, l_int32 debugflag ); LEPT_DLL extern l_int32 pixGetRankColorArray ( PIX *pixs, l_int32 nbins, l_int32 type, l_int32 factor, l_uint32 **pcarray, l_int32 debugflag ); LEPT_DLL extern l_int32 pixGetBinnedColor ( PIX *pixs, PIX *pixg, l_int32 factor, l_int32 nbins, NUMA *nalut, l_uint32 **pcarray, l_int32 debugflag ); LEPT_DLL extern PIX * pixDisplayColorArray ( l_uint32 *carray, l_int32 ncolors, l_int32 side, l_int32 ncols, l_int32 textflag ); LEPT_DLL extern PIX * pixaGetAlignedStats ( PIXA *pixa, l_int32 type, l_int32 nbins, l_int32 thresh ); LEPT_DLL extern l_int32 pixaExtractColumnFromEachPix ( PIXA *pixa, l_int32 col, PIX *pixd ); LEPT_DLL extern l_int32 pixGetRowStats ( PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *colvect ); LEPT_DLL extern l_int32 pixGetColumnStats ( PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *rowvect ); LEPT_DLL extern l_int32 pixSetPixelColumn ( PIX *pix, l_int32 col, l_float32 *colvect ); LEPT_DLL extern l_int32 pixThresholdForFgBg ( PIX *pixs, l_int32 factor, l_int32 thresh, l_int32 *pfgval, l_int32 *pbgval ); LEPT_DLL extern l_int32 pixSplitDistributionFgBg ( PIX *pixs, l_float32 scorefract, l_int32 factor, l_int32 *pthresh, l_int32 *pfgval, l_int32 *pbgval, l_int32 debugflag ); LEPT_DLL extern l_int32 pixaFindDimensions ( PIXA *pixa, NUMA **pnaw, NUMA **pnah ); LEPT_DLL extern l_int32 pixFindAreaPerimRatio ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindPerimToAreaRatio ( PIXA *pixa ); LEPT_DLL extern l_int32 pixFindPerimToAreaRatio ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindPerimSizeRatio ( PIXA *pixa ); LEPT_DLL extern l_int32 pixFindPerimSizeRatio ( PIX *pixs, l_int32 *tab, l_float32 *pratio ); LEPT_DLL extern NUMA * pixaFindAreaFraction ( PIXA *pixa ); LEPT_DLL extern l_int32 pixFindAreaFraction ( PIX *pixs, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindAreaFractionMasked ( PIXA *pixa, PIX *pixm, l_int32 debug ); LEPT_DLL extern l_int32 pixFindAreaFractionMasked ( PIX *pixs, BOX *box, PIX *pixm, l_int32 *tab, l_float32 *pfract ); LEPT_DLL extern NUMA * pixaFindWidthHeightRatio ( PIXA *pixa ); LEPT_DLL extern NUMA * pixaFindWidthHeightProduct ( PIXA *pixa ); LEPT_DLL extern l_int32 pixFindOverlapFraction ( PIX *pixs1, PIX *pixs2, l_int32 x2, l_int32 y2, l_int32 *tab, l_float32 *pratio, l_int32 *pnoverlap ); LEPT_DLL extern BOXA * pixFindRectangleComps ( PIX *pixs, l_int32 dist, l_int32 minw, l_int32 minh ); LEPT_DLL extern l_int32 pixConformsToRectangle ( PIX *pixs, BOX *box, l_int32 dist, l_int32 *pconforms ); LEPT_DLL extern PIXA * pixClipRectangles ( PIX *pixs, BOXA *boxa ); LEPT_DLL extern PIX * pixClipRectangle ( PIX *pixs, BOX *box, BOX **pboxc ); LEPT_DLL extern PIX * pixClipMasked ( PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_uint32 outval ); LEPT_DLL extern l_int32 pixCropToMatch ( PIX *pixs1, PIX *pixs2, PIX **ppixd1, PIX **ppixd2 ); LEPT_DLL extern PIX * pixCropToSize ( PIX *pixs, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixResizeToMatch ( PIX *pixs, PIX *pixt, l_int32 w, l_int32 h ); LEPT_DLL extern l_int32 pixClipToForeground ( PIX *pixs, PIX **ppixd, BOX **pbox ); LEPT_DLL extern l_int32 pixTestClipToForeground ( PIX *pixs, l_int32 *pcanclip ); LEPT_DLL extern l_int32 pixClipBoxToForeground ( PIX *pixs, BOX *boxs, PIX **ppixd, BOX **pboxd ); LEPT_DLL extern l_int32 pixScanForForeground ( PIX *pixs, BOX *box, l_int32 scanflag, l_int32 *ploc ); LEPT_DLL extern l_int32 pixClipBoxToEdges ( PIX *pixs, BOX *boxs, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, PIX **ppixd, BOX **pboxd ); LEPT_DLL extern l_int32 pixScanForEdge ( PIX *pixs, BOX *box, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, l_int32 scanflag, l_int32 *ploc ); LEPT_DLL extern NUMA * pixExtractOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor ); LEPT_DLL extern l_float32 pixAverageOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor ); LEPT_DLL extern NUMA * pixAverageIntensityProfile ( PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 factor1, l_int32 factor2 ); LEPT_DLL extern NUMA * pixReversalProfile ( PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 minreversal, l_int32 factor1, l_int32 factor2 ); LEPT_DLL extern l_int32 pixWindowedVarianceOnLine ( PIX *pixs, l_int32 dir, l_int32 loc, l_int32 c1, l_int32 c2, l_int32 size, NUMA **pnad ); LEPT_DLL extern l_int32 pixMinMaxNearLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 dist, l_int32 direction, NUMA **pnamin, NUMA **pnamax, l_float32 *pminave, l_float32 *pmaxave ); LEPT_DLL extern PIX * pixRankRowTransform ( PIX *pixs ); LEPT_DLL extern PIX * pixRankColumnTransform ( PIX *pixs ); LEPT_DLL extern PIXA * pixaCreate ( l_int32 n ); LEPT_DLL extern PIXA * pixaCreateFromPix ( PIX *pixs, l_int32 n, l_int32 cellw, l_int32 cellh ); LEPT_DLL extern PIXA * pixaCreateFromBoxa ( PIX *pixs, BOXA *boxa, l_int32 *pcropwarn ); LEPT_DLL extern PIXA * pixaSplitPix ( PIX *pixs, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor ); LEPT_DLL extern void pixaDestroy ( PIXA **ppixa ); LEPT_DLL extern PIXA * pixaCopy ( PIXA *pixa, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaAddPix ( PIXA *pixa, PIX *pix, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaAddBox ( PIXA *pixa, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaExtendArrayToSize ( PIXA *pixa, l_int32 size ); LEPT_DLL extern l_int32 pixaGetCount ( PIXA *pixa ); LEPT_DLL extern l_int32 pixaChangeRefcount ( PIXA *pixa, l_int32 delta ); LEPT_DLL extern PIX * pixaGetPix ( PIXA *pixa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_int32 pixaGetPixDimensions ( PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern BOXA * pixaGetBoxa ( PIXA *pixa, l_int32 accesstype ); LEPT_DLL extern l_int32 pixaGetBoxaCount ( PIXA *pixa ); LEPT_DLL extern BOX * pixaGetBox ( PIXA *pixa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_int32 pixaGetBoxGeometry ( PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 pixaSetBoxa ( PIXA *pixa, BOXA *boxa, l_int32 accesstype ); LEPT_DLL extern PIX ** pixaGetPixArray ( PIXA *pixa ); LEPT_DLL extern l_int32 pixaVerifyDepth ( PIXA *pixa, l_int32 *pmaxdepth ); LEPT_DLL extern l_int32 pixaIsFull ( PIXA *pixa, l_int32 *pfullpa, l_int32 *pfullba ); LEPT_DLL extern l_int32 pixaCountText ( PIXA *pixa, l_int32 *pntext ); LEPT_DLL extern void *** pixaGetLinePtrs ( PIXA *pixa, l_int32 *psize ); LEPT_DLL extern l_int32 pixaReplacePix ( PIXA *pixa, l_int32 index, PIX *pix, BOX *box ); LEPT_DLL extern l_int32 pixaInsertPix ( PIXA *pixa, l_int32 index, PIX *pixs, BOX *box ); LEPT_DLL extern l_int32 pixaRemovePix ( PIXA *pixa, l_int32 index ); LEPT_DLL extern l_int32 pixaRemovePixAndSave ( PIXA *pixa, l_int32 index, PIX **ppix, BOX **pbox ); LEPT_DLL extern l_int32 pixaInitFull ( PIXA *pixa, PIX *pix, BOX *box ); LEPT_DLL extern l_int32 pixaClear ( PIXA *pixa ); LEPT_DLL extern l_int32 pixaJoin ( PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_int32 pixaaJoin ( PIXAA *paad, PIXAA *paas, l_int32 istart, l_int32 iend ); LEPT_DLL extern PIXAA * pixaaCreate ( l_int32 n ); LEPT_DLL extern PIXAA * pixaaCreateFromPixa ( PIXA *pixa, l_int32 n, l_int32 type, l_int32 copyflag ); LEPT_DLL extern void pixaaDestroy ( PIXAA **ppaa ); LEPT_DLL extern l_int32 pixaaAddPixa ( PIXAA *paa, PIXA *pixa, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaaExtendArray ( PIXAA *paa ); LEPT_DLL extern l_int32 pixaaAddPix ( PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaaAddBox ( PIXAA *paa, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaaGetCount ( PIXAA *paa, NUMA **pna ); LEPT_DLL extern PIXA * pixaaGetPixa ( PIXAA *paa, l_int32 index, l_int32 accesstype ); LEPT_DLL extern BOXA * pixaaGetBoxa ( PIXAA *paa, l_int32 accesstype ); LEPT_DLL extern PIX * pixaaGetPix ( PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag ); LEPT_DLL extern l_int32 pixaaVerifyDepth ( PIXAA *paa, l_int32 *pmaxdepth ); LEPT_DLL extern l_int32 pixaaIsFull ( PIXAA *paa, l_int32 *pfull ); LEPT_DLL extern l_int32 pixaaInitFull ( PIXAA *paa, PIXA *pixa ); LEPT_DLL extern l_int32 pixaaReplacePixa ( PIXAA *paa, l_int32 index, PIXA *pixa ); LEPT_DLL extern l_int32 pixaaClear ( PIXAA *paa ); LEPT_DLL extern l_int32 pixaaTruncate ( PIXAA *paa ); LEPT_DLL extern PIXA * pixaRead ( const char *filename ); LEPT_DLL extern PIXA * pixaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 pixaWrite ( const char *filename, PIXA *pixa ); LEPT_DLL extern l_int32 pixaWriteStream ( FILE *fp, PIXA *pixa ); LEPT_DLL extern PIXAA * pixaaReadFromFiles ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); LEPT_DLL extern PIXAA * pixaaRead ( const char *filename ); LEPT_DLL extern PIXAA * pixaaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 pixaaWrite ( const char *filename, PIXAA *paa ); LEPT_DLL extern l_int32 pixaaWriteStream ( FILE *fp, PIXAA *paa ); LEPT_DLL extern PIXACC * pixaccCreate ( l_int32 w, l_int32 h, l_int32 negflag ); LEPT_DLL extern PIXACC * pixaccCreateFromPix ( PIX *pix, l_int32 negflag ); LEPT_DLL extern void pixaccDestroy ( PIXACC **ppixacc ); LEPT_DLL extern PIX * pixaccFinal ( PIXACC *pixacc, l_int32 outdepth ); LEPT_DLL extern PIX * pixaccGetPix ( PIXACC *pixacc ); LEPT_DLL extern l_int32 pixaccGetOffset ( PIXACC *pixacc ); LEPT_DLL extern l_int32 pixaccAdd ( PIXACC *pixacc, PIX *pix ); LEPT_DLL extern l_int32 pixaccSubtract ( PIXACC *pixacc, PIX *pix ); LEPT_DLL extern l_int32 pixaccMultConst ( PIXACC *pixacc, l_float32 factor ); LEPT_DLL extern l_int32 pixaccMultConstAccumulate ( PIXACC *pixacc, PIX *pix, l_float32 factor ); LEPT_DLL extern PIX * pixSelectBySize ( PIX *pixs, l_int32 width, l_int32 height, l_int32 connectivity, l_int32 type, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectBySize ( PIXA *pixas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged ); LEPT_DLL extern NUMA * pixaMakeSizeIndicator ( PIXA *pixa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation ); LEPT_DLL extern PIX * pixSelectByPerimToAreaRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByPerimToAreaRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIX * pixSelectByPerimSizeRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByPerimSizeRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIX * pixSelectByAreaFraction ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByAreaFraction ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIX * pixSelectByWidthHeightRatio ( PIX *pixs, l_float32 thresh, l_int32 connectivity, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectByWidthHeightRatio ( PIXA *pixas, l_float32 thresh, l_int32 type, l_int32 *pchanged ); LEPT_DLL extern PIXA * pixaSelectWithIndicator ( PIXA *pixas, NUMA *na, l_int32 *pchanged ); LEPT_DLL extern l_int32 pixRemoveWithIndicator ( PIX *pixs, PIXA *pixa, NUMA *na ); LEPT_DLL extern l_int32 pixAddWithIndicator ( PIX *pixs, PIXA *pixa, NUMA *na ); LEPT_DLL extern PIX * pixaRenderComponent ( PIX *pixs, PIXA *pixa, l_int32 index ); LEPT_DLL extern PIXA * pixaSort ( PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern PIXA * pixaBinSort ( PIXA *pixas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern PIXA * pixaSortByIndex ( PIXA *pixas, NUMA *naindex, l_int32 copyflag ); LEPT_DLL extern PIXAA * pixaSort2dByIndex ( PIXA *pixas, NUMAA *naa, l_int32 copyflag ); LEPT_DLL extern PIXA * pixaSelectRange ( PIXA *pixas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern PIXAA * pixaaSelectRange ( PIXAA *paas, l_int32 first, l_int32 last, l_int32 copyflag ); LEPT_DLL extern PIXAA * pixaaScaleToSize ( PIXAA *paas, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIXAA * pixaaScaleToSizeVar ( PIXAA *paas, NUMA *nawd, NUMA *nahd ); LEPT_DLL extern PIXA * pixaScaleToSize ( PIXA *pixas, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIXA * pixaAddBorderGeneral ( PIXA *pixad, PIXA *pixas, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val ); LEPT_DLL extern PIXA * pixaaFlattenToPixa ( PIXAA *paa, NUMA **pnaindex, l_int32 copyflag ); LEPT_DLL extern l_int32 pixaaSizeRange ( PIXAA *paa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern l_int32 pixaSizeRange ( PIXA *pixa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh ); LEPT_DLL extern PIXA * pixaClipToPix ( PIXA *pixas, PIX *pixs ); LEPT_DLL extern l_int32 pixaGetRenderingDepth ( PIXA *pixa, l_int32 *pdepth ); LEPT_DLL extern l_int32 pixaHasColor ( PIXA *pixa, l_int32 *phascolor ); LEPT_DLL extern l_int32 pixaAnyColormaps ( PIXA *pixa, l_int32 *phascmap ); LEPT_DLL extern l_int32 pixaGetDepthInfo ( PIXA *pixa, l_int32 *pmaxdepth, l_int32 *psame ); LEPT_DLL extern PIXA * pixaConvertToSameDepth ( PIXA *pixas ); LEPT_DLL extern l_int32 pixaEqual ( PIXA *pixa1, PIXA *pixa2, l_int32 maxdist, NUMA **pnaindex, l_int32 *psame ); LEPT_DLL extern PIX * pixaDisplay ( PIXA *pixa, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixaDisplayOnColor ( PIXA *pixa, l_int32 w, l_int32 h, l_uint32 bgcolor ); LEPT_DLL extern PIX * pixaDisplayRandomCmap ( PIXA *pixa, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixaDisplayLinearly ( PIXA *pixas, l_int32 direction, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border, BOXA **pboxa ); LEPT_DLL extern PIX * pixaDisplayOnLattice ( PIXA *pixa, l_int32 cellw, l_int32 cellh, l_int32 *pncols, BOXA **pboxa ); LEPT_DLL extern PIX * pixaDisplayUnsplit ( PIXA *pixa, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor ); LEPT_DLL extern PIX * pixaDisplayTiled ( PIXA *pixa, l_int32 maxwidth, l_int32 background, l_int32 spacing ); LEPT_DLL extern PIX * pixaDisplayTiledInRows ( PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIX * pixaDisplayTiledAndScaled ( PIXA *pixa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIX * pixaaDisplay ( PIXAA *paa, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixaaDisplayByPixa ( PIXAA *paa, l_int32 xspace, l_int32 yspace, l_int32 maxw ); LEPT_DLL extern PIXA * pixaaDisplayTiledAndScaled ( PIXAA *paa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIXA * pixaConvertTo1 ( PIXA *pixas, l_int32 thresh ); LEPT_DLL extern PIXA * pixaConvertTo8 ( PIXA *pixas, l_int32 cmapflag ); LEPT_DLL extern PIXA * pixaConvertTo8Color ( PIXA *pixas, l_int32 dither ); LEPT_DLL extern PIXA * pixaConvertTo32 ( PIXA *pixas ); LEPT_DLL extern l_int32 convertToNUpFiles ( const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, const char *fontdir, const char *outdir ); LEPT_DLL extern PIXA * convertToNUpPixa ( const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, const char *fontdir ); LEPT_DLL extern l_int32 pmsCreate ( size_t minsize, size_t smallest, NUMA *numalloc, const char *logfile ); LEPT_DLL extern void pmsDestroy ( ); LEPT_DLL extern void * pmsCustomAlloc ( size_t nbytes ); LEPT_DLL extern void pmsCustomDealloc ( void *data ); LEPT_DLL extern void * pmsGetAlloc ( size_t nbytes ); LEPT_DLL extern l_int32 pmsGetLevelForAlloc ( size_t nbytes, l_int32 *plevel ); LEPT_DLL extern l_int32 pmsGetLevelForDealloc ( void *data, l_int32 *plevel ); LEPT_DLL extern void pmsLogInfo ( ); LEPT_DLL extern l_int32 pixAddConstantGray ( PIX *pixs, l_int32 val ); LEPT_DLL extern l_int32 pixMultConstantGray ( PIX *pixs, l_float32 val ); LEPT_DLL extern PIX * pixAddGray ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixSubtractGray ( PIX *pixd, PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixThresholdToValue ( PIX *pixd, PIX *pixs, l_int32 threshval, l_int32 setval ); LEPT_DLL extern PIX * pixInitAccumulate ( l_int32 w, l_int32 h, l_uint32 offset ); LEPT_DLL extern PIX * pixFinalAccumulate ( PIX *pixs, l_uint32 offset, l_int32 depth ); LEPT_DLL extern PIX * pixFinalAccumulateThreshold ( PIX *pixs, l_uint32 offset, l_uint32 threshold ); LEPT_DLL extern l_int32 pixAccumulate ( PIX *pixd, PIX *pixs, l_int32 op ); LEPT_DLL extern l_int32 pixMultConstAccumulate ( PIX *pixs, l_float32 factor, l_uint32 offset ); LEPT_DLL extern PIX * pixAbsDifference ( PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixAddRGB ( PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern PIX * pixMinOrMax ( PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 type ); LEPT_DLL extern PIX * pixMaxDynamicRange ( PIX *pixs, l_int32 type ); LEPT_DLL extern l_float32 * makeLogBase2Tab ( void ); LEPT_DLL extern l_float32 getLogBase2 ( l_int32 val, l_float32 *logtab ); LEPT_DLL extern PIXC * pixcompCreateFromPix ( PIX *pix, l_int32 comptype ); LEPT_DLL extern PIXC * pixcompCreateFromString ( l_uint8 *data, size_t size, l_int32 copyflag ); LEPT_DLL extern PIXC * pixcompCreateFromFile ( const char *filename, l_int32 comptype ); LEPT_DLL extern void pixcompDestroy ( PIXC **ppixc ); LEPT_DLL extern l_int32 pixcompGetDimensions ( PIXC *pixc, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern l_int32 pixcompDetermineFormat ( l_int32 comptype, l_int32 d, l_int32 cmapflag, l_int32 *pformat ); LEPT_DLL extern PIX * pixCreateFromPixcomp ( PIXC *pixc ); LEPT_DLL extern PIXAC * pixacompCreate ( l_int32 n ); LEPT_DLL extern PIXAC * pixacompCreateWithInit ( l_int32 n, l_int32 offset, PIX *pix, l_int32 comptype ); LEPT_DLL extern PIXAC * pixacompCreateFromPixa ( PIXA *pixa, l_int32 comptype, l_int32 accesstype ); LEPT_DLL extern PIXAC * pixacompCreateFromFiles ( const char *dirname, const char *substr, l_int32 comptype ); LEPT_DLL extern PIXAC * pixacompCreateFromSA ( SARRAY *sa, l_int32 comptype ); LEPT_DLL extern void pixacompDestroy ( PIXAC **ppixac ); LEPT_DLL extern l_int32 pixacompAddPix ( PIXAC *pixac, PIX *pix, l_int32 comptype ); LEPT_DLL extern l_int32 pixacompAddPixcomp ( PIXAC *pixac, PIXC *pixc ); LEPT_DLL extern l_int32 pixacompReplacePix ( PIXAC *pixac, l_int32 index, PIX *pix, l_int32 comptype ); LEPT_DLL extern l_int32 pixacompReplacePixcomp ( PIXAC *pixac, l_int32 index, PIXC *pixc ); LEPT_DLL extern l_int32 pixacompAddBox ( PIXAC *pixac, BOX *box, l_int32 copyflag ); LEPT_DLL extern l_int32 pixacompGetCount ( PIXAC *pixac ); LEPT_DLL extern PIXC * pixacompGetPixcomp ( PIXAC *pixac, l_int32 index ); LEPT_DLL extern PIX * pixacompGetPix ( PIXAC *pixac, l_int32 index ); LEPT_DLL extern l_int32 pixacompGetPixDimensions ( PIXAC *pixac, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd ); LEPT_DLL extern BOXA * pixacompGetBoxa ( PIXAC *pixac, l_int32 accesstype ); LEPT_DLL extern l_int32 pixacompGetBoxaCount ( PIXAC *pixac ); LEPT_DLL extern BOX * pixacompGetBox ( PIXAC *pixac, l_int32 index, l_int32 accesstype ); LEPT_DLL extern l_int32 pixacompGetBoxGeometry ( PIXAC *pixac, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern l_int32 pixacompGetOffset ( PIXAC *pixac ); LEPT_DLL extern l_int32 pixacompSetOffset ( PIXAC *pixac, l_int32 offset ); LEPT_DLL extern PIXA * pixaCreateFromPixacomp ( PIXAC *pixac, l_int32 accesstype ); LEPT_DLL extern PIXAC * pixacompRead ( const char *filename ); LEPT_DLL extern PIXAC * pixacompReadStream ( FILE *fp ); LEPT_DLL extern l_int32 pixacompWrite ( const char *filename, PIXAC *pixac ); LEPT_DLL extern l_int32 pixacompWriteStream ( FILE *fp, PIXAC *pixac ); LEPT_DLL extern l_int32 pixacompConvertToPdf ( PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout ); LEPT_DLL extern l_int32 pixacompConvertToPdfData ( PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes ); LEPT_DLL extern l_int32 pixacompWriteStreamInfo ( FILE *fp, PIXAC *pixac, const char *text ); LEPT_DLL extern l_int32 pixcompWriteStreamInfo ( FILE *fp, PIXC *pixc, const char *text ); LEPT_DLL extern PIX * pixacompDisplayTiledAndScaled ( PIXAC *pixac, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border ); LEPT_DLL extern PIX * pixThreshold8 ( PIX *pixs, l_int32 d, l_int32 nlevels, l_int32 cmapflag ); LEPT_DLL extern PIX * pixRemoveColormapGeneral ( PIX *pixs, l_int32 type, l_int32 ifnocmap ); LEPT_DLL extern PIX * pixRemoveColormap ( PIX *pixs, l_int32 type ); LEPT_DLL extern l_int32 pixAddGrayColormap8 ( PIX *pixs ); LEPT_DLL extern PIX * pixAddMinimalGrayColormap8 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToLuminance ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToGray ( PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern PIX * pixConvertRGBToGrayFast ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertRGBToGrayMinMax ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixConvertRGBToGraySatBoost ( PIX *pixs, l_int32 refval ); LEPT_DLL extern PIX * pixConvertGrayToColormap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertGrayToColormap8 ( PIX *pixs, l_int32 mindepth ); LEPT_DLL extern PIX * pixColorizeGray ( PIX *pixs, l_uint32 color, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvertRGBToColormap ( PIX *pixs, l_int32 ditherflag ); LEPT_DLL extern l_int32 pixQuantizeIfFewColors ( PIX *pixs, l_int32 maxcolors, l_int32 mingraycolors, l_int32 octlevel, PIX **ppixd ); LEPT_DLL extern PIX * pixConvert16To8 ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixConvertGrayToFalseColor ( PIX *pixs, l_float32 gamma ); LEPT_DLL extern PIX * pixUnpackBinary ( PIX *pixs, l_int32 depth, l_int32 invert ); LEPT_DLL extern PIX * pixConvert1To16 ( PIX *pixd, PIX *pixs, l_uint16 val0, l_uint16 val1 ); LEPT_DLL extern PIX * pixConvert1To32 ( PIX *pixd, PIX *pixs, l_uint32 val0, l_uint32 val1 ); LEPT_DLL extern PIX * pixConvert1To2Cmap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert1To2 ( PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1 ); LEPT_DLL extern PIX * pixConvert1To4Cmap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert1To4 ( PIX *pixd, PIX *pixs, l_int32 val0, l_int32 val1 ); LEPT_DLL extern PIX * pixConvert1To8 ( PIX *pixd, PIX *pixs, l_uint8 val0, l_uint8 val1 ); LEPT_DLL extern PIX * pixConvert2To8 ( PIX *pixs, l_uint8 val0, l_uint8 val1, l_uint8 val2, l_uint8 val3, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvert4To8 ( PIX *pixs, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvert8To16 ( PIX *pixs, l_int32 leftshift ); LEPT_DLL extern PIX * pixConvertTo1 ( PIX *pixs, l_int32 threshold ); LEPT_DLL extern PIX * pixConvertTo1BySampling ( PIX *pixs, l_int32 factor, l_int32 threshold ); LEPT_DLL extern PIX * pixConvertTo8 ( PIX *pixs, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvertTo8BySampling ( PIX *pixs, l_int32 factor, l_int32 cmapflag ); LEPT_DLL extern PIX * pixConvertTo8Color ( PIX *pixs, l_int32 dither ); LEPT_DLL extern PIX * pixConvertTo16 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertTo32 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertTo32BySampling ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixConvert8To32 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertTo8Or32 ( PIX *pixs, l_int32 copyflag, l_int32 warnflag ); LEPT_DLL extern PIX * pixConvert24To32 ( PIX *pixs ); LEPT_DLL extern PIX * pixConvert32To24 ( PIX *pixs ); LEPT_DLL extern PIX * pixRemoveAlpha ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertLossless ( PIX *pixs, l_int32 d ); LEPT_DLL extern PIX * pixConvertForPSWrap ( PIX *pixs ); LEPT_DLL extern PIX * pixConvertToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); LEPT_DLL extern PIX * pixConvertGrayToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); LEPT_DLL extern PIX * pixConvertColorToSubpixelRGB ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_int32 order ); LEPT_DLL extern PIX * pixConnCompTransform ( PIX *pixs, l_int32 connect, l_int32 depth ); LEPT_DLL extern PIX * pixConnCompAreaTransform ( PIX *pixs, l_int32 connect ); LEPT_DLL extern PIX * pixLocToColorTransform ( PIX *pixs ); LEPT_DLL extern PIXTILING * pixTilingCreate ( PIX *pixs, l_int32 nx, l_int32 ny, l_int32 w, l_int32 h, l_int32 xoverlap, l_int32 yoverlap ); LEPT_DLL extern void pixTilingDestroy ( PIXTILING **ppt ); LEPT_DLL extern l_int32 pixTilingGetCount ( PIXTILING *pt, l_int32 *pnx, l_int32 *pny ); LEPT_DLL extern l_int32 pixTilingGetSize ( PIXTILING *pt, l_int32 *pw, l_int32 *ph ); LEPT_DLL extern PIX * pixTilingGetTile ( PIXTILING *pt, l_int32 i, l_int32 j ); LEPT_DLL extern l_int32 pixTilingNoStripOnPaint ( PIXTILING *pt ); LEPT_DLL extern l_int32 pixTilingPaintTile ( PIX *pixd, l_int32 i, l_int32 j, PIX *pixs, PIXTILING *pt ); LEPT_DLL extern PIX * pixReadStreamPng ( FILE *fp ); LEPT_DLL extern l_int32 readHeaderPng ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 freadHeaderPng ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 sreadHeaderPng ( const l_uint8 *data, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 fgetPngResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_int32 pixWritePng ( const char *filename, PIX *pix, l_float32 gamma ); LEPT_DLL extern l_int32 pixWriteStreamPng ( FILE *fp, PIX *pix, l_float32 gamma ); LEPT_DLL extern l_int32 pixSetZlibCompression ( PIX *pix, l_int32 compval ); LEPT_DLL extern void l_pngSetReadStrip16To8 ( l_int32 flag ); LEPT_DLL extern PIX * pixReadMemPng ( const l_uint8 *cdata, size_t size ); LEPT_DLL extern l_int32 pixWriteMemPng ( l_uint8 **pdata, size_t *psize, PIX *pix, l_float32 gamma ); LEPT_DLL extern PIX * pixReadStreamPnm ( FILE *fp ); LEPT_DLL extern l_int32 readHeaderPnm ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern l_int32 freadHeaderPnm ( FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern l_int32 pixWriteStreamPnm ( FILE *fp, PIX *pix ); LEPT_DLL extern l_int32 pixWriteStreamAsciiPnm ( FILE *fp, PIX *pix ); LEPT_DLL extern PIX * pixReadMemPnm ( const l_uint8 *cdata, size_t size ); LEPT_DLL extern l_int32 sreadHeaderPnm ( const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp ); LEPT_DLL extern l_int32 pixWriteMemPnm ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern PIX * pixProjectiveSampledPta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixProjectiveSampled ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixProjectivePta ( PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor ); LEPT_DLL extern PIX * pixProjective ( PIX *pixs, l_float32 *vc, l_int32 incolor ); LEPT_DLL extern PIX * pixProjectivePtaColor ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval ); LEPT_DLL extern PIX * pixProjectiveColor ( PIX *pixs, l_float32 *vc, l_uint32 colorval ); LEPT_DLL extern PIX * pixProjectivePtaGray ( PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval ); LEPT_DLL extern PIX * pixProjectiveGray ( PIX *pixs, l_float32 *vc, l_uint8 grayval ); LEPT_DLL extern PIX * pixProjectivePtaWithAlpha ( PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border ); LEPT_DLL extern l_int32 getProjectiveXformCoeffs ( PTA *ptas, PTA *ptad, l_float32 **pvc ); LEPT_DLL extern l_int32 projectiveXformSampledPt ( l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp ); LEPT_DLL extern l_int32 projectiveXformPt ( l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp ); LEPT_DLL extern l_int32 convertFilesToPS ( const char *dirin, const char *substr, l_int32 res, const char *fileout ); LEPT_DLL extern l_int32 sarrayConvertFilesToPS ( SARRAY *sa, l_int32 res, const char *fileout ); LEPT_DLL extern l_int32 convertFilesFittedToPS ( const char *dirin, const char *substr, l_float32 xpts, l_float32 ypts, const char *fileout ); LEPT_DLL extern l_int32 sarrayConvertFilesFittedToPS ( SARRAY *sa, l_float32 xpts, l_float32 ypts, const char *fileout ); LEPT_DLL extern l_int32 writeImageCompressedToPSFile ( const char *filein, const char *fileout, l_int32 res, l_int32 *pfirstfile, l_int32 *pindex ); LEPT_DLL extern l_int32 convertSegmentedPagesToPS ( const char *pagedir, const char *pagestr, const char *maskdir, const char *maskstr, l_int32 numpre, l_int32 numpost, l_int32 maxnum, l_float32 textscale, l_float32 imagescale, l_int32 threshold, const char *fileout ); LEPT_DLL extern l_int32 pixWriteSegmentedPageToPS ( PIX *pixs, PIX *pixm, l_float32 textscale, l_float32 imagescale, l_int32 threshold, l_int32 pageno, const char *fileout ); LEPT_DLL extern l_int32 pixWriteMixedToPS ( PIX *pixb, PIX *pixc, l_float32 scale, l_int32 pageno, const char *fileout ); LEPT_DLL extern l_int32 convertToPSEmbed ( const char *filein, const char *fileout, l_int32 level ); LEPT_DLL extern l_int32 pixaWriteCompressedToPS ( PIXA *pixa, const char *fileout, l_int32 res, l_int32 level ); LEPT_DLL extern l_int32 pixWritePSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_int32 pixWriteStreamPS ( FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale ); LEPT_DLL extern char * pixWriteStringPS ( PIX *pixs, BOX *box, l_int32 res, l_float32 scale ); LEPT_DLL extern char * generateUncompressedPS ( char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag ); LEPT_DLL extern void getScaledParametersPS ( BOX *box, l_int32 wpix, l_int32 hpix, l_int32 res, l_float32 scale, l_float32 *pxpt, l_float32 *pypt, l_float32 *pwpt, l_float32 *phpt ); LEPT_DLL extern void convertByteToHexAscii ( l_uint8 byteval, char *pnib1, char *pnib2 ); LEPT_DLL extern l_int32 convertJpegToPSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_int32 convertJpegToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern l_int32 convertJpegToPSString ( const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern char * generateJpegPS ( const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern L_COMP_DATA * pixGenerateJpegData ( PIX *pixs, l_int32 ascii85flag, l_int32 quality ); LEPT_DLL extern L_COMP_DATA * l_generateJpegData ( const char *fname, l_int32 ascii85flag ); LEPT_DLL extern void l_compdataDestroy ( L_COMP_DATA **pcid ); LEPT_DLL extern l_int32 convertG4ToPSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_int32 convertG4ToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage ); LEPT_DLL extern l_int32 convertG4ToPSString ( const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage ); LEPT_DLL extern char * generateG4PS ( const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 maskflag, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern L_COMP_DATA * pixGenerateG4Data ( PIX *pixs, l_int32 ascii85flag ); LEPT_DLL extern L_COMP_DATA * l_generateG4Data ( const char *fname, l_int32 ascii85flag ); LEPT_DLL extern l_int32 convertTiffMultipageToPS ( const char *filein, const char *fileout, const char *tempfile, l_float32 fillfract ); LEPT_DLL extern l_int32 convertFlateToPSEmbed ( const char *filein, const char *fileout ); LEPT_DLL extern l_int32 convertFlateToPS ( const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern l_int32 convertFlateToPSString ( const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern char * generateFlatePS ( const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage ); LEPT_DLL extern L_COMP_DATA * l_generateFlateData ( const char *fname, l_int32 ascii85flag ); LEPT_DLL extern L_COMP_DATA * pixGenerateFlateData ( PIX *pixs, l_int32 ascii85flag ); LEPT_DLL extern l_int32 l_generateCIData ( const char *fname, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid ); LEPT_DLL extern l_int32 pixGenerateCIData ( PIX *pixs, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid ); LEPT_DLL extern l_int32 pixWriteMemPS ( l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale ); LEPT_DLL extern l_int32 getResLetterPage ( l_int32 w, l_int32 h, l_float32 fillfract ); LEPT_DLL extern l_int32 getResA4Page ( l_int32 w, l_int32 h, l_float32 fillfract ); LEPT_DLL extern char * encodeAscii85 ( l_uint8 *inarray, l_int32 insize, l_int32 *poutsize ); LEPT_DLL extern l_uint8 * decodeAscii85 ( char *ina, l_int32 insize, l_int32 *poutsize ); LEPT_DLL extern void l_psWriteBoundingBox ( l_int32 flag ); LEPT_DLL extern PTA * ptaCreate ( l_int32 n ); LEPT_DLL extern PTA * ptaCreateFromNuma ( NUMA *nax, NUMA *nay ); LEPT_DLL extern void ptaDestroy ( PTA **ppta ); LEPT_DLL extern PTA * ptaCopy ( PTA *pta ); LEPT_DLL extern PTA * ptaCopyRange ( PTA *ptas, l_int32 istart, l_int32 iend ); LEPT_DLL extern PTA * ptaClone ( PTA *pta ); LEPT_DLL extern l_int32 ptaEmpty ( PTA *pta ); LEPT_DLL extern l_int32 ptaAddPt ( PTA *pta, l_float32 x, l_float32 y ); LEPT_DLL extern l_int32 ptaInsertPt ( PTA *pta, l_int32 index, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 ptaRemovePt ( PTA *pta, l_int32 index ); LEPT_DLL extern l_int32 ptaGetRefcount ( PTA *pta ); LEPT_DLL extern l_int32 ptaChangeRefcount ( PTA *pta, l_int32 delta ); LEPT_DLL extern l_int32 ptaGetCount ( PTA *pta ); LEPT_DLL extern l_int32 ptaGetPt ( PTA *pta, l_int32 index, l_float32 *px, l_float32 *py ); LEPT_DLL extern l_int32 ptaGetIPt ( PTA *pta, l_int32 index, l_int32 *px, l_int32 *py ); LEPT_DLL extern l_int32 ptaSetPt ( PTA *pta, l_int32 index, l_float32 x, l_float32 y ); LEPT_DLL extern l_int32 ptaGetArrays ( PTA *pta, NUMA **pnax, NUMA **pnay ); LEPT_DLL extern PTA * ptaRead ( const char *filename ); LEPT_DLL extern PTA * ptaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 ptaWrite ( const char *filename, PTA *pta, l_int32 type ); LEPT_DLL extern l_int32 ptaWriteStream ( FILE *fp, PTA *pta, l_int32 type ); LEPT_DLL extern PTAA * ptaaCreate ( l_int32 n ); LEPT_DLL extern void ptaaDestroy ( PTAA **pptaa ); LEPT_DLL extern l_int32 ptaaAddPta ( PTAA *ptaa, PTA *pta, l_int32 copyflag ); LEPT_DLL extern l_int32 ptaaGetCount ( PTAA *ptaa ); LEPT_DLL extern PTA * ptaaGetPta ( PTAA *ptaa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern l_int32 ptaaGetPt ( PTAA *ptaa, l_int32 ipta, l_int32 jpt, l_float32 *px, l_float32 *py ); LEPT_DLL extern l_int32 ptaaInitFull ( PTAA *ptaa, PTA *pta ); LEPT_DLL extern l_int32 ptaaReplacePta ( PTAA *ptaa, l_int32 index, PTA *pta ); LEPT_DLL extern l_int32 ptaaAddPt ( PTAA *ptaa, l_int32 ipta, l_float32 x, l_float32 y ); LEPT_DLL extern l_int32 ptaaTruncate ( PTAA *ptaa ); LEPT_DLL extern PTAA * ptaaRead ( const char *filename ); LEPT_DLL extern PTAA * ptaaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 ptaaWrite ( const char *filename, PTAA *ptaa, l_int32 type ); LEPT_DLL extern l_int32 ptaaWriteStream ( FILE *fp, PTAA *ptaa, l_int32 type ); LEPT_DLL extern PTA * ptaSubsample ( PTA *ptas, l_int32 subfactor ); LEPT_DLL extern l_int32 ptaJoin ( PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend ); LEPT_DLL extern l_int32 ptaaJoin ( PTAA *ptaad, PTAA *ptaas, l_int32 istart, l_int32 iend ); LEPT_DLL extern PTA * ptaReverse ( PTA *ptas, l_int32 type ); LEPT_DLL extern PTA * ptaTranspose ( PTA *ptas ); LEPT_DLL extern PTA * ptaCyclicPerm ( PTA *ptas, l_int32 xs, l_int32 ys ); LEPT_DLL extern PTA * ptaSort ( PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern l_int32 ptaGetSortIndex ( PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex ); LEPT_DLL extern PTA * ptaSortByIndex ( PTA *ptas, NUMA *naindex ); LEPT_DLL extern PTA * ptaRemoveDuplicates ( PTA *ptas, l_uint32 factor ); LEPT_DLL extern PTAA * ptaaSortByIndex ( PTAA *ptaas, NUMA *naindex ); LEPT_DLL extern BOX * ptaGetBoundingRegion ( PTA *pta ); LEPT_DLL extern l_int32 ptaGetRange ( PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy ); LEPT_DLL extern PTA * ptaGetInsideBox ( PTA *ptas, BOX *box ); LEPT_DLL extern PTA * pixFindCornerPixels ( PIX *pixs ); LEPT_DLL extern l_int32 ptaContainsPt ( PTA *pta, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 ptaTestIntersection ( PTA *pta1, PTA *pta2 ); LEPT_DLL extern PTA * ptaTransform ( PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern l_int32 ptaPtInsidePolygon ( PTA *pta, l_float32 x, l_float32 y, l_int32 *pinside ); LEPT_DLL extern l_float32 l_angleBetweenVectors ( l_float32 x1, l_float32 y1, l_float32 x2, l_float32 y2 ); LEPT_DLL extern l_int32 ptaGetLinearLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit ); LEPT_DLL extern l_int32 ptaGetQuadraticLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, NUMA **pnafit ); LEPT_DLL extern l_int32 ptaGetCubicLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, NUMA **pnafit ); LEPT_DLL extern l_int32 ptaGetQuarticLSF ( PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, l_float32 *pe, NUMA **pnafit ); LEPT_DLL extern l_int32 ptaNoisyLinearLSF ( PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr, NUMA **pnafit ); LEPT_DLL extern l_int32 ptaNoisyQuadraticLSF ( PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr, NUMA **pnafit ); LEPT_DLL extern l_int32 applyLinearFit ( l_float32 a, l_float32 b, l_float32 x, l_float32 *py ); LEPT_DLL extern l_int32 applyQuadraticFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 x, l_float32 *py ); LEPT_DLL extern l_int32 applyCubicFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 x, l_float32 *py ); LEPT_DLL extern l_int32 applyQuarticFit ( l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 e, l_float32 x, l_float32 *py ); LEPT_DLL extern l_int32 pixPlotAlongPta ( PIX *pixs, PTA *pta, l_int32 outformat, const char *title ); LEPT_DLL extern PTA * ptaGetPixelsFromPix ( PIX *pixs, BOX *box ); LEPT_DLL extern PIX * pixGenerateFromPta ( PTA *pta, l_int32 w, l_int32 h ); LEPT_DLL extern PTA * ptaGetBoundaryPixels ( PIX *pixs, l_int32 type ); LEPT_DLL extern PTAA * ptaaGetBoundaryPixels ( PIX *pixs, l_int32 type, l_int32 connectivity, BOXA **pboxa, PIXA **ppixa ); LEPT_DLL extern PIX * pixDisplayPta ( PIX *pixd, PIX *pixs, PTA *pta ); LEPT_DLL extern PIX * pixDisplayPtaaPattern ( PIX *pixd, PIX *pixs, PTAA *ptaa, PIX *pixp, l_int32 cx, l_int32 cy ); LEPT_DLL extern PIX * pixDisplayPtaPattern ( PIX *pixd, PIX *pixs, PTA *pta, PIX *pixp, l_int32 cx, l_int32 cy, l_uint32 color ); LEPT_DLL extern PTA * ptaReplicatePattern ( PTA *ptas, PIX *pixp, PTA *ptap, l_int32 cx, l_int32 cy, l_int32 w, l_int32 h ); LEPT_DLL extern PIX * pixDisplayPtaa ( PIX *pixs, PTAA *ptaa ); LEPT_DLL extern L_PTRA * ptraCreate ( l_int32 n ); LEPT_DLL extern void ptraDestroy ( L_PTRA **ppa, l_int32 freeflag, l_int32 warnflag ); LEPT_DLL extern l_int32 ptraAdd ( L_PTRA *pa, void *item ); LEPT_DLL extern l_int32 ptraInsert ( L_PTRA *pa, l_int32 index, void *item, l_int32 shiftflag ); LEPT_DLL extern void * ptraRemove ( L_PTRA *pa, l_int32 index, l_int32 flag ); LEPT_DLL extern void * ptraRemoveLast ( L_PTRA *pa ); LEPT_DLL extern void * ptraReplace ( L_PTRA *pa, l_int32 index, void *item, l_int32 freeflag ); LEPT_DLL extern l_int32 ptraSwap ( L_PTRA *pa, l_int32 index1, l_int32 index2 ); LEPT_DLL extern l_int32 ptraCompactArray ( L_PTRA *pa ); LEPT_DLL extern l_int32 ptraReverse ( L_PTRA *pa ); LEPT_DLL extern l_int32 ptraJoin ( L_PTRA *pa1, L_PTRA *pa2 ); LEPT_DLL extern l_int32 ptraGetMaxIndex ( L_PTRA *pa, l_int32 *pmaxindex ); LEPT_DLL extern l_int32 ptraGetActualCount ( L_PTRA *pa, l_int32 *pcount ); LEPT_DLL extern void * ptraGetPtrToItem ( L_PTRA *pa, l_int32 index ); LEPT_DLL extern L_PTRAA * ptraaCreate ( l_int32 n ); LEPT_DLL extern void ptraaDestroy ( L_PTRAA **ppaa, l_int32 freeflag, l_int32 warnflag ); LEPT_DLL extern l_int32 ptraaGetSize ( L_PTRAA *paa, l_int32 *psize ); LEPT_DLL extern l_int32 ptraaInsertPtra ( L_PTRAA *paa, l_int32 index, L_PTRA *pa ); LEPT_DLL extern L_PTRA * ptraaGetPtra ( L_PTRAA *paa, l_int32 index, l_int32 accessflag ); LEPT_DLL extern L_PTRA * ptraaFlattenToPtra ( L_PTRAA *paa ); LEPT_DLL extern l_int32 pixQuadtreeMean ( PIX *pixs, l_int32 nlevels, PIX *pix_ma, FPIXA **pfpixa ); LEPT_DLL extern l_int32 pixQuadtreeVariance ( PIX *pixs, l_int32 nlevels, PIX *pix_ma, DPIX *dpix_msa, FPIXA **pfpixa_v, FPIXA **pfpixa_rv ); LEPT_DLL extern l_int32 pixMeanInRectangle ( PIX *pixs, BOX *box, PIX *pixma, l_float32 *pval ); LEPT_DLL extern l_int32 pixVarianceInRectangle ( PIX *pixs, BOX *box, PIX *pix_ma, DPIX *dpix_msa, l_float32 *pvar, l_float32 *prvar ); LEPT_DLL extern BOXAA * boxaaQuadtreeRegions ( l_int32 w, l_int32 h, l_int32 nlevels ); LEPT_DLL extern l_int32 quadtreeGetParent ( FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval ); LEPT_DLL extern l_int32 quadtreeGetChildren ( FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval00, l_float32 *pval10, l_float32 *pval01, l_float32 *pval11 ); LEPT_DLL extern l_int32 quadtreeMaxLevels ( l_int32 w, l_int32 h ); LEPT_DLL extern PIX * fpixaDisplayQuadtree ( FPIXA *fpixa, l_int32 factor ); LEPT_DLL extern L_QUEUE * lqueueCreate ( l_int32 nalloc ); LEPT_DLL extern void lqueueDestroy ( L_QUEUE **plq, l_int32 freeflag ); LEPT_DLL extern l_int32 lqueueAdd ( L_QUEUE *lq, void *item ); LEPT_DLL extern void * lqueueRemove ( L_QUEUE *lq ); LEPT_DLL extern l_int32 lqueueGetCount ( L_QUEUE *lq ); LEPT_DLL extern l_int32 lqueuePrint ( FILE *fp, L_QUEUE *lq ); LEPT_DLL extern PIX * pixRankFilter ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); LEPT_DLL extern PIX * pixRankFilterRGB ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); LEPT_DLL extern PIX * pixRankFilterGray ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank ); LEPT_DLL extern PIX * pixMedianFilter ( PIX *pixs, l_int32 wf, l_int32 hf ); LEPT_DLL extern PIX * pixRankFilterWithScaling ( PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank, l_float32 scalefactor ); LEPT_DLL extern SARRAY * pixProcessBarcodes ( PIX *pixs, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag ); LEPT_DLL extern PIXA * pixExtractBarcodes ( PIX *pixs, l_int32 debugflag ); LEPT_DLL extern SARRAY * pixReadBarcodes ( PIXA *pixa, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag ); LEPT_DLL extern NUMA * pixReadBarcodeWidths ( PIX *pixs, l_int32 method, l_int32 debugflag ); LEPT_DLL extern BOXA * pixLocateBarcodes ( PIX *pixs, l_int32 thresh, PIX **ppixb, PIX **ppixm ); LEPT_DLL extern PIX * pixDeskewBarcode ( PIX *pixs, PIX *pixb, BOX *box, l_int32 margin, l_int32 threshold, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern NUMA * pixExtractBarcodeWidths1 ( PIX *pixs, l_float32 thresh, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag ); LEPT_DLL extern NUMA * pixExtractBarcodeWidths2 ( PIX *pixs, l_float32 thresh, l_float32 *pwidth, NUMA **pnac, l_int32 debugflag ); LEPT_DLL extern NUMA * pixExtractBarcodeCrossings ( PIX *pixs, l_float32 thresh, l_int32 debugflag ); LEPT_DLL extern NUMA * numaQuantizeCrossingsByWidth ( NUMA *nas, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag ); LEPT_DLL extern NUMA * numaQuantizeCrossingsByWindow ( NUMA *nas, l_float32 ratio, l_float32 *pwidth, l_float32 *pfirstloc, NUMA **pnac, l_int32 debugflag ); LEPT_DLL extern PIXA * pixaReadFiles ( const char *dirname, const char *substr ); LEPT_DLL extern PIXA * pixaReadFilesSA ( SARRAY *sa ); LEPT_DLL extern PIX * pixRead ( const char *filename ); LEPT_DLL extern PIX * pixReadWithHint ( const char *filename, l_int32 hint ); LEPT_DLL extern PIX * pixReadIndexed ( SARRAY *sa, l_int32 index ); LEPT_DLL extern PIX * pixReadStream ( FILE *fp, l_int32 hint ); LEPT_DLL extern l_int32 pixReadHeader ( const char *filename, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 findFileFormat ( const char *filename, l_int32 *pformat ); LEPT_DLL extern l_int32 findFileFormatStream ( FILE *fp, l_int32 *pformat ); LEPT_DLL extern l_int32 findFileFormatBuffer ( const l_uint8 *buf, l_int32 *pformat ); LEPT_DLL extern l_int32 fileFormatIsTiff ( FILE *fp ); LEPT_DLL extern PIX * pixReadMem ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_int32 pixReadHeaderMem ( const l_uint8 *data, size_t size, l_int32 *pformat, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 ioFormatTest ( const char *filename ); LEPT_DLL extern L_RECOGA * recogaCreateFromRecog ( L_RECOG *recog ); LEPT_DLL extern L_RECOGA * recogaCreateFromPixaa ( PIXAA *paa, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir ); LEPT_DLL extern L_RECOGA * recogaCreate ( l_int32 n ); LEPT_DLL extern void recogaDestroy ( L_RECOGA **precoga ); LEPT_DLL extern l_int32 recogaAddRecog ( L_RECOGA *recoga, L_RECOG *recog ); LEPT_DLL extern l_int32 recogReplaceInRecoga ( L_RECOG **precog1, L_RECOG *recog2 ); LEPT_DLL extern L_RECOG * recogaGetRecog ( L_RECOGA *recoga, l_int32 index ); LEPT_DLL extern l_int32 recogaGetCount ( L_RECOGA *recoga ); LEPT_DLL extern l_int32 recogGetCount ( L_RECOG *recog ); LEPT_DLL extern l_int32 recogGetIndex ( L_RECOG *recog, l_int32 *pindex ); LEPT_DLL extern L_RECOGA * recogGetParent ( L_RECOG *recog ); LEPT_DLL extern l_int32 recogSetBootflag ( L_RECOG *recog ); LEPT_DLL extern L_RECOG * recogCreateFromRecog ( L_RECOG *recs, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir ); LEPT_DLL extern L_RECOG * recogCreateFromPixa ( PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir ); LEPT_DLL extern L_RECOG * recogCreate ( l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir ); LEPT_DLL extern void recogDestroy ( L_RECOG **precog ); LEPT_DLL extern l_int32 recogAppend ( L_RECOG *recog1, L_RECOG *recog2 ); LEPT_DLL extern l_int32 recogGetClassIndex ( L_RECOG *recog, l_int32 val, char *text, l_int32 *pindex ); LEPT_DLL extern l_int32 recogStringToIndex ( L_RECOG *recog, char *text, l_int32 *pindex ); LEPT_DLL extern l_int32 recogGetClassString ( L_RECOG *recog, l_int32 index, char **pcharstr ); LEPT_DLL extern l_int32 l_convertCharstrToInt ( const char *str, l_int32 *pval ); LEPT_DLL extern L_RECOGA * recogaRead ( const char *filename ); LEPT_DLL extern L_RECOGA * recogaReadStream ( FILE *fp ); LEPT_DLL extern l_int32 recogaWrite ( const char *filename, L_RECOGA *recoga ); LEPT_DLL extern l_int32 recogaWriteStream ( FILE *fp, L_RECOGA *recoga, const char *filename ); LEPT_DLL extern l_int32 recogaWritePixaa ( const char *filename, L_RECOGA *recoga ); LEPT_DLL extern L_RECOG * recogRead ( const char *filename ); LEPT_DLL extern L_RECOG * recogReadStream ( FILE *fp ); LEPT_DLL extern l_int32 recogWrite ( const char *filename, L_RECOG *recog ); LEPT_DLL extern l_int32 recogWriteStream ( FILE *fp, L_RECOG *recog, const char *filename ); LEPT_DLL extern l_int32 recogWritePixa ( const char *filename, L_RECOG *recog ); LEPT_DLL extern l_int32 recogDecode ( L_RECOG *recog, PIX *pixs, l_int32 nlevels, PIX **ppixdb ); LEPT_DLL extern l_int32 recogMakeDecodingArrays ( L_RECOG *recog, PIX *pixs, l_int32 debug ); LEPT_DLL extern l_int32 recogRunViterbi ( L_RECOG *recog, PIX **ppixdb ); LEPT_DLL extern l_int32 recogCreateDid ( L_RECOG *recog, PIX *pixs ); LEPT_DLL extern l_int32 recogDestroyDid ( L_RECOG *recog ); LEPT_DLL extern l_int32 recogDidExists ( L_RECOG *recog ); LEPT_DLL extern L_RDID * recogGetDid ( L_RECOG *recog ); LEPT_DLL extern l_int32 recogSetChannelParams ( L_RECOG *recog, l_int32 nlevels ); LEPT_DLL extern l_int32 recogaIdentifyMultiple ( L_RECOGA *recoga, PIX *pixs, l_int32 nitems, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdb, l_int32 debugsplit ); LEPT_DLL extern l_int32 recogSplitIntoCharacters ( L_RECOG *recog, PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, NUMA **pnaid, l_int32 debug ); LEPT_DLL extern l_int32 recogCorrelationBestRow ( L_RECOG *recog, PIX *pixs, BOXA **pboxa, NUMA **pnascore, NUMA **pnaindex, SARRAY **psachar, l_int32 debug ); LEPT_DLL extern l_int32 recogCorrelationBestChar ( L_RECOG *recog, PIX *pixs, BOX **pbox, l_float32 *pscore, l_int32 *pindex, char **pcharstr, PIX **ppixdb ); LEPT_DLL extern l_int32 recogaIdentifyPixa ( L_RECOGA *recoga, PIXA *pixa, NUMA *naid, PIX **ppixdb ); LEPT_DLL extern l_int32 recogIdentifyPixa ( L_RECOG *recog, PIXA *pixa, NUMA *naid, PIX **ppixdb ); LEPT_DLL extern l_int32 recogIdentifyPix ( L_RECOG *recog, PIX *pixs, PIX **ppixdb ); LEPT_DLL extern l_int32 recogSkipIdentify ( L_RECOG *recog ); LEPT_DLL extern void rchaDestroy ( L_RCHA **prcha ); LEPT_DLL extern void rchDestroy ( L_RCH **prch ); LEPT_DLL extern l_int32 rchaExtract ( L_RCHA *rcha, NUMA **pnaindex, NUMA **pnascore, SARRAY **psatext, NUMA **pnasample, NUMA **pnaxloc, NUMA **pnayloc, NUMA **pnawidth ); LEPT_DLL extern l_int32 rchExtract ( L_RCH *rch, l_int32 *pindex, l_float32 *pscore, char **ptext, l_int32 *psample, l_int32 *pxloc, l_int32 *pyloc, l_int32 *pwidth ); LEPT_DLL extern PIX * recogProcessToIdentify ( L_RECOG *recog, PIX *pixs, l_int32 pad ); LEPT_DLL extern PIX * recogPreSplittingFilter ( L_RECOG *recog, PIX *pixs, l_float32 maxasp, l_float32 minaf, l_float32 maxaf, l_int32 debug ); LEPT_DLL extern l_int32 recogSplittingFilter ( L_RECOG *recog, PIX *pixs, l_float32 maxasp, l_float32 minaf, l_float32 maxaf, l_int32 *premove, l_int32 debug ); LEPT_DLL extern SARRAY * recogaExtractNumbers ( L_RECOGA *recoga, BOXA *boxas, l_float32 scorethresh, l_int32 spacethresh, BOXAA **pbaa, NUMAA **pnaa ); LEPT_DLL extern l_int32 recogSetTemplateType ( L_RECOG *recog, l_int32 templ_type ); LEPT_DLL extern l_int32 recogSetScaling ( L_RECOG *recog, l_int32 scalew, l_int32 scaleh ); LEPT_DLL extern l_int32 recogTrainLabelled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, l_int32 multflag, l_int32 debug ); LEPT_DLL extern l_int32 recogProcessMultLabelled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIXA **ppixa, l_int32 debug ); LEPT_DLL extern l_int32 recogProcessSingleLabelled ( L_RECOG *recog, PIX *pixs, BOX *box, char *text, PIXA **ppixa ); LEPT_DLL extern l_int32 recogAddSamples ( L_RECOG *recog, PIXA *pixa, l_int32 classindex, l_int32 debug ); LEPT_DLL extern PIX * recogScaleCharacter ( L_RECOG *recog, PIX *pixs ); LEPT_DLL extern l_int32 recogAverageSamples ( L_RECOG *recog, l_int32 debug ); LEPT_DLL extern l_int32 pixaAccumulateSamples ( PIXA *pixa, PTA *pta, PIX **ppixd, l_float32 *px, l_float32 *py ); LEPT_DLL extern l_int32 recogTrainingFinished ( L_RECOG *recog, l_int32 debug ); LEPT_DLL extern l_int32 recogRemoveOutliers ( L_RECOG *recog, l_float32 targetscore, l_float32 minfract, l_int32 debug ); LEPT_DLL extern l_int32 recogaTrainingDone ( L_RECOGA *recoga, l_int32 *pdone ); LEPT_DLL extern l_int32 recogaFinishAveraging ( L_RECOGA *recoga ); LEPT_DLL extern l_int32 recogTrainUnlabelled ( L_RECOG *recog, L_RECOG *recogboot, PIX *pixs, BOX *box, l_int32 singlechar, l_float32 minscore, l_int32 debug ); LEPT_DLL extern l_int32 recogPadTrainingSet ( L_RECOG **precog, l_int32 debug ); LEPT_DLL extern l_int32 recogBestCorrelForPadding ( L_RECOG *recog, L_RECOGA *recoga, NUMA **pnaset, NUMA **pnaindex, NUMA **pnascore, NUMA **pnasum, PIXA **ppixadb ); LEPT_DLL extern l_int32 recogCorrelAverages ( L_RECOG *recog1, L_RECOG *recog2, NUMA **pnaindex, NUMA **pnascore, PIXA **ppixadb ); LEPT_DLL extern l_int32 recogSetPadParams ( L_RECOG *recog, const char *bootdir, const char *bootpattern, const char *bootpath, l_int32 type, l_int32 min_nopad, l_int32 max_afterpad ); LEPT_DLL extern l_int32 recogaShowContent ( FILE *fp, L_RECOGA *recoga, l_int32 display ); LEPT_DLL extern l_int32 recogShowContent ( FILE *fp, L_RECOG *recog, l_int32 display ); LEPT_DLL extern l_int32 recogDebugAverages ( L_RECOG *recog, l_int32 debug ); LEPT_DLL extern l_int32 recogShowAverageTemplates ( L_RECOG *recog ); LEPT_DLL extern l_int32 recogShowMatchesInRange ( L_RECOG *recog, PIXA *pixa, l_float32 minscore, l_float32 maxscore, l_int32 display ); LEPT_DLL extern PIX * recogShowMatch ( L_RECOG *recog, PIX *pix1, PIX *pix2, BOX *box, l_int32 index, l_float32 score ); LEPT_DLL extern l_int32 recogMakeBmf ( L_RECOG *recog, const char *fontdir, l_int32 size ); LEPT_DLL extern l_int32 regTestSetup ( l_int32 argc, char **argv, L_REGPARAMS **prp ); LEPT_DLL extern l_int32 regTestCleanup ( L_REGPARAMS *rp ); LEPT_DLL extern l_int32 regTestCompareValues ( L_REGPARAMS *rp, l_float32 val1, l_float32 val2, l_float32 delta ); LEPT_DLL extern l_int32 regTestCompareStrings ( L_REGPARAMS *rp, l_uint8 *string1, size_t bytes1, l_uint8 *string2, size_t bytes2 ); LEPT_DLL extern l_int32 regTestComparePix ( L_REGPARAMS *rp, PIX *pix1, PIX *pix2 ); LEPT_DLL extern l_int32 regTestCompareSimilarPix ( L_REGPARAMS *rp, PIX *pix1, PIX *pix2, l_int32 mindiff, l_float32 maxfract, l_int32 printstats ); LEPT_DLL extern l_int32 regTestCheckFile ( L_REGPARAMS *rp, const char *localname ); LEPT_DLL extern l_int32 regTestCompareFiles ( L_REGPARAMS *rp, l_int32 index1, l_int32 index2 ); LEPT_DLL extern l_int32 regTestWritePixAndCheck ( L_REGPARAMS *rp, PIX *pix, l_int32 format ); LEPT_DLL extern l_int32 pixRasterop ( PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy ); LEPT_DLL extern l_int32 pixRasteropVip ( PIX *pixd, l_int32 bx, l_int32 bw, l_int32 vshift, l_int32 incolor ); LEPT_DLL extern l_int32 pixRasteropHip ( PIX *pixd, l_int32 by, l_int32 bh, l_int32 hshift, l_int32 incolor ); LEPT_DLL extern PIX * pixTranslate ( PIX *pixd, PIX *pixs, l_int32 hshift, l_int32 vshift, l_int32 incolor ); LEPT_DLL extern l_int32 pixRasteropIP ( PIX *pixd, l_int32 hshift, l_int32 vshift, l_int32 incolor ); LEPT_DLL extern l_int32 pixRasteropFullImage ( PIX *pixd, PIX *pixs, l_int32 op ); LEPT_DLL extern void rasteropVipLow ( l_uint32 *data, l_int32 pixw, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 x, l_int32 w, l_int32 shift ); LEPT_DLL extern void rasteropHipLow ( l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift ); LEPT_DLL extern void shiftDataHorizontalLow ( l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 shift ); LEPT_DLL extern void rasteropUniLow ( l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op ); LEPT_DLL extern void rasteropLow ( l_uint32 *datad, l_int32 dpixw, l_int32 dpixh, l_int32 depth, l_int32 dwpl, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, l_uint32 *datas, l_int32 spixw, l_int32 spixh, l_int32 swpl, l_int32 sx, l_int32 sy ); LEPT_DLL extern PIX * pixRotate ( PIX *pixs, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height ); LEPT_DLL extern PIX * pixEmbedForRotation ( PIX *pixs, l_float32 angle, l_int32 incolor, l_int32 width, l_int32 height ); LEPT_DLL extern PIX * pixRotateBySampling ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateBinaryNice ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateWithAlpha ( PIX *pixs, l_float32 angle, PIX *pixg, l_float32 fract ); LEPT_DLL extern PIX * pixRotateAM ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateAMColor ( PIX *pixs, l_float32 angle, l_uint32 colorval ); LEPT_DLL extern PIX * pixRotateAMGray ( PIX *pixs, l_float32 angle, l_uint8 grayval ); LEPT_DLL extern PIX * pixRotateAMCorner ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateAMColorCorner ( PIX *pixs, l_float32 angle, l_uint32 fillval ); LEPT_DLL extern PIX * pixRotateAMGrayCorner ( PIX *pixs, l_float32 angle, l_uint8 grayval ); LEPT_DLL extern PIX * pixRotateAMColorFast ( PIX *pixs, l_float32 angle, l_uint32 colorval ); LEPT_DLL extern void rotateAMColorLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval ); LEPT_DLL extern void rotateAMGrayLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval ); LEPT_DLL extern void rotateAMColorCornerLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval ); LEPT_DLL extern void rotateAMGrayCornerLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval ); LEPT_DLL extern void rotateAMColorFastLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval ); LEPT_DLL extern PIX * pixRotateOrth ( PIX *pixs, l_int32 quads ); LEPT_DLL extern PIX * pixRotate180 ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixRotate90 ( PIX *pixs, l_int32 direction ); LEPT_DLL extern PIX * pixFlipLR ( PIX *pixd, PIX *pixs ); LEPT_DLL extern PIX * pixFlipTB ( PIX *pixd, PIX *pixs ); LEPT_DLL extern void rotate90Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 d, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 direction ); LEPT_DLL extern void flipLRLow ( l_uint32 *data, l_int32 w, l_int32 h, l_int32 d, l_int32 wpl, l_uint8 *tab, l_uint32 *buffer ); LEPT_DLL extern void flipTBLow ( l_uint32 *data, l_int32 h, l_int32 wpl, l_uint32 *buffer ); LEPT_DLL extern l_uint8 * makeReverseByteTab1 ( void ); LEPT_DLL extern l_uint8 * makeReverseByteTab2 ( void ); LEPT_DLL extern l_uint8 * makeReverseByteTab4 ( void ); LEPT_DLL extern PIX * pixRotateShear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotate2Shear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotate3Shear ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern l_int32 pixRotateShearIP ( PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixRotateShearCenter ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern l_int32 pixRotateShearCenterIP ( PIX *pixs, l_float32 angle, l_int32 incolor ); LEPT_DLL extern PIX * pixStrokeWidthTransform ( PIX *pixs, l_int32 color, l_int32 depth, l_int32 nangles ); LEPT_DLL extern PIX * pixRunlengthTransform ( PIX *pixs, l_int32 color, l_int32 direction, l_int32 depth ); LEPT_DLL extern l_int32 pixFindHorizontalRuns ( PIX *pix, l_int32 y, l_int32 *xstart, l_int32 *xend, l_int32 *pn ); LEPT_DLL extern l_int32 pixFindVerticalRuns ( PIX *pix, l_int32 x, l_int32 *ystart, l_int32 *yend, l_int32 *pn ); LEPT_DLL extern l_int32 runlengthMembershipOnLine ( l_int32 *buffer, l_int32 size, l_int32 depth, l_int32 *start, l_int32 *end, l_int32 n ); LEPT_DLL extern l_int32 * makeMSBitLocTab ( l_int32 bitval ); LEPT_DLL extern SARRAY * sarrayCreate ( l_int32 n ); LEPT_DLL extern SARRAY * sarrayCreateInitialized ( l_int32 n, char *initstr ); LEPT_DLL extern SARRAY * sarrayCreateWordsFromString ( const char *string ); LEPT_DLL extern SARRAY * sarrayCreateLinesFromString ( char *string, l_int32 blankflag ); LEPT_DLL extern void sarrayDestroy ( SARRAY **psa ); LEPT_DLL extern SARRAY * sarrayCopy ( SARRAY *sa ); LEPT_DLL extern SARRAY * sarrayClone ( SARRAY *sa ); LEPT_DLL extern l_int32 sarrayAddString ( SARRAY *sa, char *string, l_int32 copyflag ); LEPT_DLL extern char * sarrayRemoveString ( SARRAY *sa, l_int32 index ); LEPT_DLL extern l_int32 sarrayReplaceString ( SARRAY *sa, l_int32 index, char *newstr, l_int32 copyflag ); LEPT_DLL extern l_int32 sarrayClear ( SARRAY *sa ); LEPT_DLL extern l_int32 sarrayGetCount ( SARRAY *sa ); LEPT_DLL extern char ** sarrayGetArray ( SARRAY *sa, l_int32 *pnalloc, l_int32 *pn ); LEPT_DLL extern char * sarrayGetString ( SARRAY *sa, l_int32 index, l_int32 copyflag ); LEPT_DLL extern l_int32 sarrayGetRefcount ( SARRAY *sa ); LEPT_DLL extern l_int32 sarrayChangeRefcount ( SARRAY *sa, l_int32 delta ); LEPT_DLL extern char * sarrayToString ( SARRAY *sa, l_int32 addnlflag ); LEPT_DLL extern char * sarrayToStringRange ( SARRAY *sa, l_int32 first, l_int32 nstrings, l_int32 addnlflag ); LEPT_DLL extern l_int32 sarrayConcatenate ( SARRAY *sa1, SARRAY *sa2 ); LEPT_DLL extern l_int32 sarrayAppendRange ( SARRAY *sa1, SARRAY *sa2, l_int32 start, l_int32 end ); LEPT_DLL extern l_int32 sarrayPadToSameSize ( SARRAY *sa1, SARRAY *sa2, char *padstring ); LEPT_DLL extern SARRAY * sarrayConvertWordsToLines ( SARRAY *sa, l_int32 linesize ); LEPT_DLL extern l_int32 sarraySplitString ( SARRAY *sa, const char *str, const char *separators ); LEPT_DLL extern SARRAY * sarraySelectBySubstring ( SARRAY *sain, const char *substr ); LEPT_DLL extern SARRAY * sarraySelectByRange ( SARRAY *sain, l_int32 first, l_int32 last ); LEPT_DLL extern l_int32 sarrayParseRange ( SARRAY *sa, l_int32 start, l_int32 *pactualstart, l_int32 *pend, l_int32 *pnewstart, const char *substr, l_int32 loc ); LEPT_DLL extern SARRAY * sarraySort ( SARRAY *saout, SARRAY *sain, l_int32 sortorder ); LEPT_DLL extern SARRAY * sarraySortByIndex ( SARRAY *sain, NUMA *naindex ); LEPT_DLL extern l_int32 stringCompareLexical ( const char *str1, const char *str2 ); LEPT_DLL extern SARRAY * sarrayRead ( const char *filename ); LEPT_DLL extern SARRAY * sarrayReadStream ( FILE *fp ); LEPT_DLL extern l_int32 sarrayWrite ( const char *filename, SARRAY *sa ); LEPT_DLL extern l_int32 sarrayWriteStream ( FILE *fp, SARRAY *sa ); LEPT_DLL extern l_int32 sarrayAppend ( const char *filename, SARRAY *sa ); LEPT_DLL extern SARRAY * getNumberedPathnamesInDirectory ( const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost, l_int32 maxnum ); LEPT_DLL extern SARRAY * getSortedPathnamesInDirectory ( const char *dirname, const char *substr, l_int32 first, l_int32 nfiles ); LEPT_DLL extern SARRAY * convertSortedToNumberedPathnames ( SARRAY *sa, l_int32 numpre, l_int32 numpost, l_int32 maxnum ); LEPT_DLL extern SARRAY * getFilenamesInDirectory ( const char *dirname ); LEPT_DLL extern PIX * pixScale ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixScaleGeneral ( PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 sharpfract, l_int32 sharpwidth ); LEPT_DLL extern PIX * pixScaleLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleColorLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleColor2xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleColor4xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGrayLI ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleGray2xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGray4xLI ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleBySampling ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleBySamplingToSize ( PIX *pixs, l_int32 wd, l_int32 hd ); LEPT_DLL extern PIX * pixScaleByIntSubsampling ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixScaleRGBToGrayFast ( PIX *pixs, l_int32 factor, l_int32 color ); LEPT_DLL extern PIX * pixScaleRGBToBinaryFast ( PIX *pixs, l_int32 factor, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleGrayToBinaryFast ( PIX *pixs, l_int32 factor, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleSmooth ( PIX *pix, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleRGBToGray2 ( PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern PIX * pixScaleAreaMap ( PIX *pix, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleAreaMap2 ( PIX *pix ); LEPT_DLL extern PIX * pixScaleBinary ( PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleToGray ( PIX *pixs, l_float32 scalefactor ); LEPT_DLL extern PIX * pixScaleToGrayFast ( PIX *pixs, l_float32 scalefactor ); LEPT_DLL extern PIX * pixScaleToGray2 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray3 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray4 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray6 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray8 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGray16 ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleToGrayMipmap ( PIX *pixs, l_float32 scalefactor ); LEPT_DLL extern PIX * pixScaleMipmap ( PIX *pixs1, PIX *pixs2, l_float32 scale ); LEPT_DLL extern PIX * pixExpandReplicate ( PIX *pixs, l_int32 factor ); LEPT_DLL extern PIX * pixScaleGray2xLIThresh ( PIX *pixs, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleGray2xLIDither ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGray4xLIThresh ( PIX *pixs, l_int32 thresh ); LEPT_DLL extern PIX * pixScaleGray4xLIDither ( PIX *pixs ); LEPT_DLL extern PIX * pixScaleGrayMinMax ( PIX *pixs, l_int32 xfact, l_int32 yfact, l_int32 type ); LEPT_DLL extern PIX * pixScaleGrayMinMax2 ( PIX *pixs, l_int32 type ); LEPT_DLL extern PIX * pixScaleGrayRankCascade ( PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4 ); LEPT_DLL extern PIX * pixScaleGrayRank2 ( PIX *pixs, l_int32 rank ); LEPT_DLL extern l_int32 pixScaleAndTransferAlpha ( PIX *pixd, PIX *pixs, l_float32 scalex, l_float32 scaley ); LEPT_DLL extern PIX * pixScaleWithAlpha ( PIX *pixs, l_float32 scalex, l_float32 scaley, PIX *pixg, l_float32 fract ); LEPT_DLL extern void scaleColorLILow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleGrayLILow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleColor2xLILow ( l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleColor2xLILineLow ( l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag ); LEPT_DLL extern void scaleGray2xLILow ( l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleGray2xLILineLow ( l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag ); LEPT_DLL extern void scaleGray4xLILow ( l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleGray4xLILineLow ( l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag ); LEPT_DLL extern l_int32 scaleBySamplingLow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls ); LEPT_DLL extern l_int32 scaleSmoothLow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls, l_int32 size ); LEPT_DLL extern void scaleRGBToGray2Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern void scaleColorAreaMapLow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleGrayAreaMapLow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleAreaMapLow2 ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls ); LEPT_DLL extern l_int32 scaleBinaryLow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls ); LEPT_DLL extern void scaleToGray2Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab ); LEPT_DLL extern l_uint32 * makeSumTabSG2 ( void ); LEPT_DLL extern l_uint8 * makeValTabSG2 ( void ); LEPT_DLL extern void scaleToGray3Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab ); LEPT_DLL extern l_uint32 * makeSumTabSG3 ( void ); LEPT_DLL extern l_uint8 * makeValTabSG3 ( void ); LEPT_DLL extern void scaleToGray4Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab ); LEPT_DLL extern l_uint32 * makeSumTabSG4 ( void ); LEPT_DLL extern l_uint8 * makeValTabSG4 ( void ); LEPT_DLL extern void scaleToGray6Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab ); LEPT_DLL extern l_uint8 * makeValTabSG6 ( void ); LEPT_DLL extern void scaleToGray8Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab ); LEPT_DLL extern l_uint8 * makeValTabSG8 ( void ); LEPT_DLL extern void scaleToGray16Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8 ); LEPT_DLL extern l_int32 scaleMipmapLow ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas1, l_int32 wpls1, l_uint32 *datas2, l_int32 wpls2, l_float32 red ); LEPT_DLL extern PIX * pixSeedfillBinary ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern PIX * pixSeedfillBinaryRestricted ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 xmax, l_int32 ymax ); LEPT_DLL extern PIX * pixHolesByFilling ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixFillClosedBorders ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixExtractBorderConnComps ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixRemoveBorderConnComps ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixFillBgFromBorder ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern PIX * pixFillHolesToBoundingRect ( PIX *pixs, l_int32 minsize, l_float32 maxhfract, l_float32 minfgfract ); LEPT_DLL extern l_int32 pixSeedfillGray ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern l_int32 pixSeedfillGrayInv ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern l_int32 pixSeedfillGraySimple ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern l_int32 pixSeedfillGrayInvSimple ( PIX *pixs, PIX *pixm, l_int32 connectivity ); LEPT_DLL extern PIX * pixSeedfillGrayBasin ( PIX *pixb, PIX *pixm, l_int32 delta, l_int32 connectivity ); LEPT_DLL extern PIX * pixDistanceFunction ( PIX *pixs, l_int32 connectivity, l_int32 outdepth, l_int32 boundcond ); LEPT_DLL extern PIX * pixSeedspread ( PIX *pixs, l_int32 connectivity ); LEPT_DLL extern l_int32 pixLocalExtrema ( PIX *pixs, l_int32 maxmin, l_int32 minmax, PIX **ppixmin, PIX **ppixmax ); LEPT_DLL extern l_int32 pixSelectedLocalExtrema ( PIX *pixs, l_int32 mindist, PIX **ppixmin, PIX **ppixmax ); LEPT_DLL extern PIX * pixFindEqualValues ( PIX *pixs1, PIX *pixs2 ); LEPT_DLL extern l_int32 pixSelectMinInConnComp ( PIX *pixs, PIX *pixm, PTA **ppta, NUMA **pnav ); LEPT_DLL extern PIX * pixRemoveSeededComponents ( PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity, l_int32 bordersize ); LEPT_DLL extern void seedfillBinaryLow ( l_uint32 *datas, l_int32 hs, l_int32 wpls, l_uint32 *datam, l_int32 hm, l_int32 wplm, l_int32 connectivity ); LEPT_DLL extern void seedfillGrayLow ( l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity ); LEPT_DLL extern void seedfillGrayInvLow ( l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity ); LEPT_DLL extern void seedfillGrayLowSimple ( l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity ); LEPT_DLL extern void seedfillGrayInvLowSimple ( l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity ); LEPT_DLL extern void distanceFunctionLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 d, l_int32 wpld, l_int32 connectivity ); LEPT_DLL extern void seedspreadLow ( l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datat, l_int32 wplt, l_int32 connectivity ); LEPT_DLL extern SELA * selaCreate ( l_int32 n ); LEPT_DLL extern void selaDestroy ( SELA **psela ); LEPT_DLL extern SEL * selCreate ( l_int32 height, l_int32 width, const char *name ); LEPT_DLL extern void selDestroy ( SEL **psel ); LEPT_DLL extern SEL * selCopy ( SEL *sel ); LEPT_DLL extern SEL * selCreateBrick ( l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, l_int32 type ); LEPT_DLL extern SEL * selCreateComb ( l_int32 factor1, l_int32 factor2, l_int32 direction ); LEPT_DLL extern l_int32 ** create2dIntArray ( l_int32 sy, l_int32 sx ); LEPT_DLL extern l_int32 selaAddSel ( SELA *sela, SEL *sel, const char *selname, l_int32 copyflag ); LEPT_DLL extern l_int32 selaGetCount ( SELA *sela ); LEPT_DLL extern SEL * selaGetSel ( SELA *sela, l_int32 i ); LEPT_DLL extern char * selGetName ( SEL *sel ); LEPT_DLL extern l_int32 selSetName ( SEL *sel, const char *name ); LEPT_DLL extern l_int32 selaFindSelByName ( SELA *sela, const char *name, l_int32 *pindex, SEL **psel ); LEPT_DLL extern l_int32 selGetElement ( SEL *sel, l_int32 row, l_int32 col, l_int32 *ptype ); LEPT_DLL extern l_int32 selSetElement ( SEL *sel, l_int32 row, l_int32 col, l_int32 type ); LEPT_DLL extern l_int32 selGetParameters ( SEL *sel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx ); LEPT_DLL extern l_int32 selSetOrigin ( SEL *sel, l_int32 cy, l_int32 cx ); LEPT_DLL extern l_int32 selGetTypeAtOrigin ( SEL *sel, l_int32 *ptype ); LEPT_DLL extern char * selaGetBrickName ( SELA *sela, l_int32 hsize, l_int32 vsize ); LEPT_DLL extern char * selaGetCombName ( SELA *sela, l_int32 size, l_int32 direction ); LEPT_DLL extern l_int32 getCompositeParameters ( l_int32 size, l_int32 *psize1, l_int32 *psize2, char **pnameh1, char **pnameh2, char **pnamev1, char **pnamev2 ); LEPT_DLL extern SARRAY * selaGetSelnames ( SELA *sela ); LEPT_DLL extern l_int32 selFindMaxTranslations ( SEL *sel, l_int32 *pxp, l_int32 *pyp, l_int32 *pxn, l_int32 *pyn ); LEPT_DLL extern SEL * selRotateOrth ( SEL *sel, l_int32 quads ); LEPT_DLL extern SELA * selaRead ( const char *fname ); LEPT_DLL extern SELA * selaReadStream ( FILE *fp ); LEPT_DLL extern SEL * selRead ( const char *fname ); LEPT_DLL extern SEL * selReadStream ( FILE *fp ); LEPT_DLL extern l_int32 selaWrite ( const char *fname, SELA *sela ); LEPT_DLL extern l_int32 selaWriteStream ( FILE *fp, SELA *sela ); LEPT_DLL extern l_int32 selWrite ( const char *fname, SEL *sel ); LEPT_DLL extern l_int32 selWriteStream ( FILE *fp, SEL *sel ); LEPT_DLL extern SEL * selCreateFromString ( const char *text, l_int32 h, l_int32 w, const char *name ); LEPT_DLL extern char * selPrintToString ( SEL *sel ); LEPT_DLL extern SELA * selaCreateFromFile ( const char *filename ); LEPT_DLL extern SEL * selCreateFromPta ( PTA *pta, l_int32 cy, l_int32 cx, const char *name ); LEPT_DLL extern SEL * selCreateFromPix ( PIX *pix, l_int32 cy, l_int32 cx, const char *name ); LEPT_DLL extern SEL * selReadFromColorImage ( const char *pathname ); LEPT_DLL extern SEL * selCreateFromColorPix ( PIX *pixs, char *selname ); LEPT_DLL extern PIX * selDisplayInPix ( SEL *sel, l_int32 size, l_int32 gthick ); LEPT_DLL extern PIX * selaDisplayInPix ( SELA *sela, l_int32 size, l_int32 gthick, l_int32 spacing, l_int32 ncols ); LEPT_DLL extern SELA * selaAddBasic ( SELA *sela ); LEPT_DLL extern SELA * selaAddHitMiss ( SELA *sela ); LEPT_DLL extern SELA * selaAddDwaLinear ( SELA *sela ); LEPT_DLL extern SELA * selaAddDwaCombs ( SELA *sela ); LEPT_DLL extern SELA * selaAddCrossJunctions ( SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag ); LEPT_DLL extern SELA * selaAddTJunctions ( SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag ); LEPT_DLL extern SEL * pixGenerateSelWithRuns ( PIX *pixs, l_int32 nhlines, l_int32 nvlines, l_int32 distance, l_int32 minlength, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe ); LEPT_DLL extern SEL * pixGenerateSelRandom ( PIX *pixs, l_float32 hitfract, l_float32 missfract, l_int32 distance, l_int32 toppix, l_int32 botpix, l_int32 leftpix, l_int32 rightpix, PIX **ppixe ); LEPT_DLL extern SEL * pixGenerateSelBoundary ( PIX *pixs, l_int32 hitdist, l_int32 missdist, l_int32 hitskip, l_int32 missskip, l_int32 topflag, l_int32 botflag, l_int32 leftflag, l_int32 rightflag, PIX **ppixe ); LEPT_DLL extern NUMA * pixGetRunCentersOnLine ( PIX *pixs, l_int32 x, l_int32 y, l_int32 minlength ); LEPT_DLL extern NUMA * pixGetRunsOnLine ( PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2 ); LEPT_DLL extern PTA * pixSubsampleBoundaryPixels ( PIX *pixs, l_int32 skip ); LEPT_DLL extern l_int32 adjacentOnPixelInRaster ( PIX *pixs, l_int32 x, l_int32 y, l_int32 *pxa, l_int32 *pya ); LEPT_DLL extern PIX * pixDisplayHitMissSel ( PIX *pixs, SEL *sel, l_int32 scalefactor, l_uint32 hitcolor, l_uint32 misscolor ); LEPT_DLL extern PIX * pixHShear ( PIX *pixd, PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShear ( PIX *pixd, PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixHShearCorner ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShearCorner ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixHShearCenter ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShearCenter ( PIX *pixd, PIX *pixs, l_float32 radang, l_int32 incolor ); LEPT_DLL extern l_int32 pixHShearIP ( PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern l_int32 pixVShearIP ( PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixHShearLI ( PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixVShearLI ( PIX *pixs, l_int32 xloc, l_float32 radang, l_int32 incolor ); LEPT_DLL extern PIX * pixDeskew ( PIX *pixs, l_int32 redsearch ); LEPT_DLL extern PIX * pixFindSkewAndDeskew ( PIX *pixs, l_int32 redsearch, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern PIX * pixDeskewGeneral ( PIX *pixs, l_int32 redsweep, l_float32 sweeprange, l_float32 sweepdelta, l_int32 redsearch, l_int32 thresh, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern l_int32 pixFindSkew ( PIX *pixs, l_float32 *pangle, l_float32 *pconf ); LEPT_DLL extern l_int32 pixFindSkewSweep ( PIX *pixs, l_float32 *pangle, l_int32 reduction, l_float32 sweeprange, l_float32 sweepdelta ); LEPT_DLL extern l_int32 pixFindSkewSweepAndSearch ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); LEPT_DLL extern l_int32 pixFindSkewSweepAndSearchScore ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta ); LEPT_DLL extern l_int32 pixFindSkewSweepAndSearchScorePivot ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_int32 pivot ); LEPT_DLL extern l_int32 pixFindSkewOrthogonalRange ( PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 confprior ); LEPT_DLL extern l_int32 pixFindDifferentialSquareSum ( PIX *pixs, l_float32 *psum ); LEPT_DLL extern l_int32 pixFindNormalizedSquareSum ( PIX *pixs, l_float32 *phratio, l_float32 *pvratio, l_float32 *pfract ); LEPT_DLL extern PIX * pixReadStreamSpix ( FILE *fp ); LEPT_DLL extern l_int32 readHeaderSpix ( const char *filename, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 freadHeaderSpix ( FILE *fp, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 sreadHeaderSpix ( const l_uint32 *data, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap ); LEPT_DLL extern l_int32 pixWriteStreamSpix ( FILE *fp, PIX *pix ); LEPT_DLL extern PIX * pixReadMemSpix ( const l_uint8 *data, size_t size ); LEPT_DLL extern l_int32 pixWriteMemSpix ( l_uint8 **pdata, size_t *psize, PIX *pix ); LEPT_DLL extern l_int32 pixSerializeToMemory ( PIX *pixs, l_uint32 **pdata, size_t *pnbytes ); LEPT_DLL extern PIX * pixDeserializeFromMemory ( const l_uint32 *data, size_t nbytes ); LEPT_DLL extern L_STACK * lstackCreate ( l_int32 nalloc ); LEPT_DLL extern void lstackDestroy ( L_STACK **plstack, l_int32 freeflag ); LEPT_DLL extern l_int32 lstackAdd ( L_STACK *lstack, void *item ); LEPT_DLL extern void * lstackRemove ( L_STACK *lstack ); LEPT_DLL extern l_int32 lstackGetCount ( L_STACK *lstack ); LEPT_DLL extern l_int32 lstackPrint ( FILE *fp, L_STACK *lstack ); LEPT_DLL extern l_int32 * sudokuReadFile ( const char *filename ); LEPT_DLL extern l_int32 * sudokuReadString ( const char *str ); LEPT_DLL extern L_SUDOKU * sudokuCreate ( l_int32 *array ); LEPT_DLL extern void sudokuDestroy ( L_SUDOKU **psud ); LEPT_DLL extern l_int32 sudokuSolve ( L_SUDOKU *sud ); LEPT_DLL extern l_int32 sudokuTestUniqueness ( l_int32 *array, l_int32 *punique ); LEPT_DLL extern L_SUDOKU * sudokuGenerate ( l_int32 *array, l_int32 seed, l_int32 minelems, l_int32 maxtries ); LEPT_DLL extern l_int32 sudokuOutput ( L_SUDOKU *sud, l_int32 arraytype ); LEPT_DLL extern PIX * pixAddSingleTextblock ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location, l_int32 *poverflow ); LEPT_DLL extern PIX * pixAddSingleTextline ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location ); LEPT_DLL extern l_int32 pixSetTextblock ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 wtext, l_int32 firstindent, l_int32 *poverflow ); LEPT_DLL extern l_int32 pixSetTextline ( PIX *pixs, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 x0, l_int32 y0, l_int32 *pwidth, l_int32 *poverflow ); LEPT_DLL extern PIXA * pixaAddTextNumber ( PIXA *pixas, L_BMF *bmf, NUMA *na, l_uint32 val, l_int32 location ); LEPT_DLL extern PIXA * pixaAddTextline ( PIXA *pixas, L_BMF *bmf, SARRAY *sa, l_uint32 val, l_int32 location ); LEPT_DLL extern SARRAY * bmfGetLineStrings ( L_BMF *bmf, const char *textstr, l_int32 maxw, l_int32 firstindent, l_int32 *ph ); LEPT_DLL extern NUMA * bmfGetWordWidths ( L_BMF *bmf, const char *textstr, SARRAY *sa ); LEPT_DLL extern l_int32 bmfGetStringWidth ( L_BMF *bmf, const char *textstr, l_int32 *pw ); LEPT_DLL extern SARRAY * splitStringToParagraphs ( char *textstr, l_int32 splitflag ); LEPT_DLL extern PIX * pixReadTiff ( const char *filename, l_int32 n ); LEPT_DLL extern PIX * pixReadStreamTiff ( FILE *fp, l_int32 n ); LEPT_DLL extern l_int32 pixWriteTiff ( const char *filename, PIX *pix, l_int32 comptype, const char *modestring ); LEPT_DLL extern l_int32 pixWriteTiffCustom ( const char *filename, PIX *pix, l_int32 comptype, const char *modestring, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes ); LEPT_DLL extern l_int32 pixWriteStreamTiff ( FILE *fp, PIX *pix, l_int32 comptype ); LEPT_DLL extern PIXA * pixaReadMultipageTiff ( const char *filename ); LEPT_DLL extern l_int32 writeMultipageTiff ( const char *dirin, const char *substr, const char *fileout ); LEPT_DLL extern l_int32 writeMultipageTiffSA ( SARRAY *sa, const char *fileout ); LEPT_DLL extern l_int32 fprintTiffInfo ( FILE *fpout, const char *tiffile ); LEPT_DLL extern l_int32 tiffGetCount ( FILE *fp, l_int32 *pn ); LEPT_DLL extern l_int32 getTiffResolution ( FILE *fp, l_int32 *pxres, l_int32 *pyres ); LEPT_DLL extern l_int32 readHeaderTiff ( const char *filename, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); LEPT_DLL extern l_int32 freadHeaderTiff ( FILE *fp, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); LEPT_DLL extern l_int32 readHeaderMemTiff ( const l_uint8 *cdata, size_t size, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat ); LEPT_DLL extern l_int32 findTiffCompression ( FILE *fp, l_int32 *pcomptype ); LEPT_DLL extern l_int32 extractG4DataFromFile ( const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pminisblack ); LEPT_DLL extern PIX * pixReadMemTiff ( const l_uint8 *cdata, size_t size, l_int32 n ); LEPT_DLL extern l_int32 pixWriteMemTiff ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype ); LEPT_DLL extern l_int32 pixWriteMemTiffCustom ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes ); LEPT_DLL extern l_int32 setMsgSeverity ( l_int32 newsev ); LEPT_DLL extern l_int32 returnErrorInt ( const char *msg, const char *procname, l_int32 ival ); LEPT_DLL extern l_float32 returnErrorFloat ( const char *msg, const char *procname, l_float32 fval ); LEPT_DLL extern void * returnErrorPtr ( const char *msg, const char *procname, void *pval ); LEPT_DLL extern char * stringNew ( const char *src ); LEPT_DLL extern l_int32 stringCopy ( char *dest, const char *src, l_int32 n ); LEPT_DLL extern l_int32 stringReplace ( char **pdest, const char *src ); LEPT_DLL extern l_int32 stringLength ( const char *src, size_t size ); LEPT_DLL extern l_int32 stringCat ( char *dest, size_t size, const char *src ); LEPT_DLL extern char * stringJoin ( const char *src1, const char *src2 ); LEPT_DLL extern char * stringReverse ( const char *src ); LEPT_DLL extern char * strtokSafe ( char *cstr, const char *seps, char **psaveptr ); LEPT_DLL extern l_int32 stringSplitOnToken ( char *cstr, const char *seps, char **phead, char **ptail ); LEPT_DLL extern char * stringRemoveChars ( const char *src, const char *remchars ); LEPT_DLL extern l_int32 stringFindSubstr ( const char *src, const char *sub, l_int32 *ploc ); LEPT_DLL extern char * stringReplaceSubstr ( const char *src, const char *sub1, const char *sub2, l_int32 *pfound, l_int32 *ploc ); LEPT_DLL extern char * stringReplaceEachSubstr ( const char *src, const char *sub1, const char *sub2, l_int32 *pcount ); LEPT_DLL extern L_DNA * arrayFindEachSequence ( const l_uint8 *data, l_int32 datalen, const l_uint8 *sequence, l_int32 seqlen ); LEPT_DLL extern l_int32 arrayFindSequence ( const l_uint8 *data, l_int32 datalen, const l_uint8 *sequence, l_int32 seqlen, l_int32 *poffset, l_int32 *pfound ); LEPT_DLL extern void * reallocNew ( void **pindata, l_int32 oldsize, l_int32 newsize ); LEPT_DLL extern l_uint8 * l_binaryRead ( const char *filename, size_t *pnbytes ); LEPT_DLL extern l_uint8 * l_binaryReadStream ( FILE *fp, size_t *pnbytes ); LEPT_DLL extern l_int32 l_binaryWrite ( const char *filename, const char *operation, void *data, size_t nbytes ); LEPT_DLL extern size_t nbytesInFile ( const char *filename ); LEPT_DLL extern size_t fnbytesInFile ( FILE *fp ); LEPT_DLL extern l_uint8 * l_binaryCopy ( l_uint8 *datas, size_t size ); LEPT_DLL extern l_int32 fileCopy ( const char *srcfile, const char *newfile ); LEPT_DLL extern l_int32 fileConcatenate ( const char *srcfile, const char *destfile ); LEPT_DLL extern l_int32 fileAppendString ( const char *filename, const char *str ); LEPT_DLL extern l_int32 filesAreIdentical ( const char *fname1, const char *fname2, l_int32 *psame ); LEPT_DLL extern l_uint16 convertOnLittleEnd16 ( l_uint16 shortin ); LEPT_DLL extern l_uint16 convertOnBigEnd16 ( l_uint16 shortin ); LEPT_DLL extern l_uint32 convertOnLittleEnd32 ( l_uint32 wordin ); LEPT_DLL extern l_uint32 convertOnBigEnd32 ( l_uint32 wordin ); LEPT_DLL extern FILE * fopenReadStream ( const char *filename ); LEPT_DLL extern FILE * fopenWriteStream ( const char *filename, const char *modestring ); LEPT_DLL extern FILE * lept_fopen ( const char *filename, const char *mode ); LEPT_DLL extern l_int32 lept_fclose ( FILE *fp ); LEPT_DLL extern void * lept_calloc ( size_t nmemb, size_t size ); LEPT_DLL extern void lept_free ( void *ptr ); LEPT_DLL extern l_int32 lept_mkdir ( const char *subdir ); LEPT_DLL extern l_int32 lept_rmdir ( const char *subdir ); LEPT_DLL extern void lept_direxists ( const char *dirname, l_int32 *pexists ); LEPT_DLL extern l_int32 lept_rm ( const char *subdir, const char *filename ); LEPT_DLL extern l_int32 lept_mv ( const char *srcfile, const char *newfile ); LEPT_DLL extern l_int32 lept_cp ( const char *srcfile, const char *newfile ); LEPT_DLL extern l_int32 splitPathAtDirectory ( const char *pathname, char **pdir, char **ptail ); LEPT_DLL extern l_int32 splitPathAtExtension ( const char *pathname, char **pbasename, char **pextension ); LEPT_DLL extern char * pathJoin ( const char *dir, const char *fname ); LEPT_DLL extern char * genPathname ( const char *dir, const char *fname ); LEPT_DLL extern l_int32 makeTempDirname ( char *result, size_t nbytes, const char *subdir ); LEPT_DLL extern char * genTempFilename ( const char *dir, const char *tail, l_int32 usetime, l_int32 usepid ); LEPT_DLL extern l_int32 extractNumberFromFilename ( const char *fname, l_int32 numpre, l_int32 numpost ); LEPT_DLL extern l_int32 fileCorruptByDeletion ( const char *filein, l_float32 loc, l_float32 size, const char *fileout ); LEPT_DLL extern l_int32 genRandomIntegerInRange ( l_int32 range, l_int32 seed, l_int32 *pval ); LEPT_DLL extern l_int32 lept_roundftoi ( l_float32 fval ); LEPT_DLL extern l_uint32 convertBinaryToGrayCode ( l_uint32 val ); LEPT_DLL extern l_uint32 convertGrayCodeToBinary ( l_uint32 val ); LEPT_DLL extern char * getLeptonicaVersion ( ); LEPT_DLL extern void startTimer ( void ); LEPT_DLL extern l_float32 stopTimer ( void ); LEPT_DLL extern L_TIMER startTimerNested ( void ); LEPT_DLL extern l_float32 stopTimerNested ( L_TIMER rusage_start ); LEPT_DLL extern void l_getCurrentTime ( l_int32 *sec, l_int32 *usec ); LEPT_DLL extern char * l_getFormattedDate ( ); LEPT_DLL extern l_int32 pixHtmlViewer ( const char *dirin, const char *dirout, const char *rootname, l_int32 thumbwidth, l_int32 viewwidth, l_int32 copyorig ); LEPT_DLL extern PIX * pixSimpleCaptcha ( PIX *pixs, l_int32 border, l_int32 nterms, l_uint32 seed, l_uint32 color, l_int32 cmapflag ); LEPT_DLL extern PIX * pixRandomHarmonicWarp ( PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval ); LEPT_DLL extern PIX * pixWarpStereoscopic ( PIX *pixs, l_int32 zbend, l_int32 zshiftt, l_int32 zshiftb, l_int32 ybendt, l_int32 ybendb, l_int32 redleft ); LEPT_DLL extern PIX * pixStretchHorizontal ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 operation, l_int32 incolor ); LEPT_DLL extern PIX * pixStretchHorizontalSampled ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor ); LEPT_DLL extern PIX * pixStretchHorizontalLI ( PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor ); LEPT_DLL extern PIX * pixQuadraticVShear ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 operation, l_int32 incolor ); LEPT_DLL extern PIX * pixQuadraticVShearSampled ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor ); LEPT_DLL extern PIX * pixQuadraticVShearLI ( PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor ); LEPT_DLL extern PIX * pixStereoFromPair ( PIX *pix1, PIX *pix2, l_float32 rwt, l_float32 gwt, l_float32 bwt ); LEPT_DLL extern L_WSHED * wshedCreate ( PIX *pixs, PIX *pixm, l_int32 mindepth, l_int32 debugflag ); LEPT_DLL extern void wshedDestroy ( L_WSHED **pwshed ); LEPT_DLL extern l_int32 wshedApply ( L_WSHED *wshed ); LEPT_DLL extern l_int32 wshedBasins ( L_WSHED *wshed, PIXA **ppixa, NUMA **pnalevels ); LEPT_DLL extern PIX * wshedRenderFill ( L_WSHED *wshed ); LEPT_DLL extern PIX * wshedRenderColors ( L_WSHED *wshed ); LEPT_DLL extern PIX * pixReadStreamWebP ( FILE *fp ); LEPT_DLL extern PIX * pixReadMemWebP ( const l_uint8 *filedata, size_t filesize ); LEPT_DLL extern l_int32 readHeaderWebP ( const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp ); LEPT_DLL extern l_int32 pixWriteWebP ( const char *filename, PIX *pixs, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_int32 pixWriteStreamWebP ( FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_int32 pixWriteMemWebP ( l_uint8 **pencdata, size_t *pencsize, PIX *pixs, l_int32 quality, l_int32 lossless ); LEPT_DLL extern l_int32 pixaWriteFiles ( const char *rootname, PIXA *pixa, l_int32 format ); LEPT_DLL extern l_int32 pixWrite ( const char *filename, PIX *pix, l_int32 format ); LEPT_DLL extern l_int32 pixWriteStream ( FILE *fp, PIX *pix, l_int32 format ); LEPT_DLL extern l_int32 pixWriteImpliedFormat ( const char *filename, PIX *pix, l_int32 quality, l_int32 progressive ); LEPT_DLL extern l_int32 pixWriteTempfile ( const char *dir, const char *tail, PIX *pix, l_int32 format, char **pfilename ); LEPT_DLL extern l_int32 pixChooseOutputFormat ( PIX *pix ); LEPT_DLL extern l_int32 getImpliedFileFormat ( const char *filename ); LEPT_DLL extern const char * getFormatExtension ( l_int32 format ); LEPT_DLL extern l_int32 pixWriteMem ( l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 format ); LEPT_DLL extern l_int32 pixDisplay ( PIX *pixs, l_int32 x, l_int32 y ); LEPT_DLL extern l_int32 pixDisplayWithTitle ( PIX *pixs, l_int32 x, l_int32 y, const char *title, l_int32 dispflag ); LEPT_DLL extern l_int32 pixDisplayMultiple ( const char *filepattern ); LEPT_DLL extern l_int32 pixDisplayWrite ( PIX *pixs, l_int32 reduction ); LEPT_DLL extern l_int32 pixDisplayWriteFormat ( PIX *pixs, l_int32 reduction, l_int32 format ); LEPT_DLL extern l_int32 pixSaveTiled ( PIX *pixs, PIXA *pixa, l_float32 scalefactor, l_int32 newrow, l_int32 space, l_int32 dp ); LEPT_DLL extern l_int32 pixSaveTiledOutline ( PIX *pixs, PIXA *pixa, l_float32 scalefactor, l_int32 newrow, l_int32 space, l_int32 linewidth, l_int32 dp ); LEPT_DLL extern l_int32 pixSaveTiledWithText ( PIX *pixs, PIXA *pixa, l_int32 outwidth, l_int32 newrow, l_int32 space, l_int32 linewidth, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location ); LEPT_DLL extern void l_chooseDisplayProg ( l_int32 selection ); LEPT_DLL extern l_uint8 * zlibCompress ( l_uint8 *datain, size_t nin, size_t *pnout ); LEPT_DLL extern l_uint8 * zlibUncompress ( l_uint8 *datain, size_t nin, size_t *pnout ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* NO_PROTOS */ #endif /* LEPTONICA_ALLHEADERS_H */ leptonica-1.70/src/compare.c0000664000175000017500000021522412274231217014077 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * compare.c * * Test for pix equality * l_int32 pixEqual() * l_int32 pixEqualWithAlpha() * l_int32 pixEqualWithCmap() * l_int32 pixUsesCmapColor() * * Binary correlation * l_int32 pixCorrelationBinary() * * Difference of two images of same size * l_int32 pixDisplayDiffBinary() * l_int32 pixCompareBinary() * l_int32 pixCompareGrayOrRGB() * l_int32 pixCompareGray() * l_int32 pixCompareRGB() * l_int32 pixCompareTiled() * * Other measures of the difference of two images of the same size * NUMA *pixCompareRankDifference() * l_int32 pixTestForSimilarity() * l_int32 pixGetDifferenceStats() * NUMA *pixGetDifferenceHistogram() * l_int32 pixGetPerceptualDiff() * l_int32 pixGetPSNR() * * Translated images at the same resolution * l_int32 pixCompareWithTranslation() * l_int32 pixBestCorrelation() */ #include #include #include "allheaders.h" /* Small enough to consider equal to 0.0, for plot output */ static const l_float32 TINY = 0.00001; /*------------------------------------------------------------------* * Test for pix equality * *------------------------------------------------------------------*/ /*! * pixEqual() * * Input: pix1 * pix2 * &same ( 1 if same; 0 if different) * Return: 0 if OK; 1 on error * * Notes: * (1) Equality is defined as having the same pixel values for * each respective image pixel. * (2) This works on two pix of any depth. If one or both pix * have a colormap, the depths can be different and the * two pix can still be equal. * (3) This ignores the alpha component for 32 bpp images. * (4) If both pix have colormaps and the depths are equal, * use the pixEqualWithCmap() function, which does a fast * comparison if the colormaps are identical and a relatively * slow comparison otherwise. * (5) In all other cases, any existing colormaps must first be * removed before doing pixel comparison. After the colormaps * are removed, the resulting two images must have the same depth. * The "lowest common denominator" is RGB, but this is only * chosen when necessary, or when both have colormaps but * different depths. * (6) For images without colormaps that are not 32 bpp, all bits * in the image part of the data array must be identical. */ l_int32 pixEqual(PIX *pix1, PIX *pix2, l_int32 *psame) { return pixEqualWithAlpha(pix1, pix2, 0, psame); } /*! * pixEqualWithAlpha() * * Input: pix1 * pix2 * use_alpha (1 to compare alpha in RGBA; 0 to ignore) * &same ( 1 if same; 0 if different) * Return: 0 if OK; 1 on error * * Notes: * (1) See notes in pixEqual(). * (2) This is more general than pixEqual(), in that for 32 bpp * RGBA images, where spp = 4, you can optionally include * the alpha component in the comparison. */ l_int32 pixEqualWithAlpha(PIX *pix1, PIX *pix2, l_int32 use_alpha, l_int32 *psame) { l_int32 w1, h1, d1, w2, h2, d2, wpl1, wpl2; l_int32 spp1, spp2, i, j, color, mismatch, opaque; l_int32 fullwords, linebits, endbits; l_uint32 endmask, wordmask; l_uint32 *data1, *data2, *line1, *line2; PIX *pixs1, *pixs2, *pixt1, *pixt2, *pixalpha; PIXCMAP *cmap1, *cmap2; PROCNAME("pixEqualWithAlpha"); if (!psame) return ERROR_INT("psame not defined", procName, 1); *psame = 0; /* init to not equal */ if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); pixGetDimensions(pix1, &w1, &h1, &d1); pixGetDimensions(pix2, &w2, &h2, &d2); if (w1 != w2 || h1 != h2) { L_INFO("pix sizes differ\n", procName); return 0; } /* Suppose the use_alpha flag is true. * If only one of two 32 bpp images has spp == 4, we call that * a "mismatch" of the alpha component. In the case of a mismatch, * if the 4 bpp pix does not have all alpha components opaque (255), * the images are not-equal. However if they are all opaque, * this image is equivalent to spp == 3, so we allow the * comparison to go forward, testing only for the RGB equality. */ spp1 = pixGetSpp(pix1); spp2 = pixGetSpp(pix2); mismatch = 0; if (use_alpha && d1 == 32 && d2 == 32) { mismatch = ((spp1 == 4 && spp2 != 4) || (spp1 != 4 && spp2 == 4)); if (mismatch) { pixalpha = (spp1 == 4) ? pix1 : pix2; pixAlphaIsOpaque(pixalpha, &opaque); if (!opaque) { L_INFO("just one pix has a non-opaque alpha layer\n", procName); return 0; } } } cmap1 = pixGetColormap(pix1); cmap2 = pixGetColormap(pix2); if (!cmap1 && !cmap2 && (d1 != d2) && (d1 == 32 || d2 == 32)) { L_INFO("no colormaps, pix depths unequal, and one of them is RGB\n", procName); return 0; } if (cmap1 && cmap2 && (d1 == d2)) /* use special function */ return pixEqualWithCmap(pix1, pix2, psame); /* Must remove colormaps if they exist, and in the process * end up with the resulting images having the same depth. */ if (cmap1 && !cmap2) { pixUsesCmapColor(pix1, &color); if (color && d2 <= 8) /* can't be equal */ return 0; if (d2 < 8) pixs2 = pixConvertTo8(pix2, FALSE); else pixs2 = pixClone(pix2); if (d2 <= 8) pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_GRAYSCALE); else pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); } else if (!cmap1 && cmap2) { pixUsesCmapColor(pix2, &color); if (color && d1 <= 8) /* can't be equal */ return 0; if (d1 < 8) pixs1 = pixConvertTo8(pix1, FALSE); else pixs1 = pixClone(pix1); if (d1 <= 8) pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_GRAYSCALE); else pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); } else if (cmap1 && cmap2) { /* depths not equal; use rgb */ pixs1 = pixRemoveColormap(pix1, REMOVE_CMAP_TO_FULL_COLOR); pixs2 = pixRemoveColormap(pix2, REMOVE_CMAP_TO_FULL_COLOR); } else { /* no colormaps */ pixs1 = pixClone(pix1); pixs2 = pixClone(pix2); } /* OK, we have no colormaps, but the depths may still be different */ d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (d1 != d2) { if (d1 == 16 || d2 == 16) { L_INFO("one pix is 16 bpp\n", procName); pixDestroy(&pixs1); pixDestroy(&pixs2); return 0; } pixt1 = pixConvertLossless(pixs1, 8); pixt2 = pixConvertLossless(pixs2, 8); if (!pixt1 || !pixt2) { L_INFO("failure to convert to 8 bpp\n", procName); pixDestroy(&pixs1); pixDestroy(&pixs2); pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } } else { pixt1 = pixClone(pixs1); pixt2 = pixClone(pixs2); } pixDestroy(&pixs1); pixDestroy(&pixs2); /* No colormaps, equal depths; do pixel comparisons */ d1 = pixGetDepth(pixt1); d2 = pixGetDepth(pixt2); wpl1 = pixGetWpl(pixt1); wpl2 = pixGetWpl(pixt2); data1 = pixGetData(pixt1); data2 = pixGetData(pixt2); if (d1 == 32) { /* test either RGB or RGBA pixels */ if (use_alpha && !mismatch) wordmask = (spp1 == 3) ? 0xffffff00 : 0xffffffff; else wordmask = 0xffffff00; for (i = 0; i < h1; i++) { line1 = data1 + wpl1 * i; line2 = data2 + wpl2 * i; for (j = 0; j < wpl1; j++) { if ((*line1 ^ *line2) & wordmask) { pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } line1++; line2++; } } } else { /* all bits count */ linebits = d1 * w1; fullwords = linebits / 32; endbits = linebits & 31; endmask = 0xffffffff << (32 - endbits); for (i = 0; i < h1; i++) { line1 = data1 + wpl1 * i; line2 = data2 + wpl2 * i; for (j = 0; j < fullwords; j++) { if (*line1 ^ *line2) { pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } line1++; line2++; } if (endbits) { if ((*line1 ^ *line2) & endmask) { pixDestroy(&pixt1); pixDestroy(&pixt2); return 0; } } } } pixDestroy(&pixt1); pixDestroy(&pixt2); *psame = 1; return 0; } /*! * pixEqualWithCmap() * * Input: pix1 * pix2 * &same * Return: 0 if OK, 1 on error * * Notes: * (1) This returns same = TRUE if the images have identical content. * (2) Both pix must have a colormap, and be of equal size and depth. * If these conditions are not satisfied, it is not an error; * the returned result is same = FALSE. * (3) We then check whether the colormaps are the same; if so, * the comparison proceeds 32 bits at a time. * (4) If the colormaps are different, the comparison is done by * slow brute force. */ l_int32 pixEqualWithCmap(PIX *pix1, PIX *pix2, l_int32 *psame) { l_int32 d, w, h, wpl1, wpl2, i, j, linebits, fullwords, endbits; l_int32 nc1, nc2, samecmaps; l_int32 rval1, rval2, gval1, gval2, bval1, bval2; l_uint32 endmask, val1, val2; l_uint32 *data1, *data2, *line1, *line2; PIXCMAP *cmap1, *cmap2; PROCNAME("pixEqualWithCmap"); if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); if (pixSizesEqual(pix1, pix2) == 0) return 0; cmap1 = pixGetColormap(pix1); cmap2 = pixGetColormap(pix2); if (!cmap1 || !cmap2) { L_INFO("both images don't have colormap\n", procName); return 0; } d = pixGetDepth(pix1); if (d != 1 && d != 2 && d != 4 && d != 8) { L_INFO("pix depth not in {1, 2, 4, 8}\n", procName); return 0; } nc1 = pixcmapGetCount(cmap1); nc2 = pixcmapGetCount(cmap2); samecmaps = TRUE; if (nc1 != nc2) { L_INFO("colormap sizes are different\n", procName); samecmaps = FALSE; } /* Check if colormaps are identical */ if (samecmaps == TRUE) { for (i = 0; i < nc1; i++) { pixcmapGetColor(cmap1, i, &rval1, &gval1, &bval1); pixcmapGetColor(cmap2, i, &rval2, &gval2, &bval2); if (rval1 != rval2 || gval1 != gval2 || bval1 != bval2) { samecmaps = FALSE; break; } } } h = pixGetHeight(pix1); w = pixGetWidth(pix1); if (samecmaps == TRUE) { /* colormaps are identical; compare by words */ linebits = d * w; wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); data1 = pixGetData(pix1); data2 = pixGetData(pix2); fullwords = linebits / 32; endbits = linebits & 31; endmask = 0xffffffff << (32 - endbits); for (i = 0; i < h; i++) { line1 = data1 + wpl1 * i; line2 = data2 + wpl2 * i; for (j = 0; j < fullwords; j++) { if (*line1 ^ *line2) return 0; line1++; line2++; } if (endbits) { if ((*line1 ^ *line2) & endmask) return 0; } } *psame = 1; return 0; } /* Colormaps aren't identical; compare pixel by pixel */ for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pix1, j, i, &val1); pixGetPixel(pix2, j, i, &val2); pixcmapGetColor(cmap1, val1, &rval1, &gval1, &bval1); pixcmapGetColor(cmap2, val2, &rval2, &gval2, &bval2); if (rval1 != rval2 || gval1 != gval2 || bval1 != bval2) return 0; } } *psame = 1; return 0; } /*! * pixUsesCmapColor() * * Input: pixs * &color () * Return: 0 if OK, 1 on error * * Notes: * (1) This returns color = TRUE if three things are obtained: * (a) the pix has a colormap * (b) the colormap has at least one color entry * (c) a color entry is actually used * (2) It is used in pixEqual() for comparing two images, in a * situation where it is required to know if the colormap * has color entries that are actually used in the image. */ l_int32 pixUsesCmapColor(PIX *pixs, l_int32 *pcolor) { l_int32 n, i, rval, gval, bval, numpix; NUMA *na; PIXCMAP *cmap; PROCNAME("pixUsesCmapColor"); if (!pcolor) return ERROR_INT("&color not defined", procName, 1); *pcolor = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return 0; pixcmapHasColor(cmap, pcolor); if (*pcolor == 0) /* no color */ return 0; /* The cmap has color entries. Are they used? */ na = pixGetGrayHistogram(pixs, 1); n = pixcmapGetCount(cmap); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); numaGetIValue(na, i, &numpix); if ((rval != gval || rval != bval) && numpix) { /* color found! */ *pcolor = 1; break; } } numaDestroy(&na); return 0; } /*------------------------------------------------------------------* * Binary correlation * *------------------------------------------------------------------*/ /*! * pixCorrelationBinary() * * Input: pix1 (1 bpp) * pix2 (1 bpp) * &val ( correlation) * Return: 0 if OK; 1 on error * * Notes: * (1) The correlation is a number between 0.0 and 1.0, * based on foreground similarity: * (|1 AND 2|)**2 * correlation = -------------- * |1| * |2| * where |x| is the count of foreground pixels in image x. * If the images are identical, this is 1.0. * If they have no fg pixels in common, this is 0.0. * If one or both images have no fg pixels, the correlation is 0.0. * (2) Typically the two images are of equal size, but this * is not enforced. Instead, the UL corners are aligned. */ l_int32 pixCorrelationBinary(PIX *pix1, PIX *pix2, l_float32 *pval) { l_int32 count1, count2, countn; l_int32 *tab8; PIX *pixn; PROCNAME("pixCorrelationBinary"); if (!pval) return ERROR_INT("&pval not defined", procName, 1); *pval = 0.0; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); tab8 = makePixelSumTab8(); pixCountPixels(pix1, &count1, tab8); pixCountPixels(pix2, &count2, tab8); pixn = pixAnd(NULL, pix1, pix2); pixCountPixels(pixn, &countn, tab8); *pval = (l_float32)(countn * countn) / (l_float32)(count1 * count2); FREE(tab8); return 0; } /*------------------------------------------------------------------* * Difference of two images * *------------------------------------------------------------------*/ /*! * pixDisplayDiffBinary() * * Input: pix1 (1 bpp) * pix2 (1 bpp) * Return: pixd (4 bpp cmapped), or null on error * * Notes: * (1) This gives a color representation of the difference between * pix1 and pix2. The color difference depends on the order. * The pixels in pixd have 4 colors: * * unchanged: black (on), white (off) * * on in pix1, off in pix2: red * * on in pix2, off in pix1: green * (2) This aligns the UL corners of pix1 and pix2, and crops * to the overlapping pixels. */ PIX * pixDisplayDiffBinary(PIX *pix1, PIX *pix2) { l_int32 w1, h1, d1, w2, h2, d2, minw, minh; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixDisplayDiffBinary"); if (!pix1 || !pix2) return (PIX *)ERROR_PTR("pix1, pix2 not both defined", procName, NULL); pixGetDimensions(pix1, &w1, &h1, &d1); pixGetDimensions(pix2, &w2, &h2, &d2); if (d1 != 1 || d2 != 1) return (PIX *)ERROR_PTR("pix1 and pix2 not 1 bpp", procName, NULL); minw = L_MIN(w1, w2); minh = L_MIN(h1, h2); pixd = pixCreate(minw, minh, 4); cmap = pixcmapCreate(4); pixcmapAddColor(cmap, 255, 255, 255); /* initialized to white */ pixcmapAddColor(cmap, 0, 0, 0); pixcmapAddColor(cmap, 255, 0, 0); pixcmapAddColor(cmap, 0, 255, 0); pixSetColormap(pixd, cmap); pixt = pixAnd(NULL, pix1, pix2); pixPaintThroughMask(pixd, pixt, 0, 0, 0x0); /* black */ pixSubtract(pixt, pix1, pix2); pixPaintThroughMask(pixd, pixt, 0, 0, 0xff000000); /* red */ pixSubtract(pixt, pix2, pix1); pixPaintThroughMask(pixd, pixt, 0, 0, 0x00ff0000); /* green */ pixDestroy(&pixt); return pixd; } /*! * pixCompareBinary() * * Input: pix1 (1 bpp) * pix2 (1 bpp) * comptype (L_COMPARE_XOR, L_COMPARE_SUBTRACT) * &fract ( fraction of pixels that are different) * &pixdiff ( pix of difference) * Return: 0 if OK; 1 on error * * Notes: * (1) The two images are aligned at the UL corner, and do not * need to be the same size. * (2) If using L_COMPARE_SUBTRACT, pix2 is subtracted from pix1. * (3) The total number of pixels is determined by pix1. */ l_int32 pixCompareBinary(PIX *pix1, PIX *pix2, l_int32 comptype, l_float32 *pfract, PIX **ppixdiff) { l_int32 w, h, count; PIX *pixt; PROCNAME("pixCompareBinary"); if (ppixdiff) *ppixdiff = NULL; if (!pfract) return ERROR_INT("&pfract not defined", procName, 1); *pfract = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not defined or not 1 bpp", procName, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not defined or not 1 bpp", procName, 1); if (comptype != L_COMPARE_XOR && comptype != L_COMPARE_SUBTRACT) return ERROR_INT("invalid comptype", procName, 1); if (comptype == L_COMPARE_XOR) pixt = pixXor(NULL, pix1, pix2); else /* comptype == L_COMPARE_SUBTRACT) */ pixt = pixSubtract(NULL, pix1, pix2); pixCountPixels(pixt, &count, NULL); pixGetDimensions(pix1, &w, &h, NULL); *pfract = (l_float32)(count) / (l_float32)(w * h); if (ppixdiff) *ppixdiff = pixt; else pixDestroy(&pixt); return 0; } /*! * pixCompareGrayOrRGB() * * Input: pix1 (8 or 16 bpp gray, 32 bpp rgb, or colormapped) * pix2 (8 or 16 bpp gray, 32 bpp rgb, or colormapped) * comptype (L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF) * plottype (gplot plot output type, or 0 for no plot) * &same ( 1 if pixel values are identical) * &diff ( average difference) * &rmsdiff ( rms of difference) * &pixdiff ( pix of difference) * Return: 0 if OK; 1 on error * * Notes: * (1) The two images are aligned at the UL corner, and do not * need to be the same size. If they are not the same size, * the comparison will be made over overlapping pixels. * (2) If there is a colormap, it is removed and the result * is either gray or RGB depending on the colormap. * (3) If RGB, each component is compared separately. * (4) If type is L_COMPARE_ABS_DIFF, pix2 is subtracted from pix1 * and the absolute value is taken. * (5) If type is L_COMPARE_SUBTRACT, pix2 is subtracted from pix1 * and the result is clipped to 0. * (6) The plot output types are specified in gplot.h. * Use 0 if no difference plot is to be made. * (7) If the images are pixelwise identical, no difference * plot is made, even if requested. The result (TRUE or FALSE) * is optionally returned in the parameter 'same'. * (8) The average difference (either subtracting or absolute value) * is optionally returned in the parameter 'diff'. * (9) The RMS difference is optionally returned in the * parameter 'rmsdiff'. For RGB, we return the average of * the RMS differences for each of the components. */ l_int32 pixCompareGrayOrRGB(PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff) { l_int32 retval, d; PIX *pixt1, *pixt2; PROCNAME("pixCompareGrayOrRGB"); if (ppixdiff) *ppixdiff = NULL; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); if (pixGetDepth(pix1) < 8 && !pixGetColormap(pix1)) return ERROR_INT("pix1 depth < 8 bpp and not cmapped", procName, 1); if (pixGetDepth(pix2) < 8 && !pixGetColormap(pix2)) return ERROR_INT("pix2 depth < 8 bpp and not cmapped", procName, 1); if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) return ERROR_INT("invalid comptype", procName, 1); if (plottype > NUM_GPLOT_OUTPUTS) return ERROR_INT("invalid plottype", procName, 1); pixt1 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); pixt2 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d != pixGetDepth(pixt2)) { pixDestroy(&pixt1); pixDestroy(&pixt2); return ERROR_INT("intrinsic depths are not equal", procName, 1); } if (d == 8 || d == 16) retval = pixCompareGray(pixt1, pixt2, comptype, plottype, psame, pdiff, prmsdiff, ppixdiff); else /* d == 32 */ retval = pixCompareRGB(pixt1, pixt2, comptype, plottype, psame, pdiff, prmsdiff, ppixdiff); pixDestroy(&pixt1); pixDestroy(&pixt2); return retval; } /*! * pixCompareGray() * * Input: pix1 (8 or 16 bpp, not cmapped) * pix2 (8 or 16 bpp, not cmapped) * comptype (L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF) * plottype (gplot plot output type, or 0 for no plot) * &same ( 1 if pixel values are identical) * &diff ( average difference) * &rmsdiff ( rms of difference) * &pixdiff ( pix of difference) * Return: 0 if OK; 1 on error * * Notes: * (1) See pixCompareGrayOrRGB() for details. * (2) Use pixCompareGrayOrRGB() if the input pix are colormapped. */ l_int32 pixCompareGray(PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff) { char buf[64]; static l_int32 index = 0; l_int32 d1, d2, first, last; GPLOT *gplot; NUMA *na, *nac; PIX *pixt; PROCNAME("pixCompareGray"); if (psame) *psame = 0; if (pdiff) *pdiff = 0.0; if (prmsdiff) *prmsdiff = 0.0; if (ppixdiff) *ppixdiff = NULL; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); d1 = pixGetDepth(pix1); d2 = pixGetDepth(pix2); if ((d1 != d2) || (d1 != 8 && d1 != 16)) return ERROR_INT("depths unequal or not 8 or 16 bpp", procName, 1); if (pixGetColormap(pix1) || pixGetColormap(pix2)) return ERROR_INT("pix1 and/or pix2 are colormapped", procName, 1); if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) return ERROR_INT("invalid comptype", procName, 1); if (plottype > NUM_GPLOT_OUTPUTS) return ERROR_INT("invalid plottype", procName, 1); if (comptype == L_COMPARE_SUBTRACT) pixt = pixSubtractGray(NULL, pix1, pix2); else /* comptype == L_COMPARE_ABS_DIFF) */ pixt = pixAbsDifference(pix1, pix2); if (psame) pixZero(pixt, psame); if (pdiff) pixGetAverageMasked(pixt, NULL, 0, 0, 1, L_MEAN_ABSVAL, pdiff); if (plottype) { na = pixGetGrayHistogram(pixt, 1); numaGetNonzeroRange(na, TINY, &first, &last); nac = numaClipToInterval(na, 0, last); snprintf(buf, sizeof(buf), "/tmp/grayroot%d", index++); gplot = gplotCreate(buf, plottype, "Pixel Difference Histogram", "diff val", "number of pixels"); gplotAddPlot(gplot, NULL, nac, GPLOT_LINES, "gray"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na); numaDestroy(&nac); } if (ppixdiff) *ppixdiff = pixCopy(NULL, pixt); if (prmsdiff) { if (comptype == L_COMPARE_SUBTRACT) { /* wrong type for rms diff */ pixDestroy(&pixt); pixt = pixAbsDifference(pix1, pix2); } pixGetAverageMasked(pixt, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, prmsdiff); } pixDestroy(&pixt); return 0; } /*! * pixCompareRGB() * * Input: pix1 (32 bpp rgb) * pix2 (32 bpp rgb) * comptype (L_COMPARE_SUBTRACT, L_COMPARE_ABS_DIFF) * plottype (gplot plot output type, or 0 for no plot) * &same ( 1 if pixel values are identical) * &diff ( average difference) * &rmsdiff ( rms of difference) * &pixdiff ( pix of difference) * Return: 0 if OK; 1 on error * * Notes: * (1) See pixCompareGrayOrRGB() for details. */ l_int32 pixCompareRGB(PIX *pix1, PIX *pix2, l_int32 comptype, l_int32 plottype, l_int32 *psame, l_float32 *pdiff, l_float32 *prmsdiff, PIX **ppixdiff) { char buf[64]; static l_int32 index = 0; l_int32 rsame, gsame, bsame, first, rlast, glast, blast, last; l_float32 rdiff, gdiff, bdiff; GPLOT *gplot; NUMA *nar, *nag, *nab, *narc, *nagc, *nabc; PIX *pixr1, *pixr2, *pixg1, *pixg2, *pixb1, *pixb2; PIX *pixr, *pixg, *pixb; PROCNAME("pixCompareRGB"); if (ppixdiff) *ppixdiff = NULL; if (!pix1 || pixGetDepth(pix1) != 32) return ERROR_INT("pix1 not defined or not 32 bpp", procName, 1); if (!pix2 || pixGetDepth(pix2) != 32) return ERROR_INT("pix2 not defined or not ew bpp", procName, 1); if (comptype != L_COMPARE_SUBTRACT && comptype != L_COMPARE_ABS_DIFF) return ERROR_INT("invalid comptype", procName, 1); if (plottype > NUM_GPLOT_OUTPUTS) return ERROR_INT("invalid plottype", procName, 1); pixr1 = pixGetRGBComponent(pix1, COLOR_RED); pixr2 = pixGetRGBComponent(pix2, COLOR_RED); pixg1 = pixGetRGBComponent(pix1, COLOR_GREEN); pixg2 = pixGetRGBComponent(pix2, COLOR_GREEN); pixb1 = pixGetRGBComponent(pix1, COLOR_BLUE); pixb2 = pixGetRGBComponent(pix2, COLOR_BLUE); if (comptype == L_COMPARE_SUBTRACT) { pixr = pixSubtractGray(NULL, pixr1, pixr2); pixg = pixSubtractGray(NULL, pixg1, pixg2); pixb = pixSubtractGray(NULL, pixb1, pixb2); } else { /* comptype == L_COMPARE_ABS_DIFF) */ pixr = pixAbsDifference(pixr1, pixr2); pixg = pixAbsDifference(pixg1, pixg2); pixb = pixAbsDifference(pixb1, pixb2); } if (psame) { pixZero(pixr, &rsame); pixZero(pixg, &gsame); pixZero(pixb, &bsame); if (!rsame || !gsame || !bsame) *psame = 0; else *psame = 1; } if (pdiff) { pixGetAverageMasked(pixr, NULL, 0, 0, 1, L_MEAN_ABSVAL, &rdiff); pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_MEAN_ABSVAL, &gdiff); pixGetAverageMasked(pixb, NULL, 0, 0, 1, L_MEAN_ABSVAL, &bdiff); *pdiff = (rdiff + gdiff + bdiff) / 3.0; } if (plottype) { nar = pixGetGrayHistogram(pixr, 1); nag = pixGetGrayHistogram(pixg, 1); nab = pixGetGrayHistogram(pixb, 1); numaGetNonzeroRange(nar, TINY, &first, &rlast); numaGetNonzeroRange(nag, TINY, &first, &glast); numaGetNonzeroRange(nab, TINY, &first, &blast); last = L_MAX(rlast, glast); last = L_MAX(last, blast); narc = numaClipToInterval(nar, 0, last); nagc = numaClipToInterval(nag, 0, last); nabc = numaClipToInterval(nab, 0, last); snprintf(buf, sizeof(buf), "/tmp/rgbroot%d", index++); gplot = gplotCreate(buf, plottype, "Pixel Difference Histogram", "diff val", "number of pixels"); gplotAddPlot(gplot, NULL, narc, GPLOT_LINES, "red"); gplotAddPlot(gplot, NULL, nagc, GPLOT_LINES, "green"); gplotAddPlot(gplot, NULL, nabc, GPLOT_LINES, "blue"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); numaDestroy(&narc); numaDestroy(&nagc); numaDestroy(&nabc); } if (ppixdiff) *ppixdiff = pixCreateRGBImage(pixr, pixg, pixb); if (prmsdiff) { if (comptype == L_COMPARE_SUBTRACT) { pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); pixr = pixAbsDifference(pixr1, pixr2); pixg = pixAbsDifference(pixg1, pixg2); pixb = pixAbsDifference(pixb1, pixb2); } pixGetAverageMasked(pixr, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &rdiff); pixGetAverageMasked(pixg, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &gdiff); pixGetAverageMasked(pixb, NULL, 0, 0, 1, L_ROOT_MEAN_SQUARE, &bdiff); *prmsdiff = (rdiff + gdiff + bdiff) / 3.0; } pixDestroy(&pixr1); pixDestroy(&pixr2); pixDestroy(&pixg1); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); return 0; } /*! * pixCompareTiled() * * Input: pix1 (8 bpp or 32 bpp rgb) * pix2 (8 bpp 32 bpp rgb) * sx, sy (tile size; must be > 1) * type (L_MEAN_ABSVAL or L_ROOT_MEAN_SQUARE) * &pixdiff ( pix of difference) * Return: 0 if OK; 1 on error * * Notes: * (1) With L_MEAN_ABSVAL, we compute for each tile the * average abs value of the pixel component difference between * the two (aligned) images. With L_ROOT_MEAN_SQUARE, we * compute instead the rms difference over all components. * (2) The two input pix must be the same depth. Comparison is made * using UL corner alignment. * (3) For 32 bpp, the distance between corresponding tiles * is found by averaging the measured difference over all three * components of each pixel in the tile. * (4) The result, pixdiff, contains one pixel for each source tile. */ l_int32 pixCompareTiled(PIX *pix1, PIX *pix2, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixdiff) { l_int32 d1, d2, w, h; PIX *pixt, *pixr, *pixg, *pixb; PIX *pixrdiff, *pixgdiff, *pixbdiff; PIXACC *pixacc; PROCNAME("pixCompareTiled"); if (!ppixdiff) return ERROR_INT("&pixdiff not defined", procName, 1); *ppixdiff = NULL; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); d1 = pixGetDepth(pix1); d2 = pixGetDepth(pix2); if (d1 != d2) return ERROR_INT("depths not equal", procName, 1); if (d1 != 8 && d1 != 32) return ERROR_INT("pix1 not 8 or 32 bpp", procName, 1); if (d2 != 8 && d2 != 32) return ERROR_INT("pix2 not 8 or 32 bpp", procName, 1); if (sx < 2 || sy < 2) return ERROR_INT("sx and sy not both > 1", procName, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE) return ERROR_INT("invalid type", procName, 1); pixt = pixAbsDifference(pix1, pix2); if (d1 == 8) { *ppixdiff = pixGetAverageTiled(pixt, sx, sy, type); } else { /* d1 == 32 */ pixr = pixGetRGBComponent(pixt, COLOR_RED); pixg = pixGetRGBComponent(pixt, COLOR_GREEN); pixb = pixGetRGBComponent(pixt, COLOR_BLUE); pixrdiff = pixGetAverageTiled(pixr, sx, sy, type); pixgdiff = pixGetAverageTiled(pixg, sx, sy, type); pixbdiff = pixGetAverageTiled(pixb, sx, sy, type); pixGetDimensions(pixrdiff, &w, &h, NULL); pixacc = pixaccCreate(w, h, 0); pixaccAdd(pixacc, pixrdiff); pixaccAdd(pixacc, pixgdiff); pixaccAdd(pixacc, pixbdiff); pixaccMultConst(pixacc, 1. / 3.); *ppixdiff = pixaccFinal(pixacc, 8); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixrdiff); pixDestroy(&pixgdiff); pixDestroy(&pixbdiff); pixaccDestroy(&pixacc); } pixDestroy(&pixt); return 0; } /*------------------------------------------------------------------* * Other measures of the difference of two images * *------------------------------------------------------------------*/ /*! * pixCompareRankDifference() * * Input: pix1 (8 bpp gray or 32 bpp rgb, or colormapped) * pix2 (8 bpp gray or 32 bpp rgb, or colormapped) * factor (subsampling factor; use 0 or 1 for no subsampling) * Return: narank (numa of rank difference), or null on error * * Notes: * (1) This answers the question: if the pixel values in each * component are compared by absolute difference, for * any value of difference, what is the fraction of * pixel pairs that have a difference of this magnitude * or greater. For a difference of 0, the fraction is 1.0. * In this sense, it is a mapping from pixel difference to * rank order of difference. * (2) The two images are aligned at the UL corner, and do not * need to be the same size. If they are not the same size, * the comparison will be made over overlapping pixels. * (3) If there is a colormap, it is removed and the result * is either gray or RGB depending on the colormap. * (4) If RGB, pixel differences for each component are aggregated * into a single histogram. */ NUMA * pixCompareRankDifference(PIX *pix1, PIX *pix2, l_int32 factor) { l_int32 i; l_float32 *array1, *array2; NUMA *nah, *nan, *nad; PROCNAME("pixCompareRankDifference"); if (!pix1) return (NUMA *)ERROR_PTR("pix1 not defined", procName, NULL); if (!pix2) return (NUMA *)ERROR_PTR("pix2 not defined", procName, NULL); if ((nah = pixGetDifferenceHistogram(pix1, pix2, factor)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); nan = numaNormalizeHistogram(nah, 1.0); array1 = numaGetFArray(nan, L_NOCOPY); nad = numaCreate(256); numaSetCount(nad, 256); /* all initialized to 0.0 */ array2 = numaGetFArray(nad, L_NOCOPY); /* Do rank accumulation on normalized histo of diffs */ array2[0] = 1.0; for (i = 1; i < 256; i++) array2[i] = array2[i - 1] - array1[i - 1]; numaDestroy(&nah); numaDestroy(&nan); return nad; } /*! * pixTestForSimilarity() * * Input: pix1 (8 bpp gray or 32 bpp rgb, or colormapped) * pix2 (8 bpp gray or 32 bpp rgb, or colormapped) * factor (subsampling factor; use 0 or 1 for no subsampling) * mindiff (minimum pixel difference to be counted; > 0) * maxfract (maximum fraction of pixels allowed to have * diff greater than or equal to mindiff) * maxave (maximum average difference of pixels allowed for * pixels with diff greater than or equal to mindiff, * after subtracting mindiff) * &similar ( 1 if similar, 0 otherwise) * printstats (use 1 to print normalized histogram to stderr) * Return: 0 if OK, 1 on error * * Notes: * (1) This takes 2 pix that are the same size and determines using * 3 input parameters if they are "similar". The first parameter * @mindiff establishes a criterion of pixel-to-pixel similarity: * two pixels are not similar if their difference in value is * at least mindiff. Then @maxfract and @maxave are thresholds * on the number and distribution of dissimilar pixels * allowed for the two pix to be similar. If the pix are * to be similar, neither threshold can be exceeded. * (2) In setting the @maxfract and @maxave thresholds, you have * these options: * (a) Base the comparison only on @maxfract. Then set * @maxave = 0.0 or 256.0. (If 0, we always ignore it.) * (b) Base the comparison only on @maxave. Then set * @maxfract = 1.0. * (c) Base the comparison on both thresholds. * (3) Example of values that can be expected at mindiff = 15 when * comparing lossless png encoding with jpeg encoding, q=75: * (smoothish bg) fractdiff = 0.01, avediff = 2.5 * (natural scene) fractdiff = 0.13, avediff = 3.5 * To identify these images as 'similar', select maxfract * and maxave to be upper bounds of what you expect. * (4) See pixGetDifferenceStats() for a discussion of why we subtract * mindiff from the computed average diff of the nonsimilar pixels * to get the 'avediff' returned by that function. * (5) If there is a colormap, it is removed and the result * is either gray or RGB depending on the colormap. * (6) If RGB, the maximum difference between pixel components is * saved in the histogram. */ l_int32 pixTestForSimilarity(PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 maxfract, l_float32 maxave, l_int32 *psimilar, l_int32 printstats) { l_float32 fractdiff, avediff; PROCNAME("pixTestForSimilarity"); if (!psimilar) return ERROR_INT("&similar not defined", procName, 1); *psimilar = 0; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); if (pixSizesEqual(pix1, pix2) == 0) return ERROR_INT("pix sizes not equal", procName, 1); if (mindiff <= 0) return ERROR_INT("mindiff must be > 0", procName, 1); if (pixGetDifferenceStats(pix1, pix2, factor, mindiff, &fractdiff, &avediff, printstats)) return ERROR_INT("diff stats not found", procName, 1); if (maxave <= 0.0) maxave = 256.0; if (fractdiff <= maxfract && avediff <= maxave) *psimilar = 1; return 0; } /*! * pixGetDifferenceStats() * * Input: pix1 (8 bpp gray or 32 bpp rgb, or colormapped) * pix2 (8 bpp gray or 32 bpp rgb, or colormapped) * factor (subsampling factor; use 0 or 1 for no subsampling) * mindiff (minimum pixel difference to be counted; > 0) * &fractdiff ( fraction of pixels with diff greater * than or equal to mindiff) * &avediff ( average difference of pixels with diff * greater than or equal to mindiff, less mindiff) * printstats (use 1 to print normalized histogram to stderr) * Return: 0 if OK, 1 on error * * Notes: * (1) This takes a threshold @mindiff and describes the difference * between two images in terms of two numbers: * (a) the fraction of pixels, @fractdiff, whose difference * equals or exceeds the threshold @mindiff, and * (b) the average value @avediff of the difference in pixel value * for the pixels in the set given by (a), after you subtract * @mindiff. The reason for subtracting @mindiff is that * you then get a useful measure for the rate of falloff * of the distribution for larger differences. For example, * if @mindiff = 10 and you find that @avediff = 2.5, it * says that of the pixels with diff > 10, the average of * their diffs is just mindiff + 2.5 = 12.5. This is a * fast falloff in the histogram with increasing difference. * (2) The two images are aligned at the UL corner, and do not * need to be the same size. If they are not the same size, * the comparison will be made over overlapping pixels. * (3) If there is a colormap, it is removed and the result * is either gray or RGB depending on the colormap. * (4) If RGB, the maximum difference between pixel components is * saved in the histogram. */ l_int32 pixGetDifferenceStats(PIX *pix1, PIX *pix2, l_int32 factor, l_int32 mindiff, l_float32 *pfractdiff, l_float32 *pavediff, l_int32 printstats) { l_int32 i, first, last, diff; l_float32 fract, ave; l_float32 *array; NUMA *nah, *nan, *nac; PROCNAME("pixGetDifferenceStats"); if (!pfractdiff) return ERROR_INT("&fractdiff not defined", procName, 1); *pfractdiff = 0.0; if (!pavediff) return ERROR_INT("&avediff not defined", procName, 1); *pavediff = 0.0; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); if (mindiff <= 0) return ERROR_INT("mindiff must be > 0", procName, 1); if ((nah = pixGetDifferenceHistogram(pix1, pix2, factor)) == NULL) return ERROR_INT("na not made", procName, 1); if ((nan = numaNormalizeHistogram(nah, 1.0)) == NULL) { numaDestroy(&nah); return ERROR_INT("nan not made", procName, 1); } array = numaGetFArray(nan, L_NOCOPY); if (printstats) { numaGetNonzeroRange(nan, 0.0, &first, &last); nac = numaClipToInterval(nan, first, last); fprintf(stderr, "\nNonzero values in normalized histogram:"); numaWriteStream(stderr, nac); numaDestroy(&nac); fprintf(stderr, " Mindiff fractdiff avediff\n"); fprintf(stderr, " -----------------------------------\n"); for (diff = 1; diff < L_MIN(2 * mindiff, last); diff++) { fract = 0.0; ave = 0.0; for (i = diff; i <= last; i++) { fract += array[i]; ave += (l_float32)i * array[i]; } ave = (fract == 0.0) ? 0.0 : ave / fract; ave -= diff; fprintf(stderr, "%5d %7.4f %7.4f\n", diff, fract, ave); } fprintf(stderr, " -----------------------------------\n"); } fract = 0.0; ave = 0.0; for (i = mindiff; i < 256; i++) { fract += array[i]; ave += (l_float32)i * array[i]; } ave = (fract == 0.0) ? 0.0 : ave / fract; ave -= mindiff; *pfractdiff = fract; *pavediff = ave; numaDestroy(&nah); numaDestroy(&nan); return 0; } /*! * pixGetDifferenceHistogram() * * Input: pix1 (8 bpp gray or 32 bpp rgb, or colormapped) * pix2 (8 bpp gray or 32 bpp rgb, or colormapped) * factor (subsampling factor; use 0 or 1 for no subsampling) * Return: na (Numa of histogram of differences), or null on error * * Notes: * (1) The two images are aligned at the UL corner, and do not * need to be the same size. If they are not the same size, * the comparison will be made over overlapping pixels. * (2) If there is a colormap, it is removed and the result * is either gray or RGB depending on the colormap. * (3) If RGB, the maximum difference between pixel components is * saved in the histogram. */ NUMA * pixGetDifferenceHistogram(PIX *pix1, PIX *pix2, l_int32 factor) { l_int32 w1, h1, d1, w2, h2, d2, w, h, wpl1, wpl2; l_int32 i, j, val, val1, val2; l_int32 rval1, rval2, gval1, gval2, bval1, bval2; l_int32 rdiff, gdiff, bdiff, maxdiff; l_uint32 *data1, *data2, *line1, *line2; l_float32 *array; NUMA *na; PIX *pixt1, *pixt2; PROCNAME("pixGetDifferenceHistogram"); if (!pix1) return (NUMA *)ERROR_PTR("pix1 not defined", procName, NULL); if (!pix2) return (NUMA *)ERROR_PTR("pix2 not defined", procName, NULL); d1 = pixGetDepth(pix1); d2 = pixGetDepth(pix2); if (d1 == 16 || d2 == 16) return (NUMA *)ERROR_PTR("d == 16 not supported", procName, NULL); if (d1 < 8 && !pixGetColormap(pix1)) return (NUMA *)ERROR_PTR("pix1 depth < 8 bpp and not cmapped", procName, NULL); if (d2 < 8 && !pixGetColormap(pix2)) return (NUMA *)ERROR_PTR("pix2 depth < 8 bpp and not cmapped", procName, NULL); pixt1 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); pixt2 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); pixGetDimensions(pixt1, &w1, &h1, &d1); pixGetDimensions(pixt2, &w2, &h2, &d2); if (d1 != d2) { pixDestroy(&pixt1); pixDestroy(&pixt2); return (NUMA *)ERROR_PTR("pix depths not equal", procName, NULL); } if (factor < 1) factor = 1; na = numaCreate(256); numaSetCount(na, 256); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); w = L_MIN(w1, w2); h = L_MIN(h1, h2); data1 = pixGetData(pixt1); data2 = pixGetData(pixt2); wpl1 = pixGetWpl(pixt1); wpl2 = pixGetWpl(pixt2); if (d1 == 8) { for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { val1 = GET_DATA_BYTE(line1, j); val2 = GET_DATA_BYTE(line2, j); val = L_ABS(val1 - val2); array[val]++; } } } else { /* d1 == 32 */ for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { extractRGBValues(line1[j], &rval1, &gval1, &bval1); extractRGBValues(line2[j], &rval2, &gval2, &bval2); rdiff = L_ABS(rval1 - rval2); gdiff = L_ABS(gval1 - gval2); bdiff = L_ABS(bval1 - bval2); maxdiff = L_MAX(rdiff, gdiff); maxdiff = L_MAX(maxdiff, bdiff); array[maxdiff]++; } } } pixDestroy(&pixt1); pixDestroy(&pixt2); return na; } /*! * pixGetPerceptualDiff() * * Input: pix1 (8 bpp gray or 32 bpp rgb, or colormapped) * pix2 (8 bpp gray or 32 bpp rgb, or colormapped) * sampling (subsampling factor; use 0 or 1 for no subsampling) * dilation (size of grayscale or color Sel; odd) * mindiff (minimum pixel difference to be counted; > 0) * &fract ( fraction of pixels with diff greater than * mindiff) * &pixdiff1 ( showing difference (gray or color)) * &pixdiff2 ( showing pixels of sufficient diff) * Return: 0 if OK, 1 on error * * Notes: * (1) This takes 2 pix and determines, using 2 input parameters: * * @dilation specifies the amount of grayscale or color * dilation to apply to the images, to compensate for * a small amount of misregistration. A typical number might * be 5, which uses a 5x5 Sel. Grayscale dilation expands * lighter pixels into darker pixel regions. * * @mindiff determines the threshold on the difference in * pixel values to be counted -- two pixels are not similar * if their difference in value is at least @mindiff. For * color pixels, we use the maximum component difference. * (2) The pixelwise comparison is always done with the UL corners * aligned. The sizes of pix1 and pix2 need not be the same, * although in practice it can be useful to scale to the same size. * (3) If there is a colormap, it is removed and the result * is either gray or RGB depending on the colormap. * (4) Two optional diff images can be retrieved (typ. for debugging): * pixdiff1: the gray or color difference * pixdiff2: thresholded to 1 bpp for pixels exceeding @mindiff * (5) The returned value of fract can be compared to some threshold, * which is application dependent. * (6) This method is in analogy to the two-sided hausdorff transform, * except here it is for d > 1. For d == 1 (see pixRankHaustest()), * we verify that when one pix1 is dilated, it covers at least a * given fraction of the pixels in pix2, and v.v.; in that * case, the two pix are sufficiently similar. Here, we * do an analogous thing: subtract the dilated pix1 from pix2 to * get a 1-sided hausdorff-like transform. Then do it the * other way. Take the component-wise max of the two results, * and threshold to get the fraction of pixels with a difference * below the threshold. */ l_int32 pixGetPerceptualDiff(PIX *pixs1, PIX *pixs2, l_int32 sampling, l_int32 dilation, l_int32 mindiff, l_float32 *pfract, PIX **ppixdiff1, PIX **ppixdiff2) { l_int32 d1, d2, w, h, count; PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pix6, *pix7, *pix8, *pix9; PIX *pix10, *pix11; PROCNAME("pixGetPerceptualDiff"); if (!pfract) return ERROR_INT("&fract not defined", procName, 1); *pfract = 1.0; /* init to completely different */ if (ppixdiff1) *ppixdiff1 = NULL; if (ppixdiff2) *ppixdiff2 = NULL; if ((dilation & 1) == 0) return ERROR_INT("dilation must be odd", procName, 1); if (!pixs1) return ERROR_INT("pixs1 not defined", procName, 1); if (!pixs2) return ERROR_INT("pixs2 not defined", procName, 1); d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (!pixGetColormap(pixs1) && d1 < 8) return ERROR_INT("pixs1 not cmapped or >=8 bpp", procName, 1); if (!pixGetColormap(pixs2) && d2 < 8) return ERROR_INT("pixs2 not cmapped or >=8 bpp", procName, 1); /* Integer downsample if requested */ if (sampling > 1) { pix1 = pixScaleByIntSubsampling(pixs1, sampling); pix2 = pixScaleByIntSubsampling(pixs2, sampling); } else { pix1 = pixClone(pixs1); pix2 = pixClone(pixs2); } /* Remove colormaps */ if (pixGetColormap(pix1)) { pix3 = pixRemoveColormap(pix1, REMOVE_CMAP_BASED_ON_SRC); d1 = pixGetDepth(pix3); } else { pix3 = pixClone(pix1); } if (pixGetColormap(pix2)) { pix4 = pixRemoveColormap(pix2, REMOVE_CMAP_BASED_ON_SRC); d2 = pixGetDepth(pix4); } else { pix4 = pixClone(pix2); } pixDestroy(&pix1); pixDestroy(&pix2); if (d1 != d2) { pixDestroy(&pix3); pixDestroy(&pix4); return ERROR_INT("pix3 and pix4 depths not equal", procName, 1); } /* In each direction, do a small dilation and subtract the dilated * image from the other image to get a one-sided difference. * Then take the max of the differences for each direction * and clipping each component to 255 if necessary. Note that * for RGB images, the dilations and max selection are done * component-wise, and the conversion to grayscale also uses the * maximum component. The resulting grayscale images are * thresholded using @mindiff. */ if (d1 == 8) { pix5 = pixDilateGray(pix3, dilation, dilation); pixCompareGray(pix4, pix5, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix7); pix6 = pixDilateGray(pix4, dilation, dilation); pixCompareGray(pix3, pix6, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix8); pix9 = pixMinOrMax(NULL, pix7, pix8, L_CHOOSE_MAX); pix10 = pixThresholdToBinary(pix9, mindiff); pixInvert(pix10, pix10); pixCountPixels(pix10, &count, NULL); pixGetDimensions(pix10, &w, &h, NULL); *pfract = (l_float32)count / (l_float32)(w * h); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); if (ppixdiff1) *ppixdiff1 = pix9; else pixDestroy(&pix9); if (ppixdiff2) *ppixdiff2 = pix10; else pixDestroy(&pix10); } else { /* d1 == 32 */ pix5 = pixColorMorph(pix3, L_MORPH_DILATE, dilation, dilation); pixCompareRGB(pix4, pix5, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix7); pix6 = pixColorMorph(pix4, L_MORPH_DILATE, dilation, dilation); pixCompareRGB(pix3, pix6, L_COMPARE_SUBTRACT, 0, NULL, NULL, NULL, &pix8); pix9 = pixMinOrMax(NULL, pix7, pix8, L_CHOOSE_MAX); pix10 = pixConvertRGBToGrayMinMax(pix9, L_CHOOSE_MAX); pix11 = pixThresholdToBinary(pix10, mindiff); pixInvert(pix11, pix11); pixCountPixels(pix11, &count, NULL); pixGetDimensions(pix11, &w, &h, NULL); *pfract = (l_float32)count / (l_float32)(w * h); pixDestroy(&pix5); pixDestroy(&pix6); pixDestroy(&pix7); pixDestroy(&pix8); pixDestroy(&pix10); if (ppixdiff1) *ppixdiff1 = pix9; else pixDestroy(&pix9); if (ppixdiff2) *ppixdiff2 = pix11; else pixDestroy(&pix11); } pixDestroy(&pix3); pixDestroy(&pix4); return 0; } /*! * pixGetPSNR() * * Input: pix1, pix2 (8 or 32 bpp; no colormap) * factor (sampling factor; >= 1) * &psnr ( power signal/noise ratio difference) * Return: 0 if OK, 1 on error * * Notes: * (1) This computes the power S/N ratio, in dB, for the difference * between two images. By convention, the power S/N * for a grayscale image is ('log' == log base 10, * and 'ln == log base e): * PSNR = 10 * log((255/MSE)^2) * = 4.3429 * ln((255/MSE)^2) * = -4.3429 * ln((MSE/255)^2) * where MSE is the mean squared error. * Here are some examples: * MSE PSNR * --- ---- * 10 28.1 * 3 38.6 * 1 48.1 * 0.1 68.1 * (2) If pix1 and pix2 have the same pixel values, the MSE = 0.0 * and the PSNR is infinity. For that case, this returns * PSNR = 1000, which corresponds to the very small MSE of * about 10^(-48). */ l_int32 pixGetPSNR(PIX *pix1, PIX *pix2, l_int32 factor, l_float32 *ppsnr) { l_int32 same, i, j, w, h, d, wpl1, wpl2, v1, v2, r1, g1, b1, r2, g2, b2; l_uint32 *data1, *data2, *line1, *line2; l_float32 mse; /* mean squared error */ PROCNAME("pixGetPSNR"); if (!ppsnr) return ERROR_INT("&psnr not defined", procName, 1); *ppsnr = 0.0; if (!pix1 || !pix2) return ERROR_INT("empty input pix", procName, 1); if (!pixSizesEqual(pix1, pix2)) return ERROR_INT("pix sizes unequal", procName, 1); if (pixGetColormap(pix1)) return ERROR_INT("pix1 has colormap", procName, 1); if (pixGetColormap(pix2)) return ERROR_INT("pix2 has colormap", procName, 1); pixGetDimensions(pix1, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pix not 8 or 32 bpp", procName, 1); if (factor < 1) return ERROR_INT("invalid sampling factor", procName, 1); pixEqual(pix1, pix2, &same); if (same) { *ppsnr = 1000.0; /* crazy big exponent */ return 0; } data1 = pixGetData(pix1); data2 = pixGetData(pix2); wpl1 = pixGetWpl(pix1); wpl2 = pixGetWpl(pix2); mse = 0.0; if (d == 8) { for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { v1 = GET_DATA_BYTE(line1, j); v2 = GET_DATA_BYTE(line2, j); mse += (v1 - v2) * (v1 - v2); } } } else { /* d == 32 */ for (i = 0; i < h; i += factor) { line1 = data1 + i * wpl1; line2 = data2 + i * wpl2; for (j = 0; j < w; j += factor) { extractRGBValues(line1[j], &r1, &g1, &b1); extractRGBValues(line2[j], &r2, &g2, &b2); mse += ((r1 - r2) * (r1 - r2) + (g1 - g2) * (g1 - g2) + (b1 - b2) * (b1 - b2)) / 3.0; } } } mse = mse / (w * h); *ppsnr = -4.3429448 * log(mse / (255 * 255)); return 0; } /*------------------------------------------------------------------* * Translated images at the same resolution * *------------------------------------------------------------------*/ /*! * pixCompareWithTranslation() * * Input: pix1, pix2 (any depth; colormap OK) * thresh (threshold for converting to 1 bpp) * &delx ( x translation on pix2 to align with pix1) * &dely ( y translation on pix2 to align with pix1) * &score ( correlation score at best alignment) * debugflag (1 for debug output; 0 for no debugging) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a coarse-to-fine search for best translational * alignment of two images, measured by a scoring function * that is the correlation between the fg pixels. * (2) The threshold is used if the images aren't 1 bpp. * (3) With debug on, you get a pdf that shows, as a grayscale * image, the score as a function of shift from the initial * estimate, for each of the four levels. The shift is 0 at * the center of the image. * (4) With debug on, you also get a pdf that shows the * difference at the best alignment between the two images, * at each of the four levels. The red and green pixels * show locations where one image has a fg pixel and the * other doesn't. The black pixels are where both images * have fg pixels, and white pixels are where neither image * has fg pixels. */ l_int32 pixCompareWithTranslation(PIX *pix1, PIX *pix2, l_int32 thresh, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag) { l_uint8 *subtab; l_int32 i, level, area1, area2, delx, dely; l_int32 etransx, etransy, maxshift, dbint; l_int32 *stab, *ctab; l_float32 cx1, cx2, cy1, cy2, score; PIX *pixb1, *pixb2, *pixt1, *pixt2, *pixt3, *pixt4; PIXA *pixa1, *pixa2, *pixadb; PROCNAME("pixCompareWithTranslation"); if (!pdelx || !pdely) return ERROR_INT("&delx and &dely not defined", procName, 1); *pdelx = *pdely = 0; if (!pscore) return ERROR_INT("&score not defined", procName, 1); *pscore = 0.0; if (!pix1) return ERROR_INT("pix1 not defined", procName, 1); if (!pix2) return ERROR_INT("pix2 not defined", procName, 1); /* Make tables */ subtab = makeSubsampleTab2x(); stab = makePixelSumTab8(); ctab = makePixelCentroidTab8(); /* Binarize each image */ pixb1 = pixConvertTo1(pix1, thresh); pixb2 = pixConvertTo1(pix2, thresh); /* Make a cascade of 2x reduced images for each, thresholding * with level 2 (neutral), down to 8x reduction */ pixa1 = pixaCreate(4); pixa2 = pixaCreate(4); if (debugflag) pixadb = pixaCreate(4); pixaAddPix(pixa1, pixb1, L_INSERT); pixaAddPix(pixa2, pixb2, L_INSERT); for (i = 0; i < 3; i++) { pixt1 = pixReduceRankBinary2(pixb1, 2, subtab); pixt2 = pixReduceRankBinary2(pixb2, 2, subtab); pixaAddPix(pixa1, pixt1, L_INSERT); pixaAddPix(pixa2, pixt2, L_INSERT); pixb1 = pixt1; pixb2 = pixt2; } /* At the lowest level, use the centroids with a maxshift of 6 * to search for the best alignment. Then at higher levels, * use the result from the level below as the initial approximation * for the alignment, and search with a maxshift of 2. */ for (level = 3; level >= 0; level--) { pixt1 = pixaGetPix(pixa1, level, L_CLONE); pixt2 = pixaGetPix(pixa2, level, L_CLONE); pixCountPixels(pixt1, &area1, stab); pixCountPixels(pixt2, &area2, stab); if (level == 3) { pixCentroid(pixt1, ctab, stab, &cx1, &cy1); pixCentroid(pixt2, ctab, stab, &cx2, &cy2); etransx = lept_roundftoi(cx1 - cx2); etransy = lept_roundftoi(cy1 - cy2); maxshift = 6; } else { etransx = 2 * delx; etransy = 2 * dely; maxshift = 2; } dbint = (debugflag) ? level + 1 : 0; pixBestCorrelation(pixt1, pixt2, area1, area2, etransx, etransy, maxshift, stab, &delx, &dely, &score, dbint); if (debugflag) { fprintf(stderr, "Level %d: delx = %d, dely = %d, score = %7.4f\n", level, delx, dely, score); pixRasteropIP(pixt2, delx, dely, L_BRING_IN_WHITE); pixt3 = pixDisplayDiffBinary(pixt1, pixt2); pixt4 = pixExpandReplicate(pixt3, 8 / (1 << (3 - level))); pixaAddPix(pixadb, pixt4, L_INSERT); pixDestroy(&pixt3); } pixDestroy(&pixt1); pixDestroy(&pixt2); } if (debugflag) { pixaConvertToPdf(pixadb, 300, 1.0, L_FLATE_ENCODE, 0, NULL, "/tmp/cmp.pdf"); convertFilesToPdf("/tmp", "correl_", 30, 1.0, L_FLATE_ENCODE, 0, "Correlation scores at levels 1 through 5", "/tmp/correl.pdf"); pixaDestroy(&pixadb); } *pdelx = delx; *pdely = dely; *pscore = score; pixaDestroy(&pixa1); pixaDestroy(&pixa2); FREE(subtab); FREE(stab); FREE(ctab); return 0; } /*! * pixBestCorrelation() * * Input: pix1 (1 bpp) * pix2 (1 bpp) * area1 (number of on pixels in pix1) * area2 (number of on pixels in pix2) * etransx (estimated x translation of pix2 to align with pix1) * etransy (estimated y translation of pix2 to align with pix1) * maxshift (max x and y shift of pix2, around the estimated * alignment location, relative to pix1) * tab8 ( sum tab for ON pixels in byte; can be NULL) * &delx ( best x shift of pix2 relative to pix1 * &dely ( best y shift of pix2 relative to pix1 * &score ( maximum score found; can be NULL) * debugflag (<= 0 to skip; positive to generate output. * The integer is used to label the debug image.) * Return: 0 if OK, 1 on error * * Notes: * (1) This maximizes the correlation score between two 1 bpp images, * by starting with an estimate of the alignment * (@etransx, @etransy) and computing the correlation around this. * It optionally returns the shift (@delx, @dely) that maximizes * the correlation score when pix2 is shifted by this amount * relative to pix1. * (2) Get the centroids of pix1 and pix2, using pixCentroid(), * to compute (@etransx, @etransy). Get the areas using * pixCountPixels(). * (3) The centroid of pix2 is shifted with respect to the centroid * of pix1 by all values between -maxshiftx and maxshiftx, * and likewise for the y shifts. Therefore, the number of * correlations computed is: * (2 * maxshiftx + 1) * (2 * maxshifty + 1) * Consequently, if pix1 and pix2 are large, you should do this * in a coarse-to-fine sequence. See the use of this function * in pixCompareWithTranslation(). */ l_int32 pixBestCorrelation(PIX *pix1, PIX *pix2, l_int32 area1, l_int32 area2, l_int32 etransx, l_int32 etransy, l_int32 maxshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag) { l_int32 shiftx, shifty, delx, dely; l_int32 *tab; l_float32 maxscore, score; FPIX *fpix; PIX *pixt1, *pixt2; PROCNAME("pixBestCorrelation"); if (pdelx) *pdelx = 0; if (pdely) *pdely = 0; if (pscore) *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not defined or not 1 bpp", procName, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not defined or not 1 bpp", procName, 1); if (!area1 || !area2) return ERROR_INT("areas must be > 0", procName, 1); if (debugflag > 0) fpix = fpixCreate(2 * maxshift + 1, 2 * maxshift + 1); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; /* Search over a set of {shiftx, shifty} for the max */ maxscore = 0; delx = etransx; dely = etransy; for (shifty = -maxshift; shifty <= maxshift; shifty++) { for (shiftx = -maxshift; shiftx <= maxshift; shiftx++) { pixCorrelationScoreShifted(pix1, pix2, area1, area2, etransx + shiftx, etransy + shifty, tab, &score); if (debugflag > 0) { fpixSetPixel(fpix, maxshift + shiftx, maxshift + shifty, 1000.0 * score); /* fprintf(stderr, "(sx, sy) = (%d, %d): score = %6.4f\n", shiftx, shifty, score); */ } if (score > maxscore) { maxscore = score; delx = etransx + shiftx; dely = etransy + shifty; } } } if (debugflag > 0) { char buf[128]; pixt1 = fpixDisplayMaxDynamicRange(fpix); pixt2 = pixExpandReplicate(pixt1, 20); snprintf(buf, sizeof(buf), "/tmp/correl_%d.png", debugflag); pixWrite(buf, pixt2, IFF_PNG); pixDestroy(&pixt1); pixDestroy(&pixt2); fpixDestroy(&fpix); } if (pdelx) *pdelx = delx; if (pdely) *pdely = dely; if (pscore) *pscore = maxscore; if (!tab8) FREE(tab); return 0; } leptonica-1.70/src/scale.c0000644000175000017500000034563012254120714013540 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * scale.c * * Top-level scaling * PIX *pixScale() *** * PIX *pixScaleToSize() *** * PIX *pixScaleGeneral() *** * * Linearly interpreted (usually up-) scaling * PIX *pixScaleLI() *** * PIX *pixScaleColorLI() * PIX *pixScaleColor2xLI() *** * PIX *pixScaleColor4xLI() *** * PIX *pixScaleGrayLI() * PIX *pixScaleGray2xLI() * PIX *pixScaleGray4xLI() * * Scaling by closest pixel sampling * PIX *pixScaleBySampling() * PIX *pixScaleBySamplingToSize() * PIX *pixScaleByIntSubsampling() * * Fast integer factor subsampling RGB to gray and to binary * PIX *pixScaleRGBToGrayFast() * PIX *pixScaleRGBToBinaryFast() * PIX *pixScaleGrayToBinaryFast() * * Downscaling with (antialias) smoothing * PIX *pixScaleSmooth() *** * PIX *pixScaleRGBToGray2() [special 2x reduction to gray] * * Downscaling with (antialias) area mapping * PIX *pixScaleAreaMap() *** * PIX *pixScaleAreaMap2() * * Binary scaling by closest pixel sampling * PIX *pixScaleBinary() * * Scale-to-gray (1 bpp --> 8 bpp; arbitrary downscaling) * PIX *pixScaleToGray() * PIX *pixScaleToGrayFast() * * Scale-to-gray (1 bpp --> 8 bpp; integer downscaling) * PIX *pixScaleToGray2() * PIX *pixScaleToGray3() * PIX *pixScaleToGray4() * PIX *pixScaleToGray6() * PIX *pixScaleToGray8() * PIX *pixScaleToGray16() * * Scale-to-gray by mipmap(1 bpp --> 8 bpp, arbitrary reduction) * PIX *pixScaleToGrayMipmap() * * Grayscale scaling using mipmap * PIX *pixScaleMipmap() * * Replicated (integer) expansion (all depths) * PIX *pixExpandReplicate() * * Upscale 2x followed by binarization * PIX *pixScaleGray2xLIThresh() * PIX *pixScaleGray2xLIDither() * * Upscale 4x followed by binarization * PIX *pixScaleGray4xLIThresh() * PIX *pixScaleGray4xLIDither() * * Grayscale downscaling using min and max * PIX *pixScaleGrayMinMax() * PIX *pixScaleGrayMinMax2() * * Grayscale downscaling using rank value * PIX *pixScaleGrayRankCascade() * PIX *pixScaleGrayRank2() * * Helper function for transferring alpha with scaling * l_int32 pixScaleAndTransferAlpha() * * RGB scaling including alpha (blend) component * PIX *pixScaleWithAlpha() *** * * *** Note: these functions make an implicit assumption about RGB * component ordering. */ #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; /*------------------------------------------------------------------* * Top level scaling dispatcher * *------------------------------------------------------------------*/ /*! * pixScale() * * Input: pixs (1, 2, 4, 8, 16 and 32 bpp) * scalex, scaley * Return: pixd, or null on error * * This function scales 32 bpp RGB; 2, 4 or 8 bpp palette color; * 2, 4, 8 or 16 bpp gray; and binary images. * * When the input has palette color, the colormap is removed and * the result is either 8 bpp gray or 32 bpp RGB, depending on whether * the colormap has color entries. Images with 2, 4 or 16 bpp are * converted to 8 bpp. * * Because pixScale() is meant to be a very simple interface to a * number of scaling functions, including the use of unsharp masking, * the type of scaling and the sharpening parameters are chosen * by default. Grayscale and color images are scaled using one * of four methods, depending on the scale factors: * (1) antialiased subsampling (lowpass filtering followed by * subsampling, implemented here by area mapping), for scale factors * less than 0.2 * (2) antialiased subsampling with sharpening, for scale factors * between 0.2 and 0.7 * (3) linear interpolation with sharpening, for scale factors between * 0.7 and 1.4 * (4) linear interpolation without sharpening, for scale factors >= 1.4. * * One could use subsampling for scale factors very close to 1.0, * because it preserves sharp edges. Linear interpolation blurs * edges because the dest pixels will typically straddle two src edge * pixels. Subsmpling removes entire columns and rows, so the edge is * not blurred. However, there are two reasons for not doing this. * First, it moves edges, so that a straight line at a large angle to * both horizontal and vertical will have noticable kinks where * horizontal and vertical rasters are removed. Second, although it * is very fast, you get good results on sharp edges by applying * a sharpening filter. * * For images with sharp edges, sharpening substantially improves the * image quality for scale factors between about 0.2 and about 2.0. * pixScale() uses a small amount of sharpening by default because * it strengthens edge pixels that are weak due to anti-aliasing. * The default sharpening factors are: * * for scaling factors < 0.7: sharpfract = 0.2 sharpwidth = 1 * * for scaling factors >= 0.7: sharpfract = 0.4 sharpwidth = 2 * The cases where the sharpening halfwidth is 1 or 2 have special * implementations and are about twice as fast as the general case. * * However, sharpening is computationally expensive, and one needs * to consider the speed-quality tradeoff: * * For upscaling of RGB images, linear interpolation plus default * sharpening is about 5 times slower than upscaling alone. * * For downscaling, area mapping plus default sharpening is * about 10 times slower than downscaling alone. * When the scale factor is larger than 1.4, the cost of sharpening, * which is proportional to image area, is very large compared to the * incremental quality improvement, so we cut off the default use of * sharpening at 1.4. Thus, for scale factors greater than 1.4, * pixScale() only does linear interpolation. * * In many situations you will get a satisfactory result by scaling * without sharpening: call pixScaleGeneral() with @sharpfract = 0.0. * Alternatively, if you wish to sharpen but not use the default * value, first call pixScaleGeneral() with @sharpfract = 0.0, and * then sharpen explicitly using pixUnsharpMasking(). * * Binary images are scaled to binary by sampling the closest pixel, * without any low-pass filtering (averaging of neighboring pixels). * This will introduce aliasing for reductions. Aliasing can be * prevented by using pixScaleToGray() instead. * * *** Warning: implicit assumption about RGB component order * for LI color scaling */ PIX * pixScale(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 sharpwidth; l_float32 maxscale, sharpfract; PROCNAME("pixScale"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Reduce the default sharpening factors by 2 if maxscale < 0.7 */ maxscale = L_MAX(scalex, scaley); sharpfract = (maxscale < 0.7) ? 0.2 : 0.4; sharpwidth = (maxscale < 0.7) ? 1 : 2; return pixScaleGeneral(pixs, scalex, scaley, sharpfract, sharpwidth); } /*! * pixScaleToSize() * * Input: pixs (1, 2, 4, 8, 16 and 32 bpp) * wd (target width; use 0 if using height as target) * hd (target height; use 0 if using width as target) * Return: pixd, or null on error * * Notes: * (1) This guarantees that the output scaled image has the * dimension(s) you specify. * - To specify the width with isotropic scaling, set @hd = 0. * - To specify the height with isotropic scaling, set @wd = 0. * - If both @wd and @hd are specified, the image is scaled * (in general, anisotropically) to that size. * - It is an error to set both @wd and @hd to 0. */ PIX * pixScaleToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h; l_float32 scalex, scaley; PROCNAME("pixScaleToSize"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (wd <= 0 && hd <= 0) return (PIX *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (wd <= 0) { scaley = (l_float32)hd / (l_float32)h; scalex = scaley; } else if (hd <= 0) { scalex = (l_float32)wd / (l_float32)w; scaley = scalex; } else { scalex = (l_float32)wd / (l_float32)w; scaley = (l_float32)hd / (l_float32)h; } return pixScale(pixs, scalex, scaley); } /*! * pixScaleGeneral() * * Input: pixs (1, 2, 4, 8, 16 and 32 bpp) * scalex, scaley (both > 0.0) * sharpfract (use 0.0 to skip sharpening) * sharpwidth (halfwidth of low-pass filter; typ. 1 or 2) * Return: pixd, or null on error * * Notes: * (1) See pixScale() for usage. * (2) This interface may change in the future, as other special * cases are added. * (3) The actual sharpening factors used depend on the maximum * of the two scale factors (maxscale): * maxscale <= 0.2: no sharpening * 0.2 < maxscale < 1.4: uses the input parameters * maxscale >= 1.4: no sharpening * (4) To avoid sharpening for grayscale and color images with * scaling factors between 0.2 and 1.4, call this function * with @sharpfract == 0.0. * (5) To use arbitrary sharpening in conjunction with scaling, * call this function with @sharpfract = 0.0, and follow this * with a call to pixUnsharpMasking() with your chosen parameters. */ PIX * pixScaleGeneral(PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 sharpfract, l_int32 sharpwidth) { l_int32 d; l_float32 maxscale; PIX *pixt, *pixt2, *pixd; PROCNAME("pixScaleGeneral"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not {1,2,4,8,16,32} bpp", procName, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factor <= 0", procName, NULL); if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (d == 1) return pixScaleBinary(pixs, scalex, scaley); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pixt = pixConvertTo8Or32(pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); /* Scale (up or down) */ d = pixGetDepth(pixt); maxscale = L_MAX(scalex, scaley); if (maxscale < 0.7) { /* area mapping for anti-aliasing */ pixt2 = pixScaleAreaMap(pixt, scalex, scaley); if (maxscale > 0.2 && sharpfract > 0.0 && sharpwidth > 0) pixd = pixUnsharpMasking(pixt2, sharpwidth, sharpfract); else pixd = pixClone(pixt2); } else { /* use linear interpolation */ if (d == 8) pixt2 = pixScaleGrayLI(pixt, scalex, scaley); else /* d == 32 */ pixt2 = pixScaleColorLI(pixt, scalex, scaley); if (maxscale < 1.4 && sharpfract > 0.0 && sharpwidth > 0) pixd = pixUnsharpMasking(pixt2, sharpwidth, sharpfract); else pixd = pixClone(pixt2); } pixDestroy(&pixt); pixDestroy(&pixt2); return pixd; } /*------------------------------------------------------------------* * Scaling by linear interpolation * *------------------------------------------------------------------*/ /*! * pixScaleLI() * * Input: pixs (2, 4, 8 or 32 bpp; with or without colormap) * scalex, scaley (must both be >= 0.7) * Return: pixd, or null on error * * Notes: * (1) This function should only be used when the scale factors are * greater than or equal to 0.7, and typically greater than 1. * If either scale factor is smaller than 0.7, we issue a warning * and invoke pixScale(). * (2) This works on 2, 4, 8, 16 and 32 bpp images, as well as on * 2, 4 and 8 bpp images that have a colormap. If there is a * colormap, it is removed to either gray or RGB, depending * on the colormap. * (3) This does a linear interpolation on the src image. * (4) It dispatches to much faster implementations for * the special cases of 2x and 4x expansion. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixScaleLI(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 d; l_float32 maxscale; PIX *pixt, *pixd; PROCNAME("pixScaleLI"); if (!pixs || (pixGetDepth(pixs) == 1)) return (PIX *)ERROR_PTR("pixs not defined or 1 bpp", procName, NULL); maxscale = L_MAX(scalex, scaley); if (maxscale < 0.7) { L_WARNING("scaling factors < 0.7; do regular scaling\n", procName); return pixScale(pixs, scalex, scaley); } d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not {2,4,8,16,32} bpp", procName, NULL); /* Remove colormap; clone if possible; result is either 8 or 32 bpp */ if ((pixt = pixConvertTo8Or32(pixs, 0, 1)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); d = pixGetDepth(pixt); if (d == 8) pixd = pixScaleGrayLI(pixt, scalex, scaley); else if (d == 32) pixd = pixScaleColorLI(pixt, scalex, scaley); pixDestroy(&pixt); return pixd; } /*! * pixScaleColorLI() * * Input: pixs (32 bpp, representing rgb) * scalex, scaley (must both be >= 0.7) * Return: pixd, or null on error * * Notes: * (1) If this is used for scale factors less than 0.7, * it will suffer from antialiasing. A warning is issued. * Particularly for document images with sharp edges, * use pixScaleSmooth() or pixScaleAreaMap() instead. * (2) For the general case, it's about 4x faster to manipulate * the color pixels directly, rather than to make images * out of each of the 3 components, scale each component * using the pixScaleGrayLI(), and combine the results back * into an rgb image. * (3) The speed on intel hardware for the general case (not 2x) * is about 10 * 10^6 dest-pixels/sec/GHz. (The special 2x * case runs at about 80 * 10^6 dest-pixels/sec/GHz.) */ PIX * pixScaleColorLI(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, wpls, wd, hd, wpld; l_uint32 *datas, *datad; l_float32 maxscale; PIX *pixd; PROCNAME("pixScaleColorLI"); if (!pixs || (pixGetDepth(pixs) != 32)) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); maxscale = L_MAX(scalex, scaley); if (maxscale < 0.7) { L_WARNING("scaling factors < 0.7; do regular scaling\n", procName); return pixScale(pixs, scalex, scaley); } /* Do fast special cases if possible */ if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (scalex == 2.0 && scaley == 2.0) return pixScaleColor2xLI(pixs); if (scalex == 4.0 && scaley == 4.0) return pixScaleColor4xLI(pixs); /* General case */ pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleColorLILow(datad, wd, hd, wpld, datas, ws, hs, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); return pixd; } /*! * pixScaleColor2xLI() * * Input: pixs (32 bpp, representing rgb) * Return: pixd, or null on error * * Notes: * (1) This is a special case of linear interpolated scaling, * for 2x upscaling. It is about 8x faster than using * the generic pixScaleColorLI(), and about 4x faster than * using the special 2x scale function pixScaleGray2xLI() * on each of the three components separately. * (2) The speed on intel hardware is about * 80 * 10^6 dest-pixels/sec/GHz. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixScaleColor2xLI(PIX *pixs) { l_int32 ws, hs, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleColor2xLI"); if (!pixs || (pixGetDepth(pixs) != 32)) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(2 * ws, 2 * hs, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleColor2xLILow(datad, wpld, datas, ws, hs, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 2.0, 2.0); return pixd; } /*! * pixScaleColor4xLI() * * Input: pixs (32 bpp, representing rgb) * Return: pixd, or null on error * * Notes: * (1) This is a special case of color linear interpolated scaling, * for 4x upscaling. It is about 3x faster than using * the generic pixScaleColorLI(). * (2) The speed on intel hardware is about * 30 * 10^6 dest-pixels/sec/GHz * (3) This scales each component separately, using pixScaleGray4xLI(). * It would be about 4x faster to inline the color code properly, * in analogy to scaleColor4xLILow(), and I leave this as * an exercise for someone who really needs it. */ PIX * pixScaleColor4xLI(PIX *pixs) { PIX *pixr, *pixg, *pixb; PIX *pixrs, *pixgs, *pixbs; PIX *pixd; PROCNAME("pixScaleColor4xLI"); if (!pixs || (pixGetDepth(pixs) != 32)) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); pixr = pixGetRGBComponent(pixs, COLOR_RED); pixrs = pixScaleGray4xLI(pixr); pixDestroy(&pixr); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixgs = pixScaleGray4xLI(pixg); pixDestroy(&pixg); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixbs = pixScaleGray4xLI(pixb); pixDestroy(&pixb); if ((pixd = pixCreateRGBImage(pixrs, pixgs, pixbs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 4.0, 4.0); pixDestroy(&pixrs); pixDestroy(&pixgs); pixDestroy(&pixbs); return pixd; } /*! * pixScaleGrayLI() * * Input: pixs (8 bpp grayscale, no cmap) * scalex, scaley (must both be >= 0.7) * Return: pixd, or null on error * * This function is appropriate for upscaling * (magnification: scale factors > 1), and for a * small amount of downscaling (reduction: scale * factors > 0.5). For scale factors less than 0.5, * the best result is obtained by area mapping, * but this is very expensive. So for such large * reductions, it is more appropriate to do low pass * filtering followed by subsampling, a combination * which is effectively a cheap form of area mapping. * * Some details follow. * * For each pixel in the dest, this does a linear * interpolation of 4 neighboring pixels in the src. * Specifically, consider the UL corner of src and * dest pixels. The UL corner of the dest falls within * a src pixel, whose four corners are the UL corners * of 4 adjacent src pixels. The value of the dest * is taken by linear interpolation using the values of * the four src pixels and the distance of the UL corner * of the dest from each corner. * * If the image is expanded so that the dest pixel is * smaller than the src pixel, such interpolation * is a reasonable approach. This interpolation is * also good for a small image reduction factor that * is not more than a 2x reduction. * * Note that the linear interpolation algorithm for scaling * is identical in form to the area-mapping algorithm * for grayscale rotation. The latter corresponds to a * translation of each pixel without scaling. * * This function is NOT optimal if the scaling involves * a large reduction. If the image is significantly * reduced, so that the dest pixel is much larger than * the src pixels, this interpolation, which is over src * pixels only near the UL corner of the dest pixel, * is not going to give a good area-mapping average. * Because area mapping for image scaling is considerably * more computationally intensive than linear interpolation, * we choose not to use it. For large image reduction, * linear interpolation over adjacent src pixels * degenerates asymptotically to subsampling. But * subsampling without a low-pass pre-filter causes * aliasing by the nyquist theorem. To avoid aliasing, * a low-pass filter (e.g., an averaging filter) of * size roughly equal to the dest pixel (i.e., the * reduction factor) should be applied to the src before * subsampling. * * As an alternative to low-pass filtering and subsampling * for large reduction factors, linear interpolation can * also be done between the (widely separated) src pixels in * which the corners of the dest pixel lie. This also is * not optimal, as it samples src pixels only near the * corners of the dest pixel, and it is not implemented. * * Summary: * (1) If this is used for scale factors less than 0.7, * it will suffer from antialiasing. A warning is issued. * Particularly for document images with sharp edges, * use pixScaleSmooth() or pixScaleAreaMap() instead. * (2) The speed on intel hardware for the general case (not 2x) * is about 13 * 10^6 dest-pixels/sec/GHz. (The special 2x * case runs at about 100 * 10^6 dest-pixels/sec/GHz.) */ PIX * pixScaleGrayLI(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, wpls, wd, hd, wpld; l_uint32 *datas, *datad; l_float32 maxscale; PIX *pixd; PROCNAME("pixScaleGrayLI"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", procName, NULL); maxscale = L_MAX(scalex, scaley); if (maxscale < 0.7) { L_WARNING("scaling factors < 0.7; do regular scaling\n", procName); return pixScale(pixs, scalex, scaley); } /* Do fast special cases if possible */ if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if (scalex == 2.0 && scaley == 2.0) return pixScaleGray2xLI(pixs); if (scalex == 4.0 && scaley == 4.0) return pixScaleGray4xLI(pixs); /* General case */ pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyText(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleGrayLILow(datad, wd, hd, wpld, datas, ws, hs, wpls); return pixd; } /*! * pixScaleGray2xLI() * * Input: pixs (8 bpp grayscale, not cmapped) * Return: pixd, or null on error * * Notes: * (1) This is a special case of gray linear interpolated scaling, * for 2x upscaling. It is about 6x faster than using * the generic pixScaleGrayLI(). * (2) The speed on intel hardware is about * 100 * 10^6 dest-pixels/sec/GHz */ PIX * pixScaleGray2xLI(PIX *pixs) { l_int32 ws, hs, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleGray2xLI"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(2 * ws, 2 * hs, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleGray2xLILow(datad, wpld, datas, ws, hs, wpls); return pixd; } /*! * pixScaleGray4xLI() * * Input: pixs (8 bpp grayscale, not cmapped) * Return: pixd, or null on error * * Notes: * (1) This is a special case of gray linear interpolated scaling, * for 4x upscaling. It is about 12x faster than using * the generic pixScaleGrayLI(). * (2) The speed on intel hardware is about * 160 * 10^6 dest-pixels/sec/GHz. */ PIX * pixScaleGray4xLI(PIX *pixs) { l_int32 ws, hs, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleGray4xLI"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, cmapped or not 8 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(4 * ws, 4 * hs, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 4.0, 4.0); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleGray4xLILow(datad, wpld, datas, ws, hs, wpls); return pixd; } /*------------------------------------------------------------------* * Scaling by closest pixel sampling * *------------------------------------------------------------------*/ /*! * pixScaleBySampling() * * Input: pixs (1, 2, 4, 8, 16, 32 bpp) * scalex, scaley (both > 0.0) * Return: pixd, or null on error * * Notes: * (1) This function samples from the source without * filtering. As a result, aliasing will occur for * subsampling (@scalex and/or @scaley < 1.0). * (2) If @scalex == 1.0 and @scaley == 1.0, returns a copy. */ PIX * pixScaleBySampling(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, d, wpls, wd, hd, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleBySampling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factor <= 0", procName, NULL); if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); if ((d = pixGetDepth(pixs)) == 1) return pixScaleBinary(pixs, scalex, scaley); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopySpp(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleBySamplingLow(datad, wd, hd, wpld, datas, ws, hs, d, wpls); if (d == 32 && pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); return pixd; } /*! * pixScaleBySamplingToSize() * * Input: pixs (1, 2, 4, 8, 16 and 32 bpp) * wd (target width; use 0 if using height as target) * hd (target height; use 0 if using width as target) * Return: pixd, or null on error * * Notes: * (1) This guarantees that the output scaled image has the * dimension(s) you specify. * - To specify the width with isotropic scaling, set @hd = 0. * - To specify the height with isotropic scaling, set @wd = 0. * - If both @wd and @hd are specified, the image is scaled * (in general, anisotropically) to that size. * - It is an error to set both @wd and @hd to 0. */ PIX * pixScaleBySamplingToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h; l_float32 scalex, scaley; PROCNAME("pixScaleBySamplingToSize"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (wd <= 0 && hd <= 0) return (PIX *)ERROR_PTR("neither wd nor hd > 0", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (wd <= 0) { scaley = (l_float32)hd / (l_float32)h; scalex = scaley; } else if (hd <= 0) { scalex = (l_float32)wd / (l_float32)w; scaley = scalex; } else { scalex = (l_float32)wd / (l_float32)w; scaley = (l_float32)hd / (l_float32)h; } return pixScaleBySampling(pixs, scalex, scaley); } /*! * pixScaleByIntSubsampling() * * Input: pixs (1, 2, 4, 8, 16, 32 bpp) * factor (integer subsampling) * Return: pixd, or null on error * * Notes: * (1) Simple interface to pixScaleBySampling(), for * isotropic integer reduction. * (2) If @factor == 1, returns a copy. */ PIX * pixScaleByIntSubsampling(PIX *pixs, l_int32 factor) { l_float32 scale; PROCNAME("pixScaleByIntSubsampling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (factor <= 1) { if (factor < 1) L_ERROR("factor must be >= 1; returning a copy\n", procName); return pixCopy(NULL, pixs); } scale = 1. / (l_float32)factor; return pixScaleBySampling(pixs, scale, scale); } /*------------------------------------------------------------------* * Fast integer factor subsampling RGB to gray * *------------------------------------------------------------------*/ /*! * pixScaleRGBToGrayFast() * * Input: pixs (32 bpp rgb) * factor (integer reduction factor >= 1) * color (one of COLOR_RED, COLOR_GREEN, COLOR_BLUE) * Return: pixd (8 bpp), or null on error * * Notes: * (1) This does simultaneous subsampling by an integer factor and * extraction of the color from the RGB pix. * (2) It is designed for maximum speed, and is used for quickly * generating a downsized grayscale image from a higher resolution * RGB image. This would typically be used for image analysis. * (3) The standard color byte order (RGBA) is assumed. */ PIX * pixScaleRGBToGrayFast(PIX *pixs, l_int32 factor, l_int32 color) { l_int32 byteval, shift; l_int32 i, j, ws, hs, wd, hd, wpls, wpld; l_uint32 *datas, *words, *datad, *lined; l_float32 scale; PIX *pixd; PROCNAME("pixScaleRGBToGrayFast"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); if (color == COLOR_RED) shift = L_RED_SHIFT; else if (color == COLOR_GREEN) shift = L_GREEN_SHIFT; else if (color == COLOR_BLUE) shift = L_BLUE_SHIFT; else return (PIX *)ERROR_PTR("invalid color", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = ws / factor; hd = hs / factor; if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); scale = 1. / (l_float32) factor; pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { words = datas + i * factor * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++, words += factor) { byteval = ((*words) >> shift) & 0xff; SET_DATA_BYTE(lined, j, byteval); } } return pixd; } /*! * pixScaleRGBToBinaryFast() * * Input: pixs (32 bpp RGB) * factor (integer reduction factor >= 1) * thresh (binarization threshold) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This does simultaneous subsampling by an integer factor and * conversion from RGB to gray to binary. * (2) It is designed for maximum speed, and is used for quickly * generating a downsized binary image from a higher resolution * RGB image. This would typically be used for image analysis. * (3) It uses the green channel to represent the RGB pixel intensity. */ PIX * pixScaleRGBToBinaryFast(PIX *pixs, l_int32 factor, l_int32 thresh) { l_int32 byteval; l_int32 i, j, ws, hs, wd, hd, wpls, wpld; l_uint32 *datas, *words, *datad, *lined; l_float32 scale; PIX *pixd; PROCNAME("pixScaleRGBToBinaryFast"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("depth not 32 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = ws / factor; hd = hs / factor; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); scale = 1. / (l_float32) factor; pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { words = datas + i * factor * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++, words += factor) { byteval = ((*words) >> L_GREEN_SHIFT) & 0xff; if (byteval < thresh) SET_DATA_BIT(lined, j); } } return pixd; } /*! * pixScaleGrayToBinaryFast() * * Input: pixs (8 bpp grayscale) * factor (integer reduction factor >= 1) * thresh (binarization threshold) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This does simultaneous subsampling by an integer factor and * thresholding from gray to binary. * (2) It is designed for maximum speed, and is used for quickly * generating a downsized binary image from a higher resolution * gray image. This would typically be used for image analysis. */ PIX * pixScaleGrayToBinaryFast(PIX *pixs, l_int32 factor, l_int32 thresh) { l_int32 byteval; l_int32 i, j, ws, hs, wd, hd, wpls, wpld, sj; l_uint32 *datas, *datad, *lines, *lined; l_float32 scale; PIX *pixd; PROCNAME("pixScaleGrayToBinaryFast"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("factor must be >= 1", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("depth not 8 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = ws / factor; hd = hs / factor; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); scale = 1. / (l_float32) factor; pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lines = datas + i * factor * wpls; lined = datad + i * wpld; for (j = 0, sj = 0; j < wd; j++, sj += factor) { byteval = GET_DATA_BYTE(lines, sj); if (byteval < thresh) SET_DATA_BIT(lined, j); } } return pixd; } /*------------------------------------------------------------------* * Downscaling with (antialias) smoothing * *------------------------------------------------------------------*/ /*! * pixScaleSmooth() * * Input: pixs (2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap) * scalex, scaley (must both be < 0.7) * Return: pixd, or null on error * * Notes: * (1) This function should only be used when the scale factors are less * than or equal to 0.7 (i.e., more than about 1.42x reduction). * If either scale factor is larger than 0.7, we issue a warning * and invoke pixScale(). * (2) This works only on 2, 4, 8 and 32 bpp images, and if there is * a colormap, it is removed by converting to RGB. In other * cases, we issue a warning and invoke pixScale(). * (3) It does simple (flat filter) convolution, with a filter size * commensurate with the amount of reduction, to avoid antialiasing. * (4) It does simple subsampling after smoothing, which is appropriate * for this range of scaling. Linear interpolation gives essentially * the same result with more computation for these scale factors, * so we don't use it. * (5) The result is the same as doing a full block convolution followed by * subsampling, but this is faster because the results of the block * convolution are only computed at the subsampling locations. * In fact, the computation time is approximately independent of * the scale factor, because the convolution kernel is adjusted * so that each source pixel is summed approximately once. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixScaleSmooth(PIX *pix, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, d, wd, hd, wpls, wpld, isize; l_uint32 *datas, *datad; l_float32 minscale, size; PIX *pixs, *pixd; PROCNAME("pixScaleSmooth"); if (!pix) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); if (scalex >= 0.7 || scaley >= 0.7) { L_WARNING("scaling factor not < 0.7; do regular scaling\n", procName); return pixScale(pix, scalex, scaley); } /* Remove colormap if necessary. * If 2 bpp or 4 bpp gray, convert to 8 bpp */ d = pixGetDepth(pix); if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", procName); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else if (d == 2 || d == 4) { pixs = pixConvertTo8(pix, FALSE); d = 8; } else { pixs = pixClone(pix); } if (d != 8 && d != 32) { /* d == 1 or d == 16 */ L_WARNING("depth not 8 or 32 bpp; do regular scaling\n", procName); pixDestroy(&pixs); return pixScale(pix, scalex, scaley); } /* If 1.42 < 1/minscale < 2.5, use isize = 2 * If 2.5 =< 1/minscale < 3.5, use isize = 3, etc. * Under no conditions use isize < 2 */ minscale = L_MIN(scalex, scaley); size = 1.0 / minscale; /* ideal filter full width */ isize = L_MAX(2, (l_int32)(size + 0.5)); pixGetDimensions(pixs, &ws, &hs, NULL); if ((ws < isize) || (hs < isize)) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixs too small", procName, NULL); } datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if (wd < 1 || hd < 1) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd too small", procName, NULL); } if ((pixd = pixCreate(wd, hd, d)) == NULL) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleSmoothLow(datad, wd, hd, wpld, datas, ws, hs, d, wpls, isize); if (d == 32 && pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); pixDestroy(&pixs); return pixd; } /*! * pixScaleRGBToGray2() * * Input: pixs (32 bpp rgb) * rwt, gwt, bwt (must sum to 1.0) * Return: pixd, (8 bpp, 2x reduced), or null on error */ PIX * pixScaleRGBToGray2(PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 wd, hd, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleRGBToGray2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (rwt + gwt + bwt < 0.98 || rwt + gwt + bwt > 1.02) return (PIX *)ERROR_PTR("sum of wts should be 1.0", procName, NULL); wd = pixGetWidth(pixs) / 2; hd = pixGetHeight(pixs) / 2; wpls = pixGetWpl(pixs); datas = pixGetData(pixs); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); scaleRGBToGray2Low(datad, wd, hd, wpld, datas, wpls, rwt, gwt, bwt); return pixd; } /*------------------------------------------------------------------* * Downscaling with (antialias) area mapping * *------------------------------------------------------------------*/ /*! * pixScaleAreaMap() * * Input: pixs (2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap) * scalex, scaley (must both be <= 0.7) * Return: pixd, or null on error * * Notes: * (1) This function should only be used when the scale factors are less * than or equal to 0.7 (i.e., more than about 1.42x reduction). * If either scale factor is larger than 0.7, we issue a warning * and invoke pixScale(). * (2) This works only on 2, 4, 8 and 32 bpp images. If there is * a colormap, it is removed by converting to RGB. In other * cases, we issue a warning and invoke pixScale(). * (3) It does a relatively expensive area mapping computation, to * avoid antialiasing. It is about 2x slower than pixScaleSmooth(), * but the results are much better on fine text. * (4) This is typically about 20% faster for the special cases of * 2x, 4x, 8x and 16x reduction. * (5) Surprisingly, there is no speedup (and a slight quality * impairment) if you do as many successive 2x reductions as * possible, ending with a reduction with a scale factor larger * than 0.5. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixScaleAreaMap(PIX *pix, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, d, wd, hd, wpls, wpld; l_uint32 *datas, *datad; l_float32 maxscale; PIX *pixs, *pixd, *pixt1, *pixt2, *pixt3; PROCNAME("pixScaleAreaMap"); if (!pix) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); d = pixGetDepth(pix); if (d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 2, 4, 8 or 32 bpp", procName, NULL); maxscale = L_MAX(scalex, scaley); if (maxscale >= 0.7) { L_WARNING("scaling factors not < 0.7; do regular scaling\n", procName); return pixScale(pix, scalex, scaley); } /* Special cases: 2x, 4x, 8x, 16x reduction */ if (scalex == 0.5 && scaley == 0.5) return pixScaleAreaMap2(pix); if (scalex == 0.25 && scaley == 0.25) { pixt1 = pixScaleAreaMap2(pix); pixd = pixScaleAreaMap2(pixt1); pixDestroy(&pixt1); return pixd; } if (scalex == 0.125 && scaley == 0.125) { pixt1 = pixScaleAreaMap2(pix); pixt2 = pixScaleAreaMap2(pixt1); pixd = pixScaleAreaMap2(pixt2); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } if (scalex == 0.0625 && scaley == 0.0625) { pixt1 = pixScaleAreaMap2(pix); pixt2 = pixScaleAreaMap2(pixt1); pixt3 = pixScaleAreaMap2(pixt2); pixd = pixScaleAreaMap2(pixt3); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); return pixd; } /* Remove colormap if necessary. * If 2 bpp or 4 bpp gray, convert to 8 bpp */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", procName); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else if (d == 2 || d == 4) { pixs = pixConvertTo8(pix, FALSE); d = 8; } else { pixs = pixClone(pix); } pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if (wd < 1 || hd < 1) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd too small", procName, NULL); } if ((pixd = pixCreate(wd, hd, d)) == NULL) { pixDestroy(&pixs); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (d == 8) { scaleGrayAreaMapLow(datad, wd, hd, wpld, datas, ws, hs, wpls); } else { /* RGB, d == 32 */ scaleColorAreaMapLow(datad, wd, hd, wpld, datas, ws, hs, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, scalex, scaley); } pixDestroy(&pixs); return pixd; } /*! * pixScaleAreaMap2() * * Input: pixs (2, 4, 8 or 32 bpp; and 2, 4, 8 bpp with colormap) * Return: pixd, or null on error * * Notes: * (1) This function does an area mapping (average) for 2x * reduction. * (2) This works only on 2, 4, 8 and 32 bpp images. If there is * a colormap, it is removed by converting to RGB. * (3) Speed on 3 GHz processor: * Color: 160 Mpix/sec * Gray: 700 Mpix/sec * This contrasts with the speed of the general pixScaleAreaMap(): * Color: 35 Mpix/sec * Gray: 50 Mpix/sec * (4) From (3), we see that this special function is about 4.5x * faster for color and 14x faster for grayscale * (5) Consequently, pixScaleAreaMap2() is incorporated into the * general area map scaling function, for the special cases * of 2x, 4x, 8x and 16x reduction. */ PIX * pixScaleAreaMap2(PIX *pix) { l_int32 wd, hd, d, wpls, wpld; l_uint32 *datas, *datad; PIX *pixs, *pixd; PROCNAME("pixScaleAreaMap2"); if (!pix) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); d = pixGetDepth(pix); if (d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 2, 4, 8 or 32 bpp", procName, NULL); /* Remove colormap if necessary. * If 2 bpp or 4 bpp gray, convert to 8 bpp */ if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) { L_WARNING("pix has colormap; removing\n", procName); pixs = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixs); } else if (d == 2 || d == 4) { pixs = pixConvertTo8(pix, FALSE); d = 8; } else { pixs = pixClone(pix); } wd = pixGetWidth(pixs) / 2; hd = pixGetHeight(pixs) / 2; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreate(wd, hd, d); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); scaleAreaMapLow2(datad, wd, hd, wpld, datas, d, wpls); if (pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, 0.5, 0.5); pixDestroy(&pixs); return pixd; } /*------------------------------------------------------------------* * Binary scaling by closest pixel sampling * *------------------------------------------------------------------*/ /*! * pixScaleBinary() * * Input: pixs (1 bpp) * scalex, scaley (both > 0.0) * Return: pixd, or null on error * * Notes: * (1) This function samples from the source without * filtering. As a result, aliasing will occur for * subsampling (scalex and scaley < 1.0). */ PIX * pixScaleBinary(PIX *pixs, l_float32 scalex, l_float32 scaley) { l_int32 ws, hs, wpls, wd, hd, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleBinary"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factor <= 0", procName, NULL); if (scalex == 1.0 && scaley == 1.0) return pixCopy(NULL, pixs); pixGetDimensions(pixs, &ws, &hs, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wd = (l_int32)(scalex * (l_float32)ws + 0.5); hd = (l_int32)(scaley * (l_float32)hs + 0.5); if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, scalex, scaley); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleBinaryLow(datad, wd, hd, wpld, datas, ws, hs, wpls); return pixd; } /*------------------------------------------------------------------* * Scale-to-gray (1 bpp --> 8 bpp; arbitrary downscaling) * *------------------------------------------------------------------*/ /*! * pixScaleToGray() * * Input: pixs (1 bpp) * scalefactor (reduction: must be > 0.0 and < 1.0) * Return: pixd (8 bpp), scaled down by scalefactor in each direction, * or NULL on error. * * Notes: * * For faster scaling in the range of scalefactors from 0.0625 to 0.5, * with very little difference in quality, use pixScaleToGrayFast(). * * Binary images have sharp edges, so they intrinsically have very * high frequency content. To avoid aliasing, they must be low-pass * filtered, which tends to blur the edges. How can we keep relatively * crisp edges without aliasing? The trick is to do binary upscaling * followed by a power-of-2 scaleToGray. For large reductions, where * you don't end up with much detail, some corners can be cut. * * The intent here is to get high quality reduced grayscale * images with relatively little computation. We do binary * pre-scaling followed by scaleToGrayN() for best results, * esp. to avoid excess blur when the scale factor is near * an inverse power of 2. Where a low-pass filter is required, * we use simple convolution kernels: either the hat filter for * linear interpolation or a flat filter for larger downscaling. * Other choices, such as a perfect bandpass filter with infinite extent * (the sinc) or various approximations to it (e.g., lanczos), are * unnecessarily expensive. * * The choices made are as follows: * (1) Do binary upscaling before scaleToGrayN() for scalefactors > 1/8 * (2) Do binary downscaling before scaleToGray8() for scalefactors * between 1/16 and 1/8. * (3) Use scaleToGray16() before grayscale downscaling for * scalefactors less than 1/16 * Another reasonable choice would be to start binary downscaling * for scalefactors below 1/4, rather than below 1/8 as we do here. * * The general scaling rules, not all of which are used here, go as follows: * (1) For grayscale upscaling, use pixScaleGrayLI(). However, * note that edges will be visibly blurred for scalefactors * near (but above) 1.0. Replication will avoid edge blur, * and should be considered for factors very near 1.0. * (2) For grayscale downscaling with a scale factor larger than * about 0.7, use pixScaleGrayLI(). For scalefactors near * (but below) 1.0, you tread between Scylla and Charybdis. * pixScaleGrayLI() again gives edge blurring, but * pixScaleBySampling() gives visible aliasing. * (3) For grayscale downscaling with a scale factor smaller than * about 0.7, use pixScaleSmooth() * (4) For binary input images, do as much scale to gray as possible * using the special integer functions (2, 3, 4, 8 and 16). * (5) It is better to upscale in binary, followed by scaleToGrayN() * than to do scaleToGrayN() followed by an upscale using either * LI or oversampling. * (6) It may be better to downscale in binary, followed by * scaleToGrayN() than to first use scaleToGrayN() followed by * downscaling. For downscaling between 8x and 16x, this is * a reasonable option. * (7) For reductions greater than 16x, it's reasonable to use * scaleToGray16() followed by further grayscale downscaling. */ PIX * pixScaleToGray(PIX *pixs, l_float32 scalefactor) { l_int32 w, h, minsrc, mindest; l_float32 mag, red; PIX *pixt, *pixd; PROCNAME("pixScaleToGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (scalefactor <= 0.0) return (PIX *)ERROR_PTR("scalefactor <= 0.0", procName, NULL); if (scalefactor >= 1.0) return (PIX *)ERROR_PTR("scalefactor >= 1.0", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); minsrc = L_MIN(w, h); mindest = (l_int32)((l_float32)minsrc * scalefactor); if (mindest < 2) return (PIX *)ERROR_PTR("scalefactor too small", procName, NULL); if (scalefactor > 0.5) { /* see note (5) */ mag = 2.0 * scalefactor; /* will be < 2.0 */ /* fprintf(stderr, "2x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixScaleToGray2(pixt); } else if (scalefactor == 0.5) { return pixd = pixScaleToGray2(pixs); } else if (scalefactor > 0.33333) { /* see note (5) */ mag = 3.0 * scalefactor; /* will be < 1.5 */ /* fprintf(stderr, "3x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixScaleToGray3(pixt); } else if (scalefactor > 0.25) { /* see note (5) */ mag = 4.0 * scalefactor; /* will be < 1.3333 */ /* fprintf(stderr, "4x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixScaleToGray4(pixt); } else if (scalefactor == 0.25) { return pixd = pixScaleToGray4(pixs); } else if (scalefactor > 0.16667) { /* see note (5) */ mag = 6.0 * scalefactor; /* will be < 1.5 */ /* fprintf(stderr, "6x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixScaleToGray6(pixt); } else if (scalefactor == 0.16667) { return pixd = pixScaleToGray6(pixs); } else if (scalefactor > 0.125) { /* see note (5) */ mag = 8.0 * scalefactor; /* will be < 1.3333 */ /* fprintf(stderr, "8x with mag %7.3f\n", mag); */ if ((pixt = pixScaleBinary(pixs, mag, mag)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixScaleToGray8(pixt); } else if (scalefactor == 0.125) { return pixd = pixScaleToGray8(pixs); } else if (scalefactor > 0.0625) { /* see note (6) */ red = 8.0 * scalefactor; /* will be > 0.5 */ /* fprintf(stderr, "8x with red %7.3f\n", red); */ if ((pixt = pixScaleBinary(pixs, red, red)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixScaleToGray8(pixt); } else if (scalefactor == 0.0625) { return pixd = pixScaleToGray16(pixs); } else { /* see note (7) */ red = 16.0 * scalefactor; /* will be <= 1.0 */ /* fprintf(stderr, "16x with red %7.3f\n", red); */ if ((pixt = pixScaleToGray16(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); if (red < 0.7) pixd = pixScaleSmooth(pixt, red, red); /* see note (3) */ else pixd = pixScaleGrayLI(pixt, red, red); /* see note (2) */ } pixDestroy(&pixt); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); else return pixd; } /*! * pixScaleToGrayFast() * * Input: pixs (1 bpp) * scalefactor (reduction: must be > 0.0 and < 1.0) * Return: pixd (8 bpp), scaled down by scalefactor in each direction, * or NULL on error. * * Notes: * (1) See notes in pixScaleToGray() for the basic approach. * (2) This function is considerably less expensive than pixScaleToGray() * for scalefactor in the range (0.0625 ... 0.5), and the * quality is nearly as good. * (3) Unlike pixScaleToGray(), which does binary upscaling before * downscaling for scale factors >= 0.0625, pixScaleToGrayFast() * first downscales in binary for all scale factors < 0.5, and * then does a 2x scale-to-gray as the final step. For * scale factors < 0.0625, both do a 16x scale-to-gray, followed * by further grayscale reduction. */ PIX * pixScaleToGrayFast(PIX *pixs, l_float32 scalefactor) { l_int32 w, h, minsrc, mindest; l_float32 eps, factor; PIX *pixt, *pixd; PROCNAME("pixScaleToGrayFast"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (scalefactor <= 0.0) return (PIX *)ERROR_PTR("scalefactor <= 0.0", procName, NULL); if (scalefactor >= 1.0) return (PIX *)ERROR_PTR("scalefactor >= 1.0", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); minsrc = L_MIN(w, h); mindest = (l_int32)((l_float32)minsrc * scalefactor); if (mindest < 2) return (PIX *)ERROR_PTR("scalefactor too small", procName, NULL); eps = 0.0001; /* Handle the special cases */ if (scalefactor > 0.5 - eps && scalefactor < 0.5 + eps) return pixScaleToGray2(pixs); else if (scalefactor > 0.33333 - eps && scalefactor < 0.33333 + eps) return pixScaleToGray3(pixs); else if (scalefactor > 0.25 - eps && scalefactor < 0.25 + eps) return pixScaleToGray4(pixs); else if (scalefactor > 0.16666 - eps && scalefactor < 0.16666 + eps) return pixScaleToGray6(pixs); else if (scalefactor > 0.125 - eps && scalefactor < 0.125 + eps) return pixScaleToGray8(pixs); else if (scalefactor > 0.0625 - eps && scalefactor < 0.0625 + eps) return pixScaleToGray16(pixs); if (scalefactor > 0.0625) { /* scale binary first */ factor = 2.0 * scalefactor; if ((pixt = pixScaleBinary(pixs, factor, factor)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixScaleToGray2(pixt); } else { /* scalefactor < 0.0625; scale-to-gray first */ factor = 16.0 * scalefactor; /* will be < 1.0 */ if ((pixt = pixScaleToGray16(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); if (factor < 0.7) pixd = pixScaleSmooth(pixt, factor, factor); else pixd = pixScaleGrayLI(pixt, factor, factor); } pixDestroy(&pixt); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); else return pixd; } /*-----------------------------------------------------------------------* * Scale-to-gray (1 bpp --> 8 bpp; integer downscaling) * *-----------------------------------------------------------------------*/ /*! * pixScaleToGray2() * * Input: pixs (1 bpp) * Return: pixd (8 bpp), scaled down by 2x in each direction, * or null on error. */ PIX * pixScaleToGray2(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_uint32 *sumtab; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleToGray2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 2; hd = hs / 2; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", procName, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if ((sumtab = makeSumTabSG2()) == NULL) return (PIX *)ERROR_PTR("sumtab not made", procName, NULL); if ((valtab = makeValTabSG2()) == NULL) return (PIX *)ERROR_PTR("valtab not made", procName, NULL); scaleToGray2Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); FREE(sumtab); FREE(valtab); return pixd; } /*! * pixScaleToGray3() * * Input: pixs (1 bpp) * Return: pixd (8 bpp), scaled down by 3x in each direction, * or null on error. * * Notes: * (1) Speed is about 100 x 10^6 src-pixels/sec/GHz. * Another way to express this is it processes 1 src pixel * in about 10 cycles. * (2) The width of pixd is truncated is truncated to a factor of 8. */ PIX * pixScaleToGray3(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_uint32 *sumtab; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleToGray3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = (ws / 3) & 0xfffffff8; /* truncate to factor of 8 */ hd = hs / 3; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", procName, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.33333, 0.33333); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if ((sumtab = makeSumTabSG3()) == NULL) return (PIX *)ERROR_PTR("sumtab not made", procName, NULL); if ((valtab = makeValTabSG3()) == NULL) return (PIX *)ERROR_PTR("valtab not made", procName, NULL); scaleToGray3Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); FREE(sumtab); FREE(valtab); return pixd; } /*! * pixScaleToGray4() * * Input: pixs (1 bpp) * Return: pixd (8 bpp), scaled down by 4x in each direction, * or null on error. * * Notes: * (1) The width of pixd is truncated is truncated to a factor of 2. */ PIX * pixScaleToGray4(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_uint32 *sumtab; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleToGray4"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = (ws / 4) & 0xfffffffe; /* truncate to factor of 2 */ hd = hs / 4; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", procName, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.25, 0.25); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if ((sumtab = makeSumTabSG4()) == NULL) return (PIX *)ERROR_PTR("sumtab not made", procName, NULL); if ((valtab = makeValTabSG4()) == NULL) return (PIX *)ERROR_PTR("valtab not made", procName, NULL); scaleToGray4Low(datad, wd, hd, wpld, datas, wpls, sumtab, valtab); FREE(sumtab); FREE(valtab); return pixd; } /*! * pixScaleToGray6() * * Input: pixs (1 bpp) * Return: pixd (8 bpp), scaled down by 6x in each direction, * or null on error. * * Notes: * (1) The width of pixd is truncated is truncated to a factor of 8. */ PIX * pixScaleToGray6(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd, wpld, wpls; l_int32 *tab8; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleToGray6"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = (ws / 6) & 0xfffffff8; /* truncate to factor of 8 */ hd = hs / 6; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", procName, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.16667, 0.16667); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if ((tab8 = makePixelSumTab8()) == NULL) return (PIX *)ERROR_PTR("tab8 not made", procName, NULL); if ((valtab = makeValTabSG6()) == NULL) return (PIX *)ERROR_PTR("valtab not made", procName, NULL); scaleToGray6Low(datad, wd, hd, wpld, datas, wpls, tab8, valtab); FREE(tab8); FREE(valtab); return pixd; } /*! * pixScaleToGray8() * * Input: pixs (1 bpp) * Return: pixd (8 bpp), scaled down by 8x in each direction, * or null on error */ PIX * pixScaleToGray8(PIX *pixs) { l_uint8 *valtab; l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_int32 *tab8; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleToGray8"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 8; /* truncate to nearest dest byte */ hd = hs / 8; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", procName, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.125, 0.125); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if ((tab8 = makePixelSumTab8()) == NULL) return (PIX *)ERROR_PTR("tab8 not made", procName, NULL); if ((valtab = makeValTabSG8()) == NULL) return (PIX *)ERROR_PTR("valtab not made", procName, NULL); scaleToGray8Low(datad, wd, hd, wpld, datas, wpls, tab8, valtab); FREE(tab8); FREE(valtab); return pixd; } /*! * pixScaleToGray16() * * Input: pixs (1 bpp) * Return: pixd (8 bpp), scaled down by 16x in each direction, * or null on error. */ PIX * pixScaleToGray16(PIX *pixs) { l_int32 ws, hs, wd, hd; l_int32 wpld, wpls; l_int32 *tab8; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixScaleToGray16"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 16; hd = hs / 16; if (wd == 0 || hd == 0) return (PIX *)ERROR_PTR("pixs too small", procName, NULL); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.0625, 0.0625); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if ((tab8 = makePixelSumTab8()) == NULL) return (PIX *)ERROR_PTR("tab8 not made", procName, NULL); scaleToGray16Low(datad, wd, hd, wpld, datas, wpls, tab8); FREE(tab8); return pixd; } /*------------------------------------------------------------------* * Scale-to-gray mipmap(1 bpp --> 8 bpp, arbitrary reduction) * *------------------------------------------------------------------*/ /*! * pixScaleToGrayMipmap() * * Input: pixs (1 bpp) * scalefactor (reduction: must be > 0.0 and < 1.0) * Return: pixd (8 bpp), scaled down by scalefactor in each direction, * or NULL on error. * * Notes: * * This function is here mainly for pedagogical reasons. * Mip-mapping is widely used in graphics for texture mapping, because * the texture changes smoothly with scale. This is accomplished by * constructing a multiresolution pyramid and, for each pixel, * doing a linear interpolation between corresponding pixels in * the two planes of the pyramid that bracket the desired resolution. * The computation is very efficient, and is implemented in hardware * in high-end graphics cards. * * We can use mip-mapping for scale-to-gray by using two scale-to-gray * reduced images (we don't need the entire pyramid) selected from * the set {2x, 4x, ... 16x}, and interpolating. However, we get * severe aliasing, probably because we are subsampling from the * higher resolution image. The method is very fast, but the result * is very poor. In fact, the results don't look any better than * either subsampling off the higher-res grayscale image or oversampling * on the lower-res image. Consequently, this method should NOT be used * for generating reduced images, scale-to-gray or otherwise. */ PIX * pixScaleToGrayMipmap(PIX *pixs, l_float32 scalefactor) { l_int32 w, h, minsrc, mindest; l_float32 red; PIX *pixs1, *pixs2, *pixt, *pixd; PROCNAME("pixScaleToGrayMipmap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (scalefactor <= 0.0) return (PIX *)ERROR_PTR("scalefactor <= 0.0", procName, NULL); if (scalefactor >= 1.0) return (PIX *)ERROR_PTR("scalefactor >= 1.0", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); minsrc = L_MIN(w, h); mindest = (l_int32)((l_float32)minsrc * scalefactor); if (mindest < 2) return (PIX *)ERROR_PTR("scalefactor too small", procName, NULL); if (scalefactor > 0.5) { pixs1 = pixConvert1To8(NULL, pixs, 255, 0); pixs2 = pixScaleToGray2(pixs); red = scalefactor; } else if (scalefactor == 0.5) { return pixScaleToGray2(pixs); } else if (scalefactor > 0.25) { pixs1 = pixScaleToGray2(pixs); pixs2 = pixScaleToGray4(pixs); red = 2. * scalefactor; } else if (scalefactor == 0.25) { return pixScaleToGray4(pixs); } else if (scalefactor > 0.125) { pixs1 = pixScaleToGray4(pixs); pixs2 = pixScaleToGray8(pixs); red = 4. * scalefactor; } else if (scalefactor == 0.125) { return pixScaleToGray8(pixs); } else if (scalefactor > 0.0625) { pixs1 = pixScaleToGray8(pixs); pixs2 = pixScaleToGray16(pixs); red = 8. * scalefactor; } else if (scalefactor == 0.0625) { return pixScaleToGray16(pixs); } else { /* end of the pyramid; just do it */ red = 16.0 * scalefactor; /* will be <= 1.0 */ if ((pixt = pixScaleToGray16(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); if (red < 0.7) pixd = pixScaleSmooth(pixt, red, red); else pixd = pixScaleGrayLI(pixt, red, red); pixDestroy(&pixt); return pixd; } pixd = pixScaleMipmap(pixs1, pixs2, red); pixDestroy(&pixs1); pixDestroy(&pixs2); return pixd; } /*------------------------------------------------------------------* * Grayscale scaling using mipmap * *------------------------------------------------------------------*/ /*! * pixScaleMipmap() * * Input: pixs1 (high res 8 bpp, no cmap) * pixs2 (low res -- 2x reduced -- 8 bpp, no cmap) * scale (reduction with respect to high res image, > 0.5) * Return: 8 bpp pix, scaled down by reduction in each direction, * or NULL on error. * * Notes: * (1) See notes in pixScaleToGrayMipmap(). * (2) This function suffers from aliasing effects that are * easily seen in document images. */ PIX * pixScaleMipmap(PIX *pixs1, PIX *pixs2, l_float32 scale) { l_int32 ws1, hs1, ws2, hs2, wd, hd, wpls1, wpls2, wpld; l_uint32 *datas1, *datas2, *datad; PIX *pixd; PROCNAME("pixScaleMipmap"); if (!pixs1 || pixGetDepth(pixs1) != 8 || pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("pixs1 underdefined, not 8 bpp, or cmapped", procName, NULL); if (!pixs2 || pixGetDepth(pixs2) != 8 || pixGetColormap(pixs2)) return (PIX *)ERROR_PTR("pixs2 underdefined, not 8 bpp, or cmapped", procName, NULL); pixGetDimensions(pixs1, &ws1, &hs1, NULL); pixGetDimensions(pixs2, &ws2, &hs2, NULL); if (scale > 1.0 || scale < 0.5) return (PIX *)ERROR_PTR("scale not in [0.5, 1.0]", procName, NULL); if (ws1 < 2 * ws2) return (PIX *)ERROR_PTR("invalid width ratio", procName, NULL); if (hs1 < 2 * hs2) return (PIX *)ERROR_PTR("invalid height ratio", procName, NULL); /* Generate wd and hd from the lower resolution dimensions, * to guarantee staying within both src images */ datas1 = pixGetData(pixs1); wpls1 = pixGetWpl(pixs1); datas2 = pixGetData(pixs2); wpls2 = pixGetWpl(pixs2); wd = (l_int32)(2. * scale * pixGetWidth(pixs2)); hd = (l_int32)(2. * scale * pixGetHeight(pixs2)); if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs1); pixScaleResolution(pixd, scale, scale); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); scaleMipmapLow(datad, wd, hd, wpld, datas1, wpls1, datas2, wpls2, scale); return pixd; } /*------------------------------------------------------------------* * Replicated (integer) expansion * *------------------------------------------------------------------*/ /*! * pixExpandReplicate() * * Input: pixs (1, 2, 4, 8, 16, 32 bpp) * factor (integer scale factor for replicative expansion) * Return: pixd (scaled up), or null on error. */ PIX * pixExpandReplicate(PIX *pixs, l_int32 factor) { l_int32 w, h, d, wd, hd, wpls, wpld, start, i, j, k; l_uint8 sval; l_uint16 sval16; l_uint32 sval32; l_uint32 *lines, *datas, *lined, *datad; PIX *pixd; PROCNAME("pixExpandReplicate"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("depth not in {1,2,4,8,16,32}", procName, NULL); if (factor <= 0) return (PIX *)ERROR_PTR("factor <= 0; invalid", procName, NULL); if (factor == 1) return pixCopy(NULL, pixs); if (d == 1) return pixExpandBinaryReplicate(pixs, factor); wd = factor * w; hd = factor * h; if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyColormap(pixd, pixs); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); switch (d) { case 2: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_DIBIT(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_DIBIT(lined, start + k, sval); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 4: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_QBIT(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_QBIT(lined, start + k, sval); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 8: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval = GET_DATA_BYTE(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_BYTE(lined, start + k, sval); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 16: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval16 = GET_DATA_TWO_BYTES(lines, j); start = factor * j; for (k = 0; k < factor; k++) SET_DATA_TWO_BYTES(lined, start + k, sval16); } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; case 32: for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { sval32 = *(lines + j); start = factor * j; for (k = 0; k < factor; k++) *(lined + start + k) = sval32; } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } break; default: fprintf(stderr, "invalid depth\n"); } if (d == 32 && pixGetSpp(pixs) == 4) pixScaleAndTransferAlpha(pixd, pixs, (l_float32)factor, (l_float32)factor); return pixd; } /*------------------------------------------------------------------* * Scale 2x followed by binarization * *------------------------------------------------------------------*/ /*! * pixScaleGray2xLIThresh() * * Input: pixs (8 bpp, not cmapped) * thresh (between 0 and 256) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This does 2x upscale on pixs, using linear interpolation, * followed by thresholding to binary. * (2) Buffers are used to avoid making a large grayscale image. */ PIX * pixScaleGray2xLIThresh(PIX *pixs, l_int32 thresh) { l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad, *lines, *lined, *lineb; PIX *pixd; PROCNAME("pixScaleGray2xLIThresh"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); if (thresh < 0 || thresh > 256) return (PIX *)ERROR_PTR("thresh must be in [0, ... 256]", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 2 * ws; hd = 2 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffer for 2 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)CALLOC(2 * wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("lineb not made", procName, NULL); /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Do all but last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; /* do 2 dest lines at a time */ scaleGray2xLILineLow(lineb, wplb, lines, ws, wpls, 0); thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh); thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh); } /* Do last src line */ lines = datas + hsm * wpls; lined = datad + 2 * hsm * wpld; scaleGray2xLILineLow(lineb, wplb, lines, ws, wpls, 1); thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh); thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh); FREE(lineb); return pixd; } /*! * pixScaleGray2xLIDither() * * Input: pixs (8 bpp, not cmapped) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This does 2x upscale on pixs, using linear interpolation, * followed by Floyd-Steinberg dithering to binary. * (2) Buffers are used to avoid making a large grayscale image. * - Two line buffers are used for the src, required for the 2x * LI upscale. * - Three line buffers are used for the intermediate image. * Two are filled with each 2xLI row operation; the third is * needed because the upscale and dithering ops are out of sync. */ PIX * pixScaleGray2xLIDither(PIX *pixs) { l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad; l_uint32 *lined; l_uint32 *lineb; /* 2 intermediate buffer lines */ l_uint32 *linebp; /* 1 intermediate buffer line */ l_uint32 *bufs; /* 2 source buffer lines */ PIX *pixd; PROCNAME("pixScaleGray2xLIDither"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 2 * ws; hd = 2 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffers for 2 lines of src image */ if ((bufs = (l_uint32 *)CALLOC(2 * wpls, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs not made", procName, NULL); /* Make line buffer for 2 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)CALLOC(2 * wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("lineb not made", procName, NULL); /* Make line buffer for 1 line of virtual intermediate image */ if ((linebp = (l_uint32 *)CALLOC(wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("linebp not made", procName, NULL); /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 2.0, 2.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Start with the first src and the first dest line */ memcpy(bufs, datas, 4 * wpls); /* first src line */ memcpy(bufs + wpls, datas + wpls, 4 * wpls); /* 2nd src line */ scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 2 i lines */ lined = datad; ditherToBinaryLineLow(lined, wd, lineb, lineb + wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* 1st d line */ /* Do all but last src line */ for (i = 1; i < hsm; i++) { memcpy(bufs, datas + i * wpls, 4 * wpls); /* i-th src line */ memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls); memcpy(linebp, lineb + wplb, 4 * wplb); scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 2 i lines */ lined = datad + 2 * i * wpld; ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* odd dest line */ ditherToBinaryLineLow(lined, wd, lineb, lineb + wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* even dest line */ } /* Do the last src line and the last 3 dest lines */ memcpy(bufs, datas + hsm * wpls, 4 * wpls); /* hsm-th src line */ memcpy(linebp, lineb + wplb, 4 * wplb); /* 1 i line */ scaleGray2xLILineLow(lineb, wplb, bufs, ws, wpls, 1); /* 2 i lines */ ditherToBinaryLineLow(lined + wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* odd dest line */ ditherToBinaryLineLow(lined + 2 * wpld, wd, lineb, lineb + wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* even dest line */ ditherToBinaryLineLow(lined + 3 * wpld, wd, lineb + wplb, NULL, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 1); /* last dest line */ FREE(bufs); FREE(lineb); FREE(linebp); return pixd; } /*------------------------------------------------------------------* * Scale 4x followed by binarization * *------------------------------------------------------------------*/ /*! * pixScaleGray4xLIThresh() * * Input: pixs (8 bpp) * thresh (between 0 and 256) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This does 4x upscale on pixs, using linear interpolation, * followed by thresholding to binary. * (2) Buffers are used to avoid making a large grayscale image. * (3) If a full 4x expanded grayscale image can be kept in memory, * this function is only about 10% faster than separately doing * a linear interpolation to a large grayscale image, followed * by thresholding to binary. */ PIX * pixScaleGray4xLIThresh(PIX *pixs, l_int32 thresh) { l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad, *lines, *lined, *lineb; PIX *pixd; PROCNAME("pixScaleGray4xLIThresh"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); if (thresh < 0 || thresh > 256) return (PIX *)ERROR_PTR("thresh must be in [0, ... 256]", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 4 * ws; hd = 4 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffer for 4 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)CALLOC(4 * wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("lineb not made", procName, NULL); /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 4.0, 4.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Do all but last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 4 * i * wpld; /* do 4 dest lines at a time */ scaleGray4xLILineLow(lineb, wplb, lines, ws, wpls, 0); for (j = 0; j < 4; j++) { thresholdToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, 8, thresh); } } /* Do last src line */ lines = datas + hsm * wpls; lined = datad + 4 * hsm * wpld; scaleGray4xLILineLow(lineb, wplb, lines, ws, wpls, 1); for (j = 0; j < 4; j++) { thresholdToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, 8, thresh); } FREE(lineb); return pixd; } /*! * pixScaleGray4xLIDither() * * Input: pixs (8 bpp, not cmapped) * Return: pixd (1 bpp), or null on error * * Notes: * (1) This does 4x upscale on pixs, using linear interpolation, * followed by Floyd-Steinberg dithering to binary. * (2) Buffers are used to avoid making a large grayscale image. * - Two line buffers are used for the src, required for the * 4xLI upscale. * - Five line buffers are used for the intermediate image. * Four are filled with each 4xLI row operation; the fifth * is needed because the upscale and dithering ops are * out of sync. * (3) If a full 4x expanded grayscale image can be kept in memory, * this function is only about 5% faster than separately doing * a linear interpolation to a large grayscale image, followed * by error-diffusion dithering to binary. */ PIX * pixScaleGray4xLIDither(PIX *pixs) { l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld; l_uint32 *datas, *datad; l_uint32 *lined; l_uint32 *lineb; /* 4 intermediate buffer lines */ l_uint32 *linebp; /* 1 intermediate buffer line */ l_uint32 *bufs; /* 2 source buffer lines */ PIX *pixd; PROCNAME("pixScaleGray4xLIDither"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); wd = 4 * ws; hd = 4 * hs; hsm = hs - 1; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Make line buffers for 2 lines of src image */ if ((bufs = (l_uint32 *)CALLOC(2 * wpls, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs not made", procName, NULL); /* Make line buffer for 4 lines of virtual intermediate image */ wplb = (wd + 3) / 4; if ((lineb = (l_uint32 *)CALLOC(4 * wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("lineb not made", procName, NULL); /* Make line buffer for 1 line of virtual intermediate image */ if ((linebp = (l_uint32 *)CALLOC(wplb, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("linebp not made", procName, NULL); /* Make dest binary image */ if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 4.0, 4.0); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Start with the first src and the first 3 dest lines */ memcpy(bufs, datas, 4 * wpls); /* first src line */ memcpy(bufs + wpls, datas + wpls, 4 * wpls); /* 2nd src line */ scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 4 b lines */ lined = datad; for (j = 0; j < 3; j++) { /* first 3 d lines of Q */ ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, lineb + (j + 1) * wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); } /* Do all but last src line */ for (i = 1; i < hsm; i++) { memcpy(bufs, datas + i * wpls, 4 * wpls); /* i-th src line */ memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls); memcpy(linebp, lineb + 3 * wplb, 4 * wplb); scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 0); /* 4 b lines */ lined = datad + 4 * i * wpld; ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* 4th dest line of Q */ for (j = 0; j < 3; j++) { /* next 3 d lines of Quad */ ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, lineb + (j + 1) * wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); } } /* Do the last src line and the last 5 dest lines */ memcpy(bufs, datas + hsm * wpls, 4 * wpls); /* hsm-th src line */ memcpy(linebp, lineb + 3 * wplb, 4 * wplb); /* 1 b line */ scaleGray4xLILineLow(lineb, wplb, bufs, ws, wpls, 1); /* 4 b lines */ lined = datad + 4 * hsm * wpld; ditherToBinaryLineLow(lined - wpld, wd, linebp, lineb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); /* 4th dest line of Q */ for (j = 0; j < 3; j++) { /* next 3 d lines of Quad */ ditherToBinaryLineLow(lined + j * wpld, wd, lineb + j * wplb, lineb + (j + 1) * wplb, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 0); } /* And finally, the last dest line */ ditherToBinaryLineLow(lined + 3 * wpld, wd, lineb + 3 * wplb, NULL, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1, 1); FREE(bufs); FREE(lineb); FREE(linebp); return pixd; } /*-----------------------------------------------------------------------* * Downscaling using min or max * *-----------------------------------------------------------------------*/ /*! * pixScaleGrayMinMax() * * Input: pixs (8 bpp, not cmapped) * xfact (x downscaling factor; integer) * yfact (y downscaling factor; integer) * type (L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAX_MIN_DIFF) * Return: pixd (8 bpp) * * Notes: * (1) The downscaled pixels in pixd are the min, max or (max - min) * of the corresponding set of xfact * yfact pixels in pixs. * (2) Using L_CHOOSE_MIN is equivalent to a grayscale erosion, * using a brick Sel of size (xfact * yfact), followed by * subsampling within each (xfact * yfact) cell. Using * L_CHOOSE_MAX is equivalent to the corresponding dilation. * (3) Using L_CHOOSE_MAX_MIN_DIFF finds the difference between max * and min values in each cell. * (4) For the special case of downscaling by 2x in both directions, * pixScaleGrayMinMax2() is about 2x more efficient. */ PIX * pixScaleGrayMinMax(PIX *pixs, l_int32 xfact, l_int32 yfact, l_int32 type) { l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k, m; l_int32 minval, maxval, val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixScaleGrayMinMax"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && type != L_CHOOSE_MAX_MIN_DIFF) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (xfact < 1 || yfact < 1) return (PIX *)ERROR_PTR("xfact and yfact must be >= 1", procName, NULL); if (xfact == 2 && yfact == 2) return pixScaleGrayMinMax2(pixs, type); wd = ws / xfact; if (wd == 0) { /* single tile */ wd = 1; xfact = ws; } hd = hs / yfact; if (hd == 0) { /* single tile */ hd = 1; yfact = hs; } if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lined = datad + i * wpld; for (j = 0; j < wd; j++) { if (type == L_CHOOSE_MIN || type == L_CHOOSE_MAX_MIN_DIFF) { minval = 255; for (k = 0; k < yfact; k++) { lines = datas + (yfact * i + k) * wpls; for (m = 0; m < xfact; m++) { val = GET_DATA_BYTE(lines, xfact * j + m); if (val < minval) minval = val; } } } if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAX_MIN_DIFF) { maxval = 0; for (k = 0; k < yfact; k++) { lines = datas + (yfact * i + k) * wpls; for (m = 0; m < xfact; m++) { val = GET_DATA_BYTE(lines, xfact * j + m); if (val > maxval) maxval = val; } } } if (type == L_CHOOSE_MIN) SET_DATA_BYTE(lined, j, minval); else if (type == L_CHOOSE_MAX) SET_DATA_BYTE(lined, j, maxval); else /* type == L_CHOOSE_MAX_MIN_DIFF */ SET_DATA_BYTE(lined, j, maxval - minval); } } return pixd; } /*! * pixScaleGrayMinMax2() * * Input: pixs (8 bpp, not cmapped) * type (L_CHOOSE_MIN, L_CHOOSE_MAX, L_CHOOSE_MAX_MIN_DIFF) * Return: pixd (8 bpp downscaled by 2x) * * Notes: * (1) Special version for 2x reduction. The downscaled pixels * in pixd are the min, max or (max - min) of the corresponding * set of 4 pixels in pixs. * (2) The max and min operations are a special case (for levels 1 * and 4) of grayscale analog to the binary rank scaling operation * pixReduceRankBinary2(). Note, however, that because of * the photometric definition that higher gray values are * lighter, the erosion-like L_CHOOSE_MIN will darken * the resulting image, corresponding to a threshold level 1 * in the binary case. Likewise, L_CHOOSE_MAX will lighten * the pixd, corresponding to a threshold level of 4. * (3) To choose any of the four rank levels in a 2x grayscale * reduction, use pixScaleGrayRank2(). * (4) This runs at about 70 MPix/sec/GHz of source data for * erosion and dilation. */ PIX * pixScaleGrayMinMax2(PIX *pixs, l_int32 type) { l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k; l_int32 minval, maxval; l_int32 val[4]; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixScaleGrayMinMax2"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); pixGetDimensions(pixs, &ws, &hs, NULL); if (ws < 2 || hs < 2) return (PIX *)ERROR_PTR("too small: ws < 2 or hs < 2", procName, NULL); if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX && type != L_CHOOSE_MAX_MIN_DIFF) return (PIX *)ERROR_PTR("invalid type", procName, NULL); wd = ws / 2; hd = hs / 2; if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val[0] = GET_DATA_BYTE(lines, 2 * j); val[1] = GET_DATA_BYTE(lines, 2 * j + 1); val[2] = GET_DATA_BYTE(lines + wpls, 2 * j); val[3] = GET_DATA_BYTE(lines + wpls, 2 * j + 1); if (type == L_CHOOSE_MIN || type == L_CHOOSE_MAX_MIN_DIFF) { minval = 255; for (k = 0; k < 4; k++) { if (val[k] < minval) minval = val[k]; } } if (type == L_CHOOSE_MAX || type == L_CHOOSE_MAX_MIN_DIFF) { maxval = 0; for (k = 0; k < 4; k++) { if (val[k] > maxval) maxval = val[k]; } } if (type == L_CHOOSE_MIN) SET_DATA_BYTE(lined, j, minval); else if (type == L_CHOOSE_MAX) SET_DATA_BYTE(lined, j, maxval); else /* type == L_CHOOSE_MAX_MIN_DIFF */ SET_DATA_BYTE(lined, j, maxval - minval); } } return pixd; } /*-----------------------------------------------------------------------* * Grayscale downscaling using rank value * *-----------------------------------------------------------------------*/ /*! * pixScaleGrayRankCascade() * * Input: pixs (8 bpp, not cmapped) * level1, ... level4 (rank thresholds, in set {0, 1, 2, 3, 4}) * Return: pixd (8 bpp, downscaled by up to 16x) * * Notes: * (1) This performs up to four cascaded 2x rank reductions. * (2) Use level = 0 to truncate the cascade. */ PIX * pixScaleGrayRankCascade(PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4) { PIX *pixt1, *pixt2, *pixt3, *pixt4; PROCNAME("pixScaleGrayRankCascade"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); if (level1 > 4 || level2 > 4 || level3 > 4 || level4 > 4) return (PIX *)ERROR_PTR("levels must not exceed 4", procName, NULL); if (level1 <= 0) { L_WARNING("no reduction because level1 not > 0\n", procName); return pixCopy(NULL, pixs); } pixt1 = pixScaleGrayRank2(pixs, level1); if (level2 <= 0) return pixt1; pixt2 = pixScaleGrayRank2(pixt1, level2); pixDestroy(&pixt1); if (level3 <= 0) return pixt2; pixt3 = pixScaleGrayRank2(pixt2, level3); pixDestroy(&pixt2); if (level4 <= 0) return pixt3; pixt4 = pixScaleGrayRank2(pixt3, level4); pixDestroy(&pixt3); return pixt4; } /*! * pixScaleGrayRank2() * * Input: pixs (8 bpp, no cmap) * rank (1 (darkest), 2, 3, 4 (lightest)) * Return: pixd (8 bpp, downscaled by 2x) * * Notes: * (1) Rank 2x reduction. If rank == 1(4), the downscaled pixels * in pixd are the min(max) of the corresponding set of * 4 pixels in pixs. Values 2 and 3 are intermediate. * (2) This is the grayscale analog to the binary rank scaling operation * pixReduceRankBinary2(). Here, because of the photometric * definition that higher gray values are lighter, rank 1 gives * the darkest pixel, whereas rank 4 gives the lightest pixel. * This is opposite to the binary rank operation. * (3) For rank = 1 and 4, this calls pixScaleGrayMinMax2(), * which runs at about 70 MPix/sec/GHz of source data. * For rank 2 and 3, this runs 3x slower, at about 25 MPix/sec/GHz. */ PIX * pixScaleGrayRank2(PIX *pixs, l_int32 rank) { l_int32 ws, hs, wd, hd, wpls, wpld, i, j, k, m; l_int32 minval, maxval, rankval, minindex, maxindex; l_int32 val[4]; l_int32 midval[4]; /* should only use 2 of these */ l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixScaleGrayRank2"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs undefined, not 8 bpp, or cmapped", procName, NULL); if (rank < 1 || rank > 4) return (PIX *)ERROR_PTR("invalid rank", procName, NULL); if (rank == 1) return pixScaleGrayMinMax2(pixs, L_CHOOSE_MIN); if (rank == 4) return pixScaleGrayMinMax2(pixs, L_CHOOSE_MAX); pixGetDimensions(pixs, &ws, &hs, NULL); wd = ws / 2; hd = hs / 2; if ((pixd = pixCreate(wd, hd, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { val[0] = GET_DATA_BYTE(lines, 2 * j); val[1] = GET_DATA_BYTE(lines, 2 * j + 1); val[2] = GET_DATA_BYTE(lines + wpls, 2 * j); val[3] = GET_DATA_BYTE(lines + wpls, 2 * j + 1); minval = maxval = val[0]; minindex = maxindex = 0; for (k = 1; k < 4; k++) { if (val[k] < minval) { minval = val[k]; minindex = k; continue; } if (val[k] > maxval) { maxval = val[k]; maxindex = k; } } for (k = 0, m = 0; k < 4; k++) { if (k == minindex || k == maxindex) continue; midval[m++] = val[k]; } if (m > 2) /* minval == maxval; all val[k] are the same */ rankval = minval; else if (rank == 2) rankval = L_MIN(midval[0], midval[1]); else /* rank == 3 */ rankval = L_MAX(midval[0], midval[1]); SET_DATA_BYTE(lined, j, rankval); } } return pixd; } /*------------------------------------------------------------------------* * Helper function for transferring alpha with scaling * *------------------------------------------------------------------------*/ /*! * pixScaleAndTransferAlpha() * * Input: pixd (32 bpp, scaled image) * pixs (32 bpp, original unscaled image) * scalex, scaley (both > 0.0) * Return: 0 if OK; 1 on error * * Notes: * (1) This scales the alpha component of pixs and inserts into pixd. */ l_int32 pixScaleAndTransferAlpha(PIX *pixd, PIX *pixs, l_float32 scalex, l_float32 scaley) { PIX *pix1, *pix2; PROCNAME("pixScaleAndTransferAlpha"); if (!pixs || !pixd) return ERROR_INT("pixs and pixd not both defined", procName, 1); if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4) return ERROR_INT("pixs not 32 bpp and 4 spp", procName, 1); if (pixGetDepth(pixd) != 32) return ERROR_INT("pixd not 32 bpp", procName, 1); if (scalex == 1.0 && scaley == 1.0) { pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); return 0; } pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixScale(pix1, scalex, scaley); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); return 0; } /*------------------------------------------------------------------------* * RGB scaling including alpha (blend) component and gamma transform * *------------------------------------------------------------------------*/ /*! * pixScaleWithAlpha() * * Input: pixs (32 bpp rgb or cmapped) * scalex, scaley (must be > 0.0) * pixg ( 8 bpp, can be null) * fract (between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque) * Return: pixd (32 bpp rgba), or null on error * * Notes: * (1) The alpha channel is transformed separately from pixs, * and aligns with it, being fully transparent outside the * boundary of the transformed pixs. For pixels that are fully * transparent, a blending function like pixBlendWithGrayMask() * will give zero weight to corresponding pixels in pixs. * (2) Scaling is done with area mapping or linear interpolation, * depending on the scale factors. Default sharpening is done. * (3) If pixg is NULL, it is generated as an alpha layer that is * partially opaque, using @fract. Otherwise, it is cropped * to pixs if required, and @fract is ignored. The alpha * channel in pixs is never used. * (4) Colormaps are removed to 32 bpp. * (5) The default setting for the border values in the alpha channel * is 0 (transparent) for the outermost ring of pixels and * (0.5 * fract * 255) for the second ring. When blended over * a second image, this * (a) shrinks the visible image to make a clean overlap edge * with an image below, and * (b) softens the edges by weakening the aliasing there. * Use l_setAlphaMaskBorder() to change these values. * (6) A subtle use of gamma correction is to remove gamma correction * before scaling and restore it afterwards. This is done * by sandwiching this function between a gamma/inverse-gamma * photometric transform: * pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255); * pixd = pixScaleWithAlpha(pixt, scalex, scaley, NULL, fract); * pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255); * pixDestroy(&pixt); * This has the side-effect of producing artifacts in the very * dark regions. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixScaleWithAlpha(PIX *pixs, l_float32 scalex, l_float32 scaley, PIX *pixg, l_float32 fract) { l_int32 ws, hs, d, spp; PIX *pixd, *pix32, *pixg2, *pixgs; PROCNAME("pixScaleWithAlpha"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (scalex <= 0.0 || scaley <= 0.0) return (PIX *)ERROR_PTR("scale factor <= 0.0", procName, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using @fract transparent alpha\n", procName); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using fully opaque\n", procName); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("transparent alpha; image will not be blended\n", procName); /* Make sure input to scaling is 32 bpp rgb, and scale it */ if (d != 32) pix32 = pixConvertTo32(pixs); else pix32 = pixClone(pixs); spp = pixGetSpp(pix32); pixSetSpp(pix32, 3); /* ignore the alpha channel for scaling */ pixd = pixScale(pix32, scalex, scaley); pixSetSpp(pix32, spp); /* restore initial value in case it's a clone */ pixDestroy(&pix32); /* Set up alpha layer with a fading border and scale it */ if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else if (fract > 0.0) pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 4 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixgs = pixScaleGeneral(pixg2, scalex, scaley, 0.0, 0); /* Combine into a 4 spp result */ pixSetRGBComponent(pixd, pixgs, L_ALPHA_CHANNEL); pixDestroy(&pixg2); pixDestroy(&pixgs); return pixd; } leptonica-1.70/src/affine.c0000644000175000017500000015774712244727761013731 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * affine.c * * Affine (3 pt) image transformation using a sampled * (to nearest integer) transform on each dest point * PIX *pixAffineSampledPta() * PIX *pixAffineSampled() * * Affine (3 pt) image transformation using interpolation * (or area mapping) for anti-aliasing images that are * 2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB * PIX *pixAffinePta() * PIX *pixAffine() * PIX *pixAffinePtaColor() * PIX *pixAffineColor() * PIX *pixAffinePtaGray() * PIX *pixAffineGray() * * Affine transform including alpha (blend) component * PIX *pixAffinePtaWithAlpha() * * Affine coordinate transformation * l_int32 getAffineXformCoeffs() * l_int32 affineInvertXform() * l_int32 affineXformSampledPt() * l_int32 affineXformPt() * * Interpolation helper functions * l_int32 linearInterpolatePixelGray() * l_int32 linearInterpolatePixelColor() * * Gauss-jordan linear equation solver * l_int32 gaussjordan() * * Affine image transformation using a sequence of * shear/scale/translation operations * PIX *pixAffineSequential() * * One can define a coordinate space by the location of the origin, * the orientation of x and y axes, and the unit scaling along * each axis. An affine transform is a general linear * transformation from one coordinate space to another. * * For the general case, we can define the affine transform using * two sets of three (noncollinear) points in a plane. One set * corresponds to the input (src) coordinate space; the other to the * transformed (dest) coordinate space. Each point in the * src corresponds to one of the points in the dest. With two * sets of three points, we get a set of 6 equations in 6 unknowns * that specifies the mapping between the coordinate spaces. * The interface here allows you to specify either the corresponding * sets of 3 points, or the transform itself (as a vector of 6 * coefficients). * * Given the transform as a vector of 6 coefficients, we can compute * both a a pointwise affine coordinate transformation and an * affine image transformation. * * To compute the coordinate transform, we need the coordinate * value (x',y') in the transformed space for any point (x,y) * in the original space. To derive this transform from the * three corresponding points, it is convenient to express the affine * coordinate transformation using an LU decomposition of * a set of six linear equations that express the six coordinates * of the three points in the transformed space as a function of * the six coordinates in the original space. Once we have * this transform matrix , we can transform an image by * finding, for each destination pixel, the pixel (or pixels) * in the source that give rise to it. * * This 'pointwise' transformation can be done either by sampling * and picking a single pixel in the src to replicate into the dest, * or by interpolating (or averaging) over four src pixels to * determine the value of the dest pixel. The first method is * implemented by pixAffineSampled() and the second method by * pixAffine(). The interpolated method can only be used for * images with more than 1 bpp, but for these, the image quality * is significantly better than the sampled method, due to * the 'antialiasing' effect of weighting the src pixels. * * Interpolation works well when there is relatively little scaling, * or if there is image expansion in general. However, if there * is significant image reduction, one should apply a low-pass * filter before subsampling to avoid aliasing the high frequencies. * * A typical application might be to align two images, which * may be scaled, rotated and translated versions of each other. * Through some pre-processing, three corresponding points are * located in each of the two images. One of the images is * then to be (affine) transformed to align with the other. * As mentioned, the standard way to do this is to use three * sets of points, compute the 6 transformation coefficients * from these points that describe the linear transformation, * * x' = ax + by + c * y' = dx + ey + f * * and use this in a pointwise manner to transform the image. * * N.B. Be sure to see the comment in getAffineXformCoeffs(), * regarding using the inverse of the affine transform for points * to transform images. * * There is another way to do this transformation; namely, * by doing a sequence of simple affine transforms, without * computing directly the affine coordinate transformation. * We have at our disposal (1) translations (using rasterop), * (2) horizontal and vertical shear about any horizontal and vertical * line, respectively, and (3) non-isotropic scaling by two * arbitrary x and y scaling factors. We also have rotation * about an arbitrary point, but this is equivalent to a set * of three shears so we do not need to use it. * * Why might we do this? For binary images, it is usually * more efficient to do such transformations by a sequence * of word parallel operations. Shear and translation can be * done in-place and word parallel; arbitrary scaling is * mostly pixel-wise. * * Suppose that we are tranforming image 1 to correspond to image 2. * We have a set of three points, describing the coordinate space * embedded in image 1, and we need to transform image 1 until * those three points exactly correspond to the new coordinate space * defined by the second set of three points. In our image * matching application, the latter set of three points was * found to be the corresponding points in image 2. * * The most elegant way I can think of to do such a sequential * implementation is to imagine that we're going to transform * BOTH images until they're aligned. (We don't really want * to transform both, because in fact we may only have one image * that is undergoing a general affine transformation.) * * Choose the 3 corresponding points as follows: * - The 1st point is an origin * - The 2nd point gives the orientation and scaling of the * "x" axis with respect to the origin * - The 3rd point does likewise for the "y" axis. * These "axes" must not be collinear; otherwise they are * arbitrary (although some strange things will happen if * the handedness sweeping through the minimum angle between * the axes is opposite). * * An important constraint is that we have shear operations * about an arbitrary horizontal or vertical line, but always * parallel to the x or y axis. If we continue to pretend that * we have an unprimed coordinate space embedded in image 1 and * a primed coordinate space embedded in image 2, we imagine * (a) transforming image 1 by horizontal and vertical shears about * point 1 to align points 3 and 2 along the y and x axes, * respectively, and (b) transforming image 2 by horizontal and * vertical shears about point 1' to align points 3' and 2' along * the y and x axes. Then we scale image 1 so that the distances * from 1 to 2 and from 1 to 3 are equal to the distances in * image 2 from 1' to 2' and from 1' to 3'. This scaling operation * leaves the true image origin, at (0,0) invariant, and will in * general translate point 1. The original points 1 and 1' will * typically not coincide in any event, so we must translate * the origin of image 1, at its current point 1, to the origin * of image 2 at 1'. The images should now be aligned. But * because we never really transformed image 2 (and image 2 may * not even exist), we now perform on image 1 the reverse of * the shear transforms that we imagined doing on image 2; * namely, the negative vertical shear followed by the negative * horizontal shear. Image 1 should now have its transformed * unprimed coordinates aligned with the original primed * coordinates. In all this, it is only necessary to keep track * of the shear angles and translations of points during the shears. * What has been accomplished is a general affine transformation * on image 1. * * Having described all this, if you are going to use an * affine transformation in an application, this is what you * need to know: * * (1) You should NEVER use the sequential method, because * the image quality for 1 bpp text is much poorer * (even though it is about 2x faster than the pointwise sampled * method), and for images with depth greater than 1, it is * nearly 20x slower than the pointwise sampled method * and over 10x slower than the pointwise interpolated method! * The sequential method is given here for purely * pedagogical reasons. * * (2) For 1 bpp images, use the pointwise sampled function * pixAffineSampled(). For all other images, the best * quality results result from using the pointwise * interpolated function pixAffinePta() or pixAffine(); * the cost is less than a doubling of the computation time * with respect to the sampled function. If you use * interpolation on colormapped images, the colormap will * be removed, resulting in either a grayscale or color * image, depending on the values in the colormap. * If you want to retain the colormap, use pixAffineSampled(). * * Typical relative timing of pointwise transforms (sampled = 1.0): * 8 bpp: sampled 1.0 * interpolated 1.6 * 32 bpp: sampled 1.0 * interpolated 1.8 * Additionally, the computation time/pixel is nearly the same * for 8 bpp and 32 bpp, for both sampled and interpolated. */ #include #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Sampled affine image transformation * *-------------------------------------------------------------*/ /*! * pixAffineSampledPta() * * Input: pixs (all depths) * ptad (3 pts of final coordinate space) * ptas (3 pts of initial coordinate space) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary. * (2) Retains colormap, which you can do for a sampled transform.. * (3) The 3 points must not be collinear. * (4) The order of the 3 points is arbitrary; however, to compare * with the sequential transform they must be in these locations * and in this order: origin, x-axis, y-axis. * (5) For 1 bpp images, this has much better quality results * than pixAffineSequential(), particularly for text. * It is about 3x slower, but does not require additional * border pixels. The poor quality of pixAffineSequential() * is due to repeated quantized transforms. It is strongly * recommended that pixAffineSampled() be used for 1 bpp images. * (6) For 8 or 32 bpp, much better quality is obtained by the * somewhat slower pixAffinePta(). See that function * for relative timings between sampled and interpolated. * (7) To repeat, use of the sequential transform, * pixAffineSequential(), for any images, is discouraged. */ PIX * pixAffineSampledPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_float32 *vc; PIX *pixd; PROCNAME("pixAffineSampledPta"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad, ptas, &vc); pixd = pixAffineSampled(pixs, vc, incolor); FREE(vc); return pixd; } /*! * pixAffineSampled() * * Input: pixs (all depths) * vc (vector of 6 coefficients for affine transformation) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary. * (2) Retains colormap, which you can do for a sampled transform.. * (3) For 8 or 32 bpp, much better quality is obtained by the * somewhat slower pixAffine(). See that function * for relative timings between sampled and interpolated. */ PIX * pixAffineSampled(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; l_uint32 val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixAffineSampled"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", procName, NULL); /* Init all dest pixels to color to be brought in from outside */ pixd = pixCreateTemplate(pixs); if ((cmap = pixGetColormap(pixs)) != NULL) { if (incolor == L_BRING_IN_WHITE) color = 1; else color = 0; pixcmapAddBlackOrWhite(cmap, color, &cmapindex); pixSetAllArbitrary(pixd, cmapindex); } else { if ((d == 1 && incolor == L_BRING_IN_WHITE) || (d > 1 && incolor == L_BRING_IN_BLACK)) { pixClearAll(pixd); } else { pixSetAll(pixd); } } /* Scan over the dest pixels */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { affineXformSampledPt(vc, j, i, &x, &y); if (x < 0 || y < 0 || x >=w || y >= h) continue; lines = datas + y * wpls; if (d == 1) { val = GET_DATA_BIT(lines, x); SET_DATA_BIT_VAL(lined, j, val); } else if (d == 8) { val = GET_DATA_BYTE(lines, x); SET_DATA_BYTE(lined, j, val); } else if (d == 32) { lined[j] = lines[x]; } else if (d == 2) { val = GET_DATA_DIBIT(lines, x); SET_DATA_DIBIT(lined, j, val); } else if (d == 4) { val = GET_DATA_QBIT(lines, x); SET_DATA_QBIT(lined, j, val); } } } return pixd; } /*---------------------------------------------------------------------* * Interpolated affine image transformation * *---------------------------------------------------------------------*/ /*! * pixAffinePta() * * Input: pixs (all depths; colormap ok) * ptad (3 pts of final coordinate space) * ptas (3 pts of initial coordinate space) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary * (2) Removes any existing colormap, if necessary, before transforming */ PIX * pixAffinePta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixAffinePta"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); if (pixGetDepth(pixs) == 1) return pixAffineSampledPta(pixs, ptad, ptas, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixAffinePtaGray(pixt2, ptad, ptas, colorval); else /* d == 32 */ pixd = pixAffinePtaColor(pixt2, ptad, ptas, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixAffine() * * Input: pixs (all depths; colormap ok) * vc (vector of 6 coefficients for affine transformation) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary * (2) Removes any existing colormap, if necessary, before transforming */ PIX * pixAffine(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixAffine"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); if (pixGetDepth(pixs) == 1) return pixAffineSampled(pixs, vc, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixAffineGray(pixt2, vc, colorval); else /* d == 32 */ pixd = pixAffineColor(pixt2, vc, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixAffinePtaColor() * * Input: pixs (32 bpp) * ptad (3 pts of final coordinate space) * ptas (3 pts of initial coordinate space) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error */ PIX * pixAffinePtaColor(PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval) { l_float32 *vc; PIX *pixd; PROCNAME("pixAffinePtaColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad, ptas, &vc); pixd = pixAffineColor(pixs, vc, colorval); FREE(vc); return pixd; } /*! * pixAffineColor() * * Input: pixs (32 bpp) * vc (vector of 6 coefficients for affine transformation) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error */ PIX * pixAffineColor(PIX *pixs, l_float32 *vc, l_uint32 colorval) { l_int32 i, j, w, h, d, wpls, wpld; l_uint32 val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pix1, *pix2, *pixd; PROCNAME("pixAffineColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, colorval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ affineXformPt(vc, j, i, &x, &y); linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, &val); *(lined + j) = val; } } /* If rgba, transform the pixs alpha channel and insert in pixd */ if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixAffineGray(pix1, vc, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * pixAffinePtaGray() * * Input: pixs (8 bpp) * ptad (3 pts of final coordinate space) * ptas (3 pts of initial coordinate space) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error */ PIX * pixAffinePtaGray(PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval) { l_float32 *vc; PIX *pixd; PROCNAME("pixAffinePtaGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getAffineXformCoeffs(ptad, ptas, &vc); pixd = pixAffineGray(pixs, vc, grayval); FREE(vc); return pixd; } /*! * pixAffineGray() * * Input: pixs (8 bpp) * vc (vector of 6 coefficients for affine transformation) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error */ PIX * pixAffineGray(PIX *pixs, l_float32 *vc, l_uint8 grayval) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pixd; PROCNAME("pixAffineGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, grayval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ affineXformPt(vc, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*---------------------------------------------------------------------------* * Affine transform including alpha (blend) component and gamma transform * *---------------------------------------------------------------------------*/ /*! * pixAffinePtaWithAlpha() * * Input: pixs (32 bpp rgb) * ptad (3 pts of final coordinate space) * ptas (3 pts of initial coordinate space) * pixg ( 8 bpp, can be null) * fract (between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque) * border (of pixels added to capture transformed source pixels) * Return: pixd, or null on error * * Notes: * (1) The alpha channel is transformed separately from pixs, * and aligns with it, being fully transparent outside the * boundary of the transformed pixs. For pixels that are fully * transparent, a blending function like pixBlendWithGrayMask() * will give zero weight to corresponding pixels in pixs. * (2) If pixg is NULL, it is generated as an alpha layer that is * partially opaque, using @fract. Otherwise, it is cropped * to pixs if required and @fract is ignored. The alpha channel * in pixs is never used. * (3) Colormaps are removed. * (4) When pixs is transformed, it doesn't matter what color is brought * in because the alpha channel will be transparent (0) there. * (5) To avoid losing source pixels in the destination, it may be * necessary to add a border to the source pix before doing * the affine transformation. This can be any non-negative number. * (6) The input @ptad and @ptas are in a coordinate space before * the border is added. Internally, we compensate for this * before doing the affine transform on the image after the border * is added. * (7) The default setting for the border values in the alpha channel * is 0 (transparent) for the outermost ring of pixels and * (0.5 * fract * 255) for the second ring. When blended over * a second image, this * (a) shrinks the visible image to make a clean overlap edge * with an image below, and * (b) softens the edges by weakening the aliasing there. * Use l_setAlphaMaskBorder() to change these values. * (8) A subtle use of gamma correction is to remove gamma correction * before scaling and restore it afterwards. This is done * by sandwiching this function between a gamma/inverse-gamma * photometric transform: * pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255); * pixd = pixAffinePtaWithAlpha(pixg, ptad, ptas, NULL, * fract, border); * pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255); * pixDestroy(&pixt); * This has the side-effect of producing artifacts in the very * dark regions. */ PIX * pixAffinePtaWithAlpha(PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border) { l_int32 ws, hs, d; PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; PTA *ptad2, *ptas2; PROCNAME("pixAffinePtaWithAlpha"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using @fract transparent alpha\n", procName); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using 1.0 (fully transparent)\n", procName); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("fully opaque alpha; image will not be blended\n", procName); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); /* Add border; the color doesn't matter */ pixb1 = pixAddBorder(pixs, border, 0); /* Transform the ptr arrays to work on the bordered image */ ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); /* Do separate affine transform of rgb channels of pixs and of pixg */ pixd = pixAffinePtaColor(pixb1, ptad2, ptas2, 0); if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 7 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ pixga = pixAffinePtaGray(pixb2, ptad2, ptas2, 0); pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); pixSetSpp(pixd, 4); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixga); ptaDestroy(&ptad2); ptaDestroy(&ptas2); return pixd; } /*-------------------------------------------------------------* * Affine coordinate transformation * *-------------------------------------------------------------*/ /*! * getAffineXformCoeffs() * * Input: ptas (source 3 points; unprimed) * ptad (transformed 3 points; primed) * &vc ( vector of coefficients of transform) * Return: 0 if OK; 1 on error * * We have a set of six equations, describing the affine * transformation that takes 3 points (ptas) into 3 other * points (ptad). These equations are: * * x1' = c[0]*x1 + c[1]*y1 + c[2] * y1' = c[3]*x1 + c[4]*y1 + c[5] * x2' = c[0]*x2 + c[1]*y2 + c[2] * y2' = c[3]*x2 + c[4]*y2 + c[5] * x3' = c[0]*x3 + c[1]*y3 + c[2] * y3' = c[3]*x3 + c[4]*y3 + c[5] * * This can be represented as * * AC = B * * where B and C are column vectors * * B = [ x1' y1' x2' y2' x3' y3' ] * C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] ] * * and A is the 6x6 matrix * * x1 y1 1 0 0 0 * 0 0 0 x1 y1 1 * x2 y2 1 0 0 0 * 0 0 0 x2 y2 1 * x3 y3 1 0 0 0 * 0 0 0 x3 y3 1 * * These six equations are solved here for the coefficients C. * * These six coefficients can then be used to find the dest * point (x',y') corresponding to any src point (x,y), according * to the equations * * x' = c[0]x + c[1]y + c[2] * y' = c[3]x + c[4]y + c[5] * * that are implemented in affineXformPt(). * * !!!!!!!!!!!!!!!!!! Very important !!!!!!!!!!!!!!!!!!!!!! * * When the affine transform is composed from a set of simple * operations such as translation, scaling and rotation, * it is built in a form to convert from the un-transformed src * point to the transformed dest point. However, when an * affine transform is used on images, it is used in an inverted * way: it converts from the transformed dest point to the * un-transformed src point. So, for example, if you transform * a boxa using transform A, to transform an image in the same * way you must use the inverse of A. * * For example, if you transform a boxa with a 3x3 affine matrix * 'mat', the analogous image transformation must use 'matinv': * * boxad = boxaAffineTransform(boxas, mat); * affineInvertXform(mat, &matinv); * pixd = pixAffine(pixs, matinv, L_BRING_IN_WHITE); * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! */ l_int32 getAffineXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc) { l_int32 i; l_float32 x1, y1, x2, y2, x3, y3; l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ l_float32 *a[6]; /* 6x6 matrix A */ PROCNAME("getAffineXformCoeffs"); if (!ptas) return ERROR_INT("ptas not defined", procName, 1); if (!ptad) return ERROR_INT("ptad not defined", procName, 1); if (!pvc) return ERROR_INT("&vc not defined", procName, 1); if ((b = (l_float32 *)CALLOC(6, sizeof(l_float32))) == NULL) return ERROR_INT("b not made", procName, 1); *pvc = b; ptaGetPt(ptas, 0, &x1, &y1); ptaGetPt(ptas, 1, &x2, &y2); ptaGetPt(ptas, 2, &x3, &y3); ptaGetPt(ptad, 0, &b[0], &b[1]); ptaGetPt(ptad, 1, &b[2], &b[3]); ptaGetPt(ptad, 2, &b[4], &b[5]); for (i = 0; i < 6; i++) if ((a[i] = (l_float32 *)CALLOC(6, sizeof(l_float32))) == NULL) return ERROR_INT("a[i] not made", procName, 1); a[0][0] = x1; a[0][1] = y1; a[0][2] = 1.; a[1][3] = x1; a[1][4] = y1; a[1][5] = 1.; a[2][0] = x2; a[2][1] = y2; a[2][2] = 1.; a[3][3] = x2; a[3][4] = y2; a[3][5] = 1.; a[4][0] = x3; a[4][1] = y3; a[4][2] = 1.; a[5][3] = x3; a[5][4] = y3; a[5][5] = 1.; gaussjordan(a, b, 6); for (i = 0; i < 6; i++) FREE(a[i]); return 0; } /*! * affineInvertXform() * * Input: vc (vector of 6 coefficients) * *vci ( inverted transform) * Return: 0 if OK; 1 on error * * Notes: * (1) The 6 affine transform coefficients are the first * two rows of a 3x3 matrix where the last row has * only a 1 in the third column. We invert this * using gaussjordan(), and select the first 2 rows * as the coefficients of the inverse affine transform. * (2) Alternatively, we can find the inverse transform * coefficients by inverting the 2x2 submatrix, * and treating the top 2 coefficients in the 3rd column as * a RHS vector for that 2x2 submatrix. Then the * 6 inverted transform coefficients are composed of * the inverted 2x2 submatrix and the negative of the * transformed RHS vector. Why is this so? We have * Y = AX + R (2 equations in 6 unknowns) * Then * X = A'Y - A'R * Gauss-jordan solves * AF = R * and puts the solution for F, which is A'R, * into the input R vector. * */ l_int32 affineInvertXform(l_float32 *vc, l_float32 **pvci) { l_int32 i; l_float32 *vci; l_float32 *a[3]; l_float32 b[3] = {1.0, 1.0, 1.0}; /* anything; results ignored */ PROCNAME("affineInvertXform"); if (!pvci) return ERROR_INT("&vci not defined", procName, 1); *pvci = NULL; if (!vc) return ERROR_INT("vc not defined", procName, 1); for (i = 0; i < 3; i++) a[i] = (l_float32 *)CALLOC(3, sizeof(l_float32)); a[0][0] = vc[0]; a[0][1] = vc[1]; a[0][2] = vc[2]; a[1][0] = vc[3]; a[1][1] = vc[4]; a[1][2] = vc[5]; a[2][2] = 1.0; gaussjordan(a, b, 3); /* now matrix a contains the inverse */ vci = (l_float32 *)CALLOC(6, sizeof(l_float32)); *pvci = vci; vci[0] = a[0][0]; vci[1] = a[0][1]; vci[2] = a[0][2]; vci[3] = a[1][0]; vci[4] = a[1][1]; vci[5] = a[1][2]; #if 0 /* Alternative version, inverting a 2x2 matrix */ for (i = 0; i < 2; i++) a[i] = (l_float32 *)CALLOC(2, sizeof(l_float32)); a[0][0] = vc[0]; a[0][1] = vc[1]; a[1][0] = vc[3]; a[1][1] = vc[4]; b[0] = vc[2]; b[1] = vc[5]; gaussjordan(a, b, 2); /* now matrix a contains the inverse */ vci = (l_float32 *)CALLOC(6, sizeof(l_float32)); *pvci = vci; vci[0] = a[0][0]; vci[1] = a[0][1]; vci[2] = -b[0]; /* note sign */ vci[3] = a[1][0]; vci[4] = a[1][1]; vci[5] = -b[1]; /* note sign */ #endif return 0; } /*! * affineXformSampledPt() * * Input: vc (vector of 6 coefficients) * (x, y) (initial point) * (&xp, &yp) ( transformed point) * Return: 0 if OK; 1 on error * * Notes: * (1) This finds the nearest pixel coordinates of the transformed point. * (2) It does not check ptrs for returned data! */ l_int32 affineXformSampledPt(l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp) { PROCNAME("affineXformSampledPt"); if (!vc) return ERROR_INT("vc not defined", procName, 1); *pxp = (l_int32)(vc[0] * x + vc[1] * y + vc[2] + 0.5); *pyp = (l_int32)(vc[3] * x + vc[4] * y + vc[5] + 0.5); return 0; } /*! * affineXformPt() * * Input: vc (vector of 6 coefficients) * (x, y) (initial point) * (&xp, &yp) ( transformed point) * Return: 0 if OK; 1 on error * * Notes: * (1) This computes the floating point location of the transformed point. * (2) It does not check ptrs for returned data! */ l_int32 affineXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp) { PROCNAME("affineXformPt"); if (!vc) return ERROR_INT("vc not defined", procName, 1); *pxp = vc[0] * x + vc[1] * y + vc[2]; *pyp = vc[3] * x + vc[4] * y + vc[5]; return 0; } /*-------------------------------------------------------------* * Interpolation helper functions * *-------------------------------------------------------------*/ /*! * linearInterpolatePixelColor() * * Input: datas (ptr to beginning of image data) * wpls (32-bit word/line for this data array) * w, h (of image) * x, y (floating pt location for evaluation) * colorval (color brought in from the outside when the * input x,y location is outside the image; * in 0xrrggbb00 format)) * &val ( interpolated color value) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a standard linear interpolation function. It is * equivalent to area weighting on each component, and * avoids "jaggies" when rendering sharp edges. */ l_int32 linearInterpolatePixelColor(l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_uint32 colorval, l_uint32 *pval) { l_int32 xpm, ypm, xp, xp2, yp, xf, yf; l_int32 rval, gval, bval; l_uint32 word00, word01, word10, word11; l_uint32 *lines; PROCNAME("linearInterpolatePixelColor"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = colorval; if (!datas) return ERROR_INT("datas not defined", procName, 1); /* Skip if off the edge */ if (x < 0.0 || y < 0.0 || x >= w || y >= h) return 0; xpm = (l_int32)(16.0 * x); ypm = (l_int32)(16.0 * y); xp = xpm >> 4; xp2 = xp + 1 < w ? xp + 1 : xp; yp = ypm >> 4; if (yp + 1 >= h) wpls = 0; xf = xpm & 0x0f; yf = ypm & 0x0f; #if DEBUG if (xf < 0 || yf < 0) fprintf(stderr, "xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); #endif /* DEBUG */ /* Do area weighting (eqiv. to linear interpolation) */ lines = datas + yp * wpls; word00 = *(lines + xp); word10 = *(lines + xp2); word01 = *(lines + wpls + xp); word11 = *(lines + wpls + xp2); rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff)) / 256; gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff)) / 256; bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff)) / 256; *pval = (rval << L_RED_SHIFT) | (gval << L_GREEN_SHIFT) | (bval << L_BLUE_SHIFT); return 0; } /*! * linearInterpolatePixelGray() * * Input: datas (ptr to beginning of image data) * wpls (32-bit word/line for this data array) * w, h (of image) * x, y (floating pt location for evaluation) * grayval (color brought in from the outside when the * input x,y location is outside the image) * &val ( interpolated gray value) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a standard linear interpolation function. It is * equivalent to area weighting on each component, and * avoids "jaggies" when rendering sharp edges. */ l_int32 linearInterpolatePixelGray(l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_int32 grayval, l_int32 *pval) { l_int32 xpm, ypm, xp, xp2, yp, xf, yf, v00, v10, v01, v11; l_uint32 *lines; PROCNAME("linearInterpolatePixelGray"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = grayval; if (!datas) return ERROR_INT("datas not defined", procName, 1); /* Skip if really off the edge */ if (x < 0.0 || y < 0.0 || x >= w || y >= h) return 0; xpm = (l_int32)(16.0 * x); ypm = (l_int32)(16.0 * y); xp = xpm >> 4; xp2 = xp + 1 < w ? xp + 1 : xp; yp = ypm >> 4; if (yp + 1 >= h) wpls = 0; xf = xpm & 0x0f; yf = ypm & 0x0f; #if DEBUG if (xf < 0 || yf < 0) fprintf(stderr, "xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf); #endif /* DEBUG */ /* Interpolate by area weighting. */ lines = datas + yp * wpls; v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp2); v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp2); *pval = (v00 + v01 + v10 + v11) / 256; return 0; } /*-------------------------------------------------------------* * Gauss-jordan linear equation solver * *-------------------------------------------------------------*/ #define SWAP(a,b) {temp = (a); (a) = (b); (b) = temp;} /*! * gaussjordan() * * Input: a (n x n matrix) * b (rhs column vector) * n (dimension) * Return: 0 if ok, 1 on error * * Note side effects: * (1) the matrix a is transformed to its inverse * (2) the vector b is transformed to the solution X to the * linear equation AX = B * * Adapted from "Numerical Recipes in C, Second Edition", 1992 * pp. 36-41 (gauss-jordan elimination) */ l_int32 gaussjordan(l_float32 **a, l_float32 *b, l_int32 n) { l_int32 i, icol, irow, j, k, l, ll; l_int32 *indexc, *indexr, *ipiv; l_float32 big, dum, pivinv, temp; PROCNAME("gaussjordan"); if (!a) return ERROR_INT("a not defined", procName, 1); if (!b) return ERROR_INT("b not defined", procName, 1); if ((indexc = (l_int32 *)CALLOC(n, sizeof(l_int32))) == NULL) return ERROR_INT("indexc not made", procName, 1); if ((indexr = (l_int32 *)CALLOC(n, sizeof(l_int32))) == NULL) return ERROR_INT("indexr not made", procName, 1); if ((ipiv = (l_int32 *)CALLOC(n, sizeof(l_int32))) == NULL) return ERROR_INT("ipiv not made", procName, 1); for (i = 0; i < n; i++) { big = 0.0; for (j = 0; j < n; j++) { if (ipiv[j] != 1) for (k = 0; k < n; k++) { if (ipiv[k] == 0) { if (fabs(a[j][k]) >= big) { big = fabs(a[j][k]); irow = j; icol = k; } } else if (ipiv[k] > 1) { return ERROR_INT("singular matrix", procName, 1); } } } ++(ipiv[icol]); if (irow != icol) { for (l = 0; l < n; l++) SWAP(a[irow][l], a[icol][l]); SWAP(b[irow], b[icol]); } indexr[i] = irow; indexc[i] = icol; if (a[icol][icol] == 0.0) return ERROR_INT("singular matrix", procName, 1); pivinv = 1.0 / a[icol][icol]; a[icol][icol] = 1.0; for (l = 0; l < n; l++) a[icol][l] *= pivinv; b[icol] *= pivinv; for (ll = 0; ll < n; ll++) if (ll != icol) { dum = a[ll][icol]; a[ll][icol] = 0.0; for (l = 0; l < n; l++) a[ll][l] -= a[icol][l] * dum; b[ll] -= b[icol] * dum; } } for (l = n - 1; l >= 0; l--) { if (indexr[l] != indexc[l]) for (k = 0; k < n; k++) SWAP(a[k][indexr[l]], a[k][indexc[l]]); } FREE(indexr); FREE(indexc); FREE(ipiv); return 0; } /*-------------------------------------------------------------* * Sequential affine image transformation * *-------------------------------------------------------------*/ /*! * pixAffineSequential() * * Input: pixs * ptad (3 pts of final coordinate space) * ptas (3 pts of initial coordinate space) * bw (pixels of additional border width during computation) * bh (pixels of additional border height during computation) * Return: pixd, or null on error * * Notes: * (1) The 3 pts must not be collinear. * (2) The 3 pts must be given in this order: * - origin * - a location along the x-axis * - a location along the y-axis. * (3) You must guess how much border must be added so that no * pixels are lost in the transformations from src to * dest coordinate space. (This can be calculated but it * is a lot of work!) For coordinate spaces that are nearly * at right angles, on a 300 ppi scanned page, the addition * of 1000 pixels on each side is usually sufficient. * (4) This is here for pedagogical reasons. It is about 3x faster * on 1 bpp images than pixAffineSampled(), but the results * on text are much inferior. */ PIX * pixAffineSequential(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 bw, l_int32 bh) { l_int32 x1, y1, x2, y2, x3, y3; /* ptas */ l_int32 x1p, y1p, x2p, y2p, x3p, y3p; /* ptad */ l_int32 x1sc, y1sc; /* scaled origin */ l_float32 x2s, x2sp, scalex, scaley; l_float32 th3, th3p, ph2, ph2p; l_float32 rad2deg; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixAffineSequential"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (ptaGetCount(ptas) != 3) return (PIX *)ERROR_PTR("ptas count not 3", procName, NULL); if (ptaGetCount(ptad) != 3) return (PIX *)ERROR_PTR("ptad count not 3", procName, NULL); ptaGetIPt(ptas, 0, &x1, &y1); ptaGetIPt(ptas, 1, &x2, &y2); ptaGetIPt(ptas, 2, &x3, &y3); ptaGetIPt(ptad, 0, &x1p, &y1p); ptaGetIPt(ptad, 1, &x2p, &y2p); ptaGetIPt(ptad, 2, &x3p, &y3p); rad2deg = 180. / 3.1415926535; if (y1 == y3) return (PIX *)ERROR_PTR("y1 == y3!", procName, NULL); if (y1p == y3p) return (PIX *)ERROR_PTR("y1p == y3p!", procName, NULL); if (bw != 0 || bh != 0) { /* resize all points and add border to pixs */ x1 = x1 + bw; y1 = y1 + bh; x2 = x2 + bw; y2 = y2 + bh; x3 = x3 + bw; y3 = y3 + bh; x1p = x1p + bw; y1p = y1p + bh; x2p = x2p + bw; y2p = y2p + bh; x3p = x3p + bw; y3p = y3p + bh; if ((pixt1 = pixAddBorderGeneral(pixs, bw, bw, bh, bh, 0)) == NULL) return (PIX *)ERROR_PTR("pixt1 not made", procName, NULL); } else { pixt1 = pixCopy(NULL, pixs); } /*-------------------------------------------------------------* The horizontal shear is done to move the 3rd point to the y axis. This moves the 2nd point either towards or away from the y axis, depending on whether it is above or below the x axis. That motion must be computed so that we know the angle of vertical shear to use to get the 2nd point on the x axis. We must also know the x coordinate of the 2nd point in order to compute how much scaling is required to match points on the axis. *-------------------------------------------------------------*/ /* Shear angles required to put src points on x and y axes */ th3 = atan2((l_float64)(x1 - x3), (l_float64)(y1 - y3)); x2s = (l_float32)(x2 - ((l_float32)(y1 - y2) * (x3 - x1)) / (y1 - y3)); if (x2s == (l_float32)x1) return (PIX *)ERROR_PTR("x2s == x1!", procName, NULL); ph2 = atan2((l_float64)(y1 - y2), (l_float64)(x2s - x1)); /* Shear angles required to put dest points on x and y axes. * Use the negative of these values to instead move the * src points from the axes to the actual dest position. * These values are also needed to scale the image. */ th3p = atan2((l_float64)(x1p - x3p), (l_float64)(y1p - y3p)); x2sp = (l_float32)(x2p - ((l_float32)(y1p - y2p) * (x3p - x1p)) / (y1p - y3p)); if (x2sp == (l_float32)x1p) return (PIX *)ERROR_PTR("x2sp == x1p!", procName, NULL); ph2p = atan2((l_float64)(y1p - y2p), (l_float64)(x2sp - x1p)); /* Shear image to first put src point 3 on the y axis, * and then to put src point 2 on the x axis */ pixHShearIP(pixt1, y1, th3, L_BRING_IN_WHITE); pixVShearIP(pixt1, x1, ph2, L_BRING_IN_WHITE); /* Scale image to match dest scale. The dest scale * is calculated above from the angles th3p and ph2p * that would be required to move the dest points to * the x and y axes. */ scalex = (l_float32)(x2sp - x1p) / (x2s - x1); scaley = (l_float32)(y3p - y1p) / (y3 - y1); if ((pixt2 = pixScale(pixt1, scalex, scaley)) == NULL) return (PIX *)ERROR_PTR("pixt2 not made", procName, NULL); #if DEBUG fprintf(stderr, "th3 = %5.1f deg, ph2 = %5.1f deg\n", rad2deg * th3, rad2deg * ph2); fprintf(stderr, "th3' = %5.1f deg, ph2' = %5.1f deg\n", rad2deg * th3p, rad2deg * ph2p); fprintf(stderr, "scalex = %6.3f, scaley = %6.3f\n", scalex, scaley); #endif /* DEBUG */ /*-------------------------------------------------------------* Scaling moves the 1st src point, which is the origin. It must now be moved again to coincide with the origin (1st point) of the dest. After this is done, the 2nd and 3rd points must be sheared back to the original positions of the 2nd and 3rd dest points. We use the negative of the angles that were previously computed for shearing those points in the dest image to x and y axes, and take the shears in reverse order as well. *-------------------------------------------------------------*/ /* Shift image to match dest origin. */ x1sc = (l_int32)(scalex * x1 + 0.5); /* x comp of origin after scaling */ y1sc = (l_int32)(scaley * y1 + 0.5); /* y comp of origin after scaling */ pixRasteropIP(pixt2, x1p - x1sc, y1p - y1sc, L_BRING_IN_WHITE); /* Shear image to take points 2 and 3 off the axis and * put them in the original dest position */ pixVShearIP(pixt2, x1p, -ph2p, L_BRING_IN_WHITE); pixHShearIP(pixt2, y1p, -th3p, L_BRING_IN_WHITE); if (bw != 0 || bh != 0) { if ((pixd = pixRemoveBorderGeneral(pixt2, bw, bw, bh, bh)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else { pixd = pixClone(pixt2); } pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } leptonica-1.70/src/fpix1.c0000644000175000017500000014065112244222176013500 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fpix1.c * * This file has basic constructors, destructors and field accessors * for FPix, FPixa and DPix. It also has uncompressed read/write. * * FPix Create/copy/destroy * FPIX *fpixCreate() * FPIX *fpixCreateTemplate() * FPIX *fpixClone() * FPIX *fpixCopy() * l_int32 fpixResizeImageData() * void fpixDestroy() * * FPix accessors * l_int32 fpixGetDimensions() * l_int32 fpixSetDimensions() * l_int32 fpixGetWpl() * l_int32 fpixSetWpl() * l_int32 fpixGetRefcount() * l_int32 fpixChangeRefcount() * l_int32 fpixGetResolution() * l_int32 fpixSetResolution() * l_int32 fpixCopyResolution() * l_float32 *fpixGetData() * l_int32 fpixSetData() * l_int32 fpixGetPixel() * l_int32 fpixSetPixel() * * FPixa Create/copy/destroy * FPIXA *fpixaCreate() * FPIXA *fpixaCopy() * void fpixaDestroy() * * FPixa addition * l_int32 fpixaAddFPix() * static l_int32 fpixaExtendArray() * static l_int32 fpixaExtendArrayToSize() * * FPixa accessors * l_int32 fpixaGetCount() * l_int32 fpixaChangeRefcount() * FPIX *fpixaGetFPix() * l_int32 fpixaGetFPixDimensions() * l_int32 fpixaGetPixel() * l_int32 fpixaSetPixel() * * DPix Create/copy/destroy * DPIX *dpixCreate() * DPIX *dpixCreateTemplate() * DPIX *dpixClone() * DPIX *dpixCopy() * l_int32 dpixResizeImageData() * void dpixDestroy() * * DPix accessors * l_int32 dpixGetDimensions() * l_int32 dpixSetDimensions() * l_int32 dpixGetWpl() * l_int32 dpixSetWpl() * l_int32 dpixGetRefcount() * l_int32 dpixChangeRefcount() * l_int32 dpixGetResolution() * l_int32 dpixSetResolution() * l_int32 dpixCopyResolution() * l_float64 *dpixGetData() * l_int32 dpixSetData() * l_int32 dpixGetPixel() * l_int32 dpixSetPixel() * * FPix serialized I/O * FPIX *fpixRead() * FPIX *fpixReadStream() * l_int32 fpixWrite() * l_int32 fpixWriteStream() * FPIX *fpixEndianByteSwap() * * DPix serialized I/O * DPIX *dpixRead() * DPIX *dpixReadStream() * l_int32 dpixWrite() * l_int32 dpixWriteStream() * DPIX *dpixEndianByteSwap() * * Print FPix (subsampled, for debugging) * l_int32 fpixPrintStream() */ #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* must be > 0 */ /* Static functions */ static l_int32 fpixaExtendArray(FPIXA *fpixa); static l_int32 fpixaExtendArrayToSize(FPIXA *fpixa, l_int32 size); /*--------------------------------------------------------------------* * FPix Create/copy/destroy * *--------------------------------------------------------------------*/ /*! * fpixCreate() * * Input: width, height * Return: fpixd (with data allocated and initialized to 0), * or null on error * * Notes: * (1) Makes a FPix of specified size, with the data array * allocated and initialized to 0. */ FPIX * fpixCreate(l_int32 width, l_int32 height) { l_float32 *data; l_uint64 bignum; FPIX *fpixd; PROCNAME("fpixCreate"); if (width <= 0) return (FPIX *)ERROR_PTR("width must be > 0", procName, NULL); if (height <= 0) return (FPIX *)ERROR_PTR("height must be > 0", procName, NULL); /* Avoid overflow in malloc arg, malicious or otherwise */ bignum = 4L * width * height; /* max number of bytes requested */ if (bignum > ((1LL << 31) - 1)) { L_ERROR("requested w = %d, h = %d\n", procName, width, height); return (FPIX *)ERROR_PTR("requested bytes >= 2^31", procName, NULL); } if ((fpixd = (FPIX *)CALLOC(1, sizeof(FPIX))) == NULL) return (FPIX *)ERROR_PTR("CALLOC fail for fpixd", procName, NULL); fpixSetDimensions(fpixd, width, height); fpixSetWpl(fpixd, width); /* 4-byte words */ fpixd->refcount = 1; data = (l_float32 *)CALLOC(width * height, sizeof(l_float32)); if (!data) return (FPIX *)ERROR_PTR("CALLOC fail for data", procName, NULL); fpixSetData(fpixd, data); return fpixd; } /*! * fpixCreateTemplate() * * Input: fpixs * Return: fpixd, or null on error * * Notes: * (1) Makes a FPix of the same size as the input FPix, with the * data array allocated and initialized to 0. * (2) Copies the resolution. */ FPIX * fpixCreateTemplate(FPIX *fpixs) { l_int32 w, h; FPIX *fpixd; PROCNAME("fpixCreateTemplate"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); fpixGetDimensions(fpixs, &w, &h); fpixd = fpixCreate(w, h); fpixCopyResolution(fpixd, fpixs); return fpixd; } /*! * fpixClone() * * Input: fpix * Return: same fpix (ptr), or null on error * * Notes: * (1) See pixClone() for definition and usage. */ FPIX * fpixClone(FPIX *fpix) { PROCNAME("fpixClone"); if (!fpix) return (FPIX *)ERROR_PTR("fpix not defined", procName, NULL); fpixChangeRefcount(fpix, 1); return fpix; } /*! * fpixCopy() * * Input: fpixd (; can be null, or equal to fpixs, * or different from fpixs) * fpixs * Return: fpixd, or null on error * * Notes: * (1) There are three cases: * (a) fpixd == null (makes a new fpix; refcount = 1) * (b) fpixd == fpixs (no-op) * (c) fpixd != fpixs (data copy; no change in refcount) * If the refcount of fpixd > 1, case (c) will side-effect * these handles. * (2) The general pattern of use is: * fpixd = fpixCopy(fpixd, fpixs); * This will work for all three cases. * For clarity when the case is known, you can use: * (a) fpixd = fpixCopy(NULL, fpixs); * (c) fpixCopy(fpixd, fpixs); * (3) For case (c), we check if fpixs and fpixd are the same size. * If so, the data is copied directly. * Otherwise, the data is reallocated to the correct size * and the copy proceeds. The refcount of fpixd is unchanged. * (4) This operation, like all others that may involve a pre-existing * fpixd, will side-effect any existing clones of fpixd. */ FPIX * fpixCopy(FPIX *fpixd, /* can be null */ FPIX *fpixs) { l_int32 w, h, bytes; l_float32 *datas, *datad; PROCNAME("fpixCopy"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (fpixs == fpixd) return fpixd; /* Total bytes in image data */ fpixGetDimensions(fpixs, &w, &h); bytes = 4 * w * h; /* If we're making a new fpix ... */ if (!fpixd) { if ((fpixd = fpixCreateTemplate(fpixs)) == NULL) return (FPIX *)ERROR_PTR("fpixd not made", procName, NULL); datas = fpixGetData(fpixs); datad = fpixGetData(fpixd); memcpy((char *)datad, (char *)datas, bytes); return fpixd; } /* Reallocate image data if sizes are different */ fpixResizeImageData(fpixd, fpixs); /* Copy data */ fpixCopyResolution(fpixd, fpixs); datas = fpixGetData(fpixs); datad = fpixGetData(fpixd); memcpy((char*)datad, (char*)datas, bytes); return fpixd; } /*! * fpixResizeImageData() * * Input: fpixd, fpixs * Return: 0 if OK, 1 on error * * Notes: * (1) If the data sizes differ, this destroys the existing * data in fpixd and allocates a new, uninitialized, data array * of the same size as the data in fpixs. Otherwise, this * doesn't do anything. */ l_int32 fpixResizeImageData(FPIX *fpixd, FPIX *fpixs) { l_int32 ws, hs, wd, hd, bytes; l_float32 *data; PROCNAME("fpixResizeImageData"); if (!fpixs) return ERROR_INT("fpixs not defined", procName, 1); if (!fpixd) return ERROR_INT("fpixd not defined", procName, 1); fpixGetDimensions(fpixs, &ws, &hs); fpixGetDimensions(fpixd, &wd, &hd); if (ws == wd && hs == hd) /* nothing to do */ return 0; fpixSetDimensions(fpixd, ws, hs); fpixSetWpl(fpixd, ws); bytes = 4 * ws * hs; data = fpixGetData(fpixd); if (data) FREE(data); if ((data = (l_float32 *)MALLOC(bytes)) == NULL) return ERROR_INT("MALLOC fail for data", procName, 1); fpixSetData(fpixd, data); return 0; } /*! * fpixDestroy() * * Input: &fpix * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the fpix. * (2) Always nulls the input ptr. */ void fpixDestroy(FPIX **pfpix) { l_float32 *data; FPIX *fpix; PROCNAME("fpixDestroy"); if (!pfpix) { L_WARNING("ptr address is null!\n", procName); return; } if ((fpix = *pfpix) == NULL) return; /* Decrement the ref count. If it is 0, destroy the fpix. */ fpixChangeRefcount(fpix, -1); if (fpixGetRefcount(fpix) <= 0) { if ((data = fpixGetData(fpix)) != NULL) FREE(data); FREE(fpix); } *pfpix = NULL; return; } /*--------------------------------------------------------------------* * FPix Accessors * *--------------------------------------------------------------------*/ /*! * fpixGetDimensions() * * Input: fpix * &w, &h (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 fpixGetDimensions(FPIX *fpix, l_int32 *pw, l_int32 *ph) { PROCNAME("fpixGetDimensions"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); if (pw) *pw = fpix->w; if (ph) *ph = fpix->h; return 0; } /*! * fpixSetDimensions() * * Input: fpix * w, h * Return: 0 if OK, 1 on error */ l_int32 fpixSetDimensions(FPIX *fpix, l_int32 w, l_int32 h) { PROCNAME("fpixSetDimensions"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpix->w = w; fpix->h = h; return 0; } l_int32 fpixGetWpl(FPIX *fpix) { PROCNAME("fpixGetWpl"); if (!fpix) return ERROR_INT("fpix not defined", procName, UNDEF); return fpix->wpl; } l_int32 fpixSetWpl(FPIX *fpix, l_int32 wpl) { PROCNAME("fpixSetWpl"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpix->wpl = wpl; return 0; } l_int32 fpixGetRefcount(FPIX *fpix) { PROCNAME("fpixGetRefcount"); if (!fpix) return ERROR_INT("fpix not defined", procName, UNDEF); return fpix->refcount; } l_int32 fpixChangeRefcount(FPIX *fpix, l_int32 delta) { PROCNAME("fpixChangeRefcount"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpix->refcount += delta; return 0; } l_int32 fpixGetResolution(FPIX *fpix, l_int32 *pxres, l_int32 *pyres) { PROCNAME("fpixGetResolution"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); if (pxres) *pxres = fpix->xres; if (pyres) *pyres = fpix->yres; return 0; } l_int32 fpixSetResolution(FPIX *fpix, l_int32 xres, l_int32 yres) { PROCNAME("fpixSetResolution"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpix->xres = xres; fpix->yres = yres; return 0; } l_int32 fpixCopyResolution(FPIX *fpixd, FPIX *fpixs) { l_int32 xres, yres; PROCNAME("fpixCopyResolution"); if (!fpixs || !fpixd) return ERROR_INT("fpixs and fpixd not both defined", procName, 1); fpixGetResolution(fpixs, &xres, &yres); fpixSetResolution(fpixd, xres, yres); return 0; } l_float32 * fpixGetData(FPIX *fpix) { PROCNAME("fpixGetData"); if (!fpix) return (l_float32 *)ERROR_PTR("fpix not defined", procName, NULL); return fpix->data; } l_int32 fpixSetData(FPIX *fpix, l_float32 *data) { PROCNAME("fpixSetData"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpix->data = data; return 0; } /*! * fpixGetPixel() * * Input: fpix * (x,y) pixel coords * &val ( pixel value) * Return: 0 if OK; 1 on error */ l_int32 fpixGetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval) { l_int32 w, h; PROCNAME("fpixGetPixel"); if (!pval) return ERROR_INT("pval not defined", procName, 1); *pval = 0.0; if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpixGetDimensions(fpix, &w, &h); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); *pval = *(fpix->data + y * w + x); return 0; } /*! * fpixSetPixel() * * Input: fpix * (x,y) pixel coords * val (pixel value) * Return: 0 if OK; 1 on error */ l_int32 fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val) { l_int32 w, h; PROCNAME("fpixSetPixel"); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); fpixGetDimensions(fpix, &w, &h); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); *(fpix->data + y * w + x) = val; return 0; } /*--------------------------------------------------------------------* * FPixa Create/copy/destroy * *--------------------------------------------------------------------*/ /*! * fpixaCreate() * * Input: n (initial number of ptrs) * Return: fpixa, or null on error */ FPIXA * fpixaCreate(l_int32 n) { FPIXA *fpixa; PROCNAME("fpixaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((fpixa = (FPIXA *)CALLOC(1, sizeof(FPIXA))) == NULL) return (FPIXA *)ERROR_PTR("pixa not made", procName, NULL); fpixa->n = 0; fpixa->nalloc = n; fpixa->refcount = 1; if ((fpixa->fpix = (FPIX **)CALLOC(n, sizeof(FPIX *))) == NULL) return (FPIXA *)ERROR_PTR("fpix ptrs not made", procName, NULL); return fpixa; } /*! * fpixaCopy() * * Input: fpixas * copyflag: * L_COPY makes a new fpixa and copies each fpix * L_CLONE gives a new ref-counted handle to the input fpixa * L_COPY_CLONE makes a new fpixa with clones of all fpix * Return: new fpixa, or null on error */ FPIXA * fpixaCopy(FPIXA *fpixa, l_int32 copyflag) { l_int32 i; FPIX *fpixc; FPIXA *fpixac; PROCNAME("fpixaCopy"); if (!fpixa) return (FPIXA *)ERROR_PTR("fpixa not defined", procName, NULL); if (copyflag == L_CLONE) { fpixaChangeRefcount(fpixa, 1); return fpixa; } if (copyflag != L_COPY && copyflag != L_COPY_CLONE) return (FPIXA *)ERROR_PTR("invalid copyflag", procName, NULL); if ((fpixac = fpixaCreate(fpixa->n)) == NULL) return (FPIXA *)ERROR_PTR("fpixac not made", procName, NULL); for (i = 0; i < fpixa->n; i++) { if (copyflag == L_COPY) fpixc = fpixaGetFPix(fpixa, i, L_COPY); else /* copy-clone */ fpixc = fpixaGetFPix(fpixa, i, L_CLONE); fpixaAddFPix(fpixac, fpixc, L_INSERT); } return fpixac; } /*! * fpixaDestroy() * * Input: &fpixa () * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the fpixa. * (2) Always nulls the input ptr. */ void fpixaDestroy(FPIXA **pfpixa) { l_int32 i; FPIXA *fpixa; PROCNAME("fpixaDestroy"); if (pfpixa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((fpixa = *pfpixa) == NULL) return; /* Decrement the refcount. If it is 0, destroy the pixa. */ fpixaChangeRefcount(fpixa, -1); if (fpixa->refcount <= 0) { for (i = 0; i < fpixa->n; i++) fpixDestroy(&fpixa->fpix[i]); FREE(fpixa->fpix); FREE(fpixa); } *pfpixa = NULL; return; } /*--------------------------------------------------------------------* * FPixa addition * *--------------------------------------------------------------------*/ /*! * fpixaAddFPix() * * Input: fpixa * fpix (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK; 1 on error */ l_int32 fpixaAddFPix(FPIXA *fpixa, FPIX *fpix, l_int32 copyflag) { l_int32 n; FPIX *fpixc; PROCNAME("fpixaAddFPix"); if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); if (copyflag == L_INSERT) fpixc = fpix; else if (copyflag == L_COPY) fpixc = fpixCopy(NULL, fpix); else if (copyflag == L_CLONE) fpixc = fpixClone(fpix); else return ERROR_INT("invalid copyflag", procName, 1); if (!fpixc) return ERROR_INT("fpixc not made", procName, 1); n = fpixaGetCount(fpixa); if (n >= fpixa->nalloc) fpixaExtendArray(fpixa); fpixa->fpix[n] = fpixc; fpixa->n++; return 0; } /*! * fpixaExtendArray() * * Input: fpixa * Return: 0 if OK; 1 on error * * Notes: * (1) Doubles the size of the fpixa ptr array. */ static l_int32 fpixaExtendArray(FPIXA *fpixa) { PROCNAME("fpixaExtendArray"); if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); return fpixaExtendArrayToSize(fpixa, 2 * fpixa->nalloc); } /*! * fpixaExtendArrayToSize() * * Input: fpixa * Return: 0 if OK; 1 on error * * Notes: * (1) If necessary, reallocs new fpixa ptrs array to @size. */ static l_int32 fpixaExtendArrayToSize(FPIXA *fpixa, l_int32 size) { PROCNAME("fpixaExtendArrayToSize"); if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); if (size > fpixa->nalloc) { if ((fpixa->fpix = (FPIX **)reallocNew((void **)&fpixa->fpix, sizeof(FPIX *) * fpixa->nalloc, size * sizeof(FPIX *))) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); fpixa->nalloc = size; } return 0; } /*--------------------------------------------------------------------* * FPixa accessors * *--------------------------------------------------------------------*/ /*! * fpixaGetCount() * * Input: fpixa * Return: count, or 0 if no pixa */ l_int32 fpixaGetCount(FPIXA *fpixa) { PROCNAME("fpixaGetCount"); if (!fpixa) return ERROR_INT("fpixa not defined", procName, 0); return fpixa->n; } /*! * fpixaChangeRefcount() * * Input: fpixa * Return: 0 if OK, 1 on error */ l_int32 fpixaChangeRefcount(FPIXA *fpixa, l_int32 delta) { PROCNAME("fpixaChangeRefcount"); if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); fpixa->refcount += delta; return 0; } /*! * fpixaGetFPix() * * Input: fpixa * index (to the index-th fpix) * accesstype (L_COPY or L_CLONE) * Return: fpix, or null on error */ FPIX * fpixaGetFPix(FPIXA *fpixa, l_int32 index, l_int32 accesstype) { PROCNAME("fpixaGetFPix"); if (!fpixa) return (FPIX *)ERROR_PTR("fpixa not defined", procName, NULL); if (index < 0 || index >= fpixa->n) return (FPIX *)ERROR_PTR("index not valid", procName, NULL); if (accesstype == L_COPY) return fpixCopy(NULL, fpixa->fpix[index]); else if (accesstype == L_CLONE) return fpixClone(fpixa->fpix[index]); else return (FPIX *)ERROR_PTR("invalid accesstype", procName, NULL); } /*! * fpixaGetFPixDimensions() * * Input: fpixa * index (to the index-th box) * &w, &h (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 fpixaGetFPixDimensions(FPIXA *fpixa, l_int32 index, l_int32 *pw, l_int32 *ph) { FPIX *fpix; PROCNAME("fpixaGetFPixDimensions"); if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); if (index < 0 || index >= fpixa->n) return ERROR_INT("index not valid", procName, 1); if ((fpix = fpixaGetFPix(fpixa, index, L_CLONE)) == NULL) return ERROR_INT("fpix not found!", procName, 1); fpixGetDimensions(fpix, pw, ph); fpixDestroy(&fpix); return 0; } /*! * fpixaGetPixel() * * Input: fpixa * index (into fpixa array) * (x,y) pixel coords * &val ( pixel value) * Return: 0 if OK; 1 on error */ l_int32 fpixaGetPixel(FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 *pval) { l_int32 n, ret; FPIX *fpix; PROCNAME("fpixaGetPixel"); if (!pval) return ERROR_INT("pval not defined", procName, 1); *pval = 0.0; if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); n = fpixaGetCount(fpixa); if (index < 0 || index >= n) return ERROR_INT("invalid index into fpixa", procName, 1); fpix = fpixaGetFPix(fpixa, index, L_CLONE); ret = fpixGetPixel(fpix, x, y, pval); fpixDestroy(&fpix); return ret; } /*! * fpixaSetPixel() * * Input: fpixa * index (into fpixa array) * (x,y) pixel coords * val (pixel value) * Return: 0 if OK; 1 on error */ l_int32 fpixaSetPixel(FPIXA *fpixa, l_int32 index, l_int32 x, l_int32 y, l_float32 val) { l_int32 n, ret; FPIX *fpix; PROCNAME("fpixaSetPixel"); if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); n = fpixaGetCount(fpixa); if (index < 0 || index >= n) return ERROR_INT("invalid index into fpixa", procName, 1); fpix = fpixaGetFPix(fpixa, index, L_CLONE); ret = fpixSetPixel(fpix, x, y, val); fpixDestroy(&fpix); return ret; } /*--------------------------------------------------------------------* * DPix Create/copy/destroy * *--------------------------------------------------------------------*/ /*! * dpixCreate() * * Input: width, height * Return: dpix (with data allocated and initialized to 0), * or null on error * * Notes: * (1) Makes a DPix of specified size, with the data array * allocated and initialized to 0. */ DPIX * dpixCreate(l_int32 width, l_int32 height) { l_float64 *data; l_uint64 bignum; DPIX *dpix; PROCNAME("dpixCreate"); if (width <= 0) return (DPIX *)ERROR_PTR("width must be > 0", procName, NULL); if (height <= 0) return (DPIX *)ERROR_PTR("height must be > 0", procName, NULL); /* Avoid overflow in malloc arg, malicious or otherwise */ bignum = 8L * width * height; /* max number of bytes requested */ if (bignum > ((1LL << 31) - 1)) { L_ERROR("requested w = %d, h = %d\n", procName, width, height); return (DPIX *)ERROR_PTR("requested bytes >= 2^31", procName, NULL); } if ((dpix = (DPIX *)CALLOC(1, sizeof(DPIX))) == NULL) return (DPIX *)ERROR_PTR("CALLOC fail for dpix", procName, NULL); dpixSetDimensions(dpix, width, height); dpixSetWpl(dpix, width); /* 8 byte words */ dpix->refcount = 1; data = (l_float64 *)CALLOC(width * height, sizeof(l_float64)); if (!data) return (DPIX *)ERROR_PTR("CALLOC fail for data", procName, NULL); dpixSetData(dpix, data); return dpix; } /*! * dpixCreateTemplate() * * Input: dpixs * Return: dpixd, or null on error * * Notes: * (1) Makes a DPix of the same size as the input DPix, with the * data array allocated and initialized to 0. * (2) Copies the resolution. */ DPIX * dpixCreateTemplate(DPIX *dpixs) { l_int32 w, h; DPIX *dpixd; PROCNAME("dpixCreateTemplate"); if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", procName, NULL); dpixGetDimensions(dpixs, &w, &h); dpixd = dpixCreate(w, h); dpixCopyResolution(dpixd, dpixs); return dpixd; } /*! * dpixClone() * * Input: dpix * Return: same dpix (ptr), or null on error * * Notes: * (1) See pixClone() for definition and usage. */ DPIX * dpixClone(DPIX *dpix) { PROCNAME("dpixClone"); if (!dpix) return (DPIX *)ERROR_PTR("dpix not defined", procName, NULL); dpixChangeRefcount(dpix, 1); return dpix; } /*! * dpixCopy() * * Input: dpixd (; can be null, or equal to dpixs, * or different from dpixs) * dpixs * Return: dpixd, or null on error * * Notes: * (1) There are three cases: * (a) dpixd == null (makes a new dpix; refcount = 1) * (b) dpixd == dpixs (no-op) * (c) dpixd != dpixs (data copy; no change in refcount) * If the refcount of dpixd > 1, case (c) will side-effect * these handles. * (2) The general pattern of use is: * dpixd = dpixCopy(dpixd, dpixs); * This will work for all three cases. * For clarity when the case is known, you can use: * (a) dpixd = dpixCopy(NULL, dpixs); * (c) dpixCopy(dpixd, dpixs); * (3) For case (c), we check if dpixs and dpixd are the same size. * If so, the data is copied directly. * Otherwise, the data is reallocated to the correct size * and the copy proceeds. The refcount of dpixd is unchanged. * (4) This operation, like all others that may involve a pre-existing * dpixd, will side-effect any existing clones of dpixd. */ DPIX * dpixCopy(DPIX *dpixd, /* can be null */ DPIX *dpixs) { l_int32 w, h, bytes; l_float64 *datas, *datad; PROCNAME("dpixCopy"); if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", procName, NULL); if (dpixs == dpixd) return dpixd; /* Total bytes in image data */ dpixGetDimensions(dpixs, &w, &h); bytes = 8 * w * h; /* If we're making a new dpix ... */ if (!dpixd) { if ((dpixd = dpixCreateTemplate(dpixs)) == NULL) return (DPIX *)ERROR_PTR("dpixd not made", procName, NULL); datas = dpixGetData(dpixs); datad = dpixGetData(dpixd); memcpy((char *)datad, (char *)datas, bytes); return dpixd; } /* Reallocate image data if sizes are different */ dpixResizeImageData(dpixd, dpixs); /* Copy data */ dpixCopyResolution(dpixd, dpixs); datas = dpixGetData(dpixs); datad = dpixGetData(dpixd); memcpy((char*)datad, (char*)datas, bytes); return dpixd; } /*! * dpixResizeImageData() * * Input: dpixd, dpixs * Return: 0 if OK, 1 on error */ l_int32 dpixResizeImageData(DPIX *dpixd, DPIX *dpixs) { l_int32 ws, hs, wd, hd, bytes; l_float64 *data; PROCNAME("dpixResizeImageData"); if (!dpixs) return ERROR_INT("dpixs not defined", procName, 1); if (!dpixd) return ERROR_INT("dpixd not defined", procName, 1); dpixGetDimensions(dpixs, &ws, &hs); dpixGetDimensions(dpixd, &wd, &hd); if (ws == wd && hs == hd) /* nothing to do */ return 0; dpixSetDimensions(dpixd, ws, hs); dpixSetWpl(dpixd, ws); /* 8 byte words */ bytes = 8 * ws * hs; data = dpixGetData(dpixd); if (data) FREE(data); if ((data = (l_float64 *)MALLOC(bytes)) == NULL) return ERROR_INT("MALLOC fail for data", procName, 1); dpixSetData(dpixd, data); return 0; } /*! * dpixDestroy() * * Input: &dpix * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the dpix. * (2) Always nulls the input ptr. */ void dpixDestroy(DPIX **pdpix) { l_float64 *data; DPIX *dpix; PROCNAME("dpixDestroy"); if (!pdpix) { L_WARNING("ptr address is null!\n", procName); return; } if ((dpix = *pdpix) == NULL) return; /* Decrement the ref count. If it is 0, destroy the dpix. */ dpixChangeRefcount(dpix, -1); if (dpixGetRefcount(dpix) <= 0) { if ((data = dpixGetData(dpix)) != NULL) FREE(data); FREE(dpix); } *pdpix = NULL; return; } /*--------------------------------------------------------------------* * DPix Accessors * *--------------------------------------------------------------------*/ /*! * dpixGetDimensions() * * Input: dpix * &w, &h (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 dpixGetDimensions(DPIX *dpix, l_int32 *pw, l_int32 *ph) { PROCNAME("dpixGetDimensions"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); if (pw) *pw = dpix->w; if (ph) *ph = dpix->h; return 0; } /*! * dpixSetDimensions() * * Input: dpix * w, h * Return: 0 if OK, 1 on error */ l_int32 dpixSetDimensions(DPIX *dpix, l_int32 w, l_int32 h) { PROCNAME("dpixSetDimensions"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpix->w = w; dpix->h = h; return 0; } l_int32 dpixGetWpl(DPIX *dpix) { PROCNAME("dpixGetWpl"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); return dpix->wpl; } l_int32 dpixSetWpl(DPIX *dpix, l_int32 wpl) { PROCNAME("dpixSetWpl"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpix->wpl = wpl; return 0; } l_int32 dpixGetRefcount(DPIX *dpix) { PROCNAME("dpixGetRefcount"); if (!dpix) return ERROR_INT("dpix not defined", procName, UNDEF); return dpix->refcount; } l_int32 dpixChangeRefcount(DPIX *dpix, l_int32 delta) { PROCNAME("dpixChangeRefcount"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpix->refcount += delta; return 0; } l_int32 dpixGetResolution(DPIX *dpix, l_int32 *pxres, l_int32 *pyres) { PROCNAME("dpixGetResolution"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); if (pxres) *pxres = dpix->xres; if (pyres) *pyres = dpix->yres; return 0; } l_int32 dpixSetResolution(DPIX *dpix, l_int32 xres, l_int32 yres) { PROCNAME("dpixSetResolution"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpix->xres = xres; dpix->yres = yres; return 0; } l_int32 dpixCopyResolution(DPIX *dpixd, DPIX *dpixs) { l_int32 xres, yres; PROCNAME("dpixCopyResolution"); if (!dpixs || !dpixd) return ERROR_INT("dpixs and dpixd not both defined", procName, 1); dpixGetResolution(dpixs, &xres, &yres); dpixSetResolution(dpixd, xres, yres); return 0; } l_float64 * dpixGetData(DPIX *dpix) { PROCNAME("dpixGetData"); if (!dpix) return (l_float64 *)ERROR_PTR("dpix not defined", procName, NULL); return dpix->data; } l_int32 dpixSetData(DPIX *dpix, l_float64 *data) { PROCNAME("dpixSetData"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpix->data = data; return 0; } /*! * dpixGetPixel() * * Input: dpix * (x,y) pixel coords * &val ( pixel value) * Return: 0 if OK; 1 on error */ l_int32 dpixGetPixel(DPIX *dpix, l_int32 x, l_int32 y, l_float64 *pval) { l_int32 w, h; PROCNAME("dpixGetPixel"); if (!pval) return ERROR_INT("pval not defined", procName, 1); *pval = 0.0; if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpixGetDimensions(dpix, &w, &h); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); *pval = *(dpix->data + y * w + x); return 0; } /*! * dpixSetPixel() * * Input: dpix * (x,y) pixel coords * val (pixel value) * Return: 0 if OK; 1 on error */ l_int32 dpixSetPixel(DPIX *dpix, l_int32 x, l_int32 y, l_float64 val) { l_int32 w, h; PROCNAME("dpixSetPixel"); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); dpixGetDimensions(dpix, &w, &h); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); *(dpix->data + y * w + x) = val; return 0; } /*--------------------------------------------------------------------* * FPix serialized I/O * *--------------------------------------------------------------------*/ /*! * fpixRead() * * Input: filename * Return: fpix, or null on error */ FPIX * fpixRead(const char *filename) { FILE *fp; FPIX *fpix; PROCNAME("fpixRead"); if (!filename) return (FPIX *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (FPIX *)ERROR_PTR("stream not opened", procName, NULL); if ((fpix = fpixReadStream(fp)) == NULL) { fclose(fp); return (FPIX *)ERROR_PTR("fpix not read", procName, NULL); } fclose(fp); return fpix; } /*! * fpixReadStream() * * Input: stream * Return: fpix, or null on error */ FPIX * fpixReadStream(FILE *fp) { char buf[256]; l_int32 w, h, nbytes, xres, yres, version; l_float32 *data; FPIX *fpix; PROCNAME("fpixReadStream"); if (!fp) return (FPIX *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nFPix Version %d\n", &version) != 1) return (FPIX *)ERROR_PTR("not a fpix file", procName, NULL); if (version != FPIX_VERSION_NUMBER) return (FPIX *)ERROR_PTR("invalid fpix version", procName, NULL); if (fscanf(fp, "w = %d, h = %d, nbytes = %d\n", &w, &h, &nbytes) != 3) return (FPIX *)ERROR_PTR("read fail for data size", procName, NULL); /* Use fgets() and sscanf(); not fscanf(), for the last * bit of header data before the float data. The reason is * that fscanf throws away white space, and if the float data * happens to begin with ascii character(s) that are white * space, it will swallow them and all will be lost! */ if (fgets(buf, sizeof(buf), fp) == NULL) return (FPIX *)ERROR_PTR("fgets read fail", procName, NULL); if (sscanf(buf, "xres = %d, yres = %d\n", &xres, &yres) != 2) return (FPIX *)ERROR_PTR("read fail for xres, yres", procName, NULL); if ((fpix = fpixCreate(w, h)) == NULL) return (FPIX *)ERROR_PTR("fpix not made", procName, NULL); fpixSetResolution(fpix, xres, yres); data = fpixGetData(fpix); if (fread(data, 1, nbytes, fp) != nbytes) return (FPIX *)ERROR_PTR("read error for nbytes", procName, NULL); fgetc(fp); /* ending nl */ /* Convert to little-endian if necessary */ fpixEndianByteSwap(fpix, fpix); return fpix; } /*! * fpixWrite() * * Input: filename * fpix * Return: 0 if OK, 1 on error */ l_int32 fpixWrite(const char *filename, FPIX *fpix) { FILE *fp; PROCNAME("fpixWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (fpixWriteStream(fp, fpix)) return ERROR_INT("fpix not written to stream", procName, 1); fclose(fp); return 0; } /*! * fpixWriteStream() * * Input: stream (opened for "wb") * fpix * Return: 0 if OK, 1 on error */ l_int32 fpixWriteStream(FILE *fp, FPIX *fpix) { l_int32 w, h, nbytes, xres, yres; l_float32 *data; FPIX *fpixt; PROCNAME("fpixWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); /* Convert to little-endian if necessary */ fpixt = fpixEndianByteSwap(NULL, fpix); fpixGetDimensions(fpixt, &w, &h); data = fpixGetData(fpixt); nbytes = w * h * sizeof(l_float32); fpixGetResolution(fpixt, &xres, &yres); fprintf(fp, "\nFPix Version %d\n", FPIX_VERSION_NUMBER); fprintf(fp, "w = %d, h = %d, nbytes = %d\n", w, h, nbytes); fprintf(fp, "xres = %d, yres = %d\n", xres, yres); fwrite(data, 1, nbytes, fp); fprintf(fp, "\n"); fpixDestroy(&fpixt); return 0; } /*! * fpixEndianByteSwap() * * Input: fpixd (can be equal to fpixs or NULL) * fpixs * Return: fpixd always * * Notes: * (1) On big-endian hardware, this does byte-swapping on each of * the 4-byte floats in the fpix data. On little-endians, * the data is unchanged. This is used for serialization * of fpix; the data is serialized in little-endian byte * order because most hardware is little-endian. * (2) The operation can be either in-place or, if fpixd == NULL, * a new fpix is made. If not in-place, caller must catch * the returned pointer. */ FPIX * fpixEndianByteSwap(FPIX *fpixd, FPIX *fpixs) { PROCNAME("fpixEndianByteSwap"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, fpixd); if (fpixd && (fpixs != fpixd)) return (FPIX *)ERROR_PTR("fpixd != fpixs", procName, fpixd); #ifdef L_BIG_ENDIAN { l_uint32 *data; l_int32 i, j, w, h; l_uint32 word; fpixGetDimensions(fpixs, &w, &h); fpixd = fpixCopy(fpixd, fpixs); /* no copy if fpixd == fpixs */ data = (l_uint32 *)fpixGetData(fpixd); for (i = 0; i < h; i++) { for (j = 0; j < w; j++, data++) { word = *data; *data = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return fpixd; } #else /* L_LITTLE_ENDIAN */ if (fpixd) return fpixd; /* no-op */ else return fpixClone(fpixs); #endif /* L_BIG_ENDIAN */ } /*--------------------------------------------------------------------* * DPix serialized I/O * *--------------------------------------------------------------------*/ /*! * dpixRead() * * Input: filename * Return: dpix, or null on error */ DPIX * dpixRead(const char *filename) { FILE *fp; DPIX *dpix; PROCNAME("dpixRead"); if (!filename) return (DPIX *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (DPIX *)ERROR_PTR("stream not opened", procName, NULL); if ((dpix = dpixReadStream(fp)) == NULL) { fclose(fp); return (DPIX *)ERROR_PTR("dpix not read", procName, NULL); } fclose(fp); return dpix; } /*! * dpixReadStream() * * Input: stream * Return: dpix, or null on error */ DPIX * dpixReadStream(FILE *fp) { char buf[256]; l_int32 w, h, nbytes, version, xres, yres; l_float64 *data; DPIX *dpix; PROCNAME("dpixReadStream"); if (!fp) return (DPIX *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nDPix Version %d\n", &version) != 1) return (DPIX *)ERROR_PTR("not a dpix file", procName, NULL); if (version != DPIX_VERSION_NUMBER) return (DPIX *)ERROR_PTR("invalid dpix version", procName, NULL); if (fscanf(fp, "w = %d, h = %d, nbytes = %d\n", &w, &h, &nbytes) != 3) return (DPIX *)ERROR_PTR("read fail for data size", procName, NULL); /* Use fgets() and sscanf(); not fscanf(), for the last * bit of header data before the float data. The reason is * that fscanf throws away white space, and if the float data * happens to begin with ascii character(s) that are white * space, it will swallow them and all will be lost! */ if (fgets(buf, sizeof(buf), fp) == NULL) return (DPIX *)ERROR_PTR("fgets read fail", procName, NULL); if (sscanf(buf, "xres = %d, yres = %d\n", &xres, &yres) != 2) return (DPIX *)ERROR_PTR("read fail for xres, yres", procName, NULL); if ((dpix = dpixCreate(w, h)) == NULL) return (DPIX *)ERROR_PTR("dpix not made", procName, NULL); dpixSetResolution(dpix, xres, yres); data = dpixGetData(dpix); if (fread(data, 1, nbytes, fp) != nbytes) return (DPIX *)ERROR_PTR("read error for nbytes", procName, NULL); fgetc(fp); /* ending nl */ /* Convert to little-endian if necessary */ dpixEndianByteSwap(dpix, dpix); return dpix; } /*! * dpixWrite() * * Input: filename * dpix * Return: 0 if OK, 1 on error */ l_int32 dpixWrite(const char *filename, DPIX *dpix) { FILE *fp; PROCNAME("dpixWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (dpixWriteStream(fp, dpix)) return ERROR_INT("dpix not written to stream", procName, 1); fclose(fp); return 0; } /*! * dpixWriteStream() * * Input: stream (opened for "wb") * dpix * Return: 0 if OK, 1 on error */ l_int32 dpixWriteStream(FILE *fp, DPIX *dpix) { l_int32 w, h, nbytes, xres, yres; l_float64 *data; DPIX *dpixt; PROCNAME("dpixWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!dpix) return ERROR_INT("dpix not defined", procName, 1); /* Convert to little-endian if necessary */ dpixt = dpixEndianByteSwap(NULL, dpix); dpixGetDimensions(dpixt, &w, &h); dpixGetResolution(dpixt, &xres, &yres); data = dpixGetData(dpixt); nbytes = w * h * sizeof(l_float64); fprintf(fp, "\nDPix Version %d\n", DPIX_VERSION_NUMBER); fprintf(fp, "w = %d, h = %d, nbytes = %d\n", w, h, nbytes); fprintf(fp, "xres = %d, yres = %d\n", xres, yres); fwrite(data, 1, nbytes, fp); fprintf(fp, "\n"); dpixDestroy(&dpixt); return 0; } /*! * dpixEndianByteSwap() * * Input: dpixd (can be equal to dpixs or NULL) * dpixs * Return: dpixd always * * Notes: * (1) On big-endian hardware, this does byte-swapping on each of * the 4-byte words in the dpix data. On little-endians, * the data is unchanged. This is used for serialization * of dpix; the data is serialized in little-endian byte * order because most hardware is little-endian. * (2) The operation can be either in-place or, if dpixd == NULL, * a new dpix is made. If not in-place, caller must catch * the returned pointer. */ DPIX * dpixEndianByteSwap(DPIX *dpixd, DPIX *dpixs) { PROCNAME("dpixEndianByteSwap"); if (!dpixs) return (DPIX *)ERROR_PTR("dpixs not defined", procName, dpixd); if (dpixd && (dpixs != dpixd)) return (DPIX *)ERROR_PTR("dpixd != dpixs", procName, dpixd); #ifdef L_BIG_ENDIAN { l_uint32 *data; l_int32 i, j, w, h; l_uint32 word; dpixGetDimensions(dpixs, &w, &h); dpixd = dpixCopy(dpixd, dpixs); /* no copy if dpixd == dpixs */ data = (l_uint32 *)dpixGetData(dpixd); for (i = 0; i < h; i++) { for (j = 0; j < 2 * w; j++, data++) { word = *data; *data = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return dpixd; } #else /* L_LITTLE_ENDIAN */ if (dpixd) return dpixd; /* no-op */ else return dpixClone(dpixs); #endif /* L_BIG_ENDIAN */ } /*--------------------------------------------------------------------* * Print FPix (subsampled, for debugging) * *--------------------------------------------------------------------*/ /*! * fpixPrintStream() * * Input: stream * fpix * factor (subsampled) * Return: 0 if OK, 1 on error * * Notes: * (1) Subsampled printout of fpix for debugging. */ l_int32 fpixPrintStream(FILE *fp, FPIX *fpix, l_int32 factor) { l_int32 i, j, w, h, count; l_float32 val; PROCNAME("fpixPrintStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!fpix) return ERROR_INT("fpix not defined", procName, 1); if (factor < 1) return ERROR_INT("sampling factor < 1f", procName, 1); fpixGetDimensions(fpix, &w, &h); fprintf(fp, "\nFPix: w = %d, h = %d\n", w, h); for (i = 0; i < h; i += factor) { for (count = 0, j = 0; j < w; j += factor, count++) { fpixGetPixel(fpix, j, i, &val); fprintf(fp, "val[%d, %d] = %f ", i, j, val); if ((count + 1) % 3 == 0) fprintf(fp, "\n"); } if (count % 3) fprintf(fp, "\n"); } fprintf(fp, "\n"); return 0; } leptonica-1.70/src/colormorph.c0000640000175000017500000001113712244220253014617 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colormorph.c * * Top-level color morphological operations * * PIX *pixColorMorph() * * Method: Algorithm by van Herk and Gil and Werman, 1992 * Apply grayscale morphological operations separately * to each component. */ #include "allheaders.h" /*-----------------------------------------------------------------* * Top-level color morphological operations * *-----------------------------------------------------------------*/ /*! * pixColorMorph() * * Input: pixs * type (L_MORPH_DILATE, L_MORPH_ERODE, L_MORPH_OPEN, * or L_MORPH_CLOSE) * hsize (of Sel; must be odd; origin implicitly in center) * vsize (ditto) * Return: pixd * * Notes: * (1) This does the morph operation on each component separately, * and recombines the result. * (2) Sel is a brick with all elements being hits. * (3) If hsize = vsize = 1, just returns a copy. */ PIX * pixColorMorph(PIX *pixs, l_int32 type, l_int32 hsize, l_int32 vsize) { PIX *pixr, *pixg, *pixb, *pixrm, *pixgm, *pixbm, *pixd; PROCNAME("pixColorMorph"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && type != L_MORPH_OPEN && type != L_MORPH_CLOSE) return (PIX *)ERROR_PTR("invalid morph type", procName, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", procName); vsize++; } if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixr = pixGetRGBComponent(pixs, COLOR_RED); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); if (type == L_MORPH_DILATE) { pixrm = pixDilateGray(pixr, hsize, vsize); pixgm = pixDilateGray(pixg, hsize, vsize); pixbm = pixDilateGray(pixb, hsize, vsize); } else if (type == L_MORPH_ERODE) { pixrm = pixErodeGray(pixr, hsize, vsize); pixgm = pixErodeGray(pixg, hsize, vsize); pixbm = pixErodeGray(pixb, hsize, vsize); } else if (type == L_MORPH_OPEN) { pixrm = pixOpenGray(pixr, hsize, vsize); pixgm = pixOpenGray(pixg, hsize, vsize); pixbm = pixOpenGray(pixb, hsize, vsize); } else { /* type == L_MORPH_CLOSE */ pixrm = pixCloseGray(pixr, hsize, vsize); pixgm = pixCloseGray(pixg, hsize, vsize); pixbm = pixCloseGray(pixb, hsize, vsize); } pixd = pixCreateRGBImage(pixrm, pixgm, pixbm); pixDestroy(&pixr); pixDestroy(&pixrm); pixDestroy(&pixg); pixDestroy(&pixgm); pixDestroy(&pixb); pixDestroy(&pixbm); return pixd; } leptonica-1.70/src/ptra.h0000644000175000017500000000701211707052573013422 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_PTRA_H #define LEPTONICA_PTRA_H /* * Contains the following structs: * struct L_Ptra * struct L_Ptraa * * Contains definitions for: * L_Ptra compaction flags for removal * L_Ptra shifting flags for insert * L_Ptraa accessor flags */ /*------------------------------------------------------------------------* * Generic Ptr Array Structs * *------------------------------------------------------------------------*/ /* Generic pointer array */ struct L_Ptra { l_int32 nalloc; /* size of allocated ptr array */ l_int32 imax; /* greatest valid index */ l_int32 nactual; /* actual number of stored elements */ void **array; /* ptr array */ }; typedef struct L_Ptra L_PTRA; /* Array of generic pointer arrays */ struct L_Ptraa { l_int32 nalloc; /* size of allocated ptr array */ struct L_Ptra **ptra; /* array of ptra */ }; typedef struct L_Ptraa L_PTRAA; /*------------------------------------------------------------------------* * Array flags * *------------------------------------------------------------------------*/ /* Flags for removal from L_Ptra */ enum { L_NO_COMPACTION = 1, /* null the pointer only */ L_COMPACTION = 2 /* compact the array */ }; /* Flags for insertion into L_Ptra */ enum { L_AUTO_DOWNSHIFT = 0, /* choose based on number of holes */ L_MIN_DOWNSHIFT = 1, /* downshifts min # of ptrs below insert */ L_FULL_DOWNSHIFT = 2 /* downshifts all ptrs below insert */ }; /* Accessor flags for L_Ptraa */ enum { L_HANDLE_ONLY = 0, /* ptr to L_Ptra; caller can inspect only */ L_REMOVE = 1 /* caller owns; destroy or save in L_Ptraa */ }; #endif /* LEPTONICA_PTRA_H */ leptonica-1.70/src/writefile.c0000664000175000017500000012364612273206565014460 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * writefile.c * * High-level procedures for writing images to file: * l_int32 pixaWriteFiles() * l_int32 pixWrite() [behavior depends on WRITE_AS_NAMED] * l_int32 pixWriteStream() * l_int32 pixWriteImpliedFormat() * l_int32 pixWriteTempfile() * * Selection of output format if default is requested * l_int32 pixChooseOutputFormat() * l_int32 getImpliedFileFormat() * const char *getFormatExtension() * * Write to memory * l_int32 pixWriteMem() * * Image display for debugging * l_int32 pixDisplay() * l_int32 pixDisplayWithTitle() * l_int32 pixDisplayMultiple() * l_int32 pixDisplayWrite() * l_int32 pixDisplayWriteFormat() * l_int32 pixSaveTiled() * l_int32 pixSaveTiledOutline() * l_int32 pixSaveTiledWithText() * void l_chooseDisplayProg() * * Supported file formats: * (1) Writing is supported without any external libraries: * bmp * pnm (including pbm, pgm, etc) * spix (raw serialized) * (2) Writing is supported with installation of external libraries: * png * jpg (standard jfif version) * tiff (including most varieties of compression) * gif * webp * (3) Writing is supported through special interfaces: * ps (PostScript, in psio1.c, psio2.c): * level 1 (uncompressed) * level 2 (g4 and dct encoding: requires tiff, jpg) * level 3 (g4, dct and flate encoding: requires tiff, jpg, zlib) * pdf (PDF, in pdfio.c): * level 1 (g4 and dct encoding: requires tiff, jpg) * level 2 (g4, dct and flate encoding: requires tiff, jpg, zlib) * (4) No other output formats are supported, such as jp2 (jpeg2000) */ #include #include "allheaders.h" /* Special flag for pixWrite(). The default for both unix and */ /* windows is to use whatever filename is given, as opposed to */ /* insuring the filename extension matches the image compression. */ #define WRITE_AS_NAMED 1 /* Display program (xv, xli, xzgv, open) to be invoked by pixDisplay() */ #ifdef _WIN32 static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_IV; /* default */ #elif defined(__APPLE__) static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_OPEN; /* default */ #else static l_int32 var_DISPLAY_PROG = L_DISPLAY_WITH_XZGV; /* default */ #endif /* _WIN32 */ static const l_int32 L_BUF_SIZE = 512; static const l_int32 MAX_DISPLAY_WIDTH = 1000; static const l_int32 MAX_DISPLAY_HEIGHT = 800; static const l_int32 MAX_SIZE_FOR_PNG = 200; /* PostScript output for printing */ static const l_float32 DEFAULT_SCALING = 1.0; /* Global array of image file format extension names. */ /* This is in 1-1 corrspondence with format enum in imageio.h. */ /* The empty string at the end represents the serialized format, */ /* which has no recognizable extension name, but the array must */ /* be padded to agree with the format enum. */ /* (Note on 'const': The size of the array can't be defined 'const' */ /* because that makes it static. The 'const' in the definition of */ /* the array refers to the strings in the array; the ptr to the */ /* array is not const and can be used 'extern' in other files.) */ LEPT_DLL l_int32 NumImageFileFormatExtensions = 19; /* array size */ LEPT_DLL const char *ImageFileFormatExtensions[] = {"unknown", "bmp", "jpg", "png", "tif", "tif", "tif", "tif", "tif", "tif", "tif", "pnm", "ps", "gif", "jp2", "webp", "pdf", "default", ""}; /* Local map of image file name extension to output format */ struct ExtensionMap { char extension[8]; l_int32 format; }; static const struct ExtensionMap extension_map[] = { { ".bmp", IFF_BMP }, { ".jpg", IFF_JFIF_JPEG }, { ".jpeg", IFF_JFIF_JPEG }, { ".png", IFF_PNG }, { ".tif", IFF_TIFF }, { ".tiff", IFF_TIFF }, { ".pnm", IFF_PNM }, { ".gif", IFF_GIF }, { ".jp2", IFF_JP2 }, { ".ps", IFF_PS }, { ".pdf", IFF_LPDF }, { ".webp", IFF_WEBP } }; /*---------------------------------------------------------------------* * Top-level procedures for writing images to file * *---------------------------------------------------------------------*/ /*! * pixaWriteFiles() * * Input: rootname * pixa * format (defined in imageio.h; see notes for default) * Return: 0 if OK; 1 on error * * Notes: * (1) Use @format = IFF_DEFAULT to decide the output format * individually for each pix. */ l_int32 pixaWriteFiles(const char *rootname, PIXA *pixa, l_int32 format) { char bigbuf[L_BUF_SIZE]; l_int32 i, n, pixformat; PIX *pix; PROCNAME("pixaWriteFiles"); if (!rootname) return ERROR_INT("rootname not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (format < 0 || format == IFF_UNKNOWN || format >= NumImageFileFormatExtensions) return ERROR_INT("invalid format", procName, 1); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if (format == IFF_DEFAULT) pixformat = pixChooseOutputFormat(pix); else pixformat = format; snprintf(bigbuf, L_BUF_SIZE, "%s%03d.%s", rootname, i, ImageFileFormatExtensions[pixformat]); pixWrite(bigbuf, pix, pixformat); pixDestroy(&pix); } return 0; } /*! * pixWrite() * * Input: filename * pix * format (defined in imageio.h) * Return: 0 if OK; 1 on error * * Notes: * (1) Open for write using binary mode (with the "b" flag) * to avoid having Windows automatically translate the NL * into CRLF, which corrupts image files. On non-windows * systems this flag should be ignored, per ISO C90. * Thanks to Dave Bryan for pointing this out. * (2) If the default image format IFF_DEFAULT is requested: * use the input format if known; otherwise, use a lossless format. * (3) There are two modes with respect to file naming. * (a) The default code writes to @filename. * (b) If WRITE_AS_NAMED is defined to 0, it's a bit fancier. * Then, if @filename does not have a file extension, one is * automatically appended, depending on the requested format. * The original intent for providing option (b) was to insure * that filenames on Windows have an extension that matches * the image compression. However, this is not the default. */ l_int32 pixWrite(const char *filename, PIX *pix, l_int32 format) { char *fname; FILE *fp; PROCNAME("pixWrite"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (format == IFF_JP2) return ERROR_INT("jp2 not supported", procName, 1); fname = genPathname(filename, NULL); #if WRITE_AS_NAMED /* Default */ if ((fp = fopenWriteStream(fname, "wb+")) == NULL) { FREE(fname); return ERROR_INT("stream not opened", procName, 1); } #else /* Add an extension to the output name if none exists */ {l_int32 extlen; char *extension, *filebuf; splitPathAtExtension(fname, NULL, &extension); extlen = strlen(extension); FREE(extension); if (extlen == 0) { if (format == IFF_DEFAULT || format == IFF_UNKNOWN) format = pixChooseOutputFormat(pix); filebuf = (char *)CALLOC(strlen(fname) + 10, sizeof(char)); if (!filebuf) { return ERROR_INT("filebuf not made", procName, 1); FREE(fname); } strncpy(filebuf, fname, strlen(fname)); strcat(filebuf, "."); strcat(filebuf, ImageFileFormatExtensions[format]); } else { filebuf = (char *)fname; } fp = fopenWriteStream(filebuf, "wb+"); if (filebuf != fname) FREE(filebuf); if (fp == NULL) { FREE(fname); return ERROR_INT("stream not opened", procName, 1); } } #endif /* WRITE_AS_NAMED */ FREE(fname); if (pixWriteStream(fp, pix, format)) { fclose(fp); return ERROR_INT("pix not written to stream", procName, 1); } /* Close the stream except if GIF under windows, because * EGifCloseFile() closes the windows file stream! */ if (format != IFF_GIF) fclose(fp); #ifndef _WIN32 else /* gif file */ fclose(fp); #endif /* ! _WIN32 */ return 0; } /*! * pixWriteStream() * * Input: stream * pix * format * Return: 0 if OK; 1 on error. */ l_int32 pixWriteStream(FILE *fp, PIX *pix, l_int32 format) { PROCNAME("pixWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (format == IFF_DEFAULT) format = pixChooseOutputFormat(pix); switch(format) { case IFF_BMP: pixWriteStreamBmp(fp, pix); break; case IFF_JFIF_JPEG: /* default quality; baseline sequential */ return pixWriteStreamJpeg(fp, pix, 75, 0); break; case IFF_PNG: /* no gamma value stored */ return pixWriteStreamPng(fp, pix, 0.0); break; case IFF_TIFF: /* uncompressed */ case IFF_TIFF_PACKBITS: /* compressed, binary only */ case IFF_TIFF_RLE: /* compressed, binary only */ case IFF_TIFF_G3: /* compressed, binary only */ case IFF_TIFF_G4: /* compressed, binary only */ case IFF_TIFF_LZW: /* compressed, all depths */ case IFF_TIFF_ZIP: /* compressed, all depths */ return pixWriteStreamTiff(fp, pix, format); break; case IFF_PNM: return pixWriteStreamPnm(fp, pix); break; case IFF_GIF: return pixWriteStreamGif(fp, pix); break; case IFF_PS: return pixWriteStreamPS(fp, pix, NULL, 0, DEFAULT_SCALING); break; case IFF_JP2: return ERROR_INT("jp2 format not supported", procName, 1); break; case IFF_WEBP: return pixWriteStreamWebP(fp, pix, 80, 0); break; case IFF_LPDF: return pixWriteStreamPdf(fp, pix, 0, NULL); break; case IFF_SPIX: return pixWriteStreamSpix(fp, pix); break; default: return ERROR_INT("unknown format", procName, 1); break; } return 0; } /*! * pixWriteImpliedFormat() * * Input: filename * pix * quality (iff JPEG; 1 - 100, 0 for default) * progressive (iff JPEG; 0 for baseline seq., 1 for progressive) * Return: 0 if OK; 1 on error * * Notes: * (1) This determines the output format from the filename extension. * (2) The last two args are ignored except for requests for jpeg files. * (3) The jpeg default quality is 75. */ l_int32 pixWriteImpliedFormat(const char *filename, PIX *pix, l_int32 quality, l_int32 progressive) { l_int32 format; PROCNAME("pixWriteImpliedFormat"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); /* Determine output format */ format = getImpliedFileFormat(filename); if (format == IFF_UNKNOWN) { format = IFF_PNG; } else if (format == IFF_TIFF) { if (pixGetDepth(pix) == 1) format = IFF_TIFF_G4; else #ifdef _WIN32 format = IFF_TIFF_LZW; /* poor compression */ #else format = IFF_TIFF_ZIP; /* native windows tools can't handle this */ #endif /* _WIN32 */ } if (format == IFF_JFIF_JPEG) { quality = L_MIN(quality, 100); quality = L_MAX(quality, 0); if (progressive != 0 && progressive != 1) { progressive = 0; L_WARNING("invalid progressive; setting to baseline\n", procName); } if (quality == 0) quality = 75; pixWriteJpeg (filename, pix, quality, progressive); } else { pixWrite(filename, pix, format); } return 0; } /*! * pixWriteTempfile() * * Input: dir (directory name; use '.' for local dir; no trailing '/') * tail ( tailname, including extension if any) * pix * format * &filename ( return actual filename used; use * null to skip) * Return: 0 if OK; 1 on error * * Notes: * (1) This generates a temp filename, writes the pix to it, * and optionally returns the temp filename. * (2) If the filename is returned to a windows program from a DLL, * use lept_free() to free it. * (3) See genTempFilename() for details. We omit the time and pid * here. */ l_int32 pixWriteTempfile(const char *dir, const char *tail, PIX *pix, l_int32 format, char **pfilename) { char *filename; l_int32 ret; PROCNAME("pixWriteTempfile"); if (!dir) return ERROR_INT("filename not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if ((filename = genTempFilename(dir, tail, 0, 0)) == NULL) return ERROR_INT("temp filename not made", procName, 1); ret = pixWrite(filename, pix, format); if (pfilename) *pfilename = filename; else FREE(filename); return ret; } /*---------------------------------------------------------------------* * Selection of output format if default is requested * *---------------------------------------------------------------------*/ /*! * pixChooseOutputFormat() * * Input: pix * Return: output format, or 0 on error * * Notes: * (1) This should only be called if the requested format is IFF_DEFAULT. * (2) If the pix wasn't read from a file, its input format value * will be IFF_UNKNOWN, and in that case it is written out * in a compressed but lossless format. */ l_int32 pixChooseOutputFormat(PIX *pix) { l_int32 d, format; PROCNAME("pixChooseOutputFormat"); if (!pix) return ERROR_INT("pix not defined", procName, 0); d = pixGetDepth(pix); format = pixGetInputFormat(pix); if (format == IFF_UNKNOWN) { /* output lossless */ if (d == 1) format = IFF_TIFF_G4; else format = IFF_PNG; } return format; } /*! * getImpliedFileFormat() * * Input: filename * Return: output format, or IFF_UNKNOWN on error or invalid extension. * * Notes: * (1) This determines the output file format from the extension * of the input filename. */ l_int32 getImpliedFileFormat(const char *filename) { char *extension; int i, numext; l_int32 format = IFF_UNKNOWN; if (splitPathAtExtension (filename, NULL, &extension)) return IFF_UNKNOWN; numext = sizeof(extension_map) / sizeof(extension_map[0]); for (i = 0; i < numext; i++) { if (!strcmp(extension, extension_map[i].extension)) { format = extension_map[i].format; break; } } FREE(extension); return format; } /*! * getFormatExtension() * * Input: format (integer) * Return: extension (string), or null if format is out of range * * Notes: * (1) This string is NOT owned by the caller; it is just a pointer * to a global string. Do not free it. */ const char * getFormatExtension(l_int32 format) { PROCNAME("getFormatExtension"); if (format < 0 || format >= NumImageFileFormatExtensions) return (const char *)ERROR_PTR("invalid format", procName, NULL); return ImageFileFormatExtensions[format]; } /*---------------------------------------------------------------------* * Write to memory * *---------------------------------------------------------------------*/ /*! * pixWriteMem() * * Input: &data ( data of tiff compressed image) * &size ( size of returned data) * pix * format (defined in imageio.h) * Return: 0 if OK, 1 on error * * Notes: * (1) On windows, this will only write tiff and PostScript to memory. * For other formats, it requires open_memstream(3). * (2) PostScript output is uncompressed, in hex ascii. * Most printers support level 2 compression (tiff_g4 for 1 bpp, * jpeg for 8 and 32 bpp). */ l_int32 pixWriteMem(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 format) { l_int32 ret; PROCNAME("pixWriteMem"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); if (!psize) return ERROR_INT("&size not defined", procName, 1 ); if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); if (format == IFF_DEFAULT) format = pixChooseOutputFormat(pix); switch(format) { case IFF_BMP: ret = pixWriteMemBmp(pdata, psize, pix); break; case IFF_JFIF_JPEG: /* default quality; baseline sequential */ ret = pixWriteMemJpeg(pdata, psize, pix, 75, 0); break; case IFF_PNG: /* no gamma value stored */ ret = pixWriteMemPng(pdata, psize, pix, 0.0); break; case IFF_TIFF: /* uncompressed */ case IFF_TIFF_PACKBITS: /* compressed, binary only */ case IFF_TIFF_RLE: /* compressed, binary only */ case IFF_TIFF_G3: /* compressed, binary only */ case IFF_TIFF_G4: /* compressed, binary only */ case IFF_TIFF_LZW: /* compressed, all depths */ case IFF_TIFF_ZIP: /* compressed, all depths */ ret = pixWriteMemTiff(pdata, psize, pix, format); break; case IFF_PNM: ret = pixWriteMemPnm(pdata, psize, pix); break; case IFF_PS: ret = pixWriteMemPS(pdata, psize, pix, NULL, 0, DEFAULT_SCALING); break; case IFF_GIF: ret = pixWriteMemGif(pdata, psize, pix); break; case IFF_JP2: return ERROR_INT("jp2 not supported", procName, 1); break; case IFF_SPIX: ret = pixWriteMemSpix(pdata, psize, pix); break; default: return ERROR_INT("unknown format", procName, 1); break; } return ret; } /*---------------------------------------------------------------------* * Image display for debugging * *---------------------------------------------------------------------*/ /*! * pixDisplay() * * Input: pix (1, 2, 4, 8, 16, 32 bpp) * x, y (location of display frame on the screen) * Return: 0 if OK; 1 on error * * Notes: * (1) This displays the image using xzgv, xli or xv on Unix, * or i_view on Windows. The display program must be on * your $PATH variable. It is chosen by setting the global * var_DISPLAY_PROG, using l_chooseDisplayProg(). * Default on Unix is xzgv. * (2) Images with dimensions larger than MAX_DISPLAY_WIDTH or * MAX_DISPLAY_HEIGHT are downscaled to fit those constraints. * This is particulary important for displaying 1 bpp images * with xv, because xv automatically downscales large images * by subsampling, which looks poor. For 1 bpp, we use * scale-to-gray to get decent-looking anti-aliased images. * In all cases, we write a temporary file to /tmp, that is * read by the display program. * (3) For spp == 4, we call pixDisplayLayersRGBA() to show 3 * versions of the image: the image with a fully opaque * alpha, the alpha, and the image as it would appear with * a white background. * (4) Note: this function uses a static internal variable to number * output files written by a single process. Behavior with a * shared library may be unpredictable. */ l_int32 pixDisplay(PIX *pixs, l_int32 x, l_int32 y) { return pixDisplayWithTitle(pixs, x, y, NULL, 1); } /*! * pixDisplayWithTitle() * * Input: pix (1, 2, 4, 8, 16, 32 bpp) * x, y (location of display frame) * title ( on frame; can be NULL); * dispflag (1 to write, else disabled) * Return: 0 if OK; 1 on error * * Notes: * (1) See notes for pixDisplay(). * (2) This displays the image if dispflag == 1. */ l_int32 pixDisplayWithTitle(PIX *pixs, l_int32 x, l_int32 y, const char *title, l_int32 dispflag) { char *tempname; char buffer[L_BUF_SIZE]; static l_int32 index = 0; /* caution: not .so or thread safe */ l_int32 w, h, d, spp, maxheight, opaque, threeviews, ignore; l_float32 ratw, rath, ratmin; PIX *pix0, *pix1, *pix2; PIXCMAP *cmap; #ifndef _WIN32 l_int32 wt, ht; #else char *pathname; char fullpath[_MAX_PATH]; #endif /* _WIN32 */ PROCNAME("pixDisplayWithTitle"); if (dispflag != 1) return 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (var_DISPLAY_PROG != L_DISPLAY_WITH_XZGV && var_DISPLAY_PROG != L_DISPLAY_WITH_XLI && var_DISPLAY_PROG != L_DISPLAY_WITH_XV && var_DISPLAY_PROG != L_DISPLAY_WITH_IV && var_DISPLAY_PROG != L_DISPLAY_WITH_OPEN) { return ERROR_INT("no program chosen for display", procName, 1); } /* Display with three views if either spp = 4 or if colormapped * and the alpha component is not fully opaque */ opaque = TRUE; if ((cmap = pixGetColormap(pixs)) != NULL) pixcmapIsOpaque(cmap, &opaque); spp = pixGetSpp(pixs); threeviews = (spp == 4 || !opaque) ? TRUE : FALSE; /* If colormapped and not opaque, remove the colormap to RGBA */ if (!opaque) pix0 = pixRemoveColormap(pixs, REMOVE_CMAP_WITH_ALPHA); else pix0 = pixClone(pixs); /* Scale if necessary; this will also remove a colormap */ pixGetDimensions(pix0, &w, &h, &d); maxheight = (threeviews) ? MAX_DISPLAY_HEIGHT / 3 : MAX_DISPLAY_HEIGHT; if (w <= MAX_DISPLAY_WIDTH && h <= maxheight) { if (d == 16) /* take MSB */ pix1 = pixConvert16To8(pix0, 1); else pix1 = pixClone(pix0); } else { ratw = (l_float32)MAX_DISPLAY_WIDTH / (l_float32)w; rath = (l_float32)maxheight / (l_float32)h; ratmin = L_MIN(ratw, rath); if (ratmin < 0.125 && d == 1) pix1 = pixScaleToGray8(pix0); else if (ratmin < 0.25 && d == 1) pix1 = pixScaleToGray4(pix0); else if (ratmin < 0.33 && d == 1) pix1 = pixScaleToGray3(pix0); else if (ratmin < 0.5 && d == 1) pix1 = pixScaleToGray2(pix0); else pix1 = pixScale(pix0, ratmin, ratmin); } pixDestroy(&pix0); if (!pix1) return ERROR_INT("pix1 not made", procName, 1); /* Generate the three views if required */ if (threeviews) pix2 = pixDisplayLayersRGBA(pix1, 0xffffff00, 0); else pix2 = pixClone(pix1); if (index == 0) { lept_rmdir("disp"); lept_mkdir("disp"); } index++; if (pixGetDepth(pix2) < 8 || (w < MAX_SIZE_FOR_PNG && h < MAX_SIZE_FOR_PNG)) { snprintf(buffer, L_BUF_SIZE, "/tmp/disp/write.%03d.png", index); pixWrite(buffer, pix2, IFF_PNG); } else { snprintf(buffer, L_BUF_SIZE, "/tmp/disp/write.%03d.jpg", index); pixWrite(buffer, pix2, IFF_JFIF_JPEG); } tempname = stringNew(buffer); #ifndef _WIN32 /* Unix */ if (var_DISPLAY_PROG == L_DISPLAY_WITH_XZGV) { /* no way to display title */ pixGetDimensions(pix2, &wt, &ht, NULL); snprintf(buffer, L_BUF_SIZE, "xzgv --geometry %dx%d+%d+%d %s &", wt + 10, ht + 10, x, y, tempname); } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_XLI) { if (title) { snprintf(buffer, L_BUF_SIZE, "xli -dispgamma 1.0 -quiet -geometry +%d+%d -title \"%s\" %s &", x, y, title, tempname); } else { snprintf(buffer, L_BUF_SIZE, "xli -dispgamma 1.0 -quiet -geometry +%d+%d %s &", x, y, tempname); } } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_XV) { if (title) { snprintf(buffer, L_BUF_SIZE, "xv -quit -geometry +%d+%d -name \"%s\" %s &", x, y, title, tempname); } else { snprintf(buffer, L_BUF_SIZE, "xv -quit -geometry +%d+%d %s &", x, y, tempname); } } else if (var_DISPLAY_PROG == L_DISPLAY_WITH_OPEN) { snprintf(buffer, L_BUF_SIZE, "open %s &", tempname); } ignore = system(buffer); #else /* _WIN32 */ /* Windows: L_DISPLAY_WITH_IV */ pathname = genPathname(tempname, NULL); _fullpath(fullpath, pathname, sizeof(fullpath)); if (title) { snprintf(buffer, L_BUF_SIZE, "i_view32.exe \"%s\" /pos=(%d,%d) /title=\"%s\"", fullpath, x, y, title); } else { snprintf(buffer, L_BUF_SIZE, "i_view32.exe \"%s\" /pos=(%d,%d)", fullpath, x, y); } ignore = system(buffer); FREE(pathname); #endif /* _WIN32 */ pixDestroy(&pix1); pixDestroy(&pix2); FREE(tempname); return 0; } /*! * pixDisplayMultiple() * * Input: filepattern * Return: 0 if OK; 1 on error * * Notes: * (1) This allows display of multiple images using gthumb on unix * and i_view32 on windows. The @filepattern is a regular * expression that is expanded by the shell. * (2) _fullpath automatically changes '/' to '\' if necessary. */ l_int32 pixDisplayMultiple(const char *filepattern) { char buffer[L_BUF_SIZE]; l_int32 ignore; #ifdef _WIN32 char *pathname; char *dir, *tail; char fullpath[_MAX_PATH]; #endif /* _WIN32 */ PROCNAME("pixDisplayMultiple"); if (!filepattern || strlen(filepattern) == 0) return ERROR_INT("filepattern not defined", procName, 1); #ifndef _WIN32 snprintf(buffer, L_BUF_SIZE, "gthumb %s &", filepattern); #else /* irFanView wants absolute path for directory */ pathname = genPathname(filepattern, NULL); splitPathAtDirectory(pathname, &dir, &tail); _fullpath(fullpath, dir, sizeof(fullpath)); snprintf(buffer, L_BUF_SIZE, "i_view32.exe \"%s\" /filepattern=\"%s\" /thumbs", fullpath, tail); FREE(pathname); FREE(dir); FREE(tail); #endif /* _WIN32 */ ignore = system(buffer); return 0; } /*! * pixDisplayWrite() * * Input: pix (1, 2, 4, 8, 16, 32 bpp) * reduction (-1 to reset/erase; 0 to disable; * otherwise this is a reduction factor) * Return: 0 if OK; 1 on error * * Notes: * (1) This defaults to jpeg output for pix that are 32 bpp or * 8 bpp without a colormap. If you want to write all images * losslessly, use format == IFF_PNG in pixDisplayWriteFormat(). * (2) See pixDisplayWriteFormat() for usage details. */ l_int32 pixDisplayWrite(PIX *pixs, l_int32 reduction) { return pixDisplayWriteFormat(pixs, reduction, IFF_JFIF_JPEG); } /*! * pixDisplayWriteFormat() * * Input: pix (1, 2, 4, 8, 16, 32 bpp) * reduction (-1 to reset/erase; 0 to disable; * otherwise this is a reduction factor) * format (IFF_PNG or IFF_JFIF_JPEG) * Return: 0 if OK; 1 on error * * Notes: * (1) This writes files if reduction > 0. These can be displayed using * pixDisplayMultiple("/tmp/display/file*"); * (2) All previously written files can be erased by calling with * reduction < 0; the value of pixs is ignored. * (3) If reduction > 1 and depth == 1, this does a scale-to-gray * reduction. * (4) This function uses a static internal variable to number * output files written by a single process. Behavior * with a shared library may be unpredictable. * (5) Output file format is as follows: * format == IFF_JFIF_JPEG: * png if d < 8 or d == 16 or if the output pix * has a colormap. Otherwise, output is jpg. * format == IFF_PNG: * png (lossless) on all images. * (6) For 16 bpp, the choice of full dynamic range with log scale * is the best for displaying these images. Alternative outputs are * pix8 = pixMaxDynamicRange(pixt, L_LINEAR_SCALE); * pix8 = pixConvert16To8(pixt, 0); // low order byte * pix8 = pixConvert16To8(pixt, 1); // high order byte */ l_int32 pixDisplayWriteFormat(PIX *pixs, l_int32 reduction, l_int32 format) { char buf[L_BUF_SIZE]; char *fname; l_float32 scale; PIX *pixt, *pix8; static l_int32 index = 0; /* caution: not .so or thread safe */ PROCNAME("pixDisplayWriteFormat"); if (reduction == 0) return 0; if (reduction < 0) { index = 0; /* reset; this will cause erasure at next call to write */ return 0; } if (format != IFF_JFIF_JPEG && format != IFF_PNG) return ERROR_INT("invalid format", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (index == 0) { lept_rmdir("display"); lept_mkdir("display"); } index++; if (reduction == 1) { pixt = pixClone(pixs); } else { scale = 1. / (l_float32)reduction; if (pixGetDepth(pixs) == 1) pixt = pixScaleToGray(pixs, scale); else pixt = pixScale(pixs, scale, scale); } if (pixGetDepth(pixt) == 16) { pix8 = pixMaxDynamicRange(pixt, L_LOG_SCALE); snprintf(buf, L_BUF_SIZE, "file.%03d.png", index); fname = genPathname("/tmp/display", buf); pixWrite(fname, pix8, IFF_PNG); pixDestroy(&pix8); } else if (pixGetDepth(pixt) < 8 || pixGetColormap(pixt) || format == IFF_PNG) { snprintf(buf, L_BUF_SIZE, "file.%03d.png", index); fname = genPathname("/tmp/display", buf); pixWrite(fname, pixt, IFF_PNG); } else { snprintf(buf, L_BUF_SIZE, "file.%03d.jpg", index); fname = genPathname("/tmp/display", buf); pixWrite(fname, pixt, format); } FREE(fname); pixDestroy(&pixt); return 0; } /*! * pixSaveTiled() * * Input: pixs (1, 2, 4, 8, 32 bpp) * pixa (the pix are accumulated here) * scalefactor (0.0 to disable; otherwise this is a scale factor) * newrow (0 if placed on the same row as previous; 1 otherwise) * space (horizontal and vertical spacing, in pixels) * dp (depth of pixa; 8 or 32 bpp; only used on first call) * Return: 0 if OK, 1 on error. */ l_int32 pixSaveTiled(PIX *pixs, PIXA *pixa, l_float32 scalefactor, l_int32 newrow, l_int32 space, l_int32 dp) { /* Save without an outline */ return pixSaveTiledOutline(pixs, pixa, scalefactor, newrow, space, 0, dp); } /*! * pixSaveTiledOutline() * * Input: pixs (1, 2, 4, 8, 32 bpp) * pixa (the pix are accumulated here) * scalefactor (0.0 to disable; otherwise this is a scale factor) * newrow (0 if placed on the same row as previous; 1 otherwise) * space (horizontal and vertical spacing, in pixels) * linewidth (width of added outline for image; 0 for no outline) * dp (depth of pixa; 8 or 32 bpp; only used on first call) * Return: 0 if OK, 1 on error. * * Notes: * (1) Before calling this function for the first time, use * pixaCreate() to make the @pixa that will accumulate the pix. * This is passed in each time pixSaveTiled() is called. * (2) @scalefactor scales the input image. After scaling and * possible depth conversion, the image is saved in the input * pixa, along with a box that specifies the location to * place it when tiled later. Disable saving the pix by * setting @scalefactor == 0.0. * (3) @newrow and @space specify the location of the new pix * with respect to the last one(s) that were entered. * (4) @dp specifies the depth at which all pix are saved. It can * be only 8 or 32 bpp. Any colormap is removed. This is only * used at the first invocation. * (5) This function uses two variables from call to call. * If they were static, the function would not be .so or thread * safe, and furthermore, there would be interference with two or * more pixa accumulating images at a time. Consequently, * we use the first pix in the pixa to store and obtain both * the depth and the current position of the bottom (one pixel * below the lowest image raster line when laid out using * the boxa). The bottom variable is stored in the input format * field, which is the only field available for storing an int. */ l_int32 pixSaveTiledOutline(PIX *pixs, PIXA *pixa, l_float32 scalefactor, l_int32 newrow, l_int32 space, l_int32 linewidth, l_int32 dp) { l_int32 n, top, left, bx, by, bw, w, h, depth, bottom; BOX *box; PIX *pix1, *pix2, *pix3, *pix4; PROCNAME("pixSaveTiledOutline"); if (scalefactor == 0.0) return 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); n = pixaGetCount(pixa); if (n == 0) { bottom = 0; if (dp != 8 && dp != 32) { L_WARNING("dp not 8 or 32 bpp; using 32\n", procName); depth = 32; } else { depth = dp; } } else { /* extract the depth and bottom params from the first pix */ pix1 = pixaGetPix(pixa, 0, L_CLONE); depth = pixGetDepth(pix1); bottom = pixGetInputFormat(pix1); /* not typical usage! */ pixDestroy(&pix1); } /* Remove colormap if it exists; otherwise a copy. This * guarantees that pix4 is not a clone of pixs. */ pix1 = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_BASED_ON_SRC, L_COPY); /* Scale and convert to output depth */ if (scalefactor == 1.0) { pix2 = pixClone(pix1); } else if (scalefactor > 1.0) { pix2 = pixScale(pix1, scalefactor, scalefactor); } else if (scalefactor < 1.0) { if (pixGetDepth(pix1) == 1) pix2 = pixScaleToGray(pix1, scalefactor); else pix2 = pixScale(pix1, scalefactor, scalefactor); } pixDestroy(&pix1); if (depth == 8) pix3 = pixConvertTo8(pix2, 0); else pix3 = pixConvertTo32(pix2); pixDestroy(&pix2); /* Add black outline */ if (linewidth > 0) pix4 = pixAddBorder(pix3, linewidth, 0); else pix4 = pixClone(pix3); pixDestroy(&pix3); /* Find position of current pix (UL corner plus size) */ if (n == 0) { top = 0; left = 0; } else if (newrow == 1) { top = bottom + space; left = 0; } else if (n > 0) { pixaGetBoxGeometry(pixa, n - 1, &bx, &by, &bw, NULL); top = by; left = bx + bw + space; } pixGetDimensions(pix4, &w, &h, NULL); bottom = L_MAX(bottom, top + h); box = boxCreate(left, top, w, h); pixaAddPix(pixa, pix4, L_INSERT); pixaAddBox(pixa, box, L_INSERT); /* Save the new bottom value */ pix1 = pixaGetPix(pixa, 0, L_CLONE); pixSetInputFormat(pix1, bottom); /* not typical usage! */ pixDestroy(&pix1); return 0; } /*! * pixSaveTiledWithText() * * Input: pixs (1, 2, 4, 8, 32 bpp) * pixa (the pix are accumulated here; as 32 bpp) * outwidth (in pixels; use 0 to disable entirely) * newrow (1 to start a new row; 0 to go on same row as previous) * space (horizontal and vertical spacing, in pixels) * linewidth (width of added outline for image; 0 for no outline) * bmf ( font struct) * textstr ( text string to be added) * val (color to set the text) * location (L_ADD_ABOVE, L_ADD_AT_TOP, L_ADD_AT_BOT, L_ADD_BELOW) * Return: 0 if OK, 1 on error. * * Notes: * (1) Before calling this function for the first time, use * pixaCreate() to make the @pixa that will accumulate the pix. * This is passed in each time pixSaveTiled() is called. * (2) @outwidth is the scaled width. After scaling, the image is * saved in the input pixa, along with a box that specifies * the location to place it when tiled later. Disable saving * the pix by setting @outwidth == 0. * (3) @newrow and @space specify the location of the new pix * with respect to the last one(s) that were entered. * (4) All pix are saved as 32 bpp RGB. * (5) If both @bmf and @textstr are defined, this generates a pix * with the additional text; otherwise, no text is written. * (6) The text is written before scaling, so it is properly * antialiased in the scaled pix. However, if the pix on * different calls have different widths, the size of the * text will vary. * (7) See pixSaveTiledOutline() for other implementation details. */ l_int32 pixSaveTiledWithText(PIX *pixs, PIXA *pixa, l_int32 outwidth, l_int32 newrow, l_int32 space, l_int32 linewidth, L_BMF *bmf, const char *textstr, l_uint32 val, l_int32 location) { PIX *pix1, *pix2, *pix3, *pix4; PROCNAME("pixSaveTiledWithText"); if (outwidth == 0) return 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); pix1 = pixConvertTo32(pixs); if (linewidth > 0) pix2 = pixAddBorder(pix1, linewidth, 0); else pix2 = pixClone(pix1); if (bmf && textstr) pix3 = pixAddSingleTextblock(pix2, bmf, textstr, val, location, NULL); else pix3 = pixClone(pix2); pix4 = pixScaleToSize(pix3, outwidth, 0); pixSaveTiled(pix4, pixa, 1.0, newrow, space, 32); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return 0; } void l_chooseDisplayProg(l_int32 selection) { if (selection == L_DISPLAY_WITH_XLI || selection == L_DISPLAY_WITH_XZGV || selection == L_DISPLAY_WITH_XV || selection == L_DISPLAY_WITH_IV || selection == L_DISPLAY_WITH_OPEN) { var_DISPLAY_PROG = selection; } else { L_ERROR("invalid display program\n", "l_chooseDisplayProg"); } return; } leptonica-1.70/src/dwacomblow.2.c0000644000175000017500000042613011707052573014753 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: * l_int32 fmorphopgen_low_2() * * Static Low-level: * void fdilate_2_*() * void ferode_2_*() */ #include "allheaders.h" static void fdilate_2_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_58(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_59(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_60(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_61(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_62(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_63(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_64(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_65(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_66(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_67(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_68(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_69(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_70(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_71(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_72(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_73(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_74(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_2_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_2_75(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! * fmorphopgen_low_2() * * a dispatcher to appropriate low-level code */ l_int32 fmorphopgen_low_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fdilate_2_0(datad, w, h, wpld, datas, wpls); break; case 1: ferode_2_0(datad, w, h, wpld, datas, wpls); break; case 2: fdilate_2_1(datad, w, h, wpld, datas, wpls); break; case 3: ferode_2_1(datad, w, h, wpld, datas, wpls); break; case 4: fdilate_2_2(datad, w, h, wpld, datas, wpls); break; case 5: ferode_2_2(datad, w, h, wpld, datas, wpls); break; case 6: fdilate_2_3(datad, w, h, wpld, datas, wpls); break; case 7: ferode_2_3(datad, w, h, wpld, datas, wpls); break; case 8: fdilate_2_4(datad, w, h, wpld, datas, wpls); break; case 9: ferode_2_4(datad, w, h, wpld, datas, wpls); break; case 10: fdilate_2_5(datad, w, h, wpld, datas, wpls); break; case 11: ferode_2_5(datad, w, h, wpld, datas, wpls); break; case 12: fdilate_2_6(datad, w, h, wpld, datas, wpls); break; case 13: ferode_2_6(datad, w, h, wpld, datas, wpls); break; case 14: fdilate_2_7(datad, w, h, wpld, datas, wpls); break; case 15: ferode_2_7(datad, w, h, wpld, datas, wpls); break; case 16: fdilate_2_8(datad, w, h, wpld, datas, wpls); break; case 17: ferode_2_8(datad, w, h, wpld, datas, wpls); break; case 18: fdilate_2_9(datad, w, h, wpld, datas, wpls); break; case 19: ferode_2_9(datad, w, h, wpld, datas, wpls); break; case 20: fdilate_2_10(datad, w, h, wpld, datas, wpls); break; case 21: ferode_2_10(datad, w, h, wpld, datas, wpls); break; case 22: fdilate_2_11(datad, w, h, wpld, datas, wpls); break; case 23: ferode_2_11(datad, w, h, wpld, datas, wpls); break; case 24: fdilate_2_12(datad, w, h, wpld, datas, wpls); break; case 25: ferode_2_12(datad, w, h, wpld, datas, wpls); break; case 26: fdilate_2_13(datad, w, h, wpld, datas, wpls); break; case 27: ferode_2_13(datad, w, h, wpld, datas, wpls); break; case 28: fdilate_2_14(datad, w, h, wpld, datas, wpls); break; case 29: ferode_2_14(datad, w, h, wpld, datas, wpls); break; case 30: fdilate_2_15(datad, w, h, wpld, datas, wpls); break; case 31: ferode_2_15(datad, w, h, wpld, datas, wpls); break; case 32: fdilate_2_16(datad, w, h, wpld, datas, wpls); break; case 33: ferode_2_16(datad, w, h, wpld, datas, wpls); break; case 34: fdilate_2_17(datad, w, h, wpld, datas, wpls); break; case 35: ferode_2_17(datad, w, h, wpld, datas, wpls); break; case 36: fdilate_2_18(datad, w, h, wpld, datas, wpls); break; case 37: ferode_2_18(datad, w, h, wpld, datas, wpls); break; case 38: fdilate_2_19(datad, w, h, wpld, datas, wpls); break; case 39: ferode_2_19(datad, w, h, wpld, datas, wpls); break; case 40: fdilate_2_20(datad, w, h, wpld, datas, wpls); break; case 41: ferode_2_20(datad, w, h, wpld, datas, wpls); break; case 42: fdilate_2_21(datad, w, h, wpld, datas, wpls); break; case 43: ferode_2_21(datad, w, h, wpld, datas, wpls); break; case 44: fdilate_2_22(datad, w, h, wpld, datas, wpls); break; case 45: ferode_2_22(datad, w, h, wpld, datas, wpls); break; case 46: fdilate_2_23(datad, w, h, wpld, datas, wpls); break; case 47: ferode_2_23(datad, w, h, wpld, datas, wpls); break; case 48: fdilate_2_24(datad, w, h, wpld, datas, wpls); break; case 49: ferode_2_24(datad, w, h, wpld, datas, wpls); break; case 50: fdilate_2_25(datad, w, h, wpld, datas, wpls); break; case 51: ferode_2_25(datad, w, h, wpld, datas, wpls); break; case 52: fdilate_2_26(datad, w, h, wpld, datas, wpls); break; case 53: ferode_2_26(datad, w, h, wpld, datas, wpls); break; case 54: fdilate_2_27(datad, w, h, wpld, datas, wpls); break; case 55: ferode_2_27(datad, w, h, wpld, datas, wpls); break; case 56: fdilate_2_28(datad, w, h, wpld, datas, wpls); break; case 57: ferode_2_28(datad, w, h, wpld, datas, wpls); break; case 58: fdilate_2_29(datad, w, h, wpld, datas, wpls); break; case 59: ferode_2_29(datad, w, h, wpld, datas, wpls); break; case 60: fdilate_2_30(datad, w, h, wpld, datas, wpls); break; case 61: ferode_2_30(datad, w, h, wpld, datas, wpls); break; case 62: fdilate_2_31(datad, w, h, wpld, datas, wpls); break; case 63: ferode_2_31(datad, w, h, wpld, datas, wpls); break; case 64: fdilate_2_32(datad, w, h, wpld, datas, wpls); break; case 65: ferode_2_32(datad, w, h, wpld, datas, wpls); break; case 66: fdilate_2_33(datad, w, h, wpld, datas, wpls); break; case 67: ferode_2_33(datad, w, h, wpld, datas, wpls); break; case 68: fdilate_2_34(datad, w, h, wpld, datas, wpls); break; case 69: ferode_2_34(datad, w, h, wpld, datas, wpls); break; case 70: fdilate_2_35(datad, w, h, wpld, datas, wpls); break; case 71: ferode_2_35(datad, w, h, wpld, datas, wpls); break; case 72: fdilate_2_36(datad, w, h, wpld, datas, wpls); break; case 73: ferode_2_36(datad, w, h, wpld, datas, wpls); break; case 74: fdilate_2_37(datad, w, h, wpld, datas, wpls); break; case 75: ferode_2_37(datad, w, h, wpld, datas, wpls); break; case 76: fdilate_2_38(datad, w, h, wpld, datas, wpls); break; case 77: ferode_2_38(datad, w, h, wpld, datas, wpls); break; case 78: fdilate_2_39(datad, w, h, wpld, datas, wpls); break; case 79: ferode_2_39(datad, w, h, wpld, datas, wpls); break; case 80: fdilate_2_40(datad, w, h, wpld, datas, wpls); break; case 81: ferode_2_40(datad, w, h, wpld, datas, wpls); break; case 82: fdilate_2_41(datad, w, h, wpld, datas, wpls); break; case 83: ferode_2_41(datad, w, h, wpld, datas, wpls); break; case 84: fdilate_2_42(datad, w, h, wpld, datas, wpls); break; case 85: ferode_2_42(datad, w, h, wpld, datas, wpls); break; case 86: fdilate_2_43(datad, w, h, wpld, datas, wpls); break; case 87: ferode_2_43(datad, w, h, wpld, datas, wpls); break; case 88: fdilate_2_44(datad, w, h, wpld, datas, wpls); break; case 89: ferode_2_44(datad, w, h, wpld, datas, wpls); break; case 90: fdilate_2_45(datad, w, h, wpld, datas, wpls); break; case 91: ferode_2_45(datad, w, h, wpld, datas, wpls); break; case 92: fdilate_2_46(datad, w, h, wpld, datas, wpls); break; case 93: ferode_2_46(datad, w, h, wpld, datas, wpls); break; case 94: fdilate_2_47(datad, w, h, wpld, datas, wpls); break; case 95: ferode_2_47(datad, w, h, wpld, datas, wpls); break; case 96: fdilate_2_48(datad, w, h, wpld, datas, wpls); break; case 97: ferode_2_48(datad, w, h, wpld, datas, wpls); break; case 98: fdilate_2_49(datad, w, h, wpld, datas, wpls); break; case 99: ferode_2_49(datad, w, h, wpld, datas, wpls); break; case 100: fdilate_2_50(datad, w, h, wpld, datas, wpls); break; case 101: ferode_2_50(datad, w, h, wpld, datas, wpls); break; case 102: fdilate_2_51(datad, w, h, wpld, datas, wpls); break; case 103: ferode_2_51(datad, w, h, wpld, datas, wpls); break; case 104: fdilate_2_52(datad, w, h, wpld, datas, wpls); break; case 105: ferode_2_52(datad, w, h, wpld, datas, wpls); break; case 106: fdilate_2_53(datad, w, h, wpld, datas, wpls); break; case 107: ferode_2_53(datad, w, h, wpld, datas, wpls); break; case 108: fdilate_2_54(datad, w, h, wpld, datas, wpls); break; case 109: ferode_2_54(datad, w, h, wpld, datas, wpls); break; case 110: fdilate_2_55(datad, w, h, wpld, datas, wpls); break; case 111: ferode_2_55(datad, w, h, wpld, datas, wpls); break; case 112: fdilate_2_56(datad, w, h, wpld, datas, wpls); break; case 113: ferode_2_56(datad, w, h, wpld, datas, wpls); break; case 114: fdilate_2_57(datad, w, h, wpld, datas, wpls); break; case 115: ferode_2_57(datad, w, h, wpld, datas, wpls); break; case 116: fdilate_2_58(datad, w, h, wpld, datas, wpls); break; case 117: ferode_2_58(datad, w, h, wpld, datas, wpls); break; case 118: fdilate_2_59(datad, w, h, wpld, datas, wpls); break; case 119: ferode_2_59(datad, w, h, wpld, datas, wpls); break; case 120: fdilate_2_60(datad, w, h, wpld, datas, wpls); break; case 121: ferode_2_60(datad, w, h, wpld, datas, wpls); break; case 122: fdilate_2_61(datad, w, h, wpld, datas, wpls); break; case 123: ferode_2_61(datad, w, h, wpld, datas, wpls); break; case 124: fdilate_2_62(datad, w, h, wpld, datas, wpls); break; case 125: ferode_2_62(datad, w, h, wpld, datas, wpls); break; case 126: fdilate_2_63(datad, w, h, wpld, datas, wpls); break; case 127: ferode_2_63(datad, w, h, wpld, datas, wpls); break; case 128: fdilate_2_64(datad, w, h, wpld, datas, wpls); break; case 129: ferode_2_64(datad, w, h, wpld, datas, wpls); break; case 130: fdilate_2_65(datad, w, h, wpld, datas, wpls); break; case 131: ferode_2_65(datad, w, h, wpld, datas, wpls); break; case 132: fdilate_2_66(datad, w, h, wpld, datas, wpls); break; case 133: ferode_2_66(datad, w, h, wpld, datas, wpls); break; case 134: fdilate_2_67(datad, w, h, wpld, datas, wpls); break; case 135: ferode_2_67(datad, w, h, wpld, datas, wpls); break; case 136: fdilate_2_68(datad, w, h, wpld, datas, wpls); break; case 137: ferode_2_68(datad, w, h, wpld, datas, wpls); break; case 138: fdilate_2_69(datad, w, h, wpld, datas, wpls); break; case 139: ferode_2_69(datad, w, h, wpld, datas, wpls); break; case 140: fdilate_2_70(datad, w, h, wpld, datas, wpls); break; case 141: ferode_2_70(datad, w, h, wpld, datas, wpls); break; case 142: fdilate_2_71(datad, w, h, wpld, datas, wpls); break; case 143: ferode_2_71(datad, w, h, wpld, datas, wpls); break; case 144: fdilate_2_72(datad, w, h, wpld, datas, wpls); break; case 145: ferode_2_72(datad, w, h, wpld, datas, wpls); break; case 146: fdilate_2_73(datad, w, h, wpld, datas, wpls); break; case 147: ferode_2_73(datad, w, h, wpld, datas, wpls); break; case 148: fdilate_2_74(datad, w, h, wpld, datas, wpls); break; case 149: ferode_2_74(datad, w, h, wpld, datas, wpls); break; case 150: fdilate_2_75(datad, w, h, wpld, datas, wpls); break; case 151: ferode_2_75(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fdilate_2_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_2_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_2_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*(sptr - wpls)); } } } static void ferode_2_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*(sptr + wpls)); } } } static void fdilate_2_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_2_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_2_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr - wpls)); } } } static void ferode_2_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr + wpls)); } } } static void fdilate_2_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void ferode_2_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr); } } } static void fdilate_2_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_2_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_2_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr - wpls2)); } } } static void ferode_2_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr + wpls2)); } } } static void fdilate_2_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | (*sptr) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_2_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & (*sptr) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_2_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*sptr) | (*(sptr - wpls3)); } } } static void ferode_2_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*sptr) & (*(sptr + wpls3)); } } } static void fdilate_2_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_2_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_2_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr - wpls2)); } } } static void ferode_2_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr + wpls2)); } } } static void fdilate_2_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | (*sptr) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_2_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & (*sptr) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_2_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*sptr) | (*(sptr - wpls4)); } } } static void ferode_2_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*sptr) & (*(sptr + wpls4)); } } } static void fdilate_2_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_2_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_2_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr - wpls3)); } } } static void ferode_2_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr + wpls3)); } } } static void fdilate_2_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | (*sptr) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_2_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & (*sptr) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_2_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*sptr) | (*(sptr - wpls5)); } } } static void ferode_2_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*sptr) & (*(sptr + wpls5)); } } } static void fdilate_2_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_2_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_2_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls6; wpls2 = 2 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls2)) | (*(sptr - wpls2)) | (*(sptr - wpls6)); } } } static void ferode_2_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls6; wpls2 = 2 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls2)) & (*(sptr + wpls2)) & (*(sptr + wpls6)); } } } static void fdilate_2_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | (*sptr) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_2_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & (*sptr) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_2_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls6; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*sptr) | (*(sptr - wpls6)); } } } static void ferode_2_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls6; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*sptr) & (*(sptr + wpls6)); } } } static void fdilate_2_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_2_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_2_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; l_int32 wpls7; l_int32 wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls8)) | (*(sptr + wpls3)) | (*(sptr - wpls2)) | (*(sptr - wpls7)); } } } static void ferode_2_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; l_int32 wpls3; l_int32 wpls7; l_int32 wpls8; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls8)) & (*(sptr - wpls3)) & (*(sptr + wpls2)) & (*(sptr + wpls7)); } } } static void fdilate_2_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | (*sptr) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_2_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & (*sptr) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_2_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls7; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*sptr) | (*(sptr - wpls7)); } } } static void ferode_2_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls7; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*sptr) & (*(sptr + wpls7)); } } } static void fdilate_2_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_2_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_2_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr - wpls5)); } } } static void ferode_2_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr + wpls5)); } } } static void fdilate_2_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_2_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_2_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; wpls3 = 3 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*(sptr + wpls3)) | (*(sptr - wpls3)) | (*(sptr - wpls9)); } } } static void ferode_2_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; wpls3 = 3 * wpls; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*(sptr - wpls3)) & (*(sptr + wpls3)) & (*(sptr + wpls9)); } } } static void fdilate_2_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | (*sptr) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_2_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & (*sptr) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_2_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls10; wpls5 = 5 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls5)) | (*sptr) | (*(sptr - wpls5)) | (*(sptr - wpls10)); } } } static void ferode_2_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls10; wpls5 = 5 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls5)) & (*sptr) & (*(sptr + wpls5)) & (*(sptr + wpls10)); } } } static void fdilate_2_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | (*sptr) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_2_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & (*sptr) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_2_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls9; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls9)) | (*sptr) | (*(sptr - wpls9)); } } } static void ferode_2_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls9; wpls9 = 9 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls9)) & (*sptr) & (*(sptr + wpls9)); } } } static void fdilate_2_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_2_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_2_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*(sptr + wpls4)) | (*(sptr - wpls3)) | (*(sptr - wpls10)); } } } static void ferode_2_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*(sptr - wpls4)) & (*(sptr + wpls3)) & (*(sptr + wpls10)); } } } static void fdilate_2_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | (*sptr) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_2_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & (*sptr) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_2_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls12; wpls6 = 6 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls6)) | (*sptr) | (*(sptr - wpls6)) | (*(sptr - wpls12)); } } } static void ferode_2_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls12; wpls6 = 6 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls6)) & (*sptr) & (*(sptr + wpls6)) & (*(sptr + wpls12)); } } } static void fdilate_2_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_2_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_2_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; wpls4 = 4 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls4)) | (*(sptr - wpls4)) | (*(sptr - wpls12)); } } } static void ferode_2_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; wpls4 = 4 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls4)) & (*(sptr + wpls4)) & (*(sptr + wpls12)); } } } static void fdilate_2_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | (*sptr) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)); } } } static void ferode_2_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & (*sptr) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)); } } } static void fdilate_2_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls11; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls11)) | (*sptr) | (*(sptr - wpls11)); } } } static void ferode_2_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls11; wpls11 = 11 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls11)) & (*sptr) & (*(sptr + wpls11)); } } } static void fdilate_2_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | (*sptr) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_2_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & (*sptr) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_2_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; wpls7 = 7 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls14)) | (*(sptr + wpls7)) | (*sptr) | (*(sptr - wpls7)) | (*(sptr - wpls14)); } } } static void ferode_2_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; wpls7 = 7 * wpls; wpls14 = 14 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls14)) & (*(sptr - wpls7)) & (*sptr) & (*(sptr + wpls7)) & (*(sptr + wpls14)); } } } static void fdilate_2_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_2_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_2_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; l_int32 wpls15; wpls3 = 3 * wpls; wpls9 = 9 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls9)) | (*(sptr + wpls3)) | (*(sptr - wpls3)) | (*(sptr - wpls9)) | (*(sptr - wpls15)); } } } static void ferode_2_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls9; l_int32 wpls15; wpls3 = 3 * wpls; wpls9 = 9 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls9)) & (*(sptr - wpls3)) & (*(sptr + wpls3)) & (*(sptr + wpls9)) & (*(sptr + wpls15)); } } } static void fdilate_2_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | (*sptr) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)); } } } static void ferode_2_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & (*sptr) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)); } } } static void fdilate_2_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls13; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls13)) | (*sptr) | (*(sptr - wpls13)); } } } static void ferode_2_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls13; wpls13 = 13 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls13)) & (*sptr) & (*(sptr + wpls13)); } } } static void fdilate_2_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | (*sptr) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_2_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & (*sptr) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_2_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; wpls8 = 8 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls16)) | (*(sptr + wpls8)) | (*sptr) | (*(sptr - wpls8)) | (*(sptr - wpls16)); } } } static void ferode_2_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; wpls8 = 8 * wpls; wpls16 = 16 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls16)) & (*(sptr - wpls8)) & (*sptr) & (*(sptr + wpls8)) & (*(sptr + wpls16)); } } } static void fdilate_2_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_2_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_2_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; l_int32 wpls17; l_int32 wpls18; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls11)) | (*(sptr + wpls4)) | (*(sptr - wpls3)) | (*(sptr - wpls10)) | (*(sptr - wpls17)); } } } static void ferode_2_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls3; l_int32 wpls4; l_int32 wpls10; l_int32 wpls11; l_int32 wpls17; l_int32 wpls18; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls11)) & (*(sptr - wpls4)) & (*(sptr + wpls3)) & (*(sptr + wpls10)) & (*(sptr + wpls17)); } } } static void fdilate_2_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)); } } } static void ferode_2_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)); } } } static void fdilate_2_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; l_int32 wpls16; l_int32 wpls17; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls6)) | (*(sptr - wpls5)) | (*(sptr - wpls16)); } } } static void ferode_2_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls6; l_int32 wpls16; l_int32 wpls17; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls6)) & (*(sptr + wpls5)) & (*(sptr + wpls16)); } } } static void fdilate_2_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | (*sptr) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)); } } } static void ferode_2_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & (*sptr) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)); } } } static void fdilate_2_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; wpls9 = 9 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls18)) | (*(sptr + wpls9)) | (*sptr) | (*(sptr - wpls9)) | (*(sptr - wpls18)); } } } static void ferode_2_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; wpls9 = 9 * wpls; wpls18 = 18 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls18)) & (*(sptr - wpls9)) & (*sptr) & (*(sptr + wpls9)) & (*(sptr + wpls18)); } } } static void fdilate_2_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_2_58(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_2_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; l_int32 wpls20; wpls4 = 4 * wpls; wpls12 = 12 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls12)) | (*(sptr + wpls4)) | (*(sptr - wpls4)) | (*(sptr - wpls12)) | (*(sptr - wpls20)); } } } static void ferode_2_59(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls12; l_int32 wpls20; wpls4 = 4 * wpls; wpls12 = 12 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls12)) & (*(sptr - wpls4)) & (*(sptr + wpls4)) & (*(sptr + wpls12)) & (*(sptr + wpls20)); } } } static void fdilate_2_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | (*sptr) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)); } } } static void ferode_2_60(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & (*sptr) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)); } } } static void fdilate_2_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; l_int32 wpls21; wpls7 = 7 * wpls; wpls14 = 14 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls21)) | (*(sptr + wpls14)) | (*(sptr + wpls7)) | (*sptr) | (*(sptr - wpls7)) | (*(sptr - wpls14)) | (*(sptr - wpls21)); } } } static void ferode_2_61(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls7; l_int32 wpls14; l_int32 wpls21; wpls7 = 7 * wpls; wpls14 = 14 * wpls; wpls21 = 21 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls21)) & (*(sptr - wpls14)) & (*(sptr - wpls7)) & (*sptr) & (*(sptr + wpls7)) & (*(sptr + wpls14)) & (*(sptr + wpls21)); } } } static void fdilate_2_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | (*sptr) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_2_62(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & (*sptr) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_2_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls10; l_int32 wpls20; wpls10 = 10 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls10)) | (*sptr) | (*(sptr - wpls10)) | (*(sptr - wpls20)); } } } static void ferode_2_63(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls10; l_int32 wpls20; wpls10 = 10 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls10)) & (*sptr) & (*(sptr + wpls10)) & (*(sptr + wpls20)); } } } static void fdilate_2_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_2_64(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_2_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls7; l_int32 wpls19; l_int32 wpls20; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls7)) | (*(sptr - wpls6)) | (*(sptr - wpls19)); } } } static void ferode_2_65(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls6; l_int32 wpls7; l_int32 wpls19; l_int32 wpls20; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls7)) & (*(sptr + wpls6)) & (*(sptr + wpls19)); } } } static void fdilate_2_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_2_66(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_2_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls5; l_int32 wpls13; l_int32 wpls14; l_int32 wpls22; l_int32 wpls23; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls23)) | (*(sptr + wpls14)) | (*(sptr + wpls5)) | (*(sptr - wpls4)) | (*(sptr - wpls13)) | (*(sptr - wpls22)); } } } static void ferode_2_67(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls4; l_int32 wpls5; l_int32 wpls13; l_int32 wpls14; l_int32 wpls22; l_int32 wpls23; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls23)) & (*(sptr - wpls14)) & (*(sptr - wpls5)) & (*(sptr + wpls4)) & (*(sptr + wpls13)) & (*(sptr + wpls22)); } } } static void fdilate_2_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | (*sptr) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_2_68(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & (*sptr) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_2_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls11; l_int32 wpls22; wpls11 = 11 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls11)) | (*sptr) | (*(sptr - wpls11)) | (*(sptr - wpls22)); } } } static void ferode_2_69(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls11; l_int32 wpls22; wpls11 = 11 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls11)) & (*sptr) & (*(sptr + wpls11)) & (*(sptr + wpls22)); } } } static void fdilate_2_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | (*sptr) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_2_70(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & (*sptr) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_2_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; l_int32 wpls24; wpls8 = 8 * wpls; wpls16 = 16 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls24)) | (*(sptr + wpls16)) | (*(sptr + wpls8)) | (*sptr) | (*(sptr - wpls8)) | (*(sptr - wpls16)) | (*(sptr - wpls24)); } } } static void ferode_2_71(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls8; l_int32 wpls16; l_int32 wpls24; wpls8 = 8 * wpls; wpls16 = 16 * wpls; wpls24 = 24 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls24)) & (*(sptr - wpls16)) & (*(sptr - wpls8)) & (*sptr) & (*(sptr + wpls8)) & (*(sptr + wpls16)) & (*(sptr + wpls24)); } } } static void fdilate_2_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_2_72(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_2_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls15; l_int32 wpls25; wpls5 = 5 * wpls; wpls15 = 15 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls15)) | (*(sptr + wpls5)) | (*(sptr - wpls5)) | (*(sptr - wpls15)) | (*(sptr - wpls25)); } } } static void ferode_2_73(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls5; l_int32 wpls15; l_int32 wpls25; wpls5 = 5 * wpls; wpls15 = 15 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls15)) & (*(sptr - wpls5)) & (*(sptr + wpls5)) & (*(sptr + wpls15)) & (*(sptr + wpls25)); } } } static void fdilate_2_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 27) | (*(sptr + 1) >> 5)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | (*sptr) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 27) | (*(sptr - 1) << 5)); } } } static void ferode_2_74(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 27) | (*(sptr - 1) << 5)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & (*sptr) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 27) | (*(sptr + 1) >> 5)); } } } static void fdilate_2_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; l_int32 wpls27; wpls9 = 9 * wpls; wpls18 = 18 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls27)) | (*(sptr + wpls18)) | (*(sptr + wpls9)) | (*sptr) | (*(sptr - wpls9)) | (*(sptr - wpls18)) | (*(sptr - wpls27)); } } } static void ferode_2_75(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls9; l_int32 wpls18; l_int32 wpls27; wpls9 = 9 * wpls; wpls18 = 18 * wpls; wpls27 = 27 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls27)) & (*(sptr - wpls18)) & (*(sptr - wpls9)) & (*sptr) & (*(sptr + wpls9)) & (*(sptr + wpls18)) & (*(sptr + wpls27)); } } } leptonica-1.70/src/jp2kiostub.c0000664000175000017500000000477612262333501014551 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jp2kiostub.c * * Stubs for jp2kio.c functions */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_JP2KIO /* defined in environ.h */ /* --------------------------------------------*/ l_int32 readHeaderJp2k(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { return ERROR_INT("function not present", "readHeaderJp2k", 1); } /* ----------------------------------------------------------------------*/ l_int32 freadHeaderJp2k(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { return ERROR_INT("function not present", "freadHeaderJp2k", 1); } /* ----------------------------------------------------------------------*/ l_int32 sreadHeaderJp2k(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { return ERROR_INT("function not present", "sreadHeaderJp2k", 1); } /* --------------------------------------------*/ #endif /* !USE_JP2KIO */ /* --------------------------------------------*/ leptonica-1.70/src/fhmtauto.c0000644000175000017500000007571312244221747014311 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fhmtauto.c * * Main function calls: * l_int32 fhmtautogen() * l_int32 fhmtautogen1() * l_int32 fhmtautogen2() * * Static helpers: * static SARRAY *sarrayMakeWplsCode() * static SARRAY *sarrayMakeInnerLoopDWACode() * static char *makeBarrelshiftString() * * This automatically generates dwa code for the hit-miss transform. * Here's a road map for how it all works. * * (1) You generate an array (a SELA) of hit-miss transform SELs. * This can be done in several ways, including * (a) calling the function selaAddHitMiss() for * pre-compiled SELs * (b) generating the SELA in code in line * (c) reading in a SELA from file, using selaRead() * or various other formats. * * (2) You call fhmtautogen1() and fhmtautogen2() on this SELA. * This uses the text files hmttemplate1.txt and * hmttemplate2.txt for building up the source code. See the file * prog/fhmtautogen.c for an example of how this is done. * The output is written to files named fhmtgen.*.c * and fhmtgenlow.*.c, where "*" is an integer that you * input to this function. That integer labels both * the output files, as well as all the functions that * are generated. That way, using different integers, * you can invoke fhmtautogen() any number of times * to get functions that all have different names so that * they can be linked into one program. * * (3) You copy the generated source code back to your src * directory for compilation. Put their names in the * Makefile, regnerate the prototypes, and recompile * the libraries. Look at the Makefile to see how I've * included fhmtgen.1.c and fhmtgenlow.1.c. These files * provide the high-level interfaces for the hmt, and * the low-level interfaces to do the actual work. * * (4) In an application, you now use this interface. Again * for the example files generated, using integer "1": * * PIX *pixHMTDwa_1(PIX *pixd, PIX *pixs, char *selname); * * or * * PIX *pixFHMTGen_1(PIX *pixd, PIX *pixs, char *selname); * * where the selname is one of the set that were defined * as the name field of sels. This set is listed at the * beginning of the file fhmtgen.1.c. * As an example, see the file prog/fmtauto_reg.c, which * verifies the correctness of the implementation by * comparing the dwa result with that of full-image * rasterops. */ #include #include "allheaders.h" #define OUTROOT "fhmtgen" #define TEMPLATE1 "hmttemplate1.txt" #define TEMPLATE2 "hmttemplate2.txt" #define BUFFER_SIZE 512 #define PROTOARGS "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);" static char * makeBarrelshiftString(l_int32 delx, l_int32 dely, l_int32 type); static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 nhits, l_int32 nmisses); static SARRAY * sarrayMakeWplsCode(SEL *sel); static char wpldecls[][60] = { "l_int32 wpls2;", "l_int32 wpls2, wpls3;", "l_int32 wpls2, wpls3, wpls4;", "l_int32 wpls5;", "l_int32 wpls5, wpls6;", "l_int32 wpls5, wpls6, wpls7;", "l_int32 wpls5, wpls6, wpls7, wpls8;", "l_int32 wpls9;", "l_int32 wpls9, wpls10;", "l_int32 wpls9, wpls10, wpls11;", "l_int32 wpls9, wpls10, wpls11, wpls12;", "l_int32 wpls13;", "l_int32 wpls13, wpls14;", "l_int32 wpls13, wpls14, wpls15;", "l_int32 wpls13, wpls14, wpls15, wpls16;", "l_int32 wpls17;", "l_int32 wpls17, wpls18;", "l_int32 wpls17, wpls18, wpls19;", "l_int32 wpls17, wpls18, wpls19, wpls20;", "l_int32 wpls21;", "l_int32 wpls21, wpls22;", "l_int32 wpls21, wpls22, wpls23;", "l_int32 wpls21, wpls22, wpls23, wpls24;", "l_int32 wpls25;", "l_int32 wpls25, wpls26;", "l_int32 wpls25, wpls26, wpls27;", "l_int32 wpls25, wpls26, wpls27, wpls28;", "l_int32 wpls29;", "l_int32 wpls29, wpls30;", "l_int32 wpls29, wpls30, wpls31;"}; static char wpldefs[][24] = { " wpls2 = 2 * wpls;", " wpls3 = 3 * wpls;", " wpls4 = 4 * wpls;", " wpls5 = 5 * wpls;", " wpls6 = 6 * wpls;", " wpls7 = 7 * wpls;", " wpls8 = 8 * wpls;", " wpls9 = 9 * wpls;", " wpls10 = 10 * wpls;", " wpls11 = 11 * wpls;", " wpls12 = 12 * wpls;", " wpls13 = 13 * wpls;", " wpls14 = 14 * wpls;", " wpls15 = 15 * wpls;", " wpls16 = 16 * wpls;", " wpls17 = 17 * wpls;", " wpls18 = 18 * wpls;", " wpls19 = 19 * wpls;", " wpls20 = 20 * wpls;", " wpls21 = 21 * wpls;", " wpls22 = 22 * wpls;", " wpls23 = 23 * wpls;", " wpls24 = 24 * wpls;", " wpls25 = 25 * wpls;", " wpls26 = 26 * wpls;", " wpls27 = 27 * wpls;", " wpls28 = 28 * wpls;", " wpls29 = 29 * wpls;", " wpls30 = 30 * wpls;", " wpls31 = 31 * wpls;"}; static char wplstrp[][10] = {"+ wpls", "+ wpls2", "+ wpls3", "+ wpls4", "+ wpls5", "+ wpls6", "+ wpls7", "+ wpls8", "+ wpls9", "+ wpls10", "+ wpls11", "+ wpls12", "+ wpls13", "+ wpls14", "+ wpls15", "+ wpls16", "+ wpls17", "+ wpls18", "+ wpls19", "+ wpls20", "+ wpls21", "+ wpls22", "+ wpls23", "+ wpls24", "+ wpls25", "+ wpls26", "+ wpls27", "+ wpls28", "+ wpls29", "+ wpls30", "+ wpls31"}; static char wplstrm[][10] = {"- wpls", "- wpls2", "- wpls3", "- wpls4", "- wpls5", "- wpls6", "- wpls7", "- wpls8", "- wpls9", "- wpls10", "- wpls11", "- wpls12", "- wpls13", "- wpls14", "- wpls15", "- wpls16", "- wpls17", "- wpls18", "- wpls19", "- wpls20", "- wpls21", "- wpls22", "- wpls23", "- wpls24", "- wpls25", "- wpls26", "- wpls27", "- wpls28", "- wpls29", "- wpls30", "- wpls31"}; /*! * fhmtautogen() * * Input: sela * fileindex * filename (; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) This function generates all the code for implementing * dwa morphological operations using all the sels in the sela. * (2) See fhmtautogen1() and fhmtautogen2() for details. */ l_int32 fhmtautogen(SELA *sela, l_int32 fileindex, const char *filename) { l_int32 ret1, ret2; PROCNAME("fhmtautogen"); if (!sela) return ERROR_INT("sela not defined", procName, 1); ret1 = fhmtautogen1(sela, fileindex, filename); ret2 = fhmtautogen2(sela, fileindex, filename); if (ret1 || ret2) return ERROR_INT("code generation problem", procName, 1); return 0; } /*! * fhmtautogen1() * * Input: sel array * fileindex * filename (; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) This function uses hmttemplate1.txt to create a * top-level file that contains two functions that carry * out the hit-miss transform for any of the sels in * the input sela. * (2) The fileindex parameter is inserted into the output * filename, as described below. * (3) If filename == NULL, the output file is fhmtgen..c, * where is equal to the 'fileindex' parameter. * (4) If filename != NULL, the output file is ..c. * (5) Each sel must have at least one hit. A sel with only misses * generates code that will abort the operation if it is called. */ l_int32 fhmtautogen1(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr; char *str_proto1, *str_proto2, *str_proto3; char *str_doc1, *str_doc2, *str_doc3, *str_doc4; char *str_def1, *str_def2, *str_proc1, *str_proc2; char *str_dwa1, *str_low_dt, *str_low_ds; char bigbuf[BUFFER_SIZE]; l_int32 i, nsels, nbytes, actstart, end, newstart; size_t size; SARRAY *sa1, *sa2, *sa3; PROCNAME("fhmtautogen1"); if (!sela) return ERROR_INT("sela not defined", procName, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", procName, 1); /* Make array of sel names */ sa1 = selaGetSelnames(sela); /* Make array of textlines from from hmttemplate1.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE1, &size)) == NULL) return ERROR_INT("filestr not made", procName, 1); if ((sa2 = sarrayCreateLinesFromString(filestr, 1)) == NULL) return ERROR_INT("sa2 not made", procName, 1); FREE(filestr); /* Make strings containing function call names */ sprintf(bigbuf, "PIX *pixHMTDwa_%d(PIX *pixd, PIX *pixs, " "char *selname);", fileindex); str_proto1 = stringNew(bigbuf); sprintf(bigbuf, "PIX *pixFHMTGen_%d(PIX *pixd, PIX *pixs, " "char *selname);", fileindex); str_proto2 = stringNew(bigbuf); sprintf(bigbuf, "l_int32 fhmtgen_low_%d(l_uint32 *datad, l_int32 w,\n" " l_int32 h, l_int32 wpld,\n" " l_uint32 *datas, l_int32 wpls,\n" " l_int32 index);", fileindex); str_proto3 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixHMTDwa_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixFHMTGen_%d()", fileindex); str_doc2 = stringNew(bigbuf); sprintf(bigbuf, " * pixHMTDwa_%d()", fileindex); str_doc3 = stringNew(bigbuf); sprintf(bigbuf, " * pixFHMTGen_%d()", fileindex); str_doc4 = stringNew(bigbuf); sprintf(bigbuf, "pixHMTDwa_%d(PIX *pixd,", fileindex); str_def1 = stringNew(bigbuf); sprintf(bigbuf, "pixFHMTGen_%d(PIX *pixd,", fileindex); str_def2 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixHMTDwa_%d\");", fileindex); str_proc1 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixFHMTGen_%d\");", fileindex); str_proc2 = stringNew(bigbuf); sprintf(bigbuf, " pixt2 = pixFHMTGen_%d(NULL, pixt1, selname);", fileindex); str_dwa1 = stringNew(bigbuf); sprintf(bigbuf, " fhmtgen_low_%d(datad, w, h, wpld, datat, wpls, index);", fileindex); str_low_dt = stringNew(bigbuf); sprintf(bigbuf, " fhmtgen_low_%d(datad, w, h, wpld, datas, wpls, index);", fileindex); str_low_ds = stringNew(bigbuf); /* Make the output sa */ if ((sa3 = sarrayCreate(0)) == NULL) return ERROR_INT("sa3 not made", procName, 1); /* Copyright notice and info header */ sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa3, str_doc1, L_INSERT); sarrayAddString(sa3, str_doc2, L_INSERT); /* Add '#include's */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function prototypes */ sarrayAddString(sa3, str_proto1, L_INSERT); sarrayAddString(sa3, str_proto2, L_INSERT); sarrayAddString(sa3, str_proto3, L_INSERT); /* Add static globals */ sprintf(bigbuf, "\nstatic l_int32 NUM_SELS_GENERATED = %d;", nsels); sarrayAddString(sa3, bigbuf, L_COPY); sprintf(bigbuf, "static char SEL_NAMES[][80] = {"); sarrayAddString(sa3, bigbuf, L_COPY); for (i = 0; i < nsels - 1; i++) { sprintf(bigbuf, " \"%s\",", sarrayGetString(sa1, i, 0)); sarrayAddString(sa3, bigbuf, L_COPY); } sprintf(bigbuf, " \"%s\"};", sarrayGetString(sa1, i, 0)); sarrayAddString(sa3, bigbuf, L_COPY); /* Start pixHMTDwa_*() function description */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_doc3, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixMorphDwa_*() function definition */ sarrayAddString(sa3, str_def1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_dwa1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Start pixFHMTGen_*() function description */ sarrayAddString(sa3, str_doc4, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixFHMTGen_*() function description */ sarrayAddString(sa3, str_def2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dt, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_ds, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); if ((filestr = sarrayToString(sa3, 1)) == NULL) return ERROR_INT("filestr from sa3 not made", procName, 1); nbytes = strlen(filestr); if (filename) sprintf(bigbuf, "%s.%d.c", filename, fileindex); else sprintf(bigbuf, "%s.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); FREE(filestr); return 0; } /*! * fhmtautogen2() * * Input: sel array * fileindex * filename (; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) This function uses hmttemplate2.txt to create a * low-level file that contains the low-level functions for * implementing the hit-miss transform for every sel * in the input sela. * (2) The fileindex parameter is inserted into the output * filename, as described below. * (3) If filename == NULL, the output file is fhmtgenlow..c, * where is equal to the 'fileindex' parameter. * (4) If filename != NULL, the output file is low..c. */ l_int32 fhmtautogen2(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr, *fname, *linestr; char *str_doc1, *str_doc2, *str_doc3, *str_def1; char bigbuf[BUFFER_SIZE]; char breakstring[] = " break;"; char staticstring[] = "static void"; l_int32 i, k, l, nsels, nbytes, nhits, nmisses; l_int32 actstart, end, newstart; l_int32 argstart, argend, loopstart, loopend, finalstart, finalend; size_t size; SARRAY *sa1, *sa2, *sa3, *sa4, *sa5, *sa6; SEL *sel; PROCNAME("fhmtautogen2"); if (!sela) return ERROR_INT("sela not defined", procName, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", procName, 1); /* Make the array of textlines from hmttemplate2.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE2, &size)) == NULL) return ERROR_INT("filestr not made", procName, 1); if ((sa1 = sarrayCreateLinesFromString(filestr, 1)) == NULL) return ERROR_INT("sa1 not made", procName, 1); FREE(filestr); /* Make the array of static function names */ if ((sa2 = sarrayCreate(nsels)) == NULL) return ERROR_INT("sa2 not made", procName, 1); for (i = 0; i < nsels; i++) { sprintf(bigbuf, "fhmt_%d_%d", fileindex, i); sarrayAddString(sa2, bigbuf, 1); } /* Make the static prototype strings */ if ((sa3 = sarrayCreate(2 * nsels)) == NULL) return ERROR_INT("sa3 not made", procName, 1); for (i = 0; i < nsels; i++) { fname = sarrayGetString(sa2, i, 0); sprintf(bigbuf, "static void %s%s", fname, PROTOARGS); sarrayAddString(sa3, bigbuf, 1); } /* Make strings containing function names */ sprintf(bigbuf, " * l_int32 fhmtgen_low_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * void fhmt_%d_*()", fileindex); str_doc2 = stringNew(bigbuf); sprintf(bigbuf, " * fhmtgen_low_%d()", fileindex); str_doc3 = stringNew(bigbuf); sprintf(bigbuf, "fhmtgen_low_%d(l_uint32 *datad,", fileindex); str_def1 = stringNew(bigbuf); /* Output to this sa */ if ((sa4 = sarrayCreate(0)) == NULL) return ERROR_INT("sa4 not made", procName, 1); /* Copyright notice and info header */ sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa4, str_doc1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc2, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert static protos */ for (i = 0; i < nsels; i++) { if ((linestr = sarrayGetString(sa3, i, L_COPY)) == NULL) return ERROR_INT("linestr not retrieved", procName, 1); sarrayAddString(sa4, linestr, L_INSERT); } /* Insert function header */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc3, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_def1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Generate and insert the dispatcher code */ for (i = 0; i < nsels; i++) { sprintf(bigbuf, " case %d:", i); sarrayAddString(sa4, bigbuf, L_COPY); sprintf(bigbuf, " %s(datad, w, h, wpld, datas, wpls);", sarrayGetString(sa2, i, L_NOCOPY)); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAddString(sa4, breakstring, L_COPY); } /* Finish the dispatcher and introduce the low-level code */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Get the range for the args common to all functions */ sarrayParseRange(sa1, newstart, &argstart, &argend, &newstart, "--", 0); /* Get the range for the loop code common to all functions */ sarrayParseRange(sa1, newstart, &loopstart, &loopend, &newstart, "--", 0); /* Get the range for the ending code common to all functions */ sarrayParseRange(sa1, newstart, &finalstart, &finalend, &newstart, "--", 0); /* Do all the static functions */ for (i = 0; i < nsels; i++) { /* Generate the function header and add the common args */ sarrayAddString(sa4, staticstring, L_COPY); fname = sarrayGetString(sa2, i, L_NOCOPY); sprintf(bigbuf, "%s(l_uint32 *datad,", fname); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAppendRange(sa4, sa1, argstart, argend); /* Declare and define wplsN args, as necessary */ if ((sel = selaGetSel(sela, i)) == NULL) return ERROR_INT("sel not returned", procName, 1); if ((sa5 = sarrayMakeWplsCode(sel)) == NULL) return ERROR_INT("sa5 not made", procName, 1); sarrayConcatenate(sa4, sa5); sarrayDestroy(&sa5); /* Make sure sel has at least one hit */ nhits = 0; nmisses = 0; for (k = 0; k < sel->sy; k++) { for (l = 0; l < sel->sx; l++) { if (sel->data[k][l] == 1) nhits++; else if (sel->data[k][l] == 2) nmisses++; } } if (nhits == 0) { linestr = stringNew(" fprintf(stderr, \"Error in HMT: no hits in sel!\\n\");\n}\n\n"); sarrayAddString(sa4, linestr, L_INSERT); continue; } /* Add the function loop code */ sarrayAppendRange(sa4, sa1, loopstart, loopend); /* Insert barrel-op code for *dptr */ if ((sa6 = sarrayMakeInnerLoopDWACode(sel, nhits, nmisses)) == NULL) return ERROR_INT("sa6 not made", procName, 1); sarrayConcatenate(sa4, sa6); sarrayDestroy(&sa6); /* Finish the function code */ sarrayAppendRange(sa4, sa1, finalstart, finalend); } /* Output to file */ if ((filestr = sarrayToString(sa4, 1)) == NULL) return ERROR_INT("filestr from sa4 not made", procName, 1); nbytes = strlen(filestr); if (filename) sprintf(bigbuf, "%slow.%d.c", filename, fileindex); else sprintf(bigbuf, "%slow.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); FREE(filestr); return 0; } /*--------------------------------------------------------------------------* * Helper code for sel * *--------------------------------------------------------------------------*/ /*! * sarrayMakeWplsCode() */ static SARRAY * sarrayMakeWplsCode(SEL *sel) { char emptystring[] = ""; l_int32 i, j, ymax, dely; SARRAY *sa; PROCNAME("sarrayMakeWplsCode"); if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); ymax = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1) { dely = L_ABS(i - sel->cy); ymax = L_MAX(ymax, dely); } } } if (ymax > 31) { L_WARNING("ymax > 31; truncating to 31\n", procName); ymax = 31; } if ((sa = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); /* Declarations */ if (ymax > 4) sarrayAddString(sa, wpldecls[2], 1); if (ymax > 8) sarrayAddString(sa, wpldecls[6], 1); if (ymax > 12) sarrayAddString(sa, wpldecls[10], 1); if (ymax > 16) sarrayAddString(sa, wpldecls[14], 1); if (ymax > 20) sarrayAddString(sa, wpldecls[18], 1); if (ymax > 24) sarrayAddString(sa, wpldecls[22], 1); if (ymax > 28) sarrayAddString(sa, wpldecls[26], 1); if (ymax > 1) sarrayAddString(sa, wpldecls[ymax - 2], 1); sarrayAddString(sa, emptystring, 1); /* Definitions */ for (i = 2; i <= ymax; i++) sarrayAddString(sa, wpldefs[i - 2], 1); return sa; } /*! * sarrayMakeInnerLoopDWACode() */ static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 nhits, l_int32 nmisses) { char *string; char land[] = "&"; char bigbuf[BUFFER_SIZE]; l_int32 i, j, ntot, nfound, type, delx, dely; SARRAY *sa; PROCNAME("sarrayMakeInnerLoopDWACode"); if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); if ((sa = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); ntot = nhits + nmisses; nfound = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { type = sel->data[i][j]; if (type == SEL_HIT || type == SEL_MISS) { nfound++; dely = i - sel->cy; delx = j - sel->cx; if ((string = makeBarrelshiftString(delx, dely, type)) == NULL) { L_WARNING("barrel shift string not made\n", procName); continue; } if (ntot == 1) /* just one item */ sprintf(bigbuf, " *dptr = %s;", string); else if (nfound == 1) sprintf(bigbuf, " *dptr = %s %s", string, land); else if (nfound < ntot) sprintf(bigbuf, " %s %s", string, land); else /* nfound == ntot */ sprintf(bigbuf, " %s;", string); sarrayAddString(sa, bigbuf, 1); FREE(string); } } } return sa; } /*! * makeBarrelshiftString() */ static char * makeBarrelshiftString(l_int32 delx, /* j - cx */ l_int32 dely, /* i - cy */ l_int32 type) /* SEL_HIT or SEL_MISS */ { l_int32 absx, absy; char bigbuf[BUFFER_SIZE]; PROCNAME("makeBarrelshiftString"); if (delx < -31 || delx > 31) return (char *)ERROR_PTR("delx out of bounds", procName, NULL); if (dely < -31 || dely > 31) return (char *)ERROR_PTR("dely out of bounds", procName, NULL); absx = L_ABS(delx); absy = L_ABS(dely); if (type == SEL_HIT) { if ((delx == 0) && (dely == 0)) sprintf(bigbuf, "(*sptr)"); else if ((delx == 0) && (dely < 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrm[absy - 1]); else if ((delx == 0) && (dely > 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrp[absy - 1]); else if ((delx < 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) >> %d) | (*(sptr - 1) << %d))", absx, 32 - absx); else if ((delx > 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) << %d) | (*(sptr + 1) >> %d))", absx, 32 - absx); else if ((delx < 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx > 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx < 0) && (dely > 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); else /* ((delx > 0) && (dely > 0)) */ sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); } else { /* type == SEL_MISS */ if ((delx == 0) && (dely == 0)) sprintf(bigbuf, "(~*sptr)"); else if ((delx == 0) && (dely < 0)) sprintf(bigbuf, "(~*(sptr %s))", wplstrm[absy - 1]); else if ((delx == 0) && (dely > 0)) sprintf(bigbuf, "(~*(sptr %s))", wplstrp[absy - 1]); else if ((delx < 0) && (dely == 0)) sprintf(bigbuf, "((~*(sptr) >> %d) | (~*(sptr - 1) << %d))", absx, 32 - absx); else if ((delx > 0) && (dely == 0)) sprintf(bigbuf, "((~*(sptr) << %d) | (~*(sptr + 1) >> %d))", absx, 32 - absx); else if ((delx < 0) && (dely < 0)) sprintf(bigbuf, "((~*(sptr %s) >> %d) | (~*(sptr %s - 1) << %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx > 0) && (dely < 0)) sprintf(bigbuf, "((~*(sptr %s) << %d) | (~*(sptr %s + 1) >> %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx < 0) && (dely > 0)) sprintf(bigbuf, "((~*(sptr %s) >> %d) | (~*(sptr %s - 1) << %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); else /* ((delx > 0) && (dely > 0)) */ sprintf(bigbuf, "((~*(sptr %s) << %d) | (~*(sptr %s + 1) >> %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); } return stringNew(bigbuf); } leptonica-1.70/src/pix2.c0000644000175000017500000030167512244225632013340 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pix2.c * * This file has these basic operations: * * (1) Get and set: individual pixels, full image, rectangular region, * pad pixels, border pixels, and color components for RGB * (2) Add and remove border pixels * (3) Endian byte swaps * (4) Simple method for byte-processing images (instead of words) * * Pixel poking * l_int32 pixGetPixel() * l_int32 pixSetPixel() * l_int32 pixGetRGBPixel() * l_int32 pixSetRGBPixel() * l_int32 pixGetRandomPixel() * l_int32 pixClearPixel() * l_int32 pixFlipPixel() * void setPixelLow() * * Find black or white value * l_int32 pixGetBlackOrWhiteVal() * * Full image clear/set/set-to-arbitrary-value * l_int32 pixClearAll() * l_int32 pixSetAll() * l_int32 pixSetAllGray() * l_int32 pixSetAllArbitrary() * l_int32 pixSetBlackOrWhite() * l_int32 pixSetComponentArbitrary() * * Rectangular region clear/set/set-to-arbitrary-value/blend * l_int32 pixClearInRect() * l_int32 pixSetInRect() * l_int32 pixSetInRectArbitrary() * l_int32 pixBlendInRect() * * Set pad bits * l_int32 pixSetPadBits() * l_int32 pixSetPadBitsBand() * * Assign border pixels * l_int32 pixSetOrClearBorder() * l_int32 pixSetBorderVal() * l_int32 pixSetBorderRingVal() * l_int32 pixSetMirroredBorder() * PIX *pixCopyBorder() * * Add and remove border * PIX *pixAddBorder() * PIX *pixAddBlackOrWhiteBorder() * PIX *pixAddBorderGeneral() * PIX *pixRemoveBorder() * PIX *pixRemoveBorderGeneral() * PIX *pixRemoveBorderToSize() * PIX *pixAddMirroredBorder() * PIX *pixAddRepeatedBorder() * PIX *pixAddMixedBorder() * PIX *pixAddContinuedBorder() * * Helper functions using alpha * l_int32 pixShiftAndTransferAlpha() * PIX *pixDisplayLayersRGBA() * * Color sample setting and extraction * PIX *pixCreateRGBImage() * PIX *pixGetRGBComponent() * l_int32 pixSetRGBComponent() * PIX *pixGetRGBComponentCmap() * l_int32 pixCopyRGBComponent() * l_int32 composeRGBPixel() * l_int32 composeRGBAPixel() * void extractRGBValues() * void extractRGBAValues() * l_int32 extractMinMaxComponent() * l_int32 pixGetRGBLine() * * Conversion between big and little endians * PIX *pixEndianByteSwapNew() * l_int32 pixEndianByteSwap() * l_int32 lineEndianByteSwap() * PIX *pixEndianTwoByteSwapNew() * l_int32 pixEndianTwoByteSwap() * * Extract raster data as binary string * l_int32 pixGetRasterData() * * Test alpha component opaqueness * l_int32 pixAlphaIsOpaque * * Setup helpers for 8 bpp byte processing * l_uint8 **pixSetupByteProcessing() * l_int32 pixCleanupByteProcessing() * * Setting parameters for antialias masking with alpha transforms * void l_setAlphaMaskBorder() * * *** indicates implicit assumption about RGB component ordering */ #include #include "allheaders.h" static const l_uint32 rmask32[] = {0x0, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; /* This is a global that determines the default 8 bpp alpha mask values * for rings at distance 1 and 2 from the border. Declare extern * to use. To change the values, use l_setAlphaMaskBorder(). */ LEPT_DLL l_float32 AlphaMaskBorderVals[2] = {0.0, 0.5}; #ifndef NO_CONSOLE_IO #define DEBUG_SERIALIZE 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Pixel poking * *-------------------------------------------------------------*/ /*! * pixGetPixel() * * Input: pix * (x,y) pixel coords * &val ( pixel value) * Return: 0 if OK; 1 on error * * Notes: * (1) This returns the value in the data array. If the pix is * colormapped, it returns the colormap index, not the rgb value. * (2) Because of the function overhead and the parameter checking, * this is much slower than using the GET_DATA_*() macros directly. * Speed on a 1 Mpixel RGB image, using a 3 GHz machine: * * pixGet/pixSet: ~25 Mpix/sec * * GET_DATA/SET_DATA: ~350 MPix/sec * If speed is important and you're doing random access into * the pix, use pixGetLinePtrs() and the array access macros. */ l_int32 pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval) { l_int32 w, h, d, wpl, val; l_uint32 *line, *data; PROCNAME("pixGetPixel"); if (!pval) return ERROR_INT("pval not defined", procName, 1); *pval = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); line = data + y * wpl; switch (d) { case 1: val = GET_DATA_BIT(line, x); break; case 2: val = GET_DATA_DIBIT(line, x); break; case 4: val = GET_DATA_QBIT(line, x); break; case 8: val = GET_DATA_BYTE(line, x); break; case 16: val = GET_DATA_TWO_BYTES(line, x); break; case 32: val = line[x]; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); } *pval = val; return 0; } /*! * pixSetPixel() * * Input: pix * (x,y) pixel coords * val (value to be inserted) * Return: 0 if OK; 1 on error * * Notes: * (1) Warning: the input value is not checked for overflow with respect * the the depth of @pix, and the sign bit (if any) is ignored. * * For d == 1, @val > 0 sets the bit on. * * For d == 2, 4, 8 and 16, @val is masked to the maximum allowable * pixel value, and any (invalid) higher order bits are discarded. * (2) See pixGetPixel() for information on performance. */ l_int32 pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val) { l_int32 w, h, d, wpl; l_uint32 *line, *data; PROCNAME("pixSetPixel"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); line = data + y * wpl; switch (d) { case 1: if (val) SET_DATA_BIT(line, x); else CLEAR_DATA_BIT(line, x); break; case 2: SET_DATA_DIBIT(line, x, val); break; case 4: SET_DATA_QBIT(line, x, val); break; case 8: SET_DATA_BYTE(line, x, val); break; case 16: SET_DATA_TWO_BYTES(line, x, val); break; case 32: line[x] = val; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); } return 0; } /*! * pixGetRGBPixel() * * Input: pix (32 bpp rgb, not colormapped) * (x,y) pixel coords * &rval ( red component) * &gval ( green component) * &bval ( blue component) * Return: 0 if OK; 1 on error */ l_int32 pixGetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 w, h, d, wpl; l_uint32 *data, *ppixel; PROCNAME("pixGetRGBPixel"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 32) return ERROR_INT("pix not 32 bpp", procName, 1); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); ppixel = data + y * wpl + x; if (prval) *prval = GET_DATA_BYTE(ppixel, COLOR_RED); if (pgval) *pgval = GET_DATA_BYTE(ppixel, COLOR_GREEN); if (pbval) *pbval = GET_DATA_BYTE(ppixel, COLOR_BLUE); return 0; } /*! * pixSetRGBPixel() * * Input: pix (32 bpp rgb) * (x,y) pixel coords * rval (red component) * gval (green component) * bval (blue component) * Return: 0 if OK; 1 on error */ l_int32 pixSetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 w, h, d, wpl; l_uint32 pixel; l_uint32 *data, *line; PROCNAME("pixSetRGBPixel"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 32) return ERROR_INT("pix not 32 bpp", procName, 1); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); line = data + y * wpl; composeRGBPixel(rval, gval, bval, &pixel); *(line + x) = pixel; return 0; } /*! * pixGetRandomPixel() * * Input: pix (any depth; can be colormapped) * &val ( pixel value) * &x ( x coordinate chosen; can be null) * &y ( y coordinate chosen; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) If the pix is colormapped, it returns the rgb value. */ l_int32 pixGetRandomPixel(PIX *pix, l_uint32 *pval, l_int32 *px, l_int32 *py) { l_int32 w, h, x, y, rval, gval, bval; l_uint32 val; PIXCMAP *cmap; PROCNAME("pixGetRandomPixel"); if (!pval) return ERROR_INT("pval not defined", procName, 1); *pval = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, NULL); x = rand() % w; y = rand() % h; if (px) *px = x; if (py) *py = y; pixGetPixel(pix, x, y, &val); if ((cmap = pixGetColormap(pix)) != NULL) { pixcmapGetColor(cmap, val, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, pval); } else { *pval = val; } return 0; } /*! * pixClearPixel() * * Input: pix * (x,y) pixel coords * Return: 0 if OK; 1 on error. */ l_int32 pixClearPixel(PIX *pix, l_int32 x, l_int32 y) { l_int32 w, h, d, wpl; l_uint32 *line, *data; PROCNAME("pixClearPixel"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); wpl = pixGetWpl(pix); data = pixGetData(pix); line = data + y * wpl; switch (d) { case 1: CLEAR_DATA_BIT(line, x); break; case 2: CLEAR_DATA_DIBIT(line, x); break; case 4: CLEAR_DATA_QBIT(line, x); break; case 8: SET_DATA_BYTE(line, x, 0); break; case 16: SET_DATA_TWO_BYTES(line, x, 0); break; case 32: line[x] = 0; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); } return 0; } /*! * pixFlipPixel() * * Input: pix * (x,y) pixel coords * Return: 0 if OK; 1 on error */ l_int32 pixFlipPixel(PIX *pix, l_int32 x, l_int32 y) { l_int32 w, h, d, wpl; l_uint32 val; l_uint32 *line, *data; PROCNAME("pixFlipPixel"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (x < 0 || x >= w) return ERROR_INT("x out of bounds", procName, 1); if (y < 0 || y >= h) return ERROR_INT("y out of bounds", procName, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); line = data + y * wpl; switch (d) { case 1: val = GET_DATA_BIT(line, x); if (val) CLEAR_DATA_BIT(line, x); else SET_DATA_BIT(line, x); break; case 2: val = GET_DATA_DIBIT(line, x); val ^= 0x3; SET_DATA_DIBIT(line, x, val); break; case 4: val = GET_DATA_QBIT(line, x); val ^= 0xf; SET_DATA_QBIT(line, x, val); break; case 8: val = GET_DATA_BYTE(line, x); val ^= 0xff; SET_DATA_BYTE(line, x, val); break; case 16: val = GET_DATA_TWO_BYTES(line, x); val ^= 0xffff; SET_DATA_TWO_BYTES(line, x, val); break; case 32: val = line[x] ^ 0xffffffff; line[x] = val; break; default: return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); } return 0; } /*! * setPixelLow() * * Input: line (ptr to beginning of line), * x (pixel location in line) * depth (bpp) * val (to be inserted) * Return: void * * Notes: * (1) Caution: input variables are not checked! */ void setPixelLow(l_uint32 *line, l_int32 x, l_int32 depth, l_uint32 val) { switch (depth) { case 1: if (val) SET_DATA_BIT(line, x); else CLEAR_DATA_BIT(line, x); break; case 2: SET_DATA_DIBIT(line, x, val); break; case 4: SET_DATA_QBIT(line, x, val); break; case 8: SET_DATA_BYTE(line, x, val); break; case 16: SET_DATA_TWO_BYTES(line, x, val); break; case 32: line[x] = val; break; default: fprintf(stderr, "illegal depth in setPixelLow()\n"); } return; } /*-------------------------------------------------------------* * Find black or white value * *-------------------------------------------------------------*/ /*! * pixGetBlackOrWhiteVal() * * Input: pixs (all depths; cmap ok) * op (L_GET_BLACK_VAL, L_GET_WHITE_VAL) * &val ( pixel value) * Return: 0 if OK; 1 on error * * Notes: * (1) Side effect. For a colormapped image, if the requested * color is not present and there is room to add it in the cmap, * it is added and the new index is returned. If there is no room, * the index of the closest color in intensity is returned. */ l_int32 pixGetBlackOrWhiteVal(PIX *pixs, l_int32 op, l_uint32 *pval) { l_int32 d, val; PIXCMAP *cmap; PROCNAME("pixGetBlackOrWhiteVal"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (op != L_GET_BLACK_VAL && op != L_GET_WHITE_VAL) return ERROR_INT("invalid op", procName, 1); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap) { if ((d == 1 && op == L_GET_WHITE_VAL) || (d > 1 && op == L_GET_BLACK_VAL)) { /* min val */ val = 0; } else { /* max val */ val = (d == 32) ? 0xffffff00 : (1 << d) - 1; } } else { /* handle colormap */ if (op == L_GET_BLACK_VAL) pixcmapAddBlackOrWhite(cmap, 0, &val); else /* L_GET_WHITE_VAL */ pixcmapAddBlackOrWhite(cmap, 1, &val); } *pval = val; return 0; } /*-------------------------------------------------------------* * Full image clear/set/set-to-arbitrary-value/invert * *-------------------------------------------------------------*/ /*! * pixClearAll() * * Input: pix (all depths; use cmapped with caution) * Return: 0 if OK, 1 on error * * Notes: * (1) Clears all data to 0. For 1 bpp, this is white; for grayscale * or color, this is black. * (2) Caution: for colormapped pix, this sets the color to the first * one in the colormap. Be sure that this is the intended color! */ l_int32 pixClearAll(PIX *pix) { PROCNAME("pixClearAll"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix), PIX_CLR, NULL, 0, 0); return 0; } /*! * pixSetAll() * * Input: pix (all depths; use cmapped with caution) * Return: 0 if OK, 1 on error * * Notes: * (1) Sets all data to 1. For 1 bpp, this is black; for grayscale * or color, this is white. * (2) Caution: for colormapped pix, this sets the pixel value to the * maximum value supported by the colormap: 2^d - 1. However, this * color may not be defined, because the colormap may not be full. */ l_int32 pixSetAll(PIX *pix) { l_int32 n; PIXCMAP *cmap; PROCNAME("pixSetAll"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (n < cmap->nalloc) /* cmap is not full */ return ERROR_INT("cmap entry does not exist", procName, 1); } pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix), PIX_SET, NULL, 0, 0); return 0; } /*! * pixSetAllGray() * * Input: pix (all depths, cmap ok) * grayval (in range 0 ... 255) * Return: 0 if OK; 1 on error * * Notes: * (1) N.B. For all images, @grayval == 0 represents black and * @grayval == 255 represents white. * (2) For depth < 8, we do our best to approximate the gray level. * For 1 bpp images, any @grayval < 128 is black; >= 128 is white. * For 32 bpp images, each r,g,b component is set to @grayval, * and the alpha component is preserved. * (3) If pix is colormapped, it adds the gray value, replicated in * all components, to the colormap if it's not there and there * is room. If the colormap is full, it finds the closest color in * L2 distance of components. This index is written to all pixels. */ l_int32 pixSetAllGray(PIX *pix, l_int32 grayval) { l_int32 d, spp, index; l_uint32 val32; PIX *alpha; PIXCMAP *cmap; PROCNAME("pixSetAllGray"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (grayval < 0) { L_WARNING("grayval < 0; setting to 0\n", procName); grayval = 0; } else if (grayval > 255) { L_WARNING("grayval > 255; setting to 255\n", procName); grayval = 255; } /* Handle the colormap case */ cmap = pixGetColormap(pix); if (cmap) { pixcmapAddNearestColor(cmap, grayval, grayval, grayval, &index); pixSetAllArbitrary(pix, index); return 0; } /* Non-cmapped */ d = pixGetDepth(pix); spp = pixGetSpp(pix); if (d == 1) { if (grayval < 128) /* black */ pixSetAll(pix); else pixClearAll(pix); /* white */ } else if (d < 8) { grayval >>= 8 - d; pixSetAllArbitrary(pix, grayval); } else if (d == 8) { pixSetAllArbitrary(pix, grayval); } else if (d == 16) { grayval |= (grayval << 8); pixSetAllArbitrary(pix, grayval); } else if (d == 32 && spp == 3) { composeRGBPixel(grayval, grayval, grayval, &val32); pixSetAllArbitrary(pix, val32); } else if (d == 32 && spp == 4) { alpha = pixGetRGBComponent(pix, L_ALPHA_CHANNEL); composeRGBPixel(grayval, grayval, grayval, &val32); pixSetAllArbitrary(pix, val32); pixSetRGBComponent(pix, alpha, L_ALPHA_CHANNEL); pixDestroy(&alpha); } else { L_ERROR("invalid depth: %d\n", procName, d); return 1; } return 0; } /*! * pixSetAllArbitrary() * * Input: pix (all depths; use cmapped with caution) * val (value to set all pixels) * Return: 0 if OK; 1 on error * * Notes: * (1) Caution! For colormapped pix, @val is used as an index * into a colormap. Be sure that index refers to the intended color. * If the color is not in the colormap, you should first add it * and then call this function. */ l_int32 pixSetAllArbitrary(PIX *pix, l_uint32 val) { l_int32 n, i, j, w, h, d, wpl, npix; l_uint32 maxval, wordval; l_uint32 *data, *line; PIXCMAP *cmap; PROCNAME("pixSetAllArbitrary"); if (!pix) return ERROR_INT("pix not defined", procName, 1); /* If colormapped, make sure that val is less than the size * of the cmap array. */ if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (val >= n) { L_WARNING("index not in colormap; using last color\n", procName); val = n - 1; } } /* Make sure val isn't too large for the pixel depth. * If it is too large, set the pixel color to white. */ pixGetDimensions(pix, &w, &h, &d); maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1; if (val > maxval) { L_WARNING("val too large for depth; using maxval\n", procName); val = maxval; } /* Set up word to tile with */ wordval = 0; npix = 32 / d; /* number of pixels per 32 bit word */ for (j = 0; j < npix; j++) wordval |= (val << (j * d)); wpl = pixGetWpl(pix); data = pixGetData(pix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < wpl; j++) { *(line + j) = wordval; } } return 0; } /*! * pixSetBlackOrWhite() * * Input: pixs (all depths; cmap ok) * op (L_SET_BLACK, L_SET_WHITE) * Return: 0 if OK; 1 on error * * Notes: * (1) Function for setting all pixels in an image to either black * or white. * (2) If pixs is colormapped, it adds black or white to the * colormap if it's not there and there is room. If the colormap * is full, it finds the closest color in intensity. * This index is written to all pixels. */ l_int32 pixSetBlackOrWhite(PIX *pixs, l_int32 op) { l_int32 d, index; PIXCMAP *cmap; PROCNAME("pixSetBlackOrWhite"); if (!pixs) return ERROR_INT("pix not defined", procName, 1); if (op != L_SET_BLACK && op != L_SET_WHITE) return ERROR_INT("invalid op", procName, 1); cmap = pixGetColormap(pixs); d = pixGetDepth(pixs); if (!cmap) { if ((d == 1 && op == L_SET_BLACK) || (d > 1 && op == L_SET_WHITE)) pixSetAll(pixs); else pixClearAll(pixs); } else { /* handle colormap */ if (op == L_SET_BLACK) pixcmapAddBlackOrWhite(cmap, 0, &index); else /* L_SET_WHITE */ pixcmapAddBlackOrWhite(cmap, 1, &index); pixSetAllArbitrary(pixs, index); } return 0; } /*! * pixSetComponentArbitrary() * * Input: pix (32 bpp) * comp (COLOR_RED, COLOR_GREEN, COLOR_BLUE, L_ALPHA_CHANNEL) * val (value to set this component) * Return: 0 if OK; 1 on error * * Notes: * (1) For example, this can be used to set the alpha component to opaque: * pixSetComponentArbitrary(pix, L_ALPHA_CHANNEL, 255) */ l_int32 pixSetComponentArbitrary(PIX *pix, l_int32 comp, l_int32 val) { l_int32 i, nwords; l_uint32 mask1, mask2; l_uint32 *data; PROCNAME("pixSetComponentArbitrary"); if (!pix || pixGetDepth(pix) != 32) return ERROR_INT("pix not defined or not 32 bpp", procName, 1); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return ERROR_INT("invalid component", procName, 1); if (val < 0 || val > 255) return ERROR_INT("val not in [0 ... 255]", procName, 1); mask1 = ~(255 << (8 * (3 - comp))); mask2 = val << (8 * (3 - comp)); nwords = pixGetHeight(pix) * pixGetWpl(pix); data = pixGetData(pix); for (i = 0; i < nwords; i++) { data[i] &= mask1; /* clear out the component */ data[i] |= mask2; /* insert the new component value */ } return 0; } /*-------------------------------------------------------------* * Rectangular region clear/set/set-to-arbitrary-value * *-------------------------------------------------------------*/ /*! * pixClearInRect() * * Input: pix (all depths; can be cmapped) * box (in which all pixels will be cleared) * Return: 0 if OK, 1 on error * * Notes: * (1) Clears all data in rect to 0. For 1 bpp, this is white; * for grayscale or color, this is black. * (2) Caution: for colormapped pix, this sets the color to the first * one in the colormap. Be sure that this is the intended color! */ l_int32 pixClearInRect(PIX *pix, BOX *box) { l_int32 x, y, w, h; PROCNAME("pixClearInRect"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pix, x, y, w, h, PIX_CLR, NULL, 0, 0); return 0; } /*! * pixSetInRect() * * Input: pix (all depths, can be cmapped) * box (in which all pixels will be set) * Return: 0 if OK, 1 on error * * Notes: * (1) Sets all data in rect to 1. For 1 bpp, this is black; * for grayscale or color, this is white. * (2) Caution: for colormapped pix, this sets the pixel value to the * maximum value supported by the colormap: 2^d - 1. However, this * color may not be defined, because the colormap may not be full. */ l_int32 pixSetInRect(PIX *pix, BOX *box) { l_int32 n, x, y, w, h; PIXCMAP *cmap; PROCNAME("pixSetInRect"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (n < cmap->nalloc) /* cmap is not full */ return ERROR_INT("cmap entry does not exist", procName, 1); } boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pix, x, y, w, h, PIX_SET, NULL, 0, 0); return 0; } /*! * pixSetInRectArbitrary() * * Input: pix (all depths; can be cmapped) * box (in which all pixels will be set to val) * val (value to set all pixels) * Return: 0 if OK; 1 on error * * Notes: * (1) For colormapped pix, be sure the value is the intended * one in the colormap. * (2) Caution: for colormapped pix, this sets each pixel in the * rect to the color at the index equal to val. Be sure that * this index exists in the colormap and that it is the intended one! */ l_int32 pixSetInRectArbitrary(PIX *pix, BOX *box, l_uint32 val) { l_int32 n, x, y, xstart, xend, ystart, yend, bw, bh, w, h, d, wpl, maxval; l_uint32 *data, *line; BOX *boxc; PIXCMAP *cmap; PROCNAME("pixSetInRectArbitrary"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d !=8 && d != 16 && d != 32) return ERROR_INT("depth must be in {1,2,4,8,16,32} bpp", procName, 1); if ((cmap = pixGetColormap(pix)) != NULL) { n = pixcmapGetCount(cmap); if (val >= n) { L_WARNING("index not in colormap; using last color\n", procName); val = n - 1; } } maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1; if (val > maxval) val = maxval; /* Handle the simple cases: the min and max values */ if (val == 0) { pixClearInRect(pix, box); return 0; } if (d == 1 || (d == 2 && val == 3) || (d == 4 && val == 0xf) || (d == 8 && val == 0xff) || (d == 16 && val == 0xffff) || (d == 32 && ((val ^ 0xffffff00) >> 8 == 0))) { pixSetInRect(pix, box); return 0; } /* Find the overlap of box with the input pix */ if ((boxc = boxClipToRectangle(box, w, h)) == NULL) return ERROR_INT("no overlap of box with image", procName, 1); boxGetGeometry(boxc, &xstart, &ystart, &bw, &bh); xend = xstart + bw - 1; yend = ystart + bh - 1; boxDestroy(&boxc); wpl = pixGetWpl(pix); data = pixGetData(pix); for (y = ystart; y <= yend; y++) { line = data + y * wpl; for (x = xstart; x <= xend; x++) { switch(d) { case 2: SET_DATA_DIBIT(line, x, val); break; case 4: SET_DATA_QBIT(line, x, val); break; case 8: SET_DATA_BYTE(line, x, val); break; case 16: SET_DATA_TWO_BYTES(line, x, val); break; case 32: line[x] = val; break; default: return ERROR_INT("depth not 2|4|8|16|32 bpp", procName, 1); } } } return 0; } /*! * pixBlendInRect() * * Input: pixs (32 bpp rgb) * box ( in which all pixels will be blended) * val (blend value; 0xrrggbb00) * fract (fraction of color to be blended with each pixel in pixs) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place function. It blends the input color @val * with the pixels in pixs in the specified rectangle. * If no rectangle is specified, it blends over the entire image. */ l_int32 pixBlendInRect(PIX *pixs, BOX *box, l_uint32 val, l_float32 fract) { l_int32 i, j, bx, by, bw, bh, w, h, wpls; l_int32 prval, pgval, pbval, rval, gval, bval; l_uint32 val32; l_uint32 *datas, *lines; PROCNAME("pixBlendInRect"); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); extractRGBValues(val, &rval, &gval, &bval); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (!box) { for (i = 0; i < h; i++) { /* scan over box */ lines = datas + i * wpls; for (j = 0; j < w; j++) { val32 = *(lines + j); extractRGBValues(val32, &prval, &pgval, &pbval); prval = (l_int32)((1. - fract) * prval + fract * rval); pgval = (l_int32)((1. - fract) * pgval + fract * gval); pbval = (l_int32)((1. - fract) * pbval + fract * bval); composeRGBPixel(prval, pgval, pbval, &val32); *(lines + j) = val32; } } return 0; } boxGetGeometry(box, &bx, &by, &bw, &bh); for (i = 0; i < bh; i++) { /* scan over box */ if (by + i < 0 || by + i >= h) continue; lines = datas + (by + i) * wpls; for (j = 0; j < bw; j++) { if (bx + j < 0 || bx + j >= w) continue; val32 = *(lines + bx + j); extractRGBValues(val32, &prval, &pgval, &pbval); prval = (l_int32)((1. - fract) * prval + fract * rval); pgval = (l_int32)((1. - fract) * pgval + fract * gval); pbval = (l_int32)((1. - fract) * pbval + fract * bval); composeRGBPixel(prval, pgval, pbval, &val32); *(lines + bx + j) = val32; } } return 0; } /*-------------------------------------------------------------* * Set pad bits * *-------------------------------------------------------------*/ /*! * pixSetPadBits() * * Input: pix (1, 2, 4, 8, 16, 32 bpp) * val (0 or 1) * Return: 0 if OK; 1 on error * * Notes: * (1) The pad bits are the bits that expand each scanline to a * multiple of 32 bits. They are usually not used in * image processing operations. When boundary conditions * are important, as in seedfill, they must be set properly. * (2) This sets the value of the pad bits (if any) in the last * 32-bit word in each scanline. * (3) For 32 bpp pix, there are no pad bits, so this is a no-op. */ l_int32 pixSetPadBits(PIX *pix, l_int32 val) { l_int32 i, w, h, d, wpl, endbits, fullwords; l_uint32 mask; l_uint32 *data, *pword; PROCNAME("pixSetPadBits"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d == 32) /* no padding exists for 32 bpp */ return 0; data = pixGetData(pix); wpl = pixGetWpl(pix); endbits = 32 - ((w * d) % 32); if (endbits == 32) /* no partial word */ return 0; fullwords = w * d / 32; mask = rmask32[endbits]; if (val == 0) mask = ~mask; for (i = 0; i < h; i++) { pword = data + i * wpl + fullwords; if (val == 0) /* clear */ *pword = *pword & mask; else /* set */ *pword = *pword | mask; } return 0; } /*! * pixSetPadBitsBand() * * Input: pix (1, 2, 4, 8, 16, 32 bpp) * by (starting y value of band) * bh (height of band) * val (0 or 1) * Return: 0 if OK; 1 on error * * Notes: * (1) The pad bits are the bits that expand each scanline to a * multiple of 32 bits. They are usually not used in * image processing operations. When boundary conditions * are important, as in seedfill, they must be set properly. * (2) This sets the value of the pad bits (if any) in the last * 32-bit word in each scanline, within the specified * band of raster lines. * (3) For 32 bpp pix, there are no pad bits, so this is a no-op. */ l_int32 pixSetPadBitsBand(PIX *pix, l_int32 by, l_int32 bh, l_int32 val) { l_int32 i, w, h, d, wpl, endbits, fullwords; l_uint32 mask; l_uint32 *data, *pword; PROCNAME("pixSetPadBitsBand"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d == 32) /* no padding exists for 32 bpp */ return 0; if (by < 0) by = 0; if (by >= h) return ERROR_INT("start y not in image", procName, 1); if (by + bh > h) bh = h - by; data = pixGetData(pix); wpl = pixGetWpl(pix); endbits = 32 - ((w * d) % 32); if (endbits == 32) /* no partial word */ return 0; fullwords = w * d / 32; mask = rmask32[endbits]; if (val == 0) mask = ~mask; for (i = by; i < by + bh; i++) { pword = data + i * wpl + fullwords; if (val == 0) /* clear */ *pword = *pword & mask; else /* set */ *pword = *pword | mask; } return 0; } /*-------------------------------------------------------------* * Set border pixels * *-------------------------------------------------------------*/ /*! * pixSetOrClearBorder() * * Input: pixs (all depths) * left, right, top, bot (amount to set or clear) * operation (PIX_SET or PIX_CLR) * Return: 0 if OK; 1 on error * * Notes: * (1) The border region is defined to be the region in the * image within a specific distance of each edge. Here, we * allow the pixels within a specified distance of each * edge to be set independently. This either sets or * clears all pixels in the border region. * (2) For binary images, use PIX_SET for black and PIX_CLR for white. * (3) For grayscale or color images, use PIX_SET for white * and PIX_CLR for black. */ l_int32 pixSetOrClearBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op) { l_int32 w, h; PROCNAME("pixSetOrClearBorder"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (op != PIX_SET && op != PIX_CLR) return ERROR_INT("op must be PIX_SET or PIX_CLR", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); pixRasterop(pixs, 0, 0, left, h, op, NULL, 0, 0); pixRasterop(pixs, w - right, 0, right, h, op, NULL, 0, 0); pixRasterop(pixs, 0, 0, w, top, op, NULL, 0, 0); pixRasterop(pixs, 0, h - bot, w, bot, op, NULL, 0, 0); return 0; } /*! * pixSetBorderVal() * * Input: pixs (8, 16 or 32 bpp) * left, right, top, bot (amount to set) * val (value to set at each border pixel) * Return: 0 if OK; 1 on error * * Notes: * (1) The border region is defined to be the region in the * image within a specific distance of each edge. Here, we * allow the pixels within a specified distance of each * edge to be set independently. This sets the pixels * in the border region to the given input value. * (2) For efficiency, use pixSetOrClearBorder() if * you're setting the border to either black or white. * (3) If d != 32, the input value should be masked off * to the appropriate number of least significant bits. * (4) The code is easily generalized for 2 or 4 bpp. */ l_int32 pixSetBorderVal(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val) { l_int32 w, h, d, wpls, i, j, bstart, rstart; l_uint32 *datas, *lines; PROCNAME("pixSetBorderVal"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16 && d != 32) return ERROR_INT("depth must be 8, 16 or 32 bpp", procName, 1); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (d == 8) { val &= 0xff; for (i = 0; i < top; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_BYTE(lines, j, val); } rstart = w - right; bstart = h - bot; for (i = top; i < bstart; i++) { lines = datas + i * wpls; for (j = 0; j < left; j++) SET_DATA_BYTE(lines, j, val); for (j = rstart; j < w; j++) SET_DATA_BYTE(lines, j, val); } for (i = bstart; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_BYTE(lines, j, val); } } else if (d == 16) { val &= 0xffff; for (i = 0; i < top; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_TWO_BYTES(lines, j, val); } rstart = w - right; bstart = h - bot; for (i = top; i < bstart; i++) { lines = datas + i * wpls; for (j = 0; j < left; j++) SET_DATA_TWO_BYTES(lines, j, val); for (j = rstart; j < w; j++) SET_DATA_TWO_BYTES(lines, j, val); } for (i = bstart; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) SET_DATA_TWO_BYTES(lines, j, val); } } else { /* d == 32 */ for (i = 0; i < top; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) *(lines + j) = val; } rstart = w - right; bstart = h - bot; for (i = top; i < bstart; i++) { lines = datas + i * wpls; for (j = 0; j < left; j++) *(lines + j) = val; for (j = rstart; j < w; j++) *(lines + j) = val; } for (i = bstart; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) *(lines + j) = val; } } return 0; } /*! * pixSetBorderRingVal() * * Input: pixs (any depth; cmap OK) * dist (distance from outside; must be > 0; first ring is 1) * val (value to set at each border pixel) * Return: 0 if OK; 1 on error * * Notes: * (1) The rings are single-pixel-wide rectangular sets of * pixels at a given distance from the edge of the pix. * This sets all pixels in a given ring to a value. */ l_int32 pixSetBorderRingVal(PIX *pixs, l_int32 dist, l_uint32 val) { l_int32 w, h, d, i, j, xend, yend; PROCNAME("pixSetBorderRingVal"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (dist < 1) return ERROR_INT("dist must be > 0", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (w < 2 * dist + 1 || h < 2 * dist + 1) return ERROR_INT("ring doesn't exist", procName, 1); if (d < 32 && (val >= (1 << d))) return ERROR_INT("invalid pixel value", procName, 1); xend = w - dist; yend = h - dist; for (j = dist - 1; j <= xend; j++) pixSetPixel(pixs, j, dist - 1, val); for (j = dist - 1; j <= xend; j++) pixSetPixel(pixs, j, yend, val); for (i = dist - 1; i <= yend; i++) pixSetPixel(pixs, dist - 1, i, val); for (i = dist - 1; i <= yend; i++) pixSetPixel(pixs, xend, i, val); return 0; } /*! * pixSetMirroredBorder() * * Input: pixs (all depths; colormap ok) * left, right, top, bot (number of pixels to set) * Return: 0 if OK, 1 on error * * Notes: * (1) This applies what is effectively mirror boundary conditions * to a border region in the image. It is in-place. * (2) This is useful for setting pixels near the border to a * value representative of the near pixels to the interior. * (3) The general pixRasterop() is used for an in-place operation here * because there is no overlap between the src and dest rectangles. */ l_int32 pixSetMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; PROCNAME("pixSetMirroredBorder"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); for (j = 0; j < left; j++) pixRasterop(pixs, left - 1 - j, top, 1, h - top - bot, PIX_SRC, pixs, left + j, top); for (j = 0; j < right; j++) pixRasterop(pixs, w - right + j, top, 1, h - top - bot, PIX_SRC, pixs, w - right - 1 - j, top); for (i = 0; i < top; i++) pixRasterop(pixs, 0, top - 1 - i, w, 1, PIX_SRC, pixs, 0, top + i); for (i = 0; i < bot; i++) pixRasterop(pixs, 0, h - bot + i, w, 1, PIX_SRC, pixs, 0, h - bot - 1 - i); return 0; } /*! * pixCopyBorder() * * Input: pixd (all depths; colormap ok; can be NULL) * pixs (same depth and size as pixd) * left, right, top, bot (number of pixels to copy) * Return: pixd, or null on error if pixd is not defined * * Notes: * (1) pixd can be null, but otherwise it must be the same size * and depth as pixs. Always returns pixd. * (1) This is useful in situations where by setting a few border * pixels we can avoid having to copy all pixels in pixs into * pixd as an initialization step for some operation. */ PIX * pixCopyBorder(PIX *pixd, PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 w, h; PROCNAME("pixCopyBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd) { if (pixd == pixs) { L_WARNING("same: nothing to do\n", procName); return pixd; } else if (!pixSizesEqual(pixs, pixd)) { return (PIX *)ERROR_PTR("pixs and pixd sizes differ", procName, pixd); } } else { if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, pixd); } pixGetDimensions(pixs, &w, &h, NULL); pixRasterop(pixd, 0, 0, left, h, PIX_SRC, pixs, 0, 0); pixRasterop(pixd, w - right, 0, right, h, PIX_SRC, pixs, w - right, 0); pixRasterop(pixd, 0, 0, w, top, PIX_SRC, pixs, 0, 0); pixRasterop(pixd, 0, h - bot, w, bot, PIX_SRC, pixs, 0, h - bot); return pixd; } /*-------------------------------------------------------------* * Add and remove border * *-------------------------------------------------------------*/ /*! * pixAddBorder() * * Input: pixs (all depths; colormap ok) * npix (number of pixels to be added to each side) * val (value of added border pixels) * Return: pixd (with the added exterior pixels), or null on error * * Notes: * (1) See pixGetBlackOrWhiteVal() for values of black and white pixels. */ PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val) { PROCNAME("pixAddBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (npix == 0) return pixClone(pixs); return pixAddBorderGeneral(pixs, npix, npix, npix, npix, val); } /*! * pixAddBlackOrWhiteBorder() * * Input: pixs (all depths; colormap ok) * left, right, top, bot (number of pixels added) * op (L_GET_BLACK_VAL, L_GET_WHITE_VAL) * Return: pixd (with the added exterior pixels), or null on error * * Notes: * (1) See pixGetBlackOrWhiteVal() for possible side effect (adding * a color to a colormap). * (2) The only complication is that pixs may have a colormap. * There are two ways to add the black or white border: * (a) As done here (simplest, most efficient) * (b) l_int32 ws, hs, d; * pixGetDimensions(pixs, &ws, &hs, &d); * Pix *pixd = pixCreate(ws + left + right, hs + top + bot, d); * PixColormap *cmap = pixGetColormap(pixs); * if (cmap != NULL) * pixSetColormap(pixd, pixcmapCopy(cmap)); * pixSetBlackOrWhite(pixd, L_SET_WHITE); // uses cmap * pixRasterop(pixd, left, top, ws, hs, PIX_SET, pixs, 0, 0); */ PIX * pixAddBlackOrWhiteBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op) { l_uint32 val; PROCNAME("pixAddBlackOrWhiteBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (op != L_GET_BLACK_VAL && op != L_GET_WHITE_VAL) return (PIX *)ERROR_PTR("invalid op", procName, NULL); pixGetBlackOrWhiteVal(pixs, op, &val); return pixAddBorderGeneral(pixs, left, right, top, bot, val); } /*! * pixAddBorderGeneral() * * Input: pixs (all depths; colormap ok) * left, right, top, bot (number of pixels added) * val (value of added border pixels) * Return: pixd (with the added exterior pixels), or null on error * * Notes: * (1) For binary images: * white: val = 0 * black: val = 1 * For grayscale images: * white: val = 2 ** d - 1 * black: val = 0 * For rgb color images: * white: val = 0xffffff00 * black: val = 0 * For colormapped images, set val to the appropriate colormap index. * (2) If the added border is either black or white, you can use * pixAddBlackOrWhiteBorder() * The black and white values for all images can be found with * pixGetBlackOrWhiteVal() * which, if pixs is cmapped, may add an entry to the colormap. * Alternatively, if pixs has a colormap, you can find the index * of the pixel whose intensity is closest to white or black: * white: pixcmapGetRankIntensity(cmap, 1.0, &index); * black: pixcmapGetRankIntensity(cmap, 0.0, &index); * and use that for val. */ PIX * pixAddBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val) { l_int32 ws, hs, wd, hd, d, maxval, op; PIX *pixd; PROCNAME("pixAddBorderGeneral"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (left < 0 || right < 0 || top < 0 || bot < 0) return (PIX *)ERROR_PTR("negative border added!", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); wd = ws + left + right; hd = hs + top + bot; if ((pixd = pixCreateNoInit(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); /* Set the new border pixels */ maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1; op = UNDEF; if (val == 0) op = PIX_CLR; else if (val >= maxval) op = PIX_SET; if (op == UNDEF) { pixSetAllArbitrary(pixd, val); } else { /* just set or clear the border pixels */ pixRasterop(pixd, 0, 0, left, hd, op, NULL, 0, 0); pixRasterop(pixd, wd - right, 0, right, hd, op, NULL, 0, 0); pixRasterop(pixd, 0, 0, wd, top, op, NULL, 0, 0); pixRasterop(pixd, 0, hd - bot, wd, bot, op, NULL, 0, 0); } /* Copy pixs into the interior */ pixRasterop(pixd, left, top, ws, hs, PIX_SRC, pixs, 0, 0); return pixd; } /*! * pixRemoveBorder() * * Input: pixs (all depths; colormap ok) * npix (number to be removed from each of the 4 sides) * Return: pixd (with pixels removed around border), or null on error */ PIX * pixRemoveBorder(PIX *pixs, l_int32 npix) { PROCNAME("pixRemoveBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (npix == 0) return pixClone(pixs); return pixRemoveBorderGeneral(pixs, npix, npix, npix, npix); } /*! * pixRemoveBorderGeneral() * * Input: pixs (all depths; colormap ok) * left, right, top, bot (number of pixels added) * Return: pixd (with pixels removed around border), or null on error */ PIX * pixRemoveBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 ws, hs, wd, hd, d; PIX *pixd; PROCNAME("pixRemoveBorderGeneral"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (left < 0 || right < 0 || top < 0 || bot < 0) return (PIX *)ERROR_PTR("negative border removed!", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); wd = ws - left - right; hd = hs - top - bot; if (wd <= 0) return (PIX *)ERROR_PTR("width must be > 0", procName, NULL); if (hd <= 0) return (PIX *)ERROR_PTR("height must be > 0", procName, NULL); if ((pixd = pixCreateNoInit(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopySpp(pixd, pixs); pixCopyColormap(pixd, pixs); pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixs, left, top); if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4) pixShiftAndTransferAlpha(pixd, pixs, -left, -top); return pixd; } /*! * pixRemoveBorderToSize() * * Input: pixs (all depths; colormap ok) * wd (target width; use 0 if only removing from height) * hd (target height; use 0 if only removing from width) * Return: pixd (with pixels removed around border), or null on error * * Notes: * (1) Removes pixels as evenly as possible from the sides of the * image, leaving the central part. * (2) Returns clone if no pixels requested removed, or the target * sizes are larger than the image. */ PIX * pixRemoveBorderToSize(PIX *pixs, l_int32 wd, l_int32 hd) { l_int32 w, h, top, bot, left, right, delta; PROCNAME("pixRemoveBorderToSize"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((wd <= 0 || wd >= w) && (hd <= 0 || hd >= h)) return pixClone(pixs); left = right = (w - wd) / 2; delta = w - 2 * left - wd; right += delta; top = bot = (h - hd) / 2; delta = h - hd - 2 * top; bot += delta; if (wd <= 0 || wd > w) left = right = 0; else if (hd <= 0 || hd > h) top = bot = 0; return pixRemoveBorderGeneral(pixs, left, right, top, bot); } /*! * pixAddMirroredBorder() * * Input: pixs (all depths; colormap ok) * left, right, top, bot (number of pixels added) * Return: pixd, or null on error * * Notes: * (1) This applies what is effectively mirror boundary conditions. * For the added border pixels in pixd, the pixels in pixs * near the border are mirror-copied into the border region. * (2) This is useful for avoiding special operations near * boundaries when doing image processing operations * such as rank filters and convolution. In use, one first * adds mirrored pixels to each side of the image. The number * of pixels added on each side is half the filter dimension. * Then the image processing operations proceed over a * region equal to the size of the original image, and * write directly into a dest pix of the same size as pixs. * (3) The general pixRasterop() is used for an in-place operation here * because there is no overlap between the src and dest rectangles. */ PIX * pixAddMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; PIX *pixd; PROCNAME("pixAddMirroredBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (left > w || right > w || top > h || bot > h) return (PIX *)ERROR_PTR("border too large", procName, NULL); /* Set pixels on left, right, top and bottom, in that order */ pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); for (j = 0; j < left; j++) pixRasterop(pixd, left - 1 - j, top, 1, h, PIX_SRC, pixd, left + j, top); for (j = 0; j < right; j++) pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, pixd, left + w - 1 - j, top); for (i = 0; i < top; i++) pixRasterop(pixd, 0, top - 1 - i, left + w + right, 1, PIX_SRC, pixd, 0, top + i); for (i = 0; i < bot; i++) pixRasterop(pixd, 0, top + h + i, left + w + right, 1, PIX_SRC, pixd, 0, top + h - 1 - i); return pixd; } /*! * pixAddRepeatedBorder() * * Input: pixs (all depths; colormap ok) * left, right, top, bot (number of pixels added) * Return: pixd, or null on error * * Notes: * (1) This applies a repeated border, as if the central part of * the image is tiled over the plane. So, for example, the * pixels in the left border come from the right side of the image. * (2) The general pixRasterop() is used for an in-place operation here * because there is no overlap between the src and dest rectangles. */ PIX * pixAddRepeatedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 w, h; PIX *pixd; PROCNAME("pixAddRepeatedBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (left > w || right > w || top > h || bot > h) return (PIX *)ERROR_PTR("border too large", procName, NULL); pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); /* Set pixels on left, right, top and bottom, in that order */ pixRasterop(pixd, 0, top, left, h, PIX_SRC, pixd, w, top); pixRasterop(pixd, left + w, top, right, h, PIX_SRC, pixd, left, top); pixRasterop(pixd, 0, 0, left + w + right, top, PIX_SRC, pixd, 0, h); pixRasterop(pixd, 0, top + h, left + w + right, bot, PIX_SRC, pixd, 0, top); return pixd; } /*! * pixAddMixedBorder() * * Input: pixs (all depths; colormap ok) * left, right, top, bot (number of pixels added) * Return: pixd, or null on error * * Notes: * (1) This applies mirrored boundary conditions horizontally * and repeated b.c. vertically. * (2) It is specifically used for avoiding special operations * near boundaries when convolving a hue-saturation histogram * with a given window size. The repeated b.c. are used * vertically for hue, and the mirrored b.c. are used * horizontally for saturation. The number of pixels added * on each side is approximately (but not quite) half the * filter dimension. The image processing operations can * then proceed over a region equal to the size of the original * image, and write directly into a dest pix of the same * size as pixs. * (3) The general pixRasterop() can be used for an in-place * operation here because there is no overlap between the * src and dest rectangles. */ PIX * pixAddMixedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 j, w, h; PIX *pixd; PROCNAME("pixAddMixedBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (left > w || right > w || top > h || bot > h) return (PIX *)ERROR_PTR("border too large", procName, NULL); /* Set mirrored pixels on left and right; * then set repeated pixels on top and bottom. */ pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); for (j = 0; j < left; j++) pixRasterop(pixd, left - 1 - j, top, 1, h, PIX_SRC, pixd, left + j, top); for (j = 0; j < right; j++) pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, pixd, left + w - 1 - j, top); pixRasterop(pixd, 0, 0, left + w + right, top, PIX_SRC, pixd, 0, h); pixRasterop(pixd, 0, top + h, left + w + right, bot, PIX_SRC, pixd, 0, top); return pixd; } /*! * pixAddContinuedBorder() * * Input: pixs * left, right, top, bot (pixels on each side to be added) * Return: pixd, or null on error * * Notes: * (1) This adds pixels on each side whose values are equal to * the value on the closest boundary pixel. */ PIX * pixAddContinuedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot) { l_int32 i, j, w, h; PIX *pixd; PROCNAME("pixAddContinuedBorder"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixd = pixAddBorderGeneral(pixs, left, right, top, bot, 0); pixGetDimensions(pixs, &w, &h, NULL); for (j = 0; j < left; j++) pixRasterop(pixd, j, top, 1, h, PIX_SRC, pixd, left, top); for (j = 0; j < right; j++) pixRasterop(pixd, left + w + j, top, 1, h, PIX_SRC, pixd, left + w - 1, top); for (i = 0; i < top; i++) pixRasterop(pixd, 0, i, left + w + right, 1, PIX_SRC, pixd, 0, top); for (i = 0; i < bot; i++) pixRasterop(pixd, 0, top + h + i, left + w + right, 1, PIX_SRC, pixd, 0, top + h - 1); return pixd; } /*-------------------------------------------------------------------* * Helper functions using alpha * *-------------------------------------------------------------------*/ /*! * pixShiftAndTransferAlpha() * * Input: pixd (32 bpp) * pixs (32 bpp) * shiftx, shifty * Return: 0 if OK; 1 on error */ l_int32 pixShiftAndTransferAlpha(PIX *pixd, PIX *pixs, l_float32 shiftx, l_float32 shifty) { l_int32 w, h; PIX *pix1, *pix2; PROCNAME("pixShiftAndTransferAlpha"); if (!pixs || !pixd) return ERROR_INT("pixs and pixd not both defined", procName, 1); if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4) return ERROR_INT("pixs not 32 bpp and 4 spp", procName, 1); if (pixGetDepth(pixd) != 32) return ERROR_INT("pixd not 32 bpp", procName, 1); if (shiftx == 0 && shifty == 0) { pixCopyRGBComponent(pixd, pixs, L_ALPHA_CHANNEL); return 0; } pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pixGetDimensions(pixd, &w, &h, NULL); pix2 = pixCreate(w, h, 8); pixRasterop(pix2, 0, 0, w, h, PIX_SRC, pix1, -shiftx, -shifty); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); return 0; } /*! * pixDisplayLayersRGBA() * * Input: pixs (cmap or 32 bpp rgba) * val (32 bit unsigned color to use as background) * maxw (max output image width; 0 for no scaling) * Return: pixd (showing various image views), or null on error * * Notes: * (1) Use @val == 0xffffff00 for white background. * (2) Three views are given: * - the image with a fully opaque alpha * - the alpha layer * - the image as it would appear with a white background. */ PIX * pixDisplayLayersRGBA(PIX *pixs, l_uint32 val, l_int32 maxw) { l_int32 w, width; l_float32 scalefact; PIX *pix1, *pix2, *pixd; PIXA *pixa; PIXCMAP *cmap; PROCNAME("pixDisplayLayersRGBA"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); cmap = pixGetColormap(pixs); if (!cmap && !(pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4)) return (PIX *)ERROR_PTR("pixs not cmap and not 32 bpp rgba", procName, NULL); if ((w = pixGetWidth(pixs)) == 0) return (PIX *)ERROR_PTR("pixs width 0 !!", procName, NULL); if (cmap) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_WITH_ALPHA); else pix1 = pixCopy(NULL, pixs); /* Scale if necessary so the output width is not larger than maxw */ scalefact = (maxw == 0) ? 1.0 : L_MIN(1.0, maxw / w); width = (l_int32)(scalefact * w); pixa = pixaCreate(3); pixSetSpp(pix1, 3); pixaAddPix(pixa, pix1, L_INSERT); /* show the rgb values */ pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixConvertTo32(pix1); pixaAddPix(pixa, pix2, L_INSERT); /* show the alpha channel */ pixDestroy(&pix1); pix1 = pixAlphaBlendUniform(pixs, (val & 0xffffff00)); pixaAddPix(pixa, pix1, L_INSERT); /* with @val color bg showing */ pixd = pixaDisplayTiledInRows(pixa, 32, width, scalefact, 0, 25, 2); pixaDestroy(&pixa); return pixd; } /*-------------------------------------------------------------* * Color sample setting and extraction * *-------------------------------------------------------------*/ /*! * pixCreateRGBImage() * * Input: 8 bpp red pix * 8 bpp green pix * 8 bpp blue pix * Return: 32 bpp pix, interleaved with 4 samples/pixel, * or null on error * * Notes: * (1) the 4th byte, sometimes called the "alpha channel", * and which is often used for blending between different * images, is left with 0 value. * (2) see Note (4) in pix.h for details on storage of * 8-bit samples within each 32-bit word. * (3) This implementation, setting the r, g and b components * sequentially, is much faster than setting them in parallel * by constructing an RGB dest pixel and writing it to dest. * The reason is there are many more cache misses when reading * from 3 input images simultaneously. */ PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb) { l_int32 wr, wg, wb, hr, hg, hb, dr, dg, db; PIX *pixd; PROCNAME("pixCreateRGBImage"); if (!pixr) return (PIX *)ERROR_PTR("pixr not defined", procName, NULL); if (!pixg) return (PIX *)ERROR_PTR("pixg not defined", procName, NULL); if (!pixb) return (PIX *)ERROR_PTR("pixb not defined", procName, NULL); pixGetDimensions(pixr, &wr, &hr, &dr); pixGetDimensions(pixg, &wg, &hg, &dg); pixGetDimensions(pixb, &wb, &hb, &db); if (dr != 8 || dg != 8 || db != 8) return (PIX *)ERROR_PTR("input pix not all 8 bpp", procName, NULL); if (wr != wg || wr != wb) return (PIX *)ERROR_PTR("widths not the same", procName, NULL); if (hr != hg || hr != hb) return (PIX *)ERROR_PTR("heights not the same", procName, NULL); if ((pixd = pixCreate(wr, hr, 32)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixr); pixSetRGBComponent(pixd, pixr, COLOR_RED); pixSetRGBComponent(pixd, pixg, COLOR_GREEN); pixSetRGBComponent(pixd, pixb, COLOR_BLUE); return pixd; } /*! * pixGetRGBComponent() * * Input: pixs (32 bpp, or colormapped) * comp (one of {COLOR_RED, COLOR_GREEN, COLOR_BLUE, * L_ALPHA_CHANNEL}) * Return: pixd (the selected 8 bpp component image of the * input 32 bpp image) or null on error * * Notes: * (1) Three calls to this function generate the r, g and b 8 bpp * component images. This is much faster than generating the * three images in parallel, by extracting a src pixel and setting * the pixels of each component image from it. The reason is * there are many more cache misses when writing to three * output images simultaneously. */ PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *lines, *lined; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixGetRGBComponent"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs)) return pixGetRGBComponentCmap(pixs, comp); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return (PIX *)ERROR_PTR("invalid comp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines + j, comp); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*! * pixSetRGBComponent() * * Input: pixd (32 bpp) * pixs (8 bpp) * comp (one of the set: {COLOR_RED, COLOR_GREEN, * COLOR_BLUE, L_ALPHA_CHANNEL}) * Return: 0 if OK; 1 on error * * Notes: * (1) This places the 8 bpp pixel in pixs into the * specified component (properly interleaved) in pixd, * (2) The two images are registered to the UL corner; the sizes * need not be the same, but a warning is issued if they differ. */ l_int32 pixSetRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp) { l_uint8 srcbyte; l_int32 i, j, w, h, ws, hs, wd, hd; l_int32 wpls, wpld; l_uint32 *lines, *lined; l_uint32 *datas, *datad; PROCNAME("pixSetRGBComponent"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixd) != 32) return ERROR_INT("pixd not 32 bpp", procName, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("pixs not 8 bpp", procName, 1); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return ERROR_INT("invalid comp", procName, 1); pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); if (ws != wd || hs != hd) L_WARNING("images sizes not equal\n", procName); w = L_MIN(ws, wd); h = L_MIN(hs, hd); if (comp == L_ALPHA_CHANNEL) pixSetSpp(pixd, 4); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { srcbyte = GET_DATA_BYTE(lines, j); SET_DATA_BYTE(lined + j, comp, srcbyte); } } return 0; } /*! * pixGetRGBComponentCmap() * * Input: pixs (colormapped) * comp (one of the set: {COLOR_RED, COLOR_GREEN, COLOR_BLUE}) * Return: pixd (the selected 8 bpp component image of the * input cmapped image), or null on error * * Notes: * (1) In leptonica, we do not support alpha in colormaps. */ PIX * pixGetRGBComponentCmap(PIX *pixs, l_int32 comp) { l_int32 i, j, w, h, val, index; l_int32 wplc, wpld; l_uint32 *linec, *lined; l_uint32 *datac, *datad; PIX *pixc, *pixd; PIXCMAP *cmap; RGBA_QUAD *cta; PROCNAME("pixGetRGBComponentCmap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if ((cmap = pixGetColormap(pixs)) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped", procName, NULL); if (comp == L_ALPHA_CHANNEL) return (PIX *)ERROR_PTR("alpha in cmaps not supported", procName, NULL); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE) return (PIX *)ERROR_PTR("invalid comp", procName, NULL); /* If not 8 bpp, make a cmapped 8 bpp pix */ if (pixGetDepth(pixs) == 8) pixc = pixClone(pixs); else pixc = pixConvertTo8(pixs, TRUE); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreateNoInit(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); wplc = pixGetWpl(pixc); wpld = pixGetWpl(pixd); datac = pixGetData(pixc); datad = pixGetData(pixd); cta = (RGBA_QUAD *)cmap->array; for (i = 0; i < h; i++) { linec = datac + i * wplc; lined = datad + i * wpld; if (comp == COLOR_RED) { for (j = 0; j < w; j++) { index = GET_DATA_BYTE(linec, j); val = cta[index].red; SET_DATA_BYTE(lined, j, val); } } else if (comp == COLOR_GREEN) { for (j = 0; j < w; j++) { index = GET_DATA_BYTE(linec, j); val = cta[index].green; SET_DATA_BYTE(lined, j, val); } } else if (comp == COLOR_BLUE) { for (j = 0; j < w; j++) { index = GET_DATA_BYTE(linec, j); val = cta[index].blue; SET_DATA_BYTE(lined, j, val); } } } pixDestroy(&pixc); return pixd; } /*! * pixCopyRGBComponent() * * Input: pixd (32 bpp) * pixs (32 bpp) * comp (one of the set: {COLOR_RED, COLOR_GREEN, * COLOR_BLUE, L_ALPHA_CHANNEL}) * Return: 0 if OK; 1 on error * * Notes: * (1) The two images are registered to the UL corner. The sizes * are usually the same, and a warning is issued if they differ. */ l_int32 pixCopyRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp) { l_int32 i, j, w, h, ws, hs, wd, hd, val; l_int32 wpls, wpld; l_uint32 *lines, *lined; l_uint32 *datas, *datad; PROCNAME("pixCopyRGBComponent"); if (!pixd && pixGetDepth(pixd) != 32) return ERROR_INT("pixd not defined or not 32 bpp", procName, 1); if (!pixs && pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); if (comp != COLOR_RED && comp != COLOR_GREEN && comp != COLOR_BLUE && comp != L_ALPHA_CHANNEL) return ERROR_INT("invalid component", procName, 1); pixGetDimensions(pixs, &ws, &hs, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); if (ws != wd || hs != hd) L_WARNING("images sizes not equal\n", procName); w = L_MIN(ws, wd); h = L_MIN(hs, hd); if (comp == L_ALPHA_CHANNEL) pixSetSpp(pixd, 4); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines + j, comp); SET_DATA_BYTE(lined + j, comp, val); } } return 0; } /*! * composeRGBPixel() * * Input: rval, gval, bval * &pixel ( 32-bit pixel) * Return: 0 if OK; 1 on error * * Notes: * (1) All channels are 8 bits: the input values must be between * 0 and 255. For speed, this is not enforced by masking * with 0xff before shifting. * (2) A slower implementation uses macros: * SET_DATA_BYTE(ppixel, COLOR_RED, rval); * SET_DATA_BYTE(ppixel, COLOR_GREEN, gval); * SET_DATA_BYTE(ppixel, COLOR_BLUE, bval); */ l_int32 composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel) { PROCNAME("composeRGBPixel"); if (!ppixel) return ERROR_INT("&pixel not defined", procName, 1); *ppixel = (rval << L_RED_SHIFT) | (gval << L_GREEN_SHIFT) | (bval << L_BLUE_SHIFT); return 0; } /*! * composeRGBAPixel() * * Input: rval, gval, bval, aval * &pixel ( 32-bit pixel) * Return: 0 if OK; 1 on error * * Notes: * (1) All channels are 8 bits: the input values must be between * 0 and 255. For speed, this is not enforced by masking * with 0xff before shifting. */ l_int32 composeRGBAPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel) { PROCNAME("composeRGBAPixel"); if (!ppixel) return ERROR_INT("&pixel not defined", procName, 1); *ppixel = (rval << L_RED_SHIFT) | (gval << L_GREEN_SHIFT) | (bval << L_BLUE_SHIFT) | aval; return 0; } /*! * extractRGBValues() * * Input: pixel (32 bit) * &rval ( red component) * &gval ( green component) * &bval ( blue component) * Return: void * * Notes: * (1) A slower implementation uses macros: * *prval = GET_DATA_BYTE(&pixel, COLOR_RED); * *pgval = GET_DATA_BYTE(&pixel, COLOR_GREEN); * *pbval = GET_DATA_BYTE(&pixel, COLOR_BLUE); */ void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff; if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff; if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff; return; } /*! * extractRGBAValues() * * Input: pixel (32 bit) * &rval ( red component) * &gval ( green component) * &bval ( blue component) * &aval ( alpha component) * Return: void */ void extractRGBAValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval) { if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff; if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff; if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff; if (paval) *paval = (pixel >> L_ALPHA_SHIFT) & 0xff; return; } /*! * extractMinMaxComponent() * * Input: pixel (32 bpp RGB) * type (L_CHOOSE_MIN or L_CHOOSE_MAX) * Return: component (in range [0 ... 255], or null on error */ l_int32 extractMinMaxComponent(l_uint32 pixel, l_int32 type) { l_int32 rval, gval, bval, val; extractRGBValues(pixel, &rval, &gval, &bval); if (type == L_CHOOSE_MIN) { val = L_MIN(rval, gval); val = L_MIN(val, bval); } else { /* type == L_CHOOSE_MAX */ val = L_MAX(rval, gval); val = L_MAX(val, bval); } return val; } /*! * pixGetRGBLine() * * Input: pixs (32 bpp) * row * bufr (array of red samples; size w bytes) * bufg (array of green samples; size w bytes) * bufb (array of blue samples; size w bytes) * Return: 0 if OK; 1 on error * * Notes: * (1) This puts rgb components from the input line in pixs * into the given buffers. */ l_int32 pixGetRGBLine(PIX *pixs, l_int32 row, l_uint8 *bufr, l_uint8 *bufg, l_uint8 *bufb) { l_uint32 *lines; l_int32 j, w, h; l_int32 wpls; PROCNAME("pixGetRGBLine"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (!bufr || !bufg || !bufb) return ERROR_INT("buffer not defined", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (row < 0 || row >= h) return ERROR_INT("row out of bounds", procName, 1); wpls = pixGetWpl(pixs); lines = pixGetData(pixs) + row * wpls; for (j = 0; j < w; j++) { bufr[j] = GET_DATA_BYTE(lines + j, COLOR_RED); bufg[j] = GET_DATA_BYTE(lines + j, COLOR_GREEN); bufb[j] = GET_DATA_BYTE(lines + j, COLOR_BLUE); } return 0; } /*-------------------------------------------------------------* * Pixel endian conversion * *-------------------------------------------------------------*/ /*! * pixEndianByteSwapNew() * * Input: pixs * Return: pixd, or null on error * * Notes: * (1) This is used to convert the data in a pix to a * serialized byte buffer in raster order, and, for RGB, * in order RGBA. This requires flipping bytes within * each 32-bit word for little-endian platforms, because the * words have a MSB-to-the-left rule, whereas byte raster-order * requires the left-most byte in each word to be byte 0. * For big-endians, no swap is necessary, so this returns a clone. * (2) Unlike pixEndianByteSwap(), which swaps the bytes in-place, * this returns a new pix (or a clone). We provide this * because often when serialization is done, the source * pix needs to be restored to canonical little-endian order, * and this requires a second byte swap. In such a situation, * it is twice as fast to make a new pix in big-endian order, * use it, and destroy it. */ PIX * pixEndianByteSwapNew(PIX *pixs) { l_uint32 *datas, *datad; l_int32 i, j, h, wpl; l_uint32 word; PIX *pixd; PROCNAME("pixEndianByteSwapNew"); #ifdef L_BIG_ENDIAN return pixClone(pixs); #else /* L_LITTLE_ENDIAN */ if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); datas = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, datas++, datad++) { word = *datas; *datad = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return pixd; #endif /* L_BIG_ENDIAN */ } /*! * pixEndianByteSwap() * * Input: pixs * Return: 0 if OK, 1 on error * * Notes: * (1) This is used on little-endian platforms to swap * the bytes within a word; bytes 0 and 3 are swapped, * and bytes 1 and 2 are swapped. * (2) This is required for little-endians in situations * where we convert from a serialized byte order that is * in raster order, as one typically has in file formats, * to one with MSB-to-the-left in each 32-bit word, or v.v. * See pix.h for a description of the canonical format * (MSB-to-the left) that is used for both little-endian * and big-endian platforms. For big-endians, the * MSB-to-the-left word order has the bytes in raster * order when serialized, so no byte flipping is required. */ l_int32 pixEndianByteSwap(PIX *pixs) { l_uint32 *data; l_int32 i, j, h, wpl; l_uint32 word; PROCNAME("pixEndianByteSwap"); #ifdef L_BIG_ENDIAN return 0; #else /* L_LITTLE_ENDIAN */ if (!pixs) return ERROR_INT("pixs not defined", procName, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, data++) { word = *data; *data = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } } return 0; #endif /* L_BIG_ENDIAN */ } /*! * lineEndianByteSwap() * * Input datad (dest byte array data, reordered on little-endians) * datas (a src line of pix data) * wpl (number of 32 bit words in the line) * Return: 0 if OK, 1 on error * * Notes: * (1) This is used on little-endian platforms to swap * the bytes within each word in the line of image data. * Bytes 0 <==> 3 and 1 <==> 2 are swapped in the dest * byte array data8d, relative to the pix data in datas. * (2) The bytes represent 8 bit pixel values. They are swapped * for little endians so that when the dest array (char *)datad * is addressed by bytes, the pixels are chosen sequentially * from left to right in the image. */ l_int32 lineEndianByteSwap(l_uint32 *datad, l_uint32 *datas, l_int32 wpl) { l_int32 j; l_uint32 word; PROCNAME("lineEndianByteSwap"); if (!datad || !datas) return ERROR_INT("datad and datas not both defined", procName, 1); #ifdef L_BIG_ENDIAN memcpy((char *)datad, (char *)datas, 4 * wpl); return 0; #else /* L_LITTLE_ENDIAN */ for (j = 0; j < wpl; j++, datas++, datad++) { word = *datas; *datad = (word >> 24) | ((word >> 8) & 0x0000ff00) | ((word << 8) & 0x00ff0000) | (word << 24); } return 0; #endif /* L_BIG_ENDIAN */ } /*! * pixEndianTwoByteSwapNew() * * Input: pixs * Return: 0 if OK, 1 on error * * Notes: * (1) This is used on little-endian platforms to swap the * 2-byte entities within a 32-bit word. * (2) This is equivalent to a full byte swap, as performed * by pixEndianByteSwap(), followed by byte swaps in * each of the 16-bit entities separately. * (3) Unlike pixEndianTwoByteSwap(), which swaps the shorts in-place, * this returns a new pix (or a clone). We provide this * to avoid having to swap twice in situations where the input * pix must be restored to canonical little-endian order. */ PIX * pixEndianTwoByteSwapNew(PIX *pixs) { l_uint32 *datas, *datad; l_int32 i, j, h, wpl; l_uint32 word; PIX *pixd; PROCNAME("pixEndianTwoByteSwapNew"); #ifdef L_BIG_ENDIAN return pixClone(pixs); #else /* L_LITTLE_ENDIAN */ if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); datas = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, datas++, datad++) { word = *datas; *datad = (word << 16) | (word >> 16); } } return pixd; #endif /* L_BIG_ENDIAN */ } /*! * pixEndianTwoByteSwap() * * Input: pixs * Return: 0 if OK, 1 on error * * Notes: * (1) This is used on little-endian platforms to swap the * 2-byte entities within a 32-bit word. * (2) This is equivalent to a full byte swap, as performed * by pixEndianByteSwap(), followed by byte swaps in * each of the 16-bit entities separately. */ l_int32 pixEndianTwoByteSwap(PIX *pixs) { l_uint32 *data; l_int32 i, j, h, wpl; l_uint32 word; PROCNAME("pixEndianTwoByteSwap"); #ifdef L_BIG_ENDIAN return 0; #else /* L_LITTLE_ENDIAN */ if (!pixs) return ERROR_INT("pixs not defined", procName, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); h = pixGetHeight(pixs); for (i = 0; i < h; i++) { for (j = 0; j < wpl; j++, data++) { word = *data; *data = (word << 16) | (word >> 16); } } return 0; #endif /* L_BIG_ENDIAN */ } /*-------------------------------------------------------------* * Extract raster data as binary string * *-------------------------------------------------------------*/ /*! * pixGetRasterData() * * Input: pixs (1, 8, 32 bpp) * &data ( raster data in memory) * &nbytes ( number of bytes in data string) * Return: 0 if OK, 1 on error * * Notes: * (1) This returns the raster data as a byte string, padded to the * byte. For 1 bpp, the first pixel is the MSbit in the first byte. * For rgb, the bytes are in (rgb) order. This is the format * required for flate encoding of pixels in a PostScript file. */ l_int32 pixGetRasterData(PIX *pixs, l_uint8 **pdata, size_t *pnbytes) { l_int32 w, h, d, wpl, i, j, rval, gval, bval; l_int32 databpl; /* bytes for each raster line in returned data */ l_uint8 *line, *data; /* packed data in returned array */ l_uint32 *rline, *rdata; /* data in pix raster */ PROCNAME("pixGetRasterData"); if (!pdata || !pnbytes) return ERROR_INT("&data and &nbytes not both defined", procName, 1); *pdata = NULL; *pnbytes = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return ERROR_INT("depth not in {1,2,4,8,16,32}", procName, 1); rdata = pixGetData(pixs); wpl = pixGetWpl(pixs); if (d == 1) databpl = (w + 7) / 8; else if (d == 2) databpl = (w + 3) / 4; else if (d == 4) databpl = (w + 1) / 2; else if (d == 8 || d == 16) databpl = w * (d / 8); else /* d == 32 bpp rgb */ databpl = 3 * w; if ((data = (l_uint8 *)CALLOC(databpl * h, sizeof(l_uint8))) == NULL) return ERROR_INT("data not allocated", procName, 1); *pdata = data; *pnbytes = databpl * h; for (i = 0; i < h; i++) { rline = rdata + i * wpl; line = data + i * databpl; if (d <= 8) { for (j = 0; j < databpl; j++) line[j] = GET_DATA_BYTE(rline, j); } else if (d == 16) { for (j = 0; j < w; j++) line[2 * j] = GET_DATA_TWO_BYTES(rline, j); } else { /* d == 32 bpp rgb */ for (j = 0; j < w; j++) { extractRGBValues(rline[j], &rval, &gval, &bval); *(line + 3 * j) = rval; *(line + 3 * j + 1) = gval; *(line + 3 * j + 2) = bval; } } } return 0; } /*-------------------------------------------------------------* * Test alpha component opaqueness * *-------------------------------------------------------------*/ /*! * pixAlphaIsOpaque() * * Input: pix (32 bpp, spp == 4) * &opaque ( 1 if spp == 4 and all alpha component * values are 255 (opaque); 0 otherwise) * Return: 0 if OK, 1 on error * Notes: * (1) On error, opaque is returned as 0 (FALSE). */ l_int32 pixAlphaIsOpaque(PIX *pix, l_int32 *popaque) { l_int32 w, h, wpl, i, j, alpha; l_uint32 *data, *line; PROCNAME("pixAlphaIsOpaque"); if (!popaque) return ERROR_INT("&opaque not defined", procName, 1); *popaque = FALSE; if (!pix) return ERROR_INT("&pix not defined", procName, 1); if (pixGetDepth(pix) != 32) return ERROR_INT("&pix not 32 bpp", procName, 1); if (pixGetSpp(pix) != 4) return ERROR_INT("&pix not 4 spp", procName, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); pixGetDimensions(pix, &w, &h, NULL); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { alpha = GET_DATA_BYTE(line + j, L_ALPHA_CHANNEL); if (alpha ^ 0xff) /* not opaque */ return 0; } } *popaque = TRUE; return 0; } /*-------------------------------------------------------------* * Setup helpers for 8 bpp byte processing * *-------------------------------------------------------------*/ /*! * pixSetupByteProcessing() * * Input: pix (8 bpp, no colormap) * &w ( width) * &h ( height) * Return: line ptr array, or null on error * * Notes: * (1) This is a simple helper for processing 8 bpp images with * direct byte access. It can swap byte order within each word. * (2) After processing, you must call pixCleanupByteProcessing(), * which frees the lineptr array and restores byte order. * (3) Usage: * l_uint8 **lineptrs = pixSetupByteProcessing(pix, &w, &h); * for (i = 0; i < h; i++) { * l_uint8 *line = lineptrs[i]; * for (j = 0; j < w; j++) { * val = line[j]; * ... * } * } * pixCleanupByteProcessing(pix, lineptrs); */ l_uint8 ** pixSetupByteProcessing(PIX *pix, l_int32 *pw, l_int32 *ph) { l_int32 w, h; PROCNAME("pixSetupByteProcessing"); if (pw) *pw = 0; if (ph) *ph = 0; if (!pix || pixGetDepth(pix) != 8) return (l_uint8 **)ERROR_PTR("pix not defined or not 8 bpp", procName, NULL); if (pixGetColormap(pix)) return (l_uint8 **)ERROR_PTR("pix has colormap", procName, NULL); pixGetDimensions(pix, &w, &h, NULL); if (pw) *pw = w; if (ph) *ph = h; pixEndianByteSwap(pix); return (l_uint8 **)pixGetLinePtrs(pix, NULL); } /*! * pixCleanupByteProcessing() * * Input: pix (8 bpp, no colormap) * lineptrs (ptrs to the beginning of each raster line of data) * Return: 0 if OK, 1 on error * * Notes: * (1) This must be called after processing that was initiated * by pixSetupByteProcessing() has finished. */ l_int32 pixCleanupByteProcessing(PIX *pix, l_uint8 **lineptrs) { PROCNAME("pixCleanupByteProcessing"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!lineptrs) return ERROR_INT("lineptrs not defined", procName, 1); pixEndianByteSwap(pix); FREE(lineptrs); return 0; } /*------------------------------------------------------------------------* * Setting parameters for antialias masking with alpha transforms * *------------------------------------------------------------------------*/ /*! * l_setAlphaMaskBorder() * * Input: val1, val2 (in [0.0 ... 1.0]) * Return: void * * Notes: * (1) This sets the opacity values used to generate the two outer * boundary rings in the alpha mask associated with geometric * transforms such as pixRotateWithAlpha(). * (2) The default values are val1 = 0.0 (completely transparent * in the outermost ring) and val2 = 0.5 (half transparent * in the second ring). When the image is blended, this * completely removes the outer ring (shrinking the image by * 2 in each direction), and alpha-blends with 0.5 the second ring. * Using val1 = 0.25 and val2 = 0.75 gives a slightly more * blurred border, with no perceptual difference at screen resolution. * (3) The actual mask values are found by multiplying these * normalized opacity values by 255. */ void l_setAlphaMaskBorder(l_float32 val1, l_float32 val2) { val1 = L_MAX(0.0, L_MIN(1.0, val1)); val2 = L_MAX(0.0, L_MIN(1.0, val2)); AlphaMaskBorderVals[0] = val1; AlphaMaskBorderVals[1] = val2; } leptonica-1.70/src/recogident.c0000664000175000017500000022303112264037116014570 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * recogident.c * * Top-level identification * l_int32 recogaIdentifyMultiple() * * Segmentation and noise removal * l_int32 recogSplitIntoCharacters() * l_int32 recogCorrelationBestRow() * l_int32 recogCorrelationBestChar() * static l_int32 pixCorrelationBestShift() * * Low-level identification of single characters * l_int32 recogaIdentifyPixa() * l_int32 recogIdentifyPixa() * l_int32 recogIdentifyPix() * l_int32 recogSkipIdentify() * * Operations for handling identification results * static L_RCHA *rchaCreate() * l_int32 *rchaDestroy() * static L_RCH *rchCreate() * l_int32 *rchDestroy() * l_int32 rchaExtract() * l_int32 rchExtract() * static l_int32 transferRchToRcha() * static l_int32 recogaSaveBestRcha() * static l_int32 recogaTransferRch() * l_int32 recogTransferRchToDid() * * Preprocessing and filtering * l_int32 recogProcessToIdentify() * PIX *recogPreSplittingFilter() * PIX *recogSplittingFilter() * * Postprocessing * SARRAY *recogExtractNumbers() * * Modifying recog behavior * l_int32 recogSetTemplateType() * l_int32 recogSetScaling() * * Static debug helper * static void l_showIndicatorSplitValues() * * See recogbasic.c for examples of training a recognizer, which is * required before it can be used for identification. * * The character splitter repeatedly does a greedy correlation with each * averaged unscaled template, at all pixel locations along the text to * be identified. The vertical alignment is between the template * centroid and the (moving) windowed centroid, including a delta of * 1 pixel above and below. The best match then removes part of the * input image, leaving 1 or 2 pieces, which, after filtering, * are put in a queue. The process ends when the queue is empty. * The filtering is based on the size and aspect ratio of the * remaining pieces; the intent is to remove anything that is * unlikely to be text, such as small pieces and line graphics. * * After splitting, the selected segments are identified using * the input parameters that were initially specified for the * recognizer. Unlike the splitter, which uses the averaged * templates from the unscaled input, the recognizer can use * either all training examples or averaged templates, and these * can be either scaled or unscaled. These choices are specified * when the recognizer is constructed. */ #include #include "allheaders.h" /* Padding on pix1: added before correlations and removed from result */ static const l_int32 LeftRightPadding = 32; /* Parameters for filtering and sorting connected components in splitter */ static const l_float32 MaxAspectRatio = 6.0; static const l_float32 MinFillFactor = 0.25; static const l_float32 MaxPreFillFactor = 0.80; static const l_float32 MaxSplitFillFactor = 0.85; static const l_int32 MinOverlap1 = 6; /* in pass 1 of boxaSort2d() */ static const l_int32 MinOverlap2 = 6; /* in pass 2 of boxaSort2d() */ static const l_int32 MinHeightPass1 = 5; /* min height to start pass 1 */ static l_int32 pixCorrelationBestShift(PIX *pix1, PIX *pix2, NUMA *nasum1, NUMA *namoment1, l_int32 area2, l_int32 ycent2, l_int32 maxyshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag ); static L_RCH *rchCreate(l_int32 index, l_float32 score, char *text, l_int32 sample, l_int32 xloc, l_int32 yloc, l_int32 width); static L_RCHA *rchaCreate(); static l_int32 transferRchToRcha(L_RCH *rch, L_RCHA *rcha); static void l_showIndicatorSplitValues(NUMA *na1, NUMA *na2, NUMA *na3, NUMA *na4, NUMA *na5, NUMA *na6, NUMA *na7); static l_int32 recogaSaveBestRcha(L_RECOGA *recoga, PIXA *pixa); static l_int32 recogaTransferRch(L_RECOGA *recoga, L_RECOG *recog, l_int32 index); /*------------------------------------------------------------------------* * Identification *------------------------------------------------------------------------*/ /*! * recogaIdentifyMultiple() * * Input: recoga (with training finished) * pixs (containing typically a small number of characters) * nitems (to be identified in pix; use 0 if not known) * minw (remove components with width less than this; * use -1 for removing all noise components) * minh (remove components with height less than this; * use -1 for removing all noise components) * &boxa ( locations of identified components) * &pixa ( images of identified components) * &pixdb ( debug pix: inputs and best fits) * debugsplit (1 returns pix split debugging images) * Return: 0 if OK; 1 if more or less than nitems were found (a warning); * 2 on error. * * Notes: * (1) This filters the input pixa, looking for @nitems if requested. * Set @nitems == 0 if you don't know how many chars to expect. * (2) This bundles the filtered components into a pixa and calls * recogIdentifyPixa(). If @nitems > 0, use @minw = -1 and * @minh = -1 to remove all noise components. If @nitems > 0 * and it doesn't agree with the number of filtered components * in pixs, a warning is issued and a 1 is returned. * (3) Set @minw = 0 and @minh = 0 to get all noise components. * Set @minw > 0 and/or @minh > 0 to retain selected noise components. * All noise components are recognized as an empty string with * a score of 0.0. * (4) An attempt is made to return 2-dimensional sorted arrays * of (optional) images and boxes, which can then be used to * aggregate identified characters into numbers or words. * One typically wants the pixa, which contains a boxa of the * extracted subimages. */ l_int32 recogaIdentifyMultiple(L_RECOGA *recoga, PIX *pixs, l_int32 nitems, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, PIX **ppixdb, l_int32 debugsplit) { l_int32 n, done, ret; BOXA *boxa; PIX *pixb; PIXA *pixa; NUMA *naid; L_RECOG *recog; PROCNAME("recogaIdentifyMultiple"); if (pboxa) *pboxa = NULL; if (ppixa) *ppixa = NULL; if (ppixdb) *ppixdb = NULL; if (!recoga || recoga->n == 0) return ERROR_INT("recog not defined or empty", procName, 2); recogaTrainingDone(recoga, &done); if (!done) return ERROR_INT("training not finished", procName, 2); if (!pixs) return ERROR_INT("pixs not defined", procName, 2); /* Binarize if necessary */ recog = recogaGetRecog(recoga, 0); /* use the first one */ if (pixGetDepth(pixs) > 1) pixb = pixConvertTo1(pixs, recog->threshold); else pixb = pixClone(pixs); /* Noise removal and splitting of touching characters */ recogSplitIntoCharacters(recog, pixb, minw, minh, &boxa, &pixa, &naid, debugsplit); pixDestroy(&pixb); if (!pixa || (n = pixaGetCount(pixa)) == 0) { pixaDestroy(&pixa); boxaDestroy(&boxa); numaDestroy(&naid); L_WARNING("nothing found\n", procName); return 1; } ret = 0; if (nitems > 0 && n != nitems) { L_WARNING("Expected %d items; found %d\n", procName, nitems, n); ret = 1; } recogaIdentifyPixa(recoga, pixa, naid, ppixdb); if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); if (ppixa) *ppixa = pixa; else pixaDestroy(&pixa); numaDestroy(&naid); return ret; } /*! * recogSplitIntoCharacters() * * Input: recog * pixs (1 bpp, contains only mostly deskewed text) * minw (remove components with width less than this; * use -1 for default removing out of band components) * minh (remove components with height less than this; * use -1 for default removing out of band components) * &boxa ( character bounding boxes) * &pixa ( character images) * &naid ( indices of components to identify) * debug (1 for results written to pixadb_split) * * Return: 0 if OK, 1 on error * * Notes: * (1) This can be given an image that has an arbitrary number * of text characters. It does splitting of connected * components based on greedy correlation matching in * recogCorrelationBestRow(). The returned pixa includes * the boxes from which the (possibly split) components * are extracted. * (2) If either @minw < 0 or @minh < 0, noise components are * filtered out, and the returned @naid array is all 1. * Otherwise, some noise components whose dimensions (w,h) * satisfy w >= @minw and h >= @minh are allowed through, but * they are identified in the returned @naid, where they are * labelled by 0 to indicate that they are not to be run * through identification. Retaining the noise components * provides spatial information that can help applications * interpret the results. * (3) In addition to optional filtering of the noise, the * resulting components are put in row-major (2D) order, * and the smaller of overlapping components are removed if * they satisfy conditions of relative size and fractional overlap. * (4) Note that the spliting function uses unscaled templates * and does not bother returning the class results and scores. * Thes are more accurately found later using the scaled templates. */ l_int32 recogSplitIntoCharacters(L_RECOG *recog, PIX *pixs, l_int32 minw, l_int32 minh, BOXA **pboxa, PIXA **ppixa, NUMA **pnaid, l_int32 debug) { l_int32 empty, maxw, bw, ncomp, same, savenoise, scaling; l_int32 i, j, n, n3, xoff, yoff; BOX *box, *box3; BOXA *boxa1, *boxa2, *boxa3, *boxa4, *boxat1, *boxat2, *boxad; BOXAA *baa; NUMA *naid; PIX *pix, *pix1, *pix2; PROCNAME("recogSplitIntoCharacters"); if (!pboxa || !ppixa || !pnaid) return ERROR_INT("&boxa, &pixa and &naid not defined", procName, 1); *pboxa = NULL; *ppixa = NULL; *pnaid = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!recog->train_done) return ERROR_INT("training not finished", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); pixZero(pixs, &empty); if (empty) return 0; /* Small vertical close for consolidation. Don't do a horizontal * closing, because it might join separate characters. */ pix1 = pixMorphSequence(pixs, "c1.3", 0); /* Filter out noise */ pix2 = recogPreSplittingFilter(recog, pix1, MaxAspectRatio, MinFillFactor, MaxPreFillFactor, debug); /* Optionally, save a boxa of noise components, filtered * according to input parameters @minw and @minh */ boxa3 = NULL; savenoise = (minw >= 0 && minh >= 0); if (savenoise) { /* accept some noise comonents */ pixXor(pix1, pix1, pix2); /* leave noise components only in pix1 */ pixZero(pix1, &empty); if (!empty) { boxat1 = pixConnComp(pix1, NULL, 8); boxa3 = boxaSelectBySize(boxat1, minw, minh, L_SELECT_BOTH, L_SELECT_IF_GTE, NULL); boxaDestroy(&boxat1); } } pixDestroy(&pix1); /* Get the 8-connected non-noise components to be split/identified */ boxa1 = pixConnComp(pix2, NULL, 8); pixDestroy(&pix2); ncomp = boxaGetCount(boxa1); if (ncomp == 0) { boxaDestroy(&boxa1); boxaDestroy(&boxa3); L_WARNING("all components removed\n", procName); return 0; } /* Save everything and split the large non-noise components */ boxa2 = boxaCreate(ncomp); maxw = recog->maxwidth_u + 5; scaling = (recog->scalew > 0 || recog->scaleh > 0) ? TRUE : FALSE; for (i = 0; i < ncomp; i++) { box = boxaGetBox(boxa1, i, L_CLONE); boxGetGeometry(box, &xoff, &yoff, &bw, NULL); if (bw <= maxw || scaling) { /* assume it's just one character */ boxaAddBox(boxa2, box, L_INSERT); } else { /* need to try to split the component */ pix = pixClipRectangle(pixs, box, NULL); recogCorrelationBestRow(recog, pix, &boxat1, NULL, NULL, NULL, debug); boxat2 = boxaTransform(boxat1, xoff, yoff, 1.0, 1.0); boxaJoin(boxa2, boxat2, 0, -1); boxaDestroy(&boxat1); boxaDestroy(&boxat2); pixDestroy(&pix); boxDestroy(&box); } } boxaDestroy(&boxa1); /* If the noise boxa was retained, add it back in, so we have * a mixture of non-noise and noise components. */ if (boxa3) boxaJoin(boxa2, boxa3, 0, -1); /* Do a 2D sort on the bounding boxes, and flatten the result to 1D. * For the 2D sort, to add a box to an existing boxa, we require * specified minimum vertical overlaps for the first two passes * of the 2D sort. In pass 1, only components with sufficient * height can start a new boxa. */ baa = boxaSort2d(boxa2, NULL, MinOverlap1, MinOverlap2, MinHeightPass1); boxa4 = boxaaFlattenToBoxa(baa, NULL, L_CLONE); boxaaDestroy(&baa); boxaDestroy(&boxa2); /* Remove smaller components of overlapping pairs. * We only remove the small component if the overlap is * at least half its area and if its area is no more * than 30% of the area of the large component. Because the * components are in a flattened 2D sort, we don't need to * look far ahead in the array to find all overlapping boxes; * 10 boxes is plenty. */ boxad = boxaHandleOverlaps(boxa4, L_COMBINE, 10, 0.5, 0.3, NULL); boxaDestroy(&boxa4); /* If savenoise == true and there are components in boxa3, * use the full set of noise components in boxa3 to identify * the remaining ones in boxad. */ n = boxaGetCount(boxad); naid = numaMakeConstant(1, n); if (savenoise && boxa3) { n3 = boxaGetCount(boxa3); for (i = 0; i < n; i++) { box = boxaGetBox(boxad, i, L_CLONE); for (j = 0; j < n3; j++) { box3 = boxaGetBox(boxa3, j, L_CLONE); boxEqual(box, box3, &same); boxDestroy(&box3); if (same) { numaSetValue(naid, i, 0); /* label noise 0 */ break; } } boxDestroy(&box); } } boxaDestroy(&boxa3); /* Extract and save the image pieces from the input image. */ *ppixa = pixClipRectangles(pixs, boxad); *pboxa = boxad; *pnaid = naid; return 0; } /*! * recogCorrelationBestRow() * * Input: recog (with LUT's pre-computed) * pixs (typically of multiple touching characters, 1 bpp) * &boxa ( bounding boxs of best fit character) * &nascores ( correlation scores) * &naindex ( indices of classes) * &sachar ( array of character strings) * debug (1 for results written to pixadb_split) * Return: 0 if OK, 1 on error * * Notes: * (1) Supervises character matching for (in general) a c.c with * multiple touching characters. Finds the best match greedily. * Rejects small parts that are left over after splitting. * (2) Matching is to the average, and without character scaling. */ l_int32 recogCorrelationBestRow(L_RECOG *recog, PIX *pixs, BOXA **pboxa, NUMA **pnascore, NUMA **pnaindex, SARRAY **psachar, l_int32 debug) { char *charstr; l_int32 index, remove, w, h, bx, bw, bxc, bwc, w1, w2, w3; l_float32 score; BOX *box, *boxc, *boxtrans, *boxl, *boxr, *boxlt, *boxrt; BOXA *boxat; NUMA *nascoret, *naindext, *nasort; PIX *pixb, *pixc, *pixl, *pixr, *pixdb, *pixd; PIXA *pixar, *pixadb; SARRAY *sachart; l_int32 iter; PROCNAME("recogCorrelationBestRow"); if (pnascore) *pnascore = NULL; if (pnaindex) *pnaindex = NULL; if (psachar) *psachar = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (pixGetWidth(pixs) < recog->minwidth_u - 4) return ERROR_INT("pixs too narrow", procName, 1); if (!pboxa) return ERROR_INT("&boxa not defined", procName, 1); *pboxa = NULL; if (!recog->train_done) return ERROR_INT("training not finished", procName, 1); /* Binarize and crop to foreground if necessary */ pixb = recogProcessToIdentify(recog, pixs, 0); /* Initialize the arrays */ boxat = boxaCreate(4); nascoret = numaCreate(4); naindext = numaCreate(4); sachart = sarrayCreate(4); pixadb = (debug) ? pixaCreate(4) : NULL; /* Initialize the images remaining to be processed with the input. * These are stored in pixar, which is used here as a queue, * on which we only put image fragments that are large enough to * contain at least one character. */ pixar = pixaCreate(1); pixGetDimensions(pixb, &w, &h, NULL); box = boxCreate(0, 0, w, h); pixaAddPix(pixar, pixb, L_INSERT); pixaAddBox(pixar, box, L_INSERT); /* Successively split on the best match until nothing is left. * To be safe, we limit the search to 10 characters. */ for (iter = 0; iter < 11; iter++) { if (pixaGetCount(pixar) == 0) break; if (iter == 10) { L_WARNING("more than 10 chars; ending search\n", procName); break; } /* Pop one from the queue */ pixaRemovePixAndSave(pixar, 0, &pixc, &boxc); boxGetGeometry(boxc, &bxc, NULL, &bwc, NULL); /* This is a single component; if noise, remove it */ recogSplittingFilter(recog, pixc, MaxAspectRatio, MinFillFactor, MaxSplitFillFactor, &remove, debug); if (debug) fprintf(stderr, "iter = %d, removed = %d\n", iter, remove); if (remove) { pixDestroy(&pixc); boxDestroy(&boxc); continue; } /* Find the best character match */ if (debug) { recogCorrelationBestChar(recog, pixc, &box, &score, &index, &charstr, &pixdb); pixaAddPix(pixadb, pixdb, L_INSERT); } else { recogCorrelationBestChar(recog, pixc, &box, &score, &index, &charstr, NULL); } /* Find the box in original coordinates, and append * the results to the arrays. */ boxtrans = boxTransform(box, bxc, 0, 1.0, 1.0); boxaAddBox(boxat, boxtrans, L_INSERT); numaAddNumber(nascoret, score); numaAddNumber(naindext, index); sarrayAddString(sachart, charstr, L_INSERT); /* Split the current pixc into three regions and save * each region if it is large enough. */ boxGetGeometry(box, &bx, NULL, &bw, NULL); w1 = bx; w2 = bw; w3 = bwc - bx - bw; if (debug) fprintf(stderr, " w1 = %d, w2 = %d, w3 = %d\n", w1, w2, w3); if (w1 < recog->minwidth_u - 4) { if (debug) L_INFO("discarding width %d on left\n", procName, w1); } else { /* extract and save left region */ boxl = boxCreate(0, 0, bx + 1, h); pixl = pixClipRectangle(pixc, boxl, NULL); boxlt = boxTransform(boxl, bxc, 0, 1.0, 1.0); pixaAddPix(pixar, pixl, L_INSERT); pixaAddBox(pixar, boxlt, L_INSERT); boxDestroy(&boxl); } if (w3 < recog->minwidth_u - 4) { if (debug) L_INFO("discarding width %d on right\n", procName, w3); } else { /* extract and save left region */ boxr = boxCreate(bx + bw - 1, 0, w3 + 1, h); pixr = pixClipRectangle(pixc, boxr, NULL); boxrt = boxTransform(boxr, bxc, 0, 1.0, 1.0); pixaAddPix(pixar, pixr, L_INSERT); pixaAddBox(pixar, boxrt, L_INSERT); boxDestroy(&boxr); } pixDestroy(&pixc); boxDestroy(&box); boxDestroy(&boxc); } pixaDestroy(&pixar); /* Sort the output results by left-to-right in the boxa */ *pboxa = boxaSort(boxat, L_SORT_BY_X, L_SORT_INCREASING, &nasort); if (pnascore) *pnascore = numaSortByIndex(nascoret, nasort); if (pnaindex) *pnaindex = numaSortByIndex(naindext, nasort); if (psachar) *psachar = sarraySortByIndex(sachart, nasort); numaDestroy(&nasort); boxaDestroy(&boxat); numaDestroy(&nascoret); numaDestroy(&naindext); sarrayDestroy(&sachart); /* Final debug output */ if (debug) { pixd = pixaDisplayTiledInRows(pixadb, 32, 2000, 1.0, 0, 15, 2); pixDisplay(pixd, 400, 400); pixaAddPix(recog->pixadb_split, pixd, L_INSERT); pixaDestroy(&pixadb); } return 0; } /*! * recogCorrelationBestChar() * * Input: recog (with LUT's pre-computed) * pixs (can be of multiple touching characters, 1 bpp) * &box ( bounding box of best fit character) * &score ( correlation score) * &index ( index of class) * &charstr ( character string of class) * &pixdb ( debug pix showing input and best fit) * Return: 0 if OK, 1 on error * * Notes: * (1) Basic matching character splitter. Finds the best match among * all templates to some region of the image. This can result * in splitting the image into two parts. This is "image decoding" * without dynamic programming, because we don't use a setwidth * and compute the best matching score for the entire image. * (2) Matching is to the average templates, without character scaling. */ l_int32 recogCorrelationBestChar(L_RECOG *recog, PIX *pixs, BOX **pbox, l_float32 *pscore, l_int32 *pindex, char **pcharstr, PIX **ppixdb) { l_int32 i, n, w1, h1, w2, area2, ycent2, delx, dely; l_int32 bestdelx, bestdely, bestindex; l_float32 score, bestscore; BOX *box; BOXA *boxa; NUMA *nasum, *namoment; PIX *pix1, *pix2; PROCNAME("recogCorrelationBestChar"); if (ppixdb) *ppixdb = NULL; if (pindex) *pindex = 0; if (pcharstr) *pcharstr = NULL; if (!pbox) return ERROR_INT("&box not defined", procName, 1); *pbox = NULL; if (!pscore) return ERROR_INT("&score not defined", procName, 1); *pscore = 0.0; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!recog->train_done) return ERROR_INT("training not finished", procName, 1); /* Binarize and crop to foreground if necessary. Add padding * to both the left and right side; this is compensated for * when reporting the bounding box of the best matched character. */ pix1 = recogProcessToIdentify(recog, pixs, LeftRightPadding); pixGetDimensions(pix1, &w1, &h1, NULL); /* Compute vertical sum and moment arrays */ nasum = pixCountPixelsByColumn(pix1); namoment = pixGetMomentByColumn(pix1, 1); /* Do shifted correlation against all averaged templates. */ n = recog->setsize; boxa = boxaCreate(n); /* location of best fits for each character */ bestscore = 0.0; for (i = 0; i < n; i++) { pix2 = pixaGetPix(recog->pixa_u, i, L_CLONE); w2 = pixGetWidth(pix2); /* Note that the slightly expended w1 is typically larger * than w2 (the template). */ if (w1 >= w2) { numaGetIValue(recog->nasum_u, i, &area2); ptaGetIPt(recog->pta_u, i, NULL, &ycent2); pixCorrelationBestShift(pix1, pix2, nasum, namoment, area2, ycent2, recog->maxyshift, recog->sumtab, &delx, &dely, &score, 1); if (ppixdb) { fprintf(stderr, "Best match template %d: (x,y) = (%d,%d), score = %5.3f\n", i, delx, dely, score); } /* Compensate for padding */ box = boxCreate(delx - LeftRightPadding, 0, w2, h1); if (score > bestscore) { bestscore = score; bestdelx = delx - LeftRightPadding; bestdely = dely; bestindex = i; } } else { box = boxCreate(0, 0, 1, 1); /* placeholder */ if (ppixdb) fprintf(stderr, "Component too thin: w1 = %d, w2 = %d\n", w1, w2); } boxaAddBox(boxa, box, L_INSERT); pixDestroy(&pix2); } *pscore = bestscore; *pbox = boxaGetBox(boxa, bestindex, L_COPY); if (pindex) *pindex = bestindex; if (pcharstr) recogGetClassString(recog, bestindex, pcharstr); if (ppixdb) { L_INFO("Best match: class %d; shifts (%d, %d)\n", procName, bestindex, bestdelx, bestdely); pix2 = pixaGetPix(recog->pixa_u, bestindex, L_CLONE); *ppixdb = recogShowMatch(recog, pix1, pix2, NULL, -1, 0.0); pixDestroy(&pix2); } pixDestroy(&pix1); boxaDestroy(&boxa); numaDestroy(&nasum); numaDestroy(&namoment); return 0; } /*! * pixCorrelationBestShift() * * Input: pix1 (1 bpp, the unknown image; typically larger) * pix2 (1 bpp, the matching template image)) * nasum1 (vertical column pixel sums for pix1) * namoment1 (vertical column first moment of pixels for pix1) * area2 (number of on pixels in pix2) * ycent2 (y component of centroid of pix2) * maxyshift (max y shift of pix2 around the location where * the centroids of pix2 and a windowed part of pix1 * are vertically aligned) * tab8 ( sum tab for ON pixels in byte; can be NULL) * &delx ( best x shift of pix2 relative to pix1 * &dely ( best y shift of pix2 relative to pix1 * &score ( maximum score found; can be NULL) * debugflag (<= 0 to skip; positive to generate output. * The integer is used to label the debug image.) * Return: 0 if OK, 1 on error * * Notes: * (1) This maximizes the correlation score between two 1 bpp images, * one of which is typically wider. In a typical example, * pix1 is a bitmap of 2 or more touching characters and pix2 is * a single character template. This finds the location of pix2 * that gives the largest correlation. * (2) The windowed area of fg pixels and windowed first moment * in the y direction are computed from the input sum and moment * column arrays, @nasum1 and @namoment1 * (3) This is a brute force operation. We compute the correlation * at every x shift for which pix2 fits entirely within pix1, * and where the centroid of pix2 is aligned, within +-maxyshift, * with the centroid of a window of pix1 of the same width. * The correlation is taken over the full height of pix1. * This can be made more efficient. */ static l_int32 pixCorrelationBestShift(PIX *pix1, PIX *pix2, NUMA *nasum1, NUMA *namoment1, l_int32 area2, l_int32 ycent2, l_int32 maxyshift, l_int32 *tab8, l_int32 *pdelx, l_int32 *pdely, l_float32 *pscore, l_int32 debugflag) { l_int32 w1, w2, h1, h2, i, j, nx, shifty, delx, dely; l_int32 sum, moment, count; l_int32 *tab, *area1, *arraysum, *arraymoment; l_float32 maxscore, score; l_float32 *ycent1; FPIX *fpix; PIX *pixt, *pixt1, *pixt2; PROCNAME("pixCorrelationBestShift"); if (pdelx) *pdelx = 0; if (pdely) *pdely = 0; if (pscore) *pscore = 0.0; if (!pix1 || pixGetDepth(pix1) != 1) return ERROR_INT("pix1 not defined or not 1 bpp", procName, 1); if (!pix2 || pixGetDepth(pix2) != 1) return ERROR_INT("pix2 not defined or not 1 bpp", procName, 1); if (!nasum1 || !namoment1) return ERROR_INT("nasum1 and namoment1 not both defined", procName, 1); if (area2 <= 0 || ycent2 <= 0) return ERROR_INT("area2 and ycent2 must be > 0", procName, 1); /* If pix1 (the unknown image) is narrower than pix2, * don't bother to try the match. pix1 is already padded with * 2 pixels on each side. */ pixGetDimensions(pix1, &w1, &h1, NULL); pixGetDimensions(pix2, &w2, &h2, NULL); if (w1 < w2) { if (debugflag > 0) { L_INFO("skipping match with w1 = %d and w2 = %d\n", procName, w1, w2); } return 0; } nx = w1 - w2 + 1; if (debugflag > 0) fpix = fpixCreate(nx, 2 * maxyshift + 1); if (!tab8) tab = makePixelSumTab8(); else tab = tab8; /* Set up the arrays for area1 and ycent1. We have to do this * for each template (pix2) because the window width is w2. */ area1 = (l_int32 *)CALLOC(nx, sizeof(l_int32)); ycent1 = (l_float32 *)CALLOC(nx, sizeof(l_int32)); arraysum = numaGetIArray(nasum1); arraymoment = numaGetIArray(namoment1); for (i = 0, sum = 0, moment = 0; i < w2; i++) { sum += arraysum[i]; moment += arraymoment[i]; } for (i = 0; i < nx - 1; i++) { area1[i] = sum; ycent1[i] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; sum += arraysum[w2 + i] - arraysum[i]; moment += arraymoment[w2 + i] - arraymoment[i]; } area1[nx - 1] = sum; ycent1[nx - 1] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; /* Find the best match location for pix2. At each location, * to insure that pixels are ON only within the intersection of * pix and the shifted pix2: * (1) Start with pixt cleared and equal in size to pix1. * (2) Blit the shifted pix2 onto pixt. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pixt. */ pixt = pixCreate(w2, h1, 1); maxscore = 0; delx = 0; dely = 0; /* amount to shift pix2 relative to pix1 to get alignment */ for (i = 0; i < nx; i++) { shifty = (l_int32)(ycent1[i] - ycent2 + 0.5); for (j = -maxyshift; j <= maxyshift; j++) { pixClearAll(pixt); pixRasterop(pixt, 0, shifty + j, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, i, 0); pixCountPixels(pixt, &count, tab); score = (l_float32)count * (l_float32)count / ((l_float32)area1[i] * (l_float32)area2); if (score > maxscore) { maxscore = score; delx = i; dely = shifty + j; } if (debugflag > 0) fpixSetPixel(fpix, i, maxyshift + j, 1000.0 * score); } } if (debugflag > 0) { char buf[128]; pixt1 = fpixDisplayMaxDynamicRange(fpix); pixt2 = pixExpandReplicate(pixt1, 5); snprintf(buf, sizeof(buf), "/tmp/junkbs_%d.png", debugflag); pixWrite(buf, pixt2, IFF_PNG); pixDestroy(&pixt1); pixDestroy(&pixt2); fpixDestroy(&fpix); } if (pdelx) *pdelx = delx; if (pdely) *pdely = dely; if (pscore) *pscore = maxscore; if (!tab8) FREE(tab); FREE(area1); FREE(ycent1); FREE(arraysum); FREE(arraymoment); pixDestroy(&pixt); return 0; } /*------------------------------------------------------------------------* * Low-level identification * *------------------------------------------------------------------------*/ /*! * recogaIdentifyPixa() * * Input: recoga * pixa (of 1 bpp images to match) * naid ( indices of components to identify; can be null) * &pixdb ( pix showing inputs and best fits) * Return: 0 if OK, 1 on error * * Notes: * (1) See recogIdentifyPixa(). This does the same operation * for each recog, returning the arrays of results (scores, * class index and character string) for the best correlation match. */ l_int32 recogaIdentifyPixa(L_RECOGA *recoga, PIXA *pixa, NUMA *naid, PIX **ppixdb) { l_int32 done, i, n, nrec; PIX *pix1; PIXA *pixadb; L_RECOG *recog; PROCNAME("recogaIdentifyPixa"); if (ppixdb) *ppixdb = NULL; if (!recoga) return ERROR_INT("recoga not defined", procName, 2); if ((nrec = recogaGetCount(recoga)) == 0) return ERROR_INT("recoga empty", procName, 2); recogaTrainingDone(recoga, &done); if (!done) return ERROR_INT("training not finished", procName, 1); if (!pixa || (pixaGetCount(pixa) == 0)) return ERROR_INT("pixa not defined", procName, 1); if ((n = pixaGetCount(pixa)) == 0) return ERROR_INT("pixa is empty", procName, 1); /* Run each recognizer on the set of images. This writes * the text string into each pix of the pixa_id copy. */ rchaDestroy(&recoga->rcha); recoga->rcha = rchaCreate(); pixadb = (ppixdb) ? pixaCreate(n) : NULL; for (i = 0; i < nrec; i++) { recog = recogaGetRecog(recoga, i); if (!ppixdb) { recogIdentifyPixa(recog, pixa, naid, NULL); } else { recogIdentifyPixa(recog, pixa, naid, &pix1); pixaAddPix(pixadb, pix1, L_INSERT); } } /* Accumulate the best results in the cha of the recoga. This * also writes the text string into each pix of the input pixa. */ recogaSaveBestRcha(recoga, pixa); /* Package the images for debug */ if (pixadb) *ppixdb = pixaDisplayLinearly(pixadb, L_VERT, 1.0, 0, 20, 2, NULL); pixaDestroy(&pixadb); return 0; } /*! * recogIdentifyPixa() * * Input: recog * pixa (of 1 bpp images to match) * naid ( indices of components to identify; can be null) * &pixdb ( pix showing inputs and best fits) * Return: 0 if OK, 1 on error * * Notes: * (1) See recogIdentifyPix(). This does the same operation * for each pix in a pixa, and optionally returns the arrays * of results (scores, class index and character string) * for the best correlation match. */ l_int32 recogIdentifyPixa(L_RECOG *recog, PIXA *pixa, NUMA *naid, PIX **ppixdb) { char *text; l_int32 i, n, doit, index, depth; l_float32 score; NUMA *naidt; PIX *pix1, *pix2, *pix3; PIXA *pixa1; L_RCH *rch; PROCNAME("recogIdentifyPixa"); if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); /* Set up the components to run through the recognizer */ n = pixaGetCount(pixa); if (naid) naidt = numaClone(naid); else naidt = numaMakeConstant(1, n); /* Run the recognizer on the set of images. This writes * the text string into each pix in pixa. If this is called * multiple times for different recognizers, the text string * will be overwritten, but it will be finalized with the correct * string from the cha in the recoga, using recogaSaveBestCha(). */ rchaDestroy(&recog->rcha); recog->rcha = rchaCreate(); pixa1 = (ppixdb) ? pixaCreate(n) : NULL; depth = 1; for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa, i, L_CLONE); numaGetIValue(naidt, i, &doit); if (!doit) recogSkipIdentify(recog); else if (!ppixdb) recogIdentifyPix(recog, pix1, NULL); else recogIdentifyPix(recog, pix1, &pix2); if ((rch = recog->rch) == NULL) { L_ERROR("rch not found for char %d\n", procName, i); continue; } rchExtract(rch, NULL, NULL, &text, NULL, NULL, NULL, NULL); pixSetText(pix1, text); FREE(text); if (ppixdb && doit) { rchExtract(rch, &index, &score, NULL, NULL, NULL, NULL, NULL); pix3 = recogShowMatch(recog, pix2, NULL, NULL, index, score); if (i == 0) depth = pixGetDepth(pix3); pixaAddPix(pixa1, pix3, L_INSERT); pixDestroy(&pix2); } transferRchToRcha(rch, recog->rcha); pixDestroy(&pix1); } numaDestroy(&naidt); /* Package the images for debug */ if (ppixdb) { *ppixdb = pixaDisplayTiledInRows(pixa1, depth, 2500, 1.0, 0, 20, 1); pixaDestroy(&pixa1); } return 0; } /*! * recogIdentifyPix() * * Input: recog (with LUT's pre-computed) * pixs (of a single character, 1 bpp) * &pixdb ( debug pix showing input and best fit) * Return: 0 if OK, 1 on error * * Notes: * (1) Basic recognition function for a single character. * (2) If L_USE_AVERAGE, the matching is only to the averaged bitmaps, * and the index of the sample is meaningless (0 is returned * if requested). * (3) The score is related to the confidence (probability of correct * identification), in that a higher score is correlated with * a higher probability. However, the actual relation between * the correlation (score) and the probability is not known; * we call this a "score" because "confidence" can be misinterpreted * as an actual probability. */ l_int32 recogIdentifyPix(L_RECOG *recog, PIX *pixs, PIX **ppixdb) { char *text; l_int32 i, j, n, bestindex, bestsample, area1, area2; l_int32 shiftx, shifty, bestdelx, bestdely, bestwidth, maxyshift; l_float32 x1, y1, x2, y2, delx, dely, score, maxscore; NUMA *numa; PIX *pix0, *pix1, *pix2; PIXA *pixa; PTA *pta; PROCNAME("recogIdentifyPix"); if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); /* Do the averaging if not yet done. This will also * call recogFinishTraining(), if necessary. */ if (!recog->ave_done) recogAverageSamples(recog, 0); /* Binarize and crop to foreground if necessary */ pix0 = recogProcessToIdentify(recog, pixs, 0); /* Do correlation at all positions within +-maxyshift of * the nominal centroid alignment. */ pix1 = recogScaleCharacter(recog, pix0); pixCountPixels(pix1, &area1, recog->sumtab); pixCentroid(pix1, recog->centtab, recog->sumtab, &x1, &y1); bestindex = bestsample = bestdelx = bestdely = bestwidth = 0; maxscore = 0.0; maxyshift = recog->maxyshift; if (recog->templ_type == L_USE_AVERAGE) { for (i = 0; i < recog->setsize; i++) { numaGetIValue(recog->nasum, i, &area2); if (area2 == 0) continue; /* no template available */ pix2 = pixaGetPix(recog->pixa, i, L_CLONE); ptaGetPt(recog->pta, i, &x2, &y2); delx = x1 - x2; dely = y1 - y2; for (shifty = -maxyshift; shifty <= maxyshift; shifty++) { for (shiftx = -maxyshift; shiftx <= maxyshift; shiftx++) { pixCorrelationScoreSimple(pix1, pix2, area1, area2, delx + shiftx, dely + shifty, 5, 5, recog->sumtab, &score); if (score > maxscore) { bestindex = i; bestdelx = delx + shiftx; bestdely = dely + shifty; maxscore = score; } } } pixDestroy(&pix2); } } else { /* use all the samples */ for (i = 0; i < recog->setsize; i++) { pixa = pixaaGetPixa(recog->pixaa, i, L_CLONE); n = pixaGetCount(pixa); if (n == 0) { pixaDestroy(&pixa); continue; } numa = numaaGetNuma(recog->naasum, i, L_CLONE); pta = ptaaGetPta(recog->ptaa, i, L_CLONE); for (j = 0; j < n; j++) { pix2 = pixaGetPix(pixa, j, L_CLONE); numaGetIValue(numa, j, &area2); ptaGetPt(pta, j, &x2, &y2); delx = x1 - x2; dely = y1 - y2; for (shifty = -maxyshift; shifty <= maxyshift; shifty++) { for (shiftx = -maxyshift; shiftx <= maxyshift; shiftx++) { pixCorrelationScoreSimple(pix1, pix2, area1, area2, delx + shiftx, dely + shifty, 5, 5, recog->sumtab, &score); if (score > maxscore) { bestindex = i; bestsample = j; bestdelx = delx + shiftx; bestdely = dely + shifty; maxscore = score; bestwidth = pixGetWidth(pix2); } } } pixDestroy(&pix2); } pixaDestroy(&pixa); numaDestroy(&numa); ptaDestroy(&pta); } } /* Package up the results */ recogGetClassString(recog, bestindex, &text); rchDestroy(&recog->rch); recog->rch = rchCreate(bestindex, maxscore, text, bestsample, bestdelx, bestdely, bestwidth); if (ppixdb) { if (recog->templ_type == L_USE_AVERAGE) { L_INFO("Best match: class %d; shifts (%d, %d)\n", procName, bestindex, bestdelx, bestdely); pix2 = pixaGetPix(recog->pixa, bestindex, L_CLONE); } else { /* L_USE_ALL */ L_INFO("Best match: sample %d in class %d\n", procName, bestsample, bestindex); if (maxyshift > 0) { L_INFO(" Best shift: (%d, %d)\n", procName, bestdelx, bestdely); } pix2 = pixaaGetPix(recog->pixaa, bestindex, bestsample, L_CLONE); } *ppixdb = recogShowMatch(recog, pix1, pix2, NULL, -1, 0.0); pixDestroy(&pix2); } pixDestroy(&pix0); pixDestroy(&pix1); return 0; } /*! * recogSkipIdentify() * * Input: recog * Return: 0 if OK, 1 on error * * Notes: * (1) This just writes a "dummy" result with 0 score and empty * string id into the rch. */ l_int32 recogSkipIdentify(L_RECOG *recog) { PROCNAME("recogSkipIdentify"); if (!recog) return ERROR_INT("recog not defined", procName, 1); /* Package up placeholder results */ rchDestroy(&recog->rch); recog->rch = rchCreate(0, 0.0, stringNew(""), 0, 0, 0, 0); return 0; } /*------------------------------------------------------------------------* * Operations for handling identification results * *------------------------------------------------------------------------*/ /*! * rchaCreate() * * Return: 0 if OK, 1 on error * * Notes: * (1) Be sure to destroy any existing rcha before assigning this. */ static L_RCHA * rchaCreate() { L_RCHA *rcha; rcha = (L_RCHA *)CALLOC(1, sizeof(L_RCHA)); rcha->naindex = numaCreate(0); rcha->nascore = numaCreate(0); rcha->satext = sarrayCreate(0); rcha->nasample = numaCreate(0); rcha->naxloc = numaCreate(0); rcha->nayloc = numaCreate(0); rcha->nawidth = numaCreate(0); return rcha; } /*! * rchaDestroy() * * Input: &rcha * Return: void */ void rchaDestroy(L_RCHA **prcha) { L_RCHA *rcha; PROCNAME("rchaDestroy"); if (prcha == NULL) { L_WARNING("&rcha is null!\n", procName); return; } if ((rcha = *prcha) == NULL) return; numaDestroy(&rcha->naindex); numaDestroy(&rcha->nascore); sarrayDestroy(&rcha->satext); numaDestroy(&rcha->nasample); numaDestroy(&rcha->naxloc); numaDestroy(&rcha->nayloc); numaDestroy(&rcha->nawidth); FREE(rcha); *prcha = NULL; return; } /*! * rchCreate() * * Input: index (index of best template) * score (correlation score of best template) * text (character string of best template) * sample (index of best sample; -1 if averages are used) * xloc (x-location of template: delx + shiftx) * yloc (y-location of template: dely + shifty) * width (width of best template) * Return: 0 if OK, 1 on error * * Notes: * (1) Be sure to destroy any existing rch before assigning this. */ static L_RCH * rchCreate(l_int32 index, l_float32 score, char *text, l_int32 sample, l_int32 xloc, l_int32 yloc, l_int32 width) { L_RCH *rch; rch = (L_RCH *)CALLOC(1, sizeof(L_RCH)); rch->index = index; rch->score = score; rch->text = text; rch->sample = sample; rch->xloc = xloc; rch->yloc = yloc; rch->width = width; return rch; } /*! * rchDestroy() * * Input: &rch * Return: void */ void rchDestroy(L_RCH **prch) { L_RCH *rch; PROCNAME("rchDestroy"); if (prch == NULL) { L_WARNING("&rch is null!\n", procName); return; } if ((rch = *prch) == NULL) return; FREE(rch->text); FREE(rch); *prch = NULL; return; } /*! * rchaExtract() * * Input: rcha * &naindex ( indices of best templates) * &nascore ( correl scores of best templates) * &satext ( character strings of best templates) * &nasample ( indices of best samples) * &naxloc ( x-locations of templates) * &nayloc ( y-locations of templates) * &nawidth ( widths of best templates) * Return: 0 if OK, 1 on error * * Notes: * (1) This returns clones of the number and string arrays. They must * be destroyed by the caller. */ l_int32 rchaExtract(L_RCHA *rcha, NUMA **pnaindex, NUMA **pnascore, SARRAY **psatext, NUMA **pnasample, NUMA **pnaxloc, NUMA **pnayloc, NUMA **pnawidth) { PROCNAME("rchaExtract"); if (pnaindex) *pnaindex = NULL; if (pnascore) *pnascore = NULL; if (psatext) *psatext = NULL; if (pnasample) *pnasample = NULL; if (pnaxloc) *pnaxloc = NULL; if (pnayloc) *pnayloc = NULL; if (pnawidth) *pnawidth = NULL; if (!rcha) return ERROR_INT("rcha not defined", procName, 1); if (pnaindex) *pnaindex = numaClone(rcha->naindex); if (pnascore) *pnascore = numaClone(rcha->nascore); if (psatext) *psatext = sarrayClone(rcha->satext); if (pnasample) *pnasample = numaClone(rcha->nasample); if (pnaxloc) *pnaxloc = numaClone(rcha->naxloc); if (pnayloc) *pnayloc = numaClone(rcha->nayloc); if (pnawidth) *pnawidth = numaClone(rcha->nawidth); return 0; } /*! * rchExtract() * * Input: rch * &index ( index of best template) * &score ( correlation score of best template) * &text ( character string of best template) * &sample ( index of best sample) * &xloc ( x-location of template) * &yloc ( y-location of template) * &width ( width of best template) * Return: 0 if OK, 1 on error */ l_int32 rchExtract(L_RCH *rch, l_int32 *pindex, l_float32 *pscore, char **ptext, l_int32 *psample, l_int32 *pxloc, l_int32 *pyloc, l_int32 *pwidth) { PROCNAME("rchExtract"); if (pindex) *pindex = 0; if (pscore) *pscore = 0.0; if (ptext) *ptext = NULL; if (psample) *psample = 0; if (pxloc) *pxloc = 0; if (pyloc) *pyloc = 0; if (pwidth) *pwidth = 0; if (!rch) return ERROR_INT("rch not defined", procName, 1); if (pindex) *pindex = rch->index; if (pscore) *pscore = rch->score; if (ptext) *ptext = stringNew(rch->text); /* new string: owned by caller */ if (psample) *psample = rch->sample; if (pxloc) *pxloc = rch->xloc; if (pyloc) *pyloc = rch->yloc; if (pwidth) *pwidth = rch->width; return 0; } /*! * transferRchToRcha() * * Input: rch (source of data) * rcha (append to arrays in this destination) * Return: 0 if OK, 1 on error * * Notes: * (1) This is used to transfer the results of a single character * identification to an rcha array for the array of characters. */ static l_int32 transferRchToRcha(L_RCH *rch, L_RCHA *rcha) { PROCNAME("transferRchToRcha"); if (!rch) return ERROR_INT("rch not defined", procName, 1); if (!rcha) return ERROR_INT("rcha not defined", procName, 1); numaAddNumber(rcha->naindex, rch->index); numaAddNumber(rcha->nascore, rch->score); sarrayAddString(rcha->satext, rch->text, L_COPY); numaAddNumber(rcha->nasample, rch->sample); numaAddNumber(rcha->naxloc, rch->xloc); numaAddNumber(rcha->nayloc, rch->yloc); numaAddNumber(rcha->nawidth, rch->width); return 0; } /*! * recogaSaveBestRcha() * * Input: recoga * pixa (with all components having been identified) * Return: 0 if OK, 1 on error * * Notes: * (1) Finds the best score among the recognizers for each character, * and puts the rch data into a rcha in the recoga. This is * run after all recognizers have been applied to the pixa. * (2) This also writes the best text id for each pix into its text field. */ static l_int32 recogaSaveBestRcha(L_RECOGA *recoga, PIXA *pixa) { char *text; l_int32 i, j, npix, nrec, jmax; l_float32 score, maxscore; L_RECOG *recog; PIX *pix; L_RCHA *rcha; SARRAY *satext; PROCNAME("recogaSaveBestRcha"); if (!recoga) return ERROR_INT("recoga not defined", procName, 1); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); /* Make a clean rcha to accept the results */ rchaDestroy(&recoga->rcha); recoga->rcha = rchaCreate(); npix = pixaGetCount(pixa); nrec = recogaGetCount(recoga); for (i = 0; i < npix; i++) { /* Find the recog in the recoga with the best score */ maxscore = 0.0; jmax = 0; for (j = 0; j < nrec; j++) { if ((recog = recogaGetRecog(recoga, j)) == NULL) { L_ERROR("recog %d not found\n", procName, j); continue; } if ((rcha = recog->rcha) == NULL) { L_ERROR("rcha not found for recog %d\n", procName, j); continue; } numaGetFValue(rcha->nascore, i, &score); if (score > maxscore) { maxscore = score; jmax = j; } } recog = recogaGetRecog(recoga, jmax); /* Transfer the data for this char to the recoga */ recogaTransferRch(recoga, recog, i); } /* Write the best text string for each pix into the pixa */ if ((rcha = recoga->rcha) == NULL) return ERROR_INT("rcha not found!", procName, 1); rchaExtract(rcha, NULL, NULL, &satext, NULL, NULL, NULL, NULL); for (i = 0; i < npix; i++) { pix = pixaGetPix(pixa, i, L_CLONE); text = sarrayGetString(satext, i, L_NOCOPY); pixSetText(pix, text); pixDestroy(&pix); } sarrayDestroy(&satext); /* it's a clone */ return 0; } /*! * recogaTransferRch() * * Input: recoga (destination, with rcha defined) * recog (source, with best scoring char in its rcha) * index (index of component in the original pixa) * Return: 0 if OK, 1 on error * * Notes: * (1) This is called by recogaGetBestRcha() to transfer the results * of a single character identification in a selected recog to the * rcha array in the recoga, which holds the best scoring characters. */ static l_int32 recogaTransferRch(L_RECOGA *recoga, L_RECOG *recog, l_int32 index) { char *str; l_int32 ival; l_float32 fval; L_RCHA *rchas, *rchad; PROCNAME("recogaTransferRch"); if (!recoga) return ERROR_INT("recoga not defined", procName, 1); if (!recog) return ERROR_INT("recog not defined", procName, 1); rchas = recog->rcha; rchad = recoga->rcha; numaGetIValue(rchas->naindex, index, &ival); numaAddNumber(rchad->naindex, ival); numaGetFValue(rchas->nascore, index, &fval); numaAddNumber(rchad->nascore, fval); str = sarrayGetString(rchas->satext, index, L_COPY); sarrayAddString(rchad->satext, str, L_INSERT); numaGetIValue(rchas->nasample, index, &ival); numaAddNumber(rchad->nasample, ival); numaGetIValue(rchas->naxloc, index, &ival); numaAddNumber(rchad->naxloc, ival); numaGetIValue(rchas->nayloc, index, &ival); numaAddNumber(rchad->nayloc, ival); numaGetIValue(rchas->nawidth, index, &ival); numaAddNumber(rchad->nawidth, ival); return 0; } /*------------------------------------------------------------------------* * Preprocessing and filtering * *------------------------------------------------------------------------*/ /*! * recogProcessToIdentify() * * Input: recog (with LUT's pre-computed) * pixs (typ. single character, possibly d > 1 and uncropped) * pad (extra pixels added to left and right sides) * Return: pixd (1 bpp, clipped to foreground), or null on error. * * Notes: * (1) This is a lightweight operation to insure that the input * image is 1 bpp, properly cropped, and padded on each side. * If bpp > 1, the image is thresholded. */ PIX * recogProcessToIdentify(L_RECOG *recog, PIX *pixs, l_int32 pad) { l_int32 canclip; PIX *pix1, *pix2, *pixd; PROCNAME("recogProcessToIdentify"); if (!recog) return (PIX *)ERROR_PTR("recog not defined", procName, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) > 1) pix1 = pixThresholdToBinary(pixs, recog->threshold); else pix1 = pixClone(pixs); pixTestClipToForeground(pix1, &canclip); if (canclip) pixClipToForeground(pix1, &pix2, NULL); else pix2 = pixClone(pix1); pixd = pixAddBorderGeneral(pix2, pad, pad, 0, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*! * recogPreSplittingFilter() * * Input: recog * pixs (1 bpp, single connected component) * maxasp (maximum asperity ratio (width/height) to be retained) * minaf (minimum area fraction (|fg|/(w*h)) to be retained) * maxaf (maximum area fraction (|fg|/(w*h)) to be retained) * debug (1 to output indicator arrays) * Return: pixd (with filtered components removed) or null on error */ PIX * recogPreSplittingFilter(L_RECOG *recog, PIX *pixs, l_float32 maxasp, l_float32 minaf, l_float32 maxaf, l_int32 debug) { l_int32 scaling, minsplitw, minsplith, maxsplith; BOXA *boxas; NUMA *naw, *nah, *na1, *na1c, *na2, *na3, *na4, *na5, *na6, *na7, *na8, *na9; PIX *pixd; PIXA *pixas; PROCNAME("recogPreSplittingFilter"); if (!recog) return (PIX *)ERROR_PTR("recog not defined", procName, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); /* If there is scaling, do not remove components based on the * values of min_splitw, min_splith and max_splith. */ scaling = (recog->scalew > 0 || recog->scaleh > 0) ? TRUE : FALSE; minsplitw = (scaling) ? 1 : recog->min_splitw - 3; minsplith = (scaling) ? 1 : recog->min_splith - 3; maxsplith = (scaling) ? 200 : recog->max_splith; /* Generate an indicator array of connected components to remove: * small stuff * tall stuff * components with large width/height ratio * components with small area fill fraction * components with large area fill fraction and w/h > 0.7 */ boxas = pixConnComp(pixs, &pixas, 8); pixaFindDimensions(pixas, &naw, &nah); na1 = numaMakeThresholdIndicator(naw, minsplitw, L_SELECT_IF_LT); na1c = numaCopy(na1); na2 = numaMakeThresholdIndicator(nah, minsplith, L_SELECT_IF_LT); na3 = numaMakeThresholdIndicator(nah, maxsplith, L_SELECT_IF_GT); na4 = pixaFindWidthHeightRatio(pixas); na5 = numaMakeThresholdIndicator(na4, maxasp, L_SELECT_IF_GT); na6 = pixaFindAreaFraction(pixas); na7 = numaMakeThresholdIndicator(na6, minaf, L_SELECT_IF_LT); na8 = numaMakeThresholdIndicator(na6, maxaf, L_SELECT_IF_GT); na9 = numaMakeThresholdIndicator(na4, 0.7, L_SELECT_IF_GT); numaLogicalOp(na1, na1, na2, L_UNION); numaLogicalOp(na1, na1, na3, L_UNION); numaLogicalOp(na1, na1, na5, L_UNION); numaLogicalOp(na1, na1, na7, L_UNION); numaLogicalOp(na8, na8, na9, L_INTERSECTION); /* require both */ numaLogicalOp(na1, na1, na8, L_UNION); pixd = pixCopy(NULL, pixs); pixRemoveWithIndicator(pixd, pixas, na1); if (debug) l_showIndicatorSplitValues(na1c, na2, na3, na5, na7, na8, na1); numaDestroy(&naw); numaDestroy(&nah); numaDestroy(&na1); numaDestroy(&na1c); numaDestroy(&na2); numaDestroy(&na3); numaDestroy(&na4); numaDestroy(&na5); numaDestroy(&na6); numaDestroy(&na7); numaDestroy(&na8); numaDestroy(&na9); boxaDestroy(&boxas); pixaDestroy(&pixas); return pixd; } /*! * recogSplittingFilter() * * Input: recog * pixs (1 bpp, single connected component) * maxasp (maximum asperity ratio (width/height) to be retained) * minaf (minimum area fraction (|fg|/(w*h)) to be retained) * maxaf (maximum area fraction (|fg|/(w*h)) to be retained) * &remove ( 0 to save, 1 to remove) * debug (1 to output indicator arrays) * Return: 0 if OK, 1 on error * * Notes: * (1) We don't want to eliminate sans serif characters like "1" or "l", * so we use the filter condition requiring both a large area fill * and a w/h ratio > 1.0. */ l_int32 recogSplittingFilter(L_RECOG *recog, PIX *pixs, l_float32 maxasp, l_float32 minaf, l_float32 maxaf, l_int32 *premove, l_int32 debug) { l_int32 w, h; l_float32 aspratio, fract; PROCNAME("recogSplittingFilter"); if (!premove) return ERROR_INT("&remove not defined", procName, 1); *premove = 0; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Remove from further consideration: * small stuff * components with large width/height ratio * components with small area fill fraction * components with large area fill fraction and w/h > 1.0 */ pixGetDimensions(pixs, &w, &h, NULL); if (w < recog->min_splitw) { if (debug) L_INFO("w = %d < %d\n", procName, w, recog->min_splitw); *premove = 1; return 0; } if (h < recog->min_splith) { if (debug) L_INFO("h = %d < %d\n", procName, h, recog->min_splith); *premove = 1; return 0; } aspratio = (l_float32)w / (l_float32)h; if (aspratio > maxasp) { if (debug) L_INFO("w/h = %5.3f too large\n", procName, aspratio); *premove = 1; return 0; } pixFindAreaFraction(pixs, recog->sumtab, &fract); if (fract < minaf) { if (debug) L_INFO("area fill fract %5.3f < %5.3f\n", procName, fract, minaf); *premove = 1; return 0; } if (fract > maxaf && aspratio > 1.0) { if (debug) L_INFO("area fill = %5.3f; aspect ratio = %5.3f\n", procName, fract, aspratio); *premove = 1; return 0; } return 0; } /*------------------------------------------------------------------------* * Postprocessing * *------------------------------------------------------------------------*/ /*! * recogaExtractNumbers() * * Input: recog * boxas (location of components) * scorethresh (min score for which we accept a component) * spacethresh (max horizontal distance allowed between digits, * use -1 for default) * &baa ( bounding boxes of identified numbers) * &naa ( scores of identified digits) * Return: sa (of identified numbers), or null on error * * Notes: * (1) Each string in the returned sa contains a sequence of ascii * digits in a number. * (2) The horizontal distance between boxes (limited by @spacethresh) * is the negative of the horizontal overlap. * (3) We allow two digits to be combined if these conditions apply: * (a) the first is to the left of the second * (b) the second has a horizontal separation less than @spacethresh * (c) the vertical overlap >= 0 (vertical separation < 0) * (d) both have a score that exceeds @scorethresh * (4) Each numa in the optionally returned naa contains the digit * scores of a number. Each boxa in the optionally returned baa * contains the bounding boxes of the digits in the number. * (5) Components with a score less than @scorethresh, which may * be hyphens or other small characters, will signal the * end of the current sequence of digits in the number. */ SARRAY * recogaExtractNumbers(L_RECOGA *recoga, BOXA *boxas, l_float32 scorethresh, l_int32 spacethresh, BOXAA **pbaa, NUMAA **pnaa) { char *str, *text; l_int32 i, n, x1, x2, h_sep, v_sep; l_float32 score; BOX *box, *prebox; BOXA *ba; BOXAA *baa; NUMA *nascore, *na; NUMAA *naa; L_RECOG *recog; SARRAY *satext, *sa, *saout; PROCNAME("recogaExtractNumbers"); if (pbaa) *pbaa = NULL; if (pnaa) *pnaa = NULL; if (!recoga || !recoga->rcha) return (SARRAY *)ERROR_PTR("recoga and rcha not both defined", procName, NULL); if (!boxas) return (SARRAY *)ERROR_PTR("boxas not defined", procName, NULL); if (spacethresh < 0) { if ((recog = recogaGetRecog(recoga, 0)) == NULL) return (SARRAY *)ERROR_PTR("recog not found", procName, NULL); spacethresh = L_MAX(recog->maxwidth_u, 20); } rchaExtract(recoga->rcha, NULL, &nascore, &satext, NULL, NULL, NULL, NULL); if (!nascore || !satext) { return (SARRAY *)ERROR_PTR("nascore and satext not both returned", procName, NULL); } saout = sarrayCreate(0); naa = numaaCreate(0); baa = boxaaCreate(0); prebox = NULL; n = numaGetCount(nascore); for (i = 0; i < n; i++) { numaGetFValue(nascore, i, &score); text = sarrayGetString(satext, i, L_NOCOPY); if (prebox == NULL) { /* no current run */ if (score < scorethresh) { continue; } else { /* start a number run */ sa = sarrayCreate(0); ba = boxaCreate(0); na = numaCreate(0); sarrayAddString(sa, text, L_COPY); prebox = boxaGetBox(boxas, i, L_CLONE); boxaAddBox(ba, prebox, L_COPY); numaAddNumber(na, score); } } else { /* in a current number run */ box = boxaGetBox(boxas, i, L_CLONE); boxGetGeometry(prebox, &x1, NULL, NULL, NULL); boxGetGeometry(box, &x2, NULL, NULL, NULL); boxSeparationDistance(box, prebox, &h_sep, &v_sep); boxDestroy(&prebox); if (x1 < x2 && h_sep <= spacethresh && v_sep < 0 && score >= scorethresh) { /* add to number */ sarrayAddString(sa, text, L_COPY); boxaAddBox(ba, box, L_COPY); numaAddNumber(na, score); prebox = box; } else { /* save the completed number */ str = sarrayToString(sa, 0); sarrayAddString(saout, str, L_INSERT); sarrayDestroy(&sa); boxaaAddBoxa(baa, ba, L_INSERT); numaaAddNuma(naa, na, L_INSERT); boxDestroy(&box); if (score >= scorethresh) { /* start a new number */ i--; continue; } } } } if (prebox) { /* save the last number */ str = sarrayToString(sa, 0); sarrayAddString(saout, str, L_INSERT); boxaaAddBoxa(baa, ba, L_INSERT); numaaAddNuma(naa, na, L_INSERT); sarrayDestroy(&sa); boxDestroy(&prebox); } numaDestroy(&nascore); sarrayDestroy(&satext); if (pbaa) *pbaa = baa; else boxaaDestroy(&baa); if (pnaa) *pnaa = naa; else numaaDestroy(&naa); return saout; } /*------------------------------------------------------------------------* * Modifying recog behavior * *------------------------------------------------------------------------*/ /*! * recogSetTemplateType() * * Input: recog * templ_type (L_USE_AVERAGE or L_USE_ALL) * Return: 0 if OK, 1 on error */ l_int32 recogSetTemplateType(L_RECOG *recog, l_int32 templ_type) { PROCNAME("recogSetTemplateType"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (templ_type != L_USE_AVERAGE && templ_type != L_USE_ALL) return ERROR_INT("invalid templ_type", procName, 1); recog->templ_type = templ_type; return 0; } /*! * recogSetScaling() * * Input: recog * scalew (scale all widths to this; use 0 for no scaling) * scaleh (scale all heights to this; use 0 for no scaling) * Return: 0 if OK, 1 on error */ l_int32 recogSetScaling(L_RECOG *recog, l_int32 scalew, l_int32 scaleh) { PROCNAME("recogSetScaling"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (scalew < 0 || scaleh < 0) return ERROR_INT("invalid scalew or scaleh", procName, 1); if (scalew == recog->scalew && scaleh == recog->scaleh) { L_INFO("scaling factors not changed\n", procName); return 0; } recog->scalew = scalew; recog->scaleh = scaleh; recog->train_done = FALSE; /* Restock the scaled character images and recompute all averages */ recogTrainingFinished(recog, 0); return 0; } /*------------------------------------------------------------------------* * Static debug helper * *------------------------------------------------------------------------*/ /*! * l_showIndicatorSplitValues() * * Input: 7 indicator array * * Notes: * (1) The values indicate that specific criteria has been met * for component removal by pre-splitting filter.. * The 'result' line shows which components have been removed. */ static void l_showIndicatorSplitValues(NUMA *na1, NUMA *na2, NUMA *na3, NUMA *na4, NUMA *na5, NUMA *na6, NUMA *na7) { l_int32 i, n; n = numaGetCount(na1); fprintf(stderr, "================================================\n"); fprintf(stderr, "lt minw: "); for (i = 0; i < n; i++) fprintf(stderr, "%4d ", (l_int32)na1->array[i]); fprintf(stderr, "\nlt minh: "); for (i = 0; i < n; i++) fprintf(stderr, "%4d ", (l_int32)na2->array[i]); fprintf(stderr, "\ngt maxh: "); for (i = 0; i < n; i++) fprintf(stderr, "%4d ", (l_int32)na3->array[i]); fprintf(stderr, "\ngt maxasp: "); for (i = 0; i < n; i++) fprintf(stderr, "%4d ", (l_int32)na4->array[i]); fprintf(stderr, "\nlt minaf: "); for (i = 0; i < n; i++) fprintf(stderr, "%4d ", (l_int32)na5->array[i]); fprintf(stderr, "\ngt maxaf: "); for (i = 0; i < n; i++) fprintf(stderr, "%4d ", (l_int32)na6->array[i]); fprintf(stderr, "\n------------------------------------------------"); fprintf(stderr, "\nresult: "); for (i = 0; i < n; i++) fprintf(stderr, "%4d ", (l_int32)na7->array[i]); fprintf(stderr, "\n================================================\n"); } leptonica-1.70/src/jbclass.c0000644000175000017500000026424012265645125014101 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jbclass.c * * These are functions for unsupervised classification of * collections of connected components -- either characters or * words -- in binary images. They can be used as image * processing steps in jbig2 compression. * * Initialization * * JBCLASSER *jbRankHausInit() [rank hausdorff encoder] * JBCLASSER *jbCorrelationInit() [correlation encoder] * JBCLASSER *jbCorrelationInitWithoutComponents() [ditto] * static JBCLASSER *jbCorrelationInitInternal() * * Classify the pages * * l_int32 jbAddPages() * l_int32 jbAddPage() * l_int32 jbAddPageComponents() * * Rank hausdorff classifier * * l_int32 jbClassifyRankHaus() * l_int32 pixHaustest() * l_int32 pixRankHaustest() * * Binary correlation classifier * * l_int32 jbClassifyCorrelation() * * Determine the image components we start with * * l_int32 jbGetComponents() * l_int32 pixWordMaskByDilation() * l_int32 pixWordBoxesByDilation() * * Build grayscale composites (templates) * * PIXA *jbAccumulateComposites * PIXA *jbTemplatesFromComposites * * Utility functions for Classer * * JBCLASSER *jbClasserCreate() * void jbClasserDestroy() * * Utility functions for Data * * JBDATA *jbDataSave() * void jbDataDestroy() * l_int32 jbDataWrite() * JBDATA *jbDataRead() * PIXA *jbDataRender() * l_int32 jbGetULCorners() * l_int32 jbGetLLCorners() * * Static helpers * * static JBFINDCTX *findSimilarSizedTemplatesInit() * static l_int32 findSimilarSizedTemplatesNext() * static void findSimilarSizedTemplatesDestroy() * static l_int32 finalPositioningForAlignment() * * Note: this is NOT an implementation of the JPEG jbig2 * proposed standard encoder, the specifications for which * can be found at http://www.jpeg.org/jbigpt2.html. * (See below for a full implementation.) * It is an implementation of the lower-level part of an encoder that: * * (1) identifies connected components that are going to be used * (2) puts them in similarity classes (this is an unsupervised * classifier), and * (3) stores the result in a simple file format (2 files, * one for templates and one for page/coordinate/template-index * quartets). * * An actual implementation of the official jbig2 encoder could * start with parts (1) and (2), and would then compress the quartets * according to the standards requirements (e.g., Huffman or * arithmetic coding of coordinate differences and image templates). * * The low-level part of the encoder provided here has the * following useful features: * * - It is accurate in the identification of templates * and classes because it uses a windowed hausdorff * distance metric. * - It is accurate in the placement of the connected * components, doing a two step process of first aligning * the the centroids of the template with those of each instance, * and then making a further correction of up to +- 1 pixel * in each direction to best align the templates. * - It is fast because it uses a morphologically based * matching algorithm to implement the hausdorff criterion, * and it selects the patterns that are possible matches * based on their size. * * We provide two different matching functions, one using Hausdorff * distance and one using a simple image correlation. * The Hausdorff method sometimes produces better results for the * same number of classes, because it gives a relatively small * effective weight to foreground pixels near the boundary, * and a relatively large weight to foreground pixels that are * not near the boundary. By effectively ignoring these boundary * pixels, Hausdorff weighting corresponds better to the expected * probabilities of the pixel values in a scanned image, where the * variations in instances of the same printed character are much * more likely to be in pixels near the boundary. By contrast, * the correlation method gives equal weight to all foreground pixels. * * For best results, use the correlation method. Correlation takes * the number of fg pixels in the AND of instance and template, * divided by the product of the number of fg pixels in instance * and template. It compares this with a threshold that, in * general, depends on the fractional coverage of the template. * For heavy text, the threshold is raised above that for light * text, By using both these parameters (basic threshold and * adjustment factor for text weight), one has more flexibility * and can arrive at the fewest substitution errors, although * this comes at the price of more templates. * * The strict Hausdorff scoring is not a rank weighting, because a * single pixel beyond the given distance will cause a match * failure. A rank Hausdorff is more robust to non-boundary noise, * but it is also more susceptible to confusing components that * should be in different classes. For implementing a jbig2 * application for visually lossless binary image compression, * you have two choices: * * (1) use a 3x3 structuring element (size = 3) and a strict * Hausdorff comparison (rank = 1.0 in the rank Hausdorff * function). This will result in a minimal number of classes, * but confusion of small characters, such as italic and * non-italic lower-case 'o', can still occur. * (2) use the correlation method with a threshold of 0.85 * and a weighting factor of about 0.7. This will result in * a larger number of classes, but should not be confused * either by similar small characters or by extremely * thick sans serif characters, such as in prog/cootoots.png. * * As mentioned above, if visual substitution errors must be * avoided, you should use the correlation method. * * We provide executables that show how to do the encoding: * prog/jbrankhaus.c * prog/jbcorrelation.c * * The basic flow for correlation classification goes as follows, * where specific choices have been made for parameters (Hausdorff * is the same except for initialization): * * // Initialize and save data in the classer * JBCLASSER *classer = * jbCorrelationInit(JB_CONN_COMPS, 0, 0, 0.8, 0.7); * SARRAY *safiles = getSortedPathnamesInDirectory(directory, * NULL, 0, 0); * jbAddPages(classer, safiles); * * // Save the data in a data structure for serialization, * // and write it into two files. * JBDATA *data = jbDataSave(classer); * jbDataWrite(rootname, data); * * // Reconstruct (render) the pages from the encoded data. * PIXA *pixa = jbDataRender(data, FALSE); * * Adam Langley has built a jbig2 standards-compliant encoder, the * first one to appear in open source. You can get this encoder at: * http://www.imperialviolet.org/jbig2.html * * It uses arithmetic encoding throughout. It encodes binary images * losslessly with a single arithmetic coding over the full image. * It also does both lossy and lossless encoding from connected * components, using leptonica to generate the templates representing * each cluster. */ #include #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 512; /* For jbClassifyRankHaus(): size of border added around * pix of each c.c., to allow further processing. This * should be at least the sum of the MAX_DIFF_HEIGHT * (or MAX_DIFF_WIDTH) and one-half the size of the Sel */ static const l_int32 JB_ADDED_PIXELS = 6; /* For pixHaustest(), pixRankHaustest() and pixCorrelationScore(): * choose these to be 2 or greater */ static const l_int32 MAX_DIFF_WIDTH = 2; /* use at least 2 */ static const l_int32 MAX_DIFF_HEIGHT = 2; /* use at least 2 */ /* In initialization, you have the option to discard components * (cc, characters or words) that have either width or height larger * than a given size. This is convenient for jbDataSave(), because * the components are placed onto a regular lattice with cell * dimension equal to the maximum component size. The default * values are given here. If you want to save all components, * use a sufficiently large set of dimensions. */ static const l_int32 MAX_CONN_COMP_WIDTH = 350; /* default max cc width */ static const l_int32 MAX_CHAR_COMP_WIDTH = 350; /* default max char width */ static const l_int32 MAX_WORD_COMP_WIDTH = 1000; /* default max word width */ static const l_int32 MAX_COMP_HEIGHT = 120; /* default max component height */ /* Max allowed dilation to merge characters into words */ static const l_int32 MAX_ALLOWED_DILATION = 25; /* This stores the state of a state machine which fetches * similar sized templates */ struct JbFindTemplatesState { JBCLASSER *classer; /* classer */ l_int32 w; /* desired width */ l_int32 h; /* desired height */ l_int32 i; /* index into two_by_two step array */ NUMA *numa; /* current number array */ l_int32 n; /* current element of numa */ }; typedef struct JbFindTemplatesState JBFINDCTX; /* Static initialization function */ static JBCLASSER * jbCorrelationInitInternal(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor, l_int32 keep_components); /* Static helper functions */ static JBFINDCTX * findSimilarSizedTemplatesInit(JBCLASSER *classer, PIX *pixs); static l_int32 findSimilarSizedTemplatesNext(JBFINDCTX *context); static void findSimilarSizedTemplatesDestroy(JBFINDCTX **pcontext); static l_int32 finalPositioningForAlignment(PIX *pixs, l_int32 x, l_int32 y, l_int32 idelx, l_int32 idely, PIX *pixt, l_int32 *sumtab, l_int32 *pdx, l_int32 *pdy); #ifndef NO_CONSOLE_IO #define DEBUG_PLOT_CC 0 #define DEBUG_CORRELATION_SCORE 0 #endif /* ~NO_CONSOLE_IO */ /*----------------------------------------------------------------------* * Initialization * *----------------------------------------------------------------------*/ /*! * jbRankHausInit() * * Input: components (JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS) * maxwidth (of component; use 0 for default) * maxheight (of component; use 0 for default) * size (of square structuring element; 2, representing * 2x2 sel, is necessary for reasonable accuracy of * small components; combine this with rank ~ 0.97 * to avoid undue class expansion) * rank (rank val of match, each way; in [0.5 - 1.0]; * when using size = 2, 0.97 is a reasonable value) * Return: jbclasser if OK; NULL on error */ JBCLASSER * jbRankHausInit(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_int32 size, l_float32 rank) { JBCLASSER *classer; PROCNAME("jbRankHausInit"); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return (JBCLASSER *)ERROR_PTR("invalid components", procName, NULL); if (size < 1 || size > 10) return (JBCLASSER *)ERROR_PTR("size not reasonable", procName, NULL); if (rank < 0.5 || rank > 1.0) return (JBCLASSER *)ERROR_PTR("rank not in [0.5-1.0]", procName, NULL); if (maxwidth == 0) { if (components == JB_CONN_COMPS) maxwidth = MAX_CONN_COMP_WIDTH; else if (components == JB_CHARACTERS) maxwidth = MAX_CHAR_COMP_WIDTH; else /* JB_WORDS */ maxwidth = MAX_WORD_COMP_WIDTH; } if (maxheight == 0) maxheight = MAX_COMP_HEIGHT; if ((classer = jbClasserCreate(JB_RANKHAUS, components)) == NULL) return (JBCLASSER *)ERROR_PTR("classer not made", procName, NULL); classer->maxwidth = maxwidth; classer->maxheight = maxheight; classer->sizehaus = size; classer->rankhaus = rank; classer->nahash = numaHashCreate(5507, 4); /* 5507 is prime */ return classer; } /*! * jbCorrelationInit() * * Input: components (JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS) * maxwidth (of component; use 0 for default) * maxheight (of component; use 0 for default) * thresh (value for correlation score: in [0.4 - 0.98]) * weightfactor (corrects thresh for thick characters [0.0 - 1.0]) * Return: jbclasser if OK; NULL on error * * Notes: * (1) For scanned text, suggested input values are: * thresh ~ [0.8 - 0.85] * weightfactor ~ [0.5 - 0.6] * (2) For electronically generated fonts (e.g., rasterized pdf), * a very high thresh (e.g., 0.95) will not cause a significant * increase in the number of classes. */ JBCLASSER * jbCorrelationInit(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor) { return jbCorrelationInitInternal(components, maxwidth, maxheight, thresh, weightfactor, 1); } /*! * jbCorrelationInitWithoutComponents() * * Input: same as jbCorrelationInit * Output: same as jbCorrelationInit * * Note: acts the same as jbCorrelationInit(), but the resulting * object doesn't keep a list of all the components. */ JBCLASSER * jbCorrelationInitWithoutComponents(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor) { return jbCorrelationInitInternal(components, maxwidth, maxheight, thresh, weightfactor, 0); } static JBCLASSER * jbCorrelationInitInternal(l_int32 components, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weightfactor, l_int32 keep_components) { JBCLASSER *classer; PROCNAME("jbCorrelationInitInternal"); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return (JBCLASSER *)ERROR_PTR("invalid components", procName, NULL); if (thresh < 0.4 || thresh > 0.98) return (JBCLASSER *)ERROR_PTR("thresh not in range [0.4 - 0.98]", procName, NULL); if (weightfactor < 0.0 || weightfactor > 1.0) return (JBCLASSER *)ERROR_PTR("weightfactor not in range [0.0 - 1.0]", procName, NULL); if (maxwidth == 0) { if (components == JB_CONN_COMPS) maxwidth = MAX_CONN_COMP_WIDTH; else if (components == JB_CHARACTERS) maxwidth = MAX_CHAR_COMP_WIDTH; else /* JB_WORDS */ maxwidth = MAX_WORD_COMP_WIDTH; } if (maxheight == 0) maxheight = MAX_COMP_HEIGHT; if ((classer = jbClasserCreate(JB_CORRELATION, components)) == NULL) return (JBCLASSER *)ERROR_PTR("classer not made", procName, NULL); classer->maxwidth = maxwidth; classer->maxheight = maxheight; classer->thresh = thresh; classer->weightfactor = weightfactor; classer->nahash = numaHashCreate(5507, 4); /* 5507 is prime */ classer->keep_pixaa = keep_components; return classer; } /*----------------------------------------------------------------------* * Classify the pages * *----------------------------------------------------------------------*/ /*! * jbAddPages() * * Input: jbclasser * safiles (of page image file names) * Return: 0 if OK; 1 on error * * Note: * (1) jbclasser makes a copy of the array of file names. * (2) The caller is still responsible for destroying the input array. */ l_int32 jbAddPages(JBCLASSER *classer, SARRAY *safiles) { l_int32 i, nfiles; char *fname; PIX *pix; PROCNAME("jbAddPages"); if (!classer) return ERROR_INT("classer not defined", procName, 1); if (!safiles) return ERROR_INT("safiles not defined", procName, 1); classer->safiles = sarrayCopy(safiles); nfiles = sarrayGetCount(safiles); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, 0); if ((pix = pixRead(fname)) == NULL) { L_WARNING("image file %d not read\n", procName, i); continue; } if (pixGetDepth(pix) != 1) { L_WARNING("image file %d not 1 bpp\n", procName, i); continue; } jbAddPage(classer, pix); pixDestroy(&pix); } return 0; } /*! * jbAddPage() * * Input: jbclasser * pixs (of input page) * Return: 0 if OK; 1 on error */ l_int32 jbAddPage(JBCLASSER *classer, PIX *pixs) { BOXA *boxas; PIXA *pixas; PROCNAME("jbAddPage"); if (!classer) return ERROR_INT("classer not defined", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); classer->w = pixGetWidth(pixs); classer->h = pixGetHeight(pixs); /* Get the appropriate components and their bounding boxes */ if (jbGetComponents(pixs, classer->components, classer->maxwidth, classer->maxheight, &boxas, &pixas)) { return ERROR_INT("components not made", procName, 1); } jbAddPageComponents(classer, pixs, boxas, pixas); boxaDestroy(&boxas); pixaDestroy(&pixas); return 0; } /*! * jbAddPageComponents() * * Input: jbclasser * pixs (of input page) * boxas (b.b. of components for this page) * pixas (components for this page) * Return: 0 if OK; 1 on error * * Notes: * (1) If there are no components on the page, we don't require input * of empty boxas or pixas, although that's the typical situation. */ l_int32 jbAddPageComponents(JBCLASSER *classer, PIX *pixs, BOXA *boxas, PIXA *pixas) { l_int32 n; PROCNAME("jbAddPageComponents"); if (!classer) return ERROR_INT("classer not defined", procName, 1); if (!pixs) return ERROR_INT("pix not defined", procName, 1); /* Test for no components on the current page. Always update the * number of pages processed, even if nothing is on it. */ if (!boxas || !pixas || (boxaGetCount(boxas) == 0)) { classer->npages++; return 0; } /* Get classes. For hausdorff, it uses a specified size of * structuring element and specified rank. For correlation, * it uses a specified threshold. */ if (classer->method == JB_RANKHAUS) { if (jbClassifyRankHaus(classer, boxas, pixas)) return ERROR_INT("rankhaus classification failed", procName, 1); } else { /* classer->method == JB_CORRELATION */ if (jbClassifyCorrelation(classer, boxas, pixas)) return ERROR_INT("correlation classification failed", procName, 1); } /* Find the global UL corners, adjusted for each instance so * that the class template and instance will have their * centroids in the same place. Then the template can be * used to replace the instance. */ if (jbGetULCorners(classer, pixs, boxas)) return ERROR_INT("UL corners not found", procName, 1); /* Update total component counts and number of pages processed. */ n = boxaGetCount(boxas); classer->baseindex += n; numaAddNumber(classer->nacomps, n); classer->npages++; return 0; } /*----------------------------------------------------------------------* * Classification using windowed rank hausdorff metric * *----------------------------------------------------------------------*/ /*! * jbClassifyRankHaus() * * Input: jbclasser * boxa (of new components for classification) * pixas (of new components for classification) * Return: 0 if OK; 1 on error */ l_int32 jbClassifyRankHaus(JBCLASSER *classer, BOXA *boxa, PIXA *pixas) { l_int32 n, nt, i, wt, ht, iclass, size, found, testval; l_int32 *sumtab; l_int32 npages, area1, area3; l_int32 *tab8; l_float32 rank, x1, y1, x2, y2; BOX *box; NUMA *naclass, *napage; NUMA *nafg; /* fg area of all instances */ NUMA *nafgt; /* fg area of all templates */ JBFINDCTX *findcontext; NUMAHASH *nahash; PIX *pix, *pix1, *pix2, *pix3, *pix4; PIXA *pixa, *pixa1, *pixa2, *pixat, *pixatd; PIXAA *pixaa; PTA *pta, *ptac, *ptact; SEL *sel; PROCNAME("jbClassifyRankHaus"); if (!classer) return ERROR_INT("classer not found", procName, 1); if (!boxa) return ERROR_INT("boxa not found", procName, 1); if (!pixas) return ERROR_INT("pixas not found", procName, 1); npages = classer->npages; size = classer->sizehaus; sel = selCreateBrick(size, size, size / 2, size / 2, SEL_HIT); /* Generate the bordered pixa, with and without dilation. * pixa1 and pixa2 contain all the input components. */ n = pixaGetCount(pixas); pixa1 = pixaCreate(n); pixa2 = pixaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); pix1 = pixAddBorderGeneral(pix, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, 0); pix2 = pixDilate(NULL, pix1, sel); pixaAddPix(pixa1, pix1, L_INSERT); /* un-dilated */ pixaAddPix(pixa2, pix2, L_INSERT); /* dilated */ pixDestroy(&pix); } /* Get the centroids of all the bordered images. * These are relative to the UL corner of each (bordered) pix. */ pta = pixaCentroids(pixa1); /* centroids for this page; use here */ ptac = classer->ptac; /* holds centroids of components up to this page */ ptaJoin(ptac, pta, 0, -1); /* save centroids of all components */ ptact = classer->ptact; /* holds centroids of templates */ /* Use these to save the class and page of each component. */ naclass = classer->naclass; napage = classer->napage; sumtab = makePixelSumTab8(); /* Store the unbordered pix in a pixaa, in a hierarchical * set of arrays. There is one pixa for each class, * and the pix in each pixa are all the instances found * of that class. This is actually more than one would need * for a jbig2 encoder, but there are two reasons to keep * them around: (1) the set of instances for each class * can be used to make an improved binary (or, better, * a grayscale) template, rather than simply using the first * one in the set; (2) we can investigate the failures * of the classifier. This pixaa grows as we process * successive pages. */ pixaa = classer->pixaa; /* arrays to store class exemplars (templates) */ pixat = classer->pixat; /* un-dilated */ pixatd = classer->pixatd; /* dilated */ /* Fill up the pixaa tree with the template exemplars as * the first pix in each pixa. As we add each pix, * we also add the associated box to the pixa. * We also keep track of the centroid of each pix, * and use the difference between centroids (of the * pix with the exemplar we are checking it with) * to align the two when checking that the Hausdorff * distance does not exceed a threshold. * The threshold is set by the Sel used for dilating. * For example, a 3x3 brick, sel_3, corresponds to a * Hausdorff distance of 1. In general, for an NxN brick, * with N odd, corresponds to a Hausdorff distance of (N - 1)/2. * It turns out that we actually need to use a sel of size 2x2 * to avoid small bad components when there is a halftone image * from which components can be chosen. * The larger the Sel you use, the fewer the number of classes, * and the greater the likelihood of putting semantically * different objects in the same class. For simplicity, * we do this separately for the case of rank == 1.0 (exact * match within the Hausdorff distance) and rank < 1.0. */ rank = classer->rankhaus; nahash = classer->nahash; if (rank == 1.0) { for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); pix2 = pixaGetPix(pixa2, i, L_CLONE); ptaGetPt(pta, i, &x1, &y1); nt = pixaGetCount(pixat); /* number of templates */ found = FALSE; findcontext = findSimilarSizedTemplatesInit(classer, pix1); while ((iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { /* Find score for this template */ pix3 = pixaGetPix(pixat, iclass, L_CLONE); pix4 = pixaGetPix(pixatd, iclass, L_CLONE); ptaGetPt(ptact, iclass, &x2, &y2); testval = pixHaustest(pix1, pix2, pix3, pix4, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT); pixDestroy(&pix3); pixDestroy(&pix4); if (testval == 1) { found = TRUE; numaAddNumber(naclass, iclass); numaAddNumber(napage, npages); if (classer->keep_pixaa) { pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixa, pix, L_INSERT); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaDestroy(&pixa); } break; } } findSimilarSizedTemplatesDestroy(&findcontext); if (found == FALSE) { /* new class */ numaAddNumber(naclass, nt); numaAddNumber(napage, npages); pixa = pixaCreate(0); pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ pixaAddPix(pixa, pix, L_INSERT); wt = pixGetWidth(pix); ht = pixGetHeight(pix); numaHashAdd(nahash, ht * wt, nt); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ ptaAddPt(ptact, x1, y1); pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ pixaAddPix(pixatd, pix2, L_INSERT); /* bordered dil template */ } else { /* don't save them */ pixDestroy(&pix1); pixDestroy(&pix2); } } } else { /* rank < 1.0 */ if ((nafg = pixaCountPixels(pixas)) == NULL) /* areas for this page */ return ERROR_INT("nafg not made", procName, 1); nafgt = classer->nafgt; tab8 = makePixelSumTab8(); for (i = 0; i < n; i++) { /* all instances on this page */ pix1 = pixaGetPix(pixa1, i, L_CLONE); numaGetIValue(nafg, i, &area1); pix2 = pixaGetPix(pixa2, i, L_CLONE); ptaGetPt(pta, i, &x1, &y1); /* use pta for this page */ nt = pixaGetCount(pixat); /* number of templates */ found = FALSE; findcontext = findSimilarSizedTemplatesInit(classer, pix1); while ((iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { /* Find score for this template */ pix3 = pixaGetPix(pixat, iclass, L_CLONE); numaGetIValue(nafgt, iclass, &area3); pix4 = pixaGetPix(pixatd, iclass, L_CLONE); ptaGetPt(ptact, iclass, &x2, &y2); testval = pixRankHaustest(pix1, pix2, pix3, pix4, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, area1, area3, rank, tab8); pixDestroy(&pix3); pixDestroy(&pix4); if (testval == 1) { /* greedy match; take the first */ found = TRUE; numaAddNumber(naclass, iclass); numaAddNumber(napage, npages); if (classer->keep_pixaa) { pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixa, pix, L_INSERT); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaDestroy(&pixa); } break; } } findSimilarSizedTemplatesDestroy(&findcontext); if (found == FALSE) { /* new class */ numaAddNumber(naclass, nt); numaAddNumber(napage, npages); pixa = pixaCreate(0); pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ pixaAddPix(pixa, pix, L_INSERT); wt = pixGetWidth(pix); ht = pixGetHeight(pix); numaHashAdd(nahash, ht * wt, nt); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ ptaAddPt(ptact, x1, y1); pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ pixaAddPix(pixatd, pix2, L_INSERT); /* ditto */ numaAddNumber(nafgt, area1); } else { /* don't save them */ pixDestroy(&pix1); pixDestroy(&pix2); } } FREE(tab8); numaDestroy(&nafg); } classer->nclass = pixaGetCount(pixat); FREE(sumtab); ptaDestroy(&pta); pixaDestroy(&pixa1); pixaDestroy(&pixa2); selDestroy(&sel); return 0; } /*! * pixHaustest() * * Input: pix1 (new pix, not dilated) * pix2 (new pix, dilated) * pix3 (exemplar pix, not dilated) * pix4 (exemplar pix, dilated) * delx (x comp of centroid difference) * dely (y comp of centroid difference) * maxdiffw (max width difference of pix1 and pix2) * maxdiffh (max height difference of pix1 and pix2) * Return: 0 (FALSE) if no match, 1 (TRUE) if the new * pix is in the same class as the exemplar. * * Note: we check first that the two pix are roughly * the same size. Only if they meet that criterion do * we compare the bitmaps. The Hausdorff is a 2-way * check. The centroid difference is used to align the two * images to the nearest integer for each of the checks. * These check that the dilated image of one contains * ALL the pixels of the undilated image of the other. * Checks are done in both direction. A single pixel not * contained in either direction results in failure of the test. */ l_int32 pixHaustest(PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, boolmatch; PIX *pixt; /* Eliminate possible matches based on size difference */ wi = pixGetWidth(pix1); hi = pixGetHeight(pix1); wt = pixGetWidth(pix3); ht = pixGetHeight(pix3); delw = L_ABS(wi - wt); if (delw > maxdiffw) return FALSE; delh = L_ABS(hi - ht); if (delh > maxdiffh) return FALSE; /* Round difference in centroid location to nearest integer; * use this as a shift when doing the matching. */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* Do 1-direction hausdorff, checking that every pixel in pix1 * is within a dilation distance of some pixel in pix3. Namely, * that pix4 entirely covers pix1: * pixt = pixSubtract(NULL, pix1, pix4), including shift * where pixt has no ON pixels. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC, pix1, 0, 0); pixRasterop(pixt, idelx, idely, wi, hi, PIX_DST & PIX_NOT(PIX_SRC), pix4, 0, 0); pixZero(pixt, &boolmatch); if (boolmatch == 0) { pixDestroy(&pixt); return FALSE; } /* Do 1-direction hausdorff, checking that every pixel in pix3 * is within a dilation distance of some pixel in pix1. Namely, * that pix2 entirely covers pix3: * pixSubtract(pixt, pix3, pix2), including shift * where pixt has no ON pixels. */ pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix3, 0, 0); pixRasterop(pixt, 0, 0, wt, ht, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); pixZero(pixt, &boolmatch); pixDestroy(&pixt); return boolmatch; } /*! * pixRankHaustest() * * Input: pix1 (new pix, not dilated) * pix2 (new pix, dilated) * pix3 (exemplar pix, not dilated) * pix4 (exemplar pix, dilated) * delx (x comp of centroid difference) * dely (y comp of centroid difference) * maxdiffw (max width difference of pix1 and pix2) * maxdiffh (max height difference of pix1 and pix2) * area1 (fg pixels in pix1) * area3 (fg pixels in pix3) * rank (rank value of test, each way) * tab8 (table of pixel sums for byte) * Return: 0 (FALSE) if no match, 1 (TRUE) if the new * pix is in the same class as the exemplar. * * Note: we check first that the two pix are roughly * the same size. Only if they meet that criterion do * we compare the bitmaps. We convert the rank value to * a number of pixels by multiplying the rank fraction by the number * of pixels in the undilated image. The Hausdorff is a 2-way * check. The centroid difference is used to align the two * images to the nearest integer for each of the checks. * The rank hausdorff checks that the dilated image of one * contains the rank fraction of the pixels of the undilated * image of the other. Checks are done in both direction. * Failure of the test in either direction results in failure * of the test. */ l_int32 pixRankHaustest(PIX *pix1, PIX *pix2, PIX *pix3, PIX *pix4, l_float32 delx, /* x(1) - x(3) */ l_float32 dely, /* y(1) - y(3) */ l_int32 maxdiffw, l_int32 maxdiffh, l_int32 area1, l_int32 area3, l_float32 rank, l_int32 *tab8) { l_int32 wi, hi, wt, ht, delw, delh, idelx, idely, boolmatch; l_int32 thresh1, thresh3; PIX *pixt; /* Eliminate possible matches based on size difference */ wi = pixGetWidth(pix1); hi = pixGetHeight(pix1); wt = pixGetWidth(pix3); ht = pixGetHeight(pix3); delw = L_ABS(wi - wt); if (delw > maxdiffw) return FALSE; delh = L_ABS(hi - ht); if (delh > maxdiffh) return FALSE; /* Upper bounds in remaining pixels for allowable match */ thresh1 = (l_int32)(area1 * (1. - rank) + 0.5); thresh3 = (l_int32)(area3 * (1. - rank) + 0.5); /* Round difference in centroid location to nearest integer; * use this as a shift when doing the matching. */ if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); /* Do 1-direction hausdorff, checking that every pixel in pix1 * is within a dilation distance of some pixel in pix3. Namely, * that pix4 entirely covers pix1: * pixt = pixSubtract(NULL, pix1, pix4), including shift * where pixt has no ON pixels. */ pixt = pixCreateTemplate(pix1); pixRasterop(pixt, 0, 0, wi, hi, PIX_SRC, pix1, 0, 0); pixRasterop(pixt, idelx, idely, wi, hi, PIX_DST & PIX_NOT(PIX_SRC), pix4, 0, 0); pixThresholdPixelSum(pixt, thresh1, &boolmatch, tab8); if (boolmatch == 1) { /* above thresh1 */ pixDestroy(&pixt); return FALSE; } /* Do 1-direction hausdorff, checking that every pixel in pix3 * is within a dilation distance of some pixel in pix1. Namely, * that pix2 entirely covers pix3: * pixSubtract(pixt, pix3, pix2), including shift * where pixt has no ON pixels. */ pixRasterop(pixt, idelx, idely, wt, ht, PIX_SRC, pix3, 0, 0); pixRasterop(pixt, 0, 0, wt, ht, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); pixThresholdPixelSum(pixt, thresh3, &boolmatch, tab8); pixDestroy(&pixt); if (boolmatch == 1) /* above thresh3 */ return FALSE; else return TRUE; } /*----------------------------------------------------------------------* * Classification using windowed correlation score * *----------------------------------------------------------------------*/ /*! * jbClassifyCorrelation() * * Input: jbclasser * boxa (of new components for classification) * pixas (of new components for classification) * Return: 0 if OK; 1 on error */ l_int32 jbClassifyCorrelation(JBCLASSER *classer, BOXA *boxa, PIXA *pixas) { l_int32 n, nt, i, iclass, wt, ht, found, area, area1, area2, npages, overthreshold; l_int32 *sumtab, *centtab; l_uint32 *row, word; l_float32 x1, y1, x2, y2, xsum, ysum; l_float32 thresh, weight, threshold; BOX *box; NUMA *naclass, *napage; NUMA *nafgt; /* fg area of all templates */ NUMA *naarea; /* w * h area of all templates */ JBFINDCTX *findcontext; NUMAHASH *nahash; PIX *pix, *pix1, *pix2; PIXA *pixa, *pixa1, *pixat; PIXAA *pixaa; PTA *pta, *ptac, *ptact; l_int32 *pixcts; /* pixel counts of each pixa */ l_int32 **pixrowcts; /* row-by-row pixel counts of each pixa */ l_int32 x, y, rowcount, downcount, wpl; l_uint8 byte; PROCNAME("jbClassifyCorrelation"); if (!classer) return ERROR_INT("classer not found", procName, 1); if (!boxa) return ERROR_INT("boxa not found", procName, 1); if (!pixas) return ERROR_INT("pixas not found", procName, 1); npages = classer->npages; /* Generate the bordered pixa, which contains all the the * input components. This will not be saved. */ n = pixaGetCount(pixas); pixa1 = pixaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); pix1 = pixAddBorderGeneral(pix, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, JB_ADDED_PIXELS, 0); pixaAddPix(pixa1, pix1, L_INSERT); pixDestroy(&pix); } /* Use these to save the class and page of each component. */ naclass = classer->naclass; napage = classer->napage; /* Get the number of fg pixels in each component. */ nafgt = classer->nafgt; /* holds fg areas of the templates */ sumtab = makePixelSumTab8(); pixcts = (l_int32 *)CALLOC(n, sizeof(*pixcts)); pixrowcts = (l_int32 **)CALLOC(n, sizeof(*pixrowcts)); centtab = makePixelCentroidTab8(); if (!pixcts || !pixrowcts || !centtab) return ERROR_INT("calloc fail in pix*cts or centtab", procName, 1); /* Count the "1" pixels in each row of the pix in pixa1; this * allows pixCorrelationScoreThresholded to abort early if a match * is impossible. This loop merges three calculations: the total * number of "1" pixels, the number of "1" pixels in each row, and * the centroid. The centroids are relative to the UL corner of * each (bordered) pix. The pixrowcts[i][y] are the total number * of fg pixels in pixa[i] below row y. */ pta = ptaCreate(n); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa1, i, L_CLONE); pixrowcts[i] = (l_int32 *)CALLOC(pixGetHeight(pix), sizeof(**pixrowcts)); xsum = 0; ysum = 0; wpl = pixGetWpl(pix); row = pixGetData(pix) + (pixGetHeight(pix) - 1) * wpl; downcount = 0; for (y = pixGetHeight(pix) - 1; y >= 0; y--, row -= wpl) { pixrowcts[i][y] = downcount; rowcount = 0; for (x = 0; x < wpl; x++) { word = row[x]; byte = word & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + (x * 32 + 24) * sumtab[byte]; byte = (word >> 8) & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + (x * 32 + 16) * sumtab[byte]; byte = (word >> 16) & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + (x * 32 + 8) * sumtab[byte]; byte = (word >> 24) & 0xff; rowcount += sumtab[byte]; xsum += centtab[byte] + x * 32 * sumtab[byte]; } downcount += rowcount; ysum += rowcount * y; } pixcts[i] = downcount; ptaAddPt(pta, xsum / (l_float32)downcount, ysum / (l_float32)downcount); pixDestroy(&pix); } ptac = classer->ptac; /* holds centroids of components up to this page */ ptaJoin(ptac, pta, 0, -1); /* save centroids of all components */ ptact = classer->ptact; /* holds centroids of templates */ /* Store the unbordered pix in a pixaa, in a hierarchical * set of arrays. There is one pixa for each class, * and the pix in each pixa are all the instances found * of that class. This is actually more than one would need * for a jbig2 encoder, but there are two reasons to keep * them around: (1) the set of instances for each class * can be used to make an improved binary (or, better, * a grayscale) template, rather than simply using the first * one in the set; (2) we can investigate the failures * of the classifier. This pixaa grows as we process * successive pages. */ pixaa = classer->pixaa; /* Array to store class exemplars */ pixat = classer->pixat; /* Fill up the pixaa tree with the template exemplars as * the first pix in each pixa. As we add each pix, * we also add the associated box to the pixa. * We also keep track of the centroid of each pix, * and use the difference between centroids (of the * pix with the exemplar we are checking it with) * to align the two when checking that the correlation * score exceeds a threshold. The correlation score * is given by the square of the area of the AND * between aligned instance and template, divided by * the product of areas of each image. For identical * template and instance, the score is 1.0. * If the threshold is too small, non-equivalent instances * will be placed in the same class; if too large, there will * be an unnecessary division of classes representing the * same character. The weightfactor adds in some of the * difference (1.0 - thresh), depending on the heaviness * of the template (measured as the fraction of fg pixels). */ thresh = classer->thresh; weight = classer->weightfactor; naarea = classer->naarea; nahash = classer->nahash; for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixa1, i, L_CLONE); area1 = pixcts[i]; ptaGetPt(pta, i, &x1, &y1); /* centroid for this instance */ nt = pixaGetCount(pixat); found = FALSE; findcontext = findSimilarSizedTemplatesInit(classer, pix1); while ( (iclass = findSimilarSizedTemplatesNext(findcontext)) > -1) { /* Get the template */ pix2 = pixaGetPix(pixat, iclass, L_CLONE); numaGetIValue(nafgt, iclass, &area2); ptaGetPt(ptact, iclass, &x2, &y2); /* template centroid */ /* Find threshold for this template */ if (weight > 0.0) { numaGetIValue(naarea, iclass, &area); threshold = thresh + (1. - thresh) * weight * area2 / area; } else { threshold = thresh; } /* Find score for this template */ overthreshold = pixCorrelationScoreThresholded(pix1, pix2, area1, area2, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, sumtab, pixrowcts[i], threshold); #if DEBUG_CORRELATION_SCORE { l_float32 score, testscore; l_int32 count, testcount; pixCorrelationScore(pix1, pix2, area1, area2, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, sumtab, &score); pixCorrelationScoreSimple(pix1, pix2, area1, area2, x1 - x2, y1 - y2, MAX_DIFF_WIDTH, MAX_DIFF_HEIGHT, sumtab, &testscore); count = (l_int32)rint(sqrt(score * area1 * area2)); testcount = (l_int32)rint(sqrt(testscore * area1 * area2)); if ((score >= threshold) != (testscore >= threshold)) { fprintf(stderr, "Correlation score mismatch: %d(%g,%d) vs %d(%g,%d) (%g)\n", count, score, score >= threshold, testcount, testscore, testscore >= threshold, score - testscore); } if ((score >= threshold) != overthreshold) { fprintf(stderr, "Mismatch between correlation/threshold comparison: %g(%g,%d) >= %g(%g) vs %s\n", score, score*area1*area2, count, threshold, threshold*area1*area2, (overthreshold ? "true" : "false")); } } #endif /* DEBUG_CORRELATION_SCORE */ pixDestroy(&pix2); if (overthreshold) { /* greedy match */ found = TRUE; numaAddNumber(naclass, iclass); numaAddNumber(napage, npages); if (classer->keep_pixaa) { /* We are keeping a record of all components */ pixa = pixaaGetPixa(pixaa, iclass, L_CLONE); pix = pixaGetPix(pixas, i, L_CLONE); pixaAddPix(pixa, pix, L_INSERT); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaDestroy(&pixa); } break; } } findSimilarSizedTemplatesDestroy(&findcontext); if (found == FALSE) { /* new class */ numaAddNumber(naclass, nt); numaAddNumber(napage, npages); pixa = pixaCreate(0); pix = pixaGetPix(pixas, i, L_CLONE); /* unbordered instance */ pixaAddPix(pixa, pix, L_INSERT); wt = pixGetWidth(pix); ht = pixGetHeight(pix); numaHashAdd(nahash, ht * wt, nt); box = boxaGetBox(boxa, i, L_CLONE); pixaAddBox(pixa, box, L_INSERT); pixaaAddPixa(pixaa, pixa, L_INSERT); /* unbordered instance */ ptaAddPt(ptact, x1, y1); numaAddNumber(nafgt, area1); pixaAddPix(pixat, pix1, L_INSERT); /* bordered template */ area = (pixGetWidth(pix1) - 2 * JB_ADDED_PIXELS) * (pixGetHeight(pix1) - 2 * JB_ADDED_PIXELS); numaAddNumber(naarea, area); } else { /* don't save it */ pixDestroy(&pix1); } } classer->nclass = pixaGetCount(pixat); FREE(pixcts); FREE(centtab); for (i = 0; i < n; i++) { FREE(pixrowcts[i]); } FREE(pixrowcts); FREE(sumtab); ptaDestroy(&pta); pixaDestroy(&pixa1); return 0; } /*----------------------------------------------------------------------* * Determine the image components we start with * *----------------------------------------------------------------------*/ /*! * jbGetComponents() * * Input: pixs (1 bpp) * components (JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS) * maxwidth, maxheight (of saved components; larger are discarded) * &pboxa ( b.b. of component items) * &ppixa ( component items) * Return: 0 if OK, 1 on error */ l_int32 jbGetComponents(PIX *pixs, l_int32 components, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad) { l_int32 empty, res, redfactor; BOXA *boxa; PIX *pixt1, *pixt2, *pixt3; PIXA *pixa, *pixat; PROCNAME("jbGetComponents"); if (!pboxad) return ERROR_INT("&boxad not defined", procName, 1); *pboxad = NULL; if (!ppixad) return ERROR_INT("&pixad not defined", procName, 1); *ppixad = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return ERROR_INT("invalid components", procName, 1); pixZero(pixs, &empty); if (empty) { *pboxad = boxaCreate(0); *ppixad = pixaCreate(0); return 0; } /* If required, preprocess input pixs. The method for both * characters and words is to generate a connected component * mask over the units that we want to aggregrate, which are, * in general, sets of related connected components in pixs. * For characters, we want to include the dots with * 'i', 'j' and '!', so we do a small vertical closing to * generate the mask. For words, we make a mask over all * characters in each word. This is a bit more tricky, because * the spacing between words is difficult to predict a priori, * and words can be typeset with variable spacing that can * in some cases be barely larger than the space between * characters. The first step is to generate the mask and * identify each of its connected components. */ if (components == JB_CONN_COMPS) { /* no preprocessing */ boxa = pixConnComp(pixs, &pixa, 8); } else if (components == JB_CHARACTERS) { pixt1 = pixMorphSequence(pixs, "c1.6", 0); boxa = pixConnComp(pixt1, &pixat, 8); pixa = pixaClipToPix(pixat, pixs); pixDestroy(&pixt1); pixaDestroy(&pixat); } else { /* components == JB_WORDS */ /* Do the operations at about 150 ppi resolution. * It is much faster at 75 ppi, but the results are * more accurate at 150 ppi. This will segment the * words in body text. It can be expected that relatively * infrequent words in a larger font will be split. */ res = pixGetXRes(pixs); if (res <= 200) { redfactor = 1; pixt1 = pixClone(pixs); } else if (res <= 400) { redfactor = 2; pixt1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); } else { redfactor = 4; pixt1 = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); } /* Estimate the word mask, at aproximately 150 ppi. * This has both very large and very small components left in. */ pixWordMaskByDilation(pixt1, 8, &pixt2, NULL); /* Expand the optimally dilated word mask to full res. */ pixt3 = pixExpandReplicate(pixt2, redfactor); /* Pull out the pixels in pixs corresponding to the mask * components in pixt3. Note that above we used threshold * levels in the reduction of 1 to insure that the resulting * mask fully covers the input pixs. The downside of using * a threshold of 1 is that very close characters from adjacent * lines can be joined. But with a level of 2 or greater, * it is necessary to use a seedfill, followed by a pixOr(): * pixt4 = pixSeedfillBinary(NULL, pixt3, pixs, 8); * pixOr(pixt3, pixt3, pixt4); * to insure that the mask coverage is complete over pixs. */ boxa = pixConnComp(pixt3, &pixat, 4); pixa = pixaClipToPix(pixat, pixs); pixaDestroy(&pixat); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); } /* Remove large components, and save the results. */ *ppixad = pixaSelectBySize(pixa, maxwidth, maxheight, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); *pboxad = boxaSelectBySize(boxa, maxwidth, maxheight, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); pixaDestroy(&pixa); boxaDestroy(&boxa); return 0; } /*! * pixWordMaskByDilation() * * Input: pixs (1 bpp; typ. at 75 to 150 ppi) * maxdil (maximum dilation; 0 for default; warning if > 20) * &mask ( dilated word mask) * &size ( size of optimal horiz Sel) * Return: 0 if OK, 1 on error * * Notes: * (1) This gives a crude estimate of the word masks. See * pixWordBoxesByDilation() for further filtering of the word boxes. * (2) For 75 to 150 ppi, the optimal dilation will be between 5 and 11. * For 200 to 300 ppi, it is advisable to use a larger value * for @maxdil, say between 10 and 20. Setting maxdil <= 0 * results in a default dilation of 16. * (3) The best size for dilating to get word masks is optionally returned. */ l_int32 pixWordMaskByDilation(PIX *pixs, l_int32 maxdil, PIX **ppixm, l_int32 *psize) { l_int32 i, diffmin, ndiff, imin; l_int32 ncc[MAX_ALLOWED_DILATION + 1]; BOXA *boxa; NUMA *nacc, *nadiff; PIX *pix1, *pix2; PROCNAME("pixWordMaskByDilation"); if (ppixm) *ppixm = NULL; if (psize) *psize = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); if (!ppixm && !psize) return ERROR_INT("no output requested", procName, 1); /* Find the optimal dilation to create the word mask. * Look for successively increasing dilations where the * number of connected components doesn't decrease. * This is the situation where the components in the * word mask should properly cover each word. If the * input image had been 2x scaled, and you use 8 cc for * counting, every other differential count in the series * will be 0. We avoid this possibility by using 4 cc. */ diffmin = 1000000; pix1 = pixCopy(NULL, pixs); if (maxdil <= 0) maxdil = 16; /* default for 200 to 300 ppi */ maxdil = L_MIN(maxdil, MAX_ALLOWED_DILATION); if (maxdil > 20) L_WARNING("large dilation: exceeds 20\n", procName); nacc = numaCreate(maxdil + 1); nadiff = numaCreate(maxdil + 1); for (i = 0; i <= maxdil; i++) { if (i == 0) /* first one not dilated */ pix2 = pixCopy(NULL, pix1); else /* successive dilation by sel_2h */ pix2 = pixMorphSequence(pix1, "d2.1", 0); boxa = pixConnCompBB(pix2, 4); ncc[i] = boxaGetCount(boxa); numaAddNumber(nacc, ncc[i]); if (i > 0) { ndiff = ncc[i - 1] - ncc[i]; numaAddNumber(nadiff, ndiff); #if DEBUG_PLOT_CC fprintf(stderr, "ndiff[%d] = %d\n", i - 1, ndiff); #endif /* DEBUG_PLOT_CC */ /* Don't allow imin <= 2 with a 0 value of ndiff, * which is unlikely to happen. */ if (ndiff < diffmin && (ndiff > 0 || i > 2)) { imin = i; diffmin = ndiff; } } pixDestroy(&pix1); pix1 = pix2; boxaDestroy(&boxa); } pixDestroy(&pix1); if (psize) *psize = imin + 1; #if DEBUG_PLOT_CC {GPLOT *gplot; NUMA *naseq; L_INFO("Best dilation: %d\n", procName, imin); naseq = numaMakeSequence(1, 1, numaGetCount(nacc)); gplot = gplotCreate("/tmp/numcc", GPLOT_PNG, "Number of cc vs. horizontal dilation", "Sel horiz", "Number of cc"); gplotAddPlot(gplot, naseq, nacc, GPLOT_LINES, ""); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&naseq); naseq = numaMakeSequence(1, 1, numaGetCount(nadiff)); gplot = gplotCreate("/tmp/diffcc", GPLOT_PNG, "Diff count of cc vs. horizontal dilation", "Sel horiz", "Diff in cc"); gplotAddPlot(gplot, naseq, nadiff, GPLOT_LINES, ""); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&naseq); } #endif /* DEBUG_PLOT_CC */ /* Optionally, save the result of the optimal closing */ if (ppixm) { if (imin < 3) L_ERROR("imin = %d is too small\n", procName, imin); else *ppixm = pixCloseBrick(NULL, pixs, imin + 1, 1); } numaDestroy(&nacc); numaDestroy(&nadiff); return 0; } /*! * pixWordBoxesByDilation() * * Input: pixs (1 bpp; typ. at 75 to 150 ppi) * maxdil (maximum dilation; 0 for default; warning if > 20) * minwidth, minheight (of saved components; smaller are discarded) * maxwidth, maxheight (of saved components; larger are discarded) * &boxa ( dilated word mask) * &size ( size of optimal horiz Sel) * Return: 0 if OK, 1 on error * * Notes: * (1) Returns a pruned set of word boxes. * (2) See pixWordMaskByDilation(). */ l_int32 pixWordBoxesByDilation(PIX *pixs, l_int32 maxdil, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxa, l_int32 *psize) { BOXA *boxa1, *boxa2; PIX *pixm; PROCNAME("pixWordBoxesByDilation"); if (psize) *psize = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); if (!pboxa) return ERROR_INT("&boxa not defined", procName, 1); *pboxa = NULL; /* Make a first estimate of the word masks */ if (pixWordMaskByDilation(pixs, maxdil, &pixm, psize)) return ERROR_INT("pixWordMaskByDilation() failed", procName, 1); /* Prune it. Get the bounding boxes of the words. * Remove the small ones, which can be due to punctuation * that was not joined to a word. Also remove the large ones, * which are not likely to be words. */ boxa1 = pixConnComp(pixm, NULL, 8); boxa2 = boxaSelectBySize(boxa1, minwidth, minheight, L_SELECT_IF_BOTH, L_SELECT_IF_GTE, NULL); *pboxa = boxaSelectBySize(boxa2, maxwidth, maxheight, L_SELECT_IF_BOTH, L_SELECT_IF_LTE, NULL); boxaDestroy(&boxa1); boxaDestroy(&boxa2); pixDestroy(&pixm); return 0; } /*----------------------------------------------------------------------* * Build grayscale composites (templates) * *----------------------------------------------------------------------*/ /*! * jbAccumulateComposites() * * Input: pixaa (one pixa for each class) * &pna ( number of samples used to build each composite) * &ptat ( centroids of bordered composites) * Return: pixad (accumulated sum of samples in each class), * or null on error * */ PIXA * jbAccumulateComposites(PIXAA *pixaa, NUMA **pna, PTA **pptat) { l_int32 n, nt, i, j, d, minw, maxw, minh, maxh, xdiff, ydiff; l_float32 x, y, xave, yave; NUMA *na; PIX *pix, *pixt1, *pixt2, *pixsum; PIXA *pixa, *pixad; PTA *ptat, *pta; PROCNAME("jbAccumulateComposites"); if (!pptat) return (PIXA *)ERROR_PTR("&ptat not defined", procName, NULL); *pptat = NULL; if (!pna) return (PIXA *)ERROR_PTR("&na not defined", procName, NULL); *pna = NULL; if (!pixaa) return (PIXA *)ERROR_PTR("pixaa not defined", procName, NULL); n = pixaaGetCount(pixaa, NULL); if ((ptat = ptaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("ptat not made", procName, NULL); *pptat = ptat; pixad = pixaCreate(n); na = numaCreate(n); *pna = na; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(pixaa, i, L_CLONE); nt = pixaGetCount(pixa); numaAddNumber(na, nt); if (nt == 0) { L_WARNING("empty pixa found!\n", procName); pixaDestroy(&pixa); continue; } pixaSizeRange(pixa, &minw, &minh, &maxw, &maxh); pix = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pix); pixDestroy(&pix); pixt1 = pixCreate(maxw, maxh, d); pixsum = pixInitAccumulate(maxw, maxh, 0); pta = pixaCentroids(pixa); /* Find the average value of the centroids ... */ xave = yave = 0; for (j = 0; j < nt; j++) { ptaGetPt(pta, j, &x, &y); xave += x; yave += y; } xave = xave / (l_float32)nt; yave = yave / (l_float32)nt; /* and place all centroids at their average value */ for (j = 0; j < nt; j++) { pixt2 = pixaGetPix(pixa, j, L_CLONE); ptaGetPt(pta, j, &x, &y); xdiff = (l_int32)(x - xave); ydiff = (l_int32)(y - yave); pixClearAll(pixt1); pixRasterop(pixt1, xdiff, ydiff, maxw, maxh, PIX_SRC, pixt2, 0, 0); pixAccumulate(pixsum, pixt1, L_ARITH_ADD); pixDestroy(&pixt2); } pixaAddPix(pixad, pixsum, L_INSERT); ptaAddPt(ptat, xave, yave); pixaDestroy(&pixa); pixDestroy(&pixt1); ptaDestroy(&pta); } return pixad; } /*! * jbTemplatesFromComposites() * * Input: pixac (one pix of composites for each class) * na (number of samples used for each class composite) * Return: pixad (8 bpp templates for each class), or null on error * */ PIXA * jbTemplatesFromComposites(PIXA *pixac, NUMA *na) { l_int32 n, i; l_float32 nt; /* number of samples in the composite; always an integer */ l_float32 factor; PIX *pixsum; /* accumulated composite */ PIX *pixd; PIXA *pixad; PROCNAME("jbTemplatesFromComposites"); if (!pixac) return (PIXA *)ERROR_PTR("pixac not defined", procName, NULL); if (!na) return (PIXA *)ERROR_PTR("na not defined", procName, NULL); n = pixaGetCount(pixac); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixsum = pixaGetPix(pixac, i, L_COPY); /* changed internally */ numaGetFValue(na, i, &nt); factor = 255. / nt; pixMultConstAccumulate(pixsum, factor, 0); /* changes pixsum */ pixd = pixFinalAccumulate(pixsum, 0, 8); pixaAddPix(pixad, pixd, L_INSERT); pixDestroy(&pixsum); } return pixad; } /*----------------------------------------------------------------------* * jbig2 utility routines * *----------------------------------------------------------------------*/ /*! * jbClasserCreate() * * Input: method (JB_RANKHAUS, JB_CORRELATION) * components (JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS) * Return: jbclasser, or null on error */ JBCLASSER * jbClasserCreate(l_int32 method, l_int32 components) { JBCLASSER *classer; PROCNAME("jbClasserCreate"); if ((classer = (JBCLASSER *)CALLOC(1, sizeof(JBCLASSER))) == NULL) return (JBCLASSER *)ERROR_PTR("classer not made", procName, NULL); if (method != JB_RANKHAUS && method != JB_CORRELATION) return (JBCLASSER *)ERROR_PTR("invalid type", procName, NULL); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return (JBCLASSER *)ERROR_PTR("invalid type", procName, NULL); classer->method = method; classer->components = components; classer->nacomps = numaCreate(0); classer->pixaa = pixaaCreate(0); classer->pixat = pixaCreate(0); classer->pixatd = pixaCreate(0); classer->nafgt = numaCreate(0); classer->naarea = numaCreate(0); classer->ptac = ptaCreate(0); classer->ptact = ptaCreate(0); classer->naclass = numaCreate(0); classer->napage = numaCreate(0); classer->ptaul = ptaCreate(0); return classer; } /* * jbClasserDestroy() * * Input: &classer () * Return: void */ void jbClasserDestroy(JBCLASSER **pclasser) { JBCLASSER *classer; if (!pclasser) return; if ((classer = *pclasser) == NULL) return; sarrayDestroy(&classer->safiles); numaDestroy(&classer->nacomps); pixaaDestroy(&classer->pixaa); pixaDestroy(&classer->pixat); pixaDestroy(&classer->pixatd); numaHashDestroy(&classer->nahash); numaDestroy(&classer->nafgt); numaDestroy(&classer->naarea); ptaDestroy(&classer->ptac); ptaDestroy(&classer->ptact); numaDestroy(&classer->naclass); numaDestroy(&classer->napage); ptaDestroy(&classer->ptaul); ptaDestroy(&classer->ptall); FREE(classer); *pclasser = NULL; return; } /*! * jbDataSave() * * Input: jbclasser * latticew, latticeh (cell size used to store each * connected component in the composite) * Return: jbdata, or null on error * * Notes: * (1) This routine stores the jbig2-type data required for * generating a lossy jbig2 version of the image. * It can be losslessly written to (and read from) two files. * (2) It generates and stores the mosaic of templates. * (3) It clones the Numa and Pta arrays, so these must all * be destroyed by the caller. * (4) Input 0 to use the default values for latticew and/or latticeh, */ JBDATA * jbDataSave(JBCLASSER *classer) { l_int32 maxw, maxh; JBDATA *data; PIX *pix; PROCNAME("jbDataSave"); if (!classer) return (JBDATA *)ERROR_PTR("classer not defined", procName, NULL); /* Write the templates into an array. */ pixaSizeRange(classer->pixat, NULL, NULL, &maxw, &maxh); pix = pixaDisplayOnLattice(classer->pixat, maxw + 1, maxh + 1, NULL, NULL); if (!pix) return (JBDATA *)ERROR_PTR("data not made", procName, NULL); if ((data = (JBDATA *)CALLOC(1, sizeof(JBDATA))) == NULL) return (JBDATA *)ERROR_PTR("data not made", procName, NULL); data->pix = pix; data->npages = classer->npages; data->w = classer->w; data->h = classer->h; data->nclass = classer->nclass; data->latticew = maxw + 1; data->latticeh = maxh + 1; data->naclass = numaClone(classer->naclass); data->napage = numaClone(classer->napage); data->ptaul = ptaClone(classer->ptaul); return data; } /* * jbDataDestroy() * * Input: &data () * Return: void */ void jbDataDestroy(JBDATA **pdata) { JBDATA *data; if (!pdata) return; if ((data = *pdata) == NULL) return; pixDestroy(&data->pix); numaDestroy(&data->naclass); numaDestroy(&data->napage); ptaDestroy(&data->ptaul); FREE(data); *pdata = NULL; return; } /*! * jbDataWrite() * * Input: rootname (for output files; everything but the extension) * jbdata * Return: 0 if OK, 1 on error * * Notes: * (1) Serialization function that writes data in jbdata to file. */ l_int32 jbDataWrite(const char *rootout, JBDATA *jbdata) { char buf[L_BUF_SIZE]; l_int32 w, h, nclass, npages, cellw, cellh, ncomp, i, x, y, iclass, ipage; NUMA *naclass, *napage; PTA *ptaul; PIX *pixt; FILE *fp; PROCNAME("jbDataWrite"); if (!rootout) return ERROR_INT("no rootout", procName, 1); if (!jbdata) return ERROR_INT("no jbdata", procName, 1); npages = jbdata->npages; w = jbdata->w; h = jbdata->h; pixt = jbdata->pix; nclass = jbdata->nclass; cellw = jbdata->latticew; cellh = jbdata->latticeh; naclass = jbdata->naclass; napage = jbdata->napage; ptaul = jbdata->ptaul; snprintf(buf, L_BUF_SIZE, "%s%s", rootout, JB_TEMPLATE_EXT); pixWrite(buf, pixt, IFF_PNG); snprintf(buf, L_BUF_SIZE, "%s%s", rootout, JB_DATA_EXT); if ((fp = fopenWriteStream(buf, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); ncomp = ptaGetCount(ptaul); fprintf(fp, "jb data file\n"); fprintf(fp, "num pages = %d\n", npages); fprintf(fp, "page size: w = %d, h = %d\n", w, h); fprintf(fp, "num components = %d\n", ncomp); fprintf(fp, "num classes = %d\n", nclass); fprintf(fp, "template lattice size: w = %d, h = %d\n", cellw, cellh); for (i = 0; i < ncomp; i++) { numaGetIValue(napage, i, &ipage); numaGetIValue(naclass, i, &iclass); ptaGetIPt(ptaul, i, &x, &y); fprintf(fp, "%d %d %d %d\n", ipage, iclass, x, y); } fclose(fp); return 0; } /*! * jbDataRead() * * Input: rootname (for template and data files) * Return: jbdata, or NULL on error */ JBDATA * jbDataRead(const char *rootname) { char fname[L_BUF_SIZE]; char *linestr; l_uint8 *data; l_int32 nsa, i, w, h, cellw, cellh, x, y, iclass, ipage; l_int32 npages, nclass, ncomp; size_t size; JBDATA *jbdata; NUMA *naclass, *napage; PIX *pixs; PTA *ptaul; SARRAY *sa; PROCNAME("jbDataRead"); if (!rootname) return (JBDATA *)ERROR_PTR("rootname not defined", procName, NULL); snprintf(fname, L_BUF_SIZE, "%s%s", rootname, JB_TEMPLATE_EXT); if ((pixs = pixRead(fname)) == NULL) return (JBDATA *)ERROR_PTR("pix not read", procName, NULL); snprintf(fname, L_BUF_SIZE, "%s%s", rootname, JB_DATA_EXT); if ((data = l_binaryRead(fname, &size)) == NULL) return (JBDATA *)ERROR_PTR("data not read", procName, NULL); if ((sa = sarrayCreateLinesFromString((char *)data, 0)) == NULL) return (JBDATA *)ERROR_PTR("sa not made", procName, NULL); nsa = sarrayGetCount(sa); /* number of cc + 6 */ linestr = sarrayGetString(sa, 0, 0); if (strcmp(linestr, "jb data file")) return (JBDATA *)ERROR_PTR("invalid jb data file", procName, NULL); linestr = sarrayGetString(sa, 1, 0); sscanf(linestr, "num pages = %d", &npages); linestr = sarrayGetString(sa, 2, 0); sscanf(linestr, "page size: w = %d, h = %d", &w, &h); linestr = sarrayGetString(sa, 3, 0); sscanf(linestr, "num components = %d", &ncomp); linestr = sarrayGetString(sa, 4, 0); sscanf(linestr, "num classes = %d\n", &nclass); linestr = sarrayGetString(sa, 5, 0); sscanf(linestr, "template lattice size: w = %d, h = %d\n", &cellw, &cellh); #if 1 fprintf(stderr, "num pages = %d\n", npages); fprintf(stderr, "page size: w = %d, h = %d\n", w, h); fprintf(stderr, "num components = %d\n", ncomp); fprintf(stderr, "num classes = %d\n", nclass); fprintf(stderr, "template lattice size: w = %d, h = %d\n", cellw, cellh); #endif if ((naclass = numaCreate(ncomp)) == NULL) return (JBDATA *)ERROR_PTR("naclass not made", procName, NULL); if ((napage = numaCreate(ncomp)) == NULL) return (JBDATA *)ERROR_PTR("napage not made", procName, NULL); if ((ptaul = ptaCreate(ncomp)) == NULL) return (JBDATA *)ERROR_PTR("pta not made", procName, NULL); for (i = 6; i < nsa; i++) { linestr = sarrayGetString(sa, i, 0); sscanf(linestr, "%d %d %d %d\n", &ipage, &iclass, &x, &y); numaAddNumber(napage, ipage); numaAddNumber(naclass, iclass); ptaAddPt(ptaul, x, y); } if ((jbdata = (JBDATA *)CALLOC(1, sizeof(JBDATA))) == NULL) return (JBDATA *)ERROR_PTR("data not made", procName, NULL); jbdata->pix = pixs; jbdata->npages = npages; jbdata->w = w; jbdata->h = h; jbdata->nclass = nclass; jbdata->latticew = cellw; jbdata->latticeh = cellh; jbdata->naclass = naclass; jbdata->napage = napage; jbdata->ptaul = ptaul; FREE(data); sarrayDestroy(&sa); return jbdata; } /*! * jbDataRender() * * Input: jbdata * debugflag (if TRUE, writes into 2 bpp pix and adds * component outlines in color) * Return: pixa (reconstruction of original images, using templates) or * null on error */ PIXA * jbDataRender(JBDATA *data, l_int32 debugflag) { l_int32 i, w, h, cellw, cellh, x, y, iclass, ipage; l_int32 npages, nclass, ncomp, wp, hp; BOX *box; NUMA *naclass, *napage; PIX *pixt, *pixt2, *pix, *pixd; PIXA *pixat; /* pixa of templates */ PIXA *pixad; /* pixa of output images */ PIXCMAP *cmap; PTA *ptaul; PROCNAME("jbDataRender"); if (!data) return (PIXA *)ERROR_PTR("data not defined", procName, NULL); npages = data->npages; w = data->w; h = data->h; pixt = data->pix; nclass = data->nclass; cellw = data->latticew; cellh = data->latticeh; naclass = data->naclass; napage = data->napage; ptaul = data->ptaul; ncomp = numaGetCount(naclass); /* Reconstruct the original set of images from the templates * and the data associated with each component. First, * generate the output pixa as a set of empty pix. */ if ((pixad = pixaCreate(npages)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); for (i = 0; i < npages; i++) { if (debugflag == FALSE) { pix = pixCreate(w, h, 1); } else { pix = pixCreate(w, h, 2); cmap = pixcmapCreate(2); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixcmapAddColor(cmap, 255, 0, 0); /* for box outlines */ pixSetColormap(pix, cmap); } pixaAddPix(pixad, pix, L_INSERT); } /* Put the class templates into a pixa. */ if ((pixat = pixaCreateFromPix(pixt, nclass, cellw, cellh)) == NULL) return (PIXA *)ERROR_PTR("pixat not made", procName, NULL); /* Place each component in the right location on its page. */ for (i = 0; i < ncomp; i++) { numaGetIValue(napage, i, &ipage); numaGetIValue(naclass, i, &iclass); pix = pixaGetPix(pixat, iclass, L_CLONE); /* the template */ wp = pixGetWidth(pix); hp = pixGetHeight(pix); ptaGetIPt(ptaul, i, &x, &y); pixd = pixaGetPix(pixad, ipage, L_CLONE); /* the output page */ if (debugflag == FALSE) { pixRasterop(pixd, x, y, wp, hp, PIX_SRC | PIX_DST, pix, 0, 0); } else { pixt2 = pixConvert1To2Cmap(pix); pixRasterop(pixd, x, y, wp, hp, PIX_SRC | PIX_DST, pixt2, 0, 0); box = boxCreate(x, y, wp, hp); pixRenderBoxArb(pixd, box, 1, 255, 0, 0); pixDestroy(&pixt2); boxDestroy(&box); } pixDestroy(&pix); /* the clone only */ pixDestroy(&pixd); /* the clone only */ } pixaDestroy(&pixat); return pixad; } /*! * jbGetULCorners() * * Input: jbclasser * pixs (full res image) * boxa (of c.c. bounding rectangles for this page) * Return: 0 if OK, 1 on error * * Notes: * (1) This computes the ptaul field, which has the global UL corners, * adjusted for each specific component, so that each component * can be replaced by the template for its class and have the * centroid in the template in the same position as the * centroid of the original connected component. It is important * that this be done properly to avoid a wavy baseline in the * result. * (2) The array fields ptac and ptact give the centroids of * those components relative to the UL corner of each component. * Here, we compute the difference in each component, round to * nearest integer, and correct the box->x and box->y by * the appropriate integral difference. * (3) The templates and stored instances are all bordered. */ l_int32 jbGetULCorners(JBCLASSER *classer, PIX *pixs, BOXA *boxa) { l_int32 i, baseindex, index, n, iclass, idelx, idely, x, y, dx, dy; l_int32 *sumtab; l_float32 x1, x2, y1, y2, delx, dely; BOX *box; NUMA *naclass; PIX *pixt; PTA *ptac, *ptact, *ptaul; PROCNAME("jbGetULCorners"); if (!classer) return ERROR_INT("classer not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); ptaul = classer->ptaul; naclass = classer->naclass; ptac = classer->ptac; ptact = classer->ptact; baseindex = classer->baseindex; /* num components before this page */ sumtab = makePixelSumTab8(); for (i = 0; i < n; i++) { index = baseindex + i; ptaGetPt(ptac, index, &x1, &y1); numaGetIValue(naclass, index, &iclass); ptaGetPt(ptact, iclass, &x2, &y2); delx = x2 - x1; dely = y2 - y1; if (delx >= 0) idelx = (l_int32)(delx + 0.5); else idelx = (l_int32)(delx - 0.5); if (dely >= 0) idely = (l_int32)(dely + 0.5); else idely = (l_int32)(dely - 0.5); if ((box = boxaGetBox(boxa, i, L_CLONE)) == NULL) return ERROR_INT("box not found", procName, 1); boxGetGeometry(box, &x, &y, NULL, NULL); /* Get final increments dx and dy for best alignment */ pixt = pixaGetPix(classer->pixat, iclass, L_CLONE); finalPositioningForAlignment(pixs, x, y, idelx, idely, pixt, sumtab, &dx, &dy); /* if (i % 20 == 0) fprintf(stderr, "dx = %d, dy = %d\n", dx, dy); */ ptaAddPt(ptaul, x - idelx + dx, y - idely + dy); boxDestroy(&box); pixDestroy(&pixt); } FREE(sumtab); return 0; } /*! * jbGetLLCorners() * * Input: jbclasser * Return: 0 if OK, 1 on error * * Notes: * (1) This computes the ptall field, which has the global LL corners, * adjusted for each specific component, so that each component * can be replaced by the template for its class and have the * centroid in the template in the same position as the * centroid of the original connected component. It is important * that this be done properly to avoid a wavy baseline in the result. * (2) It is computed here from the corresponding UL corners, where * the input templates and stored instances are all bordered. * This should be done after all pages have been processed. * (3) For proper substitution, the templates whose LL corners are * placed in these locations must be UN-bordered. * This is available for a realistic jbig2 encoder, which would * (1) encode each template without a border, and (2) encode * the position using the LL corner (rather than the UL * corner) because the difference between y-values * of successive instances is typically close to zero. */ l_int32 jbGetLLCorners(JBCLASSER *classer) { l_int32 i, iclass, n, x1, y1, h; NUMA *naclass; PIX *pix; PIXA *pixat; PTA *ptaul, *ptall; PROCNAME("jbGetLLCorners"); if (!classer) return ERROR_INT("classer not defined", procName, 1); ptaul = classer->ptaul; naclass = classer->naclass; pixat = classer->pixat; ptaDestroy(&classer->ptall); n = ptaGetCount(ptaul); ptall = ptaCreate(n); classer->ptall = ptall; /* If the templates were bordered, we would add h - 1 to the UL * corner y-value. However, because the templates to be used * here have their borders removed, and the borders are * JB_ADDED_PIXELS on each side, we add h - 1 - 2 * JB_ADDED_PIXELS * to the UL corner y-value. */ for (i = 0; i < n; i++) { ptaGetIPt(ptaul, i, &x1, &y1); numaGetIValue(naclass, i, &iclass); pix = pixaGetPix(pixat, iclass, L_CLONE); h = pixGetHeight(pix); ptaAddPt(ptall, x1, y1 + h - 1 - 2 * JB_ADDED_PIXELS); pixDestroy(&pix); } return 0; } /*----------------------------------------------------------------------* * Static helpers * *----------------------------------------------------------------------*/ /* When looking for similar matches we check templates whose size is +/- 2 in * each direction. This involves 25 possible sizes. This array contains the * offsets for each of those positions in a spiral pattern. There are 25 pairs * of numbers in this array: even positions are x values. */ static int two_by_two_walk[50] = { 0, 0, 0, 1, -1, 0, 0, -1, 1, 0, -1, 1, 1, 1, -1, -1, 1, -1, 0, -2, 2, 0, 0, 2, -2, 0, -1, -2, 1, -2, 2, -1, 2, 1, 1, 2, -1, 2, -2, 1, -2, -1, -2, -2, 2, -2, 2, 2, -2, 2}; /*! * findSimilarSizedTemplatesInit() * * Input: classer * pixs (instance to be matched) * Return: Allocated context to be used with findSimilar* */ static JBFINDCTX * findSimilarSizedTemplatesInit(JBCLASSER *classer, PIX *pixs) { JBFINDCTX *state; state = (JBFINDCTX *)CALLOC(1, sizeof(JBFINDCTX)); state->w = pixGetWidth(pixs) - 2 * JB_ADDED_PIXELS; state->h = pixGetHeight(pixs) - 2 * JB_ADDED_PIXELS; state->classer = classer; return state; } static void findSimilarSizedTemplatesDestroy(JBFINDCTX **pstate) { JBFINDCTX *state; PROCNAME("findSimilarSizedTemplatesDestroy"); if (pstate == NULL) { L_WARNING("ptr address is null\n", procName); return; } if ((state = *pstate) == NULL) return; numaDestroy(&state->numa); FREE(state); *pstate = NULL; return; } /*! * findSimilarSizedTemplatesNext() * * Input: state (from findSimilarSizedTemplatesInit) * Return: Next template number, or -1 when finished * * We have a hash table mapping template area to a list of template * numbers with that area. We wish to find similar sized templates, * so we first look for templates with the same width and height, and * then with width + 1, etc. This walk is guided by the * two_by_two_walk array, above. * * We don't want to have to collect the whole list of templates first because * (we hope) to find it quickly. So we keep the context for this walk in an * explictit state structure and this function acts like a generator. */ static l_int32 findSimilarSizedTemplatesNext(JBFINDCTX *state) { l_int32 desiredh, desiredw, size, templ; PIX *pixt; while(1) { /* Continue the walk over step 'i' */ if (state->i >= 25) { /* all done */ return -1; } desiredw = state->w + two_by_two_walk[2 * state->i]; desiredh = state->h + two_by_two_walk[2 * state->i + 1]; if (desiredh < 1 || desiredw < 1) { /* invalid size */ state->i++; continue; } if (!state->numa) { /* We have yet to start walking the array for the step 'i' */ state->numa = numaHashGetNuma(state->classer->nahash, desiredh * desiredw); if (!state->numa) { /* nothing there */ state->i++; continue; } state->n = 0; /* OK, we got a numa. */ } /* Continue working on this numa */ size = numaGetCount(state->numa); for ( ; state->n < size; ) { templ = (l_int32)(state->numa->array[state->n++] + 0.5); pixt = pixaGetPix(state->classer->pixat, templ, L_CLONE); if (pixGetWidth(pixt) - 2 * JB_ADDED_PIXELS == desiredw && pixGetHeight(pixt) - 2 * JB_ADDED_PIXELS == desiredh) { pixDestroy(&pixt); return templ; } pixDestroy(&pixt); } /* Exhausted the numa; take another step and try again */ state->i++; numaDestroy(&state->numa); continue; } } /*! * finalPositioningForAlignment() * * Input: pixs (input page image) * x, y (location of UL corner of bb of component in pixs) * idelx, idely (compensation to match centroids of component * and template) * pixt (template, with JB_ADDED_PIXELS of padding on all sides) * sumtab (for summing fg pixels in an image) * &dx, &dy (return delta on position for best match; each * one is in the set {-1, 0, 1}) * Return: 0 if OK, 1 on error * */ static l_int32 finalPositioningForAlignment(PIX *pixs, l_int32 x, l_int32 y, l_int32 idelx, l_int32 idely, PIX *pixt, l_int32 *sumtab, l_int32 *pdx, l_int32 *pdy) { l_int32 w, h, i, j, minx, miny, count, mincount; PIX *pixi; /* clipped from source pixs */ PIX *pixr; /* temporary storage */ BOX *box; PROCNAME("finalPositioningForAlignment"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixt) return ERROR_INT("pixt not defined", procName, 1); if (!pdx || !pdy) return ERROR_INT("&dx and &dy not both defined", procName, 1); if (!sumtab) return ERROR_INT("sumtab not defined", procName, 1); *pdx = *pdy = 0; /* Use JB_ADDED_PIXELS pixels padding on each side */ w = pixGetWidth(pixt); h = pixGetHeight(pixt); box = boxCreate(x - idelx - JB_ADDED_PIXELS, y - idely - JB_ADDED_PIXELS, w, h); pixi = pixClipRectangle(pixs, box, NULL); boxDestroy(&box); if (!pixi) return ERROR_INT("pixi not made", procName, 1); pixr = pixCreate(pixGetWidth(pixi), pixGetHeight(pixi), 1); mincount = 0x7fffffff; for (i = -1; i <= 1; i++) { for (j = -1; j <= 1; j++) { pixCopy(pixr, pixi); pixRasterop(pixr, j, i, w, h, PIX_SRC ^ PIX_DST, pixt, 0, 0); pixCountPixels(pixr, &count, sumtab); if (count < mincount) { minx = j; miny = i; mincount = count; } } } pixDestroy(&pixi); pixDestroy(&pixr); *pdx = minx; *pdy = miny; return 0; } leptonica-1.70/src/skew.c0000644000175000017500000013375512252644466013442 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * skew.c * * Top-level deskew interfaces * PIX *pixDeskew() * PIX *pixFindSkewAndDeskew() * PIX *pixDeskewGeneral() * * Top-level angle-finding interface * l_int32 pixFindSkew() * * Basic angle-finding functions * l_int32 pixFindSkewSweep() * l_int32 pixFindSkewSweepAndSearch() * l_int32 pixFindSkewSweepAndSearchScore() * l_int32 pixFindSkewSweepAndSearchScorePivot() * * Search over arbitrary range of angles in orthogonal directions * l_int32 pixFindSkewOrthogonalRange() * * Differential square sum function for scoring * l_int32 pixFindDifferentialSquareSum() * * Measures of variance of row sums * l_int32 pixFindNormalizedSquareSum() * * * ============================================================== * Page skew detection * * Skew is determined by pixel profiles, which are computed * as pixel sums along the raster line for each line in the * image. By vertically shearing the image by a given angle, * the sums can be computed quickly along the raster lines * rather than along lines at that angle. The score is * computed from these line sums by taking the square of * the DIFFERENCE between adjacent line sums, summed over * all lines. The skew angle is then found as the angle * that maximizes the score. The actual computation for * any sheared image is done in the function * pixFindDifferentialSquareSum(). * * The search for the angle that maximizes this score is * most efficiently performed by first sweeping coarsely * over angles, using a significantly reduced image (say, 4x * reduction), to find the approximate maximum within a half * degree or so, and then doing an interval-halving binary * search at higher resolution to get the skew angle to * within 1/20 degree or better. * * The differential signal is used (rather than just using * that variance of line sums) because it rejects the * background noise due to total number of black pixels, * and has maximum contributions from the baselines and * x-height lines of text when the textlines are aligned * with the raster lines. It also works well in multicolumn * pages where the textlines do not line up across columns. * * The method is fast, accurate to within an angle (in radians) * of approximately the inverse width in pixels of the image, * and will work on a surprisingly small amount of text data * (just a couple of text lines). Consequently, it can * also be used to find local skew if the skew were to vary * significantly over the page. Local skew determination * is not very important except for locating lines of * handwritten text that may be mixed with printed text. */ #include #include "allheaders.h" /* Default sweep angle parameters for pixFindSkew() */ static const l_float32 DEFAULT_SWEEP_RANGE = 7.; /* degrees */ static const l_float32 DEFAULT_SWEEP_DELTA = 1.; /* degrees */ /* Default final angle difference parameter for binary * search in pixFindSkew(). The expected accuracy is * not better than the inverse image width in pixels, * say, 1/2000 radians, or about 0.03 degrees. */ static const l_float32 DEFAULT_MINBS_DELTA = 0.01; /* degrees */ /* Default scale factors for pixFindSkew() */ static const l_int32 DEFAULT_SWEEP_REDUCTION = 4; /* sweep part; 4 is good */ static const l_int32 DEFAULT_BS_REDUCTION = 2; /* binary search part */ /* Minimum angle for deskewing in pixDeskew() */ static const l_float32 MIN_DESKEW_ANGLE = 0.1; /* degree */ /* Minimum allowed confidence (ratio) for deskewing in pixDeskew() */ static const l_float32 MIN_ALLOWED_CONFIDENCE = 3.0; /* Minimum allowed maxscore to give nonzero confidence */ static const l_int32 MIN_VALID_MAXSCORE = 10000; /* Constant setting threshold for minimum allowed minscore * to give nonzero confidence; multiply this constant by * (height * width^2) */ static const l_float32 MINSCORE_THRESHOLD_CONSTANT = 0.000002; /* Default binarization threshold value */ static const l_int32 DEFAULT_BINARY_THRESHOLD = 130; #ifndef NO_CONSOLE_IO #define DEBUG_PRINT_SCORES 0 #define DEBUG_PRINT_SWEEP 0 #define DEBUG_PRINT_BINARY 0 #define DEBUG_PRINT_ORTH 0 #define DEBUG_THRESHOLD 0 #define DEBUG_PLOT_SCORES 0 #endif /* ~NO_CONSOLE_IO */ /*-----------------------------------------------------------------------* * Top-level deskew interfaces * *-----------------------------------------------------------------------*/ /*! * pixDeskew() * * Input: pixs (any depth) * redsearch (for binary search: reduction factor = 1, 2 or 4; * use 0 for default) * Return: pixd (deskewed pix), or null on error * * Notes: * (1) This binarizes if necessary and finds the skew angle. If the * angle is large enough and there is sufficient confidence, * it returns a deskewed image; otherwise, it returns a clone. */ PIX * pixDeskew(PIX *pixs, l_int32 redsearch) { PROCNAME("pixDeskew"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (redsearch == 0) redsearch = DEFAULT_BS_REDUCTION; else if (redsearch != 1 && redsearch != 2 && redsearch != 4) return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", procName, NULL); return pixDeskewGeneral(pixs, 0, 0.0, 0.0, redsearch, 0, NULL, NULL); } /*! * pixFindSkewAndDeskew() * * Input: pixs (any depth) * redsearch (for binary search: reduction factor = 1, 2 or 4; * use 0 for default) * &angle ( angle required to deskew, * in degrees; use NULL to skip) * &conf ( conf value is ratio * of max/min scores; use NULL to skip) * Return: pixd (deskewed pix), or null on error * * Notes: * (1) This binarizes if necessary and finds the skew angle. If the * angle is large enough and there is sufficient confidence, * it returns a deskewed image; otherwise, it returns a clone. */ PIX * pixFindSkewAndDeskew(PIX *pixs, l_int32 redsearch, l_float32 *pangle, l_float32 *pconf) { PROCNAME("pixFindSkewAndDeskew"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (redsearch == 0) redsearch = DEFAULT_BS_REDUCTION; else if (redsearch != 1 && redsearch != 2 && redsearch != 4) return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", procName, NULL); return pixDeskewGeneral(pixs, 0, 0.0, 0.0, redsearch, 0, pangle, pconf); } /*! * pixDeskewGeneral() * * Input: pixs (any depth) * redsweep (for linear search: reduction factor = 1, 2 or 4; * use 0 for default) * sweeprange (in degrees in each direction from 0; * use 0.0 for default) * sweepdelta (in degrees; use 0.0 for default) * redsearch (for binary search: reduction factor = 1, 2 or 4; * use 0 for default;) * thresh (for binarizing the image; use 0 for default) * &angle ( angle required to deskew, * in degrees; use NULL to skip) * &conf ( conf value is ratio * of max/min scores; use NULL to skip) * Return: pixd (deskewed pix), or null on error * * Notes: * (1) This binarizes if necessary and finds the skew angle. If the * angle is large enough and there is sufficient confidence, * it returns a deskewed image; otherwise, it returns a clone. */ PIX * pixDeskewGeneral(PIX *pixs, l_int32 redsweep, l_float32 sweeprange, l_float32 sweepdelta, l_int32 redsearch, l_int32 thresh, l_float32 *pangle, l_float32 *pconf) { l_int32 ret, depth; l_float32 angle, conf, deg2rad; PIX *pixb, *pixd; PROCNAME("pixDeskewGeneral"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (redsweep == 0) redsweep = DEFAULT_SWEEP_REDUCTION; else if (redsweep != 1 && redsweep != 2 && redsweep != 4) return (PIX *)ERROR_PTR("redsweep not in {1,2,4}", procName, NULL); if (sweeprange == 0.0) sweeprange = DEFAULT_SWEEP_RANGE; if (sweepdelta == 0.0) sweepdelta = DEFAULT_SWEEP_DELTA; if (redsearch == 0) redsearch = DEFAULT_BS_REDUCTION; else if (redsearch != 1 && redsearch != 2 && redsearch != 4) return (PIX *)ERROR_PTR("redsearch not in {1,2,4}", procName, NULL); if (thresh == 0) thresh = DEFAULT_BINARY_THRESHOLD; deg2rad = 3.1415926535 / 180.; /* Binarize if necessary */ depth = pixGetDepth(pixs); if (depth == 1) pixb = pixClone(pixs); else pixb = pixConvertTo1(pixs, thresh); /* Use the 1 bpp image to find the skew */ ret = pixFindSkewSweepAndSearch(pixb, &angle, &conf, redsweep, redsearch, sweeprange, sweepdelta, DEFAULT_MINBS_DELTA); pixDestroy(&pixb); if (pangle) *pangle = angle; if (pconf) *pconf = conf; if (ret) return pixClone(pixs); if (L_ABS(angle) < MIN_DESKEW_ANGLE || conf < MIN_ALLOWED_CONFIDENCE) return pixClone(pixs); if ((pixd = pixRotate(pixs, deg2rad * angle, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0)) == NULL) return pixClone(pixs); else return pixd; } /*-----------------------------------------------------------------------* * Simple top-level angle-finding interface * *-----------------------------------------------------------------------*/ /*! * pixFindSkew() * * Input: pixs (1 bpp) * &angle ( angle required to deskew, in degrees) * &conf ( confidence value is ratio max/min scores) * Return: 0 if OK, 1 on error or if angle measurment not valid * * Notes: * (1) This is a simple high-level interface, that uses default * values of the parameters for reasonable speed and accuracy. * (2) The angle returned is the negative of the skew angle of * the image. It is the angle required for deskew. * Clockwise rotations are positive angles. */ l_int32 pixFindSkew(PIX *pixs, l_float32 *pangle, l_float32 *pconf) { PROCNAME("pixFindSkew"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", procName, 1); if (!pangle) return ERROR_INT("&angle not defined", procName, 1); if (!pconf) return ERROR_INT("&conf not defined", procName, 1); return pixFindSkewSweepAndSearch(pixs, pangle, pconf, DEFAULT_SWEEP_REDUCTION, DEFAULT_BS_REDUCTION, DEFAULT_SWEEP_RANGE, DEFAULT_SWEEP_DELTA, DEFAULT_MINBS_DELTA); } /*-----------------------------------------------------------------------* * Basic angle-finding functions * *-----------------------------------------------------------------------*/ /*! * pixFindSkewSweep() * * Input: pixs (1 bpp) * &angle ( angle required to deskew, in degrees) * reduction (factor = 1, 2, 4 or 8) * sweeprange (half the full range; assumed about 0; in degrees) * sweepdelta (angle increment of sweep; in degrees) * Return: 0 if OK, 1 on error or if angle measurment not valid * * Notes: * (1) This examines the 'score' for skew angles with equal intervals. * (2) Caller must check the return value for validity of the result. */ l_int32 pixFindSkewSweep(PIX *pixs, l_float32 *pangle, l_int32 reduction, l_float32 sweeprange, l_float32 sweepdelta) { l_int32 ret, bzero, i, nangles; l_float32 deg2rad, theta; l_float32 sum, maxscore, maxangle; NUMA *natheta, *nascore; PIX *pix, *pixt; PROCNAME("pixFindSkewSweep"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", procName, 1); if (!pangle) return ERROR_INT("&angle not defined", procName, 1); if (reduction != 1 && reduction != 2 && reduction != 4 && reduction != 8) return ERROR_INT("reduction must be in {1,2,4,8}", procName, 1); *pangle = 0.0; /* init */ deg2rad = 3.1415926535 / 180.; ret = 0; /* Generate reduced image, if requested */ if (reduction == 1) pix = pixClone(pixs); else if (reduction == 2) pix = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); else if (reduction == 4) pix = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); else /* reduction == 8 */ pix = pixReduceRankBinaryCascade(pixs, 1, 1, 2, 0); pixZero(pix, &bzero); if (bzero) { pixDestroy(&pix); return 1; } nangles = (l_int32)((2. * sweeprange) / sweepdelta + 1); natheta = numaCreate(nangles); nascore = numaCreate(nangles); pixt = pixCreateTemplate(pix); if (!pix || !pixt) { ret = ERROR_INT("pix and pixt not both made", procName, 1); goto cleanup; } if (!natheta || !nascore) { ret = ERROR_INT("natheta and nascore not both made", procName, 1); goto cleanup; } for (i = 0; i < nangles; i++) { theta = -sweeprange + i * sweepdelta; /* degrees */ /* Shear pix about the UL corner and put the result in pixt */ pixVShearCorner(pixt, pix, deg2rad * theta, L_BRING_IN_WHITE); /* Get score */ pixFindDifferentialSquareSum(pixt, &sum); #if DEBUG_PRINT_SCORES L_INFO("sum(%7.2f) = %7.0f\n", procName, theta, sum); #endif /* DEBUG_PRINT_SCORES */ /* Save the result in the output arrays */ numaAddNumber(nascore, sum); numaAddNumber(natheta, theta); } /* Find the location of the maximum (i.e., the skew angle) * by fitting the largest data point and its two neighbors * to a quadratic, using lagrangian interpolation. */ numaFitMax(nascore, &maxscore, natheta, &maxangle); *pangle = maxangle; #if DEBUG_PRINT_SWEEP L_INFO(" From sweep: angle = %7.3f, score = %7.3f\n", procName, maxangle, maxscore); #endif /* DEBUG_PRINT_SWEEP */ #if DEBUG_PLOT_SCORES /* Plot the result -- the scores versus rotation angle -- * using gnuplot with GPLOT_LINES (lines connecting data points). * The GPLOT data structure is first created, with the * appropriate data incorporated from the two input NUMAs, * and then the function gplotMakeOutput() uses gnuplot to * generate the output plot. This can be either a .png file * or a .ps file, depending on whether you use GPLOT_PNG * or GPLOT_PS. */ {GPLOT *gplot; gplot = gplotCreate("sweep_output", GPLOT_PNG, "Sweep. Variance of difference of ON pixels vs. angle", "angle (deg)", "score"); gplotAddPlot(gplot, natheta, nascore, GPLOT_LINES, "plot1"); gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot2"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } #endif /* DEBUG_PLOT_SCORES */ cleanup: pixDestroy(&pix); pixDestroy(&pixt); numaDestroy(&nascore); numaDestroy(&natheta); return ret; } /*! * pixFindSkewSweepAndSearch() * * Input: pixs (1 bpp) * &angle ( angle required to deskew; in degrees) * &conf ( confidence given by ratio of max/min score) * redsweep (sweep reduction factor = 1, 2, 4 or 8) * redsearch (binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep) * sweeprange (half the full range, assumed about 0; in degrees) * sweepdelta (angle increment of sweep; in degrees) * minbsdelta (min binary search increment angle; in degrees) * Return: 0 if OK, 1 on error or if angle measurment not valid * * Notes: * (1) This finds the skew angle, doing first a sweep through a set * of equal angles, and then doing a binary search until * convergence. * (2) Caller must check the return value for validity of the result. * (3) In computing the differential line sum variance score, we sum * the result over scanlines, but we always skip: * - at least one scanline * - not more than 10% of the image height * - not more than 5% of the image width * (4) See also notes in pixFindSkewSweepAndSearchScore() */ l_int32 pixFindSkewSweepAndSearch(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta) { return pixFindSkewSweepAndSearchScore(pixs, pangle, pconf, NULL, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta); } /*! * pixFindSkewSweepAndSearchScore() * * Input: pixs (1 bpp) * &angle ( angle required to deskew; in degrees) * &conf ( confidence given by ratio of max/min score) * &endscore ( max score; use NULL to ignore) * redsweep (sweep reduction factor = 1, 2, 4 or 8) * redsearch (binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep) * sweepcenter (angle about which sweep is performed; in degrees) * sweeprange (half the full range, taken about sweepcenter; * in degrees) * sweepdelta (angle increment of sweep; in degrees) * minbsdelta (min binary search increment angle; in degrees) * Return: 0 if OK, 1 on error or if angle measurment not valid * * Notes: * (1) This finds the skew angle, doing first a sweep through a set * of equal angles, and then doing a binary search until convergence. * (2) There are two built-in constants that determine if the * returned confidence is nonzero: * - MIN_VALID_MAXSCORE (minimum allowed maxscore) * - MINSCORE_THRESHOLD_CONSTANT (determines minimum allowed * minscore, by multiplying by (height * width^2) * If either of these conditions is not satisfied, the returned * confidence value will be zero. The maxscore is optionally * returned in this function to allow evaluation of the * resulting angle by a method that is independent of the * returned confidence value. * (3) The larger the confidence value, the greater the probability * that the proper alignment is given by the angle that maximizes * variance. It should be compared to a threshold, which depends * on the application. Values between 3.0 and 6.0 are common. * (4) By default, the shear is about the UL corner. */ l_int32 pixFindSkewSweepAndSearchScore(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta) { return pixFindSkewSweepAndSearchScorePivot(pixs, pangle, pconf, pendscore, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta, L_SHEAR_ABOUT_CORNER); } /*! * pixFindSkewSweepAndSearchScorePivot() * * Input: pixs (1 bpp) * &angle ( angle required to deskew; in degrees) * &conf ( confidence given by ratio of max/min score) * &endscore ( max score; use NULL to ignore) * redsweep (sweep reduction factor = 1, 2, 4 or 8) * redsearch (binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep) * sweepcenter (angle about which sweep is performed; in degrees) * sweeprange (half the full range, taken about sweepcenter; * in degrees) * sweepdelta (angle increment of sweep; in degrees) * minbsdelta (min binary search increment angle; in degrees) * pivot (L_SHEAR_ABOUT_CORNER, L_SHEAR_ABOUT_CENTER) * Return: 0 if OK, 1 on error or if angle measurment not valid * * Notes: * (1) See notes in pixFindSkewSweepAndSearchScore(). * (2) This allows choice of shear pivoting from either the UL corner * or the center. For small angles, the ability to discriminate * angles is better with shearing from the UL corner. However, * for large angles (say, greater than 20 degrees), it is better * to shear about the center because a shear from the UL corner * loses too much of the image. */ l_int32 pixFindSkewSweepAndSearchScorePivot(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_float32 *pendscore, l_int32 redsweep, l_int32 redsearch, l_float32 sweepcenter, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_int32 pivot) { l_int32 ret, bzero, i, nangles, n, ratio, maxindex, minloc; l_int32 width, height; l_float32 deg2rad, theta, delta; l_float32 sum, maxscore, maxangle; l_float32 centerangle, leftcenterangle, rightcenterangle; l_float32 lefttemp, righttemp; l_float32 bsearchscore[5]; l_float32 minscore, minthresh; l_float32 rangeleft; NUMA *natheta, *nascore; PIX *pixsw, *pixsch, *pixt1, *pixt2; PROCNAME("pixFindSkewSweepAndSearchScorePivot"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", procName, 1); if (!pangle) return ERROR_INT("&angle not defined", procName, 1); if (!pconf) return ERROR_INT("&conf not defined", procName, 1); if (redsweep != 1 && redsweep != 2 && redsweep != 4 && redsweep != 8) return ERROR_INT("redsweep must be in {1,2,4,8}", procName, 1); if (redsearch != 1 && redsearch != 2 && redsearch != 4 && redsearch != 8) return ERROR_INT("redsearch must be in {1,2,4,8}", procName, 1); if (redsearch > redsweep) return ERROR_INT("redsearch must not exceed redsweep", procName, 1); if (pivot != L_SHEAR_ABOUT_CORNER && pivot != L_SHEAR_ABOUT_CENTER) return ERROR_INT("invalid pivot", procName, 1); *pangle = 0.0; *pconf = 0.0; deg2rad = 3.1415926535 / 180.; ret = 0; /* Generate reduced image for binary search, if requested */ if (redsearch == 1) pixsch = pixClone(pixs); else if (redsearch == 2) pixsch = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); else if (redsearch == 4) pixsch = pixReduceRankBinaryCascade(pixs, 1, 1, 0, 0); else /* redsearch == 8 */ pixsch = pixReduceRankBinaryCascade(pixs, 1, 1, 2, 0); pixZero(pixsch, &bzero); if (bzero) { pixDestroy(&pixsch); return 1; } /* Generate reduced image for sweep, if requested */ ratio = redsweep / redsearch; if (ratio == 1) { pixsw = pixClone(pixsch); } else { /* ratio > 1 */ if (ratio == 2) pixsw = pixReduceRankBinaryCascade(pixsch, 1, 0, 0, 0); else if (ratio == 4) pixsw = pixReduceRankBinaryCascade(pixsch, 1, 2, 0, 0); else /* ratio == 8 */ pixsw = pixReduceRankBinaryCascade(pixsch, 1, 2, 2, 0); } pixt1 = pixCreateTemplate(pixsw); if (ratio == 1) pixt2 = pixClone(pixt1); else pixt2 = pixCreateTemplate(pixsch); nangles = (l_int32)((2. * sweeprange) / sweepdelta + 1); natheta = numaCreate(nangles); nascore = numaCreate(nangles); if (!pixsch || !pixsw) { ret = ERROR_INT("pixsch and pixsw not both made", procName, 1); goto cleanup; } if (!pixt1 || !pixt2) { ret = ERROR_INT("pixt1 and pixt2 not both made", procName, 1); goto cleanup; } if (!natheta || !nascore) { ret = ERROR_INT("natheta and nascore not both made", procName, 1); goto cleanup; } /* Do sweep */ rangeleft = sweepcenter - sweeprange; for (i = 0; i < nangles; i++) { theta = rangeleft + i * sweepdelta; /* degrees */ /* Shear pix and put the result in pixt1 */ if (pivot == L_SHEAR_ABOUT_CORNER) pixVShearCorner(pixt1, pixsw, deg2rad * theta, L_BRING_IN_WHITE); else pixVShearCenter(pixt1, pixsw, deg2rad * theta, L_BRING_IN_WHITE); /* Get score */ pixFindDifferentialSquareSum(pixt1, &sum); #if DEBUG_PRINT_SCORES L_INFO("sum(%7.2f) = %7.0f\n", procName, theta, sum); #endif /* DEBUG_PRINT_SCORES */ /* Save the result in the output arrays */ numaAddNumber(nascore, sum); numaAddNumber(natheta, theta); } /* Find the largest of the set (maxscore at maxangle) */ numaGetMax(nascore, &maxscore, &maxindex); numaGetFValue(natheta, maxindex, &maxangle); #if DEBUG_PRINT_SWEEP L_INFO(" From sweep: angle = %7.3f, score = %7.3f\n", procName, maxangle, maxscore); #endif /* DEBUG_PRINT_SWEEP */ #if DEBUG_PLOT_SCORES /* Plot the sweep result -- the scores versus rotation angle -- * using gnuplot with GPLOT_LINES (lines connecting data points). */ {GPLOT *gplot; gplot = gplotCreate("sweep_output", GPLOT_PNG, "Sweep. Variance of difference of ON pixels vs. angle", "angle (deg)", "score"); gplotAddPlot(gplot, natheta, nascore, GPLOT_LINES, "plot1"); gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot2"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } #endif /* DEBUG_PLOT_SCORES */ /* Check if the max is at the end of the sweep. */ n = numaGetCount(natheta); if (maxindex == 0 || maxindex == n - 1) { L_WARNING("max found at sweep edge\n", procName); goto cleanup; } /* Empty the numas for re-use */ numaEmpty(nascore); numaEmpty(natheta); /* Do binary search to find skew angle. * First, set up initial three points. */ centerangle = maxangle; if (pivot == L_SHEAR_ABOUT_CORNER) { pixVShearCorner(pixt2, pixsch, deg2rad * centerangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[2]); pixVShearCorner(pixt2, pixsch, deg2rad * (centerangle - sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[0]); pixVShearCorner(pixt2, pixsch, deg2rad * (centerangle + sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[4]); } else { pixVShearCenter(pixt2, pixsch, deg2rad * centerangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[2]); pixVShearCenter(pixt2, pixsch, deg2rad * (centerangle - sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[0]); pixVShearCenter(pixt2, pixsch, deg2rad * (centerangle + sweepdelta), L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[4]); } numaAddNumber(nascore, bsearchscore[2]); numaAddNumber(natheta, centerangle); numaAddNumber(nascore, bsearchscore[0]); numaAddNumber(natheta, centerangle - sweepdelta); numaAddNumber(nascore, bsearchscore[4]); numaAddNumber(natheta, centerangle + sweepdelta); /* Start the search */ delta = 0.5 * sweepdelta; while (delta >= minbsdelta) { /* Get the left intermediate score */ leftcenterangle = centerangle - delta; if (pivot == L_SHEAR_ABOUT_CORNER) pixVShearCorner(pixt2, pixsch, deg2rad * leftcenterangle, L_BRING_IN_WHITE); else pixVShearCenter(pixt2, pixsch, deg2rad * leftcenterangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[1]); numaAddNumber(nascore, bsearchscore[1]); numaAddNumber(natheta, leftcenterangle); /* Get the right intermediate score */ rightcenterangle = centerangle + delta; if (pivot == L_SHEAR_ABOUT_CORNER) pixVShearCorner(pixt2, pixsch, deg2rad * rightcenterangle, L_BRING_IN_WHITE); else pixVShearCenter(pixt2, pixsch, deg2rad * rightcenterangle, L_BRING_IN_WHITE); pixFindDifferentialSquareSum(pixt2, &bsearchscore[3]); numaAddNumber(nascore, bsearchscore[3]); numaAddNumber(natheta, rightcenterangle); /* Find the maximum of the five scores and its location. * Note that the maximum must be in the center * three values, not in the end two. */ maxscore = bsearchscore[1]; maxindex = 1; for (i = 2; i < 4; i++) { if (bsearchscore[i] > maxscore) { maxscore = bsearchscore[i]; maxindex = i; } } /* Set up score array to interpolate for the next iteration */ lefttemp = bsearchscore[maxindex - 1]; righttemp = bsearchscore[maxindex + 1]; bsearchscore[2] = maxscore; bsearchscore[0] = lefttemp; bsearchscore[4] = righttemp; /* Get new center angle and delta for next iteration */ centerangle = centerangle + delta * (maxindex - 2); delta = 0.5 * delta; } *pangle = centerangle; #if DEBUG_PRINT_SCORES L_INFO(" Binary search score = %7.3f\n", procName, bsearchscore[2]); #endif /* DEBUG_PRINT_SCORES */ if (pendscore) /* save if requested */ *pendscore = bsearchscore[2]; /* Return the ratio of Max score over Min score * as a confidence value. Don't trust if the Min score * is too small, which can happen if the image is all black * with only a few white pixels interspersed. In that case, * we get a contribution from the top and bottom edges when * vertically sheared, but this contribution becomes zero when * the shear angle is zero. For zero shear angle, the only * contribution will be from the white pixels. We expect that * the signal goes as the product of the (height * width^2), * so we compute a (hopefully) normalized minimum threshold as * a function of these dimensions. */ numaGetMin(nascore, &minscore, &minloc); width = pixGetWidth(pixsch); height = pixGetHeight(pixsch); minthresh = MINSCORE_THRESHOLD_CONSTANT * width * width * height; #if DEBUG_THRESHOLD L_INFO(" minthresh = %10.2f, minscore = %10.2f\n", procName, minthresh, minscore); L_INFO(" maxscore = %10.2f\n", procName, maxscore); #endif /* DEBUG_THRESHOLD */ if (minscore > minthresh) *pconf = maxscore / minscore; else *pconf = 0.0; /* Don't trust it if too close to the edge of the sweep * range or if maxscore is small */ if ((centerangle > rangeleft + 2 * sweeprange - sweepdelta) || (centerangle < rangeleft + sweepdelta) || (maxscore < MIN_VALID_MAXSCORE)) *pconf = 0.0; #if DEBUG_PRINT_BINARY fprintf(stderr, "Binary search: angle = %7.3f, score ratio = %6.2f\n", *pangle, *pconf); fprintf(stderr, " max score = %8.0f\n", maxscore); #endif /* DEBUG_PRINT_BINARY */ #if DEBUG_PLOT_SCORES /* Plot the result -- the scores versus rotation angle -- * using gnuplot with GPLOT_POINTS. Because the data * points are not ordered by theta (increasing or decreasing), * using GPLOT_LINES would be confusing! */ {GPLOT *gplot; gplot = gplotCreate("search_output", GPLOT_PNG, "Binary search. Variance of difference of ON pixels vs. angle", "angle (deg)", "score"); gplotAddPlot(gplot, natheta, nascore, GPLOT_POINTS, "plot1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } #endif /* DEBUG_PLOT_SCORES */ cleanup: pixDestroy(&pixsw); pixDestroy(&pixsch); pixDestroy(&pixt1); pixDestroy(&pixt2); numaDestroy(&nascore); numaDestroy(&natheta); return ret; } /*---------------------------------------------------------------------* * Search over arbitrary range of angles in orthogonal directions * *---------------------------------------------------------------------*/ /* * pixFindSkewOrthogonalRange() * * Input: pixs (1 bpp) * &angle ( angle required to deskew; in degrees cw) * &conf ( confidence given by ratio of max/min score) * redsweep (sweep reduction factor = 1, 2, 4 or 8) * redsearch (binary search reduction factor = 1, 2, 4 or 8; * and must not exceed redsweep) * sweeprange (half the full range in each orthogonal * direction, taken about 0, in degrees) * sweepdelta (angle increment of sweep; in degrees) * minbsdelta (min binary search increment angle; in degrees) * confprior (amount by which confidence of 90 degree rotated * result is reduced when comparing with unrotated * confidence value) * Return: 0 if OK, 1 on error or if angle measurment not valid * * Notes: * (1) This searches for the skew angle, first in the range * [-sweeprange, sweeprange], and then in * [90 - sweeprange, 90 + sweeprange], with angles measured * clockwise. For exploring the full range of possibilities, * suggest using sweeprange = 47.0 degrees, giving some overlap * at 45 and 135 degrees. From these results, and discounting * the the second confidence by @confprior, it selects the * angle for maximal differential variance. If the angle * is larger than pi/4, the angle found after 90 degree rotation * is selected. * (2) The larger the confidence value, the greater the probability * that the proper alignment is given by the angle that maximizes * variance. It should be compared to a threshold, which depends * on the application. Values between 3.0 and 6.0 are common. * (3) Allowing for both portrait and landscape searches is more * difficult, because if the signal from the text lines is weak, * a signal from vertical rules can be larger! * The most difficult documents to deskew have some or all of: * (a) Multiple columns, not aligned * (b) Black lines along the vertical edges * (c) Text from two pages, and at different angles * Rule of thumb for resolution: * (a) If the margins are clean, you can work at 75 ppi, * although 100 ppi is safer. * (b) If there are vertical lines in the margins, do not * work below 150 ppi. The signal from the text lines must * exceed that from the margin lines. * (4) Choosing the @confprior parameter depends on knowing something * about the source of image. However, we're not using * real probabilities here, so its use is qualitative. * If landscape and portrait are equally likely, use * @confprior = 0.0. If the likelihood of portrait (non-rotated) * is 100 times higher than that of landscape, we want to reduce * the chance that we rotate to landscape in a situation where * the landscape signal is accidentally larger than the * portrait signal. To do this use a positive value of * @confprior; say 1.5. */ l_int32 pixFindSkewOrthogonalRange(PIX *pixs, l_float32 *pangle, l_float32 *pconf, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 confprior) { l_float32 angle1, conf1, score1, angle2, conf2, score2; PIX *pixr; PROCNAME("pixFindSkewOrthogonalRange"); if (!pangle || !pconf) return ERROR_INT("&angle and &conf not both defined", procName, 1); *pangle = *pconf = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); pixFindSkewSweepAndSearchScorePivot(pixs, &angle1, &conf1, &score1, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta, L_SHEAR_ABOUT_CORNER); pixr = pixRotateOrth(pixs, 1); pixFindSkewSweepAndSearchScorePivot(pixr, &angle2, &conf2, &score2, redsweep, redsearch, 0.0, sweeprange, sweepdelta, minbsdelta, L_SHEAR_ABOUT_CORNER); pixDestroy(&pixr); if (conf1 > conf2 - confprior) { *pangle = angle1; *pconf = conf1; } else { *pangle = -90.0 + angle2; *pconf = conf2; } #if DEBUG_PRINT_ORTH fprintf(stderr, " About 0: angle1 = %7.3f, conf1 = %7.3f, score1 = %f\n", angle1, conf1, score1); fprintf(stderr, " About 90: angle2 = %7.3f, conf2 = %7.3f, score2 = %f\n", angle2, conf2, score2); fprintf(stderr, " Final: angle = %7.3f, conf = %7.3f\n", *pangle, *pconf); #endif /* DEBUG_PRINT_ORTH */ return 0; } /*----------------------------------------------------------------* * Differential square sum function * *----------------------------------------------------------------*/ /*! * pixFindDifferentialSquareSum() * * Input: pixs * &sum ( result) * Return: 0 if OK, 1 on error * * Notes: * (1) At the top and bottom, we skip: * - at least one scanline * - not more than 10% of the image height * - not more than 5% of the image width */ l_int32 pixFindDifferentialSquareSum(PIX *pixs, l_float32 *psum) { l_int32 i, n; l_int32 w, h, skiph, skip, nskip; l_float32 val1, val2, diff, sum; NUMA *na; PROCNAME("pixFindDifferentialSquareSum"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Generate a number array consisting of the sum * of pixels in each row of pixs */ if ((na = pixCountPixelsByRow(pixs, NULL)) == NULL) return ERROR_INT("na not made", procName, 1); /* Compute the number of rows at top and bottom to omit. * We omit these to avoid getting a spurious signal from * the top and bottom of a (nearly) all black image. */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); skiph = (l_int32)(0.05 * w); /* skip for max shear of 0.025 radians */ skip = L_MIN(h / 10, skiph); /* don't remove more than 10% of image */ nskip = L_MAX(skip / 2, 1); /* at top & bot; skip at least one line */ /* Sum the squares of differential row sums, on the * allowed rows. Note that nskip must be >= 1. */ n = numaGetCount(na); sum = 0.0; for (i = nskip; i < n - nskip; i++) { numaGetFValue(na, i - 1, &val1); numaGetFValue(na, i, &val2); diff = val2 - val1; sum += diff * diff; } numaDestroy(&na); *psum = sum; return 0; } /*----------------------------------------------------------------* * Normalized square sum * *----------------------------------------------------------------*/ /*! * pixFindNormalizedSquareSum() * * Input: pixs * &hratio ( ratio of normalized horiz square sum * to result if the pixel distribution were uniform) * &vratio ( ratio of normalized vert square sum * to result if the pixel distribution were uniform) * &fract ( ratio of fg pixels to total pixels) * Return: 0 if OK, 1 on error or if there are no fg pixels * * Notes: * (1) Let the image have h scanlines and N fg pixels. * If the pixels were uniformly distributed on scanlines, * the sum of squares of fg pixels on each scanline would be * h * (N / h)^2. However, if the pixels are not uniformly * distributed (e.g., for text), the sum of squares of fg * pixels will be larger. We return in hratio and vratio the * ratio of these two values. * (2) If there are no fg pixels, hratio and vratio are returned as 0.0. */ l_int32 pixFindNormalizedSquareSum(PIX *pixs, l_float32 *phratio, l_float32 *pvratio, l_float32 *pfract) { l_int32 i, w, h, empty; l_float32 sum, sumsq, uniform, val; NUMA *na; PIX *pixt; PROCNAME("pixFindNormalizedSquareSum"); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (!phratio && !pvratio) return ERROR_INT("nothing to do", procName, 1); if (phratio) *phratio = 0.0; if (pvratio) *pvratio = 0.0; empty = 0; if (phratio) { na = pixCountPixelsByRow(pixs, NULL); numaGetSum(na, &sum); /* fg pixels */ if (pfract) *pfract = sum / (l_float32)(w * h); if (sum != 0.0) { uniform = sum * sum / h; /* h*(sum / h)^2 */ sumsq = 0.0; for (i = 0; i < h; i++) { numaGetFValue(na, i, &val); sumsq += val * val; } *phratio = sumsq / uniform; } else { empty = 1; } numaDestroy(&na); } if (pvratio) { if (empty == 1) return 1; pixt = pixRotateOrth(pixs, 1); na = pixCountPixelsByRow(pixt, NULL); numaGetSum(na, &sum); if (pfract) *pfract = sum / (l_float32)(w * h); if (sum != 0.0) { uniform = sum * sum / w; sumsq = 0.0; for (i = 0; i < w; i++) { numaGetFValue(na, i, &val); sumsq += val * val; } *pvratio = sumsq / uniform; } else { empty = 1; } pixDestroy(&pixt); numaDestroy(&na); } return empty; } leptonica-1.70/src/list.h0000644000175000017500000000651211707052573013433 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_LIST_H #define LEPTONICA_LIST_H /* * list.h * * Cell for double-linked lists * * This allows composition of a list of cells with * prev, next and data pointers. Generic data * structures hang on the list cell data pointers. * * The list is not circular because that would add much * complexity in traversing the list under general * conditions where list cells can be added and removed. * The only disadvantage of not having the head point to * the last cell is that the list must be traversed to * find its tail. However, this traversal is fast, and * the listRemoveFromTail() function updates the tail * so there is no searching overhead with repeated use. * * The list macros are used to run through a list, and their * use is encouraged. They are invoked, e.g., as * * DLLIST *head, *elem; * ... * L_BEGIN_LIST_FORWARD(head, elem) * data > * L_END_LIST * */ struct DoubleLinkedList { struct DoubleLinkedList *prev; struct DoubleLinkedList *next; void *data; }; typedef struct DoubleLinkedList DLLIST; /* Simple list traverse macros */ #define L_BEGIN_LIST_FORWARD(head, element) \ { \ DLLIST *_leptvar_nextelem_; \ for ((element) = (head); (element); (element) = _leptvar_nextelem_) { \ _leptvar_nextelem_ = (element)->next; #define L_BEGIN_LIST_REVERSE(tail, element) \ { \ DLLIST *_leptvar_prevelem_; \ for ((element) = (tail); (element); (element) = _leptvar_prevelem_) { \ _leptvar_prevelem_ = (element)->prev; #define L_END_LIST }} #endif /* LEPTONICA_LIST_H */ leptonica-1.70/src/binarize.c0000644000175000017500000007736712265645116014277 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binarize.c * * =================================================================== * Image binarization algorithms are found in: * grayquant.c: standard, simple, general grayscale quantization * adaptmap.c: local adaptive; mostly gray-to-gray in preparation * for binarization * binarize.c: special binarization methods, locally adaptive. * =================================================================== * * Adaptive Otsu-based thresholding * l_int32 pixOtsuAdaptiveThreshold() 8 bpp * * Otsu thresholding on adaptive background normalization * PIX *pixOtsuThreshOnBackgroundNorm() 8 bpp * * Masking and Otsu estimate on adaptive background normalization * PIX *pixMaskedThreshOnBackgroundNorm() 8 bpp * * Sauvola local thresholding * l_int32 pixSauvolaBinarizeTiled() * l_int32 pixSauvolaBinarize() * PIX *pixSauvolaGetThreshold() * PIX *pixApplyLocalThreshold(); * * Notes: * (1) pixOtsuAdaptiveThreshold() computes a global threshold over each * tile and performs the threshold operation, resulting in a * binary image for each tile. These are stitched into the * final result. * (2) pixOtsuThreshOnBackgroundNorm() and * pixMaskedThreshOnBackgroundNorm() are binarization functions * that use background normalization with other techniques. * (3) Sauvola binarization computes a local threshold based on * the local average and square average. It takes two constants: * the window size for the measurment at each pixel and a * parameter that determines the amount of normalized local * standard deviation to subtract from the local average value. */ #include #include "allheaders.h" /*------------------------------------------------------------------* * Adaptive Otsu-based thresholding * *------------------------------------------------------------------*/ /*! * pixOtsuAdaptiveThreshold() * * Input: pixs (8 bpp) * sx, sy (desired tile dimensions; actual size may vary) * smoothx, smoothy (half-width of convolution kernel applied to * threshold array: use 0 for no smoothing) * scorefract (fraction of the max Otsu score; typ. 0.1; * use 0.0 for standard Otsu) * &pixth ( array of threshold values * found for each tile) * &pixd ( thresholded input pixs, based on * the threshold array) * Return: 0 if OK, 1 on error * * Notes: * (1) The Otsu method finds a single global threshold for an image. * This function allows a locally adapted threshold to be * found for each tile into which the image is broken up. * (2) The array of threshold values, one for each tile, constitutes * a highly downscaled image. This array is optionally * smoothed using a convolution. The full width and height of the * convolution kernel are (2 * @smoothx + 1) and (2 * @smoothy + 1). * (3) The minimum tile dimension allowed is 16. If such small * tiles are used, it is recommended to use smoothing, because * without smoothing, each small tile determines the splitting * threshold independently. A tile that is entirely in the * image bg will then hallucinate fg, resulting in a very noisy * binarization. The smoothing should be large enough that no * tile is only influenced by one type (fg or bg) of pixels, * because it will force a split of its pixels. * (4) To get a single global threshold for the entire image, use * input values of @sx and @sy that are larger than the image. * For this situation, the smoothing parameters are ignored. * (5) The threshold values partition the image pixels into two classes: * one whose values are less than the threshold and another * whose values are greater than or equal to the threshold. * This is the same use of 'threshold' as in pixThresholdToBinary(). * (6) The scorefract is the fraction of the maximum Otsu score, which * is used to determine the range over which the histogram minimum * is searched. See numaSplitDistribution() for details on the * underlying method of choosing a threshold. * (7) This uses enables a modified version of the Otsu criterion for * splitting the distribution of pixels in each tile into a * fg and bg part. The modification consists of searching for * a minimum in the histogram over a range of pixel values where * the Otsu score is within a defined fraction, @scorefract, * of the max score. To get the original Otsu algorithm, set * @scorefract == 0. */ l_int32 pixOtsuAdaptiveThreshold(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, PIX **ppixth, PIX **ppixd) { l_int32 w, h, nx, ny, i, j, thresh; l_uint32 val; PIX *pixt, *pixb, *pixthresh, *pixth, *pixd; PIXTILING *pt; PROCNAME("pixOtsuAdaptiveThreshold"); if (!ppixth && !ppixd) return ERROR_INT("neither &pixth nor &pixd defined", procName, 1); if (ppixth) *ppixth = NULL; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (sx < 16 || sy < 16) return ERROR_INT("sx and sy must be >= 16", procName, 1); /* Compute the threshold array for the tiles */ pixGetDimensions(pixs, &w, &h, NULL); nx = L_MAX(1, w / sx); ny = L_MAX(1, h / sy); smoothx = L_MIN(smoothx, (nx - 1) / 2); smoothy = L_MIN(smoothy, (ny - 1) / 2); pt = pixTilingCreate(pixs, nx, ny, 0, 0, 0, 0); pixthresh = pixCreate(nx, ny, 8); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); pixSplitDistributionFgBg(pixt, scorefract, 1, &thresh, NULL, NULL, 0); pixSetPixel(pixthresh, j, i, thresh); /* see note (4) */ pixDestroy(&pixt); } } /* Optionally smooth the threshold array */ if (smoothx > 0 || smoothy > 0) pixth = pixBlockconv(pixthresh, smoothx, smoothy); else pixth = pixClone(pixthresh); pixDestroy(&pixthresh); /* Optionally apply the threshold array to binarize pixs */ if (ppixd) { pixd = pixCreate(w, h, 1); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); pixGetPixel(pixth, j, i, &val); pixb = pixThresholdToBinary(pixt, val); pixTilingPaintTile(pixd, i, j, pixb, pt); pixDestroy(&pixt); pixDestroy(&pixb); } } *ppixd = pixd; } if (ppixth) *ppixth = pixth; else pixDestroy(&pixth); pixTilingDestroy(&pt); return 0; } /*------------------------------------------------------------------* * Otsu thresholding on adaptive background normalization * *------------------------------------------------------------------*/ /*! * pixOtsuThreshOnBackgroundNorm() * * Input: pixs (8 bpp grayscale; not colormapped) * pixim ( 1 bpp 'image' mask; can be null) * sx, sy (tile size in pixels) * thresh (threshold for determining foreground) * mincount (min threshold on counts in a tile) * bgval (target bg val; typ. > 128) * smoothx (half-width of block convolution kernel width) * smoothy (half-width of block convolution kernel height) * scorefract (fraction of the max Otsu score; typ. 0.1) * &thresh ( threshold value that was * used on the normalized image) * Return: pixd (1 bpp thresholded image), or null on error * * Notes: * (1) This does background normalization followed by Otsu * thresholding. Otsu binarization attempts to split the * image into two roughly equal sets of pixels, and it does * a very poor job when there are large amounts of dark * background. By doing a background normalization first, * to get the background near 255, we remove this problem. * Then we use a modified Otsu to estimate the best global * threshold on the normalized image. * (2) See pixBackgroundNorm() for meaning and typical values * of input parameters. For a start, you can try: * sx, sy = 10, 15 * thresh = 100 * mincount = 50 * bgval = 255 * smoothx, smoothy = 2 */ PIX * pixOtsuThreshOnBackgroundNorm(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh) { l_int32 w, h; l_uint32 val; PIX *pixn, *pixt, *pixd; PROCNAME("pixOtsuThreshOnBackgroundNorm"); if (pthresh) *pthresh = 0; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); if (sx < 4 || sy < 4) return (PIX *)ERROR_PTR("sx and sy must be >= 4", procName, NULL); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", procName); mincount = (sx * sy) / 3; } pixn = pixBackgroundNorm(pixs, pixim, NULL, sx, sy, thresh, mincount, bgval, smoothx, smoothy); if (!pixn) return (PIX *)ERROR_PTR("pixn not made", procName, NULL); /* Just use 1 tile for a global threshold, which is stored * as a single pixel in pixt. */ pixGetDimensions(pixn, &w, &h, NULL); pixOtsuAdaptiveThreshold(pixn, w, h, 0, 0, scorefract, &pixt, &pixd); pixDestroy(&pixn); if (pixt && pthresh) { pixGetPixel(pixt, 0, 0, &val); *pthresh = val; } pixDestroy(&pixt); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); else return pixd; } /*----------------------------------------------------------------------* * Masking and Otsu estimate on adaptive background normalization * *----------------------------------------------------------------------*/ /*! * pixMaskedThreshOnBackgroundNorm() * * Input: pixs (8 bpp grayscale; not colormapped) * pixim ( 1 bpp 'image' mask; can be null) * sx, sy (tile size in pixels) * thresh (threshold for determining foreground) * mincount (min threshold on counts in a tile) * smoothx (half-width of block convolution kernel width) * smoothy (half-width of block convolution kernel height) * scorefract (fraction of the max Otsu score; typ. ~ 0.1) * &thresh ( threshold value that was * used on the normalized image) * Return: pixd (1 bpp thresholded image), or null on error * * Notes: * (1) This begins with a standard background normalization. * Additionally, there is a flexible background norm, that * will adapt to a rapidly varying background, and this * puts white pixels in the background near regions with * significant foreground. The white pixels are turned into * a 1 bpp selection mask by binarization followed by dilation. * Otsu thresholding is performed on the input image to get an * estimate of the threshold in the non-mask regions. * The background normalized image is thresholded with two * different values, and the result is combined using * the selection mask. * (2) Note that the numbers 255 (for bgval target) and 190 (for * thresholding on pixn) are tied together, and explicitly * defined in this function. * (3) See pixBackgroundNorm() for meaning and typical values * of input parameters. For a start, you can try: * sx, sy = 10, 15 * thresh = 100 * mincount = 50 * smoothx, smoothy = 2 */ PIX * pixMaskedThreshOnBackgroundNorm(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 smoothx, l_int32 smoothy, l_float32 scorefract, l_int32 *pthresh) { l_int32 w, h; l_uint32 val; PIX *pixn, *pixm, *pixd, *pixt1, *pixt2, *pixt3, *pixt4; PROCNAME("pixMaskedThreshOnBackgroundNorm"); if (pthresh) *pthresh = 0; if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); if (sx < 4 || sy < 4) return (PIX *)ERROR_PTR("sx and sy must be >= 4", procName, NULL); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", procName); mincount = (sx * sy) / 3; } /* Standard background normalization */ pixn = pixBackgroundNorm(pixs, pixim, NULL, sx, sy, thresh, mincount, 255, smoothx, smoothy); if (!pixn) return (PIX *)ERROR_PTR("pixn not made", procName, NULL); /* Special background normalization for adaptation to quickly * varying background. Threshold on the very light parts, * which tend to be near significant edges, and dilate to * form a mask over regions that are typically text. The * dilation size is chosen to cover the text completely, * except for very thick fonts. */ pixt1 = pixBackgroundNormFlex(pixs, 7, 7, 1, 1, 20); pixt2 = pixThresholdToBinary(pixt1, 240); pixInvert(pixt2, pixt2); pixm = pixMorphSequence(pixt2, "d21.21", 0); pixDestroy(&pixt1); pixDestroy(&pixt2); /* Use Otsu to get a global threshold estimate for the image, * which is stored as a single pixel in pixt3. */ pixGetDimensions(pixs, &w, &h, NULL); pixOtsuAdaptiveThreshold(pixs, w, h, 0, 0, scorefract, &pixt3, NULL); if (pixt3 && pthresh) { pixGetPixel(pixt3, 0, 0, &val); *pthresh = val; } pixDestroy(&pixt3); /* Threshold the background normalized images differentially, * using a high value correlated with the background normalization * for the part of the image under the mask (i.e., near the * darker, thicker foreground), and a value that depends on the Otsu * threshold for the rest of the image. This gives a solid * (high) thresholding for the foreground parts of the image, * while allowing the background and light foreground to be * reasonably well cleaned using a threshold adapted to the * input image. */ pixd = pixThresholdToBinary(pixn, val + 30); /* for bg and light fg */ pixt4 = pixThresholdToBinary(pixn, 190); /* for heavier fg */ pixCombineMasked(pixd, pixt4, pixm); pixDestroy(&pixt4); pixDestroy(&pixm); pixDestroy(&pixn); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); else return pixd; } /*----------------------------------------------------------------------* * Sauvola binarization * *----------------------------------------------------------------------*/ /*! * pixSauvolaBinarizeTiled() * * Input: pixs (8 bpp grayscale, not colormapped) * whsize (window half-width for measuring local statistics) * factor (factor for reducing threshold due to variance; >= 0) * nx, ny (subdivision into tiles; >= 1) * &pixth ( Sauvola threshold values) * &pixd ( thresholded image) * Return: 0 if OK, 1 on error * * Notes: * (1) The window width and height are 2 * @whsize + 1. The minimum * value for @whsize is 2; typically it is >= 7.. * (2) For nx == ny == 1, this defaults to pixSauvolaBinarize(). * (3) Why a tiled version? * (a) Because the mean value accumulator is a uint32, overflow * can occur for an image with more than 16M pixels. * (b) The mean value accumulator array for 16M pixels is 64 MB. * The mean square accumulator array for 16M pixels is 128 MB. * Using tiles reduces the size of these arrays. * (c) Each tile can be processed independently, in parallel, * on a multicore processor. * (4) The Sauvola threshold is determined from the formula: * t = m * (1 - k * (1 - s / 128)) * See pixSauvolaBinarize() for details. */ l_int32 pixSauvolaBinarizeTiled(PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 nx, l_int32 ny, PIX **ppixth, PIX **ppixd) { l_int32 i, j, w, h, xrat, yrat; PIX *pixth, *pixd, *tileth, *tiled, *pixt; PIX **ptileth, **ptiled; PIXTILING *pt; PROCNAME("pixSauvolaBinarizeTiled"); if (!ppixth && !ppixd) return ERROR_INT("no outputs", procName, 1); if (ppixth) *ppixth = NULL; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is cmapped", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (whsize < 2) return ERROR_INT("whsize must be >= 2", procName, 1); if (w < 2 * whsize + 3 || h < 2 * whsize + 3) return ERROR_INT("whsize too large for image", procName, 1); if (factor < 0.0) return ERROR_INT("factor must be >= 0", procName, 1); if (nx <= 1 && ny <= 1) return pixSauvolaBinarize(pixs, whsize, factor, 1, NULL, NULL, ppixth, ppixd); /* Test to see if the tiles are too small. The required * condition is that the tile dimensions must be at least * (whsize + 2) x (whsize + 2). */ xrat = w / nx; yrat = h / ny; if (xrat < whsize + 2) { nx = w / (whsize + 2); L_WARNING("tile width too small; nx reduced to %d\n", procName, nx); } if (yrat < whsize + 2) { ny = h / (whsize + 2); L_WARNING("tile height too small; ny reduced to %d\n", procName, ny); } if (nx <= 1 && ny <= 1) return pixSauvolaBinarize(pixs, whsize, factor, 1, NULL, NULL, ppixth, ppixd); /* We can use pixtiling for painting both outputs, if requested */ if (ppixth) { pixth = pixCreateNoInit(w, h, 8); *ppixth = pixth; } if (ppixd) { pixd = pixCreateNoInit(w, h, 1); *ppixd = pixd; } pt = pixTilingCreate(pixs, nx, ny, 0, 0, whsize + 1, whsize + 1); pixTilingNoStripOnPaint(pt); /* pixSauvolaBinarize() does the stripping */ for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { pixt = pixTilingGetTile(pt, i, j); ptileth = (ppixth) ? &tileth : NULL; ptiled = (ppixd) ? &tiled : NULL; pixSauvolaBinarize(pixt, whsize, factor, 0, NULL, NULL, ptileth, ptiled); if (ppixth) { /* do not strip */ pixTilingPaintTile(pixth, i, j, tileth, pt); pixDestroy(&tileth); } if (ppixd) { pixTilingPaintTile(pixd, i, j, tiled, pt); pixDestroy(&tiled); } pixDestroy(&pixt); } } pixTilingDestroy(&pt); return 0; } /*! * pixSauvolaBinarize() * * Input: pixs (8 bpp grayscale; not colormapped) * whsize (window half-width for measuring local statistics) * factor (factor for reducing threshold due to variance; >= 0) * addborder (1 to add border of width (@whsize + 1) on all sides) * &pixm ( local mean values) * &pixsd ( local standard deviation values) * &pixth ( threshold values) * &pixd ( thresholded image) * Return: 0 if OK, 1 on error * * Notes: * (1) The window width and height are 2 * @whsize + 1. The minimum * value for @whsize is 2; typically it is >= 7.. * (2) The local statistics, measured over the window, are the * average and standard deviation. * (3) The measurements of the mean and standard deviation are * performed inside a border of (@whsize + 1) pixels. If pixs does * not have these added border pixels, use @addborder = 1 to add * it here; otherwise use @addborder = 0. * (4) The Sauvola threshold is determined from the formula: * t = m * (1 - k * (1 - s / 128)) * where: * t = local threshold * m = local mean * k = @factor (>= 0) [ typ. 0.35 ] * s = local standard deviation, which is maximized at * 127.5 when half the samples are 0 and half are 255. * (5) The basic idea of Niblack and Sauvola binarization is that * the local threshold should be less than the median value, * and the larger the variance, the closer to the median * it should be chosen. Typical values for k are between * 0.2 and 0.5. */ l_int32 pixSauvolaBinarize(PIX *pixs, l_int32 whsize, l_float32 factor, l_int32 addborder, PIX **ppixm, PIX **ppixsd, PIX **ppixth, PIX **ppixd) { l_int32 w, h; PIX *pixg, *pixsc, *pixm, *pixms, *pixth, *pixd; PROCNAME("pixSauvolaBinarize"); if (!ppixm && !ppixsd && !ppixth && !ppixd) return ERROR_INT("no outputs", procName, 1); if (ppixm) *ppixm = NULL; if (ppixsd) *ppixsd = NULL; if (ppixth) *ppixth = NULL; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is cmapped", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (whsize < 2) return ERROR_INT("whsize must be >= 2", procName, 1); if (w < 2 * whsize + 3 || h < 2 * whsize + 3) return ERROR_INT("whsize too large for image", procName, 1); if (factor < 0.0) return ERROR_INT("factor must be >= 0", procName, 1); if (addborder) { pixg = pixAddMirroredBorder(pixs, whsize + 1, whsize + 1, whsize + 1, whsize + 1); pixsc = pixClone(pixs); } else { pixg = pixClone(pixs); pixsc = pixRemoveBorder(pixs, whsize + 1); } if (!pixg || !pixsc) return ERROR_INT("pixg and pixsc not made", procName, 1); /* All these functions strip off the border pixels. */ if (ppixm || ppixth || ppixd) pixm = pixWindowedMean(pixg, whsize, whsize, 1, 1); if (ppixsd || ppixth || ppixd) pixms = pixWindowedMeanSquare(pixg, whsize, whsize, 1); if (ppixth || ppixd) pixth = pixSauvolaGetThreshold(pixm, pixms, factor, ppixsd); if (ppixd) pixd = pixApplyLocalThreshold(pixsc, pixth, 1); if (ppixm) *ppixm = pixm; else pixDestroy(&pixm); pixDestroy(&pixms); if (ppixth) *ppixth = pixth; else pixDestroy(&pixth); if (ppixd) *ppixd = pixd; else pixDestroy(&pixd); pixDestroy(&pixg); pixDestroy(&pixsc); return 0; } /*! * pixSauvolaGetThreshold() * * Input: pixm (8 bpp grayscale; not colormapped) * pixms (32 bpp) * factor (factor for reducing threshold due to variance; >= 0) * &pixsd ( local standard deviation) * Return: pixd (8 bpp, sauvola threshold values), or null on error * * Notes: * (1) The Sauvola threshold is determined from the formula: * t = m * (1 - k * (1 - s / 128)) * where: * t = local threshold * m = local mean * k = @factor (>= 0) [ typ. 0.35 ] * s = local standard deviation, which is maximized at * 127.5 when half the samples are 0 and half are 255. * (2) See pixSauvolaBinarize() for other details. * (3) Important definitions and relations for computing averages: * v == pixel value * E(p) == expected value of p == average of p over some pixel set * S(v) == square of v == v * v * mv == E(v) == expected pixel value == mean value * ms == E(S(v)) == expected square of pixel values * == mean square value * var == variance == expected square of deviation from mean * == E(S(v - mv)) = E(S(v) - 2 * S(v * mv) + S(mv)) * = E(S(v)) - S(mv) * = ms - mv * mv * s == standard deviation = sqrt(var) * So for evaluating the standard deviation in the Sauvola * threshold, we take * s = sqrt(ms - mv * mv) */ PIX * pixSauvolaGetThreshold(PIX *pixm, PIX *pixms, l_float32 factor, PIX **ppixsd) { l_int32 i, j, w, h, tabsize, wplm, wplms, wplsd, wpld, usetab; l_int32 mv, ms, var, thresh; l_uint32 *datam, *datams, *datasd, *datad; l_uint32 *linem, *linems, *linesd, *lined; l_float32 sd; l_float32 *tab; /* of 2^16 square roots */ PIX *pixsd, *pixd; PROCNAME("pixSauvolaGetThreshold"); if (ppixsd) *ppixsd = NULL; if (!pixm || pixGetDepth(pixm) != 8) return (PIX *)ERROR_PTR("pixm undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixm)) return (PIX *)ERROR_PTR("pixm is colormapped", procName, NULL); if (!pixms || pixGetDepth(pixms) != 32) return (PIX *)ERROR_PTR("pixms undefined or not 32 bpp", procName, NULL); if (factor < 0.0) return (PIX *)ERROR_PTR("factor must be >= 0", procName, NULL); /* Only make a table of 2^16 square roots if there * are enough pixels to justify it. */ pixGetDimensions(pixm, &w, &h, NULL); usetab = (w * h > 100000) ? 1 : 0; if (usetab) { tabsize = 1 << 16; tab = (l_float32 *)CALLOC(tabsize, sizeof(l_float32)); for (i = 0; i < tabsize; i++) tab[i] = (l_float32)sqrt((l_float64)i); } pixd = pixCreate(w, h, 8); if (ppixsd) { pixsd = pixCreate(w, h, 8); *ppixsd = pixsd; } datam = pixGetData(pixm); datams = pixGetData(pixms); if (ppixsd) datasd = pixGetData(pixsd); datad = pixGetData(pixd); wplm = pixGetWpl(pixm); wplms = pixGetWpl(pixms); if (ppixsd) wplsd = pixGetWpl(pixsd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linem = datam + i * wplm; linems = datams + i * wplms; if (ppixsd) linesd = datasd + i * wplsd; lined = datad + i * wpld; for (j = 0; j < w; j++) { mv = GET_DATA_BYTE(linem, j); ms = linems[j]; var = ms - mv * mv; if (usetab) sd = tab[var]; else sd = (l_float32)sqrt((l_float32)var); if (ppixsd) SET_DATA_BYTE(linesd, j, (l_int32)sd); thresh = (l_int32)(mv * (1.0 - factor * (1.0 - sd / 128.))); SET_DATA_BYTE(lined, j, thresh); } } if (usetab) FREE(tab); return pixd; } /*! * pixApplyLocalThreshold() * * Input: pixs (8 bpp grayscale; not colormapped) * pixth (8 bpp array of local thresholds) * redfactor ( ... ) * Return: pixd (1 bpp, thresholded image), or null on error */ PIX * pixApplyLocalThreshold(PIX *pixs, PIX *pixth, l_int32 redfactor) { l_int32 i, j, w, h, wpls, wplt, wpld, vals, valt; l_uint32 *datas, *datat, *datad, *lines, *linet, *lined; PIX *pixd; PROCNAME("pixApplyLocalThreshold"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); if (!pixth || pixGetDepth(pixth) != 8) return (PIX *)ERROR_PTR("pixth undefined or not 8 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 1); datas = pixGetData(pixs); datat = pixGetData(pixth); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wplt = pixGetWpl(pixth); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; linet = datat + i * wplt; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valt = GET_DATA_BYTE(linet, j); if (vals < valt) SET_DATA_BIT(lined, j); } } return pixd; } leptonica-1.70/src/blend.c0000644000175000017500000024535712244745226013554 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * blend.c * * Blending two images that are not colormapped * PIX *pixBlend() * PIX *pixBlendMask() * PIX *pixBlendGray() * PIX *pixBlendGrayInverse() * PIX *pixBlendColor() * PIX *pixBlendColorByChannel() * PIX *pixBlendGrayAdapt() * static l_int32 blendComponents() * PIX *pixFadeWithGray() * PIX *pixBlendHardLight() * static l_int32 blendHardLightComponents() * * Blending two colormapped images * l_int32 pixBlendCmap() * * Blending two images using a third (alpha mask) * PIX *pixBlendWithGrayMask() * * Blending background to a specific color * PIX *pixBlendBackgroundToColor() * * Multiplying by a specific color * PIX *pixMultiplyByColor() * * Rendering with alpha blending over a uniform background * PIX *pixAlphaBlendUniform() * * Adding an alpha layer for blending * PIX *pixAddAlphaToBlend() * * Setting a transparent alpha component over a white background * PIX *pixSetAlphaOverWhite() * * In blending operations a new pix is produced where typically * a subset of pixels in src1 are changed by the set of pixels * in src2, when src2 is located in a given position relative * to src1. This is similar to rasterop, except that the * blending operations we allow are more complex, and typically * result in dest pixels that are a linear combination of two * pixels, such as src1 and its inverse. I find it convenient * to think of src2 as the "blender" (the one that takes the action) * and src1 as the "blendee" (the one that changes). * * Blending works best when src1 is 8 or 32 bpp. We also allow * src1 to be colormapped, but the colormap is removed before blending, * so if src1 is colormapped, we can't allow in-place blending. * * Because src2 is typically smaller than src1, we can implement by * clipping src2 to src1 and then transforming some of the dest * pixels that are under the support of src2. In practice, we * do the clipping in the inner pixel loop. For grayscale and * color src2, we also allow a simple form of transparency, where * pixels of a particular value in src2 are transparent; for those pixels, * no blending is done. * * The blending functions are categorized by the depth of src2, * the blender, and not that of src1, the blendee. * * - If src2 is 1 bpp, we can do one of three things: * (1) L_BLEND_WITH_INVERSE: Blend a given fraction of src1 with its * inverse color for those pixels in src2 that are fg (ON), * and leave the dest pixels unchanged for pixels in src2 that * are bg (OFF). * (2) L_BLEND_TO_WHITE: Fade the src1 pixels toward white by a * given fraction for those pixels in src2 that are fg (ON), * and leave the dest pixels unchanged for pixels in src2 that * are bg (OFF). * (3) L_BLEND_TO_BLACK: Fade the src1 pixels toward black by a * given fraction for those pixels in src2 that are fg (ON), * and leave the dest pixels unchanged for pixels in src2 that * are bg (OFF). * The blending function is pixBlendMask(). * * - If src2 is 8 bpp grayscale, we can do one of two things * (but see pixFadeWithGray() below): * (1) L_BLEND_GRAY: If src1 is 8 bpp, mix the two values, using * a fraction of src2 and (1 - fraction) of src1. * If src1 is 32 bpp (rgb), mix the fraction of src2 with * each of the color components in src1. * (2) L_BLEND_GRAY_WITH_INVERSE: Use the grayscale value in src2 * to determine how much of the inverse of a src1 pixel is * to be combined with the pixel value. The input fraction * further acts to scale the change in the src1 pixel. * The blending function is pixBlendGray(). * * - If src2 is color, we blend a given fraction of src2 with * src1. If src1 is 8 bpp, the resulting image is 32 bpp. * The blending function is pixBlendColor(). * * - For all three blending functions -- pixBlendMask(), pixBlendGray() * and pixBlendColor() -- you can apply the blender to the blendee * either in-place or generating a new pix. For the in-place * operation, this requires that the depth of the resulting pix * must equal that of the input pixs1. * * - We remove colormaps from src1 and src2 before blending. * Any quantization would have to be done after blending. * * We include another function, pixFadeWithGray(), that blends * a gray or color src1 with a gray src2. It does one of these things: * (1) L_BLEND_TO_WHITE: Fade the src1 pixels toward white by * a number times the value in src2. * (2) L_BLEND_TO_BLACK: Fade the src1 pixels toward black by * a number times the value in src2. * * Also included is a generalization of the so-called "hard light" * blending: pixBlendHardLight(). We generalize by allowing a fraction < 1.0 * of the blender to be admixed with the blendee. The standard function * does full mixing. */ #include "allheaders.h" static l_int32 blendComponents(l_int32 a, l_int32 b, l_float32 fract); static l_int32 blendHardLightComponents(l_int32 a, l_int32 b, l_float32 fract); /*-------------------------------------------------------------* * Blending two images that are not colormapped * *-------------------------------------------------------------*/ /*! * pixBlend() * * Input: pixs1 (blendee) * pixs2 (blender; typ. smaller) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1; can be < 0) * fract (blending fraction) * Return: pixd (blended image), or null on error * * Notes: * (1) This is a simple top-level interface. For more flexibility, * call directly into pixBlendMask(), etc. */ PIX * pixBlend(PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract) { l_int32 w1, h1, d1, d2; BOX *box; PIX *pixc, *pixt, *pixd; PROCNAME("pixBlend"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); /* check relative depths */ d1 = pixGetDepth(pixs1); d2 = pixGetDepth(pixs2); if (d1 == 1 && d2 > 1) return (PIX *)ERROR_PTR("mixing gray or color with 1 bpp", procName, NULL); /* remove colormap from pixs2 if necessary */ pixt = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); d2 = pixGetDepth(pixt); /* Check if pixs2 is clipped by its position with respect * to pixs1; if so, clip it and redefine x and y if necessary. * This actually isn't necessary, as the specific blending * functions do the clipping directly in the pixel loop * over pixs2, but it's included here to show how it can * easily be done on pixs2 first. */ pixGetDimensions(pixs1, &w1, &h1, NULL); box = boxCreate(-x, -y, w1, h1); /* box of pixs1 relative to pixs2 */ pixc = pixClipRectangle(pixt, box, NULL); boxDestroy(&box); if (!pixc) { L_WARNING("box doesn't overlap pix\n", procName); return NULL; } x = L_MAX(0, x); y = L_MAX(0, y); if (d2 == 1) { pixd = pixBlendMask(NULL, pixs1, pixc, x, y, fract, L_BLEND_WITH_INVERSE); } else if (d2 == 8) { pixd = pixBlendGray(NULL, pixs1, pixc, x, y, fract, L_BLEND_GRAY, 0, 0); } else { /* d2 == 32 */ pixd = pixBlendColor(NULL, pixs1, pixc, x, y, fract, 0, 0); } pixDestroy(&pixc); pixDestroy(&pixt); return pixd; } /*! * pixBlendMask() * * Input: pixd (; either NULL or equal to pixs1 for in-place) * pixs1 (blendee, depth > 1) * pixs2 (blender, 1 bpp; typ. smaller in size than pixs1) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1; can be < 0) * fract (blending fraction) * type (L_BLEND_WITH_INVERSE, L_BLEND_TO_WHITE, L_BLEND_TO_BLACK) * Return: pixd if OK; null on error * * Notes: * (1) Clipping of pixs2 to pixs1 is done in the inner pixel loop. * (2) If pixs1 has a colormap, it is removed. * (3) For inplace operation (pixs1 not cmapped), call it this way: * pixBlendMask(pixs1, pixs1, pixs2, ...) * (4) For generating a new pixd: * pixd = pixBlendMask(NULL, pixs1, pixs2, ...) * (5) Only call in-place if pixs1 does not have a colormap. * (6) Invalid @fract defaults to 0.5 with a warning. * Invalid @type defaults to L_BLEND_WITH_INVERSE with a warning. */ PIX * pixBlendMask(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type) { l_int32 i, j, d, wc, hc, w, h, wplc; l_int32 val, rval, gval, bval; l_uint32 pixval; l_uint32 *linec, *datac; PIX *pixc, *pix1, *pix2; PROCNAME("pixBlendMask"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, NULL); if (pixGetDepth(pixs2) != 1) return (PIX *)ERROR_PTR("pixs2 not 1 bpp", procName, NULL); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("inplace; pixs1 has colormap", procName, NULL); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } if (type != L_BLEND_WITH_INVERSE && type != L_BLEND_TO_WHITE && type != L_BLEND_TO_BLACK) { L_WARNING("invalid blend type; setting to L_BLEND_WITH_INVERSE\n", procName); type = L_BLEND_WITH_INVERSE; } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixGetDimensions(pixd, &w, &h, &d); /* d must be either 8 or 32 bpp */ pixc = pixClone(pixs2); wc = pixGetWidth(pixc); hc = pixGetHeight(pixc); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done. */ switch (type) { case L_BLEND_WITH_INVERSE: /* * The basic logic for this blending is: * p --> (1 - f) * p + f * (1 - p) * where p is a normalized value: p = pixval / 255. * Thus, * p --> p + f * (1 - 2 * p) */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; bval = GET_DATA_BIT(linec, j); if (bval) { switch (d) { case 8: pixGetPixel(pixd, x + j, y + i, &pixval); val = (l_int32)(pixval + fract * (255 - 2 * pixval)); pixSetPixel(pixd, x + j, y + i, val); break; case 32: pixGetPixel(pixd, x + j, y + i, &pixval); extractRGBValues(pixval, &rval, &gval, &bval); rval = (l_int32)(rval + fract * (255 - 2 * rval)); gval = (l_int32)(gval + fract * (255 - 2 * gval)); bval = (l_int32)(bval + fract * (255 - 2 * bval)); composeRGBPixel(rval, gval, bval, &pixval); pixSetPixel(pixd, x + j, y + i, pixval); break; default: L_WARNING("d neither 8 nor 32 bpp; no blend\n", procName); } } } } break; case L_BLEND_TO_WHITE: /* * The basic logic for this blending is: * p --> p + f * (1 - p) (p normalized to [0...1]) */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; bval = GET_DATA_BIT(linec, j); if (bval) { switch (d) { case 8: pixGetPixel(pixd, x + j, y + i, &pixval); val = (l_int32)(pixval + fract * (255 - pixval)); pixSetPixel(pixd, x + j, y + i, val); break; case 32: pixGetPixel(pixd, x + j, y + i, &pixval); extractRGBValues(pixval, &rval, &gval, &bval); rval = (l_int32)(rval + fract * (255 - rval)); gval = (l_int32)(gval + fract * (255 - gval)); bval = (l_int32)(bval + fract * (255 - bval)); composeRGBPixel(rval, gval, bval, &pixval); pixSetPixel(pixd, x + j, y + i, pixval); break; default: L_WARNING("d neither 8 nor 32 bpp; no blend\n", procName); } } } } break; case L_BLEND_TO_BLACK: /* * The basic logic for this blending is: * p --> (1 - f) * p (p normalized to [0...1]) */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; bval = GET_DATA_BIT(linec, j); if (bval) { switch (d) { case 8: pixGetPixel(pixd, x + j, y + i, &pixval); val = (l_int32)((1. - fract) * pixval); pixSetPixel(pixd, x + j, y + i, val); break; case 32: pixGetPixel(pixd, x + j, y + i, &pixval); extractRGBValues(pixval, &rval, &gval, &bval); rval = (l_int32)((1. - fract) * rval); gval = (l_int32)((1. - fract) * gval); bval = (l_int32)((1. - fract) * bval); composeRGBPixel(rval, gval, bval, &pixval); pixSetPixel(pixd, x + j, y + i, pixval); break; default: L_WARNING("d neither 8 nor 32 bpp; no blend\n", procName); } } } } break; default: L_WARNING("invalid binary mask blend type\n", procName); break; } pixDestroy(&pixc); return pixd; } /*! * pixBlendGray() * * Input: pixd (; either NULL or equal to pixs1 for in-place) * pixs1 (blendee, depth > 1) * pixs2 (blender, any depth; typ. smaller in size than pixs1) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1; can be < 0) * fract (blending fraction) * type (L_BLEND_GRAY, L_BLEND_GRAY_WITH_INVERSE) * transparent (1 to use transparency; 0 otherwise) * transpix (pixel grayval in pixs2 that is to be transparent) * Return: pixd if OK; pixs1 on error * * Notes: * (1) For inplace operation (pixs1 not cmapped), call it this way: * pixBlendGray(pixs1, pixs1, pixs2, ...) * (2) For generating a new pixd: * pixd = pixBlendGray(NULL, pixs1, pixs2, ...) * (3) Clipping of pixs2 to pixs1 is done in the inner pixel loop. * (4) If pixs1 has a colormap, it is removed; otherwise, if pixs1 * has depth < 8, it is unpacked to generate a 8 bpp pix. * (5) If transparent = 0, the blending fraction (fract) is * applied equally to all pixels. * (6) If transparent = 1, all pixels of value transpix (typically * either 0 or 0xff) in pixs2 are transparent in the blend. * (7) After processing pixs1, it is either 8 bpp or 32 bpp: * - if 8 bpp, the fraction of pixs2 is mixed with pixs1. * - if 32 bpp, each component of pixs1 is mixed with * the same fraction of pixs2. * (8) For L_BLEND_GRAY_WITH_INVERSE, the white values of the blendee * (cval == 255 in the code below) result in a delta of 0. * Thus, these pixels are intrinsically transparent! * The "pivot" value of the src, at which no blending occurs, is * 128. Compare with the adaptive pivot in pixBlendGrayAdapt(). * (9) Invalid @fract defaults to 0.5 with a warning. * Invalid @type defaults to L_BLEND_GRAY with a warning. */ PIX * pixBlendGray(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 type, l_int32 transparent, l_uint32 transpix) { l_int32 i, j, d, wc, hc, w, h, wplc, wpld, delta; l_int32 ival, irval, igval, ibval, cval, dval; l_uint32 val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc, *pix1, *pix2; PROCNAME("pixBlendGray"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("can't do in-place with cmap", procName, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } if (type != L_BLEND_GRAY && type != L_BLEND_GRAY_WITH_INVERSE) { L_WARNING("invalid blend type; setting to L_BLEND_GRAY\n", procName); type = L_BLEND_GRAY; } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixGetDimensions(pixd, &w, &h, &d); /* 8 or 32 bpp */ wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo8(pixs2, 0); pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ if (type == L_BLEND_GRAY) { /* * The basic logic for this blending is: * p --> (1 - f) * p + f * c * where c is the 8 bpp blender. All values are normalized to [0...1]. */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || (transparent != 0 && cval != transpix)) { dval = GET_DATA_BYTE(lined, j + x); ival = (l_int32)((1. - fract) * dval + fract * cval); SET_DATA_BYTE(lined, j + x, ival); } } break; case 32: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || (transparent != 0 && cval != transpix)) { val32 = *(lined + j + x); extractRGBValues(val32, &irval, &igval, &ibval); irval = (l_int32)((1. - fract) * irval + fract * cval); igval = (l_int32)((1. - fract) * igval + fract * cval); ibval = (l_int32)((1. - fract) * ibval + fract * cval); composeRGBPixel(irval, igval, ibval, &val32); *(lined + j + x) = val32; } } break; default: break; /* shouldn't happen */ } } } else { /* L_BLEND_GRAY_WITH_INVERSE */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: /* * For 8 bpp, the dest pix is shifted by a signed amount * proportional to the distance from 128 (the pivot value), * and to the darkness of src2. If the dest is darker * than 128, it becomes lighter, and v.v. * The basic logic is: * d --> d + f * (0.5 - d) * (1 - c) * where d and c are normalized pixel values for src1 and * src2, respectively, with 8 bit normalization to [0...1]. */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || (transparent != 0 && cval != transpix)) { ival = GET_DATA_BYTE(lined, j + x); delta = (128 - ival) * (255 - cval) / 256; ival += (l_int32)(fract * delta + 0.5); SET_DATA_BYTE(lined, j + x, ival); } } break; case 32: /* Each component is shifted by the same formula for 8 bpp */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); if (transparent == 0 || (transparent != 0 && cval != transpix)) { val32 = *(lined + j + x); extractRGBValues(val32, &irval, &igval, &ibval); delta = (128 - irval) * (255 - cval) / 256; irval += (l_int32)(fract * delta + 0.5); delta = (128 - igval) * (255 - cval) / 256; igval += (l_int32)(fract * delta + 0.5); delta = (128 - ibval) * (255 - cval) / 256; ibval += (l_int32)(fract * delta + 0.5); composeRGBPixel(irval, igval, ibval, &val32); *(lined + j + x) = val32; } } break; default: break; /* shouldn't happen */ } } } pixDestroy(&pixc); return pixd; } /*! * pixBlendGrayInverse() * * Input: pixd (; either NULL or equal to pixs1 for in-place) * pixs1 (blendee, depth > 1) * pixs2 (blender, any depth; typ. smaller in size than pixs1) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1; can be < 0) * fract (blending fraction) * Return: pixd if OK; pixs1 on error * * Notes: * (1) For inplace operation (pixs1 not cmapped), call it this way: * pixBlendGrayInverse(pixs1, pixs1, pixs2, ...) * (2) For generating a new pixd: * pixd = pixBlendGrayInverse(NULL, pixs1, pixs2, ...) * (3) Clipping of pixs2 to pixs1 is done in the inner pixel loop. * (4) If pixs1 has a colormap, it is removed; otherwise if pixs1 * has depth < 8, it is unpacked to generate a 8 bpp pix. * (5) This is a no-nonsense blender. It changes the src1 pixel except * when the src1 pixel is midlevel gray. Use fract == 1 for the most * aggressive blending, where, if the gray pixel in pixs2 is 0, * we get a complete inversion of the color of the src pixel in pixs1. * (6) The basic logic is that each component transforms by: d --> c * d + (1 - c ) * (f * (1 - d) + d * (1 - f)) * where c is the blender pixel from pixs2, * f is @fract, * c and d are normalized to [0...1] * This has the property that for f == 0 (no blend) or c == 1 (white): * d --> d * For c == 0 (black) we get maximum inversion: * d --> f * (1 - d) + d * (1 - f) [inversion by fraction f] */ PIX * pixBlendGrayInverse(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract) { l_int32 i, j, d, wc, hc, w, h, wplc, wpld; l_int32 irval, igval, ibval, cval, dval; l_float32 a; l_uint32 val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc, *pix1, *pix2; PROCNAME("pixBlendGrayInverse"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("can't do in-place with cmap", procName, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } pixGetDimensions(pixd, &w, &h, &d); /* 8 or 32 bpp */ wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo8(pixs2, 0); pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); dval = GET_DATA_BYTE(lined, j + x); a = (1.0 - fract) * dval + fract * (255.0 - dval); dval = (l_int32)(cval * dval / 255.0 + a * (255.0 - cval) / 255.0); SET_DATA_BYTE(lined, j + x, dval); } break; case 32: for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); val32 = *(lined + j + x); extractRGBValues(val32, &irval, &igval, &ibval); a = (1.0 - fract) * irval + fract * (255.0 - irval); irval = (l_int32)(cval * irval / 255.0 + a * (255.0 - cval) / 255.0); a = (1.0 - fract) * igval + fract * (255.0 - igval); igval = (l_int32)(cval * igval / 255.0 + a * (255.0 - cval) / 255.0); a = (1.0 - fract) * ibval + fract * (255.0 - ibval); ibval = (l_int32)(cval * ibval / 255.0 + a * (255.0 - cval) / 255.0); composeRGBPixel(irval, igval, ibval, &val32); *(lined + j + x) = val32; } break; default: break; /* shouldn't happen */ } } pixDestroy(&pixc); return pixd; } /*! * pixBlendColor() * * Input: pixd (; either NULL or equal to pixs1 for in-place) * pixs1 (blendee; depth > 1) * pixs2 (blender, any depth;; typ. smaller in size than pixs1) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1) * fract (blending fraction) * transparent (1 to use transparency; 0 otherwise) * transpix (pixel color in pixs2 that is to be transparent) * Return: pixd, or null on error * * Notes: * (1) For inplace operation (pixs1 must be 32 bpp), call it this way: * pixBlendColor(pixs1, pixs1, pixs2, ...) * (2) For generating a new pixd: * pixd = pixBlendColor(NULL, pixs1, pixs2, ...) * (3) If pixs2 is not 32 bpp rgb, it is converted. * (4) Clipping of pixs2 to pixs1 is done in the inner pixel loop. * (5) If pixs1 has a colormap, it is removed to generate a 32 bpp pix. * (6) If pixs1 has depth < 32, it is unpacked to generate a 32 bpp pix. * (7) If transparent = 0, the blending fraction (fract) is * applied equally to all pixels. * (8) If transparent = 1, all pixels of value transpix (typically * either 0 or 0xffffff00) in pixs2 are transparent in the blend. */ PIX * pixBlendColor(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 transparent, l_uint32 transpix) { l_int32 i, j, wc, hc, w, h, wplc, wpld; l_int32 rval, gval, bval, rcval, gcval, bcval; l_uint32 cval32, val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc; PROCNAME("pixBlendColor"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, NULL); if (pixd == pixs1 && pixGetDepth(pixs1) != 32) return (PIX *)ERROR_PTR("inplace; pixs1 not 32 bpp", procName, NULL); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } /* If pixd != null, we know that it is equal to pixs1 and * that pixs1 is 32 bpp rgb, so that an in-place operation * can be done. Otherwise, pixConvertTo32() will remove a * colormap from pixs1 if it exists and unpack to 32 bpp * (if necessary) to do the blending on a new 32 bpp Pix. */ if (!pixd) pixd = pixConvertTo32(pixs1); pixGetDimensions(pixd, &w, &h, NULL); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo32(pixs2); /* blend with 32 bpp rgb */ pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ for (i = 0; i < hc; i++) { /* * The basic logic for this blending is: * p --> (1 - f) * p + f * c * for each color channel. c is a color component of the blender. * All values are normalized to [0...1]. */ if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval32 = *(linec + j); if (transparent == 0 || (transparent != 0 && ((cval32 & 0xffffff00) != (transpix & 0xffffff00)))) { val32 = *(lined + j + x); extractRGBValues(cval32, &rcval, &gcval, &bcval); extractRGBValues(val32, &rval, &gval, &bval); rval = (l_int32)((1. - fract) * rval + fract * rcval); gval = (l_int32)((1. - fract) * gval + fract * gcval); bval = (l_int32)((1. - fract) * bval + fract * bcval); composeRGBPixel(rval, gval, bval, &val32); *(lined + j + x) = val32; } } } pixDestroy(&pixc); return pixd; } /* * pixBlendColorByChannel() * * Input: pixd (; either NULL or equal to pixs1 for in-place) * pixs1 (blendee; depth > 1) * pixs2 (blender, any depth; typ. smaller in size than pixs1) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1) * rfract, gfract, bfract (blending fractions by channel) * transparent (1 to use transparency; 0 otherwise) * transpix (pixel color in pixs2 that is to be transparent) * Return: pixd if OK; pixs1 on error * * Notes: * (1) This generalizes pixBlendColor() in two ways: * (a) The mixing fraction is specified per channel. * (b) The mixing fraction may be < 0 or > 1, in which case, * the min or max of two images are taken, respectively. * (2) Specifically, * for p = pixs1[i], c = pixs2[i], f = fract[i], i = 1, 2, 3: * f < 0.0: p --> min(p, c) * 0.0 <= f <= 1.0: p --> (1 - f) * p + f * c * f > 1.0: p --> max(a, c) * Special cases: * f = 0: p --> p * f = 1: p --> c * (3) See usage notes in pixBlendColor() * (4) pixBlendColor() would be equivalent to * pixBlendColorChannel(..., fract, fract, fract, ...); * at a small cost of efficiency. */ PIX * pixBlendColorByChannel(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 rfract, l_float32 gfract, l_float32 bfract, l_int32 transparent, l_uint32 transpix) { l_int32 i, j, wc, hc, w, h, wplc, wpld; l_int32 rval, gval, bval, rcval, gcval, bcval; l_uint32 cval32, val32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc; PROCNAME("pixBlendColorByChannel"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); if (pixd == pixs1 && pixGetDepth(pixs1) != 32) return (PIX *)ERROR_PTR("inplace; pixs1 not 32 bpp", procName, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 is 32 bpp rgb, so that an in-place operation * can be done. Otherwise, pixConvertTo32() will remove a * colormap from pixs1 if it exists and unpack to 32 bpp * (if necessary) to do the blending on a new 32 bpp Pix. */ if (!pixd) pixd = pixConvertTo32(pixs1); pixGetDimensions(pixd, &w, &h, NULL); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo32(pixs2); pixGetDimensions(pixc, &wc, &hc, NULL); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); /* Check limits for src1, in case clipping was not done */ for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval32 = *(linec + j); if (transparent == 0 || (transparent != 0 && ((cval32 & 0xffffff00) != (transpix & 0xffffff00)))) { val32 = *(lined + j + x); extractRGBValues(cval32, &rcval, &gcval, &bcval); extractRGBValues(val32, &rval, &gval, &bval); rval = blendComponents(rval, rcval, rfract); gval = blendComponents(gval, gcval, gfract); bval = blendComponents(bval, bcval, bfract); composeRGBPixel(rval, gval, bval, &val32); *(lined + j + x) = val32; } } } pixDestroy(&pixc); return pixd; } static l_int32 blendComponents(l_int32 a, l_int32 b, l_float32 fract) { if (fract < 0.) return ((a < b) ? a : b); if (fract > 1.) return ((a > b) ? a : b); return (l_int32)((1. - fract) * a + fract * b); } /*! * pixBlendGrayAdapt() * * Input: pixd (; either NULL or equal to pixs1 for in-place) * pixs1 (blendee, depth > 1) * pixs2 (blender, any depth; typ. smaller in size than pixs1) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1; can be < 0) * fract (blending fraction) * shift (>= 0 but <= 128: shift of zero blend value from * median source; use -1 for default value; ) * Return: pixd if OK; pixs1 on error * * Notes: * (1) For inplace operation (pixs1 not cmapped), call it this way: * pixBlendGrayAdapt(pixs1, pixs1, pixs2, ...) * For generating a new pixd: * pixd = pixBlendGrayAdapt(NULL, pixs1, pixs2, ...) * (2) Clipping of pixs2 to pixs1 is done in the inner pixel loop. * (3) If pixs1 has a colormap, it is removed. * (4) If pixs1 has depth < 8, it is unpacked to generate a 8 bpp pix. * (5) This does a blend with inverse. Whereas in pixGlendGray(), the * zero blend point is where the blendee pixel is 128, here * the zero blend point is found adaptively, with respect to the * median of the blendee region. If the median is < 128, * the zero blend point is found from * median + shift. * Otherwise, if the median >= 128, the zero blend point is * median - shift. * The purpose of shifting the zero blend point away from the * median is to prevent a situation in pixBlendGray() where * the median is 128 and the blender is not visible. * The default value of shift is 64. * (6) After processing pixs1, it is either 8 bpp or 32 bpp: * - if 8 bpp, the fraction of pixs2 is mixed with pixs1. * - if 32 bpp, each component of pixs1 is mixed with * the same fraction of pixs2. * (7) The darker the blender, the more it mixes with the blendee. * A blender value of 0 has maximum mixing; a value of 255 * has no mixing and hence is transparent. */ PIX * pixBlendGrayAdapt(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract, l_int32 shift) { l_int32 i, j, d, wc, hc, w, h, wplc, wpld, delta, overlap; l_int32 rval, gval, bval, cval, dval, mval, median, pivot; l_uint32 val32; l_uint32 *linec, *lined, *datac, *datad; l_float32 fmedian, factor; BOX *box, *boxt; PIX *pixc, *pix1, *pix2; PROCNAME("pixBlendGrayAdapt"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); if (pixGetDepth(pixs1) == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("can't do in-place with cmap", procName, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("pixd must be NULL or pixs1", procName, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } if (shift == -1) shift = 64; /* default value */ if (shift < 0 || shift > 127) { L_WARNING("invalid shift; setting to 64\n", procName); shift = 64; } /* Test for overlap */ pixGetDimensions(pixs1, &w, &h, NULL); pixGetDimensions(pixs2, &wc, &hc, NULL); box = boxCreate(x, y, wc, hc); boxt = boxCreate(0, 0, w, h); boxIntersects(box, boxt, &overlap); boxDestroy(&boxt); if (!overlap) { boxDestroy(&box); return (PIX *)ERROR_PTR("no image overlap", procName, pixd); } /* If pixd != NULL, we know that it is equal to pixs1 and * that pixs1 does not have a colormap, so that an in-place operation * can be done. Otherwise, remove colormap from pixs1 if * it exists and unpack to at least 8 bpp if necessary, * to do the blending on a new pix. */ if (!pixd) { pix1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); if (pixGetDepth(pix1) < 8) pix2 = pixConvertTo8(pix1, FALSE); else pix2 = pixClone(pix1); pixd = pixCopy(NULL, pix2); pixDestroy(&pix1); pixDestroy(&pix2); } /* Get the median value in the region of blending */ pix1 = pixClipRectangle(pixd, box, NULL); pix2 = pixConvertTo8(pix1, 0); pixGetRankValueMasked(pix2, NULL, 0, 0, 1, 0.5, &fmedian, NULL); median = (l_int32)(fmedian + 0.5); if (median < 128) pivot = median + shift; else pivot = median - shift; pixDestroy(&pix1); pixDestroy(&pix2); boxDestroy(&box); /* Process over src2; clip to src1. */ d = pixGetDepth(pixd); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); pixc = pixConvertTo8(pixs2, 0); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; switch (d) { case 8: /* * For 8 bpp, the dest pix is shifted by an amount * proportional to the distance from the pivot value, * and to the darkness of src2. In no situation will it * pass the pivot value in intensity. * The basic logic is: * d --> d + f * (np - d) * (1 - c) * where np, d and c are normalized pixel values for * the pivot, src1 and src2, respectively, with normalization * to 255. */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; dval = GET_DATA_BYTE(lined, j + x); cval = GET_DATA_BYTE(linec, j); delta = (pivot - dval) * (255 - cval) / 256; dval += (l_int32)(fract * delta + 0.5); SET_DATA_BYTE(lined, j + x, dval); } break; case 32: /* * For 32 bpp, the dest pix is shifted by an amount * proportional to the max component distance from the * pivot value, and to the darkness of src2. Each component * is shifted by the same fraction, either up or down, * depending on the shift direction (which is toward the * pivot). The basic logic for the red component is: * r --> r + f * (np - m) * (1 - c) * (r / m) * where np, r, m and c are normalized pixel values for * the pivot, the r component of src1, the max component * of src1, and src2, respectively, again with normalization * to 255. Likewise for the green and blue components. */ for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; cval = GET_DATA_BYTE(linec, j); val32 = *(lined + j + x); extractRGBValues(val32, &rval, &gval, &bval); mval = L_MAX(rval, gval); mval = L_MAX(mval, bval); mval = L_MAX(mval, 1); delta = (pivot - mval) * (255 - cval) / 256; factor = fract * delta / mval; rval += (l_int32)(factor * rval + 0.5); gval += (l_int32)(factor * gval + 0.5); bval += (l_int32)(factor * bval + 0.5); composeRGBPixel(rval, gval, bval, &val32); *(lined + j + x) = val32; } break; default: break; /* shouldn't happen */ } } pixDestroy(&pixc); return pixd; } /*! * pixFadeWithGray() * * Input: pixs (colormapped or 8 bpp or 32 bpp) * pixb (8 bpp blender) * factor (multiplicative factor to apply to blender value) * type (L_BLEND_TO_WHITE, L_BLEND_TO_BLACK) * Return: pixd, or null on error * * Notes: * (1) This function combines two pix aligned to the UL corner; they * need not be the same size. * (2) Each pixel in pixb is multiplied by 'factor' divided by 255, and * clipped to the range [0 ... 1]. This gives the fade fraction * to be appied to pixs. Fade either to white (L_BLEND_TO_WHITE) * or to black (L_BLEND_TO_BLACK). */ PIX * pixFadeWithGray(PIX *pixs, PIX *pixb, l_float32 factor, l_int32 type) { l_int32 i, j, w, h, d, wb, hb, db, wd, hd, wplb, wpld; l_int32 valb, vald, nvald, rval, gval, bval, nrval, ngval, nbval; l_float32 nfactor, fract; l_uint32 val32, nval32; l_uint32 *lined, *datad, *lineb, *datab; PIX *pixd; PROCNAME("pixFadeWithGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixb) return (PIX *)ERROR_PTR("pixb not defined", procName, NULL); if (pixGetDepth(pixs) == 1) return (PIX *)ERROR_PTR("pixs is 1 bpp", procName, NULL); pixGetDimensions(pixb, &wb, &hb, &db); if (db != 8) return (PIX *)ERROR_PTR("pixb not 8 bpp", procName, NULL); if (factor < 0.0 || factor > 255.0) return (PIX *)ERROR_PTR("factor not in [0.0...255.0]", procName, NULL); if (type != L_BLEND_TO_WHITE && type != L_BLEND_TO_BLACK) return (PIX *)ERROR_PTR("invalid fade type", procName, NULL); /* Remove colormap if it exists; otherwise copy */ pixd = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_BASED_ON_SRC, L_COPY); pixGetDimensions(pixd, &wd, &hd, &d); w = L_MIN(wb, wd); h = L_MIN(hb, hd); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datab = pixGetData(pixb); wplb = pixGetWpl(pixb); /* The basic logic for this blending is, for each component p of pixs: * fade-to-white: p --> p + (f * c) * (1 - p) * fade-to-black: p --> p - (f * c) * p * with c being the 8 bpp blender pixel of pixb, and with both * p and c normalized to [0...1]. */ nfactor = factor / 255.; for (i = 0; i < h; i++) { lineb = datab + i * wplb; lined = datad + i * wpld; for (j = 0; j < w; j++) { valb = GET_DATA_BYTE(lineb, j); fract = nfactor * (l_float32)valb; fract = L_MIN(fract, 1.0); if (d == 8) { vald = GET_DATA_BYTE(lined, j); if (type == L_BLEND_TO_WHITE) nvald = vald + (l_int32)(fract * (255. - (l_float32)vald)); else /* L_BLEND_TO_BLACK */ nvald = vald - (l_int32)(fract * (l_float32)vald); SET_DATA_BYTE(lined, j, nvald); } else { /* d == 32 */ val32 = lined[j]; extractRGBValues(val32, &rval, &gval, &bval); if (type == L_BLEND_TO_WHITE) { nrval = rval + (l_int32)(fract * (255. - (l_float32)rval)); ngval = gval + (l_int32)(fract * (255. - (l_float32)gval)); nbval = bval + (l_int32)(fract * (255. - (l_float32)bval)); } else { nrval = rval - (l_int32)(fract * (l_float32)rval); ngval = gval - (l_int32)(fract * (l_float32)gval); nbval = bval - (l_int32)(fract * (l_float32)bval); } composeRGBPixel(nrval, ngval, nbval, &nval32); lined[j] = nval32; } } } return pixd; } /* * pixBlendHardLight() * * Input: pixd (; either NULL or equal to pixs1 for in-place) * pixs1 (blendee; depth > 1, may be cmapped) * pixs2 (blender, 8 or 32 bpp; may be colormapped; * typ. smaller in size than pixs1) * x,y (origin (UL corner) of pixs2 relative to * the origin of pixs1) * fract (blending fraction, or 'opacity factor') * Return: pixd if OK; pixs1 on error * * Notes: * (1) pixs2 must be 8 or 32 bpp; either may have a colormap. * (2) Clipping of pixs2 to pixs1 is done in the inner pixel loop. * (3) Only call in-place if pixs1 is not colormapped. * (4) If pixs1 has a colormap, it is removed to generate either an * 8 or 32 bpp pix, depending on the colormap. * (5) For inplace operation, call it this way: * pixBlendHardLight(pixs1, pixs1, pixs2, ...) * (6) For generating a new pixd: * pixd = pixBlendHardLight(NULL, pixs1, pixs2, ...) * (7) This is a generalization of the usual hard light blending, * where fract == 1.0. * (8) "Overlay" blending is the same as hard light blending, with * fract == 1.0, except that the components are switched * in the test. (Note that the result is symmetric in the * two components.) * (9) See, e.g.: * http://www.pegtop.net/delphi/articles/blendmodes/hardlight.htm * http://www.digitalartform.com/imageArithmetic.htm * (10) This function was built by Paco Galanes. */ PIX * pixBlendHardLight(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 x, l_int32 y, l_float32 fract) { l_int32 i, j, w, h, d, wc, hc, dc, wplc, wpld; l_int32 cval, dval, rcval, gcval, bcval, rdval, gdval, bdval; l_uint32 cval32, dval32; l_uint32 *linec, *lined, *datac, *datad; PIX *pixc, *pixt; PROCNAME("pixBlendHardLight"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, pixd); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, pixd); pixGetDimensions(pixs1, &w, &h, &d); pixGetDimensions(pixs2, &wc, &hc, &dc); if (d == 1) return (PIX *)ERROR_PTR("pixs1 is 1 bpp", procName, pixd); if (dc != 8 && dc != 32) return (PIX *)ERROR_PTR("pixs2 not 8 or 32 bpp", procName, pixd); if (pixd && (pixd != pixs1)) return (PIX *)ERROR_PTR("inplace and pixd != pixs1", procName, pixd); if (pixd == pixs1 && pixGetColormap(pixs1)) return (PIX *)ERROR_PTR("inplace and pixs1 cmapped", procName, pixd); if (pixd && d != 8 && d != 32) return (PIX *)ERROR_PTR("inplace and not 8 or 32 bpp", procName, pixd); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } /* If pixs2 has a colormap, remove it */ pixc = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); /* clone ok */ dc = pixGetDepth(pixc); /* There are 4 cases: * * pixs1 has or doesn't have a colormap * * pixc is either 8 or 32 bpp * In all situations, if pixs has a colormap it must be removed, * and pixd must have a depth that is equal to or greater than pixc. */ if (dc == 32) { if (pixGetColormap(pixs1)) { /* pixd == NULL */ pixd = pixRemoveColormap(pixs1, REMOVE_CMAP_TO_FULL_COLOR); } else { if (!pixd) { pixd = pixConvertTo32(pixs1); } else { pixt = pixConvertTo32(pixs1); pixCopy(pixd, pixt); pixDestroy(&pixt); } } d = 32; } else { /* dc == 8 */ if (pixGetColormap(pixs1)) /* pixd == NULL */ pixd = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); else pixd = pixCopy(pixd, pixs1); d = pixGetDepth(pixd); } if (!(d == 8 && dc == 8) && /* 3 cases only */ !(d == 32 && dc == 8) && !(d == 32 && dc == 32)) { pixDestroy(&pixc); return (PIX *)ERROR_PTR("bad! -- invalid depth combo!", procName, pixd); } wpld = pixGetWpl(pixd); datad = pixGetData(pixd); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); for (i = 0; i < hc; i++) { if (i + y < 0 || i + y >= h) continue; linec = datac + i * wplc; lined = datad + (i + y) * wpld; for (j = 0; j < wc; j++) { if (j + x < 0 || j + x >= w) continue; if (d == 8 && dc == 8) { dval = GET_DATA_BYTE(lined, x + j); cval = GET_DATA_BYTE(linec, j); dval = blendHardLightComponents(dval, cval, fract); SET_DATA_BYTE(lined, x + j, dval); } else if (d == 32 && dc == 8) { dval32 = *(lined + x + j); extractRGBValues(dval32, &rdval, &gdval, &bdval); cval = GET_DATA_BYTE(linec, j); rdval = blendHardLightComponents(rdval, cval, fract); gdval = blendHardLightComponents(gdval, cval, fract); bdval = blendHardLightComponents(bdval, cval, fract); composeRGBPixel(rdval, gdval, bdval, &dval32); *(lined + x + j) = dval32; } else if (d == 32 && dc == 32) { dval32 = *(lined + x + j); extractRGBValues(dval32, &rdval, &gdval, &bdval); cval32 = *(linec + j); extractRGBValues(cval32, &rcval, &gcval, &bcval); rdval = blendHardLightComponents(rdval, rcval, fract); gdval = blendHardLightComponents(gdval, gcval, fract); bdval = blendHardLightComponents(bdval, bcval, fract); composeRGBPixel(rdval, gdval, bdval, &dval32); *(lined + x + j) = dval32; } } } pixDestroy(&pixc); return pixd; } /* * blendHardLightComponents() * Input: a (8 bpp blendee component) * b (8 bpp blender component) * fract (fraction of blending; use 1.0 for usual definition) * Return: blended 8 bpp component * * Notes: * * The basic logic for this blending is: * b < 0.5: * a --> 2 * a * (0.5 - f * (0.5 - b)) * b >= 0.5: * a --> 1 - 2 * (1 - a) * (1 - (0.5 - f * (0.5 - b))) * * In the limit that f == 1 (standard hardlight blending): * b < 0.5: a --> 2 * a * b * or * a --> a - a * (1 - 2 * b) * b >= 0.5: a --> 1 - 2 * (1 - a) * (1 - b) * or * a --> a + (1 - a) * (2 * b - 1) * * You can see that for standard hardlight blending: * b < 0.5: a is pushed linearly with b down to 0 * b >= 0.5: a is pushed linearly with b up to 1 * a is unchanged if b = 0.5 * * Our opacity factor f reduces the deviation of b from 0.5: * f == 0: b --> 0.5, so no blending occurs * f == 1: b --> b, so we get full conventional blending * * There is a variant of hardlight blending called "softlight" blending: * (e.g., http://jswidget.com/blog/tag/hard-light/) * b < 0.5: * a --> a - a * (0.5 - b) * (1 - Abs(2 * a - 1)) * b >= 0.5: * a --> a + (1 - a) * (b - 0.5) * (1 - Abs(2 * a - 1)) * which limits the amount that 'a' can be moved to a maximum of * halfway toward 0 or 1, and further reduces it as 'a' moves * away from 0.5. * As you can see, there are a nearly infinite number of different * blending formulas that can be conjured up. */ static l_int32 blendHardLightComponents(l_int32 a, l_int32 b, l_float32 fract) { if (b < 0x80) { b = 0x80 - (l_int32)(fract * (0x80 - b)); return (a * b) >> 7; } else { b = 0x80 + (l_int32)(fract * (b - 0x80)); return 0xff - (((0xff - b) * (0xff - a)) >> 7); } } /*-------------------------------------------------------------* * Blending two colormapped images * *-------------------------------------------------------------*/ /*! * pixBlendCmap() * * Input: pixs (2, 4 or 8 bpp, with colormap) * pixb (colormapped blender) * x, y (UL corner of blender relative to pixs) * sindex (colormap index of pixels in pixs to be changed) * Return: 0 if OK, 1 on error * * Note: * (1) This function combines two colormaps, and replaces the pixels * in pixs that have a specified color value with those in pixb. * (2) sindex must be in the existing colormap; otherwise an * error is returned. In use, sindex will typically be the index * for white (255, 255, 255). * (3) Blender colors that already exist in the colormap are used; * others are added. If any blender colors cannot be * stored in the colormap, an error is returned. * (4) In the implementation, a mapping is generated from each * original blender colormap index to the corresponding index * in the expanded colormap for pixs. Then for each pixel in * pixs with value sindex, and which is covered by a blender pixel, * the new index corresponding to the blender pixel is substituted * for sindex. */ l_int32 pixBlendCmap(PIX *pixs, PIX *pixb, l_int32 x, l_int32 y, l_int32 sindex) { l_int32 rval, gval, bval; l_int32 i, j, w, h, d, ncb, wb, hb, wpls; l_int32 index, val, nadded; l_int32 lut[256]; l_uint32 pval; l_uint32 *lines, *datas; PIXCMAP *cmaps, *cmapb, *cmapsc; PROCNAME("pixBlendCmap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixb) return ERROR_INT("pixb not defined", procName, 1); if ((cmaps = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap in pixs", procName, 1); if ((cmapb = pixGetColormap(pixb)) == NULL) return ERROR_INT("no colormap in pixb", procName, 1); ncb = pixcmapGetCount(cmapb); /* Make a copy of cmaps; we'll add to this if necessary * and substitute at the end if we found there was enough room * to hold all the new colors. */ cmapsc = pixcmapCopy(cmaps); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2,4,8}", procName, 1); /* Add new colors if necessary; get mapping array between * cmaps and cmapb. */ for (i = 0, nadded = 0; i < ncb; i++) { pixcmapGetColor(cmapb, i, &rval, &gval, &bval); if (pixcmapGetIndex(cmapsc, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmapsc, rval, gval, bval)) { pixcmapDestroy(&cmapsc); return ERROR_INT("not enough room in cmaps", procName, 1); } lut[i] = pixcmapGetCount(cmapsc) - 1; nadded++; } else { lut[i] = index; } } /* Replace cmaps if colors have been added. */ if (nadded == 0) pixcmapDestroy(&cmapsc); else pixSetColormap(pixs, cmapsc); /* Replace each pixel value sindex by mapped colormap index when * a blender pixel in pixbc overlays it. */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixGetDimensions(pixb, &wb, &hb, NULL); for (i = 0; i < hb; i++) { if (i + y < 0 || i + y >= h) continue; lines = datas + (y + i) * wpls; for (j = 0; j < wb; j++) { if (j + x < 0 || j + x >= w) continue; switch (d) { case 2: val = GET_DATA_DIBIT(lines, x + j); if (val == sindex) { pixGetPixel(pixb, j, i, &pval); SET_DATA_DIBIT(lines, x + j, lut[pval]); } break; case 4: val = GET_DATA_QBIT(lines, x + j); if (val == sindex) { pixGetPixel(pixb, j, i, &pval); SET_DATA_QBIT(lines, x + j, lut[pval]); } break; case 8: val = GET_DATA_BYTE(lines, x + j); if (val == sindex) { pixGetPixel(pixb, j, i, &pval); SET_DATA_BYTE(lines, x + j, lut[pval]); } break; default: return ERROR_INT("depth not in {2,4,8}", procName, 1); } } } return 0; } /*---------------------------------------------------------------------* * Blending two images using a third * *---------------------------------------------------------------------*/ /*! * pixBlendWithGrayMask() * * Input: pixs1 (8 bpp gray, rgb, rgba or colormapped) * pixs2 (8 bpp gray, rgb, rgba or colormapped) * pixg ( 8 bpp gray, for transparency of pixs2; * can be null) * x, y (UL corner of pixs2 and pixg with respect to pixs1) * Return: pixd (blended image), or null on error * * Notes: * (1) The result is 8 bpp grayscale if both pixs1 and pixs2 are * 8 bpp gray. Otherwise, the result is 32 bpp rgb. * (2) pixg is an 8 bpp transparency image, where 0 is transparent * and 255 is opaque. It determines the transparency of pixs2 * when applied over pixs1. It can be null if pixs2 is rgba, * in which case we use the alpha component of pixs2. * (3) If pixg exists, it need not be the same size as pixs2. * However, we assume their UL corners are aligned with each other, * and placed at the location (x, y) in pixs1. * (4) The pixels in pixd are a combination of those in pixs1 * and pixs2, where the amount from pixs2 is proportional to * the value of the pixel (p) in pixg, and the amount from pixs1 * is proportional to (255 - p). Thus pixg is a transparency * image (usually called an alpha blender) where each pixel * can be associated with a pixel in pixs2, and determines * the amount of the pixs2 pixel in the final result. * For example, if pixg is all 0, pixs2 is transparent and * the result in pixd is simply pixs1. * (5) A typical use is for the pixs2/pixg combination to be * a small watermark that is applied to pixs1. */ PIX * pixBlendWithGrayMask(PIX *pixs1, PIX *pixs2, PIX *pixg, l_int32 x, l_int32 y) { l_int32 w1, h1, d1, w2, h2, d2, spp, wg, hg, wmin, hmin, wpld, wpls, wplg; l_int32 i, j, val, dval, sval; l_int32 drval, dgval, dbval, srval, sgval, sbval; l_uint32 dval32, sval32; l_uint32 *datad, *datas, *datag, *lined, *lines, *lineg; l_float32 fract; PIX *pixr1, *pixr2, *pix1, *pix2, *pixg2, *pixd; PROCNAME("pixBlendWithGrayMask"); if (!pixs1) return (PIX *)ERROR_PTR("pixs1 not defined", procName, NULL); if (!pixs2) return (PIX *)ERROR_PTR("pixs2 not defined", procName, NULL); pixGetDimensions(pixs1, &w1, &h1, &d1); pixGetDimensions(pixs2, &w2, &h2, &d2); if (d1 == 1 || d2 == 1) return (PIX *)ERROR_PTR("pixs1 or pixs2 is 1 bpp", procName, NULL); if (pixg) { if (pixGetDepth(pixg) != 8) return (PIX *)ERROR_PTR("pixg not 8 bpp", procName, NULL); pixGetDimensions(pixg, &wg, &hg, NULL); wmin = L_MIN(w2, wg); hmin = L_MIN(h2, hg); pixg2 = pixClone(pixg); } else { /* use the alpha component of pixs2 */ spp = pixGetSpp(pixs2); if (d2 != 32 || spp != 4) return (PIX *)ERROR_PTR("no alpha; pixs2 not rgba", procName, NULL); wmin = w2; hmin = h2; pixg2 = pixGetRGBComponent(pixs2, L_ALPHA_CHANNEL); } /* Remove colormaps if they exist; clones are OK */ pixr1 = pixRemoveColormap(pixs1, REMOVE_CMAP_BASED_ON_SRC); pixr2 = pixRemoveColormap(pixs2, REMOVE_CMAP_BASED_ON_SRC); /* Regularize to the same depth if necessary */ d1 = pixGetDepth(pixr1); d2 = pixGetDepth(pixr2); if (d1 == 32) { /* convert d2 to rgb if necessary */ pix1 = pixClone(pixr1); if (d2 != 32) pix2 = pixConvertTo32(pixr2); else pix2 = pixClone(pixr2); } else if (d2 == 32) { /* and d1 != 32; convert to 32 */ pix2 = pixClone(pixr2); pix1 = pixConvertTo32(pixr1); } else { /* both are 8 bpp or less */ pix1 = pixConvertTo8(pixr1, FALSE); pix2 = pixConvertTo8(pixr2, FALSE); } pixDestroy(&pixr1); pixDestroy(&pixr2); /* Sanity check */ d1 = pixGetDepth(pix1); d2 = pixGetDepth(pix2); if (d1 != d2) { pixDestroy(&pix1); pixDestroy(&pix2); return (PIX *)ERROR_PTR("depths not regularized! bad!", procName, NULL); } /* Start with a copy of pix1 */ pixd = pixCopy(NULL, pix1); pixDestroy(&pix1); /* Blend pix2 onto pixd, using pixg2. * Let the normalized pixel value of pixg2 be f = pixval / 255, * and the pixel values of pixd and pix2 be p1 and p2, rsp. * Then the blended value is: * p = (1.0 - f) * p1 + f * p2 * Blending is done component-wise if rgb. * Scan over pix2 and pixg2, clipping to pixd where necessary. */ datad = pixGetData(pixd); datas = pixGetData(pix2); datag = pixGetData(pixg2); wpld = pixGetWpl(pixd); wpls = pixGetWpl(pix2); wplg = pixGetWpl(pixg2); for (i = 0; i < hmin; i++) { if (i + y < 0 || i + y >= h1) continue; lined = datad + (i + y) * wpld; lines = datas + i * wpls; lineg = datag + i * wplg; for (j = 0; j < wmin; j++) { if (j + x < 0 || j + x >= w1) continue; val = GET_DATA_BYTE(lineg, j); if (val == 0) continue; /* pix2 is transparent */ fract = (l_float32)val / 255.; switch (d1) { case 8: dval = GET_DATA_BYTE(lined, j + x); sval = GET_DATA_BYTE(lines, j); dval = (l_int32)((1.0 - fract) * dval + fract * sval); SET_DATA_BYTE(lined, j + x, dval); break; case 32: dval32 = *(lined + j + x); sval32 = *(lines + j); extractRGBValues(dval32, &drval, &dgval, &dbval); extractRGBValues(sval32, &srval, &sgval, &sbval); drval = (l_int32)((1.0 - fract) * drval + fract * srval); dgval = (l_int32)((1.0 - fract) * dgval + fract * sgval); dbval = (l_int32)((1.0 - fract) * dbval + fract * sbval); composeRGBPixel(drval, dgval, dbval, &dval32); *(lined + j + x) = dval32; break; default: return (PIX *)ERROR_PTR("impossible error", procName, NULL); } } } pixDestroy(&pixg2); pixDestroy(&pix2); return pixd; } /*---------------------------------------------------------------------* * Blending background to a specific color * *---------------------------------------------------------------------*/ /*! * pixBlendBackgroundToColor() * * Input: pixd (can be NULL or pixs) * pixs (32 bpp rgb) * box (region for blending; can be NULL)) * color (32 bit color in 0xrrggbb00 format) * gamma, minval, maxval (args for grayscale TRC mapping) * Return: pixd always * * Notes: * (1) This in effect replaces light background pixels in pixs * by the input color. It does it by alpha blending so that * there are no visible artifacts from hard cutoffs. * (2) If pixd == pixs, this is done in-place. * (3) If box == NULL, this is performed on all of pixs. * (4) The alpha component for blending is derived from pixs, * by converting to grayscale and enhancing with a TRC. * (5) The last three arguments specify the TRC operation. * Suggested values are: @gamma = 0.3, @minval = 50, @maxval = 200. * To skip the TRC, use @gamma == 1, @minval = 0, @maxval = 255. * See pixGammaTRC() for details. */ PIX * pixBlendBackgroundToColor(PIX *pixd, PIX *pixs, BOX *box, l_uint32 color, l_float32 gamma, l_int32 minval, l_int32 maxval) { l_int32 x, y, w, h; BOX *boxt; PIX *pixt, *pixc, *pixr, *pixg; PROCNAME("pixBlendBackgroundToColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd neither null nor pixs", procName, pixd); /* Extract the (optionally cropped) region, pixr, and generate * an identically sized pixc with the uniform color. */ if (!pixd) pixd = pixCopy(NULL, pixs); if (box) { pixr = pixClipRectangle(pixd, box, &boxt); boxGetGeometry(boxt, &x, &y, &w, &h); pixc = pixCreate(w, h, 32); boxDestroy(&boxt); } else { pixc = pixCreateTemplate(pixs); pixr = pixClone(pixd); } pixSetAllArbitrary(pixc, color); /* Set up the alpha channel */ pixg = pixConvertTo8(pixr, 0); pixGammaTRC(pixg, pixg, gamma, minval, maxval); pixSetRGBComponent(pixc, pixg, L_ALPHA_CHANNEL); /* Blend and replace in pixd */ pixt = pixBlendWithGrayMask(pixr, pixc, NULL, 0, 0); if (box) { pixRasterop(pixd, x, y, w, h, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); } else { pixTransferAllData(pixd, &pixt, 0, 0); } pixDestroy(&pixc); pixDestroy(&pixr); pixDestroy(&pixg); return pixd; } /*---------------------------------------------------------------------* * Multiplying by a specific color * *---------------------------------------------------------------------*/ /*! * pixMultiplyByColor() * * Input: pixd (can be NULL or pixs) * pixs (32 bpp rgb) * box (region for filtering; can be NULL)) * color (32 bit color in 0xrrggbb00 format) * Return: pixd always * * Notes: * (1) This filters all pixels in the specified region by * multiplying each component by the input color. * This leaves black invariant and transforms white to the * input color. * (2) If pixd == pixs, this is done in-place. * (3) If box == NULL, this is performed on all of pixs. */ PIX * pixMultiplyByColor(PIX *pixd, PIX *pixs, BOX *box, l_uint32 color) { l_int32 i, j, bx, by, w, h, wpl; l_int32 red, green, blue, rval, gval, bval, nrval, ngval, nbval; l_float32 frval, fgval, fbval; l_uint32 *data, *line; PIX *pixt; PROCNAME("pixMultiplyByColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd neither null nor pixs", procName, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); if (box) { boxGetGeometry(box, &bx, &by, NULL, NULL); pixt = pixClipRectangle(pixd, box, NULL); } else { pixt = pixClone(pixd); } /* Multiply each pixel in pixt by the color */ extractRGBValues(color, &red, &green, &blue); frval = (1. / 255.) * red; fgval = (1. / 255.) * green; fbval = (1. / 255.) * blue; data = pixGetData(pixt); wpl = pixGetWpl(pixt); pixGetDimensions(pixt, &w, &h, NULL); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); nrval = (l_int32)(frval * rval + 0.5); ngval = (l_int32)(fgval * gval + 0.5); nbval = (l_int32)(fbval * bval + 0.5); composeRGBPixel(nrval, ngval, nbval, line + j); } } /* Replace */ if (box) pixRasterop(pixd, bx, by, w, h, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------* * Rendering with alpha blending over a uniform background * *---------------------------------------------------------------------*/ /*! * pixAlphaBlendUniform() * * Input: pixs (32 bpp rgba, with alpha) * color (32 bit color in 0xrrggbb00 format) * Return: pixd (32 bpp rgb: pixs blended over uniform color @color), * a clone of pixs if no alpha, and null on error * * Notes: * (1) This is a convenience function that renders 32 bpp RGBA images * (with an alpha channel) over a uniform background of * value @color. To render over a white background, * use @color = 0xffffff00. The result is an RGB image. * (2) If pixs does not have an alpha channel, it returns a clone * of pixs. */ PIX * pixAlphaBlendUniform(PIX *pixs, l_uint32 color) { PIX *pixt, *pixd; PROCNAME("pixAlphaBlendUniform"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (pixGetSpp(pixs) != 4) { L_WARNING("no alpha channel; returning clone\n", procName); return pixClone(pixs); } pixt = pixCreateTemplate(pixs); pixSetAllArbitrary(pixt, color); pixSetSpp(pixt, 3); /* not required */ pixd = pixBlendWithGrayMask(pixt, pixs, NULL, 0, 0); pixDestroy(&pixt); return pixd; } /*---------------------------------------------------------------------* * Adding an alpha layer for blending * *---------------------------------------------------------------------*/ /*! * pixAddAlphaToBlend() * * Input: pixs (any depth) * fract (fade fraction in the alpha component) * invert (1 to photometrically invert pixs) * Return: pixd (32 bpp with alpha), or null on error * * Notes: * (1) This is a simple alpha layer generator, where typically white has * maximum transparency and black has minimum. * (2) If @invert == 1, generate the same alpha layer but invert * the input image photometrically. This is useful for blending * over dark images, where you want dark regions in pixs, such * as text, to be lighter in the blended image. * (3) The fade @fract gives the minimum transparency (i.e., * maximum opacity). A small fraction is useful for adding * a watermark to an image. * (4) If pixs has a colormap, it is removed to rgb. * (5) If pixs already has an alpha layer, it is overwritten. */ PIX * pixAddAlphaToBlend(PIX *pixs, l_float32 fract, l_int32 invert) { PIX *pixd, *pix1, *pix2; PROCNAME("pixAddAlphaToBlend"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (fract < 0.0 || fract > 1.0) return (PIX *)ERROR_PTR("invalid fract", procName, NULL); /* Convert to 32 bpp */ if (pixGetColormap(pixs)) pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pix1 = pixClone(pixs); pixd = pixConvertTo32(pix1); /* new */ /* Use an inverted image if this will be blended with a dark image */ if (invert) pixInvert(pixd, pixd); /* Generate alpha layer */ pix2 = pixConvertTo8(pix1, 0); /* new */ pixInvert(pix2, pix2); pixMultConstantGray(pix2, fract); pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*---------------------------------------------------------------------* * Setting a transparent alpha component over a white background * *---------------------------------------------------------------------*/ /*! * pixSetAlphaOverWhite() * * Input: pixs (colormapped or 32 bpp rgb; no alpha) * Return: pixd (new pix with meaningful alpha component), * or null on error * * Notes: * (1) The generated alpha component is transparent over white * (background) pixels in pixs, and quickly grades to opaque * away from the transparent parts. This is a cheap and * dirty alpha generator. The 2 pixel gradation is useful * to blur the boundary between the transparent region * (that will render entirely from a backing image) and * the remainder which renders from pixs. * (2) All alpha component bits in pixs are overwritten. */ PIX * pixSetAlphaOverWhite(PIX *pixs) { PIX *pixd, *pix1, *pix2, *pix3, *pix4; PROCNAME("pixSetAlphaOverWhite"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!(pixGetDepth(pixs) == 32 || pixGetColormap(pixs))) return (PIX *)ERROR_PTR("pixs not 32 bpp or cmapped", procName, NULL); /* Remove colormap if it exists; otherwise copy */ pixd = pixRemoveColormapGeneral(pixs, REMOVE_CMAP_TO_FULL_COLOR, L_COPY); /* Generate a 1 bpp image where a white pixel in pixd is 0. * In the comments below, a "white" pixel refers to pixd. * pix1 is rgb, pix2 is 8 bpp gray, pix3 is 1 bpp. */ pix1 = pixInvert(NULL, pixd); /* send white (255) to 0 for each sample */ pix2 = pixConvertRGBToGrayMinMax(pix1, L_CHOOSE_MAX); /* 0 if white */ pix3 = pixThresholdToBinary(pix2, 1); /* sets white pixels to 1 */ pixInvert(pix3, pix3); /* sets white pixels to 0 */ /* Generate the alpha component using the distance transform, * which measures the distance to the nearest bg (0) pixel in pix3. * After multiplying by 128, its value is 0 (transparent) * over white pixels, and goes to opaque (255) two pixels away * from the nearest white pixel. */ pix4 = pixDistanceFunction(pix3, 8, 8, L_BOUNDARY_FG); pixMultConstantGray(pix4, 128.0); pixSetRGBComponent(pixd, pix4, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); return pixd; } leptonica-1.70/src/graymorphlow.c0000644000175000017500000003124711767450643015216 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * graymorphlow.c * * Low-level grayscale morphological operations * * void dilateGrayLow() * void erodeGrayLow() * * * We use the van Herk/Gil-Werman (vHGW) algorithm, [van Herk, * Patt. Recog. Let. 13, pp. 517-521, 1992; Gil and Werman, * IEEE Trans PAMI 15(5), pp. 504-507, 1993.] * This was the first grayscale morphology * algorithm to compute dilation and erosion with * complexity independent of the size of the structuring * element. It is simple and elegant, and surprising that * it was discovered as recently as 1992. It works for * SEs composed of horizontal and/or vertical lines. The * general case requires finding the Min or Max over an * arbitrary set of pixels, and this requires a number of * pixel comparisons equal to the SE "size" at each pixel * in the image. The vHGW algorithm requires not * more than 3 comparisons at each point. The algorithm has been * recently refined by Gil and Kimmel ("Efficient Dilation * Erosion, Opening and Closing Algorithms", in "Mathematical * Morphology and its Applications to Image and Signal Processing", * the proceedings of the International Symposium on Mathematical * Morphology, Palo Alto, CA, June 2000, Kluwer Academic * Publishers, pp. 301-310). They bring this number down below * 1.5 comparisons per output pixel but at a cost of significantly * increased complexity, so I don't bother with that here. * * In brief, the method is as follows. We evaluate the dilation * in groups of "size" pixels, equal to the size of the SE. * For horizontal, we start at x = "size"/2 and go * (w - 2 * ("size"/2))/"size" steps. This means that * we don't evaluate the first 0.5 * "size" pixels and, worst * case, the last 1.5 * "size" pixels. Thus we embed the * image in a larger image with these augmented dimensions, where * the new border pixels are appropriately initialized (0 for * dilation; 255 for erosion), and remove the boundary at the end. * (For vertical, use h instead of w.) Then for each group * of "size" pixels, we form an array of length 2 * "size" + 1, * consisting of backward and forward partial maxima (for * dilation) or minima (for erosion). This represents a * jumping window computed from the source image, over which * the SE will slide. The center of the array gets the source * pixel at the center of the SE. Call this the center pixel * of the window. Array values to left of center get * the maxima(minima) of the pixels from the center * one and going to the left an equal distance. Array * values to the right of center get the maxima(minima) to * the pixels from the center one and going to the right * an equal distance. These are computed sequentially starting * from the center one. The SE (of length "size") can slide over this * window (of length 2 * "size + 1) at "size" different places. * At each place, the maxima(minima) of the values in the window * that correspond to the end points of the SE give the extremal * values over that interval, and these are stored at the dest * pixel corresponding to the SE center. A picture is worth * at least this many words, so if this isn't clear, see the * leptonica documentation on grayscale morphology. * */ #include "allheaders.h" /*-----------------------------------------------------------------* * Low-level gray morphological operations * *-----------------------------------------------------------------*/ /*! * dilateGrayLow() * * Input: datad, w, h, wpld (8 bpp image) * datas, wpls (8 bpp image, of same dimensions) * size (full length of SEL; restricted to odd numbers) * direction (L_HORIZ or L_VERT) * buffer (holds full line or column of src image pixels) * maxarray (array of dimension 2*size+1) * Return: void * * Notes: * (1) To eliminate border effects on the actual image, these images * are prepared with an additional border of dimensions: * leftpix = 0.5 * size * rightpix = 1.5 * size * toppix = 0.5 * size * bottompix = 1.5 * size * and we initialize the src border pixels to 0. * This allows full processing over the actual image; at * the end the border is removed. * (2) Uses algorithm of van Herk, Gil and Werman */ void dilateGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *maxarray) { l_int32 i, j, k; l_int32 hsize, nsteps, startmax, startx, starty; l_uint8 maxval; l_uint32 *lines, *lined; if (direction == L_HORIZ) { hsize = size / 2; nsteps = (w - 2 * hsize) / size; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* fill buffer with pixels in byte order */ for (j = 0; j < w; j++) buffer[j] = GET_DATA_BYTE(lines, j); for (j = 0; j < nsteps; j++) { /* refill the minarray */ startmax = (j + 1) * size - 1; maxarray[size - 1] = buffer[startmax]; for (k = 1; k < size; k++) { maxarray[size - 1 - k] = L_MAX(maxarray[size - k], buffer[startmax - k]); maxarray[size - 1 + k] = L_MAX(maxarray[size + k - 2], buffer[startmax + k]); } /* compute dilation values */ startx = hsize + j * size; SET_DATA_BYTE(lined, startx, maxarray[0]); SET_DATA_BYTE(lined, startx + size - 1, maxarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { maxval = L_MAX(maxarray[k], maxarray[k + size - 1]); SET_DATA_BYTE(lined, startx + k, maxval); } } } } else { /* direction == L_VERT */ hsize = size / 2; nsteps = (h - 2 * hsize) / size; for (j = 0; j < w; j++) { /* fill buffer with pixels in byte order */ for (i = 0; i < h; i++) { lines = datas + i * wpls; buffer[i] = GET_DATA_BYTE(lines, j); } for (i = 0; i < nsteps; i++) { /* refill the minarray */ startmax = (i + 1) * size - 1; maxarray[size - 1] = buffer[startmax]; for (k = 1; k < size; k++) { maxarray[size - 1 - k] = L_MAX(maxarray[size - k], buffer[startmax - k]); maxarray[size - 1 + k] = L_MAX(maxarray[size + k - 2], buffer[startmax + k]); } /* compute dilation values */ starty = hsize + i * size; lined = datad + starty * wpld; SET_DATA_BYTE(lined, j, maxarray[0]); SET_DATA_BYTE(lined + (size - 1) * wpld, j, maxarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { maxval = L_MAX(maxarray[k], maxarray[k + size - 1]); SET_DATA_BYTE(lined + wpld * k, j, maxval); } } } } return; } /*! * erodeGrayLow() * * Input: datad, w, h, wpld (8 bpp image) * datas, wpls (8 bpp image, of same dimensions) * size (full length of SEL; restricted to odd numbers) * direction (L_HORIZ or L_VERT) * buffer (holds full line or column of src image pixels) * minarray (array of dimension 2*size+1) * Return: void * * Notes: * (1) See notes in dilateGrayLow() */ void erodeGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 size, l_int32 direction, l_uint8 *buffer, l_uint8 *minarray) { l_int32 i, j, k; l_int32 hsize, nsteps, startmin, startx, starty; l_uint8 minval; l_uint32 *lines, *lined; if (direction == L_HORIZ) { hsize = size / 2; nsteps = (w - 2 * hsize) / size; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; /* fill buffer with pixels in byte order */ for (j = 0; j < w; j++) buffer[j] = GET_DATA_BYTE(lines, j); for (j = 0; j < nsteps; j++) { /* refill the minarray */ startmin = (j + 1) * size - 1; minarray[size - 1] = buffer[startmin]; for (k = 1; k < size; k++) { minarray[size - 1 - k] = L_MIN(minarray[size - k], buffer[startmin - k]); minarray[size - 1 + k] = L_MIN(minarray[size + k - 2], buffer[startmin + k]); } /* compute erosion values */ startx = hsize + j * size; SET_DATA_BYTE(lined, startx, minarray[0]); SET_DATA_BYTE(lined, startx + size - 1, minarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { minval = L_MIN(minarray[k], minarray[k + size - 1]); SET_DATA_BYTE(lined, startx + k, minval); } } } } else { /* direction == L_VERT */ hsize = size / 2; nsteps = (h - 2 * hsize) / size; for (j = 0; j < w; j++) { /* fill buffer with pixels in byte order */ for (i = 0; i < h; i++) { lines = datas + i * wpls; buffer[i] = GET_DATA_BYTE(lines, j); } for (i = 0; i < nsteps; i++) { /* refill the minarray */ startmin = (i + 1) * size - 1; minarray[size - 1] = buffer[startmin]; for (k = 1; k < size; k++) { minarray[size - 1 - k] = L_MIN(minarray[size - k], buffer[startmin - k]); minarray[size - 1 + k] = L_MIN(minarray[size + k - 2], buffer[startmin + k]); } /* compute erosion values */ starty = hsize + i * size; lined = datad + starty * wpld; SET_DATA_BYTE(lined, j, minarray[0]); SET_DATA_BYTE(lined + (size - 1) * wpld, j, minarray[2 * size - 2]); for (k = 1; k < size - 1; k++) { minval = L_MIN(minarray[k], minarray[k + size - 1]); SET_DATA_BYTE(lined + wpld * k, j, minval); } } } } return; } leptonica-1.70/src/xtractprotos.c0000644000175000017500000002271312267060734015230 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * xtractprotos.c * * This program accepts a list of C files on the command line * and outputs the C prototypes to stdout. It uses cpp to * handle the preprocessor macros, and then parses the cpp output. * In leptonica, it is used to make allheaders.h (and optionally * leptprotos.h, which contains just the function prototypes.) * In leptonica, only the file allheaders.h is included with * source files. * * An optional 'prestring' can be prepended to each declaration. * And the function prototypes can either be sent to stdout, written * to a named file, or placed in-line within allheaders.h. * * The signature is: * * xtractprotos [-prestring=] [-protos=] [list of C files] * * Without -protos, the prototypes are written to stdout. * With -protos, allheaders.h is rewritten: * * if you use -protos=inline, the prototypes are placed within * allheaders.h. * * if you use -protos=leptprotos.h, the prototypes written to * the file leptprotos.h, and alltypes.h has * #include "leptprotos.h" * * For constructing allheaders.h, two text files are provided: * allheaders_top.txt * allheaders_bot.txt * The former contains the leptonica version number, so it must * be updated when a new version is made. * * For simple C prototype extraction, xtractprotos has essentially * the same functionality as Adam Bryant's cextract, but the latter * has not been officially supported for over 15 years, has been * patched numerous times, and doesn't work with sys/sysmacros.h * for 64 bit architecture. * * This is used to extract all prototypes in liblept. * The function that does all the work is parseForProtos(), * which takes as input the output from cpp. * * xtractprotos can run in leptonica to do an 'ab initio' generation * of allheaders.h; that is, it can make allheaders.h without * leptprotos.h and with an allheaders.h file of 0 length. * Of course, the usual situation is to run it with a valid allheaders.h, * which includes all the function prototypes. To avoid including * all the prototypes in the input for each file, cpp runs here * with -DNO_PROTOS, so the prototypes are not included -- this is * much faster. * * The xtractprotos version number, defined below, is incremented * whenever a new version is made. */ #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 512; /* Cygwin needs an extension to prevent it from appending * ".exe" to the filename */ static const char *tempfile = "/tmp/temp_cpp_output.txt"; static const char *version = "1.5"; int main(int argc, char **argv) { char *filein, *str, *prestring, *outprotos, *protostr; const char *spacestr = " "; char buf[L_BUF_SIZE]; l_uint8 *allheaders; l_int32 i, maxindex, in_line, nflags, protos_added, firstfile, len, ret; size_t nbytes; L_BYTEA *ba, *ba2; SARRAY *sa, *safirst; static char mainName[] = "xtractprotos"; if (argc == 1) { fprintf(stderr, "xtractprotos [-prestring=] [-protos=] " "[list of C files]\n" "where the prestring is prepended to each prototype, and \n" "protos can be either 'inline' or the name of an output " "prototype file\n"); return 1; } /* ---------------------------------------------------------------- */ /* Parse input flags and find prestring and outprotos, if requested */ /* ---------------------------------------------------------------- */ prestring = outprotos = NULL; in_line = FALSE; nflags = 0; maxindex = L_MIN(3, argc); for (i = 1; i < maxindex; i++) { if (argv[i][0] == '-') { if (!strncmp(argv[i], "-prestring", 10)) { nflags++; ret = sscanf(argv[i] + 1, "prestring=%s", buf); if (ret != 1) { fprintf(stderr, "parse failure for prestring\n"); return 1; } if ((len = strlen(buf)) > L_BUF_SIZE - 3) { L_WARNING("prestring too large; omitting!\n", mainName); } else { buf[len] = ' '; buf[len + 1] = '\0'; prestring = stringNew(buf); } } else if (!strncmp(argv[i], "-protos", 7)) { nflags++; ret = sscanf(argv[i] + 1, "protos=%s", buf); if (ret != 1) { fprintf(stderr, "parse failure for protos\n"); return 1; } outprotos = stringNew(buf); if (!strncmp(outprotos, "inline", 7)) in_line = TRUE; } } } if (argc - nflags < 2) { fprintf(stderr, "no files specified!\n"); return 1; } /* ---------------------------------------------------------------- */ /* Generate the prototype string */ /* ---------------------------------------------------------------- */ ba = l_byteaCreate(500); /* First the extern C head */ sa = sarrayCreate(0); sarrayAddString(sa, (char *)"/*", 1); snprintf(buf, L_BUF_SIZE, " * These prototypes were autogen'd by xtractprotos, v. %s", version); sarrayAddString(sa, buf, 1); sarrayAddString(sa, (char *)" */", 1); sarrayAddString(sa, (char *)"#ifdef __cplusplus", 1); sarrayAddString(sa, (char *)"extern \"C\" {", 1); sarrayAddString(sa, (char *)"#endif /* __cplusplus */\n", 1); str = sarrayToString(sa, 1); l_byteaAppendString(ba, str); lept_free(str); sarrayDestroy(&sa); /* Then the prototypes */ firstfile = 1 + nflags; protos_added = FALSE; for (i = firstfile; i < argc; i++) { filein = argv[i]; len = strlen(filein); if (filein[len - 1] == 'h') /* skip .h files */ continue; snprintf(buf, L_BUF_SIZE, "cpp -ansi -DNO_PROTOS %s %s", filein, tempfile); ret = system(buf); if (ret) { fprintf(stderr, "cpp failure for %s; continuing\n", filein); continue; } if ((str = parseForProtos(tempfile, prestring)) == NULL) { fprintf(stderr, "parse failure for %s; continuing\n", filein); continue; } if (strlen(str) > 1) { /* strlen(str) == 1 is a file without protos */ l_byteaAppendString(ba, str); protos_added = TRUE; } lept_free(str); } /* Lastly the extern C tail */ sa = sarrayCreate(0); sarrayAddString(sa, (char *)"\n#ifdef __cplusplus", 1); sarrayAddString(sa, (char *)"}", 1); sarrayAddString(sa, (char *)"#endif /* __cplusplus */", 1); str = sarrayToString(sa, 1); l_byteaAppendString(ba, str); lept_free(str); sarrayDestroy(&sa); protostr = (char *)l_byteaCopyData(ba, &nbytes); l_byteaDestroy(&ba); /* ---------------------------------------------------------------- */ /* Generate the output */ /* ---------------------------------------------------------------- */ if (!outprotos) { /* just write to stdout */ fprintf(stderr, "%s\n", protostr); lept_free(protostr); return 0; } /* If no protos were found, do nothing further */ if (!protos_added) { fprintf(stderr, "No protos found\n"); lept_free(protostr); return 1; } /* Make the output files */ ba = l_byteaInitFromFile("allheaders_top.txt"); if (!in_line) { snprintf(buf, sizeof(buf), "#include \"%s\"\n", outprotos); l_byteaAppendString(ba, buf); l_binaryWrite(outprotos, "w", protostr, nbytes); } else { l_byteaAppendString(ba, protostr); } ba2 = l_byteaInitFromFile("allheaders_bot.txt"); l_byteaJoin(ba, &ba2); l_byteaWrite("allheaders.h", ba, 0, 0); l_byteaDestroy(&ba); lept_free(protostr); return 0; } leptonica-1.70/src/watershed.c0000640000175000017500000011171512244215134014426 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * watershed.c * * Top-level * L_WSHED *wshedCreate() * void wshedDestroy() * l_int32 wshedApply() * * Helpers * static l_int32 identifyWatershedBasin() * static l_int32 mergeLookup() * static l_int32 wshedGetHeight() * static void pushNewPixel() * static void popNewPixel() * static void pushWSPixel() * static void popWSPixel() * static void debugPrintLUT() * static void debugWshedMerge() * * Output * l_int32 wshedBasins() * PIX *wshedRenderFill() * PIX *wshedRenderColors() * * The watershed function identifies the "catch basins" of the input * 8 bpp image, with respect to the specified seeds or "markers". * The use is in segmentation, but the selection of the markers is * critical to getting meaningful results. * * How are the markers selected? You can't simply use the local * minima, because a typical image has sufficient noise so that * a useful catch basin can easily have multiple local minima. However * they are selected, the question for the watershed function is * how to handle local minima that are not markers. The reason * this is important is because of the algorithm used to find the * watersheds, which is roughly like this: * * (1) Identify the markers and the local minima, and enter them * into a priority queue based on the pixel value. Each marker * is shrunk to a single pixel, if necessary, before the * operation starts. * (2) Feed the priority queue with neighbors of pixels that are * popped off the queue. Each of these queue pixels is labelled * with the index value of its parent. * (3) Each pixel is also labelled, in a 32-bit image, with the marker * or local minimum index, from which it was originally derived. * (4) There are actually 3 classes of labels: seeds, minima, and * fillers. The fillers are labels of regions that have already * been identified as watersheds and are continuing to fill, for * the purpose of finding higher watersheds. * (5) When a pixel is popped that has already been labelled in the * 32-bit image and that label differs from the label of its * parent (stored in the queue pixel), a boundary has been crossed. * There are several cases: * (a) Both parents are derived from markers but at least one * is not deep enough to become a watershed. Absorb the * shallower basin into the deeper one, fixing the LUT to * redirect the shallower index to the deeper one. * (b) Both parents are derived from markers and both are deep * enough. Identify and save the watershed for each marker. * (c) One parent was derived from a marker and the other from * a minima: absorb the minima basin into the marker basin. * (d) One parent was derived from a marker and the other is * a filler: identify and save the watershed for the marker. * (e) Both parents are derived from minima: merge them. * (f) One parent is a filler and the other is derived from a * minima: merge the minima into the filler. * (6) The output of the watershed operation consists of: * - a pixa of the basins * - a pta of the markers * - a numa of the watershed levels * * Typical usage: * L_WShed *wshed = wshedCreate(pixs, pixseed, mindepth, 0); * wshedApply(wshed); * * wshedBasins(wshed, &pixa, &nalevels); * ... do something with pixa, nalevels ... * pixaDestroy(&pixa); * numaDestroy(&nalevels); * * Pix *pixd = wshedRenderFill(wshed); * * wshedDestroy(&wshed); */ #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_WATERSHED 0 #endif /* ~NO_CONSOLE_IO */ static const l_uint32 MAX_LABEL_VALUE = 0x7fffffff; /* largest l_int32 */ struct L_NewPixel { l_int32 x; l_int32 y; }; typedef struct L_NewPixel L_NEWPIXEL; struct L_WSPixel { l_float32 val; /* pixel value */ l_int32 x; l_int32 y; l_int32 index; /* label for set to which pixel belongs */ }; typedef struct L_WSPixel L_WSPIXEL; /* Static functions for obtaining bitmap of watersheds */ static void wshedSaveBasin(L_WSHED *wshed, l_int32 index, l_int32 level); static l_int32 identifyWatershedBasin(L_WSHED *wshed, l_int32 index, l_int32 level, BOX **pbox, PIX **ppixd); /* Static function for merging lut and backlink arrays */ static l_int32 mergeLookup(L_WSHED *wshed, l_int32 sindex, l_int32 dindex); /* Static function for finding the height of the current pixel above its seed or minima in the watershed. */ static l_int32 wshedGetHeight(L_WSHED *wshed, l_int32 val, l_int32 label, l_int32 *pheight); /* Static accessors for NewPixel on a queue */ static void pushNewPixel(L_QUEUE *lq, l_int32 x, l_int32 y, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy); static void popNewPixel(L_QUEUE *lq, l_int32 *px, l_int32 *py); /* Static accessors for WSPixel on a heap */ static void pushWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 val, l_int32 x, l_int32 y, l_int32 index); static void popWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 *pval, l_int32 *px, l_int32 *py, l_int32 *pindex); /* Static debug print output */ static void debugPrintLUT(l_int32 *lut, l_int32 size, l_int32 debug); static void debugWshedMerge(L_WSHED *wshed, char *descr, l_int32 x, l_int32 y, l_int32 label, l_int32 index); /*-----------------------------------------------------------------------* * Top-level watershed * *-----------------------------------------------------------------------*/ /*! * wshedCreate() * * Input: pixs (8 bpp source) * pixm (1 bpp 'marker' seed) * mindepth (minimum depth; anything less is not saved) * debugflag (1 for debug output) * Return: WShed, or null on error * * Notes: * (1) It is not necessary for the fg pixels in the seed image * be at minima, or that they be isolated. We extract a * single pixel from each connected component, and a seed * anywhere in a watershed will eventually label the watershed * when the filling level reaches it. * (2) Set mindepth to some value to ignore noise in pixs that * can create small local minima. Any watershed shallower * than mindepth, even if it has a seed, will not be saved; * It will either be incorporated in another watershed or * eliminated. */ L_WSHED * wshedCreate(PIX *pixs, PIX *pixm, l_int32 mindepth, l_int32 debugflag) { l_int32 w, h; L_WSHED *wshed; PROCNAME("wshedCreate"); if (!pixs) return (L_WSHED *)ERROR_PTR("pixs is not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (L_WSHED *)ERROR_PTR("pixs is not 8 bpp", procName, NULL); if (!pixm) return (L_WSHED *)ERROR_PTR("pixm is not defined", procName, NULL); if (pixGetDepth(pixm) != 1) return (L_WSHED *)ERROR_PTR("pixm is not 1 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetWidth(pixm) != w || pixGetHeight(pixm) != h) return (L_WSHED *)ERROR_PTR("pixs/m sizes are unequal", procName, NULL); if ((wshed = (L_WSHED *)CALLOC(1, sizeof(L_WSHED))) == NULL) return (L_WSHED *)ERROR_PTR("wshed not made", procName, NULL); wshed->pixs = pixClone(pixs); wshed->pixm = pixClone(pixm); wshed->mindepth = L_MAX(1, mindepth); wshed->pixlab = pixCreate(w, h, 32); pixSetAllArbitrary(wshed->pixlab, MAX_LABEL_VALUE); wshed->pixt = pixCreate(w, h, 1); wshed->lines8 = pixGetLinePtrs(pixs, NULL); wshed->linem1 = pixGetLinePtrs(pixm, NULL); wshed->linelab32 = pixGetLinePtrs(wshed->pixlab, NULL); wshed->linet1 = pixGetLinePtrs(wshed->pixt, NULL); wshed->debug = debugflag; return wshed; } /*! * wshedDestroy() * * Input: &wshed () * Return: void */ void wshedDestroy(L_WSHED **pwshed) { l_int32 i; L_WSHED *wshed; PROCNAME("wshedDestroy"); if (pwshed == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((wshed = *pwshed) == NULL) return; pixDestroy(&wshed->pixs); pixDestroy(&wshed->pixm); pixDestroy(&wshed->pixlab); pixDestroy(&wshed->pixt); if (wshed->lines8) FREE(wshed->lines8); if (wshed->linem1) FREE(wshed->linem1); if (wshed->linelab32) FREE(wshed->linelab32); if (wshed->linet1) FREE(wshed->linet1); pixaDestroy(&wshed->pixad); ptaDestroy(&wshed->ptas); numaDestroy(&wshed->nash); numaDestroy(&wshed->nasi); numaDestroy(&wshed->namh); numaDestroy(&wshed->nalevels); if (wshed->lut) FREE(wshed->lut); if (wshed->links) { for (i = 0; i < wshed->arraysize; i++) numaDestroy(&wshed->links[i]); FREE(wshed->links); } FREE(wshed); *pwshed = NULL; return; } /*! * wshedApply() * * Input: wshed (generated from wshedCreate()) * Return: 0 if OK, 1 on error * * Iportant note: * (1) This is buggy. It seems to locate watersheds that are * duplicates. The watershed extraction after complete fill * grabs some regions belonging to existing watersheds. * See prog/watershedtest.c for testing. */ l_int32 wshedApply(L_WSHED *wshed) { char two_new_watersheds[] = "Two new watersheds"; char seed_absorbed_into_seeded_basin[] = "Seed absorbed into seeded basin"; char one_new_watershed_label[] = "One new watershed (label)"; char one_new_watershed_index[] = "One new watershed (index)"; char minima_absorbed_into_seeded_basin[] = "Minima absorbed into seeded basin"; char minima_absorbed_by_filler_or_another[] = "Minima absorbed by filler or another"; l_int32 nseeds, nother, nboth, arraysize; l_int32 i, j, val, x, y, w, h, index, mindepth; l_int32 imin, imax, jmin, jmax, cindex, clabel, nindex; l_int32 hindex, hlabel, hmin, hmax, minhindex, maxhindex; l_int32 *lut; l_uint32 ulabel, uval; void **lines8, **linelab32; NUMA *nalut, *nalevels, *nash, *namh, *nasi; NUMA **links; L_HEAP *lh; PIX *pixmin, *pixsd; PIXA *pixad; L_STACK *rstack; PTA *ptas, *ptao; PROCNAME("wshedApply"); if (!wshed) return ERROR_INT("wshed not defined", procName, 1); /* ------------------------------------------------------------ * * Initialize priority queue and pixlab with seeds and minima * * ------------------------------------------------------------ */ lh = lheapCreate(0, L_SORT_INCREASING); /* remove lowest values first */ rstack = lstackCreate(0); /* for reusing the WSPixels */ pixGetDimensions(wshed->pixs, &w, &h, NULL); lines8 = wshed->lines8; /* wshed owns this */ linelab32 = wshed->linelab32; /* ditto */ /* Identify seed (marker) pixels, 1 for each c.c. in pixm */ pixSelectMinInConnComp(wshed->pixs, wshed->pixm, &ptas, &nash); pixsd = pixGenerateFromPta(ptas, w, h); nseeds = ptaGetCount(ptas); for (i = 0; i < nseeds; i++) { ptaGetIPt(ptas, i, &x, &y); uval = GET_DATA_BYTE(lines8[y], x); pushWSPixel(lh, rstack, (l_int32)uval, x, y, i); } wshed->ptas = ptas; nasi = numaMakeConstant(1, nseeds); /* indicator array */ wshed->nasi = nasi; wshed->nash = nash; wshed->nseeds = nseeds; /* Identify minima that are not seeds. Use these 4 steps: * (1) Get the local minima, which can have components * of arbitrary size. This will be a clipping mask. * (2) Get the image of the actual seeds (pixsd) * (3) Remove all elements of the clipping mask that have a seed. * (4) Shrink each of the remaining elements of the minima mask * to a single pixel. */ pixLocalExtrema(wshed->pixs, 200, 0, &pixmin, NULL); pixRemoveSeededComponents(pixmin, pixsd, pixmin, 8, 2); pixSelectMinInConnComp(wshed->pixs, pixmin, &ptao, &namh); nother = ptaGetCount(ptao); for (i = 0; i < nother; i++) { ptaGetIPt(ptao, i, &x, &y); uval = GET_DATA_BYTE(lines8[y], x); pushWSPixel(lh, rstack, (l_int32)uval, x, y, nseeds + i); } wshed->namh = namh; /* ------------------------------------------------------------ * * Initialize merging lookup tables * * ------------------------------------------------------------ */ /* nalut should always give the current after-merging index. * links are effectively backpointers: they are numas associated with * a dest index of all indices in nalut that point to that index. */ mindepth = wshed->mindepth; nboth = nseeds + nother; arraysize = 2 * nboth; wshed->arraysize = arraysize; nalut = numaMakeSequence(0, 1, arraysize); lut = numaGetIArray(nalut); wshed->lut = lut; /* wshed owns this */ links = (NUMA **)CALLOC(arraysize, sizeof(NUMA *)); wshed->links = links; /* wshed owns this */ nindex = nseeds + nother; /* the next unused index value */ /* ------------------------------------------------------------ * * Fill the basins, using the priority queue * * ------------------------------------------------------------ */ pixad = pixaCreate(nseeds); wshed->pixad = pixad; /* wshed owns this */ nalevels = numaCreate(nseeds); wshed->nalevels = nalevels; /* wshed owns this */ L_INFO("nseeds = %d, nother = %d\n", procName, nseeds, nother); while (lheapGetCount(lh) > 0) { popWSPixel(lh, rstack, &val, &x, &y, &index); /* fprintf(stderr, "x = %d, y = %d, index = %d\n", x, y, index); */ ulabel = GET_DATA_FOUR_BYTES(linelab32[y], x); if (ulabel == MAX_LABEL_VALUE) clabel = ulabel; else clabel = lut[ulabel]; cindex = lut[index]; if (clabel == cindex) continue; /* have already seen this one */ if (clabel == MAX_LABEL_VALUE) { /* new one; assign index and try to * propagate to all neighbors */ SET_DATA_FOUR_BYTES(linelab32[y], x, cindex); imin = L_MAX(0, y - 1); imax = L_MIN(h - 1, y + 1); jmin = L_MAX(0, x - 1); jmax = L_MIN(w - 1, x + 1); for (i = imin; i <= imax; i++) { for (j = jmin; j <= jmax; j++) { if (i == y && j == x) continue; uval = GET_DATA_BYTE(lines8[i], j); pushWSPixel(lh, rstack, (l_int32)uval, j, i, cindex); } } } else { /* pixel is already labeled (differently); must resolve */ /* If both indices are seeds, check if the min height is * greater than mindepth. If so, we have two new watersheds; * locate them and assign to both regions a new index * for further waterfill. If not, absorb the shallower * watershed into the deeper one and continue filling it. */ pixGetPixel(pixsd, x, y, &uval); if (clabel < nseeds && cindex < nseeds) { wshedGetHeight(wshed, val, clabel, &hlabel); wshedGetHeight(wshed, val, cindex, &hindex); hmin = L_MIN(hlabel, hindex); hmax = L_MAX(hlabel, hindex); if (hmin == hmax) { hmin = hlabel; hmax = hindex; } if (wshed->debug) { fprintf(stderr, "clabel,hlabel = %d,%d\n", clabel, hlabel); fprintf(stderr, "hmin = %d, hmax = %d\n", hmin, hmax); fprintf(stderr, "cindex,hindex = %d,%d\n", cindex, hindex); if (hmin < mindepth) fprintf(stderr, "Too shallow!\n"); } if (hmin >= mindepth) { debugWshedMerge(wshed, two_new_watersheds, x, y, clabel, cindex); wshedSaveBasin(wshed, cindex, val - 1); wshedSaveBasin(wshed, clabel, val - 1); numaSetValue(nasi, cindex, 0); numaSetValue(nasi, clabel, 0); if (wshed->debug) fprintf(stderr, "nindex = %d\n", nindex); debugPrintLUT(lut, nindex, wshed->debug); mergeLookup(wshed, clabel, nindex); debugPrintLUT(lut, nindex, wshed->debug); mergeLookup(wshed, cindex, nindex); debugPrintLUT(lut, nindex, wshed->debug); nindex++; } else /* extraneous seed within seeded basin; absorb */ { debugWshedMerge(wshed, seed_absorbed_into_seeded_basin, x, y, clabel, cindex); } maxhindex = clabel; /* TODO: is this part of above 'else'? */ minhindex = cindex; if (hindex > hlabel) { maxhindex = cindex; minhindex = clabel; } mergeLookup(wshed, minhindex, maxhindex); } else if (clabel < nseeds && cindex >= nboth) { /* If one index is a seed and the other is a merge of * 2 watersheds, generate a single watershed. */ debugWshedMerge(wshed, one_new_watershed_label, x, y, clabel, cindex); wshedSaveBasin(wshed, clabel, val - 1); numaSetValue(nasi, clabel, 0); mergeLookup(wshed, clabel, cindex); } else if (cindex < nseeds && clabel >= nboth) { debugWshedMerge(wshed, one_new_watershed_index, x, y, clabel, cindex); wshedSaveBasin(wshed, cindex, val - 1); numaSetValue(nasi, cindex, 0); mergeLookup(wshed, cindex, clabel); } else if (clabel < nseeds) { /* cindex from minima; absorb */ /* If one index is a seed and the other is from a minimum, * merge the minimum wshed into the seed wshed. */ debugWshedMerge(wshed, minima_absorbed_into_seeded_basin, x, y, clabel, cindex); mergeLookup(wshed, cindex, clabel); } else if (cindex < nseeds) { /* clabel from minima; absorb */ debugWshedMerge(wshed, minima_absorbed_into_seeded_basin, x, y, clabel, cindex); mergeLookup(wshed, clabel, cindex); } else { /* If neither index is a seed, just merge */ debugWshedMerge(wshed, minima_absorbed_by_filler_or_another, x, y, clabel, cindex); mergeLookup(wshed, clabel, cindex); } } } #if 0 /* Use the indicator array to save any watersheds that fill * to the maximum value. This seems to screw things up! */ for (i = 0; i < nseeds; i++) { numaGetIValue(nasi, i, &ival); if (ival == 1) { wshedSaveBasin(wshed, lut[i], val - 1); numaSetValue(nasi, i, 0); } } #endif numaDestroy(&nalut); pixDestroy(&pixmin); pixDestroy(&pixsd); ptaDestroy(&ptao); lheapDestroy(&lh, TRUE); lstackDestroy(&rstack, TRUE); return 0; } /*-----------------------------------------------------------------------* * Helpers * *-----------------------------------------------------------------------*/ /*! * wshedSaveBasin() * * Input: wshed * index (index of basin to be located) * level (filling level reached at the time this function * is called) * Return: 0 if OK, 1 on error * * Notes: * (1) This identifies a single watershed. It does not change * the LUT, which must be done subsequently. * (2) The fill level of a basin is taken to be @level - 1. */ static void wshedSaveBasin(L_WSHED *wshed, l_int32 index, l_int32 level) { BOX *box; PIX *pix; PROCNAME("wshedSaveBasin"); if (!wshed) { L_ERROR("wshed not defined\n", procName); return; } if (identifyWatershedBasin(wshed, index, level, &box, &pix) == 0) { pixaAddPix(wshed->pixad, pix, L_INSERT); pixaAddBox(wshed->pixad, box, L_INSERT); numaAddNumber(wshed->nalevels, level - 1); } return; } /*! * identifyWatershedBasin() * * Input: wshed * index (index of basin to be located) * level (of basin at point at which the two basins met) * &box ( bounding box of basin) * &pixd ( pix of basin, cropped to its bounding box) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a static function, so we assume pixlab, pixs and pixt * exist and are the same size. * (2) It selects all pixels that have the label @index in pixlab * and that have a value in pixs that is less than @level. * (3) It is used whenever two seeded basins meet (typically at a saddle), * or when one seeded basin meets a 'filler'. All identified * basins are saved as a watershed. */ static l_int32 identifyWatershedBasin(L_WSHED *wshed, l_int32 index, l_int32 level, BOX **pbox, PIX **ppixd) { l_int32 imin, imax, jmin, jmax, minx, miny, maxx, maxy; l_int32 bw, bh, i, j, w, h, x, y; l_int32 *lut; l_uint32 label, bval, lval; void **lines8, **linelab32, **linet1; BOX *box; PIX *pixs, *pixt, *pixd; L_QUEUE *lq; PROCNAME("identifyWatershedBasin"); if (!pbox) return ERROR_INT("&box not defined", procName, 1); *pbox = NULL; if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (!wshed) return ERROR_INT("wshed not defined", procName, 1); /* Make a queue and an auxiliary stack */ lq = lqueueCreate(0); lq->stack = lstackCreate(0); pixs = wshed->pixs; pixt = wshed->pixt; lines8 = wshed->lines8; linelab32 = wshed->linelab32; linet1 = wshed->linet1; lut = wshed->lut; pixGetDimensions(pixs, &w, &h, NULL); /* Prime the queue with the seed pixel for this watershed. */ minx = miny = 1000000; maxx = maxy = 0; ptaGetIPt(wshed->ptas, index, &x, &y); pixSetPixel(pixt, x, y, 1); pushNewPixel(lq, x, y, &minx, &maxx, &miny, &maxy); if (wshed->debug) fprintf(stderr, "prime: (x,y) = (%d, %d)\n", x, y); /* Each pixel in a spreading breadth-first search is inspected. * It is accepted as part of this watershed, and pushed on * the search queue, if: * (1) It has a label value equal to @index * (2) The pixel value is less than @level, the overflow * height at which the two basins join. * (3) It has not yet been seen in this search. */ while (lqueueGetCount(lq) > 0) { popNewPixel(lq, &x, &y); imin = L_MAX(0, y - 1); imax = L_MIN(h - 1, y + 1); jmin = L_MAX(0, x - 1); jmax = L_MIN(w - 1, x + 1); for (i = imin; i <= imax; i++) { for (j = jmin; j <= jmax; j++) { if (j == x && i == y) continue; /* parent */ label = GET_DATA_FOUR_BYTES(linelab32[i], j); if (label == MAX_LABEL_VALUE || lut[label] != index) continue; bval = GET_DATA_BIT(linet1[i], j); if (bval == 1) continue; /* already seen */ lval = GET_DATA_BYTE(lines8[i], j); if (lval >= level) continue; /* too high */ SET_DATA_BIT(linet1[i], j); pushNewPixel(lq, j, i, &minx, &maxx, &miny, &maxy); } } } /* Extract the box and pix, and clear pixt */ bw = maxx - minx + 1; bh = maxy - miny + 1; box = boxCreate(minx, miny, bw, bh); pixd = pixClipRectangle(pixt, box, NULL); pixRasterop(pixt, minx, miny, bw, bh, PIX_SRC ^ PIX_DST, pixd, 0, 0); *pbox = box; *ppixd = pixd; lqueueDestroy(&lq, 1); return 0; } /*! * mergeLookup() * * Input: wshed * sindex (primary index being changed in the merge) * dindex (index that @sindex will point to after the merge) * Return: 0 if OK, 1 on error * * Notes: * (1) The links are a sparse array of Numas showing current back-links. * The lut gives the current index (of the seed or the minima * for the wshed in which it is located. * (2) Think of each entry in the lut. There are two types: * owner: lut[index] = index * redirect: lut[index] != index * (3) This is called each time a merge occurs. It puts the lut * and backlinks in a canonical form after the merge, where * all entries in the lut point to the current "owner", which * has all backlinks. That is, every "redirect" in the lut * points to an "owner". The lut always gives the index of * the current owner. */ static l_int32 mergeLookup(L_WSHED *wshed, l_int32 sindex, l_int32 dindex) { l_int32 i, n, size, index; l_int32 *lut; NUMA *na; NUMA **links; PROCNAME("mergeLookup"); if (!wshed) return ERROR_INT("wshed not defined", procName, 1); size = wshed->arraysize; if (sindex < 0 || sindex >= size) return ERROR_INT("invalid sindex", procName, 1); if (dindex < 0 || dindex >= size) return ERROR_INT("invalid dindex", procName, 1); /* Redirect links in the lut */ n = 0; links = wshed->links; lut = wshed->lut; if ((na = links[sindex]) != NULL) { n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetIValue(na, i, &index); lut[index] = dindex; } } lut[sindex] = dindex; /* Shift the backlink arrays from sindex to dindex. * sindex should have no backlinks because all entries in the * lut that were previously pointing to it have been redirected * to dindex. */ if (!links[dindex]) links[dindex] = numaCreate(n); numaJoin(links[dindex], links[sindex], 0, -1); numaAddNumber(links[dindex], sindex); numaDestroy(&links[sindex]); return 0; } /*! * wshedGetHeight() * * Input: wshed (array of current indices) * val (value of current pixel popped off queue) * label (of pixel or 32 bpp label image) * &height ( height of current value from seed * or minimum of watershed) * Return: 0 if OK, 1 on error * * Notes: * (1) It is only necessary to find the height for a watershed * that is indexed by a seed or a minima. This function should * not be called on a finished watershed (that continues to fill). */ static l_int32 wshedGetHeight(L_WSHED *wshed, l_int32 val, l_int32 label, l_int32 *pheight) { l_int32 minval; PROCNAME("wshedGetHeight"); if (!pheight) return ERROR_INT("&height not defined", procName, 1); *pheight = 0; if (!wshed) return ERROR_INT("wshed not defined", procName, 1); if (label < wshed->nseeds) numaGetIValue(wshed->nash, label, &minval); else if (label < wshed->nseeds + wshed->nother) numaGetIValue(wshed->namh, label, &minval); else return ERROR_INT("finished watershed; should not call", procName, 1); *pheight = val - minval; return 0; } /* * pushNewPixel() * * Input: lqueue * x, y (pixel coordinates) * &minx, &maxx, &miny, &maxy ( bounding box update) * Return: void * * Notes: * (1) This is a wrapper for adding a NewPixel to a queue, which * updates the bounding box for all pixels on that queue and * uses the storage stack to retrieve a NewPixel. */ static void pushNewPixel(L_QUEUE *lq, l_int32 x, l_int32 y, l_int32 *pminx, l_int32 *pmaxx, l_int32 *pminy, l_int32 *pmaxy) { L_NEWPIXEL *np; PROCNAME("pushNewPixel"); if (!lq) { L_ERROR("queue not defined\n", procName); return; } /* Adjust bounding box */ *pminx = L_MIN(*pminx, x); *pmaxx = L_MAX(*pmaxx, x); *pminy = L_MIN(*pminy, y); *pmaxy = L_MAX(*pmaxy, y); /* Get a newpixel to use */ if (lstackGetCount(lq->stack) > 0) np = (L_NEWPIXEL *)lstackRemove(lq->stack); else np = (L_NEWPIXEL *)CALLOC(1, sizeof(L_NEWPIXEL)); np->x = x; np->y = y; lqueueAdd(lq, np); return; } /* * popNewPixel() * * Input: lqueue * &x, &y ( pixel coordinates) * Return: void * * Notes: * (1) This is a wrapper for removing a NewPixel from a queue, * which returns the pixel coordinates and saves the NewPixel * on the storage stack. */ static void popNewPixel(L_QUEUE *lq, l_int32 *px, l_int32 *py) { L_NEWPIXEL *np; PROCNAME("popNewPixel"); if (!lq) { L_ERROR("lqueue not defined\n", procName); return; } if ((np = (L_NEWPIXEL *)lqueueRemove(lq)) == NULL) return; *px = np->x; *py = np->y; lstackAdd(lq->stack, np); /* save for re-use */ return; } /* * pushWSPixel() * * Input: lh (priority queue) * stack (of reusable WSPixels) * val (pixel value: used for ordering the heap) * x, y (pixel coordinates) * index (label for set to which pixel belongs) * Return: void * * Notes: * (1) This is a wrapper for adding a WSPixel to a heap. It * uses the storage stack to retrieve a WSPixel. */ static void pushWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 val, l_int32 x, l_int32 y, l_int32 index) { L_WSPIXEL *wsp; PROCNAME("pushWSPixel"); if (!lh) { L_ERROR("heap not defined\n", procName); return; } if (!stack) { L_ERROR("stack not defined\n", procName); return; } /* Get a wspixel to use */ if (lstackGetCount(stack) > 0) wsp = (L_WSPIXEL *)lstackRemove(stack); else wsp = (L_WSPIXEL *)CALLOC(1, sizeof(L_WSPIXEL)); wsp->val = (l_float32)val; wsp->x = x; wsp->y = y; wsp->index = index; lheapAdd(lh, wsp); return; } /* * popWSPixel() * * Input: lh (priority queue) * stack (of reusable WSPixels) * &val ( pixel value) * &x, &y ( pixel coordinates) * &index ( label for set to which pixel belongs) * Return: void * * Notes: * (1) This is a wrapper for removing a WSPixel from a heap, * which returns the WSPixel data and saves the WSPixel * on the storage stack. */ static void popWSPixel(L_HEAP *lh, L_STACK *stack, l_int32 *pval, l_int32 *px, l_int32 *py, l_int32 *pindex) { L_WSPIXEL *wsp; PROCNAME("popWSPixel"); if (!lh) { L_ERROR("lheap not defined\n", procName); return; } if (!stack) { L_ERROR("stack not defined\n", procName); return; } if (!pval || !px || !py || !pindex) { L_ERROR("data can't be returned\n", procName); return; } if ((wsp = (L_WSPIXEL *)lheapRemove(lh)) == NULL) return; *pval = (l_int32)wsp->val; *px = wsp->x; *py = wsp->y; *pindex = wsp->index; lstackAdd(stack, wsp); /* save for re-use */ return; } static void debugPrintLUT(l_int32 *lut, l_int32 size, l_int32 debug) { l_int32 i; if (!debug) return; fprintf(stderr, "lut: "); for (i = 0; i < size; i++) fprintf(stderr, "%d ", lut[i]); fprintf(stderr, "\n"); return; } static void debugWshedMerge(L_WSHED *wshed, char *descr, l_int32 x, l_int32 y, l_int32 label, l_int32 index) { if (!wshed || (wshed->debug == 0)) return; fprintf(stderr, "%s:\n", descr); fprintf(stderr, " (x, y) = (%d, %d)\n", x, y); fprintf(stderr, " clabel = %d, cindex = %d\n", label, index); return; } /*-----------------------------------------------------------------------* * Output * *-----------------------------------------------------------------------*/ /*! * wshedBasins() * * Input: wshed * &pixa ( mask of watershed basins) * &nalevels ( watershed levels) * Return: 0 if OK, 1 on error */ l_int32 wshedBasins(L_WSHED *wshed, PIXA **ppixa, NUMA **pnalevels) { PROCNAME("wshedBasins"); if (!wshed) return ERROR_INT("wshed not defined", procName, 1); if (ppixa) *ppixa = pixaCopy(wshed->pixad, L_CLONE); if (pnalevels) *pnalevels = numaClone(wshed->nalevels); return 0; } /*! * wshedRenderFill() * * Input: wshed * Return: pixd (initial image with all basins filled), or null on error */ PIX * wshedRenderFill(L_WSHED *wshed) { l_int32 i, n, level, bx, by; NUMA *na; PIX *pix, *pixd; PIXA *pixa; PROCNAME("wshedRenderFill"); if (!wshed) return (PIX *)ERROR_PTR("wshed not defined", procName, NULL); wshedBasins(wshed, &pixa, &na); pixd = pixCopy(NULL, wshed->pixs); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixaGetBoxGeometry(pixa, i, &bx, &by, NULL, NULL); numaGetIValue(na, i, &level); pixPaintThroughMask(pixd, pix, bx, by, level); pixDestroy(&pix); } pixaDestroy(&pixa); numaDestroy(&na); return pixd; } /*! * wshedRenderColors() * * Input: wshed * Return: pixd (initial image with all basins filled), or null on error */ PIX * wshedRenderColors(L_WSHED *wshed) { l_int32 w, h; PIX *pixg, *pixt, *pixc, *pixm, *pixd; PIXA *pixa; PROCNAME("wshedRenderColors"); if (!wshed) return (PIX *)ERROR_PTR("wshed not defined", procName, NULL); wshedBasins(wshed, &pixa, NULL); pixg = pixCopy(NULL, wshed->pixs); pixGetDimensions(wshed->pixs, &w, &h, NULL); pixd = pixConvertTo32(pixg); pixt = pixaDisplayRandomCmap(pixa, w, h); pixc = pixConvertTo32(pixt); pixm = pixaDisplay(pixa, w, h); pixCombineMasked(pixd, pixc, pixm); pixDestroy(&pixg); pixDestroy(&pixt); pixDestroy(&pixc); pixDestroy(&pixm); pixaDestroy(&pixa); return pixd; } leptonica-1.70/src/sudoku.h0000644000175000017500000000635512270566103013772 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef SUDOKU_H_INCLUDED #define SUDOKU_H_INCLUDED /* * sudoku.h * * The L_Sudoku holds all the information of the current state. * * The input to sudokuCreate() is a file with any number of lines * starting with '#', followed by 9 lines consisting of 9 numbers * in each line. These have the known values and use 0 for the unknowns. * Blank lines are ignored. * * The @locs array holds the indices of the unknowns, numbered * left-to-right and top-to-bottom from 0 to 80. The array size * is initialized to @num. @current is the index into the @locs * array of the current guess: locs[current]. * * The @state array is used to determine the validity of each guess. * It is of size 81, and is initialized by setting the unknowns to 0 * and the knowns to their input values. */ struct L_Sudoku { l_int32 num; /* number of unknowns */ l_int32 *locs; /* location of unknowns */ l_int32 current; /* index into @locs of current location */ l_int32 *init; /* initial state, with 0 representing */ /* the unknowns */ l_int32 *state; /* present state, including inits and */ /* guesses of unknowns up to @current */ l_int32 nguess; /* shows current number of guesses */ l_int32 finished; /* set to 1 when solved */ l_int32 failure; /* set to 1 if no solution is possible */ }; typedef struct L_Sudoku L_SUDOKU; /* For printing out array data */ enum { L_SUDOKU_INIT = 0, L_SUDOKU_STATE = 1 }; #endif /* SUDOKU_H_INCLUDED */ leptonica-1.70/src/pixacc.c0000644000175000017500000002225111761755653013731 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixacc.c * * Pixacc creation, destruction * PIXACC *pixaccCreate() * PIXACC *pixaccCreateFromPix() * void pixaccDestroy() * * Pixacc finalization * PIX *pixaccFinal() * * Pixacc accessors * PIX *pixaccGetPix() * l_int32 pixaccGetOffset() * * Pixacc accumulators * l_int32 pixaccAdd() * l_int32 pixaccSubtract() * l_int32 pixaccMultConst() * l_int32 pixaccMultConstAccumulate() * * This is a simple interface for some of the pixel arithmetic operations * in pixarith.c. These are easy to code up, but not as fast as * hand-coded functions that do arithmetic on corresponding pixels. * * Suppose you want to make a linear combination of pix1 and pix2: * pixd = 0.4 * pix1 + 0.6 * pix2 * where pix1 and pix2 are the same size and have depth 'd'. Then: * Pixacc *pacc = pixaccCreateFromPix(pix1, 0); // first; addition only * pixaccMultConst(pacc, 0.4); * pixaccMultConstAccumulate(pacc, pix2, 0.6); // Add in 0.6 of the second * pixd = pixaccFinal(pacc, d); // Get the result * pixaccDestroy(&pacc); */ #include "allheaders.h" /*---------------------------------------------------------------------* * Pixacc creation, destruction * *---------------------------------------------------------------------*/ /*! * pixaccCreate() * * Input: w, h (of 32 bpp internal Pix) * negflag (0 if only positive numbers are involved; * 1 if there will be negative numbers) * Return: pixacc, or null on error * * Notes: * (1) Use @negflag = 1 for safety if any negative numbers are going * to be used in the chain of operations. Negative numbers * arise, e.g., by subtracting a pix, or by adding a pix * that has been pre-multiplied by a negative number. * (2) Initializes the internal 32 bpp pix, similarly to the * initialization in pixInitAccumulate(). */ PIXACC * pixaccCreate(l_int32 w, l_int32 h, l_int32 negflag) { PIXACC *pixacc; PROCNAME("pixaccCreate"); if ((pixacc = (PIXACC *)CALLOC(1, sizeof(PIXACC))) == NULL) return (PIXACC *)ERROR_PTR("pixacc not made", procName, NULL); pixacc->w = w; pixacc->h = h; if ((pixacc->pix = pixCreate(w, h, 32)) == NULL) return (PIXACC *)ERROR_PTR("pix not made", procName, NULL); if (negflag) { pixacc->offset = 0x40000000; pixSetAllArbitrary(pixacc->pix, pixacc->offset); } return pixacc; } /*! * pixaccCreateFromPix() * * Input: pix * negflag (0 if only positive numbers are involved; * 1 if there will be negative numbers) * Return: pixacc, or null on error * * Notes: * (1) See pixaccCreate() */ PIXACC * pixaccCreateFromPix(PIX *pix, l_int32 negflag) { l_int32 w, h; PIXACC *pixacc; PROCNAME("pixaccCreateFromPix"); if (!pix) return (PIXACC *)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pix, &w, &h, NULL); pixacc = pixaccCreate(w, h, negflag); pixaccAdd(pixacc, pix); return pixacc; } /*! * pixaccDestroy() * * Input: &pixacc () * Return: void * * Notes: * (1) Always nulls the input ptr. */ void pixaccDestroy(PIXACC **ppixacc) { PIXACC *pixacc; PROCNAME("pixaccDestroy"); if (ppixacc == NULL) { L_WARNING("ptr address is NULL!", procName); return; } if ((pixacc = *ppixacc) == NULL) return; pixDestroy(&pixacc->pix); FREE(pixacc); *ppixacc = NULL; return; } /*---------------------------------------------------------------------* * Pixacc finalization * *---------------------------------------------------------------------*/ /*! * pixaccFinal() * * Input: pixacc * outdepth (8, 16 or 32 bpp) * Return: pixd (8 , 16 or 32 bpp), or null on error */ PIX * pixaccFinal(PIXACC *pixacc, l_int32 outdepth) { PROCNAME("pixaccFinal"); if (!pixacc) return (PIX *)ERROR_PTR("pixacc not defined", procName, NULL); return pixFinalAccumulate(pixaccGetPix(pixacc), pixaccGetOffset(pixacc), outdepth); } /*---------------------------------------------------------------------* * Pixacc accessors * *---------------------------------------------------------------------*/ /*! * pixaccGetPix() * * Input: pixacc * Return: pix, or null on error */ PIX * pixaccGetPix(PIXACC *pixacc) { PROCNAME("pixaccGetPix"); if (!pixacc) return (PIX *)ERROR_PTR("pixacc not defined", procName, NULL); return pixacc->pix; } /*! * pixaccGetOffset() * * Input: pixacc * Return: offset, or -1 on error */ l_int32 pixaccGetOffset(PIXACC *pixacc) { PROCNAME("pixaccGetOffset"); if (!pixacc) return ERROR_INT("pixacc not defined", procName, -1); return pixacc->offset; } /*---------------------------------------------------------------------* * Pixacc accumulators * *---------------------------------------------------------------------*/ /*! * pixaccAdd() * * Input: pixacc * pix (to be added) * Return: 0 if OK, 1 on error */ l_int32 pixaccAdd(PIXACC *pixacc, PIX *pix) { PROCNAME("pixaccAdd"); if (!pixacc) return ERROR_INT("pixacc not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixAccumulate(pixaccGetPix(pixacc), pix, L_ARITH_ADD); return 0; } /*! * pixaccSubtract() * * Input: pixacc * pix (to be subtracted) * Return: 0 if OK, 1 on error */ l_int32 pixaccSubtract(PIXACC *pixacc, PIX *pix) { PROCNAME("pixaccSubtract"); if (!pixacc) return ERROR_INT("pixacc not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixAccumulate(pixaccGetPix(pixacc), pix, L_ARITH_SUBTRACT); return 0; } /*! * pixaccMultConst() * * Input: pixacc * factor * Return: 0 if OK, 1 on error */ l_int32 pixaccMultConst(PIXACC *pixacc, l_float32 factor) { PROCNAME("pixaccMultConst"); if (!pixacc) return ERROR_INT("pixacc not defined", procName, 1); pixMultConstAccumulate(pixaccGetPix(pixacc), factor, pixaccGetOffset(pixacc)); return 0; } /*! * pixaccMultConstAccumulate() * * Input: pixacc * pix * factor * Return: 0 if OK, 1 on error * * Notes: * (1) This creates a temp pix that is @pix multiplied by the * constant @factor. It then adds that into @pixacc. */ l_int32 pixaccMultConstAccumulate(PIXACC *pixacc, PIX *pix, l_float32 factor) { l_int32 w, h, d, negflag; PIX *pixt; PIXACC *pacct; PROCNAME("pixaccMultConstAccumulate"); if (!pixacc) return ERROR_INT("pixacc not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (factor == 0.0) return 0; pixGetDimensions(pix, &w, &h, &d); negflag = (factor > 0.0) ? 0 : 1; pacct = pixaccCreate(w, h, negflag); pixaccAdd(pacct, pix); pixaccMultConst(pacct, factor); pixt = pixaccFinal(pacct, d); pixaccAdd(pixacc, pixt); pixaccDestroy(&pacct); pixDestroy(&pixt); return 0; } leptonica-1.70/src/fhmtgenlow.1.c0000644000175000017500000003657711743720754015005 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast hit-miss transform with auto-generated sels * * Dispatcher: * l_int32 fhmtgen_low_1() * * Static Low-level: * void fhmt_1_*() */ #include "allheaders.h" static void fhmt_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /*! * fhmtgen_low_1() * * a dispatcher to appropriate low-level code */ l_int32 fhmtgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fhmt_1_0(datad, w, h, wpld, datas, wpls); break; case 1: fhmt_1_1(datad, w, h, wpld, datas, wpls); break; case 2: fhmt_1_2(datad, w, h, wpld, datas, wpls); break; case 3: fhmt_1_3(datad, w, h, wpld, datas, wpls); break; case 4: fhmt_1_4(datad, w, h, wpld, datas, wpls); break; case 5: fhmt_1_5(datad, w, h, wpld, datas, wpls); break; case 6: fhmt_1_6(datad, w, h, wpld, datas, wpls); break; case 7: fhmt_1_7(datad, w, h, wpld, datas, wpls); break; case 8: fhmt_1_8(datad, w, h, wpld, datas, wpls); break; case 9: fhmt_1_9(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fhmt_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fhmt_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & (*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & (*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (*sptr) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)); } } } static void fhmt_1_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls6) << 1) | (~*(sptr - wpls6 + 1) >> 31)) & ((*(sptr - wpls6) << 3) | (*(sptr - wpls6 + 1) >> 29)) & (~*(sptr - wpls2)) & ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((~*(sptr + wpls2) >> 1) | (~*(sptr + wpls2 - 1) << 31)) & ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & ((~*(sptr + wpls6) >> 2) | (~*(sptr + wpls6 - 1) << 30)) & (*(sptr + wpls6)); } } } static void fhmt_1_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((~*(sptr - wpls) << 2) | (~*(sptr - wpls + 1) >> 30)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) & ((~*(sptr + wpls2) >> 1) | (~*(sptr + wpls2 - 1) << 31)) & (*(sptr + wpls2)) & ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); } } } static void fhmt_1_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 2) | (~*(sptr - wpls - 1) << 30)) & ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) & ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) & (*(sptr + wpls2)) & ((~*(sptr + wpls2) << 1) | (~*(sptr + wpls2 + 1) >> 31)); } } } static void fhmt_1_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls2) >> 1) | (~*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)) & ((~*(sptr + wpls) << 2) | (~*(sptr + wpls + 1) >> 30)); } } } static void fhmt_1_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((~*(sptr - wpls2) << 1) | (~*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((~*(sptr + wpls) >> 2) | (~*(sptr + wpls - 1) << 30)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } leptonica-1.70/src/colorquant1.c0000644000175000017500000047671312244745176014746 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorquant1.c * * Octcube color quantization * * There are several different octcube/octree based quantizations. * These can be classified, in the order in which they appear in this * file, as follows: * * ----------------------------------------------------------------- * (1) General adaptive octree * (2) Adaptive octree by population at fixed level * (3) Adaptive octree using population and with specified number * of output colors * (4) Octcube with colormap representation of mixed color/gray * (5) 256 fixed octcubes covering color space * (6) Octcubes at fixed level for ncolors <= 256 * (7) Octcubes at fixed level with RGB output * (8) Quantizing an rgb image using a specified colormap * ----------------------------------------------------------------- * * (1) Two-pass adaptive octree color quantization * PIX *pixOctreeColorQuant() * PIX *pixOctreeColorQuantGeneral() * * which calls * static CQCELL ***octreeGenerateAndPrune() * static PIX *pixOctreeQuantizePixels() * * which calls * static l_int32 octreeFindColorCell() * * Helper cqcell functions * static CQCELL ***cqcellTreeCreate() * static void cqcellTreeDestroy() * * Helper index functions * l_int32 makeRGBToIndexTables() * void getOctcubeIndexFromRGB() * static void getRGBFromOctcube() * static l_int32 getOctcubeIndices() * static l_int32 octcubeGetCount() * * (2) Adaptive octree quantization based on population at a fixed level * PIX *pixOctreeQuantByPopulation() * static l_int32 pixDitherOctindexWithCmap() * * (3) Adaptive octree quantization to 4 and 8 bpp with specified * number of output colors in colormap * PIX *pixOctreeQuantNumColors() * * (4) Mixed color/gray quantization with specified number of colors * PIX *pixOctcubeQuantMixedWithGray() * * (5) Fixed partition octcube quantization with 256 cells * PIX *pixFixedOctcubeQuant256() * * (6) Fixed partition quantization for images with few colors * PIX *pixFewColorsOctcubeQuant1() * PIX *pixFewColorsOctcubeQuant2() * PIX *pixFewColorsOctcubeQuantMixed() * * (7) Fixed partition octcube quantization at specified level * with quantized output to RGB * PIX *pixFixedOctcubeQuantGenRGB() * * (8) Color quantize RGB image using existing colormap * PIX *pixQuantFromCmap() [high-level wrapper] * PIX *pixOctcubeQuantFromCmap() * PIX *pixOctcubeQuantFromCmapLUT() * * Generation of octcube histogram * NUMA *pixOctcubeHistogram() * * Get filled octcube table from colormap * l_int32 *pixcmapToOctcubeLUT() * * Strip out unused elements in colormap * l_int32 pixRemoveUnusedColors() * * Find number of occupied octcubes at the specified level * l_int32 pixNumberOccupiedOctcubes() * * Note: leptonica also provides color quantization using a modified * form of median cut. See colorquant2.c for details. */ #include #include "allheaders.h" /* This data structure is used for pixOctreeColorQuant(), * a color octree that adjusts to the color distribution * in the image that is being quantized. The best settings * are with CQ_NLEVELS = 6 and DITHERING set on. * * Notes: (1) the CTE (color table entry) index is sequentially * assigned as the tree is pruned back * (2) if 'bleaf' == 1, all pixels in that cube have been * assigned to one or more CTEs. But note that if * all 8 subcubes have 'bleaf' == 1, it will have no * pixels left for assignment and will not be a CTE. * (3) 'nleaves', the number of leaves contained at the next * lower level is some number between 0 and 8, inclusive. * If it is zero, it means that all colors within this cube * are part of a single growing cluster that has not yet * been set aside as a leaf. If 'nleaves' > 0, 'bleaf' * will be set to 1 and all pixels not assigned to leaves * at lower levels will be assigned to a CTE here. * (However, as described above, if all pixels are already * assigned, we set 'bleaf' = 1 but do not create a CTE * at this level.) * (4) To keep the maximum color error to a minimum, we * prune the tree back to level 2, and require that * all 64 level 2 cells are CTEs. * (5) We reserve an extra set of colors to prevent running out * of colors during the assignment of the final 64 level 2 cells. * This is more likely to happen with small images. * (6) When we run out of colors, the dithered image can be very * poor, so we additionally prevent dithering if the image * is small. * (7) The color content of the image is measured, and if there * is very little color, it is quantized in grayscale. */ struct ColorQuantCell { l_int32 rc, gc, bc; /* center values */ l_int32 n; /* number of samples in this cell */ l_int32 index; /* CTE (color table entry) index */ l_int32 nleaves; /* # of leaves contained at next lower level */ l_int32 bleaf; /* boolean: 0 if not a leaf, 1 if so */ }; typedef struct ColorQuantCell CQCELL; /* Constants for pixOctreeColorQuant() */ static const l_int32 CQ_NLEVELS = 5; /* only 4, 5 and 6 are allowed */ static const l_int32 CQ_RESERVED_COLORS = 64; /* to allow for level 2 */ /* remainder CTEs */ static const l_int32 EXTRA_RESERVED_COLORS = 25; /* to avoid running out */ static const l_int32 TREE_GEN_WIDTH = 350; /* big enough for good stats */ static const l_int32 MIN_DITHER_SIZE = 250; /* don't dither if smaller */ /* This data structure is used for pixOctreeQuantNumColors(), * a color octree that adjusts in a simple way to the to the color * distribution in the image that is being quantized. It outputs * colormapped images, either 4 bpp or 8 bpp, depending on the * max number of colors and the compression desired. * * The number of samples is saved as a float in the first location, * because this is required to use it as the key that orders the * cells in the priority queue. */ struct OctcubeQuantCell { l_float32 n; /* number of samples in this cell */ l_int32 octindex; /* octcube index */ l_int32 rcum, gcum, bcum; /* cumulative values */ l_int32 rval, gval, bval; /* average values */ }; typedef struct OctcubeQuantCell OQCELL; /* This data structure is using for heap sorting octcubes * by population. Sort order is decreasing. */ struct L_OctcubePop { l_float32 npix; /* parameter on which to sort */ l_int32 index; /* octcube index at assigned level */ l_int32 rval; /* mean red value of pixels in octcube */ l_int32 gval; /* mean green value of pixels in octcube */ l_int32 bval; /* mean blue value of pixels in octcube */ }; typedef struct L_OctcubePop L_OCTCUBE_POP; /* In pixDitherOctindexWithCmap(), we use these default values. * To get the max value of 'dif' in the dithering color transfer, * divide these "DIF_CAP" values by 8. However, a value of * 0 means that there is no cap (infinite cap). A very small * value is used for POP_DIF_CAP because dithering on the population * generated colormap can be unstable without a tight cap. */ static const l_int32 FIXED_DIF_CAP = 0; static const l_int32 POP_DIF_CAP = 40; /* Static octree helper function */ static l_int32 octreeFindColorCell(l_int32 octindex, CQCELL ***cqcaa, l_int32 *pindex, l_int32 *prval, l_int32 *pgval, l_int32 *pbval); /* Static cqcell functions */ static CQCELL ***octreeGenerateAndPrune(PIX *pixs, l_int32 colors, l_int32 reservedcolors, PIXCMAP **pcmap); static PIX *pixOctreeQuantizePixels(PIX *pixs, CQCELL ***cqcaa, l_int32 ditherflag); static CQCELL ***cqcellTreeCreate(void); static void cqcellTreeDestroy(CQCELL ****pcqcaa); /* Static helper octcube index functions */ static void getRGBFromOctcube(l_int32 cubeindex, l_int32 level, l_int32 *prval, l_int32 *pgval, l_int32 *pbval); static l_int32 getOctcubeIndices(l_int32 rgbindex, l_int32 level, l_int32 *pbindex, l_int32 *psindex); static l_int32 octcubeGetCount(l_int32 level, l_int32 *psize); /* Static function to perform octcube-indexed dithering */ static l_int32 pixDitherOctindexWithCmap(PIX *pixs, PIX *pixd, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_int32 *carray, l_int32 difcap); #ifndef NO_CONSOLE_IO #define DEBUG_COLORQUANT 0 #define DEBUG_OCTINDEX 0 #define DEBUG_OCTCUBE_CMAP 0 #define DEBUG_POP 0 #define DEBUG_FEW_COLORS 0 #define PRINT_OCTCUBE_STATS 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------------------* * Two-pass adaptive octree color quantization * *-------------------------------------------------------------------------*/ /*! * pixOctreeColorQuant() * * Input: pixs (32 bpp; 24-bit color) * colors (in colormap; some number in range [128 ... 256]; * the actual number of colors used will be smaller) * ditherflag (1 to dither, 0 otherwise) * Return: pixd (8 bpp with colormap), or null on error * * I found one description in the literature of octree color * quantization, using progressive truncation of the octree, * by M. Gervautz and W. Purgathofer in Graphics Gems, pp. * 287-293, ed. A. Glassner, Academic Press, 1990. * Rather than setting up a fixed partitioning of the color * space ab initio, as we do here, they allow the octree to be * progressively truncated as new pixels are added. They * need to set up some data structures that are traversed * with the addition of each 24 bit pixel, in order to decide * either (1) in which cluster (sub-branch of the octree) to put * the pixel, or (2) whether to truncate the octree further * to place the pixel in an existing cluster, or (3) which * two existing clusters should be merged so that the pixel * can be left to start a truncated leaf of the octree. Such dynamic * truncation is considerably more complicated, and Gervautz et * al. did not explain how they did it in anywhere near the * detail required to check their implementation. * * The simple method in pixFixedOctcubeQuant256() is very * fast, and with dithering the results are good, but you * can do better if the color clusters are selected adaptively * from the image. We want a method that makes much better * use of color samples in regions of color space with high * pixel density, while also fairly representing small numbers * of color pixels in low density regions. Such adaptation * requires two passes through the image: the first for generating * the pruned tree of color cubes and the second for computing the index * into the color table for each pixel. * * A relatively simple adaptive method is pixOctreeQuantByPopulation(). * That function first determines if the image has very few colors, * and, if so, quantizes to those colors. If there are more than * 256 colors, it generates a histogram of octcube leaf occupancy * at level 4, chooses the 192 most populated such leaves as * the first 192 colors, and sets the remaining 64 colors to the * residual average pixel values in each of the 64 level 2 octcubes. * This is a bit faster than pixOctreeColorQuant(), and does very * well without dithering, but for most images with dithering it * is clearly inferior. * * We now describe pixOctreeColorQuant(). The first pass is done * on a subsampled image, because we do not need to use all the * pixels in the image to generate the tree. Subsampling * down to 0.25 (1/16 of the pixels) makes the program run * about 1.3 times faster. * * Instead of dividing the color space into 256 equal-sized * regions, we initially divide it into 2^12 or 2^15 or 2^18 * equal-sized octcubes. Suppose we choose to use 2^18 octcubes. * This gives us 6 octree levels. We then prune back, * starting from level 6. For every cube at level 6, there * are 8 cubes at level 5. Call the operation of putting a * cube aside as a color table entry (CTE) a "saving." * We use a (in general) level-dependent threshold, and save * those level 6 cubes that are above threshold. * The rest are combined into the containing level 5 cube. * If between 1 and 7 level 6 cubes within a level 5 * cube have been saved by thresholding, then the remaining * level 6 cubes in that level 5 cube are automatically * saved as well, without applying a threshold. This greatly * simplifies both the description of the CTEs and the later * classification of each pixel as belonging to a CTE. * This procedure is iterated through every cube, starting at * level 5, and then 4, 3, and 2, successively. The result is that * each CTE contains the entirety of a set of from 1 to 7 cubes * from a given level that all belong to a single cube at the * level above. We classify the CTEs in terms of the * condition in which they are made as either being "threshold" * or "residual." They are "threshold" CTEs if no subcubes * are CTEs (that is, they contain every pixel within the cube) * and the number of pixels exceeds the threshold for making * a CTE. They are "residual" CTEs if at least one but not more * than 7 of the subcubes have already been determined to be CTEs; * this happens automatically -- no threshold is applied. * If all 8 subcubes are determined to be CTEs, the cube is * marked as having all pixels accounted for ('bleaf' = 1) but * is not saved as a CTE. * * We stop the pruning at level 2, at which there are 64 * sub-cubes. Any pixels not already claimed in a CTE are * put in these cubes. * * As the cubes are saved as color samples in the color table, * the number of remaining pixels P and the number of * remaining colors in the color table N are recomputed, * along with the average number of pixels P/N (ppc) to go in * each of the remaining colors. This running average number is * used to set the threshold at the current level. * * Because we are going to very small cubes at levels 6 or 5, * and will dither the colors for errors, it is not necessary * to compute the color center of each cluster; we can simply * use the center of the cube. This gives us a minimax error * condition: the maximum error is half the width of the * level 2 cubes -- 32 color values out of 256 -- for each color * sample. In practice, most of the pixels will be very much * closer to the center of their cells. And with dithering, * the average pixel color in a small region will be closer still. * Thus with the octree quantizer, we are able to capture * regions of high color pdf (probability density function) in small * but accurate CTEs, and to have only a small number of pixels * that end up a significant distance (with a guaranteed maximum) * from their true color. * * How should the threshold factor vary? Threshold factors * are required for levels 2, 3, 4 and 5 in the pruning stage. * The threshold for level 5 is actually applied to cubes at * level 6, etc. From various experiments, it appears that * the results do not vary appreciably for threshold values near 1.0. * If you want more colors in smaller cubes, the threshold * factors can be set lower than 1.0 for cubes at levels 4 and 5. * However, if the factor is set much lower than 1.0 for * levels 2 and 3, we can easily run out of colors. * We put aside 64 colors in the calculation of the threshold * values, because we must have 64 color centers at level 2, * that will have very few pixels in most of them. * If we reduce the factor for level 5 to 0.4, this will * generate many level 6 CTEs, and consequently * many residual cells will be formed up from those leaves, * resulting in the possibility of running out of colors. * Remember, the residual CTEs are mandatory, and are formed * without using the threshold, regardless of the number of * pixels that are absorbed. * * The implementation logically has four parts: * * (1) accumulation into small, fixed cells * (2) pruning back into selected CTE cubes * (3) organizing the CTEs for fast search to find * the CTE to which any image pixel belongs * (4) doing a second scan to code the image pixels by CTE * * Step (1) is straightforward; we use 2^15 cells. * * We've already discussed how the pruning step (2) will be performed. * * Steps (3) and (4) are related, in that the organization * used by step (3) determines how the search actually * takes place for each pixel in step (4). * * There are many ways to do step (3). Let's explore a few. * * (a) The simplest is to order the cubes from highest occupancy * to lowest, and traverse the list looking for the deepest * match. To make this more efficient, so that we know when * to stop looking, any cube that has separate CTE subcubes * would be marked as such, so that we know when we hit a * true leaf. * * (b) Alternatively, we can order the cubes by highest * occupancy separately each level, and work upward, * starting at level 5, so that when we find a match we * know that it will be correct. * * (c) Another approach would be to order the cubes by * "address" and use a hash table to find the cube * corresponding to a pixel color. I don't know how to * do this with a variable length address, as each CTE * will have 3*n bits, where n is the level. * * (d) Another approach entirely is to put the CTE cubes into * a tree, in such a way that starting from the root, and * using 3 bits of address at a time, the correct branch of * each octree can be taken until a leaf is found. Because * a given cube can be both a leaf and also have branches * going to sub-cubes, the search stops only when no * marked subcubes have addresses that match the given pixel. * * In the tree method, we can start with a dense infrastructure, * and place the leaves corresponding to the N colors * in the tree, or we can grow from the root only those * branches that end directly on leaves. * * What we do here is to take approach (d), and implement the tree * "virtually", as a set of arrays, one array for each level * of the tree. Initially we start at level 5, an array with * 2^15 cubes, each with 8 subcubes. We then build nodes at * levels closer to the root; at level 4 there are 2^12 nodes * each with 8 subcubes; etc. Using these arrays has * several advantages: * * - We don't need to keep track of links between cubes * and subcubes, because we can use the canonical * addressing on the cell arrays directly to determine * which nodes are parent cubes and which are sub-cubes. * * - We can prune directly on this tree * * - We can navigate the pruned tree quickly to classify * each pixel in the image. * * Canonical addressing guarantees that the i-th node at level k * has 8 subnodes given by the 8*i ... 8*i+7 nodes at level k+1. * * The pruning step works as follows. We go from the lowest * level up. At each level, the threshold is found from the * product of a factor near 1.0 and the ratio of unmarked pixels * to remaining colors (minus the 64). We march through * the space, sequentially considering a cube and its 8 subcubes. * We first check those subcubes that are not already * marked as CTE to see if any are above threshold, and if so, * generate a CTE and mark them as such. * We then determine if any of the subcubes have been marked. * If so, and there are subcubes that are not marked, * we generate a CTE for the cube from the remaining unmarked * subcubes; this is mandatory and does not depend on how many * pixels are in the set of subcubes. If none of the subcubes * are marked, we aggregate their pixels into the cube * containing them, but do not mark it as a CTE; that * will be determined when iterating through the next level up. * * When all the pixels in a cube are accounted for in one or more * colors, we set the boolean 'bleaf' to true. This is the * flag used to mark the cubes in the pruning step. If a cube * is marked, and all 8 subcubes are marked, then it is not * itself given a CTE because all pixels have already been * accounted for. * * Note that the pruning of the tree and labelling of the CTEs * (step 2) accomplishes step 3 implicitly, because the marked * and pruned tree is ready for use in labelling each pixel * in step 4. We now, for every pixel in the image, traverse * the tree from the root, looking for the lowest cube that is a leaf. * At each level we have a cube and subcube. If we reach a subcube * leaf that is marked 0, we know that the color is stored in the * cube above, and we've found the CTE. Otherwise, the subcube * leaf is marked 1. If we're at the last level, we've reached * the final leaf and must use it. Otherwise, continue the * process at the next level down. * * For robustness, efficiency and high quality output, we do the following: * * (1) Measure the color content of the image. If there is very little * color, quantize in grayscale. * (2) For efficiency, build the octree with a subsampled image if the * image is larger than some threshold size. * (3) Reserve an extra set of colors to prevent running out of colors * when pruning the octree; specifically, during the assignment * of those level 2 cells (out of the 64) that have unassigned * pixels. The problem of running out is more likely to happen * with small images, because the estimation we use for the * number of pixels available is not accurate. * (4) In the unlikely event that we run out of colors, the dithered * image can be very poor. As this would only happen with very * small images, and dithering is not particularly noticeable with * such images, turn it off. */ PIX * pixOctreeColorQuant(PIX *pixs, l_int32 colors, l_int32 ditherflag) { PROCNAME("pixOctreeColorQuant"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (colors < 128 || colors > 240) /* further restricted */ return (PIX *)ERROR_PTR("colors must be in [128, 240]", procName, NULL); return pixOctreeColorQuantGeneral(pixs, colors, ditherflag, 0.01, 0.01); } /*! * pixOctreeColorQuantGeneral() * * Input: pixs (32 bpp; 24-bit color) * colors (in colormap; some number in range [128 ... 240]; * the actual number of colors used will be smaller) * ditherflag (1 to dither, 0 otherwise) * validthresh (minimum fraction of pixels neither near white * nor black, required for color quantization; * typically ~0.01, but smaller for images that have * color but are nearly all white) * colorthresh (minimum fraction of pixels with color that are * not near white or black, that are required * for color quantization; typ. ~0.01, but smaller * for images that have color along with a * significant fraction of gray) * Return: pixd (8 bit with colormap), or null on error * * Notes: * (1) The parameters @validthresh and @colorthresh are used to * determine if color quantization should be used on an image, * or whether, instead, it should be quantized in grayscale. * If the image has very few non-white and non-black pixels, or * if those pixels that are non-white and non-black are all * very close to either white or black, it is usually better * to treat the color as accidental and to quantize the image * to gray only. These parameters are useful if you know * something a priori about the image. Perhaps you know that * there is only a very small fraction of color pixels, but they're * important to preserve; then you want to use a smaller value for * these parameters. To disable conversion to gray and force * color quantization, use @validthresh = 0.0 and @colorthresh = 0.0. * (2) See pixOctreeColorQuant() for algorithmic and implementation * details. This function has a more general interface. * (3) See pixColorFraction() for computing the fraction of pixels * that are neither white nor black, and the fraction of those * pixels that have little color. From the documentation there: * If pixfract is very small, there are few pixels that are * neither black nor white. If colorfract is very small, * the pixels that are neither black nor white have very * little color content. The product 'pixfract * colorfract' * gives the fraction of pixels with significant color content. * We test against the product @validthresh * @colorthresh * to find color in images that have either very few * intermediate gray pixels or that have many such gray pixels. */ PIX * pixOctreeColorQuantGeneral(PIX *pixs, l_int32 colors, l_int32 ditherflag, l_float32 validthresh, l_float32 colorthresh) { l_int32 w, h, minside, factor, index, rval, gval, bval; l_float32 scalefactor; l_float32 pixfract; /* fraction neither near white nor black */ l_float32 colorfract; /* fraction with color of the pixfract population */ CQCELL ***cqcaa; PIX *pixd, *pixsub; PIXCMAP *cmap; PROCNAME("pixOctreeColorQuantGeneral"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (colors < 128 || colors > 240) return (PIX *)ERROR_PTR("colors must be in [128, 240]", procName, NULL); /* Determine if the image has sufficient color content for * octree quantization, based on the input thresholds. * If pixfract << 1, most pixels are close to black or white. * If colorfract << 1, the pixels that are not near * black or white have very little color. * If with insufficient color, quantize with a grayscale colormap. */ pixGetDimensions(pixs, &w, &h, NULL); if (validthresh > 0.0 && colorthresh > 0.0) { minside = L_MIN(w, h); factor = L_MAX(1, minside / 400); pixColorFraction(pixs, 20, 244, 20, factor, &pixfract, &colorfract); if (pixfract * colorfract < validthresh * colorthresh) { L_INFO("\n Pixel fraction neither white nor black = %6.3f" "\n Color fraction of those pixels = %6.3f" "\n Quantizing to 8 bpp gray\n", procName, pixfract, colorfract); return pixConvertTo8(pixs, 1); } } else { L_INFO("\n Process in color by default\n", procName); } /* Conditionally subsample to speed up the first pass */ if (w > TREE_GEN_WIDTH) { scalefactor = (l_float32)TREE_GEN_WIDTH / (l_float32)w; pixsub = pixScaleBySampling(pixs, scalefactor, scalefactor); } else { pixsub = pixClone(pixs); } /* Drop the number of requested colors if image is very small */ if (w < MIN_DITHER_SIZE && h < MIN_DITHER_SIZE) colors = L_MIN(colors, 220); /* Make the pruned octree */ cqcaa = octreeGenerateAndPrune(pixsub, colors, CQ_RESERVED_COLORS, &cmap); if (!cqcaa) return (PIX *)ERROR_PTR("tree not made", procName, NULL); #if DEBUG_COLORQUANT L_INFO(" Colors requested = %d\n", procName, colors); L_INFO(" Actual colors = %d\n", procName, cmap->n); #endif /* DEBUG_COLORQUANT */ /* Do not dither if image is very small */ if (w < MIN_DITHER_SIZE && h < MIN_DITHER_SIZE && ditherflag == 1) { L_INFO("Small image: dithering turned off\n", procName); ditherflag = 0; } /* Traverse tree from root, looking for lowest cube * that is a leaf, and set dest pix value to its * colortable index */ if ((pixd = pixOctreeQuantizePixels(pixs, cqcaa, ditherflag)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); /* Attach colormap and copy res */ pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Force darkest color to black if each component <= 4 */ pixcmapGetRankIntensity(cmap, 0.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval < 5 && gval < 5 && bval < 5) pixcmapResetColor(cmap, index, 0, 0, 0); /* Force lightest color to white if each component >= 252 */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval > 251 && gval > 251 && bval > 251) pixcmapResetColor(cmap, index, 255, 255, 255); cqcellTreeDestroy(&cqcaa); pixDestroy(&pixsub); return pixd; } /*! * octreeGenerateAndPrune() * * Input: pixs * number of colors to use (between 128 and 256) * number of reserved colors * &cmap (made and returned) * Return: octree, colormap and number of colors used, or null * on error * * Notes: * (1) The number of colors in the cmap may differ from the number * of colors requested, but it will not be larger than 256 */ static CQCELL *** octreeGenerateAndPrune(PIX *pixs, l_int32 colors, l_int32 reservedcolors, PIXCMAP **pcmap) { l_int32 rval, gval, bval, cindex; l_int32 level, ncells, octindex; l_int32 w, h, wpls; l_int32 i, j, isub; l_int32 npix; /* number of remaining pixels to be assigned */ l_int32 ncolor; /* number of remaining color cells to be used */ l_int32 ppc; /* ave number of pixels left for each color cell */ l_int32 rv, gv, bv; l_float32 thresholdFactor[] = {0.01, 0.01, 1.0, 1.0, 1.0, 1.0}; l_float32 thresh; /* factor of ppc for this level */ l_uint32 *datas, *lines; l_uint32 *rtab, *gtab, *btab; CQCELL ***cqcaa; /* one array for each octree level */ CQCELL **cqca, **cqcasub; CQCELL *cqc, *cqcsub; PIXCMAP *cmap; NUMA *nat; /* accumulates levels for threshold cells */ NUMA *nar; /* accumulates levels for residual cells */ PROCNAME("octreeGenerateAndPrune"); if (!pixs) return (CQCELL ***)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (CQCELL ***)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (colors < 128 || colors > 256) return (CQCELL ***)ERROR_PTR("colors not in [128,256]", procName, NULL); if (!pcmap) return (CQCELL ***)ERROR_PTR("&cmap not defined", procName, NULL); /* Make the canonical index tables */ if (makeRGBToIndexTables(&rtab, >ab, &btab, CQ_NLEVELS)) return (CQCELL ***)ERROR_PTR("tables not made", procName, NULL); if ((cqcaa = cqcellTreeCreate()) == NULL) return (CQCELL ***)ERROR_PTR("cqcaa not made", procName, NULL); /* Generate an 8 bpp cmap (max size 256) */ cmap = pixcmapCreate(8); *pcmap = cmap; pixGetDimensions(pixs, &w, &h, NULL); npix = w * h; /* initialize to all pixels */ ncolor = colors - reservedcolors - EXTRA_RESERVED_COLORS; ppc = npix / ncolor; datas = pixGetData(pixs); wpls = pixGetWpl(pixs); /* Accumulate the centers of each cluster at level CQ_NLEVELS */ ncells = 1 << (3 * CQ_NLEVELS); cqca = cqcaa[CQ_NLEVELS]; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; cqc = cqca[octindex]; cqc->n++; } } /* Arrays for storing statistics */ if ((nat = numaCreate(0)) == NULL) return (CQCELL ***)ERROR_PTR("nat not made", procName, NULL); if ((nar = numaCreate(0)) == NULL) return (CQCELL ***)ERROR_PTR("nar not made", procName, NULL); /* Prune back from the lowest level and generate the colormap */ for (level = CQ_NLEVELS - 1; level >= 2; level--) { thresh = thresholdFactor[level]; cqca = cqcaa[level]; cqcasub = cqcaa[level + 1]; ncells = 1 << (3 * level); for (i = 0; i < ncells; i++) { /* i is octindex at level */ cqc = cqca[i]; for (j = 0; j < 8; j++) { /* check all subnodes */ isub = 8 * i + j; /* isub is octindex at level+1 */ cqcsub = cqcasub[isub]; if (cqcsub->bleaf == 1) { /* already a leaf? */ cqc->nleaves++; /* count the subcube leaves */ continue; } if (cqcsub->n >= thresh * ppc) { /* make it a true leaf? */ cqcsub->bleaf = 1; if (cmap->n < 256) { cqcsub->index = cmap->n; /* assign the color index */ getRGBFromOctcube(isub, level + 1, &rv, &gv, &bv); pixcmapAddColor(cmap, rv, gv, bv); #if 1 /* save values */ cqcsub->rc = rv; cqcsub->gc = gv; cqcsub->bc = bv; #endif } else { /* This doesn't seem to happen. */ L_WARNING("possibly assigned pixels to wrong color\n", procName); pixcmapGetNearestIndex(cmap, rv, gv, bv, &cindex); cqcsub->index = cindex; /* assign to the nearest */ pixcmapGetColor(cmap, cindex, &rval, &gval, &bval); cqcsub->rc = rval; cqcsub->gc = gval; cqcsub->bc = bval; } cqc->nleaves++; npix -= cqcsub->n; ncolor--; if (ncolor > 0) ppc = npix / ncolor; else if (ncolor + reservedcolors > 0) ppc = npix / (ncolor + reservedcolors); else ppc = 1000000; /* make it big */ numaAddNumber(nat, level + 1); #if DEBUG_OCTCUBE_CMAP fprintf(stderr, "Exceeds threshold: colors used = %d, colors remaining = %d\n", cmap->n, ncolor + reservedcolors); fprintf(stderr, " cell with %d pixels, npix = %d, ppc = %d\n", cqcsub->n, npix, ppc); fprintf(stderr, " index = %d, level = %d, subindex = %d\n", i, level, j); fprintf(stderr, " rv = %d, gv = %d, bv = %d\n", rv, gv, bv); #endif /* DEBUG_OCTCUBE_CMAP */ } } if (cqc->nleaves > 0 || level == 2) { /* make the cube a leaf now */ cqc->bleaf = 1; if (cqc->nleaves < 8) { /* residual CTE cube: acquire the * remaining pixels */ for (j = 0; j < 8; j++) { /* check all subnodes */ isub = 8 * i + j; cqcsub = cqcasub[isub]; if (cqcsub->bleaf == 0) /* absorb */ cqc->n += cqcsub->n; } if (cmap->n < 256) { cqc->index = cmap->n; /* assign the color index */ getRGBFromOctcube(i, level, &rv, &gv, &bv); pixcmapAddColor(cmap, rv, gv, bv); #if 1 /* save values */ cqc->rc = rv; cqc->gc = gv; cqc->bc = bv; #endif } else { L_WARNING("possibly assigned pixels to wrong color\n", procName); /* This is very bad. It will only cause trouble * with dithering, and we try to avoid it with * EXTRA_RESERVED_PIXELS. */ pixcmapGetNearestIndex(cmap, rv, gv, bv, &cindex); cqc->index = cindex; /* assign to the nearest */ pixcmapGetColor(cmap, cindex, &rval, &gval, &bval); cqc->rc = rval; cqc->gc = gval; cqc->bc = bval; } npix -= cqc->n; ncolor--; if (ncolor > 0) ppc = npix / ncolor; else if (ncolor + reservedcolors > 0) ppc = npix / (ncolor + reservedcolors); else ppc = 1000000; /* make it big */ numaAddNumber(nar, level); #if DEBUG_OCTCUBE_CMAP fprintf(stderr, "By remainder: colors used = %d, colors remaining = %d\n", cmap->n, ncolor + reservedcolors); fprintf(stderr, " cell with %d pixels, npix = %d, ppc = %d\n", cqc->n, npix, ppc); fprintf(stderr, " index = %d, level = %d\n", i, level); fprintf(stderr, " rv = %d, gv = %d, bv = %d\n", rv, gv, bv); #endif /* DEBUG_OCTCUBE_CMAP */ } } else { /* absorb all the subpixels but don't make it a leaf */ for (j = 0; j < 8; j++) { /* absorb from all subnodes */ isub = 8 * i + j; cqcsub = cqcasub[isub]; cqc->n += cqcsub->n; } } } } #if PRINT_OCTCUBE_STATS { l_int32 tc[] = {0, 0, 0, 0, 0, 0, 0}; l_int32 rc[] = {0, 0, 0, 0, 0, 0, 0}; l_int32 nt, nr, ival; nt = numaGetCount(nat); nr = numaGetCount(nar); for (i = 0; i < nt; i++) { numaGetIValue(nat, i, &ival); tc[ival]++; } for (i = 0; i < nr; i++) { numaGetIValue(nar, i, &ival); rc[ival]++; } fprintf(stderr, " Threshold cells formed: %d\n", nt); for (i = 1; i < CQ_NLEVELS + 1; i++) fprintf(stderr, " level %d: %d\n", i, tc[i]); fprintf(stderr, "\n Residual cells formed: %d\n", nr); for (i = 0; i < CQ_NLEVELS ; i++) fprintf(stderr, " level %d: %d\n", i, rc[i]); } #endif /* PRINT_OCTCUBE_STATS */ numaDestroy(&nat); numaDestroy(&nar); FREE(rtab); FREE(gtab); FREE(btab); return cqcaa; } /*! * pixOctreeQuantizePixels() * * Input: pixs (32 bpp) * octree in array format * ditherflag (1 for dithering, 0 for no dithering) * Return: pixd or null on error * * Notes: * (1) This routine doesn't need to use the CTEs (colormap * table entries) because the color indices are embedded * in the octree. Thus, the calling program must make * and attach the colormap to pixd after it is returned. * (2) Dithering is performed in integers, effectively rounding * to 1/8 sample increment. The data in the integer buffers is * 64 times the sample values. The 'dif' is 8 times the * sample values, and this spread, multiplied by 8, to the * integer buffers. Because the dif is truncated to an * integer, the dither is accurate to 1/8 of a sample increment, * or 1/2048 of the color range. */ static PIX * pixOctreeQuantizePixels(PIX *pixs, CQCELL ***cqcaa, l_int32 ditherflag) { l_uint8 *bufu8r, *bufu8g, *bufu8b; l_int32 rval, gval, bval; l_int32 octindex, index; l_int32 val1, val2, val3, dif; l_int32 w, h, wpls, wpld, i, j; l_int32 rc, gc, bc; l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; l_uint32 *rtab, *gtab, *btab; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixOctreeQuantizePixels"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (!cqcaa) return (PIX *)ERROR_PTR("cqcaa not defined", procName, NULL); /* Make the canonical index tables */ if (makeRGBToIndexTables(&rtab, >ab, &btab, CQ_NLEVELS)) return (PIX *)ERROR_PTR("tables not made", procName, NULL); /* Make output 8 bpp palette image */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Traverse tree from root, looking for lowest cube * that is a leaf, and set dest pix to its * colortable index value. The results are far * better when dithering to get a more accurate * average color. */ if (ditherflag == 0) { /* no dithering */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, j, index); } } } else { /* Dither */ bufu8r = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); bufu8g = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); bufu8b = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); buf1r = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf1g = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf1b = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2r = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2g = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2b = (l_int32 *)CALLOC(w, sizeof(l_int32)); if (!bufu8r || !bufu8g || !bufu8b) return (PIX *)ERROR_PTR("uint8 mono line buf not made", procName, NULL); if (!buf1r || !buf1g || !buf1b || !buf2r || !buf2g || !buf2b) return (PIX *)ERROR_PTR("mono line buf not made", procName, NULL); /* Start by priming buf2; line 1 is above line 2 */ pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } for (i = 0; i < h - 1; i++) { /* Swap data 2 --> 1, and read in new line 2 */ memcpy(buf1r, buf2r, 4 * w); memcpy(buf1g, buf2g, 4 * w); memcpy(buf1b, buf2b, 4 * w); pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } /* Dither */ lined = datad + i * wpld; for (j = 0; j < w - 1; j++) { rval = buf1r[j] / 64; gval = buf1g[j] / 64; bval = buf1b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, j, index); dif = buf1r[j] / 8 - 8 * rc; if (dif != 0) { val1 = buf1r[j + 1] + 3 * dif; val2 = buf2r[j] + 3 * dif; val3 = buf2r[j + 1] + 2 * dif; if (dif > 0) { buf1r[j + 1] = L_MIN(16383, val1); buf2r[j] = L_MIN(16383, val2); buf2r[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1r[j + 1] = L_MAX(0, val1); buf2r[j] = L_MAX(0, val2); buf2r[j + 1] = L_MAX(0, val3); } } dif = buf1g[j] / 8 - 8 * gc; if (dif != 0) { val1 = buf1g[j + 1] + 3 * dif; val2 = buf2g[j] + 3 * dif; val3 = buf2g[j + 1] + 2 * dif; if (dif > 0) { buf1g[j + 1] = L_MIN(16383, val1); buf2g[j] = L_MIN(16383, val2); buf2g[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1g[j + 1] = L_MAX(0, val1); buf2g[j] = L_MAX(0, val2); buf2g[j + 1] = L_MAX(0, val3); } } dif = buf1b[j] / 8 - 8 * bc; if (dif != 0) { val1 = buf1b[j + 1] + 3 * dif; val2 = buf2b[j] + 3 * dif; val3 = buf2b[j + 1] + 2 * dif; if (dif > 0) { buf1b[j + 1] = L_MIN(16383, val1); buf2b[j] = L_MIN(16383, val2); buf2b[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1b[j + 1] = L_MAX(0, val1); buf2b[j] = L_MAX(0, val2); buf2b[j + 1] = L_MAX(0, val3); } } } /* Get last pixel in row; no downward propagation */ rval = buf1r[w - 1] / 64; gval = buf1g[w - 1] / 64; bval = buf1b[w - 1] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, w - 1, index); } /* Get last row of pixels; no leftward propagation */ lined = datad + (h - 1) * wpld; for (j = 0; j < w; j++) { rval = buf2r[j] / 64; gval = buf2g[j] / 64; bval = buf2b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; octreeFindColorCell(octindex, cqcaa, &index, &rc, &gc, &bc); SET_DATA_BYTE(lined, j, index); } FREE(bufu8r); FREE(bufu8g); FREE(bufu8b); FREE(buf1r); FREE(buf1g); FREE(buf1b); FREE(buf2r); FREE(buf2g); FREE(buf2b); } FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*! * octreeFindColorCell() * * Input: octindex * cqcaa * &index ( index of CTE; returned to set pixel value) * &rval ( of CTE) * &gval ( of CTE) * &bval ( of CTE) * Return: 0 if OK; 1 on error * * Notes: * (1) As this is in inner loop, we don't check input pointers! * (2) This traverses from the root (well, actually from level 2, * because the level 2 cubes are the largest CTE cubes), * and finds the index number of the cell and the color values, * which can be used either directly or in a (Floyd-Steinberg) * error-diffusion dithering algorithm. */ static l_int32 octreeFindColorCell(l_int32 octindex, CQCELL ***cqcaa, l_int32 *pindex, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 level; l_int32 baseindex, subindex; CQCELL *cqc, *cqcsub; /* Use rgb values stored in the cubes; a little faster */ for (level = 2; level < CQ_NLEVELS; level++) { getOctcubeIndices(octindex, level, &baseindex, &subindex); cqc = cqcaa[level][baseindex]; cqcsub = cqcaa[level + 1][subindex]; if (cqcsub->bleaf == 0) { /* use cell at level above */ *pindex = cqc->index; *prval = cqc->rc; *pgval = cqc->gc; *pbval = cqc->bc; break; } else if (level == CQ_NLEVELS - 1) { /* reached the bottom */ *pindex = cqcsub->index; *prval = cqcsub->rc; *pgval = cqcsub->gc; *pbval = cqcsub->bc; break; } } #if 0 /* Generate rgb values for each cube on the fly; slower */ for (level = 2; level < CQ_NLEVELS; level++) { l_int32 rv, gv, bv; getOctcubeIndices(octindex, level, &baseindex, &subindex); cqc = cqcaa[level][baseindex]; cqcsub = cqcaa[level + 1][subindex]; if (cqcsub->bleaf == 0) { /* use cell at level above */ getRGBFromOctcube(baseindex, level, &rv, &gv, &bv); *pindex = cqc->index; *prval = rv; *pgval = gv; *pbval = bv; break; } else if (level == CQ_NLEVELS - 1) { /* reached the bottom */ getRGBFromOctcube(subindex, level + 1, &rv, &gv, &bv); *pindex = cqcsub->index; *prval = rv; *pgval = gv; *pbval = bv; break; } } #endif return 0; } /*------------------------------------------------------------------* * Helper cqcell functions * *------------------------------------------------------------------*/ /*! * cqcellTreeCreate() * * Input: none * Return: cqcell array tree */ static CQCELL *** cqcellTreeCreate(void) { l_int32 level, ncells, i; CQCELL ***cqcaa; CQCELL **cqca; /* one array for each octree level */ PROCNAME("cqcellTreeCreate"); /* Make array of accumulation cell arrays from levels 1 to 5 */ if ((cqcaa = (CQCELL ***)CALLOC(CQ_NLEVELS + 1, sizeof(CQCELL **))) == NULL) return (CQCELL ***)ERROR_PTR("cqcaa not made", procName, NULL); for (level = 0; level <= CQ_NLEVELS; level++) { ncells = 1 << (3 * level); if ((cqca = (CQCELL **)CALLOC(ncells, sizeof(CQCELL *))) == NULL) return (CQCELL ***)ERROR_PTR("cqca not made", procName, NULL); cqcaa[level] = cqca; for (i = 0; i < ncells; i++) { if ((cqca[i] = (CQCELL *)CALLOC(1, sizeof(CQCELL))) == NULL) return (CQCELL ***)ERROR_PTR("cqc not made", procName, NULL); } } return cqcaa; } /*! * cqcellTreeDestroy() * * Input: &cqcaa ( * Return: void */ static void cqcellTreeDestroy(CQCELL ****pcqcaa) { l_int32 level, ncells, i; CQCELL ***cqcaa; CQCELL **cqca; PROCNAME("cqcellTreeDestroy"); if (pcqcaa == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((cqcaa = *pcqcaa) == NULL) return; for (level = 0; level <= CQ_NLEVELS; level++) { cqca = cqcaa[level]; ncells = 1 << (3 * level); for (i = 0; i < ncells; i++) FREE(cqca[i]); FREE(cqca); } FREE(cqcaa); *pcqcaa = NULL; return; } /*------------------------------------------------------------------* * Helper index functions * *------------------------------------------------------------------*/ /*! * makeRGBToIndexTables() * * Input: &rtab, >ab, &btab ( tables) * cqlevels (can be 1, 2, 3, 4, 5 or 6) * Return: 0 if OK; 1 on error * * Set up tables. e.g., for cqlevels = 5, we need an integer 0 < i < 2^15: * rtab = (0 i7 0 0 i6 0 0 i5 0 0 i4 0 0 i3 0 0) * gtab = (0 0 i7 0 0 i6 0 0 i5 0 0 i4 0 0 i3 0) * btab = (0 0 0 i7 0 0 i6 0 0 i5 0 0 i4 0 0 i3) * * The tables are then used to map from rbg --> index as follows: * index = (0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3) * * e.g., for cqlevels = 4, we map to * index = (0 0 0 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4) * * This may look a bit strange. The notation 'r7' means the MSBit of * the r value (which has 8 bits, going down from r7 to r0). * Keep in mind that r7 is actually the r component bit for level 1 of * the octtree. Level 1 is composed of 8 octcubes, represented by * the bits (r7 g7 b7), which divide the entire color space into * 8 cubes. At level 2, each of these 8 octcubes is further divided into * 8 cubes, each labeled by the second most significant bits (r6 g6 b6) * of the rgb color. */ l_int32 makeRGBToIndexTables(l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab, l_int32 cqlevels) { l_int32 i; l_uint32 *rtab, *gtab, *btab; PROCNAME("makeRGBToIndexTables"); if (cqlevels < 1 || cqlevels > 6) return ERROR_INT("cqlevels must be in {1,...6}", procName, 1); if (!prtab || !pgtab || !pbtab) return ERROR_INT("&*tab not defined", procName, 1); if ((rtab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return ERROR_INT("rtab not made", procName, 1); if ((gtab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return ERROR_INT("gtab not made", procName, 1); if ((btab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return ERROR_INT("btab not made", procName, 1); *prtab = rtab; *pgtab = gtab; *pbtab = btab; switch (cqlevels) { case 1: for (i = 0; i < 256; i++) { rtab[i] = (i >> 5) & 0x0004; gtab[i] = (i >> 6) & 0x0002; btab[i] = (i >> 7); } break; case 2: for (i = 0; i < 256; i++) { rtab[i] = ((i >> 2) & 0x0020) | ((i >> 4) & 0x0004); gtab[i] = ((i >> 3) & 0x0010) | ((i >> 5) & 0x0002); btab[i] = ((i >> 4) & 0x0008) | ((i >> 6) & 0x0001); } break; case 3: for (i = 0; i < 256; i++) { rtab[i] = ((i << 1) & 0x0100) | ((i >> 1) & 0x0020) | ((i >> 3) & 0x0004); gtab[i] = (i & 0x0080) | ((i >> 2) & 0x0010) | ((i >> 4) & 0x0002); btab[i] = ((i >> 1) & 0x0040) | ((i >> 3) & 0x0008) | ((i >> 5) & 0x0001); } break; case 4: for (i = 0; i < 256; i++) { rtab[i] = ((i << 4) & 0x0800) | ((i << 2) & 0x0100) | (i & 0x0020) | ((i >> 2) & 0x0004); gtab[i] = ((i << 3) & 0x0400) | ((i << 1) & 0x0080) | ((i >> 1) & 0x0010) | ((i >> 3) & 0x0002); btab[i] = ((i << 2) & 0x0200) | (i & 0x0040) | ((i >> 2) & 0x0008) | ((i >> 4) & 0x0001); } break; case 5: for (i = 0; i < 256; i++) { rtab[i] = ((i << 7) & 0x4000) | ((i << 5) & 0x0800) | ((i << 3) & 0x0100) | ((i << 1) & 0x0020) | ((i >> 1) & 0x0004); gtab[i] = ((i << 6) & 0x2000) | ((i << 4) & 0x0400) | ((i << 2) & 0x0080) | (i & 0x0010) | ((i >> 2) & 0x0002); btab[i] = ((i << 5) & 0x1000) | ((i << 3) & 0x0200) | ((i << 1) & 0x0040) | ((i >> 1) & 0x0008) | ((i >> 3) & 0x0001); } break; case 6: for (i = 0; i < 256; i++) { rtab[i] = ((i << 10) & 0x20000) | ((i << 8) & 0x4000) | ((i << 6) & 0x0800) | ((i << 4) & 0x0100) | ((i << 2) & 0x0020) | (i & 0x0004); gtab[i] = ((i << 9) & 0x10000) | ((i << 7) & 0x2000) | ((i << 5) & 0x0400) | ((i << 3) & 0x0080) | ((i << 1) & 0x0010) | ((i >> 1) & 0x0002); btab[i] = ((i << 8) & 0x8000) | ((i << 6) & 0x1000) | ((i << 4) & 0x0200) | ((i << 2) & 0x0040) | (i & 0x0008) | ((i >> 2) & 0x0001); } break; default: ERROR_INT("cqlevels not in [1...6]", procName, 1); break; } return 0; } /*! * getOctcubeIndexFromRGB() * * Input: rval, gval, bval * rtab, gtab, btab (generated with makeRGBToIndexTables()) * &index () * Return: void * * Note: no error checking! */ void getOctcubeIndexFromRGB(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_uint32 *pindex) { *pindex = rtab[rval] | gtab[gval] | btab[bval]; return; } /*! * getRGBFromOctcube() * * Input: octcube index * level (at which index is expressed) * &rval ( r val of this cube) * &gval ( g val of this cube) * &bval ( b val of this cube) * Return: void * * Notes: * (1) We can consider all octcube indices to represent a * specific point in color space: namely, the location * of the 'upper-left' corner of the cube, where indices * increase down and to the right. The upper left corner * of the color space is then 00000.... * (2) The 'rgbindex' is a 24-bit representation of the location, * in octcube notation, at the center of the octcube. * To get to the center of an octcube, you choose the 111 * octcube at the next lower level. * (3) For example, if the octcube index = 110101 (binary), * which is a level 2 expression, then the rgbindex * is the 24-bit representation of 110101111 (at level 3); * namely, 000110101111000000000000. The number is padded * with 3 leading 0s (because the representation uses * only 21 bits) and 12 trailing 0s (the default for * levels 4-7, which are contained within each of the level3 * octcubes. Then the rgb values for the center of the * octcube are: rval = 11100000, gval = 10100000, bval = 01100000 */ static void getRGBFromOctcube(l_int32 cubeindex, l_int32 level, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 rgbindex; /* Bring to format in 21 bits: (r7 g7 b7 r6 g6 b6 ...) */ /* This is valid for levels from 0 to 6 */ rgbindex = cubeindex << (3 * (7 - level)); /* upper corner of cube */ rgbindex |= (0x7 << (3 * (6 - level))); /* index to center of cube */ /* Extract separate pieces */ *prval = ((rgbindex >> 13) & 0x80) | ((rgbindex >> 11) & 0x40) | ((rgbindex >> 9) & 0x20) | ((rgbindex >> 7) & 0x10) | ((rgbindex >> 5) & 0x08) | ((rgbindex >> 3) & 0x04) | ((rgbindex >> 1) & 0x02); *pgval = ((rgbindex >> 12) & 0x80) | ((rgbindex >> 10) & 0x40) | ((rgbindex >> 8) & 0x20) | ((rgbindex >> 6) & 0x10) | ((rgbindex >> 4) & 0x08) | ((rgbindex >> 2) & 0x04) | (rgbindex & 0x02); *pbval = ((rgbindex >> 11) & 0x80) | ((rgbindex >> 9) & 0x40) | ((rgbindex >> 7) & 0x20) | ((rgbindex >> 5) & 0x10) | ((rgbindex >> 3) & 0x08) | ((rgbindex >> 1) & 0x04) | ((rgbindex << 1) & 0x02); return; } /*! * getOctcubeIndices() * * Input: rgbindex * octree level (0, 1, 2, 3, 4, 5) * &octcube base index ( index at the octree level) * &octcube sub index ( index at the next lower level) * Return: 0 if OK, 1 on error * * for CQ_NLEVELS = 6, the full RGB index is in the form: * index = (0[13] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3 r2 g2 b2) * for CQ_NLEVELS = 5, the full RGB index is in the form: * index = (0[16] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3) * for CQ_NLEVELS = 4, the full RGB index is in the form: * index = (0[19] 0 r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4) * * The base index is the index of the octcube at the level given, * whereas the sub index is the index at the next level down. * * For level 0: base index = 0 * sub index is the 3 bit number (r7 g7 b7) * For level 1: base index = (r7 g7 b7) * sub index = (r7 g7 b7 r6 g6 b6) * For level 2: base index = (r7 g7 b7 r6 g6 b6) * sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5) * For level 3: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5) * sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4) * For level 4: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4) * sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3) * For level 5: base index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3) * sub index = (r7 g7 b7 r6 g6 b6 r5 g5 b5 r4 g4 b4 r3 g3 b3 * r2 g2 b2) */ static l_int32 getOctcubeIndices(l_int32 rgbindex, l_int32 level, l_int32 *pbindex, l_int32 *psindex) { PROCNAME("getOctcubeIndex"); if (level < 0 || level > CQ_NLEVELS - 1) return ERROR_INT("level must be in e.g., [0 ... 5]", procName, 1); if (!pbindex) return ERROR_INT("&bindex not defined", procName, 1); if (!psindex) return ERROR_INT("&sindex not defined", procName, 1); *pbindex = rgbindex >> (3 * (CQ_NLEVELS - level)); *psindex = rgbindex >> (3 * (CQ_NLEVELS - 1 - level)); return 0; } /*! * octcubeGetCount() * * Input: level (valid values are in [1,...6]; there are 2^level * cubes along each side of the rgb cube) * &size ( 2^(3 * level) cubes in the entire rgb cube) * Return: 0 if OK, 1 on error. Caller must check! * * level: 1 2 3 4 5 6 * size: 8 64 512 4098 32784 262272 */ static l_int32 octcubeGetCount(l_int32 level, l_int32 *psize) { PROCNAME("octcubeGetCount"); if (!psize) return ERROR_INT("&size not defined", procName, 1); if (level < 1 || level > 6) return ERROR_INT("invalid level", procName, 1); *psize = 1 << (3 * level); return 0; } /*---------------------------------------------------------------------------* * Adaptive octree quantization based on population at a fixed level * *---------------------------------------------------------------------------*/ /*! * pixOctreeQuantByPopulation() * * Input: pixs (32 bpp rgb) * level (significant bits for each of RGB; valid for {3,4}, * Use 0 for default (level 4; recommended) * ditherflag (1 to dither, 0 otherwise) * Return: pixd (quantized to octcubes) or null on error * * Notes: * (1) This color quantization method works very well without * dithering, using octcubes at two different levels: * (a) the input @level, which is either 3 or 4 * (b) level 2 (64 octcubes to cover the entire color space) * (2) For best results, using @level = 4 is recommended. * Why do we provide an option for using level 3? Because * there are 512 octcubes at level 3, and for many images * not more than 256 are filled. As a result, on some images * a very accurate quantized representation is possible using * @level = 3. * (3) This first breaks up the color space into octcubes at the * input @level, and computes, for each octcube, the average * value of the pixels that are in it. * (4) Then there are two possible situations: * (a) If there are not more than 256 populated octcubes, * it returns a cmapped pix with those values assigned. * (b) Otherwise, it selects 192 octcubes containing the largest * number of pixels and quantizes pixels within those octcubes * to their average. Then, to handle the residual pixels * that are not in those 192 octcubes, it generates a * level 2 octree consisting of 64 octcubes, and within * each octcube it quantizes the residual pixels to their * average within each of those level 2 octcubes. * (5) Unpopulated level 2 octcubes are represented in the colormap * by their centers. This, of course, has no effect unless * dithering is used for the output image. * (6) The depth of pixd is the minumum required to suppport the * number of colors found at @level; namely, 2, 4 or 8. * (7) This function works particularly well on images such as maps, * where there are a relatively small number of well-populated * colors, but due to antialiasing and compression artifacts * there may be a large number of different colors. This will * pull out and represent accurately the highly populated colors, * while still making a reasonable approximation for the others. * (8) The highest level of octcubes allowed is 4. Use of higher * levels typically results in having a small fraction of * pixels in the most populated 192 octcubes. As a result, * most of the pixels are represented at level 2, which is * not sufficiently accurate. * (9) Dithering shows artifacts on some images. If you plan to * dither, pixOctreeColorQuant() and pixFixedOctcubeQuant256() * usually give better results. */ PIX * pixOctreeQuantByPopulation(PIX *pixs, l_int32 level, l_int32 ditherflag) { l_int32 w, h, wpls, wpld, i, j, depth, size, ncolors, index; l_int32 rval, gval, bval; l_int32 *rarray, *garray, *barray, *narray, *iarray; l_uint32 octindex, octindex2; l_uint32 *rtab, *gtab, *btab, *rtab2, *gtab2, *btab2; l_uint32 *lines, *lined, *datas, *datad; L_OCTCUBE_POP *opop; L_HEAP *lh; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixOctreeQuantByPopulation"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (level == 0) level = 4; if (level < 3 || level > 4) return (PIX *)ERROR_PTR("level not in {3,4}", procName, NULL); /* Do not dither if image is very small */ pixGetDimensions(pixs, &w, &h, NULL); if (w < MIN_DITHER_SIZE && h < MIN_DITHER_SIZE && ditherflag == 1) { L_INFO("Small image: dithering turned off\n", procName); ditherflag = 0; } if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (PIX *)ERROR_PTR("size not returned", procName, NULL); if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return (PIX *)ERROR_PTR("tables not made", procName, NULL); if ((narray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("narray not made", procName, NULL); if ((rarray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("rarray not made", procName, NULL); if ((garray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("garray not made", procName, NULL); if ((barray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("barray not made", procName, NULL); /* Place the pixels in octcube leaves. */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = NULL; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; narray[octindex]++; rarray[octindex] += rval; garray[octindex] += gval; barray[octindex] += bval; } } /* Find the number of different colors */ for (i = 0, ncolors = 0; i < size; i++) { if (narray[i] > 0) ncolors++; } if (ncolors <= 4) depth = 2; else if (ncolors <= 16) depth = 4; else depth = 8; pixd = pixCreate(w, h, depth); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); cmap = pixcmapCreate(depth); pixSetColormap(pixd, cmap); /* Average the colors in each octcube leaf. */ for (i = 0; i < size; i++) { if (narray[i] > 0) { rarray[i] /= narray[i]; garray[i] /= narray[i]; barray[i] /= narray[i]; } } /* If ncolors <= 256, finish immediately. Do not dither. * Re-use narray to hold the colormap index + 1 */ if (ncolors <= 256) { for (i = 0, index = 0; i < size; i++) { if (narray[i] > 0) { pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); narray[i] = index + 1; /* to avoid storing 0 */ index++; } } /* Set the cmap indices for each pixel */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; switch (depth) { case 8: SET_DATA_BYTE(lined, j, narray[octindex] - 1); break; case 4: SET_DATA_QBIT(lined, j, narray[octindex] - 1); break; case 2: SET_DATA_DIBIT(lined, j, narray[octindex] - 1); break; default: L_WARNING("shouldn't get here\n", procName); } } } goto array_cleanup; } /* More complicated. Sort by decreasing population */ lh = lheapCreate(500, L_SORT_DECREASING); for (i = 0; i < size; i++) { if (narray[i] > 0) { opop = (L_OCTCUBE_POP *)CALLOC(1, sizeof(L_OCTCUBE_POP)); opop->npix = (l_float32)narray[i]; opop->index = i; opop->rval = rarray[i]; opop->gval = garray[i]; opop->bval = barray[i]; lheapAdd(lh, opop); } } /* Take the top 192. These will form the first 192 colors * in the cmap. iarray[i] holds the index into the cmap. */ if ((iarray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("iarray not made", procName, NULL); for (i = 0; i < 192; i++) { opop = (L_OCTCUBE_POP*)lheapRemove(lh); if (!opop) break; pixcmapAddColor(cmap, opop->rval, opop->gval, opop->bval); iarray[opop->index] = i + 1; /* +1 to avoid storing 0 */ #if DEBUG_POP fprintf(stderr, "i = %d, n = %6.0f, (r,g,b) = (%d %d %d)\n", i, opop->npix, opop->rval, opop->gval, opop->bval); #endif /* DEBUG_POP */ FREE(opop); } /* Make the octindex tables for level 2, and reuse rarray, etc. */ if (makeRGBToIndexTables(&rtab2, >ab2, &btab2, 2)) return (PIX *)ERROR_PTR("level 2 tables not made", procName, NULL); for (i = 0; i < 64; i++) { narray[i] = 0; rarray[i] = 0; garray[i] = 0; barray[i] = 0; } /* Take the rest of the occupied octcubes, assigning the pixels * to these new colormap indices. iarray[] is addressed * by @level octcube indices, and it now holds the * colormap indices for all pixels in pixs. */ for (i = 192; i < size; i++) { opop = (L_OCTCUBE_POP*)lheapRemove(lh); if (!opop) break; rval = opop->rval; gval = opop->gval; bval = opop->bval; octindex2 = rtab2[rval] | gtab2[gval] | btab2[bval]; narray[octindex2] += (l_int32)opop->npix; rarray[octindex2] += (l_int32)opop->npix * rval; garray[octindex2] += (l_int32)opop->npix * gval; barray[octindex2] += (l_int32)opop->npix * bval; iarray[opop->index] = 192 + octindex2 + 1; /* +1 to avoid storing 0 */ FREE(opop); } lheapDestroy(&lh, TRUE); /* To span the full color space, which is necessary for dithering, * set each iarray element whose value is still 0 at the input * level octcube leaves (because there were no pixels in those * octcubes) to the colormap index corresponding to its level 2 * octcube. */ if (ditherflag) { for (i = 0; i < size; i++) { if (iarray[i] == 0) { getRGBFromOctcube(i, level, &rval, &gval, &bval); octindex2 = rtab2[rval] | gtab2[gval] | btab2[bval]; iarray[i] = 192 + octindex2 + 1; } } } FREE(rtab2); FREE(gtab2); FREE(btab2); /* Average the colors from the residuals in each level 2 octcube, * and add these 64 values to the colormap. */ for (i = 0; i < 64; i++) { if (narray[i] > 0) { rarray[i] /= narray[i]; garray[i] /= narray[i]; barray[i] /= narray[i]; } else { /* no pixels in this octcube; use center value */ getRGBFromOctcube(i, 2, &rarray[i], &garray[i], &barray[i]); } pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); } /* Set the cmap indices for each pixel. Subtract 1 from * the value in iarray[] because we added 1 earlier. */ if (ditherflag == 0) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; SET_DATA_BYTE(lined, j, iarray[octindex] - 1); } } } else { /* dither */ pixDitherOctindexWithCmap(pixs, pixd, rtab, gtab, btab, iarray, POP_DIF_CAP); } #if DEBUG_POP for (i = 0; i < size / 16; i++) { l_int32 j; for (j = 0; j < 16; j++) fprintf(stderr, "%d ", iarray[16 * i + j]); fprintf(stderr, "\n"); } #endif /* DEBUG_POP */ FREE(iarray); array_cleanup: FREE(narray); FREE(rarray); FREE(garray); FREE(barray); FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*! * pixDitherOctindexWithCmap() * * Input: pixs (32 bpp rgb) * pixd (8 bpp cmapped) * rtab, gtab, btab (tables from rval to octindex) * indexmap (array mapping octindex to cmap index) * difcap (max allowed dither transfer; use 0 for infinite cap) * Return: 0 if OK, 1 on error * * Notes: * (1) This performs dithering to generate the colormap indices * in pixd. The colormap has been calculated, along with * four input LUTs that together give the inverse colormapping * from RGB to colormap index. * (2) For pixOctreeQuantByPopulation(), @indexmap maps from the * standard octindex to colormap index (after subtracting 1). * The basic pixel-level function, without dithering, is: * extractRGBValues(lines[j], &rval, &gval, &bval); * octindex = rtab[rval] | gtab[gval] | btab[bval]; * SET_DATA_BYTE(lined, j, indexmap[octindex] - 1); * (3) This can be used in any situation where the general * prescription for finding the colormap index from the rgb * value is precisely this: * cmapindex = indexmap[rtab[rval] | gtab[gval] | btab[bval]] - 1 * For example, in pixFixedOctcubeQuant256(), we don't use * standard octcube indexing, the rtab (etc) LUTs map directly * to the colormap index, and @indexmap just compensates for * the 1-off indexing assumed to be in that table. */ static l_int32 pixDitherOctindexWithCmap(PIX *pixs, PIX *pixd, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab, l_int32 *indexmap, l_int32 difcap) { l_uint8 *bufu8r, *bufu8g, *bufu8b; l_int32 i, j, w, h, wpld, octindex, cmapindex; l_int32 rval, gval, bval, rc, gc, bc; l_int32 dif, val1, val2, val3; l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; l_uint32 *datad, *lined; PIXCMAP *cmap; PROCNAME("pixDitherOctindexWithCmap"); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs undefined or not 32 bpp", procName, 1); if (!pixd || pixGetDepth(pixd) != 8) return ERROR_INT("pixd undefined or not 8 bpp", procName, 1); if ((cmap = pixGetColormap(pixd)) == NULL) return ERROR_INT("pixd not cmapped", procName, 1); if (!rtab || !gtab || !btab || !indexmap) return ERROR_INT("not all 4 tables defined", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetWidth(pixd) != w || pixGetHeight(pixd) != h) return ERROR_INT("pixs and pixd not same size", procName, 1); bufu8r = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); bufu8g = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); bufu8b = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); buf1r = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf1g = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf1b = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2r = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2g = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2b = (l_int32 *)CALLOC(w, sizeof(l_int32)); if (!bufu8r || !bufu8g || !bufu8b) return ERROR_INT("uint8 line buf not made", procName, 1); if (!buf1r || !buf1g || !buf1b || !buf2r || !buf2g || !buf2b) return ERROR_INT("mono line buf not made", procName, 1); /* Start by priming buf2; line 1 is above line 2 */ pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h - 1; i++) { /* Swap data 2 --> 1, and read in new line 2 */ memcpy(buf1r, buf2r, 4 * w); memcpy(buf1g, buf2g, 4 * w); memcpy(buf1b, buf2b, 4 * w); pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } /* Dither */ lined = datad + i * wpld; for (j = 0; j < w - 1; j++) { rval = buf1r[j] / 64; gval = buf1g[j] / 64; bval = buf1b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; cmapindex = indexmap[octindex] - 1; SET_DATA_BYTE(lined, j, cmapindex); pixcmapGetColor(cmap, cmapindex, &rc, &gc, &bc); dif = buf1r[j] / 8 - 8 * rc; if (difcap > 0) { if (dif > difcap) dif = difcap; if (dif < -difcap) dif = -difcap; } if (dif != 0) { val1 = buf1r[j + 1] + 3 * dif; val2 = buf2r[j] + 3 * dif; val3 = buf2r[j + 1] + 2 * dif; if (dif > 0) { buf1r[j + 1] = L_MIN(16383, val1); buf2r[j] = L_MIN(16383, val2); buf2r[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1r[j + 1] = L_MAX(0, val1); buf2r[j] = L_MAX(0, val2); buf2r[j + 1] = L_MAX(0, val3); } } dif = buf1g[j] / 8 - 8 * gc; if (difcap > 0) { if (dif > difcap) dif = difcap; if (dif < -difcap) dif = -difcap; } if (dif != 0) { val1 = buf1g[j + 1] + 3 * dif; val2 = buf2g[j] + 3 * dif; val3 = buf2g[j + 1] + 2 * dif; if (dif > 0) { buf1g[j + 1] = L_MIN(16383, val1); buf2g[j] = L_MIN(16383, val2); buf2g[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1g[j + 1] = L_MAX(0, val1); buf2g[j] = L_MAX(0, val2); buf2g[j + 1] = L_MAX(0, val3); } } dif = buf1b[j] / 8 - 8 * bc; if (difcap > 0) { if (dif > difcap) dif = difcap; if (dif < -difcap) dif = -difcap; } if (dif != 0) { val1 = buf1b[j + 1] + 3 * dif; val2 = buf2b[j] + 3 * dif; val3 = buf2b[j + 1] + 2 * dif; if (dif > 0) { buf1b[j + 1] = L_MIN(16383, val1); buf2b[j] = L_MIN(16383, val2); buf2b[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1b[j + 1] = L_MAX(0, val1); buf2b[j] = L_MAX(0, val2); buf2b[j + 1] = L_MAX(0, val3); } } } /* Get last pixel in row; no downward propagation */ rval = buf1r[w - 1] / 64; gval = buf1g[w - 1] / 64; bval = buf1b[w - 1] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; cmapindex = indexmap[octindex] - 1; SET_DATA_BYTE(lined, w - 1, cmapindex); } /* Get last row of pixels; no leftward propagation */ lined = datad + (h - 1) * wpld; for (j = 0; j < w; j++) { rval = buf2r[j] / 64; gval = buf2g[j] / 64; bval = buf2b[j] / 64; octindex = rtab[rval] | gtab[gval] | btab[bval]; cmapindex = indexmap[octindex] - 1; SET_DATA_BYTE(lined, j, cmapindex); } FREE(bufu8r); FREE(bufu8g); FREE(bufu8b); FREE(buf1r); FREE(buf1g); FREE(buf1b); FREE(buf2r); FREE(buf2g); FREE(buf2b); return 0; } /*---------------------------------------------------------------------------* * Adaptive octree quantization to 4 and 8 bpp with max colors * *---------------------------------------------------------------------------*/ /*! * pixOctreeQuantNumColors() * * Input: pixs (32 bpp rgb) * maxcolors (8 to 256; the actual number of colors used * may be less than this) * subsample (factor for computing color distribution; * use 0 for default) * Return: pixd (4 or 8 bpp, colormapped), or null on error * * pixOctreeColorQuant() is very flexible in terms of the relative * depth of different cubes of the octree. By contrast, this function, * pixOctreeQuantNumColors() is also adaptive, but it supports octcube * leaves at only two depths: a smaller depth that guarantees * full coverage of the color space and octcubes at one level * deeper for more accurate colors. Its main virutes are simplicity * and speed, which are both derived from the natural indexing of * the octcubes from the RGB values. * * Before describing pixOctreeQuantNumColors(), consider an even simpler * approach for 4 bpp with either 8 or 16 colors. With 8 colors, * you simply go to level 1 octcubes and use the average color * found in each cube. For 16 colors, you find which of the three * colors has the largest variance at the second level, and use two * indices for that color. The result is quite poor, because (1) some * of the cubes are nearly empty and (2) you don't get much color * differentiation for the extra 8 colors. Trust me, this method may * be simple, but it isn't worth anything. * * In pixOctreeQuantNumColors(), we generate colormapped images at * either 4 bpp or 8 bpp. For 4 bpp, we have a minimum of 8 colors * for the level 1 octcubes, plus up to 8 additional colors that * are determined from the level 2 popularity. If the number of colors * is between 8 and 16, the output is a 4 bpp image. If the number of * colors is greater than 16, the output is a 8 bpp image. * * We use a priority queue, implemented with a heap, to select the * requisite number of most populated octcubes at the deepest level * (level 2 for 64 or fewer colors; level 3 for more than 64 colors). * These are combined with one color for each octcube one level above, * which is used to span the color space of octcubes that were not * included at the deeper level. * * If the deepest level is 2, we combine the popular level 2 octcubes * (out of a total of 64) with the 8 level 1 octcubes. If the deepest * level is 3, we combine the popular level 3 octcubes (out of a * total 512) with the 64 level 2 octcubes that span the color space. * In the latter case, we require a minimum of 64 colors for the level 2 * octcubes, plus up to 192 additional colors determined from level 3 * popularity. * * The parameter 'maxlevel' is the deepest octcube level that is used. * The implementation also uses two LUTs, which are employed in * two successive traversals of the dest image. The first maps * from the src octindex at 'maxlevel' to the color table index, * which is the value that is stored in the 4 or 8 bpp dest pixel. * The second LUT maps from that colormap value in the dest to a * new colormap value for a minimum sized colormap, stored back in * the dest. It is used to remove any color map entries that * correspond to color space regions that have no pixels in the * source image. These regions can be either from the higher level * (e.g., level 1 for 4 bpp), or from octcubes at 'maxlevel' that * are unoccupied. This remapping results in the minimum number * of colors used according to the constraints induced by the * input 'maxcolors'. We also compute the average R, G and B color * values in each region of the color space represented by a * colormap entry, and store them in the colormap. * * The maximum number of colors is input, which determines the * following properties of the dest image and octcube regions used: * * Number of colors dest image depth maxlevel * ---------------- ---------------- -------- * 8 to 16 4 bpp 2 * 17 to 64 8 bpp 2 * 65 to 256 8 bpp 3 * * It may turn out that the number of extra colors, beyond the * minimum (8 and 64 for maxlevel 2 and 3, respectively), is larger * than the actual number of occupied cubes at these levels * In that case, all the pixels are contained in this * subset of cubes at maxlevel, and no colormap colors are needed * to represent the remainder pixels one level above. Thus, for * example, in use one often finds that the pixels in an image * occupy less than 192 octcubes at level 3, so they can be represented * by a colormap for octcubes at level 3 only. */ PIX * pixOctreeQuantNumColors(PIX *pixs, l_int32 maxcolors, l_int32 subsample) { l_int32 w, h, minside, bpp, wpls, wpld, i, j, actualcolors; l_int32 rval, gval, bval, nbase, nextra, maxlevel, ncubes, val; l_int32 *lut1, *lut2; l_uint32 index; l_uint32 *lines, *lined, *datas, *datad, *pspixel; l_uint32 *rtab, *gtab, *btab; OQCELL *oqc; OQCELL **oqca; L_HEAP *lh; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixOctreeQuantNumColors"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); minside = L_MIN(w, h); if (subsample <= 0) { subsample = L_MAX(1, minside / 200); } if (maxcolors >= 8 && maxcolors <= 16) { bpp = 4; pixd = pixCreate(w, h, bpp); maxlevel = 2; ncubes = 64; /* 2^6 */ nbase = 8; nextra = maxcolors - nbase; } else if (maxcolors < 64) { bpp = 8; pixd = pixCreate(w, h, bpp); maxlevel = 2; ncubes = 64; /* 2^6 */ nbase = 8; nextra = maxcolors - nbase; } else if (maxcolors >= 64 && maxcolors <= 256) { bpp = 8; pixd = pixCreate(w, h, bpp); maxlevel = 3; ncubes = 512; /* 2^9 */ nbase = 64; nextra = maxcolors - nbase; } else { return (PIX *)ERROR_PTR("maxcolors not in {8...256}", procName, NULL); } pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /*----------------------------------------------------------* * If we're using the minimum number of colors, it is * * much simpler. We just use 'nbase' octcubes. * * For this case, we don't eliminate any extra colors. * *----------------------------------------------------------*/ if (nextra == 0) { /* prepare the OctcubeQuantCell array */ if ((oqca = (OQCELL **)CALLOC(nbase, sizeof(OQCELL *))) == NULL) return (PIX *)ERROR_PTR("oqca not made", procName, NULL); for (i = 0; i < nbase; i++) { oqca[i] = (OQCELL *)CALLOC(1, sizeof(OQCELL)); oqca[i]->n = 0.0; } makeRGBToIndexTables(&rtab, >ab, &btab, maxlevel - 1); /* Go through the entire image, gathering statistics and * assigning pixels to their quantized value */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); /* fprintf(stderr, "rval = %d, gval = %d, bval = %d, index = %d\n", rval, gval, bval, index); */ switch (bpp) { case 4: SET_DATA_QBIT(lined, j, index); break; case 8: SET_DATA_BYTE(lined, j, index); break; default: return (PIX *)ERROR_PTR("bpp not 4 or 8!", procName, NULL); break; } oqca[index]->n += 1.0; oqca[index]->rcum += rval; oqca[index]->gcum += gval; oqca[index]->bcum += bval; } } /* Compute average color values in each octcube, and * generate colormap */ cmap = pixcmapCreate(bpp); pixSetColormap(pixd, cmap); for (i = 0; i < nbase; i++) { oqc = oqca[i]; if (oqc->n != 0) { oqc->rval = (l_int32)(oqc->rcum / oqc->n); oqc->gval = (l_int32)(oqc->gcum / oqc->n); oqc->bval = (l_int32)(oqc->bcum / oqc->n); } else { getRGBFromOctcube(i, maxlevel - 1, &oqc->rval, &oqc->gval, &oqc->bval); } pixcmapAddColor(cmap, oqc->rval, oqc->gval, oqc->bval); } for (i = 0; i < nbase; i++) FREE(oqca[i]); FREE(oqca); FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*------------------------------------------------------------* * General case: we will use colors in octcubes at maxlevel. * * We also remove any colors that are not populated from * * the colormap. * *------------------------------------------------------------*/ /* Prepare the OctcubeQuantCell array */ if ((oqca = (OQCELL **)CALLOC(ncubes, sizeof(OQCELL *))) == NULL) return (PIX *)ERROR_PTR("oqca not made", procName, NULL); for (i = 0; i < ncubes; i++) { oqca[i] = (OQCELL *)CALLOC(1, sizeof(OQCELL)); oqca[i]->n = 0.0; } /* Make the tables to map color to the octindex, * of which there are 'ncubes' at 'maxlevel' */ makeRGBToIndexTables(&rtab, >ab, &btab, maxlevel); /* Estimate the color distribution; we want to find the * most popular nextra colors at 'maxlevel' */ for (i = 0; i < h; i += subsample) { lines = datas + i * wpls; for (j = 0; j < w; j += subsample) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); oqca[index]->n += 1.0; oqca[index]->octindex = index; oqca[index]->rcum += rval; oqca[index]->gcum += gval; oqca[index]->bcum += bval; } } /* Transfer the OQCELL from the array, and order in a heap */ lh = lheapCreate(512, L_SORT_DECREASING); for (i = 0; i < ncubes; i++) lheapAdd(lh, oqca[i]); FREE(oqca); /* don't need this array */ /* Prepare a new OctcubeQuantCell array, with maxcolors cells */ if ((oqca = (OQCELL **)CALLOC(maxcolors, sizeof(OQCELL *))) == NULL) return (PIX *)ERROR_PTR("oqca not made", procName, NULL); for (i = 0; i < nbase; i++) { /* make nbase cells */ oqca[i] = (OQCELL *)CALLOC(1, sizeof(OQCELL)); oqca[i]->n = 0.0; } /* Remove the nextra most populated ones, and put them in the array */ for (i = 0; i < nextra; i++) { oqc = (OQCELL *)lheapRemove(lh); oqc->n = 0.0; /* reinit */ oqc->rcum = 0; oqc->gcum = 0; oqc->bcum = 0; oqca[nbase + i] = oqc; /* store it in the array */ } /* Destroy the heap and its remaining contents */ lheapDestroy(&lh, TRUE); /* Generate a lookup table from octindex at maxlevel * to color table index */ if ((lut1 = (l_int32 *)CALLOC(ncubes, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("lut1 not made", procName, NULL); for (i = 0; i < nextra; i++) lut1[oqca[nbase + i]->octindex] = nbase + i; for (index = 0; index < ncubes; index++) { if (lut1[index] == 0) /* not one of the extras; need to assign */ lut1[index] = index >> 3; /* remove the least significant bits */ /* fprintf(stderr, "lut1[%d] = %d\n", index, lut1[index]); */ } /* Go through the entire image, gathering statistics and * assigning pixels to their quantized value */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &index); /* fprintf(stderr, "rval = %d, gval = %d, bval = %d, index = %d\n", rval, gval, bval, index); */ val = lut1[index]; switch (bpp) { case 4: SET_DATA_QBIT(lined, j, val); break; case 8: SET_DATA_BYTE(lined, j, val); break; default: return (PIX *)ERROR_PTR("bpp not 4 or 8!", procName, NULL); break; } oqca[val]->n += 1.0; oqca[val]->rcum += rval; oqca[val]->gcum += gval; oqca[val]->bcum += bval; } } /* Compute averages, set up a colormap, and make a second * lut that converts from the color values currently in * the image to a minimal set */ if ((lut2 = (l_int32 *)CALLOC(ncubes, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("lut2 not made", procName, NULL); cmap = pixcmapCreate(bpp); pixSetColormap(pixd, cmap); for (i = 0, index = 0; i < maxcolors; i++) { oqc = oqca[i]; lut2[i] = index; if (oqc->n == 0) /* no occupancy; don't bump up index */ continue; oqc->rval = (l_int32)(oqc->rcum / oqc->n); oqc->gval = (l_int32)(oqc->gcum / oqc->n); oqc->bval = (l_int32)(oqc->bcum / oqc->n); pixcmapAddColor(cmap, oqc->rval, oqc->gval, oqc->bval); index++; } /* pixcmapWriteStream(stderr, cmap); */ actualcolors = pixcmapGetCount(cmap); /* fprintf(stderr, "Number of different colors = %d\n", actualcolors); */ /* Last time through the image; use the lookup table to * remap the pixel value to the minimal colormap */ if (actualcolors < maxcolors) { for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { switch (bpp) { case 4: val = GET_DATA_QBIT(lined, j); SET_DATA_QBIT(lined, j, lut2[val]); break; case 8: val = GET_DATA_BYTE(lined, j); SET_DATA_BYTE(lined, j, lut2[val]); break; } } } } for (i = 0; i < maxcolors; i++) FREE(oqca[i]); FREE(oqca); FREE(lut1); FREE(lut2); FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*-------------------------------------------------------------------------* * Mixed color/gray quantization with specified number of colors * *-------------------------------------------------------------------------*/ /*! * pixOctcubeQuantMixedWithGray() * * Input: pixs (32 bpp rgb) * depth (of output pix) * graylevels (grayscale) * delta (threshold for deciding if a pix is color or grayscale) * Return: pixd (quantized to octcube and gray levels) or null on error * * Notes: * (1) Generates a colormapped image, where the colormap table values * have two components: octcube values representing pixels with * color content, and grayscale values for the rest. * (2) The threshold (delta) is the maximum allowable difference of * the max abs value of | r - g |, | r - b | and | g - b |. * (3) The octcube values are the averages of all pixels that are * found in the octcube, and that are far enough from gray to * be considered color. This can roughly be visualized as all * the points in the rgb color cube that are not within a "cylinder" * of diameter approximately 'delta' along the main diagonal. * (4) We want to guarantee full coverage of the rgb color space; thus, * if the output depth is 4, the octlevel is 1 (2 x 2 x 2 = 8 cubes) * and if the output depth is 8, the octlevel is 2 (4 x 4 x 4 * = 64 cubes). * (5) Consequently, we have the following constraint on the number * of allowed gray levels: for 4 bpp, 8; for 8 bpp, 192. */ PIX * pixOctcubeQuantMixedWithGray(PIX *pixs, l_int32 depth, l_int32 graylevels, l_int32 delta) { l_int32 w, h, wpls, wpld, i, j, size, octlevels; l_int32 rval, gval, bval, del, val, midval; l_int32 *carray, *rarray, *garray, *barray; l_int32 *tabval; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixOctcubeQuantMixedWithGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (depth == 4) { octlevels = 1; size = 8; /* 2 ** 3 */ if (graylevels > 8) return (PIX *)ERROR_PTR("max 8 gray levels", procName, NULL); } else if (depth == 8) { octlevels = 2; size = 64; /* 2 ** 6 */ if (graylevels > 192) return (PIX *)ERROR_PTR("max 192 gray levels", procName, NULL); } else { return (PIX *)ERROR_PTR("output depth not 4 or 8 bpp", procName, NULL); } /* Make octcube index tables */ if (makeRGBToIndexTables(&rtab, >ab, &btab, octlevels)) return (PIX *)ERROR_PTR("tables not made", procName, NULL); /* Make octcube arrays for storing points in each cube */ if ((carray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("carray not made", procName, NULL); if ((rarray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("rarray not made", procName, NULL); if ((garray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("garray not made", procName, NULL); if ((barray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("barray not made", procName, NULL); /* Make lookup table, using computed thresholds */ if ((tabval = makeGrayQuantIndexTable(graylevels)) == NULL) return (PIX *)ERROR_PTR("tabval not made", procName, NULL); /* Make colormapped output pixd */ pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); cmap = pixcmapCreate(depth); for (j = 0; j < size; j++) /* reserve octcube colors */ pixcmapAddColor(cmap, 1, 1, 1); /* a color that won't be used */ for (j = 0; j < graylevels; j++) { /* set grayscale colors */ val = (255 * j) / (graylevels - 1); pixcmapAddColor(cmap, val, val, val); } pixSetColormap(pixd, cmap); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* Go through src image: assign dest pixels to colormap values * and compute average colors in each occupied octcube */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); if (rval > gval) { if (gval > bval) { /* r > g > b */ del = rval - bval; midval = gval; } else if (rval > bval) { /* r > b > g */ del = rval - gval; midval = bval; } else { /* b > r > g */ del = bval - gval; midval = rval; } } else { /* gval >= rval */ if (rval > bval) { /* g > r > b */ del = gval - bval; midval = rval; } else if (gval > bval) { /* g > b > r */ del = gval - rval; midval = bval; } else { /* b > g > r */ del = bval - rval; midval = gval; } } if (del > delta) { /* assign to color */ octindex = rtab[rval] | gtab[gval] | btab[bval]; carray[octindex]++; rarray[octindex] += rval; garray[octindex] += gval; barray[octindex] += bval; if (depth == 4) SET_DATA_QBIT(lined, j, octindex); else /* depth == 8 */ SET_DATA_BYTE(lined, j, octindex); } else { /* assign to grayscale */ val = size + tabval[midval]; if (depth == 4) SET_DATA_QBIT(lined, j, val); else /* depth == 8 */ SET_DATA_BYTE(lined, j, val); } } } /* Average the colors in each bin and reset the colormap */ for (i = 0; i < size; i++) { if (carray[i] > 0) { rarray[i] /= carray[i]; garray[i] /= carray[i]; barray[i] /= carray[i]; pixcmapResetColor(cmap, i, rarray[i], garray[i], barray[i]); } } FREE(carray); FREE(rarray); FREE(garray); FREE(barray); FREE(rtab); FREE(gtab); FREE(btab); FREE(tabval); return pixd; } /*-------------------------------------------------------------------------* * Fixed partition octcube quantization with 256 cells * *-------------------------------------------------------------------------*/ /*! * pixFixedOctcubeQuant256() * * Input: pixs (32 bpp; 24-bit color) * ditherflag (1 for dithering; 0 for no dithering) * Return: pixd (8 bit with colormap), or null on error * * This simple 1-pass color quantization works by breaking the * color space into 256 pieces, with 3 bits quantized for each of * red and green, and 2 bits quantized for blue. We shortchange * blue because the eye is least sensitive to blue. This * division of the color space is into two levels of octrees, * followed by a further division by 4 (not 8), where both * blue octrees have been combined in the third level. * * The color map is generated from the 256 color centers by * taking the representative color to be the center of the * cell volume. This gives a maximum error in the red and * green values of 16 levels, and a maximum error in the * blue sample of 32 levels. * * Each pixel in the 24-bit color image is placed in its containing * cell, given by the relevant MSbits of the red, green and blue * samples. An error-diffusion dithering is performed on each * color sample to give the appearance of good average local color. * Dithering is required; without it, the contouring and visible * color errors are very bad. * * I originally implemented this algorithm in two passes, * where the first pass was used to compute the weighted average * of each sample in each pre-allocated region of color space. * The idea was to use these centroids in the dithering algorithm * of the second pass, to reduce the average error that was * being dithered. However, with dithering, there is * virtually no difference, so there is no reason to make the * first pass. Consequently, this 1-pass version just assigns * the pixels to the centers of the pre-allocated cells. * We use dithering to spread the difference between the sample * value and the location of the center of the cell. For speed * and simplicity, we use integer dithering and propagate only * to the right, down, and diagonally down-right, with ratios * 3/8, 3/8 and 1/4, respectively. The results should be nearly * as good, and a bit faster, with propagation only to the right * and down. * * The algorithm is very fast, because there is no search, * only fast generation of the cell index for each pixel. * We use a simple mapping from the three 8 bit rgb samples * to the 8 bit cell index; namely, (r7 r6 r5 g7 g6 g5 b7 b6). * This is not in an octcube format, but it doesn't matter. * There are no storage requirements. We could keep a * running average of the center of each sample in each * cluster, rather than using the center of the cell, but * this is just extra work, esp. with dithering. * * This method gives surprisingly good results with dithering. * However, without dithering, the loss of color accuracy is * evident in regions that are very light or that have subtle * blending of colors. */ PIX * pixFixedOctcubeQuant256(PIX *pixs, l_int32 ditherflag) { l_uint8 index; l_int32 rval, gval, bval; l_int32 w, h, wpls, wpld, i, j, cindex; l_uint32 *rtab, *gtab, *btab; l_int32 *itab; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixFixedOctcubeQuant256"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); /* Do not dither if image is very small */ pixGetDimensions(pixs, &w, &h, NULL); if (w < MIN_DITHER_SIZE && h < MIN_DITHER_SIZE && ditherflag == 1) { L_INFO("Small image: dithering turned off\n", procName); ditherflag = 0; } /* Find the centers of the 256 cells, each of which represents * the 3 MSBits of the red and green components, and the * 2 MSBits of the blue component. This gives a mapping * from a "cube index" to the rgb values. Save all 256 * rgb values of these centers in a colormap. * For example, to get the red color of the cell center, * you take the 3 MSBits of to the index and add the * offset to the center of the cell, which is 0x10. */ cmap = pixcmapCreate(8); for (cindex = 0; cindex < 256; cindex++) { rval = (cindex & 0xe0) | 0x10; gval = ((cindex << 3) & 0xe0) | 0x10; bval = ((cindex << 6) & 0xc0) | 0x20; pixcmapAddColor(cmap, rval, gval, bval); } /* Make output 8 bpp palette image */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Set dest pix values to colortable indices */ if (ditherflag == 0) { /* no dithering */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); index = (rval & 0xe0) | ((gval >> 3) & 0x1c) | (bval >> 6); SET_DATA_BYTE(lined, j, index); } } } else { /* ditherflag == 1 */ /* Set up conversion tables from rgb directly to the colormap * index. However, the dithering function expects these tables * to generate an octcube index (+1), and the table itab[] to * convert to the colormap index. So we make a trivial * itab[], that simply compensates for the -1 in * pixDitherOctindexWithCmap(). No cap is required on * the propagated difference. */ rtab = (l_uint32 *)CALLOC(256, sizeof(l_uint32)); gtab = (l_uint32 *)CALLOC(256, sizeof(l_uint32)); btab = (l_uint32 *)CALLOC(256, sizeof(l_uint32)); itab = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { rtab[i] = i & 0xe0; gtab[i] = (i >> 3) & 0x1c; btab[i] = i >> 6; itab[i] = i + 1; } pixDitherOctindexWithCmap(pixs, pixd, rtab, gtab, btab, itab, FIXED_DIF_CAP); FREE(rtab); FREE(gtab); FREE(btab); FREE(itab); } return pixd; } /*---------------------------------------------------------------------------* * Nearly exact quantization for images with few colors * *---------------------------------------------------------------------------*/ /*! * pixFewColorsOctcubeQuant1() * * Input: pixs (32 bpp rgb) * level (significant bits for each of RGB; valid in [1...6]) * Return: pixd (quantized to octcube) or null on error * * Notes: * (1) Generates a colormapped image, where the colormap table values * are the averages of all pixels that are found in the octcube. * (2) This fails if there are more than 256 colors (i.e., more * than 256 occupied octcubes). * (3) Often level 3 (512 octcubes) will succeed because not more * than half of them are occupied with 1 or more pixels. * (4) The depth of the result, which is either 2, 4 or 8 bpp, * is the minimum required to hold the number of colors that * are found. * (5) This can be useful for quantizing orthographically generated * images such as color maps, where there may be more than 256 colors * because of aliasing or jpeg artifacts on text or lines, but * there are a relatively small number of solid colors. Then, * use with level = 3 can often generate a compact and accurate * representation of the original RGB image. For this purpose, * it is better than pixFewColorsOctcubeQuant2(), because it * uses the average value of pixels in the octcube rather * than the first found pixel. It is also simpler to use, * because it generates the histogram internally. */ PIX * pixFewColorsOctcubeQuant1(PIX *pixs, l_int32 level) { l_int32 w, h, wpls, wpld, i, j, depth, size, ncolors, index; l_int32 rval, gval, bval; l_int32 *carray, *rarray, *garray, *barray; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad, *pspixel; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixFewColorsOctcubeQuant1"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (level < 1 || level > 6) return (PIX *)ERROR_PTR("invalid level", procName, NULL); if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (PIX *)ERROR_PTR("size not returned", procName, NULL); if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return (PIX *)ERROR_PTR("tables not made", procName, NULL); if ((carray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("carray not made", procName, NULL); if ((rarray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("rarray not made", procName, NULL); if ((garray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("garray not made", procName, NULL); if ((barray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("barray not made", procName, NULL); /* Place the pixels in octcube leaves. */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = NULL; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; carray[octindex]++; rarray[octindex] += rval; garray[octindex] += gval; barray[octindex] += bval; } } /* Find the number of different colors */ for (i = 0, ncolors = 0; i < size; i++) { if (carray[i] > 0) ncolors++; } if (ncolors > 256) { L_WARNING("%d colors found; more than 256\n", procName, ncolors); goto array_cleanup; } if (ncolors <= 4) depth = 2; else if (ncolors <= 16) depth = 4; else depth = 8; /* Average the colors in each octcube leaf and add to colormap table; * then use carray to hold the colormap index + 1 */ cmap = pixcmapCreate(depth); for (i = 0, index = 0; i < size; i++) { if (carray[i] > 0) { rarray[i] /= carray[i]; garray[i] /= carray[i]; barray[i] /= carray[i]; pixcmapAddColor(cmap, rarray[i], garray[i], barray[i]); carray[i] = index + 1; /* to avoid storing 0 */ index++; } } pixd = pixCreate(w, h, depth); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pspixel = lines + j; extractRGBValues(*pspixel, &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; switch (depth) { case 2: SET_DATA_DIBIT(lined, j, carray[octindex] - 1); break; case 4: SET_DATA_QBIT(lined, j, carray[octindex] - 1); break; case 8: SET_DATA_BYTE(lined, j, carray[octindex] - 1); break; default: L_WARNING("shouldn't get here\n", procName); } } } array_cleanup: FREE(carray); FREE(rarray); FREE(garray); FREE(barray); FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*! * pixFewColorsOctcubeQuant2() * * Input: pixs (32 bpp rgb) * level (of octcube indexing, for histogram: 3, 4, 5, 6) * na (histogram of pixel occupation in octree leaves at * given level) * ncolors (number of occupied octree leaves at given level) * &nerrors ( num of pixels not exactly * represented in the colormap) * Return: pixd (2, 4 or 8 bpp with colormap), or null on error * * Notes: * (1) Generates a colormapped image, where the colormap table values * are the averages of all pixels that are found in the octcube. * (2) This fails if there are more than 256 colors (i.e., more * than 256 occupied octcubes). * (3) Often level 3 (512 octcubes) will succeed because not more * than half of them are occupied with 1 or more pixels. * (4) For an image with not more than 256 colors, it is unlikely * that two pixels of different color will fall in the same * octcube at level = 4. However it is possible, and this * function optionally returns @nerrors, the number of pixels * where, because more than one color is in the same octcube, * the pixel color is not exactly reproduced in the colormap. * The colormap for an occupied leaf of the octree contains * the color of the first pixel encountered in that octcube. * (5) This differs from pixFewColorsOctcubeQuant1(), which also * requires not more than 256 occupied leaves, but represents * the color of each leaf by an average over the pixels in * that leaf. This also requires precomputing the histogram * of occupied octree leaves, which is generated using * pixOctcubeHistogram(). * (6) This is used in pixConvertRGBToColormap() for images that * are determined, by their histogram, to have relatively few * colors. This typically happens with orthographically * produced images (as oppopsed to natural images), where * it is expected that most of the pixels within a leaf * octcube have exactly the same color, and quantization to * that color is lossless. */ PIX * pixFewColorsOctcubeQuant2(PIX *pixs, l_int32 level, NUMA *na, l_int32 ncolors, l_int32 *pnerrors) { l_int32 w, h, wpls, wpld, i, j, nerrors; l_int32 ncubes, depth, cindex, oval; l_int32 rval, gval, bval; l_int32 *octarray; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad, *ppixel; l_uint32 *colorarray; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixFewColorsOctcubeQuant2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (level < 3 || level > 6) return (PIX *)ERROR_PTR("level not in {4, 5, 6}", procName, NULL); if (ncolors > 256) return (PIX *)ERROR_PTR("ncolors > 256", procName, NULL); if (pnerrors) *pnerrors = UNDEF; /* Represent the image with a set of leaf octcubes * at 'level', one for each color. */ if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return (PIX *)ERROR_PTR("tables not made", procName, NULL); /* Determine the output depth from the number of colors */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (ncolors <= 4) depth = 2; else if (ncolors <= 16) depth = 4; else /* ncolors <= 256 */ depth = 8; if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* The octarray will give a ptr from the octcube to the colorarray */ ncubes = numaGetCount(na); if ((octarray = (l_int32 *)CALLOC(ncubes, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("octarray not made", procName, NULL); /* The colorarray will hold the colors of the first pixel * that lands in the leaf octcube. After filling, it is * used to generate the colormap. */ if ((colorarray = (l_uint32 *)CALLOC(ncolors + 1, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("colorarray not made", procName, NULL); /* For each pixel, get the octree index for its leaf octcube. * Check if a pixel has already been found in this octcube. * - If not yet found, save that color in the colorarray * and save the cindex in the octarray. * - If already found, compare the pixel color with the * color in the colorarray, and note if it differs. * Then set the dest pixel value to the cindex - 1, which * will be the cmap index for this color. */ cindex = 1; /* start with 1 */ nerrors = 0; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { ppixel = lines + j; extractRGBValues(*ppixel, &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; oval = octarray[octindex]; if (oval == 0) { octarray[octindex] = cindex; colorarray[cindex] = *ppixel; setPixelLow(lined, j, depth, cindex - 1); cindex++; } else { /* already have seen this color; is it unique? */ setPixelLow(lined, j, depth, oval - 1); if (colorarray[oval] != *ppixel) nerrors++; } } } if (pnerrors) *pnerrors = nerrors; #if DEBUG_FEW_COLORS fprintf(stderr, "ncubes = %d, ncolors = %d\n", ncubes, ncolors); for (i = 0; i < ncolors; i++) fprintf(stderr, "color[%d] = %x\n", i, colorarray[i + 1]); #endif /* DEBUG_FEW_COLORS */ /* Make the colormap. */ cmap = pixcmapCreate(depth); for (i = 0; i < ncolors; i++) { ppixel = colorarray + i + 1; extractRGBValues(*ppixel, &rval, &gval, &bval); pixcmapAddColor(cmap, rval, gval, bval); } pixSetColormap(pixd, cmap); FREE(octarray); FREE(colorarray); FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*! * pixFewColorsOctcubeQuantMixed() * * Input: pixs (32 bpp rgb) * level (significant octcube bits for each of RGB; * valid in [1...6]; use 0 for default) * darkthresh (threshold near black; if the lightest component * is below this, the pixel is not considered to * be gray or color; uses 0 for default) * lightthresh (threshold near white; if the darkest component * is above this, the pixel is not considered to * be gray or color; use 0 for default) * diffthresh (thresh for the max difference between component * values; for differences below this, the pixel * is considered to be gray; use 0 for default) * considered gray; use 0 for default) * minfract (min fraction of pixels for gray histo bin; * use 0.0 for default) * maxspan (max size of gray histo bin; use 0 for default) * Return: pixd (8 bpp, quantized to octcube for pixels that are * not gray; gray pixels are quantized separately * over the full gray range), or null on error * * Notes: * (1) First runs pixFewColorsOctcubeQuant1(). If this succeeds, * it separates the color from gray(ish) entries in the cmap, * and re-quantizes the gray pixels. The result has some pixels * in color and others in gray. * (2) This fails if there are more than 256 colors (i.e., more * than 256 occupied octcubes in the color quantization). * (3) Level 3 (512 octcubes) will usually succeed because not more * than half of them are occupied with 1 or more pixels. * (4) This uses the criterion from pixColorFraction() for deciding * if a colormap entry is color; namely, if the color components * are not too close to either black or white, and the maximum * difference between component values equals or exceeds a threshold. * (5) For quantizing the gray pixels, it uses a histogram-based * method where input parameters determining the buckets are * the minimum population fraction and the maximum allowed size. * (6) Recommended input parameters are: * @level: 3 or 4 (3 is default) * @darkthresh: 20 * @lightthresh: 244 * @diffthresh: 20 * @minfract: 0.05 * @maxspan: 15 * These numbers are intended to be conservative (somewhat over- * sensitive) in color detection, It's usually better to pay * extra with octcube quantization of a grayscale image than * to use grayscale quantization on an image that has some * actual color. Input 0 on any of these to get the default. * (7) This can be useful for quantizing orthographically generated * images such as color maps, where there may be more than 256 colors * because of aliasing or jpeg artifacts on text or lines, but * there are a relatively small number of solid colors. It usually * gives results that are better than pixOctcubeQuantMixedWithGray(), * both in size and appearance. But it is a bit slower. */ PIX * pixFewColorsOctcubeQuantMixed(PIX *pixs, l_int32 level, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_float32 minfract, l_int32 maxspan) { l_int32 i, j, w, h, wplc, wplm, wpld, ncolors, index; l_int32 rval, gval, bval, val, minval, maxval; l_int32 *lut; l_uint32 *datac, *datam, *datad, *linec, *linem, *lined; PIX *pixc, *pixm, *pixg, *pixd; PIXCMAP *cmap, *cmapd; PROCNAME("pixFewColorsOctcubeQuantMixed"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (level <= 0) level = 3; if (level > 6) return (PIX *)ERROR_PTR("invalid level", procName, NULL); if (darkthresh <= 0) darkthresh = 20; if (lightthresh <= 0) lightthresh = 244; if (diffthresh <= 0) diffthresh = 20; if (minfract <= 0.0) minfract = 0.05; if (maxspan <= 2) maxspan = 15; /* Start with a simple fixed octcube quantizer. */ if ((pixc = pixFewColorsOctcubeQuant1(pixs, level)) == NULL) return (PIX *)ERROR_PTR("too many colors", procName, NULL); /* Identify and save color entries in the colormap. Set up a LUT * that returns -1 for any gray pixel. */ cmap = pixGetColormap(pixc); ncolors = pixcmapGetCount(cmap); cmapd = pixcmapCreate(8); lut = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) lut[i] = -1; for (i = 0, index = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); if (minval > lightthresh) /* near white */ continue; maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval < darkthresh) /* near black */ continue; /* Use the max diff between components to test for color */ if (maxval - minval >= diffthresh) { pixcmapAddColor(cmapd, rval, gval, bval); lut[i] = index; index++; } } /* Generate dest pix with just the color pixels set to their * colormap indices. At the same time, make a 1 bpp mask * of the non-color pixels */ pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 8); pixSetColormap(pixd, cmapd); pixm = pixCreate(w, h, 1); datac = pixGetData(pixc); datam = pixGetData(pixm); datad = pixGetData(pixd); wplc = pixGetWpl(pixc); wplm = pixGetWpl(pixm); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linec = datac + i * wplc; linem = datam + i * wplm; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linec, j); if (lut[val] == -1) SET_DATA_BIT(linem, j); else SET_DATA_BYTE(lined, j, lut[val]); } } /* Fill in the gray values. Use a grayscale version of pixs * as input, along with the mask over the actual gray pixels. */ pixg = pixConvertTo8(pixs, 0); pixGrayQuantFromHisto(pixd, pixg, pixm, minfract, maxspan); FREE(lut); pixDestroy(&pixc); pixDestroy(&pixm); pixDestroy(&pixg); return pixd; } /*---------------------------------------------------------------------------* * Fixed partition octcube quantization with RGB output * *---------------------------------------------------------------------------*/ /*! * pixFixedOctcubeQuantGenRGB() * * Input: pixs (32 bpp rgb) * level (significant bits for each of r,g,b) * Return: pixd (rgb; quantized to octcube centers), or null on error * * Notes: * (1) Unlike the other color quantization functions, this one * generates an rgb image. * (2) The pixel values are quantized to the center of each octcube * (at the specified level) containing the pixel. They are * not quantized to the average of the pixels in that octcube. */ PIX * pixFixedOctcubeQuantGenRGB(PIX *pixs, l_int32 level) { l_int32 w, h, wpls, wpld, i, j; l_int32 rval, gval, bval; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; PROCNAME("pixFixedOctcubeQuantGenRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (level < 1 || level > 6) return (PIX *)ERROR_PTR("level not in {1,...6}", procName, NULL); if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return (PIX *)ERROR_PTR("tables not made", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 32); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; getRGBFromOctcube(octindex, level, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, lined + j); } } FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*------------------------------------------------------------------* * Color quantize RGB image using existing colormap * *------------------------------------------------------------------*/ /*! * pixQuantFromCmap() * * Input: pixs (8 bpp grayscale without cmap, or 32 bpp rgb) * cmap (to quantize to; insert copy into dest pix) * mindepth (minimum depth of pixd: can be 2, 4 or 8 bpp) * level (of octcube used for finding nearest color in cmap) * metric (L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE) * Return: pixd (2, 4 or 8 bpp, colormapped), or null on error * * Notes: * (1) This is a top-level wrapper for quantizing either grayscale * or rgb images to a specified colormap. * (2) The actual output depth is constrained by @mindepth and * by the number of colors in @cmap. * (3) For grayscale, @level and @metric are ignored. * (4) If the cmap has color and pixs is grayscale, the color is * removed from the cmap before quantizing pixs. */ PIX * pixQuantFromCmap(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric) { l_int32 d; PROCNAME("pixQuantFromCmap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); d = pixGetDepth(pixs); if (d == 8) return pixGrayQuantFromCmap(pixs, cmap, mindepth); else if (d == 32) return pixOctcubeQuantFromCmap(pixs, cmap, mindepth, level, metric); else return (PIX *)ERROR_PTR("d not 8 or 32 bpp", procName, NULL); } /*! * pixOctcubeQuantFromCmap() * * Input: pixs (32 bpp rgb) * cmap (to quantize to; insert copy into dest pix) * mindepth (minimum depth of pixd: can be 2, 4 or 8 bpp) * level (of octcube used for finding nearest color in cmap) * metric (L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE) * Return: pixd (2, 4 or 8 bpp, colormapped), or null on error * * Notes: * (1) In typical use, we are doing an operation, such as * interpolative scaling, on a colormapped pix, where it is * necessary to remove the colormap before the operation. * We then want to re-quantize the RGB result using the same * colormap. * (2) The level is used to divide the color space into octcubes. * Each input pixel is, in effect, placed at the center of an * octcube at the given level, and it is mapped into the * exact color (given in the colormap) that is the closest * to that location. We need to know that distance, for each color * in the colormap. The higher the level of the octtree, the smaller * the octcubes in the color space, and hence the more accurately * we can determine the closest color in the colormap; however, * the size of the LUT, which is the total number of octcubes, * increases by a factor of 8 for each increase of 1 level. * The time required to acquire a level 4 mapping table, which has * about 4K entries, is less than 1 msec, so that is the * recommended minimum size to be used. At that size, the * octcubes have their centers 16 units apart in each (r,g,b) * direction. If two colors are in the same octcube, the one * closest to the center will always be chosen. The maximum * error for any component occurs when the correct color is * at a cube corner and there is an incorrect color just inside * the cube next to the opposite corner, giving an error of * 14 units (out of 256) for each component. Using a level 5 * mapping table reduces the maximum error to 6 units. * (3) Typically you should use the Euclidean metric, because the * resulting voronoi cells (which are generated using the actual * colormap values as seeds) are convex for Euclidean distance * but not for Manhattan distance. In terms of the octcubes, * convexity of the voronoi cells means that if the 8 corners * of any cube (of which the octcubes are special cases) * are all within a cell, then every point in the cube will * lie within the cell. * (4) The depth of the output pixd is equal to the maximum of * (a) @mindepth and (b) the minimum (2, 4 or 8 bpp) necessary * to hold the indices in the colormap. * (5) We build a mapping table from octcube to colormap index so * that this function can run in a time (otherwise) independent * of the number of colors in the colormap. This avoids a * brute-force search for the closest colormap color to each * pixel in the image. * (6) This is similar to the function pixAssignToNearestColor() * used for color segmentation. * (7) Except for very small images or when using level > 4, * it takes very little time to generate the tables, * compared to the generation of the colormapped dest pix, * so one would not typically use the low-level version. */ PIX * pixOctcubeQuantFromCmap(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 level, l_int32 metric) { l_int32 *cmaptab; l_uint32 *rtab, *gtab, *btab; PIX *pixd; PROCNAME("pixOctcubeQuantFromCmap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); if (level < 1 || level > 6) return (PIX *)ERROR_PTR("level not in {1...6}", procName, NULL); if (metric != L_MANHATTAN_DISTANCE && metric != L_EUCLIDEAN_DISTANCE) return (PIX *)ERROR_PTR("invalid metric", procName, NULL); /* Set up the tables to map rgb to the nearest colormap index */ if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return (PIX *)ERROR_PTR("index tables not made", procName, NULL); if ((cmaptab = pixcmapToOctcubeLUT(cmap, level, metric)) == NULL) return (PIX *)ERROR_PTR("cmaptab not made", procName, NULL); pixd = pixOctcubeQuantFromCmapLUT(pixs, cmap, mindepth, cmaptab, rtab, gtab, btab); FREE(cmaptab); FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*! * pixOctcubeQuantFromCmapLUT() * * Input: pixs (32 bpp rgb) * cmap (to quantize to; insert copy into dest pix) * mindepth (minimum depth of pixd: can be 2, 4 or 8 bpp) * cmaptab (table mapping from octindex to colormap index) * rtab, gtab, btab (tables mapping from RGB to octindex) * Return: pixd (2, 4 or 8 bpp, colormapped), or null on error * * Notes: * (1) See the notes in the higher-level function * pixOctcubeQuantFromCmap(). The octcube level for * the generated octree is specified there, along with * the distance metric for determining the closest * color in the colormap to each octcube. * (2) If the colormap, level and metric information have already * been used to construct the set of mapping tables, * this low-level function can be used directly (i.e., * independently of pixOctcubeQuantFromCmap()) to build * a colormapped pix that uses the specified colormap. */ PIX * pixOctcubeQuantFromCmapLUT(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth, l_int32 *cmaptab, l_uint32 *rtab, l_uint32 *gtab, l_uint32 *btab) { l_int32 i, j, w, h, depth, wpls, wpld; l_int32 rval, gval, bval, index; l_uint32 octindex; l_uint32 *lines, *lined, *datas, *datad; PIX *pixd; PIXCMAP *cmapc; PROCNAME("pixOctcubeQuantFromCmapLUT"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); if (!rtab || !gtab || !btab || !cmaptab) return (PIX *)ERROR_PTR("tables not all defined", procName, NULL); /* Init dest pix (with minimum bpp depending on cmap) */ pixcmapGetMinDepth(cmap, &depth); depth = L_MAX(depth, mindepth); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w, h, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmapc = pixcmapCopy(cmap); pixSetColormap(pixd, cmapc); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); /* Insert the colormap index of the color nearest to the input pixel */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); /* Map from rgb to octcube index */ getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &octindex); /* Map from octcube index to nearest colormap index */ index = cmaptab[octindex]; if (depth == 2) SET_DATA_DIBIT(lined, j, index); else if (depth == 4) SET_DATA_QBIT(lined, j, index); else /* depth == 8 */ SET_DATA_BYTE(lined, j, index); } } return pixd; } /*---------------------------------------------------------------------------* * Generation of octcube histogram * *---------------------------------------------------------------------------*/ /*! * pixOctcubeHistogram() * * Input: pixs (32 bpp rgb) * level (significant bits for each of RGB; valid in [1...6]) * &ncolors ( number of occupied cubes) * Return: numa (histogram of color pixels, or null on error) * * Notes: * (1) Input NULL for &ncolors to prevent computation and return value. */ NUMA * pixOctcubeHistogram(PIX *pixs, l_int32 level, l_int32 *pncolors) { l_int32 size, i, j, w, h, wpl, ncolors, val; l_int32 rval, gval, bval; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *data, *line; l_float32 *array; NUMA *na; PROCNAME("pixOctcubeHistogram"); if (pncolors) *pncolors = 0; if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (NUMA *)ERROR_PTR("pixs not 32 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); wpl = pixGetWpl(pixs); data = pixGetData(pixs); if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (NUMA *)ERROR_PTR("size not returned", procName, NULL); if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return (NUMA *)ERROR_PTR("tables not made", procName, NULL); if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, size); array = numaGetFArray(na, L_NOCOPY); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; #if DEBUG_OCTINDEX if ((level == 1 && octindex > 7) || (level == 2 && octindex > 63) || (level == 3 && octindex > 511) || (level == 4 && octindex > 4097) || (level == 5 && octindex > 32783) || (level == 6 && octindex > 262271)) { fprintf(stderr, "level = %d, octindex = %d, index error!\n", level, octindex); continue; } #endif /* DEBUG_OCTINDEX */ array[octindex] += 1.0; } } if (pncolors) { for (i = 0, ncolors = 0; i < size; i++) { numaGetIValue(na, i, &val); if (val > 0) ncolors++; } *pncolors = ncolors; } FREE(rtab); FREE(gtab); FREE(btab); return na; } /*------------------------------------------------------------------* * Get filled octcube table from colormap * *------------------------------------------------------------------*/ /*! * pixcmapToOctcubeLUT() * * Input: cmap * level (significant bits for each of RGB; valid in [1...6]) * metric (L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE) * Return: tab[2**(3 * level)] * * Notes: * (1) This function is used to quickly find the colormap color * that is closest to any rgb color. It is used to assign * rgb colors to an existing colormap. It can be very expensive * to search through the entire colormap for the closest color * to each pixel. Instead, we first set up this table, which is * populated by the colormap index nearest to each octcube * color. Then we go through the image; for each pixel, * do two table lookups: first to generate the octcube index * from rgb and second to use this table to read out the * colormap index. * (2) Do a slight modification for white and black. For level = 4, * each octcube size is 16. The center of the whitest octcube * is at (248, 248, 248), which is closer to 242 than 255. * Consequently, any gray color between 242 and 254 will * be selected, even if white (255, 255, 255) exists. This is * typically not optimal, because the original color was * likely white. Therefore, if white exists in the colormap, * use it for any rgb color that falls into the most white octcube. * Do the similar thing for black. * (3) Here are the actual function calls for quantizing to a * specified colormap: * - first make the tables that map from rgb --> octcube index * makeRGBToIndexTables() * - then for each pixel: * * use the tables to get the octcube index * getOctcubeIndexFromRGB() * * use this table to get the nearest color in the colormap * cmap_index = tab[index] * (4) Distance can be either manhattan or euclidean. * (5) In typical use, level = 4 gives reasonable results, and * level = 5 is slightly better. When this function is used * for color segmentation, there are typically a small number * of colors and the number of levels can be small (e.g., level = 3). */ l_int32 * pixcmapToOctcubeLUT(PIXCMAP *cmap, l_int32 level, l_int32 metric) { l_int32 i, k, size, ncolors, mindist, dist, mincolor, index; l_int32 rval, gval, bval; /* color at center of the octcube */ l_int32 *rmap, *gmap, *bmap, *tab; PROCNAME("pixcmapToOctcubeLUT"); if (!cmap) return (l_int32 *)ERROR_PTR("cmap not defined", procName, NULL); if (level < 1 || level > 6) return (l_int32 *)ERROR_PTR("level not in {1...6}", procName, NULL); if (metric != L_MANHATTAN_DISTANCE && metric != L_EUCLIDEAN_DISTANCE) return (l_int32 *)ERROR_PTR("invalid metric", procName, NULL); if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return (l_int32 *)ERROR_PTR("size not returned", procName, NULL); if ((tab = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("tab not allocated", procName, NULL); ncolors = pixcmapGetCount(cmap); pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); /* Assign based on the closest octcube center to the cmap color */ for (i = 0; i < size; i++) { getRGBFromOctcube(i, level, &rval, &gval, &bval); mindist = 1000000; mincolor = 0; /* irrelevant init */ for (k = 0; k < ncolors; k++) { if (metric == L_MANHATTAN_DISTANCE) { dist = L_ABS(rval - rmap[k]) + L_ABS(gval - gmap[k]) + L_ABS(bval - bmap[k]); } else { /* L_EUCLIDEAN_DISTANCE */ dist = (rval - rmap[k]) * (rval - rmap[k]) + (gval - gmap[k]) * (gval - gmap[k]) + (bval - bmap[k]) * (bval - bmap[k]); } if (dist < mindist) { mindist = dist; mincolor = k; } } tab[i] = mincolor; } /* Reset black and white if available in the colormap. * The darkest octcube is at octindex 0. * The lightest octcube is at the max octindex. */ pixcmapGetNearestIndex(cmap, 0, 0, 0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval < 7 && gval < 7 && bval < 7) { tab[0] = index; } pixcmapGetNearestIndex(cmap, 255, 255, 255, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval > 248 && gval > 248 && bval > 248) { tab[(1 << (3 * level)) - 1] = index; } FREE(rmap); FREE(gmap); FREE(bmap); return tab; } /*------------------------------------------------------------------* * Strip out unused elements in colormap * *------------------------------------------------------------------*/ /*! * pixRemoveUnusedColors() * * Input: pixs (colormapped) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place operation. * (2) If the image doesn't have a colormap, returns without error. * (3) Unusued colors are removed from the colormap, and the * image pixels are re-numbered. */ l_int32 pixRemoveUnusedColors(PIX *pixs) { l_int32 i, j, w, h, d, nc, wpls, val, newval, index, zerofound; l_int32 rval, gval, bval; l_uint32 *datas, *lines; l_int32 *histo, *map1, *map2; PIXCMAP *cmap, *cmapd; PROCNAME("pixRemoveUnusedColors"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return 0; d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return ERROR_INT("d not in {2, 4, 8}", procName, 1); /* Find which indices are actually used */ nc = pixcmapGetCount(cmap); if ((histo = (l_int32 *)CALLOC(nc, sizeof(l_int32))) == NULL) return ERROR_INT("histo not made", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { switch (d) { case 2: val = GET_DATA_DIBIT(lines, j); break; case 4: val = GET_DATA_QBIT(lines, j); break; case 8: val = GET_DATA_BYTE(lines, j); break; default: return ERROR_INT("switch ran off end!", procName, 1); } if (val >= nc) { L_WARNING("cmap index out of bounds!\n", procName); continue; } histo[val]++; } } /* Check if there are any zeroes. If none, quit. */ zerofound = FALSE; for (i = 0; i < nc; i++) { if (histo[i] == 0) { zerofound = TRUE; break; } } if (!zerofound) { FREE(histo); return 0; } /* Generate mapping tables between indices */ if ((map1 = (l_int32 *)CALLOC(nc, sizeof(l_int32))) == NULL) return ERROR_INT("map1 not made", procName, 1); if ((map2 = (l_int32 *)CALLOC(nc, sizeof(l_int32))) == NULL) return ERROR_INT("map2 not made", procName, 1); index = 0; for (i = 0; i < nc; i++) { if (histo[i] != 0) { map1[index] = i; /* get old index from new */ map2[i] = index; /* get new index from old */ index++; } } /* Generate new colormap and attach to pixs */ cmapd = pixcmapCreate(d); for (i = 0; i < index; i++) { pixcmapGetColor(cmap, map1[i], &rval, &gval, &bval); pixcmapAddColor(cmapd, rval, gval, bval); } pixSetColormap(pixs, cmapd); /* Map pixel (index) values to new cmap */ for (i = 0; i < h; i++) { lines = datas + i * wpls; for (j = 0; j < w; j++) { switch (d) { case 2: val = GET_DATA_DIBIT(lines, j); newval = map2[val]; SET_DATA_DIBIT(lines, j, newval); break; case 4: val = GET_DATA_QBIT(lines, j); newval = map2[val]; SET_DATA_QBIT(lines, j, newval); break; case 8: val = GET_DATA_BYTE(lines, j); newval = map2[val]; SET_DATA_BYTE(lines, j, newval); break; default: return ERROR_INT("switch ran off end!", procName, 1); } } } FREE(histo); FREE(map1); FREE(map2); return 0; } /*------------------------------------------------------------------* * Find number of occupied octcubes at the specified level * *------------------------------------------------------------------*/ /*! * pixNumberOccupiedOctcubes() * * Input: pix (32 bpp) * level (of octcube) * mincount (minimum num pixels in an octcube to be counted; * -1 to not use) * minfract (minimum fract of pixels in an octcube to be * counted; -1 to not use) * &ncolors ( number of occupied octcubes) * Return: 0 if OK, 1 on error * * Notes: * (1) Exactly one of (@mincount, @minfract) must be -1, so, e.g., * if @mincount == -1, then we use @minfract. * (2) If all occupied octcubes are to count, set @mincount == 1. * Setting @minfract == 0.0 is taken to mean the same thing. */ l_int32 pixNumberOccupiedOctcubes(PIX *pix, l_int32 level, l_int32 mincount, l_float32 minfract, l_int32 *pncolors) { l_int32 i, j, w, h, d, wpl, ncolors, size, octindex; l_int32 rval, gval, bval; l_int32 *carray; l_uint32 *data, *line, *rtab, *gtab, *btab; PROCNAME("pixNumberOccupiedOctcubes"); if (!pncolors) return ERROR_INT("&ncolors not defined", procName, 1); *pncolors = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 32) return ERROR_INT("pix not 32 bpp", procName, 1); if (level < 1 || level > 6) return ERROR_INT("invalid level", procName, 1); if ((mincount < 0 && minfract < 0) || (mincount >= 0.0 && minfract >= 0.0)) return ERROR_INT("invalid mincount/minfract", procName, 1); if (mincount == 0 || minfract == 0.0) mincount = 1; else if (minfract > 0.0) mincount = L_MIN(1, (l_int32)(minfract * w * h)); if (octcubeGetCount(level, &size)) /* array size = 2 ** (3 * level) */ return ERROR_INT("size not returned", procName, 1); if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return ERROR_INT("tables not made", procName, 1); if ((carray = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return ERROR_INT("carray not made", procName, 1); /* Mark the occupied octcube leaves */ data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rval, &gval, &bval); octindex = rtab[rval] | gtab[gval] | btab[bval]; carray[octindex]++; } } /* Count them */ for (i = 0, ncolors = 0; i < size; i++) { if (carray[i] >= mincount) ncolors++; } *pncolors = ncolors; FREE(carray); FREE(rtab); FREE(gtab); FREE(btab); return 0; } leptonica-1.70/src/ccthin.c0000644000175000017500000004150312244745207013722 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ccthin.c * * PIX *pixThin() * PIX *pixThinGeneral() * PIX *pixThinExamples() */ #include "allheaders.h" /* ------------------------------------------------------------ * These sels (and their rotated counterparts) are the useful * 3x3 Sels for thinning. The notation is based on * "Connectivity-preserving morphological image transformations," * a version of which can be found at * http://www.leptonica.com/papers/conn.pdf * ------------------------------------------------------------ */ /* Sels for 4-connected thinning */ static const char *sel_4_1 = " x" "oCx" " x"; static const char *sel_4_2 = " x" "oCx" " o "; static const char *sel_4_3 = " o " "oCx" " x"; static const char *sel_4_4 = " o " "oCx" " o "; static const char *sel_4_5 = " ox" "oCx" " o "; static const char *sel_4_6 = " o " "oCx" " ox"; static const char *sel_4_7 = " xx" "oCx" " o "; static const char *sel_4_8 = " x" "oCx" "o x"; static const char *sel_4_9 = "o x" "oCx" " x"; /* Sels for 8-connected thinning */ static const char *sel_8_1 = " x " "oCx" " x "; static const char *sel_8_2 = " x " "oCx" "o "; static const char *sel_8_3 = "o " "oCx" " x "; static const char *sel_8_4 = "o " "oCx" "o "; static const char *sel_8_5 = "o x" "oCx" "o "; static const char *sel_8_6 = "o " "oCx" "o x"; static const char *sel_8_7 = " x " "oCx" "oo "; static const char *sel_8_8 = " x " "oCx" "ox "; static const char *sel_8_9 = "ox " "oCx" " x "; /* Sels for both 4 and 8-connected thinning */ static const char *sel_48_1 = " xx" "oCx" "oo "; static const char *sel_48_2 = "o x" "oCx" "o x"; #ifndef NO_CONSOLE_IO #define DEBUG_SELS 0 #endif /* ~NO_CONSOLE_IO */ /*----------------------------------------------------------------* * CC-preserving thinning * *----------------------------------------------------------------*/ /*! * pixThin() * * Input: pixs (1 bpp) * type (L_THIN_FG, L_THIN_BG) * connectivity (4 or 8) * maxiters (max number of iters allowed; use 0 to iterate * until completion) * Return: pixd, or null on error * * Notes: * (1) See "Connectivity-preserving morphological image transformations," * Dan S. Bloomberg, in SPIE Visual Communications and Image * Processing, Conference 1606, pp. 320-334, November 1991, * Boston, MA. A web version is available at * http://www.leptonica.com/papers/conn.pdf * (2) We implement here two of the best iterative * morphological thinning algorithms, for 4 c.c and 8 c.c. * Each iteration uses a mixture of parallel operations * (using several different 3x3 Sels) and serial operations. * Specifically, each thinning iteration consists of * four sequential thinnings from each of four directions. * Each of these thinnings is a parallel composite * operation, where the union of a set of HMTs are set * subtracted from the input. For 4-cc thinning, we * use 3 HMTs in parallel, and for 8-cc thinning we use 4 HMTs. * (3) A "good" thinning algorithm is one that generates a skeleton * that is near the medial axis and has neither pruned * real branches nor left extra dendritic branches. * (4) To thin the foreground, which is the usual situation, * use type == L_THIN_FG. Thickening the foreground is equivalent * to thinning the background (type == L_THIN_BG), where the * opposite connectivity gets preserved. For example, to thicken * the fg using 4-connectivity, we thin the bg using Sels that * preserve 8-connectivity. */ PIX * pixThin(PIX *pixs, l_int32 type, l_int32 connectivity, l_int32 maxiters) { PIX *pixd; SEL *sel; SELA *sela; PROCNAME("pixThin"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (type != L_THIN_FG && type != L_THIN_BG) return (PIX *)ERROR_PTR("invalid fg/bg type", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); if (maxiters == 0) maxiters = 10000; sela = selaCreate(4); if (connectivity == 4) { sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_2, 3, 3, "sel_4_2"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_3, 3, 3, "sel_4_3"); selaAddSel(sela, sel, NULL, 0); } else { /* connectivity == 8 */ sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6"); selaAddSel(sela, sel, NULL, 0); } pixd = pixThinGeneral(pixs, type, sela, maxiters); selaDestroy(&sela); return pixd; } /*! * pixThinGeneral() * * Input: pixs (1 bpp) * type (L_THIN_FG, L_THIN_BG) * sela (of Sels for parallel composite HMTs) * maxiters (max number of iters allowed; use 0 to iterate * until completion) * Return: pixd, or null on error * * Notes: * (1) See notes in pixThin(). That function chooses among * the best of the Sels for thinning. * (2) This is a general function that takes a Sela of HMTs * that are used in parallel for thinning from each * of four directions. One iteration consists of four * such parallel thins. */ PIX * pixThinGeneral(PIX *pixs, l_int32 type, SELA *sela, l_int32 maxiters) { l_int32 i, j, r, nsels, same; PIXA *pixahmt; PIX **pixhmt; /* array owned by pixahmt; do not destroy! */ PIX *pixd, *pixt; SEL *sel, *selr; PROCNAME("pixThinGeneral"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (type != L_THIN_FG && type != L_THIN_BG) return (PIX *)ERROR_PTR("invalid fg/bg type", procName, NULL); if (!sela) return (PIX *)ERROR_PTR("sela not defined", procName, NULL); if (maxiters == 0) maxiters = 10000; /* Set up array of temp pix to hold hmts */ nsels = selaGetCount(sela); pixahmt = pixaCreate(nsels); for (i = 0; i < nsels; i++) { pixt = pixCreateTemplate(pixs); pixaAddPix(pixahmt, pixt, L_INSERT); } pixhmt = pixaGetPixArray(pixahmt); if (!pixhmt) return (PIX *)ERROR_PTR("pixhmt array not made", procName, NULL); #if DEBUG_SELS pixt = selaDisplayInPix(sela, 35, 3, 15, 4); pixDisplayWithTitle(pixt, 100, 100, "allsels", 1); pixDestroy(&pixt); #endif /* DEBUG_SELS */ /* Set up initial image for fg thinning */ if (type == L_THIN_FG) pixd = pixCopy(NULL, pixs); else /* bg thinning */ pixd = pixInvert(NULL, pixs); /* Thin the fg, with up to maxiters iterations */ for (i = 0; i < maxiters; i++) { pixt = pixCopy(NULL, pixd); /* test for completion */ for (r = 0; r < 4; r++) { /* over 90 degree rotations of Sels */ for (j = 0; j < nsels; j++) { /* over individual sels in sela */ sel = selaGetSel(sela, j); /* not a copy */ selr = selRotateOrth(sel, r); pixHMT(pixhmt[j], pixd, selr); selDestroy(&selr); if (j > 0) pixOr(pixhmt[0], pixhmt[0], pixhmt[j]); /* accum result */ } pixSubtract(pixd, pixd, pixhmt[0]); /* remove result */ } pixEqual(pixd, pixt, &same); pixDestroy(&pixt); if (same) { L_INFO("%d iterations to completion\n", procName, i); break; } } if (type == L_THIN_BG) pixInvert(pixd, pixd); pixaDestroy(&pixahmt); return pixd; } /*! * pixThinExamples() * * Input: pixs (1 bpp) * type (L_THIN_FG, L_THIN_BG) * index (into specific examples; valid 1-9; see notes) * maxiters (max number of iters allowed; use 0 to iterate * until completion) * selfile ( filename for output sel display) * Return: pixd, or null on error * * Notes: * (1) See notes in pixThin(). The examples are taken from * the paper referenced there. * (2) Here we allow specific sets of HMTs to be used in * parallel for thinning from each of four directions. * One iteration consists of four such parallel thins. * (3) The examples are indexed as follows: * Thinning (e.g., run to completion): * index = 1 sel_4_1, sel_4_5, sel_4_6 * index = 2 sel_4_1, sel_4_7, sel_4_7_rot * index = 3 sel_48_1, sel_48_1_rot, sel_48_2 * index = 4 sel_8_2, sel_8_3, sel_48_2 * index = 5 sel_8_1, sel_8_5, sel_8_6 * index = 6 sel_8_2, sel_8_3, sel_8_8, sel_8_9 * index = 7 sel_8_5, sel_8_6, sel_8_7, sel_8_7_rot * Thickening: * index = 8 sel_4_2, sel_4_3 (e.g,, do just a few iterations) * index = 9 sel_8_4 (e.g., do just a few iterations) */ PIX * pixThinExamples(PIX *pixs, l_int32 type, l_int32 index, l_int32 maxiters, const char *selfile) { PIX *pixd, *pixt; SEL *sel; SELA *sela; PROCNAME("pixThinExamples"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (type != L_THIN_FG && type != L_THIN_BG) return (PIX *)ERROR_PTR("invalid fg/bg type", procName, NULL); if (index < 1 || index > 9) return (PIX *)ERROR_PTR("invalid index", procName, NULL); if (maxiters == 0) maxiters = 10000; switch(index) { case 1: sela = selaCreate(3); sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_5, 3, 3, "sel_4_5"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_6, 3, 3, "sel_4_6"); selaAddSel(sela, sel, NULL, 0); break; case 2: sela = selaCreate(3); sel = selCreateFromString(sel_4_1, 3, 3, "sel_4_1"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_7, 3, 3, "sel_4_7"); selaAddSel(sela, sel, NULL, 0); sel = selRotateOrth(sel, 1); selaAddSel(sela, sel, "sel_4_7_rot", 0); break; case 3: sela = selaCreate(3); sel = selCreateFromString(sel_48_1, 3, 3, "sel_48_1"); selaAddSel(sela, sel, NULL, 0); sel = selRotateOrth(sel, 1); selaAddSel(sela, sel, "sel_48_1_rot", 0); sel = selCreateFromString(sel_48_2, 3, 3, "sel_48_2"); selaAddSel(sela, sel, NULL, 0); break; case 4: sela = selaCreate(3); sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_48_2, 3, 3, "sel_48_2"); selaAddSel(sela, sel, NULL, 0); break; case 5: sela = selaCreate(3); sel = selCreateFromString(sel_8_1, 3, 3, "sel_8_1"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6"); selaAddSel(sela, sel, NULL, 0); break; case 6: sela = selaCreate(4); sel = selCreateFromString(sel_8_2, 3, 3, "sel_8_2"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_3, 3, 3, "sel_8_3"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_8, 3, 3, "sel_8_8"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_9, 3, 3, "sel_8_9"); selaAddSel(sela, sel, NULL, 0); break; case 7: sela = selaCreate(4); sel = selCreateFromString(sel_8_5, 3, 3, "sel_8_5"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_6, 3, 3, "sel_8_6"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_8_7, 3, 3, "sel_8_7"); selaAddSel(sela, sel, NULL, 0); sel = selRotateOrth(sel, 1); selaAddSel(sela, sel, "sel_8_7_rot", 0); break; case 8: /* thicken for this one; just a few iterations */ sela = selaCreate(2); sel = selCreateFromString(sel_4_2, 3, 3, "sel_4_2"); selaAddSel(sela, sel, NULL, 0); sel = selCreateFromString(sel_4_3, 3, 3, "sel_4_3"); selaAddSel(sela, sel, NULL, 0); pixt = pixThinGeneral(pixs, type, sela, maxiters); pixd = pixRemoveBorderConnComps(pixt, 4); pixDestroy(&pixt); break; case 9: /* thicken for this one; just a few iterations */ sela = selaCreate(1); sel = selCreateFromString(sel_8_4, 3, 3, "sel_8_4"); selaAddSel(sela, sel, NULL, 0); pixt = pixThinGeneral(pixs, type, sela, maxiters); pixd = pixRemoveBorderConnComps(pixt, 4); pixDestroy(&pixt); break; default: return (PIX *)ERROR_PTR("invalid index", procName, NULL); } if (index <= 7) pixd = pixThinGeneral(pixs, type, sela, maxiters); /* Optionally display the sels */ if (selfile) { pixt = selaDisplayInPix(sela, 35, 3, 15, 4); pixWrite(selfile, pixt, IFF_PNG); pixDestroy(&pixt); } selaDestroy(&sela); return pixd; } leptonica-1.70/src/fmorphgen.1.c0000644000175000017500000002374011707052573014601 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * * PIX *pixMorphDwa_1() * PIX *pixFMorphopGen_1() */ #include #include "allheaders.h" PIX *pixMorphDwa_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); PIX *pixFMorphopGen_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname); l_int32 fmorphopgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 58; static char SEL_NAMES[][80] = { "sel_2h", "sel_3h", "sel_4h", "sel_5h", "sel_6h", "sel_7h", "sel_8h", "sel_9h", "sel_10h", "sel_11h", "sel_12h", "sel_13h", "sel_14h", "sel_15h", "sel_20h", "sel_21h", "sel_25h", "sel_30h", "sel_31h", "sel_35h", "sel_40h", "sel_41h", "sel_45h", "sel_50h", "sel_51h", "sel_2v", "sel_3v", "sel_4v", "sel_5v", "sel_6v", "sel_7v", "sel_8v", "sel_9v", "sel_10v", "sel_11v", "sel_12v", "sel_13v", "sel_14v", "sel_15v", "sel_20v", "sel_21v", "sel_25v", "sel_30v", "sel_31v", "sel_35v", "sel_40v", "sel_41v", "sel_45v", "sel_50v", "sel_51v", "sel_2", "sel_3", "sel_4", "sel_5", "sel_2dp", "sel_2dm", "sel_5dp", "sel_5dm"}; /*! * pixMorphDwa_1() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This simply adds a border, calls the appropriate * pixFMorphopGen_*(), and removes the border. * See the notes for that function. * (2) The size of the border depends on the operation * and the boundary conditions. */ PIX * pixMorphDwa_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixMorphDwa_1"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); pixt2 = pixFMorphopGen_1(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * pixFMorphopGen_1() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This is a dwa operation, and the Sels must be limited in * size to not more than 31 pixels about the origin. * (2) A border of appropriate size (32 pixels, or 64 pixels * for safe closing with asymmetric b.c.) must be added before * this function is called. * (3) This handles all required setting of the border pixels * before erosion and dilation. * (4) The closing operation is safe; no pixels can be removed * near the boundary. */ PIX * pixFMorphopGen_1(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; PROCNAME("pixFMorphopGen_1"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); fmorphopgen_low_1(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); fmorphopgen_low_1(datat, w, h, wpls, datas, wpls, index+1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); fmorphopgen_low_1(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); fmorphopgen_low_1(datad, w, h, wpld, datat, wpls, index+1); } pixDestroy(&pixt); } return pixd; } leptonica-1.70/src/bardecode.c0000644000175000017500000007722612244215451014366 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bardecode.c * * Dispatcher * char *barcodeDispatchDecoder() * * Format Determination * static l_int32 barcodeFindFormat() * l_int32 barcodeFormatIsSupported() * static l_int32 barcodeVerifyFormat() * * Decode 2 of 5 * static char *barcodeDecode2of5() * * Decode Interleaved 2 of 5 * static char *barcodeDecodeI2of5() * * Decode Code 93 * static char *barcodeDecode93() * * Decode Code 39 * static char *barcodeDecode39() * * Decode Codabar * static char *barcodeDecodeCodabar() * * Decode UPC-A * static char *barcodeDecodeUpca() * * Decode EAN 13 * static char *barcodeDecodeEan13() */ #include #include "allheaders.h" #include "readbarcode.h" static l_int32 barcodeFindFormat(char *barstr); static l_int32 barcodeVerifyFormat(char *barstr, l_int32 format, l_int32 *pvalid, l_int32 *preverse); static char *barcodeDecode2of5(char *barstr, l_int32 debugflag); static char *barcodeDecodeI2of5(char *barstr, l_int32 debugflag); static char *barcodeDecode93(char *barstr, l_int32 debugflag); static char *barcodeDecode39(char *barstr, l_int32 debugflag); static char *barcodeDecodeCodabar(char *barstr, l_int32 debugflag); static char *barcodeDecodeUpca(char *barstr, l_int32 debugflag); static char *barcodeDecodeEan13(char *barstr, l_int32 first, l_int32 debugflag); #ifndef NO_CONSOLE_IO #define DEBUG_CODES 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * Decoding dispatcher * *------------------------------------------------------------------------*/ /*! * barcodeDispatchDecoder() * * Input: barstr (string of integers in set {1,2,3,4} of bar widths) * format (L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ...) * debugflag (use 1 to generate debug output) * Return: data (string of decoded barcode data), or null on error */ char * barcodeDispatchDecoder(char *barstr, l_int32 format, l_int32 debugflag) { char *data = NULL; PROCNAME("barcodeDispatchDecoder"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); debugflag = FALSE; /* not used yet */ if (format == L_BF_ANY) format = barcodeFindFormat(barstr); if (format == L_BF_CODE2OF5) data = barcodeDecode2of5(barstr, debugflag); else if (format == L_BF_CODEI2OF5) data = barcodeDecodeI2of5(barstr, debugflag); else if (format == L_BF_CODE93) data = barcodeDecode93(barstr, debugflag); else if (format == L_BF_CODE39) data = barcodeDecode39(barstr, debugflag); else if (format == L_BF_CODABAR) data = barcodeDecodeCodabar(barstr, debugflag); else if (format == L_BF_UPCA) data = barcodeDecodeUpca(barstr, debugflag); else if (format == L_BF_EAN13) data = barcodeDecodeEan13(barstr, 0, debugflag); else return (char *)ERROR_PTR("format not implemented", procName, NULL); return data; } /*------------------------------------------------------------------------* * Barcode format determination * *------------------------------------------------------------------------*/ /*! * barcodeFindFormat() * * Input: barstr (of barcode widths, in set {1,2,3,4}) * Return: format (for barcode), or L_BF_UNKNOWN if not recognized */ static l_int32 barcodeFindFormat(char *barstr) { l_int32 i, format, valid; PROCNAME("barcodeFindFormat"); if (!barstr) return ERROR_INT("barstr not defined", procName, L_BF_UNKNOWN); for (i = 0; i < NumSupportedBarcodeFormats; i++) { format = SupportedBarcodeFormat[i]; barcodeVerifyFormat(barstr, format, &valid, NULL); if (valid) { L_INFO("Barcode format: %s\n", procName, SupportedBarcodeFormatName[i]); return format; } } return L_BF_UNKNOWN; } /*! * barcodeFormatIsSupported() * * Input: format * Return: 1 if format is one of those supported; 0 otherwise * */ l_int32 barcodeFormatIsSupported(l_int32 format) { l_int32 i; for (i = 0; i < NumSupportedBarcodeFormats; i++) { if (format == SupportedBarcodeFormat[i]) return 1; } return 0; } /*! * barcodeVerifyFormat() * * Input: barstr (of barcode widths, in set {1,2,3,4}) * format (L_BF_CODEI2OF5, L_BF_CODE93, ...) * &valid ( 0 if not valid, 1 and 2 if valid) * &reverse ( 1 if reversed; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) If valid == 1, the barcode is of the given format in the * forward order; if valid == 2, it is backwards. * (2) If the barcode needs to be reversed to read it, and &reverse * is provided, a 1 is put into @reverse. * (3) Add to this as more formats are supported. */ static l_int32 barcodeVerifyFormat(char *barstr, l_int32 format, l_int32 *pvalid, l_int32 *preverse) { char *revbarstr; l_int32 i, start, len, stop, mid; PROCNAME("barcodeVerifyFormat"); if (!pvalid) return ERROR_INT("barstr not defined", procName, 1); *pvalid = 0; if (preverse) *preverse = 0; if (!barstr) return ERROR_INT("barstr not defined", procName, 1); switch (format) { case L_BF_CODE2OF5: start = !strncmp(barstr, Code2of5[C25_START], 3); len = strlen(barstr); stop = !strncmp(&barstr[len - 5], Code2of5[C25_STOP], 5); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, Code2of5[C25_START], 3); stop = !strncmp(&revbarstr[len - 5], Code2of5[C25_STOP], 5); FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODEI2OF5: start = !strncmp(barstr, CodeI2of5[CI25_START], 4); len = strlen(barstr); stop = !strncmp(&barstr[len - 3], CodeI2of5[CI25_STOP], 3); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, CodeI2of5[CI25_START], 4); stop = !strncmp(&revbarstr[len - 3], CodeI2of5[CI25_STOP], 3); FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODE93: start = !strncmp(barstr, Code93[C93_START], 6); len = strlen(barstr); stop = !strncmp(&barstr[len - 7], Code93[C93_STOP], 6); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, Code93[C93_START], 6); stop = !strncmp(&revbarstr[len - 7], Code93[C93_STOP], 6); FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODE39: start = !strncmp(barstr, Code39[C39_START], 9); len = strlen(barstr); stop = !strncmp(&barstr[len - 9], Code39[C39_STOP], 9); if (start && stop) { *pvalid = 1; } else { revbarstr = stringReverse(barstr); start = !strncmp(revbarstr, Code39[C39_START], 9); stop = !strncmp(&revbarstr[len - 9], Code39[C39_STOP], 9); FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_CODABAR: start = stop = 0; len = strlen(barstr); for (i = 16; i <= 19; i++) /* any of these will do */ start += !strncmp(barstr, Codabar[i], 7); for (i = 16; i <= 19; i++) /* ditto */ stop += !strncmp(&barstr[len - 7], Codabar[i], 7); if (start && stop) { *pvalid = 1; } else { start = stop = 0; revbarstr = stringReverse(barstr); for (i = 16; i <= 19; i++) start += !strncmp(revbarstr, Codabar[i], 7); for (i = 16; i <= 19; i++) stop += !strncmp(&revbarstr[len - 7], Codabar[i], 7); FREE(revbarstr); if (start && stop) { *pvalid = 1; if (preverse) *preverse = 1; } } break; case L_BF_UPCA: case L_BF_EAN13: len = strlen(barstr); if (len == 59) { start = !strncmp(barstr, Upca[UPCA_START], 3); mid = !strncmp(&barstr[27], Upca[UPCA_MID], 5); stop = !strncmp(&barstr[len - 3], Upca[UPCA_STOP], 3); if (start && mid && stop) *pvalid = 1; } break; default: return ERROR_INT("format not supported", procName, 1); } return 0; } /*------------------------------------------------------------------------* * Code 2 of 5 * *------------------------------------------------------------------------*/ /*! * barcodeDecode2of5() * * Input: barstr (of widths, in set {1, 2}) * debugflag * Return: data (string of digits), or null if none found or on error * * Notes: * (1) Ref: http://en.wikipedia.org/wiki/Two-out-of-five_code (Note: * the codes given here are wrong!) * http://morovia.com/education/symbology/code25.asp * (2) This is a very low density encoding for the 10 digits. * Each digit is encoded with 5 black bars, of which 2 are wide * and 3 are narrow. No information is carried in the spaces * between the bars, which are all equal in width, represented by * a "1" in our encoding. * (3) The mapping from the sequence of five bar widths to the * digit is identical to the mapping used by the interleaved * 2 of 5 code. The start code is 21211, representing two * wide bars and a narrow bar, and the interleaved "1" spaces * are explicit. The stop code is 21112. For all codes * (including start and stop), the trailing space "1" is * implicit -- there is no reason to represent it in the * Code2of5[] array. */ static char * barcodeDecode2of5(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[10]; l_int32 valid, reverse, i, j, len, error, ndigits, start, found; PROCNAME("barcodeDecodeI2of5"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODE2OF5, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in 2of5 format", procName, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len - 11) % 10 != 0) return (char *)ERROR_PTR("size not divisible by 10: invalid 2of5 code", procName, NULL); error = FALSE; ndigits = (len - 11) / 10; data = (char *)CALLOC(ndigits + 1, sizeof(char)); memset(code, 0, 10); for (i = 0; i < ndigits; i++) { start = 6 + 10 * i; for (j = 0; j < 9; j++) code[j] = vbarstr[start + j]; if (debugflag) fprintf(stderr, "code: %s\n", code); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code, Code2of5[j])) { data[i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } FREE(vbarstr); if (error) { FREE(data); return (char *)ERROR_PTR("error in decoding", procName, NULL); } return data; } /*------------------------------------------------------------------------* * Interleaved Code 2 of 5 * *------------------------------------------------------------------------*/ /*! * barcodeDecodeI2of5() * * Input: barstr (of widths, in set {1, 2}) * debugflag * Return: data (string of digits), or null if none found or on error * * Notes: * (1) Ref: http://en.wikipedia.org/wiki/Interleaved_2_of_5 * (2) This always encodes an even number of digits. * The start code is 1111; the stop code is 211. */ static char * barcodeDecodeI2of5(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code1[6], code2[6]; l_int32 valid, reverse, i, j, len, error, npairs, start, found; PROCNAME("barcodeDecodeI2of5"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODEI2OF5, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in i2of5 format", procName, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len - 7) % 10 != 0) return (char *)ERROR_PTR("size not divisible by 10: invalid I2of5 code", procName, NULL); error = FALSE; npairs = (len - 7) / 10; data = (char *)CALLOC(2 * npairs + 1, sizeof(char)); memset(code1, 0, 6); memset(code2, 0, 6); for (i = 0; i < npairs; i++) { start = 4 + 10 * i; for (j = 0; j < 5; j++) { code1[j] = vbarstr[start + 2 * j]; code2[j] = vbarstr[start + 2 * j + 1]; } if (debugflag) fprintf(stderr, "code1: %s, code2: %s\n", code1, code2); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code1, CodeI2of5[j])) { data[2 * i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code2, CodeI2of5[j])) { data[2 * i + 1] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } FREE(vbarstr); if (error) { FREE(data); return (char *)ERROR_PTR("error in decoding", procName, NULL); } return data; } /*------------------------------------------------------------------------* * Code 93 * *------------------------------------------------------------------------*/ /*! * barcodeDecode93() * * Input: barstr (of widths, in set {1, 2, 3, 4}) * debugflag * Return: data (string of digits), or null if none found or on error * * Notes: * (1) Ref: http://en.wikipedia.org/wiki/Code93 * http://morovia.com/education/symbology/code93.asp * (2) Each symbol has 3 black and 3 white bars. * The start and stop codes are 111141; the stop code then is * terminated with a final (1) bar. * (3) The last two codes are check codes. We are checking them * for correctness, and issuing a warning on failure. Should * probably not return any data on failure. */ static char * barcodeDecode93(char *barstr, l_int32 debugflag) { const char *checkc, *checkk; char *data, *vbarstr; char code[7]; l_int32 valid, reverse, i, j, len, error, nsymb, start, found, sum; l_int32 *index; PROCNAME("barcodeDecode93"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODE93, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in code93 format", procName, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size; skip the first 6 and last 7 bars. */ len = strlen(vbarstr); if ((len - 13) % 6 != 0) return (char *)ERROR_PTR("size not divisible by 6: invalid code 93", procName, NULL); /* Decode the symbols */ nsymb = (len - 13) / 6; data = (char *)CALLOC(nsymb + 1, sizeof(char)); index = (l_int32 *)CALLOC(nsymb, sizeof(l_int32)); memset(code, 0, 7); error = FALSE; for (i = 0; i < nsymb; i++) { start = 6 + 6 * i; for (j = 0; j < 6; j++) code[j] = vbarstr[start + j]; if (debugflag) fprintf(stderr, "code: %s\n", code); found = FALSE; for (j = 0; j < C93_START; j++) { if (!strcmp(code, Code93[j])) { data[i] = Code93Val[j]; index[i] = j; found = TRUE; break; } } if (!found) error = TRUE; } FREE(vbarstr); if (error) { FREE(index); FREE(data); return (char *)ERROR_PTR("error in decoding", procName, NULL); } /* Do check sums. For character "C", use only the * actual data in computing the sum. For character "K", * use the actual data plus the check character "C". */ sum = 0; for (i = 0; i < nsymb - 2; i++) /* skip the "C" and "K" */ sum += ((i % 20) + 1) * index[nsymb - 3 - i]; if (data[nsymb - 2] != Code93Val[sum % 47]) L_WARNING("Error for check C\n", procName); if (debugflag) { checkc = Code93[sum % 47]; fprintf(stderr, "checkc = %s\n", checkc); } sum = 0; for (i = 0; i < nsymb - 1; i++) /* skip the "K" */ sum += ((i % 15) + 1) * index[nsymb - 2 - i]; if (data[nsymb - 1] != Code93Val[sum % 47]) L_WARNING("Error for check K\n", procName); if (debugflag) { checkk = Code93[sum % 47]; fprintf(stderr, "checkk = %s\n", checkk); } /* Remove the two check codes from the output */ data[nsymb - 2] = '\0'; FREE(index); return data; } /*------------------------------------------------------------------------* * Code 39 * *------------------------------------------------------------------------*/ /*! * barcodeDecode39() * * Input: barstr (of widths, in set {1, 2}) * debugflag * Return: data (string of digits), or null if none found or on error * * Notes: * (1) Ref: http://en.wikipedia.org/wiki/Code39 * http://morovia.com/education/symbology/code39.asp * (2) Each symbol has 5 black and 4 white bars. * The start and stop codes are 121121211 (the asterisk) * (3) This decoder was contributed by Roger Hyde. */ static char * barcodeDecode39(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[10]; l_int32 valid, reverse, i, j, len, error, nsymb, start, found; PROCNAME("barcodeDecode39"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODE39, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in code39 format", procName, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len + 1) % 10 != 0) return (char *)ERROR_PTR("size+1 not divisible by 10: invalid code 39", procName, NULL); /* Decode the symbols */ nsymb = (len - 19) / 10; data = (char *)CALLOC(nsymb + 1, sizeof(char)); memset(code, 0, 10); error = FALSE; for (i = 0; i < nsymb; i++) { start = 10 + 10 * i; for (j = 0; j < 9; j++) code[j] = vbarstr[start + j]; if (debugflag) fprintf(stderr, "code: %s\n", code); found = FALSE; for (j = 0; j < C39_START; j++) { if (!strcmp(code, Code39[j])) { data[i] = Code39Val[j]; found = TRUE; break; } } if (!found) error = TRUE; } FREE(vbarstr); if (error) { FREE(data); return (char *)ERROR_PTR("error in decoding", procName, NULL); } return data; } /*------------------------------------------------------------------------* * Codabar * *------------------------------------------------------------------------*/ /*! * barcodeDecodeCodabar() * * Input: barstr (of widths, in set {1, 2}) * debugflag * Return: data (string of digits), or null if none found or on error * * Notes: * (1) Ref: http://en.wikipedia.org/wiki/Codabar * http://morovia.com/education/symbology/codabar.asp * (2) Each symbol has 4 black and 3 white bars. They represent the * 10 digits, and optionally 6 other characters. The start and * stop codes can be any of four (typically denoted A,B,C,D). */ static char * barcodeDecodeCodabar(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[8]; l_int32 valid, reverse, i, j, len, error, nsymb, start, found; PROCNAME("barcodeDecodeCodabar"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); /* Verify format; reverse if necessary */ barcodeVerifyFormat(barstr, L_BF_CODABAR, &valid, &reverse); if (!valid) return (char *)ERROR_PTR("barstr not in codabar format", procName, NULL); if (reverse) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Verify size */ len = strlen(vbarstr); if ((len + 1) % 8 != 0) return (char *)ERROR_PTR("size+1 not divisible by 8: invalid codabar", procName, NULL); /* Decode the symbols */ nsymb = (len - 15) / 8; data = (char *)CALLOC(nsymb + 1, sizeof(char)); memset(code, 0, 8); error = FALSE; for (i = 0; i < nsymb; i++) { start = 8 + 8 * i; for (j = 0; j < 7; j++) code[j] = vbarstr[start + j]; if (debugflag) fprintf(stderr, "code: %s\n", code); found = FALSE; for (j = 0; j < 16; j++) { if (!strcmp(code, Codabar[j])) { data[i] = CodabarVal[j]; found = TRUE; break; } } if (!found) error = TRUE; } FREE(vbarstr); if (error) { FREE(data); return (char *)ERROR_PTR("error in decoding", procName, NULL); } return data; } /*------------------------------------------------------------------------* * Code UPC-A * *------------------------------------------------------------------------*/ /*! * barcodeDecodeUpca() * * Input: barstr (of widths, in set {1, 2, 3, 4}) * debugflag * Return: data (string of digits), or null if none found or on error * * Notes: * (1) Ref: http://en.wikipedia.org/wiki/UniversalProductCode * http://morovia.com/education/symbology/upc-a.asp * (2) Each symbol has 2 black and 2 white bars, and encodes a digit. * The start and stop codes are 111 and 111. There are a total of * 30 black bars, encoding 12 digits in two sets of 6, with * 2 black bars separating the sets. * (3) The last digit is a check digit. We check for correctness, and * issue a warning on failure. Should probably not return any * data on failure. */ static char * barcodeDecodeUpca(char *barstr, l_int32 debugflag) { char *data, *vbarstr; char code[5]; l_int32 valid, i, j, len, error, start, found, sum, checkdigit; PROCNAME("barcodeDecodeUpca"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); /* Verify format; reverse has no meaning here -- we must test both */ barcodeVerifyFormat(barstr, L_BF_UPCA, &valid, NULL); if (!valid) return (char *)ERROR_PTR("barstr not in UPC-A format", procName, NULL); /* Verify size */ len = strlen(barstr); if (len != 59) return (char *)ERROR_PTR("size not 59; invalid UPC-A barcode", procName, NULL); /* Check the first digit. If invalid, reverse the string. */ memset(code, 0, 5); for (i = 0; i < 4; i++) code[i] = barstr[i + 3]; found = FALSE; for (i = 0; i < 10; i++) { if (!strcmp(code, Upca[i])) { found = TRUE; break; } } if (found == FALSE) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Decode the 12 symbols */ data = (char *)CALLOC(13, sizeof(char)); memset(code, 0, 5); error = FALSE; for (i = 0; i < 12; i++) { if (i < 6) start = 3 + 4 * i; else start = 32 + 4 * (i - 6); for (j = 0; j < 4; j++) code[j] = vbarstr[start + j]; if (debugflag) fprintf(stderr, "code: %s\n", code); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code, Upca[j])) { data[i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } FREE(vbarstr); if (error) { FREE(data); return (char *)ERROR_PTR("error in decoding", procName, NULL); } /* Calculate the check digit (data[11]). */ sum = 0; for (i = 0; i < 12; i += 2) /* "even" digits */ sum += 3 * (data[i] - 0x30); for (i = 1; i < 11; i += 2) /* "odd" digits */ sum += (data[i] - 0x30); checkdigit = sum % 10; if (checkdigit) /* not 0 */ checkdigit = 10 - checkdigit; if (checkdigit + 0x30 != data[11]) L_WARNING("Error for UPC-A check character\n", procName); return data; } /*------------------------------------------------------------------------* * Code EAN-13 * *------------------------------------------------------------------------*/ /*! * barcodeDecodeEan13() * * Input: barstr (of widths, in set {1, 2, 3, 4}) * first (first digit: 0 - 9) * debugflag * Return: data (string of digits), or null if none found or on error * * Notes: * (1) Ref: http://en.wikipedia.org/wiki/UniversalProductCode * http://morovia.com/education/symbology/ean-13.asp * (2) The encoding is essentially the same as UPC-A, except * there are 13 digits in total, of which 12 are encoded * by bars (as with UPC-A) and the 13th is a leading digit * that determines the encoding of the next 6 digits, * selecting each digit from one of two tables. * encoded in the bars (as with UPC-A). If the first digit * is 0, the encoding is identical to UPC-A. * (3) As with UPC-A, the last digit is a check digit. * (4) For now, we assume the first digit is input to this function. * Eventually, we will read it by pattern matching. * * TODO: fix this for multiple tables, depending on the value of @first */ static char * barcodeDecodeEan13(char *barstr, l_int32 first, l_int32 debugflag) { char *data, *vbarstr; char code[5]; l_int32 valid, i, j, len, error, start, found, sum, checkdigit; PROCNAME("barcodeDecodeEan13"); if (!barstr) return (char *)ERROR_PTR("barstr not defined", procName, NULL); /* Verify format. You can't tell the orientation by the start * and stop codes, but you can by the location of the digits. * Use the UPCA verifier for EAN 13 -- it is identical. */ barcodeVerifyFormat(barstr, L_BF_UPCA, &valid, NULL); if (!valid) return (char *)ERROR_PTR("barstr not in EAN 13 format", procName, NULL); /* Verify size */ len = strlen(barstr); if (len != 59) return (char *)ERROR_PTR("size not 59; invalid EAN 13 barcode", procName, NULL); /* Check the first digit. If invalid, reverse the string. */ memset(code, 0, 5); for (i = 0; i < 4; i++) code[i] = barstr[i + 3]; found = FALSE; for (i = 0; i < 10; i++) { if (!strcmp(code, Upca[i])) { found = TRUE; break; } } if (found == FALSE) vbarstr = stringReverse(barstr); else vbarstr = stringNew(barstr); /* Decode the 12 symbols */ data = (char *)CALLOC(13, sizeof(char)); memset(code, 0, 5); error = FALSE; for (i = 0; i < 12; i++) { if (i < 6) start = 3 + 4 * i; else start = 32 + 4 * (i - 6); for (j = 0; j < 4; j++) code[j] = vbarstr[start + j]; if (debugflag) fprintf(stderr, "code: %s\n", code); found = FALSE; for (j = 0; j < 10; j++) { if (!strcmp(code, Upca[j])) { data[i] = 0x30 + j; found = TRUE; break; } } if (!found) error = TRUE; } FREE(vbarstr); if (error) { FREE(data); return (char *)ERROR_PTR("error in decoding", procName, NULL); } /* Calculate the check digit (data[11]). */ sum = 0; for (i = 0; i < 12; i += 2) /* "even" digits */ sum += 3 * (data[i] - 0x30); for (i = 1; i < 12; i += 2) /* "odd" digits */ sum += (data[i] - 0x30); checkdigit = sum % 10; if (checkdigit) /* not 0 */ checkdigit = 10 - checkdigit; if (checkdigit + 0x30 != data[11]) L_WARNING("Error for EAN-13 check character\n", procName); return data; } leptonica-1.70/src/pngiostub.c0000644000175000017500000001060611765441336014467 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pngiostub.c * * Stubs for pngio.c functions */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if !HAVE_LIBPNG /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamPng(FILE *fp) { return (PIX * )ERROR_PTR("function not present", "pixReadStreamPng", NULL); } /* ----------------------------------------------------------------------*/ l_int32 readHeaderPng(const char *filename, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { return ERROR_INT("function not present", "readHeaderPng", 1); } /* ----------------------------------------------------------------------*/ l_int32 freadHeaderPng(FILE *fp, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { return ERROR_INT("function not present", "freadHeaderPng", 1); } /* ----------------------------------------------------------------------*/ l_int32 sreadHeaderPng(const l_uint8 *data, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { return ERROR_INT("function not present", "sreadHeaderPng", 1); } /* ----------------------------------------------------------------------*/ l_int32 fgetPngResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", "fgetPngResolution", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWritePng(const char *filename, PIX *pix, l_float32 gamma) { return ERROR_INT("function not present", "pixWritePng", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamPng(FILE *fp, PIX *pix, l_float32 gamma) { return ERROR_INT("function not present", "pixWriteStreamPng", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixSetZlibCompression(PIX *pix, l_int32 compval) { return ERROR_INT("function not present", "pixSetZlibCompression", 1); } /* ----------------------------------------------------------------------*/ void l_pngSetReadStrip16To8(l_int32 flag) { L_ERROR("function not present", "l_pngSetReadStrip16To8"); return; } /* ----------------------------------------------------------------------*/ PIX * pixReadMemPng(const l_uint8 *cdata, size_t size) { return (PIX * )ERROR_PTR("function not present", "pixReadMemPng", NULL); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemPng(l_uint8 **pdata, size_t *psize, PIX *pix, l_float32 gamma) { return ERROR_INT("function not present", "pixWriteMemPng", 1); } /* --------------------------------------------*/ #endif /* !HAVE_LIBPNG */ /* --------------------------------------------*/ leptonica-1.70/src/classapp.c0000644000175000017500000010051512265645132014256 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * classapp.c * * Top-level jb2 correlation and rank-hausdorff * * l_int32 jbCorrelation() * l_int32 jbRankHaus() * * Extract and classify words in textline order * * JBCLASSER *jbWordsInTextlines() * l_int32 pixGetWordsInTextlines() * l_int32 pixGetWordBoxesInTextlines() * * Use word bounding boxes to compare page images * * NUMAA *boxaExtractSortedPattern() * l_int32 numaaCompareImagesByBoxes() * static l_int32 testLineAlignmentX() * static l_int32 countAlignedMatches() * static void printRowIndices() */ #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 512; static const l_int32 JB_WORDS_MIN_WIDTH = 5; /* pixels */ static const l_int32 JB_WORDS_MIN_HEIGHT = 3; /* pixels */ /* Static comparison functions */ static l_int32 testLineAlignmentX(NUMA *na1, NUMA *na2, l_int32 shiftx, l_int32 delx, l_int32 nperline); static l_int32 countAlignedMatches(NUMA *nai1, NUMA *nai2, NUMA *nasx, NUMA *nasy, l_int32 n1, l_int32 n2, l_int32 delx, l_int32 dely, l_int32 nreq, l_int32 *psame, l_int32 debugflag); static void printRowIndices(l_int32 *index1, l_int32 n1, l_int32 *index2, l_int32 n2); /*------------------------------------------------------------------* * Top-level jb2 correlation and rank-hausdorff * *------------------------------------------------------------------*/ /*! * jbCorrelation() * * Input: dirin (directory of input images) * thresh (typically ~0.8) * weight (typically ~0.6) * components (JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS) * rootname (for output files) * firstpage (0-based) * npages (use 0 for all pages in dirin) * renderflag (1 to render from templates; 0 to skip) * Return: 0 if OK, 1 on error * * Notes: * (1) The images must be 1 bpp. If they are not, you can convert * them using convertFilesTo1bpp(). * (2) See prog/jbcorrelation for generating more output (e.g., * for debugging) */ l_int32 jbCorrelation(const char *dirin, l_float32 thresh, l_float32 weight, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag) { char filename[L_BUF_SIZE]; l_int32 nfiles, i, numpages; JBDATA *data; JBCLASSER *classer; PIX *pix; PIXA *pixa; SARRAY *safiles; PROCNAME("jbCorrelation"); if (!dirin) return ERROR_INT("dirin not defined", procName, 1); if (!rootname) return ERROR_INT("rootname not defined", procName, 1); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return ERROR_INT("components invalid", procName, 1); safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* Classify components */ classer = jbCorrelationInit(components, 0, 0, thresh, weight); jbAddPages(classer, safiles); /* Save data */ data = jbDataSave(classer); jbDataWrite(rootname, data); /* Optionally, render pages using class templates */ if (renderflag) { pixa = jbDataRender(data, FALSE); numpages = pixaGetCount(pixa); if (numpages != nfiles) fprintf(stderr, "numpages = %d, nfiles = %d, not equal!\n", numpages, nfiles); for (i = 0; i < numpages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, L_BUF_SIZE, "%s.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixa); } sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); return 0; } /*! * jbRankHaus() * * Input: dirin (directory of input images) * size (of Sel used for dilation; typ. 2) * rank (rank value of match; typ. 0.97) * components (JB_CONN_COMPS, JB_CHARACTERS, JB_WORDS) * rootname (for output files) * firstpage (0-based) * npages (use 0 for all pages in dirin) * renderflag (1 to render from templates; 0 to skip) * Return: 0 if OK, 1 on error * * Notes: * (1) See prog/jbrankhaus for generating more output (e.g., * for debugging) */ l_int32 jbRankHaus(const char *dirin, l_int32 size, l_float32 rank, l_int32 components, const char *rootname, l_int32 firstpage, l_int32 npages, l_int32 renderflag) { char filename[L_BUF_SIZE]; l_int32 nfiles, i, numpages; JBDATA *data; JBCLASSER *classer; PIX *pix; PIXA *pixa; SARRAY *safiles; PROCNAME("jbRankHaus"); if (!dirin) return ERROR_INT("dirin not defined", procName, 1); if (!rootname) return ERROR_INT("rootname not defined", procName, 1); if (components != JB_CONN_COMPS && components != JB_CHARACTERS && components != JB_WORDS) return ERROR_INT("components invalid", procName, 1); safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* Classify components */ classer = jbRankHausInit(components, 0, 0, size, rank); jbAddPages(classer, safiles); /* Save data */ data = jbDataSave(classer); jbDataWrite(rootname, data); /* Optionally, render pages using class templates */ if (renderflag) { pixa = jbDataRender(data, FALSE); numpages = pixaGetCount(pixa); if (numpages != nfiles) fprintf(stderr, "numpages = %d, nfiles = %d, not equal!\n", numpages, nfiles); for (i = 0; i < numpages; i++) { pix = pixaGetPix(pixa, i, L_CLONE); snprintf(filename, L_BUF_SIZE, "%s.%05d", rootname, i); fprintf(stderr, "filename: %s\n", filename); pixWrite(filename, pix, IFF_PNG); pixDestroy(&pix); } pixaDestroy(&pixa); } sarrayDestroy(&safiles); jbClasserDestroy(&classer); jbDataDestroy(&data); return 0; } /*------------------------------------------------------------------* * Extract and classify words in textline order * *------------------------------------------------------------------*/ /*! * jbWordsInTextlines() * * Input: dirin (directory of input pages) * reduction (1 for full res; 2 for half-res) * maxwidth (of word mask components, to be kept) * maxheight (of word mask components, to be kept) * thresh (on correlation; 0.80 is reasonable) * weight (for handling thick text; 0.6 is reasonable) * natl ( numa with textline index for each component) * firstpage (0-based) * npages (use 0 for all pages in dirin) * Return: classer (for the set of pages) * * Notes: * (1) This is a high-level function. See prog/jbwords for example * of usage. * (2) Typically, words can be found reasonably well at a resolution * of about 150 ppi. For highest accuracy, you should use 300 ppi. * Assuming that the input images are 300 ppi, use reduction = 1 * for finding words at full res, and reduction = 2 for finding * them at 150 ppi. */ JBCLASSER * jbWordsInTextlines(const char *dirin, l_int32 reduction, l_int32 maxwidth, l_int32 maxheight, l_float32 thresh, l_float32 weight, NUMA **pnatl, l_int32 firstpage, l_int32 npages) { char *fname; l_int32 nfiles, i, w, h; BOXA *boxa; JBCLASSER *classer; NUMA *nai, *natl; PIX *pix; PIXA *pixa; SARRAY *safiles; PROCNAME("jbWordsInTextlines"); if (!pnatl) return (JBCLASSER *)ERROR_PTR("&natl not defined", procName, NULL); *pnatl = NULL; if (!dirin) return (JBCLASSER *)ERROR_PTR("dirin not defined", procName, NULL); if (reduction != 1 && reduction != 2) return (JBCLASSER *)ERROR_PTR("reduction not in {1,2}", procName, NULL); safiles = getSortedPathnamesInDirectory(dirin, NULL, firstpage, npages); nfiles = sarrayGetCount(safiles); /* Classify components */ classer = jbCorrelationInit(JB_WORDS, maxwidth, maxheight, thresh, weight); classer->safiles = sarrayCopy(safiles); natl = numaCreate(0); *pnatl = natl; for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, 0); if ((pix = pixRead(fname)) == NULL) { L_WARNING("image file %d not read\n", procName, i); continue; } pixGetDimensions(pix, &w, &h, NULL); if (reduction == 1) { classer->w = w; classer->h = h; } else { /* reduction == 2 */ classer->w = w / 2; classer->h = h / 2; } pixGetWordsInTextlines(pix, reduction, JB_WORDS_MIN_WIDTH, JB_WORDS_MIN_HEIGHT, maxwidth, maxheight, &boxa, &pixa, &nai); jbAddPageComponents(classer, pix, boxa, pixa); numaJoin(natl, nai, 0, -1); pixDestroy(&pix); numaDestroy(&nai); boxaDestroy(&boxa); pixaDestroy(&pixa); } sarrayDestroy(&safiles); return classer; } /*! * pixGetWordsInTextlines() * * Input: pixs (1 bpp, typ. 300 ppi) * reduction (1 for input res; 2 for 2x reduction of input res) * minwidth, minheight (of saved components; smaller are discarded) * maxwidth, maxheight (of saved components; larger are discarded) * &boxad ( word boxes sorted in textline line order) * &pixad ( word images sorted in textline line order) * &naindex ( index of textline for each word) * Return: 0 if OK, 1 on error * * Notes: * (1) The input should be at a resolution of about 300 ppi. * The word masks and word images can be computed at either * 150 ppi or 300 ppi. For the former, set reduction = 2. * (2) The four size constraints on saved components are all * scaled by @reduction. * (3) The result are word images (and their b.b.), extracted in * textline order, at either full res or 2x reduction, * and with a numa giving the textline index for each word. * (4) The pixa and boxa interfaces should make this type of * application simple to put together. The steps are: * - optionally reduce by 2x * - generate first estimate of word masks * - get b.b. of these, and remove the small and big ones * - extract pixa of the word images, using the b.b. * - sort actual word images in textline order (2d) * - flatten them to a pixa (1d), saving the textline index * for each pix * (5) In an actual application, it may be desirable to pre-filter * the input image to remove large components, to extract * single columns of text, and to deskew them. For example, * to remove both large components and small noisy components * that can interfere with the statistics used to estimate * parameters for segmenting by words, but still retain text lines, * the following image preprocessing can be done: * Pix *pixt = pixMorphSequence(pixs, "c40.1", 0); * Pix *pixf = pixSelectBySize(pixt, 0, 60, 8, * L_SELECT_HEIGHT, L_SELECT_IF_LT, NULL); * pixAnd(pixf, pixf, pixs); // the filtered image * The closing turns text lines into long blobs, but does not * significantly increase their height. But if there are many * small connected components in a dense texture, this is likely * to generate tall components that will be eliminated in pixf. */ l_int32 pixGetWordsInTextlines(PIX *pixs, l_int32 reduction, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, PIXA **ppixad, NUMA **pnai) { l_int32 maxdil; BOXA *boxa1, *boxad; BOXAA *baa; NUMA *nai; NUMAA *naa; PIXA *pixa1, *pixad; PIX *pix1; PIXAA *paa; PROCNAME("pixGetWordsInTextlines"); if (!pboxad || !ppixad || !pnai) return ERROR_INT("&boxad, &pixad, &nai not all defined", procName, 1); *pboxad = NULL; *ppixad = NULL; *pnai = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (reduction != 1 && reduction != 2) return ERROR_INT("reduction not in {1,2}", procName, 1); if (reduction == 1) { pix1 = pixClone(pixs); maxdil = 18; } else { /* reduction == 2 */ pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); maxdil = 9; } /* Get the bounding boxes of the words from the word mask. */ pixWordBoxesByDilation(pix1, maxdil, minwidth, minheight, maxwidth, maxheight, &boxa1, NULL); /* Generate a pixa of the word images */ pixa1 = pixaCreateFromBoxa(pix1, boxa1, NULL); /* mask over each word */ /* Sort the bounding boxes of these words by line. We use the * index mapping to allow identical sorting of the pixa. */ baa = boxaSort2d(boxa1, &naa, -1, -1, 4); paa = pixaSort2dByIndex(pixa1, naa, L_CLONE); /* Flatten the word paa */ pixad = pixaaFlattenToPixa(paa, &nai, L_CLONE); boxad = pixaGetBoxa(pixad, L_COPY); *pnai = nai; *pboxad = boxad; *ppixad = pixad; pixDestroy(&pix1); pixaDestroy(&pixa1); boxaDestroy(&boxa1); boxaaDestroy(&baa); pixaaDestroy(&paa); numaaDestroy(&naa); return 0; } /*! * pixGetWordBoxesInTextlines() * * Input: pixs (1 bpp, typ. 300 ppi) * reduction (1 for input res; 2 for 2x reduction of input res) * minwidth, minheight (of saved components; smaller are discarded) * maxwidth, maxheight (of saved components; larger are discarded) * &boxad ( word boxes sorted in textline line order) * &naindex ( index of textline for each word) * Return: 0 if OK, 1 on error * * Notes: * (1) The input should be at a resolution of about 300 ppi. * The word masks can be computed at either 150 ppi or 300 ppi. * For the former, set reduction = 2. * (2) This is a special version of pixGetWordsInTextlines(), that * just finds the word boxes in line order, with a numa * giving the textline index for each word. * See pixGetWordsInTextlines() for more details. */ l_int32 pixGetWordBoxesInTextlines(PIX *pixs, l_int32 reduction, l_int32 minwidth, l_int32 minheight, l_int32 maxwidth, l_int32 maxheight, BOXA **pboxad, NUMA **pnai) { l_int32 maxdil; BOXA *boxa1; BOXAA *baa; NUMA *nai; PIX *pix1; PROCNAME("pixGetWordBoxesInTextlines"); if (pnai) *pnai = NULL; if (!pboxad) return ERROR_INT("&boxad and &nai not both defined", procName, 1); *pboxad = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (reduction != 1 && reduction != 2) return ERROR_INT("reduction not in {1,2}", procName, 1); if (reduction == 1) { pix1 = pixClone(pixs); maxdil = 18; } else { /* reduction == 2 */ pix1 = pixReduceRankBinaryCascade(pixs, 1, 0, 0, 0); maxdil = 9; } /* Get the bounding boxes of the words from the word mask. */ pixWordBoxesByDilation(pix1, maxdil, minwidth, minheight, maxwidth, maxheight, &boxa1, NULL); /* 2D sort the bounding boxes of these words. */ baa = boxaSort2d(boxa1, NULL, 3, -5, 5); /* Flatten the boxaa, saving the boxa index for each box */ *pboxad = boxaaFlattenToBoxa(baa, &nai, L_CLONE); if (pnai) *pnai = nai; else numaDestroy(&nai); pixDestroy(&pix1); boxaDestroy(&boxa1); boxaaDestroy(&baa); return 0; } /*------------------------------------------------------------------* * Use word bounding boxes to compare page images * *------------------------------------------------------------------*/ /*! * boxaExtractSortedPattern() * * Input: boxa (typ. of word bounding boxes, in textline order) * numa (index of textline for each box in boxa) * Return: naa (numaa, where each numa represents one textline), * or null on error * * Notes: * (1) The input is expected to come from pixGetWordBoxesInTextlines(). * (2) Each numa in the output consists of an average y coordinate * of the first box in the textline, followed by pairs of * x coordinates representing the left and right edges of each * of the boxes in the textline. */ NUMAA * boxaExtractSortedPattern(BOXA *boxa, NUMA *na) { l_int32 index, nbox, row, prevrow, x, y, w, h; BOX *box; NUMA *nad; NUMAA *naa; PROCNAME("boxaExtractSortedPattern"); if (!boxa) return (NUMAA *)ERROR_PTR("boxa not defined", procName, NULL); if (!na) return (NUMAA *)ERROR_PTR("na not defined", procName, NULL); naa = numaaCreate(0); nbox = boxaGetCount(boxa); if (nbox == 0) return naa; prevrow = -1; for (index = 0; index < nbox; index++) { box = boxaGetBox(boxa, index, L_CLONE); numaGetIValue(na, index, &row); if (row > prevrow) { if (index > 0) numaaAddNuma(naa, nad, L_INSERT); nad = numaCreate(0); prevrow = row; boxGetGeometry(box, NULL, &y, NULL, &h); numaAddNumber(nad, y + h / 2); } boxGetGeometry(box, &x, NULL, &w, NULL); numaAddNumber(nad, x); numaAddNumber(nad, x + w - 1); boxDestroy(&box); } numaaAddNuma(naa, nad, L_INSERT); return naa; } /*! * numaaCompareImagesByBoxes() * * Input: naa1 (for image 1, formatted by boxaExtractSortedPattern()) * naa2 (ditto; for image 2) * nperline (number of box regions to be used in each textline) * nreq (number of complete row matches required) * maxshiftx (max allowed x shift between two patterns, in pixels) * maxshifty (max allowed y shift between two patterns, in pixels) * delx (max allowed difference in x data, after alignment) * dely (max allowed difference in y data, after alignment) * &same ( 1 if @nreq row matches are found; 0 otherwise) * debugflag (1 for debug output) * Return: 0 if OK, 1 on error * * Notes: * (1) Each input numaa describes a set of sorted bounding boxes * (sorted by textline and, within each textline, from * left to right) in the images from which they are derived. * See boxaExtractSortedPattern() for a description of the data * format in each of the input numaa. * (2) This function does an alignment between the input * descriptions of bounding boxes for two images. The * input parameter @nperline specifies the number of boxes * to consider in each line when testing for a match, and * @nreq is the required number of lines that must be well-aligned * to get a match. * (3) Testing by alignment has 3 steps: * (a) Generating the location of word bounding boxes from the * images (prior to calling this function). * (b) Listing all possible pairs of aligned rows, based on * tolerances in horizontal and vertical positions of * the boxes. Specifically, all pairs of rows are enumerated * whose first @nperline boxes can be brought into close * alignment, based on the delx parameter for boxes in the * line and within the overall the @maxshiftx and @maxshifty * constraints. * (c) Each pair, starting with the first, is used to search * for a set of @nreq - 1 other pairs that can all be aligned * with a difference in global translation of not more * than (@delx, @dely). */ l_int32 numaaCompareImagesByBoxes(NUMAA *naa1, NUMAA *naa2, l_int32 nperline, l_int32 nreq, l_int32 maxshiftx, l_int32 maxshifty, l_int32 delx, l_int32 dely, l_int32 *psame, l_int32 debugflag) { l_int32 n1, n2, i, j, nbox, y1, y2, xl1, xl2; l_int32 shiftx, shifty, match; l_int32 *line1, *line2; /* indicator for sufficient boxes in a line */ l_int32 *yloc1, *yloc2; /* arrays of y value for first box in a line */ l_int32 *xleft1, *xleft2; /* arrays of x value for left side of first box */ NUMA *na1, *na2, *nai1, *nai2, *nasx, *nasy; PROCNAME("numaaCompareImagesByBoxes"); if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; if (!naa1) return ERROR_INT("naa1 not defined", procName, 1); if (!naa2) return ERROR_INT("naa2 not defined", procName, 1); if (nperline < 1) return ERROR_INT("nperline < 1", procName, 1); if (nreq < 1) return ERROR_INT("nreq < 1", procName, 1); n1 = numaaGetCount(naa1); n2 = numaaGetCount(naa2); if (n1 < nreq || n2 < nreq) return 0; /* Find the lines in naa1 and naa2 with sufficient boxes. * Also, find the y-values for each of the lines, and the * LH x-values of the first box in each line. */ line1 = (l_int32 *)CALLOC(n1, sizeof(l_int32)); line2 = (l_int32 *)CALLOC(n2, sizeof(l_int32)); yloc1 = (l_int32 *)CALLOC(n1, sizeof(l_int32)); yloc2 = (l_int32 *)CALLOC(n2, sizeof(l_int32)); xleft1 = (l_int32 *)CALLOC(n1, sizeof(l_int32)); xleft2 = (l_int32 *)CALLOC(n2, sizeof(l_int32)); for (i = 0; i < n1; i++) { na1 = numaaGetNuma(naa1, i, L_CLONE); numaGetIValue(na1, 0, yloc1 + i); numaGetIValue(na1, 1, xleft1 + i); nbox = (numaGetCount(na1) - 1) / 2; if (nbox >= nperline) line1[i] = 1; numaDestroy(&na1); } for (i = 0; i < n2; i++) { na2 = numaaGetNuma(naa2, i, L_CLONE); numaGetIValue(na2, 0, yloc2 + i); numaGetIValue(na2, 1, xleft2 + i); nbox = (numaGetCount(na2) - 1) / 2; if (nbox >= nperline) line2[i] = 1; numaDestroy(&na2); } /* Enumerate all possible line matches. A 'possible' line * match is one where the x and y shifts for the first box * in each line are within the maxshiftx and maxshifty * constraints, and the left and right sides of the remaining * (nperline - 1) successive boxes are within delx of each other. * The result is a set of four numas giving parameters of * each set of matching lines. */ nai1 = numaCreate(0); /* line index 1 of match */ nai2 = numaCreate(0); /* line index 2 of match */ nasx = numaCreate(0); /* shiftx for match */ nasy = numaCreate(0); /* shifty for match */ for (i = 0; i < n1; i++) { if (line1[i] == 0) continue; y1 = yloc1[i]; xl1 = xleft1[i]; na1 = numaaGetNuma(naa1, i, L_CLONE); for (j = 0; j < n2; j++) { if (line2[j] == 0) continue; y2 = yloc2[j]; if (L_ABS(y1 - y2) > maxshifty) continue; xl2 = xleft2[j]; if (L_ABS(xl1 - xl2) > maxshiftx) continue; shiftx = xl1 - xl2; /* shift to add to x2 values */ shifty = y1 - y2; /* shift to add to y2 values */ na2 = numaaGetNuma(naa2, j, L_CLONE); /* Now check if 'nperline' boxes in the two lines match */ match = testLineAlignmentX(na1, na2, shiftx, delx, nperline); if (match) { numaAddNumber(nai1, i); numaAddNumber(nai2, j); numaAddNumber(nasx, shiftx); numaAddNumber(nasy, shifty); } numaDestroy(&na2); } numaDestroy(&na1); } /* Determine if there are a sufficient number of mutually * aligned matches. Mutually aligned matches place an additional * constraint on the 'possible' matches, where the relative * shifts must not exceed the (delx, dely) distances. */ countAlignedMatches(nai1, nai2, nasx, nasy, n1, n2, delx, dely, nreq, psame, debugflag); FREE(line1); FREE(line2); FREE(yloc1); FREE(yloc2); FREE(xleft1); FREE(xleft2); numaDestroy(&nai1); numaDestroy(&nai2); numaDestroy(&nasx); numaDestroy(&nasy); return 0; } static l_int32 testLineAlignmentX(NUMA *na1, NUMA *na2, l_int32 shiftx, l_int32 delx, l_int32 nperline) { l_int32 i, xl1, xr1, xl2, xr2, diffl, diffr; PROCNAME("testLineAlignmentX"); if (!na1) return ERROR_INT("na1 not defined", procName, 1); if (!na2) return ERROR_INT("na2 not defined", procName, 1); for (i = 0; i < nperline; i++) { numaGetIValue(na1, i + 1, &xl1); numaGetIValue(na1, i + 2, &xr1); numaGetIValue(na2, i + 1, &xl2); numaGetIValue(na2, i + 2, &xr2); diffl = L_ABS(xl1 - xl2 - shiftx); diffr = L_ABS(xr1 - xr2 - shiftx); if (diffl > delx || diffr > delx) return 0; } return 1; } /* * countAlignedMatches() * Input: nai1, nai2 (numas of row pairs for matches) * nasx, nasy (numas of x and y shifts for the matches) * n1, n2 (number of rows in images 1 and 2) * delx, dely (allowed difference in shifts of the match, * compared to the reference match) * nreq (number of required aligned matches) * &same ( 1 if @nreq row matches are found; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This takes 4 input arrays giving parameters of all the * line matches. It looks for the maximum set of aligned * matches (matches with approximately the same overall shifts) * that do not use rows from either image more than once. */ static l_int32 countAlignedMatches(NUMA *nai1, NUMA *nai2, NUMA *nasx, NUMA *nasy, l_int32 n1, l_int32 n2, l_int32 delx, l_int32 dely, l_int32 nreq, l_int32 *psame, l_int32 debugflag) { l_int32 i, j, nm, shiftx, shifty, nmatch, diffx, diffy; l_int32 *ia1, *ia2, *iasx, *iasy, *index1, *index2; PROCNAME("countAlignedMatches"); if (!nai1 || !nai2 || !nasx || !nasy) return ERROR_INT("4 input numas not defined", procName, 1); if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; /* Check for sufficient aligned matches, doing a double iteration * over the set of raw matches. The row index arrays * are used to verify that the same rows in either image * are not used in more than one match. Whenever there * is a match that is properly aligned, those rows are * marked in the index arrays. */ nm = numaGetCount(nai1); /* number of matches */ if (nm < nreq) return 0; ia1 = numaGetIArray(nai1); ia2 = numaGetIArray(nai2); iasx = numaGetIArray(nasx); iasy = numaGetIArray(nasy); index1 = (l_int32 *)CALLOC(n1, sizeof(l_int32)); /* keep track of rows */ index2 = (l_int32 *)CALLOC(n2, sizeof(l_int32)); for (i = 0; i < nm; i++) { if (*psame == 1) break; /* Reset row index arrays */ memset(index1, 0, 4 * n1); memset(index2, 0, 4 * n2); nmatch = 1; index1[ia1[i]] = nmatch; /* mark these rows as taken */ index2[ia2[i]] = nmatch; shiftx = iasx[i]; /* reference shift between two rows */ shifty = iasy[i]; /* ditto */ if (nreq == 1) { *psame = 1; break; } for (j = 0; j < nm; j++) { if (j == i) continue; /* Rows must both be different from any previously seen */ if (index1[ia1[j]] > 0 || index2[ia2[j]] > 0) continue; /* Check the shift for this match */ diffx = L_ABS(shiftx - iasx[j]); diffy = L_ABS(shifty - iasy[j]); if (diffx > delx || diffy > dely) continue; /* We have a match */ nmatch++; index1[ia1[j]] = nmatch; /* mark the rows */ index2[ia2[j]] = nmatch; if (nmatch >= nreq) { *psame = 1; if (debugflag) printRowIndices(index1, n1, index2, n2); break; } } } FREE(ia1); FREE(ia2); FREE(iasx); FREE(iasy); FREE(index1); FREE(index2); return 0; } static void printRowIndices(l_int32 *index1, l_int32 n1, l_int32 *index2, l_int32 n2) { l_int32 i; fprintf(stderr, "Index1: "); for (i = 0; i < n1; i++) { if (i && (i % 20 == 0)) fprintf(stderr, "\n "); fprintf(stderr, "%3d", index1[i]); } fprintf(stderr, "\n"); fprintf(stderr, "Index2: "); for (i = 0; i < n2; i++) { if (i && (i % 20 == 0)) fprintf(stderr, "\n "); fprintf(stderr, "%3d", index2[i]); } fprintf(stderr, "\n"); return; } leptonica-1.70/src/rotate.c0000644000175000017500000005612512246237411013751 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotate.c * * General rotation about image center * PIX *pixRotate() * PIX *pixEmbedForRotation() * * General rotation by sampling * PIX *pixRotateBySampling() * * Nice (slow) rotation of 1 bpp image * PIX *pixRotateBinaryNice() * * Rotation including alpha (blend) component * PIX *pixRotateWithAlpha() * * Rotations are measured in radians; clockwise is positive. * * The general rotation pixRotate() does the best job for * rotating about the image center. For 1 bpp, it uses shear; * for others, it uses either shear or area mapping. * If requested, it expands the output image so that no pixels are lost * in the rotation, and this can be done on multiple successive shears * without expanding beyond the maximum necessary size. */ #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; static const l_float32 MIN_ANGLE_TO_ROTATE = 0.001; /* radians; ~0.06 deg */ static const l_float32 MAX_1BPP_SHEAR_ANGLE = 0.06; /* radians; ~3 deg */ static const l_float32 LIMIT_SHEAR_ANGLE = 0.35; /* radians; ~20 deg */ /*------------------------------------------------------------------* * General rotation about the center * *------------------------------------------------------------------*/ /*! * pixRotate() * * Input: pixs (1, 2, 4, 8, 32 bpp rgb) * angle (radians; clockwise is positive) * type (L_ROTATE_AREA_MAP, L_ROTATE_SHEAR, L_ROTATE_SAMPLING) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * width (original width; use 0 to avoid embedding) * height (original height; use 0 to avoid embedding) * Return: pixd, or null on error * * Notes: * (1) This is a high-level, simple interface for rotating images * about their center. * (2) For very small rotations, just return a clone. * (3) Rotation brings either white or black pixels in * from outside the image. * (4) The rotation type is adjusted if necessary for the image * depth and size of rotation angle. For 1 bpp images, we * rotate either by shear or sampling. * (5) Colormaps are removed for rotation by area mapping. * (6) The dest can be expanded so that no image pixels * are lost. To invoke expansion, input the original * width and height. For repeated rotation, use of the * original width and height allows the expansion to * stop at the maximum required size, which is a square * with side = sqrt(w*w + h*h). * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixRotate(PIX *pixs, l_float32 angle, l_int32 type, l_int32 incolor, l_int32 width, l_int32 height) { l_int32 w, h, d; l_uint32 fillval; PIX *pixt1, *pixt2, *pixt3, *pixd; PIXCMAP *cmap; PROCNAME("pixRotate"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (type != L_ROTATE_SHEAR && type != L_ROTATE_AREA_MAP && type != L_ROTATE_SAMPLING) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); /* Adjust rotation type if necessary: * - If d == 1 bpp and the angle is more than about 6 degrees, * rotate by sampling; otherwise rotate by shear. * - If d > 1, only allow shear rotation up to about 20 degrees; * beyond that, default a shear request to sampling. */ if (pixGetDepth(pixs) == 1) { if (L_ABS(angle) > MAX_1BPP_SHEAR_ANGLE) { if (type != L_ROTATE_SAMPLING) L_INFO("1 bpp, large angle; rotate by sampling\n", procName); type = L_ROTATE_SAMPLING; } else if (type != L_ROTATE_SHEAR) { L_INFO("1 bpp; rotate by shear\n", procName); type = L_ROTATE_SHEAR; } } else if (L_ABS(angle) > LIMIT_SHEAR_ANGLE && type == L_ROTATE_SHEAR) { L_INFO("large angle; rotate by sampling\n", procName); type = L_ROTATE_SAMPLING; } /* Remove colormap if we rotate by area mapping. */ cmap = pixGetColormap(pixs); if (cmap && type == L_ROTATE_AREA_MAP) pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixt1 = pixClone(pixs); cmap = pixGetColormap(pixt1); /* Otherwise, if there is a colormap and we're not embedding, * add white color if it doesn't exist. */ if (cmap && width == 0) { /* no embedding; generate @incolor */ if (incolor == L_BRING_IN_BLACK) pixcmapAddBlackOrWhite(cmap, 0, NULL); else /* L_BRING_IN_WHITE */ pixcmapAddBlackOrWhite(cmap, 1, NULL); } /* Request to embed in a larger image; do if necessary */ pixt2 = pixEmbedForRotation(pixt1, angle, incolor, width, height); /* Area mapping requires 8 or 32 bpp. If less than 8 bpp and * area map rotation is requested, convert to 8 bpp. */ d = pixGetDepth(pixt2); if (type == L_ROTATE_AREA_MAP && d < 8) pixt3 = pixConvertTo8(pixt2, FALSE); else pixt3 = pixClone(pixt2); /* Do the rotation: shear, sampling or area mapping */ pixGetDimensions(pixt3, &w, &h, &d); if (type == L_ROTATE_SHEAR) { pixd = pixRotateShearCenter(pixt3, angle, incolor); } else if (type == L_ROTATE_SAMPLING) { pixd = pixRotateBySampling(pixt3, w / 2, h / 2, angle, incolor); } else { /* rotate by area mapping */ fillval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) fillval = 255; else /* d == 32 */ fillval = 0xffffff00; } if (d == 8) pixd = pixRotateAMGray(pixt3, angle, fillval); else /* d == 32 */ pixd = pixRotateAMColor(pixt3, angle, fillval); } pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); return pixd; } /*! * pixEmbedForRotation() * * Input: pixs (1, 2, 4, 8, 32 bpp rgb) * angle (radians; clockwise is positive) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * width (original width; use 0 to avoid embedding) * height (original height; use 0 to avoid embedding) * Return: pixd, or null on error * * Notes: * (1) For very small rotations, just return a clone. * (2) Generate larger image to embed pixs if necessary, and * place the center of the input image in the center. * (3) Rotation brings either white or black pixels in * from outside the image. For colormapped images where * there is no white or black, a new color is added if * possible for these pixels; otherwise, either the * lightest or darkest color is used. In most cases, * the colormap will be removed prior to rotation. * (4) The dest is to be expanded so that no image pixels * are lost after rotation. Input of the original width * and height allows the expansion to stop at the maximum * required size, which is a square with side equal to * sqrt(w*w + h*h). * (5) For an arbitrary angle, the expansion can be found by * considering the UL and UR corners. As the image is * rotated, these move in an arc centered at the center of * the image. Normalize to a unit circle by dividing by half * the image diagonal. After a rotation of T radians, the UL * and UR corners are at points T radians along the unit * circle. Compute the x and y coordinates of both these * points and take the max of absolute values; these represent * the half width and half height of the containing rectangle. * The arithmetic is done using formulas for sin(a+b) and cos(a+b), * where b = T. For the UR corner, sin(a) = h/d and cos(a) = w/d. * For the UL corner, replace a by (pi - a), and you have * sin(pi - a) = h/d, cos(pi - a) = -w/d. The equations * given below follow directly. */ PIX * pixEmbedForRotation(PIX *pixs, l_float32 angle, l_int32 incolor, l_int32 width, l_int32 height) { l_int32 w, h, d, w1, h1, w2, h2, maxside, wnew, hnew, xoff, yoff, setcolor; l_float64 sina, cosa, fw, fh; PIX *pixd; PROCNAME("pixEmbedForRotation"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); /* Test if big enough to hold any rotation of the original image */ pixGetDimensions(pixs, &w, &h, &d); maxside = (l_int32)(sqrt((l_float64)(width * width) + (l_float64)(height * height)) + 0.5); if (w >= maxside && h >= maxside) /* big enough */ return pixClone(pixs); /* Find the new sizes required to hold the image after rotation. * Note that the new dimensions must be at least as large as those * of pixs, because we're rasterop-ing into it before rotation. */ cosa = cos(angle); sina = sin(angle); fw = (l_float64)w; fh = (l_float64)h; w1 = (l_int32)(L_ABS(fw * cosa - fh * sina) + 0.5); w2 = (l_int32)(L_ABS(-fw * cosa - fh * sina) + 0.5); h1 = (l_int32)(L_ABS(fw * sina + fh * cosa) + 0.5); h2 = (l_int32)(L_ABS(-fw * sina + fh * cosa) + 0.5); wnew = L_MAX(w, L_MAX(w1, w2)); hnew = L_MAX(h, L_MAX(h1, h2)); if ((pixd = pixCreate(wnew, hnew, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopySpp(pixd, pixs); pixCopyText(pixd, pixs); xoff = (wnew - w) / 2; yoff = (hnew - h) / 2; /* Set background to color to be rotated in */ setcolor = (incolor == L_BRING_IN_BLACK) ? L_SET_BLACK : L_SET_WHITE; pixSetBlackOrWhite(pixd, setcolor); /* Rasterop automatically handles all 4 channels for rgba */ pixRasterop(pixd, xoff, yoff, w, h, PIX_SRC, pixs, 0, 0); return pixd; } /*------------------------------------------------------------------* * General rotation by sampling * *------------------------------------------------------------------*/ /*! * pixRotateBySampling() * * Input: pixs (1, 2, 4, 8, 16, 32 bpp rgb; can be cmapped) * xcen (x value of center of rotation) * ycen (y value of center of rotation) * angle (radians; clockwise is positive) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) For very small rotations, just return a clone. * (2) Rotation brings either white or black pixels in * from outside the image. * (3) Colormaps are retained. */ PIX * pixRotateBySampling(PIX *pixs, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 incolor) { l_int32 w, h, d, i, j, x, y, xdif, ydif, wm1, hm1, wpld; l_uint32 val; l_float32 sina, cosa; l_uint32 *datad, *lined; void **lines; PIX *pixd; PROCNAME("pixRotateBySampling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("invalid depth", procName, NULL); if (L_ABS(angle) < MIN_ANGLE_TO_ROTATE) return pixClone(pixs); if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixSetBlackOrWhite(pixd, incolor); sina = sin(angle); cosa = cos(angle); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); wm1 = w - 1; hm1 = h - 1; lines = pixGetLinePtrs(pixs, NULL); /* Treat 1 bpp case specially */ if (d == 1) { for (i = 0; i < h; i++) { /* scan over pixd */ lined = datad + i * wpld; ydif = ycen - i; for (j = 0; j < w; j++) { xdif = xcen - j; x = xcen + (l_int32)(-xdif * cosa - ydif * sina); if (x < 0 || x > wm1) continue; y = ycen + (l_int32)(-ydif * cosa + xdif * sina); if (y < 0 || y > hm1) continue; if (incolor == L_BRING_IN_WHITE) { if (GET_DATA_BIT(lines[y], x)) SET_DATA_BIT(lined, j); } else { if (!GET_DATA_BIT(lines[y], x)) CLEAR_DATA_BIT(lined, j); } } } FREE(lines); return pixd; } for (i = 0; i < h; i++) { /* scan over pixd */ lined = datad + i * wpld; ydif = ycen - i; for (j = 0; j < w; j++) { xdif = xcen - j; x = xcen + (l_int32)(-xdif * cosa - ydif * sina); if (x < 0 || x > wm1) continue; y = ycen + (l_int32)(-ydif * cosa + xdif * sina); if (y < 0 || y > hm1) continue; switch (d) { case 8: val = GET_DATA_BYTE(lines[y], x); SET_DATA_BYTE(lined, j, val); break; case 32: val = GET_DATA_FOUR_BYTES(lines[y], x); SET_DATA_FOUR_BYTES(lined, j, val); break; case 2: val = GET_DATA_DIBIT(lines[y], x); SET_DATA_DIBIT(lined, j, val); break; case 4: val = GET_DATA_QBIT(lines[y], x); SET_DATA_QBIT(lined, j, val); break; case 16: val = GET_DATA_TWO_BYTES(lines[y], x); SET_DATA_TWO_BYTES(lined, j, val); break; default: return (PIX *)ERROR_PTR("invalid depth", procName, NULL); } } } FREE(lines); return pixd; } /*------------------------------------------------------------------* * Nice (slow) rotation of 1 bpp image * *------------------------------------------------------------------*/ /*! * pixRotateBinaryNice() * * Input: pixs (1 bpp) * angle (radians; clockwise is positive; about the center) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) For very small rotations, just return a clone. * (2) This does a computationally expensive rotation of 1 bpp images. * The fastest rotators (using shears or subsampling) leave * visible horizontal and vertical shear lines across which * the image shear changes by one pixel. To ameliorate the * visual effect one can introduce random dithering. One * way to do this in a not-too-random fashion is given here. * We convert to 8 bpp, do a very small blur, rotate using * linear interpolation (same as area mapping), do a * small amount of sharpening to compensate for the initial * blur, and threshold back to binary. The shear lines * are magically removed. * (3) This operation is about 5x slower than rotation by sampling. */ PIX * pixRotateBinaryNice(PIX *pixs, l_float32 angle, l_int32 incolor) { PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixd; PROCNAME("pixRotateBinaryNice"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); pixt1 = pixConvertTo8(pixs, 0); pixt2 = pixBlockconv(pixt1, 1, 1); /* smallest blur allowed */ pixt3 = pixRotateAM(pixt2, angle, incolor); pixt4 = pixUnsharpMasking(pixt3, 1, 1.0); /* sharpen a bit */ pixd = pixThresholdToBinary(pixt4, 128); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt4); return pixd; } /*------------------------------------------------------------------* * Rotation including alpha (blend) component * *------------------------------------------------------------------*/ /*! * pixRotateWithAlpha() * * Input: pixs (32 bpp rgb or cmapped) * angle (radians; clockwise is positive) * pixg ( 8 bpp, can be null) * fract (between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque) * Return: pixd (32 bpp rgba), or null on error * * Notes: * (1) The alpha channel is transformed separately from pixs, * and aligns with it, being fully transparent outside the * boundary of the transformed pixs. For pixels that are fully * transparent, a blending function like pixBlendWithGrayMask() * will give zero weight to corresponding pixels in pixs. * (2) Rotation is about the center of the image; for very small * rotations, just return a clone. The dest is automatically * expanded so that no image pixels are lost. * (3) Rotation is by area mapping. It doesn't matter what * color is brought in because the alpha channel will * be transparent (black) there. * (4) If pixg is NULL, it is generated as an alpha layer that is * partially opaque, using @fract. Otherwise, it is cropped * to pixs if required and @fract is ignored. The alpha * channel in pixs is never used. * (4) Colormaps are removed to 32 bpp. * (5) The default setting for the border values in the alpha channel * is 0 (transparent) for the outermost ring of pixels and * (0.5 * fract * 255) for the second ring. When blended over * a second image, this * (a) shrinks the visible image to make a clean overlap edge * with an image below, and * (b) softens the edges by weakening the aliasing there. * Use l_setAlphaMaskBorder() to change these values. * (6) A subtle use of gamma correction is to remove gamma correction * before rotation and restore it afterwards. This is done * by sandwiching this function between a gamma/inverse-gamma * photometric transform: * pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255); * pixd = pixRotateWithAlpha(pixt, angle, NULL, fract); * pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255); * pixDestroy(&pixt); * This has the side-effect of producing artifacts in the very * dark regions. * * *** Warning: implicit assumption about RGB component ordering *** */ PIX * pixRotateWithAlpha(PIX *pixs, l_float32 angle, PIX *pixg, l_float32 fract) { l_int32 ws, hs, d, spp; PIX *pixd, *pix32, *pixg2, *pixgr; PROCNAME("pixRotateWithAlpha"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using @fract transparent alpha\n", procName); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using fully opaque\n", procName); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("transparent alpha; image will not be blended\n", procName); /* Make sure input to rotation is 32 bpp rgb, and rotate it */ if (d != 32) pix32 = pixConvertTo32(pixs); else pix32 = pixClone(pixs); spp = pixGetSpp(pix32); pixSetSpp(pix32, 3); /* ignore the alpha channel for the rotation */ pixd = pixRotate(pix32, angle, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, ws, hs); pixSetSpp(pix32, spp); /* restore initial value in case it's a clone */ pixDestroy(&pix32); /* Set up alpha layer with a fading border and rotate it */ if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else if (fract > 0.0) pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 8 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixgr = pixRotate(pixg2, angle, L_ROTATE_AREA_MAP, L_BRING_IN_BLACK, ws, hs); /* Combine into a 4 spp result */ pixSetRGBComponent(pixd, pixgr, L_ALPHA_CHANNEL); pixDestroy(&pixg2); pixDestroy(&pixgr); return pixd; } leptonica-1.70/src/paintcmap.c0000664000175000017500000006420212261610435014422 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * paintcmap.c * * These in-place functions paint onto colormap images. * * Repaint selected pixels in region * l_int32 pixSetSelectCmap() * * Repaint non-white pixels in region * l_int32 pixColorGrayRegionsCmap() * l_int32 pixColorGrayCmap() * l_int32 addColorizedGrayToCmap() * * Repaint selected pixels through mask * l_int32 pixSetSelectMaskedCmap() * * Repaint all pixels through mask * l_int32 pixSetMaskedCmap() * * * The 'set select' functions condition the setting on a specific * pixel value (i.e., index into the colormap) of the underyling * Pix that is being modified. The same conditioning is used in * pixBlendCmap(). * * The pixColorGrayCmap() function sets all truly gray (r = g = b) pixels, * with the exception of either black or white pixels, to a new color. * * The pixSetSelectMaskedCmap() function conditions pixel painting * on both a specific pixel value and location within the fg mask. * By contrast, pixSetMaskedCmap() sets all pixels under the * mask foreground, without considering the initial pixel values. */ #include #include "allheaders.h" /*-------------------------------------------------------------* * Repaint selected pixels in region * *-------------------------------------------------------------*/ /*! * pixSetSelectCmap() * * Input: pixs (1, 2, 4 or 8 bpp, with colormap) * box ( region to set color; can be NULL) * sindex (colormap index of pixels to be changed) * rval, gval, bval (new color to paint) * Return: 0 if OK, 1 on error * * Note: * (1) This is an in-place operation. * (2) It sets all pixels in region that have the color specified * by the colormap index 'sindex' to the new color. * (3) sindex must be in the existing colormap; otherwise an * error is returned. * (4) If the new color exists in the colormap, it is used; * otherwise, it is added to the colormap. If it cannot be * added because the colormap is full, an error is returned. * (5) If box is NULL, applies function to the entire image; otherwise, * clips the operation to the intersection of the box and pix. * (6) An example of use would be to set to a specific color all * the light (background) pixels within a certain region of * a 3-level 2 bpp image, while leaving light pixels outside * this region unchanged. */ l_int32 pixSetSelectCmap(PIX *pixs, BOX *box, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, n, x1, y1, x2, y2, bw, bh, val, wpls; l_int32 index; /* of new color to be set */ l_uint32 *lines, *datas; PIXCMAP *cmap; PROCNAME("pixSetSelectCmap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", procName, 1); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {1,2,4,8}", procName, 1); /* Add new color if necessary; get index of this color in cmap */ n = pixcmapGetCount(cmap); if (sindex >= n) return ERROR_INT("sindex too large; no cmap entry", procName, 1); if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmap, rval, gval, bval)) return ERROR_INT("error adding cmap entry", procName, 1); else index = n; /* we've added one color */ } /* Determine the region of substitution */ pixGetDimensions(pixs, &w, &h, NULL); if (!box) { x1 = y1 = 0; x2 = w; y2 = h; } else { boxGetGeometry(box, &x1, &y1, &bw, &bh); x2 = x1 + bw - 1; y2 = y1 + bh - 1; } /* Replace pixel value sindex by index in the region */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); for (i = y1; i <= y2; i++) { if (i < 0 || i >= h) /* clip */ continue; lines = datas + i * wpls; for (j = x1; j <= x2; j++) { if (j < 0 || j >= w) /* clip */ continue; switch (d) { case 1: val = GET_DATA_BIT(lines, j); if (val == sindex) { if (index == 0) CLEAR_DATA_BIT(lines, j); else SET_DATA_BIT(lines, j); } break; case 2: val = GET_DATA_DIBIT(lines, j); if (val == sindex) SET_DATA_DIBIT(lines, j, index); break; case 4: val = GET_DATA_QBIT(lines, j); if (val == sindex) SET_DATA_QBIT(lines, j, index); break; case 8: val = GET_DATA_BYTE(lines, j); if (val == sindex) SET_DATA_BYTE(lines, j, index); break; default: return ERROR_INT("depth not in {1,2,4,8}", procName, 1); } } } return 0; } /*-------------------------------------------------------------* * Repaint gray pixels in region * *-------------------------------------------------------------*/ /*! * pixColorGrayRegionsCmap() * * Input: pixs (8 bpp, with colormap) * boxa (of regions in which to apply color) * type (L_PAINT_LIGHT, L_PAINT_DARK) * rval, gval, bval (target color) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place operation. * (2) If type == L_PAINT_LIGHT, it colorizes non-black pixels, * preserving antialiasing. * If type == L_PAINT_DARK, it colorizes non-white pixels, * preserving antialiasing. See pixColorGrayCmap() for details. * (3) This can also be called through pixColorGrayRegions(). * (4) This increases the colormap size by the number of * different gray (non-black or non-white) colors in the * selected regions of pixs. If there is not enough room in * the colormap for this expansion, it returns 1 (error), * and the caller should check the return value. * (5) Because two boxes in the boxa can overlap, pixels that * are colorized in the first box must be excluded in the * second because their value exceeds the size of the map. */ l_int32 pixColorGrayRegionsCmap(PIX *pixs, BOXA *boxa, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, k, w, h, n, nc, x1, y1, x2, y2, bw, bh, wpl; l_int32 val, nval; l_int32 *map; l_uint32 *line, *data; BOX *box; NUMA *na; PIXCMAP *cmap; PROCNAME("pixColorGrayRegionsCmap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", procName, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("depth not 8 bpp", procName, 1); if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) return ERROR_INT("invalid type", procName, 1); nc = pixcmapGetCount(cmap); if (addColorizedGrayToCmap(cmap, type, rval, gval, bval, &na)) return ERROR_INT("no room; cmap full", procName, 1); if ((map = numaGetIArray(na)) == NULL) { numaDestroy(&na); return ERROR_INT("map not made", procName, 1); } pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); n = boxaGetCount(boxa); for (k = 0; k < n; k++) { box = boxaGetBox(boxa, k, L_CLONE); boxGetGeometry(box, &x1, &y1, &bw, &bh); x2 = x1 + bw - 1; y2 = y1 + bh - 1; /* Remap gray pixels in the region */ for (i = y1; i <= y2; i++) { if (i < 0 || i >= h) /* clip */ continue; line = data + i * wpl; for (j = x1; j <= x2; j++) { if (j < 0 || j >= w) /* clip */ continue; val = GET_DATA_BYTE(line, j); if (val >= nc) continue; /* from overlapping b.b. */ nval = map[val]; if (nval != 256) SET_DATA_BYTE(line, j, nval); } } boxDestroy(&box); } FREE(map); numaDestroy(&na); return 0; } /*! * pixColorGrayCmap() * * Input: pixs (2, 4 or 8 bpp, with colormap) * box ( region to set color; can be NULL) * type (L_PAINT_LIGHT, L_PAINT_DARK) * rval, gval, bval (target color) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place operation. * (2) If type == L_PAINT_LIGHT, it colorizes non-black pixels, * preserving antialiasing. * If type == L_PAINT_DARK, it colorizes non-white pixels, * preserving antialiasing. * (3) If box is NULL, applies function to the entire image; otherwise, * clips the operation to the intersection of the box and pix. * (4) This can also be called through pixColorGray(). * (5) This increases the colormap size by the number of * different gray (non-black or non-white) colors in the * input colormap. If there is not enough room in the colormap * for this expansion, it returns 1 (error), and the caller * should check the return value. If an error is returned * and the cmap is only 2 or 4 bpp, the pix can be converted * to 8 bpp and this function will succeed if run again on * a larger colormap. * (6) Using the darkness of each original pixel in the rect, * it generates a new color (based on the input rgb values). * If type == L_PAINT_LIGHT, the new color is a (generally) * darken-to-black version of the input rgb color, where the * amount of darkening increases with the darkness of the * original pixel color. * If type == L_PAINT_DARK, the new color is a (generally) * faded-to-white version of the input rgb color, where the * amount of fading increases with the brightness of the * original pixel color. */ l_int32 pixColorGrayCmap(PIX *pixs, BOX *box, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, x1, y1, x2, y2, bw, bh, wpl; l_int32 val, nval; l_int32 *map; l_uint32 *line, *data; NUMA *na; PIX *pixt; PIXCMAP *cmap, *cmapc; PROCNAME("pixColorGrayCmap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", procName, 1); d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2, 4, 8}", procName, 1); if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) return ERROR_INT("invalid type", procName, 1); /* If 2 bpp or 4 bpp, see if the new colors will fit into * the existing colormap. If not, convert in-place to 8 bpp. */ if (d == 2 || d == 4) { cmapc = pixcmapCopy(cmap); /* experiment with a copy */ if (addColorizedGrayToCmap(cmapc, type, rval, gval, bval, NULL)) { pixt = pixConvertTo8(pixs, 1); pixTransferAllData(pixs, &pixt, 0, 0); } pixcmapDestroy(&cmapc); } /* Find gray colors, add the corresponding new colors, * and set up a mapping table from gray to new. * That table has the value 256 for all colors that are * not to be mapped. */ cmap = pixGetColormap(pixs); if (addColorizedGrayToCmap(cmap, type, rval, gval, bval, &na)) return ERROR_INT("no room; cmap full", procName, 1); if ((map = numaGetIArray(na)) == NULL) { numaDestroy(&na); return ERROR_INT("map not made", procName, 1); } /* Determine the region of substitution */ pixGetDimensions(pixs, &w, &h, &d); /* d may be different */ data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (!box) { x1 = y1 = 0; x2 = w; y2 = h; } else { boxGetGeometry(box, &x1, &y1, &bw, &bh); x2 = x1 + bw - 1; y2 = y1 + bh - 1; } /* Remap gray pixels in the region */ for (i = y1; i <= y2; i++) { if (i < 0 || i >= h) /* clip */ continue; line = data + i * wpl; for (j = x1; j <= x2; j++) { if (j < 0 || j >= w) /* clip */ continue; switch (d) { case 2: val = GET_DATA_DIBIT(line, j); nval = map[val]; if (nval != 256) SET_DATA_DIBIT(line, j, nval); break; case 4: val = GET_DATA_QBIT(line, j); nval = map[val]; if (nval != 256) SET_DATA_QBIT(line, j, nval); break; case 8: val = GET_DATA_BYTE(line, j); nval = map[val]; if (nval != 256) SET_DATA_BYTE(line, j, nval); break; } } } FREE(map); numaDestroy(&na); return 0; } /*! * addColorizedGrayToCmap() * * Input: cmap (from 2 or 4 bpp pix) * type (L_PAINT_LIGHT, L_PAINT_DARK) * rval, gval, bval (target color) * &na ( table for mapping new cmap entries) * Return: 0 if OK; 1 on error; 2 if new colors will not fit in cmap. * * Notes: * (1) If type == L_PAINT_LIGHT, it colorizes non-black pixels, * preserving antialiasing. * If type == L_PAINT_DARK, it colorizes non-white pixels, * preserving antialiasing. * (2) This increases the colormap size by the number of * different gray (non-black or non-white) colors in the * input colormap. If there is not enough room in the colormap * for this expansion, it returns 1 (treated as a warning); * the caller should check the return value. * (3) This can be used to determine if the new colors will fit in * the cmap, using null for &na. Returns 0 if they fit; 2 if * they don't fit. * (4) The mapping table contains, for each gray color found, the * index of the corresponding colorized pixel. Non-gray * pixels are assigned the invalid index 256. * (5) See pixColorGrayCmap() for usage. */ l_int32 addColorizedGrayToCmap(PIXCMAP *cmap, l_int32 type, l_int32 rval, l_int32 gval, l_int32 bval, NUMA **pna) { l_int32 i, n, erval, egval, ebval, nrval, ngval, nbval, newindex; NUMA *na; PROCNAME("addColorizedGrayToCmap"); if (pna) *pna = NULL; if (!cmap) return ERROR_INT("cmap not defined", procName, 1); if (type != L_PAINT_DARK && type != L_PAINT_LIGHT) return ERROR_INT("invalid type", procName, 1); n = pixcmapGetCount(cmap); na = numaCreate(n); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i, &erval, &egval, &ebval); if (type == L_PAINT_LIGHT) { if (erval == egval && erval == ebval && erval != 0) { nrval = (l_int32)(rval * (l_float32)erval / 255.); ngval = (l_int32)(gval * (l_float32)egval / 255.); nbval = (l_int32)(bval * (l_float32)ebval / 255.); if (pixcmapAddNewColor(cmap, nrval, ngval, nbval, &newindex)) { numaDestroy(&na); L_WARNING("no room; colormap full\n", procName); return 2; } numaAddNumber(na, newindex); } else { numaAddNumber(na, 256); /* invalid number; not gray */ } } else { /* L_PAINT_DARK */ if (erval == egval && erval == ebval && erval != 255) { nrval = rval + (l_int32)((255. - rval) * (l_float32)erval / 255.); ngval = gval + (l_int32)((255. - gval) * (l_float32)egval / 255.); nbval = bval + (l_int32)((255. - bval) * (l_float32)ebval / 255.); if (pixcmapAddNewColor(cmap, nrval, ngval, nbval, &newindex)) { numaDestroy(&na); L_WARNING("no room; colormap full\n", procName); return 2; } numaAddNumber(na, newindex); } else { numaAddNumber(na, 256); /* invalid number; not gray */ } } } if (pna) *pna = na; else numaDestroy(&na); return 0; } /*-------------------------------------------------------------* * Repaint selected pixels through mask * *-------------------------------------------------------------*/ /*! * pixSetSelectMaskedCmap() * * Input: pixs (2, 4 or 8 bpp, with colormap) * pixm ( 1 bpp mask; no-op if NULL) * x, y (UL corner of mask relative to pixs) * sindex (colormap index of pixels in pixs to be changed) * rval, gval, bval (new color to substitute) * Return: 0 if OK, 1 on error * * Note: * (1) This is an in-place operation. * (2) This paints through the fg of pixm and replaces all pixels * in pixs that have a particular value (sindex) with the new color. * (3) If pixm == NULL, a warning is given. * (4) sindex must be in the existing colormap; otherwise an * error is returned. * (5) If the new color exists in the colormap, it is used; * otherwise, it is added to the colormap. If the colormap * is full, an error is returned. */ l_int32 pixSetSelectMaskedCmap(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 sindex, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, n, wm, hm, wpls, wplm, val; l_int32 index; /* of new color to be set */ l_uint32 *lines, *linem, *datas, *datam; PIXCMAP *cmap; PROCNAME("pixSetSelectMaskedCmap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap", procName, 1); if (!pixm) { L_WARNING("no mask; nothing to do\n", procName); return 0; } d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2, 4, 8}", procName, 1); /* add new color if necessary; get index of this color in cmap */ n = pixcmapGetCount(cmap); if (sindex >= n) return ERROR_INT("sindex too large; no cmap entry", procName, 1); if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmap, rval, gval, bval)) return ERROR_INT("error adding cmap entry", procName, 1); else index = n; /* we've added one color */ } /* replace pixel value sindex by index when fg pixel in pixmc * overlays it */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); wm = pixGetWidth(pixm); hm = pixGetHeight(pixm); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); for (i = 0; i < hm; i++) { if (i + y < 0 || i + y >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j++) { if (j + x < 0 || j + x >= w) continue; if (GET_DATA_BIT(linem, j)) { switch (d) { case 1: val = GET_DATA_BIT(lines, x + j); if (val == sindex) { if (index == 0) CLEAR_DATA_BIT(lines, x + j); else SET_DATA_BIT(lines, x + j); } break; case 2: val = GET_DATA_DIBIT(lines, x + j); if (val == sindex) SET_DATA_DIBIT(lines, x + j, index); break; case 4: val = GET_DATA_QBIT(lines, x + j); if (val == sindex) SET_DATA_QBIT(lines, x + j, index); break; case 8: val = GET_DATA_BYTE(lines, x + j); if (val == sindex) SET_DATA_BYTE(lines, x + j, index); break; default: return ERROR_INT("depth not in {1,2,4,8}", procName, 1); } } } } return 0; } /*-------------------------------------------------------------* * Repaint all pixels through mask * *-------------------------------------------------------------*/ /*! * pixSetMaskedCmap() * * Input: pixs (2, 4 or 8 bpp, colormapped) * pixm ( 1 bpp mask; no-op if NULL) * x, y (origin of pixm relative to pixs; can be negative) * rval, gval, bval (new color to set at each masked pixel) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place operation. * (2) It paints a single color through the mask (as a stencil). * (3) The mask origin is placed at (x,y) on pixs, and the * operation is clipped to the intersection of the mask and pixs. * (4) If pixm == NULL, a warning is given. * (5) Typically, pixm is a small binary mask located somewhere * on the larger pixs. * (6) If the color is in the colormap, it is used. Otherwise, * it is added if possible; an error is returned if the * colormap is already full. */ l_int32 pixSetMaskedCmap(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 w, h, d, wpl, wm, hm, wplm; l_int32 i, j, index; l_uint32 *data, *datam, *line, *linem; PIXCMAP *cmap; PROCNAME("pixSetMaskedCmap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("no colormap in pixs", procName, 1); if (!pixm) { L_WARNING("no mask; nothing to do\n", procName); return 0; } d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return ERROR_INT("depth not in {2,4,8}", procName, 1); if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); /* Add new color if necessary; store in 'index' */ if (pixcmapGetIndex(cmap, rval, gval, bval, &index)) { /* not found */ if (pixcmapAddColor(cmap, rval, gval, bval)) return ERROR_INT("no room in cmap", procName, 1); index = pixcmapGetCount(cmap) - 1; } pixGetDimensions(pixs, &w, &h, NULL); wpl = pixGetWpl(pixs); data = pixGetData(pixs); pixGetDimensions(pixm, &wm, &hm, NULL); wplm = pixGetWpl(pixm); datam = pixGetData(pixm); for (i = 0; i < hm; i++) { if (i + y < 0 || i + y >= h) continue; line = data + (i + y) * wpl; linem = datam + i * wplm; for (j = 0; j < wm; j++) { if (j + x < 0 || j + x >= w) continue; if (GET_DATA_BIT(linem, j)) { /* paint color */ switch (d) { case 2: SET_DATA_DIBIT(line, j + x, index); break; case 4: SET_DATA_QBIT(line, j + x, index); break; case 8: SET_DATA_BYTE(line, j + x, index); break; default: return ERROR_INT("depth not in {2,4,8}", procName, 1); } } } } return 0; } leptonica-1.70/src/gifio.c0000644000175000017500000004167212244222324013544 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * gifio.c * * Read gif from file * PIX *pixReadStreamGif() * static PIX *pixInterlaceGIF() * * Write gif to file * l_int32 pixWriteStreamGif() * * Read/write from/to memory (see warning) * PIX *pixReadMemGif() * l_int32 pixWriteMemGif() * * This uses the gif library, version 4.1.6 or later. * Do not use 4.1.4. It has serious problems handling 1 bpp images. * * The initial version of this module was generously contribued by * Antony Dovgal. He can be contacted at: tony *AT* daylessday.org * * There are some issues with version 5: * - valgrind detects uninitialized values used used for writing * and conditionally jumping in EGifPutScreenDesc(). * - DGifSlurp() crashes on some images, apparently triggered by * by some GIF extension records. The latter problem has been * reported but not resolved as of October 2013. */ #include #include #ifndef _MSC_VER #include #else #include #endif /* _MSC_VER */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------------------------------*/ #if HAVE_LIBGIF || HAVE_LIBUNGIF /* defined in environ.h */ /* --------------------------------------------------------------------*/ #include "gif_lib.h" /* GIF supports 4-way horizontal interlacing */ static PIX * pixInterlaceGIF(PIX *pixs); static const l_int32 InterlacedOffset[] = {0, 4, 2, 1}; static const l_int32 InterlacedJumps[] = {8, 8, 4, 2}; /* Basic interface changed in 5.0 (!) */ #if GIFLIB_MAJOR < 5 #define GifMakeMapObject MakeMapObject #define GifFreeMapObject FreeMapObject #define DGifOpenFileHandle(a,b) DGifOpenFileHandle(a) #define EGifOpenFileHandle(a,b) EGifOpenFileHandle(a) #endif /* GIFLIB_MAJOR */ /*---------------------------------------------------------------------* * Reading gif from file * *---------------------------------------------------------------------*/ /*! * pixReadStreamGif() * * Input: stream * Return: pix, or null on error */ PIX * pixReadStreamGif(FILE *fp) { l_int32 fd, wpl, i, j, w, h, d, cindex, ncolors; l_int32 rval, gval, bval; l_uint32 *data, *line; GifFileType *gif; PIX *pixd, *pixdi; PIXCMAP *cmap; ColorMapObject *gif_cmap; SavedImage si; PROCNAME("pixReadStreamGif"); if ((fd = fileno(fp)) < 0) return (PIX *)ERROR_PTR("invalid file descriptor", procName, NULL); #ifndef _MSC_VER lseek(fd, 0, SEEK_SET); #else _lseek(fd, 0, SEEK_SET); #endif /* _MSC_VER */ if ((gif = DGifOpenFileHandle(fd, NULL)) == NULL) return (PIX *)ERROR_PTR("invalid file or file not found", procName, NULL); /* Read all the data, but use only the first image found */ if (DGifSlurp(gif) != GIF_OK) { DGifCloseFile(gif); return (PIX *)ERROR_PTR("failed to read GIF data", procName, NULL); } if (gif->SavedImages == NULL) { DGifCloseFile(gif); return (PIX *)ERROR_PTR("no images found in GIF", procName, NULL); } si = gif->SavedImages[0]; w = si.ImageDesc.Width; h = si.ImageDesc.Height; if (w <= 0 || h <= 0) { DGifCloseFile(gif); return (PIX *)ERROR_PTR("invalid image dimensions", procName, NULL); } if (si.RasterBits == NULL) { DGifCloseFile(gif); return (PIX *)ERROR_PTR("no raster data in GIF", procName, NULL); } if (si.ImageDesc.ColorMap) { /* private cmap for this image */ gif_cmap = si.ImageDesc.ColorMap; } else if (gif->SColorMap) { /* global cmap for whole picture */ gif_cmap = gif->SColorMap; } else { /* don't know where to take cmap from */ DGifCloseFile(gif); return (PIX *)ERROR_PTR("color map is missing", procName, NULL); } ncolors = gif_cmap->ColorCount; if (ncolors <= 2) d = 1; else if (ncolors <= 4) d = 2; else if (ncolors <= 16) d = 4; else d = 8; if ((cmap = pixcmapCreate(d)) == NULL) return (PIX *)ERROR_PTR("cmap creation failed", procName, NULL); for (cindex = 0; cindex < ncolors; cindex++) { rval = gif_cmap->Colors[cindex].Red; gval = gif_cmap->Colors[cindex].Green; bval = gif_cmap->Colors[cindex].Blue; pixcmapAddColor(cmap, rval, gval, bval); } if ((pixd = pixCreate(w, h, d)) == NULL) { DGifCloseFile(gif); pixcmapDestroy(&cmap); return (PIX *)ERROR_PTR("failed to allocate pixd", procName, NULL); } pixSetColormap(pixd, cmap); wpl = pixGetWpl(pixd); data = pixGetData(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; if (d == 1) { for (j = 0; j < w; j++) { if (si.RasterBits[i * w + j]) SET_DATA_BIT(line, j); } } else if (d == 2) { for (j = 0; j < w; j++) SET_DATA_DIBIT(line, j, si.RasterBits[i * w + j]); } else if (d == 4) { for (j = 0; j < w; j++) SET_DATA_QBIT(line, j, si.RasterBits[i * w + j]); } else { /* d == 8 */ for (j = 0; j < w; j++) SET_DATA_BYTE(line, j, si.RasterBits[i * w + j]); } } if (gif->Image.Interlace) { pixdi = pixInterlaceGIF(pixd); pixTransferAllData(pixd, &pixdi, 0, 0); } DGifCloseFile(gif); return pixd; } static PIX * pixInterlaceGIF(PIX *pixs) { l_int32 w, h, d, wpl, j, k, srow, drow; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixInterlaceGIF"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); for (k = 0, srow = 0; k < 4; k++) { for (drow = InterlacedOffset[k]; drow < h; drow += InterlacedJumps[k], srow++) { lines = datas + srow * wpl; lined = datad + drow * wpl; for (j = 0; j < w; j++) memcpy(lined, lines, 4 * wpl); } } return pixd; } /*---------------------------------------------------------------------* * Writing gif to file * *---------------------------------------------------------------------*/ /*! * pixWriteStreamGif() * * Input: stream * pix (1, 2, 4, 8, 16 or 32 bpp) * Return: 0 if OK, 1 on error * * Notes: * (1) All output gif have colormaps. If the pix is 32 bpp rgb, * this quantizes the colors and writes out 8 bpp. * If the pix is 16 bpp grayscale, it converts to 8 bpp first. * (2) We can't write to memory using open_memstream() because * the gif functions write through a file descriptor, not a * file stream. */ l_int32 pixWriteStreamGif(FILE *fp, PIX *pix) { char *text; l_int32 fd, wpl, i, j, w, h, d, ncolor, rval, gval, bval; l_int32 gif_ncolor = 0; l_uint32 *data, *line; PIX *pixd; PIXCMAP *cmap; GifFileType *gif; ColorMapObject *gif_cmap; GifByteType *gif_line; PROCNAME("pixWriteStreamGif"); if (!fp) return ERROR_INT("stream not open", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); rewind(fp); if ((fd = fileno(fp)) < 0) return ERROR_INT("invalid file descriptor", procName, 1); d = pixGetDepth(pix); if (d == 32) { pixd = pixConvertRGBToColormap(pix, 1); } else if (d > 1) { pixd = pixConvertTo8(pix, TRUE); } else { /* d == 1; make sure there's a colormap */ pixd = pixClone(pix); if (!pixGetColormap(pixd)) { cmap = pixcmapCreate(1); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); } } if (!pixd) return ERROR_INT("failed to convert image to indexed", procName, 1); d = pixGetDepth(pixd); if ((cmap = pixGetColormap(pixd)) == NULL) { pixDestroy(&pixd); return ERROR_INT("cmap is missing", procName, 1); } /* 'Round' the number of gif colors up to a power of 2 */ ncolor = pixcmapGetCount(cmap); for (i = 0; i <= 8; i++) { if ((1 << i) >= ncolor) { gif_ncolor = (1 << i); break; } } if (gif_ncolor < 1) { pixDestroy(&pixd); return ERROR_INT("number of colors is invalid", procName, 1); } /* Save the cmap colors in a gif_cmap */ if ((gif_cmap = GifMakeMapObject(gif_ncolor, NULL)) == NULL) { pixDestroy(&pixd); return ERROR_INT("failed to create GIF color map", procName, 1); } for (i = 0; i < gif_ncolor; i++) { rval = gval = bval = 0; if (ncolor > 0) { if (pixcmapGetColor(cmap, i, &rval, &gval, &bval) != 0) { pixDestroy(&pixd); GifFreeMapObject(gif_cmap); return ERROR_INT("failed to get color from color map", procName, 1); } ncolor--; } gif_cmap->Colors[i].Red = rval; gif_cmap->Colors[i].Green = gval; gif_cmap->Colors[i].Blue = bval; } /* Get the gif file handle */ if ((gif = EGifOpenFileHandle(fd, NULL)) == NULL) { GifFreeMapObject(gif_cmap); pixDestroy(&pixd); return ERROR_INT("failed to create GIF image handle", procName, 1); } pixGetDimensions(pixd, &w, &h, NULL); if (EGifPutScreenDesc(gif, w, h, gif_cmap->BitsPerPixel, 0, gif_cmap) != GIF_OK) { pixDestroy(&pixd); GifFreeMapObject(gif_cmap); EGifCloseFile(gif); return ERROR_INT("failed to write screen description", procName, 1); } GifFreeMapObject(gif_cmap); /* not needed after this point */ if (EGifPutImageDesc(gif, 0, 0, w, h, FALSE, NULL) != GIF_OK) { pixDestroy(&pixd); EGifCloseFile(gif); return ERROR_INT("failed to image screen description", procName, 1); } data = pixGetData(pixd); wpl = pixGetWpl(pixd); if (d != 1 && d != 2 && d != 4 && d != 8) { pixDestroy(&pixd); EGifCloseFile(gif); return ERROR_INT("image depth is not in {1, 2, 4, 8}", procName, 1); } if ((gif_line = (GifByteType *)CALLOC(sizeof(GifByteType), w)) == NULL) { pixDestroy(&pixd); EGifCloseFile(gif); return ERROR_INT("mem alloc fail for data line", procName, 1); } for (i = 0; i < h; i++) { line = data + i * wpl; /* Gif's way of setting the raster line up for compression */ for (j = 0; j < w; j++) { switch(d) { case 8: gif_line[j] = GET_DATA_BYTE(line, j); break; case 4: gif_line[j] = GET_DATA_QBIT(line, j); break; case 2: gif_line[j] = GET_DATA_DIBIT(line, j); break; case 1: gif_line[j] = GET_DATA_BIT(line, j); break; } } /* Compress and save the line */ if (EGifPutLine(gif, gif_line, w) != GIF_OK) { FREE(gif_line); pixDestroy(&pixd); EGifCloseFile(gif); return ERROR_INT("failed to write data line into GIF", procName, 1); } } /* Write a text comment. This must be placed after writing the * data (!!) Note that because libgif does not provide a function * for reading comments from file, you will need another way * to read comments. */ if ((text = pixGetText(pix)) != NULL) { if (EGifPutComment(gif, text) != GIF_OK) L_WARNING("gif comment not written\n", procName); } FREE(gif_line); pixDestroy(&pixd); EGifCloseFile(gif); return 0; } /*---------------------------------------------------------------------* * Read/write from/to memory * *---------------------------------------------------------------------*/ /*! * pixReadMemGif() * * Input: data (const; gif-encoded) * size (of data) * Return: pix, or null on error * * Notes: * (1) Of course, we are cheating here -- writing the data to file * in gif format and reading it back in. We can't use the * GNU runtime extension fmemopen() to avoid writing to a file * because libgif doesn't have a file stream interface! * (2) This should not be assumed to be safe from a sophisticated * attack, even though we have attempted to make the filename * difficult to guess by embedding the process number and the * current time in microseconds. The best way to handle * temporary files is to use file descriptors (capabilities) * or file handles. However, I know of no way to do this * for gif files because of the way that libgif handles the * file descriptors. The canonical approach would be to do this: * char templ[] = "hiddenfilenameXXXXXX"; * l_int32 fd = mkstemp(templ); * FILE *fp = fdopen(fd, "w+b"); * fwrite(data, 1, size, fp); * rewind(fp); * Pix *pix = pixReadStreamGif(fp); * but this fails because fp is in a bad state after writing. */ PIX * pixReadMemGif(const l_uint8 *cdata, size_t size) { char *fname; PIX *pix; PROCNAME("pixReadMemGif"); if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); L_WARNING("writing to a temp file, not directly to memory\n", procName); /* Write to a temp file */ fname = genTempFilename("/tmp/", "mem.gif", 1, 1); l_binaryWrite(fname, "w", (l_uint8 *)cdata, size); /* Read back from the file */ pix = pixRead(fname); lept_rm(NULL, fname); lept_free(fname); if (!pix) L_ERROR("pix not read\n", procName); return pix; } /*! * pixWriteMemGif() * * Input: &data ( data of gif compressed image) * &size ( size of returned data) * pix * Return: 0 if OK, 1 on error * * Notes: * (1) See comments in pixReadMemGif() */ l_int32 pixWriteMemGif(l_uint8 **pdata, size_t *psize, PIX *pix) { char *fname; PROCNAME("pixWriteMemGif"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); *pdata = NULL; if (!psize) return ERROR_INT("&size not defined", procName, 1 ); *psize = 0; if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); L_WARNING("writing to a temp file, not directly to memory\n", procName); /* Write to a temp file */ fname = genTempFilename("/tmp/", "mem.gif", 1, 1); pixWrite(fname, pix, IFF_GIF); /* Read back into memory */ *pdata = l_binaryRead(fname, psize); lept_rm(NULL, fname); lept_free(fname); return 0; } /* -----------------------------------------------------------------*/ #endif /* HAVE_LIBGIF || HAVE_LIBUNGIF */ /* -----------------------------------------------------------------*/ leptonica-1.70/src/pngio.c0000664000175000017500000012316712267536540013602 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pngio.c * * Read png from file * PIX *pixReadStreamPng() * l_int32 readHeaderPng() * l_int32 freadHeaderPng() * l_int32 sreadHeaderPng() * l_int32 fgetPngResolution() * * Write png to file * l_int32 pixWritePng() [ special top level ] * l_int32 pixWriteStreamPng() * l_int32 pixSetZlibCompression() * * Setting flag for special read mode * void l_pngSetReadStrip16To8() * * Read/write to memory * PIX *pixReadMemPng() * l_int32 pixWriteMemPng() * * Documentation: libpng.txt and example.c * * On input (decompression from file), palette color images * are read into an 8 bpp Pix with a colormap, and 24 bpp * 3 component color images are read into a 32 bpp Pix with * rgb samples. On output (compression to file), palette color * images are written as 8 bpp with the colormap, and 32 bpp * full color images are written compressed as a 24 bpp, * 3 component color image. * * In the following, we use these abbreviations: * bps == bit/sample * spp == samples/pixel * bpp == bits/pixel of image in Pix (memory) * where each component is referred to as a "sample". * * For reading and writing rgb and rgba images, we read and write * alpha if it exists (spp == 4) and do not read or write if * it doesn't (spp == 3). The alpha component can be 'removed' * simply by setting spp to 3. In leptonica, we make relatively * little explicit use of the alpha sample. Note that the alpha * sample in the image is also called "alpha transparency", * "alpha component" and "alpha layer." * * To change the zlib compression level, use pixSetZlibCompression() * before writing the file. The default is for standard png compression. * The zlib compression value can be set [0 ... 9], with * 0 no compression (huge files) * 1 fastest compression * -1 default compression (equivalent to 6 in latest version) * 9 best compression * Note that if you are using the defined constants in zlib instead * of the compression integers given above, you must include zlib.h. * * There is global for determining the size of retained samples: * var_PNG_STRIP_16_to_8 * and a function l_pngSetReadStrip16To8() for setting it. * The default is TRUE, which causes pixRead() to strip each 16 bit * sample down to 8 bps: * - For 16 bps rgb (16 bps, 3 spp) --> 32 bpp rgb Pix * - For 16 bps gray (16 bps, 1 spp) --> 8 bpp grayscale Pix * If the variable is set to FALSE, the 16 bit gray samples * are saved when read; the 16 bit rgb samples return an error. * Note: results can be non-deterministic if used with * multi-threaded applications. * * On systems like windows without fmemopen() and open_memstream(), * we write data to a temp file and read it back for operations * between pix and compressed-data, such as pixReadMemPng() and * pixWriteMemPng(). */ #include #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if HAVE_LIBPNG /* defined in environ.h */ /* --------------------------------------------*/ #include "png.h" #if HAVE_LIBZ #include "zlib.h" #else #define Z_DEFAULT_COMPRESSION (-1) #endif /* HAVE_LIBZ */ /* ------------------ Set default for read option -------------------- */ /* Strip 16 bpp --> 8 bpp on reading png; default is for stripping. * If you don't strip, you can't read the gray-alpha spp = 2 images. */ static l_int32 var_PNG_STRIP_16_TO_8 = 1; #ifndef NO_CONSOLE_IO #define DEBUG_READ 0 #define DEBUG_WRITE 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Reading png * *---------------------------------------------------------------------*/ /*! * pixReadStreamPng() * * Input: stream * Return: pix, or null on error * * Notes: * (1) If called from pixReadStream(), the stream is positioned * at the beginning of the file. * (2) To do sequential reads of png format images from a stream, * use pixReadStreamPng() * (3) Grayscale-with-alpha pngs (spp = 2) are converted to RGBA * on read; the returned pix has spp = 4 and equal red, green and * blue channels. * (4) spp = 1 with alpha (palette) is converted to RGBA with spp = 4. * (5) We use the high level png interface, where the transforms are set * up in advance and the header and image are read with a single * call. The more complicated interface, where the header is * read first and the buffers for the raster image are user- * allocated before reading the image, works OK for single images, * but I could not get it to work properly for the successive * png reads that are required by pixaReadStream(). */ PIX * pixReadStreamPng(FILE *fp) { l_int32 rval, gval, bval; l_int32 i, j, k, index, ncolors; l_int32 wpl, d, spp, cindex, tRNS; l_uint32 png_transforms; l_uint32 *data, *line, *ppixel; int num_palette, num_text, num_trans; png_byte bit_depth, color_type, channels; png_uint_32 w, h, rowbytes; png_uint_32 xres, yres; png_bytep rowptr, trans; png_bytep *row_pointers; png_structp png_ptr; png_infop info_ptr, end_info; png_colorp palette; png_textp text_ptr; /* ptr to text_chunk */ PIX *pix; PIXCMAP *cmap; PROCNAME("pixReadStreamPng"); if (!fp) return (PIX *)ERROR_PTR("fp not defined", procName, NULL); pix = NULL; /* Allocate the 3 data structures */ if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return (PIX *)ERROR_PTR("png_ptr not made", procName, NULL); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return (PIX *)ERROR_PTR("info_ptr not made", procName, NULL); } if ((end_info = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return (PIX *)ERROR_PTR("end_info not made", procName, NULL); } /* Set up png setjmp error handling */ if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("internal png error", procName, NULL); } png_init_io(png_ptr, fp); /* ---------------------------------------------------------- * * Set the transforms flags. Whatever happens here, * NEVER invert 1 bpp using PNG_TRANSFORM_INVERT_MONO. * ---------------------------------------------------------- */ /* To strip 16 --> 8 bit depth, use PNG_TRANSFORM_STRIP_16 */ if (var_PNG_STRIP_16_TO_8 == 1) /* our default */ png_transforms = PNG_TRANSFORM_STRIP_16; else png_transforms = PNG_TRANSFORM_IDENTITY; /* Read it */ png_read_png(png_ptr, info_ptr, png_transforms, NULL); row_pointers = png_get_rows(png_ptr, info_ptr); w = png_get_image_width(png_ptr, info_ptr); h = png_get_image_height(png_ptr, info_ptr); bit_depth = png_get_bit_depth(png_ptr, info_ptr); rowbytes = png_get_rowbytes(png_ptr, info_ptr); color_type = png_get_color_type(png_ptr, info_ptr); channels = png_get_channels(png_ptr, info_ptr); spp = channels; tRNS = png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS) ? 1 : 0; if (spp == 1) { d = bit_depth; } else { /* spp == 2 (gray + alpha), spp == 3 (rgb), spp == 4 (rgba) */ d = 4 * bit_depth; } /* Remove if/when this is implemented for all bit_depths */ if (spp == 3 && bit_depth != 8) { fprintf(stderr, "Help: spp = 3 and depth = %d != 8\n!!", bit_depth); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("not implemented for this depth", procName, NULL); } if (color_type == PNG_COLOR_TYPE_PALETTE || color_type == PNG_COLOR_MASK_PALETTE) { /* generate a colormap */ png_get_PLTE(png_ptr, info_ptr, &palette, &num_palette); cmap = pixcmapCreate(d); /* spp == 1 */ for (cindex = 0; cindex < num_palette; cindex++) { rval = palette[cindex].red; gval = palette[cindex].green; bval = palette[cindex].blue; pixcmapAddColor(cmap, rval, gval, bval); } } else { cmap = NULL; } if ((pix = pixCreate(w, h, d)) == NULL) { png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("pix not made", procName, NULL); } wpl = pixGetWpl(pix); data = pixGetData(pix); pixSetColormap(pix, cmap); pixSetSpp(pix, spp); if (spp == 1 && !tRNS) { /* copy straight from buffer to pix */ for (i = 0; i < h; i++) { line = data + i * wpl; rowptr = row_pointers[i]; for (j = 0; j < rowbytes; j++) { SET_DATA_BYTE(line, j, rowptr[j]); } } } else if (spp == 2) { /* grayscale + alpha; convert to RGBA */ L_INFO("converting (gray + alpha) ==> RGBA\n", procName); for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = k = 0; j < w; j++) { /* Copy gray value into r, g and b */ SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); ppixel++; } } pixSetSpp(pix, 4); /* we do not support 2 spp pix */ } else if (spp == 3 || spp == 4) { for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = k = 0; j < w; j++) { SET_DATA_BYTE(ppixel, COLOR_RED, rowptr[k++]); SET_DATA_BYTE(ppixel, COLOR_GREEN, rowptr[k++]); SET_DATA_BYTE(ppixel, COLOR_BLUE, rowptr[k++]); if (spp == 4) SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, rowptr[k++]); ppixel++; } } } /* Special case: requires converting to RGBA */ if (spp == 1 && tRNS) { if (!cmap) { /* Trivial case: make fully transparent RGBA image */ L_INFO("transparency, 1 spp, no colormap, no transparency array: " "convention is fully transparent image\n", procName); L_INFO("converting (fully transparent 1 spp) ==> RGBA\n", procName); pixDestroy(&pix); pix = pixCreate(w, h, 32); /* init to alpha = 0 (transparent) */ pixSetSpp(pix, 4); } else { L_INFO("converting (cmap + alpha) ==> RGBA\n", procName); /* Grab the transparency array */ png_get_tRNS(png_ptr, info_ptr, &trans, &num_trans, NULL); if (!trans) { /* invalid png file */ pixDestroy(&pix); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return (PIX *)ERROR_PTR("cmap, tRNS, but no transparency array", procName, NULL); } /* Save the cmap and destroy the pix */ cmap = pixcmapCopy(pixGetColormap(pix)); ncolors = pixcmapGetCount(cmap); pixDestroy(&pix); /* Start over with 32 bit RGBA */ pix = pixCreate(w, h, 32); wpl = pixGetWpl(pix); data = pixGetData(pix); pixSetSpp(pix, 4); #if DEBUG_READ fprintf(stderr, "ncolors = %d, num_trans = %d\n", ncolors, num_trans); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if (i < num_trans) { fprintf(stderr, "(r,g,b,a) = (%d,%d,%d,%d)\n", rval, gval, bval, trans[i]); } else { fprintf(stderr, "(r,g,b,a) = (%d,%d,%d,<<255>>)\n", rval, gval, bval); } } #endif /* DEBUG_READ */ /* Extract the data and convert to RGBA */ for (i = 0; i < h; i++) { ppixel = data + i * wpl; rowptr = row_pointers[i]; for (j = 0; j < w; j++) { index = rowptr[j]; pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, ppixel); /* Assume missing entries to be 255 (opaque) according * to the spec: http://www.w3.org/TR/PNG/#11tRNS */ SET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL, index < num_trans ? trans[index] : 255); ppixel++; } } pixcmapDestroy(&cmap); } } #if DEBUG_READ if (cmap) { for (i = 0; i < 16; i++) { fprintf(stderr, "[%d] = %d\n", i, ((l_uint8 *)(cmap->array))[i]); } } #endif /* DEBUG_READ */ /* If there is no colormap, PNG defines black = 0 and * white = 1 by default for binary monochrome. Therefore, * since we use the opposite definition, we must invert * the image colors in either of these cases: * (i) there is no colormap (default) * (ii) there is a colormap which defines black to * be 0 and white to be 1. * We cannot use the PNG_TRANSFORM_INVERT_MONO flag * because that flag (since version 1.0.9) inverts 8 bpp * grayscale as well, which we don't want to do. * (It also doesn't work if there is a colormap.) * If there is a colormap that defines black = 1 and * white = 0, we don't need to do anything. * * How do we check the polarity of the colormap? * The colormap determines the values of black and * white pixels in the following way: * if black = 1 (255), white = 0 * 255, 255, 255, 0, 0, 0, 0, 0, 0 * if black = 0, white = 1 (255) * 0, 0, 0, 0, 255, 255, 255, 0 * So we test the first byte to see if it is 0; * if so, invert the colors. * * If there is a colormap, after inverting the pixels it is * necessary to destroy the colormap. Otherwise, if someone were * to call pixRemoveColormap(), this would cause the pixel * values to be inverted again! */ if (d == 1 && (!cmap || (cmap && ((l_uint8 *)(cmap->array))[0] == 0x0))) { /* fprintf(stderr, "Inverting binary data on png read\n"); */ pixInvert(pix, pix); pixDestroyColormap(pix); } xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ /* Get the text if there is any */ png_get_text(png_ptr, info_ptr, &text_ptr, &num_text); if (num_text && text_ptr) pixSetText(pix, text_ptr->text); png_destroy_read_struct(&png_ptr, &info_ptr, &end_info); return pix; } /*! * readHeaderPng() * * Input: filename * &w () * &h () * &bps (, bits/sample) * &spp (, samples/pixel) * &iscmap () * Return: 0 if OK, 1 on error * * Notes: * (1) If there is a colormap, iscmap is returned as 1; else 0. * (2) For gray+alpha, although the png records bps = 16, we * consider this as two 8 bpp samples (gray and alpha). * When a gray+alpha is read, it is converted to 32 bpp RGBA. */ l_int32 readHeaderPng(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 ret; FILE *fp; PROCNAME("readHeaderPng"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); ret = freadHeaderPng(fp, pw, ph, pbps, pspp, piscmap); fclose(fp); return ret; } /*! * freadHeaderPng() * * Input: stream * &w () * &h () * &bps (, bits/sample) * &spp (, samples/pixel) * &iscmap () * Return: 0 if OK, 1 on error * * Notes: * (1) See readHeaderPng(). */ l_int32 freadHeaderPng(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_int32 nbytes, ret; l_uint8 *data; PROCNAME("freadHeaderPng"); if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; if (!fp) return ERROR_INT("stream not defined", procName, 1); nbytes = fnbytesInFile(fp); if (nbytes < 40) return ERROR_INT("file too small to be png", procName, 1); if ((data = (l_uint8 *)CALLOC(40, sizeof(l_uint8))) == NULL) return ERROR_INT("CALLOC fail for data", procName, 1); if (fread(data, 1, 40, fp) != 40) return ERROR_INT("error reading data", procName, 1); ret = sreadHeaderPng(data, pw, ph, pbps, pspp, piscmap); FREE(data); return ret; } /*! * sreadHeaderPng() * * Input: data * &w () * &h () * &bps (, bits/sample) * &spp (, samples/pixel) * &iscmap (; input NULL to ignore) * Return: 0 if OK, 1 on error * * Notes: * (1) See readHeaderPng(). * (2) png colortypes (see png.h: PNG_COLOR_TYPE_*): * 0: gray; fully transparent (with tRNS) (1 spp) * 2: RGB (3 spp) * 3: colormap; colormap+alpha (with tRNS) (1 spp) * 4: gray + alpha (2 spp) * 6: RGBA (4 spp) * Note: * 0 and 3 have the alpha information in a tRNS chunk * 4 and 6 have separate alpha samples with each pixel. */ l_int32 sreadHeaderPng(const l_uint8 *data, l_int32 *pw, l_int32 *ph, l_int32 *pbps, l_int32 *pspp, l_int32 *piscmap) { l_uint16 twobytes; l_uint16 *pshort; l_int32 colortype, bps, spp; l_uint32 *pword; PROCNAME("sreadHeaderPng"); if (!data) return ERROR_INT("data not defined", procName, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pbps) *pbps = 0; if (pspp) *pspp = 0; if (piscmap) *piscmap = 0; /* Check password */ if (data[0] != 137 || data[1] != 80 || data[2] != 78 || data[3] != 71 || data[4] != 13 || data[5] != 10 || data[6] != 26 || data[7] != 10) return ERROR_INT("not a valid png file", procName, 1); pword = (l_uint32 *)data; pshort = (l_uint16 *)data; if (pw) *pw = convertOnLittleEnd32(pword[4]); if (ph) *ph = convertOnLittleEnd32(pword[5]); twobytes = convertOnLittleEnd16(pshort[12]); /* contains depth/sample */ /* and the color type */ colortype = twobytes & 0xff; /* color type */ bps = twobytes >> 8; /* bits/sample */ /* Special case with alpha that is extracted as RGBA. * Note that the cmap+alpha is also extracted as RGBA, * but only if the tRNS chunk exists, which we can't tell * by this simple parser.*/ if (colortype == 4) L_INFO("gray + alpha: will extract as RGBA (spp = 4)\n", procName); if (colortype == 2) { /* RGB */ spp = 3; } else if (colortype == 6) { /* RGBA */ spp = 4; } else if (colortype == 4) { /* gray + alpha */ spp = 2; bps = 8; /* both the gray and alpha are 8-bit samples */ } else { /* gray (0) or cmap (3) or cmap+alpha (3) */ spp = 1; } if (pbps) *pbps = bps; if (pspp) *pspp = spp; if (piscmap) { if (colortype & 1) /* palette */ *piscmap = 1; else *piscmap = 0; } return 0; } /* * fgetPngResolution() * * Input: stream (opened for read) * &xres, &yres ( resolution in ppi) * Return: 0 if OK; 0 on error * * Notes: * (1) If neither resolution field is set, this is not an error; * the returned resolution values are 0 (designating 'unknown'). * (2) Side-effect: this rewinds the stream. */ l_int32 fgetPngResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { png_uint_32 xres, yres; png_structp png_ptr; png_infop info_ptr; PROCNAME("fgetPngResolution"); if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", procName, 1); *pxres = *pyres = 0; if (!fp) return ERROR_INT("stream not opened", procName, 1); /* Make the two required structs */ if ((png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return ERROR_INT("png_ptr not made", procName, 1); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); return ERROR_INT("info_ptr not made", procName, 1); } /* Set up png setjmp error handling. * Without this, an error calls exit. */ if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); return ERROR_INT("internal png error", procName, 1); } /* Read the metadata */ rewind(fp); png_init_io(png_ptr, fp); png_read_png(png_ptr, info_ptr, 0, NULL); xres = png_get_x_pixels_per_meter(png_ptr, info_ptr); yres = png_get_y_pixels_per_meter(png_ptr, info_ptr); *pxres = (l_int32)((l_float32)xres / 39.37 + 0.5); /* to ppi */ *pyres = (l_int32)((l_float32)yres / 39.37 + 0.5); png_destroy_read_struct(&png_ptr, &info_ptr, NULL); rewind(fp); return 0; } /*---------------------------------------------------------------------* * Writing png * *---------------------------------------------------------------------*/ /*! * pixWritePng() * * Input: filename * pix * gamma * Return: 0 if OK; 1 on error * * Notes: * (1) Special version for writing png with a specified gamma. * When using pixWrite(), no field is given for gamma. */ l_int32 pixWritePng(const char *filename, PIX *pix, l_float32 gamma) { FILE *fp; PROCNAME("pixWritePng"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (pixWriteStreamPng(fp, pix, gamma)) { fclose(fp); return ERROR_INT("pix not written to stream", procName, 1); } fclose(fp); return 0; } /*! * pixWriteStreamPng() * * Input: stream * pix * gamma (use 0.0 if gamma is not defined) * Return: 0 if OK; 1 on error * * Notes: * (1) If called from pixWriteStream(), the stream is positioned * at the beginning of the file. * (2) To do sequential writes of png format images to a stream, * use pixWriteStreamPng() directly. * (3) gamma is an optional png chunk. If no gamma value is to be * placed into the file, use gamma = 0.0. Otherwise, if * gamma > 0.0, its value is written into the header. * (4) The use of gamma in png is highly problematic. For an illuminating * discussion, see: http://hsivonen.iki.fi/png-gamma/ * (5) What is the effect/meaning of gamma in the png file? This * gamma, which we can call the 'source' gamma, is the * inverse of the gamma that was used in enhance.c to brighten * or darken images. The 'source' gamma is supposed to indicate * the intensity mapping that was done at the time the * image was captured. Display programs typically apply a * 'display' gamma of 2.2 to the output, which is intended * to linearize the intensity based on the response of * thermionic tubes (CRTs). Flat panel LCDs have typically * been designed to give a similar response as CRTs (call it * "backward compatibility"). The 'display' gamma is * in some sense the inverse of the 'source' gamma. * jpeg encoders attached to scanners and cameras will lighten * the pixels, applying a gamma corresponding to approximately * a square-root relation of output vs input: * output = input^(gamma) * where gamma is often set near 0.4545 (1/gamma is 2.2). * This is stored in the image file. Then if the display * program reads the gamma, it will apply a display gamma, * typically about 2.2; the product is 1.0, and the * display program produces a linear output. This works because * the dark colors were appropriately boosted by the scanner, * as described by the 'source' gamma, so they should not * be further boosted by the display program. * (6) As an example, with xv and display, if no gamma is stored, * the program acts as if gamma were 0.4545, multiplies this by 2.2, * and does a linear rendering. Taking this as a baseline * brightness, if the stored gamma is: * > 0.4545, the image is rendered lighter than baseline * < 0.4545, the image is rendered darker than baseline * In contrast, gqview seems to ignore the gamma chunk in png. * (7) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16 * and 32. However, it is possible, and in some cases desirable, * to write out a png file using an rgb pix that has 24 bpp. * For example, the open source xpdf SplashBitmap class generates * 24 bpp rgb images. Consequently, we enable writing 24 bpp pix. * To generate such a pix, you can make a 24 bpp pix without data * and assign the data array to the pix; e.g., * pix = pixCreateHeader(w, h, 24); * pixSetData(pix, rgbdata); * See pixConvert32To24() for an example, where we get rgbdata * from the 32 bpp pix. Caution: do not call pixSetPadBits(), * because the alignment is wrong and you may erase part of the * last pixel on each line. * (8) If the pix has a colormap, it is written to file. In most * situations, the alpha component is 255 for each colormap entry, * which is opaque and indicates that it should be ignored. * However, if any alpha component is not 255, it is assumed that * the alpha values are valid, and they are written to the png * file in a tRNS segment. On readback, the tRNS segment is * identified, and the colormapped image with alpha is converted * to a 4 spp rgba image. */ l_int32 pixWriteStreamPng(FILE *fp, PIX *pix, l_float32 gamma) { char commentstring[] = "Comment"; l_int32 i, j, k; l_int32 wpl, d, spp, cmflag, opaque; l_int32 ncolors, compval; l_int32 *rmap, *gmap, *bmap, *amap; l_uint32 *data, *ppixel; png_byte bit_depth, color_type; png_byte alpha[256]; png_uint_32 w, h; png_uint_32 xres, yres; png_bytep *row_pointers; png_bytep rowbuffer; png_structp png_ptr; png_infop info_ptr; png_colorp palette; PIX *pixt; PIXCMAP *cmap; char *text; PROCNAME("pixWriteStreamPng"); if (!fp) return ERROR_INT("stream not open", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); /* Allocate the 2 data structures */ if ((png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL)) == NULL) return ERROR_INT("png_ptr not made", procName, 1); if ((info_ptr = png_create_info_struct(png_ptr)) == NULL) { png_destroy_write_struct(&png_ptr, (png_infopp)NULL); return ERROR_INT("info_ptr not made", procName, 1); } /* Set up png setjmp error handling */ if (setjmp(png_jmpbuf(png_ptr))) { png_destroy_write_struct(&png_ptr, &info_ptr); return ERROR_INT("internal png error", procName, 1); } png_init_io(png_ptr, fp); /* With best zlib compression (9), get between 1 and 10% improvement * over default (6), but the compression is 3 to 10 times slower. * Use the zlib default (6) as our default compression unless * pix->special falls in the range [10 ... 19]; then subtract 10 * to get the compression value. */ compval = Z_DEFAULT_COMPRESSION; if (pix->special >= 10 && pix->special < 20) compval = pix->special - 10; png_set_compression_level(png_ptr, compval); w = pixGetWidth(pix); h = pixGetHeight(pix); d = pixGetDepth(pix); spp = pixGetSpp(pix); if ((cmap = pixGetColormap(pix))) cmflag = 1; else cmflag = 0; /* Set the color type and bit depth. */ if (d == 32 && spp == 4) { bit_depth = 8; color_type = PNG_COLOR_TYPE_RGBA; /* 6 */ cmflag = 0; /* ignore if it exists */ } else if (d == 24 || d == 32) { bit_depth = 8; color_type = PNG_COLOR_TYPE_RGB; /* 2 */ cmflag = 0; /* ignore if it exists */ } else { bit_depth = d; color_type = PNG_COLOR_TYPE_GRAY; /* 0 */ } if (cmflag) color_type = PNG_COLOR_TYPE_PALETTE; /* 3 */ #if DEBUG_WRITE fprintf(stderr, "cmflag = %d, bit_depth = %d, color_type = %d\n", cmflag, bit_depth, color_type); #endif /* DEBUG_WRITE */ png_set_IHDR(png_ptr, info_ptr, w, h, bit_depth, color_type, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE); /* Store resolution in ppm, if known */ xres = (png_uint_32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); yres = (png_uint_32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); if ((xres == 0) || (yres == 0)) png_set_pHYs(png_ptr, info_ptr, 0, 0, PNG_RESOLUTION_UNKNOWN); else png_set_pHYs(png_ptr, info_ptr, xres, yres, PNG_RESOLUTION_METER); if (cmflag) { pixcmapToArrays(cmap, &rmap, &gmap, &bmap, &amap); ncolors = pixcmapGetCount(cmap); pixcmapIsOpaque(cmap, &opaque); /* Make and save the palette */ if ((palette = (png_colorp)(CALLOC(ncolors, sizeof(png_color)))) == NULL) return ERROR_INT("palette not made", procName, 1); for (i = 0; i < ncolors; i++) { palette[i].red = (png_byte)rmap[i]; palette[i].green = (png_byte)gmap[i]; palette[i].blue = (png_byte)bmap[i]; alpha[i] = (png_byte)amap[i]; } png_set_PLTE(png_ptr, info_ptr, palette, (int)ncolors); if (!opaque) /* alpha channel has some transparency; assume valid */ png_set_tRNS(png_ptr, info_ptr, (png_bytep)alpha, (int)ncolors, NULL); FREE(rmap); FREE(gmap); FREE(bmap); FREE(amap); } /* 0.4545 is treated as the default by some image * display programs (not gqview). A value > 0.4545 will * lighten an image as displayed by xv, display, etc. */ if (gamma > 0.0) png_set_gAMA(png_ptr, info_ptr, (l_float64)gamma); if ((text = pixGetText(pix))) { png_text text_chunk; text_chunk.compression = PNG_TEXT_COMPRESSION_NONE; text_chunk.key = commentstring; text_chunk.text = text; text_chunk.text_length = strlen(text); #ifdef PNG_ITXT_SUPPORTED text_chunk.itxt_length = 0; text_chunk.lang = NULL; text_chunk.lang_key = NULL; #endif png_set_text(png_ptr, info_ptr, &text_chunk, 1); } /* Write header and palette info */ png_write_info(png_ptr, info_ptr); if ((d != 32) && (d != 24)) { /* not rgb color */ /* Generate a temporary pix with bytes swapped. * For a binary image, there are two conditions in * which you must first invert the data for writing png: * (a) no colormap * (b) colormap with BLACK set to 0 * png writes binary with BLACK = 0, unless contradicted * by a colormap. If the colormap has BLACK = "1" * (typ. about 255), do not invert the data. If there * is no colormap, you must invert the data to store * in default BLACK = 0 state. */ if (d == 1 && (!cmap || (cmap && ((l_uint8 *)(cmap->array))[0] == 0x0))) { pixt = pixInvert(NULL, pix); pixEndianByteSwap(pixt); } else { pixt = pixEndianByteSwapNew(pix); } if (!pixt) { png_destroy_write_struct(&png_ptr, &info_ptr); return ERROR_INT("pixt not made", procName, 1); } /* Make and assign array of image row pointers */ if ((row_pointers = (png_bytep *)CALLOC(h, sizeof(png_bytep))) == NULL) return ERROR_INT("row-pointers not made", procName, 1); wpl = pixGetWpl(pixt); data = pixGetData(pixt); for (i = 0; i < h; i++) row_pointers[i] = (png_bytep)(data + i * wpl); png_set_rows(png_ptr, info_ptr, row_pointers); /* Transfer the data */ png_write_image(png_ptr, row_pointers); png_write_end(png_ptr, info_ptr); if (cmflag) FREE(palette); FREE(row_pointers); pixDestroy(&pixt); png_destroy_write_struct(&png_ptr, &info_ptr); return 0; } /* For rgb, compose and write a row at a time */ data = pixGetData(pix); wpl = pixGetWpl(pix); if (d == 24) { /* See note 7 above: special case of 24 bpp rgb */ for (i = 0; i < h; i++) { ppixel = data + i * wpl; png_write_rows(png_ptr, (png_bytepp)&ppixel, 1); } } else { /* 32 bpp rgb and rgba. Write out the alpha channel if either * the pix has 4 spp or writing it is requested anyway */ if ((rowbuffer = (png_bytep)CALLOC(w, 4)) == NULL) return ERROR_INT("rowbuffer not made", procName, 1); for (i = 0; i < h; i++) { ppixel = data + i * wpl; for (j = k = 0; j < w; j++) { rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); rowbuffer[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); if (spp == 4) rowbuffer[k++] = GET_DATA_BYTE(ppixel, L_ALPHA_CHANNEL); ppixel++; } png_write_rows(png_ptr, &rowbuffer, 1); } FREE(rowbuffer); } png_write_end(png_ptr, info_ptr); if (cmflag) FREE(palette); png_destroy_write_struct(&png_ptr, &info_ptr); return 0; } /*! * pixSetZlibCompression() * * Input: pix * compval (zlib compression value) * Return: 0 if OK, 1 on error * * Notes: * (1) Valid zlib compression values are in the interval [0 ... 9], * where, as defined in zlib.h: * 0 Z_NO_COMPRESSION * 1 Z_BEST_SPEED (poorest compression) * 9 Z_BEST_COMPRESSION * For the default value, use either of these: * 6 Z_DEFAULT_COMPRESSION * -1 (resolves to Z_DEFAULT_COMPRESSION) * (2) If you use the defined constants in zlib.h instead of the * compression integers given above, you must include zlib.h. */ l_int32 pixSetZlibCompression(PIX *pix, l_int32 compval) { PROCNAME("pixSetZlibCompression"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (compval < 0 || compval > 9) { L_ERROR("Invalid zlib comp val; using default\n", procName); compval = Z_DEFAULT_COMPRESSION; } pix->special = 10 + compval; /* valid range [10 ... 19] */ return 0; } /*---------------------------------------------------------------------* * Setting flag for stripping 16 bits on reading * *---------------------------------------------------------------------*/ /*! * l_pngSetReadStrip16To8() * * Input: flag (1 for stripping 16 bpp to 8 bpp on reading; * 0 for leaving 16 bpp) * Return: void */ void l_pngSetReadStrip16To8(l_int32 flag) { var_PNG_STRIP_16_TO_8 = flag; } /*---------------------------------------------------------------------* * Read/write to memory * *---------------------------------------------------------------------*/ #if HAVE_FMEMOPEN extern FILE *open_memstream(char **data, size_t *size); extern FILE *fmemopen(void *data, size_t size, const char *mode); #endif /* HAVE_FMEMOPEN */ /*! * pixReadMemPng() * * Input: cdata (const; png-encoded) * size (of data) * Return: pix, or null on error * * Notes: * (1) The @size byte of @data must be a null character. */ PIX * pixReadMemPng(const l_uint8 *cdata, size_t size) { FILE *fp; PIX *pix; PROCNAME("pixReadMemPng"); if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); #if HAVE_FMEMOPEN if ((fp = fmemopen((void *)cdata, size, "r")) == NULL) return (PIX *)ERROR_PTR("stream not opened", procName, NULL); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); fwrite(cdata, 1, size, fp); rewind(fp); #endif /* HAVE_FMEMOPEN */ pix = pixReadStreamPng(fp); fclose(fp); if (!pix) L_ERROR("pix not read\n", procName); return pix; } /*! * pixWriteMemPng() * * Input: &data ( data of tiff compressed image) * &size ( size of returned data) * pix * gamma (use 0.0 if gamma is not defined) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixWriteStreamPng() for usage. This version writes to * memory instead of to a file stream. */ l_int32 pixWriteMemPng(l_uint8 **pdata, size_t *psize, PIX *pix, l_float32 gamma) { l_int32 ret; FILE *fp; PROCNAME("pixWriteMemPng"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); if (!psize) return ERROR_INT("&size not defined", procName, 1 ); if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", procName, 1); ret = pixWriteStreamPng(fp, pix, gamma); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); ret = pixWriteStreamPng(fp, pix, gamma); rewind(fp); *pdata = l_binaryReadStream(fp, psize); #endif /* HAVE_FMEMOPEN */ fclose(fp); return ret; } /* --------------------------------------------*/ #endif /* HAVE_LIBPNG */ /* --------------------------------------------*/ leptonica-1.70/src/makefile.mingw0000644000175000017500000003106412034463530015120 0ustar dandan#/*====================================================================* # - Copyright (C) 2001 Leptonica. All rights reserved. # - # - Redistribution and use in source and binary forms, with or without # - modification, are permitted provided that the following conditions # - are met: # - 1. Redistributions of source code must retain the above copyright # - notice, this list of conditions and the following disclaimer. # - 2. Redistributions in binary form must reproduce the above # - copyright notice, this list of conditions and the following # - disclaimer in the documentation and/or other materials # - provided with the distribution. # - # - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY # - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY # - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # *====================================================================*/ # makefile.mingw (cross-compiler for windows on linux) # # Hand-built -- editable -- simple -- makefile # # Usage Notes (Important): # (1) Only the building of optimized code has been tested # (2) To use this, download these packages (e.g., from Debian): # mingw32 (the cross-compiler) # mingw32-runtime # mingw32-binutils # The cross-compiler programs will all be installed here: # /usr/bin/mingw32msvc* # (3) Put a copy of the following header files into # /usr/local/include/mingw: # jconfig.h tiffconf.h # jerror.h tiff.h # jpeglib.h tiffio.h # pngconf.h tiffio.hxx # png.h tiffvers.h # zconf.h zlib.h # These header files should be distributed with the corresponding # 4 libraries (jpeg, png, tiff, zlib) that you link to. # See prog/Makefile.mingw for details on obtaining and using # those libraries. # # For a nodebug version: make # For a debug version: make DEBUG=yes debug # For a shared library version: make SHARED=yes shared # For all versions: make all # With nonstandard header directories # make EXTRAINCLUDES="-I" # # To remove object files in src: make clean # To remove object files and executables in prog: make clean # # Customization for machine hardware: # (1) On little-endian machines (e.g., i386, x86-64): # CPPFLAGS = $(INCLUDES) -DL_LITTLE_ENDIAN # On big-endian machines (e.g., Mac Power PC, Sun Sparc): # CPPFLAGS = $(INCLUDES) -DL_BIG_ENDIAN # (2) To generate function prototypes, you need a program called # xtractprotos. Build it with this command: # make xtractprotos # Then 'make allprotos' # # Stuff used by Makefile RM = rm -f TEST = test MKDIR = mkdir -p LIBRARIAN = i586-mingw32msvc-ar cq RANLIB = i586-mingw32msvc-ranlib # Libraries are built into a binary tree with its root in the parent directory ROOT_DIR = .. BASE_OBJ = $(ROOT_DIR)/obj OBJ_NODEBUG = $(ROOT_DIR)/obj/nodebug OBJ_DEBUG = $(ROOT_DIR)/obj/debug OBJ_SHARED = $(ROOT_DIR)/obj/shared BASE_LIB = $(ROOT_DIR)/lib LIB_NODEBUG = $(ROOT_DIR)/lib/nodebug LIB_DEBUG = $(ROOT_DIR)/lib/debug LIB_SHARED = $(ROOT_DIR)/lib/shared # Include files INCLUDES = -I./ -I/usr/local/include/mingw PROTOTYPE_DIR = . # Conditional compilation (depending on processor endian-ness) CPPFLAGS = $(INCLUDES) -DL_LITTLE_ENDIAN -D_NO_AUTOCONF_ #CPPFLAGS = $(INCLUDES) -DL_BIG_ENDIAN -D_NO_AUTOCONF_ # Shared library linker options SONAME_OPTION = -Wl,-h, ifdef SHARED OPTIMIZE = -O2 -fPIC else ifdef DEBUG OPTIMIZE = -g else OPTIMIZE = -O2 endif endif # which to use? # use -Werror to verify there are no serious warnings # use g++ to apply stricter rules. Libraries made with g++ may not # link to programs compiled with gcc (depends on the glibc version). # use -DNO_CONSOLE_IO to remove all L_INFO, L_WARNING and # ERROR_* logging, and to remove all DEBUG information dependent # on whether or not NO_CONSOLE_IO has been defined. CC = i586-mingw32msvc-gcc -ansi -D_BSD_SOURCE -DANSI #CC = i586-mingw32msvc-gcc -ansi -Werror -D_BSD_SOURCE -DANSI #CC = i586-mingw32msvc-g++ -ansi -Werror -D_BSD_SOURCE #CC = i586-mingw32msvc-gcc -ansi -Werror -DNO_CONSOLE -D_BSD_SOURCE -DANSI OPTIONS = CFLAGS = $(OPTIMIZE) $(OPTIONS) LIBRARIAN_SHARED = i586-mingw32msvc-gcc -shared # Libraries differing only in their minor revision numbers # are required to have the same interface. By using # "-h" in the ld, the "soname" is .X, where X is # the major revision number. # Links are created among the files .X.Y, # .X, and , where Y is the minor revision number. MAJOR_REV = 1 MINOR_REV = 70 ######################################################### # Libraries LEPTLIB = liblept.a LEPTLIB_SHARED = liblept.so ######################################################### LEPTLIB_C = adaptmap.c affine.c affinecompose.c \ arrayaccess.c \ bardecode.c baseline.c bbuffer.c \ bilateral.c bilinear.c binarize.c \ binexpand.c binreduce.c \ blend.c bmf.c bmpio.c bmpiostub.c \ boxbasic.c boxfunc1.c \ boxfunc2.c boxfunc3.c boxfunc4.c \ bytearray.c ccbord.c ccthin.c classapp.c \ colorcontent.c coloring.c \ colormap.c colormorph.c \ colorquant1.c colorquant2.c \ colorseg.c colorspace.c \ compare.c conncomp.c convertfiles.c \ convolve.c convolvelow.c correlscore.c \ dewarp.c dnabasic.c \ dwacomb.2.c dwacomblow.2.c \ edge.c enhance.c \ fhmtauto.c fhmtgen.1.c fhmtgenlow.1.c \ finditalic.c flipdetect.c fliphmtgen.c \ fmorphauto.c fmorphgen.1.c fmorphgenlow.1.c \ fpix1.c fpix2.c \ gifio.c gifiostub.c \ gplot.c graphics.c \ graymorph.c graymorphlow.c \ grayquant.c grayquantlow.c heap.c \ jbclass.c jpegio.c jpegiostub.c \ kernel.c libversions.c list.c maze.c mediancut.c \ morph.c morphapp.c morphdwa.c morphseq.c \ numabasic.c numafunc1.c numafunc2.c \ pageseg.c paintcmap.c \ parseprotos.c partition.c \ pdfio.c pdfiostub.c \ pix1.c pix2.c pix3.c pix4.c pix5.c \ pixabasic.c pixacc.c \ pixafunc1.c pixafunc2.c \ pixalloc.c pixarith.c \ pixcomp.c pixconv.c pixtiling.c \ pngio.c pngiostub.c pnmio.c pnmiostub.c \ projective.c psio1.c psio1stub.c \ psio2.c psio2stub.c \ ptabasic.c ptafunc1.c \ ptra.c queue.c quadtree.c rank.c \ readbarcode.c readfile.c \ recogbasic.c recogident.c recogtrain.c regutils.c \ rop.c ropiplow.c roplow.c \ rotate.c rotateam.c rotateamlow.c \ rotateorth.c rotateorthlow.c rotateshear.c \ runlength.c sarray.c \ scale.c scalelow.c \ seedfill.c seedfilllow.c \ sel1.c sel2.c selgen.c \ shear.c skew.c spixio.c \ stack.c sudoku.c \ textops.c tiffio.c tiffiostub.c \ utils.c viewfiles.c \ warper.c watershed.c \ webpio.c webpiostub.c writefile.c \ zlibmem.c zlibmemstub.c LEPTLIB_H = allheaders.h alltypes.h \ array.h arrayaccess.h bbuffer.h \ bmf.h bmp.h ccbord.h \ dewarp.h environ.h gplot.h \ heap.h imageio.h \ jbclass.h jpeglib.h \ list.h \ morph.h pix.h ptra.h queue.h \ readbarcode.h recog.h regutils.h stack.h \ sudoku.h watershed.h ################################################################## # Main targets nodebug: dirs $(LEPTLIB:%=$(LIB_NODEBUG)/%) all: make -f makefile.mingw TARGET=$(TARGET) nodebug make -f makefile.mingw TARGET=$(TARGET) DEBUG=true debug make -f makefile.mingw TARGET=$(TARGET) SHARED=true shared DEBUG_LIBS = $(LEPTLIB:%=$(LIB_DEBUG)/%) SHARED_LIBS = $(LEPTLIB_SHARED:%=$(LIB_SHARED)/%) debug: dirs $(DEBUG_LIBS) shared: dirs $(SHARED_LIBS) ################################################################## # Proto target # # Note that both of the targets below can be generated by xtractprotos # (a) without requiring the existence of leptprotos.h and (b) with # an empty allheaders.h. Both generate a new allheaders.h, and # 'make allprotos' additionally generates leptprotos.h # # In the past we generated leptprotos.h that held the function prototypes, # and included it in allheaders.h. We now insert the function prototypes # directly in allheaders.h, and do not generate a separate prototype # file leptprotos.h. allheaders: $(LEPTLIB_C) @$(TEST) -f xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -protos=inline -prestring=LEPT_DLL $(LEPTLIB_C) # You can still generate the file leptprotos.h and have it #included # in allheaders.h. If you do this, be sure to add leptprotos.h to LEPTLIB_H. allprotos: leptprotos leptprotos: $(LEPTLIB_C) @$(TEST) -f xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -protos=leptprotos.h -prestring=LEPT_DLL $(LEPTLIB_C) ################################################################## # xtractprotos xtractprotos: dirs leptlib cd ../prog; make xtractprotos; cp xtractprotos ../src xtractprotos.o: xtractprotos.c ################################################################## # Rule to make optimized library $(LIB_NODEBUG)/%.a: $(RM) $@ $(LIBRARIAN) $@ $< $(RANLIB) $@ # Rule to make debuggable library $(LIB_DEBUG)/%.a: $(RM) $@ $(LIBRARIAN) $@ $< $(RANLIB) $@ # Rule to make shared library $(LIB_SHARED)/%.so: $(RM) $@ $(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $< mv $@ $@.$(MAJOR_REV).$(MINOR_REV) cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \ ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV) $(notdir $@).$(MAJOR_REV) cd $(LIB_SHARED); rm $(notdir $@); \ ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@) ################################################################## # No-debug library dependencies and rules leptlib: $(LIB_NODEBUG)/$(LEPTLIB) $(LIB_NODEBUG)/$(LEPTLIB): $(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o) $(RM) $@ $(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o) $(RANLIB) $@ # Debug library dependencies and rules leptlibd: $(LIB_DEBUG)/$(LEPTLIB) $(LIB_DEBUG)/$(LEPTLIB): $(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o) $(RM) $@ $(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o) $(RANLIB) $@ # Shared library dependencies, rules and links leptlibs: $(LIB_SHARED)/$(LEPTLIB_SHARED) $(LIB_SHARED)/$(LEPTLIB_SHARED): $(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o) $(RM) $@ $(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o) mv $@ $@.$(MAJOR_REV).$(MINOR_REV) cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \ ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV) $(notdir $@).$(MAJOR_REV) cd $(LIB_SHARED); rm $(notdir $@); \ ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@) ######################################################### # Rules for compiling source $(OBJ_NODEBUG)/%.o: %.c $(LEPTLIB_H) @$(TEST) -d $(OBJ_NODEBUG) || $(MKDIR) $(OBJ_NODEBUG) $(COMPILE.c) -o $@ $< $(OBJ_DEBUG)/%.o: %.c $(LEPTLIB_H) @$(TEST) -d $(OBJ_DEBUG) || $(MKDIR) $(OBJ_DEBUG) $(COMPILE.c) -o $@ $< $(OBJ_SHARED)/%.o: %.c $(LEPTLIB_H) @$(TEST) -d $(OBJ_SHARED) || $(MKDIR) $(OBJ_SHARED) $(COMPILE.c) -o $@ $< ########################################################### # Prepare a local environment dirs: @$(TEST) -d $(BASE_OBJ) || $(MKDIR) $(BASE_OBJ) @$(TEST) -d $(OBJ_NODEBUG) || $(MKDIR) $(OBJ_NODEBUG) @$(TEST) -d $(OBJ_DEBUG) || $(MKDIR) $(OBJ_DEBUG) @$(TEST) -d $(OBJ_SHARED) || $(MKDIR) $(OBJ_SHARED) @$(TEST) -d $(BASE_LIB) || $(MKDIR) $(BASE_LIB) @$(TEST) -d $(LIB_NODEBUG) || $(MKDIR) $(LIB_NODEBUG) @$(TEST) -d $(LIB_DEBUG) || $(MKDIR) $(LIB_DEBUG) @$(TEST) -d $(LIB_SHARED) || $(MKDIR) $(LIB_SHARED) ########################################################### clean: $(RM) $(OBJ_NODEBUG)/*.o $(OBJ_DEBUG)/*.o \ $(OBJ_SHARED)/*.o \ $(LIB_NODEBUG)/*.a $(LIB_DEBUG)/*.a \ $(LIB_SHARED)/*.so $(LIB_SHARED)/*.so.? \ $(LIB_SHARED)/*.so.?.* \ xtractprotos.o xtractprotos ########################################################### depend: /usr/X11R6/bin/makedepend -DNO_PROTOS $(CPPFLAGS) $(LEPTLIB_C) ########################################################### # DO NOT DELETE THIS LINE -- make depend depends on it. leptonica-1.70/src/environ.h0000664000175000017500000004310712266541301014134 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_ENVIRON_H #define LEPTONICA_ENVIRON_H /*------------------------------------------------------------------------* * Defines and includes differ for Unix and Windows. Also for Windows, * * differentiate between conditionals based on platform and compiler. * * For platforms: * * _WIN32 => Windows, 32- or 64-bit * * _WIN64 => Windows, 64-bit only * * __CYGWIN__ => Cygwin * * For compilers: * * __GNUC__ => gcc * * _MSC_VER => msvc * *------------------------------------------------------------------------*/ /* MS VC++ does not provide stdint.h, so define the missing types here */ #ifndef _MSC_VER #include #else /* Note that _WIN32 is defined for both 32 and 64 bit applications, whereas _WIN64 is defined only for the latter */ #ifdef _WIN64 typedef __int64 intptr_t; typedef unsigned __int64 uintptr_t; #else typedef int intptr_t; typedef unsigned int uintptr_t; #endif /* VC++6 doesn't seem to have powf, expf. */ #if (_MSC_VER < 1400) #define powf(x, y) (float)pow((double)(x), (double)(y)) #define expf(x) (float)exp((double)(x)) #endif #endif /* _MSC_VER */ /* Windows specifics */ #ifdef _WIN32 /* DLL EXPORTS and IMPORTS */ #if defined(LIBLEPT_EXPORTS) #define LEPT_DLL __declspec(dllexport) #elif defined(LIBLEPT_IMPORTS) #define LEPT_DLL __declspec(dllimport) #else #define LEPT_DLL #endif #else /* non-Windows specifics */ #include #define LEPT_DLL #endif /* _WIN32 */ typedef intptr_t l_intptr_t; typedef uintptr_t l_uintptr_t; typedef void *L_TIMER; /*--------------------------------------------------------------------* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * USER CONFIGURABLE * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * Environment variables with I/O libraries * * Manual Configuration Only: NOT AUTO_CONF * *--------------------------------------------------------------------*/ /* * Leptonica provides interfaces to link to five external image I/O * libraries, plus zlib. Setting any of these to 0 here causes * non-functioning stubs to be linked. */ #ifndef HAVE_CONFIG_H #define HAVE_LIBJPEG 1 #define HAVE_LIBTIFF 1 #define HAVE_LIBPNG 1 #define HAVE_LIBZ 1 #define HAVE_LIBGIF 0 #define HAVE_LIBUNGIF 0 #define HAVE_LIBWEBP 0 #endif /* ~HAVE_CONFIG_H */ /* * On linux systems, you can do I/O between Pix and memory. Specifically, * you can compress (write compressed data to memory from a Pix) and * uncompress (read from compressed data in memory to a Pix). * For jpeg, png, pnm and bmp, these use the non-posix GNU functions * fmemopen() and open_memstream(). These functions are not * available on other systems. To use these functions in linux, * you must define HAVE_FMEMOPEN to be 1 here. */ #ifndef HAVE_CONFIG_H #define HAVE_FMEMOPEN 0 #endif /* ~HAVE_CONFIG_H */ /*--------------------------------------------------------------------* * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * USER CONFIGURABLE * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!* * Environ variables for uncompressed formatted image I/O * *--------------------------------------------------------------------*/ /* * Leptonica supplies image I/O for bmp, pnm, jp2k, pdf and ps. * Setting any of these to 0 causes non-functioning stubs to be linked. */ #define USE_BMPIO 1 #define USE_PNMIO 1 #define USE_JP2KIO 1 #define USE_PDFIO 1 #define USE_PSIO 1 /*--------------------------------------------------------------------* * Built-in types * *--------------------------------------------------------------------*/ typedef signed char l_int8; typedef unsigned char l_uint8; typedef short l_int16; typedef unsigned short l_uint16; typedef int l_int32; typedef unsigned int l_uint32; typedef float l_float32; typedef double l_float64; #ifdef COMPILER_MSVC typedef __int64 l_int64; typedef unsigned __int64 l_uint64; #else typedef long long l_int64; typedef unsigned long long l_uint64; #endif /* COMPILER_MSVC */ /*------------------------------------------------------------------------* * Standard macros * *------------------------------------------------------------------------*/ #ifndef L_MIN #define L_MIN(x,y) (((x) < (y)) ? (x) : (y)) #endif #ifndef L_MAX #define L_MAX(x,y) (((x) > (y)) ? (x) : (y)) #endif #ifndef L_ABS #define L_ABS(x) (((x) < 0) ? (-1 * (x)) : (x)) #endif #ifndef L_SIGN #define L_SIGN(x) (((x) < 0) ? -1 : 1) #endif #ifndef UNDEF #define UNDEF -1 #endif #ifndef NULL #define NULL 0 #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif /*--------------------------------------------------------------------* * Environment variables for endian dependence * *--------------------------------------------------------------------*/ /* * To control conditional compilation, one of two variables * * L_LITTLE_ENDIAN (e.g., for Intel X86) * L_BIG_ENDIAN (e.g., for Sun SPARC, Mac Power PC) * * is defined when the GCC compiler is invoked. * All code should compile properly for both hardware architectures. */ /*------------------------------------------------------------------------* * Simple search state variables * *------------------------------------------------------------------------*/ enum { L_NOT_FOUND = 0, L_FOUND = 1 }; /*------------------------------------------------------------------------* * Standard memory allocation * * * * These specify the memory management functions that are used * * on all heap data except for Pix. Memory management for Pix * * also defaults to malloc and free. See pix1.c for details. * *------------------------------------------------------------------------*/ #define MALLOC(blocksize) malloc(blocksize) #define CALLOC(numelem, elemsize) calloc(numelem, elemsize) #define REALLOC(ptr, blocksize) realloc(ptr, blocksize) #define FREE(ptr) free(ptr) /*------------------------------------------------------------------------* * Control printing of error, warning, and info messages * * * * To omit all messages to stderr, simply define NO_CONSOLE_IO on the * * command line. For finer grained control, we have a mechanism * * based on the message severity level. The following assumes that * * NO_CONSOLE_IO is not defined. * * * * Messages are printed if the message severity is greater than or equal * * to the current severity threshold. The current severity threshold * * is the greater of the compile-time severity, which is the minimum * * severity that can be reported, and the run-time severity, which is * * the severity threshold at the moment. * * * * The compile-time threshold determines which messages are compiled * * into the library for potential printing. Messages below the * * compile-time threshold are omitted and can never be printed. The * * default compile-time threshold is L_SEVERITY_INFO, but this may be * * overridden by defining MINIMUM_SEVERITY to the desired enumeration * * identifier on the compiler command line. Defining NO_CONSOLE_IO on * * the command line is the same as setting MINIMUM_SEVERITY to * * L_SEVERITY_NONE. * * * * The run-time threshold determines which messages are printed during * * library execution. It defaults to the compile-time threshold but * * may be changed either statically by defining DEFAULT_SEVERITY to * * the desired enumeration identifier on the compiler command line, or * * dynamically by calling setMsgSeverity() to specify a new threshold. * * The run-time threshold may also be set from the value of the * * environment variable LEPT_MSG_SEVERITY by calling setMsgSeverity() * * and specifying L_SEVERITY_EXTERNAL. * * * * In effect, the compile-time threshold setting says, "Generate code * * to permit messages of equal or greater severity than this to be * * printed, if desired," whereas the run-time threshold setting says, * * "Print messages that have an equal or greater severity than this." * *------------------------------------------------------------------------*/ enum { L_SEVERITY_EXTERNAL = 0, /* Get the severity from the environment */ L_SEVERITY_ALL = 1, /* Lowest severity: print all messages */ L_SEVERITY_DEBUG = 2, /* Print debugging and higher messages */ L_SEVERITY_INFO = 3, /* Print informational and higher messages */ L_SEVERITY_WARNING = 4, /* Print warning and higher messages */ L_SEVERITY_ERROR = 5, /* Print error and higher messages */ L_SEVERITY_NONE = 6 /* Highest severity: print no messages */ }; /* No message less than the compile-time threshold will ever be * reported, regardless of the current run-time threshold. This allows * selection of the set of messages to include in the library. For * example, setting the threshold to L_SEVERITY_WARNING eliminates all * informational messages from the library. With that setting, both * warning and error messages would be printed unless setMsgSeverity() * was called, or DEFAULT_SEVERITY was redefined, to set the run-time * severity to L_SEVERITY_ERROR. In that case, only error messages * would be printed. * * This mechanism makes the library smaller and faster, by eliminating * undesired message reporting and the associated run-time overhead for * message threshold checking, because code for messages whose severity * is lower than MINIMUM_SEVERITY won't be generated. * * A production library might typically permit WARNING and higher * messages to be generated, and a development library might permit * DEBUG and higher. The actual messages printed (as opposed to * generated) would depend on the current run-time severity threshold. */ #ifdef NO_CONSOLE_IO #undef MINIMUM_SEVERITY #undef DEFAULT_SEVERITY #define MINIMUM_SEVERITY L_SEVERITY_NONE #define DEFAULT_SEVERITY L_SEVERITY_NONE #else #ifndef MINIMUM_SEVERITY #define MINIMUM_SEVERITY L_SEVERITY_INFO /* Compile-time default */ #endif #ifndef DEFAULT_SEVERITY #define DEFAULT_SEVERITY MINIMUM_SEVERITY /* Run-time default */ #endif #endif /* The run-time message severity threshold is defined in utils.c. */ LEPT_DLL extern l_int32 LeptMsgSeverity; /* * Usage * ===== * Messages are of two types. * * (1) The messages * ERROR_INT(a,b,c) : returns l_int32 * ERROR_FLOAT(a,b,c) : returns l_float32 * ERROR_PTR(a,b,c) : returns void* * are used to return from functions and take a fixed set of parameters: * a : * b : procName * c : * where procName is the name of the local variable naming the function. * * (2) The purely informational L_* messages * L_ERROR(a,...) * L_WARNING(a,...) * L_INFO(a,...) * do not take a return value, but they take at least two parameters: * a : with optional format conversions * v1 : procName (this must be included as the first vararg) * v2, ... : optional varargs to match format converters in the message * * To return an error from a function that returns void, use: * L_ERROR(, procName, [...]) * return; * * Implementation details * ====================== * Messages are defined with the IF_SEV macro. The first parameter is * the message severity, the second is the function to call if the * message is to be printed, and the third is the return value if the * message is to be suppressed. For example, we might have an * informational message defined as: * * IF_SEV(L_SEVERITY_INFO, fprintf(.......), 0) * * The macro expands into a conditional. Because the first comparison * is between two constants, an optimizing compiler will remove either * the comparison (if it's true) or the entire macro expansion (if it * is false). This means that there is no run-time overhead for * messages whose severity falls below the minimum specified at compile * time, and for others the overhead is one (not two) comparisons. * * The L_nnn() macros below do not return a value, but because the * conditional operator requires one for the false condition, we * specify a void expression. */ #ifdef NO_CONSOLE_IO #define PROCNAME(name) #define ERROR_INT(a,b,c) ((l_int32)(c)) #define ERROR_FLOAT(a,b,c) ((l_float32)(c)) #define ERROR_PTR(a,b,c) ((void *)(c)) #define L_ERROR(a,...) #define L_WARNING(a,...) #define L_INFO(a,...) #else #define PROCNAME(name) static const char procName[] = name #define IF_SEV(l,t,f) \ ((l) >= MINIMUM_SEVERITY && (l) >= LeptMsgSeverity ? (t) : (f)) #define ERROR_INT(a,b,c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorInt((a),(b),(c)), (l_int32)(c)) #define ERROR_FLOAT(a,b,c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorFloat((a),(b),(c)), (l_float32)(c)) #define ERROR_PTR(a,b,c) \ IF_SEV(L_SEVERITY_ERROR, returnErrorPtr((a),(b),(c)), (void *)(c)) #define L_ERROR(a,...) \ IF_SEV(L_SEVERITY_ERROR, \ (void)fprintf(stderr, "Error in %s: " a, __VA_ARGS__), \ (void)0) #define L_WARNING(a,...) \ IF_SEV(L_SEVERITY_WARNING, \ (void)fprintf(stderr, "Warning in %s: " a, __VA_ARGS__), \ (void)0) #define L_INFO(a,...) \ IF_SEV(L_SEVERITY_INFO, \ (void)fprintf(stderr, "Info in %s: " a, __VA_ARGS__), \ (void)0) #if 0 /* Alternative method for controlling L_* message output */ #define L_ERROR(a,...) \ { if (L_SEVERITY_ERROR >= MINIMUM_SEVERITY && \ L_SEVERITY_ERROR >= LeptMsgSeverity) \ fprintf(stderr, "Error in %s: " a, __VA_ARGS__) \ } #define L_WARNING(a,...) \ { if (L_SEVERITY_WARNING >= MINIMUM_SEVERITY && \ L_SEVERITY_WARNING >= LeptMsgSeverity) \ fprintf(stderr, "Warning in %s: " a, __VA_ARGS__) \ } #define L_INFO(a,...) \ { if (L_SEVERITY_INFO >= MINIMUM_SEVERITY && \ L_SEVERITY_INFO >= LeptMsgSeverity) \ fprintf(stderr, "Info in %s: " a, __VA_ARGS__) \ } #endif #endif /* NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * snprintf() renamed in MSVC * *------------------------------------------------------------------------*/ #ifdef _MSC_VER #define snprintf(buf, size, ...) _snprintf_s(buf, size, _TRUNCATE, __VA_ARGS__) #endif #endif /* LEPTONICA_ENVIRON_H */ leptonica-1.70/src/webpio.c0000644000175000017500000002704212244232066013733 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * webpio.c * * Reading WebP * PIX *pixReadStreamWebP() * PIX *pixReadMemWebP() * * Reading WebP header * l_int32 readHeaderWebP() * * Writing WebP * l_int32 pixWriteWebP() [ special top level ] * l_int32 pixWriteStreamWebP() * l_int32 pixWriteMemWebP() */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if HAVE_LIBWEBP /* defined in environ.h */ /* --------------------------------------------*/ #include "webp/decode.h" #include "webp/encode.h" /*---------------------------------------------------------------------* * Reading WebP * *---------------------------------------------------------------------*/ /*! * pixReadStreamWebP() * * Input: stream corresponding to WebP image * Return: pix (32 bpp), or null on error */ PIX * pixReadStreamWebP(FILE *fp) { l_uint8 *filedata; size_t filesize; PIX *pix; PROCNAME("pixReadStreamWebP"); if (!fp) return (PIX *)ERROR_PTR("fp not defined", procName, NULL); /* Read data from file and decode into Y,U,V arrays */ rewind(fp); if ((filedata = l_binaryReadStream(fp, &filesize)) == NULL) return (PIX *)ERROR_PTR("filedata not read", procName, NULL); pix = pixReadMemWebP(filedata, filesize); FREE(filedata); return pix; } /*! * pixReadMemWebP() * * Input: filedata (webp compressed data in memory) * filesize (number of bytes in data) * Return: pix (32 bpp), or null on error * * Notes: * (1) When the encoded data only has 3 channels (no alpha), * WebPDecodeRGBAInto() generates a raster of 32-bit pixels, with * the alpha channel set to opaque (255). * (2) We don't need to use the gnu runtime functions like fmemopen() * for redirecting data from a stream to memory, because * the webp library has been written with memory-to-memory * functions at the lowest level (which is good!). And, in * any event, fmemopen() doesn't work with l_binaryReadStream(). */ PIX * pixReadMemWebP(const l_uint8 *filedata, size_t filesize) { l_uint8 *out = NULL; l_int32 w, h, has_alpha, wpl, stride; l_uint32 *data; size_t size; PIX *pix; WebPBitstreamFeatures features; PROCNAME("pixReadMemWebP"); if (!filedata) return (PIX *)ERROR_PTR("filedata not defined", procName, NULL); if (WebPGetFeatures(filedata, filesize, &features)) return (PIX *)ERROR_PTR("Invalid WebP file", procName, NULL); w = features.width; h = features.height; has_alpha = features.has_alpha; /* Write from compressed Y,U,V arrays to pix raster data */ pix = pixCreate(w, h, 32); if (has_alpha) pixSetSpp(pix, 4); data = pixGetData(pix); wpl = pixGetWpl(pix); stride = wpl * 4; size = stride * h; out = WebPDecodeRGBAInto(filedata, filesize, (uint8_t *)data, size, stride); if (out == NULL) { /* error: out should also point to data */ pixDestroy(&pix); return (PIX *)ERROR_PTR("WebP decode failed", procName, NULL); } /* WebP decoder emits opposite byte order for RGBA components */ pixEndianByteSwap(pix); return pix; } /*! * readHeaderWebP() * * Input: filename * &w ( width) * &h ( height) * &spp ( spp (3 or 4)) * Return: 0 if OK, 1 on error */ l_int32 readHeaderWebP(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { l_uint8 data[100]; /* expect size info within the first 50 bytes or so */ l_int32 nbytes, bytesread; size_t filesize; FILE *fp; WebPBitstreamFeatures features; PROCNAME("readHeaderWebP"); if (!pw || !ph || !pspp) return ERROR_INT("input ptr(s) not defined", procName, 1); *pw = *ph = *pspp = 0; if (!filename) return ERROR_INT("filename not defined", procName, 1); /* Read no more than 100 bytes from the file */ if ((filesize = nbytesInFile(filename)) == 0) return ERROR_INT("no file size found", procName, 1); if (filesize < 100) L_WARNING("very small webp file\n", procName); nbytes = L_MIN(filesize, 100); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); bytesread = fread((char *)data, 1, nbytes, fp); fclose(fp); if (bytesread != nbytes) return ERROR_INT("failed to read requested data", procName, 1); if (WebPGetFeatures(data, nbytes, &features)) return ERROR_INT("invalid WebP file", procName, 1); *pw = features.width; *ph = features.height; *pspp = (features.has_alpha) ? 4 : 3; return 0; } /*---------------------------------------------------------------------* * Writing WebP * *---------------------------------------------------------------------*/ /*! * pixWriteWebP() * * Input: filename * pixs * quality (0 - 100; default ~80) * lossless (use 1 for lossless; 0 for lossy) * Return: 0 if OK, 1 on error * * Notes: * (1) Special top-level function allowing specification of quality. */ l_int32 pixWriteWebP(const char *filename, PIX *pixs, l_int32 quality, l_int32 lossless) { FILE *fp; PROCNAME("pixWriteWebP"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (pixWriteStreamWebP(fp, pixs, quality, lossless) != 0) { fclose(fp); return ERROR_INT("pixs not compressed to stream", procName, 1); } fclose(fp); return 0; } /*! * pixWriteStreampWebP() * * Input: stream * pixs (all depths) * quality (0 - 100; default ~80) * lossless (use 1 for lossless; 0 for lossy) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixWriteMemWebP() for details. * (2) Use 'free', and not leptonica's 'FREE', for all heap data * that is returned from the WebP library. */ l_int32 pixWriteStreamWebP(FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless) { l_uint8 *filedata; size_t filebytes, nbytes; PROCNAME("pixWriteStreamWebP"); if (!fp) return ERROR_INT("stream not open", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixWriteMemWebP(&filedata, &filebytes, pixs, quality, lossless); rewind(fp); nbytes = fwrite(filedata, 1, filebytes, fp); free(filedata); if (nbytes != filebytes) return ERROR_INT("Write error", procName, 1); return 0; } /*! * pixWriteMemWebP() * * Input: &encdata ( webp encoded data of pixs) * &encsize ( size of webp encoded data) * pixs (any depth, cmapped OK) * quality (0 - 100; default ~80) * lossless (use 1 for lossless; 0 for lossy) * Return: 0 if OK, 1 on error * * Notes: * (1) Lossless and lossy encoding are entirely different in webp. * @quality applies to lossy, and is ignored for lossless. * (2) The input image is converted to RGB if necessary. If spp == 3, * we set the alpha channel to fully opaque (255), and * WebPEncodeRGBA() then removes the alpha chunk when encoding, * setting the internal header field has_alpha to 0. */ l_int32 pixWriteMemWebP(l_uint8 **pencdata, size_t *pencsize, PIX *pixs, l_int32 quality, l_int32 lossless) { l_int32 w, h, d, wpl, stride; l_uint32 *data; PIX *pix1, *pix2; PROCNAME("pixWriteMemWebP"); if (!pencdata) return ERROR_INT("&encdata not defined", procName, 1); *pencdata = NULL; if (!pencsize) return ERROR_INT("&encsize not defined", procName, 1); *pencsize = 0; if (!pixs) return ERROR_INT("&pixs not defined", procName, 1); if (lossless == 0 && (quality < 0 || quality > 100)) return ERROR_INT("quality not in [0 ... 100]", procName, 1); if ((pix1 = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR)) == NULL) return ERROR_INT("failure to remove color map", procName, 1); /* Convert to rgb if not 32 bpp; pix2 must not be a clone of pixs. */ if (pixGetDepth(pix1) != 32) pix2 = pixConvertTo32(pix1); else pix2 = pixCopy(NULL, pix1); pixDestroy(&pix1); pixGetDimensions(pix2, &w, &h, &d); if (w <= 0 || h <= 0 || d != 32) { pixDestroy(&pix2); return ERROR_INT("pix2 not 32 bpp or of 0 size", procName, 1); } /* If spp == 3, need to set alpha layer to opaque (all 1s). */ if (pixGetSpp(pix2) == 3) pixSetComponentArbitrary(pix2, L_ALPHA_CHANNEL, 255); /* Webp encoder assumes big-endian byte order for RGBA components */ pixEndianByteSwap(pix2); wpl = pixGetWpl(pix2); data = pixGetData(pix2); stride = wpl * 4; if (lossless) { *pencsize = WebPEncodeLosslessRGBA((uint8_t *)data, w, h, stride, pencdata); } else { *pencsize = WebPEncodeRGBA((uint8_t *)data, w, h, stride, quality, pencdata); } pixDestroy(&pix2); if (*pencsize == 0) { free(pencdata); *pencdata = NULL; return ERROR_INT("webp encoding failed", procName, 1); } return 0; } /* --------------------------------------------*/ #endif /* HAVE_LIBWEBP */ /* --------------------------------------------*/ leptonica-1.70/src/pnmiostub.c0000644000175000017500000000727712154432432014475 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pnmiostub.c * * Stubs for pnmio.c functions */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PNMIO /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamPnm(FILE *fp) { return (PIX * )ERROR_PTR("function not present", "pixReadStreamPnm", NULL); } /* ----------------------------------------------------------------------*/ l_int32 readHeaderPnm(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", "readHeaderPnm", 1); } /* ----------------------------------------------------------------------*/ l_int32 freadHeaderPnm(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", "freadHeaderPnm", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamPnm(FILE *fp, PIX *pix) { return ERROR_INT("function not present", "pixWriteStreamPnm", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamAsciiPnm(FILE *fp, PIX *pix) { return ERROR_INT("function not present", "pixWriteStreamAsciiPnm", 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemPnm(const l_uint8 *cdata, size_t size) { return (PIX * )ERROR_PTR("function not present", "pixReadMemPnm", NULL); } /* ----------------------------------------------------------------------*/ l_int32 sreadHeaderPnm(const l_uint8 *cdata, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pd, l_int32 *ptype, l_int32 *pbps, l_int32 *pspp) { return ERROR_INT("function not present", "sreadHeaderPnm", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemPnm(l_uint8 **pdata, size_t *psize, PIX *pix) { return ERROR_INT("function not present", "pixWriteMemPnm", 1); } /* --------------------------------------------*/ #endif /* !USE_PNMIO */ /* --------------------------------------------*/ leptonica-1.70/src/boxfunc3.c0000644000175000017500000012756312244217140014202 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * boxfunc3.c * * Boxa/Boxaa painting into pix * PIX *pixMaskConnComp() * PIX *pixMaskBoxa() * PIX *pixPaintBoxa() * PIX *pixSetBlackOrWhiteBoxa() * PIX *pixPaintBoxaRandom() * PIX *pixBlendBoxaRandom() * PIX *pixDrawBoxa() * PIX *pixDrawBoxaRandom() * PIX *boxaaDisplay() * * Split mask components into Boxa * BOXA *pixSplitIntoBoxa() * BOXA *pixSplitComponentIntoBoxa() * static l_int32 pixSearchForRectangle() * * Comparison between boxa * l_int32 boxaCompareRegions() * * See summary in pixPaintBoxa() of various ways to paint and draw * boxes on images. */ #include "allheaders.h" static l_int32 pixSearchForRectangle(PIX *pixs, BOX *boxs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 sideflag, BOXA *boxat, NUMA *nascore); #ifndef NO_CONSOLE_IO #define DEBUG_SPLIT 0 #endif /* ~NO_CONSOLE_IO */ /*---------------------------------------------------------------------* * Boxa/Boxaa painting into Pix * *---------------------------------------------------------------------*/ /*! * pixMaskConnComp() * * Input: pixs (1 bpp) * connectivity (4 or 8) * &boxa ( bounding boxes of c.c.) * Return: pixd (1 bpp mask over the c.c.), or null on error * * Notes: * (1) This generates a mask image with ON pixels over the * b.b. of the c.c. in pixs. If there are no ON pixels in pixs, * pixd will also have no ON pixels. */ PIX * pixMaskConnComp(PIX *pixs, l_int32 connectivity, BOXA **pboxa) { BOXA *boxa; PIX *pixd; PROCNAME("pixMaskConnComp"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); boxa = pixConnComp(pixs, NULL, connectivity); pixd = pixCreateTemplate(pixs); if (boxaGetCount(boxa) != 0) pixMaskBoxa(pixd, pixd, boxa, L_SET_PIXELS); if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); return pixd; } /*! * pixMaskBoxa() * * Input: pixd ( may be null) * pixs (any depth; not cmapped) * boxa (of boxes, to paint) * op (L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * Return: pixd (with masking op over the boxes), or null on error * * Notes: * (1) This can be used with: * pixd = NULL (makes a new pixd) * pixd = pixs (in-place) * (2) If pixd == NULL, this first makes a copy of pixs, and then * bit-twiddles over the boxes. Otherwise, it operates directly * on pixs. * (3) This simple function is typically used with 1 bpp images. * It uses the 1-image rasterop function, rasteropUniLow(), * to set, clear or flip the pixels in pixd. * (4) If you want to generate a 1 bpp mask of ON pixels from the boxes * in a Boxa, in a pix of size (w,h): * pix = pixCreate(w, h, 1); * pixMaskBoxa(pix, pix, boxa, L_SET_PIXELS); */ PIX * pixMaskBoxa(PIX *pixd, PIX *pixs, BOXA *boxa, l_int32 op) { l_int32 i, n, x, y, w, h; BOX *box; PROCNAME("pixMaskBoxa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is cmapped", procName, NULL); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("if pixd, must be in-place", procName, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return (PIX *)ERROR_PTR("invalid op", procName, NULL); pixd = pixCopy(pixd, pixs); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to mask\n", procName); return pixd; } for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); if (op == L_SET_PIXELS) pixRasterop(pixd, x, y, w, h, PIX_SET, NULL, 0, 0); else if (op == L_CLEAR_PIXELS) pixRasterop(pixd, x, y, w, h, PIX_CLR, NULL, 0, 0); else /* op == L_FLIP_PIXELS */ pixRasterop(pixd, x, y, w, h, PIX_NOT(PIX_DST), NULL, 0, 0); boxDestroy(&box); } return pixd; } /*! * pixPaintBoxa() * * Input: pixs (any depth, can be cmapped) * boxa (of boxes, to paint) * val (rgba color to paint) * Return: pixd (with painted boxes), or null on error * * Notes: * (1) If pixs is 1 bpp or is colormapped, it is converted to 8 bpp * and the boxa is painted using a colormap; otherwise, * it is converted to 32 bpp rgb. * (2) There are several ways to display a box on an image: * * Paint it as a solid color * * Draw the outline * * Blend the outline or region with the existing image * We provide painting and drawing here; blending is in blend.c. * When painting or drawing, the result can be either a * cmapped image or an rgb image. The dest will be cmapped * if the src is either 1 bpp or has a cmap that is not full. * To force RGB output, use pixConvertTo8(pixs, FALSE) * before calling any of these paint and draw functions. */ PIX * pixPaintBoxa(PIX *pixs, BOXA *boxa, l_uint32 val) { l_int32 i, n, d, rval, gval, bval, newindex; l_int32 mapvacancy; /* true only if cmap and not full */ BOX *box; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixPaintBoxa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to paint; returning a copy\n", procName); return pixCopy(NULL, pixs); } mapvacancy = FALSE; if ((cmap = pixGetColormap(pixs)) != NULL) { if (pixcmapGetCount(cmap) < 256) mapvacancy = TRUE; } if (pixGetDepth(pixs) == 1 || mapvacancy) pixd = pixConvertTo8(pixs, TRUE); else pixd = pixConvertTo32(pixs); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); d = pixGetDepth(pixd); if (d == 8) { /* colormapped */ cmap = pixGetColormap(pixd); extractRGBValues(val, &rval, &gval, &bval); if (pixcmapAddNewColor(cmap, rval, gval, bval, &newindex)) return (PIX *)ERROR_PTR("cmap full; can't add", procName, NULL); } for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (d == 8) pixSetInRectArbitrary(pixd, box, newindex); else pixSetInRectArbitrary(pixd, box, val); boxDestroy(&box); } return pixd; } /*! * pixSetBlackOrWhiteBoxa() * * Input: pixs (any depth, can be cmapped) * boxa ( of boxes, to clear or set) * op (L_SET_BLACK, L_SET_WHITE) * Return: pixd (with boxes filled with white or black), or null on error */ PIX * pixSetBlackOrWhiteBoxa(PIX *pixs, BOXA *boxa, l_int32 op) { l_int32 i, n, d, index; l_uint32 color; BOX *box; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixSetBlackOrWhiteBoxa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return pixCopy(NULL, pixs); if ((n = boxaGetCount(boxa)) == 0) return pixCopy(NULL, pixs); pixd = pixCopy(NULL, pixs); d = pixGetDepth(pixd); if (d == 1) { for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (op == L_SET_WHITE) pixClearInRect(pixd, box); else pixSetInRect(pixd, box); boxDestroy(&box); } return pixd; } cmap = pixGetColormap(pixs); if (cmap) { color = (op == L_SET_WHITE) ? 1 : 0; pixcmapAddBlackOrWhite(cmap, color, &index); } else if (d == 8) { color = (op == L_SET_WHITE) ? 0xff : 0x0; } else if (d == 32) { color = (op == L_SET_WHITE) ? 0xffffff00 : 0x0; } else if (d == 2) { color = (op == L_SET_WHITE) ? 0x3 : 0x0; } else if (d == 4) { color = (op == L_SET_WHITE) ? 0xf : 0x0; } else if (d == 16) { color = (op == L_SET_WHITE) ? 0xffff : 0x0; } else { pixDestroy(&pixd); return (PIX *)ERROR_PTR("invalid depth", procName, NULL); } for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (cmap) pixSetInRectArbitrary(pixd, box, index); else pixSetInRectArbitrary(pixd, box, color); boxDestroy(&box); } return pixd; } /*! * pixPaintBoxaRandom() * * Input: pixs (any depth, can be cmapped) * boxa (of boxes, to paint) * Return: pixd (with painted boxes), or null on error * * Notes: * (1) If pixs is 1 bpp, we paint the boxa using a colormap; * otherwise, we convert to 32 bpp. * (2) We use up to 254 different colors for painting the regions. * (3) If boxes overlap, the later ones paint over earlier ones. */ PIX * pixPaintBoxaRandom(PIX *pixs, BOXA *boxa) { l_int32 i, n, d, rval, gval, bval, index; l_uint32 val; BOX *box; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixPaintBoxaRandom"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to paint; returning a copy\n", procName); return pixCopy(NULL, pixs); } if (pixGetDepth(pixs) == 1) pixd = pixConvert1To8(NULL, pixs, 255, 0); else pixd = pixConvertTo32(pixs); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmap = pixcmapCreateRandom(8, 1, 1); d = pixGetDepth(pixd); if (d == 8) /* colormapped */ pixSetColormap(pixd, cmap); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); index = 1 + (i % 254); if (d == 8) { pixSetInRectArbitrary(pixd, box, index); } else { /* d == 32 */ pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &val); pixSetInRectArbitrary(pixd, box, val); } boxDestroy(&box); } if (d == 32) pixcmapDestroy(&cmap); return pixd; } /*! * pixBlendBoxaRandom() * * Input: pixs (any depth; can be cmapped) * boxa (of boxes, to blend/paint) * fract (of box color to use) * Return: pixd (32 bpp, with blend/painted boxes), or null on error * * Notes: * (1) pixs is converted to 32 bpp. * (2) This differs from pixPaintBoxaRandom(), in that the * colors here are blended with the color of pixs. * (3) We use up to 254 different colors for painting the regions. * (4) If boxes overlap, the final color depends only on the last * rect that is used. */ PIX * pixBlendBoxaRandom(PIX *pixs, BOXA *boxa, l_float32 fract) { l_int32 i, n, rval, gval, bval, index; l_uint32 val; BOX *box; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixBlendBoxaRandom"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to paint; returning a copy\n", procName); return pixCopy(NULL, pixs); } if ((pixd = pixConvertTo32(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not defined", procName, NULL); cmap = pixcmapCreateRandom(8, 1, 1); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); index = 1 + (i % 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &val); pixBlendInRect(pixd, box, val, fract); boxDestroy(&box); } pixcmapDestroy(&cmap); return pixd; } /*! * pixDrawBoxa() * * Input: pixs (any depth; can be cmapped) * boxa (of boxes, to draw) * width (of lines) * val (rgba color to draw) * Return: pixd (with outlines of boxes added), or null on error * * Notes: * (1) If pixs is 1 bpp or is colormapped, it is converted to 8 bpp * and the boxa is drawn using a colormap; otherwise, * it is converted to 32 bpp rgb. */ PIX * pixDrawBoxa(PIX *pixs, BOXA *boxa, l_int32 width, l_uint32 val) { l_int32 rval, gval, bval, newindex; l_int32 mapvacancy; /* true only if cmap and not full */ PIX *pixd; PIXCMAP *cmap; PROCNAME("pixDrawBoxa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); if (width < 1) return (PIX *)ERROR_PTR("width must be >= 1", procName, NULL); if (boxaGetCount(boxa) == 0) { L_WARNING("no boxes to draw; returning a copy\n", procName); return pixCopy(NULL, pixs); } mapvacancy = FALSE; if ((cmap = pixGetColormap(pixs)) != NULL) { if (pixcmapGetCount(cmap) < 256) mapvacancy = TRUE; } if (pixGetDepth(pixs) == 1 || mapvacancy) pixd = pixConvertTo8(pixs, TRUE); else pixd = pixConvertTo32(pixs); if (!pixd) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); extractRGBValues(val, &rval, &gval, &bval); if (pixGetDepth(pixd) == 8) { /* colormapped */ cmap = pixGetColormap(pixd); pixcmapAddNewColor(cmap, rval, gval, bval, &newindex); } pixRenderBoxaArb(pixd, boxa, width, rval, gval, bval); return pixd; } /*! * pixDrawBoxaRandom() * * Input: pixs (any depth, can be cmapped) * boxa (of boxes, to draw) * width (thickness of line) * Return: pixd (with box outlines drawn), or null on error * * Notes: * (1) If pixs is 1 bpp, we draw the boxa using a colormap; * otherwise, we convert to 32 bpp. * (2) We use up to 254 different colors for drawing the boxes. * (3) If boxes overlap, the later ones draw over earlier ones. */ PIX * pixDrawBoxaRandom(PIX *pixs, BOXA *boxa, l_int32 width) { l_int32 i, n, rval, gval, bval, index; BOX *box; PIX *pixd; PIXCMAP *cmap; PTAA *ptaa; PROCNAME("pixDrawBoxaRandom"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); if (width < 1) return (PIX *)ERROR_PTR("width must be >= 1", procName, NULL); if ((n = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes to draw; returning a copy\n", procName); return pixCopy(NULL, pixs); } /* Input depth = 1 bpp; generate cmapped output */ if (pixGetDepth(pixs) == 1) { ptaa = generatePtaaBoxa(boxa); pixd = pixRenderRandomCmapPtaa(pixs, ptaa, 1, width, 1); ptaaDestroy(&ptaa); return pixd; } /* Generate rgb output */ pixd = pixConvertTo32(pixs); cmap = pixcmapCreateRandom(8, 1, 1); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); index = 1 + (i % 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); pixRenderBoxArb(pixd, box, width, rval, gval, bval); boxDestroy(&box); } pixcmapDestroy(&cmap); return pixd; } /*! * boxaaDisplay() * * Input: baa * linewba (line width to display boxa) * linewb (line width to display box) * colorba (color to display boxa) * colorb (color to display box) * w (of pix; use 0 if determined by baa) * h (of pix; use 0 if determined by baa) * Return: 0 if OK, 1 on error */ PIX * boxaaDisplay(BOXAA *baa, l_int32 linewba, l_int32 linewb, l_uint32 colorba, l_uint32 colorb, l_int32 w, l_int32 h) { l_int32 i, j, n, m, rbox, gbox, bbox, rboxa, gboxa, bboxa; BOX *box; BOXA *boxa; PIX *pix; PIXCMAP *cmap; PROCNAME("boxaaDisplay"); if (!baa) return (PIX *)ERROR_PTR("baa not defined", procName, NULL); if (w == 0 || h == 0) boxaaGetExtent(baa, &w, &h, NULL, NULL); pix = pixCreate(w, h, 8); cmap = pixcmapCreate(8); pixSetColormap(pix, cmap); extractRGBValues(colorb, &rbox, &gbox, &bbox); extractRGBValues(colorba, &rboxa, &gboxa, &bboxa); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, rbox, gbox, bbox); pixcmapAddColor(cmap, rboxa, gboxa, bboxa); n = boxaaGetCount(baa); for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); boxaGetExtent(boxa, NULL, NULL, &box); pixRenderBoxArb(pix, box, linewba, rboxa, gboxa, bboxa); boxDestroy(&box); m = boxaGetCount(boxa); for (j = 0; j < m; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixRenderBoxArb(pix, box, linewb, rbox, gbox, bbox); boxDestroy(&box); } boxaDestroy(&boxa); } return pix; } /*---------------------------------------------------------------------* * Split mask components into Boxa * *---------------------------------------------------------------------*/ /*! * pixSplitIntoBoxa() * * Input: pixs (1 bpp) * minsum (minimum pixels to trigger propagation) * skipdist (distance before computing sum for propagation) * delta (difference required to stop propagation) * maxbg (maximum number of allowed bg pixels in ref scan) * maxcomps (use 0 for unlimited number of subdivided components) * remainder (set to 1 to get b.b. of remaining stuff) * Return: boxa (of rectangles covering the fg of pixs), or null on error * * Notes: * (1) This generates a boxa of rectangles that covers * the fg of a mask. For each 8-connected component in pixs, * it does a greedy partitioning, choosing the largest * rectangle found from each of the four directions at each iter. * See pixSplitComponentIntoBoxa() for details. * (2) The input parameters give some flexibility for boundary * noise. The resulting set of rectangles may cover some * bg pixels. * (3) This should be used when there are a small number of * mask components, each of which has sides that are close * to horizontal and vertical. The input parameters @delta * and @maxbg determine whether or not holes in the mask are covered. * (4) The parameter @maxcomps gives the maximum number of allowed * rectangles extracted from any single connected component. * Use 0 if no limit is to be applied. * (5) The flag @remainder specifies whether we take a final bounding * box for anything left after the maximum number of allowed * rectangle is extracted. */ BOXA * pixSplitIntoBoxa(PIX *pixs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder) { l_int32 i, n; BOX *box; BOXA *boxa, *boxas, *boxad; PIX *pix; PIXA *pixas; PROCNAME("pixSplitIntoBoxa"); if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); boxas = pixConnComp(pixs, &pixas, 8); n = boxaGetCount(boxas); boxad = boxaCreate(0); for (i = 0; i < n; i++) { pix = pixaGetPix(pixas, i, L_CLONE); box = boxaGetBox(boxas, i, L_CLONE); boxa = pixSplitComponentIntoBoxa(pix, box, minsum, skipdist, delta, maxbg, maxcomps, remainder); boxaJoin(boxad, boxa, 0, -1); pixDestroy(&pix); boxDestroy(&box); boxaDestroy(&boxa); } pixaDestroy(&pixas); boxaDestroy(&boxas); return boxad; } /*! * pixSplitComponentIntoBoxa() * * Input: pixs (1 bpp) * box ( location of pixs w/rt an origin) * minsum (minimum pixels to trigger propagation) * skipdist (distance before computing sum for propagation) * delta (difference required to stop propagation) * maxbg (maximum number of allowed bg pixels in ref scan) * maxcomps (use 0 for unlimited number of subdivided components) * remainder (set to 1 to get b.b. of remaining stuff) * Return: boxa (of rectangles covering the fg of pixs), or null on error * * Notes: * (1) This generates a boxa of rectangles that covers * the fg of a mask. It does so by a greedy partitioning of * the mask, choosing the largest rectangle found from * each of the four directions at each step. * (2) The input parameters give some flexibility for boundary * noise. The resulting set of rectangles must cover all * the fg pixels and, in addition, may cover some bg pixels. * Using small input parameters on a noiseless mask (i.e., one * that has only large vertical and horizontal edges) will * result in a proper covering of only the fg pixels of the mask. * (3) The input is assumed to be a single connected component, that * may have holes. From each side, sweep inward, counting * the pixels. If the count becomes greater than @minsum, * and we have moved forward a further amount @skipdist, * record that count ('countref'), but don't accept if the scan * contains more than @maxbg bg pixels. Continue the scan * until we reach a count that differs from countref by at * least @delta, at which point the propagation stops. The box * swept out gets a score, which is the sum of fg pixels * minus a penalty. The penalty is the number of bg pixels * in the box. This is done from all four sides, and the * side with the largest score is saved as a rectangle. * The process repeats until there is either no rectangle * left, or there is one that can't be captured from any * direction. For the latter case, we simply accept the * last rectangle. * (4) The input box is only used to specify the location of * the UL corner of pixs, with respect to an origin that * typically represents the UL corner of an underlying image, * of which pixs is one component. If @box is null, * the UL corner is taken to be (0, 0). * (5) The parameter @maxcomps gives the maximum number of allowed * rectangles extracted from any single connected component. * Use 0 if no limit is to be applied. * (6) The flag @remainder specifies whether we take a final bounding * box for anything left after the maximum number of allowed * rectangle is extracted. * (7) So if @maxcomps > 0, it specifies that we want no more than * the first @maxcomps rectangles that satisfy the input * criteria. After this, we can get a final rectangle that * bounds everything left over by setting @remainder == 1. * If @remainder == 0, we only get rectangles that satisfy * the input criteria. * (8) It should be noted that the removal of rectangles can * break the original c.c. into several c.c. * (9) Summing up: * * If @maxcomp == 0, the splitting proceeds as far as possible. * * If @maxcomp > 0, the splitting stops when @maxcomps are * found, or earlier if no more components can be selected. * * If @remainder == 1 and components remain that cannot be * selected, they are returned as a single final rectangle; * otherwise, they are ignored. */ BOXA * pixSplitComponentIntoBoxa(PIX *pix, BOX *box, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 maxcomps, l_int32 remainder) { l_int32 i, w, h, boxx, boxy, bx, by, bw, bh, maxdir, maxscore; l_int32 iter; BOX *boxs; /* shrinks as rectangular regions are removed */ BOX *boxt1, *boxt2, *boxt3; BOXA *boxat; /* stores rectangle data for each side in an iteration */ BOXA *boxad; NUMA *nascore, *nas; PIX *pixs; PROCNAME("pixSplitComponentIntoBoxa"); if (!pix || pixGetDepth(pix) != 1) return (BOXA *)ERROR_PTR("pix undefined or not 1 bpp", procName, NULL); pixs = pixCopy(NULL, pix); pixGetDimensions(pixs, &w, &h, NULL); if (box) boxGetGeometry(box, &boxx, &boxy, NULL, NULL); else boxx = boxy = 0; boxs = boxCreate(0, 0, w, h); boxad = boxaCreate(0); iter = 0; while (boxs != NULL) { boxGetGeometry(boxs, &bx, &by, &bw, &bh); boxat = boxaCreate(4); /* potential rectangular regions */ nascore = numaCreate(4); for (i = 0; i < 4; i++) { pixSearchForRectangle(pixs, boxs, minsum, skipdist, delta, maxbg, i, boxat, nascore); } nas = numaGetSortIndex(nascore, L_SORT_DECREASING); numaGetIValue(nas, 0, &maxdir); numaGetIValue(nascore, maxdir, &maxscore); #if DEBUG_SPLIT fprintf(stderr, "Iteration: %d\n", iter); boxPrintStreamInfo(stderr, boxs); boxaWriteStream(stderr, boxat); fprintf(stderr, "\nmaxdir = %d, maxscore = %d\n\n", maxdir, maxscore); #endif /* DEBUG_SPLIT */ if (maxscore > 0) { /* accept this */ boxt1 = boxaGetBox(boxat, maxdir, L_CLONE); boxt2 = boxTransform(boxt1, boxx, boxy, 1.0, 1.0); boxaAddBox(boxad, boxt2, L_INSERT); pixClearInRect(pixs, boxt1); boxDestroy(&boxt1); pixClipBoxToForeground(pixs, boxs, NULL, &boxt3); boxDestroy(&boxs); boxs = boxt3; if (boxs) { boxGetGeometry(boxs, NULL, NULL, &bw, &bh); if (bw < 2 || bh < 2) boxDestroy(&boxs); /* we're done */ } } else { /* no more valid rectangles can be found */ if (remainder == 1) { /* save the last box */ boxt1 = boxTransform(boxs, boxx, boxy, 1.0, 1.0); boxaAddBox(boxad, boxt1, L_INSERT); } boxDestroy(&boxs); /* we're done */ } boxaDestroy(&boxat); numaDestroy(&nascore); numaDestroy(&nas); iter++; if ((iter == maxcomps) && boxs) { if (remainder == 1) { /* save the last box */ boxt1 = boxTransform(boxs, boxx, boxy, 1.0, 1.0); boxaAddBox(boxad, boxt1, L_INSERT); } boxDestroy(&boxs); /* we're done */ } } pixDestroy(&pixs); return boxad; } /*! * pixSearchForRectangle() * * Input: pixs (1 bpp) * boxs (current region to investigate) * minsum (minimum pixels to trigger propagation) * skipdist (distance before computing sum for propagation) * delta (difference required to stop propagation) * maxbg (maximum number of allowed bg pixels in ref scan) * sideflag (side to search from) * boxat (add result of rectangular region found here) * nascore (add score for this rectangle here) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixSplitComponentIntoBoxa() for an explanation of the algorithm. * This does the sweep from a single side. For each iteration * in pixSplitComponentIntoBoxa(), this will be called 4 times, * for @sideflag = {0, 1, 2, 3}. * (2) If a valid rectangle is not found, add a score of 0 and * input a minimum box. */ static l_int32 pixSearchForRectangle(PIX *pixs, BOX *boxs, l_int32 minsum, l_int32 skipdist, l_int32 delta, l_int32 maxbg, l_int32 sideflag, BOXA *boxat, NUMA *nascore) { l_int32 bx, by, bw, bh, width, height, setref, atref; l_int32 minincol, maxincol, mininrow, maxinrow, minval, maxval, bgref; l_int32 x, y, x0, y0, xref, yref, colsum, rowsum, score, countref, diff; void **lines1; BOX *boxr; PROCNAME("pixSearchForRectangle"); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs undefined or not 1 bpp", procName, 1); if (!boxs) return ERROR_INT("boxs not defined", procName, 1); if (!boxat) return ERROR_INT("boxat not defined", procName, 1); if (!nascore) return ERROR_INT("nascore not defined", procName, 1); lines1 = pixGetLinePtrs(pixs, NULL); boxGetGeometry(boxs, &bx, &by, &bw, &bh); boxr = NULL; setref = 0; atref = 0; maxval = 0; minval = 100000; score = 0; /* sum of all (fg - bg) pixels seen in the scan */ xref = yref = 100000; /* init to impossibly big number */ if (sideflag == L_FROM_LEFT) { for (x = bx; x < bx + bw; x++) { colsum = 0; maxincol = 0; minincol = 100000; for (y = by; y < by + bh; y++) { if (GET_DATA_BIT(lines1[y], x)) { colsum++; if (y > maxincol) maxincol = y; if (y < minincol) minincol = y; } } score += colsum; /* Enough fg to sweep out a rectangle? */ if (!setref && colsum >= minsum) { setref = 1; xref = x + 10; if (xref >= bx + bw) goto failure; } /* Reached the reference line; save the count; * if there is too much bg, the rectangle is invalid. */ if (setref && x == xref) { atref = 1; countref = colsum; bgref = maxincol - minincol + 1 - countref; if (bgref > maxbg) goto failure; } /* Have we left the rectangle? If so, save it along * with the score. */ if (atref) { diff = L_ABS(colsum - countref); if (diff >= delta || x == bx + bw - 1) { height = maxval - minval + 1; width = x - bx; if (x == bx + bw - 1) width = x - bx + 1; boxr = boxCreate(bx, minval, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxincol); minval = L_MIN(minval, minincol); } goto failure; } else if (sideflag == L_FROM_RIGHT) { for (x = bx + bw - 1; x >= bx; x--) { colsum = 0; maxincol = 0; minincol = 100000; for (y = by; y < by + bh; y++) { if (GET_DATA_BIT(lines1[y], x)) { colsum++; if (y > maxincol) maxincol = y; if (y < minincol) minincol = y; } } score += colsum; if (!setref && colsum >= minsum) { setref = 1; xref = x - 10; if (xref < bx) goto failure; } if (setref && x == xref) { atref = 1; countref = colsum; bgref = maxincol - minincol + 1 - countref; if (bgref > maxbg) goto failure; } if (atref) { diff = L_ABS(colsum - countref); if (diff >= delta || x == bx) { height = maxval - minval + 1; x0 = x + 1; if (x == bx) x0 = x; width = bx + bw - x0; boxr = boxCreate(x0, minval, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxincol); minval = L_MIN(minval, minincol); } goto failure; } else if (sideflag == L_FROM_TOP) { for (y = by; y < by + bh; y++) { rowsum = 0; maxinrow = 0; mininrow = 100000; for (x = bx; x < bx + bw; x++) { if (GET_DATA_BIT(lines1[y], x)) { rowsum++; if (x > maxinrow) maxinrow = x; if (x < mininrow) mininrow = x; } } score += rowsum; if (!setref && rowsum >= minsum) { setref = 1; yref = y + 10; if (yref >= by + bh) goto failure; } if (setref && y == yref) { atref = 1; countref = rowsum; bgref = maxinrow - mininrow + 1 - countref; if (bgref > maxbg) goto failure; } if (atref) { diff = L_ABS(rowsum - countref); if (diff >= delta || y == by + bh - 1) { width = maxval - minval + 1; height = y - by; if (y == by + bh - 1) height = y - by + 1; boxr = boxCreate(minval, by, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxinrow); minval = L_MIN(minval, mininrow); } goto failure; } else if (sideflag == L_FROM_BOT) { for (y = by + bh - 1; y >= by; y--) { rowsum = 0; maxinrow = 0; mininrow = 100000; for (x = bx; x < bx + bw; x++) { if (GET_DATA_BIT(lines1[y], x)) { rowsum++; if (x > maxinrow) maxinrow = x; if (x < mininrow) mininrow = x; } } score += rowsum; if (!setref && rowsum >= minsum) { setref = 1; yref = y - 10; if (yref < by) goto failure; } if (setref && y == yref) { atref = 1; countref = rowsum; bgref = maxinrow - mininrow + 1 - countref; if (bgref > maxbg) goto failure; } if (atref) { diff = L_ABS(rowsum - countref); if (diff >= delta || y == by) { width = maxval - minval + 1; y0 = y + 1; if (y == by) y0 = y; height = by + bh - y0; boxr = boxCreate(minval, y0, width, height); score = 2 * score - width * height; goto success; } } maxval = L_MAX(maxval, maxinrow); minval = L_MIN(minval, mininrow); } goto failure; } failure: numaAddNumber(nascore, 0); boxaAddBox(boxat, boxCreate(0, 0, 1, 1), L_INSERT); /* min box */ FREE(lines1); return 0; success: numaAddNumber(nascore, score); boxaAddBox(boxat, boxr, L_INSERT); FREE(lines1); return 0; } /*---------------------------------------------------------------------* * Comparison between boxa * *---------------------------------------------------------------------*/ /*! * boxaCompareRegions() * * Input: boxa1, boxa2 * areathresh (minimum area of boxes to be considered) * &pnsame ( true if same number of boxes) * &pdiffarea ( fractional difference in total area) * &pdiffxor ( fractional difference * in xor of regions) * &pixdb ( debug pix showing two boxa) * Return: 0 if OK, 1 on error * * Notes: * (1) This takes 2 boxa, removes all boxes smaller than a given area, * and compares the remaining boxes between the boxa. * (2) The area threshold is introduced to help remove noise from * small components. Any box with a smaller value of w * h * will be removed from consideration. * (3) The xor difference is the most stringent test, requiring alignment * of the corresponding boxes. It is also more computationally * intensive and is optionally returned. Alignment is to the * UL corner of each region containing all boxes, as given by * boxaGetExtent(). * (4) Both fractional differences are with respect to the total * area in the two boxa. They range from 0.0 to 1.0. * A perfect match has value 0.0. If both boxa are empty, * we return 0.0; if one is empty we return 1.0. * (5) An example input might be the rectangular regions of a * segmentation mask for text or images from two pages. */ l_int32 boxaCompareRegions(BOXA *boxa1, BOXA *boxa2, l_int32 areathresh, l_int32 *pnsame, l_float32 *pdiffarea, l_float32 *pdiffxor, PIX **ppixdb) { l_int32 w, h, x3, y3, w3, h3, x4, y4, w4, h4, n3, n4, area1, area2; l_int32 count3, count4, countxor; l_int32 *tab; BOX *box3, *box4; BOXA *boxa3, *boxa4, *boxa3t, *boxa4t; PIX *pix1, *pix2, *pix3, *pix4, *pix5; PIXA *pixa; PROCNAME("boxaCompareRegions"); if (!pnsame) return ERROR_INT("&nsame not defined", procName, 1); *pnsame = FALSE; if (!pdiffarea) return ERROR_INT("&diffarea not defined", procName, 1); *pdiffarea = 1.0; if (!boxa1 || !boxa2) return ERROR_INT("boxa1 and boxa2 not both defined", procName, 1); if (pdiffxor) *pdiffxor = 1.0; if (ppixdb) *ppixdb = NULL; boxa3 = boxaSelectByArea(boxa1, areathresh, L_SELECT_IF_GTE, NULL); boxa4 = boxaSelectByArea(boxa2, areathresh, L_SELECT_IF_GTE, NULL); n3 = boxaGetCount(boxa3); n4 = boxaGetCount(boxa4); if (n3 == n4) *pnsame = TRUE; /* There are no boxes in one or both */ if (n3 == 0 || n4 == 0) { boxaDestroy(&boxa3); boxaDestroy(&boxa4); if (n3 == 0 && n4 == 0) { /* they are both empty: we say they are the * same; otherwise, they differ maximally * and retain the default value. */ *pdiffarea = 0.0; if (pdiffxor) *pdiffxor = 0.0; } return 0; } /* There are boxes in both */ boxaGetArea(boxa3, &area1); boxaGetArea(boxa4, &area2); *pdiffarea = (l_float32)L_ABS(area1 - area2) / (l_float32)(area1 + area2); if (!pdiffxor) { boxaDestroy(&boxa3); boxaDestroy(&boxa4); return 0; } /* The easiest way to get the xor of aligned boxes is to work * with images of each boxa. This is done by translating each * boxa so that the UL corner of the region that includes all * boxes in the boxa is placed at the origin of each pix. */ boxaGetExtent(boxa3, &w, &h, &box3); boxaGetExtent(boxa4, &w, &h, &box4); boxGetGeometry(box3, &x3, &y3, &w3, &h3); boxGetGeometry(box4, &x4, &y4, &w4, &h4); boxa3t = boxaTransform(boxa3, -x3, -y3, 1.0, 1.0); boxa4t = boxaTransform(boxa4, -x4, -y4, 1.0, 1.0); w = L_MAX(x3 + w3, x4 + w4); h = L_MAX(y3 + h3, y4 + h4); pix3 = pixCreate(w, h, 1); /* use the max to keep everything in the xor */ pix4 = pixCreate(w, h, 1); pixMaskBoxa(pix3, pix3, boxa3t, L_SET_PIXELS); pixMaskBoxa(pix4, pix4, boxa4t, L_SET_PIXELS); tab = makePixelSumTab8(); pixCountPixels(pix3, &count3, tab); pixCountPixels(pix4, &count4, tab); pix5 = pixXor(NULL, pix3, pix4); pixCountPixels(pix5, &countxor, tab); FREE(tab); *pdiffxor = (l_float32)countxor / (l_float32)(count3 + count4); if (ppixdb) { pixa = pixaCreate(2); pix1 = pixCreate(w, h, 32); pixSetAll(pix1); pixRenderHashBoxaBlend(pix1, boxa3, 5, 1, L_POS_SLOPE_LINE, 2, 255, 0, 0, 0.5); pixRenderHashBoxaBlend(pix1, boxa4, 5, 1, L_NEG_SLOPE_LINE, 2, 0, 255, 0, 0.5); pixaAddPix(pixa, pix1, L_INSERT); pix2 = pixCreate(w, h, 32); pixPaintThroughMask(pix2, pix3, x3, y3, 0xff000000); pixPaintThroughMask(pix2, pix4, x4, y4, 0x00ff0000); pixAnd(pix3, pix3, pix4); pixPaintThroughMask(pix2, pix3, x3, y3, 0x0000ff00); pixaAddPix(pixa, pix2, L_INSERT); *ppixdb = pixaDisplayTiledInRows(pixa, 32, 1000, 1.0, 0, 30, 2); pixaDestroy(&pixa); } boxDestroy(&box3); boxDestroy(&box4); boxaDestroy(&boxa3); boxaDestroy(&boxa3t); boxaDestroy(&boxa4); boxaDestroy(&boxa4t); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); return 0; } leptonica-1.70/src/rotateorth.c0000644000175000017500000002236312106524567014651 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotateorth.c * * Top-level rotation by multiples of 90 degrees * PIX *pixRotateOrth() * * 180-degree rotation * PIX *pixRotate180() * * 90-degree rotation (both directions) * PIX *pixRotate90() * * Left-right flip * PIX *pixFlipLR() * * Top-bottom flip * PIX *pixFlipTB() */ #include "allheaders.h" /*! * pixRotateOrth() * * Input: pixs (all depths) * quads (0-3; number of 90 degree cw rotations) * Return: pixd, or null on error */ PIX * pixRotateOrth(PIX *pixs, l_int32 quads) { PROCNAME("pixRotateOrth"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (quads < 0 || quads > 3) return (PIX *)ERROR_PTR("quads not in {0,1,2,3}", procName, NULL); if (quads == 0) return pixCopy(NULL, pixs); else if (quads == 1) return pixRotate90(pixs, 1); else if (quads == 2) return pixRotate180(NULL, pixs); else /* quads == 3 */ return pixRotate90(pixs, -1); } /*! * pixRotate180() * * Input: pixd (; can be null, equal to pixs, * or different from pixs) * pixs (all depths) * Return: pixd, or null on error * * Notes: * (1) This does a 180 rotation of the image about the center, * which is equivalent to a left-right flip about a vertical * line through the image center, followed by a top-bottom * flip about a horizontal line through the image center. * (2) There are 3 cases for input: * (a) pixd == null (creates a new pixd) * (b) pixd == pixs (in-place operation) * (c) pixd != pixs (existing pixd) * (3) For clarity, use these three patterns, respectively: * (a) pixd = pixRotate180(NULL, pixs); * (b) pixRotate180(pixs, pixs); * (c) pixRotate180(pixd, pixs); */ PIX * pixRotate180(PIX *pixd, PIX *pixs) { l_int32 d; PROCNAME("pixRotate180"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", procName, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixFlipLR(pixd, pixd); pixFlipTB(pixd, pixd); return pixd; } /*! * pixRotate90() * * Input: pixs (all depths) * direction (1 = clockwise, -1 = counter-clockwise) * Return: pixd, or null on error * * Notes: * (1) This does a 90 degree rotation of the image about the center, * either cw or ccw, returning a new pix. * (2) The direction must be either 1 (cw) or -1 (ccw). */ PIX * pixRotate90(PIX *pixs, l_int32 direction) { l_int32 wd, hd, d, wpls, wpld; l_uint32 *datas, *datad; PIX *pixd; PROCNAME("pixRotate90"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", procName, NULL); if (direction != 1 && direction != -1) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); hd = pixGetWidth(pixs); wd = pixGetHeight(pixs); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyColormap(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); rotate90Low(datad, wd, hd, d, wpld, datas, wpls, direction); return pixd; } /*! * pixFlipLR() * * Input: pixd (; can be null, equal to pixs, * or different from pixs) * pixs (all depths) * Return: pixd, or null on error * * Notes: * (1) This does a left-right flip of the image, which is * equivalent to a rotation out of the plane about a * vertical line through the image center. * (2) There are 3 cases for input: * (a) pixd == null (creates a new pixd) * (b) pixd == pixs (in-place operation) * (c) pixd != pixs (existing pixd) * (3) For clarity, use these three patterns, respectively: * (a) pixd = pixFlipLR(NULL, pixs); * (b) pixFlipLR(pixs, pixs); * (c) pixFlipLR(pixd, pixs); * (4) If an existing pixd is not the same size as pixs, the * image data will be reallocated. */ PIX * pixFlipLR(PIX *pixd, PIX *pixs) { l_uint8 *tab; l_int32 w, h, d, wpld; l_uint32 *datad, *buffer; PROCNAME("pixFlipLR"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", procName, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); switch (d) { case 1: tab = makeReverseByteTab1(); break; case 2: tab = makeReverseByteTab2(); break; case 4: tab = makeReverseByteTab4(); break; default: tab = NULL; break; } if ((buffer = (l_uint32 *)CALLOC(wpld, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); flipLRLow(datad, w, h, d, wpld, tab, buffer); FREE(buffer); if (tab) FREE(tab); return pixd; } /*! * pixFlipTB() * * Input: pixd (; can be null, equal to pixs, * or different from pixs) * pixs (all depths) * Return: pixd, or null on error * * Notes: * (1) This does a top-bottom flip of the image, which is * equivalent to a rotation out of the plane about a * horizontal line through the image center. * (2) There are 3 cases for input: * (a) pixd == null (creates a new pixd) * (b) pixd == pixs (in-place operation) * (c) pixd != pixs (existing pixd) * (3) For clarity, use these three patterns, respectively: * (a) pixd = pixFlipTB(NULL, pixs); * (b) pixFlipTB(pixs, pixs); * (c) pixFlipTB(pixd, pixs); * (4) If an existing pixd is not the same size as pixs, the * image data will be reallocated. */ PIX * pixFlipTB(PIX *pixd, PIX *pixs) { l_int32 h, d, wpld; l_uint32 *datad, *buffer; PROCNAME("pixFlipTB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, NULL, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) return (PIX *)ERROR_PTR("pixs not in {1,2,4,8,16,32} bpp", procName, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if ((buffer = (l_uint32 *)CALLOC(wpld, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); flipTBLow(datad, h, wpld, buffer); FREE(buffer); return pixd; } leptonica-1.70/src/sarray.c0000644000175000017500000016457412252644445013772 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sarray.c * * Create/Destroy/Copy * SARRAY *sarrayCreate() * SARRAY *sarrayCreateInitialized() * SARRAY *sarrayCreateWordsFromString() * SARRAY *sarrayCreateLinesFromString() * void *sarrayDestroy() * SARRAY *sarrayCopy() * SARRAY *sarrayClone() * * Add/Remove string * l_int32 sarrayAddString() * static l_int32 sarrayExtendArray() * char *sarrayRemoveString() * l_int32 sarrayReplaceString() * l_int32 sarrayClear() * * Accessors * l_int32 sarrayGetCount() * char **sarrayGetArray() * char *sarrayGetString() * l_int32 sarrayGetRefcount() * l_int32 sarrayChangeRefcount() * * Conversion back to string * char *sarrayToString() * char *sarrayToStringRange() * * Concatenate 2 sarrays * l_int32 sarrayConcatenate() * l_int32 sarrayAppendRange() * * Pad an sarray to be the same size as another sarray * l_int32 sarrayPadToSameSize() * * Convert word sarray to (formatted) line sarray * SARRAY *sarrayConvertWordsToLines() * * Split string on separator list * SARRAY *sarraySplitString() * * Filter sarray * SARRAY *sarraySelectBySubstring() * SARRAY *sarraySelectByRange() * l_int32 sarrayParseRange() * * Sort * SARRAY *sarraySort() * SARRAY *sarraySortByIndex() * l_int32 stringCompareLexical() * * Serialize for I/O * SARRAY *sarrayRead() * SARRAY *sarrayReadStream() * l_int32 sarrayWrite() * l_int32 sarrayWriteStream() * l_int32 sarrayAppend() * * Directory filenames * SARRAY *getNumberedPathnamesInDirectory() * SARRAY *getSortedPathnamesInDirectory() * SARRAY *convertSortedToNumberedPathnames() * SARRAY *getFilenamesInDirectory() * * These functions are important for efficient manipulation * of string data, and they have found widespread use in * leptonica. For example: * (1) to generate text files: e.g., PostScript and PDF * wrappers around sets of images * (2) to parse text files: e.g., extracting prototypes * from the source to generate allheaders.h * (3) to generate code for compilation: e.g., the fast * dwa code for arbitrary structuring elements. * * Comments on usage: * * The user is responsible for correctly disposing of strings * that have been extracted from sarrays: * - When you want a string from an Sarray to inspect it, or * plan to make a copy of it later, use sarrayGetString() * with copyflag = 0. In this case, you must neither free * the string nor put it directly in another array. * We provide the copyflag constant L_NOCOPY, which is 0, * for this purpose: * str-not-owned = sarrayGetString(sa, index, L_NOCOPY); * To extract a copy of a string, use: * str-owned = sarrayGetString(sa, index, L_COPY); * * - When you want to insert a string that is in one * array into another array (always leaving the first * array intact), you have two options: * (1) use copyflag = L_COPY to make an immediate copy, * which you must then add to the second array * by insertion; namely, * str-owned = sarrayGetString(sa, index, L_COPY); * sarrayAddString(sa, str-owned, L_INSERT); * (2) use copyflag = L_NOCOPY to get another handle to * the string, in which case you must add * a copy of it to the second string array: * str-not-owned = sarrayGetString(sa, index, L_NOCOPY); * sarrayAddString(sa, str-not-owned, L_COPY). * * In all cases, when you use copyflag = L_COPY to extract * a string from an array, you must either free it * or insert it in an array that will be freed later. */ #include #ifndef _WIN32 #include /* unix only */ #endif /* ! _WIN32 */ #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 50; /* n'importe quoi */ static const l_int32 L_BUF_SIZE = 512; /* Static function */ static l_int32 sarrayExtendArray(SARRAY *sa); /*--------------------------------------------------------------------------* * String array create/destroy/copy/extend * *--------------------------------------------------------------------------*/ /*! * sarrayCreate() * * Input: size of string ptr array to be alloc'd * (use 0 for default) * Return: sarray, or null on error */ SARRAY * sarrayCreate(l_int32 n) { SARRAY *sa; PROCNAME("sarrayCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((sa = (SARRAY *)CALLOC(1, sizeof(SARRAY))) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); if ((sa->array = (char **)CALLOC(n, sizeof(char *))) == NULL) return (SARRAY *)ERROR_PTR("ptr array not made", procName, NULL); sa->nalloc = n; sa->n = 0; sa->refcount = 1; return sa; } /*! * sarrayCreateInitialized() * * Input: n (size of string ptr array to be alloc'd) * initstr (string to be initialized on the full array) * Return: sarray, or null on error */ SARRAY * sarrayCreateInitialized(l_int32 n, char *initstr) { l_int32 i; SARRAY *sa; PROCNAME("sarrayCreateInitialized"); if (n <= 0) return (SARRAY *)ERROR_PTR("n must be > 0", procName, NULL); if (!initstr) return (SARRAY *)ERROR_PTR("initstr not defined", procName, NULL); sa = sarrayCreate(n); for (i = 0; i < n; i++) sarrayAddString(sa, initstr, L_COPY); return sa; } /*! * sarrayCreateWordsFromString() * * Input: string * Return: sarray, or null on error * * Notes: * (1) This finds the number of word substrings, creates an sarray * of this size, and puts copies of each substring into the sarray. */ SARRAY * sarrayCreateWordsFromString(const char *string) { char separators[] = " \n\t"; l_int32 i, nsub, size, inword; SARRAY *sa; PROCNAME("sarrayCreateWordsFromString"); if (!string) return (SARRAY *)ERROR_PTR("textstr not defined", procName, NULL); /* Find the number of words */ size = strlen(string); nsub = 0; inword = FALSE; for (i = 0; i < size; i++) { if (inword == FALSE && (string[i] != ' ' && string[i] != '\t' && string[i] != '\n')) { inword = TRUE; nsub++; } else if (inword == TRUE && (string[i] == ' ' || string[i] == '\t' || string[i] == '\n')) { inword = FALSE; } } if ((sa = sarrayCreate(nsub)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); sarraySplitString(sa, string, separators); return sa; } /*! * sarrayCreateLinesFromString() * * Input: string * blankflag (0 to exclude blank lines; 1 to include) * Return: sarray, or null on error * * Notes: * (1) This finds the number of line substrings, each of which * ends with a newline, and puts a copy of each substring * in a new sarray. * (2) The newline characters are removed from each substring. */ SARRAY * sarrayCreateLinesFromString(char *string, l_int32 blankflag) { l_int32 i, nsub, size, startptr; char *cstring, *substring; SARRAY *sa; PROCNAME("sarrayCreateLinesFromString"); if (!string) return (SARRAY *)ERROR_PTR("textstr not defined", procName, NULL); /* find the number of lines */ size = strlen(string); nsub = 0; for (i = 0; i < size; i++) { if (string[i] == '\n') nsub++; } if ((sa = sarrayCreate(nsub)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); if (blankflag) { /* keep blank lines as null strings */ /* Make a copy for munging */ if ((cstring = stringNew(string)) == NULL) return (SARRAY *)ERROR_PTR("cstring not made", procName, NULL); /* We'll insert nulls like strtok */ startptr = 0; for (i = 0; i < size; i++) { if (cstring[i] == '\n') { cstring[i] = '\0'; if (i > 0 && cstring[i - 1] == '\r') cstring[i - 1] = '\0'; /* also remove Windows CR */ if ((substring = stringNew(cstring + startptr)) == NULL) return (SARRAY *)ERROR_PTR("substring not made", procName, NULL); sarrayAddString(sa, substring, L_INSERT); /* fprintf(stderr, "substring = %s\n", substring); */ startptr = i + 1; } } if (startptr < size) { /* no newline at end of last line */ if ((substring = stringNew(cstring + startptr)) == NULL) return (SARRAY *)ERROR_PTR("substring not made", procName, NULL); sarrayAddString(sa, substring, L_INSERT); /* fprintf(stderr, "substring = %s\n", substring); */ } FREE(cstring); } else { /* remove blank lines; use strtok */ sarraySplitString(sa, string, "\r\n"); } return sa; } /*! * sarrayDestroy() * * Input: &sarray * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the sarray. * (2) Always nulls the input ptr. */ void sarrayDestroy(SARRAY **psa) { l_int32 i; SARRAY *sa; PROCNAME("sarrayDestroy"); if (psa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((sa = *psa) == NULL) return; sarrayChangeRefcount(sa, -1); if (sarrayGetRefcount(sa) <= 0) { if (sa->array) { for (i = 0; i < sa->n; i++) { if (sa->array[i]) FREE(sa->array[i]); } FREE(sa->array); } FREE(sa); } *psa = NULL; return; } /*! * sarrayCopy() * * Input: sarray * Return: copy of sarray, or null on error */ SARRAY * sarrayCopy(SARRAY *sa) { l_int32 i; SARRAY *csa; PROCNAME("sarrayCopy"); if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); if ((csa = sarrayCreate(sa->nalloc)) == NULL) return (SARRAY *)ERROR_PTR("csa not made", procName, NULL); for (i = 0; i < sa->n; i++) sarrayAddString(csa, sa->array[i], L_COPY); return csa; } /*! * sarrayClone() * * Input: sarray * Return: ptr to same sarray, or null on error */ SARRAY * sarrayClone(SARRAY *sa) { PROCNAME("sarrayClone"); if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); sarrayChangeRefcount(sa, 1); return sa; } /*! * sarrayAddString() * * Input: sarray * string (string to be added) * copyflag (L_INSERT, L_COPY) * Return: 0 if OK, 1 on error * * Notes: * (1) Legacy usage decrees that we always use 0 to insert a string * directly and 1 to insert a copy of the string. The * enums for L_INSERT and L_COPY agree with this convention, * and will not change in the future. * (2) See usage comments at the top of this file. */ l_int32 sarrayAddString(SARRAY *sa, char *string, l_int32 copyflag) { l_int32 n; PROCNAME("sarrayAddString"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!string) return ERROR_INT("string not defined", procName, 1); if (copyflag != L_INSERT && copyflag != L_COPY) return ERROR_INT("invalid copyflag", procName, 1); n = sarrayGetCount(sa); if (n >= sa->nalloc) sarrayExtendArray(sa); if (copyflag == L_INSERT) sa->array[n] = string; else /* L_COPY */ sa->array[n] = stringNew(string); sa->n++; return 0; } /*! * sarrayExtendArray() * * Input: sarray * Return: 0 if OK, 1 on error */ static l_int32 sarrayExtendArray(SARRAY *sa) { PROCNAME("sarrayExtendArray"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if ((sa->array = (char **)reallocNew((void **)&sa->array, sizeof(char *) * sa->nalloc, 2 * sizeof(char *) * sa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); sa->nalloc *= 2; return 0; } /*! * sarrayRemoveString() * * Input: sarray * index (of string within sarray) * Return: removed string, or null on error */ char * sarrayRemoveString(SARRAY *sa, l_int32 index) { char *string; char **array; l_int32 i, n, nalloc; PROCNAME("sarrayRemoveString"); if (!sa) return (char *)ERROR_PTR("sa not defined", procName, NULL); if ((array = sarrayGetArray(sa, &nalloc, &n)) == NULL) return (char *)ERROR_PTR("array not returned", procName, NULL); if (index < 0 || index >= n) return (char *)ERROR_PTR("array index out of bounds", procName, NULL); string = array[index]; /* If removed string is not at end of array, shift * to fill in, maintaining original ordering. * Note: if we didn't care about the order, we could * put the last string array[n - 1] directly into the hole. */ for (i = index; i < n - 1; i++) array[i] = array[i + 1]; sa->n--; return string; } /*! * sarrayReplaceString() * * Input: sarray * index (of string within sarray to be replaced) * newstr (string to replace existing one) * copyflag (L_INSERT, L_COPY) * Return: 0 if OK, 1 on error * * Notes: * (1) This destroys an existing string and replaces it with * the new string or a copy of it. * (2) By design, an sarray is always compacted, so there are * never any holes (null ptrs) in the ptr array up to the * current count. */ l_int32 sarrayReplaceString(SARRAY *sa, l_int32 index, char *newstr, l_int32 copyflag) { char *str; l_int32 n; PROCNAME("sarrayReplaceString"); if (!sa) return ERROR_INT("sa not defined", procName, 1); n = sarrayGetCount(sa); if (index < 0 || index >= n) return ERROR_INT("array index out of bounds", procName, 1); if (!newstr) return ERROR_INT("newstr not defined", procName, 1); if (copyflag != L_INSERT && copyflag != L_COPY) return ERROR_INT("invalid copyflag", procName, 1); FREE(sa->array[index]); if (copyflag == L_INSERT) str = newstr; else /* L_COPY */ str = stringNew(newstr); sa->array[index] = str; return 0; } /*! * sarrayClear() * * Input: sarray * Return: 0 if OK; 1 on error */ l_int32 sarrayClear(SARRAY *sa) { l_int32 i; PROCNAME("sarrayClear"); if (!sa) return ERROR_INT("sa not defined", procName, 1); for (i = 0; i < sa->n; i++) { /* free strings and null ptrs */ FREE(sa->array[i]); sa->array[i] = NULL; } sa->n = 0; return 0; } /*----------------------------------------------------------------------* * Accessors * *----------------------------------------------------------------------*/ /*! * sarrayGetCount() * * Input: sarray * Return: count, or 0 if no strings or on error */ l_int32 sarrayGetCount(SARRAY *sa) { PROCNAME("sarrayGetCount"); if (!sa) return ERROR_INT("sa not defined", procName, 0); return sa->n; } /*! * sarrayGetArray() * * Input: sarray * &nalloc ( number allocated string ptrs) * &n ( number allocated strings) * Return: ptr to string array, or null on error * * Notes: * (1) Caution: the returned array is not a copy, so caller * must not destroy it! */ char ** sarrayGetArray(SARRAY *sa, l_int32 *pnalloc, l_int32 *pn) { char **array; PROCNAME("sarrayGetArray"); if (!sa) return (char **)ERROR_PTR("sa not defined", procName, NULL); array = sa->array; if (pnalloc) *pnalloc = sa->nalloc; if (pn) *pn = sa->n; return array; } /*! * sarrayGetString() * * Input: sarray * index (to the index-th string) * copyflag (L_NOCOPY or L_COPY) * Return: string, or null on error * * Notes: * (1) Legacy usage decrees that we always use 0 to get the * pointer to the string itself, and 1 to get a copy of * the string. * (2) See usage comments at the top of this file. * (3) To get a pointer to the string itself, use for copyflag: * L_NOCOPY or 0 or FALSE * To get a copy of the string, use for copyflag: * L_COPY or 1 or TRUE * The const values of L_NOCOPY and L_COPY are guaranteed not * to change. */ char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag) { PROCNAME("sarrayGetString"); if (!sa) return (char *)ERROR_PTR("sa not defined", procName, NULL); if (index < 0 || index >= sa->n) return (char *)ERROR_PTR("index not valid", procName, NULL); if (copyflag != L_NOCOPY && copyflag != L_COPY) return (char *)ERROR_PTR("invalid copyflag", procName, NULL); if (copyflag == L_NOCOPY) return sa->array[index]; else /* L_COPY */ return stringNew(sa->array[index]); } /*! * sarrayGetRefCount() * * Input: sarray * Return: refcount, or UNDEF on error */ l_int32 sarrayGetRefcount(SARRAY *sa) { PROCNAME("sarrayGetRefcount"); if (!sa) return ERROR_INT("sa not defined", procName, UNDEF); return sa->refcount; } /*! * sarrayChangeRefCount() * * Input: sarray * delta (change to be applied) * Return: 0 if OK, 1 on error */ l_int32 sarrayChangeRefcount(SARRAY *sa, l_int32 delta) { PROCNAME("sarrayChangeRefcount"); if (!sa) return ERROR_INT("sa not defined", procName, UNDEF); sa->refcount += delta; return 0; } /*----------------------------------------------------------------------* * Conversion to string * *----------------------------------------------------------------------*/ /*! * sarrayToString() * * Input: sarray * addnlflag (flag: 0 adds nothing to each substring * 1 adds '\n' to each substring * 2 adds ' ' to each substring) * Return: dest string, or null on error * * Notes: * (1) Concatenates all the strings in the sarray, preserving * all white space. * (2) If addnlflag != 0, adds either a '\n' or a ' ' after * each substring. * (3) This function was NOT implemented as: * for (i = 0; i < n; i++) * strcat(dest, sarrayGetString(sa, i, L_NOCOPY)); * Do you see why? */ char * sarrayToString(SARRAY *sa, l_int32 addnlflag) { PROCNAME("sarrayToString"); if (!sa) return (char *)ERROR_PTR("sa not defined", procName, NULL); return sarrayToStringRange(sa, 0, 0, addnlflag); } /*! * sarrayToStringRange() * * Input: sarray * first (index of first string to use; starts with 0) * nstrings (number of strings to append into the result; use * 0 to append to the end of the sarray) * addnlflag (flag: 0 adds nothing to each substring * 1 adds '\n' to each substring * 2 adds ' ' to each substring) * Return: dest string, or null on error * * Notes: * (1) Concatenates the specified strings inthe sarray, preserving * all white space. * (2) If addnlflag != 0, adds either a '\n' or a ' ' after * each substring. * (3) If the sarray is empty, this returns a string with just * the character corresponding to @addnlflag. */ char * sarrayToStringRange(SARRAY *sa, l_int32 first, l_int32 nstrings, l_int32 addnlflag) { char *dest, *src, *str; l_int32 n, i, last, size, index, len; PROCNAME("sarrayToStringRange"); if (!sa) return (char *)ERROR_PTR("sa not defined", procName, NULL); if (addnlflag != 0 && addnlflag != 1 && addnlflag != 2) return (char *)ERROR_PTR("invalid addnlflag", procName, NULL); n = sarrayGetCount(sa); /* Empty sa; return char corresponding to addnlflag only */ if (n == 0) { if (first == 0) { if (addnlflag == 0) return stringNew(""); if (addnlflag == 1) return stringNew("\n"); else /* addnlflag == 2) */ return stringNew(" "); } else { return (char *)ERROR_PTR("first not valid", procName, NULL); } } if (first < 0 || first >= n) return (char *)ERROR_PTR("first not valid", procName, NULL); if (nstrings == 0 || (nstrings > n - first)) nstrings = n - first; /* no overflow */ last = first + nstrings - 1; size = 0; for (i = first; i <= last; i++) { if ((str = sarrayGetString(sa, i, L_NOCOPY)) == NULL) return (char *)ERROR_PTR("str not found", procName, NULL); size += strlen(str) + 2; } if ((dest = (char *)CALLOC(size + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", procName, NULL); index = 0; for (i = first; i <= last; i++) { src = sarrayGetString(sa, i, L_NOCOPY); len = strlen(src); memcpy(dest + index, src, len); index += len; if (addnlflag == 1) { dest[index] = '\n'; index++; } else if (addnlflag == 2) { dest[index] = ' '; index++; } } return dest; } /*----------------------------------------------------------------------* * Concatenate 2 sarrays * *----------------------------------------------------------------------*/ /*! * sarrayConcatenate() * * Input: sa1 (to be added to) * sa2 (append to sa1) * Return: 0 if OK, 1 on error * * Notes: * (1) Copies of the strings in sarray2 are added to sarray1. */ l_int32 sarrayConcatenate(SARRAY *sa1, SARRAY *sa2) { char *str; l_int32 n, i; PROCNAME("sarrayConcatenate"); if (!sa1) return ERROR_INT("sa1 not defined", procName, 1); if (!sa2) return ERROR_INT("sa2 not defined", procName, 1); n = sarrayGetCount(sa2); for (i = 0; i < n; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); sarrayAddString(sa1, str, L_COPY); } return 0; } /*! * sarrayAppendRange() * * Input: sa1 (to be added to) * sa2 (append specified range of strings in sa2 to sa1) * start (index of first string of sa2 to append) * end (index of last string of sa2 to append; -1 to end of array) * Return: 0 if OK, 1 on error * * Notes: * (1) Copies of the strings in sarray2 are added to sarray1. * (2) The [start ... end] range is truncated if necessary. * (3) Use end == -1 to append to the end of sa2. */ l_int32 sarrayAppendRange(SARRAY *sa1, SARRAY *sa2, l_int32 start, l_int32 end) { char *str; l_int32 n, i; PROCNAME("sarrayAppendRange"); if (!sa1) return ERROR_INT("sa1 not defined", procName, 1); if (!sa2) return ERROR_INT("sa2 not defined", procName, 1); if (start < 0) start = 0; n = sarrayGetCount(sa2); if (end < 0 || end >= n) end = n - 1; if (start > end) return ERROR_INT("start > end", procName, 1); for (i = start; i <= end; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); sarrayAddString(sa1, str, L_COPY); } return 0; } /*----------------------------------------------------------------------* * Pad an sarray to be the same size as another sarray * *----------------------------------------------------------------------*/ /*! * sarrayPadToSameSize() * * Input: sa1, sa2 * padstring * Return: 0 if OK, 1 on error * * Notes: * (1) If two sarrays have different size, this adds enough * instances of @padstring to the smaller so that they are * the same size. It is useful when two or more sarrays * are being sequenced in parallel, and it is necessary to * find a valid string at each index. */ l_int32 sarrayPadToSameSize(SARRAY *sa1, SARRAY *sa2, char *padstring) { l_int32 i, n1, n2; PROCNAME("sarrayPadToSameSize"); if (!sa1 || !sa2) return ERROR_INT("both sa1 and sa2 not defined", procName, 1); n1 = sarrayGetCount(sa1); n2 = sarrayGetCount(sa2); if (n1 < n2) { for (i = n1; i < n2; i++) sarrayAddString(sa1, padstring, L_COPY); } else if (n1 > n2) { for (i = n2; i < n1; i++) sarrayAddString(sa2, padstring, L_COPY); } return 0; } /*----------------------------------------------------------------------* * Convert word sarray to line sarray * *----------------------------------------------------------------------*/ /*! * sarrayConvertWordsToLines() * * Input: sa (sa of individual words) * linesize (max num of chars in each line) * Return: saout (sa of formatted lines), or null on error * * This is useful for re-typesetting text to a specific maximum * line length. The individual words in the input sarray * are concatenated into textlines. An input word string of zero * length is taken to be a paragraph separator. Each time * such a string is found, the current line is ended and * a new line is also produced that contains just the * string of zero length (""). When the output sarray * of lines is eventually converted to a string with newlines * (typically) appended to each line string, the empty * strings are just converted to newlines, producing the visible * paragraph separation. * * What happens when a word is larger than linesize? * We write it out as a single line anyway! Words preceding * or following this long word are placed on lines preceding * or following the line with the long word. Why this choice? * Long "words" found in text documents are typically URLs, and * it's often desirable not to put newlines in the middle of a URL. * The text display program (e.g., text editor) will typically * wrap the long "word" to fit in the window. */ SARRAY * sarrayConvertWordsToLines(SARRAY *sa, l_int32 linesize) { char *wd, *strl; char emptystring[] = ""; l_int32 n, i, len, totlen; SARRAY *sal, *saout; PROCNAME("sarrayConvertWordsToLines"); if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); if ((saout = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("saout not defined", procName, NULL); n = sarrayGetCount(sa); totlen = 0; sal = NULL; for (i = 0; i < n; i++) { if (!sal) { if ((sal = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("sal not made", procName, NULL); } wd = sarrayGetString(sa, i, L_NOCOPY); len = strlen(wd); if (len == 0) { /* end of paragraph: end line & insert blank line */ if (totlen > 0) { strl = sarrayToString(sal, 2); sarrayAddString(saout, strl, L_INSERT); } sarrayAddString(saout, emptystring, L_COPY); sarrayDestroy(&sal); totlen = 0; } else if (totlen == 0 && len + 1 > linesize) { /* long word! */ sarrayAddString(saout, wd, L_COPY); /* copy to one line */ } else if (totlen + len + 1 > linesize) { /* end line & start new */ strl = sarrayToString(sal, 2); sarrayAddString(saout, strl, L_INSERT); sarrayDestroy(&sal); if ((sal = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("sal not made", procName, NULL); sarrayAddString(sal, wd, L_COPY); totlen = len + 1; } else { /* add to current line */ sarrayAddString(sal, wd, L_COPY); totlen += len + 1; } } if (totlen > 0) { /* didn't end with blank line; output last line */ strl = sarrayToString(sal, 2); sarrayAddString(saout, strl, L_INSERT); sarrayDestroy(&sal); } return saout; } /*----------------------------------------------------------------------* * Split string on separator list * *----------------------------------------------------------------------*/ /* * sarraySplitString() * * Input: sa (to append to; typically empty initially) * str (string to split; not changed) * separators (characters that split input string) * Return: 0 if OK, 1 on error. * * Notes: * (1) This uses strtokSafe(). See the notes there in utils.c. */ l_int32 sarraySplitString(SARRAY *sa, const char *str, const char *separators) { char *cstr, *substr, *saveptr; PROCNAME("sarraySplitString"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!str) return ERROR_INT("str not defined", procName, 1); if (!separators) return ERROR_INT("separators not defined", procName, 1); cstr = stringNew(str); /* preserves const-ness of input str */ substr = strtokSafe(cstr, separators, &saveptr); if (substr) sarrayAddString(sa, substr, L_INSERT); while ((substr = strtokSafe(NULL, separators, &saveptr))) sarrayAddString(sa, substr, L_INSERT); FREE(cstr); return 0; } /*----------------------------------------------------------------------* * Filter sarray * *----------------------------------------------------------------------*/ /*! * sarraySelectBySubstring() * * Input: sain (input sarray) * substr ( substring for matching; can be NULL) * Return: saout (output sarray, filtered with substring) or null on error * * Notes: * (1) This selects all strings in sain that have substr as a substring. * Note that we can't use strncmp() because we're looking for * a match to the substring anywhere within each filename. * (2) If substr == NULL, returns a copy of the sarray. */ SARRAY * sarraySelectBySubstring(SARRAY *sain, const char *substr) { char *str; l_int32 n, i, offset, found; SARRAY *saout; PROCNAME("sarraySelectBySubstring"); if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); n = sarrayGetCount(sain); if (!substr || n == 0) return sarrayCopy(sain); saout = sarrayCreate(n); for (i = 0; i < n; i++) { str = sarrayGetString(sain, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (found) sarrayAddString(saout, str, L_COPY); } return saout; } /*! * sarraySelectByRange() * * Input: sain (input sarray) * first (index of first string to be selected) * last (index of last string to be selected; use 0 to go to the * end of the sarray) * Return: saout (output sarray), or null on error * * Notes: * (1) This makes @saout consisting of copies of all strings in @sain * in the index set [first ... last]. Use @last == 0 to get all * strings from @first to the last string in the sarray. */ SARRAY * sarraySelectByRange(SARRAY *sain, l_int32 first, l_int32 last) { char *str; l_int32 n, i; SARRAY *saout; PROCNAME("sarraySelectByRange"); if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); if (first < 0) first = 0; n = sarrayGetCount(sain); if (last <= 0) last = n - 1; if (last >= n) { L_WARNING("@last > n - 1; setting to n - 1\n", procName); last = n - 1; } if (first > last) return (SARRAY *)ERROR_PTR("first must be >= last", procName, NULL); saout = sarrayCreate(0); for (i = first; i <= last; i++) { str = sarrayGetString(sain, i, L_COPY); sarrayAddString(saout, str, L_INSERT); } return saout; } /*! * sarrayParseRange() * * Input: sa (input sarray) * start (index to start range search) * &actualstart ( index of actual start; may be > 'start') * &end ( index of end) * &newstart ( index of start of next range) * substr (substring for matching at beginning of string) * loc (byte offset within the string for the pattern; use * -1 if the location does not matter); * Return: 0 if valid range found; 1 otherwise * * Notes: * (1) This finds the range of the next set of strings in SA, * beginning the search at 'start', that does NOT have * the substring 'substr' either at the indicated location * in the string or anywhere in the string. The input * variable 'loc' is the specified offset within the string; * use -1 to indicate 'anywhere in the string'. * (2) Always check the return value to verify that a valid range * was found. * (3) If a valid range is not found, the values of actstart, * end and newstart are all set to the size of sa. * (4) If this is the last valid range, newstart returns the value n. * In use, this should be tested before calling the function. * (5) Usage example. To find all the valid ranges in a file * where the invalid lines begin with two dashes, copy each * line in the file to a string in an sarray, and do: * start = 0; * while (!sarrayParseRange(sa, start, &actstart, &end, &start, * "--", 0)) * fprintf(stderr, "start = %d, end = %d\n", actstart, end); */ l_int32 sarrayParseRange(SARRAY *sa, l_int32 start, l_int32 *pactualstart, l_int32 *pend, l_int32 *pnewstart, const char *substr, l_int32 loc) { char *str; l_int32 n, i, offset, found; PROCNAME("sarrayParseRange"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!pactualstart || !pend || !pnewstart) return ERROR_INT("not all range addresses defined", procName, 1); n = sarrayGetCount(sa); *pactualstart = *pend = *pnewstart = n; if (!substr) return ERROR_INT("substr not defined", procName, 1); /* Look for the first string without the marker */ if (start < 0 || start >= n) return 1; for (i = start; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (loc < 0) { if (!found) break; } else { if (!found || offset != loc) break; } } start = i; if (i == n) /* couldn't get started */ return 1; /* Look for the last string without the marker */ *pactualstart = start; for (i = start + 1; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (loc < 0) { if (found) break; } else { if (found && offset == loc) break; } } *pend = i - 1; start = i; if (i == n) /* no further range */ return 0; /* Look for the first string after *pend without the marker. * This will start the next run of strings, if it exists. */ for (i = start; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); arrayFindSequence((l_uint8 *)str, strlen(str), (l_uint8 *)substr, strlen(substr), &offset, &found); if (loc < 0) { if (!found) break; } else { if (!found || offset != loc) break; } } if (i < n) *pnewstart = i; return 0; } /*----------------------------------------------------------------------* * Sort * *----------------------------------------------------------------------*/ /*! * sarraySort() * * Input: saout (output sarray; can be NULL or equal to sain) * sain (input sarray) * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * Return: saout (output sarray, sorted by ascii value), or null on error * * Notes: * (1) Set saout = sain for in-place; otherwise, set naout = NULL. * (2) Shell sort, modified from K&R, 2nd edition, p.62. * Slow but simple O(n logn) sort. */ SARRAY * sarraySort(SARRAY *saout, SARRAY *sain, l_int32 sortorder) { char **array; char *tmp; l_int32 n, i, j, gap; PROCNAME("sarraySort"); if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); /* Make saout if necessary; otherwise do in-place */ if (!saout) saout = sarrayCopy(sain); else if (sain != saout) return (SARRAY *)ERROR_PTR("invalid: not in-place", procName, NULL); array = saout->array; /* operate directly on the array */ n = sarrayGetCount(saout); /* Shell sort */ for (gap = n/2; gap > 0; gap = gap / 2) { for (i = gap; i < n; i++) { for (j = i - gap; j >= 0; j -= gap) { if ((sortorder == L_SORT_INCREASING && stringCompareLexical(array[j], array[j + gap])) || (sortorder == L_SORT_DECREASING && stringCompareLexical(array[j + gap], array[j]))) { tmp = array[j]; array[j] = array[j + gap]; array[j + gap] = tmp; } } } } return saout; } /*! * sarraySortByIndex() * * Input: sain * naindex (na that maps from the new sarray to the input sarray) * Return: saout (sorted), or null on error */ SARRAY * sarraySortByIndex(SARRAY *sain, NUMA *naindex) { char *str; l_int32 i, n, index; SARRAY *saout; PROCNAME("sarraySortByIndex"); if (!sain) return (SARRAY *)ERROR_PTR("sain not defined", procName, NULL); if (!naindex) return (SARRAY *)ERROR_PTR("naindex not defined", procName, NULL); n = sarrayGetCount(sain); saout = sarrayCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); str = sarrayGetString(sain, index, L_COPY); sarrayAddString(saout, str, L_INSERT); } return saout; } /*! * stringCompareLexical() * * Input: str1 * str2 * Return: 1 if str1 > str2 (lexically); 0 otherwise * * Notes: * (1) If the lexical values are identical, return a 0, to * indicate that no swapping is required to sort the strings. */ l_int32 stringCompareLexical(const char *str1, const char *str2) { l_int32 i, len1, len2, len; PROCNAME("sarrayCompareLexical"); if (!str1) return ERROR_INT("str1 not defined", procName, 1); if (!str2) return ERROR_INT("str2 not defined", procName, 1); len1 = strlen(str1); len2 = strlen(str2); len = L_MIN(len1, len2); for (i = 0; i < len; i++) { if (str1[i] == str2[i]) continue; if (str1[i] > str2[i]) return 1; else return 0; } if (len1 > len2) return 1; else return 0; } /*----------------------------------------------------------------------* * Serialize for I/O * *----------------------------------------------------------------------*/ /*! * sarrayRead() * * Input: filename * Return: sarray, or null on error */ SARRAY * sarrayRead(const char *filename) { FILE *fp; SARRAY *sa; PROCNAME("sarrayRead"); if (!filename) return (SARRAY *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (SARRAY *)ERROR_PTR("stream not opened", procName, NULL); if ((sa = sarrayReadStream(fp)) == NULL) { fclose(fp); return (SARRAY *)ERROR_PTR("sa not read", procName, NULL); } fclose(fp); return sa; } /*! * sarrayReadStream() * * Input: stream * Return: sarray, or null on error * * Notes: * (1) We store the size of each string along with the string. * (2) This allows a string to have embedded newlines. By reading * the entire string, as determined by its size, we are * not affected by any number of embedded newlines. */ SARRAY * sarrayReadStream(FILE *fp) { char *stringbuf; l_int32 i, n, size, index, bufsize, version, ignore; SARRAY *sa; PROCNAME("sarrayReadStream"); if (!fp) return (SARRAY *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nSarray Version %d\n", &version) != 1) return (SARRAY *)ERROR_PTR("not an sarray file", procName, NULL); if (version != SARRAY_VERSION_NUMBER) return (SARRAY *)ERROR_PTR("invalid sarray version", procName, NULL); if (fscanf(fp, "Number of strings = %d\n", &n) != 1) return (SARRAY *)ERROR_PTR("error on # strings", procName, NULL); if ((sa = sarrayCreate(n)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); bufsize = L_BUF_SIZE + 1; if ((stringbuf = (char *)CALLOC(bufsize, sizeof(char))) == NULL) return (SARRAY *)ERROR_PTR("stringbuf not made", procName, NULL); for (i = 0; i < n; i++) { /* Get the size of the stored string */ if (fscanf(fp, "%d[%d]:", &index, &size) != 2) return (SARRAY *)ERROR_PTR("error on string size", procName, NULL); /* Expand the string buffer if necessary */ if (size > bufsize - 5) { FREE(stringbuf); bufsize = (l_int32)(1.5 * size); stringbuf = (char *)CALLOC(bufsize, sizeof(char)); } /* Read the stored string, plus leading spaces and trailing \n */ if (fread(stringbuf, 1, size + 3, fp) != size + 3) return (SARRAY *)ERROR_PTR("error reading string", procName, NULL); /* Remove the \n that was added by sarrayWriteStream() */ stringbuf[size + 2] = '\0'; /* Copy it in, skipping the 2 leading spaces */ sarrayAddString(sa, stringbuf + 2, L_COPY); } ignore = fscanf(fp, "\n"); FREE(stringbuf); return sa; } /*! * sarrayWrite() * * Input: filename * sarray * Return: 0 if OK; 1 on error */ l_int32 sarrayWrite(const char *filename, SARRAY *sa) { FILE *fp; PROCNAME("sarrayWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!sa) return ERROR_INT("sa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (sarrayWriteStream(fp, sa)) return ERROR_INT("sa not written to stream", procName, 1); fclose(fp); return 0; } /*! * sarrayWriteStream() * * Input: stream * sarray * Returns 0 if OK; 1 on error * * Notes: * (1) This appends a '\n' to each string, which is stripped * off by sarrayReadStream(). */ l_int32 sarrayWriteStream(FILE *fp, SARRAY *sa) { l_int32 i, n, len; PROCNAME("sarrayWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!sa) return ERROR_INT("sa not defined", procName, 1); n = sarrayGetCount(sa); fprintf(fp, "\nSarray Version %d\n", SARRAY_VERSION_NUMBER); fprintf(fp, "Number of strings = %d\n", n); for (i = 0; i < n; i++) { len = strlen(sa->array[i]); fprintf(fp, " %d[%d]: %s\n", i, len, sa->array[i]); } fprintf(fp, "\n"); return 0; } /*! * sarrayAppend() * * Input: filename * sarray * Return: 0 if OK; 1 on error */ l_int32 sarrayAppend(const char *filename, SARRAY *sa) { FILE *fp; PROCNAME("sarrayAppend"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!sa) return ERROR_INT("sa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "a")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (sarrayWriteStream(fp, sa)) return ERROR_INT("sa not appended to stream", procName, 1); fclose(fp); return 0; } /*---------------------------------------------------------------------* * Directory filenames * *---------------------------------------------------------------------*/ /*! * getNumberedPathnamesInDirectory() * * Input: directory name * substr ( substring filter on filenames; can be NULL) * numpre (number of characters in name before number) * numpost (number of characters in name after the number, * up to a dot before an extension) * maxnum (only consider page numbers up to this value) * Return: sarray of numbered pathnames, or NULL on error * * Notes: * (1) Returns the full pathnames of the numbered filenames in * the directory. The number in the filename is the index * into the sarray. For indices for which there are no filenames, * an empty string ("") is placed into the sarray. * This makes reading numbered files very simple. For example, * the image whose filename includes number N can be retrieved using * pixReadIndexed(sa, N); * (2) If @substr is not NULL, only filenames that contain * the substring can be included. If @substr is NULL, * all matching filenames are used. * (3) If no numbered files are found, it returns an empty sarray, * with no initialized strings. * (4) It is assumed that the page number is contained within * the basename (the filename without directory or extension). * @numpre is the number of characters in the basename * preceeding the actual page number; @numpost is the number * following the page number, up to either the end of the * basename or a ".", whichever comes first. * (5) This is useful when all filenames contain numbers that are * not necessarily consecutive. 0-padding is not required. * (6) To use a O(n) matching algorithm, the largest page number * is found and two internal arrays of this size are created. * This maximum is constrained not to exceed @maxsum, * to make sure that an unrealistically large number is not * accidentally used to determine the array sizes. */ SARRAY * getNumberedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost, l_int32 maxnum) { l_int32 nfiles; SARRAY *sa, *saout; PROCNAME("getNumberedPathnamesInDirectory"); if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); if ((nfiles = sarrayGetCount(sa)) == 0) return sarrayCreate(1); saout = convertSortedToNumberedPathnames(sa, numpre, numpost, maxnum); sarrayDestroy(&sa); return saout; } /*! * getSortedPathnamesInDirectory() * * Input: directory name * substr ( substring filter on filenames; can be NULL) * first (0-based) * nfiles (use 0 for all to the end) * Return: sarray of sorted pathnames, or NULL on error * * Notes: * (1) Use @substr to filter filenames in the directory. If * @substr == NULL, this takes all files. * (2) The files in the directory, after optional filtering by * the substring, are lexically sorted in increasing order. * Use @first and @nfiles to select a contiguous set of files. * (3) The full pathnames are returned for the requested sequence. * If no files are found after filtering, returns an empty sarray. */ SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles) { char *fname, *fullname; l_int32 i, n, last; SARRAY *sa, *safiles, *saout; PROCNAME("getSortedPathnamesInDirectory"); if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); if ((sa = getFilenamesInDirectory(dirname)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); safiles = sarraySelectBySubstring(sa, substr); sarrayDestroy(&sa); n = sarrayGetCount(safiles); if (n == 0) { L_WARNING("no files found\n", procName); return safiles; } sarraySort(safiles, safiles, L_SORT_INCREASING); first = L_MIN(L_MAX(first, 0), n - 1); if (nfiles == 0) nfiles = n - first; last = L_MIN(first + nfiles - 1, n - 1); saout = sarrayCreate(last - first + 1); for (i = first; i <= last; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); fullname = genPathname(dirname, fname); sarrayAddString(saout, fullname, L_INSERT); } sarrayDestroy(&safiles); return saout; } /*! * convertSortedToNumberedPathnames() * * Input: sorted pathnames (including zero-padded integers) * numpre (number of characters in name before number) * numpost (number of characters in name after the number, * up to a dot before an extension) * maxnum (only consider page numbers up to this value) * Return: sarray of numbered pathnames, or NULL on error * * Notes: * (1) Typically, numpre = numpost = 0; e.g., when the filename * just has a number followed by an optional extension. */ SARRAY * convertSortedToNumberedPathnames(SARRAY *sa, l_int32 numpre, l_int32 numpost, l_int32 maxnum) { char *fname, *str; l_int32 i, nfiles, num, index; SARRAY *saout; PROCNAME("convertSortedToNumberedPathnames"); if (!sa) return (SARRAY *)ERROR_PTR("sa not defined", procName, NULL); if ((nfiles = sarrayGetCount(sa)) == 0) return sarrayCreate(1); /* Find the last file in the sorted array that has a number * that (a) matches the count pattern and (b) does not * exceed @maxnum. @maxnum sets an upper limit on the size * of the sarray. */ num = 0; for (i = nfiles - 1; i >= 0; i--) { fname = sarrayGetString(sa, i, L_NOCOPY); num = extractNumberFromFilename(fname, numpre, numpost); if (num < 0) continue; num = L_MIN(num + 1, maxnum); break; } if (num <= 0) /* none found */ return sarrayCreate(1); /* Insert pathnames into the output sarray. * Ignore numbers that are out of the range of sarray. */ saout = sarrayCreateInitialized(num, (char *)""); for (i = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); index = extractNumberFromFilename(fname, numpre, numpost); if (index < 0 || index >= num) continue; str = sarrayGetString(saout, index, L_NOCOPY); if (str[0] != '\0') L_WARNING("\n Multiple files with same number: %d\n", procName, index); sarrayReplaceString(saout, index, fname, L_COPY); } return saout; } /*! * getFilenamesInDirectory() * * Input: directory name * Return: sarray of file names, or NULL on error * * Notes: * (1) The versions compiled under unix and cygwin use the POSIX C * library commands for handling directories. For windows, * there is a separate implementation. * (2) It returns an array of filename tails; i.e., only the part of * the path after the last slash. * (3) Use of the d_type field of dirent is not portable: * "According to POSIX, the dirent structure contains a field * char d_name[] of unspecified size, with at most NAME_MAX * characters preceding the terminating null character. Use * of other fields will harm the portability of your programs." * (4) As a consequence of (3), we note several things: * - MINGW doesn't have a d_type member. * - Older versions of gcc (e.g., 2.95.3) return DT_UNKNOWN * for d_type from all files. * On these systems, this function will return directories * (except for '.' and '..', which are eliminated using * the d_name field). */ #ifndef _WIN32 SARRAY * getFilenamesInDirectory(const char *dirname) { char *name; l_int32 len; SARRAY *safiles; DIR *pdir; struct dirent *pdirentry; PROCNAME("getFilenamesInDirectory"); if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); if ((pdir = opendir(dirname)) == NULL) return (SARRAY *)ERROR_PTR("pdir not opened", procName, NULL); if ((safiles = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("safiles not made", procName, NULL); while ((pdirentry = readdir(pdir))) { /* It's nice to ignore directories. For this it is necessary to * define _BSD_SOURCE in the CC command, because the DT_DIR * flag is non-standard. */ #if !defined(__SOLARIS__) if (pdirentry->d_type == DT_DIR) continue; #endif /* Filter out "." and ".." if they're passed through */ name = pdirentry->d_name; len = strlen(name); if (len == 1 && name[len - 1] == '.') continue; if (len == 2 && name[len - 1] == '.' && name[len - 2] == '.') continue; sarrayAddString(safiles, name, L_COPY); } closedir(pdir); return safiles; } #else /* _WIN32 */ /* http://msdn2.microsoft.com/en-us/library/aa365200(VS.85).aspx */ #include SARRAY * getFilenamesInDirectory(const char *dirname) { char *pszDir; char *tempname; HANDLE hFind = INVALID_HANDLE_VALUE; SARRAY *safiles; WIN32_FIND_DATAA ffd; PROCNAME("getFilenamesInDirectory"); if (!dirname) return (SARRAY *)ERROR_PTR("dirname not defined", procName, NULL); tempname = genPathname(dirname, NULL); pszDir = stringJoin(tempname, "\\*"); FREE(tempname); if (strlen(pszDir) + 1 > MAX_PATH) { FREE(pszDir); return (SARRAY *)ERROR_PTR("dirname is too long", procName, NULL); } if ((safiles = sarrayCreate(0)) == NULL) { FREE(pszDir); return (SARRAY *)ERROR_PTR("safiles not made", procName, NULL); } hFind = FindFirstFileA(pszDir, &ffd); if (INVALID_HANDLE_VALUE == hFind) { sarrayDestroy(&safiles); FREE(pszDir); return (SARRAY *)ERROR_PTR("hFind not opened", procName, NULL); } while (FindNextFileA(hFind, &ffd) != 0) { if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) /* skip dirs */ continue; sarrayAddString(safiles, ffd.cFileName, L_COPY); } FindClose(hFind); FREE(pszDir); return safiles; } #endif /* _WIN32 */ leptonica-1.70/src/affinecompose.c0000664000175000017500000004457012236745252015302 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * affinecompose.c * * Composable coordinate transforms * l_float32 *createMatrix2dTranslate() * l_float32 *createMatrix2dScale() * l_float32 *createMatrix2dRotate() * * Special coordinate transforms on pta * PTA *ptaTranslate() * PTA *ptaScale() * PTA *ptaRotate() * * Special coordinate transforms on boxa * BOXA *boxaTranslate() * BOXA *boxaScale() * BOXA *boxaRotate() * * General coordinate transform on pta and boxa * PTA *ptaAffineTransform() * BOXA *boxaAffineTransform() * * Matrix operations * l_int32 l_productMatVec() * l_int32 l_productMat2() * l_int32 l_productMat3() * l_int32 l_productMat4() */ #include #include "allheaders.h" /*-------------------------------------------------------------* * Composable coordinate transforms * *-------------------------------------------------------------*/ /*! * createMatrix2dTranslate() * * Input: transx (x component of translation wrt. the origin) * transy (y component of translation wrt. the origin) * Return: 3x3 transform matrix, or null on error * * Notes; * (1) The translation is equivalent to: * v' = Av * where v and v' are 1x3 column vectors in the form * v = [x, y, 1]^ (^ denotes transpose) * and the affine tranlation matrix is * A = [ 1 0 tx * 0 1 ty * 0 0 1 ] * * (2) We consider translation as with respect to a fixed origin. * In a clipping operation, the origin moves and the points * are fixed, and you use (-tx, -ty) where (tx, ty) is the * translation vector of the origin. */ l_float32 * createMatrix2dTranslate(l_float32 transx, l_float32 transy) { l_float32 *mat; PROCNAME("createMatrix2dTranslate"); if ((mat = (l_float32 *)CALLOC(9, sizeof(l_float32))) == NULL) return (l_float32 *)ERROR_PTR("mat not made", procName, NULL); mat[0] = mat[4] = mat[8] = 1; mat[2] = transx; mat[5] = transy; return mat; } /*! * createMatrix2dScale() * * Input: scalex (horizontal scale factor) * scaley (vertical scale factor) * Return: 3x3 transform matrix, or null on error * * Notes; * (1) The scaling is equivalent to: * v' = Av * where v and v' are 1x3 column vectors in the form * v = [x, y, 1]^ (^ denotes transpose) * and the affine scaling matrix is * A = [ sx 0 0 * 0 sy 0 * 0 0 1 ] * * (2) We consider scaling as with respect to a fixed origin. * In other words, the origin is the only point that doesn't * move in the scaling transform. */ l_float32 * createMatrix2dScale(l_float32 scalex, l_float32 scaley) { l_float32 *mat; PROCNAME("createMatrix2dScale"); if ((mat = (l_float32 *)CALLOC(9, sizeof(l_float32))) == NULL) return (l_float32 *)ERROR_PTR("mat not made", procName, NULL); mat[0] = scalex; mat[4] = scaley; mat[8] = 1; return mat; } /*! * createMatrix2dRotate() * * Input: xc, yc (location of center of rotation) * angle (rotation in radians; clockwise is positive) * Return: 3x3 transform matrix, or null on error * * Notes; * (1) The rotation is equivalent to: * v' = Av * where v and v' are 1x3 column vectors in the form * v = [x, y, 1]^ (^ denotes transpose) * and the affine rotation matrix is * A = [ cosa -sina xc*(1-cosa) + yc*sina * sina cosa yc*(1-cosa) - xc*sina * 0 0 1 ] * * If the rotation is about the origin, (xc, yc) = (0, 0) and * this simplifies to * A = [ cosa -sina 0 * sina cosa 0 * 0 0 1 ] * * These relations follow from the following equations, which * you can convince yourself are correct as follows. Draw a * circle centered on (xc,yc) and passing through (x,y), with * (x',y') on the arc at an angle 'a' clockwise from (x,y). * [ Hint: cos(a + b) = cosa * cosb - sina * sinb * sin(a + b) = sina * cosb + cosa * sinb ] * * x' - xc = (x - xc) * cosa - (y - yc) * sina * y' - yc = (x - xc) * sina + (y - yc) * cosa */ l_float32 * createMatrix2dRotate(l_float32 xc, l_float32 yc, l_float32 angle) { l_float32 sina, cosa; l_float32 *mat; PROCNAME("createMatrix2dRotate"); if ((mat = (l_float32 *)CALLOC(9, sizeof(l_float32))) == NULL) return (l_float32 *)ERROR_PTR("mat not made", procName, NULL); sina = sin(angle); cosa = cos(angle); mat[0] = mat[4] = cosa; mat[1] = -sina; mat[2] = xc * (1.0 - cosa) + yc * sina; mat[3] = sina; mat[5] = yc * (1.0 - cosa) - xc * sina; mat[8] = 1; return mat; } /*-------------------------------------------------------------* * Special coordinate transforms on pta * *-------------------------------------------------------------*/ /*! * ptaTranslate() * * Input: ptas (for initial points) * transx (x component of translation wrt. the origin) * transy (y component of translation wrt. the origin) * Return: ptad (translated points), or null on error * * Notes; * (1) See createMatrix2dTranslate() for details of transform. */ PTA * ptaTranslate(PTA *ptas, l_float32 transx, l_float32 transy) { l_int32 i, npts; l_float32 x, y; PTA *ptad; PROCNAME("ptaTranslate"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, x + transx, y + transy); } return ptad; } /*! * ptaScale() * * Input: ptas (for initial points) * scalex (horizontal scale factor) * scaley (vertical scale factor) * Return: 0 if OK; 1 on error * * Notes; * (1) See createMatrix2dScale() for details of transform. */ PTA * ptaScale(PTA *ptas, l_float32 scalex, l_float32 scaley) { l_int32 i, npts; l_float32 x, y; PTA *ptad; PROCNAME("ptaScale"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, scalex * x, scaley * y); } return ptad; } /*! * ptaRotate() * * Input: ptas (for initial points) * (xc, yc) (location of center of rotation) * angle (rotation in radians; clockwise is positive) * (&ptad) ( new locations) * Return: 0 if OK; 1 on error * * Notes; * (1) See createMatrix2dScale() for details of transform. */ PTA * ptaRotate(PTA *ptas, l_float32 xc, l_float32 yc, l_float32 angle) { l_int32 i, npts; l_float32 x, y, xp, yp, sina, cosa; PTA *ptad; PROCNAME("ptaRotate"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); sina = sin(angle); cosa = cos(angle); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &x, &y); xp = xc + (x - xc) * cosa - (y - yc) * sina; yp = yc + (x - xc) * sina + (y - yc) * cosa; ptaAddPt(ptad, xp, yp); } return ptad; } /*-------------------------------------------------------------* * Special coordinate transforms on boxa * *-------------------------------------------------------------*/ /*! * boxaTranslate() * * Input: boxas * transx (x component of translation wrt. the origin) * transy (y component of translation wrt. the origin) * Return: boxad (translated boxas), or null on error * * Notes; * (1) See createMatrix2dTranslate() for details of transform. */ BOXA * boxaTranslate(BOXA *boxas, l_float32 transx, l_float32 transy) { PTA *ptas, *ptad; BOXA *boxad; PROCNAME("boxaTranslate"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaTranslate(ptas, transx, transy); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*! * boxaScale() * * Input: boxas * scalex (horizontal scale factor) * scaley (vertical scale factor) * Return: boxad (scaled boxas), or null on error * * Notes; * (1) See createMatrix2dScale() for details of transform. */ BOXA * boxaScale(BOXA *boxas, l_float32 scalex, l_float32 scaley) { PTA *ptas, *ptad; BOXA *boxad; PROCNAME("boxaScale"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaScale(ptas, scalex, scaley); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*! * boxaRotate() * * Input: boxas * (xc, yc) (location of center of rotation) * angle (rotation in radians; clockwise is positive) * Return: boxad (scaled boxas), or null on error * * Notes; * (1) See createMatrix2dRotate() for details of transform. */ BOXA * boxaRotate(BOXA *boxas, l_float32 xc, l_float32 yc, l_float32 angle) { PTA *ptas, *ptad; BOXA *boxad; PROCNAME("boxaRotate"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaRotate(ptas, xc, yc, angle); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*-------------------------------------------------------------* * General affine coordinate transform * *-------------------------------------------------------------*/ /*! * ptaAffineTransform() * * Input: ptas (for initial points) * mat (3x3 transform matrix; canonical form) * Return: ptad (transformed points), or null on error */ PTA * ptaAffineTransform(PTA *ptas, l_float32 *mat) { l_int32 i, npts; l_float32 vecs[3], vecd[3]; PTA *ptad; PROCNAME("ptaAffineTransform"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (!mat) return (PTA *)ERROR_PTR("transform not defined", procName, NULL); vecs[2] = 1; npts = ptaGetCount(ptas); if ((ptad = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = 0; i < npts; i++) { ptaGetPt(ptas, i, &vecs[0], &vecs[1]); l_productMatVec(mat, vecs, vecd, 3); ptaAddPt(ptad, vecd[0], vecd[1]); } return ptad; } /*! * boxaAffineTransform() * * Input: boxas * mat (3x3 transform matrix; canonical form) * Return: boxad (transformed boxas), or null on error */ BOXA * boxaAffineTransform(BOXA *boxas, l_float32 *mat) { PTA *ptas, *ptad; BOXA *boxad; PROCNAME("boxaAffineTransform"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (!mat) return (BOXA *)ERROR_PTR("transform not defined", procName, NULL); ptas = boxaConvertToPta(boxas, 4); ptad = ptaAffineTransform(ptas, mat); boxad = ptaConvertToBoxa(ptad, 4); ptaDestroy(&ptas); ptaDestroy(&ptad); return boxad; } /*-------------------------------------------------------------* * Matrix operations * *-------------------------------------------------------------*/ /*! * l_productMatVec() * * Input: mat (square matrix, as a 1-dimensional @size^2 array) * vecs (input column vector of length @size) * vecd (result column vector) * size (matrix is @size x @size; vectors are length @size) * Return: 0 if OK, 1 on error */ l_int32 l_productMatVec(l_float32 *mat, l_float32 *vecs, l_float32 *vecd, l_int32 size) { l_int32 i, j; PROCNAME("l_productMatVec"); if (!mat) return ERROR_INT("matrix not defined", procName, 1); if (!vecs) return ERROR_INT("input vector not defined", procName, 1); if (!vecd) return ERROR_INT("result vector not defined", procName, 1); for (i = 0; i < size; i++) { vecd[i] = 0; for (j = 0; j < size; j++) { vecd[i] += mat[size * i + j] * vecs[j]; } } return 0; } /*! * l_productMat2() * * Input: mat1 (square matrix, as a 1-dimensional size^2 array) * mat2 (square matrix, as a 1-dimensional size^2 array) * matd (square matrix; product stored here) * size (of matrices) * Return: 0 if OK, 1 on error */ l_int32 l_productMat2(l_float32 *mat1, l_float32 *mat2, l_float32 *matd, l_int32 size) { l_int32 i, j, k, index; PROCNAME("l_productMat2"); if (!mat1) return ERROR_INT("matrix 1 not defined", procName, 1); if (!mat2) return ERROR_INT("matrix 2 not defined", procName, 1); if (!matd) return ERROR_INT("result matrix not defined", procName, 1); for (i = 0; i < size; i++) { for (j = 0; j < size; j++) { index = size * i + j; matd[index] = 0; for (k = 0; k < size; k++) matd[index] += mat1[size * i + k] * mat2[size * k + j]; } } return 0; } /*! * l_productMat3() * * Input: mat1 (square matrix, as a 1-dimensional size^2 array) * mat2 (square matrix, as a 1-dimensional size^2 array) * mat3 (square matrix, as a 1-dimensional size^2 array) * matd (square matrix; product stored here) * size (of matrices) * Return: 0 if OK, 1 on error */ l_int32 l_productMat3(l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *matd, l_int32 size) { l_float32 *matt; PROCNAME("l_productMat3"); if (!mat1) return ERROR_INT("matrix 1 not defined", procName, 1); if (!mat2) return ERROR_INT("matrix 2 not defined", procName, 1); if (!mat3) return ERROR_INT("matrix 3 not defined", procName, 1); if (!matd) return ERROR_INT("result matrix not defined", procName, 1); if ((matt = (l_float32 *)CALLOC(size * size, sizeof(l_float32))) == NULL) return ERROR_INT("matt not made", procName, 1); l_productMat2(mat1, mat2, matt, size); l_productMat2(matt, mat3, matd, size); FREE(matt); return 0; } /*! * l_productMat4() * * Input: mat1 (square matrix, as a 1-dimensional size^2 array) * mat2 (square matrix, as a 1-dimensional size^2 array) * mat3 (square matrix, as a 1-dimensional size^2 array) * mat4 (square matrix, as a 1-dimensional size^2 array) * matd (square matrix; product stored here) * size (of matrices) * Return: 0 if OK, 1 on error */ l_int32 l_productMat4(l_float32 *mat1, l_float32 *mat2, l_float32 *mat3, l_float32 *mat4, l_float32 *matd, l_int32 size) { l_float32 *matt; PROCNAME("l_productMat4"); if (!mat1) return ERROR_INT("matrix 1 not defined", procName, 1); if (!mat2) return ERROR_INT("matrix 2 not defined", procName, 1); if (!mat3) return ERROR_INT("matrix 3 not defined", procName, 1); if (!matd) return ERROR_INT("result matrix not defined", procName, 1); if ((matt = (l_float32 *)CALLOC(size * size, sizeof(l_float32))) == NULL) return ERROR_INT("matt not made", procName, 1); l_productMat3(mat1, mat2, mat3, matt, size); l_productMat2(matt, mat4, matd, size); FREE(matt); return 0; } leptonica-1.70/src/hmttemplate1.txt0000644000175000017500000001315611707052573015457 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast hit-miss transform with auto-generated sels * --- * PIX *pixHMTDwa_*() --- * PIX *pixFHMTGen_*() */ #include #include "allheaders.h" --- This file is: hmttemplate1.txt --- --- We need to include these prototypes: --- PIX *pixHMTDwa_*(PIX *pixd, PIX *pixs, l_int32 operation); --- PIX *pixFHMTGen_*(PIX *pixd, PIX *pixs, l_int32 operation); --- l_int32 fhmtgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * pixHMTDwa_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * sel name * Return: pixd * * Notes: * (1) This simply adds a 32 pixel border, calls the appropriate * pixFHMTGen_*(), and removes the border. * See notes below for that function. */ PIX * --- pixHMTDwa_*(PIX *pixd, PIX *pixs, char *selname) { PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixHMTDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); pixt1 = pixAddBorder(pixs, 32, 0); --- pixt2 = pixFHMTGen_*(NULL, pixt1, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * pixFHMTGen_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * sel name * Return: pixd * * Notes: * (1) This is a dwa implementation of the hit-miss transform * on pixs by the sel. * (2) The sel must be limited in size to not more than 31 pixels * about the origin. It must have at least one hit, and it * can have any number of misses. * (3) This handles all required setting of the border pixels * before erosion and dilation. */ PIX * --- pixFHMTGen_*(PIX *pixd, PIX *pixs, char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFHMTGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with 32 additional border * pixels, that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; --- fhmtgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ --- fhmtgen_low_*(datad, w, h, wpld, datas, wpls, index); } return pixd; } leptonica-1.70/src/colorcontent.c0000644000175000017500000015362612267242427015176 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorcontent.c * * Builds an image of the color content, on a per-pixel basis, * as a measure of the amount of divergence of each color * component (R,G,B) from gray. * l_int32 pixColorContent() * * Finds the 'amount' of color in an image, on a per-pixel basis, * as a measure of the difference of the pixel color from gray. * PIX *pixColorMagnitude() * * Generates a mask over pixels that have sufficient color and * are not too close to gray pixels. * PIX *pixMaskOverColorPixels() * * Finds the fraction of pixels with "color" that are not close to black * l_int32 pixColorFraction() * * Finds the number of perceptually significant gray intensities * in a grayscale image. * l_int32 pixNumSignificantGrayColors() * * Identifies images where color quantization will cause posterization * due to the existence of many colors in low-gradient regions. * l_int32 pixColorsForQuantization() * * Finds the number of unique colors in an image * l_int32 pixNumColors() * * Find the most "populated" colors in the image (and quantize) * l_int32 pixGetMostPopulatedColors() * PIX *pixSimpleColorQuantize() * * Constructs a color histogram based on rgb indices * NUMA *pixGetRGBHistogram() * l_int32 makeRGBIndexTables() * l_int32 getRGBFromIndex() * * Color is tricky. If we consider gray (r = g = b) to have no color * content, how should we define the color content in each component * of an arbitrary pixel, as well as the overall color magnitude? * * I can think of three ways to define the color content in each component: * * (1) Linear. For each component, take the difference from the average * of all three. * (2) Linear. For each component, take the difference from the average * of the other two. * (3) Nonlinear. For each component, take the minimum of the differences * from the other two. * * How might one choose from among these? Consider two different situations: * (a) r = g = 0, b = 255 {255} /255/ * (b) r = 0, g = 127, b = 255 {191} /128/ * How much g is in each of these? The three methods above give: * (a) 1: 85 2: 127 3: 0 [85] * (b) 1: 0 2: 0 3: 127 [0] * How much b is in each of these? * (a) 1: 170 2: 255 3: 255 [255] * (b) 1: 127 2: 191 3: 127 [191] * The number I'd "like" to give is in []. (Please don't ask why, it's * just a feeling. * * So my preferences seem to be somewhere between (1) and (2). * (3) is just too "decisive!" Let's pick (2). * * We also allow compensation for white imbalance. For each * component, we do a linear TRC (gamma = 1.0), where the black * point remains at 0 and the white point is given by the input * parameter. This is equivalent to doing a global remapping, * as with pixGlobalNormRGB(), followed by color content (or magnitude) * computation, but without the overhead of first creating the * white point normalized image. * * Another useful property is the overall color magnitude in the pixel. * For this there are again several choices, such as: * (a) rms deviation from the mean * (b) the average L1 deviation from the mean * (c) the maximum (over components) of one of the color * content measures given above. * * For now, we will choose two of the methods in (c): * L_MAX_DIFF_FROM_AVERAGE_2 * Define the color magnitude as the maximum over components * of the difference between the component value and the * average of the other two. It is easy to show that * this is equivalent to selecting the two component values * that are closest to each other, averaging them, and * using the distance from that average to the third component. * For (a) and (b) above, this value is in {..}. * L_MAX_MIN_DIFF_FROM_2 * Define the color magnitude as the maximum over components * of the minimum difference between the component value and the * other two values. It is easy to show that this is equivalent * to selecting the intermediate value of the three differences * between the three components. For (a) and (b) above, * this value is in /../. */ #include "allheaders.h" /* ----------------------------------------------------------------------- * * Builds an image of the color content, on a per-pixel basis, * * as a measure of the amount of divergence of each color * * component (R,G,B) from gray. * * ----------------------------------------------------------------------- */ /*! * pixColorContent() * * Input: pixs (32 bpp rgb or 8 bpp colormapped) * rwhite, gwhite, bwhite (color value associated with white point) * mingray (min gray value for which color is measured) * &pixr ( 8 bpp red 'content') * &pixg ( 8 bpp green 'content') * &pixb ( 8 bpp blue 'content') * Return: 0 if OK, 1 on error * * Notes: * (1) This returns the color content in each component, which is * a measure of the deviation from gray, and is defined * as the difference between the component and the average of * the other two components. See the discussion at the * top of this file. * (2) The three numbers (rwhite, gwhite and bwhite) can be thought * of as the values in the image corresponding to white. * They are used to compensate for an unbalanced color white point. * They must either be all 0 or all non-zero. To turn this * off, set them all to 0. * (3) If the maximum component after white point correction, * max(r,g,b), is less than mingray, all color components * for that pixel are set to zero. * Use mingray = 0 to turn off this filtering of dark pixels. * (4) Therefore, use 0 for all four input parameters if the color * magnitude is to be calculated without either white balance * correction or dark filtering. */ l_int32 pixColorContent(PIX *pixs, l_int32 rwhite, l_int32 gwhite, l_int32 bwhite, l_int32 mingray, PIX **ppixr, PIX **ppixg, PIX **ppixb) { l_int32 w, h, d, i, j, wplc, wplr, wplg, wplb; l_int32 rval, gval, bval, rgdiff, rbdiff, gbdiff, maxval, colorval; l_int32 *rtab, *gtab, *btab; l_uint32 pixel; l_uint32 *datac, *datar, *datag, *datab, *linec, *liner, *lineg, *lineb; NUMA *nar, *nag, *nab; PIX *pixc; /* rgb */ PIX *pixr, *pixg, *pixb; /* 8 bpp grayscale */ PIXCMAP *cmap; PROCNAME("pixColorContent"); if (ppixr) *ppixr = NULL; if (ppixg) *ppixg = NULL; if (ppixb) *ppixb = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!ppixr && !ppixg && !ppixb) return ERROR_INT("nothing to compute", procName, 1); if (mingray < 0) mingray = 0; pixGetDimensions(pixs, &w, &h, &d); if (mingray > 255) return ERROR_INT("mingray > 255", procName, 1); if (rwhite < 0 || gwhite < 0 || bwhite < 0) return ERROR_INT("some white vals are negative", procName, 1); if ((rwhite || gwhite || bwhite) && (rwhite * gwhite * bwhite == 0)) return ERROR_INT("white vals not all zero or all nonzero", procName, 1); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return ERROR_INT("pixs neither cmapped nor 32 bpp", procName, 1); if (cmap) pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pixc = pixClone(pixs); pixr = pixg = pixb = NULL; pixGetDimensions(pixc, &w, &h, NULL); if (ppixr) { pixr = pixCreate(w, h, 8); datar = pixGetData(pixr); wplr = pixGetWpl(pixr); *ppixr = pixr; } if (ppixg) { pixg = pixCreate(w, h, 8); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); *ppixg = pixg; } if (ppixb) { pixb = pixCreate(w, h, 8); datab = pixGetData(pixb); wplb = pixGetWpl(pixb); *ppixb = pixb; } datac = pixGetData(pixc); wplc = pixGetWpl(pixc); if (rwhite) { /* all white pt vals are nonzero */ nar = numaGammaTRC(1.0, 0, rwhite); rtab = numaGetIArray(nar); nag = numaGammaTRC(1.0, 0, gwhite); gtab = numaGetIArray(nag); nab = numaGammaTRC(1.0, 0, bwhite); btab = numaGetIArray(nab); } for (i = 0; i < h; i++) { linec = datac + i * wplc; if (pixr) liner = datar + i * wplr; if (pixg) lineg = datag + i * wplg; if (pixb) lineb = datab + i * wplb; for (j = 0; j < w; j++) { pixel = linec[j]; extractRGBValues(pixel, &rval, &gval, &bval); if (rwhite) { /* color correct for white point */ rval = rtab[rval]; gval = gtab[gval]; bval = btab[bval]; } if (mingray > 0) { /* dark pixels have no color value */ maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval < mingray) continue; /* colorval = 0 for each component */ } rgdiff = L_ABS(rval - gval); rbdiff = L_ABS(rval - bval); gbdiff = L_ABS(gval - bval); if (pixr) { colorval = (rgdiff + rbdiff) / 2; SET_DATA_BYTE(liner, j, colorval); } if (pixg) { colorval = (rgdiff + gbdiff) / 2; SET_DATA_BYTE(lineg, j, colorval); } if (pixb) { colorval = (rbdiff + gbdiff) / 2; SET_DATA_BYTE(lineb, j, colorval); } } } if (rwhite) { numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); FREE(rtab); FREE(gtab); FREE(btab); } pixDestroy(&pixc); return 0; } /* ----------------------------------------------------------------------- * * Finds the 'amount' of color in an image, on a per-pixel basis, * * as a measure of the difference of the pixel color from gray. * * ----------------------------------------------------------------------- */ /*! * pixColorMagnitude() * * Input: pixs (32 bpp rgb or 8 bpp colormapped) * rwhite, gwhite, bwhite (color value associated with white point) * type (chooses the method for calculating the color magnitude: * L_MAX_DIFF_FROM_AVERAGE_2, L_MAX_MIN_DIFF_FROM_2, * L_MAX_DIFF) * Return: pixd (8 bpp, amount of color in each source pixel), * or NULL on error * * Notes: * (1) For an RGB image, a gray pixel is one where all three components * are equal. We define the amount of color in an RGB pixel by * considering the absolute value of the differences between the * three color components. Consider the two largest * of these differences. The pixel component in common to these * two differences is the color farthest from the other two. * The color magnitude in an RGB pixel can be taken as: * * the average of these two differences; i.e., the * average distance from the two components that are * nearest to each other to the third component, or * * the minimum value of these two differences; i.e., the * maximum over all components of the minimum distance * from that component to the other two components. * Even more simply, the color magnitude can be taken as * * the maximum difference between component values * (2) As an example, suppose that R and G are the closest in * magnitude. Then the color is determined as: * * the average distance of B from these two; namely, * (|B - R| + |B - G|) / 2, which can also be found * from |B - (R + G) / 2|, or * * the minimum distance of B from these two; namely, * min(|B - R|, |B - G|). * * the max(|B - R|, |B - G|) * (3) The three numbers (rwhite, gwhite and bwhite) can be thought * of as the values in the image corresponding to white. * They are used to compensate for an unbalanced color white point. * They must either be all 0 or all non-zero. To turn this * off, set them all to 0. * (4) We allow the following methods for choosing the color * magnitude from the three components: * * L_MAX_DIFF_FROM_AVERAGE_2 * * L_MAX_MIN_DIFF_FROM_2 * * L_MAX_DIFF * These are described above in (1) and (2), as well as at * the top of this file. */ PIX * pixColorMagnitude(PIX *pixs, l_int32 rwhite, l_int32 gwhite, l_int32 bwhite, l_int32 type) { l_int32 w, h, d, i, j, wplc, wpld; l_int32 rval, gval, bval, rdist, gdist, bdist, colorval; l_int32 rgdist, rbdist, gbdist, mindist, maxdist, minval, maxval; l_int32 *rtab, *gtab, *btab; l_uint32 pixel; l_uint32 *datac, *datad, *linec, *lined; NUMA *nar, *nag, *nab; PIX *pixc, *pixd; PIXCMAP *cmap; PROCNAME("pixColorMagnitude"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (type != L_MAX_DIFF_FROM_AVERAGE_2 && type != L_MAX_MIN_DIFF_FROM_2 && type != L_MAX_DIFF) return (PIX *)ERROR_PTR("invalid type", procName, NULL); if (rwhite < 0 || gwhite < 0 || bwhite < 0) return (PIX *)ERROR_PTR("some white vals are negative", procName, NULL); if ((rwhite || gwhite || bwhite) && (rwhite * gwhite * bwhite == 0)) return (PIX *)ERROR_PTR("white vals not all zero or all nonzero", procName, NULL); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (cmap) pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pixc = pixClone(pixs); pixd = pixCreate(w, h, 8); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datac = pixGetData(pixc); wplc = pixGetWpl(pixc); if (rwhite) { /* all white pt vals are nonzero */ nar = numaGammaTRC(1.0, 0, rwhite); rtab = numaGetIArray(nar); nag = numaGammaTRC(1.0, 0, gwhite); gtab = numaGetIArray(nag); nab = numaGammaTRC(1.0, 0, bwhite); btab = numaGetIArray(nab); } for (i = 0; i < h; i++) { linec = datac + i * wplc; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = linec[j]; extractRGBValues(pixel, &rval, &gval, &bval); if (rwhite) { /* color correct for white point */ rval = rtab[rval]; gval = gtab[gval]; bval = btab[bval]; } if (type == L_MAX_DIFF_FROM_AVERAGE_2) { rdist = ((gval + bval ) / 2 - rval); rdist = L_ABS(rdist); gdist = ((rval + bval ) / 2 - gval); gdist = L_ABS(gdist); bdist = ((rval + gval ) / 2 - bval); bdist = L_ABS(bdist); colorval = L_MAX(rdist, gdist); colorval = L_MAX(colorval, bdist); } else if (type == L_MAX_MIN_DIFF_FROM_2) { /* intermediate dist */ rgdist = L_ABS(rval - gval); rbdist = L_ABS(rval - bval); gbdist = L_ABS(gval - bval); maxdist = L_MAX(rgdist, rbdist); if (gbdist >= maxdist) { colorval = maxdist; } else { /* gbdist is smallest or intermediate */ mindist = L_MIN(rgdist, rbdist); colorval = L_MAX(mindist, gbdist); } } else { /* type == L_MAX_DIFF */ minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); colorval = maxval - minval; } SET_DATA_BYTE(lined, j, colorval); } } if (rwhite) { numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); FREE(rtab); FREE(gtab); FREE(btab); } pixDestroy(&pixc); return pixd; } /* ----------------------------------------------------------------------- * * Generates a mask over pixels that have sufficient color and * * are not too close to gray pixels. * * ----------------------------------------------------------------------- */ /*! * pixMaskOverColorPixels() * * Input: pixs (32 bpp rgb or 8 bpp colormapped) * threshdiff (threshold for minimum of the max difference * between components) * mindist (minimum allowed distance from nearest non-color pixel) * Return: pixd (1 bpp, mask over color pixels), or null on error * * Notes: * (1) The generated mask identifies each pixel as either color or * non-color. For a pixel to be color, it must satisfy two * constraints: * (a) The max difference between the r,g and b components must * equal or exceed a threshold @threshdiff. * (b) It must be at least @mindist (in an 8-connected way) * from the nearest non-color pixel. * (2) The distance constraint (b) is only applied if @mindist > 1. * For example, if @mindist == 2, the color pixels identified * by (a) are eroded by a 3x3 Sel. In general, the Sel size * for erosion is 2 * (@mindist - 1) + 1. * Why have this constraint? In scanned images that are * essentially gray, color artifacts are typically introduced * in transition regions near sharp edges that go from dark * to light, so this allows these transition regions to be removed. */ PIX * pixMaskOverColorPixels(PIX *pixs, l_int32 threshdiff, l_int32 mindist) { l_int32 w, h, d, i, j, wpls, wpld, size; l_int32 rval, gval, bval, minval, maxval; l_uint32 *datas, *datad, *lines, *lined; PIX *pixc, *pixd; PIXCMAP *cmap; PROCNAME("pixMaskOverColorPixels"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (cmap) pixc = pixRemoveColormap(pixs, REMOVE_CMAP_TO_FULL_COLOR); else pixc = pixClone(pixs); pixd = pixCreate(w, h, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixc); wpls = pixGetWpl(pixc); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { extractRGBValues(lines[j], &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval - minval >= threshdiff) SET_DATA_BIT(lined, j); } } if (mindist > 1) { size = 2 * (mindist - 1) + 1; pixErodeBrick(pixd, pixd, size, size); } pixDestroy(&pixc); return pixd; } /* ----------------------------------------------------------------------- * * Finds the fraction of pixels with "color" that are not close to black * * ----------------------------------------------------------------------- */ /*! * pixColorFraction() * * Input: pixs (32 bpp rgb) * darkthresh (threshold near black; if the lightest component * is below this, the pixel is not considered in * the statistics; typ. 20) * lightthresh (threshold near white; if the darkest component * is above this, the pixel is not considered in * the statistics; typ. 244) * diffthresh (thresh for the maximum difference between * component value; below this the pixel is not * considered to have sufficient color) * factor (subsampling factor) * &pixfract ( fraction of pixels in intermediate * brightness range that were considered * for color content) * &colorfract ( fraction of pixels that meet the * criterion for sufficient color; 0.0 on error) * Return: 0 if OK, 1 on error * * Notes: * (1) This function is asking the question: to what extent does the * image appear to have color? The amount of color a pixel * appears to have depends on both the deviation of the * individual components from their average and on the average * intensity itself. For example, the color will be much more * obvious with a small deviation from white than the same * deviation from black. * (2) Any pixel that meets these three tests is considered a * colorful pixel: * (a) the lightest component must equal or exceed @darkthresh * (b) the darkest component must not exceed @lightthresh * (c) the max difference between components must equal or * exceed @diffthresh. * (3) The dark pixels are removed from consideration because * they don't appear to have color. * (4) The very lightest pixels are removed because if an image * has a lot of "white", the color fraction will be artificially * low, even if all the other pixels are colorful. * (5) If pixfract is very small, there are few pixels that are neither * black nor white. If colorfract is very small, the pixels * that are neither black nor white have very little color * content. The product 'pixfract * colorfract' gives the * fraction of pixels with significant color content. * (6) One use of this function is as a preprocessing step for median * cut quantization (colorquant2.c), which does a very poor job * splitting the color space into rectangular volume elements when * all the pixels are near the diagonal of the color cube. For * octree quantization of an image with only gray values, the * 2^(level) octcubes on the diagonal are the only ones * that can be occupied. */ l_int32 pixColorFraction(PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh, l_int32 factor, l_float32 *ppixfract, l_float32 *pcolorfract) { l_int32 i, j, w, h, wpl, rval, gval, bval, minval, maxval; l_int32 total, npix, ncolor; l_uint32 pixel; l_uint32 *data, *line; PROCNAME("pixColorFraction"); if (!ppixfract || !pcolorfract) return ERROR_INT("&pixfract and &colorfract not both defined", procName, 1); *ppixfract = 0.0; *pcolorfract = 0.0; if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); npix = ncolor = total = 0; for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { total++; pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); if (minval > lightthresh) /* near white */ continue; maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval < darkthresh) /* near black */ continue; npix++; if (maxval - minval >= diffthresh) ncolor++; } } if (npix == 0) { L_WARNING("No pixels found for consideration\n", procName); return 0; } *ppixfract = (l_float32)npix / (l_float32)total; *pcolorfract = (l_float32)ncolor / (l_float32)npix; return 0; } /* ----------------------------------------------------------------------- * * Finds the number of perceptually significant gray intensities * * in a grayscale image. * * ----------------------------------------------------------------------- */ /*! * pixNumSignificantGrayColors() * * Input: pixs (8 bpp gray) * darkthresh (dark threshold for minimum intensity to be * considered; typ. 20) * lightthresh (threshold near white, for maximum intensity * to be considered; typ. 236) * minfract (minimum fraction of all pixels to include a level * as significant; typ. 0.0001; should be < 0.001) * factor (subsample factor; integer >= 1) * &ncolors ( number of significant colors; 0 on error) * Return: 0 if OK, 1 on error * * Notes: * (1) This function is asking the question: how many perceptually * significant gray color levels is in this pix? * A color level must meet 3 criteria to be significant: * - it can't be too close to black * - it can't be too close to white * - it must have at least some minimum fractional population * (2) Use -1 for default values for darkthresh, lightthresh and minfract. * (3) Choose default of darkthresh = 20, because variations in very * dark pixels are not visually significant. * (4) Choose default of lightthresh = 236, because document images * that have been jpeg'd typically have near-white pixels in the * 8x8 jpeg blocks, and these should not be counted. It is desirable * to obtain a clean image by quantizing this noise away. */ l_int32 pixNumSignificantGrayColors(PIX *pixs, l_int32 darkthresh, l_int32 lightthresh, l_float32 minfract, l_int32 factor, l_int32 *pncolors) { l_int32 i, w, h, count, mincount, ncolors; NUMA *na; PROCNAME("pixNumSignificantGrayColors"); if (!pncolors) return ERROR_INT("&ncolors not defined", procName, 1); *pncolors = 0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (darkthresh < 0) darkthresh = 20; /* defaults */ if (lightthresh < 0) lightthresh = 236; if (minfract < 0.0) minfract = 0.0001; if (minfract > 1.0) return ERROR_INT("minfract > 1.0", procName, 1); if (minfract >= 0.001) L_WARNING("minfract too big; likely to underestimate ncolors\n", procName); if (lightthresh > 255 || darkthresh >= lightthresh) return ERROR_INT("invalid thresholds", procName, 1); if (factor < 1) factor = 1; pixGetDimensions(pixs, &w, &h, NULL); mincount = (l_int32)(minfract * w * h); if ((na = pixGetGrayHistogram(pixs, factor)) == NULL) return ERROR_INT("na not made", procName, 1); ncolors = 2; /* add in black and white */ for (i = darkthresh; i <= lightthresh; i++) { numaGetIValue(na, i, &count); if (count >= mincount) ncolors++; } *pncolors = ncolors; numaDestroy(&na); return 0; } /* ----------------------------------------------------------------------- * * Identifies images where color quantization will cause posterization * * due to the existence of many colors in low-gradient regions. * * ----------------------------------------------------------------------- */ /*! * pixColorsForQuantization() * Input: pixs (8 bpp gray or 32 bpp rgb; with or without colormap) * thresh (binary threshold on edge gradient; 0 for default) * &ncolors ( the number of colors found) * &iscolor ( 1 if significant color is found; * 0 otherwise. If pixs is 8 bpp, and does not have * a colormap with color entries, this is 0) * debug (1 to output masked image that is tested for colors; * 0 otherwise) * Return: 0 if OK, 1 on error. * * Notes: * (1) This function finds a measure of the number of colors that are * found in low-gradient regions of an image. By its * magnitude relative to some threshold (not specified in * this function), it gives a good indication of whether * quantization will generate posterization. This number * is larger for images with regions of slowly varying * intensity (if 8 bpp) or color (if rgb). Such images, if * quantized, may require dithering to avoid posterization, * and lossless compression is then expected to be poor. * (2) If pixs has a colormap, the number of colors returned is * the number in the colormap. * (3) It is recommended that document images be reduced to a width * of 800 pixels before applying this function. Then it can * be expected that color detection will be fairly accurate * and the number of colors will reflect both the content and * the type of compression to be used. For less than 15 colors, * there is unlikely to be a halftone image, and lossless * quantization should give both a good visual result and * better compression. * (4) When using the default threshold on the gradient (15), * images (both gray and rgb) where ncolors is greater than * about 15 will compress poorly with either lossless * compression or dithered quantization, and they may be * posterized with non-dithered quantization. * (5) For grayscale images, or images without significant color, * this returns the number of significant gray levels in * the low-gradient regions. The actual number of gray levels * can be large due to jpeg compression noise in the background. * (6) Similarly, for color images, the actual number of different * (r,g,b) colors in the low-gradient regions (rather than the * number of occupied level 4 octcubes) can be quite large, e.g., * due to jpeg compression noise, even for regions that appear * to be of a single color. By quantizing to level 4 octcubes, * most of these superfluous colors are removed from the counting. * (7) The image is tested for color. If there is very little color, * it is thresholded to gray and the number of gray levels in * the low gradient regions is found. If the image has color, * the number of occupied level 4 octcubes is found. * (8) The number of colors in the low-gradient regions increases * monotonically with the threshold @thresh on the edge gradient. * (9) Background: grayscale and color quantization is often useful * to achieve highly compressed images with little visible * distortion. However, gray or color washes (regions of * low gradient) can defeat this approach to high compression. * How can one determine if an image is expected to compress * well using gray or color quantization? We use the fact that * * gray washes, when quantized with less than 50 intensities, * have posterization (visible boundaries between regions * of uniform 'color') and poor lossless compression * * color washes, when quantized with level 4 octcubes, * typically result in both posterization and the occupancy * of many level 4 octcubes. * Images can have colors either intrinsically or as jpeg * compression artifacts. This function reduces but does not * completely eliminate measurement of jpeg quantization noise * in the white background of grayscale or color images. */ l_int32 pixColorsForQuantization(PIX *pixs, l_int32 thresh, l_int32 *pncolors, l_int32 *piscolor, l_int32 debug) { l_int32 w, h, d, minside, factor; l_float32 pixfract, colorfract; PIX *pixt, *pixsc, *pixg, *pixe, *pixb, *pixm; PIXCMAP *cmap; PROCNAME("pixColorsForQuantization"); if (piscolor) *piscolor = 0; if (!pncolors) return ERROR_INT("&ncolors not defined", procName, 1); *pncolors = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if ((cmap = pixGetColormap(pixs)) != NULL) { *pncolors = pixcmapGetCount(cmap); if (piscolor) pixcmapHasColor(cmap, piscolor); return 0; } pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); if (thresh <= 0) thresh = 15; /* First test if 32 bpp has any significant color; if not, * convert it to gray. Colors whose average values are within * 20 of black or 8 of white are ignored because they're not * very 'colorful'. If less than 2.5/10000 of the pixels have * significant color, consider the image to be gray. */ minside = L_MIN(w, h); if (d == 8) { pixt = pixClone(pixs); } else { /* d == 32 */ factor = L_MAX(1, minside / 400); pixColorFraction(pixs, 20, 248, 30, factor, &pixfract, &colorfract); if (pixfract * colorfract < 0.00025) { pixt = pixGetRGBComponent(pixs, COLOR_RED); d = 8; } else { /* d == 32 */ pixt = pixClone(pixs); if (piscolor) *piscolor = 1; } } /* If the smallest side is less than 1000, do not downscale. * If it is in [1000 ... 2000), downscale by 2x. If it is >= 2000, * downscale by 4x. Factors of 2 are chosen for speed. The * actual resolution at which subsequent calculations take place * is not strongly dependent on downscaling. */ factor = L_MAX(1, minside / 500); if (factor == 1) pixsc = pixCopy(NULL, pixt); /* to be sure pixs is unchanged */ else if (factor == 2 || factor == 3) pixsc = pixScaleAreaMap2(pixt); else pixsc = pixScaleAreaMap(pixt, 0.25, 0.25); /* Basic edge mask generation procedure: * - work on a grayscale image * - get a 1 bpp edge mask by using an edge filter and * thresholding to get fg pixels at the edges * - for gray, dilate with a 3x3 brick Sel to get mask over * all pixels within a distance of 1 pixel from the nearest * edge pixel * - for color, dilate with a 7x7 brick Sel to get mask over * all pixels within a distance of 3 pixels from the nearest * edge pixel */ if (d == 8) pixg = pixClone(pixsc); else /* d == 32 */ pixg = pixConvertRGBToLuminance(pixsc); pixe = pixSobelEdgeFilter(pixg, L_ALL_EDGES); pixb = pixThresholdToBinary(pixe, thresh); pixInvert(pixb, pixb); if (d == 8) pixm = pixMorphSequence(pixb, "d3.3", 0); else pixm = pixMorphSequence(pixb, "d7.7", 0); /* Mask the near-edge pixels to white, and count the colors. * If grayscale, don't count colors within 20 levels of * black or white, and only count colors with a fraction * of at least 1/10000 of the image pixels. * If color, count the number of level 4 octcubes that * contain at least 20 pixels. These magic numbers are guesses * as to what might work, based on a small data set. Results * should not be overly sensitive to their actual values. */ if (d == 8) { pixSetMasked(pixg, pixm, 0xff); if (debug) pixWrite("junkpix8.png", pixg, IFF_PNG); pixNumSignificantGrayColors(pixg, 20, 236, 0.0001, 1, pncolors); } else { /* d == 32 */ pixSetMasked(pixsc, pixm, 0xffffffff); if (debug) pixWrite("junkpix32.png", pixsc, IFF_PNG); pixNumberOccupiedOctcubes(pixsc, 4, 20, -1, pncolors); } pixDestroy(&pixt); pixDestroy(&pixsc); pixDestroy(&pixg); pixDestroy(&pixe); pixDestroy(&pixb); pixDestroy(&pixm); return 0; } /* ----------------------------------------------------------------------- * * Finds the number of unique colors in an image * * ----------------------------------------------------------------------- */ /*! * pixNumColors() * Input: pixs (2, 4, 8, 32 bpp) * factor (subsampling factor; integer) * &ncolors ( the number of colors found, or 0 if * there are more than 256) * Return: 0 if OK, 1 on error. * * Notes: * (1) This returns the actual number of colors found in the image, * even if there is a colormap. If @factor == 1 and the * number of colors differs from the number of entries * in the colormap, a warning is issued. * (2) Use @factor == 1 to find the actual number of colors. * Use @factor > 1 to quickly find the approximate number of colors. * (3) For d = 2, 4 or 8 bpp grayscale, this returns the number * of colors found in the image in 'ncolors'. * (4) For d = 32 bpp (rgb), if the number of colors is * greater than 256, this returns 0 in 'ncolors'. */ l_int32 pixNumColors(PIX *pixs, l_int32 factor, l_int32 *pncolors) { l_int32 w, h, d, i, j, wpl, hashsize, sum, count; l_int32 rval, gval, bval, val; l_int32 *inta; l_uint32 pixel; l_uint32 *data, *line; PIXCMAP *cmap; PROCNAME("pixNumColors"); if (!pncolors) return ERROR_INT("&ncolors not defined", procName, 1); *pncolors = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8 && d != 32) return ERROR_INT("d not in {2, 4, 8, 32}", procName, 1); if (factor < 1) factor = 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); sum = 0; if (d != 32) { /* grayscale */ inta = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (d == 8) val = GET_DATA_BYTE(line, j); else if (d == 4) val = GET_DATA_QBIT(line, j); else /* d == 2 */ val = GET_DATA_DIBIT(line, j); inta[val] = 1; } } for (i = 0; i < 256; i++) if (inta[i]) sum++; *pncolors = sum; FREE(inta); if (factor == 1 && ((cmap = pixGetColormap(pixs)) != NULL)) { count = pixcmapGetCount(cmap); if (sum != count) L_WARNING("colormap size %d differs from actual colors\n", procName, count); } return 0; } /* 32 bpp rgb; quit if we get above 256 colors */ hashsize = 5507; /* big and prime; collisions are not likely */ inta = (l_int32 *)CALLOC(hashsize, sizeof(l_int32)); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); val = (137 * rval + 269 * gval + 353 * bval) % hashsize; if (inta[val] == 0) { inta[val] = 1; sum++; if (sum > 256) { FREE(inta); return 0; } } } } *pncolors = sum; FREE(inta); return 0; } /* ----------------------------------------------------------------------- * * Find the most "populated" colors in the image (and quantize) * * ----------------------------------------------------------------------- */ /*! * pixGetMostPopulatedColors() * Input: pixs (32 bpp rgb) * sigbits (2-6, significant bits retained in the quantizer * for each component of the input image) * factor (subsampling factor; use 1 for no subsampling) * ncolors (the number of most populated colors to select) * &array ( array of colors, each as 0xrrggbb00) * &cmap ( colormap of the colors) * Return: 0 if OK, 1 on error * * Notes: * (1) This finds the @ncolors most populated cubes in rgb colorspace, * where the cube size depends on @sigbits as * cube side = (256 >> sigbits) * (2) The rgb color components are found at the center of the cube. * (3) The output array of colors can be displayed using * pixDisplayColorArray(array, ncolors, ...); */ l_int32 pixGetMostPopulatedColors(PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors, l_uint32 **parray, PIXCMAP **pcmap) { l_int32 n, i, rgbindex, rval, gval, bval; NUMA *nahisto, *naindex; PROCNAME("pixGetMostPopulatedColors"); if (parray) *parray = NULL; if (pcmap) *pcmap = NULL; if (!parray && !pcmap) return ERROR_INT("no output requested", procName, 1); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined", procName, 1); if (sigbits < 2 || sigbits > 6) return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); if (factor < 1 || ncolors < 1) return ERROR_INT("factor < 1 or ncolors < 1", procName, 1); if ((nahisto = pixGetRGBHistogram(pixs, sigbits, factor)) == NULL) return ERROR_INT("nahisto not made", procName, 1); /* naindex contains the index into nahisto, which is the rgbindex */ naindex = numaSortIndexAutoSelect(nahisto, L_SORT_DECREASING); numaDestroy(&nahisto); if (!naindex) return ERROR_INT("naindex not made", procName, 1); n = numaGetCount(naindex); ncolors = L_MIN(n, ncolors); if (parray) *parray = (l_uint32 *)CALLOC(ncolors, sizeof(l_uint32)); if (pcmap) *pcmap = pixcmapCreate(8); for (i = 0; i < ncolors; i++) { numaGetIValue(naindex, i, &rgbindex); /* rgb index */ getRGBFromIndex(rgbindex, sigbits, &rval, &gval, &bval); if (parray) composeRGBPixel(rval, gval, bval, *parray + i); if (pcmap) pixcmapAddColor(*pcmap, rval, gval, bval); } numaDestroy(&naindex); return 0; } /*! * pixSimpleColorQuantize() * Input: pixs (32 bpp rgb) * sigbits (2-4, significant bits retained in the quantizer * for each component of the input image) * factor (subsampling factor; use 1 for no subsampling) * ncolors (the number of most populated colors to select) * Return: pixd (8 bpp cmapped) or NULL on error * * Notes: * (1) If you want to do color quantization for real, use octcube * or modified median cut. This function shows that it is * easy to make a simple quantizer based solely on the population * in cells of a given size in rgb color space. * (2) The @ncolors most populated cells at the @sigbits level form * the colormap for quantizing, and this uses octcube indexing * under the covers to assign each pixel to the nearest color. * (3) @sigbits is restricted to 2, 3 and 4. At the low end, the * color discrimination is very crude; at the upper end, a set of * similar colors can dominate the result. Interesting results * are generally found for @sigbits = 3 and ncolors ~ 20. * (4) See also pixColorSegment() for a method of quantizing the * colors to generate regions of similar color. */ PIX * pixSimpleColorQuantize(PIX *pixs, l_int32 sigbits, l_int32 factor, l_int32 ncolors) { l_int32 w, h; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixSimpleColorQuantize"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (sigbits < 2 || sigbits > 4) return (PIX *)ERROR_PTR("sigbits not in {2,3,4}", procName, NULL); pixGetMostPopulatedColors(pixs, sigbits, factor, ncolors, NULL, &cmap); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, 8); pixSetColormap(pixd, cmap); pixAssignToNearestColor(pixd, pixs, NULL, 4, NULL); return pixd; } /* ----------------------------------------------------------------------- * * Constructs a color histogram based on rgb indices * * ----------------------------------------------------------------------- */ /*! * pixGetRGBHistogram() * Input: pixs (32 bpp rgb) * sigbits (2-6, significant bits retained in the quantizer * for each component of the input image) * factor (subsampling factor; use 1 for no subsampling) * Return: numa (histogram of colors, indexed by RGB * components), or null on error * * Notes: * (1) This uses a simple, fast method of indexing into an rgb image. * (2) The output is a 1D histogram of count vs. rgb-index, which * uses red sigbits as the most significant and blue as the least. * (3) This function produces the same result as pixMedianCutHisto(). */ NUMA * pixGetRGBHistogram(PIX *pixs, l_int32 sigbits, l_int32 factor) { l_int32 w, h, i, j, size, wpl, rval, gval, bval, npts; l_uint32 val32, rgbindex; l_float32 *array; l_uint32 *data, *line, *rtab, *gtab, *btab; NUMA *na; PROCNAME("pixGetRGBHistogram"); if (!pixs || pixGetDepth(pixs) != 32) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (sigbits < 2 || sigbits > 6) return (NUMA *)ERROR_PTR("sigbits not in [2 ... 6]", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("factor < 1", procName, NULL); /* Get histogram size: 2^(3 * sigbits) */ size = 1 << (3 * sigbits); /* 64, 512, 4096, 32768, 262144 */ na = numaMakeConstant(0, size); /* init to all 0 */ array = numaGetFArray(na, L_NOCOPY); makeRGBIndexTables(&rtab, >ab, &btab, sigbits); /* Check the number of sampled pixels */ pixGetDimensions(pixs, &w, &h, NULL); npts = ((w + factor - 1) / factor) * ((h + factor - 1) / factor); if (npts < 1000) L_WARNING("only sampling %d pixels\n", procName, npts); wpl = pixGetWpl(pixs); data = pixGetData(pixs); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { val32 = *(line + j); extractRGBValues(val32, &rval, &gval, &bval); rgbindex = rtab[rval] | gtab[gval] | btab[bval]; array[rgbindex]++; } } FREE(rtab); FREE(gtab); FREE(btab); return na; } /*! * makeRGBIndexTables() * * Input: &rtab, >ab, &btab ( 256-entry index tables) * sigbits (2-6, significant bits retained in the quantizer * for each component of the input image) * Return: 0 if OK, 1 on error * * Notes: * (1) These tables are used to map from rgb sample values to * an rgb index, using * rgbindex = rtab[rval] | gtab[gval] | btab[bval] * where, e.g., if sigbits = 3, the index is a 9 bit integer: * r7 r6 r5 g7 g6 g5 b7 b6 b5 */ l_int32 makeRGBIndexTables(l_uint32 **prtab, l_uint32 **pgtab, l_uint32 **pbtab, l_int32 sigbits) { l_int32 i; l_uint32 *rtab, *gtab, *btab; PROCNAME("makeRGBIndexTables"); if (prtab) *prtab = NULL; if (pgtab) *pgtab = NULL; if (pbtab) *pbtab = NULL; if (!prtab || !pgtab || !pbtab) return ERROR_INT("not all table ptrs defined", procName, 1); if (sigbits < 2 || sigbits > 6) return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); rtab = (l_uint32 *)CALLOC(256, sizeof(l_uint32)); gtab = (l_uint32 *)CALLOC(256, sizeof(l_uint32)); btab = (l_uint32 *)CALLOC(256, sizeof(l_uint32)); *prtab = rtab; *pgtab = gtab; *pbtab = btab; switch (sigbits) { case 2: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xc0) >> 2; gtab[i] = (i & 0xc0) >> 4; btab[i] = (i & 0xc0) >> 6; } break; case 3: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xe0) << 1; gtab[i] = (i & 0xe0) >> 2; btab[i] = (i & 0xe0) >> 5; } break; case 4: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xf0) << 4; gtab[i] = (i & 0xf0); btab[i] = (i & 0xf0) >> 4; } break; case 5: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xf8) << 7; gtab[i] = (i & 0xf8) << 2; btab[i] = (i & 0xf8) >> 3; } break; case 6: for (i = 0; i < 256; i++) { rtab[i] = (i & 0xfc) << 10; gtab[i] = (i & 0xfc) << 4; btab[i] = (i & 0xfc) >> 2; } break; default: L_ERROR("Illegal sigbits = %d\n", procName, sigbits); return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); } return 0; } /*! * getRGBFromIndex() * * Input: index (rgbindex) * sigbits (2-6, significant bits retained in the quantizer * for each component of the input image) * &rval, &gval, &bval ( rgb values) * Return: 0 if OK, 1 on error * * Notes: * (1) The @index is expressed in bits, based on the the * @sigbits of the r, g and b components, as * r7 r6 ... g7 g6 ... b7 b6 ... * (2) The computed rgb values are in the center of the quantized cube. * The extra bit that is OR'd accomplishes this. */ l_int32 getRGBFromIndex(l_uint32 index, l_int32 sigbits, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { PROCNAME("getRGBFromIndex"); if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (!prval || !pgval || !pbval) return ERROR_INT("not all component ptrs defined", procName, 1); if (sigbits < 2 || sigbits > 6) return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); switch (sigbits) { case 2: *prval = ((index << 2) & 0xc0) | 0x20; *pgval = ((index << 4) & 0xc0) | 0x20; *pbval = ((index << 6) & 0xc0) | 0x20; break; case 3: *prval = ((index >> 1) & 0xe0) | 0x10; *pgval = ((index << 2) & 0xe0) | 0x10; *pbval = ((index << 5) & 0xe0) | 0x10; break; case 4: *prval = ((index >> 4) & 0xf0) | 0x08; *pgval = (index & 0xf0) | 0x08; *pbval = ((index << 4) & 0xf0) | 0x08; break; case 5: *prval = ((index >> 7) & 0xf8) | 0x04; *pgval = ((index >> 2) & 0xf8) | 0x04; *pbval = ((index << 3) & 0xf8) | 0x04; break; case 6: *prval = ((index >> 10) & 0xfc) | 0x02; *pgval = ((index >> 4) & 0xfc) | 0x02; *pbval = ((index << 2) & 0xfc) | 0x02; break; default: L_ERROR("Illegal sigbits = %d\n", procName, sigbits); return ERROR_INT("sigbits not in [2 ... 6]", procName, 1); } return 0; } leptonica-1.70/src/jp2kio.c0000664000175000017500000001241712262333422013644 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * jp2kio.c * * Read header * l_int32 readHeaderJp2k() * l_int32 freadHeaderJp2k() * l_int32 sreadHeaderJp2k() */ #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_JP2KIO /* defined in environ.h */ /* --------------------------------------------*/ /* a sanity check on the size read from file */ static const l_int32 MAX_JP2K_WIDTH = 100000; static const l_int32 MAX_JP2K_HEIGHT = 100000; /*--------------------------------------------------------------------* * Stream interface * *--------------------------------------------------------------------*/ /*! * readHeaderJp2k() * * Input: filename * &w () * &h () * &spp (, samples/pixel) * Return: 0 if OK, 1 on error */ l_int32 readHeaderJp2k(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { l_int32 ret; FILE *fp; PROCNAME("readHeaderJp2k"); if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (!filename) return ERROR_INT("filename not defined", procName, 1); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); ret = freadHeaderJp2k(fp, pw, ph, pspp); fclose(fp); return ret; } /*! * freadHeaderJp2k() * * Input: stream opened for read * &w () * &h () * &spp (, samples/pixel) * Return: 0 if OK, 1 on error */ l_int32 freadHeaderJp2k(FILE *fp, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { l_uint8 buf[60]; l_int32 nread; PROCNAME("freadHeaderJp2k"); if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (!fp) return ERROR_INT("fp not defined", procName, 1); rewind(fp); nread = fread(buf, 1, sizeof(buf), fp); if (nread != sizeof(buf)) return ERROR_INT("read failure", procName, 1); sreadHeaderJp2k(buf, sizeof(buf), pw, ph, pspp); rewind(fp); return 0; } /*! * sreadHeaderJp2k() * * Input: data * size * &w () * &h () * &spp (, samples/pixel) * Return: 0 if OK, 1 on error * * Notes: * (1) The metadata is stored as follows: * h: 4 bytes @ 48 * w: 4 bytes @ 52 * spp: 2 bytes @ 56 */ l_int32 sreadHeaderJp2k(const l_uint8 *data, size_t size, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { l_int32 format, val, w, h, spp; PROCNAME("sreadHeaderJp2k"); if (pw) *pw = 0; if (ph) *ph = 0; if (pspp) *pspp = 0; if (!data) return ERROR_INT("data not defined", procName, 1); if (size < 60) return ERROR_INT("size < 60", procName, 1); findFileFormatBuffer(data, &format); if (format != IFF_JP2) return ERROR_INT("not jp2 file", procName, 1); val = *((l_uint32 *)data + 12); h = convertOnLittleEnd32(val); val = *((l_uint32 *)data + 13); w = convertOnLittleEnd32(val); val = *((l_uint16 *)data + 28); spp = convertOnLittleEnd16(val); if (w > MAX_JP2K_WIDTH || h > MAX_JP2K_HEIGHT) return ERROR_INT("unrealistically large sizes", procName, 1); if (pw) *pw = w; if (ph) *ph = h; if (pspp) *pspp = spp; return 0; } /* --------------------------------------------*/ #endif /* USE_JP2KIO */ /* --------------------------------------------*/ leptonica-1.70/src/pix4.c0000664000175000017500000031074312267260611013341 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pix4.c * * This file has these operations: * * (1) Pixel histograms * (2) Pixel row/column statistics * (3) Foreground/background estimation * * Pixel histogram, rank val, averaging and min/max * NUMA *pixGetGrayHistogram() * NUMA *pixGetGrayHistogramMasked() * NUMA *pixGetGrayHistogramInRect() * l_int32 pixGetColorHistogram() * l_int32 pixGetColorHistogramMasked() * NUMA *pixGetCmapHistogram() * NUMA *pixGetCmapHistogramMasked() * NUMA *pixGetCmapHistogramInRect() * l_int32 pixGetRankValue() * l_int32 pixGetRankValueMaskedRGB() * l_int32 pixGetRankValueMasked() * l_int32 pixGetAverageValue() * l_int32 pixGetAverageMaskedRGB() * l_int32 pixGetAverageMasked() * l_int32 pixGetAverageTiledRGB() * PIX *pixGetAverageTiled() * NUMA *pixRowStats() * NUMA *pixColumnStats() * l_int32 pixGetComponentRange() * l_int32 pixGetExtremeValue() * l_int32 pixGetMaxValueInRect() * l_int32 pixGetBinnedComponentRange() * l_int32 pixGetRankColorArray() * l_int32 pixGetBinnedColor() * PIX *pixDisplayColorArray() * * Pixelwise aligned statistics * PIX *pixaGetAlignedStats() * l_int32 pixaExtractColumnFromEachPix() * l_int32 pixGetRowStats() * l_int32 pixGetColumnStats() * l_int32 pixSetPixelColumn() * * Foreground/background estimation * l_int32 pixThresholdForFgBg() * l_int32 pixSplitDistributionFgBg() */ #include #include #include "allheaders.h" /*------------------------------------------------------------------* * Pixel histogram and averaging * *------------------------------------------------------------------*/ /*! * pixGetGrayHistogram() * * Input: pixs (1, 2, 4, 8, 16 bpp; can be colormapped) * factor (subsampling factor; integer >= 1) * Return: na (histogram), or null on error * * Notes: * (1) If pixs has a colormap, it is converted to 8 bpp gray. * If you want a histogram of the colormap indices, use * pixGetCmapHistogram(). * (2) If pixs does not have a colormap, the output histogram is * of size 2^d, where d is the depth of pixs. * (3) This always returns a 256-value histogram of pixel values. * (4) Set the subsampling factor > 1 to reduce the amount of computation. */ NUMA * pixGetGrayHistogram(PIX *pixs, l_int32 factor) { l_int32 i, j, w, h, d, wpl, val, size, count; l_uint32 *data, *line; l_float32 *array; NUMA *na; PIX *pixg; PROCNAME("pixGetGrayHistogram"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d > 16) return (NUMA *)ERROR_PTR("depth not in {1,2,4,8,16}", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); size = 1 << d; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); if (d == 1) { /* special case */ pixCountPixels(pixg, &count, NULL); array[0] = w * h - count; array[1] = count; pixDestroy(&pixg); return na; } wpl = pixGetWpl(pixg); data = pixGetData(pixg); for (i = 0; i < h; i += factor) { line = data + i * wpl; switch (d) { case 2: for (j = 0; j < w; j += factor) { val = GET_DATA_DIBIT(line, j); array[val] += 1.0; } break; case 4: for (j = 0; j < w; j += factor) { val = GET_DATA_QBIT(line, j); array[val] += 1.0; } break; case 8: for (j = 0; j < w; j += factor) { val = GET_DATA_BYTE(line, j); array[val] += 1.0; } break; case 16: for (j = 0; j < w; j += factor) { val = GET_DATA_TWO_BYTES(line, j); array[val] += 1.0; } break; default: numaDestroy(&na); return (NUMA *)ERROR_PTR("illegal depth", procName, NULL); } } pixDestroy(&pixg); return na; } /*! * pixGetGrayHistogramMasked() * * Input: pixs (8 bpp, or colormapped) * pixm ( 1 bpp mask over which histogram is * to be computed; use all pixels if null) * x, y (UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null) * factor (subsampling factor; integer >= 1) * Return: na (histogram), or null on error * * Notes: * (1) If pixs is cmapped, it is converted to 8 bpp gray. * If you want a histogram of the colormap indices, use * pixGetCmapHistogramMasked(). * (2) This always returns a 256-value histogram of pixel values. * (3) Set the subsampling factor > 1 to reduce the amount of computation. * (4) Clipping of pixm (if it exists) to pixs is done in the inner loop. * (5) Input x,y are ignored unless pixm exists. */ NUMA * pixGetGrayHistogramMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor) { l_int32 i, j, w, h, wm, hm, dm, wplg, wplm, val; l_uint32 *datag, *datam, *lineg, *linem; l_float32 *array; NUMA *na; PIX *pixg; PROCNAME("pixGetGrayHistogramMasked"); if (!pixm) return pixGetGrayHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return (NUMA *)ERROR_PTR("pixs neither 8 bpp nor colormapped", procName, NULL); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return (NUMA *)ERROR_PTR("pixm not 1 bpp", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); if ((na = numaCreate(256)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, 256); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, NULL); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); /* Generate the histogram */ for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lineg = datag + (y + i) * wplg; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { val = GET_DATA_BYTE(lineg, x + j); array[val] += 1.0; } } } pixDestroy(&pixg); return na; } /*! * pixGetGrayHistogramInRect() * * Input: pixs (8 bpp, or colormapped) * box () over which histogram is to be computed; * use full image if null) * factor (subsampling factor; integer >= 1) * Return: na (histogram), or null on error * * Notes: * (1) If pixs is cmapped, it is converted to 8 bpp gray. * If you want a histogram of the colormap indices, use * pixGetCmapHistogramInRect(). * (2) This always returns a 256-value histogram of pixel values. * (3) Set the subsampling @factor > 1 to reduce the amount of computation. */ NUMA * pixGetGrayHistogramInRect(PIX *pixs, BOX *box, l_int32 factor) { l_int32 i, j, bx, by, bw, bh, w, h, wplg, val; l_uint32 *datag, *lineg; l_float32 *array; NUMA *na; PIX *pixg; PROCNAME("pixGetGrayHistogramInRect"); if (!box) return pixGetGrayHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return (NUMA *)ERROR_PTR("pixs neither 8 bpp nor colormapped", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); if ((na = numaCreate(256)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, 256); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, NULL); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); boxGetGeometry(box, &bx, &by, &bw, &bh); /* Generate the histogram */ for (i = 0; i < bh; i += factor) { if (by + i < 0 || by + i >= h) continue; lineg = datag + (by + i) * wplg; for (j = 0; j < bw; j += factor) { if (bx + j < 0 || bx + j >= w) continue; val = GET_DATA_BYTE(lineg, bx + j); array[val] += 1.0; } } pixDestroy(&pixg); return na; } /*! * pixGetColorHistogram() * * Input: pixs (rgb or colormapped) * factor (subsampling factor; integer >= 1) * &nar ( red histogram) * &nag ( green histogram) * &nab ( blue histogram) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a set of three 256 entry histograms, * one for each color component (r,g,b). * (2) Set the subsampling @factor > 1 to reduce the amount of computation. */ l_int32 pixGetColorHistogram(PIX *pixs, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab) { l_int32 i, j, w, h, d, wpl, index, rval, gval, bval; l_uint32 *data, *line; l_float32 *rarray, *garray, *barray; NUMA *nar, *nag, *nab; PIXCMAP *cmap; PROCNAME("pixGetColorHistogram"); if (pnar) *pnar = NULL; if (pnag) *pnag = NULL; if (pnab) *pnab = NULL; if (!pnar || !pnag || !pnab) return ERROR_INT("&nar, &nag, &nab not all defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (cmap && (d != 2 && d != 4 && d != 8)) return ERROR_INT("colormap and not 2, 4, or 8 bpp", procName, 1); if (!cmap && d != 32) return ERROR_INT("no colormap and not rgb", procName, 1); if (factor < 1) return ERROR_INT("sampling factor < 1", procName, 1); /* Set up the histogram arrays */ nar = numaCreate(256); nag = numaCreate(256); nab = numaCreate(256); numaSetCount(nar, 256); numaSetCount(nag, 256); numaSetCount(nab, 256); rarray = numaGetFArray(nar, L_NOCOPY); garray = numaGetFArray(nag, L_NOCOPY); barray = numaGetFArray(nab, L_NOCOPY); *pnar = nar; *pnag = nag; *pnab = nab; /* Generate the color histograms */ data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (cmap) { for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (d == 8) index = GET_DATA_BYTE(line, j); else if (d == 4) index = GET_DATA_QBIT(line, j); else /* 2 bpp */ index = GET_DATA_DIBIT(line, j); pixcmapGetColor(cmap, index, &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } else { /* 32 bpp rgb */ for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { extractRGBValues(line[j], &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } return 0; } /*! * pixGetColorHistogramMasked() * * Input: pixs (32 bpp rgb, or colormapped) * pixm ( 1 bpp mask over which histogram is * to be computed; use all pixels if null) * x, y (UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null) * factor (subsampling factor; integer >= 1) * &nar ( red histogram) * &nag ( green histogram) * &nab ( blue histogram) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a set of three 256 entry histograms, * (2) Set the subsampling @factor > 1 to reduce the amount of computation. * (3) Clipping of pixm (if it exists) to pixs is done in the inner loop. * (4) Input x,y are ignored unless pixm exists. */ l_int32 pixGetColorHistogramMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, NUMA **pnar, NUMA **pnag, NUMA **pnab) { l_int32 i, j, w, h, d, wm, hm, dm, wpls, wplm, index, rval, gval, bval; l_uint32 *datas, *datam, *lines, *linem; l_float32 *rarray, *garray, *barray; NUMA *nar, *nag, *nab; PIXCMAP *cmap; PROCNAME("pixGetColorHistogramMasked"); if (!pixm) return pixGetColorHistogram(pixs, factor, pnar, pnag, pnab); if (pnar) *pnar = NULL; if (pnag) *pnag = NULL; if (pnab) *pnab = NULL; if (!pnar || !pnag || !pnab) return ERROR_INT("&nar, &nag, &nab not all defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); if (cmap && (d != 2 && d != 4 && d != 8)) return ERROR_INT("colormap and not 2, 4, or 8 bpp", procName, 1); if (!cmap && d != 32) return ERROR_INT("no colormap and not rgb", procName, 1); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (factor < 1) return ERROR_INT("sampling factor < 1", procName, 1); /* Set up the histogram arrays */ nar = numaCreate(256); nag = numaCreate(256); nab = numaCreate(256); numaSetCount(nar, 256); numaSetCount(nag, 256); numaSetCount(nab, 256); rarray = numaGetFArray(nar, L_NOCOPY); garray = numaGetFArray(nag, L_NOCOPY); barray = numaGetFArray(nab, L_NOCOPY); *pnar = nar; *pnag = nag; *pnab = nab; /* Generate the color histograms */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); if (cmap) { for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { if (d == 8) index = GET_DATA_BYTE(lines, x + j); else if (d == 4) index = GET_DATA_QBIT(lines, x + j); else /* 2 bpp */ index = GET_DATA_DIBIT(lines, x + j); pixcmapGetColor(cmap, index, &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } } else { /* 32 bpp rgb */ for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { extractRGBValues(lines[x + j], &rval, &gval, &bval); rarray[rval] += 1.0; garray[gval] += 1.0; barray[bval] += 1.0; } } } } return 0; } /*! * pixGetCmapHistogram() * * Input: pixs (colormapped: d = 2, 4 or 8) * factor (subsampling factor; integer >= 1) * Return: na (histogram of cmap indices), or null on error * * Notes: * (1) This generates a histogram of colormap pixel indices, * and is of size 2^d. * (2) Set the subsampling @factor > 1 to reduce the amount of computation. */ NUMA * pixGetCmapHistogram(PIX *pixs, l_int32 factor) { l_int32 i, j, w, h, d, wpl, val, size; l_uint32 *data, *line; l_float32 *array; NUMA *na; PROCNAME("pixGetCmapHistogram"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) == NULL) return (NUMA *)ERROR_PTR("pixs not cmapped", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (NUMA *)ERROR_PTR("d not 2, 4 or 8", procName, NULL); size = 1 << d; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); wpl = pixGetWpl(pixs); data = pixGetData(pixs); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { if (d == 8) val = GET_DATA_BYTE(line, j); else if (d == 4) val = GET_DATA_QBIT(line, j); else /* d == 2 */ val = GET_DATA_DIBIT(line, j); array[val] += 1.0; } } return na; } /*! * pixGetCmapHistogramMasked() * * Input: pixs (colormapped: d = 2, 4 or 8) * pixm ( 1 bpp mask over which histogram is * to be computed; use all pixels if null) * x, y (UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null) * factor (subsampling factor; integer >= 1) * Return: na (histogram), or null on error * * Notes: * (1) This generates a histogram of colormap pixel indices, * and is of size 2^d. * (2) Set the subsampling @factor > 1 to reduce the amount of computation. * (3) Clipping of pixm to pixs is done in the inner loop. */ NUMA * pixGetCmapHistogramMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor) { l_int32 i, j, w, h, d, wm, hm, dm, wpls, wplm, val, size; l_uint32 *datas, *datam, *lines, *linem; l_float32 *array; NUMA *na; PROCNAME("pixGetCmapHistogramMasked"); if (!pixm) return pixGetCmapHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) == NULL) return (NUMA *)ERROR_PTR("pixs not cmapped", procName, NULL); pixGetDimensions(pixm, &wm, &hm, &dm); if (dm != 1) return (NUMA *)ERROR_PTR("pixm not 1 bpp", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (NUMA *)ERROR_PTR("d not 2, 4 or 8", procName, NULL); size = 1 << d; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lines = datas + (y + i) * wpls; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { if (d == 8) val = GET_DATA_BYTE(lines, x + j); else if (d == 4) val = GET_DATA_QBIT(lines, x + j); else /* d == 2 */ val = GET_DATA_DIBIT(lines, x + j); array[val] += 1.0; } } } return na; } /*! * pixGetCmapHistogramInRect() * * Input: pixs (colormapped: d = 2, 4 or 8) * box () over which histogram is to be computed; * use full image if null) * factor (subsampling factor; integer >= 1) * Return: na (histogram), or null on error * * Notes: * (1) This generates a histogram of colormap pixel indices, * and is of size 2^d. * (2) Set the subsampling @factor > 1 to reduce the amount of computation. * (3) Clipping to the box is done in the inner loop. */ NUMA * pixGetCmapHistogramInRect(PIX *pixs, BOX *box, l_int32 factor) { l_int32 i, j, bx, by, bw, bh, w, h, d, wpls, val, size; l_uint32 *datas, *lines; l_float32 *array; NUMA *na; PROCNAME("pixGetCmapHistogramInRect"); if (!box) return pixGetCmapHistogram(pixs, factor); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) == NULL) return (NUMA *)ERROR_PTR("pixs not cmapped", procName, NULL); if (factor < 1) return (NUMA *)ERROR_PTR("sampling factor < 1", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 2 && d != 4 && d != 8) return (NUMA *)ERROR_PTR("d not 2, 4 or 8", procName, NULL); size = 1 << d; if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); numaSetCount(na, size); /* all initialized to 0.0 */ array = numaGetFArray(na, L_NOCOPY); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); boxGetGeometry(box, &bx, &by, &bw, &bh); for (i = 0; i < bh; i += factor) { if (by + i < 0 || by + i >= h) continue; lines = datas + (by + i) * wpls; for (j = 0; j < bw; j += factor) { if (bx + j < 0 || bx + j >= w) continue; if (d == 8) val = GET_DATA_BYTE(lines, bx + j); else if (d == 4) val = GET_DATA_QBIT(lines, bx + j); else /* d == 2 */ val = GET_DATA_DIBIT(lines, bx + j); array[val] += 1.0; } } return na; } /*! * pixGetRankValue() * * Input: pixs (8 bpp, 32 bpp or colormapped) * factor (subsampling factor; integer >= 1) * rank (between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest) * &value ( pixel value corresponding to input rank) * Return: 0 if OK, 1 on error * * Notes: * (1) Simple function to get rank values of an image. * For a color image, the median value (rank = 0.5) can be * used to linearly remap the colors based on the median * of a target image, using pixLinearMapToTargetColor(). */ l_int32 pixGetRankValue(PIX *pixs, l_int32 factor, l_float32 rank, l_uint32 *pvalue) { l_int32 d; l_float32 val, rval, gval, bval; PIX *pixt; PIXCMAP *cmap; PROCNAME("pixGetRankValue"); if (!pvalue) return ERROR_INT("&value not defined", procName, 1); *pvalue = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return ERROR_INT("pixs not 8 or 32 bpp, or cmapped", procName, 1); if (cmap) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixt = pixClone(pixs); d = pixGetDepth(pixt); if (d == 8) { pixGetRankValueMasked(pixt, NULL, 0, 0, factor, rank, &val, NULL); *pvalue = lept_roundftoi(val); } else { pixGetRankValueMaskedRGB(pixt, NULL, 0, 0, factor, rank, &rval, &gval, &bval); composeRGBPixel(lept_roundftoi(rval), lept_roundftoi(gval), lept_roundftoi(bval), pvalue); } pixDestroy(&pixt); return 0; } /*! * pixGetRankValueMaskedRGB() * * Input: pixs (32 bpp) * pixm ( 1 bpp mask over which rank val is to be taken; * use all pixels if null) * x, y (UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null) * factor (subsampling factor; integer >= 1) * rank (between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest) * &rval ( red component val for to input rank) * &gval ( green component val for to input rank) * &bval ( blue component val for to input rank) * Return: 0 if OK, 1 on error * * Notes: * (1) Computes the rank component values of pixels in pixs that * are under the fg of the optional mask. If the mask is null, it * computes the average of the pixels in pixs. * (2) Set the subsampling @factor > 1 to reduce the amount of * computation. * (4) Input x,y are ignored unless pixm exists. * (5) The rank must be in [0.0 ... 1.0], where the brightest pixel * has rank 1.0. For the median pixel value, use 0.5. */ l_int32 pixGetRankValueMaskedRGB(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *prval, l_float32 *pgval, l_float32 *pbval) { l_float32 scale; PIX *pixmt, *pixt; PROCNAME("pixGetRankValueMaskedRGB"); if (prval) *prval = 0.0; if (pgval) *pgval = 0.0; if (pbval) *pbval = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (factor < 1) return ERROR_INT("sampling factor < 1", procName, 1); if (rank < 0.0 || rank > 1.0) return ERROR_INT("rank not in [0.0 ... 1.0]", procName, 1); if (!prval && !pgval && !pbval) return ERROR_INT("no results requested", procName, 1); pixmt = NULL; if (pixm) { scale = 1.0 / (l_float32)factor; pixmt = pixScale(pixm, scale, scale); } if (prval) { pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_RED); pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, factor, rank, prval, NULL); pixDestroy(&pixt); } if (pgval) { pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_GREEN); pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, factor, rank, pgval, NULL); pixDestroy(&pixt); } if (pbval) { pixt = pixScaleRGBToGrayFast(pixs, factor, COLOR_BLUE); pixGetRankValueMasked(pixt, pixmt, x / factor, y / factor, factor, rank, pbval, NULL); pixDestroy(&pixt); } pixDestroy(&pixmt); return 0; } /*! * pixGetRankValueMasked() * * Input: pixs (8 bpp, or colormapped) * pixm ( 1 bpp mask over which rank val is to be taken; * use all pixels if null) * x, y (UL corner of pixm relative to the UL corner of pixs; * can be < 0; these values are ignored if pixm is null) * factor (subsampling factor; integer >= 1) * rank (between 0.0 and 1.0; 1.0 is brightest, 0.0 is darkest) * &val ( pixel value corresponding to input rank) * &na ( of histogram) * Return: 0 if OK, 1 on error * * Notes: * (1) Computes the rank value of pixels in pixs that are under * the fg of the optional mask. If the mask is null, it * computes the average of the pixels in pixs. * (2) Set the subsampling @factor > 1 to reduce the amount of * computation. * (3) Clipping of pixm (if it exists) to pixs is done in the inner loop. * (4) Input x,y are ignored unless pixm exists. * (5) The rank must be in [0.0 ... 1.0], where the brightest pixel * has rank 1.0. For the median pixel value, use 0.5. * (6) The histogram can optionally be returned, so that other rank * values can be extracted without recomputing the histogram. * In that case, just use * numaHistogramGetValFromRank(na, rank, &val); * on the returned Numa for additional rank values. */ l_int32 pixGetRankValueMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_float32 rank, l_float32 *pval, NUMA **pna) { NUMA *na; PROCNAME("pixGetRankValueMasked"); if (pna) *pna = NULL; if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 8 && !pixGetColormap(pixs)) return ERROR_INT("pixs neither 8 bpp nor colormapped", procName, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (factor < 1) return ERROR_INT("sampling factor < 1", procName, 1); if (rank < 0.0 || rank > 1.0) return ERROR_INT("rank not in [0.0 ... 1.0]", procName, 1); if ((na = pixGetGrayHistogramMasked(pixs, pixm, x, y, factor)) == NULL) return ERROR_INT("na not made", procName, 1); numaHistogramGetValFromRank(na, rank, pval); if (pna) *pna = na; else numaDestroy(&na); return 0; } /*! * pixGetAverageValue() * * Input: pixs (8 bpp, 32 bpp or colormapped) * factor (subsampling factor; integer >= 1) * type (L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, * L_STANDARD_DEVIATION, L_VARIANCE) * &value ( pixel value corresponding to input rank) * Return: 0 if OK, 1 on error * * Notes: * (1) Simple function to get average statistical values of an image. */ l_int32 pixGetAverageValue(PIX *pixs, l_int32 factor, l_int32 type, l_uint32 *pvalue) { l_int32 d; l_float32 val, rval, gval, bval; PIX *pixt; PIXCMAP *cmap; PROCNAME("pixGetAverageValue"); if (!pvalue) return ERROR_INT("&value not defined", procName, 1); *pvalue = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (d != 8 && d != 32 && !cmap) return ERROR_INT("pixs not 8 or 32 bpp, or cmapped", procName, 1); if (cmap) pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); else pixt = pixClone(pixs); d = pixGetDepth(pixt); if (d == 8) { pixGetAverageMasked(pixt, NULL, 0, 0, factor, type, &val); *pvalue = lept_roundftoi(val); } else { pixGetAverageMaskedRGB(pixt, NULL, 0, 0, factor, type, &rval, &gval, &bval); composeRGBPixel(lept_roundftoi(rval), lept_roundftoi(gval), lept_roundftoi(bval), pvalue); } pixDestroy(&pixt); return 0; } /*! * pixGetAverageMaskedRGB() * * Input: pixs (32 bpp, or colormapped) * pixm ( 1 bpp mask over which average is to be taken; * use all pixels if null) * x, y (UL corner of pixm relative to the UL corner of pixs; * can be < 0) * factor (subsampling factor; >= 1) * type (L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, * L_STANDARD_DEVIATION, L_VARIANCE) * &rval ( measured red value of given 'type') * &gval ( measured green value of given 'type') * &bval ( measured blue value of given 'type') * Return: 0 if OK, 1 on error * * Notes: * (1) For usage, see pixGetAverageMasked(). * (2) If there is a colormap, it is removed before the 8 bpp * component images are extracted. */ l_int32 pixGetAverageMaskedRGB(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *prval, l_float32 *pgval, l_float32 *pbval) { PIX *pixt; PIXCMAP *cmap; PROCNAME("pixGetAverageMaskedRGB"); if (prval) *prval = 0.0; if (pgval) *pgval = 0.0; if (pbval) *pbval = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); cmap = pixGetColormap(pixs); if (pixGetDepth(pixs) != 32 && !cmap) return ERROR_INT("pixs neither 32 bpp nor colormapped", procName, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (factor < 1) return ERROR_INT("subsampling factor < 1", procName, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION && type != L_VARIANCE) return ERROR_INT("invalid measure type", procName, 1); if (!prval && !pgval && !pbval) return ERROR_INT("no values requested", procName, 1); if (prval) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_RED); else pixt = pixGetRGBComponent(pixs, COLOR_RED); pixGetAverageMasked(pixt, pixm, x, y, factor, type, prval); pixDestroy(&pixt); } if (pgval) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_GREEN); else pixt = pixGetRGBComponent(pixs, COLOR_GREEN); pixGetAverageMasked(pixt, pixm, x, y, factor, type, pgval); pixDestroy(&pixt); } if (pbval) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_BLUE); else pixt = pixGetRGBComponent(pixs, COLOR_BLUE); pixGetAverageMasked(pixt, pixm, x, y, factor, type, pbval); pixDestroy(&pixt); } return 0; } /*! * pixGetAverageMasked() * * Input: pixs (8 or 16 bpp, or colormapped) * pixm ( 1 bpp mask over which average is to be taken; * use all pixels if null) * x, y (UL corner of pixm relative to the UL corner of pixs; * can be < 0) * factor (subsampling factor; >= 1) * type (L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, * L_STANDARD_DEVIATION, L_VARIANCE) * &val ( measured value of given 'type') * Return: 0 if OK, 1 on error * * Notes: * (1) Use L_MEAN_ABSVAL to get the average value of pixels in pixs * that are under the fg of the optional mask. If the mask * is null, it finds the average of the pixels in pixs. * (2) Likewise, use L_ROOT_MEAN_SQUARE to get the rms value of * pixels in pixs, either masked or not; L_STANDARD_DEVIATION * to get the standard deviation from the mean of the pixels; * L_VARIANCE to get the average squared difference from the * expected value. The variance is the square of the stdev. * For the standard deviation, we use * sqrt(<( - x)>^2) = sqrt( - ^2) * (3) Set the subsampling @factor > 1 to reduce the amount of * computation. * (4) Clipping of pixm (if it exists) to pixs is done in the inner loop. * (5) Input x,y are ignored unless pixm exists. */ l_int32 pixGetAverageMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_int32 factor, l_int32 type, l_float32 *pval) { l_int32 i, j, w, h, d, wm, hm, wplg, wplm, val, count; l_uint32 *datag, *datam, *lineg, *linem; l_float64 sumave, summs, ave, meansq, var; PIX *pixg; PROCNAME("pixGetAverageMasked"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); d = pixGetDepth(pixs); if (d != 8 && d != 16 && !pixGetColormap(pixs)) return ERROR_INT("pixs not 8 or 16 bpp or colormapped", procName, 1); if (pixm && pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); if (factor < 1) return ERROR_INT("subsampling factor < 1", procName, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION && type != L_VARIANCE) return ERROR_INT("invalid measure type", procName, 1); if (pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); sumave = summs = 0.0; count = 0; if (!pixm) { for (i = 0; i < h; i += factor) { lineg = datag + i * wplg; for (j = 0; j < w; j += factor) { if (d == 8) val = GET_DATA_BYTE(lineg, j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(lineg, j); if (type != L_ROOT_MEAN_SQUARE) sumave += val; if (type != L_MEAN_ABSVAL) summs += val * val; count++; } } } else { pixGetDimensions(pixm, &wm, &hm, NULL); datam = pixGetData(pixm); wplm = pixGetWpl(pixm); for (i = 0; i < hm; i += factor) { if (y + i < 0 || y + i >= h) continue; lineg = datag + (y + i) * wplg; linem = datam + i * wplm; for (j = 0; j < wm; j += factor) { if (x + j < 0 || x + j >= w) continue; if (GET_DATA_BIT(linem, j)) { if (d == 8) val = GET_DATA_BYTE(lineg, x + j); else /* d == 16 */ val = GET_DATA_TWO_BYTES(lineg, x + j); if (type != L_ROOT_MEAN_SQUARE) sumave += val; if (type != L_MEAN_ABSVAL) summs += val * val; count++; } } } } pixDestroy(&pixg); if (count == 0) return ERROR_INT("no pixels sampled", procName, 1); ave = sumave / (l_float64)count; meansq = summs / (l_float64)count; var = meansq - ave * ave; if (type == L_MEAN_ABSVAL) *pval = (l_float32)ave; else if (type == L_ROOT_MEAN_SQUARE) *pval = (l_float32)sqrt(meansq); else if (type == L_STANDARD_DEVIATION) *pval = (l_float32)sqrt(var); else /* type == L_VARIANCE */ *pval = (l_float32)var; return 0; } /*! * pixGetAverageTiledRGB() * * Input: pixs (32 bpp, or colormapped) * sx, sy (tile size; must be at least 2 x 2) * type (L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, L_STANDARD_DEVIATION) * &pixr ( tiled 'average' of red component) * &pixg ( tiled 'average' of green component) * &pixb ( tiled 'average' of blue component) * Return: 0 if OK, 1 on error * * Notes: * (1) For usage, see pixGetAverageTiled(). * (2) If there is a colormap, it is removed before the 8 bpp * component images are extracted. */ l_int32 pixGetAverageTiledRGB(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type, PIX **ppixr, PIX **ppixg, PIX **ppixb) { PIX *pixt; PIXCMAP *cmap; PROCNAME("pixGetAverageTiledRGB"); if (ppixr) *ppixr = NULL; if (ppixg) *ppixg = NULL; if (ppixb) *ppixb = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); cmap = pixGetColormap(pixs); if (pixGetDepth(pixs) != 32 && !cmap) return ERROR_INT("pixs neither 32 bpp nor colormapped", procName, 1); if (sx < 2 || sy < 2) return ERROR_INT("sx and sy not both > 1", procName, 1); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION) return ERROR_INT("invalid measure type", procName, 1); if (!ppixr && !ppixg && !ppixb) return ERROR_INT("no returned data requested", procName, 1); if (ppixr) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_RED); else pixt = pixGetRGBComponent(pixs, COLOR_RED); *ppixr = pixGetAverageTiled(pixt, sx, sy, type); pixDestroy(&pixt); } if (ppixg) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_GREEN); else pixt = pixGetRGBComponent(pixs, COLOR_GREEN); *ppixg = pixGetAverageTiled(pixt, sx, sy, type); pixDestroy(&pixt); } if (ppixb) { if (cmap) pixt = pixGetRGBComponentCmap(pixs, COLOR_BLUE); else pixt = pixGetRGBComponent(pixs, COLOR_BLUE); *ppixb = pixGetAverageTiled(pixt, sx, sy, type); pixDestroy(&pixt); } return 0; } /*! * pixGetAverageTiled() * * Input: pixs (8 bpp, or colormapped) * sx, sy (tile size; must be at least 2 x 2) * type (L_MEAN_ABSVAL, L_ROOT_MEAN_SQUARE, L_STANDARD_DEVIATION) * Return: pixd (average values in each tile), or null on error * * Notes: * (1) Only computes for tiles that are entirely contained in pixs. * (2) Use L_MEAN_ABSVAL to get the average abs value within the tile; * L_ROOT_MEAN_SQUARE to get the rms value within each tile; * L_STANDARD_DEVIATION to get the standard dev. from the average * within each tile. * (3) If colormapped, converts to 8 bpp gray. */ PIX * pixGetAverageTiled(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 type) { l_int32 i, j, k, m, w, h, wd, hd, d, pos, wplt, wpld, valt; l_uint32 *datat, *datad, *linet, *lined, *startt; l_float64 sumave, summs, ave, meansq, normfact; PIX *pixt, *pixd; PROCNAME("pixGetAverageTiled"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not 8 bpp or cmapped", procName, NULL); if (sx < 2 || sy < 2) return (PIX *)ERROR_PTR("sx and sy not both > 1", procName, NULL); wd = w / sx; hd = h / sy; if (wd < 1 || hd < 1) return (PIX *)ERROR_PTR("wd or hd == 0", procName, NULL); if (type != L_MEAN_ABSVAL && type != L_ROOT_MEAN_SQUARE && type != L_STANDARD_DEVIATION) return (PIX *)ERROR_PTR("invalid measure type", procName, NULL); pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); pixd = pixCreate(wd, hd, 8); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); normfact = 1. / (l_float64)(sx * sy); for (i = 0; i < hd; i++) { lined = datad + i * wpld; linet = datat + i * sy * wplt; for (j = 0; j < wd; j++) { if (type == L_MEAN_ABSVAL || type == L_STANDARD_DEVIATION) { sumave = 0.0; for (k = 0; k < sy; k++) { startt = linet + k * wplt; for (m = 0; m < sx; m++) { pos = j * sx + m; valt = GET_DATA_BYTE(startt, pos); sumave += valt; } } ave = normfact * sumave; } if (type == L_ROOT_MEAN_SQUARE || type == L_STANDARD_DEVIATION) { summs = 0.0; for (k = 0; k < sy; k++) { startt = linet + k * wplt; for (m = 0; m < sx; m++) { pos = j * sx + m; valt = GET_DATA_BYTE(startt, pos); summs += valt * valt; } } meansq = normfact * summs; } if (type == L_MEAN_ABSVAL) valt = (l_int32)(ave + 0.5); else if (type == L_ROOT_MEAN_SQUARE) valt = (l_int32)(sqrt(meansq) + 0.5); else /* type == L_STANDARD_DEVIATION */ valt = (l_int32)(sqrt(meansq - ave * ave) + 0.5); SET_DATA_BYTE(lined, j, valt); } } pixDestroy(&pixt); return pixd; } /*! * pixRowStats() * * Input: pixs (8 bpp; not cmapped) * box ( clipping box; can be null) * &namean ( numa of mean values) * &namedian ( numa of median values) * &namode ( numa of mode intensity values) * &namodecount ( numa of mode counts) * &navar ( numa of variance) * &narootvar ( numa of square root of variance) * Return: na (numa of requested statistic for each row), or null on error * * Notes: * (1) This computes numas that represent column vectors of statistics, * with each of its values derived from the corresponding row of a Pix. * (2) Use NULL on input to prevent computation of any of the 5 numas. * (3) Other functions that compute pixel row statistics are: * pixCountPixelsByRow() * pixAverageByRow() * pixVarianceByRow() * pixGetRowStats() */ l_int32 pixRowStats(PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar) { l_int32 i, j, k, w, h, val, wpls, sum, sumsq, target, max, modeval; l_int32 xstart, xend, ystart, yend, bw, bh; l_int32 *histo; l_uint32 *lines, *datas; l_float32 norm; l_float32 *famean, *fameansq, *favar, *farootvar; l_float32 *famedian, *famode, *famodecount; PROCNAME("pixRowStats"); if (pnamean) *pnamean = NULL; if (pnamedian) *pnamedian = NULL; if (pnamode) *pnamode = NULL; if (pnamodecount) *pnamodecount = NULL; if (pnavar) *pnavar = NULL; if (pnarootvar) *pnarootvar = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); famean = fameansq = favar = farootvar = NULL; famedian = famode = famodecount = NULL; pixGetDimensions(pixs, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", procName, 1); /* We need the mean for variance and root variance */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (pnamean || pnavar || pnarootvar) { norm = 1. / (l_float32)bw; famean = (l_float32 *)CALLOC(bh, sizeof(l_float32)); fameansq = (l_float32 *)CALLOC(bh, sizeof(l_float32)); if (pnavar || pnarootvar) { favar = (l_float32 *)CALLOC(bh, sizeof(l_float32)); if (pnarootvar) farootvar = (l_float32 *)CALLOC(bh, sizeof(l_float32)); } for (i = ystart; i < yend; i++) { sum = sumsq = 0; lines = datas + i * wpls; for (j = xstart; j < xend; j++) { val = GET_DATA_BYTE(lines, j); sum += val; sumsq += val * val; } famean[i] = norm * sum; fameansq[i] = norm * sumsq; if (pnavar || pnarootvar) { favar[i] = fameansq[i] - famean[i] * famean[i]; if (pnarootvar) farootvar[i] = sqrt(favar[i]); } } FREE(fameansq); if (pnamean) *pnamean = numaCreateFromFArray(famean, bh, L_INSERT); else FREE(famean); if (pnavar) *pnavar = numaCreateFromFArray(favar, bh, L_INSERT); else FREE(favar); if (pnarootvar) *pnarootvar = numaCreateFromFArray(farootvar, bh, L_INSERT); } /* We need a histogram to find the median and/or mode values */ if (pnamedian || pnamode || pnamodecount) { histo = (l_int32 *)CALLOC(256, sizeof(l_int32)); if (pnamedian) { *pnamedian = numaMakeConstant(0, bh); famedian = numaGetFArray(*pnamedian, L_NOCOPY); } if (pnamode) { *pnamode = numaMakeConstant(0, bh); famode = numaGetFArray(*pnamode, L_NOCOPY); } if (pnamodecount) { *pnamodecount = numaMakeConstant(0, bh); famodecount = numaGetFArray(*pnamodecount, L_NOCOPY); } for (i = ystart; i < yend; i++) { lines = datas + i * wpls; memset(histo, 0, 1024); for (j = xstart; j < xend; j++) { val = GET_DATA_BYTE(lines, j); histo[val]++; } if (pnamedian) { sum = 0; target = (bw + 1) / 2; for (k = 0; k < 256; k++) { sum += histo[k]; if (sum >= target) { famedian[i] = k; break; } } } if (pnamode || pnamodecount) { max = 0; modeval = 0; for (k = 0; k < 256; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (pnamode) famode[i] = modeval; if (pnamodecount) famodecount[i] = max; } } FREE(histo); } return 0; } /*! * pixColumnStats() * * Input: pixs (8 bpp; not cmapped) * box ( clipping box; can be null) * &namean ( numa of mean values) * &namedian ( numa of median values) * &namode ( numa of mode intensity values) * &namodecount ( numa of mode counts) * &navar ( numa of variance) * &narootvar ( numa of square root of variance) * Return: na (numa of requested statistic for each column), * or null on error * * Notes: * (1) This computes numas that represent row vectors of statistics, * with each of its values derived from the corresponding col of a Pix. * (2) Use NULL on input to prevent computation of any of the 5 numas. * (3) Other functions that compute pixel column statistics are: * pixCountPixelsByColumn() * pixAverageByColumn() * pixVarianceByColumn() * pixGetColumnStats() */ l_int32 pixColumnStats(PIX *pixs, BOX *box, NUMA **pnamean, NUMA **pnamedian, NUMA **pnamode, NUMA **pnamodecount, NUMA **pnavar, NUMA **pnarootvar) { l_int32 i, j, k, w, h, val, wpls, sum, sumsq, target, max, modeval; l_int32 xstart, xend, ystart, yend, bw, bh; l_int32 *histo; l_uint32 *lines, *datas; l_float32 norm; l_float32 *famean, *fameansq, *favar, *farootvar; l_float32 *famedian, *famode, *famodecount; PROCNAME("pixColumnStats"); if (pnamean) *pnamean = NULL; if (pnamedian) *pnamedian = NULL; if (pnamode) *pnamode = NULL; if (pnamodecount) *pnamodecount = NULL; if (pnavar) *pnavar = NULL; if (pnarootvar) *pnarootvar = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); famean = fameansq = favar = farootvar = NULL; famedian = famode = famodecount = NULL; pixGetDimensions(pixs, &w, &h, NULL); if (boxClipToRectangleParams(box, w, h, &xstart, &ystart, &xend, ¥d, &bw, &bh) == 1) return ERROR_INT("invalid clipping box", procName, 1); /* We need the mean for variance and root variance */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (pnamean || pnavar || pnarootvar) { norm = 1. / (l_float32)bh; famean = (l_float32 *)CALLOC(bw, sizeof(l_float32)); fameansq = (l_float32 *)CALLOC(bw, sizeof(l_float32)); if (pnavar || pnarootvar) { favar = (l_float32 *)CALLOC(bw, sizeof(l_float32)); if (pnarootvar) farootvar = (l_float32 *)CALLOC(bw, sizeof(l_float32)); } for (j = xstart; j < xend; j++) { sum = sumsq = 0; for (i = ystart, lines = datas; i < yend; lines += wpls, i++) { val = GET_DATA_BYTE(lines, j); sum += val; sumsq += val * val; } famean[j] = norm * sum; fameansq[j] = norm * sumsq; if (pnavar || pnarootvar) { favar[j] = fameansq[j] - famean[j] * famean[j]; if (pnarootvar) farootvar[j] = sqrt(favar[j]); } } FREE(fameansq); if (pnamean) *pnamean = numaCreateFromFArray(famean, bw, L_INSERT); else FREE(famean); if (pnavar) *pnavar = numaCreateFromFArray(favar, bw, L_INSERT); else FREE(favar); if (pnarootvar) *pnarootvar = numaCreateFromFArray(farootvar, bw, L_INSERT); } /* We need a histogram to find the median and/or mode values */ if (pnamedian || pnamode || pnamodecount) { histo = (l_int32 *)CALLOC(256, sizeof(l_int32)); if (pnamedian) { *pnamedian = numaMakeConstant(0, bw); famedian = numaGetFArray(*pnamedian, L_NOCOPY); } if (pnamode) { *pnamode = numaMakeConstant(0, bw); famode = numaGetFArray(*pnamode, L_NOCOPY); } if (pnamodecount) { *pnamodecount = numaMakeConstant(0, bw); famodecount = numaGetFArray(*pnamodecount, L_NOCOPY); } for (j = xstart; j < xend; j++) { memset(histo, 0, 1024); for (i = ystart, lines = datas; i < yend; lines += wpls, i++) { val = GET_DATA_BYTE(lines, j); histo[val]++; } if (pnamedian) { sum = 0; target = (bh + 1) / 2; for (k = 0; k < 256; k++) { sum += histo[k]; if (sum >= target) { famedian[j] = k; break; } } } if (pnamode || pnamodecount) { max = 0; modeval = 0; for (k = 0; k < 256; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (pnamode) famode[j] = modeval; if (pnamodecount) famodecount[j] = max; } } FREE(histo); } return 0; } /*! * pixGetComponentRange() * * Input: pixs (8 bpp grayscale, 32 bpp rgb, or colormapped) * factor (subsampling factor; >= 1; ignored if colormapped) * color (L_SELECT_RED, L_SELECT_GREEN or L_SELECT_BLUE) * &minval ( minimum value of component) * &maxval ( maximum value of component) * Return: 0 if OK, 1 on error * * Notes: * (1) If pixs is 8 bpp grayscale, the color selection type is ignored. */ l_int32 pixGetComponentRange(PIX *pixs, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval) { l_int32 d; PIXCMAP *cmap; PROCNAME("pixGetComponentRange"); if (pminval) *pminval = 0; if (pmaxval) *pmaxval = 0; if (!pminval && !pmaxval) return ERROR_INT("no result requested", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); cmap = pixGetColormap(pixs); if (cmap) return pixcmapGetComponentRange(cmap, color, pminval, pmaxval); if (factor < 1) return ERROR_INT("subsampling factor < 1", procName, 1); d = pixGetDepth(pixs); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); if (d == 8) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, NULL, NULL, NULL, pminval); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, NULL, NULL, NULL, pmaxval); } else if (color == L_SELECT_RED) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, pminval, NULL, NULL, NULL); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, pmaxval, NULL, NULL, NULL); } else if (color == L_SELECT_GREEN) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, NULL, pminval, NULL, NULL); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, NULL, pmaxval, NULL, NULL); } else if (color == L_SELECT_BLUE) { pixGetExtremeValue(pixs, factor, L_SELECT_MIN, NULL, NULL, pminval, NULL); pixGetExtremeValue(pixs, factor, L_SELECT_MAX, NULL, NULL, pmaxval, NULL); } else { return ERROR_INT("invalid color", procName, 1); } return 0; } /*! * pixGetExtremeValue() * * Input: pixs (8 bpp grayscale, 32 bpp rgb, or colormapped) * factor (subsampling factor; >= 1; ignored if colormapped) * type (L_SELECT_MIN or L_SELECT_MAX) * &rval ( red component) * &gval ( green component) * &bval ( blue component) * &grayval ( min or max gray value) * Return: 0 if OK, 1 on error * * Notes: * (1) If pixs is grayscale, the result is returned in &grayval. * Otherwise, if there is a colormap or d == 32, * each requested color component is returned. At least * one color component (address) must be input. */ l_int32 pixGetExtremeValue(PIX *pixs, l_int32 factor, l_int32 type, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *pgrayval) { l_int32 i, j, w, h, d, wpl; l_int32 val, extval, rval, gval, bval, extrval, extgval, extbval; l_uint32 pixel; l_uint32 *data, *line; PIXCMAP *cmap; PROCNAME("pixGetExtremeValue"); if (prval) *prval = 0; if (pgval) *pgval = 0; if (pbval) *pbval = 0; if (pgrayval) *pgrayval = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); cmap = pixGetColormap(pixs); if (cmap) return pixcmapGetExtremeValue(cmap, type, prval, pgval, pbval); pixGetDimensions(pixs, &w, &h, &d); if (type != L_SELECT_MIN && type != L_SELECT_MAX) return ERROR_INT("invalid type", procName, 1); if (factor < 1) return ERROR_INT("subsampling factor < 1", procName, 1); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); if (d == 8 && !pgrayval) return ERROR_INT("can't return result in grayval", procName, 1); if (d == 32 && !prval && !pgval && !pbval) return ERROR_INT("can't return result in r/g/b-val", procName, 1); data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (d == 8) { if (type == L_SELECT_MIN) extval = 100000; else /* get max */ extval = 0; for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { val = GET_DATA_BYTE(line, j); if ((type == L_SELECT_MIN && val < extval) || (type == L_SELECT_MAX && val > extval)) extval = val; } } *pgrayval = extval; return 0; } /* 32 bpp rgb */ if (type == L_SELECT_MIN) { extrval = 100000; extgval = 100000; extbval = 100000; } else { extrval = 0; extgval = 0; extbval = 0; } for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { pixel = line[j]; if (prval) { rval = (pixel >> L_RED_SHIFT) & 0xff; if ((type == L_SELECT_MIN && rval < extrval) || (type == L_SELECT_MAX && rval > extrval)) extrval = rval; } if (pgval) { gval = (pixel >> L_GREEN_SHIFT) & 0xff; if ((type == L_SELECT_MIN && gval < extgval) || (type == L_SELECT_MAX && gval > extgval)) extgval = gval; } if (pbval) { bval = (pixel >> L_BLUE_SHIFT) & 0xff; if ((type == L_SELECT_MIN && bval < extbval) || (type == L_SELECT_MAX && bval > extbval)) extbval = bval; } } } if (prval) *prval = extrval; if (pgval) *pgval = extgval; if (pbval) *pbval = extbval; return 0; } /*! * pixGetMaxValueInRect() * * Input: pixs (8 bpp or 32 bpp grayscale; no color space components) * box ( region; set box = NULL to use entire pixs) * &maxval ( max value in region) * &xmax ( x location of max value) * &ymax ( y location of max value) * Return: 0 if OK, 1 on error * * Notes: * (1) This can be used to find the maximum and its location * in a 2-dimensional histogram, where the x and y directions * represent two color components (e.g., saturation and hue). * (2) Note that here a 32 bpp pixs has pixel values that are simply * numbers. They are not 8 bpp components in a colorspace. */ l_int32 pixGetMaxValueInRect(PIX *pixs, BOX *box, l_uint32 *pmaxval, l_int32 *pxmax, l_int32 *pymax) { l_int32 i, j, w, h, d, wpl, bw, bh; l_int32 xstart, ystart, xend, yend, xmax, ymax; l_uint32 val, maxval; l_uint32 *data, *line; PROCNAME("pixGetMaxValueInRect"); if (pmaxval) *pmaxval = 0; if (pxmax) *pxmax = 0; if (pymax) *pymax = 0; if (!pmaxval && !pxmax && !pymax) return ERROR_INT("nothing to do", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetColormap(pixs) != NULL) return ERROR_INT("pixs has colormap", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 32) return ERROR_INT("pixs not 8 or 32 bpp", procName, 1); xstart = ystart = 0; xend = w - 1; yend = h - 1; if (box) { boxGetGeometry(box, &xstart, &ystart, &bw, &bh); xend = xstart + bw - 1; yend = ystart + bh - 1; } data = pixGetData(pixs); wpl = pixGetWpl(pixs); maxval = 0; xmax = ymax = 0; for (i = ystart; i <= yend; i++) { line = data + i * wpl; for (j = xstart; j <= xend; j++) { if (d == 8) val = GET_DATA_BYTE(line, j); else /* d == 32 */ val = line[j]; if (val > maxval) { maxval = val; xmax = j; ymax = i; } } } if (maxval == 0) { /* no counts; pick the center of the rectangle */ xmax = (xstart + xend) / 2; ymax = (ystart + yend) / 2; } if (pmaxval) *pmaxval = maxval; if (pxmax) *pxmax = xmax; if (pymax) *pymax = ymax; return 0; } /*! * pixGetBinnedComponentRange() * * Input: pixs (32 bpp rgb) * nbins (number of equal population bins; must be > 1) * factor (subsampling factor; >= 1) * color (L_SELECT_RED, L_SELECT_GREEN or L_SELECT_BLUE) * &minval ( minimum value of component) * &maxval ( maximum value of component) * &carray ( color array of bins) * debugflag (1 for debug output) * Return: 0 if OK, 1 on error * * Notes: * (1) This returns the min and max average values of the * selected color component in the set of rank bins, * where the ranking is done using the specified component. */ l_int32 pixGetBinnedComponentRange(PIX *pixs, l_int32 nbins, l_int32 factor, l_int32 color, l_int32 *pminval, l_int32 *pmaxval, l_uint32 **pcarray, l_int32 debugflag) { l_int32 i, minval, maxval, rval, gval, bval; l_uint32 *carray; PIX *pixt; PROCNAME("pixGetBinnedComponentRange"); if (pminval) *pminval = 0; if (pmaxval) *pmaxval = 0; if (pcarray) *pcarray = NULL; if (!pminval && !pmaxval) return ERROR_INT("no result requested", procName, 1); if (!pixs || pixGetDepth(pixs) != 32) return ERROR_INT("pixs not defined or not 32 bpp", procName, 1); if (factor < 1) return ERROR_INT("subsampling factor < 1", procName, 1); if (color != L_SELECT_RED && color != L_SELECT_GREEN && color != L_SELECT_BLUE) return ERROR_INT("invalid color", procName, 1); pixGetRankColorArray(pixs, nbins, color, factor, &carray, 0); if (debugflag) { for (i = 0; i < nbins; i++) fprintf(stderr, "c[%d] = %x\n", i, carray[i]); pixt = pixDisplayColorArray(carray, nbins, 200, 5, 1); pixDisplay(pixt, 100, 100); pixDestroy(&pixt); } extractRGBValues(carray[0], &rval, &gval, &bval); minval = rval; if (color == L_SELECT_GREEN) minval = gval; else if (color == L_SELECT_BLUE) minval = bval; extractRGBValues(carray[nbins - 1], &rval, &gval, &bval); maxval = rval; if (color == L_SELECT_GREEN) maxval = gval; else if (color == L_SELECT_BLUE) maxval = bval; if (pminval) *pminval = minval; if (pmaxval) *pmaxval = maxval; if (pcarray) *pcarray = carray; else FREE(carray); return 0; } /*! * pixGetRankColorArray() * * Input: pixs (32 bpp or cmapped) * nbins (number of equal population bins; must be > 1) * type (color selection flag) * factor (subsampling factor; integer >= 1) * &carray ( array of colors, ranked by intensity) * debugflag (1 to display color squares and plots of color * components; 2 to write them as png to file) * Return: 0 if OK, 1 on error * * Notes: * (1) The color selection flag is one of: L_SELECT_RED, L_SELECT_GREEN, * L_SELECT_BLUE, L_SELECT_MIN, L_SELECT_MAX. * (2) Then it finds the histogram of the selected component in each * RGB pixel. For each of the @nbins sets of pixels, * ordered by this component value, find the average color, * and return this as a "rank color" array. The output array * has @nbins colors. * (3) Set the subsampling factor > 1 to reduce the amount of * computation. Typically you want at least 10,000 pixels * for reasonable statistics. * (4) The rank color as a function of rank can then be found from * rankint = (l_int32)(rank * (nbins - 1) + 0.5); * extractRGBValues(array[rankint], &rval, &gval, &bval); * where the rank is in [0.0 ... 1.0]. * This function is meant to be simple and approximate. * (5) Compare this with pixGetBinnedColor(), which generates equal * width intensity bins and finds the average color in each bin. */ l_int32 pixGetRankColorArray(PIX *pixs, l_int32 nbins, l_int32 type, l_int32 factor, l_uint32 **pcarray, l_int32 debugflag) { l_int32 ret; l_uint32 *array; NUMA *na, *nan, *narbin; PIX *pixt, *pixc, *pixg, *pixd; PIXCMAP *cmap; PROCNAME("pixGetRankColorArray"); if (!pcarray) return ERROR_INT("&carray not defined", procName, 1); *pcarray = NULL; if (factor < 1) return ERROR_INT("sampling factor < 1", procName, 1); if (nbins < 2) return ERROR_INT("nbins must be at least 2", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); cmap = pixGetColormap(pixs); if (pixGetDepth(pixs) != 32 && !cmap) return ERROR_INT("pixs neither 32 bpp nor cmapped", procName, 1); if (type != L_SELECT_RED && type != L_SELECT_GREEN && type != L_SELECT_BLUE && type != L_SELECT_MIN && type != L_SELECT_MAX) return ERROR_INT("invalid type", procName, 1); /* Downscale by factor and remove colormap if it exists */ pixt = pixScaleByIntSubsampling(pixs, factor); if (cmap) pixc = pixRemoveColormap(pixt, REMOVE_CMAP_TO_FULL_COLOR); else pixc = pixClone(pixt); pixDestroy(&pixt); /* Get normalized histogram of the selected component */ if (type == L_SELECT_RED) pixg = pixGetRGBComponent(pixc, COLOR_RED); else if (type == L_SELECT_GREEN) pixg = pixGetRGBComponent(pixc, COLOR_GREEN); else if (type == L_SELECT_BLUE) pixg = pixGetRGBComponent(pixc, COLOR_BLUE); else if (type == L_SELECT_MIN) pixg = pixConvertRGBToGrayMinMax(pixc, L_CHOOSE_MIN); else /* type == L_SELECT_MAX */ pixg = pixConvertRGBToGrayMinMax(pixc, L_CHOOSE_MAX); if ((na = pixGetGrayHistogram(pixg, 1)) == NULL) return ERROR_INT("na not made", procName, 1); nan = numaNormalizeHistogram(na, 1.0); /* Get the following arrays: * (1) nar: cumulative normalized histogram (rank vs intensity value). * With 256 intensity values, we have 257 rank values. * (2) nai: "average" intensity as function of rank bin, for * @nbins equally spaced in rank between 0.0 and 1.0. * (3) narbin: bin number of discretized rank as a function of * intensity. This is the 'inverse' of nai. * (4) nabb: intensity value of the right bin boundary, for each * of the @nbins discretized rank bins. */ if (!debugflag) { numaDiscretizeRankAndIntensity(nan, nbins, &narbin, NULL, NULL, NULL); } else { l_int32 type; NUMA *nai, *nar, *nabb; numaDiscretizeRankAndIntensity(nan, nbins, &narbin, &nai, &nar, &nabb); type = (debugflag == 1) ? GPLOT_X11 : GPLOT_PNG; gplotSimple1(nan, type, "/tmp/rtnan", "Normalized Histogram"); gplotSimple1(nar, type, "/tmp/rtnar", "Cumulative Histogram"); gplotSimple1(nai, type, "/tmp/rtnai", "Intensity vs. rank bin"); gplotSimple1(narbin, type, "/tmp/rtnarbin", "LUT: rank bin vs. Intensity"); gplotSimple1(nabb, type, "/tmp/rtnabb", "Intensity of right edge vs. rank bin"); numaDestroy(&nai); numaDestroy(&nar); numaDestroy(&nabb); } /* Get the average color in each bin for pixels whose grayscale * values fall in the bin range. @narbin is the LUT that * determines the bin number from the grayscale version of * the image. Because this mapping may not be unique, * some bins may not be represented in the LUT. In use, to get fair * allocation into all the bins, bin population is monitored * as pixels are accumulated, and when bins fill up, * pixels are required to overflow into succeeding bins. */ pixGetBinnedColor(pixc, pixg, 1, nbins, narbin, pcarray, debugflag); ret = 0; if ((array = *pcarray) == NULL) { L_ERROR("color array not returned\n", procName); ret = 1; debugflag = 0; /* make sure to skip the following */ } if (debugflag) { pixd = pixDisplayColorArray(array, nbins, 200, 5, 1); if (debugflag == 1) pixDisplayWithTitle(pixd, 0, 500, "binned colors", 1); else /* debugflag == 2 */ pixWriteTempfile("/tmp", "rankhisto.png", pixd, IFF_PNG, NULL); pixDestroy(&pixd); } pixDestroy(&pixc); pixDestroy(&pixg); numaDestroy(&na); numaDestroy(&nan); numaDestroy(&narbin); return ret; } /*! * pixGetBinnedColor() * * Input: pixs (32 bpp) * pixg (8 bpp grayscale version of pixs) * factor (sampling factor along pixel counting direction) * nbins (number of intensity bins) * nalut (LUT for mapping from intensity to bin number) * &carray ( array of average color values in each bin) * debugflag (1 to display output debug plots of color * components; 2 to write them as png to file) * Return: 0 if OK; 1 on error * * Notes: * (1) This takes a color image, a grayscale (intensity) version, * a LUT from intensity to bin number, and the number of bins. * It computes the average color for pixels whose intensity * is in each bin. This is returned as an array of l_uint32 * colors in our standard RGBA ordering. * (2) This function generates equal width intensity bins and * finds the average color in each bin. Compare this with * pixGetRankColorArray(), which rank orders the pixels * by the value of the selected component in each pixel, * sets up bins with equal population (not intensity width!), * and gets the average color in each bin. */ l_int32 pixGetBinnedColor(PIX *pixs, PIX *pixg, l_int32 factor, l_int32 nbins, NUMA *nalut, l_uint32 **pcarray, l_int32 debugflag) { l_int32 i, j, w, h, wpls, wplg, grayval, bin, rval, gval, bval; l_int32 npts, avepts, maxpts; l_uint32 *datas, *datag, *lines, *lineg, *carray; l_float64 norm; l_float64 *rarray, *garray, *barray, *narray; PROCNAME("pixGetBinnedColor"); if (!pcarray) return ERROR_INT("&carray not defined", procName, 1); *pcarray = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixg) return ERROR_INT("pixg not defined", procName, 1); if (!nalut) return ERROR_INT("nalut not defined", procName, 1); if (factor < 1) { L_WARNING("sampling factor less than 1; setting to 1\n", procName); factor = 1; } /* Find the color for each rank bin. Note that we can have * multiple bins filled with pixels having the same gray value. * Therefore, because in general the mapping from gray value * to bin number is not unique, if a bin fills up (actually, * we allow it to slightly overfill), we roll the excess * over to the next bin, etc. */ pixGetDimensions(pixs, &w, &h, NULL); npts = (w + factor - 1) * (h + factor - 1) / (factor * factor); avepts = (npts + nbins - 1) / nbins; /* average number of pts in a bin */ maxpts = (l_int32)((1.0 + 0.5 / (l_float32)nbins) * avepts); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); rarray = (l_float64 *)CALLOC(nbins, sizeof(l_float64)); garray = (l_float64 *)CALLOC(nbins, sizeof(l_float64)); barray = (l_float64 *)CALLOC(nbins, sizeof(l_float64)); narray = (l_float64 *)CALLOC(nbins, sizeof(l_float64)); for (i = 0; i < h; i += factor) { lines = datas + i * wpls; lineg = datag + i * wplg; for (j = 0; j < w; j += factor) { grayval = GET_DATA_BYTE(lineg, j); numaGetIValue(nalut, grayval, &bin); extractRGBValues(lines[j], &rval, &gval, &bval); while (narray[bin] >= maxpts && bin < nbins - 1) bin++; rarray[bin] += rval; garray[bin] += gval; barray[bin] += bval; narray[bin] += 1.0; /* count samples in each bin */ } } for (i = 0; i < nbins; i++) { norm = 1. / narray[i]; rarray[i] *= norm; garray[i] *= norm; barray[i] *= norm; /* fprintf(stderr, "narray[%d] = %f\n", i, narray[i]); */ } if (debugflag) { l_int32 type; NUMA *nared, *nagreen, *nablue; nared = numaCreate(nbins); nagreen = numaCreate(nbins); nablue = numaCreate(nbins); for (i = 0; i < nbins; i++) { numaAddNumber(nared, rarray[i]); numaAddNumber(nagreen, garray[i]); numaAddNumber(nablue, barray[i]); } type = (debugflag == 1) ? GPLOT_X11 : GPLOT_PNG; gplotSimple1(nared, type, "/tmp/rtnared", "Average red val vs. rank bin"); gplotSimple1(nagreen, type, "/tmp/rtnagreen", "Average green val vs. rank bin"); gplotSimple1(nablue, type, "/tmp/rtnablue", "Average blue val vs. rank bin"); numaDestroy(&nared); numaDestroy(&nagreen); numaDestroy(&nablue); } /* Save colors for all bins in a single array */ if ((carray = (l_uint32 *)CALLOC(nbins, sizeof(l_uint32))) == NULL) return ERROR_INT("rankcolor not made", procName, 1); *pcarray = carray; for (i = 0; i < nbins; i++) { rval = (l_int32)(rarray[i] + 0.5); gval = (l_int32)(garray[i] + 0.5); bval = (l_int32)(barray[i] + 0.5); composeRGBPixel(rval, gval, bval, carray + i); } FREE(rarray); FREE(garray); FREE(barray); FREE(narray); return 0; } /*! * pixDisplayColorArray() * * Input: carray (array of colors: 0xrrggbb00) * ncolors (size of array) * side (size of each color square; suggest 200) * ncols (number of columns in output color matrix) * textflag (1 to label each square with text; 0 otherwise) * Return: pixd (color array), or null on error */ PIX * pixDisplayColorArray(l_uint32 *carray, l_int32 ncolors, l_int32 side, l_int32 ncols, l_int32 textflag) { char textstr[256]; l_int32 i, rval, gval, bval; L_BMF *bmf6; PIX *pixt, *pixd; PIXA *pixa; PROCNAME("pixDisplayColorArray"); if (!carray) return (PIX *)ERROR_PTR("carray not defined", procName, NULL); bmf6 = NULL; if (textflag) bmf6 = bmfCreate("./fonts", 6); pixa = pixaCreate(ncolors); for (i = 0; i < ncolors; i++) { pixt = pixCreate(side, side, 32); pixSetAllArbitrary(pixt, carray[i]); if (textflag) { extractRGBValues(carray[i], &rval, &gval, &bval); snprintf(textstr, sizeof(textstr), "%d: (%d %d %d)", i, rval, gval, bval); pixSaveTiledWithText(pixt, pixa, side, (i % ncols == 0) ? 1 : 0, 20, 2, bmf6, textstr, 0xff000000, L_ADD_BELOW); } else { pixSaveTiled(pixt, pixa, 1.0, (i % ncols == 0) ? 1 : 0, 20, 32); } pixDestroy(&pixt); } pixd = pixaDisplay(pixa, 0, 0); pixaDestroy(&pixa); bmfDestroy(&bmf6); return pixd; } /*-------------------------------------------------------------* * Pixelwise aligned statistics * *-------------------------------------------------------------*/ /*! * pixaGetAlignedStats() * * Input: pixa (of identically sized, 8 bpp pix; not cmapped) * type (L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT) * nbins (of histogram for median and mode; ignored for mean) * thresh (on histogram for mode val; ignored for all other types) * Return: pix (with pixelwise aligned stats), or null on error. * * Notes: * (1) Each pixel in the returned pix represents an average * (or median, or mode) over the corresponding pixels in each * pix in the pixa. * (2) The @thresh parameter works with L_MODE_VAL only, and * sets a minimum occupancy of the mode bin. * If the occupancy of the mode bin is less than @thresh, the * mode value is returned as 0. To always return the actual * mode value, set @thresh = 0. See pixGetRowStats(). */ PIX * pixaGetAlignedStats(PIXA *pixa, l_int32 type, l_int32 nbins, l_int32 thresh) { l_int32 j, n, w, h, d; l_float32 *colvect; PIX *pixt, *pixd; PROCNAME("pixaGetAlignedStats"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && type != L_MODE_VAL && type != L_MODE_COUNT) return (PIX *)ERROR_PTR("invalid type", procName, NULL); n = pixaGetCount(pixa); if (n == 0) return (PIX *)ERROR_PTR("no pix in pixa", procName, NULL); pixaGetPixDimensions(pixa, 0, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pix not 8 bpp", procName, NULL); pixd = pixCreate(w, h, 8); pixt = pixCreate(n, h, 8); colvect = (l_float32 *)CALLOC(h, sizeof(l_float32)); for (j = 0; j < w; j++) { pixaExtractColumnFromEachPix(pixa, j, pixt); pixGetRowStats(pixt, type, nbins, thresh, colvect); pixSetPixelColumn(pixd, j, colvect); } FREE(colvect); pixDestroy(&pixt); return pixd; } /*! * pixaExtractColumnFromEachPix() * * Input: pixa (of identically sized, 8 bpp; not cmapped) * col (column index) * pixd (pix into which each column is inserted) * Return: 0 if OK, 1 on error */ l_int32 pixaExtractColumnFromEachPix(PIXA *pixa, l_int32 col, PIX *pixd) { l_int32 i, k, n, w, h, ht, val, wplt, wpld; l_uint32 *datad, *datat; PIX *pixt; PROCNAME("pixaExtractColumnFromEachPix"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!pixd || pixGetDepth(pixd) != 8) return ERROR_INT("pixa not defined or not 8 bpp", procName, 1); n = pixaGetCount(pixa); pixGetDimensions(pixd, &w, &h, NULL); if (n != w) return ERROR_INT("pix width != n", procName, 1); pixt = pixaGetPix(pixa, 0, L_CLONE); wplt = pixGetWpl(pixt); pixGetDimensions(pixt, NULL, &ht, NULL); pixDestroy(&pixt); if (h != ht) return ERROR_INT("pixd height != column height", procName, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (k = 0; k < n; k++) { pixt = pixaGetPix(pixa, k, L_CLONE); datat = pixGetData(pixt); for (i = 0; i < h; i++) { val = GET_DATA_BYTE(datat, col); SET_DATA_BYTE(datad + i * wpld, k, val); datat += wplt; } pixDestroy(&pixt); } return 0; } /*! * pixGetRowStats() * * Input: pixs (8 bpp; not cmapped) * type (L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT) * nbins (of histogram for median and mode; ignored for mean) * thresh (on histogram for mode; ignored for mean and median) * colvect (vector of results gathered across the rows of pixs) * Return: 0 if OK, 1 on error * * Notes: * (1) This computes a column vector of statistics using each * row of a Pix. The result is put in @colvect. * (2) The @thresh parameter works with L_MODE_VAL only, and * sets a minimum occupancy of the mode bin. * If the occupancy of the mode bin is less than @thresh, the * mode value is returned as 0. To always return the actual * mode value, set @thresh = 0. * (3) What is the meaning of this @thresh parameter? * For each row, the total count in the histogram is w, the * image width. So @thresh, relative to w, gives a measure * of the ratio of the bin width to the width of the distribution. * The larger @thresh, the narrower the distribution must be * for the mode value to be returned (instead of returning 0). * (4) If the Pix consists of a set of corresponding columns, * one for each Pix in a Pixa, the width of the Pix is the * number of Pix in the Pixa and the column vector can * be stored as a column in a Pix of the same size as * each Pix in the Pixa. */ l_int32 pixGetRowStats(PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *colvect) { l_int32 i, j, k, w, h, val, wpls, sum, target, max, modeval; l_int32 *histo, *gray2bin, *bin2gray; l_uint32 *lines, *datas; PROCNAME("pixGetRowStats"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!colvect) return ERROR_INT("colvect not defined", procName, 1); if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && type != L_MODE_VAL && type != L_MODE_COUNT) return ERROR_INT("invalid type", procName, 1); if (type != L_MEAN_ABSVAL && (nbins < 1 || nbins > 256)) return ERROR_INT("invalid nbins", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (type == L_MEAN_ABSVAL) { for (i = 0; i < h; i++) { sum = 0; lines = datas + i * wpls; for (j = 0; j < w; j++) sum += GET_DATA_BYTE(lines, j); colvect[i] = (l_float32)sum / (l_float32)w; } return 0; } /* We need a histogram; binwidth ~ 256 / nbins */ histo = (l_int32 *)CALLOC(nbins, sizeof(l_int32)); gray2bin = (l_int32 *)CALLOC(256, sizeof(l_int32)); bin2gray = (l_int32 *)CALLOC(nbins, sizeof(l_int32)); for (i = 0; i < 256; i++) /* gray value --> histo bin */ gray2bin[i] = (i * nbins) / 256; for (i = 0; i < nbins; i++) /* histo bin --> gray value */ bin2gray[i] = (i * 256 + 128) / nbins; for (i = 0; i < h; i++) { lines = datas + i * wpls; for (k = 0; k < nbins; k++) histo[k] = 0; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); histo[gray2bin[val]]++; } if (type == L_MEDIAN_VAL) { sum = 0; target = (w + 1) / 2; for (k = 0; k < nbins; k++) { sum += histo[k]; if (sum >= target) { colvect[i] = bin2gray[k]; break; } } } else if (type == L_MODE_VAL) { max = 0; modeval = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (max < thresh) colvect[i] = 0; else colvect[i] = bin2gray[modeval]; } else { /* type == L_MODE_COUNT */ max = 0; modeval = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } colvect[i] = max; } } FREE(histo); FREE(gray2bin); FREE(bin2gray); return 0; } /*! * pixGetColumnStats() * * Input: pixs (8 bpp; not cmapped) * type (L_MEAN_ABSVAL, L_MEDIAN_VAL, L_MODE_VAL, L_MODE_COUNT) * nbins (of histogram for median and mode; ignored for mean) * thresh (on histogram for mode val; ignored for all other types) * rowvect (vector of results gathered down the columns of pixs) * Return: 0 if OK, 1 on error * * Notes: * (1) This computes a row vector of statistics using each * column of a Pix. The result is put in @rowvect. * (2) The @thresh parameter works with L_MODE_VAL only, and * sets a minimum occupancy of the mode bin. * If the occupancy of the mode bin is less than @thresh, the * mode value is returned as 0. To always return the actual * mode value, set @thresh = 0. * (3) What is the meaning of this @thresh parameter? * For each column, the total count in the histogram is h, the * image height. So @thresh, relative to h, gives a measure * of the ratio of the bin width to the width of the distribution. * The larger @thresh, the narrower the distribution must be * for the mode value to be returned (instead of returning 0). */ l_int32 pixGetColumnStats(PIX *pixs, l_int32 type, l_int32 nbins, l_int32 thresh, l_float32 *rowvect) { l_int32 i, j, k, w, h, val, wpls, sum, target, max, modeval; l_int32 *histo, *gray2bin, *bin2gray; l_uint32 *datas; PROCNAME("pixGetColumnStats"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (!rowvect) return ERROR_INT("rowvect not defined", procName, 1); if (type != L_MEAN_ABSVAL && type != L_MEDIAN_VAL && type != L_MODE_VAL && type != L_MODE_COUNT) return ERROR_INT("invalid type", procName, 1); if (type != L_MEAN_ABSVAL && (nbins < 1 || nbins > 256)) return ERROR_INT("invalid nbins", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); if (type == L_MEAN_ABSVAL) { for (j = 0; j < w; j++) { sum = 0; for (i = 0; i < h; i++) sum += GET_DATA_BYTE(datas + i * wpls, j); rowvect[j] = (l_float32)sum / (l_float32)h; } return 0; } /* We need a histogram; binwidth ~ 256 / nbins */ histo = (l_int32 *)CALLOC(nbins, sizeof(l_int32)); gray2bin = (l_int32 *)CALLOC(256, sizeof(l_int32)); bin2gray = (l_int32 *)CALLOC(nbins, sizeof(l_int32)); for (i = 0; i < 256; i++) /* gray value --> histo bin */ gray2bin[i] = (i * nbins) / 256; for (i = 0; i < nbins; i++) /* histo bin --> gray value */ bin2gray[i] = (i * 256 + 128) / nbins; for (j = 0; j < w; j++) { for (i = 0; i < h; i++) { val = GET_DATA_BYTE(datas + i * wpls, j); histo[gray2bin[val]]++; } if (type == L_MEDIAN_VAL) { sum = 0; target = (h + 1) / 2; for (k = 0; k < nbins; k++) { sum += histo[k]; if (sum >= target) { rowvect[j] = bin2gray[k]; break; } } } else if (type == L_MODE_VAL) { max = 0; modeval = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } if (max < thresh) rowvect[j] = 0; else rowvect[j] = bin2gray[modeval]; } else { /* type == L_MODE_COUNT */ max = 0; modeval = 0; for (k = 0; k < nbins; k++) { if (histo[k] > max) { max = histo[k]; modeval = k; } } rowvect[j] = max; } for (k = 0; k < nbins; k++) histo[k] = 0; } FREE(histo); FREE(gray2bin); FREE(bin2gray); return 0; } /*! * pixSetPixelColumn() * * Input: pix (8 bpp; not cmapped) * col (column index) * colvect (vector of floats) * Return: 0 if OK, 1 on error */ l_int32 pixSetPixelColumn(PIX *pix, l_int32 col, l_float32 *colvect) { l_int32 i, w, h, wpl; l_uint32 *data; PROCNAME("pixSetCPixelColumn"); if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix not defined or not 8 bpp", procName, 1); if (!colvect) return ERROR_INT("colvect not defined", procName, 1); pixGetDimensions(pix, &w, &h, NULL); if (col < 0 || col > w) return ERROR_INT("invalid col", procName, 1); data = pixGetData(pix); wpl = pixGetWpl(pix); for (i = 0; i < h; i++) SET_DATA_BYTE(data + i * wpl, col, (l_int32)colvect[i]); return 0; } /*-------------------------------------------------------------* * Foreground/background estimation * *-------------------------------------------------------------*/ /*! * pixThresholdForFgBg() * * Input: pixs (any depth; cmapped ok) * factor (subsampling factor; integer >= 1) * thresh (threshold for generating foreground mask) * &fgval ( average foreground value) * &bgval ( average background value) * Return: 0 if OK, 1 on error */ l_int32 pixThresholdForFgBg(PIX *pixs, l_int32 factor, l_int32 thresh, l_int32 *pfgval, l_int32 *pbgval) { l_float32 fval; PIX *pixg, *pixm; PROCNAME("pixThresholdForFgBg"); if (pfgval) *pfgval = 0; if (pbgval) *pbgval = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Generate a subsampled 8 bpp version and a mask over the fg */ pixg = pixConvertTo8BySampling(pixs, factor, 0); pixm = pixThresholdToBinary(pixg, thresh); if (pfgval) { pixGetAverageMasked(pixg, pixm, 0, 0, 1, L_MEAN_ABSVAL, &fval); *pfgval = (l_int32)(fval + 0.5); } if (pbgval) { pixInvert(pixm, pixm); pixGetAverageMasked(pixg, pixm, 0, 0, 1, L_MEAN_ABSVAL, &fval); *pbgval = (l_int32)(fval + 0.5); } pixDestroy(&pixg); pixDestroy(&pixm); return 0; } /*! * pixSplitDistributionFgBg() * * Input: pixs (any depth; cmapped ok) * scorefract (fraction of the max score, used to determine * the range over which the histogram min is searched) * factor (subsampling factor; integer >= 1) * &thresh ( best threshold for separating) * &fgval ( average foreground value) * &bgval ( average background value) * debugflag (1 for plotting of distribution and split point) * Return: 0 if OK, 1 on error * * Notes: * (1) See numaSplitDistribution() for details on the underlying * method of choosing a threshold. */ l_int32 pixSplitDistributionFgBg(PIX *pixs, l_float32 scorefract, l_int32 factor, l_int32 *pthresh, l_int32 *pfgval, l_int32 *pbgval, l_int32 debugflag) { char buf[256]; l_int32 thresh; l_float32 avefg, avebg, maxnum; GPLOT *gplot; NUMA *na, *nascore, *nax, *nay; PIX *pixg; PROCNAME("pixSplitDistributionFgBg"); if (pthresh) *pthresh = 0; if (pfgval) *pfgval = 0; if (pbgval) *pbgval = 0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Generate a subsampled 8 bpp version */ pixg = pixConvertTo8BySampling(pixs, factor, 0); /* Make the fg/bg estimates */ na = pixGetGrayHistogram(pixg, 1); if (debugflag) { numaSplitDistribution(na, scorefract, &thresh, &avefg, &avebg, NULL, NULL, &nascore); numaDestroy(&nascore); } else { numaSplitDistribution(na, scorefract, &thresh, &avefg, &avebg, NULL, NULL, NULL); } if (pthresh) *pthresh = thresh; if (pfgval) *pfgval = (l_int32)(avefg + 0.5); if (pbgval) *pbgval = (l_int32)(avebg + 0.5); if (debugflag) { gplot = gplotCreate("/tmp/histplot", GPLOT_PNG, "Histogram", "Grayscale value", "Number of pixels"); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, NULL); nax = numaMakeConstant(thresh, 2); numaGetMax(na, &maxnum, NULL); nay = numaMakeConstant(0, 2); numaReplaceNumber(nay, 1, (l_int32)(0.5 * maxnum)); snprintf(buf, sizeof(buf), "score fract = %3.1f", scorefract); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, buf); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nay); } pixDestroy(&pixg); numaDestroy(&na); return 0; } leptonica-1.70/src/recogdid.c0000644000175000017500000010726012265243025014227 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * recogdid.c * * Top-level identification * l_int32 recogDecode() * * Generate decoding arrays * l_int32 recogMakeDecodingArrays() * static l_int32 recogMakeDecodingArray() * * Dynamic programming for best path * l_int32 recogRunViterbi() * l_int32 recogRescoreDidResult() * static PIX *recogShowPath() * * Create/destroy temporary DID data * l_int32 recogCreateDid() * l_int32 recogDestroyDid() * * Various helpers * l_int32 recogDidExists() * L_RDID *recogGetDid() * static l_int32 recogGetWindowedArea() * l_int32 recogSetChannelParams() * static l_int32 recogTransferRchToDid() * * See recogbasic.c for examples of training a recognizer, which is * required before it can be used for document image decoding. * * Gary Kopec pioneered this hidden markov approach to "Document Image * Decoding" (DID) in the early 1990s. It is based on estimation * using a generative model of the image generation process, and * provides the most likely decoding of an image if the model is correct. * Given the model, it finds the maximum a posteriori (MAP) "message" * given the observed image. The model describes how to generate * an image from a message, and the MAP message is derived from the * observed image using Bayes' theorem. This approach can also be used * to build the model, using the iterative expectation/maximization * method from labelled but errorful data. * * In a little more detail: The model comprises three things: the ideal * printed character templates, the independent bit-flip noise model, and * the character setwidths. When a character is printed, the setwidth * is the distance in pixels that you move forward before being able * to print the next character. It is typically slightly less than the * width of the character template: if too small, an extra character can be * hallucinated; if too large, it will not be able to match the next * character template on the line. The model assumes that the probabilities * of bit flip depend only on the assignment of the pixel to background * or template foreground. The multilevel templates have different * bit flip probabilities for each level. Because a character image * is composed of many pixels, each of which can be independently flipped, * the actual probability of seeing any rendering is exceedingly small, * being composed of the product of the probabilities for each pixel. * The log likelihood is used both to avoid numeric underflow and, * more importantly, because it results in a summation of independent * pixel probabilities. That summation can be shown, in Kopec's * original paper, to consist of a sum of two terms: (a) the number of * fg pixels in the bit-and of the observed image with the ideal * template and (b) the number of fg pixels in the template. Each * has a coefficient that depends only on the bit-flip probabilities * for the fg and bg. A beautiful result, and computationally simple! * One nice feature of this approach is that the result of the decoding * is not very sensitive to the values used for the bit flip probabilities. * * The procedure for finding the best decoding (MAP) for a given image goes * under several names: Viterbi, dynamic programming, hidden markov model. * It is called a "hidden markov model" because the templates are assumed * to be printed serially and we don't know what they are -- the identity * of the templates must be inferred from the observed image. * The possible decodings form a dense trellis over the pixel positions, * where at each pixel position you have the possibility of having any * of the characters printed there (with some reference point) or having * a single pixel wide space inserted there. Thus, before the trellis * can be traversed, we must do the work of finding the log probability, * at each pixel location, that each of the templates was printed there. * Armed with those arrays of data, the dynamic programming procedure * moves from left to right, one pixel at a time, recursively finding * the path with the highest log probability that gets to that pixel * position (and noting which template was printed to arrive there). * After reaching the right side of the image, we can simply backtrack * along the path, jumping over each template that lies on the highest * scoring path. This best path thus only goes through a few of the * pixel positions. * * There are two refinements to the original Kopec paper. In the first, * one uses multiple, non-overlapping fg templates, each with its own * bit flip probability. This makes sense, because the probability * that a fg boundary pixel flips to bg is greater than that of a fg * pixel not on the boundary. And the flip probability of a fg boundary * pixel is smaller than that of a bg boundary pixel, which in turn * is greater than that of a bg pixel not on a boundary (the latter * is taken to be the true background). Then the simplest realistic * multiple template model has three templates that are not background. * * In the second refinement, a heuristic (strict upper bound) is used * iteratively in the Viterbi process to compute the log probabilities. * Using the heuristic, you find the best path, and then score all nodes * on that path with the actual probability, which is guaranteed to * be a smaller number. You run this iteratively, rescoring just the best * found path each time. After each rescoring, the path may change because * the local scores have been reduced. However, the process converges * rapidly, and when it doesn't change, it must be the best path because * it is properly scored (even if neighboring paths are heuristically * scored). The heuristic score is found column-wise by assuming * that all the fg pixels in the template are on fg pixels in the image -- * we just take the minimum of the number of pixels in the template * and image column. This can easily give a 10-fold reduction in * computation because the heuristic score can be computed much faster * than the exact score. * * For reference, the classic paper on the approach by Kopec is: * * "Document Image Decoding Using Markov Source Models", IEEE Trans. * PAMI, Vol 16, No. 6, June 1994, pp 602-617. * A refinement of the method for multilevel templates by Kopec is: * * "Multilevel Character Templates for Document Image Decoding", * Proc. SPIE 3027, Document Recognition IV, p. 168ff, 1997. * Further refinements for more efficient decoding are given in these * two papers, which are both stored on leptonica.org: * * "Document Image Decoding using Iterated Complete Path Search", Minka, * Bloomberg and Popat, Proc. SPIE Vol 4307, p. 250-258, Document * Recognition and Retrieval VIII, San Jose, CA 2001. * * "Document Image Decoding using Iterated Complete Path Search with * Subsampled Heuristic Scoring", Bloomberg, Minka and Popat, ICDAR 2001, * p. 344-349, Sept. 2001, Seattle. */ #include #include #include "allheaders.h" static l_int32 recogMakeDecodingArray(L_RECOG *recog, l_int32 index, l_int32 debug); static l_int32 recogRescoreDidResult(L_RECOG *recog, PIX **ppixdb); static PIX *recogShowPath(L_RECOG *recog, l_int32 select); static l_int32 recogGetWindowedArea(L_RECOG *recog, l_int32 index, l_int32 x, l_int32 *pdely, l_int32 *pwsum); static l_int32 recogTransferRchToDid(L_RECOG *recog, l_int32 x, l_int32 y); /* Parameters for modeling the decoding */ static const l_float32 SetwidthFraction = 0.95; static const l_int32 MaxYShift = 1; /* Channel parameters. alpha[0] is the probability that a bg pixel * is OFF. alpha[1] is the probability that level 1 fg is ON. * The actual values are not too critical, but they must be larger * than 0.5 and smaller than 1.0. For more accuracy in template * matching, use a 4-level template, where levels 2 and 3 are * boundary pixels in the fg and bg, respectively. */ static const l_float32 DefaultAlpha2[] = {0.95, 0.9}; static const l_float32 DefaultAlpha4[] = {0.95, 0.9, 0.75, 0.25}; /*------------------------------------------------------------------------* * Top-level identification * *------------------------------------------------------------------------*/ /*! * recogDecode() * * Input: recog (with LUT's pre-computed) * pixs (typically of multiple touching characters, 1 bpp) * nlevels (of templates; 2 for now) * &pixdb ( debug result; can be null) * Return: 0 if OK, 1 on error */ l_int32 recogDecode(L_RECOG *recog, PIX *pixs, l_int32 nlevels, PIX **ppixdb) { l_int32 debug; PIX *pixt; PIXA *pixa; PROCNAME("recogDecode"); if (ppixdb) *ppixdb = NULL; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!recog->train_done) return ERROR_INT("training not finished", procName, 1); if (nlevels != 2) return ERROR_INT("nlevels != 2 (for now)", procName, 1); pixa = (ppixdb) ? pixaCreate(2) : NULL; debug = (ppixdb) ? 1 : 0; if (recogMakeDecodingArrays(recog, pixs, debug)) return ERROR_INT("error making arrays", procName, 1); recogSetChannelParams(recog, nlevels); if (recogRunViterbi(recog, &pixt)) return ERROR_INT("error in viterbi", procName, 1); if (ppixdb) pixaAddPix(pixa, pixt, L_INSERT); if (recogRescoreDidResult(recog, &pixt)) return ERROR_INT("error in rescoring", procName, 1); if (ppixdb) pixaAddPix(pixa, pixt, L_INSERT); *ppixdb = pixaDisplayTiledInRows(pixa, 32, 2 * pixGetWidth(pixt) + 100, 1.0, 0, 30, 2); pixaDestroy(&pixa); return 0; } /*------------------------------------------------------------------------* * Generate decoding arrays * *------------------------------------------------------------------------*/ /*! * recogMakeDecodingArrays() * * Input: recog (with LUT's pre-computed) * pixs (typically of multiple touching characters, 1 bpp) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) Generates the bit-and sum arrays for each character template * along pixs. These are used in the dynamic programming step. * (2) Previous arrays are destroyed and the new arrays are allocated. * (3) The values are saved in the scoring arrays at the left edge * of the template. They are used in the viterbi process * at the setwidth position (which is near the RHS of the template * as it is positioned on pixs) in the generated trellis. */ l_int32 recogMakeDecodingArrays(L_RECOG *recog, PIX *pixs, l_int32 debug) { l_int32 i; PIX *pix1; L_RDID *did; PROCNAME("recogMakeDecodingArrays"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!recog->train_done) return ERROR_INT("training not finished", procName, 1); /* Binarize and crop to foreground if necessary */ if ((pix1 = recogProcessToIdentify(recog, pixs, 0)) == NULL) return ERROR_INT("pix1 not made", procName, 1); /* Remove any existing RecogDID and set up a new one */ recogDestroyDid(recog); if (recogCreateDid(recog, pix1)) { pixDestroy(&pix1); return ERROR_INT("decoder not made", procName, 1); } /* Compute vertical sum and first moment arrays */ did = recogGetDid(recog); /* owned by recog */ did->nasum = pixCountPixelsByColumn(pix1); did->namoment = pixGetMomentByColumn(pix1, 1); /* Generate the arrays */ for (i = 0; i < recog->did->narray; i++) recogMakeDecodingArray(recog, i, debug); pixDestroy(&pix1); return 0; } /*! * recogMakeDecodingArray() * * Input: recog * index (of averaged template) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) Generates the bit-and sum array for a character template along pixs. * (2) The values are saved in the scoring arrays at the left edge * of the template as it is positioned on pixs. */ static l_int32 recogMakeDecodingArray(L_RECOG *recog, l_int32 index, l_int32 debug) { l_int32 i, j, w1, h1, w2, h2, nx, ycent2, count, maxcount, maxdely; l_int32 sum, moment, dely, shifty; l_int32 *counta, *delya, *ycent1, *arraysum, *arraymoment, *sumtab; NUMA *nasum, *namoment; PIX *pix1, *pix2, *pix3; L_RDID *did; PROCNAME("recogMakeDecodingArray"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", procName, 1); if (index < 0 || index >= did->narray) return ERROR_INT("invalid index", procName, 1); /* Check that pix1 is large enough for this template. */ pix1 = did->pixs; /* owned by did; do not destroy */ pixGetDimensions(pix1, &w1, &h1, NULL); pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); pixGetDimensions(pix2, &w2, &h2, NULL); if (w1 < w2) { L_INFO("w1 = %d < w2 = %d for index %d\n", procName, w1, w2, index); pixDestroy(&pix2); return 0; } nasum = did->nasum; namoment = did->namoment; ptaGetIPt(recog->pta_u, index, NULL, &ycent2); sumtab = recog->sumtab; counta = did->counta[index]; delya = did->delya[index]; /* Set up the array for ycent1. This gives the y-centroid location * for a window of width w2, starting at location i. */ nx = w1 - w2 + 1; /* number of positions w2 can be placed in w1 */ ycent1 = (l_int32 *)CALLOC(nx, sizeof(l_int32)); arraysum = numaGetIArray(nasum); arraymoment = numaGetIArray(namoment); for (i = 0, sum = 0, moment = 0; i < w2; i++) { sum += arraysum[i]; moment += arraymoment[i]; } for (i = 0; i < nx - 1; i++) { ycent1[i] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; sum += arraysum[w2 + i] - arraysum[i]; moment += arraymoment[w2 + i] - arraymoment[i]; } ycent1[nx - 1] = (sum == 0) ? ycent2 : (l_float32)moment / (l_float32)sum; /* Compute the bit-and sum between the template pix2 and pix1, at * locations where the left side of pix2 goes from 0 to nx - 1 * in pix1. Do this around the vertical alignment of the pix2 * centroid and the windowed pix1 centroid. * (1) Start with pix3 cleared and approximately equal in size to pix1. * (2) Blit the y-shifted pix2 onto pix3. Then all ON pixels * are within the intersection of pix1 and the shifted pix2. * (3) AND pix1 with pix3. */ pix3 = pixCreate(w2, h1, 1); for (i = 0; i < nx; i++) { shifty = (l_int32)(ycent1[i] - ycent2 + 0.5); maxcount = 0; for (j = -MaxYShift; j <= MaxYShift; j++) { pixClearAll(pix3); dely = shifty + j; /* amount pix2 is shifted relative to pix1 */ pixRasterop(pix3, 0, dely, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pix3, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, i, 0); pixCountPixels(pix3, &count, sumtab); if (count > maxcount) { maxcount = count; maxdely = dely; } } counta[i] = maxcount; delya[i] = maxdely; } did->fullarrays = TRUE; pixDestroy(&pix2); pixDestroy(&pix3); FREE(ycent1); FREE(arraysum); FREE(arraymoment); return 0; } /*------------------------------------------------------------------------* * Dynamic programming for best path *------------------------------------------------------------------------*/ /*! * recogRunViterbi() * * Input: recog (with LUT's pre-computed) * &pixdb ( debug result; can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) This is recursive, in that * (a) we compute the score successively at all pixel positions x, * (b) to compute the score at x in the trellis, for each * template we look backwards to (x - setwidth) to get the * score if that template were to be printed with its * setwidth location at x. We save at x the template and * score that maximizes the sum of the score at (x - setwidth) * and the log-likelihood for the template to be printed with * its LHS there. */ l_int32 recogRunViterbi(L_RECOG *recog, PIX **ppixdb) { l_int32 i, w1, x, narray, minsetw, first, templ, xloc, dely, counts, area1; l_int32 besttempl, spacetempl; l_int32 *setw, *didtempl; l_int32 *area2; /* must be freed */ l_float32 prevscore, matchscore, maxscore, correl; l_float32 *didscore; PIX *pixt; L_RDID *did; PROCNAME("recogRunViterbi"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", procName, 1); if (did->fullarrays == 0) return ERROR_INT("did full arrays not made", procName, 1); /* The score array is initialized to 0.0. As we proceed to * the left, the log likelihood for the partial paths goes * negative, and we prune for the max (least negative) path. * No matches will be computed until we reach x = min(setwidth); * until then first == TRUE after looping over templates. */ w1 = did->size; narray = did->narray; spacetempl = narray; setw = did->setwidth; minsetw = 100000; for (i = 0; i < narray; i++) { if (setw[i] < minsetw) minsetw = setw[i]; } if (minsetw <= 0) { L_ERROR("minsetw <= 0; shouldn't happen\n", procName); minsetw = 1; } didscore = did->trellisscore; didtempl = did->trellistempl; area2 = numaGetIArray(recog->nasum_u); for (x = minsetw; x < w1; x++) { /* will always get a score */ first = TRUE; for (i = 0; i < narray; i++) { if (x - setw[i] < 0) continue; matchscore = didscore[x - setw[i]] + did->gamma[1] * did->counta[i][x - setw[i]] + did->beta[1] * area2[i]; if (first) { maxscore = matchscore; besttempl = i; first = FALSE; } else { if (matchscore > maxscore) { maxscore = matchscore; besttempl = i; } } } /* We can also put down a single pixel space, with no cost * because all pixels are bg. */ prevscore = didscore[x - 1]; if (prevscore > maxscore) { /* 1 pixel space is best */ maxscore = prevscore; besttempl = spacetempl; } didscore[x] = maxscore; didtempl[x] = besttempl; } /* Backtrack to get the best path. * Skip over (i.e., ignore) all single pixel spaces. */ for (x = w1 - 1; x >= 0; x--) { if (didtempl[x] != spacetempl) break; } while (x > 0) { if (didtempl[x] == spacetempl) { /* skip over spaces */ x--; continue; } templ = didtempl[x]; xloc = x - setw[templ]; if (xloc < 0) break; counts = did->counta[templ][xloc]; /* bit-and counts */ recogGetWindowedArea(recog, templ, xloc, &dely, &area1); correl = (counts * counts) / (l_float32)(area2[templ] * area1); pixt = pixaGetPix(recog->pixa_u, templ, L_CLONE); numaAddNumber(did->natempl, templ); numaAddNumber(did->naxloc, xloc); numaAddNumber(did->nadely, dely); numaAddNumber(did->nawidth, pixGetWidth(pixt)); numaAddNumber(did->nascore, correl); pixDestroy(&pixt); x = xloc; } if (ppixdb) { numaWriteStream(stderr, did->natempl); numaWriteStream(stderr, did->naxloc); numaWriteStream(stderr, did->nadely); numaWriteStream(stderr, did->nawidth); numaWriteStream(stderr, did->nascore); *ppixdb = recogShowPath(recog, 0); } FREE(area2); return 0; } /*! * recogRescoreDidResult() * * Input: recog (with LUT's pre-computed) * &pixdb ( debug result; can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) This does correlation matching with all templates using the * viterbi path segmentation. */ static l_int32 recogRescoreDidResult(L_RECOG *recog, PIX **ppixdb) { l_int32 i, n, w2, h1, templ, x, xloc, dely, index; char *text; l_float32 score; BOX *box1; PIX *pixs, *pix1; L_RDID *did; PROCNAME("recogRescoreDidResult"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", procName, 1); if (did->fullarrays == 0) return ERROR_INT("did full arrays not made", procName, 1); if ((n = numaGetCount(did->naxloc)) == 0) return ERROR_INT("no elements in path", procName, 1); pixs = did->pixs; h1 = pixGetHeight(pixs); for (i = 0; i < n; i++) { numaGetIValue(did->natempl, i, &templ); numaGetIValue(did->naxloc, i, &xloc); numaGetIValue(did->nadely, i, &dely); pixaGetPixDimensions(recog->pixa_u, templ, &w2, NULL, NULL); /* TODO: try to fix xloc - 4, etc. */ x = L_MAX(xloc, 0); box1 = boxCreate(x, dely, w2, h1); pix1 = pixClipRectangle(pixs, box1, NULL); recogIdentifyPix(recog, pix1, NULL); recogTransferRchToDid(recog, x, dely); if (ppixdb) { rchExtract(recog->rch, &index, &score, &text, NULL, NULL, NULL, NULL); fprintf(stderr, "text = %s, index = %d, score = %5.3f\n", text, index, score); } pixDestroy(&pix1); boxDestroy(&box1); FREE(text); } /* numaWriteStream(stderr, recog->did->nadely_r); */ if (ppixdb) *ppixdb = recogShowPath(recog, 1); return 0; } /*! * recogShowPath() * * Input: recog (with LUT's pre-computed) * select (0 for Viterbi; 1 for rescored) * Return: pix (debug output), or null on error) */ static PIX * recogShowPath(L_RECOG *recog, l_int32 select) { char textstr[16]; l_int32 i, n, index, xloc, dely; l_float32 score; L_BMF *bmf; NUMA *natempl_s, *nascore_s, *naxloc_s, *nadely_s; PIX *pixs, *pix0, *pix1, *pix2, *pix3, *pix4, *pix5; L_RDID *did; PROCNAME("recogShowPath"); if (!recog) return (PIX *)ERROR_PTR("recog not defined", procName, NULL); if ((did = recogGetDid(recog)) == NULL) return (PIX *)ERROR_PTR("did not defined", procName, NULL); pixs = pixScale(did->pixs, 4.0, 4.0); pix0 = pixAddBorderGeneral(pixs, 0, 0, 0, 40, 0); pix1 = pixConvertTo32(pix0); bmf = bmfCreate("./fonts", 8); if (select == 0) { /* Viterbi */ natempl_s = did->natempl; nascore_s = did->nascore; naxloc_s = did->naxloc; nadely_s = did->nadely; } else { /* rescored */ natempl_s = did->natempl_r; nascore_s = did->nascore_r; naxloc_s = did->naxloc_r; nadely_s = did->nadely_r; } n = numaGetCount(natempl_s); for (i = 0; i < n; i++) { numaGetIValue(natempl_s, i, &index); pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); pix3 = pixScale(pix2, 4.0, 4.0); pix4 = pixErodeBrick(NULL, pix3, 5, 5); pixXor(pix4, pix4, pix3); numaGetFValue(nascore_s, i, &score); snprintf(textstr, sizeof(textstr), "%5.3f", score); pix5 = pixAddSingleTextline(pix4, bmf, textstr, 1, L_ADD_BELOW); numaGetIValue(naxloc_s, i, &xloc); numaGetIValue(nadely_s, i, &dely); pixPaintThroughMask(pix1, pix5, 4 * xloc, 4 * dely, 0xff000000); pixDestroy(&pix2); pixDestroy(&pix3); pixDestroy(&pix4); pixDestroy(&pix5); } pixDestroy(&pixs); pixDestroy(&pix0); bmfDestroy(&bmf); return pix1; } /*------------------------------------------------------------------------* * Create/destroy temporary DID data * *------------------------------------------------------------------------*/ /*! * recogCreateDid() * * Input: recog * pixs (of 1 bpp image to match) * Return: 0 if OK, 1 on error */ l_int32 recogCreateDid(L_RECOG *recog, PIX *pixs) { l_int32 i; PIX *pixt; L_RDID *did; PROCNAME("recogCreateDid"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); recogDestroyDid(recog); did = (L_RDID *)CALLOC(1, sizeof(L_RDID)); recog->did = did; did->pixs = pixClone(pixs); did->narray = recog->setsize; did->size = pixGetWidth(pixs); did->natempl = numaCreate(5); did->naxloc = numaCreate(5); did->nadely = numaCreate(5); did->nawidth = numaCreate(5); did->nascore = numaCreate(5); did->natempl_r = numaCreate(5); did->naxloc_r = numaCreate(5); did->nadely_r = numaCreate(5); did->nawidth_r = numaCreate(5); did->nascore_r = numaCreate(5); /* Make the arrays */ did->setwidth = (l_int32 *)CALLOC(did->narray, sizeof(l_int32)); did->counta = (l_int32 **)CALLOC(did->narray, sizeof(l_int32 *)); did->delya = (l_int32 **)CALLOC(did->narray, sizeof(l_int32 *)); did->beta = (l_float32 *)CALLOC(5, sizeof(l_float32)); did->gamma = (l_float32 *)CALLOC(5, sizeof(l_float32)); did->trellisscore = (l_float32 *)CALLOC(did->size, sizeof(l_float32)); did->trellistempl = (l_int32 *)CALLOC(did->size, sizeof(l_int32)); for (i = 0; i < did->narray; i++) { did->counta[i] = (l_int32 *)CALLOC(did->size, sizeof(l_int32)); did->delya[i] = (l_int32 *)CALLOC(did->size, sizeof(l_int32)); } /* Populate the setwidth array */ for (i = 0; i < did->narray; i++) { pixt = pixaGetPix(recog->pixa_u, i, L_CLONE); did->setwidth[i] = (l_int32)(SetwidthFraction * pixGetWidth(pixt)); pixDestroy(&pixt); } return 0; } /*! * recogDestroyDid() * * Input: recog * Return: 0 if OK, 1 on error * * Notes: * (1) As the signature indicates, this is owned by the recog, and can * only be destroyed using this function. */ l_int32 recogDestroyDid(L_RECOG *recog) { l_int32 i; L_RDID *did; PROCNAME("recogDestroyDid"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((did = recog->did) == NULL) return 0; if (!did->counta || !did->delya) return ERROR_INT("ptr array is null; shouldn't happen!", procName, 1); for (i = 0; i < did->narray; i++) { FREE(did->counta[i]); FREE(did->delya[i]); } FREE(did->setwidth); FREE(did->counta); FREE(did->delya); FREE(did->beta); FREE(did->gamma); FREE(did->trellisscore); FREE(did->trellistempl); pixDestroy(&did->pixs); numaDestroy(&did->nasum); numaDestroy(&did->namoment); numaDestroy(&did->natempl); numaDestroy(&did->naxloc); numaDestroy(&did->nadely); numaDestroy(&did->nawidth); numaDestroy(&did->nascore); numaDestroy(&did->natempl_r); numaDestroy(&did->naxloc_r); numaDestroy(&did->nadely_r); numaDestroy(&did->nawidth_r); numaDestroy(&did->nascore_r); FREE(did); recog->did = NULL; return 0; } /*------------------------------------------------------------------------* * Various helpers * *------------------------------------------------------------------------*/ /*! * recogDidExists() * * Input: recog * Return: 1 if recog->did exists; 0 if not or on error. */ l_int32 recogDidExists(L_RECOG *recog) { PROCNAME("recogDidExists"); if (!recog) return ERROR_INT("recog not defined", procName, 0); return (recog->did) ? 1 : 0; } /*! * recogGetDid() * * Input: recog * Return: did (still owned by the recog), or null on error * * Notes: * (1) This also makes sure the arrays are defined. */ L_RDID * recogGetDid(L_RECOG *recog) { l_int32 i; L_RDID *did; PROCNAME("recogGetDid"); if (!recog) return (L_RDID *)ERROR_PTR("recog not defined", procName, NULL); if ((did = recog->did) == NULL) return (L_RDID *)ERROR_PTR("did not defined", procName, NULL); if (!did->counta || !did->delya) return (L_RDID *)ERROR_PTR("did array ptrs not defined", procName, NULL); for (i = 0; i < did->narray; i++) { if (!did->counta[i] || !did->delya[i]) return (L_RDID *)ERROR_PTR("did arrays not defined", procName, NULL); } return did; } /*! * recogGetWindowedArea() * * Input: recog * index (of template) * x (pixel position of left hand edge of template) * &dely ( y shift of template relative to pix1) * &wsum ( number of fg pixels in window of pixs) * Return: 0 if OK, 1 on error * * Notes: * (1) This is called after the best path has been found through * the trellis, in order to produce a correlation that can be used * to evaluate the confidence we have in the identification. * The correlation is |1 & 2|^2 / (|1| * |2|). * |1 & 2| is given by the count array, |2| is found from * nasum_u[], and |1| is wsum returned from this function. */ static l_int32 recogGetWindowedArea(L_RECOG *recog, l_int32 index, l_int32 x, l_int32 *pdely, l_int32 *pwsum) { l_int32 w1, h1, w2, h2; PIX *pix1, *pix2, *pixt; L_RDID *did; PROCNAME("recogGetWindowedArea"); if (!pwsum) return ERROR_INT("&wsum not defined", procName, 1); *pwsum = 0; if (!pdely) return ERROR_INT("&dely not defined", procName, 1); *pdely = 0; if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", procName, 1); if (index < 0 || index >= did->narray) return ERROR_INT("invalid index", procName, 1); pix1 = did->pixs; pixGetDimensions(pix1, &w1, &h1, NULL); if (x >= w1) return ERROR_INT("invalid x position", procName, 1); pix2 = pixaGetPix(recog->pixa_u, index, L_CLONE); pixGetDimensions(pix2, &w2, &h2, NULL); if (w1 < w2) { L_INFO("template %d too small\n", procName, index); pixDestroy(&pix2); return 0; } *pdely = did->delya[index][x]; pixt = pixCreate(w2, h1, 1); pixRasterop(pixt, 0, *pdely, w2, h2, PIX_SRC, pix2, 0, 0); pixRasterop(pixt, 0, 0, w2, h1, PIX_SRC & PIX_DST, pix1, x, 0); pixCountPixels(pixt, pwsum, recog->sumtab); pixDestroy(&pix2); pixDestroy(&pixt); return 0; } /*! * recogSetChannelParams() * * Input: recog * nlevels * Return: 0 if OK, 1 on error * * Notes: * (1) This converts the independent bit-flip probabilities in the * "channel" into log-likelihood coefficients on image sums. * These coefficients are only defined for the non-background * template levels. Thus for nlevels = 2 (one fg, one bg), * only beta[1] and gamma[1] are used. For nlevels = 4 (three * fg templates), we use beta[1-3] and gamma[1-3]. */ l_int32 recogSetChannelParams(L_RECOG *recog, l_int32 nlevels) { l_int32 i; const l_float32 *da; L_RDID *did; PROCNAME("recogSetChannelParams"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", procName, 1); if (nlevels == 2) da = DefaultAlpha2; else if (nlevels == 4) da = DefaultAlpha4; else return ERROR_INT("nlevels not 2 or 4", procName, 1); for (i = 1; i < nlevels; i++) { did->beta[i] = log((1.0 - da[i]) / da[0]); did->gamma[i] = log(da[0] * da[i] / ((1.0 - da[0]) * (1.0 - da[i]))); fprintf(stderr, "beta[%d] = %7.3f, gamma[%d] = %7.3f\n", i, did->beta[i], i, did->gamma[i]); } return 0; } /*! * recogTransferRchToDid() * * Input: recog (with rch and did defined) * x (left edge of extracted region, relative to decoded line) * y (top edge of extracted region, relative to input image) * Return: 0 if OK, 1 on error * * Notes: * (1) This is used to transfer the results for a single character match * to the rescored did arrays. */ static l_int32 recogTransferRchToDid(L_RECOG *recog, l_int32 x, l_int32 y) { L_RDID *did; L_RCH *rch; PROCNAME("recogTransferRchToDid"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((did = recogGetDid(recog)) == NULL) return ERROR_INT("did not defined", procName, 1); if ((rch = recog->rch) == NULL) return ERROR_INT("rch not defined", procName, 1); numaAddNumber(did->natempl_r, rch->index); numaAddNumber(did->naxloc_r, rch->xloc + x); numaAddNumber(did->nadely_r, rch->yloc + y); numaAddNumber(did->nawidth_r, rch->width); numaAddNumber(did->nascore_r, rch->score); return 0; } leptonica-1.70/src/graymorph.c0000644000175000017500000010416612244223112014451 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * graymorph.c * * Top-level binary morphological operations (van Herk / Gil-Werman) * PIX *pixErodeGray() * PIX *pixDilateGray() * PIX *pixOpenGray() * PIX *pixCloseGray() * * Special operations for 1x3, 3x1 and 3x3 Sels (direct) * PIX *pixErodeGray3() * PIX *pixDilateGray3() * PIX *pixOpenGray3() * PIX *pixCloseGray3() * * * Method: Algorithm by van Herk and Gil and Werman, 1992 * * Measured speed of the vH/G-W implementation is about 1 output * pixel per 120 PIII clock cycles, for a horizontal or vertical * erosion or dilation. The computation time doubles for opening * or closing, or for a square SE, as expected, and is independent * of the size of the SE. * * A faster implementation can be made directly for brick Sels * of maximum size 3. We unroll the computation for sets of 8 bytes. * It needs to be called explicitly; the general functions do not * default for the size 3 brick Sels. */ #include "allheaders.h" static PIX *pixErodeGray3h(PIX *pixs); static PIX *pixErodeGray3v(PIX *pixs); static PIX *pixDilateGray3h(PIX *pixs); static PIX *pixDilateGray3v(PIX *pixs); /*-----------------------------------------------------------------* * Top-level gray morphological operations * *-----------------------------------------------------------------*/ /*! * pixErodeGray() * * Input: pixs * hsize (of Sel; must be odd; origin implicitly in center) * vsize (ditto) * Return: pixd * * Notes: * (1) Sel is a brick with all elements being hits * (2) If hsize = vsize = 1, just returns a copy. */ PIX * pixErodeGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer, *minarray; l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; PROCNAME("pixErodeGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", procName); vsize++; } if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } if ((pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 255)) == NULL) return (PIX *)ERROR_PTR("pixb not made", procName, NULL); if ((pixt = pixCreateTemplate(pixb)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); if ((buffer = (l_uint8 *)CALLOC(L_MAX(w, h), sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); maxsize = L_MAX(hsize, vsize); if ((minarray = (l_uint8 *)CALLOC(2 * maxsize, sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("minarray not made", procName, NULL); if (vsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, minarray); } else if (hsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, minarray); } else { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, minarray); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, minarray); pixDestroy(&pixt); pixt = pixClone(pixb); } if ((pixd = pixRemoveBorderGeneral(pixt, leftpix, rightpix, toppix, bottompix)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); FREE(buffer); FREE(minarray); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*! * pixDilateGray() * * Input: pixs * hsize (of Sel; must be odd; origin implicitly in center) * vsize (ditto) * Return: pixd * * Notes: * (1) Sel is a brick with all elements being hits * (2) If hsize = vsize = 1, just returns a copy. */ PIX * pixDilateGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer, *maxarray; l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; PROCNAME("pixDilateGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", procName); vsize++; } if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } if ((pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 0)) == NULL) return (PIX *)ERROR_PTR("pixb not made", procName, NULL); if ((pixt = pixCreateTemplate(pixb)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); if ((buffer = (l_uint8 *)CALLOC(L_MAX(w, h), sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); maxsize = L_MAX(hsize, vsize); if ((maxarray = (l_uint8 *)CALLOC(2 * maxsize, sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); if (vsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, maxarray); } else if (hsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, maxarray); } else { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, maxarray); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, maxarray); pixDestroy(&pixt); pixt = pixClone(pixb); } if ((pixd = pixRemoveBorderGeneral(pixt, leftpix, rightpix, toppix, bottompix)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); FREE(buffer); FREE(maxarray); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*! * pixOpenGray() * * Input: pixs * hsize (of Sel; must be odd; origin implicitly in center) * vsize (ditto) * Return: pixd * * Notes: * (1) Sel is a brick with all elements being hits * (2) If hsize = vsize = 1, just returns a copy. */ PIX * pixOpenGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer; l_uint8 *array; /* used to find either min or max in interval */ l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; PROCNAME("pixOpenGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", procName); vsize++; } if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } if ((pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 255)) == NULL) return (PIX *)ERROR_PTR("pixb not made", procName, NULL); if ((pixt = pixCreateTemplate(pixb)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); if ((buffer = (l_uint8 *)CALLOC(L_MAX(w, h), sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); maxsize = L_MAX(hsize, vsize); if ((array = (l_uint8 *)CALLOC(2 * maxsize, sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("array not made", procName, NULL); if (vsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, hsize, L_HORIZ, buffer, array); } else if (hsize == 1) { erodeGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } else { erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixb, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } if ((pixd = pixRemoveBorderGeneral(pixb, leftpix, rightpix, toppix, bottompix)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); FREE(buffer); FREE(array); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*! * pixCloseGray() * * Input: pixs * hsize (of Sel; must be odd; origin implicitly in center) * vsize (ditto) * Return: pixd * * Notes: * (1) Sel is a brick with all elements being hits * (2) If hsize = vsize = 1, just returns a copy. */ PIX * pixCloseGray(PIX *pixs, l_int32 hsize, l_int32 vsize) { l_uint8 *buffer; l_uint8 *array; /* used to find either min or max in interval */ l_int32 w, h, wplb, wplt; l_int32 leftpix, rightpix, toppix, bottompix, maxsize; l_uint32 *datab, *datat; PIX *pixb, *pixt, *pixd; PROCNAME("pixCloseGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", procName); vsize++; } if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); if (vsize == 1) { /* horizontal sel */ leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = 0; bottompix = 0; } else if (hsize == 1) { /* vertical sel */ leftpix = 0; rightpix = 0; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } else { leftpix = (hsize + 1) / 2; rightpix = (3 * hsize + 1) / 2; toppix = (vsize + 1) / 2; bottompix = (3 * vsize + 1) / 2; } if ((pixb = pixAddBorderGeneral(pixs, leftpix, rightpix, toppix, bottompix, 0)) == NULL) return (PIX *)ERROR_PTR("pixb not made", procName, NULL); if ((pixt = pixCreateTemplate(pixb)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixGetDimensions(pixt, &w, &h, NULL); datab = pixGetData(pixb); datat = pixGetData(pixt); wplb = pixGetWpl(pixb); wplt = pixGetWpl(pixt); if ((buffer = (l_uint8 *)CALLOC(L_MAX(w, h), sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("buffer not made", procName, NULL); maxsize = L_MAX(hsize, vsize); if ((array = (l_uint8 *)CALLOC(2 * maxsize, sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("array not made", procName, NULL); if (vsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, hsize, L_HORIZ, buffer, array); } else if (hsize == 1) { dilateGrayLow(datat, w, h, wplt, datab, wplb, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } else { dilateGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_CLR); dilateGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); pixSetOrClearBorder(pixb, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datat, w, h, wplt, datab, wplb, hsize, L_HORIZ, buffer, array); pixSetOrClearBorder(pixt, leftpix, rightpix, toppix, bottompix, PIX_SET); erodeGrayLow(datab, w, h, wplb, datat, wplt, vsize, L_VERT, buffer, array); } if ((pixd = pixRemoveBorderGeneral(pixb, leftpix, rightpix, toppix, bottompix)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); FREE(buffer); FREE(array); pixDestroy(&pixb); pixDestroy(&pixt); return pixd; } /*-----------------------------------------------------------------* * Special operations for 1x3, 3x1 and 3x3 Sels * *-----------------------------------------------------------------*/ /*! * pixErodeGray3() * * Input: pixs (8 bpp, not cmapped) * hsize (1 or 3) * vsize (1 or 3) * Return: pixd, or null on error * * Notes: * (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits) * (2) If hsize = vsize = 1, just returns a copy. * (3) It would be nice not to add a border, but it is required * if we want the same results as from the general case. * We add 4 bytes on the left to speed up the copying, and * 8 bytes at the right and bottom to allow unrolling of * the computation of 8 pixels. */ PIX * pixErodeGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; PROCNAME("pixErodeGray3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 255); if (vsize == 1) pixbd = pixErodeGray3h(pixb); else if (hsize == 1) pixbd = pixErodeGray3v(pixb); else { /* vize == hsize == 3 */ pixt = pixErodeGray3h(pixb); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } /*! * pixErodeGray3h() * * Input: pixs (8 bpp, not cmapped) * Return: pixd, or null on error * * Notes: * (1) Special case for horizontal 3x1 brick Sel; * also used as the first step for the 3x3 brick Sel. */ static PIX * pixErodeGray3h(PIX *pixs) { l_uint32 *datas, *datad, *lines, *lined; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, minval; PIX *pixd; PROCNAME("pixErodeGray3h"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); pixd = pixCreateTemplateNoInit(pixs); pixSetBorderVal(pixd, 4, 8, 2, 8, 0); /* only to silence valgrind */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpl; lined = datad + i * wpl; for (j = 1; j < w - 8; j += 8) { val0 = GET_DATA_BYTE(lines, j - 1); val1 = GET_DATA_BYTE(lines, j); val2 = GET_DATA_BYTE(lines, j + 1); val3 = GET_DATA_BYTE(lines, j + 2); val4 = GET_DATA_BYTE(lines, j + 3); val5 = GET_DATA_BYTE(lines, j + 4); val6 = GET_DATA_BYTE(lines, j + 5); val7 = GET_DATA_BYTE(lines, j + 6); val8 = GET_DATA_BYTE(lines, j + 7); val9 = GET_DATA_BYTE(lines, j + 8); minval = L_MIN(val1, val2); SET_DATA_BYTE(lined, j, L_MIN(val0, minval)); SET_DATA_BYTE(lined, j + 1, L_MIN(minval, val3)); minval = L_MIN(val3, val4); SET_DATA_BYTE(lined, j + 2, L_MIN(val2, minval)); SET_DATA_BYTE(lined, j + 3, L_MIN(minval, val5)); minval = L_MIN(val5, val6); SET_DATA_BYTE(lined, j + 4, L_MIN(val4, minval)); SET_DATA_BYTE(lined, j + 5, L_MIN(minval, val7)); minval = L_MIN(val7, val8); SET_DATA_BYTE(lined, j + 6, L_MIN(val6, minval)); SET_DATA_BYTE(lined, j + 7, L_MIN(minval, val9)); } } return pixd; } /*! * pixErodeGray3v() * * Input: pixs (8 bpp, not cmapped) * Return: pixd, or null on error * * Notes: * (1) Special case for vertical 1x3 brick Sel; * also used as the second step for the 3x3 brick Sel. * (2) Surprisingly, this is faster than setting up the * lineptrs array and accessing into it; e.g., * val4 = GET_DATA_BYTE(lines8[i + 3], j); */ static PIX * pixErodeGray3v(PIX *pixs) { l_uint32 *datas, *datad, *linesi, *linedi; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, minval; PIX *pixd; PROCNAME("pixErodeGray3v"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); pixd = pixCreateTemplateNoInit(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (j = 0; j < w; j++) { for (i = 1; i < h - 8; i += 8) { linesi = datas + i * wpl; linedi = datad + i * wpl; val0 = GET_DATA_BYTE(linesi - wpl, j); val1 = GET_DATA_BYTE(linesi, j); val2 = GET_DATA_BYTE(linesi + wpl, j); val3 = GET_DATA_BYTE(linesi + 2 * wpl, j); val4 = GET_DATA_BYTE(linesi + 3 * wpl, j); val5 = GET_DATA_BYTE(linesi + 4 * wpl, j); val6 = GET_DATA_BYTE(linesi + 5 * wpl, j); val7 = GET_DATA_BYTE(linesi + 6 * wpl, j); val8 = GET_DATA_BYTE(linesi + 7 * wpl, j); val9 = GET_DATA_BYTE(linesi + 8 * wpl, j); minval = L_MIN(val1, val2); SET_DATA_BYTE(linedi, j, L_MIN(val0, minval)); SET_DATA_BYTE(linedi + wpl, j, L_MIN(minval, val3)); minval = L_MIN(val3, val4); SET_DATA_BYTE(linedi + 2 * wpl, j, L_MIN(val2, minval)); SET_DATA_BYTE(linedi + 3 * wpl, j, L_MIN(minval, val5)); minval = L_MIN(val5, val6); SET_DATA_BYTE(linedi + 4 * wpl, j, L_MIN(val4, minval)); SET_DATA_BYTE(linedi + 5 * wpl, j, L_MIN(minval, val7)); minval = L_MIN(val7, val8); SET_DATA_BYTE(linedi + 6 * wpl, j, L_MIN(val6, minval)); SET_DATA_BYTE(linedi + 7 * wpl, j, L_MIN(minval, val9)); } } return pixd; } /*! * pixDilateGray3() * * Input: pixs (8 bpp, not cmapped) * hsize (1 or 3) * vsize (1 or 3) * Return: pixd, or null on error * * Notes: * (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits) * (2) If hsize = vsize = 1, just returns a copy. */ PIX * pixDilateGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; PROCNAME("pixDilateGray3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 0); if (vsize == 1) pixbd = pixDilateGray3h(pixb); else if (hsize == 1) pixbd = pixDilateGray3v(pixb); else { /* vize == hsize == 3 */ pixt = pixDilateGray3h(pixb); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } /*! * pixDilateGray3h() * * Input: pixs (8 bpp, not cmapped) * Return: pixd, or null on error * * Notes: * (1) Special case for horizontal 3x1 brick Sel; * also used as the first step for the 3x3 brick Sel. */ static PIX * pixDilateGray3h(PIX *pixs) { l_uint32 *datas, *datad, *lines, *lined; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, maxval; PIX *pixd; PROCNAME("pixDilateGray3h"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); pixd = pixCreateTemplateNoInit(pixs); pixSetBorderVal(pixd, 4, 8, 2, 8, 0); /* only to silence valgrind */ pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { lines = datas + i * wpl; lined = datad + i * wpl; for (j = 1; j < w - 8; j += 8) { val0 = GET_DATA_BYTE(lines, j - 1); val1 = GET_DATA_BYTE(lines, j); val2 = GET_DATA_BYTE(lines, j + 1); val3 = GET_DATA_BYTE(lines, j + 2); val4 = GET_DATA_BYTE(lines, j + 3); val5 = GET_DATA_BYTE(lines, j + 4); val6 = GET_DATA_BYTE(lines, j + 5); val7 = GET_DATA_BYTE(lines, j + 6); val8 = GET_DATA_BYTE(lines, j + 7); val9 = GET_DATA_BYTE(lines, j + 8); maxval = L_MAX(val1, val2); SET_DATA_BYTE(lined, j, L_MAX(val0, maxval)); SET_DATA_BYTE(lined, j + 1, L_MAX(maxval, val3)); maxval = L_MAX(val3, val4); SET_DATA_BYTE(lined, j + 2, L_MAX(val2, maxval)); SET_DATA_BYTE(lined, j + 3, L_MAX(maxval, val5)); maxval = L_MAX(val5, val6); SET_DATA_BYTE(lined, j + 4, L_MAX(val4, maxval)); SET_DATA_BYTE(lined, j + 5, L_MAX(maxval, val7)); maxval = L_MAX(val7, val8); SET_DATA_BYTE(lined, j + 6, L_MAX(val6, maxval)); SET_DATA_BYTE(lined, j + 7, L_MAX(maxval, val9)); } } return pixd; } /*! * pixDilateGray3v() * * Input: pixs (8 bpp, not cmapped) * Return: pixd, or null on error * * Notes: * (1) Special case for vertical 1x3 brick Sel; * also used as the second step for the 3x3 brick Sel. */ static PIX * pixDilateGray3v(PIX *pixs) { l_uint32 *datas, *datad, *linesi, *linedi; l_int32 w, h, wpl, i, j; l_int32 val0, val1, val2, val3, val4, val5, val6, val7, val8, val9, maxval; PIX *pixd; PROCNAME("pixDilateGray3v"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); pixd = pixCreateTemplateNoInit(pixs); pixGetDimensions(pixs, &w, &h, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (j = 0; j < w; j++) { for (i = 1; i < h - 8; i += 8) { linesi = datas + i * wpl; linedi = datad + i * wpl; val0 = GET_DATA_BYTE(linesi - wpl, j); val1 = GET_DATA_BYTE(linesi, j); val2 = GET_DATA_BYTE(linesi + wpl, j); val3 = GET_DATA_BYTE(linesi + 2 * wpl, j); val4 = GET_DATA_BYTE(linesi + 3 * wpl, j); val5 = GET_DATA_BYTE(linesi + 4 * wpl, j); val6 = GET_DATA_BYTE(linesi + 5 * wpl, j); val7 = GET_DATA_BYTE(linesi + 6 * wpl, j); val8 = GET_DATA_BYTE(linesi + 7 * wpl, j); val9 = GET_DATA_BYTE(linesi + 8 * wpl, j); maxval = L_MAX(val1, val2); SET_DATA_BYTE(linedi, j, L_MAX(val0, maxval)); SET_DATA_BYTE(linedi + wpl, j, L_MAX(maxval, val3)); maxval = L_MAX(val3, val4); SET_DATA_BYTE(linedi + 2 * wpl, j, L_MAX(val2, maxval)); SET_DATA_BYTE(linedi + 3 * wpl, j, L_MAX(maxval, val5)); maxval = L_MAX(val5, val6); SET_DATA_BYTE(linedi + 4 * wpl, j, L_MAX(val4, maxval)); SET_DATA_BYTE(linedi + 5 * wpl, j, L_MAX(maxval, val7)); maxval = L_MAX(val7, val8); SET_DATA_BYTE(linedi + 6 * wpl, j, L_MAX(val6, maxval)); SET_DATA_BYTE(linedi + 7 * wpl, j, L_MAX(maxval, val9)); } } return pixd; } /*! * pixOpenGray3() * * Input: pixs (8 bpp, not cmapped) * hsize (1 or 3) * vsize (1 or 3) * Return: pixd, or null on error * * Notes: * (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits) * (2) If hsize = vsize = 1, just returns a copy. * (3) It would be nice not to add a border, but it is required * to get the same results as for the general case. */ PIX * pixOpenGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; PROCNAME("pixOpenGray3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 255); /* set to max */ if (vsize == 1) { pixt = pixErodeGray3h(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 0); /* set to min */ pixbd = pixDilateGray3h(pixt); pixDestroy(&pixt); } else if (hsize == 1) { pixt = pixErodeGray3v(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 0); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); } else { /* vize == hsize == 3 */ pixt = pixErodeGray3h(pixb); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); pixSetBorderVal(pixbd, 4, 8, 2, 8, 0); pixt = pixDilateGray3h(pixbd); pixDestroy(&pixbd); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } /*! * pixCloseGray3() * * Input: pixs (8 bpp, not cmapped) * hsize (1 or 3) * vsize (1 or 3) * Return: pixd, or null on error * * Notes: * (1) Special case for 1x3, 3x1 or 3x3 brick sel (all hits) * (2) If hsize = vsize = 1, just returns a copy. */ PIX * pixCloseGray3(PIX *pixs, l_int32 hsize, l_int32 vsize) { PIX *pixt, *pixb, *pixbd, *pixd; PROCNAME("pixCloseGray3"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pix has colormap", procName, NULL); if ((hsize != 1 && hsize != 3) || (vsize != 1 && vsize != 3)) return (PIX *)ERROR_PTR("invalid size: must be 1 or 3", procName, NULL); if (hsize == 1 && vsize == 1) return pixCopy(NULL, pixs); pixb = pixAddBorderGeneral(pixs, 4, 8, 2, 8, 0); /* set to min */ if (vsize == 1) { pixt = pixDilateGray3h(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 255); /* set to max */ pixbd = pixErodeGray3h(pixt); pixDestroy(&pixt); } else if (hsize == 1) { pixt = pixDilateGray3v(pixb); pixSetBorderVal(pixt, 4, 8, 2, 8, 255); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); } else { /* vize == hsize == 3 */ pixt = pixDilateGray3h(pixb); pixbd = pixDilateGray3v(pixt); pixDestroy(&pixt); pixSetBorderVal(pixbd, 4, 8, 2, 8, 255); pixt = pixErodeGray3h(pixbd); pixDestroy(&pixbd); pixbd = pixErodeGray3v(pixt); pixDestroy(&pixt); } pixd = pixRemoveBorderGeneral(pixbd, 4, 8, 2, 8); pixDestroy(&pixb); pixDestroy(&pixbd); return pixd; } leptonica-1.70/src/pix1.c0000644000175000017500000014270312266514761013342 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pix1.c * * The pixN.c {N = 1,2,3,4,5} files are sorted by the type of operation. * The primary functions in these files are: * * pix1.c: constructors, destructors and field accessors * pix2.c: pixel poking of image, pad and border pixels * pix3.c: masking and logical ops, counting, mirrored tiling * pix4.c: histograms, statistics, fg/bg estimation * pix5.c: property measurements, rectangle extraction * * * This file has the basic constructors, destructors and field accessors * * Pix memory management (allows custom allocator and deallocator) * static void *pix_malloc() * static void pix_free() * void setPixMemoryManager() * * Pix creation * PIX *pixCreate() * PIX *pixCreateNoInit() * PIX *pixCreateTemplate() * PIX *pixCreateTemplateNoInit() * PIX *pixCreateHeader() * PIX *pixClone() * * Pix destruction * void pixDestroy() * static void pixFree() * * Pix copy * PIX *pixCopy() * l_int32 pixResizeImageData() * l_int32 pixCopyColormap() * l_int32 pixSizesEqual() * l_int32 pixTransferAllData() * l_int32 pixSwapAndDestroy() * * Pix accessors * l_int32 pixGetWidth() * l_int32 pixSetWidth() * l_int32 pixGetHeight() * l_int32 pixSetHeight() * l_int32 pixGetDepth() * l_int32 pixSetDepth() * l_int32 pixGetDimensions() * l_int32 pixSetDimensions() * l_int32 pixCopyDimensions() * l_int32 pixGetSpp() * l_int32 pixSetSpp() * l_int32 pixCopySpp() * l_int32 pixGetWpl() * l_int32 pixSetWpl() * l_int32 pixGetRefcount() * l_int32 pixChangeRefcount() * l_uint32 pixGetXRes() * l_int32 pixSetXRes() * l_uint32 pixGetYRes() * l_int32 pixSetYRes() * l_int32 pixGetResolution() * l_int32 pixSetResolution() * l_int32 pixCopyResolution() * l_int32 pixScaleResolution() * l_int32 pixGetInputFormat() * l_int32 pixSetInputFormat() * l_int32 pixCopyInputFormat() * char *pixGetText() * l_int32 pixSetText() * l_int32 pixAddText() * l_int32 pixCopyText() * PIXCMAP *pixGetColormap() * l_int32 pixSetColormap() * l_int32 pixDestroyColormap() * l_uint32 *pixGetData() * l_int32 pixSetData() * l_uint32 *pixExtractData() * l_int32 pixFreeData() * * Pix line ptrs * void **pixGetLinePtrs() * * Pix debug * l_int32 pixPrintStreamInfo() * * * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * Important notes on direct management of pix image data * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * * Custom allocator and deallocator * -------------------------------- * * At the lowest level, you can specify the function that does the * allocation and deallocation of the data field in the pix. * By default, this is malloc and free. However, by calling * setPixMemoryManager(), custom functions can be substituted. * When using this, keep two things in mind: * * (1) Call setPixMemoryManager() before any pix have been allocated * (2) Destroy all pix as usual, in order to prevent leaks. * * In pixalloc.c, we provide an example custom allocator and deallocator. * To use it, you must call pmsCreate() before any pix have been allocated * and pmsDestroy() at the end after all pix have been destroyed. * * * Direct manipulation of the pix data field * ----------------------------------------- * * Memory management of the (image) data field in the pix is * handled differently from that in the colormap or text fields. * For colormap and text, the functions pixSetColormap() and * pixSetText() remove the existing heap data and insert the * new data. For the image data, pixSetData() just reassigns the * data field; any existing data will be lost if there isn't * another handle for it. * * Why is pixSetData() limited in this way? Because the image * data can be very large, we need flexible ways to handle it, * particularly when you want to re-use the data in a different * context without making a copy. Here are some different * things you might want to do: * * (1) Use pixCopy(pixd, pixs) where pixd is not the same size * as pixs. This will remove the data in pixd, allocate a * new data field in pixd, and copy the data from pixs, leaving * pixs unchanged. * * (2) Use pixTransferAllData(pixd, &pixs, ...) to transfer the * data from pixs to pixd without making a copy of it. If * pixs is not cloned, this will do the transfer and destroy pixs. * But if the refcount of pixs is greater than 1, it just copies * the data and decrements the ref count. * * (3) Use pixSwapAndDestroy(pixd, &pixs) to replace pixs by an * existing pixd. This is similar to pixTransferAllData(), but * simpler, in that it never makes any copies and if pixs is * cloned, the other references are not changed by this operation. * * (4) Use pixExtractData() to extract the image data from the pix * without copying if possible. This could be used, for example, * to convert from a pix to some other data structure with minimal * heap allocation. After the data is extracated, the pixels can * be munged and used in another context. However, the danger * here is that the pix might have a refcount > 1, in which case * a copy of the data must be made and the input pix left unchanged. * If there are no clones, the image data can be extracted without * a copy, and the data ptr in the pix must be nulled before * destroying it because the pix will no longer 'own' the data. * * We have provided accessors and functions here that should be * sufficient so that you can do anything you want without * explicitly referencing any of the pix member fields. * * However, to avoid memory smashes and leaks when doing special operations * on the pix data field, look carefully at the behavior of the image * data accessors and keep in mind that when you invoke pixDestroy(), * the pix considers itself the owner of all its heap data. */ #include #include "allheaders.h" static void pixFree(PIX *pix); /*-------------------------------------------------------------------------* * Pix Memory Management * * * * These functions give you the freedom to specify at compile or run * * time the allocator and deallocator to be used for pix. It has no * * effect on memory management for other data structs, which are * * controlled by the #defines in environ.h. Likewise, the #defines * * in environ.h have no effect on the pix memory management. * * The default functions are malloc and free. Use setPixMemoryManager() * * to specify other functions to use. * *-------------------------------------------------------------------------*/ struct PixMemoryManager { void *(*allocator)(size_t); void (*deallocator)(void *); }; static struct PixMemoryManager pix_mem_manager = { &malloc, &free }; static void * pix_malloc(size_t size) { #ifndef _MSC_VER return (*pix_mem_manager.allocator)(size); #else /* _MSC_VER */ /* Under MSVC++, pix_mem_manager is initialized after a call * to pix_malloc. Just ignore the custom allocator feature. */ return malloc(size); #endif /* _MSC_VER */ } static void pix_free(void *ptr) { #ifndef _MSC_VER (*pix_mem_manager.deallocator)(ptr); return; #else /* _MSC_VER */ /* Under MSVC++, pix_mem_manager is initialized after a call * to pix_malloc. Just ignore the custom allocator feature. */ free(ptr); return; #endif /* _MSC_VER */ } /*! * setPixMemoryManager() * * Input: allocator (; use null to skip) * deallocator (; use null to skip) * Return: void * * Notes: * (1) Use this to change the alloc and/or dealloc functions; * e.g., setPixMemoryManager(my_malloc, my_free). * (2) The C99 standard (section 6.7.5.3, par. 8) says: * A declaration of a parameter as "function returning type" * shall be adjusted to "pointer to function returning type" * so that it can be in either of these two forms: * (a) type (function-ptr(type, ...)) * (b) type ((*function-ptr)(type, ...)) * because form (a) is implictly converted to form (b), as in the * definition of struct PixMemoryManager above. So, for example, * we should be able to declare either of these: * (a) void *(allocator(size_t)) * (b) void *((*allocator)(size_t)) * However, MSVC++ only accepts the second version. */ void setPixMemoryManager(void *((*allocator)(size_t)), void ((*deallocator)(void *))) { if (allocator) pix_mem_manager.allocator = allocator; if (deallocator) pix_mem_manager.deallocator = deallocator; return; } /*--------------------------------------------------------------------* * Pix Creation * *--------------------------------------------------------------------*/ /*! * pixCreate() * * Input: width, height, depth * Return: pixd (with data allocated and initialized to 0), * or null on error */ PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth) { PIX *pixd; PROCNAME("pixCreate"); if ((pixd = pixCreateNoInit(width, height, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); memset(pixd->data, 0, 4 * pixd->wpl * pixd->h); return pixd; } /*! * pixCreateNoInit() * * Input: width, height, depth * Return: pixd (with data allocated but not initialized), * or null on error * * Notes: * (1) Must set pad bits to avoid reading unitialized data, because * some optimized routines (e.g., pixConnComp()) read from pad bits. */ PIX * pixCreateNoInit(l_int32 width, l_int32 height, l_int32 depth) { l_int32 wpl; PIX *pixd; l_uint32 *data; PROCNAME("pixCreateNoInit"); if ((pixd = pixCreateHeader(width, height, depth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); wpl = pixGetWpl(pixd); if ((data = (l_uint32 *)pix_malloc(4 * wpl * height)) == NULL) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("pix_malloc fail for data", procName, NULL); } pixSetData(pixd, data); pixSetPadBits(pixd, 0); return pixd; } /*! * pixCreateTemplate() * * Input: pixs * Return: pixd, or null on error * * Notes: * (1) Makes a Pix of the same size as the input Pix, with the * data array allocated and initialized to 0. * (2) Copies the other fields, including colormap if it exists. */ PIX * pixCreateTemplate(PIX *pixs) { PIX *pixd; PROCNAME("pixCreateTemplate"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if ((pixd = pixCreateTemplateNoInit(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); memset(pixd->data, 0, 4 * pixd->wpl * pixd->h); return pixd; } /*! * pixCreateTemplateNoInit() * * Input: pixs * Return: pixd, or null on error * * Notes: * (1) Makes a Pix of the same size as the input Pix, with * the data array allocated but not initialized to 0. * (2) Copies the other fields, including colormap if it exists. */ PIX * pixCreateTemplateNoInit(PIX *pixs) { l_int32 w, h, d; PIX *pixd; PROCNAME("pixCreateTemplateNoInit"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if ((pixd = pixCreateNoInit(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopySpp(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); return pixd; } /*! * pixCreateHeader() * * Input: width, height, depth * Return: pixd (with no data allocated), or null on error * * Notes: * (1) It is assumed that all 32 bit pix have 3 spp. If there is * a valid alpha channel, this will be set to 4 spp later. * (2) If the number of bytes to be allocated is larger than the * maximum value in an int32, we can get overflow, resulting * in a smaller amount of memory actually being allocated. * Later, an attempt to access memory that wasn't allocated will * cause a crash. So to avoid crashing a program (or worse) * with bad (or malicious) input, this is where we limit the * requested allocation of image data in a typesafe way. */ PIX * pixCreateHeader(l_int32 width, l_int32 height, l_int32 depth) { l_int32 wpl; l_uint64 bignum; PIX *pixd; PROCNAME("pixCreateHeader"); if ((depth != 1) && (depth != 2) && (depth != 4) && (depth != 8) && (depth != 16) && (depth != 24) && (depth != 32)) return (PIX *)ERROR_PTR("depth must be {1, 2, 4, 8, 16, 24, 32}", procName, NULL); if (width <= 0) return (PIX *)ERROR_PTR("width must be > 0", procName, NULL); if (height <= 0) return (PIX *)ERROR_PTR("height must be > 0", procName, NULL); /* Avoid overflow in malloc arg, malicious or otherwise */ wpl = (width * depth + 31) / 32; bignum = 4L * wpl * height; /* number of bytes to be requested */ if (bignum > ((1LL << 31) - 1)) { L_ERROR("requested w = %d, h = %d, d = %d\n", procName, width, height, depth); return (PIX *)ERROR_PTR("requested bytes >= 2^31", procName, NULL); } if ((pixd = (PIX *)CALLOC(1, sizeof(PIX))) == NULL) return (PIX *)ERROR_PTR("CALLOC fail for pixd", procName, NULL); pixSetWidth(pixd, width); pixSetHeight(pixd, height); pixSetDepth(pixd, depth); pixSetWpl(pixd, wpl); if (depth == 24 || depth == 32) pixSetSpp(pixd, 3); else pixSetSpp(pixd, 1); pixd->refcount = 1; pixd->informat = IFF_UNKNOWN; return pixd; } /*! * pixClone() * * Input: pix * Return: same pix (ptr), or null on error * * Notes: * (1) A "clone" is simply a handle (ptr) to an existing pix. * It is implemented because (a) images can be large and * hence expensive to copy, and (b) extra handles to a data * structure need to be made with a simple policy to avoid * both double frees and memory leaks. Pix are reference * counted. The side effect of pixClone() is an increase * by 1 in the ref count. * (2) The protocol to be used is: * (a) Whenever you want a new handle to an existing image, * call pixClone(), which just bumps a ref count. * (b) Always call pixDestroy() on all handles. This * decrements the ref count, nulls the handle, and * only destroys the pix when pixDestroy() has been * called on all handles. */ PIX * pixClone(PIX *pixs) { PROCNAME("pixClone"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixChangeRefcount(pixs, 1); return pixs; } /*--------------------------------------------------------------------* * Pix Destruction * *--------------------------------------------------------------------*/ /*! * pixDestroy() * * Input: &pix * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the pix. * (2) Always nulls the input ptr. */ void pixDestroy(PIX **ppix) { PIX *pix; PROCNAME("pixDestroy"); if (!ppix) { L_WARNING("ptr address is null!\n", procName); return; } if ((pix = *ppix) == NULL) return; pixFree(pix); *ppix = NULL; return; } /*! * pixFree() * * Input: pix * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the pix. */ static void pixFree(PIX *pix) { l_uint32 *data; char *text; if (!pix) return; pixChangeRefcount(pix, -1); if (pixGetRefcount(pix) <= 0) { if ((data = pixGetData(pix)) != NULL) pix_free(data); if ((text = pixGetText(pix)) != NULL) FREE(text); pixDestroyColormap(pix); FREE(pix); } return; } /*-------------------------------------------------------------------------* * Pix Copy * *-------------------------------------------------------------------------*/ /*! * pixCopy() * * Input: pixd (; can be null, or equal to pixs, * or different from pixs) * pixs * Return: pixd, or null on error * * Notes: * (1) There are three cases: * (a) pixd == null (makes a new pix; refcount = 1) * (b) pixd == pixs (no-op) * (c) pixd != pixs (data copy; no change in refcount) * If the refcount of pixd > 1, case (c) will side-effect * these handles. * (2) The general pattern of use is: * pixd = pixCopy(pixd, pixs); * This will work for all three cases. * For clarity when the case is known, you can use: * (a) pixd = pixCopy(NULL, pixs); * (c) pixCopy(pixd, pixs); * (3) For case (c), we check if pixs and pixd are the same * size (w,h,d). If so, the data is copied directly. * Otherwise, the data is reallocated to the correct size * and the copy proceeds. The refcount of pixd is unchanged. * (4) This operation, like all others that may involve a pre-existing * pixd, will side-effect any existing clones of pixd. */ PIX * pixCopy(PIX *pixd, /* can be null */ PIX *pixs) { l_int32 bytes; l_uint32 *datas, *datad; PROCNAME("pixCopy"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixs == pixd) return pixd; /* Total bytes in image data */ bytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); /* If we're making a new pix ... */ if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); datas = pixGetData(pixs); datad = pixGetData(pixd); memcpy((char *)datad, (char *)datas, bytes); return pixd; } /* Reallocate image data if sizes are different */ if (pixResizeImageData(pixd, pixs) == 1) return (PIX *)ERROR_PTR("reallocation of data failed", procName, NULL); /* Copy non-image data fields */ pixCopyColormap(pixd, pixs); pixCopySpp(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixCopyText(pixd, pixs); /* Copy image data */ datas = pixGetData(pixs); datad = pixGetData(pixd); memcpy((char*)datad, (char*)datas, bytes); return pixd; } /*! * pixResizeImageData() * * Input: pixd (gets new uninitialized buffer for image data) * pixs (determines the size of the buffer; not changed) * Return: 0 if OK, 1 on error * * Notes: * (1) This removes any existing image data from pixd and * allocates an uninitialized buffer that will hold the * amount of image data that is in pixs. */ l_int32 pixResizeImageData(PIX *pixd, PIX *pixs) { l_int32 w, h, d, wpl, bytes; l_uint32 *data; PROCNAME("pixResizeImageData"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixSizesEqual(pixs, pixd)) /* nothing to do */ return 0; pixGetDimensions(pixs, &w, &h, &d); wpl = pixGetWpl(pixs); pixSetWidth(pixd, w); pixSetHeight(pixd, h); pixSetDepth(pixd, d); pixSetWpl(pixd, wpl); bytes = 4 * wpl * h; pixFreeData(pixd); /* free any existing image data */ if ((data = (l_uint32 *)pix_malloc(bytes)) == NULL) return ERROR_INT("pix_malloc fail for data", procName, 1); pixSetData(pixd, data); return 0; } /*! * pixCopyColormap() * * Input: src and dest Pix * Return: 0 if OK, 1 on error * * Notes: * (1) This always destroys any colormap in pixd (except if * the operation is a no-op. */ l_int32 pixCopyColormap(PIX *pixd, PIX *pixs) { PIXCMAP *cmaps, *cmapd; PROCNAME("pixCopyColormap"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixs == pixd) return 0; /* no-op */ pixDestroyColormap(pixd); if ((cmaps = pixGetColormap(pixs)) == NULL) /* not an error */ return 0; if ((cmapd = pixcmapCopy(cmaps)) == NULL) return ERROR_INT("cmapd not made", procName, 1); pixSetColormap(pixd, cmapd); return 0; } /*! * pixSizesEqual() * * Input: two pix * Return: 1 if the two pix have same {h, w, d}; 0 otherwise. */ l_int32 pixSizesEqual(PIX *pix1, PIX *pix2) { PROCNAME("pixSizesEqual"); if (!pix1 || !pix2) return ERROR_INT("pix1 and pix2 not both defined", procName, 0); if (pix1 == pix2) return 1; if ((pixGetWidth(pix1) != pixGetWidth(pix2)) || (pixGetHeight(pix1) != pixGetHeight(pix2)) || (pixGetDepth(pix1) != pixGetDepth(pix2))) return 0; else return 1; } /*! * pixTransferAllData() * * Input: pixd (must be different from pixs) * &pixs (will be nulled if refcount goes to 0) * copytext (1 to copy the text field; 0 to skip) * copyformat (1 to copy the informat field; 0 to skip) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a complete data transfer from pixs to pixd, * followed by the destruction of pixs (refcount permitting). * (2) If the refcount of pixs is 1, pixs is destroyed. Otherwise, * the data in pixs is copied (rather than transferred) to pixd. * (3) This operation, like all others with a pre-existing pixd, * will side-effect any existing clones of pixd. The pixd * refcount does not change. * (4) When might you use this? Suppose you have an in-place Pix * function (returning void) with the typical signature: * void function-inplace(PIX *pix, ...) * where "..." are non-pointer input parameters, and suppose * further that you sometimes want to return an arbitrary Pix * in place of the input Pix. There are two ways you can do this: * (a) The straightforward way is to change the function * signature to take the address of the Pix ptr: * void function-inplace(PIX **ppix, ...) { * PIX *pixt = function-makenew(*ppix); * pixDestroy(ppix); * *ppix = pixt; * return; * } * Here, the input and returned pix are different, as viewed * by the calling function, and the inplace function is * expected to destroy the input pix to avoid a memory leak. * (b) Keep the signature the same and use pixTransferAllData() * to return the new Pix in the input Pix struct: * void function-inplace(PIX *pix, ...) { * PIX *pixt = function-makenew(pix); * pixTransferAllData(pix, &pixt, 0, 0); * // pixDestroy() is called on pixt * return; * } * Here, the input and returned pix are the same, as viewed * by the calling function, and the inplace function must * never destroy the input pix, because the calling function * maintains an unchanged handle to it. */ l_int32 pixTransferAllData(PIX *pixd, PIX **ppixs, l_int32 copytext, l_int32 copyformat) { l_int32 nbytes; PIX *pixs; PROCNAME("pixTransferAllData"); if (!ppixs) return ERROR_INT("&pixs not defined", procName, 1); if ((pixs = *ppixs) == NULL) return ERROR_INT("pixs not defined", procName, 1); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixs == pixd) /* no-op */ return ERROR_INT("pixd == pixs", procName, 1); if (pixGetRefcount(pixs) == 1) { /* transfer the data, cmap, text */ pixFreeData(pixd); /* dealloc any existing data */ pixSetData(pixd, pixGetData(pixs)); /* transfer new data from pixs */ pixs->data = NULL; /* pixs no longer owns data */ pixSetColormap(pixd, pixGetColormap(pixs)); /* frees old; sets new */ pixs->colormap = NULL; /* pixs no longer owns colormap */ if (copytext) { pixSetText(pixd, pixGetText(pixs)); pixSetText(pixs, NULL); } } else { /* preserve pixs by making a copy of the data, cmap, text */ pixResizeImageData(pixd, pixs); nbytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); memcpy((char *)pixGetData(pixd), (char *)pixGetData(pixs), nbytes); pixCopyColormap(pixd, pixs); if (copytext) pixCopyText(pixd, pixs); } pixCopySpp(pixd, pixs); pixCopyResolution(pixd, pixs); pixCopyDimensions(pixd, pixs); if (copyformat) pixCopyInputFormat(pixd, pixs); /* This will destroy pixs if data was transferred; * otherwise, it just decrements its refcount. */ pixDestroy(ppixs); return 0; } /*! * pixSwapAndDestroy() * * Input: &pixd ( input pixd can be null, * and it must be different from pixs) * &pixs (will be nulled after the swap) * Return: 0 if OK, 1 on error * * Notes: * (1) Simple operation to change the handle name safely. * After this operation, the original image in pixd has * been destroyed, pixd points to what was pixs, and * the input pixs ptr has been nulled. * (2) This works safely whether or not pixs and pixd are cloned. * If pixs is cloned, the other handles still point to * the original image, with the ref count reduced by 1. * (3) Usage example: * Pix *pix1 = pixRead("..."); * Pix *pix2 = function(pix1, ...); * pixSwapAndDestroy(&pix1, &pix2); * pixDestroy(&pix1); // holds what was in pix2 * Example with clones ([] shows ref count of image generated * by the function): * Pix *pixs = pixRead("..."); * Pix *pix1 = pixClone(pixs); * Pix *pix2 = function(pix1, ...); [1] * Pix *pix3 = pixClone(pix2); [1] --> [2] * pixSwapAndDestroy(&pix1, &pix2); * pixDestroy(&pixs); // still holds read image * pixDestroy(&pix1); // holds what was in pix2 [2] --> [1] * pixDestroy(&pix3); // holds what was in pix2 [1] --> [0] */ l_int32 pixSwapAndDestroy(PIX **ppixd, PIX **ppixs) { PROCNAME("pixSwapAndDestroy"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); if (!ppixs) return ERROR_INT("&pixs not defined", procName, 1); if (*ppixs == NULL) return ERROR_INT("pixs not defined", procName, 1); if (ppixs == ppixd) /* no-op */ return ERROR_INT("&pixd == &pixs", procName, 1); pixDestroy(ppixd); *ppixd = pixClone(*ppixs); pixDestroy(ppixs); return 0; } /*--------------------------------------------------------------------* * Accessors * *--------------------------------------------------------------------*/ l_int32 pixGetWidth(PIX *pix) { PROCNAME("pixGetWidth"); if (!pix) return ERROR_INT("pix not defined", procName, UNDEF); return pix->w; } l_int32 pixSetWidth(PIX *pix, l_int32 width) { PROCNAME("pixSetWidth"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (width < 0) { pix->w = 0; return ERROR_INT("width must be >= 0", procName, 1); } pix->w = width; return 0; } l_int32 pixGetHeight(PIX *pix) { PROCNAME("pixGetHeight"); if (!pix) return ERROR_INT("pix not defined", procName, UNDEF); return pix->h; } l_int32 pixSetHeight(PIX *pix, l_int32 height) { PROCNAME("pixSetHeight"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (height < 0) { pix->h = 0; return ERROR_INT("h must be >= 0", procName, 1); } pix->h = height; return 0; } l_int32 pixGetDepth(PIX *pix) { PROCNAME("pixGetDepth"); if (!pix) return ERROR_INT("pix not defined", procName, UNDEF); return pix->d; } l_int32 pixSetDepth(PIX *pix, l_int32 depth) { PROCNAME("pixSetDepth"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (depth < 1) return ERROR_INT("d must be >= 1", procName, 1); pix->d = depth; return 0; } /*! * pixGetDimensions() * * Input: pix * &w, &h, &d (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd) { PROCNAME("pixGetDimensions"); if (pw) *pw = 0; if (ph) *ph = 0; if (pd) *pd = 0; if (!pix) return ERROR_INT("pix not defined", procName, 1); if (pw) *pw = pix->w; if (ph) *ph = pix->h; if (pd) *pd = pix->d; return 0; } /*! * pixSetDimensions() * * Input: pix * w, h, d (use 0 to skip the setting for any of these) * Return: 0 if OK, 1 on error */ l_int32 pixSetDimensions(PIX *pix, l_int32 w, l_int32 h, l_int32 d) { PROCNAME("pixSetDimensions"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (w > 0) pixSetWidth(pix, w); if (h > 0) pixSetHeight(pix, h); if (d > 0) pixSetDepth(pix, d); return 0; } /*! * pixCopyDimensions() * * Input: pixd * pixd * Return: 0 if OK, 1 on error */ l_int32 pixCopyDimensions(PIX *pixd, PIX *pixs) { PROCNAME("pixCopyDimensions"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixs == pixd) return 0; /* no-op */ pixSetWidth(pixd, pixGetWidth(pixs)); pixSetHeight(pixd, pixGetHeight(pixs)); pixSetDepth(pixd, pixGetDepth(pixs)); pixSetWpl(pixd, pixGetWpl(pixs)); return 0; } l_int32 pixGetSpp(PIX *pix) { PROCNAME("pixGetSpp"); if (!pix) return ERROR_INT("pix not defined", procName, UNDEF); return pix->spp; } /* * pixSetSpp() * Input: pix * spp (1, 3 or 4) * Return: 0 if OK, 1 on error * * Notes: * (1) For a 32 bpp pix, this can be used to ignore the * alpha sample (spp == 3) or to use it (spp == 4). * For example, to write a spp == 4 image without the alpha * sample (as an rgb pix), call pixSetSpp(pix, 3) and * then write it out as a png. */ l_int32 pixSetSpp(PIX *pix, l_int32 spp) { PROCNAME("pixSetSpp"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (spp < 1) return ERROR_INT("spp must be >= 1", procName, 1); pix->spp = spp; return 0; } /*! * pixCopySpp() * * Input: pixd * pixs * Return: 0 if OK, 1 on error */ l_int32 pixCopySpp(PIX *pixd, PIX *pixs) { PROCNAME("pixCopySpp"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixs == pixd) return 0; /* no-op */ pixSetSpp(pixd, pixGetSpp(pixs)); return 0; } l_int32 pixGetWpl(PIX *pix) { PROCNAME("pixGetWpl"); if (!pix) return ERROR_INT("pix not defined", procName, UNDEF); return pix->wpl; } l_int32 pixSetWpl(PIX *pix, l_int32 wpl) { PROCNAME("pixSetWpl"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pix->wpl = wpl; return 0; } l_int32 pixGetRefcount(PIX *pix) { PROCNAME("pixGetRefcount"); if (!pix) return ERROR_INT("pix not defined", procName, UNDEF); return pix->refcount; } l_int32 pixChangeRefcount(PIX *pix, l_int32 delta) { PROCNAME("pixChangeRefcount"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pix->refcount += delta; return 0; } l_int32 pixGetXRes(PIX *pix) { PROCNAME("pixGetXRes"); if (!pix) return ERROR_INT("pix not defined", procName, 0); return pix->xres; } l_int32 pixSetXRes(PIX *pix, l_int32 res) { PROCNAME("pixSetXRes"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pix->xres = res; return 0; } l_int32 pixGetYRes(PIX *pix) { PROCNAME("pixGetYRes"); if (!pix) return ERROR_INT("pix not defined", procName, 0); return pix->yres; } l_int32 pixSetYRes(PIX *pix, l_int32 res) { PROCNAME("pixSetYRes"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pix->yres = res; return 0; } /*! * pixGetResolution() * * Input: pix * &xres, &yres (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 pixGetResolution(PIX *pix, l_int32 *pxres, l_int32 *pyres) { PROCNAME("pixGetResolution"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (pxres) *pxres = pix->xres; if (pyres) *pyres = pix->yres; return 0; } /*! * pixSetResolution() * * Input: pix * xres, yres (use 0 to skip the setting for either of these) * Return: 0 if OK, 1 on error */ l_int32 pixSetResolution(PIX *pix, l_int32 xres, l_int32 yres) { PROCNAME("pixSetResolution"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (xres > 0) pix->xres = xres; if (yres > 0) pix->yres = yres; return 0; } l_int32 pixCopyResolution(PIX *pixd, PIX *pixs) { PROCNAME("pixCopyResolution"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixs == pixd) return 0; /* no-op */ pixSetXRes(pixd, pixGetXRes(pixs)); pixSetYRes(pixd, pixGetYRes(pixs)); return 0; } l_int32 pixScaleResolution(PIX *pix, l_float32 xscale, l_float32 yscale) { PROCNAME("pixScaleResolution"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (pix->xres != 0 && pix->yres != 0) { pix->xres = (l_uint32)(xscale * (l_float32)(pix->xres) + 0.5); pix->yres = (l_uint32)(yscale * (l_float32)(pix->yres) + 0.5); } return 0; } l_int32 pixGetInputFormat(PIX *pix) { PROCNAME("pixGetInputFormat"); if (!pix) return ERROR_INT("pix not defined", procName, UNDEF); return pix->informat; } l_int32 pixSetInputFormat(PIX *pix, l_int32 informat) { PROCNAME("pixSetInputFormat"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pix->informat = informat; return 0; } l_int32 pixCopyInputFormat(PIX *pixd, PIX *pixs) { PROCNAME("pixCopyInputFormat"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixs == pixd) return 0; /* no-op */ pixSetInputFormat(pixd, pixGetInputFormat(pixs)); return 0; } /*! * pixGetText() * * Input: pix * Return: ptr to existing text string * * Notes: * (1) The text string belongs to the pix. The caller must * NOT free it! */ char * pixGetText(PIX *pix) { PROCNAME("pixGetText"); if (!pix) return (char *)ERROR_PTR("pix not defined", procName, NULL); return pix->text; } /*! * pixSetText() * * Input: pix * textstring (can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) This removes any existing textstring and puts a copy of * the input textstring there. */ l_int32 pixSetText(PIX *pix, const char *textstring) { PROCNAME("pixSetText"); if (!pix) return ERROR_INT("pix not defined", procName, 1); stringReplace(&pix->text, textstring); return 0; } /*! * pixAddText() * * Input: pix * textstring * Return: 0 if OK, 1 on error * * Notes: * (1) This adds the new textstring to any existing text. * (2) Either or both the existing text and the new text * string can be null. */ l_int32 pixAddText(PIX *pix, const char *textstring) { char *newstring; PROCNAME("pixAddText"); if (!pix) return ERROR_INT("pix not defined", procName, 1); newstring = stringJoin(pixGetText(pix), textstring); stringReplace(&pix->text, newstring); FREE(newstring); return 0; } l_int32 pixCopyText(PIX *pixd, PIX *pixs) { PROCNAME("pixCopyText"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixs == pixd) return 0; /* no-op */ pixSetText(pixd, pixGetText(pixs)); return 0; } PIXCMAP * pixGetColormap(PIX *pix) { PROCNAME("pixGetColormap"); if (!pix) return (PIXCMAP *)ERROR_PTR("pix not defined", procName, NULL); return pix->colormap; } /*! * pixSetColormap() * * Input: pix * colormap (to be assigned) * Return: 0 if OK, 1 on error. * * Notes: * (1) Unlike with the pix data field, pixSetColormap() destroys * any existing colormap before assigning the new one. * Because colormaps are not ref counted, it is important that * the new colormap does not belong to any other pix. */ l_int32 pixSetColormap(PIX *pix, PIXCMAP *colormap) { PROCNAME("pixSetColormap"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pixDestroyColormap(pix); pix->colormap = colormap; return 0; } /*! * pixDestroyColormap() * * Input: pix * Return: 0 if OK, 1 on error */ l_int32 pixDestroyColormap(PIX *pix) { PIXCMAP *cmap; PROCNAME("pixDestroyColormap"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if ((cmap = pix->colormap) != NULL) { pixcmapDestroy(&cmap); pix->colormap = NULL; } return 0; } /*! * pixGetData() * * Notes: * (1) This gives a new handle for the data. The data is still * owned by the pix, so do not call FREE() on it. */ l_uint32 * pixGetData(PIX *pix) { PROCNAME("pixGetData"); if (!pix) return (l_uint32 *)ERROR_PTR("pix not defined", procName, NULL); return pix->data; } /*! * pixSetData() * * Notes: * (1) This does not free any existing data. To free existing * data, use pixFreeData() before pixSetData(). */ l_int32 pixSetData(PIX *pix, l_uint32 *data) { PROCNAME("pixSetData"); if (!pix) return ERROR_INT("pix not defined", procName, 1); pix->data = data; return 0; } /*! * pixExtractData() * * Notes: * (1) This extracts the pix image data for use in another context. * The caller still needs to use pixDestroy() on the input pix. * (2) If refcount == 1, the data is extracted and the * pix->data ptr is set to NULL. * (3) If refcount > 1, this simply returns a copy of the data, * using the pix allocator, and leaving the input pix unchanged. */ l_uint32 * pixExtractData(PIX *pixs) { l_int32 count, bytes; l_uint32 *data, *datas; PROCNAME("pixExtractData"); if (!pixs) return (l_uint32 *)ERROR_PTR("pixs not defined", procName, NULL); count = pixGetRefcount(pixs); if (count == 1) { /* extract */ data = pixGetData(pixs); pixSetData(pixs, NULL); } else { /* refcount > 1; copy */ bytes = 4 * pixGetWpl(pixs) * pixGetHeight(pixs); datas = pixGetData(pixs); if ((data = (l_uint32 *)pix_malloc(bytes)) == NULL) return (l_uint32 *)ERROR_PTR("data not made", procName, NULL); memcpy((char *)data, (char *)datas, bytes); } return data; } /*! * pixFreeData() * * Notes: * (1) This frees the data and sets the pix data ptr to null. * It should be used before pixSetData() in the situation where * you want to free any existing data before doing * a subsequent assignment with pixSetData(). */ l_int32 pixFreeData(PIX *pix) { l_uint32 *data; PROCNAME("pixFreeData"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if ((data = pixGetData(pix)) != NULL) { pix_free(data); pix->data = NULL; } return 0; } /*--------------------------------------------------------------------* * Pix line ptrs * *--------------------------------------------------------------------*/ /*! * pixGetLinePtrs() * * Input: pix * &size ( array size, which is the pix height) * Return: array of line ptrs, or null on error * * Notes: * (1) This is intended to be used for fast random pixel access. * For example, for an 8 bpp image, * val = GET_DATA_BYTE(lines8[i], j); * is equivalent to, but much faster than, * pixGetPixel(pix, j, i, &val); * (2) How much faster? For 1 bpp, it's from 6 to 10x faster. * For 8 bpp, it's an amazing 30x faster. So if you are * doing random access over a substantial part of the image, * use this line ptr array. * (3) When random access is used in conjunction with a stack, * queue or heap, the overall computation time depends on * the operations performed on each struct that is popped * or pushed, and whether we are using a priority queue (O(logn)) * or a queue or stack (O(1)). For example, for maze search, * the overall ratio of time for line ptrs vs. pixGet/Set* is * Maze type Type Time ratio * binary queue 0.4 * gray heap (priority queue) 0.6 * (4) Because this returns a void** and the accessors take void*, * the compiler cannot check the pointer types. It is * strongly recommended that you adopt a naming scheme for * the returned ptr arrays that indicates the pixel depth. * (This follows the original intent of Simonyi's "Hungarian" * application notation, where naming is used proactively * to make errors visibly obvious.) By doing this, you can * tell by inspection if the correct accessor is used. * For example, for an 8 bpp pixg: * void **lineg8 = pixGetLinePtrs(pixg, NULL); * val = GET_DATA_BYTE(lineg8[i], j); // fast access; BYTE, 8 * ... * FREE(lineg8); // don't forget this * (5) These are convenient for accessing bytes sequentially in an * 8 bpp grayscale image. People who write image processing code * on 8 bpp images are accustomed to grabbing pixels directly out * of the raster array. Note that for little endians, you first * need to reverse the byte order in each 32-bit word. * Here's a typical usage pattern: * pixEndianByteSwap(pix); // always safe; no-op on big-endians * l_uint8 **lineptrs = (l_uint8 **)pixGetLinePtrs(pix, NULL); * pixGetDimensions(pix, &w, &h, NULL); * for (i = 0; i < h; i++) { * l_uint8 *line = lineptrs[i]; * for (j = 0; j < w; j++) { * val = line[j]; * ... * } * } * pixEndianByteSwap(pix); // restore big-endian order * FREE(lineptrs); * This can be done even more simply as follows: * l_uint8 **lineptrs = pixSetupByteProcessing(pix, &w, &h); * for (i = 0; i < h; i++) { * l_uint8 *line = lineptrs[i]; * for (j = 0; j < w; j++) { * val = line[j]; * ... * } * } * pixCleanupByteProcessing(pix, lineptrs); */ void ** pixGetLinePtrs(PIX *pix, l_int32 *psize) { l_int32 i, h, wpl; l_uint32 *data; void **lines; PROCNAME("pixGetLinePtrs"); if (!pix) return (void **)ERROR_PTR("pix not defined", procName, NULL); h = pixGetHeight(pix); if (psize) *psize = h; if ((lines = (void **)CALLOC(h, sizeof(void *))) == NULL) return (void **)ERROR_PTR("lines not made", procName, NULL); wpl = pixGetWpl(pix); data = pixGetData(pix); for (i = 0; i < h; i++) lines[i] = (void *)(data + i * wpl); return lines; } /*--------------------------------------------------------------------* * Print output for debugging * *--------------------------------------------------------------------*/ extern const char *ImageFileFormatExtensions[]; /*! * pixPrintStreamInfo() * * Input: fp (file stream) * pix * text ( identifying string; can be null) * Return: 0 if OK, 1 on error */ l_int32 pixPrintStreamInfo(FILE *fp, PIX *pix, const char *text) { l_int32 informat; PIXCMAP *cmap; PROCNAME("pixPrintStreamInfo"); if (!fp) return ERROR_INT("fp not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (text) fprintf(fp, " Pix Info for %s:\n", text); fprintf(fp, " width = %d, height = %d, depth = %d, spp = %d\n", pixGetWidth(pix), pixGetHeight(pix), pixGetDepth(pix), pixGetSpp(pix)); fprintf(fp, " wpl = %d, data = %p, refcount = %d\n", pixGetWpl(pix), pixGetData(pix), pixGetRefcount(pix)); if ((cmap = pixGetColormap(pix)) != NULL) pixcmapWriteStream(fp, cmap); else fprintf(fp, " no colormap\n"); informat = pixGetInputFormat(pix); fprintf(fp, " input format: %d (%s)\n", informat, ImageFileFormatExtensions[informat]); return 0; } leptonica-1.70/src/freetype.h0000664000175000017500000000323312265014043014270 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_FREETYPE_H #define LEPTONICA_FREETYPE_H #define LEPTONICA_FT_RESOLUTION 96 typedef struct ft_library_st FT_LIBRARY; #endif /* LEPTONICA_FREETYPE_H */ leptonica-1.70/src/morphapp.c0000644000175000017500000014410212244224164014271 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * morphapp.c * * These are some useful and/or interesting composite * image processing operations, of the type that are often * useful in applications. Most are morphological in * nature. * * Extraction of boundary pixels * PIX *pixExtractBoundary() * * Selective morph sequence operation under mask * PIX *pixMorphSequenceMasked() * * Selective morph sequence operation on each component * PIX *pixMorphSequenceByComponent() * PIXA *pixaMorphSequenceByComponent() * * Selective morph sequence operation on each region * PIX *pixMorphSequenceByRegion() * PIXA *pixaMorphSequenceByRegion() * * Union and intersection of parallel composite operations * PIX *pixUnionOfMorphOps() * PIX *pixIntersectionOfMorphOps() * * Selective connected component filling * PIX *pixSelectiveConnCompFill() * * Removal of matched patterns * PIX *pixRemoveMatchedPattern() * * Display of matched patterns * PIX *pixDisplayMatchedPattern() * * Iterative morphological seed filling (don't use for real work) * PIX *pixSeedfillMorph() * * Granulometry on binary images * NUMA *pixRunHistogramMorph() * * Composite operations on grayscale images * PIX *pixTophat() * PIX *pixHDome() * PIX *pixFastTophat() * PIX *pixMorphGradient() * * Centroid of component * PTA *pixaCentroids() * l_int32 pixCentroid() */ #include "allheaders.h" #define SWAP(x, y) {temp = (x); (x) = (y); (y) = temp;} /*-----------------------------------------------------------------* * Extraction of boundary pixels * *-----------------------------------------------------------------*/ /*! * pixExtractBoundary() * * Input: pixs (1 bpp) * type (0 for background pixels; 1 for foreground pixels) * Return: pixd, or null on error * * Notes: * (1) Extracts the fg or bg boundary pixels for each component. * Components are assumed to end at the boundary of pixs. */ PIX * pixExtractBoundary(PIX *pixs, l_int32 type) { PIX *pixd; PROCNAME("pixExtractBoundary"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (type == 0) pixd = pixDilateBrick(NULL, pixs, 3, 3); else pixd = pixErodeBrick(NULL, pixs, 3, 3); pixXor(pixd, pixd, pixs); return pixd; } /*-----------------------------------------------------------------* * Selective morph sequence operation under mask * *-----------------------------------------------------------------*/ /*! * pixMorphSequenceMasked() * * Input: pixs (1 bpp) * pixm ( 1 bpp mask) * sequence (string specifying sequence of operations) * dispsep (horizontal separation in pixels between * successive displays; use zero to suppress display) * Return: pixd, or null on error * * Notes: * (1) This applies the morph sequence to the image, but only allows * changes in pixs for pixels under the background of pixm. * (5) If pixm is NULL, this is just pixMorphSequence(). */ PIX * pixMorphSequenceMasked(PIX *pixs, PIX *pixm, const char *sequence, l_int32 dispsep) { PIX *pixd; PROCNAME("pixMorphSequenceMasked"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); pixd = pixMorphSequence(pixs, sequence, dispsep); pixCombineMasked(pixd, pixs, pixm); /* restore src pixels under mask fg */ return pixd; } /*-----------------------------------------------------------------* * Morph sequence operation on each component * *-----------------------------------------------------------------*/ /*! * pixMorphSequenceByComponent() * * Input: pixs (1 bpp) * sequence (string specifying sequence) * connectivity (4 or 8) * minw (minimum width to consider; use 0 or 1 for any width) * minh (minimum height to consider; use 0 or 1 for any height) * &boxa ( return boxa of c.c. in pixs) * Return: pixd, or null on error * * Notes: * (1) See pixMorphSequence() for composing operation sequences. * (2) This operates separately on each c.c. in the input pix. * (3) The dilation does NOT increase the c.c. size; it is clipped * to the size of the original c.c. This is necessary to * keep the c.c. independent after the operation. * (4) You can specify that the width and/or height must equal * or exceed a minimum size for the operation to take place. * (5) Use NULL for boxa to avoid returning the boxa. */ PIX * pixMorphSequenceByComponent(PIX *pixs, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa) { l_int32 n, i, x, y, w, h; BOXA *boxa; PIX *pix, *pixd; PIXA *pixas, *pixad; PROCNAME("pixMorphSequenceByComponent"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; /* Get the c.c. */ if ((boxa = pixConnComp(pixs, &pixas, connectivity)) == NULL) return (PIX *)ERROR_PTR("boxa not made", procName, NULL); /* Operate on each c.c. independently */ pixad = pixaMorphSequenceByComponent(pixas, sequence, minw, minh); pixaDestroy(&pixas); boxaDestroy(&boxa); if (!pixad) return (PIX *)ERROR_PTR("pixad not made", procName, NULL); /* Display the result out into pixd */ pixd = pixCreateTemplate(pixs); n = pixaGetCount(pixad); for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixad, i, &x, &y, &w, &h); pix = pixaGetPix(pixad, i, L_CLONE); pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix, 0, 0); pixDestroy(&pix); } if (pboxa) *pboxa = pixaGetBoxa(pixad, L_CLONE); pixaDestroy(&pixad); return pixd; } /*! * pixaMorphSequenceByComponent() * * Input: pixas (of 1 bpp pix) * sequence (string specifying sequence) * minw (minimum width to consider; use 0 or 1 for any width) * minh (minimum height to consider; use 0 or 1 for any height) * Return: pixad, or null on error * * Notes: * (1) See pixMorphSequence() for composing operation sequences. * (2) This operates separately on each c.c. in the input pixa. * (3) You can specify that the width and/or height must equal * or exceed a minimum size for the operation to take place. * (4) The input pixa should have a boxa giving the locations * of the pix components. */ PIXA * pixaMorphSequenceByComponent(PIXA *pixas, const char *sequence, l_int32 minw, l_int32 minh) { l_int32 n, i, w, h, d; BOX *box; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaMorphSequenceByComponent"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); if ((n = pixaGetCount(pixas)) == 0) return (PIXA *)ERROR_PTR("no pix in pixas", procName, NULL); if (n != pixaGetBoxaCount(pixas)) L_WARNING("boxa size != n\n", procName); pixaGetPixDimensions(pixas, 0, NULL, NULL, &d); if (d != 1) return (PIXA *)ERROR_PTR("depth not 1 bpp", procName, NULL); if (!sequence) return (PIXA *)ERROR_PTR("sequence not defined", procName, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); for (i = 0; i < n; i++) { pixaGetPixDimensions(pixas, i, &w, &h, NULL); if (w >= minw && h >= minh) { if ((pix1 = pixaGetPix(pixas, i, L_CLONE)) == NULL) return (PIXA *)ERROR_PTR("pix1 not found", procName, NULL); if ((pix2 = pixMorphCompSequence(pix1, sequence, 0)) == NULL) return (PIXA *)ERROR_PTR("pix2 not made", procName, NULL); pixaAddPix(pixad, pix2, L_INSERT); box = pixaGetBox(pixas, i, L_COPY); pixaAddBox(pixad, box, L_INSERT); pixDestroy(&pix1); } } return pixad; } /*-----------------------------------------------------------------* * Morph sequence operation on each region * *-----------------------------------------------------------------*/ /*! * pixMorphSequenceByRegion() * * Input: pixs (1 bpp) * pixm (mask specifying regions) * sequence (string specifying sequence) * connectivity (4 or 8, used on mask) * minw (minimum width to consider; use 0 or 1 for any width) * minh (minimum height to consider; use 0 or 1 for any height) * &boxa ( return boxa of c.c. in pixm) * Return: pixd, or null on error * * Notes: * (1) See pixMorphCompSequence() for composing operation sequences. * (2) This operates separately on the region in pixs corresponding * to each c.c. in the mask pixm. It differs from * pixMorphSequenceByComponent() in that the latter does not have * a pixm (mask), but instead operates independently on each * component in pixs. * (3) Dilation will NOT increase the region size; the result * is clipped to the size of the mask region. This is necessary * to make regions independent after the operation. * (4) You can specify that the width and/or height of a region must * equal or exceed a minimum size for the operation to take place. * (5) Use NULL for @pboxa to avoid returning the boxa. */ PIX * pixMorphSequenceByRegion(PIX *pixs, PIX *pixm, const char *sequence, l_int32 connectivity, l_int32 minw, l_int32 minh, BOXA **pboxa) { l_int32 n, i, x, y, w, h; BOXA *boxa; PIX *pix, *pixd; PIXA *pixam, *pixad; PROCNAME("pixMorphSequenceByRegion"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixm) return (PIX *)ERROR_PTR("pixm not defined", procName, NULL); if (pixGetDepth(pixs) != 1 || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixs and pixm not both 1 bpp", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; /* Get the c.c. of the mask */ if ((boxa = pixConnComp(pixm, &pixam, connectivity)) == NULL) return (PIX *)ERROR_PTR("boxa not made", procName, NULL); /* Operate on each region in pixs independently */ pixad = pixaMorphSequenceByRegion(pixs, pixam, sequence, minw, minh); pixaDestroy(&pixam); boxaDestroy(&boxa); if (!pixad) return (PIX *)ERROR_PTR("pixad not made", procName, NULL); /* Display the result out into pixd */ pixd = pixCreateTemplate(pixs); n = pixaGetCount(pixad); for (i = 0; i < n; i++) { pixaGetBoxGeometry(pixad, i, &x, &y, &w, &h); pix = pixaGetPix(pixad, i, L_CLONE); pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix, 0, 0); pixDestroy(&pix); } if (pboxa) *pboxa = pixaGetBoxa(pixad, L_CLONE); pixaDestroy(&pixad); return pixd; } /*! * pixaMorphSequenceByRegion() * * Input: pixs (1 bpp) * pixam (of 1 bpp mask elements) * sequence (string specifying sequence) * minw (minimum width to consider; use 0 or 1 for any width) * minh (minimum height to consider; use 0 or 1 for any height) * Return: pixad, or null on error * * Notes: * (1) See pixMorphSequence() for composing operation sequences. * (2) This operates separately on each region in the input pixs * defined by the components in pixam. * (3) You can specify that the width and/or height of a mask * component must equal or exceed a minimum size for the * operation to take place. * (4) The input pixam should have a boxa giving the locations * of the regions in pixs. */ PIXA * pixaMorphSequenceByRegion(PIX *pixs, PIXA *pixam, const char *sequence, l_int32 minw, l_int32 minh) { l_int32 n, i, w, h, samedepth, maxdepth, fullpa, fullba; BOX *box; PIX *pix1, *pix2, *pix3; PIXA *pixad; PROCNAME("pixaMorphSequenceByRegion"); if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIXA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (!sequence) return (PIXA *)ERROR_PTR("sequence not defined", procName, NULL); if (!pixam) return (PIXA *)ERROR_PTR("pixam not defined", procName, NULL); samedepth = pixaVerifyDepth(pixam, &maxdepth); if (samedepth != 1 && maxdepth != 1) return (PIXA *)ERROR_PTR("mask depth not 1 bpp", procName, NULL); pixaIsFull(pixam, &fullpa, &fullba); if (!fullpa || !fullba) return (PIXA *)ERROR_PTR("missing comps in pixam", procName, NULL); n = pixaGetCount(pixam); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; if ((pixad = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixad not made", procName, NULL); /* Use the rectangle to remove the appropriate part of pixs; * then AND with the mask component to get the actual fg * of pixs that is under the mask component. */ for (i = 0; i < n; i++) { pixaGetPixDimensions(pixam, i, &w, &h, NULL); if (w >= minw && h >= minh) { pix1 = pixaGetPix(pixam, i, L_CLONE); box = pixaGetBox(pixam, i, L_COPY); pix2 = pixClipRectangle(pixs, box, NULL); pixAnd(pix2, pix2, pix1); pix3 = pixMorphCompSequence(pix2, sequence, 0); pixDestroy(&pix1); pixDestroy(&pix2); if (!pix3) { boxDestroy(&box); pixaDestroy(&pixad); L_ERROR("pix3 not made in iter %d; aborting\n", procName, i); break; } pixaAddPix(pixad, pix3, L_INSERT); pixaAddBox(pixad, box, L_INSERT); } } return pixad; } /*-----------------------------------------------------------------* * Union and intersection of parallel composite operations * *-----------------------------------------------------------------*/ /*! * pixUnionOfMorphOps() * * Input: pixs (binary) * sela * type (L_MORPH_DILATE, etc.) * Return: pixd (union of the specified morphological operation * on pixs for each Sel in the Sela), or null on error */ PIX * pixUnionOfMorphOps(PIX *pixs, SELA *sela, l_int32 type) { l_int32 n, i; PIX *pixt, *pixd; SEL *sel; PROCNAME("pixUnionOfMorphOps"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!sela) return (PIX *)ERROR_PTR("sela not defined", procName, NULL); n = selaGetCount(sela); if (n == 0) return (PIX *)ERROR_PTR("no sels in sela", procName, NULL); if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && type != L_MORPH_OPEN && type != L_MORPH_CLOSE && type != L_MORPH_HMT) return (PIX *)ERROR_PTR("invalid type", procName, NULL); pixd = pixCreateTemplate(pixs); for (i = 0; i < n; i++) { sel = selaGetSel(sela, i); if (type == L_MORPH_DILATE) pixt = pixDilate(NULL, pixs, sel); else if (type == L_MORPH_ERODE) pixt = pixErode(NULL, pixs, sel); else if (type == L_MORPH_OPEN) pixt = pixOpen(NULL, pixs, sel); else if (type == L_MORPH_CLOSE) pixt = pixClose(NULL, pixs, sel); else /* type == L_MORPH_HMT */ pixt = pixHMT(NULL, pixs, sel); pixOr(pixd, pixd, pixt); pixDestroy(&pixt); } return pixd; } /*! * pixIntersectionOfMorphOps() * * Input: pixs (binary) * sela * type (L_MORPH_DILATE, etc.) * Return: pixd (intersection of the specified morphological operation * on pixs for each Sel in the Sela), or null on error */ PIX * pixIntersectionOfMorphOps(PIX *pixs, SELA *sela, l_int32 type) { l_int32 n, i; PIX *pixt, *pixd; SEL *sel; PROCNAME("pixIntersectionOfMorphOps"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!sela) return (PIX *)ERROR_PTR("sela not defined", procName, NULL); n = selaGetCount(sela); if (n == 0) return (PIX *)ERROR_PTR("no sels in sela", procName, NULL); if (type != L_MORPH_DILATE && type != L_MORPH_ERODE && type != L_MORPH_OPEN && type != L_MORPH_CLOSE && type != L_MORPH_HMT) return (PIX *)ERROR_PTR("invalid type", procName, NULL); pixd = pixCreateTemplate(pixs); pixSetAll(pixd); for (i = 0; i < n; i++) { sel = selaGetSel(sela, i); if (type == L_MORPH_DILATE) pixt = pixDilate(NULL, pixs, sel); else if (type == L_MORPH_ERODE) pixt = pixErode(NULL, pixs, sel); else if (type == L_MORPH_OPEN) pixt = pixOpen(NULL, pixs, sel); else if (type == L_MORPH_CLOSE) pixt = pixClose(NULL, pixs, sel); else /* type == L_MORPH_HMT */ pixt = pixHMT(NULL, pixs, sel); pixAnd(pixd, pixd, pixt); pixDestroy(&pixt); } return pixd; } /*-----------------------------------------------------------------* * Selective connected component filling * *-----------------------------------------------------------------*/ /*! * pixSelectiveConnCompFill() * * Input: pixs (binary) * connectivity (4 or 8) * minw (minimum width to consider; use 0 or 1 for any width) * minh (minimum height to consider; use 0 or 1 for any height) * Return: pix (with holes filled in selected c.c.), or null on error */ PIX * pixSelectiveConnCompFill(PIX *pixs, l_int32 connectivity, l_int32 minw, l_int32 minh) { l_int32 n, i, x, y, w, h; BOXA *boxa; PIX *pix1, *pix2, *pixd; PIXA *pixa; PROCNAME("pixSelectiveConnCompFill"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if (minw <= 0) minw = 1; if (minh <= 0) minh = 1; if ((boxa = pixConnComp(pixs, &pixa, connectivity)) == NULL) return (PIX *)ERROR_PTR("boxa not made", procName, NULL); n = boxaGetCount(boxa); pixd = pixCopy(NULL, pixs); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); if (w >= minw && h >= minh) { pix1 = pixaGetPix(pixa, i, L_CLONE); if ((pix2 = pixHolesByFilling(pix1, 12 - connectivity)) == NULL) { L_ERROR("pix2 not made in iter %d\n", procName, i); pixDestroy(&pix1); continue; } pixRasterop(pixd, x, y, w, h, PIX_PAINT, pix2, 0, 0); pixDestroy(&pix1); pixDestroy(&pix2); } } pixaDestroy(&pixa); boxaDestroy(&boxa); return pixd; } /*-----------------------------------------------------------------* * Removal of matched patterns * *-----------------------------------------------------------------*/ /*! * pixRemoveMatchedPattern() * * Input: pixs (input image, 1 bpp) * pixp (pattern to be removed from image, 1 bpp) * pixe (image after erosion by Sel that approximates pixp, 1 bpp) * x0, y0 (center of Sel) * dsize (number of pixels on each side by which pixp is * dilated before being subtracted from pixs; * valid values are {0, 1, 2, 3, 4}) * Return: 0 if OK, 1 on error * * Notes: * (1) This is in-place. * (2) You can use various functions in selgen to create a Sel * that is used to generate pixe from pixs. * (3) This function is applied after pixe has been computed. * It finds the centroid of each c.c., and subtracts * (the appropriately dilated version of) pixp, with the center * of the Sel used to align pixp with pixs. */ l_int32 pixRemoveMatchedPattern(PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_int32 dsize) { l_int32 i, nc, x, y, w, h, xb, yb; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixa; PTA *pta; SEL *sel; PROCNAME("pixRemoveMatchedPattern"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixp) return ERROR_INT("pixp not defined", procName, 1); if (!pixe) return ERROR_INT("pixe not defined", procName, 1); if (pixGetDepth(pixs) != 1 || pixGetDepth(pixp) != 1 || pixGetDepth(pixe) != 1) return ERROR_INT("all input pix not 1 bpp", procName, 1); if (dsize < 0 || dsize > 4) return ERROR_INT("dsize not in {0,1,2,3,4}", procName, 1); /* Find the connected components and their centroids */ boxa = pixConnComp(pixe, &pixa, 8); if ((nc = boxaGetCount(boxa)) == 0) { L_WARNING("no matched patterns\n", procName); boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } pta = pixaCentroids(pixa); pixaDestroy(&pixa); /* Optionally dilate the pattern, first adding a border that * is large enough to accommodate the dilated pixels */ sel = NULL; if (dsize > 0) { sel = selCreateBrick(2 * dsize + 1, 2 * dsize + 1, dsize, dsize, SEL_HIT); pix1 = pixAddBorder(pixp, dsize, 0); pix2 = pixDilate(NULL, pix1, sel); selDestroy(&sel); pixDestroy(&pix1); } else { pix2 = pixClone(pixp); } /* Subtract out each dilated pattern. The centroid of each * component is located at: * (box->x + x, box->y + y) * and the 'center' of the pattern used in making pixe is located at * (x0 + dsize, (y0 + dsize) * relative to the UL corner of the pattern. The center of the * pattern is placed at the center of the component. */ pixGetDimensions(pix2, &w, &h, NULL); for (i = 0; i < nc; i++) { ptaGetIPt(pta, i, &x, &y); boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); pixRasterop(pixs, xb + x - x0 - dsize, yb + y - y0 - dsize, w, h, PIX_DST & PIX_NOT(PIX_SRC), pix2, 0, 0); } boxaDestroy(&boxa); ptaDestroy(&pta); pixDestroy(&pix2); return 0; } /*-----------------------------------------------------------------* * Display of matched patterns * *-----------------------------------------------------------------*/ /*! * pixDisplayMatchedPattern() * * Input: pixs (input image, 1 bpp) * pixp (pattern to be removed from image, 1 bpp) * pixe (image after erosion by Sel that approximates pixp, 1 bpp) * x0, y0 (center of Sel) * color (to paint the matched patterns; 0xrrggbb00) * scale (reduction factor for output pixd) * nlevels (if scale < 1.0, threshold to this number of levels) * Return: pixd (8 bpp, colormapped), or null on error * * Notes: * (1) A 4 bpp colormapped image is generated. * (2) If scale <= 1.0, do scale to gray for the output, and threshold * to nlevels of gray. * (3) You can use various functions in selgen to create a Sel * that will generate pixe from pixs. * (4) This function is applied after pixe has been computed. * It finds the centroid of each c.c., and colors the output * pixels using pixp (appropriately aligned) as a stencil. * Alignment is done using the origin of the Sel and the * centroid of the eroded image to place the stencil pixp. */ PIX * pixDisplayMatchedPattern(PIX *pixs, PIX *pixp, PIX *pixe, l_int32 x0, l_int32 y0, l_uint32 color, l_float32 scale, l_int32 nlevels) { l_int32 i, nc, xb, yb, x, y, xi, yi, rval, gval, bval; BOXA *boxa; PIX *pixd, *pixt, *pixps; PIXA *pixa; PTA *pta; PIXCMAP *cmap; PROCNAME("pixDisplayMatchedPattern"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixp) return (PIX *)ERROR_PTR("pixp not defined", procName, NULL); if (!pixe) return (PIX *)ERROR_PTR("pixe not defined", procName, NULL); if (pixGetDepth(pixs) != 1 || pixGetDepth(pixp) != 1 || pixGetDepth(pixe) != 1) return (PIX *)ERROR_PTR("all input pix not 1 bpp", procName, NULL); if (scale > 1.0 || scale <= 0.0) { L_WARNING("scale > 1.0 or < 0.0; setting to 1.0\n", procName); scale = 1.0; } /* Find the connected components and their centroids */ boxa = pixConnComp(pixe, &pixa, 8); if ((nc = boxaGetCount(boxa)) == 0) { L_WARNING("no matched patterns\n", procName); boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } pta = pixaCentroids(pixa); extractRGBValues(color, &rval, &gval, &bval); if (scale == 1.0) { /* output 4 bpp at full resolution */ pixd = pixConvert1To4(NULL, pixs, 0, 1); cmap = pixcmapCreate(4); pixcmapAddColor(cmap, 255, 255, 255); pixcmapAddColor(cmap, 0, 0, 0); pixSetColormap(pixd, cmap); /* Paint through pixp for each match location. The centroid of each * component in pixe is located at: * (box->x + x, box->y + y) * and the 'center' of the pattern used in making pixe is located at * (x0, y0) * relative to the UL corner of the pattern. The center of the * pattern is placed at the center of the component. */ for (i = 0; i < nc; i++) { ptaGetIPt(pta, i, &x, &y); boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); pixSetMaskedCmap(pixd, pixp, xb + x - x0, yb + y - y0, rval, gval, bval); } } else { /* output 4 bpp downscaled */ pixt = pixScaleToGray(pixs, scale); pixd = pixThresholdTo4bpp(pixt, nlevels, 1); pixps = pixScaleBySampling(pixp, scale, scale); for (i = 0; i < nc; i++) { ptaGetIPt(pta, i, &x, &y); boxaGetBoxGeometry(boxa, i, &xb, &yb, NULL, NULL); xi = (l_int32)(scale * (xb + x - x0)); yi = (l_int32)(scale * (yb + y - y0)); pixSetMaskedCmap(pixd, pixps, xi, yi, rval, gval, bval); } pixDestroy(&pixt); pixDestroy(&pixps); } boxaDestroy(&boxa); pixaDestroy(&pixa); ptaDestroy(&pta); return pixd; } /*-----------------------------------------------------------------* * Iterative morphological seed filling * *-----------------------------------------------------------------*/ /*! * pixSeedfillMorph() * * Input: pixs (seed) * pixm (mask) * maxiters (use 0 to go to completion) * connectivity (4 or 8) * Return: pixd (after filling into the mask) or null on error * * Notes: * (1) This is in general a very inefficient method for filling * from a seed into a mask. Use it for a small number of iterations, * but if you expect more than a few iterations, use * pixSeedfillBinary(). * (2) We use a 3x3 brick SEL for 8-cc filling and a 3x3 plus SEL for 4-cc. */ PIX * pixSeedfillMorph(PIX *pixs, PIX *pixm, l_int32 maxiters, l_int32 connectivity) { l_int32 same, i; PIX *pixt, *pixd, *temp; SEL *sel_3; PROCNAME("pixSeedfillMorph"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!pixm) return (PIX *)ERROR_PTR("mask pix not defined", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PIX *)ERROR_PTR("connectivity not in {4,8}", procName, NULL); if (maxiters <= 0) maxiters = 1000; if (pixSizesEqual(pixs, pixm) == 0) return (PIX *)ERROR_PTR("pix sizes unequal", procName, NULL); if ((sel_3 = selCreateBrick(3, 3, 1, 1, 1)) == NULL) return (PIX *)ERROR_PTR("sel_3 not made", procName, NULL); if (connectivity == 4) { /* remove corner hits to make a '+' */ selSetElement(sel_3, 0, 0, SEL_DONT_CARE); selSetElement(sel_3, 2, 2, SEL_DONT_CARE); selSetElement(sel_3, 2, 0, SEL_DONT_CARE); selSetElement(sel_3, 0, 2, SEL_DONT_CARE); } pixt = pixCopy(NULL, pixs); pixd = pixCreateTemplate(pixs); for (i = 1; i <= maxiters; i++) { pixDilate(pixd, pixt, sel_3); pixAnd(pixd, pixd, pixm); pixEqual(pixd, pixt, &same); if (same || i == maxiters) break; else SWAP(pixt, pixd); } fprintf(stderr, " Num iters in binary reconstruction = %d\n", i); pixDestroy(&pixt); selDestroy(&sel_3); return pixd; } /*-----------------------------------------------------------------* * Granulometry on binary images * *-----------------------------------------------------------------*/ /*! * pixRunHistogramMorph() * * Input: pixs * runtype (L_RUN_OFF, L_RUN_ON) * direction (L_HORIZ, L_VERT) * maxsize (size of largest runlength counted) * Return: numa of run-lengths */ NUMA * pixRunHistogramMorph(PIX *pixs, l_int32 runtype, l_int32 direction, l_int32 maxsize) { l_int32 count, i, size; l_float32 val; NUMA *na, *nah; PIX *pix1, *pix2, *pix3; SEL *sel_2a; PROCNAME("pixRunHistogramMorph"); if (!pixs) return (NUMA *)ERROR_PTR("seed pix not defined", procName, NULL); if (runtype != L_RUN_OFF && runtype != L_RUN_ON) return (NUMA *)ERROR_PTR("invalid run type", procName, NULL); if (direction != L_HORIZ && direction != L_VERT) return (NUMA *)ERROR_PTR("direction not in {L_HORIZ, L_VERT}", procName, NULL); if (pixGetDepth(pixs) != 1) return (NUMA *)ERROR_PTR("pixs must be binary", procName, NULL); if (direction == L_HORIZ) sel_2a = selCreateBrick(1, 2, 0, 0, 1); else /* direction == L_VERT */ sel_2a = selCreateBrick(2, 1, 0, 0, 1); if (!sel_2a) return (NUMA *)ERROR_PTR("sel_2a not made", procName, NULL); if (runtype == L_RUN_OFF) { if ((pix1 = pixCopy(NULL, pixs)) == NULL) return (NUMA *)ERROR_PTR("pix1 not made", procName, NULL); pixInvert(pix1, pix1); } else { /* runtype == L_RUN_ON */ pix1 = pixClone(pixs); } /* Get pixel counts at different stages of erosion */ na = numaCreate(0); pix2 = pixCreateTemplate(pixs); pix3 = pixCreateTemplate(pixs); pixCountPixels(pix1, &count, NULL); numaAddNumber(na, count); pixErode(pix2, pix1, sel_2a); pixCountPixels(pix2, &count, NULL); numaAddNumber(na, count); for (i = 0; i < maxsize / 2; i++) { pixErode(pix3, pix2, sel_2a); pixCountPixels(pix3, &count, NULL); numaAddNumber(na, count); pixErode(pix2, pix3, sel_2a); pixCountPixels(pix2, &count, NULL); numaAddNumber(na, count); } /* Compute length histogram */ size = numaGetCount(na); nah = numaCreate(size); numaAddNumber(nah, 0); /* number at length 0 */ for (i = 1; i < size - 1; i++) { val = na->array[i+1] - 2 * na->array[i] + na->array[i-1]; numaAddNumber(nah, val); } pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); selDestroy(&sel_2a); numaDestroy(&na); return nah; } /*-----------------------------------------------------------------* * Composite operations on grayscale images * *-----------------------------------------------------------------*/ /*! * pixTophat() * * Input: pixs * hsize (of Sel; must be odd; origin implicitly in center) * vsize (ditto) * type (L_TOPHAT_WHITE: image - opening * L_TOPHAT_BLACK: closing - image) * Return: pixd, or null on error * * Notes: * (1) Sel is a brick with all elements being hits * (2) If hsize = vsize = 1, returns an image with all 0 data. * (3) The L_TOPHAT_WHITE flag emphasizes small bright regions, * whereas the L_TOPHAT_BLACK flag emphasizes small dark regions. * The L_TOPHAT_WHITE tophat can be accomplished by doing a * L_TOPHAT_BLACK tophat on the inverse, or v.v. */ PIX * pixTophat(PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 type) { PIX *pixt, *pixd; PROCNAME("pixTophat"); if (!pixs) return (PIX *)ERROR_PTR("seed pix not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", procName); vsize++; } if (type != L_TOPHAT_WHITE && type != L_TOPHAT_BLACK) return (PIX *)ERROR_PTR("type must be L_TOPHAT_BLACK or L_TOPHAT_WHITE", procName, NULL); if (hsize == 1 && vsize == 1) return pixCreateTemplate(pixs); switch (type) { case L_TOPHAT_WHITE: if ((pixt = pixOpenGray(pixs, hsize, vsize)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pixd = pixSubtractGray(NULL, pixs, pixt); pixDestroy(&pixt); break; case L_TOPHAT_BLACK: if ((pixd = pixCloseGray(pixs, hsize, vsize)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixSubtractGray(pixd, pixd, pixs); break; default: return (PIX *)ERROR_PTR("invalid type", procName, NULL); } return pixd; } /*! * pixHDome() * * Input: pixs (8 bpp, filling mask) * height (of seed below the filling maskhdome; must be >= 0) * connectivity (4 or 8) * Return: pixd (8 bpp), or null on error * * Notes: * (1) It is more efficient to use a connectivity of 4 for the fill. * (2) This fills bumps to some level, and extracts the unfilled * part of the bump. To extract the troughs of basins, first * invert pixs and then apply pixHDome(). * (3) It is useful to compare the HDome operation with the TopHat. * The latter extracts peaks or valleys that have a width * not exceeding the size of the structuring element used * in the opening or closing, rsp. The height of the peak is * irrelevant. By contrast, for the HDome, the gray seedfill * is used to extract all peaks that have a height not exceeding * a given value, regardless of their width! * (4) Slightly more precisely, suppose you set 'height' = 40. * Then all bumps in pixs with a height greater than or equal * to 40 become, in pixd, bumps with a max value of exactly 40. * All shorter bumps have a max value in pixd equal to the height * of the bump. * (5) The method: the filling mask, pixs, is the image whose peaks * are to be extracted. The height of a peak is the distance * between the top of the peak and the highest "leak" to the * outside -- think of a sombrero, where the leak occurs * at the highest point on the rim. * (a) Generate a seed, pixd, by subtracting some value, p, from * each pixel in the filling mask, pixs. The value p is * the 'height' input to this function. * (b) Fill in pixd starting with this seed, clipping by pixs, * in the way described in seedfillGrayLow(). The filling * stops before the peaks in pixs are filled. * For peaks that have a height > p, pixd is filled to * the level equal to the (top-of-the-peak - p). * For peaks of height < p, the peak is left unfilled * from its highest saddle point (the leak to the outside). * (c) Subtract the filled seed (pixd) from the filling mask (pixs). * Note that in this procedure, everything is done starting * with the filling mask, pixs. * (6) For segmentation, the resulting image, pixd, can be thresholded * and used as a seed for another filling operation. */ PIX * pixHDome(PIX *pixs, l_int32 height, l_int32 connectivity) { PIX *pixsd, *pixd; PROCNAME("pixHDome"); if (!pixs) return (PIX *)ERROR_PTR("src pix not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (height < 0) return (PIX *)ERROR_PTR("height not >= 0", procName, NULL); if (height == 0) return pixCreateTemplate(pixs); if ((pixsd = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixsd not made", procName, NULL); pixAddConstantGray(pixsd, -height); pixSeedfillGray(pixsd, pixs, connectivity); pixd = pixSubtractGray(NULL, pixs, pixsd); pixDestroy(&pixsd); return pixd; } /*! * pixFastTophat() * * Input: pixs * xsize (width of max/min op, smoothing; any integer >= 1) * ysize (height of max/min op, smoothing; any integer >= 1) * type (L_TOPHAT_WHITE: image - min * L_TOPHAT_BLACK: max - image) * Return: pixd, or null on error * * Notes: * (1) Don't be fooled. This is NOT a tophat. It is a tophat-like * operation, where the result is similar to what you'd get * if you used an erosion instead of an opening, or a dilation * instead of a closing. * (2) Instead of opening or closing at full resolution, it does * a fast downscale/minmax operation, then a quick small smoothing * at low res, a replicative expansion of the "background" * to full res, and finally a removal of the background level * from the input image. The smoothing step may not be important. * (3) It does not remove noise as well as a tophat, but it is * 5 to 10 times faster. * If you need the preciseness of the tophat, don't use this. * (4) The L_TOPHAT_WHITE flag emphasizes small bright regions, * whereas the L_TOPHAT_BLACK flag emphasizes small dark regions. */ PIX * pixFastTophat(PIX *pixs, l_int32 xsize, l_int32 ysize, l_int32 type) { PIX *pix1, *pix2, *pix3, *pixd; PROCNAME("pixFastTophat"); if (!pixs) return (PIX *)ERROR_PTR("seed pix not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (xsize < 1 || ysize < 1) return (PIX *)ERROR_PTR("size < 1", procName, NULL); if (type != L_TOPHAT_WHITE && type != L_TOPHAT_BLACK) return (PIX *)ERROR_PTR("type must be L_TOPHAT_BLACK or L_TOPHAT_WHITE", procName, NULL); if (xsize == 1 && ysize == 1) return pixCreateTemplate(pixs); switch (type) { case L_TOPHAT_WHITE: if ((pix1 = pixScaleGrayMinMax(pixs, xsize, ysize, L_CHOOSE_MIN)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); pix2 = pixBlockconv(pix1, 1, 1); /* small smoothing */ pix3 = pixScaleBySampling(pix2, xsize, ysize); pixd = pixSubtractGray(NULL, pixs, pix3); pixDestroy(&pix3); break; case L_TOPHAT_BLACK: if ((pix1 = pixScaleGrayMinMax(pixs, xsize, ysize, L_CHOOSE_MAX)) == NULL) return (PIX *)ERROR_PTR("pix1 not made", procName, NULL); pix2 = pixBlockconv(pix1, 1, 1); /* small smoothing */ pixd = pixScaleBySampling(pix2, xsize, ysize); pixSubtractGray(pixd, pixd, pixs); break; default: return (PIX *)ERROR_PTR("invalid type", procName, NULL); } pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } /*! * pixMorphGradient() * * Input: pixs * hsize (of Sel; must be odd; origin implicitly in center) * vsize (ditto) * smoothing (half-width of convolution smoothing filter. * The width is (2 * smoothing + 1), so 0 is no-op. * Return: pixd, or null on error */ PIX * pixMorphGradient(PIX *pixs, l_int32 hsize, l_int32 vsize, l_int32 smoothing) { PIX *pixg, *pixd; PROCNAME("pixMorphGradient"); if (!pixs) return (PIX *)ERROR_PTR("seed pix not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (hsize < 1 || vsize < 1) return (PIX *)ERROR_PTR("hsize or vsize < 1", procName, NULL); if ((hsize & 1) == 0 ) { L_WARNING("horiz sel size must be odd; increasing by 1\n", procName); hsize++; } if ((vsize & 1) == 0 ) { L_WARNING("vert sel size must be odd; increasing by 1\n", procName); vsize++; } /* Optionally smooth first to remove noise. * If smoothing is 0, just get a copy */ pixg = pixBlockconvGray(pixs, NULL, smoothing, smoothing); /* This gives approximately the gradient of a transition */ pixd = pixDilateGray(pixg, hsize, vsize); pixSubtractGray(pixd, pixd, pixg); pixDestroy(&pixg); return pixd; } /*-----------------------------------------------------------------* * Centroid of component * *-----------------------------------------------------------------*/ /*! * pixaCentroids() * * Input: pixa of components (1 or 8 bpp) * Return: pta of centroids relative to the UL corner of * each pix, or null on error * * Notes: * (1) An error message is returned if any pix has something other * than 1 bpp or 8 bpp depth, and the centroid from that pix * is saved as (0, 0). */ PTA * pixaCentroids(PIXA *pixa) { l_int32 i, n; l_int32 *centtab = NULL; l_int32 *sumtab = NULL; l_float32 x, y; PIX *pix; PTA *pta; PROCNAME("pixaCentroids"); if (!pixa) return (PTA *)ERROR_PTR("pixa not defined", procName, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PTA *)ERROR_PTR("no pix in pixa", procName, NULL); if ((pta = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("pta not defined", procName, NULL); centtab = makePixelCentroidTab8(); sumtab = makePixelSumTab8(); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if (pixCentroid(pix, centtab, sumtab, &x, &y) == 1) L_ERROR("centroid failure for pix %d\n", procName, i); pixDestroy(&pix); ptaAddPt(pta, x, y); } FREE(centtab); FREE(sumtab); return pta; } /*! * pixCentroid() * * Input: pix (1 or 8 bpp) * centtab ( table for finding centroids; can be null) * sumtab ( table for finding pixel sums; can be null) * &xave, &yave ( coordinates of centroid, relative to * the UL corner of the pix) * Return: 0 if OK, 1 on error * * Notes: * (1) Any table not passed in will be made internally and destroyed * after use. */ l_int32 pixCentroid(PIX *pix, l_int32 *centtab, l_int32 *sumtab, l_float32 *pxave, l_float32 *pyave) { l_int32 w, h, d, i, j, wpl, pixsum, rowsum, val; l_float32 xsum, ysum; l_uint32 *data, *line; l_uint32 word; l_uint8 byte; l_int32 *ctab, *stab; PROCNAME("pixCentroid"); if (!pxave || !pyave) return ERROR_INT("&pxave and &pyave not defined", procName, 1); *pxave = *pyave = 0.0; if (!pix) return ERROR_INT("pix not defined", procName, 1); pixGetDimensions(pix, &w, &h, &d); if (d != 1 && d != 8) return ERROR_INT("pix not 1 or 8 bpp", procName, 1); if (!centtab) ctab = makePixelCentroidTab8(); else ctab = centtab; if (!sumtab) stab = makePixelSumTab8(); else stab = sumtab; data = pixGetData(pix); wpl = pixGetWpl(pix); xsum = ysum = 0.0; pixsum = 0; if (d == 1) { for (i = 0; i < h; i++) { /* The body of this loop computes the sum of the set * (1) bits on this row, weighted by their distance * from the left edge of pix, and accumulates that into * xsum; it accumulates their distance from the top * edge of pix into ysum, and their total count into * pixsum. It's equivalent to * for (j = 0; j < w; j++) { * if (GET_DATA_BIT(line, j)) { * xsum += j; * ysum += i; * pixsum++; * } * } */ line = data + wpl * i; rowsum = 0; for (j = 0; j < wpl; j++) { word = line[j]; if (word) { byte = word & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + (j * 32 + 24) * stab[byte]; byte = (word >> 8) & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + (j * 32 + 16) * stab[byte]; byte = (word >> 16) & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + (j * 32 + 8) * stab[byte]; byte = (word >> 24) & 0xff; rowsum += stab[byte]; xsum += ctab[byte] + j * 32 * stab[byte]; } } pixsum += rowsum; ysum += rowsum * i; } if (pixsum == 0) { L_WARNING("no ON pixels in pix\n", procName); } else { *pxave = xsum / (l_float32)pixsum; *pyave = ysum / (l_float32)pixsum; } } else { /* d == 8 */ for (i = 0; i < h; i++) { line = data + wpl * i; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line, j); xsum += val * j; ysum += val * i; pixsum += val; } } if (pixsum == 0) { L_WARNING("all pixels are 0\n", procName); } else { *pxave = xsum / (l_float32)pixsum; *pyave = ysum / (l_float32)pixsum; } } if (!centtab) FREE(ctab); if (!sumtab) FREE(stab); return 0; } leptonica-1.70/src/graphics.c0000640000175000017500000021563512244222652014251 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * graphics.c * * Pta generation for arbitrary shapes built with lines * PTA *generatePtaLine() * PTA *generatePtaWideLine() * PTA *generatePtaBox() * PTA *generatePtaBoxa() * PTA *generatePtaHashBox() * PTA *generatePtaHashBoxa() * PTAA *generatePtaaBoxa() * PTAA *generatePtaaHashBoxa() * PTA *generatePtaPolyline() * PTA *convertPtaLineTo4cc() * PTA *generatePtaFilledCircle() * PTA *generatePtaFilledSquare() * PTA *generatePtaLineFromPt() * l_int32 locatePtRadially() * * Pta generation for plotting functions on images * PTA *generatePlotPtaFromNuma() * * Pta rendering * l_int32 pixRenderPta() * l_int32 pixRenderPtaArb() * l_int32 pixRenderPtaBlend() * * Rendering of arbitrary shapes built with lines * l_int32 pixRenderLine() * l_int32 pixRenderLineArb() * l_int32 pixRenderLineBlend() * * l_int32 pixRenderBox() * l_int32 pixRenderBoxArb() * l_int32 pixRenderBoxBlend() * * l_int32 pixRenderBoxa() * l_int32 pixRenderBoxaArb() * l_int32 pixRenderBoxaBlend() * * l_int32 pixRenderHashBox() * l_int32 pixRenderHashBoxArb() * l_int32 pixRenderHashBoxBlend() * * l_int32 pixRenderHashBoxa() * l_int32 pixRenderHashBoxaArb() * l_int32 pixRenderHashBoxaBlend() * * l_int32 pixRenderPolyline() * l_int32 pixRenderPolylineArb() * l_int32 pixRenderPolylineBlend() * * l_int32 pixRenderRandomCmapPtaa() * * Rendering and filling of polygons * PIX *pixRenderPolygon() * PIX *pixFillPolygon() * * Contour rendering on grayscale images * PIX *pixRenderContours() * PIX *fpixAutoRenderContours() * PIX *fpixRenderContours() * * The line rendering functions are relatively crude, but they * get the job done for most simple situations. We use the pta * as an intermediate data structure. A pta is generated * for a line. One of two rendering functions are used to * render this onto a Pix. */ #include #include #include "allheaders.h" /*------------------------------------------------------------------* * Pta generation for arbitrary shapes built with lines * *------------------------------------------------------------------*/ /*! * generatePtaLine() * * Input: x1, y1 (end point 1) * x2, y2 (end point 2) * Return: pta, or null on error * * Notes: * (1) Uses Bresenham line drawing, which results in an 8-connected line. */ PTA * generatePtaLine(l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2) { l_int32 npts, diff, getyofx, sign, i, x, y; l_float32 slope; PTA *pta; PROCNAME("generatePtaLine"); /* Generate line parameters */ if (L_ABS(x2 - x1) >= L_ABS(y2 - y1)) { getyofx = TRUE; npts = L_ABS(x2 - x1) + 1; diff = x2 - x1; sign = L_SIGN(x2 - x1); slope = (l_float32)(sign * (y2 - y1)) / (l_float32)diff; } else { getyofx = FALSE; npts = L_ABS(y2 - y1) + 1; diff = y2 - y1; sign = L_SIGN(y2 - y1); slope = (l_float32)(sign * (x2 - x1)) / (l_float32)diff; } if ((pta = ptaCreate(npts)) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); if (npts == 1) { /* degenerate case */ ptaAddPt(pta, x1, y1); return pta; } /* Generate the set of points */ if (getyofx) { /* y = y(x) */ for (i = 0; i < npts; i++) { x = x1 + sign * i; y = (l_int32)(y1 + (l_float32)i * slope + 0.5); ptaAddPt(pta, x, y); } } else { /* x = x(y) */ for (i = 0; i < npts; i++) { x = (l_int32)(x1 + (l_float32)i * slope + 0.5); y = y1 + sign * i; ptaAddPt(pta, x, y); } } return pta; } /*! * generatePtaWideLine() * * Input: x1, y1 (end point 1) * x2, y2 (end point 2) * width * Return: ptaj, or null on error */ PTA * generatePtaWideLine(l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width) { l_int32 i, x1a, x2a, y1a, y2a; PTA *pta, *ptaj; PROCNAME("generatePtaWideLine"); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if ((ptaj = generatePtaLine(x1, y1, x2, y2)) == NULL) return (PTA *)ERROR_PTR("ptaj not made", procName, NULL); if (width == 1) return ptaj; /* width > 1; estimate line direction & join */ if (L_ABS(x1 - x2) > L_ABS(y1 - y2)) { /* "horizontal" line */ for (i = 1; i < width; i++) { if ((i & 1) == 1) { /* place above */ y1a = y1 - (i + 1) / 2; y2a = y2 - (i + 1) / 2; } else { /* place below */ y1a = y1 + (i + 1) / 2; y2a = y2 + (i + 1) / 2; } if ((pta = generatePtaLine(x1, y1a, x2, y2a)) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); ptaJoin(ptaj, pta, 0, -1); ptaDestroy(&pta); } } else { /* "vertical" line */ for (i = 1; i < width; i++) { if ((i & 1) == 1) { /* place to left */ x1a = x1 - (i + 1) / 2; x2a = x2 - (i + 1) / 2; } else { /* place to right */ x1a = x1 + (i + 1) / 2; x2a = x2 + (i + 1) / 2; } if ((pta = generatePtaLine(x1a, y1, x2a, y2)) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); ptaJoin(ptaj, pta, 0, -1); ptaDestroy(&pta); } } return ptaj; } /*! * generatePtaBox() * * Input: box * width (of line) * Return: ptad, or null on error * * Notes: * (1) Because the box is constructed so that we don't have any * overlapping lines, there is no need to remove duplicates. */ PTA * generatePtaBox(BOX *box, l_int32 width) { l_int32 x, y, w, h; PTA *ptad, *pta; PROCNAME("generatePtaBox"); if (!box) return (PTA *)ERROR_PTR("box not defined", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } /* Generate line points and add them to the pta. */ boxGetGeometry(box, &x, &y, &w, &h); if (w == 0 || h == 0) return (PTA *)ERROR_PTR("box has w = 0 or h = 0", procName, NULL); ptad = ptaCreate(0); if ((width & 1) == 1) { /* odd width */ pta = generatePtaWideLine(x - width / 2, y, x + w - 1 + width / 2, y, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 1, y + 1 + width / 2, x + w - 1, y + h - 2 - width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 1 + width / 2, y + h - 1, x - width / 2, y + h - 1, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x, y + h - 2 - width / 2, x, y + 1 + width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } else { /* even width */ pta = generatePtaWideLine(x - width / 2, y, x + w - 2 + width / 2, y, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 1, y + 0 + width / 2, x + w - 1, y + h - 2 - width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x + w - 2 + width / 2, y + h - 1, x - width / 2, y + h - 1, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); pta = generatePtaWideLine(x, y + h - 2 - width / 2, x, y + 0 + width / 2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } return ptad; } /*! * generatePtaBoxa() * * Input: boxa * width * removedups (1 to remove, 0 to leave) * Return: ptad, or null on error * * Notes: * (1) If the boxa has overlapping boxes, and if blending will * be used to give a transparent effect, transparency * artifacts at line intersections can be removed using * removedups = 1. */ PTA * generatePtaBoxa(BOXA *boxa, l_int32 width, l_int32 removedups) { l_int32 i, n; BOX *box; PTA *ptad, *ptat, *pta; PROCNAME("generatePtaBoxa"); if (!boxa) return (PTA *)ERROR_PTR("boxa not defined", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } n = boxaGetCount(boxa); ptat = ptaCreate(0); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pta = generatePtaBox(box, width); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); boxDestroy(&box); } if (removedups) ptad = ptaRemoveDuplicates(ptat, 0); else ptad = ptaClone(ptat); ptaDestroy(&ptat); return ptad; } /*! * generatePtaHashBox() * * Input: box * spacing (spacing between lines; must be > 1) * width (of line) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * Return: ptad, or null on error * * Notes: * (1) The orientation takes on one of 4 orientations (horiz, vertical, * slope +1, slope -1). * (2) The full outline is also drawn if @outline = 1. */ PTA * generatePtaHashBox(BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline) { l_int32 bx, by, bh, bw, x, y, x1, y1, x2, y2, i, n, npts; PTA *ptad, *pta; PROCNAME("generatePtaHashBox"); if (!box) return (PTA *)ERROR_PTR("box not defined", procName, NULL); if (spacing <= 1) return (PTA *)ERROR_PTR("spacing not > 1", procName, NULL); if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return (PTA *)ERROR_PTR("invalid line orientation", procName, NULL); boxGetGeometry(box, &bx, &by, &bw, &bh); if (bw == 0 || bh == 0) return (PTA *)ERROR_PTR("box has bw = 0 or bh = 0", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } /* Generate line points and add them to the pta. */ ptad = ptaCreate(0); if (outline) { pta = generatePtaBox(box, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } if (orient == L_HORIZONTAL_LINE) { n = 1 + bh / spacing; for (i = 0; i < n; i++) { y = by + (i * (bh - 1)) / (n - 1); pta = generatePtaWideLine(bx, y, bx + bw - 1, y, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } else if (orient == L_VERTICAL_LINE) { n = 1 + bw / spacing; for (i = 0; i < n; i++) { x = bx + (i * (bw - 1)) / (n - 1); pta = generatePtaWideLine(x, by, x, by + bh - 1, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } else if (orient == L_POS_SLOPE_LINE) { n = 2 + (l_int32)((bw + bh) / (1.4 * spacing)); for (i = 0; i < n; i++) { x = (l_int32)(bx + (i + 0.5) * 1.4 * spacing); boxIntersectByLine(box, x, by - 1, 1.0, &x1, &y1, &x2, &y2, &npts); if (npts == 2) { pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } } else { /* orient == L_NEG_SLOPE_LINE */ n = 2 + (l_int32)((bw + bh) / (1.4 * spacing)); for (i = 0; i < n; i++) { x = (l_int32)(bx - bh + (i + 0.5) * 1.4 * spacing); boxIntersectByLine(box, x, by - 1, -1.0, &x1, &y1, &x2, &y2, &npts); if (npts == 2) { pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptad, pta, 0, -1); ptaDestroy(&pta); } } } return ptad; } /*! * generatePtaHashBoxa() * * Input: boxa * spacing (spacing between lines; must be > 1) * width (of line) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * removedups (1 to remove, 0 to leave) * Return: ptad, or null on error * * Notes: * (1) The orientation takes on one of 4 orientations (horiz, vertical, * slope +1, slope -1). * (2) The full outline is also drawn if @outline = 1. * (3) If the boxa has overlapping boxes, and if blending will * be used to give a transparent effect, transparency * artifacts at line intersections can be removed using * removedups = 1. */ PTA * generatePtaHashBoxa(BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 removedups) { l_int32 i, n; BOX *box; PTA *ptad, *ptat, *pta; PROCNAME("generatePtaHashBoxa"); if (!boxa) return (PTA *)ERROR_PTR("boxa not defined", procName, NULL); if (spacing <= 1) return (PTA *)ERROR_PTR("spacing not > 1", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return (PTA *)ERROR_PTR("invalid line orientation", procName, NULL); n = boxaGetCount(boxa); ptat = ptaCreate(0); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pta = generatePtaHashBox(box, spacing, width, orient, outline); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); boxDestroy(&box); } if (removedups) ptad = ptaRemoveDuplicates(ptat, 0); else ptad = ptaClone(ptat); ptaDestroy(&ptat); return ptad; } /*! * generatePtaaBoxa() * * Input: boxa * Return: ptaa, or null on error * * Notes: * (1) This generates a pta of the four corners for each box in * the boxa. * (2) Each of these pta can be rendered onto a pix with random colors, * by using pixRenderRandomCmapPtaa() with closeflag = 1. */ PTAA * generatePtaaBoxa(BOXA *boxa) { l_int32 i, n, x, y, w, h; BOX *box; PTA *pta; PTAA *ptaa; PROCNAME("generatePtaaBoxa"); if (!boxa) return (PTAA *)ERROR_PTR("boxa not defined", procName, NULL); n = boxaGetCount(boxa); ptaa = ptaaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pta = ptaCreate(4); ptaAddPt(pta, x, y); ptaAddPt(pta, x + w - 1, y); ptaAddPt(pta, x + w - 1, y + h - 1); ptaAddPt(pta, x, y + h - 1); ptaaAddPta(ptaa, pta, L_INSERT); boxDestroy(&box); } return ptaa; } /*! * generatePtaaHashBoxa() * * Input: boxa * spacing (spacing between hash lines; must be > 1) * width (hash line width) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * Return: ptaa, or null on error * * Notes: * (1) The orientation takes on one of 4 orientations (horiz, vertical, * slope +1, slope -1). * (2) The full outline is also drawn if @outline = 1. * (3) Each of these pta can be rendered onto a pix with random colors, * by using pixRenderRandomCmapPtaa() with closeflag = 1. * */ PTAA * generatePtaaHashBoxa(BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline) { l_int32 i, n; BOX *box; PTA *pta; PTAA *ptaa; PROCNAME("generatePtaaHashBoxa"); if (!boxa) return (PTAA *)ERROR_PTR("boxa not defined", procName, NULL); if (spacing <= 1) return (PTAA *)ERROR_PTR("spacing not > 1", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return (PTAA *)ERROR_PTR("invalid line orientation", procName, NULL); n = boxaGetCount(boxa); ptaa = ptaaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pta = generatePtaHashBox(box, spacing, width, orient, outline); ptaaAddPta(ptaa, pta, L_INSERT); boxDestroy(&box); } return ptaa; } /*! * generatePtaPolyline() * * Input: pta (vertices of polyline) * width * closeflag (1 to close the contour; 0 otherwise) * removedups (1 to remove, 0 to leave) * Return: ptad, or null on error */ PTA * generatePtaPolyline(PTA *ptas, l_int32 width, l_int32 closeflag, l_int32 removedups) { l_int32 i, n, x1, y1, x2, y2; PTA *ptad, *ptat, *pta; PROCNAME("generatePtaPolyline"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } n = ptaGetCount(ptas); ptat = ptaCreate(0); if (n < 2) /* nothing to do */ return ptat; ptaGetIPt(ptas, 0, &x1, &y1); for (i = 1; i < n; i++) { ptaGetIPt(ptas, i, &x2, &y2); pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); x1 = x2; y1 = y2; } if (closeflag) { ptaGetIPt(ptas, 0, &x2, &y2); pta = generatePtaWideLine(x1, y1, x2, y2, width); ptaJoin(ptat, pta, 0, -1); ptaDestroy(&pta); } if (removedups) ptad = ptaRemoveDuplicates(ptat, 0); else ptad = ptaClone(ptat); ptaDestroy(&ptat); return ptad; } /*! * convertPtaLineTo4cc() * * Input: ptas (8-connected line of points) * Return: ptad (4-connected line), or null on error * * Notes: * (1) When a polyline is generated with width = 1, the resulting * line is not 4-connected in general. This function adds * points as necessary to convert the line to 4-cconnected. * It is useful when rendering 1 bpp on a pix. * (2) Do not use this for lines generated with width > 1. */ PTA * convertPtaLineTo4cc(PTA *ptas) { l_int32 i, n, x, y, xp, yp; PTA *ptad; PROCNAME("convertPtaLineTo4cc"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); n = ptaGetCount(ptas); ptad = ptaCreate(n); ptaGetIPt(ptas, 0, &xp, &yp); ptaAddPt(ptad, xp, yp); for (i = 1; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); if (x != xp && y != yp) /* diagonal */ ptaAddPt(ptad, x, yp); ptaAddPt(ptad, x, y); xp = x; yp = y; } return ptad; } /*! * generatePtaFilledCircle() * * Input: radius * Return: pta, or null on error * * Notes: * (1) The circle is has diameter = 2 * radius + 1. * (2) It is located with the center of the circle at the * point (radius, radius). * (3) Consequently, it typically must be translated if * it is to represent a set of pixels in an image. */ PTA * generatePtaFilledCircle(l_int32 radius) { l_int32 x, y; l_float32 radthresh, sqdist; PTA *pta; PROCNAME("generatePtaFilledCircle"); if (radius < 1) return (PTA *)ERROR_PTR("radius must be >= 1", procName, NULL); pta = ptaCreate(0); radthresh = (radius + 0.5) * (radius + 0.5); for (y = 0; y <= 2 * radius; y++) { for (x = 0; x <= 2 * radius; x++) { sqdist = (l_float32)((y - radius) * (y - radius) + (x - radius) * (x - radius)); if (sqdist <= radthresh) ptaAddPt(pta, x, y); } } return pta; } /*! * generatePtaFilledSquare() * * Input: side * Return: pta, or null on error * * Notes: * (1) The center of the square can be chosen to be at * (side / 2, side / 2). It must be translated by this amount * when used for replication. */ PTA * generatePtaFilledSquare(l_int32 side) { l_int32 x, y; PTA *pta; PROCNAME("generatePtaFilledSquare"); if (side < 1) return (PTA *)ERROR_PTR("side must be > 0", procName, NULL); pta = ptaCreate(0); for (y = 0; y < side; y++) for (x = 0; x < side; x++) ptaAddPt(pta, x, y); return pta; } /*! * generatePtaLineFromPt() * * Input: x, y (point of origination) * length (of line, including starting point) * radang (angle in radians, CW from horizontal) * Return: pta, or null on error * * Notes: * (1) The @length of the line is 1 greater than the distance * used in locatePtRadially(). Example: a distance of 1 * gives rise to a length of 2. */ PTA * generatePtaLineFromPt(l_int32 x, l_int32 y, l_float64 length, l_float64 radang) { l_int32 x2, y2; /* the point at the other end of the line */ x2 = x + (l_int32)((length - 1.0) * cos(radang)); y2 = y + (l_int32)((length - 1.0) * sin(radang)); return generatePtaLine(x, y, x2, y2); } /*! * locatePtRadially() * * Input: xr, yr (reference point) * radang (angle in radians, CW from horizontal) * dist (distance of point from reference point along line * given by the specified angle) * &x, &y ( location of point) * Return: 0 if OK, 1 on error */ l_int32 locatePtRadially(l_int32 xr, l_int32 yr, l_float64 dist, l_float64 radang, l_float64 *px, l_float64 *py) { PROCNAME("locatePtRadially"); if (!px || !py) return ERROR_INT("&x and &y not both defined", procName, 1); *px = xr + dist * cos(radang); *py = yr + dist * sin(radang); return 0; } /*------------------------------------------------------------------* * Pta generation for plotting functions on images * *------------------------------------------------------------------*/ /*! * generatePlotPtaFromNuma() * * Input: numa * orient (L_HORIZONTAL_LINE, L_VERTICAL_LINE) * width (width of "line" that is drawn; between 1 and 7) * refpos (reference position: y for horizontal and x for vertical) * max (maximum excursion in pixels from baseline) * drawref (1 to draw the reference line and the normal to it) * Return: ptad, or null on error * * Notes: * (1) This generates points from a numa representing y(x) or x(y) * with respect to a pix. For y(x), we draw a horizontal line * at the reference position and a vertical line at the edge; then * we draw the values of the numa, scaled so that the maximum * excursion from the reference position is @max pixels. * (2) The width is chosen in the interval [1 ... 7]. * (3) @refpos should be chosen so the plot is entirely within the pix * that it will be painted onto. * (4) This would typically be used to plot, in place, a function * computed along pixels rows or columns. */ PTA * generatePlotPtaFromNuma(NUMA *na, l_int32 orient, l_int32 width, l_int32 refpos, l_int32 max, l_int32 drawref) { l_int32 i, n, maxw, maxh; l_float32 minval, maxval, absval, val, scale, start, del; PTA *pta1, *pta2, *ptad; PROCNAME("generatePlotPtaFromNuma"); if (!na) return (PTA *)ERROR_PTR("na not defined", procName, NULL); if (orient != L_HORIZONTAL_LINE && orient != L_VERTICAL_LINE) return (PTA *)ERROR_PTR("invalid orient", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (width > 7) { L_WARNING("width > 7; setting to 7\n", procName); width = 7; } numaGetMin(na, &minval, NULL); numaGetMax(na, &maxval, NULL); absval = L_MAX(L_ABS(minval), L_ABS(maxval)); scale = (l_float32)max / (l_float32)absval; n = numaGetCount(na); numaGetParameters(na, &start, &del); /* Generate the plot points */ pta1 = ptaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (orient == L_HORIZONTAL_LINE) { ptaAddPt(pta1, start + i * del, refpos + scale * val); maxw = start + n * del + width; maxh = refpos + max + width; } else { /* vertical line */ ptaAddPt(pta1, refpos + scale * val, start + i * del); maxw = refpos + max + width; maxh = start + n * del + width; } } /* Optionally, widen the plot */ if (width > 1) { if (width % 2 == 0) /* even width; use side of a square */ pta2 = generatePtaFilledSquare(width); else /* odd width; use radius of a circle */ pta2 = generatePtaFilledCircle(width / 2); ptad = ptaReplicatePattern(pta1, NULL, pta2, width / 2, width / 2, maxw, maxh); ptaDestroy(&pta2); } else { ptad = ptaClone(pta1); } ptaDestroy(&pta1); /* Optionally, add the reference lines */ if (drawref) { if (orient == L_HORIZONTAL_LINE) { pta1 = generatePtaLine(start, refpos, start + n * del, refpos); ptaJoin(ptad, pta1, 0, -1); ptaDestroy(&pta1); pta1 = generatePtaLine(start, refpos - max, start, refpos + max); ptaJoin(ptad, pta1, 0, -1); } else { /* vertical line */ pta1 = generatePtaLine(refpos, start, refpos, start + n * del); ptaJoin(ptad, pta1, 0, -1); ptaDestroy(&pta1); pta1 = generatePtaLine(refpos - max, start, refpos + max, start); ptaJoin(ptad, pta1, 0, -1); } ptaDestroy(&pta1); } return ptad; } /*------------------------------------------------------------------* * Pta generation for arbitrary shapes built with lines * *------------------------------------------------------------------*/ /*! * pixRenderPta() * * Input: pix * pta (arbitrary set of points) * op (one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * Return: 0 if OK, 1 on error * * Notes: * (1) L_SET_PIXELS puts all image bits in each pixel to 1 * (black for 1 bpp; white for depth > 1) * (2) L_CLEAR_PIXELS puts all image bits in each pixel to 0 * (white for 1 bpp; black for depth > 1) * (3) L_FLIP_PIXELS reverses all image bits in each pixel * (4) This function clips the rendering to the pix. It performs * clipping for functions such as pixRenderLine(), * pixRenderBox() and pixRenderBoxa(), that call pixRenderPta(). */ l_int32 pixRenderPta(PIX *pix, PTA *pta, l_int32 op) { l_int32 i, n, x, y, w, h, d, maxval; PROCNAME("pixRenderPta"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", procName, 1); pixGetDimensions(pix, &w, &h, &d); maxval = 1; if (op == L_SET_PIXELS) { switch (d) { case 2: maxval = 0x3; break; case 4: maxval = 0xf; break; case 8: maxval = 0xff; break; case 16: maxval = 0xffff; break; case 32: maxval = 0xffffffff; break; } } n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; switch (op) { case L_SET_PIXELS: pixSetPixel(pix, x, y, maxval); break; case L_CLEAR_PIXELS: pixClearPixel(pix, x, y); break; case L_FLIP_PIXELS: pixFlipPixel(pix, x, y); break; default: break; } } return 0; } /*! * pixRenderPtaArb() * * Input: pix (any depth, cmapped ok) * pta (arbitrary set of points) * rval, gval, bval * Return: 0 if OK, 1 on error * * Notes: * (1) If pix is colormapped, render this color (or the nearest * color if the cmap is full) on each pixel. * (2) If pix is not colormapped, do the best job you can using * the input colors: * - d = 1: set the pixels * - d = 2, 4, 8: average the input rgb value * - d = 32: use the input rgb value * (3) This function clips the rendering to the pix. */ l_int32 pixRenderPtaArb(PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval) { l_int32 i, n, x, y, w, h, d, index; l_uint8 val; l_uint32 val32; PIXCMAP *cmap; PROCNAME("pixRenderPtaArb"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); d = pixGetDepth(pix); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return ERROR_INT("depth not in {1,2,4,8,32}", procName, 1); if (d == 1) { pixRenderPta(pix, pta, L_SET_PIXELS); return 0; } cmap = pixGetColormap(pix); pixGetDimensions(pix, &w, &h, &d); if (cmap) { pixcmapAddNearestColor(cmap, rval, gval, bval, &index); } else { if (d == 2) val = (rval + gval + bval) / (3 * 64); else if (d == 4) val = (rval + gval + bval) / (3 * 16); else if (d == 8) val = (rval + gval + bval) / 3; else /* d == 32 */ composeRGBPixel(rval, gval, bval, &val32); } n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; if (cmap) pixSetPixel(pix, x, y, index); else if (d == 32) pixSetPixel(pix, x, y, val32); else pixSetPixel(pix, x, y, val); } return 0; } /*! * pixRenderPtaBlend() * * Input: pix (32 bpp rgb) * pta (arbitrary set of points) * rval, gval, bval * Return: 0 if OK, 1 on error * * Notes: * (1) This function clips the rendering to the pix. */ l_int32 pixRenderPtaBlend(PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract) { l_int32 i, n, x, y, w, h; l_uint8 nrval, ngval, nbval; l_uint32 val32; l_float32 frval, fgval, fbval; PROCNAME("pixRenderPtaBlend"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); if (pixGetDepth(pix) != 32) return ERROR_INT("depth not 32 bpp", procName, 1); if (fract < 0.0 || fract > 1.0) { L_WARNING("fract must be in [0.0, 1.0]; setting to 0.5\n", procName); fract = 0.5; } pixGetDimensions(pix, &w, &h, NULL); n = ptaGetCount(pta); frval = fract * rval; fgval = fract * gval; fbval = fract * bval; for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; pixGetPixel(pix, x, y, &val32); nrval = GET_DATA_BYTE(&val32, COLOR_RED); nrval = (l_uint8)((1. - fract) * nrval + frval); ngval = GET_DATA_BYTE(&val32, COLOR_GREEN); ngval = (l_uint8)((1. - fract) * ngval + fgval); nbval = GET_DATA_BYTE(&val32, COLOR_BLUE); nbval = (l_uint8)((1. - fract) * nbval + fbval); composeRGBPixel(nrval, ngval, nbval, &val32); pixSetPixel(pix, x, y, val32); } return 0; } /*------------------------------------------------------------------* * Rendering of arbitrary shapes built with lines * *------------------------------------------------------------------*/ /*! * pixRenderLine() * * Input: pix * x1, y1 * x2, y2 * width (thickness of line) * op (one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * Return: 0 if OK, 1 on error */ l_int32 pixRenderLine(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_int32 op) { PTA *pta; PROCNAME("pixRenderLine"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (width < 1) { L_WARNING("width must be > 0; setting to 1\n", procName); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", procName, 1); if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * pixRenderLineArb() * * Input: pix * x1, y1 * x2, y2 * width (thickness of line) * rval, gval, bval * Return: 0 if OK, 1 on error */ l_int32 pixRenderLineArb(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval) { PTA *pta; PROCNAME("pixRenderLineArb"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (width < 1) { L_WARNING("width must be > 0; setting to 1\n", procName); width = 1; } if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * pixRenderLineBlend() * * Input: pix * x1, y1 * x2, y2 * width (thickness of line) * rval, gval, bval * fract * Return: 0 if OK, 1 on error */ l_int32 pixRenderLineBlend(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract) { PTA *pta; PROCNAME("pixRenderLineBlend"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (width < 1) { L_WARNING("width must be > 0; setting to 1\n", procName); width = 1; } if ((pta = generatePtaWideLine(x1, y1, x2, y2, width)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * pixRenderBox() * * Input: pix * box * width (thickness of box lines) * op (one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * Return: 0 if OK, 1 on error */ l_int32 pixRenderBox(PIX *pix, BOX *box, l_int32 width, l_int32 op) { PTA *pta; PROCNAME("pixRenderBox"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", procName, 1); if ((pta = generatePtaBox(box, width)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * pixRenderBoxArb() * * Input: pix (any depth, cmapped ok) * box * width (thickness of box lines) * rval, gval, bval * Return: 0 if OK, 1 on error */ l_int32 pixRenderBoxArb(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval) { PTA *pta; PROCNAME("pixRenderBoxArb"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if ((pta = generatePtaBox(box, width)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * pixRenderBoxBlend() * * Input: pix * box * width (thickness of box lines) * rval, gval, bval * fract (in [0.0 - 1.0]; complete transparency (no effect) * if 0.0; no transparency if 1.0) * Return: 0 if OK, 1 on error */ l_int32 pixRenderBoxBlend(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract) { PTA *pta; PROCNAME("pixRenderBoxBlend"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if ((pta = generatePtaBox(box, width)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * pixRenderBoxa() * * Input: pix * boxa * width (thickness of line) * op (one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * Return: 0 if OK, 1 on error */ l_int32 pixRenderBoxa(PIX *pix, BOXA *boxa, l_int32 width, l_int32 op) { PTA *pta; PROCNAME("pixRenderBoxa"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", procName, 1); if ((pta = generatePtaBoxa(boxa, width, 0)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * pixRenderBoxaArb() * * Input: pix * boxa * width (thickness of line) * rval, gval, bval * Return: 0 if OK, 1 on error */ l_int32 pixRenderBoxaArb(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval) { PTA *pta; PROCNAME("pixRenderBoxaArb"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if ((pta = generatePtaBoxa(boxa, width, 0)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * pixRenderBoxaBlend() * * Input: pix * boxa * width (thickness of line) * rval, gval, bval * fract (in [0.0 - 1.0]; complete transparency (no effect) * if 0.0; no transparency if 1.0) * removedups (1 to remove; 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 pixRenderBoxaBlend(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 removedups) { PTA *pta; PROCNAME("pixRenderBoxaBlend"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if ((pta = generatePtaBoxa(boxa, width, removedups)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * pixRenderHashBox() * * Input: pix * box * spacing (spacing between lines; must be > 1) * width (thickness of box and hash lines) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * op (one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * Return: 0 if OK, 1 on error */ l_int32 pixRenderHashBox(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op) { PTA *pta; PROCNAME("pixRenderHashBox"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", procName, 1); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", procName, 1); pta = generatePtaHashBox(box, spacing, width, orient, outline); if (!pta) return ERROR_INT("pta not made", procName, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * pixRenderHashBoxArb() * * Input: pix * box * spacing (spacing between lines; must be > 1) * width (thickness of box and hash lines) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * rval, gval, bval * Return: 0 if OK, 1 on error */ l_int32 pixRenderHashBoxArb(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval) { PTA *pta; PROCNAME("pixRenderHashBoxArb"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", procName, 1); pta = generatePtaHashBox(box, spacing, width, orient, outline); if (!pta) return ERROR_INT("pta not made", procName, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * pixRenderHashBoxBlend() * * Input: pix * box * spacing (spacing between lines; must be > 1) * width (thickness of box and hash lines) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * rval, gval, bval * fract (in [0.0 - 1.0]; complete transparency (no effect) * if 0.0; no transparency if 1.0) * Return: 0 if OK, 1 on error */ l_int32 pixRenderHashBoxBlend(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract) { PTA *pta; PROCNAME("pixRenderHashBoxBlend"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", procName, 1); pta = generatePtaHashBox(box, spacing, width, orient, outline); if (!pta) return ERROR_INT("pta not made", procName, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * pixRenderHashBoxa() * * Input: pix * boxa * spacing (spacing between lines; must be > 1) * width (thickness of box and hash lines) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * op (one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * Return: 0 if OK, 1 on error */ l_int32 pixRenderHashBoxa(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op) { PTA *pta; PROCNAME("pixRenderHashBoxa"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", procName, 1); if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", procName, 1); pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); if (!pta) return ERROR_INT("pta not made", procName, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * pixRenderHashBoxaArb() * * Input: pix * boxa * spacing (spacing between lines; must be > 1) * width (thickness of box and hash lines) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * rval, gval, bval * Return: 0 if OK, 1 on error */ l_int32 pixRenderHashBoxaArb(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval) { PTA *pta; PROCNAME("pixRenderHashBoxArb"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", procName, 1); pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); if (!pta) return ERROR_INT("pta not made", procName, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * pixRenderHashBoxaBlend() * * Input: pix * boxa * spacing (spacing between lines; must be > 1) * width (thickness of box and hash lines) * orient (orientation of lines: L_HORIZONTAL_LINE, ...) * outline (0 to skip drawing box outline) * rval, gval, bval * fract (in [0.0 - 1.0]; complete transparency (no effect) * if 0.0; no transparency if 1.0) * Return: 0 if OK, 1 on error */ l_int32 pixRenderHashBoxaBlend(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract) { PTA *pta; PROCNAME("pixRenderHashBoxaBlend"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (spacing <= 1) return ERROR_INT("spacing not > 1", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (orient != L_HORIZONTAL_LINE && orient != L_POS_SLOPE_LINE && orient != L_VERTICAL_LINE && orient != L_NEG_SLOPE_LINE) return ERROR_INT("invalid line orientation", procName, 1); pta = generatePtaHashBoxa(boxa, spacing, width, orient, outline, 1); if (!pta) return ERROR_INT("pta not made", procName, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * pixRenderPolyline() * * Input: pix * ptas * width (thickness of line) * op (one of L_SET_PIXELS, L_CLEAR_PIXELS, L_FLIP_PIXELS) * closeflag (1 to close the contour; 0 otherwise) * Return: 0 if OK, 1 on error * * Note: this renders a closed contour. */ l_int32 pixRenderPolyline(PIX *pix, PTA *ptas, l_int32 width, l_int32 op, l_int32 closeflag) { PTA *pta; PROCNAME("pixRenderPolyline"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!ptas) return ERROR_INT("ptas not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if (op != L_SET_PIXELS && op != L_CLEAR_PIXELS && op != L_FLIP_PIXELS) return ERROR_INT("invalid op", procName, 1); if ((pta = generatePtaPolyline(ptas, width, closeflag, 0)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPta(pix, pta, op); ptaDestroy(&pta); return 0; } /*! * pixRenderPolylineArb() * * Input: pix * ptas * width (thickness of line) * rval, gval, bval * closeflag (1 to close the contour; 0 otherwise) * Return: 0 if OK, 1 on error * * Note: this renders a closed contour. */ l_int32 pixRenderPolylineArb(PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_int32 closeflag) { PTA *pta; PROCNAME("pixRenderPolylineArb"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!ptas) return ERROR_INT("ptas not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if ((pta = generatePtaPolyline(ptas, width, closeflag, 0)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaArb(pix, pta, rval, gval, bval); ptaDestroy(&pta); return 0; } /*! * pixRenderPolylineBlend() * * Input: pix * ptas * width (thickness of line) * rval, gval, bval * fract (in [0.0 - 1.0]; complete transparency (no effect) * if 0.0; no transparency if 1.0) * closeflag (1 to close the contour; 0 otherwise) * removedups (1 to remove; 0 otherwise) * Return: 0 if OK, 1 on error */ l_int32 pixRenderPolylineBlend(PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 closeflag, l_int32 removedups) { PTA *pta; PROCNAME("pixRenderPolylineBlend"); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (!ptas) return ERROR_INT("ptas not defined", procName, 1); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } if ((pta = generatePtaPolyline(ptas, width, closeflag, removedups)) == NULL) return ERROR_INT("pta not made", procName, 1); pixRenderPtaBlend(pix, pta, rval, gval, bval, fract); ptaDestroy(&pta); return 0; } /*! * pixRenderRandomCmapPtaa() * * Input: pix (1, 2, 4, 8, 16, 32 bpp) * ptaa * polyflag (1 to interpret each Pta as a polyline; 0 to simply * render the Pta as a set of pixels) * width (thickness of line; use only for polyline) * closeflag (1 to close the contour; 0 otherwise; * use only for polyline mode) * Return: pixd (cmapped, 8 bpp) or null on error * * Notes: * (1) This is a debugging routine, that displays a set of * pixels, selected by the set of Ptas in a Ptaa, * in a random color in a pix. * (2) If @polyflag == 1, each Pta is considered to be a polyline, * and is rendered using @width and @closeflag. Each polyline * is rendered in a random color. * (3) If @polyflag == 0, all points in each Pta are rendered in a * random color. The @width and @closeflag parameters are ignored. * (4) The output pix is 8 bpp and colormapped. Up to 254 * different, randomly selected colors, can be used. * (5) The rendered pixels replace the input pixels. They will * be clipped silently to the input pix. */ PIX * pixRenderRandomCmapPtaa(PIX *pix, PTAA *ptaa, l_int32 polyflag, l_int32 width, l_int32 closeflag) { l_int32 i, n, index, rval, gval, bval; PIXCMAP *cmap; PTA *pta, *ptat; PIX *pixd; PROCNAME("pixRenderRandomCmapPtaa"); if (!pix) return (PIX *)ERROR_PTR("pix not defined", procName, NULL); if (!ptaa) return (PIX *)ERROR_PTR("ptaa not defined", procName, NULL); if (width < 1) { L_WARNING("width < 1; setting to 1\n", procName); width = 1; } pixd = pixConvertTo8(pix, FALSE); cmap = pixcmapCreateRandom(8, 1, 1); pixSetColormap(pixd, cmap); if ((n = ptaaGetCount(ptaa)) == 0) return pixd; for (i = 0; i < n; i++) { index = 1 + (i % 254); pixcmapGetColor(cmap, index, &rval, &gval, &bval); pta = ptaaGetPta(ptaa, i, L_CLONE); if (polyflag) ptat = generatePtaPolyline(pta, width, closeflag, 0); else ptat = ptaClone(pta); pixRenderPtaArb(pixd, ptat, rval, gval, bval); ptaDestroy(&pta); ptaDestroy(&ptat); } return pixd; } /*------------------------------------------------------------------* * Rendering and filling of polygons * *------------------------------------------------------------------*/ /*! * pixRenderPolygon() * * Input: ptas (of vertices, none repeated) * width (of polygon outline) * &xmin ( min x value of input pts) * &ymin ( min y value of input pts) * Return: pix (1 bpp, with outline generated), or null on error * * Notes: * (1) The pix is the minimum size required to contain the origin * and the polygon. For example, the max x value of the input * points is w - 1, where w is the pix width. * (2) The rendered line is 4-connected, so that an interior or * exterior 8-c.c. flood fill operation works properly. */ PIX * pixRenderPolygon(PTA *ptas, l_int32 width, l_int32 *pxmin, l_int32 *pymin) { l_float32 fxmin, fxmax, fymin, fymax; PIX *pixd; PTA *pta1, *pta2; PROCNAME("pixRenderPolygon"); if (pxmin) *pxmin = 0; if (pymin) *pymin = 0; if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); /* Generate a 4-connected polygon line */ if ((pta1 = generatePtaPolyline(ptas, width, 1, 0)) == NULL) return (PIX *)ERROR_PTR("pta1 not made", procName, NULL); if (width < 2) pta2 = convertPtaLineTo4cc(pta1); else pta2 = ptaClone(pta1); /* Render onto a minimum-sized pix */ ptaGetRange(pta2, &fxmin, &fxmax, &fymin, &fymax); if (pxmin) *pxmin = (l_int32)(fxmin + 0.5); if (pymin) *pymin = (l_int32)(fymin + 0.5); pixd = pixCreate((l_int32)(fxmax + 0.5) + 1, (l_int32)(fymax + 0.5) + 1, 1); pixRenderPolyline(pixd, pta2, width, L_SET_PIXELS, 1); ptaDestroy(&pta1); ptaDestroy(&pta2); return pixd; } /*! * pixFillPolygon() * * Input: pixs (1 bpp, with 4-connected polygon outline) * pta (vertices of the polygon) * xmin, ymin (min values of vertices of polygon) * Return: pixd (with outline filled), or null on error * * Notes: * (1) This fills the interior of the polygon, returning a * new pix. It works for both convex and non-convex polygons. * (2) To generate a filled polygon from a pta: * PIX *pixt = pixRenderPolygon(pta, 1, &xmin, &ymin); * PIX *pixd = pixFillPolygon(pixt, pta, xmin, ymin); * pixDestroy(&pixt); */ PIX * pixFillPolygon(PIX *pixs, PTA *pta, l_int32 xmin, l_int32 ymin) { l_int32 w, h, i, n, inside, found; l_int32 *xstart, *xend; PIX *pixi, *pixd; PROCNAME("pixFillPolygon"); if (!pixs || (pixGetDepth(pixs) != 1)) return (PIX *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!pta) return (PIX *)ERROR_PTR("pta not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); xstart = (l_int32 *)CALLOC(w / 2, sizeof(l_int32)); xend = (l_int32 *)CALLOC(w / 2, sizeof(l_int32)); /* Find a raster with 2 or more black runs. The first background * pixel after the end of the first run is likely to be inside * the polygon, and can be used as a seed pixel. */ found = FALSE; for (i = ymin + 1; i < h; i++) { pixFindHorizontalRuns(pixs, i, xstart, xend, &n); if (n > 1) { ptaPtInsidePolygon(pta, xend[0] + 1, i, &inside); if (inside) { found = TRUE; break; } } } if (!found) { L_WARNING("nothing found to fill\n", procName); FREE(xstart); FREE(xend); return 0; } /* Place the seed pixel in the output image */ pixd = pixCreateTemplate(pixs); pixSetPixel(pixd, xend[0] + 1, i, 1); /* Invert pixs to make a filling mask, and fill from the seed */ pixi = pixInvert(NULL, pixs); pixSeedfillBinary(pixd, pixd, pixi, 4); /* Add the pixels of the original polygon outline */ pixOr(pixd, pixd, pixs); pixDestroy(&pixi); FREE(xstart); FREE(xend); return pixd; } /*------------------------------------------------------------------* * Contour rendering on grayscale images * *------------------------------------------------------------------*/ /*! * pixRenderContours() * * Input: pixs (8 or 16 bpp; no colormap) * startval (value of lowest contour; must be in [0 ... maxval]) * incr (increment to next contour; must be > 0) * outdepth (either 1 or depth of pixs) * Return: pixd, or null on error * * Notes: * (1) The output can be either 1 bpp, showing just the contour * lines, or a copy of the input pixs with the contour lines * superposed. */ PIX * pixRenderContours(PIX *pixs, l_int32 startval, l_int32 incr, l_int32 outdepth) { l_int32 w, h, d, maxval, wpls, wpld, i, j, val, test; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixRenderContours"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 && d != 16) return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", procName, NULL); if (outdepth != 1 && outdepth != d) { L_WARNING("invalid outdepth; setting to 1\n", procName); outdepth = 1; } maxval = (1 << d) - 1; if (startval < 0 || startval > maxval) return (PIX *)ERROR_PTR("startval not in [0 ... maxval]", procName, NULL); if (incr < 1) return (PIX *)ERROR_PTR("incr < 1", procName, NULL); if (outdepth == d) pixd = pixCopy(NULL, pixs); else pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); switch (d) { case 8: if (outdepth == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_BIT(lined, j); } } } else { /* outdepth == d */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_BYTE(lined, j, 0); } } } break; case 16: if (outdepth == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_BIT(lined, j); } } } else { /* outdepth == d */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_TWO_BYTES(lines, j); if (val < startval) continue; test = (val - startval) % incr; if (!test) SET_DATA_TWO_BYTES(lined, j, 0); } } } break; default: return (PIX *)ERROR_PTR("pixs not 8 or 16 bpp", procName, NULL); } return pixd; } /*! * fpixAutoRenderContours() * * Input: fpix * ncontours (> 1, < 500, typ. about 50) * Return: pixd (8 bpp), or null on error * * Notes: * (1) The increment is set to get approximately @ncontours. * (2) The proximity to the target value for contour display * is set to 0.15. * (3) Negative values are rendered in red; positive values as black. */ PIX * fpixAutoRenderContours(FPIX *fpix, l_int32 ncontours) { l_float32 minval, maxval, incr; PROCNAME("fpixAutoRenderContours"); if (!fpix) return (PIX *)ERROR_PTR("fpix not defined", procName, NULL); if (ncontours < 2 || ncontours > 500) return (PIX *)ERROR_PTR("ncontours < 2 or > 500", procName, NULL); fpixGetMin(fpix, &minval, NULL, NULL); fpixGetMax(fpix, &maxval, NULL, NULL); if (minval == maxval) return (PIX *)ERROR_PTR("all values in fpix are equal", procName, NULL); incr = (maxval - minval) / ((l_float32)ncontours - 1); return fpixRenderContours(fpix, incr, 0.15); } /*! * fpixRenderContours() * * Input: fpixs * incr (increment between contours; must be > 0.0) * proxim (required proximity to target value; default 0.15) * Return: pixd (8 bpp), or null on error * * Notes: * (1) Values are displayed when val/incr is within +-proxim * to an integer. The default value is 0.15; smaller values * result in thinner contour lines. * (2) Negative values are rendered in red; positive values as black. */ PIX * fpixRenderContours(FPIX *fpixs, l_float32 incr, l_float32 proxim) { l_int32 i, j, w, h, wpls, wpld; l_float32 val, invincr, finter, above, below, diff; l_uint32 *datad, *lined; l_float32 *datas, *lines; PIX *pixd; PIXCMAP *cmap; PROCNAME("fpixRenderContours"); if (!fpixs) return (PIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (incr <= 0.0) return (PIX *)ERROR_PTR("incr <= 0.0", procName, NULL); if (proxim <= 0.0) proxim = 0.15; /* default */ fpixGetDimensions(fpixs, &w, &h); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmap = pixcmapCreate(8); pixSetColormap(pixd, cmap); pixcmapAddColor(cmap, 255, 255, 255); /* white */ pixcmapAddColor(cmap, 0, 0, 0); /* black */ pixcmapAddColor(cmap, 255, 0, 0); /* red */ datas = fpixGetData(fpixs); wpls = fpixGetWpl(fpixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); invincr = 1.0 / incr; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = lines[j]; finter = invincr * val; above = finter - floorf(finter); below = ceilf(finter) - finter; diff = L_MIN(above, below); if (diff <= proxim) { if (val < 0.0) SET_DATA_BYTE(lined, j, 2); else SET_DATA_BYTE(lined, j, 1); } } } return pixd; } leptonica-1.70/src/sudoku.c0000644000175000017500000006640512244231543013765 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sudoku.c * * Solve a sudoku by brute force search * * Read input data from file or string * l_int32 *sudokuReadFile() * l_int32 *sudokuReadString() * * Create/destroy * L_SUDOKU *sudokuCreate() * void sudokuDestroy() * * Solve the puzzle * l_int32 sudokuSolve() * static l_int32 sudokuValidState() * static l_int32 sudokuNewGuess() * static l_int32 sudokuTestState() * * Test for uniqueness * l_int32 sudokuTestUniqueness() * static l_int32 sudokuCompareState() * static l_int32 *sudokuRotateArray() * * Generation * L_SUDOKU *sudokuGenerate() * * Output * l_int32 sudokuOutput() * * Solving sudokus is a somewhat addictive pastime. The rules are * simple but it takes just enough concentration to make it rewarding * when you find a number. And you get 50 to 60 such rewards each time * you complete one. The downside is that you could have been doing * something more creative, like keying out a new plant, staining * the deck, or even writing a computer program to discourage your * wife from doing sudokus. * * My original plan for the sudoku solver was somewhat grandiose. * The program would model the way a person solves the problem. * It would examine each empty position and determine how many possible * numbers could fit. The empty positions would be entered in a priority * queue keyed on the number of possible numbers that could fit. * If there existed a position where only a single number would work, * it would greedily take it. Otherwise it would consider a * positions that could accept two and make a guess, with backtracking * if an impossible state were reached. And so on. * * Then one of my colleagues announced she had solved the problem * by brute force and it was fast. At that point the original plan was * dead in the water, because the two top requirements for a leptonica * algorithm are (1) as simple as possible and (2) fast. The brute * force approach starts at the UL corner, and in succession at each * blank position it finds the first valid number (testing in * sequence from 1 to 9). When no number will fit a blank position * it backtracks, choosing the next valid number in the previous * blank position. * * This is an inefficient method for pruning the space of solutions * (imagine backtracking from the LR corner back to the UL corner * and starting over with a new guess), but it nevertheless gets * the job done quickly. I have made no effort to optimize * it, because it is fast: a 5-star (highest difficulty) sudoku might * require a million guesses and take 0.05 sec. (This BF implementation * does about 20M guesses/sec at 3 GHz.) * * Proving uniqueness of a sudoku solution is tricker than finding * a solution (or showing that no solution exists). A good indication * that a solution is unique is if we get the same result solving * by brute force when the puzzle is also rotated by 90, 180 and 270 * degrees. If there are multiple solutions, it seems unlikely * that you would get the same solution four times in a row, using a * brute force method that increments guesses and scans LR/TB. * The function sudokuTestUniqueness() does this. * * And given a function that can determine uniqueness, it is * easy to generate valid sudokus. We provide sudokuGenerate(), * which starts with some valid initial solution, and randomly * removes numbers, stopping either when a minimum number of non-zero * elements are left, or when it becomes difficult to remove another * element without destroying the uniqueness of the solution. * * For further reading, see the Wikipedia articles: * (1) http://en.wikipedia.org/wiki/Algorithmics_of_sudoku * (2) http://en.wikipedia.org/wiki/Sudoku * * How many 9x9 sudokus are there? Here are the numbers. * - From ref(1), there are about 6 x 10^27 "latin squares", where * each row and column has all 9 digits. * - There are 7.2 x 10^21 actual solutions, having the added * constraint in each of the 9 3x3 squares. (The constraint * reduced the number by the fraction 1.2 x 10^(-6).) * - There are a mere 5.5 billion essentially different solutions (EDS), * when symmetries (rotation, reflection, permutation and relabelling) * are removed. * - Thus there are 1.3 x 10^12 solutions that can be derived by * symmetry from each EDS. Can we account for these? * - Sort-of. From an EDS, you can derive (3!)^8 = 1.7 million solutions * by simply permuting rows and columns. (Do you see why it is * not (3!)^6 ?) * - Also from an EDS, you can derive 9! solutions by relabelling, * and 4 solutions by rotation, for a total of 1.45 million solutions * by relabelling and rotation. Then taking the product, by symmetry * we can derive 1.7M x 1.45M = 2.45 trillion solutions from each EDS. * (Something is off by about a factor of 2 -- close enough.) * * Another interesting fact is that there are apparently 48K EDS sudokus * (with unique solutions) that have only 17 givens. No sudokus are known * with less than 17, but there exists no proof that this is the minimum. */ #include "allheaders.h" static l_int32 sudokuValidState(l_int32 *state); static l_int32 sudokuNewGuess(L_SUDOKU *sud); static l_int32 sudokuTestState(l_int32 *state, l_int32 index); static l_int32 sudokuCompareState(L_SUDOKU *sud1, L_SUDOKU *sud2, l_int32 quads, l_int32 *psame); static l_int32 *sudokuRotateArray(l_int32 *array, l_int32 quads); /* An example of a valid solution */ static const char valid_solution[] = "3 8 7 2 6 4 1 9 5 " "2 6 5 8 9 1 4 3 7 " "1 4 9 5 3 7 6 8 2 " "5 2 3 7 1 6 8 4 9 " "7 1 6 9 4 8 2 5 3 " "8 9 4 3 5 2 7 1 6 " "9 7 2 1 8 5 3 6 4 " "4 3 1 6 7 9 5 2 8 " "6 5 8 4 2 3 9 7 1 "; /*---------------------------------------------------------------------* * Read input data from file or string * *---------------------------------------------------------------------*/ /*! * sudokuReadFile() * * Input: filename (of formatted sudoku file) * Return: array (of 81 numbers), or null on error * * Notes: * (1) The file format has: * * any number of comment lines beginning with '#' * * a set of 9 lines, each having 9 digits (0-9) separated * by a space */ l_int32 * sudokuReadFile(const char *filename) { char *str, *strj; l_uint8 *data; l_int32 i, j, nlines, val, index, error; l_int32 *array; size_t size; SARRAY *saline, *sa1, *sa2; PROCNAME("sudokuReadFile"); if (!filename) return (l_int32 *)ERROR_PTR("filename not defined", procName, NULL); data = l_binaryRead(filename, &size); sa1 = sarrayCreateLinesFromString((char *)data, 0); sa2 = sarrayCreate(9); /* Filter out the comment lines; verify that there are 9 data lines */ nlines = sarrayGetCount(sa1); for (i = 0; i < nlines; i++) { str = sarrayGetString(sa1, i, L_NOCOPY); if (str[0] != '#') sarrayAddString(sa2, str, L_COPY); } FREE(data); sarrayDestroy(&sa1); nlines = sarrayGetCount(sa2); if (nlines != 9) { sarrayDestroy(&sa2); L_ERROR("file has %d lines\n", procName, nlines); return (l_int32 *)ERROR_PTR("invalid file", procName, NULL); } /* Read the data into the array, verifying that each data * line has 9 numbers. */ error = FALSE; array = (l_int32 *)CALLOC(81, sizeof(l_int32)); for (i = 0, index = 0; i < 9; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); saline = sarrayCreateWordsFromString(str); if (sarrayGetCount(saline) != 9) { error = TRUE; sarrayDestroy(&saline); break; } for (j = 0; j < 9; j++) { strj = sarrayGetString(saline, j, L_NOCOPY); if (sscanf(strj, "%d", &val) != 1) error = TRUE; else array[index++] = val; } sarrayDestroy(&saline); if (error) break; } sarrayDestroy(&sa2); if (error) { FREE(array); return (l_int32 *)ERROR_PTR("invalid data", procName, NULL); } return array; } /*! * sudokuReadString() * * Input: str (of input data) * Return: array (of 81 numbers), or null on error * * Notes: * (1) The string is formatted as 81 single digits, each separated * by 81 spaces. */ l_int32 * sudokuReadString(const char *str) { l_int32 i; l_int32 *array; PROCNAME("sudokuReadString"); if (!str) return (l_int32 *)ERROR_PTR("str not defined", procName, NULL); /* Read in the initial solution */ array = (l_int32 *)CALLOC(81, sizeof(l_int32)); for (i = 0; i < 81; i++) { if (sscanf(str + 2 * i, "%d ", &array[i]) != 1) return (l_int32 *)ERROR_PTR("invalid format", procName, NULL); } return array; } /*---------------------------------------------------------------------* * Create/destroy sudoku * *---------------------------------------------------------------------*/ /*! * sudokuCreate() * * Input: array (of 81 numbers, 9 rows of 9 numbers each) * Return: l_sudoku, or null on error * * Notes: * (1) The input array has 0 for the unknown values, and 1-9 * for the known initial values. It is generated from * a file using sudokuReadInput(), which checks that the file * data has 81 numbers in 9 rows. */ L_SUDOKU * sudokuCreate(l_int32 *array) { l_int32 i, val, locs_index; L_SUDOKU *sud; PROCNAME("sudokuCreate"); if (!array) return (L_SUDOKU *)ERROR_PTR("array not defined", procName, NULL); locs_index = 0; /* into locs array */ if ((sud = (L_SUDOKU *)CALLOC(1, sizeof(L_SUDOKU))) == NULL) return (L_SUDOKU *)ERROR_PTR("sud not made", procName, NULL); if ((sud->locs = (l_int32 *)CALLOC(81, sizeof(l_int32))) == NULL) return (L_SUDOKU *)ERROR_PTR("su state array not made", procName, NULL); if ((sud->init = (l_int32 *)CALLOC(81, sizeof(l_int32))) == NULL) return (L_SUDOKU *)ERROR_PTR("su init array not made", procName, NULL); if ((sud->state = (l_int32 *)CALLOC(81, sizeof(l_int32))) == NULL) return (L_SUDOKU *)ERROR_PTR("su state array not made", procName, NULL); for (i = 0; i < 81; i++) { val = array[i]; sud->init[i] = val; sud->state[i] = val; if (val == 0) sud->locs[locs_index++] = i; } sud->num = locs_index; sud->failure = FALSE; sud->finished = FALSE; return sud; } /*! * sudokuDestroy() * * Input: &l_sudoku () * Return: void */ void sudokuDestroy(L_SUDOKU **psud) { L_SUDOKU *sud; PROCNAME("sudokuDestroy"); if (psud == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((sud = *psud) == NULL) return; FREE(sud->locs); FREE(sud->init); FREE(sud->state); FREE(sud); *psud = NULL; return; } /*---------------------------------------------------------------------* * Solve the puzzle * *---------------------------------------------------------------------*/ /*! * sudokuSolve() * * Input: l_sudoku (starting in initial state) * Return: 1 on success, 0 on failure to solve (note reversal of * typical unix returns) */ l_int32 sudokuSolve(L_SUDOKU *sud) { PROCNAME("sudokuSolve"); if (!sud) return ERROR_INT("sud not defined", procName, 0); if (!sudokuValidState(sud->init)) return ERROR_INT("initial state not valid", procName, 0); while (1) { if (sudokuNewGuess(sud)) break; if (sud->finished == TRUE) break; } if (sud->failure == TRUE) { fprintf(stderr, "Failure after %d guesses\n", sud->nguess); return 0; } fprintf(stderr, "Solved after %d guesses\n", sud->nguess); return 1; } /*! * sudokuValidState() * * Input: state (array of size 81) * Return: 1 if valid, 0 if invalid * * Notes: * (1) This can be used on either the initial state (init) * or on the current state (state) of the l_soduku. * All values of 0 are ignored. */ static l_int32 sudokuValidState(l_int32 *state) { l_int32 i; PROCNAME("sudokuValidState"); if (!state) return ERROR_INT("state not defined", procName, 0); for (i = 0; i < 81; i++) { if (!sudokuTestState(state, i)) return 0; } return 1; } /*! * sudokuNewGuess() * * Input: l_sudoku * Return: 0 if OK; 1 if no solution is possible * * Notes: * (1) This attempts to increment the number in the current * location. If it can't, it backtracks (sets the number * in the current location to zero and decrements the * current location). If it can, it tests that number, * and if the number is valid, moves forward to the next * empty location (increments the current location). * (2) If there is no solution, backtracking will eventually * exhaust possibilities for the first location. */ static l_int32 sudokuNewGuess(L_SUDOKU *sud) { l_int32 index, val, valid; l_int32 *locs, *state; locs = sud->locs; state = sud->state; index = locs[sud->current]; /* 0 to 80 */ val = state[index]; if (val == 9) { /* backtrack or give up */ if (sud->current == 0) { sud->failure = TRUE; return 1; } state[index] = 0; sud->current--; } else { /* increment current value and test */ sud->nguess++; state[index]++; valid = sudokuTestState(state, index); if (valid) { if (sud->current == sud->num - 1) { /* we're done */ sud->finished = TRUE; return 0; } else { /* advance to next position */ sud->current++; } } } return 0; } /*! * sudokuTestState() * * Input: state (current state: array of 81 values) * index (into state element that we are testing) * Return: 1 if valid; 0 if invalid (no error checking) */ static l_int32 sudokuTestState(l_int32 *state, l_int32 index) { l_int32 i, j, val, row, rowstart, rowend, col; l_int32 blockrow, blockcol, blockstart, rowindex, locindex; if ((val = state[index]) == 0) /* automatically valid */ return 1; /* Test row. Test val is at (x, y) = (index % 9, index / 9) */ row = index / 9; rowstart = 9 * row; for (i = rowstart; i < index; i++) { if (state[i] == val) return 0; } rowend = rowstart + 9; for (i = index + 1; i < rowend; i++) { if (state[i] == val) return 0; } /* Test column */ col = index % 9; for (j = col; j < index; j += 9) { if (state[j] == val) return 0; } for (j = index + 9; j < 81; j += 9) { if (state[j] == val) return 0; } /* Test local 3x3 block */ blockrow = 3 * (row / 3); blockcol = 3 * (col / 3); blockstart = 9 * blockrow + blockcol; for (i = 0; i < 3; i++) { rowindex = blockstart + 9 * i; for (j = 0; j < 3; j++) { locindex = rowindex + j; if (index == locindex) continue; if (state[locindex] == val) return 0; } } return 1; } /*---------------------------------------------------------------------* * Test for uniqueness * *---------------------------------------------------------------------*/ /*! * sudokuTestUniqueness() * * Input: array (of 81 numbers, 9 lines of 9 numbers each) * &punique ( 1 if unique, 0 if not) * Return: 0 if OK, 1 on error * * Notes: * (1) This applies the brute force method to all four 90 degree * rotations. If there is more than one solution, it is highly * unlikely that all four results will be the same; * consequently, if they are the same, the solution is * most likely to be unique. */ l_int32 sudokuTestUniqueness(l_int32 *array, l_int32 *punique) { l_int32 same1, same2, same3; l_int32 *array1, *array2, *array3; L_SUDOKU *sud, *sud1, *sud2, *sud3; PROCNAME("sudokuTestUniqueness"); if (!punique) return ERROR_INT("&unique not defined", procName, 1); *punique = 0; if (!array) return ERROR_INT("array not defined", procName, 1); sud = sudokuCreate(array); sudokuSolve(sud); array1 = sudokuRotateArray(array, 1); sud1 = sudokuCreate(array1); sudokuSolve(sud1); array2 = sudokuRotateArray(array, 2); sud2 = sudokuCreate(array2); sudokuSolve(sud2); array3 = sudokuRotateArray(array, 3); sud3 = sudokuCreate(array3); sudokuSolve(sud3); sudokuCompareState(sud, sud1, 1, &same1); sudokuCompareState(sud, sud2, 2, &same2); sudokuCompareState(sud, sud3, 3, &same3); *punique = (same1 && same2 && same3); sudokuDestroy(&sud); sudokuDestroy(&sud1); sudokuDestroy(&sud2); sudokuDestroy(&sud3); FREE(array1); FREE(array2); FREE(array3); return 0; } /*! * sudokuCompareState() * * Input: sud1, sud2 * quads (rotation of sud2 input with respect to sud1, * in units of 90 degrees cw) * &same ( 1 if all 4 results are identical; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) The input to sud2 has been rotated by @quads relative to the * input to sud1. Therefore, we must rotate the solution to * sud1 by the same amount before comparing it to the * solution to sud2. */ static l_int32 sudokuCompareState(L_SUDOKU *sud1, L_SUDOKU *sud2, l_int32 quads, l_int32 *psame) { l_int32 i, same; l_int32 *array; PROCNAME("sudokuCompareState"); if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; if (!sud1) return ERROR_INT("sud1 not defined", procName, 1); if (!sud2) return ERROR_INT("sud1 not defined", procName, 1); if (quads < 1 || quads > 3) return ERROR_INT("valid quads in {1,2,3}", procName, 1); same = TRUE; if ((array = sudokuRotateArray(sud1->state, quads)) == NULL) return ERROR_INT("array not made", procName, 1); for (i = 0; i < 81; i++) { if (array[i] != sud2->state[i]) { same = FALSE; break; } } *psame = same; FREE(array); return 0; } /*! * sudokuRotateArray() * * Input: array (of 81 numbers; 9 lines of 9 numbers each) * quads (1-3; number of 90 degree cw rotations) * Return: rarray (rotated array), or null on error */ static l_int32 * sudokuRotateArray(l_int32 *array, l_int32 quads) { l_int32 i, j, sindex, dindex; l_int32 *rarray; PROCNAME("sudokuRotateArray"); if (!array) return (l_int32 *)ERROR_PTR("array not defined", procName, NULL); if (quads < 1 || quads > 3) return (l_int32 *)ERROR_PTR("valid quads in {1,2,3}", procName, NULL); rarray = (l_int32 *)CALLOC(81, sizeof(l_int32)); if (quads == 1) { for (j = 0, dindex = 0; j < 9; j++) { for (i = 8; i >= 0; i--) { sindex = 9 * i + j; rarray[dindex++] = array[sindex]; } } } else if (quads == 2) { for (i = 8, dindex = 0; i >= 0; i--) { for (j = 8; j >= 0; j--) { sindex = 9 * i + j; rarray[dindex++] = array[sindex]; } } } else { /* quads == 3 */ for (j = 8, dindex = 0; j >= 0; j--) { for (i = 0; i < 9; i++) { sindex = 9 * i + j; rarray[dindex++] = array[sindex]; } } } return rarray; } /*---------------------------------------------------------------------* * Generation * *---------------------------------------------------------------------*/ /*! * sudokuGenerate() * * Input: array (of 81 numbers, 9 rows of 9 numbers each) * seed (random number) * minelems (min non-zero elements allowed; <= 80) * maxtries (max tries to remove a number and get a valid sudoku) * Return: l_sudoku, or null on error * * Notes: * (1) This is a brute force generator. It starts with a completed * sudoku solution and, by removing elements (setting them to 0), * generates a valid (unique) sudoku initial condition. * (2) The process stops when either @minelems, the minimum * number of non-zero elements, is reached, or when the * number of attempts to remove the next element exceeds @maxtries. * (3) No sudoku is known with less than 17 nonzero elements. */ L_SUDOKU * sudokuGenerate(l_int32 *array, l_int32 seed, l_int32 minelems, l_int32 maxtries) { l_int32 index, sector, nzeros, removefirst, tries, val, oldval, unique; L_SUDOKU *sud, *testsud; PROCNAME("sudokuGenerate"); if (!array) return (L_SUDOKU *)ERROR_PTR("array not defined", procName, NULL); if (minelems > 80) return (L_SUDOKU *)ERROR_PTR("minelems must be < 81", procName, NULL); /* Remove up to 30 numbers at random from the solution. * Test if the solution is valid -- the initial 'solution' may * have been invalid. Then test if the sudoku with 30 zeroes * is unique -- it almost always will be. */ srand(seed); nzeros = 0; sector = 0; removefirst = L_MIN(30, 81 - minelems); while (nzeros < removefirst) { genRandomIntegerInRange(9, 0, &val); index = 27 * (sector / 3) + 3 * (sector % 3) + 9 * (val / 3) + (val % 3); if (array[index] == 0) continue; array[index] = 0; nzeros++; sector++; sector %= 9; } testsud = sudokuCreate(array); sudokuSolve(testsud); if (testsud->failure) { sudokuDestroy(&testsud); L_ERROR("invalid initial solution\n", procName); return NULL; } sudokuTestUniqueness(testsud->init, &unique); sudokuDestroy(&testsud); if (!unique) { L_ERROR("non-unique result with 30 zeroes\n", procName); return NULL; } /* Remove more numbers, testing at each removal for uniqueness. */ tries = 0; sector = 0; while (1) { if (tries > maxtries) break; if (81 - nzeros <= minelems) break; if (tries == 0) { fprintf(stderr, "Trying %d zeros\n", nzeros); tries = 1; } /* Choose an element to be zeroed. We choose one * at random in succession from each of the nine sectors. */ genRandomIntegerInRange(9, 0, &val); index = 27 * (sector / 3) + 3 * (sector % 3) + 9 * (val / 3) + (val % 3); sector++; sector %= 9; if (array[index] == 0) continue; /* Save the old value in case we need to revert */ oldval = array[index]; /* Is there a solution? If not, try again. */ array[index] = 0; testsud = sudokuCreate(array); sudokuSolve(testsud); if (testsud->failure == TRUE) { sudokuDestroy(&testsud); array[index] = oldval; /* revert */ tries++; continue; } /* Is the solution unique? If not, try again. */ sudokuTestUniqueness(testsud->init, &unique); sudokuDestroy(&testsud); if (!unique) { /* revert and try again */ array[index] = oldval; tries++; } else { /* accept this */ tries = 0; fprintf(stderr, "Have %d zeros\n", nzeros); nzeros++; } } fprintf(stderr, "Final: nelems = %d\n", 81 - nzeros); /* Show that we can recover the solution */ sud = sudokuCreate(array); sudokuOutput(sud, L_SUDOKU_INIT); sudokuSolve(sud); sudokuOutput(sud, L_SUDOKU_STATE); return sud; } /*---------------------------------------------------------------------* * Output * *---------------------------------------------------------------------*/ /*! * sudokuOutput() * * Input: l_sudoku (at any stage) * arraytype (L_SUDOKU_INIT, L_SUDOKU_STATE) * Return: void * * Notes: * (1) Prints either the initial array or the current state * of the solution. */ l_int32 sudokuOutput(L_SUDOKU *sud, l_int32 arraytype) { l_int32 i, j; l_int32 *array; PROCNAME("sudokuOutput"); if (!sud) return ERROR_INT("sud not defined", procName, 1); if (arraytype == L_SUDOKU_INIT) array = sud->init; else if (arraytype == L_SUDOKU_STATE) array = sud->state; else return ERROR_INT("invalid arraytype", procName, 1); for (i = 0; i < 9; i++) { for (j = 0; j < 9; j++) fprintf(stderr, "%d ", array[9 * i + j]); fprintf(stderr, "\n"); } return 0; } leptonica-1.70/src/morphtemplate2.txt0000644000175000017500000000725511707052573016020 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: --- * l_int32 fmorphopgen_low_*() * * Static Low-level: --- * void fdilate_*_*() --- * void ferode_*_*() */ #include "allheaders.h" --- This file is: morphtemplate2.txt --- --- insert static protos here ... /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! --- * fmorphopgen_low_*() * * a dispatcher to appropriate low-level code */ l_int32 --- fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { --- insert dispatcher code for fdilate* and ferode* routines ... } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ --- static void fdilate_*_*(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; --- declare wplsN args as necessary ... pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { --- insert barrel-op code for *dptr here ... } } } leptonica-1.70/src/baseline.c0000644000175000017500000005312112244234147014227 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * baseline.c * * Locate text baselines in an image * NUMA *pixFindBaselines() * * Projective transform to remove local skew * PIX *pixDeskewLocal() * * Determine local skew * l_int32 pixGetLocalSkewTransform() * NUMA *pixGetLocalSkewAngles() * * We have two apparently different functions here: * - finding baselines * - finding a projective transform to remove keystone warping * The function pixGetLocalSkewAngles() returns an array of angles, * one for each raster line, and the baselines of the text lines * should intersect the left edge of the image with that angle. */ #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_PLOT 0 #endif /* NO_CONSOLE_IO */ /* Min to travel after finding max before abandoning peak */ static const l_int32 MIN_DIST_IN_PEAK = 35; /* Thresholds for peaks and zeros, relative to the max peak */ static const l_int32 PEAK_THRESHOLD_RATIO = 20; static const l_int32 ZERO_THRESHOLD_RATIO = 100; /* Default values for determining local skew */ static const l_int32 DEFAULT_SLICES = 10; static const l_int32 DEFAULT_SWEEP_REDUCTION = 2; static const l_int32 DEFAULT_BS_REDUCTION = 1; static const l_float32 DEFAULT_SWEEP_RANGE = 5.; /* degrees */ static const l_float32 DEFAULT_SWEEP_DELTA = 1.; /* degrees */ static const l_float32 DEFAULT_MINBS_DELTA = 0.01; /* degrees */ /* Overlap slice fraction added to top and bottom of each slice */ static const l_float32 OVERLAP_FRACTION = 0.5; /* Minimum allowed confidence (ratio) for accepting a value */ static const l_float32 MIN_ALLOWED_CONFIDENCE = 3.0; /*---------------------------------------------------------------------* * Locate text baselines in an image * *---------------------------------------------------------------------*/ /*! * pixFindBaselines() * * Input: pixs (1 bpp) * &pta ( pairs of pts corresponding to * approx. ends of each text line) * debug (usually 0; set to 1 for debugging output) * Return: na (of baseline y values), or null on error * * Notes: * (1) Input binary image must have text lines already aligned * horizontally. This can be done by either rotating the * image with pixDeskew(), or, if a projective transform * is required, by doing pixDeskewLocal() first. * (2) Input null for &pta if you don't want this returned. * The pta will come in pairs of points (left and right end * of each baseline). * (3) Caution: this will not work properly on text with multiple * columns, where the lines are not aligned between columns. * If there are multiple columns, they should be extracted * separately before finding the baselines. * (4) This function constructs different types of output * for baselines; namely, a set of raster line values and * a set of end points of each baseline. * (5) This function was designed to handle short and long text lines * without using dangerous thresholds on the peak heights. It does * this by combining the differential signal with a morphological * analysis of the locations of the text lines. One can also * combine this data to normalize the peak heights, by weighting * the differential signal in the region of each baseline * by the inverse of the width of the text line found there. * (6) There are various debug sections that can be turned on * with the debug flag. */ NUMA * pixFindBaselines(PIX *pixs, PTA **ppta, l_int32 debug) { l_int32 h, i, j, nbox, val1, val2, ndiff, bx, by, bw, bh; l_int32 imaxloc, peakthresh, zerothresh, inpeak; l_int32 mintosearch, max, maxloc, nloc, locval; l_int32 *array; l_float32 maxval; BOXA *boxa1, *boxa2, *boxa3; GPLOT *gplot; NUMA *nasum, *nadiff, *naloc, *naval; PIX *pixt1, *pixt2; PTA *pta; PROCNAME("pixFindBaselines"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); pta = NULL; if (ppta) { pta = ptaCreate(0); *ppta = pta; } /* Close up the text characters, removing noise */ pixt1 = pixMorphSequence(pixs, "c25.1 + e3.1", 0); /* Save the difference of adjacent row sums. * The high positive-going peaks are the baselines */ if ((nasum = pixCountPixelsByRow(pixt1, NULL)) == NULL) return (NUMA *)ERROR_PTR("nasum not made", procName, NULL); h = pixGetHeight(pixs); nadiff = numaCreate(h); numaGetIValue(nasum, 0, &val2); for (i = 0; i < h - 1; i++) { val1 = val2; numaGetIValue(nasum, i + 1, &val2); numaAddNumber(nadiff, val1 - val2); } if (debug) /* show the difference signal */ gplotSimple1(nadiff, GPLOT_X11, "junkdiff", "difference"); /* Use the zeroes of the profile to locate each baseline. */ array = numaGetIArray(nadiff); ndiff = numaGetCount(nadiff); numaGetMax(nadiff, &maxval, &imaxloc); /* Use this to begin locating a new peak: */ peakthresh = (l_int32)maxval / PEAK_THRESHOLD_RATIO; /* Use this to begin a region between peaks: */ zerothresh = (l_int32)maxval / ZERO_THRESHOLD_RATIO; naloc = numaCreate(0); naval = numaCreate(0); inpeak = FALSE; for (i = 0; i < ndiff; i++) { if (inpeak == FALSE) { if (array[i] > peakthresh) { /* transition to in-peak */ inpeak = TRUE; mintosearch = i + MIN_DIST_IN_PEAK; /* accept no zeros * between i and mintosearch */ max = array[i]; maxloc = i; } } else { /* inpeak == TRUE; look for max */ if (array[i] > max) { max = array[i]; maxloc = i; mintosearch = i + MIN_DIST_IN_PEAK; } else if (i > mintosearch && array[i] <= zerothresh) { /* leave */ inpeak = FALSE; numaAddNumber(naval, max); numaAddNumber(naloc, maxloc); } } } /* If array[ndiff-1] is max, eg. no descenders, baseline at bottom */ if (inpeak) { numaAddNumber(naval, max); numaAddNumber(naloc, maxloc); } FREE(array); if (debug) { /* show the raster locations for the peaks */ gplot = gplotCreate("junkloc", GPLOT_X11, "Peak locations", "rasterline", "height"); gplotAddPlot(gplot, naloc, naval, GPLOT_POINTS, "locs"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } /* Generate an approximate profile of text line width. * First, filter the boxes of text, where there may be * more than one box for a given textline. */ pixt2 = pixMorphSequence(pixt1, "r11 + c25.1 + o7.1 +c1.3", 0); boxa1 = pixConnComp(pixt2, NULL, 4); boxa2 = boxaTransform(boxa1, 0, 0, 4., 4.); boxa3 = boxaSort(boxa2, L_SORT_BY_Y, L_SORT_INCREASING, NULL); /* Then find the baseline segments */ if (pta) { nloc = numaGetCount(naloc); nbox = boxaGetCount(boxa3); for (i = 0; i < nbox; i++) { boxaGetBoxGeometry(boxa3, i, &bx, &by, &bw, &bh); for (j = 0; j < nloc; j++) { numaGetIValue(naloc, j, &locval); if (L_ABS(locval - (by + bh)) > 25) continue; ptaAddPt(pta, bx, locval); ptaAddPt(pta, bx + bw, locval); break; } } } if (debug) { /* display baselines */ PIX *pixd; l_int32 npts, x1, y1, x2, y2; if (pta) { pixd = pixConvertTo32(pixs); npts = ptaGetCount(pta); for (i = 0; i < npts; i += 2) { ptaGetIPt(pta, i, &x1, &y1); ptaGetIPt(pta, i + 1, &x2, &y2); pixRenderLineArb(pixd, x1, y1, x2, y2, 1, 255, 0, 0); } pixDisplay(pixd, 200, 200); pixWrite("junkbaselines", pixd, IFF_PNG); pixDestroy(&pixd); } } boxaDestroy(&boxa1); boxaDestroy(&boxa2); boxaDestroy(&boxa3); pixDestroy(&pixt1); pixDestroy(&pixt2); numaDestroy(&nasum); numaDestroy(&nadiff); numaDestroy(&naval); return naloc; } /*---------------------------------------------------------------------* * Projective transform to remove local skew * *---------------------------------------------------------------------*/ /*! * pixDeskewLocal() * * Input: pixs * nslices (the number of horizontal overlapping slices; must * be larger than 1 and not exceed 20; use 0 for default) * redsweep (sweep reduction factor: 1, 2, 4 or 8; * use 0 for default value) * redsearch (search reduction factor: 1, 2, 4 or 8, and * not larger than redsweep; use 0 for default value) * sweeprange (half the full range, assumed about 0; in degrees; * use 0.0 for default value) * sweepdelta (angle increment of sweep; in degrees; * use 0.0 for default value) * minbsdelta (min binary search increment angle; in degrees; * use 0.0 for default value) * Return: pixd, or null on error * * Notes: * (1) This function allows deskew of a page whose skew changes * approximately linearly with vertical position. It uses * a projective tranform that in effect does a differential * shear about the LHS of the page, and makes all text lines * horizontal. * (2) The origin of the keystoning can be either a cheap document * feeder that rotates the page as it is passed through, or a * camera image taken from either the left or right side * of the vertical. * (3) The image transformation is a projective warping, * not a rotation. Apart from this function, the text lines * must be properly aligned vertically with respect to each * other. This can be done by pre-processing the page; e.g., * by rotating or horizontally shearing it. * Typically, this can be achieved by vertically aligning * the page edge. */ PIX * pixDeskewLocal(PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta) { l_int32 ret; PIX *pixd; PTA *ptas, *ptad; PROCNAME("pixDeskewLocal"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Skew array gives skew angle (deg) as fctn of raster line * where it intersects the LHS of the image */ ret = pixGetLocalSkewTransform(pixs, nslices, redsweep, redsearch, sweeprange, sweepdelta, minbsdelta, &ptas, &ptad); if (ret != 0) return (PIX *)ERROR_PTR("transform pts not found", procName, NULL); /* Use a projective transform */ pixd = pixProjectiveSampledPta(pixs, ptad, ptas, L_BRING_IN_WHITE); ptaDestroy(&ptas); ptaDestroy(&ptad); return pixd; } /*---------------------------------------------------------------------* * Determine the local skew * *---------------------------------------------------------------------*/ /*! * pixGetLocalSkewTransform() * * Input: pixs * nslices (the number of horizontal overlapping slices; must * be larger than 1 and not exceed 20; use 0 for default) * redsweep (sweep reduction factor: 1, 2, 4 or 8; * use 0 for default value) * redsearch (search reduction factor: 1, 2, 4 or 8, and * not larger than redsweep; use 0 for default value) * sweeprange (half the full range, assumed about 0; in degrees; * use 0.0 for default value) * sweepdelta (angle increment of sweep; in degrees; * use 0.0 for default value) * minbsdelta (min binary search increment angle; in degrees; * use 0.0 for default value) * &ptas ( 4 points in the source) * &ptad ( the corresponding 4 pts in the dest) * Return: 0 if OK, 1 on error * * Notes: * (1) This generates two pairs of points in the src, each pair * corresponding to a pair of points that would lie along * the same raster line in a transformed (dewarped) image. * (2) The sets of 4 src and 4 dest points returned by this function * can then be used, in a projective or bilinear transform, * to remove keystoning in the src. */ l_int32 pixGetLocalSkewTransform(PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, PTA **pptas, PTA **pptad) { l_int32 w, h, i; l_float32 deg2rad, angr, angd, dely; NUMA *naskew; PTA *ptas, *ptad; PROCNAME("pixGetLocalSkewTransform"); if (!pptas || !pptad) return ERROR_INT("&ptas and &ptad not defined", procName, 1); *pptas = *pptad = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (nslices < 2 || nslices > 20) nslices = DEFAULT_SLICES; if (redsweep < 1 || redsweep > 8) redsweep = DEFAULT_SWEEP_REDUCTION; if (redsearch < 1 || redsearch > redsweep) redsearch = DEFAULT_BS_REDUCTION; if (sweeprange == 0.0) sweeprange = DEFAULT_SWEEP_RANGE; if (sweepdelta == 0.0) sweepdelta = DEFAULT_SWEEP_DELTA; if (minbsdelta == 0.0) minbsdelta = DEFAULT_MINBS_DELTA; naskew = pixGetLocalSkewAngles(pixs, nslices, redsweep, redsearch, sweeprange, sweepdelta, minbsdelta, NULL, NULL); if (!naskew) return ERROR_INT("naskew not made", procName, 1); deg2rad = 3.14159265 / 180.; w = pixGetWidth(pixs); h = pixGetHeight(pixs); ptas = ptaCreate(4); ptad = ptaCreate(4); *pptas = ptas; *pptad = ptad; /* Find i for skew line that intersects LHS at i and RHS at h / 20 */ for (i = 0; i < h; i++) { numaGetFValue(naskew, i, &angd); angr = angd * deg2rad; dely = w * tan(angr); if (i - dely > 0.05 * h) break; } ptaAddPt(ptas, 0, i); ptaAddPt(ptas, w - 1, i - dely); ptaAddPt(ptad, 0, i); ptaAddPt(ptad, w - 1, i); /* Find i for skew line that intersects LHS at i and RHS at 19h / 20 */ for (i = h - 1; i > 0; i--) { numaGetFValue(naskew, i, &angd); angr = angd * deg2rad; dely = w * tan(angr); if (i - dely < 0.95 * h) break; } ptaAddPt(ptas, 0, i); ptaAddPt(ptas, w - 1, i - dely); ptaAddPt(ptad, 0, i); ptaAddPt(ptad, w - 1, i); numaDestroy(&naskew); return 0; } /*! * pixGetLocalSkewAngles() * * Input: pixs * nslices (the number of horizontal overlapping slices; must * be larger than 1 and not exceed 20; use 0 for default) * redsweep (sweep reduction factor: 1, 2, 4 or 8; * use 0 for default value) * redsearch (search reduction factor: 1, 2, 4 or 8, and * not larger than redsweep; use 0 for default value) * sweeprange (half the full range, assumed about 0; in degrees; * use 0.0 for default value) * sweepdelta (angle increment of sweep; in degrees; * use 0.0 for default value) * minbsdelta (min binary search increment angle; in degrees; * use 0.0 for default value) * &a ( slope of skew as fctn of y) * &b ( intercept at y=0 of skew as fctn of y) * Return: naskew, or null on error * * Notes: * (1) The local skew is measured in a set of overlapping strips. * We then do a least square linear fit parameters to get * the slope and intercept parameters a and b in * skew-angle = a * y + b (degrees) * for the local skew as a function of raster line y. * This is then used to make naskew, which can be interpreted * as the computed skew angle (in degrees) at the left edge * of each raster line. * (2) naskew can then be used to find the baselines of text, because * each text line has a baseline that should intersect * the left edge of the image with the angle given by this * array, evaluated at the raster line of intersection. */ NUMA * pixGetLocalSkewAngles(PIX *pixs, l_int32 nslices, l_int32 redsweep, l_int32 redsearch, l_float32 sweeprange, l_float32 sweepdelta, l_float32 minbsdelta, l_float32 *pa, l_float32 *pb) { l_int32 w, h, hs, i, ystart, yend, ovlap, npts; l_float32 angle, conf, ycenter, a, b; BOX *box; NUMA *naskew; PIX *pix; PTA *pta; PROCNAME("pixGetLocalSkewAngles"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (nslices < 2 || nslices > 20) nslices = DEFAULT_SLICES; if (redsweep < 1 || redsweep > 8) redsweep = DEFAULT_SWEEP_REDUCTION; if (redsearch < 1 || redsearch > redsweep) redsearch = DEFAULT_BS_REDUCTION; if (sweeprange == 0.0) sweeprange = DEFAULT_SWEEP_RANGE; if (sweepdelta == 0.0) sweepdelta = DEFAULT_SWEEP_DELTA; if (minbsdelta == 0.0) minbsdelta = DEFAULT_MINBS_DELTA; h = pixGetHeight(pixs); w = pixGetWidth(pixs); hs = h / nslices; ovlap = (l_int32)(OVERLAP_FRACTION * hs); pta = ptaCreate(nslices); for (i = 0; i < nslices; i++) { ystart = L_MAX(0, hs * i - ovlap); yend = L_MIN(h - 1, hs * (i + 1) + ovlap); ycenter = (ystart + yend) / 2; box = boxCreate(0, ystart, w, yend - ystart + 1); pix = pixClipRectangle(pixs, box, NULL); pixFindSkewSweepAndSearch(pix, &angle, &conf, redsweep, redsearch, sweeprange, sweepdelta, minbsdelta); if (conf > MIN_ALLOWED_CONFIDENCE) ptaAddPt(pta, ycenter, angle); pixDestroy(&pix); boxDestroy(&box); } /* ptaWriteStream(stderr, pta, 0); */ /* Do linear least squares fit */ if ((npts = ptaGetCount(pta)) < 2) { ptaDestroy(&pta); return (NUMA *)ERROR_PTR("can't fit skew", procName, NULL); } ptaGetLinearLSF(pta, &a, &b, NULL); if (pa) *pa = a; if (pb) *pb = b; /* Make skew angle array as function of raster line */ naskew = numaCreate(h); for (i = 0; i < h; i++) { angle = a * i + b; numaAddNumber(naskew, angle); } #if DEBUG_PLOT { NUMA *nax, *nay; GPLOT *gplot; ptaGetArrays(pta, &nax, &nay); gplot = gplotCreate("junkskew", GPLOT_X11, "skew as fctn of y", "y (in raster lines from top)", "angle (in degrees)"); gplotAddPlot(gplot, NULL, naskew, GPLOT_POINTS, "linear lsf"); gplotAddPlot(gplot, nax, nay, GPLOT_POINTS, "actual data pts"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&nax); numaDestroy(&nay); } #endif /* DEBUG_PLOT */ ptaDestroy(&pta); return naskew; } leptonica-1.70/src/rop.c0000644000175000017500000004342012072633752013252 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rop.c * * General rasterop * l_int32 pixRasterop() * * In-place full band translation * l_int32 pixRasteropVip() * l_int32 pixRasteropHip() * * Full image translation (general and in-place) * l_int32 pixTranslate() * l_int32 pixRasteropIP() * * Full image rasterop with no translation * l_int32 pixRasteropFullImage() */ #include #include "allheaders.h" /*--------------------------------------------------------------------* * General rasterop (basic pix interface) * *--------------------------------------------------------------------*/ /*! * pixRasterop() * * Input: pixd (dest pix) * dx (x val of UL corner of dest rectangle) * dy (y val of UL corner of dest rectangle) * dw (width of dest rectangle) * dh (height of dest rectangle) * op (op code) * pixs (src pix) * sx (x val of UL corner of src rectangle) * sy (y val of UL corner of src rectangle) * Return: 0 if OK; 1 on error. * * Notes: * (1) This has the standard set of 9 args for rasterop. * This function is your friend; it is worth memorizing! * (2) If the operation involves only dest, this calls * rasteropUniLow(). Otherwise, checks depth of the * src and dest, and if they match, calls rasteropLow(). * (3) For the two-image operation, where both pixs and pixd * are defined, they are typically different images. However * there are cases, such as pixSetMirroredBorder(), where * in-place operations can be done, blitting pixels from * one part of pixd to another. Consequently, we permit * such operations. If you use them, be sure that there * is no overlap between the source and destination rectangles * in pixd (!) * * Background: * ----------- * * There are 18 operations, described by the op codes in pix.h. * * One, PIX_DST, is a no-op. * * Three, PIX_CLR, PIX_SET, and PIX_NOT(PIX_DST) operate only on the dest. * These are handled by the low-level rasteropUniLow(). * * The other 14 involve the both the src and the dest, and depend on * the bit values of either just the src or the bit values of both * src and dest. They are handled by rasteropLow(): * * PIX_SRC s * PIX_NOT(PIX_SRC) ~s * PIX_SRC | PIX_DST s | d * PIX_SRC & PIX_DST s & d * PIX_SRC ^ PIX_DST s ^ d * PIX_NOT(PIX_SRC) | PIX_DST ~s | d * PIX_NOT(PIX_SRC) & PIX_DST ~s & d * PIX_NOT(PIX_SRC) ^ PIX_DST ~s ^ d * PIX_SRC | PIX_NOT(PIX_DST) s | ~d * PIX_SRC & PIX_NOT(PIX_DST) s & ~d * PIX_SRC ^ PIX_NOT(PIX_DST) s ^ ~d * PIX_NOT(PIX_SRC | PIX_DST) ~(s | d) * PIX_NOT(PIX_SRC & PIX_DST) ~(s & d) * PIX_NOT(PIX_SRC ^ PIX_DST) ~(s ^ d) * * Each of these is implemented with one of three low-level * functions, depending on the alignment of the left edge * of the src and dest rectangles: * * a fastest implementation if both left edges are * (32-bit) word aligned * * a very slightly slower implementation if both left * edges have the same relative (32-bit) word alignment * * the general routine that is invoked when * both left edges have different word alignment * * Of the 14 binary rasterops above, only 12 are unique * logical combinations (out of a possible 16) of src * and dst bits: * * (sd) (11) (10) (01) (00) * ----------------------------------------------- * s 1 1 0 0 * ~s 0 1 0 1 * s | d 1 1 1 0 * s & d 1 0 0 0 * s ^ d 0 1 1 0 * ~s | d 1 0 1 1 * ~s & d 0 0 1 0 * ~s ^ d 1 0 0 1 * s | ~d 1 1 0 1 * s & ~d 0 1 0 0 * s ^ ~d 1 0 0 1 * ~(s | d) 0 0 0 1 * ~(s & d) 0 1 1 1 * ~(s ^ d) 1 0 0 1 * * Note that the following three operations are equivalent: * ~(s ^ d) * ~s ^ d * s ^ ~d * and in the implementation, we call them out with the first form; * namely, ~(s ^ d). * * Of the 16 possible binary combinations of src and dest bits, * the remaining 4 unique ones are independent of the src bit. * They depend on either just the dest bit or on neither * the src nor dest bits: * * d 1 0 1 0 (indep. of s) * ~d 0 1 0 1 (indep. of s) * CLR 0 0 0 0 (indep. of both s & d) * SET 1 1 1 1 (indep. of both s & d) * * As mentioned above, three of these are implemented by * rasteropUniLow(), and one is a no-op. * * How can these operation codes be represented by bits * in such a way that when the basic operations are performed * on the bits the results are unique for unique * operations, and mimic the logic table given above? * * The answer is to choose a particular order of the pairings: * (sd) (11) (10) (01) (00) * (which happens to be the same as in the above table) * and to translate the result into 4-bit representations * of s and d. For example, the Sun rasterop choice * (omitting the extra bit for clipping) is * * PIX_SRC 0xc * PIX_DST 0xa * * This corresponds to our pairing order given above: * (sd) (11) (10) (01) (00) * where for s = 1 we get the bit pattern * PIX_SRC: 1 1 0 0 (0xc) * and for d = 1 we get the pattern * PIX_DST: 1 0 1 0 (0xa) * * OK, that's the pairing order that Sun chose. How many different * ways can we assign bit patterns to PIX_SRC and PIX_DST to get * the boolean ops to work out? Any of the 4 pairs can be put * in the first position, any of the remaining 3 pairs can go * in the second; and one of the remaining 2 pairs can go the the third. * There is a total of 4*3*2 = 24 ways these pairs can be permuted. */ l_int32 pixRasterop(PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy) { l_int32 dd; PROCNAME("pixRasterop"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (op == PIX_DST) /* no-op */ return 0; /* Check if operation is only on dest */ dd = pixGetDepth(pixd); if (op == PIX_CLR || op == PIX_SET || op == PIX_NOT(PIX_DST)) { rasteropUniLow(pixGetData(pixd), pixGetWidth(pixd), pixGetHeight(pixd), dd, pixGetWpl(pixd), dx, dy, dw, dh, op); return 0; } if (!pixs) return ERROR_INT("pixs not defined", procName, 1); /* Check depth of src and dest; these must agree */ if (dd != pixGetDepth(pixs)) return ERROR_INT("depths of pixs and pixd differ", procName, 1); rasteropLow(pixGetData(pixd), pixGetWidth(pixd), pixGetHeight(pixd), dd, pixGetWpl(pixd), dx, dy, dw, dh, op, pixGetData(pixs), pixGetWidth(pixs), pixGetHeight(pixs), pixGetWpl(pixs), sx, sy); return 0; } /*--------------------------------------------------------------------* * In-place full band translation * *--------------------------------------------------------------------*/ /*! * pixRasteropVip() * * Input: pixd (in-place) * bx (left edge of vertical band) * bw (width of vertical band) * vshift (vertical shift of band; vshift > 0 is down) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: 0 if OK; 1 on error * * Notes: * (1) This rasterop translates a vertical band of the * image either up or down, bringing in either white * or black pixels from outside the image. * (2) The vertical band extends the full height of pixd. * (3) If a colormap exists, the nearest color to white or black * is brought in. */ l_int32 pixRasteropVip(PIX *pixd, l_int32 bx, l_int32 bw, l_int32 vshift, l_int32 incolor) { l_int32 w, h, d, index, op; PIX *pixt; PIXCMAP *cmap; PROCNAME("pixRasteropVip"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid value for incolor", procName, 1); if (bw <= 0) return ERROR_INT("bw must be > 0", procName, 1); if (vshift == 0) return 0; pixGetDimensions(pixd, &w, &h, &d); rasteropVipLow(pixGetData(pixd), w, h, d, pixGetWpl(pixd), bx, bw, vshift); cmap = pixGetColormap(pixd); if (!cmap) { if ((d == 1 && incolor == L_BRING_IN_BLACK) || (d > 1 && incolor == L_BRING_IN_WHITE)) op = PIX_SET; else op = PIX_CLR; /* Set the pixels brought in at top or bottom */ if (vshift > 0) pixRasterop(pixd, bx, 0, bw, vshift, op, NULL, 0, 0); else /* vshift < 0 */ pixRasterop(pixd, bx, h + vshift, bw, -vshift, op, NULL, 0, 0); return 0; } /* Get the nearest index and fill with that */ if (incolor == L_BRING_IN_BLACK) pixcmapGetRankIntensity(cmap, 0.0, &index); else /* white */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixt = pixCreate(bw, L_ABS(vshift), d); pixSetAllArbitrary(pixt, index); if (vshift > 0) pixRasterop(pixd, bx, 0, bw, vshift, PIX_SRC, pixt, 0, 0); else /* vshift < 0 */ pixRasterop(pixd, bx, h + vshift, bw, -vshift, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); return 0; } /*! * pixRasteropHip() * * Input: pixd (in-place operation) * by (top of horizontal band) * bh (height of horizontal band) * hshift (horizontal shift of band; hshift > 0 is to right) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: 0 if OK; 1 on error * * Notes: * (1) This rasterop translates a horizontal band of the * image either left or right, bringing in either white * or black pixels from outside the image. * (2) The horizontal band extends the full width of pixd. * (3) If a colormap exists, the nearest color to white or black * is brought in. */ l_int32 pixRasteropHip(PIX *pixd, l_int32 by, l_int32 bh, l_int32 hshift, l_int32 incolor) { l_int32 w, h, d, index, op; PIX *pixt; PIXCMAP *cmap; PROCNAME("pixRasteropHip"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return ERROR_INT("invalid value for incolor", procName, 1); if (bh <= 0) return ERROR_INT("bh must be > 0", procName, 1); if (hshift == 0) return 0; pixGetDimensions(pixd, &w, &h, &d); rasteropHipLow(pixGetData(pixd), h, d, pixGetWpl(pixd), by, bh, hshift); cmap = pixGetColormap(pixd); if (!cmap) { if ((d == 1 && incolor == L_BRING_IN_BLACK) || (d > 1 && incolor == L_BRING_IN_WHITE)) op = PIX_SET; else op = PIX_CLR; /* Set the pixels brought in at left or right */ if (hshift > 0) pixRasterop(pixd, 0, by, hshift, bh, op, NULL, 0, 0); else /* hshift < 0 */ pixRasterop(pixd, w + hshift, by, -hshift, bh, op, NULL, 0, 0); return 0; } /* Get the nearest index and fill with that */ if (incolor == L_BRING_IN_BLACK) pixcmapGetRankIntensity(cmap, 0.0, &index); else /* white */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixt = pixCreate(L_ABS(hshift), bh, d); pixSetAllArbitrary(pixt, index); if (hshift > 0) pixRasterop(pixd, 0, by, hshift, bh, PIX_SRC, pixt, 0, 0); else /* hshift < 0 */ pixRasterop(pixd, w + hshift, by, -hshift, bh, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); return 0; } /*--------------------------------------------------------------------* * Full image translation (general and in-place) * *--------------------------------------------------------------------*/ /*! * pixTranslate() * * Input: pixd ( destination: this can be null, * equal to pixs, or different from pixs) * pixs * hshift (horizontal shift; hshift > 0 is to right) * vshift (vertical shift; vshift > 0 is down) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error. * * Notes: * (1) The general pattern is: * pixd = pixTranslate(pixd, pixs, ...); * For clarity, when you know the case, use one of these: * pixd = pixTranslate(NULL, pixs, ...); // new * pixTranslate(pixs, pixs, ...); // in-place * pixTranslate(pixd, pixs, ...); // to existing pixd * (2) If an existing pixd is not the same size as pixs, the * image data will be reallocated. */ PIX * pixTranslate(PIX *pixd, PIX *pixs, l_int32 hshift, l_int32 vshift, l_int32 incolor) { PROCNAME("pixTranslate"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Prepare pixd for in-place operation */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixRasteropIP(pixd, hshift, vshift, incolor); return pixd; } /*! * pixRasteropIP() * * Input: pixd (in-place translation) * hshift (horizontal shift; hshift > 0 is to right) * vshift (vertical shift; vshift > 0 is down) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: 0 if OK; 1 on error */ l_int32 pixRasteropIP(PIX *pixd, l_int32 hshift, l_int32 vshift, l_int32 incolor) { l_int32 w, h; PROCNAME("pixRasteropIP"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); pixGetDimensions(pixd, &w, &h, NULL); pixRasteropHip(pixd, 0, h, hshift, incolor); pixRasteropVip(pixd, 0, w, vshift, incolor); return 0; } /*--------------------------------------------------------------------* * Full image rasterop with no shifts * *--------------------------------------------------------------------*/ /*! * pixRasteropFullImage() * * Input: pixd * pixs * op (any of the op-codes) * Return: 0 if OK; 1 on error * * Notes: * - this is a wrapper for a common 2-image raster operation * - both pixs and pixd must be defined * - the operation is performed with aligned UL corners of pixs and pixd * - the operation clips to the smallest pix; if the width or height * of pixd is larger than pixs, some pixels in pixd will be unchanged */ l_int32 pixRasteropFullImage(PIX *pixd, PIX *pixs, l_int32 op) { PROCNAME("pixRasteropFullImage"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixRasterop(pixd, 0, 0, pixGetWidth(pixd), pixGetHeight(pixd), op, pixs, 0, 0); return 0; } leptonica-1.70/src/ccbord.c0000644000175000017500000024320612244745213013707 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ccbord.c * * CCBORDA and CCBORD creation and destruction * CCBORDA *ccbaCreate() * void *ccbaDestroy() * CCBORD *ccbCreate() * void *ccbDestroy() * * CCBORDA addition * l_int32 ccbaAddCcb() * static l_int32 ccbaExtendArray() * * CCBORDA accessors * l_int32 ccbaGetCount() * l_int32 ccbaGetCcb() * * Top-level border-finding routines * CCBORDA *pixGetAllCCBorders() * CCBORD *pixGetCCBorders() * PTAA *pixGetOuterBordersPtaa() * PTA *pixGetOuterBorderPta() * * Lower-level border location routines * l_int32 pixGetOuterBorder() * l_int32 pixGetHoleBorder() * l_int32 findNextBorderPixel() * void locateOutsideSeedPixel() * * Border conversions * l_int32 ccbaGenerateGlobalLocs() * l_int32 ccbaGenerateStepChains() * l_int32 ccbaStepChainsToPixCoords() * l_int32 ccbaGenerateSPGlobalLocs() * * Conversion to single path * l_int32 ccbaGenerateSinglePath() * PTA *getCutPathForHole() * * Border and full image rendering * PIX *ccbaDisplayBorder() * PIX *ccbaDisplaySPBorder() * PIX *ccbaDisplayImage1() * PIX *ccbaDisplayImage2() * * Serialize for I/O * l_int32 ccbaWrite() * l_int32 ccbaWriteStream() * l_int32 ccbaRead() * l_int32 ccbaReadStream() * * SVG output * l_int32 ccbaWriteSVG() * char *ccbaWriteSVGString() * * * Border finding is tricky because components can have * holes, which also need to be traced out. The outer * border can be connected with all the hole borders, * so that there is a single border for each component. * [Alternatively, the connecting paths can be eliminated if * you're willing to have a set of borders for each * component (an exterior border and some number of * interior ones), with "line to" operations tracing * out each border and "move to" operations going from * one border to the next.] * * Here's the plan. We get the pix for each connected * component, and trace its exterior border. We then * find the holes (if any) in the pix, and separately * trace out their borders, all using the same * border-following rule that has ON pixels on the right * side of the path. * * [For svg, we may want to turn each set of borders for a c.c. * into a closed path. This can be done by tunnelling * through the component from the outer border to each of the * holes, going in and coming out along the same path so * the connection will be invisible in any rendering * (display or print) from the outline. The result is a * closed path, where the outside border is traversed * cw and each hole is traversed ccw. The svg renderer * is assumed to handle these closed borders properly.] * * Each border is a closed path that is traversed in such * a way that the stuff inside the c.c. is on the right * side of the traveller. The border of a singly-connected * component is thus traversed cw, and the border of the * holes inside a c.c. are traversed ccw. Suppose we have * a list of all the borders of each c.c., both the cw and ccw * traversals. How do we reconstruct the image? * * Reconstruction: * * Method 1. Topological method using connected components. * We have closed borders composed of cw border pixels for the * exterior of c.c. and ccw border pixels for the interior (holes) * in the c.c. * (a) Initialize the destination to be OFF. Then, * in any order: * (b) Fill the components within and including the cw borders, * and sequentially XOR them onto the destination. * (c) Fill the components within but not including the ccw * borders and sequentially XOR them onto the destination. * The components that are XOR'd together can be generated as follows: * (a) For each closed cw path, use pixFillClosedBorders(): * (1) Turn on the path pixels in a subimage that * minimally supports the border. * (2) Do a 4-connected fill from a seed of 1 pixel width * on the border, using the inverted image in (1) as * a filling mask. * (3) Invert the fill result: this gives the component * including the exterior cw path, with all holes * filled. * (b) For each closed ccw path (hole): * (1) Turn on the path pixels in a subimage that minimally * supports the path. * (2) Find a seed pixel on the inside of this path. * (3) Do a 4-connected fill from this seed pixel, using * the inverted image of the path in (1) as a filling * mask. * * ------------------------------------------------------ * * Method 2. A variant of Method 1. Topological. * In Method 1, we treat the exterior border differently from * the interior (hole) borders. Here, all borders in a c.c. * are treated equally: * (1) Start with a pix with a 1 pixel OFF boundary * enclosing all the border pixels of the c.c. * This is the filling mask. * (2) Make a seed image of the same size as follows: for * each border, put one seed pixel OUTSIDE the border * (where OUTSIDE is determined by the inside/outside * convention for borders). * (3) Seedfill into the seed image, filling in the regions * determined by the filling mask. The fills are clipped * by the border pixels. * (4) Inverting this, we get the c.c. properly filled, * with the holes empty! * (5) Rasterop using XOR the filled c.c. (but not the 1 * pixel boundary) into the full dest image. * * Method 2 is about 1.2x faster than Method 1 on text images, * and about 2x faster on complex images (e.g., with halftones). * * ------------------------------------------------------ * * Method 3. The traditional way to fill components delineated * by boundaries is through scan line conversion. It's a bit * tricky, and I have not yet tried to implement it. * * ------------------------------------------------------ * * Method 4. [Nota Bene: this method probably doesn't work, and * won't be implemented. If I get a more traditional scan line * conversion algorithm working, I'll erase these notes.] * Render all border pixels on a destination image, * which will be the final result after scan conversion. Assign * a value 1 to pixels on cw paths, 2 to pixels on ccw paths, * and 3 to pixels that are on both paths. Each of the paths * is an 8-connected component. Now scan across each raster * line. The attempt is to make rules for each scan line * that are independent of neighboring scanlines. Here are * a set of rules for writing ON pixels on a destination raster image: * * (a) The rasterizer will be in one of two states: ON and OFF. * (b) Start each line in the OFF state. In the OFF state, * skip pixels until you hit a path of any type. Turn * the path pixel ON. * (c) If the state is ON, each pixel you encounter will * be turned on, until and including hitting a path pixel. * (d) When you hit a path pixel, if the path does NOT cut * through the line, so that there is not an 8-cc path * pixel (of any type) both above and below, the state * is unchanged (it stays either ON or OFF). * (e) If the path does cut through, but with a possible change * of pixel type, then we decide whether or * not to toggle the state based on the values of the * path pixel and the path pixels above and below: * (1) if a 1 path cuts through, toggle; * (1) if a 2 path cuts through, toggle; * (3) if a 3 path cuts through, do not toggle; * (4) if on one side a 3 touches both a 1 and a 2, use the 2 * (5) if a 3 has any 1 neighbors, toggle; else if it has * no 1 neighbors, do not toggle; * (6) if a 2 has any neighbors that are 1 or 3, * do not toggle * (7) if a 1 has neighbors 1 and x (x = 2 or 3), * toggle * * * To visualize how these rules work, consider the following * component with border pixels labeled according to the scheme * above. We also show the values of the interior pixels * (w=OFF, b=ON), but these of course must be inferred properly * from the rules above: * * 3 * 3 w 3 1 1 1 * 1 2 1 1 b 2 b 1 * 1 b 1 3 w 2 1 * 3 b 1 1 b 2 b 1 * 3 w 3 1 1 1 * 3 w 3 * 1 b 2 b 1 * 1 2 w 2 1 * 1 b 2 w 2 b 1 * 1 2 w 2 1 * 1 2 b 1 * 1 b 1 * 1 * * * Even if this works, which is unlikely, it will certainly be * slow because decisions have to be made on a pixel-by-pixel * basis when encountering borders. * */ #include #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ /* In ccbaGenerateSinglePath(): don't save holes * in c.c. with ridiculously many small holes */ static const l_int32 NMAX_HOLES = 150; /* Tables used to trace the border. * - The 8 pixel positions of neighbors Q are labelled: * 1 2 3 * 0 P 4 * 7 6 5 * where the labels are the index offset [0, ... 7] of Q relative to P. * - xpostab[] and ypostab[] give the actual x and y pixel offsets * of Q relative to P, indexed by the index offset. * - qpostab[pos] gives the new index offset of Q relative to P, at * the time that a new P has been chosen to be in index offset * position 'pos' relative to the previous P. The relation * between P and Q is always 4-connected. */ static const l_int32 xpostab[] = {-1, -1, 0, 1, 1, 1, 0, -1}; static const l_int32 ypostab[] = {0, -1, -1, -1, 0, 1, 1, 1}; static const l_int32 qpostab[] = {6, 6, 0, 0, 2, 2, 4, 4}; /* Static function */ static l_int32 ccbaExtendArray(CCBORDA *ccba); #ifndef NO_CONSOLE_IO #define DEBUG_PRINT 0 #endif /* NO CONSOLE_IO */ /*---------------------------------------------------------------------* * ccba and ccb creation and destruction * *---------------------------------------------------------------------*/ /*! * ccbaCreate() * * Input: pixs (binary image; can be null) * n (initial number of ptrs) * Return: ccba, or null on error */ CCBORDA * ccbaCreate(PIX *pixs, l_int32 n) { CCBORDA *ccba; PROCNAME("ccbaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((ccba = (CCBORDA *)CALLOC(1, sizeof(CCBORDA))) == NULL) return (CCBORDA *)ERROR_PTR("ccba not made", procName, NULL); if (pixs) { ccba->pix = pixClone(pixs); ccba->w = pixGetWidth(pixs); ccba->h = pixGetHeight(pixs); } ccba->n = 0; ccba->nalloc = n; if ((ccba->ccb = (CCBORD **)CALLOC(n, sizeof(CCBORD *))) == NULL) return (CCBORDA *)ERROR_PTR("ccba ptrs not made", procName, NULL); return ccba; } /*! * ccbaDestroy() * * Input: &ccba () * Return: void */ void ccbaDestroy(CCBORDA **pccba) { l_int32 i; CCBORDA *ccba; PROCNAME("ccbaDestroy"); if (pccba == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((ccba = *pccba) == NULL) return; pixDestroy(&ccba->pix); for (i = 0; i < ccba->n; i++) ccbDestroy(&ccba->ccb[i]); FREE(ccba->ccb); FREE(ccba); *pccba = NULL; return; } /*! * ccbCreate() * * Input: pixs () * Return: ccb or null on error */ CCBORD * ccbCreate(PIX *pixs) { BOXA *boxa; CCBORD *ccb; PTA *start; PTAA *local; PROCNAME("ccbCreate"); if (pixs) { if (pixGetDepth(pixs) != 1) return (CCBORD *)ERROR_PTR("pixs not binary", procName, NULL); } if ((ccb = (CCBORD *)CALLOC(1, sizeof(CCBORD))) == NULL) return (CCBORD *)ERROR_PTR("ccb not made", procName, NULL); ccb->refcount++; if (pixs) ccb->pix = pixClone(pixs); if ((boxa = boxaCreate(1)) == NULL) return (CCBORD *)ERROR_PTR("boxa not made", procName, NULL); ccb->boxa = boxa; if ((start = ptaCreate(1)) == NULL) return (CCBORD *)ERROR_PTR("start pta not made", procName, NULL); ccb->start = start; if ((local = ptaaCreate(1)) == NULL) return (CCBORD *)ERROR_PTR("local ptaa not made", procName, NULL); ccb->local = local; return ccb; } /*! * ccbDestroy() * * Input: &ccb () * Return: void */ void ccbDestroy(CCBORD **pccb) { CCBORD *ccb; PROCNAME("ccbDestroy"); if (pccb == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((ccb = *pccb) == NULL) return; ccb->refcount--; if (ccb->refcount == 0) { if (ccb->pix) pixDestroy(&ccb->pix); if (ccb->boxa) boxaDestroy(&ccb->boxa); if (ccb->start) ptaDestroy(&ccb->start); if (ccb->local) ptaaDestroy(&ccb->local); if (ccb->global) ptaaDestroy(&ccb->global); if (ccb->step) numaaDestroy(&ccb->step); if (ccb->splocal) ptaDestroy(&ccb->splocal); if (ccb->spglobal) ptaDestroy(&ccb->spglobal); FREE(ccb); *pccb = NULL; } return; } /*---------------------------------------------------------------------* * ccba addition * *---------------------------------------------------------------------*/ /*! * ccbaAddCcb() * * Input: ccba * ccb (to be added by insertion) * Return: 0 if OK; 1 on error */ l_int32 ccbaAddCcb(CCBORDA *ccba, CCBORD *ccb) { l_int32 n; PROCNAME("ccbaAddCcb"); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); if (!ccb) return ERROR_INT("ccb not defined", procName, 1); n = ccbaGetCount(ccba); if (n >= ccba->nalloc) ccbaExtendArray(ccba); ccba->ccb[n] = ccb; ccba->n++; return 0; } /*! * ccbaExtendArray() * * Input: ccba * Return: 0 if OK; 1 on error */ static l_int32 ccbaExtendArray(CCBORDA *ccba) { PROCNAME("ccbaExtendArray"); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); if ((ccba->ccb = (CCBORD **)reallocNew((void **)&ccba->ccb, sizeof(CCBORD *) * ccba->nalloc, 2 * sizeof(CCBORD *) * ccba->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); ccba->nalloc = 2 * ccba->nalloc; return 0; } /*---------------------------------------------------------------------* * ccba accessors * *---------------------------------------------------------------------*/ /*! * ccbaGetCount() * * Input: ccba * Return: count, with 0 on error */ l_int32 ccbaGetCount(CCBORDA *ccba) { PROCNAME("ccbaGetCount"); if (!ccba) return ERROR_INT("ccba not defined", procName, 0); return ccba->n; } /*! * ccbaGetCcb() * * Input: ccba * Return: ccb, or null on error */ CCBORD * ccbaGetCcb(CCBORDA *ccba, l_int32 index) { CCBORD *ccb; PROCNAME("ccbaGetCcb"); if (!ccba) return (CCBORD *)ERROR_PTR("ccba not defined", procName, NULL); if (index < 0 || index >= ccba->n) return (CCBORD *)ERROR_PTR("index out of bounds", procName, NULL); ccb = ccba->ccb[index]; ccb->refcount++; return ccb; } /*---------------------------------------------------------------------* * Top-level border-finding routines * *---------------------------------------------------------------------*/ /*! * pixGetAllCCBorders() * * Input: pixs (1 bpp) * Return: ccborda, or null on error */ CCBORDA * pixGetAllCCBorders(PIX *pixs) { l_int32 n, i; BOX *box; BOXA *boxa; CCBORDA *ccba; CCBORD *ccb; PIX *pix; PIXA *pixa; PROCNAME("pixGetAllCCBorders"); if (!pixs) return (CCBORDA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (CCBORDA *)ERROR_PTR("pixs not binary", procName, NULL); if ((boxa = pixConnComp(pixs, &pixa, 8)) == NULL) return (CCBORDA *)ERROR_PTR("boxa not made", procName, NULL); n = boxaGetCount(boxa); if ((ccba = ccbaCreate(pixs, n)) == NULL) return (CCBORDA *)ERROR_PTR("ccba not made", procName, NULL); for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) return (CCBORDA *)ERROR_PTR("pix not found", procName, NULL); if ((box = pixaGetBox(pixa, i, L_CLONE)) == NULL) return (CCBORDA *)ERROR_PTR("box not found", procName, NULL); if ((ccb = pixGetCCBorders(pix, box)) == NULL) return (CCBORDA *)ERROR_PTR("ccb not made", procName, NULL); /* ptaWriteStream(stderr, ccb->local, 1); */ ccbaAddCcb(ccba, ccb); pixDestroy(&pix); boxDestroy(&box); } boxaDestroy(&boxa); pixaDestroy(&pixa); return ccba; } /*! * pixGetCCBorders() * * Input: pixs (1 bpp, one 8-connected component) * box (xul, yul, width, height) in global coords * Return: ccbord, or null on error * * Notes: * (1) We are finding the exterior and interior borders * of an 8-connected component. This should be used * on a pix that has exactly one 8-connected component. * (2) Typically, pixs is a c.c. in some larger pix. The * input box gives its location in global coordinates. * This box is saved, as well as the boxes for the * borders of any holes within the c.c., but the latter * are given in relative coords within the c.c. * (3) The calculations for the exterior border are done * on a pix with a 1-pixel * added border, but the saved pixel coordinates * are the correct (relative) ones for the input pix * (without a 1-pixel border) * (4) For the definition of the three tables -- xpostab[], ypostab[] * and qpostab[] -- see above where they are defined. */ CCBORD * pixGetCCBorders(PIX *pixs, BOX *box) { l_int32 allzero, i, x, xh, w, nh; l_int32 xs, ys; /* starting hole border pixel, relative in pixs */ l_uint32 val; BOX *boxt, *boxe; BOXA *boxa; CCBORD *ccb; PIX *pixh; /* for hole components */ PIX *pixt; PIXA *pixa; PROCNAME("pixGetCCBorders"); if (!pixs) return (CCBORD *)ERROR_PTR("pixs not defined", procName, NULL); if (!box) return (CCBORD *)ERROR_PTR("box not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (CCBORD *)ERROR_PTR("pixs not binary", procName, NULL); pixZero(pixs, &allzero); if (allzero) return (CCBORD *)ERROR_PTR("pixs all 0", procName, NULL); if ((ccb = ccbCreate(pixs)) == NULL) return (CCBORD *)ERROR_PTR("ccb not made", procName, NULL); /* Get the exterior border */ pixGetOuterBorder(ccb, pixs, box); /* Find the holes, if any */ if ((pixh = pixHolesByFilling(pixs, 4)) == NULL) return (CCBORD *)ERROR_PTR("pixh not made", procName, NULL); pixZero(pixh, &allzero); if (allzero) { /* no holes */ pixDestroy(&pixh); return ccb; } /* Get c.c. and locations of the holes */ if ((boxa = pixConnComp(pixh, &pixa, 4)) == NULL) return (CCBORD *)ERROR_PTR("boxa not made", procName, NULL); nh = boxaGetCount(boxa); /* fprintf(stderr, "%d holes\n", nh); */ /* For each hole, find an interior pixel within the hole, * then march to the right and stop at the first border * pixel. Save the bounding box of the border, which * is 1 pixel bigger on each side than the bounding box * of the hole itself. Note that we use a pix of the * c.c. of the hole itself to be sure that we start * with a pixel in the hole of the proper component. * If we did everything from the parent component, it is * possible to start in a different hole that is within * the b.b. of a larger hole. */ w = pixGetWidth(pixs); for (i = 0; i < nh; i++) { boxt = boxaGetBox(boxa, i, L_CLONE); pixt = pixaGetPix(pixa, i, L_CLONE); ys = boxt->y; /* there must be a hole pixel on this raster line */ for (x = 0; x < boxt->w; x++) { /* look for (fg) hole pixel */ pixGetPixel(pixt, x, 0, &val); if (val == 1) { xh = x; break; } } if (x == boxt->w) { L_WARNING("no hole pixel found!\n", procName); continue; } for (x = xh + boxt->x; x < w; x++) { /* look for (fg) border pixel */ pixGetPixel(pixs, x, ys, &val); if (val == 1) { xs = x; break; } } boxe = boxCreate(boxt->x - 1, boxt->y - 1, boxt->w + 2, boxt->h + 2); #if DEBUG_PRINT boxPrintStreamInfo(stderr, box); boxPrintStreamInfo(stderr, boxe); fprintf(stderr, "xs = %d, ys = %d\n", xs, ys); #endif /* DEBUG_PRINT */ pixGetHoleBorder(ccb, pixs, boxe, xs, ys); boxDestroy(&boxt); boxDestroy(&boxe); pixDestroy(&pixt); } boxaDestroy(&boxa); pixaDestroy(&pixa); pixDestroy(&pixh); return ccb; } /*! * pixGetOuterBordersPtaa() * * Input: pixs (1 bpp) * Return: ptaa (of outer borders, in global coords), or null on error */ PTAA * pixGetOuterBordersPtaa(PIX *pixs) { l_int32 i, n; BOX *box; BOXA *boxa; PIX *pix; PIXA *pixa; PTA *pta; PTAA *ptaa; PROCNAME("pixGetOuterBordersPtaa"); if (!pixs) return (PTAA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PTAA *)ERROR_PTR("pixs not binary", procName, NULL); boxa = pixConnComp(pixs, &pixa, 8); n = boxaGetCount(boxa); if (n == 0) { boxaDestroy(&boxa); pixaDestroy(&pixa); return (PTAA *)ERROR_PTR("pixs empty", procName, NULL); } ptaa = ptaaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pix = pixaGetPix(pixa, i, L_CLONE); pta = pixGetOuterBorderPta(pix, box); if (pta) ptaaAddPta(ptaa, pta, L_INSERT); boxDestroy(&box); pixDestroy(&pix); } pixaDestroy(&pixa); boxaDestroy(&boxa); return ptaa; } /*! * pixGetOuterBorderPta() * * Input: pixs (1 bpp, one 8-connected component) * box ( of pixs, in global coordinates) * Return: pta (of outer border, in global coords), or null on error * * Notes: * (1) We are finding the exterior border of a single 8-connected * component. * (2) If box is NULL, the outline returned is in the local coords * of the input pix. Otherwise, box is assumed to give the * location of the pix in global coordinates, and the returned * pta will be in those global coordinates. */ PTA * pixGetOuterBorderPta(PIX *pixs, BOX *box) { l_int32 allzero, x, y; BOX *boxt; CCBORD *ccb; PTA *ptaloc, *ptad; PROCNAME("pixGetOuterBorderPta"); if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs not binary", procName, NULL); pixZero(pixs, &allzero); if (allzero) return (PTA *)ERROR_PTR("pixs all 0", procName, NULL); if ((ccb = ccbCreate(pixs)) == NULL) return (PTA *)ERROR_PTR("ccb not made", procName, NULL); if (!box) boxt = boxCreate(0, 0, pixGetWidth(pixs), pixGetHeight(pixs)); else boxt = boxClone(box); /* Get the exterior border in local coords */ pixGetOuterBorder(ccb, pixs, boxt); if ((ptaloc = ptaaGetPta(ccb->local, 0, L_CLONE)) == NULL) { ccbDestroy(&ccb); boxDestroy(&boxt); return (PTA *)ERROR_PTR("ptaloc not made", procName, NULL); } /* Transform to global coordinates, if they are given */ if (box) { boxGetGeometry(box, &x, &y, NULL, NULL); ptad = ptaTransform(ptaloc, x, y, 1.0, 1.0); } else { ptad = ptaClone(ptaloc); } ptaDestroy(&ptaloc); boxDestroy(&boxt); ccbDestroy(&ccb); return ptad; } /*---------------------------------------------------------------------* * Lower-level border-finding routines * *---------------------------------------------------------------------*/ /*! * pixGetOuterBorder() * * Input: ccb (unfilled) * pixs (for the component at hand) * box (for the component, in global coords) * Return: 0 if OK, 1 on error * * Notes: * (1) the border is saved in relative coordinates within * the c.c. (pixs). Because the calculation is done * in pixb with added 1 pixel border, we must subtract * 1 from each pixel value before storing it. * (2) the stopping condition is that after the first pixel is * returned to, the next pixel is the second pixel. Having * these 2 pixels recur in sequence proves the path is closed, * and we do not store the second pixel again. */ l_int32 pixGetOuterBorder(CCBORD *ccb, PIX *pixs, BOX *box) { l_int32 fpx, fpy, spx, spy, qpos; l_int32 px, py, npx, npy; l_int32 w, h, wpl; l_uint32 *data; PTA *pta; PIX *pixb; /* with 1 pixel border */ PROCNAME("pixGetOuterBorder"); if (!ccb) return ERROR_INT("ccb not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); /* Add 1-pixel border all around, and find start pixel */ if ((pixb = pixAddBorder(pixs, 1, 0)) == NULL) return ERROR_INT("pixs not made", procName, 1); if (!nextOnPixelInRaster(pixb, 1, 1, &px, &py)) return ERROR_INT("no start pixel found", procName, 1); qpos = 0; /* relative to p */ fpx = px; /* save location of first pixel on border */ fpy = py; /* Save box and start pixel in relative coords */ boxaAddBox(ccb->boxa, box, L_COPY); ptaAddPt(ccb->start, px - 1, py - 1); if ((pta = ptaCreate(0)) == NULL) return ERROR_INT("pta not made", procName, 1); ptaaAddPta(ccb->local, pta, L_INSERT); ptaAddPt(pta, px - 1, py - 1); /* initial point */ w = pixGetWidth(pixb); h = pixGetHeight(pixb); data = pixGetData(pixb); wpl = pixGetWpl(pixb); /* Get the second point; if there is none, return */ if (findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy)) { pixDestroy(&pixb); return 0; } spx = npx; /* save location of second pixel on border */ spy = npy; ptaAddPt(pta, npx - 1, npy - 1); /* second point */ px = npx; py = npy; while (1) { findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy); if (px == fpx && py == fpy && npx == spx && npy == spy) break; ptaAddPt(pta, npx - 1, npy - 1); px = npx; py = npy; } pixDestroy(&pixb); return 0; } /*! * pixGetHoleBorder() * * Input: ccb (the exterior border is already made) * pixs (for the connected component at hand) * box (for the specific hole border, in relative * coordinates to the c.c.) * xs, ys (first pixel on hole border, relative to c.c.) * Return: 0 if OK, 1 on error * * Notes: * (1) we trace out hole border on pixs without addition * of single pixel added border to pixs * (2) therefore all coordinates are relative within the c.c. (pixs) * (3) same position tables and stopping condition as for * exterior borders */ l_int32 pixGetHoleBorder(CCBORD *ccb, PIX *pixs, BOX *box, l_int32 xs, l_int32 ys) { l_int32 fpx, fpy, spx, spy, qpos; l_int32 px, py, npx, npy; l_int32 w, h, wpl; l_uint32 *data; PTA *pta; PROCNAME("pixGetHoleBorder"); if (!ccb) return ERROR_INT("ccb not defined", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); /* Add border and find start pixel */ qpos = 0; /* orientation of Q relative to P */ fpx = xs; /* save location of first pixel on border */ fpy = ys; /* Save box and start pixel */ boxaAddBox(ccb->boxa, box, L_COPY); ptaAddPt(ccb->start, xs, ys); if ((pta = ptaCreate(0)) == NULL) return ERROR_INT("pta not made", procName, 1); ptaaAddPta(ccb->local, pta, L_INSERT); ptaAddPt(pta, xs, ys); /* initial pixel */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); data = pixGetData(pixs); wpl = pixGetWpl(pixs); /* Get the second point; there should always be at least 4 pts * in a minimal hole border! */ if (findNextBorderPixel(w, h, data, wpl, xs, ys, &qpos, &npx, &npy)) return ERROR_INT("isolated hole border point!", procName, 1); spx = npx; /* save location of second pixel on border */ spy = npy; ptaAddPt(pta, npx, npy); /* second pixel */ px = npx; py = npy; while (1) { findNextBorderPixel(w, h, data, wpl, px, py, &qpos, &npx, &npy); if (px == fpx && py == fpy && npx == spx && npy == spy) break; ptaAddPt(pta, npx, npy); px = npx; py = npy; } return 0; } /*! * findNextBorderPixel() * * Input: w, h, data, wpl * (px, py), (current P) * &qpos (input current Q; new Q) * (&npx, &npy) ( new P) * Return: 0 if next pixel found; 1 otherwise * * Notes: * (1) qpos increases clockwise from 0 to 7, with 0 at * location with Q to left of P: Q P * (2) this is a low-level function that does not check input * parameters. All calling functions should check them. */ l_int32 findNextBorderPixel(l_int32 w, l_int32 h, l_uint32 *data, l_int32 wpl, l_int32 px, l_int32 py, l_int32 *pqpos, l_int32 *pnpx, l_int32 *pnpy) { l_int32 qpos, i, pos, npx, npy, val; l_uint32 *line; qpos = *pqpos; for (i = 1; i < 8; i++) { pos = (qpos + i) % 8; npx = px + xpostab[pos]; npy = py + ypostab[pos]; line = data + npy * wpl; val = GET_DATA_BIT(line, npx); if (val) { *pnpx = npx; *pnpy = npy; *pqpos = qpostab[pos]; return 0; } } return 1; } /*! * locateOutsideSeedPixel() * * Input: fpx, fpy (location of first pixel) * spx, spy (location of second pixel) * &xs, &xy (seed pixel to be returned) * * Notes: * (1) the first and second pixels must be 8-adjacent, * so |dx| <= 1 and |dy| <= 1 and both dx and dy * cannot be 0. There are 8 possible cases. * (2) the seed pixel is OUTSIDE the foreground of the c.c. * (3) these rules are for the situation where the INSIDE * of the c.c. is on the right as you follow the border: * cw for an exterior border and ccw for a hole border. */ void locateOutsideSeedPixel(l_int32 fpx, l_int32 fpy, l_int32 spx, l_int32 spy, l_int32 *pxs, l_int32 *pys) { l_int32 dx, dy; dx = spx - fpx; dy = spy - fpy; if (dx * dy == 1) { *pxs = fpx + dx; *pys = fpy; } else if (dx * dy == -1) { *pxs = fpx; *pys = fpy + dy; } else if (dx == 0) { *pxs = fpx + dy; *pys = fpy + dy; } else /* dy == 0 */ { *pxs = fpx + dx; *pys = fpy - dx; } return; } /*---------------------------------------------------------------------* * Border conversions * *---------------------------------------------------------------------*/ /*! * ccbaGenerateGlobalLocs() * * Input: ccba (with local chain ptaa of borders computed) * Return: 0 if OK, 1 on error * * Action: this uses the pixel locs in the local ptaa, which are all * relative to each c.c., to find the global pixel locations, * and stores them in the global ptaa. */ l_int32 ccbaGenerateGlobalLocs(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k, xul, yul, x, y; CCBORD *ccb; PTAA *ptaal, *ptaag; PTA *ptal, *ptag; PROCNAME("ccbaGenerateGlobalLocs"); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); /* Get the UL corner in global coords, (xul, yul), of the c.c. */ boxaGetBoxGeometry(ccb->boxa, 0, &xul, &yul, NULL, NULL); /* Make a new global ptaa, removing any old one */ ptaal = ccb->local; nb = ptaaGetCount(ptaal); /* number of borders */ if (ccb->global) /* remove old one */ ptaaDestroy(&ccb->global); if ((ptaag = ptaaCreate(nb)) == NULL) return ERROR_INT("ptaag not made", procName, 1); ccb->global = ptaag; /* save new one */ /* Iterate through the borders for this c.c. */ for (j = 0; j < nb; j++) { ptal = ptaaGetPta(ptaal, j, L_CLONE); n = ptaGetCount(ptal); /* number of pixels in border */ if ((ptag = ptaCreate(n)) == NULL) return ERROR_INT("ptag not made", procName, 1); ptaaAddPta(ptaag, ptag, L_INSERT); for (k = 0; k < n; k++) { ptaGetIPt(ptal, k, &x, &y); ptaAddPt(ptag, x + xul, y + yul); } ptaDestroy(&ptal); } ccbDestroy(&ccb); } return 0; } /*! * ccbaGenerateStepChains() * * Input: ccba (with local chain ptaa of borders computed) * Return: 0 if OK, 1 on error * * Notes: * (1) This uses the pixel locs in the local ptaa, * which are all relative to each c.c., to find * the step directions for successive pixels in * the chain, and stores them in the step numaa. * (2) To get the step direction, use * 1 2 3 * 0 P 4 * 7 6 5 * where P is the previous pixel at (px, py). The step direction * is the number (from 0 through 7) for each relative location * of the current pixel at (cx, cy). It is easily found by * indexing into a 2-d 3x3 array (dirtab). */ l_int32 ccbaGenerateStepChains(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k; l_int32 px, py, cx, cy, stepdir; l_int32 dirtab[][3] = {{1, 2, 3}, {0, -1, 4}, {7, 6, 5}}; CCBORD *ccb; NUMA *na; NUMAA *naa; /* step chain code; to be made */ PTA *ptal; PTAA *ptaal; /* local chain code */ PROCNAME("ccbaGenerateStepChains"); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); /* Make a new step numaa, removing any old one */ ptaal = ccb->local; nb = ptaaGetCount(ptaal); /* number of borders */ if (ccb->step) /* remove old one */ numaaDestroy(&ccb->step); if ((naa = numaaCreate(nb)) == NULL) return ERROR_INT("naa not made", procName, 1); ccb->step = naa; /* save new one */ /* Iterate through the borders for this c.c. */ for (j = 0; j < nb; j++) { ptal = ptaaGetPta(ptaal, j, L_CLONE); n = ptaGetCount(ptal); /* number of pixels in border */ if (n == 1) { /* isolated pixel */ na = numaCreate(1); /* but leave it empty */ } else { /* trace out the boundary */ if ((na = numaCreate(n)) == NULL) return ERROR_INT("na not made", procName, 1); ptaGetIPt(ptal, 0, &px, &py); for (k = 1; k < n; k++) { ptaGetIPt(ptal, k, &cx, &cy); stepdir = dirtab[1 + cy - py][1 + cx - px]; numaAddNumber(na, stepdir); px = cx; py = cy; } } numaaAddNuma(naa, na, L_INSERT); ptaDestroy(&ptal); } ccbDestroy(&ccb); /* just decrement refcount */ } return 0; } /*! * ccbaStepChainsToPixCoords() * * Input: ccba (with step chains numaa of borders) * coordtype (CCB_GLOBAL_COORDS or CCB_LOCAL_COORDS) * Return: 0 if OK, 1 on error * * Notes: * (1) This uses the step chain data in each ccb to determine * the pixel locations, either global or local, * and stores them in the appropriate ptaa, * either global or local. For the latter, the * pixel locations are relative to the c.c. */ l_int32 ccbaStepChainsToPixCoords(CCBORDA *ccba, l_int32 coordtype) { l_int32 ncc, nb, n, i, j, k; l_int32 xul, yul, xstart, ystart, x, y, stepdir; BOXA *boxa; CCBORD *ccb; NUMA *na; NUMAA *naa; PTAA *ptaan; /* new pix coord ptaa */ PTA *ptas, *ptan; PROCNAME("ccbaStepChainsToPixCoords"); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); if (coordtype != CCB_GLOBAL_COORDS && coordtype != CCB_LOCAL_COORDS) return ERROR_INT("coordtype not valid", procName, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((naa = ccb->step) == NULL) return ERROR_INT("step numaa not found", procName, 1); if ((boxa = ccb->boxa) == NULL) return ERROR_INT("boxa not found", procName, 1); if ((ptas = ccb->start) == NULL) return ERROR_INT("start pta not found", procName, 1); /* For global coords, get the (xul, yul) of the c.c.; * otherwise, use relative coords. */ if (coordtype == CCB_LOCAL_COORDS) { xul = 0; yul = 0; } else { /* coordtype == CCB_GLOBAL_COORDS */ /* Get UL corner in global coords */ if (boxaGetBoxGeometry(boxa, 0, &xul, &yul, NULL, NULL)) return ERROR_INT("bounding rectangle not found", procName, 1); } /* Make a new ptaa, removing any old one */ nb = numaaGetCount(naa); /* number of borders */ if ((ptaan = ptaaCreate(nb)) == NULL) return ERROR_INT("ptaan not made", procName, 1); if (coordtype == CCB_LOCAL_COORDS) { if (ccb->local) /* remove old one */ ptaaDestroy(&ccb->local); ccb->local = ptaan; /* save new local chain */ } else { /* coordtype == CCB_GLOBAL_COORDS */ if (ccb->global) /* remove old one */ ptaaDestroy(&ccb->global); ccb->global = ptaan; /* save new global chain */ } /* Iterate through the borders for this c.c. */ for (j = 0; j < nb; j++) { na = numaaGetNuma(naa, j, L_CLONE); n = numaGetCount(na); /* number of steps in border */ if ((ptan = ptaCreate(n + 1)) == NULL) return ERROR_INT("ptan not made", procName, 1); ptaaAddPta(ptaan, ptan, L_INSERT); ptaGetIPt(ptas, j, &xstart, &ystart); x = xul + xstart; y = yul + ystart; ptaAddPt(ptan, x, y); for (k = 0; k < n; k++) { numaGetIValue(na, k, &stepdir); x += xpostab[stepdir]; y += ypostab[stepdir]; ptaAddPt(ptan, x, y); } numaDestroy(&na); } ccbDestroy(&ccb); } return 0; } /*! * ccbaGenerateSPGlobalLocs() * * Input: ccba * ptsflag (CCB_SAVE_ALL_PTS or CCB_SAVE_TURNING_PTS) * Return: 0 if OK, 1 on error * * Notes: * (1) This calculates the splocal rep if not yet made. * (2) It uses the local pixel values in splocal, the single * path pta, which are all relative to each c.c., to find * the corresponding global pixel locations, and stores * them in the spglobal pta. * (3) This lists only the turning points: it both makes a * valid svg file and is typically about half the size * when all border points are listed. */ l_int32 ccbaGenerateSPGlobalLocs(CCBORDA *ccba, l_int32 ptsflag) { l_int32 ncc, npt, i, j, xul, yul, x, y, delx, dely; l_int32 xp, yp, delxp, delyp; /* prev point and increments */ CCBORD *ccb; PTA *ptal, *ptag; PROCNAME("ccbaGenerateSPGlobalLocs"); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); /* Make sure we have a local single path representation */ if ((ccb = ccbaGetCcb(ccba, 0)) == NULL) return ERROR_INT("no ccb", procName, 1); if (!ccb->splocal) ccbaGenerateSinglePath(ccba); ccbDestroy(&ccb); /* clone ref */ ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); /* Get the UL corner in global coords, (xul, yul), of the c.c. */ if (boxaGetBoxGeometry(ccb->boxa, 0, &xul, &yul, NULL, NULL)) return ERROR_INT("bounding rectangle not found", procName, 1); /* Make a new spglobal pta, removing any old one */ ptal = ccb->splocal; npt = ptaGetCount(ptal); /* number of points */ if (ccb->spglobal) /* remove old one */ ptaDestroy(&ccb->spglobal); if ((ptag = ptaCreate(npt)) == NULL) return ERROR_INT("ptag not made", procName, 1); ccb->spglobal = ptag; /* save new one */ /* Convert local to global */ if (ptsflag == CCB_SAVE_ALL_PTS) { for (j = 0; j < npt; j++) { ptaGetIPt(ptal, j, &x, &y); ptaAddPt(ptag, x + xul, y + yul); } } else { /* ptsflag = CCB_SAVE_TURNING_PTS */ ptaGetIPt(ptal, 0, &xp, &yp); /* get the 1st pt */ ptaAddPt(ptag, xp + xul, yp + yul); /* save the 1st pt */ if (npt == 2) { /* get and save the 2nd pt */ ptaGetIPt(ptal, 1, &x, &y); ptaAddPt(ptag, x + xul, y + yul); } else if (npt > 2) { ptaGetIPt(ptal, 1, &x, &y); delxp = x - xp; delyp = y - yp; xp = x; yp = y; for (j = 2; j < npt; j++) { ptaGetIPt(ptal, j, &x, &y); delx = x - xp; dely = y - yp; if (delx != delxp || dely != delyp) ptaAddPt(ptag, xp + xul, yp + yul); xp = x; yp = y; delxp = delx; delyp = dely; } ptaAddPt(ptag, xp + xul, yp + yul); } } ccbDestroy(&ccb); /* clone ref */ } return 0; } /*---------------------------------------------------------------------* * Conversion to single path * *---------------------------------------------------------------------*/ /*! * ccbaGenerateSinglePath() * * Input: ccba * Return: 0 if OK, 1 on error * * Notes: * (1) Generates a single border in local pixel coordinates. * For each c.c., if there is just an outer border, copy it. * If there are also hole borders, for each hole border, * determine the smallest horizontal or vertical * distance from the border to the outside of the c.c., * and find a path through the c.c. for this cut. * We do this in a way that guarantees a pixel from the * hole border is the starting point of the path, and * we must verify that the path intersects the outer * border (if it intersects it, then it ends on it). * One can imagine pathological cases, but they may not * occur in images of text characters and un-textured * line graphics. * (2) Once it is verified that the path through the c.c. * intersects both the hole and outer borders, we * generate the full single path for all borders in the * c.c. Starting at the start point on the outer * border, when we hit a line on a cut, we take * the cut, do the hold border, and return on the cut * to the outer border. We compose a pta of the * outer border pts that are on cut paths, and for * every point on the outer border (as we go around), * we check against this pta. When we find a matching * point in the pta, we do its cut path and hole border. * The single path is saved in the ccb. */ l_int32 ccbaGenerateSinglePath(CCBORDA *ccba) { l_int32 i, j, k, ncc, nb, ncut, npt, dir, len, state, lostholes; l_int32 x, y, xl, yl, xf, yf; BOX *boxinner; BOXA *boxa; CCBORD *ccb; PTA *pta, *ptac, *ptah; PTA *ptahc; /* cyclic permutation of hole border, with end pts at cut */ PTA *ptas; /* output result: new single path for c.c. */ PTA *ptaf; /* points on the hole borders that intersect with cuts */ PTA *ptal; /* points on outer border that intersect with cuts */ PTA *ptap, *ptarp; /* path and reverse path between borders */ PTAA *ptaa; PTAA *ptaap; /* ptaa for all paths between borders */ PROCNAME("ccbaGenerateSinglePath"); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); ncc = ccbaGetCount(ccba); /* number of c.c. */ lostholes = 0; for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((ptaa = ccb->local) == NULL) { L_WARNING("local pixel loc array not found\n", procName); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ /* Prepare the output pta */ if (ccb->splocal) ptaDestroy(&ccb->splocal); if ((ptas = ptaCreate(0)) == NULL) return ERROR_INT("ptas not made", procName, 1); ccb->splocal = ptas; /* If no holes, just concat the outer border */ pta = ptaaGetPta(ptaa, 0, L_CLONE); if (nb == 1 || nb > NMAX_HOLES + 1) { ptaJoin(ptas, pta, 0, -1); ptaDestroy(&pta); /* remove clone */ ccbDestroy(&ccb); /* remove clone */ continue; } /* Find the (nb - 1) cut paths that connect holes * with outer border */ boxa = ccb->boxa; if ((ptaap = ptaaCreate(nb - 1)) == NULL) return ERROR_INT("ptaap not made", procName, 1); if ((ptaf = ptaCreate(nb - 1)) == NULL) return ERROR_INT("ptaf not made", procName, 1); if ((ptal = ptaCreate(nb - 1)) == NULL) return ERROR_INT("ptal not made", procName, 1); for (j = 1; j < nb; j++) { boxinner = boxaGetBox(boxa, j, L_CLONE); /* Find a short path and store it */ ptac = getCutPathForHole(ccb->pix, pta, boxinner, &dir, &len); if (len == 0) { /* bad: we lose the hole! */ lostholes++; /* boxPrintStreamInfo(stderr, boxa->box[0]); */ } ptaaAddPta(ptaap, ptac, L_INSERT); /* fprintf(stderr, "dir = %d, length = %d\n", dir, len); */ /* ptaWriteStream(stderr, ptac, 1); */ /* Store the first and last points in the cut path, * which must be on a hole border and the outer * border, respectively */ ncut = ptaGetCount(ptac); if (ncut == 0) { /* missed hole; neg coords won't match */ ptaAddPt(ptaf, -1, -1); ptaAddPt(ptal, -1, -1); } else { ptaGetIPt(ptac, 0, &x, &y); ptaAddPt(ptaf, x, y); ptaGetIPt(ptac, ncut - 1, &x, &y); ptaAddPt(ptal, x, y); } boxDestroy(&boxinner); } /* Make a single path for the c.c. using these connections */ npt = ptaGetCount(pta); /* outer border pts */ for (k = 0; k < npt; k++) { ptaGetIPt(pta, k, &x, &y); if (k == 0) { /* if there is a cut at the first point, * we can wait until the end to take it */ ptaAddPt(ptas, x, y); continue; } state = L_NOT_FOUND; for (j = 0; j < nb - 1; j++) { /* iterate over cut end pts */ ptaGetIPt(ptal, j, &xl, &yl); /* cut point on outer border */ if (x == xl && y == yl) { /* take this cut to the hole */ state = L_FOUND; ptap = ptaaGetPta(ptaap, j, L_CLONE); if ((ptarp = ptaReverse(ptap, 1)) == NULL) return ERROR_INT("ptarp not made", procName, 1); /* Cut point on hole border: */ ptaGetIPt(ptaf, j, &xf, &yf); /* Hole border: */ ptah = ptaaGetPta(ptaa, j + 1, L_CLONE); ptahc = ptaCyclicPerm(ptah, xf, yf); /* ptaWriteStream(stderr, ptahc, 1); */ ptaJoin(ptas, ptarp, 0, -1); ptaJoin(ptas, ptahc, 0, -1); ptaJoin(ptas, ptap, 0, -1); ptaDestroy(&ptap); ptaDestroy(&ptarp); ptaDestroy(&ptah); ptaDestroy(&ptahc); break; } } if (state == L_NOT_FOUND) ptaAddPt(ptas, x, y); } /* ptaWriteStream(stderr, ptas, 1); */ ptaaDestroy(&ptaap); ptaDestroy(&ptaf); ptaDestroy(&ptal); ptaDestroy(&pta); /* remove clone */ ccbDestroy(&ccb); /* remove clone */ } if (lostholes > 0) L_WARNING("***** %d lost holes *****\n", procName, lostholes); return 0; } /*! * getCutPathForHole() * * Input: pix (of c.c.) * pta (of outer border) * boxinner (b.b. of hole path) * &dir (direction (0-3), returned; only needed for debug) * &len (length of path, returned) * Return: pta of pts on cut path from the hole border * to the outer border, including end points on * both borders; or null on error * * Notes: * (1) If we don't find a path, we return a pta with no pts * in it and len = 0. * (2) The goal is to get a reasonably short path between the * inner and outer borders, that goes entirely within the fg of * the pix. This function is cheap-and-dirty, may fail for some * holes in complex topologies such as those you might find in a * moderately dark scanned halftone. If it fails to find a * path to any particular hole, it gives a warning, and because * that hole path is not included, the hole will not be rendered. */ PTA * getCutPathForHole(PIX *pix, PTA *pta, BOX *boxinner, l_int32 *pdir, l_int32 *plen) { l_int32 w, h, nc, x, y, xl, yl, xmid, ymid; l_uint32 val; PTA *ptac; PROCNAME("getCutPathForHole"); if (!pix) return (PTA *)ERROR_PTR("pix not defined", procName, NULL); if (!pta) return (PTA *)ERROR_PTR("pta not defined", procName, NULL); if (!boxinner) return (PTA *)ERROR_PTR("boxinner not defined", procName, NULL); w = pixGetWidth(pix); h = pixGetHeight(pix); if ((ptac = ptaCreate(4)) == NULL) return (PTA *)ERROR_PTR("ptac not made", procName, NULL); xmid = boxinner->x + boxinner->w / 2; ymid = boxinner->y + boxinner->h / 2; /* try top first */ for (y = ymid; y >= 0; y--) { pixGetPixel(pix, xmid, y, &val); if (val == 1) { ptaAddPt(ptac, xmid, y); break; } } for (y = y - 1; y >= 0; y--) { pixGetPixel(pix, xmid, y, &val); if (val == 1) ptaAddPt(ptac, xmid, y); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 1; *plen = nc; return ptac; } /* Next try bottom */ ptaEmpty(ptac); for (y = ymid; y < h; y++) { pixGetPixel(pix, xmid, y, &val); if (val == 1) { ptaAddPt(ptac, xmid, y); break; } } for (y = y + 1; y < h; y++) { pixGetPixel(pix, xmid, y, &val); if (val == 1) ptaAddPt(ptac, xmid, y); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 3; *plen = nc; return ptac; } /* Next try left */ ptaEmpty(ptac); for (x = xmid; x >= 0; x--) { pixGetPixel(pix, x, ymid, &val); if (val == 1) { ptaAddPt(ptac, x, ymid); break; } } for (x = x - 1; x >= 0; x--) { pixGetPixel(pix, x, ymid, &val); if (val == 1) ptaAddPt(ptac, x, ymid); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 0; *plen = nc; return ptac; } /* Finally try right */ ptaEmpty(ptac); for (x = xmid; x < w; x++) { pixGetPixel(pix, x, ymid, &val); if (val == 1) { ptaAddPt(ptac, x, ymid); break; } } for (x = x + 1; x < w; x++) { pixGetPixel(pix, x, ymid, &val); if (val == 1) ptaAddPt(ptac, x, ymid); else break; } nc = ptaGetCount(ptac); ptaGetIPt(ptac, nc - 1, &xl, &yl); if (ptaContainsPt(pta, xl, yl)) { *pdir = 2; *plen = nc; return ptac; } /* If we get here, we've failed! */ ptaEmpty(ptac); L_WARNING("no path found\n", procName); *plen = 0; return ptac; } /*---------------------------------------------------------------------* * Border rendering * *---------------------------------------------------------------------*/ /*! * ccbaDisplayBorder() * * Input: ccba * Return: pix of border pixels, or null on error * * Notes: * (1) Uses global ptaa, which gives each border pixel in * global coordinates, and must be computed in advance * by calling ccbaGenerateGlobalLocs(). */ PIX * ccbaDisplayBorder(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k, x, y; CCBORD *ccb; PIX *pixd; PTAA *ptaa; PTA *pta; PROCNAME("ccbaDisplayBorder"); if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((ptaa = ccb->global) == NULL) { L_WARNING("global pixel loc array not found", procName); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ for (j = 0; j < nb; j++) { pta = ptaaGetPta(ptaa, j, L_CLONE); n = ptaGetCount(pta); /* number of pixels in the border */ for (k = 0; k < n; k++) { ptaGetIPt(pta, k, &x, &y); pixSetPixel(pixd, x, y, 1); } ptaDestroy(&pta); } ccbDestroy(&ccb); } return pixd; } /*! * ccbaDisplaySPBorder() * * Input: ccba * Return: pix of border pixels, or null on error * * Notes: * (1) Uses spglobal pta, which gives each border pixel in * global coordinates, one path per c.c., and must * be computed in advance by calling ccbaGenerateSPGlobalLocs(). */ PIX * ccbaDisplaySPBorder(CCBORDA *ccba) { l_int32 ncc, npt, i, j, x, y; CCBORD *ccb; PIX *pixd; PTA *ptag; PROCNAME("ccbaDisplaySPBorder"); if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); ncc = ccbaGetCount(ccba); /* number of c.c. */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((ptag = ccb->spglobal) == NULL) { L_WARNING("spglobal pixel loc array not found\n", procName); continue; } npt = ptaGetCount(ptag); /* number of pixels on path */ for (j = 0; j < npt; j++) { ptaGetIPt(ptag, j, &x, &y); pixSetPixel(pixd, x, y, 1); } ccbDestroy(&ccb); /* clone ref */ } return pixd; } /*! * ccbaDisplayImage1() * * Input: ccborda * Return: pix of image, or null on error * * Notes: * (1) Uses local ptaa, which gives each border pixel in * local coordinates, so the actual pixel positions must * be computed using all offsets. * (2) For the holes, use coordinates relative to the c.c. * (3) This is slower than Method 2. * (4) This uses topological properties (Method 1) to do scan * conversion to raster * * This algorithm deserves some commentary. * * I first tried the following: * - outer borders: 4-fill from outside, stopping at the * border, using pixFillClosedBorders() * - inner borders: 4-fill from outside, stopping again * at the border, XOR with the border, and invert * to get the hole. This did not work, because if * you have a hole border that looks like: * * x x x x x x * x x * x x x x x * x x o x x * x x * x x * x x x * * if you 4-fill from the outside, the pixel 'o' will * not be filled! XORing with the border leaves it OFF. * Inverting then gives a single bad ON pixel that is not * actually part of the hole. * * So what you must do instead is 4-fill the holes from inside. * You can do this from a seedfill, using a pix with the hole * border as the filling mask. But you need to start with a * pixel inside the hole. How is this determined? The best * way is from the contour. We have a right-hand shoulder * rule for inside (i.e., the filled region). Take the * first 2 pixels of the hole border, and compute dx and dy * (second coord minus first coord: dx = sx - fx, dy = sy - fy). * There are 8 possibilities, depending on the values of dx and * dy (which can each be -1, 0, and +1, but not both 0). * These 8 cases can be broken into 4; see the simple algorithm below. * Once you have an interior seed pixel, you fill from the seed, * clipping with the hole border pix by filling into its invert. * * You then successively XOR these interior filled components, in any order. */ PIX * ccbaDisplayImage1(CCBORDA *ccba) { l_int32 ncc, i, nb, n, j, k, x, y, xul, yul, xoff, yoff, w, h; l_int32 fpx, fpy, spx, spy, xs, ys; BOX *box; BOXA *boxa; CCBORD *ccb; PIX *pixd, *pixt, *pixh; PTAA *ptaa; PTA *pta; PROCNAME("ccbaDisplayImage1"); if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); ncc = ccbaGetCount(ccba); for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if ((boxa = ccb->boxa) == NULL) return (PIX *)ERROR_PTR("boxa not found", procName, NULL); /* Render border in pixt */ if ((ptaa = ccb->local) == NULL) { L_WARNING("local chain array not found\n", procName); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ for (j = 0; j < nb; j++) { if ((box = boxaGetBox(boxa, j, L_CLONE)) == NULL) return (PIX *)ERROR_PTR("b. box not found", procName, NULL); if (j == 0) { boxGetGeometry(box, &xul, &yul, &w, &h); xoff = yoff = 0; } else { boxGetGeometry(box, &xoff, &yoff, &w, &h); } boxDestroy(&box); /* Render the border in a minimum-sized pix; * subtract xoff and yoff because the pixel * location is stored relative to the c.c., but * we need it relative to just the hole border. */ if ((pixt = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); pta = ptaaGetPta(ptaa, j, L_CLONE); n = ptaGetCount(pta); /* number of pixels in the border */ for (k = 0; k < n; k++) { ptaGetIPt(pta, k, &x, &y); pixSetPixel(pixt, x - xoff, y - yoff, 1); if (j > 0) { /* need this for finding hole border pixel */ if (k == 0) { fpx = x - xoff; fpy = y - yoff; } if (k == 1) { spx = x - xoff; spy = y - yoff; } } } ptaDestroy(&pta); /* Get the filled component */ if (j == 0) { /* if outer border, fill from outer boundary */ if ((pixh = pixFillClosedBorders(pixt, 4)) == NULL) return (PIX *)ERROR_PTR("pixh not made", procName, NULL); } else { /* fill the hole from inside */ /* get the location of a seed pixel in the hole */ locateOutsideSeedPixel(fpx, fpy, spx, spy, &xs, &ys); /* Put seed in hole and fill interior of hole, * using pixt as clipping mask */ if ((pixh = pixCreateTemplate(pixt)) == NULL) return (PIX *)ERROR_PTR("pixh not made", procName, NULL); pixSetPixel(pixh, xs, ys, 1); /* put seed pixel in hole */ pixInvert(pixt, pixt); /* to make filling mask */ pixSeedfillBinary(pixh, pixh, pixt, 4); /* 4-fill hole */ } /* XOR into the dest */ pixRasterop(pixd, xul + xoff, yul + yoff, w, h, PIX_XOR, pixh, 0, 0); pixDestroy(&pixt); pixDestroy(&pixh); } ccbDestroy(&ccb); } return pixd; } /*! * ccbaDisplayImage2() * * Input: ccborda * Return: pix of image, or null on error * * Notes: * (1) Uses local chain ptaa, which gives each border pixel in * local coordinates, so the actual pixel positions must * be computed using all offsets. * (2) Treats exterior and hole borders on equivalent * footing, and does all calculations on a pix * that spans the c.c. with a 1 pixel added boundary. * (3) This uses topological properties (Method 2) to do scan * conversion to raster * (4) The algorithm is described at the top of this file (Method 2). * It is preferred to Method 1 because it is between 1.2x and 2x * faster than Method 1. */ PIX * ccbaDisplayImage2(CCBORDA *ccba) { l_int32 ncc, nb, n, i, j, k, x, y, xul, yul, w, h; l_int32 fpx, fpy, spx, spy, xs, ys; BOXA *boxa; CCBORD *ccb; PIX *pixd, *pixc, *pixs; PTAA *ptaa; PTA *pta; PROCNAME("ccbaDisplayImage2"); if (!ccba) return (PIX *)ERROR_PTR("ccba not defined", procName, NULL); if ((pixd = pixCreate(ccba->w, ccba->h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); ncc = ccbaGetCount(ccba); for (i = 0; i < ncc; i++) { /* Generate clipping mask from border pixels and seed image * from one seed for each closed border. */ ccb = ccbaGetCcb(ccba, i); if ((boxa = ccb->boxa) == NULL) return (PIX *)ERROR_PTR("boxa not found", procName, NULL); if (boxaGetBoxGeometry(boxa, 0, &xul, &yul, &w, &h)) return (PIX *)ERROR_PTR("b. box not found", procName, NULL); if ((pixc = pixCreate(w + 2, h + 2, 1)) == NULL) return (PIX *)ERROR_PTR("pixc not made", procName, NULL); if ((pixs = pixCreateTemplate(pixc)) == NULL) return (PIX *)ERROR_PTR("pixs not made", procName, NULL); if ((ptaa = ccb->local) == NULL) { L_WARNING("local chain array not found\n", procName); continue; } nb = ptaaGetCount(ptaa); /* number of borders in the c.c. */ for (j = 0; j < nb; j++) { pta = ptaaGetPta(ptaa, j, L_CLONE); n = ptaGetCount(pta); /* number of pixels in the border */ /* Render border pixels in pixc */ for (k = 0; k < n; k++) { ptaGetIPt(pta, k, &x, &y); pixSetPixel(pixc, x + 1, y + 1, 1); if (k == 0) { fpx = x + 1; fpy = y + 1; } else if (k == 1) { spx = x + 1; spy = y + 1; } } /* Get and set seed pixel for this border in pixs */ if (n > 1) locateOutsideSeedPixel(fpx, fpy, spx, spy, &xs, &ys); else /* isolated c.c. */ xs = ys = 0; pixSetPixel(pixs, xs, ys, 1); ptaDestroy(&pta); } /* Fill from seeds in pixs, using pixc as the clipping mask, * to reconstruct the c.c. */ pixInvert(pixc, pixc); /* to convert clipping -> filling mask */ pixSeedfillBinary(pixs, pixs, pixc, 4); /* 4-fill */ pixInvert(pixs, pixs); /* to make the c.c. */ /* XOR into the dest */ pixRasterop(pixd, xul, yul, w, h, PIX_XOR, pixs, 1, 1); pixDestroy(&pixc); pixDestroy(&pixs); ccbDestroy(&ccb); /* ref-counted */ } return pixd; } /*---------------------------------------------------------------------* * Serialize for I/O * *---------------------------------------------------------------------*/ /*! * ccbaWrite() * * Input: filename * ccba * Return: 0 if OK, 1 on error */ l_int32 ccbaWrite(const char *filename, CCBORDA *ccba) { FILE *fp; PROCNAME("ccbaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb+")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (ccbaWriteStream(fp, ccba)) { fclose(fp); return ERROR_INT("ccba not written to stream", procName, 1); } fclose(fp); return 0; } /*! * ccbaWriteStream() * * Input: stream * ccba * Return: 0 if OK; 1 on error * * Format: ccba: %7d cc\n (num. c.c.) (ascii) (18B) * pix width (4B) * pix height (4B) * [for i = 1, ncc] * ulx (4B) * uly (4B) * w (4B) -- not req'd for reconstruction * h (4B) -- not req'd for reconstruction * number of borders (4B) * [for j = 1, nb] * startx (4B) * starty (4B) * [for k = 1, nb] * 2 steps (1B) * end in z8 or 88 (1B) */ l_int32 ccbaWriteStream(FILE *fp, CCBORDA *ccba) { char strbuf[256]; l_uint8 bval; l_uint8 *datain, *dataout; l_int32 i, j, k, bx, by, bw, bh, val, startx, starty; l_int32 ncc, nb, n; l_uint32 w, h; size_t inbytes, outbytes; BBUFFER *bbuf; CCBORD *ccb; NUMA *na; NUMAA *naa; PTA *pta; PROCNAME("ccbaWriteStream"); #if !HAVE_LIBZ /* defined in environ.h */ return ERROR_INT("no libz: can't write data", procName, 1); #else if (!fp) return ERROR_INT("stream not open", procName, 1); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); if ((bbuf = bbufferCreate(NULL, 1000)) == NULL) return ERROR_INT("bbuf not made", procName, 1); ncc = ccbaGetCount(ccba); sprintf(strbuf, "ccba: %7d cc\n", ncc); bbufferRead(bbuf, (l_uint8 *)strbuf, 18); w = pixGetWidth(ccba->pix); h = pixGetHeight(ccba->pix); bbufferRead(bbuf, (l_uint8 *)&w, 4); /* width */ bbufferRead(bbuf, (l_uint8 *)&h, 4); /* height */ for (i = 0; i < ncc; i++) { ccb = ccbaGetCcb(ccba, i); if (boxaGetBoxGeometry(ccb->boxa, 0, &bx, &by, &bw, &bh)) return ERROR_INT("bounding box not found", procName, 1); bbufferRead(bbuf, (l_uint8 *)&bx, 4); /* ulx of c.c. */ bbufferRead(bbuf, (l_uint8 *)&by, 4); /* uly of c.c. */ bbufferRead(bbuf, (l_uint8 *)&bw, 4); /* w of c.c. */ bbufferRead(bbuf, (l_uint8 *)&bh, 4); /* h of c.c. */ if ((naa = ccb->step) == NULL) { ccbaGenerateStepChains(ccba); naa = ccb->step; } nb = numaaGetCount(naa); bbufferRead(bbuf, (l_uint8 *)&nb, 4); /* number of borders in c.c. */ pta = ccb->start; for (j = 0; j < nb; j++) { ptaGetIPt(pta, j, &startx, &starty); bbufferRead(bbuf, (l_uint8 *)&startx, 4); /* starting x in border */ bbufferRead(bbuf, (l_uint8 *)&starty, 4); /* starting y in border */ na = numaaGetNuma(naa, j, L_CLONE); n = numaGetCount(na); for (k = 0; k < n; k++) { numaGetIValue(na, k, &val); if (k % 2 == 0) bval = (l_uint8)val << 4; else bval |= (l_uint8)val; if (k % 2 == 1) bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* 2 border steps */ } if (n % 2 == 1) { bval |= 0x8; bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* end with 0xz8, */ /* where z = {0..7} */ } else { /* n % 2 == 0 */ bval = 0x88; bbufferRead(bbuf, (l_uint8 *)&bval, 1); /* end with 0x88 */ } numaDestroy(&na); } ccbDestroy(&ccb); } datain = bbufferDestroyAndSaveData(&bbuf, &inbytes); dataout = zlibCompress(datain, inbytes, &outbytes); fwrite(dataout, 1, outbytes, fp); FREE(datain); FREE(dataout); return 0; #endif /* !HAVE_LIBZ */ } /*! * ccbaRead() * * Input: filename * Return: ccba, or null on error */ CCBORDA * ccbaRead(const char *filename) { FILE *fp; CCBORDA *ccba; PROCNAME("ccbaRead"); if (!filename) return (CCBORDA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (CCBORDA *)ERROR_PTR("stream not opened", procName, NULL); ccba = ccbaReadStream(fp); fclose(fp); if (!ccba) return (CCBORDA *)ERROR_PTR("ccba not returned", procName, NULL); return ccba; } /*! * ccbaReadStream() * * Input: stream * Return: ccba, or null on error * * Format: ccba: %7d cc\n (num. c.c.) (ascii) (17B) * pix width (4B) * pix height (4B) * [for i = 1, ncc] * ulx (4B) * uly (4B) * w (4B) -- not req'd for reconstruction * h (4B) -- not req'd for reconstruction * number of borders (4B) * [for j = 1, nb] * startx (4B) * starty (4B) * [for k = 1, nb] * 2 steps (1B) * end in z8 or 88 (1B) */ CCBORDA * ccbaReadStream(FILE *fp) { char strbuf[256]; l_uint8 bval; l_uint8 *datain, *dataout; l_int32 i, j, startx, starty; l_int32 offset, nib1, nib2; l_int32 ncc, nb; l_uint32 width, height, w, h, xoff, yoff; size_t inbytes, outbytes; BOX *box; CCBORD *ccb; CCBORDA *ccba; NUMA *na; NUMAA *step; PROCNAME("ccbaReadStream"); #if !HAVE_LIBZ /* defined in environ.h */ return (CCBORDA *)ERROR_PTR("no libz: can't read data", procName, NULL); #else if (!fp) return (CCBORDA *)ERROR_PTR("stream not open", procName, NULL); if ((datain = l_binaryReadStream(fp, &inbytes)) == NULL) return (CCBORDA *)ERROR_PTR("data not read from file", procName, NULL); if ((dataout = zlibUncompress(datain, inbytes, &outbytes)) == NULL) return (CCBORDA *)ERROR_PTR("dataout not made", procName, NULL); offset = 18; memcpy((void *)strbuf, (void *)dataout, offset); strbuf[17] = '\0'; if (strncmp(strbuf, "ccba:", 5)) return (CCBORDA *)ERROR_PTR("file not type ccba", procName, NULL); sscanf(strbuf, "ccba: %7d cc\n", &ncc); /* fprintf(stderr, "ncc = %d\n", ncc); */ if ((ccba = ccbaCreate(NULL, ncc)) == NULL) return (CCBORDA *)ERROR_PTR("ccba not made", procName, NULL); memcpy((void *)&width, (void *)(dataout + offset), 4); offset += 4; memcpy((void *)&height, (void *)(dataout + offset), 4); offset += 4; ccba->w = width; ccba->h = height; /* fprintf(stderr, "width = %d, height = %d\n", width, height); */ for (i = 0; i < ncc; i++) { /* should be ncc */ if ((ccb = ccbCreate(NULL)) == NULL) return (CCBORDA *)ERROR_PTR("ccb not made", procName, NULL); ccbaAddCcb(ccba, ccb); memcpy((void *)&xoff, (void *)(dataout + offset), 4); offset += 4; memcpy((void *)&yoff, (void *)(dataout + offset), 4); offset += 4; memcpy((void *)&w, (void *)(dataout + offset), 4); offset += 4; memcpy((void *)&h, (void *)(dataout + offset), 4); offset += 4; if ((box = boxCreate(xoff, yoff, w, h)) == NULL) return (CCBORDA *)ERROR_PTR("box not made", procName, NULL); boxaAddBox(ccb->boxa, box, L_INSERT); /* fprintf(stderr, "xoff = %d, yoff = %d, w = %d, h = %d\n", xoff, yoff, w, h); */ memcpy((void *)&nb, (void *)(dataout + offset), 4); offset += 4; /* fprintf(stderr, "num borders = %d\n", nb); */ if ((step = numaaCreate(nb)) == NULL) return (CCBORDA *)ERROR_PTR("step numaa not made", procName, NULL); ccb->step = step; for (j = 0; j < nb; j++) { /* should be nb */ memcpy((void *)&startx, (void *)(dataout + offset), 4); offset += 4; memcpy((void *)&starty, (void *)(dataout + offset), 4); offset += 4; ptaAddPt(ccb->start, startx, starty); /* fprintf(stderr, "startx = %d, starty = %d\n", startx, starty); */ if ((na = numaCreate(0)) == NULL) return (CCBORDA *)ERROR_PTR("na not made", procName, NULL); numaaAddNuma(step, na, L_INSERT); while(1) { bval = *(dataout + offset); offset++; nib1 = (bval >> 4); nib2 = bval & 0xf; if (nib1 != 8) numaAddNumber(na, nib1); else break; if (nib2 != 8) numaAddNumber(na, nib2); else break; } } } FREE(datain); FREE(dataout); return ccba; #endif /* !HAVE_LIBZ */ } /*---------------------------------------------------------------------* * SVG Output * *---------------------------------------------------------------------*/ /*! * ccbaWriteSVG() * * Input: filename * ccba * Return: 0 if OK, 1 on error */ l_int32 ccbaWriteSVG(const char *filename, CCBORDA *ccba) { char *svgstr; PROCNAME("ccbaWriteSVG"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!ccba) return ERROR_INT("ccba not defined", procName, 1); if ((svgstr = ccbaWriteSVGString(filename, ccba)) == NULL) return ERROR_INT("svgstr not made", procName, 1); l_binaryWrite(filename, "w", svgstr, strlen(svgstr)); FREE(svgstr); return 0; } /*! * ccbaWriteSVGString() * * Input: filename * ccba * Return: string in svg-formatted, that can be written to file, * or null on error. */ char * ccbaWriteSVGString(const char *filename, CCBORDA *ccba) { char *svgstr; char smallbuf[256]; char line0[] = ""; char line1[] = ""; char line2[] = ""; char line3[] = ""; char line5[] = ""; char space[] = " "; l_int32 i, j, ncc, npt, x, y; CCBORD *ccb; PTA *pta; SARRAY *sa; PROCNAME("ccbaWriteSVGString"); if (!filename) return (char *)ERROR_PTR("filename not defined", procName, NULL); if (!ccba) return (char *)ERROR_PTR("ccba not defined", procName, NULL); if ((sa = sarrayCreate(0)) == NULL) return (char *)ERROR_PTR("sa not made", procName, NULL); sarrayAddString(sa, line0, 1); sarrayAddString(sa, line1, 1); sarrayAddString(sa, line2, 1); ncc = ccbaGetCount(ccba); for (i = 0; i < ncc; i++) { if ((ccb = ccbaGetCcb(ccba, i)) == NULL) return (char *)ERROR_PTR("ccb not found", procName, NULL); if ((pta = ccb->spglobal) == NULL) return (char *)ERROR_PTR("spglobal not made", procName, NULL); sarrayAddString(sa, line3, 1); npt = ptaGetCount(pta); for (j = 0; j < npt; j++) { ptaGetIPt(pta, j, &x, &y); sprintf(smallbuf, "%0d,%0d", x, y); sarrayAddString(sa, smallbuf, 1); } sarrayAddString(sa, line4, 1); ccbDestroy(&ccb); } sarrayAddString(sa, line5, 1); sarrayAddString(sa, space, 1); svgstr = sarrayToString(sa, 1); /* fprintf(stderr, "%s", svgstr); */ sarrayDestroy(&sa); return svgstr; } leptonica-1.70/src/psio1stub.c0000644000175000017500000001172011707052573014401 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * psio1stub.c * * Stubs for psio1.c functions */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ l_int32 convertFilesToPS(const char *dirin, const char *substr, l_int32 res, const char *fileout) { return ERROR_INT("function not present", "convertFilesToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 sarrayConvertFilesToPS(SARRAY *sa, l_int32 res, const char *fileout) { return ERROR_INT("function not present", "sarrayConvertFilesToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertFilesFittedToPS(const char *dirin, const char *substr, l_float32 xpts, l_float32 ypts, const char *fileout) { return ERROR_INT("function not present", "convertFilesFittedToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 sarrayConvertFilesFittedToPS(SARRAY *sa, l_float32 xpts, l_float32 ypts, const char *fileout) { return ERROR_INT("function not present", "sarrayConvertFilesFittedToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 writeImageCompressedToPSFile(const char *filein, const char *fileout, l_int32 res, l_int32 *pfirstfile, l_int32 *pindex) { return ERROR_INT("function not present", "writeImageCompressedToPSFile", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertSegmentedPagesToPS(const char *pagedir, const char *pagestr, const char *maskdir, const char *maskstr, l_int32 numpre, l_int32 numpost, l_int32 maxnum, l_float32 textscale, l_float32 imagescale, l_int32 threshold, const char *fileout) { return ERROR_INT("function not present", "convertSegmentedPagesToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteSegmentedPageToPS(PIX *pixs, PIX *pixm, l_float32 textscale, l_float32 imagescale, l_int32 threshold, l_int32 pageno, const char *fileout) { return ERROR_INT("function not present", "pixWriteSegmentedPagesToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMixedToPS(PIX *pixb, PIX *pixc, l_float32 scale, l_int32 pageno, const char *fileout) { return ERROR_INT("function not present", "pixWriteMixedToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertToPSEmbed(const char *filein, const char *fileout, l_int32 level) { return ERROR_INT("function not present", "convertToPSEmbed", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixaWriteCompressedToPS(PIXA *pixa, const char *fileout, l_int32 res, l_int32 level) { return ERROR_INT("function not present", "pixaWriteCompressedtoPS", 1); } /* --------------------------------------------*/ #endif /* !USE_PSIO */ /* --------------------------------------------*/ leptonica-1.70/src/fmorphauto.c0000644000175000017500000010222612244222055014625 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fmorphauto.c * * Main function calls: * l_int32 fmorphautogen() * l_int32 fmorphautogen1() * l_int32 fmorphautogen2() * * Static helpers: * static SARRAY *sarrayMakeWplsCode() * static SARRAY *sarrayMakeInnerLoopDWACode() * static char *makeBarrelshiftString() * * * This automatically generates dwa code for erosion and dilation. * Here's a road map for how it all works. * * (1) You generate an array (a SELA) of structuring elements (SELs). * This can be done in several ways, including * (a) calling the function selaAddBasic() for * pre-compiled SELs * (b) generating the SELA in code in line * (c) reading in a SELA from file, using selaRead() or * various other formats. * * (2) You call fmorphautogen1() and fmorphautogen2() on this SELA. * These use the text files morphtemplate1.txt and * morphtemplate2.txt for building up the source code. See the file * prog/fmorphautogen.c for an example of how this is done. * The output is written to files named fmorphgen.*.c * and fmorphgenlow.*.c, where "*" is an integer that you * input to this function. That integer labels both * the output files, as well as all the functions that * are generated. That way, using different integers, * you can invoke fmorphautogen() any number of times * to get functions that all have different names so that * they can be linked into one program. * * (3) You copy the generated source files back to your src * directory for compilation. Put their names in the * Makefile, regenerate the prototypes, and recompile * the library. Look at the Makefile to see how I've * included morphgen.1.c and fmorphgenlow.1.c. These files * provide the high-level interfaces for erosion, dilation, * opening and closing, and the low-level interfaces to * do the actual work, for all 58 SELs in the SEL array. * * (4) In an application, you now use this interface. Again * for the example files in the library, using integer "1": * * PIX *pixMorphDwa_1(PIX *pixd, PIX, *pixs, * l_int32 operation, char *selname); * * or * * PIX *pixFMorphopGen_1(PIX *pixd, PIX *pixs, * l_int32 operation, char *selname); * * where the operation is one of {L_MORPH_DILATE, L_MORPH_ERODE. * L_MORPH_OPEN, L_MORPH_CLOSE}, and the selname is one * of the set that were defined as the name field of sels. * This set is listed at the beginning of the file fmorphgen.1.c. * For examples of use, see the file prog/binmorph_reg1.c, which * verifies the consistency of the various implementations by * comparing the dwa result with that of full-image rasterops. */ #include #include "allheaders.h" #define OUTROOT "fmorphgen" #define TEMPLATE1 "morphtemplate1.txt" #define TEMPLATE2 "morphtemplate2.txt" #define BUFFER_SIZE 512 #define PROTOARGS "(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32);" static char * makeBarrelshiftString(l_int32 delx, l_int32 dely); static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 index); static SARRAY * sarrayMakeWplsCode(SEL *sel); static char wpldecls[][53] = { "l_int32 wpls2;", "l_int32 wpls2, wpls3;", "l_int32 wpls2, wpls3, wpls4;", "l_int32 wpls5;", "l_int32 wpls5, wpls6;", "l_int32 wpls5, wpls6, wpls7;", "l_int32 wpls5, wpls6, wpls7, wpls8;", "l_int32 wpls9;", "l_int32 wpls9, wpls10;", "l_int32 wpls9, wpls10, wpls11;", "l_int32 wpls9, wpls10, wpls11, wpls12;", "l_int32 wpls13;", "l_int32 wpls13, wpls14;", "l_int32 wpls13, wpls14, wpls15;", "l_int32 wpls13, wpls14, wpls15, wpls16;", "l_int32 wpls17;", "l_int32 wpls17, wpls18;", "l_int32 wpls17, wpls18, wpls19;", "l_int32 wpls17, wpls18, wpls19, wpls20;", "l_int32 wpls21;", "l_int32 wpls21, wpls22;", "l_int32 wpls21, wpls22, wpls23;", "l_int32 wpls21, wpls22, wpls23, wpls24;", "l_int32 wpls25;", "l_int32 wpls25, wpls26;", "l_int32 wpls25, wpls26, wpls27;", "l_int32 wpls25, wpls26, wpls27, wpls28;", "l_int32 wpls29;", "l_int32 wpls29, wpls30;", "l_int32 wpls29, wpls30, wpls31;"}; static char wplgendecls[][30] = { "l_int32 wpls2;", "l_int32 wpls3;", "l_int32 wpls4;", "l_int32 wpls5;", "l_int32 wpls6;", "l_int32 wpls7;", "l_int32 wpls8;", "l_int32 wpls9;", "l_int32 wpls10;", "l_int32 wpls11;", "l_int32 wpls12;", "l_int32 wpls13;", "l_int32 wpls14;", "l_int32 wpls15;", "l_int32 wpls16;", "l_int32 wpls17;", "l_int32 wpls18;", "l_int32 wpls19;", "l_int32 wpls20;", "l_int32 wpls21;", "l_int32 wpls22;", "l_int32 wpls23;", "l_int32 wpls24;", "l_int32 wpls25;", "l_int32 wpls26;", "l_int32 wpls27;", "l_int32 wpls28;", "l_int32 wpls29;", "l_int32 wpls30;", "l_int32 wpls31;"}; static char wpldefs[][25] = { " wpls2 = 2 * wpls;", " wpls3 = 3 * wpls;", " wpls4 = 4 * wpls;", " wpls5 = 5 * wpls;", " wpls6 = 6 * wpls;", " wpls7 = 7 * wpls;", " wpls8 = 8 * wpls;", " wpls9 = 9 * wpls;", " wpls10 = 10 * wpls;", " wpls11 = 11 * wpls;", " wpls12 = 12 * wpls;", " wpls13 = 13 * wpls;", " wpls14 = 14 * wpls;", " wpls15 = 15 * wpls;", " wpls16 = 16 * wpls;", " wpls17 = 17 * wpls;", " wpls18 = 18 * wpls;", " wpls19 = 19 * wpls;", " wpls20 = 20 * wpls;", " wpls21 = 21 * wpls;", " wpls22 = 22 * wpls;", " wpls23 = 23 * wpls;", " wpls24 = 24 * wpls;", " wpls25 = 25 * wpls;", " wpls26 = 26 * wpls;", " wpls27 = 27 * wpls;", " wpls28 = 28 * wpls;", " wpls29 = 29 * wpls;", " wpls30 = 30 * wpls;", " wpls31 = 31 * wpls;"}; static char wplstrp[][10] = {"+ wpls", "+ wpls2", "+ wpls3", "+ wpls4", "+ wpls5", "+ wpls6", "+ wpls7", "+ wpls8", "+ wpls9", "+ wpls10", "+ wpls11", "+ wpls12", "+ wpls13", "+ wpls14", "+ wpls15", "+ wpls16", "+ wpls17", "+ wpls18", "+ wpls19", "+ wpls20", "+ wpls21", "+ wpls22", "+ wpls23", "+ wpls24", "+ wpls25", "+ wpls26", "+ wpls27", "+ wpls28", "+ wpls29", "+ wpls30", "+ wpls31"}; static char wplstrm[][10] = {"- wpls", "- wpls2", "- wpls3", "- wpls4", "- wpls5", "- wpls6", "- wpls7", "- wpls8", "- wpls9", "- wpls10", "- wpls11", "- wpls12", "- wpls13", "- wpls14", "- wpls15", "- wpls16", "- wpls17", "- wpls18", "- wpls19", "- wpls20", "- wpls21", "- wpls22", "- wpls23", "- wpls24", "- wpls25", "- wpls26", "- wpls27", "- wpls28", "- wpls29", "- wpls30", "- wpls31"}; /*! * fmorphautogen() * * Input: sela * fileindex * filename (; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) This function generates all the code for implementing * dwa morphological operations using all the sels in the sela. * (2) See fmorphautogen1() and fmorphautogen2() for details. */ l_int32 fmorphautogen(SELA *sela, l_int32 fileindex, const char *filename) { l_int32 ret1, ret2; PROCNAME("fmorphautogen"); if (!sela) return ERROR_INT("sela not defined", procName, 1); ret1 = fmorphautogen1(sela, fileindex, filename); ret2 = fmorphautogen2(sela, fileindex, filename); if (ret1 || ret2) return ERROR_INT("code generation problem", procName, 1); return 0; } /*! * fmorphautogen1() * * Input: sela * fileindex * filename (; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) This function uses morphtemplate1.txt to create a * top-level file that contains two functions. These * functions will carry out dilation, erosion, * opening or closing for any of the sels in the input sela. * (2) The fileindex parameter is inserted into the output * filename, as described below. * (3) If filename == NULL, the output file is fmorphgen..c, * where is equal to the 'fileindex' parameter. * (4) If filename != NULL, the output file is ..c. */ l_int32 fmorphautogen1(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr; char *str_proto1, *str_proto2, *str_proto3; char *str_doc1, *str_doc2, *str_doc3, *str_doc4; char *str_def1, *str_def2, *str_proc1, *str_proc2; char *str_dwa1, *str_low_dt, *str_low_ds, *str_low_ts; char *str_low_tsp1, *str_low_dtp1; char bigbuf[BUFFER_SIZE]; l_int32 i, nsels, nbytes, actstart, end, newstart; size_t size; SARRAY *sa1, *sa2, *sa3; PROCNAME("fmorphautogen1"); if (!sela) return ERROR_INT("sela not defined", procName, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", procName, 1); /* Make array of sel names */ sa1 = selaGetSelnames(sela); /* Make array of textlines from morphtemplate1.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE1, &size)) == NULL) return ERROR_INT("filestr not made", procName, 1); if ((sa2 = sarrayCreateLinesFromString(filestr, 1)) == NULL) return ERROR_INT("sa2 not made", procName, 1); FREE(filestr); /* sarrayWriteStream(stderr, sa2); */ /* Make strings containing function call names */ sprintf(bigbuf, "PIX *pixMorphDwa_%d(PIX *pixd, PIX *pixs, " "l_int32 operation, char *selname);", fileindex); str_proto1 = stringNew(bigbuf); sprintf(bigbuf, "PIX *pixFMorphopGen_%d(PIX *pixd, PIX *pixs, " "l_int32 operation, char *selname);", fileindex); str_proto2 = stringNew(bigbuf); sprintf(bigbuf, "l_int32 fmorphopgen_low_%d(l_uint32 *datad, l_int32 w,\n" " l_int32 h, l_int32 wpld,\n" " l_uint32 *datas, l_int32 wpls,\n" " l_int32 index);", fileindex); str_proto3 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixMorphDwa_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * PIX *pixFMorphopGen_%d()", fileindex); str_doc2 = stringNew(bigbuf); sprintf(bigbuf, " * pixMorphDwa_%d()", fileindex); str_doc3 = stringNew(bigbuf); sprintf(bigbuf, " * pixFMorphopGen_%d()", fileindex); str_doc4 = stringNew(bigbuf); sprintf(bigbuf, "pixMorphDwa_%d(PIX *pixd,", fileindex); str_def1 = stringNew(bigbuf); sprintf(bigbuf, "pixFMorphopGen_%d(PIX *pixd,", fileindex); str_def2 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixMorphDwa_%d\");", fileindex); str_proc1 = stringNew(bigbuf); sprintf(bigbuf, " PROCNAME(\"pixFMorphopGen_%d\");", fileindex); str_proc2 = stringNew(bigbuf); sprintf(bigbuf, " pixt2 = pixFMorphopGen_%d(NULL, pixt1, operation, selname);", fileindex); str_dwa1 = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index);", fileindex); str_low_dt = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datad, w, h, wpld, datas, wpls, index);", fileindex); str_low_ds = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index+1);", fileindex); str_low_tsp1 = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datat, w, h, wpls, datas, wpls, index);", fileindex); str_low_ts = stringNew(bigbuf); sprintf(bigbuf, " fmorphopgen_low_%d(datad, w, h, wpld, datat, wpls, index+1);", fileindex); str_low_dtp1 = stringNew(bigbuf); /* Make the output sa */ if ((sa3 = sarrayCreate(0)) == NULL) return ERROR_INT("sa3 not made", procName, 1); /* Copyright notice and info header */ sarrayParseRange(sa2, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa3, str_doc1, L_INSERT); sarrayAddString(sa3, str_doc2, L_INSERT); /* Add '#include's */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Insert function prototypes */ sarrayAddString(sa3, str_proto1, L_INSERT); sarrayAddString(sa3, str_proto2, L_INSERT); sarrayAddString(sa3, str_proto3, L_INSERT); /* Add static globals */ sprintf(bigbuf, "\nstatic l_int32 NUM_SELS_GENERATED = %d;", nsels); sarrayAddString(sa3, bigbuf, L_COPY); sprintf(bigbuf, "static char SEL_NAMES[][80] = {"); sarrayAddString(sa3, bigbuf, L_COPY); for (i = 0; i < nsels - 1; i++) { sprintf(bigbuf, " \"%s\",", sarrayGetString(sa1, i, 0)); sarrayAddString(sa3, bigbuf, L_COPY); } sprintf(bigbuf, " \"%s\"};", sarrayGetString(sa1, i, 0)); sarrayAddString(sa3, bigbuf, L_COPY); /* Start pixMorphDwa_*() function description */ sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_doc3, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixMorphDwa_*() function definition */ sarrayAddString(sa3, str_def1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_dwa1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Start pixFMorphopGen_*() function description */ sarrayAddString(sa3, str_doc4, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Finish pixFMorphopGen_*() function definition */ sarrayAddString(sa3, str_def2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_proc2, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dt, L_COPY); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_ds, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_tsp1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dt, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_ts, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); sarrayAddString(sa3, str_low_dtp1, L_INSERT); sarrayParseRange(sa2, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa3, sa2, actstart, end); /* Output to file */ if ((filestr = sarrayToString(sa3, 1)) == NULL) return ERROR_INT("filestr from sa3 not made", procName, 1); nbytes = strlen(filestr); if (filename) sprintf(bigbuf, "%s.%d.c", filename, fileindex); else sprintf(bigbuf, "%s.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); FREE(filestr); return 0; } /* * fmorphautogen2() * * Input: sela * fileindex * filename (; can be null) * Return: 0 if OK; 1 on error * * Notes: * (1) This function uses morphtemplate2.txt to create a * low-level file that contains the low-level functions for * implementing dilation and erosion for every sel * in the input sela. * (2) The fileindex parameter is inserted into the output * filename, as described below. * (3) If filename == NULL, the output file is fmorphgenlow..c, * where is equal to the 'fileindex' parameter. * (4) If filename != NULL, the output file is low..c. */ l_int32 fmorphautogen2(SELA *sela, l_int32 fileindex, const char *filename) { char *filestr, *linestr, *fname; char *str_doc1, *str_doc2, *str_doc3, *str_doc4, *str_def1; char bigbuf[BUFFER_SIZE]; char breakstring[] = " break;"; char staticstring[] = "static void"; l_int32 i, nsels, nbytes, actstart, end, newstart; l_int32 argstart, argend, loopstart, loopend, finalstart, finalend; size_t size; SARRAY *sa1, *sa2, *sa3, *sa4, *sa5, *sa6; SEL *sel; PROCNAME("fmorphautogen2"); if (!sela) return ERROR_INT("sela not defined", procName, 1); if (fileindex < 0) fileindex = 0; if ((nsels = selaGetCount(sela)) == 0) return ERROR_INT("no sels in sela", procName, 1); /* Make the array of textlines from morphtemplate2.txt */ if ((filestr = (char *)l_binaryRead(TEMPLATE2, &size)) == NULL) return ERROR_INT("filestr not made", procName, 1); if ((sa1 = sarrayCreateLinesFromString(filestr, 1)) == NULL) return ERROR_INT("sa1 not made", procName, 1); FREE(filestr); /* Make the array of static function names */ if ((sa2 = sarrayCreate(2 * nsels)) == NULL) return ERROR_INT("sa2 not made", procName, 1); for (i = 0; i < nsels; i++) { sprintf(bigbuf, "fdilate_%d_%d", fileindex, i); sarrayAddString(sa2, bigbuf, 1); sprintf(bigbuf, "ferode_%d_%d", fileindex, i); sarrayAddString(sa2, bigbuf, 1); } /* Make the static prototype strings */ if ((sa3 = sarrayCreate(2 * nsels)) == NULL) return ERROR_INT("sa3 not made", procName, 1); for (i = 0; i < 2 * nsels; i++) { fname = sarrayGetString(sa2, i, 0); sprintf(bigbuf, "static void %s%s", fname, PROTOARGS); sarrayAddString(sa3, bigbuf, 1); } /* Make strings containing function names */ sprintf(bigbuf, " * l_int32 fmorphopgen_low_%d()", fileindex); str_doc1 = stringNew(bigbuf); sprintf(bigbuf, " * void fdilate_%d_*()", fileindex); str_doc2 = stringNew(bigbuf); sprintf(bigbuf, " * void ferode_%d_*()", fileindex); str_doc3 = stringNew(bigbuf); sprintf(bigbuf, " * fmorphopgen_low_%d()", fileindex); str_doc4 = stringNew(bigbuf); sprintf(bigbuf, "fmorphopgen_low_%d(l_uint32 *datad,", fileindex); str_def1 = stringNew(bigbuf); /* Output to this sa */ if ((sa4 = sarrayCreate(0)) == NULL) return ERROR_INT("sa4 not made", procName, 1); /* Copyright notice and info header */ sarrayParseRange(sa1, 0, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert function names as documentation */ sarrayAddString(sa4, str_doc1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc2, L_INSERT); sarrayAddString(sa4, str_doc3, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Insert static protos */ for (i = 0; i < 2 * nsels; i++) { if ((linestr = sarrayGetString(sa3, i, L_COPY)) == NULL) return ERROR_INT("linestr not retrieved", procName, 1); sarrayAddString(sa4, linestr, L_INSERT); } /* Insert function header */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_doc4, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); sarrayAddString(sa4, str_def1, L_INSERT); sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Generate and insert the dispatcher code */ for (i = 0; i < 2 * nsels; i++) { sprintf(bigbuf, " case %d:", i); sarrayAddString(sa4, bigbuf, L_COPY); sprintf(bigbuf, " %s(datad, w, h, wpld, datas, wpls);", sarrayGetString(sa2, i, L_NOCOPY)); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAddString(sa4, breakstring, L_COPY); } /* Finish the dispatcher and introduce the low-level code */ sarrayParseRange(sa1, newstart, &actstart, &end, &newstart, "--", 0); sarrayAppendRange(sa4, sa1, actstart, end); /* Get the range for the args common to all functions */ sarrayParseRange(sa1, newstart, &argstart, &argend, &newstart, "--", 0); /* Get the range for the loop code common to all functions */ sarrayParseRange(sa1, newstart, &loopstart, &loopend, &newstart, "--", 0); /* Get the range for the ending code common to all functions */ sarrayParseRange(sa1, newstart, &finalstart, &finalend, &newstart, "--", 0); /* Do all the static functions */ for (i = 0; i < 2 * nsels; i++) { /* Generate the function header and add the common args */ sarrayAddString(sa4, staticstring, L_COPY); fname = sarrayGetString(sa2, i, L_NOCOPY); sprintf(bigbuf, "%s(l_uint32 *datad,", fname); sarrayAddString(sa4, bigbuf, L_COPY); sarrayAppendRange(sa4, sa1, argstart, argend); /* Declare and define wplsN args, as necessary */ if ((sel = selaGetSel(sela, i/2)) == NULL) return ERROR_INT("sel not returned", procName, 1); if ((sa5 = sarrayMakeWplsCode(sel)) == NULL) return ERROR_INT("sa5 not made", procName, 1); sarrayConcatenate(sa4, sa5); sarrayDestroy(&sa5); /* Add the function loop code */ sarrayAppendRange(sa4, sa1, loopstart, loopend); /* Insert barrel-op code for *dptr */ if ((sa6 = sarrayMakeInnerLoopDWACode(sel, i)) == NULL) return ERROR_INT("sa6 not made", procName, 1); sarrayConcatenate(sa4, sa6); sarrayDestroy(&sa6); /* Finish the function code */ sarrayAppendRange(sa4, sa1, finalstart, finalend); } /* Output to file */ if ((filestr = sarrayToString(sa4, 1)) == NULL) return ERROR_INT("filestr from sa4 not made", procName, 1); nbytes = strlen(filestr); if (filename) sprintf(bigbuf, "%slow.%d.c", filename, fileindex); else sprintf(bigbuf, "%slow.%d.c", OUTROOT, fileindex); l_binaryWrite(bigbuf, "w", filestr, nbytes); sarrayDestroy(&sa1); sarrayDestroy(&sa2); sarrayDestroy(&sa3); sarrayDestroy(&sa4); FREE(filestr); return 0; } /*--------------------------------------------------------------------------* * Helper code for sel * *--------------------------------------------------------------------------*/ /*! * sarrayMakeWplsCode() */ static SARRAY * sarrayMakeWplsCode(SEL *sel) { char emptystring[] = ""; l_int32 i, j, ymax, dely, allvshifts; l_int32 vshift[32]; SARRAY *sa; PROCNAME("sarrayMakeWplsCode"); if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); for (i = 0; i < 32; i++) vshift[i] = 0; ymax = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1) { dely = L_ABS(i - sel->cy); if (dely < 32) vshift[dely] = 1; ymax = L_MAX(ymax, dely); } } } if (ymax > 31) { L_WARNING("ymax > 31; truncating to 31\n", procName); ymax = 31; } /* Test if this is a vertical brick */ allvshifts = TRUE; for (i = 0; i < ymax; i++) { if (vshift[i] == 0) { allvshifts = FALSE; break; } } if ((sa = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); /* Add declarations */ if (allvshifts == TRUE) { /* packs them as well as possible */ if (ymax > 4) sarrayAddString(sa, wpldecls[2], 1); if (ymax > 8) sarrayAddString(sa, wpldecls[6], 1); if (ymax > 12) sarrayAddString(sa, wpldecls[10], 1); if (ymax > 16) sarrayAddString(sa, wpldecls[14], 1); if (ymax > 20) sarrayAddString(sa, wpldecls[18], 1); if (ymax > 24) sarrayAddString(sa, wpldecls[22], 1); if (ymax > 28) sarrayAddString(sa, wpldecls[26], 1); if (ymax > 1) sarrayAddString(sa, wpldecls[ymax - 2], 1); } else { /* puts them one/line */ for (i = 2; i <= ymax; i++) { if (vshift[i]) sarrayAddString(sa, wplgendecls[i - 2], 1); } } sarrayAddString(sa, emptystring, 1); /* Add definitions */ for (i = 2; i <= ymax; i++) { if (vshift[i]) sarrayAddString(sa, wpldefs[i - 2], 1); } return sa; } /*! * sarrayMakeInnerLoopDWACode() */ static SARRAY * sarrayMakeInnerLoopDWACode(SEL *sel, l_int32 index) { char *tstr, *string; char logicalor[] = "|"; char logicaland[] = "&"; char bigbuf[BUFFER_SIZE]; l_int32 i, j, optype, count, nfound, delx, dely; SARRAY *sa; PROCNAME("sarrayMakeInnerLoopDWACode"); if (!sel) return (SARRAY *)ERROR_PTR("sel not defined", procName, NULL); if (index % 2 == 0) { optype = L_MORPH_DILATE; tstr = logicalor; } else { optype = L_MORPH_ERODE; tstr = logicaland; } count = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1) count++; } } if ((sa = sarrayCreate(0)) == NULL) return (SARRAY *)ERROR_PTR("sa not made", procName, NULL); if (count == 0) { L_WARNING("no hits in Sel %d\n", procName, index); return sa; /* no code inside! */ } nfound = 0; for (i = 0; i < sel->sy; i++) { for (j = 0; j < sel->sx; j++) { if (sel->data[i][j] == 1) { nfound++; if (optype == L_MORPH_DILATE) { dely = sel->cy - i; delx = sel->cx - j; } else if (optype == L_MORPH_ERODE) { dely = i - sel->cy; delx = j - sel->cx; } if ((string = makeBarrelshiftString(delx, dely)) == NULL) { L_WARNING("barrel shift string not made\n", procName); continue; } if (count == 1) /* just one item */ sprintf(bigbuf, " *dptr = %s;", string); else if (nfound == 1) sprintf(bigbuf, " *dptr = %s %s", string, tstr); else if (nfound < count) sprintf(bigbuf, " %s %s", string, tstr); else /* nfound == count */ sprintf(bigbuf, " %s;", string); sarrayAddString(sa, bigbuf, 1); FREE(string); } } } return sa; } /*! * makeBarrelshiftString() */ static char * makeBarrelshiftString(l_int32 delx, /* j - cx */ l_int32 dely) /* i - cy */ { l_int32 absx, absy; char bigbuf[BUFFER_SIZE]; PROCNAME("makeBarrelshiftString"); if (delx < -31 || delx > 31) return (char *)ERROR_PTR("delx out of bounds", procName, NULL); if (dely < -31 || dely > 31) return (char *)ERROR_PTR("dely out of bounds", procName, NULL); absx = L_ABS(delx); absy = L_ABS(dely); if ((delx == 0) && (dely == 0)) sprintf(bigbuf, "(*sptr)"); else if ((delx == 0) && (dely < 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrm[absy - 1]); else if ((delx == 0) && (dely > 0)) sprintf(bigbuf, "(*(sptr %s))", wplstrp[absy - 1]); else if ((delx < 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) >> %d) | (*(sptr - 1) << %d))", absx, 32 - absx); else if ((delx > 0) && (dely == 0)) sprintf(bigbuf, "((*(sptr) << %d) | (*(sptr + 1) >> %d))", absx, 32 - absx); else if ((delx < 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx > 0) && (dely < 0)) sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrm[absy - 1], absx, wplstrm[absy - 1], 32 - absx); else if ((delx < 0) && (dely > 0)) sprintf(bigbuf, "((*(sptr %s) >> %d) | (*(sptr %s - 1) << %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); else /* ((delx > 0) && (dely > 0)) */ sprintf(bigbuf, "((*(sptr %s) << %d) | (*(sptr %s + 1) >> %d))", wplstrp[absy - 1], absx, wplstrp[absy - 1], 32 - absx); return stringNew(bigbuf); } leptonica-1.70/src/webpiostub.c0000644000175000017500000000644012134647756014646 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * webpiostub.c * * Stubs for webpio.c functions */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if !HAVE_LIBWEBP /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadStreamWebP(FILE *fp) { return (PIX * )ERROR_PTR("function not present", "pixReadStreamWebP", NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemWebP(const l_uint8 *filedata, size_t filesize) { return (PIX * )ERROR_PTR("function not present", "pixReadMemWebP", NULL); } /* ----------------------------------------------------------------------*/ l_int32 readHeaderWebP(const char *filename, l_int32 *pw, l_int32 *ph, l_int32 *pspp) { return ERROR_INT("function not present", "readHeaderWebP", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteWebP(const char *filename, PIX *pixs, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", "pixWriteWebP", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamWebP(FILE *fp, PIX *pixs, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", "pixWriteStreamWebP", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemWebP(l_uint8 **pencdata, size_t *pencsize, PIX *pixs, l_int32 quality, l_int32 lossless) { return ERROR_INT("function not present", "pixWriteMemWebP", 1); } /* --------------------------------------------*/ #endif /* !HAVE_LIBWEBP */ /* --------------------------------------------*/ leptonica-1.70/src/utils.c0000664000175000017500000025747712273757423013644 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * utils.c * * Control of error, warning and info messages * l_int32 setMsgSeverity() * * Error return functions, invoked by macros * l_int32 returnErrorInt() * l_float32 returnErrorFloat() * void *returnErrorPtr() * * Safe string procs * char *stringNew() * l_int32 stringCopy() * l_int32 stringReplace() * l_int32 stringLength() * l_int32 stringCat() * char *stringJoin() * char *stringReverse() * char *strtokSafe() * l_int32 stringSplitOnToken() * * Find and replace string and array procs * char *stringRemoveChars() * l_int32 stringFindSubstr() * char *stringReplaceSubstr() * char *stringReplaceEachSubstr() * L_DNA *arrayFindEachSequence() * l_int32 arrayFindSequence() * * Safe realloc * void *reallocNew() * * Read and write between file and memory * l_uint8 *l_binaryRead() * l_uint8 *l_binaryReadStream() * l_int32 l_binaryWrite() * l_int32 nbytesInFile() * l_int32 fnbytesInFile() * * Copy in memory * l_uint8 *l_binaryCopy() * * File copy operations * l_int32 fileCopy() * l_int32 fileConcatenate() * l_int32 fileAppendString() * * Test files for equivalence * l_int32 filesAreIdentical() * * Byte-swapping data conversion * l_uint16 convertOnBigEnd16() * l_uint32 convertOnBigEnd32() * l_uint16 convertOnLittleEnd16() * l_uint32 convertOnLittleEnd32() * * Cross-platform functions for opening file streams * FILE *fopenReadStream() * FILE *fopenWriteStream() * * Cross-platform functions that avoid C-runtime boundary crossing * with Windows DLLs * FILE *lept_fopen() * l_int32 lept_fclose() * void lept_calloc() * void lept_free() * * Cross-platform file system operations in temp directories * l_int32 lept_mkdir() * l_int32 lept_rmdir() * l_int32 lept_direxists() * l_int32 lept_mv() * l_int32 lept_rm() * l_int32 lept_cp() * * File name operations * l_int32 splitPathAtDirectory() * l_int32 splitPathAtExtension() * char *pathJoin() * char *genPathname() * l_int32 makeTempDirname() * char *genTempFilename() * l_int32 extractNumberFromFilename() * * File corruption operation * l_int32 fileCorruptByDeletion() * * Generate random integer in given range * l_int32 genRandomIntegerInRange() * * Simple math function * l_int32 lept_roundftoi() * * Gray code conversion * l_uint32 convertBinaryToGrayCode() * l_uint32 convertGrayToBinaryCode() * * Leptonica version number * char *getLeptonicaVersion() * * Timing * void startTimer() * l_float32 stopTimer() * L_TIMER startTimerNested() * l_float32 stopTimerNested() * void l_getCurrentTime() * void l_getFormattedDate() * * Notes on cross-platform development * ----------------------------------- * This is important if your applications must work on Windows. * (1) With the exception of splitPathAtDirectory() and * splitPathAtExtension(), all input pathnames must have unix separators. * (2) The conversion from unix to windows pathnames happens in genPathname(). * (3) Use fopenReadStream() and fopenWriteStream() to open files, * because these use genPathname() to find the platform-dependent * filenames. Likewise for l_binaryRead() and l_binaryWrite(). * (4) For moving, copying and removing files and directories that are in * /tmp or subdirectories of /tmp, use the lept_*() file system * shell wrappers: * lept_mkdir(), lept_rmdir(), lept_mv(), lept_rm() and lept_cp(). * (5) Use the lept_*() C library wrappers. These work properly on * Windows, where the same DLL must perform complementary operations * on file streams (open/close) and heap memory (malloc/free): * lept_fopen(), lept_fclose(), lept_calloc() and lept_free(). */ #include #include #ifndef _WIN32 #include /* unix only */ #endif /* ! _WIN32 */ #ifdef _MSC_VER #include #else #include #endif /* _MSC_VER */ #include "allheaders.h" #ifdef _WIN32 #include static const char path_sepchar = '\\'; #else #include /* for mkdir(2) */ #include static const char path_sepchar = '/'; #endif /* Global for controlling message output at runtime */ LEPT_DLL l_int32 LeptMsgSeverity = DEFAULT_SEVERITY; /* Subdirectory of /tmp into which files are written by default */ static char Lept_Subdir[] = "lept"; /*----------------------------------------------------------------------* * Control of error, warning and info messages * *----------------------------------------------------------------------*/ /*! * setMsgSeverity() * * Input: newsev * Return: oldsev * * Notes: * (1) setMsgSeverity() allows the user to specify the desired * message severity threshold. Messages of equal or greater * severity will be output. The previous message severity is * returned when the new severity is set. * (2) If L_SEVERITY_EXTERNAL is passed, then the severity will be * obtained from the LEPT_MSG_SEVERITY environment variable. * If the environmental variable is not set, a warning is issued. */ l_int32 setMsgSeverity(l_int32 newsev) { l_int32 oldsev; char *envsev; PROCNAME("setMsgSeverity"); oldsev = LeptMsgSeverity; if (newsev == L_SEVERITY_EXTERNAL) { envsev = getenv("LEPT_MSG_SEVERITY"); if (envsev) { LeptMsgSeverity = atoi(envsev); L_INFO("message severity set to external\n", procName); } else { L_WARNING("environment var LEPT_MSG_SEVERITY not defined\n", procName); } } else { LeptMsgSeverity = newsev; L_INFO("message severity set to %d\n", procName, newsev); } return oldsev; } /*----------------------------------------------------------------------* * Error return functions, invoked by macros * * * * (1) These error functions print messages to stderr and allow * * exit from the function that called them. * * (2) They must be invoked only by the macros ERROR_INT, * * ERROR_FLOAT and ERROR_PTR, which are in environ.h * * (3) The print output can be disabled at compile time, either * * by using -DNO_CONSOLE_IO or by setting LeptMsgSeverity. * *----------------------------------------------------------------------*/ /*! * returnErrorInt() * * Input: msg (error message) * procname * ival (return val) * Return: ival (typically 1 for an error return) */ l_int32 returnErrorInt(const char *msg, const char *procname, l_int32 ival) { fprintf(stderr, "Error in %s: %s\n", procname, msg); return ival; } /*! * returnErrorFloat() * * Input: msg (error message) * procname * fval (return val) * Return: fval */ l_float32 returnErrorFloat(const char *msg, const char *procname, l_float32 fval) { fprintf(stderr, "Error in %s: %s\n", procname, msg); return fval; } /*! * returnErrorPtr() * * Input: msg (error message) * procname * pval (return val) * Return: pval (typically null) */ void * returnErrorPtr(const char *msg, const char *procname, void *pval) { fprintf(stderr, "Error in %s: %s\n", procname, msg); return pval; } /*--------------------------------------------------------------------* * Safe string operations * *--------------------------------------------------------------------*/ /*! * stringNew() * * Input: src string * Return: dest copy of src string, or null on error */ char * stringNew(const char *src) { l_int32 len; char *dest; PROCNAME("stringNew"); if (!src) return (char *)ERROR_PTR("src not defined", procName, NULL); len = strlen(src); if ((dest = (char *)CALLOC(len + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", procName, NULL); stringCopy(dest, src, len); return dest; } /*! * stringCopy() * * Input: dest (existing byte buffer) * src string (can be null) * n (max number of characters to copy) * Return: 0 if OK, 1 on error * * Notes: * (1) Relatively safe wrapper for strncpy, that checks the input, * and does not complain if @src is null or @n < 1. * If @n < 1, this is a no-op. * (2) @dest needs to be at least @n bytes in size. * (3) We don't call strncpy() because valgrind complains about * use of uninitialized values. */ l_int32 stringCopy(char *dest, const char *src, l_int32 n) { l_int32 i; PROCNAME("stringCopy"); if (!dest) return ERROR_INT("dest not defined", procName, 1); if (!src || n < 1) return 0; /* Implementation of strncpy that valgrind doesn't complain about */ for (i = 0; i < n && src[i] != '\0'; i++) dest[i] = src[i]; for (; i < n; i++) dest[i] = '\0'; return 0; } /*! * stringReplace() * * Input: &dest string ( copy) * src string * Return: 0 if OK; 1 on error * * Notes: * (1) Frees any existing dest string * (2) Puts a copy of src string in the dest * (3) If either or both strings are null, does something reasonable. */ l_int32 stringReplace(char **pdest, const char *src) { char *scopy; l_int32 len; PROCNAME("stringReplace"); if (!pdest) return ERROR_INT("pdest not defined", procName, 1); if (*pdest) FREE(*pdest); if (src) { len = strlen(src); if ((scopy = (char *)CALLOC(len + 1, sizeof(char))) == NULL) return ERROR_INT("scopy not made", procName, 1); stringCopy(scopy, src, len); *pdest = scopy; } else { *pdest = NULL; } return 0; } /*! * stringLength() * * Input: src string (can be null or null-terminated string) * size (size of src buffer) * Return: length of src in bytes. * * Notes: * (1) Safe implementation of strlen that only checks size bytes * for trailing NUL. * (2) Valid returned string lengths are between 0 and size - 1. * If size bytes are checked without finding a NUL byte, then * an error is indicated by returning size. */ l_int32 stringLength(const char *src, size_t size) { l_int32 i; PROCNAME("stringLength"); if (!src) return ERROR_INT("src not defined", procName, 0); if (size < 1) return 0; for (i = 0; i < size; i++) { if (src[i] == '\0') return i; } return size; } /*! * stringCat() * * Input: dest (null-terminated byte buffer) * size (size of dest) * src string (can be null or null-terminated string) * Return: number of bytes added to dest; -1 on error * * Notes: * (1) Alternative implementation of strncat, that checks the input, * is easier to use (since the size of the dest buffer is specified * rather than the number of bytes to copy), and does not complain * if @src is null. * (2) Never writes past end of dest. * (3) If it can't append src (an error), it does nothing. * (4) N.B. The order of 2nd and 3rd args is reversed from that in * strncat, as in the Windows function strcat_s(). */ l_int32 stringCat(char *dest, size_t size, const char *src) { l_int32 i, n; l_int32 lendest, lensrc; PROCNAME("stringCat"); if (!dest) return ERROR_INT("dest not defined", procName, -1); if (size < 1) return ERROR_INT("size < 1; too small", procName, -1); if (!src) return 0; lendest = stringLength(dest, size); if (lendest == size) return ERROR_INT("no terminating nul byte", procName, -1); lensrc = stringLength(src, size); if (lensrc == 0) return 0; n = (lendest + lensrc > size - 1 ? size - lendest - 1 : lensrc); if (n < 1) return ERROR_INT("dest too small for append", procName, -1); for (i = 0; i < n; i++) dest[lendest + i] = src[i]; dest[lendest + n] = '\0'; return n; } /*! * stringJoin() * * Input: src1 string ( can be null) * src2 string ( can be null) * Return: concatenated string, or null on error * * Notes: * (1) This is a safe version of strcat; it makes a new string. * (2) It is not an error if either or both of the strings * are empty, or if either or both of the pointers are null. */ char * stringJoin(const char *src1, const char *src2) { char *dest; l_int32 srclen1, srclen2, destlen; PROCNAME("stringJoin"); srclen1 = (src1) ? strlen(src1) : 0; srclen2 = (src2) ? strlen(src2) : 0; destlen = srclen1 + srclen2 + 3; if ((dest = (char *)CALLOC(destlen, sizeof(char))) == NULL) return (char *)ERROR_PTR("calloc fail for dest", procName, NULL); if (src1) stringCopy(dest, src1, srclen1); if (src2) strncat(dest, src2, srclen2); return dest; } /*! * stringReverse() * * Input: src (string) * Return: dest (newly-allocated reversed string) */ char * stringReverse(const char *src) { char *dest; l_int32 i, len; PROCNAME("stringReverse"); if (!src) return (char *)ERROR_PTR("src not defined", procName, NULL); len = strlen(src); if ((dest = (char *)CALLOC(len + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("calloc fail for dest", procName, NULL); for (i = 0; i < len; i++) dest[i] = src[len - 1 - i]; return dest; } /*! * strtokSafe() * * Input: cstr (input string to be sequentially parsed; * use NULL after the first call) * seps (a string of character separators) * &saveptr ( ptr to the next char after * the last encountered separator) * Return: substr (a new string that is copied from the previous * saveptr up to but not including the next * separator character), or NULL if end of cstr. * * Notes: * (1) This is a thread-safe implementation of strtok. * (2) It has the same interface as strtok_r. * (3) It differs from strtok_r in usage in two respects: * (a) the input string is not altered * (b) each returned substring is newly allocated and must * be freed after use. * (4) Let me repeat that. This is "safe" because the input * string is not altered and because each returned string * is newly allocated on the heap. * (5) It is here because, surprisingly, some C libraries don't * include strtok_r. * (6) Important usage points: * - Input the string to be parsed on the first invocation. * - Then input NULL after that; the value returned in saveptr * is used in all subsequent calls. * (7) This is only slightly slower than strtok_k. */ char * strtokSafe(char *cstr, const char *seps, char **psaveptr) { char nextc; char *start, *substr; l_int32 istart, i, j, nchars; PROCNAME("strtokSafe"); if (!seps) return (char *)ERROR_PTR("seps not defined", procName, NULL); if (!psaveptr) return (char *)ERROR_PTR("&saveptr not defined", procName, NULL); if (!cstr) start = *psaveptr; else start = cstr; if (!start) /* nothing to do */ return NULL; /* First time, scan for the first non-sep character */ istart = 0; if (cstr) { for (istart = 0;; istart++) { if ((nextc = start[istart]) == '\0') { *psaveptr = NULL; /* in case caller doesn't check ret value */ return NULL; } if (!strchr(seps, nextc)) break; } } /* Scan through, looking for a sep character; if none is * found, 'i' will be at the end of the string. */ for (i = istart;; i++) { if ((nextc = start[i]) == '\0') break; if (strchr(seps, nextc)) break; } /* Save the substring */ nchars = i - istart; substr = (char *)CALLOC(nchars + 1, sizeof(char)); stringCopy(substr, start + istart, nchars); /* Look for the next non-sep character. * If this is the last substring, return a null saveptr. */ for (j = i;; j++) { if ((nextc = start[j]) == '\0') { *psaveptr = NULL; /* no more non-sep characters */ break; } if (!strchr(seps, nextc)) { *psaveptr = start + j; /* start here on next call */ break; } } return substr; } /*! * stringSplitOnToken() * * Input: cstr (input string to be split; not altered) * seps (a string of character separators) * &head ( ptr to copy of the input string, up to * the first separator token encountered) * &tail ( ptr to copy of the part of the input string * starting with the first non-separator character * that occurs after the first separator is found) * Return: 0 if OK, 1 on error * * Notes: * (1) The input string is not altered; all split parts are new strings. * (2) The split occurs around the first consecutive sequence of * tokens encountered. * (3) The head goes from the beginning of the string up to * but not including the first token found. * (4) The tail contains the second part of the string, starting * with the first char in that part that is NOT a token. * (5) If no separator token is found, 'head' contains a copy * of the input string and 'tail' is null. */ l_int32 stringSplitOnToken(char *cstr, const char *seps, char **phead, char **ptail) { char *saveptr; PROCNAME("stringSplitOnToken"); if (!phead) return ERROR_INT("&head not defined", procName, 1); if (!ptail) return ERROR_INT("&tail not defined", procName, 1); *phead = *ptail = NULL; if (!cstr) return ERROR_INT("cstr not defined", procName, 1); if (!seps) return ERROR_INT("seps not defined", procName, 1); *phead = strtokSafe(cstr, seps, &saveptr); if (saveptr) *ptail = stringNew(saveptr); return 0; } /*--------------------------------------------------------------------* * Find and replace procs * *--------------------------------------------------------------------*/ /*! * stringRemoveChars() * * Input: src (input string; can be of zero length) * remchars (string of chars to be removed from src) * Return: dest (string with specified chars removed), or null on error */ char * stringRemoveChars(const char *src, const char *remchars) { char ch; char *dest; l_int32 nsrc, i, k; PROCNAME("stringRemoveChars"); if (!src) return (char *)ERROR_PTR("src not defined", procName, NULL); if (!remchars) return stringNew(src); if ((dest = (char *)CALLOC(strlen(src) + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", procName, NULL); nsrc = strlen(src); for (i = 0, k = 0; i < nsrc; i++) { ch = src[i]; if (!strchr(remchars, ch)) dest[k++] = ch; } return dest; } /*! * stringFindSubstr() * * Input: src (input string; can be of zero length) * sub (substring to be searched for) * &loc ( location of substring in src) * Return: 1 if found; 0 if not found or on error * * Notes: * (1) This is a wrapper around strstr(). * (2) Both @src and @sub must be defined, and @sub must have * length of at least 1. * (3) If the substring is not found and loc is returned, it has * the value -1. */ l_int32 stringFindSubstr(const char *src, const char *sub, l_int32 *ploc) { char *ptr; PROCNAME("stringFindSubstr"); if (!src) return ERROR_INT("src not defined", procName, 0); if (!sub) return ERROR_INT("sub not defined", procName, 0); if (ploc) *ploc = -1; if (strlen(sub) == 0) return ERROR_INT("substring length 0", procName, 0); if (strlen(src) == 0) return 0; if ((ptr = (char *)strstr(src, sub)) == NULL) /* not found */ return 0; if (ploc) *ploc = ptr - src; return 1; } /*! * stringReplaceSubstr() * * Input: src (input string; can be of zero length) * sub1 (substring to be replaced) * sub2 (substring to put in; can be "") * &found ( 1 if sub1 is found; 0 otherwise) * &loc ( location of ptr after replacement) * Return: dest (string with substring replaced), or null if the * substring not found or on error. * * Notes: * (1) Replaces the first instance. * (2) To only remove sub1, use "" for sub2 * (3) Returns a new string if sub1 and sub2 are the same. * (4) The optional loc is input as the byte offset within the src * from which the search starts, and after the search it is the * char position in the string of the next character after * the substituted string. * (5) N.B. If ploc is not null, loc must always be initialized. * To search the string from the beginning, set loc = 0. */ char * stringReplaceSubstr(const char *src, const char *sub1, const char *sub2, l_int32 *pfound, l_int32 *ploc) { char *ptr, *dest; l_int32 nsrc, nsub1, nsub2, len, npre, loc; PROCNAME("stringReplaceSubstr"); if (!src) return (char *)ERROR_PTR("src not defined", procName, NULL); if (!sub1) return (char *)ERROR_PTR("sub1 not defined", procName, NULL); if (!sub2) return (char *)ERROR_PTR("sub2 not defined", procName, NULL); if (pfound) *pfound = 0; if (ploc) loc = *ploc; else loc = 0; if ((ptr = (char *)strstr(src + loc, sub1)) == NULL) { return NULL; } if (pfound) *pfound = 1; nsrc = strlen(src); nsub1 = strlen(sub1); nsub2 = strlen(sub2); len = nsrc + nsub2 - nsub1; if ((dest = (char *)CALLOC(len + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("dest not made", procName, NULL); npre = ptr - src; memcpy(dest, src, npre); strcpy(dest + npre, sub2); strcpy(dest + npre + nsub2, ptr + nsub1); if (ploc) *ploc = npre + nsub2; return dest; } /*! * stringReplaceEachSubstr() * * Input: src (input string; can be of zero length) * sub1 (substring to be replaced) * sub2 (substring to put in; can be "") * &count ( the number of times that sub1 * is found in src; 0 if not found) * Return: dest (string with substring replaced), or null if the * substring not found or on error. * * Notes: * (1) Replaces every instance. * (2) To only remove each instance of sub1, use "" for sub2 * (3) Returns NULL if sub1 and sub2 are the same. */ char * stringReplaceEachSubstr(const char *src, const char *sub1, const char *sub2, l_int32 *pcount) { char *currstr, *newstr; l_int32 loc; PROCNAME("stringReplaceEachSubstr"); if (!src) return (char *)ERROR_PTR("src not defined", procName, NULL); if (!sub1) return (char *)ERROR_PTR("sub1 not defined", procName, NULL); if (!sub2) return (char *)ERROR_PTR("sub2 not defined", procName, NULL); if (pcount) *pcount = 0; loc = 0; if ((newstr = stringReplaceSubstr(src, sub1, sub2, NULL, &loc)) == NULL) return NULL; if (pcount) (*pcount)++; while (1) { currstr = newstr; newstr = stringReplaceSubstr(currstr, sub1, sub2, NULL, &loc); if (!newstr) return currstr; FREE(currstr); if (pcount) (*pcount)++; } } /*! * arrayFindEachSequence() * * Input: data (byte array) * datalen (length of data, in bytes) * sequence (subarray of bytes to find in data) * seqlen (length of sequence, in bytes) * Return: dna of offsets where the sequence is found, or null if * none are found or on error * * Notes: * (1) The byte arrays @data and @sequence are not C strings, * as they can contain null bytes. Therefore, for each * we must give the length of the array. * (2) This finds every occurrence in @data of @sequence. */ L_DNA * arrayFindEachSequence(const l_uint8 *data, l_int32 datalen, const l_uint8 *sequence, l_int32 seqlen) { l_int32 start, offset, realoffset, found; L_DNA *da; PROCNAME("arrayFindEachSequence"); if (!data || !sequence) return (L_DNA *)ERROR_PTR("data & sequence not both defined", procName, NULL); da = l_dnaCreate(0); start = 0; while (1) { arrayFindSequence(data + start, datalen - start, sequence, seqlen, &offset, &found); if (found == FALSE) break; realoffset = start + offset; l_dnaAddNumber(da, realoffset); start = realoffset + seqlen; if (start >= datalen) break; } if (l_dnaGetCount(da) == 0) l_dnaDestroy(&da); return da; } /*! * arrayFindSequence() * * Input: data (byte array) * datalen (length of data, in bytes) * sequence (subarray of bytes to find in data) * seqlen (length of sequence, in bytes) * &offset (return> offset from beginning of * data where the sequence begins) * &found ( 1 if sequence is found; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) The byte arrays 'data' and 'sequence' are not C strings, * as they can contain null bytes. Therefore, for each * we must give the length of the array. * (2) This searches for the first occurrence in @data of @sequence, * which consists of @seqlen bytes. The parameter @seqlen * must not exceed the actual length of the @sequence byte array. * (3) If the sequence is not found, the offset will be set to -1. */ l_int32 arrayFindSequence(const l_uint8 *data, l_int32 datalen, const l_uint8 *sequence, l_int32 seqlen, l_int32 *poffset, l_int32 *pfound) { l_int32 i, j, found, lastpos; PROCNAME("arrayFindSequence"); if (!data || !sequence) return ERROR_INT("data & sequence not both defined", procName, 1); if (!poffset) return ERROR_INT("&offset not defined", procName, 1); *poffset = -1; if (pfound) *pfound = 0; lastpos = datalen - seqlen + 1; found = 0; for (i = 0; i < lastpos; i++) { for (j = 0; j < seqlen; j++) { if (data[i + j] != sequence[j]) break; if (j == seqlen - 1) found = 1; } if (found) break; } if (found) { *poffset = i; if (pfound) *pfound = 1; } return 0; } /*--------------------------------------------------------------------* * Safe realloc * *--------------------------------------------------------------------*/ /*! * reallocNew() * * Input: &indata (; nulls indata) * oldsize (size of input data to be copied, in bytes) * newsize (size of data to be reallocated in bytes) * Return: ptr to new data, or null on error * * Action: !N.B. (3) and (4)! * (1) Allocates memory, initialized to 0 * (2) Copies as much of the input data as possible * to the new block, truncating the copy if necessary * (3) Frees the input data * (4) Zeroes the input data ptr * * Notes: * (1) If newsize <=0, just frees input data and nulls ptr * (2) If input ptr is null, just callocs new memory * (3) This differs from realloc in that it always allocates * new memory (if newsize > 0) and initializes it to 0, * it requires the amount of old data to be copied, * and it takes the address of the input ptr and * nulls the handle. */ void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize) { l_int32 minsize; void *indata; void *newdata; PROCNAME("reallocNew"); if (!pindata) return ERROR_PTR("input data not defined", procName, NULL); indata = *pindata; if (newsize <= 0) { /* nonstandard usage */ if (indata) { FREE(indata); *pindata = NULL; } return NULL; } if (!indata) { /* nonstandard usage */ if ((newdata = (void *)CALLOC(1, newsize)) == NULL) return ERROR_PTR("newdata not made", procName, NULL); return newdata; } /* Standard usage */ if ((newdata = (void *)CALLOC(1, newsize)) == NULL) return ERROR_PTR("newdata not made", procName, NULL); minsize = L_MIN(oldsize, newsize); memcpy((char *)newdata, (char *)indata, minsize); FREE(indata); *pindata = NULL; return newdata; } /*--------------------------------------------------------------------* * Read and write between file and memory * *--------------------------------------------------------------------*/ /*! * l_binaryRead() * * Input: filename * &nbytes ( number of bytes read) * Return: data, or null on error */ l_uint8 * l_binaryRead(const char *filename, size_t *pnbytes) { l_uint8 *data; FILE *fp; PROCNAME("l_binaryRead"); if (!filename) return (l_uint8 *)ERROR_PTR("filename not defined", procName, NULL); if (!pnbytes) return (l_uint8 *)ERROR_PTR("pnbytes not defined", procName, NULL); *pnbytes = 0; if ((fp = fopenReadStream(filename)) == NULL) return (l_uint8 *)ERROR_PTR("file stream not opened", procName, NULL); data = l_binaryReadStream(fp, pnbytes); fclose(fp); return data; } /*! * l_binaryReadStream() * * Input: stream * &nbytes ( number of bytes read) * Return: null-terminated array, or null on error * (reading 0 bytes is not an error) * * Notes: * (1) The returned array is terminated with a null byte so that * it can be used to read ascii data into a proper C string. * (2) Side effect: this re-positions the stream ptr to the * beginning of the file. */ l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes) { l_int32 ignore; l_uint8 *data; PROCNAME("l_binaryReadStream"); if (!pnbytes) return (l_uint8 *)ERROR_PTR("&nbytes not defined", procName, NULL); *pnbytes = 0; if (!fp) return (l_uint8 *)ERROR_PTR("stream not defined", procName, NULL); *pnbytes = fnbytesInFile(fp); if ((data = (l_uint8 *)CALLOC(1, *pnbytes + 1)) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for data", procName, NULL); ignore = fread(data, 1, *pnbytes, fp); return data; } /*! * l_binaryWrite() * * Input: filename (output) * operation ("w" for write; "a" for append) * data (binary data to be written) * nbytes (size of data array) * Return: 0 if OK; 1 on error */ l_int32 l_binaryWrite(const char *filename, const char *operation, void *data, size_t nbytes) { char actualOperation[20]; FILE *fp; PROCNAME("l_binaryWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!operation) return ERROR_INT("operation not defined", procName, 1); if (!data) return ERROR_INT("data not defined", procName, 1); if (nbytes <= 0) return ERROR_INT("nbytes must be > 0", procName, 1); if (!strcmp(operation, "w") && !strcmp(operation, "a")) return ERROR_INT("operation not one of {'w','a'}", procName, 1); /* The 'b' flag to fopen() is ignored for all POSIX * conforming systems. However, Windows needs the 'b' flag. */ stringCopy(actualOperation, operation, 2); strncat(actualOperation, "b", 2); if ((fp = fopenWriteStream(filename, actualOperation)) == NULL) return ERROR_INT("stream not opened", procName, 1); fwrite(data, 1, nbytes, fp); fclose(fp); return 0; } /*! * nbytesInFile() * * Input: filename * Return: nbytes in file; 0 on error */ size_t nbytesInFile(const char *filename) { size_t nbytes; FILE *fp; PROCNAME("nbytesInFile"); if (!filename) return ERROR_INT("filename not defined", procName, 0); if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("stream not opened", procName, 0); nbytes = fnbytesInFile(fp); fclose(fp); return nbytes; } /*! * fnbytesInFile() * * Input: file stream * Return: nbytes in file; 0 on error */ size_t fnbytesInFile(FILE *fp) { size_t nbytes, pos; PROCNAME("fnbytesInFile"); if (!fp) return ERROR_INT("stream not open", procName, 0); pos = ftell(fp); /* initial position */ fseek(fp, 0, SEEK_END); /* EOF */ nbytes = ftell(fp); fseek(fp, pos, SEEK_SET); /* back to initial position */ return nbytes; } /*--------------------------------------------------------------------* * Copy in memory * *--------------------------------------------------------------------*/ /*! * l_binaryCopy() * * Input: datas * size (of data array) * Return: datad (on heap), or null on error * * Notes: * (1) We add 4 bytes to the zeroed output because in some cases * (e.g., string handling) it is important to have the data * be null terminated. This guarantees that after the memcpy, * the result is automatically null terminated. */ l_uint8 * l_binaryCopy(l_uint8 *datas, size_t size) { l_uint8 *datad; PROCNAME("l_binaryCopy"); if (!datas) return (l_uint8 *)ERROR_PTR("datas not defined", procName, NULL); if ((datad = (l_uint8 *)CALLOC(size + 4, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("datad not made", procName, NULL); memcpy(datad, datas, size); return datad; } /*--------------------------------------------------------------------* * File copy operations * *--------------------------------------------------------------------*/ /*! * fileCopy() * * Input: srcfile (copy this file) * newfile (to this file) * Return: 0 if OK, 1 on error */ l_int32 fileCopy(const char *srcfile, const char *newfile) { l_int32 ret; size_t nbytes; l_uint8 *data; PROCNAME("fileCopy"); if (!srcfile) return ERROR_INT("srcfile not defined", procName, 1); if (!newfile) return ERROR_INT("newfile not defined", procName, 1); if ((data = l_binaryRead(srcfile, &nbytes)) == NULL) return ERROR_INT("data not returned", procName, 1); ret = l_binaryWrite(newfile, "w", data, nbytes); FREE(data); return ret; } /*! * fileConcatenate() * * Input: srcfile (file to append) * destfile (file to add to) * Return: 0 if OK, 1 on error */ l_int32 fileConcatenate(const char *srcfile, const char *destfile) { size_t nbytes; l_uint8 *data; PROCNAME("fileConcatenate"); if (!srcfile) return ERROR_INT("srcfile not defined", procName, 1); if (!destfile) return ERROR_INT("destfile not defined", procName, 1); data = l_binaryRead(srcfile, &nbytes); l_binaryWrite(destfile, "a", data, nbytes); FREE(data); return 0; } /*! * fileAppendString() * * Input: filename * str (string to append to file) * Return: 0 if OK, 1 on error */ l_int32 fileAppendString(const char *filename, const char *str) { FILE *fp; PROCNAME("fileAppendString"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!str) return ERROR_INT("str not defined", procName, 1); if ((fp = fopenWriteStream(filename, "a")) == NULL) return ERROR_INT("stream not opened", procName, 1); fprintf(fp, "%s", str); fclose(fp); return 0; } /*--------------------------------------------------------------------* * Test files for equivalence * *--------------------------------------------------------------------*/ /*! * filesAreIdentical() * * Input: fname1 * fname2 * &same ( 1 if identical; 0 if different) * Return: 0 if OK, 1 on error */ l_int32 filesAreIdentical(const char *fname1, const char *fname2, l_int32 *psame) { l_int32 i, same; size_t nbytes1, nbytes2; l_uint8 *array1, *array2; PROCNAME("filesAreIdentical"); if (!psame) return ERROR_INT("&same not defined", procName, 1); *psame = 0; if (!fname1 || !fname2) return ERROR_INT("both names not defined", procName, 1); nbytes1 = nbytesInFile(fname1); nbytes2 = nbytesInFile(fname2); if (nbytes1 != nbytes2) return 0; if ((array1 = l_binaryRead(fname1, &nbytes1)) == NULL) return ERROR_INT("array1 not read", procName, 1); if ((array2 = l_binaryRead(fname2, &nbytes2)) == NULL) return ERROR_INT("array2 not read", procName, 1); same = 1; for (i = 0; i < nbytes1; i++) { if (array1[i] != array2[i]) { same = 0; break; } } FREE(array1); FREE(array2); *psame = same; return 0; } /*--------------------------------------------------------------------------* * 16 and 32 bit byte-swapping on big endian and little endian machines * * * * These are typically used for I/O conversions: * * (1) endian conversion for data that was read from a file * * (2) endian conversion on data before it is written to a file * *--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------* * 16-bit byte swapping * *--------------------------------------------------------------------*/ #ifdef L_BIG_ENDIAN l_uint16 convertOnBigEnd16(l_uint16 shortin) { return ((shortin << 8) | (shortin >> 8)); } l_uint16 convertOnLittleEnd16(l_uint16 shortin) { return shortin; } #else /* L_LITTLE_ENDIAN */ l_uint16 convertOnLittleEnd16(l_uint16 shortin) { return ((shortin << 8) | (shortin >> 8)); } l_uint16 convertOnBigEnd16(l_uint16 shortin) { return shortin; } #endif /* L_BIG_ENDIAN */ /*--------------------------------------------------------------------* * 32-bit byte swapping * *--------------------------------------------------------------------*/ #ifdef L_BIG_ENDIAN l_uint32 convertOnBigEnd32(l_uint32 wordin) { return ((wordin << 24) | ((wordin << 8) & 0x00ff0000) | ((wordin >> 8) & 0x0000ff00) | (wordin >> 24)); } l_uint32 convertOnLittleEnd32(l_uint32 wordin) { return wordin; } #else /* L_LITTLE_ENDIAN */ l_uint32 convertOnLittleEnd32(l_uint32 wordin) { return ((wordin << 24) | ((wordin << 8) & 0x00ff0000) | ((wordin >> 8) & 0x0000ff00) | (wordin >> 24)); } l_uint32 convertOnBigEnd32(l_uint32 wordin) { return wordin; } #endif /* L_BIG_ENDIAN */ /*--------------------------------------------------------------------* * Opening file streams * *--------------------------------------------------------------------*/ /*! * fopenReadStream() * * Input: filename * Return: stream, or null on error * * Notes: * (1) This wrapper also handles pathname conversions for Windows. * It should be used whenever you want to run fopen() to * read from a stream. */ FILE * fopenReadStream(const char *filename) { char *fname, *tail; FILE *fp; PROCNAME("fopenReadStream"); if (!filename) return (FILE *)ERROR_PTR("filename not defined", procName, NULL); /* Try input filename */ fname = genPathname(filename, NULL); fp = fopen(fname, "rb"); FREE(fname); if (fp) return fp; /* Else, strip directory and try locally */ splitPathAtDirectory(filename, NULL, &tail); fp = fopen(tail, "rb"); FREE(tail); if (!fp) return (FILE *)ERROR_PTR("file not found", procName, NULL); return fp; } /*! * fopenWriteStream() * * Input: filename * modestring * Return: stream, or null on error * * Notes: * (1) This wrapper also handles pathname conversions for Windows. * It should be used whenever you want to run fopen() to * write or append to a stream. */ FILE * fopenWriteStream(const char *filename, const char *modestring) { FILE *fp; PROCNAME("fopenWriteStream"); if (!filename) return (FILE *)ERROR_PTR("filename not defined", procName, NULL); #ifdef _WIN32 { char *fname; fname = genPathname(filename, NULL); fp = fopen(fname, modestring); FREE(fname); } #else fp = fopen(filename, modestring); #endif /* _WIN32 */ if (!fp) return (FILE *)ERROR_PTR("stream not opened", procName, NULL); return fp; } /*--------------------------------------------------------------------* * Functions to avoid C-runtime boundary crossing with dlls * *--------------------------------------------------------------------*/ /* * Problems arise when pointers to streams and data are passed * between two Windows DLLs that have been generated with different * C runtimes. To avoid this, leptonica provides wrappers for * several C library calls. */ /*! * lept_fopen() * * Input: filename * mode (same as for fopen(); e.g., "rb") * Return: stream or null on error * * Notes: * (1) This must be used by any application that passes * a file handle to a leptonica Windows DLL. */ FILE * lept_fopen(const char *filename, const char *mode) { PROCNAME("lept_fopen"); if (!filename) return (FILE *)ERROR_PTR("filename not defined", procName, NULL); if (!mode) return (FILE *)ERROR_PTR("mode not defined", procName, NULL); if (stringFindSubstr(mode, "r", NULL)) return fopenReadStream(filename); else return fopenWriteStream(filename, mode); } /*! * lept_fclose() * * Input: fp (stream handle) * Return: 0 if OK, 1 on error * * Notes: * (1) This should be used by any application that accepts * a file handle generated by a leptonica Windows DLL. */ l_int32 lept_fclose(FILE *fp) { PROCNAME("lept_fclose"); if (!fp) return ERROR_INT("stream not defined", procName, 1); return fclose(fp); } /*! * lept_calloc() * * Input: nmemb (number of members) * size (of each member) * Return: void ptr, or null on error * * Notes: * (1) For safety with windows DLLs, this can be used in conjunction * with lept_free() to avoid C-runtime boundary problems. * Just use these two functions throughout your application. */ void * lept_calloc(size_t nmemb, size_t size) { if (nmemb <= 0 || size <= 0) return NULL; return CALLOC(nmemb, size); } /*! * lept_free() * * Input: void ptr * Return: 0 if OK, 1 on error * * Notes: * (1) This should be used by any application that accepts * heap data allocated by a leptonica Windows DLL. */ void lept_free(void *ptr) { if (!ptr) return; FREE(ptr); return; } /*--------------------------------------------------------------------* * Cross-platform file system operations * * [ These only write to /tmp or its subdirectories ] * *--------------------------------------------------------------------*/ /*! * lept_mkdir() * * Input: subdir (of /tmp or its equivalent on Windows) * Return: 0 on success, non-zero on failure * * Notes: * (1) This makes a subdirectory of /tmp/. * (2) Use unix pathname separators. * (3) On Windows, it makes a subdirectory of /leptonica, * where is the Windows temp dir. The name translation is: * /tmp --> /leptonica */ l_int32 lept_mkdir(const char *subdir) { char *dir; l_int32 ret; #ifdef _WIN32 char *newpath; l_uint32 attributes; #endif /* !_WIN32 */ PROCNAME("lept_mkdir"); if (!subdir) return ERROR_INT("subdir not defined", procName, 1); if ((strlen(subdir) == 0) || (subdir[0] == '.') || (subdir[0] == '/')) return ERROR_INT("subdir not an actual subdirectory", procName, 1); dir = pathJoin("/tmp", subdir); #ifndef _WIN32 ret = mkdir(dir, 0777); #else /* Make sure the leptonica subdir exists in tmp dir */ newpath = genPathname("/tmp", NULL); attributes = GetFileAttributes(newpath); if (attributes == INVALID_FILE_ATTRIBUTES) { ret = (CreateDirectory(newpath, NULL) ? 0 : 1); } FREE(newpath); newpath = genPathname(dir, NULL); ret = (CreateDirectory(newpath, NULL) ? 0 : 1); FREE(newpath); #endif /* !_WIN32 */ FREE(dir); return ret; } /*! * lept_rmdir() * * Input: subdir (of /tmp or its equivalent on Windows) * Return: 0 on success, non-zero on failure * * Notes: * (1) On unix, this removes all the files in the named * subdirectory of /tmp. It then removes the subdirectory. * (2) Use unix pathname separators. * (3) On Windows, the affected directory is a subdirectory * of /leptonica, where is the Windows temp dir. */ l_int32 lept_rmdir(const char *subdir) { char *dir, *fname, *fullname; l_int32 exists, ret, i, nfiles; SARRAY *sa; #ifdef _WIN32 char *newpath; #endif /* _WIN32 */ PROCNAME("lept_rmdir"); if (!subdir) return ERROR_INT("subdir not defined", procName, 1); if ((strlen(subdir) == 0) || (subdir[0] == '.') || (subdir[0] == '/')) return ERROR_INT("subdir not an actual subdirectory", procName, 1); if ((dir = pathJoin("/tmp", subdir)) == NULL) return ERROR_INT("dir not made", procName, 1); lept_direxists(dir, &exists); if (!exists) { /* fail silently */ FREE(dir); return 0; } /* List all the files in temp subdir */ if ((sa = getFilenamesInDirectory(dir)) == NULL) { L_ERROR("directory %s does not exist!!\n", procName, dir); FREE(dir); return 1; } nfiles = sarrayGetCount(sa); #ifndef _WIN32 for (i = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); fullname = genPathname(dir, fname); remove(fullname); FREE(fullname); } ret = remove(dir); #else for (i = 0; i < nfiles; i++) { fname = sarrayGetString(sa, i, L_NOCOPY); fullname = genPathname(dir, fname); ret = DeleteFile(fullname); FREE(fullname); } newpath = genPathname(dir, NULL); ret = (RemoveDirectory(newpath) ? 0 : 1); FREE(newpath); #endif /* !_WIN32 */ sarrayDestroy(&sa); FREE(dir); return ret; } /*! * lept_direxists() * * Input: dirname * &exists ( 1 on success, 0 on failure) * Return: void * * Notes: * (1) For Windows, use windows pathname separators. */ void lept_direxists(const char *dirname, l_int32 *pexists) { if (!pexists) return; *pexists = 0; if (!dirname) return; #ifndef _WIN32 { DIR *pdir = opendir(dirname); if (pdir) { *pexists = 1; closedir(pdir); } } #else /* _WIN32 */ { char *fulldirname; fulldirname = genPathname(dirname, NULL); if (fulldirname) { HANDLE hFind = INVALID_HANDLE_VALUE; WIN32_FIND_DATAA ffd; hFind = FindFirstFileA(fulldirname, &ffd); if (hFind != INVALID_HANDLE_VALUE) { *pexists = 1; FindClose(hFind); } FREE(fulldirname); } } #endif /* _WIN32 */ return; } /*! * lept_rm() * * Input: subdir (can be NULL, in which case the removed file is * in /tmp) * filename (with or without the directory) * Return: 0 on success, non-zero on failure * * Notes: * (1) This removes the named file in /tmp or a subdirectory of /tmp. * If the file is in /tmp, use NULL for the subdir. * (2) @filename can include directories in the path, but they are ignored. * (3) Use unix pathname separators. * (4) On Windows, the file is in either /leptonica, or * a subdirectory of this, where is the Windows temp dir. * The name translation is: /tmp --> /leptonica */ l_int32 lept_rm(const char *subdir, const char *filename) { char *dir, *pathname, *tail; l_int32 ret; #ifdef _WIN32 char *newpath; #endif /* _WIN32 */ PROCNAME("lept_rm"); if (!filename || strlen(filename) == 0) return ERROR_INT("filename undefined or empty", procName, 1); splitPathAtDirectory(filename, NULL, &tail); if (subdir) { dir = pathJoin("/tmp", subdir); pathname = pathJoin(dir, tail); FREE(dir); } else { pathname = pathJoin("/tmp", tail); } FREE(tail); if (!pathname) return ERROR_INT("pathname not made", procName, 1); #ifndef _WIN32 ret = remove(pathname); #else newpath = genPathname(pathname, NULL); if (!newpath) { FREE(pathname); return ERROR_INT("newpath not made", procName, 1); } ret = (DeleteFile(newpath) ? 0 : 1); FREE(newpath); #endif /* !_WIN32 */ FREE(pathname); return ret; } /*! * lept_mv() * * Input: srcfile, newfile * Return: 0 on success, non-zero on failure * * Notes: * (1) This moves a srcfile to /tmp or to a subdirectory of /tmp. * (2) The input srcfile name is the complete pathname. * The input newfile is either in /tmp or a subdirectory * of /tmp, and newfile can be specified either as the * full path or without the leading '/tmp'. * (3) Use unix pathname separators. * (4) On Windows, the source and target filename are altered * internally if necessary to conform to the Windows temp file. * The name translation is: /tmp --> /leptonica */ l_int32 lept_mv(const char *srcfile, const char *newfile) { char *newfileplus; l_int32 ret; #ifndef _WIN32 char *command; l_int32 nbytes; #else char *srcpath, *newpath, *tail; l_uint32 attributes; #endif /* !_WIN32 */ PROCNAME("lept_mv"); if (!srcfile || !newfile) return ERROR_INT("srcfile and newfile not both defined", procName, 1); if (strncmp(newfile, "/tmp/", 5)) newfileplus = pathJoin("/tmp", newfile); else newfileplus = stringNew(newfile); #ifndef _WIN32 nbytes = strlen(srcfile) + strlen(newfileplus) + 10; command = (char *)CALLOC(nbytes, sizeof(char)); snprintf(command, nbytes, "mv %s %s", srcfile, newfileplus); ret = system(command); FREE(command); #else srcpath = genPathname(srcfile, NULL); newpath = genPathname(newfileplus, NULL); attributes = GetFileAttributes(newpath); if (attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { if (splitPathAtDirectory(srcpath, NULL, &tail)) { FREE(srcpath); FREE(newpath); return ERROR_INT("Unable to split source filename into root & tail", procName, 1); } FREE(newpath); newpath = genPathname(newfileplus, tail); FREE(tail); } /* New file overwritten if it already exists */ ret = (MoveFileEx(srcpath, newpath, MOVEFILE_COPY_ALLOWED | MOVEFILE_REPLACE_EXISTING) ? 0 : 1); FREE(srcpath); FREE(newpath); #endif /* !_WIN32 */ FREE(newfileplus); return ret; } /*! * lept_cp() * * Input: srcfile * newfile * Return: 0 on success, non-zero on failure * * Notes: * (1) This copies a file to /tmp or a subdirectory of /tmp. * (2) The input srcfile name is the complete pathname. * The input newfile is either in /tmp or a subdirectory * of /tmp, and newfile can be specified either as the * full path or without the leading '/tmp'. * (3) Use unix pathname separators. * (4) On Windows, the source and target filename are altered * internally if necessary to conform to the Windows temp file. * (5) Alternatively, you can use fileCopy(). This avoids * forking a new process and has no restrictions on the * destination directory. */ l_int32 lept_cp(const char *srcfile, const char *newfile) { char *newfileplus; l_int32 ret; #ifndef _WIN32 char *command; l_int32 nbytes; #else char *srcpath, *newpath, *tail; l_uint32 attributes; #endif /* !_WIN32 */ PROCNAME("lept_cp"); if (!srcfile || !newfile) return ERROR_INT("srcfile and newfile not both defined", procName, 1); if (strncmp(newfile, "/tmp/", 5)) newfileplus = pathJoin("/tmp", newfile); else newfileplus = stringNew(newfile); #ifndef _WIN32 nbytes = strlen(srcfile) + strlen(newfileplus) + 10; command = (char *)CALLOC(nbytes, sizeof(char)); snprintf(command, nbytes, "cp %s %s", srcfile, newfile); ret = system(command); FREE(command); #else srcpath = genPathname(srcfile, NULL); newpath = genPathname(newfileplus, NULL); attributes = GetFileAttributes(newpath); if (attributes != INVALID_FILE_ATTRIBUTES && (attributes & FILE_ATTRIBUTE_DIRECTORY)) { if (splitPathAtDirectory(srcpath, NULL, &tail)) { FREE(srcpath); FREE(newpath); return ERROR_INT("Unable to split source filename into root & tail", procName, 1); } FREE(newpath); newpath = genPathname(newfileplus, tail); FREE(tail); } /* New file overwritten if it already exists */ ret = (CopyFile(srcpath, newpath, FALSE) ? 0 : 1); FREE(srcpath); FREE(newpath); #endif /* !_WIN32 */ FREE(newfileplus); return ret; } /*--------------------------------------------------------------------* * File name operations * *--------------------------------------------------------------------*/ /*! * splitPathAtDirectory() * * Input: pathname (full path; can be a directory) * &dir ( root directory name of * input path, including trailing '/') * &tail ( path tail, which is either * the file name within the root directory or * the last sub-directory in the path) * Return: 0 if OK, 1 on error * * Notes: * (1) If you only want the tail, input null for the root directory ptr. * (2) If you only want the root directory name, input null for the * tail ptr. * (3) This function makes decisions based only on the lexical * structure of the input. Examples: * /usr/tmp/abc --> dir: /usr/tmp/ tail: abc * /usr/tmp/ --> dir: /usr/tmp/ tail: [empty string] * /usr/tmp --> dir: /usr/ tail: tmp * abc --> dir: [empty string] tail: abc * (4) For unix, the input pathname must have unix directory * separators (i.e., forward slashes). For windows, we allow * both forward and backward slash separators, because Win32 * pathname functions generally accept either slash form. * Note, however, that the windows command line interpreter * only accepts backward slashes, because forward slashes are * used to demarcate switches (vs. dashes in unix). */ l_int32 splitPathAtDirectory(const char *pathname, char **pdir, char **ptail) { char *cpathname, *lastslash, *fwdslash; PROCNAME("splitPathAtDirectory"); if (!pdir && !ptail) return ERROR_INT("null input for both strings", procName, 1); if (pdir) *pdir = NULL; if (ptail) *ptail = NULL; if (!pathname) return ERROR_INT("pathname not defined", procName, 1); cpathname = stringNew(pathname); lastslash = strrchr(cpathname, path_sepchar); #ifdef _WIN32 /* allow both types of slash for win32 */ if ((fwdslash = strrchr(cpathname, '/')) != NULL) { if (lastslash) lastslash = L_MAX(lastslash, fwdslash); else lastslash = fwdslash; } #endif /* _WIN32 */ if (lastslash) { if (ptail) *ptail = stringNew(lastslash + 1); if (pdir) { *(lastslash + 1) = '\0'; *pdir = cpathname; } else { FREE(cpathname); } } else { /* no directory */ if (pdir) *pdir = stringNew(""); if (ptail) *ptail = cpathname; else FREE(cpathname); } return 0; } /*! * splitPathAtExtension() * * Input: pathname (full path; can be a directory) * &basename ( pathname not including the * last dot and characters after that) * &extension ( path extension, which is * the last dot and the characters after it. If * there is no extension, it returns the empty string) * Return: 0 if OK, 1 on error * * Notes: * (1) If you only want the extension, input null for the basename ptr. * (2) If you only want the basename without extension, input null * for the extension ptr. * (3) This function makes decisions based only on the lexical * structure of the input. Examples: * /usr/tmp/abc.jpg --> basename: /usr/tmp/abc ext: .jpg * /usr/tmp/.jpg --> basename: /usr/tmp/ ext: .jpg * /usr/tmp.jpg/ --> basename: /usr/tmp.jpg/ ext: [empty str] * ./.jpg --> basename: ./ ext: .jpg * (4) N.B. The input pathname must have unix directory separators * for unix and windows directory separators for windows. */ l_int32 splitPathAtExtension(const char *pathname, char **pbasename, char **pextension) { char *tail, *dir, *lastdot; char empty[4] = ""; PROCNAME("splitPathExtension"); if (!pbasename && !pextension) return ERROR_INT("null input for both strings", procName, 1); if (pbasename) *pbasename = NULL; if (pextension) *pextension = NULL; if (!pathname) return ERROR_INT("pathname not defined", procName, 1); /* Split out the directory first */ splitPathAtDirectory(pathname, &dir, &tail); /* Then look for a "." in the tail part. * This way we ignore all "." in the directory. */ if ((lastdot = strrchr(tail, '.'))) { if (pextension) *pextension = stringNew(lastdot); if (pbasename) { *lastdot = '\0'; *pbasename = stringJoin(dir, tail); } } else { if (pextension) *pextension = stringNew(empty); if (pbasename) *pbasename = stringNew(pathname); } FREE(dir); FREE(tail); return 0; } /*! * pathJoin() * * Input: dir ( can be null) * fname ( can be null) * Return: specially concatenated path, or null on error * * Notes: * (1) Use unix-style pathname separators ('/'). * (2) @fname can be the entire path, or part of the path containing * at least one directory, or a tail without a directory, or null. * (3) It produces a path that strips multiple slashes to a single * slash, joins @dir and @fname by a slash, and has no trailing * slashes (except in the cases where @dir == "/" and * @fname == NULL, or v.v.). * (4) If both @dir and @fname are null, produces an empty string. * (5) Neither @dir nor @fname can begin with '.'. * (6) The result is not canonicalized or tested for correctness: * garbage in (e.g., /&%), garbage out. * (7) Examples: * //tmp// + //abc/ --> /tmp/abc * tmp/ + /abc/ --> tmp/abc * tmp/ + abc/ --> tmp/abc * /tmp/ + /// --> /tmp * /tmp/ + NULL --> /tmp * // + /abc// --> /abc * // + NULL --> / * NULL + /abc/def/ --> /abc/def * NULL + abc// --> abc * NULL + // --> / * NULL + NULL --> (empty string) * "" + "" --> (empty string) * "" + / --> / * ".." + /etc/foo --> NULL * /tmp + ".." --> NULL */ char * pathJoin(const char *dir, const char *fname) { char *slash = (char *)"/"; char *str, *dest; l_int32 i, n1, n2, emptydir; size_t size; SARRAY *sa1, *sa2; L_BYTEA *ba; PROCNAME("pathJoin"); if (!dir && !fname) return stringNew(""); if (dir && dir[0] == '.') return (char *)ERROR_PTR("dir starts with '.'", procName, NULL); if (fname && fname[0] == '.') return (char *)ERROR_PTR("fname starts with '.'", procName, NULL); sa1 = sarrayCreate(0); sa2 = sarrayCreate(0); ba = l_byteaCreate(4); /* Process @dir */ if (dir && strlen(dir) > 0) { if (dir[0] == '/') l_byteaAppendString(ba, slash); sarraySplitString(sa1, dir, "/"); /* removes all slashes */ n1 = sarrayGetCount(sa1); for (i = 0; i < n1; i++) { str = sarrayGetString(sa1, i, L_NOCOPY); l_byteaAppendString(ba, str); l_byteaAppendString(ba, slash); } } /* Special case to add leading slash: dir NULL or empty string */ emptydir = dir && strlen(dir) == 0; if ((!dir || emptydir) && fname && strlen(fname) > 0 && fname[0] == '/') l_byteaAppendString(ba, slash); /* Process @fname */ if (fname && strlen(fname) > 0) { sarraySplitString(sa2, fname, "/"); n2 = sarrayGetCount(sa2); for (i = 0; i < n2; i++) { str = sarrayGetString(sa2, i, L_NOCOPY); l_byteaAppendString(ba, str); l_byteaAppendString(ba, slash); } } /* Remove trailing slash */ dest = (char *)l_byteaCopyData(ba, &size); if (size > 1 && dest[size - 1] == '/') dest[size - 1] = '\0'; sarrayDestroy(&sa1); sarrayDestroy(&sa2); l_byteaDestroy(&ba); return dest; } /*! * genPathname() * * Input: dir (directory name, with or without trailing '/') * fname ( file name within the directory) * Return: pathname (either a directory or full path), or null on error * * Notes: * (1) Use unix-style pathname separators ('/'). * (2) This function can be used in several ways: * * to generate a full path from a directory and a file name * * to convert a unix pathname to a windows pathname * * to convert from the unix '/tmp' directory to the * equivalent windows temp directory. * The windows name translation is: * /tmp --> /leptonica * (3) There are three cases for the input: * (a) @dir is a directory and @fname is null: result is a directory * (b) @dir is a full path and @fname is null: result is a full path * (c) @dir is a directory and @fname is defined: result is a full path * (4) In all cases, the resulting pathname is not terminated with a slash * (5) The caller is responsible for freeing the pathname. */ char * genPathname(const char *dir, const char *fname) { char *cdir, *pathout; l_int32 dirlen, namelen, size; #ifdef _WIN32 char dirt[MAX_PATH]; char *tempdir; l_int32 tdirlen; #endif /* _WIN32 */ PROCNAME("genPathname"); if (!dir) return (char *)ERROR_PTR("dir not defined", procName, NULL); /* Remove trailing slash in dir, except when dir == "/" */ cdir = stringNew(dir); dirlen = strlen(cdir); if (cdir[dirlen - 1] == '/' && dirlen != 1) { cdir[dirlen - 1] = '\0'; dirlen--; } namelen = (fname) ? strlen(fname) : 0; size = dirlen + namelen + 256; if ((pathout = (char *)CALLOC(size, sizeof(char))) == NULL) return (char *)ERROR_PTR("pathout not made", procName, NULL); #ifdef _WIN32 if (stringFindSubstr(cdir, "/", NULL) > 0) { tempdir = stringReplaceEachSubstr(cdir, "/", "\\", NULL); tdirlen = strlen(tempdir); if (strncmp(dir, "/tmp", 4) == 0) { /* get temp directory */ GetTempPath(sizeof(dirt), dirt); stringCopy(pathout, dirt, strlen(dirt) - 1); stringCat(pathout, size, "\\leptonica"); if (tdirlen > 4) stringCat(pathout, size, tempdir + 4); /* Set an extra null byte. Otherwise, when setting path_sepchar later, no trailing null byte remains. */ pathout[strlen(pathout) + 1] = '\0'; } else { stringCopy(pathout, tempdir, tdirlen); } FREE(tempdir); } else { /* no '/' characters; OK as is */ stringCopy(pathout, cdir, dirlen); } #else stringCopy(pathout, cdir, dirlen); #endif /* _WIN32 */ if (fname && strlen(fname) > 0) { dirlen = strlen(pathout); pathout[dirlen] = path_sepchar; /* append path_sepchar */ strncat(pathout, fname, namelen); } FREE(cdir); return pathout; } /*! * makeTempDirname() * * Input: result (preallocated and passed in) * nbytes (size of result array, in bytes) * subdir () * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a platform-specific (Unix or Windows) directory * name for output tempfiles, written into the char buffer @result. * (2) Caller must allocate @result on the stack. It must be large * enough to hold /lept/, where is "/tmp" on * unix and some other path on windows, determined by the windows * function GenTempPath(). For example, * char result[256]; * makeTempDirname(result, 256, "golden"); */ l_int32 makeTempDirname(char *result, size_t nbytes, const char *subdir) { #ifdef _WIN32 char dirt[MAX_PATH]; #endif /* _WIN32 */ PROCNAME("makeTempDirname"); if (!result) return ERROR_INT("result not defined", procName, 1); /* Start with directory */ #ifdef _WIN32 GetTempPath(sizeof(dirt), dirt); snprintf(result, nbytes, "%s\\", dirt); #else snprintf(result, nbytes, "%s", "/tmp/"); #endif /* _WIN32 */ /* Add standard subdirectory */ strcat(result, Lept_Subdir); /* Optionally add input subdirectory */ if (subdir) { #ifdef _WIN32 strcat(result, "\\"); #else strcat(result, "/"); #endif /* _WIN32 */ strcat(result, subdir); } return 0; } /*! * genTempFilename() * * Input: dir (directory name; use '.' for local dir; * no trailing '/' and @dir == "/" is invalid) * tail ( tailname, including extension if any; * can be null or empty but can't contain '/') * usetime (1 to include current time in microseconds in * the filename; 0 to omit. * usepid (1 to include pid in filename; 0 to omit. * Return: temp filename, or null on error * * Notes: * (1) This makes a filename that is as unique as desired, and which * can optionally include both the time and pid in the name. * (2) Use unix-style pathname separators ('/'). * (3) Specifying the root directory (@dir == "/") is invalid. * (4) Specifying a @tail containing '/' is invalid. * (5) The most general form (@usetime = @usepid = 1) is: *

/__ * When @usetime = 1, @usepid = 0, the output filename is: * /_ * When @usepid = 0, @usepid = 1, the output filename is: * /_ * When @usetime = @usepid = 0, the output filename is: * / * Note: It is not valid to have @tail = null or empty and have * both @usetime = @usepid = 0. That is, there must be * some non-empty tail name. * (6) N.B. The caller is responsible for freeing the returned filename. * For windows, to avoid C-runtime boundary crossing problems * when using DLLs, you must use lept_free() to free the name. * (7) For windows, if the caller requests the directory '/tmp', * this uses GetTempPath() to select the actual directory, * avoiding platform-conditional code in use. The directory * selected is /leptonica, where is the Windows * temp directory. * (8) Set @usetime = @usepid = 1 when * (a) more than one process is writing and reading temp files, or * (b) multiple threads from a single process call this function, or * (c) there is the possiblity of an attack where the intruder * is logged onto the server and might try to guess filenames. */ char * genTempFilename(const char *dir, const char *tail, l_int32 usetime, l_int32 usepid) { char buf[256]; l_int32 i, buflen, usec, pid, emptytail; #ifdef _WIN32 char *newpath; l_uint32 attributes; l_int32 ret; #endif /* !_WIN32 */ PROCNAME("genTempFilename"); if (!dir) return (char *)ERROR_PTR("dir not defined", procName, NULL); if (dir && strlen(dir) == 1 && dir[0] == '/') return (char *)ERROR_PTR("dir == '/' not permitted", procName, NULL); if (tail && strlen(tail) > 0 && stringFindSubstr(tail, "/", NULL)) return (char *)ERROR_PTR("tail can't contain '/'", procName, NULL); emptytail = tail && (strlen(tail) == 0); if (!usetime && !usepid && (!tail || emptytail)) return (char *)ERROR_PTR("name can't be a directory", procName, NULL); if (usepid) pid = getpid(); buflen = sizeof(buf); for (i = 0; i < buflen; i++) buf[i] = 0; l_getCurrentTime(NULL, &usec); #ifdef _WIN32 { /* do not assume /tmp exists */ char dirt[MAX_PATH]; if (!strcmp(dir, "/tmp")) { GetTempPath(sizeof(dirt), dirt); stringCat(dirt, sizeof(dirt), "leptonica\\"); /* Make sure the leptonica subdir exists in tmp dir */ newpath = genPathname("/tmp", NULL); attributes = GetFileAttributes(newpath); if (attributes == INVALID_FILE_ATTRIBUTES) { ret = (CreateDirectory(newpath, NULL) ? 0 : 1); } FREE(newpath); } else { snprintf(dirt, sizeof(dirt), "%s\\", dir); /* add trailing '\' */ } if (usetime && usepid) snprintf(buf, buflen, "%s%d_%d_", dirt, usec, pid); else if (usetime) snprintf(buf, buflen, "%s%d_", dirt, usec); else if (usepid) snprintf(buf, buflen, "%s%d_", dirt, pid); else snprintf(buf, buflen, "%s", dirt); } #else if (usetime && usepid) snprintf(buf, buflen, "%s/%d_%d_", dir, usec, pid); else if (usetime) snprintf(buf, buflen, "%s/%d_", dir, usec); else if (usepid) snprintf(buf, buflen, "%s/%d_", dir, pid); else snprintf(buf, buflen, "%s/", dir); #endif return stringJoin(buf, tail); } /*! * extractNumberFromFilename() * * Input: fname * numpre (number of characters before the digits to be found) * numpost (number of characters after the digits to be found) * Return: num (number embedded in the filename); -1 on error or if * not found * * Notes: * (1) The number is to be found in the basename, which is the * filename without either the directory or the last extension. * (2) When a number is found, it is non-negative. If no number * is found, this returns -1, without an error message. The * caller needs to check. */ l_int32 extractNumberFromFilename(const char *fname, l_int32 numpre, l_int32 numpost) { char *tail, *basename; l_int32 len, nret, num; PROCNAME("extractNumberFromFilename"); if (!fname) return ERROR_INT("fname not defined", procName, -1); splitPathAtDirectory(fname, NULL, &tail); splitPathAtExtension(tail, &basename, NULL); FREE(tail); len = strlen(basename); if (numpre + numpost > len - 1) { FREE(basename); return ERROR_INT("numpre + numpost too big", procName, -1); } basename[len - numpost] = '\0'; nret = sscanf(basename + numpre, "%d", &num); FREE(basename); if (nret == 1) return num; else return -1; /* not found */ } /*---------------------------------------------------------------------* * File corruption operation * *---------------------------------------------------------------------*/ /*! * fileCorruptByDeletion() * * Input: filein * loc (fractional location of start of deletion) * size (fractional size of deletion) * fileout (corrupted file) * Return: 0 if OK, 1 on error * * Notes: * (1) This is useful for testing robustness of I/O wrappers with image * file corruption. * (2) Deletion size adjusts automatically to avoid array transgressions. */ l_int32 fileCorruptByDeletion(const char *filein, l_float32 loc, l_float32 size, const char *fileout) { l_int32 i, locb, sizeb, rembytes; size_t inbytes, outbytes; l_uint8 *datain, *dataout; PROCNAME("fileCorruptByDeletion"); if (!filein || !fileout) return ERROR_INT("filein and fileout not both specified", procName, 1); if (loc < 0.0 || loc >= 1.0) return ERROR_INT("loc must be in [0.0 ... 1.0)", procName, 1); if (size <= 0.0) return ERROR_INT("size must be > 0.0", procName, 1); if (loc + size > 1.0) size = 1.0 - loc; datain = l_binaryRead(filein, &inbytes); locb = (l_int32)(loc * inbytes + 0.5); locb = L_MIN(locb, inbytes - 1); sizeb = (l_int32)(size * inbytes + 0.5); sizeb = L_MAX(1, sizeb); sizeb = L_MIN(sizeb, inbytes - locb); /* >= 1 */ L_INFO("Removed %d bytes at location %d\n", procName, sizeb, locb); rembytes = inbytes - locb - sizeb; /* >= 0; to be copied, after excision */ outbytes = inbytes - sizeb; dataout = (l_uint8 *)CALLOC(outbytes, 1); for (i = 0; i < locb; i++) dataout[i] = datain[i]; for (i = 0; i < rembytes; i++) dataout[locb + i] = datain[locb + sizeb + i]; l_binaryWrite(fileout, "w", dataout, outbytes); FREE(datain); FREE(dataout); return 0; } /*---------------------------------------------------------------------* * Generate random integer in given range * *---------------------------------------------------------------------*/ /*! * genRandomIntegerInRange() * * Input: range (size of range; must be >= 2) * seed (use 0 to skip; otherwise call srand) * val ( random integer in range {0 ... range-1} * Return: 0 if OK, 1 on error * * Notes: * (1) For example, to choose a rand integer between 0 and 99, * use @range = 100. */ l_int32 genRandomIntegerInRange(l_int32 range, l_int32 seed, l_int32 *pval) { PROCNAME("genRandomIntegerInRange"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0; if (range < 2) return ERROR_INT("range must be >= 2", procName, 1); if (seed > 0) srand(seed); *pval = (l_int32)((l_float64)range * ((l_float64)rand() / (l_float64)RAND_MAX)); return 0; } /*---------------------------------------------------------------------* * Simple math function * *---------------------------------------------------------------------*/ /*! * lept_roundftoi() * * Input: fval * Return: value rounded to int * * Notes: * (1) For fval >= 0, fval --> round(fval) == floor(fval + 0.5) * For fval < 0, fval --> -round(-fval)) * This is symmetric around 0. * e.g., for fval in (-0.5 ... 0.5), fval --> 0 */ l_int32 lept_roundftoi(l_float32 fval) { return (fval >= 0.0) ? (l_int32)(fval + 0.5) : (l_int32)(fval - 0.5); } /*---------------------------------------------------------------------* * Gray code conversion * *---------------------------------------------------------------------*/ /*! * convertBinaryToGrayCode() * * Input: val * Return: gray code value * * Notes: * (1) Gray code values corresponding to integers differ by * only one bit transition between successive integers. */ l_uint32 convertBinaryToGrayCode(l_uint32 val) { return (val >> 1) ^ val; } /*! * convertGrayCodeToBinary() * * Input: gray code value * Return: binary value */ l_uint32 convertGrayCodeToBinary(l_uint32 val) { l_uint32 shift; for (shift = 1; shift < 32; shift <<= 1) val ^= val >> shift; return val; } /*---------------------------------------------------------------------* * Leptonica version number * *---------------------------------------------------------------------*/ /*! * getLeptonicaVersion() * * Return: string of version number (e.g., 'leptonica-1.68') * * Notes: * (1) The caller has responsibility to free the memory. */ char * getLeptonicaVersion() { char *version = (char *)CALLOC(100, sizeof(char)); #ifdef _MSC_VER #ifdef _USRDLL char dllStr[] = "DLL"; #else char dllStr[] = "LIB"; #endif #ifdef _DEBUG char debugStr[] = "Debug"; #else char debugStr[] = "Release"; #endif #ifdef _M_IX86 char bitStr[] = " x86"; #elif _M_X64 char bitStr[] = " x64"; #else char bitStr[] = ""; #endif snprintf(version, 100, "leptonica-%d.%d (%s, %s) [MSC v.%d %s %s%s]", LIBLEPT_MAJOR_VERSION, LIBLEPT_MINOR_VERSION, __DATE__, __TIME__, _MSC_VER, dllStr, debugStr, bitStr); #else snprintf(version, 100, "leptonica-%d.%d", LIBLEPT_MAJOR_VERSION, LIBLEPT_MINOR_VERSION); #endif /* _MSC_VER */ return version; } /*---------------------------------------------------------------------* * Timing procs * *---------------------------------------------------------------------*/ #ifndef _WIN32 #include #include static struct rusage rusage_before; static struct rusage rusage_after; /*! * startTimer(), stopTimer() * * Example of usage: * * startTimer(); * .... * fprintf(stderr, "Elapsed time = %7.3f sec\n", stopTimer()); */ void startTimer(void) { getrusage(RUSAGE_SELF, &rusage_before); } l_float32 stopTimer(void) { l_int32 tsec, tusec; getrusage(RUSAGE_SELF, &rusage_after); tsec = rusage_after.ru_utime.tv_sec - rusage_before.ru_utime.tv_sec; tusec = rusage_after.ru_utime.tv_usec - rusage_before.ru_utime.tv_usec; return (tsec + ((l_float32)tusec) / 1000000.0); } /*! * startTimerNested(), stopTimerNested() * * Example of usage: * * L_TIMER t1 = startTimerNested(); * .... * L_TIMER t2 = startTimerNested(); * .... * fprintf(stderr, "Elapsed time 2 = %7.3f sec\n", stopTimerNested(t2)); * .... * fprintf(stderr, "Elapsed time 1 = %7.3f sec\n", stopTimerNested(t1)); */ L_TIMER startTimerNested(void) { struct rusage *rusage_start; rusage_start = (struct rusage *)CALLOC(1, sizeof(struct rusage)); getrusage(RUSAGE_SELF, rusage_start); return rusage_start; } l_float32 stopTimerNested(L_TIMER rusage_start) { l_int32 tsec, tusec; struct rusage rusage_stop; getrusage(RUSAGE_SELF, &rusage_stop); tsec = rusage_stop.ru_utime.tv_sec - ((struct rusage *)rusage_start)->ru_utime.tv_sec; tusec = rusage_stop.ru_utime.tv_usec - ((struct rusage *)rusage_start)->ru_utime.tv_usec; FREE(rusage_start); return (tsec + ((l_float32)tusec) / 1000000.0); } /*! * l_getCurrentTime() * * Input: &sec ( in seconds since birth of Unix) * &usec ( in microseconds since birth of Unix) * Return: void */ void l_getCurrentTime(l_int32 *sec, l_int32 *usec) { struct timeval tv; gettimeofday(&tv, NULL); if (sec) *sec = (l_int32)tv.tv_sec; if (usec) *usec = (l_int32)tv.tv_usec; return; } #else /* _WIN32 : resource.h not implemented under Windows */ /* Note: if division by 10^7 seems strange, the time is expressed * as the number of 100-nanosecond intervals that have elapsed * since 12:00 A.M. January 1, 1601. */ static ULARGE_INTEGER utime_before; static ULARGE_INTEGER utime_after; void startTimer(void) { HANDLE this_process; FILETIME start, stop, kernel, user; this_process = GetCurrentProcess(); GetProcessTimes(this_process, &start, &stop, &kernel, &user); utime_before.LowPart = user.dwLowDateTime; utime_before.HighPart = user.dwHighDateTime; } l_float32 stopTimer(void) { HANDLE this_process; FILETIME start, stop, kernel, user; ULONGLONG hnsec; /* in units of hecto-nanosecond (100 ns) intervals */ this_process = GetCurrentProcess(); GetProcessTimes(this_process, &start, &stop, &kernel, &user); utime_after.LowPart = user.dwLowDateTime; utime_after.HighPart = user.dwHighDateTime; hnsec = utime_after.QuadPart - utime_before.QuadPart; return (l_float32)(signed)hnsec / 10000000.0; } L_TIMER startTimerNested(void) { HANDLE this_process; FILETIME start, stop, kernel, user; ULARGE_INTEGER *utime_start; this_process = GetCurrentProcess(); GetProcessTimes (this_process, &start, &stop, &kernel, &user); utime_start = (ULARGE_INTEGER *)CALLOC(1, sizeof(ULARGE_INTEGER)); utime_start->LowPart = user.dwLowDateTime; utime_start->HighPart = user.dwHighDateTime; return utime_start; } l_float32 stopTimerNested(L_TIMER utime_start) { HANDLE this_process; FILETIME start, stop, kernel, user; ULARGE_INTEGER utime_stop; ULONGLONG hnsec; /* in units of 100 ns intervals */ this_process = GetCurrentProcess (); GetProcessTimes (this_process, &start, &stop, &kernel, &user); utime_stop.LowPart = user.dwLowDateTime; utime_stop.HighPart = user.dwHighDateTime; hnsec = utime_stop.QuadPart - ((ULARGE_INTEGER *)utime_start)->QuadPart; FREE(utime_start); return (l_float32)(signed)hnsec / 10000000.0; } void l_getCurrentTime(l_int32 *sec, l_int32 *usec) { ULARGE_INTEGER utime, birthunix; FILETIME systemtime; LONGLONG birthunixhnsec = 116444736000000000; /*in units of 100 ns */ LONGLONG usecs; GetSystemTimeAsFileTime(&systemtime); utime.LowPart = systemtime.dwLowDateTime; utime.HighPart = systemtime.dwHighDateTime; birthunix.LowPart = (DWORD) birthunixhnsec; birthunix.HighPart = birthunixhnsec >> 32; usecs = (LONGLONG) ((utime.QuadPart - birthunix.QuadPart) / 10); if (sec) *sec = (l_int32) (usecs / 1000000); if (usec) *usec = (l_int32) (usecs % 1000000); return; } #endif /*! * l_getFormattedDate() * * Input: (none) * Return: formatted date string, or null on error */ char * l_getFormattedDate() { char buf[64]; time_t tmp1; struct tm *tmp2; tmp1 = time(NULL); tmp2 = localtime(&tmp1); strftime(buf, sizeof(buf), "%y%m%d%H%M%S", tmp2); return stringNew(buf); } leptonica-1.70/src/fliphmtgen.c0000644000175000017500000003164612244234577014621 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * fliphmtgen.c * * DWA implementation of hit-miss transforms with auto-generated sels * for pixOrientDetectDwa() and pixUpDownDetectDwa() in flipdetect.c * * PIX *pixFlipFHMTGen() * static l_int32 flipfhmtgen_low() -- dispatcher * static void fhmt_1_0() * static void fhmt_1_1() * static void fhmt_1_2() * static void fhmt_1_3() * * The code (rearranged) was generated by prog/flipselgen.c */ #include #include "allheaders.h" static l_int32 NUM_SELS_GENERATED = 4; static char SEL_NAMES[][10] = {"flipsel1", "flipsel2", "flipsel3", "flipsel4"}; static l_int32 flipfhmtgen_low(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32, l_int32); static void fhmt_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fhmt_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Top-level hmt functions * *---------------------------------------------------------------------*/ /* * pixFlipFHMTGen() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs * sel name (one of four defined in SEL_NAMES[]) * Return: pixd * * Action: hit-miss transform on pixs by the sel * N.B.: the sel must have at least one hit, and it * can have any number of misses. */ PIX * pixFlipFHMTGen(PIX *pixd, PIX *pixs, char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; PROCNAME("pixFlipFHMTGen"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (pixd) { if (!pixSizesEqual(pixs, pixd)) return (PIX *)ERROR_PTR("sizes not equal", procName, pixd); } else { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with ADDED_BORDER white pixels, * that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 2 * ADDED_BORDER; h = pixGetHeight(pixs) - 2 * ADDED_BORDER; datas = pixGetData(pixs) + ADDED_BORDER * wpls + ADDED_BORDER / 32; datad = pixGetData(pixd) + ADDED_BORDER * wpld + ADDED_BORDER / 32; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + ADDED_BORDER * wpls + ADDED_BORDER / 32; flipfhmtgen_low(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* simple and not in-place */ flipfhmtgen_low(datad, w, h, wpld, datas, wpls, index); } return pixd; } /*---------------------------------------------------------------------* * Fast hmt dispatcher * *---------------------------------------------------------------------*/ /* * flipfhmtgen_low() * * A dispatcher to appropriate low-level code for flip hmt ops */ static l_int32 flipfhmtgen_low(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fhmt_1_0(datad, w, h, wpld, datas, wpls); break; case 1: fhmt_1_1(datad, w, h, wpld, datas, wpls); break; case 2: fhmt_1_2(datad, w, h, wpld, datas, wpls); break; case 3: fhmt_1_3(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated hmt routines * *--------------------------------------------------------------------------*/ /* * N.B. in all the low-level routines, the part of the image * that is accessed has been clipped by ADDED_BORDER pixels * on all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fhmt_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & (~*(sptr - wpls)) & ((~*(sptr - wpls) << 1) | (~*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & (~*(sptr + wpls)) & ((*(sptr + wpls2) >> 3) | (*(sptr + wpls2 - 1) << 29)) & ((*(sptr + wpls3) >> 3) | (*(sptr + wpls3 - 1) << 29)) & ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & (*(sptr + wpls3)) & ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)); } } } static void fhmt_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((~*(sptr - wpls) >> 1) | (~*(sptr - wpls - 1) << 31)) & (~*(sptr - wpls)) & ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & (~*(sptr + wpls)) & ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)) & ((*(sptr + wpls2) << 3) | (*(sptr + wpls2 + 1) >> 29)) & ((*(sptr + wpls3) >> 2) | (*(sptr + wpls3 - 1) << 30)) & ((*(sptr + wpls3) >> 1) | (*(sptr + wpls3 - 1) << 31)) & (*(sptr + wpls3)) & ((*(sptr + wpls3) << 1) | (*(sptr + wpls3 + 1) >> 31)) & ((*(sptr + wpls3) << 2) | (*(sptr + wpls3 + 1) >> 30)) & ((*(sptr + wpls3) << 3) | (*(sptr + wpls3 + 1) >> 29)); } } } static void fhmt_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls3) >> 3) | (*(sptr - wpls3 - 1) << 29)) & ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & (*(sptr - wpls3)) & ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & ((*(sptr - wpls2) >> 3) | (*(sptr - wpls2 - 1) << 29)) & ((*(sptr - wpls) >> 3) | (*(sptr - wpls - 1) << 29)) & (~*(sptr - wpls)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 3) | (*(sptr + wpls - 1) << 29)) & (~*(sptr + wpls)) & ((~*(sptr + wpls) << 1) | (~*(sptr + wpls + 1) >> 31)); } } } static void fhmt_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls3) >> 2) | (*(sptr - wpls3 - 1) << 30)) & ((*(sptr - wpls3) >> 1) | (*(sptr - wpls3 - 1) << 31)) & (*(sptr - wpls3)) & ((*(sptr - wpls3) << 1) | (*(sptr - wpls3 + 1) >> 31)) & ((*(sptr - wpls3) << 2) | (*(sptr - wpls3 + 1) >> 30)) & ((*(sptr - wpls3) << 3) | (*(sptr - wpls3 + 1) >> 29)) & ((*(sptr - wpls2) << 3) | (*(sptr - wpls2 + 1) >> 29)) & (~*(sptr - wpls)) & ((*(sptr - wpls) << 3) | (*(sptr - wpls + 1) >> 29)) & ((~*(sptr) >> 1) | (~*(sptr - 1) << 31)) & (~*sptr) & ((~*(sptr) << 1) | (~*(sptr + 1) >> 31)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((~*(sptr + wpls) >> 1) | (~*(sptr + wpls - 1) << 31)) & (~*(sptr + wpls)) & ((*(sptr + wpls) << 3) | (*(sptr + wpls + 1) >> 29)); } } } leptonica-1.70/src/pix5.c0000644000175000017500000024754312244226115013343 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pix5.c * * This file has these operations: * * (1) Measurement of 1 bpp image properties * (2) Extract rectangular regions * (3) Clip to foreground * (4) Extract pixel averages, reversals and variance along lines * (5) Rank row and column transforms * * Measurement of properties * l_int32 pixaFindDimensions() * l_int32 pixFindAreaPerimRatio() * NUMA *pixaFindPerimToAreaRatio() * l_int32 pixFindPerimToAreaRatio() * NUMA *pixaFindPerimSizeRatio() * l_int32 pixFindPerimSizeRatio() * NUMA *pixaFindAreaFraction() * l_int32 pixFindAreaFraction() * NUMA *pixaFindAreaFractionMasked() * l_int32 pixFindAreaFractionMasked() * NUMA *pixaFindWidthHeightRatio() * NUMA *pixaFindWidthHeightProduct() * l_int32 pixFindOverlapFraction() * BOXA *pixFindRectangleComps() * l_int32 pixConformsToRectangle() * * Extract rectangular region * PIXA *pixClipRectangles() * PIX *pixClipRectangle() * PIX *pixClipMasked() * l_int32 pixCropToMatch() * PIX *pixCropToSize() * PIX *pixResizeToMatch() * * Clip to foreground * PIX *pixClipToForeground() * l_int32 pixTestClipToForeground() * l_int32 pixClipBoxToForeground() * l_int32 pixScanForForeground() * l_int32 pixClipBoxToEdges() * l_int32 pixScanForEdge() * * Extract pixel averages and reversals along lines * NUMA *pixExtractOnLine() * l_float32 pixAverageOnLine() * NUMA *pixAverageIntensityProfile() * NUMA *pixReversalProfile() * * Extract windowed variance along a line * NUMA *pixWindowedVarianceOnLine() * * Extract min/max of pixel values near lines * l_int32 pixMinMaxNearLine() * * Rank row and column transforms * PIX *pixRankRowTransform() * PIX *pixRankColumnTransform() */ #include #include #include "allheaders.h" static const l_uint32 rmask32[] = {0x0, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff, 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff, 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff, 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff, 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff}; #ifndef NO_CONSOLE_IO #define DEBUG_EDGES 0 #endif /* ~NO_CONSOLE_IO */ /*-------------------------------------------------------------* * Measurement of properties * *-------------------------------------------------------------*/ /*! * pixaFindDimensions() * * Input: pixa * &naw ( numa of pix widths) * &nah ( numa of pix heights) * Return: 0 if OK, 1 on error */ l_int32 pixaFindDimensions(PIXA *pixa, NUMA **pnaw, NUMA **pnah) { l_int32 i, n, w, h; PIX *pixt; PROCNAME("pixaFindDimensions"); if (!pixa) return ERROR_INT("pixa not defined", procName, 1); if (!pnaw && !pnah) return 0; n = pixaGetCount(pixa); if (pnaw) *pnaw = numaCreate(n); if (pnah) *pnah = numaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); if (pnaw) numaAddNumber(*pnaw, w); if (pnah) numaAddNumber(*pnah, h); pixDestroy(&pixt); } return 0; } /*! * pixFindAreaPerimRatio() * * Input: pixs (1 bpp) * tab ( pixel sum table, can be NULL) * &fract ( area/perimeter ratio) * Return: 0 if OK, 1 on error * * Notes: * (1) The area is the number of fg pixels that are not on the * boundary (i.e., are not 8-connected to a bg pixel), and the * perimeter is the number of fg boundary pixels. Returns * 0.0 if there are no fg pixels. * (2) This function is retained because clients are using it. */ l_int32 pixFindAreaPerimRatio(PIX *pixs, l_int32 *tab, l_float32 *pfract) { l_int32 *tab8; l_int32 nfg, nbound; PIX *pixt; PROCNAME("pixFindAreaPerimRatio"); if (!pfract) return ERROR_INT("&fract not defined", procName, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixt = pixErodeBrick(NULL, pixs, 3, 3); pixCountPixels(pixt, &nfg, tab8); if (nfg == 0) { pixDestroy(&pixt); if (!tab) FREE(tab8); return 0; } pixXor(pixt, pixt, pixs); pixCountPixels(pixt, &nbound, tab8); *pfract = (l_float32)nfg / (l_float32)nbound; pixDestroy(&pixt); if (!tab) FREE(tab8); return 0; } /*! * pixaFindPerimToAreaRatio() * * Input: pixa (of 1 bpp pix) * Return: na (of perimeter/arear ratio for each pix), or null on error * * Notes: * (1) This is typically used for a pixa consisting of * 1 bpp connected components. */ NUMA * pixaFindPerimToAreaRatio(PIXA *pixa) { l_int32 i, n; l_int32 *tab; l_float32 fract; NUMA *na; PIX *pixt; PROCNAME("pixaFindPerimToAreaRatio"); if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixFindPerimToAreaRatio(pixt, tab, &fract); numaAddNumber(na, fract); pixDestroy(&pixt); } FREE(tab); return na; } /*! * pixFindPerimToAreaRatio() * * Input: pixs (1 bpp) * tab ( pixel sum table, can be NULL) * &fract ( perimeter/area ratio) * Return: 0 if OK, 1 on error * * Notes: * (1) The perimeter is the number of fg boundary pixels, and the * area is the number of fg pixels. This returns 0.0 if * there are no fg pixels. * (2) Unlike pixFindAreaPerimRatio(), this uses the full set of * fg pixels for the area, and the ratio is taken in the opposite * order. * (3) This is typically used for a single connected component. * This always has a value <= 1.0, and if the average distance * of a fg pixel from the nearest bg pixel is d, this has * a value ~1/d. */ l_int32 pixFindPerimToAreaRatio(PIX *pixs, l_int32 *tab, l_float32 *pfract) { l_int32 *tab8; l_int32 nfg, nbound; PIX *pixt; PROCNAME("pixFindPerimToAreaRatio"); if (!pfract) return ERROR_INT("&fract not defined", procName, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixCountPixels(pixs, &nfg, tab8); if (nfg == 0) { if (!tab) FREE(tab8); return 0; } pixt = pixErodeBrick(NULL, pixs, 3, 3); pixXor(pixt, pixt, pixs); pixCountPixels(pixt, &nbound, tab8); *pfract = (l_float32)nbound / (l_float32)nfg; pixDestroy(&pixt); if (!tab) FREE(tab8); return 0; } /*! * pixaFindPerimSizeRatio() * * Input: pixa (of 1 bpp pix) * Return: na (of fg perimeter/(2*(w+h)) ratio for each pix), * or null on error * * Notes: * (1) This is typically used for a pixa consisting of * 1 bpp connected components. * (2) This has a minimum value for a circle of pi/4; a value for * a rectangle component of approx. 1.0; and a value much larger * than 1.0 for a component with a highly irregular boundary. */ NUMA * pixaFindPerimSizeRatio(PIXA *pixa) { l_int32 i, n; l_int32 *tab; l_float32 ratio; NUMA *na; PIX *pixt; PROCNAME("pixaFindPerimSizeRatio"); if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixFindPerimSizeRatio(pixt, tab, &ratio); numaAddNumber(na, ratio); pixDestroy(&pixt); } FREE(tab); return na; } /*! * pixFindPerimSizeRatio() * * Input: pixs (1 bpp) * tab ( pixel sum table, can be NULL) * &ratio ( perimeter/size ratio) * Return: 0 if OK, 1 on error * * Notes: * (1) We take the 'size' as twice the sum of the width and * height of pixs, and the perimeter is the number of fg * boundary pixels. We use the fg pixels of the boundary * because the pix may be clipped to the boundary, so an * erosion is required to count all boundary pixels. * (2) This has a large value for dendritic, fractal-like components * with highly irregular boundaries. * (3) This is typically used for a single connected component. * It has a value of about 1.0 for rectangular components with * relatively smooth boundaries. */ l_int32 pixFindPerimSizeRatio(PIX *pixs, l_int32 *tab, l_float32 *pratio) { l_int32 *tab8; l_int32 w, h, nbound; PIX *pixt; PROCNAME("pixFindPerimSizeRatio"); if (!pratio) return ERROR_INT("&ratio not defined", procName, 1); *pratio = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixt = pixErodeBrick(NULL, pixs, 3, 3); pixXor(pixt, pixt, pixs); pixCountPixels(pixt, &nbound, tab8); pixGetDimensions(pixs, &w, &h, NULL); *pratio = (0.5 * nbound) / (l_float32)(w + h); pixDestroy(&pixt); if (!tab) FREE(tab8); return 0; } /*! * pixaFindAreaFraction() * * Input: pixa (of 1 bpp pix) * Return: na (of area fractions for each pix), or null on error * * Notes: * (1) This is typically used for a pixa consisting of * 1 bpp connected components. */ NUMA * pixaFindAreaFraction(PIXA *pixa) { l_int32 i, n; l_int32 *tab; l_float32 fract; NUMA *na; PIX *pixt; PROCNAME("pixaFindAreaFraction"); if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixFindAreaFraction(pixt, tab, &fract); numaAddNumber(na, fract); pixDestroy(&pixt); } FREE(tab); return na; } /*! * pixFindAreaFraction() * * Input: pixs (1 bpp) * tab ( pixel sum table, can be NULL) * &fract ( fg area/size ratio) * Return: 0 if OK, 1 on error * * Notes: * (1) This finds the ratio of the number of fg pixels to the * size of the pix (w * h). It is typically used for a * single connected component. */ l_int32 pixFindAreaFraction(PIX *pixs, l_int32 *tab, l_float32 *pfract) { l_int32 w, h, sum; l_int32 *tab8; PROCNAME("pixFindAreaFraction"); if (!pfract) return ERROR_INT("&fract not defined", procName, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixGetDimensions(pixs, &w, &h, NULL); pixCountPixels(pixs, &sum, tab8); *pfract = (l_float32)sum / (l_float32)(w * h); if (!tab) FREE(tab8); return 0; } /*! * pixaFindAreaFractionMasked() * * Input: pixa (of 1 bpp pix) * pixm (mask image) * debug (1 for output, 0 to suppress) * Return: na (of ratio masked/total fractions for each pix), * or null on error * * Notes: * (1) This is typically used for a pixa consisting of * 1 bpp connected components, which has an associated * boxa giving the location of the components relative * to the mask origin. * (2) The debug flag displays in green and red the masked and * unmasked parts of the image from which pixa was derived. */ NUMA * pixaFindAreaFractionMasked(PIXA *pixa, PIX *pixm, l_int32 debug) { l_int32 i, n, full; l_int32 *tab; l_float32 fract; BOX *box; NUMA *na; PIX *pix; PROCNAME("pixaFindAreaFractionMasked"); if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); if (!pixm || pixGetDepth(pixm) != 1) return (NUMA *)ERROR_PTR("pixm undefined or not 1 bpp", procName, NULL); n = pixaGetCount(pixa); na = numaCreate(n); tab = makePixelSumTab8(); pixaIsFull(pixa, NULL, &full); /* check boxa */ box = NULL; for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); if (full) box = pixaGetBox(pixa, i, L_CLONE); pixFindAreaFractionMasked(pix, box, pixm, tab, &fract); numaAddNumber(na, fract); boxDestroy(&box); pixDestroy(&pix); } FREE(tab); if (debug) { l_int32 w, h; PIX *pix1, *pix2; pixGetDimensions(pixm, &w, &h, NULL); pix1 = pixaDisplay(pixa, w, h); /* recover original image */ pix2 = pixCreate(w, h, 8); /* make an 8 bpp white image ... */ pixSetColormap(pix2, pixcmapCreate(8)); /* that's cmapped ... */ pixSetBlackOrWhite(pix2, L_SET_WHITE); /* and init to white */ pixSetMaskedCmap(pix2, pix1, 0, 0, 255, 0, 0); /* color all fg red */ pixRasterop(pix1, 0, 0, w, h, PIX_MASK, pixm, 0, 0); pixSetMaskedCmap(pix2, pix1, 0, 0, 0, 255, 0); /* turn masked green */ pixDisplay(pix2, 100, 100); pixDestroy(&pix1); pixDestroy(&pix2); } return na; } /*! * pixFindAreaFractionMasked() * * Input: pixs (1 bpp, typically a single component) * box ( for pixs relative to pixm) * pixm (1 bpp mask, typically over the entire image from * which the component pixs was extracted) * tab ( pixel sum table, can be NULL) * &fract ( fg area/size ratio) * Return: 0 if OK, 1 on error * * Notes: * (1) This finds the ratio of the number of masked fg pixels * in pixs to the total number of fg pixels in pixs. * It is typically used for a single connected component. * If there are no fg pixels, this returns a ratio of 0.0. * (2) The box gives the location of the pix relative to that * of the UL corner of the mask. Therefore, the rasterop * is performed with the pix translated to its location * (x, y) in the mask before ANDing. * If box == NULL, the UL corners of pixs and pixm are aligned. */ l_int32 pixFindAreaFractionMasked(PIX *pixs, BOX *box, PIX *pixm, l_int32 *tab, l_float32 *pfract) { l_int32 x, y, w, h, sum, masksum; l_int32 *tab8; PIX *pix1; PROCNAME("pixFindAreaFractionMasked"); if (!pfract) return ERROR_INT("&fract not defined", procName, 1); *pfract = 0.0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!pixm || pixGetDepth(pixm) != 1) return ERROR_INT("pixm not defined or not 1 bpp", procName, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; x = y = 0; if (box) boxGetGeometry(box, &x, &y, NULL, NULL); pixGetDimensions(pixs, &w, &h, NULL); pix1 = pixCopy(NULL, pixs); pixRasterop(pix1, 0, 0, w, h, PIX_MASK, pixm, x, y); pixCountPixels(pixs, &sum, tab8); if (sum == 0) { pixDestroy(&pix1); if (!tab) FREE(tab8); return 0; } pixCountPixels(pix1, &masksum, tab8); *pfract = (l_float32)masksum / (l_float32)sum; if (!tab) FREE(tab8); pixDestroy(&pix1); return 0; } /*! * pixaFindWidthHeightRatio() * * Input: pixa (of 1 bpp pix) * Return: na (of width/height ratios for each pix), or null on error * * Notes: * (1) This is typically used for a pixa consisting of * 1 bpp connected components. */ NUMA * pixaFindWidthHeightRatio(PIXA *pixa) { l_int32 i, n, w, h; NUMA *na; PIX *pixt; PROCNAME("pixaFindWidthHeightRatio"); if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); n = pixaGetCount(pixa); na = numaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); numaAddNumber(na, (l_float32)w / (l_float32)h); pixDestroy(&pixt); } return na; } /*! * pixaFindWidthHeightProduct() * * Input: pixa (of 1 bpp pix) * Return: na (of width*height products for each pix), or null on error * * Notes: * (1) This is typically used for a pixa consisting of * 1 bpp connected components. */ NUMA * pixaFindWidthHeightProduct(PIXA *pixa) { l_int32 i, n, w, h; NUMA *na; PIX *pixt; PROCNAME("pixaFindWidthHeightProduct"); if (!pixa) return (NUMA *)ERROR_PTR("pixa not defined", procName, NULL); n = pixaGetCount(pixa); na = numaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pixt, &w, &h, NULL); numaAddNumber(na, w * h); pixDestroy(&pixt); } return na; } /*! * pixFindOverlapFraction() * * Input: pixs1, pixs2 (1 bpp) * x2, y2 (location in pixs1 of UL corner of pixs2) * tab ( pixel sum table, can be null) * &ratio ( ratio fg intersection to fg union) * &noverlap ( number of overlapping pixels) * Return: 0 if OK, 1 on error * * Notes: * (1) The UL corner of pixs2 is placed at (x2, y2) in pixs1. * (2) This measure is similar to the correlation. */ l_int32 pixFindOverlapFraction(PIX *pixs1, PIX *pixs2, l_int32 x2, l_int32 y2, l_int32 *tab, l_float32 *pratio, l_int32 *pnoverlap) { l_int32 *tab8; l_int32 w, h, nintersect, nunion; PIX *pixt; PROCNAME("pixFindOverlapFraction"); if (!pratio) return ERROR_INT("&ratio not defined", procName, 1); *pratio = 0.0; if (!pixs1 || pixGetDepth(pixs1) != 1) return ERROR_INT("pixs1 not defined or not 1 bpp", procName, 1); if (!pixs2 || pixGetDepth(pixs2) != 1) return ERROR_INT("pixs2 not defined or not 1 bpp", procName, 1); if (!tab) tab8 = makePixelSumTab8(); else tab8 = tab; pixGetDimensions(pixs2, &w, &h, NULL); pixt = pixCopy(NULL, pixs1); pixRasterop(pixt, x2, y2, w, h, PIX_MASK, pixs2, 0, 0); /* AND */ pixCountPixels(pixt, &nintersect, tab8); if (pnoverlap) *pnoverlap = nintersect; pixCopy(pixt, pixs1); pixRasterop(pixt, x2, y2, w, h, PIX_PAINT, pixs2, 0, 0); /* OR */ pixCountPixels(pixt, &nunion, tab8); if (!tab) FREE(tab8); pixDestroy(&pixt); if (nunion > 0) *pratio = (l_float32)nintersect / (l_float32)nunion; return 0; } /*! * pixFindRectangleComps() * * Input: pixs (1 bpp) * dist (max distance allowed between bounding box and nearest * foreground pixel within it) * minw, minh (minimum size in each direction as a requirement * for a conforming rectangle) * Return: boxa (of components that conform), or null on error * * Notes: * (1) This applies the function pixConformsToRectangle() to * each 8-c.c. in pixs, and returns a boxa containing the * regions of all components that are conforming. * (2) Conforming components must satisfy both the size constraint * given by @minsize and the slop in conforming to a rectangle * determined by @dist. */ BOXA * pixFindRectangleComps(PIX *pixs, l_int32 dist, l_int32 minw, l_int32 minh) { l_int32 w, h, i, n, conforms; BOX *box; BOXA *boxa, *boxad; PIX *pix; PIXA *pixa; PROCNAME("pixFindRectangleComps"); if (!pixs || pixGetDepth(pixs) != 1) return (BOXA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (dist < 0) return (BOXA *)ERROR_PTR("dist must be >= 0", procName, NULL); if (minw <= 2 * dist && minh <= 2 * dist) return (BOXA *)ERROR_PTR("invalid parameters", procName, NULL); boxa = pixConnComp(pixs, &pixa, 8); boxad = boxaCreate(0); n = pixaGetCount(pixa); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixGetDimensions(pix, &w, &h, NULL); if (w < minw || h < minh) { pixDestroy(&pix); continue; } pixConformsToRectangle(pix, NULL, dist, &conforms); if (conforms) { box = boxaGetBox(boxa, i, L_COPY); boxaAddBox(boxad, box, L_INSERT); } pixDestroy(&pix); } boxaDestroy(&boxa); pixaDestroy(&pixa); return boxad; } /*! * pixConformsToRectangle() * * Input: pixs (1 bpp) * box ( if null, use the entire pixs) * dist (max distance allowed between bounding box and nearest * foreground pixel within it) * &conforms ( 0 (false) if not conforming; * 1 (true) if conforming) * Return: 0 if OK, 1 on error * * Notes: * (1) There are several ways to test if a connected component has * an essentially rectangular boundary, such as: * a. Fraction of fill into the bounding box * b. Max-min distance of fg pixel from periphery of bounding box * c. Max depth of bg intrusions into component within bounding box * The weakness of (a) is that it is highly sensitive to holes * within the c.c. The weakness of (b) is that it can have * arbitrarily large intrusions into the c.c. Method (c) tests * the integrity of the outer boundary of the c.c., with respect * to the enclosing bounding box, so we use it. * (2) This tests if the connected component within the box conforms * to the box at all points on the periphery within @dist. * Inside, at a distance from the box boundary that is greater * than @dist, we don't care about the pixels in the c.c. * (3) We can think of the conforming condition as follows: * No pixel inside a distance @dist from the boundary * can connect to the boundary through a path through the bg. * To implement this, we need to do a flood fill. We can go * either from inside toward the boundary, or the other direction. * It's easiest to fill from the boundary, and then verify that * there are no filled pixels farther than @dist from the boundary. */ l_int32 pixConformsToRectangle(PIX *pixs, BOX *box, l_int32 dist, l_int32 *pconforms) { l_int32 w, h, empty; PIX *pix1, *pix2; PROCNAME("pixConformsToRectangle"); if (!pconforms) return ERROR_INT("&conforms not defined", procName, 1); *pconforms = 0; if (!pixs || pixGetDepth(pixs) != 1) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (dist < 0) return ERROR_INT("dist must be >= 0", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (w <= 2 * dist || h <= 2 * dist) { L_WARNING("automatic conformation: distance too large\n", procName); *pconforms = 1; return 0; } /* Extract the region, if necessary */ if (box) pix1 = pixClipRectangle(pixs, box, NULL); else pix1 = pixCopy(NULL, pixs); /* Invert and fill from the boundary into the interior. * Because we're considering the connected component in an * 8-connected sense, we do the background filling as 4 c.c. */ pixInvert(pix1, pix1); pix2 = pixExtractBorderConnComps(pix1, 4); /* Mask out all pixels within a distance @dist from the box * boundary. Any remaining pixels are from filling that goes * more than @dist from the boundary. If no pixels remain, * the component conforms to the bounding rectangle within * a distance @dist. */ pixSetOrClearBorder(pix2, dist, dist, dist, dist, PIX_CLR); pixZero(pix2, &empty); pixDestroy(&pix1); pixDestroy(&pix2); *pconforms = (empty) ? 1 : 0; return 0; } /*-----------------------------------------------------------------------* * Extract rectangular region * *-----------------------------------------------------------------------*/ /*! * pixClipRectangles() * * Input: pixs * boxa (requested clipping regions) * Return: pixa (consisting of requested regions), or null on error * * Notes: * (1) The returned pixa includes the actual regions clipped out from * the input pixs. */ PIXA * pixClipRectangles(PIX *pixs, BOXA *boxa) { l_int32 i, n; BOX *box, *boxc; PIX *pix; PIXA *pixa; PROCNAME("pixClipRectangles"); if (!pixs) return (PIXA *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIXA *)ERROR_PTR("boxa not defined", procName, NULL); n = boxaGetCount(boxa); pixa = pixaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pix = pixClipRectangle(pixs, box, &boxc); pixaAddPix(pixa, pix, L_INSERT); pixaAddBox(pixa, boxc, L_INSERT); boxDestroy(&box); } return pixa; } /*! * pixClipRectangle() * * Input: pixs * box (requested clipping region; const) * &boxc ( actual box of clipped region) * Return: clipped pix, or null on error or if rectangle * doesn't intersect pixs * * Notes: * * This should be simple, but there are choices to be made. * The box is defined relative to the pix coordinates. However, * if the box is not contained within the pix, we have two choices: * * (1) clip the box to the pix * (2) make a new pix equal to the full box dimensions, * but let rasterop do the clipping and positioning * of the src with respect to the dest * * Choice (2) immediately brings up the problem of what pixel values * to use that were not taken from the src. For example, on a grayscale * image, do you want the pixels not taken from the src to be black * or white or something else? To implement choice 2, one needs to * specify the color of these extra pixels. * * So we adopt (1), and clip the box first, if necessary, * before making the dest pix and doing the rasterop. But there * is another issue to consider. If you want to paste the * clipped pix back into pixs, it must be properly aligned, and * it is necessary to use the clipped box for alignment. * Accordingly, this function has a third (optional) argument, which is * the input box clipped to the src pix. */ PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc) { l_int32 w, h, d, bx, by, bw, bh; BOX *boxc; PIX *pixd; PROCNAME("pixClipRectangle"); if (pboxc) *pboxc = NULL; if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!box) return (PIX *)ERROR_PTR("box not defined", procName, NULL); /* Clip the input box to the pix */ pixGetDimensions(pixs, &w, &h, &d); if ((boxc = boxClipToRectangle(box, w, h)) == NULL) { L_WARNING("box doesn't overlap pix\n", procName); return NULL; } boxGetGeometry(boxc, &bx, &by, &bw, &bh); /* Extract the block */ if ((pixd = pixCreate(bw, bh, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixRasterop(pixd, 0, 0, bw, bh, PIX_SRC, pixs, bx, by); if (pboxc) *pboxc = boxc; else boxDestroy(&boxc); return pixd; } /*! * pixClipMasked() * * Input: pixs (1, 2, 4, 8, 16, 32 bpp; colormap ok) * pixm (clipping mask, 1 bpp) * x, y (origin of clipping mask relative to pixs) * outval (val to use for pixels that are outside the mask) * Return: pixd, (clipped pix) or null on error or if pixm doesn't * intersect pixs * * Notes: * (1) If pixs has a colormap, it is preserved in pixd. * (2) The depth of pixd is the same as that of pixs. * (3) If the depth of pixs is 1, use @outval = 0 for white background * and 1 for black; otherwise, use the max value for white * and 0 for black. If pixs has a colormap, the max value for * @outval is 0xffffffff; otherwise, it is 2^d - 1. * (4) When using 1 bpp pixs, this is a simple clip and * blend operation. For example, if both pix1 and pix2 are * black text on white background, and you want to OR the * fg on the two images, let pixm be the inverse of pix2. * Then the operation takes all of pix1 that's in the bg of * pix2, and for the remainder (which are the pixels * corresponding to the fg of the pix2), paint them black * (1) in pix1. The function call looks like * pixClipMasked(pix2, pixInvert(pix1, pix1), x, y, 1); */ PIX * pixClipMasked(PIX *pixs, PIX *pixm, l_int32 x, l_int32 y, l_uint32 outval) { l_int32 wm, hm, index, rval, gval, bval; l_uint32 pixel; BOX *box; PIX *pixmi, *pixd; PIXCMAP *cmap; PROCNAME("pixClipMasked"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixm || pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm undefined or not 1 bpp", procName, NULL); /* Clip out the region specified by pixm and (x,y) */ pixGetDimensions(pixm, &wm, &hm, NULL); box = boxCreate(x, y, wm, hm); pixd = pixClipRectangle(pixs, box, NULL); /* Paint 'outval' (or something close to it if cmapped) through * the pixels not masked by pixm */ cmap = pixGetColormap(pixd); pixmi = pixInvert(NULL, pixm); if (cmap) { extractRGBValues(outval, &rval, &gval, &bval); pixcmapGetNearestIndex(cmap, rval, gval, bval, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); composeRGBPixel(rval, gval, bval, &pixel); pixPaintThroughMask(pixd, pixmi, 0, 0, pixel); } else { pixPaintThroughMask(pixd, pixmi, 0, 0, outval); } boxDestroy(&box); pixDestroy(&pixmi); return pixd; } /*! * pixCropToMatch() * * Input: pixs1 (any depth, colormap OK) * pixs2 (any depth, colormap OK) * &pixd1 ( may be a clone) * &pixd2 ( may be a clone) * Return: 0 if OK, 1 on error * * Notes: * (1) This resizes pixs1 and/or pixs2 by cropping at the right * and bottom, so that they're the same size. * (2) If a pix doesn't need to be cropped, a clone is returned. * (3) Note: the images are implicitly aligned to the UL corner. */ l_int32 pixCropToMatch(PIX *pixs1, PIX *pixs2, PIX **ppixd1, PIX **ppixd2) { l_int32 w1, h1, w2, h2, w, h; PROCNAME("pixCropToMatch"); if (!ppixd1 || !ppixd2) return ERROR_INT("&pixd1 and &pixd2 not both defined", procName, 1); *ppixd1 = *ppixd2 = NULL; if (!pixs1 || !pixs2) return ERROR_INT("pixs1 and pixs2 not defined", procName, 1); pixGetDimensions(pixs1, &w1, &h1, NULL); pixGetDimensions(pixs2, &w2, &h2, NULL); w = L_MIN(w1, w2); h = L_MIN(h1, h2); *ppixd1 = pixCropToSize(pixs1, w, h); *ppixd2 = pixCropToSize(pixs2, w, h); if (*ppixd1 == NULL || *ppixd2 == NULL) return ERROR_INT("cropped image failure", procName, 1); return 0; } /*! * pixCropToSize() * * Input: pixs (any depth, colormap OK) * w, h (max dimensions of cropped image) * Return: pixd (cropped if necessary) or null on error. * * Notes: * (1) If either w or h is smaller than the corresponding dimension * of pixs, this returns a cropped image; otherwise it returns * a clone of pixs. */ PIX * pixCropToSize(PIX *pixs, l_int32 w, l_int32 h) { l_int32 ws, hs, wd, hd, d; PIX *pixd; PROCNAME("pixCropToSize"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (ws <= w && hs <= h) /* no cropping necessary */ return pixClone(pixs); wd = L_MIN(ws, w); hd = L_MIN(hs, h); if ((pixd = pixCreate(wd, hd, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixs, 0, 0); return pixd; } /*! * pixResizeToMatch() * * Input: pixs (1, 2, 4, 8, 16, 32 bpp; colormap ok) * pixt (can be null; we use only the size) * w, h (ignored if pixt is defined) * Return: pixd (resized to match) or null on error * * Notes: * (1) This resizes pixs to make pixd, without scaling, by either * cropping or extending separately in both width and height. * Extension is done by replicating the last row or column. * This is useful in a situation where, due to scaling * operations, two images that are expected to be the * same size can differ slightly in each dimension. * (2) You can use either an existing pixt or specify * both @w and @h. If pixt is defined, the values * in @w and @h are ignored. * (3) If pixt is larger than pixs (or if w and/or d is larger * than the dimension of pixs, replicate the outer row and * column of pixels in pixs into pixd. */ PIX * pixResizeToMatch(PIX *pixs, PIX *pixt, l_int32 w, l_int32 h) { l_int32 i, j, ws, hs, d; PIX *pixd; PROCNAME("pixResizeToMatch"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixt && (w <= 0 || h <= 0)) return (PIX *)ERROR_PTR("both w and h not > 0", procName, NULL); if (pixt) /* redefine w, h */ pixGetDimensions(pixt, &w, &h, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (ws == w && hs == h) return pixCopy(NULL, pixs); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixCopyColormap(pixd, pixs); pixCopyText(pixd, pixs); pixCopyInputFormat(pixd, pixs); pixRasterop(pixd, 0, 0, ws, hs, PIX_SRC, pixs, 0, 0); if (ws >= w && hs >= h) return pixd; /* Replicate the last column and then the last row */ if (ws < w) { for (j = ws; j < w; j++) pixRasterop(pixd, j, 0, 1, h, PIX_SRC, pixd, ws - 1, 0); } if (hs < h) { for (i = hs; i < h; i++) pixRasterop(pixd, 0, i, w, 1, PIX_SRC, pixd, 0, hs - 1); } return pixd; } /*---------------------------------------------------------------------* * Clip to Foreground * *---------------------------------------------------------------------*/ /*! * pixClipToForeground() * * Input: pixs (1 bpp) * &pixd ( clipped pix returned) * &box ( bounding box) * Return: 0 if OK; 1 on error or if there are no fg pixels * * Notes: * (1) At least one of {&pixd, &box} must be specified. * (2) If there are no fg pixels, the returned ptrs are null. */ l_int32 pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox) { l_int32 w, h, wpl, nfullwords, extra, i, j; l_int32 minx, miny, maxx, maxy; l_uint32 result, mask; l_uint32 *data, *line; BOX *box; PROCNAME("pixClipToForeground"); if (!ppixd && !pbox) return ERROR_INT("neither &pixd nor &box defined", procName, 1); if (ppixd) *ppixd = NULL; if (pbox) *pbox = NULL; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); nfullwords = w / 32; extra = w & 31; mask = ~rmask32[32 - extra]; wpl = pixGetWpl(pixs); data = pixGetData(pixs); result = 0; for (i = 0, miny = 0; i < h; i++, miny++) { line = data + i * wpl; for (j = 0; j < nfullwords; j++) result |= line[j]; if (extra) result |= (line[j] & mask); if (result) break; } if (miny == h) /* no ON pixels */ return 1; result = 0; for (i = h - 1, maxy = h - 1; i >= 0; i--, maxy--) { line = data + i * wpl; for (j = 0; j < nfullwords; j++) result |= line[j]; if (extra) result |= (line[j] & mask); if (result) break; } minx = 0; for (j = 0, minx = 0; j < w; j++, minx++) { for (i = 0; i < h; i++) { line = data + i * wpl; if (GET_DATA_BIT(line, j)) goto minx_found; } } minx_found: for (j = w - 1, maxx = w - 1; j >= 0; j--, maxx--) { for (i = 0; i < h; i++) { line = data + i * wpl; if (GET_DATA_BIT(line, j)) goto maxx_found; } } maxx_found: box = boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1); if (ppixd) *ppixd = pixClipRectangle(pixs, box, NULL); if (pbox) *pbox = box; else boxDestroy(&box); return 0; } /*! * pixTestClipToForeground() * * Input: pixs (1 bpp) * &canclip ( 1 if fg does not extend to all four edges) * Return: 0 if OK; 1 on error * * Notes: * (1) This is a lightweight test to determine if a 1 bpp image * can be further cropped without loss of fg pixels. * If it cannot, canclip is set to 0. */ l_int32 pixTestClipToForeground(PIX *pixs, l_int32 *pcanclip) { l_int32 i, j, w, h, wpl, found; l_uint32 *data, *line; PROCNAME("pixTestClipToForeground"); if (!pcanclip) return ERROR_INT("&canclip not defined", procName, 1); *pcanclip = 0; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); /* Check top and bottom raster lines */ pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); found = FALSE; for (j = 0; found == FALSE && j < w; j++) found = GET_DATA_BIT(data, j); if (!found) { *pcanclip = 1; return 0; } line = data + (h - 1) * wpl; found = FALSE; for (j = 0; found == FALSE && j < w; j++) found = GET_DATA_BIT(data, j); if (!found) { *pcanclip = 1; return 0; } /* Check left and right edges */ found = FALSE; for (i = 0, line = data; found == FALSE && i < h; line += wpl, i++) found = GET_DATA_BIT(line, 0); if (!found) { *pcanclip = 1; return 0; } found = FALSE; for (i = 0, line = data; found == FALSE && i < h; line += wpl, i++) found = GET_DATA_BIT(line, w - 1); if (!found) *pcanclip = 1; return 0; /* fg pixels found on all edges */ } /*! * pixClipBoxToForeground() * * Input: pixs (1 bpp) * boxs ( ; use full image if null) * &pixd ( clipped pix returned) * &boxd ( bounding box) * Return: 0 if OK; 1 on error or if there are no fg pixels * * Notes: * (1) At least one of {&pixd, &boxd} must be specified. * (2) If there are no fg pixels, the returned ptrs are null. * (3) Do not use &pixs for the 3rd arg or &boxs for the 4th arg; * this will leak memory. */ l_int32 pixClipBoxToForeground(PIX *pixs, BOX *boxs, PIX **ppixd, BOX **pboxd) { l_int32 w, h, bx, by, bw, bh, cbw, cbh, left, right, top, bottom; BOX *boxt, *boxd; PROCNAME("pixClipBoxToForeground"); if (!ppixd && !pboxd) return ERROR_INT("neither &pixd nor &boxd defined", procName, 1); if (ppixd) *ppixd = NULL; if (pboxd) *pboxd = NULL; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (!boxs) return pixClipToForeground(pixs, ppixd, pboxd); pixGetDimensions(pixs, &w, &h, NULL); boxGetGeometry(boxs, &bx, &by, &bw, &bh); cbw = L_MIN(bw, w - bx); cbh = L_MIN(bh, h - by); if (cbw < 0 || cbh < 0) return ERROR_INT("box not within image", procName, 1); boxt = boxCreate(bx, by, cbw, cbh); if (pixScanForForeground(pixs, boxt, L_FROM_LEFT, &left)) { boxDestroy(&boxt); return 1; } pixScanForForeground(pixs, boxt, L_FROM_RIGHT, &right); pixScanForForeground(pixs, boxt, L_FROM_TOP, &top); pixScanForForeground(pixs, boxt, L_FROM_BOT, &bottom); boxd = boxCreate(left, top, right - left + 1, bottom - top + 1); if (ppixd) *ppixd = pixClipRectangle(pixs, boxd, NULL); if (pboxd) *pboxd = boxd; else boxDestroy(&boxd); boxDestroy(&boxt); return 0; } /*! * pixScanForForeground() * * Input: pixs (1 bpp) * box ( within which the search is conducted) * scanflag (direction of scan; e.g., L_FROM_LEFT) * &loc (location in scan direction of first black pixel) * Return: 0 if OK; 1 on error or if no fg pixels are found * * Notes: * (1) If there are no fg pixels, the position is set to 0. * Caller must check the return value! * (2) Use @box == NULL to scan from edge of pixs */ l_int32 pixScanForForeground(PIX *pixs, BOX *box, l_int32 scanflag, l_int32 *ploc) { l_int32 bx, by, bw, bh, x, xstart, xend, y, ystart, yend, wpl; l_uint32 *data, *line; BOX *boxt; PROCNAME("pixScanForForeground"); if (!ploc) return ERROR_INT("&loc not defined", procName, 1); *ploc = 0; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); /* Clip box to pixs if it exists */ pixGetDimensions(pixs, &bw, &bh, NULL); if (box) { if ((boxt = boxClipToRectangle(box, bw, bh)) == NULL) return ERROR_INT("invalid box", procName, 1); boxGetGeometry(boxt, &bx, &by, &bw, &bh); boxDestroy(&boxt); } else { bx = by = 0; } xstart = bx; ystart = by; xend = bx + bw - 1; yend = by + bh - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); if (scanflag == L_FROM_LEFT) { for (x = xstart; x <= xend; x++) { for (y = ystart; y <= yend; y++) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) { *ploc = x; return 0; } } } } else if (scanflag == L_FROM_RIGHT) { for (x = xend; x >= xstart; x--) { for (y = ystart; y <= yend; y++) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) { *ploc = x; return 0; } } } } else if (scanflag == L_FROM_TOP) { for (y = ystart; y <= yend; y++) { line = data + y * wpl; for (x = xstart; x <= xend; x++) { if (GET_DATA_BIT(line, x)) { *ploc = y; return 0; } } } } else if (scanflag == L_FROM_BOT) { for (y = yend; y >= ystart; y--) { line = data + y * wpl; for (x = xstart; x <= xend; x++) { if (GET_DATA_BIT(line, x)) { *ploc = y; return 0; } } } } else { return ERROR_INT("invalid scanflag", procName, 1); } return 1; /* no fg found */ } /*! * pixClipBoxToEdges() * * Input: pixs (1 bpp) * boxs ( ; use full image if null) * lowthresh (threshold to choose clipping location) * highthresh (threshold required to find an edge) * maxwidth (max allowed width between low and high thresh locs) * factor (sampling factor along pixel counting direction) * &pixd ( clipped pix returned) * &boxd ( bounding box) * Return: 0 if OK; 1 on error or if a fg edge is not found from * all four sides. * * Notes: * (1) At least one of {&pixd, &boxd} must be specified. * (2) If there are no fg pixels, the returned ptrs are null. * (3) This function attempts to locate rectangular "image" regions * of high-density fg pixels, that have well-defined edges * on the four sides. * (4) Edges are searched for on each side, iterating in order * from left, right, top and bottom. As each new edge is * found, the search box is resized to use that location. * Once an edge is found, it is held. If no more edges * are found in one iteration, the search fails. * (5) See pixScanForEdge() for usage of the thresholds and @maxwidth. * (6) The thresholds must be at least 1, and the low threshold * cannot be larger than the high threshold. * (7) If the low and high thresholds are both 1, this is equivalent * to pixClipBoxToForeground(). */ l_int32 pixClipBoxToEdges(PIX *pixs, BOX *boxs, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, PIX **ppixd, BOX **pboxd) { l_int32 w, h, bx, by, bw, bh, cbw, cbh, left, right, top, bottom; l_int32 lfound, rfound, tfound, bfound, change; BOX *boxt, *boxd; PROCNAME("pixClipBoxToEdges"); if (!ppixd && !pboxd) return ERROR_INT("neither &pixd nor &boxd defined", procName, 1); if (ppixd) *ppixd = NULL; if (pboxd) *pboxd = NULL; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (lowthresh < 1 || highthresh < 1 || lowthresh > highthresh || maxwidth < 1) return ERROR_INT("invalid thresholds", procName, 1); factor = L_MIN(1, factor); if (lowthresh == 1 && highthresh == 1) return pixClipBoxToForeground(pixs, boxs, ppixd, pboxd); pixGetDimensions(pixs, &w, &h, NULL); if (boxs) { boxGetGeometry(boxs, &bx, &by, &bw, &bh); cbw = L_MIN(bw, w - bx); cbh = L_MIN(bh, h - by); if (cbw < 0 || cbh < 0) return ERROR_INT("box not within image", procName, 1); boxt = boxCreate(bx, by, cbw, cbh); } else { boxt = boxCreate(0, 0, w, h); } lfound = rfound = tfound = bfound = 0; while (!lfound || !rfound || !tfound || !bfound) { change = 0; if (!lfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_LEFT, &left)) { lfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, left, L_FROM_LEFT); } } if (!rfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_RIGHT, &right)) { rfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, right, L_FROM_RIGHT); } } if (!tfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_TOP, &top)) { tfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, top, L_FROM_TOP); } } if (!bfound) { if (!pixScanForEdge(pixs, boxt, lowthresh, highthresh, maxwidth, factor, L_FROM_BOT, &bottom)) { bfound = 1; change = 1; boxRelocateOneSide(boxt, boxt, bottom, L_FROM_BOT); } } #if DEBUG_EDGES fprintf(stderr, "iter: %d %d %d %d\n", lfound, rfound, tfound, bfound); #endif /* DEBUG_EDGES */ if (change == 0) break; } boxDestroy(&boxt); if (change == 0) return ERROR_INT("not all edges found", procName, 1); boxd = boxCreate(left, top, right - left + 1, bottom - top + 1); if (ppixd) *ppixd = pixClipRectangle(pixs, boxd, NULL); if (pboxd) *pboxd = boxd; else boxDestroy(&boxd); return 0; } /*! * pixScanForEdge() * * Input: pixs (1 bpp) * box ( within which the search is conducted) * lowthresh (threshold to choose clipping location) * highthresh (threshold required to find an edge) * maxwidth (max allowed width between low and high thresh locs) * factor (sampling factor along pixel counting direction) * scanflag (direction of scan; e.g., L_FROM_LEFT) * &loc (location in scan direction of first black pixel) * Return: 0 if OK; 1 on error or if the edge is not found * * Notes: * (1) If there are no fg pixels, the position is set to 0. * Caller must check the return value! * (2) Use @box == NULL to scan from edge of pixs * (3) As the scan progresses, the location where the sum of * pixels equals or excees @lowthresh is noted (loc). The * scan is stopped when the sum of pixels equals or exceeds * @highthresh. If the scan distance between loc and that * point does not exceed @maxwidth, an edge is found and * its position is taken to be loc. @maxwidth implicitly * sets a minimum on the required gradient of the edge. * (4) The thresholds must be at least 1, and the low threshold * cannot be larger than the high threshold. */ l_int32 pixScanForEdge(PIX *pixs, BOX *box, l_int32 lowthresh, l_int32 highthresh, l_int32 maxwidth, l_int32 factor, l_int32 scanflag, l_int32 *ploc) { l_int32 bx, by, bw, bh, foundmin, loc, sum, wpl; l_int32 x, xstart, xend, y, ystart, yend; l_uint32 *data, *line; BOX *boxt; PROCNAME("pixScanForEdge"); if (!ploc) return ERROR_INT("&ploc not defined", procName, 1); *ploc = 0; if (!pixs || (pixGetDepth(pixs) != 1)) return ERROR_INT("pixs not defined or not 1 bpp", procName, 1); if (lowthresh < 1 || highthresh < 1 || lowthresh > highthresh || maxwidth < 1) return ERROR_INT("invalid thresholds", procName, 1); factor = L_MIN(1, factor); /* Clip box to pixs if it exists */ pixGetDimensions(pixs, &bw, &bh, NULL); if (box) { if ((boxt = boxClipToRectangle(box, bw, bh)) == NULL) return ERROR_INT("invalid box", procName, 1); boxGetGeometry(boxt, &bx, &by, &bw, &bh); boxDestroy(&boxt); } else { bx = by = 0; } xstart = bx; ystart = by; xend = bx + bw - 1; yend = by + bh - 1; data = pixGetData(pixs); wpl = pixGetWpl(pixs); foundmin = 0; if (scanflag == L_FROM_LEFT) { for (x = xstart; x <= xend; x++) { sum = 0; for (y = ystart; y <= yend; y += factor) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { /* save the loc of the beginning of the edge */ foundmin = 1; loc = x; } if (sum >= highthresh) { #if DEBUG_EDGES fprintf(stderr, "Left: x = %d, loc = %d\n", x, loc); #endif /* DEBUG_EDGES */ if (x - loc < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else if (scanflag == L_FROM_RIGHT) { for (x = xend; x >= xstart; x--) { sum = 0; for (y = ystart; y <= yend; y += factor) { line = data + y * wpl; if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { foundmin = 1; loc = x; } if (sum >= highthresh) { #if DEBUG_EDGES fprintf(stderr, "Right: x = %d, loc = %d\n", x, loc); #endif /* DEBUG_EDGES */ if (loc - x < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else if (scanflag == L_FROM_TOP) { for (y = ystart; y <= yend; y++) { sum = 0; line = data + y * wpl; for (x = xstart; x <= xend; x += factor) { if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { foundmin = 1; loc = y; } if (sum >= highthresh) { #if DEBUG_EDGES fprintf(stderr, "Top: y = %d, loc = %d\n", y, loc); #endif /* DEBUG_EDGES */ if (y - loc < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else if (scanflag == L_FROM_BOT) { for (y = yend; y >= ystart; y--) { sum = 0; line = data + y * wpl; for (x = xstart; x <= xend; x += factor) { if (GET_DATA_BIT(line, x)) sum++; } if (!foundmin && sum < lowthresh) continue; if (!foundmin) { foundmin = 1; loc = y; } if (sum >= highthresh) { #if DEBUG_EDGES fprintf(stderr, "Bottom: y = %d, loc = %d\n", y, loc); #endif /* DEBUG_EDGES */ if (loc - y < maxwidth) { *ploc = loc; return 0; } else { return 1; } } } } else { return ERROR_INT("invalid scanflag", procName, 1); } return 1; /* edge not found */ } /*---------------------------------------------------------------------* * Extract pixel averages and reversals along lines * *---------------------------------------------------------------------*/ /*! * pixExtractOnLine() * * Input: pixs (1 bpp or 8 bpp; no colormap) * x1, y1 (one end point for line) * x2, y2 (another end pt for line) * factor (sampling; >= 1) * Return: na (of pixel values along line), or null on error. * * Notes: * (1) Input end points are clipped to the pix. * (2) If the line is either horizontal, or closer to horizontal * than to vertical, the points will be extracted from left * to right in the pix. Likewise, if the line is vertical, * or closer to vertical than to horizontal, the points will * be extracted from top to bottom. * (3) Can be used with numaCountReverals(), for example, to * characterize the intensity smoothness along a line. */ NUMA * pixExtractOnLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor) { l_int32 i, w, h, d, xmin, ymin, xmax, ymax, npts, direction; l_uint32 val; l_float32 x, y; l_float64 slope; NUMA *na; PTA *pta; PROCNAME("pixExtractOnLine"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8) return (NUMA *)ERROR_PTR("d not 1 or 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (NUMA *)ERROR_PTR("pixs has a colormap", procName, NULL); if (factor < 1) { L_WARNING("factor must be >= 1; setting to 1\n", procName); factor = 1; } /* Clip line to the image */ x1 = L_MAX(0, L_MIN(x1, w - 1)); x2 = L_MAX(0, L_MIN(x2, w - 1)); y1 = L_MAX(0, L_MIN(y1, h - 1)); y2 = L_MAX(0, L_MIN(y2, h - 1)); if (x1 == x2 && y1 == y2) { pixGetPixel(pixs, x1, y1, &val); na = numaCreate(1); numaAddNumber(na, val); return na; } if (y1 == y2) direction = L_HORIZONTAL_LINE; else if (x1 == x2) direction = L_VERTICAL_LINE; else direction = L_OBLIQUE_LINE; na = numaCreate(0); if (direction == L_HORIZONTAL_LINE) { /* plot against x */ xmin = L_MIN(x1, x2); xmax = L_MAX(x1, x2); numaSetParameters(na, xmin, factor); for (i = xmin; i <= xmax; i += factor) { pixGetPixel(pixs, i, y1, &val); numaAddNumber(na, val); } } else if (direction == L_VERTICAL_LINE) { /* plot against y */ ymin = L_MIN(y1, y2); ymax = L_MAX(y1, y2); numaSetParameters(na, ymin, factor); for (i = ymin; i <= ymax; i += factor) { pixGetPixel(pixs, x1, i, &val); numaAddNumber(na, val); } } else { /* direction == L_OBLIQUE_LINE */ slope = (l_float64)((y2 - y1) / (x2 - x1)); if (L_ABS(slope) < 1.0) { /* quasi-horizontal */ xmin = L_MIN(x1, x2); xmax = L_MAX(x1, x2); ymin = (xmin == x1) ? y1 : y2; /* pt that goes with xmin */ ymax = (ymin == y1) ? y2 : y1; /* pt that goes with xmax */ pta = generatePtaLine(xmin, ymin, xmax, ymax); numaSetParameters(na, xmin, (l_float32)factor); } else { /* quasi-vertical */ ymin = L_MIN(y1, y2); ymax = L_MAX(y1, y2); xmin = (ymin == y1) ? x1 : x2; /* pt that goes with ymin */ xmax = (xmin == x1) ? x2 : x1; /* pt that goes with ymax */ pta = generatePtaLine(xmin, ymin, xmax, ymax); numaSetParameters(na, ymin, (l_float32)factor); } npts = ptaGetCount(pta); for (i = 0; i < npts; i += factor) { ptaGetPt(pta, i, &x, &y); pixGetPixel(pixs, (l_int32)x, (l_int32)y, &val); numaAddNumber(na, val); } #if 0 /* debugging */ pixPlotAlongPta(pixs, pta, GPLOT_X11, NULL); #endif ptaDestroy(&pta); } return na; } /*! * pixAverageOnLine() * * Input: pixs (1 bpp or 8 bpp; no colormap) * x1, y1 (starting pt for line) * x2, y2 (end pt for line) * factor (sampling; >= 1) * Return: average of pixel values along line, or null on error. * * Notes: * (1) The line must be either horizontal or vertical, so either * y1 == y2 (horizontal) or x1 == x2 (vertical). * (2) If horizontal, x1 must be <= x2. * If vertical, y1 must be <= y2. * characterize the intensity smoothness along a line. * (3) Input end points are clipped to the pix. */ l_float32 pixAverageOnLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 factor) { l_int32 i, j, w, h, d, direction, count, wpl; l_uint32 *data, *line; l_float32 sum; PROCNAME("pixAverageOnLine"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8) return ERROR_INT("d not 1 or 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs has a colormap", procName, 1); if (x1 > x2 || y1 > y2) return ERROR_INT("x1 > x2 or y1 > y2", procName, 1); if (y1 == y2) { x1 = L_MAX(0, x1); x2 = L_MIN(w - 1, x2); y1 = L_MAX(0, L_MIN(y1, h - 1)); direction = L_HORIZONTAL_LINE; } else if (x1 == x2) { y1 = L_MAX(0, y1); y2 = L_MIN(h - 1, y2); x1 = L_MAX(0, L_MIN(x1, w - 1)); direction = L_VERTICAL_LINE; } else { return ERROR_INT("line neither horiz nor vert", procName, 1); } if (factor < 1) { L_WARNING("factor must be >= 1; setting to 1\n", procName); factor = 1; } data = pixGetData(pixs); wpl = pixGetWpl(pixs); sum = 0; if (direction == L_HORIZONTAL_LINE) { line = data + y1 * wpl; for (j = x1, count = 0; j <= x2; count++, j += factor) { if (d == 1) sum += GET_DATA_BIT(line, j); else /* d == 8 */ sum += GET_DATA_BYTE(line, j); } } else if (direction == L_VERTICAL_LINE) { for (i = y1, count = 0; i <= y2; count++, i += factor) { line = data + i * wpl; if (d == 1) sum += GET_DATA_BIT(line, x1); else /* d == 8 */ sum += GET_DATA_BYTE(line, x1); } } return sum / (l_float32)count; } /*! * pixAverageIntensityProfile() * * Input: pixs (any depth; colormap OK) * fract (fraction of image width or height to be used) * dir (averaging direction: L_HORIZONTAL_LINE or L_VERTICAL_LINE) * first, last (span of rows or columns to measure) * factor1 (sampling along fast scan direction; >= 1) * factor2 (sampling along slow scan direction; >= 1) * Return: na (of reversal profile), or null on error. * * Notes: * (1) If d != 1 bpp, colormaps are removed and the result * is converted to 8 bpp. * (2) If @dir == L_HORIZONTAL_LINE, the intensity is averaged * along each horizontal raster line (sampled by @factor1), * and the profile is the array of these averages in the * vertical direction between @first and @last raster lines, * and sampled by @factor2. * (3) If @dir == L_VERTICAL_LINE, the intensity is averaged * along each vertical line (sampled by @factor1), * and the profile is the array of these averages in the * horizontal direction between @first and @last columns, * and sampled by @factor2. * (4) The averages are measured over the central @fract of the image. * Use @fract == 1.0 to average across the entire width or height. */ NUMA * pixAverageIntensityProfile(PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 factor1, l_int32 factor2) { l_int32 i, j, w, h, d, start, end; l_float32 ave; NUMA *nad; PIX *pixr, *pixg; PROCNAME("pixAverageIntensityProfile"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (fract < 0.0 || fract > 1.0) return (NUMA *)ERROR_PTR("fract < 0.0 or > 1.0", procName, NULL); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return (NUMA *)ERROR_PTR("invalid direction", procName, NULL); if (first < 0) first = 0; if (last < first) return (NUMA *)ERROR_PTR("last must be >= first", procName, NULL); if (factor1 < 1) { L_WARNING("factor1 must be >= 1; setting to 1\n", procName); factor1 = 1; } if (factor2 < 1) { L_WARNING("factor2 must be >= 1; setting to 1\n", procName); factor2 = 1; } /* Use 1 or 8 bpp, without colormap */ if (pixGetColormap(pixs)) pixr = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixr = pixClone(pixs); pixGetDimensions(pixr, &w, &h, &d); if (d == 1) pixg = pixClone(pixr); else pixg = pixConvertTo8(pixr, 0); nad = numaCreate(0); /* output: samples in slow scan direction */ numaSetParameters(nad, 0, factor2); if (dir == L_HORIZONTAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)w); end = w - start; if (last > h - 1) { L_WARNING("last > h - 1; clipping\n", procName); last = h - 1; } for (i = first; i <= last; i += factor2) { ave = pixAverageOnLine(pixg, start, i, end, i, factor1); numaAddNumber(nad, ave); } } else if (dir == L_VERTICAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)h); end = h - start; if (last > w - 1) { L_WARNING("last > w - 1; clipping\n", procName); last = w - 1; } for (j = first; j <= last; j += factor2) { ave = pixAverageOnLine(pixg, j, start, j, end, factor1); numaAddNumber(nad, ave); } } pixDestroy(&pixr); pixDestroy(&pixg); return nad; } /*! * pixReversalProfile() * * Input: pixs (any depth; colormap OK) * fract (fraction of image width or height to be used) * dir (profile direction: L_HORIZONTAL_LINE or L_VERTICAL_LINE) * first, last (span of rows or columns to measure) * minreversal (minimum change in intensity to trigger a reversal) * factor1 (sampling along raster line (fast scan); >= 1) * factor2 (sampling of raster lines (slow scan); >= 1) * Return: na (of reversal profile), or null on error. * * Notes: * (1) If d != 1 bpp, colormaps are removed and the result * is converted to 8 bpp. * (2) If @dir == L_HORIZONTAL_LINE, the the reversals are counted * along each horizontal raster line (sampled by @factor1), * and the profile is the array of these sums in the * vertical direction between @first and @last raster lines, * and sampled by @factor2. * (3) If @dir == L_VERTICAL_LINE, the the reversals are counted * along each vertical column (sampled by @factor1), * and the profile is the array of these sums in the * horizontal direction between @first and @last columns, * and sampled by @factor2. * (4) For each row or column, the reversals are summed over the * central @fract of the image. Use @fract == 1.0 to sum * across the entire width (of row) or height (of column). * (5) @minreversal is the relative change in intensity that is * required to resolve peaks and valleys. A typical number for * locating text in 8 bpp might be 50. For 1 bpp, minreversal * must be 1. * (6) The reversal profile is simply the number of reversals * in a row or column, vs the row or column index. */ NUMA * pixReversalProfile(PIX *pixs, l_float32 fract, l_int32 dir, l_int32 first, l_int32 last, l_int32 minreversal, l_int32 factor1, l_int32 factor2) { l_int32 i, j, w, h, d, start, end, nr; NUMA *naline, *nad; PIX *pixr, *pixg; PROCNAME("pixReversalProfile"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (fract < 0.0 || fract > 1.0) return (NUMA *)ERROR_PTR("fract < 0.0 or > 1.0", procName, NULL); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return (NUMA *)ERROR_PTR("invalid direction", procName, NULL); if (first < 0) first = 0; if (last < first) return (NUMA *)ERROR_PTR("last must be >= first", procName, NULL); if (factor1 < 1) { L_WARNING("factor1 must be >= 1; setting to 1\n", procName); factor1 = 1; } if (factor2 < 1) { L_WARNING("factor2 must be >= 1; setting to 1\n", procName); factor2 = 1; } /* Use 1 or 8 bpp, without colormap */ if (pixGetColormap(pixs)) pixr = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixr = pixClone(pixs); pixGetDimensions(pixr, &w, &h, &d); if (d == 1) { pixg = pixClone(pixr); minreversal = 1; /* enforce this */ } else { pixg = pixConvertTo8(pixr, 0); } nad = numaCreate(0); /* output: samples in slow scan direction */ numaSetParameters(nad, 0, factor2); if (dir == L_HORIZONTAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)w); end = w - start; if (last > h - 1) { L_WARNING("last > h - 1; clipping\n", procName); last = h - 1; } for (i = first; i <= last; i += factor2) { naline = pixExtractOnLine(pixg, start, i, end, i, factor1); numaCountReversals(naline, minreversal, &nr, NULL); numaAddNumber(nad, nr); numaDestroy(&naline); } } else if (dir == L_VERTICAL_LINE) { start = (l_int32)(0.5 * (1.0 - fract) * (l_float32)h); end = h - start; if (last > w - 1) { L_WARNING("last > w - 1; clipping\n", procName); last = w - 1; } for (j = first; j <= last; j += factor2) { naline = pixExtractOnLine(pixg, j, start, j, end, factor1); numaCountReversals(naline, minreversal, &nr, NULL); numaAddNumber(nad, nr); numaDestroy(&naline); } } pixDestroy(&pixr); pixDestroy(&pixg); return nad; } /*---------------------------------------------------------------------* * Extract windowed variance along a line * *---------------------------------------------------------------------*/ /*! * pixWindowedVarianceOnLine() * * Input: pixs (8 bpp; no colormap) * dir (L_HORIZONTAL_LINE or L_VERTICAL_LINE) * loc (location of the constant coordinate for the line) * c1, c2 (end point coordinates for the line) * size (window size; must be > 1) * &nad ( windowed square root of variance) * Return: 0 if OK; 1 on error * * Notes: * (1) The returned variance array traverses the line starting * from the smallest coordinate, min(c1,c2). * (2) Line end points are clipped to pixs. * (3) The reference point for the variance calculation is the center of * the window. Therefore, the numa start parameter from * pixExtractOnLine() is incremented by @size/2, * to align the variance values with the pixel coordinate. * (4) The square root of the variance is the RMS deviation from the mean. */ l_int32 pixWindowedVarianceOnLine(PIX *pixs, l_int32 dir, l_int32 loc, l_int32 c1, l_int32 c2, l_int32 size, NUMA **pnad) { l_int32 i, j, w, h, cmin, cmax, maxloc, n, x, y; l_uint32 val; l_float32 norm, rootvar; l_float32 *array; l_float64 sum1, sum2, ave, var; NUMA *na1, *nad; PTA *pta; PROCNAME("pixWindowedVarianceOnLine"); if (!pnad) return ERROR_INT("&nad not defined", procName, 1); *pnad = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8bpp", procName, 1); if (size < 2) return ERROR_INT("window size must be > 1", procName, 1); if (dir != L_HORIZONTAL_LINE && dir != L_VERTICAL_LINE) return ERROR_INT("invalid direction", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); maxloc = (dir == L_HORIZONTAL_LINE) ? h - 1 : w - 1; if (loc < 0 || loc > maxloc) return ERROR_INT("invalid line position", procName, 1); /* Clip line to the image */ cmin = L_MIN(c1, c2); cmax = L_MAX(c1, c2); maxloc = (dir == L_HORIZONTAL_LINE) ? w - 1 : h - 1; cmin = L_MAX(0, L_MIN(cmin, maxloc)); cmax = L_MAX(0, L_MIN(cmax, maxloc)); n = cmax - cmin + 1; /* Generate pta along the line */ pta = ptaCreate(n); if (dir == L_HORIZONTAL_LINE) { for (i = cmin; i <= cmax; i++) ptaAddPt(pta, i, loc); } else { /* vertical line */ for (i = cmin; i <= cmax; i++) ptaAddPt(pta, loc, i); } /* Get numa of pixel values on the line */ na1 = numaCreate(n); numaSetParameters(na1, cmin, 1); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); pixGetPixel(pixs, x, y, &val); numaAddNumber(na1, val); } array = numaGetFArray(na1, L_NOCOPY); ptaDestroy(&pta); /* Compute root variance on overlapping windows */ nad = numaCreate(n); *pnad = nad; numaSetParameters(nad, cmin + size / 2, 1); norm = 1.0 / (l_float32)size; for (i = 0; i < n - size; i++) { /* along the line */ sum1 = sum2 = 0; for (j = 0; j < size; j++) { /* over the window */ val = array[i + j]; sum1 += val; sum2 += val * val; } ave = norm * sum1; var = norm * sum2 - ave * ave; rootvar = (l_float32)sqrt(var); numaAddNumber(nad, rootvar); } numaDestroy(&na1); return 0; } /*---------------------------------------------------------------------* * Extract min/max of pixel values near lines * *---------------------------------------------------------------------*/ /*! * pixMinMaxNearLine() * * Input: pixs (8 bpp; no colormap) * x1, y1 (starting pt for line) * x2, y2 (end pt for line) * dist (distance to search from line in each direction) * direction (L_SCAN_NEGATIVE, L_SCAN_POSITIVE, L_SCAN_BOTH) * &namin ( minimum values) * &namax ( maximum values) * &minave ( average of minimum values) * &maxave ( average of maximum values) * Return: 0 if OK; 1 on error or if there are no sampled points * within the image. * * Notes: * (1) If the line is more horizontal than vertical, the values * are computed for [x1, x2], and the pixels are taken * below and/or above the local y-value. Otherwise, the * values are computed for [y1, y2] and the pixels are taken * to the left and/or right of the local x value. * (2) @direction specifies which side (or both sides) of the * line are scanned for min and max values. * (3) There are two ways to tell if the returned values of min * and max averages are valid: the returned values cannot be * negative and the function must return 0. * (4) All accessed pixels are clipped to the pix. */ l_int32 pixMinMaxNearLine(PIX *pixs, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 dist, l_int32 direction, NUMA **pnamin, NUMA **pnamax, l_float32 *pminave, l_float32 *pmaxave) { l_int32 i, j, w, h, d, x, y, n, dir, found, minval, maxval, negloc, posloc; l_uint32 val; l_float32 sum; NUMA *namin, *namax; PTA *pta; PROCNAME("pixMinMaxNearLine"); if (pnamin) *pnamin = NULL; if (pnamax) *pnamax = NULL; if (pminave) *pminave = UNDEF; if (pmaxave) *pmaxave = UNDEF; if (!pnamin && !pnamax && !pminave && !pmaxave) return ERROR_INT("no output requested", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8 || pixGetColormap(pixs)) return ERROR_INT("pixs not 8 bpp or has colormap", procName, 1); dist = L_ABS(dist); if (direction != L_SCAN_NEGATIVE && direction != L_SCAN_POSITIVE && direction != L_SCAN_BOTH) return ERROR_INT("invalid direction", procName, 1); pta = generatePtaLine(x1, y1, x2, y2); n = ptaGetCount(pta); dir = (L_ABS(x1 - x2) == n - 1) ? L_HORIZ : L_VERT; namin = numaCreate(n); namax = numaCreate(n); negloc = -dist; posloc = dist; if (direction == L_SCAN_NEGATIVE) posloc = 0; else if (direction == L_SCAN_POSITIVE) negloc = 0; for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); minval = 255; maxval = 0; found = FALSE; if (dir == L_HORIZ) { if (x < 0 || x >= w) continue; for (j = negloc; j <= posloc; j++) { if (y + j < 0 || y + j >= h) continue; pixGetPixel(pixs, x, y + j, &val); found = TRUE; if (val < minval) minval = val; if (val > maxval) maxval = val; } } else { /* dir == L_VERT */ if (y < 0 || y >= h) continue; for (j = negloc; j <= posloc; j++) { if (x + j < 0 || x + j >= w) continue; pixGetPixel(pixs, x + j, y, &val); found = TRUE; if (val < minval) minval = val; if (val > maxval) maxval = val; } } if (found) { numaAddNumber(namin, minval); numaAddNumber(namax, maxval); } } n = numaGetCount(namin); if (n == 0) { numaDestroy(&namin); numaDestroy(&namax); ptaDestroy(&pta); return ERROR_INT("no output from this line", procName, 1); } if (pminave) { numaGetSum(namin, &sum); *pminave = sum / n; } if (pmaxave) { numaGetSum(namax, &sum); *pmaxave = sum / n; } if (pnamin) *pnamin = namin; else numaDestroy(&namin); if (pnamax) *pnamax = namax; else numaDestroy(&namax); ptaDestroy(&pta); return 0; } /*---------------------------------------------------------------------* * Rank row and column transforms * *---------------------------------------------------------------------*/ /*! * pixRankRowTransform() * * Input: pixs (8 bpp; no colormap) * Return: pixd (with pixels sorted in each row, from * min to max value) * * Notes: * (1) The time is O(n) in the number of pixels and runs about * 100 Mpixels/sec on a 3 GHz machine. */ PIX * pixRankRowTransform(PIX *pixs) { l_int32 i, j, k, m, w, h, wpl, val; l_int32 histo[256]; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixRankRowTransform"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has a colormap", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreateTemplateNoInit(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpl = pixGetWpl(pixs); for (i = 0; i < h; i++) { memset(histo, 0, 1024); lines = datas + i * wpl; lined = datad + i * wpl; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lines, j); histo[val]++; } for (m = 0, j = 0; m < 256; m++) { for (k = 0; k < histo[m]; k++, j++) SET_DATA_BYTE(lined, j, m); } } return pixd; } /*! * pixRankColumnTransform() * * Input: pixs (8 bpp; no colormap) * Return: pixd (with pixels sorted in each column, from * min to max value) * * Notes: * (1) The time is O(n) in the number of pixels and runs about * 50 Mpixels/sec on a 3 GHz machine. */ PIX * pixRankColumnTransform(PIX *pixs) { l_int32 i, j, k, m, w, h, val; l_int32 histo[256]; void **lines8, **lined8; PIX *pixd; PROCNAME("pixRankColumnTransform"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has a colormap", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreateTemplateNoInit(pixs); lines8 = pixGetLinePtrs(pixs, NULL); lined8 = pixGetLinePtrs(pixd, NULL); for (j = 0; j < w; j++) { memset(histo, 0, 1024); for (i = 0; i < h; i++) { val = GET_DATA_BYTE(lines8[i], j); histo[val]++; } for (m = 0, i = 0; m < 256; m++) { for (k = 0; k < histo[m]; k++, i++) SET_DATA_BYTE(lined8[i], j, m); } } FREE(lines8); FREE(lined8); return pixd; } leptonica-1.70/src/kernel.c0000640000175000017500000010707512244223673013733 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * kernel.c * * Basic operations on kernels for image convolution * * Create/destroy/copy * L_KERNEL *kernelCreate() * void kernelDestroy() * L_KERNEL *kernelCopy() * * Accessors: * l_int32 kernelGetElement() * l_int32 kernelSetElement() * l_int32 kernelGetParameters() * l_int32 kernelSetOrigin() * l_int32 kernelGetSum() * l_int32 kernelGetMinMax() * * Normalize/invert * L_KERNEL *kernelNormalize() * L_KERNEL *kernelInvert() * * Helper function * l_float32 **create2dFloatArray() * * Serialized I/O * L_KERNEL *kernelRead() * L_KERNEL *kernelReadStream() * l_int32 kernelWrite() * l_int32 kernelWriteStream() * * Making a kernel from a compiled string * L_KERNEL *kernelCreateFromString() * * Making a kernel from a simple file format * L_KERNEL *kernelCreateFromFile() * * Making a kernel from a Pix * L_KERNEL *kernelCreateFromPix() * * Display a kernel in a pix * PIX *kernelDisplayInPix() * * Parse string to extract numbers * NUMA *parseStringForNumbers() * * Simple parametric kernels * L_KERNEL *makeFlatKernel() * L_KERNEL *makeGaussianKernel() * L_KERNEL *makeGaussianKernelSep() * L_KERNEL *makeDoGKernel() */ #include #include #include "allheaders.h" /*------------------------------------------------------------------------* * Create / Destroy * *------------------------------------------------------------------------*/ /*! * kernelCreate() * * Input: height, width * Return: kernel, or null on error * * Notes: * (1) kernelCreate() initializes all values to 0. * (2) After this call, (cy,cx) and nonzero data values must be * assigned. */ L_KERNEL * kernelCreate(l_int32 height, l_int32 width) { L_KERNEL *kel; PROCNAME("kernelCreate"); if ((kel = (L_KERNEL *)CALLOC(1, sizeof(L_KERNEL))) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); kel->sy = height; kel->sx = width; if ((kel->data = create2dFloatArray(height, width)) == NULL) return (L_KERNEL *)ERROR_PTR("data not allocated", procName, NULL); return kel; } /*! * kernelDestroy() * * Input: &kel () * Return: void */ void kernelDestroy(L_KERNEL **pkel) { l_int32 i; L_KERNEL *kel; PROCNAME("kernelDestroy"); if (pkel == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((kel = *pkel) == NULL) return; for (i = 0; i < kel->sy; i++) FREE(kel->data[i]); FREE(kel->data); FREE(kel); *pkel = NULL; return; } /*! * kernelCopy() * * Input: kels (source kernel) * Return: keld (copy of kels), or null on error */ L_KERNEL * kernelCopy(L_KERNEL *kels) { l_int32 i, j, sx, sy, cx, cy; L_KERNEL *keld; PROCNAME("kernelCopy"); if (!kels) return (L_KERNEL *)ERROR_PTR("kels not defined", procName, NULL); kernelGetParameters(kels, &sy, &sx, &cy, &cx); if ((keld = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("keld not made", procName, NULL); keld->cy = cy; keld->cx = cx; for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) keld->data[i][j] = kels->data[i][j]; return keld; } /*----------------------------------------------------------------------* * Accessors * *----------------------------------------------------------------------*/ /*! * kernelGetElement() * * Input: kel * row * col * &val * Return: 0 if OK; 1 on error */ l_int32 kernelGetElement(L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 *pval) { PROCNAME("kernelGetElement"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0; if (!kel) return ERROR_INT("kernel not defined", procName, 1); if (row < 0 || row >= kel->sy) return ERROR_INT("kernel row out of bounds", procName, 1); if (col < 0 || col >= kel->sx) return ERROR_INT("kernel col out of bounds", procName, 1); *pval = kel->data[row][col]; return 0; } /*! * kernelSetElement() * * Input: kernel * row * col * val * Return: 0 if OK; 1 on error */ l_int32 kernelSetElement(L_KERNEL *kel, l_int32 row, l_int32 col, l_float32 val) { PROCNAME("kernelSetElement"); if (!kel) return ERROR_INT("kel not defined", procName, 1); if (row < 0 || row >= kel->sy) return ERROR_INT("kernel row out of bounds", procName, 1); if (col < 0 || col >= kel->sx) return ERROR_INT("kernel col out of bounds", procName, 1); kel->data[row][col] = val; return 0; } /*! * kernelGetParameters() * * Input: kernel * &sy, &sx, &cy, &cx (; each can be null) * Return: 0 if OK, 1 on error */ l_int32 kernelGetParameters(L_KERNEL *kel, l_int32 *psy, l_int32 *psx, l_int32 *pcy, l_int32 *pcx) { PROCNAME("kernelGetParameters"); if (psy) *psy = 0; if (psx) *psx = 0; if (pcy) *pcy = 0; if (pcx) *pcx = 0; if (!kel) return ERROR_INT("kernel not defined", procName, 1); if (psy) *psy = kel->sy; if (psx) *psx = kel->sx; if (pcy) *pcy = kel->cy; if (pcx) *pcx = kel->cx; return 0; } /*! * kernelSetOrigin() * * Input: kernel * cy, cx * Return: 0 if OK; 1 on error */ l_int32 kernelSetOrigin(L_KERNEL *kel, l_int32 cy, l_int32 cx) { PROCNAME("kernelSetOrigin"); if (!kel) return ERROR_INT("kel not defined", procName, 1); kel->cy = cy; kel->cx = cx; return 0; } /*! * kernelGetSum() * * Input: kernel * &sum ( sum of all kernel values) * Return: 0 if OK, 1 on error */ l_int32 kernelGetSum(L_KERNEL *kel, l_float32 *psum) { l_int32 sx, sy, i, j; PROCNAME("kernelGetSum"); if (!psum) return ERROR_INT("&sum not defined", procName, 1); *psum = 0.0; if (!kel) return ERROR_INT("kernel not defined", procName, 1); kernelGetParameters(kel, &sy, &sx, NULL, NULL); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { *psum += kel->data[i][j]; } } return 0; } /*! * kernelGetMinMax() * * Input: kernel * &min ( minimum value) * &max ( maximum value) * Return: 0 if OK, 1 on error */ l_int32 kernelGetMinMax(L_KERNEL *kel, l_float32 *pmin, l_float32 *pmax) { l_int32 sx, sy, i, j; l_float32 val, minval, maxval; PROCNAME("kernelGetMinmax"); if (!pmin && !pmax) return ERROR_INT("neither &min nor &max defined", procName, 1); if (pmin) *pmin = 0.0; if (pmax) *pmax = 0.0; if (!kel) return ERROR_INT("kernel not defined", procName, 1); kernelGetParameters(kel, &sy, &sx, NULL, NULL); minval = 10000000.0; maxval = -10000000.0; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { val = kel->data[i][j]; if (val < minval) minval = val; if (val > maxval) maxval = val; } } if (pmin) *pmin = minval; if (pmax) *pmax = maxval; return 0; } /*----------------------------------------------------------------------* * Normalize/Invert * *----------------------------------------------------------------------*/ /*! * kernelNormalize() * * Input: kels (source kel, to be normalized) * normsum (desired sum of elements in keld) * Return: keld (normalized version of kels), or null on error * or if sum of elements is very close to 0) * * Notes: * (1) If the sum of kernel elements is close to 0, do not * try to calculate the normalized kernel. Instead, * return a copy of the input kernel, with a warning. */ L_KERNEL * kernelNormalize(L_KERNEL *kels, l_float32 normsum) { l_int32 i, j, sx, sy, cx, cy; l_float32 sum, factor; L_KERNEL *keld; PROCNAME("kernelNormalize"); if (!kels) return (L_KERNEL *)ERROR_PTR("kels not defined", procName, NULL); kernelGetSum(kels, &sum); if (L_ABS(sum) < 0.00001) { L_WARNING("null sum; not normalizing; returning a copy\n", procName); return kernelCopy(kels); } kernelGetParameters(kels, &sy, &sx, &cy, &cx); if ((keld = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("keld not made", procName, NULL); keld->cy = cy; keld->cx = cx; factor = normsum / sum; for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) keld->data[i][j] = factor * kels->data[i][j]; return keld; } /*! * kernelInvert() * * Input: kels (source kel, to be inverted) * Return: keld (spatially inverted, about the origin), or null on error * * Notes: * (1) For convolution, the kernel is spatially inverted before * a "correlation" operation is done between the kernel and the image. */ L_KERNEL * kernelInvert(L_KERNEL *kels) { l_int32 i, j, sx, sy, cx, cy; L_KERNEL *keld; PROCNAME("kernelInvert"); if (!kels) return (L_KERNEL *)ERROR_PTR("kels not defined", procName, NULL); kernelGetParameters(kels, &sy, &sx, &cy, &cx); if ((keld = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("keld not made", procName, NULL); keld->cy = sy - 1 - cy; keld->cx = sx - 1 - cx; for (i = 0; i < sy; i++) for (j = 0; j < sx; j++) keld->data[i][j] = kels->data[sy - 1 - i][sx - 1 - j]; return keld; } /*----------------------------------------------------------------------* * Helper function * *----------------------------------------------------------------------*/ /*! * create2dFloatArray() * * Input: sy (rows == height) * sx (columns == width) * Return: doubly indexed array (i.e., an array of sy row pointers, * each of which points to an array of sx floats) * * Notes: * (1) The array[sy][sx] is indexed in standard "matrix notation", * with the row index first. */ l_float32 ** create2dFloatArray(l_int32 sy, l_int32 sx) { l_int32 i; l_float32 **array; PROCNAME("create2dFloatArray"); if ((array = (l_float32 **)CALLOC(sy, sizeof(l_float32 *))) == NULL) return (l_float32 **)ERROR_PTR("ptr array not made", procName, NULL); for (i = 0; i < sy; i++) { if ((array[i] = (l_float32 *)CALLOC(sx, sizeof(l_float32))) == NULL) return (l_float32 **)ERROR_PTR("array not made", procName, NULL); } return array; } /*----------------------------------------------------------------------* * Kernel serialized I/O * *----------------------------------------------------------------------*/ /*! * kernelRead() * * Input: filename * Return: kernel, or null on error */ L_KERNEL * kernelRead(const char *fname) { FILE *fp; L_KERNEL *kel; PROCNAME("kernelRead"); if (!fname) return (L_KERNEL *)ERROR_PTR("fname not defined", procName, NULL); if ((fp = fopenReadStream(fname)) == NULL) return (L_KERNEL *)ERROR_PTR("stream not opened", procName, NULL); if ((kel = kernelReadStream(fp)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not returned", procName, NULL); fclose(fp); return kel; } /*! * kernelReadStream() * * Input: stream * Return: kernel, or null on error */ L_KERNEL * kernelReadStream(FILE *fp) { l_int32 sy, sx, cy, cx, i, j, ret, version, ignore; L_KERNEL *kel; PROCNAME("kernelReadStream"); if (!fp) return (L_KERNEL *)ERROR_PTR("stream not defined", procName, NULL); ret = fscanf(fp, " Kernel Version %d\n", &version); if (ret != 1) return (L_KERNEL *)ERROR_PTR("not a kernel file", procName, NULL); if (version != KERNEL_VERSION_NUMBER) return (L_KERNEL *)ERROR_PTR("invalid kernel version", procName, NULL); if (fscanf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", &sy, &sx, &cy, &cx) != 4) return (L_KERNEL *)ERROR_PTR("dimensions not read", procName, NULL); if ((kel = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); kernelSetOrigin(kel, cy, cx); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) ignore = fscanf(fp, "%15f", &kel->data[i][j]); ignore = fscanf(fp, "\n"); } ignore = fscanf(fp, "\n"); return kel; } /*! * kernelWrite() * * Input: fname (output file) * kernel * Return: 0 if OK, 1 on error */ l_int32 kernelWrite(const char *fname, L_KERNEL *kel) { FILE *fp; PROCNAME("kernelWrite"); if (!fname) return ERROR_INT("fname not defined", procName, 1); if (!kel) return ERROR_INT("kel not defined", procName, 1); if ((fp = fopenWriteStream(fname, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); kernelWriteStream(fp, kel); fclose(fp); return 0; } /*! * kernelWriteStream() * * Input: stream * kel * Return: 0 if OK, 1 on error */ l_int32 kernelWriteStream(FILE *fp, L_KERNEL *kel) { l_int32 sx, sy, cx, cy, i, j; PROCNAME("kernelWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!kel) return ERROR_INT("kel not defined", procName, 1); kernelGetParameters(kel, &sy, &sx, &cy, &cx); fprintf(fp, " Kernel Version %d\n", KERNEL_VERSION_NUMBER); fprintf(fp, " sy = %d, sx = %d, cy = %d, cx = %d\n", sy, sx, cy, cx); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) fprintf(fp, "%15.4f", kel->data[i][j]); fprintf(fp, "\n"); } fprintf(fp, "\n"); return 0; } /*----------------------------------------------------------------------* * Making a kernel from a compiled string * *----------------------------------------------------------------------*/ /*! * kernelCreateFromString() * * Input: height, width * cy, cx (origin) * kdata * Return: kernel of the given size, or null on error * * Notes: * (1) The data is an array of chars, in row-major order, giving * space separated integers in the range [-255 ... 255]. * (2) The only other formatting limitation is that you must * leave space between the last number in each row and * the double-quote. If possible, it's also nice to have each * line in the string represent a line in the kernel; e.g., * static const char *kdata = * " 20 50 20 " * " 70 140 70 " * " 20 50 20 "; */ L_KERNEL * kernelCreateFromString(l_int32 h, l_int32 w, l_int32 cy, l_int32 cx, const char *kdata) { l_int32 n, i, j, index; l_float32 val; L_KERNEL *kel; NUMA *na; PROCNAME("kernelCreateFromString"); if (h < 1) return (L_KERNEL *)ERROR_PTR("height must be > 0", procName, NULL); if (w < 1) return (L_KERNEL *)ERROR_PTR("width must be > 0", procName, NULL); if (cy < 0 || cy >= h) return (L_KERNEL *)ERROR_PTR("cy invalid", procName, NULL); if (cx < 0 || cx >= w) return (L_KERNEL *)ERROR_PTR("cx invalid", procName, NULL); kel = kernelCreate(h, w); kernelSetOrigin(kel, cy, cx); na = parseStringForNumbers(kdata, " \t\n"); n = numaGetCount(na); if (n != w * h) { numaDestroy(&na); fprintf(stderr, "w = %d, h = %d, num ints = %d\n", w, h, n); return (L_KERNEL *)ERROR_PTR("invalid integer data", procName, NULL); } index = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { numaGetFValue(na, index, &val); kernelSetElement(kel, i, j, val); index++; } } numaDestroy(&na); return kel; } /*----------------------------------------------------------------------* * Making a kernel from a simple file format * *----------------------------------------------------------------------*/ /*! * kernelCreateFromFile() * * Input: filename * Return: kernel, or null on error * * Notes: * (1) The file contains, in the following order: * - Any number of comment lines starting with '#' are ignored * - The height and width of the kernel * - The y and x values of the kernel origin * - The kernel data, formatted as lines of numbers (integers * or floats) for the kernel values in row-major order, * and with no other punctuation. * (Note: this differs from kernelCreateFromString(), * where each line must begin and end with a double-quote * to tell the compiler it's part of a string.) * - The kernel specification ends when a blank line, * a comment line, or the end of file is reached. * (2) All lines must be left-justified. * (3) See kernelCreateFromString() for a description of the string * format for the kernel data. As an example, here are the lines * of a valid kernel description file In the file, all lines * are left-justified: * # small 3x3 kernel * 3 3 * 1 1 * 25.5 51 24.3 * 70.2 146.3 73.4 * 20 50.9 18.4 */ L_KERNEL * kernelCreateFromFile(const char *filename) { char *filestr, *line; l_int32 nlines, i, j, first, index, w, h, cx, cy, n; l_float32 val; size_t size; NUMA *na, *nat; SARRAY *sa; L_KERNEL *kel; PROCNAME("kernelCreateFromFile"); if (!filename) return (L_KERNEL *)ERROR_PTR("filename not defined", procName, NULL); filestr = (char *)l_binaryRead(filename, &size); sa = sarrayCreateLinesFromString(filestr, 1); FREE(filestr); nlines = sarrayGetCount(sa); /* Find the first data line. */ for (i = 0; i < nlines; i++) { line = sarrayGetString(sa, i, L_NOCOPY); if (line[0] != '#') { first = i; break; } } /* Find the kernel dimensions and origin location. */ line = sarrayGetString(sa, first, L_NOCOPY); if (sscanf(line, "%d %d", &h, &w) != 2) return (L_KERNEL *)ERROR_PTR("error reading h,w", procName, NULL); line = sarrayGetString(sa, first + 1, L_NOCOPY); if (sscanf(line, "%d %d", &cy, &cx) != 2) return (L_KERNEL *)ERROR_PTR("error reading cy,cx", procName, NULL); /* Extract the data. This ends when we reach eof, or when we * encounter a line of data that is either a null string or * contains just a newline. */ na = numaCreate(0); for (i = first + 2; i < nlines; i++) { line = sarrayGetString(sa, i, L_NOCOPY); if (line[0] == '\0' || line[0] == '\n' || line[0] == '#') break; nat = parseStringForNumbers(line, " \t\n"); numaJoin(na, nat, 0, -1); numaDestroy(&nat); } sarrayDestroy(&sa); n = numaGetCount(na); if (n != w * h) { numaDestroy(&na); fprintf(stderr, "w = %d, h = %d, num ints = %d\n", w, h, n); return (L_KERNEL *)ERROR_PTR("invalid integer data", procName, NULL); } kel = kernelCreate(h, w); kernelSetOrigin(kel, cy, cx); index = 0; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { numaGetFValue(na, index, &val); kernelSetElement(kel, i, j, val); index++; } } numaDestroy(&na); return kel; } /*----------------------------------------------------------------------* * Making a kernel from a Pix * *----------------------------------------------------------------------*/ /*! * kernelCreateFromPix() * * Input: pix * cy, cx (origin of kernel) * Return: kernel, or null on error * * Notes: * (1) The origin must be positive and within the dimensions of the pix. */ L_KERNEL * kernelCreateFromPix(PIX *pix, l_int32 cy, l_int32 cx) { l_int32 i, j, w, h, d; l_uint32 val; L_KERNEL *kel; PROCNAME("kernelCreateFromPix"); if (!pix) return (L_KERNEL *)ERROR_PTR("pix not defined", procName, NULL); pixGetDimensions(pix, &w, &h, &d); if (d != 8) return (L_KERNEL *)ERROR_PTR("pix not 8 bpp", procName, NULL); if (cy < 0 || cx < 0 || cy >= h || cx >= w) return (L_KERNEL *)ERROR_PTR("(cy, cx) invalid", procName, NULL); kel = kernelCreate(h, w); kernelSetOrigin(kel, cy, cx); for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { pixGetPixel(pix, j, i, &val); kernelSetElement(kel, i, j, (l_float32)val); } } return kel; } /*----------------------------------------------------------------------* * Display a kernel in a pix * *----------------------------------------------------------------------*/ /*! * kernelDisplayInPix() * * Input: kernel * size (of grid interiors; odd; either 1 or a minimum size * of 17 is enforced) * gthick (grid thickness; either 0 or a minimum size of 2 * is enforced) * Return: pix (display of kernel), or null on error * * Notes: * (1) This gives a visual representation of a kernel. * (2) There are two modes of display: * (a) Grid lines of minimum width 2, surrounding regions * representing kernel elements of minimum size 17, * with a "plus" mark at the kernel origin, or * (b) A pix without grid lines and using 1 pixel per kernel element. * (3) For both cases, the kernel absolute value is displayed, * normalized such that the maximum absolute value is 255. * (4) Large 2D separable kernels should be used for convolution * with two 1D kernels. However, for the bilateral filter, * the computation time is independent of the size of the * 2D content kernel. */ PIX * kernelDisplayInPix(L_KERNEL *kel, l_int32 size, l_int32 gthick) { l_int32 i, j, w, h, sx, sy, cx, cy, width, x0, y0; l_int32 normval; l_float32 minval, maxval, max, val, norm; PIX *pixd, *pixt0, *pixt1; PROCNAME("kernelDisplayInPix"); if (!kel) return (PIX *)ERROR_PTR("kernel not defined", procName, NULL); /* Normalize the max value to be 255 for display */ kernelGetParameters(kel, &sy, &sx, &cy, &cx); kernelGetMinMax(kel, &minval, &maxval); max = L_MAX(maxval, -minval); if (max == 0.0) return (PIX *)ERROR_PTR("kernel elements all 0.0", procName, NULL); norm = 255. / (l_float32)max; /* Handle the 1 element/pixel case; typically with large kernels */ if (size == 1 && gthick == 0) { pixd = pixCreate(sx, sy, 8); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { kernelGetElement(kel, i, j, &val); normval = (l_int32)(norm * L_ABS(val)); pixSetPixel(pixd, j, i, normval); } } return pixd; } /* Enforce the constraints for the grid line version */ if (size < 17) { L_WARNING("size < 17; setting to 17\n", procName); size = 17; } if (size % 2 == 0) size++; if (gthick < 2) { L_WARNING("grid thickness < 2; setting to 2\n", procName); gthick = 2; } w = size * sx + gthick * (sx + 1); h = size * sy + gthick * (sy + 1); pixd = pixCreate(w, h, 8); /* Generate grid lines */ for (i = 0; i <= sy; i++) pixRenderLine(pixd, 0, gthick / 2 + i * (size + gthick), w - 1, gthick / 2 + i * (size + gthick), gthick, L_SET_PIXELS); for (j = 0; j <= sx; j++) pixRenderLine(pixd, gthick / 2 + j * (size + gthick), 0, gthick / 2 + j * (size + gthick), h - 1, gthick, L_SET_PIXELS); /* Generate mask for each element */ pixt0 = pixCreate(size, size, 1); pixSetAll(pixt0); /* Generate crossed lines for origin pattern */ pixt1 = pixCreate(size, size, 1); width = size / 8; pixRenderLine(pixt1, size / 2, (l_int32)(0.12 * size), size / 2, (l_int32)(0.88 * size), width, L_SET_PIXELS); pixRenderLine(pixt1, (l_int32)(0.15 * size), size / 2, (l_int32)(0.85 * size), size / 2, width, L_FLIP_PIXELS); pixRasterop(pixt1, size / 2 - width, size / 2 - width, 2 * width, 2 * width, PIX_NOT(PIX_DST), NULL, 0, 0); /* Paste the patterns in */ y0 = gthick; for (i = 0; i < sy; i++) { x0 = gthick; for (j = 0; j < sx; j++) { kernelGetElement(kel, i, j, &val); normval = (l_int32)(norm * L_ABS(val)); pixSetMaskedGeneral(pixd, pixt0, normval, x0, y0); if (i == cy && j == cx) pixPaintThroughMask(pixd, pixt1, x0, y0, 255 - normval); x0 += size + gthick; } y0 += size + gthick; } pixDestroy(&pixt0); pixDestroy(&pixt1); return pixd; } /*------------------------------------------------------------------------* * Parse string to extract numbers * *------------------------------------------------------------------------*/ /*! * parseStringForNumbers() * * Input: string (containing numbers; not changed) * seps (string of characters that can be used between ints) * Return: numa (of numbers found), or null on error * * Note: * (1) The numbers can be ints or floats. */ NUMA * parseStringForNumbers(const char *str, const char *seps) { char *newstr, *head, *tail; l_float32 val; NUMA *na; PROCNAME("parseStringForNumbers"); if (!str) return (NUMA *)ERROR_PTR("str not defined", procName, NULL); newstr = stringNew(str); /* to enforce const-ness of str */ na = numaCreate(0); head = strtokSafe(newstr, seps, &tail); val = atof(head); numaAddNumber(na, val); FREE(head); while ((head = strtokSafe(NULL, seps, &tail)) != NULL) { val = atof(head); numaAddNumber(na, val); FREE(head); } FREE(newstr); return na; } /*------------------------------------------------------------------------* * Simple parametric kernels * *------------------------------------------------------------------------*/ /*! * makeFlatKernel() * * Input: height, width * cy, cx (origin of kernel) * Return: kernel, or null on error * * Notes: * (1) This is the same low-pass filtering kernel that is used * in the block convolution functions. * (2) The kernel origin (@cy, @cx) is typically placed as near * the center of the kernel as possible. If height and * width are odd, then using cy = height / 2 and * cx = width / 2 places the origin at the exact center. * (3) This returns a normalized kernel. */ L_KERNEL * makeFlatKernel(l_int32 height, l_int32 width, l_int32 cy, l_int32 cx) { l_int32 i, j; l_float32 normval; L_KERNEL *kel; PROCNAME("makeFlatKernel"); if ((kel = kernelCreate(height, width)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); kernelSetOrigin(kel, cy, cx); normval = 1.0 / (l_float32)(height * width); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { kernelSetElement(kel, i, j, normval); } } return kel; } /*! * makeGaussianKernel() * * Input: halfheight, halfwidth (sx = 2 * halfwidth + 1, etc) * stdev (standard deviation) * max (value at (cx,cy)) * Return: kernel, or null on error * * Notes: * (1) The kernel size (sx, sy) = (2 * halfwidth + 1, 2 * halfheight + 1). * (2) The kernel center (cx, cy) = (halfwidth, halfheight). * (3) The halfwidth and halfheight are typically equal, and * are typically several times larger than the standard deviation. * (4) If pixConvolve() is invoked with normalization (the sum of * kernel elements = 1.0), use 1.0 for max (or any number that's * not too small or too large). */ L_KERNEL * makeGaussianKernel(l_int32 halfheight, l_int32 halfwidth, l_float32 stdev, l_float32 max) { l_int32 sx, sy, i, j; l_float32 val; L_KERNEL *kel; PROCNAME("makeGaussianKernel"); sx = 2 * halfwidth + 1; sy = 2 * halfheight + 1; if ((kel = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); kernelSetOrigin(kel, halfheight, halfwidth); for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { val = expf(-(l_float32)((i - halfheight) * (i - halfheight) + (j - halfwidth) * (j - halfwidth)) / (2. * stdev * stdev)); kernelSetElement(kel, i, j, max * val); } } return kel; } /*! * makeGaussianKernelSep() * * Input: halfheight, halfwidth (sx = 2 * halfwidth + 1, etc) * stdev (standard deviation) * max (value at (cx,cy)) * &kelx ( x part of kernel) * &kely ( y part of kernel) * Return: 0 if OK, 1 on error * * Notes: * (1) See makeGaussianKernel() for description of input parameters. * (2) These kernels are constructed so that the result of both * normalized and un-normalized convolution will be the same * as when convolving with pixConvolve() using the full kernel. * (3) The trick for the un-normalized convolution is to have the * product of the two kernel elemets at (cx,cy) be equal to max, * not max**2. That's why the max for kely is 1.0. If instead * we use sqrt(max) for both, the results are slightly less * accurate, when compared to using the full kernel in * makeGaussianKernel(). */ l_int32 makeGaussianKernelSep(l_int32 halfheight, l_int32 halfwidth, l_float32 stdev, l_float32 max, L_KERNEL **pkelx, L_KERNEL **pkely) { PROCNAME("makeGaussianKernelSep"); if (!pkelx || !pkely) return ERROR_INT("&kelx and &kely not defined", procName, 1); *pkelx = makeGaussianKernel(0, halfwidth, stdev, max); *pkely = makeGaussianKernel(halfheight, 0, stdev, 1.0); return 0; } /*! * makeDoGKernel() * * Input: halfheight, halfwidth (sx = 2 * halfwidth + 1, etc) * stdev (standard deviation of narrower gaussian) * ratio (of stdev for wide filter to stdev for narrow one) * Return: kernel, or null on error * * Notes: * (1) The DoG (difference of gaussians) is a wavelet mother * function with null total sum. By subtracting two blurred * versions of the image, it acts as a bandpass filter for * frequencies passed by the narrow gaussian but stopped * by the wide one.See: * http://en.wikipedia.org/wiki/Difference_of_Gaussians * (2) The kernel size (sx, sy) = (2 * halfwidth + 1, 2 * halfheight + 1). * (3) The kernel center (cx, cy) = (halfwidth, halfheight). * (4) The halfwidth and halfheight are typically equal, and * are typically several times larger than the standard deviation. * (5) The ratio is the ratio of standard deviations of the wide * to narrow gaussian. It must be >= 1.0; 1.0 is a no-op. * (6) Because the kernel is a null sum, it must be invoked without * normalization in pixConvolve(). */ L_KERNEL * makeDoGKernel(l_int32 halfheight, l_int32 halfwidth, l_float32 stdev, l_float32 ratio) { l_int32 sx, sy, i, j; l_float32 pi, squaredist, highnorm, lownorm, val; L_KERNEL *kel; PROCNAME("makeDoGKernel"); sx = 2 * halfwidth + 1; sy = 2 * halfheight + 1; if ((kel = kernelCreate(sy, sx)) == NULL) return (L_KERNEL *)ERROR_PTR("kel not made", procName, NULL); kernelSetOrigin(kel, halfheight, halfwidth); pi = 3.1415926535; for (i = 0; i < sy; i++) { for (j = 0; j < sx; j++) { squaredist = (l_float32)((i - halfheight) * (i - halfheight) + (j - halfwidth) * (j - halfwidth)); highnorm = 1. / (2 * stdev * stdev); lownorm = highnorm / (ratio * ratio); val = (highnorm / pi) * expf(-(highnorm * squaredist)) - (lownorm / pi) * expf(-(lownorm * squaredist)); kernelSetElement(kel, i, j, val); } } return kel; } leptonica-1.70/src/fmorphgenlow.1.c0000644000175000017500000062426611707052573015335 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Low-level fast binary morphology with auto-generated sels * * Dispatcher: * l_int32 fmorphopgen_low_1() * * Static Low-level: * void fdilate_1_*() * void ferode_1_*() */ #include "allheaders.h" static void fdilate_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_0(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_1(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_2(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_3(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_4(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_5(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_6(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_7(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_8(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_9(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_10(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_11(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_12(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_13(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_14(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_15(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_16(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_17(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_18(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_19(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_20(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_21(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_22(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_23(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_24(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_25(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_26(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_27(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_28(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_29(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_30(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_31(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_32(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_33(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_34(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_35(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_36(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_37(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_38(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_39(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_40(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_41(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_42(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_43(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_44(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_45(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_46(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_47(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_48(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_49(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_50(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_51(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_52(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_53(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_54(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_55(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_56(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void fdilate_1_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); static void ferode_1_57(l_uint32 *, l_int32, l_int32, l_int32, l_uint32 *, l_int32); /*---------------------------------------------------------------------* * Fast morph dispatcher * *---------------------------------------------------------------------*/ /*! * fmorphopgen_low_1() * * a dispatcher to appropriate low-level code */ l_int32 fmorphopgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index) { switch (index) { case 0: fdilate_1_0(datad, w, h, wpld, datas, wpls); break; case 1: ferode_1_0(datad, w, h, wpld, datas, wpls); break; case 2: fdilate_1_1(datad, w, h, wpld, datas, wpls); break; case 3: ferode_1_1(datad, w, h, wpld, datas, wpls); break; case 4: fdilate_1_2(datad, w, h, wpld, datas, wpls); break; case 5: ferode_1_2(datad, w, h, wpld, datas, wpls); break; case 6: fdilate_1_3(datad, w, h, wpld, datas, wpls); break; case 7: ferode_1_3(datad, w, h, wpld, datas, wpls); break; case 8: fdilate_1_4(datad, w, h, wpld, datas, wpls); break; case 9: ferode_1_4(datad, w, h, wpld, datas, wpls); break; case 10: fdilate_1_5(datad, w, h, wpld, datas, wpls); break; case 11: ferode_1_5(datad, w, h, wpld, datas, wpls); break; case 12: fdilate_1_6(datad, w, h, wpld, datas, wpls); break; case 13: ferode_1_6(datad, w, h, wpld, datas, wpls); break; case 14: fdilate_1_7(datad, w, h, wpld, datas, wpls); break; case 15: ferode_1_7(datad, w, h, wpld, datas, wpls); break; case 16: fdilate_1_8(datad, w, h, wpld, datas, wpls); break; case 17: ferode_1_8(datad, w, h, wpld, datas, wpls); break; case 18: fdilate_1_9(datad, w, h, wpld, datas, wpls); break; case 19: ferode_1_9(datad, w, h, wpld, datas, wpls); break; case 20: fdilate_1_10(datad, w, h, wpld, datas, wpls); break; case 21: ferode_1_10(datad, w, h, wpld, datas, wpls); break; case 22: fdilate_1_11(datad, w, h, wpld, datas, wpls); break; case 23: ferode_1_11(datad, w, h, wpld, datas, wpls); break; case 24: fdilate_1_12(datad, w, h, wpld, datas, wpls); break; case 25: ferode_1_12(datad, w, h, wpld, datas, wpls); break; case 26: fdilate_1_13(datad, w, h, wpld, datas, wpls); break; case 27: ferode_1_13(datad, w, h, wpld, datas, wpls); break; case 28: fdilate_1_14(datad, w, h, wpld, datas, wpls); break; case 29: ferode_1_14(datad, w, h, wpld, datas, wpls); break; case 30: fdilate_1_15(datad, w, h, wpld, datas, wpls); break; case 31: ferode_1_15(datad, w, h, wpld, datas, wpls); break; case 32: fdilate_1_16(datad, w, h, wpld, datas, wpls); break; case 33: ferode_1_16(datad, w, h, wpld, datas, wpls); break; case 34: fdilate_1_17(datad, w, h, wpld, datas, wpls); break; case 35: ferode_1_17(datad, w, h, wpld, datas, wpls); break; case 36: fdilate_1_18(datad, w, h, wpld, datas, wpls); break; case 37: ferode_1_18(datad, w, h, wpld, datas, wpls); break; case 38: fdilate_1_19(datad, w, h, wpld, datas, wpls); break; case 39: ferode_1_19(datad, w, h, wpld, datas, wpls); break; case 40: fdilate_1_20(datad, w, h, wpld, datas, wpls); break; case 41: ferode_1_20(datad, w, h, wpld, datas, wpls); break; case 42: fdilate_1_21(datad, w, h, wpld, datas, wpls); break; case 43: ferode_1_21(datad, w, h, wpld, datas, wpls); break; case 44: fdilate_1_22(datad, w, h, wpld, datas, wpls); break; case 45: ferode_1_22(datad, w, h, wpld, datas, wpls); break; case 46: fdilate_1_23(datad, w, h, wpld, datas, wpls); break; case 47: ferode_1_23(datad, w, h, wpld, datas, wpls); break; case 48: fdilate_1_24(datad, w, h, wpld, datas, wpls); break; case 49: ferode_1_24(datad, w, h, wpld, datas, wpls); break; case 50: fdilate_1_25(datad, w, h, wpld, datas, wpls); break; case 51: ferode_1_25(datad, w, h, wpld, datas, wpls); break; case 52: fdilate_1_26(datad, w, h, wpld, datas, wpls); break; case 53: ferode_1_26(datad, w, h, wpld, datas, wpls); break; case 54: fdilate_1_27(datad, w, h, wpld, datas, wpls); break; case 55: ferode_1_27(datad, w, h, wpld, datas, wpls); break; case 56: fdilate_1_28(datad, w, h, wpld, datas, wpls); break; case 57: ferode_1_28(datad, w, h, wpld, datas, wpls); break; case 58: fdilate_1_29(datad, w, h, wpld, datas, wpls); break; case 59: ferode_1_29(datad, w, h, wpld, datas, wpls); break; case 60: fdilate_1_30(datad, w, h, wpld, datas, wpls); break; case 61: ferode_1_30(datad, w, h, wpld, datas, wpls); break; case 62: fdilate_1_31(datad, w, h, wpld, datas, wpls); break; case 63: ferode_1_31(datad, w, h, wpld, datas, wpls); break; case 64: fdilate_1_32(datad, w, h, wpld, datas, wpls); break; case 65: ferode_1_32(datad, w, h, wpld, datas, wpls); break; case 66: fdilate_1_33(datad, w, h, wpld, datas, wpls); break; case 67: ferode_1_33(datad, w, h, wpld, datas, wpls); break; case 68: fdilate_1_34(datad, w, h, wpld, datas, wpls); break; case 69: ferode_1_34(datad, w, h, wpld, datas, wpls); break; case 70: fdilate_1_35(datad, w, h, wpld, datas, wpls); break; case 71: ferode_1_35(datad, w, h, wpld, datas, wpls); break; case 72: fdilate_1_36(datad, w, h, wpld, datas, wpls); break; case 73: ferode_1_36(datad, w, h, wpld, datas, wpls); break; case 74: fdilate_1_37(datad, w, h, wpld, datas, wpls); break; case 75: ferode_1_37(datad, w, h, wpld, datas, wpls); break; case 76: fdilate_1_38(datad, w, h, wpld, datas, wpls); break; case 77: ferode_1_38(datad, w, h, wpld, datas, wpls); break; case 78: fdilate_1_39(datad, w, h, wpld, datas, wpls); break; case 79: ferode_1_39(datad, w, h, wpld, datas, wpls); break; case 80: fdilate_1_40(datad, w, h, wpld, datas, wpls); break; case 81: ferode_1_40(datad, w, h, wpld, datas, wpls); break; case 82: fdilate_1_41(datad, w, h, wpld, datas, wpls); break; case 83: ferode_1_41(datad, w, h, wpld, datas, wpls); break; case 84: fdilate_1_42(datad, w, h, wpld, datas, wpls); break; case 85: ferode_1_42(datad, w, h, wpld, datas, wpls); break; case 86: fdilate_1_43(datad, w, h, wpld, datas, wpls); break; case 87: ferode_1_43(datad, w, h, wpld, datas, wpls); break; case 88: fdilate_1_44(datad, w, h, wpld, datas, wpls); break; case 89: ferode_1_44(datad, w, h, wpld, datas, wpls); break; case 90: fdilate_1_45(datad, w, h, wpld, datas, wpls); break; case 91: ferode_1_45(datad, w, h, wpld, datas, wpls); break; case 92: fdilate_1_46(datad, w, h, wpld, datas, wpls); break; case 93: ferode_1_46(datad, w, h, wpld, datas, wpls); break; case 94: fdilate_1_47(datad, w, h, wpld, datas, wpls); break; case 95: ferode_1_47(datad, w, h, wpld, datas, wpls); break; case 96: fdilate_1_48(datad, w, h, wpld, datas, wpls); break; case 97: ferode_1_48(datad, w, h, wpld, datas, wpls); break; case 98: fdilate_1_49(datad, w, h, wpld, datas, wpls); break; case 99: ferode_1_49(datad, w, h, wpld, datas, wpls); break; case 100: fdilate_1_50(datad, w, h, wpld, datas, wpls); break; case 101: ferode_1_50(datad, w, h, wpld, datas, wpls); break; case 102: fdilate_1_51(datad, w, h, wpld, datas, wpls); break; case 103: ferode_1_51(datad, w, h, wpld, datas, wpls); break; case 104: fdilate_1_52(datad, w, h, wpld, datas, wpls); break; case 105: ferode_1_52(datad, w, h, wpld, datas, wpls); break; case 106: fdilate_1_53(datad, w, h, wpld, datas, wpls); break; case 107: ferode_1_53(datad, w, h, wpld, datas, wpls); break; case 108: fdilate_1_54(datad, w, h, wpld, datas, wpls); break; case 109: ferode_1_54(datad, w, h, wpld, datas, wpls); break; case 110: fdilate_1_55(datad, w, h, wpld, datas, wpls); break; case 111: ferode_1_55(datad, w, h, wpld, datas, wpls); break; case 112: fdilate_1_56(datad, w, h, wpld, datas, wpls); break; case 113: ferode_1_56(datad, w, h, wpld, datas, wpls); break; case 114: fdilate_1_57(datad, w, h, wpld, datas, wpls); break; case 115: ferode_1_57(datad, w, h, wpld, datas, wpls); break; } return 0; } /*--------------------------------------------------------------------------* * Low-level auto-generated static routines * *--------------------------------------------------------------------------*/ /* * N.B. In all the low-level routines, the part of the image * that is accessed has been clipped by 32 pixels on * all four sides. This is done in the higher level * code by redefining w and h smaller and by moving the * start-of-image pointers up to the beginning of this * interior rectangle. */ static void fdilate_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr); } } } static void ferode_1_0(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr); } } } static void fdilate_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_1_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)); } } } static void ferode_1_2(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)); } } } static void fdilate_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_1_3(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_1_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)); } } } static void ferode_1_4(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)); } } } static void fdilate_1_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_1_5(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_1_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)); } } } static void ferode_1_6(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)); } } } static void fdilate_1_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_1_7(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_1_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)); } } } static void ferode_1_8(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)); } } } static void fdilate_1_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_1_9(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_1_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)); } } } static void ferode_1_10(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)); } } } static void fdilate_1_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_1_11(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_1_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)); } } } static void ferode_1_12(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)); } } } static void fdilate_1_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)); } } } static void ferode_1_13(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)); } } } static void fdilate_1_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)); } } } static void ferode_1_14(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)); } } } static void fdilate_1_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)); } } } static void ferode_1_15(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)); } } } static void fdilate_1_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)); } } } static void ferode_1_16(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)); } } } static void fdilate_1_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)); } } } static void ferode_1_17(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)); } } } static void fdilate_1_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)); } } } static void ferode_1_18(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)); } } } static void fdilate_1_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)); } } } static void ferode_1_19(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)); } } } static void fdilate_1_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)); } } } static void ferode_1_20(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)); } } } static void fdilate_1_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)); } } } static void ferode_1_21(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)); } } } static void fdilate_1_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)); } } } static void ferode_1_22(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)); } } } static void fdilate_1_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)); } } } static void ferode_1_23(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)); } } } static void fdilate_1_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 25) | (*(sptr + 1) >> 7)) | ((*(sptr) << 24) | (*(sptr + 1) >> 8)) | ((*(sptr) << 23) | (*(sptr + 1) >> 9)) | ((*(sptr) << 22) | (*(sptr + 1) >> 10)) | ((*(sptr) << 21) | (*(sptr + 1) >> 11)) | ((*(sptr) << 20) | (*(sptr + 1) >> 12)) | ((*(sptr) << 19) | (*(sptr + 1) >> 13)) | ((*(sptr) << 18) | (*(sptr + 1) >> 14)) | ((*(sptr) << 17) | (*(sptr + 1) >> 15)) | ((*(sptr) << 16) | (*(sptr + 1) >> 16)) | ((*(sptr) << 15) | (*(sptr + 1) >> 17)) | ((*(sptr) << 14) | (*(sptr + 1) >> 18)) | ((*(sptr) << 13) | (*(sptr + 1) >> 19)) | ((*(sptr) << 12) | (*(sptr + 1) >> 20)) | ((*(sptr) << 11) | (*(sptr + 1) >> 21)) | ((*(sptr) << 10) | (*(sptr + 1) >> 22)) | ((*(sptr) << 9) | (*(sptr + 1) >> 23)) | ((*(sptr) << 8) | (*(sptr + 1) >> 24)) | ((*(sptr) << 7) | (*(sptr + 1) >> 25)) | ((*(sptr) << 6) | (*(sptr + 1) >> 26)) | ((*(sptr) << 5) | (*(sptr + 1) >> 27)) | ((*(sptr) << 4) | (*(sptr + 1) >> 28)) | ((*(sptr) << 3) | (*(sptr + 1) >> 29)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr) >> 3) | (*(sptr - 1) << 29)) | ((*(sptr) >> 4) | (*(sptr - 1) << 28)) | ((*(sptr) >> 5) | (*(sptr - 1) << 27)) | ((*(sptr) >> 6) | (*(sptr - 1) << 26)) | ((*(sptr) >> 7) | (*(sptr - 1) << 25)) | ((*(sptr) >> 8) | (*(sptr - 1) << 24)) | ((*(sptr) >> 9) | (*(sptr - 1) << 23)) | ((*(sptr) >> 10) | (*(sptr - 1) << 22)) | ((*(sptr) >> 11) | (*(sptr - 1) << 21)) | ((*(sptr) >> 12) | (*(sptr - 1) << 20)) | ((*(sptr) >> 13) | (*(sptr - 1) << 19)) | ((*(sptr) >> 14) | (*(sptr - 1) << 18)) | ((*(sptr) >> 15) | (*(sptr - 1) << 17)) | ((*(sptr) >> 16) | (*(sptr - 1) << 16)) | ((*(sptr) >> 17) | (*(sptr - 1) << 15)) | ((*(sptr) >> 18) | (*(sptr - 1) << 14)) | ((*(sptr) >> 19) | (*(sptr - 1) << 13)) | ((*(sptr) >> 20) | (*(sptr - 1) << 12)) | ((*(sptr) >> 21) | (*(sptr - 1) << 11)) | ((*(sptr) >> 22) | (*(sptr - 1) << 10)) | ((*(sptr) >> 23) | (*(sptr - 1) << 9)) | ((*(sptr) >> 24) | (*(sptr - 1) << 8)) | ((*(sptr) >> 25) | (*(sptr - 1) << 7)); } } } static void ferode_1_24(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 25) | (*(sptr - 1) << 7)) & ((*(sptr) >> 24) | (*(sptr - 1) << 8)) & ((*(sptr) >> 23) | (*(sptr - 1) << 9)) & ((*(sptr) >> 22) | (*(sptr - 1) << 10)) & ((*(sptr) >> 21) | (*(sptr - 1) << 11)) & ((*(sptr) >> 20) | (*(sptr - 1) << 12)) & ((*(sptr) >> 19) | (*(sptr - 1) << 13)) & ((*(sptr) >> 18) | (*(sptr - 1) << 14)) & ((*(sptr) >> 17) | (*(sptr - 1) << 15)) & ((*(sptr) >> 16) | (*(sptr - 1) << 16)) & ((*(sptr) >> 15) | (*(sptr - 1) << 17)) & ((*(sptr) >> 14) | (*(sptr - 1) << 18)) & ((*(sptr) >> 13) | (*(sptr - 1) << 19)) & ((*(sptr) >> 12) | (*(sptr - 1) << 20)) & ((*(sptr) >> 11) | (*(sptr - 1) << 21)) & ((*(sptr) >> 10) | (*(sptr - 1) << 22)) & ((*(sptr) >> 9) | (*(sptr - 1) << 23)) & ((*(sptr) >> 8) | (*(sptr - 1) << 24)) & ((*(sptr) >> 7) | (*(sptr - 1) << 25)) & ((*(sptr) >> 6) | (*(sptr - 1) << 26)) & ((*(sptr) >> 5) | (*(sptr - 1) << 27)) & ((*(sptr) >> 4) | (*(sptr - 1) << 28)) & ((*(sptr) >> 3) | (*(sptr - 1) << 29)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr) << 3) | (*(sptr + 1) >> 29)) & ((*(sptr) << 4) | (*(sptr + 1) >> 28)) & ((*(sptr) << 5) | (*(sptr + 1) >> 27)) & ((*(sptr) << 6) | (*(sptr + 1) >> 26)) & ((*(sptr) << 7) | (*(sptr + 1) >> 25)) & ((*(sptr) << 8) | (*(sptr + 1) >> 24)) & ((*(sptr) << 9) | (*(sptr + 1) >> 23)) & ((*(sptr) << 10) | (*(sptr + 1) >> 22)) & ((*(sptr) << 11) | (*(sptr + 1) >> 21)) & ((*(sptr) << 12) | (*(sptr + 1) >> 20)) & ((*(sptr) << 13) | (*(sptr + 1) >> 19)) & ((*(sptr) << 14) | (*(sptr + 1) >> 18)) & ((*(sptr) << 15) | (*(sptr + 1) >> 17)) & ((*(sptr) << 16) | (*(sptr + 1) >> 16)) & ((*(sptr) << 17) | (*(sptr + 1) >> 15)) & ((*(sptr) << 18) | (*(sptr + 1) >> 14)) & ((*(sptr) << 19) | (*(sptr + 1) >> 13)) & ((*(sptr) << 20) | (*(sptr + 1) >> 12)) & ((*(sptr) << 21) | (*(sptr + 1) >> 11)) & ((*(sptr) << 22) | (*(sptr + 1) >> 10)) & ((*(sptr) << 23) | (*(sptr + 1) >> 9)) & ((*(sptr) << 24) | (*(sptr + 1) >> 8)) & ((*(sptr) << 25) | (*(sptr + 1) >> 7)); } } } static void fdilate_1_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr); } } } static void ferode_1_25(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr); } } } static void fdilate_1_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_1_26(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_1_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)); } } } static void ferode_1_27(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)); } } } static void fdilate_1_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_1_28(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_1_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)); } } } static void ferode_1_29(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)); } } } static void fdilate_1_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_1_30(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3; wpls2 = 2 * wpls; wpls3 = 3 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_1_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)); } } } static void ferode_1_31(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)); } } } static void fdilate_1_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_1_32(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_1_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)); } } } static void ferode_1_33(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)); } } } static void fdilate_1_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_1_34(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_1_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)); } } } static void ferode_1_35(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)); } } } static void fdilate_1_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_1_36(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_1_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)); } } } static void ferode_1_37(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)); } } } static void fdilate_1_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)); } } } static void ferode_1_38(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)); } } } static void fdilate_1_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)); } } } static void ferode_1_39(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)); } } } static void fdilate_1_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)); } } } static void ferode_1_40(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)); } } } static void fdilate_1_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)); } } } static void ferode_1_41(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)); } } } static void fdilate_1_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)); } } } static void ferode_1_42(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)); } } } static void fdilate_1_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)); } } } static void ferode_1_43(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)); } } } static void fdilate_1_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)); } } } static void ferode_1_44(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)); } } } static void fdilate_1_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)); } } } static void ferode_1_45(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)); } } } static void fdilate_1_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)); } } } static void ferode_1_46(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)); } } } static void fdilate_1_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)); } } } static void ferode_1_47(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)); } } } static void fdilate_1_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)); } } } static void ferode_1_48(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)); } } } static void fdilate_1_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr + wpls25)) | (*(sptr + wpls24)) | (*(sptr + wpls23)) | (*(sptr + wpls22)) | (*(sptr + wpls21)) | (*(sptr + wpls20)) | (*(sptr + wpls19)) | (*(sptr + wpls18)) | (*(sptr + wpls17)) | (*(sptr + wpls16)) | (*(sptr + wpls15)) | (*(sptr + wpls14)) | (*(sptr + wpls13)) | (*(sptr + wpls12)) | (*(sptr + wpls11)) | (*(sptr + wpls10)) | (*(sptr + wpls9)) | (*(sptr + wpls8)) | (*(sptr + wpls7)) | (*(sptr + wpls6)) | (*(sptr + wpls5)) | (*(sptr + wpls4)) | (*(sptr + wpls3)) | (*(sptr + wpls2)) | (*(sptr + wpls)) | (*sptr) | (*(sptr - wpls)) | (*(sptr - wpls2)) | (*(sptr - wpls3)) | (*(sptr - wpls4)) | (*(sptr - wpls5)) | (*(sptr - wpls6)) | (*(sptr - wpls7)) | (*(sptr - wpls8)) | (*(sptr - wpls9)) | (*(sptr - wpls10)) | (*(sptr - wpls11)) | (*(sptr - wpls12)) | (*(sptr - wpls13)) | (*(sptr - wpls14)) | (*(sptr - wpls15)) | (*(sptr - wpls16)) | (*(sptr - wpls17)) | (*(sptr - wpls18)) | (*(sptr - wpls19)) | (*(sptr - wpls20)) | (*(sptr - wpls21)) | (*(sptr - wpls22)) | (*(sptr - wpls23)) | (*(sptr - wpls24)) | (*(sptr - wpls25)); } } } static void ferode_1_49(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2, wpls3, wpls4; l_int32 wpls5, wpls6, wpls7, wpls8; l_int32 wpls9, wpls10, wpls11, wpls12; l_int32 wpls13, wpls14, wpls15, wpls16; l_int32 wpls17, wpls18, wpls19, wpls20; l_int32 wpls21, wpls22, wpls23, wpls24; l_int32 wpls25; wpls2 = 2 * wpls; wpls3 = 3 * wpls; wpls4 = 4 * wpls; wpls5 = 5 * wpls; wpls6 = 6 * wpls; wpls7 = 7 * wpls; wpls8 = 8 * wpls; wpls9 = 9 * wpls; wpls10 = 10 * wpls; wpls11 = 11 * wpls; wpls12 = 12 * wpls; wpls13 = 13 * wpls; wpls14 = 14 * wpls; wpls15 = 15 * wpls; wpls16 = 16 * wpls; wpls17 = 17 * wpls; wpls18 = 18 * wpls; wpls19 = 19 * wpls; wpls20 = 20 * wpls; wpls21 = 21 * wpls; wpls22 = 22 * wpls; wpls23 = 23 * wpls; wpls24 = 24 * wpls; wpls25 = 25 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*(sptr - wpls25)) & (*(sptr - wpls24)) & (*(sptr - wpls23)) & (*(sptr - wpls22)) & (*(sptr - wpls21)) & (*(sptr - wpls20)) & (*(sptr - wpls19)) & (*(sptr - wpls18)) & (*(sptr - wpls17)) & (*(sptr - wpls16)) & (*(sptr - wpls15)) & (*(sptr - wpls14)) & (*(sptr - wpls13)) & (*(sptr - wpls12)) & (*(sptr - wpls11)) & (*(sptr - wpls10)) & (*(sptr - wpls9)) & (*(sptr - wpls8)) & (*(sptr - wpls7)) & (*(sptr - wpls6)) & (*(sptr - wpls5)) & (*(sptr - wpls4)) & (*(sptr - wpls3)) & (*(sptr - wpls2)) & (*(sptr - wpls)) & (*sptr) & (*(sptr + wpls)) & (*(sptr + wpls2)) & (*(sptr + wpls3)) & (*(sptr + wpls4)) & (*(sptr + wpls5)) & (*(sptr + wpls6)) & (*(sptr + wpls7)) & (*(sptr + wpls8)) & (*(sptr + wpls9)) & (*(sptr + wpls10)) & (*(sptr + wpls11)) & (*(sptr + wpls12)) & (*(sptr + wpls13)) & (*(sptr + wpls14)) & (*(sptr + wpls15)) & (*(sptr + wpls16)) & (*(sptr + wpls17)) & (*(sptr + wpls18)) & (*(sptr + wpls19)) & (*(sptr + wpls20)) & (*(sptr + wpls21)) & (*(sptr + wpls22)) & (*(sptr + wpls23)) & (*(sptr + wpls24)) & (*(sptr + wpls25)); } } } static void fdilate_1_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr); } } } static void ferode_1_50(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr); } } } static void fdilate_1_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | (*(sptr - wpls)) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); } } } static void ferode_1_51(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); } } } static void fdilate_1_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) | (*(sptr + wpls2)) | ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) | ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) | ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | (*(sptr - wpls)) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); } } } static void ferode_1_52(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); } } } static void fdilate_1_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) | (*(sptr + wpls2)) | ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) | ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) | ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) | ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*(sptr + wpls)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) | ((*(sptr) << 2) | (*(sptr + 1) >> 30)) | ((*(sptr) << 1) | (*(sptr + 1) >> 31)) | (*sptr) | ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | ((*(sptr) >> 2) | (*(sptr - 1) << 30)) | ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | (*(sptr - wpls)) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) | ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) | ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) | ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) | (*(sptr - wpls2)) | ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) | ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)); } } } static void ferode_1_53(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls2) >> 1) | (*(sptr - wpls2 - 1) << 31)) & (*(sptr - wpls2)) & ((*(sptr - wpls2) << 1) | (*(sptr - wpls2 + 1) >> 31)) & ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((*(sptr - wpls) >> 2) | (*(sptr - wpls - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*(sptr - wpls)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & ((*(sptr - wpls) << 2) | (*(sptr - wpls + 1) >> 30)) & ((*(sptr) >> 2) | (*(sptr - 1) << 30)) & ((*(sptr) >> 1) | (*(sptr - 1) << 31)) & (*sptr) & ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & ((*(sptr) << 2) | (*(sptr + 1) >> 30)) & ((*(sptr + wpls) >> 2) | (*(sptr + wpls - 1) << 30)) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & (*(sptr + wpls)) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls) << 2) | (*(sptr + wpls + 1) >> 30)) & ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) & ((*(sptr + wpls2) >> 1) | (*(sptr + wpls2 - 1) << 31)) & (*(sptr + wpls2)) & ((*(sptr + wpls2) << 1) | (*(sptr + wpls2 + 1) >> 31)) & ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); } } } static void fdilate_1_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) >> 1) | (*(sptr - 1) << 31)) | (*(sptr - wpls)); } } } static void ferode_1_54(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr) << 1) | (*(sptr + 1) >> 31)) & (*(sptr + wpls)); } } } static void fdilate_1_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)); } } } static void ferode_1_55(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = (*sptr) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)); } } } static void fdilate_1_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)) | ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) | (*sptr) | ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) | ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)); } } } static void ferode_1_56(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) << 2) | (*(sptr - wpls2 + 1) >> 30)) & ((*(sptr - wpls) << 1) | (*(sptr - wpls + 1) >> 31)) & (*sptr) & ((*(sptr + wpls) >> 1) | (*(sptr + wpls - 1) << 31)) & ((*(sptr + wpls2) >> 2) | (*(sptr + wpls2 - 1) << 30)); } } } static void fdilate_1_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)) | ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) | (*sptr) | ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) | ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)); } } } static void ferode_1_57(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls) { l_int32 i; register l_int32 j, pwpls; register l_uint32 *sptr, *dptr; l_int32 wpls2; wpls2 = 2 * wpls; pwpls = (l_uint32)(w + 31) / 32; /* proper wpl of src */ for (i = 0; i < h; i++) { sptr = datas + i * wpls; dptr = datad + i * wpld; for (j = 0; j < pwpls; j++, sptr++, dptr++) { *dptr = ((*(sptr - wpls2) >> 2) | (*(sptr - wpls2 - 1) << 30)) & ((*(sptr - wpls) >> 1) | (*(sptr - wpls - 1) << 31)) & (*sptr) & ((*(sptr + wpls) << 1) | (*(sptr + wpls + 1) >> 31)) & ((*(sptr + wpls2) << 2) | (*(sptr + wpls2 + 1) >> 30)); } } } leptonica-1.70/src/scalelow.c0000664000175000017500000027063012257071342014266 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * scalelow.c * * Color (interpolated) scaling: general case * void scaleColorLILow() * * Grayscale (interpolated) scaling: general case * void scaleGrayLILow() * * Color (interpolated) scaling: 2x upscaling * void scaleColor2xLILow() * void scaleColor2xLILineLow() * * Grayscale (interpolated) scaling: 2x upscaling * void scaleGray2xLILow() * void scaleGray2xLILineLow() * * Grayscale (interpolated) scaling: 4x upscaling * void scaleGray4xLILow() * void scaleGray4xLILineLow() * * Grayscale and color scaling by closest pixel sampling * l_int32 scaleBySamplingLow() * * Color and grayscale downsampling with (antialias) lowpass filter * l_int32 scaleSmoothLow() * void scaleRGBToGray2Low() * * Color and grayscale downsampling with (antialias) area mapping * l_int32 scaleColorAreaMapLow() * l_int32 scaleGrayAreaMapLow() * l_int32 scaleAreaMapLow2() * * Binary scaling by closest pixel sampling * l_int32 scaleBinaryLow() * * Scale-to-gray 2x * void scaleToGray2Low() * l_uint32 *makeSumTabSG2() * l_uint8 *makeValTabSG2() * * Scale-to-gray 3x * void scaleToGray3Low() * l_uint32 *makeSumTabSG3() * l_uint8 *makeValTabSG3() * * Scale-to-gray 4x * void scaleToGray4Low() * l_uint32 *makeSumTabSG4() * l_uint8 *makeValTabSG4() * * Scale-to-gray 6x * void scaleToGray6Low() * l_uint8 *makeValTabSG6() * * Scale-to-gray 8x * void scaleToGray8Low() * l_uint8 *makeValTabSG8() * * Scale-to-gray 16x * void scaleToGray16Low() * * Grayscale mipmap * l_int32 scaleMipmapLow() * */ #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_OVERFLOW 0 #define DEBUG_UNROLLING 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * General linear interpolated color scaling * *------------------------------------------------------------------*/ /*! * scaleColorLILow() * * We choose to divide each pixel into 16 x 16 sub-pixels. * Linear interpolation is equivalent to finding the * fractional area (i.e., number of sub-pixels divided * by 256) associated with each of the four nearest src pixels, * and weighting each pixel value by this fractional area. * * P3 speed is about 7 x 10^6 dst pixels/sec/GHz */ void scaleColorLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm; /* location in src image, to 1/16 of a pixel */ l_int32 xp, yp, xf, yf; /* src pixel and pixel fraction coordinates */ l_int32 v00r, v01r, v10r, v11r, v00g, v01g, v10g, v11g; l_int32 v00b, v01b, v10b, v11b, area00, area01, area10, area11; l_uint32 pixels1, pixels2, pixels3, pixels4, pixel; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16. * (l_float32)ws / (l_float32)wd; scy = 16. * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { ypm = (l_int32)(scy * (l_float32)i); yp = ypm >> 4; yf = ypm & 0x0f; lined = datad + i * wpld; lines = datas + yp * wpls; for (j = 0; j < wd; j++) { xpm = (l_int32)(scx * (l_float32)j); xp = xpm >> 4; xf = xpm & 0x0f; /* Do bilinear interpolation. This is a simple * generalization of the calculation in scaleGrayLILow(). * Without this, we could simply subsample: * *(lined + j) = *(lines + xp); * which is faster but gives lousy results! */ pixels1 = *(lines + xp); if (xp > wm2 || yp > hm2) { if (yp > hm2 && xp <= wm2) { /* pixels near bottom */ pixels2 = *(lines + xp + 1); pixels3 = pixels1; pixels4 = pixels2; } else if (xp > wm2 && yp <= hm2) { /* pixels near rt side */ pixels2 = pixels1; pixels3 = *(lines + wpls + xp); pixels4 = pixels3; } else { /* pixels at LR corner */ pixels4 = pixels3 = pixels2 = pixels1; } } else { pixels2 = *(lines + xp + 1); pixels3 = *(lines + wpls + xp); pixels4 = *(lines + wpls + xp + 1); } area00 = (16 - xf) * (16 - yf); area10 = xf * (16 - yf); area01 = (16 - xf) * yf; area11 = xf * yf; v00r = area00 * ((pixels1 >> L_RED_SHIFT) & 0xff); v00g = area00 * ((pixels1 >> L_GREEN_SHIFT) & 0xff); v00b = area00 * ((pixels1 >> L_BLUE_SHIFT) & 0xff); v10r = area10 * ((pixels2 >> L_RED_SHIFT) & 0xff); v10g = area10 * ((pixels2 >> L_GREEN_SHIFT) & 0xff); v10b = area10 * ((pixels2 >> L_BLUE_SHIFT) & 0xff); v01r = area01 * ((pixels3 >> L_RED_SHIFT) & 0xff); v01g = area01 * ((pixels3 >> L_GREEN_SHIFT) & 0xff); v01b = area01 * ((pixels3 >> L_BLUE_SHIFT) & 0xff); v11r = area11 * ((pixels4 >> L_RED_SHIFT) & 0xff); v11g = area11 * ((pixels4 >> L_GREEN_SHIFT) & 0xff); v11b = area11 * ((pixels4 >> L_BLUE_SHIFT) & 0xff); pixel = (((v00r + v10r + v01r + v11r + 128) << 16) & 0xff000000) | (((v00g + v10g + v01g + v11g + 128) << 8) & 0x00ff0000) | ((v00b + v10b + v01b + v11b + 128) & 0x0000ff00); *(lined + j) = pixel; } } return; } /*------------------------------------------------------------------* * General linear interpolated gray scaling * *------------------------------------------------------------------*/ /*! * scaleGrayLILow() * * We choose to divide each pixel into 16 x 16 sub-pixels. * Linear interpolation is equivalent to finding the * fractional area (i.e., number of sub-pixels divided * by 256) associated with each of the four nearest src pixels, * and weighting each pixel value by this fractional area. */ void scaleGrayLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm; /* location in src image, to 1/16 of a pixel */ l_int32 xp, yp, xf, yf; /* src pixel and pixel fraction coordinates */ l_int32 v00, v01, v10, v11, v00_val, v01_val, v10_val, v11_val; l_uint8 val; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16. * (l_float32)ws / (l_float32)wd; scy = 16. * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { ypm = (l_int32)(scy * (l_float32)i); yp = ypm >> 4; yf = ypm & 0x0f; lined = datad + i * wpld; lines = datas + yp * wpls; for (j = 0; j < wd; j++) { xpm = (l_int32)(scx * (l_float32)j); xp = xpm >> 4; xf = xpm & 0x0f; /* Do bilinear interpolation. Without this, we could * simply subsample: * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); * which is faster but gives lousy results! */ v00_val = GET_DATA_BYTE(lines, xp); if (xp > wm2 || yp > hm2) { if (yp > hm2 && xp <= wm2) { /* pixels near bottom */ v01_val = v00_val; v10_val = GET_DATA_BYTE(lines, xp + 1); v11_val = v10_val; } else if (xp > wm2 && yp <= hm2) { /* pixels near rt side */ v01_val = GET_DATA_BYTE(lines + wpls, xp); v10_val = v00_val; v11_val = v01_val; } else { /* pixels at LR corner */ v10_val = v01_val = v11_val = v00_val; } } else { v10_val = GET_DATA_BYTE(lines, xp + 1); v01_val = GET_DATA_BYTE(lines + wpls, xp); v11_val = GET_DATA_BYTE(lines + wpls, xp + 1); } v00 = (16 - xf) * (16 - yf) * v00_val; v10 = xf * (16 - yf) * v10_val; v01 = (16 - xf) * yf * v01_val; v11 = xf * yf * v11_val; val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); SET_DATA_BYTE(lined, j, val); } } return; } /*------------------------------------------------------------------* * 2x linear interpolated color scaling * *------------------------------------------------------------------*/ /*! * scaleColor2xLILow() * * This is a special case of 2x expansion by linear * interpolation. Each src pixel contains 4 dest pixels. * The 4 dest pixels in src pixel 1 are numbered at * their UL corners. The 4 dest pixels in src pixel 1 * are related to that src pixel and its 3 neighboring * src pixels as follows: * * 1-----2-----|-----|-----| * | | | | | * | | | | | * src 1 --> 3-----4-----| | | <-- src 2 * | | | | | * | | | | | * |-----|-----|-----|-----| * | | | | | * | | | | | * src 3 --> | | | | | <-- src 4 * | | | | | * | | | | | * |-----|-----|-----|-----| * * dest src * ---- --- * dp1 = sp1 * dp2 = (sp1 + sp2) / 2 * dp3 = (sp1 + sp3) / 2 * dp4 = (sp1 + sp2 + sp3 + sp4) / 4 * * We iterate over the src pixels, and unroll the calculation * for each set of 4 dest pixels corresponding to that src * pixel, caching pixels for the next src pixel whenever possible. * The method is exactly analogous to the one we use for * scaleGray2xLILow() and its line version. * * P3 speed is about 5 x 10^7 dst pixels/sec/GHz */ void scaleColor2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, hsm; l_uint32 *lines, *lined; hsm = hs - 1; /* We're taking 2 src and 2 dest lines at a time, * and for each src line, we're computing 2 dest lines. * Call these 2 dest lines: destline1 and destline2. * The first src line is used for destline 1. * On all but the last src line, both src lines are * used in the linear interpolation for destline2. * On the last src line, both destline1 and destline2 * are computed using only that src line (because there * isn't a lower src line). */ /* iterate over all but the last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; scaleColor2xLILineLow(lined, wpld, lines, ws, wpls, 0); } /* last src line */ lines = datas + hsm * wpls; lined = datad + 2 * hsm * wpld; scaleColor2xLILineLow(lined, wpld, lines, ws, wpls, 1); return; } /*! * scaleColor2xLILineLow() * * Input: lined (ptr to top destline, to be made from current src line) * wpld * lines (ptr to current src line) * ws * wpls * lastlineflag (1 if last src line; 0 otherwise) * Return: void * * *** Warning: implicit assumption about RGB component ordering *** */ void scaleColor2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag) { l_int32 j, jd, wsm; l_int32 rval1, rval2, rval3, rval4, gval1, gval2, gval3, gval4; l_int32 bval1, bval2, bval3, bval4; l_uint32 pixels1, pixels2, pixels3, pixels4, pixel; l_uint32 *linesp, *linedp; wsm = ws - 1; if (lastlineflag == 0) { linesp = lines + wpls; linedp = lined + wpld; pixels1 = *lines; pixels3 = *linesp; /* initialize with v(2) and v(4) */ rval2 = pixels1 >> 24; gval2 = (pixels1 >> 16) & 0xff; bval2 = (pixels1 >> 8) & 0xff; rval4 = pixels3 >> 24; gval4 = (pixels3 >> 16) & 0xff; bval4 = (pixels3 >> 8) & 0xff; for (j = 0, jd = 0; j < wsm; j++, jd += 2) { /* shift in previous src values */ rval1 = rval2; gval1 = gval2; bval1 = bval2; rval3 = rval4; gval3 = gval4; bval3 = bval4; /* get new src values */ pixels2 = *(lines + j + 1); pixels4 = *(linesp + j + 1); rval2 = pixels2 >> 24; gval2 = (pixels2 >> 16) & 0xff; bval2 = (pixels2 >> 8) & 0xff; rval4 = pixels4 >> 24; gval4 = (pixels4 >> 16) & 0xff; bval4 = (pixels4 >> 8) & 0xff; /* save dest values */ pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + jd) = pixel; /* pix 1 */ pixel = ((((rval1 + rval2) << 23) & 0xff000000) | (((gval1 + gval2) << 15) & 0x00ff0000) | (((bval1 + bval2) << 7) & 0x0000ff00)); *(lined + jd + 1) = pixel; /* pix 2 */ pixel = ((((rval1 + rval3) << 23) & 0xff000000) | (((gval1 + gval3) << 15) & 0x00ff0000) | (((bval1 + bval3) << 7) & 0x0000ff00)); *(linedp + jd) = pixel; /* pix 3 */ pixel = ((((rval1 + rval2 + rval3 + rval4) << 22) & 0xff000000) | (((gval1 + gval2 + gval3 + gval4) << 14) & 0x00ff0000) | (((bval1 + bval2 + bval3 + bval4) << 6) & 0x0000ff00)); *(linedp + jd + 1) = pixel; /* pix 4 */ } /* last src pixel on line */ rval1 = rval2; gval1 = gval2; bval1 = bval2; rval3 = rval4; gval3 = gval4; bval3 = bval4; pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + 2 * wsm) = pixel; /* pix 1 */ *(lined + 2 * wsm + 1) = pixel; /* pix 2 */ pixel = ((((rval1 + rval3) << 23) & 0xff000000) | (((gval1 + gval3) << 15) & 0x00ff0000) | (((bval1 + bval3) << 7) & 0x0000ff00)); *(linedp + 2 * wsm) = pixel; /* pix 3 */ *(linedp + 2 * wsm + 1) = pixel; /* pix 4 */ } else { /* last row of src pixels: lastlineflag == 1 */ linedp = lined + wpld; pixels2 = *lines; rval2 = pixels2 >> 24; gval2 = (pixels2 >> 16) & 0xff; bval2 = (pixels2 >> 8) & 0xff; for (j = 0, jd = 0; j < wsm; j++, jd += 2) { rval1 = rval2; gval1 = gval2; bval1 = bval2; pixels2 = *(lines + j + 1); rval2 = pixels2 >> 24; gval2 = (pixels2 >> 16) & 0xff; bval2 = (pixels2 >> 8) & 0xff; pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + jd) = pixel; /* pix 1 */ *(linedp + jd) = pixel; /* pix 2 */ pixel = ((((rval1 + rval2) << 23) & 0xff000000) | (((gval1 + gval2) << 15) & 0x00ff0000) | (((bval1 + bval2) << 7) & 0x0000ff00)); *(lined + jd + 1) = pixel; /* pix 3 */ *(linedp + jd + 1) = pixel; /* pix 4 */ } rval1 = rval2; gval1 = gval2; bval1 = bval2; pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8); *(lined + 2 * wsm) = pixel; /* pix 1 */ *(lined + 2 * wsm + 1) = pixel; /* pix 2 */ *(linedp + 2 * wsm) = pixel; /* pix 3 */ *(linedp + 2 * wsm + 1) = pixel; /* pix 4 */ } return; } /*------------------------------------------------------------------* * 2x linear interpolated gray scaling * *------------------------------------------------------------------*/ /*! * scaleGray2xLILow() * * This is a special case of 2x expansion by linear * interpolation. Each src pixel contains 4 dest pixels. * The 4 dest pixels in src pixel 1 are numbered at * their UL corners. The 4 dest pixels in src pixel 1 * are related to that src pixel and its 3 neighboring * src pixels as follows: * * 1-----2-----|-----|-----| * | | | | | * | | | | | * src 1 --> 3-----4-----| | | <-- src 2 * | | | | | * | | | | | * |-----|-----|-----|-----| * | | | | | * | | | | | * src 3 --> | | | | | <-- src 4 * | | | | | * | | | | | * |-----|-----|-----|-----| * * dest src * ---- --- * dp1 = sp1 * dp2 = (sp1 + sp2) / 2 * dp3 = (sp1 + sp3) / 2 * dp4 = (sp1 + sp2 + sp3 + sp4) / 4 * * We iterate over the src pixels, and unroll the calculation * for each set of 4 dest pixels corresponding to that src * pixel, caching pixels for the next src pixel whenever possible. */ void scaleGray2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, hsm; l_uint32 *lines, *lined; hsm = hs - 1; /* We're taking 2 src and 2 dest lines at a time, * and for each src line, we're computing 2 dest lines. * Call these 2 dest lines: destline1 and destline2. * The first src line is used for destline 1. * On all but the last src line, both src lines are * used in the linear interpolation for destline2. * On the last src line, both destline1 and destline2 * are computed using only that src line (because there * isn't a lower src line). */ /* iterate over all but the last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; scaleGray2xLILineLow(lined, wpld, lines, ws, wpls, 0); } /* last src line */ lines = datas + hsm * wpls; lined = datad + 2 * hsm * wpld; scaleGray2xLILineLow(lined, wpld, lines, ws, wpls, 1); return; } /*! * scaleGray2xLILineLow() * * Input: lined (ptr to top destline, to be made from current src line) * wpld * lines (ptr to current src line) * ws * wpls * lastlineflag (1 if last src line; 0 otherwise) * Return: void */ void scaleGray2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag) { l_int32 j, jd, wsm, w; l_int32 sval1, sval2, sval3, sval4; l_uint32 *linesp, *linedp; l_uint32 words, wordsp, wordd, worddp; wsm = ws - 1; if (lastlineflag == 0) { linesp = lines + wpls; linedp = lined + wpld; /* Unroll the loop 4x and work on full words */ words = lines[0]; wordsp = linesp[0]; sval2 = (words >> 24) & 0xff; sval4 = (wordsp >> 24) & 0xff; for (j = 0, jd = 0, w = 0; j + 3 < wsm; j += 4, jd += 8, w++) { /* At the top of the loop, * words == lines[w], wordsp == linesp[w] * and the top bytes of those have been loaded into * sval2 and sval4. */ sval1 = sval2; sval2 = (words >> 16) & 0xff; sval3 = sval4; sval4 = (wordsp >> 16) & 0xff; wordd = (sval1 << 24) | (((sval1 + sval2) >> 1) << 16); worddp = (((sval1 + sval3) >> 1) << 24) | (((sval1 + sval2 + sval3 + sval4) >> 2) << 16); sval1 = sval2; sval2 = (words >> 8) & 0xff; sval3 = sval4; sval4 = (wordsp >> 8) & 0xff; wordd |= (sval1 << 8) | ((sval1 + sval2) >> 1); worddp |= (((sval1 + sval3) >> 1) << 8) | ((sval1 + sval2 + sval3 + sval4) >> 2); lined[w * 2] = wordd; linedp[w * 2] = worddp; sval1 = sval2; sval2 = words & 0xff; sval3 = sval4; sval4 = wordsp & 0xff; wordd = (sval1 << 24) | /* pix 1 */ (((sval1 + sval2) >> 1) << 16); /* pix 2 */ worddp = (((sval1 + sval3) >> 1) << 24) | /* pix 3 */ (((sval1 + sval2 + sval3 + sval4) >> 2) << 16); /* pix 4 */ /* Load the next word as we need its first byte */ words = lines[w + 1]; wordsp = linesp[w + 1]; sval1 = sval2; sval2 = (words >> 24) & 0xff; sval3 = sval4; sval4 = (wordsp >> 24) & 0xff; wordd |= (sval1 << 8) | /* pix 1 */ ((sval1 + sval2) >> 1); /* pix 2 */ worddp |= (((sval1 + sval3) >> 1) << 8) | /* pix 3 */ ((sval1 + sval2 + sval3 + sval4) >> 2); /* pix 4 */ lined[w * 2 + 1] = wordd; linedp[w * 2 + 1] = worddp; } /* Finish up the last word */ for (; j < wsm; j++, jd += 2) { sval1 = sval2; sval3 = sval4; sval2 = GET_DATA_BYTE(lines, j + 1); sval4 = GET_DATA_BYTE(linesp, j + 1); SET_DATA_BYTE(lined, jd, sval1); /* pix 1 */ SET_DATA_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ SET_DATA_BYTE(linedp, jd, (sval1 + sval3) / 2); /* pix 3 */ SET_DATA_BYTE(linedp, jd + 1, (sval1 + sval2 + sval3 + sval4) / 4); /* pix 4 */ } sval1 = sval2; sval3 = sval4; SET_DATA_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ SET_DATA_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ SET_DATA_BYTE(linedp, 2 * wsm, (sval1 + sval3) / 2); /* pix 3 */ SET_DATA_BYTE(linedp, 2 * wsm + 1, (sval1 + sval3) / 2); /* pix 4 */ #if DEBUG_UNROLLING #define CHECK_BYTE(a, b, c) if (GET_DATA_BYTE(a, b) != c) {\ fprintf(stderr, "Error: mismatch at %d, %d vs %d\n", \ j, GET_DATA_BYTE(a, b), c); } sval2 = GET_DATA_BYTE(lines, 0); sval4 = GET_DATA_BYTE(linesp, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 2) { sval1 = sval2; sval3 = sval4; sval2 = GET_DATA_BYTE(lines, j + 1); sval4 = GET_DATA_BYTE(linesp, j + 1); CHECK_BYTE(lined, jd, sval1); /* pix 1 */ CHECK_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ CHECK_BYTE(linedp, jd, (sval1 + sval3) / 2); /* pix 3 */ CHECK_BYTE(linedp, jd + 1, (sval1 + sval2 + sval3 + sval4) / 4); /* pix 4 */ } sval1 = sval2; sval3 = sval4; CHECK_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ CHECK_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ CHECK_BYTE(linedp, 2 * wsm, (sval1 + sval3) / 2); /* pix 3 */ CHECK_BYTE(linedp, 2 * wsm + 1, (sval1 + sval3) / 2); /* pix 4 */ #undef CHECK_BYTE #endif } else { /* last row of src pixels: lastlineflag == 1 */ linedp = lined + wpld; sval2 = GET_DATA_BYTE(lines, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 2) { sval1 = sval2; sval2 = GET_DATA_BYTE(lines, j + 1); SET_DATA_BYTE(lined, jd, sval1); /* pix 1 */ SET_DATA_BYTE(linedp, jd, sval1); /* pix 3 */ SET_DATA_BYTE(lined, jd + 1, (sval1 + sval2) / 2); /* pix 2 */ SET_DATA_BYTE(linedp, jd + 1, (sval1 + sval2) / 2); /* pix 4 */ } sval1 = sval2; SET_DATA_BYTE(lined, 2 * wsm, sval1); /* pix 1 */ SET_DATA_BYTE(lined, 2 * wsm + 1, sval1); /* pix 2 */ SET_DATA_BYTE(linedp, 2 * wsm, sval1); /* pix 3 */ SET_DATA_BYTE(linedp, 2 * wsm + 1, sval1); /* pix 4 */ } return; } /*------------------------------------------------------------------* * 4x linear interpolated gray scaling * *------------------------------------------------------------------*/ /*! * scaleGray4xLILow() * * This is a special case of 4x expansion by linear * interpolation. Each src pixel contains 16 dest pixels. * The 16 dest pixels in src pixel 1 are numbered at * their UL corners. The 16 dest pixels in src pixel 1 * are related to that src pixel and its 3 neighboring * src pixels as follows: * * 1---2---3---4---|---|---|---|---| * | | | | | | | | | * 5---6---7---8---|---|---|---|---| * | | | | | | | | | * src 1 --> 9---a---b---c---|---|---|---|---| <-- src 2 * | | | | | | | | | * d---e---f---g---|---|---|---|---| * | | | | | | | | | * |===|===|===|===|===|===|===|===| * | | | | | | | | | * |---|---|---|---|---|---|---|---| * | | | | | | | | | * src 3 --> |---|---|---|---|---|---|---|---| <-- src 4 * | | | | | | | | | * |---|---|---|---|---|---|---|---| * | | | | | | | | | * |---|---|---|---|---|---|---|---| * * dest src * ---- --- * dp1 = sp1 * dp2 = (3 * sp1 + sp2) / 4 * dp3 = (sp1 + sp2) / 2 * dp4 = (sp1 + 3 * sp2) / 4 * dp5 = (3 * sp1 + sp3) / 4 * dp6 = (9 * sp1 + 3 * sp2 + 3 * sp3 + sp4) / 16 * dp7 = (3 * sp1 + 3 * sp2 + sp3 + sp4) / 8 * dp8 = (3 * sp1 + 9 * sp2 + 1 * sp3 + 3 * sp4) / 16 * dp9 = (sp1 + sp3) / 2 * dp10 = (3 * sp1 + sp2 + 3 * sp3 + sp4) / 8 * dp11 = (sp1 + sp2 + sp3 + sp4) / 4 * dp12 = (sp1 + 3 * sp2 + sp3 + 3 * sp4) / 8 * dp13 = (sp1 + 3 * sp3) / 4 * dp14 = (3 * sp1 + sp2 + 9 * sp3 + 3 * sp4) / 16 * dp15 = (sp1 + sp2 + 3 * sp3 + 3 * sp4) / 8 * dp16 = (sp1 + 3 * sp2 + 3 * sp3 + 9 * sp4) / 16 * * We iterate over the src pixels, and unroll the calculation * for each set of 16 dest pixels corresponding to that src * pixel, caching pixels for the next src pixel whenever possible. */ void scaleGray4xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, hsm; l_uint32 *lines, *lined; hsm = hs - 1; /* We're taking 2 src and 4 dest lines at a time, * and for each src line, we're computing 4 dest lines. * Call these 4 dest lines: destline1 - destline4. * The first src line is used for destline 1. * Two src lines are used for all other dest lines, * except for the last 4 dest lines, which are computed * using only the last src line. */ /* iterate over all but the last src line */ for (i = 0; i < hsm; i++) { lines = datas + i * wpls; lined = datad + 4 * i * wpld; scaleGray4xLILineLow(lined, wpld, lines, ws, wpls, 0); } /* last src line */ lines = datas + hsm * wpls; lined = datad + 4 * hsm * wpld; scaleGray4xLILineLow(lined, wpld, lines, ws, wpls, 1); return; } /*! * scaleGray4xLILineLow() * * Input: lined (ptr to top destline, to be made from current src line) * wpld * lines (ptr to current src line) * ws * wpls * lastlineflag (1 if last src line; 0 otherwise) * Return: void */ void scaleGray4xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag) { l_int32 j, jd, wsm, wsm4; l_int32 s1, s2, s3, s4, s1t, s2t, s3t, s4t; l_uint32 *linesp, *linedp1, *linedp2, *linedp3; wsm = ws - 1; wsm4 = 4 * wsm; if (lastlineflag == 0) { linesp = lines + wpls; linedp1 = lined + wpld; linedp2 = lined + 2 * wpld; linedp3 = lined + 3 * wpld; s2 = GET_DATA_BYTE(lines, 0); s4 = GET_DATA_BYTE(linesp, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 4) { s1 = s2; s3 = s4; s2 = GET_DATA_BYTE(lines, j + 1); s4 = GET_DATA_BYTE(linesp, j + 1); s1t = 3 * s1; s2t = 3 * s2; s3t = 3 * s3; s4t = 3 * s4; SET_DATA_BYTE(lined, jd, s1); /* d1 */ SET_DATA_BYTE(lined, jd + 1, (s1t + s2) / 4); /* d2 */ SET_DATA_BYTE(lined, jd + 2, (s1 + s2) / 2); /* d3 */ SET_DATA_BYTE(lined, jd + 3, (s1 + s2t) / 4); /* d4 */ SET_DATA_BYTE(linedp1, jd, (s1t + s3) / 4); /* d5 */ SET_DATA_BYTE(linedp1, jd + 1, (9*s1 + s2t + s3t + s4) / 16); /*d6*/ SET_DATA_BYTE(linedp1, jd + 2, (s1t + s2t + s3 + s4) / 8); /* d7 */ SET_DATA_BYTE(linedp1, jd + 3, (s1t + 9*s2 + s3 + s4t) / 16);/*d8*/ SET_DATA_BYTE(linedp2, jd, (s1 + s3) / 2); /* d9 */ SET_DATA_BYTE(linedp2, jd + 1, (s1t + s2 + s3t + s4) / 8);/* d10 */ SET_DATA_BYTE(linedp2, jd + 2, (s1 + s2 + s3 + s4) / 4); /* d11 */ SET_DATA_BYTE(linedp2, jd + 3, (s1 + s2t + s3 + s4t) / 8);/* d12 */ SET_DATA_BYTE(linedp3, jd, (s1 + s3t) / 4); /* d13 */ SET_DATA_BYTE(linedp3, jd + 1, (s1t + s2 + 9*s3 + s4t) / 16);/*d14*/ SET_DATA_BYTE(linedp3, jd + 2, (s1 + s2 + s3t + s4t) / 8); /* d15 */ SET_DATA_BYTE(linedp3, jd + 3, (s1 + s2t + s3t + 9*s4) / 16);/*d16*/ } s1 = s2; s3 = s4; s1t = 3 * s1; s3t = 3 * s3; SET_DATA_BYTE(lined, wsm4, s1); /* d1 */ SET_DATA_BYTE(lined, wsm4 + 1, s1); /* d2 */ SET_DATA_BYTE(lined, wsm4 + 2, s1); /* d3 */ SET_DATA_BYTE(lined, wsm4 + 3, s1); /* d4 */ SET_DATA_BYTE(linedp1, wsm4, (s1t + s3) / 4); /* d5 */ SET_DATA_BYTE(linedp1, wsm4 + 1, (s1t + s3) / 4); /* d6 */ SET_DATA_BYTE(linedp1, wsm4 + 2, (s1t + s3) / 4); /* d7 */ SET_DATA_BYTE(linedp1, wsm4 + 3, (s1t + s3) / 4); /* d8 */ SET_DATA_BYTE(linedp2, wsm4, (s1 + s3) / 2); /* d9 */ SET_DATA_BYTE(linedp2, wsm4 + 1, (s1 + s3) / 2); /* d10 */ SET_DATA_BYTE(linedp2, wsm4 + 2, (s1 + s3) / 2); /* d11 */ SET_DATA_BYTE(linedp2, wsm4 + 3, (s1 + s3) / 2); /* d12 */ SET_DATA_BYTE(linedp3, wsm4, (s1 + s3t) / 4); /* d13 */ SET_DATA_BYTE(linedp3, wsm4 + 1, (s1 + s3t) / 4); /* d14 */ SET_DATA_BYTE(linedp3, wsm4 + 2, (s1 + s3t) / 4); /* d15 */ SET_DATA_BYTE(linedp3, wsm4 + 3, (s1 + s3t) / 4); /* d16 */ } else { /* last row of src pixels: lastlineflag == 1 */ linedp1 = lined + wpld; linedp2 = lined + 2 * wpld; linedp3 = lined + 3 * wpld; s2 = GET_DATA_BYTE(lines, 0); for (j = 0, jd = 0; j < wsm; j++, jd += 4) { s1 = s2; s2 = GET_DATA_BYTE(lines, j + 1); s1t = 3 * s1; s2t = 3 * s2; SET_DATA_BYTE(lined, jd, s1); /* d1 */ SET_DATA_BYTE(lined, jd + 1, (s1t + s2) / 4 ); /* d2 */ SET_DATA_BYTE(lined, jd + 2, (s1 + s2) / 2 ); /* d3 */ SET_DATA_BYTE(lined, jd + 3, (s1 + s2t) / 4 ); /* d4 */ SET_DATA_BYTE(linedp1, jd, s1); /* d5 */ SET_DATA_BYTE(linedp1, jd + 1, (s1t + s2) / 4 ); /* d6 */ SET_DATA_BYTE(linedp1, jd + 2, (s1 + s2) / 2 ); /* d7 */ SET_DATA_BYTE(linedp1, jd + 3, (s1 + s2t) / 4 ); /* d8 */ SET_DATA_BYTE(linedp2, jd, s1); /* d9 */ SET_DATA_BYTE(linedp2, jd + 1, (s1t + s2) / 4 ); /* d10 */ SET_DATA_BYTE(linedp2, jd + 2, (s1 + s2) / 2 ); /* d11 */ SET_DATA_BYTE(linedp2, jd + 3, (s1 + s2t) / 4 ); /* d12 */ SET_DATA_BYTE(linedp3, jd, s1); /* d13 */ SET_DATA_BYTE(linedp3, jd + 1, (s1t + s2) / 4 ); /* d14 */ SET_DATA_BYTE(linedp3, jd + 2, (s1 + s2) / 2 ); /* d15 */ SET_DATA_BYTE(linedp3, jd + 3, (s1 + s2t) / 4 ); /* d16 */ } s1 = s2; SET_DATA_BYTE(lined, wsm4, s1); /* d1 */ SET_DATA_BYTE(lined, wsm4 + 1, s1); /* d2 */ SET_DATA_BYTE(lined, wsm4 + 2, s1); /* d3 */ SET_DATA_BYTE(lined, wsm4 + 3, s1); /* d4 */ SET_DATA_BYTE(linedp1, wsm4, s1); /* d5 */ SET_DATA_BYTE(linedp1, wsm4 + 1, s1); /* d6 */ SET_DATA_BYTE(linedp1, wsm4 + 2, s1); /* d7 */ SET_DATA_BYTE(linedp1, wsm4 + 3, s1); /* d8 */ SET_DATA_BYTE(linedp2, wsm4, s1); /* d9 */ SET_DATA_BYTE(linedp2, wsm4 + 1, s1); /* d10 */ SET_DATA_BYTE(linedp2, wsm4 + 2, s1); /* d11 */ SET_DATA_BYTE(linedp2, wsm4 + 3, s1); /* d12 */ SET_DATA_BYTE(linedp3, wsm4, s1); /* d13 */ SET_DATA_BYTE(linedp3, wsm4 + 1, s1); /* d14 */ SET_DATA_BYTE(linedp3, wsm4 + 2, s1); /* d15 */ SET_DATA_BYTE(linedp3, wsm4 + 3, s1); /* d16 */ } return; } /*------------------------------------------------------------------* * Grayscale and color scaling by closest pixel sampling * *------------------------------------------------------------------*/ /*! * scaleBySamplingLow() * * Notes: * (1) The dest must be cleared prior to this operation, * and we clear it here in the low-level code. * (2) We reuse dest pixels and dest pixel rows whenever * possible. This speeds the upscaling; downscaling * is done by strict subsampling and is unaffected. * (3) Because we are sampling and not interpolating, this * routine works directly, without conversion to full * RGB color, for 2, 4 or 8 bpp palette color images. */ l_int32 scaleBySamplingLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls) { l_int32 i, j, bpld; l_int32 xs, prevxs, sval; l_int32 *srow, *scol; l_uint32 csval; l_uint32 *lines, *prevlines, *lined, *prevlined; l_float32 wratio, hratio; PROCNAME("scaleBySamplingLow"); if (d != 2 && d != 4 && d !=8 && d != 16 && d != 32) return ERROR_INT("pixel depth not supported", procName, 1); /* clear dest */ bpld = 4 * wpld; memset((char *)datad, 0, hd * bpld); /* the source row corresponding to dest row i ==> srow[i] * the source col corresponding to dest col j ==> scol[j] */ if ((srow = (l_int32 *)CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", procName, 1); if ((scol = (l_int32 *)CALLOC(wd, sizeof(l_int32))) == NULL) return ERROR_INT("scol not made", procName, 1); wratio = (l_float32)ws / (l_float32)wd; hratio = (l_float32)hs / (l_float32)hd; for (i = 0; i < hd; i++) srow[i] = L_MIN((l_int32)(hratio * i + 0.5), hs - 1); for (j = 0; j < wd; j++) scol[j] = L_MIN((l_int32)(wratio * j + 0.5), ws - 1); prevlines = NULL; for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; if (lines != prevlines) { /* make dest from new source row */ prevxs = -1; sval = 0; csval = 0; if (d == 2) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_DIBIT(lines, xs); SET_DATA_DIBIT(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_DIBIT(lined, j, sval); } } } else if (d == 4) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_QBIT(lines, xs); SET_DATA_QBIT(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_QBIT(lined, j, sval); } } } else if (d == 8) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_BYTE(lines, xs); SET_DATA_BYTE(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_BYTE(lined, j, sval); } } } else if (d == 16) { for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ sval = GET_DATA_TWO_BYTES(lines, xs); SET_DATA_TWO_BYTES(lined, j, sval); prevxs = xs; } else { /* copy prev dest pix */ SET_DATA_TWO_BYTES(lined, j, sval); } } } else { /* d == 32 */ for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ csval = lines[xs]; lined[j] = csval; prevxs = xs; } else { /* copy prev dest pix */ lined[j] = csval; } } } } else { /* lines == prevlines; copy prev dest row */ prevlined = lined - wpld; memcpy((char *)lined, (char *)prevlined, bpld); } prevlines = lines; } FREE(srow); FREE(scol); return 0; } /*------------------------------------------------------------------* * Color and grayscale downsampling with (antialias) smoothing * *------------------------------------------------------------------*/ /*! * scaleSmoothLow() * * Notes: * (1) This function is called on 8 or 32 bpp src and dest images. * (2) size is the full width of the lowpass smoothing filter. * It is correlated with the reduction ratio, being the * nearest integer such that size is approximately equal to hs / hd. */ l_int32 scaleSmoothLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls, l_int32 size) { l_int32 i, j, m, n, xstart; l_int32 val, rval, gval, bval; l_int32 *srow, *scol; l_uint32 *lines, *lined, *line, *ppixel; l_uint32 pixel; l_float32 wratio, hratio, norm; PROCNAME("scaleSmoothLow"); /* Clear dest */ memset((char *)datad, 0, 4 * wpld * hd); /* Each dest pixel at (j,i) is computed as the average of size^2 corresponding src pixels. We store the UL corner location of the square of src pixels that correspond to dest pixel (j,i). The are labelled by the arrays srow[i] and scol[j]. */ if ((srow = (l_int32 *)CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", procName, 1); if ((scol = (l_int32 *)CALLOC(wd, sizeof(l_int32))) == NULL) return ERROR_INT("scol not made", procName, 1); norm = 1. / (l_float32)(size * size); wratio = (l_float32)ws / (l_float32)wd; hratio = (l_float32)hs / (l_float32)hd; for (i = 0; i < hd; i++) srow[i] = L_MIN((l_int32)(hratio * i), hs - size); for (j = 0; j < wd; j++) scol[j] = L_MIN((l_int32)(wratio * j), ws - size); /* For each dest pixel, compute average */ if (d == 8) { for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { xstart = scol[j]; val = 0; for (m = 0; m < size; m++) { line = lines + m * wpls; for (n = 0; n < size; n++) { val += GET_DATA_BYTE(line, xstart + n); } } val = (l_int32)((l_float32)val * norm); SET_DATA_BYTE(lined, j, val); } } } else { /* d == 32 */ for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { xstart = scol[j]; rval = gval = bval = 0; for (m = 0; m < size; m++) { ppixel = lines + m * wpls + xstart; for (n = 0; n < size; n++) { pixel = *(ppixel + n); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; } } rval = (l_int32)((l_float32)rval * norm); gval = (l_int32)((l_float32)gval * norm); bval = (l_int32)((l_float32)bval * norm); *(lined + j) = rval << L_RED_SHIFT | gval << L_GREEN_SHIFT | bval << L_BLUE_SHIFT; } } } FREE(srow); FREE(scol); return 0; } /*! * scaleRGBToGray2Low() * * Notes: * (1) This function is called with 32 bpp RGB src and 8 bpp, * half-resolution dest. The weights should add to 1.0. */ void scaleRGBToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 rwt, l_float32 gwt, l_float32 bwt) { l_int32 i, j, val, rval, gval, bval; l_uint32 *lines, *lined; l_uint32 pixel; rwt *= 0.25; gwt *= 0.25; bwt *= 0.25; for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { /* Sum each of the color components from 4 src pixels */ pixel = *(lines + 2 * j); rval = (pixel >> L_RED_SHIFT) & 0xff; gval = (pixel >> L_GREEN_SHIFT) & 0xff; bval = (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; /* Generate the dest byte as a weighted sum of the averages */ val = (l_int32)(rwt * rval + gwt * gval + bwt * bval); SET_DATA_BYTE(lined, j, val); } } } /*------------------------------------------------------------------* * General area mapped gray scaling * *------------------------------------------------------------------*/ /*! * scaleColorAreaMapLow() * * This should only be used for downscaling. * We choose to divide each pixel into 16 x 16 sub-pixels. * This is much slower than scaleSmoothLow(), but it gives a * better representation, esp. for downscaling factors between * 1.5 and 5. All src pixels are subdivided into 256 sub-pixels, * and are weighted by the number of sub-pixels covered by * the dest pixel. This is about 2x slower than scaleSmoothLow(), * but the results are significantly better on small text. */ void scaleColorAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, k, m, wm2, hm2; l_int32 area00, area10, area01, area11, areal, arear, areat, areab; l_int32 xu, yu; /* UL corner in src image, to 1/16 of a pixel */ l_int32 xl, yl; /* LR corner in src image, to 1/16 of a pixel */ l_int32 xup, yup, xuf, yuf; /* UL src pixel: integer and fraction */ l_int32 xlp, ylp, xlf, ylf; /* LR src pixel: integer and fraction */ l_int32 delx, dely, area; l_int32 v00r, v00g, v00b; /* contrib. from UL src pixel */ l_int32 v01r, v01g, v01b; /* contrib. from LL src pixel */ l_int32 v10r, v10g, v10b; /* contrib from UR src pixel */ l_int32 v11r, v11g, v11b; /* contrib from LR src pixel */ l_int32 vinr, ving, vinb; /* contrib from all full interior src pixels */ l_int32 vmidr, vmidg, vmidb; /* contrib from side parts */ l_int32 rval, gval, bval; l_uint32 pixel00, pixel10, pixel01, pixel11, pixel; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16. * (l_float32)ws / (l_float32)wd; scy = 16. * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { yu = (l_int32)(scy * i); yl = (l_int32)(scy * (i + 1.0)); yup = yu >> 4; yuf = yu & 0x0f; ylp = yl >> 4; ylf = yl & 0x0f; dely = ylp - yup; lined = datad + i * wpld; lines = datas + yup * wpls; for (j = 0; j < wd; j++) { xu = (l_int32)(scx * j); xl = (l_int32)(scx * (j + 1.0)); xup = xu >> 4; xuf = xu & 0x0f; xlp = xl >> 4; xlf = xl & 0x0f; delx = xlp - xup; /* If near the edge, just use a src pixel value */ if (xlp > wm2 || ylp > hm2) { *(lined + j) = *(lines + xup); continue; } /* Area summed over, in subpixels. This varies * due to the quantization, so we can't simply take * the area to be a constant: area = scx * scy. */ area = ((16 - xuf) + 16 * (delx - 1) + xlf) * ((16 - yuf) + 16 * (dely - 1) + ylf); /* Do area map summation */ pixel00 = *(lines + xup); pixel10 = *(lines + xlp); pixel01 = *(lines + dely * wpls + xup); pixel11 = *(lines + dely * wpls + xlp); area00 = (16 - xuf) * (16 - yuf); area10 = xlf * (16 - yuf); area01 = (16 - xuf) * ylf; area11 = xlf * ylf; v00r = area00 * ((pixel00 >> L_RED_SHIFT) & 0xff); v00g = area00 * ((pixel00 >> L_GREEN_SHIFT) & 0xff); v00b = area00 * ((pixel00 >> L_BLUE_SHIFT) & 0xff); v10r = area10 * ((pixel10 >> L_RED_SHIFT) & 0xff); v10g = area10 * ((pixel10 >> L_GREEN_SHIFT) & 0xff); v10b = area10 * ((pixel10 >> L_BLUE_SHIFT) & 0xff); v01r = area01 * ((pixel01 >> L_RED_SHIFT) & 0xff); v01g = area01 * ((pixel01 >> L_GREEN_SHIFT) & 0xff); v01b = area01 * ((pixel01 >> L_BLUE_SHIFT) & 0xff); v11r = area11 * ((pixel11 >> L_RED_SHIFT) & 0xff); v11g = area11 * ((pixel11 >> L_GREEN_SHIFT) & 0xff); v11b = area11 * ((pixel11 >> L_BLUE_SHIFT) & 0xff); vinr = ving = vinb = 0; for (k = 1; k < dely; k++) { /* for full src pixels */ for (m = 1; m < delx; m++) { pixel = *(lines + k * wpls + xup + m); vinr += 256 * ((pixel >> L_RED_SHIFT) & 0xff); ving += 256 * ((pixel >> L_GREEN_SHIFT) & 0xff); vinb += 256 * ((pixel >> L_BLUE_SHIFT) & 0xff); } } vmidr = vmidg = vmidb = 0; areal = (16 - xuf) * 16; arear = xlf * 16; areat = 16 * (16 - yuf); areab = 16 * ylf; for (k = 1; k < dely; k++) { /* for left side */ pixel = *(lines + k * wpls + xup); vmidr += areal * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += areal * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += areal * ((pixel >> L_BLUE_SHIFT) & 0xff); } for (k = 1; k < dely; k++) { /* for right side */ pixel = *(lines + k * wpls + xlp); vmidr += arear * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += arear * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += arear * ((pixel >> L_BLUE_SHIFT) & 0xff); } for (m = 1; m < delx; m++) { /* for top side */ pixel = *(lines + xup + m); vmidr += areat * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += areat * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += areat * ((pixel >> L_BLUE_SHIFT) & 0xff); } for (m = 1; m < delx; m++) { /* for bottom side */ pixel = *(lines + dely * wpls + xup + m); vmidr += areab * ((pixel >> L_RED_SHIFT) & 0xff); vmidg += areab * ((pixel >> L_GREEN_SHIFT) & 0xff); vmidb += areab * ((pixel >> L_BLUE_SHIFT) & 0xff); } /* Sum all the contributions */ rval = (v00r + v01r + v10r + v11r + vinr + vmidr + 128) / area; gval = (v00g + v01g + v10g + v11g + ving + vmidg + 128) / area; bval = (v00b + v01b + v10b + v11b + vinb + vmidb + 128) / area; #if DEBUG_OVERFLOW if (rval > 255) fprintf(stderr, "rval ovfl: %d\n", rval); if (gval > 255) fprintf(stderr, "gval ovfl: %d\n", gval); if (bval > 255) fprintf(stderr, "bval ovfl: %d\n", bval); #endif /* DEBUG_OVERFLOW */ composeRGBPixel(rval, gval, bval, lined + j); } } return; } /*! * scaleGrayAreaMapLow() * * This should only be used for downscaling. * We choose to divide each pixel into 16 x 16 sub-pixels. * This is about 2x slower than scaleSmoothLow(), but the results * are significantly better on small text, esp. for downscaling * factors between 1.5 and 5. All src pixels are subdivided * into 256 sub-pixels, and are weighted by the number of * sub-pixels covered by the dest pixel. */ void scaleGrayAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, k, m, wm2, hm2; l_int32 xu, yu; /* UL corner in src image, to 1/16 of a pixel */ l_int32 xl, yl; /* LR corner in src image, to 1/16 of a pixel */ l_int32 xup, yup, xuf, yuf; /* UL src pixel: integer and fraction */ l_int32 xlp, ylp, xlf, ylf; /* LR src pixel: integer and fraction */ l_int32 delx, dely, area; l_int32 v00; /* contrib. from UL src pixel */ l_int32 v01; /* contrib. from LL src pixel */ l_int32 v10; /* contrib from UR src pixel */ l_int32 v11; /* contrib from LR src pixel */ l_int32 vin; /* contrib from all full interior src pixels */ l_int32 vmid; /* contrib from side parts that are full in 1 direction */ l_int32 val; l_uint32 *lines, *lined; l_float32 scx, scy; /* (scx, scy) are scaling factors that are applied to the * dest coords to get the corresponding src coords. * We need them because we iterate over dest pixels * and must find the corresponding set of src pixels. */ scx = 16. * (l_float32)ws / (l_float32)wd; scy = 16. * (l_float32)hs / (l_float32)hd; wm2 = ws - 2; hm2 = hs - 2; /* Iterate over the destination pixels */ for (i = 0; i < hd; i++) { yu = (l_int32)(scy * i); yl = (l_int32)(scy * (i + 1.0)); yup = yu >> 4; yuf = yu & 0x0f; ylp = yl >> 4; ylf = yl & 0x0f; dely = ylp - yup; lined = datad + i * wpld; lines = datas + yup * wpls; for (j = 0; j < wd; j++) { xu = (l_int32)(scx * j); xl = (l_int32)(scx * (j + 1.0)); xup = xu >> 4; xuf = xu & 0x0f; xlp = xl >> 4; xlf = xl & 0x0f; delx = xlp - xup; /* If near the edge, just use a src pixel value */ if (xlp > wm2 || ylp > hm2) { SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xup)); continue; } /* Area summed over, in subpixels. This varies * due to the quantization, so we can't simply take * the area to be a constant: area = scx * scy. */ area = ((16 - xuf) + 16 * (delx - 1) + xlf) * ((16 - yuf) + 16 * (dely - 1) + ylf); /* Do area map summation */ v00 = (16 - xuf) * (16 - yuf) * GET_DATA_BYTE(lines, xup); v10 = xlf * (16 - yuf) * GET_DATA_BYTE(lines, xlp); v01 = (16 - xuf) * ylf * GET_DATA_BYTE(lines + dely * wpls, xup); v11 = xlf * ylf * GET_DATA_BYTE(lines + dely * wpls, xlp); for (vin = 0, k = 1; k < dely; k++) { /* for full src pixels */ for (m = 1; m < delx; m++) { vin += 256 * GET_DATA_BYTE(lines + k * wpls, xup + m); } } for (vmid = 0, k = 1; k < dely; k++) /* for left side */ vmid += (16 - xuf) * 16 * GET_DATA_BYTE(lines + k * wpls, xup); for (k = 1; k < dely; k++) /* for right side */ vmid += xlf * 16 * GET_DATA_BYTE(lines + k * wpls, xlp); for (m = 1; m < delx; m++) /* for top side */ vmid += 16 * (16 - yuf) * GET_DATA_BYTE(lines, xup + m); for (m = 1; m < delx; m++) /* for bottom side */ vmid += 16 * ylf * GET_DATA_BYTE(lines + dely * wpls, xup + m); val = (v00 + v01 + v10 + v11 + vin + vmid + 128) / area; #if DEBUG_OVERFLOW if (val > 255) fprintf(stderr, "val overflow: %d\n", val); #endif /* DEBUG_OVERFLOW */ SET_DATA_BYTE(lined, j, val); } } return; } /*------------------------------------------------------------------* * 2x area mapped downscaling * *------------------------------------------------------------------*/ /*! * scaleAreaMapLow2() * * Note: This function is called with either 8 bpp gray or 32 bpp RGB. * The result is a 2x reduced dest. */ void scaleAreaMapLow2(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls) { l_int32 i, j, val, rval, gval, bval; l_uint32 *lines, *lined; l_uint32 pixel; if (d == 8) { for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { /* Average each dest pixel using 4 src pixels */ val = GET_DATA_BYTE(lines, 2 * j); val += GET_DATA_BYTE(lines, 2 * j + 1); val += GET_DATA_BYTE(lines + wpls, 2 * j); val += GET_DATA_BYTE(lines + wpls, 2 * j + 1); val >>= 2; SET_DATA_BYTE(lined, j, val); } } } else { /* d == 32 */ for (i = 0; i < hd; i++) { lines = datas + 2 * i * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { /* Average each of the color components from 4 src pixels */ pixel = *(lines + 2 * j); rval = (pixel >> L_RED_SHIFT) & 0xff; gval = (pixel >> L_GREEN_SHIFT) & 0xff; bval = (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; pixel = *(lines + wpls + 2 * j + 1); rval += (pixel >> L_RED_SHIFT) & 0xff; gval += (pixel >> L_GREEN_SHIFT) & 0xff; bval += (pixel >> L_BLUE_SHIFT) & 0xff; composeRGBPixel(rval >> 2, gval >> 2, bval >> 2, &pixel); *(lined + j) = pixel; } } } return; } /*------------------------------------------------------------------* * Binary scaling by closest pixel sampling * *------------------------------------------------------------------*/ /* * scaleBinaryLow() * * Notes: * (1) The dest must be cleared prior to this operation, * and we clear it here in the low-level code. * (2) We reuse dest pixels and dest pixel rows whenever * possible for upscaling; downscaling is done by * strict subsampling. */ l_int32 scaleBinaryLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls) { l_int32 i, j, bpld; l_int32 xs, prevxs, sval; l_int32 *srow, *scol; l_uint32 *lines, *prevlines, *lined, *prevlined; l_float32 wratio, hratio; PROCNAME("scaleBinaryLow"); /* clear dest */ bpld = 4 * wpld; memset((char *)datad, 0, hd * bpld); /* The source row corresponding to dest row i ==> srow[i] * The source col corresponding to dest col j ==> scol[j] */ if ((srow = (l_int32 *)CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", procName, 1); if ((scol = (l_int32 *)CALLOC(wd, sizeof(l_int32))) == NULL) return ERROR_INT("scol not made", procName, 1); wratio = (l_float32)ws / (l_float32)wd; hratio = (l_float32)hs / (l_float32)hd; for (i = 0; i < hd; i++) srow[i] = L_MIN((l_int32)(hratio * i + 0.5), hs - 1); for (j = 0; j < wd; j++) scol[j] = L_MIN((l_int32)(wratio * j + 0.5), ws - 1); prevlines = NULL; prevxs = -1; sval = 0; for (i = 0; i < hd; i++) { lines = datas + srow[i] * wpls; lined = datad + i * wpld; if (lines != prevlines) { /* make dest from new source row */ for (j = 0; j < wd; j++) { xs = scol[j]; if (xs != prevxs) { /* get dest pix from source col */ if ((sval = GET_DATA_BIT(lines, xs))) SET_DATA_BIT(lined, j); prevxs = xs; } else { /* copy prev dest pix, if set */ if (sval) SET_DATA_BIT(lined, j); } } } else { /* lines == prevlines; copy prev dest row */ prevlined = lined - wpld; memcpy((char *)lined, (char *)prevlined, bpld); } prevlines = lines; } FREE(srow); FREE(scol); return 0; } /*------------------------------------------------------------------* * Scale-to-gray 2x * *------------------------------------------------------------------*/ /*! * scaleToGray2Low() * * Input: usual image variables * sumtab (made from makeSumTabSG2()) * valtab (made from makeValTabSG2()) * Return: 0 if OK; 1 on error. * * The output is processed in sets of 4 output bytes on a row, * corresponding to 4 2x2 bit-blocks in the input image. * Two lookup tables are used. The first, sumtab, gets the * sum of ON pixels in 4 sets of two adjacent bits, * storing the result in 4 adjacent bytes. After sums from * two rows have been added, the second table, valtab, * converts from the sum of ON pixels in the 2x2 block to * an 8 bpp grayscale value between 0 (for 4 bits ON) * and 255 (for 0 bits ON). */ void scaleToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab) { l_int32 i, j, l, k, m, wd4, extra; l_uint32 sbyte1, sbyte2, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take two bytes from the source (in 2 lines of 8 pixels * each) and convert them into four 8 bpp bytes of the dest. */ wd4 = wd & 0xfffffffc; extra = wd - wd4; for (i = 0, l = 0; i < hd; i++, l += 2) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd4; j += 4, k++) { sbyte1 = GET_DATA_BYTE(lines, k); sbyte2 = GET_DATA_BYTE(lines + wpls, k); sum = sumtab[sbyte1] + sumtab[sbyte2]; SET_DATA_BYTE(lined, j, valtab[sum >> 24]); SET_DATA_BYTE(lined, j + 1, valtab[(sum >> 16) & 0xff]); SET_DATA_BYTE(lined, j + 2, valtab[(sum >> 8) & 0xff]); SET_DATA_BYTE(lined, j + 3, valtab[sum & 0xff]); } if (extra > 0) { sbyte1 = GET_DATA_BYTE(lines, k); sbyte2 = GET_DATA_BYTE(lines + wpls, k); sum = sumtab[sbyte1] + sumtab[sbyte2]; for (m = 0; m < extra; m++) { SET_DATA_BYTE(lined, j + m, valtab[((sum >> (24 - 8 * m)) & 0xff)]); } } } return; } /*! * makeSumTabSG2() * * Returns a table of 256 l_uint32s, giving the four output * 8-bit grayscale sums corresponding to 8 input bits of a binary * image, for a 2x scale-to-gray op. The sums from two * adjacent scanlines are then added and transformed to * output four 8 bpp pixel values, using makeValTabSG2(). */ l_uint32 * makeSumTabSG2(void) { l_int32 i; l_int32 sum[] = {0, 1, 1, 2}; l_uint32 *tab; PROCNAME("makeSumTabSG2"); if ((tab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return (l_uint32 *)ERROR_PTR("calloc fail for tab", procName, NULL); /* Pack the four sums separately in four bytes */ for (i = 0; i < 256; i++) { tab[i] = (sum[i & 0x3] | sum[(i >> 2) & 0x3] << 8 | sum[(i >> 4) & 0x3] << 16 | sum[(i >> 6) & 0x3] << 24); } return tab; } /*! * makeValTabSG2() * * Returns an 8 bit value for the sum of ON pixels * in a 2x2 square, according to * * val = 255 - (255 * sum)/4 * * where sum is in set {0,1,2,3,4} */ l_uint8 * makeValTabSG2(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeValTabSG2"); if ((tab = (l_uint8 *)CALLOC(5, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 5; i++) tab[i] = 255 - (i * 255) / 4; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 3x * *------------------------------------------------------------------*/ /*! * scaleToGray3Low() * * Input: usual image variables * sumtab (made from makeSumTabSG3()) * valtab (made from makeValTabSG3()) * Return: 0 if OK; 1 on error * * Each set of 8 3x3 bit-blocks in the source image, which * consist of 72 pixels arranged 24 pixels wide by 3 scanlines, * is converted to a row of 8 8-bit pixels in the dest image. * These 72 pixels of the input image are runs of 24 pixels * in three adjacent scanlines. Each run of 24 pixels is * stored in the 24 LSbits of a 32-bit word. We use 2 LUTs. * The first, sumtab, takes 6 of these bits and stores * sum, taken 3 bits at a time, in two bytes. (See * makeSumTabSG3). This is done for each of the 3 scanlines, * and the results are added. We now have the sum of ON pixels * in the first two 3x3 blocks in two bytes. The valtab LUT * then converts these values (which go from 0 to 9) to * grayscale values between between 255 and 0. (See makeValTabSG3). * This process is repeated for each of the other 3 sets of * 6x3 input pixels, giving 8 output pixels in total. * * Note: because the input image is processed in groups of * 24 x 3 pixels, the process clips the input height to * (h - h % 3) and the input width to (w - w % 24). */ void scaleToGray3Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab) { l_int32 i, j, l, k; l_uint32 threebytes1, threebytes2, threebytes3, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take 9 bytes from the source (72 binary pixels * in three lines of 24 pixels each) and convert it * into 8 bytes of the dest (8 8bpp pixels in one line) */ for (i = 0, l = 0; i < hd; i++, l += 3) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd; j += 8, k += 3) { threebytes1 = (GET_DATA_BYTE(lines, k) << 16) | (GET_DATA_BYTE(lines, k + 1) << 8) | GET_DATA_BYTE(lines, k + 2); threebytes2 = (GET_DATA_BYTE(lines + wpls, k) << 16) | (GET_DATA_BYTE(lines + wpls, k + 1) << 8) | GET_DATA_BYTE(lines + wpls, k + 2); threebytes3 = (GET_DATA_BYTE(lines + 2 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 2 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 2 * wpls, k + 2); sum = sumtab[(threebytes1 >> 18)] + sumtab[(threebytes2 >> 18)] + sumtab[(threebytes3 >> 18)]; SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); sum = sumtab[((threebytes1 >> 12) & 0x3f)] + sumtab[((threebytes2 >> 12) & 0x3f)] + sumtab[((threebytes3 >> 12) & 0x3f)]; SET_DATA_BYTE(lined, j + 2, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 3, valtab[GET_DATA_BYTE(&sum, 3)]); sum = sumtab[((threebytes1 >> 6) & 0x3f)] + sumtab[((threebytes2 >> 6) & 0x3f)] + sumtab[((threebytes3 >> 6) & 0x3f)]; SET_DATA_BYTE(lined, j + 4, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 5, valtab[GET_DATA_BYTE(&sum, 3)]); sum = sumtab[(threebytes1 & 0x3f)] + sumtab[(threebytes2 & 0x3f)] + sumtab[(threebytes3 & 0x3f)]; SET_DATA_BYTE(lined, j + 6, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 7, valtab[GET_DATA_BYTE(&sum, 3)]); } } return; } /*! * makeSumTabSG3() * * Returns a table of 64 l_uint32s, giving the two output * 8-bit grayscale sums corresponding to 6 input bits of a binary * image, for a 3x scale-to-gray op. In practice, this would * be used three times (on adjacent scanlines), and the sums would * be added and then transformed to output 8 bpp pixel values, * using makeValTabSG3(). */ l_uint32 * makeSumTabSG3(void) { l_int32 i; l_int32 sum[] = {0, 1, 1, 2, 1, 2, 2, 3}; l_uint32 *tab; PROCNAME("makeSumTabSG3"); if ((tab = (l_uint32 *)CALLOC(64, sizeof(l_uint32))) == NULL) return (l_uint32 *)ERROR_PTR("calloc fail for tab", procName, NULL); /* Pack the two sums separately in two bytes */ for (i = 0; i < 64; i++) { tab[i] = (sum[i & 0x07]) | (sum[(i >> 3) & 0x07] << 8); } return tab; } /*! * makeValTabSG3() * * Returns an 8 bit value for the sum of ON pixels * in a 3x3 square, according to * val = 255 - (255 * sum)/9 * where sum is in set {0, ... ,9} */ l_uint8 * makeValTabSG3(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeValTabSG3"); if ((tab = (l_uint8 *)CALLOC(10, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 10; i++) tab[i] = 0xff - (i * 255) / 9; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 4x * *------------------------------------------------------------------*/ /*! * scaleToGray4Low() * * Input: usual image variables * sumtab (made from makeSumTabSG4()) * valtab (made from makeValTabSG4()) * Return: 0 if OK; 1 on error. * * The output is processed in sets of 2 output bytes on a row, * corresponding to 2 4x4 bit-blocks in the input image. * Two lookup tables are used. The first, sumtab, gets the * sum of ON pixels in two sets of four adjacent bits, * storing the result in 2 adjacent bytes. After sums from * four rows have been added, the second table, valtab, * converts from the sum of ON pixels in the 4x4 block to * an 8 bpp grayscale value between 0 (for 16 bits ON) * and 255 (for 0 bits ON). */ void scaleToGray4Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_uint32 *sumtab, l_uint8 *valtab) { l_int32 i, j, l, k; l_uint32 sbyte1, sbyte2, sbyte3, sbyte4, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take four bytes from the source (in 4 lines of 8 pixels * each) and convert it into two 8 bpp bytes of the dest. */ for (i = 0, l = 0; i < hd; i++, l += 4) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd; j += 2, k++) { sbyte1 = GET_DATA_BYTE(lines, k); sbyte2 = GET_DATA_BYTE(lines + wpls, k); sbyte3 = GET_DATA_BYTE(lines + 2 * wpls, k); sbyte4 = GET_DATA_BYTE(lines + 3 * wpls, k); sum = sumtab[sbyte1] + sumtab[sbyte2] + sumtab[sbyte3] + sumtab[sbyte4]; SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 2)]); SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); } } return; } /*! * makeSumTabSG4() * * Returns a table of 256 l_uint32s, giving the two output * 8-bit grayscale sums corresponding to 8 input bits of a binary * image, for a 4x scale-to-gray op. The sums from four * adjacent scanlines are then added and transformed to * output 8 bpp pixel values, using makeValTabSG4(). */ l_uint32 * makeSumTabSG4(void) { l_int32 i; l_int32 sum[] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4}; l_uint32 *tab; PROCNAME("makeSumTabSG4"); if ((tab = (l_uint32 *)CALLOC(256, sizeof(l_uint32))) == NULL) return (l_uint32 *)ERROR_PTR("calloc fail for tab", procName, NULL); /* Pack the two sums separately in two bytes */ for (i = 0; i < 256; i++) { tab[i] = (sum[i & 0xf]) | (sum[(i >> 4) & 0xf] << 8); } return tab; } /*! * makeValTabSG4() * * Returns an 8 bit value for the sum of ON pixels * in a 4x4 square, according to * * val = 255 - (255 * sum)/16 * * where sum is in set {0, ... ,16} */ l_uint8 * makeValTabSG4(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeValTabSG4"); if ((tab = (l_uint8 *)CALLOC(17, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 17; i++) tab[i] = 0xff - (i * 255) / 16; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 6x * *------------------------------------------------------------------*/ /*! * scaleToGray6Low() * * Input: usual image variables * tab8 (made from makePixelSumTab8()) * valtab (made from makeValTabSG6()) * Return: 0 if OK; 1 on error * * Each set of 4 6x6 bit-blocks in the source image, which * consist of 144 pixels arranged 24 pixels wide by 6 scanlines, * is converted to a row of 4 8-bit pixels in the dest image. * These 144 pixels of the input image are runs of 24 pixels * in six adjacent scanlines. Each run of 24 pixels is * stored in the 24 LSbits of a 32-bit word. We use 2 LUTs. * The first, tab8, takes 6 of these bits and stores * sum in one byte. This is done for each of the 6 scanlines, * and the results are added. * We now have the sum of ON pixels in the first 6x6 block. The * valtab LUT then converts these values (which go from 0 to 36) to * grayscale values between between 255 and 0. (See makeValTabSG6). * This process is repeated for each of the other 3 sets of * 6x6 input pixels, giving 4 output pixels in total. * * Note: because the input image is processed in groups of * 24 x 6 pixels, the process clips the input height to * (h - h % 6) and the input width to (w - w % 24). * */ void scaleToGray6Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab) { l_int32 i, j, l, k; l_uint32 threebytes1, threebytes2, threebytes3; l_uint32 threebytes4, threebytes5, threebytes6, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * l indexes the source lines * j indexes the dest bytes * k indexes the source bytes * We take 18 bytes from the source (144 binary pixels * in six lines of 24 pixels each) and convert it * into 4 bytes of the dest (four 8 bpp pixels in one line) */ for (i = 0, l = 0; i < hd; i++, l += 6) { lines = datas + l * wpls; lined = datad + i * wpld; for (j = 0, k = 0; j < wd; j += 4, k += 3) { /* First grab the 18 bytes, 3 at a time, and put each set * of 3 bytes into the LS bytes of a 32-bit word. */ threebytes1 = (GET_DATA_BYTE(lines, k) << 16) | (GET_DATA_BYTE(lines, k + 1) << 8) | GET_DATA_BYTE(lines, k + 2); threebytes2 = (GET_DATA_BYTE(lines + wpls, k) << 16) | (GET_DATA_BYTE(lines + wpls, k + 1) << 8) | GET_DATA_BYTE(lines + wpls, k + 2); threebytes3 = (GET_DATA_BYTE(lines + 2 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 2 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 2 * wpls, k + 2); threebytes4 = (GET_DATA_BYTE(lines + 3 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 3 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 3 * wpls, k + 2); threebytes5 = (GET_DATA_BYTE(lines + 4 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 4 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 4 * wpls, k + 2); threebytes6 = (GET_DATA_BYTE(lines + 5 * wpls, k) << 16) | (GET_DATA_BYTE(lines + 5 * wpls, k + 1) << 8) | GET_DATA_BYTE(lines + 5 * wpls, k + 2); /* Sum first set of 36 bits and convert to 0-255 */ sum = tab8[(threebytes1 >> 18)] + tab8[(threebytes2 >> 18)] + tab8[(threebytes3 >> 18)] + tab8[(threebytes4 >> 18)] + tab8[(threebytes5 >> 18)] + tab8[(threebytes6 >> 18)]; SET_DATA_BYTE(lined, j, valtab[GET_DATA_BYTE(&sum, 3)]); /* Ditto for second set */ sum = tab8[((threebytes1 >> 12) & 0x3f)] + tab8[((threebytes2 >> 12) & 0x3f)] + tab8[((threebytes3 >> 12) & 0x3f)] + tab8[((threebytes4 >> 12) & 0x3f)] + tab8[((threebytes5 >> 12) & 0x3f)] + tab8[((threebytes6 >> 12) & 0x3f)]; SET_DATA_BYTE(lined, j + 1, valtab[GET_DATA_BYTE(&sum, 3)]); sum = tab8[((threebytes1 >> 6) & 0x3f)] + tab8[((threebytes2 >> 6) & 0x3f)] + tab8[((threebytes3 >> 6) & 0x3f)] + tab8[((threebytes4 >> 6) & 0x3f)] + tab8[((threebytes5 >> 6) & 0x3f)] + tab8[((threebytes6 >> 6) & 0x3f)]; SET_DATA_BYTE(lined, j + 2, valtab[GET_DATA_BYTE(&sum, 3)]); sum = tab8[(threebytes1 & 0x3f)] + tab8[(threebytes2 & 0x3f)] + tab8[(threebytes3 & 0x3f)] + tab8[(threebytes4 & 0x3f)] + tab8[(threebytes5 & 0x3f)] + tab8[(threebytes6 & 0x3f)]; SET_DATA_BYTE(lined, j + 3, valtab[GET_DATA_BYTE(&sum, 3)]); } } return; } /*! * makeValTabSG6() * * Returns an 8 bit value for the sum of ON pixels * in a 6x6 square, according to * val = 255 - (255 * sum)/36 * where sum is in set {0, ... ,36} */ l_uint8 * makeValTabSG6(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeValTabSG6"); if ((tab = (l_uint8 *)CALLOC(37, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 37; i++) tab[i] = 0xff - (i * 255) / 36; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 8x * *------------------------------------------------------------------*/ /*! * scaleToGray8Low() * * Input: usual image variables * tab8 (made from makePixelSumTab8()) * valtab (made from makeValTabSG8()) * Return: 0 if OK; 1 on error. * * The output is processed one dest byte at a time, * corresponding to 8 rows of src bytes in the input image. * Two lookup tables are used. The first, tab8, gets the * sum of ON pixels in a byte. After sums from 8 rows have * been added, the second table, valtab, converts from this * value (which is between 0 and 64) to an 8 bpp grayscale * value between 0 (for all 64 bits ON) and 255 (for 0 bits ON). */ void scaleToGray8Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8, l_uint8 *valtab) { l_int32 i, j, k; l_int32 sbyte0, sbyte1, sbyte2, sbyte3, sbyte4, sbyte5, sbyte6, sbyte7, sum; l_uint32 *lines, *lined; /* i indexes the dest lines * k indexes the source lines * j indexes the src and dest bytes * We take 8 bytes from the source (in 8 lines of 8 pixels * each) and convert it into one 8 bpp byte of the dest. */ for (i = 0, k = 0; i < hd; i++, k += 8) { lines = datas + k * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { sbyte0 = GET_DATA_BYTE(lines, j); sbyte1 = GET_DATA_BYTE(lines + wpls, j); sbyte2 = GET_DATA_BYTE(lines + 2 * wpls, j); sbyte3 = GET_DATA_BYTE(lines + 3 * wpls, j); sbyte4 = GET_DATA_BYTE(lines + 4 * wpls, j); sbyte5 = GET_DATA_BYTE(lines + 5 * wpls, j); sbyte6 = GET_DATA_BYTE(lines + 6 * wpls, j); sbyte7 = GET_DATA_BYTE(lines + 7 * wpls, j); sum = tab8[sbyte0] + tab8[sbyte1] + tab8[sbyte2] + tab8[sbyte3] + tab8[sbyte4] + tab8[sbyte5] + tab8[sbyte6] + tab8[sbyte7]; SET_DATA_BYTE(lined, j, valtab[sum]); } } return; } /*! * makeValTabSG8() * * Returns an 8 bit value for the sum of ON pixels * in an 8x8 square, according to * val = 255 - (255 * sum)/64 * where sum is in set {0, ... ,64} */ l_uint8 * makeValTabSG8(void) { l_int32 i; l_uint8 *tab; PROCNAME("makeValTabSG8"); if ((tab = (l_uint8 *)CALLOC(65, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 65; i++) tab[i] = 0xff - (i * 255) / 64; return tab; } /*------------------------------------------------------------------* * Scale-to-gray 16x * *------------------------------------------------------------------*/ /*! * scaleToGray16Low() * * Input: usual image variables * tab8 (made from makePixelSumTab8()) * Return: 0 if OK; 1 on error. * * The output is processed one dest byte at a time, corresponding * to 16 rows consisting each of 2 src bytes in the input image. * This uses one lookup table, tab8, which gives the sum of * ON pixels in a byte. After summing for all ON pixels in the * 32 src bytes, which is between 0 and 256, this is converted * to an 8 bpp grayscale value between 0 (for 255 or 256 bits ON) * and 255 (for 0 bits ON). */ void scaleToGray16Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 *tab8) { l_int32 i, j, k, m; l_int32 sum; l_uint32 *lines, *lined; /* i indexes the dest lines * k indexes the source lines * j indexes the dest bytes * m indexes the src bytes * We take 32 bytes from the source (in 16 lines of 16 pixels * each) and convert it into one 8 bpp byte of the dest. */ for (i = 0, k = 0; i < hd; i++, k += 16) { lines = datas + k * wpls; lined = datad + i * wpld; for (j = 0; j < wd; j++) { m = 2 * j; sum = tab8[GET_DATA_BYTE(lines, m)]; sum += tab8[GET_DATA_BYTE(lines, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 2 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 2 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 3 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 3 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 4 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 4 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 5 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 5 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 6 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 6 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 7 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 7 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 8 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 8 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 9 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 9 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 10 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 10 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 11 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 11 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 12 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 12 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 13 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 13 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 14 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 14 * wpls, m + 1)]; sum += tab8[GET_DATA_BYTE(lines + 15 * wpls, m)]; sum += tab8[GET_DATA_BYTE(lines + 15 * wpls, m + 1)]; sum = L_MIN(sum, 255); SET_DATA_BYTE(lined, j, 255 - sum); } } return; } /*------------------------------------------------------------------* * Grayscale mipmap * *------------------------------------------------------------------*/ /*! * scaleMipmapLow() * * See notes in scale.c for pixScaleToGrayMipmap(). This function * is here for pedagogical reasons. It gives poor results on document * images because of aliasing. */ l_int32 scaleMipmapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas1, l_int32 wpls1, l_uint32 *datas2, l_int32 wpls2, l_float32 red) { l_int32 i, j, val1, val2, val, row2, col2; l_int32 *srow, *scol; l_uint32 *lines1, *lines2, *lined; l_float32 ratio, w1, w2; PROCNAME("scaleMipmapLow"); /* Clear dest */ memset((char *)datad, 0, 4 * wpld * hd); /* Each dest pixel at (j,i) is computed by interpolating between the two src images at the corresponding location. We store the UL corner locations of the square of src pixels in thelower-resolution image that correspond to dest pixel (j,i). The are labelled by the arrays srow[i], scol[j]. The UL corner locations of the higher resolution src pixels are obtained from these arrays by multiplying by 2. */ if ((srow = (l_int32 *)CALLOC(hd, sizeof(l_int32))) == NULL) return ERROR_INT("srow not made", procName, 1); if ((scol = (l_int32 *)CALLOC(wd, sizeof(l_int32))) == NULL) return ERROR_INT("scol not made", procName, 1); ratio = 1. / (2. * red); /* 0.5 for red = 1, 1 for red = 0.5 */ for (i = 0; i < hd; i++) srow[i] = (l_int32)(ratio * i); for (j = 0; j < wd; j++) scol[j] = (l_int32)(ratio * j); /* Get weights for linear interpolation: these are the * 'distances' of the dest image plane from the two * src image planes. */ w1 = 2. * red - 1.; /* w1 --> 1 as red --> 1 */ w2 = 1. - w1; /* For each dest pixel, compute linear interpolation */ for (i = 0; i < hd; i++) { row2 = srow[i]; lines1 = datas1 + 2 * row2 * wpls1; lines2 = datas2 + row2 * wpls2; lined = datad + i * wpld; for (j = 0; j < wd; j++) { col2 = scol[j]; val1 = GET_DATA_BYTE(lines1, 2 * col2); val2 = GET_DATA_BYTE(lines2, col2); val = (l_int32)(w1 * val1 + w2 * val2); SET_DATA_BYTE(lined, j, val); } } FREE(srow); FREE(scol); return 0; } leptonica-1.70/src/recogbasic.c0000664000175000017500000014026212265243276014561 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * recogbasic.c * * Recoga creation, destruction and access * L_RECOGA *recogaCreateFromRecog() * L_RECOGA *recogaCreateFromPixaa() * L_RECOGA *recogaCreate() * void recogaDestroy() * l_int32 recogaAddRecog() * static l_int32 recogaExtendArray() * l_int32 recogReplaceInRecoga() * L_RECOG *recogaGetRecog() * l_int32 recogaGetCount() * l_int32 recogGetCount() * l_int32 recogGetIndex() * l_int32 recogGetParent() * l_int32 recogSetBootflag() * * Recog initialization and destruction * L_RECOG *recogCreateFromRecog() * L_RECOG *recogCreateFromPixa() * L_RECOG *recogCreate() * void recogDestroy() * * Appending (combining two recogs into one) * l_int32 recogAppend() * * Character/index lookup * l_int32 recogGetClassIndex() * l_int32 recogStringToIndex() * l_int32 recogGetClassString() * l_int32 l_convertCharstrToInt() * * Serialization * L_RECOGA *recogaRead() * L_RECOGA *recogaReadStream() * l_int32 recogaWrite() * l_int32 recogaWriteStream() * l_int32 recogaWritePixaa() * L_RECOG *recogRead() * L_RECOG *recogReadStream() * l_int32 recogWrite() * l_int32 recogWriteStream() * l_int32 recogWritePixa() * static l_int32 recogAddCharstrLabels() * static l_int32 recogAddAllSamples() * * The recognizer functionality is split into four files: * recogbasic.c: create, destroy, access, serialize * recogtrain.c: training on labelled and unlabelled data * recogident.c: running the recognizer(s) on input * recogdid.c: running the recognizer(s) on input using a * document image decoding (DID) hidden markov model * * This is a content-adapted (or book-adapted) recognizer (BAR) application. * The recognizers here are typically bootstrapped from data that has * been labelled by a generic recognition system, such as Tesseract. * The general procedure to create a recognizer (recog) from labelled data is * to add the labelled character bitmaps, and call recogTrainingFinished() * when done. * * Typically, the recog is added to a recoga (an array of recognizers) * before use. However, for identifying single characters, it is possible * to use a single recog. * * If there is more than one recog, the usage options are: * (1) To join the two together (e.g., if they're from the same source) * (2) To put them separately into a recoga (recognizer array). * * For training numeric input, an example set of calls that scales * each training input to (w, h) and will use the averaged * templates for identifying unknown characters is: * L_Recog *rec = recogCreate(w, h, L_USE_AVERAGE, 128, 1, "fonts"); * for (i = 0; i < n; i++) { // read in n training digits * Pix *pix = ... * recogTrainLabelled(rec, pix, NULL, text[i], 0, 0); * } * recogTrainingFinished(rec, 0); // required * * It is an error if any function that computes averages, removes * outliers or requests identification of an unlabelled character, * such as: * (1) computing the sample averages: recogAverageSamples() * (2) removing outliers: recogRemoveOutliers() * (3) requesting identification of an unlabeled character: * recogIdentifyPix() * is called before an explicit call to finish training. Note that * to do further training on a "finished" recognizer, just set * recog->train_done = FALSE; * add the new training samples, and again call * recogTrainingFinished(rec, 0); // required * * If using all examples for identification, all scaled to (w, h), * and with outliers removed, do something like this: * L_Recog *rec = recogCreate(w, h, L_USE_ALL, 128, 1, "fonts"); * for (i = 0; i < n; i++) { // read in n training characters * Pix *pix = ... * recogTrainLabelled(rec, pix, NULL, text[i], 0, 0); * } * recogTrainingFinished(rec, 0); * // remove anything with correlation less than 0.7 with average * recogRemoveOutliers(rec, 0.7, 0.5, 0); * * You can train a recognizer from a pixa where the text field in each * pix is the character string: * * L_Recog *recboot = recogCreateFromPixa(pixa, w, h, L_USE_AVERAGE, * 128, 1, "fonts"); * * This is useful as a "bootstrap" recognizer for training a new * recognizer (rec) on an unlabelled data set that has a different * origin from recboot. To do this, the new recognizer must be * initialized to use the same (w,h) scaling as the bootstrap recognizer. * If the new recognizer is to be used without scaling (e.g., on images * from a single source, like a book), call recogSetScaling() to * regenerate all the scaled samples and averages: * * L_Recog *rec = recogCreate(w, h, L_USE_ALL, 128, 1, "fonts"); * for (i = 0; i < n; i++) { // read in n training characters * Pix *pix = ... * recogTrainUnlabelled(rec, recboot, pix, NULL, 1, 0.75, 0); * } * recogTrainingFinished(rec, 0); * recogSetScaling(rec, 0, 0); // use with no scaling */ #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ static const l_int32 MAX_EXAMPLES_IN_CLASS = 256; /* Static functions */ static l_int32 recogaExtendArray(L_RECOGA *recoga); static l_int32 recogAddCharstrLabels(L_RECOG *recog); static l_int32 recogAddAllSamples(L_RECOG *recog, PIXAA *paa, l_int32 debug); /* Tolerance (+-) in asperity ratio between unknown and known */ static l_float32 DEFAULT_ASPERITY_FRACT = 0.25; /*------------------------------------------------------------------------* * Recoga: creation, destruction, access * *------------------------------------------------------------------------*/ /*! * recogaCreateFromRecog() * * Input: recog * Return: recoga, or null on error * * Notes: * (1) This is a convenience function for making a recoga after * you have a recog. The recog is owned by the recoga. * (2) For splitting connected components, the * input recog must be from the material to be identified, * and not a generic bootstrap recog. Those can be added later. */ L_RECOGA * recogaCreateFromRecog(L_RECOG *recog) { L_RECOGA *recoga; PROCNAME("recogaCreateFromRecog"); if (!recog) return (L_RECOGA *)ERROR_PTR("recog not defined", procName, NULL); recoga = recogaCreate(1); recogaAddRecog(recoga, recog); return recoga; } /*! * recogaCreateFromPixaa() * * Input: paa (of labelled, 1 bpp images) * scalew (scale all widths to this; use 0 for no scaling) * scaleh (scale all heights to this; use 0 for no scaling) * templ_type (L_USE_AVERAGE or L_USE_ALL) * threshold (for binarization; typically ~128) * maxyshift (from nominal centroid alignment; typically 0 or 1) * fontdir ( directory for bitmap fonts for debugging) * Return: recoga, or null on error * * Notes: * (1) This is a convenience function for training from labelled data. * (2) Each pixa in the paa is a set of labelled data that is used * to train a recognizer (e.g., for a set of characters in a font). * Each image example in the pixa is put into a class in its * recognizer, defined by its character label. All examples in * the same class should be similar. * (3) The pixaa can be written by recogaWritePixaa(), and must contain * the unscaled bitmaps used for training. */ L_RECOGA * recogaCreateFromPixaa(PIXAA *paa, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir) { l_int32 n, i, full; L_RECOG *recog; L_RECOGA *recoga; PIXA *pixa; PROCNAME("recogaCreateFromPixaa"); if (!paa) return (L_RECOGA *)ERROR_PTR("paa not defined", procName, NULL); if (pixaaVerifyDepth(paa, NULL) != 1) return (L_RECOGA *)ERROR_PTR("all pix not 1 bpp", procName, NULL); pixaaIsFull(paa, &full); if (!full) return (L_RECOGA *)ERROR_PTR("all pix not present", procName, NULL); n = pixaaGetCount(paa, NULL); recoga = recogaCreate(n); for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); recog = recogCreateFromPixa(pixa, scalew, scaleh, templ_type, threshold, maxyshift, fontdir); recogaAddRecog(recoga, recog); pixaDestroy(&pixa); } return recoga; } /*! * recogaCreate() * * Input: n (initial number of recog ptrs) * Return: recoga, or null on error */ L_RECOGA * recogaCreate(l_int32 n) { L_RECOGA *recoga; PROCNAME("recogaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((recoga = (L_RECOGA *)CALLOC(1, sizeof(L_RECOGA))) == NULL) return (L_RECOGA *)ERROR_PTR("recoga not made", procName, NULL); recoga->n = 0; recoga->nalloc = n; if ((recoga->recog = (L_RECOG **)CALLOC(n, sizeof(L_RECOG *))) == NULL) return (L_RECOGA *)ERROR_PTR("recoga ptrs not made", procName, NULL); return recoga; } /*! * recogaDestroy() * * Input: &recoga () * Return: void * * Notes: * (1) If a recog has a parent, the parent owns it. To destroy * a recog, it must first be "orphaned". */ void recogaDestroy(L_RECOGA **precoga) { l_int32 i; L_RECOG *recog; L_RECOGA *recoga; PROCNAME("recogaDestroy"); if (precoga == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((recoga = *precoga) == NULL) return; rchaDestroy(&recoga->rcha); for (i = 0; i < recoga->n; i++) { if ((recog = recoga->recog[i]) == NULL) { L_ERROR("recog not found for index %d\n", procName, i); continue; } recog->parent = NULL; /* orphan it */ recogDestroy(&recog); } FREE(recoga->recog); FREE(recoga); *precoga = NULL; return; } /*! * recogaAddRecog() * * Input: recoga * recog (to be added and owned by the recoga; not a copy) * Return: recoga, or null on error */ l_int32 recogaAddRecog(L_RECOGA *recoga, L_RECOG *recog) { l_int32 n; PROCNAME("recogaAddRecog"); if (!recoga) return ERROR_INT("recoga not defined", procName, 1); if (!recog) return ERROR_INT("recog not defined", procName, 1); n = recoga->n; if (n >= recoga->nalloc) recogaExtendArray(recoga); recoga->recog[n] = recog; recog->index = n; recog->parent = recoga; recoga->n++; return 0; } /*! * recogaExtendArray() * * Input: recoga * Return: 0 if OK, 1 on error */ static l_int32 recogaExtendArray(L_RECOGA *recoga) { PROCNAME("recogaExtendArray"); if (!recoga) return ERROR_INT("recogaa not defined", procName, 1); if ((recoga->recog = (L_RECOG **)reallocNew((void **)&recoga->recog, sizeof(L_RECOG *) * recoga->nalloc, 2 * sizeof(L_RECOG *) * recoga->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); recoga->nalloc *= 2; return 0; } /*! * recogReplaceInRecoga() * * Input: &recog1 (old recog, to be destroyed) * recog2 (new recog, to be inserted in place of @recog1) * Return: 0 if OK, 1 on error * * Notes: * (1) This always destroys recog1. * (2) If recog1 belongs to a recoga, this inserts recog2 into * the slot that recog1 previously occupied. */ l_int32 recogReplaceInRecoga(L_RECOG **precog1, L_RECOG *recog2) { l_int32 n, index; L_RECOG *recog1; L_RECOGA *recoga; PROCNAME("recogReplaceInRecoga"); if (!precog1) return ERROR_INT("&recog1 not defined", procName, 1); if (!recog2) return ERROR_INT("recog2 not defined", procName, 1); if ((recog1 = *precog1) == NULL) return ERROR_INT("recog1 not defined", procName, 1); if ((recoga = recogGetParent(recog1)) == NULL) { recogDestroy(precog1); return 0; } n = recogaGetCount(recoga); recogGetIndex(recog1, &index); if (index >= n) { L_ERROR("invalid index %d in recog1; no replacement\n", procName, recog1->index); recogDestroy(precog1); return 1; } recog1->parent = NULL; /* necessary to destroy recog1 */ recogDestroy(precog1); recoga->recog[index] = recog2; recog2->index = index; recog2->parent = recoga; return 0; } /*! * recogaGetRecog() * * Input: recoga * index (to the index-th recog) * Return: recog, or null on error * * Notes: * (1) This returns a ptr to the recog, which is still owned by * the recoga. Do not destroy it. */ L_RECOG * recogaGetRecog(L_RECOGA *recoga, l_int32 index) { L_RECOG *recog; PROCNAME("recogaAddRecog"); if (!recoga) return (L_RECOG *)ERROR_PTR("recoga not defined", procName, NULL); if (index < 0 || index >= recoga->n) return (L_RECOG *)ERROR_PTR("index not valid", procName, NULL); recog = recoga->recog[index]; return recog; } /*! * recogaGetCount() * * Input: recoga * Return: count of recog in array; 0 if no recog or on error */ l_int32 recogaGetCount(L_RECOGA *recoga) { PROCNAME("recogaGetCount"); if (!recoga) return ERROR_INT("recoga not defined", procName, 0); return recoga->n; } /*! * recogGetCount() * * Input: recog * Return: count of classes in recog; 0 if no recog or on error */ l_int32 recogGetCount(L_RECOG *recog) { PROCNAME("recogGetCount"); if (!recog) return ERROR_INT("recog not defined", procName, 0); return recog->setsize; } /*! * recogGetIndex() * * Input: recog * &index (into the parent recoga; -1 if no parent) * Return: 0 if OK, 1 on error */ l_int32 recogGetIndex(L_RECOG *recog, l_int32 *pindex) { PROCNAME("recogGetIndex"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = -1; if (!recog) return ERROR_INT("recog not defined", procName, 1); *pindex = recog->index; return 0; } /*! * recogGetParent() * * Input: recog * Return: recoga (back-pointer to parent); can be null */ L_RECOGA * recogGetParent(L_RECOG *recog) { PROCNAME("recogGetParent"); if (!recog) return (L_RECOGA *)ERROR_PTR("recog not defined", procName, NULL); return recog->parent; } /*! * recogSetBootflag() * * Input: recog * Return: 0 if OK, 1 on error * * Notes: * (1) This must be set for any bootstrap recog, where the samples * are not from the media being identified. * (2) It is used to enforce scaled bitmaps for identification, * and to prevent the recog from being used to split touching * characters (which requires unscaled samples from the * material being identified). */ l_int32 recogSetBootflag(L_RECOG *recog) { PROCNAME("recogSetBootflag"); if (!recog) return ERROR_INT("recog not defined", procName, 1); recog->bootrecog = 1; return 0; } /*------------------------------------------------------------------------* * Recog: initialization and destruction * *------------------------------------------------------------------------*/ /*! * recogCreateFromRecog() * * Input: recs (source recog with arbitrary input parameters) * scalew (scale all widths to this; use 0 for no scaling) * scaleh (scale all heights to this; use 0 for no scaling) * templ_type (L_USE_AVERAGE or L_USE_ALL) * threshold (for binarization; typically ~128) * maxyshift (from nominal centroid alignment; typically 0 or 1) * fontdir ( directory for bitmap fonts for debugging) * Return: recd, or null on error * * Notes: * (1) This is a convenience function that generates a recog using * the unscaled training data in an existing recog. */ L_RECOG * recogCreateFromRecog(L_RECOG *recs, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir) { L_RECOG *recd; PIXA *pixa; PROCNAME("recogCreateFromRecog"); if (!recs) return (L_RECOG *)ERROR_PTR("recs not defined", procName, NULL); pixa = pixaaFlattenToPixa(recs->pixaa_u, NULL, L_CLONE); recd = recogCreateFromPixa(pixa, scalew, scaleh, templ_type, threshold, maxyshift, fontdir); pixaDestroy(&pixa); return recd; } /*! * recogCreateFromPixa() * * Input: pixa (of labelled, 1 bpp images) * scalew (scale all widths to this; use 0 for no scaling) * scaleh (scale all heights to this; use 0 for no scaling) * templ_type (L_USE_AVERAGE or L_USE_ALL) * threshold (for binarization; typically ~128) * maxyshift (from nominal centroid alignment; typically 0 or 1) * fontdir ( directory for bitmap fonts for debugging) * Return: recog, or null on error * * Notes: * (1) This is a convenience function for training from labelled data. * The pixa can be read from file. * (2) The pixa should contain the unscaled bitmaps used for training. * (3) The characters here should work as a single "font", because * each image example is put into a class defined by its * character label. All examples in the same class should be * similar. */ L_RECOG * recogCreateFromPixa(PIXA *pixa, l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir) { char *text; l_int32 full, n, i, ntext; L_RECOG *recog; PIX *pix; PROCNAME("recogCreateFromPixa"); if (!pixa) return (L_RECOG *)ERROR_PTR("pixa not defined", procName, NULL); if (pixaVerifyDepth(pixa, NULL) != 1) return (L_RECOG *)ERROR_PTR("not all pix are 1 bpp", procName, NULL); pixaIsFull(pixa, &full, NULL); if (!full) return (L_RECOG *)ERROR_PTR("not all pix are present", procName, NULL); n = pixaGetCount(pixa); pixaCountText(pixa, &ntext); if (ntext == 0) return (L_RECOG *)ERROR_PTR("no pix have text strings", procName, NULL); if (ntext < n) L_ERROR("%d text strings < %d pix\n", procName, ntext, n); recog = recogCreate(scalew, scaleh, templ_type, threshold, maxyshift, fontdir); if (!recog) return (L_RECOG *)ERROR_PTR("recog not made", procName, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); text = pixGetText(pix); if (!text || strlen(text) == 0) { L_ERROR("pix[%d] has no text\n", procName, i); pixDestroy(&pix); continue; } recogTrainLabelled(recog, pix, NULL, text, 0, 0); pixDestroy(&pix); } recogTrainingFinished(recog, 0); return recog; } /*! * recogCreate() * * Input: scalew (scale all widths to this; use 0 for no scaling) * scaleh (scale all heights to this; use 0 for no scaling) * templ_type (L_USE_AVERAGE or L_USE_ALL) * threshold (for binarization; typically ~128) * maxyshift (from nominal centroid alignment; typically 0 or 1) * fontdir ( directory for bitmap fonts for debugging) * Return: recog, or null on error * * Notes: * (1) For a set trained on one font, such as numbers in a book, * it is sensible to set scalew = scaleh = 0. * (2) For a mixed training set, scaling to a fixed height, * such as 32 pixels, but leaving the width unscaled, is effective. * (3) The storage for most of the arrays is allocated when training * is finished. */ L_RECOG * recogCreate(l_int32 scalew, l_int32 scaleh, l_int32 templ_type, l_int32 threshold, l_int32 maxyshift, const char *fontdir) { L_RECOG *recog; PIXA *pixa; PIXAA *paa; PROCNAME("recogCreate"); if (scalew < 0 || scaleh < 0) return (L_RECOG *)ERROR_PTR("invalid scalew or scaleh", procName, NULL); if (templ_type != L_USE_AVERAGE && templ_type != L_USE_ALL) return (L_RECOG *)ERROR_PTR("invalid templ_type flag", procName, NULL); if (threshold < 1 || threshold > 255) return (L_RECOG *)ERROR_PTR("invalid threshold", procName, NULL); if ((recog = (L_RECOG *)CALLOC(1, sizeof(L_RECOG))) == NULL) return (L_RECOG *)ERROR_PTR("rec not made", procName, NULL); recog->templ_type = templ_type; recog->threshold = threshold; recog->scalew = scalew; recog->scaleh = scaleh; recog->maxyshift = maxyshift; recog->asperity_fr = DEFAULT_ASPERITY_FRACT; recogSetPadParams(recog, NULL, NULL, NULL, -1, -1, -1); if (fontdir) { recog->fontdir = stringNew(fontdir); recog->bmf = bmfCreate(fontdir, 6); recog->bmf_size = 6; } recog->maxarraysize = MAX_EXAMPLES_IN_CLASS; recog->index = -1; /* Generate the LUTs */ recog->centtab = makePixelCentroidTab8(); recog->sumtab = makePixelSumTab8(); recog->sa_text = sarrayCreate(0); recog->dna_tochar = l_dnaCreate(0); /* Input default values for min component size for splitting. * These are overwritten when pixTrainingFinished() is called. */ recog->min_splitw = 6; recog->min_splith = 6; recog->max_splith = 60; /* Generate the storage for the unscaled training bitmaps */ paa = pixaaCreate(recog->maxarraysize); pixa = pixaCreate(1); pixaaInitFull(paa, pixa); pixaDestroy(&pixa); recog->pixaa_u = paa; /* Generate the storage for debugging */ recog->pixadb_boot = pixaCreate(2); recog->pixadb_split = pixaCreate(2); return recog; } /*! * recogDestroy() * * Input: &recog () * Return: void * * Notes: * (1) If a recog has a parent, the parent owns it. A recogDestroy() * will fail if there is a parent. */ void recogDestroy(L_RECOG **precog) { L_RECOG *recog; PROCNAME("recogDestroy"); if (!precog) { L_WARNING("ptr address is null\n", procName); return; } if ((recog = *precog) == NULL) return; if (recogGetParent(recog) != NULL) { L_ERROR("recog has parent; can't be destroyed\n", procName); return; } FREE(recog->bootdir); FREE(recog->bootpattern); FREE(recog->bootpath); FREE(recog->centtab); FREE(recog->sumtab); FREE(recog->fname); sarrayDestroy(&recog->sa_text); l_dnaDestroy(&recog->dna_tochar); pixaaDestroy(&recog->pixaa_u); pixaDestroy(&recog->pixa_u); ptaaDestroy(&recog->ptaa_u); ptaDestroy(&recog->pta_u); numaDestroy(&recog->nasum_u); numaaDestroy(&recog->naasum_u); pixaaDestroy(&recog->pixaa); pixaDestroy(&recog->pixa); ptaaDestroy(&recog->ptaa); ptaDestroy(&recog->pta); numaDestroy(&recog->nasum); numaaDestroy(&recog->naasum); pixaDestroy(&recog->pixa_tr); pixaDestroy(&recog->pixadb_ave); pixaDestroy(&recog->pixa_id); pixDestroy(&recog->pixdb_ave); pixDestroy(&recog->pixdb_range); pixaDestroy(&recog->pixadb_boot); pixaDestroy(&recog->pixadb_split); FREE(recog->fontdir); bmfDestroy(&recog->bmf); rchDestroy(&recog->rch); rchaDestroy(&recog->rcha); recogDestroyDid(recog); FREE(recog); *precog = NULL; return; } /*------------------------------------------------------------------------* * Appending * *------------------------------------------------------------------------*/ /*! * recogAppend() * * Input: recog1 * recog2 (gets added to recog1) * Return: 0 if OK, 1 on error * * Notes: * (1) This is used to make a training recognizer from more than * one trained recognizer source. It should only be used * when the bitmaps for corresponding character classes are * very similar. That constraint does not arise when * the character classes are disjoint; e.g., if recog1 is * digits and recog2 is alphabetical. * (2) This is done by appending recog2 to recog1. Averages are * computed for each recognizer, if necessary, before appending. * (3) Non-array fields are combined using the appropriate min and max. */ l_int32 recogAppend(L_RECOG *recog1, L_RECOG *recog2) { PROCNAME("recogAppend"); if (!recog1) return ERROR_INT("recog1 not defined", procName, 1); if (!recog2) return ERROR_INT("recog2 not defined", procName, 1); /* Make sure both are finalized with all arrays computed */ recogAverageSamples(recog1, 0); recogAverageSamples(recog2, 0); /* Combine non-array field values */ recog1->minwidth_u = L_MIN(recog1->minwidth_u, recog2->minwidth_u); recog1->maxwidth_u = L_MAX(recog1->maxwidth_u, recog2->maxwidth_u); recog1->minheight_u = L_MIN(recog1->minheight_u, recog2->minheight_u); recog1->maxheight_u = L_MAX(recog1->maxheight_u, recog2->maxheight_u); recog1->minwidth = L_MIN(recog1->minwidth, recog2->minwidth); recog1->maxwidth = L_MAX(recog1->maxwidth, recog2->maxwidth); recog1->min_splitw = L_MIN(recog1->min_splitw, recog2->min_splitw); recog1->min_splith = L_MIN(recog1->min_splith, recog2->min_splith); recog1->max_splith = L_MAX(recog1->max_splith, recog2->max_splith); /* Combine array field values */ recog1->setsize += recog2->setsize; sarrayAppendRange(recog1->sa_text, recog2->sa_text, 0, -1); l_dnaJoin(recog1->dna_tochar, recog2->dna_tochar, 0, -1); pixaaJoin(recog1->pixaa_u, recog2->pixaa_u, 0, -1); pixaJoin(recog1->pixa_u, recog2->pixa_u, 0, -1); ptaaJoin(recog1->ptaa_u, recog2->ptaa_u, 0, -1); ptaJoin(recog1->pta_u, recog2->pta_u, 0, -1); numaaJoin(recog1->naasum_u, recog2->naasum_u, 0, -1); numaJoin(recog1->nasum_u, recog2->nasum_u, 0, -1); pixaaJoin(recog1->pixaa, recog2->pixaa, 0, -1); pixaJoin(recog1->pixa, recog2->pixa, 0, -1); ptaaJoin(recog1->ptaa, recog2->ptaa, 0, -1); ptaJoin(recog1->pta, recog2->pta, 0, -1); numaaJoin(recog1->naasum, recog2->naasum, 0, -1); numaJoin(recog1->nasum, recog2->nasum, 0, -1); return 0; } /*------------------------------------------------------------------------* * Character/index lookup * *------------------------------------------------------------------------*/ /*! * recogGetClassIndex() * * Input: recog (with LUT's pre-computed) * val (integer value; can be up to 3 bytes for UTF-8) * text (text from which @val was derived; used if not found) * &index ( index into dna_tochar) * Return: 0 if found; 1 if not found and added; 2 on error. * * Notes: * (1) This is used during training. It searches the * dna character array for @val. If not found, it increments * the setsize by 1, augmenting both the index and text arrays. * (2) Returns the index in &index, except on error. * (3) Caller must check the function return value. */ l_int32 recogGetClassIndex(L_RECOG *recog, l_int32 val, char *text, l_int32 *pindex) { l_int32 i, n, ival; PROCNAME("recogGetClassIndex"); if (!pindex) return ERROR_INT("&index not defined", procName, 2); *pindex = 0; if (!recog) return ERROR_INT("recog not defined", procName, 2); if (!text) return ERROR_INT("text not defined", procName, 2); /* Search existing characters */ n = l_dnaGetCount(recog->dna_tochar); for (i = 0; i < n; i++) { l_dnaGetIValue(recog->dna_tochar, i, &ival); if (val == ival) { /* found */ *pindex = i; return 0; } } /* If not found... */ l_dnaAddNumber(recog->dna_tochar, val); sarrayAddString(recog->sa_text, text, L_COPY); recog->setsize++; *pindex = n; return 1; } /*! * recogStringToIndex() * * Input: recog * text (text string for some class) * &index ( index for that class; -1 if not found) * Return: 0 if OK, 1 on error (not finding the string is an error) */ l_int32 recogStringToIndex(L_RECOG *recog, char *text, l_int32 *pindex) { char *charstr; l_int32 i, n, diff; PROCNAME("recogStringtoIndex"); if (!pindex) return ERROR_INT("&index not defined", procName, 1); *pindex = -1; if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!text) return ERROR_INT("text not defined", procName, 1); /* Search existing characters */ n = recog->setsize; for (i = 0; i < n; i++) { recogGetClassString(recog, i, &charstr); if (!charstr) { L_ERROR("string not found for index %d\n", procName, i); continue; } diff = strcmp(text, charstr); FREE(charstr); if (diff) continue; *pindex = i; return 0; } return 1; /* not found */ } /*! * recogGetClassString() * * Input: recog * index (into array of char types) * &charstr ( string representation; * returns an empty string on error) * Return: 0 if found, 1 on error * * Notes: * (1) Extracts a copy of the string from sa_text, which * the caller must free. * (2) Caller must check the function return value. */ l_int32 recogGetClassString(L_RECOG *recog, l_int32 index, char **pcharstr) { PROCNAME("recogGetClassString"); if (!pcharstr) return ERROR_INT("&charstr not defined", procName, 1); *pcharstr = stringNew(""); if (!recog) return ERROR_INT("recog not defined", procName, 2); if (index < 0 || index >= recog->setsize) return ERROR_INT("invalid index", procName, 1); FREE(*pcharstr); *pcharstr = sarrayGetString(recog->sa_text, index, L_COPY); return 0; } /*! * l_convertCharstrToInt() * * Input: str (input string representing one UTF-8 character; * not more than 4 bytes) * &val ( integer value for the input. Think of it * as a 1-to-1 hash code.) * Return: 0 if OK, 1 on error */ l_int32 l_convertCharstrToInt(const char *str, l_int32 *pval) { l_int32 size, val; PROCNAME("l_convertCharstrToInt"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0; if (!str) return ERROR_INT("str not defined", procName, 1); size = strlen(str); if (size == 0) return ERROR_INT("empty string", procName, 1); if (size > 4) return ERROR_INT("invalid string: > 4 bytes", procName, 1); val = (l_int32)str[0]; if (size > 1) val = (val << 8) + (l_int32)str[1]; if (size > 2) val = (val << 8) + (l_int32)str[2]; if (size > 3) val = (val << 8) + (l_int32)str[3]; *pval = val; return 0; } /*------------------------------------------------------------------------* * Serialization * *------------------------------------------------------------------------*/ /*! * recogaRead() * * Input: filename * Return: recoga, or null on error * * Notes: * (1) This allows serialization of an array of recognizers, each of which * can be used for different fonts, font styles, etc. */ L_RECOGA * recogaRead(const char *filename) { FILE *fp; L_RECOGA *recoga; PROCNAME("recogaRead"); if (!filename) return (L_RECOGA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_RECOGA *)ERROR_PTR("stream not opened", procName, NULL); if ((recoga = recogaReadStream(fp)) == NULL) { fclose(fp); return (L_RECOGA *)ERROR_PTR("recoga not read", procName, NULL); } fclose(fp); return recoga; } /*! * recogaReadStream() * * Input: stream * Return: recog, or null on error */ L_RECOGA * recogaReadStream(FILE *fp) { l_int32 version, i, nrec, ignore; L_RECOG *recog; L_RECOGA *recoga; PROCNAME("recogaReadStream"); if (!fp) return (L_RECOGA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nRecog Version %d\n", &version) != 1) return (L_RECOGA *)ERROR_PTR("not a recog file", procName, NULL); if (version != RECOG_VERSION_NUMBER) return (L_RECOGA *)ERROR_PTR("invalid recog version", procName, NULL); if (fscanf(fp, "Number of recognizers = %d\n\n", &nrec) != 1) return (L_RECOGA *)ERROR_PTR("nrec not read", procName, NULL); recoga = recogaCreate(nrec); for (i = 0; i < nrec; i++) { ignore = fscanf(fp, "==============================\n"); if (fscanf(fp, "Recognizer %d\n", &ignore) != 1) return (L_RECOGA *)ERROR_PTR("malformed file", procName, NULL); if ((recog = recogReadStream(fp)) == NULL) { recogaDestroy(&recoga); L_ERROR("recog read failed for recog %d\n", procName, i); return NULL; } ignore = fscanf(fp, "\n"); recogaAddRecog(recoga, recog); } return recoga; } /*! * recogaWrite() * * Input: filename * recoga * Return: 0 if OK, 1 on error */ l_int32 recogaWrite(const char *filename, L_RECOGA *recoga) { FILE *fp; PROCNAME("recogaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!recoga) return ERROR_INT("recoga not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (recogaWriteStream(fp, recoga, filename)) return ERROR_INT("recoga not written to stream", procName, 1); fclose(fp); return 0; } /*! * recogaWriteStream() * * Input: stream (opened for "wb") * recoga * filename (output serialized filename; embedded in file) * Return: 0 if OK, 1 on error */ l_int32 recogaWriteStream(FILE *fp, L_RECOGA *recoga, const char *filename) { l_int32 i; L_RECOG *recog; PROCNAME("recogaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!recoga) return ERROR_INT("recoga not defined", procName, 1); fprintf(fp, "\nRecog Version %d\n", RECOG_VERSION_NUMBER); fprintf(fp, "Number of recognizers = %d\n\n", recoga->n); for (i = 0; i < recoga->n; i++) { fprintf(fp, "==============================\n"); fprintf(fp, "Recognizer %d\n", i); recog = recogaGetRecog(recoga, i); recogWriteStream(fp, recog, filename); fprintf(fp, "\n"); } return 0; } /*! * recogaWritePixaa() * * Input: filename * recoga * Return: 0 if OK, 1 on error * * Notes: * (1) For each recognizer, this generates a pixa of all the * unscaled images. They are combined into a pixaa for * the set of recognizers. Each pix has has its character * string in the pix text field. * (2) As a side-effect, the character class label is written * into each pix in recog. */ l_int32 recogaWritePixaa(const char *filename, L_RECOGA *recoga) { l_int32 i; PIXA *pixa; PIXAA *paa; L_RECOG *recog; PROCNAME("recogaWritePixaa"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!recoga) return ERROR_INT("recoga not defined", procName, 1); paa = pixaaCreate(recoga->n); for (i = 0; i < recoga->n; i++) { recog = recogaGetRecog(recoga, i); recogAddCharstrLabels(recog); pixa = pixaaFlattenToPixa(recog->pixaa_u, NULL, L_CLONE); pixaaAddPixa(paa, pixa, L_INSERT); } pixaaWrite(filename, paa); pixaaDestroy(&paa); return 0; } /*! * recogRead() * * Input: filename * Return: recog, or null on error * * Notes: * (1) Serialization can be applied to any recognizer, including * one with more than one "font". That is, it can have * multiple character classes with the same character set * description, where each of those classes contains characters * that are very similar in size and shape. Each pixa in * the serialized pixaa contains images for a single character * class. */ L_RECOG * recogRead(const char *filename) { FILE *fp; L_RECOG *recog; PROCNAME("recogRead"); if (!filename) return (L_RECOG *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_RECOG *)ERROR_PTR("stream not opened", procName, NULL); if ((recog = recogReadStream(fp)) == NULL) { fclose(fp); return (L_RECOG *)ERROR_PTR("recog not read", procName, NULL); } fclose(fp); return recog; } /*! * recogReadStream() * * Input: stream * Return: recog, or null on error */ L_RECOG * recogReadStream(FILE *fp) { char fname[256]; l_int32 version, setsize, templ_type, threshold, scalew, scaleh; l_int32 maxyshift, nc; L_DNA *dna_tochar; PIXAA *paa; L_RECOG *recog; SARRAY *sa_text; PROCNAME("recogReadStream"); if (!fp) return (L_RECOG *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nRecog Version %d\n", &version) != 1) return (L_RECOG *)ERROR_PTR("not a recog file", procName, NULL); if (version != RECOG_VERSION_NUMBER) return (L_RECOG *)ERROR_PTR("invalid recog version", procName, NULL); if (fscanf(fp, "Size of character set = %d\n", &setsize) != 1) return (L_RECOG *)ERROR_PTR("setsize not read", procName, NULL); if (fscanf(fp, "Template type = %d\n", &templ_type) != 1) return (L_RECOG *)ERROR_PTR("template type not read", procName, NULL); if (fscanf(fp, "Binarization threshold = %d\n", &threshold) != 1) return (L_RECOG *)ERROR_PTR("binary thresh not read", procName, NULL); if (fscanf(fp, "Maxyshift = %d\n", &maxyshift) != 1) return (L_RECOG *)ERROR_PTR("maxyshift not read", procName, NULL); if (fscanf(fp, "Scale to width = %d\n", &scalew) != 1) return (L_RECOG *)ERROR_PTR("width not read", procName, NULL); if (fscanf(fp, "Scale to height = %d\n", &scaleh) != 1) return (L_RECOG *)ERROR_PTR("height not read", procName, NULL); if ((recog = recogCreate(scalew, scaleh, templ_type, threshold, maxyshift, NULL)) == NULL) return (L_RECOG *)ERROR_PTR("recog not made", procName, NULL); if (fscanf(fp, "Serialized filename: %s\n", fname) != 1) return (L_RECOG *)ERROR_PTR("filename not read", procName, NULL); if (fscanf(fp, "\nLabels for character set:\n") != 0) return (L_RECOG *)ERROR_PTR("label intro not read", procName, NULL); l_dnaDestroy(&recog->dna_tochar); sarrayDestroy(&recog->sa_text); if ((dna_tochar = l_dnaReadStream(fp)) == NULL) return (L_RECOG *)ERROR_PTR("dna_tochar not read", procName, NULL); if ((sa_text = sarrayReadStream(fp)) == NULL) return (L_RECOG *)ERROR_PTR("sa_text not read", procName, NULL); recog->sa_text = sa_text; recog->dna_tochar = dna_tochar; if (fscanf(fp, "\nPixaa of all samples in the training set:\n") != 0) return (L_RECOG *)ERROR_PTR("pixaa intro not read", procName, NULL); if ((paa = pixaaReadStream(fp)) == NULL) return (L_RECOG *)ERROR_PTR("pixaa not read", procName, NULL); recog->fname = stringNew(fname); recog->setsize = setsize; nc = pixaaGetCount(paa, NULL); if (nc != setsize) { L_ERROR("(setsize = %d) != (paa count = %d)\n", procName, setsize, nc); return NULL; } recogAddAllSamples(recog, paa, 0); /* this finishes */ pixaaDestroy(&paa); return recog; } /*! * recogWrite() * * Input: filename * recog * Return: 0 if OK, 1 on error */ l_int32 recogWrite(const char *filename, L_RECOG *recog) { FILE *fp; PROCNAME("recogWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!recog) return ERROR_INT("recog not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (recogWriteStream(fp, recog, filename)) return ERROR_INT("recog not written to stream", procName, 1); fclose(fp); return 0; } /*! * recogWriteStream() * * Input: stream (opened for "wb") * recog * filename (output serialized filename; embedded in file) * Return: 0 if OK, 1 on error */ l_int32 recogWriteStream(FILE *fp, L_RECOG *recog, const char *filename) { PROCNAME("recogWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!filename) return ERROR_INT("filename not defined", procName, 1); fprintf(fp, "\nRecog Version %d\n", RECOG_VERSION_NUMBER); fprintf(fp, "Size of character set = %d\n", recog->setsize); fprintf(fp, "Template type = %d\n", recog->templ_type); fprintf(fp, "Binarization threshold = %d\n", recog->threshold); fprintf(fp, "Maxyshift = %d\n", recog->maxyshift); fprintf(fp, "Scale to width = %d\n", recog->scalew); fprintf(fp, "Scale to height = %d\n", recog->scaleh); fprintf(fp, "Serialized filename: %s\n", filename); fprintf(fp, "\nLabels for character set:\n"); l_dnaWriteStream(fp, recog->dna_tochar); sarrayWriteStream(fp, recog->sa_text); fprintf(fp, "\nPixaa of all samples in the training set:\n"); pixaaWriteStream(fp, recog->pixaa); return 0; } /*! * recogWritePixa() * * Input: filename * recog * Return: 0 if OK, 1 on error * * Notes: * (1) This generates a pixa of all the unscaled images in the * recognizer, where each one has its character string in * the pix text field, by flattening pixaa_u to a pixa. * (2) As a side-effect, the character class label is written * into each pix in recog. */ l_int32 recogWritePixa(const char *filename, L_RECOG *recog) { PIXA *pixa; PROCNAME("recogWritePixa"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!recog) return ERROR_INT("recog not defined", procName, 1); recogAddCharstrLabels(recog); pixa = pixaaFlattenToPixa(recog->pixaa_u, NULL, L_CLONE); pixaWrite(filename, pixa); pixaDestroy(&pixa); return 0; } /*! * recogAddCharstrLabels() * * Input: filename * recog * Return: 0 if OK, 1 on error */ static l_int32 recogAddCharstrLabels(L_RECOG *recog) { char *text; l_int32 i, j, n1, n2; PIX *pix; PIXA *pixa; PIXAA *paa; PROCNAME("recogAddCharstrLabels"); if (!recog) return ERROR_INT("recog not defined", procName, 1); /* Add the labels to each unscaled pix */ paa = recog->pixaa_u; n1 = pixaaGetCount(paa, NULL); for (i = 0; i < n1; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); text = sarrayGetString(recog->sa_text, i, L_NOCOPY); n2 = pixaGetCount(pixa); for (j = 0; j < n2; j++) { pix = pixaGetPix(pixa, j, L_CLONE); pixSetText(pix, text); pixDestroy(&pix); } pixaDestroy(&pixa); } return 0; } /*! * recogAddAllSamples() * * Input: recog * paa (pixaa from previously trained recog) * debug * Return: 0 if OK, 1 on error * * Notes: * (1) This is used with the serialization routine recogRead(), * where each pixa in the pixaa represents a set of characters * in a different class. Two different pixa may represent * characters with the same label. Before calling this * function, we verify that the number of character classes, * given by the setsize field in recog, equals the number of * pixa in the paa. The character labels for each set are * in the sa_text field. */ static l_int32 recogAddAllSamples(L_RECOG *recog, PIXAA *paa, l_int32 debug) { char *text; l_int32 i, j, nc, ns; PIX *pix; PIXA *pixa; PROCNAME("recogAddAllSamples"); if (!recog) return ERROR_INT("recog not defined", procName, 1); if (!paa) return ERROR_INT("paa not defined", procName, 1); nc = pixaaGetCount(paa, NULL); for (i = 0; i < nc; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); ns = pixaGetCount(pixa); text = sarrayGetString(recog->sa_text, i, L_NOCOPY); for (j = 0; j < ns; j++) { pix = pixaGetPix(pixa, j, L_CLONE); if (debug) { fprintf(stderr, "pix[%d,%d]: text = %s\n", i, j, text); } pixaaAddPix(recog->pixaa_u, i, pix, NULL, L_INSERT); } pixaDestroy(&pixa); } recogTrainingFinished(recog, debug); return 0; } leptonica-1.70/src/binreduce.c0000644000175000017500000003147312244216131014404 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binreduce.c * * Subsampled 2x reduction * PIX *pixReduceBinary2() * * Rank filtered 2x reductions * PIX *pixReduceRankBinaryCascade() * PIX *pixReduceRankBinary2() * * Permutation table for 2x rank binary reduction * l_uint8 *makeSubsampleTab2x(void) */ #include #include "allheaders.h" /*------------------------------------------------------------------* * Subsampled reduction * *------------------------------------------------------------------*/ /*! * pixReduceBinary2() * * Input: pixs * tab (; if null, a table is made here * and destroyed before exit) * Return: pixd (2x subsampled), or null on error * * Notes: * (1) After folding, the data is in bytes 0 and 2 of the word, * and the bits in each byte are in the following order * (with 0 being the leftmost originating pair and 7 being * the rightmost originating pair): * 0 4 1 5 2 6 3 7 * These need to be permuted to * 0 1 2 3 4 5 6 7 * which is done with an 8-bit table generated by makeSubsampleTab2x(). */ PIX * pixReduceBinary2(PIX *pixs, l_uint8 *intab) { l_uint8 byte0, byte1; l_uint8 *tab; l_uint16 shortd; l_int32 i, id, j, ws, hs, wpls, wpld, wplsi; l_uint32 word; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixReduceBinary2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not binary", procName, NULL); if (intab) { /* use input table */ tab = intab; } else { if ((tab = makeSubsampleTab2x()) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); } ws = pixGetWidth(pixs); hs = pixGetHeight(pixs); if (hs <= 1) return (PIX *)ERROR_PTR("hs must be at least 2", procName, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); if ((pixd = pixCreate(ws / 2, hs / 2, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* e.g., if ws = 65: wd = 32, wpls = 3, wpld = 1 --> trouble */ wplsi = L_MIN(wpls, 2 * wpld); /* iterate over this number of words */ for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word = *(lines + j); word = word & 0xaaaaaaaa; /* mask */ word = word | (word << 7); /* fold; data in bytes 0 & 2 */ byte0 = word >> 24; byte1 = (word >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } if (intab == NULL) FREE(tab); return pixd; } /*------------------------------------------------------------------* * Rank filtered binary reductions * *------------------------------------------------------------------*/ /*! * pixReduceRankBinaryCascade() * * Input: pixs (1 bpp) * level1, ... level 4 (thresholds, in the set {0, 1, 2, 3, 4}) * Return: pixd, or null on error * * Notes: * (1) This performs up to four cascaded 2x rank reductions. * (2) Use level = 0 to truncate the cascade. */ PIX * pixReduceRankBinaryCascade(PIX *pixs, l_int32 level1, l_int32 level2, l_int32 level3, l_int32 level4) { PIX *pix1, *pix2, *pix3, *pix4; l_uint8 *tab; PROCNAME("pixReduceRankBinaryCascade"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be binary", procName, NULL); if (level1 > 4 || level2 > 4 || level3 > 4 || level4 > 4) return (PIX *)ERROR_PTR("levels must not exceed 4", procName, NULL); if (level1 <= 0) { L_WARNING("no reduction because level1 not > 0\n", procName); return pixCopy(NULL, pixs); } if ((tab = makeSubsampleTab2x()) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); pix1 = pixReduceRankBinary2(pixs, level1, tab); if (level2 <= 0) { FREE(tab); return pix1; } pix2 = pixReduceRankBinary2(pix1, level2, tab); pixDestroy(&pix1); if (level3 <= 0) { FREE(tab); return pix2; } pix3 = pixReduceRankBinary2(pix2, level3, tab); pixDestroy(&pix2); if (level4 <= 0) { FREE(tab); return pix3; } pix4 = pixReduceRankBinary2(pix3, level4, tab); pixDestroy(&pix3); FREE(tab); return pix4; } /*! * pixReduceRankBinary2() * * Input: pixs (1 bpp) * level (rank threshold: 1, 2, 3, 4) * intab (; if null, a table is made here * and destroyed before exit) * Return: pixd (1 bpp, 2x rank threshold reduced), or null on error * * Notes: * (1) pixd is downscaled by 2x from pixs. * (2) The rank threshold specifies the minimum number of ON * pixels in each 2x2 region of pixs that are required to * set the corresponding pixel ON in pixd. * (3) Rank filtering is done to the UL corner of each 2x2 pixel block, * using only logical operations. Then these pixels are chosen * in the 2x subsampling process, subsampled, as described * above in pixReduceBinary2(). */ PIX * pixReduceRankBinary2(PIX *pixs, l_int32 level, l_uint8 *intab) { l_uint8 byte0, byte1; l_uint8 *tab; l_uint16 shortd; l_int32 i, id, j, ws, hs, wpls, wpld, wplsi; l_uint32 word1, word2, word3, word4; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixReduceRankBinary2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not binary", procName, NULL); if (level < 1 || level > 4) return (PIX *)ERROR_PTR("level must be in set {1,2,3,4}", procName, NULL); if (intab) { /* use input table */ tab = intab; } else { if ((tab = makeSubsampleTab2x()) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); } ws = pixGetWidth(pixs); hs = pixGetHeight(pixs); if (hs <= 1) return (PIX *)ERROR_PTR("hs must be at least 2", procName, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); if ((pixd = pixCreate(ws / 2, hs / 2, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, 0.5, 0.5); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); /* e.g., if ws = 65: wd = 32, wpls = 3, wpld = 1 --> trouble */ wplsi = L_MIN(wpls, 2 * wpld); /* iterate over this number of words */ switch (level) { case 1: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* OR/OR */ word2 = word1 | word2; word2 = word2 | (word2 << 1); word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; case 2: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* (AND/OR) OR (OR/AND) */ word3 = word1 & word2; word3 = word3 | (word3 << 1); word4 = word1 | word2; word4 = word4 & (word4 << 1); word2 = word3 | word4; word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; case 3: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* (AND/OR) AND (OR/AND) */ word3 = word1 & word2; word3 = word3 | (word3 << 1); word4 = word1 | word2; word4 = word4 & (word4 << 1); word2 = word3 & word4; word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; case 4: for (i = 0, id = 0; i < hs - 1; i += 2, id++) { lines = datas + i * wpls; lined = datad + id * wpld; for (j = 0; j < wplsi; j++) { word1 = *(lines + j); word2 = *(lines + wpls + j); /* AND/AND */ word2 = word1 & word2; word2 = word2 & (word2 << 1); word2 = word2 & 0xaaaaaaaa; /* mask */ word1 = word2 | (word2 << 7); /* fold; data in bytes 0 & 2 */ byte0 = word1 >> 24; byte1 = (word1 >> 8) & 0xff; shortd = (tab[byte0] << 8) | tab[byte1]; SET_DATA_TWO_BYTES(lined, j, shortd); } } break; } if (!intab) FREE(tab); return pixd; } /*! * makeSubsampleTab2x() * * This table permutes the bits in a byte, from * 0 4 1 5 2 6 3 7 * to * 0 1 2 3 4 5 6 7 */ l_uint8 * makeSubsampleTab2x(void) { l_uint8 *tab; l_int32 i; PROCNAME("makeSubsampleTab2x"); if ((tab = (l_uint8 *) CALLOC(256, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 256; i++) tab[i] = ((i & 0x01) ) | /* 7 */ ((i & 0x04) >> 1) | /* 6 */ ((i & 0x10) >> 2) | /* 5 */ ((i & 0x40) >> 3) | /* 4 */ ((i & 0x02) << 3) | /* 3 */ ((i & 0x08) << 2) | /* 2 */ ((i & 0x20) << 1) | /* 1 */ ((i & 0x80) ); /* 0 */ return tab; } leptonica-1.70/src/ptafunc1.c0000644000175000017500000021002212244227647014170 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * ptafunc1.c * * Pta and Ptaa rearrangements * PTA *ptaSubsample() * l_int32 ptaJoin() * l_int32 ptaaJoin() * PTA *ptaReverse() * PTA *ptaTranspose() * PTA *ptaCyclicPerm() * PTA *ptaSort() * l_int32 ptaGetSortIndex() * PTA *ptaSortByIndex() * PTA *ptaRemoveDuplicates() * PTAA *ptaaSortByIndex() * * Geometric * BOX *ptaGetBoundingRegion() * l_int32 *ptaGetRange() * PTA *ptaGetInsideBox() * PTA *pixFindCornerPixels() * l_int32 ptaContainsPt() * l_int32 ptaTestIntersection() * PTA *ptaTransform() * l_int32 ptaPtInsidePolygon() * l_float32 l_angleBetweenVectors() * * Least Squares Fit * l_int32 ptaGetLinearLSF() * l_int32 ptaGetQuadraticLSF() * l_int32 ptaGetCubicLSF() * l_int32 ptaGetQuarticLSF() * l_int32 ptaNoisyLinearLSF() * l_int32 ptaNoisyQuadraticLSF() * l_int32 applyLinearFit() * l_int32 applyQuadraticFit() * l_int32 applyCubicFit() * l_int32 applyQuarticFit() * * Interconversions with Pix * l_int32 pixPlotAlongPta() * PTA *ptaGetPixelsFromPix() * PIX *pixGenerateFromPta() * PTA *ptaGetBoundaryPixels() * PTAA *ptaaGetBoundaryPixels() * * Display Pta and Ptaa * PIX *pixDisplayPta() * PIX *pixDisplayPtaaPattern() * PIX *pixDisplayPtaPattern() * PTA *ptaReplicatePattern() * PIX *pixDisplayPtaa() */ #include #include "allheaders.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif /* M_PI */ /* Default spreading factor for hashing pts in a plane */ static const l_int32 DEFAULT_SPREADING_FACTOR = 7500; /*---------------------------------------------------------------------* * Pta rearrangements * *---------------------------------------------------------------------*/ /*! * ptaSubsample() * * Input: ptas * subfactor (subsample factor, >= 1) * Return: ptad (evenly sampled pt values from ptas, or null on error */ PTA * ptaSubsample(PTA *ptas, l_int32 subfactor) { l_int32 n, i; l_float32 x, y; PTA *ptad; PROCNAME("pixSubsample"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (subfactor < 1) return (PTA *)ERROR_PTR("subfactor < 1", procName, NULL); ptad = ptaCreate(0); n = ptaGetCount(ptas); for (i = 0; i < n; i++) { if (i % subfactor != 0) continue; ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } return ptad; } /*! * ptaJoin() * * Input: ptad (dest pta; add to this one) * ptas (source pta; add from this one) * istart (starting index in ptas) * iend (ending index in ptas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) istart < 0 is taken to mean 'read from the start' (istart = 0) * (2) iend < 0 means 'read to the end' * (3) if ptas == NULL, this is a no-op */ l_int32 ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend) { l_int32 n, i, x, y; PROCNAME("ptaJoin"); if (!ptad) return ERROR_INT("ptad not defined", procName, 1); if (!ptas) return 0; if (istart < 0) istart = 0; n = ptaGetCount(ptas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; no pts", procName, 1); for (i = istart; i <= iend; i++) { ptaGetIPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } return 0; } /*! * ptaaJoin() * * Input: ptaad (dest ptaa; add to this one) * ptaas (source ptaa; add from this one) * istart (starting index in ptaas) * iend (ending index in ptaas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) istart < 0 is taken to mean 'read from the start' (istart = 0) * (2) iend < 0 means 'read to the end' * (3) if ptas == NULL, this is a no-op */ l_int32 ptaaJoin(PTAA *ptaad, PTAA *ptaas, l_int32 istart, l_int32 iend) { l_int32 n, i; PTA *pta; PROCNAME("ptaaJoin"); if (!ptaad) return ERROR_INT("ptaad not defined", procName, 1); if (!ptaas) return 0; if (istart < 0) istart = 0; n = ptaaGetCount(ptaas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; no pts", procName, 1); for (i = istart; i <= iend; i++) { pta = ptaaGetPta(ptaas, i, L_CLONE); ptaaAddPta(ptaad, pta, L_INSERT); } return 0; } /*! * ptaReverse() * * Input: ptas * type (0 for float values; 1 for integer values) * Return: ptad (reversed pta), or null on error */ PTA * ptaReverse(PTA *ptas, l_int32 type) { l_int32 n, i, ix, iy; l_float32 x, y; PTA *ptad; PROCNAME("ptaReverse"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); n = ptaGetCount(ptas); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = n - 1; i >= 0; i--) { if (type == 0) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, x, y); } else { /* type == 1 */ ptaGetIPt(ptas, i, &ix, &iy); ptaAddPt(ptad, ix, iy); } } return ptad; } /*! * ptaTranspose() * * Input: ptas * Return: ptad (with x and y values swapped), or null on error */ PTA * ptaTranspose(PTA *ptas) { l_int32 n, i; l_float32 x, y; PTA *ptad; PROCNAME("ptaTranspose"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); n = ptaGetCount(ptas); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = 0; i < n; i++) { ptaGetPt(ptas, i, &x, &y); ptaAddPt(ptad, y, x); } return ptad; } /*! * ptaCyclicPerm() * * Input: ptas * xs, ys (start point; must be in ptas) * Return: ptad (cyclic permutation, starting and ending at (xs, ys), * or null on error * * Notes: * (1) Check to insure that (a) ptas is a closed path where * the first and last points are identical, and (b) the * resulting pta also starts and ends on the same point * (which in this case is (xs, ys). */ PTA * ptaCyclicPerm(PTA *ptas, l_int32 xs, l_int32 ys) { l_int32 n, i, x, y, j, index, state; l_int32 x1, y1, x2, y2; PTA *ptad; PROCNAME("ptaCyclicPerm"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); n = ptaGetCount(ptas); /* Verify input data */ ptaGetIPt(ptas, 0, &x1, &y1); ptaGetIPt(ptas, n - 1, &x2, &y2); if (x1 != x2 || y1 != y2) return (PTA *)ERROR_PTR("start and end pts not same", procName, NULL); state = L_NOT_FOUND; for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); if (x == xs && y == ys) { state = L_FOUND; break; } } if (state == L_NOT_FOUND) return (PTA *)ERROR_PTR("start pt not in ptas", procName, NULL); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (j = 0; j < n - 1; j++) { if (i + j < n - 1) index = i + j; else index = (i + j + 1) % n; ptaGetIPt(ptas, index, &x, &y); ptaAddPt(ptad, x, y); } ptaAddPt(ptad, xs, ys); return ptad; } /*! * ptaSort() * * Input: ptas * sorttype (L_SORT_BY_X, L_SORT_BY_Y) * sortorder (L_SORT_INCREASING, L_SORT_DECREASING) * &naindex ( index of sorted order into * original array) * Return: ptad (sorted version of ptas), or null on error */ PTA * ptaSort(PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { PTA *ptad; NUMA *naindex; PROCNAME("ptaSort"); if (pnaindex) *pnaindex = NULL; if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) return (PTA *)ERROR_PTR("invalid sort type", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (PTA *)ERROR_PTR("invalid sort order", procName, NULL); if (ptaGetSortIndex(ptas, sorttype, sortorder, &naindex) != 0) return (PTA *)ERROR_PTR("naindex not made", procName, NULL); ptad = ptaSortByIndex(ptas, naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); if (!ptad) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); return ptad; } /*! * ptaGetSortIndex() * * Input: ptas * sorttype (L_SORT_BY_X, L_SORT_BY_Y) * sortorder (L_SORT_INCREASING, L_SORT_DECREASING) * &naindex ( index of sorted order into * original array) * Return: 0 if OK, 1 on error */ l_int32 ptaGetSortIndex(PTA *ptas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { l_int32 i, n; l_float32 x, y; NUMA *na; PROCNAME("ptaGetSortIndex"); if (!pnaindex) return ERROR_INT("&naindex not defined", procName, 1); *pnaindex = NULL; if (!ptas) return ERROR_INT("ptas not defined", procName, 1); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y) return ERROR_INT("invalid sort type", procName, 1); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sort order", procName, 1); /* Build up numa of specific data */ n = ptaGetCount(ptas); if ((na = numaCreate(n)) == NULL) return ERROR_INT("na not made", procName, 1); for (i = 0; i < n; i++) { ptaGetPt(ptas, i, &x, &y); if (sorttype == L_SORT_BY_X) numaAddNumber(na, x); else numaAddNumber(na, y); } /* Get the sort index for data array */ *pnaindex = numaGetSortIndex(na, sortorder); numaDestroy(&na); if (!*pnaindex) return ERROR_INT("naindex not made", procName, 1); return 0; } /*! * ptaSortByIndex() * * Input: ptas * naindex (na that maps from the new pta to the input pta) * Return: ptad (sorted), or null on error */ PTA * ptaSortByIndex(PTA *ptas, NUMA *naindex) { l_int32 i, index, n; l_float32 x, y; PTA *ptad; PROCNAME("ptaSortByIndex"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (!naindex) return (PTA *)ERROR_PTR("naindex not defined", procName, NULL); /* Build up sorted pta using sort index */ n = numaGetCount(naindex); if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); ptaGetPt(ptas, index, &x, &y); ptaAddPt(ptad, x, y); } return ptad; } /*! * ptaRemoveDuplicates() * * Input: ptas (assumed to be integer values) * factor (should be larger than the largest point value; * use 0 for default) * Return: ptad (with duplicates removed), or null on error */ PTA * ptaRemoveDuplicates(PTA *ptas, l_uint32 factor) { l_int32 nsize, i, j, k, index, n, nvals; l_int32 x, y, xk, yk; l_int32 *ia; PTA *ptad; NUMA *na; NUMAHASH *nahash; PROCNAME("ptaRemoveDuplicates"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (factor == 0) factor = DEFAULT_SPREADING_FACTOR; /* Build up numaHash of indices, hashed by a key that is * a large linear combination of x and y values designed to * randomize the key. */ nsize = 5507; /* buckets in hash table; prime */ nahash = numaHashCreate(nsize, 2); n = ptaGetCount(ptas); for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); numaHashAdd(nahash, factor * x + y, (l_float32)i); } if ((ptad = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("ptad not made", procName, NULL); for (i = 0; i < nsize; i++) { na = numaHashGetNuma(nahash, i); if (!na) continue; nvals = numaGetCount(na); /* If more than 1 pt, compare exhaustively with double loop; * otherwise, just enter it. */ if (nvals > 1) { if ((ia = (l_int32 *)CALLOC(nvals, sizeof(l_int32))) == NULL) return (PTA *)ERROR_PTR("ia not made", procName, NULL); for (j = 0; j < nvals; j++) { if (ia[j] == 1) continue; numaGetIValue(na, j, &index); ptaGetIPt(ptas, index, &x, &y); ptaAddPt(ptad, x, y); for (k = j + 1; k < nvals; k++) { if (ia[k] == 1) continue; numaGetIValue(na, k, &index); ptaGetIPt(ptas, index, &xk, &yk); if (x == xk && y == yk) /* duplicate */ ia[k] = 1; } } FREE(ia); } else { numaGetIValue(na, 0, &index); ptaGetIPt(ptas, index, &x, &y); ptaAddPt(ptad, x, y); } numaDestroy(&na); /* the clone */ } numaHashDestroy(&nahash); return ptad; } /*! * ptaaSortByIndex() * * Input: ptaas * naindex (na that maps from the new ptaa to the input ptaa) * Return: ptaad (sorted), or null on error */ PTAA * ptaaSortByIndex(PTAA *ptaas, NUMA *naindex) { l_int32 i, n, index; PTA *pta; PTAA *ptaad; PROCNAME("ptaaSortByIndex"); if (!ptaas) return (PTAA *)ERROR_PTR("ptaas not defined", procName, NULL); if (!naindex) return (PTAA *)ERROR_PTR("naindex not defined", procName, NULL); n = ptaaGetCount(ptaas); if (numaGetCount(naindex) != n) return (PTAA *)ERROR_PTR("numa and ptaa sizes differ", procName, NULL); ptaad = ptaaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); pta = ptaaGetPta(ptaas, index, L_COPY); ptaaAddPta(ptaad, pta, L_INSERT); } return ptaad; } /*---------------------------------------------------------------------* * Geometric * *---------------------------------------------------------------------*/ /*! * ptaGetBoundingRegion() * * Input: pta * Return: box, or null on error * * Notes: * (1) This is used when the pta represents a set of points in * a two-dimensional image. It returns the box of minimum * size containing the pts in the pta. */ BOX * ptaGetBoundingRegion(PTA *pta) { l_int32 n, i, x, y, minx, maxx, miny, maxy; PROCNAME("ptaGetBoundingRegion"); if (!pta) return (BOX *)ERROR_PTR("pta not defined", procName, NULL); minx = 10000000; miny = 10000000; maxx = -10000000; maxy = -10000000; n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < minx) minx = x; if (x > maxx) maxx = x; if (y < miny) miny = y; if (y > maxy) maxy = y; } return boxCreate(minx, miny, maxx - minx + 1, maxy - miny + 1); } /*! * ptaGetRange() * * Input: pta * &minx ( min value of x) * &maxx ( max value of x) * &miny ( min value of y) * &maxy ( max value of y) * Return: 0 if OK, 1 on error * * Notes: * (1) We can use pts to represent pairs of floating values, that * are not necessarily tied to a two-dimension region. For * example, the pts can represent a general function y(x). */ l_int32 ptaGetRange(PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy) { l_int32 n, i; l_float32 x, y, minx, maxx, miny, maxy; PROCNAME("ptaGetRange"); if (!pminx && !pmaxx && !pminy && !pmaxy) return ERROR_INT("no output requested", procName, 1); if (pminx) *pminx = 0; if (pmaxx) *pmaxx = 0; if (pminy) *pminy = 0; if (pmaxy) *pmaxy = 0; if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((n = ptaGetCount(pta)) == 0) return ERROR_INT("no points in pta", procName, 1); ptaGetPt(pta, 0, &x, &y); minx = x; maxx = x; miny = y; maxy = y; for (i = 1; i < n; i++) { ptaGetPt(pta, i, &x, &y); if (x < minx) minx = x; if (x > maxx) maxx = x; if (y < miny) miny = y; if (y > maxy) maxy = y; } if (pminx) *pminx = minx; if (pmaxx) *pmaxx = maxx; if (pminy) *pminy = miny; if (pmaxy) *pmaxy = maxy; return 0; } /*! * ptaGetInsideBox() * * Input: ptas (input pts) * box * Return: ptad (of pts in ptas that are inside the box), or null on error */ PTA * ptaGetInsideBox(PTA *ptas, BOX *box) { PTA *ptad; l_int32 n, i, contains; l_float32 x, y; PROCNAME("ptaGetInsideBox"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (!box) return (PTA *)ERROR_PTR("box not defined", procName, NULL); n = ptaGetCount(ptas); ptad = ptaCreate(0); for (i = 0; i < n; i++) { ptaGetPt(ptas, i, &x, &y); boxContainsPt(box, x, y, &contains); if (contains) ptaAddPt(ptad, x, y); } return ptad; } /*! * pixFindCornerPixels() * * Input: pixs (1 bpp) * Return: pta, or null on error * * Notes: * (1) Finds the 4 corner-most pixels, as defined by a search * inward from each corner, using a 45 degree line. */ PTA * pixFindCornerPixels(PIX *pixs) { l_int32 i, j, x, y, w, h, wpl, mindim, found; l_uint32 *data, *line; PTA *pta; PROCNAME("pixFindCornerPixels"); if (!pixs) return (PTA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); mindim = L_MIN(w, h); data = pixGetData(pixs); wpl = pixGetWpl(pixs); if ((pta = ptaCreate(4)) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = i - j; line = data + y * wpl; if (GET_DATA_BIT(line, j)) { ptaAddPt(pta, j, y); found = TRUE; break; } } if (found == TRUE) break; } for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = i - j; line = data + y * wpl; x = w - 1 - j; if (GET_DATA_BIT(line, x)) { ptaAddPt(pta, x, y); found = TRUE; break; } } if (found == TRUE) break; } for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = h - 1 - i + j; line = data + y * wpl; if (GET_DATA_BIT(line, j)) { ptaAddPt(pta, j, y); found = TRUE; break; } } if (found == TRUE) break; } for (found = FALSE, i = 0; i < mindim; i++) { for (j = 0; j <= i; j++) { y = h - 1 - i + j; line = data + y * wpl; x = w - 1 - j; if (GET_DATA_BIT(line, x)) { ptaAddPt(pta, x, y); found = TRUE; break; } } if (found == TRUE) break; } return pta; } /*! * ptaContainsPt() * * Input: pta * x, y (point) * Return: 1 if contained, 0 otherwise or on error */ l_int32 ptaContainsPt(PTA *pta, l_int32 x, l_int32 y) { l_int32 i, n, ix, iy; PROCNAME("ptaContainsPt"); if (!pta) return ERROR_INT("pta not defined", procName, 0); n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &ix, &iy); if (x == ix && y == iy) return 1; } return 0; } /*! * ptaTestIntersection() * * Input: pta1, pta2 * Return: bval which is 1 if they have any elements in common; * 0 otherwise or on error. */ l_int32 ptaTestIntersection(PTA *pta1, PTA *pta2) { l_int32 i, j, n1, n2, x1, y1, x2, y2; PROCNAME("ptaTestIntersection"); if (!pta1) return ERROR_INT("pta1 not defined", procName, 0); if (!pta2) return ERROR_INT("pta2 not defined", procName, 0); n1 = ptaGetCount(pta1); n2 = ptaGetCount(pta2); for (i = 0; i < n1; i++) { ptaGetIPt(pta1, i, &x1, &y1); for (j = 0; j < n2; j++) { ptaGetIPt(pta2, i, &x2, &y2); if (x1 == x2 && y1 == y2) return 1; } } return 0; } /*! * ptaTransform() * * Input: pta * shiftx, shifty * scalex, scaley * Return: pta, or null on error * * Notes: * (1) Shift first, then scale. */ PTA * ptaTransform(PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley) { l_int32 n, i, x, y; PTA *ptad; PROCNAME("ptaTransform"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); n = ptaGetCount(ptas); ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); x = (l_int32)(scalex * (x + shiftx) + 0.5); y = (l_int32)(scaley * (y + shifty) + 0.5); ptaAddPt(ptad, x, y); } return ptad; } /*! * ptaPtInsidePolygon() * * Input: pta (vertices of a polygon) * x, y (point to be tested) * &inside ( 1 if inside; 0 if outside or on boundary) * Return: 1 if OK, 0 on error * * The abs value of the sum of the angles subtended from a point by * the sides of a polygon, when taken in order traversing the polygon, * is 0 if the point is outside the polygon and 2*pi if inside. * The sign will be positive if traversed cw and negative if ccw. */ l_int32 ptaPtInsidePolygon(PTA *pta, l_float32 x, l_float32 y, l_int32 *pinside) { l_int32 i, n; l_float32 sum, x1, y1, x2, y2, xp1, yp1, xp2, yp2; PROCNAME("ptaPtInsidePolygon"); if (!pinside) return ERROR_INT("&inside not defined", procName, 1); *pinside = 0; if (!pta) return ERROR_INT("pta not defined", procName, 1); /* Think of (x1,y1) as the end point of a vector that starts * from the origin (0,0), and ditto for (x2,y2). */ n = ptaGetCount(pta); sum = 0.0; for (i = 0; i < n; i++) { ptaGetPt(pta, i, &xp1, &yp1); ptaGetPt(pta, (i + 1) % n, &xp2, &yp2); x1 = xp1 - x; y1 = yp1 - y; x2 = xp2 - x; y2 = yp2 - y; sum += l_angleBetweenVectors(x1, y1, x2, y2); } if (L_ABS(sum) > M_PI) *pinside = 1; return 0; } /*! * l_angleBetweenVectors() * * Input: x1, y1 (end point of first vector) * x2, y2 (end point of second vector) * Return: angle (radians), or 0.0 on error * * Notes: * (1) This gives the angle between two vectors, going between * vector1 (x1,y1) and vector2 (x2,y2). The angle is swept * out from 1 --> 2. If this is clockwise, the angle is * positive, but the result is folded into the interval [-pi, pi]. */ l_float32 l_angleBetweenVectors(l_float32 x1, l_float32 y1, l_float32 x2, l_float32 y2) { l_float64 ang; ang = atan2(y2, x2) - atan2(y1, x1); if (ang > M_PI) ang -= 2.0 * M_PI; if (ang < -M_PI) ang += 2.0 * M_PI; return ang; } /*---------------------------------------------------------------------* * Least Squares Fit * *---------------------------------------------------------------------*/ /*! * ptaGetLinearLSF() * * Input: pta * &a ( slope a of least square fit: y = ax + b) * &b ( intercept b of least square fit) * &nafit ( numa of least square fit) * Return: 0 if OK, 1 on error * * Notes: * (1) Either or both &a and &b must be input. They determine the * type of line that is fit. * (2) If both &a and &b are defined, this returns a and b that minimize: * * sum (yi - axi -b)^2 * i * * The method is simple: differentiate this expression w/rt a and b, * and solve the resulting two equations for a and b in terms of * various sums over the input data (xi, yi). * (3) We also allow two special cases, where either a = 0 or b = 0: * (a) If &a is given and &b = null, find the linear LSF that * goes through the origin (b = 0). * (b) If &b is given and &a = null, find the linear LSF with * zero slope (a = 0). * (4) If @nafit is defined, this returns an array of fitted values, * corresponding to the two implicit Numa arrays (nax and nay) in pta. * Thus, just as you can plot the data in pta as nay vs. nax, * you can plot the linear least square fit as nafit vs. nax. */ l_int32 ptaGetLinearLSF(PTA *pta, l_float32 *pa, l_float32 *pb, NUMA **pnafit) { l_int32 n, i; l_float32 factor, sx, sy, sxx, sxy, val; l_float32 *xa, *ya; PROCNAME("ptaGetLinearLSF"); if (!pa && !pb) return ERROR_INT("neither &a nor &b are defined", procName, 1); if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pnafit) *pnafit = NULL; if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((n = ptaGetCount(pta)) < 2) return ERROR_INT("less than 2 pts found", procName, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sxx = sxy = 0.; if (pa && pb) { /* general line */ for (i = 0; i < n; i++) { sx += xa[i]; sy += ya[i]; sxx += xa[i] * xa[i]; sxy += xa[i] * ya[i]; } factor = n * sxx - sx * sx; if (factor == 0.0) return ERROR_INT("no solution found", procName, 1); factor = 1. / factor; *pa = factor * ((l_float32)n * sxy - sx * sy); *pb = factor * (sxx * sy - sx * sxy); } else if (pa) { /* b = 0; line through origin */ for (i = 0; i < n; i++) { sxx += xa[i] * xa[i]; sxy += xa[i] * ya[i]; } if (sxx == 0.0) return ERROR_INT("no solution found", procName, 1); *pa = sxy / sxx; } else { /* a = 0; horizontal line */ for (i = 0; i < n; i++) sy += ya[i]; *pb = sy / (l_float32)n; } if (pnafit) { *pnafit = numaCreate(n); for (i = 0; i < n; i++) { val = (*pa) * xa[i] + *pb; numaAddNumber(*pnafit, val); } } return 0; } /*! * ptaGetQuadraticLSF() * * Input: pta * &a ( coeff a of LSF: y = ax^2 + bx + c) * &b ( coeff b of LSF: y = ax^2 + bx + c) * &c ( coeff c of LSF: y = ax^2 + bx + c) * &nafit ( numa of least square fit) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a quadratic least square fit to the set of points * in @pta. That is, it finds coefficients a, b and c that minimize: * * sum (yi - a*xi*xi -b*xi -c)^2 * i * * The method is simple: differentiate this expression w/rt * a, b and c, and solve the resulting three equations for these * coefficients in terms of various sums over the input data (xi, yi). * The three equations are in the form: * f[0][0]a + f[0][1]b + f[0][2]c = g[0] * f[1][0]a + f[1][1]b + f[1][2]c = g[1] * f[2][0]a + f[2][1]b + f[2][2]c = g[2] * (2) If @nafit is defined, this returns an array of fitted values, * corresponding to the two implicit Numa arrays (nax and nay) in pta. * Thus, just as you can plot the data in pta as nay vs. nax, * you can plot the linear least square fit as nafit vs. nax. */ l_int32 ptaGetQuadraticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, sx, sy, sx2, sx3, sx4, sxy, sx2y; l_float32 *xa, *ya; l_float32 *f[3]; l_float32 g[3]; NUMA *nafit; PROCNAME("ptaGetQuadraticLSF"); if (!pa && !pb && !pc && !pnafit) return ERROR_INT("no output requested", procName, 1); if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pnafit) *pnafit = NULL; if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((n = ptaGetCount(pta)) < 3) return ERROR_INT("less than 3 pts found", procName, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sx2 = sx3 = sx4 = sxy = sx2y = 0.; for (i = 0; i < n; i++) { x = xa[i]; y = ya[i]; sx += x; sy += y; sx2 += x * x; sx3 += x * x * x; sx4 += x * x * x * x; sxy += x * y; sx2y += x * x * y; } for (i = 0; i < 3; i++) f[i] = (l_float32 *)CALLOC(3, sizeof(l_float32)); f[0][0] = sx4; f[0][1] = sx3; f[0][2] = sx2; f[1][0] = sx3; f[1][1] = sx2; f[1][2] = sx; f[2][0] = sx2; f[2][1] = sx; f[2][2] = n; g[0] = sx2y; g[1] = sxy; g[2] = sy; /* Solve for the unknowns, also putting f-inverse into f */ ret = gaussjordan(f, g, 3); for (i = 0; i < 3; i++) FREE(f[i]); if (ret) return ERROR_INT("quadratic solution failed", procName, 1); if (pa) *pa = g[0]; if (pb) *pb = g[1]; if (pc) *pc = g[2]; if (pnafit) { nafit = numaCreate(n); *pnafit = nafit; for (i = 0; i < n; i++) { x = xa[i]; y = g[0] * x * x + g[1] * x + g[2]; numaAddNumber(nafit, y); } } return 0; } /*! * ptaGetCubicLSF() * * Input: pta * &a ( coeff a of LSF: y = ax^3 + bx^2 + cx + d) * &b ( coeff b of LSF) * &c ( coeff c of LSF) * &d ( coeff d of LSF) * &nafit ( numa of least square fit) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a cubic least square fit to the set of points * in @pta. That is, it finds coefficients a, b, c and d * that minimize: * * sum (yi - a*xi*xi*xi -b*xi*xi -c*xi - d)^2 * i * * Differentiate this expression w/rt a, b, c and d, and solve * the resulting four equations for these coefficients in * terms of various sums over the input data (xi, yi). * The four equations are in the form: * f[0][0]a + f[0][1]b + f[0][2]c + f[0][3] = g[0] * f[1][0]a + f[1][1]b + f[1][2]c + f[1][3] = g[1] * f[2][0]a + f[2][1]b + f[2][2]c + f[2][3] = g[2] * f[3][0]a + f[3][1]b + f[3][2]c + f[3][3] = g[3] * (2) If @nafit is defined, this returns an array of fitted values, * corresponding to the two implicit Numa arrays (nax and nay) in pta. * Thus, just as you can plot the data in pta as nay vs. nax, * you can plot the linear least square fit as nafit vs. nax. */ l_int32 ptaGetCubicLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sxy, sx2y, sx3y; l_float32 *xa, *ya; l_float32 *f[4]; l_float32 g[4]; NUMA *nafit; PROCNAME("ptaGetCubicLSF"); if (!pa && !pb && !pc && !pd && !pnafit) return ERROR_INT("no output requested", procName, 1); if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pd) *pd = 0.0; if (pnafit) *pnafit = NULL; if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((n = ptaGetCount(pta)) < 4) return ERROR_INT("less than 4 pts found", procName, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sxy = sx2y = sx3y = 0.; for (i = 0; i < n; i++) { x = xa[i]; y = ya[i]; sx += x; sy += y; sx2 += x * x; sx3 += x * x * x; sx4 += x * x * x * x; sx5 += x * x * x * x * x; sx6 += x * x * x * x * x * x; sxy += x * y; sx2y += x * x * y; sx3y += x * x * x * y; } for (i = 0; i < 4; i++) f[i] = (l_float32 *)CALLOC(4, sizeof(l_float32)); f[0][0] = sx6; f[0][1] = sx5; f[0][2] = sx4; f[0][3] = sx3; f[1][0] = sx5; f[1][1] = sx4; f[1][2] = sx3; f[1][3] = sx2; f[2][0] = sx4; f[2][1] = sx3; f[2][2] = sx2; f[2][3] = sx; f[3][0] = sx3; f[3][1] = sx2; f[3][2] = sx; f[3][3] = n; g[0] = sx3y; g[1] = sx2y; g[2] = sxy; g[3] = sy; /* Solve for the unknowns, also putting f-inverse into f */ ret = gaussjordan(f, g, 4); for (i = 0; i < 4; i++) FREE(f[i]); if (ret) return ERROR_INT("cubic solution failed", procName, 1); if (pa) *pa = g[0]; if (pb) *pb = g[1]; if (pc) *pc = g[2]; if (pd) *pd = g[3]; if (pnafit) { nafit = numaCreate(n); *pnafit = nafit; for (i = 0; i < n; i++) { x = xa[i]; y = g[0] * x * x * x + g[1] * x * x + g[2] * x + g[3]; numaAddNumber(nafit, y); } } return 0; } /*! * ptaGetQuarticLSF() * * Input: pta * &a ( coeff a of LSF: * y = ax^4 + bx^3 + cx^2 + dx + e) * &b ( coeff b of LSF) * &c ( coeff c of LSF) * &d ( coeff d of LSF) * &e ( coeff e of LSF) * &nafit ( numa of least square fit) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a quartic least square fit to the set of points * in @pta. That is, it finds coefficients a, b, c, d and 3 * that minimize: * * sum (yi - a*xi*xi*xi*xi -b*xi*xi*xi -c*xi*xi - d*xi - e)^2 * i * * Differentiate this expression w/rt a, b, c, d and e, and solve * the resulting five equations for these coefficients in * terms of various sums over the input data (xi, yi). * The five equations are in the form: * f[0][0]a + f[0][1]b + f[0][2]c + f[0][3] + f[0][4] = g[0] * f[1][0]a + f[1][1]b + f[1][2]c + f[1][3] + f[1][4] = g[1] * f[2][0]a + f[2][1]b + f[2][2]c + f[2][3] + f[2][4] = g[2] * f[3][0]a + f[3][1]b + f[3][2]c + f[3][3] + f[3][4] = g[3] * f[4][0]a + f[4][1]b + f[4][2]c + f[4][3] + f[4][4] = g[4] * (2) If @nafit is defined, this returns an array of fitted values, * corresponding to the two implicit Numa arrays (nax and nay) in pta. * Thus, just as you can plot the data in pta as nay vs. nax, * you can plot the linear least square fit as nafit vs. nax. */ l_int32 ptaGetQuarticLSF(PTA *pta, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pd, l_float32 *pe, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, sx, sy, sx2, sx3, sx4, sx5, sx6, sx7, sx8; l_float32 sxy, sx2y, sx3y, sx4y; l_float32 *xa, *ya; l_float32 *f[5]; l_float32 g[5]; NUMA *nafit; PROCNAME("ptaGetQuarticLSF"); if (!pa && !pb && !pc && !pd && !pe && !pnafit) return ERROR_INT("no output requested", procName, 1); if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pd) *pd = 0.0; if (pe) *pe = 0.0; if (pnafit) *pnafit = NULL; if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((n = ptaGetCount(pta)) < 5) return ERROR_INT("less than 5 pts found", procName, 1); xa = pta->x; /* not a copy */ ya = pta->y; /* not a copy */ sx = sy = sx2 = sx3 = sx4 = sx5 = sx6 = sx7 = sx8 = 0; sxy = sx2y = sx3y = sx4y = 0.; for (i = 0; i < n; i++) { x = xa[i]; y = ya[i]; sx += x; sy += y; sx2 += x * x; sx3 += x * x * x; sx4 += x * x * x * x; sx5 += x * x * x * x * x; sx6 += x * x * x * x * x * x; sx7 += x * x * x * x * x * x * x; sx8 += x * x * x * x * x * x * x * x; sxy += x * y; sx2y += x * x * y; sx3y += x * x * x * y; sx4y += x * x * x * x * y; } for (i = 0; i < 5; i++) f[i] = (l_float32 *)CALLOC(5, sizeof(l_float32)); f[0][0] = sx8; f[0][1] = sx7; f[0][2] = sx6; f[0][3] = sx5; f[0][4] = sx4; f[1][0] = sx7; f[1][1] = sx6; f[1][2] = sx5; f[1][3] = sx4; f[1][4] = sx3; f[2][0] = sx6; f[2][1] = sx5; f[2][2] = sx4; f[2][3] = sx3; f[2][4] = sx2; f[3][0] = sx5; f[3][1] = sx4; f[3][2] = sx3; f[3][3] = sx2; f[3][4] = sx; f[4][0] = sx4; f[4][1] = sx3; f[4][2] = sx2; f[4][3] = sx; f[4][4] = n; g[0] = sx4y; g[1] = sx3y; g[2] = sx2y; g[3] = sxy; g[4] = sy; /* Solve for the unknowns, also putting f-inverse into f */ ret = gaussjordan(f, g, 5); for (i = 0; i < 5; i++) FREE(f[i]); if (ret) return ERROR_INT("quartic solution failed", procName, 1); if (pa) *pa = g[0]; if (pb) *pb = g[1]; if (pc) *pc = g[2]; if (pd) *pd = g[3]; if (pe) *pe = g[4]; if (pnafit) { nafit = numaCreate(n); *pnafit = nafit; for (i = 0; i < n; i++) { x = xa[i]; y = g[0] * x * x * x * x + g[1] * x * x * x + g[2] * x * x + g[3] * x + g[4]; numaAddNumber(nafit, y); } } return 0; } /*! * ptaNoisyLinearLSF() * * Input: pta * factor (reject outliers with error greater than this * number of medians; typically ~ 3) * &ptad ( with outliers removed) * &a ( slope a of least square fit: y = ax + b) * &b ( intercept b of least square fit) * &mederr ( median error) * &nafit ( numa of least square fit to ptad) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a linear least square fit to the set of points * in @pta. It then evaluates the errors and removes points * whose error is >= factor * median_error. It then re-runs * the linear LSF on the resulting points. * (2) Either or both &a and &b must be input. They determine the * type of line that is fit. * (3) The median error can give an indication of how good the fit * is likely to be. */ l_int32 ptaNoisyLinearLSF(PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pmederr, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, yf, val, mederr; NUMA *nafit, *naerror; PTA *ptad; PROCNAME("ptaNoisyLinearLSF"); if (!pa && !pb) return ERROR_INT("neither &a nor &b are defined", procName, 1); if (pptad) *pptad = NULL; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pmederr) *pmederr = 0.0; if (pnafit) *pnafit = NULL; if (!pta) return ERROR_INT("pta not defined", procName, 1); if (factor <= 0.0) return ERROR_INT("factor must be > 0.0", procName, 1); if ((n = ptaGetCount(pta)) < 3) return ERROR_INT("less than 2 pts found", procName, 1); if (ptaGetLinearLSF(pta, pa, pb, &nafit) != 0) return ERROR_INT("error in linear LSF", procName, 1); /* Get the median error */ naerror = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(nafit, i, &yf); numaAddNumber(naerror, L_ABS(y - yf)); } numaGetMedian(naerror, &mederr); if (pmederr) *pmederr = mederr; numaDestroy(&nafit); /* Remove outliers */ ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(naerror, i, &val); if (val <= factor * mederr) /* <= in case mederr = 0 */ ptaAddPt(ptad, x, y); } numaDestroy(&naerror); /* Do LSF again */ ret = ptaGetLinearLSF(ptad, pa, pb, pnafit); if (pptad) *pptad = ptad; else ptaDestroy(&ptad); return ret; } /*! * ptaNoisyQuadraticLSF() * * Input: pta * factor (reject outliers with error greater than this * number of medians; typically ~ 3) * &ptad ( with outliers removed) * &a ( coeff a of LSF: y = ax^2 + bx + c) * &b ( coeff b of LSF: y = ax^2 + bx + c) * &c ( coeff c of LSF: y = ax^2 + bx + c) * &mederr ( median error) * &nafit ( numa of least square fit to ptad) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a quadratic least square fit to the set of points * in @pta. It then evaluates the errors and removes points * whose error is >= factor * median_error. It then re-runs * a quadratic LSF on the resulting points. */ l_int32 ptaNoisyQuadraticLSF(PTA *pta, l_float32 factor, PTA **pptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr, NUMA **pnafit) { l_int32 n, i, ret; l_float32 x, y, yf, val, mederr; NUMA *nafit, *naerror; PTA *ptad; PROCNAME("ptaNoisyQuadraticLSF"); if (!pptad && !pa && !pb && !pc && !pnafit) return ERROR_INT("no output requested", procName, 1); if (pptad) *pptad = NULL; if (pa) *pa = 0.0; if (pb) *pb = 0.0; if (pc) *pc = 0.0; if (pmederr) *pmederr = 0.0; if (pnafit) *pnafit = NULL; if (factor <= 0.0) return ERROR_INT("factor must be > 0.0", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); if ((n = ptaGetCount(pta)) < 3) return ERROR_INT("less than 3 pts found", procName, 1); if (ptaGetQuadraticLSF(pta, NULL, NULL, NULL, &nafit) != 0) return ERROR_INT("error in quadratic LSF", procName, 1); /* Get the median error */ naerror = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(nafit, i, &yf); numaAddNumber(naerror, L_ABS(y - yf)); } numaGetMedian(naerror, &mederr); if (pmederr) *pmederr = mederr; numaDestroy(&nafit); /* Remove outliers */ ptad = ptaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(pta, i, &x, &y); numaGetFValue(naerror, i, &val); if (val <= factor * mederr) /* <= in case mederr = 0 */ ptaAddPt(ptad, x, y); } numaDestroy(&naerror); n = ptaGetCount(ptad); if ((n = ptaGetCount(ptad)) < 3) { ptaDestroy(&ptad); return ERROR_INT("less than 3 pts found", procName, 1); } /* Do LSF again */ ret = ptaGetQuadraticLSF(ptad, pa, pb, pc, pnafit); if (pptad) *pptad = ptad; else ptaDestroy(&ptad); return ret; } /*! * applyLinearFit() * * Input: a, b (linear fit coefficients) * x * &y ( y = a * x + b) * Return: 0 if OK, 1 on error */ l_int32 applyLinearFit(l_float32 a, l_float32 b, l_float32 x, l_float32 *py) { PROCNAME("applyLinearFit"); if (!py) return ERROR_INT("&y not defined", procName, 1); *py = a * x + b; return 0; } /*! * applyQuadraticFit() * * Input: a, b, c (quadratic fit coefficients) * x * &y ( y = a * x^2 + b * x + c) * Return: 0 if OK, 1 on error */ l_int32 applyQuadraticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 x, l_float32 *py) { PROCNAME("applyQuadraticFit"); if (!py) return ERROR_INT("&y not defined", procName, 1); *py = a * x * x + b * x + c; return 0; } /*! * applyCubicFit() * * Input: a, b, c, d (cubic fit coefficients) * x * &y ( y = a * x^3 + b * x^2 + c * x + d) * Return: 0 if OK, 1 on error */ l_int32 applyCubicFit(l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 x, l_float32 *py) { PROCNAME("applyCubicFit"); if (!py) return ERROR_INT("&y not defined", procName, 1); *py = a * x * x * x + b * x * x + c * x + d; return 0; } /*! * applyQuarticFit() * * Input: a, b, c, d, e (quartic fit coefficients) * x * &y ( y = a * x^4 + b * x^3 + c * x^2 + d * x + e) * Return: 0 if OK, 1 on error */ l_int32 applyQuarticFit(l_float32 a, l_float32 b, l_float32 c, l_float32 d, l_float32 e, l_float32 x, l_float32 *py) { l_float32 x2; PROCNAME("applyQuarticFit"); if (!py) return ERROR_INT("&y not defined", procName, 1); x2 = x * x; *py = a * x2 * x2 + b * x2 * x + c * x2 + d * x + e; return 0; } /*---------------------------------------------------------------------* * Interconversions with Pix * *---------------------------------------------------------------------*/ /*! * pixPlotAlongPta() * * Input: pixs (any depth) * pta (set of points on which to plot) * outformat (GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_X11, * GPLOT_LATEX) * title ( for plot; can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) We remove any existing colormap and clip the pta to the input pixs. * (2) This is a debugging function, and does not remove temporary * plotting files that it generates. * (3) If the image is RGB, three separate plots are generated. */ l_int32 pixPlotAlongPta(PIX *pixs, PTA *pta, l_int32 outformat, const char *title) { char buffer[128]; char *rtitle, *gtitle, *btitle; static l_int32 count = 0; /* require separate temp files for each call */ l_int32 i, x, y, d, w, h, npts, rval, gval, bval; l_uint32 val; NUMA *na, *nar, *nag, *nab; PIX *pixt; PROCNAME("pixPlotAlongPta"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pta) return ERROR_INT("pta not defined", procName, 1); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_X11 && outformat != GPLOT_LATEX) { L_WARNING("outformat invalid; using GPLOT_PNG\n", procName); outformat = GPLOT_PNG; } pixt = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt); w = pixGetWidth(pixt); h = pixGetHeight(pixt); npts = ptaGetCount(pta); if (d == 32) { nar = numaCreate(npts); nag = numaCreate(npts); nab = numaCreate(npts); for (i = 0; i < npts; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; pixGetPixel(pixt, x, y, &val); rval = GET_DATA_BYTE(&val, COLOR_RED); gval = GET_DATA_BYTE(&val, COLOR_GREEN); bval = GET_DATA_BYTE(&val, COLOR_BLUE); numaAddNumber(nar, rval); numaAddNumber(nag, gval); numaAddNumber(nab, bval); } sprintf(buffer, "/tmp/junkplot.%d", count++); rtitle = stringJoin("Red: ", title); gplotSimple1(nar, outformat, buffer, rtitle); sprintf(buffer, "/tmp/junkplot.%d", count++); gtitle = stringJoin("Green: ", title); gplotSimple1(nag, outformat, buffer, gtitle); sprintf(buffer, "/tmp/junkplot.%d", count++); btitle = stringJoin("Blue: ", title); gplotSimple1(nab, outformat, buffer, btitle); numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); FREE(rtitle); FREE(gtitle); FREE(btitle); } else { na = numaCreate(npts); for (i = 0; i < npts; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w) continue; if (y < 0 || y >= h) continue; pixGetPixel(pixt, x, y, &val); numaAddNumber(na, (l_float32)val); } sprintf(buffer, "/tmp/junkplot.%d", count++); gplotSimple1(na, outformat, buffer, title); numaDestroy(&na); } pixDestroy(&pixt); return 0; } /*! * ptaGetPixelsFromPix() * * Input: pixs (1 bpp) * box ( can be null) * Return: pta, or null on error * * Notes: * (1) Generates a pta of fg pixels in the pix, within the box. * If box == NULL, it uses the entire pix. */ PTA * ptaGetPixelsFromPix(PIX *pixs, BOX *box) { l_int32 i, j, w, h, wpl, xstart, xend, ystart, yend, bw, bh; l_uint32 *data, *line; PTA *pta; PROCNAME("ptaGetPixelsFromPix"); if (!pixs || (pixGetDepth(pixs) != 1)) return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); xstart = ystart = 0; xend = w - 1; yend = h - 1; if (box) { boxGetGeometry(box, &xstart, &ystart, &bw, &bh); xend = xstart + bw - 1; yend = ystart + bh - 1; } if ((pta = ptaCreate(0)) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); for (i = ystart; i <= yend; i++) { line = data + i * wpl; for (j = xstart; j <= xend; j++) { if (GET_DATA_BIT(line, j)) ptaAddPt(pta, j, i); } } return pta; } /*! * pixGenerateFromPta() * * Input: pta * w, h (of pix) * Return: pix (1 bpp), or null on error * * Notes: * (1) Points are rounded to nearest ints. * (2) Any points outside (w,h) are silently discarded. * (3) Output 1 bpp pix has values 1 for each point in the pta. */ PIX * pixGenerateFromPta(PTA *pta, l_int32 w, l_int32 h) { l_int32 n, i, x, y; PIX *pix; PROCNAME("pixGenerateFromPta"); if (!pta) return (PIX *)ERROR_PTR("pta not defined", procName, NULL); if ((pix = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pix not made", procName, NULL); n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; pixSetPixel(pix, x, y, 1); } return pix; } /*! * ptaGetBoundaryPixels() * * Input: pixs (1 bpp) * type (L_BOUNDARY_FG, L_BOUNDARY_BG) * Return: pta, or null on error * * Notes: * (1) This generates a pta of either fg or bg boundary pixels. */ PTA * ptaGetBoundaryPixels(PIX *pixs, l_int32 type) { PIX *pixt; PTA *pta; PROCNAME("ptaGetBoundaryPixels"); if (!pixs || (pixGetDepth(pixs) != 1)) return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG) return (PTA *)ERROR_PTR("invalid type", procName, NULL); if (type == L_BOUNDARY_FG) pixt = pixMorphSequence(pixs, "e3.3", 0); else pixt = pixMorphSequence(pixs, "d3.3", 0); pixXor(pixt, pixt, pixs); pta = ptaGetPixelsFromPix(pixt, NULL); pixDestroy(&pixt); return pta; } /*! * ptaaGetBoundaryPixels() * * Input: pixs (1 bpp) * type (L_BOUNDARY_FG, L_BOUNDARY_BG) * connectivity (4 or 8) * &boxa ( bounding boxes of the c.c.) * &pixa ( pixa of the c.c.) * Return: ptaa, or null on error * * Notes: * (1) This generates a ptaa of either fg or bg boundary pixels, * where each pta has the boundary pixels for a connected * component. * (2) We can't simply find all the boundary pixels and then select * those within the bounding box of each component, because * bounding boxes can overlap. It is necessary to extract and * dilate or erode each component separately. Note also that * special handling is required for bg pixels when the * component touches the pix boundary. */ PTAA * ptaaGetBoundaryPixels(PIX *pixs, l_int32 type, l_int32 connectivity, BOXA **pboxa, PIXA **ppixa) { l_int32 i, n, w, h, x, y, bw, bh, left, right, top, bot; BOXA *boxa; PIX *pixt1, *pixt2; PIXA *pixa; PTA *pta1, *pta2; PTAA *ptaa; PROCNAME("ptaaGetBoundaryPixels"); if (pboxa) *pboxa = NULL; if (ppixa) *ppixa = NULL; if (!pixs || (pixGetDepth(pixs) != 1)) return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (type != L_BOUNDARY_FG && type != L_BOUNDARY_BG) return (PTAA *)ERROR_PTR("invalid type", procName, NULL); if (connectivity != 4 && connectivity != 8) return (PTAA *)ERROR_PTR("connectivity not 4 or 8", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); boxa = pixConnComp(pixs, &pixa, connectivity); n = boxaGetCount(boxa); ptaa = ptaaCreate(0); for (i = 0; i < n; i++) { pixt1 = pixaGetPix(pixa, i, L_CLONE); boxaGetBoxGeometry(boxa, i, &x, &y, &bw, &bh); left = right = top = bot = 0; if (type == L_BOUNDARY_BG) { if (x > 0) left = 1; if (y > 0) top = 1; if (x + bw < w) right = 1; if (y + bh < h) bot = 1; pixt2 = pixAddBorderGeneral(pixt1, left, right, top, bot, 0); } else { pixt2 = pixClone(pixt1); } pta1 = ptaGetBoundaryPixels(pixt2, type); pta2 = ptaTransform(pta1, x - left, y - top, 1.0, 1.0); ptaaAddPta(ptaa, pta2, L_INSERT); ptaDestroy(&pta1); pixDestroy(&pixt1); pixDestroy(&pixt2); } if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); if (ppixa) *ppixa = pixa; else pixaDestroy(&pixa); return ptaa; } /*---------------------------------------------------------------------* * Display Pta and Ptaa * *---------------------------------------------------------------------*/ /*! * pixDisplayPta() * * Input: pixd (can be same as pixs or null; 32 bpp if in-place) * pixs (1, 2, 4, 8, 16 or 32 bpp) * pta (of path to be plotted) * Return: pixd (32 bpp RGB version of pixs, with path in green). * * Notes: * (1) To write on an existing pixs, pixs must be 32 bpp and * call with pixd == pixs: * pixDisplayPta(pixs, pixs, pta); * To write to a new pix, use pixd == NULL and call: * pixd = pixDisplayPta(NULL, pixs, pta); * (2) On error, returns pixd to avoid losing pixs if called as * pixs = pixDisplayPta(pixs, pixs, pta); */ PIX * pixDisplayPta(PIX *pixd, PIX *pixs, PTA *pta) { l_int32 i, n, w, h, x, y; l_uint32 rpixel, gpixel, bpixel; PROCNAME("pixDisplayPta"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (!pta) return (PIX *)ERROR_PTR("pta not defined", procName, pixd); if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) return (PIX *)ERROR_PTR("invalid pixd", procName, pixd); if (!pixd) pixd = pixConvertTo32(pixs); pixGetDimensions(pixd, &w, &h, NULL); composeRGBPixel(255, 0, 0, &rpixel); /* start point */ composeRGBPixel(0, 255, 0, &gpixel); composeRGBPixel(0, 0, 255, &bpixel); /* end point */ n = ptaGetCount(pta); for (i = 0; i < n; i++) { ptaGetIPt(pta, i, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; if (i == 0) pixSetPixel(pixd, x, y, rpixel); else if (i < n - 1) pixSetPixel(pixd, x, y, gpixel); else pixSetPixel(pixd, x, y, bpixel); } return pixd; } /*! * pixDisplayPtaaPattern() * * Input: pixd (32 bpp) * pixs (1, 2, 4, 8, 16 or 32 bpp; 32 bpp if in place) * ptaa (giving locations at which the pattern is displayed) * pixp (1 bpp pattern to be placed such that its reference * point co-locates with each point in pta) * cx, cy (reference point in pattern) * Return: pixd (32 bpp RGB version of pixs). * * Notes: * (1) To write on an existing pixs, pixs must be 32 bpp and * call with pixd == pixs: * pixDisplayPtaPattern(pixs, pixs, pta, ...); * To write to a new pix, use pixd == NULL and call: * pixd = pixDisplayPtaPattern(NULL, pixs, pta, ...); * (2) Puts a random color on each pattern associated with a pta. * (3) On error, returns pixd to avoid losing pixs if called as * pixs = pixDisplayPtaPattern(pixs, pixs, pta, ...); * (4) A typical pattern to be used is a circle, generated with * generatePtaFilledCircle() */ PIX * pixDisplayPtaaPattern(PIX *pixd, PIX *pixs, PTAA *ptaa, PIX *pixp, l_int32 cx, l_int32 cy) { l_int32 i, n; l_uint32 color; PIXCMAP *cmap; PTA *pta; PROCNAME("pixDisplayPtaaPattern"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (!ptaa) return (PIX *)ERROR_PTR("ptaa not defined", procName, pixd); if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) return (PIX *)ERROR_PTR("invalid pixd", procName, pixd); if (!pixp) return (PIX *)ERROR_PTR("pixp not defined", procName, pixd); if (!pixd) pixd = pixConvertTo32(pixs); /* Use 256 random colors */ cmap = pixcmapCreateRandom(8, 0, 0); n = ptaaGetCount(ptaa); for (i = 0; i < n; i++) { pixcmapGetColor32(cmap, i % 256, &color); pta = ptaaGetPta(ptaa, i, L_CLONE); pixDisplayPtaPattern(pixd, pixd, pta, pixp, cx, cy, color); ptaDestroy(&pta); } pixcmapDestroy(&cmap); return pixd; } /*! * pixDisplayPtaPattern() * * Input: pixd (can be same as pixs or null; 32 bpp if in-place) * pixs (1, 2, 4, 8, 16 or 32 bpp) * pta (giving locations at which the pattern is displayed) * pixp (1 bpp pattern to be placed such that its reference * point co-locates with each point in pta) * cx, cy (reference point in pattern) * color (in 0xrrggbb00 format) * Return: pixd (32 bpp RGB version of pixs). * * Notes: * (1) To write on an existing pixs, pixs must be 32 bpp and * call with pixd == pixs: * pixDisplayPtaPattern(pixs, pixs, pta, ...); * To write to a new pix, use pixd == NULL and call: * pixd = pixDisplayPtaPattern(NULL, pixs, pta, ...); * (2) On error, returns pixd to avoid losing pixs if called as * pixs = pixDisplayPtaPattern(pixs, pixs, pta, ...); * (3) A typical pattern to be used is a circle, generated with * generatePtaFilledCircle() */ PIX * pixDisplayPtaPattern(PIX *pixd, PIX *pixs, PTA *pta, PIX *pixp, l_int32 cx, l_int32 cy, l_uint32 color) { l_int32 i, n, w, h, x, y; PTA *ptat; PROCNAME("pixDisplayPtaPattern"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (!pta) return (PIX *)ERROR_PTR("pta not defined", procName, pixd); if (pixd && (pixd != pixs || pixGetDepth(pixd) != 32)) return (PIX *)ERROR_PTR("invalid pixd", procName, pixd); if (!pixp) return (PIX *)ERROR_PTR("pixp not defined", procName, pixd); if (!pixd) pixd = pixConvertTo32(pixs); pixGetDimensions(pixs, &w, &h, NULL); ptat = ptaReplicatePattern(pta, pixp, NULL, cx, cy, w, h); n = ptaGetCount(ptat); for (i = 0; i < n; i++) { ptaGetIPt(ptat, i, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; pixSetPixel(pixd, x, y, color); } ptaDestroy(&ptat); return pixd; } /*! * ptaReplicatePattern() * * Input: ptas ("sparse" input pta) * pixp ( 1 bpp pattern, to be replicated in output pta) * ptap ( set of pts, to be replicated in output pta) * cx, cy (reference point in pattern) * w, h (clipping sizes for output pta) * Return: ptad (with all points of replicated pattern), or null on error * * Notes: * (1) You can use either the image @pixp or the set of pts @ptap. * (2) The pattern is placed with its reference point at each point * in ptas, and all the fg pixels are colleced into ptad. * For @pixp, this is equivalent to blitting pixp at each point * in ptas, and then converting the resulting pix to a pta. */ PTA * ptaReplicatePattern(PTA *ptas, PIX *pixp, PTA *ptap, l_int32 cx, l_int32 cy, l_int32 w, l_int32 h) { l_int32 i, j, n, np, x, y, xp, yp, xf, yf; PTA *ptat, *ptad; PROCNAME("ptaReplicatePattern"); if (!ptas) return (PTA *)ERROR_PTR("ptas not defined", procName, NULL); if (!pixp && !ptap) return (PTA *)ERROR_PTR("no pattern is defined", procName, NULL); if (pixp && ptap) L_WARNING("pixp and ptap defined; using ptap\n", procName); n = ptaGetCount(ptas); ptad = ptaCreate(n); if (ptap) ptat = ptaClone(ptap); else ptat = ptaGetPixelsFromPix(pixp, NULL); np = ptaGetCount(ptat); for (i = 0; i < n; i++) { ptaGetIPt(ptas, i, &x, &y); for (j = 0; j < np; j++) { ptaGetIPt(ptat, j, &xp, &yp); xf = x - cx + xp; yf = y - cy + yp; if (xf >= 0 && xf < w && yf >= 0 && yf < h) ptaAddPt(ptad, xf, yf); } } ptaDestroy(&ptat); return ptad; } /*! * pixDisplayPtaa() * * Input: pixs (1, 2, 4, 8, 16 or 32 bpp) * ptaa (array of paths to be plotted) * Return: pixd (32 bpp RGB version of pixs, with paths plotted * in different colors), or null on error */ PIX * pixDisplayPtaa(PIX *pixs, PTAA *ptaa) { l_int32 i, j, w, h, npta, npt, x, y, rv, gv, bv; l_uint32 *pixela; NUMA *na1, *na2, *na3; PIX *pixd; PTA *pta; PROCNAME("pixDisplayPtaa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptaa) return (PIX *)ERROR_PTR("ptaa not defined", procName, NULL); npta = ptaaGetCount(ptaa); if (npta == 0) return (PIX *)ERROR_PTR("no pta", procName, NULL); if ((pixd = pixConvertTo32(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixGetDimensions(pixd, &w, &h, NULL); /* Make a colormap for the paths */ if ((pixela = (l_uint32 *)CALLOC(npta, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("calloc fail for pixela", procName, NULL); na1 = numaPseudorandomSequence(256, 14657); na2 = numaPseudorandomSequence(256, 34631); na3 = numaPseudorandomSequence(256, 54617); for (i = 0; i < npta; i++) { numaGetIValue(na1, i % 256, &rv); numaGetIValue(na2, i % 256, &gv); numaGetIValue(na3, i % 256, &bv); composeRGBPixel(rv, gv, bv, &pixela[i]); } numaDestroy(&na1); numaDestroy(&na2); numaDestroy(&na3); for (i = 0; i < npta; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); npt = ptaGetCount(pta); for (j = 0; j < npt; j++) { ptaGetIPt(pta, j, &x, &y); if (x < 0 || x >= w || y < 0 || y >= h) continue; pixSetPixel(pixd, x, y, pixela[i]); } ptaDestroy(&pta); } FREE(pixela); return pixd; } leptonica-1.70/src/jbclass.h0000644000175000017500000001566212270566043014105 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_JBCLASS_H #define LEPTONICA_JBCLASS_H /* * jbclass.h * * JbClasser * JbData */ /* The JbClasser struct holds all the data accumulated during the * classification process that can be used for a compressed * jbig2-type representation of a set of images. This is created * in an initialization process and added to as the selected components * on each successive page are analyzed. */ struct JbClasser { struct Sarray *safiles; /* input page image file names */ l_int32 method; /* JB_RANKHAUS, JB_CORRELATION */ l_int32 components; /* JB_CONN_COMPS, JB_CHARACTERS or */ /* JB_WORDS */ l_int32 maxwidth; /* max component width allowed */ l_int32 maxheight; /* max component height allowed */ l_int32 npages; /* number of pages already processed */ l_int32 baseindex; /* number of components already processed */ /* on fully processed pages */ struct Numa *nacomps; /* number of components on each page */ l_int32 sizehaus; /* size of square struct element for haus */ l_float32 rankhaus; /* rank val of haus match, each way */ l_float32 thresh; /* thresh value for correlation score */ l_float32 weightfactor; /* corrects thresh value for heaver */ /* components; use 0 for no correction */ struct Numa *naarea; /* w * h of each template, without extra */ /* border pixels */ l_int32 w; /* max width of original src images */ l_int32 h; /* max height of original src images */ l_int32 nclass; /* current number of classes */ l_int32 keep_pixaa; /* If zero, pixaa isn't filled */ struct Pixaa *pixaa; /* instances for each class; unbordered */ struct Pixa *pixat; /* templates for each class; bordered */ /* and not dilated */ struct Pixa *pixatd; /* templates for each class; bordered */ /* and dilated */ struct NumaHash *nahash; /* Hash table to find templates by size */ struct Numa *nafgt; /* fg areas of undilated templates; */ /* only used for rank < 1.0 */ struct Pta *ptac; /* centroids of all bordered cc */ struct Pta *ptact; /* centroids of all bordered template cc */ struct Numa *naclass; /* array of class ids for each component */ struct Numa *napage; /* array of page nums for each component */ struct Pta *ptaul; /* array of UL corners at which the */ /* template is to be placed for each */ /* component */ struct Pta *ptall; /* similar to ptaul, but for LL corners */ }; typedef struct JbClasser JBCLASSER; /* The JbData struct holds all the data required for * the compressed jbig-type representation of a set of images. * The data can be written to file, read back, and used * to regenerate an approximate version of the original, * which differs in two ways from the original: * (1) It uses a template image for each c.c. instead of the * original instance, for each occurrence on each page. * (2) It discards components with either a height or width larger * than the maximuma, given here by the lattice dimensions * used for storing the templates. */ struct JbData { struct Pix *pix; /* template composite for all classes */ l_int32 npages; /* number of pages */ l_int32 w; /* max width of original page images */ l_int32 h; /* max height of original page images */ l_int32 nclass; /* number of classes */ l_int32 latticew; /* lattice width for template composite */ l_int32 latticeh; /* lattice height for template composite */ struct Numa *naclass; /* array of class ids for each component */ struct Numa *napage; /* array of page nums for each component */ struct Pta *ptaul; /* array of UL corners at which the */ /* template is to be placed for each */ /* component */ }; typedef struct JbData JBDATA; /* Classifier methods */ enum { JB_RANKHAUS = 0, JB_CORRELATION = 1 }; /* For jbGetComponents(): type of component to extract from images */ enum { JB_CONN_COMPS = 0, JB_CHARACTERS = 1, JB_WORDS = 2 }; /* These parameters are used for naming the two files * in which the jbig2-like compressed data is stored. */ #define JB_TEMPLATE_EXT ".templates.png" #define JB_DATA_EXT ".data" #endif /* LEPTONICA_JBCLASS_H */ leptonica-1.70/src/morphtemplate1.txt0000644000175000017500000002005311707052573016006 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast binary morphology with auto-generated sels * --- * PIX *pixMorphDwa_*() --- * PIX *pixFMorphopGen_*() */ #include #include "allheaders.h" --- This file is: morphtemplate1.txt --- --- We need to include these prototypes: --- PIX *pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- PIX *pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, --- char *selname); --- l_int32 fmorphopgen_low_*(l_uint32 *datad, l_int32 w, l_int32 h, --- l_int32 wpld, l_uint32 *datas, --- l_int32 wpls, l_int32 index); --- --- We need to input two static globals here: --- static l_int32 NUM_SELS_GENERATED = ; --- static char SEL_NAMES[][80] = {"", "", ...}; /*! --- * pixMorphDwa_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This simply adds a border, calls the appropriate * pixFMorphopGen_*(), and removes the border. * See the notes for that function. * (2) The size of the border depends on the operation * and the boundary conditions. */ PIX * --- pixMorphDwa_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 bordercolor, bordersize; PIX *pixt1, *pixt2, *pixt3; --- PROCNAME("pixMorpDwa_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Set the border size */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); bordersize = 32; if (bordercolor == 0 && operation == L_MORPH_CLOSE) bordersize += 32; pixt1 = pixAddBorder(pixs, bordersize, 0); --- pixt2 = pixFMorphopGen_*(NULL, pixt1, operation, selname); pixt3 = pixRemoveBorder(pixt2, bordersize); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! --- * pixFMorphopGen_*() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * operation (L_MORPH_DILATE, L_MORPH_ERODE, * L_MORPH_OPEN, L_MORPH_CLOSE) * sel name * Return: pixd * * Notes: * (1) This is a dwa operation, and the Sels must be limited in * size to not more than 31 pixels about the origin. * (2) A border of appropriate size (32 pixels, or 64 pixels * for safe closing with asymmetric b.c.) must be added before * this function is called. * (3) This handles all required setting of the border pixels * before erosion and dilation. * (4) The closing operation is safe; no pixels can be removed * near the boundary. */ PIX * --- pixFMorphopGen_*(PIX *pixd, PIX *pixs, l_int32 operation, char *selname) { l_int32 i, index, found, w, h, wpls, wpld, bordercolor, erodeop, borderop; l_uint32 *datad, *datas, *datat; PIX *pixt; --- PROCNAME("pixFMorphopGen_*"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); /* Get boundary colors to use */ bordercolor = getMorphBorderPixelColor(L_MORPH_ERODE, 1); if (bordercolor == 1) erodeop = PIX_SET; else erodeop = PIX_CLR; found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = 2 * i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded, in advance, with a border of * size 32 pixels (or 64, for closing), that we'll read from. * Fabricate a "proper" image as the subimage within the 32 * pixel border, having the following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (operation == L_MORPH_DILATE || operation == L_MORPH_ERODE) { borderop = PIX_CLR; if (operation == L_MORPH_ERODE) { borderop = erodeop; index++; } if (pixd == pixs) { /* in-place; generate a temp image */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; pixSetOrClearBorder(pixt, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, borderop); --- fmorphopgen_low_*(datad, w, h, wpld, datas, wpls, index); } } else { /* opening or closing; generate a temp image */ if ((pixt = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; if (operation == L_MORPH_OPEN) { pixSetOrClearBorder(pixs, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index + 1); pixSetOrClearBorder(pixt, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index); } else { /* closing */ pixSetOrClearBorder(pixs, 32, 32, 32, 32, PIX_CLR); --- fmorphopgen_low_*(datat, w, h, wpls, datas, wpls, index); pixSetOrClearBorder(pixt, 32, 32, 32, 32, erodeop); --- fmorphopgen_low_*(datad, w, h, wpld, datat, wpls, index + 1); } pixDestroy(&pixt); } return pixd; } leptonica-1.70/src/dewarp.h0000644000175000017500000002261412106766261013743 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_DEWARP_H #define LEPTONICA_DEWARP_H /* * dewarp.h * * Data structure to hold arrays and results for generating * horizontal and vertical disparity arrays based on textlines. * Each disparity array is two-dimensional. The vertical disparity * array gives a vertical displacement, relative to the lowest point * in the textlines. The horizontal disparty array gives a horizontal * displacement, relative to the minimum values (for even pages) * or maximum values (for odd pages) of the left and right ends of * full textlines. Horizontal alignment always involves translations * away from the book gutter. * * We have intentionally separated the process of building models * from the rendering process that uses the models. For any page, * the building operation either creates an actual model (that is, * a model with at least the vertical disparity being computed, and * for which the 'success' flag is set) or fails to create a model. * However, at rendering time, a page can have one of two different * types of models. * (1) A valid model is an actual model that meets the rendering * constraints, which are limits on model curvature parameters. * See dewarpaTestForValidModel() for details. * Valid models are identified by dewarpaInsertRefModels(), * which sets the 'vvalid' and 'hvalid' fields. Only valid * models are used for rendering. * (2) A reference model is used by a page that doesn't have * a valid model, but has a nearby valid model of the same * parity (even/odd page) that it can use. The range in pages * to search for a valid model is given by the 'maxdist' field. * * If a valid vertical disparity model (VDM) is not available, * just use the input image. Otherwise, assuming the VDM is available: * (a) with useboth == 0, we use only the VDM. * (b) with useboth == 1, we require using the VDM and, if a valid * horizontal disparity model (HDM) is available, we also use it. * * The 'maxdist' parameter is input when the dewarpa is created. * The other rendering parameters have default values given in dewarp.c. * All parameters used by rendering can be set (or reset) using accessors. * * After dewarping, use of the VDM will cause all points on each * altered curve to have a y-value equal to the minimum. Use of * the HDA will cause the left and right edges of the textlines * to be vertically aligned if they had been typeset flush-left * and flush-right, respectively. * * The sampled disparity arrays are expanded to full resolution, * using linear interpolation, and this is further expanded * by slope continuation to the right and below if the image * is larger than the full resolution disparity arrays. Then * the disparity correction can be applied to the input image. * If the input pix are 2x reduced, the expansion from sampled * to full res uses the product of (sampling) * (redfactor). * * The most accurate results are produced at full resolution, and * this is generally recommended. */ /* Note on versioning of the serialization of this data structure: * The dewarping utility and the stored data can be expected to change. * In most situations, the serialized version is ephemeral -- it is * not needed after being used. No functions will be provided to * convert between different versions. */ #define DEWARP_VERSION_NUMBER 3 struct L_Dewarpa { l_int32 nalloc; /* size of dewarp ptr array */ l_int32 maxpage; /* maximum page number in array */ struct L_Dewarp **dewarp; /* array of ptrs to page dewarp */ struct L_Dewarp **dewarpcache; /* array of ptrs to cached dewarps */ struct Numa *namodels; /* list of page numbers for pages */ /* with page models */ struct Numa *napages; /* list of page numbers with either */ /* page models or ref page models */ l_int32 redfactor; /* reduction factor of input: 1 or 2 */ l_int32 sampling; /* disparity arrays sampling factor */ l_int32 minlines; /* min number of long lines required */ l_int32 maxdist; /* max distance for getting ref pages */ l_int32 max_linecurv; /* maximum abs line curvature, */ /* in micro-units */ l_int32 min_diff_linecurv; /* minimum abs diff line curvature */ /* in micro-units */ l_int32 max_diff_linecurv; /* maximum abs diff line curvature */ /* in micro-units */ l_int32 max_edgecurv; /* maximum abs left or right edge */ /* curvature, in micro-units */ l_int32 max_diff_edgecurv; /* maximum abs diff left-right */ /* edge curvature, in micro-units */ l_int32 useboth; /* use both disparity arrays if */ /* available; just vertical otherwise */ l_int32 modelsready; /* invalid models have been removed */ /* and refs built against valid set */ }; typedef struct L_Dewarpa L_DEWARPA; struct L_Dewarp { struct L_Dewarpa *dewa; /* ptr to parent (not owned) */ struct Pix *pixs; /* source pix, 1 bpp */ struct FPix *sampvdispar; /* sampled vert disparity array */ struct FPix *samphdispar; /* sampled horiz disparity array */ struct FPix *fullvdispar; /* full vert disparity array */ struct FPix *fullhdispar; /* full horiz disparity array */ struct Numa *namidys; /* sorted y val of midpoint each line */ struct Numa *nacurves; /* sorted curvature of each line */ l_int32 w; /* width of source image */ l_int32 h; /* height of source image */ l_int32 pageno; /* page number; important for reuse */ l_int32 sampling; /* sampling factor of disparity arrays */ l_int32 redfactor; /* reduction factor of pixs: 1 or 2 */ l_int32 minlines; /* min number of long lines required */ l_int32 nlines; /* number of long lines found */ l_int32 mincurv; /* min line curvature in micro-units */ l_int32 maxcurv; /* max line curvature in micro-units */ l_int32 leftcurv; /* left edge curvature in micro-units */ l_int32 rightcurv; /* right edge curvature in micro-units */ l_int32 nx; /* number of sampling pts in x-dir */ l_int32 ny; /* number of sampling pts in y-dir */ l_int32 hasref; /* 0 if normal; 1 if has a refpage */ l_int32 refpage; /* page with disparity model to use */ l_int32 vsuccess; /* sets to 1 if vert disparity builds */ l_int32 hsuccess; /* sets to 1 if horiz disparity builds */ l_int32 vvalid; /* sets to 1 if valid vert disparity */ l_int32 hvalid; /* sets to 1 if valid horiz disparity */ l_int32 debug; /* sets to 1 if debug output requested */ }; typedef struct L_Dewarp L_DEWARP; #endif /* LEPTONICA_DEWARP_H */ leptonica-1.70/src/psio2.c0000664000175000017500000030151112267060452013503 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * psio2.c * * |=============================================================| * | Important note | * |=============================================================| * | Some of these functions require libtiff, libjpeg and libz. | * | If you do not have these libraries, you must set | * | #define USE_PSIO 0 | * | in environ.h. This will link psio2stub.c | * |=============================================================| * * These are lower-level functions that implement a PostScript * "device driver" for wrapping images in PostScript. The images * can be rendered by a PostScript interpreter for viewing, * using evince or gv. They can also be rasterized for printing, * using gs or an embedded interpreter in a PostScript printer. * And they can be converted to a pdf using gs (ps2pdf). * * For uncompressed images * l_int32 pixWritePSEmbed() * l_int32 pixWriteStreamPS() * char *pixWriteStringPS() * char *generateUncompressedPS() * void getScaledParametersPS() * l_int32 convertByteToHexAscii() * * For jpeg compressed images (use dct compression) * l_int32 convertJpegToPSEmbed() * l_int32 convertJpegToPS() * l_int32 convertJpegToPSString() * char *generateJpegPS() * L_COMP_DATA *pixGenerateJpegData() * L_COMP_DATA *l_generateJpegData() * void l_compdataDestroy() * * For g4 fax compressed images (use ccitt g4 compression) * l_int32 convertG4ToPSEmbed() * l_int32 convertG4ToPS() * l_int32 convertG4ToPSString() * char *generateG4PS() * L_COMP_DATA *pixGenerateG4Data() * L_COMP_DATA *l_generateG4Data() * * For multipage tiff images * l_int32 convertTiffMultipageToPS() * * For flate (gzip) compressed images (e.g., png) * l_int32 convertFlateToPSEmbed() * l_int32 convertFlateToPS() * l_int32 convertFlateToPSString() * char *generateFlatePS() * L_COMP_DATA *l_generateFlateData() * L_COMP_DATA *pixGenerateFlateData() * * For compressed images in general * l_int32 l_generateCIData() * l_int32 pixGenerateCIData() * * Write to memory * l_int32 pixWriteMemPS() * * Converting resolution * l_int32 getResLetterPage() * l_int32 getResA4Page() * * Utility for encoding and decoding data with ascii85 * char *encodeAscii85() * static l_int32 *convertChunkToAscii85() * l_uint8 *decodeAscii85() * * Setting flag for writing bounding box hint * void l_psWriteBoundingBox() * * See psio1.c for higher-level functions and their usage. */ #include #include "allheaders.h" /* --------------------------------------------*/ #if USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ /* Set default for writing bounding box hint */ static l_int32 var_PS_WRITE_BOUNDING_BOX = 1; static const l_int32 L_BUF_SIZE = 512; static const l_int32 DEFAULT_INPUT_RES = 300; /* typical scan res, ppi */ static const l_int32 MIN_RES = 5; static const l_int32 MAX_RES = 3000; static const l_int32 MAX_85_LINE_COUNT = 64; /* max line length ascii85 */ /* For computing resolution that fills page to desired amount */ static const l_int32 LETTER_WIDTH = 612; /* points */ static const l_int32 LETTER_HEIGHT = 792; /* points */ static const l_int32 A4_WIDTH = 595; /* points */ static const l_int32 A4_HEIGHT = 842; /* points */ static const l_float32 DEFAULT_FILL_FRACTION = 0.95; static const l_uint32 power85[5] = {1, 85, 85 * 85, 85 * 85 * 85, 85 * 85 * 85 * 85}; static l_int32 convertChunkToAscii85(l_uint8 *inarray, l_int32 insize, l_int32 *pindex, char *outbuf, l_int32 *pnbout); #ifndef NO_CONSOLE_IO #define DEBUG_JPEG 0 #define DEBUG_G4 0 #define DEBUG_FLATE 0 #endif /* ~NO_CONSOLE_IO */ /* Note that the bounding box hint at the top of the generated PostScript * file is required for the "*Embed" functions. These generate a * PostScript file for an individual image that can be translated and * scaled by an application that embeds the image in its output * (e.g., in the PS output from a TeX file). * However, bounding box hints should not be embedded in any * PostScript image that will be composited with other images, * where more than one image may be placed in an arbitrary location * on a page. */ /*-------------------------------------------------------------* * For uncompressed images * *-------------------------------------------------------------*/ /*! * pixWritePSEmbed() * * Input: filein (input file, all depths, colormap OK) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a simple wrapper function that generates an * uncompressed PS file, with a bounding box. * (2) The bounding box is required when a program such as TeX * (through epsf) places and rescales the image. * (3) The bounding box is sized for fitting the image to an * 8.5 x 11.0 inch page. */ l_int32 pixWritePSEmbed(const char *filein, const char *fileout) { l_int32 w, h; l_float32 scale; FILE *fp; PIX *pix; PROCNAME("pixWritePSEmbed"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((pix = pixRead(filein)) == NULL) return ERROR_INT("image not read from file", procName, 1); w = pixGetWidth(pix); h = pixGetHeight(pix); if (w * 11.0 > h * 8.5) scale = 8.5 * 300. / (l_float32)w; else scale = 11.0 * 300. / (l_float32)h; if ((fp = fopenWriteStream(fileout, "wb")) == NULL) return ERROR_INT("file not opened for write", procName, 1); pixWriteStreamPS(fp, pix, NULL, 0, scale); fclose(fp); pixDestroy(&pix); return 0; } /*! * pixWriteStreamPS() * * Input: stream * pix * box () * res (can use 0 for default of 300 ppi) * scale (to prevent scaling, use either 1.0 or 0.0) * Return: 0 if OK; 1 on error * * Notes: * (1) This writes image in PS format, optionally scaled, * adjusted for the printer resolution, and with * a bounding box. * (2) For details on use of parameters, see pixWriteStringPS(). */ l_int32 pixWriteStreamPS(FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { char *outstr; l_int32 length; PIX *pixc; PROCNAME("pixWriteStreamPS"); if (!fp) return (l_int32)ERROR_INT("stream not open", procName, 1); if (!pix) return (l_int32)ERROR_INT("pix not defined", procName, 1); if ((pixc = pixConvertForPSWrap(pix)) == NULL) return (l_int32)ERROR_INT("pixc not made", procName, 1); outstr = pixWriteStringPS(pixc, box, res, scale); length = strlen(outstr); fwrite(outstr, 1, length, fp); FREE(outstr); pixDestroy(&pixc); return 0; } /*! * pixWriteStringPS() * * Input: pixs: all depths, colormap OK * box: (a) If box == null, image is placed, optionally scaled, * in a standard b.b. at the center of the page. * This is to be used when another program like * TeX (through epsf) places the image. * (b) If box != null, image is placed without a * b.b. at the specified page location and with * (optional) scaling. This is to be used when * you want to specify exactly where (and optionally * how big) you want the image to be. * Note that all coordinates are in PS convention, * with (0,0) at LL corner of the page: * (x,y) location of LL corner of image, in mils. * (w,h) scaled size, in mils. Use 0 to * scale with "scale" and "res" input. * res: resolution, in printer ppi. Use 0 for default (300 ppi). * scale: scale factor. If no scaling is desired, use * either 1.0 or 0.0. Scaling just resets the resolution * parameter; the actual scaling is done in the * interpreter at rendering time. This is important: * it allows you to scale the image up without * increasing the file size. * Return: ps string if OK, or null on error * * Notes: * (1) OK, this seems a bit complicated, because there are various * ways to scale and not to scale. Here's a summary: * (2) If you don't want any scaling at all: * * if you are using a box: * set w = 0, h = 0, and use scale = 1.0; it will print * each pixel unscaled at printer resolution * * if you are not using a box: * set scale = 1.0; it will print at printer resolution * (3) If you want the image to be a certain size in inches: * * you must use a box and set the box (w,h) in mils * (4) If you want the image to be scaled by a scale factor != 1.0: * * if you are using a box: * set w = 0, h = 0, and use the desired scale factor; * the higher the printer resolution, the smaller the * image will actually appear. * * if you are not using a box: * set the desired scale factor; the higher the printer * resolution, the smaller the image will actually appear. * (5) Another complication is the proliferation of distance units: * * The interface distances are in milli-inches. * * Three different units are used internally: * - pixels (units of 1/res inch) * - printer pts (units of 1/72 inch) * - inches * * Here is a quiz on volume units from a reviewer: * How many UK milli-cups in a US kilo-teaspoon? * (Hint: 1.0 US cup = 0.75 UK cup + 0.2 US gill; * 1.0 US gill = 24.0 US teaspoons) */ char * pixWriteStringPS(PIX *pixs, BOX *box, l_int32 res, l_float32 scale) { char nib1, nib2; char *hexdata, *outstr; l_uint8 byteval; l_int32 i, j, k, w, h, d; l_float32 wpt, hpt, xpt, ypt; l_int32 wpl, psbpl, hexbytes, boxflag, bps; l_uint32 *line, *data; PIX *pix; PROCNAME("pixWriteStringPS"); if (!pixs) return (char *)ERROR_PTR("pixs not defined", procName, NULL); if ((pix = pixConvertForPSWrap(pixs)) == NULL) return (char *)ERROR_PTR("pix not made", procName, NULL); pixGetDimensions(pix, &w, &h, &d); /* Get the factors by which PS scales and translates, in pts */ if (!box) boxflag = 0; /* no scaling; b.b. at center */ else boxflag = 1; /* no b.b., specify placement and optional scaling */ getScaledParametersPS(box, w, h, res, scale, &xpt, &ypt, &wpt, &hpt); if (d == 1) bps = 1; /* bits/sample */ else /* d == 8 || d == 32 */ bps = 8; /* Convert image data to hex string. psbpl is the number of * bytes in each raster line when it is packed to the byte * boundary (not the 32 bit word boundary, as with the pix). * When converted to hex, the hex string has 2 bytes for * every byte of raster data. */ wpl = pixGetWpl(pix); if (d == 1 || d == 8) psbpl = (w * d + 7) / 8; else /* d == 32 */ psbpl = 3 * w; data = pixGetData(pix); hexbytes = 2 * psbpl * h; /* size of ps hex array */ if ((hexdata = (char *)CALLOC(hexbytes + 1, sizeof(char))) == NULL) return (char *)ERROR_PTR("hexdata not made", procName, NULL); if (d == 1 || d == 8) { for (i = 0, k = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < psbpl; j++) { byteval = GET_DATA_BYTE(line, j); convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; } } } else { /* d == 32; hexdata bytes packed RGBRGB..., 2 per sample */ for (i = 0, k = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { byteval = GET_DATA_BYTE(line + j, 0); /* red */ convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; byteval = GET_DATA_BYTE(line + j, 1); /* green */ convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; byteval = GET_DATA_BYTE(line + j, 2); /* blue */ convertByteToHexAscii(byteval, &nib1, &nib2); hexdata[k++] = nib1; hexdata[k++] = nib2; } } } hexdata[k] = '\0'; outstr = generateUncompressedPS(hexdata, w, h, d, psbpl, bps, xpt, ypt, wpt, hpt, boxflag); if (!outstr) return (char *)ERROR_PTR("outstr not made", procName, NULL); pixDestroy(&pix); return outstr; } /*! * generateUncompressedPS() * * Input: hexdata * w, h (raster image size in pixels) * d (image depth in bpp; rgb is 32) * psbpl (raster bytes/line, when packed to the byte boundary) * bps (bits/sample: either 1 or 8) * xpt, ypt (location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page) * wpt, hpt (rendered image size in pts) * boxflag (1 to print out bounding box hint; 0 to skip) * Return: PS string, or null on error * * Notes: * (1) Low-level function. */ char * generateUncompressedPS(char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag) { char *outstr; char bigbuf[L_BUF_SIZE]; SARRAY *sa; PROCNAME("generateUncompressedPS"); if (!hexdata) return (char *)ERROR_PTR("hexdata not defined", procName, NULL); if ((sa = sarrayCreate(0)) == NULL) return (char *)ERROR_PTR("sa not made", procName, NULL); sarrayAddString(sa, (char *)"%!Adobe-PS", L_COPY); if (boxflag == 0) { sprintf(bigbuf, "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } else { /* boxflag == 1 */ sarrayAddString(sa, (char *)"gsave", L_COPY); } if (d == 1) sarrayAddString(sa, (char *)"{1 exch sub} settransfer %invert binary", L_COPY); sprintf(bigbuf, "/bpl %d string def %%bpl as a string", psbpl); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, "%d %d %d %%image dimensions in pixels", w, h, bps); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, "[%d %d %d %d %d %d] %%mapping matrix: [w 0 0 -h 0 h]", w, 0, 0, -h, 0, h); sarrayAddString(sa, bigbuf, L_COPY); if (boxflag == 0) { if (d == 1 || d == 8) sarrayAddString(sa, (char *)"{currentfile bpl readhexstring pop} image", L_COPY); else /* d == 32 */ sarrayAddString(sa, (char *)"{currentfile bpl readhexstring pop} false 3 colorimage", L_COPY); } else { /* boxflag == 1 */ if (d == 1 || d == 8) sarrayAddString(sa, (char *)"{currentfile bpl readhexstring pop} bind image", L_COPY); else /* d == 32 */ sarrayAddString(sa, (char *)"{currentfile bpl readhexstring pop} bind false 3 colorimage", L_COPY); } sarrayAddString(sa, hexdata, L_INSERT); if (boxflag == 0) sarrayAddString(sa, (char *)"\nshowpage", L_COPY); else /* boxflag == 1 */ sarrayAddString(sa, (char *)"\ngrestore", L_COPY); if ((outstr = sarrayToString(sa, 1)) == NULL) return (char *)ERROR_PTR("outstr not made", procName, NULL); sarrayDestroy(&sa); return outstr; } /*! * getScaledParametersPS() * * Input: box ( location of image in mils; with * (x,y) being the LL corner) * wpix (pix width in pixels) * hpix (pix height in pixels) * res (of printer; use 0 for default) * scale (use 1.0 or 0.0 for no scaling) * &xpt (location of llx in pts) * &ypt (location of lly in pts) * &wpt (image width in pts) * &hpt (image height in pts) * Return: void (no arg checking) * * Notes: * (1) The image is always scaled, depending on res and scale. * (2) If no box, the image is centered on the page. * (3) If there is a box, the image is placed within it. */ void getScaledParametersPS(BOX *box, l_int32 wpix, l_int32 hpix, l_int32 res, l_float32 scale, l_float32 *pxpt, l_float32 *pypt, l_float32 *pwpt, l_float32 *phpt) { l_int32 bx, by, bw, bh; l_float32 winch, hinch, xinch, yinch, fres; PROCNAME("getScaledParametersPS"); if (res == 0) res = DEFAULT_INPUT_RES; fres = (l_float32)res; /* Allow the PS interpreter to scale the resolution */ if (scale == 0.0) scale = 1.0; if (scale != 1.0) { fres = (l_float32)res / scale; res = (l_int32)fres; } /* Limit valid resolution interval */ if (res < MIN_RES || res > MAX_RES) { L_WARNING("res %d out of bounds; using default res; no scaling\n", procName, res); res = DEFAULT_INPUT_RES; fres = (l_float32)res; } if (!box) { /* center on page */ winch = (l_float32)wpix / fres; hinch = (l_float32)hpix / fres; xinch = (8.5 - winch) / 2.; yinch = (11.0 - hinch) / 2.; } else { boxGetGeometry(box, &bx, &by, &bw, &bh); if (bw == 0) winch = (l_float32)wpix / fres; else winch = (l_float32)bw / 1000.; if (bh == 0) hinch = (l_float32)hpix / fres; else hinch = (l_float32)bh / 1000.; xinch = (l_float32)bx / 1000.; yinch = (l_float32)by / 1000.; } if (xinch < 0) L_WARNING("left edge < 0.0 inch\n", procName); if (xinch + winch > 8.5) L_WARNING("right edge > 8.5 inch\n", procName); if (yinch < 0.0) L_WARNING("bottom edge < 0.0 inch\n", procName); if (yinch + hinch > 11.0) L_WARNING("top edge > 11.0 inch\n", procName); *pwpt = 72. * winch; *phpt = 72. * hinch; *pxpt = 72. * xinch; *pypt = 72. * yinch; return; } /*! * convertByteToHexAscii() * * Input: byteval (input byte) * &nib1, &nib2 ( two hex ascii characters) * Return: void */ void convertByteToHexAscii(l_uint8 byteval, char *pnib1, char *pnib2) { l_uint8 nib; nib = byteval >> 4; if (nib < 10) *pnib1 = '0' + nib; else *pnib1 = 'a' + (nib - 10); nib = byteval & 0xf; if (nib < 10) *pnib2 = '0' + nib; else *pnib2 = 'a' + (nib - 10); return; } /*-------------------------------------------------------------* * For jpeg compressed images * *-------------------------------------------------------------*/ /*! * convertJpegToPSEmbed() * * Input: filein (input jpeg file) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This function takes a jpeg file as input and generates a DCT * compressed, ascii85 encoded PS file, with a bounding box. * (2) The bounding box is required when a program such as TeX * (through epsf) places and rescales the image. * (3) The bounding box is sized for fitting the image to an * 8.5 x 11.0 inch page. */ l_int32 convertJpegToPSEmbed(const char *filein, const char *fileout) { char *outstr; l_int32 w, h, nbytes; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; PROCNAME("convertJpegToPSEmbed"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); /* Generate the ascii encoded jpeg data */ if ((cid = l_generateJpegData(filein, 1)) == NULL) return ERROR_INT("jpeg data not made", procName, 1); w = cid->w; h = cid->h; /* Scale for 20 pt boundary and otherwise full filling * in one direction on 8.5 x 11 inch device */ xpt = 20.0; ypt = 20.0; if (w * 11.0 > h * 8.5) { wpt = 572.0; /* 612 - 2 * 20 */ hpt = wpt * (l_float32)h / (l_float32)w; } else { hpt = 752.0; /* 792 - 2 * 20 */ wpt = hpt * (l_float32)w / (l_float32)h; } /* Generate the PS. * The bounding box information should be inserted (default). */ outstr = generateJpegPS(filein, cid, xpt, ypt, wpt, hpt, 1, 1); if (!outstr) return ERROR_INT("outstr not made", procName, 1); nbytes = strlen(outstr); if (l_binaryWrite(fileout, "w", outstr, nbytes)) return ERROR_INT("ps string not written to file", procName, 1); FREE(outstr); l_compdataDestroy(&cid); return 0; } /*! * convertJpegToPS() * * Input: filein (input jpeg file) * fileout (output ps file) * operation ("w" for write; "a" for append) * x, y (location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page) * res (resolution of the input image, in ppi; use 0 for default) * scale (scaling by printer; use 0.0 or 1.0 for no scaling) * pageno (page number; must start with 1; you can use 0 * if there is only one page) * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This is simpler to use than pixWriteStringPS(), and * it outputs in level 2 PS as compressed DCT (overlaid * with ascii85 encoding). * (2) An output file can contain multiple pages, each with * multiple images. The arguments to convertJpegToPS() * allow you to control placement of jpeg images on multiple * pages within a PostScript file. * (3) For the first image written to a file, use "w", which * opens for write and clears the file. For all subsequent * images written to that file, use "a". * (4) The (x, y) parameters give the LL corner of the image * relative to the LL corner of the page. They are in * units of pixels if scale = 1.0. If you use (e.g.) * scale = 2.0, the image is placed at (2x, 2y) on the page, * and the image dimensions are also doubled. * (5) Display vs printed resolution: * * If your display is 75 ppi and your image was created * at a resolution of 300 ppi, you can get the image * to print at the same size as it appears on your display * by either setting scale = 4.0 or by setting res = 75. * Both tell the printer to make a 4x enlarged image. * * If your image is generated at 150 ppi and you use scale = 1, * it will be rendered such that 150 pixels correspond * to 72 pts (1 inch on the printer). This function does * the conversion from pixels (with or without scaling) to * pts, which are the units that the printer uses. * * The printer will choose its own resolution to use * in rendering the image, which will not affect the size * of the rendered image. That is because the output * PostScript file describes the geometry in terms of pts, * which are defined to be 1/72 inch. The printer will * only see the size of the image in pts, through the * scale and translate parameters and the affine * transform (the ImageMatrix) of the image. * (6) To render multiple images on the same page, set * endpage = FALSE for each image until you get to the * last, for which you set endpage = TRUE. This causes the * "showpage" command to be invoked. Showpage outputs * the entire page and clears the raster buffer for the * next page to be added. Without a "showpage", * subsequent images from the next page will overlay those * previously put down. * (7) For multiple pages, increment the page number, starting * with page 1. This allows PostScript (and PDF) to build * a page directory, which viewers use for navigation. */ l_int32 convertJpegToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_int32 nbytes; PROCNAME("convertJpegToPS"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (strcmp(operation, "w") && strcmp(operation, "a")) return ERROR_INT("operation must be \"w\" or \"a\"", procName, 1); if (convertJpegToPSString(filein, &outstr, &nbytes, x, y, res, scale, pageno, endpage)) return ERROR_INT("ps string not made", procName, 1); if (l_binaryWrite(fileout, operation, outstr, nbytes)) return ERROR_INT("ps string not written to file", procName, 1); FREE(outstr); return 0; } /*! * convertJpegToPSString() * * Generates PS string in jpeg format from jpeg file * * Input: filein (input jpeg file) * &poutstr ( PS string) * &nbytes ( number of bytes in PS string) * x, y (location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page) * res (resolution of the input image, in ppi; use 0 for default) * scale (scaling by printer; use 0.0 or 1.0 for no scaling) * pageno (page number; must start with 1; you can use 0 * if there is only one page) * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) For usage, see convertJpegToPS() */ l_int32 convertJpegToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; PROCNAME("convertJpegToPSString"); if (!poutstr) return ERROR_INT("&outstr not defined", procName, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *poutstr = NULL; *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", procName, 1); /* Generate the ascii encoded jpeg data */ if ((cid = l_generateJpegData(filein, 1)) == NULL) return ERROR_INT("jpeg data not made", procName, 1); /* Get scaled location in pts. Guess the input scan resolution * based on the input parameter @res, the resolution data in * the pix, and the size of the image. */ if (scale == 0.0) scale = 1.0; if (res <= 0) { if (cid->res > 0) res = cid->res; else res = DEFAULT_INPUT_RES; } /* Get scaled location in pts */ if (scale == 0.0) scale = 1.0; if (res == 0) res = DEFAULT_INPUT_RES; xpt = scale * x * 72. / res; ypt = scale * y * 72. / res; wpt = scale * cid->w * 72. / res; hpt = scale * cid->h * 72. / res; if (pageno == 0) pageno = 1; #if DEBUG_JPEG fprintf(stderr, "w = %d, h = %d, bps = %d, spp = %d\n", cid->w, cid->h, cid->bps, cid->spp); fprintf(stderr, "comp bytes = %ld, nbytes85 = %ld, ratio = %5.3f\n", (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85, (l_float32)cid->nbytes85 / (l_float32)cid->nbytescomp); fprintf(stderr, "xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", xpt, ypt, wpt, hpt); #endif /* DEBUG_JPEG */ /* Generate the PS */ outstr = generateJpegPS(filein, cid, xpt, ypt, wpt, hpt, pageno, endpage); if (!outstr) return ERROR_INT("outstr not made", procName, 1); *poutstr = outstr; *pnbytes = strlen(outstr); l_compdataDestroy(&cid); return 0; } /*! * generateJpegPS() * * Input: filein ( input jpeg filename; can be null) * cid (jpeg compressed image data) * xpt, ypt (location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page) * wpt, hpt (rendered image size in pts) * pageno (page number; must start with 1; you can use 0 * if there is only one page.) * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: PS string, or null on error * * Notes: * (1) Low-level function. */ char * generateJpegPS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) { l_int32 w, h, bps, spp; char *outstr; char bigbuf[L_BUF_SIZE]; SARRAY *sa; PROCNAME("generateJpegPS"); if (!cid) return (char *)ERROR_PTR("jpeg data not defined", procName, NULL); w = cid->w; h = cid->h; bps = cid->bps; spp = cid->spp; if ((sa = sarrayCreate(50)) == NULL) return (char *)ERROR_PTR("sa not made", procName, NULL); sarrayAddString(sa, (char *)"%!PS-Adobe-3.0", L_COPY); sarrayAddString(sa, (char *)"%%Creator: leptonica", L_COPY); if (filein) { sprintf(bigbuf, "%%%%Title: %s", filein); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, (char *)"%%DocumentData: Clean7Bit", L_COPY); if (var_PS_WRITE_BOUNDING_BOX == 1) { sprintf(bigbuf, "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, (char *)"%%LanguageLevel: 2", L_COPY); sarrayAddString(sa, (char *)"%%EndComments", L_COPY); sprintf(bigbuf, "%%%%Page: %d %d", pageno, pageno); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)"save", L_COPY); sarrayAddString(sa, (char *)"/RawData currentfile /ASCII85Decode filter def", L_COPY); sarrayAddString(sa, (char *)"/Data RawData << >> /DCTDecode filter def", L_COPY); sprintf(bigbuf, "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); if (spp == 1) sarrayAddString(sa, (char *)"/DeviceGray setcolorspace", L_COPY); else if (spp == 3) sarrayAddString(sa, (char *)"/DeviceRGB setcolorspace", L_COPY); else /*spp == 4 */ sarrayAddString(sa, (char *)"/DeviceCMYK setcolorspace", L_COPY); sarrayAddString(sa, (char *)"{ << /ImageType 1", L_COPY); sprintf(bigbuf, " /Width %d", w); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /Height %d", h); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)" /DataSource Data", L_COPY); sprintf(bigbuf, " /BitsPerComponent %d", bps); sarrayAddString(sa, bigbuf, L_COPY); if (spp == 1) sarrayAddString(sa, (char *)" /Decode [0 1]", L_COPY); else if (spp == 3) sarrayAddString(sa, (char *)" /Decode [0 1 0 1 0 1]", L_COPY); else /* spp == 4 */ sarrayAddString(sa, (char *)" /Decode [0 1 0 1 0 1 0 1]", L_COPY); sarrayAddString(sa, (char *)" >> image", L_COPY); sarrayAddString(sa, (char *)" Data closefile", L_COPY); sarrayAddString(sa, (char *)" RawData flushfile", L_COPY); if (endpage == TRUE) sarrayAddString(sa, (char *)" showpage", L_COPY); sarrayAddString(sa, (char *)" restore", L_COPY); sarrayAddString(sa, (char *)"} exec", L_COPY); /* Insert the ascii85 jpeg data; this is now owned by sa */ sarrayAddString(sa, cid->data85, L_INSERT); cid->data85 = NULL; /* it has been transferred and destroyed */ /* Generate and return the output string */ outstr = sarrayToString(sa, 1); sarrayDestroy(&sa); return outstr; } /*! * pixGenerateJpegData() * * Input: pixs (8 or 32 bpp, no colormap) * ascii85flag (0 for jpeg; 1 for ascii85-encoded jpeg) * quality (0 for default, which is 75) * Return: cid (jpeg compressed data), or null on error * * Notes: * (1) Set ascii85flag: * - 0 for binary data (not permitted in PostScript) * - 1 for ascii85 (5 for 4) encoded binary data */ L_COMP_DATA * pixGenerateJpegData(PIX *pixs, l_int32 ascii85flag, l_int32 quality) { l_int32 d; char *fname; L_COMP_DATA *cid; PROCNAME("pixGenerateJpegData"); if (!pixs) return (L_COMP_DATA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs)) return (L_COMP_DATA *)ERROR_PTR("pixs has colormap", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (L_COMP_DATA *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); /* Compress to a temp jpeg file */ fname = genTempFilename("/tmp", "temp.jpg", 1, 1); pixWriteJpeg(fname, pixs, quality, 0); cid = l_generateJpegData(fname, ascii85flag); lept_rm(NULL, fname); lept_free(fname); return cid; } /*! * l_generateJpegData() * * Input: fname (of jpeg file) * ascii85flag (0 for jpeg; 1 for ascii85-encoded jpeg) * Return: cid (containing jpeg data), or null on error * * Notes: * (1) Set ascii85flag: * - 0 for binary data (not permitted in PostScript) * - 1 for ascii85 (5 for 4) encoded binary data * (not permitted in pdf) */ L_COMP_DATA * l_generateJpegData(const char *fname, l_int32 ascii85flag) { l_uint8 *datacomp = NULL; /* entire jpeg compressed file */ char *data85 = NULL; /* ascii85 encoded jpeg compressed file */ l_int32 w, h, xres, yres, bps, spp; l_int32 nbytes85; size_t nbytescomp; FILE *fp; L_COMP_DATA *cid; PROCNAME("l_generateJpegData"); if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); /* The returned jpeg data in memory is the entire jpeg file, * which starts with ffd8 and ends with ffd9 */ if ((datacomp = l_binaryRead(fname, &nbytescomp)) == NULL) return (L_COMP_DATA *)ERROR_PTR("datacomp not extracted", procName, NULL); /* Read the metadata */ if ((fp = fopenReadStream(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR("stream not opened", procName, NULL); freadHeaderJpeg(fp, &w, &h, &spp, NULL, NULL); bps = 8; fgetJpegResolution(fp, &xres, &yres); fclose(fp); /* Optionally, encode the compressed data */ if (ascii85flag == 1) { data85 = encodeAscii85(datacomp, nbytescomp, &nbytes85); FREE(datacomp); if (!data85) return (L_COMP_DATA *)ERROR_PTR("data85 not made", procName, NULL); else data85[nbytes85 - 1] = '\0'; /* remove the newline */ } cid = (L_COMP_DATA *)CALLOC(1, sizeof(L_COMP_DATA)); if (!cid) return (L_COMP_DATA *)ERROR_PTR("cid not made", procName, NULL); if (ascii85flag == 0) { cid->datacomp = datacomp; } else { /* ascii85 */ cid->data85 = data85; cid->nbytes85 = nbytes85; } cid->type = L_JPEG_ENCODE; cid->nbytescomp = nbytescomp; cid->w = w; cid->h = h; cid->bps = bps; cid->spp = spp; cid->res = xres; return cid; } /*! * l_compdataDestroy() * * Input: &cid () * Return: void */ void l_compdataDestroy(L_COMP_DATA **pcid) { L_COMP_DATA *cid; PROCNAME("l_compdataDestroy"); if (pcid == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((cid = *pcid) == NULL) return; if (cid->datacomp) FREE(cid->datacomp); if (cid->data85) FREE(cid->data85); if (cid->cmapdata85) FREE(cid->cmapdata85); if (cid->cmapdatahex) FREE(cid->cmapdatahex); FREE(cid); *pcid = NULL; return; } /*-------------------------------------------------------------* * For ccitt g4 compressed images * *-------------------------------------------------------------*/ /*! * convertG4ToPSEmbed() * * Input: filein (input tiff file) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This function takes a g4 compressed tif file as input and * generates a g4 compressed, ascii85 encoded PS file, with * a bounding box. * (2) The bounding box is required when a program such as TeX * (through epsf) places and rescales the image. * (3) The bounding box is sized for fitting the image to an * 8.5 x 11.0 inch page. * (4) We paint this through a mask, over whatever is below. */ l_int32 convertG4ToPSEmbed(const char *filein, const char *fileout) { char *outstr; l_int32 w, h, nbytes; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; PROCNAME("convertG4ToPSEmbed"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((cid = l_generateG4Data(filein, 1)) == NULL) return ERROR_INT("g4 data not made", procName, 1); w = cid->w; h = cid->h; /* Scale for 20 pt boundary and otherwise full filling * in one direction on 8.5 x 11 inch device */ xpt = 20.0; ypt = 20.0; if (w * 11.0 > h * 8.5) { wpt = 572.0; /* 612 - 2 * 20 */ hpt = wpt * (l_float32)h / (l_float32)w; } else { hpt = 752.0; /* 792 - 2 * 20 */ wpt = hpt * (l_float32)w / (l_float32)h; } /* Generate the PS, painting through the image mask. * The bounding box information should be inserted (default). */ outstr = generateG4PS(filein, cid, xpt, ypt, wpt, hpt, 1, 1, 1); if (!outstr) return ERROR_INT("outstr not made", procName, 1); nbytes = strlen(outstr); if (l_binaryWrite(fileout, "w", outstr, nbytes)) return ERROR_INT("ps string not written to file", procName, 1); FREE(outstr); l_compdataDestroy(&cid); return 0; } /*! * convertG4ToPS() * * Input: filein (input tiff g4 file) * fileout (output ps file) * operation ("w" for write; "a" for append) * x, y (location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page) * res (resolution of the input image, in ppi; typ. values * are 300 and 600; use 0 for automatic determination * based on image size) * scale (scaling by printer; use 0.0 or 1.0 for no scaling) * pageno (page number; must start with 1; you can use 0 * if there is only one page.) * maskflag (boolean: use TRUE if just painting through fg; * FALSE if painting both fg and bg. * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) See the usage comments in convertJpegToPS(), some of * which are repeated here. * (2) This is a wrapper for tiff g4. The PostScript that * is generated is expanded by about 5/4 (due to the * ascii85 encoding. If you convert to pdf (ps2pdf), the * ascii85 decoder is automatically invoked, so that the * pdf wrapped g4 file is essentially the same size as * the original g4 file. It's useful to have the PS * file ascii85 encoded, because many printers will not * print binary PS files. * (3) For the first image written to a file, use "w", which * opens for write and clears the file. For all subsequent * images written to that file, use "a". * (4) To render multiple images on the same page, set * endpage = FALSE for each image until you get to the * last, for which you set endpage = TRUE. This causes the * "showpage" command to be invoked. Showpage outputs * the entire page and clears the raster buffer for the * next page to be added. Without a "showpage", * subsequent images from the next page will overlay those * previously put down. * (5) For multiple images to the same page, where you are writing * both jpeg and tiff-g4, you have two options: * (a) write the g4 first, as either image (maskflag == FALSE) * or imagemask (maskflag == TRUE), and then write the * jpeg over it. * (b) write the jpeg first and as the last item, write * the g4 as an imagemask (maskflag == TRUE), to paint * through the foreground only. * We have this flexibility with the tiff-g4 because it is 1 bpp. * (6) For multiple pages, increment the page number, starting * with page 1. This allows PostScript (and PDF) to build * a page directory, which viewers use for navigation. */ l_int32 convertG4ToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) { char *outstr; l_int32 nbytes; PROCNAME("convertG4ToPS"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (strcmp(operation, "w") && strcmp(operation, "a")) return ERROR_INT("operation must be \"w\" or \"a\"", procName, 1); if (convertG4ToPSString(filein, &outstr, &nbytes, x, y, res, scale, pageno, maskflag, endpage)) return ERROR_INT("ps string not made", procName, 1); if (l_binaryWrite(fileout, operation, outstr, nbytes)) return ERROR_INT("ps string not written to file", procName, 1); FREE(outstr); return 0; } /*! * convertG4ToPSString() * * Input: filein (input tiff g4 file) * &poutstr ( PS string) * &nbytes ( number of bytes in PS string) * x, y (location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page) * res (resolution of the input image, in ppi; typ. values * are 300 and 600; use 0 for automatic determination * based on image size) * scale (scaling by printer; use 0.0 or 1.0 for no scaling) * pageno (page number; must start with 1; you can use 0 * if there is only one page.) * maskflag (boolean: use TRUE if just painting through fg; * FALSE if painting both fg and bg. * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) Generates PS string in G4 compressed tiff format from G4 tiff file. * (2) For usage, see convertG4ToPS(). */ l_int32 convertG4ToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) { char *outstr; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; PROCNAME("convertG4ToPSString"); if (!poutstr) return ERROR_INT("&outstr not defined", procName, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *poutstr = NULL; *pnbytes = 0; if (!filein) return ERROR_INT("filein not defined", procName, 1); if ((cid = l_generateG4Data(filein, 1)) == NULL) return ERROR_INT("g4 data not made", procName, 1); /* Get scaled location in pts. Guess the input scan resolution * based on the input parameter @res, the resolution data in * the pix, and the size of the image. */ if (scale == 0.0) scale = 1.0; if (res <= 0) { if (cid->res > 0) { res = cid->res; } else { if (cid->h <= 3509) /* A4 height at 300 ppi */ res = 300; else res = 600; } } xpt = scale * x * 72. / res; ypt = scale * y * 72. / res; wpt = scale * cid->w * 72. / res; hpt = scale * cid->h * 72. / res; if (pageno == 0) pageno = 1; #if DEBUG_G4 fprintf(stderr, "w = %d, h = %d, minisblack = %d\n", cid->w, cid->h, cid->minisblack); fprintf(stderr, "comp bytes = %ld, nbytes85 = %ld\n", (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85); fprintf(stderr, "xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", xpt, ypt, wpt, hpt); #endif /* DEBUG_G4 */ /* Generate the PS */ outstr = generateG4PS(filein, cid, xpt, ypt, wpt, hpt, maskflag, pageno, endpage); if (!outstr) return ERROR_INT("outstr not made", procName, 1); *poutstr = outstr; *pnbytes = strlen(outstr); l_compdataDestroy(&cid); return 0; } /*! * generateG4PS() * * Input: filein ( input tiff g4 file; can be null) * cid (g4 compressed image data) * xpt, ypt (location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page) * wpt, hpt (rendered image size in pts) * maskflag (boolean: use TRUE if just painting through fg; * FALSE if painting both fg and bg. * pageno (page number; must start with 1; you can use 0 * if there is only one page.) * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: PS string, or null on error * * Notes: * (1) Low-level function. */ char * generateG4PS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 maskflag, l_int32 pageno, l_int32 endpage) { l_int32 w, h; char *outstr; char bigbuf[L_BUF_SIZE]; SARRAY *sa; PROCNAME("generateG4PS"); if (!cid) return (char *)ERROR_PTR("g4 data not defined", procName, NULL); w = cid->w; h = cid->h; if ((sa = sarrayCreate(50)) == NULL) return (char *)ERROR_PTR("sa not made", procName, NULL); sarrayAddString(sa, (char *)"%!PS-Adobe-3.0", L_COPY); sarrayAddString(sa, (char *)"%%Creator: leptonica", L_COPY); if (filein) { sprintf(bigbuf, "%%%%Title: %s", filein); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, (char *)"%%DocumentData: Clean7Bit", L_COPY); if (var_PS_WRITE_BOUNDING_BOX == 1) { sprintf(bigbuf, "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, (char *)"%%LanguageLevel: 2", L_COPY); sarrayAddString(sa, (char *)"%%EndComments", L_COPY); sprintf(bigbuf, "%%%%Page: %d %d", pageno, pageno); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)"save", L_COPY); sarrayAddString(sa, (char *)"100 dict begin", L_COPY); sprintf(bigbuf, "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)"/DeviceGray setcolorspace", L_COPY); sarrayAddString(sa, (char *)"{", L_COPY); sarrayAddString(sa, (char *)" /RawData currentfile /ASCII85Decode filter def", L_COPY); sarrayAddString(sa, (char *)" << ", L_COPY); sarrayAddString(sa, (char *)" /ImageType 1", L_COPY); sprintf(bigbuf, " /Width %d", w); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /Height %d", h); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)" /BitsPerComponent 1", L_COPY); sarrayAddString(sa, (char *)" /Interpolate true", L_COPY); if (cid->minisblack) sarrayAddString(sa, (char *)" /Decode [1 0]", L_COPY); else /* miniswhite; typical for 1 bpp */ sarrayAddString(sa, (char *)" /Decode [0 1]", L_COPY); sarrayAddString(sa, (char *)" /DataSource RawData", L_COPY); sarrayAddString(sa, (char *)" <<", L_COPY); sarrayAddString(sa, (char *)" /K -1", L_COPY); sprintf(bigbuf, " /Columns %d", w); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /Rows %d", h); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)" >> /CCITTFaxDecode filter", L_COPY); if (maskflag == TRUE) /* just paint through the fg */ sarrayAddString(sa, (char *)" >> imagemask", L_COPY); else /* Paint full image */ sarrayAddString(sa, (char *)" >> image", L_COPY); sarrayAddString(sa, (char *)" RawData flushfile", L_COPY); if (endpage == TRUE) sarrayAddString(sa, (char *)" showpage", L_COPY); sarrayAddString(sa, (char *)"}", L_COPY); sarrayAddString(sa, (char *)"%%BeginData:", L_COPY); sarrayAddString(sa, (char *)"exec", L_COPY); /* Insert the ascii85 ccittg4 data; this is now owned by sa */ sarrayAddString(sa, cid->data85, L_INSERT); /* Concat the trailing data */ sarrayAddString(sa, (char *)"%%EndData", L_COPY); sarrayAddString(sa, (char *)"end", L_COPY); sarrayAddString(sa, (char *)"restore", L_COPY); outstr = sarrayToString(sa, 1); sarrayDestroy(&sa); cid->data85 = NULL; /* it has been transferred and destroyed */ return outstr; } /*! * pixGenerateG4Data() * * Input: pixs (1 bpp) * ascii85flag (0 for gzipped; 1 for ascii85-encoded gzipped) * Return: cid (g4 compressed image data), or null on error * * Notes: * (1) Set ascii85flag: * - 0 for binary data (not permitted in PostScript) * - 1 for ascii85 (5 for 4) encoded binary data */ L_COMP_DATA * pixGenerateG4Data(PIX *pixs, l_int32 ascii85flag) { char *tname; L_COMP_DATA *cid; PROCNAME("pixGenerateG4Data"); if (!pixs) return (L_COMP_DATA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (L_COMP_DATA *)ERROR_PTR("pixs not 1 bpp", procName, NULL); /* Compress to a temp tiff g4 file */ tname = genTempFilename("/tmp", "temp.tif", 1, 1); pixWrite(tname, pixs, IFF_TIFF_G4); cid = l_generateG4Data(tname, ascii85flag); lept_rm(NULL, tname); lept_free(tname); return cid; } /*! * l_generateG4Data() * * Input: fname (of g4 compressed file) * ascii85flag (0 for g4 compressed; 1 for ascii85-encoded g4) * Return: cid (g4 compressed image data), or null on error * * Notes: * (1) Set ascii85flag: * - 0 for binary data (not permitted in PostScript) * - 1 for ascii85 (5 for 4) encoded binary data * (not permitted in pdf) */ L_COMP_DATA * l_generateG4Data(const char *fname, l_int32 ascii85flag) { l_uint8 *datacomp = NULL; /* g4 compressed raster data */ char *data85 = NULL; /* ascii85 encoded g4 compressed data */ l_int32 w, h, xres, yres; l_int32 minisblack; /* TRUE or FALSE */ l_int32 nbytes85; size_t nbytescomp; L_COMP_DATA *cid; FILE *fp; PROCNAME("l_generateG4Data"); if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); /* The returned ccitt g4 data in memory is the block of * bytes in the tiff file, starting after 8 bytes and * ending before the directory. */ if (extractG4DataFromFile(fname, &datacomp, &nbytescomp, &w, &h, &minisblack)) { return (L_COMP_DATA *)ERROR_PTR("datacomp not extracted", procName, NULL); } /* Read the resolution */ if ((fp = fopenReadStream(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR("stream not opened", procName, NULL); getTiffResolution(fp, &xres, &yres); fclose(fp); /* Optionally, encode the compressed data */ if (ascii85flag == 1) { data85 = encodeAscii85(datacomp, nbytescomp, &nbytes85); FREE(datacomp); if (!data85) return (L_COMP_DATA *)ERROR_PTR("data85 not made", procName, NULL); else data85[nbytes85 - 1] = '\0'; /* remove the newline */ } cid = (L_COMP_DATA *)CALLOC(1, sizeof(L_COMP_DATA)); if (!cid) return (L_COMP_DATA *)ERROR_PTR("cid not made", procName, NULL); if (ascii85flag == 0) { cid->datacomp = datacomp; } else { /* ascii85 */ cid->data85 = data85; cid->nbytes85 = nbytes85; } cid->type = L_G4_ENCODE; cid->nbytescomp = nbytescomp; cid->w = w; cid->h = h; cid->bps = 1; cid->spp = 1; cid->minisblack = minisblack; cid->res = xres; return cid; } /*-------------------------------------------------------------* * For tiff multipage files * *-------------------------------------------------------------*/ /*! * convertTiffMultipageToPS() * * Input: filein (input tiff multipage file) * fileout (output ps file) * tempfile ( for temporary g4 tiffs; * use NULL for default) * factor (for filling 8.5 x 11 inch page; * use 0.0 for DEFAULT_FILL_FRACTION) * Return: 0 if OK, 1 on error * * Notes: * (1) This converts a multipage tiff file of binary page images * into a ccitt g4 compressed PS file. * (2) If the images are generated from a standard resolution fax, * the vertical resolution is doubled to give a normal-looking * aspect ratio. */ l_int32 convertTiffMultipageToPS(const char *filein, const char *fileout, const char *tempfile, l_float32 fillfract) { const char tempdefault[] = "/tmp/junk_temp_g4.tif"; const char *tempname; l_int32 i, npages, w, h, istiff; l_float32 scale; PIX *pix, *pixs; FILE *fp; PROCNAME("convertTiffMultipageToPS"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((fp = fopenReadStream(filein)) == NULL) return ERROR_INT("file not found", procName, 1); istiff = fileFormatIsTiff(fp); if (!istiff) { fclose(fp); return ERROR_INT("file not tiff format", procName, 1); } tiffGetCount(fp, &npages); fclose(fp); if (tempfile) tempname = tempfile; else tempname = tempdefault; if (fillfract == 0.0) fillfract = DEFAULT_FILL_FRACTION; for (i = 0; i < npages; i++) { if ((pix = pixReadTiff(filein, i)) == NULL) return ERROR_INT("pix not made", procName, 1); w = pixGetWidth(pix); h = pixGetHeight(pix); if (w == 1728 && h < w) /* it's a std res fax */ pixs = pixScale(pix, 1.0, 2.0); else pixs = pixClone(pix); pixWrite(tempname, pixs, IFF_TIFF_G4); scale = L_MIN(fillfract * 2550 / w, fillfract * 3300 / h); if (i == 0) convertG4ToPS(tempname, fileout, "w", 0, 0, 300, scale, i + 1, FALSE, TRUE); else convertG4ToPS(tempname, fileout, "a", 0, 0, 300, scale, i + 1, FALSE, TRUE); pixDestroy(&pix); pixDestroy(&pixs); } return 0; } /*---------------------------------------------------------------------* * For flate (gzip) compressed images (e.g., png) * *---------------------------------------------------------------------*/ /*! * convertFlateToPSEmbed() * * Input: filein (input file -- any format) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This function takes any image file as input and generates a * flate-compressed, ascii85 encoded PS file, with a bounding box. * (2) The bounding box is required when a program such as TeX * (through epsf) places and rescales the image. * (3) The bounding box is sized for fitting the image to an * 8.5 x 11.0 inch page. */ l_int32 convertFlateToPSEmbed(const char *filein, const char *fileout) { char *outstr; l_int32 w, h, nbytes; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; PROCNAME("convertFlateToPSEmbed"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if ((cid = l_generateFlateData(filein, 1)) == NULL) return ERROR_INT("flate data not made", procName, 1); w = cid->w; h = cid->h; /* Scale for 20 pt boundary and otherwise full filling * in one direction on 8.5 x 11 inch device */ xpt = 20.0; ypt = 20.0; if (w * 11.0 > h * 8.5) { wpt = 572.0; /* 612 - 2 * 20 */ hpt = wpt * (l_float32)h / (l_float32)w; } else { hpt = 752.0; /* 792 - 2 * 20 */ wpt = hpt * (l_float32)w / (l_float32)h; } /* Generate the PS. * The bounding box information should be inserted (default). */ outstr = generateFlatePS(filein, cid, xpt, ypt, wpt, hpt, 1, 1); if (!outstr) return ERROR_INT("outstr not made", procName, 1); nbytes = strlen(outstr); if (l_binaryWrite(fileout, "w", outstr, nbytes)) return ERROR_INT("ps string not written to file", procName, 1); FREE(outstr); l_compdataDestroy(&cid); return 0; } /*! * convertFlateToPS() * * Input: filein (input file -- any format) * fileout (output ps file) * operation ("w" for write; "a" for append) * x, y (location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page) * res (resolution of the input image, in ppi; use 0 for default) * scale (scaling by printer; use 0.0 or 1.0 for no scaling) * pageno (page number; must start with 1; you can use 0 * if there is only one page.) * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This outputs level 3 PS as flate compressed (overlaid * with ascii85 encoding). * (2) An output file can contain multiple pages, each with * multiple images. The arguments to convertFlateToPS() * allow you to control placement of png images on multiple * pages within a PostScript file. * (3) For the first image written to a file, use "w", which * opens for write and clears the file. For all subsequent * images written to that file, use "a". * (4) The (x, y) parameters give the LL corner of the image * relative to the LL corner of the page. They are in * units of pixels if scale = 1.0. If you use (e.g.) * scale = 2.0, the image is placed at (2x, 2y) on the page, * and the image dimensions are also doubled. * (5) Display vs printed resolution: * * If your display is 75 ppi and your image was created * at a resolution of 300 ppi, you can get the image * to print at the same size as it appears on your display * by either setting scale = 4.0 or by setting res = 75. * Both tell the printer to make a 4x enlarged image. * * If your image is generated at 150 ppi and you use scale = 1, * it will be rendered such that 150 pixels correspond * to 72 pts (1 inch on the printer). This function does * the conversion from pixels (with or without scaling) to * pts, which are the units that the printer uses. * * The printer will choose its own resolution to use * in rendering the image, which will not affect the size * of the rendered image. That is because the output * PostScript file describes the geometry in terms of pts, * which are defined to be 1/72 inch. The printer will * only see the size of the image in pts, through the * scale and translate parameters and the affine * transform (the ImageMatrix) of the image. * (6) To render multiple images on the same page, set * endpage = FALSE for each image until you get to the * last, for which you set endpage = TRUE. This causes the * "showpage" command to be invoked. Showpage outputs * the entire page and clears the raster buffer for the * next page to be added. Without a "showpage", * subsequent images from the next page will overlay those * previously put down. * (7) For multiple pages, increment the page number, starting * with page 1. This allows PostScript (and PDF) to build * a page directory, which viewers use for navigation. */ l_int32 convertFlateToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_int32 nbytes; PROCNAME("convertFlateToPS"); if (!filein) return ERROR_INT("filein not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); if (strcmp(operation, "w") && strcmp(operation, "a")) return ERROR_INT("operation must be \"w\" or \"a\"", procName, 1); if (convertFlateToPSString(filein, &outstr, &nbytes, x, y, res, scale, pageno, endpage)) return ERROR_INT("ps string not made", procName, 1); if (l_binaryWrite(fileout, operation, outstr, nbytes)) return ERROR_INT("ps string not written to file", procName, 1); FREE(outstr); return 0; } /*! * convertFlateToPSString() * * Generates level 3 PS string in flate compressed format. * * Input: filein (input image file) * &poutstr ( PS string) * &nbytes ( number of bytes in PS string) * x, y (location of LL corner of image, in pixels, relative * to the PostScript origin (0,0) at the LL corner * of the page) * res (resolution of the input image, in ppi; use 0 for default) * scale (scaling by printer; use 0.0 or 1.0 for no scaling) * pageno (page number; must start with 1; you can use 0 * if there is only one page.) * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) The returned PS character array is a null-terminated * ascii string. All the raster data is ascii85 encoded, so * there are no null bytes embedded in it. * (2) The raster encoding is made with gzip, the same as that * in a png file that is compressed without prediction. * The raster data itself is 25% larger than that in the * binary form, due to the ascii85 encoding. * * Usage: See convertFlateToPS() */ l_int32 convertFlateToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { char *outstr; l_float32 xpt, ypt, wpt, hpt; L_COMP_DATA *cid; PROCNAME("convertFlateToPSString"); if (!poutstr) return ERROR_INT("&outstr not defined", procName, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; *poutstr = NULL; if (!filein) return ERROR_INT("filein not defined", procName, 1); if ((cid = l_generateFlateData(filein, 1)) == NULL) return ERROR_INT("flate data not made", procName, 1); /* Get scaled location in pts. Guess the input scan resolution * based on the input parameter @res, the resolution data in * the pix, and the size of the image. */ if (scale == 0.0) scale = 1.0; if (res <= 0) { if (cid->res > 0) res = cid->res; else res = DEFAULT_INPUT_RES; } xpt = scale * x * 72. / res; ypt = scale * y * 72. / res; wpt = scale * cid->w * 72. / res; hpt = scale * cid->h * 72. / res; if (pageno == 0) pageno = 1; #if DEBUG_FLATE fprintf(stderr, "w = %d, h = %d, bps = %d, spp = %d\n", cid->w, cid->h, cid->bps, cid->spp); fprintf(stderr, "uncomp bytes = %ld, comp bytes = %ld, nbytes85 = %ld\n", (unsigned long)cid->nbytes, (unsigned long)cid->nbytescomp, (unsigned long)cid->nbytes85); fprintf(stderr, "xpt = %7.2f, ypt = %7.2f, wpt = %7.2f, hpt = %7.2f\n", xpt, ypt, wpt, hpt); #endif /* DEBUG_FLATE */ /* Generate the PS */ outstr = generateFlatePS(filein, cid, xpt, ypt, wpt, hpt, pageno, endpage); if (!outstr) return ERROR_INT("outstr not made", procName, 1); *poutstr = outstr; *pnbytes = strlen(outstr); l_compdataDestroy(&cid); return 0; } /*! * generateFlatePS() * * Input: filein ( input filename; can be null) * cid (flate compressed image data) * xpt, ypt (location of LL corner of image, in pts, relative * to the PostScript origin (0,0) at the LL corner * of the page) * wpt, hpt (rendered image size in pts) * pageno (page number; must start with 1; you can use 0 * if there is only one page) * endpage (boolean: use TRUE if this is the last image to be * added to the page; FALSE otherwise) * Return: PS string, or null on error */ char * generateFlatePS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) { l_int32 w, h, bps, spp; char *outstr; char bigbuf[L_BUF_SIZE]; SARRAY *sa; PROCNAME("generateFlatePS"); if (!cid) return (char *)ERROR_PTR("flate data not defined", procName, NULL); w = cid->w; h = cid->h; bps = cid->bps; spp = cid->spp; if ((sa = sarrayCreate(50)) == NULL) return (char *)ERROR_PTR("sa not made", procName, NULL); sarrayAddString(sa, (char *)"%!PS-Adobe-3.0 EPSF-3.0", L_COPY); sarrayAddString(sa, (char *)"%%Creator: leptonica", L_COPY); if (filein) { sprintf(bigbuf, "%%%%Title: %s", filein); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, (char *)"%%DocumentData: Clean7Bit", L_COPY); if (var_PS_WRITE_BOUNDING_BOX == 1) { sprintf(bigbuf, "%%%%BoundingBox: %7.2f %7.2f %7.2f %7.2f", xpt, ypt, xpt + wpt, ypt + hpt); sarrayAddString(sa, bigbuf, L_COPY); } sarrayAddString(sa, (char *)"%%LanguageLevel: 3", L_COPY); sarrayAddString(sa, (char *)"%%EndComments", L_COPY); sprintf(bigbuf, "%%%%Page: %d %d", pageno, pageno); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)"save", L_COPY); sprintf(bigbuf, "%7.2f %7.2f translate %%set image origin in pts", xpt, ypt); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, "%7.2f %7.2f scale %%set image size in pts", wpt, hpt); sarrayAddString(sa, bigbuf, L_COPY); /* If there is a colormap, add the data; it is now owned by sa */ if (cid->cmapdata85) { sprintf(bigbuf, "[ /Indexed /DeviceRGB %d %%set colormap type/size", cid->ncolors - 1); sarrayAddString(sa, bigbuf, L_COPY); sarrayAddString(sa, (char *)" <~", L_COPY); sarrayAddString(sa, cid->cmapdata85, L_INSERT); sarrayAddString(sa, (char *)" ] setcolorspace", L_COPY); } else if (spp == 1) { sarrayAddString(sa, (char *)"/DeviceGray setcolorspace", L_COPY); } else { /* spp == 3 */ sarrayAddString(sa, (char *)"/DeviceRGB setcolorspace", L_COPY); } sarrayAddString(sa, (char *)"/RawData currentfile /ASCII85Decode filter def", L_COPY); sarrayAddString(sa, (char *)"/Data RawData << >> /FlateDecode filter def", L_COPY); sarrayAddString(sa, (char *)"{ << /ImageType 1", L_COPY); sprintf(bigbuf, " /Width %d", w); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /Height %d", h); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /BitsPerComponent %d", bps); sarrayAddString(sa, bigbuf, L_COPY); sprintf(bigbuf, " /ImageMatrix [ %d 0 0 %d 0 %d ]", w, -h, h); sarrayAddString(sa, bigbuf, L_COPY); if (cid->cmapdata85) { sarrayAddString(sa, (char *)" /Decode [0 255]", L_COPY); } else if (spp == 1) { if (bps == 1) /* miniswhite photometry */ sarrayAddString(sa, (char *)" /Decode [1 0]", L_COPY); else /* bps > 1 */ sarrayAddString(sa, (char *)" /Decode [0 1]", L_COPY); } else { /* spp == 3 */ sarrayAddString(sa, (char *)" /Decode [0 1 0 1 0 1]", L_COPY); } sarrayAddString(sa, (char *)" /DataSource Data", L_COPY); sarrayAddString(sa, (char *)" >> image", L_COPY); sarrayAddString(sa, (char *)" Data closefile", L_COPY); sarrayAddString(sa, (char *)" RawData flushfile", L_COPY); if (endpage == TRUE) sarrayAddString(sa, (char *)" showpage", L_COPY); sarrayAddString(sa, (char *)" restore", L_COPY); sarrayAddString(sa, (char *)"} exec", L_COPY); /* Insert the ascii85 gzipped data; this is now owned by sa */ sarrayAddString(sa, cid->data85, L_INSERT); /* Generate and return the output string */ outstr = sarrayToString(sa, 1); sarrayDestroy(&sa); cid->cmapdata85 = NULL; /* it has been transferred to sa and destroyed */ cid->data85 = NULL; /* it has been transferred to sa and destroyed */ return outstr; } /*! * l_generateFlateData() * * Input: fname * ascii85flag (0 for gzipped; 1 for ascii85-encoded gzipped) * Return: cid (flate compressed image data), or null on error * * Notes: * (1) The input image is converted to one of these 4 types: * - 1 bpp * - 8 bpp, no colormap * - 8 bpp, colormap * - 32 bpp rgb * (2) Set ascii85flag: * - 0 for binary data (not permitted in PostScript) * - 1 for ascii85 (5 for 4) encoded binary data */ L_COMP_DATA * l_generateFlateData(const char *fname, l_int32 ascii85flag) { L_COMP_DATA *cid; PIX *pixs; PROCNAME("l_generateFlateData"); if (!fname) return (L_COMP_DATA *)ERROR_PTR("fname not defined", procName, NULL); if ((pixs = pixRead(fname)) == NULL) return (L_COMP_DATA *)ERROR_PTR("pixs not made", procName, NULL); cid = pixGenerateFlateData(pixs, ascii85flag); pixDestroy(&pixs); return cid; } /*! * pixGenerateFlateData() * * Input: pixs * ascii85flag (0 for gzipped; 1 for ascii85-encoded gzipped) * Return: cid (flate compressed image data), or null on error */ L_COMP_DATA * pixGenerateFlateData(PIX *pixs, l_int32 ascii85flag) { l_uint8 *data = NULL; /* uncompressed raster data in required format */ l_uint8 *datacomp = NULL; /* gzipped raster data */ char *data85 = NULL; /* ascii85 encoded gzipped raster data */ l_uint8 *cmapdata = NULL; /* uncompressed colormap */ char *cmapdata85 = NULL; /* ascii85 encoded uncompressed colormap */ char *cmapdatahex = NULL; /* hex ascii uncompressed colormap */ l_int32 ncolors; /* in colormap; not used if cmapdata85 is null */ l_int32 bps; /* bits/sample: usually 8 */ l_int32 spp; /* samples/pixel: 1-grayscale/cmap); 3-rgb; 4-rgba */ l_int32 w, h, d, cmapflag; l_int32 ncmapbytes85 = 0; l_int32 nbytes85 = 0; size_t nbytes, nbytescomp; L_COMP_DATA *cid; PIX *pixt; PIXCMAP *cmap; PROCNAME("pixGenerateFlateData"); if (!pixs) return (L_COMP_DATA *)ERROR_PTR("pixs not defined", procName, NULL); /* Convert the image to one of these 4 types: * 1 bpp * 8 bpp, no colormap * 8 bpp, colormap * 32 bpp rgb */ pixGetDimensions(pixs, &w, &h, &d); cmap = pixGetColormap(pixs); cmapflag = (cmap) ? 1 : 0; if (d == 2 || d == 4 || d == 16) { pixt = pixConvertTo8(pixs, cmapflag); cmap = pixGetColormap(pixt); d = pixGetDepth(pixt); } else { pixt = pixClone(pixs); } spp = (d == 32) ? 3 : 1; bps = (d == 32) ? 8 : d; /* Extract and encode the colormap data as both ascii85 and hexascii */ ncolors = 0; if (cmap) { pixcmapSerializeToMemory(cmap, 3, &ncolors, &cmapdata); if (!cmapdata) return (L_COMP_DATA *)ERROR_PTR("cmapdata not made", procName, NULL); cmapdata85 = encodeAscii85(cmapdata, 3 * ncolors, &ncmapbytes85); cmapdatahex = pixcmapConvertToHex(cmapdata, ncolors); FREE(cmapdata); } /* Extract and compress the raster data */ pixGetRasterData(pixt, &data, &nbytes); pixDestroy(&pixt); datacomp = zlibCompress(data, nbytes, &nbytescomp); if (!datacomp) { if (cmapdata85) FREE(cmapdata85); if (cmapdatahex) FREE(cmapdatahex); return (L_COMP_DATA *)ERROR_PTR("datacomp not made", procName, NULL); } FREE(data); /* Optionally, encode the compressed data */ if (ascii85flag == 1) { data85 = encodeAscii85(datacomp, nbytescomp, &nbytes85); FREE(datacomp); if (!data85) { FREE(cmapdata85); return (L_COMP_DATA *)ERROR_PTR("data85 not made", procName, NULL); } else { data85[nbytes85 - 1] = '\0'; /* remove the newline */ } } cid = (L_COMP_DATA *)CALLOC(1, sizeof(L_COMP_DATA)); if (!cid) return (L_COMP_DATA *)ERROR_PTR("cid not made", procName, NULL); if (ascii85flag == 0) { cid->datacomp = datacomp; } else { /* ascii85 */ cid->data85 = data85; cid->nbytes85 = nbytes85; } cid->type = L_FLATE_ENCODE; cid->cmapdatahex = cmapdatahex; cid->cmapdata85 = cmapdata85; cid->nbytescomp = nbytescomp; cid->ncolors = ncolors; cid->w = w; cid->h = h; cid->bps = bps; cid->spp = spp; cid->res = pixGetXRes(pixs); cid->nbytes = nbytes; /* only for debugging */ return cid; } /*---------------------------------------------------------------------* * For compressed images in general * *---------------------------------------------------------------------*/ /*! * l_generateCIData() * * Input: fname * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for jpeg only; 0 for default (75)) * ascii85 (0 for binary; 1 for ascii85-encoded) * &cid ( compressed data) * Return: 0 if OK, 1 on error * * Notes: * (1) Set ascii85: * - 0 for binary data (not permitted in PostScript) * - 1 for ascii85 (5 for 4) encoded binary data */ l_int32 l_generateCIData(const char *fname, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { l_int32 format, d, bps, spp, iscmap; L_COMP_DATA *cid; PIX *pix; PROCNAME("l_generateCIDData"); if (!pcid) return ERROR_INT("&cid not defined", procName, 1); *pcid = NULL; if (!fname) return ERROR_INT("fname not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (ascii85 != 0 && ascii85 != 1) return ERROR_INT("invalid ascii85", procName, 1); /* Sanity check on requested encoding */ pixReadHeader(fname, &format, NULL, NULL, &bps, &spp, &iscmap); d = bps * spp; if (d == 24) d = 32; if (iscmap && type != L_FLATE_ENCODE) { L_WARNING("pixs has cmap; using flate encoding\n", procName); type = L_FLATE_ENCODE; } else if (d < 8 && type == L_JPEG_ENCODE) { L_WARNING("pixs has < 8 bpp; using flate encoding\n", procName); type = L_FLATE_ENCODE; } else if (d > 1 && type == L_G4_ENCODE) { L_WARNING("pixs has > 1 bpp; using flate encoding\n", procName); type = L_FLATE_ENCODE; } if (type == L_JPEG_ENCODE) { if (format == IFF_JFIF_JPEG) { /* do not transcode */ cid = l_generateJpegData(fname, ascii85); } else { if ((pix = pixRead(fname)) == NULL) return ERROR_INT("pix not returned", procName, 1); cid = pixGenerateJpegData(pix, ascii85, quality); pixDestroy(&pix); } if (!cid) return ERROR_INT("jpeg data not made", procName, 1); } else if (type == L_G4_ENCODE) { if ((cid = l_generateG4Data(fname, ascii85)) == NULL) return ERROR_INT("g4 data not made", procName, 1); } else if (type == L_FLATE_ENCODE) { if ((cid = l_generateFlateData(fname, ascii85)) == NULL) return ERROR_INT("flate data not made", procName, 1); } else { return ERROR_INT("invalid conversion type", procName, 1); } *pcid = cid; return 0; } /*! * pixGenerateCIData() * * Input: pixs (8 or 32 bpp, no colormap) * type (L_G4_ENCODE, L_JPEG_ENCODE, L_FLATE_ENCODE) * quality (used for jpeg only; 0 for default (75)) * ascii85 (0 for binary; 1 for ascii85-encoded) * &cid ( compressed data) * Return: 0 if OK, 1 on error * * Notes: * (1) Set ascii85: * - 0 for binary data (not permitted in PostScript) * - 1 for ascii85 (5 for 4) encoded binary data */ l_int32 pixGenerateCIData(PIX *pixs, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { l_int32 d; PIXCMAP *cmap; PROCNAME("pixGenerateCIDData"); if (!pcid) return ERROR_INT("&cid not defined", procName, 1); *pcid = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (type != L_G4_ENCODE && type != L_JPEG_ENCODE && type != L_FLATE_ENCODE) return ERROR_INT("invalid conversion type", procName, 1); if (ascii85 != 0 && ascii85 != 1) return ERROR_INT("invalid ascii85", procName, 1); /* Sanity check on requested encoding */ d = pixGetDepth(pixs); cmap = pixGetColormap(pixs); if (cmap && type != L_FLATE_ENCODE) { L_WARNING("pixs has cmap; using flate encoding\n", procName); type = L_FLATE_ENCODE; } else if (d < 8 && type == L_JPEG_ENCODE) { L_WARNING("pixs has < 8 bpp; using flate encoding\n", procName); type = L_FLATE_ENCODE; } else if (d > 1 && type == L_G4_ENCODE) { L_WARNING("pixs has > 1 bpp; using flate encoding\n", procName); type = L_FLATE_ENCODE; } if (type == L_JPEG_ENCODE) { if ((*pcid = pixGenerateJpegData(pixs, ascii85, quality)) == NULL) return ERROR_INT("jpeg data not made", procName, 1); } else if (type == L_G4_ENCODE) { if ((*pcid = pixGenerateG4Data(pixs, ascii85)) == NULL) return ERROR_INT("g4 data not made", procName, 1); } else if (type == L_FLATE_ENCODE) { if ((*pcid = pixGenerateFlateData(pixs, ascii85)) == NULL) return ERROR_INT("flate data not made", procName, 1); } else { return ERROR_INT("invalid conversion type", procName, 1); } return 0; } /*---------------------------------------------------------------------* * Write to memory * *---------------------------------------------------------------------*/ /*! * pixWriteMemPS() * * Input: &data ( data of tiff compressed image) * &size ( size of returned data) * pix * box () * res (can use 0 for default of 300 ppi) * scale (to prevent scaling, use either 1.0 or 0.0) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixWriteStringPS() for usage. * (2) This is just a wrapper for pixWriteStringPS(), which * writes uncompressed image data to memory. */ l_int32 pixWriteMemPS(l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { PROCNAME("pixWriteMemPS"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); if (!psize) return ERROR_INT("&size not defined", procName, 1 ); if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); *pdata = (l_uint8 *)pixWriteStringPS(pix, box, res, scale); *psize = strlen((char *)(*pdata)); return 0; } /*-------------------------------------------------------------* * Converting resolution * *-------------------------------------------------------------*/ /*! * getResLetterPage() * * Input: w (image width, pixels) * h (image height, pixels) * fillfract (fraction in linear dimension of full page, not * to be exceeded; use 0 for default) * Return: 0 if OK, 1 on error */ l_int32 getResLetterPage(l_int32 w, l_int32 h, l_float32 fillfract) { l_int32 resw, resh, res; if (fillfract == 0.0) fillfract = DEFAULT_FILL_FRACTION; resw = (l_int32)((w * 72.) / (LETTER_WIDTH * fillfract)); resh = (l_int32)((h * 72.) / (LETTER_HEIGHT * fillfract)); res = L_MAX(resw, resh); return res; } /*! * getResA4Page() * * Input: w (image width, pixels) * h (image height, pixels) * fillfract (fraction in linear dimension of full page, not * to be exceeded; use 0 for default) * Return: 0 if OK, 1 on error */ l_int32 getResA4Page(l_int32 w, l_int32 h, l_float32 fillfract) { l_int32 resw, resh, res; if (fillfract == 0.0) fillfract = DEFAULT_FILL_FRACTION; resw = (l_int32)((w * 72.) / (A4_WIDTH * fillfract)); resh = (l_int32)((h * 72.) / (A4_HEIGHT * fillfract)); res = L_MAX(resw, resh); return res; } /*-------------------------------------------------------------* * Utility for encoding and decoding data with ascii85 * *-------------------------------------------------------------*/ /*! * encodeAscii85() * * Input: inarray (input data) * insize (number of bytes in input array) * &outsize ( number of bytes in output char array) * Return: chara (with 64 characters + \n in each line) * * Notes: * (1) Ghostscript has a stack break if the last line of * data only has a '>', so we avoid the problem by * always putting '~>' on the last line. */ char * encodeAscii85(l_uint8 *inarray, l_int32 insize, l_int32 *poutsize) { char *chara; char *outbuf; l_int32 maxsize, i, index, outindex, linecount, nbout, eof; PROCNAME("encodeAscii85"); if (!inarray) return (char *)ERROR_PTR("inarray not defined", procName, NULL); /* Accumulate results in char array */ maxsize = (l_int32)(80. + (insize * 5. / 4.) * (1. + 2. / MAX_85_LINE_COUNT)); if ((chara = (char *)CALLOC(maxsize, sizeof(char))) == NULL) return (char *)ERROR_PTR("chara not made", procName, NULL); if ((outbuf = (char *)CALLOC(8, sizeof(char))) == NULL) return (char *)ERROR_PTR("outbuf not made", procName, NULL); linecount = 0; index = 0; outindex = 0; while (1) { eof = convertChunkToAscii85(inarray, insize, &index, outbuf, &nbout); for (i = 0; i < nbout; i++) { chara[outindex++] = outbuf[i]; linecount++; if (linecount >= MAX_85_LINE_COUNT) { chara[outindex++] = '\n'; linecount = 0; } } if (eof == TRUE) { if (linecount != 0) chara[outindex++] = '\n'; chara[outindex++] = '~'; chara[outindex++] = '>'; chara[outindex++] = '\n'; break; } } FREE(outbuf); *poutsize = outindex; return chara; } /*! * convertChunkToAscii85() * * Input: inarray (input data) * insize (number of bytes in input array) * &index (use and -- ptr) * outbuf (holds 8 ascii chars; we use no more than 7) * &nbsout ( number of bytes written to outbuf) * Return: boolean for eof (0 if more data, 1 if end of file) * * Notes: * (1) Attempts to read 4 bytes and write 5. * (2) Writes 1 byte if the value is 0. */ static l_int32 convertChunkToAscii85(l_uint8 *inarray, l_int32 insize, l_int32 *pindex, char *outbuf, l_int32 *pnbout) { l_uint8 inbyte; l_uint32 inword, val; l_int32 eof, index, nread, nbout, i; eof = FALSE; index = *pindex; nread = L_MIN(4, (insize - index)); if (insize == index + nread) eof = TRUE; *pindex += nread; /* save new index */ /* Read input data and save in l_uint32 */ inword = 0; for (i = 0; i < nread; i++) { inbyte = inarray[index + i]; inword += inbyte << (8 * (3 - i)); } #if 0 fprintf(stderr, "index = %d, nread = %d\n", index, nread); fprintf(stderr, "inword = %x\n", inword); fprintf(stderr, "eof = %d\n", eof); #endif /* Special case: output 1 byte only */ if (inword == 0) { outbuf[0] = 'z'; nbout = 1; } else { /* output nread + 1 bytes */ for (i = 4; i >= 4 - nread; i--) { val = inword / power85[i]; outbuf[4 - i] = (l_uint8)(val + '!'); inword -= val * power85[i]; } nbout = nread + 1; } *pnbout = nbout; return eof; } /*! * decodeAscii85() * * Input: inarray (ascii85 input data) * insize (number of bytes in input array) * &outsize ( number of bytes in output l_uint8 array) * Return: outarray (binary) * * Notes: * (1) We assume the data is properly encoded, so we do not check * for invalid characters or the final '>' character. * (2) We permit whitespace to be added to the encoding in an * arbitrary way. */ l_uint8 * decodeAscii85(char *ina, l_int32 insize, l_int32 *poutsize) { char inc; char *pin; l_uint8 val; l_uint8 *outa; l_int32 maxsize, ocount, bytecount, index; l_uint32 oword; PROCNAME("decodeAscii85"); if (!ina) return (l_uint8 *)ERROR_PTR("ina not defined", procName, NULL); /* Accumulate results in outa */ maxsize = (l_int32)(80. + (insize * 4. / 5.)); /* plenty big */ if ((outa = (l_uint8 *)CALLOC(maxsize, sizeof(l_uint8))) == NULL) return (l_uint8 *)ERROR_PTR("outa not made", procName, NULL); pin = ina; ocount = 0; /* byte index into outa */ oword = 0; for (index = 0, bytecount = 0; index < insize; index++, pin++) { inc = *pin; if (inc == ' ' || inc == '\t' || inc == '\n' || inc == '\f' || inc == '\r' || inc == '\v') /* ignore white space */ continue; val = inc - '!'; if (val < 85) { oword = oword * 85 + val; if (bytecount < 4) { bytecount++; } else { /* we have all 5 input chars for the oword */ outa[ocount] = (oword >> 24) & 0xff; outa[ocount + 1] = (oword >> 16) & 0xff; outa[ocount + 2] = (oword >> 8) & 0xff; outa[ocount + 3] = oword & 0xff; ocount += 4; bytecount = 0; oword = 0; } } else if (inc == 'z' && bytecount == 0) { outa[ocount] = 0; outa[ocount + 1] = 0; outa[ocount + 2] = 0; outa[ocount + 3] = 0; ocount += 4; } else if (inc == '~') { /* end of data */ fprintf(stderr, " %d extra bytes output\n", bytecount - 1); switch (bytecount) { case 0: /* normal eof */ case 1: /* error */ break; case 2: /* 1 extra byte */ oword = oword * (85 * 85 * 85) + 0xffffff; outa[ocount] = (oword >> 24) & 0xff; break; case 3: /* 2 extra bytes */ oword = oword * (85 * 85) + 0xffff; outa[ocount] = (oword >> 24) & 0xff; outa[ocount + 1] = (oword >> 16) & 0xff; break; case 4: /* 3 extra bytes */ oword = oword * 85 + 0xff; outa[ocount] = (oword >> 24) & 0xff; outa[ocount + 1] = (oword >> 16) & 0xff; outa[ocount + 2] = (oword >> 8) & 0xff; break; } if (bytecount > 1) ocount += (bytecount - 1); break; } } *poutsize = ocount; return outa; } /*-------------------------------------------------------------* * Setting flag for writing bounding box hint * *-------------------------------------------------------------*/ void l_psWriteBoundingBox(l_int32 flag) { var_PS_WRITE_BOUNDING_BOX = flag; } /* --------------------------------------------*/ #endif /* USE_PSIO */ /* --------------------------------------------*/ leptonica-1.70/src/arrayaccess.c0000644000175000017500000002212611707052573014752 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * arrayaccess.c * * Access within an array of 32-bit words * * l_int32 l_getDataBit() * void l_setDataBit() * void l_clearDataBit() * void l_setDataBitVal() * l_int32 l_getDataDibit() * void l_setDataDibit() * void l_clearDataDibit() * l_int32 l_getDataQbit() * void l_setDataQbit() * void l_clearDataQbit() * l_int32 l_getDataByte() * void l_setDataByte() * l_int32 l_getDataTwoBytes() * void l_setDataTwoBytes() * l_int32 l_getDataFourBytes() * void l_setDataFourBytes() * * Note that these all require 32-bit alignment, and hence an input * ptr to l_uint32. However, this is not enforced by the compiler. * Instead, we allow the use of a void* ptr, because the line ptrs * are an efficient way to get random access (see pixGetLinePtrs()). * It is then necessary to cast internally within each function * because ptr arithmetic requires knowing the size of the units * being referenced. */ #include "allheaders.h" /*----------------------------------------------------------------------* * Access within an array of 32-bit words * *----------------------------------------------------------------------*/ /*! * l_getDataBit() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: val of the nth (1-bit) pixel. */ l_int32 l_getDataBit(void *line, l_int32 n) { return (*((l_uint32 *)line + (n >> 5)) >> (31 - (n & 31))) & 1; } /*! * l_setDataBit() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: void * * Action: sets the pixel to 1 */ void l_setDataBit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 5)) |= (0x80000000 >> (n & 31)); } /*! * l_clearDataBit() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: void * * Action: sets the (1-bit) pixel to 0 */ void l_clearDataBit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 5)) &= ~(0x80000000 >> (n & 31)); } /*! * l_setDataBitVal() * * Input: line (ptr to beginning of data line) * n (pixel index) * val (val to be inserted: 0 or 1) * Return: void * * Notes: * (1) This is an accessor for a 1 bpp pix. * (2) It is actually a little slower than using: * if (val == 0) * l_ClearDataBit(line, n); * else * l_SetDataBit(line, n); */ void l_setDataBitVal(void *line, l_int32 n, l_int32 val) { l_uint32 *pword; pword = (l_uint32 *)line + (n >> 5); *pword &= ~(0x80000000 >> (n & 31)); /* clear */ *pword |= val << (31 - (n & 31)); /* set */ return; } /*! * l_getDataDibit() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: val of the nth (2-bit) pixel. */ l_int32 l_getDataDibit(void *line, l_int32 n) { return (*((l_uint32 *)line + (n >> 4)) >> (2 * (15 - (n & 15)))) & 3; } /*! * l_setDataDibit() * * Input: line (ptr to beginning of data line) * n (pixel index) * val (val to be inserted: 0 - 3) * Return: void */ void l_setDataDibit(void *line, l_int32 n, l_int32 val) { l_uint32 *pword; pword = (l_uint32 *)line + (n >> 4); *pword &= ~(0xc0000000 >> (2 * (n & 15))); /* clear */ *pword |= (val & 3) << (30 - 2 * (n & 15)); /* set */ return; } /*! * l_clearDataDibit() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: void * * Action: sets the (2-bit) pixel to 0 */ void l_clearDataDibit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 4)) &= ~(0xc0000000 >> (2 * (n & 15))); } /*! * l_getDataQbit() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: val of the nth (4-bit) pixel. */ l_int32 l_getDataQbit(void *line, l_int32 n) { return (*((l_uint32 *)line + (n >> 3)) >> (4 * (7 - (n & 7)))) & 0xf; } /*! * l_setDataQbit() * * Input: line (ptr to beginning of data line) * n (pixel index) * val (val to be inserted: 0 - 0xf) * Return: void */ void l_setDataQbit(void *line, l_int32 n, l_int32 val) { l_uint32 *pword; pword = (l_uint32 *)line + (n >> 3); *pword &= ~(0xf0000000 >> (4 * (n & 7))); /* clear */ *pword |= (val & 15) << (28 - 4 * (n & 7)); /* set */ return; } /*! * l_clearDataQbit() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: void * * Action: sets the (4-bit) pixel to 0 */ void l_clearDataQbit(void *line, l_int32 n) { *((l_uint32 *)line + (n >> 3)) &= ~(0xf0000000 >> (4 * (n & 7))); } /*! * l_getDataByte() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: value of the n-th (byte) pixel */ l_int32 l_getDataByte(void *line, l_int32 n) { #ifdef L_BIG_ENDIAN return *((l_uint8 *)line + n); #else /* L_LITTLE_ENDIAN */ return *(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3); #endif /* L_BIG_ENDIAN */ } /*! * l_setDataByte() * * Input: line (ptr to beginning of data line) * n (pixel index) * val (val to be inserted: 0 - 0xff) * Return: void */ void l_setDataByte(void *line, l_int32 n, l_int32 val) { #ifdef L_BIG_ENDIAN *((l_uint8 *)line + n) = val; #else /* L_LITTLE_ENDIAN */ *(l_uint8 *)((l_uintptr_t)((l_uint8 *)line + n) ^ 3) = val; #endif /* L_BIG_ENDIAN */ } /*! * l_getDataTwoBytes() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: value of the n-th (2-byte) pixel */ l_int32 l_getDataTwoBytes(void *line, l_int32 n) { #ifdef L_BIG_ENDIAN return *((l_uint16 *)line + n); #else /* L_LITTLE_ENDIAN */ return *(l_uint16 *)((l_uintptr_t)((l_uint16 *)line + n) ^ 2); #endif /* L_BIG_ENDIAN */ } /*! * l_setDataTwoBytes() * * Input: line (ptr to beginning of data line) * n (pixel index) * val (val to be inserted: 0 - 0xffff) * Return: void */ void l_setDataTwoBytes(void *line, l_int32 n, l_int32 val) { #ifdef L_BIG_ENDIAN *((l_uint16 *)line + n) = val; #else /* L_LITTLE_ENDIAN */ *(l_uint16 *)((l_uintptr_t)((l_uint16 *)line + n) ^ 2) = val; #endif /* L_BIG_ENDIAN */ } /*! * l_getDataFourBytes() * * Input: line (ptr to beginning of data line) * n (pixel index) * Return: value of the n-th (4-byte) pixel */ l_int32 l_getDataFourBytes(void *line, l_int32 n) { return *((l_uint32 *)line + n); } /*! * l_setDataFourBytes() * * Input: line (ptr to beginning of data line) * n (pixel index) * val (val to be inserted: 0 - 0xffffffff) * Return: void */ void l_setDataFourBytes(void *line, l_int32 n, l_int32 val) { *((l_uint32 *)line + n) = val; } leptonica-1.70/src/bmp.h0000644000175000017500000001020512270566071013227 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_BMP_H #define LEPTONICA_BMP_H /* * This file is here to describe the fields in the header of * the BMP file. These fields are not used directly in Leptonica. * The only thing we use are the sizes of these two headers. * Furthermore, because of potential namespace conflicts with * the typedefs and defined sizes, we have changed the names * to protect anyone who may also need to use the original definitions. * Thanks to J. D. Bryan for pointing out the potential problems when * developing on Win32 compatible systems. */ /*-------------------------------------------------------------* * BMP file header * *-------------------------------------------------------------*/ struct BMP_FileHeader { l_int16 bfType; /* file type; must be "BM" */ l_int16 bfSize; /* length of the file; sizeof(BMP_FileHeader) + sizeof(BMP_InfoHeader) + size of color table + size of DIB bits */ l_int16 bfFill1; /* remainder of the bfSize field */ l_int16 bfReserved1; /* don't care (set to 0)*/ l_int16 bfReserved2; /* don't care (set to 0)*/ l_int16 bfOffBits; /* offset from beginning of file */ l_int16 bfFill2; /* remainder of the bfOffBits field */ }; typedef struct BMP_FileHeader BMP_FH; #define BMP_FHBYTES sizeof(BMP_FH) /*-------------------------------------------------------------* * BMP info header * *-------------------------------------------------------------*/ struct BMP_InfoHeader { l_int32 biSize; /* size of the BMP_InfoHeader struct */ l_int32 biWidth; /* bitmap width in pixels */ l_int32 biHeight; /* bitmap height in pixels */ l_int16 biPlanes; /* number of bitmap planes */ l_int16 biBitCount; /* number of bits per pixel */ l_int32 biCompression; /* compression format (0 == uncompressed) */ l_int32 biSizeImage; /* size of image in bytes */ l_int32 biXPelsPerMeter; /* pixels per meter in x direction */ l_int32 biYPelsPerMeter; /* pixels per meter in y direction */ l_int32 biClrUsed; /* number of colors used */ l_int32 biClrImportant; /* number of important colors used */ }; typedef struct BMP_InfoHeader BMP_IH; #define BMP_IHBYTES sizeof(BMP_IH) #endif /* LEPTONICA_BMP_H */ leptonica-1.70/src/psio2stub.c0000664000175000017500000002724312226266565014420 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * psio2stub.c * * Stubs for psio2.c functions */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PSIO /* defined in environ.h */ /* --------------------------------------------*/ l_int32 pixWritePSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", "pixWritePSEmbed", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamPS(FILE *fp, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { return ERROR_INT("function not present", "pixWriteStreamPS", 1); } /* ----------------------------------------------------------------------*/ char * pixWriteStringPS(PIX *pixs, BOX *box, l_int32 res, l_float32 scale) { return (char *)ERROR_PTR("function not present", "pixWriteStringPS", NULL); } /* ----------------------------------------------------------------------*/ char * generateUncompressedPS(char *hexdata, l_int32 w, l_int32 h, l_int32 d, l_int32 psbpl, l_int32 bps, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 boxflag) { return (char *)ERROR_PTR("function not present", "generateUncompressedPS", NULL); } /* ----------------------------------------------------------------------*/ void getScaledParametersPS(BOX *box, l_int32 wpix, l_int32 hpix, l_int32 res, l_float32 scale, l_float32 *pxpt, l_float32 *pypt, l_float32 *pwpt, l_float32 *phpt) { L_ERROR("function not present", "getScaledParametersPS"); return; } /* ----------------------------------------------------------------------*/ void convertByteToHexAscii(l_uint8 byteval, char *pnib1, char *pnib2) { L_ERROR("function not present", "convertByteToHexAscii"); return; } /* ----------------------------------------------------------------------*/ l_int32 convertJpegToPSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", "convertJpegToPSEmbed", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertJpegToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { return ERROR_INT("function not present", "convertJpegToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertJpegToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { return ERROR_INT("function not present", "convertJpegToPSString", 1); } /* ----------------------------------------------------------------------*/ char * generateJpegPS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) { return (char *)ERROR_PTR("function not present", "generateJpegPS", NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * pixGenerateJpegData(PIX *pixs, l_int32 ascii85flag, l_int32 quality) { return (L_COMP_DATA *)ERROR_PTR("function not present", "pixGenerateJpegData", NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateJpegData(const char *fname, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", "l_generateJpegData", NULL); } /* ----------------------------------------------------------------------*/ void l_compdataDestroy(L_COMP_DATA **pcid) { L_ERROR("function not present", "l_compdataDestroy"); return; } /* ----------------------------------------------------------------------*/ l_int32 convertG4ToPSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", "convertG4ToPSEmbed", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertG4ToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) { return ERROR_INT("function not present", "convertG4ToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertG4ToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 maskflag, l_int32 endpage) { return ERROR_INT("function not present", "convertG4ToPSString", 1); } /* ----------------------------------------------------------------------*/ char * generateG4PS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 maskflag, l_int32 pageno, l_int32 endpage) { return (char *)ERROR_PTR("function not present", "generateG4PS", NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * pixGenerateG4Data(PIX *pixs, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", "pixGenerateG4Data", NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateG4Data(const char *fname, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", "l_generateG4Data", NULL); } /* ----------------------------------------------------------------------*/ l_int32 convertTiffMultipageToPS(const char *filein, const char *fileout, const char *tempfile, l_float32 fillfract) { return ERROR_INT("function not present", "convertTiffMultipageToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertFlateToPSEmbed(const char *filein, const char *fileout) { return ERROR_INT("function not present", "convertFlateToPSEmbed", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertFlateToPS(const char *filein, const char *fileout, const char *operation, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { return ERROR_INT("function not present", "convertFlateToPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertFlateToPSString(const char *filein, char **poutstr, l_int32 *pnbytes, l_int32 x, l_int32 y, l_int32 res, l_float32 scale, l_int32 pageno, l_int32 endpage) { return ERROR_INT("function not present", "convertFlateToPSString", 1); } /* ----------------------------------------------------------------------*/ char * generateFlatePS(const char *filein, L_COMP_DATA *cid, l_float32 xpt, l_float32 ypt, l_float32 wpt, l_float32 hpt, l_int32 pageno, l_int32 endpage) { return (char *)ERROR_PTR("function not present", "generateFlatePS", NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * l_generateFlateData(const char *fname, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", "l_generateFlateData", NULL); } /* ----------------------------------------------------------------------*/ L_COMP_DATA * pixGenerateFlateData(PIX *pixs, l_int32 ascii85flag) { return (L_COMP_DATA *)ERROR_PTR("function not present", "pixGenerateFlateData", NULL); } /* ----------------------------------------------------------------------*/ l_int32 l_generateCIData(const char *fname, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { return ERROR_INT("function not present", "l_generateCIData", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixGenerateCIData(PIX *pixs, l_int32 type, l_int32 quality, l_int32 ascii85, L_COMP_DATA **pcid) { return ERROR_INT("function not present", "pixGenerateCIData", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemPS(l_uint8 **pdata, size_t *psize, PIX *pix, BOX *box, l_int32 res, l_float32 scale) { return ERROR_INT("function not present", "pixWriteMemPS", 1); } /* ----------------------------------------------------------------------*/ l_int32 getResLetterPage(l_int32 w, l_int32 h, l_float32 fillfract) { return ERROR_INT("function not present", "getResLetterPage", 1); } /* ----------------------------------------------------------------------*/ l_int32 getResA4Page(l_int32 w, l_int32 h, l_float32 fillfract) { return ERROR_INT("function not present", "getResA4Page", 1); } /* ----------------------------------------------------------------------*/ char * encodeAscii85(l_uint8 *inarray, l_int32 insize, l_int32 *poutsize) { return (char *)ERROR_PTR("function not present", "encodeAscii85", NULL); } /* ----------------------------------------------------------------------*/ l_uint8 * decodeAscii85(char *ina, l_int32 insize, l_int32 *poutsize) { return (l_uint8 *)ERROR_PTR("function not present", "decodeAscii85", NULL); } /* ----------------------------------------------------------------------*/ void l_psWriteBoundingBox(l_int32 flag) { L_ERROR("function not present", "l_psWriteBoundingBox"); return; } /* --------------------------------------------*/ #endif /* !USE_PSIO */ /* --------------------------------------------*/ leptonica-1.70/src/Makefile.am0000644000175000017500000001126112274204140014325 0ustar dandanAM_CFLAGS = $(DEBUG_FLAGS) lib_LTLIBRARIES = liblept.la liblept_la_LIBADD = $(LIBM) $(ZLIB_LIBS) $(LIBPNG_LIBS) $(JPEG_LIBS) $(GIFLIB_LIBS) $(LIBTIFF_LIBS) $(LIBWEBP_LIBS) $(GDI_LIBS) liblept_la_LDFLAGS = -no-undefined -version-info 4:1:0 liblept_la_SOURCES = adaptmap.c affine.c \ affinecompose.c arrayaccess.c \ bardecode.c baseline.c bbuffer.c \ bilateral.c bilinear.c binarize.c \ binexpand.c binreduce.c \ blend.c bmf.c bmpio.c bmpiostub.c \ boxbasic.c boxfunc1.c boxfunc2.c boxfunc3.c boxfunc4.c \ bytearray.c ccbord.c ccthin.c classapp.c \ colorcontent.c coloring.c \ colormap.c colormorph.c \ colorquant1.c colorquant2.c \ colorseg.c colorspace.c \ compare.c conncomp.c convertfiles.c \ convolve.c convolvelow.c correlscore.c \ dewarp1.c dewarp2.c dewarp3.c dewarp4.c \ dnabasic.c dwacomb.2.c dwacomblow.2.c \ edge.c enhance.c \ fhmtauto.c fhmtgen.1.c fhmtgenlow.1.c \ finditalic.c flipdetect.c fliphmtgen.c \ fmorphauto.c fmorphgen.1.c fmorphgenlow.1.c \ fpix1.c fpix2.c gifio.c gifiostub.c \ gplot.c graphics.c graymorph.c graymorphlow.c \ grayquant.c grayquantlow.c heap.c jbclass.c \ jp2kio.c jp2kiostub.c jpegio.c jpegiostub.c \ kernel.c leptwin.c libversions.c list.c maze.c \ morph.c morphapp.c morphdwa.c morphseq.c \ numabasic.c numafunc1.c numafunc2.c \ pageseg.c paintcmap.c \ parseprotos.c partition.c \ pdfio.c pdfiostub.c \ pix1.c pix2.c pix3.c pix4.c pix5.c \ pixabasic.c pixacc.c pixafunc1.c pixafunc2.c \ pixalloc.c pixarith.c pixcomp.c pixconv.c \ pixlabel.c pixtiling.c pngio.c pngiostub.c \ pnmio.c pnmiostub.c projective.c \ psio1.c psio1stub.c psio2.c psio2stub.c \ ptabasic.c ptafunc1.c ptra.c \ quadtree.c queue.c rank.c \ readbarcode.c readfile.c \ recogbasic.c recogdid.c recogident.c \ recogtrain.c regutils.c \ rop.c ropiplow.c roplow.c \ rotate.c rotateam.c rotateamlow.c \ rotateorth.c rotateorthlow.c rotateshear.c \ runlength.c sarray.c \ scale.c scalelow.c \ seedfill.c seedfilllow.c \ sel1.c sel2.c selgen.c \ shear.c skew.c spixio.c \ stack.c sudoku.c textops.c \ tiffio.c tiffiostub.c \ utils.c viewfiles.c \ warper.c watershed.c \ webpio.c webpiostub.c \ writefile.c zlibmem.c zlibmemstub.c pkginclude_HEADERS = allheaders.h alltypes.h \ array.h arrayaccess.h bbuffer.h bilateral.h bmf.h bmp.h \ ccbord.h dewarp.h endianness.h environ.h \ gplot.h heap.h imageio.h jbclass.h \ leptwin.h list.h \ morph.h pix.h ptra.h queue.h readbarcode.h \ recog.h regutils.h stack.h sudoku.h watershed.h noinst_PROGRAMS = xtractprotos LDADD = liblept.la EXTRA_DIST = arrayaccess.h.vc \ endiantest.c endianness.h.dist \ hmttemplate1.txt hmttemplate2.txt \ leptonica-license.txt \ morphtemplate1.txt morphtemplate2.txt allheaders: $(liblept_la_SOURCES) @test -x xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -prestring=LEPT_DLL -protos=inline $(liblept_la_SOURCES) dist-hook: cp "$(distdir)"/endianness.h{.dist,} leptonica-1.70/src/gplot.c0000664000175000017500000006460412274211076013603 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * gplot.c * * Basic plotting functions * GPLOT *gplotCreate() * void gplotDestroy() * l_int32 gplotAddPlot() * l_int32 gplotSetScaling() * l_int32 gplotMakeOutput() * l_int32 gplotGenCommandFile() * l_int32 gplotGenDataFiles() * * Quick and dirty plots * l_int32 gplotSimple1() * l_int32 gplotSimple2() * l_int32 gplotSimpleN() * * Serialize for I/O * GPLOT *gplotRead() * l_int32 gplotWrite() * * * Utility for programmatic plotting using gnuplot 7.3.2 or later * Enabled: * - output to png (color), ps (mono), x11 (color), latex (mono) * - optional title for graph * - optional x and y axis labels * - multiple plots on one frame * - optional title for each plot on the frame * - optional log scaling on either or both axes * - choice of 5 plot styles for each plot * - choice of 2 plot modes, either using one input array * (Y vs index) or two input arrays (Y vs X). This * choice is made implicitly depending on the number of * input arrays. * * Usage: * gplotCreate() initializes for plotting * gplotAddPlot() for each plot on the frame * gplotMakeOutput() to generate all output files and run gnuplot * gplotDestroy() to clean up * * Example of use: * gplot = gplotCreate("tempskew", GPLOT_PNG, "Skew score vs angle", * "angle (deg)", "score"); * gplotAddPlot(gplot, natheta, nascore1, GPLOT_LINES, "plot 1"); * gplotAddPlot(gplot, natheta, nascore2, GPLOT_POINTS, "plot 2"); * gplotSetScaling(gplot, GPLOT_LOG_SCALE_Y); * gplotMakeOutput(gplot); * gplotDestroy(&gplot); * * Note for output to GPLOT_LATEX: * This creates latex output of the plot, named .tex. * It needs to be placed in a latex file .tex * that precedes the plot output with, at a minimum: * \documentclass{article} * \begin{document} * and ends with * \end{document} * You can then generate a dvi file .dvi using * latex .tex * and a PostScript file .ps from that using * dvips -o .ps .dvi */ #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 512; const char *gplotstylenames[] = {"with lines", "with points", "with impulses", "with linespoints", "with dots"}; const char *gplotfilestyles[] = {"LINES", "POINTS", "IMPULSES", "LINESPOINTS", "DOTS"}; const char *gplotfileoutputs[] = {"", "PNG", "PS", "EPS", "X11", "LATEX"}; /*-----------------------------------------------------------------* * Basic Plotting Functions * *-----------------------------------------------------------------*/ /*! * gplotCreate() * * Input: rootname (root for all output files) * outformat (GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_X11, * GPLOT_LATEX) * title ( overall title) * xlabel ( x axis label) * ylabel ( y axis label) * Return: gplot, or null on error * * Notes: * (1) This initializes the plot. * (2) The 'title', 'xlabel' and 'ylabel' strings can have spaces, * double quotes and backquotes, but not single quotes. */ GPLOT * gplotCreate(const char *rootname, l_int32 outformat, const char *title, const char *xlabel, const char *ylabel) { char *newroot; char buf[L_BUF_SIZE]; GPLOT *gplot; PROCNAME("gplotCreate"); if (!rootname) return (GPLOT *)ERROR_PTR("rootname not defined", procName, NULL); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_X11 && outformat != GPLOT_LATEX) return (GPLOT *)ERROR_PTR("outformat invalid", procName, NULL); if ((gplot = (GPLOT *)CALLOC(1, sizeof(GPLOT))) == NULL) return (GPLOT *)ERROR_PTR("gplot not made", procName, NULL); gplot->cmddata = sarrayCreate(0); gplot->datanames = sarrayCreate(0); gplot->plotdata = sarrayCreate(0); gplot->plottitles = sarrayCreate(0); gplot->plotstyles = numaCreate(0); /* Save title, labels, rootname, outformat, cmdname, outname */ newroot = genPathname(rootname, NULL); /* remove '/tmp' on windows */ gplot->rootname = newroot; gplot->outformat = outformat; snprintf(buf, L_BUF_SIZE, "%s.cmd", newroot); gplot->cmdname = stringNew(buf); if (outformat == GPLOT_PNG) snprintf(buf, L_BUF_SIZE, "%s.png", newroot); else if (outformat == GPLOT_PS) snprintf(buf, L_BUF_SIZE, "%s.ps", newroot); else if (outformat == GPLOT_EPS) snprintf(buf, L_BUF_SIZE, "%s.eps", newroot); else if (outformat == GPLOT_LATEX) snprintf(buf, L_BUF_SIZE, "%s.tex", newroot); else /* outformat == GPLOT_X11 */ buf[0] = '\0'; gplot->outname = stringNew(buf); if (title) gplot->title = stringNew(title); if (xlabel) gplot->xlabel = stringNew(xlabel); if (ylabel) gplot->ylabel = stringNew(ylabel); return gplot; } /*! * gplotDestroy() * * Input: &gplot () * Return: void */ void gplotDestroy(GPLOT **pgplot) { GPLOT *gplot; PROCNAME("gplotDestroy"); if (pgplot == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((gplot = *pgplot) == NULL) return; FREE(gplot->rootname); FREE(gplot->cmdname); sarrayDestroy(&gplot->cmddata); sarrayDestroy(&gplot->datanames); sarrayDestroy(&gplot->plotdata); sarrayDestroy(&gplot->plottitles); numaDestroy(&gplot->plotstyles); FREE(gplot->outname); if (gplot->title) FREE(gplot->title); if (gplot->xlabel) FREE(gplot->xlabel); if (gplot->ylabel) FREE(gplot->ylabel); FREE(gplot); *pgplot = NULL; return; } /*! * gplotAddPlot() * * Input: gplot * nax ( numa: set to null for Y_VS_I; * required for Y_VS_X) * nay (numa: required for both Y_VS_I and Y_VS_X) * plotstyle (GPLOT_LINES, GPLOT_POINTS, GPLOT_IMPULSES, * GPLOT_LINESPOINTS, GPLOT_DOTS) * plottitle ( title for individual plot) * Return: 0 if OK, 1 on error * * Notes: * (1) There are 2 options for (x,y) values: * o To plot an array vs the index, set nax = NULL. * o To plot one array vs another, use both nax and nay. * (2) If nax is defined, it must be the same size as nay. * (3) The 'plottitle' string can have spaces, double * quotes and backquotes, but not single quotes. */ l_int32 gplotAddPlot(GPLOT *gplot, NUMA *nax, NUMA *nay, l_int32 plotstyle, const char *plottitle) { char buf[L_BUF_SIZE]; char emptystring[] = ""; char *datastr, *title; l_int32 n, i; l_float32 valx, valy, startx, delx; SARRAY *sa; PROCNAME("gplotAddPlot"); if (!gplot) return ERROR_INT("gplot not defined", procName, 1); if (!nay) return ERROR_INT("nay not defined", procName, 1); if (plotstyle != GPLOT_LINES && plotstyle != GPLOT_POINTS && plotstyle != GPLOT_IMPULSES && plotstyle != GPLOT_LINESPOINTS && plotstyle != GPLOT_DOTS) return ERROR_INT("invalid plotstyle", procName, 1); n = numaGetCount(nay); numaGetParameters(nay, &startx, &delx); if (nax) { if (n != numaGetCount(nax)) return ERROR_INT("nax and nay sizes differ", procName, 1); } /* Save plotstyle and plottitle */ numaAddNumber(gplot->plotstyles, plotstyle); if (plottitle) { title = stringNew(plottitle); sarrayAddString(gplot->plottitles, title, L_INSERT); } else { sarrayAddString(gplot->plottitles, emptystring, L_COPY); } /* Generate and save data filename */ gplot->nplots++; snprintf(buf, L_BUF_SIZE, "%s.data.%d", gplot->rootname, gplot->nplots); sarrayAddString(gplot->datanames, buf, L_COPY); /* Generate data and save as a string */ sa = sarrayCreate(n); for (i = 0; i < n; i++) { if (nax) numaGetFValue(nax, i, &valx); else valx = startx + i * delx; numaGetFValue(nay, i, &valy); snprintf(buf, L_BUF_SIZE, "%f %f\n", valx, valy); sarrayAddString(sa, buf, L_COPY); } datastr = sarrayToString(sa, 0); sarrayAddString(gplot->plotdata, datastr, L_INSERT); sarrayDestroy(&sa); return 0; } /*! * gplotSetScaling() * * Input: gplot * scaling (GPLOT_LINEAR_SCALE, GPLOT_LOG_SCALE_X, * GPLOT_LOG_SCALE_Y, GPLOT_LOG_SCALE_X_Y) * Return: 0 if OK; 1 on error * * Notes: * (1) By default, the x and y axis scaling is linear. * (2) Call this function to set semi-log or log-log scaling. */ l_int32 gplotSetScaling(GPLOT *gplot, l_int32 scaling) { PROCNAME("gplotSetScaling"); if (!gplot) return ERROR_INT("gplot not defined", procName, 1); if (scaling != GPLOT_LINEAR_SCALE && scaling != GPLOT_LOG_SCALE_X && scaling != GPLOT_LOG_SCALE_Y && scaling != GPLOT_LOG_SCALE_X_Y) return ERROR_INT("invalid gplot scaling", procName, 1); gplot->scaling = scaling; return 0; } /*! * gplotMakeOutput() * * Input: gplot * Return: 0 if OK; 1 on error * * Notes: * (1) This uses gplot and the new arrays to add a plot * to the output, by writing a new data file and appending * the appropriate plot commands to the command file. * (2) The gnuplot program for windows is wgnuplot.exe. The * standard gp426win32 distribution does not have a X11 terminal. */ l_int32 gplotMakeOutput(GPLOT *gplot) { char buf[L_BUF_SIZE]; l_int32 ignore; PROCNAME("gplotMakeOutput"); if (!gplot) return ERROR_INT("gplot not defined", procName, 1); gplotGenCommandFile(gplot); gplotGenDataFiles(gplot); #ifndef _WIN32 if (gplot->outformat != GPLOT_X11) snprintf(buf, L_BUF_SIZE, "gnuplot %s", gplot->cmdname); else snprintf(buf, L_BUF_SIZE, "gnuplot -persist -geometry +10+10 %s &", gplot->cmdname); #else if (gplot->outformat != GPLOT_X11) snprintf(buf, L_BUF_SIZE, "wgnuplot %s", gplot->cmdname); else snprintf(buf, L_BUF_SIZE, "wgnuplot -persist %s", gplot->cmdname); #endif /* _WIN32 */ ignore = system(buf); return 0; } /*! * gplotGenCommandFile() * * Input: gplot * Return: 0 if OK, 1 on error */ l_int32 gplotGenCommandFile(GPLOT *gplot) { char buf[L_BUF_SIZE]; char *cmdstr, *plottitle, *dataname; l_int32 i, plotstyle, nplots; FILE *fp; PROCNAME("gplotGenCommandFile"); if (!gplot) return ERROR_INT("gplot not defined", procName, 1); /* Remove any previous command data */ sarrayClear(gplot->cmddata); /* Generate command data instructions */ if (gplot->title) { /* set title */ snprintf(buf, L_BUF_SIZE, "set title '%s'", gplot->title); sarrayAddString(gplot->cmddata, buf, L_COPY); } if (gplot->xlabel) { /* set xlabel */ snprintf(buf, L_BUF_SIZE, "set xlabel '%s'", gplot->xlabel); sarrayAddString(gplot->cmddata, buf, L_COPY); } if (gplot->ylabel) { /* set ylabel */ snprintf(buf, L_BUF_SIZE, "set ylabel '%s'", gplot->ylabel); sarrayAddString(gplot->cmddata, buf, L_COPY); } if (gplot->outformat == GPLOT_PNG) /* set terminal type and output */ snprintf(buf, L_BUF_SIZE, "set terminal png; set output '%s'", gplot->outname); else if (gplot->outformat == GPLOT_PS) snprintf(buf, L_BUF_SIZE, "set terminal postscript; set output '%s'", gplot->outname); else if (gplot->outformat == GPLOT_EPS) snprintf(buf, L_BUF_SIZE, "set terminal postscript eps; set output '%s'", gplot->outname); else if (gplot->outformat == GPLOT_LATEX) snprintf(buf, L_BUF_SIZE, "set terminal latex; set output '%s'", gplot->outname); else /* gplot->outformat == GPLOT_X11 */ #ifndef _WIN32 snprintf(buf, L_BUF_SIZE, "set terminal x11"); #else snprintf(buf, L_BUF_SIZE, "set terminal windows"); #endif /* _WIN32 */ sarrayAddString(gplot->cmddata, buf, L_COPY); if (gplot->scaling == GPLOT_LOG_SCALE_X || gplot->scaling == GPLOT_LOG_SCALE_X_Y) { snprintf(buf, L_BUF_SIZE, "set logscale x"); sarrayAddString(gplot->cmddata, buf, L_COPY); } if (gplot->scaling == GPLOT_LOG_SCALE_Y || gplot->scaling == GPLOT_LOG_SCALE_X_Y) { snprintf(buf, L_BUF_SIZE, "set logscale y"); sarrayAddString(gplot->cmddata, buf, L_COPY); } nplots = sarrayGetCount(gplot->datanames); for (i = 0; i < nplots; i++) { plottitle = sarrayGetString(gplot->plottitles, i, L_NOCOPY); dataname = sarrayGetString(gplot->datanames, i, L_NOCOPY); numaGetIValue(gplot->plotstyles, i, &plotstyle); if (nplots == 1) { snprintf(buf, L_BUF_SIZE, "plot '%s' title '%s' %s", dataname, plottitle, gplotstylenames[plotstyle]); } else { if (i == 0) snprintf(buf, L_BUF_SIZE, "plot '%s' title '%s' %s, \\", dataname, plottitle, gplotstylenames[plotstyle]); else if (i < nplots - 1) snprintf(buf, L_BUF_SIZE, " '%s' title '%s' %s, \\", dataname, plottitle, gplotstylenames[plotstyle]); else snprintf(buf, L_BUF_SIZE, " '%s' title '%s' %s", dataname, plottitle, gplotstylenames[plotstyle]); } sarrayAddString(gplot->cmddata, buf, L_COPY); } /* Write command data to file */ cmdstr = sarrayToString(gplot->cmddata, 1); if ((fp = fopenWriteStream(gplot->cmdname, "w")) == NULL) return ERROR_INT("cmd stream not opened", procName, 1); fwrite(cmdstr, 1, strlen(cmdstr), fp); fclose(fp); FREE(cmdstr); return 0; } /*! * gplotGenDataFiles() * * Input: gplot * Return: 0 if OK, 1 on error */ l_int32 gplotGenDataFiles(GPLOT *gplot) { char *plotdata, *dataname; l_int32 i, nplots; FILE *fp; PROCNAME("gplotGenDataFiles"); if (!gplot) return ERROR_INT("gplot not defined", procName, 1); nplots = sarrayGetCount(gplot->datanames); for (i = 0; i < nplots; i++) { plotdata = sarrayGetString(gplot->plotdata, i, L_NOCOPY); dataname = sarrayGetString(gplot->datanames, i, L_NOCOPY); if ((fp = fopenWriteStream(dataname, "w")) == NULL) return ERROR_INT("datafile stream not opened", procName, 1); fwrite(plotdata, 1, strlen(plotdata), fp); fclose(fp); } return 0; } /*-----------------------------------------------------------------* * Quick and Dirty Plots * *-----------------------------------------------------------------*/ /*! * gplotSimple1() * * Input: na (numa; plot Y_VS_I) * outformat (GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_X11, * GPLOT_LATEX) * outroot (root of output files) * title (, can be NULL) * Return: 0 if OK, 1 on error * * Notes: * (1) This gives a line plot of a numa, where the array value * is plotted vs the array index. The plot is generated * in the specified output format; the title is optional. * (2) When calling this function more than once, be sure the * outroot strings are different; otherwise, you will * overwrite the output files. */ l_int32 gplotSimple1(NUMA *na, l_int32 outformat, const char *outroot, const char *title) { GPLOT *gplot; PROCNAME("gplotSimple1"); if (!na) return ERROR_INT("na not defined", procName, 1); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_X11 && outformat != GPLOT_LATEX) return ERROR_INT("invalid outformat", procName, 1); if (!outroot) return ERROR_INT("outroot not specified", procName, 1); if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) return ERROR_INT("gplot not made", procName, 1); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, NULL); gplotMakeOutput(gplot); gplotDestroy(&gplot); return 0; } /*! * gplotSimple2() * * Input: na1 (numa; we plot Y_VS_I) * na2 (ditto) * outformat (GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_X11, * GPLOT_LATEX) * outroot (root of output files) * title () * Return: 0 if OK, 1 on error * * Notes: * (1) This gives a line plot of two numa, where the array values * are each plotted vs the array index. The plot is generated * in the specified output format; the title is optional. * (2) When calling this function more than once, be sure the * outroot strings are different; otherwise, you will * overwrite the output files. */ l_int32 gplotSimple2(NUMA *na1, NUMA *na2, l_int32 outformat, const char *outroot, const char *title) { GPLOT *gplot; PROCNAME("gplotSimple2"); if (!na1 || !na2) return ERROR_INT("na1 and na2 not both defined", procName, 1); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_X11 && outformat != GPLOT_LATEX) return ERROR_INT("invalid outformat", procName, 1); if (!outroot) return ERROR_INT("outroot not specified", procName, 1); if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) return ERROR_INT("gplot not made", procName, 1); gplotAddPlot(gplot, NULL, na1, GPLOT_LINES, NULL); gplotAddPlot(gplot, NULL, na2, GPLOT_LINES, NULL); gplotMakeOutput(gplot); gplotDestroy(&gplot); return 0; } /*! * gplotSimpleN() * * Input: naa (numaa; we plot Y_VS_I for each numa) * outformat (GPLOT_PNG, GPLOT_PS, GPLOT_EPS, GPLOT_X11, * GPLOT_LATEX) * outroot (root of output files) * title () * Return: 0 if OK, 1 on error * * Notes: * (1) This gives a line plot of all numas in a numaa (array of numa), * where the array values are each plotted vs the array index. * The plot is generated in the specified output format; * the title is optional. * (2) When calling this function more than once, be sure the * outroot strings are different; otherwise, you will * overwrite the output files. */ l_int32 gplotSimpleN(NUMAA *naa, l_int32 outformat, const char *outroot, const char *title) { l_int32 i, n; GPLOT *gplot; NUMA *na; PROCNAME("gplotSimpleN"); if (!naa) return ERROR_INT("naa not defined", procName, 1); if ((n = numaaGetCount(naa)) == 0) return ERROR_INT("no numa in array", procName, 1); if (outformat != GPLOT_PNG && outformat != GPLOT_PS && outformat != GPLOT_EPS && outformat != GPLOT_X11 && outformat != GPLOT_LATEX) return ERROR_INT("invalid outformat", procName, 1); if (!outroot) return ERROR_INT("outroot not specified", procName, 1); if ((gplot = gplotCreate(outroot, outformat, title, NULL, NULL)) == 0) return ERROR_INT("gplot not made", procName, 1); for (i = 0; i < n; i++) { na = numaaGetNuma(naa, i, L_CLONE); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, NULL); numaDestroy(&na); } gplotMakeOutput(gplot); gplotDestroy(&gplot); return 0; } /*-----------------------------------------------------------------* * Serialize for I/O * *-----------------------------------------------------------------*/ /*! * gplotRead() * * Input: filename * Return: gplot, or NULL on error */ GPLOT * gplotRead(const char *filename) { char buf[L_BUF_SIZE]; char *rootname, *title, *xlabel, *ylabel, *ignores; l_int32 outformat, ret, version, ignore; FILE *fp; GPLOT *gplot; PROCNAME("gplotRead"); if (!filename) return (GPLOT *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (GPLOT *)ERROR_PTR("stream not opened", procName, NULL); ret = fscanf(fp, "Gplot Version %d\n", &version); if (ret != 1) { fclose(fp); return (GPLOT *)ERROR_PTR("not a gplot file", procName, NULL); } if (version != GPLOT_VERSION_NUMBER) { fclose(fp); return (GPLOT *)ERROR_PTR("invalid gplot version", procName, NULL); } ignore = fscanf(fp, "Rootname: %s\n", buf); rootname = stringNew(buf); ignore = fscanf(fp, "Output format: %d\n", &outformat); ignores = fgets(buf, L_BUF_SIZE, fp); /* Title: ... */ title = stringNew(buf + 7); title[strlen(title) - 1] = '\0'; ignores = fgets(buf, L_BUF_SIZE, fp); /* X axis label: ... */ xlabel = stringNew(buf + 14); xlabel[strlen(xlabel) - 1] = '\0'; ignores = fgets(buf, L_BUF_SIZE, fp); /* Y axis label: ... */ ylabel = stringNew(buf + 14); ylabel[strlen(ylabel) - 1] = '\0'; if (!(gplot = gplotCreate(rootname, outformat, title, xlabel, ylabel))) { fclose(fp); return (GPLOT *)ERROR_PTR("gplot not made", procName, NULL); } FREE(rootname); FREE(title); FREE(xlabel); FREE(ylabel); sarrayDestroy(&gplot->cmddata); sarrayDestroy(&gplot->datanames); sarrayDestroy(&gplot->plotdata); sarrayDestroy(&gplot->plottitles); numaDestroy(&gplot->plotstyles); ignore = fscanf(fp, "Commandfile name: %s\n", buf); stringReplace(&gplot->cmdname, buf); ignore = fscanf(fp, "\nCommandfile data:"); gplot->cmddata = sarrayReadStream(fp); ignore = fscanf(fp, "\nDatafile names:"); gplot->datanames = sarrayReadStream(fp); ignore = fscanf(fp, "\nPlot data:"); gplot->plotdata = sarrayReadStream(fp); ignore = fscanf(fp, "\nPlot titles:"); gplot->plottitles = sarrayReadStream(fp); ignore = fscanf(fp, "\nPlot styles:"); gplot->plotstyles = numaReadStream(fp); ignore = fscanf(fp, "Number of plots: %d\n", &gplot->nplots); ignore = fscanf(fp, "Output file name: %s\n", buf); stringReplace(&gplot->outname, buf); ignore = fscanf(fp, "Axis scaling: %d\n", &gplot->scaling); fclose(fp); return gplot; } /*! * gplotWrite() * * Input: filename * gplot * Return: 0 if OK; 1 on error */ l_int32 gplotWrite(const char *filename, GPLOT *gplot) { FILE *fp; PROCNAME("gplotWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!gplot) return ERROR_INT("gplot not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); fprintf(fp, "Gplot Version %d\n", GPLOT_VERSION_NUMBER); fprintf(fp, "Rootname: %s\n", gplot->rootname); fprintf(fp, "Output format: %d\n", gplot->outformat); fprintf(fp, "Title: %s\n", gplot->title); fprintf(fp, "X axis label: %s\n", gplot->xlabel); fprintf(fp, "Y axis label: %s\n", gplot->ylabel); fprintf(fp, "Commandfile name: %s\n", gplot->cmdname); fprintf(fp, "\nCommandfile data:"); sarrayWriteStream(fp, gplot->cmddata); fprintf(fp, "\nDatafile names:"); sarrayWriteStream(fp, gplot->datanames); fprintf(fp, "\nPlot data:"); sarrayWriteStream(fp, gplot->plotdata); fprintf(fp, "\nPlot titles:"); sarrayWriteStream(fp, gplot->plottitles); fprintf(fp, "\nPlot styles:"); numaWriteStream(fp, gplot->plotstyles); fprintf(fp, "Number of plots: %d\n", gplot->nplots); fprintf(fp, "Output file name: %s\n", gplot->outname); fprintf(fp, "Axis scaling: %d\n", gplot->scaling); fclose(fp); return 0; } leptonica-1.70/src/tiffiostub.c0000644000175000017500000001560711707052573014636 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * tiffiostub.c * * Stubs for tiffio.c functions */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if !HAVE_LIBTIFF /* defined in environ.h */ /* --------------------------------------------*/ PIX * pixReadTiff(const char *filename, l_int32 n) { return (PIX * )ERROR_PTR("function not present", "pixReadTiff", NULL); } /* ----------------------------------------------------------------------*/ PIX * pixReadStreamTiff(FILE *fp, l_int32 n) { return (PIX * )ERROR_PTR("function not present", "pixReadStreamTiff", NULL); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteTiff(const char *filename, PIX *pix, l_int32 comptype, const char *modestring) { return ERROR_INT("function not present", "pixWriteTiff", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteTiffCustom(const char *filename, PIX *pix, l_int32 comptype, const char *modestring, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { return ERROR_INT("function not present", "pixWriteTiffCustom", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamTiff(FILE *fp, PIX *pix, l_int32 comptype) { return ERROR_INT("function not present", "pixWriteStreamTiff", 1); } /* ----------------------------------------------------------------------*/ PIXA * pixaReadMultipageTiff(const char *filename) { return (PIXA * )ERROR_PTR("function not present", "pixaReadMultipageTiff", NULL); } /* ----------------------------------------------------------------------*/ l_int32 writeMultipageTiff(const char *dirin, const char *substr, const char *fileout) { return ERROR_INT("function not present", "writeMultipageTiff", 1); } /* ----------------------------------------------------------------------*/ l_int32 writeMultipageTiffSA(SARRAY *sa, const char *fileout) { return ERROR_INT("function not present", "writeMultipageTiffSA", 1); } /* ----------------------------------------------------------------------*/ l_int32 fprintTiffInfo(FILE *fpout, const char *tiffile) { return ERROR_INT("function not present", "fprintTiffInfo", 1); } /* ----------------------------------------------------------------------*/ l_int32 tiffGetCount(FILE *fp, l_int32 *pn) { return ERROR_INT("function not present", "tiffGetCount", 1); } /* ----------------------------------------------------------------------*/ l_int32 getTiffResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { return ERROR_INT("function not present", "getTiffResolution", 1); } /* ----------------------------------------------------------------------*/ l_int32 readHeaderTiff(const char *filename, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { return ERROR_INT("function not present", "readHeaderTiff", 1); } /* ----------------------------------------------------------------------*/ l_int32 freadHeaderTiff(FILE *fp, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { return ERROR_INT("function not present", "freadHeaderTiff", 1); } /* ----------------------------------------------------------------------*/ l_int32 readHeaderMemTiff(const l_uint8 *cdata, size_t size, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { return ERROR_INT("function not present", "readHeaderMemTiff", 1); } /* ----------------------------------------------------------------------*/ l_int32 findTiffCompression(FILE *fp, l_int32 *pcomptype) { return ERROR_INT("function not present", "findTiffCompression", 1); } /* ----------------------------------------------------------------------*/ l_int32 extractG4DataFromFile(const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pminisblack) { return ERROR_INT("function not present", "extractG4DataFromFile", 1); } /* ----------------------------------------------------------------------*/ PIX * pixReadMemTiff(const l_uint8 *cdata, size_t size, l_int32 n) { return (PIX *)ERROR_PTR("function not present", "pixReadMemTiff", NULL); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemTiff(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype) { return ERROR_INT("function not present", "pixWriteMemTiff", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteMemTiffCustom(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { return ERROR_INT("function not present", "pixWriteMemTiffCustom", 1); } /* --------------------------------------------*/ #endif /* !HAVE_LIBTIFF */ /* --------------------------------------------*/ leptonica-1.70/src/endianness.h.dist0000600000175000017500000000016611432324706015533 0ustar dandan#if !defined (L_BIG_ENDIAN) && !defined (L_LITTLE_ENDIAN) # define L_LITTLE_ENDIAN /* # define L_BIG_ENDIAN */ #endif leptonica-1.70/src/bbuffer.c0000644000175000017500000004120512244215530014053 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bbuffer.c * * Create/Destroy BBuffer * BBUFFER *bbufferCreate() * void *bbufferDestroy() * l_uint8 *bbufferDestroyAndSaveData() * * Operations to read data TO a BBuffer * l_int32 bbufferRead() * l_int32 bbufferReadStream() * static l_int32 bbufferExtendArray() * * Operations to write data FROM a BBuffer * l_int32 bbufferWrite() * l_int32 bbufferWriteStream() * * Accessors * l_int32 bbufferBytesToWrite() * * Read from stdin to memory * l_int32 bbufferReadStdin() * * * The bbuffer is an implementation of a byte queue. * The bbuffer holds a byte array from which bytes are * processed in a first-in/first-out fashion. As with * any queue, bbuffer maintains two "pointers," one to the * tail of the queue (where you read new bytes onto it) * and one to the head of the queue (where you start from * when writing bytes out of it. * * The queue can be visualized: * * * byte 0 byte (nalloc - 1) * | | * -------------------------------------------------- * H T * [ aw ][ bytes currently on queue ][ anr ] * * ---: all allocated data in bbuffer * H: queue head (ptr to next byte to be written out) * T: queue tail (ptr to first byte to be written to) * aw: already written from queue * anr: allocated but not yet read to * * The purpose of bbuffer is to allow you to safely read * bytes in, and to sequentially write them out as well. * In the process of writing bytes out, you don't actually * remove the bytes in the array; you just move the pointer * (nwritten) which points to the head of the queue. In * the process of reading bytes in, you sometimes need to * expand the array size. If a read is performed after a * write, so that the head of the queue is not at the * beginning of the array, the bytes already written are * first removed by copying the others over them; then the * new bytes are read onto the tail of the queue. * * Note that the meaning of "read into" and "write from" * the bbuffer is OPPOSITE to that for a stream, where * you read "from" a stream and write "into" a stream. * As a mnemonic for remembering the direction: * - to read bytes from a stream into the bbuffer, * you call fread on the stream * - to write bytes from the bbuffer into a stream, * you call fwrite on the stream * * See zlibmem.c for an example use of bbuffer, where we * compress and decompress an array of bytes in memory. * * We can also use the bbuffer trivially to read from stdin * into memory; e.g., to capture bytes piped from the stdout * of another program. This is equivalent to repeatedly * calling bbufferReadStream() until the input queue is empty. */ #include #include "allheaders.h" static const l_int32 INITIAL_BUFFER_ARRAYSIZE = 1024; /* n'importe quoi */ /* Static function */ static l_int32 bbufferExtendArray(BBUFFER *bb, l_int32 nbytes); /*--------------------------------------------------------------------------* * BBuffer create/destroy * *--------------------------------------------------------------------------*/ /*! * bbufferCreate() * * Input: buffer address in memory () * size of byte array to be alloc'd (0 for default) * Return: bbuffer, or null on error * * Notes: * (1) If a buffer address is given, you should read all the data in. * (2) Allocates a bbuffer with associated byte array of * the given size. If a buffer address is given, * it then reads the number of bytes into the byte array. */ BBUFFER * bbufferCreate(l_uint8 *indata, l_int32 nalloc) { BBUFFER *bb; PROCNAME("bbufferCreate"); if (nalloc <= 0) nalloc = INITIAL_BUFFER_ARRAYSIZE; if ((bb = (BBUFFER *)CALLOC(1, sizeof(BBUFFER))) == NULL) return (BBUFFER *)ERROR_PTR("bb not made", procName, NULL); if ((bb->array = (l_uint8 *)CALLOC(nalloc, sizeof(l_uint8))) == NULL) return (BBUFFER *)ERROR_PTR("byte array not made", procName, NULL); bb->nalloc = nalloc; bb->nwritten = 0; if (indata) { memcpy((l_uint8 *)bb->array, indata, nalloc); bb->n = nalloc; } else { bb->n = 0; } return bb; } /*! * bbufferDestroy() * * Input: &bbuffer () * Return: void * * Notes: * (1) Destroys the byte array in the bbuffer and then the bbuffer; * then nulls the contents of the input ptr. */ void bbufferDestroy(BBUFFER **pbb) { BBUFFER *bb; PROCNAME("bbufferDestroy"); if (pbb == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((bb = *pbb) == NULL) return; if (bb->array) FREE(bb->array); FREE(bb); *pbb = NULL; return; } /*! * bbufferDestroyAndSaveData() * * Input: &bbuffer () * &nbytes ( number of bytes saved in array) * Return: barray (newly allocated array of data) * * Notes: * (1) Copies data to newly allocated array; then destroys the bbuffer. */ l_uint8 * bbufferDestroyAndSaveData(BBUFFER **pbb, size_t *pnbytes) { l_uint8 *array; size_t nbytes; BBUFFER *bb; PROCNAME("bbufferDestroyAndSaveData"); if (pbb == NULL) { L_WARNING("ptr address is NULL\n", procName); return NULL; } if (pnbytes == NULL) { L_WARNING("&nbytes is NULL\n", procName); bbufferDestroy(pbb); return NULL; } if ((bb = *pbb) == NULL) return NULL; /* write all unwritten bytes out to a new array */ nbytes = bb->n - bb->nwritten; *pnbytes = nbytes; if ((array = (l_uint8 *)CALLOC(nbytes, sizeof(l_uint8))) == NULL) { L_WARNING("calloc failure for array\n", procName); return NULL; } memcpy((void *)array, (void *)(bb->array + bb->nwritten), nbytes); bbufferDestroy(pbb); return array; } /*--------------------------------------------------------------------------* * Operations to read data INTO a BBuffer * *--------------------------------------------------------------------------*/ /*! * bbufferRead() * * Input: bbuffer * src (source memory buffer from which bytes are read) * nbytes (bytes to be read) * Return: 0 if OK, 1 on error * * Notes: * (1) For a read after write, first remove the written * bytes by shifting the unwritten bytes in the array, * then check if there is enough room to add the new bytes. * If not, realloc with bbufferExpandArray(), resulting * in a second writing of the unwritten bytes. While less * efficient, this is simpler than making a special case * of reallocNew(). */ l_int32 bbufferRead(BBUFFER *bb, l_uint8 *src, l_int32 nbytes) { l_int32 navail, nadd, nwritten; PROCNAME("bbufferRead"); if (!bb) return ERROR_INT("bb not defined", procName, 1); if (!src) return ERROR_INT("src not defined", procName, 1); if (nbytes == 0) return ERROR_INT("no bytes to read", procName, 1); if ((nwritten = bb->nwritten)) { /* move the unwritten bytes over */ memmove((l_uint8 *)bb->array, (l_uint8 *)(bb->array + nwritten), bb->n - nwritten); bb->nwritten = 0; bb->n -= nwritten; } /* If necessary, expand the allocated array. Do so by * by at least a factor of two. */ navail = bb->nalloc - bb->n; if (nbytes > navail) { nadd = L_MAX(bb->nalloc, nbytes); bbufferExtendArray(bb, nadd); } /* Read in the new bytes */ memcpy((l_uint8 *)(bb->array + bb->n), src, nbytes); bb->n += nbytes; return 0; } /*! * bbufferReadStream() * * Input: bbuffer * fp (source stream from which bytes are read) * nbytes (bytes to be read) * Return: 0 if OK, 1 on error */ l_int32 bbufferReadStream(BBUFFER *bb, FILE *fp, l_int32 nbytes) { l_int32 navail, nadd, nread, nwritten; PROCNAME("bbufferReadStream"); if (!bb) return ERROR_INT("bb not defined", procName, 1); if (!fp) return ERROR_INT("fp not defined", procName, 1); if (nbytes == 0) return ERROR_INT("no bytes to read", procName, 1); if ((nwritten = bb->nwritten)) { /* move any unwritten bytes over */ memmove((l_uint8 *)bb->array, (l_uint8 *)(bb->array + nwritten), bb->n - nwritten); bb->nwritten = 0; bb->n -= nwritten; } /* If necessary, expand the allocated array. Do so by * by at least a factor of two. */ navail = bb->nalloc - bb->n; if (nbytes > navail) { nadd = L_MAX(bb->nalloc, nbytes); bbufferExtendArray(bb, nadd); } /* Read in the new bytes */ nread = fread((void *)(bb->array + bb->n), 1, nbytes, fp); bb->n += nread; return 0; } /*! * bbufferExtendArray() * * Input: bbuffer * nbytes (number of bytes to extend array size) * Return: 0 if OK, 1 on error * * Notes: * (1) reallocNew() copies all bb->nalloc bytes, even though * only bb->n are data. */ static l_int32 bbufferExtendArray(BBUFFER *bb, l_int32 nbytes) { PROCNAME("bbufferExtendArray"); if (!bb) return ERROR_INT("bb not defined", procName, 1); if ((bb->array = (l_uint8 *)reallocNew((void **)&bb->array, bb->nalloc, bb->nalloc + nbytes)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); bb->nalloc += nbytes; return 0; } /*--------------------------------------------------------------------------* * Operations to write data FROM a BBuffer * *--------------------------------------------------------------------------*/ /*! * bbufferWrite() * * Input: bbuffer * dest (dest memory buffer to which bytes are written) * nbytes (bytes requested to be written) * &nout ( bytes actually written) * Return: 0 if OK, 1 on error */ l_int32 bbufferWrite(BBUFFER *bb, l_uint8 *dest, size_t nbytes, size_t *pnout) { l_int32 nleft, nout; PROCNAME("bbufferWrite"); if (!bb) return ERROR_INT("bb not defined", procName, 1); if (!dest) return ERROR_INT("dest not defined", procName, 1); if (nbytes <= 0) return ERROR_INT("no bytes requested to write", procName, 1); if (!pnout) return ERROR_INT("&nout not defined", procName, 1); nleft = bb->n - bb->nwritten; nout = L_MIN(nleft, nbytes); *pnout = nout; if (nleft == 0) { /* nothing to write; reinitialize the buffer */ bb->n = 0; bb->nwritten = 0; return 0; } /* nout > 0; transfer the data out */ memcpy(dest, (l_uint8 *)(bb->array + bb->nwritten), nout); bb->nwritten += nout; /* If all written; "empty" the buffer */ if (nout == nleft) { bb->n = 0; bb->nwritten = 0; } return 0; } /*! * bbufferWriteStream() * * Input: bbuffer * fp (dest stream to which bytes are written) * nbytes (bytes requested to be written) * &nout ( bytes actually written) * Return: 0 if OK, 1 on error */ l_int32 bbufferWriteStream(BBUFFER *bb, FILE *fp, size_t nbytes, size_t *pnout) { l_int32 nleft, nout; PROCNAME("bbufferWriteStream"); if (!bb) return ERROR_INT("bb not defined", procName, 1); if (!fp) return ERROR_INT("output stream not defined", procName, 1); if (nbytes <= 0) return ERROR_INT("no bytes requested to write", procName, 1); if (!pnout) return ERROR_INT("&nout not defined", procName, 1); nleft = bb->n - bb->nwritten; nout = L_MIN(nleft, nbytes); *pnout = nout; if (nleft == 0) { /* nothing to write; reinitialize the buffer */ bb->n = 0; bb->nwritten = 0; return 0; } /* nout > 0; transfer the data out */ fwrite((void *)(bb->array + bb->nwritten), 1, nout, fp); bb->nwritten += nout; /* If all written; "empty" the buffer */ if (nout == nleft) { bb->n = 0; bb->nwritten = 0; } return 0; } /*--------------------------------------------------------------------------* * Accessors * *--------------------------------------------------------------------------*/ /*! * bbufferBytesToWrite() * * Input: bbuffer * &nbytes () * Return: 0 if OK; 1 on error */ l_int32 bbufferBytesToWrite(BBUFFER *bb, size_t *pnbytes) { PROCNAME("bbufferBytesToWrite"); if (!bb) return ERROR_INT("bb not defined", procName, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = bb->n - bb->nwritten; return 0; } /*--------------------------------------------------------------------------* * Read from stdin to memory * *--------------------------------------------------------------------------*/ /*! * bbufferReadStdin() * * Input: &data ( binary data read in) * &nbytes () * Return: 0 if OK; 1 on error * * Notes: * (1) This can be used to capture data piped in from stdin. * For example, you can read an image from stdin into memory * using shell redirection, with one of these: * cat | readprog * readprog < * where readprog is: * bbufferReadStdin(&data, &nbytes); // l_uint8*, size_t * Pix *pix = pixReadMem(data, nbytes); */ l_int32 bbufferReadStdin(l_uint8 **pdata, size_t *pnbytes) { l_int32 navail, nadd, nread; BBUFFER *bb; PROCNAME("bbufferReadStdin"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); bb = bbufferCreate(NULL, 4096); while (1) { navail = bb->nalloc - bb->n; if (navail < 4096) { nadd = L_MAX(bb->nalloc, 4096); bbufferExtendArray(bb, nadd); } nread = fread((void *)(bb->array + bb->n), 1, 4096, stdin); bb->n += nread; if (nread != 4096) break; } *pdata = bb->array; *pnbytes = bb->n; bb->array = NULL; bbufferDestroy(&bb); return 0; } leptonica-1.70/src/zlibmemstub.c0000644000175000017500000000444011707052573015006 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * zlibmemstub.c * * Stubs for zlibmem.c functions */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if !HAVE_LIBZ /* defined in environ.h */ /* --------------------------------------------*/ l_uint8 * zlibCompress(l_uint8 *datain, size_t nin, size_t *pnout) { return (l_uint8 *)ERROR_PTR("function not present", "zlibCompress", NULL); } /* ----------------------------------------------------------------------*/ l_uint8 * zlibUncompress(l_uint8 *datain, size_t nin, size_t *pnout) { return (l_uint8 *)ERROR_PTR("function not present", "zlibUncompress", NULL); } /* --------------------------------------------*/ #endif /* !HAVE_LIBZ */ /* --------------------------------------------*/ leptonica-1.70/src/bmpio.c0000644000175000017500000005642712244745222013570 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bmpio.c * * Read bmp from file * PIX *pixReadStreamBmp() * * Write bmp to file * l_int32 pixWriteStreamBmp() * * Read/write to memory * PIX *pixReadMemBmp() * l_int32 pixWriteMemBmp() * * On systems like windows without fmemopen() and open_memstream(), * we write data to a temp file and read it back for operations * between pix and compressed-data, such as pixReadMemPng() and * pixWriteMemPng(). */ #include #include "allheaders.h" #include "bmp.h" /* --------------------------------------------*/ #if USE_BMPIO /* defined in environ.h */ /* --------------------------------------------*/ RGBA_QUAD bwmap[2] = { {255,255,255,0}, {0,0,0,0} }; /* Colormap size limit */ static const l_int32 L_MAX_ALLOWED_NUM_COLORS = 256; #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*! * pixReadStreamBmp() * * Input: stream opened for read * Return: pix, or null on error * * Notes: * (1) Here are references on the bmp file format: * http://en.wikipedia.org/wiki/BMP_file_format * http://www.fortunecity.com/skyscraper/windows/364/bmpffrmt.html */ PIX * pixReadStreamBmp(FILE *fp) { l_uint16 sval; l_uint32 ival; l_int16 bfType, bfSize, bfFill1, bfReserved1, bfReserved2; l_int16 offset, bfFill2, biPlanes, depth, d; l_int32 biSize, width, height, xres, yres, compression; l_int32 imagebytes, biClrUsed, biClrImportant; l_uint8 *colormapBuf; l_int32 colormapEntries; l_int32 fileBpl, extrabytes; l_int32 pixWpl, pixBpl; l_int32 i, j, k; l_uint8 pel[4]; l_uint8 *data; l_uint32 *line, *pword; PIX *pix, *pixt; PIXCMAP *cmap; PROCNAME("pixReadStreamBmp"); if (!fp) return (PIX *)ERROR_PTR("fp not defined", procName, NULL); /* Read bitmap file header */ if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 1 not read", procName, NULL); bfType = convertOnBigEnd16(sval); if (bfType != BMP_ID) return (PIX *)ERROR_PTR("not bmf format", procName, NULL); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 2 not read", procName, NULL); bfSize = convertOnBigEnd16(sval); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 3 not read", procName, NULL); bfFill1 = convertOnBigEnd16(sval); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 4 not read", procName, NULL); bfReserved1 = convertOnBigEnd16(sval); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 5 not read", procName, NULL); bfReserved2 = convertOnBigEnd16(sval); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 6 not read", procName, NULL); offset = convertOnBigEnd16(sval); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 7 not read", procName, NULL); bfFill2 = convertOnBigEnd16(sval); /* Read bitmap info header */ if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 8 not read", procName, NULL); biSize = convertOnBigEnd32(ival); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 9 not read", procName, NULL); width = convertOnBigEnd32(ival); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 10 not read", procName, NULL); height = convertOnBigEnd32(ival); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 11 not read", procName, NULL); biPlanes = convertOnBigEnd16(sval); if (fread((char *)&sval, 2, 1, fp) != 1) return (PIX *)ERROR_PTR("item 12 not read", procName, NULL); depth = convertOnBigEnd16(sval); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 13 not read", procName, NULL); compression = convertOnBigEnd32(ival); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 14 not read", procName, NULL); imagebytes = convertOnBigEnd32(ival); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 15 not read", procName, NULL); xres = convertOnBigEnd32(ival); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 16 not read", procName, NULL); yres = convertOnBigEnd32(ival); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 17 not read", procName, NULL); biClrUsed = convertOnBigEnd32(ival); if (fread((char *)&ival, 4, 1, fp) != 1) return (PIX *)ERROR_PTR("item 18 not read", procName, NULL); biClrImportant = convertOnBigEnd32(ival); if (compression != 0) return (PIX *)ERROR_PTR("cannot read compressed BMP files", procName, NULL); /* A little sanity checking. It would be nice to check * if the number of bytes in the file equals the offset to * the data plus the imagedata, but this won't work when * reading from memory, because fmemopen() doesn't implement * ftell(). So we can't do that check. The imagebytes for * uncompressed images is either 0 or the size of the file data. * (The fact that it can be 0 is perhaps some legacy glitch). */ if (width < 1) return (PIX *)ERROR_PTR("width < 1", procName, NULL); if (height < 1) return (PIX *)ERROR_PTR("height < 1", procName, NULL); if (depth != 1 && depth != 2 && depth != 4 && depth != 8 && depth != 16 && depth != 24 && depth != 32) return (PIX *)ERROR_PTR("depth not in {1, 2, 4, 8, 16, 24, 32}", procName,NULL); fileBpl = 4 * ((width * depth + 31)/32); if (imagebytes != 0 && imagebytes != fileBpl * height) return (PIX *)ERROR_PTR("invalid imagebytes", procName, NULL); if (offset < BMP_FHBYTES + BMP_IHBYTES) return (PIX *)ERROR_PTR("invalid offset: too small", procName, NULL); if (offset > BMP_FHBYTES + BMP_IHBYTES + 4 * 256) return (PIX *)ERROR_PTR("invalid offset: too large", procName, NULL); /* Handle the colormap */ colormapEntries = (offset - BMP_FHBYTES - BMP_IHBYTES) / sizeof(RGBA_QUAD); colormapBuf = NULL; if (colormapEntries > L_MAX_ALLOWED_NUM_COLORS) return (PIX *)ERROR_PTR("colormap too large", procName,NULL); if (colormapEntries > 0) { if ((colormapBuf = (l_uint8 *)CALLOC(colormapEntries, sizeof(RGBA_QUAD))) == NULL) return (PIX *)ERROR_PTR("colormapBuf alloc fail", procName, NULL ); /* Read colormap */ if (fread(colormapBuf, sizeof(RGBA_QUAD), colormapEntries, fp) != colormapEntries) { FREE(colormapBuf); return (PIX *)ERROR_PTR( "colormap read fail", procName, NULL); } } /* Make a 32 bpp pix if depth is 24 bpp */ d = depth; if (depth == 24) d = 32; if ((pix = pixCreate(width, height, d)) == NULL) { FREE(colormapBuf); return (PIX *)ERROR_PTR( "pix not made", procName, NULL); } pixSetXRes(pix, (l_int32)((l_float32)xres / 39.37 + 0.5)); /* to ppi */ pixSetYRes(pix, (l_int32)((l_float32)yres / 39.37 + 0.5)); /* to ppi */ pixWpl = pixGetWpl(pix); pixBpl = 4 * pixWpl; cmap = NULL; if (colormapEntries > 256) L_WARNING("more than 256 colormap entries!\n", procName); if (colormapEntries > 0) { /* import the colormap to the pix cmap */ cmap = pixcmapCreate(L_MIN(d, 8)); FREE(cmap->array); /* remove generated cmap array */ cmap->array = (void *)colormapBuf; /* and replace */ cmap->n = L_MIN(colormapEntries, 256); } pixSetColormap(pix, cmap); /* Seek to the start of the bitmap in the file */ fseek(fp, offset, 0); if (depth != 24) { /* typ. 1 or 8 bpp */ data = (l_uint8 *)pixGetData(pix) + pixBpl * (height - 1); for (i = 0; i < height; i++) { if (fread(data, 1, fileBpl, fp) != fileBpl) { pixDestroy(&pix); return (PIX *)ERROR_PTR("BMP read fail", procName, NULL); } data -= pixBpl; } } else { /* 24 bpp file; 32 bpp pix * Note: for bmp files, pel[0] is blue, pel[1] is green, * and pel[2] is red. This is opposite to the storage * in the pix, which puts the red pixel in the 0 byte, * the green in the 1 byte and the blue in the 2 byte. * Note also that all words are endian flipped after * assignment on L_LITTLE_ENDIAN platforms. * * We can then make these assignments for little endians: * SET_DATA_BYTE(pword, 1, pel[0]); blue * SET_DATA_BYTE(pword, 2, pel[1]); green * SET_DATA_BYTE(pword, 3, pel[2]); red * This looks like: * 3 (R) 2 (G) 1 (B) 0 * |-----------|------------|-----------|-----------| * and after byte flipping: * 3 2 (B) 1 (G) 0 (R) * |-----------|------------|-----------|-----------| * * For big endians we set: * SET_DATA_BYTE(pword, 2, pel[0]); blue * SET_DATA_BYTE(pword, 1, pel[1]); green * SET_DATA_BYTE(pword, 0, pel[2]); red * This looks like: * 0 (R) 1 (G) 2 (B) 3 * |-----------|------------|-----------|-----------| * so in both cases we get the correct assignment in the PIX. * * Can we do a platform-independent assignment? * Yes, set the bytes without using macros: * *((l_uint8 *)pword) = pel[2]; red * *((l_uint8 *)pword + 1) = pel[1]; green * *((l_uint8 *)pword + 2) = pel[0]; blue * For little endians, before flipping, this looks again like: * 3 (R) 2 (G) 1 (B) 0 * |-----------|------------|-----------|-----------| */ extrabytes = fileBpl - 3 * width; line = pixGetData(pix) + pixWpl * (height - 1); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { pword = line + j; if (fread(&pel, 1, 3, fp) != 3) { pixDestroy(&pix); return (PIX *)ERROR_PTR("bmp(1) read fail", procName, NULL); } *((l_uint8 *)pword + COLOR_RED) = pel[2]; *((l_uint8 *)pword + COLOR_GREEN) = pel[1]; *((l_uint8 *)pword + COLOR_BLUE) = pel[0]; } if (extrabytes) { for (k = 0; k < extrabytes; k++) { if (fread(&pel, 1, 1, fp) != 1) { pixDestroy(&pix); return (PIX *)ERROR_PTR("bmp(2) read fail", procName, NULL); } } } line -= pixWpl; } } pixEndianByteSwap(pix); /* ---------------------------------------------- * The bmp colormap determines the values of black * and white pixels for binary in the following way: * if black = 1 (255), white = 0 * 255, 255, 255, 0, 0, 0, 0, 0 * if black = 0, white = 1 (255) * 0, 0, 0, 0, 255, 255, 255, 0 * We have no need for a 1 bpp pix with a colormap! * ---------------------------------------------- */ if (depth == 1 && cmap) { pixt = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); pixDestroy(&pix); pix = pixt; /* rename */ } return pix; } /*! * pixWriteStreamBmp() * * Input: stream opened for write * pix (1, 4, 8, 32 bpp) * Return: 0 if OK, 1 on error * * Notes: * (1) We position fp at the beginning of the stream, so it * truncates any existing data * (2) 2 bpp Bmp files are apparently not valid!. We can * write and read them, but nobody else can read ours. */ l_int32 pixWriteStreamBmp(FILE *fp, PIX *pix) { l_uint32 offbytes, filebytes, fileimagebytes; l_int32 width, height, depth, d, xres, yres; l_uint16 bfType, bfSize, bfFill1, bfReserved1, bfReserved2; l_uint16 bfOffBits, bfFill2, biPlanes, biBitCount; l_uint16 sval; l_uint32 biSize, biWidth, biHeight, biCompression, biSizeImage; l_uint32 biXPelsPerMeter, biYPelsPerMeter, biClrUsed, biClrImportant; l_int32 pixWpl, pixBpl, extrabytes, writeerror; l_int32 fileBpl, fileWpl; l_int32 i, j, k; l_int32 heapcm; /* extra copy of cta on the heap ? 1 : 0 */ l_uint8 *data; l_uint8 pel[4]; l_uint32 *line, *pword; PIXCMAP *cmap; l_uint8 *cta; /* address of the bmp color table array */ l_int32 cmaplen; /* number of bytes in the bmp colormap */ l_int32 ncolors, val, stepsize; RGBA_QUAD *pquad; PROCNAME("pixWriteStreamBmp"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); width = pixGetWidth(pix); height = pixGetHeight(pix); d = pixGetDepth(pix); if (d == 2) L_WARNING("writing 2 bpp bmp file; nobody else can read\n", procName); depth = d; if (d == 32) depth = 24; xres = (l_int32)(39.37 * (l_float32)pixGetXRes(pix) + 0.5); /* to ppm */ yres = (l_int32)(39.37 * (l_float32)pixGetYRes(pix) + 0.5); /* to ppm */ pixWpl = pixGetWpl(pix); pixBpl = 4 * pixWpl; fileWpl = (width * depth + 31) / 32; fileBpl = 4 * fileWpl; fileimagebytes = height * fileBpl; heapcm = 0; if (d == 32) { /* 24 bpp rgb; no colormap */ ncolors = 0; cmaplen = 0; } else if ((cmap = pixGetColormap(pix))) { /* existing colormap */ ncolors = pixcmapGetCount(cmap); cmaplen = ncolors * sizeof(RGBA_QUAD); cta = (l_uint8 *)cmap->array; } else { /* no existing colormap; make a binary or gray one */ if (d == 1) { cmaplen = sizeof(bwmap); ncolors = 2; cta = (l_uint8 *)bwmap; } else { /* d != 32; output grayscale version */ ncolors = 1 << depth; cmaplen = ncolors * sizeof(RGBA_QUAD); heapcm = 1; if ((cta = (l_uint8 *)CALLOC(cmaplen, 1)) == NULL) return ERROR_INT("colormap alloc fail", procName, 1); stepsize = 255 / (ncolors - 1); for (i = 0, val = 0, pquad = (RGBA_QUAD *)cta; i < ncolors; i++, val += stepsize, pquad++) { pquad->blue = pquad->green = pquad->red = val; } } } #if DEBUG {l_uint8 *pcmptr; pcmptr = (l_uint8 *)pixGetColormap(pix)->array; fprintf(stderr, "Pix colormap[0] = %c%c%c%d\n", pcmptr[0], pcmptr[1], pcmptr[2], pcmptr[3]); fprintf(stderr, "Pix colormap[1] = %c%c%c%d\n", pcmptr[4], pcmptr[5], pcmptr[6], pcmptr[7]); } #endif /* DEBUG */ fseek(fp, 0L, 0); /* Convert to little-endian and write the file header data */ bfType = convertOnBigEnd16(BMP_ID); offbytes = BMP_FHBYTES + BMP_IHBYTES + cmaplen; filebytes = offbytes + fileimagebytes; sval = filebytes & 0x0000ffff; bfSize = convertOnBigEnd16(sval); sval = (filebytes >> 16) & 0x0000ffff; bfFill1 = convertOnBigEnd16(sval); bfReserved1 = 0; bfReserved2 = 0; sval = offbytes & 0x0000ffff; bfOffBits = convertOnBigEnd16(sval); sval = (offbytes >> 16) & 0x0000ffff; bfFill2 = convertOnBigEnd16(sval); fwrite(&bfType, 1, 2, fp); fwrite(&bfSize, 1, 2, fp); fwrite(&bfFill1, 1, 2, fp); fwrite(&bfReserved1, 1, 2, fp); fwrite(&bfReserved1, 1, 2, fp); fwrite(&bfOffBits, 1, 2, fp); fwrite(&bfFill2, 1, 2, fp); /* Convert to little-endian and write the info header data */ biSize = convertOnBigEnd32(BMP_IHBYTES); biWidth = convertOnBigEnd32(width); biHeight = convertOnBigEnd32(height); biPlanes = convertOnBigEnd16(1); biBitCount = convertOnBigEnd16(depth); biCompression = 0; biSizeImage = convertOnBigEnd32(fileimagebytes); biXPelsPerMeter = convertOnBigEnd32(xres); biYPelsPerMeter = convertOnBigEnd32(yres); biClrUsed = convertOnBigEnd32(ncolors); biClrImportant = convertOnBigEnd32(ncolors); fwrite(&biSize, 1, 4, fp); fwrite(&biWidth, 1, 4, fp); fwrite(&biHeight, 1, 4, fp); fwrite(&biPlanes, 1, 2, fp); fwrite(&biBitCount, 1, 2, fp); fwrite(&biCompression, 1, 4, fp); fwrite(&biSizeImage, 1, 4, fp); fwrite(&biXPelsPerMeter, 1, 4, fp); fwrite(&biYPelsPerMeter, 1, 4, fp); fwrite(&biClrUsed, 1, 4, fp); fwrite(&biClrImportant, 1, 4, fp); /* Write the colormap data */ if (ncolors > 0) { if (fwrite(cta, 1, cmaplen, fp) != cmaplen) { if (heapcm) FREE(cta); return ERROR_INT("colormap write fail", procName, 1); } if (heapcm) FREE(cta); } /* When you write a binary image with a colormap * that sets BLACK to 0, you must invert the data */ if (depth == 1 && cmap && ((l_uint8 *)(cmap->array))[0] == 0x0) { pixInvert(pix, pix); } pixEndianByteSwap(pix); writeerror = 0; if (depth != 24) { /* typ 1 or 8 bpp */ data = (l_uint8 *)pixGetData(pix) + pixBpl * (height - 1); for (i = 0; i < height; i++) { if (fwrite(data, 1, fileBpl, fp) != fileBpl) writeerror = 1; data -= pixBpl; } } else { /* 32 bpp pix; 24 bpp file * See the comments in pixReadStreamBMP() to * understand the logic behind the pixel ordering below. * Note that we have again done an endian swap on * little endian machines before arriving here, so that * the bytes are ordered on both platforms as: Red Green Blue -- |-----------|------------|-----------|-----------| */ extrabytes = fileBpl - 3 * width; line = pixGetData(pix) + pixWpl * (height - 1); for (i = 0; i < height; i++) { for (j = 0; j < width; j++) { pword = line + j; pel[2] = *((l_uint8 *)pword + COLOR_RED); pel[1] = *((l_uint8 *)pword + COLOR_GREEN); pel[0] = *((l_uint8 *)pword + COLOR_BLUE); if (fwrite(&pel, 1, 3, fp) != 3) writeerror = 1; } if (extrabytes) { for (k = 0; k < extrabytes; k++) fwrite(&pel, 1, 1, fp); } line -= pixWpl; } } /* Restore to original state */ pixEndianByteSwap(pix); if (depth == 1 && cmap && ((l_uint8 *)(cmap->array))[0] == 0x0) pixInvert(pix, pix); if (writeerror) return ERROR_INT("image write fail", procName, 1); return 0; } /*---------------------------------------------------------------------* * Read/write to memory * *---------------------------------------------------------------------*/ #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ #if HAVE_FMEMOPEN extern FILE *open_memstream(char **data, size_t *size); extern FILE *fmemopen(void *data, size_t size, const char *mode); #endif /* HAVE_FMEMOPEN */ /*! * pixReadMemBmp() * * Input: cdata (const; bmp-encoded) * size (of data) * Return: pix, or null on error * * Notes: * (1) The @size byte of @data must be a null character. */ PIX * pixReadMemBmp(const l_uint8 *cdata, size_t size) { FILE *fp; PIX *pix; PROCNAME("pixReadMemBmp"); if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); #if HAVE_FMEMOPEN if ((fp = fmemopen((l_uint8 *)cdata, size, "r")) == NULL) return (PIX *)ERROR_PTR("stream not opened", procName, NULL); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); fwrite(cdata, 1, size, fp); rewind(fp); #endif /* HAVE_FMEMOPEN */ pix = pixReadStreamBmp(fp); fclose(fp); if (!pix) L_ERROR("pix not read\n", procName); return pix; } /*! * pixWriteMemBmp() * * Input: &data ( data of tiff compressed image) * &size ( size of returned data) * pix * Return: 0 if OK, 1 on error * * Notes: * (1) See pixWriteStreamBmp() for usage. This version writes to * memory instead of to a file stream. */ l_int32 pixWriteMemBmp(l_uint8 **pdata, size_t *psize, PIX *pix) { l_int32 ret; FILE *fp; PROCNAME("pixWriteMemBmp"); if (!pdata) return ERROR_INT("&data not defined", procName, 1 ); if (!psize) return ERROR_INT("&size not defined", procName, 1 ); if (!pix) return ERROR_INT("&pix not defined", procName, 1 ); #if HAVE_FMEMOPEN if ((fp = open_memstream((char **)pdata, psize)) == NULL) return ERROR_INT("stream not opened", procName, 1); ret = pixWriteStreamBmp(fp, pix); #else L_WARNING("work-around: writing to a temp file\n", procName); fp = tmpfile(); ret = pixWriteStreamBmp(fp, pix); rewind(fp); *pdata = l_binaryReadStream(fp, psize); #endif /* HAVE_FMEMOPEN */ fclose(fp); return ret; } /* --------------------------------------------*/ #endif /* USE_BMPIO */ /* --------------------------------------------*/ leptonica-1.70/src/readbarcode.h0000644000175000017500000002652112270566033014712 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_READBARCODE_H #define LEPTONICA_READBARCODE_H /* ----------------------------------------------------------------- * * Flags for method of extracting barcode widths * * ----------------------------------------------------------------- */ enum { L_USE_WIDTHS = 1, /* use histogram of barcode widths */ L_USE_WINDOWS = 2 /* find best window for decoding transitions */ }; /* ----------------------------------------------------------------- * * Flags for barcode formats * * These are used both to identify a barcode format and to identify * * the decoding method to use on a barcode. * * ----------------------------------------------------------------- */ enum { L_BF_UNKNOWN = 0, /* unknown format */ L_BF_ANY = 1, /* try decoding with all known formats */ L_BF_CODE128 = 2, /* decode with Code128 format */ L_BF_EAN8 = 3, /* decode with EAN8 format */ L_BF_EAN13 = 4, /* decode with EAN13 format */ L_BF_CODE2OF5 = 5, /* decode with Code 2 of 5 format */ L_BF_CODEI2OF5 = 6, /* decode with Interleaved 2 of 5 format */ L_BF_CODE39 = 7, /* decode with Code39 format */ L_BF_CODE93 = 8, /* decode with Code93 format */ L_BF_CODABAR = 9, /* decode with Code93 format */ L_BF_UPCA = 10 /* decode with UPC A format */ }; /* ----------------------------------------------------------------- * * Currently supported formats * * Update these arrays as new formats are added. * * ----------------------------------------------------------------- */ static const l_int32 SupportedBarcodeFormat[] = { L_BF_CODE2OF5, L_BF_CODEI2OF5, L_BF_CODE93, L_BF_CODE39, L_BF_CODABAR, L_BF_UPCA, L_BF_EAN13 }; static const char *SupportedBarcodeFormatName[] = { "Code2of5", "CodeI2of5", "Code93", "Code39", "Codabar", "Upca", "Ean13" }; static const l_int32 NumSupportedBarcodeFormats = 7; /* ----------------------------------------------------------------- * * Code 2 of 5 symbology * * ----------------------------------------------------------------- */ static const char *Code2of5[] = { "111121211", "211111112", "112111112", "212111111", /* 0 - 3 */ "111121112", "211121111", "112121111", "111111212", /* 4 - 7 */ "211111211", "112111211", /* 8 - 9 */ "21211", "21112" /* Start, Stop */ }; static const l_int32 C25_START = 10; static const l_int32 C25_STOP = 11; /* ----------------------------------------------------------------- * * Code Interleaved 2 of 5 symbology * * ----------------------------------------------------------------- */ static const char *CodeI2of5[] = { "11221", "21112", "12112", "22111", "11212", /* 0 - 4 */ "21211", "12211", "11122", "21121", "12121", /* 5 - 9 */ "1111", "211" /* start, stop */ }; static const l_int32 CI25_START = 10; static const l_int32 CI25_STOP = 11; /* ----------------------------------------------------------------- * * Code 93 symbology * * ----------------------------------------------------------------- */ static const char *Code93[] = { "131112", "111213", "111312", "111411", "121113", /* 0: 0 - 4 */ "121212", "121311", "111114", "131211", "141111", /* 5: 5 - 9 */ "211113", "211212", "211311", "221112", "221211", /* 10: A - E */ "231111", "112113", "112212", "112311", "122112", /* 15: F - J */ "132111", "111123", "111222", "111321", "121122", /* 20: K - O */ "131121", "212112", "212211", "211122", "211221", /* 25: P - T */ "221121", "222111", "112122", "112221", "122121", /* 30: U - Y */ "123111", "121131", "311112", "311211", "321111", /* 35: Z,-,.,SP,$ */ "112131", "113121", "211131", "131221", "312111", /* 40: /,+,%,($),(%) */ "311121", "122211", "111141" /* 45: (/),(+), Start */ }; /* Use "[]{}#" to represent special codes 43-47 */ static const char Code93Val[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%[]{}#"; static const l_int32 C93_START = 47; static const l_int32 C93_STOP = 47; /* ----------------------------------------------------------------- * * Code 39 symbology * * ----------------------------------------------------------------- */ static const char *Code39[] = { "111221211", "211211112", "112211112", "212211111", /* 0: 0 - 3 */ "111221112", "211221111", "112221111", "111211212", /* 4: 4 - 7 */ "211211211", "112211211", "211112112", "112112112", /* 8: 8 - B */ "212112111", "111122112", "211122111", "112122111", /* 12: C - F */ "111112212", "211112211", "112112211", "111122211", /* 16: G - J */ "211111122", "112111122", "212111121", "111121122", /* 20: K - N */ "211121121", "112121121", "111111222", "211111221", /* 24: O - R */ "112111221", "111121221", "221111112", "122111112", /* 28: S - V */ "222111111", "121121112", "221121111", "122121111", /* 32: W - Z */ "121111212", "221111211", "122111211", "121212111", /* 36: -,.,SP,$ */ "121211121", "121112121", "111212121", "121121211" /* 40: /,+,%,* */ }; /* Use "*" to represent the Start and Stop codes (43) */ static const char Code39Val[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%*"; static const l_int32 C39_START = 43; static const l_int32 C39_STOP = 43; /* ----------------------------------------------------------------- * * Codabar symbology * * ----------------------------------------------------------------- */ static const char *Codabar[] = { "1111122", "1111221", "1112112", "2211111", "1121121", /* 0: 0 - 4 */ "2111121", "1211112", "1211211", "1221111", "2112111", /* 5: 5 - 9 */ "1112211", "1122111", "2111212", "2121112", "2121211", /* 10: -,$,:,/,. */ "1121212", "1122121", "1212112", "1112122", "1112221" /* 15: +,A,B,C,D */ }; /* Ascii representations for codes 16-19: (A or T), (B or N), (C or *), * (D or E). These are used in pairs for the Start and Stop codes. */ static const char CodabarVal[] = "0123456789-$:/.+ABCD"; /* ----------------------------------------------------------------- * * UPC-A symbology * * ----------------------------------------------------------------- */ static const char *Upca[] = { "3211", "2221", "2122", "1411", "1132", /* 0: 0 - 4 */ "1231", "1114", "1312", "1213", "3112", /* 5: 5 - 9 */ "111", "111", "11111" /* 10: Start, Stop, Mid */ }; static const l_int32 UPCA_START = 10; static const l_int32 UPCA_STOP = 11; static const l_int32 UPCA_MID = 12; /* ----------------------------------------------------------------- * * Code128 symbology * * ----------------------------------------------------------------- */ static const char *Code128[] = { "212222", "222122", "222221", "121223", "121322", /* 0 - 4 */ "131222", "122213", "122312", "132212", "221213", /* 5 - 9 */ "221312", "231212", "112232", "122132", "122231", /* 10 - 14 */ "113222", "123122", "123221", "223211", "221132", /* 15 - 19 */ "221231", "213212", "223112", "312131", "311222", /* 20 - 24 */ "321122", "321221", "312212", "322112", "322211", /* 25 - 29 */ "212123", "212321", "232121", "111323", "131123", /* 30 - 34 */ "131321", "112313", "132113", "132311", "211313", /* 35 - 39 */ "231113", "231311", "112133", "112331", "132131", /* 40 - 44 */ "113123", "113321", "133121", "313121", "211331", /* 45 - 49 */ "231131", "213113", "213311", "213131", "311123", /* 50 - 54 */ "311321", "331121", "312113", "312311", "332111", /* 55 - 59 */ "314111", "221411", "431111", "111224", "111422", /* 60 - 64 */ "121124", "121421", "141122", "141221", "112214", /* 65 - 69 */ "112412", "122114", "122411", "142112", "142211", /* 70 - 74 */ "241211", "221114", "413111", "241112", "134111", /* 75 - 79 */ "111242", "121142", "121241", "114212", "124112", /* 80 - 84 */ "124211", "411212", "421112", "421211", "212141", /* 85 - 89 */ "214121", "412121", "111143", "111341", "131141", /* 90 - 94 */ "114113", "114311", "411113", "411311", "113141", /* 95 - 99 */ "114131", "311141", "411131", "211412", "211214", /* 100 - 104 */ "211232", "2331112" /* 105 - 106 */ }; static const l_int32 C128_FUN_3 = 96; /* in A or B only; in C it is 96 */ static const l_int32 C128_FUNC_2 = 97; /* in A or B only; in C it is 97 */ static const l_int32 C128_SHIFT = 98; /* in A or B only; in C it is 98 */ static const l_int32 C128_GOTO_C = 99; /* in A or B only; in C it is 99 */ static const l_int32 C128_GOTO_B = 100; static const l_int32 C128_GOTO_A = 101; static const l_int32 C128_FUNC_1 = 102; static const l_int32 C128_START_A = 103; static const l_int32 C128_START_B = 104; static const l_int32 C128_START_C = 105; static const l_int32 C128_STOP = 106; /* code 128 symbols are 11 units */ static const l_int32 C128_SYMBOL_WIDTH = 11; #endif /* LEPTONICA_READBARCODE_H */ leptonica-1.70/src/regutils.c0000664000175000017500000006016512270534140014306 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * regutils.c * * Regression test utilities * l_int32 regTestSetup() * l_int32 regTestCleanup() * l_int32 regTestCompareValues() * l_int32 regTestCompareStrings() * l_int32 regTestComparePix() * l_int32 regTestCompareSimilarPix() * l_int32 regTestCheckFile() * l_int32 regTestCompareFiles() * l_int32 regTestWritePixAndCheck() * * Static function * char *getRootNameFromArgv0() * * See regutils.h for how to use this. Here is a minimal setup: * * main(int argc, char **argv) { * ... * L_REGPARAMS *rp; * * if (regTestSetup(argc, argv, &rp)) * return 1; * ... * regTestWritePixAndCheck(rp, pix, IFF_PNG); // 0 * ... * return regTestCleanup(rp); * } */ #include #include "allheaders.h" extern l_int32 NumImageFileFormatExtensions; extern const char *ImageFileFormatExtensions[]; static char *getRootNameFromArgv0(const char *argv0); /*--------------------------------------------------------------------* * Regression test utilities * *--------------------------------------------------------------------*/ /*! * regTestSetup() * * Input: argc (from invocation; can be either 1 or 2) * argv (to regtest: @argv[1] is one of these: * "generate", "compare", "display") * &rp ( all regression params) * Return: 0 if OK, 1 on error * * Notes: * (1) Call this function with the args to the reg test. * There are three cases: * Case 1: * There is either only one arg, or the second arg is "compare". * This is the mode in which you run a regression test * (or a set of them), looking for failures and logging * the results to a file. The output, which includes * logging of all reg test failures plus a SUCCESS or * FAILURE summary for each test, is appended to the file * "/tmp/reg_results.txt. For this case, as in Case 2, * the display field in rp is set to FALSE, preventing * image display. * Case 2: * The second arg is "generate". This will cause * generation of new golden files for the reg test. * The results of the reg test are not recorded, and * the display field in rp is set to FALSE. * Case 3: * The second arg is "display". The test will run and * files will be written. Comparisons with golden files * will not be carried out, so the only notion of success * or failure is with tests that do not involve golden files. * The display field in rp is TRUE, and this is used by * pixDisplayWithTitle(). * (2) See regutils.h for examples of usage. */ l_int32 regTestSetup(l_int32 argc, char **argv, L_REGPARAMS **prp) { char *testname, *vers; char errormsg[64]; L_REGPARAMS *rp; PROCNAME("regTestSetup"); if (argc != 1 && argc != 2) { snprintf(errormsg, sizeof(errormsg), "Syntax: %s [ [generate] | compare | display ]", argv[0]); return ERROR_INT(errormsg, procName, 1); } if ((testname = getRootNameFromArgv0(argv[0])) == NULL) return ERROR_INT("invalid root", procName, 1); if ((rp = (L_REGPARAMS *)CALLOC(1, sizeof(L_REGPARAMS))) == NULL) return ERROR_INT("rp not made", procName, 1); *prp = rp; rp->testname = testname; rp->index = -1; /* increment before each test */ /* Initialize to true. A failure in any test is registered * as a failure of the regression test. */ rp->success = TRUE; /* Only open a stream to a temp file for the 'compare' case */ if (argc == 1 || !strcmp(argv[1], "compare")) { rp->mode = L_REG_COMPARE; rp->tempfile = genTempFilename("/tmp", "regtest_output.txt", 0, 1); rp->fp = fopenWriteStream(rp->tempfile, "wb"); if (rp->fp == NULL) { rp->success = FALSE; return ERROR_INT("stream not opened for tempfile", procName, 1); } } else if (!strcmp(argv[1], "generate")) { rp->mode = L_REG_GENERATE; lept_mkdir("golden"); } else if (!strcmp(argv[1], "display")) { rp->mode = L_REG_DISPLAY; rp->display = TRUE; } else { FREE(rp); snprintf(errormsg, sizeof(errormsg), "Syntax: %s [ [generate] | compare | display ]", argv[0]); return ERROR_INT(errormsg, procName, 1); } /* Print out test name and both the leptonica and * image libarary versions */ fprintf(stderr, "\n################ %s_reg ###############\n", rp->testname); vers = getLeptonicaVersion(); fprintf(stderr, "%s\n", vers); FREE(vers); vers = getImagelibVersions(); fprintf(stderr, "%s\n", vers); FREE(vers); rp->tstart = startTimerNested(); return 0; } /*! * regTestCleanup() * * Input: rp (regression test parameters) * Return: 0 if OK, 1 on error * * Notes: * (1) This copies anything written to the temporary file to the * output file /tmp/reg_results.txt. */ l_int32 regTestCleanup(L_REGPARAMS *rp) { char result[512]; char *results_file; /* success/failure output in 'compare' mode */ char *text, *message; l_int32 retval; size_t nbytes; PROCNAME("regTestCleanup"); if (!rp) return ERROR_INT("rp not defined", procName, 1); fprintf(stderr, "Time: %7.3f sec\n", stopTimerNested(rp->tstart)); fprintf(stderr, "################################################\n"); /* If generating golden files or running in display mode, release rp */ if (!rp->fp) { FREE(rp->testname); FREE(rp->tempfile); FREE(rp); return 0; } /* Compare mode: read back data from temp file */ fclose(rp->fp); text = (char *)l_binaryRead(rp->tempfile, &nbytes); FREE(rp->tempfile); if (!text) { rp->success = FALSE; FREE(rp); return ERROR_INT("text not returned", procName, 1); } /* Prepare result message */ if (rp->success) snprintf(result, sizeof(result), "SUCCESS: %s_reg\n", rp->testname); else snprintf(result, sizeof(result), "FAILURE: %s_reg\n", rp->testname); message = stringJoin(text, result); FREE(text); results_file = genPathname("/tmp", "reg_results.txt"); fileAppendString(results_file, message); retval = (rp->success) ? 0 : 1; FREE(results_file); FREE(message); FREE(rp->testname); FREE(rp); return retval; } /*! * regTestCompareValues() * * Input: rp (regtest parameters) * val1 (typ. the golden value) * val2 (typ. the value computed) * delta (allowed max absolute difference) * Return: 0 if OK, 1 on error (a failure in comparison is not an error) */ l_int32 regTestCompareValues(L_REGPARAMS *rp, l_float32 val1, l_float32 val2, l_float32 delta) { l_float32 diff; PROCNAME("regTestCompareValues"); if (!rp) return ERROR_INT("rp not defined", procName, 1); rp->index++; diff = L_ABS(val2 - val1); /* Record on failure */ if (diff > delta) { if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: value comparison for index %d\n" "difference = %f but allowed delta = %f\n", rp->testname, rp->index, diff, delta); } fprintf(stderr, "Failure in %s_reg: value comparison for index %d\n" "difference = %f but allowed delta = %f\n", rp->testname, rp->index, diff, delta); rp->success = FALSE; } return 0; } /*! * regTestCompareStrings() * * Input: rp (regtest parameters) * string1 (typ. the expected string) * bytes1 (size of string1) * string2 (typ. the computed string) * bytes2 (size of string2) * Return: 0 if OK, 1 on error (a failure in comparison is not an error) */ l_int32 regTestCompareStrings(L_REGPARAMS *rp, l_uint8 *string1, size_t bytes1, l_uint8 *string2, size_t bytes2) { l_int32 i, fail; char buf[256]; PROCNAME("regTestCompareValues"); if (!rp) return ERROR_INT("rp not defined", procName, 1); rp->index++; fail = FALSE; if (bytes1 != bytes2) fail = TRUE; if (fail == FALSE) { for (i = 0; i < bytes1; i++) { if (string1[i] != string2[i]) { fail = TRUE; break; } } } /* Output on failure */ if (fail == TRUE) { /* Write the two strings to file */ snprintf(buf, sizeof(buf), "/tmp/string1_%d_%lu", rp->index, (unsigned long)bytes1); l_binaryWrite(buf, "w", string1, bytes1); snprintf(buf, sizeof(buf), "/tmp/string2_%d_%lu", rp->index, (unsigned long)bytes2); l_binaryWrite(buf, "w", string2, bytes2); /* Report comparison failure */ snprintf(buf, sizeof(buf), "/tmp/string*_%d_*", rp->index); if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: string comp for index %d; " "written to %s\n", rp->testname, rp->index, buf); } fprintf(stderr, "Failure in %s_reg: string comp for index %d; " "written to %s\n", rp->testname, rp->index, buf); rp->success = FALSE; } return 0; } /*! * regTestComparePix() * * Input: rp (regtest parameters) * pix1, pix2 (to be tested for equality) * Return: 0 if OK, 1 on error (a failure in comparison is not an error) * * Notes: * (1) This function compares two pix for equality. On failure, * this writes to stderr. */ l_int32 regTestComparePix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2) { l_int32 same; PROCNAME("regTestComparePix"); if (!rp) return ERROR_INT("rp not defined", procName, 1); if (!pix1 || !pix2) { rp->success = FALSE; return ERROR_INT("pix1 and pix2 not both defined", procName, 1); } rp->index++; pixEqual(pix1, pix2, &same); /* Record on failure */ if (!same) { if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: pix comparison for index %d\n", rp->testname, rp->index); } fprintf(stderr, "Failure in %s_reg: pix comparison for index %d\n", rp->testname, rp->index); rp->success = FALSE; } return 0; } /*! * regTestCompareSimilarPix() * * Input: rp (regtest parameters) * pix1, pix2 (to be tested for near equality) * mindiff (minimum pixel difference to be counted; > 0) * maxfract (maximum fraction of pixels allowed to have * diff greater than or equal to mindiff) * printstats (use 1 to print normalized histogram to stderr) * Return: 0 if OK, 1 on error (a failure in similarity comparison * is not an error) * * Notes: * (1) This function compares two pix for near equality. On failure, * this writes to stderr. * (2) The pix are similar if the fraction of non-conforming pixels * does not exceed @maxfract. Pixels are non-conforming if * the difference in pixel values equals or exceeds @mindiff. * Typical values might be @mindiff = 15 and @maxfract = 0.01. * (3) The input images must have the same size and depth. The * pixels for comparison are typically subsampled from the images. * (4) Normally, use @printstats = 0. In debugging mode, to see * the relation between @mindiff and the minimum value of * @maxfract for success, set this to 1. */ l_int32 regTestCompareSimilarPix(L_REGPARAMS *rp, PIX *pix1, PIX *pix2, l_int32 mindiff, l_float32 maxfract, l_int32 printstats) { l_int32 w, h, factor, similar; PROCNAME("regTestCompareSimilarPix"); if (!rp) return ERROR_INT("rp not defined", procName, 1); if (!pix1 || !pix2) { rp->success = FALSE; return ERROR_INT("pix1 and pix2 not both defined", procName, 1); } rp->index++; pixGetDimensions(pix1, &w, &h, NULL); factor = L_MAX(w, h) / 400; factor = L_MAX(1, L_MIN(factor, 4)); /* between 1 and 4 */ pixTestForSimilarity(pix1, pix2, factor, mindiff, maxfract, 0.0, &similar, printstats); /* Record on failure */ if (!similar) { if (rp->fp) { fprintf(rp->fp, "Failure in %s_reg: pix similarity comp for index %d\n", rp->testname, rp->index); } fprintf(stderr, "Failure in %s_reg: pix similarity comp for index %d\n", rp->testname, rp->index); rp->success = FALSE; } return 0; } /*! * regTestCheckFile() * * Input: rp (regtest parameters) * localname (name of output file from reg test) * Return: 0 if OK, 1 on error (a failure in comparison is not an error) * * Notes: * (1) This function does one of three things, depending on the mode: * * "generate": makes a "golden" file as a copy @localname. * * "compare": compares @localname contents with the golden file * * "display": makes the @localname file but does no comparison * (2) The canonical format of the golden filenames is: * /tmp/golden/_golden.. * e.g., * /tmp/golden/maze_golden.0.png * It is important to add an extension to the local name, because * the extension is added to the name of the golden file. */ l_int32 regTestCheckFile(L_REGPARAMS *rp, const char *localname) { char *ext; char namebuf[256]; l_int32 ret, same, format; PIX *pix1, *pix2; PROCNAME("regTestCheckFile"); if (!rp) return ERROR_INT("rp not defined", procName, 1); if (!localname) { rp->success = FALSE; return ERROR_INT("local name not defined", procName, 1); } if (rp->mode != L_REG_GENERATE && rp->mode != L_REG_COMPARE && rp->mode != L_REG_DISPLAY) { rp->success = FALSE; return ERROR_INT("invalid mode", procName, 1); } rp->index++; /* If display mode, no generation and no testing */ if (rp->mode == L_REG_DISPLAY) return 0; /* Generate the golden file name; used in 'generate' and 'compare' */ splitPathAtExtension(localname, NULL, &ext); snprintf(namebuf, sizeof(namebuf), "/tmp/golden/%s_golden.%d%s", rp->testname, rp->index, ext); FREE(ext); /* Generate mode. No testing. */ if (rp->mode == L_REG_GENERATE) { /* Save the file as a golden file */ /* fprintf(stderr, "%d: %s\n", rp->index, namebuf); */ ret = fileCopy(localname, namebuf); if (!ret) fprintf(stderr, "Copy: %s to %s\n", localname, namebuf); return ret; } /* Compare mode: test and record on failure. GIF compression * is lossless for images with up to 8 bpp (but not for RGB * because it must generate a 256 color palette). Although * the read/write cycle for GIF is idempotent in the image * pixels for bpp <= 8, it is not idempotent in the actual * file bytes. Tests comparing file bytes before and after * a GIF read/write cycle will fail. So for GIF we uncompress * the two images and compare the actual pixels. From my tests, * PNG, in addition to being lossless, is idempotent in file * bytes on read/write, so comparing the pixels is not necessary. * (It also increases the regression test time by an an average * of about 8%.) JPEG is lossy and not idempotent in the image * pixels, so no tests are constructed that would require it. */ findFileFormat(localname, &format); if (format == IFF_GIF) { same = 0; pix1 = pixRead(localname); pix2 = pixRead(namebuf); pixEqual(pix1, pix2, &same); pixDestroy(&pix1); pixDestroy(&pix2); } else { filesAreIdentical(localname, namebuf, &same); } if (!same) { fprintf(rp->fp, "Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, localname, namebuf); fprintf(stderr, "Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, localname, namebuf); rp->success = FALSE; } return 0; } /*! * regTestCompareFiles() * * Input: rp (regtest parameters) * index1 (of one output file from reg test) * index2 (of another output file from reg test) * Return: 0 if OK, 1 on error (a failure in comparison is not an error) * * Notes: * (1) This only does something in "compare" mode. * (2) The canonical format of the golden filenames is: * /tmp/golden/_golden.. * e.g., * /tmp/golden/maze_golden.0.png */ l_int32 regTestCompareFiles(L_REGPARAMS *rp, l_int32 index1, l_int32 index2) { char *name1, *name2; char namebuf[256]; l_int32 same; SARRAY *sa; PROCNAME("regTestCompareFiles"); if (!rp) return ERROR_INT("rp not defined", procName, 1); if (index1 < 0 || index2 < 0) { rp->success = FALSE; return ERROR_INT("index1 and/or index2 is negative", procName, 1); } if (index1 == index2) { rp->success = FALSE; return ERROR_INT("index1 must differ from index2", procName, 1); } rp->index++; if (rp->mode != L_REG_COMPARE) return 0; /* Generate the golden file names */ snprintf(namebuf, sizeof(namebuf), "%s_golden.%d.", rp->testname, index1); sa = getSortedPathnamesInDirectory("/tmp/golden", namebuf, 0, 0); if (sarrayGetCount(sa) != 1) { sarrayDestroy(&sa); rp->success = FALSE; L_ERROR("golden file %s not found\n", procName, namebuf); return 1; } name1 = sarrayGetString(sa, 0, L_COPY); sarrayDestroy(&sa); snprintf(namebuf, sizeof(namebuf), "%s_golden.%d.", rp->testname, index2); sa = getSortedPathnamesInDirectory("/tmp/golden", namebuf, 0, 0); if (sarrayGetCount(sa) != 1) { sarrayDestroy(&sa); rp->success = FALSE; FREE(name1); L_ERROR("golden file %s not found\n", procName, namebuf); return 1; } name2 = sarrayGetString(sa, 0, L_COPY); sarrayDestroy(&sa); /* Test and record on failure */ filesAreIdentical(name1, name2, &same); if (!same) { fprintf(rp->fp, "Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, name1, name2); fprintf(stderr, "Failure in %s_reg, index %d: comparing %s with %s\n", rp->testname, rp->index, name1, name2); rp->success = FALSE; } FREE(name1); FREE(name2); return 0; } /*! * regTestWritePixAndCheck() * * Input: rp (regtest parameters) * pix (to be written) * format (of output pix) * Return: 0 if OK, 1 on error (a failure in comparison is not an error) * * Notes: * (1) This function makes it easy to write the pix in a numbered * sequence of files, and either to: * (a) write the golden file ("generate" arg to regression test) * (b) make a local file and "compare" with the golden file * (c) make a local file and "display" the results * (3) The canonical format of the local filename is: * /tmp/.. * e.g., for scale_reg, * /tmp/scale.0.png */ l_int32 regTestWritePixAndCheck(L_REGPARAMS *rp, PIX *pix, l_int32 format) { char namebuf[256]; PROCNAME("regTestWritePixAndCheck"); if (!rp) return ERROR_INT("rp not defined", procName, 1); if (!pix) { rp->success = FALSE; return ERROR_INT("pix not defined", procName, 1); } if (format < 0 || format >= NumImageFileFormatExtensions) { rp->success = FALSE; return ERROR_INT("invalid format", procName, 1); } /* Generate the local file name */ snprintf(namebuf, sizeof(namebuf), "/tmp/%s.%d.%s", rp->testname, rp->index + 1, ImageFileFormatExtensions[format]); /* Write the local file */ if (pixGetDepth(pix) < 8) pixSetPadBits(pix, 0); pixWrite(namebuf, pix, format); /* Either write the golden file ("generate") or check the local file against an existing golden file ("compare") */ regTestCheckFile(rp, namebuf); return 0; } /*! * getRootNameFromArgv0() * * Input: argv0 * Return: root name (without the '_reg'), or null on error * * Notes: * (1) For example, from psioseg_reg, we want to extract * just 'psioseg' as the root. * (2) In unix with autotools, the executable is not X, * but ./.libs/lt-X. So in addition to stripping out the * last 4 characters of the tail, we have to check for * the '-' and strip out the "lt-" prefix if we find it. */ static char * getRootNameFromArgv0(const char *argv0) { l_int32 len; char *root; PROCNAME("getRootNameFromArgv0"); splitPathAtDirectory(argv0, NULL, &root); if ((len = strlen(root)) <= 4) { FREE(root); return (char *)ERROR_PTR("invalid argv0; too small", procName, NULL); } #ifndef _WIN32 { char *newroot; l_int32 loc; if (stringFindSubstr(root, "-", &loc)) { newroot = stringNew(root + loc + 1); /* strip out "lt-" */ FREE(root); root = newroot; len = strlen(root); } } #else if (strstr(root, ".exe") != NULL) len -= 4; #endif /* ! _WIN32 */ root[len - 4] = '\0'; /* remove the suffix */ return root; } leptonica-1.70/src/adaptmap.c0000644000175000017500000032071412244177023014240 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * adaptmap.c * * =================================================================== * Image binarization algorithms are found in: * grayquant.c: standard, simple, general grayscale quantization * adaptmap.c: local adaptive; mostly gray-to-gray in preparation * for binarization * binarize.c: special binarization methods, locally adaptive. * =================================================================== * * Adaptive background normalization (top-level functions) * PIX *pixBackgroundNormSimple() 8 and 32 bpp * PIX *pixBackgroundNorm() 8 and 32 bpp * PIX *pixBackgroundNormMorph() 8 and 32 bpp * * Arrays of inverted background values for normalization (16 bpp) * l_int32 pixBackgroundNormGrayArray() 8 bpp input * l_int32 pixBackgroundNormRGBArrays() 32 bpp input * l_int32 pixBackgroundNormGrayArrayMorph() 8 bpp input * l_int32 pixBackgroundNormRGBArraysMorph() 32 bpp input * * Measurement of local background * l_int32 pixGetBackgroundGrayMap() 8 bpp * l_int32 pixGetBackgroundRGBMap() 32 bpp * l_int32 pixGetBackgroundGrayMapMorph() 8 bpp * l_int32 pixGetBackgroundRGBMapMorph() 32 bpp * l_int32 pixFillMapHoles() * PIX *pixExtendByReplication() 8 bpp * l_int32 pixSmoothConnectedRegions() 8 bpp * * Measurement of local foreground * l_int32 pixGetForegroundGrayMap() 8 bpp * * Generate inverted background map for each component * PIX *pixGetInvBackgroundMap() 16 bpp * * Apply inverse background map to image * PIX *pixApplyInvBackgroundGrayMap() 8 bpp * PIX *pixApplyInvBackgroundRGBMap() 32 bpp * * Apply variable map * PIX *pixApplyVariableGrayMap() 8 bpp * * Non-adaptive (global) mapping * PIX *pixGlobalNormRGB() 32 bpp or cmapped * PIX *pixGlobalNormNoSatRGB() 32 bpp * * Adaptive threshold spread normalization * l_int32 pixThresholdSpreadNorm() 8 bpp * * Adaptive background normalization (flexible adaptaption) * PIX *pixBackgroundNormFlex() 8 bpp * * Adaptive contrast normalization * PIX *pixContrastNorm() 8 bpp * l_int32 pixMinMaxTiles() * l_int32 pixSetLowContrast() * PIX *pixLinearTRCTiled() * static l_int32 *iaaGetLinearTRC() * * Background normalization is done by generating a reduced map (or set * of maps) representing the estimated background value of the * input image, and using this to shift the pixel values so that * this background value is set to some constant value. * * Specifically, normalization has 3 steps: * (1) Generate a background map at a reduced scale. * (2) Make the array of inverted background values by inverting * the map. The result is an array of local multiplicative factors. * (3) Apply this inverse background map to the image * * The inverse background arrays can be generated in two different ways here: * (1) Remove the 'foreground' pixels and average over the remaining * pixels in each tile. Propagate values into tiles where * values have not been assigned, either because there was not * enough background in the tile or because the tile is covered * by a foreground region described by an image mask. * After the background map is made, the inverse map is generated by * smoothing over some number of adjacent tiles * (block convolution) and then inverting. * (2) Remove the foreground pixels using a morphological closing * on a subsampled version of the image. Propagate values * into pixels covered by an optional image mask. Invert the * background map without preconditioning by convolutional smoothing. * * Note: Several of these functions make an implicit assumption about RGB * component ordering. * * Other methods for adaptively normalizing the image are also given here. * * (1) pixThresholdSpreadNorm() computes a local threshold over the image * and normalizes the input pixel values so that this computed threshold * is a constant across the entire image. * * (2) pixContrastNorm() computes and applies a local TRC so that the * local dynamic range is expanded to the full 8 bits, where the * darkest pixels are mapped to 0 and the lightest to 255. This is * useful for improving the appearance of pages with very light * foreground or very dark background, and where the local TRC * function doesn't change rapidly with position. */ #include "allheaders.h" /* Default input parameters for pixBackgroundNormSimple() * Note: * (1) mincount must never exceed the tile area (width * height) * (2) bgval must be sufficiently below 255 to avoid accidental * saturation; otherwise it should be large to avoid * shrinking the dynamic range * (3) results should otherwise not be sensitive to these values */ static const l_int32 DEFAULT_TILE_WIDTH = 10; static const l_int32 DEFAULT_TILE_HEIGHT = 15; static const l_int32 DEFAULT_FG_THRESHOLD = 60; static const l_int32 DEFAULT_MIN_COUNT = 40; static const l_int32 DEFAULT_BG_VAL = 200; static const l_int32 DEFAULT_X_SMOOTH_SIZE = 2; static const l_int32 DEFAULT_Y_SMOOTH_SIZE = 1; static l_int32 *iaaGetLinearTRC(l_int32 **iaa, l_int32 diff); #ifndef NO_CONSOLE_IO #define DEBUG_GLOBAL 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Adaptive background normalization * *------------------------------------------------------------------*/ /*! * pixBackgroundNormSimple() * * Input: pixs (8 bpp grayscale or 32 bpp rgb) * pixim ( 1 bpp 'image' mask; can be null) * pixg ( 8 bpp grayscale version; can be null) * Return: pixd (8 bpp or 32 bpp rgb), or null on error * * Notes: * (1) This is a simplified interface to pixBackgroundNorm(), * where seven parameters are defaulted. * (2) The input image is either grayscale or rgb. * (3) See pixBackgroundNorm() for usage and function. */ PIX * pixBackgroundNormSimple(PIX *pixs, PIX *pixim, PIX *pixg) { return pixBackgroundNorm(pixs, pixim, pixg, DEFAULT_TILE_WIDTH, DEFAULT_TILE_HEIGHT, DEFAULT_FG_THRESHOLD, DEFAULT_MIN_COUNT, DEFAULT_BG_VAL, DEFAULT_X_SMOOTH_SIZE, DEFAULT_Y_SMOOTH_SIZE); } /*! * pixBackgroundNorm() * * Input: pixs (8 bpp grayscale or 32 bpp rgb) * pixim ( 1 bpp 'image' mask; can be null) * pixg ( 8 bpp grayscale version; can be null) * sx, sy (tile size in pixels) * thresh (threshold for determining foreground) * mincount (min threshold on counts in a tile) * bgval (target bg val; typ. > 128) * smoothx (half-width of block convolution kernel width) * smoothy (half-width of block convolution kernel height) * Return: pixd (8 bpp or 32 bpp rgb), or null on error * * Notes: * (1) This is a top-level interface for normalizing the image intensity * by mapping the image so that the background is near the input * value 'bgval'. * (2) The input image is either grayscale or rgb. * (3) For each component in the input image, the background value * in each tile is estimated using the values in the tile that * are not part of the foreground, where the foreground is * determined by the input 'thresh' argument. * (4) An optional binary mask can be specified, with the foreground * pixels typically over image regions. The resulting background * map values will be determined by surrounding pixels that are * not under the mask foreground. The origin (0,0) of this mask * is assumed to be aligned with the origin of the input image. * This binary mask must not fully cover pixs, because then there * will be no pixels in the input image available to compute * the background. * (5) An optional grayscale version of the input pixs can be supplied. * The only reason to do this is if the input is RGB and this * grayscale version can be used elsewhere. If the input is RGB * and this is not supplied, it is made internally using only * the green component, and destroyed after use. * (6) The dimensions of the pixel tile (sx, sy) give the amount by * by which the map is reduced in size from the input image. * (7) The threshold is used to binarize the input image, in order to * locate the foreground components. If this is set too low, * some actual foreground may be used to determine the maps; * if set too high, there may not be enough background * to determine the map values accurately. Typically, it's * better to err by setting the threshold too high. * (8) A 'mincount' threshold is a minimum count of pixels in a * tile for which a background reading is made, in order for that * pixel in the map to be valid. This number should perhaps be * at least 1/3 the size of the tile. * (9) A 'bgval' target background value for the normalized image. This * should be at least 128. If set too close to 255, some * clipping will occur in the result. * (10) Two factors, 'smoothx' and 'smoothy', are input for smoothing * the map. Each low-pass filter kernel dimension is * is 2 * (smoothing factor) + 1, so a * value of 0 means no smoothing. A value of 1 or 2 is recommended. */ PIX * pixBackgroundNorm(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy) { l_int32 d, allfg; PIX *pixm, *pixmi, *pixd; PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi; PROCNAME("pixBackgroundNorm"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (sx < 4 || sy < 4) return (PIX *)ERROR_PTR("sx and sy must be >= 4", procName, NULL); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", procName); mincount = (sx * sy) / 3; } /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return (PIX *)ERROR_PTR("pixim all foreground", procName, NULL); } pixd = NULL; if (d == 8) { pixm = NULL; pixGetBackgroundGrayMap(pixs, pixim, sx, sy, thresh, mincount, &pixm); if (!pixm) { L_WARNING("map not made; return a copy of the source\n", procName); return pixCopy(NULL, pixs); } pixmi = pixGetInvBackgroundMap(pixm, bgval, smoothx, smoothy); if (!pixmi) ERROR_PTR("pixmi not made", procName, NULL); else pixd = pixApplyInvBackgroundGrayMap(pixs, pixmi, sx, sy); pixDestroy(&pixm); pixDestroy(&pixmi); } else { pixmr = pixmg = pixmb = NULL; pixGetBackgroundRGBMap(pixs, pixim, pixg, sx, sy, thresh, mincount, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); L_WARNING("map not made; return a copy of the source\n", procName); return pixCopy(NULL, pixs); } pixmri = pixGetInvBackgroundMap(pixmr, bgval, smoothx, smoothy); pixmgi = pixGetInvBackgroundMap(pixmg, bgval, smoothx, smoothy); pixmbi = pixGetInvBackgroundMap(pixmb, bgval, smoothx, smoothy); if (!pixmri || !pixmgi || !pixmbi) ERROR_PTR("not all pixm*i are made", procName, NULL); else pixd = pixApplyInvBackgroundRGBMap(pixs, pixmri, pixmgi, pixmbi, sx, sy); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); pixDestroy(&pixmri); pixDestroy(&pixmgi); pixDestroy(&pixmbi); } if (!pixd) ERROR_PTR("pixd not made", procName, NULL); return pixd; } /*! * pixBackgroundNormMorph() * * Input: pixs (8 bpp grayscale or 32 bpp rgb) * pixim ( 1 bpp 'image' mask; can be null) * reduction (at which morph closings are done; between 2 and 16) * size (of square Sel for the closing; use an odd number) * bgval (target bg val; typ. > 128) * Return: pixd (8 bpp), or null on error * * Notes: * (1) This is a top-level interface for normalizing the image intensity * by mapping the image so that the background is near the input * value 'bgval'. * (2) The input image is either grayscale or rgb. * (3) For each component in the input image, the background value * is estimated using a grayscale closing; hence the 'Morph' * in the function name. * (4) An optional binary mask can be specified, with the foreground * pixels typically over image regions. The resulting background * map values will be determined by surrounding pixels that are * not under the mask foreground. The origin (0,0) of this mask * is assumed to be aligned with the origin of the input image. * This binary mask must not fully cover pixs, because then there * will be no pixels in the input image available to compute * the background. * (5) The map is computed at reduced size (given by 'reduction') * from the input pixs and optional pixim. At this scale, * pixs is closed to remove the background, using a square Sel * of odd dimension. The product of reduction * size should be * large enough to remove most of the text foreground. * (6) No convolutional smoothing needs to be done on the map before * inverting it. * (7) A 'bgval' target background value for the normalized image. This * should be at least 128. If set too close to 255, some * clipping will occur in the result. */ PIX * pixBackgroundNormMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval) { l_int32 d, allfg; PIX *pixm, *pixmi, *pixd; PIX *pixmr, *pixmg, *pixmb, *pixmri, *pixmgi, *pixmbi; PROCNAME("pixBackgroundNormMorph"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (reduction < 2 || reduction > 16) return (PIX *)ERROR_PTR("reduction must be between 2 and 16", procName, NULL); /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return (PIX *)ERROR_PTR("pixim all foreground", procName, NULL); } pixd = NULL; if (d == 8) { pixGetBackgroundGrayMapMorph(pixs, pixim, reduction, size, &pixm); if (!pixm) return (PIX *)ERROR_PTR("pixm not made", procName, NULL); pixmi = pixGetInvBackgroundMap(pixm, bgval, 0, 0); if (!pixmi) ERROR_PTR("pixmi not made", procName, NULL); else pixd = pixApplyInvBackgroundGrayMap(pixs, pixmi, reduction, reduction); pixDestroy(&pixm); pixDestroy(&pixmi); } else { /* d == 32 */ pixmr = pixmg = pixmb = NULL; pixGetBackgroundRGBMapMorph(pixs, pixim, reduction, size, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return (PIX *)ERROR_PTR("not all pixm*", procName, NULL); } pixmri = pixGetInvBackgroundMap(pixmr, bgval, 0, 0); pixmgi = pixGetInvBackgroundMap(pixmg, bgval, 0, 0); pixmbi = pixGetInvBackgroundMap(pixmb, bgval, 0, 0); if (!pixmri || !pixmgi || !pixmbi) ERROR_PTR("not all pixm*i are made", procName, NULL); else pixd = pixApplyInvBackgroundRGBMap(pixs, pixmri, pixmgi, pixmbi, reduction, reduction); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); pixDestroy(&pixmri); pixDestroy(&pixmgi); pixDestroy(&pixmbi); } if (!pixd) ERROR_PTR("pixd not made", procName, NULL); return pixd; } /*-------------------------------------------------------------------------* * Arrays of inverted background values for normalization * *-------------------------------------------------------------------------* * Notes for these four functions: * * (1) They are useful if you need to save the actual mapping array. * * (2) They could be used in the top-level functions but are * * not because their use makes those functions less clear. * * (3) Each component in the input pixs generates a 16 bpp pix array. * *-------------------------------------------------------------------------*/ /*! * pixBackgroundNormGrayArray() * * Input: pixs (8 bpp grayscale) * pixim ( 1 bpp 'image' mask; can be null) * sx, sy (tile size in pixels) * thresh (threshold for determining foreground) * mincount (min threshold on counts in a tile) * bgval (target bg val; typ. > 128) * smoothx (half-width of block convolution kernel width) * smoothy (half-width of block convolution kernel height) * &pixd ( 16 bpp array of inverted background value) * Return: 0 if OK, 1 on error * * Notes: * (1) See notes in pixBackgroundNorm(). * (2) This returns a 16 bpp pix that can be used by * pixApplyInvBackgroundGrayMap() to generate a normalized version * of the input pixs. */ l_int32 pixBackgroundNormGrayArray(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixd) { l_int32 allfg; PIX *pixm; PROCNAME("pixBackgroundNormGrayArray"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", procName, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", procName); mincount = (sx * sy) / 3; } /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", procName, 1); } pixGetBackgroundGrayMap(pixs, pixim, sx, sy, thresh, mincount, &pixm); if (!pixm) return ERROR_INT("pixm not made", procName, 1); *ppixd = pixGetInvBackgroundMap(pixm, bgval, smoothx, smoothy); pixDestroy(&pixm); return 0; } /*! * pixBackgroundNormRGBArrays() * * Input: pixs (32 bpp rgb) * pixim ( 1 bpp 'image' mask; can be null) * pixg ( 8 bpp grayscale version; can be null) * sx, sy (tile size in pixels) * thresh (threshold for determining foreground) * mincount (min threshold on counts in a tile) * bgval (target bg val; typ. > 128) * smoothx (half-width of block convolution kernel width) * smoothy (half-width of block convolution kernel height) * &pixr ( 16 bpp array of inverted R background value) * &pixg ( 16 bpp array of inverted G background value) * &pixb ( 16 bpp array of inverted B background value) * Return: 0 if OK, 1 on error * * Notes: * (1) See notes in pixBackgroundNorm(). * (2) This returns a set of three 16 bpp pix that can be used by * pixApplyInvBackgroundGrayMap() to generate a normalized version * of each component of the input pixs. */ l_int32 pixBackgroundNormRGBArrays(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, l_int32 bgval, l_int32 smoothx, l_int32 smoothy, PIX **ppixr, PIX **ppixg, PIX **ppixb) { l_int32 allfg; PIX *pixmr, *pixmg, *pixmb; PROCNAME("pixBackgroundNormRGBArrays"); if (!ppixr || !ppixg || !ppixb) return ERROR_INT("&pixr, &pixg, &pixb not all defined", procName, 1); *ppixr = *ppixg = *ppixb = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", procName, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", procName); mincount = (sx * sy) / 3; } /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", procName, 1); } pixGetBackgroundRGBMap(pixs, pixim, pixg, sx, sy, thresh, mincount, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return ERROR_INT("not all pixm* made", procName, 1); } *ppixr = pixGetInvBackgroundMap(pixmr, bgval, smoothx, smoothy); *ppixg = pixGetInvBackgroundMap(pixmg, bgval, smoothx, smoothy); *ppixb = pixGetInvBackgroundMap(pixmb, bgval, smoothx, smoothy); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return 0; } /*! * pixBackgroundNormGrayArrayMorph() * * Input: pixs (8 bpp grayscale) * pixim ( 1 bpp 'image' mask; can be null) * reduction (at which morph closings are done; between 2 and 16) * size (of square Sel for the closing; use an odd number) * bgval (target bg val; typ. > 128) * &pixd ( 16 bpp array of inverted background value) * Return: 0 if OK, 1 on error * * Notes: * (1) See notes in pixBackgroundNormMorph(). * (2) This returns a 16 bpp pix that can be used by * pixApplyInvBackgroundGrayMap() to generate a normalized version * of the input pixs. */ l_int32 pixBackgroundNormGrayArrayMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixd) { l_int32 allfg; PIX *pixm; PROCNAME("pixBackgroundNormGrayArrayMorph"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("pixs not 8 bpp", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); if (reduction < 2 || reduction > 16) return ERROR_INT("reduction must be between 2 and 16", procName, 1); /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", procName, 1); } pixGetBackgroundGrayMapMorph(pixs, pixim, reduction, size, &pixm); if (!pixm) return ERROR_INT("pixm not made", procName, 1); *ppixd = pixGetInvBackgroundMap(pixm, bgval, 0, 0); pixDestroy(&pixm); return 0; } /*! * pixBackgroundNormRGBArraysMorph() * * Input: pixs (32 bpp rgb) * pixim ( 1 bpp 'image' mask; can be null) * reduction (at which morph closings are done; between 2 and 16) * size (of square Sel for the closing; use an odd number) * bgval (target bg val; typ. > 128) * &pixr ( 16 bpp array of inverted R background value) * &pixg ( 16 bpp array of inverted G background value) * &pixb ( 16 bpp array of inverted B background value) * Return: 0 if OK, 1 on error * * Notes: * (1) See notes in pixBackgroundNormMorph(). * (2) This returns a set of three 16 bpp pix that can be used by * pixApplyInvBackgroundGrayMap() to generate a normalized version * of each component of the input pixs. */ l_int32 pixBackgroundNormRGBArraysMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, l_int32 bgval, PIX **ppixr, PIX **ppixg, PIX **ppixb) { l_int32 allfg; PIX *pixmr, *pixmg, *pixmb; PROCNAME("pixBackgroundNormRGBArraysMorph"); if (!ppixr || !ppixg || !ppixb) return ERROR_INT("&pixr, &pixg, &pixb not all defined", procName, 1); *ppixr = *ppixg = *ppixb = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); if (reduction < 2 || reduction > 16) return ERROR_INT("reduction must be between 2 and 16", procName, 1); /* If pixim exists, verify that it is not all foreground. */ if (pixim) { pixInvert(pixim, pixim); pixZero(pixim, &allfg); pixInvert(pixim, pixim); if (allfg) return ERROR_INT("pixim all foreground", procName, 1); } pixGetBackgroundRGBMapMorph(pixs, pixim, reduction, size, &pixmr, &pixmg, &pixmb); if (!pixmr || !pixmg || !pixmb) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return ERROR_INT("not all pixm* made", procName, 1); } *ppixr = pixGetInvBackgroundMap(pixmr, bgval, 0, 0); *ppixg = pixGetInvBackgroundMap(pixmg, bgval, 0, 0); *ppixb = pixGetInvBackgroundMap(pixmb, bgval, 0, 0); pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); return 0; } /*------------------------------------------------------------------* * Measurement of local background * *------------------------------------------------------------------*/ /*! * pixGetBackgroundGrayMap() * * Input: pixs (8 bpp grayscale; not cmapped) * pixim ( 1 bpp 'image' mask; can be null; it * should not have all foreground pixels) * sx, sy (tile size in pixels) * thresh (threshold for determining foreground) * mincount (min threshold on counts in a tile) * &pixd ( 8 bpp grayscale map) * Return: 0 if OK, 1 on error * * Notes: * (1) The background is measured in regions that don't have * images. It is then propagated into the image regions, * and finally smoothed in each image region. */ l_int32 pixGetBackgroundGrayMap(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixd) { l_int32 w, h, wd, hd, wim, him, wpls, wplim, wpld, wplf; l_int32 xim, yim, delx, nx, ny, i, j, k, m; l_int32 count, sum, val8; l_int32 empty, fgpixels; l_uint32 *datas, *dataim, *datad, *dataf, *lines, *lineim, *lined, *linef; l_float32 scalex, scaley; PIX *pixd, *piximi, *pixb, *pixf, *pixims; PROCNAME("pixGetBackgroundGrayMap"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", procName, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", procName); mincount = (sx * sy) / 3; } /* Evaluate the 'image' mask, pixim, and make sure * it is not all fg. */ fgpixels = 0; /* boolean for existence of fg pixels in the image mask. */ if (pixim) { piximi = pixInvert(NULL, pixim); /* set non-'image' pixels to 1 */ pixZero(piximi, &empty); pixDestroy(&piximi); if (empty) return ERROR_INT("pixim all fg; no background", procName, 1); pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Generate the foreground mask, pixf, which is at * full resolution. These pixels will be ignored when * computing the background values. */ pixb = pixThresholdToBinary(pixs, thresh); pixf = pixMorphSequence(pixb, "d7.1 + d1.7", 0); pixDestroy(&pixb); /* ------------- Set up the output map pixd --------------- */ /* Generate pixd, which is reduced by the factors (sx, sy). */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); wd = (w + sx - 1) / sx; hd = (h + sy - 1) / sy; pixd = pixCreate(wd, hd, 8); /* Note: we only compute map values in tiles that are complete. * In general, tiles at right and bottom edges will not be * complete, and we must fill them in later. */ nx = w / sx; ny = h / sy; wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); wplf = pixGetWpl(pixf); dataf = pixGetData(pixf); for (i = 0; i < ny; i++) { lines = datas + sy * i * wpls; linef = dataf + sy * i * wplf; lined = datad + i * wpld; for (j = 0; j < nx; j++) { delx = j * sx; sum = 0; count = 0; for (k = 0; k < sy; k++) { for (m = 0; m < sx; m++) { if (GET_DATA_BIT(linef + k * wplf, delx + m) == 0) { sum += GET_DATA_BYTE(lines + k * wpls, delx + m); count++; } } } if (count >= mincount) { val8 = sum / count; SET_DATA_BYTE(lined, j, val8); } } } pixDestroy(&pixf); /* If there is an optional mask with fg pixels, erase the previous * calculation for the corresponding map pixels, setting the * map values to 0. Then, when all the map holes are filled, * these erased pixels will be set by the surrounding map values. * * The calculation here is relatively efficient: for each pixel * in pixd (which corresponds to a tile of mask pixels in pixim) * we look only at the pixel in pixim that is at the center * of the tile. If the mask pixel is ON, we reset the map * pixel in pixd to 0, so that it can later be filled in. */ pixims = NULL; if (pixim && fgpixels) { wim = pixGetWidth(pixim); him = pixGetHeight(pixim); dataim = pixGetData(pixim); wplim = pixGetWpl(pixim); for (i = 0; i < ny; i++) { yim = i * sy + sy / 2; if (yim >= him) break; lineim = dataim + yim * wplim; for (j = 0; j < nx; j++) { xim = j * sx + sx / 2; if (xim >= wim) break; if (GET_DATA_BIT(lineim, xim)) pixSetPixel(pixd, j, i, 0); } } } /* Fill all the holes in the map. */ if (pixFillMapHoles(pixd, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixd); L_WARNING("can't make the map\n", procName); return 1; } /* Finally, for each connected region corresponding to the * 'image' mask, reset all pixels to their average value. * Each of these components represents an image (or part of one) * in the input, and this smooths the background values * in each of these regions. */ if (pixim && fgpixels) { scalex = 1. / (l_float32)sx; scaley = 1. / (l_float32)sy; pixims = pixScaleBySampling(pixim, scalex, scaley); pixSmoothConnectedRegions(pixd, pixims, 2); pixDestroy(&pixims); } *ppixd = pixd; return 0; } /*! * pixGetBackgroundRGBMap() * * Input: pixs (32 bpp rgb) * pixim ( 1 bpp 'image' mask; can be null; it * should not have all foreground pixels) * pixg ( 8 bpp grayscale version; can be null) * sx, sy (tile size in pixels) * thresh (threshold for determining foreground) * mincount (min threshold on counts in a tile) * &pixmr, &pixmg, &pixmb ( rgb maps) * Return: 0 if OK, 1 on error * * Notes: * (1) If pixg, which is a grayscale version of pixs, is provided, * use this internally to generate the foreground mask. * Otherwise, a grayscale version of pixs will be generated * from the green component only, used, and destroyed. */ l_int32 pixGetBackgroundRGBMap(PIX *pixs, PIX *pixim, PIX *pixg, l_int32 sx, l_int32 sy, l_int32 thresh, l_int32 mincount, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb) { l_int32 w, h, wm, hm, wim, him, wpls, wplim, wplf; l_int32 xim, yim, delx, nx, ny, i, j, k, m; l_int32 count, rsum, gsum, bsum, rval, gval, bval; l_int32 empty, fgpixels; l_uint32 pixel; l_uint32 *datas, *dataim, *dataf, *lines, *lineim, *linef; l_float32 scalex, scaley; PIX *piximi, *pixgc, *pixb, *pixf, *pixims; PIX *pixmr, *pixmg, *pixmb; PROCNAME("pixGetBackgroundRGBMap"); if (!ppixmr || !ppixmg || !ppixmb) return ERROR_INT("&pixm* not all defined", procName, 1); *ppixmr = *ppixmg = *ppixmb = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); if (sx < 4 || sy < 4) return ERROR_INT("sx and sy must be >= 4", procName, 1); if (mincount > sx * sy) { L_WARNING("mincount too large for tile size\n", procName); mincount = (sx * sy) / 3; } /* Evaluate the mask pixim and make sure it is not all foreground */ fgpixels = 0; /* boolean for existence of fg mask pixels */ if (pixim) { piximi = pixInvert(NULL, pixim); /* set non-'image' pixels to 1 */ pixZero(piximi, &empty); pixDestroy(&piximi); if (empty) return ERROR_INT("pixim all fg; no background", procName, 1); pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Generate the foreground mask. These pixels will be * ignored when computing the background values. */ if (pixg) /* use the input grayscale version if it is provided */ pixgc = pixClone(pixg); else pixgc = pixConvertRGBToGrayFast(pixs); pixb = pixThresholdToBinary(pixgc, thresh); pixf = pixMorphSequence(pixb, "d7.1 + d1.7", 0); pixDestroy(&pixgc); pixDestroy(&pixb); /* Generate the output mask images */ w = pixGetWidth(pixs); h = pixGetHeight(pixs); wm = (w + sx - 1) / sx; hm = (h + sy - 1) / sy; pixmr = pixCreate(wm, hm, 8); pixmg = pixCreate(wm, hm, 8); pixmb = pixCreate(wm, hm, 8); /* ------------- Set up the mapping images --------------- */ /* Note: we only compute map values in tiles that are complete. * In general, tiles at right and bottom edges will not be * complete, and we must fill them in later. */ nx = w / sx; ny = h / sy; wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wplf = pixGetWpl(pixf); dataf = pixGetData(pixf); for (i = 0; i < ny; i++) { lines = datas + sy * i * wpls; linef = dataf + sy * i * wplf; for (j = 0; j < nx; j++) { delx = j * sx; rsum = gsum = bsum = 0; count = 0; for (k = 0; k < sy; k++) { for (m = 0; m < sx; m++) { if (GET_DATA_BIT(linef + k * wplf, delx + m) == 0) { pixel = *(lines + k * wpls + delx + m); rsum += (pixel >> 24); gsum += ((pixel >> 16) & 0xff); bsum += ((pixel >> 8) & 0xff); count++; } } } if (count >= mincount) { rval = rsum / count; gval = gsum / count; bval = bsum / count; pixSetPixel(pixmr, j, i, rval); pixSetPixel(pixmg, j, i, gval); pixSetPixel(pixmb, j, i, bval); } } } pixDestroy(&pixf); /* If there is an optional mask with fg pixels, erase the previous * calculation for the corresponding map pixels, setting the * map values in each of the 3 color maps to 0. Then, when * all the map holes are filled, these erased pixels will * be set by the surrounding map values. */ if (pixim) { wim = pixGetWidth(pixim); him = pixGetHeight(pixim); dataim = pixGetData(pixim); wplim = pixGetWpl(pixim); for (i = 0; i < ny; i++) { yim = i * sy + sy / 2; if (yim >= him) break; lineim = dataim + yim * wplim; for (j = 0; j < nx; j++) { xim = j * sx + sx / 2; if (xim >= wim) break; if (GET_DATA_BIT(lineim, xim)) { pixSetPixel(pixmr, j, i, 0); pixSetPixel(pixmg, j, i, 0); pixSetPixel(pixmb, j, i, 0); } } } } /* ----------------- Now fill in the holes ----------------------- */ if (pixFillMapHoles(pixmr, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmg, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmb, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); L_WARNING("can't make the maps\n", procName); return 1; } /* Finally, for each connected region corresponding to the * fg mask, reset all pixels to their average value. */ if (pixim && fgpixels) { scalex = 1. / (l_float32)sx; scaley = 1. / (l_float32)sy; pixims = pixScaleBySampling(pixim, scalex, scaley); pixSmoothConnectedRegions(pixmr, pixims, 2); pixSmoothConnectedRegions(pixmg, pixims, 2); pixSmoothConnectedRegions(pixmb, pixims, 2); pixDestroy(&pixims); } *ppixmr = pixmr; *ppixmg = pixmg; *ppixmb = pixmb; return 0; } /*! * pixGetBackgroundGrayMapMorph() * * Input: pixs (8 bpp grayscale; not cmapped) * pixim ( 1 bpp 'image' mask; can be null; it * should not have all foreground pixels) * reduction (factor at which closing is performed) * size (of square Sel for the closing; use an odd number) * &pixm ( grayscale map) * Return: 0 if OK, 1 on error */ l_int32 pixGetBackgroundGrayMapMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixm) { l_int32 nx, ny, empty, fgpixels; l_float32 scale; PIX *pixm, *pixt1, *pixt2, *pixt3, *pixims; PROCNAME("pixGetBackgroundGrayMapMorph"); if (!ppixm) return ERROR_INT("&pixm not defined", procName, 1); *ppixm = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); /* Evaluate the mask pixim and make sure it is not all foreground. */ fgpixels = 0; /* boolean for existence of fg mask pixels */ if (pixim) { pixInvert(pixim, pixim); /* set background pixels to 1 */ pixZero(pixim, &empty); if (empty) return ERROR_INT("pixim all fg; no background", procName, 1); pixInvert(pixim, pixim); /* revert to original mask */ pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Downscale as requested and do the closing to get the background. */ scale = 1. / (l_float32)reduction; pixt1 = pixScaleBySampling(pixs, scale, scale); pixt2 = pixCloseGray(pixt1, size, size); pixt3 = pixExtendByReplication(pixt2, 1, 1); /* Downscale the image mask, if any, and remove it from the * background. These pixels will be filled in (twice). */ pixims = NULL; if (pixim) { pixims = pixScale(pixim, scale, scale); pixm = pixConvertTo8(pixims, FALSE); pixAnd(pixm, pixm, pixt3); } else pixm = pixClone(pixt3); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* Fill all the holes in the map. */ nx = pixGetWidth(pixs) / reduction; ny = pixGetHeight(pixs) / reduction; if (pixFillMapHoles(pixm, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixm); L_WARNING("can't make the map\n", procName); return 1; } /* Finally, for each connected region corresponding to the * fg mask, reset all pixels to their average value. */ if (pixim && fgpixels) { pixSmoothConnectedRegions(pixm, pixims, 2); pixDestroy(&pixims); } *ppixm = pixm; return 0; } /*! * pixGetBackgroundRGBMapMorph() * * Input: pixs (32 bpp rgb) * pixim ( 1 bpp 'image' mask; can be null; it * should not have all foreground pixels) * reduction (factor at which closing is performed) * size (of square Sel for the closing; use an odd number) * &pixmr ( red component map) * &pixmg ( green component map) * &pixmb ( blue component map) * Return: 0 if OK, 1 on error */ l_int32 pixGetBackgroundRGBMapMorph(PIX *pixs, PIX *pixim, l_int32 reduction, l_int32 size, PIX **ppixmr, PIX **ppixmg, PIX **ppixmb) { l_int32 nx, ny, empty, fgpixels; l_float32 scale; PIX *pixm, *pixmr, *pixmg, *pixmb, *pixt1, *pixt2, *pixt3, *pixims; PROCNAME("pixGetBackgroundRGBMapMorph"); if (!ppixmr || !ppixmg || !ppixmb) return ERROR_INT("&pixm* not all defined", procName, 1); *ppixmr = *ppixmg = *ppixmb = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); /* Generate an 8 bpp version of the image mask, if it exists */ scale = 1. / (l_float32)reduction; pixm = NULL; if (pixim) { pixims = pixScale(pixim, scale, scale); pixm = pixConvertTo8(pixims, FALSE); } /* Evaluate the mask pixim and make sure it is not all foreground. */ fgpixels = 0; /* boolean for existence of fg mask pixels */ if (pixim) { pixInvert(pixim, pixim); /* set background pixels to 1 */ pixZero(pixim, &empty); if (empty) return ERROR_INT("pixim all fg; no background", procName, 1); pixInvert(pixim, pixim); /* revert to original mask */ pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* Downscale as requested and do the closing to get the background. * Then remove the image mask pixels from the background. They * will be filled in (twice) later. Do this for all 3 components. */ pixt1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_RED); pixt2 = pixCloseGray(pixt1, size, size); pixt3 = pixExtendByReplication(pixt2, 1, 1); if (pixim) pixmr = pixAnd(NULL, pixm, pixt3); else pixmr = pixClone(pixt3); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixt1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_GREEN); pixt2 = pixCloseGray(pixt1, size, size); pixt3 = pixExtendByReplication(pixt2, 1, 1); if (pixim) pixmg = pixAnd(NULL, pixm, pixt3); else pixmg = pixClone(pixt3); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); pixt1 = pixScaleRGBToGrayFast(pixs, reduction, COLOR_BLUE); pixt2 = pixCloseGray(pixt1, size, size); pixt3 = pixExtendByReplication(pixt2, 1, 1); if (pixim) pixmb = pixAnd(NULL, pixm, pixt3); else pixmb = pixClone(pixt3); pixDestroy(&pixm); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* Fill all the holes in the three maps. */ nx = pixGetWidth(pixs) / reduction; ny = pixGetHeight(pixs) / reduction; if (pixFillMapHoles(pixmr, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmg, nx, ny, L_FILL_BLACK) || pixFillMapHoles(pixmb, nx, ny, L_FILL_BLACK)) { pixDestroy(&pixmr); pixDestroy(&pixmg); pixDestroy(&pixmb); L_WARNING("can't make the maps\n", procName); return 1; } /* Finally, for each connected region corresponding to the * fg mask in each component, reset all pixels to their * average value. */ if (pixim && fgpixels) { pixSmoothConnectedRegions(pixmr, pixims, 2); pixSmoothConnectedRegions(pixmg, pixims, 2); pixSmoothConnectedRegions(pixmb, pixims, 2); pixDestroy(&pixims); } *ppixmr = pixmr; *ppixmg = pixmg; *ppixmb = pixmb; return 0; } /*! * pixFillMapHoles() * * Input: pix (8 bpp; a map, with one pixel for each tile in * a larger image) * nx (number of horizontal pixel tiles that are entirely * covered with pixels in the original source image) * ny (ditto for the number of vertical pixel tiles) * filltype (L_FILL_WHITE or L_FILL_BLACK) * Return: 0 if OK, 1 on error * * Notes: * (1) This is an in-place operation on pix (the map). pix is * typically a low-resolution version of some other image * from which it was derived, where each pixel in pix * corresponds to a rectangular tile (say, m x n) of pixels * in the larger image. All we need to know about the larger * image is whether or not the rightmost column and bottommost * row of pixels in pix correspond to tiles that are * only partially covered by pixels in the larger image. * (2) Typically, some number of pixels in the input map are * not known, and their values must be determined by near * pixels that are known. These unknown pixels are the 'holes'. * They can take on only two values, 0 and 255, and the * instruction about which to fill is given by the filltype flag. * (3) The "holes" can come from two sources. The first is when there * are not enough foreground or background pixels in a tile; * the second is when a tile is at least partially covered * by an image mask. If we're filling holes in a fg mask, * the holes are initialized to black (0) and use L_FILL_BLACK. * For filling holes in a bg mask, initialize the holes to * white (255) and use L_FILL_WHITE. * (4) If w is the map width, nx = w or nx = w - 1; ditto for h and ny. */ l_int32 pixFillMapHoles(PIX *pix, l_int32 nx, l_int32 ny, l_int32 filltype) { l_int32 w, h, y, nmiss, goodcol, i, j, found, ival, valtest; l_uint32 val, lastval; NUMA *na; /* indicates if there is any data in the column */ PIX *pixt; PROCNAME("pixFillMapHoles"); if (!pix || pixGetDepth(pix) != 8) return ERROR_INT("pix not defined or not 8 bpp", procName, 1); if (pixGetColormap(pix)) return ERROR_INT("pix is colormapped", procName, 1); /* ------------- Fill holes in the mapping image columns ----------- */ pixGetDimensions(pix, &w, &h, NULL); na = numaCreate(0); /* holds flag for which columns have data */ nmiss = 0; valtest = (filltype == L_FILL_WHITE) ? 255 : 0; for (j = 0; j < nx; j++) { /* do it by columns */ found = FALSE; for (i = 0; i < ny; i++) { pixGetPixel(pix, j, i, &val); if (val != valtest) { y = i; found = TRUE; break; } } if (found == FALSE) { numaAddNumber(na, 0); /* no data in the column */ nmiss++; } else { numaAddNumber(na, 1); /* data in the column */ for (i = y - 1; i >= 0; i--) /* replicate upwards to top */ pixSetPixel(pix, j, i, val); pixGetPixel(pix, j, 0, &lastval); for (i = 1; i < h; i++) { /* set going down to bottom */ pixGetPixel(pix, j, i, &val); if (val == valtest) pixSetPixel(pix, j, i, lastval); else lastval = val; } } } numaAddNumber(na, 0); /* last column */ if (nmiss == nx) { /* no data in any column! */ numaDestroy(&na); L_WARNING("no bg found; no data in any column\n", procName); return 1; } /* ---------- Fill in missing columns by replication ----------- */ if (nmiss > 0) { /* replicate columns */ pixt = pixCopy(NULL, pix); /* Find the first good column */ goodcol = 0; for (j = 0; j < w; j++) { numaGetIValue(na, j, &ival); if (ival == 1) { goodcol = j; break; } } if (goodcol > 0) { /* copy cols backward */ for (j = goodcol - 1; j >= 0; j--) { pixRasterop(pix, j, 0, 1, h, PIX_SRC, pixt, j + 1, 0); pixRasterop(pixt, j, 0, 1, h, PIX_SRC, pix, j, 0); } } for (j = goodcol + 1; j < w; j++) { /* copy cols forward */ numaGetIValue(na, j, &ival); if (ival == 0) { /* Copy the column to the left of j */ pixRasterop(pix, j, 0, 1, h, PIX_SRC, pixt, j - 1, 0); pixRasterop(pixt, j, 0, 1, h, PIX_SRC, pix, j, 0); } } pixDestroy(&pixt); } if (w > nx) { /* replicate the last column */ for (i = 0; i < h; i++) { pixGetPixel(pix, w - 2, i, &val); pixSetPixel(pix, w - 1, i, val); } } numaDestroy(&na); return 0; } /*! * pixExtendByReplication() * * Input: pixs (8 bpp) * addw (number of extra pixels horizontally to add) * addh (number of extra pixels vertically to add) * Return: pixd (extended with replicated pixel values), or null on error * * Notes: * (1) The pixel values are extended to the left and down, as required. */ PIX * pixExtendByReplication(PIX *pixs, l_int32 addw, l_int32 addh) { l_int32 w, h, i, j; l_uint32 val; PIX *pixd; PROCNAME("pixExtendByReplication"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (addw == 0 && addh == 0) return pixCopy(NULL, pixs); pixGetDimensions(pixs, &w, &h, NULL); if ((pixd = pixCreate(w + addw, h + addh, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixRasterop(pixd, 0, 0, w, h, PIX_SRC, pixs, 0, 0); if (addw > 0) { for (i = 0; i < h; i++) { pixGetPixel(pixd, w - 1, i, &val); for (j = 0; j < addw; j++) pixSetPixel(pixd, w + j, i, val); } } if (addh > 0) { for (j = 0; j < w + addw; j++) { pixGetPixel(pixd, j, h - 1, &val); for (i = 0; i < addh; i++) pixSetPixel(pixd, j, h + i, val); } } return pixd; } /*! * pixSmoothConnectedRegions() * * Input: pixs (8 bpp grayscale; no colormap) * pixm ( 1 bpp; if null, this is a no-op) * factor (subsampling factor for getting average; >= 1) * Return: 0 if OK, 1 on error * * Notes: * (1) The pixels in pixs corresponding to those in each * 8-connected region in the mask are set to the average value. * (2) This is required for adaptive mapping to avoid the * generation of stripes in the background map, due to * variations in the pixel values near the edges of mask regions. * (3) This function is optimized for background smoothing, where * there are a relatively small number of components. It will * be inefficient if used where there are many small components. */ l_int32 pixSmoothConnectedRegions(PIX *pixs, PIX *pixm, l_int32 factor) { l_int32 empty, i, n, x, y; l_float32 aveval; BOXA *boxa; PIX *pixmc; PIXA *pixa; PROCNAME("pixSmoothConnectedRegions"); if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs has colormap", procName, 1); if (!pixm) { L_INFO("pixm not defined\n", procName); return 0; } if (pixGetDepth(pixm) != 1) return ERROR_INT("pixm not 1 bpp", procName, 1); pixZero(pixm, &empty); if (empty) { L_INFO("pixm has no fg pixels; nothing to do\n", procName); return 0; } boxa = pixConnComp(pixm, &pixa, 8); n = boxaGetCount(boxa); for (i = 0; i < n; i++) { if ((pixmc = pixaGetPix(pixa, i, L_CLONE)) == NULL) { L_WARNING("missing pixmc!\n", procName); continue; } boxaGetBoxGeometry(boxa, i, &x, &y, NULL, NULL); pixGetAverageMasked(pixs, pixmc, x, y, factor, L_MEAN_ABSVAL, &aveval); pixPaintThroughMask(pixs, pixmc, x, y, (l_int32)aveval); pixDestroy(&pixmc); } boxaDestroy(&boxa); pixaDestroy(&pixa); return 0; } /*------------------------------------------------------------------* * Measurement of local foreground * *------------------------------------------------------------------*/ #if 0 /* Not working properly: do not use */ /*! * pixGetForegroundGrayMap() * * Input: pixs (8 bpp) * pixim ( 1 bpp 'image' mask; can be null) * sx, sy (src tile size, in pixels) * thresh (threshold for determining foreground) * &pixd ( 8 bpp grayscale map) * Return: 0 if OK, 1 on error * * Notes: * (1) Each (sx, sy) tile of pixs gets mapped to one pixel in pixd. * (2) pixd is the estimate of the fg (darkest) value within each tile. * (3) All pixels in pixd that are in 'image' regions, as specified * by pixim, are given the background value 0. * (4) For pixels in pixd that can't directly be given a fg value, * the value is inferred by propagating from neighboring pixels. * (5) In practice, pixd can be used to normalize the fg, and * it can be done after background normalization. * (6) The overall procedure is: * - reduce 2x by sampling * - paint all 'image' pixels white, so that they don't * participate in the Min reduction * - do a further (sx, sy) Min reduction -- think of * it as a large opening followed by subsampling by the * reduction factors * - threshold the result to identify fg, and set the * bg pixels to 255 (these are 'holes') * - fill holes by propagation from fg values * - replicatively expand by 2x, arriving at the final * resolution of pixd * - smooth with a 17x17 kernel * - paint the 'image' regions black */ l_int32 pixGetForegroundGrayMap(PIX *pixs, PIX *pixim, l_int32 sx, l_int32 sy, l_int32 thresh, PIX **ppixd) { l_int32 w, h, d, wd, hd; l_int32 empty, fgpixels; PIX *pixd, *piximi, *pixim2, *pixims, *pixs2, *pixb, *pixt1, *pixt2, *pixt3; PROCNAME("pixGetForegroundGrayMap"); if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return ERROR_INT("pixs not 8 bpp", procName, 1); if (pixim && pixGetDepth(pixim) != 1) return ERROR_INT("pixim not 1 bpp", procName, 1); if (sx < 2 || sy < 2) return ERROR_INT("sx and sy must be >= 2", procName, 1); /* Generate pixd, which is reduced by the factors (sx, sy). */ wd = (w + sx - 1) / sx; hd = (h + sy - 1) / sy; pixd = pixCreate(wd, hd, 8); *ppixd = pixd; /* Evaluate the 'image' mask, pixim. If it is all fg, * the output pixd has all pixels with value 0. */ fgpixels = 0; /* boolean for existence of fg pixels in the image mask. */ if (pixim) { piximi = pixInvert(NULL, pixim); /* set non-image pixels to 1 */ pixZero(piximi, &empty); pixDestroy(&piximi); if (empty) /* all 'image'; return with all pixels set to 0 */ return 0; pixZero(pixim, &empty); if (!empty) /* there are fg pixels in pixim */ fgpixels = 1; } /* 2x subsampling; paint white through 'image' mask. */ pixs2 = pixScaleBySampling(pixs, 0.5, 0.5); if (pixim && fgpixels) { pixim2 = pixReduceBinary2(pixim, NULL); pixPaintThroughMask(pixs2, pixim2, 0, 0, 255); pixDestroy(&pixim2); } /* Min (erosion) downscaling; total reduction (4 sx, 4 sy). */ pixt1 = pixScaleGrayMinMax(pixs2, sx, sy, L_CHOOSE_MIN); /* pixDisplay(pixt1, 300, 200); */ /* Threshold to identify fg; paint bg pixels to white. */ pixb = pixThresholdToBinary(pixt1, thresh); /* fg pixels */ pixInvert(pixb, pixb); pixPaintThroughMask(pixt1, pixb, 0, 0, 255); pixDestroy(&pixb); /* Replicative expansion by 2x to (sx, sy). */ pixt2 = pixExpandReplicate(pixt1, 2); /* pixDisplay(pixt2, 500, 200); */ /* Fill holes in the fg by propagation */ pixFillMapHoles(pixt2, w / sx, h / sy, L_FILL_WHITE); /* pixDisplay(pixt2, 700, 200); */ /* Smooth with 17x17 kernel. */ pixt3 = pixBlockconv(pixt2, 8, 8); pixRasterop(pixd, 0, 0, wd, hd, PIX_SRC, pixt3, 0, 0); /* Paint the image parts black. */ pixims = pixScaleBySampling(pixim, 1. / sx, 1. / sy); pixPaintThroughMask(pixd, pixims, 0, 0, 0); pixDestroy(&pixs2); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); return 0; } #endif /* Not working properly: do not use */ /*------------------------------------------------------------------* * Generate inverted background map * *------------------------------------------------------------------*/ /*! * pixGetInvBackgroundMap() * * Input: pixs (8 bpp grayscale; no colormap) * bgval (target bg val; typ. > 128) * smoothx (half-width of block convolution kernel width) * smoothy (half-width of block convolution kernel height) * Return: pixd (16 bpp), or null on error * * Note: * - bgval should typically be > 120 and < 240 * - pixd is a normalization image; the original image is * multiplied by pixd and the result is divided by 256. */ PIX * pixGetInvBackgroundMap(PIX *pixs, l_int32 bgval, l_int32 smoothx, l_int32 smoothy) { l_int32 w, h, wplsm, wpld, i, j; l_int32 val, val16; l_uint32 *datasm, *datad, *linesm, *lined; PIX *pixsm, *pixd; PROCNAME("pixGetInvBackgroundMap"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (w < 5 || h < 5) return (PIX *)ERROR_PTR("w and h must be >= 5", procName, NULL); /* smooth the map image */ pixsm = pixBlockconv(pixs, smoothx, smoothy); datasm = pixGetData(pixsm); wplsm = pixGetWpl(pixsm); /* invert the map image, scaling up to preserve dynamic range */ pixd = pixCreate(w, h, 16); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { linesm = datasm + i * wplsm; lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linesm, j); if (val > 0) val16 = (256 * bgval) / val; else { /* shouldn't happen */ L_WARNING("smoothed bg has 0 pixel!\n", procName); val16 = bgval / 2; } SET_DATA_TWO_BYTES(lined, j, val16); } } pixDestroy(&pixsm); return pixd; } /*------------------------------------------------------------------* * Apply background map to image * *------------------------------------------------------------------*/ /*! * pixApplyInvBackgroundGrayMap() * * Input: pixs (8 bpp grayscale; no colormap) * pixm (16 bpp, inverse background map) * sx (tile width in pixels) * sy (tile height in pixels) * Return: pixd (8 bpp), or null on error */ PIX * pixApplyInvBackgroundGrayMap(PIX *pixs, PIX *pixm, l_int32 sx, l_int32 sy) { l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff; l_int32 vals, vald; l_uint32 val16; l_uint32 *datas, *datad, *lines, *lined, *flines, *flined; PIX *pixd; PROCNAME("pixApplyInvBackgroundGrayMap"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); if (!pixm || pixGetDepth(pixm) != 16) return (PIX *)ERROR_PTR("pixm undefined or not 16 bpp", procName, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("invalid sx and/or sy", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixGetDimensions(pixs, &w, &h, NULL); pixGetDimensions(pixm, &wm, &hm, NULL); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hm; i++) { lines = datas + sy * i * wpls; lined = datad + sy * i * wpld; yoff = sy * i; for (j = 0; j < wm; j++) { pixGetPixel(pixm, j, i, &val16); xoff = sx * j; for (k = 0; k < sy && yoff + k < h; k++) { flines = lines + k * wpls; flined = lined + k * wpld; for (m = 0; m < sx && xoff + m < w; m++) { vals = GET_DATA_BYTE(flines, xoff + m); vald = (vals * val16) / 256; vald = L_MIN(vald, 255); SET_DATA_BYTE(flined, xoff + m, vald); } } } } return pixd; } /*! * pixApplyInvBackgroundRGBMap() * * Input: pixs (32 bpp rbg) * pixmr (16 bpp, red inverse background map) * pixmg (16 bpp, green inverse background map) * pixmb (16 bpp, blue inverse background map) * sx (tile width in pixels) * sy (tile height in pixels) * Return: pixd (32 bpp rbg), or null on error */ PIX * pixApplyInvBackgroundRGBMap(PIX *pixs, PIX *pixmr, PIX *pixmg, PIX *pixmb, l_int32 sx, l_int32 sy) { l_int32 w, h, wm, hm, wpls, wpld, i, j, k, m, xoff, yoff; l_int32 rvald, gvald, bvald; l_uint32 vals; l_uint32 rval16, gval16, bval16; l_uint32 *datas, *datad, *lines, *lined, *flines, *flined; PIX *pixd; PROCNAME("pixApplyInvBackgroundRGBMap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (!pixmr || !pixmg || !pixmb) return (PIX *)ERROR_PTR("pix maps not all defined", procName, NULL); if (pixGetDepth(pixmr) != 16 || pixGetDepth(pixmg) != 16 || pixGetDepth(pixmb) != 16) return (PIX *)ERROR_PTR("pix maps not all 16 bpp", procName, NULL); if (sx == 0 || sy == 0) return (PIX *)ERROR_PTR("invalid sx and/or sy", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); w = pixGetWidth(pixs); h = pixGetHeight(pixs); wm = pixGetWidth(pixmr); hm = pixGetHeight(pixmr); pixd = pixCreateTemplate(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < hm; i++) { lines = datas + sy * i * wpls; lined = datad + sy * i * wpld; yoff = sy * i; for (j = 0; j < wm; j++) { pixGetPixel(pixmr, j, i, &rval16); pixGetPixel(pixmg, j, i, &gval16); pixGetPixel(pixmb, j, i, &bval16); xoff = sx * j; for (k = 0; k < sy && yoff + k < h; k++) { flines = lines + k * wpls; flined = lined + k * wpld; for (m = 0; m < sx && xoff + m < w; m++) { vals = *(flines + xoff + m); rvald = ((vals >> 24) * rval16) / 256; rvald = L_MIN(rvald, 255); gvald = (((vals >> 16) & 0xff) * gval16) / 256; gvald = L_MIN(gvald, 255); bvald = (((vals >> 8) & 0xff) * bval16) / 256; bvald = L_MIN(bvald, 255); composeRGBPixel(rvald, gvald, bvald, flined + xoff + m); } } } } return pixd; } /*------------------------------------------------------------------* * Apply variable map * *------------------------------------------------------------------*/ /*! * pixApplyVariableGrayMap() * * Input: pixs (8 bpp) * pixg (8 bpp, variable map) * target (typ. 128 for threshold) * Return: pixd (8 bpp), or null on error * * Notes: * (1) Suppose you have an image that you want to transform based * on some photometric measurement at each point, such as the * threshold value for binarization. Representing the photometric * measurement as an image pixg, you can threshold in input image * using pixVarThresholdToBinary(). Alternatively, you can map * the input image pointwise so that the threshold over the * entire image becomes a constant, such as 128. For example, * if a pixel in pixg is 150 and the target is 128, the * corresponding pixel in pixs is mapped linearly to a value * (128/150) of the input value. If the resulting mapped image * pixd were then thresholded at 128, you would obtain the * same result as a direct binarization using pixg with * pixVarThresholdToBinary(). * (2) The sizes of pixs and pixg must be equal. */ PIX * pixApplyVariableGrayMap(PIX *pixs, PIX *pixg, l_int32 target) { l_int32 i, j, w, h, d, wpls, wplg, wpld, vals, valg, vald; l_uint8 *lut; l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined; l_float32 fval; PIX *pixd; PROCNAME("pixApplyVariableGrayMap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixg) return (PIX *)ERROR_PTR("pixg not defined", procName, NULL); if (!pixSizesEqual(pixs, pixg)) return (PIX *)ERROR_PTR("pix sizes not equal", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("depth not 8 bpp", procName, NULL); /* Generate a LUT for the mapping if the image is large enough * to warrant the overhead. The LUT is of size 2^16. For the * index to the table, get the MSB from pixs and the LSB from pixg. * Note: this LUT is bigger than the typical 32K L1 cache, so * we expect cache misses. L2 latencies are about 5ns. But * division is slooooow. For large images, this function is about * 4x faster when using the LUT. C'est la vie. */ lut = NULL; if (w * h > 100000) { /* more pixels than 2^16 */ if ((lut = (l_uint8 *)CALLOC(0x10000, sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("lut not made", procName, NULL); for (i = 0; i < 256; i++) { for (j = 0; j < 256; j++) { fval = (l_float32)(i * target) / (j + 0.5); lut[(i << 8) + j] = L_MIN(255, (l_int32)(fval + 0.5)); } } } pixd = pixCreateNoInit(w, h, 8); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); for (i = 0; i < h; i++) { lines = datas + i * wpls; lineg = datag + i * wplg; lined = datad + i * wpld; if (lut) { for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valg = GET_DATA_BYTE(lineg, j); vald = lut[(vals << 8) + valg]; SET_DATA_BYTE(lined, j, vald); } } else { for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valg = GET_DATA_BYTE(lineg, j); fval = (l_float32)(vals * target) / (valg + 0.5); vald = L_MIN(255, (l_int32)(fval + 0.5)); SET_DATA_BYTE(lined, j, vald); } } } if (lut) FREE(lut); return pixd; } /*------------------------------------------------------------------* * Non-adaptive (global) mapping * *------------------------------------------------------------------*/ /*! * pixGlobalNormRGB() * * Input: pixd ( null, existing or equal to pixs) * pixs (32 bpp rgb, or colormapped) * rval, gval, bval (pixel values in pixs that are * linearly mapped to mapval) * mapval (use 255 for mapping to white) * Return: pixd (32 bpp rgb or colormapped), or null on error * * Notes: * (1) The value of pixd determines if the results are written to a * new pix (use NULL), in-place to pixs (use pixs), or to some * other existing pix. * (2) This does a global normalization of an image where the * r,g,b color components are not balanced. Thus, white in pixs is * represented by a set of r,g,b values that are not all 255. * (3) The input values (rval, gval, bval) should be chosen to * represent the gray color (mapval, mapval, mapval) in src. * Thus, this function will map (rval, gval, bval) to that gray color. * (4) Typically, mapval = 255, so that (rval, gval, bval) * corresponds to the white point of src. In that case, these * parameters should be chosen so that few pixels have higher values. * (5) In all cases, we do a linear TRC separately on each of the * components, saturating at 255. * (6) If the input pix is 8 bpp without a colormap, you can get * this functionality with mapval = 255 by calling: * pixGammaTRC(pixd, pixs, 1.0, 0, bgval); * where bgval is the value you want to be mapped to 255. * Or more generally, if you want bgval to be mapped to mapval: * pixGammaTRC(pixd, pixs, 1.0, 0, 255 * bgval / mapval); */ PIX * pixGlobalNormRGB(PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 mapval) { l_int32 w, h, d, i, j, ncolors, rv, gv, bv, wpl; l_int32 *rarray, *garray, *barray; l_uint32 *data, *line; NUMA *nar, *nag, *nab; PIXCMAP *cmap; PROCNAME("pixGlobalNormRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); cmap = pixGetColormap(pixs); pixGetDimensions(pixs, &w, &h, &d); if (!cmap && d != 32) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (mapval <= 0) { L_WARNING("mapval must be > 0; setting to 255\n", procName); mapval = 255; } /* Prepare pixd to be a copy of pixs */ if ((pixd = pixCopy(pixd, pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); /* Generate the TRC maps for each component. Make sure the * upper range for each color is greater than zero. */ nar = numaGammaTRC(1.0, 0, L_MAX(1, 255 * rval / mapval)); nag = numaGammaTRC(1.0, 0, L_MAX(1, 255 * gval / mapval)); nab = numaGammaTRC(1.0, 0, L_MAX(1, 255 * bval / mapval)); if (!nar || !nag || !nab) return (PIX *)ERROR_PTR("trc maps not all made", procName, pixd); /* Extract copies of the internal arrays */ rarray = numaGetIArray(nar); garray = numaGetIArray(nag); barray = numaGetIArray(nab); if (!rarray || !garray || !barray) return (PIX *)ERROR_PTR("*arrays not all made", procName, pixd); if (cmap) { ncolors = pixcmapGetCount(cmap); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rv, &gv, &bv); pixcmapResetColor(cmap, i, rarray[rv], garray[gv], barray[bv]); } } else { data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { extractRGBValues(line[j], &rv, &gv, &bv); composeRGBPixel(rarray[rv], garray[gv], barray[bv], line + j); } } } numaDestroy(&nar); numaDestroy(&nag); numaDestroy(&nab); FREE(rarray); FREE(garray); FREE(barray); return pixd; } /*! * pixGlobalNormNoSatRGB() * * Input: pixd ( null, existing or equal to pixs) * pixs (32 bpp rgb) * rval, gval, bval (pixel values in pixs that are * linearly mapped to mapval; but see below) * factor (subsampling factor; integer >= 1) * rank (between 0.0 and 1.0; typ. use a value near 1.0) * Return: pixd (32 bpp rgb), or null on error * * Notes: * (1) This is a version of pixGlobalNormRGB(), where the output * intensity is scaled back so that a controlled fraction of * pixel components is allowed to saturate. See comments in * pixGlobalNormRGB(). * (2) The value of pixd determines if the results are written to a * new pix (use NULL), in-place to pixs (use pixs), or to some * other existing pix. * (3) This does a global normalization of an image where the * r,g,b color components are not balanced. Thus, white in pixs is * represented by a set of r,g,b values that are not all 255. * (4) The input values (rval, gval, bval) can be chosen to be the * color that, after normalization, becomes white background. * For images that are mostly background, the closer these values * are to the median component values, the closer the resulting * background will be to gray, becoming white at the brightest places. * (5) The mapval used in pixGlobalNormRGB() is computed here to * avoid saturation of any component in the image (save for a * fraction of the pixels given by the input rank value). */ PIX * pixGlobalNormNoSatRGB(PIX *pixd, PIX *pixs, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 factor, l_float32 rank) { l_int32 mapval; l_float32 rankrval, rankgval, rankbval; l_float32 rfract, gfract, bfract, maxfract; PROCNAME("pixGlobalNormNoSatRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (factor < 1) return (PIX *)ERROR_PTR("sampling factor < 1", procName, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank not in [0.0 ... 1.0]", procName, NULL); if (rval <= 0 || gval <= 0 || bval <= 0) return (PIX *)ERROR_PTR("invalid estim. color values", procName, NULL); /* The max value for each component may be larger than the * input estimated background value. In that case, mapping * for those pixels would saturate. To prevent saturation, * we compute the fraction for each component by which we * would oversaturate. Then take the max of these, and * reduce, uniformly over all components, the output intensity * by this value. Then no component will saturate. * In practice, if rank < 1.0, a fraction of pixels * may have a component saturate. By keeping rank close to 1.0, * that fraction can be made arbitrarily small. */ pixGetRankValueMaskedRGB(pixs, NULL, 0, 0, factor, rank, &rankrval, &rankgval, &rankbval); rfract = rankrval / (l_float32)rval; gfract = rankgval / (l_float32)gval; bfract = rankbval / (l_float32)bval; maxfract = L_MAX(rfract, gfract); maxfract = L_MAX(maxfract, bfract); #if DEBUG_GLOBAL fprintf(stderr, "rankrval = %7.2f, rankgval = %7.2f, rankbval = %7.2f\n", rankrval, rankgval, rankbval); fprintf(stderr, "rfract = %7.4f, gfract = %7.4f, bfract = %7.4f\n", rfract, gfract, bfract); #endif /* DEBUG_GLOBAL */ mapval = (l_int32)(255. / maxfract); pixd = pixGlobalNormRGB(pixd, pixs, rval, gval, bval, mapval); return pixd; } /*------------------------------------------------------------------* * Adaptive threshold spread normalization * *------------------------------------------------------------------*/ /*! * pixThresholdSpreadNorm() * * Input: pixs (8 bpp grayscale; not colormapped) * filtertype (L_SOBEL_EDGE or L_TWO_SIDED_EDGE); * edgethresh (threshold on magnitude of edge filter; typ 10-20) * smoothx, smoothy (half-width of convolution kernel applied to * spread threshold: use 0 for no smoothing) * gamma (gamma correction; typ. about 0.7) * minval (input value that gives 0 for output; typ. -25) * maxval (input value that gives 255 for output; typ. 255) * targetthresh (target threshold for normalization) * &pixth ( computed local threshold value) * &pixb ( thresholded normalized image) * &pixd ( normalized image) * Return: 0 if OK, 1 on error * * Notes: * (1) The basis of this approach is the use of seed spreading * on a (possibly) sparse set of estimates for the local threshold. * The resulting dense estimates are smoothed by convolution * and used to either threshold the input image or normalize it * with a local transformation that linearly maps the pixels so * that the local threshold estimate becomes constant over the * resulting image. This approach is one of several that * have been suggested (and implemented) by Ray Smith. * (2) You can use either the Sobel or TwoSided edge filters. * The results appear to be similar, using typical values * of edgethresh in the rang 10-20. * (3) To skip the trc enhancement, use gamma = 1.0, minval = 0 * and maxval = 255. * (4) For the normalized image pixd, each pixel is linearly mapped * in such a way that the local threshold is equal to targetthresh. * (5) The full width and height of the convolution kernel * are (2 * smoothx + 1) and (2 * smoothy + 1). * (6) This function can be used with the pixtiling utility if the * images are too large. See pixOtsuAdaptiveThreshold() for * an example of this. */ l_int32 pixThresholdSpreadNorm(PIX *pixs, l_int32 filtertype, l_int32 edgethresh, l_int32 smoothx, l_int32 smoothy, l_float32 gamma, l_int32 minval, l_int32 maxval, l_int32 targetthresh, PIX **ppixth, PIX **ppixb, PIX **ppixd) { PIX *pixe, *pixet, *pixsd, *pixg1, *pixg2, *pixth; PROCNAME("pixThresholdSpreadNorm"); if (ppixth) *ppixth = NULL; if (ppixb) *ppixb = NULL; if (ppixd) *ppixd = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); if (!ppixth && !ppixb && !ppixd) return ERROR_INT("no output requested", procName, 1); if (filtertype != L_SOBEL_EDGE && filtertype != L_TWO_SIDED_EDGE) return ERROR_INT("invalid filter type", procName, 1); /* Get the thresholded edge pixels. These are the ones * that have values in pixs near the local optimal fg/bg threshold. */ if (filtertype == L_SOBEL_EDGE) pixe = pixSobelEdgeFilter(pixs, L_VERTICAL_EDGES); else /* L_TWO_SIDED_EDGE */ pixe = pixTwoSidedEdgeFilter(pixs, L_VERTICAL_EDGES); pixet = pixThresholdToBinary(pixe, edgethresh); pixInvert(pixet, pixet); /* Build a seed image whose only nonzero values are those * values of pixs corresponding to pixels in the fg of pixet. */ pixsd = pixCreateTemplate(pixs); pixCombineMasked(pixsd, pixs, pixet); /* Spread the seed and optionally smooth to reduce noise */ pixg1 = pixSeedspread(pixsd, 4); pixg2 = pixBlockconv(pixg1, smoothx, smoothy); /* Optionally do a gamma enhancement */ pixth = pixGammaTRC(NULL, pixg2, gamma, minval, maxval); /* Do the mapping and thresholding */ if (ppixd) { *ppixd = pixApplyVariableGrayMap(pixs, pixth, targetthresh); if (ppixb) *ppixb = pixThresholdToBinary(*ppixd, targetthresh); } else if (ppixb) *ppixb = pixVarThresholdToBinary(pixs, pixth); if (ppixth) *ppixth = pixth; else pixDestroy(&pixth); pixDestroy(&pixe); pixDestroy(&pixet); pixDestroy(&pixsd); pixDestroy(&pixg1); pixDestroy(&pixg2); return 0; } /*------------------------------------------------------------------* * Adaptive background normalization (flexible adaptaption) * *------------------------------------------------------------------*/ /*! * pixBackgroundNormFlex() * * Input: pixs (8 bpp grayscale; not colormapped) * sx, sy (desired tile dimensions; actual size may vary; use * values between 3 and 10) * smoothx, smoothy (half-width of convolution kernel applied to * threshold array: use values between 1 and 3) * delta (difference parameter in basin filling; use 0 * to skip) * Return: pixd (8 bpp, background-normalized), or null on error) * * Notes: * (1) This does adaptation flexibly to a quickly varying background. * For that reason, all input parameters should be small. * (2) sx and sy give the tile size; they should be in [5 - 7]. * (3) The full width and height of the convolution kernel * are (2 * smoothx + 1) and (2 * smoothy + 1). They * should be in [1 - 2]. * (4) Basin filling is used to fill the large fg regions. The * parameter @delta measures the height that the black * background is raised from the local minima. By raising * the background, it is possible to threshold the large * fg regions to foreground. If @delta is too large, * bg regions will be lifted, causing thickening of * the fg regions. Use 0 to skip. */ PIX * pixBackgroundNormFlex(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 smoothx, l_int32 smoothy, l_int32 delta) { l_float32 scalex, scaley; PIX *pixt, *pixsd, *pixmin, *pixbg, *pixbgi, *pixd; PROCNAME("pixBackgroundNormFlex"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, NULL); if (sx < 3 || sy < 3) return (PIX *)ERROR_PTR("sx and/or sy less than 3", procName, NULL); if (sx > 10 || sy > 10) return (PIX *)ERROR_PTR("sx and/or sy exceed 10", procName, NULL); if (smoothx < 1 || smoothy < 1) return (PIX *)ERROR_PTR("smooth params less than 1", procName, NULL); if (smoothx > 3 || smoothy > 3) return (PIX *)ERROR_PTR("smooth params exceed 3", procName, NULL); /* Generate the bg estimate using smoothed average with subsampling */ scalex = 1. / (l_float32)sx; scaley = 1. / (l_float32)sy; pixt = pixScaleSmooth(pixs, scalex, scaley); /* Do basin filling on the bg estimate if requested */ if (delta <= 0) pixsd = pixClone(pixt); else { pixLocalExtrema(pixt, 0, 0, &pixmin, NULL); pixsd = pixSeedfillGrayBasin(pixmin, pixt, delta, 4); pixDestroy(&pixmin); } pixbg = pixExtendByReplication(pixsd, 1, 1); /* Map the bg to 200 */ pixbgi = pixGetInvBackgroundMap(pixbg, 200, smoothx, smoothy); pixd = pixApplyInvBackgroundGrayMap(pixs, pixbgi, sx, sy); pixDestroy(&pixt); pixDestroy(&pixsd); pixDestroy(&pixbg); pixDestroy(&pixbgi); return pixd; } /*------------------------------------------------------------------* * Adaptive contrast normalization * *------------------------------------------------------------------*/ /*! * pixContrastNorm() * * Input: pixd ( 8 bpp; null or equal to pixs) * pixs (8 bpp grayscale; not colormapped) * sx, sy (tile dimensions) * mindiff (minimum difference to accept as valid) * smoothx, smoothy (half-width of convolution kernel applied to * min and max arrays: use 0 for no smoothing) * Return: pixd always * * Notes: * (1) This function adaptively attempts to expand the contrast * to the full dynamic range in each tile. If the contrast in * a tile is smaller than @mindiff, it uses the min and max * pixel values from neighboring tiles. It also can use * convolution to smooth the min and max values from * neighboring tiles. After all that processing, it is * possible that the actual pixel values in the tile are outside * the computed [min ... max] range for local contrast * normalization. Such pixels are taken to be at either 0 * (if below the min) or 255 (if above the max). * (2) pixd can be equal to pixs (in-place operation) or * null (makes a new pixd). * (3) sx and sy give the tile size; they are typically at least 20. * (4) mindiff is used to eliminate results for tiles where it is * likely that either fg or bg is missing. A value around 50 * or more is reasonable. * (5) The full width and height of the convolution kernel * are (2 * smoothx + 1) and (2 * smoothy + 1). Some smoothing * is typically useful, and we limit the smoothing half-widths * to the range from 0 to 8. * (6) A linear TRC (gamma = 1.0) is applied to increase the contrast * in each tile. The result can subsequently be globally corrected, * by applying pixGammaTRC() with arbitrary values of gamma * and the 0 and 255 points of the mapping. */ PIX * pixContrastNorm(PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy) { PIX *pixmin, *pixmax; PROCNAME("pixContrastNorm"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, pixd); if (sx < 5 || sy < 5) return (PIX *)ERROR_PTR("sx and/or sy less than 5", procName, pixd); if (smoothx < 0 || smoothy < 0) return (PIX *)ERROR_PTR("smooth params less than 0", procName, pixd); if (smoothx > 8 || smoothy > 8) return (PIX *)ERROR_PTR("smooth params exceed 8", procName, pixd); /* Get the min and max pixel values in each tile, and represent * each value as a pixel in pixmin and pixmax, respectively. */ pixMinMaxTiles(pixs, sx, sy, mindiff, smoothx, smoothy, &pixmin, &pixmax); /* For each tile, do a linear expansion of the dynamic range * of pixels so that the min value is mapped to 0 and the * max value is mapped to 255. */ pixd = pixLinearTRCTiled(pixd, pixs, sx, sy, pixmin, pixmax); pixDestroy(&pixmin); pixDestroy(&pixmax); return pixd; } /*! * pixMinMaxTiles() * * Input: pixs (8 bpp grayscale; not colormapped) * sx, sy (tile dimensions) * mindiff (minimum difference to accept as valid) * smoothx, smoothy (half-width of convolution kernel applied to * min and max arrays: use 0 for no smoothing) * &pixmin ( tiled minima) * &pixmax ( tiled maxima) * Return: 0 if OK, 1 on error * * Notes: * (1) This computes filtered and smoothed values for the min and * max pixel values in each tile of the image. * (2) See pixContrastNorm() for usage. */ l_int32 pixMinMaxTiles(PIX *pixs, l_int32 sx, l_int32 sy, l_int32 mindiff, l_int32 smoothx, l_int32 smoothy, PIX **ppixmin, PIX **ppixmax) { l_int32 w, h; PIX *pixmin1, *pixmax1, *pixmin2, *pixmax2; PROCNAME("pixMinMaxTiles"); if (!ppixmin || !ppixmax) return ERROR_INT("&pixmin or &pixmax undefined", procName, 1); *ppixmin = *ppixmax = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs undefined or not 8 bpp", procName, 1); if (pixGetColormap(pixs)) return ERROR_INT("pixs is colormapped", procName, 1); if (sx < 5 || sy < 5) return ERROR_INT("sx and/or sy less than 3", procName, 1); if (smoothx < 0 || smoothy < 0) return ERROR_INT("smooth params less than 0", procName, 1); if (smoothx > 5 || smoothy > 5) return ERROR_INT("smooth params exceed 5", procName, 1); /* Get the min and max values in each tile */ pixmin1 = pixScaleGrayMinMax(pixs, sx, sy, L_CHOOSE_MIN); pixmax1 = pixScaleGrayMinMax(pixs, sx, sy, L_CHOOSE_MAX); pixmin2 = pixExtendByReplication(pixmin1, 1, 1); pixmax2 = pixExtendByReplication(pixmax1, 1, 1); pixDestroy(&pixmin1); pixDestroy(&pixmax1); /* Make sure no value is 0 */ pixAddConstantGray(pixmin2, 1); pixAddConstantGray(pixmax2, 1); /* Generate holes where the contrast is too small */ pixSetLowContrast(pixmin2, pixmax2, mindiff); /* Fill the holes (0 values) */ pixGetDimensions(pixmin2, &w, &h, NULL); pixFillMapHoles(pixmin2, w, h, L_FILL_BLACK); pixFillMapHoles(pixmax2, w, h, L_FILL_BLACK); /* Smooth if requested */ if (smoothx > 0 || smoothy > 0) { smoothx = L_MIN(smoothx, (w - 1) / 2); smoothy = L_MIN(smoothy, (h - 1) / 2); *ppixmin = pixBlockconv(pixmin2, smoothx, smoothy); *ppixmax = pixBlockconv(pixmax2, smoothx, smoothy); } else { *ppixmin = pixClone(pixmin2); *ppixmax = pixClone(pixmax2); } pixDestroy(&pixmin2); pixDestroy(&pixmax2); return 0; } /*! * pixSetLowContrast() * * Input: pixs1 (8 bpp) * pixs2 (8 bpp) * mindiff (minimum difference to accept as valid) * Return: 0 if OK; 1 if no pixel diffs are large enough, or on error * * Notes: * (1) This compares corresponding pixels in pixs1 and pixs2. * When they differ by less than @mindiff, set the pixel * values to 0 in each. Each pixel typically represents a tile * in a larger image, and a very small difference between * the min and max in the tile indicates that the min and max * values are not to be trusted. * (2) If contrast (pixel difference) detection is expected to fail, * caller should check return value. */ l_int32 pixSetLowContrast(PIX *pixs1, PIX *pixs2, l_int32 mindiff) { l_int32 i, j, w, h, d, wpl, val1, val2, found; l_uint32 *data1, *data2, *line1, *line2; PROCNAME("pixSetLowContrast"); if (!pixs1 || !pixs2) return ERROR_INT("pixs1 and pixs2 not both defined", procName, 1); if (pixSizesEqual(pixs1, pixs2) == 0) return ERROR_INT("pixs1 and pixs2 not equal size", procName, 1); pixGetDimensions(pixs1, &w, &h, &d); if (d != 8) return ERROR_INT("depth not 8 bpp", procName, 1); if (mindiff > 254) return 0; data1 = pixGetData(pixs1); data2 = pixGetData(pixs2); wpl = pixGetWpl(pixs1); found = 0; /* init to not finding any diffs >= mindiff */ for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(line1, j); val2 = GET_DATA_BYTE(line2, j); if (L_ABS(val1 - val2) >= mindiff) { found = 1; break; } } if (found) break; } if (!found) { L_WARNING("no pixel pair diffs as large as mindiff\n", procName); pixClearAll(pixs1); pixClearAll(pixs2); return 1; } for (i = 0; i < h; i++) { line1 = data1 + i * wpl; line2 = data2 + i * wpl; for (j = 0; j < w; j++) { val1 = GET_DATA_BYTE(line1, j); val2 = GET_DATA_BYTE(line2, j); if (L_ABS(val1 - val2) < mindiff) { SET_DATA_BYTE(line1, j, 0); SET_DATA_BYTE(line2, j, 0); } } } return 0; } /*! * pixLinearTRCTiled() * * Input: pixd ( 8 bpp) * pixs (8 bpp, not colormapped) * sx, sy (tile dimensions) * pixmin (pix of min values in tiles) * pixmax (pix of max values in tiles) * Return: pixd always * * Notes: * (1) pixd can be equal to pixs (in-place operation) or * null (makes a new pixd). * (2) sx and sy give the tile size; they are typically at least 20. * (3) pixmin and pixmax are generated by pixMinMaxTiles() * (4) For each tile, this does a linear expansion of the dynamic * range so that the min value in the tile becomes 0 and the * max value in the tile becomes 255. * (5) The LUTs that do the mapping are generated as needed * and stored for reuse in an integer array within the ptr array iaa[]. */ PIX * pixLinearTRCTiled(PIX *pixd, PIX *pixs, l_int32 sx, l_int32 sy, PIX *pixmin, PIX *pixmax) { l_int32 i, j, k, m, w, h, wt, ht, wpl, wplt, xoff, yoff; l_int32 minval, maxval, val, sval; l_int32 *ia; l_int32 **iaa; l_uint32 *data, *datamin, *datamax, *line, *tline, *linemin, *linemax; PROCNAME("pixLinearTRCTiled"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, pixd); if (pixd && pixd != pixs) return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); if (pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs is colormapped", procName, pixd); if (!pixmin || !pixmax) return (PIX *)ERROR_PTR("pixmin & pixmax not defined", procName, pixd); if (sx < 5 || sy < 5) return (PIX *)ERROR_PTR("sx and/or sy less than 5", procName, pixd); pixd = pixCopy(pixd, pixs); iaa = (l_int32 **)CALLOC(256, sizeof(l_int32 *)); pixGetDimensions(pixd, &w, &h, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); datamin = pixGetData(pixmin); datamax = pixGetData(pixmax); wplt = pixGetWpl(pixmin); pixGetDimensions(pixmin, &wt, &ht, NULL); for (i = 0; i < ht; i++) { line = data + sy * i * wpl; linemin = datamin + i * wplt; linemax = datamax + i * wplt; yoff = sy * i; for (j = 0; j < wt; j++) { xoff = sx * j; minval = GET_DATA_BYTE(linemin, j); maxval = GET_DATA_BYTE(linemax, j); if (maxval == minval) { /* this is bad */ /* fprintf(stderr, "should't happen! i,j = %d,%d, minval = %d\n", i, j, minval); */ continue; } ia = iaaGetLinearTRC(iaa, maxval - minval); for (k = 0; k < sy && yoff + k < h; k++) { tline = line + k * wpl; for (m = 0; m < sx && xoff + m < w; m++) { val = GET_DATA_BYTE(tline, xoff + m); sval = val - minval; sval = L_MAX(0, sval); SET_DATA_BYTE(tline, xoff + m, ia[sval]); } } } } for (i = 0; i < 256; i++) if (iaa[i]) FREE(iaa[i]); FREE(iaa); return pixd; } /*! * iaaGetLinearTRC() * * Input: iaa (bare array of ptrs to l_int32) * diff (between min and max pixel values that are * to be mapped to 0 and 255) * Return: ia (LUT with input (val - minval) and output a * value between 0 and 255) */ static l_int32 * iaaGetLinearTRC(l_int32 **iaa, l_int32 diff) { l_int32 i; l_int32 *ia; l_float32 factor; PROCNAME("iaaGetLinearTRC"); if (!iaa) return (l_int32 *)ERROR_PTR("iaa not defined", procName, NULL); if (iaa[diff] != NULL) /* already have it */ return iaa[diff]; if ((ia = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("ia not made", procName, NULL); iaa[diff] = ia; if (diff == 0) { /* shouldn't happen */ for (i = 0; i < 256; i++) ia[i] = 128; } else { factor = 255. / (l_float32)diff; for (i = 0; i < diff + 1; i++) ia[i] = (l_int32)(factor * i + 0.5); for (i = diff + 1; i < 256; i++) ia[i] = 255; } return ia; } leptonica-1.70/src/colorquant2.c0000644000175000017500000017247712244745167014747 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorquant2.c * * Modified median cut color quantization * * High level * PIX *pixMedianCutQuant() * PIX *pixMedianCutQuantGeneral() * PIX *pixMedianCutQuantMixed() * PIX *pixFewColorsMedianCutQuantMixed() * * Median cut indexed histogram * l_int32 *pixMedianCutHisto() * * Static helpers * static PIXCMAP *pixcmapGenerateFromHisto() * static PIX *pixQuantizeWithColormap() * static void getColorIndexMedianCut() * static L_BOX3D *pixGetColorRegion() * static l_int32 medianCutApply() * static PIXCMAP *pixcmapGenerateFromMedianCuts() * static l_int32 vboxGetAverageColor() * static l_int32 vboxGetCount() * static l_int32 vboxGetVolume() * static L_BOX3D *box3dCreate(); * static L_BOX3D *box3dCopy(); * * Paul Heckbert published the median cut algorithm, "Color Image * Quantization for Frame Buffer Display," in Proc. SIGGRAPH '82, * Boston, July 1982, pp. 297-307. A copy of the paper without * figures can be found on the web. * * Median cut starts with either the full color space or the occupied * region of color space. If you're not dithering, the occupied region * can be used, but with dithering, pixels can end up in any place * in the color space, so you must represent the entire color space in * the final colormap. * * Color components are quantized to typically 5 or 6 significant * bits (for each of r, g and b). Call a 3D region of color * space a 'vbox'. Any color in this quantized space is represented * by an element of a linear histogram array, indexed by rgb value. * The initial region is then divided into two regions that have roughly * equal pixel occupancy (hence the name "median cut"). Subdivision * continues until the requisite number of vboxes has been generated. * * But the devil is in the details of the subdivision process. * Here are some choices that you must make: * (1) Along which axis to subdivide? * (2) Which box to put the bin with the median pixel? * (3) How to order the boxes for subdivision? * (4) How to adequately handle boxes with very small numbers of pixels? * (5) How to prevent a little-represented but highly visible color * from being masked out by other colors in its vbox. * * Taking these in order: * (1) Heckbert suggests using either the largest vbox side, or the vbox * side with the largest variance in pixel occupancy. We choose * to divide based on the largest vbox side. * (2) Suppose you've chosen a side. Then you have a histogram * of pixel occupancy in 2D slices of the vbox. One of those * slices includes the median pixel. Suppose there are L bins * to the left (smaller index) and R bins to the right. Then * this slice (or bin) should be assigned to the box containing * the smaller of L and R. This both shortens the larger * of the subdivided dimensions and helps a low-count color * far from the subdivision boundary to better express itself. * (2a) One can also ask if the boundary should be moved even * farther into the longer side. This is feasable if we have * a method for doing extra subdivisions on the high count * vboxes. And we do (see (3)). * (3) To make sure that the boxes are subdivided toward equal * occupancy, use an occupancy-sorted priority queue, rather * than a simple queue. * (4) With a priority queue, boxes with small number of pixels * won't be repeatedly subdivided. This is good. * (5) Use of a priority queue allows tricks such as in (2a) to let * small occupancy clusters be better expressed. In addition, * rather than splitting near the median, small occupancy colors * are best reproduced by cutting half-way into the longer side. * * However, serious problems can arise with dithering if a priority * queue is used based on population alone. If the picture has * large regions of nearly constant color, some vboxes can be very * large and have a sizeable population (but not big enough to get to * the head of the queue). If one of these large, occupied vboxes * is near in color to a nearly constant color region of the * image, dithering can inject pixels from the large vbox into * the nearly uniform region. These pixels can be very far away * in color, and the oscillations are highly visible. To prevent * this, we can take either or both of these actions: * * (1) Subdivide a fraction (< 1.0) based on population, and * do the rest of the subdivision based on the product of * the vbox volume and its population. By using the product, * we avoid further subdivision of nearly empty vboxes, and * directly target large vboxes with significant population. * * (2) Threshold the excess color transferred in dithering to * neighboring pixels. * * Doing either of these will stop the most annoying oscillations * in dithering. Furthermore, by doing (1), we also improve the * rendering of regions of nearly constant color, both with and * without dithering. It turns out that the image quality is * not sensitive to the value of the parameter in (1); values * between 0.3 and 0.9 give very good results. * * Here's the lesson: subdivide the color space into vboxes such * that (1) the most populated vboxes that can be further * subdivided (i.e., that occupy more than one quantum volume * in color space) all have approximately the same population, * and (2) all large vboxes have no significant population. * If these conditions are met, the quantization will be excellent. * * Once the subdivision has been made, the colormap is generated, * with one color for each vbox and using the average color in the vbox. * At the same time, the histogram array is converted to an inverse * colormap table, storing the colormap index in every cell in the * vbox. Finally, using both the colormap and the inverse colormap, * a colormapped pix is quickly generated from the original rgb pix. * * In the present implementation, subdivided regions of colorspace * that are not occupied are retained, but not further subdivided. * This is required for our inverse colormap lookup table for * dithering, because dithered pixels may fall into these unoccupied * regions. For such empty regions, we use the center as the rgb * colormap value. * * This variation on median cut can be referred to as "Modified Median * Cut" quantization, or MMCQ. Overall, the undithered MMCQ gives * comparable results to the two-pass Octcube Quantizer (OQ). * Comparing the two methods on the test24.jpg painting, we see: * * (1) For rendering spot color (the various reds and pinks in * the image), MMCQ is not as good as OQ. * * (2) For rendering majority color regions, MMCQ does a better * job of avoiding posterization. That is, it does better * dividing the color space up in the most heavily populated regions. */ #include #include #include "allheaders.h" /* Median cut 3-d volume element. Sort on first element, which * can be the number of pixels, the volume or a combination * of these. */ struct L_Box3d { l_float32 sortparam; /* parameter on which to sort the vbox */ l_int32 npix; /* number of pixels in the vbox */ l_int32 vol; /* quantized volume of vbox */ l_int32 r1; /* min r index in the vbox */ l_int32 r2; /* max r index in the vbox */ l_int32 g1; /* min g index in the vbox */ l_int32 g2; /* max g index in the vbox */ l_int32 b1; /* min b index in the vbox */ l_int32 b2; /* max b index in the vbox */ }; typedef struct L_Box3d L_BOX3D; /* Static median cut helper functions */ static PIXCMAP *pixcmapGenerateFromHisto(PIX *pixs, l_int32 depth, l_int32 *histo, l_int32 histosize, l_int32 sigbits); static PIX *pixQuantizeWithColormap(PIX *pixs, l_int32 ditherflag, l_int32 outdepth, PIXCMAP *cmap, l_int32 *indexmap, l_int32 mapsize, l_int32 sigbits); static void getColorIndexMedianCut(l_uint32 pixel, l_int32 rshift, l_uint32 mask, l_int32 sigbits, l_int32 *pindex); static L_BOX3D *pixGetColorRegion(PIX *pixs, l_int32 sigbits, l_int32 subsample); static l_int32 medianCutApply(l_int32 *histo, l_int32 sigbits, L_BOX3D *vbox, L_BOX3D **pvbox1, L_BOX3D **pvbox2); static PIXCMAP *pixcmapGenerateFromMedianCuts(L_HEAP *lh, l_int32 *histo, l_int32 sigbits); static l_int32 vboxGetAverageColor(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval); static l_int32 vboxGetCount(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits); static l_int32 vboxGetVolume(L_BOX3D *vbox); static L_BOX3D *box3dCreate(l_int32 r1, l_int32 r2, l_int32 g1, l_int32 g2, l_int32 b1, l_int32 b2); static L_BOX3D *box3dCopy(L_BOX3D *vbox); /* 5 significant bits for each component is generally satisfactory */ static const l_int32 DEFAULT_SIG_BITS = 5; static const l_int32 MAX_ITERS_ALLOWED = 5000; /* prevents infinite looping */ /* Specify fraction of vboxes made that are sorted on population alone. * The remaining vboxes are sorted on (population * vbox-volume). */ static const l_float32 FRACT_BY_POPULATION = 0.85; /* To get the max value of 'dif' in the dithering color transfer, * divide DIF_CAP by 8. */ static const l_int32 DIF_CAP = 100; #ifndef NO_CONSOLE_IO #define DEBUG_MC_COLORS 0 #define DEBUG_SPLIT_AXES 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * High level * *------------------------------------------------------------------------*/ /*! * pixMedianCutQuant() * * Input: pixs (32 bpp; rgb color) * ditherflag (1 for dither; 0 for no dither) * Return: pixd (8 bit with colormap), or null on error * * Notes: * (1) Simple interface. See pixMedianCutQuantGeneral() for * use of defaulted parameters. */ PIX * pixMedianCutQuant(PIX *pixs, l_int32 ditherflag) { return pixMedianCutQuantGeneral(pixs, ditherflag, 0, 256, DEFAULT_SIG_BITS, 1, 1); } /*! * pixMedianCutQuantGeneral() * * Input: pixs (32 bpp; rgb color) * ditherflag (1 for dither; 0 for no dither) * outdepth (output depth; valid: 0, 1, 2, 4, 8) * maxcolors (between 2 and 256) * sigbits (valid: 5 or 6; use 0 for default) * maxsub (max subsampling, integer; use 0 for default; * 1 for no subsampling) * checkbw (1 to check if color content is very small, * 0 to assume there is sufficient color) * Return: pixd (8 bit with colormap), or null on error * * Notes: * (1) @maxcolors must be in the range [2 ... 256]. * (2) Use @outdepth = 0 to have the output depth computed as the * minimum required to hold the actual colors found, given * the @maxcolors constraint. * (3) Use @outdepth = 1, 2, 4 or 8 to specify the output depth. * In that case, @maxcolors must not exceed 2^(outdepth). * (4) If there are fewer quantized colors in the image than @maxcolors, * the colormap is simply generated from those colors. * (5) @maxsub is the maximum allowed subsampling to be used in the * computation of the color histogram and region of occupied * color space. The subsampling is chosen internally for * efficiency, based on the image size, but this parameter * limits it. Use @maxsub = 0 for the internal default, which is the * maximum allowed subsampling. Use @maxsub = 1 to prevent * subsampling. In general use @maxsub >= 1 to specify the * maximum subsampling to be allowed, where the actual subsampling * will be the minimum of this value and the internally * determined default value. * (6) If the image appears gray because either most of the pixels * are gray or most of the pixels are essentially black or white, * the image is trivially quantized with a grayscale colormap. The * reason is that median cut divides the color space into rectangular * regions, and it does a very poor job if all the pixels are * near the diagonal of the color space cube. */ PIX * pixMedianCutQuantGeneral(PIX *pixs, l_int32 ditherflag, l_int32 outdepth, l_int32 maxcolors, l_int32 sigbits, l_int32 maxsub, l_int32 checkbw) { l_int32 i, subsample, histosize, smalln, ncolors, niters, popcolors; l_int32 w, h, minside, factor, index, rval, gval, bval; l_int32 *histo; l_float32 pixfract, colorfract; L_BOX3D *vbox, *vbox1, *vbox2; L_HEAP *lh, *lhs; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixMedianCutQuantGeneral"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (maxcolors < 2 || maxcolors > 256) return (PIX *)ERROR_PTR("maxcolors not in [2...256]", procName, NULL); if (outdepth != 0 && outdepth != 1 && outdepth != 2 && outdepth != 4 && outdepth != 8) return (PIX *)ERROR_PTR("outdepth not in {0,1,2,4,8}", procName, NULL); if (outdepth > 0 && (maxcolors > (1 << outdepth))) return (PIX *)ERROR_PTR("maxcolors > 2^(outdepth)", procName, NULL); if (sigbits == 0) sigbits = DEFAULT_SIG_BITS; else if (sigbits < 5 || sigbits > 6) return (PIX *)ERROR_PTR("sigbits not 5 or 6", procName, NULL); if (maxsub <= 0) maxsub = 10; /* default will prevail for 10^7 pixels or less */ /* Determine if the image has sufficient color content. * If pixfract << 1, most pixels are close to black or white. * If colorfract << 1, the pixels that are not near * black or white have very little color. * If with little color, quantize with a grayscale colormap. */ pixGetDimensions(pixs, &w, &h, NULL); if (checkbw) { minside = L_MIN(w, h); factor = L_MAX(1, minside / 400); pixColorFraction(pixs, 20, 244, 20, factor, &pixfract, &colorfract); if (pixfract * colorfract < 0.00025) { L_INFO("\n Pixel fraction neither white nor black = %6.3f" "\n Color fraction of those pixels = %6.3f" "\n Quantizing in gray\n", procName, pixfract, colorfract); return pixConvertTo8(pixs, 1); } } /* Compute the color space histogram. Default sampling * is about 10^5 pixels. */ if (maxsub == 1) { subsample = 1; } else { subsample = (l_int32)(sqrt((l_float64)(w * h) / 100000.)); subsample = L_MAX(1, L_MIN(maxsub, subsample)); } histo = pixMedianCutHisto(pixs, sigbits, subsample); histosize = 1 << (3 * sigbits); /* See if the number of quantized colors is less than maxcolors */ ncolors = 0; smalln = TRUE; for (i = 0; i < histosize; i++) { if (histo[i]) ncolors++; if (ncolors > maxcolors) { smalln = FALSE; break; } } if (smalln) { /* finish up now */ if (outdepth == 0) { if (ncolors <= 2) outdepth = 1; else if (ncolors <= 4) outdepth = 2; else if (ncolors <= 16) outdepth = 4; else outdepth = 8; } cmap = pixcmapGenerateFromHisto(pixs, outdepth, histo, histosize, sigbits); pixd = pixQuantizeWithColormap(pixs, ditherflag, outdepth, cmap, histo, histosize, sigbits); FREE(histo); return pixd; } /* Initial vbox: minimum region in colorspace occupied by pixels */ if (ditherflag || subsample > 1) /* use full color space */ vbox = box3dCreate(0, (1 << sigbits) - 1, 0, (1 << sigbits) - 1, 0, (1 << sigbits) - 1); else vbox = pixGetColorRegion(pixs, sigbits, subsample); vbox->npix = vboxGetCount(vbox, histo, sigbits); vbox->vol = vboxGetVolume(vbox); /* For a fraction 'popcolors' of the desired 'maxcolors', * generate median cuts based on population, putting * everything on a priority queue sorted by population. */ lh = lheapCreate(0, L_SORT_DECREASING); lheapAdd(lh, vbox); ncolors = 1; niters = 0; popcolors = (l_int32)(FRACT_BY_POPULATION * maxcolors); while (1) { vbox = (L_BOX3D *)lheapRemove(lh); if (vboxGetCount(vbox, histo, sigbits) == 0) { /* just put it back */ lheapAdd(lh, vbox); continue; } medianCutApply(histo, sigbits, vbox, &vbox1, &vbox2); if (!vbox1) { L_WARNING("vbox1 not defined; shouldn't happen!\n", procName); break; } if (vbox1->vol > 1) vbox1->sortparam = vbox1->npix; FREE(vbox); lheapAdd(lh, vbox1); if (vbox2) { /* vbox2 can be NULL */ if (vbox2->vol > 1) vbox2->sortparam = vbox2->npix; lheapAdd(lh, vbox2); ncolors++; } if (ncolors >= popcolors) break; if (niters++ > MAX_ITERS_ALLOWED) { L_WARNING("infinite loop; perhaps too few pixels!\n", procName); break; } } /* Re-sort by the product of pixel occupancy times the size * in color space. */ lhs = lheapCreate(0, L_SORT_DECREASING); while ((vbox = (L_BOX3D *)lheapRemove(lh))) { vbox->sortparam = vbox->npix * vbox->vol; lheapAdd(lhs, vbox); } lheapDestroy(&lh, TRUE); /* For the remaining (maxcolors - popcolors), generate the * median cuts using the (npix * vol) sorting. */ while (1) { vbox = (L_BOX3D *)lheapRemove(lhs); if (vboxGetCount(vbox, histo, sigbits) == 0) { /* just put it back */ lheapAdd(lhs, vbox); continue; } medianCutApply(histo, sigbits, vbox, &vbox1, &vbox2); if (!vbox1) { L_WARNING("vbox1 not defined; shouldn't happen!\n", procName); break; } if (vbox1->vol > 1) vbox1->sortparam = vbox1->npix * vbox1->vol; FREE(vbox); lheapAdd(lhs, vbox1); if (vbox2) { /* vbox2 can be NULL */ if (vbox2->vol > 1) vbox2->sortparam = vbox2->npix * vbox2->vol; lheapAdd(lhs, vbox2); ncolors++; } if (ncolors >= maxcolors) break; if (niters++ > MAX_ITERS_ALLOWED) { L_WARNING("infinite loop; perhaps too few pixels!\n", procName); break; } } /* Re-sort by pixel occupancy. This is not necessary, * but it makes a more useful listing. */ lh = lheapCreate(0, L_SORT_DECREASING); while ((vbox = (L_BOX3D *)lheapRemove(lhs))) { vbox->sortparam = vbox->npix; /* vbox->sortparam = vbox->npix * vbox->vol; */ lheapAdd(lh, vbox); } lheapDestroy(&lhs, TRUE); /* Generate colormap from median cuts and quantize pixd */ cmap = pixcmapGenerateFromMedianCuts(lh, histo, sigbits); if (outdepth == 0) { ncolors = pixcmapGetCount(cmap); if (ncolors <= 2) outdepth = 1; else if (ncolors <= 4) outdepth = 2; else if (ncolors <= 16) outdepth = 4; else outdepth = 8; } pixd = pixQuantizeWithColormap(pixs, ditherflag, outdepth, cmap, histo, histosize, sigbits); /* Force darkest color to black if each component <= 4 */ pixcmapGetRankIntensity(cmap, 0.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval < 5 && gval < 5 && bval < 5) pixcmapResetColor(cmap, index, 0, 0, 0); /* Force lightest color to white if each component >= 252 */ pixcmapGetRankIntensity(cmap, 1.0, &index); pixcmapGetColor(cmap, index, &rval, &gval, &bval); if (rval > 251 && gval > 251 && bval > 251) pixcmapResetColor(cmap, index, 255, 255, 255); lheapDestroy(&lh, TRUE); FREE(histo); return pixd; } /*! * pixMedianCutQuantMixed() * * Input: pixs (32 bpp; rgb color) * ncolor (maximum number of colors assigned to pixels with * significant color) * ngray (number of gray colors to be used; must be >= 2) * darkthresh (threshold near black; if the lightest component * is below this, the pixel is not considered to * be gray or color; uses 0 for default) * lightthresh (threshold near white; if the darkest component * is above this, the pixel is not considered to * be gray or color; use 0 for default) * diffthresh (thresh for the max difference between component * values; for differences below this, the pixel * is considered to be gray; use 0 for default) * Return: pixd (8 bpp cmapped), or null on error * * Notes: * (1) ncolor + ngray must not exceed 255. * (2) The method makes use of pixMedianCutQuantGeneral() with * minimal addition. * (a) Preprocess the image, setting all pixels with little color * to black, and populating an auxiliary 8 bpp image with the * expected colormap values corresponding to the set of * quantized gray values. * (b) Color quantize the altered input image to n + 1 colors. * (c) Augment the colormap with the gray indices, and * substitute the gray quantized values from the auxiliary * image for those in the color quantized output that had * been quantized as black. * (3) Median cut color quantization is relatively poor for grayscale * images with many colors, when compared to octcube quantization. * Thus, for images with both gray and color, it is important * to quantize the gray pixels by another method. Here, we * are conservative in detecting color, preferring to use * a few extra bits to encode colorful pixels that push them * to gray. This is particularly reasonable with this function, * because it handles the gray and color pixels separately, * using median cut color quantization for the color pixels * and equal-bin grayscale quantization for the non-color pixels. */ PIX * pixMedianCutQuantMixed(PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh) { l_int32 i, j, w, h, wplc, wplg, wpld, nc, unused, iscolor, factor, minside; l_int32 rval, gval, bval, minval, maxval, val, grayval; l_float32 pixfract, colorfract; l_int32 *lut; l_uint32 *datac, *datag, *datad, *linec, *lineg, *lined; PIX *pixc, *pixg, *pixd; PIXCMAP *cmap; PROCNAME("pixMedianCutQuantMixed"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (ngray < 2) return (PIX *)ERROR_PTR("ngray < 2", procName, NULL); if (ncolor + ngray > 255) return (PIX *)ERROR_PTR("ncolor + ngray > 255", procName, NULL); if (darkthresh <= 0) darkthresh = 20; if (lightthresh <= 0) lightthresh = 244; if (diffthresh <= 0) diffthresh = 20; /* First check if this should be quantized in gray. * Use a more sensitive parameter for detecting color than with * pixMedianCutQuantGeneral(), because this function can handle * gray pixels well. */ pixGetDimensions(pixs, &w, &h, NULL); minside = L_MIN(w, h); factor = L_MAX(1, minside / 400); pixColorFraction(pixs, darkthresh, lightthresh, diffthresh, factor, &pixfract, &colorfract); if (pixfract * colorfract < 0.0001) { L_INFO("\n Pixel fraction neither white nor black = %6.3f" "\n Color fraction of those pixels = %6.3f" "\n Quantizing in gray\n", procName, pixfract, colorfract); pixg = pixConvertTo8(pixs, 0); pixd = pixThresholdOn8bpp(pixg, ngray, 1); pixDestroy(&pixg); return pixd; } /* OK, there is color in the image. * Preprocess to handle the gray pixels. Set the color pixels in pixc * to black, and store their (eventual) colormap indices in pixg.*/ pixc = pixCopy(NULL, pixs); pixg = pixCreate(w, h, 8); /* color pixels will remain 0 here */ datac = pixGetData(pixc); datag = pixGetData(pixg); wplc = pixGetWpl(pixc); wplg = pixGetWpl(pixg); lut = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) lut[i] = ncolor + 1 + (i * (ngray - 1) + 128) / 255; for (i = 0; i < h; i++) { linec = datac + i * wplc; lineg = datag + i * wplg; for (j = 0; j < w; j++) { iscolor = FALSE; extractRGBValues(linec[j], &rval, &gval, &bval); minval = L_MIN(rval, gval); minval = L_MIN(minval, bval); maxval = L_MAX(rval, gval); maxval = L_MAX(maxval, bval); if (maxval >= darkthresh && minval <= lightthresh && maxval - minval >= diffthresh) { iscolor = TRUE; } if (!iscolor) { linec[j] = 0x0; /* set to black */ grayval = (maxval + minval) / 2; SET_DATA_BYTE(lineg, j, lut[grayval]); } } } /* Median cut on color pixels plus black */ pixd = pixMedianCutQuantGeneral(pixc, FALSE, 8, ncolor + 1, DEFAULT_SIG_BITS, 1, 0); /* Augment the colormap with gray values. The new cmap * indices should agree with the values previously stored in pixg. */ cmap = pixGetColormap(pixd); nc = pixcmapGetCount(cmap); unused = ncolor + 1 - nc; if (unused < 0) L_ERROR("Too many colors: extra = %d\n", procName, -unused); if (unused > 0) { /* fill in with black; these won't be used */ L_INFO("%d unused colors\n", procName, unused); for (i = 0; i < unused; i++) pixcmapAddColor(cmap, 0, 0, 0); } for (i = 0; i < ngray; i++) { grayval = (255 * i) / (ngray - 1); pixcmapAddColor(cmap, grayval, grayval, grayval); } /* Substitute cmap indices for the gray pixels into pixd */ datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; lineg = datag + i * wplg; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lineg, j); /* if 0, it's a color pixel */ if (val) SET_DATA_BYTE(lined, j, val); } } pixDestroy(&pixc); pixDestroy(&pixg); FREE(lut); return pixd; } /*! * pixFewColorsMedianCutQuantMixed() * * Input: pixs (32 bpp rgb) * ncolor (number of colors to be assigned to pixels with * significant color) * ngray (number of gray colors to be used; must be >= 2) * maxncolors (maximum number of colors to be returned * from pixColorsForQuantization(); use 0 for default) * darkthresh (threshold near black; if the lightest component * is below this, the pixel is not considered to * be gray or color; use 0 for default) * lightthresh (threshold near white; if the darkest component * is above this, the pixel is not considered to * be gray or color; use 0 for default) * diffthresh (thresh for the max difference between component * values; for differences below this, the pixel * is considered to be gray; use 0 for default) * considered gray; use 0 for default) * Return: pixd (8 bpp, median cut quantized for pixels that are * not gray; gray pixels are quantized separately * over the full gray range); null if too many colors * or on error * * Notes: * (1) This is the "few colors" version of pixMedianCutQuantMixed(). * It fails (returns NULL) if it finds more than maxncolors, but * otherwise it gives the same result. * (2) Recommended input parameters are: * @maxncolors: 20 * @darkthresh: 20 * @lightthresh: 244 * @diffthresh: 15 (any higher can miss colors differing * slightly from gray) * (3) Both ncolor and ngray should be at least equal to maxncolors. * If they're not, they are automatically increased, and a * warning is given. * (4) If very little color content is found, the input is * converted to gray and quantized in equal intervals. * (5) This can be useful for quantizing orthographically generated * images such as color maps, where there may be more than 256 colors * because of aliasing or jpeg artifacts on text or lines, but * there are a relatively small number of solid colors. * (6) Example of usage: * // Try to quantize, using default values for mixed med cut * Pix *pixq = pixFewColorsMedianCutQuantMixed(pixs, 100, 20, * 0, 0, 0, 0); * if (!pixq) // too many colors; don't quantize * pixq = pixClone(pixs); */ PIX * pixFewColorsMedianCutQuantMixed(PIX *pixs, l_int32 ncolor, l_int32 ngray, l_int32 maxncolors, l_int32 darkthresh, l_int32 lightthresh, l_int32 diffthresh) { l_int32 ncolors, iscolor; PIX *pixg, *pixd; PROCNAME("pixFewColorsMedianCutQuantMixed"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs undefined or not 32 bpp", procName, NULL); if (maxncolors <= 0) maxncolors = 20; if (darkthresh <= 0) darkthresh = 20; if (lightthresh <= 0) lightthresh = 244; if (diffthresh <= 0) diffthresh = 15; if (ncolor < maxncolors) { L_WARNING("ncolor too small; setting to %d\n", procName, maxncolors); ncolor = maxncolors; } if (ngray < maxncolors) { L_WARNING("ngray too small; setting to %d\n", procName, maxncolors); ngray = maxncolors; } /* Estimate the color content and the number of colors required */ pixColorsForQuantization(pixs, 15, &ncolors, &iscolor, 0); /* Note that maxncolors applies to all colors required to quantize, * both gray and colorful */ if (ncolors > maxncolors) return (PIX *)ERROR_PTR("too many colors", procName, NULL); /* If no color, return quantized gray pix */ if (!iscolor) { pixg = pixConvertTo8(pixs, 0); pixd = pixThresholdOn8bpp(pixg, ngray, 1); pixDestroy(&pixg); return pixd; } /* Use the mixed gray/color quantizer */ return pixMedianCutQuantMixed(pixs, ncolor, ngray, darkthresh, lightthresh, diffthresh); } /*------------------------------------------------------------------------* * Median cut indexed histogram * *------------------------------------------------------------------------*/ /*! * pixMedianCutHisto() * * Input: pixs (32 bpp; rgb color) * sigbits (valid: 5 or 6) * subsample (integer > 0) * Return: histo (1-d array, giving the number of pixels in * each quantized region of color space), or null on error * * Notes: * (1) Array is indexed by (3 * sigbits) bits. The array size * is 2^(3 * sigbits). * (2) Indexing into the array from rgb uses red sigbits as * most significant and blue as least. */ l_int32 * pixMedianCutHisto(PIX *pixs, l_int32 sigbits, l_int32 subsample) { l_int32 i, j, w, h, wpl, rshift, index, histosize; l_int32 *histo; l_uint32 mask, pixel; l_uint32 *data, *line; PROCNAME("pixMedianCutHisto"); if (!pixs) return (l_int32 *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (l_int32 *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (sigbits < 5 || sigbits > 6) return (l_int32 *)ERROR_PTR("sigbits not 5 or 6", procName, NULL); if (subsample <= 0) return (l_int32 *)ERROR_PTR("subsample not > 0", procName, NULL); histosize = 1 << (3 * sigbits); if ((histo = (l_int32 *)CALLOC(histosize, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("histo not made", procName, NULL); rshift = 8 - sigbits; mask = 0xff >> rshift; pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i += subsample) { line = data + i * wpl; for (j = 0; j < w; j += subsample) { pixel = line[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); histo[index]++; } } return histo; } /*------------------------------------------------------------------------* * Static helpers * *------------------------------------------------------------------------*/ /*! * pixcmapGenerateFromHisto() * * Input: pixs (32 bpp; rgb color) * depth (of colormap) * histo * histosize * sigbits * Return: colormap, or null on error * * Notes: * (1) This is used when the number of colors in the histo * is not greater than maxcolors. * (2) As a side-effect, the histo becomes an inverse colormap, * labeling the cmap indices for each existing color. */ static PIXCMAP * pixcmapGenerateFromHisto(PIX *pixs, l_int32 depth, l_int32 *histo, l_int32 histosize, l_int32 sigbits) { l_int32 i, index, shift, rval, gval, bval; l_uint32 mask; PIXCMAP *cmap; PROCNAME("pixcmapGenerateFromHisto"); if (!pixs) return (PIXCMAP *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIXCMAP *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (!histo) return (PIXCMAP *)ERROR_PTR("histo not defined", procName, NULL); /* Capture the rgb values of each occupied cube in the histo, * and re-label the histo value with the colormap index. */ cmap = pixcmapCreate(depth); shift = 8 - sigbits; mask = 0xff >> shift; for (i = 0, index = 0; i < histosize; i++) { if (histo[i]) { rval = (i >> (2 * sigbits)) << shift; gval = ((i >> sigbits) & mask) << shift; bval = (i & mask) << shift; pixcmapAddColor(cmap, rval, gval, bval); histo[i] = index++; } } return cmap; } /*! * pixQuantizeWithColormap() * * Input: pixs (32 bpp; rgb color) * ditherflag (1 for dither; 0 for no dither) * outdepth * cmap * indexmap * histosize * sigbits * Return: pixd (quantized to colormap), or null on error * * Notes: * (1) The indexmap is a LUT that takes the rgb indices of the * pixel and returns the index into the colormap. * (2) If ditherflag is 1, @outdepth is ignored and the output * depth is set to 8. */ static PIX * pixQuantizeWithColormap(PIX *pixs, l_int32 ditherflag, l_int32 outdepth, PIXCMAP *cmap, l_int32 *indexmap, l_int32 mapsize, l_int32 sigbits) { l_uint8 *bufu8r, *bufu8g, *bufu8b; l_int32 i, j, w, h, wpls, wpld, rshift, index, cmapindex; l_int32 rval, gval, bval, rc, gc, bc; l_int32 dif, val1, val2, val3; l_int32 *buf1r, *buf1g, *buf1b, *buf2r, *buf2g, *buf2b; l_uint32 *datas, *datad, *lines, *lined; l_uint32 mask, pixel; PIX *pixd; PROCNAME("pixQuantizeWithColormap"); if (!pixs || pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); if (!indexmap) return (PIX *)ERROR_PTR("indexmap not defined", procName, NULL); if (ditherflag) outdepth = 8; pixGetDimensions(pixs, &w, &h, NULL); pixd = pixCreate(w, h, outdepth); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); rshift = 8 - sigbits; mask = 0xff >> rshift; if (ditherflag == 0) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (outdepth == 1) { for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); if (indexmap[index]) SET_DATA_BIT(lined, j); } } else if (outdepth == 2) { for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); SET_DATA_DIBIT(lined, j, indexmap[index]); } } else if (outdepth == 4) { for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); SET_DATA_QBIT(lined, j, indexmap[index]); } } else { /* outdepth == 8 */ for (j = 0; j < w; j++) { pixel = lines[j]; getColorIndexMedianCut(pixel, rshift, mask, sigbits, &index); SET_DATA_BYTE(lined, j, indexmap[index]); } } } } else { /* ditherflag == 1 */ bufu8r = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); bufu8g = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); bufu8b = (l_uint8 *)CALLOC(w, sizeof(l_uint8)); buf1r = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf1g = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf1b = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2r = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2g = (l_int32 *)CALLOC(w, sizeof(l_int32)); buf2b = (l_int32 *)CALLOC(w, sizeof(l_int32)); if (!bufu8r || !bufu8g || !bufu8b) return (PIX *)ERROR_PTR("uint8 line buf not made", procName, NULL); if (!buf1r || !buf1g || !buf1b || !buf2r || !buf2g || !buf2b) return (PIX *)ERROR_PTR("mono line buf not made", procName, NULL); /* Start by priming buf2; line 1 is above line 2 */ pixGetRGBLine(pixs, 0, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } for (i = 0; i < h - 1; i++) { /* Swap data 2 --> 1, and read in new line 2 */ memcpy(buf1r, buf2r, 4 * w); memcpy(buf1g, buf2g, 4 * w); memcpy(buf1b, buf2b, 4 * w); pixGetRGBLine(pixs, i + 1, bufu8r, bufu8g, bufu8b); for (j = 0; j < w; j++) { buf2r[j] = 64 * bufu8r[j]; buf2g[j] = 64 * bufu8g[j]; buf2b[j] = 64 * bufu8b[j]; } /* Dither */ lined = datad + i * wpld; for (j = 0; j < w - 1; j++) { rval = buf1r[j] / 64; gval = buf1g[j] / 64; bval = buf1b[j] / 64; index = ((rval >> rshift) << (2 * sigbits)) + ((gval >> rshift) << sigbits) + (bval >> rshift); cmapindex = indexmap[index]; SET_DATA_BYTE(lined, j, cmapindex); pixcmapGetColor(cmap, cmapindex, &rc, &gc, &bc); dif = buf1r[j] / 8 - 8 * rc; if (dif > DIF_CAP) dif = DIF_CAP; if (dif < -DIF_CAP) dif = -DIF_CAP; if (dif != 0) { val1 = buf1r[j + 1] + 3 * dif; val2 = buf2r[j] + 3 * dif; val3 = buf2r[j + 1] + 2 * dif; if (dif > 0) { buf1r[j + 1] = L_MIN(16383, val1); buf2r[j] = L_MIN(16383, val2); buf2r[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1r[j + 1] = L_MAX(0, val1); buf2r[j] = L_MAX(0, val2); buf2r[j + 1] = L_MAX(0, val3); } } dif = buf1g[j] / 8 - 8 * gc; if (dif > DIF_CAP) dif = DIF_CAP; if (dif < -DIF_CAP) dif = -DIF_CAP; if (dif != 0) { val1 = buf1g[j + 1] + 3 * dif; val2 = buf2g[j] + 3 * dif; val3 = buf2g[j + 1] + 2 * dif; if (dif > 0) { buf1g[j + 1] = L_MIN(16383, val1); buf2g[j] = L_MIN(16383, val2); buf2g[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1g[j + 1] = L_MAX(0, val1); buf2g[j] = L_MAX(0, val2); buf2g[j + 1] = L_MAX(0, val3); } } dif = buf1b[j] / 8 - 8 * bc; if (dif > DIF_CAP) dif = DIF_CAP; if (dif < -DIF_CAP) dif = -DIF_CAP; if (dif != 0) { val1 = buf1b[j + 1] + 3 * dif; val2 = buf2b[j] + 3 * dif; val3 = buf2b[j + 1] + 2 * dif; if (dif > 0) { buf1b[j + 1] = L_MIN(16383, val1); buf2b[j] = L_MIN(16383, val2); buf2b[j + 1] = L_MIN(16383, val3); } else if (dif < 0) { buf1b[j + 1] = L_MAX(0, val1); buf2b[j] = L_MAX(0, val2); buf2b[j + 1] = L_MAX(0, val3); } } } /* Get last pixel in row; no downward propagation */ rval = buf1r[w - 1] / 64; gval = buf1g[w - 1] / 64; bval = buf1b[w - 1] / 64; index = ((rval >> rshift) << (2 * sigbits)) + ((gval >> rshift) << sigbits) + (bval >> rshift); SET_DATA_BYTE(lined, w - 1, indexmap[index]); } /* Get last row of pixels; no leftward propagation */ lined = datad + (h - 1) * wpld; for (j = 0; j < w; j++) { rval = buf2r[j] / 64; gval = buf2g[j] / 64; bval = buf2b[j] / 64; index = ((rval >> rshift) << (2 * sigbits)) + ((gval >> rshift) << sigbits) + (bval >> rshift); SET_DATA_BYTE(lined, j, indexmap[index]); } FREE(bufu8r); FREE(bufu8g); FREE(bufu8b); FREE(buf1r); FREE(buf1g); FREE(buf1b); FREE(buf2r); FREE(buf2g); FREE(buf2b); } return pixd; } /*! * getColorIndexMedianCut() * * Input: pixel (32 bit rgb) * rshift (of component: 8 - sigbits) * mask (over sigbits) * sigbits * &index ( rgb index value) * Return: void * * Notes: * (1) This is used on each pixel in the source image. No checking * is done on input values. */ static void getColorIndexMedianCut(l_uint32 pixel, l_int32 rshift, l_uint32 mask, l_int32 sigbits, l_int32 *pindex) { l_int32 rval, gval, bval; rval = pixel >> (24 + rshift); gval = (pixel >> (16 + rshift)) & mask; bval = (pixel >> (8 + rshift)) & mask; *pindex = (rval << (2 * sigbits)) + (gval << sigbits) + bval; return; } /*! * pixGetColorRegion() * * Input: pixs (32 bpp; rgb color) * sigbits (valid: 5, 6) * subsample (integer > 0) * Return: vbox (minimum 3D box in color space enclosing all pixels), * or null on error * * Notes: * (1) Computes the minimum 3D box in color space enclosing all * pixels in the image. */ static L_BOX3D * pixGetColorRegion(PIX *pixs, l_int32 sigbits, l_int32 subsample) { l_int32 rmin, rmax, gmin, gmax, bmin, bmax, rval, gval, bval; l_int32 w, h, wpl, i, j, rshift; l_uint32 mask, pixel; l_uint32 *data, *line; PROCNAME("pixGetColorRegion"); if (!pixs) return (L_BOX3D *)ERROR_PTR("pixs not defined", procName, NULL); rmin = gmin = bmin = 1000000; rmax = gmax = bmax = 0; rshift = 8 - sigbits; mask = 0xff >> rshift; pixGetDimensions(pixs, &w, &h, NULL); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i += subsample) { line = data + i * wpl; for (j = 0; j < w; j += subsample) { pixel = line[j]; rval = pixel >> (24 + rshift); gval = (pixel >> (16 + rshift)) & mask; bval = (pixel >> (8 + rshift)) & mask; if (rval < rmin) rmin = rval; else if (rval > rmax) rmax = rval; if (gval < gmin) gmin = gval; else if (gval > gmax) gmax = gval; if (bval < bmin) bmin = bval; else if (bval > bmax) bmax = bval; } } return box3dCreate(rmin, rmax, gmin, gmax, bmin, bmax); } /*! * medianCutApply() * * Input: histo (array; in rgb colorspace) * sigbits * vbox (input 3D box) * &vbox1, vbox2 ( vbox split in two parts) * Return: 0 if OK, 1 on error */ static l_int32 medianCutApply(l_int32 *histo, l_int32 sigbits, L_BOX3D *vbox, L_BOX3D **pvbox1, L_BOX3D **pvbox2) { l_int32 i, j, k, sum, rw, gw, bw, maxw, index; l_int32 total, left, right; l_int32 partialsum[128]; L_BOX3D *vbox1, *vbox2; PROCNAME("medianCutApply"); if (!histo) return ERROR_INT("histo not defined", procName, 1); if (!vbox) return ERROR_INT("vbox not defined", procName, 1); if (!pvbox1 || !pvbox2) return ERROR_INT("&vbox1 and &vbox2 not both defined", procName, 1); *pvbox1 = *pvbox2 = NULL; if (vboxGetCount(vbox, histo, sigbits) == 0) return ERROR_INT("no pixels in vbox", procName, 1); /* If the vbox occupies just one element in color space, it can't * be split. Leave the 'sortparam' field at 0, so that it goes to * the tail of the priority queue and stays there, thereby avoiding * an infinite loop (take off, put back on the head) if it * happens to be the most populous box! */ rw = vbox->r2 - vbox->r1 + 1; gw = vbox->g2 - vbox->g1 + 1; bw = vbox->b2 - vbox->b1 + 1; if (rw == 1 && gw == 1 && bw == 1) { *pvbox1 = box3dCopy(vbox); return 0; } /* Select the longest axis for splitting */ maxw = L_MAX(rw, gw); maxw = L_MAX(maxw, bw); #if DEBUG_SPLIT_AXES if (rw == maxw) fprintf(stderr, "red split\n"); else if (gw == maxw) fprintf(stderr, "green split\n"); else fprintf(stderr, "blue split\n"); #endif /* DEBUG_SPLIT_AXES */ /* Find the partial sum arrays along the selected axis. */ total = 0; if (maxw == rw) { for (i = vbox->r1; i <= vbox->r2; i++) { sum = 0; for (j = vbox->g1; j <= vbox->g2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { index = (i << (2 * sigbits)) + (j << sigbits) + k; sum += histo[index]; } } total += sum; partialsum[i] = total; } } else if (maxw == gw) { for (i = vbox->g1; i <= vbox->g2; i++) { sum = 0; for (j = vbox->r1; j <= vbox->r2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { index = (i << sigbits) + (j << (2 * sigbits)) + k; sum += histo[index]; } } total += sum; partialsum[i] = total; } } else { /* maxw == bw */ for (i = vbox->b1; i <= vbox->b2; i++) { sum = 0; for (j = vbox->r1; j <= vbox->r2; j++) { for (k = vbox->g1; k <= vbox->g2; k++) { index = i + (j << (2 * sigbits)) + (k << sigbits); sum += histo[index]; } } total += sum; partialsum[i] = total; } } /* Determine the cut planes, making sure that two vboxes * are always produced. Generate the two vboxes and compute * the sum in each of them. Choose the cut plane within * the greater of the (left, right) sides of the bin in which * the median pixel resides. Here's the surprise: go halfway * into that side. By doing that, you technically move away * from "median cut," but in the process a significant number * of low-count vboxes are produced, allowing much better * reproduction of low-count spot colors. */ if (maxw == rw) { for (i = vbox->r1; i <= vbox->r2; i++) { if (partialsum[i] > total / 2) { vbox1 = box3dCopy(vbox); vbox2 = box3dCopy(vbox); left = i - vbox->r1; right = vbox->r2 - i; if (left <= right) vbox1->r2 = L_MIN(vbox->r2 - 1, i + right / 2); else /* left > right */ vbox1->r2 = L_MAX(vbox->r1, i - 1 - left / 2); vbox2->r1 = vbox1->r2 + 1; break; } } } else if (maxw == gw) { for (i = vbox->g1; i <= vbox->g2; i++) { if (partialsum[i] > total / 2) { vbox1 = box3dCopy(vbox); vbox2 = box3dCopy(vbox); left = i - vbox->g1; right = vbox->g2 - i; if (left <= right) vbox1->g2 = L_MIN(vbox->g2 - 1, i + right / 2); else /* left > right */ vbox1->g2 = L_MAX(vbox->g1, i - 1 - left / 2); vbox2->g1 = vbox1->g2 + 1; break; } } } else { /* maxw == bw */ for (i = vbox->b1; i <= vbox->b2; i++) { if (partialsum[i] > total / 2) { vbox1 = box3dCopy(vbox); vbox2 = box3dCopy(vbox); left = i - vbox->b1; right = vbox->b2 - i; if (left <= right) vbox1->b2 = L_MIN(vbox->b2 - 1, i + right / 2); else /* left > right */ vbox1->b2 = L_MAX(vbox->b1, i - 1 - left / 2); vbox2->b1 = vbox1->b2 + 1; break; } } } vbox1->npix = vboxGetCount(vbox1, histo, sigbits); vbox2->npix = vboxGetCount(vbox2, histo, sigbits); vbox1->vol = vboxGetVolume(vbox1); vbox2->vol = vboxGetVolume(vbox2); *pvbox1 = vbox1; *pvbox2 = vbox2; return 0; } /*! * pixcmapGenerateFromMedianCuts() * * Input: lh (priority queue of pointers to vboxes) * histo * sigbits (valid: 5 or 6) * Return: cmap, or null on error * * Notes: * (1) Each vbox in the heap represents a color in the colormap. * (2) As a side-effect, the histo becomes an inverse colormap, * where the part of the array correpsonding to each vbox * is labeled with the cmap index for that vbox. Then * for each rgb pixel, the colormap index is found directly * by mapping the rgb value to the histo array index. */ static PIXCMAP * pixcmapGenerateFromMedianCuts(L_HEAP *lh, l_int32 *histo, l_int32 sigbits) { l_int32 index, rval, gval, bval; L_BOX3D *vbox; PIXCMAP *cmap; PROCNAME("pixcmapGenerateFromMedianCuts"); if (!lh) return (PIXCMAP *)ERROR_PTR("lh not defined", procName, NULL); if (!histo) return (PIXCMAP *)ERROR_PTR("histo not defined", procName, NULL); rval = gval = bval = 0; /* make compiler happy */ cmap = pixcmapCreate(8); index = 0; while (lheapGetCount(lh) > 0) { vbox = (L_BOX3D *)lheapRemove(lh); vboxGetAverageColor(vbox, histo, sigbits, index, &rval, &gval, &bval); pixcmapAddColor(cmap, rval, gval, bval); FREE(vbox); index++; } return cmap; } /*! * vboxGetAverageColor() * * Input: vbox (3d region of color space for one quantized color) * histo * sigbits (valid: 5 or 6) * index (if >= 0, assign to all colors in histo in this vbox) * &rval, &gval, &bval ( average color) * Return: cmap, or null on error * * Notes: * (1) The vbox represents one color in the colormap. * (2) If index >= 0, as a side-effect, all array elements in * the histo corresponding to the vbox are labeled with this * cmap index for that vbox. Otherwise, the histo array * is not changed. * (3) The vbox is quantized in sigbits. So the actual 8-bit color * components are found by multiplying the quantized value * by either 4 or 8. We must add 0.5 to the quantized index * before multiplying to get the approximate 8-bit color in * the center of the vbox; otherwise we get values on * the lower corner. */ static l_int32 vboxGetAverageColor(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval) { l_int32 i, j, k, ntot, mult, histoindex, rsum, gsum, bsum; PROCNAME("vboxGetAverageColor"); if (!vbox) return ERROR_INT("vbox not defined", procName, 1); if (!histo) return ERROR_INT("histo not defined", procName, 1); if (!prval || !pgval || !pbval) return ERROR_INT("&p*val not all defined", procName, 1); *prval = *pgval = *pbval = 0; ntot = 0; mult = 1 << (8 - sigbits); rsum = gsum = bsum = 0; for (i = vbox->r1; i <= vbox->r2; i++) { for (j = vbox->g1; j <= vbox->g2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { histoindex = (i << (2 * sigbits)) + (j << sigbits) + k; ntot += histo[histoindex]; rsum += (l_int32)(histo[histoindex] * (i + 0.5) * mult); gsum += (l_int32)(histo[histoindex] * (j + 0.5) * mult); bsum += (l_int32)(histo[histoindex] * (k + 0.5) * mult); if (index >= 0) histo[histoindex] = index; } } } if (ntot == 0) { *prval = mult * (vbox->r1 + vbox->r2 + 1) / 2; *pgval = mult * (vbox->g1 + vbox->g2 + 1) / 2; *pbval = mult * (vbox->b1 + vbox->b2 + 1) / 2; } else { *prval = rsum / ntot; *pgval = gsum / ntot; *pbval = bsum / ntot; } #if DEBUG_MC_COLORS fprintf(stderr, "ntot[%d] = %d: [%d, %d, %d], (%d, %d, %d)\n", index, ntot, vbox->r2 - vbox->r1 + 1, vbox->g2 - vbox->g1 + 1, vbox->b2 - vbox->b1 + 1, *prval, *pgval, *pbval); #endif /* DEBUG_MC_COLORS */ return 0; } /*! * vboxGetCount() * * Input: vbox (3d region of color space for one quantized color) * histo * sigbits (valid: 5 or 6) * Return: number of image pixels in this region, or 0 on error */ static l_int32 vboxGetCount(L_BOX3D *vbox, l_int32 *histo, l_int32 sigbits) { l_int32 i, j, k, npix, index; PROCNAME("vboxGetCount"); if (!vbox) return ERROR_INT("vbox not defined", procName, 0); if (!histo) return ERROR_INT("histo not defined", procName, 0); npix = 0; for (i = vbox->r1; i <= vbox->r2; i++) { for (j = vbox->g1; j <= vbox->g2; j++) { for (k = vbox->b1; k <= vbox->b2; k++) { index = (i << (2 * sigbits)) + (j << sigbits) + k; npix += histo[index]; } } } return npix; } /*! * vboxGetVolume() * * Input: vbox (3d region of color space for one quantized color) * Return: quantized volume of vbox, or 0 on error */ static l_int32 vboxGetVolume(L_BOX3D *vbox) { PROCNAME("vboxGetVolume"); if (!vbox) return ERROR_INT("vbox not defined", procName, 0); return ((vbox->r2 - vbox->r1 + 1) * (vbox->g2 - vbox->g1 + 1) * (vbox->b2 - vbox->b1 + 1)); } static L_BOX3D * box3dCreate(l_int32 r1, l_int32 r2, l_int32 g1, l_int32 g2, l_int32 b1, l_int32 b2) { L_BOX3D *vbox; vbox = (L_BOX3D *)CALLOC(1, sizeof(L_BOX3D)); vbox->r1 = r1; vbox->r2 = r2; vbox->g1 = g1; vbox->g2 = g2; vbox->b1 = b1; vbox->b2 = b2; return vbox; } /* * Note: don't copy the sortparam. */ static L_BOX3D * box3dCopy(L_BOX3D *vbox) { L_BOX3D *vboxc; PROCNAME("box3dCopy"); if (!vbox) return (L_BOX3D *)ERROR_PTR("vbox not defined", procName, NULL); vboxc = box3dCreate(vbox->r1, vbox->r2, vbox->g1, vbox->g2, vbox->b1, vbox->b2); vboxc->npix = vbox->npix; vboxc->vol = vbox->vol; return vboxc; } leptonica-1.70/src/rotateamlow.c0000644000175000017500000006621611707052573015020 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rotateamlow.c * * Grayscale and color rotation (area mapped) * * 32 bpp grayscale rotation about image center * void rotateAMColorLow() * * 8 bpp grayscale rotation about image center * void rotateAMGrayLow() * * 32 bpp grayscale rotation about UL corner of image * void rotateAMColorCornerLow() * * 8 bpp grayscale rotation about UL corner of image * void rotateAMGrayCornerLow() * * Fast RGB color rotation about center: * void rotateAMColorFastLow() * */ #include #include /* required for sin and tan */ #include "allheaders.h" /*------------------------------------------------------------------* * 32 bpp grayscale rotation about the center * *------------------------------------------------------------------*/ void rotateAMColorLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_int32 rval, gval, bval; l_uint32 word00, word01, word10, word11; l_uint32 *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 16. * sin(angle); cosa = 16. * cos(angle); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina); ypm = (l_int32)(-ydif * cosa + xdif * sina); xp = xcen + (xpm >> 4); yp = ycen + (ypm >> 4); xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input colorval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = colorval; continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * *(lined + j) = *(lines + xp); * which is faster but gives lousy results! */ word00 = *(lines + xp); word10 = *(lines + xp + 1); word01 = *(lines + wpls + xp); word11 = *(lines + wpls + xp + 1); rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256; gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256; bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256; composeRGBPixel(rval, gval, bval, lined + j); } } return; } /*------------------------------------------------------------------* * 8 bpp grayscale rotation about the center * *------------------------------------------------------------------*/ void rotateAMGrayLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_int32 v00, v01, v10, v11; l_uint8 val; l_uint32 *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 16. * sin(angle); cosa = 16. * cos(angle); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina); ypm = (l_int32)(-ydif * cosa + xdif * sina); xp = xcen + (xpm >> 4); yp = ycen + (ypm >> 4); xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { SET_DATA_BYTE(lined, j, grayval); continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); * which is faster but gives lousy results! */ v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp + 1); v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp + 1); val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); SET_DATA_BYTE(lined, j, val); } } return; } /*------------------------------------------------------------------* * 32 bpp grayscale rotation about the UL corner * *------------------------------------------------------------------*/ void rotateAMColorCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm, xp, yp, xf, yf; l_int32 rval, gval, bval; l_uint32 word00, word01, word10, word11; l_uint32 *lines, *lined; l_float32 sina, cosa; wm2 = w - 2; hm2 = h - 2; sina = 16. * sin(angle); cosa = 16. * cos(angle); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { xpm = (l_int32)(j * cosa + i * sina); ypm = (l_int32)(i * cosa - j * sina); xp = xpm >> 4; yp = ypm >> 4; xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input colorval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = colorval; continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * *(lined + j) = *(lines + xp); * which is faster but gives lousy results! */ word00 = *(lines + xp); word10 = *(lines + xp + 1); word01 = *(lines + wpls + xp); word11 = *(lines + wpls + xp + 1); rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) + xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256; gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) + xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256; bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) + xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) + (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) + xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256; composeRGBPixel(rval, gval, bval, lined + j); } } return; } /*------------------------------------------------------------------* * 8 bpp grayscale rotation about the UL corner * *------------------------------------------------------------------*/ void rotateAMGrayCornerLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint8 grayval) { l_int32 i, j, wm2, hm2; l_int32 xpm, ypm, xp, yp, xf, yf; l_int32 v00, v01, v10, v11; l_uint8 val; l_uint32 *lines, *lined; l_float32 sina, cosa; wm2 = w - 2; hm2 = h - 2; sina = 16. * sin(angle); cosa = 16. * cos(angle); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { xpm = (l_int32)(j * cosa + i * sina); ypm = (l_int32)(i * cosa - j * sina); xp = xpm >> 4; yp = ypm >> 4; xf = xpm & 0x0f; yf = ypm & 0x0f; /* if off the edge, write input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { SET_DATA_BYTE(lined, j, grayval); continue; } lines = datas + yp * wpls; /* do area weighting. Without this, we would * simply do: * SET_DATA_BYTE(lined, j, GET_DATA_BYTE(lines, xp)); * which is faster but gives lousy results! */ v00 = (16 - xf) * (16 - yf) * GET_DATA_BYTE(lines, xp); v10 = xf * (16 - yf) * GET_DATA_BYTE(lines, xp + 1); v01 = (16 - xf) * yf * GET_DATA_BYTE(lines + wpls, xp); v11 = xf * yf * GET_DATA_BYTE(lines + wpls, xp + 1); val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256); SET_DATA_BYTE(lined, j, val); } } return; } /*------------------------------------------------------------------* * Fast RGB color rotation about center * *------------------------------------------------------------------*/ /*! * rotateAMColorFastLow() * * This is a special simplification of area mapping with division * of each pixel into 16 sub-pixels. The exact coefficients that * should be used are the same as for the 4x linear interpolation * scaling case, and are given there. I tried to approximate these * as weighted coefficients with a maximum sum of 4, which * allows us to do the arithmetic in parallel for the R, G and B * components in a 32 bit pixel. However, there are three reasons * for not doing that: * (1) the loss of accuracy in the parallel implementation * is visually significant * (2) the parallel implementation (described below) is slower * (3) the parallel implementation requires allocation of * a temporary color image * * There are 16 cases for the choice of the subpixel, and * for each, the mapping to the relevant source * pixels is as follows: * * subpixel src pixel weights * -------- ----------------- * 0 sp1 * 1 (3 * sp1 + sp2) / 4 * 2 (sp1 + sp2) / 2 * 3 (sp1 + 3 * sp2) / 4 * 4 (3 * sp1 + sp3) / 4 * 5 (9 * sp1 + 3 * sp2 + 3 * sp3 + sp4) / 16 * 6 (3 * sp1 + 3 * sp2 + sp3 + sp4) / 8 * 7 (3 * sp1 + 9 * sp2 + sp3 + 3 * sp4) / 16 * 8 (sp1 + sp3) / 2 * 9 (3 * sp1 + sp2 + 3 * sp3 + sp4) / 8 * 10 (sp1 + sp2 + sp3 + sp4) / 4 * 11 (sp1 + 3 * sp2 + sp3 + 3 * sp4) / 8 * 12 (sp1 + 3 * sp3) / 4 * 13 (3 * sp1 + sp2 + 9 * sp3 + 3 * sp4) / 16 * 14 (sp1 + sp2 + 3 * sp3 + 3 * sp4) / 8 * 15 (sp1 + 3 * sp2 + 3 * sp3 + 9 * sp4) / 16 * * Another way to visualize this is to consider the area mapping * (or linear interpolation) coefficients for the pixel sp1. * Expressed in fourths, they can be written as asymmetric matrix: * * 4 3 2 1 * 3 2.25 1.5 0.75 * 2 1.5 1 0.5 * 1 0.75 0.5 0.25 * * The coefficients for the three neighboring pixels can be * similarly written. * * This is implemented here, where, for each color component, * we inline its extraction from each participating word, * construct the linear combination, and combine the results * into the destination 32 bit RGB pixel, using the appropriate shifts. * * It is interesting to note that an alternative method, where * we do the arithmetic on the 32 bit pixels directly (after * shifting the components so they won't overflow into each other) * is significantly inferior. Because we have only 8 bits for * internal overflows, which can be distributed as 2, 3, 3, it * is impossible to add these with the correct linear * interpolation coefficients, which require a sum of up to 16. * Rounding off to a sum of 4 causes appreciable visual artifacts * in the rotated image. The code for the inferior method * can be found in prog/rotatefastalt.c, for reference. * * *** Warning: explicit assumption about RGB component ordering *** */ void rotateAMColorFastLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval) { l_int32 i, j, xcen, ycen, wm2, hm2; l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf; l_uint32 word1, word2, word3, word4, red, blue, green; l_uint32 *pword, *lines, *lined; l_float32 sina, cosa; xcen = w / 2; wm2 = w - 2; ycen = h / 2; hm2 = h - 2; sina = 4. * sin(angle); cosa = 4. * cos(angle); for (i = 0; i < h; i++) { ydif = ycen - i; lined = datad + i * wpld; for (j = 0; j < w; j++) { xdif = xcen - j; xpm = (l_int32)(-xdif * cosa - ydif * sina); ypm = (l_int32)(-ydif * cosa + xdif * sina); xp = xcen + (xpm >> 2); yp = ycen + (ypm >> 2); xf = xpm & 0x03; yf = ypm & 0x03; /* if off the edge, write input grayval */ if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) { *(lined + j) = colorval; continue; } lines = datas + yp * wpls; pword = lines + xp; switch (xf + 4 * yf) { case 0: *(lined + j) = *pword; break; case 1: word1 = *pword; word2 = *(pword + 1); red = 3 * (word1 >> 24) + (word2 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 2: word1 = *pword; word2 = *(pword + 1); red = (word1 >> 24) + (word2 >> 24); green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff); *(lined + j) = ((red << 23) & 0xff000000) | ((green << 15) & 0x00ff0000) | ((blue << 7) & 0x0000ff00); break; case 3: word1 = *pword; word2 = *(pword + 1); red = (word1 >> 24) + 3 * (word2 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 4: word1 = *pword; word3 = *(pword + wpls); red = 3 * (word1 >> 24) + (word3 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word3 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + ((word3 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 5: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 9 * (word1 >> 24) + 3 * (word2 >> 24) + 3 * (word3 >> 24) + (word4 >> 24); green = 9 * ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = 9 * ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; case 6: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + 3 * (word2 >> 24) + (word3 >> 24) + (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 7: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + 9 * (word2 >> 24) + (word3 >> 24) + 3 * (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + 9 * ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + 9 * ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; case 8: word1 = *pword; word3 = *(pword + wpls); red = (word1 >> 24) + (word3 >> 24); green = ((word1 >> 16) & 0xff) + ((word3 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word3 >> 8) & 0xff); *(lined + j) = ((red << 23) & 0xff000000) | ((green << 15) & 0x00ff0000) | ((blue << 7) & 0x0000ff00); break; case 9: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + (word2 >> 24) + 3 * (word3 >> 24) + (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = 3 * ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 10: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + (word2 >> 24) + (word3 >> 24) + (word4 >> 24); green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 11: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + 3 * (word2 >> 24) + (word3 >> 24) + 3 * (word4 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 12: word1 = *pword; word3 = *(pword + wpls); red = (word1 >> 24) + 3 * (word3 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff); *(lined + j) = ((red << 22) & 0xff000000) | ((green << 14) & 0x00ff0000) | ((blue << 6) & 0x0000ff00); break; case 13: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = 3 * (word1 >> 24) + (word2 >> 24) + 9 * (word3 >> 24) + 3 * (word4 >> 24); green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) + 9 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = 3 *((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + 9 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; case 14: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + (word2 >> 24) + 3 * (word3 >> 24) + 3 * (word4 >> 24); green = ((word1 >> 16) & 0xff) +((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 21) & 0xff000000) | ((green << 13) & 0x00ff0000) | ((blue << 5) & 0x0000ff00); break; case 15: word1 = *pword; word2 = *(pword + 1); word3 = *(pword + wpls); word4 = *(pword + wpls + 1); red = (word1 >> 24) + 3 * (word2 >> 24) + 3 * (word3 >> 24) + 9 * (word4 >> 24); green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) + 3 * ((word3 >> 16) & 0xff) + 9 * ((word4 >> 16) & 0xff); blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) + 3 * ((word3 >> 8) & 0xff) + 9 * ((word4 >> 8) & 0xff); *(lined + j) = ((red << 20) & 0xff000000) | ((green << 12) & 0x00ff0000) | ((blue << 4) & 0x0000ff00); break; default: fprintf(stderr, "shouldn't get here\n"); break; } } } return; } leptonica-1.70/src/dewarp3.c0000644000175000017500000006420012244232663014013 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarp3.c * * Applying and stripping the page disparity model * * Apply disparity array * l_int32 dewarpaApplyDisparity() * static l_int32 pixApplyVertDisparity() * static l_int32 pixApplyHorizDisparity() * * Stripping out data and populating full res disparity * l_int32 dewarpMinimize() * l_int32 dewarpPopulateFullRes() * * Static functions not presently in use * static FPIX *fpixSampledDisparity() * static FPIX *fpixExtraHorizDisparity() * */ #include #include "allheaders.h" static PIX *pixApplyVertDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin); static PIX * pixApplyHorizDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin); /*----------------------------------------------------------------------* * Apply warping disparity array * *----------------------------------------------------------------------*/ /*! * dewarpaApplyDisparity() * * Input: dewa * pageno (of page model to be used; may be a ref model) * pixs (image to be modified; can be 1, 8 or 32 bpp) * grayin (gray value, from 0 to 255, for pixels brought in; * use -1 to use pixels on the boundary of pixs) * x, y (origin for generation of disparity arrays) * &pixd ( disparity corrected image) * debugfile (use null to skip writing this) * Return: 0 if OK, 1 on error (no models or ref models available) * * Notes: * (1) This applies the disparity arrays to the specified image. * (2) Specify gray color for pixels brought in from the outside: * 0 is black, 255 is white. Use -1 to select pixels from the * boundary of the source image. * (3) If the models and ref models have not been validated, this * will do so by calling dewarpaInsertRefModels(). * (4) This works with both stripped and full resolution page models. * If the full res disparity array(s) are missing, they are remade. * (5) The caller must handle errors that are returned because there * are no valid models or ref models for the page -- typically * by using the input pixs. * (6) If there is no model for @pageno, this will use the model for * 'refpage' and put the result in the dew for @pageno. * (7) This populates the full resolution disparity arrays if * necessary. If x and/or y are positive, they are used, * in conjunction with pixs, to determine the required * slope-based extension of the full resolution disparity * arrays in each direction. When (x,y) == (0,0), all * extension is to the right and down. Nonzero values of (x,y) * are useful for dewarping when pixs is deliberately undercropped. * (8) Important: when applying disparity to a number of images, * after calling this function and saving the resulting pixd, * you should call dewarpMinimize(dew) on the dew for @pageno. * This will remove pixs and pixd (or their clones) stored in dew, * as well as the full resolution disparity arrays. Together, * these hold approximately 16 bytes for each pixel in pixs. */ l_int32 dewarpaApplyDisparity(L_DEWARPA *dewa, l_int32 pageno, PIX *pixs, l_int32 grayin, l_int32 x, l_int32 y, PIX **ppixd, const char *debugfile) { l_int32 debug; L_DEWARP *dew1, *dew2; PIX *pixv, *pixh; PROCNAME("dewarpaApplyDisparity"); /* Initialize the output with the input, so we'll have that * in case we can't apply the page model. */ if (!ppixd) return ERROR_INT("&pixd not defined", procName, 1); *ppixd = pixClone(pixs); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if (pageno < 0 || pageno > dewa->maxpage) return ERROR_INT("invalid pageno", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (grayin > 255) return ERROR_INT("invalid grayin", procName, 1); if (x < 0) x = 0; if (y < 0) y = 0; /* Make sure all models are valid and all refmodels have * been added to dewa */ debug = (debugfile) ? 1 : 0; if (dewa->modelsready == FALSE) dewarpaInsertRefModels(dewa, 0, debug); /* Check for the existence of a valid model; we don't expect * all pages to have them. */ if ((dew1 = dewarpaGetDewarp(dewa, pageno)) == NULL) { L_INFO("dew1 not defined; no valid model for page %d\n", procName, pageno); return 1; } /* Get the page model that we will use and sanity-check that * it is valid. The ultimate result will be put in dew1->pixd. */ if (dew1->hasref) /* point to another page with a model */ dew2 = dewarpaGetDewarp(dewa, dew1->refpage); else dew2 = dew1; if (dew2->vvalid == FALSE) return ERROR_INT("no model; shouldn't happen", procName, 1); /* Generate the full res disparity arrays if they don't exist * (e.g., if they've been minimized or read from file), or if * they are too small for the current image. */ dewarpPopulateFullRes(dew2, pixs, x, y); /* Correct for vertical disparity and save the result */ if ((pixv = pixApplyVertDisparity(dew2, pixs, grayin)) == NULL) { dewarpMinimize(dew2); return ERROR_INT("pixv not made", procName, 1); } pixDestroy(ppixd); *ppixd = pixv; if (debugfile) { pixDisplayWithTitle(pixv, 300, 0, "pixv", 1); lept_rmdir("dewapply"); /* remove previous images */ lept_mkdir("dewapply"); pixWrite("/tmp/dewapply/001.png", pixs, IFF_PNG); pixWrite("/tmp/dewapply/002.png", pixv, IFF_PNG); } /* Optionally, correct for horizontal disparity */ if (dewa->useboth && dew2->hsuccess) { if (dew2->hvalid == FALSE) { L_INFO("invalid horiz model for page %d\n", procName, pageno); } else { if ((pixh = pixApplyHorizDisparity(dew2, pixv, grayin)) != NULL) { pixDestroy(ppixd); *ppixd = pixh; if (debugfile) { pixDisplayWithTitle(pixh, 600, 0, "pixh", 1); pixWrite("/tmp/dewapply/003.png", pixh, IFF_PNG); } } else { L_ERROR("horiz disparity failed on page %d\n", procName, pageno); } } } if (debugfile) { dewarpDebug(dew1, "dewapply", 0); convertFilesToPdf("/tmp/dewapply", NULL, 135, 1.0, 0, 0, "Dewarp Apply Disparity", debugfile); fprintf(stderr, "pdf file made: %s\n", debugfile); } /* Get rid of the large full res disparity arrays */ dewarpMinimize(dew2); return 0; } /*! * pixApplyVertDisparity() * * Input: dew * pixs (1, 8 or 32 bpp) * grayin (gray value, from 0 to 255, for pixels brought in; * use -1 to use pixels on the boundary of pixs) * Return: pixd (modified to remove vertical disparity), or null on error * * Notes: * (1) This applies the vertical disparity array to the specified * image. For src pixels above the image, we use the pixels * in the first raster line. * (2) Specify gray color for pixels brought in from the outside: * 0 is black, 255 is white. Use -1 to select pixels from the * boundary of the source image. */ static PIX * pixApplyVertDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin) { l_int32 i, j, w, h, d, fw, fh, wpld, wplf, isrc, val8; l_uint32 *datad, *lined; l_float32 *dataf, *linef; void **lineptrs; FPIX *fpix; PIX *pixd; PROCNAME("pixApplyVertDisparity"); if (!dew) return (PIX *)ERROR_PTR("dew not defined", procName, NULL); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 1, 8 or 32 bpp", procName, NULL); if ((fpix = dew->fullvdispar) == NULL) return (PIX *)ERROR_PTR("fullvdispar not defined", procName, NULL); fpixGetDimensions(fpix, &fw, &fh); if (fw < w || fh < h) { fprintf(stderr, "fw = %d, w = %d, fh = %d, h = %d\n", fw, w, fh, h); return (PIX *)ERROR_PTR("invalid fpix size", procName, NULL); } /* Two choices for requested pixels outside pixs: (1) use pixels' * from the boundary of pixs; use white or light gray pixels. */ pixd = pixCreateTemplate(pixs); if (grayin >= 0) pixSetAllGray(pixd, grayin); datad = pixGetData(pixd); dataf = fpixGetData(fpix); wpld = pixGetWpl(pixd); wplf = fpixGetWpl(fpix); if (d == 1) { lineptrs = pixGetLinePtrs(pixs, NULL); for (i = 0; i < h; i++) { lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { isrc = (l_int32)(i - linef[j] + 0.5); if (grayin < 0) /* use value at boundary if outside */ isrc = L_MIN(L_MAX(isrc, 0), h - 1); if (isrc >= 0 && isrc < h) { /* remains gray if outside */ if (GET_DATA_BIT(lineptrs[isrc], j)) SET_DATA_BIT(lined, j); } } } } else if (d == 8) { lineptrs = pixGetLinePtrs(pixs, NULL); for (i = 0; i < h; i++) { lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { isrc = (l_int32)(i - linef[j] + 0.5); if (grayin < 0) isrc = L_MIN(L_MAX(isrc, 0), h - 1); if (isrc >= 0 && isrc < h) { val8 = GET_DATA_BYTE(lineptrs[isrc], j); SET_DATA_BYTE(lined, j, val8); } } } } else { /* d == 32 */ lineptrs = pixGetLinePtrs(pixs, NULL); for (i = 0; i < h; i++) { lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { isrc = (l_int32)(i - linef[j] + 0.5); if (grayin < 0) isrc = L_MIN(L_MAX(isrc, 0), h - 1); if (isrc >= 0 && isrc < h) lined[j] = GET_DATA_FOUR_BYTES(lineptrs[isrc], j); } } } FREE(lineptrs); return pixd; } /*! * pixApplyHorizDisparity() * * Input: dew * pixs (1, 8 or 32 bpp) * grayin (gray value, from 0 to 255, for pixels brought in; * use -1 to use pixels on the boundary of pixs) * Return: pixd (modified to remove horizontal disparity if possible), * or null on error. * * Notes: * (1) This applies the horizontal disparity array to the specified * image. * (2) Specify gray color for pixels brought in from the outside: * 0 is black, 255 is white. Use -1 to select pixels from the * boundary of the source image. * (3) The input pixs has already been corrected for vertical disparity. * If the horizontal disparity array doesn't exist, this returns * a clone of @pixs. */ static PIX * pixApplyHorizDisparity(L_DEWARP *dew, PIX *pixs, l_int32 grayin) { l_int32 i, j, w, h, d, fw, fh, wpls, wpld, wplf, jsrc, val8; l_uint32 *datas, *lines, *datad, *lined; l_float32 *dataf, *linef; FPIX *fpix; PIX *pixd; PROCNAME("pixApplyHorizDisparity"); if (!dew) return (PIX *)ERROR_PTR("dew not defined", procName, pixs); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 8 && d != 32) return (PIX *)ERROR_PTR("pix not 1, 8 or 32 bpp", procName, NULL); if ((fpix = dew->fullhdispar) == NULL) return (PIX *)ERROR_PTR("fullhdispar not defined", procName, NULL); fpixGetDimensions(fpix, &fw, &fh); if (fw < w || fh < h) { fprintf(stderr, "fw = %d, w = %d, fh = %d, h = %d\n", fw, w, fh, h); return (PIX *)ERROR_PTR("invalid fpix size", procName, NULL); } /* Two choices for requested pixels outside pixs: (1) use pixels' * from the boundary of pixs; use white or light gray pixels. */ pixd = pixCreateTemplate(pixs); if (grayin >= 0) pixSetAllGray(pixd, grayin); datas = pixGetData(pixs); datad = pixGetData(pixd); dataf = fpixGetData(fpix); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); wplf = fpixGetWpl(fpix); if (d == 1) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { jsrc = (l_int32)(j - linef[j] + 0.5); if (grayin < 0) /* use value at boundary if outside */ jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); if (jsrc >= 0 && jsrc < w) { /* remains gray if outside */ if (GET_DATA_BIT(lines, jsrc)) SET_DATA_BIT(lined, j); } } } } else if (d == 8) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { jsrc = (l_int32)(j - linef[j] + 0.5); if (grayin < 0) jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); if (jsrc >= 0 && jsrc < w) { val8 = GET_DATA_BYTE(lines, jsrc); SET_DATA_BYTE(lined, j, val8); } } } } else { /* d == 32 */ for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; linef = dataf + i * wplf; for (j = 0; j < w; j++) { jsrc = (l_int32)(j - linef[j] + 0.5); if (grayin < 0) jsrc = L_MIN(L_MAX(jsrc, 0), w - 1); if (jsrc >= 0 && jsrc < w) lined[j] = lines[jsrc]; } } } return pixd; } /*----------------------------------------------------------------------* * Stripping out data and populating full res disparity * *----------------------------------------------------------------------*/ /*! * dewarpMinimize() * * Input: dew * Return: 0 if OK, 1 on error * * Notes: * (1) This removes all data that is not needed for serialization. * It keeps the subsampled disparity array(s), so the full * resolution arrays can be reconstructed. */ l_int32 dewarpMinimize(L_DEWARP *dew) { L_DEWARP *dewt; PROCNAME("dewarpMinimize"); if (!dew) return ERROR_INT("dew not defined", procName, 1); /* If dew is a ref, minimize the actual dewarp */ if (dew->hasref) dewt = dewarpaGetDewarp(dew->dewa, dew->refpage); else dewt = dew; if (!dewt) return ERROR_INT("dewt not found", procName, 1); pixDestroy(&dewt->pixs); fpixDestroy(&dewt->fullvdispar); fpixDestroy(&dewt->fullhdispar); numaDestroy(&dewt->namidys); numaDestroy(&dewt->nacurves); return 0; } /*! * dewarpPopulateFullRes() * * Input: dew * pix (, to give size of actual image) * x, y (origin for generation of disparity arrays) * Return: 0 if OK, 1 on error * * Notes: * (1) If the full resolution vertical and horizontal disparity * arrays do not exist, they are built from the subsampled ones. * (2) If pixs is not given, the size of the arrays is determined * by the original image from which the sampled version was * generated. Any values of (x,y) are ignored. * (3) If pixs is given, the full resolution disparity arrays must * be large enough to accommodate it. * (a) If the arrays do not exist, the value of (x,y) determines * the origin of the full resolution arrays without extension, * relative to pixs. Thus, (x,y) gives the amount of * slope extension in (left, top). The (right, bottom) * extension is then determined by the size of pixs and * (x,y); the values should never be < 0. * (b) If the arrays exist and pixs is too large, the existing * full res arrays are destroyed and new ones are made, * again using (x,y) to determine the extension in the * four directions. */ l_int32 dewarpPopulateFullRes(L_DEWARP *dew, PIX *pix, l_int32 x, l_int32 y) { l_int32 width, height, fw, fh, deltaw, deltah, redfactor; FPIX *fpixt1, *fpixt2; PROCNAME("dewarpPopulateFullRes"); if (!dew) return ERROR_INT("dew not defined", procName, 1); if (!dew->sampvdispar) return ERROR_INT("no sampled vert disparity", procName, 1); if (x < 0) x = 0; if (y < 0) y = 0; /* Establish the target size for the full res arrays */ if (pix) pixGetDimensions(pix, &width, &height, NULL); else { width = dew->w; height = dew->h; } /* Destroy the existing arrays if they are too small */ if (dew->fullvdispar) { fpixGetDimensions(dew->fullvdispar, &fw, &fh); if (width > fw || height > fw) fpixDestroy(&dew->fullvdispar); } if (dew->fullhdispar) { fpixGetDimensions(dew->fullhdispar, &fw, &fh); if (width > fw || height > fw) fpixDestroy(&dew->fullhdispar); } /* Find the required width and height expansion deltas */ deltaw = width - dew->sampling * (dew->nx - 1) + 2; deltah = height - dew->sampling * (dew->ny - 1) + 2; redfactor = dew->redfactor; deltaw = redfactor * L_MAX(0, deltaw); deltah = redfactor * L_MAX(0, deltah); /* Generate the full res vertical array if it doesn't exist, * extending it as required to make it big enough. Use x,y * to determine the amounts on each side. */ if (!dew->fullvdispar) { fpixt1 = fpixCopy(NULL, dew->sampvdispar); if (redfactor == 2) fpixAddMultConstant(fpixt1, 0.0, (l_float32)redfactor); fpixt2 = fpixScaleByInteger(fpixt1, dew->sampling * redfactor); fpixDestroy(&fpixt1); if (deltah == 0 && deltaw == 0) { dew->fullvdispar = fpixt2; } else { dew->fullvdispar = fpixAddSlopeBorder(fpixt2, x, deltaw - x, y, deltah - y); fpixDestroy(&fpixt2); } } /* Similarly, generate the full res horizontal array if it * doesn't exist. Do this even if useboth == 0. */ if (!dew->fullhdispar && dew->samphdispar) { fpixt1 = fpixCopy(NULL, dew->samphdispar); if (redfactor == 2) fpixAddMultConstant(fpixt1, 0.0, (l_float32)redfactor); fpixt2 = fpixScaleByInteger(fpixt1, dew->sampling * redfactor); fpixDestroy(&fpixt1); if (deltah == 0 && deltaw == 0) { dew->fullhdispar = fpixt2; } else { dew->fullhdispar = fpixAddSlopeBorder(fpixt2, x, deltaw - x, y, deltah - y); fpixDestroy(&fpixt2); } } return 0; } #if 0 /*----------------------------------------------------------------------* * Static functions not presently in use * *----------------------------------------------------------------------*/ /*! * fpixSampledDisparity() * * Input: fpixs (full resolution disparity model) * sampling (sampling factor) * Return: fpixd (sampled disparity model), or null on error * * Notes: * (1) This converts full to sampled disparity. * (2) The input array is sampled at the right and top edges, and * at every @sampling pixels horizontally and vertically. * (3) The sampled array may not extend to the right and bottom * pixels in fpixs. This will occur if fpixs was generated * with slope extension because the image on that page was * larger than normal. This is fine, because in use the * sampled array will be interpolated back to full resolution * and then extended as required. So the operations of * sampling and interpolation will be idempotent. * (4) There must be at least 3 sampled points horizontally and * vertically. */ static FPIX * fpixSampledDisparity(FPIX *fpixs, l_int32 sampling) { l_int32 w, h, wd, hd, i, j, is, js; l_float32 val; FPIX *fpixd; PROCNAME("fpixSampledDisparity"); if (!fpixs) return (FPIX *)ERROR_PTR("fpixs not defined", procName, NULL); if (sampling < 1) return (FPIX *)ERROR_PTR("sampling < 1", procName, NULL); fpixGetDimensions(fpixs, &w, &h); wd = 1 + (w + sampling - 2) / sampling; hd = 1 + (h + sampling - 2) / sampling; if (wd < 3 || hd < 3) return (FPIX *)ERROR_PTR("wd < 3 or hd < 3", procName, NULL); fpixd = fpixCreate(wd, hd); for (i = 0; i < hd; i++) { is = sampling * i; if (is >= h) continue; for (j = 0; j < wd; j++) { js = sampling * j; if (js >= w) continue; fpixGetPixel(fpixs, js, is, &val); fpixSetPixel(fpixd, j, i, val); } } return fpixd; } /*! * fpixExtraHorizDisparity() * * Input: fpixv (vertical disparity model) * factor (conversion factor for vertical disparity slope; * use 0 for default) * &xwid ( extra width to be added to dewarped pix) * Return: fpixh, or null on error * * Notes: * (1) This takes the difference in vertical disparity at top * and bottom of the image, and converts it to an assumed * horizontal disparity. In use, we add this to the * horizontal disparity determined by the left and right * ends of textlines. * (2) Usage: * l_int32 xwid = [extra width to be added to fpix and image] * FPix *fpix = fpixExtraHorizDisparity(dew->fullvdispar, 0, &xwid); * fpixLinearCombination(dew->fullhdispar, dew->fullhdispar, * fpix, 1.0, 1.0); */ static FPIX * fpixExtraHorizDisparity(FPIX *fpixv, l_float32 factor, l_int32 *pxwid) { l_int32 w, h, i, j, fw, wpl, maxloc; l_float32 val1, val2, vdisp, vdisp0, maxval; l_float32 *data, *line, *fadiff; NUMA *nadiff; FPIX *fpixh; PROCNAME("fpixExtraHorizDisparity"); if (!fpixv) return (FPIX *)ERROR_PTR("fpixv not defined", procName, NULL); if (!pxwid) return (FPIX *)ERROR_PTR("&xwid not defined", procName, NULL); if (factor == 0.0) factor = DEFAULT_SLOPE_FACTOR; /* Estimate horizontal disparity from the vertical disparity * difference between the top and bottom, normalized to the * image height. Add the maximum value to the width of the * output image, so that all src pixels can be mapped * into the dest. */ fpixGetDimensions(fpixv, &w, &h); nadiff = numaCreate(w); for (j = 0; j < w; j++) { fpixGetPixel(fpixv, j, 0, &val1); fpixGetPixel(fpixv, j, h - 1, &val2); vdisp = factor * (val2 - val1) / (l_float32)h; if (j == 0) vdisp0 = vdisp; vdisp = vdisp0 - vdisp; numaAddNumber(nadiff, vdisp); } numaGetMax(nadiff, &maxval, &maxloc); *pxwid = (l_int32)(maxval + 0.5); fw = w + *pxwid; fpixh = fpixCreate(fw, h); data = fpixGetData(fpixh); wpl = fpixGetWpl(fpixh); fadiff = numaGetFArray(nadiff, L_NOCOPY); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < fw; j++) { if (j < maxloc) /* this may not work for even pages */ line[j] = fadiff[j]; else /* keep it at the max value the rest of the way across */ line[j] = maxval; } } numaDestroy(&nadiff); return fpixh; } #endif leptonica-1.70/src/quadtree.c0000644000175000017500000005564012244234404014263 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * quadtree.c * * Top level quadtree linear statistics * l_int32 pixQuadtreeMean() * l_int32 pixQuadtreeVariance() * * Statistics in an arbitrary rectangle * l_int32 pixMeanInRectangle() * l_int32 pixVarianceInRectangle() * * Quadtree regions * BOXAA *boxaaQuadtreeRegions() * * Quadtree access * l_int32 quadtreeGetParent() * l_int32 quadtreeGetChildren() * l_int32 quadtreeMaxLevels() * * Display quadtree * PIX *fpixaDisplayQuadtree() * * * There are many other statistical quantities that can be computed * in a quadtree, such as rank values, and these can be added as * the need arises. * * Similar results that can approximate a single level of the quadtree * can be generated by pixGetAverageTiled(). There we specify the * tile size over which the mean, mean square, and root variance * are generated; the results are saved in a (reduced size) pix. * Because the tile dimensions are integers, it is usually not possible * to obtain tilings that are a power of 2, as required for quadtrees. */ #include #include "allheaders.h" #ifndef NO_CONSOLE_IO #define DEBUG_BOXES 0 #endif /* !NO_CONSOLE_IO */ /*----------------------------------------------------------------------* * Top-level quadtree linear statistics * *----------------------------------------------------------------------*/ /*! * pixQuadtreeMean() * * Input: pixs (8 bpp, no colormap) * nlevels (in quadtree; max allowed depends on image size) * *pix_ma (input mean accumulator; can be null) * *pfpixa ( mean values in quadtree) * Return: 0 if OK, 1 on error * * Notes: * (1) The returned fpixa has @nlevels of fpix, each containing * the mean values at its level. Level 0 has a * single value; level 1 has 4 values; level 2 has 16; etc. */ l_int32 pixQuadtreeMean(PIX *pixs, l_int32 nlevels, PIX *pix_ma, FPIXA **pfpixa) { l_int32 i, j, w, h, size, n; l_float32 val; BOX *box; BOXA *boxa; BOXAA *baa; FPIX *fpix; PIX *pix_mac; PROCNAME("pixQuadtreeMean"); if (!pfpixa) return ERROR_INT("&fpixa not defined", procName, 1); *pfpixa = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (nlevels > quadtreeMaxLevels(w, h)) return ERROR_INT("nlevels too large for image", procName, 1); if (!pix_ma) pix_mac = pixBlockconvAccum(pixs); else pix_mac = pixClone(pix_ma); if (!pix_mac) return ERROR_INT("pix_mac not made", procName, 1); if ((baa = boxaaQuadtreeRegions(w, h, nlevels)) == NULL) { pixDestroy(&pix_mac); return ERROR_INT("baa not made", procName, 1); } *pfpixa = fpixaCreate(nlevels); for (i = 0; i < nlevels; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); size = 1 << i; n = boxaGetCount(boxa); /* n == size * size */ fpix = fpixCreate(size, size); for (j = 0; j < n; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixMeanInRectangle(pixs, box, pix_mac, &val); fpixSetPixel(fpix, j % size, j / size, val); boxDestroy(&box); } fpixaAddFPix(*pfpixa, fpix, L_INSERT); boxaDestroy(&boxa); } pixDestroy(&pix_mac); boxaaDestroy(&baa); return 0; } /*! * pixQuadtreeVariance() * * Input: pixs (8 bpp, no colormap) * nlevels (in quadtree) * *pix_ma (input mean accumulator; can be null) * *dpix_msa (input mean square accumulator; can be null) * *pfpixa_v ( variance values in quadtree) * *pfpixa_rv ( root variance values in quadtree) * Return: 0 if OK, 1 on error * * Notes: * (1) The returned fpixav and fpixarv have @nlevels of fpix, * each containing at the respective levels the variance * and root variance values. */ l_int32 pixQuadtreeVariance(PIX *pixs, l_int32 nlevels, PIX *pix_ma, DPIX *dpix_msa, FPIXA **pfpixa_v, FPIXA **pfpixa_rv) { l_int32 i, j, w, h, size, n; l_float32 var, rvar; BOX *box; BOXA *boxa; BOXAA *baa; FPIX *fpixv, *fpixrv; PIX *pix_mac; /* copy of mean accumulator */ DPIX *dpix_msac; /* msa clone */ PROCNAME("pixQuadtreeVariance"); if (!pfpixa_v && !pfpixa_rv) return ERROR_INT("neither &fpixav nor &fpixarv defined", procName, 1); if (pfpixa_v) *pfpixa_v = NULL; if (pfpixa_rv) *pfpixa_rv = NULL; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined or not 8 bpp", procName, 1); pixGetDimensions(pixs, &w, &h, NULL); if (nlevels > quadtreeMaxLevels(w, h)) return ERROR_INT("nlevels too large for image", procName, 1); if (!pix_ma) pix_mac = pixBlockconvAccum(pixs); else pix_mac = pixClone(pix_ma); if (!pix_mac) return ERROR_INT("pix_mac not made", procName, 1); if (!dpix_msa) dpix_msac = pixMeanSquareAccum(pixs); else dpix_msac = dpixClone(dpix_msa); if (!dpix_msac) return ERROR_INT("dpix_msac not made", procName, 1); if ((baa = boxaaQuadtreeRegions(w, h, nlevels)) == NULL) { pixDestroy(&pix_mac); dpixDestroy(&dpix_msac); return ERROR_INT("baa not made", procName, 1); } if (pfpixa_v) *pfpixa_v = fpixaCreate(nlevels); if (pfpixa_rv) *pfpixa_rv = fpixaCreate(nlevels); for (i = 0; i < nlevels; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); size = 1 << i; n = boxaGetCount(boxa); /* n == size * size */ if (pfpixa_v) fpixv = fpixCreate(size, size); if (pfpixa_rv) fpixrv = fpixCreate(size, size); for (j = 0; j < n; j++) { box = boxaGetBox(boxa, j, L_CLONE); pixVarianceInRectangle(pixs, box, pix_mac, dpix_msac, &var, &rvar); if (pfpixa_v) fpixSetPixel(fpixv, j % size, j / size, var); if (pfpixa_rv) fpixSetPixel(fpixrv, j % size, j / size, rvar); boxDestroy(&box); } if (pfpixa_v) fpixaAddFPix(*pfpixa_v, fpixv, L_INSERT); if (pfpixa_rv) fpixaAddFPix(*pfpixa_rv, fpixrv, L_INSERT); boxaDestroy(&boxa); } pixDestroy(&pix_mac); dpixDestroy(&dpix_msac); boxaaDestroy(&baa); return 0; } /*----------------------------------------------------------------------* * Statistics in an arbitrary rectangle * *----------------------------------------------------------------------*/ /*! * pixMeanInRectangle() * * Input: pix (8 bpp) * box (region to compute mean value) * pixma (mean accumulator) * &val ( mean value * Return: 0 if OK, 1 on error * * Notes: * (1) This function is intended to be used for many rectangles * on the same image. It can find the mean within a * rectangle in O(1), independent of the size of the rectangle. */ l_int32 pixMeanInRectangle(PIX *pixs, BOX *box, PIX *pixma, l_float32 *pval) { l_int32 w, h, bx, by, bw, bh; l_uint32 val00, val01, val10, val11; l_float32 norm; BOX *boxc; PROCNAME("pixMeanInRectangle"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (!pixma) return ERROR_INT("pixma not defined", procName, 1); /* Clip rectangle to image */ pixGetDimensions(pixs, &w, &h, NULL); boxc = boxClipToRectangle(box, w, h); boxGetGeometry(boxc, &bx, &by, &bw, &bh); boxDestroy(&boxc); if (bw == 0 || bh == 0) return ERROR_INT("no pixels in box", procName, 1); /* Use up to 4 points in the accumulator */ norm = 1.0 / (bw * bh); if (bx > 0 && by > 0) { pixGetPixel(pixma, bx + bw - 1, by + bh - 1, &val11); pixGetPixel(pixma, bx + bw - 1, by - 1, &val10); pixGetPixel(pixma, bx - 1, by + bh - 1, &val01); pixGetPixel(pixma, bx - 1, by - 1, &val00); *pval = norm * (val11 - val01 + val00 - val10); } else if (by > 0) { /* bx == 0 */ pixGetPixel(pixma, bw - 1, by + bh - 1, &val11); pixGetPixel(pixma, bw - 1, by - 1, &val10); *pval = norm * (val11 - val10); } else if (bx > 0) { /* by == 0 */ pixGetPixel(pixma, bx + bw - 1, bh - 1, &val11); pixGetPixel(pixma, bx - 1, bh - 1, &val01); *pval = norm * (val11 - val01); } else { /* bx == 0 && by == 0 */ pixGetPixel(pixma, bw - 1, bh - 1, &val11); *pval = norm * val11; } return 0; } /*! * pixVarianceInRectangle() * * Input: pix (8 bpp) * box (region to compute variance and/or root variance) * pix_ma (mean accumulator) * dpix_msa (mean square accumulator) * &var ( variance) * &rvar ( root variance) * Return: 0 if OK, 1 on error * * Notes: * (1) This function is intended to be used for many rectangles * on the same image. It can find the variance and/or the * square root of the variance within a rectangle in O(1), * independent of the size of the rectangle. */ l_int32 pixVarianceInRectangle(PIX *pixs, BOX *box, PIX *pix_ma, DPIX *dpix_msa, l_float32 *pvar, l_float32 *prvar) { l_int32 w, h, bx, by, bw, bh; l_uint32 val00, val01, val10, val11; l_float64 dval00, dval01, dval10, dval11, mval, msval, var, norm; BOX *boxc; PROCNAME("pixVarianceInRectangle"); if (!pvar && !prvar) return ERROR_INT("neither &var nor &rvar defined", procName, 1); if (pvar) *pvar = 0.0; if (prvar) *prvar = 0.0; if (!pixs || pixGetDepth(pixs) != 8) return ERROR_INT("pixs not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (!pix_ma) return ERROR_INT("pix_ma not defined", procName, 1); if (!dpix_msa) return ERROR_INT("dpix_msa not defined", procName, 1); /* Clip rectangle to image */ pixGetDimensions(pixs, &w, &h, NULL); boxc = boxClipToRectangle(box, w, h); boxGetGeometry(boxc, &bx, &by, &bw, &bh); boxDestroy(&boxc); if (bw == 0 || bh == 0) return ERROR_INT("no pixels in box", procName, 1); /* Use up to 4 points in the accumulators */ norm = 1.0 / (bw * bh); if (bx > 0 && by > 0) { pixGetPixel(pix_ma, bx + bw - 1, by + bh - 1, &val11); pixGetPixel(pix_ma, bx + bw - 1, by - 1, &val10); pixGetPixel(pix_ma, bx - 1, by + bh - 1, &val01); pixGetPixel(pix_ma, bx - 1, by - 1, &val00); dpixGetPixel(dpix_msa, bx + bw - 1, by + bh - 1, &dval11); dpixGetPixel(dpix_msa, bx + bw - 1, by - 1, &dval10); dpixGetPixel(dpix_msa, bx - 1, by + bh - 1, &dval01); dpixGetPixel(dpix_msa, bx - 1, by - 1, &dval00); mval = norm * (val11 - val01 + val00 - val10); msval = norm * (dval11 - dval01 + dval00 - dval10); var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } else if (by > 0) { /* bx == 0 */ pixGetPixel(pix_ma, bw - 1, by + bh - 1, &val11); pixGetPixel(pix_ma, bw - 1, by - 1, &val10); dpixGetPixel(dpix_msa, bw - 1, by + bh - 1, &dval11); dpixGetPixel(dpix_msa, bw - 1, by - 1, &dval10); mval = norm * (val11 - val10); msval = norm * (dval11 - dval10); var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } else if (bx > 0) { /* by == 0 */ pixGetPixel(pix_ma, bx + bw - 1, bh - 1, &val11); pixGetPixel(pix_ma, bx - 1, bh - 1, &val01); dpixGetPixel(dpix_msa, bx + bw - 1, bh - 1, &dval11); dpixGetPixel(dpix_msa, bx - 1, bh - 1, &dval01); mval = norm * (val11 - val01); msval = norm * (dval11 - dval01); var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } else { /* bx == 0 && by == 0 */ pixGetPixel(pix_ma, bw - 1, bh - 1, &val11); dpixGetPixel(dpix_msa, bw - 1, bh - 1, &dval11); mval = norm * val11; msval = norm * dval11; var = (msval - mval * mval); if (pvar) *pvar = (l_float32)var; if (prvar) *prvar = (l_float32)(sqrt(var)); } return 0; } /*----------------------------------------------------------------------* * Quadtree regions * *----------------------------------------------------------------------*/ /*! * boxaaQuadtreeRegions() * * Input: w, h (of pix that is being quadtree-ized) * nlevels (in quadtree) * Return: baa (for quadtree regions at each level), or null on error * * Notes: * (1) The returned boxaa has @nlevels of boxa, each containing * the set of rectangles at that level. The rectangle at * level 0 is the entire region; at level 1 the region is * divided into 4 rectangles, and at level n there are n^4 * rectangles. * (2) At each level, the rectangles in the boxa are in "raster" * order, with LR (fast scan) and TB (slow scan). */ BOXAA * boxaaQuadtreeRegions(l_int32 w, l_int32 h, l_int32 nlevels) { l_int32 i, j, k, maxpts, nside, nbox, bw, bh; l_int32 *xstart, *xend, *ystart, *yend; BOX *box; BOXA *boxa; BOXAA *baa; PROCNAME("boxaaQuadtreeRegions"); if (nlevels < 1) return (BOXAA *)ERROR_PTR("nlevels must be >= 1", procName, NULL); if (w < (1 << (nlevels - 1))) return (BOXAA *)ERROR_PTR("w doesn't support nlevels", procName, NULL); if (h < (1 << (nlevels - 1))) return (BOXAA *)ERROR_PTR("h doesn't support nlevels", procName, NULL); baa = boxaaCreate(nlevels); maxpts = 1 << (nlevels - 1); xstart = (l_int32 *)CALLOC(maxpts, sizeof(l_int32)); xend = (l_int32 *)CALLOC(maxpts, sizeof(l_int32)); ystart = (l_int32 *)CALLOC(maxpts, sizeof(l_int32)); yend = (l_int32 *)CALLOC(maxpts, sizeof(l_int32)); for (k = 0; k < nlevels; k++) { nside = 1 << k; /* number of boxes in each direction */ for (i = 0; i < nside; i++) { xstart[i] = (w - 1) * i / nside; if (i > 0) xstart[i]++; xend[i] = (w - 1) * (i + 1) / nside; ystart[i] = (h - 1) * i / nside; if (i > 0) ystart[i]++; yend[i] = (h - 1) * (i + 1) / nside; #if DEBUG_BOXES fprintf(stderr, "k = %d, xs[%d] = %d, xe[%d] = %d, ys[%d] = %d, ye[%d] = %d\n", k, i, xstart[i], i, xend[i], i, ystart[i], i, yend[i]); #endif /* DEBUG_BOXES */ } nbox = 1 << (2 * k); boxa = boxaCreate(nbox); for (i = 0; i < nside; i++) { bh = yend[i] - ystart[i] + 1; for (j = 0; j < nside; j++) { bw = xend[j] - xstart[j] + 1; box = boxCreate(xstart[j], ystart[i], bw, bh); boxaAddBox(boxa, box, L_INSERT); } } boxaaAddBoxa(baa, boxa, L_INSERT); } FREE(xstart); FREE(xend); FREE(ystart); FREE(yend); return baa; } /*----------------------------------------------------------------------* * Quadtree access * *----------------------------------------------------------------------*/ /*! * quadtreeGetParent() * * Input: fpixa (mean, variance or root variance) * level, x, y (of current pixel) * &val ( parent pixel value), or 0.0 on error. * Return: 0 if OK, 1 on error * * Notes: * (1) Check return value for error. On error, val is returned as 0.0. * (2) The parent is located at: * level - 1 * (x/2, y/2) */ l_int32 quadtreeGetParent(FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval) { l_int32 n; PROCNAME("quadtreeGetParent"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); n = fpixaGetCount(fpixa); if (level < 1 || level >= n) return ERROR_INT("invalid level", procName, 1); if (fpixaGetPixel(fpixa, level - 1, x / 2, y / 2, pval) != 0) return ERROR_INT("invalid coordinates", procName, 1); return 0; } /*! * quadtreeGetChildren() * * Input: fpixa (mean, variance or root variance) * level, x, y (of current pixel) * &val00, val01, val10, val11 ( child pixel values) * Return: 0 if OK, 1 on error * * Notes: * (1) Check return value for error. On error, all return vals are 0.0. * (2) The returned child pixels are located at: * level + 1 * (2x, 2y), (2x+1, 2y), (2x, 2y+1), (2x+1, 2y+1) */ l_int32 quadtreeGetChildren(FPIXA *fpixa, l_int32 level, l_int32 x, l_int32 y, l_float32 *pval00, l_float32 *pval10, l_float32 *pval01, l_float32 *pval11) { l_int32 n; PROCNAME("quadtreeGetChildren"); if (!pval00 || !pval01 || !pval10 || !pval11) return ERROR_INT("&val* not all defined", procName, 1); *pval00 = *pval10 = *pval01 = *pval11 = 0.0; if (!fpixa) return ERROR_INT("fpixa not defined", procName, 1); n = fpixaGetCount(fpixa); if (level < 0 || level >= n - 1) return ERROR_INT("invalid level", procName, 1); if (fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y, pval00) != 0) return ERROR_INT("invalid coordinates", procName, 1); fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y, pval10); fpixaGetPixel(fpixa, level + 1, 2 * x, 2 * y + 1, pval01); fpixaGetPixel(fpixa, level + 1, 2 * x + 1, 2 * y + 1, pval11); return 0; } /*! * quadtreeMaxLevels() * * Input: w, h (of image) * Return: maxlevels (maximum number of levels allowed), or -1 on error * * Notes: * (1) The criterion for maxlevels is that the subdivision not * go down below the single pixel level. The 1.5 factor * is intended to keep any rectangle from accidentally * having zero dimension due to integer truncation. */ l_int32 quadtreeMaxLevels(l_int32 w, l_int32 h) { l_int32 i, minside; minside = L_MIN(w, h); for (i = 0; i < 20; i++) { /* 2^10 = one million */ if (minside < (1.5 * (1 << i))) return i - 1; } return -1; /* fail if the image has over a trillion pixels! */ } /*----------------------------------------------------------------------* * Display quadtree * *----------------------------------------------------------------------*/ /*! * fpixaDisplayQuadtree() * * Input: fpixa (mean, variance or root variance) * factor (replication factor at lowest level) * Return: pixd (8 bpp, mosaic of quadtree images), or null on error * * Notes: * (1) The mean and root variance fall naturally in the 8 bpp range, * but the variance is typically outside the range. This * function displays 8 bpp pix clipped to 255, so the image * pixels will mostly be 255 (white). */ PIX * fpixaDisplayQuadtree(FPIXA *fpixa, l_int32 factor) { char buf[256]; l_int32 nlevels, i, mag, w; L_BMF *bmf; FPIX *fpix; PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixd; PIXA *pixat; PROCNAME("fpixaDisplayQuadtree"); if (!fpixa) return (PIX *)ERROR_PTR("fpixa not defined", procName, NULL); if ((nlevels = fpixaGetCount(fpixa)) == 0) return (PIX *)ERROR_PTR("pixas empty", procName, NULL); bmf = bmfCreate("./fonts", 6); pixat = pixaCreate(nlevels); for (i = 0; i < nlevels; i++) { fpix = fpixaGetFPix(fpixa, i, L_CLONE); pixt1 = fpixConvertToPix(fpix, 8, L_CLIP_TO_ZERO, 0); mag = factor * (1 << (nlevels - i - 1)); pixt2 = pixExpandReplicate(pixt1, mag); pixt3 = pixConvertTo32(pixt2); snprintf(buf, sizeof(buf), "Level %d\n", i); pixt4 = pixAddSingleTextblock(pixt3, bmf, buf, 0xff000000, L_ADD_BELOW, NULL); pixaAddPix(pixat, pixt4, L_INSERT); fpixDestroy(&fpix); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); } w = pixGetWidth(pixt4); pixd = pixaDisplayTiledInRows(pixat, 32, nlevels * (w + 80), 1.0, 0, 30, 2); pixaDestroy(&pixat); bmfDestroy(&bmf); return pixd; } leptonica-1.70/src/pdfiostub.c0000664000175000017500000003104712262575560014460 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pdfiostub.c * * Stubs for pdfio.c functions */ #include "allheaders.h" /* --------------------------------------------*/ #if !USE_PDFIO /* defined in environ.h */ /* --------------------------------------------*/ l_int32 convertFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { return ERROR_INT("function not present", "convertFilesToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 saConvertFilesToPdf(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { return ERROR_INT("function not present", "saConvertFilesToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 saConvertFilesToPdfData(SARRAY *sa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "saConvertFilesToPdfData", 1); } /* ----------------------------------------------------------------------*/ l_int32 selectDefaultPdfEncoding(PIX *pix, l_int32 *ptype) { return ERROR_INT("function not present", "selectDefaultPdfEncoding", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertUnscaledFilesToPdf(const char *dirname, const char *substr, const char *title, const char *fileout) { return ERROR_INT("function not present", "convertUnscaledFilesToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 saConvertUnscaledFilesToPdf(SARRAY *sa, const char *title, const char *fileout) { return ERROR_INT("function not present", "saConvertUnscaledFilesToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 saConvertUnscaledFilesToPdfData(SARRAY *sa, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "saConvertUnscaledFilesToPdfData", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertUnscaledToPdfData(const char *fname, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "convertUnscaledToPdfData", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixaConvertToPdf(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { return ERROR_INT("function not present", "pixaConvertToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixaConvertToPdfData(PIXA *pixa, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "pixaConvertToPdfData", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertToPdf(const char *filein, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", "convertToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertImageDataToPdf(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", "convertImageDataToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertToPdfData(const char *filein, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", "convertToPdfData", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertImageDataToPdfData(l_uint8 *imdata, size_t size, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", "convertImageDataToPdfData", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixConvertToPdf(PIX *pix, l_int32 type, l_int32 quality, const char *fileout, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", "pixConvertToPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixConvertToPdfData(PIX *pix, l_int32 type, l_int32 quality, l_uint8 **pdata, size_t *pnbytes, l_int32 x, l_int32 y, l_int32 res, const char *title, L_PDF_DATA **plpd, l_int32 position) { return ERROR_INT("function not present", "pixConvertToPdfData", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixWriteStreamPdf(FILE *fp, PIX *pix, l_int32 res, const char *title) { return ERROR_INT("function not present", "pixWriteStreamPdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertSegmentedFilesToPdf(const char *dirname, const char *substr, l_int32 res, l_int32 type, l_int32 thresh, BOXAA *baa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { return ERROR_INT("function not present", "convertSegmentedFilesToPdf", 1); } /* ----------------------------------------------------------------------*/ BOXAA * convertNumberedMasksToBoxaa(const char *dirname, const char *substr, l_int32 numpre, l_int32 numpost) { return (BOXAA *)ERROR_PTR("function not present", "convertNumberedMasksToBoxaa", NULL); } /* ----------------------------------------------------------------------*/ l_int32 convertToPdfSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { return ERROR_INT("function not present", "convertToPdfSegmented", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixConvertToPdfSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, const char *fileout) { return ERROR_INT("function not present", "pixConvertToPdfSegmented", 1); } /* ----------------------------------------------------------------------*/ l_int32 convertToPdfDataSegmented(const char *filein, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "convertToPdfDataSegmented", 1); } /* ----------------------------------------------------------------------*/ l_int32 pixConvertToPdfDataSegmented(PIX *pixs, l_int32 res, l_int32 type, l_int32 thresh, BOXA *boxa, l_int32 quality, l_float32 scalefactor, const char *title, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "pixConvertToPdfDataSegmented", 1); } /* ----------------------------------------------------------------------*/ l_int32 concatenatePdf(const char *dirname, const char *substr, const char *fileout) { return ERROR_INT("function not present", "concatenatePdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 saConcatenatePdf(SARRAY *sa, const char *fileout) { return ERROR_INT("function not present", "saConcatenatePdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 ptraConcatenatePdf(L_PTRA *pa, const char *fileout) { return ERROR_INT("function not present", "ptraConcatenatePdf", 1); } /* ----------------------------------------------------------------------*/ l_int32 concatenatePdfToData(const char *dirname, const char *substr, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "concatenatePdfToData", 1); } /* ----------------------------------------------------------------------*/ l_int32 saConcatenatePdfToData(SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "saConcatenatePdfToData", 1); } /* ----------------------------------------------------------------------*/ l_int32 ptraConcatenatePdfToData(L_PTRA *pa_data, SARRAY *sa, l_uint8 **pdata, size_t *pnbytes) { return ERROR_INT("function not present", "ptraConcatenatePdfToData", 1); } /* ----------------------------------------------------------------------*/ void l_pdfSetG4ImageMask(l_int32 flag) { L_ERROR("function not present", "l_pdfSetG4ImageMask"); return; } /* ----------------------------------------------------------------------*/ void l_pdfSetDateAndVersion(l_int32 flag) { L_ERROR("function not present", "l_pdfSetDateAndVersion"); return; } /* --------------------------------------------*/ #endif /* !USE_PDFIO */ /* --------------------------------------------*/ leptonica-1.70/src/gplot.h0000644000175000017500000000666111707052573013612 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_GPLOT_H #define LEPTONICA_GPLOT_H /* * gplot.h * * Data structures and parameters for generating gnuplot files */ #define GPLOT_VERSION_NUMBER 1 #define NUM_GPLOT_STYLES 5 enum GPLOT_STYLE { GPLOT_LINES = 0, GPLOT_POINTS = 1, GPLOT_IMPULSES = 2, GPLOT_LINESPOINTS = 3, GPLOT_DOTS = 4 }; #define NUM_GPLOT_OUTPUTS 6 enum GPLOT_OUTPUT { GPLOT_NONE = 0, GPLOT_PNG = 1, GPLOT_PS = 2, GPLOT_EPS = 3, GPLOT_X11 = 4, GPLOT_LATEX = 5 }; enum GPLOT_SCALING { GPLOT_LINEAR_SCALE = 0, /* default */ GPLOT_LOG_SCALE_X = 1, GPLOT_LOG_SCALE_Y = 2, GPLOT_LOG_SCALE_X_Y = 3 }; extern const char *gplotstylenames[]; /* used in gnuplot cmd file */ extern const char *gplotfilestyles[]; /* used in simple file input */ extern const char *gplotfileoutputs[]; /* used in simple file input */ struct GPlot { char *rootname; /* for cmd, data, output */ char *cmdname; /* command file name */ struct Sarray *cmddata; /* command file contents */ struct Sarray *datanames; /* data file names */ struct Sarray *plotdata; /* plot data (1 string/file) */ struct Sarray *plottitles; /* title for each individual plot */ struct Numa *plotstyles; /* plot style for individual plots */ l_int32 nplots; /* current number of plots */ char *outname; /* output file name */ l_int32 outformat; /* GPLOT_OUTPUT values */ l_int32 scaling; /* GPLOT_SCALING values */ char *title; /* optional */ char *xlabel; /* optional x axis label */ char *ylabel; /* optional y axis label */ }; typedef struct GPlot GPLOT; #endif /* LEPTONICA_GPLOT_H */ leptonica-1.70/src/pix.h0000644000175000017500000014250212270566024013255 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_PIX_H #define LEPTONICA_PIX_H /* * pix.h * * Valid image types in leptonica: * Pix: 1 bpp, with and without colormap * Pix: 2 bpp, with and without colormap * Pix: 4 bpp, with and without colormap * Pix: 8 bpp, with and without colormap * Pix: 16 bpp (1 spp) * Pix: 32 bpp (rgb, 3 spp) * Pix: 32 bpp (rgba, 4 spp) * FPix: 32 bpp float * DPix: 64 bpp double * Notes: * (1) The only valid Pix image type with alpha is rgba. * In particular, the alpha component is not used in * cmapped images. * (2) PixComp can hold any Pix with IFF_PNG encoding. * * This file defines most of the image-related structs used in leptonica: * struct Pix * struct PixColormap * struct RGBA_Quad * struct Pixa * struct Pixaa * struct Box * struct Boxa * struct Boxaa * struct Pta * struct Ptaa * struct Pixacc * struct PixTiling * struct FPix * struct FPixa * struct DPix * struct PixComp * struct PixaComp * * This file has definitions for: * Colors for RGB * Perceptual color weights * Colormap conversion flags * Rasterop bit flags * Structure access flags (for insert, copy, clone, copy-clone) * Sorting flags (by type and direction) * Blending flags * Graphics pixel setting flags * Size filtering flags * Color component selection flags * 16-bit conversion flags * Rotation and shear flags * Affine transform order flags * Grayscale filling flags * Flags for setting to white or black * Flags for getting white or black pixel value * Flags for 8 and 16 bit pixel sums * Dithering flags * Distance flags * Statistical measures * Set selection flags * Text orientation flags * Edge orientation flags * Line orientation flags * Scan direction flags * Box size adjustment flags * Handling overlapping bounding boxes in boxa * Horizontal warp * Pixel selection for resampling * Thinning flags * Runlength flags * Edge filter flags * Handling negative values in conversion to unsigned int * Subpixel color component ordering in LCD display * Relative to zero flags * HSV histogram flags * Region flags (inclusion, exclusion) * Flags for adding text to a pix * Flags for selecting display program * Flags in the 'special' pix field for non-default operations */ /*-------------------------------------------------------------------------* * Basic Pix * *-------------------------------------------------------------------------*/ /* The 'special' field is by default 0, but it can hold integers * that direct non-default actions, e.g., in png and jpeg I/O. */ struct Pix { l_uint32 w; /* width in pixels */ l_uint32 h; /* height in pixels */ l_uint32 d; /* depth in bits (bpp) */ l_uint32 spp; /* number of samples per pixel */ l_uint32 wpl; /* 32-bit words/line */ l_uint32 refcount; /* reference count (1 if no clones) */ l_int32 xres; /* image res (ppi) in x direction */ /* (use 0 if unknown) */ l_int32 yres; /* image res (ppi) in y direction */ /* (use 0 if unknown) */ l_int32 informat; /* input file format, IFF_* */ l_int32 special; /* special instructions for I/O, etc */ char *text; /* text string associated with pix */ struct PixColormap *colormap; /* colormap (may be null) */ l_uint32 *data; /* the image data */ }; typedef struct Pix PIX; struct PixColormap { void *array; /* colormap table (array of RGBA_QUAD) */ l_int32 depth; /* of pix (1, 2, 4 or 8 bpp) */ l_int32 nalloc; /* number of color entries allocated */ l_int32 n; /* number of color entries used */ }; typedef struct PixColormap PIXCMAP; /* Colormap table entry (after the BMP version). * Note that the BMP format stores the colormap table exactly * as it appears here, with color samples being stored sequentially, * in the order (b,g,r,a). */ struct RGBA_Quad { l_uint8 blue; l_uint8 green; l_uint8 red; l_uint8 alpha; }; typedef struct RGBA_Quad RGBA_QUAD; /*-------------------------------------------------------------------------* * Colors for 32 bpp * *-------------------------------------------------------------------------*/ /* Notes: * (1) These are the byte indices for colors in 32 bpp images. * They are used through the GET/SET_DATA_BYTE accessors. * The 4th byte, typically known as the "alpha channel" and used * for blending, is used to a small extent in leptonica. * (2) Do not change these values! If you redefine them, functions * that have the shifts hardcoded for efficiency and conciseness * (instead of using the constants below) will break. These * functions are labelled with "***" next to their names at * the top of the files in which they are defined. * (3) The shifts to extract the red, green, blue and alpha components * from a 32 bit pixel are defined here. */ enum { COLOR_RED = 0, COLOR_GREEN = 1, COLOR_BLUE = 2, L_ALPHA_CHANNEL = 3 }; static const l_int32 L_RED_SHIFT = 8 * (sizeof(l_uint32) - 1 - COLOR_RED); /* 24 */ static const l_int32 L_GREEN_SHIFT = 8 * (sizeof(l_uint32) - 1 - COLOR_GREEN); /* 16 */ static const l_int32 L_BLUE_SHIFT = 8 * (sizeof(l_uint32) - 1 - COLOR_BLUE); /* 8 */ static const l_int32 L_ALPHA_SHIFT = 8 * (sizeof(l_uint32) - 1 - L_ALPHA_CHANNEL); /* 0 */ /*-------------------------------------------------------------------------* * Perceptual color weights * *-------------------------------------------------------------------------*/ /* Notes: * (1) These numbers are ad-hoc, but they do add up to 1. * Unlike, for example, the weighting factor for conversion * of RGB to luminance, or more specifically to Y in the * YUV colorspace. Those numbers come from the * International Telecommunications Union, via ITU-R. */ static const l_float32 L_RED_WEIGHT = 0.3; static const l_float32 L_GREEN_WEIGHT = 0.5; static const l_float32 L_BLUE_WEIGHT = 0.2; /*-------------------------------------------------------------------------* * Flags for colormap conversion * *-------------------------------------------------------------------------*/ enum { REMOVE_CMAP_TO_BINARY = 0, REMOVE_CMAP_TO_GRAYSCALE = 1, REMOVE_CMAP_TO_FULL_COLOR = 2, REMOVE_CMAP_WITH_ALPHA = 3, REMOVE_CMAP_BASED_ON_SRC = 4 }; /*-------------------------------------------------------------------------* * * The following operation bit flags have been modified from * Sun's pixrect.h. * * The 'op' in 'rasterop' is represented by an integer * composed with Boolean functions using the set of five integers * given below. The integers, and the op codes resulting from * boolean expressions on them, need only be in the range from 0 to 15. * The function is applied on a per-pixel basis. * * Examples: the op code representing ORing the src and dest * is computed using the bit OR, as PIX_SRC | PIX_DST; the op * code representing XORing src and dest is found from * PIX_SRC ^ PIX_DST; the op code representing ANDing src and dest * is found from PIX_SRC & PIX_DST. Note that * PIX_NOT(PIX_CLR) = PIX_SET, and v.v., as they must be. * * We would like to use the following set of definitions: * * #define PIX_SRC 0xc * #define PIX_DST 0xa * #define PIX_NOT(op) ((op) ^ 0xf) * #define PIX_CLR 0x0 * #define PIX_SET 0xf * * Now, these definitions differ from Sun's, in that Sun * left-shifted each value by 1 pixel, and used the least * significant bit as a flag for the "pseudo-operation" of * clipping. We don't need this bit, because it is both * efficient and safe ALWAYS to clip the rectangles to the src * and dest images, which is what we do. See the notes in rop.h * on the general choice of these bit flags. * * However, if you include Sun's xview package, you will get their * definitions, and because I like using these flags, we will * adopt the original Sun definitions to avoid redefinition conflicts. * * Then we have, for reference, the following 16 unique op flags: * * PIX_CLR 00000 0x0 * PIX_SET 11110 0x1e * PIX_SRC 11000 0x18 * PIX_DST 10100 0x14 * PIX_NOT(PIX_SRC) 00110 0x06 * PIX_NOT(PIX_DST) 01010 0x0a * PIX_SRC | PIX_DST 11100 0x1c * PIX_SRC & PIX_DST 10000 0x10 * PIX_SRC ^ PIX_DST 01100 0x0c * PIX_NOT(PIX_SRC) | PIX_DST 10110 0x16 * PIX_NOT(PIX_SRC) & PIX_DST 00100 0x04 * PIX_SRC | PIX_NOT(PIX_DST) 11010 0x1a * PIX_SRC & PIX_NOT(PIX_DST) 01000 0x08 * PIX_NOT(PIX_SRC | PIX_DST) 00010 0x02 * PIX_NOT(PIX_SRC & PIX_DST) 01110 0x0e * PIX_NOT(PIX_SRC ^ PIX_DST) 10010 0x12 * *-------------------------------------------------------------------------*/ #define PIX_SRC (0xc << 1) #define PIX_DST (0xa << 1) #define PIX_NOT(op) ((op) ^ 0x1e) #define PIX_CLR (0x0 << 1) #define PIX_SET (0xf << 1) #define PIX_PAINT (PIX_SRC | PIX_DST) #define PIX_MASK (PIX_SRC & PIX_DST) #define PIX_SUBTRACT (PIX_DST & PIX_NOT(PIX_SRC)) #define PIX_XOR (PIX_SRC ^ PIX_DST) /*-------------------------------------------------------------------------* * * Important Notes: * * (1) The image data is stored in a single contiguous * array of l_uint32, into which the pixels are packed. * By "packed" we mean that there are no unused bits * between pixels, except for end-of-line padding to * satisfy item (2) below. * * (2) Every image raster line begins on a 32-bit word * boundary within this array. * * (3) Pix image data is stored in 32-bit units, with the * pixels ordered from left to right in the image being * stored in order from the MSB to LSB within the word, * for both big-endian and little-endian machines. * This is the natural ordering for big-endian machines, * as successive bytes are stored and fetched progressively * to the right. However, for little-endians, when storing * we re-order the bytes from this byte stream order, and * reshuffle again for byte access on 32-bit entities. * So if the bytes come in sequence from left to right, we * store them on little-endians in byte order: * 3 2 1 0 7 6 5 4 ... * This MSB to LSB ordering allows left and right shift * operations on 32 bit words to move the pixels properly. * * (4) We use 32 bit pixels for both RGB and RGBA color images. * The A (alpha) byte is ignored in most leptonica functions * operating on color images. Within each 4 byte pixel, the * colors are ordered from MSB to LSB, as follows: * * | MSB | 2nd MSB | 3rd MSB | LSB | * red green blue alpha * 0 1 2 3 (big-endian) * 3 2 1 0 (little-endian) * * Because we use MSB to LSB ordering within the 32-bit word, * the individual 8-bit samples can be accessed with * GET_DATA_BYTE and SET_DATA_BYTE macros, using the * (implicitly big-ending) ordering * red: byte 0 (MSB) * green: byte 1 (2nd MSB) * blue: byte 2 (3rd MSB) * alpha: byte 3 (LSB) * * The specific color assignment is made in this file, * through the definitions of COLOR_RED, etc. Then the R, G * B and A sample values can be retrieved using * redval = GET_DATA_BYTE(&pixel, COLOR_RED); * greenval = GET_DATA_BYTE(&pixel, COLOR_GREEN); * blueval = GET_DATA_BYTE(&pixel, COLOR_BLUE); * alphaval = GET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL); * and they can be set with * SET_DATA_BYTE(&pixel, COLOR_RED, redval); * SET_DATA_BYTE(&pixel, COLOR_GREEN, greenval); * SET_DATA_BYTE(&pixel, COLOR_BLUE, blueval); * SET_DATA_BYTE(&pixel, L_ALPHA_CHANNEL, alphaval); * * For extra speed we extract these components directly * by shifting and masking, explicitly using the values in * L_RED_SHIFT, etc.: * (pixel32 >> L_RED_SHIFT) & 0xff; (red) * (pixel32 >> L_GREEN_SHIFT) & 0xff; (green) * (pixel32 >> L_BLUE_SHIFT) & 0xff; (blue) * (pixel32 >> L_ALPHA_SHIFT) & 0xff; (alpha) * All these operations work properly on both big- and little-endians. * * For a few situations, these color shift values are hard-coded. * Changing the RGB color component ordering through the assignments * in this file will cause functions marked with "***" to fail. * * (5) A reference count is held within each pix, giving the * number of ptrs to the pix. When a pixClone() call * is made, the ref count is increased by 1, and * when a pixDestroy() call is made, the reference count * of the pix is decremented. The pix is only destroyed * when the reference count goes to zero. * * (6) The version numbers (below) are used in the serialization * of these data structures. They are placed in the files, * and rarely (if ever) change. Provision is currently made for * backward compatibility in reading from boxaa version 2. * * (7) The serialization dependencies are as follows: * pixaa : pixa : boxa * boxaa : boxa * So, for example, pixaa and boxaa can be changed without * forcing a change in pixa or boxa. However, if pixa is * changed, it forces a change in pixaa, and if boxa is * changed, if forces a change in the other three. * We define four version numbers: * PIXAA_VERSION_NUMBER * PIXA_VERSION_NUMBER * BOXAA_VERSION_NUMBER * BOXA_VERSION_NUMBER * *-------------------------------------------------------------------------*/ /*-------------------------------------------------------------------------* * Array of pix * *-------------------------------------------------------------------------*/ /* Serialization for primary data structures */ #define PIXAA_VERSION_NUMBER 2 #define PIXA_VERSION_NUMBER 2 #define BOXA_VERSION_NUMBER 2 #define BOXAA_VERSION_NUMBER 3 struct Pixa { l_int32 n; /* number of Pix in ptr array */ l_int32 nalloc; /* number of Pix ptrs allocated */ l_uint32 refcount; /* reference count (1 if no clones) */ struct Pix **pix; /* the array of ptrs to pix */ struct Boxa *boxa; /* array of boxes */ }; typedef struct Pixa PIXA; struct Pixaa { l_int32 n; /* number of Pixa in ptr array */ l_int32 nalloc; /* number of Pixa ptrs allocated */ struct Pixa **pixa; /* array of ptrs to pixa */ struct Boxa *boxa; /* array of boxes */ }; typedef struct Pixaa PIXAA; /*-------------------------------------------------------------------------* * Basic rectangle and rectangle arrays * *-------------------------------------------------------------------------*/ struct Box { l_int32 x; l_int32 y; l_int32 w; l_int32 h; l_uint32 refcount; /* reference count (1 if no clones) */ }; typedef struct Box BOX; struct Boxa { l_int32 n; /* number of box in ptr array */ l_int32 nalloc; /* number of box ptrs allocated */ l_uint32 refcount; /* reference count (1 if no clones) */ struct Box **box; /* box ptr array */ }; typedef struct Boxa BOXA; struct Boxaa { l_int32 n; /* number of boxa in ptr array */ l_int32 nalloc; /* number of boxa ptrs allocated */ struct Boxa **boxa; /* boxa ptr array */ }; typedef struct Boxaa BOXAA; /*-------------------------------------------------------------------------* * Array of points * *-------------------------------------------------------------------------*/ #define PTA_VERSION_NUMBER 1 struct Pta { l_int32 n; /* actual number of pts */ l_int32 nalloc; /* size of allocated arrays */ l_uint32 refcount; /* reference count (1 if no clones) */ l_float32 *x, *y; /* arrays of floats */ }; typedef struct Pta PTA; /*-------------------------------------------------------------------------* * Array of Pta * *-------------------------------------------------------------------------*/ struct Ptaa { l_int32 n; /* number of pta in ptr array */ l_int32 nalloc; /* number of pta ptrs allocated */ struct Pta **pta; /* pta ptr array */ }; typedef struct Ptaa PTAA; /*-------------------------------------------------------------------------* * Pix accumulator container * *-------------------------------------------------------------------------*/ struct Pixacc { l_int32 w; /* array width */ l_int32 h; /* array height */ l_int32 offset; /* used to allow negative */ /* intermediate results */ struct Pix *pix; /* the 32 bit accumulator pix */ }; typedef struct Pixacc PIXACC; /*-------------------------------------------------------------------------* * Pix tiling * *-------------------------------------------------------------------------*/ struct PixTiling { struct Pix *pix; /* input pix (a clone) */ l_int32 nx; /* number of tiles horizontally */ l_int32 ny; /* number of tiles vertically */ l_int32 w; /* tile width */ l_int32 h; /* tile height */ l_int32 xoverlap; /* overlap on left and right */ l_int32 yoverlap; /* overlap on top and bottom */ l_int32 strip; /* strip for paint; default is TRUE */ }; typedef struct PixTiling PIXTILING; /*-------------------------------------------------------------------------* * FPix: pix with float array * *-------------------------------------------------------------------------*/ #define FPIX_VERSION_NUMBER 2 struct FPix { l_int32 w; /* width in pixels */ l_int32 h; /* height in pixels */ l_int32 wpl; /* 32-bit words/line */ l_uint32 refcount; /* reference count (1 if no clones) */ l_int32 xres; /* image res (ppi) in x direction */ /* (use 0 if unknown) */ l_int32 yres; /* image res (ppi) in y direction */ /* (use 0 if unknown) */ l_float32 *data; /* the float image data */ }; typedef struct FPix FPIX; struct FPixa { l_int32 n; /* number of fpix in ptr array */ l_int32 nalloc; /* number of fpix ptrs allocated */ l_uint32 refcount; /* reference count (1 if no clones) */ struct FPix **fpix; /* the array of ptrs to fpix */ }; typedef struct FPixa FPIXA; /*-------------------------------------------------------------------------* * DPix: pix with double array * *-------------------------------------------------------------------------*/ #define DPIX_VERSION_NUMBER 2 struct DPix { l_int32 w; /* width in pixels */ l_int32 h; /* height in pixels */ l_int32 wpl; /* 32-bit words/line */ l_uint32 refcount; /* reference count (1 if no clones) */ l_int32 xres; /* image res (ppi) in x direction */ /* (use 0 if unknown) */ l_int32 yres; /* image res (ppi) in y direction */ /* (use 0 if unknown) */ l_float64 *data; /* the double image data */ }; typedef struct DPix DPIX; /*-------------------------------------------------------------------------* * PixComp: compressed pix * *-------------------------------------------------------------------------*/ struct PixComp { l_int32 w; /* width in pixels */ l_int32 h; /* height in pixels */ l_int32 d; /* depth in bits */ l_int32 xres; /* image res (ppi) in x direction */ /* (use 0 if unknown) */ l_int32 yres; /* image res (ppi) in y direction */ /* (use 0 if unknown) */ l_int32 comptype; /* compressed format (IFF_TIFF_G4, */ /* IFF_PNG, IFF_JFIF_JPEG) */ char *text; /* text string associated with pix */ l_int32 cmapflag; /* flag (1 for cmap, 0 otherwise) */ l_uint8 *data; /* the compressed image data */ size_t size; /* size of the data array */ }; typedef struct PixComp PIXC; /*-------------------------------------------------------------------------* * PixaComp: array of compressed pix * *-------------------------------------------------------------------------*/ #define PIXACOMP_VERSION_NUMBER 2 struct PixaComp { l_int32 n; /* number of PixComp in ptr array */ l_int32 nalloc; /* number of PixComp ptrs allocated */ l_int32 offset; /* indexing offset into ptr array */ struct PixComp **pixc; /* the array of ptrs to PixComp */ struct Boxa *boxa; /* array of boxes */ }; typedef struct PixaComp PIXAC; /*-------------------------------------------------------------------------* * Access and storage flags * *-------------------------------------------------------------------------*/ /* * For Pix, Box, Pta and Numa, there are 3 standard methods for handling * the retrieval or insertion of a struct: * (1) direct insertion (Don't do this if there is another handle * somewhere to this same struct!) * (2) copy (Always safe, sets up a refcount of 1 on the new object. * Can be undesirable if very large, such as an image or * an array of images.) * (3) clone (Makes another handle to the same struct, and bumps the * refcount up by 1. Safe to do unless you're changing * data through one of the handles but don't want those * changes to be seen by the other handle.) * * For Pixa and Boxa, which are structs that hold an array of clonable * structs, there is an additional method: * (4) copy-clone (Makes a new higher-level struct with a refcount * of 1, but clones all the structs in the array.) * * Unlike the other structs, when retrieving a string from an Sarray, * you are allowed to get a handle without a copy or clone (i.e., that * you don't own!). You must not free or insert such a string! * Specifically, for an Sarray, the copyflag for retrieval is either: * TRUE (or 1 or L_COPY) * or * FALSE (or 0 or L_NOCOPY) * For insertion, the copyflag is either: * TRUE (or 1 or L_COPY) * or * FALSE (or 0 or L_INSERT) * Note that L_COPY is always 1, and L_INSERT and L_NOCOPY are always 0. */ enum { L_INSERT = 0, /* stuff it in; no copy, clone or copy-clone */ L_COPY = 1, /* make/use a copy of the object */ L_CLONE = 2, /* make/use clone (ref count) of the object */ L_COPY_CLONE = 3 /* make a new object and fill with with clones */ /* of each object in the array(s) */ }; static const l_int32 L_NOCOPY = 0; /* copyflag value in sarrayGetString() */ /*--------------------------------------------------------------------------* * Sort flags * *--------------------------------------------------------------------------*/ enum { L_SHELL_SORT = 1, /* use shell sort */ L_BIN_SORT = 2 /* use bin sort */ }; enum { L_SORT_INCREASING = 1, /* sort in increasing order */ L_SORT_DECREASING = 2 /* sort in decreasing order */ }; enum { L_SORT_BY_X = 1, /* sort box or c.c. by left edge location */ L_SORT_BY_Y = 2, /* sort box or c.c. by top edge location */ L_SORT_BY_RIGHT = 3, /* sort box or c.c. by right edge location */ L_SORT_BY_BOT = 4, /* sort box or c.c. by bot edge location */ L_SORT_BY_WIDTH = 5, /* sort box or c.c. by width */ L_SORT_BY_HEIGHT = 6, /* sort box or c.c. by height */ L_SORT_BY_MIN_DIMENSION = 7, /* sort box or c.c. by min dimension */ L_SORT_BY_MAX_DIMENSION = 8, /* sort box or c.c. by max dimension */ L_SORT_BY_PERIMETER = 9, /* sort box or c.c. by perimeter */ L_SORT_BY_AREA = 10, /* sort box or c.c. by area */ L_SORT_BY_ASPECT_RATIO = 11 /* sort box or c.c. by width/height ratio */ }; /*-------------------------------------------------------------------------* * Blend flags * *-------------------------------------------------------------------------*/ enum { L_BLEND_WITH_INVERSE = 1, /* add some of src inverse to itself */ L_BLEND_TO_WHITE = 2, /* shift src colors towards white */ L_BLEND_TO_BLACK = 3, /* shift src colors towards black */ L_BLEND_GRAY = 4, /* blend src directly with blender */ L_BLEND_GRAY_WITH_INVERSE = 5 /* add amount of src inverse to itself, */ /* based on blender pix value */ }; enum { L_PAINT_LIGHT = 1, /* colorize non-black pixels */ L_PAINT_DARK = 2 /* colorize non-white pixels */ }; /*-------------------------------------------------------------------------* * Graphics pixel setting * *-------------------------------------------------------------------------*/ enum { L_SET_PIXELS = 1, /* set all bits in each pixel to 1 */ L_CLEAR_PIXELS = 2, /* set all bits in each pixel to 0 */ L_FLIP_PIXELS = 3 /* flip all bits in each pixel */ }; /*-------------------------------------------------------------------------* * Size filter flags * *-------------------------------------------------------------------------*/ enum { L_SELECT_WIDTH = 1, /* width must satisfy constraint */ L_SELECT_HEIGHT = 2, /* height must satisfy constraint */ L_SELECT_IF_EITHER = 3, /* either width or height can satisfy */ L_SELECT_IF_BOTH = 4 /* both width and height must satisfy */ }; enum { L_SELECT_IF_LT = 1, /* save if value is less than threshold */ L_SELECT_IF_GT = 2, /* save if value is more than threshold */ L_SELECT_IF_LTE = 3, /* save if value is <= to the threshold */ L_SELECT_IF_GTE = 4 /* save if value is >= to the threshold */ }; /*-------------------------------------------------------------------------* * Color component selection flags * *-------------------------------------------------------------------------*/ enum { L_SELECT_RED = 1, /* use red component */ L_SELECT_GREEN = 2, /* use green component */ L_SELECT_BLUE = 3, /* use blue component */ L_SELECT_MIN = 4, /* use min color component */ L_SELECT_MAX = 5 /* use max color component */ }; /*-------------------------------------------------------------------------* * 16-bit conversion flags * *-------------------------------------------------------------------------*/ enum { L_LS_BYTE = 0, /* use LSB */ L_MS_BYTE = 1, /* use MSB */ L_CLIP_TO_255 = 2 /* use max(val, 255) */ }; /*-------------------------------------------------------------------------* * Rotate and shear flags * *-------------------------------------------------------------------------*/ enum { L_ROTATE_AREA_MAP = 1, /* use area map rotation, if possible */ L_ROTATE_SHEAR = 2, /* use shear rotation */ L_ROTATE_SAMPLING = 3 /* use sampling */ }; enum { L_BRING_IN_WHITE = 1, /* bring in white pixels from the outside */ L_BRING_IN_BLACK = 2 /* bring in black pixels from the outside */ }; enum { L_SHEAR_ABOUT_CORNER = 1, /* shear image about UL corner */ L_SHEAR_ABOUT_CENTER = 2 /* shear image about center */ }; /*-------------------------------------------------------------------------* * Affine transform order flags * *-------------------------------------------------------------------------*/ enum { L_TR_SC_RO = 1, /* translate, scale, rotate */ L_SC_RO_TR = 2, /* scale, rotate, translate */ L_RO_TR_SC = 3, /* rotate, translate, scale */ L_TR_RO_SC = 4, /* translate, rotate, scale */ L_RO_SC_TR = 5, /* rotate, scale, translate */ L_SC_TR_RO = 6 /* scale, translate, rotate */ }; /*-------------------------------------------------------------------------* * Grayscale filling flags * *-------------------------------------------------------------------------*/ enum { L_FILL_WHITE = 1, /* fill white pixels (e.g, in fg map) */ L_FILL_BLACK = 2 /* fill black pixels (e.g., in bg map) */ }; /*-------------------------------------------------------------------------* * Flags for setting to white or black * *-------------------------------------------------------------------------*/ enum { L_SET_WHITE = 1, /* set pixels to white */ L_SET_BLACK = 2 /* set pixels to black */ }; /*-------------------------------------------------------------------------* * Flags for getting white or black value * *-------------------------------------------------------------------------*/ enum { L_GET_WHITE_VAL = 1, /* get white pixel value */ L_GET_BLACK_VAL = 2 /* get black pixel value */ }; /*-------------------------------------------------------------------------* * Flags for 8 bit and 16 bit pixel sums * *-------------------------------------------------------------------------*/ enum { L_WHITE_IS_MAX = 1, /* white pixels are 0xff or 0xffff; black are 0 */ L_BLACK_IS_MAX = 2 /* black pixels are 0xff or 0xffff; white are 0 */ }; /*-------------------------------------------------------------------------* * Dither parameters * * If within this grayscale distance from black or white, * * do not propagate excess or deficit to neighboring pixels. * *-------------------------------------------------------------------------*/ enum { DEFAULT_CLIP_LOWER_1 = 10, /* dist to black with no prop; 1 bpp */ DEFAULT_CLIP_UPPER_1 = 10, /* dist to black with no prop; 1 bpp */ DEFAULT_CLIP_LOWER_2 = 5, /* dist to black with no prop; 2 bpp */ DEFAULT_CLIP_UPPER_2 = 5 /* dist to black with no prop; 2 bpp */ }; /*-------------------------------------------------------------------------* * Distance flags * *-------------------------------------------------------------------------*/ enum { L_MANHATTAN_DISTANCE = 1, /* L1 distance (e.g., in color space) */ L_EUCLIDEAN_DISTANCE = 2 /* L2 distance */ }; /*-------------------------------------------------------------------------* * Statistical measures * *-------------------------------------------------------------------------*/ enum { L_MEAN_ABSVAL = 1, /* average of abs values */ L_MEDIAN_VAL = 2, /* median value of set */ L_MODE_VAL = 3, /* mode value of set */ L_MODE_COUNT = 4, /* mode count of set */ L_ROOT_MEAN_SQUARE = 5, /* rms of values */ L_STANDARD_DEVIATION = 6, /* standard deviation from mean */ L_VARIANCE = 7 /* variance of values */ }; /*-------------------------------------------------------------------------* * Set selection flags * *-------------------------------------------------------------------------*/ enum { L_CHOOSE_CONSECUTIVE = 1, /* select 'n' consecutive */ L_CHOOSE_SKIP_BY = 2 /* select at intervals of 'n' */ }; /*-------------------------------------------------------------------------* * Text orientation flags * *-------------------------------------------------------------------------*/ enum { L_TEXT_ORIENT_UNKNOWN = 0, /* low confidence on text orientation */ L_TEXT_ORIENT_UP = 1, /* portrait, text rightside-up */ L_TEXT_ORIENT_LEFT = 2, /* landscape, text up to left */ L_TEXT_ORIENT_DOWN = 3, /* portrait, text upside-down */ L_TEXT_ORIENT_RIGHT = 4 /* landscape, text up to right */ }; /*-------------------------------------------------------------------------* * Edge orientation flags * *-------------------------------------------------------------------------*/ enum { L_HORIZONTAL_EDGES = 0, /* filters for horizontal edges */ L_VERTICAL_EDGES = 1, /* filters for vertical edges */ L_ALL_EDGES = 2 /* filters for all edges */ }; /*-------------------------------------------------------------------------* * Line orientation flags * *-------------------------------------------------------------------------*/ enum { L_HORIZONTAL_LINE = 0, /* horizontal line */ L_POS_SLOPE_LINE = 1, /* 45 degree line with positive slope */ L_VERTICAL_LINE = 2, /* vertical line */ L_NEG_SLOPE_LINE = 3, /* 45 degree line with negative slope */ L_OBLIQUE_LINE = 4 /* neither horizontal nor vertical */ }; /*-------------------------------------------------------------------------* * Scan direction flags * *-------------------------------------------------------------------------*/ enum { L_FROM_LEFT = 0, /* scan from left */ L_FROM_RIGHT = 1, /* scan from right */ L_FROM_TOP = 2, /* scan from top */ L_FROM_BOT = 3, /* scan from bottom */ L_SCAN_NEGATIVE = 4, /* scan in negative direction */ L_SCAN_POSITIVE = 5, /* scan in positive direction */ L_SCAN_BOTH = 6 /* scan in both directions */ }; /*-------------------------------------------------------------------------* * Box size adjustment and location flags * *-------------------------------------------------------------------------*/ enum { L_ADJUST_SKIP = 0, /* do not adjust */ L_ADJUST_LEFT = 1, /* adjust left edge */ L_ADJUST_RIGHT = 2, /* adjust right edge */ L_ADJUST_LEFT_AND_RIGHT = 3, /* adjust both left and right edges */ L_ADJUST_TOP = 4, /* adjust top edge */ L_ADJUST_BOT = 5, /* adjust bottom edge */ L_ADJUST_TOP_AND_BOT = 6, /* adjust both top and bottom edges */ L_ADJUST_CHOOSE_MIN = 7, /* choose the min median value */ L_ADJUST_CHOOSE_MAX = 8, /* choose the max median value */ L_SET_LEFT = 9, /* set left side to a given value */ L_SET_RIGHT = 10, /* set right side to a given value */ L_SET_TOP = 11, /* set top side to a given value */ L_SET_BOT = 12, /* set bottom side to a given value */ L_GET_LEFT = 13, /* get left side location */ L_GET_RIGHT = 14, /* get right side location */ L_GET_TOP = 15, /* get top side location */ L_GET_BOT = 16 /* get bottom side location */ }; /*-------------------------------------------------------------------------* * Handling overlapping bounding boxes in boxa * *-------------------------------------------------------------------------*/ enum { L_COMBINE = 1, /* resize to bounding region; remove smaller */ L_REMOVE_SMALL = 2 /* only remove smaller */ }; /*-------------------------------------------------------------------------* * Horizontal warp * *-------------------------------------------------------------------------*/ enum { L_WARP_TO_LEFT = 1, /* increasing stretch or contraction to left */ L_WARP_TO_RIGHT = 2 /* increasing stretch or contraction to right */ }; enum { L_LINEAR_WARP = 1, /* stretch or contraction grows linearly */ L_QUADRATIC_WARP = 2 /* stretch or contraction grows quadratically */ }; /*-------------------------------------------------------------------------* * Pixel selection for resampling * *-------------------------------------------------------------------------*/ enum { L_INTERPOLATED = 1, /* linear interpolation from src pixels */ L_SAMPLED = 2 /* nearest src pixel sampling only */ }; /*-------------------------------------------------------------------------* * Thinning flags * *-------------------------------------------------------------------------*/ enum { L_THIN_FG = 1, /* thin foreground of 1 bpp image */ L_THIN_BG = 2 /* thin background of 1 bpp image */ }; /*-------------------------------------------------------------------------* * Runlength flags * *-------------------------------------------------------------------------*/ enum { L_HORIZONTAL_RUNS = 0, /* determine runlengths of horizontal runs */ L_VERTICAL_RUNS = 1 /* determine runlengths of vertical runs */ }; /*-------------------------------------------------------------------------* * Edge filter flags * *-------------------------------------------------------------------------*/ enum { L_SOBEL_EDGE = 1, /* Sobel edge filter */ L_TWO_SIDED_EDGE = 2 /* Two-sided edge filter */ }; /*-------------------------------------------------------------------------* * Handling negative values in conversion to unsigned int * *-------------------------------------------------------------------------*/ enum { L_CLIP_TO_ZERO = 1, /* Clip negative values to 0 */ L_TAKE_ABSVAL = 2 /* Convert to positive using L_ABS() */ }; /*-------------------------------------------------------------------------* * Subpixel color component ordering in LCD display * *-------------------------------------------------------------------------*/ enum { L_SUBPIXEL_ORDER_RGB = 1, /* sensor order left-to-right RGB */ L_SUBPIXEL_ORDER_BGR = 2, /* sensor order left-to-right BGR */ L_SUBPIXEL_ORDER_VRGB = 3, /* sensor order top-to-bottom RGB */ L_SUBPIXEL_ORDER_VBGR = 4 /* sensor order top-to-bottom BGR */ }; /*-------------------------------------------------------------------------* * Relative to zero flags * *-------------------------------------------------------------------------*/ enum { L_LESS_THAN_ZERO = 1, /* Choose values less than zero */ L_EQUAL_TO_ZERO = 2, /* Choose values equal to zero */ L_GREATER_THAN_ZERO = 3 /* Choose values greater than zero */ }; /*-------------------------------------------------------------------------* * HSV histogram flags * *-------------------------------------------------------------------------*/ enum { L_HS_HISTO = 1, /* Use hue-saturation histogram */ L_HV_HISTO = 2, /* Use hue-value histogram */ L_SV_HISTO = 3 /* Use saturation-value histogram */ }; /*-------------------------------------------------------------------------* * Region flags (inclusion, exclusion) * *-------------------------------------------------------------------------*/ enum { L_INCLUDE_REGION = 1, /* Use hue-saturation histogram */ L_EXCLUDE_REGION = 2 /* Use hue-value histogram */ }; /*-------------------------------------------------------------------------* * Flags for adding text to a pix * *-------------------------------------------------------------------------*/ enum { L_ADD_ABOVE = 1, /* Add text above the image */ L_ADD_BELOW = 2, /* Add text below the image */ L_ADD_LEFT = 3, /* Add text to the left of the image */ L_ADD_RIGHT = 4, /* Add text to the right of the image */ L_ADD_AT_TOP = 5, /* Add text over the top of the image */ L_ADD_AT_BOT = 6, /* Add text over the bottom of the image */ L_ADD_AT_LEFT = 7, /* Add text over left side of the image */ L_ADD_AT_RIGHT = 8 /* Add text over right side of the image */ }; /*-------------------------------------------------------------------------* * Flags for selecting display program * *-------------------------------------------------------------------------*/ enum { L_DISPLAY_WITH_XZGV = 1, /* Use xzgv with pixDisplay() */ L_DISPLAY_WITH_XLI = 2, /* Use xli with pixDisplay() */ L_DISPLAY_WITH_XV = 3, /* Use xv with pixDisplay() */ L_DISPLAY_WITH_IV = 4, /* Use irfvanview (win) with pixDisplay() */ L_DISPLAY_WITH_OPEN = 5 /* Use open (apple) with pixDisplay() */ }; /*-------------------------------------------------------------------------* * Flag(s) used in the 'special' pix field for non-default operations * * - 0 is default * * - 10-19 are reserved for zlib compression in png write * *-------------------------------------------------------------------------*/ enum { L_NO_CHROMA_SAMPLING_JPEG = 1 /* Write full resolution chroma */ }; #endif /* LEPTONICA_PIX_H */ leptonica-1.70/src/boxfunc4.c0000644000175000017500000015374412244217260014206 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * boxfunc4.c * * Boxa and Boxaa range selection * BOXA *boxaSelectRange() * BOXAA *boxaaSelectRange() * * Boxa size selection * BOXA *boxaSelectBySize() * NUMA *boxaMakeSizeIndicator() * BOXA *boxaSelectByArea() * NUMA *boxaMakeAreaIndicator() * BOXA *boxaSelectWithIndicator() * * Boxa permutation * BOXA *boxaPermutePseudorandom() * BOXA *boxaPermuteRandom() * l_int32 boxaSwapBoxes() * * Boxa conversions * PTA *boxaConvertToPta() * BOXA *ptaConvertToBoxa() * * Boxa sequence fitting * BOXA *boxaSmoothSequence() * BOXA *boxaLinearFit() * BOXA *boxaConstrainSize() * BOXA *boxaReconcileEvenOddHeight() * l_int32 boxaPlotSides() [for debugging] * * Miscellaneous boxa functions * l_int32 boxaGetExtent() * l_int32 boxaGetCoverage() * l_int32 boxaaSizeRange() * l_int32 boxaSizeRange() * l_int32 boxaLocationRange() * l_int32 boxaGetArea() * PIX *boxaDisplayTiled() */ #include "allheaders.h" /*---------------------------------------------------------------------* * Boxa and boxaa range selection * *---------------------------------------------------------------------*/ /*! * boxaSelectRange() * * Input: boxas * first (use 0 to select from the beginning) * last (use 0 to select to the end) * copyflag (L_COPY, L_CLONE) * Return: boxad, or null on error * * Notes: * (1) The copyflag specifies what we do with each box from boxas. * Specifically, L_CLONE inserts a clone into boxad of each * selected box from boxas. */ BOXA * boxaSelectRange(BOXA *boxas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, nbox, i; BOX *box; BOXA *boxad; PROCNAME("boxaSelectRange"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); n = boxaGetCount(boxas); first = L_MAX(0, first); if (last <= 0) last = n - 1; if (first >= n) return (BOXA *)ERROR_PTR("invalid first", procName, NULL); if (first > last) return (BOXA *)ERROR_PTR("first > last", procName, NULL); nbox = last - first + 1; boxad = boxaCreate(nbox); for (i = first; i <= last; i++) { box = boxaGetBox(boxas, i, copyflag); boxaAddBox(boxad, box, L_INSERT); } return boxad; } /*! * boxaaSelectRange() * * Input: baas * first (use 0 to select from the beginning) * last (use 0 to select to the end) * copyflag (L_COPY, L_CLONE) * Return: baad, or null on error * * Notes: * (1) The copyflag specifies what we do with each boxa from baas. * Specifically, L_CLONE inserts a clone into baad of each * selected boxa from baas. */ BOXAA * boxaaSelectRange(BOXAA *baas, l_int32 first, l_int32 last, l_int32 copyflag) { l_int32 n, nboxa, i; BOXA *boxa; BOXAA *baad; PROCNAME("boxaaSelectRange"); if (!baas) return (BOXAA *)ERROR_PTR("baas not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXAA *)ERROR_PTR("invalid copyflag", procName, NULL); n = boxaaGetCount(baas); first = L_MAX(0, first); if (last <= 0) last = n - 1; if (first >= n) return (BOXAA *)ERROR_PTR("invalid first", procName, NULL); if (first > last) return (BOXAA *)ERROR_PTR("first > last", procName, NULL); nboxa = last - first + 1; baad = boxaaCreate(nboxa); for (i = first; i <= last; i++) { boxa = boxaaGetBoxa(baas, i, copyflag); boxaaAddBoxa(baad, boxa, L_INSERT); } return baad; } /*---------------------------------------------------------------------* * Boxa size selection * *---------------------------------------------------------------------*/ /*! * boxaSelectBySize() * * Input: boxas * width, height (threshold dimensions) * type (L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH) * relation (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: boxad (filtered set), or null on error * * Notes: * (1) The args specify constraints on the size of the * components that are kept. * (2) Uses box clones in the new boxa. * (3) If the selection type is L_SELECT_WIDTH, the input * height is ignored, and v.v. * (4) To keep small components, use relation = L_SELECT_IF_LT or * L_SELECT_IF_LTE. * To keep large components, use relation = L_SELECT_IF_GT or * L_SELECT_IF_GTE. */ BOXA * boxaSelectBySize(BOXA *boxas, l_int32 width, l_int32 height, l_int32 type, l_int32 relation, l_int32 *pchanged) { BOXA *boxad; NUMA *na; PROCNAME("boxaSelectBySize"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (BOXA *)ERROR_PTR("invalid type", procName, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (BOXA *)ERROR_PTR("invalid relation", procName, NULL); if (pchanged) *pchanged = FALSE; /* Compute the indicator array for saving components */ na = boxaMakeSizeIndicator(boxas, width, height, type, relation); /* Filter to get output */ boxad = boxaSelectWithIndicator(boxas, na, pchanged); numaDestroy(&na); return boxad; } /*! * boxaMakeSizeIndicator() * * Input: boxa * width, height (threshold dimensions) * type (L_SELECT_WIDTH, L_SELECT_HEIGHT, * L_SELECT_IF_EITHER, L_SELECT_IF_BOTH) * relation (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * Return: na (indicator array), or null on error * * Notes: * (1) The args specify constraints on the size of the * components that are kept. * (2) If the selection type is L_SELECT_WIDTH, the input * height is ignored, and v.v. * (3) To keep small components, use relation = L_SELECT_IF_LT or * L_SELECT_IF_LTE. * To keep large components, use relation = L_SELECT_IF_GT or * L_SELECT_IF_GTE. */ NUMA * boxaMakeSizeIndicator(BOXA *boxa, l_int32 width, l_int32 height, l_int32 type, l_int32 relation) { l_int32 i, n, w, h, ival; NUMA *na; PROCNAME("boxaMakeSizeIndicator"); if (!boxa) return (NUMA *)ERROR_PTR("boxa not defined", procName, NULL); if (type != L_SELECT_WIDTH && type != L_SELECT_HEIGHT && type != L_SELECT_IF_EITHER && type != L_SELECT_IF_BOTH) return (NUMA *)ERROR_PTR("invalid type", procName, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (NUMA *)ERROR_PTR("invalid relation", procName, NULL); n = boxaGetCount(boxa); na = numaCreate(n); for (i = 0; i < n; i++) { ival = 0; boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); switch (type) { case L_SELECT_WIDTH: if ((relation == L_SELECT_IF_LT && w < width) || (relation == L_SELECT_IF_GT && w > width) || (relation == L_SELECT_IF_LTE && w <= width) || (relation == L_SELECT_IF_GTE && w >= width)) ival = 1; break; case L_SELECT_HEIGHT: if ((relation == L_SELECT_IF_LT && h < height) || (relation == L_SELECT_IF_GT && h > height) || (relation == L_SELECT_IF_LTE && h <= height) || (relation == L_SELECT_IF_GTE && h >= height)) ival = 1; break; case L_SELECT_IF_EITHER: if (((relation == L_SELECT_IF_LT) && (w < width || h < height)) || ((relation == L_SELECT_IF_GT) && (w > width || h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width || h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width || h >= height))) ival = 1; break; case L_SELECT_IF_BOTH: if (((relation == L_SELECT_IF_LT) && (w < width && h < height)) || ((relation == L_SELECT_IF_GT) && (w > width && h > height)) || ((relation == L_SELECT_IF_LTE) && (w <= width && h <= height)) || ((relation == L_SELECT_IF_GTE) && (w >= width && h >= height))) ival = 1; break; default: L_WARNING("can't get here!\n", procName); break; } numaAddNumber(na, ival); } return na; } /*! * boxaSelectByArea() * * Input: boxas * area (threshold value of width * height) * relation (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * &changed ( 1 if changed; 0 if clone returned) * Return: boxad (filtered set), or null on error * * Notes: * (1) Uses box clones in the new boxa. * (2) To keep small components, use relation = L_SELECT_IF_LT or * L_SELECT_IF_LTE. * To keep large components, use relation = L_SELECT_IF_GT or * L_SELECT_IF_GTE. */ BOXA * boxaSelectByArea(BOXA *boxas, l_int32 area, l_int32 relation, l_int32 *pchanged) { BOXA *boxad; NUMA *na; PROCNAME("boxaSelectByArea"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (BOXA *)ERROR_PTR("invalid relation", procName, NULL); if (pchanged) *pchanged = FALSE; /* Compute the indicator array for saving components */ na = boxaMakeAreaIndicator(boxas, area, relation); /* Filter to get output */ boxad = boxaSelectWithIndicator(boxas, na, pchanged); numaDestroy(&na); return boxad; } /*! * boxaMakeAreaIndicator() * * Input: boxa * area (threshold value of width * height) * relation (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * Return: na (indicator array), or null on error * * Notes: * (1) To keep small components, use relation = L_SELECT_IF_LT or * L_SELECT_IF_LTE. * To keep large components, use relation = L_SELECT_IF_GT or * L_SELECT_IF_GTE. */ NUMA * boxaMakeAreaIndicator(BOXA *boxa, l_int32 area, l_int32 relation) { l_int32 i, n, w, h, ival; NUMA *na; PROCNAME("boxaMakeAreaIndicator"); if (!boxa) return (NUMA *)ERROR_PTR("boxa not defined", procName, NULL); if (relation != L_SELECT_IF_LT && relation != L_SELECT_IF_GT && relation != L_SELECT_IF_LTE && relation != L_SELECT_IF_GTE) return (NUMA *)ERROR_PTR("invalid relation", procName, NULL); n = boxaGetCount(boxa); na = numaCreate(n); for (i = 0; i < n; i++) { ival = 0; boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); if ((relation == L_SELECT_IF_LT && w * h < area) || (relation == L_SELECT_IF_GT && w * h > area) || (relation == L_SELECT_IF_LTE && w * h <= area) || (relation == L_SELECT_IF_GTE && w * h >= area)) ival = 1; numaAddNumber(na, ival); } return na; } /*! * boxaSelectWithIndicator() * * Input: boxas * na (indicator numa) * &changed ( 1 if changed; 0 if clone returned) * Return: boxad, or null on error * * Notes: * (1) Returns a boxa clone if no components are removed. * (2) Uses box clones in the new boxa. * (3) The indicator numa has values 0 (ignore) and 1 (accept). */ BOXA * boxaSelectWithIndicator(BOXA *boxas, NUMA *na, l_int32 *pchanged) { l_int32 i, n, ival, nsave; BOX *box; BOXA *boxad; PROCNAME("boxaSelectWithIndicator"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (!na) return (BOXA *)ERROR_PTR("na not defined", procName, NULL); nsave = 0; n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 1) nsave++; } if (nsave == n) { if (pchanged) *pchanged = FALSE; return boxaCopy(boxas, L_CLONE); } if (pchanged) *pchanged = TRUE; boxad = boxaCreate(nsave); for (i = 0; i < n; i++) { numaGetIValue(na, i, &ival); if (ival == 0) continue; box = boxaGetBox(boxas, i, L_CLONE); boxaAddBox(boxad, box, L_INSERT); } return boxad; } /*---------------------------------------------------------------------* * Boxa Permutation * *---------------------------------------------------------------------*/ /*! * boxaPermutePseudorandom() * * Input: boxas (input boxa) * Return: boxad (with boxes permuted), or null on error * * Notes: * (1) This does a pseudorandom in-place permutation of the boxes. * (2) The result is guaranteed not to have any boxes in their * original position, but it is not very random. If you * need randomness, use boxaPermuteRandom(). */ BOXA * boxaPermutePseudorandom(BOXA *boxas) { l_int32 n; NUMA *na; BOXA *boxad; PROCNAME("boxaPermutePseudorandom"); if (!boxas) return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); n = boxaGetCount(boxas); na = numaPseudorandomSequence(n, 0); boxad = boxaSortByIndex(boxas, na); numaDestroy(&na); return boxad; } /*! * boxaPermuteRandom() * * Input: boxad ( can be null or equal to boxas) * boxas (input boxa) * Return: boxad (with boxes permuted), or null on error * * Notes: * (1) If boxad is null, make a copy of boxas and permute the copy. * Otherwise, boxad must be equal to boxas, and the operation * is done in-place. * (2) This does a random in-place permutation of the boxes, * by swapping each box in turn with a random box. The * result is almost guaranteed not to have any boxes in their * original position. * (3) MSVC rand() has MAX_RAND = 2^15 - 1, so it will not do * a proper permutation is the number of boxes exceeds this. */ BOXA * boxaPermuteRandom(BOXA *boxad, BOXA *boxas) { l_int32 i, n, index; PROCNAME("boxaPermuteRandom"); if (!boxas) return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); if (boxad && (boxad != boxas)) return (BOXA *)ERROR_PTR("boxad defined but in-place", procName, NULL); if (!boxad) boxad = boxaCopy(boxas, L_COPY); n = boxaGetCount(boxad); index = (l_uint32)rand() % n; index = L_MAX(1, index); boxaSwapBoxes(boxad, 0, index); for (i = 1; i < n; i++) { index = (l_uint32)rand() % n; if (index == i) index--; boxaSwapBoxes(boxad, i, index); } return boxad; } /*! * boxaSwapBoxes() * * Input: boxa * i, j (two indices of boxes, that are to be swapped) * Return: 0 if OK, 1 on error */ l_int32 boxaSwapBoxes(BOXA *boxa, l_int32 i, l_int32 j) { l_int32 n; BOX *box; PROCNAME("boxaSwapBoxes"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); if (i < 0 || i >= n) return ERROR_INT("i invalid", procName, 1); if (j < 0 || j >= n) return ERROR_INT("j invalid", procName, 1); if (i == j) return ERROR_INT("i == j", procName, 1); box = boxa->box[i]; boxa->box[i] = boxa->box[j]; boxa->box[j] = box; return 0; } /*---------------------------------------------------------------------* * Boxa Conversions * *---------------------------------------------------------------------*/ /*! * boxaConvertToPta() * * Input: boxa * ncorners (2 or 4 for the representation of each box) * Return: pta (with @ncorners points for each box in the boxa), * or null on error * * Notes: * (1) If ncorners == 2, we select the UL and LR corners. * Otherwise we save all 4 corners in this order: UL, UR, LL, LR. */ PTA * boxaConvertToPta(BOXA *boxa, l_int32 ncorners) { l_int32 i, n, x, y, w, h; PTA *pta; PROCNAME("boxaConvertToPta"); if (!boxa) return (PTA *)ERROR_PTR("boxa not defined", procName, NULL); if (ncorners != 2 && ncorners != 4) return (PTA *)ERROR_PTR("ncorners not 2 or 4", procName, NULL); n = boxaGetCount(boxa); if ((pta = ptaCreate(n)) == NULL) return (PTA *)ERROR_PTR("pta not made", procName, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); ptaAddPt(pta, x, y); if (ncorners == 2) { ptaAddPt(pta, x + w - 1, y + h - 1); } else { ptaAddPt(pta, x + w - 1, y); ptaAddPt(pta, x, y + h - 1); ptaAddPt(pta, x + w - 1, y + h - 1); } } return pta; } /*! * ptaConvertToBoxa() * * Input: pta * ncorners (2 or 4 for the representation of each box) * Return: boxa (with one box for each 2 or 4 points in the pta), * or null on error * * Notes: * (1) For 2 corners, the order of the 2 points is UL, LR. * For 4 corners, the order of points is UL, UR, LL, LR. * (2) Each derived box is the minimum szie containing all corners. */ BOXA * ptaConvertToBoxa(PTA *pta, l_int32 ncorners) { l_int32 i, n, nbox, x1, y1, x2, y2, x3, y3, x4, y4, x, y, xmax, ymax; BOX *box; BOXA *boxa; PROCNAME("ptaConvertToBoxa"); if (!pta) return (BOXA *)ERROR_PTR("pta not defined", procName, NULL); if (ncorners != 2 && ncorners != 4) return (BOXA *)ERROR_PTR("ncorners not 2 or 4", procName, NULL); n = ptaGetCount(pta); if (n % ncorners != 0) return (BOXA *)ERROR_PTR("size % ncorners != 0", procName, NULL); nbox = n / ncorners; if ((boxa = boxaCreate(nbox)) == NULL) return (BOXA *)ERROR_PTR("boxa not made", procName, NULL); for (i = 0; i < n; i += ncorners) { ptaGetIPt(pta, i, &x1, &y1); ptaGetIPt(pta, i + 1, &x2, &y2); if (ncorners == 2) { box = boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1); boxaAddBox(boxa, box, L_INSERT); continue; } ptaGetIPt(pta, i + 2, &x3, &y3); ptaGetIPt(pta, i + 3, &x4, &y4); x = L_MIN(x1, x3); y = L_MIN(y1, y2); xmax = L_MAX(x2, x4); ymax = L_MAX(y3, y4); box = boxCreate(x, y, xmax - x + 1, ymax - y + 1); boxaAddBox(boxa, box, L_INSERT); } return boxa; } /*---------------------------------------------------------------------* * Boxa sequence fitting * *---------------------------------------------------------------------*/ /*! * boxaSmoothSequence() * * Input: boxas (source boxa) * factor (reject outliers with error greater than this * number of median errors; typically ~3) * max_error (maximum difference in pixels between fitted * and original location to allow using the * original value instead of the fitted value) * debug (1 for debug output) * Return: boxad (fitted boxa), or null on error * * Notes: * (1) This does linear fitting separately to the sequences of * even and odd boxes. It is assumed that in both the even and * odd sets, the box edges vary slowly and linearly across each set. */ BOXA * boxaSmoothSequence(BOXA *boxas, l_float32 factor, l_int32 max_error, l_int32 debug) { l_int32 n; BOXA *boxae, *boxao, *boxalfe, *boxalfo, *boxad; PROCNAME("boxaSmoothSequence"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if ((n = boxaGetCount(boxas)) < 4) { L_WARNING("need at least 4 boxes; returning copy\n", procName); return boxaCopy(boxas, L_COPY); } boxaSplitEvenOdd(boxas, 1, &boxae, &boxao); if (debug) { boxaWrite("/tmp/boxae.ba", boxae); boxaWrite("/tmp/boxao.ba", boxao); } boxalfe = boxaLinearFit(boxae, factor, max_error, debug); boxalfo = boxaLinearFit(boxao, factor, max_error, debug); if (debug) { boxaWrite("/tmp/boxalfe.ba", boxalfe); boxaWrite("/tmp/boxalfo.ba", boxalfo); } boxad = boxaMergeEvenOdd(boxalfe, boxalfo, 1); boxaDestroy(&boxae); boxaDestroy(&boxao); boxaDestroy(&boxalfe); boxaDestroy(&boxalfo); return boxad; } /*! * boxaLinearFit() * * Input: boxas (source boxa) * factor (reject outliers with error greater than this * number of median errors; typically ~3) * max_error (maximum difference in pixels between fitted * and original location to allow using the * original value instead of the fitted value) * debug (1 for debug output) * Return: boxad (fitted boxa), or null on error * * Notes: * (1) Suppose you have a boxa where the box edges are expected * to vary slowly and linearly across the set. These could * be, for example, noisy measurements of similar regions * on successive scanned pages. * (2) Method: there are 2 basic steps: * (a) Find outliers, separately based on the deviation * from the median of the width and height of the box. * After the width- and height-based outliers are removed, * do a linear LSF for each of the four sides. Use * @factor to specify tolerance to outliers; use a very large * value of @factor to avoid rejecting points. * (b) Using the LSF of (a), make the final determination of * the four edge locations. See (3) for details. * (3) The parameter @max_error makes the input values somewhat sticky. * Use the fitted values only when the difference between input * and fitted value is greater than @max_error. Two special cases: * (a) set @max_error == 0 to use only fitted values in boxad. * (b) set @max_error == 10000 to ignore all fitted values; then * boxad will be the same as boxas. * (4) Invalid input boxes are not used in computation of the LSF, * and the output boxes are found from the LSF. * (5) To enforce additional constraints on the size of each box, * follow this operation with boxaConstrainSize(), taking boxad * as input. */ BOXA * boxaLinearFit(BOXA *boxas, l_float32 factor, l_int32 max_error, l_int32 debug) { l_int32 n, i, w, h, left, top, right, bot, lval, tval, rval, bval; l_int32 lnew, tnew, rnew, bnew, wnew, hnew, rejectlr, rejecttb; l_float32 al, bl, at, bt, ar, br, ab, bb; /* LSF coefficients */ l_float32 medw, medh, medvarw, medvarh; BOX *box, *boxempty; BOXA *boxalr, *boxatb, *boxad; NUMA *naw, *nah; PTA *ptal, *ptat, *ptar, *ptab; PROCNAME("boxaLinearFit"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if ((n = boxaGetCount(boxas)) < 2) return (BOXA *)ERROR_PTR("need at least 2 boxes", procName, NULL); /* Remove outliers based on width and height. * First find the median width and the median variation from * the median width. Ditto for the height. */ boxaExtractAsNuma(boxas, NULL, NULL, &naw, &nah, 0); numaGetMedianVariation(naw, &medw, &medvarw); numaGetMedianVariation(nah, &medh, &medvarh); numaDestroy(&naw); numaDestroy(&nah); if (debug) { fprintf(stderr, "medw = %7.3f, medvarw = %7.3f\n", medw, medvarw); fprintf(stderr, "medh = %7.3f, medvarh = %7.3f\n", medh, medvarh); } /* To fit the left and right sides, only use boxes whose * width is within (factor * medvarw) of the median width. * Ditto for the top and bottom sides. Add empty boxes * in as placeholders so that the index remains the same * as in boxas. */ boxalr = boxaCreate(n); boxatb = boxaCreate(n); boxempty = boxCreate(0, 0, 0, 0); /* placeholders */ rejectlr = rejecttb = 0; for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxas, i, L_CLONE)) == NULL) { boxaAddBox(boxalr, boxempty, L_COPY); boxaAddBox(boxatb, boxempty, L_COPY); continue; } boxGetGeometry(box, NULL, NULL, &w, &h); if (L_ABS(w - medw) <= factor * medvarw) { boxaAddBox(boxalr, box, L_COPY); } else { rejectlr++; boxaAddBox(boxalr, boxempty, L_COPY); } if (L_ABS(h - medh) <= factor * medvarh) { boxaAddBox(boxatb, box, L_COPY); } else { rejecttb++; boxaAddBox(boxatb, boxempty, L_COPY); } boxDestroy(&box); } boxDestroy(&boxempty); if (boxaGetCount(boxalr) < 2 || boxaGetCount(boxatb) < 2) { boxaDestroy(&boxalr); boxaDestroy(&boxatb); return (BOXA *)ERROR_PTR("need at least 2 valid boxes", procName, NULL); } if (debug) { L_INFO("# lr reject = %d, # tb reject = %d\n", procName, rejectlr, rejecttb); boxaWrite("/tmp/boxalr.ba", boxalr); boxaWrite("/tmp/boxatb.ba", boxatb); } /* Extract the valid left and right box sides, along with the box * index, from boxalr. This only extracts pts corresponding to * valid boxes. Ditto: top and bottom sides from boxatb. */ boxaExtractAsPta(boxalr, &ptal, NULL, &ptar, NULL, 0); boxaExtractAsPta(boxatb, NULL, &ptat, NULL, &ptab, 0); boxaDestroy(&boxalr); boxaDestroy(&boxatb); if (debug) { ptaWrite("/tmp/ptal.pta", ptal, 1); ptaWrite("/tmp/ptar.pta", ptar, 1); ptaWrite("/tmp/ptat.pta", ptat, 1); ptaWrite("/tmp/ptab.pta", ptab, 1); } /* A linear LSF fit to the points that are width and * height validated should work. So, e.g., we don't need to use * ptaNoisyLinearLSF(ptal, factor, NULL, &al, &bl, NULL, NULL); */ ptaGetLinearLSF(ptal, &al, &bl, NULL); ptaGetLinearLSF(ptat, &at, &bt, NULL); ptaGetLinearLSF(ptar, &ar, &br, NULL); ptaGetLinearLSF(ptab, &ab, &bb, NULL); /* Use the LSF smoothed values when the error is large. */ boxad = boxaCreate(n); for (i = 0; i < n; i++) { lval = (l_int32)(al * i + bl + 0.5); tval = (l_int32)(at * i + bt + 0.5); rval = (l_int32)(ar * i + br + 0.5); bval = (l_int32)(ab * i + bb + 0.5); box = boxaGetValidBox(boxas, i, L_CLONE); if (box) { boxGetGeometry(box, &left, &top, &w, &h); boxDestroy(&box); } else { /* use something big to force using the LSF value */ left = 100000000; top = 100000000; w = 100000000; h = 100000000; } right = left + w - 1; bot = top + h - 1; lnew = (L_ABS(lval - left) <= max_error) ? left : lval; tnew = (L_ABS(tval - top) <= max_error) ? top : tval; rnew = (L_ABS(rval - right) <= max_error) ? right : rval; bnew = (L_ABS(bval - bot) <= max_error) ? bot : bval; wnew = rnew - lnew + 1; hnew = bnew - tnew + 1; box = boxCreate(lnew, tnew, wnew, hnew); boxaAddBox(boxad, box, L_INSERT); } if (debug) boxaPlotSides(boxad, NULL, NULL, NULL, NULL, NULL, GPLOT_X11); ptaDestroy(&ptal); ptaDestroy(&ptat); ptaDestroy(&ptar); ptaDestroy(&ptab); return boxad; } /*! * boxaConstrainSize() * * Input: boxas * width (force width of all boxes to this size; * input 0 to use the median width) * widthflag (L_ADJUST_SKIP, L_ADJUST_LEFT, L_ADJUST_RIGHT, * or L_ADJUST_LEFT_AND_RIGHT) * height (force height of all boxes to this size; * input 0 to use the median height) * heightflag (L_ADJUST_SKIP, L_ADJUST_TOP, L_ADJUST_BOT, * or L_ADJUST_TOP_AND_BOT) * Return: boxad (adjusted so all boxes are the same size) * * Notes: * (1) Forces either width or height (or both) of every box in * the boxa to a specified size, by moving the indicated sides. * (2) All input boxes should be valid. Median values will be * used with invalid boxes. * (3) Typical input might be the output of boxaLinearFit(), * where each side has been fit. * (4) Unlike boxaAdjustWidthToTarget() and boxaAdjustHeightToTarget(), * this is not dependent on a difference threshold to change the size. */ BOXA * boxaConstrainSize(BOXA *boxas, l_int32 width, l_int32 widthflag, l_int32 height, l_int32 heightflag) { l_int32 n, i, w, h, delw, delh, del_left, del_right, del_top, del_bot; BOX *medbox, *boxs, *boxd; BOXA *boxad; PROCNAME("boxaConstrainSize"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); /* Use median value if requested */ medbox = boxaGetMedian(boxas); if (width == 0 || height == 0) { boxGetGeometry(medbox, NULL, NULL, &w, &h); if (width == 0) width = w; if (height == 0) height = h; } n = boxaGetCount(boxas); boxad = boxaCreate(n); for (i = 0; i < n; i++) { boxs = boxaGetValidBox(boxas, i, L_CLONE); if (!boxs) { L_ERROR("invalid box %d; using median\n", procName, i); boxs = boxCopy(medbox); } boxGetGeometry(boxs, NULL, NULL, &w, &h); delw = width - w; delh = height - h; del_left = del_right = del_top = del_bot = 0; if (widthflag == L_ADJUST_LEFT) { del_left = -delw; } else if (widthflag == L_ADJUST_RIGHT) { del_right = delw; } else { del_left = -delw / 2; del_right = delw / 2 + L_SIGN(delw) * (delw & 1); } if (heightflag == L_ADJUST_TOP) { del_top = -delh; } else if (heightflag == L_ADJUST_BOT) { del_bot = delh; } else { del_top = -delh / 2; del_bot = delh / 2 + L_SIGN(delh) * (delh & 1); } boxd = boxAdjustSides(NULL, boxs, del_left, del_right, del_top, del_bot); boxaAddBox(boxad, boxd, L_INSERT); boxDestroy(&boxs); } boxDestroy(&medbox); return boxad; } /*! * boxaReconcileEvenOddHeight() * * Input: boxas (containing at least 3 valid boxes in even and odd) * sides (L_ADJUST_TOP, L_ADJUST_BOT, L_ADJUST_TOP_AND_BOT) * delh (threshold on median height difference) * op (L_ADJUST_CHOOSE_MIN, L_ADJUST_CHOOSE_MAX) * factor (> 0.0, typically near 1.0) * Return: boxad (adjusted) * * Notes: * (1) The basic idea is to reconcile differences in box height * in the even and odd boxes, by moving the top and/or bottom * edges in the even and odd boxes. Choose the edge or edges * to be moved, whether to adjust the boxes with the min * or the max of the medians, and the threshold on the median * difference between even and odd box heights for the operations * to take place. The same threshold is also used to * determine if each individual box edge is to be adjusted. * (2) Boxes are conditionally reset with either the same top (y) * value or the same bottom value, or both. The value is * determined by the greater or lesser of the medians of the * even and odd boxes, with the choice depending on the value * of @op, which selects for either min or max median height. * If the median difference between even and odd boxes is * greater than @dely, then any individual box edge that differs * from the selected median by more than @dely is set to * the selected median times a factor typically near 1.0. * (3) Note that if selecting for minimum height, you will choose * the largest y-value for the top and the smallest y-value for * the bottom of the box. * (4) Typical input might be the output of boxaSmoothSequence(), * where even and odd boxa have been independently regulated. * (5) Require at least 3 valid even boxes and 3 valid odd boxes. * Median values will be used for invalid boxes. */ BOXA * boxaReconcileEvenOddHeight(BOXA *boxas, l_int32 sides, l_int32 delh, l_int32 op, l_float32 factor) { l_int32 n, ne, no, he, ho, hmed, doeven; BOX *boxe, *boxo; BOXA *boxae, *boxao, *boxa1e, *boxa1o, *boxad; PROCNAME("boxaReconcileEvenOddHeight"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (sides != L_ADJUST_TOP && sides != L_ADJUST_BOT && sides != L_ADJUST_TOP_AND_BOT) { L_WARNING("no action requested; returning copy\n", procName); return boxaCopy(boxas, L_COPY); } if ((n = boxaGetValidCount(boxas)) < 6) { L_WARNING("need at least 6 valid boxes; returning copy\n", procName); return boxaCopy(boxas, L_COPY); } if (factor <= 0.0) { L_WARNING("invalid factor; setting to 1.0\n", procName); factor = 1.0; } /* Require at least 3 valid boxes of both types */ boxaSplitEvenOdd(boxas, 0, &boxae, &boxao); if (boxaGetValidCount(boxae) < 3 || boxaGetValidCount(boxao) < 3) { boxaDestroy(&boxae); boxaDestroy(&boxao); return boxaCopy(boxas, L_COPY); } ne = boxaGetCount(boxae); no = boxaGetCount(boxao); /* Get the median heights for each set */ boxa1e = boxaSort(boxae, L_SORT_BY_HEIGHT, L_SORT_INCREASING, NULL); boxa1o = boxaSort(boxao, L_SORT_BY_HEIGHT, L_SORT_INCREASING, NULL); boxe = boxaGetBox(boxa1e, ne / 2, L_COPY); /* median ht even boxes */ boxo = boxaGetBox(boxa1o, no / 2, L_COPY); /* median ht odd boxes */ boxGetGeometry(boxe, NULL, NULL, NULL, &he); boxGetGeometry(boxo, NULL, NULL, NULL, &ho); boxaDestroy(&boxa1e); boxaDestroy(&boxa1o); boxDestroy(&boxe); boxDestroy(&boxo); L_INFO("median he = %d, median ho = %d\n", procName, he, ho); /* If the difference in median height reaches the threshold @delh, * only adjust the side(s) of one of the sets. If we choose * the minimum median height as the target, allow the target * to be scaled by a factor, typically near 1.0, of the * minimum median height. And similarly if the target is * the maximum median height. */ if (L_ABS(he - ho) > delh) { if (op == L_ADJUST_CHOOSE_MIN) { doeven = (ho < he) ? TRUE : FALSE; hmed = (l_int32)(factor * L_MIN(he, ho)); hmed = L_MIN(hmed, L_MAX(he, ho)); /* don't make it bigger! */ } else { /* max height */ doeven = (ho > he) ? TRUE : FALSE; hmed = (l_int32)(factor * L_MAX(he, ho)); hmed = L_MAX(hmed, L_MIN(he, ho)); /* don't make it smaller! */ } if (doeven) boxaAdjustHeightToTarget(boxae, boxae, sides, hmed, delh); if (!doeven) boxaAdjustHeightToTarget(boxao, boxao, sides, hmed, delh); } boxad = boxaMergeEvenOdd(boxae, boxao, 0); boxaDestroy(&boxae); boxaDestroy(&boxao); return boxad; } /*! * boxaPlotSides() * * Input: boxas (source boxa) * plotname (, can be NULL) * &nal ( na of left sides) * &nat ( na of top sides) * &nar ( na of right sides) * &nab ( na of bottom sides) * outformat (GPLOT_NONE for no output; GPLOT_PNG for png, etc) * ut * Return: 0 if OK, 1 on error * * Notes: * (1) This is a debugging function to show the progression of * the four sides in the boxes. There must be at least 2 boxes. * (2) One of three conditions holds: * (a) only the even indices have valid boxes * (b) only the odd indices have valid boxes * (c) all indices have valid boxes * This condition is determined by looking at the first 2 boxes. * (3) The plotfiles are put in /tmp, and are named either with * @plotname or, if NULL, a default name. */ l_int32 boxaPlotSides(BOXA *boxa, const char *plotname, NUMA **pnal, NUMA **pnat, NUMA **pnar, NUMA **pnab, l_int32 outformat) { char buf[128]; static l_int32 plotid = 0; l_int32 n, i, w, h, left, top, right, bot; l_float32 startx, delx; BOX *box, *boxe, *boxo; GPLOT *gplot; NUMA *nal, *nat, *nar, *nab; PROCNAME("boxaPlotSides"); if (pnal) *pnal = NULL; if (pnat) *pnat = NULL; if (pnar) *pnar = NULL; if (pnab) *pnab = NULL; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if ((n = boxaGetCount(boxa)) < 2) return ERROR_INT("less than 2 boxes", procName, 1); /* Determine which condition holds for valid boxes */ delx = 1; boxe = boxaGetValidBox(boxa, 0, L_CLONE); boxo = boxaGetValidBox(boxa, 1, L_CLONE); if (!boxe) { startx = 1; delx = 2; } else if (!boxo) { startx = 0; delx = 2; } boxDestroy(&boxe); boxDestroy(&boxo); /* Build the numas for each side */ nal = numaCreate(n); nat = numaCreate(n); nar = numaCreate(n); nab = numaCreate(n); if (delx == 2) { numaSetParameters(nal, startx, delx); numaSetParameters(nat, startx, delx); numaSetParameters(nar, startx, delx); numaSetParameters(nab, startx, delx); } for (i = 0; i < n; i++) { if ((box = boxaGetValidBox(boxa, i, L_CLONE)) == NULL) continue; boxGetGeometry(box, &left, &top, &w, &h); right = left + w - 1; bot = top + h - 1; numaAddNumber(nal, left); numaAddNumber(nat, top); numaAddNumber(nar, right); numaAddNumber(nab, bot); boxDestroy(&box); } /* Plot them */ if (outformat < 0 || outformat > GPLOT_LATEX) { L_ERROR("invalid gplot format\n", procName); outformat = 0; } if (outformat > 0) { if (plotname) snprintf(buf, sizeof(buf), "/tmp/%s", plotname); else snprintf(buf, sizeof(buf), "/tmp/boxsides.%d", plotid++); gplot = gplotCreate(buf, outformat, "Box sides vs. box index", "box index", "box location"); gplotAddPlot(gplot, NULL, nal, GPLOT_LINES, "left side"); gplotAddPlot(gplot, NULL, nat, GPLOT_LINES, "top side"); gplotAddPlot(gplot, NULL, nar, GPLOT_LINES, "right side"); gplotAddPlot(gplot, NULL, nab, GPLOT_LINES, "bottom side"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } if (pnal) *pnal = nal; else numaDestroy(&nal); if (pnat) *pnat = nat; else numaDestroy(&nat); if (pnar) *pnar = nar; else numaDestroy(&nar); if (pnab) *pnab = nab; else numaDestroy(&nab); return 0; } /*---------------------------------------------------------------------* * Miscellaneous Boxa functions * *---------------------------------------------------------------------*/ /*! * boxaGetExtent() * * Input: boxa * &w ( width) * &h ( height) * &box (, minimum box containing all boxes * in boxa) * Return: 0 if OK, 1 on error * * Notes: * (1) The returned w and h are the minimum size image * that would contain all boxes untranslated. * (2) If there are no valid boxes, returned w and h are 0 and * all parameters in the returned box are 0. This * is not an error, because an empty boxa is valid and * boxaGetExtent() is required for serialization. */ l_int32 boxaGetExtent(BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox) { l_int32 i, n, x, y, w, h, xmax, ymax, xmin, ymin, found; PROCNAME("boxaGetExtent"); if (!pw && !ph && !pbox) return ERROR_INT("no ptrs defined", procName, 1); if (pbox) *pbox = NULL; if (pw) *pw = 0; if (ph) *ph = 0; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); xmax = ymax = 0; xmin = ymin = 100000000; found = FALSE; for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); if (w <= 0 || h <= 0) continue; found = TRUE; xmin = L_MIN(xmin, x); ymin = L_MIN(ymin, y); xmax = L_MAX(xmax, x + w); ymax = L_MAX(ymax, y + h); } if (found == FALSE) /* no valid boxes in boxa */ xmin = ymin = 0; if (pw) *pw = xmax; if (ph) *ph = ymax; if (pbox) *pbox = boxCreate(xmin, ymin, xmax - xmin, ymax - ymin); return 0; } /*! * boxaGetCoverage() * * Input: boxa * wc, hc (dimensions of overall clipping rectangle with UL * corner at (0, 0) that is covered by the boxes. * exactflag (1 for guaranteeing an exact result; 0 for getting * an exact result only if the boxes do not overlap) * &fract ( sum of box area as fraction of w * h) * Return: 0 if OK, 1 on error * * Notes: * (1) The boxes in boxa are clipped to the input rectangle. * (2) * When @exactflag == 1, we generate a 1 bpp pix of size * wc x hc, paint all the boxes black, and count the fg pixels. * This can take 1 msec on a large page with many boxes. * * When @exactflag == 0, we clip each box to the wc x hc region * and sum the resulting areas. This is faster. * * The results are the same when none of the boxes overlap * within the wc x hc region. */ l_int32 boxaGetCoverage(BOXA *boxa, l_int32 wc, l_int32 hc, l_int32 exactflag, l_float32 *pfract) { l_int32 i, n, x, y, w, h, sum; BOX *box, *boxc; PIX *pixt; PROCNAME("boxaGetCoverage"); if (!pfract) return ERROR_INT("&fract not defined", procName, 1); *pfract = 0.0; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); if (n == 0) return ERROR_INT("no boxes in boxa", procName, 1); if (exactflag == 0) { /* quick and dirty */ sum = 0; for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if ((boxc = boxClipToRectangle(box, wc, hc)) != NULL) { boxGetGeometry(boxc, NULL, NULL, &w, &h); sum += w * h; boxDestroy(&boxc); } boxDestroy(&box); } } else { /* slower and exact */ pixt = pixCreate(wc, hc, 1); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); pixRasterop(pixt, x, y, w, h, PIX_SET, NULL, 0, 0); boxDestroy(&box); } pixCountPixels(pixt, &sum, NULL); pixDestroy(&pixt); } *pfract = (l_float32)sum / (l_float32)(wc * hc); return 0; } /*! * boxaaSizeRange() * * Input: baa * &minw, &minh, &maxw, &maxh ( range of * dimensions of all boxes) * Return: 0 if OK, 1 on error */ l_int32 boxaaSizeRange(BOXAA *baa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, minbw, minbh, maxbw, maxbh, i, n; BOXA *boxa; PROCNAME("boxaaSizeRange"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", procName, 1); minw = minh = 100000000; maxw = maxh = 0; n = boxaaGetCount(baa); for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); boxaSizeRange(boxa, &minbw, &minbh, &maxbw, &maxbh); if (minbw < minw) minw = minbw; if (minbh < minh) minh = minbh; if (maxbw > maxw) maxw = maxbw; if (maxbh > maxh) maxh = maxbh; } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * boxaSizeRange() * * Input: boxa * &minw, &minh, &maxw, &maxh ( range of * dimensions of box in the array) * Return: 0 if OK, 1 on error */ l_int32 boxaSizeRange(BOXA *boxa, l_int32 *pminw, l_int32 *pminh, l_int32 *pmaxw, l_int32 *pmaxh) { l_int32 minw, minh, maxw, maxh, i, n, w, h; PROCNAME("boxaSizeRange"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (!pminw && !pmaxw && !pminh && !pmaxh) return ERROR_INT("no data can be returned", procName, 1); minw = minh = 100000000; maxw = maxh = 0; n = boxaGetCount(boxa); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); if (w < minw) minw = w; if (h < minh) minh = h; if (w > maxw) maxw = w; if (h > maxh) maxh = h; } if (pminw) *pminw = minw; if (pminh) *pminh = minh; if (pmaxw) *pmaxw = maxw; if (pmaxh) *pmaxh = maxh; return 0; } /*! * boxaLocationRange() * * Input: boxa * &minx, &miny, &maxx, &maxy ( range of * UL corner positions) * Return: 0 if OK, 1 on error */ l_int32 boxaLocationRange(BOXA *boxa, l_int32 *pminx, l_int32 *pminy, l_int32 *pmaxx, l_int32 *pmaxy) { l_int32 minx, miny, maxx, maxy, i, n, x, y; PROCNAME("boxaLocationRange"); if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (!pminx && !pminy && !pmaxx && !pmaxy) return ERROR_INT("no data can be returned", procName, 1); minx = miny = 100000000; maxx = maxy = 0; n = boxaGetCount(boxa); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, NULL, NULL); if (x < minx) minx = x; if (y < miny) miny = y; if (x > maxx) maxx = x; if (y > maxy) maxy = y; } if (pminx) *pminx = minx; if (pminy) *pminy = miny; if (pmaxx) *pmaxx = maxx; if (pmaxy) *pmaxy = maxy; return 0; } /*! * boxaGetArea() * * Input: boxa * &area ( total area of all boxes) * Return: 0 if OK, 1 on error * * Notes: * (1) Measures the total area of the boxes, without regard to overlaps. */ l_int32 boxaGetArea(BOXA *boxa, l_int32 *parea) { l_int32 i, n, w, h; PROCNAME("boxaGetArea"); if (!parea) return ERROR_INT("&area not defined", procName, 1); *parea = 0; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); n = boxaGetCount(boxa); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, NULL, NULL, &w, &h); *parea += w * h; } return 0; } /*! * boxaDisplayTiled() * * Input: boxa * pixa ( background for each box) * maxwidth (of output image) * linewidth (width of box outlines, before scaling) * scalefactor (applied to every box; use 1.0 for no scaling) * background (0 for white, 1 for black; this is the color * of the spacing between the images) * spacing (between images, and on outside) * border (width of black border added to each image; * use 0 for no border) * fontdir ( can be NULL; use to number the boxes) * Return: pixd (of tiled images of boxes), or null on error * * Notes: * (1) Displays each box separately in a tiled 32 bpp image. * (2) If pixa is defined, it must have the same count as the boxa, * and it will be a background over with each box is rendered. * If pixa is not defined, the boxes will be rendered over * blank images of identical size. * (3) See pixaDisplayTiledInRows() for other parameters. */ PIX * boxaDisplayTiled(BOXA *boxa, PIXA *pixa, l_int32 maxwidth, l_int32 linewidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border, const char *fontdir) { char buf[32]; l_int32 i, n, npix, w, h; L_BMF *bmf; BOX *box; PIX *pix1, *pix2, *pixd; PIXA *pixat; PROCNAME("boxaDisplayTiled"); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); n = boxaGetCount(boxa); if (pixa) { npix = pixaGetCount(pixa); if (n != npix) return (PIX *)ERROR_PTR("boxa and pixa counts differ", procName, NULL); } bmf = NULL; if (fontdir) { if ((bmf = bmfCreate(fontdir, 6)) == NULL) { L_ERROR("can't find fonts; skipping them\n", procName); fontdir = NULL; } } pixat = pixaCreate(n); boxaGetExtent(boxa, &w, &h, NULL); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); if (!pixa) { pix1 = pixCreate(w, h, 32); pixSetAll(pix1); } else { pix1 = pixaGetPix(pixa, i, L_COPY); } if (fontdir) { pixSetBorderVal(pix1, 0, 0, 0, 2, 0x0000ff00); snprintf(buf, sizeof(buf), "%d", i); pix2 = pixAddSingleTextblock(pix1, bmf, buf, 0x00ff0000, L_ADD_BELOW, NULL); } else { pix2 = pixClone(pix1); } pixDestroy(&pix1); pixRenderBoxArb(pix2, box, linewidth, 255, 0, 0); pixaAddPix(pixat, pix2, L_INSERT); boxDestroy(&box); } bmfDestroy(&bmf); pixd = pixaDisplayTiledInRows(pixat, 32, maxwidth, scalefactor, background, spacing, border); pixaDestroy(&pixat); return pixd; } leptonica-1.70/src/binexpand.c0000644000175000017500000002370112244216024014410 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * binexpand.c * * Replicated expansion (integer scaling) * PIX *pixExpandBinaryReplicate() * * Special case: power of 2 replicated expansion * PIX *pixExpandBinaryPower2() * * Expansion tables for power of 2 expansion * static l_uint16 *makeExpandTab2x() * static l_uint32 *makeExpandTab4x() * static l_uint32 *makeExpandTab8x() */ #include #include "allheaders.h" /* Static table functions and tables */ static l_uint16 * makeExpandTab2x(void); static l_uint32 * makeExpandTab4x(void); static l_uint32 * makeExpandTab8x(void); static l_uint32 expandtab16[] = { 0x00000000, 0x0000ffff, 0xffff0000, 0xffffffff}; /*------------------------------------------------------------------* * Replicated expansion (integer scaling) * *------------------------------------------------------------------*/ /*! * pixExpandBinaryReplicate() * * Input: pixs (1 bpp) * factor (integer scale factor for replicative expansion) * Return: pixd (scaled up), or null on error */ PIX * pixExpandBinaryReplicate(PIX *pixs, l_int32 factor) { l_int32 w, h, d, wd, hd, wpls, wpld, i, j, k, start; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixExpandBinaryReplicate"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not binary", procName, NULL); if (factor <= 0) return (PIX *)ERROR_PTR("factor <= 0; invalid", procName, NULL); if (factor == 1) return pixCopy(NULL, pixs); if (factor == 2 || factor == 4 || factor == 8 || factor == 16) return pixExpandBinaryPower2(pixs, factor); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wd = factor * w; hd = factor * h; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + factor * i * wpld; for (j = 0; j < w; j++) { if (GET_DATA_BIT(lines, j)) { start = factor * j; for (k = 0; k < factor; k++) SET_DATA_BIT(lined, start + k); } } for (k = 1; k < factor; k++) memcpy(lined + k * wpld, lined, 4 * wpld); } return pixd; } /*------------------------------------------------------------------* * Power of 2 expansion * *------------------------------------------------------------------*/ /*! * pixExpandBinaryPower2() * * Input: pixs (1 bpp) * factor (expansion factor: 1, 2, 4, 8, 16) * Return: pixd (expanded 1 bpp by replication), or null on error */ PIX * pixExpandBinaryPower2(PIX *pixs, l_int32 factor) { l_uint8 sval; l_uint16 *tab2; l_int32 i, j, k, w, h, d, wd, hd, wpls, wpld, sdibits, sqbits, sbytes; l_uint32 *datas, *datad, *lines, *lined, *tab4, *tab8; PIX *pixd; PROCNAME("pixExpandBinaryPower2"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1) return (PIX *)ERROR_PTR("pixs not binary", procName, NULL); if (factor == 1) return pixCopy(NULL, pixs); if (factor != 2 && factor != 4 && factor != 8 && factor != 16) return (PIX *)ERROR_PTR("factor must be in {2,4,8,16}", procName, NULL); wpls = pixGetWpl(pixs); datas = pixGetData(pixs); wd = factor * w; hd = factor * h; if ((pixd = pixCreate(wd, hd, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixScaleResolution(pixd, (l_float32)factor, (l_float32)factor); wpld = pixGetWpl(pixd); datad = pixGetData(pixd); if (factor == 2) { if ((tab2 = makeExpandTab2x()) == NULL) return (PIX *)ERROR_PTR("tab2 not made", procName, NULL); sbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 2 * i * wpld; for (j = 0; j < sbytes; j++) { sval = GET_DATA_BYTE(lines, j); SET_DATA_TWO_BYTES(lined, j, tab2[sval]); } memcpy((char *)(lined + wpld), (char *)lined, 4 * wpld); } FREE(tab2); } else if (factor == 4) { if ((tab4 = makeExpandTab4x()) == NULL) return (PIX *)ERROR_PTR("tab4 not made", procName, NULL); sbytes = (w + 7) / 8; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 4 * i * wpld; for (j = 0; j < sbytes; j++) { sval = GET_DATA_BYTE(lines, j); lined[j] = tab4[sval]; } for (k = 1; k < 4; k++) memcpy((char *)(lined + k * wpld), (char *)lined, 4 * wpld); } FREE(tab4); } else if (factor == 8) { if ((tab8 = makeExpandTab8x()) == NULL) return (PIX *)ERROR_PTR("tab8 not made", procName, NULL); sqbits = (w + 3) / 4; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 8 * i * wpld; for (j = 0; j < sqbits; j++) { sval = GET_DATA_QBIT(lines, j); if (sval > 15) L_WARNING("sval = %d; should be < 16\n", procName, sval); lined[j] = tab8[sval]; } for (k = 1; k < 8; k++) memcpy((char *)(lined + k * wpld), (char *)lined, 4 * wpld); } FREE(tab8); } else { /* factor == 16 */ sdibits = (w + 1) / 2; for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + 16 * i * wpld; for (j = 0; j < sdibits; j++) { sval = GET_DATA_DIBIT(lines, j); lined[j] = expandtab16[sval]; } for (k = 1; k < 16; k++) memcpy((char *)(lined + k * wpld), (char *)lined, 4 * wpld); } } return pixd; } /*-------------------------------------------------------------------* * Expansion tables for 2x, 4x and 8x expansion * *-------------------------------------------------------------------*/ static l_uint16 * makeExpandTab2x(void) { l_uint16 *tab; l_int32 i; PROCNAME("makeExpandTab2x"); if ((tab = (l_uint16 *) CALLOC(256, sizeof(l_uint16))) == NULL) return (l_uint16 *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 256; i++) { if (i & 0x01) tab[i] = 0x3; if (i & 0x02) tab[i] |= 0xc; if (i & 0x04) tab[i] |= 0x30; if (i & 0x08) tab[i] |= 0xc0; if (i & 0x10) tab[i] |= 0x300; if (i & 0x20) tab[i] |= 0xc00; if (i & 0x40) tab[i] |= 0x3000; if (i & 0x80) tab[i] |= 0xc000; } return tab; } static l_uint32 * makeExpandTab4x(void) { l_uint32 *tab; l_int32 i; PROCNAME("makeExpandTab4x"); if ((tab = (l_uint32 *) CALLOC(256, sizeof(l_uint32))) == NULL) return (l_uint32 *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 256; i++) { if (i & 0x01) tab[i] = 0xf; if (i & 0x02) tab[i] |= 0xf0; if (i & 0x04) tab[i] |= 0xf00; if (i & 0x08) tab[i] |= 0xf000; if (i & 0x10) tab[i] |= 0xf0000; if (i & 0x20) tab[i] |= 0xf00000; if (i & 0x40) tab[i] |= 0xf000000; if (i & 0x80) tab[i] |= 0xf0000000; } return tab; } static l_uint32 * makeExpandTab8x(void) { l_uint32 *tab; l_int32 i; PROCNAME("makeExpandTab8x"); if ((tab = (l_uint32 *) CALLOC(16, sizeof(l_uint32))) == NULL) return (l_uint32 *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 16; i++) { if (i & 0x01) tab[i] = 0xff; if (i & 0x02) tab[i] |= 0xff00; if (i & 0x04) tab[i] |= 0xff0000; if (i & 0x08) tab[i] |= 0xff000000; } return tab; } leptonica-1.70/src/readbarcode.c0000644000175000017500000015003312244727767014717 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * readbarcode.c * * Basic operations to locate and identify the line widths * in 1D barcodes. * * Top level * SARRAY *pixProcessBarcodes() * * Next levels * PIXA *pixExtractBarcodes() * SARRAY *pixReadBarcodes() * l_int32 pixReadBarcodeWidths() * * Location * BOXA *pixLocateBarcodes() * static PIX *pixGenerateBarcodeMask() * * Extraction and deskew * PIXA *pixDeskewBarcodes() * * Process to get line widths * NUMA *pixExtractBarcodeWidths1() * NUMA *pixExtractBarcodeWidths2() * NUMA *pixExtractBarcodeCrossings() * * Average adjacent rasters * static NUMA *pixAverageRasterScans() * * Signal processing for barcode widths * NUMA *numaQuantizeCrossingsByWidth() * static l_int32 numaGetCrossingDistances() * static NUMA *numaLocatePeakRanges() * static NUMA *numaGetPeakCentroids() * static NUMA *numaGetPeakWidthLUT() * NUMA *numaQuantizeCrossingsByWindow() * static l_int32 numaEvalBestWidthAndShift() * static l_int32 numaEvalSyncError() * * * NOTE CAREFULLY: This is "early beta" code. It has not been tuned * to work robustly on a large database of barcode images. I'm putting * it out so that people can play with it, find out how it breaks, and * contribute decoders for other barcode formats. Both the functional * interfaces and ABI will almost certainly change in the coming * few months. The actual decoder, in bardecode.c, at present only * works on the following codes: Code I2of5, Code 2of5, Code 39, Code 93 * Codabar and UPCA. To add another barcode format, it is necessary * to make changes in readbarcode.h and bardecode.c. * The program prog/barcodetest shows how to run from the top level * (image --> decoded data). */ #include #include "allheaders.h" #include "readbarcode.h" /* Parameters for pixGenerateBarcodeMask() */ static const l_int32 MAX_SPACE_WIDTH = 19; /* was 15 */ static const l_int32 MAX_NOISE_WIDTH = 50; /* smaller than barcode width */ static const l_int32 MAX_NOISE_HEIGHT = 30; /* smaller than barcode height */ /* Static functions */ static PIX *pixGenerateBarcodeMask(PIX *pixs, l_int32 maxspace, l_int32 nwidth, l_int32 nheight); static NUMA *pixAverageRasterScans(PIX *pixs, l_int32 nscans); static l_int32 numaGetCrossingDistances(NUMA *nas, NUMA **pnaedist, NUMA **pnaodist, l_float32 *pmindist, l_float32 *pmaxdist); static NUMA *numaLocatePeakRanges(NUMA *nas, l_float32 minfirst, l_float32 minsep, l_float32 maxmin); static NUMA *numaGetPeakCentroids(NUMA *nahist, NUMA *narange); static NUMA *numaGetPeakWidthLUT(NUMA *narange, NUMA *nacent); static l_int32 numaEvalBestWidthAndShift(NUMA *nas, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore); static l_int32 numaEvalSyncError(NUMA *nas, l_int32 ifirst, l_int32 ilast, l_float32 width, l_float32 shift, l_float32 *pscore, NUMA **pnad); #ifndef NO_CONSOLE_IO #define DEBUG_DESKEW 1 #define DEBUG_WIDTHS 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------------* * Top level * *------------------------------------------------------------------------*/ /*! * pixProcessBarcodes() * * Input: pixs (any depth) * format (L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ...) * method (L_USE_WIDTHS, L_USE_WINDOWS) * &saw ( sarray of bar widths) * debugflag (use 1 to generate debug output) * Return: sarray (text of barcodes), or null if none found or on error */ SARRAY * pixProcessBarcodes(PIX *pixs, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag) { PIX *pixg; PIXA *pixa; SARRAY *sad; PROCNAME("pixProcessBarcodes"); if (psaw) *psaw = NULL; if (!pixs) return (SARRAY *)ERROR_PTR("pixs not defined", procName, NULL); if (format != L_BF_ANY && !barcodeFormatIsSupported(format)) return (SARRAY *)ERROR_PTR("unsupported format", procName, NULL); if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) return (SARRAY *)ERROR_PTR("invalid method", procName, NULL); /* Get an 8 bpp image, no cmap */ if (pixGetDepth(pixs) == 8 && !pixGetColormap(pixs)) pixg = pixClone(pixs); else pixg = pixConvertTo8(pixs, 0); if ((pixa = pixExtractBarcodes(pixg, debugflag)) == NULL) { pixDestroy(&pixg); return (SARRAY *)ERROR_PTR("no barcode(s) found", procName, NULL); } sad = pixReadBarcodes(pixa, format, method, psaw, debugflag); pixDestroy(&pixg); pixaDestroy(&pixa); return sad; } /*! * pixExtractBarcodes() * * Input: pixs (8 bpp, no colormap) * debugflag (use 1 to generate debug output) * Return: pixa (deskewed and cropped barcodes), or null if * none found or on error */ PIXA * pixExtractBarcodes(PIX *pixs, l_int32 debugflag) { l_int32 i, n; l_float32 angle, conf; BOX *box; BOXA *boxa; PIX *pixb, *pixm, *pixt; PIXA *pixa; PROCNAME("pixExtractBarcodes"); if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs)) return (PIXA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); /* Locate them; use small threshold for edges. */ boxa = pixLocateBarcodes(pixs, 20, &pixb, &pixm); n = boxaGetCount(boxa); L_INFO("%d possible barcode(s) found\n", procName, n); if (n == 0) { boxaDestroy(&boxa); pixDestroy(&pixb); pixDestroy(&pixm); return NULL; } if (debugflag) { boxaWriteStream(stderr, boxa); pixDisplay(pixb, 100, 100); pixDisplay(pixm, 800, 100); } /* Deskew each barcode individually */ pixa = pixaCreate(n); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pixt = pixDeskewBarcode(pixs, pixb, box, 15, 20, &angle, &conf); L_INFO("angle = %6.2f, conf = %6.2f\n", procName, angle, conf); if (conf > 5.0) { pixaAddPix(pixa, pixt, L_INSERT); pixaAddBox(pixa, box, L_INSERT); } else { pixDestroy(&pixt); boxDestroy(&box); } } #if DEBUG_DESKEW pixt = pixaDisplayTiledInRows(pixa, 8, 1000, 1.0, 0, 30, 2); pixWrite("junkpixt", pixt, IFF_PNG); pixDestroy(&pixt); #endif /* DEBUG_DESKEW */ pixDestroy(&pixb); pixDestroy(&pixm); boxaDestroy(&boxa); return pixa; } /*! * pixReadBarcodes() * * Input: pixa (of 8 bpp deskewed and cropped barcodes) * format (L_BF_ANY, L_BF_CODEI2OF5, L_BF_CODE93, ...) * method (L_USE_WIDTHS, L_USE_WINDOWS); * &saw ( sarray of bar widths) * debugflag (use 1 to generate debug output) * Return: sa (sarray of widths, one string for each barcode found), * or null on error */ SARRAY * pixReadBarcodes(PIXA *pixa, l_int32 format, l_int32 method, SARRAY **psaw, l_int32 debugflag) { char *barstr, *data; char emptystring[] = ""; l_int32 i, j, n, nbars, ival; NUMA *na; PIX *pixt; SARRAY *saw, *sad; PROCNAME("pixReadBarcodes"); if (psaw) *psaw = NULL; if (!pixa) return (SARRAY *)ERROR_PTR("pixa not defined", procName, NULL); if (format != L_BF_ANY && !barcodeFormatIsSupported(format)) return (SARRAY *)ERROR_PTR("unsupported format", procName, NULL); if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) return (SARRAY *)ERROR_PTR("invalid method", procName, NULL); n = pixaGetCount(pixa); saw = sarrayCreate(n); sad = sarrayCreate(n); for (i = 0; i < n; i++) { /* Extract the widths of the lines in each barcode */ pixt = pixaGetPix(pixa, i, L_CLONE); na = pixReadBarcodeWidths(pixt, method, debugflag); pixDestroy(&pixt); if (!na) { ERROR_INT("valid barcode widths not returned", procName, 1); continue; } /* Save the widths as a string */ nbars = numaGetCount(na); barstr = (char *)CALLOC(nbars + 1, sizeof(char)); for (j = 0; j < nbars; j++) { numaGetIValue(na, j, &ival); barstr[j] = 0x30 + ival; } sarrayAddString(saw, barstr, L_INSERT); numaDestroy(&na); /* Decode the width strings */ data = barcodeDispatchDecoder(barstr, format, debugflag); if (!data) { ERROR_INT("barcode not decoded", procName, 1); sarrayAddString(sad, emptystring, L_COPY); continue; } sarrayAddString(sad, data, L_INSERT); } /* If nothing found, clean up */ if (sarrayGetCount(saw) == 0) { sarrayDestroy(&saw); sarrayDestroy(&sad); return (SARRAY *)ERROR_PTR("no valid barcode data", procName, NULL); } if (psaw) *psaw = saw; else sarrayDestroy(&saw); return sad; } /*! * pixReadBarcodeWidths() * * Input: pixs (of 8 bpp deskewed and cropped barcode) * method (L_USE_WIDTHS, L_USE_WINDOWS); * debugflag (use 1 to generate debug output) * Return: na (numa of widths (each in set {1,2,3,4}), or null on error */ NUMA * pixReadBarcodeWidths(PIX *pixs, l_int32 method, l_int32 debugflag) { l_float32 winwidth; NUMA *na; PROCNAME("pixReadBarcodeWidths"); if (!pixs) return (NUMA *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (method != L_USE_WIDTHS && method != L_USE_WINDOWS) return (NUMA *)ERROR_PTR("invalid method", procName, NULL); /* Extract the widths of the lines in each barcode */ if (method == L_USE_WIDTHS) na = pixExtractBarcodeWidths1(pixs, 120, 0.25, NULL, NULL, debugflag); else /* method == L_USE_WINDOWS */ na = pixExtractBarcodeWidths2(pixs, 120, &winwidth, NULL, debugflag); #if DEBUG_WIDTHS if (method == L_USE_WINDOWS) fprintf(stderr, "Window width for barcode: %7.3f\n", winwidth); numaWriteStream(stderr, na); #endif /* DEBUG_WIDTHS */ if (!na) return (NUMA *)ERROR_PTR("barcode widths invalid", procName, NULL); return na; } /*------------------------------------------------------------------------* * Locate barcode in image * *------------------------------------------------------------------------*/ /*! * pixLocateBarcodes() * * Input: pixs (any depth) * thresh (for binarization of edge filter output; typ. 20) * &pixb ( binarized edge filtered input image) * &pixm ( mask over barcodes) * Return: boxa (location of barcodes), or null if none found or on error */ BOXA * pixLocateBarcodes(PIX *pixs, l_int32 thresh, PIX **ppixb, PIX **ppixm) { BOXA *boxa; PIX *pix8, *pixe, *pixb, *pixm; PROCNAME("pixLocateBarcodes"); if (!pixs) return (BOXA *)ERROR_PTR("pixs not defined", procName, NULL); /* Get an 8 bpp image, no cmap */ if (pixGetDepth(pixs) == 8 && !pixGetColormap(pixs)) pix8 = pixClone(pixs); else pix8 = pixConvertTo8(pixs, 0); /* Get a 1 bpp image of the edges */ pixe = pixSobelEdgeFilter(pix8, L_ALL_EDGES); pixb = pixThresholdToBinary(pixe, thresh); pixInvert(pixb, pixb); pixDestroy(&pix8); pixDestroy(&pixe); pixm = pixGenerateBarcodeMask(pixb, MAX_SPACE_WIDTH, MAX_NOISE_WIDTH, MAX_NOISE_HEIGHT); boxa = pixConnComp(pixm, NULL, 8); if (ppixb) *ppixb = pixb; else pixDestroy(&pixb); if (ppixm) *ppixm = pixm; else pixDestroy(&pixm); return boxa; } /*! * pixGenerateBarcodeMask() * * Input: pixs (1 bpp) * maxspace (largest space in the barcode, in pixels) * nwidth (opening 'width' to remove noise) * nheight (opening 'height' to remove noise) * Return: pixm (mask over barcodes), or null if none found or on error * * Notes: * (1) For noise removal, 'width' and 'height' are referred to the * barcode orientation. * (2) If there is skew, the mask will not cover the barcode corners. */ static PIX * pixGenerateBarcodeMask(PIX *pixs, l_int32 maxspace, l_int32 nwidth, l_int32 nheight) { PIX *pixt1, *pixt2, *pixd; PROCNAME("pixGenerateBarcodeMask"); if (!pixs || pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); /* Identify horizontal barcodes */ pixt1 = pixCloseBrick(NULL, pixs, maxspace + 1, 1); pixt2 = pixOpenBrick(NULL, pixs, maxspace + 1, 1); pixXor(pixt2, pixt2, pixt1); pixOpenBrick(pixt2, pixt2, nwidth, nheight); pixDestroy(&pixt1); /* Identify vertical barcodes */ pixt1 = pixCloseBrick(NULL, pixs, 1, maxspace + 1); pixd = pixOpenBrick(NULL, pixs, 1, maxspace + 1); pixXor(pixd, pixd, pixt1); pixOpenBrick(pixd, pixd, nheight, nwidth); pixDestroy(&pixt1); /* Combine to get all barcodes */ pixOr(pixd, pixd, pixt2); pixDestroy(&pixt2); return pixd; } /*------------------------------------------------------------------------* * Extract and deskew barcode * *------------------------------------------------------------------------*/ /*! * pixDeskewBarcode() * * Input: pixs (input image; 8 bpp) * pixb (binarized edge-filtered input image) * box (identified region containing barcode) * margin (of extra pixels around box to extract) * threshold (for binarization; ~20) * &angle ( in degrees, clockwise is positive) * &conf ( confidence) * Return: pixd (deskewed barcode), or null on error * * Note: * (1) The (optional) angle returned is the angle in degrees (cw positive) * necessary to rotate the image so that it is deskewed. */ PIX * pixDeskewBarcode(PIX *pixs, PIX *pixb, BOX *box, l_int32 margin, l_int32 threshold, l_float32 *pangle, l_float32 *pconf) { l_int32 x, y, w, h, n; l_float32 angle, angle1, angle2, conf, conf1, conf2, score1, score2, deg2rad; BOX *boxe, *boxt; BOXA *boxa, *boxat; PIX *pixt1, *pixt2, *pixt3, *pixt4, *pixt5, *pixt6, *pixd; PROCNAME("pixDeskewBarcode"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (!pixb || pixGetDepth(pixb) != 1) return (PIX *)ERROR_PTR("pixb undefined or not 1 bpp", procName, NULL); if (!box) return (PIX *)ERROR_PTR("box not defined or 1 bpp", procName, NULL); /* Clip out */ deg2rad = 3.1415926535 / 180.; boxGetGeometry(box, &x, &y, &w, &h); boxe = boxCreate(x - 25, y - 25, w + 51, h + 51); pixt1 = pixClipRectangle(pixb, boxe, NULL); pixt2 = pixClipRectangle(pixs, boxe, NULL); boxDestroy(&boxe); /* Deskew, looking at all possible orientations over 180 degrees */ pixt3 = pixRotateOrth(pixt1, 1); /* look for vertical bar lines */ pixt4 = pixClone(pixt1); /* look for horizontal bar lines */ pixFindSkewSweepAndSearchScore(pixt3, &angle1, &conf1, &score1, 1, 1, 0.0, 45.0, 2.5, 0.01); pixFindSkewSweepAndSearchScore(pixt4, &angle2, &conf2, &score2, 1, 1, 0.0, 45.0, 2.5, 0.01); /* Because we're using the boundary pixels of the barcodes, * the peak can be sharper (and the confidence ratio higher) * from the signal across the top and bottom of the barcode. * However, the max score, which is the magnitude of the signal * at the optimum skew angle, will be smaller, so we use the * max score as the primary indicator of orientation. */ if (score1 >= score2) { conf = conf1; if (conf1 > 6.0 && L_ABS(angle1) > 0.1) { angle = angle1; pixt5 = pixRotate(pixt2, deg2rad * angle1, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); } else { angle = 0.0; pixt5 = pixClone(pixt2); } } else { /* score2 > score1 */ conf = conf2; pixt6 = pixRotateOrth(pixt2, 1); if (conf2 > 6.0 && L_ABS(angle2) > 0.1) { angle = 90.0 + angle2; pixt5 = pixRotate(pixt6, deg2rad * angle2, L_ROTATE_AREA_MAP, L_BRING_IN_WHITE, 0, 0); } else { angle = 90.0; pixt5 = pixClone(pixt6); } pixDestroy(&pixt6); } pixDestroy(&pixt3); pixDestroy(&pixt4); /* Extract barcode plus a margin around it */ boxa = pixLocateBarcodes(pixt5, threshold, 0, 0); if ((n = boxaGetCount(boxa)) != 1) { L_WARNING("barcode mask in %d components\n", procName, n); boxat = boxaSort(boxa, L_SORT_BY_AREA, L_SORT_DECREASING, NULL); } else { boxat = boxaCopy(boxa, L_CLONE); } boxt = boxaGetBox(boxat, 0, L_CLONE); boxGetGeometry(boxt, &x, &y, &w, &h); boxe = boxCreate(x - margin, y - margin, w + 2 * margin, h + 2 * margin); pixd = pixClipRectangle(pixt5, boxe, NULL); boxDestroy(&boxt); boxDestroy(&boxe); boxaDestroy(&boxa); boxaDestroy(&boxat); if (pangle) *pangle = angle; if (pconf) *pconf = conf; pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt5); return pixd; } /*------------------------------------------------------------------------* * Process to get line widths * *------------------------------------------------------------------------*/ /*! * pixExtractBarcodeWidths1() * * Input: pixs (input image; 8 bpp) * thresh (estimated pixel threshold for crossing * white <--> black; typ. ~120) * binfract (histo binsize as a fraction of minsize; e.g., 0.25) * &naehist ( histogram of black widths; NULL ok) * &naohist ( histogram of white widths; NULL ok) * debugflag (use 1 to generate debug output) * Return: nad (numa of barcode widths in encoded integer units), * or null on error * * Note: * (1) The widths are alternating black/white, starting with black * and ending with black. * (2) This method uses the widths of the bars directly, in terms * of the (float) number of pixels between transitions. * The histograms of these widths for black and white bars is * generated and interpreted. */ NUMA * pixExtractBarcodeWidths1(PIX *pixs, l_float32 thresh, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag) { NUMA *nac, *nad; PROCNAME("pixExtractBarcodeWidths1"); if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); /* Get the best estimate of the crossings, in pixel units */ nac = pixExtractBarcodeCrossings(pixs, thresh, debugflag); /* Get the array of bar widths, starting with a black bar */ nad = numaQuantizeCrossingsByWidth(nac, binfract, pnaehist, pnaohist, debugflag); numaDestroy(&nac); return nad; } /*! * pixExtractBarcodeWidths2() * * Input: pixs (input image; 8 bpp) * thresh (estimated pixel threshold for crossing * white <--> black; typ. ~120) * &width ( best decoding window width, in pixels) * &nac ( number of transitions in each window) * debugflag (use 1 to generate debug output) * Return: nad (numa of barcode widths in encoded integer units), * or null on error * * Notes: * (1) The widths are alternating black/white, starting with black * and ending with black. * (2) The optional best decoding window width is the width of the window * that is used to make a decision about whether a transition occurs. * It is approximately the average width in pixels of the narrowest * white and black bars (i.e., those corresponding to unit width). * (3) The optional return signal @nac is a sequence of 0s, 1s, * and perhaps a few 2s, giving the number of crossings in each window. * On the occasion where there is a '2', it is interpreted as * as ending two runs: the previous one and another one that has length 1. */ NUMA * pixExtractBarcodeWidths2(PIX *pixs, l_float32 thresh, l_float32 *pwidth, NUMA **pnac, l_int32 debugflag) { NUMA *nacp, *nad; PROCNAME("pixExtractBarcodeWidths2"); if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); /* Get the best estimate of the crossings, in pixel units */ nacp = pixExtractBarcodeCrossings(pixs, thresh, debugflag); /* Quantize the crossings to get actual windowed data */ nad = numaQuantizeCrossingsByWindow(nacp, 2.0, pwidth, NULL, pnac, debugflag); numaDestroy(&nacp); return nad; } /*! * pixExtractBarcodeCrossings() * * Input: pixs (input image; 8 bpp) * thresh (estimated pixel threshold for crossing * white <--> black; typ. ~120) * debugflag (use 1 to generate debug output) * Return: numa (of crossings, in pixel units), or null on error */ NUMA * pixExtractBarcodeCrossings(PIX *pixs, l_float32 thresh, l_int32 debugflag) { l_int32 w; l_float32 bestthresh; NUMA *nas, *nax, *nay, *nad; PROCNAME("pixExtractBarcodeCrossings"); if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); /* Scan pixels horizontally and average results */ nas = pixAverageRasterScans(pixs, 51); /* Interpolate to get 4x the number of values */ w = pixGetWidth(pixs); numaInterpolateEqxInterval(0.0, 1.0, nas, L_QUADRATIC_INTERP, 0.0, (l_float32)(w - 1), 4 * w + 1, &nax, &nay); if (debugflag) { GPLOT *gplot = gplotCreate("junksignal", GPLOT_X11, "Pixel values", "dist in pixels", "value"); gplotAddPlot(gplot, nax, nay, GPLOT_LINES, "plot 1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } /* Locate the crossings. Run multiple times with different * thresholds, and choose a threshold in the center of the * run of thresholds that all give the maximum number of crossings. */ numaSelectCrossingThreshold(nax, nay, thresh, &bestthresh); /* Get the crossings with the best threshold. */ nad = numaCrossingsByThreshold(nax, nay, bestthresh); numaDestroy(&nas); numaDestroy(&nax); numaDestroy(&nay); return nad; } /*------------------------------------------------------------------------* * Average adjacent rasters * *------------------------------------------------------------------------*/ /*! * pixAverageRasterScans() * * Input: pixs (input image; 8 bpp) * nscans (number of adjacent scans, about the center vertically) * Return: numa (of average pixel values across image), or null on error */ static NUMA * pixAverageRasterScans(PIX *pixs, l_int32 nscans) { l_int32 w, h, first, last, i, j, wpl, val; l_uint32 *line, *data; l_float32 *array; NUMA *nad; PROCNAME("pixAverageRasterScans"); if (!pixs || pixGetDepth(pixs) != 8) return (NUMA *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (nscans <= h) { first = 0; last = h - 1; nscans = h; } else { first = (h - nscans) / 2; last = first + nscans - 1; } nad = numaCreate(w); numaSetCount(nad, w); array = numaGetFArray(nad, L_NOCOPY); wpl = pixGetWpl(pixs); data = pixGetData(pixs); for (j = 0; j < w; j++) { for (i = first; i <= last; i++) { line = data + i * wpl; val = GET_DATA_BYTE(line, j); array[j] += val; } array[j] = array[j] / (l_float32)nscans; } return nad; } /*------------------------------------------------------------------------* * Signal processing for barcode widths * *------------------------------------------------------------------------*/ /*! * numaQuantizeCrossingsByWidth() * * Input: nas (numa of crossing locations, in pixel units) * binfract (histo binsize as a fraction of minsize; e.g., 0.25) * &naehist ( histo of even (black) bar widths) * &naohist ( histo of odd (white) bar widths) * debugflag (1 to generate plots of histograms of bar widths) * Return: nad (sequence of widths, in unit sizes), or null on error * * Notes: * (1) This first computes the histogram of black and white bar widths, * binned in appropriate units. There should be well-defined * peaks, each corresponding to a specific width. The sequence * of barcode widths (namely, the integers from the set {1,2,3,4}) * is returned. * (2) The optional returned histograms are binned in width units * that are inversely proportional to @binfract. For example, * if @binfract = 0.25, there are 4.0 bins in the distance of * the width of the narrowest bar. */ NUMA * numaQuantizeCrossingsByWidth(NUMA *nas, l_float32 binfract, NUMA **pnaehist, NUMA **pnaohist, l_int32 debugflag) { l_int32 i, n, ned, nod, iw, width; l_float32 val, minsize, maxsize, factor; GPLOT *gplot; NUMA *naedist, *naodist, *naehist, *naohist, *naecent, *naocent; NUMA *naerange, *naorange, *naelut, *naolut, *nad; PROCNAME("numaQuantizeCrossingsByWidth"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); if (n < 2) return (NUMA *)ERROR_PTR("n < 2", procName, NULL); if (binfract <= 0.0) return (NUMA *)ERROR_PTR("binfract <= 0.0", procName, NULL); /* Get even and odd crossing distances */ numaGetCrossingDistances(nas, &naedist, &naodist, &minsize, &maxsize); /* Bin the spans in units of binfract * minsize. These * units are convenient because they scale to make at least * 1/binfract bins in the smallest span (width). We want this * number to be large enough to clearly separate the * widths, but small enough so that the histogram peaks * have very few if any holes (zeroes) within them. */ naehist = numaMakeHistogramClipped(naedist, binfract * minsize, (1.25 / binfract) * maxsize); naohist = numaMakeHistogramClipped(naodist, binfract * minsize, (1.25 / binfract) * maxsize); if (debugflag) { gplot = gplotCreate("junkhistw", GPLOT_X11, "Raw width histogram", "Width", "Number"); gplotAddPlot(gplot, NULL, naehist, GPLOT_LINES, "plot black"); gplotAddPlot(gplot, NULL, naohist, GPLOT_LINES, "plot white"); gplotMakeOutput(gplot); gplotDestroy(&gplot); } /* Compute the peak ranges, still in units of binfract * minsize. */ naerange = numaLocatePeakRanges(naehist, 1.0 / binfract, 1.0 / binfract, 0.0); naorange = numaLocatePeakRanges(naohist, 1.0 / binfract, 1.0 / binfract, 0.0); /* Find the centroid values of each peak */ naecent = numaGetPeakCentroids(naehist, naerange); naocent = numaGetPeakCentroids(naohist, naorange); /* Generate the lookup tables that map from the bar width, in * units of (binfract * minsize), to the integerized barcode * units (1, 2, 3, 4), which are the output integer widths * between transitions. */ naelut = numaGetPeakWidthLUT(naerange, naecent); naolut = numaGetPeakWidthLUT(naorange, naocent); /* Get the widths. Because the LUT accepts our funny units, * we first must convert the pixel widths to these units, * which is what 'factor' does. */ nad = numaCreate(0); ned = numaGetCount(naedist); nod = numaGetCount(naodist); if (nod != ned - 1) L_WARNING("ned != nod + 1\n", procName); factor = 1.0 / (binfract * minsize); /* for converting units */ for (i = 0; i < ned - 1; i++) { numaGetFValue(naedist, i, &val); width = (l_int32)(factor * val); numaGetIValue(naelut, width, &iw); numaAddNumber(nad, iw); /* fprintf(stderr, "even: val = %7.3f, width = %d, iw = %d\n", val, width, iw); */ numaGetFValue(naodist, i, &val); width = (l_int32)(factor * val); numaGetIValue(naolut, width, &iw); numaAddNumber(nad, iw); /* fprintf(stderr, "odd: val = %7.3f, width = %d, iw = %d\n", val, width, iw); */ } numaGetFValue(naedist, ned - 1, &val); width = (l_int32)(factor * val); numaGetIValue(naelut, width, &iw); numaAddNumber(nad, iw); if (debugflag) { fprintf(stderr, " ---- Black bar widths (pixels) ------ \n"); numaWriteStream(stderr, naedist); } if (debugflag) { fprintf(stderr, " ---- Histogram of black bar widths ------ \n"); numaWriteStream(stderr, naehist); } if (debugflag) { fprintf(stderr, " ---- Peak ranges in black bar histogram bins ------ \n"); numaWriteStream(stderr, naerange); } if (debugflag) { fprintf(stderr, " ---- Peak black bar centroid width values ------ \n"); numaWriteStream(stderr, naecent); } if (debugflag) { fprintf(stderr, " ---- Black bar lookup table ------ \n"); numaWriteStream(stderr, naelut); } if (debugflag) { fprintf(stderr, " ---- White bar widths (pixels) ------ \n"); numaWriteStream(stderr, naodist); } if (debugflag) { fprintf(stderr, " ---- Histogram of white bar widths ------ \n"); numaWriteStream(stderr, naohist); } if (debugflag) { fprintf(stderr, " ---- Peak ranges in white bar histogram bins ------ \n"); numaWriteStream(stderr, naorange); } if (debugflag) { fprintf(stderr, " ---- Peak white bar centroid width values ------ \n"); numaWriteStream(stderr, naocent); } if (debugflag) { fprintf(stderr, " ---- White bar lookup table ------ \n"); numaWriteStream(stderr, naolut); } numaDestroy(&naedist); numaDestroy(&naodist); numaDestroy(&naerange); numaDestroy(&naorange); numaDestroy(&naecent); numaDestroy(&naocent); numaDestroy(&naelut); numaDestroy(&naolut); if (pnaehist) *pnaehist = naehist; else numaDestroy(&naehist); if (pnaohist) *pnaohist = naohist; else numaDestroy(&naohist); return nad; } /*! * numaGetCrossingDistances() * * Input: nas (numa of crossing locations) * &naedist ( even distances between crossings) * &naodist ( odd distances between crossings) * &mindist ( min distance between crossings) * &maxdist ( max distance between crossings) * Return: 0 if OK, 1 on error */ static l_int32 numaGetCrossingDistances(NUMA *nas, NUMA **pnaedist, NUMA **pnaodist, l_float32 *pmindist, l_float32 *pmaxdist) { l_int32 i, n; l_float32 val, newval, mindist, maxdist, dist; NUMA *naedist, *naodist; PROCNAME("numaGetCrossingDistances"); if (pnaedist) *pnaedist = NULL; if (pnaodist) *pnaodist = NULL; if (pmindist) *pmindist = 0.0; if (pmaxdist) *pmaxdist = 0.0; if (!nas) return ERROR_INT("nas not defined", procName, 1); if ((n = numaGetCount(nas)) < 2) return ERROR_INT("n < 2", procName, 1); /* Get numas of distances between crossings. Separate these * into even (e.g., black) and odd (e.g., white) spans. * For barcodes, the black spans are 0, 2, etc. These * distances are in pixel units. */ naedist = numaCreate(n / 2 + 1); naodist = numaCreate(n / 2); numaGetFValue(nas, 0, &val); for (i = 1; i < n; i++) { numaGetFValue(nas, i, &newval); if (i % 2) numaAddNumber(naedist, newval - val); else numaAddNumber(naodist, newval - val); val = newval; } /* The mindist and maxdist of the spans are in pixel units. */ numaGetMin(naedist, &mindist, NULL); numaGetMin(naodist, &dist, NULL); mindist = L_MIN(dist, mindist); numaGetMax(naedist, &maxdist, NULL); numaGetMax(naodist, &dist, NULL); maxdist = L_MAX(dist, maxdist); L_INFO("mindist = %7.3f, maxdist = %7.3f\n", procName, mindist, maxdist); if (pnaedist) *pnaedist = naedist; else numaDestroy(&naedist); if (pnaodist) *pnaodist = naodist; else numaDestroy(&naodist); if (pmindist) *pmindist = mindist; if (pmaxdist) *pmaxdist = maxdist; return 0; } /*! * numaLocatePeakRanges() * * Input: nas (numa of histogram of crossing widths) * minfirst (min location of center of first peak) * minsep (min separation between peak range centers) * maxmin (max allowed value for min histo value between peaks) * Return: nad (ranges for each peak found, in pairs), or null on error * * Notes: * (1) Units of @minsep are the index into nas. * This puts useful constraints on peak-finding. * (2) If maxmin == 0.0, the value of nas[i] must go to 0.0 (or less) * between peaks. * (3) All calculations are done in units of the index into nas. * The resulting ranges are therefore integers. * (4) The output nad gives pairs of range values for successive peaks. * Any location [i] for which maxmin = nas[i] = 0.0 will NOT be * included in a peak range. This works fine for histograms where * if nas[i] == 0.0, it means that there are no samples at [i]. * (5) For barcodes, when this is used on a histogram of barcode * widths, use maxmin = 0.0. This requires that there is at * least one histogram bin corresponding to a width value between * adjacent peak ranges that is unpopulated, making the separation * of the histogram peaks unambiguous. */ static NUMA * numaLocatePeakRanges(NUMA *nas, l_float32 minfirst, l_float32 minsep, l_float32 maxmin) { l_int32 i, n, inpeak, left; l_float32 center, prevcenter, val; NUMA *nad; PROCNAME("numaLocatePeakRanges"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); nad = numaCreate(0); inpeak = FALSE; prevcenter = minfirst - minsep - 1.0; for (i = 0; i < n; i++) { numaGetFValue(nas, i, &val); if (inpeak == FALSE && val > maxmin) { inpeak = TRUE; left = i; } else if (inpeak == TRUE && val <= maxmin) { /* end peak */ center = (left + i - 1.0) / 2.0; if (center - prevcenter >= minsep) { /* save new peak */ inpeak = FALSE; numaAddNumber(nad, left); numaAddNumber(nad, i - 1); prevcenter = center; } else { /* attach to previous peak; revise the right edge */ numaSetValue(nad, numaGetCount(nad) - 1, i - 1); } } } if (inpeak == TRUE) { /* save the last peak */ numaAddNumber(nad, left); numaAddNumber(nad, n - 1); } return nad; } /*! * numaGetPeakCentroids() * * Input: nahist (numa of histogram of crossing widths) * narange (numa of ranges of x-values for the peaks in @nahist) * Return: nad (centroids for each peak found; max of 4, corresponding * to 4 different barcode line widths), or null on error */ static NUMA * numaGetPeakCentroids(NUMA *nahist, NUMA *narange) { l_int32 i, j, nh, nr, low, high; l_float32 cent, sum, val; NUMA *nad; PROCNAME("numaGetPeakCentroids"); if (!nahist) return (NUMA *)ERROR_PTR("nahist not defined", procName, NULL); if (!narange) return (NUMA *)ERROR_PTR("narange not defined", procName, NULL); nh = numaGetCount(nahist); nr = numaGetCount(narange) / 2; nad = numaCreate(4); for (i = 0; i < nr; i++) { numaGetIValue(narange, 2 * i, &low); numaGetIValue(narange, 2 * i + 1, &high); cent = 0.0; sum = 0.0; for (j = low; j <= high; j++) { numaGetFValue(nahist, j, &val); cent += j * val; sum += val; } numaAddNumber(nad, cent / sum); } return nad; } /*! * numaGetPeakWidthLUT() * * Input: narange (numa of x-val ranges for the histogram width peaks) * nacent (numa of centroids of each peak -- up to 4) * Return: nalut (lookup table from the width of a bar to one of the four * integerized barcode units), or null on error * * Notes: * (1) This generates the lookup table that maps from a sequence of widths * (in some units) to the integerized barcode units (1, 2, 3, 4), * which are the output integer widths between transitions. * (2) The smallest width can be lost in float roundoff. To avoid * losing it, we expand the peak range of the smallest width. */ static NUMA * numaGetPeakWidthLUT(NUMA *narange, NUMA *nacent) { l_int32 i, j, nc, low, high, imax; l_int32 assign[4]; l_float32 *warray; l_float32 max, rat21, rat32, rat42; NUMA *nalut; PROCNAME("numaGetPeakWidthLUT"); if (!narange) return (NUMA *)ERROR_PTR("narange not defined", procName, NULL); if (!nacent) return (NUMA *)ERROR_PTR("nacent not defined", procName, NULL); nc = numaGetCount(nacent); /* half the size of narange */ if (nc < 1 || nc > 4) return (NUMA *)ERROR_PTR("nc must be 1, 2, 3, or 4", procName, NULL); /* Check the peak centroids for consistency with bar widths. * The third peak can correspond to a width of either 3 or 4. * Use ratios 3/2 and 4/2 instead of 3/1 and 4/1 because the * former are more stable and closer to the expected ratio. */ if (nc > 1) { warray = numaGetFArray(nacent, L_NOCOPY); if (warray[0] == 0) return (NUMA *)ERROR_PTR("first peak has width 0.0", procName, NULL); rat21 = warray[1] / warray[0]; if (rat21 < 1.5 || rat21 > 2.6) L_WARNING("width ratio 2/1 = %f\n", procName, rat21); if (nc > 2) { rat32 = warray[2] / warray[1]; if (rat32 < 1.3 || rat32 > 2.25) L_WARNING("width ratio 3/2 = %f\n", procName, rat32); } if (nc == 4) { rat42 = warray[3] / warray[1]; if (rat42 < 1.7 || rat42 > 2.3) L_WARNING("width ratio 4/2 = %f\n", procName, rat42); } } /* Set width assignments. * The only possible ambiguity is with nc = 3 */ for (i = 0; i < 4; i++) assign[i] = i + 1; if (nc == 3) { if (rat32 > 1.75) assign[2] = 4; } /* Put widths into the LUT */ numaGetMax(narange, &max, NULL); imax = (l_int32)max; nalut = numaCreate(imax + 1); numaSetCount(nalut, imax + 1); /* fill the array with zeroes */ for (i = 0; i < nc; i++) { numaGetIValue(narange, 2 * i, &low); if (i == 0) low--; /* catch smallest width */ numaGetIValue(narange, 2 * i + 1, &high); for (j = low; j <= high; j++) numaSetValue(nalut, j, assign[i]); } return nalut; } /*! * numaQuantizeCrossingsByWindow() * * Input: nas (numa of crossing locations) * ratio (of max window size over min window size in search; * typ. 2.0) * &width ( best window width) * &firstloc ( center of window for first xing) * &nac ( array of window crossings (0, 1, 2)) * debugflag (1 to generate various plots of intermediate results) * Return: nad (sequence of widths, in unit sizes), or null on error * * Notes: * (1) The minimum size of the window is set by the minimum * distance between zero crossings. * (2) The optional return signal @nac is a sequence of 0s, 1s, * and perhaps a few 2s, giving the number of crossings in each window. * On the occasion where there is a '2', it is interpreted as * ending two runs: the previous one and another one that has length 1. */ NUMA * numaQuantizeCrossingsByWindow(NUMA *nas, l_float32 ratio, l_float32 *pwidth, l_float32 *pfirstloc, NUMA **pnac, l_int32 debugflag) { l_int32 i, nw, started, count, trans; l_float32 minsize, minwidth, minshift, xfirst; NUMA *nac, *nad; PROCNAME("numaQuantizeCrossingsByWindow"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (numaGetCount(nas) < 2) return (NUMA *)ERROR_PTR("nas size < 2", procName, NULL); /* Get the minsize, which is needed for the search for * the window width (ultimately found as 'minwidth') */ numaGetCrossingDistances(nas, NULL, NULL, &minsize, NULL); /* Compute the width and shift increments; start at minsize * and go up to ratio * minsize */ numaEvalBestWidthAndShift(nas, 100, 10, minsize, ratio * minsize, &minwidth, &minshift, NULL); /* Refine width and shift calculation */ numaEvalBestWidthAndShift(nas, 100, 10, 0.98 * minwidth, 1.02 * minwidth, &minwidth, &minshift, NULL); L_INFO("best width = %7.3f, best shift = %7.3f\n", procName, minwidth, minshift); /* Get the crossing array (0,1,2) for the best window width and shift */ numaEvalSyncError(nas, 0, 0, minwidth, minshift, NULL, &nac); if (pwidth) *pwidth = minwidth; if (pfirstloc) { numaGetFValue(nas, 0, &xfirst); *pfirstloc = xfirst + minshift; } /* Get the array of bar widths, starting with a black bar */ nad = numaCreate(0); nw = numaGetCount(nac); /* number of window measurements */ started = FALSE; count = 0; /* unnecessary init */ for (i = 0; i < nw; i++) { numaGetIValue(nac, i, &trans); if (trans > 2) L_WARNING("trans = %d > 2 !!!\n", procName, trans); if (started) { if (trans > 1) { /* i.e., when trans == 2 */ numaAddNumber(nad, count); trans--; count = 1; } if (trans == 1) { numaAddNumber(nad, count); count = 1; } else { count++; } } if (!started && trans) { started = TRUE; if (trans == 2) /* a whole bar in this window */ numaAddNumber(nad, 1); count = 1; } } if (pnac) *pnac = nac; else numaDestroy(&nac); return nad; } /*! * numaEvalBestWidthAndShift() * * Input: nas (numa of crossing locations) * nwidth (number of widths to consider) * nshift (number of shifts to consider for each width) * minwidth (smallest width to consider) * maxwidth (largest width to consider) * &bestwidth ( best size of window) * &bestshift ( best shift for the window) * &bestscore ( average squared error of dist * of crossing signal from the center of the window) * Return: 0 if OK, 1 on error * * Notes: * (1) This does a linear sweep of widths, evaluating at @nshift * shifts for each width, finding the (width, shift) pair that * gives the minimum score. */ static l_int32 numaEvalBestWidthAndShift(NUMA *nas, l_int32 nwidth, l_int32 nshift, l_float32 minwidth, l_float32 maxwidth, l_float32 *pbestwidth, l_float32 *pbestshift, l_float32 *pbestscore) { l_int32 i, j; l_float32 delwidth, delshift, width, shift, score; l_float32 bestwidth, bestshift, bestscore; PROCNAME("numaEvalBestWidthAndShift"); if (!nas) return ERROR_INT("nas not defined", procName, 1); if (!pbestwidth || !pbestshift) return ERROR_INT("&bestwidth and &bestshift not defined", procName, 1); bestscore = 1.0; delwidth = (maxwidth - minwidth) / (nwidth - 1.0); for (i = 0; i < nwidth; i++) { width = minwidth + delwidth * i; delshift = width / (l_float32)(nshift); for (j = 0; j < nshift; j++) { shift = -0.5 * (width - delshift) + j * delshift; numaEvalSyncError(nas, 0, 0, width, shift, &score, NULL); if (score < bestscore) { bestscore = score; bestwidth = width; bestshift = shift; #if DEBUG_FREQUENCY fprintf(stderr, "width = %7.3f, shift = %7.3f, score = %7.3f\n", width, shift, score); #endif /* DEBUG_FREQUENCY */ } } } *pbestwidth = bestwidth; *pbestshift = bestshift; if (pbestscore) *pbestscore = bestscore; return 0; } /*! * numaEvalSyncError() * * Input: nas (numa of crossing locations) * ifirst (first crossing to use) * ilast (last crossing to use; use 0 for all crossings) * width (size of window) * shift (of center of window w/rt first crossing) * &score ( average squared error of dist * of crossing signal from the center of the window) * &nad ( numa of 1s and 0s for crossings) * Return: 0 if OK, 1 on error * * Notes: * (1) The score is computed only on the part of the signal from the * @ifirst to @ilast crossings. Use 0 for both of these to * use all the crossings. The score is normalized for * the number of crossings and with half-width of the window. * (2) The optional return @nad is a sequence of 0s and 1s, where a '1' * indicates a crossing in the window. */ static l_int32 numaEvalSyncError(NUMA *nas, l_int32 ifirst, l_int32 ilast, l_float32 width, l_float32 shift, l_float32 *pscore, NUMA **pnad) { l_int32 i, n, nc, nw, ival; l_int32 iw; /* cell in which transition occurs */ l_float32 score, xfirst, xlast, xleft, xc, xwc; NUMA *nad; PROCNAME("numaEvalSyncError"); if (!nas) return ERROR_INT("nas not defined", procName, 1); if ((n = numaGetCount(nas)) < 2) return ERROR_INT("nas size < 2", procName, 1); if (ifirst < 0) ifirst = 0; if (ilast <= 0) ilast = n - 1; if (ifirst >= ilast) return ERROR_INT("ifirst not < ilast", procName, 1); nc = ilast - ifirst + 1; /* Set up an array corresponding to the (shifted) windows, * and fill in the crossings. */ score = 0.0; numaGetFValue(nas, ifirst, &xfirst); numaGetFValue(nas, ilast, &xlast); nw = (l_int32) ((xlast - xfirst + 2.0 * width) / width); nad = numaCreate(nw); numaSetCount(nad, nw); /* init to all 0.0 */ xleft = xfirst - width / 2.0 + shift; /* left edge of first window */ for (i = ifirst; i <= ilast; i++) { numaGetFValue(nas, i, &xc); iw = (l_int32)((xc - xleft) / width); xwc = xleft + (iw + 0.5) * width; /* center of cell iw */ score += (xwc - xc) * (xwc - xc); numaGetIValue(nad, iw, &ival); numaSetValue(nad, iw, ival + 1); } if (pscore) *pscore = 4.0 * score / (width * width * (l_float32)nc); if (pnad) *pnad = nad; else numaDestroy(&nad); return 0; } leptonica-1.70/src/leptwin.h0000644000175000017500000000347711707061131014137 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifdef _WIN32 #ifndef LEPTONICA_LEPTWIN_H #define LEPTONICA_LEPTWIN_H #include "allheaders.h" #include #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ LEPT_DLL extern HBITMAP pixGetWindowsHBITMAP( PIX *pixs ); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* LEPTONICA_LEPTWIN_H */ #endif /* _WIN32 */ leptonica-1.70/src/stack.h0000644000175000017500000000576611707052573013577 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_STACK_H #define LEPTONICA_STACK_H /* * stack.h * * Expandable pointer stack for arbitrary void* data. * * The L_Stack is an array of void * ptrs, onto which arbitrary * objects can be stored. At any time, the number of * stored objects is stack->n. The object at the bottom * of the stack is at array[0]; the object at the top of * the stack is at array[n-1]. New objects are added * to the top of the stack, at the first available location, * which is array[n]. Objects are removed from the top of the * stack. When an attempt is made to remove an object from an * empty stack, the result is null. When the stack becomes * filled, so that n = nalloc, the size is doubled. * * The auxiliary stack can be used to store and remove * objects for re-use. It must be created by a separate * call to pstackCreate(). [Just imagine the chaos if * pstackCreate() created the auxiliary stack!] * pstackDestroy() checks for the auxiliary stack and removes it. */ /* Note that array[n] is the first null ptr in the array */ struct L_Stack { l_int32 nalloc; /* size of ptr array */ l_int32 n; /* number of stored elements */ void **array; /* ptr array */ struct L_Stack *auxstack; /* auxiliary stack */ }; typedef struct L_Stack L_STACK; #endif /* LEPTONICA_STACK_H */ leptonica-1.70/src/queue.h0000644000175000017500000000645111707052573013606 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_QUEUE_H #define LEPTONICA_QUEUE_H /* * queue.h * * Expandable pointer queue for arbitrary void* data. * * The L_Queue is a fifo that implements a queue of void* pointers. * It can be used to hold a queue of any type of struct. * * Internally, it maintains two counters: * nhead: location of head (in ptrs) from the beginning * of the array. * nelem: number of ptr elements stored in the queue. * * The element at the head of the queue, which is the next to * be removed, is array[nhead]. The location at the tail of the * queue to which the next element will be added is * array[nhead + nelem]. * * As items are added to the queue, nelem increases. * As items are removed, nhead increases and nelem decreases. * Any time the tail reaches the end of the allocated array, * all the pointers are shifted to the left, so that the head * is at the beginning of the array. * If the array becomes more than 3/4 full, it doubles in size. * * The auxiliary stack can be used in a wrapper for re-using * items popped from the queue. It is not made by default. * * For further implementation details, see queue.c. */ struct L_Queue { l_int32 nalloc; /* size of allocated ptr array */ l_int32 nhead; /* location of head (in ptrs) from the */ /* beginning of the array */ l_int32 nelem; /* number of elements stored in the queue */ void **array; /* ptr array */ struct L_Stack *stack; /* auxiliary stack */ }; typedef struct L_Queue L_QUEUE; #endif /* LEPTONICA_QUEUE_H */ leptonica-1.70/src/viewfiles.c0000664000175000017500000002157712266271725014465 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * viewfiles.c * * Generate smaller images for viewing and write html * l_int32 pixHtmlViewer() */ #include #include "allheaders.h" #ifdef _WIN32 #include /* for CreateDirectory() */ #endif static const l_int32 L_BUF_SIZE = 512; static const l_int32 DEFAULT_THUMB_WIDTH = 120; static const l_int32 DEFAULT_VIEW_WIDTH = 800; static const l_int32 MIN_THUMB_WIDTH = 50; static const l_int32 MIN_VIEW_WIDTH = 300; /*---------------------------------------------------------------------* * Generate smaller images for viewing and write html * *---------------------------------------------------------------------*/ /*! * pixHtmlViewer() * * Input: dirin: directory of input image files * dirout: directory for output files * rootname: root name for output files * thumbwidth: width of thumb images * (in pixels; use 0 for default) * viewwidth: maximum width of view images (no up-scaling) * (in pixels; use 0 for default) * copyorig: 1 to copy originals to dirout; 0 otherwise * Return: 0 if OK; 1 on error * * Notes: * (1) The thumb and view reduced images are generated, * along with two html files: * .html and -links.html * (2) The thumb and view files are named * _thumb_xxx.jpg * _view_xxx.jpg * With this naming scheme, any number of input directories * of images can be processed into views and thumbs * and placed in the same output directory. */ l_int32 pixHtmlViewer(const char *dirin, const char *dirout, const char *rootname, l_int32 thumbwidth, l_int32 viewwidth, l_int32 copyorig) { char *fname, *fullname, *outname; char *mainname, *linkname, *linknameshort; char *viewfile, *thumbfile; char *shtml, *slink; char charbuf[L_BUF_SIZE]; char htmlstring[] = ""; char framestring[] = ""; l_int32 i, nfiles, index, w, nimages, ret; l_float32 factor; PIX *pix, *pixthumb, *pixview; SARRAY *safiles, *sathumbs, *saviews, *sahtml, *salink; PROCNAME("pixHtmlViewer"); if (!dirin) return ERROR_INT("dirin not defined", procName, 1); if (!dirout) return ERROR_INT("dirout not defined", procName, 1); if (!rootname) return ERROR_INT("rootname not defined", procName, 1); if (thumbwidth == 0) thumbwidth = DEFAULT_THUMB_WIDTH; if (thumbwidth < MIN_THUMB_WIDTH) { L_WARNING("thumbwidth too small; using min value\n", procName); thumbwidth = MIN_THUMB_WIDTH; } if (viewwidth == 0) viewwidth = DEFAULT_VIEW_WIDTH; if (viewwidth < MIN_VIEW_WIDTH) { L_WARNING("viewwidth too small; using min value\n", procName); viewwidth = MIN_VIEW_WIDTH; } /* Make the output directory if it doesn't already exist */ #ifndef _WIN32 sprintf(charbuf, "mkdir -p %s", dirout); ret = system(charbuf); #else ret = CreateDirectory(dirout, NULL) ? 0 : 1; #endif /* !_WIN32 */ if (ret) { L_ERROR("output directory %s not made\n", procName, dirout); return 1; } /* Capture the filenames in the input directory */ if ((safiles = getFilenamesInDirectory(dirin)) == NULL) return ERROR_INT("safiles not made", procName, 1); /* Generate output text file names */ sprintf(charbuf, "%s/%s.html", dirout, rootname); mainname = stringNew(charbuf); sprintf(charbuf, "%s/%s-links.html", dirout, rootname); linkname = stringNew(charbuf); linknameshort = stringJoin(rootname, "-links.html"); if ((sathumbs = sarrayCreate(0)) == NULL) return ERROR_INT("sathumbs not made", procName, 1); if ((saviews = sarrayCreate(0)) == NULL) return ERROR_INT("saviews not made", procName, 1); /* Generate the thumbs and views */ nfiles = sarrayGetCount(safiles); index = 0; for (i = 0; i < nfiles; i++) { fname = sarrayGetString(safiles, i, L_NOCOPY); fullname = genPathname(dirin, fname); fprintf(stderr, "name: %s\n", fullname); if ((pix = pixRead(fullname)) == NULL) { fprintf(stderr, "file %s not a readable image\n", fullname); FREE(fullname); continue; } FREE(fullname); if (copyorig) { outname = genPathname(dirout, fname); pixWrite(outname, pix, IFF_JFIF_JPEG); FREE(outname); } /* Make and store the thumb */ w = pixGetWidth(pix); factor = (l_float32)thumbwidth / (l_float32)w; if ((pixthumb = pixScale(pix, factor, factor)) == NULL) return ERROR_INT("pixthumb not made", procName, 1); sprintf(charbuf, "%s_thumb_%03d.jpg", rootname, index); sarrayAddString(sathumbs, charbuf, L_COPY); outname = genPathname(dirout, charbuf); pixWrite(outname, pixthumb, IFF_JFIF_JPEG); FREE(outname); pixDestroy(&pixthumb); /* Make and store the view */ factor = (l_float32)viewwidth / (l_float32)w; if (factor >= 1.0) { pixview = pixClone(pix); /* no upscaling */ } else { if ((pixview = pixScale(pix, factor, factor)) == NULL) return ERROR_INT("pixview not made", procName, 1); } sprintf(charbuf, "%s_view_%03d.jpg", rootname, index); sarrayAddString(saviews, charbuf, L_COPY); outname = genPathname(dirout, charbuf); pixWrite(outname, pixview, IFF_JFIF_JPEG); FREE(outname); pixDestroy(&pixview); pixDestroy(&pix); index++; } /* Generate the main html file */ if ((sahtml = sarrayCreate(0)) == NULL) return ERROR_INT("sahtml not made", procName, 1); sarrayAddString(sahtml, htmlstring, L_COPY); sprintf(charbuf, "", thumbwidth + 30); sarrayAddString(sahtml, charbuf, L_COPY); sprintf(charbuf, "", linknameshort); sarrayAddString(sahtml, charbuf, L_COPY); sprintf(charbuf, "", sarrayGetString(saviews, 0, L_NOCOPY)); sarrayAddString(sahtml, charbuf, L_COPY); sarrayAddString(sahtml, framestring, L_COPY); shtml = sarrayToString(sahtml, 1); l_binaryWrite(mainname, "w", shtml, strlen(shtml)); FREE(shtml); FREE(mainname); /* Generate the link html file */ nimages = sarrayGetCount(saviews); fprintf(stderr, "num. images = %d\n", nimages); if ((salink = sarrayCreate(0)) == NULL) return ERROR_INT("salink not made", procName, 1); for (i = 0; i < nimages; i++) { viewfile = sarrayGetString(saviews, i, L_NOCOPY); thumbfile = sarrayGetString(sathumbs, i, L_NOCOPY); sprintf(charbuf, "", viewfile, thumbfile); sarrayAddString(salink, charbuf, L_COPY); } slink = sarrayToString(salink, 1); l_binaryWrite(linkname, "w", slink, strlen(slink)); FREE(slink); FREE(linkname); FREE(linknameshort); sarrayDestroy(&safiles); sarrayDestroy(&sathumbs); sarrayDestroy(&saviews); sarrayDestroy(&sahtml); sarrayDestroy(&salink); return 0; } leptonica-1.70/src/flipdetect.c0000644000175000017500000011550611707052573014602 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * flipdetect.c * * Page orientation detection (pure rotation by 90 degree increments): * l_int32 pixOrientDetect() * l_int32 makeOrientDecision() * l_int32 pixUpDownDetect() * l_int32 pixUpDownDetectGeneral() * l_int32 pixOrientDetectDwa() * l_int32 pixUpDownDetectDwa() * l_int32 pixUpDownDetectGeneralDwa() * * Page mirror detection (flip 180 degrees about line in plane of image): * l_int32 pixMirrorDetect() * l_int32 pixMirrorDetectDwa() * * Static debug helper * void pixDebugFlipDetect() * * =================================================================== * * Page transformation detection: * * Once a page is deskewed, there are 8 possible states that it * can be in, shown symbolically below. Suppose state 0 is correct. * * 0: correct 1 2 3 * +------+ +------+ +------+ +------+ * | **** | | * | | **** | | * | * | * | | * | | * | | * | * | * | | **** | | * | | **** | * +------+ +------+ +------+ +------+ * * 4 5 6 7 * +-----+ +-----+ +-----+ +-----+ * | *** | | * | | *** | | * | * | * | | * | | * | | * | * | * | | * | | * | | * | * | * | | *** | | * | | *** | * +-----+ +-----+ +-----+ +-----+ * * Each of the other seven can be derived from state 0 by applying some * combination of a 90 degree clockwise rotation, a flip about * a horizontal line, and a flip about a vertical line, * all abbreviated as: * R = Rotation (about a line perpendicular to the image) * H = Horizontal flip (about a vertical line in the plane of the image) * V = Vertical flip (about a horizontal line in the plane of the image) * * We get these transformations: * RHV * 000 -> 0 * 001 -> 1 * 010 -> 2 * 011 -> 3 * 100 -> 4 * 101 -> 5 * 110 -> 6 * 111 -> 7 * * Note that in four of these, the sum of H and V is 1 (odd). * For these four, we have a change in parity (handedness) of * the image, and the transformation cannot be performed by * rotation about a vertical line out of the page. Under * rotation R, the set of 8 transformations decomposes into * two subgroups linking {0, 3, 4, 7} and {1, 2, 5, 6} independently. * * pixOrientDetect*() tests for a pure rotation (0, 90, 180, 270 degrees). * It doesn't change parity. * * pixMirrorDetect*() tests for a horizontal flip about the vertical axis. * It changes parity. * * The landscape/portrait rotation can be detected in two ways: * * (1) Compute the deskew confidence for an image segment, * both as is and rotated 90 degrees (see skew.c). * * (2) Compute the ascender/descender signal for the image, * both as is and rotated 90 degrees (implemented here). * * The ascender/descender signal is useful for determining text * orientation in Roman alphabets because the incidence of letters * with straight-line ascenders (b, d, h, k, l, ) outnumber * those with descenders (, p, q). The letters and * will respond variably to the filter, depending on the type face. * * What about the mirror image situations? These aren't common * unless you're dealing with film, for example. * But you can reliably test if the image has undergone a * parity-changing flip once about some axis in the plane * of the image, using pixMirrorDetect*(). This works ostensibly by * counting the number of characters with ascenders that * stick out to the left and right of the ascender. Characters * that are not mirror flipped are more likely to extend to the * right (b, h, k) than to the left (d). Of course, that is for * text that is rightside-up. So before you apply the mirror * test, it is necessary to insure that the text has the ascenders * going up, and not down or to the left or right. But here's * what *really* happens. It turns out that the pre-filtering before * the hit-miss transform (HMT) is crucial, and surprisingly, when * the pre-filtering is chosen to generate a large signal, the majority * of the signal comes from open regions of common lower-case * letters such as 'e', 'c' and 'f'. * * All operations are given in two implementations whose results are * identical: rasterop morphology and dwa morphology. The dwa * implementations are between 2x and 3x faster. * * The set of operations you actually use depends on your prior knowledge: * * (1) If the page is known to be either rightside-up or upside-down, use * either pixOrientDetect*() with pleftconf = NULL, or * pixUpDownDetect*(). [The '*' refers to either the rasterop * or dwa versions.] * * (2) If any of the four orientations are possible, use pixOrientDetect*(). * * (3) If the text is horizontal and rightside-up, the only remaining * degree of freedom is a left-right mirror flip: use * pixMirrorDetect*(). * * (4) If you have a relatively large amount of numbers on the page, * us the slower pixUpDownDetectGeneral(). * * We summarize the full orientation and mirror flip detection process: * * (1) First determine which of the four 90 degree rotations * causes the text to be rightside-up. This can be done * with either skew confidence or the pixOrientDetect*() * signals. For the latter, see the table for pixOrientDetect(). * * (2) Then, with ascenders pointing up, apply pixMirrorDetect*(). * In the normal situation the confidence confidence will be * large and positive. However, if mirror flipped, the * confidence will be large and negative. */ #include #include "allheaders.h" /* Sels for pixOrientDetect() and pixMirrorDetect() */ static const char *textsel1 = "x oo " "x oOo " "x o " "x " "xxxxxx"; static const char *textsel2 = " oo x" " oOo x" " o x" " x" "xxxxxx"; static const char *textsel3 = "xxxxxx" "x " "x o " "x oOo " "x oo "; static const char *textsel4 = "xxxxxx" " x" " o x" " oOo x" " oo x"; /* Parameters for determining orientation */ static const l_int32 DEFAULT_MIN_UP_DOWN_COUNT = 70; static const l_float32 DEFAULT_MIN_UP_DOWN_CONF = 7.0; static const l_float32 DEFAULT_MIN_UP_DOWN_RATIO = 2.5; /* Parameters for determining mirror flip */ static const l_int32 DEFAULT_MIN_MIRROR_FLIP_COUNT = 100; static const l_float32 DEFAULT_MIN_MIRROR_FLIP_CONF = 5.0; /* Static debug function */ static void pixDebugFlipDetect(const char *filename, PIX *pixs, PIX *pixhm, l_int32 enable); /*----------------------------------------------------------------* * Orientation detection (four 90 degree angles) * * Rasterop implementation * *----------------------------------------------------------------*/ /*! * pixOrientDetect() * * Input: pixs (1 bpp, deskewed, English text, 150 - 300 ppi) * &upconf ( ; may be null) * &leftconf ( ; may be null) * mincount (min number of up + down; use 0 for default) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) See "Measuring document image skew and orientation" * Dan S. Bloomberg, Gary E. Kopec and Lakshmi Dasari * IS&T/SPIE EI'95, Conference 2422: Document Recognition II * pp 302-316, Feb 6-7, 1995, San Jose, CA * (2) upconf is the normalized difference between up ascenders * and down ascenders. The image is analyzed without rotation * for being rightside-up or upside-down. Set &upconf to null * to skip this operation. * (3) leftconf is the normalized difference between up ascenders * and down ascenders in the image after it has been * rotated 90 degrees clockwise. With that rotation, ascenders * projecting to the left in the source image will project up * in the rotated image. We compute this by rotating 90 degrees * clockwise and testing for up and down ascenders. Set * &leftconf to null to skip this operation. * (4) Note that upconf and leftconf are not linear measures of * confidence, e.g., in a range between 0 and 100. They * measure how far you are out on the tail of a (presumably) * normal distribution. For example, a confidence of 10 means * that it is nearly certain that the difference did not * happen at random. However, these values must be interpreted * cautiously, taking into consideration the estimated prior * for a particular orientation or mirror flip. The up-down * signal is very strong if applied to text with ascenders * up and down, and relatively weak for text at 90 degrees, * but even at 90 degrees, the difference can look significant. * For example, suppose the ascenders are oriented horizontally, * but the test is done vertically. Then upconf can * be < -MIN_CONF_FOR_UP_DOWN, suggesting the text may be * upside-down. However, if instead the test were done * horizontally, leftconf will be very much larger * (in absolute value), giving the correct orientation. * (5) If you compute both upconf and leftconf, and there is * sufficient signal, the following table determines the * cw angle necessary to rotate pixs so that the text is * rightside-up: * 0 deg : upconf >> 1, abs(upconf) >> abs(leftconf) * 90 deg : leftconf >> 1, abs(leftconf) >> abs(upconf) * 180 deg : upconf << -1, abs(upconf) >> abs(leftconf) * 270 deg : leftconf << -1, abs(leftconf) >> abs(upconf) * (6) One should probably not interpret the direction unless * there are a sufficient number of counts for both orientations, * in which case neither upconf nor leftconf will be 0.0. * (7) Uses rasterop implementation of HMT. */ l_int32 pixOrientDetect(PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug) { PIX *pixt; PROCNAME("pixOrientDetect"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", procName, 1); if (!pupconf && !pleftconf) return ERROR_INT("nothing to do", procName, 1); if (mincount == 0) mincount = DEFAULT_MIN_UP_DOWN_COUNT; if (pupconf) pixUpDownDetect(pixs, pupconf, mincount, debug); if (pleftconf) { pixt = pixRotate90(pixs, 1); pixUpDownDetect(pixt, pleftconf, mincount, debug); pixDestroy(&pixt); } return 0; } /*! * makeOrientDecision() * * Input: upconf (nonzero) * leftconf (nonzero) * minupconf (minimum value for which a decision can be made) * minratio (minimum conf ratio required for a decision) * &orient ( text orientation enum {0,1,2,3,4}) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) This can be run after pixOrientDetect() * (2) Both upconf and leftconf must be nonzero; otherwise the * orientation cannot be determined. * (3) The abs values of the input confidences are compared to * minupconf. * (4) The abs value of the largest of (upconf/leftconf) and * (leftconf/upconf) is compared with minratio. * (5) Input 0.0 for the default values for minupconf and minratio. * (6) The return value of orient is interpreted thus: * L_TEXT_ORIENT_UNKNOWN: not enough evidence to determine * L_TEXT_ORIENT_UP: text rightside-up * L_TEXT_ORIENT_LEFT: landscape, text up facing left * L_TEXT_ORIENT_DOWN: text upside-down * L_TEXT_ORIENT_RIGHT: landscape, text up facing right */ l_int32 makeOrientDecision(l_float32 upconf, l_float32 leftconf, l_float32 minupconf, l_float32 minratio, l_int32 *porient, l_int32 debug) { l_float32 absupconf, absleftconf; PROCNAME("makeOrientDecision"); if (!porient) return ERROR_INT("&orient not defined", procName, 1); *porient = L_TEXT_ORIENT_UNKNOWN; /* default: no decision */ if (upconf == 0.0 || leftconf == 0.0) return ERROR_INT("not enough conf to get orientation", procName, 1); if (minupconf == 0.0) minupconf = DEFAULT_MIN_UP_DOWN_CONF; if (minratio == 0.0) minratio = DEFAULT_MIN_UP_DOWN_RATIO; absupconf = L_ABS(upconf); absleftconf = L_ABS(leftconf); /* Here are the four possible orientation decisions, based * on satisfaction of two threshold constraints. */ if (upconf > minupconf && absupconf > minratio * absleftconf) *porient = L_TEXT_ORIENT_UP; else if (leftconf > minupconf && absleftconf > minratio * absupconf) *porient = L_TEXT_ORIENT_LEFT; else if (upconf < -minupconf && absupconf > minratio * absleftconf) *porient = L_TEXT_ORIENT_DOWN; else if (leftconf < -minupconf && absleftconf > minratio * absupconf) *porient = L_TEXT_ORIENT_RIGHT; if (debug) { fprintf(stderr, "upconf = %7.3f, leftconf = %7.3f\n", upconf, leftconf); if (*porient == L_TEXT_ORIENT_UNKNOWN) fprintf(stderr, "Confidence is low; no determination is made\n"); else if (*porient == L_TEXT_ORIENT_UP) fprintf(stderr, "Text is rightside-up\n"); else if (*porient == L_TEXT_ORIENT_LEFT) fprintf(stderr, "Text is rotated 90 deg ccw\n"); else if (*porient == L_TEXT_ORIENT_DOWN) fprintf(stderr, "Text is upside-down\n"); else /* *porient == L_TEXT_ORIENT_RIGHT */ fprintf(stderr, "Text is rotated 90 deg cw\n"); } return 0; } /*! * pixUpDownDetect() * * Input: pixs (1 bpp, deskewed, English text, 150 - 300 ppi) * &conf ( confidence that text is rightside-up) * mincount (min number of up + down; use 0 for default) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) Special (typical, slightly faster) case, where the pixels * identified through the HMT (hit-miss transform) are not * clipped by a truncated word mask pixm. See pixOrientDetect() * and pixUpDownDetectGeneral() for details. * (2) The returned confidence is the normalized difference * between the number of detected up and down ascenders, * assuming that the text is either rightside-up or upside-down * and not rotated at a 90 degree angle. */ l_int32 pixUpDownDetect(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug) { return pixUpDownDetectGeneral(pixs, pconf, mincount, 0, debug); } /*! * pixUpDownDetectGeneral() * * Input: pixs (1 bpp, deskewed, English text, 150 - 300 ppi) * &conf ( confidence that text is rightside-up) * mincount (min number of up + down; use 0 for default) * npixels (number of pixels removed from each side of word box) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixOrientDetect() for other details. * (2) @conf is the normalized difference between the number of * detected up and down ascenders, assuming that the text * is either rightside-up or upside-down and not rotated * at a 90 degree angle. * (3) The typical mode of operation is @npixels == 0. * If @npixels > 0, this removes HMT matches at the * beginning and ending of "words." This is useful for * pages that may have mostly digits, because if npixels == 0, * leading "1" and "3" digits can register as having * ascenders or descenders, and "7" digits can match descenders. * Consequently, a page image of only digits may register * as being upside-down. * (4) We want to count the number of instances found using the HMT. * An expensive way to do this would be to count the * number of connected components. A cheap way is to do a rank * reduction cascade that reduces each component to a single * pixel, and results (after two or three 2x reductions) * in one pixel for each of the original components. * After the reduction, you have a much smaller pix over * which to count pixels. We do only 2 reductions, because * this function is designed to work for input pix between * 150 and 300 ppi, and an 8x reduction on a 150 ppi image * is going too far -- components will get merged. */ l_int32 pixUpDownDetectGeneral(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug) { l_int32 countup, countdown, nmax; l_float32 nup, ndown; PIX *pixt0, *pixt1, *pixt2, *pixt3, *pixm; SEL *sel1, *sel2, *sel3, *sel4; PROCNAME("pixUpDownDetectGeneral"); if (!pconf) return ERROR_INT("&conf not defined", procName, 1); *pconf = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (mincount == 0) mincount = DEFAULT_MIN_UP_DOWN_COUNT; if (npixels < 0) npixels = 0; sel1 = selCreateFromString(textsel1, 5, 6, NULL); sel2 = selCreateFromString(textsel2, 5, 6, NULL); sel3 = selCreateFromString(textsel3, 5, 6, NULL); sel4 = selCreateFromString(textsel4, 5, 6, NULL); /* One of many reasonable pre-filtering sequences: (1, 8) and (30, 1). * This closes holes in x-height characters and joins them at * the x-height. There is more noise in the descender detection * from this, but it works fairly well. */ pixt0 = pixMorphCompSequence(pixs, "c1.8 + c30.1", 0); /* Optionally, make a mask of the word bounding boxes, shortening * each of them by a fixed amount at each end. */ pixm = NULL; if (npixels > 0) { l_int32 i, nbox, x, y, w, h; BOX *box; BOXA *boxa; pixt1 = pixMorphSequence(pixt0, "o10.1", 0); boxa = pixConnComp(pixt1, NULL, 8); pixm = pixCreateTemplate(pixt1); pixDestroy(&pixt1); nbox = boxaGetCount(boxa); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); if (w > 2 * npixels) pixRasterop(pixm, x + npixels, y - 6, w - 2 * npixels, h + 13, PIX_SET, NULL, 0, 0); boxDestroy(&box); } boxaDestroy(&boxa); } /* Find the ascenders and optionally filter with pixm. * For an explanation of the procedure used for counting the result * of the HMT, see comments at the beginning of this function. */ pixt1 = pixHMT(NULL, pixt0, sel1); pixt2 = pixHMT(NULL, pixt0, sel2); pixOr(pixt1, pixt1, pixt2); if (pixm) pixAnd(pixt1, pixt1, pixm); pixt3 = pixReduceRankBinaryCascade(pixt1, 1, 1, 0, 0); pixCountPixels(pixt3, &countup, NULL); pixDebugFlipDetect("junkpixup", pixs, pixt1, debug); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* Find the ascenders and optionally filter with pixm. */ pixt1 = pixHMT(NULL, pixt0, sel3); pixt2 = pixHMT(NULL, pixt0, sel4); pixOr(pixt1, pixt1, pixt2); if (pixm) pixAnd(pixt1, pixt1, pixm); pixt3 = pixReduceRankBinaryCascade(pixt1, 1, 1, 0, 0); pixCountPixels(pixt3, &countdown, NULL); pixDebugFlipDetect("junkpixdown", pixs, pixt1, debug); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* Evaluate statistically, generating a confidence that is * related to the probability with a gaussian distribution. */ nup = (l_float32)(countup); ndown = (l_float32)(countdown); nmax = L_MAX(countup, countdown); if (nmax > mincount) *pconf = 2. * ((nup - ndown) / sqrt(nup + ndown)); if (debug) { if (pixm) pixWrite("junkpixm1", pixm, IFF_PNG); fprintf(stderr, "nup = %7.3f, ndown = %7.3f, conf = %7.3f\n", nup, ndown, *pconf); if (*pconf > DEFAULT_MIN_UP_DOWN_CONF) fprintf(stderr, "Text is rightside-up\n"); if (*pconf < -DEFAULT_MIN_UP_DOWN_CONF) fprintf(stderr, "Text is upside-down\n"); } pixDestroy(&pixt0); pixDestroy(&pixm); selDestroy(&sel1); selDestroy(&sel2); selDestroy(&sel3); selDestroy(&sel4); return 0; } /*----------------------------------------------------------------* * Orientation detection (four 90 degree angles) * * DWA implementation * *----------------------------------------------------------------*/ /*! * pixOrientDetectDwa() * * Input: pixs (1 bpp, deskewed, English text) * &upconf ( ; may be null) * &leftconf ( ; may be null) * mincount (min number of up + down; use 0 for default) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) Same interface as for pixOrientDetect(). See notes * there for usage. * (2) Uses auto-gen'd code for the Sels defined at the * top of this file, with some renaming of functions. * The auto-gen'd code is in fliphmtgen.c, and can * be generated by a simple executable; see prog/flipselgen.c. * (3) This runs about 2.5 times faster than the pixOrientDetect(). */ l_int32 pixOrientDetectDwa(PIX *pixs, l_float32 *pupconf, l_float32 *pleftconf, l_int32 mincount, l_int32 debug) { PIX *pixt; PROCNAME("pixOrientDetectDwa"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 1) return ERROR_INT("pixs not 1 bpp", procName, 1); if (!pupconf && !pleftconf) return ERROR_INT("nothing to do", procName, 1); if (mincount == 0) mincount = DEFAULT_MIN_UP_DOWN_COUNT; if (pupconf) pixUpDownDetectDwa(pixs, pupconf, mincount, debug); if (pleftconf) { pixt = pixRotate90(pixs, 1); pixUpDownDetectDwa(pixt, pleftconf, mincount, debug); pixDestroy(&pixt); } return 0; } /*! * pixUpDownDetectDwa() * * Input: pixs (1 bpp, deskewed, English text, 150 - 300 ppi) * &conf ( confidence that text is rightside-up) * mincount (min number of up + down; use 0 for default) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) Faster (DWA) version of pixUpDownDetect(). * (2) This is a special case (but typical and slightly faster) of * pixUpDownDetectGeneralDwa(), where the pixels identified * through the HMT (hit-miss transform) are not clipped by * a truncated word mask pixm. See pixUpDownDetectGeneral() * for usage and other details. * (3) The returned confidence is the normalized difference * between the number of detected up and down ascenders, * assuming that the text is either rightside-up or upside-down * and not rotated at a 90 degree angle. */ l_int32 pixUpDownDetectDwa(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug) { return pixUpDownDetectGeneralDwa(pixs, pconf, mincount, 0, debug); } /*! * pixUpDownDetectGeneralDwa() * * Input: pixs (1 bpp, deskewed, English text) * &conf ( confidence that text is rightside-up) * mincount (min number of up + down; use 0 for default) * npixels (number of pixels removed from each side of word box) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) See the notes in pixUpDownDetectGeneral() for usage. */ l_int32 pixUpDownDetectGeneralDwa(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 npixels, l_int32 debug) { char flipsel1[] = "flipsel1"; char flipsel2[] = "flipsel2"; char flipsel3[] = "flipsel3"; char flipsel4[] = "flipsel4"; l_int32 countup, countdown, nmax; l_float32 nup, ndown; PIX *pixt, *pixt0, *pixt1, *pixt2, *pixt3, *pixm; PROCNAME("pixUpDownDetectGeneralDwa"); if (!pconf) return ERROR_INT("&conf not defined", procName, 1); *pconf = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (mincount == 0) mincount = DEFAULT_MIN_UP_DOWN_COUNT; if (npixels < 0) npixels = 0; /* One of many reasonable pre-filtering sequences: (1, 8) and (30, 1). * This closes holes in x-height characters and joins them at * the x-height. There is more noise in the descender detection * from this, but it works fairly well. */ pixt = pixMorphSequenceDwa(pixs, "c1.8 + c30.1", 0); /* Be sure to add the border before the flip DWA operations! */ pixt0 = pixAddBorderGeneral(pixt, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, 0); pixDestroy(&pixt); /* Optionally, make a mask of the word bounding boxes, shortening * each of them by a fixed amount at each end. */ pixm = NULL; if (npixels > 0) { l_int32 i, nbox, x, y, w, h; BOX *box; BOXA *boxa; pixt1 = pixMorphSequenceDwa(pixt0, "o10.1", 0); boxa = pixConnComp(pixt1, NULL, 8); pixm = pixCreateTemplate(pixt1); pixDestroy(&pixt1); nbox = boxaGetCount(boxa); for (i = 0; i < nbox; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, &x, &y, &w, &h); if (w > 2 * npixels) pixRasterop(pixm, x + npixels, y - 6, w - 2 * npixels, h + 13, PIX_SET, NULL, 0, 0); boxDestroy(&box); } boxaDestroy(&boxa); } /* Find the ascenders and optionally filter with pixm. * For an explanation of the procedure used for counting the result * of the HMT, see comments in pixUpDownDetectGeneral(). */ pixt1 = pixFlipFHMTGen(NULL, pixt0, flipsel1); pixt2 = pixFlipFHMTGen(NULL, pixt0, flipsel2); pixOr(pixt1, pixt1, pixt2); if (pixm) pixAnd(pixt1, pixt1, pixm); pixt3 = pixReduceRankBinaryCascade(pixt1, 1, 1, 0, 0); pixCountPixels(pixt3, &countup, NULL); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* Find the ascenders and optionally filter with pixm. */ pixt1 = pixFlipFHMTGen(NULL, pixt0, flipsel3); pixt2 = pixFlipFHMTGen(NULL, pixt0, flipsel4); pixOr(pixt1, pixt1, pixt2); if (pixm) pixAnd(pixt1, pixt1, pixm); pixt3 = pixReduceRankBinaryCascade(pixt1, 1, 1, 0, 0); pixCountPixels(pixt3, &countdown, NULL); pixDestroy(&pixt1); pixDestroy(&pixt2); pixDestroy(&pixt3); /* Evaluate statistically, generating a confidence that is * related to the probability with a gaussian distribution. */ nup = (l_float32)(countup); ndown = (l_float32)(countdown); nmax = L_MAX(countup, countdown); if (nmax > mincount) *pconf = 2. * ((nup - ndown) / sqrt(nup + ndown)); if (debug) { if (pixm) pixWrite("junkpixm2", pixm, IFF_PNG); fprintf(stderr, "nup = %7.3f, ndown = %7.3f, conf = %7.3f\n", nup, ndown, *pconf); if (*pconf > DEFAULT_MIN_UP_DOWN_CONF) fprintf(stderr, "Text is rightside-up\n"); if (*pconf < -DEFAULT_MIN_UP_DOWN_CONF) fprintf(stderr, "Text is upside-down\n"); } pixDestroy(&pixt0); pixDestroy(&pixm); return 0; } /*----------------------------------------------------------------* * Left-right mirror detection * * Rasterop implementation * *----------------------------------------------------------------*/ /*! * pixMirrorDetect() * * Input: pixs (1 bpp, deskewed, English text) * &conf ( confidence that text is not LR mirror reversed) * mincount (min number of left + right; use 0 for default) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) For this test, it is necessary that the text is horizontally * oriented, with ascenders going up. * (2) conf is the normalized difference between the number of * right and left facing characters with ascenders. * Left-facing are {d}; right-facing are {b, h, k}. * At least that was the expectation. In practice, we can * really just say that it is the normalized difference in * hits using two specific hit-miss filters, textsel1 and textsel2, * after the image has been suitably pre-filtered so that * these filters are effective. See (4) for what's really happening. * (3) A large positive conf value indicates normal text, whereas * a large negative conf value means the page is mirror reversed. * (4) The implementation is a bit tricky. The general idea is * to fill the x-height part of characters, but not the space * between them, before doing the HMT. This is done by * finding pixels added using two different operations -- a * horizontal close and a vertical dilation -- and adding * the intersection of these sets to the original. It turns * out that the original intuition about the signal was largely * in error: much of the signal for right-facing characters * comes from the lower part of common x-height characters, like * the e and c, that remain open after these operations. * So it's important that the operations to close the x-height * parts of the characters are purposely weakened sufficiently * to allow these characters to remain open. The wonders * of morphology! */ l_int32 pixMirrorDetect(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug) { l_int32 count1, count2, nmax; l_float32 nleft, nright; PIX *pixt0, *pixt1, *pixt2, *pixt3; SEL *sel1, *sel2; PROCNAME("pixMirrorDetect"); if (!pconf) return ERROR_INT("&conf not defined", procName, 1); *pconf = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (mincount == 0) mincount = DEFAULT_MIN_MIRROR_FLIP_COUNT; sel1 = selCreateFromString(textsel1, 5, 6, NULL); sel2 = selCreateFromString(textsel2, 5, 6, NULL); /* Fill x-height characters but not space between them, sort of. */ pixt3 = pixMorphCompSequence(pixs, "d1.30", 0); pixXor(pixt3, pixt3, pixs); pixt0 = pixMorphCompSequence(pixs, "c15.1", 0); pixXor(pixt0, pixt0, pixs); pixAnd(pixt0, pixt0, pixt3); pixOr(pixt0, pixt0, pixs); pixDestroy(&pixt3); /* pixDisplayWrite(pixt0, 1); */ /* Filter the right-facing characters. */ pixt1 = pixHMT(NULL, pixt0, sel1); pixt3 = pixReduceRankBinaryCascade(pixt1, 1, 1, 0, 0); pixCountPixels(pixt3, &count1, NULL); pixDebugFlipDetect("junkpixright", pixs, pixt1, debug); pixDestroy(&pixt1); pixDestroy(&pixt3); /* Filter the left-facing characters. */ pixt2 = pixHMT(NULL, pixt0, sel2); pixt3 = pixReduceRankBinaryCascade(pixt2, 1, 1, 0, 0); pixCountPixels(pixt3, &count2, NULL); pixDebugFlipDetect("junkpixleft", pixs, pixt2, debug); pixDestroy(&pixt2); pixDestroy(&pixt3); nright = (l_float32)count1; nleft = (l_float32)count2; nmax = L_MAX(count1, count2); pixDestroy(&pixt0); selDestroy(&sel1); selDestroy(&sel2); if (nmax > mincount) *pconf = 2. * ((nright - nleft) / sqrt(nright + nleft)); if (debug) { fprintf(stderr, "nright = %f, nleft = %f\n", nright, nleft); if (*pconf > DEFAULT_MIN_MIRROR_FLIP_CONF) fprintf(stderr, "Text is not mirror reversed\n"); if (*pconf < -DEFAULT_MIN_MIRROR_FLIP_CONF) fprintf(stderr, "Text is mirror reversed\n"); } return 0; } /*----------------------------------------------------------------* * Left-right mirror detection * * DWA implementation * *----------------------------------------------------------------*/ /*! * pixMirrorDetectDwa() * * Input: pixs (1 bpp, deskewed, English text) * &conf ( confidence that text is not LR mirror reversed) * mincount (min number of left + right; use 0 for default) * debug (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) We assume the text is horizontally oriented, with * ascenders going up. * (2) See notes in pixMirrorDetect(). */ l_int32 pixMirrorDetectDwa(PIX *pixs, l_float32 *pconf, l_int32 mincount, l_int32 debug) { char flipsel1[] = "flipsel1"; char flipsel2[] = "flipsel2"; l_int32 count1, count2, nmax; l_float32 nleft, nright; PIX *pixt0, *pixt1, *pixt2, *pixt3; PROCNAME("pixMirrorDetectDwa"); if (!pconf) return ERROR_INT("&conf not defined", procName, 1); *pconf = 0.0; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (mincount == 0) mincount = DEFAULT_MIN_MIRROR_FLIP_COUNT; /* Fill x-height characters but not space between them, sort of. */ pixt3 = pixMorphSequenceDwa(pixs, "d1.30", 0); pixXor(pixt3, pixt3, pixs); pixt0 = pixMorphSequenceDwa(pixs, "c15.1", 0); pixXor(pixt0, pixt0, pixs); pixAnd(pixt0, pixt0, pixt3); pixOr(pixt3, pixt0, pixs); pixDestroy(&pixt0); pixt0 = pixAddBorderGeneral(pixt3, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, ADDED_BORDER, 0); pixDestroy(&pixt3); /* Filter the right-facing characters. */ pixt1 = pixFlipFHMTGen(NULL, pixt0, flipsel1); pixt3 = pixReduceRankBinaryCascade(pixt1, 1, 1, 0, 0); pixCountPixels(pixt3, &count1, NULL); pixDestroy(&pixt1); pixDestroy(&pixt3); /* Filter the left-facing characters. */ pixt2 = pixFlipFHMTGen(NULL, pixt0, flipsel2); pixt3 = pixReduceRankBinaryCascade(pixt2, 1, 1, 0, 0); pixCountPixels(pixt3, &count2, NULL); pixDestroy(&pixt2); pixDestroy(&pixt3); pixDestroy(&pixt0); nright = (l_float32)count1; nleft = (l_float32)count2; nmax = L_MAX(count1, count2); if (nmax > mincount) *pconf = 2. * ((nright - nleft) / sqrt(nright + nleft)); if (debug) { fprintf(stderr, "nright = %f, nleft = %f\n", nright, nleft); if (*pconf > DEFAULT_MIN_MIRROR_FLIP_CONF) fprintf(stderr, "Text is not mirror reversed\n"); if (*pconf < -DEFAULT_MIN_MIRROR_FLIP_CONF) fprintf(stderr, "Text is mirror reversed\n"); } return 0; } /*----------------------------------------------------------------* * Static debug helper * *----------------------------------------------------------------*/ /* * pixDebugFlipDetect() * * Input: filename (for output debug file) * pixs (input to pix*Detect) * pixhm (hit-miss result from ascenders or descenders) * enable (1 to enable this function; 0 to disable) * Return: void */ static void pixDebugFlipDetect(const char *filename, PIX *pixs, PIX *pixhm, l_int32 enable) { PIX *pixt, *pixthm; if (!enable) return; /* Display with red dot at counted locations */ pixt = pixConvert1To4Cmap(pixs); pixthm = pixMorphSequence(pixhm, "d5.5", 0); pixSetMaskedCmap(pixt, pixthm, 0, 0, 255, 0, 0); pixWrite(filename, pixt, IFF_PNG); pixDestroy(&pixthm); pixDestroy(&pixt); return; } leptonica-1.70/src/bilateral.h0000644000175000017500000001466412141740542014417 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_BILATERAL_H #define LEPTONICA_BILATERAL_H /* * Contains the following struct * struct L_Bilateral * * * For a tutorial introduction to bilateral filters, which apply a * gaussian blur to smooth parts of the image while preserving edges, see * http://people.csail.mit.edu/sparis/bf_course/slides/03_definition_bf.pdf * * We give an implementation of a bilateral filtering algorithm given in: * "Real-Time O(1) Bilateral Filtering," by Yang, Tan and Ahuja, CVPR 2009 * which is at: * http://vision.ai.uiuc.edu/~qyang6/publications/cvpr-09-qingxiong-yang.pdf * This is based on an earlier algorithm by Sylvain Paris and Frédo Durand: * http://people.csail.mit.edu/sparis/publi/2006/eccv/ * Paris_06_Fast_Approximation.pdf * * The kernel of the filter is a product of a spatial gaussian and a * monotonically decreasing function of the difference in intensity * between the source pixel and the neighboring pixel. The intensity * part of the filter gives higher influence for pixels with intensities * that are near to the source pixel, and the spatial part of the * filter gives higher weight to pixels that are near the source pixel. * This combination smooths in relatively uniform regions, while * maintaining edges. * * The advantage of the appoach of Yang et al is that it is separable, * so the computation time is linear in the gaussian filter size. * Furthermore, it is possible to do much of the computation as a reduced * scale, which gives a good approximation to the full resolution version * but greatly speeds it up. * * The bilateral filtered value at x is: * * sum[y in N(x)]: spatial(|y - x|) * range(|I(x) - I(y)|) * I(y) * I'(x) = -------------------------------------------------------------- * sum[y in N(x)]: spatial(|y - x|) * range(|I(x) - I(y)|) * * where I() is the input image, I'() is the filtered image, N(x) is the * set of pixels around x in the filter support, and spatial() and range() * are gaussian functions: * spatial(x) = exp(-x^2 / (2 * s_s^2)) * range(x) = exp(-x^2 / (2 * s_r^2)) * and s_s and s_r and the standard deviations of the two gaussians. * * Yang et al use a separable approximation to this, by defining a set * of related but separable functions J(k,x), that we call Principal * Bilateral Components (PBC): * * sum[y in N(x)]: spatial(|y - x|) * range(|k - I(y)|) * I(y) * J(k,x) = ----------------------------------------------------------- * sum[y in N(x)]: spatial(|y - x|) * range(|k - I(y)|) * * which are computed quickly for a set of n values k[p], p = 0 ... n-1. * Then each output pixel is found using a linear interpolation: * * I'(x) = (1 - q) * J(k[p],x) + q * J(k[p+1],x) * * where J(k[p],x) and J(k[p+1],x) are PBC for which * k[p] <= I(x) and k[p+1] >= I(x), and * q = (I(x) - k[p]) / (k[p+1] - k[p]). * * We can also subsample I(x), create subsampled versions of J(k,x), * which are then interpolated between for I'(x). * * We generate 'pixsc', by optionally downscaling the input image * (using area mapping by the factor 'reduction'), and then adding * a mirrored border to avoid boundary cases. This is then used * to compute 'ncomps' PBCs. * * The 'spatial_stdev' is also downscaled by 'reduction'. The size * of the 'spatial' array is 4 * (reduced 'spatial_stdev') + 1. * The size of the 'range' array is 256. */ /*------------------------------------------------------------------------* * Bilateral filter * *------------------------------------------------------------------------*/ struct L_Bilateral { struct Pix *pixs; /* clone of source pix */ struct Pix *pixsc; /* downscaled pix with mirrored border */ l_int32 reduction; /* 1, 2 or 4x for intermediates */ l_float32 spatial_stdev; /* stdev of spatial gaussian */ l_float32 range_stdev; /* stdev of range gaussian */ l_float32 *spatial; /* 1D gaussian spatial kernel */ l_float32 *range; /* one-sided gaussian range kernel */ l_int32 minval; /* min value in 8 bpp pix */ l_int32 maxval; /* max value in 8 bpp pix */ l_int32 ncomps; /* number of intermediate results */ l_int32 *nc; /* set of k values (size ncomps) */ l_int32 *kindex; /* mapping from intensity to lower k */ l_float32 *kfract; /* mapping from intensity to fract k */ struct Pixa *pixac; /* intermediate result images (PBC) */ l_uint32 ***lineset; /* lineptrs for pixac */ }; typedef struct L_Bilateral L_BILATERAL; #endif /* LEPTONICA_BILATERAL_H */ leptonica-1.70/src/libversions.c0000644000175000017500000001227712267242444015017 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * libversions.c * * Image library version number * char *getImagelibVersions() */ #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ #if HAVE_LIBGIF #include "gif_lib.h" #endif #if HAVE_LIBJPEG /* jpeglib.h includes jconfig.h, which makes the error of setting * #define HAVE_STDLIB_H * which conflicts with config_auto.h (where it is set to 1) and results * for some gcc compiler versions in a warning. The conflict is harmless * but we suppress it by undefining the variable. */ #undef HAVE_STDLIB_H #include "jpeglib.h" #include "jerror.h" #endif #if HAVE_LIBPNG #include "png.h" #endif #if HAVE_LIBTIFF #include "tiffio.h" #endif #if HAVE_LIBZ #include "zlib.h" #endif #if HAVE_LIBWEBP #include "webp/encode.h" #endif #define stringJoinInPlace(s1, s2) \ { tempStrP = stringJoin((s1),(s2)); FREE(s1); (s1) = tempStrP; } /*---------------------------------------------------------------------* * Image Library Version number * *---------------------------------------------------------------------*/ /*! * getImagelibVersions() * * Return: string of version numbers (e.g., * libgif 5.0.3 * libjpeg 8b * libpng 1.4.3 * libtiff 3.9.5 * zlib 1.2.5 * webp 0.3.0 * * Notes: * (1) The caller has responsibility to free the memory. */ char * getImagelibVersions() { char buf[128]; l_int32 first = TRUE; #if HAVE_LIBJPEG struct jpeg_compress_struct cinfo; struct jpeg_error_mgr err; char buffer[JMSG_LENGTH_MAX]; #endif char *tempStrP; char *versionNumP; char *nextTokenP; char *versionStrP = stringNew(""); #if HAVE_LIBGIF first = FALSE; stringJoinInPlace(versionStrP, "libgif "); #ifdef GIFLIB_MAJOR snprintf(buf, sizeof(buf), "%d.%d.%d", GIFLIB_MAJOR, GIFLIB_MINOR, GIFLIB_RELEASE); #else stringCopy(buf, "4.1.6(?)", sizeof(buf)); #endif stringJoinInPlace(versionStrP, buf); #endif #if HAVE_LIBJPEG cinfo.err = jpeg_std_error(&err); err.msg_code = JMSG_VERSION; (*err.format_message) ((j_common_ptr ) &cinfo, buffer); if (!first) stringJoinInPlace(versionStrP, " : "); first = FALSE; stringJoinInPlace(versionStrP, "libjpeg "); versionNumP = strtokSafe(buffer, " ", &nextTokenP); stringJoinInPlace(versionStrP, versionNumP); FREE(versionNumP); #endif #if HAVE_LIBPNG if (!first) stringJoinInPlace(versionStrP, " : "); first = FALSE; stringJoinInPlace(versionStrP, "libpng "); stringJoinInPlace(versionStrP, png_get_libpng_ver(NULL)); #endif #if HAVE_LIBTIFF if (!first) stringJoinInPlace(versionStrP, " : "); first = FALSE; stringJoinInPlace(versionStrP, "libtiff "); versionNumP = strtokSafe((char *)TIFFGetVersion(), " \n", &nextTokenP); FREE(versionNumP); versionNumP = strtokSafe(NULL, " \n", &nextTokenP); FREE(versionNumP); versionNumP = strtokSafe(NULL, " \n", &nextTokenP); stringJoinInPlace(versionStrP, versionNumP); FREE(versionNumP); #endif #if HAVE_LIBZ if (!first) stringJoinInPlace(versionStrP, " : "); first = FALSE; stringJoinInPlace(versionStrP, "zlib "); stringJoinInPlace(versionStrP, zlibVersion()); #endif #if HAVE_LIBWEBP { l_int32 val; char buf[32]; if (!first) stringJoinInPlace(versionStrP, " : "); first = FALSE; stringJoinInPlace(versionStrP, "webp "); val = WebPGetEncoderVersion(); snprintf(buf, sizeof(buf), "%d.%d.%d", val >> 16, (val >> 8) & 0xff, val & 0xff); stringJoinInPlace(versionStrP, buf); } #endif stringJoinInPlace(versionStrP, "\n"); return versionStrP; } leptonica-1.70/src/sel2.c0000644000175000017500000005101112265645134013313 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * sel2.c * * Contains definitions of simple structuring elements * * SELA *selaAddBasic() * Linear horizontal and vertical * Square * Diagonals * * SELA *selaAddHitMiss() * Isolated foreground pixel * Horizontal and vertical edges * Slanted edge * Corners * * SELA *selaAddDwaLinear() * SELA *selaAddDwaCombs() * SELA *selaAddCrossJunctions() * SELA *selaAddTJunctions() */ #include #include "allheaders.h" static const l_int32 L_BUF_SIZE = 512; /* Linear brick sel sizes, including all those that are required * for decomposable sels up to size 63. */ static const l_int32 num_linear = 25; static const l_int32 basic_linear[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 20, 21, 25, 30, 31, 35, 40, 41, 45, 50, 51}; /*! * selaAddBasic() * * Input: sela () * Return: sela with additional sels, or null on error * * Notes: * (1) Adds the following sels: * - all linear (horiz, vert) brick sels that are * necessary for decomposable sels up to size 63 * - square brick sels up to size 10 * - 4 diagonal sels */ SELA * selaAddBasic(SELA *sela) { char name[L_BUF_SIZE]; l_int32 i, size; SEL *sel; PROCNAME("selaAddBasic"); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); } /*--------------------------------------------------------------* * Linear horizontal and vertical sels * *--------------------------------------------------------------*/ for (i = 0; i < num_linear; i++) { size = basic_linear[i]; sel = selCreateBrick(1, size, 0, size / 2, 1); snprintf(name, L_BUF_SIZE, "sel_%dh", size); selaAddSel(sela, sel, name, 0); } for (i = 0; i < num_linear; i++) { size = basic_linear[i]; sel = selCreateBrick(size, 1, size / 2, 0, 1); snprintf(name, L_BUF_SIZE, "sel_%dv", size); selaAddSel(sela, sel, name, 0); } /*-----------------------------------------------------------* * 2-d Bricks * *-----------------------------------------------------------*/ for (i = 2; i <= 5; i++) { sel = selCreateBrick(i, i, i / 2, i / 2, 1); snprintf(name, L_BUF_SIZE, "sel_%d", i); selaAddSel(sela, sel, name, 0); } /*-----------------------------------------------------------* * Diagonals * *-----------------------------------------------------------*/ /* 0c 1 1 0 */ sel = selCreateBrick(2, 2, 0, 0, 1); selSetElement(sel, 0, 0, 0); selSetElement(sel, 1, 1, 0); selaAddSel(sela, sel, "sel_2dp", 0); /* 1c 0 0 1 */ sel = selCreateBrick(2, 2, 0, 0, 1); selSetElement(sel, 0, 1, 0); selSetElement(sel, 1, 0, 0); selaAddSel(sela, sel, "sel_2dm", 0); /* Diagonal, slope +, size 5 */ sel = selCreate(5, 5, "sel_5dp"); sel->cy = 2; sel->cx = 2; selSetElement(sel, 0, 4, 1); selSetElement(sel, 1, 3, 1); selSetElement(sel, 2, 2, 1); selSetElement(sel, 3, 1, 1); selSetElement(sel, 4, 0, 1); selaAddSel(sela, sel, "sel_5dp", 0); /* Diagonal, slope -, size 5 */ sel = selCreate(5, 5, "sel_5dm"); sel->cy = 2; sel->cx = 2; selSetElement(sel, 0, 0, 1); selSetElement(sel, 1, 1, 1); selSetElement(sel, 2, 2, 1); selSetElement(sel, 3, 3, 1); selSetElement(sel, 4, 4, 1); selaAddSel(sela, sel, "sel_5dm", 0); return sela; } /*! * selaAddHitMiss() * * Input: sela () * Return: sela with additional sels, or null on error */ SELA * selaAddHitMiss(SELA *sela) { SEL *sel; PROCNAME("selaAddHitMiss"); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); } #if 0 /* use just for testing */ sel = selCreateBrick(3, 3, 1, 1, 2); selaAddSel(sela, sel, "sel_bad", 0); #endif /*--------------------------------------------------------------* * Isolated foreground pixel * *--------------------------------------------------------------*/ sel = selCreateBrick(3, 3, 1, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_HIT); selaAddSel(sela, sel, "sel_3hm", 0); /*--------------------------------------------------------------* * Horizontal and vertical edges * *--------------------------------------------------------------*/ sel = selCreateBrick(2, 3, 0, 1, SEL_HIT); selSetElement(sel, 1, 0, SEL_MISS); selSetElement(sel, 1, 1, SEL_MISS); selSetElement(sel, 1, 2, SEL_MISS); selaAddSel(sela, sel, "sel_3de", 0); sel = selCreateBrick(2, 3, 1, 1, SEL_HIT); selSetElement(sel, 0, 0, SEL_MISS); selSetElement(sel, 0, 1, SEL_MISS); selSetElement(sel, 0, 2, SEL_MISS); selaAddSel(sela, sel, "sel_3ue", 0); sel = selCreateBrick(3, 2, 1, 0, SEL_HIT); selSetElement(sel, 0, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_MISS); selSetElement(sel, 2, 1, SEL_MISS); selaAddSel(sela, sel, "sel_3re", 0); sel = selCreateBrick(3, 2, 1, 1, SEL_HIT); selSetElement(sel, 0, 0, SEL_MISS); selSetElement(sel, 1, 0, SEL_MISS); selSetElement(sel, 2, 0, SEL_MISS); selaAddSel(sela, sel, "sel_3le", 0); /*--------------------------------------------------------------* * Slanted edge * *--------------------------------------------------------------*/ sel = selCreateBrick(13, 6, 6, 2, SEL_DONT_CARE); selSetElement(sel, 0, 3, SEL_MISS); selSetElement(sel, 0, 5, SEL_HIT); selSetElement(sel, 4, 2, SEL_MISS); selSetElement(sel, 4, 4, SEL_HIT); selSetElement(sel, 8, 1, SEL_MISS); selSetElement(sel, 8, 3, SEL_HIT); selSetElement(sel, 12, 0, SEL_MISS); selSetElement(sel, 12, 2, SEL_HIT); selaAddSel(sela, sel, "sel_sl1", 0); /*--------------------------------------------------------------* * Corners * * This allows for up to 3 missing edge pixels at the corner * *--------------------------------------------------------------*/ sel = selCreateBrick(4, 4, 1, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_DONT_CARE); selSetElement(sel, 1, 2, SEL_DONT_CARE); selSetElement(sel, 2, 1, SEL_DONT_CARE); selSetElement(sel, 1, 3, SEL_HIT); selSetElement(sel, 2, 2, SEL_HIT); selSetElement(sel, 2, 3, SEL_HIT); selSetElement(sel, 3, 1, SEL_HIT); selSetElement(sel, 3, 2, SEL_HIT); selSetElement(sel, 3, 3, SEL_HIT); selaAddSel(sela, sel, "sel_ulc", 0); sel = selCreateBrick(4, 4, 1, 2, SEL_MISS); selSetElement(sel, 1, 1, SEL_DONT_CARE); selSetElement(sel, 1, 2, SEL_DONT_CARE); selSetElement(sel, 2, 2, SEL_DONT_CARE); selSetElement(sel, 1, 0, SEL_HIT); selSetElement(sel, 2, 0, SEL_HIT); selSetElement(sel, 2, 1, SEL_HIT); selSetElement(sel, 3, 0, SEL_HIT); selSetElement(sel, 3, 1, SEL_HIT); selSetElement(sel, 3, 2, SEL_HIT); selaAddSel(sela, sel, "sel_urc", 0); sel = selCreateBrick(4, 4, 2, 1, SEL_MISS); selSetElement(sel, 1, 1, SEL_DONT_CARE); selSetElement(sel, 2, 1, SEL_DONT_CARE); selSetElement(sel, 2, 2, SEL_DONT_CARE); selSetElement(sel, 0, 1, SEL_HIT); selSetElement(sel, 0, 2, SEL_HIT); selSetElement(sel, 0, 3, SEL_HIT); selSetElement(sel, 1, 2, SEL_HIT); selSetElement(sel, 1, 3, SEL_HIT); selSetElement(sel, 2, 3, SEL_HIT); selaAddSel(sela, sel, "sel_llc", 0); sel = selCreateBrick(4, 4, 2, 2, SEL_MISS); selSetElement(sel, 1, 2, SEL_DONT_CARE); selSetElement(sel, 2, 1, SEL_DONT_CARE); selSetElement(sel, 2, 2, SEL_DONT_CARE); selSetElement(sel, 0, 0, SEL_HIT); selSetElement(sel, 0, 1, SEL_HIT); selSetElement(sel, 0, 2, SEL_HIT); selSetElement(sel, 1, 0, SEL_HIT); selSetElement(sel, 1, 1, SEL_HIT); selSetElement(sel, 2, 0, SEL_HIT); selaAddSel(sela, sel, "sel_lrc", 0); return sela; } /*! * selaAddDwaLinear() * * Input: sela () * Return: sela with additional sels, or null on error * * Notes: * (1) Adds all linear (horizontal, vertical) sels from * 2 to 63 pixels in length, which are the sizes over * which dwa code can be generated. */ SELA * selaAddDwaLinear(SELA *sela) { char name[L_BUF_SIZE]; l_int32 i; SEL *sel; PROCNAME("selaAddDwaLinear"); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); } for (i = 2; i < 64; i++) { sel = selCreateBrick(1, i, 0, i / 2, 1); snprintf(name, L_BUF_SIZE, "sel_%dh", i); selaAddSel(sela, sel, name, 0); } for (i = 2; i < 64; i++) { sel = selCreateBrick(i, 1, i / 2, 0, 1); snprintf(name, L_BUF_SIZE, "sel_%dv", i); selaAddSel(sela, sel, name, 0); } return sela; } /*! * selaAddDwaCombs() * * Input: sela () * Return: sela with additional sels, or null on error * * Notes: * (1) Adds all comb (horizontal, vertical) Sels that are * used in composite linear morphological operations * up to 63 pixels in length, which are the sizes over * which dwa code can be generated. */ SELA * selaAddDwaCombs(SELA *sela) { char name[L_BUF_SIZE]; l_int32 i, f1, f2, prevsize, size; SEL *selh, *selv; PROCNAME("selaAddDwaCombs"); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); } prevsize = 0; for (i = 4; i < 64; i++) { selectComposableSizes(i, &f1, &f2); size = f1 * f2; if (size == prevsize) continue; selectComposableSels(i, L_HORIZ, NULL, &selh); selectComposableSels(i, L_VERT, NULL, &selv); snprintf(name, L_BUF_SIZE, "sel_comb_%dh", size); selaAddSel(sela, selh, name, 0); snprintf(name, L_BUF_SIZE, "sel_comb_%dv", size); selaAddSel(sela, selv, name, 0); prevsize = size; } return sela; } /*! * selaAddCrossJunctions() * * Input: sela () * hlsize (length of each line of hits from origin) * mdist (distance of misses from the origin) * norient (number of orientations; max of 8) * debugflag (1 for debug output) * Return: sela with additional sels, or null on error * * Notes: * (1) Adds hitmiss Sels for the intersection of two lines. * If the lines are very thin, they must be nearly orthogonal * to register. * (2) The number of Sels generated is equal to @norient. * (3) If @norient == 2, this generates 2 Sels of crosses, each with * two perpendicular lines of hits. One Sel has horizontal and * vertical hits; the other has hits along lines at +-45 degrees. * Likewise, if @norient == 3, this generates 3 Sels of crosses * oriented at 30 degrees with each other. * (4) It is suggested that @hlsize be chosen at least 1 greater * than @mdist. Try values of (@hlsize, @mdist) such as * (6,5), (7,6), (8,7), (9,7), etc. */ SELA * selaAddCrossJunctions(SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag) { char name[L_BUF_SIZE]; l_int32 i, j, w, xc, yc; l_float64 pi, halfpi, radincr, radang; l_float64 angle; PIX *pixc, *pixm, *pixt; PIXA *pixa; PTA *pta1, *pta2, *pta3, *pta4; SEL *sel; PROCNAME("selaAddCrossJunctions"); if (hlsize <= 0) return (SELA *)ERROR_PTR("hlsize not > 0", procName, NULL); if (norient < 1 || norient > 8) return (SELA *)ERROR_PTR("norient not in [1, ... 8]", procName, NULL); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); } pi = 3.1415926535; halfpi = 3.1415926535 / 2.0; radincr = halfpi / (l_float64)norient; w = (l_int32)(2.2 * (L_MAX(hlsize, mdist) + 0.5)); if (w % 2 == 0) w++; xc = w / 2; yc = w / 2; pixa = pixaCreate(norient); for (i = 0; i < norient; i++) { /* Set the don't cares */ pixc = pixCreate(w, w, 32); pixSetAll(pixc); /* Add the green lines of hits */ pixm = pixCreate(w, w, 1); radang = (l_float32)i * radincr; pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang); pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + halfpi); pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi); pta4 = generatePtaLineFromPt(xc, yc, hlsize + 1, radang + pi + halfpi); ptaJoin(pta1, pta2, 0, -1); ptaJoin(pta1, pta3, 0, -1); ptaJoin(pta1, pta4, 0, -1); pixRenderPta(pixm, pta1, L_SET_PIXELS); pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); ptaDestroy(&pta4); /* Add red misses between the lines */ for (j = 0; j < 4; j++) { angle = radang + (j - 0.5) * halfpi; pixSetPixel(pixc, xc + (l_int32)(mdist * cos(angle)), yc + (l_int32)(mdist * sin(angle)), 0xff000000); } /* Add dark green for origin */ pixSetPixel(pixc, xc, yc, 0x00550000); /* Generate the sel */ sel = selCreateFromColorPix(pixc, NULL); sprintf(name, "sel_cross_%d", i); selaAddSel(sela, sel, name, 0); if (debugflag) { pixt = pixScaleBySampling(pixc, 10.0, 10.0); pixaAddPix(pixa, pixt, L_INSERT); } pixDestroy(&pixm); pixDestroy(&pixc); } if (debugflag) { l_int32 w; pixaGetPixDimensions(pixa, 0, &w, NULL, NULL); pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 1, 0, 10, 2); pixWriteTempfile("/tmp", "xsel1.png", pixt, IFF_PNG, 0); pixDisplay(pixt, 0, 100); pixDestroy(&pixt); pixt = selaDisplayInPix(sela, 15, 2, 20, 1); pixWriteTempfile("/tmp", "xsel2.png", pixt, IFF_PNG, 0); pixDisplay(pixt, 500, 100); pixDestroy(&pixt); selaWriteStream(stderr, sela); } pixaDestroy(&pixa); return sela; } /*! * selaAddTJunctions() * * Input: sela () * hlsize (length of each line of hits from origin) * mdist (distance of misses from the origin) * norient (number of orientations; max of 8) * debugflag (1 for debug output) * Return: sela with additional sels, or null on error * * Notes: * (1) Adds hitmiss Sels for the T-junction of two lines. * If the lines are very thin, they must be nearly orthogonal * to register. * (2) The number of Sels generated is 4 * @norient. * (3) It is suggested that @hlsize be chosen at least 1 greater * than @mdist. Try values of (@hlsize, @mdist) such as * (6,5), (7,6), (8,7), (9,7), etc. */ SELA * selaAddTJunctions(SELA *sela, l_float32 hlsize, l_float32 mdist, l_int32 norient, l_int32 debugflag) { char name[L_BUF_SIZE]; l_int32 i, j, k, w, xc, yc; l_float64 pi, halfpi, radincr, jang, radang; l_float64 angle[3], dist[3]; PIX *pixc, *pixm, *pixt; PIXA *pixa; PTA *pta1, *pta2, *pta3; SEL *sel; PROCNAME("selaAddTJunctions"); if (hlsize <= 2) return (SELA *)ERROR_PTR("hlsizel not > 1", procName, NULL); if (norient < 1 || norient > 8) return (SELA *)ERROR_PTR("norient not in [1, ... 8]", procName, NULL); if (!sela) { if ((sela = selaCreate(0)) == NULL) return (SELA *)ERROR_PTR("sela not made", procName, NULL); } pi = 3.1415926535; halfpi = 3.1415926535 / 2.0; radincr = halfpi / (l_float32)norient; w = (l_int32)(2.4 * (L_MAX(hlsize, mdist) + 0.5)); if (w % 2 == 0) w++; xc = w / 2; yc = w / 2; pixa = pixaCreate(4 * norient); for (i = 0; i < norient; i++) { for (j = 0; j < 4; j++) { /* 4 orthogonal orientations */ jang = (l_float32)j * halfpi; /* Set the don't cares */ pixc = pixCreate(w, w, 32); pixSetAll(pixc); /* Add the green lines of hits */ pixm = pixCreate(w, w, 1); radang = (l_float32)i * radincr; pta1 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang); pta2 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang + halfpi); pta3 = generatePtaLineFromPt(xc, yc, hlsize + 1, jang + radang + pi); ptaJoin(pta1, pta2, 0, -1); ptaJoin(pta1, pta3, 0, -1); pixRenderPta(pixm, pta1, L_SET_PIXELS); pixPaintThroughMask(pixc, pixm, 0, 0, 0x00ff0000); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&pta3); /* Add red misses between the lines */ angle[0] = radang + jang - halfpi; angle[1] = radang + jang + 0.5 * halfpi; angle[2] = radang + jang + 1.5 * halfpi; dist[0] = 0.8 * mdist; dist[1] = dist[2] = mdist; for (k = 0; k < 3; k++) { pixSetPixel(pixc, xc + (l_int32)(dist[k] * cos(angle[k])), yc + (l_int32)(dist[k] * sin(angle[k])), 0xff000000); } /* Add dark green for origin */ pixSetPixel(pixc, xc, yc, 0x00550000); /* Generate the sel */ sel = selCreateFromColorPix(pixc, NULL); sprintf(name, "sel_cross_%d", 4 * i + j); selaAddSel(sela, sel, name, 0); if (debugflag) { pixt = pixScaleBySampling(pixc, 10.0, 10.0); pixaAddPix(pixa, pixt, L_INSERT); } pixDestroy(&pixm); pixDestroy(&pixc); } } if (debugflag) { l_int32 w; pixaGetPixDimensions(pixa, 0, &w, NULL, NULL); pixt = pixaDisplayTiledAndScaled(pixa, 32, w, 4, 0, 10, 2); pixWriteTempfile("/tmp", "tsel1.png", pixt, IFF_PNG, 0); pixDisplay(pixt, 0, 100); pixDestroy(&pixt); pixt = selaDisplayInPix(sela, 15, 2, 20, 4); pixWriteTempfile("/tmp", "tsel2.png", pixt, IFF_PNG, 0); pixDisplay(pixt, 500, 100); pixDestroy(&pixt); selaWriteStream(stderr, sela); } pixaDestroy(&pixa); return sela; } leptonica-1.70/src/stack.c0000644000175000017500000001753312244231422013552 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * stack.c * * Generic stack * * The lstack is an array of void * ptrs, onto which * objects can be stored. At any time, the number of * stored objects is lstack->n. The object at the bottom * of the lstack is at array[0]; the object at the top of * the lstack is at array[n-1]. New objects are added * to the top of the lstack; i.e., the first available * location, which is at array[n]. The lstack is expanded * by doubling, when needed. Objects are removed * from the top of the lstack. When an attempt is made * to remove an object from an empty lstack, the result is null. * * Create/Destroy * L_STACK *lstackCreate() * void lstackDestroy() * * Accessors * l_int32 lstackAdd() * void *lstackRemove() * static l_int32 lstackExtendArray() * l_int32 lstackGetCount() * * Text description * l_int32 lstackPrint() */ #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* Static function */ static l_int32 lstackExtendArray(L_STACK *lstack); /*---------------------------------------------------------------------* * Create/Destroy * *---------------------------------------------------------------------*/ /*! * lstackCreate() * * Input: nalloc (initial ptr array size; use 0 for default) * Return: lstack, or null on error */ L_STACK * lstackCreate(l_int32 nalloc) { L_STACK *lstack; PROCNAME("lstackCreate"); if (nalloc <= 0) nalloc = INITIAL_PTR_ARRAYSIZE; if ((lstack = (L_STACK *)CALLOC(1, sizeof(L_STACK))) == NULL) return (L_STACK *)ERROR_PTR("lstack not made", procName, NULL); if ((lstack->array = (void **)CALLOC(nalloc, sizeof(void *))) == NULL) return (L_STACK *)ERROR_PTR("lstack array not made", procName, NULL); lstack->nalloc = nalloc; lstack->n = 0; return lstack; } /*! * lstackDestroy() * * Input: &lstack () * freeflag (TRUE to free each remaining struct in the array) * Return: void * * Notes: * (1) If freeflag is TRUE, frees each struct in the array. * (2) If freeflag is FALSE but there are elements on the array, * gives a warning and destroys the array. This will * cause a memory leak of all the items that were on the lstack. * So if the items require their own destroy function, they * must be destroyed before the lstack. * (3) To destroy the lstack, we destroy the ptr array, then * the lstack, and then null the contents of the input ptr. */ void lstackDestroy(L_STACK **plstack, l_int32 freeflag) { void *item; L_STACK *lstack; PROCNAME("lstackDestroy"); if (plstack == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((lstack = *plstack) == NULL) return; if (freeflag) { while(lstack->n > 0) { item = lstackRemove(lstack); FREE(item); } } else if (lstack->n > 0) { L_WARNING("memory leak of %d items in lstack\n", procName, lstack->n); } if (lstack->auxstack) lstackDestroy(&lstack->auxstack, freeflag); if (lstack->array) FREE(lstack->array); FREE(lstack); *plstack = NULL; } /*---------------------------------------------------------------------* * Accessors * *---------------------------------------------------------------------*/ /*! * lstackAdd() * * Input: lstack * item to be added to the lstack * Return: 0 if OK; 1 on error. */ l_int32 lstackAdd(L_STACK *lstack, void *item) { PROCNAME("lstackAdd"); if (!lstack) return ERROR_INT("lstack not defined", procName, 1); if (!item) return ERROR_INT("item not defined", procName, 1); /* Do we need to extend the array? */ if (lstack->n >= lstack->nalloc) lstackExtendArray(lstack); /* Store the new pointer */ lstack->array[lstack->n] = (void *)item; lstack->n++; return 0; } /*! * lstackRemove() * * Input: lstack * Return: ptr to item popped from the top of the lstack, * or null if the lstack is empty or on error */ void * lstackRemove(L_STACK *lstack) { void *item; PROCNAME("lstackRemove"); if (!lstack) return ERROR_PTR("lstack not defined", procName, NULL); if (lstack->n == 0) return NULL; lstack->n--; item = lstack->array[lstack->n]; return item; } /*! * lstackExtendArray() * * Input: lstack * Return: 0 if OK; 1 on error */ static l_int32 lstackExtendArray(L_STACK *lstack) { PROCNAME("lstackExtendArray"); if (!lstack) return ERROR_INT("lstack not defined", procName, 1); if ((lstack->array = (void **)reallocNew((void **)&lstack->array, sizeof(void *) * lstack->nalloc, 2 * sizeof(void *) * lstack->nalloc)) == NULL) return ERROR_INT("new lstack array not defined", procName, 1); lstack->nalloc = 2 * lstack->nalloc; return 0; } /*! * lstackGetCount() * * Input: lstack * Return: count, or 0 on error */ l_int32 lstackGetCount(L_STACK *lstack) { PROCNAME("lstackGetCount"); if (!lstack) return ERROR_INT("lstack not defined", procName, 1); return lstack->n; } /*---------------------------------------------------------------------* * Debug output * *---------------------------------------------------------------------*/ /*! * lstackPrint() * * Input: stream * lstack * Return: 0 if OK; 1 on error */ l_int32 lstackPrint(FILE *fp, L_STACK *lstack) { l_int32 i; PROCNAME("lstackPrint"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!lstack) return ERROR_INT("lstack not defined", procName, 1); fprintf(fp, "\n Stack: nalloc = %d, n = %d, array = %p\n", lstack->nalloc, lstack->n, lstack->array); for (i = 0; i < lstack->n; i++) fprintf(fp, "array[%d] = %p\n", i, lstack->array[i]); return 0; } leptonica-1.70/src/dewarp1.c0000644000175000017500000015124412244221362014010 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarp1.c * * Basic operations and serialization * * Create/destroy dewarp * L_DEWARP *dewarpCreate() * L_DEWARP *dewarpCreateRef() * void dewarpDestroy() * * Create/destroy dewarpa * L_DEWARPA *dewarpaCreate() * L_DEWARPA *dewarpaCreateFromPixacomp() * void dewarpaDestroy() * l_int32 dewarpaDestroyDewarp() * * Dewarpa insertion/extraction * l_int32 dewarpaInsertDewarp() * static l_int32 dewarpaExtendArraysToSize() * L_DEWARP *dewarpaGetDewarp() * * Setting parameters to control rendering from the model * l_int32 dewarpaSetCurvatures() * l_int32 dewarpaUseBothArrays() * l_int32 dewarpaSetMaxDistance() * * Dewarp serialized I/O * L_DEWARP *dewarpRead() * L_DEWARP *dewarpReadStream() * l_int32 dewarpWrite() * l_int32 dewarpWriteStream() * * Dewarpa serialized I/O * L_DEWARPA *dewarpaRead() * L_DEWARPA *dewarpaReadStream() * l_int32 dewarpaWrite() * l_int32 dewarpaWriteStream() * * * Examples of usage * ================= * * See dewarpaCreateFromPixacomp() for an example of the basic * operations, starting from a set of 1 bpp images. * * Basic functioning to dewarp a specific single page: * // Make the Dewarpa for the pages * L_Dewarpa *dewa = dewarpaCreate(1, 30, 1, 15, 50); * dewarpaSetCurvatures(dewa, -1, 5, -1, -1, -1); * dewarpaUseBothArrays(dewa, 1); // try to use both disparity * // arrays for this example * * // Do the page: start with a binarized image * Pix *pixb = "binarize"(pixs); * // Initialize a Dewarp for this page (say, page 214) * L_Dewarp *dew = dewarpCreate(pixb, 214); * // Insert in Dewarpa and obtain parameters for building the model * dewarpaInsertDewarp(dewa, dew); * // Do the work * dewarpBuildPageModel(dew, NULL); // no debugging * // Optionally set rendering parameters * // Apply model to the input pixs * Pix *pixd; * dewarpaApplyDisparity(dewa, 214, pixs, 255, 0, 0, &pixd, NULL); * pixDestroy(&pixb); * * Basic functioning to dewarp many pages: * // Make the Dewarpa for the set of pages; use fullres 1 bpp * L_Dewarpa *dewa = dewarpaCreate(10, 30, 1, 15, 50); * // Optionally set rendering parameters * dewarpaSetCurvatures(dewa, -1, 10, -1, -1, -1); * dewarpaUseBothArrays(dewa, 0); // just use the vertical disparity * // array for this example * * // Do first page: start with a binarized image * Pix *pixb = "binarize"(pixs); * // Initialize a Dewarp for this page (say, page 1) * L_Dewarp *dew = dewarpCreate(pixb, 1); * // Insert in Dewarpa and obtain parameters for building the model * dewarpaInsertDewarp(dewa, dew); * // Do the work * dewarpBuildPageModel(dew, NULL); // no debugging * dewarpMinimze(dew); // remove most heap storage * pixDestroy(&pixb); * * // Do the other pages the same way * ... * * // Apply models to each page; if the page model is invalid, * // try to use a valid neighboring model. Note that the call * // to dewarpaInsertRefModels() is optional, because it is called * // by dewarpaApplyDisparity() on the first page it acts on. * dewarpaInsertRefModels(dewa, 0, 1); // use debug flag to get more * // detailed information about the page models * [For each page, where pixs is the fullres image to be dewarped] { * L_Dewarp *dew = dewarpaGetDewarp(dewa, pageno); * if (dew) { // disparity model exists * Pix *pixd; * dewarpaApplyDisparity(dewa, pageno, pixs, 255, * 0, 0, &pixd, NULL); * dewarpMinimize(dew); // clean out the pix and fpix arrays * // Squirrel pixd away somewhere ...) * } * } * * Basic functioning to dewarp a small set of pages, potentially * using models from nearby pages: * // (1) Generate a set of binarized images in the vicinity of the * // pages to be dewarped. We will attempt to compute models * // for pages from 'firstpage' to 'lastpage'. * // Store the binarized images in a compressed array of * // size 'n', where 'n' is the number of images to be stored, * // and where the offset is the first page. * PixaComp *pixac = pixacompCreateInitialized(n, firstpage, NULL, * IFF_TIFF_G4); * for (i = firstpage; i <= lastpage; i++) { * Pix *pixb = "binarize"(pixs); * pixacompReplacePix(pixac, i, pixb, IFF_TIFF_G4); * pixDestroy(&pixb); * } * * // (2) Make the Dewarpa for the pages. * L_Dewarpa *dewa = * dewarpaCreateFromPixacomp(pixac, 30, 15, 20); * dewarpaUseBothArrays(dewa, 1); // try to use both disparity arrays * // in this example * * // (3) Finally, apply the models. For page 'firstpage' with image pixs: * L_Dewarp *dew = dewarpaGetDewarp(dewa, firstpage); * if (dew) { // disparity model exists * Pix *pixd; * dewarpaApplyDisparity(dewa, firstpage, pixs, 255, 0, 0, &pixd, NULL); * dewarpMinimize(dew); * } * * Because in general some pages will not have enough text to build a * model, we fill in for those pages with a reference to the page * model to use. Both the target page and the reference page must * have the same parity. We can also choose to use either a partial model * (with only vertical disparity) or the full model of a nearby page. * * Minimizing the data in a model by stripping out images, * numas, and full resolution disparity arrays: * dewarpMinimize(dew); * This can be done at any time to save memory. Serialization does * not use the data that is stripped. * * You can apply any model (in a dew), stripped or not, to another image: * // For all pages with invalid models, assign the nearest valid * // page model with same parity. * dewarpaInsertRefModels(dewa, 0, 0); * // You can then apply to 'newpix' the page model that was assigned * // to 'pageno', giving the result in pixd: * Pix *pixd; * dewarpaApplyDisparity(dewa, pageno, newpix, 255, 0, 0, &pixd, NULL); * * You can apply the disparity arrays to a deliberately undercropped * image. Suppose that you undercrop by (left, right, top, bot), so * that the disparity arrays are aligned with their origin at (left, top). * Dewarp the undercropped image with: * Pix *pixd; * dewarpaApplyDisparity(dewa, pageno, undercropped_pix, 255, * left, top, &pixd, NULL); * * * Description of the approach to analyzing page image distortion * ============================================================== * * When a book page is scanned, there are several possible causes * for the text lines to appear to be curved: * (1) A barrel (fish-eye) effect because the camera is at * a finite distance from the page. Take the normal from * the camera to the page (the 'optic axis'). Lines on * the page "below" this point will appear to curve upward * (negative curvature); lines "above" this will curve downward. * (2) Radial distortion from the camera lens. Probably not * a big factor. * (3) Local curvature of the page in to (or out of) the image * plane (which is perpendicular to the optic axis). * This has no effect if the page is flat. * * In the following, the optic axis is in the z direction and is * perpendicular to the xy plane;, the book is assumed to be aligned * so that y is approximately along the binding. * The goal is to compute the "disparity" field, D(x,y), which * is actually a vector composed of the horizontal and vertical * disparity fields H(x,y) and V(x,y). Each of these is a local * function that gives the amount each point in the image is * required to move in order to rectify the horizontal and vertical * lines. It would also be nice to "flatten" the page to compensate * for effect (3), foreshortening due to bending of the page into * the z direction, but that is more difficult. * * Effects (1) and (2) can be directly compensated by calibrating * the scene, using a flat page with horizontal and vertical lines. * Then H(x,y) and V(x,y) can be found as two (non-parametric) arrays * of values. Suppose this has been done. Then the remaining * distortion is due to (3). * * We consider the simple situation where the page bending is independent * of y, and is described by alpha(x), where alpha is the angle between * the normal to the page and the optic axis. cos(alpha(x)) is the local * compression factor of the page image in the horizontal direction, at x. * Thus, if we know alpha(x), we can compute the disparity H(x) required * to flatten the image by simply integrating 1/cos(alpha), and we could * compute the remaining disparities, H(x,y) and V(x,y), from the * page content, as described below. Unfortunately, we don't know * alpha. What do we know? If there are horizontal text lines * on the page, we can compute the vertical disparity, V(x,y), which * is the local translation required to make the text lines parallel * to the rasters. If the margins are left and right aligned, we can * also estimate the horizontal disparity, H(x,y), required to have * uniform margins. All that can be done from the image alone, * assuming we have text lines covering a sufficient part of the page. * * What about alpha(x)? The basic question relating to (3) is this: * * Is it possible, using the shape of the text lines alone, * to compute both the vertical and horizontal disparity fields? * * The underlying problem is to separate the line curvature effects due * to the camera view from those due to actual bending of the page. * I believe the proper way to do this is to make some measurements * based on the camera setup, which will depend mostly on the distance * of the camera from the page, and to a smaller extent on the location * of the optic axis with respect to the page. * * Here is the procedure. Photograph a page with a fine 2D line grid * several times, each with a different slope near the binding. * This can be done by placing the grid page on books that have * different shapes z(x) near the binding. For each one you can * measure, near the binding: * (1) ds/dy, the vertical rate of change of slope of the horizontal lines * (2) the local horizontal compression of the vertical lines due * to the page angle dz/dx. * As mentioned above, the local horizontal compression is simply * cos(dz/dx). But the measurement you can make on an actual book * page is (1). The difficulty is to generate (2) from (1). * * Back to the procedure. The function in (1), ds/dy, likely needs * to be measured at a few y locations, because the relation * between (1) and (2) may weakly depend on the y-location with * respect to the y-coordinate of the optic axis of the camera. * From these measurements you can determine, for the camera setup * that you have, the local horizontal compression, cos(dz/dx), as a * function of the both vertical location (y) and your measured vertical * derivative of the text line slope there, ds/dy. Then with * appropriate smoothing of your measured values, you can set up a * horizontal disparity array to correct for the compression due * to dz/dx. * * Now consider V(x,0) and V(x,h), the vertical disparity along * the top and bottom of the image. With a little thought you * can convince yourself that the local foreshortening, * as a function of x, is proportional to the difference * between the slope of V(x,0) and V(x,h). The horizontal * disparity can then be computed by integrating the local foreshortening * over x. Integration of the slope of V(x,0) and V(x,h) gives * the vertical disparity itself. We have to normalize to h, the * height of the page. So the very simple result is that * * H(x) ~ (V(x,0) - V(x,h)) / h [1] * * which is easily computed. There is a proportionality constant * that depends on the ratio of h to the distance to the camera. * Can we actually believe this for the case where the bending * is independent of y? I believe the answer is yes, * as long as you first remove the apparent distortion due * to the camera being at a finite distance. * * If you know the intersection of the optical axis with the page * and the distance to the camera, and if the page is perpendicular * to the optic axis, you can compute the horizontal and vertical * disparities due to (1) and (2) and remove them. The resulting * distortion should be entirely due to bending (3), for which * the relation * * Hx(x) dx = C * ((Vx(x,0) - Vx(x, h))/h) dx [2] * * holds for each point in x (Hx and Vx are partial derivatives w/rt x). * Integrating over x, and using H(0) = 0, we get the result [1]. * * I believe this result holds differentially for each value of y, so * that in the case where the bending is not independent of y, * the expression (V(x,0) - V(x,h)) / h goes over to Vy(x,y). Then * * H(x,y) = Integral(0,x) (Vyx(x,y) dx) [3] * * where Vyx() is the partial derivative of V w/rt both x and y. * * It would be nice if there were a simple mathematical relation between * the horizontal and vertical disparities for the situation * where the paper bends without stretching or kinking. * I had hoped to get a relation between H and V, such as * Hx(x,y) ~ Vy(x,y), which would imply that H and V are real * and imaginary parts of a complex potential, each of which * satisfy the laplace equation. But then the gradients of the * two potentials would be normal, and that does not appear to be the case. * Thus, the questions of proving the relations above (for small bending), * or finding a simpler relation between H and V than those equations, * remain open. So far, we have only used [1] for the horizontal * disparity H(x). * * In the version of the code that follows, we first use text lines * to find V(x,y). Then, we try to compute H(x,y) that will align * the text vertically on the left and right margins. This is not * always possible -- sometimes the right margin is not right justified. * By default, we don't require the horizontal disparity to have a * valid page model for dewarping a page, but this requirement can * be forced using dewarpaUseFullModel(). * * As described above, one can add a y-independent component of * the horizontal disparity H(x) to counter the foreshortening * effect due to the bending of the page near the binding. * This requires widening the image on the side near the binding, * and we do not provide this option here. However, we do provide * a function that will generate this disparity field: * fpixExtraHorizDisparity() * * Here is the basic outline for building the disparity arrays. * * (1) Find lines going approximately through the center of the * text in each text line. Accept only lines that are * close in length to the longest line. * (2) Use these lines to generate a regular and highly subsampled * vertical disparity field V(x,y). * (3) Interpolate this to generate a full resolution vertical * disparity field. * (4) For lines that are sufficiently long, determine if the lines * are left and right-justified, and if so, construct a highly * subsampled horizontal disparity field H(x,y) that will bring * them into alignment. * (5) Interpolate this to generate a full resolution horizontal * disparity field. * (6) Apply the vertical dewarping, followed by the horizontal dewarping. * * Step (1) is clearly described by the code in pixGetTextlineCenters(). * * Steps (2) and (3) follow directly from the data in step (1), * and constitute the bulk of the work done in dewarpBuildPageModel(). * Virtually all the noise in the data is smoothed out by doing * least-square quadratic fits, first horizontally to the data * points representing the text line centers, and then vertically. * The trick is to sample these lines on a regular grid. * First each horizontal line is sampled at equally spaced * intervals horizontally. We thus get a set of points, * one in each line, that are vertically aligned, and * the data we represent is the vertical distance of each point * from the min or max value on the curve, depending on the * sign of the curvature component. Each of these vertically * aligned sets of points constitutes a sampled vertical disparity, * and we do a LS quartic fit to each of them, followed by * vertical sampling at regular intervals. We now have a subsampled * grid of points, all equally spaced, giving at each point the local * vertical disparity. Finally, the full resolution vertical disparity * is formed by interpolation. All the least square fits do a * great job of smoothing everything out, as can be observed by * the contour maps that are generated for the vertical disparity field. */ #include #include "allheaders.h" static l_int32 dewarpaExtendArraysToSize(L_DEWARPA *dewa, l_int32 size); /* Special parameter values */ static const l_int32 MIN_ARRAY_SAMPLING = 8; static const l_int32 DEFAULT_ARRAY_SAMPLING = 30; static const l_int32 MIN_MIN_LINES = 4; static const l_int32 DEFAULT_MIN_LINES = 15; static const l_int32 DEFAULT_MAX_REF_DIST = 16; static const l_float32 DEFAULT_SLOPE_FACTOR = 2000.; static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ static const l_int32 MAX_PTR_ARRAYSIZE = 10000; static const l_int32 DEFAULT_MAX_LINECURV = 180; static const l_int32 DEFAULT_MIN_DIFF_LINECURV = 0; static const l_int32 DEFAULT_MAX_DIFF_LINECURV = 150; static const l_int32 DEFAULT_MAX_EDGECURV = 50; static const l_int32 DEFAULT_MAX_DIFF_EDGECURV = 30; /*----------------------------------------------------------------------* * Create/destroy Dewarp * *----------------------------------------------------------------------*/ /*! * dewarpCreate() * * Input: pixs (1 bpp) * pageno (page number) * Return: dew (or null on error) * * Notes: * (1) The input pixs is either full resolution or 2x reduced. * (2) The page number is typically 0-based. If scanned from a book, * the even pages are usually on the left. Disparity arrays * built for even pages should only be applied to even pages. */ L_DEWARP * dewarpCreate(PIX *pixs, l_int32 pageno) { L_DEWARP *dew; PROCNAME("dewarpCreate"); if (!pixs) return (L_DEWARP *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 1) return (L_DEWARP *)ERROR_PTR("pixs not 1 bpp", procName, NULL); if ((dew = (L_DEWARP *)CALLOC(1, sizeof(L_DEWARP))) == NULL) return (L_DEWARP *)ERROR_PTR("dew not made", procName, NULL); dew->pixs = pixClone(pixs); dew->pageno = pageno; dew->w = pixGetWidth(pixs); dew->h = pixGetHeight(pixs); return dew; } /*! * dewarpCreateRef() * * Input: pageno (this page number) * refpage (page number of dewarp disparity arrays to be used) * Return: dew (or null on error) * * Notes: * (1) This specifies which dewarp struct should be used for * the given page. It is placed in dewarpa for pages * for which no model can be built. * (2) This page and the reference page have the same parity and * the reference page is the closest page with a disparity model * to this page. */ L_DEWARP * dewarpCreateRef(l_int32 pageno, l_int32 refpage) { L_DEWARP *dew; PROCNAME("dewarpCreateRef"); if ((dew = (L_DEWARP *)CALLOC(1, sizeof(L_DEWARP))) == NULL) return (L_DEWARP *)ERROR_PTR("dew not made", procName, NULL); dew->pageno = pageno; dew->hasref = 1; dew->refpage = refpage; return dew; } /*! * dewarpDestroy() * * Input: &dew () * Return: void */ void dewarpDestroy(L_DEWARP **pdew) { L_DEWARP *dew; PROCNAME("dewarpDestroy"); if (pdew == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((dew = *pdew) == NULL) return; pixDestroy(&dew->pixs); fpixDestroy(&dew->sampvdispar); fpixDestroy(&dew->samphdispar); fpixDestroy(&dew->fullvdispar); fpixDestroy(&dew->fullhdispar); numaDestroy(&dew->namidys); numaDestroy(&dew->nacurves); FREE(dew); *pdew = NULL; return; } /*----------------------------------------------------------------------* * Create/destroy Dewarpa * *----------------------------------------------------------------------*/ /*! * dewarpaCreate() * * Input: nptrs (number of dewarp page ptrs; typically the number of pages) * sampling (use 0 for default value; the minimum allowed is 8) * redfactor (of input images: 1 is full resolution; 2 is 2x reduced) * minlines (minimum number of lines to accept; use 0 for default) * maxdist (for locating reference disparity; use -1 for default) * Return: dewa (or null on error) * * Notes: * (1) The sampling, minlines and maxdist parameters will be * applied to all images. * (2) The sampling factor is used for generating the disparity arrays * from the input image. For 2x reduced input, use a sampling * factor that is half the sampling you want on the full resolution * images. * (3) Use @redfactor = 1 for full resolution; 2 for 2x reduction. * All input images must be at one of these two resolutions. * (4) @minlines is the minimum number of nearly full-length lines * required to generate a vertical disparity array. The default * number is 15. Use a smaller number to accept a questionable * array, but not smaller than 4. * (5) When a model can't be built for a page, it looks up to @maxdist * in either direction for a valid model with the same page parity. * Use -1 for the default value of @maxdist; use 0 to avoid using * a ref model. * (6) The ptr array is expanded as necessary to accommodate page images. */ L_DEWARPA * dewarpaCreate(l_int32 nptrs, l_int32 sampling, l_int32 redfactor, l_int32 minlines, l_int32 maxdist) { L_DEWARPA *dewa; PROCNAME("dewarpaCreate"); if (nptrs <= 0) nptrs = INITIAL_PTR_ARRAYSIZE; if (nptrs > MAX_PTR_ARRAYSIZE) return (L_DEWARPA *)ERROR_PTR("too many pages", procName, NULL); if (redfactor != 1 && redfactor != 2) return (L_DEWARPA *)ERROR_PTR("redfactor not in {1,2}", procName, NULL); if (sampling == 0) { sampling = DEFAULT_ARRAY_SAMPLING; } else if (sampling < MIN_ARRAY_SAMPLING) { L_WARNING("sampling too small; setting to %d\n", procName, MIN_ARRAY_SAMPLING); sampling = MIN_ARRAY_SAMPLING; } if (minlines == 0) { minlines = DEFAULT_MIN_LINES; } else if (minlines < MIN_MIN_LINES) { L_WARNING("minlines too small; setting to %d\n", procName, MIN_MIN_LINES); minlines = DEFAULT_MIN_LINES; } if (maxdist < 0) maxdist = DEFAULT_MAX_REF_DIST; if ((dewa = (L_DEWARPA *)CALLOC(1, sizeof(L_DEWARPA))) == NULL) return (L_DEWARPA *)ERROR_PTR("dewa not made", procName, NULL); if ((dewa->dewarp = (L_DEWARP **)CALLOC(nptrs, sizeof(L_DEWARPA *))) == NULL) return (L_DEWARPA *)ERROR_PTR("dewarp ptrs not made", procName, NULL); if ((dewa->dewarpcache = (L_DEWARP **)CALLOC(nptrs, sizeof(L_DEWARPA *))) == NULL) return (L_DEWARPA *)ERROR_PTR("dewarpcache ptrs not made", procName, NULL); dewa->nalloc = nptrs; dewa->sampling = sampling; dewa->redfactor = redfactor; dewa->minlines = minlines; dewa->maxdist = maxdist; dewa->max_linecurv = DEFAULT_MAX_LINECURV; dewa->min_diff_linecurv = DEFAULT_MIN_DIFF_LINECURV; dewa->max_diff_linecurv = DEFAULT_MAX_DIFF_LINECURV; dewa->max_edgecurv = DEFAULT_MAX_EDGECURV; dewa->max_diff_edgecurv = DEFAULT_MAX_DIFF_EDGECURV; return dewa; } /*! * dewarpaCreateFromPixacomp() * * Input: pixac (pixacomp of G4, 1 bpp images; with 1x1x1 placeholders) * useboth (0 for vert disparity; 1 for both vert and horiz) * sampling (use -1 or 0 for default value; otherwise minimum of 5) * minlines (minimum number of lines to accept; e.g., 10) * maxdist (for locating reference disparity; use -1 for default) * Return: dewa (or null on error) * * Notes: * (1) The returned dewa has disparity arrays calculated and * is ready for serialization or for use in dewarping. * (2) The sampling, minlines and maxdist parameters are * applied to all images. See notes in dewarpaCreate() for details. * (3) The pixac is full. Placeholders, if any, are w=h=d=1 images, * and the real input images are 1 bpp at full resolution. * They are assumed to be cropped to the actual page regions, * and may be arbitrarily sparse in the array. * (4) The output dewarpa is indexed by the page number. * The offset in the pixac gives the mapping between the * array index in the pixac and the page number. * (5) This adds the ref page models. * (6) This can be used to make models for any desired set of pages. * The direct models are only made for pages with images in * the pixacomp; the ref models are made for pages of the * same parity within @maxdist of the nearest direct model. */ L_DEWARPA * dewarpaCreateFromPixacomp(PIXAC *pixac, l_int32 useboth, l_int32 sampling, l_int32 minlines, l_int32 maxdist) { l_int32 i, nptrs, pageno; L_DEWARP *dew; L_DEWARPA *dewa; PIX *pixt; PROCNAME("dewarpaCreateFromPixacomp"); if (!pixac) return (L_DEWARPA *)ERROR_PTR("pixac not defined", procName, NULL); nptrs = pixacompGetCount(pixac); if ((dewa = dewarpaCreate(pixacompGetOffset(pixac) + nptrs, sampling, 1, minlines, maxdist)) == NULL) return (L_DEWARPA *)ERROR_PTR("dewa not made", procName, NULL); dewarpaUseBothArrays(dewa, useboth); for (i = 0; i < nptrs; i++) { pageno = pixacompGetOffset(pixac) + i; /* index into pixacomp */ pixt = pixacompGetPix(pixac, pageno); if (pixt && (pixGetWidth(pixt) > 1)) { dew = dewarpCreate(pixt, pageno); pixDestroy(&pixt); if (!dew) { ERROR_INT("unable to make dew!", procName, 1); continue; } /* Insert into dewa for this page */ dewarpaInsertDewarp(dewa, dew); /* Build disparity arrays for this page */ dewarpBuildPageModel(dew, NULL); if (!dew->vsuccess) { /* will need to use model from nearby page */ dewarpaDestroyDewarp(dewa, pageno); L_ERROR("unable to build model for page %d\n", procName, i); continue; } /* Remove all extraneous data */ dewarpMinimize(dew); } pixDestroy(&pixt); } dewarpaInsertRefModels(dewa, 0, 0); return dewa; } /*! * dewarpaDestroy() * * Input: &dewa () * Return: void */ void dewarpaDestroy(L_DEWARPA **pdewa) { l_int32 i; L_DEWARP *dew; L_DEWARPA *dewa; PROCNAME("dewarpaDestroy"); if (pdewa == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((dewa = *pdewa) == NULL) return; for (i = 0; i < dewa->nalloc; i++) { if ((dew = dewa->dewarp[i]) != NULL) dewarpDestroy(&dew); if ((dew = dewa->dewarpcache[i]) != NULL) dewarpDestroy(&dew); } numaDestroy(&dewa->namodels); numaDestroy(&dewa->napages); FREE(dewa->dewarp); FREE(dewa->dewarpcache); FREE(dewa); *pdewa = NULL; return; } /*! * dewarpaDestroyDewarp() * * Input: dewa * pageno (of dew to be destroyed) * Return: 0 if OK, 1 on error */ l_int32 dewarpaDestroyDewarp(L_DEWARPA *dewa, l_int32 pageno) { L_DEWARP *dew; PROCNAME("dewarpaDestroyDewarp"); if (!dewa) return ERROR_INT("dewa or dew not defined", procName, 1); if (pageno < 0 || pageno > dewa->maxpage) return ERROR_INT("page out of bounds", procName, 1); if ((dew = dewa->dewarp[pageno]) == NULL) return ERROR_INT("dew not defined", procName, 1); dewarpDestroy(&dew); dewa->dewarp[pageno] = NULL; return 0; } /*----------------------------------------------------------------------* * Dewarpa insertion/extraction * *----------------------------------------------------------------------*/ /*! * dewarpaInsertDewarp() * * Input: dewarpa * dewarp (to be added) * Return: 0 if OK, 1 on error * * Notes: * (1) This inserts the dewarp into the array, which now owns it. * It also keeps track of the largest page number stored. * It must be done before the disparity model is built. * (2) Note that this differs from the usual method of filling out * arrays in leptonica, where the arrays are compact and * new elements are typically added to the end. Here, * the dewarp can be added anywhere, even beyond the initial * allocation. */ l_int32 dewarpaInsertDewarp(L_DEWARPA *dewa, L_DEWARP *dew) { l_int32 pageno, n, newsize; L_DEWARP *prevdew; PROCNAME("dewarpaInsertDewarp"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if (!dew) return ERROR_INT("dew not defined", procName, 1); dew->dewa = dewa; pageno = dew->pageno; if (pageno > MAX_PTR_ARRAYSIZE) return ERROR_INT("too many pages", procName, 1); if (pageno > dewa->maxpage) dewa->maxpage = pageno; dewa->modelsready = 0; /* force re-evaluation at application time */ /* Extend ptr array if necessary */ n = dewa->nalloc; newsize = n; if (pageno >= 2 * n) newsize = 2 * pageno; else if (pageno >= n) newsize = 2 * n; if (newsize > n) dewarpaExtendArraysToSize(dewa, newsize); if ((prevdew = dewarpaGetDewarp(dewa, pageno)) != NULL) dewarpDestroy(&prevdew); dewa->dewarp[pageno] = dew; dew->sampling = dewa->sampling; dew->redfactor = dewa->redfactor; dew->minlines = dewa->minlines; /* Get the dimensions of the sampled array. This will be * stored in an fpix, and the input resolution version is * guaranteed to be larger than pixs. However, if you * want to apply the disparity to an image with a width * w > nx * s - 2 * s + 2 * you will need to extend the input res fpix. * And similarly for h. */ dew->nx = (dew->w + 2 * dew->sampling - 2) / dew->sampling; dew->ny = (dew->h + 2 * dew->sampling - 2) / dew->sampling; return 0; } /*! * dewarpaExtendArraysToSize() * * Input: dewa * size (new size of dewarpa array) * Return: 0 if OK; 1 on error * * Notes: * (1) If necessary, reallocs main and cache dewarpa ptr arrays to @size. */ static l_int32 dewarpaExtendArraysToSize(L_DEWARPA *dewa, l_int32 size) { PROCNAME("dewarpaExtendArraysToSize"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if (size > dewa->nalloc) { if ((dewa->dewarp = (L_DEWARP **)reallocNew((void **)&dewa->dewarp, sizeof(L_DEWARP *) * dewa->nalloc, size * sizeof(L_DEWARP *))) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); if ((dewa->dewarpcache = (L_DEWARP **)reallocNew((void **)&dewa->dewarpcache, sizeof(L_DEWARP *) * dewa->nalloc, size * sizeof(L_DEWARP *))) == NULL) return ERROR_INT("new ptr cache array not returned", procName, 1); dewa->nalloc = size; } return 0; } /*! * dewarpaGetDewarp() * * Input: dewa (populated with dewarp structs for pages) * index (into dewa: this is the pageno) * Return: dew (handle; still owned by dewa), or null on error */ L_DEWARP * dewarpaGetDewarp(L_DEWARPA *dewa, l_int32 index) { PROCNAME("dewarpaGetDewarp"); if (!dewa) return (L_DEWARP *)ERROR_PTR("dewa not defined", procName, NULL); if (index < 0 || index > dewa->maxpage) return (L_DEWARP *)ERROR_PTR("invalid index", procName, NULL); return dewa->dewarp[index]; } /*----------------------------------------------------------------------* * Setting parameters to control rendering from the model * *----------------------------------------------------------------------*/ /*! * dewarpaSetCurvatures() * * Input: dewa * max_linecurv (-1 for default) * min_diff_linecurv (-1 for default; 0 to accept all models) * max_diff_linecurv (-1 for default) * max_edgecurv (-1 for default) * max_diff_edgecurv (-1 for default) * Return: 0 if OK, 1 on error * * Notes: * (1) Approximating the line by a quadratic, the coefficent * of the quadratic term is the curvature, and distance * units are in pixels (of course). The curvature is very * small, so we multiply by 10^6 and express the constraints * on the model curvatures in micro-units. * (2) This sets five curvature thresholds: * * the maximum absolute value of the vertical disparity * line curvatures * * the minimum absolute value of the largest difference in * vertical disparity line curvatures (Use a value of 0 * to accept all models.) * * the maximum absolute value of the largest difference in * vertical disparity line curvatures * * the maximum absolute value of the left and right edge * curvature for the horizontal disparity * * the maximum absolute value of the difference between * left and right edge curvature for the horizontal disparity * all in micro-units, for dewarping to take place. * Use -1 for default values. * (3) An image with a line curvature less than about 0.00001 * has fairly straight textlines. This is 10 micro-units. * (4) For example, if @max_linecurv == 100, this would prevent dewarping * if any of the lines has a curvature exceeding 100 micro-units. * A model having maximum line curvature larger than about 150 * micro-units should probably not be used. * (5) A model having a left or right edge curvature larger than * about 100 micro-units should probably not be used. */ l_int32 dewarpaSetCurvatures(L_DEWARPA *dewa, l_int32 max_linecurv, l_int32 min_diff_linecurv, l_int32 max_diff_linecurv, l_int32 max_edgecurv, l_int32 max_diff_edgecurv) { PROCNAME("dewarpaSetCurvatures"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if (max_linecurv == -1) dewa->max_linecurv = DEFAULT_MAX_LINECURV; else dewa->max_linecurv = L_ABS(max_linecurv); if (min_diff_linecurv == -1) dewa->min_diff_linecurv = DEFAULT_MIN_DIFF_LINECURV; else dewa->min_diff_linecurv = L_ABS(min_diff_linecurv); if (max_diff_linecurv == -1) dewa->max_diff_linecurv = DEFAULT_MAX_DIFF_LINECURV; else dewa->max_diff_linecurv = L_ABS(max_diff_linecurv); if (max_edgecurv == -1) dewa->max_edgecurv = DEFAULT_MAX_EDGECURV; else dewa->max_edgecurv = L_ABS(max_edgecurv); if (max_diff_edgecurv == -1) dewa->max_diff_edgecurv = DEFAULT_MAX_DIFF_EDGECURV; else dewa->max_diff_edgecurv = L_ABS(max_diff_edgecurv); dewa->modelsready = 0; /* force validation */ return 0; } /*! * dewarpaUseBothArrays() * * Input: dewa * useboth (0 for false, 1 for true) * Return: 0 if OK, 1 on error * * Notes: * (1) This sets the useboth field. If set, this will attempt * to apply both vertical and horizontal disparity arrays. * Note that a model with only a vertical disparity array will * always be valid. */ l_int32 dewarpaUseBothArrays(L_DEWARPA *dewa, l_int32 useboth) { PROCNAME("dewarpaUseBothArrays"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); dewa->useboth = useboth; dewa->modelsready = 0; /* force validation */ return 0; } /*! * dewarpaSetMaxDistance() * * Input: dewa * maxdist (for using ref models) * Return: 0 if OK, 1 on error * * Notes: * (1) This sets the maxdist field. */ l_int32 dewarpaSetMaxDistance(L_DEWARPA *dewa, l_int32 maxdist) { PROCNAME("dewarpaSetMaxDistance"); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); dewa->maxdist = maxdist; dewa->modelsready = 0; /* force validation */ return 0; } /*----------------------------------------------------------------------* * Dewarp serialized I/O * *----------------------------------------------------------------------*/ /*! * dewarpRead() * * Input: filename * Return: dew, or null on error */ L_DEWARP * dewarpRead(const char *filename) { FILE *fp; L_DEWARP *dew; PROCNAME("dewarpRead"); if (!filename) return (L_DEWARP *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DEWARP *)ERROR_PTR("stream not opened", procName, NULL); if ((dew = dewarpReadStream(fp)) == NULL) { fclose(fp); return (L_DEWARP *)ERROR_PTR("dew not read", procName, NULL); } fclose(fp); return dew; } /*! * dewarpReadStream() * * Input: stream * Return: dew, or null on error * * Notes: * (1) The dewarp struct is stored in minimized format, with only * subsampled disparity arrays. * (2) The sampling and extra horizontal disparity parameters are * stored here. During generation of the dewarp struct, they * are passed in from the dewarpa. In readback, it is assumed * that they are (a) the same for each page and (b) the same * as the values used to create the dewarpa. */ L_DEWARP * dewarpReadStream(FILE *fp) { l_int32 version, sampling, redfactor, minlines, pageno, hasref, refpage; l_int32 w, h, nx, ny, vdispar, hdispar, nlines; l_int32 mincurv, maxcurv, leftcurv, rightcurv; L_DEWARP *dew; FPIX *fpixv, *fpixh; PROCNAME("dewarpReadStream"); if (!fp) return (L_DEWARP *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nDewarp Version %d\n", &version) != 1) return (L_DEWARP *)ERROR_PTR("not a dewarp file", procName, NULL); if (version != DEWARP_VERSION_NUMBER) return (L_DEWARP *)ERROR_PTR("invalid dewarp version", procName, NULL); if (fscanf(fp, "pageno = %d\n", &pageno) != 1) return (L_DEWARP *)ERROR_PTR("read fail for pageno", procName, NULL); if (fscanf(fp, "hasref = %d, refpage = %d\n", &hasref, &refpage) != 2) return (L_DEWARP *)ERROR_PTR("read fail for hasref, refpage", procName, NULL); if (fscanf(fp, "sampling = %d, redfactor = %d\n", &sampling, &redfactor) != 2) return (L_DEWARP *)ERROR_PTR("read fail for sampling/redfactor", procName, NULL); if (fscanf(fp, "nlines = %d, minlines = %d\n", &nlines, &minlines) != 2) return (L_DEWARP *)ERROR_PTR("read fail for nlines/minlines", procName, NULL); if (fscanf(fp, "w = %d, h = %d\n", &w, &h) != 2) return (L_DEWARP *)ERROR_PTR("read fail for w, h", procName, NULL); if (fscanf(fp, "nx = %d, ny = %d\n", &nx, &ny) != 2) return (L_DEWARP *)ERROR_PTR("read fail for nx, ny", procName, NULL); if (fscanf(fp, "vert_dispar = %d, horiz_dispar = %d\n", &vdispar, &hdispar) != 2) return (L_DEWARP *)ERROR_PTR("read fail for flags", procName, NULL); if (vdispar) { if (fscanf(fp, "min line curvature = %d, max line curvature = %d\n", &mincurv, &maxcurv) != 2) return (L_DEWARP *)ERROR_PTR("read fail for mincurv & maxcurv", procName, NULL); } if (hdispar) { if (fscanf(fp, "left edge curvature = %d, right edge curvature = %d\n", &leftcurv, &rightcurv) != 2) return (L_DEWARP *)ERROR_PTR("read fail for leftcurv & rightcurv", procName, NULL); } if (vdispar) { if ((fpixv = fpixReadStream(fp)) == NULL) return (L_DEWARP *)ERROR_PTR("read fail for vdispar", procName, NULL); } if (hdispar) { if ((fpixh = fpixReadStream(fp)) == NULL) return (L_DEWARP *)ERROR_PTR("read fail for hdispar", procName, NULL); } getc(fp); dew = (L_DEWARP *)CALLOC(1, sizeof(L_DEWARP)); dew->w = w; dew->h = h; dew->pageno = pageno; dew->sampling = sampling; dew->redfactor = redfactor; dew->minlines = minlines; dew->nlines = nlines; dew->hasref = hasref; dew->refpage = refpage; if (hasref == 0) /* any dew without a ref has an actual model */ dew->vsuccess = 1; dew->nx = nx; dew->ny = ny; if (vdispar) { dew->mincurv = mincurv; dew->maxcurv = maxcurv; dew->vsuccess = 1; dew->sampvdispar = fpixv; } if (hdispar) { dew->leftcurv = leftcurv; dew->rightcurv = rightcurv; dew->hsuccess = 1; dew->samphdispar = fpixh; } return dew; } /*! * dewarpWrite() * * Input: filename * dew * Return: 0 if OK, 1 on error */ l_int32 dewarpWrite(const char *filename, L_DEWARP *dew) { FILE *fp; PROCNAME("dewarpWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!dew) return ERROR_INT("dew not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (dewarpWriteStream(fp, dew)) return ERROR_INT("dew not written to stream", procName, 1); fclose(fp); return 0; } /*! * dewarpWriteStream() * * Input: stream (opened for "wb") * dew * Return: 0 if OK, 1 on error * * Notes: * (1) This should not be written if there is no sampled * vertical disparity array, which means that no model has * been built for this page. */ l_int32 dewarpWriteStream(FILE *fp, L_DEWARP *dew) { l_int32 vdispar, hdispar; PROCNAME("dewarpWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!dew) return ERROR_INT("dew not defined", procName, 1); fprintf(fp, "\nDewarp Version %d\n", DEWARP_VERSION_NUMBER); fprintf(fp, "pageno = %d\n", dew->pageno); fprintf(fp, "hasref = %d, refpage = %d\n", dew->hasref, dew->refpage); fprintf(fp, "sampling = %d, redfactor = %d\n", dew->sampling, dew->redfactor); fprintf(fp, "nlines = %d, minlines = %d\n", dew->nlines, dew->minlines); fprintf(fp, "w = %d, h = %d\n", dew->w, dew->h); fprintf(fp, "nx = %d, ny = %d\n", dew->nx, dew->ny); vdispar = (dew->sampvdispar) ? 1 : 0; hdispar = (dew->samphdispar) ? 1 : 0; fprintf(fp, "vert_dispar = %d, horiz_dispar = %d\n", vdispar, hdispar); if (vdispar) fprintf(fp, "min line curvature = %d, max line curvature = %d\n", dew->mincurv, dew->maxcurv); if (hdispar) { fprintf(fp, "left edge curvature = %d, right edge curvature = %d\n", dew->leftcurv, dew->rightcurv); } if (vdispar) fpixWriteStream(fp, dew->sampvdispar); if (hdispar) fpixWriteStream(fp, dew->samphdispar); fprintf(fp, "\n"); if (!vdispar) L_WARNING("no disparity arrays!\n", procName); return 0; } /*----------------------------------------------------------------------* * Dewarpa serialized I/O * *----------------------------------------------------------------------*/ /*! * dewarpaRead() * * Input: filename * Return: dewa, or null on error */ L_DEWARPA * dewarpaRead(const char *filename) { FILE *fp; L_DEWARPA *dewa; PROCNAME("dewarpaRead"); if (!filename) return (L_DEWARPA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DEWARPA *)ERROR_PTR("stream not opened", procName, NULL); if ((dewa = dewarpaReadStream(fp)) == NULL) { fclose(fp); return (L_DEWARPA *)ERROR_PTR("dewa not read", procName, NULL); } fclose(fp); return dewa; } /*! * dewarpaReadStream() * * Input: stream * Return: dewa, or null on error * * Notes: * (1) The serialized dewarp contains a Numa that gives the * (increasing) page number of the dewarp structs that are * contained. * (2) Reference pages are added in after readback. */ L_DEWARPA * dewarpaReadStream(FILE *fp) { l_int32 i, version, ndewarp, maxpage; l_int32 sampling, redfactor, minlines, maxdist, useboth; l_int32 max_linecurv, min_diff_linecurv, max_diff_linecurv; l_int32 max_edgecurv, max_diff_edgecurv; L_DEWARP *dew; L_DEWARPA *dewa; NUMA *namodels; PROCNAME("dewarpaReadStream"); if (!fp) return (L_DEWARPA *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nDewarpa Version %d\n", &version) != 1) return (L_DEWARPA *)ERROR_PTR("not a dewarpa file", procName, NULL); if (version != DEWARP_VERSION_NUMBER) return (L_DEWARPA *)ERROR_PTR("invalid dewarp version", procName, NULL); if (fscanf(fp, "ndewarp = %d, maxpage = %d\n", &ndewarp, &maxpage) != 2) return (L_DEWARPA *)ERROR_PTR("read fail for maxpage+", procName, NULL); if (fscanf(fp, "sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n", &sampling, &redfactor, &minlines, &maxdist) != 4) return (L_DEWARPA *)ERROR_PTR("read fail for 4 params", procName, NULL); if (fscanf(fp, "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n", &max_linecurv, &min_diff_linecurv, &max_diff_linecurv) != 3) return (L_DEWARPA *)ERROR_PTR("read fail for linecurv", procName, NULL); if (fscanf(fp, "max_edgecurv = %d, max_diff_edgecurv = %d\n", &max_edgecurv, &max_diff_edgecurv) != 2) return (L_DEWARPA *)ERROR_PTR("read fail for edgecurv", procName, NULL); if (fscanf(fp, "fullmodel = %d\n", &useboth) != 1) return (L_DEWARPA *)ERROR_PTR("read fail for useboth", procName, NULL); dewa = dewarpaCreate(maxpage + 1, sampling, redfactor, minlines, maxdist); dewa->maxpage = maxpage; dewa->max_linecurv = max_linecurv; dewa->min_diff_linecurv = min_diff_linecurv; dewa->max_diff_linecurv = max_diff_linecurv; dewa->max_edgecurv = max_edgecurv; dewa->max_diff_edgecurv = max_diff_edgecurv; dewa->useboth = useboth; namodels = numaCreate(ndewarp); dewa->namodels = namodels; for (i = 0; i < ndewarp; i++) { if ((dew = dewarpReadStream(fp)) == NULL) { L_ERROR("read fail for dew[%d]\n", procName, i); return NULL; } dewarpaInsertDewarp(dewa, dew); numaAddNumber(namodels, dew->pageno); } /* Validate the models and insert reference models */ dewarpaInsertRefModels(dewa, 0, 0); return dewa; } /*! * dewarpaWrite() * * Input: filename * dewa * Return: 0 if OK, 1 on error */ l_int32 dewarpaWrite(const char *filename, L_DEWARPA *dewa) { FILE *fp; PROCNAME("dewarpaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (dewarpaWriteStream(fp, dewa)) return ERROR_INT("dewa not written to stream", procName, 1); fclose(fp); return 0; } /*! * dewarpaWriteStream() * * Input: stream (opened for "wb") * dewa * Return: 0 if OK, 1 on error */ l_int32 dewarpaWriteStream(FILE *fp, L_DEWARPA *dewa) { l_int32 ndewarp, i, pageno; PROCNAME("dewarpaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!dewa) return ERROR_INT("dewa not defined", procName, 1); /* Generate the list of page numbers for which a model exists. * Note that no attempt is made to determine if the model is * valid, because that determination is associated with * using the model to remove the warping, which typically * can happen later, after all the models have been built. */ dewarpaListPages(dewa); if (!dewa->namodels) return ERROR_INT("dewa->namodels not made", procName, 1); ndewarp = numaGetCount(dewa->namodels); /* with actual page models */ fprintf(fp, "\nDewarpa Version %d\n", DEWARP_VERSION_NUMBER); fprintf(fp, "ndewarp = %d, maxpage = %d\n", ndewarp, dewa->maxpage); fprintf(fp, "sampling = %d, redfactor = %d, minlines = %d, maxdist = %d\n", dewa->sampling, dewa->redfactor, dewa->minlines, dewa->maxdist); fprintf(fp, "max_linecurv = %d, min_diff_linecurv = %d, max_diff_linecurv = %d\n", dewa->max_linecurv, dewa->min_diff_linecurv, dewa->max_diff_linecurv); fprintf(fp, "max_edgecurv = %d, max_diff_edgecurv = %d\n", dewa->max_edgecurv, dewa->max_diff_edgecurv); fprintf(fp, "fullmodel = %d\n", dewa->useboth); for (i = 0; i < ndewarp; i++) { numaGetIValue(dewa->namodels, i, &pageno); dewarpWriteStream(fp, dewarpaGetDewarp(dewa, pageno)); } return 0; } leptonica-1.70/src/dnabasic.c0000644000175000017500000012327012244221530014204 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dnabasic.c * * Dna creation, destruction, copy, clone, etc. * L_DNA *l_dnaCreate() * L_DNA *l_dnaCreateFromIArray() * L_DNA *l_dnaCreateFromDArray() * L_DNA *l_dnaMakeSequence() * void *l_dnaDestroy() * L_DNA *l_dnaCopy() * L_DNA *l_dnaClone() * l_int32 l_dnaEmpty() * * Dna: add/remove number and extend array * l_int32 l_dnaAddNumber() * static l_int32 l_dnaExtendArray() * l_int32 l_dnaInsertNumber() * l_int32 l_dnaRemoveNumber() * l_int32 l_dnaReplaceNumber() * * Dna accessors * l_int32 l_dnaGetCount() * l_int32 l_dnaSetCount() * l_int32 l_dnaGetIValue() * l_int32 l_dnaGetDValue() * l_int32 l_dnaSetValue() * l_int32 l_dnaShiftValue() * l_int32 *l_dnaGetIArray() * l_float64 *l_dnaGetDArray() * l_int32 l_dnaGetRefcount() * l_int32 l_dnaChangeRefcount() * l_int32 l_dnaGetParameters() * l_int32 l_dnaSetParameters() * l_int32 l_dnaCopyParameters() * * Serialize Dna for I/O * L_DNA *l_dnaRead() * L_DNA *l_dnaReadStream() * l_int32 l_dnaWrite() * l_int32 l_dnaWriteStream() * * Dnaa creation, destruction * L_DNAA *l_dnaaCreate() * void *l_dnaaDestroy() * * Add Dna to Dnaa * l_int32 l_dnaaAddDna() * l_int32 l_dnaaExtendArray() * * Dnaa accessors * l_int32 l_dnaaGetCount() * l_int32 l_dnaaGetDnaCount() * l_int32 l_dnaaGetNumberCount() * L_DNA *l_dnaaGetDna() * L_DNA *l_dnaaReplaceDna() * l_int32 l_dnaaGetValue() * l_int32 l_dnaaAddNumber() * * Serialize Dnaa for I/O * L_DNAA *l_dnaaRead() * L_DNAA *l_dnaaReadStream() * l_int32 l_dnaaWrite() * l_int32 l_dnaaWriteStream() * * Other Dna functions * L_DNA *l_dnaMakeDelta() * NUMA *l_dnaConvertToNuma() * L_DNA *numaConvertToDna() * l_int32 *l_dnaJoin() * * (1) The Dna is a struct holding an array of doubles. It can also * be used to store l_int32 values, up to the full precision * of int32. Use it whenever integers larger than a few million * need to be stored. * * (2) Always use the accessors in this file, never the fields directly. * * (3) Storing and retrieving numbers: * * * to append a new number to the array, use l_dnaAddNumber(). If * the number is an int, it will will automatically be converted * to l_float64 and stored. * * * to reset a value stored in the array, use l_dnaSetValue(). * * * to increment or decrement a value stored in the array, * use l_dnaShiftValue(). * * * to obtain a value from the array, use either l_dnaGetIValue() * or l_dnaGetDValue(), depending on whether you are retrieving * an integer or a float. This avoids doing an explicit cast, * such as * (a) return a l_float64 and cast it to an l_int32 * (b) cast the return directly to (l_float64 *) to * satisfy the function prototype, as in * l_dnaGetDValue(da, index, (l_float64 *)&ival); [ugly!] * * (4) int <--> double conversions: * * Conversions go automatically from l_int32 --> l_float64, * without loss of precision. You must cast (l_int32) * to go from l_float64 --> l_int32 because you're truncating * to the integer value. * * (5) As with other arrays in leptonica, the l_dna has both an allocated * size and a count of the stored numbers. When you add a number, it * goes on the end of the array, and causes a realloc if the array * is already filled. However, in situations where you want to * add numbers randomly into an array, such as when you build a * histogram, you must set the count of stored numbers in advance. * This is done with l_dnaSetCount(). If you set a count larger * than the allocated array, it does a realloc to the size requested. * * (6) In situations where the data in a l_dna correspond to a function * y(x), the values can be either at equal spacings in x or at * arbitrary spacings. For the former, we can represent all x values * by two parameters: startx (corresponding to y[0]) and delx * for the change in x for adjacent values y[i] and y[i+1]. * startx and delx are initialized to 0.0 and 1.0, rsp. * For arbitrary spacings, we use a second l_dna, and the two * l_dnas are typically denoted dnay and dnax. */ #include #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 50; /* n'importe quoi */ /* Static functions */ static l_int32 l_dnaExtendArray(L_DNA *da); static l_int32 l_dnaaExtendArray(L_DNAA *daa); /*--------------------------------------------------------------------------* * Dna creation, destruction, copy, clone, etc. * *--------------------------------------------------------------------------*/ /*! * l_dnaCreate() * * Input: size of number array to be alloc'd (0 for default) * Return: da, or null on error */ L_DNA * l_dnaCreate(l_int32 n) { L_DNA *da; PROCNAME("l_dnaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((da = (L_DNA *)CALLOC(1, sizeof(L_DNA))) == NULL) return (L_DNA *)ERROR_PTR("da not made", procName, NULL); if ((da->array = (l_float64 *)CALLOC(n, sizeof(l_float64))) == NULL) return (L_DNA *)ERROR_PTR("double array not made", procName, NULL); da->nalloc = n; da->n = 0; da->refcount = 1; da->startx = 0.0; da->delx = 1.0; return da; } /*! * l_dnaCreateFromIArray() * * Input: iarray (integer) * size (of the array) * Return: da, or null on error * * Notes: * (1) We can't insert this int array into the l_dna, because a l_dna * takes a double array. So this just copies the data from the * input array into the l_dna. The input array continues to be * owned by the caller. */ L_DNA * l_dnaCreateFromIArray(l_int32 *iarray, l_int32 size) { l_int32 i; L_DNA *da; PROCNAME("l_dnaCreateFromIArray"); if (!iarray) return (L_DNA *)ERROR_PTR("iarray not defined", procName, NULL); if (size <= 0) return (L_DNA *)ERROR_PTR("size must be > 0", procName, NULL); da = l_dnaCreate(size); for (i = 0; i < size; i++) l_dnaAddNumber(da, iarray[i]); return da; } /*! * l_dnaCreateFromDArray() * * Input: da (float) * size (of the array) * copyflag (L_INSERT or L_COPY) * Return: da, or null on error * * Notes: * (1) With L_INSERT, ownership of the input array is transferred * to the returned l_dna, and all @size elements are considered * to be valid. */ L_DNA * l_dnaCreateFromDArray(l_float64 *darray, l_int32 size, l_int32 copyflag) { l_int32 i; L_DNA *da; PROCNAME("l_dnaCreateFromDArray"); if (!darray) return (L_DNA *)ERROR_PTR("darray not defined", procName, NULL); if (size <= 0) return (L_DNA *)ERROR_PTR("size must be > 0", procName, NULL); if (copyflag != L_INSERT && copyflag != L_COPY) return (L_DNA *)ERROR_PTR("invalid copyflag", procName, NULL); da = l_dnaCreate(size); if (copyflag == L_INSERT) { if (da->array) FREE(da->array); da->array = darray; da->n = size; } else { /* just copy the contents */ for (i = 0; i < size; i++) l_dnaAddNumber(da, darray[i]); } return da; } /*! * l_dnaMakeSequence() * * Input: startval * increment * size (of sequence) * Return: l_dna of sequence of evenly spaced values, or null on error */ L_DNA * l_dnaMakeSequence(l_float64 startval, l_float64 increment, l_int32 size) { l_int32 i; l_float64 val; L_DNA *da; PROCNAME("l_dnaMakeSequence"); if ((da = l_dnaCreate(size)) == NULL) return (L_DNA *)ERROR_PTR("da not made", procName, NULL); for (i = 0; i < size; i++) { val = startval + i * increment; l_dnaAddNumber(da, val); } return da; } /*! * l_dnaDestroy() * * Input: &da () * Return: void * * Notes: * (1) Decrements the ref count and, if 0, destroys the l_dna. * (2) Always nulls the input ptr. */ void l_dnaDestroy(L_DNA **pda) { L_DNA *da; PROCNAME("l_dnaDestroy"); if (pda == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((da = *pda) == NULL) return; /* Decrement the ref count. If it is 0, destroy the l_dna. */ l_dnaChangeRefcount(da, -1); if (l_dnaGetRefcount(da) <= 0) { if (da->array) FREE(da->array); FREE(da); } *pda = NULL; return; } /*! * l_dnaCopy() * * Input: da * Return: copy of l_dna, or null on error */ L_DNA * l_dnaCopy(L_DNA *da) { l_int32 i; L_DNA *dac; PROCNAME("l_dnaCopy"); if (!da) return (L_DNA *)ERROR_PTR("da not defined", procName, NULL); if ((dac = l_dnaCreate(da->nalloc)) == NULL) return (L_DNA *)ERROR_PTR("dac not made", procName, NULL); dac->startx = da->startx; dac->delx = da->delx; for (i = 0; i < da->n; i++) l_dnaAddNumber(dac, da->array[i]); return dac; } /*! * l_dnaClone() * * Input: da * Return: ptr to same l_dna, or null on error */ L_DNA * l_dnaClone(L_DNA *da) { PROCNAME("l_dnaClone"); if (!da) return (L_DNA *)ERROR_PTR("da not defined", procName, NULL); l_dnaChangeRefcount(da, 1); return da; } /*! * l_dnaEmpty() * * Input: da * Return: 0 if OK; 1 on error * * Notes: * (1) This does not change the allocation of the array. * It just clears the number of stored numbers, so that * the array appears to be empty. */ l_int32 l_dnaEmpty(L_DNA *da) { PROCNAME("l_dnaEmpty"); if (!da) return ERROR_INT("da not defined", procName, 1); da->n = 0; return 0; } /*--------------------------------------------------------------------------* * Dna: add/remove number and extend array * *--------------------------------------------------------------------------*/ /*! * l_dnaAddNumber() * * Input: da * val (float or int to be added; stored as a float) * Return: 0 if OK, 1 on error */ l_int32 l_dnaAddNumber(L_DNA *da, l_float64 val) { l_int32 n; PROCNAME("l_dnaAddNumber"); if (!da) return ERROR_INT("da not defined", procName, 1); n = l_dnaGetCount(da); if (n >= da->nalloc) l_dnaExtendArray(da); da->array[n] = val; da->n++; return 0; } /*! * l_dnaExtendArray() * * Input: da * Return: 0 if OK, 1 on error */ static l_int32 l_dnaExtendArray(L_DNA *da) { PROCNAME("l_dnaExtendArray"); if (!da) return ERROR_INT("da not defined", procName, 1); if ((da->array = (l_float64 *)reallocNew((void **)&da->array, sizeof(l_float64) * da->nalloc, 2 * sizeof(l_float64) * da->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); da->nalloc *= 2; return 0; } /*! * l_dnaInsertNumber() * * Input: da * index (location in da to insert new value) * val (float64 or integer to be added) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts da[i] --> da[i + 1] for all i >= index, * and then inserts val as da[index]. * (2) It should not be used repeatedly on large arrays, * because the function is O(n). * */ l_int32 l_dnaInsertNumber(L_DNA *da, l_int32 index, l_float64 val) { l_int32 i, n; PROCNAME("l_dnaInsertNumber"); if (!da) return ERROR_INT("da not defined", procName, 1); n = l_dnaGetCount(da); if (index < 0 || index > n) return ERROR_INT("index not in {0...n}", procName, 1); if (n >= da->nalloc) l_dnaExtendArray(da); for (i = n; i > index; i--) da->array[i] = da->array[i - 1]; da->array[index] = val; da->n++; return 0; } /*! * l_dnaRemoveNumber() * * Input: da * index (element to be removed) * Return: 0 if OK, 1 on error * * Notes: * (1) This shifts da[i] --> da[i - 1] for all i > index. * (2) It should not be used repeatedly on large arrays, * because the function is O(n). */ l_int32 l_dnaRemoveNumber(L_DNA *da, l_int32 index) { l_int32 i, n; PROCNAME("l_dnaRemoveNumber"); if (!da) return ERROR_INT("da not defined", procName, 1); n = l_dnaGetCount(da); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); for (i = index + 1; i < n; i++) da->array[i - 1] = da->array[i]; da->n--; return 0; } /*! * l_dnaReplaceNumber() * * Input: da * index (element to be replaced) * val (new value to replace old one) * Return: 0 if OK, 1 on error */ l_int32 l_dnaReplaceNumber(L_DNA *da, l_int32 index, l_float64 val) { l_int32 n; PROCNAME("l_dnaReplaceNumber"); if (!da) return ERROR_INT("da not defined", procName, 1); n = l_dnaGetCount(da); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); da->array[index] = val; return 0; } /*----------------------------------------------------------------------* * Dna accessors * *----------------------------------------------------------------------*/ /*! * l_dnaGetCount() * * Input: da * Return: count, or 0 if no numbers or on error */ l_int32 l_dnaGetCount(L_DNA *da) { PROCNAME("l_dnaGetCount"); if (!da) return ERROR_INT("da not defined", procName, 0); return da->n; } /*! * l_dnaSetCount() * * Input: da * newcount * Return: 0 if OK, 1 on error * * Notes: * (1) If newcount <= da->nalloc, this resets da->n. * Using newcount = 0 is equivalent to l_dnaEmpty(). * (2) If newcount > da->nalloc, this causes a realloc * to a size da->nalloc = newcount. * (3) All the previously unused values in da are set to 0.0. */ l_int32 l_dnaSetCount(L_DNA *da, l_int32 newcount) { PROCNAME("l_dnaSetCount"); if (!da) return ERROR_INT("da not defined", procName, 1); if (newcount > da->nalloc) { if ((da->array = (l_float64 *)reallocNew((void **)&da->array, sizeof(l_float64) * da->nalloc, sizeof(l_float64) * newcount)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); da->nalloc = newcount; } da->n = newcount; return 0; } /*! * l_dnaGetDValue() * * Input: da * index (into l_dna) * &val ( double value; 0.0 on error) * Return: 0 if OK; 1 on error * * Notes: * (1) Caller may need to check the function return value to * decide if a 0.0 in the returned ival is valid. */ l_int32 l_dnaGetDValue(L_DNA *da, l_int32 index, l_float64 *pval) { PROCNAME("l_dnaGetDValue"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (!da) return ERROR_INT("da not defined", procName, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", procName, 1); *pval = da->array[index]; return 0; } /*! * l_dnaGetIValue() * * Input: da * index (into l_dna) * &ival ( integer value; 0 on error) * Return: 0 if OK; 1 on error * * Notes: * (1) Caller may need to check the function return value to * decide if a 0 in the returned ival is valid. */ l_int32 l_dnaGetIValue(L_DNA *da, l_int32 index, l_int32 *pival) { l_float64 val; PROCNAME("l_dnaGetIValue"); if (!pival) return ERROR_INT("&ival not defined", procName, 1); *pival = 0; if (!da) return ERROR_INT("da not defined", procName, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", procName, 1); val = da->array[index]; *pival = (l_int32)(val + L_SIGN(val) * 0.5); return 0; } /*! * l_dnaSetValue() * * Input: da * index (to element to be set) * val (to set element) * Return: 0 if OK; 1 on error */ l_int32 l_dnaSetValue(L_DNA *da, l_int32 index, l_float64 val) { PROCNAME("l_dnaSetValue"); if (!da) return ERROR_INT("da not defined", procName, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", procName, 1); da->array[index] = val; return 0; } /*! * l_dnaShiftValue() * * Input: da * index (to element to change relative to the current value) * diff (increment if diff > 0 or decrement if diff < 0) * Return: 0 if OK; 1 on error */ l_int32 l_dnaShiftValue(L_DNA *da, l_int32 index, l_float64 diff) { PROCNAME("l_dnaShiftValue"); if (!da) return ERROR_INT("da not defined", procName, 1); if (index < 0 || index >= da->n) return ERROR_INT("index not valid", procName, 1); da->array[index] += diff; return 0; } /*! * l_dnaGetIArray() * * Input: da * Return: a copy of the bare internal array, integerized * by rounding, or null on error * Notes: * (1) A copy of the array is made, because we need to * generate an integer array from the bare double array. * The caller is responsible for freeing the array. * (2) The array size is determined by the number of stored numbers, * not by the size of the allocated array in the l_dna. * (3) This function is provided to simplify calculations * using the bare internal array, rather than continually * calling accessors on the l_dna. It is typically used * on an array of size 256. */ l_int32 * l_dnaGetIArray(L_DNA *da) { l_int32 i, n, ival; l_int32 *array; PROCNAME("l_dnaGetIArray"); if (!da) return (l_int32 *)ERROR_PTR("da not defined", procName, NULL); n = l_dnaGetCount(da); if ((array = (l_int32 *)CALLOC(n, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("array not made", procName, NULL); for (i = 0; i < n; i++) { l_dnaGetIValue(da, i, &ival); array[i] = ival; } return array; } /*! * l_dnaGetDArray() * * Input: da * copyflag (L_NOCOPY or L_COPY) * Return: either the bare internal array or a copy of it, * or null on error * * Notes: * (1) If copyflag == L_COPY, it makes a copy which the caller * is responsible for freeing. Otherwise, it operates * directly on the bare array of the l_dna. * (2) Very important: for L_NOCOPY, any writes to the array * will be in the l_dna. Do not write beyond the size of * the count field, because it will not be accessable * from the l_dna! If necessary, be sure to set the count * field to a larger number (such as the alloc size) * BEFORE calling this function. Creating with l_dnaMakeConstant() * is another way to insure full initialization. */ l_float64 * l_dnaGetDArray(L_DNA *da, l_int32 copyflag) { l_int32 i, n; l_float64 *array; PROCNAME("l_dnaGetDArray"); if (!da) return (l_float64 *)ERROR_PTR("da not defined", procName, NULL); if (copyflag == L_NOCOPY) { array = da->array; } else { /* copyflag == L_COPY */ n = l_dnaGetCount(da); if ((array = (l_float64 *)CALLOC(n, sizeof(l_float64))) == NULL) return (l_float64 *)ERROR_PTR("array not made", procName, NULL); for (i = 0; i < n; i++) array[i] = da->array[i]; } return array; } /*! * l_dnaGetRefCount() * * Input: da * Return: refcount, or UNDEF on error */ l_int32 l_dnaGetRefcount(L_DNA *da) { PROCNAME("l_dnaGetRefcount"); if (!da) return ERROR_INT("da not defined", procName, UNDEF); return da->refcount; } /*! * l_dnaChangeRefCount() * * Input: da * delta (change to be applied) * Return: 0 if OK, 1 on error */ l_int32 l_dnaChangeRefcount(L_DNA *da, l_int32 delta) { PROCNAME("l_dnaChangeRefcount"); if (!da) return ERROR_INT("da not defined", procName, 1); da->refcount += delta; return 0; } /*! * l_dnaGetParameters() * * Input: da * &startx ( startx) * &delx ( delx) * Return: 0 if OK, 1 on error */ l_int32 l_dnaGetParameters(L_DNA *da, l_float64 *pstartx, l_float64 *pdelx) { PROCNAME("l_dnaGetParameters"); if (!da) return ERROR_INT("da not defined", procName, 1); if (pstartx) *pstartx = da->startx; if (pdelx) *pdelx = da->delx; return 0; } /*! * l_dnaSetParameters() * * Input: da * startx (x value corresponding to da[0]) * delx (difference in x values for the situation where the * elements of da correspond to the evaulation of a * function at equal intervals of size @delx) * Return: 0 if OK, 1 on error */ l_int32 l_dnaSetParameters(L_DNA *da, l_float64 startx, l_float64 delx) { PROCNAME("l_dnaSetParameters"); if (!da) return ERROR_INT("da not defined", procName, 1); da->startx = startx; da->delx = delx; return 0; } /*! * l_dnaCopyParameters() * * Input: dad (destination DNuma) * das (source DNuma) * Return: 0 if OK, 1 on error */ l_int32 l_dnaCopyParameters(L_DNA *dad, L_DNA *das) { l_float64 start, binsize; PROCNAME("l_dnaCopyParameters"); if (!das || !dad) return ERROR_INT("das and dad not both defined", procName, 1); l_dnaGetParameters(das, &start, &binsize); l_dnaSetParameters(dad, start, binsize); return 0; } /*----------------------------------------------------------------------* * Serialize Dna for I/O * *----------------------------------------------------------------------*/ /*! * l_dnaRead() * * Input: filename * Return: da, or null on error */ L_DNA * l_dnaRead(const char *filename) { FILE *fp; L_DNA *da; PROCNAME("l_dnaRead"); if (!filename) return (L_DNA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DNA *)ERROR_PTR("stream not opened", procName, NULL); if ((da = l_dnaReadStream(fp)) == NULL) { fclose(fp); return (L_DNA *)ERROR_PTR("da not read", procName, NULL); } fclose(fp); return da; } /*! * l_dnaReadStream() * * Input: stream * Return: da, or null on error */ L_DNA * l_dnaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; l_float64 val, startx, delx; L_DNA *da; PROCNAME("l_dnaReadStream"); if (!fp) return (L_DNA *)ERROR_PTR("stream not defined", procName, NULL); ret = fscanf(fp, "\nL_Dna Version %d\n", &version); if (ret != 1) return (L_DNA *)ERROR_PTR("not a l_dna file", procName, NULL); if (version != DNA_VERSION_NUMBER) return (L_DNA *)ERROR_PTR("invalid l_dna version", procName, NULL); if (fscanf(fp, "Number of numbers = %d\n", &n) != 1) return (L_DNA *)ERROR_PTR("invalid number of numbers", procName, NULL); if ((da = l_dnaCreate(n)) == NULL) return (L_DNA *)ERROR_PTR("da not made", procName, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, " [%d] = %lf\n", &index, &val) != 2) return (L_DNA *)ERROR_PTR("bad input data", procName, NULL); l_dnaAddNumber(da, val); } /* Optional data */ if (fscanf(fp, "startx = %lf, delx = %lf\n", &startx, &delx) == 2) l_dnaSetParameters(da, startx, delx); return da; } /*! * l_dnaWrite() * * Input: filename, da * Return: 0 if OK, 1 on error */ l_int32 l_dnaWrite(const char *filename, L_DNA *da) { FILE *fp; PROCNAME("l_dnaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!da) return ERROR_INT("da not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (l_dnaWriteStream(fp, da)) return ERROR_INT("da not written to stream", procName, 1); fclose(fp); return 0; } /*! * l_dnaWriteStream() * * Input: stream, da * Return: 0 if OK, 1 on error */ l_int32 l_dnaWriteStream(FILE *fp, L_DNA *da) { l_int32 i, n; l_float64 startx, delx; PROCNAME("l_dnaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!da) return ERROR_INT("da not defined", procName, 1); n = l_dnaGetCount(da); fprintf(fp, "\nL_Dna Version %d\n", DNA_VERSION_NUMBER); fprintf(fp, "Number of numbers = %d\n", n); for (i = 0; i < n; i++) fprintf(fp, " [%d] = %lf\n", i, da->array[i]); fprintf(fp, "\n"); /* Optional data */ l_dnaGetParameters(da, &startx, &delx); if (startx != 0.0 || delx != 1.0) fprintf(fp, "startx = %lf, delx = %lf\n", startx, delx); return 0; } /*--------------------------------------------------------------------------* * Dnaa creation, destruction * *--------------------------------------------------------------------------*/ /*! * l_dnaaCreate() * * Input: size of l_dna ptr array to be alloc'd (0 for default) * Return: daa, or null on error * */ L_DNAA * l_dnaaCreate(l_int32 n) { L_DNAA *daa; PROCNAME("l_dnaaCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((daa = (L_DNAA *)CALLOC(1, sizeof(L_DNAA))) == NULL) return (L_DNAA *)ERROR_PTR("daa not made", procName, NULL); if ((daa->dna = (L_DNA **)CALLOC(n, sizeof(L_DNA *))) == NULL) return (L_DNAA *)ERROR_PTR("l_dna ptr array not made", procName, NULL); daa->nalloc = n; daa->n = 0; return daa; } /*! * l_dnaaDestroy() * * Input: &dnaa * Return: void */ void l_dnaaDestroy(L_DNAA **pdaa) { l_int32 i; L_DNAA *daa; PROCNAME("l_dnaaDestroy"); if (pdaa == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((daa = *pdaa) == NULL) return; for (i = 0; i < daa->n; i++) l_dnaDestroy(&daa->dna[i]); FREE(daa->dna); FREE(daa); *pdaa = NULL; return; } /*--------------------------------------------------------------------------* * Add Dna to Dnaa * *--------------------------------------------------------------------------*/ /*! * l_dnaaAddDna() * * Input: daa * da (to be added) * copyflag (L_INSERT, L_COPY, L_CLONE) * Return: 0 if OK, 1 on error */ l_int32 l_dnaaAddDna(L_DNAA *daa, L_DNA *da, l_int32 copyflag) { l_int32 n; L_DNA *dac; PROCNAME("l_dnaaAddDna"); if (!daa) return ERROR_INT("daa not defined", procName, 1); if (!da) return ERROR_INT("da not defined", procName, 1); if (copyflag == L_INSERT) { dac = da; } else if (copyflag == L_COPY) { if ((dac = l_dnaCopy(da)) == NULL) return ERROR_INT("dac not made", procName, 1); } else if (copyflag == L_CLONE) { dac = l_dnaClone(da); } else { return ERROR_INT("invalid copyflag", procName, 1); } n = l_dnaaGetCount(daa); if (n >= daa->nalloc) l_dnaaExtendArray(daa); daa->dna[n] = dac; daa->n++; return 0; } /*! * l_dnaaExtendArray() * * Input: daa * Return: 0 if OK, 1 on error */ static l_int32 l_dnaaExtendArray(L_DNAA *daa) { PROCNAME("l_dnaaExtendArray"); if (!daa) return ERROR_INT("daa not defined", procName, 1); if ((daa->dna = (L_DNA **)reallocNew((void **)&daa->dna, sizeof(L_DNA *) * daa->nalloc, 2 * sizeof(L_DNA *) * daa->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); daa->nalloc *= 2; return 0; } /*----------------------------------------------------------------------* * DNumaa accessors * *----------------------------------------------------------------------*/ /*! * l_dnaaGetCount() * * Input: daa * Return: count (number of l_dna), or 0 if no l_dna or on error */ l_int32 l_dnaaGetCount(L_DNAA *daa) { PROCNAME("l_dnaaGetCount"); if (!daa) return ERROR_INT("daa not defined", procName, 0); return daa->n; } /*! * l_dnaaGetDnaCount() * * Input: daa * index (of l_dna in daa) * Return: count of numbers in the referenced l_dna, or 0 on error. */ l_int32 l_dnaaGetDnaCount(L_DNAA *daa, l_int32 index) { PROCNAME("l_dnaaGetDnaCount"); if (!daa) return ERROR_INT("daa not defined", procName, 0); if (index < 0 || index >= daa->n) return ERROR_INT("invalid index into daa", procName, 0); return l_dnaGetCount(daa->dna[index]); } /*! * l_dnaaGetNumberCount() * * Input: daa * Return: count (total number of numbers in the l_dnaa), * or 0 if no numbers or on error */ l_int32 l_dnaaGetNumberCount(L_DNAA *daa) { L_DNA *da; l_int32 n, sum, i; PROCNAME("l_dnaaGetNumberCount"); if (!daa) return ERROR_INT("daa not defined", procName, 0); n = l_dnaaGetCount(daa); for (sum = 0, i = 0; i < n; i++) { da = l_dnaaGetDna(daa, i, L_CLONE); sum += l_dnaGetCount(da); l_dnaDestroy(&da); } return sum; } /*! * l_dnaaGetDna() * * Input: daa * index (to the index-th l_dna) * accessflag (L_COPY or L_CLONE) * Return: l_dna, or null on error */ L_DNA * l_dnaaGetDna(L_DNAA *daa, l_int32 index, l_int32 accessflag) { PROCNAME("l_dnaaGetDna"); if (!daa) return (L_DNA *)ERROR_PTR("daa not defined", procName, NULL); if (index < 0 || index >= daa->n) return (L_DNA *)ERROR_PTR("index not valid", procName, NULL); if (accessflag == L_COPY) return l_dnaCopy(daa->dna[index]); else if (accessflag == L_CLONE) return l_dnaClone(daa->dna[index]); else return (L_DNA *)ERROR_PTR("invalid accessflag", procName, NULL); } /*! * l_dnaaReplaceDna() * * Input: daa * index (to the index-th l_dna) * l_dna (insert and replace any existing one) * Return: 0 if OK, 1 on error * * Notes: * (1) Any existing l_dna is destroyed, and the input one * is inserted in its place. * (2) If the index is invalid, return 1 (error) */ l_int32 l_dnaaReplaceDna(L_DNAA *daa, l_int32 index, L_DNA *da) { l_int32 n; PROCNAME("l_dnaaReplaceDna"); if (!daa) return ERROR_INT("daa not defined", procName, 1); if (!da) return ERROR_INT("da not defined", procName, 1); n = l_dnaaGetCount(daa); if (index < 0 || index >= n) return ERROR_INT("index not valid", procName, 1); l_dnaDestroy(&daa->dna[index]); daa->dna[index] = da; return 0; } /*! * l_dnaaGetValue() * * Input: daa * i (index of l_dna within l_dnaa) * j (index into l_dna) * val ( double value) * Return: 0 if OK, 1 on error */ l_int32 l_dnaaGetValue(L_DNAA *daa, l_int32 i, l_int32 j, l_float64 *pval) { l_int32 n; L_DNA *da; PROCNAME("l_dnaaGetValue"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (!daa) return ERROR_INT("daa not defined", procName, 1); n = l_dnaaGetCount(daa); if (i < 0 || i >= n) return ERROR_INT("invalid index into daa", procName, 1); da = daa->dna[i]; if (j < 0 || j >= da->n) return ERROR_INT("invalid index into da", procName, 1); *pval = da->array[j]; return 0; } /*! * l_dnaaAddNumber() * * Input: daa * index (of l_dna within l_dnaa) * val (number to be added; stored as a double) * Return: 0 if OK, 1 on error * * Notes: * (1) Adds to an existing l_dna only. */ l_int32 l_dnaaAddNumber(L_DNAA *daa, l_int32 index, l_float64 val) { l_int32 n; L_DNA *da; PROCNAME("l_dnaaAddNumber"); if (!daa) return ERROR_INT("daa not defined", procName, 1); n = l_dnaaGetCount(daa); if (index < 0 || index >= n) return ERROR_INT("invalid index in daa", procName, 1); da = l_dnaaGetDna(daa, index, L_CLONE); l_dnaAddNumber(da, val); l_dnaDestroy(&da); return 0; } /*----------------------------------------------------------------------* * Serialize Dna for I/O * *----------------------------------------------------------------------*/ /*! * l_dnaaRead() * * Input: filename * Return: daa, or null on error */ L_DNAA * l_dnaaRead(const char *filename) { FILE *fp; L_DNAA *daa; PROCNAME("l_dnaaRead"); if (!filename) return (L_DNAA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (L_DNAA *)ERROR_PTR("stream not opened", procName, NULL); if ((daa = l_dnaaReadStream(fp)) == NULL) { fclose(fp); return (L_DNAA *)ERROR_PTR("daa not read", procName, NULL); } fclose(fp); return daa; } /*! * l_dnaaReadStream() * * Input: stream * Return: daa, or null on error */ L_DNAA * l_dnaaReadStream(FILE *fp) { l_int32 i, n, index, ret, version; L_DNA *da; L_DNAA *daa; PROCNAME("l_dnaaReadStream"); if (!fp) return (L_DNAA *)ERROR_PTR("stream not defined", procName, NULL); ret = fscanf(fp, "\nL_Dnaa Version %d\n", &version); if (ret != 1) return (L_DNAA *)ERROR_PTR("not a l_dna file", procName, NULL); if (version != DNA_VERSION_NUMBER) return (L_DNAA *)ERROR_PTR("invalid l_dnaa version", procName, NULL); if (fscanf(fp, "Number of L_Dna = %d\n\n", &n) != 1) return (L_DNAA *)ERROR_PTR("invalid number of l_dna", procName, NULL); if ((daa = l_dnaaCreate(n)) == NULL) return (L_DNAA *)ERROR_PTR("daa not made", procName, NULL); for (i = 0; i < n; i++) { if (fscanf(fp, "L_Dna[%d]:", &index) != 1) return (L_DNAA *)ERROR_PTR("invalid l_dna header", procName, NULL); if ((da = l_dnaReadStream(fp)) == NULL) return (L_DNAA *)ERROR_PTR("da not made", procName, NULL); l_dnaaAddDna(daa, da, L_INSERT); } return daa; } /*! * l_dnaaWrite() * * Input: filename, daa * Return: 0 if OK, 1 on error */ l_int32 l_dnaaWrite(const char *filename, L_DNAA *daa) { FILE *fp; PROCNAME("l_dnaaWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!daa) return ERROR_INT("daa not defined", procName, 1); if ((fp = fopenWriteStream(filename, "w")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (l_dnaaWriteStream(fp, daa)) return ERROR_INT("daa not written to stream", procName, 1); fclose(fp); return 0; } /*! * l_dnaaWriteStream() * * Input: stream, daa * Return: 0 if OK, 1 on error */ l_int32 l_dnaaWriteStream(FILE *fp, L_DNAA *daa) { l_int32 i, n; L_DNA *da; PROCNAME("l_dnaaWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!daa) return ERROR_INT("daa not defined", procName, 1); n = l_dnaaGetCount(daa); fprintf(fp, "\nL_Dnaa Version %d\n", DNA_VERSION_NUMBER); fprintf(fp, "Number of L_Dna = %d\n\n", n); for (i = 0; i < n; i++) { if ((da = l_dnaaGetDna(daa, i, L_CLONE)) == NULL) return ERROR_INT("da not found", procName, 1); fprintf(fp, "L_Dna[%d]:", i); l_dnaWriteStream(fp, da); l_dnaDestroy(&da); } return 0; } /*----------------------------------------------------------------------* * Other Dna functions * *----------------------------------------------------------------------*/ /*! * l_dnaMakeDelta() * * Input: das (input l_dna) * Return: dad (of difference values val[i+1] - val[i]), * or null on error */ L_DNA * l_dnaMakeDelta(L_DNA *das) { l_int32 i, n, prev, cur; L_DNA *dad; PROCNAME("l_dnaMakeDelta"); if (!das) return (L_DNA *)ERROR_PTR("das not defined", procName, NULL); n = l_dnaGetCount(das); dad = l_dnaCreate(n - 1); prev = 0; for (i = 1; i < n; i++) { l_dnaGetIValue(das, i, &cur); l_dnaAddNumber(dad, cur - prev); prev = cur; } return dad; } /*! * l_dnaConvertToNuma() * * Input: da * Return: na, or null on error */ NUMA * l_dnaConvertToNuma(L_DNA *da) { l_int32 i, n; l_float64 val; NUMA *na; PROCNAME("l_dnaConvertToNuma"); if (!da) return (NUMA *)ERROR_PTR("da not defined", procName, NULL); n = l_dnaGetCount(da); na = numaCreate(n); for (i = 0; i < n; i++) { l_dnaGetDValue(da, i, &val); numaAddNumber(na, val); } return na; } /*! * numaConvertToDna * * Input: na * Return: da, or null on error */ L_DNA * numaConvertToDna(NUMA *na) { l_int32 i, n; l_float32 val; L_DNA *da; PROCNAME("numaConvertToDna"); if (!na) return (L_DNA *)ERROR_PTR("na not defined", procName, NULL); n = numaGetCount(na); da = l_dnaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); l_dnaAddNumber(da, val); } return da; } /*! * l_dnaJoin() * * Input: dad (dest dma; add to this one) * das ( source dna; add from this one) * istart (starting index in das) * iend (ending index in das; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) istart < 0 is taken to mean 'read from the start' (istart = 0) * (2) iend < 0 means 'read to the end' * (3) if das == NULL, this is a no-op */ l_int32 l_dnaJoin(L_DNA *dad, L_DNA *das, l_int32 istart, l_int32 iend) { l_int32 n, i; l_float64 val; PROCNAME("l_dnaJoin"); if (!dad) return ERROR_INT("dad not defined", procName, 1); if (!das) return 0; if (istart < 0) istart = 0; n = l_dnaGetCount(das); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", procName, 1); for (i = istart; i <= iend; i++) { l_dnaGetDValue(das, i, &val); l_dnaAddNumber(dad, val); } return 0; } leptonica-1.70/src/finditalic.c0000640000175000017500000002277112244203713014551 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * finditalic.c * * l_int32 pixItalicWords() * * Locate italic words. This is an example of the use of * hit-miss binary morphology with binary reconstruction * (filling from a seed into a mask). * * To see how this works, run with prog/italic.png. */ #include "allheaders.h" /* --------------------------------------------------------------- * * These hit-miss sels match the slanted edge of italic characters * * --------------------------------------------------------------- */ static const char *str_ital1 = " o x" " " " " " " " o x " " " " C " " " " o x " " " " " " " "o x "; static const char *str_ital2 = " o x" " " " " " o x " " C " " " " o x " " " " " "o x "; /* ------------------------------------------------------------- * * This sel removes noise that is not oriented as a slanted edge * * ------------------------------------------------------------- */ static const char *str_ital3 = " x" "Cx" "x " "x "; /*! * pixItalicWords() * * Input: pixs (1 bpp) * boxaw ( word bounding boxes; can be NULL) * pixw ( word box mask; can be NULL) * &boxa ( boxa of italic words) * debugflag (1 for debug output; 0 otherwise) * Return: 0 if OK, 1 on error * * Notes: * (1) You can input the bounding boxes for the words in one of * two forms: as bounding boxes (@boxaw) or as a word mask with * the word bounding boxes filled (@pixw). For example, * to compute @pixw, you can use pixWordMaskByDilation(). * (2) Alternatively, you can set both of these inputs to NULL, * in which case the word mask is generated here. This is * done by dilating and closing the input image to connect * letters within a word, while leaving the words separated. * The parameters are chosen under the assumption that the * input is 10 to 12 pt text, scanned at about 300 ppi. * (3) sel_ital1 and sel_ital2 detect the right edges that are * nearly vertical, at approximately the angle of italic * strokes. We use the right edge to avoid getting seeds * from lower-case 'y'. The typical italic slant has a smaller * angle with the vertical than the 'W', so in most cases we * will not trigger on the slanted lines in the 'W'. * (4) Note that sel_ital2 is shorter than sel_ital1. It is * more appropriate for a typical font scanned at 200 ppi. */ l_int32 pixItalicWords(PIX *pixs, BOXA *boxaw, PIX *pixw, BOXA **pboxa, l_int32 debugflag) { char opstring[32]; l_int32 size; BOXA *boxa; PIX *pixsd, *pixm, *pixd; SEL *sel_ital1, *sel_ital2, *sel_ital3; PROCNAME("pixItalicWords"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pboxa) return ERROR_INT("&boxa not defined", procName, 1); if (boxaw && pixw) return ERROR_INT("both boxaw and pixw are defined", procName, 1); sel_ital1 = selCreateFromString(str_ital1, 13, 6, NULL); sel_ital2 = selCreateFromString(str_ital2, 10, 6, NULL); sel_ital3 = selCreateFromString(str_ital3, 4, 2, NULL); /* Make the italic seed: extract with HMT; remove noise. * The noise removal close/open is important to exclude * situations where a small slanted line accidentally * matches sel_ital1. */ pixsd = pixHMT(NULL, pixs, sel_ital1); pixClose(pixsd, pixsd, sel_ital3); pixOpen(pixsd, pixsd, sel_ital3); /* Make the word mask. Use input boxes or mask if given. */ if (boxaw) { pixm = pixCreateTemplate(pixs); pixMaskBoxa(pixm, pixm, boxaw, L_SET_PIXELS); } else if (pixw) { pixm = pixClone(pixw); } else { pixWordMaskByDilation(pixs, 20, NULL, &size); L_INFO("dilation size = %d\n", procName, size); snprintf(opstring, sizeof(opstring), "d1.5 + c%d.1", size); pixm = pixMorphSequence(pixs, opstring, 0); } /* Binary reconstruction to fill in those word mask * components for which there is at least one seed pixel. */ pixd = pixSeedfillBinary(NULL, pixsd, pixm, 8); boxa = pixConnComp(pixd, NULL, 8); *pboxa = boxa; if (debugflag) { /* Save results at at 2x reduction */ l_int32 res, upper; BOXA *boxat; GPLOT *gplot; NUMA *na; PIXA *pad; PIX *pix1, *pix2, *pix3; pad = pixaCreate(0); boxat = pixConnComp(pixm, NULL, 8); boxaWrite("/tmp/ital.ba", boxat); pixSaveTiledOutline(pixs, pad, 0.5, 1, 20, 2, 32); /* orig */ pixSaveTiledOutline(pixsd, pad, 0.5, 1, 20, 2, 0); /* seed */ pix1 = pixConvertTo32(pixm); pixRenderBoxaArb(pix1, boxat, 3, 255, 0, 0); pixSaveTiledOutline(pix1, pad, 0.5, 1, 20, 2, 0); /* mask + outline */ pixDestroy(&pix1); pixSaveTiledOutline(pixd, pad, 0.5, 1, 20, 2, 0); /* ital mask */ pix1 = pixConvertTo32(pixs); pixRenderBoxaArb(pix1, boxa, 3, 255, 0, 0); pixSaveTiledOutline(pix1, pad, 0.5, 1, 20, 2, 0); /* orig + outline */ pixDestroy(&pix1); pix1 = pixCreateTemplate(pixs); pix2 = pixSetBlackOrWhiteBoxa(pix1, boxa, L_SET_BLACK); pixCopy(pix1, pixs); pix3 = pixDilateBrick(NULL, pixs, 3, 3); pixCombineMasked(pix1, pix3, pix2); pixSaveTiledOutline(pix1, pad, 0.5, 1, 20, 2, 0); /* ital bolded */ pixDestroy(&pix1); pixDestroy(&pix2); pixDestroy(&pix3); pix2 = pixaDisplay(pad, 0, 0); pixWrite("/tmp/ital.png", pix2, IFF_PNG); pixDestroy(&pix2); /* Assuming the image represents 6 inches of actual page width, * the pixs resolution is approximately * (width of pixs in pixels) / 6 * and the images have been saved at half this resolution. */ res = pixGetWidth(pixs) / 12; L_INFO("resolution = %d\n", procName, res); pixaConvertToPdf(pad, res, 1.0, L_FLATE_ENCODE, 75, "Italic Finder", "/tmp/ital.pdf"); pixaDestroy(&pad); boxaDestroy(&boxat); /* Plot histogram of horizontal white run sizes. A small * initial vertical dilation removes most runs that are neither * inter-character nor inter-word. The larger first peak is * from inter-character runs, and the smaller second peak is * from inter-word runs. */ pix1 = pixDilateBrick(NULL, pixs, 1, 15); upper = L_MAX(30, 3 * size); na = pixRunHistogramMorph(pix1, L_RUN_OFF, L_HORIZ, upper); pixDestroy(&pix1); gplot = gplotCreate("/tmp/runhisto", GPLOT_PNG, "Histogram of horizontal runs of white pixels, vs length", "run length", "number of runs"); gplotAddPlot(gplot, NULL, na, GPLOT_LINES, "plot1"); gplotMakeOutput(gplot); gplotDestroy(&gplot); numaDestroy(&na); } selDestroy(&sel_ital1); selDestroy(&sel_ital2); selDestroy(&sel_ital3); pixDestroy(&pixsd); pixDestroy(&pixm); pixDestroy(&pixd); return 0; } leptonica-1.70/src/seedfilllow.c0000640000175000017500000021627412244745015014765 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * seedfilllow.c * * Seedfill: * Gray seedfill (source: Luc Vincent:fast-hybrid-grayscale-reconstruction) * void seedfillBinaryLow() * void seedfillGrayLow() * void seedfillGrayInvLow() * void seedfillGrayLowSimple() * void seedfillGrayInvLowSimple() * * Distance function: * void distanceFunctionLow() * * Seed spread: * void seedspreadLow() * */ #include #include "allheaders.h" struct L_Pixel { l_int32 x; l_int32 y; }; typedef struct L_Pixel L_PIXEL; /*-----------------------------------------------------------------------* * Vincent's Iterative Binary Seedfill * *-----------------------------------------------------------------------*/ /*! * seedfillBinaryLow() * * Notes: * (1) This is an in-place fill, where the seed image is * filled, clipping to the filling mask, in one full * cycle of UL -> LR and LR -> UL raster scans. * (2) Assume the mask is a filling mask, not a blocking mask. * (3) Assume that the RHS pad bits of the mask * are properly set to 0. * (4) Clip to the smallest dimensions to avoid invalid reads. */ void seedfillBinaryLow(l_uint32 *datas, l_int32 hs, l_int32 wpls, l_uint32 *datam, l_int32 hm, l_int32 wplm, l_int32 connectivity) { l_int32 i, j, h, wpl; l_uint32 word, mask; l_uint32 wordabove, wordleft, wordbelow, wordright; l_uint32 wordprev; /* test against this in previous iteration */ l_uint32 *lines, *linem; PROCNAME("seedfillBinaryLow"); h = L_MIN(hs, hm); wpl = L_MIN(wpls, wplm); switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wpl; j++) { word = *(lines + j); mask = *(linem + j); /* OR from word above and from word to left; mask */ if (i > 0) { wordabove = *(lines - wpls + j); word |= wordabove; } if (j > 0) { wordleft = *(lines + j - 1); word |= wordleft << 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } /* LR --> UL scan */ for (i = h - 1; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = wpl - 1; j >= 0; j--) { word = *(lines + j); mask = *(linem + j); /* OR from word below and from word to right; mask */ if (i < h - 1) { wordbelow = *(lines + wpls + j); word |= wordbelow; } if (j < wpl - 1) { wordright = *(lines + j + 1); word |= wordright >> 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } break; case 8: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < wpl; j++) { word = *(lines + j); mask = *(linem + j); /* OR from words above and from word to left; mask */ if (i > 0) { wordabove = *(lines - wpls + j); word |= (wordabove | (wordabove << 1) | (wordabove >> 1)); if (j > 0) word |= (*(lines - wpls + j - 1)) << 31; if (j < wpl - 1) word |= (*(lines - wpls + j + 1)) >> 31; } if (j > 0) { wordleft = *(lines + j - 1); word |= wordleft << 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } /* LR --> UL scan */ for (i = h - 1; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = wpl - 1; j >= 0; j--) { word = *(lines + j); mask = *(linem + j); /* OR from words below and from word to right; mask */ if (i < h - 1) { wordbelow = *(lines + wpls + j); word |= (wordbelow | (wordbelow << 1) | (wordbelow >> 1)); if (j > 0) word |= (*(lines + wpls + j - 1)) << 31; if (j < wpl - 1) word |= (*(lines + wpls + j + 1)) >> 31; } if (j < wpl - 1) { wordright = *(lines + j + 1); word |= wordright >> 31; } word &= mask; /* No need to fill horizontally? */ if (!word || !(~word)) { *(lines + j) = word; continue; } while (1) { wordprev = word; word = (word | (word >> 1) | (word << 1)) & mask; if ((word ^ wordprev) == 0) { *(lines + j) = word; break; } } } } break; default: L_ERROR("connectivity must be 4 or 8\n", procName); return; } return; } /*-----------------------------------------------------------------------* * Vincent's Hybrid Grayscale Seedfill * *-----------------------------------------------------------------------*/ /*! * seedfillGrayLow() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * This is followed by a breadth-first propagation operation to * complete the fill. * During the anti-raster scan, every pixel p whose current value * could still be propagated after the anti-raster scan is put into * the FIFO queue. * The propagation step is a breadth-first fill to completion. * Unlike the simple grayscale seedfill pixSeedfillGraySimple(), * where at least two full raster/anti-raster iterations are required * for completion and verification, the hybrid method uses only a * single raster/anti-raster set of scans. * (2) The filling action can be visualized from the following example. * Suppose the mask, which clips the fill, is a sombrero-shaped * surface, where the highest point is 200 and the low pixels * around the rim are 30. Beyond the rim, the mask goes up a bit. * Suppose the seed, which is filled, consists of a single point * of height 150, located below the max of the mask, with * the rest 0. Then in the raster scan, nothing happens until * the high seed point is encountered, and then this value is * propagated right and down, until it hits the side of the * sombrero. The seed can never exceed the mask, so it fills * to the rim, going lower along the mask surface. When it * passes the rim, the seed continues to fill at the rim * height to the edge of the seed image. Then on the * anti-raster scan, the seed fills flat inside the * sombrero to the upper and left, and then out from the * rim as before. The final result has a seed that is * flat outside the rim, and inside it fills the sombrero * but only up to 150. If the rim height varies, the * filled seed outside the rim will be at the highest * point on the rim, which is a saddle point on the rim. * (3) Reference paper : * L. Vincent, Morphological grayscale reconstruction in image * analysis: applications and efficient algorithms, IEEE Transactions * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. */ void seedfillGrayLow(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; l_uint8 val, maxval, maskval, boolval; l_int32 i, j, imax, jmax, queue_size; l_uint32 *lines, *linem; L_PIXEL *pixel; L_QUEUE *lq_pixel; PROCNAME("seedfillGrayLow"); if (connectivity != 4 && connectivity != 8) { L_ERROR("connectivity must be 4 or 8\n", procName); return; } imax = h - 1; jmax = w - 1; /* In the worst case, most of the pixels could be pushed * onto the FIFO queue during anti-raster scan. However this * will rarely happen, and we initialize the queue ptr size to * the image perimeter. */ lq_pixel = lqueueCreate(2 * (w + h)); switch (connectivity) { case 4: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in raster order}) * intersection I(p) */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) maxval = GET_DATA_BYTE(lines - wpls, j); if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan (anti-raster order) * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in anti-raster order}) * intersection I(p) */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) maxval = GET_DATA_BYTE(lines + wpls, j); if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); /* * If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(q) < I(q) then * fifo_add(p) */ if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); if ((val7 < val) && (val7 < GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val5 < GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and I(q) != J(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val2 != maskval) { SET_DATA_BYTE(lines - wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val4 != maskval) { SET_DATA_BYTE(lines, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val7 != maskval) { SET_DATA_BYTE(lines + wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val5 != maskval) { SET_DATA_BYTE(lines, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; case 8: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in raster order}) * intersection I(p) */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) { if (j > 0) maxval = GET_DATA_BYTE(lines - wpls, j - 1); if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val3); } val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan (anti-raster order) * Let p be the currect pixel; * J(p) <- (max{J(p) union J(p) neighbors in anti-raster order}) * intersection I(p) */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) { if (j > 0) { maxval = GET_DATA_BYTE(lines + wpls, j - 1); } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); /* If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(q) < I(q) then * fifo_add(p) */ if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); if ((val6 < val) && (val6 < GET_DATA_BYTE(linem + wplm, j - 1))) { boolval = TRUE; } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); if (!boolval && (val8 < val) && (val8 < GET_DATA_BYTE(linem + wplm, j + 1))) { boolval = TRUE; } } val7 = GET_DATA_BYTE(lines + wpls, j); if (!boolval && (val7 < val) && (val7 < GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val5 < GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and I(q) != J(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maskval = GET_DATA_BYTE(linem - wplm, j - 1); if (val > val1 && val1 != maskval) { SET_DATA_BYTE(lines - wpls, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maskval = GET_DATA_BYTE(linem - wplm, j + 1); if (val > val3 && val3 != maskval) { SET_DATA_BYTE(lines - wpls, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val2 != maskval) { SET_DATA_BYTE(lines - wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val4 != maskval) { SET_DATA_BYTE(lines, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maskval = GET_DATA_BYTE(linem + wplm, j - 1); if (val > val6 && val6 != maskval) { SET_DATA_BYTE(lines + wpls, j - 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maskval = GET_DATA_BYTE(linem + wplm, j + 1); if (val > val8 && val8 != maskval) { SET_DATA_BYTE(lines + wpls, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val7 != maskval) { SET_DATA_BYTE(lines + wpls, j, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val5 != maskval) { SET_DATA_BYTE(lines, j + 1, L_MIN(val, maskval)); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; default: L_ERROR("shouldn't get here!\n", procName); break; } lqueueDestroy(&lq_pixel, TRUE); return; } /*! * seedfillGrayInvLow() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * During the anti-raster scan, every pixel p such that its * current value could still be propogated during the next * raster scanning is put into the FIFO-queue. * Next step is the propagation step where where we update * and propagate the values using FIFO structure created in * anti-raster scan. * (2) The "Inv" signifies the fact that in this case, filling * of the seed only takes place when the seed value is * greater than the mask value. The mask will act to stop * the fill when it is higher than the seed level. (This is * in contrast to conventional grayscale filling where the * seed always fills below the mask.) * (3) An example of use is a basin, described by the mask (pixm), * where within the basin, the seed pix (pixs) gets filled to the * height of the highest seed pixel that is above its * corresponding max pixel. Filling occurs while the * propagating seed pixels in pixs are larger than the * corresponding mask values in pixm. * (4) Reference paper : * L. Vincent, Morphological grayscale reconstruction in image * analysis: applications and efficient algorithms, IEEE Transactions * on Image Processing, vol. 2, no. 2, pp. 176-201, 1993. */ void seedfillGrayInvLow(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; l_uint8 val, maxval, maskval, boolval; l_int32 i, j, imax, jmax, queue_size; l_uint32 *lines, *linem; L_PIXEL *pixel; L_QUEUE *lq_pixel; PROCNAME("seedfillGrayInvLow"); if (connectivity != 4 && connectivity != 8) { L_ERROR("connectivity must be 4 or 8\n", procName); return; } imax = h - 1; jmax = w - 1; /* In the worst case, most of the pixels could be pushed * onto the FIFO queue during anti-raster scan. However this * will rarely happen, and we initialize the queue ptr size to * the image perimeter. */ lq_pixel = lqueueCreate(2 * (w + h)); switch (connectivity) { case 4: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan (anti-raster order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in anti-raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { val = maxval = GET_DATA_BYTE(lines, j); if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); val = GET_DATA_BYTE(lines, j); /* * If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(p) > I(q) then * fifo_add(p) */ if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); if ((val7 < val) && (val > GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val > GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and J(p) > I(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val > maskval) { SET_DATA_BYTE(lines - wpls, j, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val > maskval) { SET_DATA_BYTE(lines, j - 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val > maskval) { SET_DATA_BYTE(lines + wpls, j, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val > maskval) { SET_DATA_BYTE(lines, j + 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; case 8: /* UL --> LR scan (Raster Order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maxval = L_MAX(maxval, val1); } if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val3); } val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan (anti-raster order) * If I : mask image * J : marker image * Let p be the currect pixel; * tmp <- max{J(p) union J(p) neighbors in anti-raster order} * if (tmp > I(p)) * J(p) <- tmp * end */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { boolval = FALSE; if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maxval = L_MAX(maxval, val6); } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); val = GET_DATA_BYTE(lines, j); /* * If there exists a point (q) which belongs to J(p) * neighbors in anti-raster order such that J(q) < J(p) * and J(p) > I(q) then * fifo_add(p) */ if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); if ((val6 < val) && (val > GET_DATA_BYTE(linem + wplm, j - 1))) { boolval = TRUE; } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); if (!boolval && (val8 < val) && (val > GET_DATA_BYTE(linem + wplm, j + 1))) { boolval = TRUE; } } val7 = GET_DATA_BYTE(lines + wpls, j); if (!boolval && (val7 < val) && (val > GET_DATA_BYTE(linem + wplm, j))) { boolval = TRUE; } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); if (!boolval && (val5 < val) && (val > GET_DATA_BYTE(linem, j + 1))) { boolval = TRUE; } } if (boolval) { pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } } } /* Propagation step: * while fifo_empty = false * p <- fifo_first() * for every pixel (q) belong to neighbors of (p) * if J(q) < J(p) and J(p) > I(q) * J(q) <- min(J(p), I(q)); * fifo_add(q); * end * end * end */ queue_size = lqueueGetCount(lq_pixel); while (queue_size) { pixel = (L_PIXEL *)lqueueRemove(lq_pixel); i = pixel->x; j = pixel->y; FREE(pixel); lines = datas + i * wpls; linem = datam + i * wplm; if ((val = GET_DATA_BYTE(lines, j)) > 0) { if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maskval = GET_DATA_BYTE(linem - wplm, j - 1); if (val > val1 && val > maskval) { SET_DATA_BYTE(lines - wpls, j - 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val3 = GET_DATA_BYTE(lines - wpls, j + 1); maskval = GET_DATA_BYTE(linem - wplm, j + 1); if (val > val3 && val > maskval) { SET_DATA_BYTE(lines - wpls, j + 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val2 = GET_DATA_BYTE(lines - wpls, j); maskval = GET_DATA_BYTE(linem - wplm, j); if (val > val2 && val > maskval) { SET_DATA_BYTE(lines - wpls, j, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i - 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maskval = GET_DATA_BYTE(linem, j - 1); if (val > val4 && val > maskval) { SET_DATA_BYTE(lines, j - 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maskval = GET_DATA_BYTE(linem + wplm, j - 1); if (val > val6 && val > maskval) { SET_DATA_BYTE(lines + wpls, j - 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j - 1; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maskval = GET_DATA_BYTE(linem + wplm, j + 1); if (val > val8 && val > maskval) { SET_DATA_BYTE(lines + wpls, j + 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } val7 = GET_DATA_BYTE(lines + wpls, j); maskval = GET_DATA_BYTE(linem + wplm, j); if (val > val7 && val > maskval) { SET_DATA_BYTE(lines + wpls, j, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i + 1; pixel->y = j; lqueueAdd(lq_pixel, pixel); } } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maskval = GET_DATA_BYTE(linem, j + 1); if (val > val5 && val > maskval) { SET_DATA_BYTE(lines, j + 1, val); pixel = (L_PIXEL *)CALLOC(1, sizeof(L_PIXEL)); pixel->x = i; pixel->y = j + 1; lqueueAdd(lq_pixel, pixel); } } } queue_size = lqueueGetCount(lq_pixel); } break; default: L_ERROR("shouldn't get here!\n", procName); break; } lqueueDestroy(&lq_pixel, TRUE); return; } /*-----------------------------------------------------------------------* * Vincent's Iterative Grayscale Seedfill * *-----------------------------------------------------------------------*/ /*! * seedfillGrayLowSimple() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * The caller typically iterates until the filling is * complete. * (2) The filling action can be visualized from the following example. * Suppose the mask, which clips the fill, is a sombrero-shaped * surface, where the highest point is 200 and the low pixels * around the rim are 30. Beyond the rim, the mask goes up a bit. * Suppose the seed, which is filled, consists of a single point * of height 150, located below the max of the mask, with * the rest 0. Then in the raster scan, nothing happens until * the high seed point is encountered, and then this value is * propagated right and down, until it hits the side of the * sombrero. The seed can never exceed the mask, so it fills * to the rim, going lower along the mask surface. When it * passes the rim, the seed continues to fill at the rim * height to the edge of the seed image. Then on the * anti-raster scan, the seed fills flat inside the * sombrero to the upper and left, and then out from the * rim as before. The final result has a seed that is * flat outside the rim, and inside it fills the sombrero * but only up to 150. If the rim height varies, the * filled seed outside the rim will be at the highest * point on the rim, which is a saddle point on the rim. */ void seedfillGrayLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val2, val3, val4, val5, val7, val8; l_uint8 val, maxval, maskval; l_int32 i, j, imax, jmax; l_uint32 *lines, *linem; PROCNAME("seedfillGrayLowSimple"); imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) maxval = GET_DATA_BYTE(lines - wpls, j); if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) maxval = GET_DATA_BYTE(lines + wpls, j); if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } break; case 8: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i > 0) { if (j > 0) maxval = GET_DATA_BYTE(lines - wpls, j - 1); if (j < jmax) { val2 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val2); } val3 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val3); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) > 0) { maxval = 0; if (i < imax) { if (j > 0) maxval = GET_DATA_BYTE(lines + wpls, j - 1); if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } val = GET_DATA_BYTE(lines, j); maxval = L_MAX(maxval, val); val = L_MIN(maxval, maskval); SET_DATA_BYTE(lines, j, val); } } } break; default: L_ERROR("connectivity must be 4 or 8\n", procName); } return; } /*! * seedfillGrayInvLowSimple() * * Notes: * (1) The pixels are numbered as follows: * 1 2 3 * 4 x 5 * 6 7 8 * This low-level filling operation consists of two scans, * raster and anti-raster, covering the entire seed image. * The caller typically iterates until the filling is * complete. * (2) The "Inv" signifies the fact that in this case, filling * of the seed only takes place when the seed value is * greater than the mask value. The mask will act to stop * the fill when it is higher than the seed level. (This is * in contrast to conventional grayscale filling where the * seed always fills below the mask.) * (3) An example of use is a basin, described by the mask (pixm), * where within the basin, the seed pix (pixs) gets filled to the * height of the highest seed pixel that is above its * corresponding max pixel. Filling occurs while the * propagating seed pixels in pixs are larger than the * corresponding mask values in pixm. */ void seedfillGrayInvLowSimple(l_uint32 *datas, l_int32 w, l_int32 h, l_int32 wpls, l_uint32 *datam, l_int32 wplm, l_int32 connectivity) { l_uint8 val1, val2, val3, val4, val5, val6, val7, val8; l_uint8 maxval, maskval; l_int32 i, j, imax, jmax; l_uint32 *lines, *linem; PROCNAME("seedfillGrayInvLowSimple"); imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { val2 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val2); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i < imax) { val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } break; case 8: /* UL --> LR scan */ for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = 0; j < w; j++) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i > 0) { if (j > 0) { val1 = GET_DATA_BYTE(lines - wpls, j - 1); maxval = L_MAX(maxval, val1); } if (j < jmax) { val2 = GET_DATA_BYTE(lines - wpls, j + 1); maxval = L_MAX(maxval, val2); } val3 = GET_DATA_BYTE(lines - wpls, j); maxval = L_MAX(maxval, val3); } if (j > 0) { val4 = GET_DATA_BYTE(lines, j - 1); maxval = L_MAX(maxval, val4); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } /* LR --> UL scan */ for (i = imax; i >= 0; i--) { lines = datas + i * wpls; linem = datam + i * wplm; for (j = jmax; j >= 0; j--) { if ((maskval = GET_DATA_BYTE(linem, j)) < 255) { maxval = GET_DATA_BYTE(lines, j); if (i < imax) { if (j > 0) { val6 = GET_DATA_BYTE(lines + wpls, j - 1); maxval = L_MAX(maxval, val6); } if (j < jmax) { val8 = GET_DATA_BYTE(lines + wpls, j + 1); maxval = L_MAX(maxval, val8); } val7 = GET_DATA_BYTE(lines + wpls, j); maxval = L_MAX(maxval, val7); } if (j < jmax) { val5 = GET_DATA_BYTE(lines, j + 1); maxval = L_MAX(maxval, val5); } if (maxval > maskval) SET_DATA_BYTE(lines, j, maxval); } } } break; default: L_ERROR("connectivity must be 4 or 8\n", procName); } return; } /*-----------------------------------------------------------------------* * Vincent's Distance Function method * *-----------------------------------------------------------------------*/ /*! * distanceFunctionLow() */ void distanceFunctionLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 d, l_int32 wpld, l_int32 connectivity) { l_int32 val1, val2, val3, val4, val5, val6, val7, val8, minval, val; l_int32 i, j, imax, jmax; l_uint32 *lined; PROCNAME("distanceFunctionLow"); /* One raster scan followed by one anti-raster scan. * This does not re-set the 1-boundary of pixels that * were initialized to either 0 or maxval. */ imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: if (d == 8) { /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val2 = GET_DATA_BYTE(lined - wpld, j); val4 = GET_DATA_BYTE(lined, j - 1); minval = L_MIN(val2, val4); minval = L_MIN(minval, 254); SET_DATA_BYTE(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val7 = GET_DATA_BYTE(lined + wpld, j); val5 = GET_DATA_BYTE(lined, j + 1); minval = L_MIN(val5, val7); minval = L_MIN(minval + 1, val); SET_DATA_BYTE(lined, j, minval); } } } } else { /* d == 16 */ /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val2 = GET_DATA_TWO_BYTES(lined - wpld, j); val4 = GET_DATA_TWO_BYTES(lined, j - 1); minval = L_MIN(val2, val4); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val7 = GET_DATA_TWO_BYTES(lined + wpld, j); val5 = GET_DATA_TWO_BYTES(lined, j + 1); minval = L_MIN(val5, val7); minval = L_MIN(minval + 1, val); SET_DATA_TWO_BYTES(lined, j, minval); } } } } break; case 8: if (d == 8) { /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val1 = GET_DATA_BYTE(lined - wpld, j - 1); val2 = GET_DATA_BYTE(lined - wpld, j); val3 = GET_DATA_BYTE(lined - wpld, j + 1); val4 = GET_DATA_BYTE(lined, j - 1); minval = L_MIN(val1, val2); minval = L_MIN(minval, val3); minval = L_MIN(minval, val4); minval = L_MIN(minval, 254); SET_DATA_BYTE(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_BYTE(lined, j)) > 0) { val8 = GET_DATA_BYTE(lined + wpld, j + 1); val7 = GET_DATA_BYTE(lined + wpld, j); val6 = GET_DATA_BYTE(lined + wpld, j - 1); val5 = GET_DATA_BYTE(lined, j + 1); minval = L_MIN(val8, val7); minval = L_MIN(minval, val6); minval = L_MIN(minval, val5); minval = L_MIN(minval + 1, val); SET_DATA_BYTE(lined, j, minval); } } } } else { /* d == 16 */ /* UL --> LR scan */ for (i = 1; i < imax; i++) { lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val1 = GET_DATA_TWO_BYTES(lined - wpld, j - 1); val2 = GET_DATA_TWO_BYTES(lined - wpld, j); val3 = GET_DATA_TWO_BYTES(lined - wpld, j + 1); val4 = GET_DATA_TWO_BYTES(lined, j - 1); minval = L_MIN(val1, val2); minval = L_MIN(minval, val3); minval = L_MIN(minval, val4); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(lined, j, minval + 1); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((val = GET_DATA_TWO_BYTES(lined, j)) > 0) { val8 = GET_DATA_TWO_BYTES(lined + wpld, j + 1); val7 = GET_DATA_TWO_BYTES(lined + wpld, j); val6 = GET_DATA_TWO_BYTES(lined + wpld, j - 1); val5 = GET_DATA_TWO_BYTES(lined, j + 1); minval = L_MIN(val8, val7); minval = L_MIN(minval, val6); minval = L_MIN(minval, val5); minval = L_MIN(minval + 1, val); SET_DATA_TWO_BYTES(lined, j, minval); } } } } break; default: L_ERROR("connectivity must be 4 or 8\n", procName); break; } return; } /*-----------------------------------------------------------------------* * Seed spread (based on distance function) * *-----------------------------------------------------------------------*/ /*! * seedspreadLow() * * See pixSeedspread() for a brief description of the algorithm here. */ void seedspreadLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datat, l_int32 wplt, l_int32 connectivity) { l_int32 val1t, val2t, val3t, val4t, val5t, val6t, val7t, val8t; l_int32 i, j, imax, jmax, minval, valt, vald; l_uint32 *linet, *lined; PROCNAME("seedspreadLow"); /* One raster scan followed by one anti-raster scan. * pixt is initialized to have 0 on pixels where the * input is specified in pixd, and to have 1 on all * other pixels. We only change pixels in pixt and pixd * that are non-zero in pixt. */ imax = h - 1; jmax = w - 1; switch (connectivity) { case 4: /* UL --> LR scan */ for (i = 1; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val2t = GET_DATA_TWO_BYTES(linet - wplt, j); val4t = GET_DATA_TWO_BYTES(linet, j - 1); minval = L_MIN(val2t, val4t); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(linet, j, minval + 1); if (val2t < val4t) vald = GET_DATA_BYTE(lined - wpld, j); else vald = GET_DATA_BYTE(lined, j - 1); SET_DATA_BYTE(lined, j, vald); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val7t = GET_DATA_TWO_BYTES(linet + wplt, j); val5t = GET_DATA_TWO_BYTES(linet, j + 1); minval = L_MIN(val5t, val7t); minval = L_MIN(minval + 1, valt); if (valt > minval) { /* replace */ SET_DATA_TWO_BYTES(linet, j, minval); if (val5t < val7t) vald = GET_DATA_BYTE(lined, j + 1); else vald = GET_DATA_BYTE(lined + wplt, j); SET_DATA_BYTE(lined, j, vald); } } } } break; case 8: /* UL --> LR scan */ for (i = 1; i < h; i++) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = 1; j < jmax; j++) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val1t = GET_DATA_TWO_BYTES(linet - wplt, j - 1); val2t = GET_DATA_TWO_BYTES(linet - wplt, j); val3t = GET_DATA_TWO_BYTES(linet - wplt, j + 1); val4t = GET_DATA_TWO_BYTES(linet, j - 1); minval = L_MIN(val1t, val2t); minval = L_MIN(minval, val3t); minval = L_MIN(minval, val4t); minval = L_MIN(minval, 0xfffe); SET_DATA_TWO_BYTES(linet, j, minval + 1); if (minval == val1t) vald = GET_DATA_BYTE(lined - wpld, j - 1); else if (minval == val2t) vald = GET_DATA_BYTE(lined - wpld, j); else if (minval == val3t) vald = GET_DATA_BYTE(lined - wpld, j + 1); else /* minval == val4t */ vald = GET_DATA_BYTE(lined, j - 1); SET_DATA_BYTE(lined, j, vald); } } } /* LR --> UL scan */ for (i = imax - 1; i > 0; i--) { linet = datat + i * wplt; lined = datad + i * wpld; for (j = jmax - 1; j > 0; j--) { if ((valt = GET_DATA_TWO_BYTES(linet, j)) > 0) { val8t = GET_DATA_TWO_BYTES(linet + wplt, j + 1); val7t = GET_DATA_TWO_BYTES(linet + wplt, j); val6t = GET_DATA_TWO_BYTES(linet + wplt, j - 1); val5t = GET_DATA_TWO_BYTES(linet, j + 1); minval = L_MIN(val8t, val7t); minval = L_MIN(minval, val6t); minval = L_MIN(minval, val5t); minval = L_MIN(minval + 1, valt); if (valt > minval) { /* replace */ SET_DATA_TWO_BYTES(linet, j, minval); if (minval == val5t + 1) vald = GET_DATA_BYTE(lined, j + 1); else if (minval == val6t + 1) vald = GET_DATA_BYTE(lined + wpld, j - 1); else if (minval == val7t + 1) vald = GET_DATA_BYTE(lined + wpld, j); else /* minval == val8t + 1 */ vald = GET_DATA_BYTE(lined + wpld, j + 1); SET_DATA_BYTE(lined, j, vald); } } } } break; default: L_ERROR("connectivity must be 4 or 8\n", procName); break; } return; } leptonica-1.70/src/pixcomp.c0000664000175000017500000016742612270201072014132 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixcomp.c * * Pixcomp creation and destruction * PIXC *pixcompCreateFromPix() * PIXC *pixcompCreateFromString() * PIXC *pixcompCreateFromFile() * void pixcompDestroy() * Pixcomp accessors * l_int32 pixcompGetDimensions() * l_int32 pixcompDetermineFormat() * * Pixcomp conversion to Pix * PIX *pixCreateFromPixcomp() * * Pixacomp creation and destruction * PIXAC *pixacompCreate() * PIXAC *pixacompCreateWithInit() * PIXAC *pixacompCreateFromPixa() * PIXAC *pixacompCreateFromFiles() * PIXAC *pixacompCreateFromSA() * void pixacompDestroy() * * Pixacomp addition/replacement * l_int32 pixacompAddPix() * l_int32 pixacompAddPixcomp() * static l_int32 pixacompExtendArray() * l_int32 pixacompReplacePix() * l_int32 pixacompReplacePixcomp() * l_int32 pixacompAddBox() * * Pixacomp accessors * l_int32 pixacompGetCount() * PIXC *pixacompGetPixcomp() * PIX *pixacompGetPix() * l_int32 pixacompGetPixDimensions() * BOXA *pixacompGetBoxa() * l_int32 pixacompGetBoxaCount() * BOX *pixacompGetBox() * l_int32 pixacompGetBoxGeometry() * l_int32 pixacompGetOffset() * l_int32 pixacompSetOffset() * * Pixacomp conversion to Pixa * PIXA *pixaCreateFromPixacomp() * * Pixacomp serialized I/O * PIXAC *pixacompRead() * PIXAC *pixacompReadStream() * l_int32 pixacompWrite() * l_int32 pixacompWriteStream() * * Conversion to pdf * l_int32 pixacompConvertToPdf() * l_int32 pixacompConvertToPdfData() * * Output for debugging * l_int32 pixacompWriteStreamInfo() * l_int32 pixcompWriteStreamInfo() * PIX *pixacompDisplayTiledAndScaled() * * The Pixacomp is an array of Pixcomp, where each Pixcomp is a compressed * string of the image. We don't use reference counting here. * The basic application is to allow a large array of highly * compressible images to reside in memory. We purposely don't * reuse the Pixa for this, to avoid confusion and programming errors. * * Three compression formats are used: g4, png and jpeg. * The compression type can be either specified or defaulted. * If specified and it is not possible to compress (for example, * you specify a jpeg on a 1 bpp image or one with a colormap), * the compression type defaults to png. * * The serialized version of the Pixacomp is similar to that for * a Pixa, except that each Pixcomp can be compressed by one of * tiffg4, png, or jpeg. Unlike serialization of the Pixa, * serialization of the Pixacomp does not require any imaging * libraries because it simply reads and writes the compressed data. * * There are two modes of use in accumulating images: * (1) addition to the end of the array * (2) random insertion (replacement) into the array * * In use, we assume that the array is fully populated up to the * index value (n - 1), where n is the value of the pixcomp field n. * Addition can only be made to the end of the fully populated array, * at the index value n. Insertion can be made randomly, but again * only within the array of pixcomps; i.e., within the set of * indices {0 .... n-1}. The functions are pixacompReplacePix() * and pixacompReplacePixcomp(), and they destroy the existing pixcomp. * * For addition to the end of the array, use pixacompCreate(), which * generates an initially empty array of pixcomps. For random * insertion and replacement of pixcomp into a pixacomp, * initialize a fully populated array using pixacompCreateWithInit(). * * The offset field allows you to use an offset-based index to * access the 0-based ptr array in the pixacomp. This would typically * be used to map the pixacomp array index to a page number, or v.v. * By default, the offset is 0. For example, suppose you have 50 images, * corresponding to page numbers 10 - 59. Then you would use * pixac = pixacompCreateWithInit(50, 10, ...); * This would allocate an array of 50 pixcomps, but if you asked for * the pix at index 10, using pixacompGetPix(pixac, 10), it would * apply the offset internally, returning the pix at index 0 in the array. */ #include #include "allheaders.h" static const l_int32 INITIAL_PTR_ARRAYSIZE = 20; /* n'import quoi */ /* These two globals are defined in writefile.c */ extern l_int32 NumImageFileFormatExtensions; extern const char *ImageFileFormatExtensions[]; /* Static function */ static l_int32 pixacompExtendArray(PIXAC *pixac); /*---------------------------------------------------------------------* * Pixcomp creation and destruction * *---------------------------------------------------------------------*/ /*! * pixcompCreateFromPix() * * Input: pix * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * Return: pixc, or null on error * * Notes: * (1) Use @comptype == IFF_DEFAULT to have the compression * type automatically determined. */ PIXC * pixcompCreateFromPix(PIX *pix, l_int32 comptype) { size_t size; char *text; l_int32 ret, format; l_uint8 *data; PIXC *pixc; PROCNAME("pixcompCreateFromPix"); if (!pix) return (PIXC *)ERROR_PTR("pix not defined", procName, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXC *)ERROR_PTR("invalid comptype", procName, NULL); if ((pixc = (PIXC *)CALLOC(1, sizeof(PIXC))) == NULL) return (PIXC *)ERROR_PTR("pixc not made", procName, NULL); pixGetDimensions(pix, &pixc->w, &pixc->h, &pixc->d); pixGetResolution(pix, &pixc->xres, &pixc->yres); if (pixGetColormap(pix)) pixc->cmapflag = 1; if ((text = pixGetText(pix)) != NULL) pixc->text = stringNew(text); pixcompDetermineFormat(comptype, pixc->d, pixc->cmapflag, &format); pixc->comptype = format; ret = pixWriteMem(&data, &size, pix, format); if (ret) { L_ERROR("write to memory failed\n", procName); pixcompDestroy(&pixc); return NULL; } pixc->data = data; pixc->size = size; return pixc; } /*! * pixcompCreateFromString() * * Input: data (compressed string) * size (number of bytes) * copyflag (L_INSERT or L_COPY) * Return: pixc, or null on error * * Notes: * (1) This works when the compressed string is png, jpeg or tiffg4. * (2) The copyflag determines if the data in the new Pixcomp is * a copy of the input data. */ PIXC * pixcompCreateFromString(l_uint8 *data, size_t size, l_int32 copyflag) { l_int32 format, w, h, d, bps, spp, iscmap; PIXC *pixc; PROCNAME("pixcompCreateFromString"); if (!data) return (PIXC *)ERROR_PTR("data not defined", procName, NULL); if (copyflag != L_INSERT && copyflag != L_COPY) return (PIXC *)ERROR_PTR("invalid copyflag", procName, NULL); if (pixReadHeaderMem(data, size, &format, &w, &h, &bps, &spp, &iscmap) == 1) return (PIXC *)ERROR_PTR("header data not read", procName, NULL); if ((pixc = (PIXC *)CALLOC(1, sizeof(PIXC))) == NULL) return (PIXC *)ERROR_PTR("pixc not made", procName, NULL); d = (spp == 3) ? 32 : bps * spp; pixc->w = w; pixc->h = h; pixc->d = d; pixc->comptype = format; pixc->cmapflag = iscmap; if (copyflag == L_INSERT) pixc->data = data; else pixc->data = l_binaryCopy(data, size); pixc->size = size; return pixc; } /*! * pixcompCreateFromFile() * * Input: filename * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * Return: pixc, or null on error * * Notes: * (1) Use @comptype == IFF_DEFAULT to have the compression * type automatically determined. * (2) If the comptype is invalid for this file, the default will * be substituted. */ PIXC * pixcompCreateFromFile(const char *filename, l_int32 comptype) { l_int32 format; size_t nbytes; l_uint8 *data; PIX *pix; PIXC *pixc; PROCNAME("pixcompCreateFromFile"); if (!filename) return (PIXC *)ERROR_PTR("filename not defined", procName, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXC *)ERROR_PTR("invalid comptype", procName, NULL); findFileFormat(filename, &format); if (format == IFF_UNKNOWN) { L_ERROR("unreadable file: %s\n", procName, filename); return NULL; } /* Can we accept the encoded file directly? Remember that * png is the "universal" compression type, so if requested * it takes precedence. Otherwise, if the file is already * compressed in g4 or jpeg, just accept the string. */ if ((format == IFF_TIFF_G4 && comptype != IFF_PNG) || (format == IFF_JFIF_JPEG && comptype != IFF_PNG)) comptype = format; if (comptype != IFF_DEFAULT && comptype == format) { data = l_binaryRead(filename, &nbytes); if ((pixc = pixcompCreateFromString(data, nbytes, L_INSERT)) == NULL) { FREE(data); return (PIXC *)ERROR_PTR("pixc not made (string)", procName, NULL); } return pixc; } /* Need to recompress in the default format */ if ((pix = pixRead(filename)) == NULL) return (PIXC *)ERROR_PTR("pix not read", procName, NULL); if ((pixc = pixcompCreateFromPix(pix, comptype)) == NULL) { pixDestroy(&pix); return (PIXC *)ERROR_PTR("pixc not made", procName, NULL); } pixDestroy(&pix); return pixc; } /*! * pixcompDestroy() * * Input: &pixc * Return: void * * Notes: * (1) Always nulls the input ptr. */ void pixcompDestroy(PIXC **ppixc) { PIXC *pixc; PROCNAME("pixcompDestroy"); if (!ppixc) { L_WARNING("ptr address is null!\n", procName); return; } if ((pixc = *ppixc) == NULL) return; FREE(pixc->data); if (pixc->text) FREE(pixc->text); FREE(pixc); *ppixc = NULL; return; } /*---------------------------------------------------------------------* * Pixcomp accessors * *---------------------------------------------------------------------*/ /*! * pixcompGetDimensions() * * Input: pixc * &w, &h, &d () * Return: 0 if OK, 1 on error */ l_int32 pixcompGetDimensions(PIXC *pixc, l_int32 *pw, l_int32 *ph, l_int32 *pd) { PROCNAME("pixcompGetDimensions"); if (!pixc) return ERROR_INT("pixc not defined", procName, 1); if (pw) *pw = pixc->w; if (ph) *ph = pixc->h; if (pd) *pd = pixc->d; return 0; } /*! * pixcompDetermineFormat() * * Input: comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * d (pix depth) * cmapflag (1 if pix to be compressed as a colormap; 0 otherwise) * &format (return IFF_TIFF, IFF_PNG or IFF_JFIF_JPEG) * Return: 0 if OK; 1 on error * * Notes: * (1) This determines the best format for a pix, given both * the request (@comptype) and the image characteristics. * (2) If @comptype == IFF_DEFAULT, this does not necessarily result * in png encoding. Instead, it returns one of the three formats * that is both valid and most likely to give best compression. * (3) If the pix cannot be compressed by the input value of * @comptype, this selects IFF_PNG, which can compress all pix. */ l_int32 pixcompDetermineFormat(l_int32 comptype, l_int32 d, l_int32 cmapflag, l_int32 *pformat) { PROCNAME("pixcompDetermineFormat"); if (!pformat) return ERROR_INT("&format not defined", procName, 1); *pformat = IFF_PNG; /* init value and default */ if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return ERROR_INT("invalid comptype", procName, 1); if (comptype == IFF_DEFAULT) { if (d == 1) *pformat = IFF_TIFF_G4; else if (d == 16) *pformat = IFF_PNG; else if (d >= 8 && !cmapflag) *pformat = IFF_JFIF_JPEG; } else if (comptype == IFF_TIFF_G4 && d == 1) { *pformat = IFF_TIFF_G4; } else if (comptype == IFF_JFIF_JPEG && d >= 8 && !cmapflag) { *pformat = IFF_JFIF_JPEG; } return 0; } /*---------------------------------------------------------------------* * Pixcomp conversion to Pix * *---------------------------------------------------------------------*/ /*! * pixCreateFromPixcomp() * * Input: pixc * Return: pix, or null on error */ PIX * pixCreateFromPixcomp(PIXC *pixc) { l_int32 w, h, d, cmapinpix, format; PIX *pix; PROCNAME("pixCreateFromPixcomp"); if (!pixc) return (PIX *)ERROR_PTR("pixc not defined", procName, NULL); if ((pix = pixReadMem(pixc->data, pixc->size)) == NULL) return (PIX *)ERROR_PTR("pix not read", procName, NULL); pixSetResolution(pix, pixc->xres, pixc->yres); if (pixc->text) pixSetText(pix, pixc->text); /* Check fields for consistency */ pixGetDimensions(pix, &w, &h, &d); if (pixc->w != w) { L_INFO("pix width %d != pixc width %d\n", procName, w, pixc->w); L_ERROR("pix width %d != pixc width\n", procName, w); } if (pixc->h != h) L_ERROR("pix height %d != pixc height\n", procName, h); if (pixc->d != d) { if (pixc->d == 16) /* we strip 16 --> 8 bpp by default */ L_WARNING("pix depth %d != pixc depth 16\n", procName, d); else L_ERROR("pix depth %d != pixc depth\n", procName, d); } cmapinpix = (pixGetColormap(pix) != NULL); if ((cmapinpix && !pixc->cmapflag) || (!cmapinpix && pixc->cmapflag)) L_ERROR("pix cmap flag inconsistent\n", procName); format = pixGetInputFormat(pix); if (format != pixc->comptype) { L_ERROR("pix comptype %d not equal to pixc comptype\n", procName, format); } return pix; } /*---------------------------------------------------------------------* * Pixacomp creation and destruction * *---------------------------------------------------------------------*/ /*! * pixacompCreate() * * Input: n (initial number of ptrs) * Return: pixac, or null on error */ PIXAC * pixacompCreate(l_int32 n) { PIXAC *pixac; PROCNAME("pixacompCreate"); if (n <= 0) n = INITIAL_PTR_ARRAYSIZE; if ((pixac = (PIXAC *)CALLOC(1, sizeof(PIXAC))) == NULL) return (PIXAC *)ERROR_PTR("pixac not made", procName, NULL); pixac->n = 0; pixac->nalloc = n; pixac->offset = 0; if ((pixac->pixc = (PIXC **)CALLOC(n, sizeof(PIXC *))) == NULL) return (PIXAC *)ERROR_PTR("pixc ptrs not made", procName, NULL); if ((pixac->boxa = boxaCreate(n)) == NULL) return (PIXAC *)ERROR_PTR("boxa not made", procName, NULL); return pixac; } /*! * pixacompCreateWithInit() * * Input: n (initial number of ptrs) * offset (difference: accessor index - pixacomp array index) * pix ( initialize each ptr in pixacomp to this pix; * can be NULL) * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * Return: pixac, or null on error * * Notes: * (1) Initializes a pixacomp to be fully populated with @pix, * compressed using @comptype. If @pix == NULL, @comptype * is ignored. * (2) Typically, the array is initialized with a tiny pix. * This is most easily done by setting @pix == NULL, causing * initialization of each array element with a tiny placeholder * pix (w = h = d = 1), using comptype = IFF_TIFF_G4 . * (3) Example usage: * // Generate pixacomp for pages 30 - 49. This has an array * // size of 20 and the page number offset is 30. * PixaComp *pixac = pixacompCreateWithInit(20, 30, NULL, * IFF_TIFF_G4); * // Now insert png-compressed images into the initialized array * for (pageno = 30; pageno < 50; pageno++) { * Pix *pixt = ... // derived from image[pageno] * if (pixt) * pixacompReplacePix(pixac, pageno, pixt, IFF_PNG); * pixDestroy(&pixt); * } * The result is a pixac with 20 compressed strings, and with * selected pixt replacing the placeholders. * To extract the image for page 38, which is decompressed * from element 8 in the array, use: * pixt = pixacompGetPix(pixac, 38); */ PIXAC * pixacompCreateWithInit(l_int32 n, l_int32 offset, PIX *pix, l_int32 comptype) { l_int32 i; PIX *pixt; PIXC *pixc; PIXAC *pixac; PROCNAME("pixacompCreateWithInit"); if (n <= 0) return (PIXAC *)ERROR_PTR("n must be > 0", procName, NULL); if (pix) { if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); } else { comptype = IFF_TIFF_G4; } if (offset < 0) { L_WARNING("offset < 0; setting to 0\n", procName); offset = 0; } if ((pixac = pixacompCreate(n)) == NULL) return (PIXAC *)ERROR_PTR("pixac not made", procName, NULL); pixacompSetOffset(pixac, offset); if (pix) pixt = pixClone(pix); else pixt = pixCreate(1, 1, 1); for (i = 0; i < n; i++) { pixc = pixcompCreateFromPix(pixt, comptype); pixacompAddPixcomp(pixac, pixc); } pixDestroy(&pixt); return pixac; } /*! * pixacompCreateFromPixa() * * Input: pixa * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * accesstype (L_COPY, L_CLONE, L_COPY_CLONE) * Return: 0 if OK, 1 on error * * Notes: * (1) If @format == IFF_DEFAULT, the conversion format for each * image is chosen automatically. Otherwise, we use the * specified format unless it can't be done (e.g., jpeg * for a 1, 2 or 4 bpp pix, or a pix with a colormap), * in which case we use the default (assumed best) compression. * (2) @accesstype is used to extract a boxa from @pixa. */ PIXAC * pixacompCreateFromPixa(PIXA *pixa, l_int32 comptype, l_int32 accesstype) { l_int32 i, n; BOXA *boxa; PIX *pix; PIXAC *pixac; PROCNAME("pixacompCreateFromPixa"); if (!pixa) return (PIXAC *)ERROR_PTR("pixa not defined", procName, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (PIXAC *)ERROR_PTR("invalid accesstype", procName, NULL); n = pixaGetCount(pixa); if ((pixac = pixacompCreate(n)) == NULL) return (PIXAC *)ERROR_PTR("pixac not made", procName, NULL); for (i = 0; i < n; i++) { pix = pixaGetPix(pixa, i, L_CLONE); pixacompAddPix(pixac, pix, comptype); pixDestroy(&pix); } if ((boxa = pixaGetBoxa(pixa, accesstype)) != NULL) { if (pixac->boxa) { boxaDestroy(&pixac->boxa); pixac->boxa = boxa; } } return pixac; } /*! * pixacompCreateFromFiles() * * Input: dirname * substr ( substring filter on filenames; can be null) * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * Return: pixac, or null on error * * Notes: * (1) @dirname is the full path for the directory. * (2) @substr is the part of the file name (excluding * the directory) that is to be matched. All matching * filenames are read into the Pixa. If substr is NULL, * all filenames are read into the Pixa. * (3) Use @comptype == IFF_DEFAULT to have the compression * type automatically determined for each file. * (4) If the comptype is invalid for a file, the default will * be substituted. */ PIXAC * pixacompCreateFromFiles(const char *dirname, const char *substr, l_int32 comptype) { PIXAC *pixac; SARRAY *sa; PROCNAME("pixacompCreateFromFiles"); if (!dirname) return (PIXAC *)ERROR_PTR("dirname not defined", procName, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); if ((sa = getSortedPathnamesInDirectory(dirname, substr, 0, 0)) == NULL) return (PIXAC *)ERROR_PTR("sa not made", procName, NULL); pixac = pixacompCreateFromSA(sa, comptype); sarrayDestroy(&sa); return pixac; } /*! * pixacompCreateFromSA() * * Input: sarray (full pathnames for all files) * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * Return: pixac, or null on error * * Notes: * (1) Use @comptype == IFF_DEFAULT to have the compression * type automatically determined for each file. * (2) If the comptype is invalid for a file, the default will * be substituted. */ PIXAC * pixacompCreateFromSA(SARRAY *sa, l_int32 comptype) { char *str; l_int32 i, n; PIXC *pixc; PIXAC *pixac; PROCNAME("pixacompCreateFromSA"); if (!sa) return (PIXAC *)ERROR_PTR("sarray not defined", procName, NULL); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return (PIXAC *)ERROR_PTR("invalid comptype", procName, NULL); n = sarrayGetCount(sa); pixac = pixacompCreate(n); for (i = 0; i < n; i++) { str = sarrayGetString(sa, i, L_NOCOPY); if ((pixc = pixcompCreateFromFile(str, comptype)) == NULL) { L_ERROR("pixc not read from file: %s\n", procName, str); continue; } pixacompAddPixcomp(pixac, pixc); } return pixac; } /*! * pixacompDestroy() * * Input: &pixac () * Return: void * * Notes: * (1) Always nulls the input ptr. */ void pixacompDestroy(PIXAC **ppixac) { l_int32 i; PIXAC *pixac; PROCNAME("pixacompDestroy"); if (ppixac == NULL) { L_WARNING("ptr address is NULL!\n", procName); return; } if ((pixac = *ppixac) == NULL) return; for (i = 0; i < pixac->n; i++) pixcompDestroy(&pixac->pixc[i]); FREE(pixac->pixc); boxaDestroy(&pixac->boxa); FREE(pixac); *ppixac = NULL; return; } /*---------------------------------------------------------------------* * Pixacomp addition * *---------------------------------------------------------------------*/ /*! * pixacompAddPix() * * Input: pixac * pix (to be added) * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * Return: 0 if OK; 1 on error * * Notes: * (1) The array is filled up to the (n-1)-th element, and this * converts the input pix to a pixcomp and adds it at * the n-th position. */ l_int32 pixacompAddPix(PIXAC *pixac, PIX *pix, l_int32 comptype) { l_int32 cmapflag, format; PIXC *pixc; PROCNAME("pixacompAddPix"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return ERROR_INT("invalid format", procName, 1); cmapflag = pixGetColormap(pix) ? 1 : 0; pixcompDetermineFormat(comptype, pixGetDepth(pix), cmapflag, &format); if ((pixc = pixcompCreateFromPix(pix, format)) == NULL) return ERROR_INT("pixc not made", procName, 1); pixacompAddPixcomp(pixac, pixc); return 0; } /*! * pixacompAddPixcomp() * * Input: pixac * pixc (to be added by insertion) * Return: 0 if OK; 1 on error */ l_int32 pixacompAddPixcomp(PIXAC *pixac, PIXC *pixc) { l_int32 n; PROCNAME("pixacompAddPixcomp"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); if (!pixc) return ERROR_INT("pixc not defined", procName, 1); n = pixac->n; if (n >= pixac->nalloc) pixacompExtendArray(pixac); pixac->pixc[n] = pixc; pixac->n++; return 0; } /*! * pixacompExtendArray() * * Input: pixac * Return: 0 if OK; 1 on error * * Notes: * (1) We extend the boxa array simultaneously. This is * necessary in case we are NOT adding boxes simultaneously * with adding pixc. We always want the sizes of the * pixac and boxa ptr arrays to be equal. */ static l_int32 pixacompExtendArray(PIXAC *pixac) { PROCNAME("pixacompExtendArray"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); if ((pixac->pixc = (PIXC **)reallocNew((void **)&pixac->pixc, sizeof(PIXC *) * pixac->nalloc, 2 * sizeof(PIXC *) * pixac->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); pixac->nalloc = 2 * pixac->nalloc; boxaExtendArray(pixac->boxa); return 0; } /*! * pixacompReplacePix() * * Input: pixac * index (caller's view of index within pixac; includes offset) * pix (owned by the caller) * comptype (IFF_DEFAULT, IFF_TIFF_G4, IFF_PNG, IFF_JFIF_JPEG) * Return: 0 if OK; 1 on error * * Notes: * (1) The @index includes the offset, which must be subtracted * to get the actual index into the ptr array. * (2) The input @pix is converted to a pixc, which is then inserted * into the pixac. */ l_int32 pixacompReplacePix(PIXAC *pixac, l_int32 index, PIX *pix, l_int32 comptype) { l_int32 n, aindex; PIXC *pixc; PROCNAME("pixacompReplacePix"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); n = pixacompGetCount(pixac); aindex = index - pixac->offset; if (aindex < 0 || aindex >= n) return ERROR_INT("array index out of bounds", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if (comptype != IFF_DEFAULT && comptype != IFF_TIFF_G4 && comptype != IFF_PNG && comptype != IFF_JFIF_JPEG) return ERROR_INT("invalid format", procName, 1); pixc = pixcompCreateFromPix(pix, comptype); pixacompReplacePixcomp(pixac, index, pixc); return 0; } /*! * pixacompReplacePixcomp() * * Input: pixac * index (caller's view of index within pixac; includes offset) * pixc (to replace existing one, which is destroyed) * Return: 0 if OK; 1 on error * * Notes: * (1) The @index includes the offset, which must be subtracted * to get the actual index into the ptr array. * (2) The inserted @pixc is now owned by the pixac. The caller * must not destroy it. */ l_int32 pixacompReplacePixcomp(PIXAC *pixac, l_int32 index, PIXC *pixc) { l_int32 n, aindex; PIXC *pixct; PROCNAME("pixacompReplacePixcomp"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); n = pixacompGetCount(pixac); aindex = index - pixac->offset; if (aindex < 0 || aindex >= n) return ERROR_INT("array index out of bounds", procName, 1); if (!pixc) return ERROR_INT("pixc not defined", procName, 1); pixct = pixacompGetPixcomp(pixac, index); /* use @index */ pixcompDestroy(&pixct); pixac->pixc[aindex] = pixc; /* replace; use array index */ return 0; } /*! * pixacompAddBox() * * Input: pixac * box * copyflag (L_INSERT, L_COPY) * Return: 0 if OK, 1 on error */ l_int32 pixacompAddBox(PIXAC *pixac, BOX *box, l_int32 copyflag) { PROCNAME("pixacompAddBox"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (copyflag != L_INSERT && copyflag != L_COPY) return ERROR_INT("invalid copyflag", procName, 1); boxaAddBox(pixac->boxa, box, copyflag); return 0; } /*---------------------------------------------------------------------* * Pixacomp accessors * *---------------------------------------------------------------------*/ /*! * pixacompGetCount() * * Input: pixac * Return: count, or 0 if no pixa */ l_int32 pixacompGetCount(PIXAC *pixac) { PROCNAME("pixacompGetCount"); if (!pixac) return ERROR_INT("pixac not defined", procName, 0); return pixac->n; } /*! * pixacompGetPixcomp() * * Input: pixac * index (caller's view of index within pixac; includes offset) * Return: pixc, or null on error * * Notes: * (1) The @index includes the offset, which must be subtracted * to get the actual index into the ptr array. * (2) Important: this is just a ptr to the pixc owned by the pixac. * Do not destroy unless you are replacing the pixc. */ PIXC * pixacompGetPixcomp(PIXAC *pixac, l_int32 index) { l_int32 aindex; PROCNAME("pixacompGetPixcomp"); if (!pixac) return (PIXC *)ERROR_PTR("pixac not defined", procName, NULL); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return (PIXC *)ERROR_PTR("array index not valid", procName, NULL); return pixac->pixc[aindex]; } /*! * pixacompGetPix() * * Input: pixac * index (caller's view of index within pixac; includes offset) * Return: pix, or null on error * * Notes: * (1) The @index includes the offset, which must be subtracted * to get the actual index into the ptr array. */ PIX * pixacompGetPix(PIXAC *pixac, l_int32 index) { l_int32 aindex; PIXC *pixc; PROCNAME("pixacompGetPix"); if (!pixac) return (PIX *)ERROR_PTR("pixac not defined", procName, NULL); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return (PIX *)ERROR_PTR("array index not valid", procName, NULL); pixc = pixacompGetPixcomp(pixac, index); return pixCreateFromPixcomp(pixc); } /*! * pixacompGetPixDimensions() * * Input: pixa * index (caller's view of index within pixac; includes offset) * &w, &h, &d (; each can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) The @index includes the offset, which must be subtracted * to get the actual index into the ptr array. */ l_int32 pixacompGetPixDimensions(PIXAC *pixac, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd) { l_int32 aindex; PIXC *pixc; PROCNAME("pixacompGetPixDimensions"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return ERROR_INT("array index not valid", procName, 1); if ((pixc = pixac->pixc[aindex]) == NULL) return ERROR_INT("pixc not found!", procName, 1); pixcompGetDimensions(pixc, pw, ph, pd); return 0; } /*! * pixacompGetBoxa() * * Input: pixac * accesstype (L_COPY, L_CLONE, L_COPY_CLONE) * Return: boxa, or null on error */ BOXA * pixacompGetBoxa(PIXAC *pixac, l_int32 accesstype) { PROCNAME("pixacompGetBoxa"); if (!pixac) return (BOXA *)ERROR_PTR("pixac not defined", procName, NULL); if (!pixac->boxa) return (BOXA *)ERROR_PTR("boxa not defined", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (BOXA *)ERROR_PTR("invalid accesstype", procName, NULL); return boxaCopy(pixac->boxa, accesstype); } /*! * pixacompGetBoxaCount() * * Input: pixac * Return: count, or 0 on error */ l_int32 pixacompGetBoxaCount(PIXAC *pixac) { PROCNAME("pixacompGetBoxaCount"); if (!pixac) return ERROR_INT("pixac not defined", procName, 0); return boxaGetCount(pixac->boxa); } /*! * pixacompGetBox() * * Input: pixac * index (caller's view of index within pixac; includes offset) * accesstype (L_COPY or L_CLONE) * Return: box (if null, not automatically an error), or null on error * * Notes: * (1) The @index includes the offset, which must be subtracted * to get the actual index into the ptr array. * (2) There is always a boxa with a pixac, and it is initialized so * that each box ptr is NULL. * (3) In general, we expect that there is either a box associated * with each pixc, or no boxes at all in the boxa. * (4) Having no boxes is thus not an automatic error. Whether it * is an actual error is determined by the calling program. * If the caller expects to get a box, it is an error; see, e.g., * pixacGetBoxGeometry(). */ BOX * pixacompGetBox(PIXAC *pixac, l_int32 index, l_int32 accesstype) { l_int32 aindex; BOX *box; PROCNAME("pixacompGetBox"); if (!pixac) return (BOX *)ERROR_PTR("pixac not defined", procName, NULL); if (!pixac->boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->boxa->n) return (BOX *)ERROR_PTR("array index not valid", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE) return (BOX *)ERROR_PTR("invalid accesstype", procName, NULL); box = pixac->boxa->box[aindex]; if (box) { if (accesstype == L_COPY) return boxCopy(box); else /* accesstype == L_CLONE */ return boxClone(box); } else { return NULL; } } /*! * pixacompGetBoxGeometry() * * Input: pixac * index (caller's view of index within pixac; includes offset) * &x, &y, &w, &h (; each can be null) * Return: 0 if OK, 1 on error * * Notes: * (1) The @index includes the offset, which must be subtracted * to get the actual index into the ptr array. */ l_int32 pixacompGetBoxGeometry(PIXAC *pixac, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph) { l_int32 aindex; BOX *box; PROCNAME("pixacompGetBoxGeometry"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); aindex = index - pixac->offset; if (aindex < 0 || aindex >= pixac->n) return ERROR_INT("array index not valid", procName, 1); if ((box = pixacompGetBox(pixac, aindex, L_CLONE)) == NULL) return ERROR_INT("box not found!", procName, 1); boxGetGeometry(box, px, py, pw, ph); boxDestroy(&box); return 0; } /*! * pixacompGetOffset() * * Input: pixac * Return: offset, or 0 on error * * Notes: * (1) The offset is the difference between the caller's view of * the index into the array and the actual array index. * By default it is 0. */ l_int32 pixacompGetOffset(PIXAC *pixac) { PROCNAME("pixacompGetOffset"); if (!pixac) return ERROR_INT("pixac not defined", procName, 0); return pixac->offset; } /*! * pixacompSetOffset() * * Input: pixac * offset (non-negative) * Return: 0 if OK, 1 on error * * Notes: * (1) The offset is the difference between the caller's view of * the index into the array and the actual array index. * By default it is 0. */ l_int32 pixacompSetOffset(PIXAC *pixac, l_int32 offset) { PROCNAME("pixacompSetOffset"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); pixac->offset = L_MAX(0, offset); return 0; } /*---------------------------------------------------------------------* * Pixacomp conversion to Pixa * *---------------------------------------------------------------------*/ /*! * pixaCreateFromPixacomp() * * Input: pixac * accesstype (L_COPY, L_CLONE, L_COPY_CLONE; for boxa) * Return: pixa if OK, or null on error */ PIXA * pixaCreateFromPixacomp(PIXAC *pixac, l_int32 accesstype) { l_int32 i, n; PIX *pix; PIXA *pixa; PROCNAME("pixaCreateFromPixacomp"); if (!pixac) return (PIXA *)ERROR_PTR("pixac not defined", procName, NULL); if (accesstype != L_COPY && accesstype != L_CLONE && accesstype != L_COPY_CLONE) return (PIXA *)ERROR_PTR("invalid accesstype", procName, NULL); n = pixacompGetCount(pixac); if ((pixa = pixaCreate(n)) == NULL) return (PIXA *)ERROR_PTR("pixa not made", procName, NULL); for (i = 0; i < n; i++) { if ((pix = pixacompGetPix(pixac, i)) == NULL) { L_WARNING("pix %d not made\n", procName, i); continue; } pixaAddPix(pixa, pix, L_INSERT); } if (pixa->boxa) { boxaDestroy(&pixa->boxa); pixa->boxa = pixacompGetBoxa(pixac, accesstype); } return pixa; } /*---------------------------------------------------------------------* * Pixacomp serialized I/O * *---------------------------------------------------------------------*/ /*! * pixacompRead() * * Input: filename * Return: pixac, or null on error * * Notes: * (1) Unlike the situation with serialized Pixa, where the image * data is stored in png format, the Pixacomp image data * can be stored in tiffg4, png and jpg formats. */ PIXAC * pixacompRead(const char *filename) { FILE *fp; PIXAC *pixac; PROCNAME("pixacompRead"); if (!filename) return (PIXAC *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXAC *)ERROR_PTR("stream not opened", procName, NULL); if ((pixac = pixacompReadStream(fp)) == NULL) { fclose(fp); return (PIXAC *)ERROR_PTR("pixac not read", procName, NULL); } fclose(fp); return pixac; } /*! * pixacompReadStream() * * Input: stream * Return: pixac, or null on error */ PIXAC * pixacompReadStream(FILE *fp) { char buf[256]; l_uint8 *data; l_int32 n, offset, i, w, h, d, ignore; l_int32 comptype, size, cmapflag, version, xres, yres; BOXA *boxa; PIXC *pixc; PIXAC *pixac; PROCNAME("pixacompReadStream"); if (!fp) return (PIXAC *)ERROR_PTR("stream not defined", procName, NULL); if (fscanf(fp, "\nPixacomp Version %d\n", &version) != 1) return (PIXAC *)ERROR_PTR("not a pixacomp file", procName, NULL); if (version != PIXACOMP_VERSION_NUMBER) return (PIXAC *)ERROR_PTR("invalid pixacomp version", procName, NULL); if (fscanf(fp, "Number of pixcomp = %d", &n) != 1) return (PIXAC *)ERROR_PTR("not a pixacomp file", procName, NULL); if (fscanf(fp, "Offset of index into array = %d", &offset) != 1) return (PIXAC *)ERROR_PTR("offset not read", procName, NULL); if ((pixac = pixacompCreate(n)) == NULL) return (PIXAC *)ERROR_PTR("pixac not made", procName, NULL); if ((boxa = boxaReadStream(fp)) == NULL) return (PIXAC *)ERROR_PTR("boxa not made", procName, NULL); boxaDestroy(&pixac->boxa); /* empty */ pixac->boxa = boxa; pixacompSetOffset(pixac, offset); for (i = 0; i < n; i++) { if ((pixc = (PIXC *)CALLOC(1, sizeof(PIXC))) == NULL) return (PIXAC *)ERROR_PTR("pixc not made", procName, NULL); if (fscanf(fp, "\nPixcomp[%d]: w = %d, h = %d, d = %d\n", &ignore, &w, &h, &d) != 4) return (PIXAC *)ERROR_PTR("size reading", procName, NULL); if (fscanf(fp, " comptype = %d, size = %d, cmapflag = %d\n", &comptype, &size, &cmapflag) != 3) return (PIXAC *)ERROR_PTR("comptype/size reading", procName, NULL); /* Use fgets() and sscanf(); not fscanf(), for the last * bit of header data before the binary data. The reason is * that fscanf throws away white space, and if the binary data * happens to begin with ascii character(s) that are white * space, it will swallow them and all will be lost! */ if (fgets(buf, sizeof(buf), fp) == NULL) return (PIXAC *)ERROR_PTR("fgets read fail", procName, NULL); if (sscanf(buf, " xres = %d, yres = %d\n", &xres, &yres) != 2) return (PIXAC *)ERROR_PTR("read fail for res", procName, NULL); if ((data = (l_uint8 *)CALLOC(1, size)) == NULL) return (PIXAC *)ERROR_PTR("calloc fail for data", procName, NULL); if (fread(data, 1, size, fp) != size) return (PIXAC *)ERROR_PTR("error reading data", procName, NULL); fgetc(fp); /* swallow the ending nl */ pixc->w = w; pixc->h = h; pixc->d = d; pixc->xres = xres; pixc->yres = yres; pixc->comptype = comptype; pixc->cmapflag = cmapflag; pixc->data = data; pixc->size = size; pixacompAddPixcomp(pixac, pixc); } return pixac; } /*! * pixacompWrite() * * Input: filename * pixac * Return: 0 if OK, 1 on error * * Notes: * (1) Unlike the situation with serialized Pixa, where the image * data is stored in png format, the Pixacomp image data * can be stored in tiffg4, png and jpg formats. */ l_int32 pixacompWrite(const char *filename, PIXAC *pixac) { FILE *fp; PROCNAME("pixacompWrite"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!pixac) return ERROR_INT("pixacomp not defined", procName, 1); if ((fp = fopenWriteStream(filename, "wb")) == NULL) return ERROR_INT("stream not opened", procName, 1); if (pixacompWriteStream(fp, pixac)) return ERROR_INT("pixacomp not written to stream", procName, 1); fclose(fp); return 0; } /*! * pixacompWriteStream() * * Input: stream * pixac * Return: 0 if OK, 1 on error */ l_int32 pixacompWriteStream(FILE *fp, PIXAC *pixac) { l_int32 n, i; PIXC *pixc; PROCNAME("pixacompWriteStream"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); n = pixacompGetCount(pixac); fprintf(fp, "\nPixacomp Version %d\n", PIXACOMP_VERSION_NUMBER); fprintf(fp, "Number of pixcomp = %d", n); fprintf(fp, "Offset of index into array = %d", pixac->offset); boxaWriteStream(fp, pixac->boxa); for (i = 0; i < n; i++) { if ((pixc = pixacompGetPixcomp(pixac, pixacompGetOffset(pixac) + i)) == NULL) return ERROR_INT("pixc not found", procName, 1); fprintf(fp, "\nPixcomp[%d]: w = %d, h = %d, d = %d\n", i, pixc->w, pixc->h, pixc->d); fprintf(fp, " comptype = %d, size = %lu, cmapflag = %d\n", pixc->comptype, (unsigned long)pixc->size, pixc->cmapflag); fprintf(fp, " xres = %d, yres = %d\n", pixc->xres, pixc->yres); fwrite(pixc->data, 1, pixc->size, fp); fprintf(fp, "\n"); } return 0; } /*--------------------------------------------------------------------* * Conversion to pdf * *--------------------------------------------------------------------*/ /*! * pixacompConvertToPdf() * * Input: pixac (containing images all at the same resolution) * res (override the resolution of each input image, in ppi; * use 0 to respect the resolution embedded in the input) * scalefactor (scaling factor applied to each image; > 0.0) * type (encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default) * quality (used for JPEG only; 0 for default (75)) * title ( pdf title) * fileout (pdf file of all images) * Return: 0 if OK, 1 on error * * Notes: * (1) This follows closely the function pixaConvertToPdf() in pdfio.c. * (2) The images are encoded with G4 if 1 bpp; JPEG if 8 bpp without * colormap and many colors, or 32 bpp; FLATE for anything else. * (3) The scalefactor must be > 0.0; otherwise it is set to 1.0. * (4) Specifying one of the three encoding types for @type forces * all images to be compressed with that type. Use 0 to have * the type determined for each image based on depth and whether * or not it has a colormap. */ l_int32 pixacompConvertToPdf(PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, const char *fileout) { l_uint8 *data; l_int32 ret; size_t nbytes; PROCNAME("pixacompConvertToPdf"); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); ret = pixacompConvertToPdfData(pixac, res, scalefactor, type, quality, title, &data, &nbytes); if (ret) { FREE(data); return ERROR_INT("conversion to pdf failed", procName, 1); } ret = l_binaryWrite(fileout, "w", data, nbytes); FREE(data); if (ret) L_ERROR("pdf data not written to file\n", procName); return ret; } /*! * pixacompConvertToPdfData() * * Input: pixac (containing images all at the same resolution) * res (input resolution of all images) * scalefactor (scaling factor applied to each image; > 0.0) * type (encoding type (L_JPEG_ENCODE, L_G4_ENCODE, * L_FLATE_ENCODE, or 0 for default) * quality (used for JPEG only; 0 for default (75)) * title ( pdf title) * &data ( output pdf data (of all images) * &nbytes ( size of output pdf data) * Return: 0 if OK, 1 on error * * Notes: * (1) See pixacompConvertToPdf(). */ l_int32 pixacompConvertToPdfData(PIXAC *pixac, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, const char *title, l_uint8 **pdata, size_t *pnbytes) { l_uint8 *imdata; l_int32 i, n, ret, scaledres, pagetype; size_t imbytes; L_BYTEA *ba; PIX *pixs, *pix; L_PTRA *pa_data; PROCNAME("pixacompConvertToPdfData"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); *pdata = NULL; if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); *pnbytes = 0; if (!pixac) return ERROR_INT("pixac not defined", procName, 1); if (scalefactor <= 0.0) scalefactor = 1.0; if (type < 0 || type > L_FLATE_ENCODE) { L_WARNING("invalid compression type; using per-page default\n", procName); type = 0; } /* Generate all the encoded pdf strings */ n = pixacompGetCount(pixac); pa_data = ptraCreate(n); for (i = 0; i < n; i++) { if ((pixs = pixacompGetPix(pixac, pixacompGetOffset(pixac) + i)) == NULL) { L_ERROR("pix[%d] not retrieved\n", procName, i); continue; } if (pixGetWidth(pixs) == 1) { /* used sometimes as placeholders */ L_INFO("placeholder image[%d] has w = 1\n", procName, i); pixDestroy(&pixs); continue; } if (scalefactor != 1.0) pix = pixScale(pixs, scalefactor, scalefactor); else pix = pixClone(pixs); pixDestroy(&pixs); scaledres = (l_int32)(res * scalefactor); if (type != 0) { pagetype = type; } else if (selectDefaultPdfEncoding(pix, &pagetype) != 0) { L_ERROR("encoding type selection failed for pix[%d]\n", procName, i); pixDestroy(&pix); continue; } ret = pixConvertToPdfData(pix, pagetype, quality, &imdata, &imbytes, 0, 0, scaledres, title, NULL, 0); pixDestroy(&pix); if (ret) { L_ERROR("pdf encoding failed for pix[%d]\n", procName, i); continue; } ba = l_byteaInitFromMem(imdata, imbytes); if (imdata) FREE(imdata); ptraAdd(pa_data, ba); } ptraGetActualCount(pa_data, &n); if (n == 0) { L_ERROR("no pdf files made\n", procName); ptraDestroy(&pa_data, FALSE, FALSE); return 1; } /* Concatenate them */ ret = ptraConcatenatePdfToData(pa_data, NULL, pdata, pnbytes); ptraGetActualCount(pa_data, &n); /* recalculate in case it changes */ for (i = 0; i < n; i++) { ba = (L_BYTEA *)ptraRemove(pa_data, i, L_NO_COMPACTION); l_byteaDestroy(&ba); } ptraDestroy(&pa_data, FALSE, FALSE); return ret; } /*--------------------------------------------------------------------* * Output for debugging * *--------------------------------------------------------------------*/ /*! * pixacompWriteStreamInfo() * * Input: fp (file stream) * pixac * text ( identifying string; can be null) * Return: 0 if OK, 1 on error */ l_int32 pixacompWriteStreamInfo(FILE *fp, PIXAC *pixac, const char *text) { l_int32 i, n, nboxes; PIXC *pixc; PROCNAME("pixacompWriteStreamInfo"); if (!fp) return ERROR_INT("fp not defined", procName, 1); if (!pixac) return ERROR_INT("pixac not defined", procName, 1); if (text) fprintf(fp, "Pixacomp Info for %s:\n", text); else fprintf(fp, "Pixacomp Info:\n"); n = pixacompGetCount(pixac); nboxes = pixacompGetBoxaCount(pixac); fprintf(fp, "Number of pixcomp: %d\n", n); fprintf(fp, "Size of pixcomp array alloc: %d\n", pixac->nalloc); fprintf(fp, "Offset of index into array: %d\n", pixac->offset); if (nboxes > 0) fprintf(fp, "Boxa has %d boxes\n", nboxes); else fprintf(fp, "Boxa is empty\n"); for (i = 0; i < n; i++) { pixc = pixacompGetPixcomp(pixac, pixac->offset + i); pixcompWriteStreamInfo(fp, pixc, NULL); } return 0; } /*! * pixcompWriteStreamInfo() * * Input: fp (file stream) * pixc * text ( identifying string; can be null) * Return: 0 if OK, 1 on error */ l_int32 pixcompWriteStreamInfo(FILE *fp, PIXC *pixc, const char *text) { PROCNAME("pixcompWriteStreamInfo"); if (!fp) return ERROR_INT("fp not defined", procName, 1); if (!pixc) return ERROR_INT("pixc not defined", procName, 1); if (text) fprintf(fp, " Pixcomp Info for %s:", text); else fprintf(fp, " Pixcomp Info:"); fprintf(fp, " width = %d, height = %d, depth = %d\n", pixc->w, pixc->h, pixc->d); fprintf(fp, " xres = %d, yres = %d, size in bytes = %lu\n", pixc->xres, pixc->yres, (unsigned long)pixc->size); if (pixc->cmapflag) fprintf(fp, " has colormap\n"); else fprintf(fp, " no colormap\n"); if (pixc->comptype < NumImageFileFormatExtensions) { fprintf(fp, " comptype = %s (%d)\n", ImageFileFormatExtensions[pixc->comptype], pixc->comptype); } else { fprintf(fp, " Error!! Invalid comptype index: %d\n", pixc->comptype); } return 0; } /*! * pixacompDisplayTiledAndScaled() * * Input: pixac * outdepth (output depth: 1, 8 or 32 bpp) * tilewidth (each pix is scaled to this width) * ncols (number of tiles in each row) * background (0 for white, 1 for black; this is the color * of the spacing between the images) * spacing (between images, and on outside) * border (width of additional black border on each image; * use 0 for no border) * Return: pix of tiled images, or null on error * * Notes: * (1) This is the same function as pixaDisplayTiledAndScaled(), * except it works on a Pixacomp instead of a Pix. It is particularly * useful for showing the images in a Pixacomp at reduced resolution. * (2) This can be used to tile a number of renderings of * an image that are at different scales and depths. * (3) Each image, after scaling and optionally adding the * black border, has width 'tilewidth'. Thus, the border does * not affect the spacing between the image tiles. The * maximum allowed border width is tilewidth / 5. */ PIX * pixacompDisplayTiledAndScaled(PIXAC *pixac, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border) { l_int32 x, y, w, h, wd, hd, d; l_int32 i, n, nrows, maxht, ninrow, irow, bordval; l_int32 *rowht; l_float32 scalefact; PIX *pix, *pixn, *pixt, *pixb, *pixd; PIXA *pixan; PROCNAME("pixacompDisplayTiledAndScaled"); if (!pixac) return (PIX *)ERROR_PTR("pixac not defined", procName, NULL); if (outdepth != 1 && outdepth != 8 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL); if (border < 0 || border > tilewidth / 5) border = 0; if ((n = pixacompGetCount(pixac)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); /* Normalize scale and depth for each pix; optionally add border */ pixan = pixaCreate(n); bordval = (outdepth == 1) ? 1 : 0; for (i = 0; i < n; i++) { if ((pix = pixacompGetPix(pixac, pixacompGetOffset(pixac) + i)) == NULL) { L_WARNING("pix %d not made\n", procName, i); continue; } pixGetDimensions(pix, &w, &h, &d); scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w; if (d == 1 && outdepth > 1 && scalefact < 1.0) pixt = pixScaleToGray(pix, scalefact); else pixt = pixScale(pix, scalefact, scalefact); if (outdepth == 1) pixn = pixConvertTo1(pixt, 128); else if (outdepth == 8) pixn = pixConvertTo8(pixt, FALSE); else /* outdepth == 32 */ pixn = pixConvertTo32(pixt); pixDestroy(&pixt); if (border) pixb = pixAddBorder(pixn, border, bordval); else pixb = pixClone(pixn); pixaAddPix(pixan, pixb, L_INSERT); pixDestroy(&pix); pixDestroy(&pixn); } if ((n = pixaGetCount(pixan)) == 0) { /* should not have changed! */ pixaDestroy(&pixan); return (PIX *)ERROR_PTR("no components", procName, NULL); } /* Determine the size of each row and of pixd */ wd = tilewidth * ncols + spacing * (ncols + 1); nrows = (n + ncols - 1) / ncols; if ((rowht = (l_int32 *)CALLOC(nrows, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("rowht array not made", procName, NULL); maxht = 0; ninrow = 0; irow = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixan, i, L_CLONE); ninrow++; pixGetDimensions(pix, &w, &h, NULL); maxht = L_MAX(h, maxht); if (ninrow == ncols) { rowht[irow] = maxht; maxht = ninrow = 0; /* reset */ irow++; } pixDestroy(&pix); } if (ninrow > 0) { /* last fencepost */ rowht[irow] = maxht; irow++; /* total number of rows */ } nrows = irow; hd = spacing * (nrows + 1); for (i = 0; i < nrows; i++) hd += rowht[i]; pixd = pixCreate(wd, hd, outdepth); if ((background == 1 && outdepth == 1) || (background == 0 && outdepth != 1)) pixSetAll(pixd); /* Now blit images to pixd */ x = y = spacing; irow = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixan, i, L_CLONE); pixGetDimensions(pix, &w, &h, NULL); if (i && ((i % ncols) == 0)) { /* start new row */ x = spacing; y += spacing + rowht[irow]; irow++; } pixRasterop(pixd, x, y, w, h, PIX_SRC, pix, 0, 0); x += tilewidth + spacing; pixDestroy(&pix); } pixaDestroy(&pixan); FREE(rowht); return pixd; } leptonica-1.70/src/list.c0000644000175000017500000006213412244224025013416 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * list.c * * Inserting and removing elements * * void listDestroy() * DLLIST *listAddToHead() * l_int32 listAddToTail() * l_int32 listInsertBefore() * l_int32 listInsertAfter() * void *listRemoveElement() * void *listRemoveFromHead() * void *listRemoveFromTail() * * Other list operations * * DLLIST *listFindElement() * DLLIST *listFindTail() * l_int32 listGetCount() * l_int32 listReverse() * DLLIST *listJoin() * * Lists are much harder to handle than arrays. There is * more overhead for the programmer, both cognitive and * codewise, and more likelihood that an error can be made. * For that reason, lists should only be used when it is * inefficient to use arrays, such as when elements are * routinely inserted or deleted from inside arrays whose * average size is greater than about 10. * * A list of data structures can be implemented in a number * of ways. The two most popular are: * * (1) The list can be composed of a linked list of * pointer cells ("cons cells"), where the data structures * are hung off the cells. This is more difficult * to use because you have to keep track of both * your hanging data and the cell structures. * It requires 3 pointers for every data structure * that is put in a list. There is no problem * cloning (using reference counts) for structures that * are put in such a list. We implement lists by this * method here. * * (2) The list pointers can be inserted directly into * the data structures. This is easy to implement * and easier to use, but it adds 2 ptrs of overhead * to every data structure in which the ptrs are embedded. * It also requires special care not to put the ptrs * in any data that is cloned with a reference count; * else your lists will break. * * Writing C code that uses list pointers explicitly to make * and alter lists is difficult and prone to error. * Consequently, a generic list utility that handles lists * of arbitrary objects and doesn't force the programmer to * touch the "next" and "prev" pointers, is quite useful. * Such functions are provided here. However, the usual * situation requires traversing a list and applying some * function to one or more of the list elements. Macros * for traversing the list are, in general, necessary, to * achieve the goal of invisibly handling all "next" and "prev" * pointers in generic lists. We provide macros for * traversing a list in both forward and reverse directions. * * Because of the typing in C, implementation of a general * list utility requires casting. If macros are used, the * casting can be done implicitly; otherwise, using functions, * some of the casts must be explicit. Fortunately, this * can be implemented with void* so the programmer using * the library will not have to make any casts! (Unless you * compile with g++, in which case the rules on implicit * conversion are more strict.) * * For example, to add an arbitrary data structure foo to the * tail of a list, use * listAddToTail(&head, &tail, pfoo); * where head and tail are list cell ptrs and pfoo is * a pointer to the foo object. * And to remove an arbitrary data structure foo from a * list, when you know the list cell element it is hanging from, * use * pfoo = listRemoveElement(&head, elem) * where head and elem are list cell ptrs and pfoo is a pointer * to the foo object. No casts are required for foo in * either direction in ANSI C. (However, casts are * required for ANSI C++). * * We use lists that are composed of doubly-linked * cells with data structures hanging off the cells. * We use doubly-linked cells to simplify insertion * and deletion, and to allow operations to proceed in either * direction along the list. With doubly-linked lists, * it is tempting to make them circular, by setting head->prev * to the tail of the list and tail->next to the head. * The circular list costs nothing extra in storage, and * allows operations to proceed from either end of the list * with equal speed. However, the circular link adds * cognitive overhead for the application programmer in * general, and it greatly complicates list traversal when * arbitrary list elements can be added or removed as you * move through. It can be done, but in the spirit of * simplicity, we avoid the temptation. The price to be paid * is the extra cost to find the tail of a list -- a full * traversal -- before the tail can be used. This is a * cheap price to pay to avoid major headaches and buggy code. * * When you are only applying some function to each element * in a list, you can go either forwards or backwards. * To run through a list forwards, use: * * for (elem = head; elem; elem = nextelem) { * nextelem = elem->next; (in case we destroy elem) * data> * } * * To run through a list backwards, find the tail and use: * * for (elem = tail; elem; elem = prevelem) { # prevelem = elem->prev; (in case we destroy elem) * data> * } * * Even though these patterns are very simple, they are so common * that we've provided macros for them in list.h. Using the * macros, this becomes: * * L_BEGIN_LIST_FORWARD(head, elem) * data> * L_END_LIST * * L_BEGIN_LIST_REVERSE(tail, elem) * data> * L_END_LIST * * Note again that with macros, the application programmer does * not need to refer explicitly to next and prev fields. Also, * in the reverse case, note that we do not explicitly * show the head of the list. However, the head of the list * is always in scope, and functions can be called within the * iterator that change the head. * * Some special cases are simpler. For example, when * removing all items from the head of the list, you can use * * while (head) { * obj = listRemoveFromHead(&head); * * } * * Removing successive elements from the tail is equally simple: * * while (tail) { * obj = listRemoveFromTail(&head, &tail); * * } * * When removing an arbitrary element from a list, use * * obj = listRemoveElement(&head, elem); * * All the listRemove*() functions hand you the object, * destroy the list cell to which it was attached, and * reset the list pointers if necessary. * * Several other list operations, that do not involve * inserting or removing objects, are also provided. * The function listFindElement() locates a list pointer * by matching the object hanging on it to a given * object. The function listFindTail() gets a handle * to the tail list ptr, allowing backwards traversals of * the list. listGetCount() gives the number of elements * in a list. Functions that reverse a list and concatenate * two lists are also provided. * * These functions can be modified for efficiency in the * situation where there is a large amount of creation and * destruction of list cells. If millions of cells are * made and destroyed, but a relatively small number are * around at any time, the list cells can be stored for * later re-use in a stack (see the generic stack functions * in stack.c). */ #include #include "allheaders.h" /*---------------------------------------------------------------------* * Inserting and removing elements * *---------------------------------------------------------------------*/ /*! * listDestroy() * * Input: &head ( head of list) * Return: void * * Notes: * (1) This only destroys the cons cells. Before destroying * the list, it is necessary to remove all data and set the * data pointers in each cons cell to NULL. * (2) listDestroy() will give a warning message for each data * ptr that is not NULL. */ void listDestroy(DLLIST **phead) { DLLIST *elem, *next, *head; PROCNAME("listDestroy"); if (phead == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((head = *phead) == NULL) return; for (elem = head; elem; elem = next) { if (elem->data) L_WARNING("list data ptr is not null\n", procName); next = elem->next; FREE(elem); } *phead = NULL; return; } /*! * listAddToHead() * * Input: &head ( input head) * data (void* ptr, to be added) * Return: 0 if OK; 1 on error * * Notes: * (1) This makes a new cell, attaches the data, and adds the * cell to the head of the list. * (2) When consing from NULL, be sure to initialize head to NULL * before calling this function. */ l_int32 listAddToHead(DLLIST **phead, void *data) { DLLIST *cell, *head; PROCNAME("listAddToHead"); if (!phead) return ERROR_INT("&head not defined", procName, 1); head = *phead; if (!data) return ERROR_INT("data not defined", procName, 1); if ((cell = (DLLIST *)CALLOC(1, sizeof(DLLIST))) == NULL) return ERROR_INT("cell not made", procName, 1); cell->data = data; if (!head) { /* start the list; initialize the ptrs */ cell->prev = NULL; cell->next = NULL; } else { cell->prev = NULL; cell->next = head; head->prev = cell; } *phead = cell; return 0; } /*! * listAddToTail() * * Input: &head (, head can be null) * &tail (, tail can be null) * data (void* ptr, to be hung on tail cons cell) * Return: 0 if OK; 1 on error * * Notes: * (1) This makes a new cell, attaches the data, and adds the * cell to the tail of the list. * (2) &head is input to allow the list to be "cons'd" up from NULL. * (3) &tail is input to allow the tail to be updated * for efficient sequential operation with this function. * (4) We assume that if *phead and/or *ptail are not NULL, * then they are valid addresses. Therefore: * (a) when consing from NULL, be sure to initialize both * head and tail to NULL. * (b) when tail == NULL for an existing list, the tail * will be found and updated. */ l_int32 listAddToTail(DLLIST **phead, DLLIST **ptail, void *data) { DLLIST *cell, *head, *tail; PROCNAME("listAddToTail"); if (!phead) return ERROR_INT("&head not defined", procName, 1); head = *phead; if (!ptail) return ERROR_INT("&tail not defined", procName, 1); if (!data) return ERROR_INT("data not defined", procName, 1); if ((cell = (DLLIST *)CALLOC(1, sizeof(DLLIST))) == NULL) return ERROR_INT("cell not made", procName, 1); cell->data = data; if (!head) { /* Start the list and initialize the ptrs. *ptail * should also have been initialized to NULL */ cell->prev = NULL; cell->next = NULL; *phead = cell; *ptail = cell; } else { if ((tail = *ptail) == NULL) tail = listFindTail(head); cell->prev = tail; cell->next = NULL; tail->next = cell; *ptail = cell; } return 0; } /*! * listInsertBefore() * * Input: &head ( input head) * elem (list element to be inserted in front of; * must be null if head is null) * data (void* address, to be added) * Return: 0 if OK; 1 on error * * Notes: * (1) This can be called on a null list, in which case both * head and elem must be null. * (2) If you are searching through a list, looking for a condition * to add an element, you can do something like this: * L_BEGIN_LIST_FORWARD(head, elem) * * listInsertBefore(&head, elem, data); * L_END_LIST * */ l_int32 listInsertBefore(DLLIST **phead, DLLIST *elem, void *data) { DLLIST *cell, *head; PROCNAME("listInsertBefore"); if (!phead) return ERROR_INT("&head not defined", procName, 1); head = *phead; if (!data) return ERROR_INT("data not defined", procName, 1); if ((!head && elem) || (head && !elem)) return ERROR_INT("head and elem not consistent", procName, 1); /* New cell to insert */ if ((cell = (DLLIST *)CALLOC(1, sizeof(DLLIST))) == NULL) return ERROR_INT("cell not made", procName, 1); cell->data = data; if (!head) { /* start the list; initialize the ptrs */ cell->prev = NULL; cell->next = NULL; *phead = cell; } else if (head == elem) { /* insert before head of list */ cell->prev = NULL; cell->next = head; head->prev = cell; *phead = cell; } else { /* insert before elem and after head of list */ cell->prev = elem->prev; cell->next = elem; elem->prev->next = cell; elem->prev = cell; } return 0; } /*! * listInsertAfter() * * Input: &head ( input head) * elem (list element to be inserted after; * must be null if head is null) * data (void* ptr, to be added) * Return: 0 if OK; 1 on error * * Notes: * (1) This can be called on a null list, in which case both * head and elem must be null. The head is included * in the call to allow "consing" up from NULL. * (2) If you are searching through a list, looking for a condition * to add an element, you can do something like this: * L_BEGIN_LIST_FORWARD(head, elem) * * listInsertAfter(&head, elem, data); * L_END_LIST */ l_int32 listInsertAfter(DLLIST **phead, DLLIST *elem, void *data) { DLLIST *cell, *head; PROCNAME("listInsertAfter"); if (!phead) return ERROR_INT("&head not defined", procName, 1); head = *phead; if (!data) return ERROR_INT("data not defined", procName, 1); if ((!head && elem) || (head && !elem)) return ERROR_INT("head and elem not consistent", procName, 1); /* New cell to insert */ if ((cell = (DLLIST *)CALLOC(1, sizeof(DLLIST))) == NULL) return ERROR_INT("cell not made", procName, 1); cell->data = data; if (!head) { /* start the list; initialize the ptrs */ cell->prev = NULL; cell->next = NULL; *phead = cell; } else if (elem->next == NULL) { /* insert after last */ cell->prev = elem; cell->next = NULL; elem->next = cell; } else { /* insert after elem and before the end */ cell->prev = elem; cell->next = elem->next; elem->next->prev = cell; elem->next = cell; } return 0; } /*! * listRemoveElement() * * Input: &head ( input head) * elem (list element to be removed) * Return: data (void* struct on cell) * * Notes: * (1) in ANSI C, it is not necessary to cast return to actual type; e.g., * pix = listRemoveElement(&head, elem); * but in ANSI C++, it is necessary to do the cast: * pix = (Pix *)listRemoveElement(&head, elem); */ void * listRemoveElement(DLLIST **phead, DLLIST *elem) { void *data; DLLIST *head; PROCNAME("listRemoveElement"); if (!phead) return (void *)ERROR_PTR("&head not defined", procName, NULL); head = *phead; if (!head) return (void *)ERROR_PTR("head not defined", procName, NULL); if (!elem) return (void *)ERROR_PTR("elem not defined", procName, NULL); data = elem->data; if (head->next == NULL) { /* only one */ if (elem != head) return (void *)ERROR_PTR("elem must be head", procName, NULL); *phead = NULL; } else if (head == elem) { /* first one */ elem->next->prev = NULL; *phead = elem->next; } else if (elem->next == NULL) { /* last one */ elem->prev->next = NULL; } else { /* neither the first nor the last one */ elem->next->prev = elem->prev; elem->prev->next = elem->next; } FREE(elem); return data; } /*! * listRemoveFromHead() * * Input: &head ( head of list) * Return: data (void* struct on cell), or null on error * * Notes: * (1) in ANSI C, it is not necessary to cast return to actual type; e.g., * pix = listRemoveFromHead(&head); * but in ANSI C++, it is necessary to do the cast; e.g., * pix = (Pix *)listRemoveFromHead(&head); */ void * listRemoveFromHead(DLLIST **phead) { DLLIST *head; void *data; PROCNAME("listRemoveFromHead"); if (!phead) return (void *)ERROR_PTR("&head not defined", procName, NULL); if ((head = *phead) == NULL) return (void *)ERROR_PTR("head not defined", procName, NULL); if (head->next == NULL) { /* only one */ *phead = NULL; } else { head->next->prev = NULL; *phead = head->next; } data = head->data; FREE(head); return data; } /*! * listRemoveFromTail() * * Input: &head (, head must NOT be null) * &tail (, tail may be null) * Return: data (void* struct on cell) or null on error * * Notes: * (1) We include &head so that it can be set to NULL if * if the only element in the list is removed. * (2) The function is relying on the fact that if tail is * not NULL, then is is a valid address. You can use * this function with tail == NULL for an existing list, in * which case the tail is found and updated, and the * removed element is returned. * (3) In ANSI C, it is not necessary to cast return to actual type; e.g., * pix = listRemoveFromTail(&head, &tail); * but in ANSI C++, it is necessary to do the cast; e.g., * pix = (Pix *)listRemoveFromTail(&head, &tail); */ void * listRemoveFromTail(DLLIST **phead, DLLIST **ptail) { DLLIST *head, *tail; void *data; PROCNAME("listRemoveFromTail"); if (!phead) return (void *)ERROR_PTR("&head not defined", procName, NULL); if ((head = *phead) == NULL) return (void *)ERROR_PTR("head not defined", procName, NULL); if (!ptail) return (void *)ERROR_PTR("&tail not defined", procName, NULL); if ((tail = *ptail) == NULL) tail = listFindTail(head); if (head->next == NULL) { /* only one */ *phead = NULL; *ptail = NULL; } else { tail->prev->next = NULL; *ptail = tail->prev; } data = tail->data; FREE(tail); return data; } /*---------------------------------------------------------------------* * Other list operations * *---------------------------------------------------------------------*/ /*! * listFindElement() * * Input: head (list head) * data (void* address, to be searched for) * Return: cell (the containing cell, or null if not found or on error) * * Notes: * (1) This returns a ptr to the cell, which is still embedded in * the list. * (2) This handle and the attached data have not been copied or * reference counted, so they must not be destroyed. This * violates our basic rule that every handle returned from a * function is owned by that function and must be destroyed, * but if rules aren't there to be broken, why have them? */ DLLIST * listFindElement(DLLIST *head, void *data) { DLLIST *cell; PROCNAME("listFindElement"); if (!head) return (DLLIST *)ERROR_PTR("head not defined", procName, NULL); if (!data) return (DLLIST *)ERROR_PTR("data not defined", procName, NULL); for (cell = head; cell; cell = cell->next) { if (cell->data == data) return cell; } return NULL; } /*! * listFindTail() * * Input: head * Return: tail, or null on error */ DLLIST * listFindTail(DLLIST *head) { DLLIST *cell; PROCNAME("listFindTail"); if (!head) return (DLLIST *)ERROR_PTR("head not defined", procName, NULL); for (cell = head; cell; cell = cell->next) { if (cell->next == NULL) return cell; } return (DLLIST *)ERROR_PTR("tail not found !!", procName, NULL); } /*! * listGetCount() * * Input: head (of list) * Return: number of elements; 0 if no list or on error */ l_int32 listGetCount(DLLIST *head) { l_int32 count; DLLIST *elem; PROCNAME("listGetCount"); if (!head) return ERROR_INT("head not defined", procName, 0); count = 0; for (elem = head; elem; elem = elem->next) count++; return count; } /*! * listReverse() * * Input: &head ( list head) * Return: 0 if OK, 1 on error * * Notes: * (1) This reverses the list in-place. */ l_int32 listReverse(DLLIST **phead) { void *obj; /* whatever */ DLLIST *head, *rhead; PROCNAME("listReverse"); if (!phead) return ERROR_INT("&head not defined", procName, 1); if ((head = *phead) == NULL) return ERROR_INT("head not defined", procName, 1); rhead = NULL; while (head) { obj = listRemoveFromHead(&head); listAddToHead(&rhead, obj); } *phead = rhead; return 0; } /*! * listJoin() * * Input: &head1 ( head of first list) * &head2 ( head of second list) * Return: 0 if OK, 1 on error * * Notes: * (1) The concatenated list is returned with head1 as the new head. * (2) Both input ptrs must exist, though either can have the value NULL. */ l_int32 listJoin(DLLIST **phead1, DLLIST **phead2) { void *obj; DLLIST *head1, *head2, *tail1; PROCNAME("listJoin"); if (!phead1) return ERROR_INT("&head1 not defined", procName, 1); if (!phead2) return ERROR_INT("&head2 not defined", procName, 1); /* If no list2, just return list1 unchanged */ if ((head2 = *phead2) == NULL) return 0; /* If no list1, just return list2 */ if ((head1 = *phead1) == NULL) { *phead1 = head2; *phead2 = NULL; return 0; } /* General case for concatenation into list 1 */ tail1 = listFindTail(head1); while (head2) { obj = listRemoveFromHead(&head2); listAddToTail(&head1, &tail1, obj); } *phead2 = NULL; return 0; } leptonica-1.70/src/heap.c0000644000175000017500000003740512244223470013366 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * heap.c * * Create/Destroy L_Heap * L_HEAP *lheapCreate() * void *lheapDestroy() * * Operations to add/remove to/from the heap * l_int32 lheapAdd() * static l_int32 lheapExtendArray() * void *lheapRemove() * * Heap operations * l_int32 lheapSwapUp() * l_int32 lheapSwapDown() * l_int32 lheapSort() * l_int32 lheapSortStrictOrder() * * Accessors * l_int32 lheapGetCount() * * Debug output * l_int32 lheapPrint() * * The L_Heap is useful to implement a priority queue, that is sorted * on a key in each element of the heap. The heap is an array * of nearly arbitrary structs, with a l_float32 the first field. * This field is the key on which the heap is sorted. * * Internally, we keep track of the heap size, n. The item at the * root of the heap is at the head of the array. Items are removed * from the head of the array and added to the end of the array. * When an item is removed from the head, the item at the end * of the array is moved to the head. When items are either * added or removed, it is usually necesary to swap array items * to restore the heap order. It is guaranteed that the number * of swaps does not exceed log(n). * * -------------------------- N.B. ------------------------------ * The items on the heap (or, equivalently, in the array) are cast * to void*. Their key is a l_float32, and it is REQUIRED that the * key be the first field in the struct. That allows us to get the * key by simply dereferencing the struct. Alternatively, we could * choose (but don't) to pass an application-specific comparison * function into the heap operation functions. * -------------------------- N.B. ------------------------------ */ #include #include "allheaders.h" static const l_int32 MIN_BUFFER_SIZE = 20; /* n'importe quoi */ static const l_int32 INITIAL_BUFFER_ARRAYSIZE = 128; /* n'importe quoi */ #define SWAP_ITEMS(i, j) { void *tempitem = lh->array[(i)]; \ lh->array[(i)] = lh->array[(j)]; \ lh->array[(j)] = tempitem; } /* Static function */ static l_int32 lheapExtendArray(L_HEAP *lh); /*--------------------------------------------------------------------------* * L_Heap create/destroy * *--------------------------------------------------------------------------*/ /*! * lheapCreate() * * Input: size of ptr array to be alloc'd (0 for default) * direction (L_SORT_INCREASING, L_SORT_DECREASING) * Return: lheap, or null on error */ L_HEAP * lheapCreate(l_int32 nalloc, l_int32 direction) { L_HEAP *lh; PROCNAME("lheapCreate"); if (nalloc < MIN_BUFFER_SIZE) nalloc = MIN_BUFFER_SIZE; /* Allocate ptr array and initialize counters. */ if ((lh = (L_HEAP *)CALLOC(1, sizeof(L_HEAP))) == NULL) return (L_HEAP *)ERROR_PTR("lh not made", procName, NULL); if ((lh->array = (void **)CALLOC(nalloc, sizeof(void *))) == NULL) return (L_HEAP *)ERROR_PTR("ptr array not made", procName, NULL); lh->nalloc = nalloc; lh->n = 0; lh->direction = direction; return lh; } /*! * lheapDestroy() * * Input: &lheap () * freeflag (TRUE to free each remaining struct in the array) * Return: void * * Notes: * (1) Use freeflag == TRUE when the items in the array can be * simply destroyed using free. If those items require their * own destroy function, they must be destroyed before * calling this function, and then this function is called * with freeflag == FALSE. * (2) To destroy the lheap, we destroy the ptr array, then * the lheap, and then null the contents of the input ptr. */ void lheapDestroy(L_HEAP **plh, l_int32 freeflag) { l_int32 i; L_HEAP *lh; PROCNAME("lheapDestroy"); if (plh == NULL) { L_WARNING("ptr address is NULL\n", procName); return; } if ((lh = *plh) == NULL) return; if (freeflag) { /* free each struct in the array */ for (i = 0; i < lh->n; i++) FREE(lh->array[i]); } else if (lh->n > 0) { /* freeflag == FALSE but elements exist on array */ L_WARNING("memory leak of %d items in lheap!\n", procName, lh->n); } if (lh->array) FREE(lh->array); FREE(lh); *plh = NULL; return; } /*--------------------------------------------------------------------------* * Accessors * *--------------------------------------------------------------------------*/ /*! * lheapAdd() * * Input: lheap * item to be added to the tail of the heap * Return: 0 if OK, 1 on error */ l_int32 lheapAdd(L_HEAP *lh, void *item) { PROCNAME("lheapAdd"); if (!lh) return ERROR_INT("lh not defined", procName, 1); if (!item) return ERROR_INT("item not defined", procName, 1); /* If necessary, expand the allocated array by a factor of 2 */ if (lh->n >= lh->nalloc) lheapExtendArray(lh); /* Add the item */ lh->array[lh->n] = item; lh->n++; /* Restore the heap */ lheapSwapUp(lh, lh->n - 1); return 0; } /*! * lheapExtendArray() * * Input: lheap * Return: 0 if OK, 1 on error */ static l_int32 lheapExtendArray(L_HEAP *lh) { PROCNAME("lheapExtendArray"); if (!lh) return ERROR_INT("lh not defined", procName, 1); if ((lh->array = (void **)reallocNew((void **)&lh->array, sizeof(void *) * lh->nalloc, 2 * sizeof(void *) * lh->nalloc)) == NULL) return ERROR_INT("new ptr array not returned", procName, 1); lh->nalloc = 2 * lh->nalloc; return 0; } /*! * lheapRemove() * * Input: lheap * Return: ptr to item popped from the root of the heap, * or null if the heap is empty or on error */ void * lheapRemove(L_HEAP *lh) { void *item; PROCNAME("lheapRemove"); if (!lh) return (void *)ERROR_PTR("lh not defined", procName, NULL); if (lh->n == 0) return NULL; item = lh->array[0]; lh->array[0] = lh->array[lh->n - 1]; /* move last to the head */ lh->array[lh->n - 1] = NULL; /* set ptr to null */ lh->n--; lheapSwapDown(lh); /* restore the heap */ return item; } /*! * lheapGetCount() * * Input: lheap * Return: count, or 0 on error */ l_int32 lheapGetCount(L_HEAP *lh) { PROCNAME("lheapGetCount"); if (!lh) return ERROR_INT("lh not defined", procName, 0); return lh->n; } /*--------------------------------------------------------------------------* * Heap operations * *--------------------------------------------------------------------------*/ /*! * lheapSwapUp() * * Input: lh (heap) * index (of array corresponding to node to be swapped up) * Return: 0 if OK, 1 on error * * Notes: * (1) This is called after a new item is put on the heap, at the * bottom of a complete tree. * (2) To regain the heap order, we let it bubble up, * iteratively swapping with its parent, until it either * reaches the root of the heap or it finds a parent that * is in the correct position already vis-a-vis the child. */ l_int32 lheapSwapUp(L_HEAP *lh, l_int32 index) { l_int32 ip; /* index to heap for parent; 1 larger than array index */ l_int32 ic; /* index into heap for child */ l_float32 valp, valc; PROCNAME("lheapSwapUp"); if (!lh) return ERROR_INT("lh not defined", procName, 1); if (index < 0 || index >= lh->n) return ERROR_INT("invalid index", procName, 1); ic = index + 1; /* index into heap: add 1 to array index */ if (lh->direction == L_SORT_INCREASING) { while (1) { if (ic == 1) /* root of heap */ break; ip = ic / 2; valc = *(l_float32 *)(lh->array[ic - 1]); valp = *(l_float32 *)(lh->array[ip - 1]); if (valp <= valc) break; SWAP_ITEMS(ip - 1, ic - 1); ic = ip; } } else { /* lh->direction == L_SORT_DECREASING */ while (1) { if (ic == 1) /* root of heap */ break; ip = ic / 2; valc = *(l_float32 *)(lh->array[ic - 1]); valp = *(l_float32 *)(lh->array[ip - 1]); if (valp >= valc) break; SWAP_ITEMS(ip - 1, ic - 1); ic = ip; } } return 0; } /*! * lheapSwapDown() * * Input: lh (heap) * Return: 0 if OK, 1 on error * * Notes: * (1) This is called after an item has been popped off the * root of the heap, and the last item in the heap has * been placed at the root. * (2) To regain the heap order, we let it bubble down, * iteratively swapping with one of its children. For a * decreasing sort, it swaps with the largest child; for * an increasing sort, the smallest. This continues until * it either reaches the lowest level in the heap, or the * parent finds that neither child should swap with it * (e.g., for a decreasing heap, the parent is larger * than or equal to both children). */ l_int32 lheapSwapDown(L_HEAP *lh) { l_int32 ip; /* index to heap for parent; 1 larger than array index */ l_int32 icr, icl; /* index into heap for left/right children */ l_float32 valp, valcl, valcr; PROCNAME("lheapSwapDown"); if (!lh) return ERROR_INT("lh not defined", procName, 1); if (lheapGetCount(lh) < 1) return 0; ip = 1; /* index into top of heap: corresponds to array[0] */ if (lh->direction == L_SORT_INCREASING) { while (1) { icl = 2 * ip; if (icl > lh->n) break; valp = *(l_float32 *)(lh->array[ip - 1]); valcl = *(l_float32 *)(lh->array[icl - 1]); icr = icl + 1; if (icr > lh->n) { /* only a left child; no iters below */ if (valp > valcl) SWAP_ITEMS(ip - 1, icl - 1); break; } else { /* both children exist; swap with the smallest if bigger */ valcr = *(l_float32 *)(lh->array[icr - 1]); if (valp <= valcl && valp <= valcr) /* smaller than both */ break; if (valcl <= valcr) { /* left smaller; swap */ SWAP_ITEMS(ip - 1, icl - 1); ip = icl; } else { /* right smaller; swap */ SWAP_ITEMS(ip - 1, icr - 1); ip = icr; } } } } else { /* lh->direction == L_SORT_DECREASING */ while (1) { icl = 2 * ip; if (icl > lh->n) break; valp = *(l_float32 *)(lh->array[ip - 1]); valcl = *(l_float32 *)(lh->array[icl - 1]); icr = icl + 1; if (icr > lh->n) { /* only a left child; no iters below */ if (valp < valcl) SWAP_ITEMS(ip - 1, icl - 1); break; } else { /* both children exist; swap with the biggest if smaller */ valcr = *(l_float32 *)(lh->array[icr - 1]); if (valp >= valcl && valp >= valcr) /* bigger than both */ break; if (valcl >= valcr) { /* left bigger; swap */ SWAP_ITEMS(ip - 1, icl - 1); ip = icl; } else { /* right bigger; swap */ SWAP_ITEMS(ip - 1, icr - 1); ip = icr; } } } } return 0; } /*! * lheapSort() * * Input: lh (heap, with internal array) * Return: 0 if OK, 1 on error * * Notes: * (1) This sorts an array into heap order. If the heap is already * in heap order for the direction given, this has no effect. */ l_int32 lheapSort(L_HEAP *lh) { l_int32 i; PROCNAME("lheapSort"); if (!lh) return ERROR_INT("lh not defined", procName, 1); for (i = 0; i < lh->n; i++) lheapSwapUp(lh, i); return 0; } /*! * lheapSortStrictOrder() * * Input: lh (heap, with internal array) * Return: 0 if OK, 1 on error * * Notes: * (1) This sorts a heap into strict order. * (2) For each element, starting at the end of the array and * working forward, the element is swapped with the head * element and then allowed to swap down onto a heap of * size reduced by one. The result is that the heap is * reversed but in strict order. The array elements are * then reversed to put it in the original order. */ l_int32 lheapSortStrictOrder(L_HEAP *lh) { l_int32 i, index, size; PROCNAME("lheapSortStrictOrder"); if (!lh) return ERROR_INT("lh not defined", procName, 1); size = lh->n; /* save the actual size */ for (i = 0; i < size; i++) { index = size - i; SWAP_ITEMS(0, index - 1); lh->n--; /* reduce the apparent heap size by 1 */ lheapSwapDown(lh); } lh->n = size; /* restore the size */ for (i = 0; i < size / 2; i++) /* reverse */ SWAP_ITEMS(i, size - i - 1); return 0; } /*---------------------------------------------------------------------* * Debug output * *---------------------------------------------------------------------*/ /*! * lheapPrint() * * Input: stream * lheap * Return: 0 if OK; 1 on error */ l_int32 lheapPrint(FILE *fp, L_HEAP *lh) { l_int32 i; PROCNAME("lheapPrint"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!lh) return ERROR_INT("lh not defined", procName, 1); fprintf(fp, "\n L_Heap: nalloc = %d, n = %d, array = %p\n", lh->nalloc, lh->n, lh->array); for (i = 0; i < lh->n; i++) fprintf(fp, "keyval[%d] = %f\n", i, *(l_float32 *)lh->array[i]); return 0; } leptonica-1.70/src/rank.c0000644000175000017500000005160412244234345013404 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * rank.c * * Rank filter (gray and rgb) * PIX *pixRankFilter() * PIX *pixRankFilterRGB() * PIX *pixRankFilterGray() * * Median filter * PIX *pixMedianFilter() * * Rank filter (accelerated with downscaling) * PIX *pixRankFilterWithScaling() * * What is a brick rank filter? * * A brick rank order filter evaluates, for every pixel in the image, * a rectangular set of n = wf x hf pixels in its neighborhood (where the * pixel in question is at the "center" of the rectangle and is * included in the evaluation). It determines the value of the * neighboring pixel that is the r-th smallest in the set, * where r is some integer between 1 and n. The input rank parameter * is a fraction between 0.0 and 1.0, where 0.0 represents the * smallest value (r = 1) and 1.0 represents the largest value (r = n). * A median filter is a rank filter where rank = 0.5. * * It is important to note that grayscale erosion is equivalent * to rank = 0.0, and grayscale dilation is equivalent to rank = 1.0. * These are much easier to calculate than the general rank value, * thanks to the van Herk/Gil-Werman algorithm: * http://www.leptonica.com/grayscale-morphology.html * so you should use pixErodeGray() and pixDilateGray() for * rank 0.0 and 1.0, rsp. See notes below in the function header. * * How is a rank filter implemented efficiently on an image? * * Sorting will not work. * * * The best sort algorithms are O(n*logn), where n is the number * of values to be sorted (the area of the filter). For large * filters this is an impractically large number. * * * Selection of the rank value is O(n). (To understand why it's not * O(n*logn), see Numerical Recipes in C, 2nd edition, 1992, p. 355ff). * This also still far too much computation for large filters. * * * Suppose we get clever. We really only need to do an incremental * selection or sorting, because, for example, moving the filter * down by one pixel causes one filter width of pixels to be added * and another to be removed. Can we do this incrementally in * an efficient way? Unfortunately, no. The sorted values will be * in an array. Even if the filter width is 1, we can expect to * have to move O(n) pixels, because insertion and deletion can happen * anywhere in the array. By comparison, heapsort is excellent for * incremental sorting, where the cost for insertion or deletion * is O(logn), because the array itself doesn't need to * be sorted into strictly increasing order. However, heapsort * only gives the max (or min) value, not the general rank value. * * This leaves histograms. * * * Represented as an array. The problem with an array of 256 * bins is that, in general, a significant fraction of the * entire histogram must be summed to find the rank value bin. * Suppose the filter size is 5x5. You spend most of your time * adding zeroes. Ouch! * * * Represented as a linked list. This would overcome the * summing-over-empty-bin problem, but you lose random access * for insertions and deletions. No way. * * * Two histogram solution. Maintain two histograms with * bin sizes of 1 and 16. Proceed from coarse to fine. * First locate the coarse bin for the given rank, of which * there are only 16. Then, in the 256 entry (fine) histogram, * you need look at a maximum of 16 bins. For each output * pixel, the average number of bins summed over, both in the * coarse and fine histograms, is thus 16. * * If someone has a better method, please let me know! * * The rank filtering operation is relatively expensive, compared to most * of the other imaging operations. The speed is only weakly dependent * on the size of the rank filter. On standard hardware, it runs at * about 10 Mpix/sec for a 50 x 50 filter, and 25 Mpix/sec for * a 5 x 5 filter. For applications where the rank filter can be * performed on a downscaled image, significant speedup can be * achieved because the time goes as the square of the scaling factor. * We provide an interface that handles the details, and only * requires the amount of downscaling to be input. */ #include "allheaders.h" /*----------------------------------------------------------------------* * Rank order filter * *----------------------------------------------------------------------*/ /*! * pixRankFilter() * * Input: pixs (8 or 32 bpp; no colormap) * wf, hf (width and height of filter; each is >= 1) * rank (in [0.0 ... 1.0]) * Return: pixd (of rank values), or null on error * * Notes: * (1) This defines, for each pixel in pixs, a neighborhood of * pixels given by a rectangle "centered" on the pixel. * This set of wf*hf pixels has a distribution of values. * For each component, if the values are sorted in increasing * order, we choose the component such that rank*(wf*hf-1) * pixels have a lower or equal value and * (1-rank)*(wf*hf-1) pixels have an equal or greater value. * (2) See notes in pixRankFilterGray() for further details. */ PIX * pixRankFilter(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank) { l_int32 d; PROCNAME("pixRankFilter"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); if (d == 8) return pixRankFilterGray(pixs, wf, hf, rank); else /* d == 32 */ return pixRankFilterRGB(pixs, wf, hf, rank); } /*! * pixRankFilterRGB() * * Input: pixs (32 bpp) * wf, hf (width and height of filter; each is >= 1) * rank (in [0.0 ... 1.0]) * Return: pixd (of rank values), or null on error * * Notes: * (1) This defines, for each pixel in pixs, a neighborhood of * pixels given by a rectangle "centered" on the pixel. * This set of wf*hf pixels has a distribution of values. * For each component, if the values are sorted in increasing * order, we choose the component such that rank*(wf*hf-1) * pixels have a lower or equal value and * (1-rank)*(wf*hf-1) pixels have an equal or greater value. * (2) Apply gray rank filtering to each component independently. * (3) See notes in pixRankFilterGray() for further details. */ PIX * pixRankFilterRGB(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank) { PIX *pixr, *pixg, *pixb, *pixrf, *pixgf, *pixbf, *pixd; PROCNAME("pixRankFilterRGB"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs not 32 bpp", procName, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); pixr = pixGetRGBComponent(pixs, COLOR_RED); pixg = pixGetRGBComponent(pixs, COLOR_GREEN); pixb = pixGetRGBComponent(pixs, COLOR_BLUE); pixrf = pixRankFilterGray(pixr, wf, hf, rank); pixgf = pixRankFilterGray(pixg, wf, hf, rank); pixbf = pixRankFilterGray(pixb, wf, hf, rank); pixd = pixCreateRGBImage(pixrf, pixgf, pixbf); pixDestroy(&pixr); pixDestroy(&pixg); pixDestroy(&pixb); pixDestroy(&pixrf); pixDestroy(&pixgf); pixDestroy(&pixbf); return pixd; } /*! * pixRankFilterGray() * * Input: pixs (8 bpp; no colormap) * wf, hf (width and height of filter; each is >= 1) * rank (in [0.0 ... 1.0]) * Return: pixd (of rank values), or null on error * * Notes: * (1) This defines, for each pixel in pixs, a neighborhood of * pixels given by a rectangle "centered" on the pixel. * This set of wf*hf pixels has a distribution of values, * and if they are sorted in increasing order, we choose * the pixel such that rank*(wf*hf-1) pixels have a lower * or equal value and (1-rank)*(wf*hf-1) pixels have an equal * or greater value. * (2) By this definition, the rank = 0.0 pixel has the lowest * value, and the rank = 1.0 pixel has the highest value. * (3) We add mirrored boundary pixels to avoid boundary effects, * and put the filter center at (0, 0). * (4) This dispatches to grayscale erosion or dilation if the * filter dimensions are odd and the rank is 0.0 or 1.0, rsp. * (5) Returns a copy if both wf and hf are 1. * (6) Uses row-major or column-major incremental updates to the * histograms depending on whether hf > wf or hv <= wf, rsp. */ PIX * pixRankFilterGray(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank) { l_int32 w, h, d, i, j, k, m, n, rankloc, wplt, wpld, val, sum; l_int32 *histo, *histo16; l_uint32 *datat, *linet, *datad, *lined; PIX *pixt, *pixd; PROCNAME("pixRankFilterGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); /* For rank = 0.0, this is a grayscale erosion, and for rank = 1.0, * a dilation. Grayscale morphology operations are implemented * for filters of odd dimension, so we dispatch to grayscale * morphology if both wf and hf are odd. Otherwise, we * slightly adjust the rank (to get the correct behavior) and * use the slower rank filter here. */ if (wf % 2 && hf % 2) { if (rank == 0.0) return pixErodeGray(pixs, wf, hf); else if (rank == 1.0) return pixDilateGray(pixs, wf, hf); } if (rank == 0.0) rank = 0.0001; if (rank == 1.0) rank = 0.9999; /* Add wf/2 to each side, and hf/2 to top and bottom of the * image, mirroring for accuracy and to avoid special-casing * the boundary. */ if ((pixt = pixAddMirroredBorder(pixs, wf / 2, wf / 2, hf / 2, hf / 2)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, NULL); /* Set up the two histogram arrays. */ histo = (l_int32 *)CALLOC(256, sizeof(l_int32)); histo16 = (l_int32 *)CALLOC(16, sizeof(l_int32)); rankloc = (l_int32)(rank * wf * hf); /* Place the filter center at (0, 0). This is just a * convenient location, because it allows us to perform * the rank filter over x:(0 ... w - 1) and y:(0 ... h - 1). */ pixd = pixCreateTemplate(pixs); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* If hf > wf, it's more efficient to use row-major scanning. * Otherwise, traverse the image in use column-major order. */ if (hf > wf) { for (j = 0; j < w; j++) { /* row-major */ /* Start each column with clean histogram arrays. */ for (n = 0; n < 256; n++) histo[n] = 0; for (n = 0; n < 16; n++) histo16[n] = 0; for (i = 0; i < h; i++) { /* fast scan on columns */ /* Update the histos for the new location */ lined = datad + i * wpld; if (i == 0) { /* do full histo */ for (k = 0; k < hf; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < wf; m++) { val = GET_DATA_BYTE(linet, j + m); histo[val]++; histo16[val >> 4]++; } } } else { /* incremental update */ linet = datat + (i - 1) * wplt; for (m = 0; m < wf; m++) { /* remove top line */ val = GET_DATA_BYTE(linet, j + m); histo[val]--; histo16[val >> 4]--; } linet = datat + (i + hf - 1) * wplt; for (m = 0; m < wf; m++) { /* add bottom line */ val = GET_DATA_BYTE(linet, j + m); histo[val]++; histo16[val >> 4]++; } } /* Find the rank value */ sum = 0; for (n = 0; n < 16; n++) { /* search over coarse histo */ sum += histo16[n]; if (sum > rankloc) { sum -= histo16[n]; break; } } k = 16 * n; /* starting value in fine histo */ for (m = 0; m < 16; m++) { sum += histo[k]; if (sum > rankloc) { SET_DATA_BYTE(lined, j, k); break; } k++; } } } } else { /* wf >= hf */ for (i = 0; i < h; i++) { /* column-major */ /* Start each row with clean histogram arrays. */ for (n = 0; n < 256; n++) histo[n] = 0; for (n = 0; n < 16; n++) histo16[n] = 0; lined = datad + i * wpld; for (j = 0; j < w; j++) { /* fast scan on rows */ /* Update the histos for the new location */ if (j == 0) { /* do full histo */ for (k = 0; k < hf; k++) { linet = datat + (i + k) * wplt; for (m = 0; m < wf; m++) { val = GET_DATA_BYTE(linet, j + m); histo[val]++; histo16[val >> 4]++; } } } else { /* incremental update at left and right sides */ for (k = 0; k < hf; k++) { linet = datat + (i + k) * wplt; val = GET_DATA_BYTE(linet, j - 1); histo[val]--; histo16[val >> 4]--; val = GET_DATA_BYTE(linet, j + wf - 1); histo[val]++; histo16[val >> 4]++; } } /* Find the rank value */ sum = 0; for (n = 0; n < 16; n++) { /* search over coarse histo */ sum += histo16[n]; if (sum > rankloc) { sum -= histo16[n]; break; } } k = 16 * n; /* starting value in fine histo */ for (m = 0; m < 16; m++) { sum += histo[k]; if (sum > rankloc) { SET_DATA_BYTE(lined, j, k); break; } k++; } } } } pixDestroy(&pixt); FREE(histo); FREE(histo16); return pixd; } /*----------------------------------------------------------------------* * Median filter * *----------------------------------------------------------------------*/ /*! * pixMedianFilter() * * Input: pixs (8 or 32 bpp; no colormap) * wf, hf (width and height of filter; each is >= 1) * Return: pixd (of median values), or null on error */ PIX * pixMedianFilter(PIX *pixs, l_int32 wf, l_int32 hf) { PROCNAME("pixMedianFilter"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); return pixRankFilter(pixs, wf, hf, 0.5); } /*----------------------------------------------------------------------* * Rank filter (accelerated with downscaling) * *----------------------------------------------------------------------*/ /*! * pixRankFilterWithScaling() * * Input: pixs (8 or 32 bpp; no colormap) * wf, hf (width and height of filter; each is >= 1) * rank (in [0.0 ... 1.0]) * scalefactor (scale factor; must be >= 0.2 and <= 0.7) * Return: pixd (of rank values), or null on error * * Notes: * (1) This is a convenience function that downscales, does * the rank filtering, and upscales. Because the down- * and up-scaling functions are very fast compared to * rank filtering, the time it takes is reduced from that * for the simple rank filtering operation by approximately * the square of the scaling factor. */ PIX * pixRankFilterWithScaling(PIX *pixs, l_int32 wf, l_int32 hf, l_float32 rank, l_float32 scalefactor) { l_int32 w, h, d, wfs, hfs; PIX *pix1, *pix2, *pixd; PROCNAME("pixRankFilterWithScaling"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) != NULL) return (PIX *)ERROR_PTR("pixs has colormap", procName, NULL); d = pixGetDepth(pixs); if (d != 8 && d != 32) return (PIX *)ERROR_PTR("pixs not 8 or 32 bpp", procName, NULL); if (wf < 1 || hf < 1) return (PIX *)ERROR_PTR("wf < 1 || hf < 1", procName, NULL); if (rank < 0.0 || rank > 1.0) return (PIX *)ERROR_PTR("rank must be in [0.0, 1.0]", procName, NULL); if (wf == 1 && hf == 1) /* no-op */ return pixCopy(NULL, pixs); if (scalefactor < 0.2 || scalefactor > 0.7) { L_ERROR("invalid scale factor; no scaling used\n", procName); return pixRankFilter(pixs, wf, hf, rank); } pix1 = pixScaleAreaMap(pixs, scalefactor, scalefactor); wfs = L_MAX(1, (l_int32)(scalefactor * wf + 0.5)); hfs = L_MAX(1, (l_int32)(scalefactor * hf + 0.5)); pix2 = pixRankFilter(pix1, wfs, hfs, rank); pixGetDimensions(pixs, &w, &h, NULL); pixd = pixScaleToSize(pix2, w, h); pixDestroy(&pix1); pixDestroy(&pix2); return pixd; } leptonica-1.70/src/heap.h0000644000175000017500000001021211707052573013365 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_HEAP_H #define LEPTONICA_HEAP_H /* * heap.h * * Expandable priority queue configured as a heap for arbitrary void* data * * The L_Heap is used to implement a priority queue. The elements * in the heap are ordered in either increasing or decreasing key value. * The key is a float field 'keyval' that is required to be * contained in the elements of the queue. * * The heap is a simple binary tree with the following constraints: * - the key of each node is >= the keys of the two children * - the tree is complete, meaning that each level (1, 2, 4, ...) * is filled and the last level is filled from left to right * * The tree structure is implicit in the queue array, with the * array elements numbered as a breadth-first search of the tree * from left to right. It is thus guaranteed that the largest * (or smallest) key belongs to the first element in the array. * * Heap sort is used to sort the array. Once an array has been * sorted as a heap, it is convenient to use it as a priority queue, * because the min (or max) elements are always at the root of * the tree (element 0), and once removed, the heap can be * resorted in not more than log[n] steps, where n is the number * of elements on the heap. Likewise, if an arbitrary element is * added to the end of the array A, the sorted heap can be restored * in not more than log[n] steps. * * A L_Heap differs from a L_Queue in that the elements in the former * are sorted by a key. Internally, the array is maintained * as a queue, with a pointer to the end of the array. The * head of the array always remains at array[0]. The array is * maintained (sorted) as a heap. When an item is removed from * the head, the last item takes its place (thus reducing the * array length by 1), and this is followed by array element * swaps to restore the heap property. When an item is added, * it goes at the end of the array, and is swapped up to restore * the heap. If the ptr array is full, adding another item causes * the ptr array size to double. * * For further implementation details, see heap.c. */ struct L_Heap { l_int32 nalloc; /* size of allocated ptr array */ l_int32 n; /* number of elements stored in the heap */ void **array; /* ptr array */ l_int32 direction; /* L_SORT_INCREASING or L_SORT_DECREASING */ }; typedef struct L_Heap L_HEAP; #endif /* LEPTONICA_HEAP_H */ leptonica-1.70/src/makefile.static0000644000175000017500000003211312262333207015262 0ustar dandan#/*====================================================================* # - Copyright (C) 2001 Leptonica. All rights reserved. # - # - Redistribution and use in source and binary forms, with or without # - modification, are permitted provided that the following conditions # - are met: # - 1. Redistributions of source code must retain the above copyright # - notice, this list of conditions and the following disclaimer. # - 2. Redistributions in binary form must reproduce the above # - copyright notice, this list of conditions and the following # - disclaimer in the documentation and/or other materials # - provided with the distribution. # - # - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY # - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, # - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, # - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR # - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY # - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING # - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS # - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # *====================================================================*/ # makefile (for linux) # # Hand-built -- editable -- simple -- makefile # # For a nodebug version: make # For a debug version: make DEBUG=yes debug # For a shared library version: make SHARED=yes shared # For all versions: make all # With nonstandard header directories # make EXTRAINCLUDES="-I" # # To remove all writes to stderr: add -DNO_CONSOLE_IO to compiler line # # To remove object files in src: make clean # To remove object files and executables in prog: make clean # # Customization for endianness of machine hardware: # When using the gnu compiler, endianness is automatically # determined and set properly. Otherwise, set the $CPPFLAGS variable: # On little-endian machines (e.g., i386, x86-64): # CPPFLAGS = $(INCLUDES) -DL_LITTLE_ENDIAN # On big-endian machines (e.g., Mac Power PC, Sun Sparc): # CPPFLAGS = $(INCLUDES) -DL_BIG_ENDIAN # # Customization for I/O with external libraries (jpeg, png, tiff, webp, gif): # Set flags in environ.h. The default is to have libjpeg, libpng, # libtiff and libz, but not libgif. # # Customization for non-POSIX-compliant GNU functions # fmemopen() and open_memstream(). # The default is not to use, because they only work on linux. # To use these, #define HAVE_FMEMOPEN to 1 in environ.h. # # Customization for Cygwin: # (1) Use the appropriate $CC # # Compiling under Microsoft Visual Studio # (1) Download the vs2000 package. # (2) You can also substitute arrayaccess.h.vc for arrayaccess.h, to # use the inline macros rather than function calls which are slower. # # To generate function prototypes, you need a program called # xtractprotos. Build it with this command: # make xtractprotos # Then use it with 'make allheaders' # Tools used by the Makefile RM = rm -f TEST = test MKDIR = mkdir -p LIBRARIAN = ar cq RANLIB = ranlib # Libraries are built into a binary tree determined by the environmental # variable BINARY_BASE_DIR ifndef BINARY_BASE_DIR BINARY_BASE_DIR = .. endif BASE_OBJ = $(BINARY_BASE_DIR)/obj OBJ_NODEBUG = $(BINARY_BASE_DIR)/obj/nodebug OBJ_DEBUG = $(BINARY_BASE_DIR)/obj/debug OBJ_SHARED = $(BINARY_BASE_DIR)/obj/shared BASE_LIB = $(BINARY_BASE_DIR)/lib LIB_NODEBUG = $(BINARY_BASE_DIR)/lib/nodebug LIB_DEBUG = $(BINARY_BASE_DIR)/lib/debug LIB_SHARED = $(BINARY_BASE_DIR)/lib/shared # Include files INCLUDES = -I./ $(EXTRAINCLUDES) PROTOTYPE_DIR = . # Which flags to use? # - gcc 4.3.3 enforces checking return values of built-in C functions # such as fgets(). This should compile with the -Werror flag, # but it is turned off in the distribution (just in case...). # - use g++ to apply stricter rules. Libraries made with g++ may not # link to programs compiled with gcc (depends on the glibc version). # - use -Wunused to identify unused varables # - use -DNO_CONSOLE_IO to remove all L_INFO, L_WARNING, L_ERROR and # ERROR_* logging, and to remove all DEBUG information dependent # on whether or not NO_CONSOLE_IO has been defined. # - remove -fPIC for Cygwin CC = gcc -ansi -D_BSD_SOURCE -DANSI -fPIC #CC = gcc -ansi -D_BSD_SOURCE -DANSI -Werror -fPIC #CC = g++ -D_BSD_SOURCE -fPIC #CC = g++ -Werror -D_BSD_SOURCE -fPIC #CC = g++ -Wunused -D_BSD_SOURCE -fPIC #CC = gcc -ansi -DNO_CONSOLE_IO -D_BSD_SOURCE -DANSI -fPIC #CC = gcc -ansi -D_BSD_SOURCE -DANSI # Test for processor endianness (valid with gnu make only) ENDIANNESS := $(shell $(CC) -o endiantest endiantest.c; ./endiantest; rm -f endiantest) # Conditional compilation (depending on processor endianness) CPPFLAGS = $(INCLUDES) -D$(ENDIANNESS) #CPPFLAGS = $(INCLUDES) -DL_LITTLE_ENDIAN #CPPFLAGS = $(INCLUDES) -DL_BIG_ENDIAN # Shared library linker options SONAME_OPTION = -Wl,-h, ifdef SHARED OPTIMIZE = -O2 -fPIC else ifdef DEBUG OPTIMIZE = -g else OPTIMIZE = -O2 endif endif OPTIONS = CFLAGS = $(OPTIMIZE) $(OPTIONS) LIBRARIAN_SHARED = gcc -shared # Libraries differing only in their minor revision numbers # are required to have the same interface. By using # "-h" in the ld, the "soname" is .X, where X is # the major revision number. # Links are created among the files .X.Y, # .X, and , where Y is the minor revision number. MAJOR_REV = 1 MINOR_REV = 70 ######################################################### # Libraries LEPTLIB = liblept.a LEPTLIB_SHARED = liblept.so ######################################################### LEPTLIB_C = adaptmap.c affine.c \ affinecompose.c arrayaccess.c \ bardecode.c baseline.c bbuffer.c \ bilateral.c bilinear.c binarize.c \ binexpand.c binreduce.c \ blend.c bmf.c bmpio.c bmpiostub.c \ boxbasic.c boxfunc1.c boxfunc2.c \ boxfunc3.c boxfunc4.c \ bytearray.c ccbord.c ccthin.c classapp.c \ colorcontent.c coloring.c \ colormap.c colormorph.c \ colorquant1.c colorquant2.c \ colorseg.c colorspace.c \ compare.c conncomp.c convertfiles.c \ convolve.c convolvelow.c correlscore.c \ dewarp1.c dewarp2.c dewarp3.c dewarp4.c dnabasic.c \ dwacomb.2.c dwacomblow.2.c \ edge.c enhance.c \ fhmtauto.c fhmtgen.1.c fhmtgenlow.1.c \ finditalic.c flipdetect.c fliphmtgen.c \ fmorphauto.c fmorphgen.1.c fmorphgenlow.1.c \ fpix1.c fpix2.c \ gifio.c gifiostub.c gplot.c graphics.c \ graymorph.c graymorphlow.c \ grayquant.c grayquantlow.c \ heap.c jbclass.c jp2kio.c jp2kiostub.c \ jpegio.c jpegiostub.c kernel.c \ libversions.c list.c maze.c \ morph.c morphapp.c morphdwa.c morphseq.c \ numabasic.c numafunc1.c numafunc2.c \ pageseg.c paintcmap.c \ parseprotos.c partition.c \ pdfio.c pdfiostub.c \ pix1.c pix2.c pix3.c pix4.c pix5.c \ pixabasic.c pixacc.c \ pixafunc1.c pixafunc2.c \ pixalloc.c pixarith.c \ pixcomp.c pixconv.c pixlabel.c pixtiling.c \ pngio.c pngiostub.c \ pnmio.c pnmiostub.c \ projective.c \ psio1.c psio1stub.c psio2.c psio2stub.c \ ptabasic.c ptafunc1.c \ ptra.c quadtree.c queue.c rank.c \ readbarcode.c readfile.c \ recogbasic.c recogdid.c recogident.c recogtrain.c \ regutils.c \ rop.c ropiplow.c roplow.c \ rotate.c rotateam.c rotateamlow.c \ rotateorth.c rotateorthlow.c rotateshear.c \ runlength.c sarray.c \ scale.c scalelow.c \ seedfill.c seedfilllow.c \ sel1.c sel2.c selgen.c \ shear.c skew.c spixio.c \ stack.c sudoku.c \ textops.c tiffio.c tiffiostub.c \ utils.c viewfiles.c \ warper.c watershed.c \ webpio.c webpiostub.c writefile.c \ zlibmem.c zlibmemstub.c LEPTLIB_H = allheaders.h alltypes.h \ array.h arrayaccess.h bbuffer.h \ bmf.h bmp.h ccbord.h \ dewarp.h environ.h gplot.h \ heap.h imageio.h \ jbclass.h list.h morph.h \ pix.h ptra.h queue.h \ readbarcode.h recog.h regutils.h \ stack.h sudoku.h watershed.h ################################################################## # Main targets nodebug: dirs $(LEPTLIB:%=$(LIB_NODEBUG)/%) all: make -f makefile TARGET=$(TARGET) nodebug make -f makefile TARGET=$(TARGET) DEBUG=true debug make -f makefile TARGET=$(TARGET) SHARED=true shared DEBUG_LIBS = $(LEPTLIB:%=$(LIB_DEBUG)/%) SHARED_LIBS = $(LEPTLIB_SHARED:%=$(LIB_SHARED)/%) debug: dirs $(DEBUG_LIBS) shared: dirs $(SHARED_LIBS) ################################################################## # Proto targets # Note that both of the targets below can be generated by xtractprotos # (a) without requiring the existence of leptprotos.h and (b) with # an empty allheaders.h. Both generate a new allheaders.h, and # 'make allprotos' additionally generates leptprotos.h # # In the past we generated leptprotos.h that held the function prototypes, # and included it in allheaders.h. We now insert the function prototypes # directly in allheaders.h, and do not generate a separate prototype # file leptprotos.h. allheaders: $(LEPTLIB_C) @$(TEST) -f xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -protos=inline -prestring=LEPT_DLL $(LEPTLIB_C) # You can still generate the file leptprotos.h and have it #included # in allheaders.h. If you do this, be sure to add leptprotos.h to LEPTLIB_H. allprotos: leptprotos leptprotos: $(LEPTLIB_C) @$(TEST) -f xtractprotos || echo "First run 'make xtractprotos'" ./xtractprotos -protos=leptprotos.h -prestring=LEPT_DLL $(LEPTLIB_C) ################################################################## # xtractprotos xtractprotos: dirs leptlib cd ../prog; make xtractprotos; cp xtractprotos ../src xtractprotos.o: xtractprotos.c ################################################################## # Rule to make optimized library $(LIB_NODEBUG)/%.a: $(RM) $@ $(LIBRARIAN) $@ $< $(RANLIB) $@ # Rule to make debuggable library $(LIB_DEBUG)/%.a: $(RM) $@ $(LIBRARIAN) $@ $< $(RANLIB) $@ # Rule to make shared library $(LIB_SHARED)/%.so: $(RM) $@ $(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $< mv $@ $@.$(MAJOR_REV).$(MINOR_REV) cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \ ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV) $(notdir $@).$(MAJOR_REV) cd $(LIB_SHARED); rm $(notdir $@); \ ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@) ################################################################## # No-debug library dependencies and rules leptlib: $(LIB_NODEBUG)/$(LEPTLIB) $(LIB_NODEBUG)/$(LEPTLIB): $(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o) $(RM) $@ $(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_NODEBUG)/%.o) $(RANLIB) $@ # Debug library dependencies and rules leptlibd: $(LIB_DEBUG)/$(LEPTLIB) $(LIB_DEBUG)/$(LEPTLIB): $(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o) $(RM) $@ $(LIBRARIAN) $@ $(LEPTLIB_C:%.c=$(OBJ_DEBUG)/%.o) $(RANLIB) $@ # Shared library dependencies, rules and links leptlibs: $(LIB_SHARED)/$(LEPTLIB_SHARED) $(LIB_SHARED)/$(LEPTLIB_SHARED): $(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o) $(RM) $@ $(LIBRARIAN_SHARED) $(SONAME_OPTION)$(notdir $@).$(MAJOR_REV) -o $@ $(LEPTLIB_C:%.c=$(OBJ_SHARED)/%.o) mv $@ $@.$(MAJOR_REV).$(MINOR_REV) cd $(LIB_SHARED); rm $(notdir $@).$(MAJOR_REV); \ ln -s $(notdir $@).$(MAJOR_REV).$(MINOR_REV) $(notdir $@).$(MAJOR_REV) cd $(LIB_SHARED); rm $(notdir $@); \ ln -s $(notdir $@).$(MAJOR_REV) $(notdir $@) ######################################################### # Rules for compiling source $(OBJ_NODEBUG)/%.o: %.c $(LEPTLIB_H) @$(TEST) -d $(OBJ_NODEBUG) || $(MKDIR) $(OBJ_NODEBUG) $(COMPILE.c) -o $@ $< $(OBJ_DEBUG)/%.o: %.c $(LEPTLIB_H) @$(TEST) -d $(OBJ_DEBUG) || $(MKDIR) $(OBJ_DEBUG) $(COMPILE.c) -o $@ $< $(OBJ_SHARED)/%.o: %.c $(LEPTLIB_H) @$(TEST) -d $(OBJ_SHARED) || $(MKDIR) $(OBJ_SHARED) $(COMPILE.c) -o $@ $< ########################################################### # Prepare a local environment dirs: @$(TEST) -d $(BASE_OBJ) || $(MKDIR) $(BASE_OBJ) @$(TEST) -d $(OBJ_NODEBUG) || $(MKDIR) $(OBJ_NODEBUG) @$(TEST) -d $(OBJ_DEBUG) || $(MKDIR) $(OBJ_DEBUG) @$(TEST) -d $(OBJ_SHARED) || $(MKDIR) $(OBJ_SHARED) @$(TEST) -d $(BASE_LIB) || $(MKDIR) $(BASE_LIB) @$(TEST) -d $(LIB_NODEBUG) || $(MKDIR) $(LIB_NODEBUG) @$(TEST) -d $(LIB_DEBUG) || $(MKDIR) $(LIB_DEBUG) @$(TEST) -d $(LIB_SHARED) || $(MKDIR) $(LIB_SHARED) ########################################################### clean: $(RM) $(OBJ_NODEBUG)/*.o $(OBJ_DEBUG)/*.o \ $(OBJ_SHARED)/*.o \ $(LIB_NODEBUG)/*.a $(LIB_DEBUG)/*.a \ $(LIB_SHARED)/*.so $(LIB_SHARED)/*.so.? \ $(LIB_SHARED)/*.so.?.* \ xtractprotos.o xtractprotos ########################################################### depend: /usr/bin/makedepend -DNO_PROTOS $(CPPFLAGS) $(LEPTLIB_C) ########################################################### # DO NOT DELETE THIS LINE -- make depend depends on it. leptonica-1.70/src/bmf.c0000644000175000017500000005573312256616210013222 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bmf.c * * Acquisition and generation of bitmap fonts. * * L_BMF *bmfCreate() * L_BMF *bmfDestroy() * * PIX *bmfGetPix() * l_int32 bmfGetWidth() * l_int32 bmfGetBaseline() * * PIXA *pixaGetFont() * l_int32 pixaSaveFont() * PIXA *pixaGenerateFont() * static l_int32 pixGetTextBaseline() * static l_int32 bmfMakeAsciiTables() * * This is not a very general utility, because it only uses bitmap * representations of a single font, Palatino-Roman, with the * normal style. It uses bitmaps generated for nine sizes, from * 4 to 20 pts, rendered at 300 ppi. Generalization to different * fonts, styles and sizes is straightforward. * * I chose Palatino-Roman is because I like it. * The input font images were generated from a set of small * PostScript files, such as chars-12.ps, which were rendered * into the inputfont[] bitmap files using GhostScript. See, for * example, the bash script prog/ps2tiff, which will "rip" a * PostScript file into a set of ccitt-g4 compressed tiff files. * * The set of ascii characters from 32 through 126 are the 95 * printable ascii chars. Palatino-Roman is missing char 92, '\'. * I have substituted '/', char 47, for 92, so that there will be * no missing printable chars in this set. The space is char 32, * and I have given it a width equal to twice the width of '!'. */ #include "allheaders.h" #define NFONTS 9 static const char *inputfonts[] = {"chars-4.tif", "chars-6.tif", "chars-8.tif", "chars-10.tif", "chars-12.tif", "chars-14.tif", "chars-16.tif", "chars-18.tif", "chars-20.tif"}; static const char *outputfonts[] = {"chars-4.pa", "chars-6.pa", "chars-8.pa", "chars-10.pa", "chars-12.pa", "chars-14.pa", "chars-16.pa", "chars-18.pa", "chars-20.pa"}; static const l_int32 baselines[NFONTS][3] = {{11, 12, 12}, {18, 18, 18}, {24, 24, 24}, {30, 30, 30}, {36, 36, 36}, {42, 42, 42}, {48, 48, 48}, {54, 54, 54}, {60, 60, 60}}; static const l_float32 VERT_FRACT_SEP = 0.3; #ifndef NO_CONSOLE_IO #define DEBUG_BASELINE 0 #define DEBUG_CHARS 0 #define DEBUG_FONT_GEN 0 #endif /* ~NO_CONSOLE_IO */ static l_int32 pixGetTextBaseline(PIX *pixs, l_int32 *tab8, l_int32 *py); static l_int32 bmfMakeAsciiTables(L_BMF *bmf); /*---------------------------------------------------------------------*/ /* Bmf create/destroy */ /*---------------------------------------------------------------------*/ /*! * bmfCreate() * * Input: dir (directory holding pixa of character set) * size (4, 6, 8, ... , 20) * Return: bmf (holding the bitmap font and associated information) * * Notes: * (1) This first tries to read a pre-computed pixa file with the * 95 ascii chars in it. If the file is not found, it * creates the pixa from the raw image. It then generates all * associated data required to use the bmf. */ L_BMF * bmfCreate(const char *dir, l_int32 size) { L_BMF *bmf; PIXA *pixa; PROCNAME("bmfCreate"); if ((bmf = (L_BMF *)CALLOC(1, sizeof(L_BMF))) == NULL) return (L_BMF *)ERROR_PTR("bmf not made", procName, NULL); /* Look for the pixa */ pixa = pixaGetFont(dir, size, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); /* If not found, make it */ if (!pixa) { L_INFO("Generating pixa of bitmap fonts\n", procName); pixa = pixaGenerateFont(dir, size, &bmf->baseline1, &bmf->baseline2, &bmf->baseline3); if (!pixa) { bmfDestroy(&bmf); return (L_BMF *)ERROR_PTR("font pixa not made", procName, NULL); } } bmf->pixa = pixa; bmf->size = size; bmf->directory = stringNew(dir); bmfMakeAsciiTables(bmf); return bmf; } /*! * bmfDestroy() * * Input: &bmf () * Return: void */ void bmfDestroy(L_BMF **pbmf) { L_BMF *bmf; PROCNAME("bmfDestroy"); if (pbmf == NULL) { L_WARNING("ptr address is null!\n", procName); return; } if ((bmf = *pbmf) == NULL) return; pixaDestroy(&bmf->pixa); FREE(bmf->directory); FREE(bmf->fonttab); FREE(bmf->baselinetab); FREE(bmf->widthtab); FREE(bmf); *pbmf = NULL; return; } /*---------------------------------------------------------------------*/ /* Bmf accessors */ /*---------------------------------------------------------------------*/ /*! * bmfGetPix() * * Input: bmf * chr (should be one of the 95 supported printable bitmaps) * Return: pix (clone of pix in bmf), or null on error */ PIX * bmfGetPix(L_BMF *bmf, char chr) { l_int32 i, index; PIXA *pixa; PROCNAME("bmfGetPix"); if ((index = (l_int32)chr) == 10) /* NL */ return NULL; if (!bmf) return (PIX *)ERROR_PTR("bmf not defined", procName, NULL); i = bmf->fonttab[index]; if (i == UNDEF) { L_ERROR("no bitmap representation for %d\n", procName, index); return NULL; } if ((pixa = bmf->pixa) == NULL) return (PIX *)ERROR_PTR("pixa not found", procName, NULL); return pixaGetPix(pixa, i, L_CLONE); } /*! * bmfGetWidth() * * Input: bmf * chr (should be one of the 95 supported bitmaps) * &w ( character width; -1 if not printable) * Return: 0 if OK, 1 on error */ l_int32 bmfGetWidth(L_BMF *bmf, char chr, l_int32 *pw) { l_int32 i, index; PIX *pix; PIXA *pixa; PROCNAME("bmfGetWidth"); if (!pw) return ERROR_INT("&w not defined", procName, 1); *pw = -1; if (!bmf) return ERROR_INT("bmf not defined", procName, 1); if ((index = (l_int32)chr) == 10) /* NL */ return 0; i = bmf->fonttab[index]; if (i == UNDEF) { L_ERROR("no bitmap representation for %d\n", procName, index); return 1; } if ((pixa = bmf->pixa) == NULL) return ERROR_INT("pixa not found", procName, 1); if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) return ERROR_INT("pix not found", procName, 1); *pw = pixGetWidth(pix); pixDestroy(&pix); return 0; } /*! * bmfGetBaseline() * * Input: bmf * chr (should be one of the 95 supported bitmaps) * &baseline (; distance below UL corner of bitmap char) * Return: 0 if OK, 1 on error */ l_int32 bmfGetBaseline(L_BMF *bmf, char chr, l_int32 *pbaseline) { l_int32 bl, index; PROCNAME("bmfGetBaseline"); if (!pbaseline) return ERROR_INT("&baseline not defined", procName, 1); *pbaseline = 0; if (!bmf) return ERROR_INT("bmf not defined", procName, 1); if ((index = (l_int32)chr) == 10) /* NL */ return 0; bl = bmf->baselinetab[index]; if (bl == UNDEF) { L_ERROR("no bitmap representation for %d\n", procName, index); return 1; } *pbaseline = bl; return 0; } /*---------------------------------------------------------------------*/ /* Font bitmap acquisition and generation */ /*---------------------------------------------------------------------*/ /*! * pixaGetFont() * * Input: dir (directory holding pixa of character set) * size (4, 6, 8, ... , 20) * &bl1 ( baseline of row 1) * &bl2 ( baseline of row 2) * &bl3 ( baseline of row 3) * Return: pixa of font bitmaps for 95 characters, or null on error * * Notes: * (1) This reads a pre-computed pixa file with the 95 ascii chars. */ PIXA * pixaGetFont(const char *dir, l_int32 size, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2) { char *pathname; l_int32 fileno; PIXA *pixa; PROCNAME("pixaGetFont"); fileno = (size / 2) - 2; if (fileno < 0 || fileno > NFONTS) return (PIXA *)ERROR_PTR("font size invalid", procName, NULL); if (!pbl0 || !pbl1 || !pbl2) return (PIXA *)ERROR_PTR("&bl not all defined", procName, NULL); *pbl0 = baselines[fileno][0]; *pbl1 = baselines[fileno][1]; *pbl2 = baselines[fileno][2]; pathname = genPathname(dir, outputfonts[fileno]); pixa = pixaRead(pathname); FREE(pathname); if (!pixa) L_WARNING("pixa of char bitmaps not found\n", procName); return pixa; } /*! * pixaSaveFont() * * Input: indir (directory holding image of character set) * outdir (directory into which the output pixa file * will be written) * size (in pts, at 300 ppi) * Return: 0 if OK, 1 on error * * Notes: * (1) This saves a font of a particular size. * (2) prog/genfonts calls this function for each of the * nine font sizes, to generate all the font pixa files. */ l_int32 pixaSaveFont(const char *indir, const char *outdir, l_int32 size) { char *pathname; l_int32 bl1, bl2, bl3; PIXA *pixa; PROCNAME("pixaSaveFont"); if (size < 4 || size > 20 || (size % 2)) return ERROR_INT("size must be in {4, 6, ..., 20}", procName, 1); if ((pixa = pixaGenerateFont(indir, size, &bl1, &bl2, &bl3)) == NULL) return ERROR_INT("pixa not made", procName, 1); pathname = genPathname(outdir, outputfonts[(size - 4) / 2]); pixaWrite(pathname, pixa); #if DEBUG_FONT_GEN fprintf(stderr, "Found %d chars in font size %d\n", pixaGetCount(pixa), size); fprintf(stderr, "Baselines are at: %d, %d, %d\n", bl1, bl2, bl3); #endif /* DEBUG_FONT_GEN */ FREE(pathname); pixaDestroy(&pixa); return 0; } /*! * pixaGenerateFont() * * Input: dir (directory holding image of character set) * size (4, 6, 8, ... , 20, in pts at 300 ppi) * &bl1 ( baseline of row 1) * &bl2 ( baseline of row 2) * &bl3 ( baseline of row 3) * Return: pixa of font bitmaps for 95 characters, or null on error * * These font generation functions use 9 sets, each with bitmaps * of 94 ascii characters, all in Palatino-Roman font. * Each input bitmap has 3 rows of characters. The range of * ascii values in each row is as follows: * row 0: 32-57 (32 is a space) * row 1: 58-91 (92, '\', is not represented in this font) * row 2: 93-126 * We LR flip the '/' char to generate a bitmap for the missing * '\' character, so that we have representations of all 95 * printable chars. * * Computation of the bitmaps and baselines for a single * font takes from 40 to 200 msec on a 2 GHz processor, * depending on the size. Use pixaGetFont() to read the * generated character set directly from files that were * produced in prog/genfonts.c using this function. */ PIXA * pixaGenerateFont(const char *dir, l_int32 size, l_int32 *pbl0, l_int32 *pbl1, l_int32 *pbl2) { char *pathname; l_int32 fileno; l_int32 i, j, nrows, nrowchars, nchars, h, yval; l_int32 width, height; l_int32 baseline[3]; l_int32 *tab; BOX *box, *box1, *box2; BOXA *boxar, *boxac, *boxacs; PIX *pixs, *pixt1, *pixt2, *pixt3; PIX *pixr, *pixrc, *pixc; PIXA *pixa; PROCNAME("pixaGenerateFont"); if (!pbl0 || !pbl1 || !pbl2) return (PIXA *)ERROR_PTR("&bl not all defined", procName, NULL); *pbl0 = *pbl1 = *pbl2 = 0; fileno = (size / 2) - 2; if (fileno < 0 || fileno > NFONTS) return (PIXA *)ERROR_PTR("font size invalid", procName, NULL); tab = makePixelSumTab8(); pathname = genPathname(dir, inputfonts[fileno]); if ((pixs = pixRead(pathname)) == NULL) return (PIXA *)ERROR_PTR("pixs not all defined", procName, NULL); FREE(pathname); pixa = pixaCreate(95); pixt1 = pixMorphSequence(pixs, "c1.35 + c101.1", 0); boxar = pixConnComp(pixt1, NULL, 8); /* one box for each row */ pixDestroy(&pixt1); nrows = boxaGetCount(boxar); #if DEBUG_FONT_GEN fprintf(stderr, "For font %s, number of rows is %d\n", inputfonts[fileno], nrows); #endif /* DEBUG_FONT_GEN */ if (nrows != 3) { L_INFO("nrows = %d; skipping font %d\n", procName, nrows, fileno); return (PIXA *)ERROR_PTR("3 rows not generated", procName, NULL); } for (i = 0; i < nrows; i++) { box = boxaGetBox(boxar, i, L_CLONE); pixr = pixClipRectangle(pixs, box, NULL); /* row of chars */ pixGetTextBaseline(pixr, tab, &yval); baseline[i] = yval; #if DEBUG_BASELINE { PIX *pixbl; fprintf(stderr, "row %d, yval = %d, h = %d\n", i, yval, pixGetHeight(pixr)); pixbl = pixCopy(NULL, pixr); pixRenderLine(pixbl, 0, yval, pixGetWidth(pixbl), yval, 1, L_FLIP_PIXELS); if (i == 0 ) pixWrite("junktl0", pixbl, IFF_PNG); else if (i == 1) pixWrite("junktl1", pixbl, IFF_PNG); else pixWrite("junktl2", pixbl, IFF_PNG); pixDestroy(&pixbl); } #endif /* DEBUG_BASELINE */ boxDestroy(&box); pixrc = pixCloseSafeBrick(NULL, pixr, 1, 35); boxac = pixConnComp(pixrc, NULL, 8); boxacs = boxaSort(boxac, L_SORT_BY_X, L_SORT_INCREASING, NULL); if (i == 0) { /* consolidate the two components of '"' */ box1 = boxaGetBox(boxacs, 1, L_CLONE); box2 = boxaGetBox(boxacs, 2, L_CLONE); box1->w = box2->x + box2->w - box1->x; /* increase width */ boxDestroy(&box1); boxDestroy(&box2); boxaRemoveBox(boxacs, 2); } h = pixGetHeight(pixr); nrowchars = boxaGetCount(boxacs); for (j = 0; j < nrowchars; j++) { box = boxaGetBox(boxacs, j, L_COPY); if (box->w <= 2 && box->h == 1) { /* skip 1x1, 2x1 components */ boxDestroy(&box); continue; } box->y = 0; box->h = h - 1; pixc = pixClipRectangle(pixr, box, NULL); boxDestroy(&box); if (i == 0 && j == 0) /* add a pix for the space; change later */ pixaAddPix(pixa, pixc, L_COPY); if (i == 2 && j == 0) /* add a pix for the '\'; change later */ pixaAddPix(pixa, pixc, L_COPY); pixaAddPix(pixa, pixc, L_INSERT); } pixDestroy(&pixr); pixDestroy(&pixrc); boxaDestroy(&boxac); boxaDestroy(&boxacs); } nchars = pixaGetCount(pixa); if (nchars != 95) return (PIXA *)ERROR_PTR("95 chars not generated", procName, NULL); *pbl0 = baseline[0]; *pbl1 = baseline[1]; *pbl2 = baseline[2]; /* Fix the space character up; it should have no ON pixels, * and be about twice as wide as the '!' character. */ pixt2 = pixaGetPix(pixa, 0, L_CLONE); width = 2 * pixGetWidth(pixt2); height = pixGetHeight(pixt2); pixDestroy(&pixt2); pixt2 = pixCreate(width, height, 1); pixaReplacePix(pixa, 0, pixt2, NULL); /* Fix up the '\' character; use a LR flip of the '/' char */ pixt2 = pixaGetPix(pixa, 15, L_CLONE); pixt3 = pixFlipLR(NULL, pixt2); pixDestroy(&pixt2); pixaReplacePix(pixa, 60, pixt3, NULL); #if DEBUG_CHARS { PIX *pixd; pixd = pixaDisplayTiled(pixa, 1500, 0, 10); pixDisplay(pixd, 100 * i, 200); pixDestroy(&pixd); } #endif /* DEBUG_CHARS */ pixDestroy(&pixs); boxaDestroy(&boxar); FREE(tab); return pixa; } /*! * pixGetTextBaseline() * * Input: pixs (1 bpp, one textline character set) * tab8 ( pixel sum table) * &y ( baseline value) * Return: 0 if OK, 1 on error * * Notes: * (1) Method: find the largest difference in pixel sums from one * raster line to the next one below it. The baseline is the * upper raster line for the pair of raster lines that * maximizes this function. */ static l_int32 pixGetTextBaseline(PIX *pixs, l_int32 *tab8, l_int32 *py) { l_int32 i, h, val1, val2, diff, diffmax, ymax; l_int32 *tab; NUMA *na; PROCNAME("pixGetTextBaseline"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!py) return ERROR_INT("&y not defined", procName, 1); *py = 0; if (!tab8) tab = makePixelSumTab8(); else tab = tab8; na = pixCountPixelsByRow(pixs, tab); h = numaGetCount(na); diffmax = 0; ymax = 0; for (i = 1; i < h; i++) { numaGetIValue(na, i - 1, &val1); numaGetIValue(na, i, &val2); diff = L_MAX(0, val1 - val2); if (diff > diffmax) { diffmax = diff; ymax = i - 1; /* upper raster line */ } } *py = ymax; if (!tab8) FREE(tab); numaDestroy(&na); return 0; } /*! * bmfMakeAsciiTables * * Input: bmf * Return: 0 if OK, 1 on error * * Notes: * (1) This makes three tables, each of size 128, as follows: * - fonttab is a table containing the index of the Pix * that corresponds to each input ascii character; * it maps (ascii-index) --> Pixa index * - baselinetab is a table containing the baseline offset * for the Pix that corresponds to each input ascii character; * it maps (ascii-index) --> baseline offset * - widthtab is a table containing the character width in * pixels for the Pix that corresponds to that character; * it maps (ascii-index) --> bitmap width * (2) This also computes * - lineheight (sum of maximum character extensions above and * below the baseline) * - kernwidth (spacing between characters within a word) * - spacewidth (space between words) * - vertlinesep (extra vertical spacing between textlines) * (3) The baselines apply as follows: * baseline1 (ascii 32 - 57), ascii 92 * baseline2 (ascii 58 - 91) * baseline3 (ascii 93 - 126) * (4) The only array in bmf that is not ascii-based is the * array of bitmaps in the pixa, which starts at ascii 32. */ static l_int32 bmfMakeAsciiTables(L_BMF *bmf) { l_int32 i, maxh, height, charwidth, xwidth, kernwidth; l_int32 *fonttab, *baselinetab, *widthtab; PIX *pix; PROCNAME("bmfMakeAsciiTables"); if (!bmf) return ERROR_INT("bmf not defined", procName, 1); /* First get the fonttab; we use this later for the char widths */ if ((fonttab = (l_int32 *)CALLOC(128, sizeof(l_int32))) == NULL) return ERROR_INT("fonttab not made", procName, 1); bmf->fonttab = fonttab; for (i = 0; i < 128; i++) fonttab[i] = UNDEF; for (i = 32; i < 127; i++) fonttab[i] = i - 32; if ((baselinetab = (l_int32 *)CALLOC(128, sizeof(l_int32))) == NULL) return ERROR_INT("baselinetab not made", procName, 1); bmf->baselinetab = baselinetab; for (i = 0; i < 128; i++) baselinetab[i] = UNDEF; for (i = 32; i <= 57; i++) baselinetab[i] = bmf->baseline1; for (i = 58; i <= 91; i++) baselinetab[i] = bmf->baseline2; baselinetab[92] = bmf->baseline1; /* the '\' char */ for (i = 93; i < 127; i++) baselinetab[i] = bmf->baseline3; /* Generate array of character widths; req's fonttab to exist */ if ((widthtab = (l_int32 *)CALLOC(128, sizeof(l_int32))) == NULL) return ERROR_INT("widthtab not made", procName, 1); bmf->widthtab = widthtab; for (i = 0; i < 128; i++) widthtab[i] = UNDEF; for (i = 32; i < 127; i++) { bmfGetWidth(bmf, i, &charwidth); widthtab[i] = charwidth; } /* Get the line height of text characters, from the highest * ascender to the lowest descender; req's fonttab to exist. */ pix = bmfGetPix(bmf, 32); maxh = pixGetHeight(pix); pixDestroy(&pix); pix = bmfGetPix(bmf, 58); height = pixGetHeight(pix); pixDestroy(&pix); maxh = L_MAX(maxh, height); pix = bmfGetPix(bmf, 93); height = pixGetHeight(pix); pixDestroy(&pix); maxh = L_MAX(maxh, height); bmf->lineheight = maxh; /* Get the kern width (distance between characters). * We let it be the same for all characters in a given * font size, and scale it linearly with the size; * req's fonttab to be built first. */ bmfGetWidth(bmf, 120, &xwidth); kernwidth = (l_int32)(0.08 * (l_float32)xwidth + 0.5); bmf->kernwidth = L_MAX(1, kernwidth); /* Save the space width (between words) */ bmfGetWidth(bmf, 32, &charwidth); bmf->spacewidth = charwidth; /* Save the extra vertical space between lines */ bmf->vertlinesep = (l_int32)(VERT_FRACT_SEP * bmf->lineheight + 0.5); return 0; } leptonica-1.70/src/dewarp2.c0000644000175000017500000014654612244174333014027 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * dewarp2.c * * Build the page disparity model * * Build page disparity model * l_int32 dewarpBuildPageModel() * l_int32 dewarpFindVertDisparity() * l_int32 dewarpFindHorizDisparity() * PTAA *dewarpGetTextlineCenters() * static PTA *dewarpGetMeanVerticals() * PTAA *dewarpRemoveShortLines() * static l_int32 dewarpGetLineEndpoints() * static l_int32 dewarpQuadraticLSF() * * Build the line disparity model * l_int32 dewarpBuildLineModel() * * Query model status * l_int32 dewarpaModelStatus() * * Rendering helpers * static l_int32 pixRenderFlats() * static l_int32 pixRenderHorizEndPoints */ #include #include "allheaders.h" static PTA *dewarpGetMeanVerticals(PIX *pixs, l_int32 x, l_int32 y); static l_int32 dewarpGetLineEndpoints(l_int32 h, PTAA *ptaa, PTA **pptal, PTA **pptar); static l_int32 dewarpFindLongLines(PTA *ptal, PTA *ptar, l_float32 minfract, PTA **pptald, PTA **pptard); static l_int32 dewarpQuadraticLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr); static l_int32 pixRenderMidYs(PIX *pixs, NUMA *namidys, l_int32 linew); static l_int32 pixRenderHorizEndPoints(PIX *pixs, PTA *ptal, PTA *ptar, l_uint32 color); #ifndef NO_CONSOLE_IO #define DEBUG_TEXTLINE_CENTERS 0 /* set this to 1 for debuging */ #define DEBUG_SHORT_LINES 0 /* ditto */ #else #define DEBUG_TEXTLINE_CENTERS 0 /* always must be 0 */ #define DEBUG_SHORT_LINES 0 /* ditto */ #endif /* !NO_CONSOLE_IO */ /* Special parameter values */ static const l_float32 MIN_RATIO_LINES_TO_HEIGHT = 0.45; /*----------------------------------------------------------------------* * Build page disparity model * *----------------------------------------------------------------------*/ /*! * dewarpBuildPageModel() * * Input: dew * debugfile (use null to skip writing this) * Return: 0 if OK, 1 if unable to build the model or on error * * Notes: * (1) This is the basic function that builds the horizontal and * vertical disparity arrays, which allow determination of the * src pixel in the input image corresponding to each * dest pixel in the dewarped image. * (2) Sets vsuccess = 1 if the vertical disparity array builds. * Always attempts to build the horizontal disparity array, * even if it will not be requested (useboth == 0). * Sets hsuccess = 1 if horizontal disparity builds. * (3) The method is as follows: * (a) Estimate the points along the centers of all the * long textlines. If there are too few lines, no * disparity models are built. * (b) From the vertical deviation of the lines, estimate * the vertical disparity. * (c) From the ends of the lines, estimate the horizontal * disparity, assuming that the text is made of lines * that are left and right justified. * (d) One can also compute an additional contribution to the * horizontal disparity, inferred from slopes of the top * and bottom lines. We do not do this. * (4) In more detail for the vertical disparity: * (a) Fit a LS quadratic to center locations along each line. * This smooths the curves. * (b) Sample each curve at a regular interval, find the y-value * of the mid-point on each curve, and subtract the sampled * curve value from this value. This is the vertical * disparity at sampled points along each curve. * (c) Fit a LS quadratic to each set of vertically aligned * disparity samples. This smooths the disparity values * in the vertical direction. Then resample at the same * regular interval. We now have a regular grid of smoothed * vertical disparity valuels. * (5) Once the sampled vertical disparity array is found, it can be * interpolated to get a full resolution vertical disparity map. * This can be applied directly to the src image pixels * to dewarp the image in the vertical direction, making * all textlines horizontal. Likewise, the horizontal * disparity array is used to left- and right-align the * longest textlines. */ l_int32 dewarpBuildPageModel(L_DEWARP *dew, const char *debugfile) { l_int32 ret; PIX *pixs, *pix1, *pix2; PTAA *ptaa1, *ptaa2; PROCNAME("dewarpBuildPageModel"); if (!dew) return ERROR_INT("dew not defined", procName, 1); dew->debug = (debugfile) ? 1 : 0; dew->vsuccess = dew->hsuccess = 0; pixs = dew->pixs; if (debugfile) { lept_rmdir("dewmod"); /* erase previous images */ lept_mkdir("dewmod"); pixDisplayWithTitle(pixs, 0, 0, "pixs", 1); pixWrite("/tmp/dewmod/001.png", pixs, IFF_PNG); } /* Make initial estimate of centers of textlines */ ptaa1 = dewarpGetTextlineCenters(pixs, DEBUG_TEXTLINE_CENTERS); if (!ptaa1) { L_WARNING("textline centers not found; model not built\n", procName); return 1; } if (debugfile) { pix1 = pixConvertTo32(pixs); pix2 = pixDisplayPtaa(pix1, ptaa1); pixWrite("/tmp/dewmod/002.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } /* Remove all lines that are not at least 0.8 times the length * of the longest line. */ ptaa2 = dewarpRemoveShortLines(pixs, ptaa1, 0.8, DEBUG_SHORT_LINES); if (debugfile) { pix1 = pixConvertTo32(pixs); pix2 = pixDisplayPtaa(pix1, ptaa2); pixWrite("/tmp/dewmod/003.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } ptaaDestroy(&ptaa1); if (ptaaGetCount(ptaa2) < dew->minlines) { ptaaDestroy(&ptaa2); L_WARNING("insufficient lines to build model\n", procName); return 1; } /* Get the sampled vertical disparity from the textline centers. * The disparity array will push pixels vertically so that each * textline is flat and centered at the y-position of the mid-point. */ if (dewarpFindVertDisparity(dew, ptaa2, 0) != 0) { L_WARNING("vertical disparity not built\n", procName); ptaaDestroy(&ptaa2); return 1; } /* Get the sampled horizontal disparity from the left and right * edges of the text. The disparity array will expand the image * linearly outward to align the text edges vertically. * Do this even if useboth == 0; we still calculate it even * if we don't plan to use it. */ if ((ret = dewarpFindHorizDisparity(dew, ptaa2)) == 0) L_INFO("hsuccess = 1\n", procName); /* Debug output */ if (debugfile) { dewarpPopulateFullRes(dew, NULL, 0, 0); pix1 = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); pixWrite("/tmp/dewmod/006.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); if (ret == 0) { pix1 = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); pixWrite("/tmp/dewmod/007.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); } convertFilesToPdf("/tmp/dewmod", NULL, 135, 1.0, 0, 0, "Dewarp Build Model", debugfile); fprintf(stderr, "pdf file made: %s\n", debugfile); } ptaaDestroy(&ptaa2); return 0; } /*! * dewarpFindVertDisparity() * * Input: dew * ptaa (unsmoothed lines, not vertically ordered) * rotflag (0 if using dew->pixs; 1 if rotated by 90 degrees cw) * Return: 0 if OK, 1 on error * * Notes: * (1) This starts with points along the centers of textlines. * It does quadratic fitting (and smoothing), first along the * lines and then in the vertical direction, to generate * the sampled vertical disparity map. This can then be * interpolated to full resolution and used to remove * the vertical line warping. * (2) Use @rotflag == 1 if you are dewarping vertical lines, as * is done in dewarpBuildLineModel(). The usual case is for * @rotflag == 0. * (3) The model fails to build if the vertical disparity fails. * This sets the vsuccess flag to 1 on success. * (4) Pix debug output goes to /tmp/dewvert/ for collection into * a pdf. Non-pix debug output goes to /tmp. */ l_int32 dewarpFindVertDisparity(L_DEWARP *dew, PTAA *ptaa, l_int32 rotflag) { l_int32 i, j, nlines, npts, nx, ny, sampling; l_float32 c0, c1, c2, x, y, midy, val, medval, medvar, minval, maxval; l_float32 *famidys; NUMA *nax, *nafit, *nacurve0, *nacurve1, *nacurves; NUMA *namidy, *namidys, *namidysi; PIX *pix1, *pix2, *pixcirc, *pixdb; PTA *pta, *ptad, *ptacirc; PTAA *ptaa0, *ptaa1, *ptaa2, *ptaa3, *ptaa4, *ptaa5, *ptaat; FPIX *fpix; PROCNAME("dewarpFindVertDisparity"); if (!dew) return ERROR_INT("dew not defined", procName, 1); dew->vsuccess = 0; if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); /* Do quadratic fit to smooth each line. A single quadratic * over the entire width of the line appears to be sufficient. * Quartics tend to overfit to noise. Each line is thus * represented by three coefficients: y(x) = c2 * x^2 + c1 * x + c0. * Using the coefficients, sample each fitted curve uniformly * across the full width of the image. The result is in ptaa0. */ sampling = dew->sampling; nx = (rotflag) ? dew->ny : dew->nx; ny = (rotflag) ? dew->nx : dew->ny; nlines = ptaaGetCount(ptaa); dew->nlines = nlines; ptaa0 = ptaaCreate(nlines); nacurve0 = numaCreate(nlines); /* stores curvature coeff c2 */ pixdb = (rotflag) ? pixRotateOrth(dew->pixs, 1) : pixClone(dew->pixs); for (i = 0; i < nlines; i++) { /* for each line */ pta = ptaaGetPta(ptaa, i, L_CLONE); ptaGetQuadraticLSF(pta, &c2, &c1, &c0, NULL); numaAddNumber(nacurve0, c2); ptad = ptaCreate(nx); for (j = 0; j < nx; j++) { /* uniformly sampled in x */ x = j * sampling; applyQuadraticFit(c2, c1, c0, x, &y); ptaAddPt(ptad, x, y); } ptaaAddPta(ptaa0, ptad, L_INSERT); ptaDestroy(&pta); } if (dew->debug) { ptaat = ptaaCreate(nlines); for (i = 0; i < nlines; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); ptaGetArrays(pta, &nax, NULL); ptaGetQuadraticLSF(pta, NULL, NULL, NULL, &nafit); ptad = ptaCreateFromNuma(nax, nafit); ptaaAddPta(ptaat, ptad, L_INSERT); ptaDestroy(&pta); numaDestroy(&nax); numaDestroy(&nafit); } pix1 = pixConvertTo32(pixdb); pix2 = pixDisplayPtaa(pix1, ptaat); pixWrite("/tmp/dewmod/004a.png", pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); ptaaDestroy(&ptaat); } /* Remove lines with outlier curvatures. * Note that this is just looking for internal consistency in * the line curvatures. It is not rejecting lines based on * the magnitude of the curvature. That is done when constraints * are applied for valid models. */ numaGetMedianVariation(nacurve0, &medval, &medvar); L_INFO("\nPage %d\n", procName, dew->pageno); L_INFO("Pass 1: Curvature: medval = %f, medvar = %f\n", procName, medval, medvar); ptaa1 = ptaaCreate(nlines); nacurve1 = numaCreate(nlines); for (i = 0; i < nlines; i++) { /* for each line */ numaGetFValue(nacurve0, i, &val); if (L_ABS(val - medval) > 7.0 * medvar) /* TODO: reduce to ~ 3.0 */ continue; pta = ptaaGetPta(ptaa0, i, L_CLONE); ptaaAddPta(ptaa1, pta, L_INSERT); numaAddNumber(nacurve1, val); } nlines = ptaaGetCount(ptaa1); numaDestroy(&nacurve0); /* Save the min and max curvature (in micro-units) */ numaGetMin(nacurve1, &minval, NULL); numaGetMax(nacurve1, &maxval, NULL); dew->mincurv = lept_roundftoi(1000000. * minval); dew->maxcurv = lept_roundftoi(1000000. * maxval); L_INFO("Pass 2: Min/max curvature = (%d, %d)\n", procName, dew->mincurv, dew->maxcurv); /* Find and save the y values at the mid-points in each curve. * If the slope is zero anywhere, it will typically be here. */ namidy = numaCreate(nlines); for (i = 0; i < nlines; i++) { pta = ptaaGetPta(ptaa1, i, L_CLONE); npts = ptaGetCount(pta); ptaGetPt(pta, npts / 2, NULL, &midy); numaAddNumber(namidy, midy); ptaDestroy(&pta); } /* Sort the lines in ptaa1c by their vertical position, going down */ namidysi = numaGetSortIndex(namidy, L_SORT_INCREASING); namidys = numaSortByIndex(namidy, namidysi); nacurves = numaSortByIndex(nacurve1, namidysi); numaDestroy(&dew->namidys); /* in case previously made */ numaDestroy(&dew->nacurves); dew->namidys = namidys; dew->nacurves = nacurves; ptaa2 = ptaaSortByIndex(ptaa1, namidysi); numaDestroy(&namidy); numaDestroy(&nacurve1); numaDestroy(&namidysi); if (dew->debug) { numaWrite("/tmp/namidys.na", namidys); numaWrite("/tmp/nacurves.na", nacurves); pix1 = pixConvertTo32(pixdb); ptacirc = generatePtaFilledCircle(5); pixcirc = pixGenerateFromPta(ptacirc, 11, 11); srand(3); pixDisplayPtaaPattern(pix1, pix1, ptaa2, pixcirc, 5, 5); srand(3); /* use the same colors for text and reference lines */ pixRenderMidYs(pix1, namidys, 2); pix2 = (rotflag) ? pixRotateOrth(pix1, 3) : pixClone(pix1); pixWrite("/tmp/dewmod/004b.png", pix2, IFF_PNG); pixDisplay(pix2, 0, 0); ptaDestroy(&ptacirc); pixDestroy(&pixcirc); pixDestroy(&pix1); pixDestroy(&pix2); } pixDestroy(&pixdb); /* Convert the sampled points in ptaa2 to a sampled disparity with * with respect to the y value at the mid point in the curve. * The disparity is the distance the point needs to move; * plus is downward. */ ptaa3 = ptaaCreate(nlines); for (i = 0; i < nlines; i++) { pta = ptaaGetPta(ptaa2, i, L_CLONE); numaGetFValue(namidys, i, &midy); ptad = ptaCreate(nx); for (j = 0; j < nx; j++) { ptaGetPt(pta, j, &x, &y); ptaAddPt(ptad, x, midy - y); } ptaaAddPta(ptaa3, ptad, L_INSERT); ptaDestroy(&pta); } if (dew->debug) { ptaaWrite("/tmp/ptaa3.ptaa", ptaa3, 0); } /* Generate ptaa4 by taking vertical 'columns' from ptaa3. * We want to fit the vertical disparity on the column to the * vertical position of the line, which we call 'y' here and * obtain from namidys. So each pta in ptaa4 is the set of * vertical disparities down a column of points. The columns * in ptaa4 are equally spaced in x. */ ptaa4 = ptaaCreate(nx); famidys = numaGetFArray(namidys, L_NOCOPY); for (j = 0; j < nx; j++) { pta = ptaCreate(nlines); for (i = 0; i < nlines; i++) { y = famidys[i]; ptaaGetPt(ptaa3, i, j, NULL, &val); /* disparity value */ ptaAddPt(pta, y, val); } ptaaAddPta(ptaa4, pta, L_INSERT); } if (dew->debug) { ptaaWrite("/tmp/ptaa4.ptaa", ptaa4, 0); } /* Do quadratic fit vertically on each of the pixel columns * in ptaa4, for the vertical displacement (which identifies the * src pixel(s) for each dest pixel) as a function of y (the * y value of the mid-points for each line). Then generate * ptaa5 by sampling the fitted vertical displacement on a * regular grid in the vertical direction. Each pta in ptaa5 * gives the vertical displacement for regularly sampled y values * at a fixed x. */ ptaa5 = ptaaCreate(nx); /* uniformly sampled across full height of image */ for (j = 0; j < nx; j++) { /* for each column */ pta = ptaaGetPta(ptaa4, j, L_CLONE); ptaGetQuadraticLSF(pta, &c2, &c1, &c0, NULL); ptad = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sampled in y */ y = i * sampling; applyQuadraticFit(c2, c1, c0, y, &val); ptaAddPt(ptad, y, val); } ptaaAddPta(ptaa5, ptad, L_INSERT); ptaDestroy(&pta); } if (dew->debug) { ptaaWrite("/tmp/ptaa5.ptaa", ptaa5, 0); convertFilesToPdf("/tmp/dewmod", "004", 135, 1.0, 0, 0, "Dewarp Vert Disparity", "/tmp/dewarp_vert.pdf"); fprintf(stderr, "pdf file made: /tmp/dewarp_vert.pdf\n"); } /* Save the result in a fpix at the specified subsampling */ fpix = fpixCreate(nx, ny); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { ptaaGetPt(ptaa5, j, i, NULL, &val); fpixSetPixel(fpix, j, i, val); } } dew->sampvdispar = fpix; dew->vsuccess = 1; ptaaDestroy(&ptaa0); ptaaDestroy(&ptaa1); ptaaDestroy(&ptaa2); ptaaDestroy(&ptaa3); ptaaDestroy(&ptaa4); ptaaDestroy(&ptaa5); return 0; } /*! * dewarpFindHorizDisparity() * * Input: dew * ptaa (unsmoothed lines, not vertically ordered) * Return: 0 if OK, 1 if vertical disparity array is no built or on error * * (1) This is not required for a successful model; only the vertical * disparity is required. This will not be called if the * function to build the vertical disparity fails. * (2) Debug output goes to /tmp/dewmod/ for collection into a pdf. */ l_int32 dewarpFindHorizDisparity(L_DEWARP *dew, PTAA *ptaa) { l_int32 i, j, h, nx, ny, sampling, ret; l_float32 c0, c1, cl0, cl1, cl2, cr0, cr1, cr2; l_float32 x, y, refl, refr; l_float32 val, mederr, leftcurv, rightcurv; NUMA *nald, *nard; PIX *pix1; PTA *ptal, *ptar; /* left and right end points of lines */ PTA *ptalf, *ptarf; /* left and right block, fitted, uniform spacing */ PTA *pta, *ptat, *pta1, *pta2, *ptald, *ptard; PTAA *ptaah; FPIX *fpix; PROCNAME("dewarpFindHorizDisparity"); if (!dew) return ERROR_INT("dew not defined", procName, 1); dew->hsuccess = 0; if (!ptaa) return ERROR_INT("ptaa not defined", procName, 1); /* Get the endpoints of the lines */ h = pixGetHeight(dew->pixs); ret = dewarpGetLineEndpoints(h, ptaa, &ptal, &ptar); if (ret) { L_INFO("Horiz disparity not built\n", procName); return 1; } if (dew->debug) { ptaWrite("/tmp/endpts_left.pta", ptal, 1); ptaWrite("/tmp/endpts_right.pta", ptar, 1); } /* Do a quadratic fit to the left and right endpoints of the * longest lines. Each line is represented by 3 coefficients: * x(y) = c2 * y^2 + c1 * y + c0. * Using the coefficients, sample each fitted curve uniformly * along the full height of the image. * TODO: Set right edge disparity to 0 if not flush-right aligned */ sampling = dew->sampling; nx = dew->nx; ny = dew->ny; /* Find the top and bottom set of long lines, defined by being * at least 0.95 of the length of the longest line in each set. * Quit if there are not at least 3 lines in each set. */ ptald = ptard = NULL; /* end points of longest lines */ ret = dewarpFindLongLines(ptal, ptar, 0.95, &ptald, &ptard); if (ret) { L_INFO("Horiz disparity not built\n", procName); ptaDestroy(&ptal); ptaDestroy(&ptar); return 1; } /* Fit the left side, using quadratic LSF on the set of long * lines. It is not necessary to use the noisy LSF fit * function, because we've removed outlier end points by * selecting the long lines. Then uniformly sample along * this fitted curve. */ dewarpQuadraticLSF(ptald, &cl2, &cl1, &cl0, &mederr); leftcurv = cl2; dew->leftcurv = lept_roundftoi(1000000. * leftcurv); L_INFO("Left quad LSF median error = %5.2f\n", procName, mederr); L_INFO("Left edge curvature = %d\n", procName, dew->leftcurv); ptalf = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sampled in y */ y = i * sampling; applyQuadraticFit(cl2, cl1, cl0, y, &x); ptaAddPt(ptalf, x, y); } /* Fit the right side in the same way. */ dewarpQuadraticLSF(ptard, &cr2, &cr1, &cr0, &mederr); rightcurv = cr2; dew->rightcurv = lept_roundftoi(1000000. * rightcurv); L_INFO("Right quad LSF median error = %5.2f\n", procName, mederr); L_INFO("Right edge curvature = %d\n", procName, dew->rightcurv); ptarf = ptaCreate(ny); for (i = 0; i < ny; i++) { /* uniformly sampled in y */ y = i * sampling; applyQuadraticFit(cr2, cr1, cr0, y, &x); ptaAddPt(ptarf, x, y); } if (dew->debug) { PTA *ptalft, *ptarft; h = pixGetHeight(dew->pixs); pta1 = ptaCreate(h); pta2 = ptaCreate(h); for (i = 0; i < h; i++) { applyQuadraticFit(cl2, cl1, cl0, i, &x); ptaAddPt(pta1, x, i); applyQuadraticFit(cr2, cr1, cr0, i, &x); ptaAddPt(pta2, x, i); } pix1 = pixDisplayPta(NULL, dew->pixs, pta1); pixDisplayPta(pix1, pix1, pta2); pixRenderHorizEndPoints(pix1, ptald, ptard, 0xff000000); pixDisplay(pix1, 600, 800); pixWrite("/tmp/dewmod/005a.png", pix1, IFF_PNG); pixDestroy(&pix1); pix1 = pixDisplayPta(NULL, dew->pixs, pta1); pixDisplayPta(pix1, pix1, pta2); ptalft = ptaTranspose(ptalf); ptarft = ptaTranspose(ptarf); pixRenderHorizEndPoints(pix1, ptalft, ptarft, 0x0000ff00); pixDisplay(pix1, 800, 800); pixWrite("/tmp/dewmod/005b.png", pix1, IFF_PNG); convertFilesToPdf("/tmp/dewmod", "005", 135, 1.0, 0, 0, "Dewarp Horiz Disparity", "/tmp/dewarp_horiz.pdf"); fprintf(stderr, "pdf file made: /tmp/dewarp_horiz.pdf\n"); pixDestroy(&pix1); ptaDestroy(&pta1); ptaDestroy(&pta2); ptaDestroy(&ptalft); ptaDestroy(&ptarft); } /* Find the x value at the midpoints (in y) of the two vertical lines, * ptalf and ptarf. These are the reference values for each of the * lines. Then use the difference between the these midpoint * values and the actual x coordinates of the lines to represent * the horizontal disparity (nald, nard) on the vertical lines * for the sampled y values. */ ptaGetPt(ptalf, ny / 2, &refl, NULL); ptaGetPt(ptarf, ny / 2, &refr, NULL); nald = numaCreate(ny); nard = numaCreate(ny); for (i = 0; i < ny; i++) { ptaGetPt(ptalf, i, &x, NULL); numaAddNumber(nald, refl - x); ptaGetPt(ptarf, i, &x, NULL); numaAddNumber(nard, refr - x); } /* Now for each pair of sampled values of the two lines (at the * same value of y), do a linear interpolation to generate * the horizontal disparity on all sampled points between them. */ ptaah = ptaaCreate(ny); for (i = 0; i < ny; i++) { pta = ptaCreate(2); numaGetFValue(nald, i, &val); ptaAddPt(pta, refl, val); numaGetFValue(nard, i, &val); ptaAddPt(pta, refr, val); ptaGetLinearLSF(pta, &c1, &c0, NULL); /* horiz disparity along line */ ptat = ptaCreate(nx); for (j = 0; j < nx; j++) { x = j * sampling; applyLinearFit(c1, c0, x, &val); ptaAddPt(ptat, x, val); } ptaaAddPta(ptaah, ptat, L_INSERT); ptaDestroy(&pta); } numaDestroy(&nald); numaDestroy(&nard); /* Save the result in a fpix at the specified subsampling */ fpix = fpixCreate(nx, ny); for (i = 0; i < ny; i++) { for (j = 0; j < nx; j++) { ptaaGetPt(ptaah, i, j, NULL, &val); fpixSetPixel(fpix, j, i, val); } } dew->samphdispar = fpix; dew->hsuccess = 1; ptaDestroy(&ptal); ptaDestroy(&ptar); ptaDestroy(&ptald); ptaDestroy(&ptard); ptaDestroy(&ptalf); ptaDestroy(&ptarf); ptaDestroy(&ptard); ptaaDestroy(&ptaah); return 0; } /*! * dewarpGetTextlineCenters() * * Input: pixs (1 bpp) * debugflag (1 for debug output) * Return: ptaa (of center values of textlines) * * Notes: * (1) This in general does not have a point for each value * of x, because there will be gaps between words. * It doesn't matter because we will fit a quadratic to the * points that we do have. */ PTAA * dewarpGetTextlineCenters(PIX *pixs, l_int32 debugflag) { char buf[64]; l_int32 i, w, h, bx, by, nsegs, csize1, csize2; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixa1, *pixa2; PTA *pta; PTAA *ptaa; PROCNAME("dewarpGetTextlineCenters"); if (!pixs || pixGetDepth(pixs) != 1) return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); /* Filter to solidify the text lines within the x-height region, * and to remove most of the ascenders and descenders. * We start with a small vertical opening to remove noise beyond * the line that can cause an error in the line end points. * The small closing (csize1) is used to bridge the gaps between * letters. The large closing (csize2) bridges the gaps between * words; using 1/30 of the page width usually suffices. */ csize1 = L_MAX(15, w / 80); csize2 = L_MAX(30, w / 30); snprintf(buf, sizeof(buf), "o1.3 + c%d.1 + o%d.1 + c%d.1", csize1, csize1, csize2); pix1 = pixMorphSequence(pixs, buf, 0); pixDisplayWithTitle(pix1, 0, 800, "pix1", debugflag); /* Get the 8-connected components ... */ boxa = pixConnComp(pix1, &pixa1, 8); pixDestroy(&pix1); boxaDestroy(&boxa); if (pixaGetCount(pixa1) == 0) { pixaDestroy(&pixa1); return NULL; } /* ... and remove the short and thin c.c */ pixa2 = pixaSelectBySize(pixa1, 100, 4, L_SELECT_IF_BOTH, L_SELECT_IF_GT, 0); if ((nsegs = pixaGetCount(pixa2)) == 0) { pixaDestroy(&pixa1); pixaDestroy(&pixa2); return NULL; } if (debugflag) { pix2 = pixaDisplay(pixa2, w, h); pixDisplayWithTitle(pix2, 800, 800, "pix2", 1); pixDestroy(&pix2); } /* For each c.c., get the weighted center of each vertical column. * The result is a set of points going approximately through * the center of the x-height part of the text line. */ ptaa = ptaaCreate(nsegs); for (i = 0; i < nsegs; i++) { pixaGetBoxGeometry(pixa2, i, &bx, &by, NULL, NULL); pix2 = pixaGetPix(pixa2, i, L_CLONE); pta = dewarpGetMeanVerticals(pix2, bx, by); ptaaAddPta(ptaa, pta, L_INSERT); pixDestroy(&pix2); } if (debugflag) { pix1 = pixCreateTemplate(pixs); pix2 = pixDisplayPtaa(pix1, ptaa); pixDisplayWithTitle(pix2, 0, 1400, "pix3", 1); pixDestroy(&pix1); pixDestroy(&pix2); } pixaDestroy(&pixa1); pixaDestroy(&pixa2); return ptaa; } /*! * dewarpGetMeanVerticals() * * Input: pixs (1 bpp, single c.c.) * x,y (location of UL corner of pixs with respect to page image * Return: pta (mean y-values in component for each x-value, * both translated by (x,y) */ static PTA * dewarpGetMeanVerticals(PIX *pixs, l_int32 x, l_int32 y) { l_int32 w, h, i, j, wpl, sum, count; l_uint32 *line, *data; PTA *pta; PROCNAME("pixGetMeanVerticals"); if (!pixs || pixGetDepth(pixs) != 1) return (PTA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); pta = ptaCreate(w); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (j = 0; j < w; j++) { line = data; sum = count = 0; for (i = 0; i < h; i++) { if (GET_DATA_BIT(line, j) == 1) { sum += i; count += 1; } line += wpl; } if (count == 0) continue; ptaAddPt(pta, x + j, y + (sum / count)); } return pta; } /*! * dewarpRemoveShortLines() * * Input: pixs (1 bpp) * ptaas (input lines) * fract (minimum fraction of longest line to keep) * debugflag * Return: ptaad (containing only lines of sufficient length), * or null on error */ PTAA * dewarpRemoveShortLines(PIX *pixs, PTAA *ptaas, l_float32 fract, l_int32 debugflag) { l_int32 w, n, i, index, maxlen, len; l_float32 minx, maxx; NUMA *na, *naindex; PIX *pix1, *pix2; PTA *pta; PTAA *ptaad; PROCNAME("dewarpRemoveShortLines"); if (!pixs || pixGetDepth(pixs) != 1) return (PTAA *)ERROR_PTR("pixs undefined or not 1 bpp", procName, NULL); if (!ptaas) return (PTAA *)ERROR_PTR("ptaas undefined", procName, NULL); pixGetDimensions(pixs, &w, NULL, NULL); n = ptaaGetCount(ptaas); ptaad = ptaaCreate(n); na = numaCreate(n); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaas, i, L_CLONE); ptaGetRange(pta, &minx, &maxx, NULL, NULL); numaAddNumber(na, maxx - minx + 1); ptaDestroy(&pta); } /* Sort by length and find all that are long enough */ naindex = numaGetSortIndex(na, L_SORT_DECREASING); numaGetIValue(naindex, 0, &index); numaGetIValue(na, index, &maxlen); if (maxlen < 0.5 * w) L_WARNING("lines are relatively short\n", procName); pta = ptaaGetPta(ptaas, index, L_CLONE); ptaaAddPta(ptaad, pta, L_INSERT); for (i = 1; i < n; i++) { numaGetIValue(naindex, i, &index); numaGetIValue(na, index, &len); if (len < fract * maxlen) break; pta = ptaaGetPta(ptaas, index, L_CLONE); ptaaAddPta(ptaad, pta, L_INSERT); } if (debugflag) { pix1 = pixCopy(NULL, pixs); pix2 = pixDisplayPtaa(pix1, ptaad); pixDisplayWithTitle(pix2, 0, 200, "pix4", 1); pixDestroy(&pix1); pixDestroy(&pix2); } numaDestroy(&na); numaDestroy(&naindex); return ptaad; } /*! * dewarpGetLineEndpoints() * * Input: h (height of pixs) * ptaa (lines) * &ptal ( left end points of each line) * &ptar ( right end points of each line) * Return: 0 if OK, 1 on error. * * Notes: * (1) We require that the set of end points extends over 45% of the * height of the input image, to insure good coverage and * avoid extrapolating the curvature too far beyond the * actual textlines. Large extrapolations are particularly * dangerous if used as a reference model. * (2) For fitting the endpoints, x = f(y), we transpose x and y. * Thus all these ptas have x and y swapped! */ static l_int32 dewarpGetLineEndpoints(l_int32 h, PTAA *ptaa, PTA **pptal, PTA **pptar) { l_int32 i, n, npt, x, y; l_float32 miny, maxy, ratio; PTA *pta, *ptal, *ptar; PROCNAME("dewarpGetLineEndpoints"); if (!pptal || !pptar) return ERROR_INT("&ptal and &ptar not both defined", procName, 1); *pptal = *pptar = NULL; if (!ptaa) return ERROR_INT("ptaa undefined", procName, 1); n = ptaaGetCount(ptaa); ptal = ptaCreate(n); ptar = ptaCreate(n); for (i = 0; i < n; i++) { pta = ptaaGetPta(ptaa, i, L_CLONE); ptaGetIPt(pta, 0, &x, &y); ptaAddPt(ptal, y, x); npt = ptaGetCount(pta); ptaGetIPt(pta, npt - 1, &x, &y); ptaAddPt(ptar, y, x); ptaDestroy(&pta); } /* Use the min and max of the y value on the left side. */ ptaGetRange(ptal, &miny, &maxy, NULL, NULL); ratio = (maxy - miny) / (l_float32)h; if (ratio < MIN_RATIO_LINES_TO_HEIGHT) { L_INFO("ratio lines to height, %f, too small\n", procName, ratio); ptaDestroy(&ptal); ptaDestroy(&ptar); return 1; } *pptal = ptal; *pptar = ptar; return 0; } /*! * dewarpQuadraticLSF() * * Input: ptad (left or right end points of longest lines) * &a ( coeff a of LSF: y = ax^2 + bx + c) * &b ( coeff b of LSF: y = ax^2 + bx + c) * &c ( coeff c of LSF: y = ax^2 + bx + c) * &mederr ( median error) * Return: 0 if OK, 1 on error. * * Notes: * (1) This is used for finding the left or right sides of * the text block, computed as a quadratic curve. * Only the longest lines are input, so there are * no outliers. * (2) The ptas for the end points all have x and y swapped. */ static l_int32 dewarpQuadraticLSF(PTA *ptad, l_float32 *pa, l_float32 *pb, l_float32 *pc, l_float32 *pmederr) { l_int32 i, n; l_float32 x, y, xp, c0, c1, c2; NUMA *naerr; PROCNAME("dewarpQuadraticLSF"); if (pmederr) *pmederr = 0.0; if (!pa || !pb || !pc) return ERROR_INT("not all ptrs are defined", procName, 1); *pa = *pb = *pc = 0.0; if (!ptad) return ERROR_INT("ptad not defined", procName, 1); /* Fit to the longest lines */ ptaGetQuadraticLSF(ptad, &c2, &c1, &c0, NULL); *pa = c2; *pb = c1; *pc = c0; /* Optionally, find the median error */ if (pmederr) { n = ptaGetCount(ptad); naerr = numaCreate(n); for (i = 0; i < n; i++) { ptaGetPt(ptad, i, &y, &xp); applyQuadraticFit(c2, c1, c0, y, &x); numaAddNumber(naerr, L_ABS(x - xp)); } numaGetMedian(naerr, pmederr); numaDestroy(&naerr); } return 0; } /*! * dewarpFindLongLines() * * Input: ptal (left end points of lines) * ptar (right end points of lines) * minfract (minimum allowed fraction of longest line) * &ptald ( left end points of longest lines) * &ptard ( right end points of longest lines) * Return: 0 if OK, 1 on error or if there aren't enough long lines * * Notes: * (1) We do the following: * (a) Sort the lines from top to bottom, and divide equally * into Top and Bottom sets. * (b) For each set, select the lines that are at least @minfract * of the length of the longest line in the set. * Typically choose @minfract between 0.9 and 0.95. * (c) Accumulate the left and right end points from both * sets into the two returned ptas. */ static l_int32 dewarpFindLongLines(PTA *ptal, PTA *ptar, l_float32 minfract, PTA **pptald, PTA **pptard) { l_int32 i, n, ntop, nt, nb; l_float32 xl, xr, yl, yr, len, maxlen; NUMA *nalen, *naindex; PTA *ptals, *ptars, *ptald, *ptard; PROCNAME("dewarpFindLongLines"); if (!pptald || !pptard) return ERROR_INT("&ptald and &ptard are not both defined", procName, 1); *pptald = *pptard = NULL; if (!ptal || !ptar) return ERROR_INT("ptal and ptar are not both defined", procName, 1); if (minfract < 0.8 || minfract > 1.0) return ERROR_INT("typ minfract is in [0.90 - 0.95]", procName, 1); /* Sort from top to bottom, remembering that x <--> y in the pta */ n = ptaGetCount(ptal); ptaGetSortIndex(ptal, L_SORT_BY_X, L_SORT_INCREASING, &naindex); ptals = ptaSortByIndex(ptal, naindex); ptars = ptaSortByIndex(ptar, naindex); numaDestroy(&naindex); ptald = ptaCreate(n); /* output of long lines */ ptard = ptaCreate(n); /* ditto */ /* Find all lines in the top half that are within 8 percent of * the length of the longest line in that set. */ ntop = n / 2; nalen = numaCreate(n / 2); /* lengths of top lines */ for (i = 0; i < ntop; i++) { ptaGetPt(ptals, i, NULL, &xl); ptaGetPt(ptars, i, NULL, &xr); numaAddNumber(nalen, xr - xl); } numaGetMax(nalen, &maxlen, NULL); L_INFO("Top: maxlen = %8.3f\n", procName, maxlen); for (i = 0; i < ntop; i++) { numaGetFValue(nalen, i, &len); if (len >= minfract * maxlen) { ptaGetPt(ptals, i, &yl, &xl); ptaAddPt(ptald, yl, xl); ptaGetPt(ptars, i, &yr, &xr); ptaAddPt(ptard, yr, xr); } } numaDestroy(&nalen); nt = ptaGetCount(ptald); if (nt < 3) { L_INFO("too few long lines at top\n", procName); ptaDestroy(&ptals); ptaDestroy(&ptars); ptaDestroy(&ptald); ptaDestroy(&ptard); return 1; } /* Find all lines in the bottom half that are within 8 percent * of the length of the longest line in that set. */ nalen = numaCreate(0); /* lengths of bottom lines */ for (i = ntop; i < n; i++) { ptaGetPt(ptals, i, NULL, &xl); ptaGetPt(ptars, i, NULL, &xr); numaAddNumber(nalen, xr - xl); } numaGetMax(nalen, &maxlen, NULL); L_INFO("Bottom: maxlen = %8.3f\n", procName, maxlen); for (i = 0; i < n - ntop; i++) { numaGetFValue(nalen, i, &len); if (len >= minfract * maxlen) { ptaGetPt(ptals, ntop + i, &yl, &xl); ptaAddPt(ptald, yl, xl); ptaGetPt(ptars, ntop + i, &yr, &xr); ptaAddPt(ptard, yr, xr); } } numaDestroy(&nalen); ptaDestroy(&ptals); ptaDestroy(&ptars); nb = ptaGetCount(ptald) - nt; if (nb < 3) { L_INFO("too few long lines at bottom\n", procName); ptaDestroy(&ptald); ptaDestroy(&ptard); return 1; } else { *pptald = ptald; *pptard = ptard; } return 0; } /*----------------------------------------------------------------------* * Build line disparity model * *----------------------------------------------------------------------*/ /*! * dewarpBuildLineModel() * * Input: dew * opensize (size of opening to remove perpendicular lines) * debugfile (use null to skip writing this) * Return: 0 if OK, 1 if unable to build the model or on error * * Notes: * (1) This builds the horizontal and vertical disparity arrays * for an input of ruled lines, typically for calibration. * In book scanning, you could lay the ruled paper over a page. * Then for that page and several below it, you can use the * disparity correction of the line model to dewarp the pages. * (2) The dew has been initialized with the image of ruled lines. * These lines must be continuous, but we do a small amount * of pre-processing here to insure that. * (3) @opensize is typically about 8. It must be larger than * the thickness of the lines to be extracted. This is the * default value, which is applied if @opensize < 3. * (4) Sets vsuccess = 1 and hsuccess = 1 if the vertical and/or * horizontal disparity arrays build. * (5) Similar to dewarpBuildPageModel(), except here the vertical * and horizontal disparity arrays are both built from ruled lines. * See notes there. */ l_int32 dewarpBuildLineModel(L_DEWARP *dew, l_int32 opensize, const char *debugfile) { char buf[64]; l_int32 i, j, bx, by, ret, nlines; BOXA *boxa; PIX *pixs, *pixh, *pixv, *pix, *pix1, *pix2; PIXA *pixa1, *pixa2; PTA *pta; PTAA *ptaa1, *ptaa2; PROCNAME("dewarpBuildLineModel"); if (!dew) return ERROR_INT("dew not defined", procName, 1); if (opensize < 3) { L_WARNING("opensize should be >= 3; setting to 8\n", procName); opensize = 8; /* default */ } dew->debug = (debugfile) ? 1 : 0; dew->vsuccess = dew->hsuccess = 0; pixs = dew->pixs; if (debugfile) { lept_rmdir("dewline"); /* erase previous images */ lept_mkdir("dewline"); lept_rmdir("dewmod"); /* erase previous images */ lept_mkdir("dewmod"); pixDisplayWithTitle(pixs, 0, 0, "pixs", 1); pixWrite("/tmp/dewline/001.png", pixs, IFF_PNG); } /* Extract and solidify the horizontal and vertical lines. We use * the horizontal lines to derive the vertical disparity, and v.v. * Both disparities are computed using the vertical disparity * algorithm; the horizontal disparity is found from the * vertical lines by rotating them clockwise by 90 degrees. * On the first pass, we compute the horizontal disparity, from * the vertical lines, by rotating them by 90 degrees (so they * are horizontal) and computing the vertical disparity on them; * we rotate the resulting fpix array for the horizontal disparity * back by -90 degrees. On the second pass, we compute the vertical * disparity from the horizontal lines in the usual fashion. */ snprintf(buf, sizeof(buf), "d1.3 + c%d.1 + o%d.1", opensize - 2, opensize); pixh = pixMorphSequence(pixs, buf, 0); /* horiz */ snprintf(buf, sizeof(buf), "d3.1 + c1.%d + o1.%d", opensize - 2, opensize); pix1 = pixMorphSequence(pixs, buf, 0); /* vert */ pixv = pixRotateOrth(pix1, 1); /* vert rotated to horizontal */ pixa1 = pixaCreate(2); pixaAddPix(pixa1, pixv, L_INSERT); /* get horizontal disparity first */ pixaAddPix(pixa1, pixh, L_INSERT); pixDestroy(&pix1); /*--------------------------------------------------------------*/ /* Process twice: first for horiz disparity, then for vert */ /*--------------------------------------------------------------*/ for (i = 0; i < 2; i++) { pix = pixaGetPix(pixa1, i, L_CLONE); pixDisplay(pix, 0, 900); boxa = pixConnComp(pix, &pixa2, 8); nlines = boxaGetCount(boxa); boxaDestroy(&boxa); if (nlines < dew->minlines) { L_WARNING("only found %d lines\n", procName, nlines); pixDestroy(&pix); pixaDestroy(&pixa1); continue; } /* Identify the pixels along the skeleton of each line */ ptaa1 = ptaaCreate(nlines); for (j = 0; j < nlines; j++) { pixaGetBoxGeometry(pixa2, j, &bx, &by, NULL, NULL); pix1 = pixaGetPix(pixa2, j, L_CLONE); pta = dewarpGetMeanVerticals(pix1, bx, by); ptaaAddPta(ptaa1, pta, L_INSERT); pixDestroy(&pix1); } pixaDestroy(&pixa2); if (debugfile) { pix1 = pixConvertTo32(pix); pix2 = pixDisplayPtaa(pix1, ptaa1); snprintf(buf, sizeof(buf), "/tmp/dewline/%03d.png", 2 + 2 * i); pixWrite(buf, pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } /* Remove all lines that are not at least 0.75 times the length * of the longest line. */ ptaa2 = dewarpRemoveShortLines(pix, ptaa1, 0.75, DEBUG_SHORT_LINES); if (debugfile) { pix1 = pixConvertTo32(pix); pix2 = pixDisplayPtaa(pix1, ptaa2); snprintf(buf, sizeof(buf), "/tmp/dewline/%03d.png", 3 + 2 * i); pixWrite(buf, pix2, IFF_PNG); pixDestroy(&pix1); pixDestroy(&pix2); } ptaaDestroy(&ptaa1); nlines = ptaaGetCount(ptaa2); if (nlines < dew->minlines) { pixDestroy(&pix); ptaaDestroy(&ptaa2); L_WARNING("%d lines: too few to build model\n", procName, nlines); continue; } /* Get the sampled 'vertical' disparity from the textline * centers. The disparity array will push pixels vertically * so that each line is flat and centered at the y-position * of the mid-point. */ ret = dewarpFindVertDisparity(dew, ptaa2, 1 - i); /* If i == 0, move the result to the horizontal disparity, * rotating it back by -90 degrees. */ if (i == 0) { /* horizontal disparity, really */ if (ret) { L_WARNING("horizontal disparity not built\n", procName); } else { L_INFO("hsuccess = 1\n", procName); dew->samphdispar = fpixRotateOrth(dew->sampvdispar, 3); fpixDestroy(&dew->sampvdispar); if (debugfile) lept_mv("/tmp/dewarp_vert.pdf", "dewarp_horiz.pdf"); } dew->hsuccess = dew->vsuccess; dew->vsuccess = 0; } else { /* i == 1 */ if (ret) L_WARNING("vertical disparity not built\n", procName); else L_INFO("vsuccess = 1\n", procName); } ptaaDestroy(&ptaa2); pixDestroy(&pix); } pixaDestroy(&pixa1); /* Debug output */ if (debugfile) { if (dew->vsuccess == 1) { dewarpPopulateFullRes(dew, NULL, 0, 0); pix1 = fpixRenderContours(dew->fullvdispar, 3.0, 0.15); pixWrite("/tmp/dewline/006.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); } if (dew->hsuccess == 1) { pix1 = fpixRenderContours(dew->fullhdispar, 3.0, 0.15); pixWrite("/tmp/dewline/007.png", pix1, IFF_PNG); pixDisplay(pix1, 1000, 0); pixDestroy(&pix1); } convertFilesToPdf("/tmp/dewline", NULL, 135, 1.0, 0, 0, "Dewarp Build Line Model", debugfile); fprintf(stderr, "pdf file made: %s\n", debugfile); } return 0; } /*----------------------------------------------------------------------* * Query model status * *----------------------------------------------------------------------*/ /*! * dewarpaModelStatus() * * Input: dewa * pageno * &vsuccess ( 1 on success) * &hsuccess ( 1 on success) * Return: 0 if OK, 1 on error * * Notes: * (1) This tests if a model has been built, not if it is valid. */ l_int32 dewarpaModelStatus(L_DEWARPA *dewa, l_int32 pageno, l_int32 *pvsuccess, l_int32 *phsuccess) { L_DEWARP *dew; PROCNAME("dewarpaModelStatus"); if (pvsuccess) *pvsuccess = 0; if (phsuccess) *phsuccess = 0; if (!dewa) return ERROR_INT("dewa not defined", procName, 1); if ((dew = dewarpaGetDewarp(dewa, pageno)) == NULL) return ERROR_INT("dew not retrieved", procName, 1); if (pvsuccess) *pvsuccess = dew->vsuccess; if (phsuccess) *phsuccess = dew->hsuccess; return 0; } /*----------------------------------------------------------------------* * Rendering helpers * *----------------------------------------------------------------------*/ /*! * pixRenderMidYs() * * Input: pixs (32 bpp) * namidys (y location of reference lines for vertical disparity) * linew (width of rendered line; typ 2) * Return: 0 if OK, 1 on error */ static l_int32 pixRenderMidYs(PIX *pixs, NUMA *namidys, l_int32 linew) { l_int32 i, n, w, yval, rval, gval, bval; PIXCMAP *cmap; PROCNAME("pixRenderMidYs"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!namidys) return ERROR_INT("namidys not defined", procName, 1); w = pixGetWidth(pixs); n = numaGetCount(namidys); cmap = pixcmapCreateRandom(8, 0, 0); for (i = 0; i < n; i++) { pixcmapGetColor(cmap, i % 256, &rval, &gval, &bval); numaGetIValue(namidys, i, &yval); pixRenderLineArb(pixs, 0, yval, w, yval, linew, rval, gval, bval); } pixcmapDestroy(&cmap); return 0; } /*! * pixRenderHorizEndPoints() * * Input: pixs (32 bpp) * ptal (left side line end points) * ptar (right side line end points) * color (0xrrggbb00) * Return: 0 if OK, 1 on error */ static l_int32 pixRenderHorizEndPoints(PIX *pixs, PTA *ptal, PTA *ptar, l_uint32 color) { PIX *pixcirc; PTA *ptalt, *ptart, *ptacirc; PROCNAME("pixRenderHorizEndPoints"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!ptal || !ptar) return ERROR_INT("ptal and ptar not both defined", procName, 1); ptacirc = generatePtaFilledCircle(5); pixcirc = pixGenerateFromPta(ptacirc, 11, 11); ptalt = ptaTranspose(ptal); ptart = ptaTranspose(ptar); pixDisplayPtaPattern(pixs, pixs, ptalt, pixcirc, 5, 5, color); pixDisplayPtaPattern(pixs, pixs, ptart, pixcirc, 5, 5, color); ptaDestroy(&ptacirc); ptaDestroy(&ptalt); ptaDestroy(&ptart); pixDestroy(&pixcirc); return 0; } leptonica-1.70/src/bilinear.c0000640000175000017500000007507212244215671014240 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * bilinear.c * * Bilinear (4 pt) image transformation using a sampled * (to nearest integer) transform on each dest point * PIX *pixBilinearSampledPta() * PIX *pixBilinearSampled() * * Bilinear (4 pt) image transformation using interpolation * (or area mapping) for anti-aliasing images that are * 2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB * PIX *pixBilinearPta() * PIX *pixBilinear() * PIX *pixBilinearPtaColor() * PIX *pixBilinearColor() * PIX *pixBilinearPtaGray() * PIX *pixBilinearGray() * * Bilinear transform including alpha (blend) component * PIX *pixBilinearPtaWithAlpha() * * Bilinear coordinate transformation * l_int32 getBilinearXformCoeffs() * l_int32 bilinearXformSampledPt() * l_int32 bilinearXformPt() * * A bilinear transform can be specified as a specific functional * mapping between 4 points in the source and 4 points in the dest. * It can be used as an approximation to a (nonlinear) projective * transform, because for small warps it is very similar and * it is more stable. (Projective transforms have a division * by a quantity that can get arbitrarily small.) * * We give both a bilinear coordinate transformation and * a bilinear image transformation. * * For the former, we ask for the coordinate value (x',y') * in the transformed space for any point (x,y) in the original * space. The coefficients of the transformation are found by * solving 8 simultaneous equations for the 8 coordinates of * the 4 points in src and dest. The transformation can then * be used to compute the associated image transform, by * computing, for each dest pixel, the relevant pixel(s) in * the source. This can be done either by taking the closest * src pixel to each transformed dest pixel ("sampling") or * by doing an interpolation and averaging over 4 source * pixels with appropriate weightings ("interpolated"). * * A typical application would be to remove some of the * keystoning due to a projective transform in the imaging system. * * The bilinear transform is given by specifying two equations: * * x' = ax + by + cxy + d * y' = ex + fy + gxy + h * * where the eight coefficients have been computed from four * sets of these equations, each for two corresponding data pts. * In practice, for each point (x,y) in the dest image, this * equation is used to compute the corresponding point (x',y') * in the src. That computed point in the src is then used * to determine the dest value in one of two ways: * * - sampling: take the value of the src pixel in which this * point falls * - interpolation: take appropriate linear combinations of the * four src pixels that this dest pixel would * overlap, with the coefficients proportional * to the amount of overlap * * For small warp, like rotation, area mapping in the * interpolation is equivalent to linear interpolation. * * Typical relative timing of transforms (sampled = 1.0): * 8 bpp: sampled 1.0 * interpolated 1.6 * 32 bpp: sampled 1.0 * interpolated 1.8 * Additionally, the computation time/pixel is nearly the same * for 8 bpp and 32 bpp, for both sampled and interpolated. */ #include #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; /*-------------------------------------------------------------* * Sampled bilinear image transformation * *-------------------------------------------------------------*/ /*! * pixBilinearSampledPta() * * Input: pixs (all depths) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary. * (2) Retains colormap, which you can do for a sampled transform.. * (3) No 3 of the 4 points may be collinear. * (4) For 8 and 32 bpp pix, better quality is obtained by the * somewhat slower pixBilinearPta(). See that * function for relative timings between sampled and interpolated. */ PIX * pixBilinearSampledPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_float32 *vc; PIX *pixd; PROCNAME("pixBilinearSampledPta"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getBilinearXformCoeffs(ptad, ptas, &vc); pixd = pixBilinearSampled(pixs, vc, incolor); FREE(vc); return pixd; } /*! * pixBilinearSampled() * * Input: pixs (all depths) * vc (vector of 8 coefficients for bilinear transformation) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary. * (2) Retains colormap, which you can do for a sampled transform.. * (3) For 8 or 32 bpp, much better quality is obtained by the * somewhat slower pixBilinear(). See that function * for relative timings between sampled and interpolated. */ PIX * pixBilinearSampled(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; l_uint32 val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixBilinearSampled"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", procName, NULL); /* Init all dest pixels to color to be brought in from outside */ pixd = pixCreateTemplate(pixs); if ((cmap = pixGetColormap(pixs)) != NULL) { if (incolor == L_BRING_IN_WHITE) color = 1; else color = 0; pixcmapAddBlackOrWhite(cmap, color, &cmapindex); pixSetAllArbitrary(pixd, cmapindex); } else { if ((d == 1 && incolor == L_BRING_IN_WHITE) || (d > 1 && incolor == L_BRING_IN_BLACK)) { pixClearAll(pixd); } else { pixSetAll(pixd); } } /* Scan over the dest pixels */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { bilinearXformSampledPt(vc, j, i, &x, &y); if (x < 0 || y < 0 || x >=w || y >= h) continue; lines = datas + y * wpls; if (d == 1) { val = GET_DATA_BIT(lines, x); SET_DATA_BIT_VAL(lined, j, val); } else if (d == 8) { val = GET_DATA_BYTE(lines, x); SET_DATA_BYTE(lined, j, val); } else if (d == 32) { lined[j] = lines[x]; } else if (d == 2) { val = GET_DATA_DIBIT(lines, x); SET_DATA_DIBIT(lined, j, val); } else if (d == 4) { val = GET_DATA_QBIT(lines, x); SET_DATA_QBIT(lined, j, val); } } } return pixd; } /*---------------------------------------------------------------------* * Interpolated bilinear image transformation * *---------------------------------------------------------------------*/ /*! * pixBilinearPta() * * Input: pixs (all depths; colormap ok) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary * (2) Removes any existing colormap, if necessary, before transforming */ PIX * pixBilinearPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixBilinearPta"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); if (pixGetDepth(pixs) == 1) return pixBilinearSampledPta(pixs, ptad, ptas, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixBilinearPtaGray(pixt2, ptad, ptas, colorval); else /* d == 32 */ pixd = pixBilinearPtaColor(pixt2, ptad, ptas, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixBilinear() * * Input: pixs (all depths; colormap ok) * vc (vector of 8 coefficients for bilinear transformation) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary * (2) Removes any existing colormap, if necessary, before transforming */ PIX * pixBilinear(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixBilinear"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); if (pixGetDepth(pixs) == 1) return pixBilinearSampled(pixs, vc, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixBilinearGray(pixt2, vc, colorval); else /* d == 32 */ pixd = pixBilinearColor(pixt2, vc, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixBilinearPtaColor() * * Input: pixs (32 bpp) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error */ PIX * pixBilinearPtaColor(PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval) { l_float32 *vc; PIX *pixd; PROCNAME("pixBilinearPtaColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getBilinearXformCoeffs(ptad, ptas, &vc); pixd = pixBilinearColor(pixs, vc, colorval); FREE(vc); return pixd; } /*! * pixBilinearColor() * * Input: pixs (32 bpp) * vc (vector of 8 coefficients for bilinear transformation) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error */ PIX * pixBilinearColor(PIX *pixs, l_float32 *vc, l_uint32 colorval) { l_int32 i, j, w, h, d, wpls, wpld; l_uint32 val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pix1, *pix2, *pixd; PROCNAME("pixBilinearColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, colorval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ bilinearXformPt(vc, j, i, &x, &y); linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, &val); *(lined + j) = val; } } /* If rgba, transform the pixs alpha channel and insert in pixd */ if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixBilinearGray(pix1, vc, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * pixBilinearPtaGray() * * Input: pixs (8 bpp) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error */ PIX * pixBilinearPtaGray(PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval) { l_float32 *vc; PIX *pixd; PROCNAME("pixBilinearPtaGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getBilinearXformCoeffs(ptad, ptas, &vc); pixd = pixBilinearGray(pixs, vc, grayval); FREE(vc); return pixd; } /*! * pixBilinearGray() * * Input: pixs (8 bpp) * vc (vector of 8 coefficients for bilinear transformation) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error */ PIX * pixBilinearGray(PIX *pixs, l_float32 *vc, l_uint8 grayval) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pixd; PROCNAME("pixBilinearGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, grayval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ bilinearXformPt(vc, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*-------------------------------------------------------------------------* * Bilinear transform including alpha (blend) component and gamma xform * *-------------------------------------------------------------------------*/ /*! * pixBilinearPtaWithAlpha() * * Input: pixs (32 bpp rgb) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * pixg ( 8 bpp, can be null) * fract (between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque) * border (of pixels added to capture transformed source pixels) * Return: pixd, or null on error * * Notes: * (1) The alpha channel is transformed separately from pixs, * and aligns with it, being fully transparent outside the * boundary of the transformed pixs. For pixels that are fully * transparent, a blending function like pixBlendWithGrayMask() * will give zero weight to corresponding pixels in pixs. * (2) If pixg is NULL, it is generated as an alpha layer that is * partially opaque, using @fract. Otherwise, it is cropped * to pixs if required and @fract is ignored. The alpha channel * in pixs is never used. * (3) Colormaps are removed. * (4) When pixs is transformed, it doesn't matter what color is brought * in because the alpha channel will be transparent (0) there. * (5) To avoid losing source pixels in the destination, it may be * necessary to add a border to the source pix before doing * the bilinear transformation. This can be any non-negative number. * (6) The input @ptad and @ptas are in a coordinate space before * the border is added. Internally, we compensate for this * before doing the bilinear transform on the image after * the border is added. * (7) The default setting for the border values in the alpha channel * is 0 (transparent) for the outermost ring of pixels and * (0.5 * fract * 255) for the second ring. When blended over * a second image, this * (a) shrinks the visible image to make a clean overlap edge * with an image below, and * (b) softens the edges by weakening the aliasing there. * Use l_setAlphaMaskBorder() to change these values. * (8) A subtle use of gamma correction is to remove gamma correction * before scaling and restore it afterwards. This is done * by sandwiching this function between a gamma/inverse-gamma * photometric transform: * pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255); * pixd = pixBilinearPtaWithAlpha(pixt, ptad, ptas, NULL, * fract, border); * pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255); * pixDestroy(&pixt); * This has the side-effect of producing artifacts in the very * dark regions. */ PIX * pixBilinearPtaWithAlpha(PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border) { l_int32 ws, hs, d; PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; PTA *ptad2, *ptas2; PROCNAME("pixBilinearPtaWithAlpha"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using @fract transparent alpha\n", procName); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using 1.0 (fully transparent)\n", procName); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("fully opaque alpha; image cannot be blended\n", procName); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); /* Add border; the color doesn't matter */ pixb1 = pixAddBorder(pixs, border, 0); /* Transform the ptr arrays to work on the bordered image */ ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); /* Do separate bilinear transform of rgb channels of pixs and of pixg */ pixd = pixBilinearPtaColor(pixb1, ptad2, ptas2, 0); if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 7 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ pixga = pixBilinearPtaGray(pixb2, ptad2, ptas2, 0); pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); pixSetSpp(pixd, 4); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixga); ptaDestroy(&ptad2); ptaDestroy(&ptas2); return pixd; } /*-------------------------------------------------------------* * Bilinear coordinate transformation * *-------------------------------------------------------------*/ /*! * getBilinearXformCoeffs() * * Input: ptas (source 4 points; unprimed) * ptad (transformed 4 points; primed) * &vc ( vector of coefficients of transform) * Return: 0 if OK; 1 on error * * We have a set of 8 equations, describing the bilinear * transformation that takes 4 points (ptas) into 4 other * points (ptad). These equations are: * * x1' = c[0]*x1 + c[1]*y1 + c[2]*x1*y1 + c[3] * y1' = c[4]*x1 + c[5]*y1 + c[6]*x1*y1 + c[7] * x2' = c[0]*x2 + c[1]*y2 + c[2]*x2*y2 + c[3] * y2' = c[4]*x2 + c[5]*y2 + c[6]*x2*y2 + c[7] * x3' = c[0]*x3 + c[1]*y3 + c[2]*x3*y3 + c[3] * y3' = c[4]*x3 + c[5]*y3 + c[6]*x3*y3 + c[7] * x4' = c[0]*x4 + c[1]*y4 + c[2]*x4*y4 + c[3] * y4' = c[4]*x4 + c[5]*y4 + c[6]*x4*y4 + c[7] * * This can be represented as * * AC = B * * where B and C are column vectors * * B = [ x1' y1' x2' y2' x3' y3' x4' y4' ] * C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] ] * * and A is the 8x8 matrix * * x1 y1 x1*y1 1 0 0 0 0 * 0 0 0 0 x1 y1 x1*y1 1 * x2 y2 x2*y2 1 0 0 0 0 * 0 0 0 0 x2 y2 x2*y2 1 * x3 y3 x3*y3 1 0 0 0 0 * 0 0 0 0 x3 y3 x3*y3 1 * x4 y4 x4*y4 1 0 0 0 0 * 0 0 0 0 x4 y4 x4*y4 1 * * These eight equations are solved here for the coefficients C. * * These eight coefficients can then be used to find the mapping * (x,y) --> (x',y'): * * x' = c[0]x + c[1]y + c[2]xy + c[3] * y' = c[4]x + c[5]y + c[6]xy + c[7] * * that are implemented in bilinearXformSampledPt() and * bilinearXFormPt(). */ l_int32 getBilinearXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc) { l_int32 i; l_float32 x1, y1, x2, y2, x3, y3, x4, y4; l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ l_float32 *a[8]; /* 8x8 matrix A */ PROCNAME("getBilinearXformCoeffs"); if (!ptas) return ERROR_INT("ptas not defined", procName, 1); if (!ptad) return ERROR_INT("ptad not defined", procName, 1); if (!pvc) return ERROR_INT("&vc not defined", procName, 1); if ((b = (l_float32 *)CALLOC(8, sizeof(l_float32))) == NULL) return ERROR_INT("b not made", procName, 1); *pvc = b; ptaGetPt(ptas, 0, &x1, &y1); ptaGetPt(ptas, 1, &x2, &y2); ptaGetPt(ptas, 2, &x3, &y3); ptaGetPt(ptas, 3, &x4, &y4); ptaGetPt(ptad, 0, &b[0], &b[1]); ptaGetPt(ptad, 1, &b[2], &b[3]); ptaGetPt(ptad, 2, &b[4], &b[5]); ptaGetPt(ptad, 3, &b[6], &b[7]); for (i = 0; i < 8; i++) { if ((a[i] = (l_float32 *)CALLOC(8, sizeof(l_float32))) == NULL) return ERROR_INT("a[i] not made", procName, 1); } a[0][0] = x1; a[0][1] = y1; a[0][2] = x1 * y1; a[0][3] = 1.; a[1][4] = x1; a[1][5] = y1; a[1][6] = x1 * y1; a[1][7] = 1.; a[2][0] = x2; a[2][1] = y2; a[2][2] = x2 * y2; a[2][3] = 1.; a[3][4] = x2; a[3][5] = y2; a[3][6] = x2 * y2; a[3][7] = 1.; a[4][0] = x3; a[4][1] = y3; a[4][2] = x3 * y3; a[4][3] = 1.; a[5][4] = x3; a[5][5] = y3; a[5][6] = x3 * y3; a[5][7] = 1.; a[6][0] = x4; a[6][1] = y4; a[6][2] = x4 * y4; a[6][3] = 1.; a[7][4] = x4; a[7][5] = y4; a[7][6] = x4 * y4; a[7][7] = 1.; gaussjordan(a, b, 8); for (i = 0; i < 8; i++) FREE(a[i]); return 0; } /*! * bilinearXformSampledPt() * * Input: vc (vector of 8 coefficients) * (x, y) (initial point) * (&xp, &yp) ( transformed point) * Return: 0 if OK; 1 on error * * Notes: * (1) This finds the nearest pixel coordinates of the transformed point. * (2) It does not check ptrs for returned data! */ l_int32 bilinearXformSampledPt(l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp) { PROCNAME("bilinearXformSampledPt"); if (!vc) return ERROR_INT("vc not defined", procName, 1); *pxp = (l_int32)(vc[0] * x + vc[1] * y + vc[2] * x * y + vc[3] + 0.5); *pyp = (l_int32)(vc[4] * x + vc[5] * y + vc[6] * x * y + vc[7] + 0.5); return 0; } /*! * bilinearXformPt() * * Input: vc (vector of 8 coefficients) * (x, y) (initial point) * (&xp, &yp) ( transformed point) * Return: 0 if OK; 1 on error * * Notes: * (1) This computes the floating point location of the transformed point. * (2) It does not check ptrs for returned data! */ l_int32 bilinearXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp) { PROCNAME("bilinearXformPt"); if (!vc) return ERROR_INT("vc not defined", procName, 1); *pxp = vc[0] * x + vc[1] * y + vc[2] * x * y + vc[3]; *pyp = vc[4] * x + vc[5] * y + vc[6] * x * y + vc[7]; return 0; } leptonica-1.70/src/pixafunc2.c0000664000175000017500000015364212273757563014375 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * pixafunc2.c * * Pixa Display (render into a pix) * PIX *pixaDisplay() * PIX *pixaDisplayOnColor() * PIX *pixaDisplayRandomCmap() * PIX *pixaDisplayLinearly() * PIX *pixaDisplayOnLattice() * PIX *pixaDisplayUnsplit() * PIX *pixaDisplayTiled() * PIX *pixaDisplayTiledInRows() * PIX *pixaDisplayTiledAndScaled() * * Pixaa Display (render into a pix) * PIX *pixaaDisplay() * PIX *pixaaDisplayByPixa() * PIXA *pixaaDisplayTiledAndScaled() * * Conversion of all pix to specified type (e.g., depth) * PIXA *pixaConvertTo1() * PIXA *pixaConvertTo8() * PIXA *pixaConvertTo8Color() * PIXA *pixaConvertTo32() * * Tile N-Up * l_int32 convertToNUpFiles() * PIXA *convertToNUpPixa() * * We give seven methods for displaying a pixa in a pix. * Some work for 1 bpp input; others for any input depth. * Some give an output depth that depends on the input depth; * others give a different output depth or allow you to choose it. * Some use a boxes to determine where each pix goes; others tile * onto a regular lattice; yet others tile onto an irregular lattice. * * Here is a brief description of what the pixa display functions do. * * pixaDisplay() * This uses the boxes to lay out each pix. It is typically * used to reconstruct a pix that has been broken into components. * pixaDisplayOnColor() * pixaDisplay() with choice of background color * pixaDisplayRandomCmap() * This also uses the boxes to lay out each pix. However, it creates * a colormapped dest, where each 1 bpp pix is given a randomly * generated color (up to 256 are used). * pixaDisplayLinearly() * This puts each pix, sequentially, in a line, either horizontally * or vertically. * pixaDisplayOnLattice() * This puts each pix, sequentially, onto a regular lattice, * omitting any pix that are too big for the lattice size. * This is useful, for example, to store bitmapped fonts, * where all the characters are stored in a single image. * pixaDisplayUnsplit() * This lays out a mosaic of tiles (the pix in the pixa) that * are all of equal size. (Don't use this for unequal sized pix!) * For example, it can be used to invert the action of * pixaSplitPix(). * pixaDisplayTiled() * Like pixaDisplayOnLattice(), this places each pix on a regular * lattice, but here the lattice size is determined by the * largest component, and no components are omitted. This is * dangerous if there are thousands of small components and * one or more very large one, because the size of the resulting * pix can be huge! * pixaDisplayTiledInRows() * This puts each pix down in a series of rows, where the upper * edges of each pix in a row are aligned and there is a uniform * spacing between the pix. The height of each row is determined * by the tallest pix that was put in the row. This function * is a reasonably efficient way to pack the subimages. * A boxa of the locations of each input pix is stored in the output. * pixaDisplayTiledAndScaled() * This scales each pix to a given width and output depth, * and then tiles them in rows with a given number placed in * each row. This is very useful for presenting a sequence * of images that can be at different resolutions, but which * are derived from the same initial image. */ #include #include /* for sqrt() */ #include "allheaders.h" /*---------------------------------------------------------------------* * Pixa Display * *---------------------------------------------------------------------*/ /*! * pixaDisplay() * * Input: pixa * w, h (if set to 0, determines the size from the * b.b. of the components in pixa) * Return: pix, or null on error * * Notes: * (1) This uses the boxes to place each pix in the rendered composite. * (2) Set w = h = 0 to use the b.b. of the components to determine * the size of the returned pix. * (3) Uses the first pix in pixa to determine the depth. * (4) The background is written "white". On 1 bpp, each successive * pix is "painted" (adding foreground), whereas for grayscale * or color each successive pix is blitted with just the src. * (5) If the pixa is empty, returns an empty 1 bpp pix. */ PIX * pixaDisplay(PIXA *pixa, l_int32 w, l_int32 h) { l_int32 i, n, d, xb, yb, wb, hb; BOXA *boxa; PIX *pixt, *pixd; PROCNAME("pixaDisplay"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); n = pixaGetCount(pixa); if (n == 0 && w == 0 && h == 0) return (PIX *)ERROR_PTR("no components; no size", procName, NULL); if (n == 0) { L_WARNING("no components; returning empty 1 bpp pix\n", procName); return pixCreate(w, h, 1); } /* If w and h not input, determine the minimum size required * to contain the origin and all c.c. */ if (w == 0 || h == 0) { boxa = pixaGetBoxa(pixa, L_CLONE); boxaGetExtent(boxa, &w, &h, NULL); boxaDestroy(&boxa); } /* Use the first pix in pixa to determine the depth. */ pixt = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pixt); pixDestroy(&pixt); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); if (d > 1) pixSetAll(pixd); for (i = 0; i < n; i++) { if (pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb)) { L_WARNING("no box found!\n", procName); continue; } pixt = pixaGetPix(pixa, i, L_CLONE); if (d == 1) pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pixt, 0, 0); else pixRasterop(pixd, xb, yb, wb, hb, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); } return pixd; } /*! * pixaDisplayOnColor() * * Input: pixa * w, h (if set to 0, determines the size from the * b.b. of the components in pixa) * color (background color to use) * Return: pix, or null on error * * Notes: * (1) This uses the boxes to place each pix in the rendered composite. * (2) Set w = h = 0 to use the b.b. of the components to determine * the size of the returned pix. * (3) If any pix in @pixa are colormapped, or if the pix have * different depths, it returns a 32 bpp pix. Otherwise, * the depth of the returned pixa equals that of the pix in @pixa. * (4) If the pixa is empty, return null. */ PIX * pixaDisplayOnColor(PIXA *pixa, l_int32 w, l_int32 h, l_uint32 bgcolor) { l_int32 i, n, xb, yb, wb, hb, hascmap, maxdepth, same; BOXA *boxa; PIX *pixt1, *pixt2, *pixd; PIXA *pixat; PROCNAME("pixaDisplayOnColor"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); /* If w and h are not input, determine the minimum size * required to contain the origin and all c.c. */ if (w == 0 || h == 0) { boxa = pixaGetBoxa(pixa, L_CLONE); boxaGetExtent(boxa, &w, &h, NULL); boxaDestroy(&boxa); } /* If any pix have colormaps, or if they have different depths, * generate rgb */ pixaAnyColormaps(pixa, &hascmap); pixaGetDepthInfo(pixa, &maxdepth, &same); if (hascmap || !same) { maxdepth = 32; pixat = pixaCreate(n); for (i = 0; i < n; i++) { pixt1 = pixaGetPix(pixa, i, L_CLONE); pixt2 = pixConvertTo32(pixt1); pixaAddPix(pixat, pixt2, L_INSERT); pixDestroy(&pixt1); } } else { pixat = pixaCopy(pixa, L_CLONE); } /* Make the output pix and set the background color */ if ((pixd = pixCreate(w, h, maxdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); if ((maxdepth == 1 && bgcolor > 0) || (maxdepth == 2 && bgcolor >= 0x3) || (maxdepth == 4 && bgcolor >= 0xf) || (maxdepth == 8 && bgcolor >= 0xff) || (maxdepth == 16 && bgcolor >= 0xffff) || (maxdepth == 32 && bgcolor >= 0xffffff00)) { pixSetAll(pixd); } else if (bgcolor > 0) { pixSetAllArbitrary(pixd, bgcolor); } /* Blit each pix into its place */ for (i = 0; i < n; i++) { if (pixaGetBoxGeometry(pixat, i, &xb, &yb, &wb, &hb)) { L_WARNING("no box found!\n", procName); continue; } pixt1 = pixaGetPix(pixat, i, L_CLONE); pixRasterop(pixd, xb, yb, wb, hb, PIX_SRC, pixt1, 0, 0); pixDestroy(&pixt1); } pixaDestroy(&pixat); return pixd; } /*! * pixaDisplayRandomCmap() * * Input: pixa (of 1 bpp components, with boxa) * w, h (if set to 0, determines the size from the * b.b. of the components in pixa) * Return: pix (8 bpp, cmapped, with random colors on the components), * or null on error * * Notes: * (1) This uses the boxes to place each pix in the rendered composite. * (2) By default, the background color is: black, cmap index 0. * This can be changed by pixcmapResetColor() */ PIX * pixaDisplayRandomCmap(PIXA *pixa, l_int32 w, l_int32 h) { l_int32 i, n, maxdepth, index, xb, yb, wb, hb; BOXA *boxa; PIX *pixs, *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixaDisplayRandomCmap"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); pixaVerifyDepth(pixa, &maxdepth); if (maxdepth != 1) return (PIX *)ERROR_PTR("not all components are 1 bpp", procName, NULL); /* If w and h are not input, determine the minimum size required * to contain the origin and all c.c. */ if (w == 0 || h == 0) { boxa = pixaGetBoxa(pixa, L_CLONE); boxaGetExtent(boxa, &w, &h, NULL); boxaDestroy(&boxa); } /* Set up an 8 bpp dest pix, with a colormap with 254 random colors */ if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmap = pixcmapCreateRandom(8, 1, 1); pixSetColormap(pixd, cmap); /* Color each component and blit it in */ for (i = 0; i < n; i++) { index = 1 + (i % 254); pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb); pixs = pixaGetPix(pixa, i, L_CLONE); pixt = pixConvert1To8(NULL, pixs, 0, index); pixRasterop(pixd, xb, yb, wb, hb, PIX_PAINT, pixt, 0, 0); pixDestroy(&pixs); pixDestroy(&pixt); } return pixd; } /*! * pixaDisplayLinearly() * * Input: pixa * direction (L_HORIZ or L_VERT) * scalefactor (applied to every pix; use 1.0 for no scaling) * background (0 for white, 1 for black; this is the color * of the spacing between the images) * spacing (between images, and on outside) * border (width of black border added to each image; * use 0 for no border) * &boxa ( location of images in output pix * Return: pix of composite images, or null on error * * Notes: * (1) This puts each pix, sequentially, in a line, either horizontally * or vertically. * (2) If any pix has a colormap, all pix are rendered in rgb. * (3) The boxa gives the location of each image. */ PIX * pixaDisplayLinearly(PIXA *pixas, l_int32 direction, l_float32 scalefactor, l_int32 background, /* not used */ l_int32 spacing, l_int32 border, BOXA **pboxa) { l_int32 i, n, x, y, w, h, size, depth, bordval; BOX *box; PIX *pix1, *pix2, *pix3, *pixd; PIXA *pixa1, *pixa2; PROCNAME("pixaDisplayLinearly"); if (pboxa) *pboxa = NULL; if (!pixas) return (PIX *)ERROR_PTR("pixas not defined", procName, NULL); if (direction != L_HORIZ && direction != L_VERT) return (PIX *)ERROR_PTR("invalid direction", procName, NULL); /* Make sure all pix are at the same depth */ pixa1 = pixaConvertToSameDepth(pixas); pixaGetDepthInfo(pixa1, &depth, NULL); /* Scale and add border if requested */ n = pixaGetCount(pixa1); pixa2 = pixaCreate(n); bordval = (depth == 1) ? 1 : 0; size = (n - 1) * spacing; x = y = 0; for (i = 0; i < n; i++) { if ((pix1 = pixaGetPix(pixa1, i, L_CLONE)) == NULL) { L_WARNING("missing pix at index %d\n", procName, i); continue; } if (scalefactor != 1.0) pix2 = pixScale(pix1, scalefactor, scalefactor); else pix2 = pixClone(pix1); if (border) pix3 = pixAddBorder(pix2, border, bordval); else pix3 = pixClone(pix2); pixGetDimensions(pix3, &w, &h, NULL); box = boxCreate(x, y, w, h); if (direction == L_HORIZ) { size += w; x += w + spacing; } else { /* vertical */ size += h; y += h + spacing; } pixaAddPix(pixa2, pix3, L_INSERT); pixaAddBox(pixa2, box, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } pixd = pixaDisplay(pixa2, 0, 0); if (pboxa) *pboxa = pixaGetBoxa(pixa2, L_COPY); pixaDestroy(&pixa1); pixaDestroy(&pixa2); return pixd; } /*! * pixaDisplayOnLattice() * * Input: pixa * cellw (lattice cell width) * cellh (lattice cell height) * &ncols ( number of columns in output lattice) * &boxa ( location of images in lattice) * Return: pix of composite images, or null on error * * Notes: * (1) This places each pix on sequentially on a regular lattice * in the rendered composite. If a pix is too large to fit in the * allocated lattice space, it is not rendered. * (2) If any pix has a colormap, all pix are rendered in rgb. * (3) This is useful when putting bitmaps of components, * such as characters, into a single image. * (4) The boxa gives the location of each image. The UL corner * of each image is on a lattice cell corner. Omitted images * (due to size) are assigned an invalid width and height of 0. */ PIX * pixaDisplayOnLattice(PIXA *pixa, l_int32 cellw, l_int32 cellh, l_int32 *pncols, BOXA **pboxa) { l_int32 n, nw, nh, w, h, d, wt, ht; l_int32 index, i, j, hascmap; BOX *box; BOXA *boxa; PIX *pix, *pixt, *pixd; PIXA *pixat; PROCNAME("pixaDisplayOnLattice"); if (pncols) *pncols = 0; if (pboxa) *pboxa = NULL; if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); /* If any pix have colormaps, generate rgb */ if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); pixaAnyColormaps(pixa, &hascmap); if (hascmap) { pixat = pixaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pix = pixConvertTo32(pixt); pixaAddPix(pixat, pix, L_INSERT); pixDestroy(&pixt); } } else { pixat = pixaCopy(pixa, L_CLONE); } boxa = boxaCreate(n); /* Have number of rows and columns approximately equal */ nw = (l_int32)sqrt((l_float64)n); nh = (n + nw - 1) / nw; w = cellw * nw; h = cellh * nh; /* Use the first pix in pixa to determine the output depth. */ pixaGetPixDimensions(pixat, 0, NULL, NULL, &d); if ((pixd = pixCreate(w, h, d)) == NULL) { pixaDestroy(&pixat); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } pixSetBlackOrWhite(pixd, L_SET_WHITE); /* Tile the output */ index = 0; for (i = 0; i < nh; i++) { for (j = 0; j < nw && index < n; j++, index++) { pixt = pixaGetPix(pixat, index, L_CLONE); pixGetDimensions(pixt, &wt, &ht, NULL); if (wt > cellw || ht > cellh) { fprintf(stderr, "pix(%d) omitted; size %dx%d\n", index, wt, ht); box = boxCreate(0, 0, 0, 0); boxaAddBox(boxa, box, L_INSERT); pixDestroy(&pixt); continue; } pixRasterop(pixd, j * cellw, i * cellh, wt, ht, PIX_SRC, pixt, 0, 0); box = boxCreate(j * cellw, i * cellh, wt, ht); boxaAddBox(boxa, box, L_INSERT); pixDestroy(&pixt); } } if (pncols) *pncols = nw; if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); pixaDestroy(&pixat); return pixd; } /*! * pixaDisplayUnsplit() * * Input: pixa * nx (number of mosaic cells horizontally) * ny (number of mosaic cells vertically) * borderwidth (of added border on all sides) * bordercolor (in our RGBA format: 0xrrggbbaa) * Return: pix of tiled images, or null on error * * Notes: * (1) This is a logical inverse of pixaSplitPix(). It * constructs a pix from a mosaic of tiles, all of equal size. * (2) For added generality, a border of arbitrary color can * be added to each of the tiles. * (3) In use, pixa will typically have either been generated * from pixaSplitPix() or will derived from a pixa that * was so generated. * (4) All pix in the pixa must be of equal depth, and, if * colormapped, have the same colormap. */ PIX * pixaDisplayUnsplit(PIXA *pixa, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor) { l_int32 w, h, d, wt, ht; l_int32 i, j, k, x, y, n; PIX *pixt, *pixd; PROCNAME("pixaDisplayUnsplit"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); if (nx <= 0 || ny <= 0) return (PIX *)ERROR_PTR("nx and ny must be > 0", procName, NULL); if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); if (n != nx * ny) return (PIX *)ERROR_PTR("n != nx * ny", procName, NULL); borderwidth = L_MAX(0, borderwidth); pixaGetPixDimensions(pixa, 0, &wt, &ht, &d); w = nx * (wt + 2 * borderwidth); h = ny * (ht + 2 * borderwidth); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixt = pixaGetPix(pixa, 0, L_CLONE); pixCopyColormap(pixd, pixt); pixDestroy(&pixt); if (borderwidth > 0) pixSetAllArbitrary(pixd, bordercolor); y = borderwidth; for (i = 0, k = 0; i < ny; i++) { x = borderwidth; for (j = 0; j < nx; j++, k++) { pixt = pixaGetPix(pixa, k, L_CLONE); pixRasterop(pixd, x, y, wt, ht, PIX_SRC, pixt, 0, 0); pixDestroy(&pixt); x += wt + 2 * borderwidth; } y += ht + 2 * borderwidth; } return pixd; } /*! * pixaDisplayTiled() * * Input: pixa * maxwidth (of output image) * background (0 for white, 1 for black) * spacing * Return: pix of tiled images, or null on error * * Notes: * (1) This renders a pixa to a single image file of width not to * exceed maxwidth, with background color either white or black, * and with each subimage spaced on a regular lattice. * (2) The lattice size is determined from the largest width and height, * separately, of all pix in the pixa. * (3) All pix in the pixa must be of equal depth. * (4) If any pix has a colormap, all pix are rendered in rgb. * (5) Careful: because no components are omitted, this is * dangerous if there are thousands of small components and * one or more very large one, because the size of the * resulting pix can be huge! */ PIX * pixaDisplayTiled(PIXA *pixa, l_int32 maxwidth, l_int32 background, l_int32 spacing) { l_int32 w, h, wmax, hmax, wd, hd, d, hascmap; l_int32 i, j, n, ni, ncols, nrows; l_int32 ystart, xstart, wt, ht; PIX *pix, *pixt, *pixd; PIXA *pixat; PROCNAME("pixaDisplayTiled"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); /* If any pix have colormaps, generate rgb */ if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); pixaAnyColormaps(pixa, &hascmap); if (hascmap) { pixat = pixaCreate(n); for (i = 0; i < n; i++) { pixt = pixaGetPix(pixa, i, L_CLONE); pix = pixConvertTo32(pixt); pixaAddPix(pixat, pix, L_INSERT); pixDestroy(&pixt); } } else { pixat = pixaCopy(pixa, L_CLONE); } /* Find the largest width and height of the subimages */ wmax = hmax = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixat, i, L_CLONE); pixGetDimensions(pix, &w, &h, NULL); if (i == 0) { d = pixGetDepth(pix); } else if (d != pixGetDepth(pix)) { pixDestroy(&pix); pixaDestroy(&pixat); return (PIX *)ERROR_PTR("depths not equal", procName, NULL); } if (w > wmax) wmax = w; if (h > hmax) hmax = h; pixDestroy(&pix); } /* Get the number of rows and columns and the output image size */ spacing = L_MAX(spacing, 0); ncols = (l_int32)((l_float32)(maxwidth - spacing) / (l_float32)(wmax + spacing)); nrows = (n + ncols - 1) / ncols; wd = wmax * ncols + spacing * (ncols + 1); hd = hmax * nrows + spacing * (nrows + 1); if ((pixd = pixCreate(wd, hd, d)) == NULL) { pixaDestroy(&pixat); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } #if 0 fprintf(stderr, " nrows = %d, ncols = %d, wmax = %d, hmax = %d\n", nrows, ncols, wmax, hmax); fprintf(stderr, " space = %d, wd = %d, hd = %d, n = %d\n", space, wd, hd, n); #endif /* Reset the background color if necessary */ if ((background == 1 && d == 1) || (background == 0 && d != 1)) pixSetAll(pixd); /* Blit the images to the dest */ for (i = 0, ni = 0; i < nrows; i++) { ystart = spacing + i * (hmax + spacing); for (j = 0; j < ncols && ni < n; j++, ni++) { xstart = spacing + j * (wmax + spacing); pix = pixaGetPix(pixat, ni, L_CLONE); wt = pixGetWidth(pix); ht = pixGetHeight(pix); pixRasterop(pixd, xstart, ystart, wt, ht, PIX_SRC, pix, 0, 0); pixDestroy(&pix); } } pixaDestroy(&pixat); return pixd; } /*! * pixaDisplayTiledInRows() * * Input: pixa * outdepth (output depth: 1, 8 or 32 bpp) * maxwidth (of output image) * scalefactor (applied to every pix; use 1.0 for no scaling) * background (0 for white, 1 for black; this is the color * of the spacing between the images) * spacing (between images, and on outside) * border (width of black border added to each image; * use 0 for no border) * Return: pixd (of tiled images), or null on error * * Notes: * (1) This renders a pixa to a single image file of width not to * exceed maxwidth, with background color either white or black, * and with each row tiled such that the top of each pix is * aligned and separated by 'spacing' from the next one. * A black border can be added to each pix. * (2) All pix are converted to outdepth; existing colormaps are removed. * (3) This does a reasonably spacewise-efficient job of laying * out the individual pix images into a tiled composite. * (4) A serialized boxa giving the location in pixd of each input * pix (without added border) is stored in the text string of pixd. * This allows, e.g., regeneration of a pixa from pixd, using * pixaCreateFromBoxa(). If there is no scaling and the depth of * each input pix in the pixa is the same, this tiling operation * can be inverted using the boxa (except for loss of text in * each of the input pix): * pix1 = pixaDisplayTiledInRows(pixa1, 1, 1500, 1.0, 0, 30, 0); * char *boxatxt = pixGetText(pix1); * boxa1 = boxaReadMem((l_uint8 *)boxatxt, strlen(boxatxt)); * pixa2 = pixaCreateFromBoxa(pix1, boxa1, NULL); */ PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border) { l_int32 h; /* cumulative height over all the rows */ l_int32 w; /* cumulative height in the current row */ l_int32 bordval, wtry, wt, ht; l_int32 irow; /* index of current pix in current row */ l_int32 wmaxrow; /* width of the largest row */ l_int32 maxh; /* max height in row */ l_int32 i, j, index, n, x, y, nrows, ninrow; size_t size; l_uint8 *data; BOXA *boxa; NUMA *nainrow; /* number of pix in the row */ NUMA *namaxh; /* height of max pix in the row */ PIX *pix, *pixn, *pixt, *pixd; PIXA *pixan; PROCNAME("pixaDisplayTiledInRows"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); if (outdepth != 1 && outdepth != 8 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL); if (border < 0) border = 0; if (scalefactor <= 0.0) scalefactor = 1.0; if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); /* Normalize depths, scale, remove colormaps; optionally add border */ pixan = pixaCreate(n); bordval = (outdepth == 1) ? 1 : 0; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; if (outdepth == 1) pixn = pixConvertTo1(pix, 128); else if (outdepth == 8) pixn = pixConvertTo8(pix, FALSE); else /* outdepth == 32 */ pixn = pixConvertTo32(pix); pixDestroy(&pix); if (scalefactor != 1.0) pixt = pixScale(pixn, scalefactor, scalefactor); else pixt = pixClone(pixn); if (border) pixd = pixAddBorder(pixt, border, bordval); else pixd = pixClone(pixt); pixDestroy(&pixn); pixDestroy(&pixt); pixaAddPix(pixan, pixd, L_INSERT); } if (pixaGetCount(pixan) != n) { n = pixaGetCount(pixan); L_WARNING("only got %d components\n", procName, n); if (n == 0) { pixaDestroy(&pixan); return (PIX *)ERROR_PTR("no components", procName, NULL); } } /* Compute parameters for layout */ nainrow = numaCreate(0); namaxh = numaCreate(0); wmaxrow = 0; w = h = spacing; maxh = 0; /* max height in row */ for (i = 0, irow = 0; i < n; i++, irow++) { pixaGetPixDimensions(pixan, i, &wt, &ht, NULL); wtry = w + wt + spacing; if (wtry > maxwidth) { /* end the current row and start next one */ numaAddNumber(nainrow, irow); numaAddNumber(namaxh, maxh); wmaxrow = L_MAX(wmaxrow, w); h += maxh + spacing; irow = 0; w = wt + 2 * spacing; maxh = ht; } else { w = wtry; maxh = L_MAX(maxh, ht); } } /* Enter the parameters for the last row */ numaAddNumber(nainrow, irow); numaAddNumber(namaxh, maxh); wmaxrow = L_MAX(wmaxrow, w); h += maxh + spacing; if ((pixd = pixCreate(wmaxrow, h, outdepth)) == NULL) { numaDestroy(&nainrow); numaDestroy(&namaxh); pixaDestroy(&pixan); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } /* Reset the background color if necessary */ if ((background == 1 && outdepth == 1) || (background == 0 && outdepth != 1)) pixSetAll(pixd); /* Blit the images to the dest, and save the boxa identifying * the image regions that do not include the borders. */ nrows = numaGetCount(nainrow); y = spacing; boxa = boxaCreate(n); for (i = 0, index = 0; i < nrows; i++) { /* over rows */ numaGetIValue(nainrow, i, &ninrow); numaGetIValue(namaxh, i, &maxh); x = spacing; for (j = 0; j < ninrow; j++, index++) { /* over pix in row */ pix = pixaGetPix(pixan, index, L_CLONE); pixGetDimensions(pix, &wt, &ht, NULL); boxaAddBox(boxa, boxCreate(x + border, y + border, wt - 2 * border, ht - 2 *border), L_INSERT); pixRasterop(pixd, x, y, wt, ht, PIX_SRC, pix, 0, 0); pixDestroy(&pix); x += wt + spacing; } y += maxh + spacing; } boxaWriteMem(&data, &size, boxa); pixSetText(pixd, (char *)data); /* data is ascii */ FREE(data); boxaDestroy(&boxa); numaDestroy(&nainrow); numaDestroy(&namaxh); pixaDestroy(&pixan); return pixd; } /*! * pixaDisplayTiledAndScaled() * * Input: pixa * outdepth (output depth: 1, 8 or 32 bpp) * tilewidth (each pix is scaled to this width) * ncols (number of tiles in each row) * background (0 for white, 1 for black; this is the color * of the spacing between the images) * spacing (between images, and on outside) * border (width of additional black border on each image; * use 0 for no border) * Return: pix of tiled images, or null on error * * Notes: * (1) This can be used to tile a number of renderings of * an image that are at different scales and depths. * (2) Each image, after scaling and optionally adding the * black border, has width 'tilewidth'. Thus, the border does * not affect the spacing between the image tiles. The * maximum allowed border width is tilewidth / 5. */ PIX * pixaDisplayTiledAndScaled(PIXA *pixa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border) { l_int32 x, y, w, h, wd, hd, d; l_int32 i, n, nrows, maxht, ninrow, irow, bordval; l_int32 *rowht; l_float32 scalefact; PIX *pix, *pixn, *pixt, *pixb, *pixd; PIXA *pixan; PROCNAME("pixaDisplayTiledAndScaled"); if (!pixa) return (PIX *)ERROR_PTR("pixa not defined", procName, NULL); if (outdepth != 1 && outdepth != 8 && outdepth != 32) return (PIX *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL); if (border < 0 || border > tilewidth / 5) border = 0; if ((n = pixaGetCount(pixa)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); /* Normalize scale and depth for each pix; optionally add border */ pixan = pixaCreate(n); bordval = (outdepth == 1) ? 1 : 0; for (i = 0; i < n; i++) { if ((pix = pixaGetPix(pixa, i, L_CLONE)) == NULL) continue; pixGetDimensions(pix, &w, &h, &d); scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w; if (d == 1 && outdepth > 1 && scalefact < 1.0) pixt = pixScaleToGray(pix, scalefact); else pixt = pixScale(pix, scalefact, scalefact); if (outdepth == 1) pixn = pixConvertTo1(pixt, 128); else if (outdepth == 8) pixn = pixConvertTo8(pixt, FALSE); else /* outdepth == 32 */ pixn = pixConvertTo32(pixt); pixDestroy(&pixt); if (border) pixb = pixAddBorder(pixn, border, bordval); else pixb = pixClone(pixn); pixaAddPix(pixan, pixb, L_INSERT); pixDestroy(&pix); pixDestroy(&pixn); } if ((n = pixaGetCount(pixan)) == 0) { /* should not have changed! */ pixaDestroy(&pixan); return (PIX *)ERROR_PTR("no components", procName, NULL); } /* Determine the size of each row and of pixd */ wd = tilewidth * ncols + spacing * (ncols + 1); nrows = (n + ncols - 1) / ncols; if ((rowht = (l_int32 *)CALLOC(nrows, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("rowht array not made", procName, NULL); maxht = 0; ninrow = 0; irow = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixan, i, L_CLONE); ninrow++; pixGetDimensions(pix, &w, &h, NULL); maxht = L_MAX(h, maxht); if (ninrow == ncols) { rowht[irow] = maxht; maxht = ninrow = 0; /* reset */ irow++; } pixDestroy(&pix); } if (ninrow > 0) { /* last fencepost */ rowht[irow] = maxht; irow++; /* total number of rows */ } nrows = irow; hd = spacing * (nrows + 1); for (i = 0; i < nrows; i++) hd += rowht[i]; pixd = pixCreate(wd, hd, outdepth); if ((background == 1 && outdepth == 1) || (background == 0 && outdepth != 1)) pixSetAll(pixd); /* Now blit images to pixd */ x = y = spacing; irow = 0; for (i = 0; i < n; i++) { pix = pixaGetPix(pixan, i, L_CLONE); pixGetDimensions(pix, &w, &h, NULL); if (i && ((i % ncols) == 0)) { /* start new row */ x = spacing; y += spacing + rowht[irow]; irow++; } pixRasterop(pixd, x, y, w, h, PIX_SRC, pix, 0, 0); x += tilewidth + spacing; pixDestroy(&pix); } pixaDestroy(&pixan); FREE(rowht); return pixd; } /*---------------------------------------------------------------------* * Pixaa Display * *---------------------------------------------------------------------*/ /*! * pixaaDisplay() * * Input: paa * w, h (if set to 0, determines the size from the * b.b. of the components in paa) * Return: pix, or null on error * * Notes: * (1) Each pix of the paa is displayed at the location given by * its box, translated by the box of the containing pixa * if it exists. */ PIX * pixaaDisplay(PIXAA *paa, l_int32 w, l_int32 h) { l_int32 i, j, n, nbox, na, d, wmax, hmax, x, y, xb, yb, wb, hb; BOXA *boxa1; /* top-level boxa */ BOXA *boxa; PIX *pixt, *pixd; PIXA *pixa; PROCNAME("pixaaDisplay"); if (!paa) return (PIX *)ERROR_PTR("paa not defined", procName, NULL); n = pixaaGetCount(paa, NULL); if (n == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); /* If w and h not input, determine the minimum size required * to contain the origin and all c.c. */ boxa1 = pixaaGetBoxa(paa, L_CLONE); nbox = boxaGetCount(boxa1); if (w == 0 || h == 0) { if (nbox == n) { boxaGetExtent(boxa1, &w, &h, NULL); } else { /* have to use the lower-level boxa for each pixa */ wmax = hmax = 0; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); boxa = pixaGetBoxa(pixa, L_CLONE); boxaGetExtent(boxa, &w, &h, NULL); wmax = L_MAX(wmax, w); hmax = L_MAX(hmax, h); pixaDestroy(&pixa); boxaDestroy(&boxa); } w = wmax; h = hmax; } } /* Get depth from first pix */ pixa = pixaaGetPixa(paa, 0, L_CLONE); pixt = pixaGetPix(pixa, 0, L_CLONE); d = pixGetDepth(pixt); pixaDestroy(&pixa); pixDestroy(&pixt); if ((pixd = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); x = y = 0; for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); if (nbox == n) boxaGetBoxGeometry(boxa1, i, &x, &y, NULL, NULL); na = pixaGetCount(pixa); for (j = 0; j < na; j++) { pixaGetBoxGeometry(pixa, j, &xb, &yb, &wb, &hb); pixt = pixaGetPix(pixa, j, L_CLONE); pixRasterop(pixd, x + xb, y + yb, wb, hb, PIX_PAINT, pixt, 0, 0); pixDestroy(&pixt); } pixaDestroy(&pixa); } boxaDestroy(&boxa1); return pixd; } /*! * pixaaDisplayByPixa() * * Input: paa (with pix that may have different depths) * xspace between pix in pixa * yspace between pixa * max width of output pix * Return: pixd, or null on error * * Notes: * (1) Displays each pixa on a line (or set of lines), * in order from top to bottom. Within each pixa, * the pix are displayed in order from left to right. * (2) The sizes and depths of each pix can differ. The output pix * has a depth equal to the max depth of all the pix. * (3) This ignores the boxa of the paa. */ PIX * pixaaDisplayByPixa(PIXAA *paa, l_int32 xspace, l_int32 yspace, l_int32 maxw) { l_int32 i, j, npixa, npix, same, use_maxw, x, y, w, h, hindex; l_int32 maxwidth, maxdepth, width, lmaxh, lmaxw; l_int32 *harray; NUMA *nah; PIX *pix, *pixt, *pixd; PIXA *pixa; PROCNAME("pixaaDisplayByPixa"); if (!paa) return (PIX *)ERROR_PTR("paa not defined", procName, NULL); if ((npixa = pixaaGetCount(paa, NULL)) == 0) return (PIX *)ERROR_PTR("no components", procName, NULL); same = pixaaVerifyDepth(paa, &maxdepth); if (!same && maxdepth < 8) return (PIX *)ERROR_PTR("depths differ; max < 8", procName, NULL); /* Be sure the widest box fits in the output pix */ pixaaSizeRange(paa, NULL, NULL, &maxwidth, NULL); if (maxwidth > maxw) { L_WARNING("maxwidth > maxw; using maxwidth\n", procName); maxw = maxwidth; } /* Get size of output pix. The width is the minimum of the * maxw and the largest pixa line width. The height is whatever * it needs to be to accommodate all pixa. */ lmaxw = 0; /* widest line found */ use_maxw = FALSE; nah = numaCreate(0); /* store height of each line */ y = yspace; for (i = 0; i < npixa; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); npix = pixaGetCount(pixa); if (npix == 0) { pixaDestroy(&pixa); continue; } x = xspace; lmaxh = 0; /* max height found in the line */ for (j = 0; j < npix; j++) { pix = pixaGetPix(pixa, j, L_CLONE); pixGetDimensions(pix, &w, &h, NULL); if (x + w >= maxw) { /* start new line */ x = xspace; y += lmaxh + yspace; numaAddNumber(nah, lmaxh); lmaxh = 0; use_maxw = TRUE; } x += w + xspace; lmaxh = L_MAX(h, lmaxh); lmaxw = L_MAX(lmaxw, x); pixDestroy(&pix); } y += lmaxh + yspace; numaAddNumber(nah, lmaxh); pixaDestroy(&pixa); } width = (use_maxw) ? maxw : lmaxw; if ((pixd = pixCreate(width, y, maxdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); /* Now layout the pix by pixa */ y = yspace; harray = numaGetIArray(nah); hindex = 0; for (i = 0; i < npixa; i++) { x = xspace; pixa = pixaaGetPixa(paa, i, L_CLONE); npix = pixaGetCount(pixa); if (npix == 0) { pixaDestroy(&pixa); continue; } for (j = 0; j < npix; j++) { pix = pixaGetPix(pixa, j, L_CLONE); if (pixGetDepth(pix) != maxdepth) { if (maxdepth == 8) pixt = pixConvertTo8(pix, 0); else /* 32 bpp */ pixt = pixConvertTo32(pix); } else { pixt = pixClone(pix); } pixGetDimensions(pixt, &w, &h, NULL); if (x + w >= maxw) { /* start new line */ x = xspace; y += harray[hindex++] + yspace; } pixRasterop(pixd, x, y, w, h, PIX_PAINT, pixt, 0, 0); pixDestroy(&pix); pixDestroy(&pixt); x += w + xspace; } y += harray[hindex++] + yspace; pixaDestroy(&pixa); } FREE(harray); numaDestroy(&nah); return pixd; } /*! * pixaaDisplayTiledAndScaled() * * Input: paa * outdepth (output depth: 1, 8 or 32 bpp) * tilewidth (each pix is scaled to this width) * ncols (number of tiles in each row) * background (0 for white, 1 for black; this is the color * of the spacing between the images) * spacing (between images, and on outside) * border (width of additional black border on each image; * use 0 for no border) * Return: pixa (of tiled images, one image for each pixa in * the paa), or null on error * * Notes: * (1) For each pixa, this generates from all the pix a * tiled/scaled output pix, and puts it in the output pixa. * (2) See comments in pixaDisplayTiledAndScaled(). */ PIXA * pixaaDisplayTiledAndScaled(PIXAA *paa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border) { l_int32 i, n; PIX *pix; PIXA *pixa, *pixad; PROCNAME("pixaaDisplayTiledAndScaled"); if (!paa) return (PIXA *)ERROR_PTR("paa not defined", procName, NULL); if (outdepth != 1 && outdepth != 8 && outdepth != 32) return (PIXA *)ERROR_PTR("outdepth not in {1, 8, 32}", procName, NULL); if (border < 0 || border > tilewidth / 5) border = 0; if ((n = pixaaGetCount(paa, NULL)) == 0) return (PIXA *)ERROR_PTR("no components", procName, NULL); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pixa = pixaaGetPixa(paa, i, L_CLONE); pix = pixaDisplayTiledAndScaled(pixa, outdepth, tilewidth, ncols, background, spacing, border); pixaAddPix(pixad, pix, L_INSERT); pixaDestroy(&pixa); } return pixad; } /*---------------------------------------------------------------------* * Conversion of all pix to specified type (e.g., depth) * *---------------------------------------------------------------------*/ /*! * pixaConvertTo1() * * Input: pixas * thresh (threshold for final binarization from 8 bpp gray) * Return: pixad, or null on error */ PIXA * pixaConvertTo1(PIXA *pixas, l_int32 thresh) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaConvertTo1"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo1(pix1, thresh); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*! * pixaConvertTo8() * * Input: pixas * cmapflag (1 to give pixd a colormap; 0 otherwise) * Return: pixad (each pix is 8 bpp), or null on error * * Notes: * (1) See notes for pixConvertTo8(), applied to each pix in pixas. */ PIXA * pixaConvertTo8(PIXA *pixas, l_int32 cmapflag) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaConvertTo8"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo8(pix1, cmapflag); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*! * pixaConvertTo8Color() * * Input: pixas * ditherflag (1 to dither if necessary; 0 otherwise) * Return: pixad (each pix is 8 bpp), or null on error * * Notes: * (1) See notes for pixConvertTo8Color(), applied to each pix in pixas. */ PIXA * pixaConvertTo8Color(PIXA *pixas, l_int32 dither) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaConvertTo8Color"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo8Color(pix1, dither); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*! * pixaConvertTo32() * * Input: pixas * Return: pixad (32 bpp rgb), or null on error * * Notes: * (1) See notes for pixConvertTo32(), applied to each pix in pixas. */ PIXA * pixaConvertTo32(PIXA *pixas) { l_int32 i, n; BOXA *boxa; PIX *pix1, *pix2; PIXA *pixad; PROCNAME("pixaConvertTo32"); if (!pixas) return (PIXA *)ERROR_PTR("pixas not defined", procName, NULL); n = pixaGetCount(pixas); pixad = pixaCreate(n); for (i = 0; i < n; i++) { pix1 = pixaGetPix(pixas, i, L_CLONE); pix2 = pixConvertTo32(pix1); pixaAddPix(pixad, pix2, L_INSERT); pixDestroy(&pix1); } boxa = pixaGetBoxa(pixas, L_COPY); pixaSetBoxa(pixad, boxa, L_INSERT); return pixad; } /*---------------------------------------------------------------------* * Tile N-Up * *---------------------------------------------------------------------*/ /*! * convertToNUpFiles() * * Input: indir (full path to directory of images) * substr ( can be null) * nx, ny (in [1, ... 50], tiling factors in each direction) * tw (target width, in pixels; must be >= 20) * spacing (between images, and on outside) * border (width of additional black border on each image; * use 0 for no border) * fontdir ( prints tail of filename with image) * outdir (subdirectory of /tmp to put N-up tiled images) * Return: 0 if OK, 1 on error * * Notes: * (1) Each set of nx*ny images is scaled and tiled into a single * image, that is written out to @outdir. * (2) All images in each nx*ny set are scaled to the same width. * This is typically used when all images are roughly the same * size. * (3) Typical values for nx and ny are in [2 ... 5]. * (4) All images are scaled to a width @tw. They are not rescaled * when placed in the (nx,ny) mosaic. */ l_int32 convertToNUpFiles(const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, const char *fontdir, const char *outdir) { l_int32 d, format; char rootpath[256]; PIXA *pixa; PROCNAME("convertToNUpFiles"); if (!dir) return ERROR_INT("dir not defined", procName, 1); if (nx < 1 || ny < 1 || nx > 50 || ny > 50) return ERROR_INT("invalid tiling N-factor", procName, 1); if (!outdir) return ERROR_INT("outdir not defined", procName, 1); pixa = convertToNUpPixa(dir, substr, nx, ny, tw, spacing, border, fontdir); if (!pixa) return ERROR_INT("pixa not made", procName, 1); lept_rmdir(outdir); lept_mkdir(outdir); pixaGetRenderingDepth(pixa, &d); format = (d == 1) ? IFF_TIFF_G4 : IFF_JFIF_JPEG; snprintf(rootpath, sizeof(rootpath), "/tmp/%s/", outdir); /* TODO: Replace above line with this makeTempDirname(rootpath, outdir); */ pixaWriteFiles(rootpath, pixa, format); pixaDestroy(&pixa); return 0; } /*! * convertToNUpPixa() * * Input: dir (full path to directory of images) * substr ( can be null) * nx, ny (in [1, ... 50], tiling factors in each direction) * tw (target width, in pixels; must be >= 20) * spacing (between images, and on outside) * border (width of additional black border on each image; * use 0 for no border) * fontdir ( prints tail of filename with image) * Return: pixad, or null on error * * Notes: * (1) See notes for convertToNUpFiles() */ PIXA * convertToNUpPixa(const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, const char *fontdir) { l_int32 i, j, k, nt, n2, nout, d; char *fname, *tail; L_BMF *bmf; PIX *pix1, *pix2, *pix3, *pix4; PIXA *pixat, *pixad; SARRAY *sa; PROCNAME("convertToNUpPixa"); if (!dir) return (PIXA *)ERROR_PTR("dir not defined", procName, NULL); if (nx < 1 || ny < 1 || nx > 50 || ny > 50) return (PIXA *)ERROR_PTR("invalid tiling N-factor", procName, NULL); if (tw < 20) return (PIXA *)ERROR_PTR("tw must be >= 20", procName, NULL); sa = getSortedPathnamesInDirectory(dir, substr, 0, 0); nt = sarrayGetCount(sa); n2 = nx * ny; nout = (nt + n2 - 1) / n2; pixad = pixaCreate(nout); bmf = (fontdir) ? bmfCreate(fontdir, 6) : NULL; /* 6 pt font */ for (i = 0, j = 0; i < nout; i++) { pixat = pixaCreate(n2); for (k = 0; k < n2 && j < nt; j++, k++) { fname = sarrayGetString(sa, j, L_NOCOPY); if ((pix1 = pixRead(fname)) == NULL) { L_ERROR("image not read from %s\n", procName, fname); continue; } pix2 = pixScaleToSize(pix1, tw, 0); /* all images have width tw */ if (fontdir) { splitPathAtDirectory(fname, NULL, &tail); pix3 = pixAddSingleTextline(pix2, bmf, tail, 0xff000000, L_ADD_BELOW); FREE(tail); } else { pix3 = pixClone(pix2); } pixaAddPix(pixat, pix3, L_INSERT); pixDestroy(&pix1); pixDestroy(&pix2); } if (pixaGetCount(pixat) == 0) continue; pixaGetRenderingDepth(pixat, &d); /* add 2 * border to image width to prevent scaling */ pix4 = pixaDisplayTiledAndScaled(pixat, d, tw + 2 * border, nx, 0, spacing, border); pixaAddPix(pixad, pix4, L_INSERT); pixaDestroy(&pixat); } sarrayDestroy(&sa); bmfDestroy(&bmf); return pixad; } leptonica-1.70/src/coloring.c0000664000175000017500000010155612261312155014264 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * coloring.c * * Coloring "gray" pixels * PIX *pixColorGrayRegions() * l_int32 pixColorGray() * * Adjusting one or more colors to a target color * PIX *pixSnapColor() * PIX *pixSnapColorCmap() * * Piecewise linear color mapping based on a source/target pair * PIX *pixLinearMapToTargetColor() * l_int32 pixelLinearMapToTargetColor() * * Fractional shift of RGB towards black or white * PIX *pixShiftByComponent() * l_int32 pixelShiftByComponent() * l_int32 pixelFractionalShift() * * There are several "coloring" functions in leptonica. * You can find them in these files: * coloring.c * paintcmap.c * pix2.c * blend.c * enhance.c * * They fall into the following categories: * * (1) Moving either the light or dark pixels toward a * specified color. (pixColorGray) * (2) Forcing all pixels whose color is within some delta of a * specified color to move to that color. (pixSnapColor) * (3) Doing a piecewise linear color shift specified by a source * and a target color. Each component shifts independently. * (pixLinearMapToTargetColor) * (4) Shifting all colors by a given fraction of their distance * from 0 (if shifting down) or from 255 (if shifting up). * This is useful for colorizing either the background or * the foreground of a grayscale image. (pixShiftByComponent) * (5) Shifting all colors by a component-dependent fraction of * their distance from 0 (if shifting down) or from 255 (if * shifting up). This is useful for modifying the color to * compensate for color shifts in acquisition, for example * (enhance.c: pixColorShiftRGB). * (6) Repainting selected pixels. (paintcmap.c: pixSetSelectMaskedCmap) * (7) Blending a fraction of a specific color with the existing RGB * color. (pix2.c: pixBlendInRect()) * (8) Changing selected colors in a colormap. * (paintcmap.c: pixSetSelectCmap, pixSetSelectMaskedCmap) * (9) Shifting all the pixels towards black or white depending on * the gray value of a second image. (blend.c: pixFadeWithGray) * (10) Changing the hue, saturation or brightness, by changing the * appropriate parameter in HSV color space by a fraction of * the distance toward its end-point. For example, you can change * the brightness by moving each pixel's v-parameter a specified * fraction of the distance toward 0 (darkening) or toward 255 * (brightening). (enhance.c: pixModifySaturation, * pixModifyHue, pixModifyBrightness) */ #include "allheaders.h" /*---------------------------------------------------------------------* * Coloring "gray" pixels * *---------------------------------------------------------------------*/ /*! * pixColorGrayRegions() * * Input: pixs (2, 4 or 8 bpp gray, rgb, or colormapped) * boxa (of regions in which to apply color) * type (L_PAINT_LIGHT, L_PAINT_DARK) * thresh (average value below/above which pixel is unchanged) * rval, gval, bval (new color to paint) * Return: pixd, or null on error * * Notes: * (1) This generates a new image, where some of the pixels in each * box in the boxa are colorized. See pixColorGray() for usage * with @type and @thresh. Note that @thresh is only used for * rgb; it is ignored for colormapped images. * (2) If the input image is colormapped, the new image will be 8 bpp * colormapped if possible; otherwise, it will be converted * to 32 bpp rgb. Only pixels that are strictly gray will be * colorized. * (3) If the input image is not colormapped, it is converted to rgb. * A "gray" value for a pixel is determined by averaging the * components, and the output rgb value is determined from this. * (4) This can be used in conjunction with pixFindColorRegions() to * add highlight color to a grayscale image. */ PIX * pixColorGrayRegions(PIX *pixs, BOXA *boxa, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, n; BOX *box; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixColorGrayRegions"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!boxa) return (PIX *)ERROR_PTR("boxa not defined", procName, NULL); if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) return (PIX *)ERROR_PTR("invalid type", procName, NULL); cmap = pixGetColormap(pixs); if (cmap && (pixcmapGetCount(cmap) < 128)) { pixd = pixConvertTo8(pixs, 1); /* always new image */ pixColorGrayRegionsCmap(pixd, boxa, type, rval, gval, bval); return pixd; } if (pixGetDepth(pixs) < 8) return (PIX *)ERROR_PTR("depth < 8 bpp", procName, NULL); if (type == L_PAINT_LIGHT) { /* thresh should be low */ if (thresh >= 255) return (PIX *)ERROR_PTR("thresh must be < 255", procName, NULL); if (thresh > 127) L_WARNING("threshold set very high\n", procName); } else { /* type == L_PAINT_DARK; thresh should be high */ if (thresh <= 0) return (PIX *)ERROR_PTR("thresh must be > 0", procName, NULL); if (thresh < 128) L_WARNING("threshold set very low\n", procName); } pixd = pixConvertTo32(pixs); /* always new image */ n = boxaGetCount(boxa); for (i = 0; i < n; i++) { box = boxaGetBox(boxa, i, L_CLONE); pixColorGray(pixd, box, type, thresh, rval, gval, bval); boxDestroy(&box); } return pixd; } /*! * pixColorGray() * * Input: pixs (8 bpp gray, rgb or colormapped image) * box ( region in which to apply color; can be NULL) * type (L_PAINT_LIGHT, L_PAINT_DARK) * thresh (average value below/above which pixel is unchanged) * rval, gval, bval (new color to paint) * Return: 0 if OK; 1 on error * * Notes: * (1) This is an in-place operation; pixs is modified. * If pixs is colormapped, the operation will add colors to the * colormap. Otherwise, pixs will be converted to 32 bpp rgb if * it is initially 8 bpp gray. * (2) If type == L_PAINT_LIGHT, it colorizes non-black pixels, * preserving antialiasing. * If type == L_PAINT_DARK, it colorizes non-white pixels, * preserving antialiasing. * (3) If box is NULL, applies function to the entire image; otherwise, * clips the operation to the intersection of the box and pix. * (4) If colormapped, calls pixColorGrayCmap(), which applies the * coloring algorithm only to pixels that are strictly gray. * (5) For RGB, determines a "gray" value by averaging; then uses this * value, plus the input rgb target, to generate the output * pixel values. * (6) thresh is only used for rgb; it is ignored for colormapped pix. * If type == L_PAINT_LIGHT, use thresh = 0 if all pixels are to * be colored (black pixels will be unaltered). * In situations where there are a lot of black pixels, * setting thresh > 0 will make the function considerably * more efficient without affecting the final result. * If type == L_PAINT_DARK, use thresh = 255 if all pixels * are to be colored (white pixels will be unaltered). * In situations where there are a lot of white pixels, * setting thresh < 255 will make the function considerably * more efficient without affecting the final result. */ l_int32 pixColorGray(PIX *pixs, BOX *box, l_int32 type, l_int32 thresh, l_int32 rval, l_int32 gval, l_int32 bval) { l_int32 i, j, w, h, d, wpl, x1, x2, y1, y2, bw, bh; l_int32 nrval, ngval, nbval, aveval; l_float32 factor; l_uint32 val32; l_uint32 *line, *data; PIX *pixt; PIXCMAP *cmap; PROCNAME("pixColorGray"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (type != L_PAINT_LIGHT && type != L_PAINT_DARK) return ERROR_INT("invalid type", procName, 1); cmap = pixGetColormap(pixs); pixGetDimensions(pixs, &w, &h, &d); if (!cmap && d != 8 && d != 32) return ERROR_INT("pixs not cmapped, 8 bpp or rgb", procName, 1); if (cmap) return pixColorGrayCmap(pixs, box, type, rval, gval, bval); /* rgb or 8 bpp gray image; check the thresh */ if (type == L_PAINT_LIGHT) { /* thresh should be low */ if (thresh >= 255) return ERROR_INT("thresh must be < 255; else this is a no-op", procName, 1); if (thresh > 127) L_WARNING("threshold set very high\n", procName); } else { /* type == L_PAINT_DARK; thresh should be high */ if (thresh <= 0) return ERROR_INT("thresh must be > 0; else this is a no-op", procName, 1); if (thresh < 128) L_WARNING("threshold set very low\n", procName); } if (d == 8) { pixt = pixConvertTo32(pixs); pixTransferAllData(pixs, &pixt, 1, 0); } if (!box) { x1 = y1 = 0; x2 = w; y2 = h; } else { boxGetGeometry(box, &x1, &y1, &bw, &bh); x2 = x1 + bw - 1; y2 = y1 + bh - 1; } data = pixGetData(pixs); wpl = pixGetWpl(pixs); factor = 1. / 255.; for (i = y1; i <= y2; i++) { if (i < 0 || i >= h) continue; line = data + i * wpl; for (j = x1; j <= x2; j++) { if (j < 0 || j >= w) continue; val32 = *(line + j); aveval = ((val32 >> 24) + ((val32 >> 16) & 0xff) + ((val32 >> 8) & 0xff)) / 3; if (type == L_PAINT_LIGHT) { if (aveval < thresh) /* skip sufficiently dark pixels */ continue; nrval = (l_int32)(rval * aveval * factor); ngval = (l_int32)(gval * aveval * factor); nbval = (l_int32)(bval * aveval * factor); } else { /* type == L_PAINT_DARK */ if (aveval > thresh) /* skip sufficiently light pixels */ continue; nrval = rval + (l_int32)((255. - rval) * aveval * factor); ngval = gval + (l_int32)((255. - gval) * aveval * factor); nbval = bval + (l_int32)((255. - bval) * aveval * factor); } composeRGBPixel(nrval, ngval, nbval, &val32); *(line + j) = val32; } } return 0; } /*------------------------------------------------------------------* * Adjusting one or more colors to a target color * *------------------------------------------------------------------*/ /*! * pixSnapColor() * * Input: pixd (; either NULL or equal to pixs for in-place) * pixs (colormapped or 8 bpp gray or 32 bpp rgb) * srcval (color center to be selected for change: 0xrrggbb00) * dstval (target color for pixels: 0xrrggbb00) * diff (max absolute difference, applied to all components) * Return: pixd (with all pixels within diff of pixval set to pixval), * or pixd on error * * Notes: * (1) For inplace operation, call it this way: * pixSnapColor(pixs, pixs, ... ) * (2) For generating a new pixd: * pixd = pixSnapColor(NULL, pixs, ...) * (3) If pixs has a colormap, it is handled by pixSnapColorCmap(). * (4) All pixels within 'diff' of 'srcval', componentwise, * will be changed to 'dstval'. */ PIX * pixSnapColor(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff) { l_int32 val, sval, dval; l_int32 rval, gval, bval, rsval, gsval, bsval; l_int32 i, j, w, h, d, wpl; l_uint32 pixel; l_uint32 *line, *data; PROCNAME("pixSnapColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); if (pixGetColormap(pixs)) return pixSnapColorCmap(pixd, pixs, srcval, dstval, diff); /* pixs does not have a colormap; it must be 8 bpp gray or * 32 bpp rgb. */ if (pixGetDepth(pixs) < 8) return (PIX *)ERROR_PTR("pixs is < 8 bpp", procName, pixd); /* Do the work on pixd */ if (!pixd) pixd = pixCopy(NULL, pixs); pixGetDimensions(pixd, &w, &h, &d); data = pixGetData(pixd); wpl = pixGetWpl(pixd); if (d == 8) { sval = srcval & 0xff; dval = dstval & 0xff; for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(line, j); if (L_ABS(val - sval) <= diff) SET_DATA_BYTE(line, j, dval); } } } else { /* d == 32 */ extractRGBValues(srcval, &rsval, &gsval, &bsval); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = *(line + j); extractRGBValues(pixel, &rval, &gval, &bval); if ((L_ABS(rval - rsval) <= diff) && (L_ABS(gval - gsval) <= diff) && (L_ABS(bval - bsval) <= diff)) *(line + j) = dstval; /* replace */ } } } return pixd; } /*! * pixSnapColorCmap() * * Input: pixd (; either NULL or equal to pixs for in-place) * pixs (colormapped) * srcval (color center to be selected for change: 0xrrggbb00) * dstval (target color for pixels: 0xrrggbb00) * diff (max absolute difference, applied to all components) * Return: pixd (with all pixels within diff of srcval set to dstval), * or pixd on error * * Notes: * (1) For inplace operation, call it this way: * pixSnapCcmap(pixs, pixs, ... ) * (2) For generating a new pixd: * pixd = pixSnapCmap(NULL, pixs, ...) * (3) pixs must have a colormap. * (4) All colors within 'diff' of 'srcval', componentwise, * will be changed to 'dstval'. */ PIX * pixSnapColorCmap(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval, l_int32 diff) { l_int32 i, ncolors, index, found; l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; l_int32 *tab; PIX *pixm; PIXCMAP *cmap; PROCNAME("pixSnapColorCmap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (!pixGetColormap(pixs)) return (PIX *)ERROR_PTR("cmap not found", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); if (!pixd) pixd = pixCopy(NULL, pixs); /* If no free colors, look for one close to the target * that can be commandeered. */ cmap = pixGetColormap(pixd); ncolors = pixcmapGetCount(cmap); extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); found = FALSE; if (pixcmapGetFreeCount(cmap) == 0) { for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if ((L_ABS(rval - rsval) <= diff) && (L_ABS(gval - gsval) <= diff) && (L_ABS(bval - bsval) <= diff)) { index = i; pixcmapResetColor(cmap, index, rdval, gdval, bdval); found = TRUE; break; } } } else { /* just add the new color */ pixcmapAddColor(cmap, rdval, gdval, bdval); ncolors = pixcmapGetCount(cmap); index = ncolors - 1; /* index of new destination color */ found = TRUE; } if (!found) { L_INFO("nothing to do\n", procName); return pixd; } /* For each color in cmap that is close enough to srcval, * set the tab value to 1. Then generate a 1 bpp mask with * fg pixels for every pixel in pixd that is close enough * to srcval (i.e., has value 1 in tab). */ if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, pixd); for (i = 0; i < ncolors; i++) { pixcmapGetColor(cmap, i, &rval, &gval, &bval); if ((L_ABS(rval - rsval) <= diff) && (L_ABS(gval - gsval) <= diff) && (L_ABS(bval - bsval) <= diff)) tab[i] = 1; } pixm = pixMakeMaskFromLUT(pixd, tab); FREE(tab); /* Use the binary mask to set all selected pixels to * the dest color index. */ pixSetMasked(pixd, pixm, dstval); pixDestroy(&pixm); /* Remove all unused colors from the colormap. */ pixRemoveUnusedColors(pixd); return pixd; } /*---------------------------------------------------------------------* * Piecewise linear color mapping based on a source/target pair * *---------------------------------------------------------------------*/ /*! * pixLinearMapToTargetColor() * * Input: pixd (; either NULL or equal to pixs for in-place) * pixs (32 bpp rgb) * srcval (source color: 0xrrggbb00) * dstval (target color: 0xrrggbb00) * Return: pixd (with all pixels mapped based on the srcval/destval * mapping), or pixd on error * * Notes: * (1) For each component (r, b, g) separately, this does a piecewise * linear mapping of the colors in pixs to colors in pixd. * If rs and rd are the red src and dest components in @srcval and * @dstval, then the range [0 ... rs] in pixs is mapped to * [0 ... rd] in pixd. Likewise, the range [rs ... 255] in pixs * is mapped to [rd ... 255] in pixd. And similarly for green * and blue. * (2) The mapping will in general change the hue of the pixels. * However, if the src and dst targets are related by * a transformation given by pixelFractionalShift(), the hue * is invariant. * (3) For inplace operation, call it this way: * pixLinearMapToTargetColor(pixs, pixs, ... ) * (4) For generating a new pixd: * pixd = pixLinearMapToTargetColor(NULL, pixs, ...) */ PIX * pixLinearMapToTargetColor(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval) { l_int32 i, j, w, h, wpl; l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; l_int32 *rtab, *gtab, *btab; l_uint32 pixel; l_uint32 *line, *data; PROCNAME("pixLinearMapToTargetColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs is not 32 bpp", procName, pixd); /* Do the work on pixd */ if (!pixd) pixd = pixCopy(NULL, pixs); extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); rsval = L_MIN(254, L_MAX(1, rsval)); gsval = L_MIN(254, L_MAX(1, gsval)); bsval = L_MIN(254, L_MAX(1, bsval)); rtab = (l_int32 *)CALLOC(256, sizeof(l_int32)); gtab = (l_int32 *)CALLOC(256, sizeof(l_int32)); btab = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { if (i <= rsval) rtab[i] = (i * rdval) / rsval; else rtab[i] = rdval + ((255 - rdval) * (i - rsval)) / (255 - rsval); if (i <= gsval) gtab[i] = (i * gdval) / gsval; else gtab[i] = gdval + ((255 - gdval) * (i - gsval)) / (255 - gsval); if (i <= bsval) btab[i] = (i * bdval) / bsval; else btab[i] = bdval + ((255 - bdval) * (i - bsval)) / (255 - bsval); } pixGetDimensions(pixd, &w, &h, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); composeRGBPixel(rtab[rval], gtab[gval], btab[bval], &pixel); line[j] = pixel; } } FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*! * pixelLinearMapToTargetColor() * * Input: scolor (rgb source color: 0xrrggbb00) * srcmap (source mapping color: 0xrrggbb00) * dstmap (target mapping color: 0xrrggbb00) * &pdcolor ( rgb dest color: 0xrrggbb00) * Return: 0 if OK, 1 on error * * Notes: * (1) This does this does a piecewise linear mapping of each * component of @scolor to @dcolor, based on the relation * between the components of @srcmap and @dstmap. It is the * same transformation, performed on a single color, as mapped * on every pixel in a pix by pixLinearMapToTargetColor(). * (2) For each component, if the sval is larger than the smap, * the dval will be pushed up from dmap towards white. * Otherwise, dval will be pushed down from dmap towards black. * This is because you can visualize the transformation as * a linear stretching where smap moves to dmap, and everything * else follows linearly with 0 and 255 fixed. * (3) The mapping will in general change the hue of @scolor. * However, if the @srcmap and @dstmap targets are related by * a transformation given by pixelFractionalShift(), the hue * will be invariant. */ l_int32 pixelLinearMapToTargetColor(l_uint32 scolor, l_uint32 srcmap, l_uint32 dstmap, l_uint32 *pdcolor) { l_int32 srval, sgval, sbval, drval, dgval, dbval; l_int32 srmap, sgmap, sbmap, drmap, dgmap, dbmap; PROCNAME("pixelLinearMapToTargetColor"); if (!pdcolor) return ERROR_INT("&dcolor not defined", procName, 1); *pdcolor = 0; extractRGBValues(scolor, &srval, &sgval, &sbval); extractRGBValues(srcmap, &srmap, &sgmap, &sbmap); extractRGBValues(dstmap, &drmap, &dgmap, &dbmap); srmap = L_MIN(254, L_MAX(1, srmap)); sgmap = L_MIN(254, L_MAX(1, sgmap)); sbmap = L_MIN(254, L_MAX(1, sbmap)); if (srval <= srmap) drval = (srval * drmap) / srmap; else drval = drmap + ((255 - drmap) * (srval - srmap)) / (255 - srmap); if (sgval <= sgmap) dgval = (sgval * dgmap) / sgmap; else dgval = dgmap + ((255 - dgmap) * (sgval - sgmap)) / (255 - sgmap); if (sbval <= sbmap) dbval = (sbval * dbmap) / sbmap; else dbval = dbmap + ((255 - dbmap) * (sbval - sbmap)) / (255 - sbmap); composeRGBPixel(drval, dgval, dbval, pdcolor); return 0; } /*------------------------------------------------------------------* * Fractional shift of RGB towards black or white * *------------------------------------------------------------------*/ /*! * pixShiftByComponent() * * Input: pixd (; either NULL or equal to pixs for in-place) * pixs (32 bpp rgb) * srcval (source color: 0xrrggbb00) * dstval (target color: 0xrrggbb00) * Return: pixd (with all pixels mapped based on the srcval/destval * mapping), or pixd on error * * Notes: * (1) For each component (r, b, g) separately, this does a linear * mapping of the colors in pixs to colors in pixd. * Let rs and rd be the red src and dest components in @srcval and * @dstval, and rval is the red component of the src pixel. * Then for all pixels in pixs, the mapping for the red * component from pixs to pixd is: * if (rd <= rs) (shift toward black) * rval --> (rd/rs) * rval * if (rd > rs) (shift toward white) * (255 - rval) --> ((255 - rs)/(255 - rd)) * (255 - rval) * Thus if rd <= rs, the red component of all pixels is * mapped by the same fraction toward white, and if rd > rs, * they are mapped by the same fraction toward black. * This is essentially a different linear TRC (gamma = 1) * for each component. The source and target color inputs are * just used to generate the three fractions. * (2) Note that this mapping differs from that in * pixLinearMapToTargetColor(), which maps rs --> rd and does * a piecewise stretching in between. * (3) For inplace operation, call it this way: * pixFractionalShiftByComponent(pixs, pixs, ... ) * (4) For generating a new pixd: * pixd = pixLinearMapToTargetColor(NULL, pixs, ...) * (5) A simple application is to color a grayscale image. * A light background can be colored using srcval = 0xffffff00 * and picking a target background color for dstval. * A dark foreground can be colored by using srcval = 0x0 * and choosing a target foreground color for dstval. */ PIX * pixShiftByComponent(PIX *pixd, PIX *pixs, l_uint32 srcval, l_uint32 dstval) { l_int32 i, j, w, h, wpl; l_int32 rval, gval, bval, rsval, gsval, bsval, rdval, gdval, bdval; l_int32 *rtab, *gtab, *btab; l_uint32 pixel; l_uint32 *line, *data; PIXCMAP *cmap; PROCNAME("pixShiftByComponent"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixd && (pixd != pixs)) return (PIX *)ERROR_PTR("pixd not null or == pixs", procName, pixd); if (pixGetDepth(pixs) != 32 && !pixGetColormap(pixs)) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, pixd); /* Do the work on pixd */ if (!pixd) pixd = pixCopy(NULL, pixs); /* If colormapped, just modify it */ if ((cmap = pixGetColormap(pixd)) != NULL) { pixcmapShiftByComponent(cmap, srcval, dstval); return pixd; } extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); rtab = (l_int32 *)CALLOC(256, sizeof(l_int32)); gtab = (l_int32 *)CALLOC(256, sizeof(l_int32)); btab = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = 0; i < 256; i++) { if (rdval == rsval) rtab[i] = i; else if (rdval < rsval) rtab[i] = (i * rdval) / rsval; else rtab[i] = 255 - (255 - rdval) * (255 - i) / (255 - rsval); if (gdval == gsval) gtab[i] = i; else if (gdval < gsval) gtab[i] = (i * gdval) / gsval; else gtab[i] = 255 - (255 - gdval) * (255 - i) / (255 - gsval); if (bdval == bsval) btab[i] = i; else if (bdval < bsval) btab[i] = (i * bdval) / bsval; else btab[i] = 255 - (255 - bdval) * (255 - i) / (255 - bsval); } pixGetDimensions(pixd, &w, &h, NULL); data = pixGetData(pixd); wpl = pixGetWpl(pixd); for (i = 0; i < h; i++) { line = data + i * wpl; for (j = 0; j < w; j++) { pixel = line[j]; extractRGBValues(pixel, &rval, &gval, &bval); composeRGBPixel(rtab[rval], gtab[gval], btab[bval], &pixel); line[j] = pixel; } } FREE(rtab); FREE(gtab); FREE(btab); return pixd; } /*! * pixelShiftByComponent() * * Input: rval, gval, bval * srcval (source color: 0xrrggbb00) * dstval (target color: 0xrrggbb00) * &ppixel ( rgb value) * Return: 0 if OK, 1 on error * * Notes: * (1) This is a linear transformation that gives the same result * on a single pixel as pixShiftByComponent() gives * on a pix. Each component is handled separately. If * the dest component is larger than the src, then the * component is pushed toward 255 by the same fraction as * the src --> dest shift. */ l_int32 pixelShiftByComponent(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 srcval, l_uint32 dstval, l_uint32 *ppixel) { l_int32 rsval, rdval, gsval, gdval, bsval, bdval, rs, gs, bs; PROCNAME("pixelShiftByComponent"); if (!ppixel) return ERROR_INT("&pixel defined", procName, 1); extractRGBValues(srcval, &rsval, &gsval, &bsval); extractRGBValues(dstval, &rdval, &gdval, &bdval); if (rdval == rsval) rs = rval; else if (rdval < rsval) rs = (rval * rdval) / rsval; else rs = 255 - (255 - rdval) * (255 - rval) / (255 - rsval); if (gdval == gsval) gs = gval; else if (gdval < gsval) gs = (gval * gdval) / gsval; else gs = 255 - (255 - gdval) * (255 - gval) / (255 - gsval); if (bdval == bsval) bs = bval; else if (bdval < bsval) bs = (bval * bdval) / bsval; else bs = 255 - (255 - bdval) * (255 - bval) / (255 - bsval); composeRGBPixel(rs, gs, bs, ppixel); return 0; } /*! * pixelFractionalShift() * * Input: rval, gval, bval * fraction (negative toward black; positive toward white) * &ppixel ( rgb value) * Return: 0 if OK, 1 on error * * Notes: * (1) This transformation leaves the hue invariant, while changing * the saturation and intensity. It can be used for that * purpose in pixLinearMapToTargetColor(). * (2) @fraction is in the range [-1 .... +1]. If @fraction < 0, * saturation is increased and brightness is reduced. The * opposite results if @fraction > 0. If @fraction == -1, * the resulting pixel is black; @fraction == 1 results in white. */ l_int32 pixelFractionalShift(l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fraction, l_uint32 *ppixel) { l_int32 nrval, ngval, nbval; PROCNAME("pixelFractionalShift"); if (!ppixel) return ERROR_INT("&pixel defined", procName, 1); if (fraction < -1.0 || fraction > 1.0) return ERROR_INT("fraction not in [-1 ... +1]", procName, 1); nrval = (fraction < 0) ? (l_int32)((1.0 + fraction) * rval + 0.5) : rval + (l_int32)(fraction * (255 - rval) + 0.5); ngval = (fraction < 0) ? (l_int32)((1.0 + fraction) * gval + 0.5) : gval + (l_int32)(fraction * (255 - gval) + 0.5); nbval = (fraction < 0) ? (l_int32)((1.0 + fraction) * bval + 0.5) : bval + (l_int32)(fraction * (255 - bval) + 0.5); composeRGBPixel(nrval, ngval, nbval, ppixel); return 0; } leptonica-1.70/src/tiffio.c0000644000175000017500000021705612244213760013734 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * tiffio.c * * Reading tiff: * PIX *pixReadTiff() [ special top level ] * PIX *pixReadStreamTiff() * static PIX *pixReadFromTiffStream() * * Writing tiff: * l_int32 pixWriteTiff() [ special top level ] * l_int32 pixWriteTiffCustom() [ special top level ] * l_int32 pixWriteStreamTiff() * static l_int32 pixWriteToTiffStream() * static l_int32 writeCustomTiffTags() * * Reading and writing multipage tiff * PIXA pixaReadMultipageTiff() * l_int32 writeMultipageTiff() [ special top level ] * l_int32 writeMultipageTiffSA() * * Information about tiff file * l_int32 fprintTiffInfo() * l_int32 tiffGetCount() * l_int32 getTiffResolution() * static l_int32 getTiffStreamResolution() * l_int32 readHeaderTiff() * l_int32 freadHeaderTiff() * l_int32 readHeaderMemTiff() * static l_int32 tiffReadHeaderTiff() * l_int32 findTiffCompression() * static l_int32 getTiffCompressedFormat() * * Extraction of tiff g4 data: * l_int32 extractG4DataFromFile() * * Open tiff stream from file stream * static TIFF *fopenTiff() * * Wrapper for TIFFOpen: * static TIFF *openTiff() * * Memory I/O: reading memory --> pix and writing pix --> memory * [10 static helper functions] * l_int32 pixReadMemTiff(); * l_int32 pixWriteMemTiff(); * l_int32 pixWriteMemTiffCustom(); * * Note: You should be using version 3.7.4 of libtiff to be certain * that all the necessary functions are included. */ #include #include #ifndef _MSC_VER #include #else /* _MSC_VER */ #include #define seek _seek; #endif /* _MSC_VER */ #include #include "allheaders.h" #ifdef HAVE_CONFIG_H #include "config_auto.h" #endif /* HAVE_CONFIG_H */ /* --------------------------------------------*/ #if HAVE_LIBTIFF /* defined in environ.h */ /* --------------------------------------------*/ #include "tiff.h" #include "tiffio.h" static const l_int32 DEFAULT_RESOLUTION = 300; /* ppi */ static const l_int32 MAX_PAGES_IN_TIFF_FILE = 3000; /* should be enough */ /* All functions with TIFF interfaces are static. */ static PIX *pixReadFromTiffStream(TIFF *tif); static l_int32 getTiffStreamResolution(TIFF *tif, l_int32 *pxres, l_int32 *pyres); static l_int32 tiffReadHeaderTiff(TIFF *tif, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat); static l_int32 writeCustomTiffTags(TIFF *tif, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes); static l_int32 pixWriteToTiffStream(TIFF *tif, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes); static TIFF *fopenTiff(FILE *fp, const char *modestring); static TIFF *openTiff(const char *filename, const char *modestring); /* Static helper for tiff compression type */ static l_int32 getTiffCompressedFormat(l_uint16 tiffcomp); /* Static function for memory I/O */ static TIFF *fopenTiffMemstream(const char *filename, const char *operation, l_uint8 **pdata, size_t *pdatasize); /* This structure defines a transform to be performed on a TIFF image * (note that the same transformation can be represented in * several different ways using this structure since * vflip + hflip + counterclockwise == clockwise). */ struct tiff_transform { int vflip; /* if non-zero, image needs a vertical fip */ int hflip; /* if non-zero, image needs a horizontal flip */ int rotate; /* -1 -> counterclockwise 90-degree rotation, 0 -> no rotation 1 -> clockwise 90-degree rotation */ }; /* This describes the transformations needed for a given orientation * tag. The tag values start at 1, so you need to subtract 1 to get a * valid index into this array. */ static struct tiff_transform tiff_orientation_transforms[] = { {0, 0, 0}, {0, 1, 0}, {1, 1, 0}, {1, 0, 0}, {0, 1, -1}, {0, 0, 1}, {0, 1, 1}, {0, 0, -1} }; /*--------------------------------------------------------------* * Reading from file * *--------------------------------------------------------------*/ /*! * pixReadTiff() * * Input: filename * page number (0 based) * Return: pix, or null on error * * Notes: * (1) This is a version of pixRead(), specialized for tiff * files, that allows specification of the page to be returned */ PIX * pixReadTiff(const char *filename, l_int32 n) { FILE *fp; PIX *pix; PROCNAME("pixReadTiff"); if (!filename) return (PIX *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIX *)ERROR_PTR("image file not found", procName, NULL); if ((pix = pixReadStreamTiff(fp, n)) == NULL) { fclose(fp); return (PIX *)ERROR_PTR("pix not read", procName, NULL); } fclose(fp); return pix; } /*--------------------------------------------------------------* * Reading from stream * *--------------------------------------------------------------*/ /*! * pixReadStreamTiff() * * Input: stream * n (page number: 0 based) * Return: pix, or null on error (e.g., if the page number is invalid) */ PIX * pixReadStreamTiff(FILE *fp, l_int32 n) { l_int32 i, pagefound; PIX *pix; TIFF *tif; PROCNAME("pixReadStreamTiff"); if (!fp) return (PIX *)ERROR_PTR("stream not defined", procName, NULL); if ((tif = fopenTiff(fp, "rb")) == NULL) return (PIX *)ERROR_PTR("tif not opened", procName, NULL); pagefound = FALSE; pix = NULL; for (i = 0; i < MAX_PAGES_IN_TIFF_FILE; i++) { if (i == n) { pagefound = TRUE; if ((pix = pixReadFromTiffStream(tif)) == NULL) { TIFFCleanup(tif); return (PIX *)ERROR_PTR("pix not read", procName, NULL); } break; } if (TIFFReadDirectory(tif) == 0) break; } if (pagefound == FALSE) { L_WARNING("tiff page %d not found\n", procName, n); TIFFCleanup(tif); return NULL; } TIFFCleanup(tif); return pix; } /*! * pixReadFromTiffStream() * * Input: stream * Return: pix, or null on error * * Notes: * (1) We handle pixels up to 32 bits. This includes: * 1 spp (grayscale): 1, 2, 4, 8, 16 bpp * 1 spp (colormapped): 1, 2, 4, 8 bpp * 3 spp (color): 8 bpp * We do not handle 3 spp, 16 bpp (48 bits/pixel) * (2) For colormapped images, we support 8 bits/color in the palette. * Tiff colormaps have 16 bits/color, and we reduce them to 8. * (3) Quoting the libtiff documenation at * http://libtiff.maptools.org/libtiff.html * "libtiff provides a high-level interface for reading image data * from a TIFF file. This interface handles the details of data * organization and format for a wide variety of TIFF files; * at least the large majority of those files that one would * normally encounter. Image data is, by default, returned as * ABGR pixels packed into 32-bit words (8 bits per sample). * Rectangular rasters can be read or data can be intercepted * at an intermediate level and packed into memory in a format * more suitable to the application. The library handles all * the details of the format of data stored on disk and, * in most cases, if any colorspace conversions are required: * bilevel to RGB, greyscale to RGB, CMYK to RGB, YCbCr to RGB, * 16-bit samples to 8-bit samples, associated/unassociated alpha, * etc." */ static PIX * pixReadFromTiffStream(TIFF *tif) { l_uint8 *linebuf, *data; l_uint16 spp, bps, bpp, tiffbpl, photometry, tiffcomp, orientation; l_uint16 *redmap, *greenmap, *bluemap; l_int32 d, wpl, bpl, comptype, i, j, ncolors, rval, gval, bval; l_int32 xres, yres; l_uint32 w, h, tiffword; l_uint32 *line, *ppixel, *tiffdata; PIX *pix; PIXCMAP *cmap; PROCNAME("pixReadFromTiffStream"); if (!tif) return (PIX *)ERROR_PTR("tif not defined", procName, NULL); /* Use default fields for bps and spp */ TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps); TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp); bpp = bps * spp; if (bpp > 32) return (PIX *)ERROR_PTR("can't handle bpp > 32", procName, NULL); if (spp == 1) d = bps; else if (spp == 3 || spp == 4) d = 32; else return (PIX *)ERROR_PTR("spp not in set {1,3,4}", procName, NULL); TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); tiffbpl = TIFFScanlineSize(tif); if ((pix = pixCreate(w, h, d)) == NULL) return (PIX *)ERROR_PTR("pix not made", procName, NULL); data = (l_uint8 *)pixGetData(pix); wpl = pixGetWpl(pix); bpl = 4 * wpl; /* Read the data */ if (spp == 1) { if ((linebuf = (l_uint8 *)CALLOC(tiffbpl + 1, sizeof(l_uint8))) == NULL) return (PIX *)ERROR_PTR("calloc fail for linebuf", procName, NULL); for (i = 0 ; i < h ; i++) { if (TIFFReadScanline(tif, linebuf, i, 0) < 0) { FREE(linebuf); pixDestroy(&pix); return (PIX *)ERROR_PTR("line read fail", procName, NULL); } memcpy((char *)data, (char *)linebuf, tiffbpl); data += bpl; } if (bps <= 8) pixEndianByteSwap(pix); else /* bps == 16 */ pixEndianTwoByteSwap(pix); FREE(linebuf); } else { /* rgb */ if ((tiffdata = (l_uint32 *)CALLOC(w * h, sizeof(l_uint32))) == NULL) { pixDestroy(&pix); return (PIX *)ERROR_PTR("calloc fail for tiffdata", procName, NULL); } if (!TIFFReadRGBAImageOriented(tif, w, h, (uint32 *)tiffdata, ORIENTATION_TOPLEFT, 0)) { FREE(tiffdata); pixDestroy(&pix); return (PIX *)ERROR_PTR("failed to read tiffdata", procName, NULL); } line = pixGetData(pix); for (i = 0 ; i < h ; i++, line += wpl) { for (j = 0, ppixel = line; j < w; j++) { /* TIFFGet* are macros */ tiffword = tiffdata[i * w + j]; rval = TIFFGetR(tiffword); gval = TIFFGetG(tiffword); bval = TIFFGetB(tiffword); composeRGBPixel(rval, gval, bval, ppixel); ppixel++; } } FREE(tiffdata); } if (getTiffStreamResolution(tif, &xres, &yres) == 0) { pixSetXRes(pix, xres); pixSetYRes(pix, yres); } /* Find and save the compression type */ TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); comptype = getTiffCompressedFormat(tiffcomp); pixSetInputFormat(pix, comptype); if (TIFFGetField(tif, TIFFTAG_COLORMAP, &redmap, &greenmap, &bluemap)) { /* Save the colormap as a pix cmap. Because the * tiff colormap components are 16 bit unsigned, * and go from black (0) to white (0xffff), the * the pix cmap takes the most significant byte. */ if (bps > 8) { pixDestroy(&pix); return (PIX *)ERROR_PTR("invalid bps; > 8", procName, NULL); } if ((cmap = pixcmapCreate(bps)) == NULL) { pixDestroy(&pix); return (PIX *)ERROR_PTR("cmap not made", procName, NULL); } ncolors = 1 << bps; for (i = 0; i < ncolors; i++) pixcmapAddColor(cmap, redmap[i] >> 8, greenmap[i] >> 8, bluemap[i] >> 8); pixSetColormap(pix, cmap); } else { /* No colormap: check photometry and invert if necessary */ if (!TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &photometry)) { /* Guess default photometry setting. Assume min_is_white * if compressed 1 bpp; min_is_black otherwise. */ if (tiffcomp == COMPRESSION_CCITTFAX3 || tiffcomp == COMPRESSION_CCITTFAX4 || tiffcomp == COMPRESSION_CCITTRLE || tiffcomp == COMPRESSION_CCITTRLEW) { photometry = PHOTOMETRIC_MINISWHITE; } else { photometry = PHOTOMETRIC_MINISBLACK; } } if ((d == 1 && photometry == PHOTOMETRIC_MINISBLACK) || (d == 8 && photometry == PHOTOMETRIC_MINISWHITE)) pixInvert(pix, pix); } if (TIFFGetField(tif, TIFFTAG_ORIENTATION, &orientation)) { if (orientation >= 1 && orientation <= 8) { struct tiff_transform *transform = &tiff_orientation_transforms[orientation - 1]; if (transform->vflip) pixFlipTB(pix, pix); if (transform->hflip) pixFlipLR(pix, pix); if (transform->rotate) { PIX *oldpix = pix; pix = pixRotate90(oldpix, transform->rotate); pixDestroy(&oldpix); } } } return pix; } /*--------------------------------------------------------------* * Writing to file * *--------------------------------------------------------------*/ /*! * pixWriteTiff() * * Input: filename (to write to) * pix * comptype (IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP) * modestring ("a" or "w") * Return: 0 if OK, 1 on error * * Notes: * (1) For multi-page tiff, write the first pix with mode "w" and * all subsequent pix with mode "a". */ l_int32 pixWriteTiff(const char *filename, PIX *pix, l_int32 comptype, const char *modestring) { return pixWriteTiffCustom(filename, pix, comptype, modestring, NULL, NULL, NULL, NULL); } /*! * pixWriteTiffCustom() * * Input: filename (to write to) * pix * comptype (IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4) * IFF_TIFF_LZW, IFF_TIFF_ZIP) * modestring ("a" or "w") * natags ( NUMA of custom tiff tags) * savals ( SARRAY of values) * satypes ( SARRAY of types) * nasizes ( NUMA of sizes) * Return: 0 if OK, 1 on error * * Usage: * (1) This writes a page image to a tiff file, with optional * extra tags defined in tiff.h * (2) For multi-page tiff, write the first pix with mode "w" and * all subsequent pix with mode "a". * (3) For the custom tiff tags: * (a) The three arrays {natags, savals, satypes} must all be * either NULL or defined and of equal size. * (b) If they are defined, the tags are an array of integers, * the vals are an array of values in string format, and * the types are an array of types in string format. * (c) All valid tags are definined in tiff.h. * (d) The types allowed are the set of strings: * "char*" * "l_uint8*" * "l_uint16" * "l_uint32" * "l_int32" * "l_float64" * "l_uint16-l_uint16" (note the dash; use it between the * two l_uint16 vals in the val string) * Of these, "char*" and "l_uint16" are the most commonly used. * (e) The last array, nasizes, is also optional. It is for * tags that take an array of bytes for a value, a number of * elements in the array, and a type that is either "char*" * or "l_uint8*" (probably either will work). * Use NULL if there are no such tags. * (f) VERY IMPORTANT: if there are any tags that require the * extra size value, stored in nasizes, they must be * written first! */ l_int32 pixWriteTiffCustom(const char *filename, PIX *pix, l_int32 comptype, const char *modestring, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { l_int32 ret; TIFF *tif; PROCNAME("pixWriteTiffCustom"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!pix) return ERROR_INT("pix not defined", procName, 1); if ((tif = openTiff(filename, modestring)) == NULL) return ERROR_INT("tif not opened", procName, 1); ret = pixWriteToTiffStream(tif, pix, comptype, natags, savals, satypes, nasizes); TIFFClose(tif); return ret; } /*--------------------------------------------------------------* * Writing to stream * *--------------------------------------------------------------*/ /*! * pixWriteStreamTiff() * * Input: stream (opened for append or write) * pix * comptype (IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP) * Return: 0 if OK, 1 on error * * Notes: * (1) For images with bpp > 1, this resets the comptype, if * necessary, to write uncompressed data. * (2) G3 and G4 are only defined for 1 bpp. * (3) We only allow PACKBITS for bpp = 1, because for bpp > 1 * it typically expands images that are not synthetically generated. * (4) G4 compression is typically about twice as good as G3. * G4 is excellent for binary compression of text/line-art, * but terrible for halftones and dithered patterns. (In * fact, G4 on halftones can give a file that is larger * than uncompressed!) If a binary image has dithered * regions, it is usually better to compress with png. */ l_int32 pixWriteStreamTiff(FILE *fp, PIX *pix, l_int32 comptype) { TIFF *tif; PROCNAME("pixWriteStreamTiff"); if (!fp) return ERROR_INT("stream not defined", procName, 1 ); if (!pix) return ERROR_INT("pix not defined", procName, 1 ); if (pixGetDepth(pix) != 1 && comptype != IFF_TIFF && comptype != IFF_TIFF_LZW && comptype != IFF_TIFF_ZIP) { L_WARNING("invalid compression type for bpp > 1\n", procName); comptype = IFF_TIFF_ZIP; } if ((tif = fopenTiff(fp, "wb")) == NULL) return ERROR_INT("tif not opened", procName, 1); if (pixWriteToTiffStream(tif, pix, comptype, NULL, NULL, NULL, NULL)) { TIFFCleanup(tif); return ERROR_INT("tif write error", procName, 1); } TIFFCleanup(tif); return 0; } /*! * pixWriteToTiffStream() * * Input: tif (data structure, opened to a file) * pix * comptype (IFF_TIFF: for any image; no compression * IFF_TIFF_RLE, IFF_TIFF_PACKBITS: for 1 bpp only * IFF_TIFF_G4 and IFF_TIFF_G3: for 1 bpp only * IFF_TIFF_LZW, IFF_TIFF_ZIP: for any image * natags ( NUMA of custom tiff tags) * savals ( SARRAY of values) * satypes ( SARRAY of types) * nasizes ( NUMA of sizes) * Return: 0 if OK, 1 on error * * Notes: * (1) This static function should only be called through higher * level functions in this file; namely, pixWriteTiffCustom(), * pixWriteTiff(), pixWriteStreamTiff(), pixWriteMemTiff() * and pixWriteMemTiffCustom(). * (2) We only allow PACKBITS for bpp = 1, because for bpp > 1 * it typically expands images that are not synthetically generated. * (3) See pixWriteTiffCustom() for details on how to use * the last four parameters for customized tiff tags. * (4) The only valid pixel depths in leptonica are 1, 2, 4, 8, 16 * and 32. However, it is possible, and in some cases desirable, * to write out a tiff file using an rgb pix that has 24 bpp. * This can be created by appending the raster data for a 24 bpp * image (with proper scanline padding) directly to a 24 bpp * pix that was created without a data array. See note in * pixWriteStreamPng() for an example. */ static l_int32 pixWriteToTiffStream(TIFF *tif, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { l_uint8 *linebuf, *data; l_uint16 redmap[256], greenmap[256], bluemap[256]; l_int32 w, h, d, i, j, k, wpl, bpl, tiffbpl, ncolors, cmapsize; l_int32 *rmap, *gmap, *bmap; l_int32 xres, yres; l_uint32 *line, *ppixel; PIX *pixt; PIXCMAP *cmap; char *text; PROCNAME("pixWriteToTiffStream"); if (!tif) return ERROR_INT("tif stream not defined", procName, 1); if (!pix) return ERROR_INT( "pix not defined", procName, 1 ); pixGetDimensions(pix, &w, &h, &d); xres = pixGetXRes(pix); yres = pixGetYRes(pix); if (xres == 0) xres = DEFAULT_RESOLUTION; if (yres == 0) yres = DEFAULT_RESOLUTION; /* ------------------ Write out the header ------------- */ TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, (l_uint32)RESUNIT_INCH); TIFFSetField(tif, TIFFTAG_XRESOLUTION, (l_float64)xres); TIFFSetField(tif, TIFFTAG_YRESOLUTION, (l_float64)yres); TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, (l_uint32)w); TIFFSetField(tif, TIFFTAG_IMAGELENGTH, (l_uint32)h); TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); if ((text = pixGetText(pix)) != NULL) TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, text); if (d == 1) TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISWHITE); else if (d == 32 || d == 24) { TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_RGB); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)8, (l_uint16)8, (l_uint16)8); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)3); } else if ((cmap = pixGetColormap(pix)) == NULL) { TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_MINISBLACK); } else { /* Save colormap in the tiff; not more than 256 colors */ pixcmapToArrays(cmap, &rmap, &gmap, &bmap, NULL); ncolors = pixcmapGetCount(cmap); ncolors = L_MIN(256, ncolors); /* max 256 */ cmapsize = 1 << d; cmapsize = L_MIN(256, cmapsize); /* power of 2; max 256 */ if (ncolors > cmapsize) { L_WARNING("too many colors in cmap for tiff; truncating\n", procName); ncolors = cmapsize; } for (i = 0; i < ncolors; i++) { redmap[i] = (rmap[i] << 8) | rmap[i]; greenmap[i] = (gmap[i] << 8) | gmap[i]; bluemap[i] = (bmap[i] << 8) | bmap[i]; } for (i = ncolors; i < cmapsize; i++) /* init, even though not used */ redmap[i] = greenmap[i] = bluemap[i] = 0; FREE(rmap); FREE(gmap); FREE(bmap); TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_PALETTE); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)1); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)d); TIFFSetField(tif, TIFFTAG_COLORMAP, redmap, greenmap, bluemap); } if (d != 24 && d != 32) { TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, (l_uint16)d); TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, (l_uint16)1); } TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); if (comptype == IFF_TIFF) { /* no compression */ TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); } else if (comptype == IFF_TIFF_G4) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX4); } else if (comptype == IFF_TIFF_G3) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTFAX3); } else if (comptype == IFF_TIFF_RLE) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_CCITTRLE); } else if (comptype == IFF_TIFF_PACKBITS) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_PACKBITS); } else if (comptype == IFF_TIFF_LZW) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_LZW); } else if (comptype == IFF_TIFF_ZIP) { TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_ADOBE_DEFLATE); } else { L_WARNING("unknown tiff compression; using none\n", procName); TIFFSetField(tif, TIFFTAG_COMPRESSION, COMPRESSION_NONE); } /* This is a no-op if arrays are NULL */ writeCustomTiffTags(tif, natags, savals, satypes, nasizes); /* ------------- Write out the image data ------------- */ tiffbpl = TIFFScanlineSize(tif); wpl = pixGetWpl(pix); bpl = 4 * wpl; if (tiffbpl > bpl) fprintf(stderr, "Big trouble: tiffbpl = %d, bpl = %d\n", tiffbpl, bpl); if ((linebuf = (l_uint8 *)CALLOC(1, bpl)) == NULL) return ERROR_INT("calloc fail for linebuf", procName, 1); /* Use single strip for image */ TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, h); if (d != 24 && d != 32) { if (d == 16) pixt = pixEndianTwoByteSwapNew(pix); else pixt = pixEndianByteSwapNew(pix); data = (l_uint8 *)pixGetData(pixt); for (i = 0; i < h; i++, data += bpl) { memcpy((char *)linebuf, (char *)data, tiffbpl); if (TIFFWriteScanline(tif, linebuf, i, 0) < 0) break; } pixDestroy(&pixt); } else if (d == 24) { /* See note 4 above: special case of 24 bpp rgb */ for (i = 0; i < h; i++) { line = pixGetData(pix) + i * wpl; if (TIFFWriteScanline(tif, (l_uint8 *)line, i, 0) < 0) break; } } else { /* standard 32 bpp rgb */ for (i = 0; i < h; i++) { line = pixGetData(pix) + i * wpl; for (j = 0, k = 0, ppixel = line; j < w; j++) { linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_RED); linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_GREEN); linebuf[k++] = GET_DATA_BYTE(ppixel, COLOR_BLUE); ppixel++; } if (TIFFWriteScanline(tif, linebuf, i, 0) < 0) break; } } /* TIFFWriteDirectory(tif); */ FREE(linebuf); return 0; } /*! * writeCustomTiffTags() * * Input: tif * natags ( NUMA of custom tiff tags) * savals ( SARRAY of values) * satypes ( SARRAY of types) * nasizes ( NUMA of sizes) * Return: 0 if OK, 1 on error * * Notes: * (1) This static function should be called indirectly through * higher level functions, such as pixWriteTiffCustom(), * which call pixWriteToTiffStream(). See details in * pixWriteTiffCustom() for using the 4 input arrays. * (2) This is a no-op if the first 3 arrays are all NULL. * (3) Otherwise, the first 3 arrays must be defined and all * of equal size. * (4) The fourth array is always optional. * (5) The most commonly used types are "char*" and "u_int16". * See tiff.h for a full listing of the tiff tags. * Note that many of these tags, in particular the bit tags, * are intended to be private, and cannot be set by this function. * Examples are the STRIPOFFSETS and STRIPBYTECOUNTS tags, * which are bit tags that are automatically set in the header, * and can be extracted using tiffdump. */ static l_int32 writeCustomTiffTags(TIFF *tif, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { char *sval, *type; l_int32 i, n, ns, size, tagval, val; l_float64 dval; l_uint32 uval, uval2; PROCNAME("writeCustomTiffTags"); if (!tif) return ERROR_INT("tif stream not defined", procName, 1); if (!natags && !savals && !satypes) return 0; if (!natags || !savals || !satypes) return ERROR_INT("not all arrays defined", procName, 1); n = numaGetCount(natags); if ((sarrayGetCount(savals) != n) || (sarrayGetCount(satypes) != n)) return ERROR_INT("not all sa the same size", procName, 1); /* The sized arrays (4 args to TIFFSetField) are written first */ if (nasizes) { ns = numaGetCount(nasizes); if (ns > n) return ERROR_INT("too many 4-arg tag calls", procName, 1); for (i = 0; i < ns; i++) { numaGetIValue(natags, i, &tagval); sval = sarrayGetString(savals, i, 0); type = sarrayGetString(satypes, i, 0); numaGetIValue(nasizes, i, &size); if (strcmp(type, "char*") && strcmp(type, "l_uint8*")) L_WARNING("array type not char* or l_uint8*; ignore\n", procName); TIFFSetField(tif, tagval, size, sval); } } else { ns = 0; } /* The typical tags (3 args to TIFFSetField) are now written */ for (i = ns; i < n; i++) { numaGetIValue(natags, i, &tagval); sval = sarrayGetString(savals, i, 0); type = sarrayGetString(satypes, i, 0); if (!strcmp(type, "char*")) { TIFFSetField(tif, tagval, sval); } else if (!strcmp(type, "l_uint16")) { if (sscanf(sval, "%u", &uval) == 1) { TIFFSetField(tif, tagval, (l_uint16)uval); } else { fprintf(stderr, "val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", procName, 1); } } else if (!strcmp(type, "l_uint32")) { if (sscanf(sval, "%u", &uval) == 1) { TIFFSetField(tif, tagval, uval); } else { fprintf(stderr, "val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", procName, 1); } } else if (!strcmp(type, "l_int32")) { if (sscanf(sval, "%d", &val) == 1) { TIFFSetField(tif, tagval, val); } else { fprintf(stderr, "val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", procName, 1); } } else if (!strcmp(type, "l_float64")) { if (sscanf(sval, "%lf", &dval) == 1) { TIFFSetField(tif, tagval, dval); } else { fprintf(stderr, "val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", procName, 1); } } else if (!strcmp(type, "l_uint16-l_uint16")) { if (sscanf(sval, "%u-%u", &uval, &uval2) == 2) { TIFFSetField(tif, tagval, (l_uint16)uval, (l_uint16)uval2); } else { fprintf(stderr, "val %s not of type %s\n", sval, type); return ERROR_INT("custom tag(s) not written", procName, 1); } } else { return ERROR_INT("unknown type; tag(s) not written", procName, 1); } } return 0; } /*--------------------------------------------------------------* * Reading and writing multipage tiff * *--------------------------------------------------------------*/ /* * pixaReadMultipageTiff() * * Input: filename (input tiff file) * Return: pixa (of page images), or null on error */ PIXA * pixaReadMultipageTiff(const char *filename) { l_int32 i, npages; FILE *fp; PIX *pix; PIXA *pixa; PROCNAME("pixaReadMultipageTiff"); if (!filename) return (PIXA *)ERROR_PTR("filename not defined", procName, NULL); if ((fp = fopenReadStream(filename)) == NULL) return (PIXA *)ERROR_PTR("stream not opened", procName, NULL); if (fileFormatIsTiff(fp)) { tiffGetCount(fp, &npages); L_INFO(" Tiff: %d pages\n", procName, npages); } else { return (PIXA *)ERROR_PTR("file not tiff", procName, NULL); } fclose(fp); pixa = pixaCreate(npages); for (i = 0; i < npages; i++) { pix = pixReadTiff(filename, i); if (!pix) { L_WARNING("pix not read for page %d\n", procName, i); continue; } pixaAddPix(pixa, pix, L_INSERT); } return pixa; } /* * writeMultipageTiff() * * Input: dirin (input directory) * substr ( substring filter on filenames; can be NULL) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) This writes a set of image files in a directory out * as a multipage tiff file. The images can be in any * initial file format. * (2) Images with a colormap have the colormap removed before * re-encoding as tiff. * (3) All images are encoded losslessly. Those with 1 bpp are * encoded 'g4'. The rest are encoded as 'zip' (flate encoding). * Because it is lossless, this is an expensive method for * saving most rgb images. */ l_int32 writeMultipageTiff(const char *dirin, const char *substr, const char *fileout) { SARRAY *sa; PROCNAME("writeMultipageTiff"); if (!dirin) return ERROR_INT("dirin not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); /* Get all filtered and sorted full pathnames. */ sa = getSortedPathnamesInDirectory(dirin, substr, 0, 0); /* Generate the tiff file */ writeMultipageTiffSA(sa, fileout); sarrayDestroy(&sa); return 0; } /* * writeMultipageTiffSA() * * Input: sarray (of full path names) * fileout (output ps file) * Return: 0 if OK, 1 on error * * Notes: * (1) See writeMultipageTiff() */ l_int32 writeMultipageTiffSA(SARRAY *sa, const char *fileout) { char *fname; const char *op; l_int32 i, nfiles, firstfile, format; PIX *pix, *pixt; PROCNAME("writeMultipageTiffSA"); if (!sa) return ERROR_INT("sa not defined", procName, 1); if (!fileout) return ERROR_INT("fileout not defined", procName, 1); nfiles = sarrayGetCount(sa); firstfile = TRUE; for (i = 0; i < nfiles; i++) { op = (firstfile) ? "w" : "a"; fname = sarrayGetString(sa, i, L_NOCOPY); findFileFormat(fname, &format); if (format == IFF_UNKNOWN) { L_INFO("format of %s not known\n", procName, fname); continue; } if ((pix = pixRead(fname)) == NULL) { L_WARNING("pix not made for file: %s\n", procName, fname); continue; } if (pixGetDepth(pix) == 1) { pixWriteTiff(fileout, pix, IFF_TIFF_G4, op); } else { if (pixGetColormap(pix)) { pixt = pixRemoveColormap(pix, REMOVE_CMAP_BASED_ON_SRC); } else { pixt = pixClone(pix); } pixWriteTiff(fileout, pixt, IFF_TIFF_ZIP, op); pixDestroy(&pixt); } firstfile = FALSE; pixDestroy(&pix); } return 0; } /*--------------------------------------------------------------* * Print info to stream * *--------------------------------------------------------------*/ /* * fprintTiffInfo() * * Input: stream (for output of tag data) * tiffile (input) * Return: 0 if OK; 1 on error */ l_int32 fprintTiffInfo(FILE *fpout, const char *tiffile) { TIFF *tif; PROCNAME("fprintTiffInfo"); if (!tiffile) return ERROR_INT("tiffile not defined", procName, 1); if (!fpout) return ERROR_INT("stream out not defined", procName, 1); if ((tif = openTiff(tiffile, "rb")) == NULL) return ERROR_INT("tif not open for read", procName, 1); TIFFPrintDirectory(tif, fpout, 0); TIFFClose(tif); return 0; } /*--------------------------------------------------------------* * Get page count * *--------------------------------------------------------------*/ /* * tiffGetCount() * * Input: stream (opened for read) * &n ( number of images) * Return: 0 if OK; 1 on error */ l_int32 tiffGetCount(FILE *fp, l_int32 *pn) { l_int32 i; TIFF *tif; PROCNAME("tiffGetCount"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (!pn) return ERROR_INT("&n not defined", procName, 1); *pn = 0; if ((tif = fopenTiff(fp, "rb")) == NULL) return ERROR_INT("tif not open for read", procName, 1); for (i = 1; i < MAX_PAGES_IN_TIFF_FILE; i++) { if (TIFFReadDirectory(tif) == 0) break; } *pn = i; TIFFCleanup(tif); return 0; } /*--------------------------------------------------------------* * Get resolution from tif * *--------------------------------------------------------------*/ /* * getTiffResolution() * * Input: stream (opened for read) * &xres, &yres ( resolution in ppi) * Return: 0 if OK; 1 on error * * Notes: * (1) If neither resolution field is set, this is not an error; * the returned resolution values are 0 (designating 'unknown'). */ l_int32 getTiffResolution(FILE *fp, l_int32 *pxres, l_int32 *pyres) { TIFF *tif; PROCNAME("getTiffResolution"); if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", procName, 1); *pxres = *pyres = 0; if (!fp) return ERROR_INT("stream not opened", procName, 1); if ((tif = fopenTiff(fp, "rb")) == NULL) return ERROR_INT("tif not open for read", procName, 1); getTiffStreamResolution(tif, pxres, pyres); TIFFCleanup(tif); return 0; } /* * getTiffStreamResolution() * * Input: tiff stream (opened for read) * &xres, &yres ( resolution in ppi) * Return: 0 if OK; 1 on error * * Notes: * (1) If neither resolution field is set, this is not an error; * the returned resolution values are 0 (designating 'unknown'). */ static l_int32 getTiffStreamResolution(TIFF *tif, l_int32 *pxres, l_int32 *pyres) { l_uint16 resunit; l_int32 foundxres, foundyres; l_float32 fxres, fyres; PROCNAME("getTiffStreamResolution"); if (!tif) return ERROR_INT("tif not opened", procName, 1); if (!pxres || !pyres) return ERROR_INT("&xres and &yres not both defined", procName, 1); *pxres = *pyres = 0; TIFFGetFieldDefaulted(tif, TIFFTAG_RESOLUTIONUNIT, &resunit); foundxres = TIFFGetField(tif, TIFFTAG_XRESOLUTION, &fxres); foundyres = TIFFGetField(tif, TIFFTAG_YRESOLUTION, &fyres); if (!foundxres && !foundyres) return 1; if (!foundxres && foundyres) fxres = fyres; else if (foundxres && !foundyres) fyres = fxres; if (resunit == RESUNIT_CENTIMETER) { /* convert to ppi */ *pxres = (l_int32)(2.54 * fxres + 0.5); *pyres = (l_int32)(2.54 * fyres + 0.5); } else { *pxres = (l_int32)fxres; *pyres = (l_int32)fyres; } return 0; } /*--------------------------------------------------------------* * Get some tiff header information * *--------------------------------------------------------------*/ /*! * readHeaderTiff() * * Input: filename * n (page image number: 0-based) * &width () * &height () * &bps ( bits per sample -- 1, 2, 4 or 8) * &spp (; samples per pixel -- 1 or 3) * &res (; resolution in x dir; NULL to ignore) * &cmap (; colormap exists; input NULL to ignore) * &format (; tiff format; input NULL to ignore) * Return: 0 if OK, 1 on error * * Notes: * (1) If there is a colormap, cmap is returned as 1; else 0. * (2) If @n is equal to or greater than the number of images, returns 1. */ l_int32 readHeaderTiff(const char *filename, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_int32 ret; FILE *fp; PROCNAME("readHeaderTiff"); if (!filename) return ERROR_INT("filename not defined", procName, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not all defined", procName, 1); *pwidth = *pheight = *pbps = *pspp = 0; if (pres) *pres = 0; if (pcmap) *pcmap = 0; if ((fp = fopenReadStream(filename)) == NULL) return ERROR_INT("image file not found", procName, 1); ret = freadHeaderTiff(fp, n, pwidth, pheight, pbps, pspp, pres, pcmap, pformat); fclose(fp); return ret; } /*! * freadHeaderTiff() * * Input: stream * n (page image number: 0-based) * &width () * &height () * &bps ( bits per sample -- 1, 2, 4 or 8) * &spp (; samples per pixel -- 1 or 3) * &res (; resolution in x dir; NULL to ignore) * &cmap (; colormap exists; input NULL to ignore) * &format (; tiff format; input NULL to ignore) * Return: 0 if OK, 1 on error * * Notes: * (1) If there is a colormap, cmap is returned as 1; else 0. * (2) If @n is equal to or greater than the number of images, returns 1. */ l_int32 freadHeaderTiff(FILE *fp, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_int32 i, ret, format; TIFF *tif; PROCNAME("freadHeaderTiff"); if (!fp) return ERROR_INT("stream not defined", procName, 1); if (n < 0) return ERROR_INT("image index must be >= 0", procName, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not all defined", procName, 1); *pwidth = *pheight = *pbps = *pspp = 0; if (pres) *pres = 0; if (pcmap) *pcmap = 0; if (pformat) *pformat = 0; findFileFormatStream(fp, &format); if (format != IFF_TIFF && format != IFF_TIFF_G3 && format != IFF_TIFF_G4 && format != IFF_TIFF_RLE && format != IFF_TIFF_PACKBITS && format != IFF_TIFF_LZW && format != IFF_TIFF_ZIP) return ERROR_INT("file not tiff format", procName, 1); if ((tif = fopenTiff(fp, "rb")) == NULL) return ERROR_INT("tif not open for read", procName, 1); for (i = 0; i < n; i++) { if (TIFFReadDirectory(tif) == 0) return ERROR_INT("image n not found in file", procName, 1); } ret = tiffReadHeaderTiff(tif, pwidth, pheight, pbps, pspp, pres, pcmap, pformat); TIFFCleanup(tif); return ret; } /*! * readHeaderMemTiff() * * Input: cdata (const; tiff-encoded) * size (size of data) * n (page image number: 0-based) * &width () * &height () * &bps ( bits per sample -- 1, 2, 4 or 8) * &spp (; samples per pixel -- 1 or 3) * &res (; resolution in x dir; NULL to ignore) * &cmap (; colormap exists; input NULL to ignore) * &format (; tiff format; input NULL to ignore) * Return: 0 if OK, 1 on error * * Notes: * (1) Use TIFFClose(); TIFFCleanup() doesn't free internal memstream. */ l_int32 readHeaderMemTiff(const l_uint8 *cdata, size_t size, l_int32 n, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_uint8 *data; l_int32 i, ret; TIFF *tif; PROCNAME("readHeaderMemTiff"); if (!cdata) return ERROR_INT("cdata not defined", procName, 1); if (!pwidth || !pheight || !pbps || !pspp) return ERROR_INT("input ptr(s) not all defined", procName, 1); *pwidth = *pheight = *pbps = *pspp = 0; if (pres) *pres = 0; if (pcmap) *pcmap = 0; if (pformat) *pformat = 0; /* Open a tiff stream to memory */ data = (l_uint8 *)cdata; /* we're really not going to change this */ if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) return ERROR_INT("tiff stream not opened", procName, 1); for (i = 0; i < n; i++) { if (TIFFReadDirectory(tif) == 0) { TIFFClose(tif); return ERROR_INT("image n not found in file", procName, 1); } } ret = tiffReadHeaderTiff(tif, pwidth, pheight, pbps, pspp, pres, pcmap, pformat); TIFFClose(tif); return ret; } /*! * tiffReadHeaderTiff() * * Input: tif * &width () * &height () * &bps ( bits per sample -- 1, 2, 4 or 8) * &spp (; samples per pixel -- 1 or 3) * &res (; resolution in x dir; NULL to ignore) * &cmap (; cmap exists; input NULL to ignore) * &format (; tiff format; input NULL to ignore) * Return: 0 if OK, 1 on error */ static l_int32 tiffReadHeaderTiff(TIFF *tif, l_int32 *pwidth, l_int32 *pheight, l_int32 *pbps, l_int32 *pspp, l_int32 *pres, l_int32 *pcmap, l_int32 *pformat) { l_uint16 tiffcomp; l_uint16 bps, spp; l_uint16 *rmap, *gmap, *bmap; l_int32 xres, yres; l_uint32 w, h; PROCNAME("tiffReadHeaderTiff"); if (!tif) return ERROR_INT("tif not opened", procName, 1); TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); *pwidth = w; TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); *pheight = h; TIFFGetFieldDefaulted(tif, TIFFTAG_BITSPERSAMPLE, &bps); *pbps = bps; TIFFGetFieldDefaulted(tif, TIFFTAG_SAMPLESPERPIXEL, &spp); *pspp = spp; if (pres) { *pres = 300; /* default ppi */ if (getTiffStreamResolution(tif, &xres, &yres) == 0) *pres = (l_int32)xres; } if (pcmap) { *pcmap = 0; if (TIFFGetField(tif, TIFFTAG_COLORMAP, &rmap, &gmap, &bmap)) *pcmap = 1; } if (pformat) { TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); *pformat = getTiffCompressedFormat(tiffcomp); } return 0; } /*! * findTiffCompression() * * Input: stream (must be rewound to BOF) * &comptype ( compression type) * Return: 0 if OK, 1 on error * * Notes: * (1) The returned compression type is that defined in * the enum in imageio.h. It is not the tiff flag value. * (2) The compression type is initialized to IFF_UNKNOWN. * If it is not one of the specified types, the returned * type is IFF_TIFF, which indicates no compression. * (3) When this function is called, the stream must be at BOF. * If the opened stream is to be used again to read the * file, it must be rewound to BOF after calling this function. */ l_int32 findTiffCompression(FILE *fp, l_int32 *pcomptype) { l_uint16 tiffcomp; TIFF *tif; PROCNAME("findTiffCompression"); if (!pcomptype) return ERROR_INT("&comptype not defined", procName, 1); *pcomptype = IFF_UNKNOWN; /* init */ if (!fp) return ERROR_INT("stream not defined", procName, 1); if ((tif = fopenTiff(fp, "rb")) == NULL) return ERROR_INT("tif not opened", procName, 1); TIFFGetFieldDefaulted(tif, TIFFTAG_COMPRESSION, &tiffcomp); *pcomptype = getTiffCompressedFormat(tiffcomp); TIFFCleanup(tif); return 0; } /*! * getTiffCompressedFormat() * * Input: tiffcomp (defined in tiff.h) * Return: compression format (defined in imageio.h) * * Notes: * (1) The input must be the actual tiff compression type * returned by a tiff library call. It should always be * a valid tiff type. * (2) The return type is defined in the enum in imageio.h. */ static l_int32 getTiffCompressedFormat(l_uint16 tiffcomp) { l_int32 comptype; switch (tiffcomp) { case COMPRESSION_CCITTFAX4: comptype = IFF_TIFF_G4; break; case COMPRESSION_CCITTFAX3: comptype = IFF_TIFF_G3; break; case COMPRESSION_CCITTRLE: comptype = IFF_TIFF_RLE; break; case COMPRESSION_PACKBITS: comptype = IFF_TIFF_PACKBITS; break; case COMPRESSION_LZW: comptype = IFF_TIFF_LZW; break; case COMPRESSION_ADOBE_DEFLATE: comptype = IFF_TIFF_ZIP; break; default: comptype = IFF_TIFF; break; } return comptype; } /*--------------------------------------------------------------* * Extraction of tiff g4 data * *--------------------------------------------------------------*/ /*! * extractG4DataFromFile() * * Input: filein * &data ( binary data of ccitt g4 encoded stream) * &nbytes ( size of binary data) * &w ( image width) * &h ( image height) * &minisblack ( boolean) * Return: 0 if OK, 1 on error */ l_int32 extractG4DataFromFile(const char *filein, l_uint8 **pdata, size_t *pnbytes, l_int32 *pw, l_int32 *ph, l_int32 *pminisblack) { l_uint8 *inarray, *data; l_uint16 minisblack, comptype; /* accessors require l_uint16 */ l_int32 istiff; l_uint32 w, h, rowsperstrip; /* accessors require l_uint32 */ l_uint32 diroff; size_t fbytes, nbytes; FILE *fpin; TIFF *tif; PROCNAME("extractG4DataFromFile"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); if (!pnbytes) return ERROR_INT("&nbytes not defined", procName, 1); if (!pw && !ph && !pminisblack) return ERROR_INT("no output data requested", procName, 1); *pdata = NULL; *pnbytes = 0; if ((fpin = fopenReadStream(filein)) == NULL) return ERROR_INT("stream not opened to file", procName, 1); istiff = fileFormatIsTiff(fpin); fclose(fpin); if (!istiff) return ERROR_INT("filein not tiff", procName, 1); if ((inarray = l_binaryRead(filein, &fbytes)) == NULL) return ERROR_INT("inarray not made", procName, 1); /* Get metadata about the image */ if ((tif = openTiff(filein, "rb")) == NULL) return ERROR_INT("tif not open for read", procName, 1); TIFFGetField(tif, TIFFTAG_COMPRESSION, &comptype); if (comptype != COMPRESSION_CCITTFAX4) { FREE(inarray); TIFFClose(tif); return ERROR_INT("filein is not g4 compressed", procName, 1); } TIFFGetField(tif, TIFFTAG_IMAGEWIDTH, &w); TIFFGetField(tif, TIFFTAG_IMAGELENGTH, &h); TIFFGetField(tif, TIFFTAG_ROWSPERSTRIP, &rowsperstrip); if (h != rowsperstrip) L_WARNING("more than 1 strip\n", procName); TIFFGetField(tif, TIFFTAG_PHOTOMETRIC, &minisblack); /* for 1 bpp */ /* TIFFPrintDirectory(tif, stderr, 0); */ TIFFClose(tif); if (pw) *pw = (l_int32)w; if (ph) *ph = (l_int32)h; if (pminisblack) *pminisblack = (l_int32)minisblack; /* The header has 8 bytes: the first 2 are the magic number, * the next 2 are the version, and the last 4 are the * offset to the first directory. That's what we want here. * We have to test the byte order before decoding 4 bytes! */ if (inarray[0] == 0x4d) { /* big-endian */ diroff = (inarray[4] << 24) | (inarray[5] << 16) | (inarray[6] << 8) | inarray[7]; } else { /* inarray[0] == 0x49 : little-endian */ diroff = (inarray[7] << 24) | (inarray[6] << 16) | (inarray[5] << 8) | inarray[4]; } /* fprintf(stderr, " diroff = %d, %x\n", diroff, diroff); */ /* Extract the ccittg4 encoded data from the tiff file. * We skip the 8 byte header and take nbytes of data, * up to the beginning of the directory (at diroff) */ nbytes = diroff - 8; *pnbytes = nbytes; if ((data = (l_uint8 *)CALLOC(nbytes, sizeof(l_uint8))) == NULL) { FREE(inarray); return ERROR_INT("data not allocated", procName, 1); } *pdata = data; memcpy(data, inarray + 8, nbytes); FREE(inarray); return 0; } /*--------------------------------------------------------------* * Open tiff stream from file stream * *--------------------------------------------------------------*/ /*! * fopenTiff() * * Input: stream * modestring ("r", "w", ...) * Return: tiff (data structure, opened for a file descriptor) * * Notes: * (1) Why is this here? Leffler did not provide a function that * takes a stream and gives a TIFF. He only gave one that * generates a TIFF starting with a file descriptor. So we * need to make it here, because it is useful to have functions * that take a stream as input. * (2) Requires lseek to rewind to BOF; fseek won't hack it. * (3) When linking with windows, suggest you use tif_unix.c * instead of tif_win32.c, because it has been reported that * the file descriptor returned from fileno() does not work * with TIFFFdOpen() in tif_win32.c. (win32 requires a * "handle", which is an integer returned by _get_osfhandle(fd).) */ static TIFF * fopenTiff(FILE *fp, const char *modestring) { l_int32 fd; PROCNAME("fopenTiff"); if (!fp) return (TIFF *)ERROR_PTR("stream not opened", procName, NULL); if (!modestring) return (TIFF *)ERROR_PTR("modestring not defined", procName, NULL); if ((fd = fileno(fp)) < 0) return (TIFF *)ERROR_PTR("invalid file descriptor", procName, NULL); lseek(fd, 0, SEEK_SET); return TIFFFdOpen(fd, "TIFFstream", modestring); } /*--------------------------------------------------------------* * Wrapper for TIFFOpen * *--------------------------------------------------------------*/ /*! * openTiff() * * Input: filename * modestring ("r", "w", ...) * Return: tiff (data structure) * * Notes: * (1) This handles multi-platform file naming. */ static TIFF * openTiff(const char *filename, const char *modestring) { char *fname; TIFF *tif; PROCNAME("openTiff"); if (!filename) return (TIFF *)ERROR_PTR("filename not defined", procName, NULL); if (!modestring) return (TIFF *)ERROR_PTR("modestring not defined", procName, NULL); fname = genPathname(filename, NULL); tif = TIFFOpen(fname, modestring); FREE(fname); return tif; } /*----------------------------------------------------------------------* * Memory I/O: reading memory --> pix and writing pix --> memory * *----------------------------------------------------------------------*/ /* It would be nice to use open_memstream() and fmemopen() * for writing and reading to memory, rsp. These functions manage * memory for writes and reads that use a file streams interface. * Unfortunately, the tiff library only has an interface for reading * and writing to file descriptors, not to file streams. The tiff * library procedure is to open a "tiff stream" and read/write to it. * The library provides a client interface for managing the I/O * from memory, which requires seven callbacks. See the TIFFClientOpen * man page for callback signatures. Adam Langley provided the code * to do this. */ /* * The L_Memstram @buffer has different functions in writing and reading. * * * In reading, it is assigned to the data and read from as * the tiff library uncompresses the data and generates the pix. * The @offset points to the current read position in the data, * and the @hw always gives the number of bytes of data. * The @outdata and @outsize ptrs are not used. * When finished, tiffCloseCallback() simply frees the L_Memstream. * * * In writing, it accepts the data that the tiff library * produces when a pix is compressed. the buffer points to a * malloced area of @bufsize bytes. The current writing position * in the buffer is @offset and the most ever written is @hw. * The buffer is expanded as necessary. When finished, * tiffCloseCallback() assigns the @outdata and @outsize ptrs * to the @buffer and @bufsize results, and frees the L_Memstream. */ struct L_Memstream { l_uint8 *buffer; /* expands to hold data when written to; */ /* fixed size when read from. */ size_t bufsize; /* current size allocated when written to; */ /* fixed size of input data when read from. */ size_t offset; /* byte offset from beginning of buffer. */ size_t hw; /* high-water mark; max bytes in buffer. */ l_uint8 **poutdata; /* input param for writing; data goes here. */ size_t *poutsize; /* input param for writing; data size goes here. */ }; typedef struct L_Memstream L_MEMSTREAM; /* These are static functions for memory I/O */ static L_MEMSTREAM *memstreamCreateForRead(l_uint8 *indata, size_t pinsize); static L_MEMSTREAM *memstreamCreateForWrite(l_uint8 **poutdata, size_t *poutsize); static tsize_t tiffReadCallback(thandle_t handle, tdata_t data, tsize_t length); static tsize_t tiffWriteCallback(thandle_t handle, tdata_t data, tsize_t length); static toff_t tiffSeekCallback(thandle_t handle, toff_t offset, l_int32 whence); static l_int32 tiffCloseCallback(thandle_t handle); static toff_t tiffSizeCallback(thandle_t handle); static l_int32 tiffMapCallback(thandle_t handle, tdata_t *data, toff_t *length); static void tiffUnmapCallback(thandle_t handle, tdata_t data, toff_t length); static L_MEMSTREAM * memstreamCreateForRead(l_uint8 *indata, size_t insize) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)CALLOC(1, sizeof(L_MEMSTREAM)); mstream->buffer = indata; /* handle to input data array */ mstream->bufsize = insize; /* amount of input data */ mstream->hw = insize; /* high-water mark fixed at input data size */ mstream->offset = 0; /* offset always starts at 0 */ return mstream; } static L_MEMSTREAM * memstreamCreateForWrite(l_uint8 **poutdata, size_t *poutsize) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)CALLOC(1, sizeof(L_MEMSTREAM)); mstream->buffer = (l_uint8 *)CALLOC(8 * 1024, 1); mstream->bufsize = 8 * 1024; mstream->poutdata = poutdata; /* used only at end of write */ mstream->poutsize = poutsize; /* ditto */ mstream->hw = mstream->offset = 0; return mstream; } static tsize_t tiffReadCallback(thandle_t handle, tdata_t data, tsize_t length) { L_MEMSTREAM *mstream; size_t amount; mstream = (L_MEMSTREAM *)handle; amount = L_MIN((size_t)length, mstream->hw - mstream->offset); memcpy(data, mstream->buffer + mstream->offset, amount); mstream->offset += amount; return amount; } static tsize_t tiffWriteCallback(thandle_t handle, tdata_t data, tsize_t length) { L_MEMSTREAM *mstream; size_t newsize; /* reallocNew() uses calloc to initialize the array. * If malloc is used instead, for some of the encoding methods, * not all the data in 'bufsize' bytes in the buffer will * have been initialized by the end of the compression. */ mstream = (L_MEMSTREAM *)handle; if (mstream->offset + length > mstream->bufsize) { newsize = 2 * (mstream->offset + length); mstream->buffer = (l_uint8 *)reallocNew((void **)&mstream->buffer, mstream->hw, newsize); mstream->bufsize = newsize; } memcpy(mstream->buffer + mstream->offset, data, length); mstream->offset += length; mstream->hw = L_MAX(mstream->offset, mstream->hw); return length; } static toff_t tiffSeekCallback(thandle_t handle, toff_t offset, l_int32 whence) { L_MEMSTREAM *mstream; PROCNAME("tiffSeekCallback"); mstream = (L_MEMSTREAM *)handle; switch (whence) { case SEEK_SET: /* fprintf(stderr, "seek_set: offset = %d\n", offset); */ mstream->offset = offset; break; case SEEK_CUR: /* fprintf(stderr, "seek_cur: offset = %d\n", offset); */ mstream->offset += offset; break; case SEEK_END: /* fprintf(stderr, "seek end: hw = %d, offset = %d\n", mstream->hw, offset); */ mstream->offset = mstream->hw - offset; /* offset >= 0 */ break; default: return (toff_t)ERROR_INT("bad whence value", procName, mstream->offset); } return mstream->offset; } static l_int32 tiffCloseCallback(thandle_t handle) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)handle; if (mstream->poutdata) { /* writing: save the output data */ *mstream->poutdata = mstream->buffer; *mstream->poutsize = mstream->hw; } FREE(mstream); /* never free the buffer! */ return 0; } static toff_t tiffSizeCallback(thandle_t handle) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)handle; return mstream->hw; } static l_int32 tiffMapCallback(thandle_t handle, tdata_t *data, toff_t *length) { L_MEMSTREAM *mstream; mstream = (L_MEMSTREAM *)handle; *data = mstream->buffer; *length = mstream->hw; return 0; } static void tiffUnmapCallback(thandle_t handle, tdata_t data, toff_t length) { return; } /*! * fopenTiffMemstream() * * Input: filename (for error output; can be "") * operation ("w" for write, "r" for read) * &data ( written data) * &datasize ( size of written data) * Return: tiff (data structure, opened for write to memory) * * Notes: * (1) This wraps up a number of callbacks for either: * * reading from tiff in memory buffer --> pix * * writing from pix --> tiff in memory buffer * (2) After use, the memstream is automatically destroyed when * TIFFClose() is called. TIFFCleanup() doesn't free the memstream. */ static TIFF * fopenTiffMemstream(const char *filename, const char *operation, l_uint8 **pdata, size_t *pdatasize) { L_MEMSTREAM *mstream; PROCNAME("fopenTiffMemstream"); if (!filename) return (TIFF *)ERROR_PTR("filename not defined", procName, NULL); if (!operation) return (TIFF *)ERROR_PTR("operation not defined", procName, NULL); if (!pdata) return (TIFF *)ERROR_PTR("&data not defined", procName, NULL); if (!pdatasize) return (TIFF *)ERROR_PTR("&datasize not defined", procName, NULL); if (!strcmp(operation, "r") && !strcmp(operation, "w")) return (TIFF *)ERROR_PTR("operation not 'r' or 'w'}", procName, NULL); if (!strcmp(operation, "r")) mstream = memstreamCreateForRead(*pdata, *pdatasize); else mstream = memstreamCreateForWrite(pdata, pdatasize); return TIFFClientOpen(filename, operation, mstream, tiffReadCallback, tiffWriteCallback, tiffSeekCallback, tiffCloseCallback, tiffSizeCallback, tiffMapCallback, tiffUnmapCallback); } /*! * pixReadMemTiff() * * Input: data (const; tiff-encoded) * datasize (size of data) * n (page image number: 0-based) * Return: pix, or null on error * * Notes: * (1) This is a version of pixReadTiff(), where the data is read * from a memory buffer and uncompressed. * (2) Use TIFFClose(); TIFFCleanup() doesn't free internal memstream. */ PIX * pixReadMemTiff(const l_uint8 *cdata, size_t size, l_int32 n) { l_uint8 *data; l_int32 i, pagefound; PIX *pix; TIFF *tif; PROCNAME("pixReadMemTiff"); if (!cdata) return (PIX *)ERROR_PTR("cdata not defined", procName, NULL); data = (l_uint8 *)cdata; /* we're really not going to change this */ if ((tif = fopenTiffMemstream("tifferror", "r", &data, &size)) == NULL) return (PIX *)ERROR_PTR("tiff stream not opened", procName, NULL); pagefound = FALSE; pix = NULL; for (i = 0; i < MAX_PAGES_IN_TIFF_FILE; i++) { if (i == n) { pagefound = TRUE; if ((pix = pixReadFromTiffStream(tif)) == NULL) { TIFFClose(tif); return (PIX *)ERROR_PTR("pix not read", procName, NULL); } pixSetInputFormat(pix, IFF_TIFF); break; } if (TIFFReadDirectory(tif) == 0) break; } if (pagefound == FALSE) L_WARNING("tiff page %d not found\n", procName, n); TIFFClose(tif); return pix; } /*! * pixWriteMemTiff() * * Input: &data ( data of tiff compressed image) * &size ( size of returned data) * pix * comptype (IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP) * Return: 0 if OK, 1 on error * * Usage: * (1) See pixWriteTiff(). This version writes to * memory instead of to a file. */ l_int32 pixWriteMemTiff(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype) { return pixWriteMemTiffCustom(pdata, psize, pix, comptype, NULL, NULL, NULL, NULL); } /*! * pixWriteMemTiffCustom() * * Input: &data ( data of tiff compressed image) * &size ( size of returned data) * pix * comptype (IFF_TIFF, IFF_TIFF_RLE, IFF_TIFF_PACKBITS, * IFF_TIFF_G3, IFF_TIFF_G4, * IFF_TIFF_LZW, IFF_TIFF_ZIP) * natags ( NUMA of custom tiff tags) * savals ( SARRAY of values) * satypes ( SARRAY of types) * nasizes ( NUMA of sizes) * Return: 0 if OK, 1 on error * * Usage: * (1) See pixWriteTiffCustom(). This version writes to * memory instead of to a file. * (2) Use TIFFClose(); TIFFCleanup() doesn't free internal memstream. */ l_int32 pixWriteMemTiffCustom(l_uint8 **pdata, size_t *psize, PIX *pix, l_int32 comptype, NUMA *natags, SARRAY *savals, SARRAY *satypes, NUMA *nasizes) { l_int32 ret; TIFF *tif; PROCNAME("pixWriteMemTiffCustom"); if (!pdata) return ERROR_INT("&data not defined", procName, 1); if (!psize) return ERROR_INT("&size not defined", procName, 1); if (!pix) return ERROR_INT("&pix not defined", procName, 1); if (pixGetDepth(pix) != 1 && comptype != IFF_TIFF && comptype != IFF_TIFF_LZW && comptype != IFF_TIFF_ZIP) { L_WARNING("invalid compression type for bpp > 1\n", procName); comptype = IFF_TIFF_ZIP; } if ((tif = fopenTiffMemstream("tifferror", "w", pdata, psize)) == NULL) return ERROR_INT("tiff stream not opened", procName, 1); ret = pixWriteToTiffStream(tif, pix, comptype, natags, savals, satypes, nasizes); TIFFClose(tif); return ret; } /* --------------------------------------------*/ #endif /* HAVE_LIBTIFF */ /* --------------------------------------------*/ leptonica-1.70/src/ccbord.h0000644000175000017500000001235512270566047013720 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_CCBORD_H #define LEPTONICA_CCBORD_H /* * ccbord.h * * CCBord: represents a single connected component * CCBorda: an array of CCBord */ /* Use in ccbaStepChainsToPixCoords() */ enum { CCB_LOCAL_COORDS = 1, CCB_GLOBAL_COORDS = 2 }; /* Use in ccbaGenerateSPGlobalLocs() */ enum { CCB_SAVE_ALL_PTS = 1, CCB_SAVE_TURNING_PTS = 2 }; /* CCBord contains: * * (1) a minimally-clipped bitmap of the component (pix), * (2) a boxa consisting of: * for the primary component: * (xul, yul) pixel location in global coords * (w, h) of the bitmap * for the hole components: * (x, y) in relative coordinates in primary component * (w, h) of the hole border (which is 2 pixels * larger in each direction than the hole itself) * (3) a pta ('start') of the initial border pixel location for each * closed curve, all in relative coordinates of the primary * component. This is given for the primary component, * followed by the hole components, if any. * (4) a refcount of the ccbord; used internally when a ccbord * is accessed from a ccborda (array of ccbord) * (5) a ptaa for the chain code for the border in relative * coordinates, where the first pta is the exterior border * and all other pta are for interior borders (holes) * (6) a ptaa for the global pixel loc rendition of the border, * where the first pta is the exterior border and all other * pta are for interior borders (holes). * This is derived from the local or step chain code. * (7) a numaa for the chain code for the border as orientation * directions between successive border pixels, where * the first numa is the exterior border and all other * numa are for interior borders (holes). This is derived * from the local chain code. The 8 directions are 0 - 7. * (8) a pta for a single chain for each c.c., comprised of outer * and hole borders, plus cut paths between them, all in * local coords. * (9) a pta for a single chain for each c.c., comprised of outer * and hole borders, plus cut paths between them, all in * global coords. */ struct CCBord { struct Pix *pix; /* component bitmap (min size) */ struct Boxa *boxa; /* regions of each closed curve */ struct Pta *start; /* initial border pixel locations */ l_int32 refcount; /* number of handles; start at 1 */ struct Ptaa *local; /* ptaa of chain pixels (local) */ struct Ptaa *global; /* ptaa of chain pixels (global) */ struct Numaa *step; /* numaa of chain code (step dir) */ struct Pta *splocal; /* pta of single chain (local) */ struct Pta *spglobal; /* pta of single chain (global) */ }; typedef struct CCBord CCBORD; struct CCBorda { struct Pix *pix; /* input pix (may be null) */ l_int32 w; /* width of pix */ l_int32 h; /* height of pix */ l_int32 n; /* number of ccbord in ptr array */ l_int32 nalloc; /* number of ccbord ptrs allocated */ struct CCBord **ccb; /* ccb ptr array */ }; typedef struct CCBorda CCBORDA; #endif /* LEPTONICA_CCBORD_H */ leptonica-1.70/src/projective.c0000644000175000017500000007660712244227307014635 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * projective.c * * Projective (4 pt) image transformation using a sampled * (to nearest integer) transform on each dest point * PIX *pixProjectiveSampledPta() * PIX *pixProjectiveSampled() * * Projective (4 pt) image transformation using interpolation * (or area mapping) for anti-aliasing images that are * 2, 4, or 8 bpp gray, or colormapped, or 32 bpp RGB * PIX *pixProjectivePta() * PIX *pixProjective() * PIX *pixProjectivePtaColor() * PIX *pixProjectiveColor() * PIX *pixProjectivePtaGray() * PIX *pixProjectiveGray() * * Projective transform including alpha (blend) component * PIX *pixProjectivePtaWithAlpha() * * Projective coordinate transformation * l_int32 getProjectiveXformCoeffs() * l_int32 projectiveXformSampledPt() * l_int32 projectiveXformPt() * * A projective transform can be specified as a specific functional * mapping between 4 points in the source and 4 points in the dest. * It preserves straight lines, but is less stable than a bilinear * transform, because it contains a division by a quantity that * can get arbitrarily small.) * * We give both a projective coordinate transformation and * two projective image transformations. * * For the former, we ask for the coordinate value (x',y') * in the transformed space for any point (x,y) in the original * space. The coefficients of the transformation are found by * solving 8 simultaneous equations for the 8 coordinates of * the 4 points in src and dest. The transformation can then * be used to compute the associated image transform, by * computing, for each dest pixel, the relevant pixel(s) in * the source. This can be done either by taking the closest * src pixel to each transformed dest pixel ("sampling") or * by doing an interpolation and averaging over 4 source * pixels with appropriate weightings ("interpolated"). * * A typical application would be to remove keystoning * due to a projective transform in the imaging system. * * The projective transform is given by specifying two equations: * * x' = (ax + by + c) / (gx + hy + 1) * y' = (dx + ey + f) / (gx + hy + 1) * * where the eight coefficients have been computed from four * sets of these equations, each for two corresponding data pts. * In practice, for each point (x,y) in the dest image, this * equation is used to compute the corresponding point (x',y') * in the src. That computed point in the src is then used * to determine the dest value in one of two ways: * * - sampling: take the value of the src pixel in which this * point falls * - interpolation: take appropriate linear combinations of the * four src pixels that this dest pixel would * overlap, with the coefficients proportional * to the amount of overlap * * For small warp where there is little scale change, (e.g., * for rotation) area mapping is nearly equivalent to interpolation. * * Typical relative timing of pointwise transforms (sampled = 1.0): * 8 bpp: sampled 1.0 * interpolated 1.5 * 32 bpp: sampled 1.0 * interpolated 1.6 * Additionally, the computation time/pixel is nearly the same * for 8 bpp and 32 bpp, for both sampled and interpolated. */ #include #include #include "allheaders.h" extern l_float32 AlphaMaskBorderVals[2]; /*------------------------------------------------------------n * Sampled projective image transformation * *-------------------------------------------------------------*/ /*! * pixProjectiveSampledPta() * * Input: pixs (all depths) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary. * (2) Retains colormap, which you can do for a sampled transform.. * (3) No 3 of the 4 points may be collinear. * (4) For 8 and 32 bpp pix, better quality is obtained by the * somewhat slower pixProjectivePta(). See that * function for relative timings between sampled and interpolated. */ PIX * pixProjectiveSampledPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_float32 *vc; PIX *pixd; PROCNAME("pixProjectiveSampledPta"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad, ptas, &vc); pixd = pixProjectiveSampled(pixs, vc, incolor); FREE(vc); return pixd; } /*! * pixProjectiveSampled() * * Input: pixs (all depths) * vc (vector of 8 coefficients for projective transformation) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary. * (2) Retains colormap, which you can do for a sampled transform.. * (3) For 8 or 32 bpp, much better quality is obtained by the * somewhat slower pixProjective(). See that function * for relative timings between sampled and interpolated. */ PIX * pixProjectiveSampled(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex; l_uint32 val; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixProjectiveSampled"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32) return (PIX *)ERROR_PTR("depth not 1, 2, 4, 8 or 16", procName, NULL); /* Init all dest pixels to color to be brought in from outside */ pixd = pixCreateTemplate(pixs); if ((cmap = pixGetColormap(pixs)) != NULL) { if (incolor == L_BRING_IN_WHITE) color = 1; else color = 0; pixcmapAddBlackOrWhite(cmap, color, &cmapindex); pixSetAllArbitrary(pixd, cmapindex); } else { if ((d == 1 && incolor == L_BRING_IN_WHITE) || (d > 1 && incolor == L_BRING_IN_BLACK)) { pixClearAll(pixd); } else { pixSetAll(pixd); } } /* Scan over the dest pixels */ datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { projectiveXformSampledPt(vc, j, i, &x, &y); if (x < 0 || y < 0 || x >=w || y >= h) continue; lines = datas + y * wpls; if (d == 1) { val = GET_DATA_BIT(lines, x); SET_DATA_BIT_VAL(lined, j, val); } else if (d == 8) { val = GET_DATA_BYTE(lines, x); SET_DATA_BYTE(lined, j, val); } else if (d == 32) { lined[j] = lines[x]; } else if (d == 2) { val = GET_DATA_DIBIT(lines, x); SET_DATA_DIBIT(lined, j, val); } else if (d == 4) { val = GET_DATA_QBIT(lines, x); SET_DATA_QBIT(lined, j, val); } } } return pixd; } /*---------------------------------------------------------------------* * Interpolated projective image transformation * *---------------------------------------------------------------------*/ /*! * pixProjectivePta() * * Input: pixs (all depths; colormap ok) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary * (2) Removes any existing colormap, if necessary, before transforming */ PIX * pixProjectivePta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixProjectivePta"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (incolor != L_BRING_IN_WHITE && incolor != L_BRING_IN_BLACK) return (PIX *)ERROR_PTR("invalid incolor", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); if (pixGetDepth(pixs) == 1) return pixProjectiveSampledPta(pixs, ptad, ptas, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixProjectivePtaGray(pixt2, ptad, ptas, colorval); else /* d == 32 */ pixd = pixProjectivePtaColor(pixt2, ptad, ptas, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixProjective() * * Input: pixs (all depths; colormap ok) * vc (vector of 8 coefficients for projective transformation) * incolor (L_BRING_IN_WHITE, L_BRING_IN_BLACK) * Return: pixd, or null on error * * Notes: * (1) Brings in either black or white pixels from the boundary * (2) Removes any existing colormap, if necessary, before transforming */ PIX * pixProjective(PIX *pixs, l_float32 *vc, l_int32 incolor) { l_int32 d; l_uint32 colorval; PIX *pixt1, *pixt2, *pixd; PROCNAME("pixProjective"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); if (pixGetDepth(pixs) == 1) return pixProjectiveSampled(pixs, vc, incolor); /* Remove cmap if it exists, and unpack to 8 bpp if necessary */ pixt1 = pixRemoveColormap(pixs, REMOVE_CMAP_BASED_ON_SRC); d = pixGetDepth(pixt1); if (d < 8) pixt2 = pixConvertTo8(pixt1, FALSE); else pixt2 = pixClone(pixt1); d = pixGetDepth(pixt2); /* Compute actual color to bring in from edges */ colorval = 0; if (incolor == L_BRING_IN_WHITE) { if (d == 8) colorval = 255; else /* d == 32 */ colorval = 0xffffff00; } if (d == 8) pixd = pixProjectiveGray(pixt2, vc, colorval); else /* d == 32 */ pixd = pixProjectiveColor(pixt2, vc, colorval); pixDestroy(&pixt1); pixDestroy(&pixt2); return pixd; } /*! * pixProjectivePtaColor() * * Input: pixs (32 bpp) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error */ PIX * pixProjectivePtaColor(PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval) { l_float32 *vc; PIX *pixd; PROCNAME("pixProjectivePtaColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad, ptas, &vc); pixd = pixProjectiveColor(pixs, vc, colorval); FREE(vc); return pixd; } /*! * pixProjectiveColor() * * Input: pixs (32 bpp) * vc (vector of 8 coefficients for projective transformation) * colorval (e.g., 0 to bring in BLACK, 0xffffff00 for WHITE) * Return: pixd, or null on error */ PIX * pixProjectiveColor(PIX *pixs, l_float32 *vc, l_uint32 colorval) { l_int32 i, j, w, h, d, wpls, wpld; l_uint32 val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pix1, *pix2, *pixd; PROCNAME("pixProjectiveColor"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("pixs must be 32 bpp", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, colorval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ projectiveXformPt(vc, j, i, &x, &y); linearInterpolatePixelColor(datas, wpls, w, h, x, y, colorval, &val); *(lined + j) = val; } } /* If rgba, transform the pixs alpha channel and insert in pixd */ if (pixGetSpp(pixs) == 4) { pix1 = pixGetRGBComponent(pixs, L_ALPHA_CHANNEL); pix2 = pixProjectiveGray(pix1, vc, 255); /* bring in opaque */ pixSetRGBComponent(pixd, pix2, L_ALPHA_CHANNEL); pixDestroy(&pix1); pixDestroy(&pix2); } return pixd; } /*! * pixProjectivePtaGray() * * Input: pixs (8 bpp) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error */ PIX * pixProjectivePtaGray(PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval) { l_float32 *vc; PIX *pixd; PROCNAME("pixProjectivePtaGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (ptaGetCount(ptas) != 4) return (PIX *)ERROR_PTR("ptas count not 4", procName, NULL); if (ptaGetCount(ptad) != 4) return (PIX *)ERROR_PTR("ptad count not 4", procName, NULL); /* Get backwards transform from dest to src, and apply it */ getProjectiveXformCoeffs(ptad, ptas, &vc); pixd = pixProjectiveGray(pixs, vc, grayval); FREE(vc); return pixd; } /*! * pixProjectiveGray() * * Input: pixs (8 bpp) * vc (vector of 8 coefficients for projective transformation) * grayval (0 to bring in BLACK, 255 for WHITE) * Return: pixd, or null on error */ PIX * pixProjectiveGray(PIX *pixs, l_float32 *vc, l_uint8 grayval) { l_int32 i, j, w, h, wpls, wpld, val; l_uint32 *datas, *datad, *lined; l_float32 x, y; PIX *pixd; PROCNAME("pixProjectiveGray"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); if (!vc) return (PIX *)ERROR_PTR("vc not defined", procName, NULL); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); pixd = pixCreateTemplate(pixs); pixSetAllArbitrary(pixd, grayval); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Iterate over destination pixels */ for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { /* Compute float src pixel location corresponding to (i,j) */ projectiveXformPt(vc, j, i, &x, &y); linearInterpolatePixelGray(datas, wpls, w, h, x, y, grayval, &val); SET_DATA_BYTE(lined, j, val); } } return pixd; } /*---------------------------------------------------------------------------* * Projective transform including alpha (blend) component and gamma xform * *---------------------------------------------------------------------------*/ /*! * pixProjectivePtaWithAlpha() * * Input: pixs (32 bpp rgb) * ptad (4 pts of final coordinate space) * ptas (4 pts of initial coordinate space) * pixg ( 8 bpp, for alpha channel, can be null) * fract (between 0.0 and 1.0, with 0.0 fully transparent * and 1.0 fully opaque) * border (of pixels added to capture transformed source pixels) * Return: pixd, or null on error * * Notes: * (1) The alpha channel is transformed separately from pixs, * and aligns with it, being fully transparent outside the * boundary of the transformed pixs. For pixels that are fully * transparent, a blending function like pixBlendWithGrayMask() * will give zero weight to corresponding pixels in pixs. * (2) If pixg is NULL, it is generated as an alpha layer that is * partially opaque, using @fract. Otherwise, it is cropped * to pixs if required and @fract is ignored. The alpha channel * in pixs is never used. * (3) Colormaps are removed. * (4) When pixs is transformed, it doesn't matter what color is brought * in because the alpha channel will be transparent (0) there. * (5) To avoid losing source pixels in the destination, it may be * necessary to add a border to the source pix before doing * the projective transformation. This can be any non-negative * number. * (6) The input @ptad and @ptas are in a coordinate space before * the border is added. Internally, we compensate for this * before doing the projective transform on the image after * the border is added. * (7) The default setting for the border values in the alpha channel * is 0 (transparent) for the outermost ring of pixels and * (0.5 * fract * 255) for the second ring. When blended over * a second image, this * (a) shrinks the visible image to make a clean overlap edge * with an image below, and * (b) softens the edges by weakening the aliasing there. * Use l_setAlphaMaskBorder() to change these values. * (8) A subtle use of gamma correction is to remove gamma correction * before scaling and restore it afterwards. This is done * by sandwiching this function between a gamma/inverse-gamma * photometric transform: * pixt = pixGammaTRCWithAlpha(NULL, pixs, 1.0 / gamma, 0, 255); * pixd = pixProjectivePtaWithAlpha(pixt, ptad, ptas, * NULL, fract, border); * pixGammaTRCWithAlpha(pixd, pixd, gamma, 0, 255); * pixDestroy(&pixt); * This has the side-effect of producing artifacts in the very * dark regions. */ PIX * pixProjectivePtaWithAlpha(PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border) { l_int32 ws, hs, d; PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga; PTA *ptad2, *ptas2; PROCNAME("pixProjectivePtaWithAlpha"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &ws, &hs, &d); if (d != 32 && pixGetColormap(pixs) == NULL) return (PIX *)ERROR_PTR("pixs not cmapped or 32 bpp", procName, NULL); if (pixg && pixGetDepth(pixg) != 8) { L_WARNING("pixg not 8 bpp; using @fract transparent alpha\n", procName); pixg = NULL; } if (!pixg && (fract < 0.0 || fract > 1.0)) { L_WARNING("invalid fract; using 1.0 (fully transparent)\n", procName); fract = 1.0; } if (!pixg && fract == 0.0) L_WARNING("fully opaque alpha; image will not be blended\n", procName); if (!ptad) return (PIX *)ERROR_PTR("ptad not defined", procName, NULL); if (!ptas) return (PIX *)ERROR_PTR("ptas not defined", procName, NULL); /* Add border; the color doesn't matter */ pixb1 = pixAddBorder(pixs, border, 0); /* Transform the ptr arrays to work on the bordered image */ ptad2 = ptaTransform(ptad, border, border, 1.0, 1.0); ptas2 = ptaTransform(ptas, border, border, 1.0, 1.0); /* Do separate projective transform of rgb channels of pixs * and of pixg */ pixd = pixProjectivePtaColor(pixb1, ptad2, ptas2, 0); if (!pixg) { pixg2 = pixCreate(ws, hs, 8); if (fract == 1.0) pixSetAll(pixg2); else pixSetAllArbitrary(pixg2, (l_int32)(255.0 * fract)); } else { pixg2 = pixResizeToMatch(pixg, NULL, ws, hs); } if (ws > 10 && hs > 10) { /* see note 7 */ pixSetBorderRingVal(pixg2, 1, (l_int32)(255.0 * fract * AlphaMaskBorderVals[0])); pixSetBorderRingVal(pixg2, 2, (l_int32)(255.0 * fract * AlphaMaskBorderVals[1])); } pixb2 = pixAddBorder(pixg2, border, 0); /* must be black border */ pixga = pixProjectivePtaGray(pixb2, ptad2, ptas2, 0); pixSetRGBComponent(pixd, pixga, L_ALPHA_CHANNEL); pixSetSpp(pixd, 4); pixDestroy(&pixg2); pixDestroy(&pixb1); pixDestroy(&pixb2); pixDestroy(&pixga); ptaDestroy(&ptad2); ptaDestroy(&ptas2); return pixd; } /*-------------------------------------------------------------* * Projective coordinate transformation * *-------------------------------------------------------------*/ /*! * getProjectiveXformCoeffs() * * Input: ptas (source 4 points; unprimed) * ptad (transformed 4 points; primed) * &vc ( vector of coefficients of transform) * Return: 0 if OK; 1 on error * * We have a set of 8 equations, describing the projective * transformation that takes 4 points (ptas) into 4 other * points (ptad). These equations are: * * x1' = (c[0]*x1 + c[1]*y1 + c[2]) / (c[6]*x1 + c[7]*y1 + 1) * y1' = (c[3]*x1 + c[4]*y1 + c[5]) / (c[6]*x1 + c[7]*y1 + 1) * x2' = (c[0]*x2 + c[1]*y2 + c[2]) / (c[6]*x2 + c[7]*y2 + 1) * y2' = (c[3]*x2 + c[4]*y2 + c[5]) / (c[6]*x2 + c[7]*y2 + 1) * x3' = (c[0]*x3 + c[1]*y3 + c[2]) / (c[6]*x3 + c[7]*y3 + 1) * y3' = (c[3]*x3 + c[4]*y3 + c[5]) / (c[6]*x3 + c[7]*y3 + 1) * x4' = (c[0]*x4 + c[1]*y4 + c[2]) / (c[6]*x4 + c[7]*y4 + 1) * y4' = (c[3]*x4 + c[4]*y4 + c[5]) / (c[6]*x4 + c[7]*y4 + 1) * * Multiplying both sides of each eqn by the denominator, we get * * AC = B * * where B and C are column vectors * * B = [ x1' y1' x2' y2' x3' y3' x4' y4' ] * C = [ c[0] c[1] c[2] c[3] c[4] c[5] c[6] c[7] ] * * and A is the 8x8 matrix * * x1 y1 1 0 0 0 -x1*x1' -y1*x1' * 0 0 0 x1 y1 1 -x1*y1' -y1*y1' * x2 y2 1 0 0 0 -x2*x2' -y2*x2' * 0 0 0 x2 y2 1 -x2*y2' -y2*y2' * x3 y3 1 0 0 0 -x3*x3' -y3*x3' * 0 0 0 x3 y3 1 -x3*y3' -y3*y3' * x4 y4 1 0 0 0 -x4*x4' -y4*x4' * 0 0 0 x4 y4 1 -x4*y4' -y4*y4' * * These eight equations are solved here for the coefficients C. * * These eight coefficients can then be used to find the mapping * (x,y) --> (x',y'): * * x' = (c[0]x + c[1]y + c[2]) / (c[6]x + c[7]y + 1) * y' = (c[3]x + c[4]y + c[5]) / (c[6]x + c[7]y + 1) * * that is implemented in projectiveXformSampled() and * projectiveXFormInterpolated(). */ l_int32 getProjectiveXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc) { l_int32 i; l_float32 x1, y1, x2, y2, x3, y3, x4, y4; l_float32 *b; /* rhs vector of primed coords X'; coeffs returned in *pvc */ l_float32 *a[8]; /* 8x8 matrix A */ PROCNAME("getProjectiveXformCoeffs"); if (!ptas) return ERROR_INT("ptas not defined", procName, 1); if (!ptad) return ERROR_INT("ptad not defined", procName, 1); if (!pvc) return ERROR_INT("&vc not defined", procName, 1); if ((b = (l_float32 *)CALLOC(8, sizeof(l_float32))) == NULL) return ERROR_INT("b not made", procName, 1); *pvc = b; ptaGetPt(ptas, 0, &x1, &y1); ptaGetPt(ptas, 1, &x2, &y2); ptaGetPt(ptas, 2, &x3, &y3); ptaGetPt(ptas, 3, &x4, &y4); ptaGetPt(ptad, 0, &b[0], &b[1]); ptaGetPt(ptad, 1, &b[2], &b[3]); ptaGetPt(ptad, 2, &b[4], &b[5]); ptaGetPt(ptad, 3, &b[6], &b[7]); for (i = 0; i < 8; i++) { if ((a[i] = (l_float32 *)CALLOC(8, sizeof(l_float32))) == NULL) return ERROR_INT("a[i] not made", procName, 1); } a[0][0] = x1; a[0][1] = y1; a[0][2] = 1.; a[0][6] = -x1 * b[0]; a[0][7] = -y1 * b[0]; a[1][3] = x1; a[1][4] = y1; a[1][5] = 1; a[1][6] = -x1 * b[1]; a[1][7] = -y1 * b[1]; a[2][0] = x2; a[2][1] = y2; a[2][2] = 1.; a[2][6] = -x2 * b[2]; a[2][7] = -y2 * b[2]; a[3][3] = x2; a[3][4] = y2; a[3][5] = 1; a[3][6] = -x2 * b[3]; a[3][7] = -y2 * b[3]; a[4][0] = x3; a[4][1] = y3; a[4][2] = 1.; a[4][6] = -x3 * b[4]; a[4][7] = -y3 * b[4]; a[5][3] = x3; a[5][4] = y3; a[5][5] = 1; a[5][6] = -x3 * b[5]; a[5][7] = -y3 * b[5]; a[6][0] = x4; a[6][1] = y4; a[6][2] = 1.; a[6][6] = -x4 * b[6]; a[6][7] = -y4 * b[6]; a[7][3] = x4; a[7][4] = y4; a[7][5] = 1; a[7][6] = -x4 * b[7]; a[7][7] = -y4 * b[7]; gaussjordan(a, b, 8); for (i = 0; i < 8; i++) FREE(a[i]); return 0; } /*! * projectiveXformSampledPt() * * Input: vc (vector of 8 coefficients) * (x, y) (initial point) * (&xp, &yp) ( transformed point) * Return: 0 if OK; 1 on error * * Notes: * (1) This finds the nearest pixel coordinates of the transformed point. * (2) It does not check ptrs for returned data! */ l_int32 projectiveXformSampledPt(l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp) { l_float32 factor; PROCNAME("projectiveXformSampledPt"); if (!vc) return ERROR_INT("vc not defined", procName, 1); factor = 1. / (vc[6] * x + vc[7] * y + 1.); *pxp = (l_int32)(factor * (vc[0] * x + vc[1] * y + vc[2]) + 0.5); *pyp = (l_int32)(factor * (vc[3] * x + vc[4] * y + vc[5]) + 0.5); return 0; } /*! * projectiveXformPt() * * Input: vc (vector of 8 coefficients) * (x, y) (initial point) * (&xp, &yp) ( transformed point) * Return: 0 if OK; 1 on error * * Notes: * (1) This computes the floating point location of the transformed point. * (2) It does not check ptrs for returned data! */ l_int32 projectiveXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp) { l_float32 factor; PROCNAME("projectiveXformPt"); if (!vc) return ERROR_INT("vc not defined", procName, 1); factor = 1. / (vc[6] * x + vc[7] * y + 1.); *pxp = factor * (vc[0] * x + vc[1] * y + vc[2]); *pyp = factor * (vc[3] * x + vc[4] * y + vc[5]); return 0; } leptonica-1.70/src/fhmtgen.1.c0000644000175000017500000001335311743720736014246 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /*! * Top-level fast hit-miss transform with auto-generated sels * * PIX *pixHMTDwa_1() * PIX *pixFHMTGen_1() */ #include #include "allheaders.h" PIX *pixHMTDwa_1(PIX *pixd, PIX *pixs, char *selname); PIX *pixFHMTGen_1(PIX *pixd, PIX *pixs, char *selname); l_int32 fhmtgen_low_1(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 index); static l_int32 NUM_SELS_GENERATED = 10; static char SEL_NAMES[][80] = { "sel_3hm", "sel_3de", "sel_3ue", "sel_3re", "sel_3le", "sel_sl1", "sel_ulc", "sel_urc", "sel_llc", "sel_lrc"}; /*! * pixHMTDwa_1() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * sel name * Return: pixd * * Notes: * (1) This simply adds a 32 pixel border, calls the appropriate * pixFHMTGen_*(), and removes the border. * See notes below for that function. */ PIX * pixHMTDwa_1(PIX *pixd, PIX *pixs, char *selname) { PIX *pixt1, *pixt2, *pixt3; PROCNAME("pixHMTDwa_1"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); pixt1 = pixAddBorder(pixs, 32, 0); pixt2 = pixFHMTGen_1(NULL, pixt1, selname); pixt3 = pixRemoveBorder(pixt2, 32); pixDestroy(&pixt1); pixDestroy(&pixt2); if (!pixd) return pixt3; pixCopy(pixd, pixt3); pixDestroy(&pixt3); return pixd; } /*! * pixFHMTGen_1() * * Input: pixd (usual 3 choices: null, == pixs, != pixs) * pixs (1 bpp) * sel name * Return: pixd * * Notes: * (1) This is a dwa implementation of the hit-miss transform * on pixs by the sel. * (2) The sel must be limited in size to not more than 31 pixels * about the origin. It must have at least one hit, and it * can have any number of misses. * (3) This handles all required setting of the border pixels * before erosion and dilation. */ PIX * pixFHMTGen_1(PIX *pixd, PIX *pixs, char *selname) { l_int32 i, index, found, w, h, wpls, wpld; l_uint32 *datad, *datas, *datat; PIX *pixt; PROCNAME("pixFHMTGen_1"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, pixd); if (pixGetDepth(pixs) != 1) return (PIX *)ERROR_PTR("pixs must be 1 bpp", procName, pixd); found = FALSE; for (i = 0; i < NUM_SELS_GENERATED; i++) { if (strcmp(selname, SEL_NAMES[i]) == 0) { found = TRUE; index = i; break; } } if (found == FALSE) return (PIX *)ERROR_PTR("sel index not found", procName, pixd); if (!pixd) { if ((pixd = pixCreateTemplate(pixs)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } else /* for in-place or pre-allocated */ pixResizeImageData(pixd, pixs); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); /* The images must be surrounded with 32 additional border * pixels, that we'll read from. We fabricate a "proper" * image as the subimage within the border, having the * following parameters: */ w = pixGetWidth(pixs) - 64; h = pixGetHeight(pixs) - 64; datas = pixGetData(pixs) + 32 * wpls + 1; datad = pixGetData(pixd) + 32 * wpld + 1; if (pixd == pixs) { /* need temp image if in-place */ if ((pixt = pixCopy(NULL, pixs)) == NULL) return (PIX *)ERROR_PTR("pixt not made", procName, pixd); datat = pixGetData(pixt) + 32 * wpls + 1; fhmtgen_low_1(datad, w, h, wpld, datat, wpls, index); pixDestroy(&pixt); } else { /* not in-place */ fhmtgen_low_1(datad, w, h, wpld, datas, wpls, index); } return pixd; } leptonica-1.70/src/grayquant.c0000640000175000017500000021034612244223330014450 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * grayquant.c * * Thresholding from 8 bpp to 1 bpp * * Floyd-Steinberg dithering to binary * PIX *pixDitherToBinary() * PIX *pixDitherToBinarySpec() * * Simple (pixelwise) binarization with fixed threshold * PIX *pixThresholdToBinary() * * Binarization with variable threshold * PIX *pixVarThresholdToBinary() * * Slower implementation of Floyd-Steinberg dithering, using LUTs * PIX *pixDitherToBinaryLUT() * * Generate a binary mask from pixels of particular values * PIX *pixGenerateMaskByValue() * PIX *pixGenerateMaskByBand() * * Thresholding from 8 bpp to 2 bpp * * Dithering to 2 bpp * PIX *pixDitherTo2bpp() * PIX *pixDitherTo2bppSpec() * * Simple (pixelwise) thresholding to 2 bpp with optional cmap * PIX *pixThresholdTo2bpp() * * Simple (pixelwise) thresholding from 8 bpp to 4 bpp * PIX *pixThresholdTo4bpp() * * Simple (pixelwise) quantization on 8 bpp grayscale * PIX *pixThresholdOn8bpp() * * Arbitrary (pixelwise) thresholding from 8 bpp to 2, 4 or 8 bpp * PIX *pixThresholdGrayArb() * * Quantization tables for linear thresholds of grayscale images * l_int32 *makeGrayQuantIndexTable() * l_int32 *makeGrayQuantTargetTable() * * Quantization table for arbitrary thresholding of grayscale images * l_int32 makeGrayQuantTableArb() * l_int32 makeGrayQuantColormapArb() * * Thresholding from 32 bpp rgb to 1 bpp * (really color quantization, but it's better placed in this file) * PIX *pixGenerateMaskByBand32() * PIX *pixGenerateMaskByDiscr32() * * Histogram-based grayscale quantization * PIX *pixGrayQuantFromHisto() * static l_int32 numaFillCmapFromHisto() * * Color quantize grayscale image using existing colormap * PIX *pixGrayQuantFromCmap() */ #include #include #include "allheaders.h" static l_int32 numaFillCmapFromHisto(NUMA *na, PIXCMAP *cmap, l_float32 minfract, l_int32 maxsize, l_int32 **plut); /*------------------------------------------------------------------* * Binarization by Floyd-Steinberg dithering * *------------------------------------------------------------------*/ /*! * pixDitherToBinary() * * Input: pixs * Return: pixd (dithered binary), or null on error * * The Floyd-Steinberg error diffusion dithering algorithm * binarizes an 8 bpp grayscale image to a threshold of 128. * If a pixel has a value above 127, it is binarized to white * and the excess (below 255) is subtracted from three * neighboring pixels in the fractions 3/8 to (i, j+1), * 3/8 to (i+1, j) and 1/4 to (i+1,j+1), truncating to 0 * if necessary. Likewise, if it the pixel has a value * below 128, it is binarized to black and the excess above 0 * is added to the neighboring pixels, truncating to 255 if necessary. * * This function differs from straight dithering in that it allows * clipping of grayscale to 0 or 255 if the values are * sufficiently close, without distribution of the excess. * This uses default values to specify the range of lower * and upper values (near 0 and 255, rsp) that are clipped * to black and white without propagating the excess. * Not propagating the excess has the effect of reducing the * snake patterns in parts of the image that are nearly black or white; * however, it also prevents the attempt to reproduce gray for those values. * * The implementation is straightforward. It uses a pair of * line buffers to avoid changing pixs. It is about 2x faster * than the implementation using LUTs. */ PIX * pixDitherToBinary(PIX *pixs) { PROCNAME("pixDitherToBinary"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); return pixDitherToBinarySpec(pixs, DEFAULT_CLIP_LOWER_1, DEFAULT_CLIP_UPPER_1); } /*! * pixDitherToBinarySpec() * * Input: pixs * lowerclip (lower clip distance to black; use 0 for default) * upperclip (upper clip distance to white; use 0 for default) * Return: pixd (dithered binary), or null on error * * Notes: * (1) See comments above in pixDitherToBinary() for details. * (2) The input parameters lowerclip and upperclip specify the range * of lower and upper values (near 0 and 255, rsp) that are * clipped to black and white without propagating the excess. * For that reason, lowerclip and upperclip should be small numbers. */ PIX * pixDitherToBinarySpec(PIX *pixs, l_int32 lowerclip, l_int32 upperclip) { l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; l_uint32 *bufs1, *bufs2; PIX *pixt, *pixd; PROCNAME("pixDitherToBinarySpec"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); if (lowerclip < 0 || lowerclip > 255) return (PIX *)ERROR_PTR("invalid value for lowerclip", procName, NULL); if (upperclip < 0 || upperclip > 255) return (PIX *)ERROR_PTR("invalid value for upperclip", procName, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Remove colormap if it exists */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Two line buffers, 1 for current line and 2 for next line */ if ((bufs1 = (l_uint32 *)CALLOC(wplt, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs1 not made", procName, NULL); if ((bufs2 = (l_uint32 *)CALLOC(wplt, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs2 not made", procName, NULL); ditherToBinaryLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, lowerclip, upperclip); FREE(bufs1); FREE(bufs2); pixDestroy(&pixt); return pixd; } /*------------------------------------------------------------------* * Simple (pixelwise) binarization with fixed threshold * *------------------------------------------------------------------*/ /*! * pixThresholdToBinary() * * Input: pixs (4 or 8 bpp) * threshold value * Return: pixd (1 bpp), or null on error * * Notes: * (1) If the source pixel is less than the threshold value, * the dest will be 1; otherwise, it will be 0 */ PIX * pixThresholdToBinary(PIX *pixs, l_int32 thresh) { l_int32 d, w, h, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; PROCNAME("pixThresholdToBinary"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 4 && d != 8) return (PIX *)ERROR_PTR("pixs must be 4 or 8 bpp", procName, NULL); if (thresh < 0) return (PIX *)ERROR_PTR("thresh must be non-negative", procName, NULL); if (d == 4 && thresh > 16) return (PIX *)ERROR_PTR("4 bpp thresh not in {0-16}", procName, NULL); if (d == 8 && thresh > 256) return (PIX *)ERROR_PTR("8 bpp thresh not in {0-256}", procName, NULL); if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Remove colormap if it exists. If there is a colormap, * pixt will be 8 bpp regardless of the depth of pixs. */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); if (pixGetColormap(pixs) && d == 4) { /* promoted to 8 bpp */ d = 8; thresh *= 16; } thresholdToBinaryLow(datad, w, h, wpld, datat, d, wplt, thresh); pixDestroy(&pixt); return pixd; } /*------------------------------------------------------------------* * Binarization with variable threshold * *------------------------------------------------------------------*/ /*! * pixVarThresholdToBinary() * * Input: pixs (8 bpp) * pixg (8 bpp; contains threshold values for each pixel) * Return: pixd (1 bpp), or null on error * * Notes: * (1) If the pixel in pixs is less than the corresponding pixel * in pixg, the dest will be 1; otherwise it will be 0. */ PIX * pixVarThresholdToBinary(PIX *pixs, PIX *pixg) { l_int32 i, j, vals, valg, w, h, d, wpls, wplg, wpld; l_uint32 *datas, *datag, *datad, *lines, *lineg, *lined; PIX *pixd; PROCNAME("pixVarThresholdToBinary"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!pixg) return (PIX *)ERROR_PTR("pixg not defined", procName, NULL); if (!pixSizesEqual(pixs, pixg)) return (PIX *)ERROR_PTR("pix sizes not equal", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs must be 8 bpp", procName, NULL); pixd = pixCreate(w, h, 1); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); for (i = 0; i < h; i++) { lines = datas + i * wpls; lineg = datag + i * wplg; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); valg = GET_DATA_BYTE(lineg, j); if (vals < valg) SET_DATA_BIT(lined, j); } } return pixd; } /*--------------------------------------------------------------------* * Slower implementation of binarization by dithering using LUTs * *--------------------------------------------------------------------*/ /*! * pixDitherToBinaryLUT() * * Input: pixs * lowerclip (lower clip distance to black; use -1 for default) * upperclip (upper clip distance to white; use -1 for default) * Return: pixd (dithered binary), or null on error * * This implementation is deprecated. You should use pixDitherToBinary(). * * See comments in pixDitherToBinary() * * This implementation additionally uses three lookup tables to * generate the output pixel value and the excess or deficit * carried over to the neighboring pixels. */ PIX * pixDitherToBinaryLUT(PIX *pixs, l_int32 lowerclip, l_int32 upperclip) { l_int32 w, h, d, wplt, wpld; l_int32 *tabval, *tab38, *tab14; l_uint32 *datat, *datad; l_uint32 *bufs1, *bufs2; PIX *pixt, *pixd; PROCNAME("pixDitherToBinaryLUT"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); if (lowerclip < 0) lowerclip = DEFAULT_CLIP_LOWER_1; if (upperclip < 0) upperclip = DEFAULT_CLIP_UPPER_1; if ((pixd = pixCreate(w, h, 1)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* Remove colormap if it exists */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Two line buffers, 1 for current line and 2 for next line */ if ((bufs1 = (l_uint32 *)CALLOC(wplt, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs1 not made", procName, NULL); if ((bufs2 = (l_uint32 *)CALLOC(wplt, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs2 not made", procName, NULL); /* 3 lookup tables: 1-bit value, (3/8)excess, and (1/4)excess */ make8To1DitherTables(&tabval, &tab38, &tab14, lowerclip, upperclip); ditherToBinaryLUTLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, tabval, tab38, tab14); FREE(bufs1); FREE(bufs2); FREE(tabval); FREE(tab38); FREE(tab14); pixDestroy(&pixt); return pixd; } /*--------------------------------------------------------------------* * Generate a binary mask from pixels of particular value(s) * *--------------------------------------------------------------------*/ /*! * pixGenerateMaskByValue() * * Input: pixs (2, 4 or 8 bpp, or colormapped) * val (of pixels for which we set 1 in dest) * usecmap (1 to retain cmap values; 0 to convert to gray) * Return: pixd (1 bpp), or null on error * * Notes: * (1) @val is the pixel value that we are selecting. It can be * either a gray value or a colormap index. * (2) If pixs is colormapped, @usecmap determines if the colormap * index values are used, or if the colormap is removed to gray and * the gray values are used. For the latter, it generates * an approximate grayscale value for each pixel, and then looks * for gray pixels with the value @val. */ PIX * pixGenerateMaskByValue(PIX *pixs, l_int32 val, l_int32 usecmap) { l_int32 i, j, w, h, d, wplg, wpld; l_uint32 *datag, *datad, *lineg, *lined; PIX *pixg, *pixd; PROCNAME("pixGenerateMaskByValue"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("not 2, 4 or 8 bpp", procName, NULL); if (!usecmap && pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); if (d == 8 && (val < 0 || val > 255)) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("val out of 8 bpp range", procName, NULL); } if (d == 4 && (val < 0 || val > 15)) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("val out of 4 bpp range", procName, NULL); } if (d == 2 && (val < 0 || val > 3)) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("val out of 2 bpp range", procName, NULL); } pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixg); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lineg = datag + i * wplg; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) { if (GET_DATA_BYTE(lineg, j) == val) SET_DATA_BIT(lined, j); } else if (d == 4) { if (GET_DATA_QBIT(lineg, j) == val) SET_DATA_BIT(lined, j); } else { /* d == 2 */ if (GET_DATA_DIBIT(lineg, j) == val) SET_DATA_BIT(lined, j); } } } pixDestroy(&pixg); return pixd; } /*! * pixGenerateMaskByBand() * * Input: pixs (2, 4 or 8 bpp, or colormapped) * lower, upper (two pixel values from which a range, either * between (inband) or outside of (!inband), * determines which pixels in pixs cause us to * set a 1 in the dest mask) * inband (1 for finding pixels in [lower, upper]; * 0 for finding pixels in [0, lower) union (upper, 255]) * usecmap (1 to retain cmap values; 0 to convert to gray) * Return: pixd (1 bpp), or null on error * * Notes: * (1) Generates a 1 bpp mask pixd, the same size as pixs, where * the fg pixels in the mask are those either within the specified * band (for inband == 1) or outside the specified band * (for inband == 0). * (2) If pixs is colormapped, @usecmap determines if the colormap * values are used, or if the colormap is removed to gray and * the gray values are used. For the latter, it generates * an approximate grayscale value for each pixel, and then looks * for gray pixels with the value @val. */ PIX * pixGenerateMaskByBand(PIX *pixs, l_int32 lower, l_int32 upper, l_int32 inband, l_int32 usecmap) { l_int32 i, j, w, h, d, wplg, wpld, val; l_uint32 *datag, *datad, *lineg, *lined; PIX *pixg, *pixd; PROCNAME("pixGenerateMaskByBand"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); d = pixGetDepth(pixs); if (d != 2 && d != 4 && d != 8) return (PIX *)ERROR_PTR("not 2, 4 or 8 bpp", procName, NULL); if (lower < 0 || lower > upper) return (PIX *)ERROR_PTR("lower < 0 or lower > upper!", procName, NULL); if (!usecmap && pixGetColormap(pixs)) pixg = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixg = pixClone(pixs); pixGetDimensions(pixg, &w, &h, &d); if (d == 8 && upper > 255) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("d == 8 and upper > 255", procName, NULL); } if (d == 4 && upper > 15) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("d == 4 and upper > 15", procName, NULL); } if (d == 2 && upper > 3) { pixDestroy(&pixg); return (PIX *)ERROR_PTR("d == 2 and upper > 3", procName, NULL); } pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixg); datag = pixGetData(pixg); wplg = pixGetWpl(pixg); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lineg = datag + i * wplg; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (d == 8) val = GET_DATA_BYTE(lineg, j); else if (d == 4) val = GET_DATA_QBIT(lineg, j); else /* d == 2 */ val = GET_DATA_DIBIT(lineg, j); if (inband) { if (val >= lower && val <= upper) SET_DATA_BIT(lined, j); } else { /* out of band */ if (val < lower || val > upper) SET_DATA_BIT(lined, j); } } } pixDestroy(&pixg); return pixd; } /*------------------------------------------------------------------* * Thresholding to 2 bpp by dithering * *------------------------------------------------------------------*/ /*! * pixDitherTo2bpp() * * Input: pixs (8 bpp) * cmapflag (1 to generate a colormap) * Return: pixd (dithered 2 bpp), or null on error * * An analog of the Floyd-Steinberg error diffusion dithering * algorithm is used to "dibitize" an 8 bpp grayscale image * to 2 bpp, using equally spaced gray values of 0, 85, 170, and 255, * which are served by thresholds of 43, 128 and 213. * If cmapflag == 1, the colormap values are set to 0, 85, 170 and 255. * If a pixel has a value between 0 and 42, it is dibitized * to 0, and the excess (above 0) is added to the * three neighboring pixels, in the fractions 3/8 to (i, j+1), * 3/8 to (i+1, j) and 1/4 to (i+1, j+1), truncating to 255 if * necessary. If a pixel has a value between 43 and 127, it is * dibitized to 1, and the excess (above 85) is added to the three * neighboring pixels as before. If the value is below 85, the * excess is subtracted. With a value between 128 * and 212, it is dibitized to 2, with the excess on either side * of 170 distributed as before. Finally, with a value between * 213 and 255, it is dibitized to 3, with the excess (below 255) * subtracted from the neighbors. We always truncate to 0 or 255. * The details can be seen in the lookup table generation. * * This function differs from straight dithering in that it allows * clipping of grayscale to 0 or 255 if the values are * sufficiently close, without distribution of the excess. * This uses default values (from pix.h) to specify the range of lower * and upper values (near 0 and 255, rsp) that are clipped to black * and white without propagating the excess. * Not propagating the excess has the effect of reducing the snake * patterns in parts of the image that are nearly black or white; * however, it also prevents any attempt to reproduce gray for those values. * * The implementation uses 3 lookup tables for simplicity, and * a pair of line buffers to avoid modifying pixs. */ PIX * pixDitherTo2bpp(PIX *pixs, l_int32 cmapflag) { PROCNAME("pixDitherTo2bpp"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); return pixDitherTo2bppSpec(pixs, DEFAULT_CLIP_LOWER_2, DEFAULT_CLIP_UPPER_2, cmapflag); } /*! * pixDitherTo2bppSpec() * * Input: pixs (8 bpp) * lowerclip (lower clip distance to black; use 0 for default) * upperclip (upper clip distance to white; use 0 for default) * cmapflag (1 to generate a colormap) * Return: pixd (dithered 2 bpp), or null on error * * Notes: * (1) See comments above in pixDitherTo2bpp() for details. * (2) The input parameters lowerclip and upperclip specify the range * of lower and upper values (near 0 and 255, rsp) that are * clipped to black and white without propagating the excess. * For that reason, lowerclip and upperclip should be small numbers. */ PIX * pixDitherTo2bppSpec(PIX *pixs, l_int32 lowerclip, l_int32 upperclip, l_int32 cmapflag) { l_int32 w, h, d, wplt, wpld; l_int32 *tabval, *tab38, *tab14; l_uint32 *datat, *datad; l_uint32 *bufs1, *bufs2; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixDitherTo2bppSpec"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("must be 8 bpp for dithering", procName, NULL); if (lowerclip < 0 || lowerclip > 255) return (PIX *)ERROR_PTR("invalid value for lowerclip", procName, NULL); if (upperclip < 0 || upperclip > 255) return (PIX *)ERROR_PTR("invalid value for upperclip", procName, NULL); if ((pixd = pixCreate(w, h, 2)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* If there is a colormap, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); /* Two line buffers, 1 for current line and 2 for next line */ if ((bufs1 = (l_uint32 *)CALLOC(wplt, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs1 not made", procName, NULL); if ((bufs2 = (l_uint32 *)CALLOC(wplt, sizeof(l_uint32))) == NULL) return (PIX *)ERROR_PTR("bufs2 not made", procName, NULL); /* 3 lookup tables: 2-bit value, (3/8)excess, and (1/4)excess */ make8To2DitherTables(&tabval, &tab38, &tab14, lowerclip, upperclip); ditherTo2bppLow(datad, w, h, wpld, datat, wplt, bufs1, bufs2, tabval, tab38, tab14); if (cmapflag) { cmap = pixcmapCreateLinear(2, 4); pixSetColormap(pixd, cmap); } FREE(bufs1); FREE(bufs2); FREE(tabval); FREE(tab38); FREE(tab14); pixDestroy(&pixt); return pixd; } /*--------------------------------------------------------------------* * Simple (pixelwise) thresholding to 2 bpp with optional colormap * *--------------------------------------------------------------------*/ /*! * pixThresholdTo2bpp() * * Input: pixs (8 bpp) * nlevels (equally spaced; must be between 2 and 4) * cmapflag (1 to build colormap; 0 otherwise) * Return: pixd (2 bpp, optionally with colormap), or null on error * * Notes: * (1) Valid values for nlevels is the set {2, 3, 4}. * (2) Any colormap on the input pixs is removed to 8 bpp grayscale. * (3) This function is typically invoked with cmapflag == 1. * In the situation where no colormap is desired, nlevels is * ignored and pixs is thresholded to 4 levels. * (4) The target output colors are equally spaced, with the * darkest at 0 and the lightest at 255. The thresholds are * chosen halfway between adjacent output values. A table * is built that specifies the mapping from src to dest. * (5) If cmapflag == 1, a colormap of size 'nlevels' is made, * and the pixel values in pixs are replaced by their * appropriate color indices. The number of holdouts, * 4 - nlevels, will be between 0 and 2. * (6) If you don't want the thresholding to be equally spaced, * either first transform the 8 bpp src using pixGammaTRC(). * or, if cmapflag == 1, after calling this function you can use * pixcmapResetColor() to change any individual colors. * (7) If a colormap is generated, it will specify (to display * programs) exactly how each level is to be represented in RGB * space. When representing text, 3 levels is far better than * 2 because of the antialiasing of the single gray level, * and 4 levels (black, white and 2 gray levels) is getting * close to the perceptual quality of a (nearly continuous) * grayscale image. With 2 bpp, you can set up a colormap * and allocate from 2 to 4 levels to represent antialiased text. * Any left over colormap entries can be used for coloring regions. * For the same number of levels, the file size of a 2 bpp image * is about 10% smaller than that of a 4 bpp result for the same * number of levels. For both 2 bpp and 4 bpp, using 4 levels you * get compression far better than that of jpeg, because the * quantization to 4 levels will remove the jpeg ringing in the * background near character edges. */ PIX * pixThresholdTo2bpp(PIX *pixs, l_int32 nlevels, l_int32 cmapflag) { l_int32 *qtab; l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixThresholdTo2bpp"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (nlevels < 2 || nlevels > 4) return (PIX *)ERROR_PTR("nlevels not in {2, 3, 4}", procName, NULL); /* Make the appropriate table */ if (cmapflag) qtab = makeGrayQuantIndexTable(nlevels); else qtab = makeGrayQuantTargetTable(4, 2); if ((pixd = pixCreate(w, h, 2)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag) { /* hold out (4 - nlevels) cmap entries */ cmap = pixcmapCreateLinear(2, nlevels); pixSetColormap(pixd, cmap); } /* If there is a colormap in the src, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); thresholdTo2bppLow(datad, h, wpld, datat, wplt, qtab); if (qtab) FREE(qtab); pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Simple (pixelwise) thresholding to 4 bpp * *----------------------------------------------------------------------*/ /*! * pixThresholdTo4bpp() * * Input: pixs (8 bpp, can have colormap) * nlevels (equally spaced; must be between 2 and 16) * cmapflag (1 to build colormap; 0 otherwise) * Return: pixd (4 bpp, optionally with colormap), or null on error * * Notes: * (1) Valid values for nlevels is the set {2, ... 16}. * (2) Any colormap on the input pixs is removed to 8 bpp grayscale. * (3) This function is typically invoked with cmapflag == 1. * In the situation where no colormap is desired, nlevels is * ignored and pixs is thresholded to 16 levels. * (4) The target output colors are equally spaced, with the * darkest at 0 and the lightest at 255. The thresholds are * chosen halfway between adjacent output values. A table * is built that specifies the mapping from src to dest. * (5) If cmapflag == 1, a colormap of size 'nlevels' is made, * and the pixel values in pixs are replaced by their * appropriate color indices. The number of holdouts, * 16 - nlevels, will be between 0 and 14. * (6) If you don't want the thresholding to be equally spaced, * either first transform the 8 bpp src using pixGammaTRC(). * or, if cmapflag == 1, after calling this function you can use * pixcmapResetColor() to change any individual colors. * (7) If a colormap is generated, it will specify, to display * programs, exactly how each level is to be represented in RGB * space. When representing text, 3 levels is far better than * 2 because of the antialiasing of the single gray level, * and 4 levels (black, white and 2 gray levels) is getting * close to the perceptual quality of a (nearly continuous) * grayscale image. Therefore, with 4 bpp, you can set up a * colormap, allocate a relatively small fraction of the 16 * possible values to represent antialiased text, and use the * other colormap entries for other things, such as coloring * text or background. Two other reasons for using a small number * of gray values for antialiased text are (1) PNG compression * gets worse as the number of levels that are used is increased, * and (2) using a small number of levels will filter out most of * the jpeg ringing that is typically introduced near sharp edges * of text. This filtering is partly responsible for the improved * compression. */ PIX * pixThresholdTo4bpp(PIX *pixs, l_int32 nlevels, l_int32 cmapflag) { l_int32 *qtab; l_int32 w, h, d, wplt, wpld; l_uint32 *datat, *datad; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixThresholdTo4bpp"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (nlevels < 2 || nlevels > 16) return (PIX *)ERROR_PTR("nlevels not in [2,...,16]", procName, NULL); /* Make the appropriate table */ if (cmapflag) qtab = makeGrayQuantIndexTable(nlevels); else qtab = makeGrayQuantTargetTable(16, 4); if ((pixd = pixCreate(w, h, 4)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); if (cmapflag) { /* hold out (16 - nlevels) cmap entries */ cmap = pixcmapCreateLinear(4, nlevels); pixSetColormap(pixd, cmap); } /* If there is a colormap in the src, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); thresholdTo4bppLow(datad, h, wpld, datat, wplt, qtab); if (qtab) FREE(qtab); pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Simple (pixelwise) thresholding on 8 bpp with optional colormap * *----------------------------------------------------------------------*/ /*! * pixThresholdOn8bpp() * * Input: pixs (8 bpp, can have colormap) * nlevels (equally spaced; must be between 2 and 256) * cmapflag (1 to build colormap; 0 otherwise) * Return: pixd (8 bpp, optionally with colormap), or null on error * * Notes: * (1) Valid values for nlevels is the set {2,...,256}. * (2) Any colormap on the input pixs is removed to 8 bpp grayscale. * (3) If cmapflag == 1, a colormap of size 'nlevels' is made, * and the pixel values in pixs are replaced by their * appropriate color indices. Otherwise, the pixel values * are the actual thresholded (i.e., quantized) grayscale values. * (4) If you don't want the thresholding to be equally spaced, * first transform the input 8 bpp src using pixGammaTRC(). */ PIX * pixThresholdOn8bpp(PIX *pixs, l_int32 nlevels, l_int32 cmapflag) { l_int32 *qtab; /* quantization table */ l_int32 i, j, w, h, wpld, val, newval; l_uint32 *datad, *lined; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixThresholdOn8bpp"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (nlevels < 2 || nlevels > 256) return (PIX *)ERROR_PTR("nlevels not in [2,...,256]", procName, NULL); if (cmapflag) qtab = makeGrayQuantIndexTable(nlevels); else qtab = makeGrayQuantTargetTable(nlevels, 8); /* Get a new pixd; if there is a colormap in the src, remove it */ if (pixGetColormap(pixs)) pixd = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); else pixd = pixCopy(NULL, pixs); if (cmapflag) { /* hold out (256 - nlevels) cmap entries */ cmap = pixcmapCreateLinear(8, nlevels); pixSetColormap(pixd, cmap); } pixGetDimensions(pixd, &w, &h, NULL); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lined = datad + i * wpld; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(lined, j); newval = qtab[val]; SET_DATA_BYTE(lined, j, newval); } } if (qtab) FREE(qtab); return pixd; } /*----------------------------------------------------------------------* * Arbitrary (pixelwise) thresholding from 8 bpp to 2, 4 or 8 bpp * *----------------------------------------------------------------------*/ /*! * pixThresholdGrayArb() * * Input: pixs (8 bpp grayscale; can have colormap) * edgevals (string giving edge value of each bin) * outdepth (0, 2, 4 or 8 bpp; 0 is default for min depth) * use_average (1 if use the average pixel value in colormap) * setblack (1 if darkest color is set to black) * setwhite (1 if lightest color is set to white) * Return: pixd (2, 4 or 8 bpp quantized image with colormap), * or null on error * * Notes: * (1) This function allows exact specification of the quantization bins. * The string @edgevals is a space-separated set of values * specifying the dividing points between output quantization bins. * These threshold values are assigned to the bin with higher * values, so that each of them is the smallest value in their bin. * (2) The output image (pixd) depth is specified by @outdepth. The * number of bins is the number of edgevals + 1. The * relation between outdepth and the number of bins is: * outdepth = 2 nbins <= 4 * outdepth = 4 nbins <= 16 * outdepth = 8 nbins <= 256 * With @outdepth == 0, the minimum required depth for the * given number of bins is used. * The output pixd has a colormap. * (3) The last 3 args determine the specific values that go into * the colormap. * (4) For @use_average: * - if TRUE, the average value of pixels falling in the bin is * chosen as the representative gray value. Otherwise, * - if FALSE, the central value of each bin is chosen as * the representative value. * The colormap holds the representative value. * (5) For @setblack, if TRUE the darkest color is set to (0,0,0). * (6) For @setwhite, if TRUE the lightest color is set to (255,255,255). * (7) An alternative to using this function to quantize to * unequally-spaced bins is to first transform the 8 bpp pixs * using pixGammaTRC(), and follow this with pixThresholdTo4bpp(). */ PIX * pixThresholdGrayArb(PIX *pixs, const char *edgevals, l_int32 outdepth, l_int32 use_average, l_int32 setblack, l_int32 setwhite) { l_int32 *qtab; l_int32 w, h, d, i, j, n, wplt, wpld, val, newval; l_uint32 *datat, *datad, *linet, *lined; NUMA *na; PIX *pixt, *pixd; PIXCMAP *cmap; PROCNAME("pixThresholdGrayArb"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (!edgevals) return (PIX *)ERROR_PTR("edgevals not defined", procName, NULL); if (outdepth != 0 && outdepth != 2 && outdepth != 4 && outdepth != 8) return (PIX *)ERROR_PTR("invalid outdepth", procName, NULL); /* Parse and sort (if required) the bin edge values */ na = parseStringForNumbers(edgevals, " \t\n,"); n = numaGetCount(na); if (n > 255) return (PIX *)ERROR_PTR("more than 256 levels", procName, NULL); if (outdepth == 0) { if (n <= 3) outdepth = 2; else if (n <= 15) outdepth = 4; else outdepth = 8; } else if (n + 1 > (1 << outdepth)) { L_WARNING("outdepth too small; setting to 8 bpp\n", procName); outdepth = 8; } numaSort(na, na, L_SORT_INCREASING); /* Make the quantization LUT and the colormap */ makeGrayQuantTableArb(na, outdepth, &qtab, &cmap); if (use_average) { /* use the average value in each bin */ pixcmapDestroy(&cmap); makeGrayQuantColormapArb(pixs, qtab, outdepth, &cmap); } pixcmapSetBlackAndWhite(cmap, setblack, setwhite); numaDestroy(&na); if ((pixd = pixCreate(w, h, outdepth)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); pixCopyResolution(pixd, pixs); pixSetColormap(pixd, cmap); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); /* If there is a colormap in the src, remove it */ pixt = pixRemoveColormap(pixs, REMOVE_CMAP_TO_GRAYSCALE); datat = pixGetData(pixt); wplt = pixGetWpl(pixt); if (outdepth == 2) { thresholdTo2bppLow(datad, h, wpld, datat, wplt, qtab); } else if (outdepth == 4) { thresholdTo4bppLow(datad, h, wpld, datat, wplt, qtab); } else { for (i = 0; i < h; i++) { lined = datad + i * wpld; linet = datat + i * wplt; for (j = 0; j < w; j++) { val = GET_DATA_BYTE(linet, j); newval = qtab[val]; SET_DATA_BYTE(lined, j, newval); } } } FREE(qtab); pixDestroy(&pixt); return pixd; } /*----------------------------------------------------------------------* * Quantization tables for linear thresholds of grayscale images * *----------------------------------------------------------------------*/ /*! * makeGrayQuantIndexTable() * * Input: nlevels (number of output levels) * Return: table (maps input gray level to colormap index, * or null on error) * Notes: * (1) 'nlevels' is some number between 2 and 256 (typically 8 or less). * (2) The table is typically used for quantizing 2, 4 and 8 bpp * grayscale src pix, and generating a colormapped dest pix. */ l_int32 * makeGrayQuantIndexTable(l_int32 nlevels) { l_int32 *tab; l_int32 i, j, thresh; PROCNAME("makeGrayQuantIndexTable"); if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("calloc fail for tab", procName, NULL); for (i = 0; i < 256; i++) { for (j = 0; j < nlevels; j++) { thresh = 255 * (2 * j + 1) / (2 * nlevels - 2); if (i <= thresh) { tab[i] = j; /* fprintf(stderr, "tab[%d] = %d\n", i, j); */ break; } } } return tab; } /*! * makeGrayQuantTargetTable() * * Input: nlevels (number of output levels) * depth (of dest pix, in bpp; 2, 4 or 8 bpp) * Return: table (maps input gray level to thresholded gray level, * or null on error) * * Notes: * (1) nlevels is some number between 2 and 2^(depth) * (2) The table is used in two similar ways: * - for 8 bpp, it quantizes to a given number of target levels * - for 2 and 4 bpp, it thresholds to appropriate target values * that will use the full dynamic range of the dest pix. * (3) For depth = 8, the number of thresholds chosen is * ('nlevels' - 1), and the 'nlevels' values stored in the * table are at the two at the extreme ends, (0, 255), plus * plus ('nlevels' - 2) values chosen at equal intervals between. * For example, for depth = 8 and 'nlevels' = 3, the two * threshold values are 3f and bf, and the three target pixel * values are 0, 7f and ff. * (4) For depth < 8, we ignore nlevels, and always use the maximum * number of levels, which is 2^(depth). * If you want nlevels < the maximum number, you should always * use a colormap. */ l_int32 * makeGrayQuantTargetTable(l_int32 nlevels, l_int32 depth) { l_int32 *tab; l_int32 i, j, thresh, maxval, quantval; PROCNAME("makeGrayQuantTargetTable"); if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (l_int32 *)ERROR_PTR("calloc fail for tab", procName, NULL); maxval = (1 << depth) - 1; if (depth < 8) nlevels = 1 << depth; for (i = 0; i < 256; i++) { for (j = 0; j < nlevels; j++) { thresh = 255 * (2 * j + 1) / (2 * nlevels - 2); if (i <= thresh) { quantval = maxval * j / (nlevels - 1); tab[i] = quantval; /* fprintf(stderr, "tab[%d] = %d\n", i, tab[i]); */ break; } } } return tab; } /*----------------------------------------------------------------------* * Quantization table for arbitrary thresholding of grayscale images * *----------------------------------------------------------------------*/ /*! * makeGrayQuantTableArb() * * Input: na (numa of bin boundaries) * outdepth (of colormap: 1, 2, 4 or 8) * &tab ( table mapping input gray level to cmap index) * &cmap ( colormap) * Return: 0 if OK, 1 on error * * Notes: * (1) The number of bins is the count of @na + 1. * (2) The bin boundaries in na must be sorted in increasing order. * (3) The table is an inverse colormap: it maps input gray level * to colormap index (the bin number). * (4) The colormap generated here has quantized values at the * center of each bin. If you want to use the average gray * value of pixels within the bin, discard the colormap and * compute it using makeGrayQuantColormapArb(). * (5) Returns an error if there are not enough levels in the * output colormap for the number of bins. The number * of bins must not exceed 2^outdepth. */ l_int32 makeGrayQuantTableArb(NUMA *na, l_int32 outdepth, l_int32 **ptab, PIXCMAP **pcmap) { l_int32 i, j, n, jstart, ave, val; l_int32 *tab; PIXCMAP *cmap; PROCNAME("makeGrayQuantTableArb"); if (!ptab) return ERROR_INT("&tab not defined", procName, 1); *ptab = NULL; if (!pcmap) return ERROR_INT("&cmap not defined", procName, 1); *pcmap = NULL; if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (n + 1 > (1 << outdepth)) return ERROR_INT("more bins than cmap levels", procName, 1); if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("calloc fail for tab", procName, 1); if ((cmap = pixcmapCreate(outdepth)) == NULL) return ERROR_INT("cmap not made", procName, 1); *ptab = tab; *pcmap = cmap; /* First n bins */ jstart = 0; for (i = 0; i < n; i++) { numaGetIValue(na, i, &val); ave = (jstart + val) / 2; pixcmapAddColor(cmap, ave, ave, ave); for (j = jstart; j < val; j++) tab[j] = i; jstart = val; } /* Last bin */ ave = (jstart + 255) / 2; pixcmapAddColor(cmap, ave, ave, ave); for (j = jstart; j < 256; j++) tab[j] = n; return 0; } /*! * makeGrayQuantColormapArb() * * Input: pixs (8 bpp) * tab (table mapping input gray level to cmap index) * outdepth (of colormap: 1, 2, 4 or 8) * &cmap ( colormap) * Return: 0 if OK, 1 on error * * Notes: * (1) The table is a 256-entry inverse colormap: it maps input gray * level to colormap index (the bin number). It is computed * using makeGrayQuantTableArb(). * (2) The colormap generated here has quantized values at the * average gray value of the pixels that are in each bin. * (3) Returns an error if there are not enough levels in the * output colormap for the number of bins. The number * of bins must not exceed 2^outdepth. */ l_int32 makeGrayQuantColormapArb(PIX *pixs, l_int32 *tab, l_int32 outdepth, PIXCMAP **pcmap) { l_int32 i, j, index, w, h, d, nbins, wpl, factor, val; l_int32 *bincount, *binave, *binstart; l_uint32 *line, *data; PROCNAME("makeGrayQuantColormapArb"); if (!pcmap) return ERROR_INT("&cmap not defined", procName, 1); *pcmap = NULL; if (!pixs) return ERROR_INT("pixs not defined", procName, 1); pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return ERROR_INT("pixs not 8 bpp", procName, 1); if (!tab) return ERROR_INT("tab not defined", procName, 1); nbins = tab[255] + 1; if (nbins > (1 << outdepth)) return ERROR_INT("more bins than cmap levels", procName, 1); /* Find the count and weighted count for each bin */ if ((bincount = (l_int32 *)CALLOC(nbins, sizeof(l_int32))) == NULL) return ERROR_INT("calloc fail for bincount", procName, 1); if ((binave = (l_int32 *)CALLOC(nbins, sizeof(l_int32))) == NULL) return ERROR_INT("calloc fail for binave", procName, 1); factor = (l_int32)(sqrt((l_float64)(w * h) / 30000.) + 0.5); factor = L_MAX(1, factor); data = pixGetData(pixs); wpl = pixGetWpl(pixs); for (i = 0; i < h; i += factor) { line = data + i * wpl; for (j = 0; j < w; j += factor) { val = GET_DATA_BYTE(line, j); bincount[tab[val]]++; binave[tab[val]] += val; } } /* Find the smallest gray values in each bin */ if ((binstart = (l_int32 *)CALLOC(nbins, sizeof(l_int32))) == NULL) return ERROR_INT("calloc fail for binstart", procName, 1); for (i = 1, index = 1; i < 256; i++) { if (tab[i] < index) continue; if (tab[i] == index) binstart[index++] = i; } /* Get the averages. If there are no samples in a bin, use * the center value of the bin. */ *pcmap = pixcmapCreate(outdepth); for (i = 0; i < nbins; i++) { if (bincount[i]) { val = binave[i] / bincount[i]; } else { /* no samples in the bin */ if (i < nbins - 1) val = (binstart[i] + binstart[i + 1]) / 2; else /* last bin */ val = (binstart[i] + 255) / 2; } pixcmapAddColor(*pcmap, val, val, val); } FREE(bincount); FREE(binave); FREE(binstart); return 0; } /*--------------------------------------------------------------------* * Thresholding from 32 bpp rgb to 1 bpp * *--------------------------------------------------------------------*/ /*! * pixGenerateMaskByBand32() * * Input: pixs (32 bpp) * refval (reference rgb value) * delm (max amount below the ref value for any component) * delp (max amount above the ref value for any component) * Return: pixd (1 bpp), or null on error * * Notes: * (1) Generates a 1 bpp mask pixd, the same size as pixs, where * the fg pixels in the mask are those where each component * is within -delm to +delp of the reference value. */ PIX * pixGenerateMaskByBand32(PIX *pixs, l_uint32 refval, l_int32 delm, l_int32 delp) { l_int32 i, j, w, h, d, wpls, wpld; l_int32 rref, gref, bref, rval, gval, bval; l_uint32 pixel; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixGenerateMaskByBand32"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("not 32 bpp", procName, NULL); if (delm < 0 || delp < 0) return (PIX *)ERROR_PTR("delm and delp must be >= 0", procName, NULL); extractRGBValues(refval, &rref, &gref, &bref); pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = lines[j]; rval = (pixel >> L_RED_SHIFT) & 0xff; if (rval < rref - delm || rval > rref + delp) continue; gval = (pixel >> L_GREEN_SHIFT) & 0xff; if (gval < gref - delm || gval > gref + delp) continue; bval = (pixel >> L_BLUE_SHIFT) & 0xff; if (bval < bref - delm || bval > bref + delp) continue; SET_DATA_BIT(lined, j); } } return pixd; } /*! * pixGenerateMaskByDiscr32() * * Input: pixs (32 bpp) * refval1 (reference rgb value) * refval2 (reference rgb value) * distflag (L_MANHATTAN_DISTANCE, L_EUCLIDEAN_DISTANCE) * Return: pixd (1 bpp), or null on error * * Notes: * (1) Generates a 1 bpp mask pixd, the same size as pixs, where * the fg pixels in the mask are those where the pixel in pixs * is "closer" to refval1 than to refval2. * (2) "Closer" can be defined in several ways, such as: * - manhattan distance (L1) * - euclidean distance (L2) * - majority vote of the individual components * Here, we have a choice of L1 or L2. */ PIX * pixGenerateMaskByDiscr32(PIX *pixs, l_uint32 refval1, l_uint32 refval2, l_int32 distflag) { l_int32 i, j, w, h, d, wpls, wpld; l_int32 rref1, gref1, bref1, rref2, gref2, bref2, rval, gval, bval; l_uint32 pixel, dist1, dist2; l_uint32 *datas, *datad, *lines, *lined; PIX *pixd; PROCNAME("pixGenerateMaskByDiscr32"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); pixGetDimensions(pixs, &w, &h, &d); if (d != 32) return (PIX *)ERROR_PTR("not 32 bpp", procName, NULL); if (distflag != L_MANHATTAN_DISTANCE && distflag != L_EUCLIDEAN_DISTANCE) return (PIX *)ERROR_PTR("invalid distflag", procName, NULL); extractRGBValues(refval1, &rref1, &gref1, &bref1); extractRGBValues(refval2, &rref2, &gref2, &bref2); pixd = pixCreate(w, h, 1); pixCopyResolution(pixd, pixs); datas = pixGetData(pixs); wpls = pixGetWpl(pixs); datad = pixGetData(pixd); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { pixel = lines[j]; extractRGBValues(pixel, &rval, &gval, &bval); if (distflag == L_MANHATTAN_DISTANCE) { dist1 = L_ABS(rref1 - rval); dist2 = L_ABS(rref2 - rval); dist1 += L_ABS(gref1 - gval); dist2 += L_ABS(gref2 - gval); dist1 += L_ABS(bref1 - bval); dist2 += L_ABS(bref2 - bval); } else { dist1 = (rref1 - rval) * (rref1 - rval); dist2 = (rref2 - rval) * (rref2 - rval); dist1 += (gref1 - gval) * (gref1 - gval); dist2 += (gref2 - gval) * (gref2 - gval); dist1 += (bref1 - bval) * (bref1 - bval); dist2 += (bref2 - bval) * (bref2 - bval); } if (dist1 < dist2) SET_DATA_BIT(lined, j); } } return pixd; } /*----------------------------------------------------------------------* * Histogram-based grayscale quantization * *----------------------------------------------------------------------*/ /*! * pixGrayQuantFromHisto() * * Input: pixd ( quantized pix with cmap; can be null) * pixs (8 bpp gray input pix; not cmapped) * pixm ( mask over pixels in pixs to quantize) * minfract (minimum fraction of pixels in a set of adjacent * histo bins that causes the set to be automatically * set aside as a color in the colormap; must be * at least 0.01) * maxsize (maximum number of adjacent bins allowed to represent * a color, regardless of the population of pixels * in the bins; must be at least 2) * Return: pixd (8 bpp, cmapped), or null on error * * Notes: * (1) This is useful for quantizing images with relatively few * colors, but which may have both color and gray pixels. * If there are color pixels, it is assumed that an input * rgb image has been color quantized first so that: * - pixd has a colormap describing the color pixels * - pixm is a mask over the non-color pixels in pixd * - the colormap in pixd, and the color pixels in pixd, * have been repacked to go from 0 to n-1 (n colors) * If there are no color pixels, pixd and pixm are both null, * and all pixels in pixs are quantized to gray. * (2) A 256-entry histogram is built of the gray values in pixs. * If pixm exists, the pixels contributing to the histogram are * restricted to the fg of pixm. A colormap and LUT are generated * from this histogram. We break up the array into a set * of intervals, each one constituting a color in the colormap: * An interval is identified by summing histogram bins until * either the sum equals or exceeds the @minfract of the total * number of pixels, or the span itself equals or exceeds @maxsize. * The color of each bin is always an average of the pixels * that constitute it. * (3) Note that we do not specify the number of gray colors in * the colormap. Instead, we specify two parameters that * describe the accuracy of the color assignments; this and * the actual image determine the number of resulting colors. * (4) If a mask exists and it is not the same size as pixs, make * a new mask the same size as pixs, with the original mask * aligned at the UL corners. Set all additional pixels * in the (larger) new mask set to 1, causing those pixels * in pixd to be set as gray. * (5) We estimate the total number of colors (color plus gray); * if it exceeds 255, return null. */ PIX * pixGrayQuantFromHisto(PIX *pixd, PIX *pixs, PIX *pixm, l_float32 minfract, l_int32 maxsize) { l_int32 w, h, wd, hd, wm, hm, wpls, wplm, wpld; l_int32 nc, nestim, i, j, vals, vald; l_int32 *lut; l_uint32 *datas, *datam, *datad, *lines, *linem, *lined; NUMA *na; PIX *pixmr; /* resized mask */ PIXCMAP *cmap; PROCNAME("pixGrayQuantFromHisto"); if (!pixs || pixGetDepth(pixs) != 8) return (PIX *)ERROR_PTR("pixs undefined or not 8 bpp", procName, NULL); if (minfract < 0.01) { L_WARNING("minfract < 0.01; setting to 0.05\n", procName); minfract = 0.05; } if (maxsize < 2) { L_WARNING("maxsize < 2; setting to 10\n", procName); maxsize = 10; } if ((pixd && !pixm) || (!pixd && pixm)) return (PIX *)ERROR_PTR("(pixd,pixm) not defined together", procName, NULL); pixGetDimensions(pixs, &w, &h, NULL); if (pixd) { if (pixGetDepth(pixm) != 1) return (PIX *)ERROR_PTR("pixm not 1 bpp", procName, NULL); if ((cmap = pixGetColormap(pixd)) == NULL) return (PIX *)ERROR_PTR("pixd not cmapped", procName, NULL); pixGetDimensions(pixd, &wd, &hd, NULL); if (w != wd || h != hd) return (PIX *)ERROR_PTR("pixs, pixd sizes differ", procName, NULL); nc = pixcmapGetCount(cmap); nestim = nc + (l_int32)(1.5 * 255 / maxsize); fprintf(stderr, "nestim = %d\n", nestim); if (nestim > 255) { L_ERROR("Estimate %d colors!\n", procName, nestim); return (PIX *)ERROR_PTR("probably too many colors", procName, NULL); } pixGetDimensions(pixm, &wm, &hm, NULL); if (w != wm || h != hm) { /* resize the mask */ L_WARNING("mask and dest sizes not equal\n", procName); pixmr = pixCreateNoInit(w, h, 1); pixRasterop(pixmr, 0, 0, wm, hm, PIX_SRC, pixm, 0, 0); pixRasterop(pixmr, wm, 0, w - wm, h, PIX_SET, NULL, 0, 0); pixRasterop(pixmr, 0, hm, wm, h - hm, PIX_SET, NULL, 0, 0); } else { pixmr = pixClone(pixm); } } else { pixd = pixCreateTemplate(pixs); cmap = pixcmapCreate(8); pixSetColormap(pixd, cmap); } /* Use original mask, if it exists, to select gray pixels */ na = pixGetGrayHistogramMasked(pixs, pixm, 0, 0, 1); /* Fill out the cmap with gray colors, and generate the lut * for pixel assignment. Issue a warning on failure. */ if (numaFillCmapFromHisto(na, cmap, minfract, maxsize, &lut)) L_ERROR("ran out of colors in cmap!\n", procName); numaDestroy(&na); /* Assign the gray pixels to their cmap indices */ datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (!pixm) { for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); vald = lut[vals]; SET_DATA_BYTE(lined, j, vald); } } FREE(lut); return pixd; } datam = pixGetData(pixmr); wplm = pixGetWpl(pixmr); for (i = 0; i < h; i++) { lines = datas + i * wpls; linem = datam + i * wplm; lined = datad + i * wpld; for (j = 0; j < w; j++) { if (!GET_DATA_BIT(linem, j)) continue; vals = GET_DATA_BYTE(lines, j); vald = lut[vals]; SET_DATA_BYTE(lined, j, vald); } } pixDestroy(&pixmr); FREE(lut); return pixd; } /*! * numaFillCmapFromHisto() * * Input: na (histogram of gray values) * cmap (8 bpp cmap, possibly initialized with color value) * minfract (minimum fraction of pixels in a set of adjacent * histo bins that causes the set to be automatically * set aside as a color in the colormap; must be * at least 0.01) * maxsize (maximum number of adjacent bins allowed to represent * a color, regardless of the population of pixels * in the bins; must be at least 2) * &lut ( lookup table from gray value to colormap index) * Return: 0 if OK, 1 on error * * Notes: * (1) This static function must be called from pixGrayQuantFromHisto() */ static l_int32 numaFillCmapFromHisto(NUMA *na, PIXCMAP *cmap, l_float32 minfract, l_int32 maxsize, l_int32 **plut) { l_int32 mincount, index, sum, wtsum, span, istart, i, val, ret; l_int32 *iahisto, *lut; l_float32 total; PROCNAME("numaFillCmapFromHisto"); if (!plut) return ERROR_INT("&lut not defined", procName, 1); *plut = NULL; if (!na) return ERROR_INT("na not defined", procName, 1); if (!cmap) return ERROR_INT("cmap not defined", procName, 1); numaGetSum(na, &total); mincount = (l_int32)(minfract * total); iahisto = numaGetIArray(na); if ((lut = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return ERROR_INT("lut not made", procName, 1); *plut = lut; index = pixcmapGetCount(cmap); /* start with number of colors * already reserved */ /* March through, associating colors with sets of adjacent * gray levels. During the process, the LUT that gives * the colormap index for each gray level is computed. * To complete a color, either the total count must equal * or exceed @mincount, or the current span of colors must * equal or exceed @maxsize. An empty span is not converted * into a color; it is simply ignored. When a span is completed for a * color, the weighted color in the span is added to the colormap. */ sum = 0; wtsum = 0; istart = 0; ret = 0; for (i = 0; i < 256; i++) { lut[i] = index; sum += iahisto[i]; wtsum += i * iahisto[i]; span = i - istart + 1; if (sum < mincount && span < maxsize) continue; if (sum == 0) { /* empty span; don't save */ istart = i + 1; continue; } /* Found new color; sum > 0 */ val = (l_int32)((l_float32)wtsum / (l_float32)sum + 0.5); ret = pixcmapAddColor(cmap, val, val, val); istart = i + 1; sum = 0; wtsum = 0; index++; } if (istart < 256 && sum > 0) { /* last one */ span = 256 - istart; val = (l_int32)((l_float32)wtsum / (l_float32)sum + 0.5); ret = pixcmapAddColor(cmap, val, val, val); } FREE(iahisto); return ret; } /*----------------------------------------------------------------------* * Color quantize grayscale image using existing colormap * *----------------------------------------------------------------------*/ /*! * pixGrayQuantFromCmap() * * Input: pixs (8 bpp grayscale without cmap) * cmap (to quantize to; of dest pix) * mindepth (minimum depth of pixd: can be 2, 4 or 8 bpp) * Return: pixd (2, 4 or 8 bpp, colormapped), or null on error * * Notes: * (1) In use, pixs is an 8 bpp grayscale image without a colormap. * If there is an existing colormap, a warning is issued and * a copy of the input pixs is returned. */ PIX * pixGrayQuantFromCmap(PIX *pixs, PIXCMAP *cmap, l_int32 mindepth) { l_int32 i, j, index, w, h, d, depth, wpls, wpld; l_int32 hascolor, vals, vald; l_int32 *tab; l_uint32 *datas, *datad, *lines, *lined; PIXCMAP *cmapd; PIX *pixd; PROCNAME("pixGrayQuantFromCmap"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetColormap(pixs) != NULL) { L_WARNING("pixs already has a colormap; returning a copy\n", procName); return pixCopy(NULL, pixs); } pixGetDimensions(pixs, &w, &h, &d); if (d != 8) return (PIX *)ERROR_PTR("pixs not 8 bpp", procName, NULL); if (!cmap) return (PIX *)ERROR_PTR("cmap not defined", procName, NULL); if (mindepth != 2 && mindepth != 4 && mindepth != 8) return (PIX *)ERROR_PTR("invalid mindepth", procName, NULL); /* Make sure the colormap is gray */ pixcmapHasColor(cmap, &hascolor); if (hascolor) { L_WARNING("Converting colormap colors to gray\n", procName); cmapd = pixcmapColorToGray(cmap, 0.3, 0.5, 0.2); } else { cmapd = pixcmapCopy(cmap); } /* Make LUT into colormap */ if ((tab = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("tab not made", procName, NULL); for (i = 0; i < 256; i++) { pixcmapGetNearestGrayIndex(cmapd, i, &index); tab[i] = index; } pixcmapGetMinDepth(cmap, &depth); depth = L_MAX(depth, mindepth); pixd = pixCreate(w, h, depth); pixSetColormap(pixd, cmapd); pixCopyResolution(pixd, pixs); pixCopyInputFormat(pixd, pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { vals = GET_DATA_BYTE(lines, j); vald = tab[vals]; if (depth == 2) SET_DATA_DIBIT(lined, j, vald); else if (depth == 4) SET_DATA_QBIT(lined, j, vald); else /* depth == 8 */ SET_DATA_BYTE(lined, j, vald); } } FREE(tab); return pixd; } leptonica-1.70/src/freetype.c0000644000175000017500000003341112060445650014267 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * freetype.c * static l_int32 ftUtfToUniChar() * static PIX *ftDrawBitmap() * FT_LIBRARY *ftInitLibrary() * void ftShutdownLibrary() * PIX *pixWriteTTFText() */ #include #include #include "allheaders.h" #include #include FT_FREETYPE_H #include FT_GLYPH_H #undef MAX #define MAX(a, b) (((a)>(b))?(a):(b)) #define ROUNDUPDOWN(val, updown) (!updown) ? (val < 0 ? ((val - 63) >> 6) : val >> 6) : (val > 0 ? ((val + 63) >> 6) : val >> 6) struct ft_library_st { FT_Library library; }; static l_int32 ftUtfToUniChar(char *str, l_int32 *chPtr) { l_int32 byte; /* HTML4.0 entities in decimal form, e.g. Š{{{ */ byte = *((unsigned char *) str); if (byte == '&') { l_int32 i, n = 0; byte = *((unsigned char *) (str+1)); if (byte == '#') { for (i = 2; i < 8; i++) { byte = *((unsigned char *) (str+i)); if (byte >= '0' && byte <= '9') { n = (n * 10) + (byte - '0'); } else { break; } } if (byte == ';') { *chPtr = (l_int32) n; return ++i; } } } /* }}} */ /* Unroll 1 to 3 byte UTF-8 sequences */ byte = *((unsigned char *) str); if (byte < 0xC0) { /* Handles properly formed UTF-8 characters between 0x01 and 0x7F. * Also treats \0 and naked trail bytes 0x80 to 0xBF as valid * characters representing themselves. */ *chPtr = (l_int32) byte; return 1; } else if (byte < 0xE0) { if ((str[1] & 0xC0) == 0x80) { /* Two-byte-character lead-byte followed by a trail-byte. */ *chPtr = (l_int32) (((byte & 0x1F) << 6) | (str[1] & 0x3F)); return 2; } /* A two-byte-character lead-byte not followed by trail-byte * represents itself. */ *chPtr = (l_int32) byte; return 1; } else if (byte < 0xF0) { if (((str[1] & 0xC0) == 0x80) && ((str[2] & 0xC0) == 0x80)) { /* Three-byte-character lead byte followed by 2 trail bytes. */ *chPtr = (l_int32) (((byte & 0x0F) << 12) | ((str[1] & 0x3F) << 6) | (str[2] & 0x3F)); return 3; } /* A three-byte-character lead-byte not followed by two * trail-bytes represents itself. */ *chPtr = (l_int32) byte; return 1; } *chPtr = (l_int32)byte; return 1; } /* }}} */ static PIX * ftDrawBitmap(l_uint32 *datad, l_uint32 color, FT_Bitmap bitmap, l_int32 pen_x, l_int32 pen_y, l_int32 width, l_int32 height) { l_uint32 *ppixel = NULL, pixel; l_int32 x, y, row, col, pc, pcr, i; l_uint8 tmp; PROCNAME("ftDrawBitmap"); for (row = 0; row < bitmap.rows; row++) { pc = row * bitmap.pitch; pcr = pc; y = pen_y + row; /* Clip if out of bounds */ if (y >= height || y < 0) { continue; } for (col = 0; col < bitmap.width; col++, pc++) { int level; if (bitmap.pixel_mode == ft_pixel_mode_grays) { level = (bitmap.buffer[pc] * 127/ (bitmap.num_grays - 1)); } else if (bitmap.pixel_mode == ft_pixel_mode_mono) { level = ((bitmap.buffer[(col>>3)+pcr]) & (1<<(~col&0x07))) ? 127 : 0; } else { return (PIX *)ERROR_PTR("unsupported ft_pixel mode", procName, NULL); } if (color >= 0) { level = level * (127 - GET_DATA_BYTE(&color, L_ALPHA_CHANNEL)) / 127; } level = 127 - level; x = pen_x + col; /* Clip if out of bounds */ if (x >= width || x < 0) { continue; } ppixel = datad + y*width + x; /* Mix 2 colors using level as alpha */ if (level != 127) { l_uint8 new, old; pixel = *ppixel; for (i = 0; i < 3; i++) { new = GET_DATA_BYTE(&color, i); old = GET_DATA_BYTE(&pixel, i); tmp = (double)old * ((double)level/127) + (double)new * ((double)(127 - level)/127); SET_DATA_BYTE(ppixel, i, tmp); } } } } return NULL; } FT_LIBRARY * ftInitLibrary(void) { FT_Error err; FT_LIBRARY *lib_ptr; lib_ptr = CALLOC(1, sizeof(FT_LIBRARY)); err = FT_Init_FreeType(&lib_ptr->library); if (err) { FREE(lib_ptr); return NULL; } return lib_ptr; } void ftShutdownLibrary(FT_LIBRARY *lib_ptr) { if (lib_ptr) { FT_Done_FreeType(lib_ptr->library); FREE(lib_ptr); } } PIX * pixWriteTTFText(FT_LIBRARY *lib_ptr, PIX *pixs, l_float32 size, l_float32 angle, l_int32 x, l_int32 y, l_int32 letter_space, l_uint32 color, l_uint8 *fontfile, l_uint8 *text, l_int32 text_len, l_int32 *brect) { PIX *pixd, *pixt = NULL; FT_Error err; FT_Face face; FT_Glyph image; FT_BitmapGlyph bitmap; FT_CharMap charmap; FT_Matrix matrix; FT_Vector pen, penf; FT_UInt glyph_index, previous; FT_BBox char_bbox, bbox; l_uint32 *datad, letter_space_x, letter_space_y; l_int32 i, found, len, ch, x1 = 0, y1 = 0, width, height; l_uint16 platform, encoding; char *next; l_float32 cos_a, sin_a; PROCNAME("pixWriteTTFText"); if (pixGetDepth(pixs) != 32) { pixt = pixConvertTo32(pixs); if (!pixt) { return (PIX *)ERROR_PTR("failed to convert pixs to 32bpp image", procName, NULL); } pixd = pixCopy(NULL, pixt); } else { pixd = pixCopy(NULL, pixs); } if (!pixd) { pixDestroy(&pixt); return (PIX *)ERROR_PTR("pixd not made", procName, NULL); } datad = pixGetData(pixd); pixGetDimensions(pixd, &width, &height, NULL); err = FT_New_Face (lib_ptr->library, (char *)fontfile, 0, &face); if (err) { pixDestroy(&pixt); pixDestroy(&pixd); return (PIX *)ERROR_PTR("failed to load font file", procName, NULL); } err = FT_Set_Char_Size(face, 0, (FT_F26Dot6) (size * 64), LEPTONICA_FT_RESOLUTION, LEPTONICA_FT_RESOLUTION); if (err) { pixDestroy(&pixt); pixDestroy(&pixd); FT_Done_Face(face); return (PIX *)ERROR_PTR("failed to set font size", procName, NULL); } found = 0; for (i = 0; i < face->num_charmaps; i++) { charmap = face->charmaps[i]; platform = charmap->platform_id; encoding = charmap->encoding_id; if ((platform == 3 && encoding == 1) /* Windows Unicode */ || (platform == 3 && encoding == 0) /* Windows Symbol */ || (platform == 2 && encoding == 1) /* ISO Unicode */ || (platform == 0)) { /* Apple Unicode */ found = 1; break; } } if (!found) { pixDestroy(&pixt); pixDestroy(&pixd); FT_Done_Face(face); return (PIX *)ERROR_PTR("could not find Unicode charmap", procName, NULL); } /* Degrees to radians */ angle = angle * (M_PI/180); sin_a = sin(angle); cos_a = cos(angle); matrix.xx = (FT_Fixed) (cos_a * (1 << 16)); matrix.yx = (FT_Fixed) (sin_a * (1 << 16)); matrix.xy = -matrix.yx; matrix.yy = matrix.xx; FT_Set_Transform(face, &matrix, NULL); penf.x = penf.y = 0; /* running position of non-rotated string */ pen.x = pen.y = 0; /* running position of rotated string */ previous = 0; next = (char *)text; i = 0; while (*next) { if (i == 0) { /* use char spacing for 1+ characters */ letter_space_x = 0; letter_space_y = 0; } else { letter_space_x = cos_a * letter_space * i; letter_space_y = -sin_a * letter_space * i; } len = ftUtfToUniChar(next, &ch); // ch |= 0xf000; next += len; glyph_index = FT_Get_Char_Index(face, ch); err = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT); if (err) { pixDestroy(&pixt); pixDestroy(&pixd); FT_Done_Face(face); return (PIX *)ERROR_PTR("could not load glyph into the slot", procName, NULL); } err = FT_Get_Glyph(face->glyph, &image); if (err) { pixDestroy(&pixt); pixDestroy(&pixd); FT_Done_Face(face); return (PIX *)ERROR_PTR("could not extract glyph from a slot", procName, NULL); } if (brect) { FT_Glyph_Get_CBox(image, ft_glyph_bbox_gridfit, &char_bbox); char_bbox.xMin += penf.x; char_bbox.yMin += penf.y; char_bbox.xMax += penf.x; char_bbox.yMax += penf.y; if (i == 0) { bbox.xMin = char_bbox.xMin; bbox.yMin = char_bbox.yMin; bbox.xMax = char_bbox.xMax; bbox.yMax = char_bbox.yMax; } else { if (bbox.xMin > char_bbox.xMin) { bbox.xMin = char_bbox.xMin; } if (bbox.yMin > char_bbox.yMin) { bbox.yMin = char_bbox.yMin; } if (bbox.xMax < char_bbox.xMax) { bbox.xMax = char_bbox.xMax; } if (bbox.yMax < char_bbox.yMax) { bbox.yMax = char_bbox.yMax; } } } if (image->format != ft_glyph_format_bitmap && FT_Glyph_To_Bitmap(&image, ft_render_mode_normal, 0, 1)) { pixDestroy(&pixt); pixDestroy(&pixd); FT_Done_Face(face); return (PIX *)ERROR_PTR("could not convert glyph to bitmap", procName, NULL); } /* Now, draw to our target surface */ bitmap = (FT_BitmapGlyph) image; ftDrawBitmap(datad, color, bitmap->bitmap, letter_space_x + x + x1 + ((pen.x + 31) >> 6) + bitmap->left, letter_space_y + y - y1 + ((pen.y + 31) >> 6) - bitmap->top, width, height); /* Record current glyph index for kerning */ previous = glyph_index; /* Increment pen position */ pen.x += image->advance.x >> 10; pen.y -= image->advance.y >> 10; penf.x += face->glyph->metrics.horiAdvance; FT_Done_Glyph(image); i++; } if (brect) { double d1 = sin (angle + 0.78539816339744830962); double d2 = sin (angle - 0.78539816339744830962); /* Rotate bounding rectangle */ brect[0] = (int) (bbox.xMin * cos_a - bbox.yMin * sin_a); brect[1] = (int) (bbox.xMin * sin_a + bbox.yMin * cos_a); brect[2] = (int) (bbox.xMax * cos_a - bbox.yMin * sin_a); brect[3] = (int) (bbox.xMax * sin_a + bbox.yMin * cos_a); brect[4] = (int) (bbox.xMax * cos_a - bbox.yMax * sin_a); brect[5] = (int) (bbox.xMax * sin_a + bbox.yMax * cos_a); brect[6] = (int) (bbox.xMin * cos_a - bbox.yMax * sin_a); brect[7] = (int) (bbox.xMin * sin_a + bbox.yMax * cos_a); /* Scale, round and offset brect */ brect[0] = x + ROUNDUPDOWN(brect[0], d2 > 0); brect[1] = y - ROUNDUPDOWN(brect[1], d1 < 0); brect[2] = x + ROUNDUPDOWN(brect[2], d1 > 0); brect[3] = y - ROUNDUPDOWN(brect[3], d2 > 0); brect[4] = x + ROUNDUPDOWN(brect[4], d2 < 0); brect[5] = y - ROUNDUPDOWN(brect[5], d1 > 0); brect[6] = x + ROUNDUPDOWN(brect[6], d1 < 0); brect[7] = y - ROUNDUPDOWN(brect[7], d2 < 0); } pixDestroy(&pixt); return pixd; } leptonica-1.70/src/colorseg.c0000644000175000017500000005645312244221052014264 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * colorseg.c * * Unsupervised color segmentation * * PIX *pixColorSegment() * PIX *pixColorSegmentCluster() * static l_int32 pixColorSegmentTryCluster() * l_int32 pixAssignToNearestColor() * l_int32 pixColorSegmentClean() * l_int32 pixColorSegmentRemoveColors() */ #include "allheaders.h" /* Maximum allowed iterations in Phase 1. */ static const l_int32 MAX_ALLOWED_ITERATIONS = 20; /* Factor by which max dist is increased on each iteration */ static const l_float32 DIST_EXPAND_FACT = 1.3; /* Octcube division level for computing nearest colormap color using LUT. * Using 4 should suffice for up to 50 - 100 colors, and it is * very fast. Using 5 takes 8 times as long to set up the LUT * for little perceptual gain, even with 100 colors. */ static const l_int32 LEVEL_IN_OCTCUBE = 4; static l_int32 pixColorSegmentTryCluster(PIX *pixd, PIX *pixs, l_int32 maxdist, l_int32 maxcolors); #ifndef NO_CONSOLE_IO #define DEBUG 0 #endif /* ~NO_CONSOLE_IO */ /*------------------------------------------------------------------* * Unsupervised color segmentation * *------------------------------------------------------------------*/ /*! * pixColorSegment() * * Input: pixs (32 bpp; 24-bit color) * maxdist (max euclidean dist to existing cluster) * maxcolors (max number of colors allowed in first pass) * selsize (linear size of sel for closing to remove noise) * finalcolors (max number of final colors allowed after 4th pass) * Return: pixd (8 bit with colormap), or null on error * * Color segmentation proceeds in four phases: * * Phase 1: pixColorSegmentCluster() * The image is traversed in raster order. Each pixel either * becomes the representative for a new cluster or is assigned to an * existing cluster. Assignment is greedy. The data is stored in * a colormapped image. Three auxiliary arrays are used to hold * the colors of the representative pixels, for fast lookup. * The average color in each cluster is computed. * * Phase 2. pixAssignToNearestColor() * A second (non-greedy) clustering pass is performed, where each pixel * is assigned to the nearest cluster (average). We also keep track * of how many pixels are assigned to each cluster. * * Phase 3. pixColorSegmentClean() * For each cluster, starting with the largest, do a morphological * closing to eliminate small components within larger ones. * * Phase 4. pixColorSegmentRemoveColors() * Eliminate all colors except the most populated 'finalcolors'. * Then remove unused colors from the colormap, and reassign those * pixels to the nearest remaining cluster, using the original pixel values. * * Notes: * (1) The goal is to generate a small number of colors. * Typically this would be specified by 'finalcolors', * a number that would be somewhere between 3 and 6. * The parameter 'maxcolors' specifies the maximum number of * colors generated in the first phase. This should be * larger than finalcolors, perhaps twice as large. * If more than 'maxcolors' are generated in the first phase * using the input 'maxdist', the distance is repeatedly * increased by a multiplicative factor until the condition * is satisfied. The implicit relation between 'maxdist' * and 'maxcolors' is thus adjusted programmatically. * (2) As a very rough guideline, given a target value of 'finalcolors', * here are approximate values of 'maxdist' and 'maxcolors' * to start with: * * finalcolors maxcolors maxdist * ----------- --------- ------- * 3 6 100 * 4 8 90 * 5 10 75 * 6 12 60 * * For a given number of finalcolors, if you use too many * maxcolors, the result will be noisy. If you use too few, * the result will be a relatively poor assignment of colors. */ PIX * pixColorSegment(PIX *pixs, l_int32 maxdist, l_int32 maxcolors, l_int32 selsize, l_int32 finalcolors) { l_int32 *countarray; PIX *pixd; PROCNAME("pixColorSegment"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("must be rgb color", procName, NULL); /* Phase 1; original segmentation */ if ((pixd = pixColorSegmentCluster(pixs, maxdist, maxcolors)) == NULL) return (PIX *)ERROR_PTR("pixt1 not made", procName, NULL); #if DEBUG pixWrite("/tmp/colorseg1.png", pixd, IFF_PNG); #endif /* DEBUG */ /* Phase 2; refinement in pixel assignment */ if ((countarray = (l_int32 *)CALLOC(256, sizeof(l_int32))) == NULL) return (PIX *)ERROR_PTR("countarray not made", procName, NULL); pixAssignToNearestColor(pixd, pixs, NULL, LEVEL_IN_OCTCUBE, countarray); #if DEBUG pixWrite("/tmp/colorseg2.png", pixd, IFF_PNG); #endif /* DEBUG */ /* Phase 3: noise removal by separately closing each color */ pixColorSegmentClean(pixd, selsize, countarray); FREE(countarray); #if DEBUG pixWrite("/tmp/colorseg3.png", pixd, IFF_PNG); #endif /* DEBUG */ /* Phase 4: removal of colors with small population and * reassignment of pixels to remaining colors */ pixColorSegmentRemoveColors(pixd, pixs, finalcolors); return pixd; } /*! * pixColorSegmentCluster() * * Input: pixs (32 bpp; 24-bit color) * maxdist (max euclidean dist to existing cluster) * maxcolors (max number of colors allowed in first pass) * Return: pixd (8 bit with colormap), or null on error * * Notes: * (1) This is phase 1. See description in pixColorSegment(). * (2) Greedy unsupervised classification. If the limit 'maxcolors' * is exceeded, the computation is repeated with a larger * allowed cluster size. * (3) On each successive iteration, 'maxdist' is increased by a * constant factor. See comments in pixColorSegment() for * a guideline on parameter selection. * Note that the diagonal of the 8-bit rgb color cube is about * 440, so for 'maxdist' = 440, you are guaranteed to get 1 color! */ PIX * pixColorSegmentCluster(PIX *pixs, l_int32 maxdist, l_int32 maxcolors) { l_int32 w, h, newmaxdist, ret, niters, ncolors, success; PIX *pixd; PIXCMAP *cmap; PROCNAME("pixColorSegmentCluster"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (pixGetDepth(pixs) != 32) return (PIX *)ERROR_PTR("must be rgb color", procName, NULL); w = pixGetWidth(pixs); h = pixGetHeight(pixs); if ((pixd = pixCreate(w, h, 8)) == NULL) return (PIX *)ERROR_PTR("pixd not made", procName, NULL); cmap = pixcmapCreate(8); pixSetColormap(pixd, cmap); pixCopyResolution(pixd, pixs); newmaxdist = maxdist; niters = 0; success = TRUE; while (1) { ret = pixColorSegmentTryCluster(pixd, pixs, newmaxdist, maxcolors); niters++; if (!ret) { ncolors = pixcmapGetCount(cmap); L_INFO("Success with %d colors after %d iters\n", procName, ncolors, niters); break; } if (niters == MAX_ALLOWED_ITERATIONS) { L_WARNING("too many iters; newmaxdist = %d\n", procName, newmaxdist); success = FALSE; break; } newmaxdist = (l_int32)(DIST_EXPAND_FACT * (l_float32)newmaxdist); } if (!success) { pixDestroy(&pixd); return (PIX *)ERROR_PTR("failure in phase 1", procName, NULL); } return pixd; } /*! * pixColorSegmentTryCluster() * * Input: pixd * pixs * maxdist * maxcolors * Return: 0 if OK, 1 on error * * Note: This function should only be called from pixColorSegCluster() */ static l_int32 pixColorSegmentTryCluster(PIX *pixd, PIX *pixs, l_int32 maxdist, l_int32 maxcolors) { l_int32 rmap[256], gmap[256], bmap[256]; l_int32 w, h, wpls, wpld, i, j, k, found, ret, index, ncolors; l_int32 rval, gval, bval, dist2, maxdist2; l_int32 countarray[256]; l_int32 rsum[256], gsum[256], bsum[256]; l_uint32 *ppixel; l_uint32 *datas, *datad, *lines, *lined; PIXCMAP *cmap; PROCNAME("pixColorSegmentTryCluster"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); w = pixGetWidth(pixs); h = pixGetHeight(pixs); maxdist2 = maxdist * maxdist; cmap = pixGetColormap(pixd); pixcmapClear(cmap); for (k = 0; k < 256; k++) { rsum[k] = gsum[k] = bsum[k] = 0; rmap[k] = gmap[k] = bmap[k] = 0; } datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; for (j = 0; j < w; j++) { ppixel = lines + j; rval = GET_DATA_BYTE(ppixel, COLOR_RED); gval = GET_DATA_BYTE(ppixel, COLOR_GREEN); bval = GET_DATA_BYTE(ppixel, COLOR_BLUE); ncolors = pixcmapGetCount(cmap); found = FALSE; for (k = 0; k < ncolors; k++) { dist2 = (rval - rmap[k]) * (rval - rmap[k]) + (gval - gmap[k]) * (gval - gmap[k]) + (bval - bmap[k]) * (bval - bmap[k]); if (dist2 <= maxdist2) { /* take it; greedy */ found = TRUE; SET_DATA_BYTE(lined, j, k); countarray[k]++; rsum[k] += rval; gsum[k] += gval; bsum[k] += bval; break; } } if (!found) { /* Add a new color */ ret = pixcmapAddNewColor(cmap, rval, gval, bval, &index); /* fprintf(stderr, "index = %d, (i,j) = (%d,%d), rgb = (%d, %d, %d)\n", index, i, j, rval, gval, bval); */ if (ret == 0 && index < maxcolors) { countarray[index] = 1; SET_DATA_BYTE(lined, j, index); rmap[index] = rval; gmap[index] = gval; bmap[index] = bval; rsum[index] = rval; gsum[index] = gval; bsum[index] = bval; } else { L_INFO("maxcolors exceeded for maxdist = %d\n", procName, maxdist); return 1; } } } } /* Replace the colors in the colormap by the averages */ for (k = 0; k < ncolors; k++) { rval = rsum[k] / countarray[k]; gval = gsum[k] / countarray[k]; bval = bsum[k] / countarray[k]; pixcmapResetColor(cmap, k, rval, gval, bval); } return 0; } /*! * pixAssignToNearestColor() * * Input: pixd (8 bpp, colormapped) * pixs (32 bpp; 24-bit color) * pixm ( 1 bpp) * level (of octcube used for finding nearest color in cmap) * countarray ( ptr to array, in which we can store * the number of pixels found in each color in * the colormap in pixd) * Return: 0 if OK, 1 on error * * Notes: * (1) This is used in phase 2 of color segmentation, where pixs * is the original input image to pixColorSegment(), and * pixd is the colormapped image returned from * pixColorSegmentCluster(). It is also used, with a mask, * in phase 4. * (2) This is an in-place operation. * (3) The colormap in pixd is unchanged. * (4) pixs and pixd must be the same size (w, h). * (5) The selection mask pixm can be null. If it exists, it must * be the same size as pixs and pixd, and only pixels * corresponding to fg in pixm are assigned. Set to * NULL if all pixels in pixd are to be assigned. * (6) The countarray can be null. If it exists, it is pre-allocated * and of a size at least equal to the size of the colormap in pixd. * (7) This does a best-fit (non-greedy) assignment of pixels to * existing clusters. Specifically, it assigns each pixel * in pixd to the color index in the pixd colormap that has a * color closest to the corresponding rgb pixel in pixs. * (8) 'level' is the octcube level used to quickly find the nearest * color in the colormap for each pixel. For color segmentation, * this parameter is set to LEVEL_IN_OCTCUBE. * (9) We build a mapping table from octcube to colormap index so * that this function can run in a time (otherwise) independent * of the number of colors in the colormap. This avoids a * brute-force search for the closest colormap color to each * pixel in the image. */ l_int32 pixAssignToNearestColor(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 level, l_int32 *countarray) { l_int32 w, h, wpls, wpld, wplm, i, j; l_int32 rval, gval, bval, index; l_int32 *cmaptab; l_uint32 octindex; l_uint32 *rtab, *gtab, *btab; l_uint32 *ppixel; l_uint32 *datas, *datad, *datam, *lines, *lined, *linem; PIXCMAP *cmap; PROCNAME("pixAssignToNearestColor"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if ((cmap = pixGetColormap(pixd)) == NULL) return ERROR_INT("cmap not found", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 32) return ERROR_INT("pixs not 32 bpp", procName, 1); /* Set up the tables to map rgb to the nearest colormap index */ if (makeRGBToIndexTables(&rtab, >ab, &btab, level)) return ERROR_INT("index tables not made", procName, 1); if ((cmaptab = pixcmapToOctcubeLUT(cmap, level, L_MANHATTAN_DISTANCE)) == NULL) return ERROR_INT("cmaptab not made", procName, 1); w = pixGetWidth(pixs); h = pixGetHeight(pixs); datas = pixGetData(pixs); datad = pixGetData(pixd); wpls = pixGetWpl(pixs); wpld = pixGetWpl(pixd); if (pixm) { datam = pixGetData(pixm); wplm = pixGetWpl(pixm); } for (i = 0; i < h; i++) { lines = datas + i * wpls; lined = datad + i * wpld; if (pixm) linem = datam + i * wplm; for (j = 0; j < w; j++) { if (pixm) { if (!GET_DATA_BIT(linem, j)) continue; } ppixel = lines + j; rval = GET_DATA_BYTE(ppixel, COLOR_RED); gval = GET_DATA_BYTE(ppixel, COLOR_GREEN); bval = GET_DATA_BYTE(ppixel, COLOR_BLUE); /* Map from rgb to octcube index */ getOctcubeIndexFromRGB(rval, gval, bval, rtab, gtab, btab, &octindex); /* Map from octcube index to nearest colormap index */ index = cmaptab[octindex]; if (countarray) countarray[index]++; SET_DATA_BYTE(lined, j, index); } } FREE(cmaptab); FREE(rtab); FREE(gtab); FREE(btab); return 0; } /*! * pixColorSegmentClean() * * Input: pixs (8 bpp, colormapped) * selsize (for closing) * countarray (ptr to array containing the number of pixels * found in each color in the colormap) * Return: 0 if OK, 1 on error * * Notes: * (1) This operation is in-place. * (2) This is phase 3 of color segmentation. It is the first * part of a two-step noise removal process. Colors with a * large population are closed first; this operation absorbs * small sets of intercolated pixels of a different color. */ l_int32 pixColorSegmentClean(PIX *pixs, l_int32 selsize, l_int32 *countarray) { l_int32 i, ncolors, val; l_uint32 val32; NUMA *na, *nasi; PIX *pixt1, *pixt2; PIXCMAP *cmap; PROCNAME("pixColorSegmentClean"); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); if (pixGetDepth(pixs) != 8) return ERROR_INT("pixs not 8 bpp", procName, 1); if ((cmap = pixGetColormap(pixs)) == NULL) return ERROR_INT("cmap not found", procName, 1); if (!countarray) return ERROR_INT("countarray not defined", procName, 1); if (selsize <= 1) return 0; /* nothing to do */ /* Sort colormap indices in decreasing order of pixel population */ ncolors = pixcmapGetCount(cmap); na = numaCreate(ncolors); for (i = 0; i < ncolors; i++) numaAddNumber(na, countarray[i]); if ((nasi = numaGetSortIndex(na, L_SORT_DECREASING)) == NULL) return ERROR_INT("nasi not made", procName, 1); /* For each color, in order of decreasing population, * do a closing and absorb the added pixels. Note that * if the closing removes pixels at the border, they'll * still appear in the xor and will be properly (re)set. */ for (i = 0; i < ncolors; i++) { numaGetIValue(nasi, i, &val); pixt1 = pixGenerateMaskByValue(pixs, val, 1); pixt2 = pixCloseSafeCompBrick(NULL, pixt1, selsize, selsize); pixXor(pixt2, pixt2, pixt1); /* pixels to be added to type 'val' */ pixcmapGetColor32(cmap, val, &val32); pixSetMasked(pixs, pixt2, val32); /* add them */ pixDestroy(&pixt1); pixDestroy(&pixt2); } numaDestroy(&na); numaDestroy(&nasi); return 0; } /*! * pixColorSegmentRemoveColors() * * Input: pixd (8 bpp, colormapped) * pixs (32 bpp rgb, with initial pixel values) * finalcolors (max number of colors to retain) * Return: 0 if OK, 1 on error * * Notes: * (1) This operation is in-place. * (2) This is phase 4 of color segmentation, and the second part * of the 2-step noise removal. Only 'finalcolors' different * colors are retained, with colors with smaller populations * being replaced by the nearest color of the remaining colors. * For highest accuracy, for pixels that are being replaced, * we find the nearest colormap color to the original rgb color. */ l_int32 pixColorSegmentRemoveColors(PIX *pixd, PIX *pixs, l_int32 finalcolors) { l_int32 i, ncolors, index, tempindex; l_int32 *tab; l_uint32 tempcolor; NUMA *na, *nasi; PIX *pixm; PIXCMAP *cmap; PROCNAME("pixColorSegmentRemoveColors"); if (!pixd) return ERROR_INT("pixd not defined", procName, 1); if (pixGetDepth(pixd) != 8) return ERROR_INT("pixd not 8 bpp", procName, 1); if ((cmap = pixGetColormap(pixd)) == NULL) return ERROR_INT("cmap not found", procName, 1); if (!pixs) return ERROR_INT("pixs not defined", procName, 1); ncolors = pixcmapGetCount(cmap); if (finalcolors >= ncolors) /* few enough colors already; nothing to do */ return 0; /* Generate a mask over all pixels that are not in the * 'finalcolors' most populated colors. Save the colormap * index of any one of the retained colors in 'tempindex'. * The LUT has values 0 for the 'finalcolors' most populated colors, * which will be retained; and 1 for the rest, which are marked * by fg pixels in pixm and will be removed. */ na = pixGetCmapHistogram(pixd, 1); if ((nasi = numaGetSortIndex(na, L_SORT_DECREASING)) == NULL) { numaDestroy(&na); return ERROR_INT("nasi not made", procName, 1); } numaGetIValue(nasi, finalcolors - 1, &tempindex); /* retain down to this */ pixcmapGetColor32(cmap, tempindex, &tempcolor); /* use this color */ tab = (l_int32 *)CALLOC(256, sizeof(l_int32)); for (i = finalcolors; i < ncolors; i++) { numaGetIValue(nasi, i, &index); tab[index] = 1; } pixm = pixMakeMaskFromLUT(pixd, tab); FREE(tab); /* Reassign the masked pixels temporarily to the saved index * (tempindex). This guarantees that no pixels are labeled by * a colormap index of any colors that will be removed. * The actual value doesn't matter, as long as it's one * of the retained colors, because these pixels will later * be reassigned based on the full set of colors retained * in the colormap. */ pixSetMasked(pixd, pixm, tempcolor); /* Now remove unused colors from the colormap. This reassigns * image pixels as required. */ pixRemoveUnusedColors(pixd); /* Finally, reassign the pixels under the mask (those that were * given a 'tempindex' value) to the nearest color in the colormap. * This is the function used in phase 2 on all image pixels; here * it is only used on the masked pixels given by pixm. */ pixAssignToNearestColor(pixd, pixs, pixm, LEVEL_IN_OCTCUBE, NULL); pixDestroy(&pixm); numaDestroy(&na); numaDestroy(&nasi); return 0; } leptonica-1.70/src/morphseq.c0000644000175000017500000012400611707052573014310 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * morphseq.c * * Run a sequence of binary rasterop morphological operations * PIX *pixMorphSequence() * * Run a sequence of binary composite rasterop morphological operations * PIX *pixMorphCompSequence() * * Run a sequence of binary dwa morphological operations * PIX *pixMorphSequenceDwa() * * Run a sequence of binary composite dwa morphological operations * PIX *pixMorphCompSequenceDwa() * * Parser verifier for binary morphological operations * l_int32 morphSequenceVerify() * * Run a sequence of grayscale morphological operations * PIX *pixGrayMorphSequence() * * Run a sequence of color morphological operations * PIX *pixColorMorphSequence() */ #include #include "allheaders.h" /*-------------------------------------------------------------------------* * Run a sequence of binary rasterop morphological operations * *-------------------------------------------------------------------------*/ /*! * pixMorphSequence() * * Input: pixs * sequence (string specifying sequence) * dispsep (controls debug display of each result in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming) * Return: pixd, or null on error * * Notes: * (1) This does rasterop morphology on binary images. * (2) This runs a pipeline of operations; no branching is allowed. * (3) This only uses brick Sels, which are created on the fly. * In the future this will be generalized to extract Sels from * a Sela by name. * (4) A new image is always produced; the input image is not changed. * (5) This contains an interpreter, allowing sequences to be * generated and run. * (6) The format of the sequence string is defined below. * (7) In addition to morphological operations, rank order reduction * and replicated expansion allow operations to take place * downscaled by a power of 2. * (8) Intermediate results can optionally be displayed. * (9) Thanks to Dar-Shyang Lee, who had the idea for this and * built the first implementation. * (10) The sequence string is formatted as follows: * - An arbitrary number of operations, each separated * by a '+' character. White space is ignored. * - Each operation begins with a case-independent character * specifying the operation: * d or D (dilation) * e or E (erosion) * o or O (opening) * c or C (closing) * r or R (rank binary reduction) * x or X (replicative binary expansion) * b or B (add a border of 0 pixels of this size) * - The args to the morphological operations are bricks of hits, * and are formatted as a.b, where a and b are horizontal and * vertical dimensions, rsp. * - The args to the reduction are a sequence of up to 4 integers, * each from 1 to 4. * - The arg to the expansion is a power of two, in the set * {2, 4, 8, 16}. * (11) An example valid sequence is: * "b32 + o1.3 + C3.1 + r23 + e2.2 + D3.2 + X4" * In this example, the following operation sequence is carried out: * * b32: Add a 32 pixel border around the input image * * o1.3: Opening with vert sel of length 3 (e.g., 1 x 3) * * C3.1: Closing with horiz sel of length 3 (e.g., 3 x 1) * * r23: Two successive 2x2 reductions with rank 2 in the first * and rank 3 in the second. The result is a 4x reduced pix. * * e2.2: Erosion with a 2x2 sel (origin will be at x,y: 0,0) * * d3.2: Dilation with a 3x2 sel (origin will be at x,y: 1,0) * * X4: 4x replicative expansion, back to original resolution * (12) The safe closing is used. However, if you implement a * closing as separable dilations followed by separable erosions, * it will not be safe. For that situation, you need to add * a sufficiently large border as the first operation in * the sequence. This will be removed automatically at the * end. There are two cautions: * - When computing what is sufficient, remember that if * reductions are carried out, the border is also reduced. * - The border is removed at the end, so if a border is * added at the beginning, the result must be at the * same resolution as the input! */ PIX * pixMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op, *fname; char buf[256]; l_int32 nops, i, j, nred, fact, w, h, x, y, border, pdfout; l_int32 level[4]; PIX *pixt1, *pixt2; PIXA *pixa; SARRAY *sa; PROCNAME("pixMorphSequence"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/seq_output_%d.pdf", L_ABS(dispsep)); fname = genPathname(buf, NULL); } border = 0; pixt1 = pixCopy(NULL, pixs); pixt2 = NULL; x = y = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixDilateBrick(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixErodeBrick(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenBrick(pixt1, pixt1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseSafeBrick(pixt1, pixt1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pixt2 = pixReduceRankBinaryCascade(pixt1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pixt2 = pixExpandReplicate(pixt1, fact); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pixt2 = pixAddBorder(pixt1, border, 0); pixSwapAndDestroy(&pixt1, &pixt2); break; default: /* All invalid ops are caught in the first pass */ break; } FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pixt1, x, y); x += dispsep; } if (pdfout) pixaAddPix(pixa, pixt1, L_COPY); } if (border > 0) { pixt2 = pixRemoveBorder(pixt1, border); pixSwapAndDestroy(&pixt1, &pixt2); } if (pdfout) { pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); FREE(fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pixt1; } /*-------------------------------------------------------------------------* * Run a sequence of binary composite rasterop morphological operations * *-------------------------------------------------------------------------*/ /*! * pixMorphCompSequence() * * Input: pixs * sequence (string specifying sequence) * dispsep (controls debug display of each result in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming) * Return: pixd, or null on error * * Notes: * (1) This does rasterop morphology on binary images, using composite * operations for extra speed on large Sels. * (2) Safe closing is used atomically. However, if you implement a * closing as a sequence with a dilation followed by an * erosion, it will not be safe, and to ensure that you have * no boundary effects you must add a border in advance and * remove it at the end. * (3) For other usage details, see the notes for pixMorphSequence(). * (4) The sequence string is formatted as follows: * - An arbitrary number of operations, each separated * by a '+' character. White space is ignored. * - Each operation begins with a case-independent character * specifying the operation: * d or D (dilation) * e or E (erosion) * o or O (opening) * c or C (closing) * r or R (rank binary reduction) * x or X (replicative binary expansion) * b or B (add a border of 0 pixels of this size) * - The args to the morphological operations are bricks of hits, * and are formatted as a.b, where a and b are horizontal and * vertical dimensions, rsp. * - The args to the reduction are a sequence of up to 4 integers, * each from 1 to 4. * - The arg to the expansion is a power of two, in the set * {2, 4, 8, 16}. */ PIX * pixMorphCompSequence(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op, *fname; char buf[256]; l_int32 nops, i, j, nred, fact, w, h, x, y, border, pdfout; l_int32 level[4]; PIX *pixt1, *pixt2; PIXA *pixa; SARRAY *sa; PROCNAME("pixMorphCompSequence"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/seq_output_%d.pdf", L_ABS(dispsep)); fname = genPathname(buf, NULL); } border = 0; pixt1 = pixCopy(NULL, pixs); pixt2 = NULL; x = y = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixDilateCompBrick(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixErodeCompBrick(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenCompBrick(pixt1, pixt1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseSafeCompBrick(pixt1, pixt1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pixt2 = pixReduceRankBinaryCascade(pixt1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pixt2 = pixExpandReplicate(pixt1, fact); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pixt2 = pixAddBorder(pixt1, border, 0); pixSwapAndDestroy(&pixt1, &pixt2); break; default: /* All invalid ops are caught in the first pass */ break; } FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pixt1, x, y); x += dispsep; } if (pdfout) pixaAddPix(pixa, pixt1, L_COPY); } if (border > 0) { pixt2 = pixRemoveBorder(pixt1, border); pixSwapAndDestroy(&pixt1, &pixt2); } if (pdfout) { pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); FREE(fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pixt1; } /*-------------------------------------------------------------------------* * Run a sequence of binary dwa morphological operations * *-------------------------------------------------------------------------*/ /*! * pixMorphSequenceDwa() * * Input: pixs * sequence (string specifying sequence) * dispsep (controls debug display of each result in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming) * Return: pixd, or null on error * * Notes: * (1) This does dwa morphology on binary images. * (2) This runs a pipeline of operations; no branching is allowed. * (3) This only uses brick Sels that have been pre-compiled with * dwa code. * (4) A new image is always produced; the input image is not changed. * (5) This contains an interpreter, allowing sequences to be * generated and run. * (6) See pixMorphSequence() for further information about usage. */ PIX * pixMorphSequenceDwa(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op, *fname; char buf[256]; l_int32 nops, i, j, nred, fact, w, h, x, y, border, pdfout; l_int32 level[4]; PIX *pixt1, *pixt2; PIXA *pixa; SARRAY *sa; PROCNAME("pixMorphSequenceDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/seq_output_%d.pdf", L_ABS(dispsep)); fname = genPathname(buf, NULL); } border = 0; pixt1 = pixCopy(NULL, pixs); pixt2 = NULL; x = y = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixDilateBrickDwa(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixErodeBrickDwa(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenBrickDwa(pixt1, pixt1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseBrickDwa(pixt1, pixt1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pixt2 = pixReduceRankBinaryCascade(pixt1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pixt2 = pixExpandReplicate(pixt1, fact); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pixt2 = pixAddBorder(pixt1, border, 0); pixSwapAndDestroy(&pixt1, &pixt2); break; default: /* All invalid ops are caught in the first pass */ break; } FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pixt1, x, y); x += dispsep; } if (pdfout) pixaAddPix(pixa, pixt1, L_COPY); } if (border > 0) { pixt2 = pixRemoveBorder(pixt1, border); pixSwapAndDestroy(&pixt1, &pixt2); } if (pdfout) { pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); FREE(fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pixt1; } /*-------------------------------------------------------------------------* * Run a sequence of binary composite dwa morphological operations * *-------------------------------------------------------------------------*/ /*! * pixMorphCompSequenceDwa() * * Input: pixs * sequence (string specifying sequence) * dispsep (controls debug display of each result in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming) * Return: pixd, or null on error * * Notes: * (1) This does dwa morphology on binary images, using brick Sels. * (2) This runs a pipeline of operations; no branching is allowed. * (3) It implements all brick Sels that have dimensions up to 63 * on each side, using a composite (linear + comb) when useful. * (4) A new image is always produced; the input image is not changed. * (5) This contains an interpreter, allowing sequences to be * generated and run. * (6) See pixMorphSequence() for further information about usage. */ PIX * pixMorphCompSequenceDwa(PIX *pixs, const char *sequence, l_int32 dispsep) { char *rawop, *op, *fname; char buf[256]; l_int32 nops, i, j, nred, fact, w, h, x, y, border, pdfout; l_int32 level[4]; PIX *pixt1, *pixt2; PIXA *pixa; SARRAY *sa; PROCNAME("pixMorphCompSequenceDwa"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; if (!morphSequenceVerify(sa)) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence not valid", procName, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/seq_output_%d.pdf", L_ABS(dispsep)); fname = genPathname(buf, NULL); } border = 0; pixt1 = pixCopy(NULL, pixs); pixt2 = NULL; x = y = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixDilateCompBrickDwa(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixErodeCompBrickDwa(NULL, pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixOpenCompBrickDwa(pixt1, pixt1, w, h); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixCloseCompBrickDwa(pixt1, pixt1, w, h); break; case 'r': case 'R': nred = strlen(op) - 1; for (j = 0; j < nred; j++) level[j] = op[j + 1] - '0'; for (j = nred; j < 4; j++) level[j] = 0; pixt2 = pixReduceRankBinaryCascade(pixt1, level[0], level[1], level[2], level[3]); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'x': case 'X': sscanf(&op[1], "%d", &fact); pixt2 = pixExpandReplicate(pixt1, fact); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'b': case 'B': sscanf(&op[1], "%d", &border); pixt2 = pixAddBorder(pixt1, border, 0); pixSwapAndDestroy(&pixt1, &pixt2); break; default: /* All invalid ops are caught in the first pass */ break; } FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pixt1, x, y); x += dispsep; } if (pdfout) pixaAddPix(pixa, pixt1, L_COPY); } if (border > 0) { pixt2 = pixRemoveBorder(pixt1, border); pixSwapAndDestroy(&pixt1, &pixt2); } if (pdfout) { pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); FREE(fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pixt1; } /*-------------------------------------------------------------------------* * Parser verifier for binary morphological operations * *-------------------------------------------------------------------------*/ /*! * morphSequenceVerify() * * Input: sarray (of operation sequence) * Return: TRUE if valid; FALSE otherwise or on error * * Notes: * (1) This does verification of valid binary morphological * operation sequences. * (2) See pixMorphSequence() for notes on valid operations * in the sequence. */ l_int32 morphSequenceVerify(SARRAY *sa) { char *rawop, *op; l_int32 nops, i, j, nred, fact, valid, w, h, netred, border; l_int32 level[4]; l_int32 intlogbase2[5] = {1, 2, 3, 0, 4}; /* of arg/4 */ PROCNAME("morphSequenceVerify"); if (!sa) return ERROR_INT("sa not defined", procName, FALSE); nops = sarrayGetCount(sa); valid = TRUE; netred = 0; border = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': case 'e': case 'E': case 'o': case 'O': case 'c': case 'C': if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { fprintf(stderr, "*** op: %s invalid\n", op); valid = FALSE; break; } if (w <= 0 || h <= 0) { fprintf(stderr, "*** op: %s; w = %d, h = %d; must both be > 0\n", op, w, h); valid = FALSE; break; } /* fprintf(stderr, "op = %s; w = %d, h = %d\n", op, w, h); */ break; case 'r': case 'R': nred = strlen(op) - 1; netred += nred; if (nred < 1 || nred > 4) { fprintf(stderr, "*** op = %s; num reduct = %d; must be in {1,2,3,4}\n", op, nred); valid = FALSE; break; } for (j = 0; j < nred; j++) { level[j] = op[j + 1] - '0'; if (level[j] < 1 || level[j] > 4) { fprintf(stderr, "*** op = %s; level[%d] = %d is invalid\n", op, j, level[j]); valid = FALSE; break; } } if (!valid) break; /* fprintf(stderr, "op = %s", op); */ for (j = 0; j < nred; j++) { level[j] = op[j + 1] - '0'; /* fprintf(stderr, ", level[%d] = %d", j, level[j]); */ } /* fprintf(stderr, "\n"); */ break; case 'x': case 'X': if (sscanf(&op[1], "%d", &fact) != 1) { fprintf(stderr, "*** op: %s; fact invalid\n", op); valid = FALSE; break; } if (fact != 2 && fact != 4 && fact != 8 && fact != 16) { fprintf(stderr, "*** op = %s; invalid fact = %d\n", op, fact); valid = FALSE; break; } netred -= intlogbase2[fact / 4]; /* fprintf(stderr, "op = %s; fact = %d\n", op, fact); */ break; case 'b': case 'B': if (sscanf(&op[1], "%d", &fact) != 1) { fprintf(stderr, "*** op: %s; fact invalid\n", op); valid = FALSE; break; } if (i > 0) { fprintf(stderr, "*** op = %s; must be first op\n", op); valid = FALSE; break; } if (fact < 1) { fprintf(stderr, "*** op = %s; invalid fact = %d\n", op, fact); valid = FALSE; break; } border = fact; /* fprintf(stderr, "op = %s; fact = %d\n", op, fact); */ break; default: fprintf(stderr, "*** nonexistent op = %s\n", op); valid = FALSE; } FREE(op); } if (border != 0 && netred != 0) { fprintf(stderr, "*** op = %s; border added but net reduction not 0\n", op); valid = FALSE; } return valid; } /*-----------------------------------------------------------------* * Run a sequence of grayscale morphological operations * *-----------------------------------------------------------------*/ /*! * pixGrayMorphSequence() * * Input: pixs * sequence (string specifying sequence) * dispsep (controls debug display of each result in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming) * dispy (if dispsep > 0, this gives the y-value of the * UL corner for display; otherwise it is ignored) * Return: pixd, or null on error * * Notes: * (1) This works on 8 bpp grayscale images. * (2) This runs a pipeline of operations; no branching is allowed. * (3) This only uses brick SELs. * (4) A new image is always produced; the input image is not changed. * (5) This contains an interpreter, allowing sequences to be * generated and run. * (6) The format of the sequence string is defined below. * (7) In addition to morphological operations, the composite * morph/subtract tophat can be performed. * (8) Sel sizes (width, height) must each be odd numbers. * (9) Intermediate results can optionally be displayed * (10) The sequence string is formatted as follows: * - An arbitrary number of operations, each separated * by a '+' character. White space is ignored. * - Each operation begins with a case-independent character * specifying the operation: * d or D (dilation) * e or E (erosion) * o or O (opening) * c or C (closing) * t or T (tophat) * - The args to the morphological operations are bricks of hits, * and are formatted as a.b, where a and b are horizontal and * vertical dimensions, rsp. (each must be an odd number) * - The args to the tophat are w or W (for white tophat) * or b or B (for black tophat), followed by a.b as for * the dilation, erosion, opening and closing. * Example valid sequences are: * "c5.3 + o7.5" * "c9.9 + tw9.9" */ PIX * pixGrayMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy) { char *rawop, *op, *fname; char buf[256]; l_int32 nops, i, valid, w, h, x, pdfout; PIX *pixt1, *pixt2; PIXA *pixa; SARRAY *sa; PROCNAME("pixGrayMorphSequence"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; /* Verify that the operation sequence is valid */ valid = TRUE; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': case 'e': case 'E': case 'o': case 'O': case 'c': case 'C': if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { fprintf(stderr, "*** op: %s invalid\n", op); valid = FALSE; break; } if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { fprintf(stderr, "*** op: %s; w = %d, h = %d; must both be odd\n", op, w, h); valid = FALSE; break; } /* fprintf(stderr, "op = %s; w = %d, h = %d\n", op, w, h); */ break; case 't': case 'T': if (op[1] != 'w' && op[1] != 'W' && op[1] != 'b' && op[1] != 'B') { fprintf(stderr, "*** op = %s; arg %c must be 'w' or 'b'\n", op, op[1]); valid = FALSE; break; } sscanf(&op[2], "%d.%d", &w, &h); if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { fprintf(stderr, "*** op: %s; w = %d, h = %d; must both be odd\n", op, w, h); valid = FALSE; break; } /* fprintf(stderr, "op = %s", op); */ break; default: fprintf(stderr, "*** nonexistent op = %s\n", op); valid = FALSE; } FREE(op); } if (!valid) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence invalid", procName, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/seq_output_%d.pdf", L_ABS(dispsep)); fname = genPathname(buf, NULL); } pixt1 = pixCopy(NULL, pixs); pixt2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixDilateGray(pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixErodeGray(pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixOpenGray(pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixCloseGray(pixt1, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 't': case 'T': sscanf(&op[2], "%d.%d", &w, &h); if (op[1] == 'w' || op[1] == 'W') pixt2 = pixTophat(pixt1, w, h, L_TOPHAT_WHITE); else /* 'b' or 'B' */ pixt2 = pixTophat(pixt1, w, h, L_TOPHAT_BLACK); pixSwapAndDestroy(&pixt1, &pixt2); break; default: /* All invalid ops are caught in the first pass */ break; } FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pixt1, x, dispy); x += dispsep; } if (pdfout) pixaAddPix(pixa, pixt1, L_COPY); } if (pdfout) { pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); FREE(fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pixt1; } /*-----------------------------------------------------------------* * Run a sequence of color morphological operations * *-----------------------------------------------------------------*/ /*! * pixColorMorphSequence() * * Input: pixs * sequence (string specifying sequence) * dispsep (controls debug display of each result in the sequence: * 0: no output * > 0: gives horizontal separation in pixels between * successive displays * < 0: pdf output; abs(dispsep) is used for naming) * dispy (if dispsep > 0, this gives the y-value of the * UL corner for display; otherwise it is ignored) * Return: pixd, or null on error * * Notes: * (1) This works on 32 bpp rgb images. * (2) Each component is processed separately. * (3) This runs a pipeline of operations; no branching is allowed. * (4) This only uses brick SELs. * (5) A new image is always produced; the input image is not changed. * (6) This contains an interpreter, allowing sequences to be * generated and run. * (7) Sel sizes (width, height) must each be odd numbers. * (8) The format of the sequence string is defined below. * (9) Intermediate results can optionally be displayed. * (10) The sequence string is formatted as follows: * - An arbitrary number of operations, each separated * by a '+' character. White space is ignored. * - Each operation begins with a case-independent character * specifying the operation: * d or D (dilation) * e or E (erosion) * o or O (opening) * c or C (closing) * - The args to the morphological operations are bricks of hits, * and are formatted as a.b, where a and b are horizontal and * vertical dimensions, rsp. (each must be an odd number) * Example valid sequences are: * "c5.3 + o7.5" * "D9.1" */ PIX * pixColorMorphSequence(PIX *pixs, const char *sequence, l_int32 dispsep, l_int32 dispy) { char *rawop, *op, *fname; char buf[256]; l_int32 nops, i, valid, w, h, x, pdfout; PIX *pixt1, *pixt2; PIXA *pixa; SARRAY *sa; PROCNAME("pixColorMorphSequence"); if (!pixs) return (PIX *)ERROR_PTR("pixs not defined", procName, NULL); if (!sequence) return (PIX *)ERROR_PTR("sequence not defined", procName, NULL); /* Split sequence into individual operations */ sa = sarrayCreate(0); sarraySplitString(sa, sequence, "+"); nops = sarrayGetCount(sa); pdfout = (dispsep < 0) ? 1 : 0; /* Verify that the operation sequence is valid */ valid = TRUE; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': case 'e': case 'E': case 'o': case 'O': case 'c': case 'C': if (sscanf(&op[1], "%d.%d", &w, &h) != 2) { fprintf(stderr, "*** op: %s invalid\n", op); valid = FALSE; break; } if (w < 1 || (w & 1) == 0 || h < 1 || (h & 1) == 0 ) { fprintf(stderr, "*** op: %s; w = %d, h = %d; must both be odd\n", op, w, h); valid = FALSE; break; } /* fprintf(stderr, "op = %s; w = %d, h = %d\n", op, w, h); */ break; default: fprintf(stderr, "*** nonexistent op = %s\n", op); valid = FALSE; } FREE(op); } if (!valid) { sarrayDestroy(&sa); return (PIX *)ERROR_PTR("sequence invalid", procName, NULL); } /* Parse and operate */ pixa = NULL; if (pdfout) { pixa = pixaCreate(0); pixaAddPix(pixa, pixs, L_CLONE); snprintf(buf, sizeof(buf), "/tmp/seq_output_%d.pdf", L_ABS(dispsep)); fname = genPathname(buf, NULL); } pixt1 = pixCopy(NULL, pixs); pixt2 = NULL; x = 0; for (i = 0; i < nops; i++) { rawop = sarrayGetString(sa, i, 0); op = stringRemoveChars(rawop, " \n\t"); switch (op[0]) { case 'd': case 'D': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixColorMorph(pixt1, L_MORPH_DILATE, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'e': case 'E': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixColorMorph(pixt1, L_MORPH_ERODE, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'o': case 'O': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixColorMorph(pixt1, L_MORPH_OPEN, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; case 'c': case 'C': sscanf(&op[1], "%d.%d", &w, &h); pixt2 = pixColorMorph(pixt1, L_MORPH_CLOSE, w, h); pixSwapAndDestroy(&pixt1, &pixt2); break; default: /* All invalid ops are caught in the first pass */ break; } FREE(op); /* Debug output */ if (dispsep > 0) { pixDisplay(pixt1, x, dispy); x += dispsep; } if (pdfout) pixaAddPix(pixa, pixt1, L_COPY); } if (pdfout) { pixaConvertToPdf(pixa, 0, 1.0, L_FLATE_ENCODE, 0, fname, fname); FREE(fname); pixaDestroy(&pixa); } sarrayDestroy(&sa); return pixt1; } leptonica-1.70/src/bmf.h0000644000175000017500000000577112270566066013235 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ #ifndef LEPTONICA_BMF_H #define LEPTONICA_BMF_H /* * bmf.h * * Simple data structure to hold bitmap fonts and related data */ /* Constants for deciding when text block is divided into paragraphs */ enum { SPLIT_ON_LEADING_WHITE = 1, /* tab or space at beginning of line */ SPLIT_ON_BLANK_LINE = 2, /* newline with optional white space */ SPLIT_ON_BOTH = 3 /* leading white space or newline */ }; struct L_Bmf { struct Pixa *pixa; /* pixa of bitmaps for 93 characters */ l_int32 size; /* font size (in points at 300 ppi) */ char *directory; /* directory containing font bitmaps */ l_int32 baseline1; /* baseline offset for ascii 33 - 57 */ l_int32 baseline2; /* baseline offset for ascii 58 - 91 */ l_int32 baseline3; /* baseline offset for ascii 93 - 126 */ l_int32 lineheight; /* max height of line of chars */ l_int32 kernwidth; /* pixel dist between char bitmaps */ l_int32 spacewidth; /* pixel dist between word bitmaps */ l_int32 vertlinesep; /* extra vertical space between text lines */ l_int32 *fonttab; /* table mapping ascii --> font index */ l_int32 *baselinetab; /* table mapping ascii --> baseline offset */ l_int32 *widthtab; /* table mapping ascii --> char width */ }; typedef struct L_Bmf L_BMF; #endif /* LEPTONICA_BMF_H */ leptonica-1.70/src/boxfunc2.c0000644000175000017500000014716412244216761014210 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * boxfunc2.c * * Boxa/Box transform (shift, scale) and orthogonal rotation * BOXA *boxaTransform() * BOX *boxTransform() * BOXA *boxaTransformOrdered() * BOX *boxTransformOrdered() * BOXA *boxaRotateOrth() * BOX *boxRotateOrth() * * Boxa sort * BOXA *boxaSort() * BOXA *boxaBinSort() * BOXA *boxaSortByIndex() * BOXAA *boxaSort2d() * BOXAA *boxaSort2dByIndex() * * Boxa statistics * BOX *boxaGetRankSize() * BOX *boxaGetMedian() * * Boxa array extraction * l_int32 boxaExtractAsNuma() * l_int32 boxaExtractAsPta() * * Other Boxaa functions * l_int32 boxaaGetExtent() * BOXA *boxaaFlattenToBoxa() * BOXA *boxaaFlattenAligned() * BOXAA *boxaEncapsulateAligned() * l_int32 boxaaAlignBox() */ #include #include "allheaders.h" /* For more than this number of c.c. in a binarized image of * semi-perimeter (w + h) about 5000 or less, the O(n) binsort * is faster than the O(nlogn) shellsort. */ static const l_int32 MIN_COMPS_FOR_BIN_SORT = 200; /*---------------------------------------------------------------------* * Boxa/Box transform (shift, scale) and orthogonal rotation * *---------------------------------------------------------------------*/ /*! * boxaTransform() * * Input: boxa * shiftx, shifty * scalex, scaley * Return: boxad, or null on error * * Notes: * (1) This is a very simple function that first shifts, then scales. */ BOXA * boxaTransform(BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley) { l_int32 i, n; BOX *boxs, *boxd; BOXA *boxad; PROCNAME("boxaTransform"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); n = boxaGetCount(boxas); if ((boxad = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxad not made", procName, NULL); for (i = 0; i < n; i++) { if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) return (BOXA *)ERROR_PTR("boxs not found", procName, NULL); boxd = boxTransform(boxs, shiftx, shifty, scalex, scaley); boxDestroy(&boxs); boxaAddBox(boxad, boxd, L_INSERT); } return boxad; } /*! * boxTransform() * * Input: box * shiftx, shifty * scalex, scaley * Return: boxd, or null on error * * Notes: * (1) This is a very simple function that first shifts, then scales. * (2) If the box is invalid, a new invalid box is returned. */ BOX * boxTransform(BOX *box, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley) { PROCNAME("boxTransform"); if (!box) return (BOX *)ERROR_PTR("box not defined", procName, NULL); if (box->w <= 0 || box->h <= 0) return boxCreate(0, 0, 0, 0); else return boxCreate((l_int32)(scalex * (box->x + shiftx) + 0.5), (l_int32)(scaley * (box->y + shifty) + 0.5), (l_int32)(L_MAX(1.0, scalex * box->w + 0.5)), (l_int32)(L_MAX(1.0, scaley * box->h + 0.5))); } /*! * boxaTransformOrdered() * * Input: boxa * shiftx, shifty * scalex, scaley * xcen, ycen (center of rotation) * angle (in radians; clockwise is positive) * order (one of 6 combinations: L_TR_SC_RO, ...) * Return: boxd, or null on error * * Notes: * (1) This allows a sequence of linear transforms on each box. * the transforms are from the affine set, composed of * shift, scaling and rotation, and the order of the * transforms is specified. * (2) Although these operations appear to be on an infinite * 2D plane, in practice the region of interest is clipped * to a finite image. The center of rotation is usually taken * with respect to the image (either the UL corner or the * center). A translation can have two very different effects: * (a) Moves the boxes across the fixed image region. * (b) Moves the image origin, causing a change in the image * region and an opposite effective translation of the boxes. * This function should only be used for (a), where the image * region is fixed on translation. If the image region is * changed by the translation, use instead the functions * in affinecompose.c, where the image region and rotation * center can be computed from the actual clipping due to * translation of the image origin. * (3) See boxTransformOrdered() for usage and implementation details. */ BOXA * boxaTransformOrdered(BOXA *boxas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order) { l_int32 i, n; BOX *boxs, *boxd; BOXA *boxad; PROCNAME("boxaTransformOrdered"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); n = boxaGetCount(boxas); if ((boxad = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxad not made", procName, NULL); for (i = 0; i < n; i++) { if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) return (BOXA *)ERROR_PTR("boxs not found", procName, NULL); boxd = boxTransformOrdered(boxs, shiftx, shifty, scalex, scaley, xcen, ycen, angle, order); boxDestroy(&boxs); boxaAddBox(boxad, boxd, L_INSERT); } return boxad; } /*! * boxTransformOrdered() * * Input: boxs * shiftx, shifty * scalex, scaley * xcen, ycen (center of rotation) * angle (in radians; clockwise is positive) * order (one of 6 combinations: L_TR_SC_RO, ...) * Return: boxd, or null on error * * Notes: * (1) This allows a sequence of linear transforms, composed of * shift, scaling and rotation, where the order of the * transforms is specified. * (2) The rotation is taken about a point specified by (xcen, ycen). * Let the components of the vector from the center of rotation * to the box center be (xdif, ydif): * xdif = (bx + 0.5 * bw) - xcen * ydif = (by + 0.5 * bh) - ycen * Then the box center after rotation has new components: * bxcen = xcen + xdif * cosa + ydif * sina * bycen = ycen + ydif * cosa - xdif * sina * where cosa and sina are the cos and sin of the angle, * and the enclosing box for the rotated box has size: * rw = |bw * cosa| + |bh * sina| * rh = |bh * cosa| + |bw * sina| * where bw and bh are the unrotated width and height. * Then the box UL corner (rx, ry) is * rx = bxcen - 0.5 * rw * ry = bycen - 0.5 * rh * (3) The center of rotation specified by args @xcen and @ycen * is the point BEFORE any translation or scaling. If the * rotation is not the first operation, this function finds * the actual center at the time of rotation. It does this * by making the following assumptions: * (1) Any scaling is with respect to the UL corner, so * that the center location scales accordingly. * (2) A translation does not affect the center of * the image; it just moves the boxes. * We always use assumption (1). However, assumption (2) * will be incorrect if the apparent translation is due * to a clipping operation that, in effect, moves the * origin of the image. In that case, you should NOT use * these simple functions. Instead, use the functions * in affinecompose.c, where the rotation center can be * computed from the actual clipping due to translation * of the image origin. */ BOX * boxTransformOrdered(BOX *boxs, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley, l_int32 xcen, l_int32 ycen, l_float32 angle, l_int32 order) { l_int32 bx, by, bw, bh, tx, ty, tw, th; l_int32 xcent, ycent; /* transformed center of rotation due to scaling */ l_float32 sina, cosa, xdif, ydif, rx, ry, rw, rh; BOX *boxd; PROCNAME("boxTransformOrdered"); if (!boxs) return (BOX *)ERROR_PTR("boxs not defined", procName, NULL); if (order != L_TR_SC_RO && order != L_SC_RO_TR && order != L_RO_TR_SC && order != L_TR_RO_SC && order != L_RO_SC_TR && order != L_SC_TR_RO) return (BOX *)ERROR_PTR("order invalid", procName, NULL); boxGetGeometry(boxs, &bx, &by, &bw, &bh); if (bw <= 0 || bh <= 0) /* invalid */ return boxCreate(0, 0, 0, 0); if (angle != 0.0) { sina = sin(angle); cosa = cos(angle); } if (order == L_TR_SC_RO) { tx = (l_int32)(scalex * (bx + shiftx) + 0.5); ty = (l_int32)(scaley * (by + shifty) + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); xcent = (l_int32)(scalex * xcen + 0.5); ycent = (l_int32)(scaley * ycen + 0.5); if (angle == 0.0) { boxd = boxCreate(tx, ty, tw, th); } else { xdif = tx + 0.5 * tw - xcent; ydif = ty + 0.5 * th - ycent; rw = L_ABS(tw * cosa) + L_ABS(th * sina); rh = L_ABS(th * cosa) + L_ABS(tw * sina); rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; boxd = boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw, (l_int32)rh); } } else if (order == L_SC_TR_RO) { tx = (l_int32)(scalex * bx + shiftx + 0.5); ty = (l_int32)(scaley * by + shifty + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); xcent = (l_int32)(scalex * xcen + 0.5); ycent = (l_int32)(scaley * ycen + 0.5); if (angle == 0.0) { boxd = boxCreate(tx, ty, tw, th); } else { xdif = tx + 0.5 * tw - xcent; ydif = ty + 0.5 * th - ycent; rw = L_ABS(tw * cosa) + L_ABS(th * sina); rh = L_ABS(th * cosa) + L_ABS(tw * sina); rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; boxd = boxCreate((l_int32)rx, (l_int32)ry, (l_int32)rw, (l_int32)rh); } } else if (order == L_RO_TR_SC) { if (angle == 0.0) { rx = bx; ry = by; rw = bw; rh = bh; } else { xdif = bx + 0.5 * bw - xcen; ydif = by + 0.5 * bh - ycen; rw = L_ABS(bw * cosa) + L_ABS(bh * sina); rh = L_ABS(bh * cosa) + L_ABS(bw * sina); rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(scalex * (rx + shiftx) + 0.5); ty = (l_int32)(scaley * (ry + shifty) + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); boxd = boxCreate(tx, ty, tw, th); } else if (order == L_RO_SC_TR) { if (angle == 0.0) { rx = bx; ry = by; rw = bw; rh = bh; } else { xdif = bx + 0.5 * bw - xcen; ydif = by + 0.5 * bh - ycen; rw = L_ABS(bw * cosa) + L_ABS(bh * sina); rh = L_ABS(bh * cosa) + L_ABS(bw * sina); rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(scalex * rx + shiftx + 0.5); ty = (l_int32)(scaley * ry + shifty + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); boxd = boxCreate(tx, ty, tw, th); } else if (order == L_TR_RO_SC) { tx = bx + shiftx; ty = by + shifty; if (angle == 0.0) { rx = tx; ry = ty; rw = bw; rh = bh; } else { xdif = tx + 0.5 * bw - xcen; ydif = ty + 0.5 * bh - ycen; rw = L_ABS(bw * cosa) + L_ABS(bh * sina); rh = L_ABS(bh * cosa) + L_ABS(bw * sina); rx = xcen + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycen + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(scalex * rx + 0.5); ty = (l_int32)(scaley * ry + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * rw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * rh + 0.5)); boxd = boxCreate(tx, ty, tw, th); } else { /* order == L_SC_RO_TR) */ tx = (l_int32)(scalex * bx + 0.5); ty = (l_int32)(scaley * by + 0.5); tw = (l_int32)(L_MAX(1.0, scalex * bw + 0.5)); th = (l_int32)(L_MAX(1.0, scaley * bh + 0.5)); xcent = (l_int32)(scalex * xcen + 0.5); ycent = (l_int32)(scaley * ycen + 0.5); if (angle == 0.0) { rx = tx; ry = ty; rw = tw; rh = th; } else { xdif = tx + 0.5 * tw - xcent; ydif = ty + 0.5 * th - ycent; rw = L_ABS(tw * cosa) + L_ABS(th * sina); rh = L_ABS(th * cosa) + L_ABS(tw * sina); rx = xcent + xdif * cosa - ydif * sina - 0.5 * rw; ry = ycent + ydif * cosa + xdif * sina - 0.5 * rh; } tx = (l_int32)(rx + shiftx + 0.5); ty = (l_int32)(ry + shifty + 0.5); tw = (l_int32)(rw + 0.5); th = (l_int32)(rh + 0.5); boxd = boxCreate(tx, ty, tw, th); } return boxd; } /*! * boxaRotateOrth() * * Input: boxa * w, h (of image in which the boxa is embedded) * rotation (0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; * all rotations are clockwise) * Return: boxad, or null on error * * Notes: * (1) See boxRotateOrth() for details. */ BOXA * boxaRotateOrth(BOXA *boxas, l_int32 w, l_int32 h, l_int32 rotation) { l_int32 i, n; BOX *boxs, *boxd; BOXA *boxad; PROCNAME("boxaRotateOrth"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (rotation < 0 || rotation > 3) return (BOXA *)ERROR_PTR("rotation not in {0,1,2,3}", procName, NULL); if (rotation == 0) return boxaCopy(boxas, L_COPY); n = boxaGetCount(boxas); if ((boxad = boxaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("boxad not made", procName, NULL); for (i = 0; i < n; i++) { if ((boxs = boxaGetBox(boxas, i, L_CLONE)) == NULL) return (BOXA *)ERROR_PTR("boxs not found", procName, NULL); boxd = boxRotateOrth(boxs, w, h, rotation); boxDestroy(&boxs); boxaAddBox(boxad, boxd, L_INSERT); } return boxad; } /*! * boxRotateOrth() * * Input: box * w, h (of image in which the box is embedded) * rotation (0 = noop, 1 = 90 deg, 2 = 180 deg, 3 = 270 deg; * all rotations are clockwise) * Return: boxd, or null on error * * Notes: * (1) Rotate the image with the embedded box by the specified amount. * (2) After rotation, the rotated box is always measured with * respect to the UL corner of the image. */ BOX * boxRotateOrth(BOX *box, l_int32 w, l_int32 h, l_int32 rotation) { l_int32 bx, by, bw, bh, xdist, ydist; PROCNAME("boxRotateOrth"); if (!box) return (BOX *)ERROR_PTR("box not defined", procName, NULL); if (rotation < 0 || rotation > 3) return (BOX *)ERROR_PTR("rotation not in {0,1,2,3}", procName, NULL); if (rotation == 0) return boxCopy(box); boxGetGeometry(box, &bx, &by, &bw, &bh); if (bw <= 0 || bh <= 0) /* invalid */ return boxCreate(0, 0, 0, 0); ydist = h - by - bh; /* below box */ xdist = w - bx - bw; /* to right of box */ if (rotation == 1) /* 90 deg cw */ return boxCreate(ydist, bx, bh, bw); else if (rotation == 2) /* 180 deg cw */ return boxCreate(xdist, ydist, bw, bh); else /* rotation == 3, 270 deg cw */ return boxCreate(by, xdist, bh, bw); } /*---------------------------------------------------------------------* * Boxa sort * *---------------------------------------------------------------------*/ /*! * boxaSort() * * Input: boxa * sorttype (L_SORT_BY_X, L_SORT_BY_Y, * L_SORT_BY_RIGHT, L_SORT_BY_BOT, * L_SORT_BY_WIDTH, L_SORT_BY_HEIGHT, * L_SORT_BY_MIN_DIMENSION, L_SORT_BY_MAX_DIMENSION, * L_SORT_BY_PERIMETER, L_SORT_BY_AREA, * L_SORT_BY_ASPECT_RATIO) * sortorder (L_SORT_INCREASING, L_SORT_DECREASING) * &naindex ( index of sorted order into * original array) * Return: boxad (sorted version of boxas), or null on error */ BOXA * boxaSort(BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { l_int32 i, n, x, y, w, h, size; BOXA *boxad; NUMA *na, *naindex; PROCNAME("boxaSort"); if (pnaindex) *pnaindex = NULL; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_RIGHT && sorttype != L_SORT_BY_BOT && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_MIN_DIMENSION && sorttype != L_SORT_BY_MAX_DIMENSION && sorttype != L_SORT_BY_PERIMETER && sorttype != L_SORT_BY_AREA && sorttype != L_SORT_BY_ASPECT_RATIO) return (BOXA *)ERROR_PTR("invalid sort type", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (BOXA *)ERROR_PTR("invalid sort order", procName, NULL); /* Use O(n) binsort if possible */ n = boxaGetCount(boxas); if (n > MIN_COMPS_FOR_BIN_SORT && ((sorttype == L_SORT_BY_X) || (sorttype == L_SORT_BY_Y) || (sorttype == L_SORT_BY_WIDTH) || (sorttype == L_SORT_BY_HEIGHT) || (sorttype == L_SORT_BY_PERIMETER))) return boxaBinSort(boxas, sorttype, sortorder, pnaindex); /* Build up numa of specific data */ if ((na = numaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxas, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_RIGHT: numaAddNumber(na, x + w - 1); break; case L_SORT_BY_BOT: numaAddNumber(na, y + h - 1); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_MIN_DIMENSION: size = L_MIN(w, h); numaAddNumber(na, size); break; case L_SORT_BY_MAX_DIMENSION: size = L_MAX(w, h); numaAddNumber(na, size); break; case L_SORT_BY_PERIMETER: size = w + h; numaAddNumber(na, size); break; case L_SORT_BY_AREA: size = w * h; numaAddNumber(na, size); break; case L_SORT_BY_ASPECT_RATIO: numaAddNumber(na, (l_float32)w / (l_float32)h); break; default: L_WARNING("invalid sort type\n", procName); } } /* Get the sort index for data array */ if ((naindex = numaGetSortIndex(na, sortorder)) == NULL) return (BOXA *)ERROR_PTR("naindex not made", procName, NULL); /* Build up sorted boxa using sort index */ boxad = boxaSortByIndex(boxas, naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); numaDestroy(&na); return boxad; } /*! * boxaBinSort() * * Input: boxa * sorttype (L_SORT_BY_X, L_SORT_BY_Y, L_SORT_BY_WIDTH, * L_SORT_BY_HEIGHT, L_SORT_BY_PERIMETER) * sortorder (L_SORT_INCREASING, L_SORT_DECREASING) * &naindex ( index of sorted order into * original array) * Return: boxad (sorted version of boxas), or null on error * * Notes: * (1) For a large number of boxes (say, greater than 1000), this * O(n) binsort is much faster than the O(nlogn) shellsort. * For 5000 components, this is over 20x faster than boxaSort(). * (2) Consequently, boxaSort() calls this function if it will * likely go much faster. */ BOXA * boxaBinSort(BOXA *boxas, l_int32 sorttype, l_int32 sortorder, NUMA **pnaindex) { l_int32 i, n, x, y, w, h; BOXA *boxad; NUMA *na, *naindex; PROCNAME("boxaBinSort"); if (pnaindex) *pnaindex = NULL; if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (sorttype != L_SORT_BY_X && sorttype != L_SORT_BY_Y && sorttype != L_SORT_BY_WIDTH && sorttype != L_SORT_BY_HEIGHT && sorttype != L_SORT_BY_PERIMETER) return (BOXA *)ERROR_PTR("invalid sort type", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (BOXA *)ERROR_PTR("invalid sort order", procName, NULL); /* Generate Numa of appropriate box dimensions */ n = boxaGetCount(boxas); if ((na = numaCreate(n)) == NULL) return (BOXA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxas, i, &x, &y, &w, &h); switch (sorttype) { case L_SORT_BY_X: numaAddNumber(na, x); break; case L_SORT_BY_Y: numaAddNumber(na, y); break; case L_SORT_BY_WIDTH: numaAddNumber(na, w); break; case L_SORT_BY_HEIGHT: numaAddNumber(na, h); break; case L_SORT_BY_PERIMETER: numaAddNumber(na, w + h); break; default: L_WARNING("invalid sort type\n", procName); } } /* Get the sort index for data array */ if ((naindex = numaGetBinSortIndex(na, sortorder)) == NULL) return (BOXA *)ERROR_PTR("naindex not made", procName, NULL); /* Build up sorted boxa using the sort index */ boxad = boxaSortByIndex(boxas, naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); numaDestroy(&na); return boxad; } /*! * boxaSortByIndex() * * Input: boxas * naindex (na that maps from the new boxa to the input boxa) * Return: boxad (sorted), or null on error */ BOXA * boxaSortByIndex(BOXA *boxas, NUMA *naindex) { l_int32 i, n, index; BOX *box; BOXA *boxad; PROCNAME("boxaSortByIndex"); if (!boxas) return (BOXA *)ERROR_PTR("boxas not defined", procName, NULL); if (!naindex) return (BOXA *)ERROR_PTR("naindex not defined", procName, NULL); n = boxaGetCount(boxas); boxad = boxaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); box = boxaGetBox(boxas, index, L_COPY); boxaAddBox(boxad, box, L_INSERT); } return boxad; } /*! * boxaSort2d() * * Input: boxas * &naa ( numaa with sorted indices * whose values are the indices of the input array) * delta1 (min overlap that permits aggregation of a box * onto a boxa of horizontally-aligned boxes; pass 1) * delta2 (min overlap that permits aggregation of a box * onto a boxa of horizontally-aligned boxes; pass 2) * minh1 (components less than this height either join an * existing boxa or are set aside for pass 2) * Return: baa (2d sorted version of boxa), or null on error * * Notes: * (1) The final result is a sort where the 'fast scan' direction is * left to right, and the 'slow scan' direction is from top * to bottom. Each boxa in the baa represents a sorted set * of boxes from left to right. * (2) Three passes are used to aggregate the boxas, which can correspond * to characters or words in a line of text. In pass 1, only * taller components, which correspond to xheight or larger, * are permitted to start a new boxa. In pass 2, the remaining * vertically-challenged components are allowed to join an * existing boxa or start a new one. In pass 3, boxa whose extent * is overlapping are joined. After that, the boxes in each * boxa are sorted horizontally, and finally the boxa are * sorted vertically. * (3) If delta1 < 0, the first pass allows aggregation when * boxes in the same boxa do not overlap vertically. * The distance by which they can miss and still be aggregated * is the absolute value |delta1|. Similar for delta2 on * the second pass. * (4) On the first pass, any component of height less than minh1 * cannot start a new boxa; it's put aside for later insertion. * (5) On the second pass, any small component that doesn't align * with an existing boxa can start a new one. * (6) This can be used to identify lines of text from * character or word bounding boxes. */ BOXAA * boxaSort2d(BOXA *boxas, NUMAA **pnaad, l_int32 delta1, l_int32 delta2, l_int32 minh1) { l_int32 i, index, h, nt, ne, n, m, ival; BOX *box; BOXA *boxa, *boxae, *boxan, *boxa1, *boxa2, *boxa3, *boxav, *boxavs; BOXAA *baa, *baa1, *baad; NUMA *naindex, *nae, *nan, *nah, *nav, *na1, *na2, *nad, *namap; NUMAA *naa, *naa1, *naad; PROCNAME("boxaSort2d"); if (pnaad) *pnaad = NULL; if (!boxas) return (BOXAA *)ERROR_PTR("boxas not defined", procName, NULL); /* Sort from left to right */ if ((boxa = boxaSort(boxas, L_SORT_BY_X, L_SORT_INCREASING, &naindex)) == NULL) return (BOXAA *)ERROR_PTR("boxa not made", procName, NULL); /* First pass: assign taller boxes to boxa by row */ nt = boxaGetCount(boxa); baa = boxaaCreate(0); naa = numaaCreate(0); boxae = boxaCreate(0); /* save small height boxes here */ nae = numaCreate(0); /* keep track of small height boxes */ for (i = 0; i < nt; i++) { box = boxaGetBox(boxa, i, L_CLONE); boxGetGeometry(box, NULL, NULL, NULL, &h); if (h < minh1) { /* save for 2nd pass */ boxaAddBox(boxae, box, L_INSERT); numaAddNumber(nae, i); } else { n = boxaaGetCount(baa); boxaaAlignBox(baa, box, delta1, &index); if (index < n) { /* append to an existing boxa */ boxaaAddBox(baa, index, box, L_INSERT); } else { /* doesn't align, need new boxa */ boxan = boxaCreate(0); boxaAddBox(boxan, box, L_INSERT); boxaaAddBoxa(baa, boxan, L_INSERT); nan = numaCreate(0); numaaAddNuma(naa, nan, L_INSERT); } numaGetIValue(naindex, i, &ival); numaaAddNumber(naa, index, ival); } } boxaDestroy(&boxa); numaDestroy(&naindex); /* Second pass: feed in small height boxes */ ne = boxaGetCount(boxae); for (i = 0; i < ne; i++) { box = boxaGetBox(boxae, i, L_CLONE); n = boxaaGetCount(baa); boxaaAlignBox(baa, box, delta2, &index); if (index < n) { /* append to an existing boxa */ boxaaAddBox(baa, index, box, L_INSERT); } else { /* doesn't align, need new boxa */ boxan = boxaCreate(0); boxaAddBox(boxan, box, L_INSERT); boxaaAddBoxa(baa, boxan, L_INSERT); nan = numaCreate(0); numaaAddNuma(naa, nan, L_INSERT); } numaGetIValue(nae, i, &ival); /* location in original boxas */ numaaAddNumber(naa, index, ival); } /* Third pass: merge some boxa whose extent is overlapping. * Think of these boxa as text lines, where the bounding boxes * of the text lines can overlap, but likely won't have * a huge overlap. * First do a greedy find of pairs of overlapping boxa, where * the two boxa overlap by at least 50% of the smaller, and * the smaller is not more than half the area of the larger. * For such pairs, call the larger one the primary boxa. The * boxes in the smaller one are appended to those in the primary * in pass 3a, and the primaries are extracted in pass 3b. * In this way, all boxes in the original baa are saved. */ n = boxaaGetCount(baa); boxaaGetExtent(baa, NULL, NULL, NULL, &boxa3); boxa1 = boxaHandleOverlaps(boxa3, L_REMOVE_SMALL, 1000, 0.5, 0.5, &namap); boxaDestroy(&boxa1); boxaDestroy(&boxa3); for (i = 0; i < n; i++) { /* Pass 3a: join selected copies of boxa */ numaGetIValue(namap, i, &ival); if (ival >= 0) { /* join current to primary boxa[ival] */ boxa1 = boxaaGetBoxa(baa, i, L_COPY); boxa2 = boxaaGetBoxa(baa, ival, L_CLONE); boxaJoin(boxa2, boxa1, 0, -1); boxaDestroy(&boxa2); boxaDestroy(&boxa1); na1 = numaaGetNuma(naa, i, L_COPY); na2 = numaaGetNuma(naa, ival, L_CLONE); numaJoin(na2, na1, 0, -1); numaDestroy(&na1); numaDestroy(&na2); } } baa1 = boxaaCreate(n); naa1 = numaaCreate(n); for (i = 0; i < n; i++) { /* Pass 3b: save primary boxa */ numaGetIValue(namap, i, &ival); if (ival == -1) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); boxaaAddBoxa(baa1, boxa1, L_INSERT); na1 = numaaGetNuma(naa, i, L_CLONE); numaaAddNuma(naa1, na1, L_INSERT); } } numaDestroy(&namap); boxaaDestroy(&baa); baa = baa1; numaaDestroy(&naa); naa = naa1; /* Sort the boxes in each boxa horizontally */ m = boxaaGetCount(baa); for (i = 0; i < m; i++) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); boxa2 = boxaSort(boxa1, L_SORT_BY_X, L_SORT_INCREASING, &nah); boxaaReplaceBoxa(baa, i, boxa2); na1 = numaaGetNuma(naa, i, L_CLONE); na2 = numaSortByIndex(na1, nah); numaaReplaceNuma(naa, i, na2); boxaDestroy(&boxa1); numaDestroy(&na1); numaDestroy(&nah); } /* Sort the boxa vertically within boxaa, using the first box * in each boxa. */ m = boxaaGetCount(baa); boxav = boxaCreate(m); /* holds first box in each boxa in baa */ naad = numaaCreate(m); if (pnaad) *pnaad = naad; baad = boxaaCreate(m); for (i = 0; i < m; i++) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); box = boxaGetBox(boxa1, 0, L_CLONE); boxaAddBox(boxav, box, L_INSERT); boxaDestroy(&boxa1); } boxavs = boxaSort(boxav, L_SORT_BY_Y, L_SORT_INCREASING, &nav); for (i = 0; i < m; i++) { numaGetIValue(nav, i, &index); boxa = boxaaGetBoxa(baa, index, L_CLONE); boxaaAddBoxa(baad, boxa, L_INSERT); nad = numaaGetNuma(naa, index, L_CLONE); numaaAddNuma(naad, nad, L_INSERT); } /* fprintf(stderr, "box count = %d, numaa count = %d\n", nt, numaaGetNumberCount(naad)); */ boxaaDestroy(&baa); boxaDestroy(&boxav); boxaDestroy(&boxavs); boxaDestroy(&boxae); numaDestroy(&nav); numaDestroy(&nae); numaaDestroy(&naa); if (!pnaad) numaaDestroy(&naad); return baad; } /*! * boxaSort2dByIndex() * * Input: boxas * naa (numaa that maps from the new baa to the input boxa) * Return: baa (sorted boxaa), or null on error */ BOXAA * boxaSort2dByIndex(BOXA *boxas, NUMAA *naa) { l_int32 ntot, boxtot, i, j, n, nn, index; BOX *box; BOXA *boxa; BOXAA *baa; NUMA *na; PROCNAME("boxaSort2dByIndex"); if (!boxas) return (BOXAA *)ERROR_PTR("boxas not defined", procName, NULL); if (!naa) return (BOXAA *)ERROR_PTR("naindex not defined", procName, NULL); /* Check counts */ ntot = numaaGetNumberCount(naa); boxtot = boxaGetCount(boxas); if (ntot != boxtot) return (BOXAA *)ERROR_PTR("element count mismatch", procName, NULL); n = numaaGetCount(naa); baa = boxaaCreate(n); for (i = 0; i < n; i++) { na = numaaGetNuma(naa, i, L_CLONE); nn = numaGetCount(na); boxa = boxaCreate(nn); for (j = 0; j < nn; j++) { numaGetIValue(na, i, &index); box = boxaGetBox(boxas, index, L_COPY); boxaAddBox(boxa, box, L_INSERT); } boxaaAddBoxa(baa, boxa, L_INSERT); numaDestroy(&na); } return baa; } /*---------------------------------------------------------------------* * Boxa array extraction * *---------------------------------------------------------------------*/ /*! * boxaExtractAsNuma() * * Input: boxa * &nax ( array of x locations) * &nay ( array of y locations) * &naw ( array of w locations) * &nah ( array of h locations) * keepinvalid (1 to keep invalid boxes; 0 to remove them) * Return: 0 if OK, 1 on error */ l_int32 boxaExtractAsNuma(BOXA *boxa, NUMA **pnax, NUMA **pnay, NUMA **pnaw, NUMA **pnah, l_int32 keepinvalid) { l_int32 i, n, x, y, w, h; PROCNAME("boxaExtractAsNuma"); if (!pnax && !pnay && !pnaw && !pnah) return ERROR_INT("no output requested", procName, 1); if (pnax) *pnax = NULL; if (pnay) *pnay = NULL; if (pnaw) *pnaw = NULL; if (pnah) *pnah = NULL; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (!keepinvalid && boxaGetValidCount(boxa) == 0) return ERROR_INT("no valid boxes", procName, 1); n = boxaGetCount(boxa); if (pnax) *pnax = numaCreate(n); if (pnay) *pnay = numaCreate(n); if (pnaw) *pnaw = numaCreate(n); if (pnah) *pnah = numaCreate(n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &x, &y, &w, &h); if (!keepinvalid && (w <= 0 || h <= 0)) continue; if (pnax) numaAddNumber(*pnax, x); if (pnay) numaAddNumber(*pnay, y); if (pnaw) numaAddNumber(*pnaw, w); if (pnah) numaAddNumber(*pnah, h); } return 0; } /*! * boxaExtractAsPta() * * Input: boxa * &ptal ( array of left locations vs. index) * &ptat ( array of top locations vs. index) * &ptar ( array of right locations vs. index) * &ptab ( array of bottom locations vs. index) * keepinvalid (1 to keep invalid boxes; 0 to remove them) * Return: 0 if OK, 1 on error */ l_int32 boxaExtractAsPta(BOXA *boxa, PTA **pptal, PTA **pptat, PTA **pptar, PTA **pptab, l_int32 keepinvalid) { l_int32 i, n, left, top, right, bot, w, h; PROCNAME("boxaExtractAsPta"); if (!pptal && !pptar && !pptat && !pptab) return ERROR_INT("no output requested", procName, 1); if (pptal) *pptal = NULL; if (pptat) *pptat = NULL; if (pptar) *pptar = NULL; if (pptab) *pptab = NULL; if (!boxa) return ERROR_INT("boxa not defined", procName, 1); if (!keepinvalid && boxaGetValidCount(boxa) == 0) return ERROR_INT("no valid boxes", procName, 1); n = boxaGetCount(boxa); if (pptal) *pptal = ptaCreate(n); if (pptat) *pptat = ptaCreate(n); if (pptar) *pptar = ptaCreate(n); if (pptab) *pptab = ptaCreate(n); for (i = 0; i < n; i++) { boxaGetBoxGeometry(boxa, i, &left, &top, &w, &h); if (!keepinvalid && (w <= 0 || h <= 0)) continue; right = left + w - 1; bot = top + h - 1; if (pptal) ptaAddPt(*pptal, i, left); if (pptat) ptaAddPt(*pptat, i, top); if (pptar) ptaAddPt(*pptar, i, right); if (pptab) ptaAddPt(*pptab, i, bot); } return 0; } /*---------------------------------------------------------------------* * Boxa statistics * *---------------------------------------------------------------------*/ /*! * boxaGetRankSize() * * Input: boxa * fract (use 0.0 for smallest, 1.0 for largest) * Return: box (with rank values for x, y, w, h), or null on error * or if the boxa is empty (has no valid boxes) * * Notes: * (1) This function does not assume that all boxes in the boxa are valid * (2) The four box parameters are sorted independently. * For rank order, the width and height are sorted in increasing * order. But what does it mean to sort x and y in "rank order"? * If the boxes are of comparable size and somewhat * aligned (e.g., from multiple images), it makes some sense * to give a "rank order" for x and y by sorting them in * decreasing order. But in general, the interpretation of a rank * order on x and y is highly application dependent. In summary: * - x and y are sorted in decreasing order * - w and h are sorted in increasing order */ BOX * boxaGetRankSize(BOXA *boxa, l_float32 fract) { l_float32 xval, yval, wval, hval; NUMA *nax, *nay, *naw, *nah; BOX *box; PROCNAME("boxaGetRankSize"); if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); if (fract < 0.0 || fract > 1.0) return (BOX *)ERROR_PTR("fract not in [0.0 ... 1.0]", procName, NULL); if (boxaGetValidCount(boxa) == 0) return (BOX *)ERROR_PTR("no valid boxes in boxa", procName, NULL); boxaExtractAsNuma(boxa, &nax, &nay, &naw, &nah, 0); /* valid boxes only */ numaGetRankValue(nax, 1.0 - fract, NULL, 1, &xval); numaGetRankValue(nay, 1.0 - fract, NULL, 1, &yval); numaGetRankValue(naw, fract, NULL, 1, &wval); numaGetRankValue(nah, fract, NULL, 1, &hval); box = boxCreate((l_int32)xval, (l_int32)yval, (l_int32)wval, (l_int32)hval); numaDestroy(&nax); numaDestroy(&nay); numaDestroy(&naw); numaDestroy(&nah); return box; } /*! * boxaGetMedian() * * Input: boxa * Return: box (with median values for x, y, w, h), or null on error * or if the boxa is empty. * * Notes: * (1) See boxaGetRankSize() */ BOX * boxaGetMedian(BOXA *boxa) { PROCNAME("boxaGetMedian"); if (!boxa) return (BOX *)ERROR_PTR("boxa not defined", procName, NULL); if (boxaGetCount(boxa) == 0) return (BOX *)ERROR_PTR("boxa is empty", procName, NULL); return boxaGetRankSize(boxa, 0.5); } /*---------------------------------------------------------------------* * Other Boxaa functions * *---------------------------------------------------------------------*/ /*! * boxaaGetExtent() * * Input: baa * &w ( width) * &h ( height) * &box (, minimum box containing all boxa * in boxaa) * &boxa (, boxa containing all boxes in each * boxa in the boxaa) * Return: 0 if OK, 1 on error * * Notes: * (1) The returned w and h are the minimum size image * that would contain all boxes untranslated. * (2) Each box in the returned boxa is the minimum box required to * hold all the boxes in the respective boxa of baa. * (3) If there are no valid boxes in a boxa, the box corresponding * to its extent has all fields set to 0 (an invalid box). */ l_int32 boxaaGetExtent(BOXAA *baa, l_int32 *pw, l_int32 *ph, BOX **pbox, BOXA **pboxa) { l_int32 i, n, x, y, w, h, xmax, ymax, xmin, ymin, found; BOX *box1; BOXA *boxa, *boxa1; PROCNAME("boxaaGetExtent"); if (!pw && !ph && !pbox && !pboxa) return ERROR_INT("no ptrs defined", procName, 1); if (pw) *pw = 0; if (ph) *ph = 0; if (pbox) *pbox = NULL; if (pboxa) *pboxa = NULL; if (!baa) return ERROR_INT("baa not defined", procName, 1); n = boxaaGetCount(baa); if (n == 0) return ERROR_INT("no boxa in baa", procName, 1); boxa = boxaCreate(n); xmax = ymax = 0; xmin = ymin = 100000000; found = FALSE; for (i = 0; i < n; i++) { boxa1 = boxaaGetBoxa(baa, i, L_CLONE); boxaGetExtent(boxa1, NULL, NULL, &box1); boxaDestroy(&boxa1); boxGetGeometry(box1, &x, &y, &w, &h); if (w > 0 && h > 0) { /* a valid extent box */ found = TRUE; /* found at least one valid extent box */ xmin = L_MIN(xmin, x); ymin = L_MIN(ymin, y); xmax = L_MAX(xmax, x + w); ymax = L_MAX(ymax, y + h); } boxaAddBox(boxa, box1, L_INSERT); } if (found == FALSE) /* no valid extent boxes */ xmin = ymin = 0; if (pw) *pw = xmax; if (ph) *ph = ymax; if (pbox) *pbox = boxCreate(xmin, ymin, xmax - xmin, ymax - ymin); if (pboxa) *pboxa = boxa; else boxaDestroy(&boxa); return 0; } /*! * boxaaFlattenToBoxa() * * Input: baa * &naindex ( the boxa index in the baa) * copyflag (L_COPY or L_CLONE) * Return: boxa, or null on error * * Notes: * (1) This 'flattens' the baa to a boxa, taking the boxes in * order in the first boxa, then the second, etc. * (2) If a boxa is empty, we generate an invalid, placeholder box * of zero size. This is useful when converting from a baa * where each boxa has either 0 or 1 boxes, and it is necessary * to maintain a 1:1 correspondence between the initial * boxa array and the resulting box array. * (3) If &naindex is defined, we generate a Numa that gives, for * each box in the baa, the index of the boxa to which it belongs. */ BOXA * boxaaFlattenToBoxa(BOXAA *baa, NUMA **pnaindex, l_int32 copyflag) { l_int32 i, j, m, n; BOXA *boxa, *boxat; BOX *box; NUMA *naindex; PROCNAME("boxaaFlattenToBoxa"); if (pnaindex) *pnaindex = NULL; if (!baa) return (BOXA *)ERROR_PTR("baa not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); if (pnaindex) { naindex = numaCreate(0); *pnaindex = naindex; } n = boxaaGetCount(baa); boxa = boxaCreate(n); for (i = 0; i < n; i++) { boxat = boxaaGetBoxa(baa, i, L_CLONE); m = boxaGetCount(boxat); if (m == 0) { /* placeholder box */ box = boxCreate(0, 0, 0, 0); boxaAddBox(boxa, box, L_INSERT); if (pnaindex) numaAddNumber(naindex, i); /* save 'row' number */ } else { for (j = 0; j < m; j++) { box = boxaGetBox(boxat, j, copyflag); boxaAddBox(boxa, box, L_INSERT); if (pnaindex) numaAddNumber(naindex, i); /* save 'row' number */ } } boxaDestroy(&boxat); } return boxa; } /*! * boxaaFlattenAligned() * * Input: baa * num (number extracted from each) * fillerbox ( that fills if necessary) * copyflag (L_COPY or L_CLONE) * Return: boxa, or null on error * * Notes: * (1) This 'flattens' the baa to a boxa, taking the first @num * boxes from each boxa. * (2) In each boxa, if there are less than @num boxes, we preserve * the alignment between the input baa and the output boxa * by inserting one or more fillerbox(es) or, if @fillerbox == NULL, * one or more invalid placeholder boxes. */ BOXA * boxaaFlattenAligned(BOXAA *baa, l_int32 num, BOX *fillerbox, l_int32 copyflag) { l_int32 i, j, m, n, mval, nshort; BOXA *boxat, *boxad; BOX *box; PROCNAME("boxaaFlattenAligned"); if (!baa) return (BOXA *)ERROR_PTR("baa not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXA *)ERROR_PTR("invalid copyflag", procName, NULL); n = boxaaGetCount(baa); boxad = boxaCreate(n); for (i = 0; i < n; i++) { boxat = boxaaGetBoxa(baa, i, L_CLONE); m = boxaGetCount(boxat); mval = L_MIN(m, num); nshort = num - mval; for (j = 0; j < mval; j++) { /* take the first @num if possible */ box = boxaGetBox(boxat, j, copyflag); boxaAddBox(boxad, box, L_INSERT); } for (j = 0; j < nshort; j++) { /* add fillers if necessary */ if (fillerbox) { boxaAddBox(boxad, fillerbox, L_COPY); } else { box = boxCreate(0, 0, 0, 0); /* invalid placeholder box */ boxaAddBox(boxad, box, L_INSERT); } } boxaDestroy(&boxat); } return boxad; } /*! * boxaEncapsulateAligned() * * Input: boxa * num (number put into each boxa in the baa) * copyflag (L_COPY or L_CLONE) * Return: baa, or null on error * * Notes: * (1) This puts @num boxes from the input @boxa into each of a * set of boxa within an output baa. * (2) This assumes that the boxes in @boxa are in sets of @num each. */ BOXAA * boxaEncapsulateAligned(BOXA *boxa, l_int32 num, l_int32 copyflag) { l_int32 i, j, n, nbaa, index; BOX *box; BOXA *boxat; BOXAA *baa; PROCNAME("boxaEncapsulateAligned"); if (!boxa) return (BOXAA *)ERROR_PTR("boxa not defined", procName, NULL); if (copyflag != L_COPY && copyflag != L_CLONE) return (BOXAA *)ERROR_PTR("invalid copyflag", procName, NULL); n = boxaGetCount(boxa); nbaa = n / num; if (num * nbaa != n) L_ERROR("inconsistent alignment: num doesn't divide n\n", procName); baa = boxaaCreate(nbaa); for (i = 0, index = 0; i < nbaa; i++) { boxat = boxaCreate(num); for (j = 0; j < num; j++, index++) { box = boxaGetBox(boxa, index, copyflag); boxaAddBox(boxat, box, L_INSERT); } boxaaAddBoxa(baa, boxat, L_INSERT); } return baa; } /*! * boxaaAlignBox() * * Input: baa * box (to be aligned with the bext boxa in the baa, if possible) * delta (amount by which consecutive components can miss * in overlap and still be included in the array) * &index (of boxa with best overlap, or if none match, * this is the index of the next boxa to be generated) * Return: 0 if OK, 1 on error * * Notes: * (1) This is not greedy. It finds the boxa whose vertical * extent has the closest overlap with the input box. */ l_int32 boxaaAlignBox(BOXAA *baa, BOX *box, l_int32 delta, l_int32 *pindex) { l_int32 i, n, m, y, yt, h, ht, ovlp, maxovlp, maxindex; BOX *boxt; BOXA *boxa; PROCNAME("boxaaAlignBox"); if (!baa) return ERROR_INT("baa not defined", procName, 1); if (!box) return ERROR_INT("box not defined", procName, 1); if (!pindex) return ERROR_INT("&index not defined", procName, 1); n = boxaaGetCount(baa); boxGetGeometry(box, NULL, &y, NULL, &h); maxovlp = -10000000; for (i = 0; i < n; i++) { boxa = boxaaGetBoxa(baa, i, L_CLONE); if ((m = boxaGetCount(boxa)) == 0) { L_WARNING("no boxes in boxa\n", procName); continue; } boxaGetExtent(boxa, NULL, NULL, &boxt); boxGetGeometry(boxt, NULL, &yt, NULL, &ht); boxDestroy(&boxt); boxaDestroy(&boxa); /* Overlap < 0 means the components do not overlap vertically */ if (yt >= y) ovlp = y + h - 1 - yt; else ovlp = yt + ht - 1 - y; if (ovlp > maxovlp) { maxovlp = ovlp; maxindex = i; } } if (maxovlp + delta >= 0) *pindex = maxindex; else *pindex = n; return 0; } leptonica-1.70/src/numafunc1.c0000644000175000017500000030004112265645122014340 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials - provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *====================================================================*/ /* * numafunc1.c * * Arithmetic and logic * NUMA *numaArithOp() * NUMA *numaLogicalOp() * NUMA *numaInvert() * l_int32 numaSimilar() * l_int32 numaAddToNumber() * * Simple extractions * l_int32 numaGetMin() * l_int32 numaGetMax() * l_int32 numaGetSum() * NUMA *numaGetPartialSums() * l_int32 numaGetSumOnInterval() * l_int32 numaHasOnlyIntegers() * NUMA *numaSubsample() * NUMA *numaMakeDelta() * NUMA *numaMakeSequence() * NUMA *numaMakeConstant() * NUMA *numaMakeAbsValue() * NUMA *numaAddBorder() * NUMA *numaAddSpecifiedBorder() * NUMA *numaRemoveBorder() * l_int32 numaGetNonzeroRange() * l_int32 numaGetCountRelativeToZero() * NUMA *numaClipToInterval() * NUMA *numaMakeThresholdIndicator() * NUMA *numaUniformSampling() * NUMA *numaReverse() * * Signal feature extraction * NUMA *numaLowPassIntervals() * NUMA *numaThresholdEdges() * NUMA *numaGetSpanValues() * NUMA *numaGetEdgeValues() * * Interpolation * l_int32 numaInterpolateEqxVal() * l_int32 numaInterpolateEqxInterval() * l_int32 numaInterpolateArbxVal() * l_int32 numaInterpolateArbxInterval() * * Functions requiring interpolation * l_int32 numaFitMax() * l_int32 numaDifferentiateInterval() * l_int32 numaIntegrateInterval() * * Sorting * NUMA *numaSortGeneral() * NUMA *numaSortAutoSelect() * NUMA *numaSortIndexAutoSelect() * l_int32 numaChooseSortType() * NUMA *numaSort() * NUMA *numaBinSort() * NUMA *numaGetSortIndex() * NUMA *numaGetBinSortIndex() * NUMA *numaSortByIndex() * l_int32 numaIsSorted() * l_int32 numaSortPair() * NUMA *numaInvertMap() * * Random permutation * NUMA *numaPseudorandomSequence() * NUMA *numaRandomPermutation() * * Functions requiring sorting * l_int32 numaGetRankValue() * l_int32 numaGetMedian() * l_int32 numaGetBinnedMedian() * l_int32 numaGetMode() * l_int32 numaGetMedianVariation() * * Numa combination * l_int32 numaJoin() * l_int32 numaaJoin() * NUMA *numaaFlattenToNuma() * * * Things to remember when using the Numa: * * (1) The numa is a struct, not an array. Always use accessors * (see numabasic.c), never the fields directly. * * (2) The number array holds l_float32 values. It can also * be used to store l_int32 values. See numabasic.c for * details on using the accessors. * * (3) If you use numaCreate(), no numbers are stored and the size is 0. * You have to add numbers to increase the size. * If you want to start with a numa of a fixed size, with each * entry initialized to the same value, use numaMakeConstant(). * * (4) Occasionally, in the comments we denote the i-th element of a * numa by na[i]. This is conceptual only -- the numa is not an array! */ #include #include "allheaders.h" /*----------------------------------------------------------------------* * Arithmetic and logical ops on Numas * *----------------------------------------------------------------------*/ /*! * numaArithOp() * * Input: nad ( can be null or equal to na1 (in-place) * na1 * na2 * op (L_ARITH_ADD, L_ARITH_SUBTRACT, * L_ARITH_MULTIPLY, L_ARITH_DIVIDE) * Return: nad (always: operation applied to na1 and na2) * * Notes: * (1) The sizes of na1 and na2 must be equal. * (2) nad can only null or equal to na1. * (3) To add a constant to a numa, or to multipy a numa by * a constant, use numaTransform(). */ NUMA * numaArithOp(NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op) { l_int32 i, n; l_float32 val1, val2; PROCNAME("numaArithOp"); if (!na1 || !na2) return (NUMA *)ERROR_PTR("na1, na2 not both defined", procName, nad); n = numaGetCount(na1); if (n != numaGetCount(na2)) return (NUMA *)ERROR_PTR("na1, na2 sizes differ", procName, nad); if (nad && nad != na1) return (NUMA *)ERROR_PTR("nad defined but not in-place", procName, nad); if (op != L_ARITH_ADD && op != L_ARITH_SUBTRACT && op != L_ARITH_MULTIPLY && op != L_ARITH_DIVIDE) return (NUMA *)ERROR_PTR("invalid op", procName, nad); if (op == L_ARITH_DIVIDE) { for (i = 0; i < n; i++) { numaGetFValue(na2, i, &val2); if (val2 == 0.0) return (NUMA *)ERROR_PTR("na2 has 0 element", procName, nad); } } /* If nad is not identical to na1, make it an identical copy */ if (!nad) nad = numaCopy(na1); for (i = 0; i < n; i++) { numaGetFValue(nad, i, &val1); numaGetFValue(na2, i, &val2); switch (op) { case L_ARITH_ADD: numaSetValue(nad, i, val1 + val2); break; case L_ARITH_SUBTRACT: numaSetValue(nad, i, val1 - val2); break; case L_ARITH_MULTIPLY: numaSetValue(nad, i, val1 * val2); break; case L_ARITH_DIVIDE: numaSetValue(nad, i, val1 / val2); break; default: fprintf(stderr, " Unknown arith op: %d\n", op); return nad; } } return nad; } /*! * numaLogicalOp() * * Input: nad ( can be null or equal to na1 (in-place) * na1 * na2 * op (L_UNION, L_INTERSECTION, L_SUBTRACTION, L_EXCLUSIVE_OR) * Return: nad (always: operation applied to na1 and na2) * * Notes: * (1) The sizes of na1 and na2 must be equal. * (2) nad can only null or equal to na1. * (3) This is intended for use with indicator arrays (0s and 1s). * Input data is extracted as integers (0 == false, anything * else == true); output results are 0 and 1. * (4) L_SUBTRACTION is subtraction of val2 from val1. For bit logical * arithmetic this is (val1 & ~val2), but because these values * are integers, we use (val1 && !val2). */ NUMA * numaLogicalOp(NUMA *nad, NUMA *na1, NUMA *na2, l_int32 op) { l_int32 i, n, val1, val2, val; PROCNAME("numaLogicalOp"); if (!na1 || !na2) return (NUMA *)ERROR_PTR("na1, na2 not both defined", procName, nad); n = numaGetCount(na1); if (n != numaGetCount(na2)) return (NUMA *)ERROR_PTR("na1, na2 sizes differ", procName, nad); if (nad && nad != na1) return (NUMA *)ERROR_PTR("nad defined; not in-place", procName, nad); if (op != L_UNION && op != L_INTERSECTION && op != L_SUBTRACTION && op != L_EXCLUSIVE_OR) return (NUMA *)ERROR_PTR("invalid op", procName, nad); /* If nad is not identical to na1, make it an identical copy */ if (!nad) nad = numaCopy(na1); for (i = 0; i < n; i++) { numaGetIValue(nad, i, &val1); numaGetIValue(na2, i, &val2); switch (op) { case L_UNION: val = (val1 || val2) ? 1 : 0; numaSetValue(nad, i, val); break; case L_INTERSECTION: val = (val1 && val2) ? 1 : 0; numaSetValue(nad, i, val); break; case L_SUBTRACTION: val = (val1 && !val2) ? 1 : 0; numaSetValue(nad, i, val); break; case L_EXCLUSIVE_OR: val = ((val1 && !val2) || (!val1 && val2)) ? 1 : 0; numaSetValue(nad, i, val); break; default: fprintf(stderr, " Unknown logical op: %d\n", op); return nad; } } return nad; } /*! * numaInvert() * * Input: nad ( can be null or equal to nas (in-place) * nas * Return: nad (always: 'inverts' nas) * * Notes: * (1) This is intended for use with indicator arrays (0s and 1s). * It gives a boolean-type output, taking the input as * an integer and inverting it: * 0 --> 1 * anything else --> 0 */ NUMA * numaInvert(NUMA *nad, NUMA *nas) { l_int32 i, n, val; PROCNAME("numaInvert"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, nad); if (nad && nad != nas) return (NUMA *)ERROR_PTR("nad defined; not in-place", procName, nad); if (!nad) nad = numaCopy(nas); n = numaGetCount(nad); for (i = 0; i < n; i++) { numaGetIValue(nad, i, &val); if (!val) val = 1; else val = 0; numaSetValue(nad, i, val); } return nad; } /*! * numaSimilar() * * Input: na1 * na2 * maxdiff (use 0.0 for exact equality) * &similar ( 1 if similar; 0 if different) * Return: 0 if OK, 1 on error * * Notes: * (1) Float values can differ slightly due to roundoff and * accumulated errors. Using @maxdiff > 0.0 allows similar * arrays to be identified. */ l_int32 numaSimilar(NUMA *na1, NUMA *na2, l_float32 maxdiff, l_int32 *psimilar) { l_int32 i, n; l_float32 val1, val2; PROCNAME("numaSimilar"); if (!psimilar) return ERROR_INT("&similar not defined", procName, 1); *psimilar = 0; if (!na1 || !na2) return ERROR_INT("na1 and na2 not both defined", procName, 1); maxdiff = L_ABS(maxdiff); n = numaGetCount(na1); if (n != numaGetCount(na2)) return 0; for (i = 0; i < n; i++) { numaGetFValue(na1, i, &val1); numaGetFValue(na2, i, &val2); if (L_ABS(val1 - val2) > maxdiff) return 0; } *psimilar = 1; return 0; } /*! * numaAddToNumber() * * Input: na * index (element to be changed) * val (new value to be added) * Return: 0 if OK, 1 on error * * Notes: * (1) This is useful for accumulating sums, regardless of the index * order in which the values are made available. * (2) Before use, the numa has to be filled up to @index. This would * typically be used by creating the numa with the full sized * array, initialized to 0.0, using numaMakeConstant(). */ l_int32 numaAddToNumber(NUMA *na, l_int32 index, l_float32 val) { l_int32 n; PROCNAME("numaAddToNumber"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (index < 0 || index >= n) return ERROR_INT("index not in {0...n - 1}", procName, 1); na->array[index] += val; return 0; } /*----------------------------------------------------------------------* * Simple extractions * *----------------------------------------------------------------------*/ /*! * numaGetMin() * * Input: na * &minval ( min value) * &iminloc ( index of min location) * Return: 0 if OK; 1 on error */ l_int32 numaGetMin(NUMA *na, l_float32 *pminval, l_int32 *piminloc) { l_int32 i, n, iminloc; l_float32 val, minval; PROCNAME("numaGetMin"); if (!pminval && !piminloc) return ERROR_INT("nothing to do", procName, 1); if (pminval) *pminval = 0.0; if (piminloc) *piminloc = 0; if (!na) return ERROR_INT("na not defined", procName, 1); minval = +1000000000.; iminloc = 0; n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (val < minval) { minval = val; iminloc = i; } } if (pminval) *pminval = minval; if (piminloc) *piminloc = iminloc; return 0; } /*! * numaGetMax() * * Input: na * &maxval ( max value) * &imaxloc ( index of max location) * Return: 0 if OK; 1 on error */ l_int32 numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc) { l_int32 i, n, imaxloc; l_float32 val, maxval; PROCNAME("numaGetMax"); if (!pmaxval && !pimaxloc) return ERROR_INT("nothing to do", procName, 1); if (pmaxval) *pmaxval = 0.0; if (pimaxloc) *pimaxloc = 0; if (!na) return ERROR_INT("na not defined", procName, 1); maxval = -1000000000.; imaxloc = 0; n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (val > maxval) { maxval = val; imaxloc = i; } } if (pmaxval) *pmaxval = maxval; if (pimaxloc) *pimaxloc = imaxloc; return 0; } /*! * numaGetSum() * * Input: na * &sum ( sum of values) * Return: 0 if OK, 1 on error */ l_int32 numaGetSum(NUMA *na, l_float32 *psum) { l_int32 i, n; l_float32 val, sum; PROCNAME("numaGetSum"); if (!na) return ERROR_INT("na not defined", procName, 1); if (!psum) return ERROR_INT("&sum not defined", procName, 1); sum = 0.0; n = numaGetCount(na); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); sum += val; } *psum = sum; return 0; } /*! * numaGetPartialSums() * * Input: na * Return: nasum, or null on error * * Notes: * (1) nasum[i] is the sum for all j <= i of na[j]. * So nasum[0] = na[0]. * (2) If you want to generate a rank function, where rank[0] - 0.0, * insert a 0.0 at the beginning of the nasum array. */ NUMA * numaGetPartialSums(NUMA *na) { l_int32 i, n; l_float32 val, sum; NUMA *nasum; PROCNAME("numaGetPartialSums"); if (!na) return (NUMA *)ERROR_PTR("na not defined", procName, NULL); n = numaGetCount(na); nasum = numaCreate(n); sum = 0.0; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); sum += val; numaAddNumber(nasum, sum); } return nasum; } /*! * numaGetSumOnInterval() * * Input: na * first (beginning index) * last (final index) * &sum ( sum of values in the index interval range) * Return: 0 if OK, 1 on error */ l_int32 numaGetSumOnInterval(NUMA *na, l_int32 first, l_int32 last, l_float32 *psum) { l_int32 i, n, truelast; l_float32 val, sum; PROCNAME("numaGetSumOnInterval"); if (!na) return ERROR_INT("na not defined", procName, 1); if (!psum) return ERROR_INT("&sum not defined", procName, 1); *psum = 0.0; sum = 0.0; n = numaGetCount(na); if (first >= n) /* not an error */ return 0; truelast = L_MIN(last, n - 1); for (i = first; i <= truelast; i++) { numaGetFValue(na, i, &val); sum += val; } *psum = sum; return 0; } /*! * numaHasOnlyIntegers() * * Input: na * maxsamples (maximum number of samples to check) * &allints ( 1 if all sampled values are ints; else 0) * Return: 0 if OK, 1 on error * * Notes: * (1) Set @maxsamples == 0 to check every integer in na. Otherwise, * this samples no more than @maxsamples. */ l_int32 numaHasOnlyIntegers(NUMA *na, l_int32 maxsamples, l_int32 *pallints) { l_int32 i, n, incr; l_float32 val; PROCNAME("numaHasOnlyIntegers"); if (!pallints) return ERROR_INT("&allints not defined", procName, 1); *pallints = TRUE; if (!na) return ERROR_INT("na not defined", procName, 1); if ((n = numaGetCount(na)) == 0) return ERROR_INT("na empty", procName, 1); if (maxsamples <= 0) incr = 1; else incr = (l_int32)((n + maxsamples - 1) / maxsamples); for (i = 0; i < n; i += incr) { numaGetFValue(na, i, &val); if (val != (l_int32)val) { *pallints = FALSE; return 0; } } return 0; } /*! * numaSubsample() * * Input: nas * subfactor (subsample factor, >= 1) * Return: nad (evenly sampled values from nas), or null on error */ NUMA * numaSubsample(NUMA *nas, l_int32 subfactor) { l_int32 i, n; l_float32 val; NUMA *nad; PROCNAME("numaSubsample"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (subfactor < 1) return (NUMA *)ERROR_PTR("subfactor < 1", procName, NULL); nad = numaCreate(0); n = numaGetCount(nas); for (i = 0; i < n; i++) { if (i % subfactor != 0) continue; numaGetFValue(nas, i, &val); numaAddNumber(nad, val); } return nad; } /*! * numaMakeDelta() * * Input: nas (input numa) * Return: numa (of difference values val[i+1] - val[i]), * or null on error */ NUMA * numaMakeDelta(NUMA *nas) { l_int32 i, n, prev, cur; NUMA *nad; PROCNAME("numaMakeDelta"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); nad = numaCreate(n - 1); prev = 0; for (i = 1; i < n; i++) { numaGetIValue(nas, i, &cur); numaAddNumber(nad, cur - prev); prev = cur; } return nad; } /*! * numaMakeSequence() * * Input: startval * increment * size (of sequence) * Return: numa of sequence of evenly spaced values, or null on error */ NUMA * numaMakeSequence(l_float32 startval, l_float32 increment, l_int32 size) { l_int32 i; l_float32 val; NUMA *na; PROCNAME("numaMakeSequence"); if ((na = numaCreate(size)) == NULL) return (NUMA *)ERROR_PTR("na not made", procName, NULL); for (i = 0; i < size; i++) { val = startval + i * increment; numaAddNumber(na, val); } return na; } /*! * numaMakeConstant() * * Input: val * size (of numa) * Return: numa (of given size with all entries equal to 'val'), * or null on error */ NUMA * numaMakeConstant(l_float32 val, l_int32 size) { return numaMakeSequence(val, 0.0, size); } /*! * numaMakeAbsValue() * * Input: nad (can be null for new array, or the same as nas for inplace) * nas (input numa) * Return: nad (with all numbers being the absval of the input), * or null on error */ NUMA * numaMakeAbsValue(NUMA *nad, NUMA *nas) { l_int32 i, n; l_float32 val; PROCNAME("numaMakeAbsValue"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (nad && nad != nas) return (NUMA *)ERROR_PTR("nad and not in-place", procName, NULL); if (!nad) nad = numaCopy(nas); n = numaGetCount(nad); for (i = 0; i < n; i++) { val = nad->array[i]; nad->array[i] = L_ABS(val); } return nad; } /*! * numaAddBorder() * * Input: nas * left, right (number of elements to add on each side) * val (initialize border elements) * Return: nad (with added elements at left and right), or null on error */ NUMA * numaAddBorder(NUMA *nas, l_int32 left, l_int32 right, l_float32 val) { l_int32 i, n, len; l_float32 startx, delx; l_float32 *fas, *fad; NUMA *nad; PROCNAME("numaAddBorder"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (left < 0) left = 0; if (right < 0) right = 0; if (left == 0 && right == 0) return numaCopy(nas); n = numaGetCount(nas); len = n + left + right; nad = numaMakeConstant(val, len); numaGetParameters(nas, &startx, &delx); numaSetParameters(nad, startx - delx * left, delx); fas = numaGetFArray(nas, L_NOCOPY); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < n; i++) fad[left + i] = fas[i]; return nad; } /*! * numaAddSpecifiedBorder() * * Input: nas * left, right (number of elements to add on each side) * type (L_CONTINUED_BORDER, L_MIRRORED_BORDER) * Return: nad (with added elements at left and right), or null on error */ NUMA * numaAddSpecifiedBorder(NUMA *nas, l_int32 left, l_int32 right, l_int32 type) { l_int32 i, n; l_float32 *fa; NUMA *nad; PROCNAME("numaAddSpecifiedBorder"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (left < 0) left = 0; if (right < 0) right = 0; if (left == 0 && right == 0) return numaCopy(nas); if (type != L_CONTINUED_BORDER && type != L_MIRRORED_BORDER) return (NUMA *)ERROR_PTR("invalid type", procName, NULL); n = numaGetCount(nas); if (type == L_MIRRORED_BORDER && (left > n || right > n)) return (NUMA *)ERROR_PTR("border too large", procName, NULL); nad = numaAddBorder(nas, left, right, 0); n = numaGetCount(nad); fa = numaGetFArray(nad, L_NOCOPY); if (type == L_CONTINUED_BORDER) { for (i = 0; i < left; i++) fa[i] = fa[left]; for (i = n - right; i < n; i++) fa[i] = fa[n - right - 1]; } else { /* type == L_MIRRORED_BORDER */ for (i = 0; i < left; i++) fa[i] = fa[2 * left - 1 - i]; for (i = 0; i < right; i++) fa[n - right + i] = fa[n - right - i - 1]; } return nad; } /*! * numaRemoveBorder() * * Input: nas * left, right (number of elements to remove from each side) * Return: nad (with removed elements at left and right), or null on error */ NUMA * numaRemoveBorder(NUMA *nas, l_int32 left, l_int32 right) { l_int32 i, n, len; l_float32 startx, delx; l_float32 *fas, *fad; NUMA *nad; PROCNAME("numaRemoveBorder"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (left < 0) left = 0; if (right < 0) right = 0; if (left == 0 && right == 0) return numaCopy(nas); n = numaGetCount(nas); if ((len = n - left - right) < 0) return (NUMA *)ERROR_PTR("len < 0 after removal", procName, NULL); nad = numaMakeConstant(0, len); numaGetParameters(nas, &startx, &delx); numaSetParameters(nad, startx + delx * left, delx); fas = numaGetFArray(nas, L_NOCOPY); fad = numaGetFArray(nad, L_NOCOPY); for (i = 0; i < len; i++) fad[i] = fas[left + i]; return nad; } /*! * numaGetNonzeroRange() * * Input: numa * eps (largest value considered to be zero) * &first, &last ( interval of array indices * where values are nonzero) * Return: 0 if OK, 1 on error or if no nonzero range is found. */ l_int32 numaGetNonzeroRange(NUMA *na, l_float32 eps, l_int32 *pfirst, l_int32 *plast) { l_int32 n, i, found; l_float32 val; PROCNAME("numaGetNonzeroRange"); if (!na) return ERROR_INT("na not defined", procName, 1); if (!pfirst || !plast) return ERROR_INT("pfirst and plast not both defined", procName, 1); n = numaGetCount(na); found = FALSE; for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); if (val > eps) { found = TRUE; break; } } if (!found) { *pfirst = n - 1; *plast = 0; return 1; } *pfirst = i; for (i = n - 1; i >= 0; i--) { numaGetFValue(na, i, &val); if (val > eps) break; } *plast = i; return 0; } /*! * numaGetCountRelativeToZero() * * Input: numa * type (L_LESS_THAN_ZERO, L_EQUAL_TO_ZERO, L_GREATER_THAN_ZERO) * &count ( count of values of given type) * Return: 0 if OK, 1 on error */ l_int32 numaGetCountRelativeToZero(NUMA *na, l_int32 type, l_int32 *pcount) { l_int32 n, i, count; l_float32 val; PROCNAME("numaGetCountRelativeToZero"); if (!pcount) return ERROR_INT("&count not defined", procName, 1); *pcount = 0; if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); for (i = 0, count = 0; i < n; i++) { numaGetFValue(na, i, &val); if (type == L_LESS_THAN_ZERO && val < 0.0) count++; else if (type == L_EQUAL_TO_ZERO && val == 0.0) count++; else if (type == L_GREATER_THAN_ZERO && val > 0.0) count++; } *pcount = count; return 0; } /*! * numaClipToInterval() * * Input: numa * first, last (clipping interval) * Return: numa with the same values as the input, but clipped * to the specified interval * * Note: If you want the indices of the array values to be unchanged, * use first = 0. * Usage: This is useful to clip a histogram that has a few nonzero * values to its nonzero range. */ NUMA * numaClipToInterval(NUMA *nas, l_int32 first, l_int32 last) { l_int32 n, i, truelast; l_float32 val; NUMA *nad; PROCNAME("numaClipToInterval"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (first > last) return (NUMA *)ERROR_PTR("range not valid", procName, NULL); n = numaGetCount(nas); if (first >= n) return (NUMA *)ERROR_PTR("no elements in range", procName, NULL); truelast = L_MIN(last, n - 1); if ((nad = numaCreate(truelast - first + 1)) == NULL) return (NUMA *)ERROR_PTR("nad not made", procName, NULL); for (i = first; i <= truelast; i++) { numaGetFValue(nas, i, &val); numaAddNumber(nad, val); } return nad; } /*! * numaMakeThresholdIndicator() * * Input: nas (input numa) * thresh (threshold value) * type (L_SELECT_IF_LT, L_SELECT_IF_GT, * L_SELECT_IF_LTE, L_SELECT_IF_GTE) * Output: nad (indicator array: values are 0 and 1) * * Notes: * (1) For each element in nas, if the constraint given by 'type' * correctly specifies its relation to thresh, a value of 1 * is recorded in nad. */ NUMA * numaMakeThresholdIndicator(NUMA *nas, l_float32 thresh, l_int32 type) { l_int32 n, i, ival; l_float32 fval; NUMA *nai; PROCNAME("numaMakeThresholdIndicator"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); nai = numaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(nas, i, &fval); ival = 0; switch (type) { case L_SELECT_IF_LT: if (fval < thresh) ival = 1; break; case L_SELECT_IF_GT: if (fval > thresh) ival = 1; break; case L_SELECT_IF_LTE: if (fval <= thresh) ival = 1; break; case L_SELECT_IF_GTE: if (fval >= thresh) ival = 1; break; default: numaDestroy(&nai); return (NUMA *)ERROR_PTR("invalid type", procName, NULL); } numaAddNumber(nai, ival); } return nai; } /*! * numaUniformSampling() * * Input: nas (input numa) * nsamp (number of samples) * Output: nad (resampled array), or null on error * * Notes: * (1) This resamples the values in the array, using @nsamp * equal divisions. */ NUMA * numaUniformSampling(NUMA *nas, l_int32 nsamp) { l_int32 n, i, j, ileft, iright; l_float32 left, right, binsize, lfract, rfract, sum, startx, delx; l_float32 *array; NUMA *nad; PROCNAME("numaUniformSampling"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (nsamp <= 0) return (NUMA *)ERROR_PTR("nsamp must be > 0", procName, NULL); n = numaGetCount(nas); nad = numaCreate(nsamp); array = numaGetFArray(nas, L_NOCOPY); binsize = (l_float32)n / (l_float32)nsamp; numaGetParameters(nas, &startx, &delx); numaSetParameters(nad, startx, binsize * delx); left = 0.0; for (i = 0; i < nsamp; i++) { sum = 0.0; right = left + binsize; ileft = (l_int32)left; lfract = 1.0 - left + ileft; if (lfract >= 1.0) /* on left bin boundary */ lfract = 0.0; iright = (l_int32)right; rfract = right - iright; iright = L_MIN(iright, n - 1); if (ileft == iright) { /* both are within the same original sample */ sum += (lfract + rfract - 1.0) * array[ileft]; } else { if (lfract > 0.0001) /* left fraction */ sum += lfract * array[ileft]; if (rfract > 0.0001) /* right fraction */ sum += rfract * array[iright]; for (j = ileft + 1; j < iright; j++) /* entire pixels */ sum += array[j]; } numaAddNumber(nad, sum); left = right; } return nad; } /*! * numaReverse() * * Input: nad ( can be null or equal to nas) * nas (input numa) * Output: nad (reversed), or null on error * * Notes: * (1) Usage: * numaReverse(nas, nas); // in-place * nad = numaReverse(NULL, nas); // makes a new one */ NUMA * numaReverse(NUMA *nad, NUMA *nas) { l_int32 n, i; l_float32 val1, val2; PROCNAME("numaReverse"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (nad && nas != nad) return (NUMA *)ERROR_PTR("nad defined but != nas", procName, NULL); n = numaGetCount(nas); if (nad) { /* in-place */ for (i = 0; i < n / 2; i++) { numaGetFValue(nad, i, &val1); numaGetFValue(nad, n - i - 1, &val2); numaSetValue(nad, i, val2); numaSetValue(nad, n - i - 1, val1); } } else { nad = numaCreate(n); for (i = n - 1; i >= 0; i--) { numaGetFValue(nas, i, &val1); numaAddNumber(nad, val1); } } /* Reverse the startx and delx fields */ nad->startx = nas->startx + (n - 1) * nas->delx; nad->delx = -nas->delx; return nad; } /*----------------------------------------------------------------------* * Signal feature extraction * *----------------------------------------------------------------------*/ /*! * numaLowPassIntervals() * * Input: nas (input numa) * thresh (threshold fraction of max; in [0.0 ... 1.0]) * maxn (for normalizing; set maxn = 0.0 to use the max in nas) * Output: nad (interval abscissa pairs), or null on error * * Notes: * (1) For each interval where the value is less than a specified * fraction of the maximum, this records the left and right "x" * value. */ NUMA * numaLowPassIntervals(NUMA *nas, l_float32 thresh, l_float32 maxn) { l_int32 n, i, inrun; l_float32 maxval, threshval, fval, startx, delx, x0, x1; NUMA *nad; PROCNAME("numaLowPassIntervals"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (thresh < 0.0 || thresh > 1.0) return (NUMA *)ERROR_PTR("invalid thresh", procName, NULL); /* The input threshold is a fraction of the max. * The first entry in nad is the value of the max. */ n = numaGetCount(nas); if (maxn == 0.0) numaGetMax(nas, &maxval, NULL); else maxval = maxn; numaGetParameters(nas, &startx, &delx); threshval = thresh * maxval; nad = numaCreate(0); numaAddNumber(nad, maxval); /* Write pairs of pts (x0, x1) for the intervals */ inrun = FALSE; for (i = 0; i < n; i++) { numaGetFValue(nas, i, &fval); if (fval < threshval && inrun == FALSE) { /* start a new run */ inrun = TRUE; x0 = startx + i * delx; } else if (fval > threshval && inrun == TRUE) { /* end the run */ inrun = FALSE; x1 = startx + i * delx; numaAddNumber(nad, x0); numaAddNumber(nad, x1); } } if (inrun == TRUE) { /* must end the last run */ x1 = startx + (n - 1) * delx; numaAddNumber(nad, x0); numaAddNumber(nad, x1); } return nad; } /*! * numaThresholdEdges() * * Input: nas (input numa) * thresh1 (low threshold as fraction of max; in [0.0 ... 1.0]) * thresh2 (high threshold as fraction of max; in [0.0 ... 1.0]) * maxn (for normalizing; set maxn = 0.0 to use the max in nas) * Output: nad (edge interval triplets), or null on error * * Notes: * (1) For each edge interval, where where the value is less * than @thresh1 on one side, greater than @thresh2 on * the other, and between these thresholds throughout the * interval, this records a triplet of values: the * 'left' and 'right' edges, and either +1 or -1, depending * on whether the edge is rising or falling. * (2) No assumption is made about the value outside the array, * so if the value at the array edge is between the threshold * values, it is not considered part of an edge. We start * looking for edge intervals only after leaving the thresholded * band. */ NUMA * numaThresholdEdges(NUMA *nas, l_float32 thresh1, l_float32 thresh2, l_float32 maxn) { l_int32 n, i, istart, inband, output, sign; l_int32 startbelow, below, above, belowlast, abovelast; l_float32 maxval, threshval1, threshval2, fval, startx, delx, x0, x1; NUMA *nad; PROCNAME("numaThresholdEdges"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (thresh1 < 0.0 || thresh1 > 1.0 || thresh2 < 0.0 || thresh2 > 1.0) return (NUMA *)ERROR_PTR("invalid thresholds", procName, NULL); if (thresh2 < thresh1) return (NUMA *)ERROR_PTR("thresh2 < thresh1", procName, NULL); /* The input thresholds are fractions of the max. * The first entry in nad is the value of the max used * here for normalization. */ n = numaGetCount(nas); if (maxn == 0.0) numaGetMax(nas, &maxval, NULL); else maxval = maxn; numaGetMax(nas, &maxval, NULL); numaGetParameters(nas, &startx, &delx); threshval1 = thresh1 * maxval; threshval2 = thresh2 * maxval; nad = numaCreate(0); numaAddNumber(nad, maxval); /* Write triplets of pts (x0, x1, sign) for the edges. * First make sure we start search from outside the band. * Only one of {belowlast, abovelast} is true. */ for (i = 0; i < n; i++) { istart = i; numaGetFValue(nas, i, &fval); belowlast = (fval < threshval1) ? TRUE : FALSE; abovelast = (fval > threshval2) ? TRUE : FALSE; if (belowlast == TRUE || abovelast == TRUE) break; } if (istart == n) /* no intervals found */ return nad; /* x0 and x1 can only be set from outside the edge. * They are the values just before entering the band, * and just after entering the band. We can jump through * the band, in which case they differ by one index in nas. */ inband = FALSE; startbelow = belowlast; /* one of these is true */ output = FALSE; x0 = startx + istart * delx; for (i = istart + 1; i < n; i++) { numaGetFValue(nas, i, &fval); below = (fval < threshval1) ? TRUE : FALSE; above = (fval > threshval2) ? TRUE : FALSE; if (!inband && belowlast && above) { /* full jump up */ x1 = startx + i * delx; sign = 1; startbelow = FALSE; /* for the next transition */ output = TRUE; } else if (!inband && abovelast && below) { /* full jump down */ x1 = startx + i * delx; sign = -1; startbelow = TRUE; /* for the next transition */ output = TRUE; } else if (inband && startbelow && above) { /* exit rising; success */ x1 = startx + i * delx; sign = 1; inband = FALSE; startbelow = FALSE; /* for the next transition */ output = TRUE; } else if (inband && !startbelow && below) { /* exit falling; success */ x1 = startx + i * delx; sign = -1; inband = FALSE; startbelow = TRUE; /* for the next transition */ output = TRUE; } else if (inband && !startbelow && above) { /* exit rising; failure */ x0 = startx + i * delx; inband = FALSE; } else if (inband && startbelow && below) { /* exit falling; failure */ x0 = startx + i * delx; inband = FALSE; } else if (!inband && !above && !below) { /* enter */ inband = TRUE; startbelow = belowlast; } else if (!inband && (above || below)) { /* outside and remaining */ x0 = startx + i * delx; /* update position */ } belowlast = below; abovelast = above; if (output) { /* we have exited; save new x0 */ numaAddNumber(nad, x0); numaAddNumber(nad, x1); numaAddNumber(nad, sign); output = FALSE; x0 = startx + i * delx; } } return nad; } /*! * numaGetSpanValues() * * Input: na (numa that is output of numaLowPassIntervals()) * span (span number, zero-based) * &start ( location of start of transition) * &end ( location of end of transition) * Output: 0 if OK, 1 on error */ l_int32 numaGetSpanValues(NUMA *na, l_int32 span, l_int32 *pstart, l_int32 *pend) { l_int32 n, nspans; PROCNAME("numaGetSpanValues"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (n % 2 != 1) return ERROR_INT("n is not odd", procName, 1); nspans = n / 2; if (nspans < 0 || span >= nspans) return ERROR_INT("invalid span", procName, 1); if (pstart) numaGetIValue(na, 2 * span + 1, pstart); if (pend) numaGetIValue(na, 2 * span + 2, pend); return 0; } /*! * numaGetEdgeValues() * * Input: na (numa that is output of numaThresholdEdges()) * edge (edge number, zero-based) * &start ( location of start of transition) * &end ( location of end of transition) * &sign ( transition sign: +1 is rising, * -1 is falling) * Output: 0 if OK, 1 on error */ l_int32 numaGetEdgeValues(NUMA *na, l_int32 edge, l_int32 *pstart, l_int32 *pend, l_int32 *psign) { l_int32 n, nedges; PROCNAME("numaGetEdgeValues"); if (!na) return ERROR_INT("na not defined", procName, 1); n = numaGetCount(na); if (n % 3 != 1) return ERROR_INT("n % 3 is not 1", procName, 1); nedges = (n - 1) / 3; if (edge < 0 || edge >= nedges) return ERROR_INT("invalid edge", procName, 1); if (pstart) numaGetIValue(na, 3 * edge + 1, pstart); if (pend) numaGetIValue(na, 3 * edge + 2, pend); if (psign) numaGetIValue(na, 3 * edge + 3, psign); return 0; } /*----------------------------------------------------------------------* * Interpolation * *----------------------------------------------------------------------*/ /*! * numaInterpolateEqxVal() * * Input: startx (xval corresponding to first element in array) * deltax (x increment between array elements) * nay (numa of ordinate values, assumed equally spaced) * type (L_LINEAR_INTERP, L_QUADRATIC_INTERP) * xval * &yval ( interpolated value) * Return: 0 if OK, 1 on error (e.g., if xval is outside range) * * Notes: * (1) Considering nay as a function of x, the x values * are equally spaced * (2) Caller should check for valid return. * * For linear Lagrangian interpolation (through 2 data pts): * y(x) = y1(x-x2)/(x1-x2) + y2(x-x1)/(x2-x1) * * For quadratic Lagrangian interpolation (through 3 data pts): * y(x) = y1(x-x2)(x-x3)/((x1-x2)(x1-x3)) + * y2(x-x1)(x-x3)/((x2-x1)(x2-x3)) + * y3(x-x1)(x-x2)/((x3-x1)(x3-x2)) * */ l_int32 numaInterpolateEqxVal(l_float32 startx, l_float32 deltax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval) { l_int32 i, n, i1, i2, i3; l_float32 x1, x2, x3, fy1, fy2, fy3, d1, d2, d3, del, fi, maxx; l_float32 *fa; PROCNAME("numaInterpolateEqxVal"); if (!pyval) return ERROR_INT("&yval not defined", procName, 1); *pyval = 0.0; if (!nay) return ERROR_INT("nay not defined", procName, 1); if (deltax <= 0.0) return ERROR_INT("deltax not > 0", procName, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", procName, 1); n = numaGetCount(nay); if (n < 2) return ERROR_INT("not enough points", procName, 1); if (type == L_QUADRATIC_INTERP && n == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", procName); } maxx = startx + deltax * (n - 1); if (xval < startx || xval > maxx) return ERROR_INT("xval is out of bounds", procName, 1); fa = numaGetFArray(nay, L_NOCOPY); fi = (xval - startx) / deltax; i = (l_int32)fi; del = fi - i; if (del == 0.0) { /* no interpolation required */ *pyval = fa[i]; return 0; } if (type == L_LINEAR_INTERP) { *pyval = fa[i] + del * (fa[i + 1] - fa[i]); return 0; } /* Quadratic interpolation */ d1 = d3 = 0.5 / (deltax * deltax); d2 = -2. * d1; if (i == 0) { i1 = i; i2 = i + 1; i3 = i + 2; } else { i1 = i - 1; i2 = i; i3 = i + 1; } x1 = startx + i1 * deltax; x2 = startx + i2 * deltax; x3 = startx + i3 * deltax; fy1 = d1 * fa[i1]; fy2 = d2 * fa[i2]; fy3 = d3 * fa[i3]; *pyval = fy1 * (xval - x2) * (xval - x3) + fy2 * (xval - x1) * (xval - x3) + fy3 * (xval - x1) * (xval - x2); return 0; } /*! * numaInterpolateArbxVal() * * Input: nax (numa of abscissa values) * nay (numa of ordinate values, corresponding to nax) * type (L_LINEAR_INTERP, L_QUADRATIC_INTERP) * xval * &yval ( interpolated value) * Return: 0 if OK, 1 on error (e.g., if xval is outside range) * * Notes: * (1) The values in nax must be sorted in increasing order. * If, additionally, they are equally spaced, you can use * numaInterpolateEqxVal(). * (2) Caller should check for valid return. * (3) Uses lagrangian interpolation. See numaInterpolateEqxVal() * for formulas. */ l_int32 numaInterpolateArbxVal(NUMA *nax, NUMA *nay, l_int32 type, l_float32 xval, l_float32 *pyval) { l_int32 i, im, nx, ny, i1, i2, i3; l_float32 delu, dell, fract, d1, d2, d3; l_float32 minx, maxx; l_float32 *fax, *fay; PROCNAME("numaInterpolateArbxVal"); if (!pyval) return ERROR_INT("&yval not defined", procName, 1); *pyval = 0.0; if (!nax) return ERROR_INT("nax not defined", procName, 1); if (!nay) return ERROR_INT("nay not defined", procName, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", procName, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", procName, 1); if (ny < 2) return ERROR_INT("not enough points", procName, 1); if (type == L_QUADRATIC_INTERP && ny == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", procName); } numaGetFValue(nax, 0, &minx); numaGetFValue(nax, nx - 1, &maxx); if (xval < minx || xval > maxx) return ERROR_INT("xval is out of bounds", procName, 1); fax = numaGetFArray(nax, L_NOCOPY); fay = numaGetFArray(nay, L_NOCOPY); /* Linear search for interval. We are guaranteed * to either return or break out of the loop. * In addition, we are assured that fax[i] - fax[im] > 0.0 */ if (xval == fax[0]) { *pyval = fay[0]; return 0; } for (i = 1; i < nx; i++) { delu = fax[i] - xval; if (delu >= 0.0) { /* we've passed it */ if (delu == 0.0) { *pyval = fay[i]; return 0; } im = i - 1; dell = xval - fax[im]; /* >= 0 */ break; } } fract = dell / (fax[i] - fax[im]); if (type == L_LINEAR_INTERP) { *pyval = fay[i] + fract * (fay[i + 1] - fay[i]); return 0; } /* Quadratic interpolation */ if (im == 0) { i1 = im; i2 = im + 1; i3 = im + 2; } else { i1 = im - 1; i2 = im; i3 = im + 1; } d1 = (fax[i1] - fax[i2]) * (fax[i1] - fax[i3]); d2 = (fax[i2] - fax[i1]) * (fax[i2] - fax[i3]); d3 = (fax[i3] - fax[i1]) * (fax[i3] - fax[i2]); *pyval = fay[i1] * (xval - fax[i2]) * (xval - fax[i3]) / d1 + fay[i2] * (xval - fax[i1]) * (xval - fax[i3]) / d2 + fay[i3] * (xval - fax[i1]) * (xval - fax[i2]) / d3; return 0; } /*! * numaInterpolateEqxInterval() * * Input: startx (xval corresponding to first element in nas) * deltax (x increment between array elements in nas) * nasy (numa of ordinate values, assumed equally spaced) * type (L_LINEAR_INTERP, L_QUADRATIC_INTERP) * x0 (start value of interval) * x1 (end value of interval) * npts (number of points to evaluate function in interval) * &nax ( array of x values in interval) * &nay ( array of y values in interval) * Return: 0 if OK, 1 on error * * Notes: * (1) Considering nasy as a function of x, the x values * are equally spaced. * (2) This creates nay (and optionally nax) of interpolated * values over the specified interval (x0, x1). * (3) If the interval (x0, x1) lies partially outside the array * nasy (as interpreted by startx and deltax), it is an * error and returns 1. * (4) Note that deltax is the intrinsic x-increment for the input * array nasy, whereas delx is the intrinsic x-increment for the * output interpolated array nay. */ l_int32 numaInterpolateEqxInterval(l_float32 startx, l_float32 deltax, NUMA *nasy, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnax, NUMA **pnay) { l_int32 i, n; l_float32 x, yval, maxx, delx; NUMA *nax, *nay; PROCNAME("numaInterpolateEqxInterval"); if (pnax) *pnax = NULL; if (!pnay) return ERROR_INT("&nay not defined", procName, 1); *pnay = NULL; if (!nasy) return ERROR_INT("nasy not defined", procName, 1); if (deltax <= 0.0) return ERROR_INT("deltax not > 0", procName, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", procName, 1); n = numaGetCount(nasy); if (type == L_QUADRATIC_INTERP && n == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", procName); } maxx = startx + deltax * (n - 1); if (x0 < startx || x1 > maxx || x1 <= x0) return ERROR_INT("[x0 ... x1] is not valid", procName, 1); if (npts < 3) return ERROR_INT("npts < 3", procName, 1); delx = (x1 - x0) / (l_float32)(npts - 1); /* delx is for output nay */ if ((nay = numaCreate(npts)) == NULL) return ERROR_INT("nay not made", procName, 1); numaSetParameters(nay, x0, delx); *pnay = nay; if (pnax) { nax = numaCreate(npts); *pnax = nax; } for (i = 0; i < npts; i++) { x = x0 + i * delx; if (pnax) numaAddNumber(nax, x); numaInterpolateEqxVal(startx, deltax, nasy, type, x, &yval); numaAddNumber(nay, yval); } return 0; } /*! * numaInterpolateArbxInterval() * * Input: nax (numa of abscissa values) * nay (numa of ordinate values, corresponding to nax) * type (L_LINEAR_INTERP, L_QUADRATIC_INTERP) * x0 (start value of interval) * x1 (end value of interval) * npts (number of points to evaluate function in interval) * &nadx ( array of x values in interval) * &nady ( array of y values in interval) * Return: 0 if OK, 1 on error (e.g., if x0 or x1 is outside range) * * Notes: * (1) The values in nax must be sorted in increasing order. * If they are not sorted, we do it here, and complain. * (2) If the values in nax are equally spaced, you can use * numaInterpolateEqxInterval(). * (3) Caller should check for valid return. * (4) We don't call numaInterpolateArbxVal() for each output * point, because that requires an O(n) search for * each point. Instead, we do a single O(n) pass through * nax, saving the indices to be used for each output yval. * (5) Uses lagrangian interpolation. See numaInterpolateEqxVal() * for formulas. */ l_int32 numaInterpolateArbxInterval(NUMA *nax, NUMA *nay, l_int32 type, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady) { l_int32 i, im, j, nx, ny, i1, i2, i3, sorted; l_int32 *index; l_float32 del, xval, yval, excess, fract, minx, maxx, d1, d2, d3; l_float32 *fax, *fay; NUMA *nasx, *nasy, *nadx, *nady; PROCNAME("numaInterpolateArbxInterval"); if (pnadx) *pnadx = NULL; if (!pnady) return ERROR_INT("&nady not defined", procName, 1); *pnady = NULL; if (!nay) return ERROR_INT("nay not defined", procName, 1); if (!nax) return ERROR_INT("nax not defined", procName, 1); if (type != L_LINEAR_INTERP && type != L_QUADRATIC_INTERP) return ERROR_INT("invalid interp type", procName, 1); if (x0 > x1) return ERROR_INT("x0 > x1", procName, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", procName, 1); if (ny < 2) return ERROR_INT("not enough points", procName, 1); if (type == L_QUADRATIC_INTERP && ny == 2) { type = L_LINEAR_INTERP; L_WARNING("only 2 points; using linear interp\n", procName); } numaGetMin(nax, &minx, NULL); numaGetMax(nax, &maxx, NULL); if (x0 < minx || x1 > maxx) return ERROR_INT("xval is out of bounds", procName, 1); /* Make sure that nax is sorted in increasing order */ numaIsSorted(nax, L_SORT_INCREASING, &sorted); if (!sorted) { L_WARNING("we are sorting nax in increasing order\n", procName); numaSortPair(nax, nay, L_SORT_INCREASING, &nasx, &nasy); } else { nasx = numaClone(nax); nasy = numaClone(nay); } fax = numaGetFArray(nasx, L_NOCOPY); fay = numaGetFArray(nasy, L_NOCOPY); /* Get array of indices into fax for interpolated locations */ if ((index = (l_int32 *)CALLOC(npts, sizeof(l_int32))) == NULL) return ERROR_INT("ind not made", procName, 1); del = (x1 - x0) / (npts - 1.0); for (i = 0, j = 0; j < nx && i < npts; i++) { xval = x0 + i * del; while (j < nx - 1 && xval > fax[j]) j++; if (xval == fax[j]) index[i] = L_MIN(j, nx - 1); else /* the index of fax[] is just below xval */ index[i] = L_MAX(j - 1, 0); } /* For each point to be interpolated, get the y value */ nady = numaCreate(npts); *pnady = nady; if (pnadx) { nadx = numaCreate(npts); *pnadx = nadx; } for (i = 0; i < npts; i++) { xval = x0 + i * del; if (pnadx) numaAddNumber(nadx, xval); im = index[i]; excess = xval - fax[im]; if (excess == 0.0) { numaAddNumber(nady, fay[im]); continue; } fract = excess / (fax[im + 1] - fax[im]); if (type == L_LINEAR_INTERP) { yval = fay[im] + fract * (fay[im + 1] - fay[im]); numaAddNumber(nady, yval); continue; } /* Quadratic interpolation */ if (im == 0) { i1 = im; i2 = im + 1; i3 = im + 2; } else { i1 = im - 1; i2 = im; i3 = im + 1; } d1 = (fax[i1] - fax[i2]) * (fax[i1] - fax[i3]); d2 = (fax[i2] - fax[i1]) * (fax[i2] - fax[i3]); d3 = (fax[i3] - fax[i1]) * (fax[i3] - fax[i2]); yval = fay[i1] * (xval - fax[i2]) * (xval - fax[i3]) / d1 + fay[i2] * (xval - fax[i1]) * (xval - fax[i3]) / d2 + fay[i3] * (xval - fax[i1]) * (xval - fax[i2]) / d3; numaAddNumber(nady, yval); } FREE(index); numaDestroy(&nasx); numaDestroy(&nasy); return 0; } /*----------------------------------------------------------------------* * Functions requiring interpolation * *----------------------------------------------------------------------*/ /*! * numaFitMax() * * Input: na (numa of ordinate values, to fit a max to) * &maxval ( max value) * naloc ( associated numa of abscissa values) * &maxloc ( abscissa value that gives max value in na; * if naloc == null, this is given as an interpolated * index value) * Return: 0 if OK; 1 on error * * Note: if naloc is given, there is no requirement that the * data points are evenly spaced. Lagrangian interpolation * handles that. The only requirement is that the * data points are ordered so that the values in naloc * are either increasing or decreasing. We test to make * sure that the sizes of na and naloc are equal, and it * is assumed that the correspondences na[i] as a function * of naloc[i] are properly arranged for all i. * * The formula for Lagrangian interpolation through 3 data pts is: * y(x) = y1(x-x2)(x-x3)/((x1-x2)(x1-x3)) + * y2(x-x1)(x-x3)/((x2-x1)(x2-x3)) + * y3(x-x1)(x-x2)/((x3-x1)(x3-x2)) * * Then the derivative, using the constants (c1,c2,c3) defined below, * is set to 0: * y'(x) = 2x(c1+c2+c3) - c1(x2+x3) - c2(x1+x3) - c3(x1+x2) = 0 */ l_int32 numaFitMax(NUMA *na, l_float32 *pmaxval, NUMA *naloc, l_float32 *pmaxloc) { l_float32 val; l_float32 smaxval; /* start value of maximum sample, before interpolating */ l_int32 n, imaxloc; l_float32 x1, x2, x3, y1, y2, y3, c1, c2, c3, a, b, xmax, ymax; PROCNAME("numaFitMax"); *pmaxval = *pmaxloc = 0.0; /* init */ if (!na) return ERROR_INT("na not defined", procName, 1); if (!pmaxval) return ERROR_INT("&maxval not defined", procName, 1); if (!pmaxloc) return ERROR_INT("&maxloc not defined", procName, 1); n = numaGetCount(na); if (naloc) { if (n != numaGetCount(naloc)) return ERROR_INT("na and naloc of unequal size", procName, 1); } numaGetMax(na, &smaxval, &imaxloc); /* Simple case: max is at end point */ if (imaxloc == 0 || imaxloc == n - 1) { *pmaxval = smaxval; if (naloc) { numaGetFValue(naloc, imaxloc, &val); *pmaxloc = val; } else { *pmaxloc = imaxloc; } return 0; } /* Interior point; use quadratic interpolation */ y2 = smaxval; numaGetFValue(na, imaxloc - 1, &val); y1 = val; numaGetFValue(na, imaxloc + 1, &val); y3 = val; if (naloc) { numaGetFValue(naloc, imaxloc - 1, &val); x1 = val; numaGetFValue(naloc, imaxloc, &val); x2 = val; numaGetFValue(naloc, imaxloc + 1, &val); x3 = val; } else { x1 = imaxloc - 1; x2 = imaxloc; x3 = imaxloc + 1; } /* Can't interpolate; just use the max val in na * and the corresponding one in naloc */ if (x1 == x2 || x1 == x3 || x2 == x3) { *pmaxval = y2; *pmaxloc = x2; return 0; } /* Use lagrangian interpolation; set dy/dx = 0 */ c1 = y1 / ((x1 - x2) * (x1 - x3)); c2 = y2 / ((x2 - x1) * (x2 - x3)); c3 = y3 / ((x3 - x1) * (x3 - x2)); a = c1 + c2 + c3; b = c1 * (x2 + x3) + c2 * (x1 + x3) + c3 * (x1 + x2); xmax = b / (2 * a); ymax = c1 * (xmax - x2) * (xmax - x3) + c2 * (xmax - x1) * (xmax - x3) + c3 * (xmax - x1) * (xmax - x2); *pmaxval = ymax; *pmaxloc = xmax; return 0; } /*! * numaDifferentiateInterval() * * Input: nax (numa of abscissa values) * nay (numa of ordinate values, corresponding to nax) * x0 (start value of interval) * x1 (end value of interval) * npts (number of points to evaluate function in interval) * &nadx ( array of x values in interval) * &nady ( array of derivatives in interval) * Return: 0 if OK, 1 on error (e.g., if x0 or x1 is outside range) * * Notes: * (1) The values in nax must be sorted in increasing order. * If they are not sorted, it is done in the interpolation * step, and a warning is issued. * (2) Caller should check for valid return. */ l_int32 numaDifferentiateInterval(NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, NUMA **pnadx, NUMA **pnady) { l_int32 i, nx, ny; l_float32 minx, maxx, der, invdel; l_float32 *fay; NUMA *nady, *naiy; PROCNAME("numaDifferentiateInterval"); if (pnadx) *pnadx = NULL; if (!pnady) return ERROR_INT("&nady not defined", procName, 1); *pnady = NULL; if (!nay) return ERROR_INT("nay not defined", procName, 1); if (!nax) return ERROR_INT("nax not defined", procName, 1); if (x0 > x1) return ERROR_INT("x0 > x1", procName, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", procName, 1); if (ny < 2) return ERROR_INT("not enough points", procName, 1); numaGetMin(nax, &minx, NULL); numaGetMax(nax, &maxx, NULL); if (x0 < minx || x1 > maxx) return ERROR_INT("xval is out of bounds", procName, 1); if (npts < 2) return ERROR_INT("npts < 2", procName, 1); /* Generate interpolated array over specified interval */ if (numaInterpolateArbxInterval(nax, nay, L_LINEAR_INTERP, x0, x1, npts, pnadx, &naiy)) return ERROR_INT("interpolation failed", procName, 1); nady = numaCreate(npts); *pnady = nady; invdel = 0.5 * ((l_float32)npts - 1.0) / (x1 - x0); fay = numaGetFArray(naiy, L_NOCOPY); /* Compute and save derivatives */ der = 0.5 * invdel * (fay[1] - fay[0]); numaAddNumber(nady, der); for (i = 1; i < npts - 1; i++) { der = invdel * (fay[i + 1] - fay[i - 1]); numaAddNumber(nady, der); } der = 0.5 * invdel * (fay[npts - 1] - fay[npts - 2]); numaAddNumber(nady, der); numaDestroy(&naiy); return 0; } /*! * numaIntegrateInterval() * * Input: nax (numa of abscissa values) * nay (numa of ordinate values, corresponding to nax) * x0 (start value of interval) * x1 (end value of interval) * npts (number of points to evaluate function in interval) * &sum ( integral of function over interval) * Return: 0 if OK, 1 on error (e.g., if x0 or x1 is outside range) * * Notes: * (1) The values in nax must be sorted in increasing order. * If they are not sorted, it is done in the interpolation * step, and a warning is issued. * (2) Caller should check for valid return. */ l_int32 numaIntegrateInterval(NUMA *nax, NUMA *nay, l_float32 x0, l_float32 x1, l_int32 npts, l_float32 *psum) { l_int32 i, nx, ny; l_float32 minx, maxx, sum, del; l_float32 *fay; NUMA *naiy; PROCNAME("numaIntegrateInterval"); if (!psum) return ERROR_INT("&sum not defined", procName, 1); *psum = 0.0; if (!nay) return ERROR_INT("nay not defined", procName, 1); if (!nax) return ERROR_INT("nax not defined", procName, 1); if (x0 > x1) return ERROR_INT("x0 > x1", procName, 1); if (npts < 2) return ERROR_INT("npts < 2", procName, 1); ny = numaGetCount(nay); nx = numaGetCount(nax); if (nx != ny) return ERROR_INT("nax and nay not same size arrays", procName, 1); if (ny < 2) return ERROR_INT("not enough points", procName, 1); numaGetMin(nax, &minx, NULL); numaGetMax(nax, &maxx, NULL); if (x0 < minx || x1 > maxx) return ERROR_INT("xval is out of bounds", procName, 1); /* Generate interpolated array over specified interval */ if (numaInterpolateArbxInterval(nax, nay, L_LINEAR_INTERP, x0, x1, npts, NULL, &naiy)) return ERROR_INT("interpolation failed", procName, 1); del = (x1 - x0) / ((l_float32)npts - 1.0); fay = numaGetFArray(naiy, L_NOCOPY); /* Compute integral (simple trapezoid) */ sum = 0.5 * (fay[0] + fay[npts - 1]); for (i = 1; i < npts - 1; i++) sum += fay[i]; *psum = del * sum; numaDestroy(&naiy); return 0; } /*----------------------------------------------------------------------* * Sorting * *----------------------------------------------------------------------*/ /*! * numaSortGeneral() * * Input: na (source numa) * nasort ( sorted numa) * naindex ( index of elements in na associated * with each element of nasort) * nainvert ( index of elements in nasort associated * with each element of na) * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * sorttype (L_SHELL_SORT or L_BIN_SORT) * Return: 0 if OK, 1 on error * * Notes: * (1) Sorting can be confusing. Here's an array of five values with * the results shown for the 3 output arrays. * * na nasort naindex nainvert * ----------------------------------- * 3 9 2 3 * 4 6 3 2 * 9 4 1 0 * 6 3 0 1 * 1 1 4 4 * * Note that naindex is a LUT into na for the sorted array values, * and nainvert directly gives the sorted index values for the * input array. It is useful to view naindex is as a map: * 0 --> 2 * 1 --> 3 * 2 --> 1 * 3 --> 0 * 4 --> 4 * and nainvert, the inverse of this map: * 0 --> 3 * 1 --> 2 * 2 --> 0 * 3 --> 1 * 4 --> 4 * * We can write these relations symbolically as: * nasort[i] = na[naindex[i]] * na[i] = nasort[nainvert[i]] */ l_int32 numaSortGeneral(NUMA *na, NUMA **pnasort, NUMA **pnaindex, NUMA **pnainvert, l_int32 sortorder, l_int32 sorttype) { NUMA *naindex; PROCNAME("numaSortGeneral"); if (!na) return ERROR_INT("na not defined", procName, 1); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sort order", procName, 1); if (sorttype != L_SHELL_SORT && sorttype != L_BIN_SORT) return ERROR_INT("invalid sort type", procName, 1); if (!pnasort && !pnaindex && !pnainvert) return ERROR_INT("nothing to do", procName, 1); if (pnasort) *pnasort = NULL; if (pnaindex) *pnaindex = NULL; if (pnainvert) *pnainvert = NULL; if (sorttype == L_SHELL_SORT) naindex = numaGetSortIndex(na, sortorder); else /* sorttype == L_BIN_SORT */ naindex = numaGetBinSortIndex(na, sortorder); if (pnasort) *pnasort = numaSortByIndex(na, naindex); if (pnainvert) *pnainvert = numaInvertMap(naindex); if (pnaindex) *pnaindex = naindex; else numaDestroy(&naindex); return 0; } /*! * numaSortAutoSelect() * * Input: nas (input numa) * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * Return: naout (output sorted numa), or null on error * * Notes: * (1) This does either a shell sort or a bin sort, depending on * the number of elements in nas and the dynamic range. */ NUMA * numaSortAutoSelect(NUMA *nas, l_int32 sortorder) { l_int32 type; PROCNAME("numaSortAutoSelect"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); type = numaChooseSortType(nas); if (type == L_SHELL_SORT) return numaSort(NULL, nas, sortorder); else if (type == L_BIN_SORT) return numaBinSort(nas, sortorder); else return (NUMA *)ERROR_PTR("invalid sort type", procName, NULL); } /*! * numaSortIndexAutoSelect() * * Input: nas * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * Return: nad (indices of nas, sorted by value in nas), or null on error * * Notes: * (1) This does either a shell sort or a bin sort, depending on * the number of elements in nas and the dynamic range. */ NUMA * numaSortIndexAutoSelect(NUMA *nas, l_int32 sortorder) { l_int32 type; PROCNAME("numaSortIndexAutoSelect"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); type = numaChooseSortType(nas); if (type == L_SHELL_SORT) return numaGetSortIndex(nas, sortorder); else if (type == L_BIN_SORT) return numaGetBinSortIndex(nas, sortorder); else return (NUMA *)ERROR_PTR("invalid sort type", procName, NULL); } /*! * numaChooseSortType() * * Input: na (to be sorted) * Return: sorttype (L_SHELL_SORT or L_BIN_SORT), or UNDEF on error. * * Notes: * (1) This selects either a shell sort or a bin sort, depending on * the number of elements in nas and the dynamic range. * (2) If there are negative values in nas, it selects shell sort. */ l_int32 numaChooseSortType(NUMA *nas) { l_int32 n, type; l_float32 minval, maxval; PROCNAME("numaChooseSortType"); if (!nas) return ERROR_INT("nas not defined", procName, UNDEF); numaGetMin(nas, &minval, NULL); n = numaGetCount(nas); /* Very small histogram; use shell sort */ if (minval < 0.0 || n < 200) { L_INFO("Shell sort chosen\n", procName); return L_SHELL_SORT; } /* Need to compare nlog(n) with maxval. The factor of 0.003 * was determined by comparing times for different histogram * sizes and maxval. It is very small because binsort is fast * and shell sort gets slow for large n. */ numaGetMax(nas, &maxval, NULL); if (n * log((l_float32)n) < 0.003 * maxval) { type = L_SHELL_SORT; L_INFO("Shell sort chosen\n", procName); } else { type = L_BIN_SORT; L_INFO("Bin sort chosen\n", procName); } return type; } /*! * numaSort() * * Input: naout (output numa; can be NULL or equal to nain) * nain (input numa) * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * Return: naout (output sorted numa), or null on error * * Notes: * (1) Set naout = nain for in-place; otherwise, set naout = NULL. * (2) Source: Shell sort, modified from K&R, 2nd edition, p.62. * Slow but simple O(n logn) sort. */ NUMA * numaSort(NUMA *naout, NUMA *nain, l_int32 sortorder) { l_int32 i, n, gap, j; l_float32 tmp; l_float32 *array; PROCNAME("numaSort"); if (!nain) return (NUMA *)ERROR_PTR("nain not defined", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); /* Make naout if necessary; otherwise do in-place */ if (!naout) naout = numaCopy(nain); else if (nain != naout) return (NUMA *)ERROR_PTR("invalid: not in-place", procName, NULL); array = naout->array; /* operate directly on the array */ n = numaGetCount(naout); /* Shell sort */ for (gap = n/2; gap > 0; gap = gap / 2) { for (i = gap; i < n; i++) { for (j = i - gap; j >= 0; j -= gap) { if ((sortorder == L_SORT_INCREASING && array[j] > array[j + gap]) || (sortorder == L_SORT_DECREASING && array[j] < array[j + gap])) { tmp = array[j]; array[j] = array[j + gap]; array[j + gap] = tmp; } } } } return naout; } /*! * numaBinSort() * * Input: nas (of non-negative integers with a max that is * typically less than 50,000) * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * Return: na (sorted), or null on error * * Notes: * (1) Because this uses a bin sort with buckets of size 1, it * is not appropriate for sorting either small arrays or * arrays containing very large integer values. For such * arrays, use a standard general sort function like * numaSort(). */ NUMA * numaBinSort(NUMA *nas, l_int32 sortorder) { NUMA *nat, *nad; PROCNAME("numaBinSort"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); nat = numaGetBinSortIndex(nas, sortorder); nad = numaSortByIndex(nas, nat); numaDestroy(&nat); return nad; } /*! * numaGetSortIndex() * * Input: na * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * Return: na giving an array of indices that would sort * the input array, or null on error */ NUMA * numaGetSortIndex(NUMA *na, l_int32 sortorder) { l_int32 i, n, gap, j; l_float32 tmp; l_float32 *array; /* copy of input array */ l_float32 *iarray; /* array of indices */ NUMA *naisort; PROCNAME("numaGetSortIndex"); if (!na) return (NUMA *)ERROR_PTR("na not defined", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sortorder", procName, NULL); n = numaGetCount(na); if ((array = numaGetFArray(na, L_COPY)) == NULL) return (NUMA *)ERROR_PTR("array not made", procName, NULL); if ((iarray = (l_float32 *)CALLOC(n, sizeof(l_float32))) == NULL) return (NUMA *)ERROR_PTR("iarray not made", procName, NULL); for (i = 0; i < n; i++) iarray[i] = i; /* Shell sort */ for (gap = n/2; gap > 0; gap = gap / 2) { for (i = gap; i < n; i++) { for (j = i - gap; j >= 0; j -= gap) { if ((sortorder == L_SORT_INCREASING && array[j] > array[j + gap]) || (sortorder == L_SORT_DECREASING && array[j] < array[j + gap])) { tmp = array[j]; array[j] = array[j + gap]; array[j + gap] = tmp; tmp = iarray[j]; iarray[j] = iarray[j + gap]; iarray[j + gap] = tmp; } } } } naisort = numaCreate(n); for (i = 0; i < n; i++) numaAddNumber(naisort, iarray[i]); FREE(array); FREE(iarray); return naisort; } /*! * numaGetBinSortIndex() * * Input: na (of non-negative integers with a max that is typically * less than 1,000,000) * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * Return: na (sorted), or null on error * * Notes: * (1) This creates an array (or lookup table) that contains * the sorted position of the elements in the input Numa. * (2) Because it uses a bin sort with buckets of size 1, it * is not appropriate for sorting either small arrays or * arrays containing very large integer values. For such * arrays, use a standard general sort function like * numaGetSortIndex(). */ NUMA * numaGetBinSortIndex(NUMA *nas, l_int32 sortorder) { l_int32 i, n, isize, ival, imax; l_float32 size; NUMA *na, *nai, *nad; L_PTRA *paindex; PROCNAME("numaGetBinSortIndex"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return (NUMA *)ERROR_PTR("invalid sort order", procName, NULL); /* Set up a ptra holding numa at indices for which there * are values in nas. Suppose nas has the value 230 at index * 7355. A numa holding the index 7355 is created and stored * at the ptra index 230. If there is another value of 230 * in nas, its index is added to the same numa (at index 230 * in the ptra). When finished, the ptra can be scanned for numa, * and the original indices in the nas can be read out. In this * way, the ptra effectively sorts the input numbers in the nas. */ numaGetMax(nas, &size, NULL); isize = (l_int32)size; if (isize > 1000000) L_WARNING("large array: %d elements\n", procName, isize); paindex = ptraCreate(isize + 1); n = numaGetCount(nas); for (i = 0; i < n; i++) { numaGetIValue(nas, i, &ival); nai = (NUMA *)ptraGetPtrToItem(paindex, ival); if (!nai) { /* make it; no shifting will occur */ nai = numaCreate(1); ptraInsert(paindex, ival, nai, L_MIN_DOWNSHIFT); } numaAddNumber(nai, i); } /* Sort by scanning the ptra, extracting numas and pulling * the (index into nas) numbers out of each numa, taken * successively in requested order. */ ptraGetMaxIndex(paindex, &imax); nad = numaCreate(0); if (sortorder == L_SORT_INCREASING) { for (i = 0; i <= imax; i++) { na = (NUMA *)ptraRemove(paindex, i, L_NO_COMPACTION); if (!na) continue; numaJoin(nad, na, 0, -1); numaDestroy(&na); } } else { /* L_SORT_DECREASING */ for (i = imax; i >= 0; i--) { na = (NUMA *)ptraRemoveLast(paindex); if (!na) break; /* they've all been removed */ numaJoin(nad, na, 0, -1); numaDestroy(&na); } } ptraDestroy(&paindex, FALSE, FALSE); return nad; } /*! * numaSortByIndex() * * Input: nas * naindex (na that maps from the new numa to the input numa) * Return: nad (sorted), or null on error */ NUMA * numaSortByIndex(NUMA *nas, NUMA *naindex) { l_int32 i, n, index; l_float32 val; NUMA *nad; PROCNAME("numaSortByIndex"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); if (!naindex) return (NUMA *)ERROR_PTR("naindex not defined", procName, NULL); n = numaGetCount(nas); nad = numaCreate(n); for (i = 0; i < n; i++) { numaGetIValue(naindex, i, &index); numaGetFValue(nas, index, &val); numaAddNumber(nad, val); } return nad; } /*! * numaIsSorted() * * Input: nas * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * &sorted ( 1 if sorted; 0 if not) * Return: 1 if OK; 0 on error * * Notes: * (1) This is a quick O(n) test if nas is sorted. It is useful * in situations where the array is likely to be already * sorted, and a sort operation can be avoided. */ l_int32 numaIsSorted(NUMA *nas, l_int32 sortorder, l_int32 *psorted) { l_int32 i, n; l_float32 preval, val; PROCNAME("numaIsSorted"); if (!psorted) return ERROR_INT("&sorted not defined", procName, 1); *psorted = FALSE; if (!nas) return ERROR_INT("nas not defined", procName, 1); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sortorder", procName, 1); n = numaGetCount(nas); numaGetFValue(nas, 0, &preval); for (i = 1; i < n; i++) { numaGetFValue(nas, i, &val); if ((sortorder == L_SORT_INCREASING && val < preval) || (sortorder == L_SORT_DECREASING && val > preval)) return 0; } *psorted = TRUE; return 0; } /*! * numaSortPair() * * Input: nax, nay (input arrays) * sortorder (L_SORT_INCREASING or L_SORT_DECREASING) * &nasx ( sorted) * &naxy ( sorted exactly in order of nasx) * Return: 0 if OK, 1 on error * * Notes: * (1) This function sorts the two input arrays, nax and nay, * together, using nax as the key for sorting. */ l_int32 numaSortPair(NUMA *nax, NUMA *nay, l_int32 sortorder, NUMA **pnasx, NUMA **pnasy) { l_int32 sorted; NUMA *naindex; PROCNAME("numaSortPair"); if (!pnasx) return ERROR_INT("&nasx not defined", procName, 1); if (!pnasy) return ERROR_INT("&nasy not defined", procName, 1); *pnasx = *pnasy = NULL; if (!nax) return ERROR_INT("nax not defined", procName, 1); if (!nay) return ERROR_INT("nay not defined", procName, 1); if (sortorder != L_SORT_INCREASING && sortorder != L_SORT_DECREASING) return ERROR_INT("invalid sortorder", procName, 1); numaIsSorted(nax, sortorder, &sorted); if (sorted == TRUE) { *pnasx = numaCopy(nax); *pnasy = numaCopy(nay); } else { naindex = numaGetSortIndex(nax, sortorder); *pnasx = numaSortByIndex(nax, naindex); *pnasy = numaSortByIndex(nay, naindex); numaDestroy(&naindex); } return 0; } /*! * numaInvertMap() * * Input: nas * Return: nad (the inverted map), or null on error or if not invertible * * Notes: * (1) This requires that nas contain each integer from 0 to n-1. * The array is typically an index array into a sort or permutation * of another array. */ NUMA * numaInvertMap(NUMA *nas) { l_int32 i, n, val, error; l_int32 *test; NUMA *nad; PROCNAME("numaInvertMap"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); n = numaGetCount(nas); nad = numaMakeConstant(0.0, n); test = (l_int32 *)CALLOC(n, sizeof(l_int32)); error = 0; for (i = 0; i < n; i++) { numaGetIValue(nas, i, &val); if (val >= n) { error = 1; break; } numaReplaceNumber(nad, val, i); if (test[val] == 0) { test[val] = 1; } else { error = 1; break; } } FREE(test); if (error) { numaDestroy(&nad); return (NUMA *)ERROR_PTR("nas not invertible", procName, NULL); } return nad; } /*----------------------------------------------------------------------* * Random permutation * *----------------------------------------------------------------------*/ /*! * numaPseudorandomSequence() * * Input: size (of sequence) * seed (for random number generation) * Return: na (pseudorandom on {0,...,size - 1}), or null on error * * Notes: * (1) This uses the Durstenfeld shuffle. * See: http://en.wikipedia.org/wiki/Fisher–Yates_shuffle. * Result is a pseudorandom permutation of the sequence of integers * from 0 to size - 1. */ NUMA * numaPseudorandomSequence(l_int32 size, l_int32 seed) { l_int32 i, index, temp; l_int32 *array; NUMA *na; PROCNAME("numaPseudorandomSequence"); if (size <= 0) return (NUMA *)ERROR_PTR("size <= 0", procName, NULL); if ((array = (l_int32 *)CALLOC(size, sizeof(l_int32))) == NULL) return (NUMA *)ERROR_PTR("array not made", procName, NULL); for (i = 0; i < size; i++) array[i] = i; srand(seed); for (i = size - 1; i > 0; i--) { index = (l_int32)((i + 1) * ((l_float64)rand() / (l_float64)RAND_MAX)); index = L_MIN(index, i); temp = array[i]; array[i] = array[index]; array[index] = temp; } na = numaCreateFromIArray(array, size); FREE(array); return na; } /*! * numaRandomPermutation() * * Input: nas (input array) * seed (for random number generation) * Return: nas (randomly shuffled array), or null on error */ NUMA * numaRandomPermutation(NUMA *nas, l_int32 seed) { l_int32 i, index, size; l_float32 val; NUMA *naindex, *nad; PROCNAME("numaRandomPermutation"); if (!nas) return (NUMA *)ERROR_PTR("nas not defined", procName, NULL); size = numaGetCount(nas); naindex = numaPseudorandomSequence(size, seed); nad = numaCreate(size); for (i = 0; i < size; i++) { numaGetIValue(naindex, i, &index); numaGetFValue(nas, index, &val); numaAddNumber(nad, val); } numaDestroy(&naindex); return nad; } /*----------------------------------------------------------------------* * Functions requiring sorting * *----------------------------------------------------------------------*/ /*! * numaGetRankValue() * * Input: na * fract (use 0.0 for smallest, 1.0 for largest) * nasort ( increasing sorted version of na) * usebins (0 for general sort; 1 for bin sort) * &val ( rank val) * Return: 0 if OK; 1 on error * * Notes: * (1) Computes the rank value of a number in the @na, which is * the number that is a fraction @fract from the small * end of the sorted version of @na. * (2) If you do this multiple times for different rank values, * sort the array in advance and use that for @nasort; * if you're only calling this once, input @nasort == NULL. * (3) If @usebins == 1, this uses a bin sorting method. * Use this only where: * * the numbers are non-negative integers * * there are over 100 numbers * * the maximum value is less than about 50,000 * (4) The advantage of using a bin sort is that it is O(n), * instead of O(nlogn) for general sort routines. */ l_int32 numaGetRankValue(NUMA *na, l_float32 fract, NUMA *nasort, l_int32 usebins, l_float32 *pval) { l_int32 n, index; NUMA *nas; PROCNAME("numaGetRankValue"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; /* init */ if (!na) return ERROR_INT("na not defined", procName, 1); if (fract < 0.0 || fract > 1.0) return ERROR_INT("fract not in [0.0 ... 1.0]", procName, 1); n = numaGetCount(na); if (n == 0) return ERROR_INT("na empty", procName, 1); if (nasort) { nas = nasort; } else { if (usebins == 0) nas = numaSort(NULL, na, L_SORT_INCREASING); else nas = numaBinSort(na, L_SORT_INCREASING); if (!nas) return ERROR_INT("nas not made", procName, 1); } index = (l_int32)(fract * (l_float32)(n - 1) + 0.5); numaGetFValue(nas, index, pval); if (!nasort) numaDestroy(&nas); return 0; } /*! * numaGetMedian() * * Input: na * &val ( median value) * Return: 0 if OK; 1 on error * * Notes: * (1) Computes the median value of the numbers in the numa, by * sorting and finding the middle value in the sorted array. */ l_int32 numaGetMedian(NUMA *na, l_float32 *pval) { PROCNAME("numaGetMedian"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; /* init */ if (!na) return ERROR_INT("na not defined", procName, 1); return numaGetRankValue(na, 0.5, NULL, 0, pval); } /*! * numaGetBinnedMedian() * * Input: na * &val ( integer median value) * Return: 0 if OK; 1 on error * * Notes: * (1) Computes the median value of the numbers in the numa, * using bin sort and finding the middle value in the sorted array. * (2) See numaGetRankValue() for conditions on na for which * this should be used. Otherwise, use numaGetMedian(). */ l_int32 numaGetBinnedMedian(NUMA *na, l_int32 *pval) { l_int32 ret; l_float32 fval; PROCNAME("numaGetBinnedMedian"); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0; /* init */ if (!na) return ERROR_INT("na not defined", procName, 1); ret = numaGetRankValue(na, 0.5, NULL, 1, &fval); *pval = lept_roundftoi(fval); return ret; } /*! * numaGetMode() * * Input: na * &val ( mode val) * &count ( mode count) * Return: 0 if OK; 1 on error * * Notes: * (1) Computes the mode value of the numbers in the numa, by * sorting and finding the value of the number with the * largest count. * (2) Optionally, also returns that count. */ l_int32 numaGetMode(NUMA *na, l_float32 *pval, l_int32 *pcount) { l_int32 i, n, maxcount, prevcount; l_float32 val, maxval, prevval; l_float32 *array; NUMA *nasort; PROCNAME("numaGetMode"); if (!na) return ERROR_INT("na not defined", procName, 1); if (!pval) return ERROR_INT("&val not defined", procName, 1); *pval = 0.0; if (pcount) *pcount = 0; if ((n = numaGetCount(na)) == 0) return 1; if ((nasort = numaSort(NULL, na, L_SORT_DECREASING)) == NULL) return ERROR_INT("nas not made", procName, 1); array = numaGetFArray(nasort, L_NOCOPY); /* Initialize with array[0] */ prevval = array[0]; prevcount = 1; maxval = prevval; maxcount = prevcount; /* Scan the sorted array, aggregating duplicates */ for (i = 1; i < n; i++) { val = array[i]; if (val == prevval) { prevcount++; } else { /* new value */ if (prevcount > maxcount) { /* new max */ maxcount = prevcount; maxval = prevval; } prevval = val; prevcount = 1; } } /* Was the mode the last run of elements? */ if (prevcount > maxcount) { maxcount = prevcount; maxval = prevval; } *pval = maxval; if (pcount) *pcount = maxcount; numaDestroy(&nasort); return 0; } /*! * numaGetMedianVariation() * * Input: na * &medval ( median value) * &medvar ( median variation from median val) * Return: 0 if OK; 1 on error * * Notes: * (1) Finds the median of the absolute value of the variation from * the median value in the array. Why take the absolute value? * Consider the case where you have values equally distributed * about both sides of a median value. Without taking the absolute * value of the differences, you will get 0 for the variation, * and this is not useful. */ l_int32 numaGetMedianVariation(NUMA *na, l_float32 *pmedval, l_float32 *pmedvar) { l_int32 n, i; l_float32 val, medval; NUMA *navar; PROCNAME("numaGetMedianVar"); if (!pmedvar) return ERROR_INT("&medvar not defined", procName, 1); *pmedvar = 0.0; /* init */ if (!na) return ERROR_INT("na not defined", procName, 1); numaGetMedian(na, &medval); if (pmedval) *pmedval = medval; n = numaGetCount(na); navar = numaCreate(n); for (i = 0; i < n; i++) { numaGetFValue(na, i, &val); numaAddNumber(navar, L_ABS(val - medval)); } numaGetMedian(navar, pmedvar); numaDestroy(&navar); return 0; } /*----------------------------------------------------------------------* * Numa combination * *----------------------------------------------------------------------*/ /*! * numaJoin() * * Input: nad (dest numa; add to this one) * nas ( source numa; add from this one) * istart (starting index in nas) * iend (ending index in nas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) istart < 0 is taken to mean 'read from the start' (istart = 0) * (2) iend < 0 means 'read to the end' * (3) if nas == NULL, this is a no-op */ l_int32 numaJoin(NUMA *nad, NUMA *nas, l_int32 istart, l_int32 iend) { l_int32 n, i; l_float32 val; PROCNAME("numaJoin"); if (!nad) return ERROR_INT("nad not defined", procName, 1); if (!nas) return 0; if (istart < 0) istart = 0; n = numaGetCount(nas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", procName, 1); for (i = istart; i <= iend; i++) { numaGetFValue(nas, i, &val); numaAddNumber(nad, val); } return 0; } /*! * numaaJoin() * * Input: naad (dest naa; add to this one) * naas ( source naa; add from this one) * istart (starting index in nas) * iend (ending index in naas; use -1 to cat all) * Return: 0 if OK, 1 on error * * Notes: * (1) istart < 0 is taken to mean 'read from the start' (istart = 0) * (2) iend < 0 means 'read to the end' * (3) if naas == NULL, this is a no-op */ l_int32 numaaJoin(NUMAA *naad, NUMAA *naas, l_int32 istart, l_int32 iend) { l_int32 n, i; NUMA *na; PROCNAME("numaaJoin"); if (!naad) return ERROR_INT("naad not defined", procName, 1); if (!naas) return 0; if (istart < 0) istart = 0; n = numaaGetCount(naas); if (iend < 0 || iend >= n) iend = n - 1; if (istart > iend) return ERROR_INT("istart > iend; nothing to add", procName, 1); for (i = istart; i <= iend; i++) { na = numaaGetNuma(naas, i, L_CLONE); numaaAddNuma(naad, na, L_INSERT); } return 0; } /*! * numaaFlattenToNuma() * * Input: numaa * Return: numa, or null on error * * Notes: * (1) This 'flattens' the Numaa to a Numa, by joining successively * each Numa in the Numaa. * (2) It doesn't make any assumptions about the location of the * Numas in the Numaa array, unlike most Numaa functions. * (3) It leaves the input Numaa unchanged. */ NUMA * numaaFlattenToNuma(NUMAA *naa) { l_int32 i, nalloc; NUMA *na, *nad; NUMA **array; PROCNAME("numaaFlattenToNuma"); if (!naa) return (NUMA *)ERROR_PTR("naa not defined", procName, NULL); nalloc = naa->nalloc; array = numaaGetPtrArray(naa); nad = numaCreate(0); for (i = 0; i < nalloc; i++) { na = array[i]; if (!na) continue; numaJoin(nad, na, 0, -1); } return nad; } leptonica-1.70/style-guide.txt0000644000175000017500000001503512270133426014505 0ustar dandan/*====================================================================* - Copyright (C) 2001 Leptonica. All rights reserved. - This software is distributed in the hope that it will be - useful, but with NO WARRANTY OF ANY KIND. - No author or distributor accepts responsibility to anyone for the - consequences of using this software, or for whether it serves any - particular purpose or works at all, unless he or she says so in - writing. Everyone is granted permission to copy, modify and - redistribute this source code, for commercial or non-commercial - purposes, with the following restrictions: (1) the origin of this - source code must not be misrepresented; (2) modified versions must - be plainly marked as such; and (3) this notice may not be removed - or altered from any source or modified source distribution. *====================================================================*/ style-guide.txt 24 Jan 2014 [This is not complete. You need to look at existing code to verify your code meets the style guidelines. And if you find any aberrant code, please let me know!] The C code in leptonica follows these conventions: (1) ANSI C, with no exceptions (a) C-style comments only: /* */ (b) Variables are declared at the beginning of a function. [This is more strict than ANSI C, which only requires declarations to be at the beginning of a scope delineated by braces.] (c) Use typedefs for structs like Pix; e.g., function(PIX *pixs) Do not do this; it is valid C++, but not C: function(Pix *pixs) (2) Formatting (a) White space: 4 space indentation. No tabs, ever. No trailing spaces. (b) Function header is in this format: /*! * boxContains() * * Input: box1, box2 * &result ( 1 if box2 is entirely contained within * box1, and 0 otherwise) * Return: 0 if OK, 1 on error */ (c) Function definition has return value on separate line and starting brace on separate line. PIX * function(...) { (d) Function arguments and local variables line up vertically; allow at least 2 spaces between type and variable name (including '*') function(PIX *pixs, l_int32 factor, l_float32 *pave) { char buf[BUF_SIZE]; l_int32 w, h, d; l_float32 *vect; (e) Braces are placed like this for 'if', 'while', 'do': if (...) { ... } else if (...) { ... } The exceptions are for the beginning of a function and for the switch: switch (x) { case 1: ... ... } Braces are required if any of the clauses have a single statement: if (...) { x = 0; } else { x++; y = 3.0 * x; } (f) Section headers should look like this: /*----------------------------------------------------------------------* * Statistics in an arbitrary rectangle * *----------------------------------------------------------------------*/ (g) Major inline comments (starting a section) should be indented 4 extra spaces and start with a capital. Multiple line comments should be formatted like this: /* If w and h not input, determine the minimum size required * to contain the origin and all c.c. */ (h) Minor inline comments (e.g., at the end of a line) should have 2 spaces and no leading capital; e.g. if (i && ((i % ncols) == 0)) { /* start new row */ (3) Naming (a) Function names begin with lower case and successive words have the first letter capitalized; e.g., boxIntersects(). (b) The first word in the function name is the name of the primary input data structure (if there is one). (c) Variable names are as short as possible, without causing confusion. (d) Pointers to data structures are typically named by the type of struct, without a leading 'p'; e.g., pixt, boxt. (e) When ptrs are input to a function, in order to return a value, if the local name would be 'ave', the pointer is 'pave'. (f) Preprocessor variables and enums are named all caps, with '_' between parts. (g) There are very few globals in the library. Of these, there are just a handful of static globals that can be changed. Globals are named with each word beginning with a capital; e.g., ImageFileFormatExtensions[] Static globals are named like preprocessor variables, except they are prepended by 'var_'; e.g., var_PNG_WRITE_ALPHA Functions that set globals are named with a pre-pended 'l_'; e.g., l_pngSetWriteAlpha() (4) Arg checking Both number values and ptrs can be returned in function arguments. The following applies equally to both types, and happens at the beginning of the function. We distinguish between returned entities that are optional and required. (a) First, all optional values are initialized if possible: if (ppixd) *ppixd = NULL; // Pix **ppixd is optional (b) Second, if there is more than 1 required value, each is initialized if possible: if (pnar) *pnar = NULL; // Numa **pnar is required if (pnag) *pnag = NULL; // Numa **pnag is required Then all required arguments are tested in arbitrary order. But if there is exactly 1 required value, it is checked and initialized if possible: if (!ppixd) return ERROR_INT("&pixd not defined, procName, 1); *ppixd = NULL; (5) Miscellaneous (a) Look around at the code after reviewing the guidelines. (b) Return nothing on stdout. (c) Returns to stderr should be blockable by compiler flags, such as NO_CONSOLE_IO, and by setting message severity thresholds both at compile and at run time. Naked fprintf(stderr, ...) should be avoided in the library. (d) Applications (in prog) that hand a FILE ptr to a library function, or accept heap-allocated data from a library function, should use special wrappers. See lept_*() functions in utils.c. (e) Changes to existing data structures and API changes should be avoided if possible. (f) Accessors are typically provided for struct fields that have extensive use. leptonica-1.70/version-notes.html0000664000175000017500000016546112270004763015226 0ustar dandan

Version Notes for Leptonica



Note: The following are highlights of the changes in each version. They are not a complete listing of the modifications.


1.70   24 Jan 14   (distribution to debian; ubuntu 14-04; 4.0.0)
       New bilateral filtering.
       New simple character recognition utility.
       Improved dewarping functionality, in model building and rendering.
        More flexible use of ref models.
       Better and more consistent handling of alpha layer in RGBA, though
        use of the spp field.  Ability to handle more png files with alpha,
        including palette with alpha.
       New fast converters from jpeg and jpeg2000 to pdf, without transcoding.
       Made bmp reader (and pix reading in general) more robust; avoid
        size overflow errors.
       New text labelling operations; depth conversion of a set of images
       New license (essentially BSD 2-clause), to specify conditions
        for both source and binary distribution.
       Improved auto make: make all progs, install just 11, test 61.
       New src files: bilateral.{c,h}, dewarp1.c, dewarp2.c,
           dewarp3.c, dewarp4.c, jp2kio.c, jp2kiostub.c,
           pixlabel.c, recogbasic.c, recogdid.c, recogident.c,
           recogtrain.c, recog.h
       New prog files: adaptmap_dark.c, alphaxform_ret.c,
           bilateral_reg.c, binarize_reg.c, binarize_set.c,
           blackwhite_reg.c, blend1_reg.c, blend3_reg.c, blend4_reg.c,
           boxa1_reg.c, colorcontent_reg.c, coloring_reg.c,
           colorspace_reg.c, compare_reg.c, converttopdf.c,
           croptest.c, dewarprules.c, dewarptest1.c, dewarptest2.c,
           dewarptest3.c, dewarptest4.c, displayboxa.c, displaypix.c,
           displaypixa.c, findcorners_reg.c, fpix1_reg.c,
           fpix2_reg.c, fpixcontours.c, insert_reg.c, italictest.c,
           jpegio_reg.c, label_reg.c, multitype_reg.c, nearline_reg.c,
           newspaper_reg.c, numa1_reg.c, numa2_reg.c, recogsort.c,
           recogtest1.c, shear1_reg.c, webpio_reg.c, wordboxes_reg.c
       Removed src files: arithlow.c, binexpandlow.c, binreducelow.c,
           dewarp.c
       Removed prog files: blend_reg.c, blendtest1.c,
           dewarptest.c, fpix_reg.c, inserttest.c, numa_reg.c, rotatetest2.c
           shear_reg, xvdisp.c

1.69   16 Jan 12   (distribution to debian; ubuntu 12-04; 3.0.0)
       Fixed bug in pdf generation for large files, using a new
        double array (dnabasic.c).  Added several new modes for pdf
        generation from sets of images.
       Dewarp based on image content now aligns to left and right margins;
        works at book level; is more robust to bad disparity models;
        version 2 serialization.
       Fixed regutils to return the actual number of errors.
       Improved sorting efficiency of numas in cases where binning,
        which is order N, makes sense.
       Fixed fpix serialization (now version 2).
       New version (5) of xtractprotos, allows putting prototypes in-line in
        allheaders.h.  Having them separately in leptprotos.h still an option
       New copyright (BDS, 2 clause) on src files.
       Removed all trailing whitespace in src files.
       New src files: boxfunc4.c coloring.c, dnabasic.c
       New prog files: dna_reg.c, alphaops_reg.c
       Removed prog file: alphaclean_reg.c

1.68   10 Mar 11
       Fixed windows issues with passing pointers across C-runtime boundaries
       when using dlls, by providing special functions (e.g., lept_fopen()).
       Proper version numbers are now set with automake.
       New utility (quadtree.c) for generating quadtree statistics.
       New utility (in colorspace.c) for conversions to and from YUV.
       Refactored functions for assembling image data for generating
       either PS or PDF images using g4, jpeg or flate encoding.
       Better tempfile names, using current time in microseconds.
       Functions for getting resolution from jpeg and png files.
       Use size_t throughout for reading and writing binary data.
       Deprecate arrayRead*() and arrayWrite() functions; replace in
       the library with l_binaryRead*() and l_binaryWrite().
       Better handling of colormap images for in-place rasterop and shear.
       New utility (bytearray.c) for parsing and handling binary data;
       used for generating PDF files.
       New utility (pdfio.c) for generating PDF files.
       Refactored regutils functions to make them simpler to use.
       Top-level deskew now works on any image.
       Added functions in utils.c for cross-platform development, mostly
       for functions that make and remove directories, copy, move
       and delete files, etc.  It should now be straightforward to write
       programs that will compile and run on windows.
       Reg tests have better printout; all give timings.
       New utility program: convertfilestopdf

1.67   9 Nov 10
       Autoconf: now built with James Cuirot's config files that
         build the library and all 200 progs.
       New sudoku solver.  Just a game, but there are interesting aspects.
       Modified parseprotos.c to reject a type of "extern" decl.
       Add faster implementation for very small gray morphology
         operations (3x1, 1x3, 3x3).
       Eliminate warnings on recent gcc if you don't check return values
         from fread, fscanf, fgets, system, etc.
       Convolution: new functions for windowed variance and stdev; allow
         non-square kernel for windowed mean square.
       Put stdio.h and stdlib.h in alltypes.h, so they're not required
         in any .c files.
       Replace numaConvolve(), which is just a windowed mean, by
         windowed statistics functions (mean, mean square, variance).
       Generalize pixExtractOnLine() for arbitrary lines.
       Add pix interface to webp (webpio.c, webpiostub.c).  This is a
         new open source codec, based on the video codec vpx (webm).
       Serialization of FPix and DPix
       Interconversion between FPix and DPix
       Integer scaling of FPix and DPix; includes the last row and column.
       New convertfiles.c: depth conversion on files in a directory.
       Testing programs in prog:
           convolve_reg.c, numa_reg.c: expanded test set
           projection_reg.c (tests pixRowStats(), pixColumnStats())
           dewarptest.c: output ps and pdf files
           writemtiff.c: simple driver to write images to a single file

1.66   3 Aug 10
       More tweaks for including (or not) bounding box hints for
         PS wrapping.  Default is to write b.b., but not in functions
         that wrap images as full pages (psio1.c, psio2.c)
       pix4.c split in two files, and added function to identify c.c.
         that are sufficiently similar in shape to rectangles (pix5.c)
       Modify 2 and 4 bit setters to clip the input value so that it can
         only affect the pixel requested (arrayaccess.c, arrayaccess,h)
       New pseudorandom sequence functions (numafunc1.c)
       Dewarping camera-based images using textlines (dewarp.c, prog/dewarp*)
       Geometrical function for aggregating overlapping bounding boxes.
       Programs to generate figures for book chapter "Document Image
         Applications" in "Mathematical Morphology: theory and applications"
         (see: http:/www.leptonica.org/najman-talbot-book-chapter.html)
         (prog/livre*.c)
       Functions that do affine and other operations in images with
         alpha blending at edges: pix*WithAlpha().  Also do this
         with a gamma/inverse-gamma wrapper to further reduce edge aliasing.
          (rotate.c, scale.c, projective.c, affine.c, bilinear.c,
           prog/alphaxform_reg.c)
       Improved color segmentation (fixed bugs; made faster)
       Higher order least square fits: quadratic, cubic, quartic. (pts.c)
       Various mods for otsu binarization and the *SplitDistribution*()
         functions (numafunc2.c, prog/otsutest2.c)
       Control sampling in convolution output (convolve.c, prog/fpix_reg.c)
       Morphological operations on numas (numafunc1.c, numafunc2.c,
         prog/numa_reg.c)
       Pix serialization wrapped so we can use pixRead(), etc on these
         files (spixio.c, readfile.c, writefile.c)
       Gif read/write to memory fixed (and cheated -- using files) (gifio.c)
       New fpix and dpix accessors; contour rendering on fpix (fpix1.c, fpix2.c)
       Various functions for linearly mapping colors and displaying arrays
         of colors (pix4.c, blend.c, prog/rankhisto_reg.c)
       Functions for getting approximate ranges of colors and color
         components in an image (pix4.c, colormap.c)
       Cleaned up windows platform and compiler defines and macros.

1.65   5 Apr 10
       Added regression test utility functions for standardizing and
         automating construction and running of regression tests.  Makes the
         golden files when the 2nd arg to the reg test is 'generate'.
         (regutils.{c,h})
         Converted 22 reg tests in prog to use this; invoked with alltests_reg.
         Goal is to put all prog/*_reg.c into this format and put a set
         of golden files on the web.
       Small fixes in gifio for handling streams properly.
       New functions for shifting colors, hue invariant transforms, etc
         (blend.c)
       prog/dwamorph*.c: rename *1_reg.c to dwalineargen.c; others
         converted to standard reg tests.
       New rgb convolution functions.
       For PS output, write all images with a bounding box hint and with
         page numbers, which works for both embedded (e.g., in tex) and
         full page generated PS.  Once converted to pdf, this is fine
         in all situation.
       New functions for initialization and random insertion with pixcomp.
       For color quantization, make the lightest color white if sufficiently
         close; ditto for black (colorquant1.c, colorquant2.c).
       Rank binning of 8 bpp and rgb images (numafunc2.c, pix4.c)
       A function to rank colors by the intensity of the minimum comp (pix4.c)
       New pixRotateBinaryNice(), rotates 1 bpp pix in such a way that
         the shear lines aren't visible. (rotate.c)
       New pixSaveTiledWithText(), a convenience function to append text
         to images that are being tiled. (writefile.c)
       Stereoscopic warping functions and stereo pair functions (warper.c)
       Linear interpolated shear -- better than rasterop shear (shear.c)
       Option to use higher quality chroma (U,V) sampling in jpeg (jpegio.c)
       Rename Bmf --> L_Bmf.
       New tests in prog:
         alltests_reg.c alphaclean_reg.c, psio_reg.c, rankbin_reg.c,
         rankhisto_reg.c, warpertest.c

1.64   3 Jan 10
       Easy setup for standard byte processing on 8 bpp pix (pix2.c)
       Evaluation of difference between similar images; test for
       similar images and (compare.c)
       Subpixel scaling, with color input and separate scale factors (pixconv.c)
       Fix tiff header reader to get correct format (tiffio.c)
       Enable pixDisplay() to work with i_view (windows) and with
         xzgv and xli as well as xv; allow application to choose
         which to use (writefile.c).
       Use a mask to specify regions that are changed by a morphological
         operation (morphapp.c).
       Improve the default sharpening for scaling (scale.c)
       Function to test for equivalence of file data (utils.c)
       Select and read image files with embedded index (readfile.c)
       Fix box size calculation in pixEmbedForRotation(); solution
         provided by Brent Sundheimer.
       New pixDisplayMultiple(), instead of calling gthumb directly; this
         is now set up to use i_view for windows.
       Changed criteria for determining if an image is color (colorcontent.c,
         colorquant{1,2}.c.
       Optional mode where the filename extension is automatically written
         to output image files; particularly useful for windows.
       Initialize boxa and pixa as full, with minimal placeholders.
       Get rank valued numbers and boxes in numa and boxa.
       Cute implementation for finding largest solid rectangle (maze.c)
       New median cut quantization for mixed (color/gray) images (colorquant2.c)
       Many changes to allow the library and applications be built easily
         in windows.  There is now a thorough windows readme, written by Tom
         Powers, for doing this.  The windows build information and
         project files are now in a new vs2008 directory.

1.63   8 Nov 09
       Added pixScaleToGrayFast(), a faster version with very similar quality.
       Fixed scaleGrayLILow() to handle edge pixels more accurately
       Text processing:
         new text application (finditalic.c, prog/finditalic.c) for locating
           words in italic type style.
         Easier to add text to a pix using the bitmap font stored in
           the font directory; see, e.g., prog/writetxt_reg.c.
       Blending of 2 images with an alpha channel: pixBlendWithGrayMask()
       Fixed bug in color segmentation; it now (again) works properly.
       New utility (pixcomp.c) for handling compressed pix arrays in
          memory; new PixComp and PixaComp structs.
       Fast serialization of pix without compressing (pixSerializeToMemory
          and pixDeserializeFromMemory); required serialized colormaps
       FileI/O: new functions for reading file headers.
          PostScript generation modernized; split psio.c into psio1.c
            and psio2.c; added level 3 (flate) encoding.
          new functions for reading and writing multipage tiffs, for
            arbitrary input images.  For writing, compression is lossless
            (either g4 or zip)
          update all I/O stub files
       Miscellaneous: new pixaAddBorderGeneral(); new functions in pix3.c
          for counting fg pixels and summing 8 bpp pixels by column and row;
          new numaUniformSampling() for resampling with interpolation;
          subpixel scaling.
       New or improved regression tests in prog:
          extrema_reg, pixalloc_reg, blend2_reg, rotateorth_reg,
          ioformats_reg, colorseg_reg, pixcomp_reg, pixserial_reg,
          writetext_reg, psioseg_reg, subpixel_reg.
       Interface changes:
         findFileFormat() and findFileFormatBuffer(): now returns format
             using input ptr.  The function return value is 0 if OK; 1 on error
         rename: pixThresholdPixels() --> pixThresholdPixelSum()

1.62   26 Jul 09
       Expanded composite Dwa implementation as a sequence of operations,
       so that it now works beyond a size of 63.  It's typically about 2x
       faster than the composite rasterop implementation (with help
       from Ankur Jain).  Also use data transfer instead of data copy
       whenever possible.  Thorough tests with binmorph4_reg and binmorph5_reg.
       New functions in colorseg.c for masking and histogramming in HSV
       color space.
       Treat string constants rigorously as const char*, initializing
       to char[] if to be used as non-const, or in some cases casting
       to char*.  This avoids compiler warnings.
       Improved color quantization using existing colormap for octcubes
       and a new version for grayscale.  This will rigorously map most
       black and most white octcubes (rsp) to black and white
       if they exist in the colormap.
       Fast quantization to an existing colormap for color and grayscale.
       Fixed some bugs; e.g., in pixAffineSampled() for 1 bpp with
       L_BRING_IN_BLACK; reading and writing pnm for 2 and 4 bpp.
       In pngio.c, enable compile time control over these settings:
         converting 16 bpp --> 8 bpp on read
         removing alpha channel on read
         setting zlib compression on write
       For general scaling, allow sharpening to be optional, and provided
       faster sharpening operations.
       Improve support for 16 bpp grayscale.
       For scaleToGray* functions, reduce the width truncation.
       In psio.c, new functions for converting segmented page images
       (text and image) into level 2 PostScript.
       Removed all implicit casting to const char*.
       New custom pix memory allocator, designed for large pix whose
       memory needs to be reused many times.
       In xtractprotos, we now allow prepending an arbitrary string to
       each prototype.
       In environ.h, additions for MSVC to work with VC++6, including
       prototpye strings for dll import and export (thanks to Ray Smith).
       In colorseg.c, new functions for building HSV histograms, finding 
       peaks, and generating masks based on the peaks.
       New or improved regression tests:
         pixalloc_reg, binmorph4_reg, binmorph5_reg, conversion_reg,
         scale_reg, cmapquant_reg, 

1.61   26 Apr 09
       New histo-based grayscale quantization: pixGrayQuantizeFromHisto(),
       that is used in new pixQuanitzeIfFewColorsMixed().
       Made final fix in pixBlockconv().  No underflows; no more overflows!
       More efficient rgb write with pnm.
       Add proto to jpegiostub.c, allowing proper use of the stubber.
       Fix several filter functions to use proper test on filter size; viz.,
         pixMinMaxTiles(), several functions in convolve.c.
       Redo shear implementation to handle arbitrary angles, to handle
         colormapped images, and to avoid the singularity at pi/2.
       Removed both static vars from pixSaveTiled().
       Generalized pixRotate() to handle colormapped images, and to use
         pixRotateBySampling() in place of the removed pixRotateEuclidean().
       New skew finder for full angle range, pixFindSkewOrthogonalRange().
       For skew detection, now allow shear about image center as well as
         about the UL corner.
       New rotation reg tests: rotate1_reg.c and rotate2_reg.c.
       Better serialization format for boxaa; introduce new version numbers
         for boxaa, pixa, and boxa, as required.
       Proper init in boxGetGeometry(), boxaGetBoxGeometry(), and the
         accessors in sel1.c and kernel.c.
       Improved Numa functions in numafunc1.c and numafunc2.c; in
         particular, numaMakeHistogramAuto() and numaGetStatsUsingHistogram().
         With all histo generators, make sure the start and binsize params
         are properly set and are used.
         Interface change: Use these parameters implicitly in
         numaHistogramGetRankFromVal() and numaHistogramGetValFromRank().
       Interface change to ptaGetLinearLSF(): add 1 optional parameter.
       In several pixaDisplay*() functions, handle colormaps properly.
       pixafunc.c split to pixafunc1.c and pixafunc2.c.
         New connected component selections and options in pixaSort.
       Patch from Tony Dovgal for reading tiff rgba files.
       Added new logical operation options for numas.
       New pixConvertRGBToGrayMinMax() that chooses min or max of 3 components.
       Computation of pixelwise aligned stats between multiple images
         of the same size (e.g., video), in pix4.c.
       Very fast binsort implemented for boxa and pixa.
       Cleanup and rename stack, queue, heap and ptra functions:
         all structs and typedefs start with "L_"
         all functions start with "l"
       Sel creation for crosses and T junctions.
       New thresholding operations to binary; split out from adaptmap.c
         into binarize.c.
       Implementation of sauvola binarization, including use of pixtiling.
       Added composite parallel union and intersection morphological operations.
       Small changes to scaling and rotation to improve accuracy; only
         visible on very tiny, symmetric images.
       Implemented DPix (double precision data); useful for the mean
         square accumulator for sauvola binarization.
       New fast hybrid grayscale seedfill, in addition to the interative
         version (contributed by Ankur Jain).
       New or improved regression tests:
         rotate1_reg, rotate2_reg, shear_reg, numa_reg, skew_reg,
         ptra1_reg, ptra2_reg, paint_reg, smallpix_reg, pta_reg,
         pixmem_reg, binarize_reg, grayfill_reg.


1.60   19 Jan 09
       Fixed bug in pixBlockconv(), introduced in 1.59, that causes
       overflow when convolving with an image that has white (255)
       at the edges.  [quickly found by Dave Bryan]
       Include function to display freetype fonts in a pix.
       The files freetype.c and freetype.h are in the distribution, but are not
       yet linked into the library.  This is contributed by Tony Dovgal,
       and this version works only for MSVC.
       Found that the problems with binary compression in giflib are fixed
       with giflib 4.1.6.

1.59   11 Jan 09
       Lots of changes since 1.58.
       New files: affinecompose.c, ptra.c, warper.c, watershed.{h,c}.
          Split: boxfunc.c --> (boxfunc1.c, boxfunc2.c, boxfunc3.c)
       Improved connected component filtering, with logical functions
       applied to indicator arrays (pix4.c, pixafunc.c, numafunc1.c).
       Function to determine if an image can be quantized nicely with
       only a few colors (colorcontent.c, pixconv.c).
       New gray seed-filling functions (seedfill.c, seedfilllow.c).
       Fixed bugs in tophats and hdome, due to misuse of pixSubtractGray()
       (morphapp.c).
       New function for improving contrast (adaptmap.c)
       Watershed transform (still slightly buggy) (watershed.c,h).
       Fast random access into a pix using line pointers (pix1.c, arrayaccess.*)
       Conversions of colormaps from gray to color and v.v. (colormap.c)
       Seedfill function that applies an upper limit to the fill
       distance (seedfill.c)
       New function for warping images with random harmonic distortion
       (with help from Tony Dovgal).
       New generic ptr array utility: all O(1) functions of a stack plus
       random replace, insert and delete (ptra.c).
       Simple functions for colorizing a grayscale image with an arbitrary
       color (pixconv.c, colormap.c)
       Flexible affine transforms (translation, scale, rotation) on pta
       and boxa (affinecompose.c).
       Clipping of foreground (both exact and approximate) starting from
       within a rectangular region of the image (pix4.c)
       Blending a colored rectangle over an image (pix2.c, boxfunc3.c)
       Generation of rectangle covering of mask components (boxfunc3.c).
       Block convolution using tiles (for very large images)  (convolve.c)
       New or improved regression tests in prog:
          locminmax_reg, lowaccess_reg, grayfill_reg, adaptnorm_reg,
          xformbox_reg, warper_reg, cmapquant_reg, compfilter_reg,
          splitcomp_reg, affine_reg, bilinear_reg, projective_reg
       Acknowledgments:
       (1) Big thanks to Tony Dovgal for helping with the warping
           (e.g. for captcha).  Tony also provided an implementation that
           allows rendering truetype fonts into a Pix on windows.
           This is not yet incorporated, because it opens a huge
           "can of worms," which is OK if you're going fishing but
           maybe not if you're trying to support leptonica on many platforms.
           TBD.
       (2) David Shao provided a libtools build system that includes
           building the prog directory!  I believe this will work, but it
           is is not yet included because of problems I continue to have
           with macros in version 2.61 of gnu libtools.
       (3) Steve Rogers is working on a MSVC build for the prog directory.
           I hope to have this available for 1.60.

1.58   27 Sept 08
       Added serialization for numaa.
       New octree quantizer pixOctreeQuantByPopulation(), that uses a
       mixture of level2 and level4 octcubes.  Renamed many functions
       in colorquant1.c, and arranged/documented them more carefully.
       Revised documentation in leptonica.org/papers/colorquant.pdf.
       Simplified customization for I/O libraries and fmemopen() in environ.h.
       Fixed bugs in colormap.c, viewfiles.c, pixarith.c.
       Verified Adam Langley's jbig2enc (encoding jbig2 and generating pdf from
       these encoded files) works properly with the current version -- see
       Section 24 of README.html for usage and build hints.
       New separable convolution; let pixConvolve() take 8, 16 and 32 bpp input.
       New floating pt pix (FPix) utility, which allows convolution and
       arithmetic operations on FPix; also interconversion to Pix.
       Ability to read headers on multipage tiff.
       More robust updown text detection in flipdetect.c.
       Use of sharpening to improve scaling when the scale factor is near 1.0.
       See prog/fpix_reg.c for regression test and usage.
       See prog/blend_reg.c for blending regression test, with new functions.

1.57   13 Jul 08
       New Debian distribution for 1.57 (thanks to Jeff Breidenbach).
       Improved the Otsu-type approach for finding a binarization threshold,
       by choosing the min in the histogram subject to constraints
       (numafunc2.c, adaptmap.c)
       New function pixSeedspread() in seedfill.c, similar to a voronoi tiling,
       that is used for adaptive thresholding in pixThresholdSpreadNorm().
       In the process, fixed a small bug in pixDistanceFunction().
       (The approach was suggested by Ray Smith, and uses the fast
       Vincent distance function method to expand each seed.)
       Generalized the functions in kernel.c to use float weights
       for general convolution (Version 2 for kernel), and added
       gaussian kernel generation.
       Put all jpeg header functions into jpegio.c, where they belong.
       Fixed bugs in pixaInsertPix() and pixaRemovePix().
       Added read/write serialization for Numaa.
       New functions for comparing two images using bounding boxes (classapp.c).

1.56   12 May 08
       Added several new 1d barcode decoders.  The functional interface
       is still in flux.
       Autoconf!   To get this working, it was necessary to: determine and
       set the endian flag; select which libraries are to be linked;
       determine if stream-based memory I/O is enabled.
       This required a major cleanup of the include files, minimizing
       dependencies on external library header files, and getting everything
       to work with both autoconf (HAVE_CONFIG_H) and the old
       customized makefile.  Customization is now all in environ.h.
       pixSaveTiled(): a new way to display tiled images.
       pixtiling.c: interface for splitting an image into a set of
       overlapping tiles, using mirrored borders for tiles touching the
       image boundary.
       pixBlendHardLight(): new blending mode with nice visual effects.
       pixColorFraction(): determines extent of color in image
       Both octree and median-cut color quantization check first if
       image is essentially grayscale; improvements to both algorithms.
       box*TransformOrdered(): general sequence of linear transforms.
       colorquant_reg.c, xformbox_reg.c, hardlight_reg.c: new regr tests.

1.55   16 Mar 08
       New functions for combining two images arbitrarily through a mask,
       including mirrored tiling (pix3.c)
       Modify pixSetMasked*() to work on all images (pix3.c)
       New functions for extracting masked regions such as pixClipMasked()
       (pix3.c) and pixMaskConnComp() and pixMaskBoxa() (boxfunc.c).
       New functions to separate fg from bg (pix3.c), one of which is supported
       by numaSplitDistribution (numafunc.c).
       Modify sobel edge detector to take another parameter (edge.c)
       Support for 4 bpp cmyk color space in jpeg (jpegio.c)
       Modified median cut color quantization (colorquant2.c)
       Renamed colorquant.c (for octree quant) --> colorquant1.c.
       Absorbed conncomp.h and colorquant.h into specific files that
       depend on them (colorquant1.c, conncomp.c, pix.h)
       General convolution with utility for building kernels
       (convolve.c, kernel.c)
       Initial implementation of 1D barcode reader.  So far, we just have the
       signal processing to locate barcodes on a page, deskew them, and
       find the bar widths, along with decoders for two formats.
       (readbarcode.*, prog/barcodetest.c)
       Made the default to stub out read/write for non-tiff image formats
       to memory; it doesn't work on Macs & they were complaining (*io.c)
       Include MSVC project files for building leptonlib under
       windows (leptonlib.*)

1.54   21 Jan 08
       Histogram equalization (enhance.c).
       New functions for pixaa: serialization (r/w), creation
       from pixa, and a tiled/scaled display into a pixa (pixabasic.c,
       pixafunc.c).
       Read/write of tiff to memory (instead of a file, using
       the TIFFClientOpen() callback interface), contributed by Adam
       Langley (tiffio.c, testing in prog/ioformats_reg).
       Improved image statistics functions, both over tiles and
       through a mask over the entire image.  Added standard deviation
       and variance; enable statistics for rgb and colormapped images,
       in addition to 8 bpp grayscale (pix3.c).  New function to
       extract rgb components from a colormapped image (pix2.c).
       Fix pixWriteStringPS() to work with all depths and colormap (psio.c)
       Enable all non-tiff formats to also write and read to/from memory (*io.c)
       Added support for read/write to gif, contributed by Tony Dovgal
       (gifio.c, gifiostub.c, imageio.h).  See Makefile for instructions
       on enabling this.

1.53   29 Dec 07
       Add 4th arg to pixDistanceFunction() to specify b.c.,
       and fixed output to 16 bpp grayscale pix. (seedfill*.c)
       New un-normalized block grayscale convolution (convolve.c)
       Fixed bug in getLogBase2(), so that pixMaxDynamicRange() works
       properly.  This is useful for displaying a 16 bpp pix as
       8 bpp (pixarith.c).  New function for getting rank val for
       rgb over a region specified by a mask (pix3.c).  New function
       for extremem values of rgb colormap (colormap.c).  New
       function pixGlobalNormNoSatRGB(), a variant of pixGlobalNormRGB()
       that prevents saturation for any component above a specified
       rank value (adaptmap.c).  Added mechanism for memory
       management of pix (pix1.c).  Added selective morphology by
       region given by a mask (morphapp.c).  Fixed prototype extracdtion
       to work properly with function prototypes as args; released
       version 1.2 of xtractprotos (parseprotos.c, xtractprotos.c).
       Add a boxa field for pixaa, along with serialization (pixabasic.c),
       and modified display of pixaa to include this (pixafunc.c).
       Coalesced the version numbers for pixa, pixaa, boxa, and boxaa
       serialization (pix.h).
       New progs: modifyhuesat displays modified versions on a grid;
       textlinemask shows simple methods for extracting textline masks.

1.52   25 Nov 07
       Implemented Breuel's whitespace partitioning algorithm (partition.c).
       Generalized pixColorMagnitude() to allow different methods
       for computing the color amount of a pixel (colorcontent.c).
       New methods for computing overlap of boxes (boxfunc.c).
       New methods for painting (solid) and drawing (outline) of boxes,
       replacing boxaDisplay() with pixDrawBoxa*() and pixPaintBoxa*()
       (pix2.c, boxfunc.c).
       Ray Smith fixed bug in the distance function (seedfilllow.c).
       For pixConvertTo1() and pixConvertTo8(), treat input pixs as a
       const and never return a clone or altered cmap (pixconv.c).
       Make pixGlobalNormalRGB() crash-proof (adaptmap.c).
       Tony Dovgal added ability to read jpeg comment (jpegio.c).

1.51   21 Oct 07
       Improved histogramming of gray and color images (pix3.c)
       Histogram statistics (numafunc.c).  Better handling of tiff
       formats, testing rle and packbits output and improving
       level 2 postscript conversion efficiency (readfile.c, psio.c).
       Test program for r/w and display of Sels (prog/seliotest.c).
       Use endiantest to determine automatically which flags to set
       when compiling for big- or little-endians (endiantest.c)
       Compute a color magnitude for each rgb pixel (colorcontent.c).
       Allow separate modification of hue and saturation (enhance.c).
       Global transform of color image for arbitrary white point (adaptmap.c).
   
1.50   07 Oct 07
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY: The  image format enum in imageio.h has
       changed.  This is an ABI change, and it requires
       recompilation of the library.
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       Suggestions by David Bryan again resulted in several changes,
       including improvements to the dwa generating functions and interfaces.
       Major improvements for dwa code generation, including an
       optional filename for the output code, adding function prototypes
       to the code so it can easily be linked outside the library.
       Addition of 2-way composable dwa functions for bricks, with
       code addition to the library, and a new interpreter for dwa
       composable brick sequences  (fmorphauto.c, fhmtauto.c,
       morphtemplate1.c, hmttemplate1.c, morphdwa.c, dwacomb*.2.c, morphseq.c)
       Exhaustively tested in six programs (prog/binmorph*_reg,
       prog/dwamorph*_reg).
       New input modes for Sels, from both color bitmap editors
       and a simple file format (sel1.c).
       Better Sel generation functions in sel2.c, including combs for
       composable brick operations and linear bricks for comparison.
       Removed unnecessary copies for more efficient border add'n & removal. 
       Added RLE basline enc/dec for tiff.
       Binary morphology documentation on the web page updated for these
       changes/additions.
       William Rucklidge unrolled inner loops and added LUTs to
       speed up several more functions, including correlation
       (correlscore.c), centroid calculation (morphapp.c),
       2x linear interp grayscale scanning (scalelow.c),
       thresholding to binary (grayquantlow.c), and removal
       of colormaps to gray (pixconv.c).

1.49   23 Sep 07
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY: The  image format enum in imageio.h has
       changed.  This is an ABI change, and it requires
       recompilation of the library.
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       Suggestions by David Bryan resulted in several changes.
       pixUnpackBinary() unpacks to all depths.
       Can now write and read tiff in LZW and ZIP (gzip) formats.
       These, like uncompressed tiff, work on all bit depths.
       Also enabled pnm 16 bpp r/w, both non-ascii and ascii.
       ioFormatTest() now has better coverage and clarity; this is
       used in prog/ioformats_reg.c.
       Rewrite of morphautogen code to implement opening and closing atomically.
       Cleaner interaction with new text templates (fmorphauto.c,
       fhmtauto.c, sarray.c, *template*.txt,).
       More regression testing (e.g., binmorph1_reg.c, binmorph3_reg.c).

1.48   30 Aug 07
       William Rucklidge sped up pixCorrelationScore() by in-lining
       all bit operations (jbclass.c).
       Generalized rank filtering from 8 bpp to color (rank.c).
       Fixed many functions that take a dest pix so that they don't fail if
       the dimensions or depth are not consistent with the src pix.
       The underlying change for this is to pixCopy() (pix1.c).
       Improved display of Sel as a pix; added selaDisplayInPix() to
       display all Sels in a Sela, orthogonal rotations of Sels (sel1.c).
       New functions for thinning and thickening while preserving connectivity
       and avoiding both free end erosion and dendritic cruft (ccthin.c,
       prog/ccthin1_reg.c, prog/ccthin2_reg.c).
       New function pixaDisplayTiledInRows() for compactly tiling pix
       in a pixa, plus documentation of different existing methods. (pixafunc.c)

1.47   22 Jul 07
       New brick rank order filter (rank.c, prog/ranktest.c, prog/rank_reg.c).
       Use mirror reflection b.c. to avoid special processing at
       boundaries (pix2.c).  Simple sobel edge detector (edge.c).
       Utility for assempling level 2 compressed images in PostScript
       (psio.c, prog/convertfilestops.c).  Enable read/write of 16 bpp,
       grayscale tiff (tiffio.c, pix2.c).
       New function for finding the number of c.c., which is a bit
         faster than finding the b.b. or the component images (conncomp.c)
       New functions for finding local extrema in grayscale image (seedfill.c)

1.46   28 Jun 07
       Added interpreted mode for color morphology (morphseq.c).
       In functions, make effort to consistently do early initialization
       of ptrs to objects returned on the heap.  This is to try to
       avoid letting functions return uninitialized objects, even if
       the return early because of bad input.
       Split pixa.c into 2 files; revised the component filtering
       in both pixafunc.c and boxfunc.c.  Added component filtering
       for "thin" components.
       Added subsampling functions for numa and pta.
       Word segmentation now works at both full and half resolution.
       Better methods for displaying and tiling (for debugging),
       using pixDisplayWrite(), pixaReadFiles() and pixaDisplayTiledAndScaled().

1.45   27 May 07
       Further improvements of orientation and mirror flip detection
       (flipdetect.c).  Added 2x rank downscaling and general integer
       replicative expansion (scale.c).  Simplified interface for
       averaging, and included tiled averaging, which is yet another
       integer reduction scaling function (pix3.c).

1.44   1 May 07
       Split pix2.c into (pix2.c, pix3.c), with basic housekeeping
       functions (e.g., ops on borders, padding) in pix2.c.
       Split numarray.c into (numabasic.c, numafunc.c), with
       constructors and accessors in numabasic.c.  Added a number
       of histogram, rank value and interpolation functions to numafunc.c.
       Add rms and rank difference comparison functions (compare.c).
       Separated orientation and mirror flip detection; fixed the latter
       (flipdetect.c).

1.43   24 Mar 07
       New and fixed functions for handling word boxes (classapp.c)
       More consistent use of L_* flags (e.g., sarray.h, morph.h)
       Morphology on color images (gray ops on each component) (colormorph.c)
       New methods for generating sels; we now have five methods in
       sel1.c and 3 others in selgen.c.  Also a function that
       displays Sels as an image, for use in documentation (sel1.c)
       New high-level converters, such as pixConvertTo8(), pixConvertTo32(),
        pixConvertLossless()   (pixconv.c)
       Identify regression tests, and rename them as prog/*_reg.c.
       Complete revision of plotting package (gplot.c)
       New functions for comparing pix (compare.c)
       New morph application functions, such as the ability to run a
       morph sequence separately on selected c.c. in an image, and
       a fast, quasi-tophat function (morphapp.c)
       Cleanup and new interfaces to border representations of c.c. (ccbord.c)
       Page segmentation application (pageseg.c)
       Better serialization with version control for all major structs.
       Morphological brick operations with 2-way composite sels (morph.c)

1.42   26 Dec 06
       New sorting functions, including 2-d sorting, for boxa and pixa,
       and functions that sort by index (e.g., pixa --> pixa and
       for 2d, pixa --> pixaa; ditto for boxa).  
       New accessors for pix dimensions.  A new strtokSafe() to
       substitute for strtok_r (utils.c).
       Page flip detection, using both rasterop and dwa morphology
       (flipdetect.c), with dwa generation (fliphmtgen.c) and testing
       (prog/fliptest.c).
       Increased basic sels from 42 to 52 (sel2.c).
       Better high-level interfaces for binary morphology with
       brick (separable) sels, both for rasterop (morph.c) and for
       dwa (morphdwa.c); fully tested for both asymmetric and
       symmetric b.c. (prog/morphtest3.c).  Faster area mapping
       reduction for power-of-2 scaling.

1.41   5 Nov 06
       Simplified morph enums, removing all unused ones (morph.h).
       Added new high-level interfaces for adaptive mapping (adaptmap.c).
       New method to extract color content of images (colorcontent.c).
       New method to generate sels from text strings, and to identify
       roman text that is not properly oriented (thanks to Adam Langley).
       Fast grayscale min/max (rank) scale reduction by integer factors.
       New accessors for box and sel, that should be used when possible.
       Thresholding grayscale mask by bandpass (grayquant.c).
       Use of strtok_r() for thread safety.

1.40   15 Oct 06
       Fixed xtractprotos for cygwin.  Minor fixes and improved documentation
       (baseline.c, conncomp.c, pix2.c, morphseq.c, pts.c, numarray.c,
       utils.c, skew.c).  Add ability to quantize an rgb image to a
       specified colormap (colorquant.c); tested in prog/cmapquanttest.c.
       Modifications to allow conditional compilation on MS VC++,
       and to allow I/O calls to be stubbed out (new files: *iostub.c,
       zlibmemstub.c, pstdint.h, arrayaccess.h.ms60)
 
1.39   31 Aug 06
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY:  There has been an interface change to make
       affine, bilinear and projective transforms more general.
       The implementation has been changed to allow them to handle
       all image types and to make them faster (esp. with both sampled
       and interpolated mapping on color images).
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       Added prog/Makefile.mingw to build executables.  This is still
       in a relatively raw state.  It is necessary to download
       gnuwin32 packages for 4 libraries (jpeg, png, zlib, tiff)
       to link with leptonlib and the main, and I still have not
       been able to build static executables (they require jpeg2b.dll, etc.).

1.38   8 Aug 06
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       NOTE CAREFULLY: There has been an interface change to both
       simplify and generalize the grayscale morphology operations:
           pixErodeGray(), pixDilateGray(), pixOpenGray(),
	   pixCloseGray(), pixTophat() and pixMorphGradient().
       The prototypes are not changed; old code will compile, but
       it will be wrong!  The old interface had a size and a type
       (horizontal, vertical, square).  The new interface takes
       horizontal and vertical Sel dimensions.
       |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
       For cross-compilation to make windows programs, you can use
       src/Makefile.mingw to make a windows version of the library.
       6x scale-to-gray function donated by Alberto Accomazzi.
       Interpreter added for sequence of grayscale morphological
       operations, including the tophat (morphseq.c).
       Pixacc container added to simplify the interface
       for accumulator arithmetic using Pix.
       Removed fmorph.c and fmorphlow.c from the library.  These are
       very limited and were deprecated in favor of fmorphauto(), which
       autogens the code from (nearly) any Sel.
       Fixed some of the gray morphology operations, which had errors
       on the boundary.  All gray morph ops should now be rigorously
       OK (graymorph.c).  For testing of graymorph dualities, the 
       the graymorph interpreter, etc., see prog/morphgraytest.c. 

1.37   10 Jul 06
       [After v.36 was released, Jeff Breidenbach built a Debian
       distribution of Leptonica based on v.36, and you can now get Leptonica
       as a Debian package.  Use "apt-cache search leptonica" to see
       what is available.]  The libraries are now combined into a single
       library (liblept.a, liblept.so) and the function prototypes are
       also in a single file (leptprotos.h).  cextract was found not
       to work on recent versions of linux that support 64 bit data types,
       and it is no longer distributed with leptonica.  Instead, I wrote
       a prototype extractor in leptonica (xtractprotos).  When you
       'make allprotos', it now uses this program.  The shared libraries
       now have major and minor numbers corresponding to the version.

1.36   17 Jun 06
       Line graphics generation (graphics.c) reorganized; separated out pta
       generation from rendering.  Can now render with alpha blending.
       Examples of use are given in prog/graphicstest.c.
       Sort functions for basic geometrical objects now have the option
       of returning a numa giving the sort order on the original array.
       The pixa sort can sort with either clones or copies of the pix.

1.35   21 May 06
       The efficiency of the multipage jbig unsupervised classifier is
       significantly improved due to a NumaHash struture implemented
       by Adam Langley.  Functions for computing runlength in 1 bpp
       images have been added.

1.34   7 May 06
       Completely rewrote the jbig unsupervised classifier.
       It now works on multiple pages, and is more accurate in performing
       visually lossless substitutions.  You can classify by connected
       components, characters, or words.  The old data structures
       and interfaces have been removed.  New unpackers from 1 to 2 and
       1 to 4 bpp, with and without colormaps in the dest.

1.33   18 Mar 06
       Generalized color snap to have different src and target colors,
       and to include colormaps (blend.c).  Distribute into root directory
       that specifies the version number (e.g., 1.33).  Add color
       space conversion between rgb and hsv.  Re-bundle thresholding
       code from (binarize*.c, dibitize*.c) to grayquant*.c.
       pixThreshold8() now also quantizes 8 bpp --> 8 bpp.
       High-level pixRotate() that optionally expands image sufficiently
       so that no pixels are lost in any sequence of rotations (rotate.c).
       Generalize shear to specify color of pixels brought in, including
       for in-place operation (shear.c, rotateshear.c).  Faster version of
       color rotation by area mapping, both about center and about UL corner.
       You can now use the standard color rotator (pixRotateAM) and get
       nearly the same speed as with the "Fast" one.

1.32   4 Feb 06
       Ability to specify a sequence of binary morphological
       (& binary reduction/expansion) operations in a single
       function (morphseq.c).  Fast downscaling combined with conversion
       from rbg to gray and to binary (scale.c).  Utility for
       segmenting images by color (colorseg.c).

1.31   7 Jan 06
       Remove more complicated functions that threshold to 2 bpp, 
       retaining the simplest interface.  Retest all thresholding and
       dithering.  Add "ascii" write of PNM.  Improve graphics writing
       of lines; generalize to colormaps.  New colorization functions
       (paintcmap.c, blend.c).

1.30   22 Dec 05
       Remove most instances of fprintf(stderr, ...), except within
       DEBUG or encapsulated in error, warning or info macros. 
       As a result, there is no output to stderr if NO_CONSOLE_IO is defined. 
       Adaptive mapping to make bg uniform (adaptmap.c).  A few bug fixes.
       New PostScript output functions for embedding PS files
       (prog/converttops).  Generalized some image enhancement functions.
       New functions for generating hit-miss sels.

1.29   12 Nov 05
       More flexible blending of two images, with and without colormaps
       (see blend.c).  Painting colormapped images through masks, etc
       (see paintcmap.c).  More flexible interface for gamma and
       contrast enhancement (see enhance.c).

1.28   8 Oct 05
       Removed all pix colormaps for 1 bpp.  Allow programmatic resetting
       of binary morphology boundary conditions.  Added (yet) another
       simple octcube color quantizer.  New colormap operations.

1.27   24 Sep 05
       Renamed many of the enums and typedefs to avoid namespace
       collisions.  This includes structs and typedefs for BMP.
       Interface change to pixClipRectangle(); apologies to everyone
       whose code is broken by these changes -- I hope it's worth it.
       Removed colormap.h; simplified all colormap usage, hiding details
       from all but a few colormap functions.  Am now saving file format
       in the pix when an image is read, and can by default write
       out in this format.  Resolution info added for jpeg and png.
       Added L_INFO* macros and l_info* fctns for printing
       (e.g., debugging) info.  Suggestions and code kindly
       supplied by Dave Bryan, who helped solve compatibility issues
       with MINGW32 (e.g., in timing and directory functions).
       Added some blending and linear TRC functions.
       Generalized pixEqual() to include all cases with and without
       colormaps.  New regression tests in prog: ioformats, equaltest.

1.26   24 Jul 05
       Generalized affine pointwise to do interpolation as well as
       sampling.  For both projective and bilinear transforms,
       implemented using both sampling and interpolation.
       Added function to remove keystoning by computing the necessary
       projective transform and doing it.  Also find baselines in text images.
       Added downscaling using accurate area-mapping over subpixels.

1.25   25 Jun 05
       Better endian conversion fctns for 2 and 4 byte words.
       Remove colormaps before converting by thresholds.
       Added functions to read header parameters for png and tiff.

1.24   5 Jun 05
       Added image splitting to allow printing in tiles (as several pages).
       Added new octree quantization function to generate 4 and 8 bpp
       colormapped output (not dithered).  Fixed bmp resolution.
       Added new flag for colormap removal (using dest depth based on
       src colormap).  Added I/O tests (prog/ioformats.c)

1.23   10 Apr 05
       Added thresholding from 8 bpp to 2 and 4 bpp, allowing specification
       of both the number of output levels and whether or not a colormap
       is made.

1.22   27 Mar 05
       Add pointer queue facility.  To demonstrate it, you can now
       generate a binary maze using a cellular automaton and find
       the shortest path between two points in the maze.  Add heap
       of pointers (keyed on the first field), which is used to
       implement a priority queue.  This is applied to search for
       a "least cost" path on a grayscale image (a generalization
       of a binary maze).

1.21   28 Feb 05
       Read/write of colormaps to file.  For gplot, add a new
       latex output terminal.  Bring ptrs into 21st century by
       including stdint.h, and using uintptr_t for the ptr address
       arithmetic in arrayaccess.*.  This seems to be OK back to
       RH 7.0, but if you run into trouble with an earlier
       C compiler, let me know.  Also, use enums for global
       constants whenever possible, and qualify named constants
       (e.g., ADD --> ARITH_ADD, HORIZ --> MORPH_HORIZ) to avoid
       possible interactions with other libraries.

1.20   31 Jan 05
       Speed up of tiffio and pngio with byte swap generating new pix.
       In textops.c, ability to split string into paragraphs, 
       in preparation for more general typesetting.
       Automatic hit-miss Sel generation for pattern matching.
       Fast downscaling using a lowpass filter and subsampling.
       Generalization of several grayscale and color operations
       to work on colormapped images.  Improved scale-to-gray and
       scaling reduction operations to be antialiased for best results.

1.19   30 Nov 04
       Additions to fileIO: (1) new jpeg reading options, such as
       returning warnings and scaled raster; (2) ability to write
       custom tiff flags.  Better tiling functions.
       Edge extraction, both with grayscale morphology
       and clipped convolution filters.  More general painting
       through a binary mask: pixSetMaskedGeneral().
       Unpacking from binary to 8, 16 and 32 bpp.  Thresholding
       and dithering from 8 bpp to 2 bpp ("dibitization").  New bitmap
       font facility, using a single rendered font in a variety of
       sizes: allows painting the text on an image (binary, gray, RGB).
       (People have asked for the ability to write text on images).

1.18   25 Aug 04
       Changed typedefs of built-in types to avoid possible conflicts.
       Cleaned up and tested all programs in the prog directory.
       Simplified and fixed the pixSetMasked() and pixCombineMasked()
       functions.

1.17   31 May 04
       Implemented distance function for 16 bpp.  We can now generate
       out 16 bpp PNG.  Simple programs for generating PS from a
       directory of g4tiff or jpeg images.  Changed implementation of
       erosion to allow either asymmetric or symmetric boundary conditions.
       The distinction is described on the binary morphology web page.
       Allow read/write of multipage TIFF files.  Implemented
       read/write of PNM files.

1.16   31 Mar 04
       New depth conversion functions, improved conversion to false color,
       new contour rendering (onto 1 bpp or onto the src grayscale image),
       new orthogonal rotations, better interface for doing arithmetic
       on 2-d arrays using a pix, improved distance function.

1.15   31 Jan 04
       Fast interpolated color rotation with 4x4 subpixels; has
       nearly the accuracy of the slower method using 16x16 subpixels.
       Demonstration of line removal from grayscale sketch in
       prog/lineremoval.c.  Conversion of grayscale to false color.
       Fixed shear and rotation functions to handle angle = 0.0 properly.
       Other small fixes and interface improvements.

1.14   30 Nov 03
       Small implementation changes to list.c.  Better sorting
       routines for number arrays (numa), plus sorting for box
       arrays (boxa) and pix arrays (pixa).  PostScript wrapper
       for jpeg.  Better handling of colormaps, and a simple
       function to convert an RGB pix with not more than 256
       colors to the smallest colormapped pix.  PS output wrappers
       for JFIF JPEG and TIFF G4 files.  Comments compatible
       with doxygen for automatic documentation.

1.13   31 Oct 03
       Cleaned up documentation in src.  Made libraries and test programs
       ANSI C++ compliant.  Added special cases to rasterops for
       alignment to word boundaries.  Fixed pngio.c to work with
       most recent libpng (1.2.5).

1.12   30 Jun 03
       Implemented border chain representation from a binary image,
       writes/reads a compressed version, and renders the original
       image back from the borders.   Also writes outline file out
       in svg format.  Number arrays (numa) and point arrays (pta)
       are also extended to 2nd level arrays (numaa, ptaa).
       Serialized I/O for boxa, pta, and pixa.

1.11   31 May 03
       Implemented generic list handling, for doubly-linked
       list cons cells and arbitrary objects.

1.10   14 Apr 03
       Implemented simple image enhancements in gray and color:
       gamma correction, contrast enhancement, unsharp masking.
       Extended smoothing via block convolution to color.
       Implemented auto-gen'd DWA version of hit-miss transform;
       the code for generating these hmt routines is very similar to
       that for DWA auto-gen'd erosion and dilation.
       
1.9    28 Feb 03
       Implemented a safe, expandable byte queue.  As an example of
       its use, implemented memory-to-memory compression and decompression
       using zlib.  Generalized PS write to include RGB color.
       Implemented a method to find image skew.

1.8    31 Jan 03
       Implemented a simple 1-pass color quantization with dithering,
       and improved the 2-pass octree color quantization.
       Documented with an application page, that includes jbig2.
       Added new general sampling operations and made a table
       that summarizes the available scaling operations.

1.7    31 Dec 02
       Added pixHtmlViewer(), a formatter that allows portable viewing of
       a set of images (like a slide show) in a browser.
       Implemented better octree color quantization, with variable
       number of colors, pruning the octree for good color clusters,
       and fast traversal for pixel assignment to colormap.

1.6    30 Nov 02
       Generalized shear and shear rotation to arbitrary locations
       about which the operation is performed.  Implemented in-place
       translation using pixRasteropIP().  Implemented arbitrary
       affine transform of image two ways: pointwise and sequential.
       Added binarization by error diffusion.  Added simple color
       quantization by octree.

1.5    31 Oct 02
       Put jpeglib.h in local directory.  This, along with the jmorecfg.h
       file there prevents compiler warnings about redefined typedefs.
       Compiled everything with g++ to make strictly ansi C compatible.
       Added interface gplotFromFile() for simple file-based plotting with 
       gnuplot 3.7.2.   Added functions to convert 2, 4 and 8 bpp
       color-mapped (i.e., palletted) images to 24 bpp color or
       8 bpp grayscale.  Added several jbig2 application cores that
       only require a simple wrapper to make into programs.

1.4    30 Sep 02
       Added interface to gnuplot 3.7.2 and to x11 display of images. 
       Added new functions with arrays of images for use in applications
       such as jbig2 encoders, along with a simple jbig2 implementation
       using either hausdorff or correlation scoring.  Added centroid
       finder for images.  For accessing image arrays from arrays of
       image arrays, added a "new reference" (NEW_REF) flag, with a
       ref count attached to the array.  Added power-of-2 binary
       expansion and reduction.

1.3    30 Jun 02
       Extended connected components to 8.  Added morphological
       operations tophat and hdome, along with clipped arithmetic
       operators on grayscale images.  Fixed memory error in
       rasteropGeneralLow() that was found using valgrind.
       Tested most operations with valgrind for memory errors.
       Replaced integer arrays with number arrays, to include floats.
       Added arithmetic functions on grayscale images.

1.2    30 May 02
       Added connected component utility, stack utility, pix arrays,
       line drawing and seed filling.  Binary reconstruction,
       both morphological and raster-oriented, are now supported
       for 4 and 8 connected fills.  Added the distance function
       on binary images, grayscale reconstruction, and grayscale
       morphology using the Gil-Werman method.

1.1    30 Apr 02
       Added orthogonal rotations, binary scaling, PS output,
       binary reconstruction, integer arrays, structuring element
       input/output.

1.0    25 Feb 02
       Initial distribution, with rasterops, binary morphology (two
       implementations: rasterops and dwa), affine transforms
       (translation, shear, scaling, rotation), fast convolution,
       and basic i/o (BMP, PNG and JPEG).